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: David Cantrell To: git-commits@fedoraproject.org Subject: [rpms/ckermit] epel8: Remove the 'rpmbuild -bp' directory from git, come on Date: Fri, 18 Sep 2026 13:57:58 GMT Message-ID: <178973987845.1.4199732905164093875.rpms-ckermit-3abe589b4ed4@fedoraproject.org> List-ID: X-Git-Repo: rpms/ckermit X-Git-Branch: epel8 X-Git-Rev: 3abe589b4ed4c354ea3bfcf775796b18004cd08b QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvY2tlcm1pdApCcmFu Y2ggOiBlcGVsOApDb21taXQgOiAzYWJlNTg5YjRlZDRjMzU0ZWEzYmZjZjc3NTc5NmIxODAwNGNk MDhiCkF1dGhvciA6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAYnVyZGVsbC5vcmc+CkRhdGUg ICA6IDIwMjUtMDEtMjJUMTQ6MjY6MjAtMDU6MDAKU3RhdHMgIDogKzAvLTQxMDU5MyBpbiA4MSBm aWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMvY2tlcm1p dC9jLzNhYmU1ODliNGVkNGMzNTRlYTNiZmNmNzc1Nzk2YjE4MDA0Y2QwOGI/YnJhbmNoPWVwZWw4 CgpMb2c6ClJlbW92ZSB0aGUgJ3JwbWJ1aWxkIC1icCcgZGlyZWN0b3J5IGZyb20gZ2l0LCBjb21l IG9uCgotLS0KZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4z MDIvQ09QWUlORy5UWFQgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL0NP UFlJTkcuVFhUCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDBmMjM2Li4wMDAwMDAw Ci0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvQ09QWUlORy5UWFQK KysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1USEUgQy1LRVJNSVQgOS4wIExJQ0VOU0UK LQotRnJpIEp1biAyNCAxNDo0MzozNSAyMDExCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi1hcmUg bWV0OgotIAotICsgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAKLSArIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKLSAgIGRpc3RyaWJ1dGlvbi4KLSAKLSArIE5laXRoZXIgdGhlIG5hbWUgb2YgQ29sdW1iaWEg VW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGFueQotICAgY29udHJpYnV0b3JzIG1heSBiZSB1 c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gCi1U SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O VFJJQlVUT1JTCi0iQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVAotTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi1BIFBBUlRJQ1VMQVIgUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotSE9MREVSIE9S IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAotU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVAotTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi1EQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLVRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRQotT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVp bGQvY2tlcm1pdC05LjAuMzAyL1JFQURNRS5mZWRvcmEgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL1JFQURNRS5mZWRvcmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IGJmYTQxYWMuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9SRUFETUUuZmVkb3JhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotSWYg dW5wcml2aWxlZ2VkIHVzZXJzIGF0dGVtcHQgdG8gYWNjZXNzIGEgc2VyaWFsIHBvcnQsIGUuZy4K LS9kZXYvdHR5UzxuPiBvciAvZGV2L3R0eVVTQjxuPiwgdGhleSB3aWxsIG5vcm1hbGx5IGdldCBh biBlcnJvcgotbWVzc2FnZSBzdWNoIGFzOgotCi0gICAgU29ycnksIHdyaXRlIGFjY2VzcyB0byBV VUNQIGxvY2tmaWxlIGRpcmVjdG9yeSBkZW5pZWQuCi0KLVRoaXMgbWVzc2FnZSBpcyBhY3R1YWxs eSBkdWUgdG8gcGVybWlzc2lvbnMgb24gdGhlIGRldmljZSwgbm90IHRoZQotbG9ja2ZpbGUgZGly ZWN0b3J5LgotCi1JZiBpdCBpcyBkZXNpcmVkIHRvIGFsbG93IHNwZWNpZmljIHVucHJpdmlsZWdl ZCB1c2VycyB0byB1c2UgY2tlcm1pdAotdG8gYWNjZXNzIHNlcmlhbCBwb3J0cywgYWRkIHRob3Nl IHVzZXJzIHRvIHRoZSAiZGlhbG91dCIgZ3JvdXAuICBPbmUKLXdheSB0byBhY2NvbXBsaXNoIHRo aXMgaXMgdXNpbmcgYSBjb21tYW5kIGxpbmUgc3VjaCBhczoKLQotICAgIHN1ZG8gdXNlcm1vZCAt YSAtRyBkaWFsb3V0IDx1c2VybmFtZT4KLQotVGhpcyB3aWxsIGFwcGx5IHRvIGZ1dHVyZSBsb2dp bnMgYnkgdGhhdCB1c2VyLgotCi1JZiB5b3Ugd2FudCB0byBtYWtlIHRoZSBzZXJpYWwgcG9ydHMg YWNjZXNzaWJsZSB0byBhbGwgdXNlcnMgd2l0aG91dAotYWRkaW5nIHRoZW0gdG8gdGhlIGRpYWxv dXQgZ3JvdXAgKG5vdCByZWNvbW1lbmRlZCksIHlvdSBjYW4gY2hhbmdlIHRoZQotcGVybWlzc2lv bnMgb2YgdGhlIHNlcmlhbCBkZXZpY2UgdG8gNjY2LCBlLmcuLAotCi0gICAgc3VkbyBjaG1vZCA2 NjYgL2Rldi90dHlTPG4+CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja19jcnAuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4z MDIvY2tfY3JwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5M2QwYjQuLjAwMDAw MDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja19jcnAuYwor KysgL2Rldi9udWxsCkBAIC0xLDU2MjIgKzAsMCBAQAotY2hhciAqY2tjcnB2ID0gIkVuY3J5cHRp b24gRW5naW5lLCA5LjAuMTE3LCAxOSBNYXIgMjAxMCI7Ci0vKgotICBDIEsgXyBDIFIgUCAuIEMg IC0gIENyeXB0b2dyYXBoeSBmb3IgQy1LZXJtaXQiCi0KLSAgQ29weXJpZ2h0IChDKSAxOTk4LCAy MDEwLAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2Yg TmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09Q WUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMg bW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLQotICBBdXRob3I6Ci0gIEpl ZmZyZXkgRSBBbHRtYW4gKGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20pCi0gIFNlY3VyZSBF bmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQotKi8KLQotI2RlZmluZSBDS19DUlBfQwotI2lm ZGVmIENLX0RFUwotI2lmZGVmIENLX1NTTAotI2lmbmRlZiBMSUJERVMKLSNkZWZpbmUgTElCREVT Ci0jZW5kaWYgLyogTElCREVTICovCi0jZW5kaWYgLyogQ0tfU1NMICovCi0jZW5kaWYgLyogQ0tf REVTICovCi0KLSNpZmRlZiBDUllQVF9ETEwKLSNkZWZpbmUgQ0tfQVVUSEVOVElDQVRJT04KLSNk ZWZpbmUgQ0tfRU5DUllQVElPTgotI2RlZmluZSBDS19ERVMKLSNkZWZpbmUgQ0tfQ0FTVAotI2lm bmRlZiBMSUJERVMKLSNkZWZpbmUgTElCREVTCi0jZW5kaWYgLyogTElCREVTICovCi0KLSNkZWZp bmUgVEVMQ01EUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0byBkZWZpbmUgbmFtZSBhcnJh eSAqLwotI2RlZmluZSBURUxPUFRTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIGRlZmlu ZSBuYW1lIGFycmF5ICovCi0jZGVmaW5lIEVOQ1JZUFRfTkFNRVMKLSNlbmRpZiAvKiBDUllQVF9E TEwgKi8KLQotI2luY2x1ZGUgImNrY3N5bS5oIgotI2luY2x1ZGUgImNrY2RlYi5oIgotI2luY2x1 ZGUgImNrY25ldC5oIgotCi0jaWZkZWYgREVCVUcKLSN1bmRlZiBERUJVRwotI2VuZGlmIC8qIERF QlVHICovCi0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotI2lmZGVmIENLX0VOQ1JZUFRJT04K LSNkZWZpbmUgRU5DUllQVElPTgotI2lmZGVmIENLX0RFUwotI2RlZmluZSBERVNfRU5DUllQVElP TgotI2VuZGlmIC8qIENLX0RFUyAqLwotI2lmZGVmICBDS19DQVNUCi0jZGVmaW5lIENBU1RfRU5D UllQVElPTgotI2VuZGlmIC8qIENLX0NBU1QgKi8KLSNpZmRlZiBDT01NRU5UCi0jZGVmaW5lIENB U1RfRVhQT1JUX0VOQ1JZUFRJT04KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogQ0tf RU5DUllQVElPTiAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0KLSNpZmRlZiBD S19FTkNSWVBUSU9OCi0KLSNpbmNsdWRlICJja3VjbWQuaCIgICAgICAgICAgICAgICAgICAgICAv KiBGb3Igc3RydWN0IGtleXRhYiBkZWZpbml0aW9uICovCi0jaW5jbHVkZSAiY2t1YXRoLmgiCi0j aW5jbHVkZSAiY2t1YXQyLmgiCi0jaWZkZWYgTUlUX0NVUlJFTlQKLSNpbmNsdWRlIDxrcmI1Lmg+ Ci0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1 ZGUgPHN0cmluZy5oPgotI2lmZGVmIE9TMgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2lmZGVmIE9T Mk9OTFkKLSNpbmNsdWRlIDxvczIuaD4KLSNlbmRpZiAvKiBPUzJPTkxZICovCi0jaW5jbHVkZSAi Y2tvc3luLmgiCi0jZWxzZSAvKiBPUzIgKi8KLXN0YXRpYyBjaGFyICogdG1wc3RyaW5nID0gTlVM TDsKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBDQVNUX09SX0VYUE9SVAotI2lmZGVmIENB U1RfRU5DUllQVElPTgotI2RlZmluZSBDQVNUX09SX0VYUE9SVAotI2VuZGlmIC8qIENBU1RfRU5D UllQVElPTiAqLwotI2lmZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KLSNkZWZpbmUgQ0FTVF9P Ul9FWFBPUlQKLSNlbmRpZiAvKiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OICovCi0jZW5kaWYgLyog Q0FTVF9PUl9FWFBPUlQgKi8KLQotI2lmZGVmIE1BQ09TWAotI3VuZGVmIExJQkRFUwotI2VuZGlm IC8qIE1BQ09TWCAqLwotCi0jaWZkZWYgQ1JZUFRfRExMCi1pbnQgY21kX3F1b3RpbmcgPSAwOwot Ci0jaWZuZGVmIFRFTE9QVF9NQUNSTwotaW50Ci10ZWxvcHRfaW5kZXgob3B0KSBpbnQgb3B0OyB7 Ci0gICAgaWYgKCBvcHQgPj0gMCAmJiBvcHQgPD0gVEVMT1BUX1NFTkRfVVJMICkKLSAgICAgICAg cmV0dXJuKG9wdCk7Ci0gICAgZWxzZSBpZiAoIG9wdCA+PSBURUxPUFRfUFJBR01BX0xPR09OICYm IG9wdCA8PSBURUxPUFRfUFJBR01BX0hFQVJUQkVBVCApCi0gICAgICAgIHJldHVybihvcHQtODkp OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuKE5URUxPUFRTKTsKLX0KLQotaW50Ci10ZWxvcHRf b2sob3B0KSBpbnQgb3B0OyB7Ci0gICAgcmV0dXJuKChvcHQgPj0gVEVMT1BUX0JJTkFSWSAmJiBv cHQgPD0gVEVMT1BUX1NFTkRfVVJMKSB8fAotICAgICAgICAob3B0ID49IFRFTE9QVF9QUkFHTUFf TE9HT04gJiYgb3B0IDw9IFRFTE9QVF9QUkFHTUFfSEVBUlRCRUFUKSk7Ci19Ci0KLUNIQVIgKgot dGVsb3B0KG9wdCkgaW50IG9wdDsgewotICAgIGlmICggdGVsb3B0X29rKG9wdCkgKQotICAgICAg ICByZXR1cm4odGVsb3B0c1t0ZWxvcHRfaW5kZXgob3B0KV0pOwotICAgIGVsc2UKLSAgICAgICAg cmV0dXJuKCJVTktOT1dOIik7Ci19Ci0jZW5kaWYgLyogVEVMT1BUX01BQ1JPICovCi0KLXN0YXRp YyBpbnQgKCpwX3R0b2wpKGNoYXIgKixpbnQpPU5VTEw7Ci1zdGF0aWMgaW50ICgqcF9kb2RlYnVn KShpbnQsY2hhciAqLGNoYXIgKixDS19PRkZfVCk9TlVMTDsKLXN0YXRpYyBpbnQgKCpwX2RvaGV4 ZHVtcCkoY2hhciAqLGNoYXIgKixpbnQpPU5VTEw7Ci1zdGF0aWMgdm9pZCAoKnBfdG5fZGVidWcp KGNoYXIgKik9TlVMTDsKLXN0YXRpYyBpbnQgKCpwX3ZzY3JucHJpbnRmKShjaGFyICosIC4uLik9 TlVMTDsKLXN0YXRpYyB2b2lkICogcF9rNV9jb250ZXh0PU5VTEw7Ci1zdGF0aWMgdW5zaWduZWQg bG9uZyAoKnBfcmVxdGVsbXV0ZXgpKHVuc2lnbmVkIGxvbmcpPU5VTEw7Ci1zdGF0aWMgdW5zaWdu ZWQgbG9uZyAoKnBfcmVsdGVsbXV0ZXgpKHZvaWQpPU5VTEw7Ci0KLXVuc2lnbmVkIGxvbmcKLVJl cXVlc3RUZWxuZXRNdXRleCh1bnNpZ25lZCBsb25nIHgpCi17Ci0gICAgaWYgKCBwX3JlcXRlbG11 dGV4ICkKLSAgICAgICAgcmV0dXJuIHBfcmVxdGVsbXV0ZXgoeCk7Ci0gICAgcmV0dXJuIDA7Ci19 Ci0KLXVuc2lnbmVkIGxvbmcKLVJlbGVhc2VUZWxuZXRNdXRleCh2b2lkKQotewotICAgIGlmICgg cF9yZWx0ZWxtdXRleCApCi0gICAgICAgIHJldHVybiBwX3JlbHRlbG11dGV4KCk7Ci0gICAgcmV0 dXJuIDA7Ci19Ci0KLWludAotdHRvbChjaGFyICogcywgaW50IG4pCi17Ci0gICAgaWYgKCBwX3R0 b2wgKQotICAgICAgICByZXR1cm4ocF90dG9sKHMsbikpOwotICAgIGVsc2UKLSAgICAgICAgcmV0 dXJuKC0xKTsKLX0KLQotaW50Ci1kb2RlYnVnKGludCBmbGFnLCBjaGFyICogczEsIGNoYXIgKiBz MiwgQ0tfT0ZGX1QgbikKLXsKLSAgICBpZiAoIHBfZG9kZWJ1ZyApCi0gICAgICAgIHJldHVybihw X2RvZGVidWcoZmxhZyxzMSxzMixuKSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4oLTEpOwot fQotCi1pbnQKLWRvaGV4ZHVtcCggY2hhciAqIHMxLCBjaGFyICogczIsIGludCBuICkKLXsKLSAg ICBpZiAoIHBfZG9oZXhkdW1wICkKLSAgICAgICAgcF9kb2hleGR1bXAoczEsczIsbik7Ci0gICAg cmV0dXJuKDApOwotfQotCi12b2lkCi10bl9kZWJ1ZyggY2hhciAqIHMgKQotewotICAgIGlmICgg cF90bl9kZWJ1ZyApCi0gICAgICAgIHBfdG5fZGVidWcocyk7Ci19Ci0KLXN0YXRpYyBjaGFyIG15 cHJ0ZnN0cls0MDk2XTsKLWludAotVnNjcm5wcmludGYoY29uc3QgY2hhciAqIGZvcm1hdCwgLi4u KSB7Ci0gICAgaW50IGksIGxlbiwgcmM9MDsKLSAgICBjaGFyICpjcDsKLSAgICB2YV9saXN0IGFw OwotCi0gICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0jaWZkZWYgTlQKLSAgICByYyA9IF92c25w cmludGYobXlwcnRmc3RyLCBzaXplb2YobXlwcnRmc3RyKS0xLCBmb3JtYXQsIGFwKTsKLSNlbHNl IC8qIE5UICovCi0gICAgcmMgPSB2c3ByaW50ZihteXBydGZzdHIsIGZvcm1hdCwgYXApOwotI2Vu ZGlmIC8qIE5UICovCi0gICAgdmFfZW5kKGFwKTsKLQotICAgIGlmICggcF92c2NybnByaW50ZiAp Ci0gICAgICAgIHJldHVybihwX3ZzY3JucHJpbnRmKG15cHJ0ZnN0cikpOwotICAgIGVsc2UKLSAg ICAgICAgcmV0dXJuKC0xKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuX2hleChDSEFS ICogYnVmLCBpbnQgYnVmbGVuLCBDSEFSICogZGF0YSwgaW50IGRhdGFsZW4pCi0jZWxzZSAvKiBD S19BTlNJQyAqLwotdG5faGV4KGJ1ZiwgYnVmbGVuLCBkYXRhLCBkYXRhbGVuKQotICAgIENIQVIg KiBidWY7Ci0gICAgaW50IGJ1ZmxlbjsKLSAgICBDSEFSICogZGF0YTsKLSAgICBpbnQgZGF0YWxl bjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGludCBpID0gMCwgaiA9IDAsIGsgPSAw OwotICAgIENIQVIgdG1wWzhdOwotI2lmZGVmIENPTU1FTlQKLSAgICBpbnQgd2FzX2hleCA9IDE7 Ci0KLSAgICBmb3IgKGs9MDsgayA8IGRhdGFsZW47IGsrKykgewotICAgICAgICBpZiAoZGF0YVtr XSA8IDMyIHx8IGRhdGFba10gPj0gMTI3KSB7Ci0gICAgICAgICAgICBzcHJpbnRmKHRtcCwiJXMl MDJYICIsd2FzX2hleD8iIjoiXCIgIixkYXRhW2tdKTsKLSAgICAgICAgICAgIHdhc19oZXggPSAx OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3ByaW50Zih0bXAsIiVzJWMiLHdhc19o ZXg/IlwiIjoiIixkYXRhW2tdKTsKLSAgICAgICAgICAgIHdhc19oZXggPSAwOwotICAgICAgICB9 Ci0gICAgICAgIGNrc3RybmNhdChidWYsdG1wLGJ1Zmxlbik7Ci0gICAgfQotICAgIGlmICghd2Fz X2hleCkKLSAgICAgICAgY2tzdHJuY2F0KGJ1ZiwiXCIgIixidWZsZW4pOwotI2Vsc2UgLyogQ09N TUVOVCAqLwotICAgIGlmIChkYXRhbGVuIDw9IDAgfHwgZGF0YSA9PSBOVUxMKQotICAgICAgICBy ZXR1cm4oMCk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YWxlbjsgaSsrKSB7Ci0gICAgICAg IGNrc3RybmNhdChidWYsIlxyXG4gICIsYnVmbGVuKTsKLSAgICAgICAgZm9yIChqID0gMCA7IChq IDwgMTYpOyBqKyspIHsKLSAgICAgICAgICAgIGlmICgoaSArIGopIDwgZGF0YWxlbikKLSAgICAg ICAgICAgICAgc3ByaW50Zih0bXAsCi0gICAgICAgICAgICAgICAgICAgICAgIiVzJTAyeCAiLAot ICAgICAgICAgICAgICAgICAgICAgIChqID09IDggPyAifCAiIDogIiIpLAotICAgICAgICAgICAg ICAgICAgICAgIChDSEFSKSBkYXRhW2kgKyBqXQotICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHNwcmludGYodG1wLAotICAgICAgICAgICAg ICAgICAgICAgICIlcyAgICIsCi0gICAgICAgICAgICAgICAgICAgICAgKGogPT0gOCA/ICJ8ICIg OiAiIikKLSAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgY2tzdHJuY2F0KGJ1 Zix0bXAsYnVmbGVuKTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jYXQoYnVmLCIgIixidWZs ZW4pOwotICAgICAgICBmb3IgKGsgPSAwOyAoayA8IDE2KSAmJiAoKGkgKyBrKSA8IGRhdGFsZW4p OyBrKyspIHsKLSAgICAgICAgICAgIHNwcmludGYodG1wLAotICAgICAgICAgICAgICAgICAgICAg IiVzJWMiLAotICAgICAgICAgICAgICAgICAgICAgKGsgPT0gOCA/ICIgIiA6ICIiKSwKLSAgICAg ICAgICAgICAgICAgICAgIGlzcHJpbnQoZGF0YVtpICsga10pID8gZGF0YVtpICsga10gOiAnLicK LSAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBja3N0cm5jYXQoYnVmLHRtcCxi dWZsZW4pOwotICAgICAgICB9Ci0gICAgICAgIGkgKz0gaiAtIDE7Ci0gICAgfSAvKiBlbmQgZm9y ICovCi0gICAgY2tzdHJuY2F0KGJ1ZiwiXHJcbiAgIixidWZsZW4pOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLSAgICByZXR1cm4oc3RybGVuKGJ1ZikpOwotfQotCi0jaWZkZWYgQ09NTUVOVAotI2Rl ZmluZSB0dG9sICAgICAgICBkbGxfdHRvbAotI2RlZmluZSBkb2RlYnVnICAgICBkbGxfZG9kZWJ1 ZwotI2RlZmluZSBkb2hleGR1bXAgICBkbGxfZG9oZXhkdW1wCi0jZGVmaW5lIHRuX2RlYnVnICAg IGRsbF90bl9kZWJ1ZwotI2RlZmluZSBWc2NybnByaW50ZiBkbGxfdnNjcm5wcmludGYKLSNlbmRp ZiAvKiBDT01NRU5UICovCi0KLWNoYXIgdG5fbXNnW1ROX01TR19MRU5dLCBoZXhidWZbVE5fTVNH X0xFTl07ICAgLyogZnJvbSBja2NuZXQuYyAqLwotaW50IGRlYmxvZz0xLCBkZWJzZXM9MSwgdG5f ZGViPTE7Ci0jZWxzZSAvKiBDUllQVF9ETEwgKi8KLWV4dGVybiBjaGFyIHRuX21zZ1tdLCBoZXhi dWZbXTsgICAgICAgICAvKiBmcm9tIGNrY25ldC5jICovCi1leHRlcm4gaW50IGRlYmxvZywgZGVi c2VzLCB0bl9kZWI7Ci0jaWZkZWYgTUlUX0NVUlJFTlQKLWV4dGVybiBrcmI1X2NvbnRleHQgazVf Y29udGV4dDsKLSNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLwotI2VuZGlmIC8qIENSWVBUX0RMTCAq LwotCi0jaWZkZWYgTElCREVTCi0jaWZkZWYgTUFDT1NYCi0jZGVmaW5lIGRlc19uZXdfcmFuZG9t X2tleSAgICAgICAgICAgIGNrX2Rlc19uZXdfcmFuZG9tX2tleQotI2RlZmluZSBkZXNfc2V0X3Jh bmRvbV9nZW5lcmF0b3Jfc2VlZCBja19kZXNfc2V0X3JhbmRvbV9nZW5lcmF0b3Jfc2VlZAotI2Rl ZmluZSBkZXNfa2V5X3NjaGVkICAgICAgICAgICAgICAgICBja19kZXNfa2V5X3NjaGVkCi0jZGVm aW5lIGRlc19lY2JfZW5jcnlwdCAgICAgICAgICAgICAgIGNrX2Rlc19lY2JfZW5jcnlwdAotI2Rl ZmluZSBkZXNfc3RyaW5nX3RvX2tleSAgICAgICAgICAgICBja19kZXNfc3RyaW5nX3RvX2tleQot I2RlZmluZSBkZXNfZml4dXBfa2V5X3Bhcml0eSAgICAgICAgICBja19kZXNfZml4dXBfa2V5X3Bh cml0eQotI2VuZGlmIC8qIE1BQ09TWCAqLwotI2lmbmRlZiBVTklYCi0jZGVmaW5lIGRlc19uZXdf cmFuZG9tX2tleSAgICAgICAgICAgIGRlc19yYW5kb21fa2V5Ci0jZGVmaW5lIGRlc19zZXRfcmFu ZG9tX2dlbmVyYXRvcl9zZWVkIGRlc19yYW5kb21fc2VlZAotI2VuZGlmIC8qIFVOSVggKi8KLSNk ZWZpbmUgZGVzX2ZpeHVwX2tleV9wYXJpdHkgICAgICAgICAgZGVzX3NldF9vZGRfcGFyaXR5Ci0j aWZkZWYgT1BFTlNTTF8wOTcKLSNkZWZpbmUgT1BFTlNTTF9FTkFCTEVfT0xEX0RFU19TVVBQT1JU Ci0jaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSNlbmRpZiAvKiBPUEVOU1NMXzA5NyAqLwotI2Vs c2UgLyogTElCREVTICovCi0jaWZkZWYgVU5JWAotI2RlZmluZSBkZXNfc2V0X3JhbmRvbV9nZW5l cmF0b3Jfc2VlZCh4KSBkZXNfaW5pdF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvcih4KQotI2VuZGlm IC8qIFVOSVggKi8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgZGVzX25ld19yYW5kb21fa2V5ICAgICAg ICAgICAgY2tfZGVzX25ld19yYW5kb21fa2V5Ci0jZGVmaW5lIGRlc19zZXRfcmFuZG9tX2dlbmVy YXRvcl9zZWVkIGNrX2Rlc19zZXRfcmFuZG9tX2dlbmVyYXRvcl9zZWVkCi0jZGVmaW5lIGRlc19r ZXlfc2NoZWQgICAgICAgICAgICAgICAgIGNrX2Rlc19rZXlfc2NoZWQKLSNkZWZpbmUgZGVzX2Vj Yl9lbmNyeXB0ICAgICAgICAgICAgICAgY2tfZGVzX2VjYl9lbmNyeXB0Ci0jZGVmaW5lIGRlc19z dHJpbmdfdG9fa2V5ICAgICAgICAgICAgIGNrX2Rlc19zdHJpbmdfdG9fa2V5Ci0jZGVmaW5lIGRl c19maXh1cF9rZXlfcGFyaXR5ICAgICAgICAgIGNrX2Rlc19maXh1cF9rZXlfcGFyaXR5Ci0jZW5k aWYgLyogT1MyICovCi0jZW5kaWYgLyogTElCREVTICovCi0KLSNpZmRlZiBDS19ERVMKLS8qIFRo aXMgY29kZSBjb21lcyBmcm9tIEVyaWMgWW91bmcncyBsaWJkZXMgcGFja2FnZSBhbmQgaXMgbm90 IHBhcnQgICAqLwotLyogb2YgdGhlIHN0YW5kYXJkIE1JVCBERVMgbGlicmFyeSB0aGF0IGlzIHBh cnQgb2YgS2VyYmVyb3MuIEhvd2V2ZXIsICovCi0vKiBpdCBpcyBleHRyZW1lbHkgdXNlZnVsLiAg U28gd2UgYWRkIGl0IGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotCi0vKiBXZWFr IGFuZCBzZW1pIHdlZWsga2V5cyBhcyB0YWtlIGZyb20KLSAqICVBIEQuVy4gRGF2aWVzCi0gKiAl QSBXLkwuIFByaWNlCi0gKiAlVCBTZWN1cml0eSBmb3IgQ29tcHV0ZXIgTmV0d29ya3MKLSAqICVJ IEpvaG4gV2lsZXkgJiBTb25zCi0gKiAlRCAxOTg0Ci0gKiBNYW55IHRoYW5rcyB0byBzbWJAdWx5 c3Nlcy5hdHQuY29tIChTdGV2ZW4gQmVsbG92aW4pIGZvciB0aGUgcmVmZXJlbmNlCi0gKiAoYW5k IGFjdHVhbCBjYmxvY2sgdmFsdWVzKS4KLSAqLwotI2RlZmluZSBOVU1fV0VBS19LRVkgICAgMTYK LXN0YXRpYyBCbG9jayB3ZWFrX2tleXNbTlVNX1dFQUtfS0VZXT17Ci0gICAgICAgIC8qIHdlYWsg a2V5cyAqLwotICAgICAgICB7MHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAx fSwKLSAgICAgICAgezB4RkUsMHhGRSwweEZFLDB4RkUsMHhGRSwweEZFLDB4RkUsMHhGRX0sCi0g ICAgICAgIHsweDFGLDB4MUYsMHgxRiwweDFGLDB4MUYsMHgxRiwweDFGLDB4MUZ9LAotICAgICAg ICB7MHhFMCwweEUwLDB4RTAsMHhFMCwweEUwLDB4RTAsMHhFMCwweEUwfSwKLSAgICAgICAgLyog c2VtaS13ZWFrIGtleXMgKi8KLSAgICAgICAgezB4MDEsMHhGRSwweDAxLDB4RkUsMHgwMSwweEZF LDB4MDEsMHhGRX0sCi0gICAgICAgIHsweEZFLDB4MDEsMHhGRSwweDAxLDB4RkUsMHgwMSwweEZF LDB4MDF9LAotICAgICAgICB7MHgxRiwweEUwLDB4MUYsMHhFMCwweDBFLDB4RjEsMHgwRSwweEYx fSwKLSAgICAgICAgezB4RTAsMHgxRiwweEUwLDB4MUYsMHhGMSwweDBFLDB4RjEsMHgwRX0sCi0g ICAgICAgIHsweDAxLDB4RTAsMHgwMSwweEUwLDB4MDEsMHhGMSwweDAxLDB4RjF9LAotICAgICAg ICB7MHhFMCwweDAxLDB4RTAsMHgwMSwweEYxLDB4MDEsMHhGMSwweDAxfSwKLSAgICAgICAgezB4 MUYsMHhGRSwweDFGLDB4RkUsMHgwRSwweEZFLDB4MEUsMHhGRX0sCi0gICAgICAgIHsweEZFLDB4 MUYsMHhGRSwweDFGLDB4RkUsMHgwRSwweEZFLDB4MEV9LAotICAgICAgICB7MHgwMSwweDFGLDB4 MDEsMHgxRiwweDAxLDB4MEUsMHgwMSwweDBFfSwKLSAgICAgICAgezB4MUYsMHgwMSwweDFGLDB4 MDEsMHgwRSwweDAxLDB4MEUsMHgwMX0sCi0gICAgICAgIHsweEUwLDB4RkUsMHhFMCwweEZFLDB4 RjEsMHhGRSwweEYxLDB4RkV9LAotICAgICAgICB7MHhGRSwweEUwLDB4RkUsMHhFMCwweEZFLDB4 RjEsMHhGRSwweEYxfX07Ci0KLWludAotY2tfZGVzX2lzX3dlYWtfa2V5KGtleSkKLUJsb2NrIGtl eTsKLXsKLSAgICBpbnQgaTsKLQotICAgIGZvciAoaT0wOyBpPE5VTV9XRUFLX0tFWTsgaSsrKSB7 Ci0gICAgICAgIC8qIEFkZGVkID09IDAgdG8gY29tcGFyaXNpb24sIEkgb2J2aW91c2x5IGRvbid0 IHJ1bgotICAgICAgICAqIHRoaXMgc2VjdGlvbiB2ZXJ5IG9mdGVuIDotKCwgdGhhbmtzIHRvCi0g ICAgICAgICogZW5naW5lZXJpbmdATW9ybmluZ1N0YXIuQ29tIGZvciB0aGUgZml4Ci0gICAgICAg ICogZWF5IDkzLzA2LzI5Ci0gICAgICAgICogQW5vdGhlciBwcm9ibGVtLCBJIHdhcyBjb21wYXJp bmcgb25seSB0aGUgZmlyc3QgNAotICAgICAgICAqIGJ5dGVzLCA5Ny8wMy8xOCAqLwotICAgICAg ICBpZiAobWVtY21wKHdlYWtfa2V5c1tpXSxrZXksc2l6ZW9mKEJsb2NrKSkgPT0gMCkKLSAgICAg ICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0jaWZkZWYgVU5J WAotI2lmZGVmIExJQkRFUwotI2lmbmRlZiBNQUNPU1gKLS8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUg bm90IHBhcnQgb2YgRXJpYyBZb3VuZydzIERFUyBsaWJyYXJ5ICovCi0vKiBfdW5peF90aW1lX2dt dF91bml4c2VjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBfZGVzX3Nl dF9yYW5kb21fZ2VuZXJhdG9yX3NlZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBf ZGVzX2ZpeHVwX2tleV9wYXJpdHkgICAoYWRkZWQgaW4gMC45LjUpICAgICAgICAgICAgICAgICov Ci0vKiBfZGVzX25ld19yYW5kb21fa2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICovCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQotdW5zaWduZWQgbG9uZwotdW5peF90aW1l X2dtdF91bml4c2VjICh1c2VjcHRyKQotICAgIHVuc2lnbmVkIGxvbmcgICp1c2VjcHRyOwotewot ICAgIHN0cnVjdCB0aW1ldmFsICBub3c7Ci0KLSAgICAodm9pZCkgZ2V0dGltZW9mZGF5ICgmbm93 LCAoc3RydWN0IHRpbWV6b25lICopMCk7Ci0gICAgaWYgKHVzZWNwdHIpCi0gICAgICAgICp1c2Vj cHRyID0gbm93LnR2X3VzZWM7Ci0gICAgcmV0dXJuIG5vdy50dl9zZWM7Ci19Ci0KLXZvaWQKLWRl c19zZXRfcmFuZG9tX2dlbmVyYXRvcl9zZWVkKEJsb2NrIEIpCi17Ci0gICAgZGVzX3JhbmRvbV9z ZWVkKEIpOwotICAgIHJldHVybjsKLX0KLQotI2lmZGVmIENPTU1FTlQKLS8qIGFkZGVkIHRvIG9w ZW5zc2wgaW4gMC45LjUgKi8KLXZvaWQKLWRlc19maXh1cF9rZXlfcGFyaXR5KEJsb2NrIEIpCi17 Ci0gICAgZGVzX3NldF9vZGRfcGFyaXR5KEIpOwotICAgIHJldHVybjsKLX0KLSNlbmRpZiAvKiBD T01NRU5UICovCi1pbnQKLWRlc19uZXdfcmFuZG9tX2tleShCbG9jayBCKQotewotICAgIGludCBy Yz0wOwotICAgIC8qIFdBUk5JTkc6Ci0gICAgICAgVGhpcyBtaWdodCBuZWVkIHRvIGhhdmUgdGhl ICJyYyA9ICIgcmVtb3ZlZCBiZWNhdXNlIHRoaXMKLSAgICAgICBpcyBWT0lEIGluIGxhdGVyLCBh bmQgbWF5YmUgZXZlbiBhbGwsIHZlcnNpb25zLgotICAgICovICAgICAgIAotICAgIHJjID0gZGVz X3JhbmRvbV9rZXkoQik7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotI2VuZGlmIC8qIE1BQ09TWCAq LwotI2VuZGlmIC8qIExJQkRFUyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBDS19E RVMgKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5MSwgMTk5MwotICogICAgICBUaGUgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp c3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKiAgICAgIENhbGlmb3Ju aWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFt ZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5U UyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK LSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU Ci0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4K LSAqLwotCi0vKiBiYXNlZCBvbiBAKCMpZW5jcnlwdC5jICAgICAgIDguMSAoQmVya2VsZXkpIDYv NC85MyAqLwotCi0vKgotICogQ29weXJpZ2h0IChDKSAxOTkwIGJ5IHRoZSBNYXNzYWNodXNldHRz IEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5Ci0gKgotICogRXhwb3J0IG9mIHRoaXMgc29mdHdhcmUg ZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIG1heQotICogcmVxdWlyZSBhIHNwZWNp ZmljIGxpY2Vuc2UgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50LgotICogSXQgaXMg dGhlIHJlc3BvbnNpYmlsaXR5IG9mIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uIGNvbnRlbXBs YXRpbmcKLSAqIGV4cG9ydCB0byBvYnRhaW4gc3VjaCBhIGxpY2Vuc2UgYmVmb3JlIGV4cG9ydGlu Zy4KLSAqCi0gKiBXSVRISU4gVEhBVCBDT05TVFJBSU5ULCBwZXJtaXNzaW9uIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBhbmQKLSAqIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3Vt ZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZAotICogd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdy YW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlIGFwcGVh ciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZAot ICogdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0 aW9uLCBhbmQgdGhhdAotICogdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVy dGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nCi0gKiB0byBkaXN0cmlidXRpb24gb2YgdGhl IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKLSAqIHBlcm1pc3Npb24u ICBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBv ZgotICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMg aXMiIHdpdGhvdXQgZXhwcmVzcwotICogb3IgaW1wbGllZCB3YXJyYW50eS4KLSAqLwotCi0jaW5j bHVkZSA8c3RkaW8uaD4KLQotLyoKLSAqIFRoZXNlIGZ1bmN0aW9uIHBvaW50ZXJzIHBvaW50IHRv IHRoZSBjdXJyZW50IHJvdXRpbmVzCi0gKiBmb3IgZW5jcnlwdGluZyBhbmQgZGVjcnlwdGluZyBk YXRhLgotICovCi0vKiBOT1RFOiBUaGVzZSBuZXh0IHR3byBtaWdodCBuZWVkIHRvIGhhdmUgdGhl ICJzdGF0aWMgIiByZW1vdmVkICovCi0KLXN0YXRpYyBWT0lEICAgICAoKmVuY3J5cHRfb3V0cHV0 KSBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOwotc3RhdGljIGludCAgICAgICgqZGVjcnlwdF9p bnB1dCkgUCgoaW50KSk7Ci0KLSNpZmRlZiBERUJVRwotc3RhdGljIGludCBlbmNyeXB0X2RlYnVn X21vZGUgPSAxOwotc3RhdGljIGludCBlbmNyeXB0X3ZlcmJvc2UgPSAxOwotI2Vsc2UKLXN0YXRp YyBpbnQgZW5jcnlwdF92ZXJib3NlID0gMTsKLXN0YXRpYyBpbnQgZW5jcnlwdF9kZWJ1Z19tb2Rl ID0gMDsKLSNlbmRpZgotCi1zdGF0aWMgY2hhciBkYmdidWYgWzE2Mzg0XTsKLQotc3RhdGljIGlu dCBkZWNyeXB0X21vZGUgPSAwOwotc3RhdGljIGludCBlbmNyeXB0X21vZGUgPSAwOwotc3RhdGlj IGludCBhdXRvZW5jcnlwdCA9IDE7Ci1zdGF0aWMgaW50IGF1dG9kZWNyeXB0ID0gMTsKLXN0YXRp YyBpbnQgaGF2ZXNlc3Npb25rZXkgPSAwOwotCi1zdGF0aWMga3N0cmVhbSBFbmNyeXB0S1NHbG9i YWxIYWNrID0gTlVMTDsKLXN0YXRpYyBpbnQgICAgIEVuY3J5cHRUeXBlID0gRU5DVFlQRV9BTlk7 Ci0KLSNkZWZpbmUgdHlwZW1hc2soeCkgICAgICgoeCkgPiAwID8gMSA8PCAoKHgpLTEpIDogMCkK LQotc3RhdGljIGxvbmcgaV9zdXBwb3J0X2VuY3J5cHQgPQotICAgICAgICB0eXBlbWFzayhFTkNU WVBFX0RFU19DRkI2NCkgfCB0eXBlbWFzayhFTkNUWVBFX0RFU19PRkI2NCk7Ci1zdGF0aWMgbG9u ZyBpX3N1cHBvcnRfZGVjcnlwdCA9Ci0gICAgICAgIHR5cGVtYXNrKEVOQ1RZUEVfREVTX0NGQjY0 KSB8IHR5cGVtYXNrKEVOQ1RZUEVfREVTX09GQjY0KTsKLXN0YXRpYyBsb25nIGlfd29udF9zdXBw b3J0X2VuY3J5cHQgPSAwOwotc3RhdGljIGxvbmcgaV93b250X3N1cHBvcnRfZGVjcnlwdCA9IDA7 Ci0jZGVmaW5lIElfU1VQUE9SVF9FTkNSWVBUICAgICAgIChpX3N1cHBvcnRfZW5jcnlwdCAmIH5p X3dvbnRfc3VwcG9ydF9lbmNyeXB0KQotI2RlZmluZSBJX1NVUFBPUlRfREVDUllQVCAgICAgICAo aV9zdXBwb3J0X2RlY3J5cHQgJiB+aV93b250X3N1cHBvcnRfZGVjcnlwdCkKLQotc3RhdGljIGxv bmcgcmVtb3RlX3N1cHBvcnRzX2VuY3J5cHQgPSAwOwotc3RhdGljIGxvbmcgcmVtb3RlX3N1cHBv cnRzX2RlY3J5cHQgPSAwOwotCi0vKiBNYWtlIHN1cmUgdGhhdCB0aGlzIGxpc3QgaXMgaW4gb3Jk ZXIgb2YgYWxnb3JpdGhtIHN0cmVuZ3RoICAgICAqLwotLyogYXMgaXQgZGV0ZXJtaW5lcyB0aGUg c2VhcmNoIG9yZGVyIGZvciBzZWxlY3Rpbmcgc3BlY2lmaWMgICAgICAgKi8KLS8qIGVuY3J5cHRp b24gY2hvaWNlcy4gIEFsbCBDRkIgbW9kZXMgbXVzdCBjb21lIGJlZm9yZSBPRkIgbW9kZXMuICov Ci1zdGF0aWMgRW5jcnlwdGlvbnMgZW5jcnlwdGlvbnNbXSA9IHsKLSNpZmRlZiBERVNfRU5DUllQ VElPTgotICAgIHsgIkRFUzNfQ0ZCNjQiLAotICAgICAgICAgIEVOQ1RZUEVfREVTM19DRkI2NCwK LSAgICAgICAgICBkZXMzX2NmYjY0X2VuY3J5cHQsCi0gICAgICAgICAgZGVzM19jZmI2NF9kZWNy eXB0LAotICAgICAgICAgIGRlczNfY2ZiNjRfaW5pdCwKLSAgICAgICAgICBkZXMzX2NmYjY0X3N0 YXJ0LAotICAgICAgICAgIGRlczNfY2ZiNjRfaXMsCi0gICAgICAgICAgZGVzM19jZmI2NF9yZXBs eSwKLSAgICAgICAgICBkZXMzX2NmYjY0X3Nlc3Npb24sCi0gICAgICAgICAgZGVzM19jZmI2NF9r ZXlpZCwKLSAgICAgICAgICBOVUxMIH0sCi0jZW5kaWYgLyogREVTX0VOQ1JZUFRJT04gKi8KLSNp ZmRlZiBDQVNUX0VOQ1JZUFRJT04KLSNpZm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgotICAg IHsgIkNBU1QxMjhfQ0ZCNjQiLCAgRU5DVFlQRV9DQVNUMTI4X0NGQjY0LAotICAgICAgICAgIGNh c3RfY2ZiNjRfZW5jcnlwdCwKLSAgICAgICAgICBjYXN0X2NmYjY0X2RlY3J5cHQsCi0gICAgICAg ICAgY2FzdF9jZmI2NF9pbml0LAotICAgICAgICAgIGNhc3RfY2ZiNjRfc3RhcnQsCi0gICAgICAg ICAgY2FzdF9jZmI2NF9pcywKLSAgICAgICAgICBjYXN0X2NmYjY0X3JlcGx5LAotICAgICAgICAg IGNhc3RfY2ZiNjRfc2Vzc2lvbiwKLSAgICAgICAgICBjYXN0X2NmYjY0X2tleWlkLAotICAgICAg ICAgIE5VTEwgfSwKLSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgREVTX0VOQ1JZUFRJT04KLSAgICB7 ICJERVNfQ0ZCNjQiLAotICAgICAgICAgIEVOQ1RZUEVfREVTX0NGQjY0LAotICAgICAgICAgIGNm YjY0X2VuY3J5cHQsCi0gICAgICAgICAgY2ZiNjRfZGVjcnlwdCwKLSAgICAgICAgICBjZmI2NF9p bml0LAotICAgICAgICAgIGNmYjY0X3N0YXJ0LAotICAgICAgICAgIGNmYjY0X2lzLAotICAgICAg ICAgIGNmYjY0X3JlcGx5LAotICAgICAgICAgIGNmYjY0X3Nlc3Npb24sCi0gICAgICAgICAgY2Zi NjRfa2V5aWQsCi0gICAgICAgICAgTlVMTCB9LAotI2VuZGlmICAvKiBERVNfRU5DUllQVElPTiAq LwotI2lmIGRlZmluZWQgKENBU1RfRVhQT1JUX0VOQ1JZUFRJT04pIHx8IGRlZmluZWQoQ0FTVF9F TkNSWVBUSU9OKQotICAgIHsgIkNBU1Q1XzQwX0NGQjY0IiwgRU5DVFlQRV9DQVNUNV80MF9DRkI2 NCwKLSAgICAgICAgICBjYXN0ZXhwX2NmYjY0X2VuY3J5cHQsCi0gICAgICAgICAgY2FzdGV4cF9j ZmI2NF9kZWNyeXB0LAotICAgICAgICAgIGNhc3RleHBfY2ZiNjRfaW5pdCwKLSAgICAgICAgICBj YXN0ZXhwX2NmYjY0X3N0YXJ0LAotICAgICAgICAgIGNhc3RleHBfY2ZiNjRfaXMsCi0gICAgICAg ICAgY2FzdGV4cF9jZmI2NF9yZXBseSwKLSAgICAgICAgICBjYXN0ZXhwX2NmYjY0X3Nlc3Npb24s Ci0gICAgICAgICAgY2FzdGV4cF9jZmI2NF9rZXlpZCwKLSAgICAgICAgICBOVUxMIH0sCi0jZW5k aWYgLyogQ0FTVF9FTkNSWVBUSU9OICovCi0jaWZkZWYgREVTX0VOQ1JZUFRJT04KLSAgICB7ICJE RVMzX09GQjY0IiwKLSAgICAgICAgICBFTkNUWVBFX0RFUzNfT0ZCNjQsCi0gICAgICAgICAgZGVz M19vZmI2NF9lbmNyeXB0LAotICAgICAgICAgIGRlczNfb2ZiNjRfZGVjcnlwdCwKLSAgICAgICAg ICBkZXMzX29mYjY0X2luaXQsCi0gICAgICAgICAgZGVzM19vZmI2NF9zdGFydCwKLSAgICAgICAg ICBkZXMzX29mYjY0X2lzLAotICAgICAgICAgIGRlczNfb2ZiNjRfcmVwbHksCi0gICAgICAgICAg ZGVzM19vZmI2NF9zZXNzaW9uLAotICAgICAgICAgIGRlczNfb2ZiNjRfa2V5aWQsCi0gICAgICAg ICAgTlVMTCB9LAotI2VuZGlmIC8qIERFU19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0FTVF9FTkNS WVBUSU9OCi0jaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KLSAgICB7ICJDQVNUMTI4X09G QjY0IiwgIEVOQ1RZUEVfQ0FTVDEyOF9PRkI2NCwKLSAgICAgICAgICBjYXN0X29mYjY0X2VuY3J5 cHQsCi0gICAgICAgICAgY2FzdF9vZmI2NF9kZWNyeXB0LAotICAgICAgICAgIGNhc3Rfb2ZiNjRf aW5pdCwKLSAgICAgICAgICBjYXN0X29mYjY0X3N0YXJ0LAotICAgICAgICAgIGNhc3Rfb2ZiNjRf aXMsCi0gICAgICAgICAgY2FzdF9vZmI2NF9yZXBseSwKLSAgICAgICAgICBjYXN0X29mYjY0X3Nl c3Npb24sCi0gICAgICAgICAgY2FzdF9vZmI2NF9rZXlpZCwKLSAgICAgICAgICBOVUxMIH0sCi0j ZW5kaWYKLSNlbmRpZgotI2lmZGVmIERFU19FTkNSWVBUSU9OCi0gICAgeyAiREVTX09GQjY0IiwK LSAgICAgICAgICBFTkNUWVBFX0RFU19PRkI2NCwKLSAgICAgICAgICBvZmI2NF9lbmNyeXB0LAot ICAgICAgICAgIG9mYjY0X2RlY3J5cHQsCi0gICAgICAgICAgb2ZiNjRfaW5pdCwKLSAgICAgICAg ICBvZmI2NF9zdGFydCwKLSAgICAgICAgICBvZmI2NF9pcywKLSAgICAgICAgICBvZmI2NF9yZXBs eSwKLSAgICAgICAgICBvZmI2NF9zZXNzaW9uLAotICAgICAgICAgIG9mYjY0X2tleWlkLAotICAg ICAgICAgIE5VTEwgfSwKLSNlbmRpZiAgLyogREVTX0VOQ1JZUFRJT04gKi8KLSNpZiBkZWZpbmVk IChDQVNUX0VYUE9SVF9FTkNSWVBUSU9OKSB8fCBkZWZpbmVkKENBU1RfRU5DUllQVElPTikKLSAg ICB7ICJDQVNUNV80MF9PRkI2NCIsIEVOQ1RZUEVfQ0FTVDVfNDBfT0ZCNjQsCi0gICAgICAgICAg Y2FzdGV4cF9vZmI2NF9lbmNyeXB0LAotICAgICAgICAgIGNhc3RleHBfb2ZiNjRfZGVjcnlwdCwK LSAgICAgICAgICBjYXN0ZXhwX29mYjY0X2luaXQsCi0gICAgICAgICAgY2FzdGV4cF9vZmI2NF9z dGFydCwKLSAgICAgICAgICBjYXN0ZXhwX29mYjY0X2lzLAotICAgICAgICAgIGNhc3RleHBfb2Zi NjRfcmVwbHksCi0gICAgICAgICAgY2FzdGV4cF9vZmI2NF9zZXNzaW9uLAotICAgICAgICAgIGNh c3RleHBfb2ZiNjRfa2V5aWQsCi0gICAgICAgICAgTlVMTCB9LAotI2VuZGlmIC8qIENBU1RfRU5D UllQVElPTiAqLwotICAgIHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwICB9Ci19OwotCi1pbnQKLWdl dF9jcnlwdF90YWJsZSggc3RydWN0IGtleXRhYiAqKiBwVGFibGUsIGludCAqIHBOICkKLXsKLSAg ICBpbnQgaT0wLG49MDsKLQotICAgIGlmICggKnBUYWJsZSApCi0gICAgewotICAgICAgICBmb3Ig KCBpPTAgOyBpIDwgKnBOIDsgaSsrICkKLSAgICAgICAgICAgIGZyZWUoICgqcFRhYmxlKVtpXS5r d2QgKSA7Ci0gICAgICAgIGZyZWUgKCAqcFRhYmxlICkgIDsKLSAgICB9Ci0gICAgKnBUYWJsZSA9 IE5VTEw7Ci0gICAgKnBOID0gMDsKLQotICAgIC8qIEhvdyBtYW55IGVuY3J5cHRpb24gdHlwZXMg ZG8gd2UgaGF2ZT8gKi8KLSAgICB3aGlsZSAoIGVuY3J5cHRpb25zW25dLm5hbWUgKQotICAgICAg ICBuKys7Ci0KLSAgICBpZiAoIG4gKQotICAgIHsKLSAgICAgICAgKnBUYWJsZSA9IG1hbGxvYygg c2l6ZW9mKHN0cnVjdCBrZXl0YWIpICogKG4rMikgKSA7Ci0gICAgICAgIGlmICggISgqcFRhYmxl KSApCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0KLSNpZmRlZiBPUzIKLSAgICAgICAgKCpwVGFi bGUpWzBdLmt3ZCA9c3RyZHVwKCJhdXRvbWF0aWMiKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgICAg ICBtYWtlc3RyKCZ0bXBzdHJpbmcsImF1dG9tYXRpYyIpOwotICAgICAgICAoKnBUYWJsZSlbMF0u a3dkID0gdG1wc3RyaW5nOwotICAgICAgICB0bXBzdHJpbmcgPSBOVUxMOwotI2VuZGlmIC8qIE9T MiAqLwotICAgICAgICAoKnBUYWJsZSlbMF0ua3d2YWwgPSBFTkNUWVBFX0FOWTsKLSAgICAgICAg KCpwVGFibGUpWzBdLmZsZ3MgPSAwOwotI2lmZGVmIE9TMgotICAgICAgICAoKnBUYWJsZSlbMV0u a3dkID1zdHJkdXAoIm5vbmUiKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICBtYWtlc3RyKCZ0 bXBzdHJpbmcsIm5vbmUiKTsKLSAgICAgICAgKCpwVGFibGUpWzFdLmt3ZCA9IHRtcHN0cmluZzsK LSAgICAgICAgdG1wc3RyaW5nID0gTlVMTDsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgKCpw VGFibGUpWzFdLmt3dmFsID0gOTk5OwotICAgICAgICAoKnBUYWJsZSlbMV0uZmxncyA9IDA7Ci0g ICAgICAgICgqcE4pID0gMjsKLQotICAgICAgICBmb3IgKCBpPTAgOyBpIDwgbiA7IGkrKyApIHsK LSAgICAgICAgICAgIGNoYXIgKiBuZXdzdHIgPSBOVUxMLCAqIHA7Ci0gICAgICAgICAgICBpbnQg bmV3dmFsID0gZW5jcnlwdGlvbnNbaV0udHlwZTsKLSAgICAgICAgICAgIGludCBqID0gMCwgbGVu ID0gMDsKLQotI2lmZGVmIE9TMgotICAgICAgICAgICAgbmV3c3RyID0gc3RyZHVwKGVuY3J5cHRp b25zW2ldLm5hbWUpOwotICAgICAgICAgICAgc3RybHdyKG5ld3N0cik7Ci0jZWxzZSAvKiBPUzIg Ki8KLSAgICAgICAgICAgIG1ha2VzdHIoJnRtcHN0cmluZyxlbmNyeXB0aW9uc1tpXS5uYW1lKTsK LSAgICAgICAgICAgIG5ld3N0ciA9IHRtcHN0cmluZzsKLSAgICAgICAgICAgIHRtcHN0cmluZyA9 IE5VTEw7Ci0gICAgICAgICAgICBmb3IgKHAgPSBuZXdzdHI7ICpwOyBwKyspIGlmIChpc3VwcGVy KCpwKSkgKnAgPSB0b2xvd2VyKCpwKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgICAgICAgICAg Zm9yIChqID0gMDsgaiA8ICgqcE4pOyBqKyspIHsKLSAgICAgICAgICAgICAgICBpbnQgdGVtcHZh bCA9IDA7Ci0gICAgICAgICAgICAgICAgY2hhciAqIHRlbXBzdHIgPSBOVUxMOwotCi0gICAgICAg ICAgICAgICAgaWYgKCBzdHJjbXAoICgqcFRhYmxlKVtqXS5rd2QsIG5ld3N0ciApID4gMCApCi0g ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0ZW1wdmFsID0gKCpwVGFibGUp W2pdLmt3dmFsOwotICAgICAgICAgICAgICAgICAgICB0ZW1wc3RyID0gKCpwVGFibGUpW2pdLmt3 ZDsKLSAgICAgICAgICAgICAgICAgICAgKCpwVGFibGUpW2pdLmt3ZCA9IG5ld3N0ciA7Ci0gICAg ICAgICAgICAgICAgICAgICgqcFRhYmxlKVtqXS5rd3ZhbCA9IG5ld3ZhbDsKLSAgICAgICAgICAg ICAgICAgICAgbmV3dmFsID0gdGVtcHZhbDsKLSAgICAgICAgICAgICAgICAgICAgbmV3c3RyID0g dGVtcHN0cjsKLSAgICAgICAgICAgICAgICAgICAgKCpwVGFibGUpW2pdLmZsZ3MgPSAwOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICgqcFRhYmxlKVsqcE5d Lmt3ZCA9IG5ld3N0ciA7Ci0gICAgICAgICAgICAoKnBUYWJsZSlbKnBOXS5rd3ZhbCA9IG5ld3Zh bDsKLSAgICAgICAgICAgICgqcFRhYmxlKVsqcE5dLmZsZ3MgPSAwIDsKLSAgICAgICAgICAgICgq cE4pKysgOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgKnBUYWJsZSA9IG1hbGxv Yyggc2l6ZW9mKHN0cnVjdCBrZXl0YWIpICogMiApIDsKLSAgICAgICAgaWYgKCAhKCpwVGFibGUp ICkKLSAgICAgICAgICAgIHJldHVybigwKTsKLQotI2lmZGVmIE9TMgotICAgICAgICAoKnBUYWJs ZSlbMF0ua3dkID1zdHJkdXAoImF1dG9tYXRpYyIpOwotI2Vsc2UgLyogT1MyICovCi0gICAgICAg IG1ha2VzdHIoJnRtcHN0cmluZywiYXV0b21hdGljIik7Ci0gICAgICAgICgqcFRhYmxlKVswXS5r d2QgPSB0bXBzdHJpbmc7Ci0gICAgICAgIHRtcHN0cmluZyA9IE5VTEw7Ci0jZW5kaWYgLyogT1My ICovCi0gICAgICAgICgqcFRhYmxlKVswXS5rd3ZhbCA9IEVOQ1RZUEVfQU5ZOwotICAgICAgICAo KnBUYWJsZSlbMF0uZmxncyA9IDA7Ci0jaWZkZWYgT1MyCi0gICAgICAgICgqcFRhYmxlKVsxXS5r d2QgPXN0cmR1cCgibm9uZSIpOwotI2Vsc2UgLyogT1MyICovCi0gICAgICAgIG1ha2VzdHIoJnRt cHN0cmluZywibm9uZSIpOwotICAgICAgICAoKnBUYWJsZSlbMV0ua3dkID0gdG1wc3RyaW5nOwot ICAgICAgICB0bXBzdHJpbmcgPSBOVUxMOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAoKnBU YWJsZSlbMV0ua3d2YWwgPSA5OTk7Ci0gICAgICAgICgqcFRhYmxlKVsxXS5mbGdzID0gMDsKLSAg ICAgICAgKCpwTikgPSAyOwotICAgIH0KLSAgICByZXR1cm4oKnBOKTsKLX0KLQotc3RhdGljIHVu c2lnbmVkIGNoYXIgc3RyX3NlbmRbNjRdID0geyBJQUMsIFNCLCBURUxPUFRfRU5DUllQVElPTiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DUllQVF9TVVBQT1JUIH07 Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBzdHJfc3VwbGVuID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBj aGFyIHN0cl9zdGFydFs3Ml0gPSB7IElBQywgU0IsIFRFTE9QVF9FTkNSWVBUSU9OIH07Ci1zdGF0 aWMgdW5zaWduZWQgY2hhciBzdHJfZW5kW10gPSB7IElBQywgU0IsIFRFTE9QVF9FTkNSWVBUSU9O LCAwLCBJQUMsIFNFIH07Ci0KLV9QUk9UT1RZUChpbnQgIGVuY3J5cHRfcmVxdWVzdF9lbmQsIChW T0lEKSk7Ci1fUFJPVE9UWVAoaW50ICBlbmNyeXB0X3JlcXVlc3Rfc3RhcnQsIChWT0lEKSk7Ci1f UFJPVE9UWVAoaW50ICBlbmNyeXB0X2VuY19rZXlpZCwgKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7 Ci1fUFJPVE9UWVAoaW50ICBlbmNyeXB0X2RlY19rZXlpZCwgKHVuc2lnbmVkIGNoYXIgKiwgaW50 KSk7Ci1fUFJPVE9UWVAoaW50ICBlbmNyeXB0X3N1cHBvcnQsICh1bnNpZ25lZCBjaGFyICosIGlu dCkpOwotX1BST1RPVFlQKGludCAgZW5jcnlwdF9zdGFydCwgKHVuc2lnbmVkIGNoYXIgKiwgaW50 KSk7Ci1fUFJPVE9UWVAoaW50ICBlbmNyeXB0X2VuZCwgKFZPSUQpKTsKLQotX1BST1RPVFlQKGlu dCBlbmNyeXB0X2tzX3N0cmVhbSwoc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqLCAvKiBvdXRw dXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGtzdHJlYW1f ZGF0YV9ibG9jayAqKSk7IC8qIGlucHV0ICovCi0KLV9QUk9UT1RZUChpbnQgZGVjcnlwdF9rc19z dHJlYW0sKHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKiwgLyogb3V0cHV0ICovCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKikp OyAvKiBpbnB1dCAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZW5jcnlwdF9rc19zdHJlYW0o c3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqaSwKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCBr c3RyZWFtX2RhdGFfYmxvY2sgKm8pCi0jZWxzZQotZW5jcnlwdF9rc19zdHJlYW0oaSxvKQotICAg IHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKmk7IHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sg Km87Ci0jZW5kaWYKLXsKLSAgICAvKgotICAgICogdGhpcyBpcyByZWFsbHkgcXVpdGUgYm9ndXMs IHNpbmNlIGl0IGRvZXMgYW4gaW4tcGxhY2UgZW5jcnlwdGlvbi4uLgotICAgICovCi0gICAgaWYg KGVuY3J5cHRfb3V0cHV0KSB7Ci0gICAgICAgIGVuY3J5cHRfb3V0cHV0KGktPnB0ciwgaS0+bGVu Z3RoKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0KLWlu dAotI2lmZGVmIENLX0FOU0lDCi1kZWNyeXB0X2tzX3N0cmVhbShzdHJ1Y3Qga3N0cmVhbV9kYXRh X2Jsb2NrICppLAotICAgICAgICAgICAgICAgICAgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAq bykKLSNlbHNlCi1kZWNyeXB0X2tzX3N0cmVhbShpLG8pCi0gICAgc3RydWN0IGtzdHJlYW1fZGF0 YV9ibG9jayAqaTsgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqbzsKLSNlbmRpZgotewotICAg IHVuc2lnbmVkIGludCBsZW47Ci0gIC8qCi0gICAqIHRoaXMgaXMgcmVhbGx5IHF1aXRlIGJvZ3Vz LCBzaW5jZSBpdCBkb2VzIGFuIGluLXBsYWNlIGRlY3J5cHRpb24uLi4KLSAgICovCi0gICAgaWYg KGRlY3J5cHRfaW5wdXQpIHsKLSAgICAgICAgZm9yIChsZW4gPSAwIDsgbGVuIDwgaS0+bGVuZ3Ro IDsgbGVuKyspCi0gICAgICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKilpLT5wdHIpW2xlbl0KLSAg ICAgICAgICAgICAgICA9IGRlY3J5cHRfaW5wdXQoKCh1bnNpZ25lZCBjaGFyICopaS0+cHRyKVts ZW5dKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1pbnQK LSNpZmRlZiBDS19BTlNJQwotZGVjcnlwdF9rc19oYWNrKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50 IGNudCkKLSNlbHNlCi1kZWNyeXB0X2tzX2hhY2soYnVmLGNudCkgdW5zaWduZWQgY2hhciAqYnVm OyBpbnQgY250OwotI2VuZGlmCi17Ci0gICAgaW50IGxlbjsKLSAgLyoKLSAgICogdGhpcyBpcyBy ZWFsbHkgcXVpdGUgYm9ndXMsIHNpbmNlIGl0IGRvZXMgYW4gaW4tcGxhY2UgZGVjcnlwdGlvbi4u LgotICAgKi8KLSAgICBmb3IgKGxlbiA9IDAgOyBsZW4gPCBjbnQgOyBsZW4rKykKLSAgICAgICAg YnVmW2xlbl0gPSBkZWNyeXB0X2lucHV0KGJ1ZltsZW5dKTsKLQotI2lmZGVmIERFQlVHCi0gICAg Y2toZXhkdW1wKCJkZWNyeXB0IGtzIGhhY2siLCBidWYsIGNudCk7Ci0jZW5kaWYKLSAgICByZXR1 cm4gMTsKLX0KLQotCi0vKgotICogcGFyc2VkYXRbMF0gPT0gdGhlIHN1Ym9wdGlvbiB3ZSBtaWdo dCBiZSBuZWdvdGlhdGluZywKLSAqLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWVuY3J5cHRfcGFy c2UodW5zaWduZWQgY2hhciAqcGFyc2VkYXQsIGludCBlbmRfc3ViKQotI2Vsc2UKLWVuY3J5cHRf cGFyc2UocGFyc2VkYXQsZW5kX3N1YikgdW5zaWduZWQgY2hhciAqcGFyc2VkYXQ7IGludCBlbmRf c3ViOwotI2VuZGlmCi17Ci0gICAgaW50IHJjID0gMDsKLQotICAgIHN3aXRjaChwYXJzZWRhdFsx XSkgewotICAgIGNhc2UgRU5DUllQVF9TVEFSVDoKLSAgICAgICAgcmMgPSBlbmNyeXB0X3N0YXJ0 KHBhcnNlZGF0ICsgMiwgZW5kX3N1YiAtIDIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEVO Q1JZUFRfRU5EOgotICAgICAgICByYyA9IGVuY3J5cHRfZW5kKCk7Ci0gICAgICAgIGJyZWFrOwot ICAgIGNhc2UgRU5DUllQVF9TVVBQT1JUOgotICAgICAgICByYyA9IGVuY3J5cHRfc3VwcG9ydChw YXJzZWRhdCArIDIsIGVuZF9zdWIgLSAyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFTkNS WVBUX1JFUVNUQVJUOgotICAgICAgICByYyA9IGVuY3J5cHRfcmVxdWVzdF9zdGFydCgpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlIEVOQ1JZUFRfUkVRRU5EOgotICAgICAgICAvKgotICAgICAg ICAqIFdlIGNhbiBhbHdheXMgc2VuZCBhbiBSRVFFTkQgc28gdGhhdCB3ZSBjYW5ub3QKLSAgICAg ICAgKiBnZXQgc3R1Y2sgZW5jcnlwdGluZy4gIFdlIHNob3VsZCBvbmx5IGdldCB0aGlzCi0gICAg ICAgICogaWYgd2UgaGF2ZSBiZWVuIGFibGUgdG8gZ2V0IGluIHRoZSBjb3JyZWN0IG1vZGUKLSAg ICAgICAgKiBhbnlob3cuCi0gICAgICAgICovCi0gICAgICAgIHJjID0gZW5jcnlwdF9yZXF1ZXN0 X2VuZCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEVOQ1JZUFRfSVM6Ci0gICAgICAgIHJj ID0gZW5jcnlwdF9pcyhwYXJzZWRhdCArIDIsIGVuZF9zdWIgLSAyKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgY2FzZSBFTkNSWVBUX1JFUExZOgotICAgICAgICByYyA9IGVuY3J5cHRfcmVwbHkocGFy c2VkYXQgKyAyLCBlbmRfc3ViIC0gMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRU5DUllQ VF9FTkNfS0VZSUQ6Ci0gICAgICAgIHJjID0gZW5jcnlwdF9lbmNfa2V5aWQocGFyc2VkYXQgKyAy LCBlbmRfc3ViIC0gMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRU5DUllQVF9ERUNfS0VZ SUQ6Ci0gICAgICAgIHJjID0gZW5jcnlwdF9kZWNfa2V5aWQocGFyc2VkYXQgKyAyLCBlbmRfc3Vi IC0gMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJjID0gLTE7Ci0g ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4ocmMpOwotfQotCi0vKiBYWFggKi8KLUVu Y3J5cHRpb25zICoKLSNpZmRlZiBDS19BTlNJQwotZmluZGVuY3J5cHRpb24oaW50IHR5cGUpCi0j ZWxzZQotZmluZGVuY3J5cHRpb24odHlwZSkgaW50IHR5cGU7Ci0jZW5kaWYKLXsKLSAgICBFbmNy eXB0aW9ucyAqZXAgPSBlbmNyeXB0aW9uczsKLQotICAgIGlmICghKElfU1VQUE9SVF9FTkNSWVBU ICYgcmVtb3RlX3N1cHBvcnRzX2RlY3J5cHQgJiB0eXBlbWFzayh0eXBlKSkpCi0gICAgICAgIHJl dHVybigwKTsKLSAgICB3aGlsZSAoZXAtPnR5cGUgJiYgZXAtPnR5cGUgIT0gdHlwZSkKLSAgICAg ICAgKytlcDsKLSAgICByZXR1cm4oZXAtPnR5cGUgPyBlcCA6IDApOwotfQotCi1FbmNyeXB0aW9u cyAqCi0jaWZkZWYgQ0tfQU5TSUMKLWZpbmRkZWNyeXB0aW9uKGludCB0eXBlKQotI2Vsc2UKLWZp bmRkZWNyeXB0aW9uKHR5cGUpIGludCB0eXBlOwotI2VuZGlmCi17Ci0gICAgRW5jcnlwdGlvbnMg KmVwID0gZW5jcnlwdGlvbnM7Ci0KLSAgICBpZiAoIShJX1NVUFBPUlRfREVDUllQVCAmIHJlbW90 ZV9zdXBwb3J0c19lbmNyeXB0ICYgdHlwZW1hc2sodHlwZSkpKQotICAgICAgICByZXR1cm4oMCk7 Ci0gICAgd2hpbGUgKGVwLT50eXBlICYmIGVwLT50eXBlICE9IHR5cGUpCi0gICAgICAgICsrZXA7 Ci0gICAgcmV0dXJuKGVwLT50eXBlID8gZXAgOiAwKTsKLX0KLQotI2RlZmluZSBNQVhLRVlMRU4g NjQKLQotc3RhdGljIHN0cnVjdCBrZXlfaW5mbyB7Ci0gICAgdW5zaWduZWQgY2hhciBrZXlpZFtN QVhLRVlMRU5dOwotICAgIGludCBrZXlsZW47Ci0gICAgaW50IGRpcjsKLSAgICBpbnQgKm1vZGVw OwotICAgIEVuY3J5cHRpb25zICooKmdldGNyeXB0KSgpOwotfSBraVsyXSA9IHsKLSAgICB7IHsg MCB9LCAwLCBESVJfRU5DUllQVCwgJmVuY3J5cHRfbW9kZSwgZmluZGVuY3J5cHRpb24gfSwKLSAg ICB7IHsgMCB9LCAwLCBESVJfREVDUllQVCwgJmRlY3J5cHRfbW9kZSwgZmluZGRlY3J5cHRpb24g fSwKLX07Ci0KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotZW5jcnlwdF9pbml0KGtzdHJlYW0gaWtz LCBpbnQgdHlwZSkKLSNlbHNlCi1lbmNyeXB0X2luaXQoaWtzLCB0eXBlKSBrc3RyZWFtIGlrczsg aW50IHR5cGU7Ci0jZW5kaWYKLXsKLSAgICBFbmNyeXB0aW9ucyAqZXAgPSBlbmNyeXB0aW9uczsK LQotICAgIGlfc3VwcG9ydF9lbmNyeXB0ID0gaV9zdXBwb3J0X2RlY3J5cHQgPSAwOwotICAgIHJl bW90ZV9zdXBwb3J0c19lbmNyeXB0ID0gcmVtb3RlX3N1cHBvcnRzX2RlY3J5cHQgPSAwOwotICAg IGlfd29udF9zdXBwb3J0X2VuY3J5cHQgPSBpX3dvbnRfc3VwcG9ydF9kZWNyeXB0ID0gMDsKLSAg ICBlbmNyeXB0X21vZGUgPSAwOwotICAgIGRlY3J5cHRfbW9kZSA9IDA7Ci0gICAgZW5jcnlwdF9v dXRwdXQgPSBOVUxMOwotICAgIGRlY3J5cHRfaW5wdXQgPSBOVUxMOwotICAgIGtpWzBdLmtleWxl biA9IDA7Ci0gICAgbWVtc2V0KGtpWzBdLmtleWlkLDAsTUFYS0VZTEVOKTsKLSAgICBraVsxXS5r ZXlsZW4gPSAwOwotICAgIG1lbXNldChraVsxXS5rZXlpZCwwLE1BWEtFWUxFTik7Ci0gICAgaGF2 ZXNlc3Npb25rZXkgPSAwOwotICAgIGF1dG9lbmNyeXB0ID0gMTsKLSAgICBhdXRvZGVjcnlwdCA9 IDE7Ci0KLSAgICBFbmNyeXB0S1NHbG9iYWxIYWNrID0gaWtzOwotICAgIEVuY3J5cHRUeXBlID0g dHlwZTsKLQotICAgIHN0cl9zZW5kWzBdID0gSUFDOwotICAgIHN0cl9zZW5kWzFdID0gU0I7Ci0g ICAgc3RyX3NlbmRbMl0gPSBURUxPUFRfRU5DUllQVElPTjsKLSAgICBzdHJfc2VuZFszXSA9IEVO Q1JZUFRfU1VQUE9SVDsKLSAgICBzdHJfc3VwbGVuID0gNDsKLQotICAgIHdoaWxlIChlcC0+dHlw ZSkgewotICAgICAgICBpZiAoIEVuY3J5cHRUeXBlID09IEVOQ1RZUEVfQU5ZIHx8Ci0gICAgICAg ICAgICAgRW5jcnlwdFR5cGUgPT0gZXAtPnR5cGUgKSB7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAg ICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGRi Z2J1ZiwgIj4+Pkkgd2lsbCBzdXBwb3J0ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAg IEVOQ1RZUEVfTkFNRShlcC0+dHlwZSkpOyAgICAgICAvKiBzYWZlICovCi0gICAgICAgICAgICAg ICAgZGVidWcoRjExMCwiZW5jcnlwdF9pbml0IixkYmdidWYsMCk7Ci0gICAgICAgICAgICB9Ci0j ZW5kaWYKLSAgICAgICAgICAgIGlfc3VwcG9ydF9lbmNyeXB0IHw9IHR5cGVtYXNrKGVwLT50eXBl KTsKLSAgICAgICAgICAgIGlfc3VwcG9ydF9kZWNyeXB0IHw9IHR5cGVtYXNrKGVwLT50eXBlKTsK LSAgICAgICAgICAgIGlmICgoaV93b250X3N1cHBvcnRfZGVjcnlwdCAmIHR5cGVtYXNrKGVwLT50 eXBlKSkgPT0gMCkKLSAgICAgICAgICAgICAgICBpZiAoKHN0cl9zZW5kW3N0cl9zdXBsZW4rK10g PSBlcC0+dHlwZSkgPT0gSUFDKQotICAgICAgICAgICAgICAgICAgICBzdHJfc2VuZFtzdHJfc3Vw bGVuKytdID0gSUFDOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlcC0+aW5pdCkKLSAgICAgICAg ICAgICgqZXAtPmluaXQpKDApOwotICAgICAgICArK2VwOwotICAgIH0KLSAgICBzdHJfc2VuZFtz dHJfc3VwbGVuKytdID0gSUFDOwotICAgIHN0cl9zZW5kW3N0cl9zdXBsZW4rK10gPSBTRTsKLX0K LQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1lbmNyeXB0X3NlbmRfc3VwcG9ydChWT0lEKQotI2Vs c2UKLWVuY3J5cHRfc2VuZF9zdXBwb3J0KCkKLSNlbmRpZgotewotICAgIEVuY3J5cHRpb25zICpl cCA9IGVuY3J5cHRpb25zOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxP UFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykKLSAgICAgICAgcmV0dXJuOwotI2Vu ZGlmIC8qIENLX1NTTCAqLwotCi0gICAgc3RyX3NlbmRbMF0gPSBJQUM7Ci0gICAgc3RyX3NlbmRb MV0gPSBTQjsKLSAgICBzdHJfc2VuZFsyXSA9IFRFTE9QVF9FTkNSWVBUSU9OOwotICAgIHN0cl9z ZW5kWzNdID0gRU5DUllQVF9TVVBQT1JUOwotICAgIHN0cl9zdXBsZW4gPSA0OwotCi0gICAgd2hp bGUgKGVwLT50eXBlKSB7Ci0gICAgICAgIGlmICggRW5jcnlwdFR5cGUgPT0gRU5DVFlQRV9BTlkg fHwKLSAgICAgICAgICAgICBFbmNyeXB0VHlwZSA9PSBlcC0+dHlwZSApIHsKLSNpZmRlZiBERUJV RwotICAgICAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgewotICAgICAgICAgICAgICAg IHNwcmludGYoZGJnYnVmLCAiPj4+SSB3aWxsIHN1cHBvcnQgJXNcbiIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgRU5DVFlQRV9OQU1FKGVwLT50eXBlKSk7ICAgICAgICAgICAgICAgLyogc2Fm ZSAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfc2VuZF9zdXBwb3J0Iixk YmdidWYsMCk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmICgoaV93b250 X3N1cHBvcnRfZGVjcnlwdCAmIHR5cGVtYXNrKGVwLT50eXBlKSkgPT0gMCkKLSAgICAgICAgICAg ICAgICBpZiAoKHN0cl9zZW5kW3N0cl9zdXBsZW4rK10gPSBlcC0+dHlwZSkgPT0gSUFDKQotICAg ICAgICAgICAgICAgICAgICBzdHJfc2VuZFtzdHJfc3VwbGVuKytdID0gSUFDOwotICAgICAgICB9 Ci0gICAgICAgICsrZXA7Ci0gICAgfQotICAgIHN0cl9zZW5kW3N0cl9zdXBsZW4rK10gPSBJQUM7 Ci0gICAgc3RyX3NlbmRbc3RyX3N1cGxlbisrXSA9IFNFOwotCi0gICAgLyoKLSAgICAqIElmIHRo ZSB1c2VyIGhhcyByZXF1ZXN0ZWQgdGhhdCBkZWNyeXB0aW9uIHN0YXJ0Ci0gICAgKiBpbW1lZGlh dGx5LCB0aGVuIHNlbmQgYSAiUkVRVUVTVCBTVEFSVCIgYmVmb3JlCi0gICAgKiB3ZSBuZWdvdGlh dGUgdGhlIHR5cGUuCi0gICAgKi8KLSAgICBpZiAoYXV0b2RlY3J5cHQpCi0gICAgICAgIGVuY3J5 cHRfc2VuZF9yZXF1ZXN0X3N0YXJ0KCk7Ci0KLSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBk ZWJzZXMpIHsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIHNwcmludGYodG5fbXNnLCJURUxORVQg U0VOVCBTQiAlcyBTVVBQT1JUICIsCi0gICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfRU5D UllQVElPTikpOyAgICAgICAgICAgICAgICAgICAgLyogc2FmZSAqLwotICAgICAgICBmb3IgKCBp PTQ7aTxzdHJfc3VwbGVuLTI7aSsrICkgewotICAgICAgICAgICAgaWYgKCBzdHJfc2VuZFtpXSA9 PSBJQUMgKSB7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDICIsVE5fTVNH X0xFTik7Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg Y2tzdHJuY2F0KHRuX21zZyxFTkNUWVBFX05BTUUoc3RyX3NlbmRbaV0pLFROX01TR19MRU4pOwot ICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiICIsVE5fTVNHX0xFTik7Ci0gICAgICAgIH0K LSAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVOKTsKLSAgICAgICAg ZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7Ci0gICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0 bl9kZWJ1Zyh0bl9tc2cpOwotICAgIH0KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0 ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotICAgIHR0b2woc3RyX3NlbmQsIHN0 cl9zdXBsZW4pOwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlm Ci0KLSAgICBzdHJfc3VwbGVuID0gMDsKLX0KLQotLyoKLSAqIENhbGxlZCB3aGVuIEVOQ1JZUFQg U1VQUE9SVCBpcyByZWNlaXZlZC4KLSAqLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWVuY3J5cHRf c3VwcG9ydCh1bnNpZ25lZCBjaGFyICpfdHlwZWxpc3QsIGludCBfY250KQotI2Vsc2UKLWVuY3J5 cHRfc3VwcG9ydChfdHlwZWxpc3QsIF9jbnQpIHVuc2lnbmVkIGNoYXIgKiBfdHlwZWxpc3Q7IGlu dCBfY250OwotI2VuZGlmCi17Ci0gICAgcmVnaXN0ZXIgaW50IHR5cGUsIHVzZV90eXBlID0gMDsK LSAgICB1bnNpZ25lZCBjaGFyICogdHlwZWxpc3QgPSBfdHlwZWxpc3Q7Ci0gICAgaW50IGNudCA9 IF9jbnQ7Ci0gICAgRW5jcnlwdGlvbnMgKmVwOwotCi0gICAgZGVidWcoRjExMSwiZW5jcnlwdF9z dXBwb3J0IiwiY250IixjbnQpOwotCi0gIC8qCi0gICAqIEZvcmdldCBhbnl0aGluZyB0aGUgb3Ro ZXIgc2lkZSBoYXMgcHJldmlvdXNseSB0b2xkIHVzLgotICAgKi8KLSAgICByZW1vdGVfc3VwcG9y dHNfZGVjcnlwdCA9IDA7Ci0KLSAgICB3aGlsZSAoY250LS0gPiAwKSB7Ci0JZGVidWcoRjEwMSwi WFhYIGNudCIsIiIsY250KTsKLSAgICAgICAgdHlwZSA9ICp0eXBlbGlzdCsrOwotCWRlYnVnKEYx MDEsIlhYWCB0eXBlIiwiIix0eXBlKTsKLQlkZWJ1ZyhGMTAxLCJYWFggRU5DVFlQRV9BTlkiLCIi LEVOQ1RZUEVfQU5ZKTsKLSAgICAgICAgaWYgKCBFbmNyeXB0VHlwZSA9PSBFTkNUWVBFX0FOWSB8 fAotICAgICAgICAgICAgIEVuY3J5cHRUeXBlID09IHR5cGUgKSB7Ci0jaWZkZWYgREVCVUcKLSAg ICAgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKLSAgICAgICAgICAgICAgICBzcHJp bnRmKGRiZ2J1ZiwgIj4+PlJlbW90ZSBzdXBwb3J0cyAlcyAoJWQpXG4iLAotICAgICAgICAgICAg ICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRSh0eXBlKSwgdHlwZSk7ICAgICAgICAgICAgIC8qIHNh ZmUgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X3N1cHBvcnQiLGRiZ2J1 ZiwwKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgaWYgKCh0eXBlIDwgRU5D VFlQRV9DTlQpICYmCi0gICAgICAgICAgICAgICAgIChJX1NVUFBPUlRfRU5DUllQVCAmIHR5cGVt YXNrKHR5cGUpKSkgewotICAgICAgICAgICAgICAgIHJlbW90ZV9zdXBwb3J0c19kZWNyeXB0IHw9 IHR5cGVtYXNrKHR5cGUpOwotICAgICAgICAgICAgICAgIGlmICh1c2VfdHlwZSA9PSAwKQotICAg ICAgICAgICAgICAgICAgICB1c2VfdHlwZSA9IHR5cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiWFhYIHVzZV90eXBlIiwiIix1c2VfdHlwZSk7Ci0g ICAgaWYgKHVzZV90eXBlKSB7Ci0gICAgICAgIGVwID0gZmluZGVuY3J5cHRpb24odXNlX3R5cGUp OwotICAgICAgICBpZiAoIWVwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJlbmNyeXB0X3N1 cHBvcnQiLCJmaW5kZW5jcnlwdGlvbiA9PSBOVUxMIix1c2VfdHlwZSk7Ci0gICAgICAgICAgICBy ZXR1cm4oLTEpOwotICAgICAgICB9Ci0JZGVidWcoRjEwMCwiWFhYIGVwIG5vdCBOVUxMIiwiIiww KTsKLSAgICAgICAgdHlwZSA9IGVwLT5zdGFydCA/ICgqZXAtPnN0YXJ0KShESVJfRU5DUllQVCwg MCkgOiAwOwotCWRlYnVnKEYxMDEsIlhYWCBuZXcgdHlwZSIsIiIsdHlwZSk7Ci0jaWZkZWYgREVC VUcKLSAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgewotICAgICAgICAgICAgc3ByaW50 ZihkYmdidWYsICI+Pj4oKmVwLT5zdGFydCkoKSAlcyByZXR1cm5lZCAlZCAoJXMpXG4iLAotICAg ICAgICAgICAgICAgICAgICAgRU5DVFlQRV9OQU1FKHVzZV90eXBlKSwgdHlwZSwKLSAgICAgICAg ICAgICAgICAgICAgIEVOQ1JZUFRfTkFNRSh0eXBlKSk7ICAgICAgICAgICAgICAgICAgICAgICAv KiBzYWZlICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X3N1cHBvcnQiLGRiZ2J1 ZiwwKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmICh0eXBlIDwgMCkgewotICAgICAg ICAgICAgZGVidWcoRjExMSwiZW5jcnlwdF9zdXBwb3J0IiwidHlwZSA8IDAiLHR5cGUpOwotICAg ICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICBlbmNyeXB0X21vZGUgPSB1 c2VfdHlwZTsKLSAgICAgICAgaWYgKHR5cGUgPT0gMCkKLSAgICAgICAgICAgIGVuY3J5cHRfc3Rh cnRfb3V0cHV0KHVzZV90eXBlKTsKLSAgICAgICAgZGVidWcoRjExMSwiZW5jcnlwdF9zdXBwb3J0 Iiwic3VjY2VzcyIsdHlwZSk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgZGVidWco RjExMSwiZW5jcnlwdF9zdXBwb3J0IiwiZmFpbGVkIix1c2VfdHlwZSk7Ci0gICAgcmV0dXJuKC0x KTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWVuY3J5cHRfaXModW5zaWduZWQgY2hhciAq ZGF0YSwgaW50IGNudCkKLSNlbHNlCi1lbmNyeXB0X2lzKGRhdGEsIGNudCkgdW5zaWduZWQgY2hh ciAqZGF0YTsgaW50IGNudDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIEVuY3J5cHRp b25zICplcDsKLSAgICByZWdpc3RlciBpbnQgdHlwZSwgcmV0OwotCi0gICAgaWYgKC0tY250IDwg MCkKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB0eXBlID0gKmRhdGErKzsKLSAgICBpZiAodHlw ZSA8IEVOQ1RZUEVfQ05UKQotICAgICAgICByZW1vdGVfc3VwcG9ydHNfZW5jcnlwdCB8PSB0eXBl bWFzayh0eXBlKTsKLSAgICBpZiAoIShlcCA9IGZpbmRkZWNyeXB0aW9uKHR5cGUpKSkgewotI2lm ZGVmIERFQlVHCi0gICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKLSAgICAgICAgICAg IHNwcmludGYoZGJnYnVmLCAiPj4+ZW5jcnlwdF9pczogICIKLSAgICAgICAgICAgICAgICAgICAg ICJDYW4ndCBmaW5kIHR5cGUgJXMgKCVkKSBmb3IgaW5pdGlhbCBuZWdvdGlhdGlvblxuIiwKLSAg ICAgICAgICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRV9PSyh0eXBlKQotICAgICAgICAgICAgICAg ICAgICAgPyBFTkNUWVBFX05BTUUodHlwZSkgOiAiKHVua25vd24pIiwKLSAgICAgICAgICAgICAg ICAgICAgIHR5cGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzYWZl ICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X2lzIixkYmdidWYsMCk7Ci0gICAg ICAgIH0KLSNlbmRpZgotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAoIWVwLT5p cykgewotI2lmZGVmIERFQlVHCi0gICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKLSAg ICAgICAgICAgIHNwcmludGYoZGJnYnVmLCAiPj4+ZW5jcnlwdF9pczogICIKLSAgICAgICAgICAg ICAgICAgICAgICJObyBpbml0aWFsIG5lZ290aWF0aW9uIG5lZWRlZCBmb3IgdHlwZSAlcyAoJWQp XG4iLAotICAgICAgICAgICAgICAgICAgICAgRU5DVFlQRV9OQU1FX09LKHR5cGUpCi0gICAgICAg ICAgICAgICAgICAgICA/IEVOQ1RZUEVfTkFNRSh0eXBlKSA6ICIodW5rbm93bikiLAotICAgICAg ICAgICAgICAgICAgICAgdHlwZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHNhZmUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfaXMiLGRiZ2J1Ziww KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIHJldCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAg ICAgICAgcmV0ID0gKCplcC0+aXMpKGRhdGEsIGNudCk7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAg aWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgewotICAgICAgICAgICAgc3ByaW50ZihkYmdidWYsICJl bmNyeXB0X2lzOiAgIgotICAgICAgICAgICAgICAgICAgICAgIigqZXAtPmlzKSgleCwgJWQpIHJl dHVybmVkICVzKCVkKVxuIiwgZGF0YSwgY250LAotICAgICAgICAgICAgICAgICAgICAgKHJldCA8 IDApID8gIkZBSUwgIiA6Ci0gICAgICAgICAgICAgICAgICAgICAocmV0ID09IDApID8gIlNVQ0NF U1MgIiA6ICJNT1JFX1RPX0RPICIsIHJldCk7IC8qIHNhZmUgKi8KLSAgICAgICAgICAgIGRlYnVn KEYxMTAsImVuY3J5cHRfaXMiLGRiZ2J1ZiwwKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQot ICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgIGF1dG9kZWNyeXB0ID0gMDsKLSAgICAgICAgcmV0 dXJuKC0xKTsKLSAgICB9IGVsc2UgewotICAgICAgICBkZWNyeXB0X21vZGUgPSB0eXBlOwotICAg ICAgICBpZiAocmV0ID09IDAgJiYgYXV0b2RlY3J5cHQpIHsKLSAgICAgICAgICAgIGVuY3J5cHRf c2VuZF9yZXF1ZXN0X3N0YXJ0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKDApOwot fQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZW5jcnlwdF9yZXBseSh1bnNpZ25lZCBjaGFyICpk YXRhLCBpbnQgY250KQotI2Vsc2UKLWVuY3J5cHRfcmVwbHkoZGF0YSwgY250KSB1bnNpZ25lZCBj aGFyICpkYXRhOyBpbnQgY250OwotI2VuZGlmCi17Ci0gICAgRW5jcnlwdGlvbnMgKmVwOwotICAg IHJlZ2lzdGVyIGludCByZXQsIHR5cGU7Ci0KLSAgICBpZiAoLS1jbnQgPCAwKQotICAgICAgICBy ZXR1cm4oLTEpOwotICAgIHR5cGUgPSAqZGF0YSsrOwotICAgIGlmICghKGVwID0gZmluZGVuY3J5 cHRpb24odHlwZSkpKSB7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdf bW9kZSkgewotICAgICAgICAgICAgc3ByaW50ZihkYmdidWYsCi0gICAgICAgICAgICAgICAgICAg ICI+Pj5DYW4ndCBmaW5kIHR5cGUgJXMgKCVkKSBmb3IgaW5pdGlhbCBuZWdvdGlhdGlvblxuIiwK LSAgICAgICAgICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRV9PSyh0eXBlKQotICAgICAgICAgICAg ICAgICAgICAgPyBFTkNUWVBFX05BTUUodHlwZSkgOiAiKHVua25vd24pIiwKLSAgICAgICAgICAg ICAgICAgICAgIHR5cGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBz YWZlICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X3JlcGx5IixkYmdidWYsMCk7 Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAo IWVwLT5yZXBseSkgewotI2lmZGVmIERFQlVHCi0gICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21v ZGUpIHsKLSAgICAgIHNwcmludGYoZGJnYnVmLCAiPj4+Tm8gaW5pdGlhbCBuZWdvdGlhdGlvbiBu ZWVkZWQgZm9yIHR5cGUgJXMgKCVkKVxuIiwKLSAgICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRV9P Syh0eXBlKQotICAgICAgICAgICAgICAgPyBFTkNUWVBFX05BTUUodHlwZSkgOiAiKHVua25vd24p IiwKLSAgICAgICAgICAgICAgIHR5cGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBzYWZlICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X3Jl cGx5IixkYmdidWYsMCk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICByZXQgPSAwOwotICAg IH0gZWxzZSB7Ci0gICAgICAgIHJldCA9ICgqZXAtPnJlcGx5KShkYXRhLCBjbnQpOwotI2lmZGVm IERFQlVHCi0gICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKLSAgICAgICAgICAgIHNw cmludGYoZGJnYnVmLCAiKCplcC0+cmVwbHkpKCV4LCAlZCkgcmV0dXJuZWQgJXMoJWQpXG4iLAot ICAgICAgICAgICAgICAgICAgICAgZGF0YSwgY250LAotICAgICAgICAgICAgICAgICAgICAgKHJl dCA8IDApID8gIkZBSUwgIiA6Ci0gICAgICAgICAgICAgICAgICAgICAocmV0ID09IDApID8gIlNV Q0NFU1MgIiA6ICJNT1JFX1RPX0RPICIsIHJldCk7IC8qIHNhZmUgKi8KLSAgICAgICAgICAgIGRl YnVnKEYxMTAsImVuY3J5cHRfcmVwbHkiLGRiZ2J1ZiwwKTsKLSAgICAgICAgfQotI2VuZGlmCi0g ICAgfQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgewotICAgICAg ICBzcHJpbnRmKGRiZ2J1ZiwgIj4+PmVuY3J5cHRfcmVwbHkgcmV0dXJuZWQgJWRcbiIsIHJldCk7 IC8qIHNhZmUgKi8KLSAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9yZXBseSIsZGJnYnVmLDAp OwotICAgIH0KLSNlbmRpZgotICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgIGF1dG9lbmNyeXB0 ID0gMDsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbmNyeXB0 X21vZGUgPSB0eXBlOwotICAgICAgICBpZiAocmV0ID09IDAgJiYgYXV0b2VuY3J5cHQpCi0gICAg ICAgICAgICBlbmNyeXB0X3N0YXJ0X291dHB1dCh0eXBlKTsKLSAgICB9Ci0gICAgcmV0dXJuKDAp OwotfQotCi0vKgotICogQ2FsbGVkIHdoZW4gYSBFTkNSWVBUIFNUQVJUIGNvbW1hbmQgaXMgcmVj ZWl2ZWQuCi0gKi8KLWludAotI2lmZGVmIENLX0FOU0lDCi1lbmNyeXB0X3N0YXJ0KHVuc2lnbmVk IGNoYXIgKmRhdGEsIGludCBjbnQpCi0jZWxzZQotZW5jcnlwdF9zdGFydChkYXRhLCBjbnQpIHVu c2lnbmVkIGNoYXIgKmRhdGE7IGludCBjbnQ7Ci0jZW5kaWYKLXsKLSAgICBFbmNyeXB0aW9ucyAq ZXA7Ci0KLSAgICBpZiAoIWRlY3J5cHRfbW9kZSkgewotICAgICAgICAvKgotICAgICAgICAqIFNv bWV0aGluZyBpcyB3cm9uZy4gIFdlIHNob3VsZCBub3QgZ2V0IGEgU1RBUlQKLSAgICAgICAgKiBj b21tYW5kIHdpdGhvdXQgaGF2aW5nIGFscmVhZHkgcGlja2VkIG91cgotICAgICAgICAqIGRlY3J5 cHRpb24gc2NoZW1lLiAgU2VuZCBhIFJFUVVFU1QtRU5EIHRvCi0gICAgICAgICogYXR0ZW1wdCB0 byBjbGVhciB0aGUgY2hhbm5lbC4uLgotICAgICAgICAqLwotICAgICAgICBlbmNyeXB0X3NlbmRf cmVxdWVzdF9lbmQoKTsKLSAgICAgICAgcHJpbnRmKCJBdXRoZW50aWNhdGlvbiBlcnJvciFcbiVz XG4iLAotICAgICAgICAgICAgICAgICJXYXJuaW5nLCBDYW5ub3QgZGVjcnlwdCBpbnB1dCBzdHJl YW0hISEiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBpZiAoZXAgPSBmaW5k ZGVjcnlwdGlvbihkZWNyeXB0X21vZGUpKSB7Ci0gICAgICAgIGlmICggZGVjcnlwdF9pbnB1dCAh PSBlcC0+aW5wdXQgKSB7Ci0gICAgICAgICAgICBkZWNyeXB0X2lucHV0ID0gZXAtPmlucHV0Owot ICAgICAgICAgICAgRW5jcnlwdEtTR2xvYmFsSGFjay0+ZGVjcnlwdCA9IGRlY3J5cHRfa3Nfc3Ry ZWFtOwotICAgICAgICAgICAgRW5jcnlwdEtTR2xvYmFsSGFjay0+ZGVjcnlwdF90eXBlID0gZXAt PnR5cGU7Ci0KLSAgICAgICAgICAgIGlmIChlbmNyeXB0X3ZlcmJvc2UpIHsKLSAgICAgICAgICAg ICAgICBzcHJpbnRmKGRiZ2J1ZiwgIklucHV0IGlzIG5vdyBkZWNyeXB0ZWQgd2l0aCB0eXBlICVz IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBFTkNUWVBFX05BTUUoZGVjcnlwdF9tb2RlKSk7 ICAgICAgICAgICAvKiBzYWZlICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZW5jcnlw dF9zdGFydCIsZGJnYnVmLDApOwotICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsZGJnYnVm KTsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgaWYgKGVuY3J5cHRf ZGVidWdfbW9kZSkgewotICAgICAgICAgICAgICAgIHNwcmludGYoZGJnYnVmLCAiPj4+U3RhcnQg dG8gZGVjcnlwdCBpbnB1dCB3aXRoIHR5cGUgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAg IEVOQ1RZUEVfTkFNRShkZWNyeXB0X21vZGUpKTsgICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19jcnAiLGRiZ2J1ZiwwKTsKLSAgICAgICAgICAgIH0K LSNlbmRpZgotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciBidWZbMTAyNF07 Ci0gICAgICAgIHNwcmludGYoYnVmLCAiV2FybmluZywgQ2Fubm90IGRlY3J5cHQgdHlwZSAlcyAo JWQpISEhIiwKLSAgICAgICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRV9PSyhkZWNyeXB0X21vZGUp Ci0gICAgICAgICAgICAgICAgICA/IEVOQ1RZUEVfTkFNRShkZWNyeXB0X21vZGUpIDogIih1bmtu b3duKSIsCi0gICAgICAgICAgICAgICAgICBkZWNyeXB0X21vZGUpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogc2FmZSAqLwotICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0aW9u IGVycm9yIVxuJXNcbiIsYnVmKTsKLSAgICAgICAgZW5jcnlwdF9zZW5kX3JlcXVlc3RfZW5kKCk7 Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0j aWZkZWYgQ0tfQU5TSUMKLWVuY3J5cHRfZG9udF9zdXBwb3J0KGludCB0eXBlKQotI2Vsc2UKLWVu Y3J5cHRfZG9udF9zdXBwb3J0KHR5cGUpIGludCB0eXBlOwotI2VuZGlmCi17Ci0gICAgaV93b250 X3N1cHBvcnRfZW5jcnlwdCB8PSB0eXBlbWFzayh0eXBlKTsKLSAgICBpX3dvbnRfc3VwcG9ydF9k ZWNyeXB0IHw9IHR5cGVtYXNrKHR5cGUpOwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLWVuY3J5cHRfc2Vzc2lvbl9rZXkoU2Vzc2lvbl9LZXkgKmtleSwgaW50IHNl cnZlcikKLSNlbHNlCi1lbmNyeXB0X3Nlc3Npb25fa2V5KGtleSwgc2VydmVyKSBTZXNzaW9uX0tl eSAqa2V5OyBpbnQgc2VydmVyOwotI2VuZGlmCi17Ci0gICAgRW5jcnlwdGlvbnMgKmVwID0gZW5j cnlwdGlvbnM7Ci0KLSAgICBpZiAoaGF2ZXNlc3Npb25rZXkpCi0gICAgICAgIHJldHVybigwKTsK LQotICAgIGhhdmVzZXNzaW9ua2V5ID0gMTsKLQotICAgIHdoaWxlIChlcC0+dHlwZSkgewotICAg ICAgICBkZWJ1ZyhGMTExLCJlbmNyeXB0X3Nlc3Npb25fa2V5IixlcC0+bmFtZSxlcC0+dHlwZSk7 Ci0gICAgICAgIGlmIChlcC0+c2Vzc2lvbikgewotICAgICAgICAgICAgaWYgKCgqZXAtPnNlc3Np b24pKGtleSwgc2VydmVyKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpX3dvbnRfc3VwcG9ydF9l bmNyeXB0IHw9IHR5cGVtYXNrKGVwLT50eXBlKTsKLSAgICAgICAgICAgICAgICBpX3dvbnRfc3Vw cG9ydF9kZWNyeXB0IHw9IHR5cGVtYXNrKGVwLT50eXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgICAgICArK2VwOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJlbmNyeXB0X3Nlc3Np b25fa2V5IChkb25lKSIsZXAtPm5hbWUsZXAtPnR5cGUpOwotICAgIHJldHVybigwKTsKLX0KLQot LyoKLSAqIENhbGxlZCB3aGVuIEVOQ1JZUFQgRU5EIGlzIHJlY2VpdmVkLgotICovCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotZW5jcnlwdF9lbmQoVk9JRCkKLSNlbHNlCi1lbmNyeXB0X2VuZCgpCi0j ZW5kaWYKLXsKLSAgICBkZWNyeXB0X2lucHV0ID0gTlVMTDsKLSAgICBFbmNyeXB0S1NHbG9iYWxI YWNrLT5kZWNyeXB0ID0gTlVMTDsKLSAgICBFbmNyeXB0S1NHbG9iYWxIYWNrLT5kZWNyeXB0X3R5 cGUgPSBFTkNUWVBFX0FOWTsKLSNpZmRlZiBERUJVRwotICAgIGlmIChlbmNyeXB0X2RlYnVnX21v ZGUpIHsKLSAgICAgICAgc3ByaW50ZihkYmdidWYsICI+Pj5JbnB1dCBpcyBiYWNrIHRvIGNsZWFy IHRleHQiKTsgICAgICAvKiBzYWZlICovCi0gICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfZW5k IixkYmdidWYsMCk7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKGVuY3J5cHRfdmVyYm9zZSkgewot ICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIklucHV0IGlzIG5vdyBjbGVhciB0ZXh0Iik7ICAgICAg ICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9lbmQiLGRiZ2J1 ZiwwKTsKLSAgICAgICAgcHJpbnRmKCIlc1xuIixkYmdidWYpOwotICAgIH0KLSAgICByZXR1cm4o MCk7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2hlbiBFTkNSWVBUIFJFUVVFU1QtRU5EIGlzIHJlY2Vp dmVkLgotICovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZW5jcnlwdF9yZXF1ZXN0X2VuZChWT0lE KQotI2Vsc2UKLWVuY3J5cHRfcmVxdWVzdF9lbmQoKQotI2VuZGlmCi17Ci0gICAgZW5jcnlwdF9z ZW5kX2VuZCgpOwotICAgIHJldHVybigwKTsKLX0KLQotLyoKLSAqIENhbGxlZCB3aGVuIEVOQ1JZ UFQgUkVRVUVTVC1TVEFSVCBpcyByZWNlaXZlZC4gIElmIHdlIHJlY2VpdmUKLSAqIHRoaXMgYmVm b3JlIGEgdHlwZSBpcyBwaWNrZWQsIHRoZW4gdGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGUKLSAqIG90 aGVyIHNpZGUgd2FudHMgdXMgdG8gc3RhcnQgZW5jcnlwdGluZyBkYXRhIGFzIHNvb24gYXMgd2UK LSAqIGNhbi4KLSAqLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWVuY3J5cHRfcmVxdWVzdF9zdGFy dChWT0lEKQotI2Vsc2UKLWVuY3J5cHRfcmVxdWVzdF9zdGFydCgpCi0jZW5kaWYKLXsKLSAgICBp ZiAoZW5jcnlwdF9tb2RlICE9IDApCi0gICAgICAgIGVuY3J5cHRfc3RhcnRfb3V0cHV0KGVuY3J5 cHRfbW9kZSk7Ci0gICAgcmV0dXJuKDApOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBzdHJf a2V5aWRbKE1BWEtFWUxFTioyKSs1XSA9IHsKLSAgICBJQUMsIFNCLCBURUxPUFRfRU5DUllQVElP TgotfTsKLV9QUk9UT1RZUChpbnQgZW5jcnlwdF9rZXlpZCwoc3RydWN0IGtleV9pbmZvICosdW5z aWduZWQgY2hhciAqLGludCkpOwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZW5jcnlwdF9lbmNf a2V5aWQodW5zaWduZWQgY2hhciAqa2V5aWQsIGludCBsZW4pCi0jZWxzZQotZW5jcnlwdF9lbmNf a2V5aWQoa2V5aWQsIGxlbikgdW5zaWduZWQgY2hhciAqa2V5aWQ7IGludCBsZW47Ci0jZW5kaWYK LXsKLSAgICByZXR1cm4oZW5jcnlwdF9rZXlpZCgma2lbMV0sIGtleWlkLCBsZW4pKTsKLX0KLQot aW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWVuY3J5cHRfZGVjX2tleWlkKHVuc2lnbmVkIGNoYXIgKmtl eWlkLCBpbnQgbGVuKQotI2Vsc2UKLWVuY3J5cHRfZGVjX2tleWlkKGtleWlkLCBsZW4pIHVuc2ln bmVkIGNoYXIgKmtleWlkOyBpbnQgbGVuOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAg cmV0dXJuKGVuY3J5cHRfa2V5aWQoJmtpWzBdLCBrZXlpZCwgbGVuKSk7Ci19Ci0KLWludAotI2lm ZGVmIENLX0FOU0lDCi1lbmNyeXB0X2tleWlkKHN0cnVjdCBrZXlfaW5mbyAqa3AsIHVuc2lnbmVk IGNoYXIgKmtleWlkLCBpbnQgbGVuKQotI2Vsc2UKLWVuY3J5cHRfa2V5aWQoa3AsIGtleWlkLCBs ZW4pCi0gICAgc3RydWN0IGtleV9pbmZvICprcDsgdW5zaWduZWQgY2hhciAqa2V5aWQ7IGludCBs ZW47Ci0jZW5kaWYKLXsKLSAgICBFbmNyeXB0aW9ucyAqZXA7Ci0gICAgaW50IGRpciA9IGtwLT5k aXI7Ci0gICAgcmVnaXN0ZXIgaW50IHJldCA9IDA7Ci0KLSAgICBpZiAoIShlcCA9ICgqa3AtPmdl dGNyeXB0KSgqa3AtPm1vZGVwKSkpIHsKLSAgICAgICAgaWYgKGxlbiA9PSAwKQotICAgICAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICAgICAga3AtPmtleWxlbiA9IDA7Ci0gICAgfSBlbHNlIGlmIChs ZW4gPT0gMCB8fCBsZW4gPiBNQVhLRVlMRU4pIHsKLSAgICAgICAgLyoKLSAgICAgICAgKiBFbXB0 eSBvcHRpb24gb3IgS2V5IHRvbyBsb25nLCBpbmRpY2F0ZXMgYSBmYWlsdXJlLgotICAgICAgICAq LwotICAgICAgICBpZiAoa3AtPmtleWxlbiA9PSAwKQotICAgICAgICAgICAgcmV0dXJuKC0xKTsK LSAgICAgICAga3AtPmtleWxlbiA9IDA7Ci0gICAgICAgIGlmIChlcC0+a2V5aWQpCi0gICAgICAg ICAgICAodm9pZCkoKmVwLT5rZXlpZCkoZGlyLCBrcC0+a2V5aWQsICZrcC0+a2V5bGVuKTsKLQot ICAgIH0gZWxzZSBpZiAoKGxlbiAhPSBrcC0+a2V5bGVuKSB8fCAobWVtY21wKGtleWlkLCBrcC0+ a2V5aWQsIGxlbikgIT0gMCkpIHsKLSAgICAgICAgLyoKLSAgICAgICAgKiBMZW5ndGggb3IgY29u dGVudHMgYXJlIGRpZmZlcmVudAotICAgICAgICAqLwotICAgICAgICBrcC0+a2V5bGVuID0gbGVu OwotICAgICAgICBtZW1jcHkoa3AtPmtleWlkLCBrZXlpZCwgbGVuKTsgICAgICAgICAgLyogbGVu Z3RoIDwgTUFYS0VZTEVOICovCi0gICAgICAgIGlmIChlcC0+a2V5aWQpCi0gICAgICAgICAgICAo dm9pZCkoKmVwLT5rZXlpZCkoZGlyLCBrcC0+a2V5aWQsICZrcC0+a2V5bGVuKTsKLSAgICB9IGVs c2UgewotICAgICAgICBpZiAoZXAtPmtleWlkKQotICAgICAgICAgICAgcmV0ID0gKCplcC0+a2V5 aWQpKGRpciwga3AtPmtleWlkLCAma3AtPmtleWxlbik7Ci0gICAgICAgIGlmICgocmV0ID09IDAp ICYmIChkaXIgPT0gRElSX0VOQ1JZUFQpICYmIGF1dG9lbmNyeXB0KQotICAgICAgICAgICAgZW5j cnlwdF9zdGFydF9vdXRwdXQoKmtwLT5tb2RlcCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9 Ci0KLSAgICBlbmNyeXB0X3NlbmRfa2V5aWQoZGlyLCBrcC0+a2V5aWQsIGtwLT5rZXlsZW4sIDAp OwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWVuY3J5cHRfc2Vu ZF9rZXlpZChpbnQgZGlyLCB1bnNpZ25lZCBjaGFyICprZXlpZCwgaW50IGtleWxlbiwgaW50IHNh dmVpdCkKLSNlbHNlCi1lbmNyeXB0X3NlbmRfa2V5aWQoZGlyLCBrZXlpZCwga2V5bGVuLCBzYXZl aXQpCi0gICAgIGludCBkaXI7IHVuc2lnbmVkIGNoYXIgKmtleWlkOyBpbnQga2V5bGVuOyBpbnQg c2F2ZWl0OwotI2VuZGlmCi17Ci0gICAgdW5zaWduZWQgY2hhciAqc3RycDsKLQotI2lmZGVmIENL X1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2Zv bGxvd3MpCi0gICAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIHN0 cl9rZXlpZFszXSA9IChkaXIgPT0gRElSX0VOQ1JZUFQpCi0gICAgICAgID8gRU5DUllQVF9FTkNf S0VZSUQgOiBFTkNSWVBUX0RFQ19LRVlJRDsKLSAgICBpZiAoc2F2ZWl0ICYmIGtleWxlbiA8PSBN QVhLRVlMRU4pIHsKLSAgICAgICAgc3RydWN0IGtleV9pbmZvICprcCA9ICZraVsoZGlyID09IERJ Ul9FTkNSWVBUKSA/IDAgOiAxXTsKLSAgICAgICAgbWVtY3B5KGtwLT5rZXlpZCwga2V5aWQsIGtl eWxlbik7Ci0gICAgICAgIGtwLT5rZXlsZW4gPSBrZXlsZW47Ci0gICAgfQotCi0gICAgZm9yIChz dHJwID0gJnN0cl9rZXlpZFs0XTsga2V5bGVuID4gMDsgLS1rZXlsZW4pIHsKLSAgICAgICAgaWYg KCgqc3RycCsrID0gKmtleWlkKyspID09IElBQykKLSAgICAgICAgICAgICpzdHJwKysgPSBJQUM7 Ci0gICAgfQotICAgICpzdHJwKysgPSBJQUM7Ci0gICAgKnN0cnArKyA9IFNFOwotCi0gICAgaWYg KGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGludCBpOwotICAgICAgICBz cHJpbnRmKHRuX21zZywiVEVMTkVUIFNFTlQgU0IgJXMgJXMgIiwKLSAgICAgICAgICAgICAgICAg VEVMT1BUKFRFTE9QVF9FTkNSWVBUSU9OKSwKLSAgICAgICAgICAgICAgICAgKGRpciA9PSBESVJf RU5DUllQVCkgPyAiRU5DLUtFWUlEIiA6ICJERUMtS0VZSUQiKTsgLyogc2FmZSAqLwotICAgICAg ICB0bl9oZXgoKENIQVIgKil0bl9tc2csVE5fTVNHX0xFTiwmc3RyX2tleWlkWzRdLHN0cnAtc3Ry X2tleWlkLTItNCk7Ci0gICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNHX0xF Tik7Ci0gICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOwotICAgICAgICBpZiAodG5fZGVi IHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICB9Ci0jaWZkZWYgT1MyCi0gICAgUmVx dWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSAgICB0dG9s KHN0cl9rZXlpZCwgc3RycCAtIHN0cl9rZXlpZCk7Ci0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRl bG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICByZXR1cm4oMCk7Ci19Ci0KLVZPSUQKLSNpZmRlZiBD S19BTlNJQwotZW5jcnlwdF9hdXRvKGludCBvbikKLSNlbHNlCi1lbmNyeXB0X2F1dG8ob24pIGlu dCBvbjsKLSNlbmRpZgotewotICAgIGlmIChvbiA8IDApCi0gICAgICAgIGF1dG9lbmNyeXB0IF49 IDE7Ci0gICAgZWxzZQotICAgICAgICBhdXRvZW5jcnlwdCA9IG9uID8gMSA6IDA7Ci19Ci0KLVZP SUQKLSNpZmRlZiBDS19BTlNJQwotZGVjcnlwdF9hdXRvKGludCBvbikKLSNlbHNlCi1kZWNyeXB0 X2F1dG8ob24pIGludCBvbjsKLSNlbmRpZgotewotICAgIGlmIChvbiA8IDApCi0gICAgICAgIGF1 dG9kZWNyeXB0IF49IDE7Ci0gICAgZWxzZQotICAgICAgICBhdXRvZGVjcnlwdCA9IG9uID8gMSA6 IDA7Ci19Ci0KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotZW5jcnlwdF9zdGFydF9vdXRwdXQoaW50 IHR5cGUpCi0jZWxzZQotZW5jcnlwdF9zdGFydF9vdXRwdXQodHlwZSkgaW50IHR5cGU7Ci0jZW5k aWYKLXsKLSAgICBFbmNyeXB0aW9ucyAqZXA7Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAq cDsKLSAgICByZWdpc3RlciBpbnQgaTsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRf U0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpCi0gICAgICAgIHJldHVy bjsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIGlmICghKGVwID0gZmluZGVuY3J5cHRpb24o dHlwZSkpKSB7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkg ewotICAgICAgICAgICAgc3ByaW50ZihkYmdidWYsICI+Pj5DYW4ndCBlbmNyeXB0IHdpdGggdHlw ZSAlcyAoJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgRU5DVFlQRV9OQU1FX09LKHR5cGUp Ci0gICAgICAgICAgICAgICAgICAgICA/IEVOQ1RZUEVfTkFNRSh0eXBlKSA6ICIodW5rbm93biki LAotICAgICAgICAgICAgICAgICAgICAgdHlwZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfc3Rh cnRfb3V0cHV0IixkYmdidWYsMCk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICByZXR1cm47 Ci0gICAgfQotICAgIGlmIChlcC0+c3RhcnQpIHsKLSAgICAgICAgaSA9ICgqZXAtPnN0YXJ0KShE SVJfRU5DUllQVCwgMCk7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdf bW9kZSkgewotICAgICAgICAgICAgc3ByaW50ZihkYmdidWYsICI+Pj5FbmNyeXB0IHN0YXJ0OiAl cyAoJWQpICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgKGkgPCAwKSA/ICJmYWlsZWQiIDoK LSAgICAgICAgICAgICAgICAgICAgICJpbml0aWFsIG5lZ290aWF0aW9uIGluIHByb2dyZXNzIiwK LSAgICAgICAgICAgICAgICAgICAgIGksIEVOQ1RZUEVfTkFNRSh0eXBlKSk7ICAgICAgICAgICAg ICAgICAgICAvKiBzYWZlICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X3N0YXJ0 X291dHB1dCIsZGJnYnVmLDApOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKGkpCi0g ICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCBlbmNyeXB0X291dHB1dCAhPSBl cC0+b3V0cHV0ICkgewotICAgICAgICBwID0gc3RyX3N0YXJ0OwotICAgICAgICAqcCsrID0gSUFD OwotICAgICAgICAqcCsrID0gU0I7Ci0gICAgICAgICpwKysgPSBURUxPUFRfRU5DUllQVElPTjsK LSAgICAgICAgKnArKyA9IEVOQ1JZUFRfU1RBUlQ7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBr aVswXS5rZXlsZW47ICsraSkgewotICAgICAgICAgICAgaWYgKCggKnArKyA9IGtpWzBdLmtleWlk W2ldKSA9PSBJQUMpCi0gICAgICAgICAgICAgICAgKnArKyA9IElBQzsKLSAgICAgICAgfQotICAg ICAgICAqcCsrID0gSUFDOwotICAgICAgICAqcCsrID0gU0U7Ci0KLSAgICAgICAgaWYgKGRlYmxv ZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAg IHNwcmludGYodG5fbXNnLCJURUxORVQgU0VOVCBTQiAlcyBTVEFSVCAiLAotICAgICAgICAgICAg ICAgICAgICAgVEVMT1BUKFRFTE9QVF9FTkNSWVBUSU9OKSk7ICAgICAgICAgICAgICAgIC8qIHNh ZmUgKi8KLSAgICAgICAgICAgIHRuX2hleCgoQ0hBUiAqKXRuX21zZyxUTl9NU0dfTEVOLCZzdHJf c3RhcnRbNF0scC1zdHJfc3RhcnQtMi00KTsKLSAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2cs IklBQyBTRSIsVE5fTVNHX0xFTik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiww KTsKLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOwot ICAgICAgICB9Ci0jaWZkZWYgT1MyCi0gICAgICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lO REVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0gICAgICAgIHR0b2woc3RyX3N0YXJ0LCBwIC0gc3Ry X3N0YXJ0KTsKLSNpZmRlZiBPUzIKLSAgICAgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5k aWYKLQotICAvKgotICAgKiBJZiB3ZSBhcmUgYWxyZWFkeSBlbmNyeXB0aW5nIGluIHNvbWUgbW9k ZSwgdGhlbgotICAgKiBlbmNyeXB0IHRoZSByaW5nICh3aGljaCBpbmNsdWRlcyBvdXIgcmVxdWVz dCkgaW4KLSAgICogdGhlIG9sZCBtb2RlLCBtYXJrIGl0IGFsbCBhcyAiY2xlYXIgdGV4dCIgYW5k IHRoZW4KLSAgICogc3dpdGNoIHRvIHRoZSBuZXcgbW9kZS4KLSAgICovCi0gICAgICAgIGVuY3J5 cHRfb3V0cHV0ID0gZXAtPm91dHB1dDsKLSAgICAgICAgRW5jcnlwdEtTR2xvYmFsSGFjay0+ZW5j cnlwdCA9IGVuY3J5cHRfa3Nfc3RyZWFtOwotICAgICAgICBFbmNyeXB0S1NHbG9iYWxIYWNrLT5l bmNyeXB0X3R5cGUgPSB0eXBlOwotICAgICAgICBlbmNyeXB0X21vZGUgPSB0eXBlOwotI2lmZGVm IERFQlVHCi0gICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKLSAgICAgICAgICAgIHNw cmludGYoZGJnYnVmLCAiPj4+U3RhcnRlZCB0byBlbmNyeXB0IG91dHB1dCB3aXRoIHR5cGUgJXMi LAotICAgICAgICAgICAgICAgICAgICAgRU5DVFlQRV9OQU1FKHR5cGUpKTsgICAgICAgICAgICAg ICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfc3Rh cnRfb3V0cHV0IixkYmdidWYsMCk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAoZW5j cnlwdF92ZXJib3NlKSB7Ci0gICAgICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIk91dHB1dCBpcyBu b3cgZW5jcnlwdGVkIHdpdGggdHlwZSAlcyIsCi0gICAgICAgICAgICAgICAgICAgICBFTkNUWVBF X05BTUUodHlwZSkpOyAgICAgICAgICAgICAgICAgICAgICAgLyogc2FmZSAqLwotICAgICAgICAg ICAgZGVidWcoRjExMCwiZW5jcnlwdF9zdGFydF9vdXRwdXQiLGRiZ2J1ZiwwKTsKLSAgICAgICAg ICAgIHByaW50ZigiJXNcbiIsZGJnYnVmKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotVk9JRAot I2lmZGVmIENLX0FOU0lDCi1lbmNyeXB0X3NlbmRfZW5kKFZPSUQpCi0jZWxzZQotZW5jcnlwdF9z ZW5kX2VuZCgpCi0jZW5kaWYKLXsKLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRF TE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKQotICAgICAgICByZXR1cm47Ci0j ZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICBpZiAoIWVuY3J5cHRfb3V0cHV0KQotICAgICAgICBy ZXR1cm47Ci0KLSAgICBzdHJfZW5kWzBdID0gSUFDOwotICAgIHN0cl9lbmRbMV0gPSBTQjsKLSAg ICBzdHJfZW5kWzJdID0gVEVMT1BUX0VOQ1JZUFRJT047Ci0gICAgc3RyX2VuZFszXSA9IEVOQ1JZ UFRfRU5EOwotICAgIHN0cl9lbmRbNF0gPSBJQUM7Ci0gICAgc3RyX2VuZFs1XSA9IFNFOwotCi0g ICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGludCBpOwotICAg ICAgICBzcHJpbnRmKHRuX21zZywiVEVMTkVUIFNFTlQgU0IgJXMgRU5EIElBQyBTRSIsCi0gICAg ICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfRU5DUllQVElPTikpOyAgICAgICAgICAgICAgICAg ICAgLyogc2FmZSAqLwotICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAg aWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgfQotI2lmZGVmIE9T MgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlm Ci0gICAgdHRvbChzdHJfZW5kLCBzaXplb2Yoc3RyX2VuZCkpOwotI2lmZGVmIE9TMgotICAgIFJl bGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0KLSAgICBlbmNyeXB0X291dHB1dCA9IDA7Ci0g ICAgRW5jcnlwdEtTR2xvYmFsSGFjay0+ZW5jcnlwdCA9IE5VTEw7Ci0gICAgRW5jcnlwdEtTR2xv YmFsSGFjay0+ZW5jcnlwdF90eXBlID0gRU5DVFlQRV9BTlk7Ci0jaWZkZWYgREVCVUcKLSAgICBp ZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7Ci0gICAgICAgIHNwcmludGYoZGJnYnVmLCAiPj4+T3V0 cHV0IGlzIGJhY2sgdG8gY2xlYXIgdGV4dCIpOyAgICAgLyogc2FmZSAqLwotICAgICAgICBkZWJ1 ZyhGMTEwLCJlbmNyeXB0X3NlbmRfZW5kIixkYmdidWYsMCk7Ci0gICAgfQotI2VuZGlmCi0gICAg aWYgKGVuY3J5cHRfdmVyYm9zZSkgewotICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIk91dHB1dCBp cyBub3cgY2xlYXIgdGV4dCIpOyAgICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgZGVidWco RjExMCwiZW5jcnlwdF9zZW5kX2VuZCIsZGJnYnVmLDApOwotICAgICAgICBwcmludGYoIiVzXG4i LGRiZ2J1Zik7Ci0gICAgfQotfQotCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWVuY3J5cHRfc2Vu ZF9yZXF1ZXN0X3N0YXJ0KFZPSUQpCi0jZWxzZQotZW5jcnlwdF9zZW5kX3JlcXVlc3Rfc3RhcnQo KQotI2VuZGlmCi17Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqcDsKLSAgICByZWdpc3Rl ciBpbnQgaTsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJU X1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZiAvKiBD S19TU0wgKi8KLQotICAgIHAgPSBzdHJfc3RhcnQ7Ci0gICAgKnArKyA9IElBQzsKLSAgICAqcCsr ID0gU0I7Ci0gICAgKnArKyA9IFRFTE9QVF9FTkNSWVBUSU9OOwotICAgICpwKysgPSBFTkNSWVBU X1JFUVNUQVJUOwotICAgIGZvciAoaSA9IDA7IGkgPCBraVsxXS5rZXlsZW47ICsraSkgewotICAg ICAgICBpZiAoKCAqcCsrID0ga2lbMV0ua2V5aWRbaV0pID09IElBQykKLSAgICAgICAgICAgICpw KysgPSBJQUM7Ci0gICAgfQotICAgICpwKysgPSBJQUM7Ci0gICAgKnArKyA9IFNFOwotCi0gICAg aWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGludCBpOwotICAgICAg ICBzcHJpbnRmKHRuX21zZywiVEVMTkVUIFNFTlQgU0IgJXMgUkVRVUVTVC1TVEFSVCAiLAotICAg ICAgICAgICAgICAgICBURUxPUFQoVEVMT1BUX0VOQ1JZUFRJT04pKTsgICAgICAgICAgICAgICAg ICAgIC8qIHNhZmUgKi8KLSAgICAgICAgdG5faGV4KChDSEFSICopdG5fbXNnLFROX01TR19MRU4s JnN0cl9zdGFydFs0XSxwLXN0cl9zdGFydC0yLTQpOwotICAgICAgICBja3N0cm5jYXQodG5fbXNn LCJJQUMgU0UiLFROX01TR19MRU4pOwotICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsK LSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgfQot I2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCAp OwotI2VuZGlmCi0gICAgdHRvbChzdHJfc3RhcnQsIHAgLSBzdHJfc3RhcnQpOwotI2lmZGVmIE9T MgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0KLSAgICBpZiAoZW5jcnlwdF9k ZWJ1Z19tb2RlKSB7Ci0gICAgICAgIHNwcmludGYoZGJnYnVmLCAiPj4+UmVxdWVzdCBpbnB1dCB0 byBiZSBlbmNyeXB0ZWRcbiIpOyAgLyogc2FmZSAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNy eXB0X3NlbmRfcmVxdWVzdF9zdGFydCIsZGJnYnVmLDApOwotICAgIH0KLX0KLQotVk9JRAotI2lm ZGVmIENLX0FOU0lDCi1lbmNyeXB0X3NlbmRfcmVxdWVzdF9lbmQoVk9JRCkKLSNlbHNlCi1lbmNy eXB0X3NlbmRfcmVxdWVzdF9lbmQoKQotI2VuZGlmCi17Ci0jaWZkZWYgQ0tfU1NMCi0gICAgaWYg KFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykKLSAgICAg ICAgcmV0dXJuOwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgc3RyX2VuZFswXSA9IElBQzsK LSAgICBzdHJfZW5kWzFdID0gU0I7Ci0gICAgc3RyX2VuZFsyXSA9IFRFTE9QVF9FTkNSWVBUSU9O OwotICAgIHN0cl9lbmRbM10gPSBFTkNSWVBUX1JFUUVORDsKLSAgICBzdHJfZW5kWzRdID0gSUFD OwotICAgIHN0cl9lbmRbNV0gPSBTRTsKLQotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRl YnNlcykgewotICAgICAgICBpbnQgaTsKLSAgICAgICAgc3ByaW50Zih0bl9tc2csIlRFTE5FVCBT RU5UIFNCICVzIFJFUUVORCBJQUMgU0UiLAotICAgICAgICAgICAgICAgICBURUxPUFQoVEVMT1BU X0VOQ1JZUFRJT04pKTsgICAgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgZGVi dWcoRjEwMCx0bl9tc2csIiIsMCk7Ci0gICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9k ZWJ1Zyh0bl9tc2cpOwotICAgIH0KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgo IFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotICAgIHR0b2woc3RyX2VuZCwgc2l6ZW9m KHN0cl9lbmQpKTsKLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRp ZgotCi0gICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgewotICAgICAgICBzcHJpbnRmKGRiZ2J1 ZiwgIj4+PlJlcXVlc3QgaW5wdXQgdG8gYmUgY2xlYXIgdGV4dFxuIik7IC8qIHNhZmUgKi8KLSAg ICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9zZW5kX3JlcXVlc3RfZW5kIixkYmdidWYsMCk7Ci0g ICAgfQotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZW5jcnlwdF9pc19lbmNyeXB0aW5nKFZP SUQpCi0jZWxzZQotZW5jcnlwdF9pc19lbmNyeXB0aW5nKCkKLSNlbmRpZgotewotICAgIGlmIChl bmNyeXB0X291dHB1dCkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlu dAotI2lmZGVmIENLX0FOU0lDCi1lbmNyeXB0X2lzX2RlY3J5cHRpbmcoVk9JRCkKLSNlbHNlCi1l bmNyeXB0X2lzX2RlY3J5cHRpbmcoKQotI2VuZGlmCi17Ci0gICAgaWYgKGRlY3J5cHRfaW5wdXQp Ci0gICAgICAgIHJldHVybiAxOwotICAgIHJldHVybiAwOwotfQotCi0jaWZkZWYgREVCVUcKLXZv aWQKLWVuY3J5cHRfZGVidWcobW9kZSkKLSAgICAgaW50IG1vZGU7Ci17Ci0gICAgZW5jcnlwdF9k ZWJ1Z19tb2RlID0gbW9kZTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ0tfREVTCi0vKi0KLSAqIENv cHlyaWdodCAoYykgMTk5MSwgMTk5MwotICogICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z2VtZW50OgotICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKiAgICAgIENhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBp dHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0 eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRv IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQot ICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JT IGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAq IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT Ci0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKiBiYXNlZCBv biBAKCMpZW5jX2Rlcy5jICAgICAgIDguMSAoQmVya2VsZXkpIDYvNC85MyAqLwotCi0jZGVmaW5l IENGQiAgICAgMAotI2RlZmluZSBPRkIgICAgIDEKLQotI2RlZmluZSBOT19TRU5EX0lWICAgICAg MQotI2RlZmluZSBOT19SRUNWX0lWICAgICAgMgotI2RlZmluZSBOT19LRVlJRCAgICAgICAgNAot I2RlZmluZSBJTl9QUk9HUkVTUyAgICAgKE5PX1NFTkRfSVZ8Tk9fUkVDVl9JVnxOT19LRVlJRCkK LSNkZWZpbmUgU1VDQ0VTUyAgICAgICAgIDAKLSNkZWZpbmUgeEZBSUxFRCAgICAgICAgIC0xCi0K LVNjaGVkdWxlIHRlc3Rfc2NoZWQ7Ci0KLXN0cnVjdCBkZXNfc3RpbmZvIHsKLSAgICBCbG9jayAg ICAgICAgICAgICAgIHN0cl9vdXRwdXQ7Ci0gICAgQmxvY2sgICAgICAgICAgICAgICBzdHJfZmVl ZDsKLSAgICBCbG9jayAgICAgICAgICAgICAgIHN0cl9pdjsKLSAgICBCbG9jayAgICAgICAgICAg ICAgIHN0cl9pa2V5OwotI2lmZGVmIE1JVF9DVVJSRU5UCi0gICAgdW5zaWduZWQgY2hhciAgICAg ICBzdHJfa2V5Ynl0ZXNbOF07Ci0gICAga3JiNV9rZXlibG9jayAgICAgICBzdHJfa2V5OwotI2Vs c2UgLyogTUlUX0NVUlJFTlQgKi8KLSAgICBTY2hlZHVsZSAgICAgICAgICAgIHN0cl9zY2hlZDsK LSAgICBpbnQgICAgICAgICAgICAgICAgIHN0cl9pbmRleDsKLSNlbmRpZiAvKiBNSVRfQ1VSUkVO VCAqLwotICAgIGludCAgICAgICAgICAgICAgICAgc3RyX2ZsYWdzaGlmdDsKLX07Ci0KLXN0cnVj dCBkZXNfZmIgewotI2lmbmRlZiBNSVRfQ1VSUkVOVAotICAgIEJsb2NrIGtyYmRlc19rZXk7Ci0g ICAgU2NoZWR1bGUga3JiZGVzX3NjaGVkOwotI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCi0gICAg QmxvY2sgdGVtcF9mZWVkOwotICAgIHVuc2lnbmVkIGNoYXIgZmJfZmVlZFs2NF07Ci0gICAgaW50 IG5lZWRfc3RhcnQ7Ci0gICAgaW50IHN0YXRlWzJdOwotICAgIGludCBrZXlpZFsyXTsKLSAgICBp bnQgb25jZTsKLSNpZmRlZiBNSVRfQ1VSUkVOVAotICAgIGludCB2YWxpZGtleTsKLSNlbmRpZiAv KiBNSVRfQ1VSUkVOVCAqLwotICAgIHN0cnVjdCBkZXNfc3RpbmZvICBzdHJlYW1zWzJdOwotfTsK LXN0YXRpYyBzdHJ1Y3QgZGVzX2ZiIGRlc19mYlsyXTsKLQotc3RydWN0IGRlczNfc3RpbmZvIHsK LSAgICBCbG9jayAgICAgICAgICAgICAgIHN0cl9vdXRwdXQ7Ci0gICAgQmxvY2sgICAgICAgICAg ICAgICBzdHJfZmVlZDsKLSAgICBCbG9jayAgICAgICAgICAgICAgIHN0cl9pdjsKLSAgICBCbG9j ayAgICAgICAgICAgICAgIHN0cl9pa2V5WzNdOwotICAgIFNjaGVkdWxlICAgICAgICAgICAgc3Ry X3NjaGVkWzNdOwotICAgIGludCAgICAgICAgICAgICAgICAgc3RyX2luZGV4OwotICAgIGludCAg ICAgICAgICAgICAgICAgc3RyX2ZsYWdzaGlmdDsKLX07Ci0KLXN0cnVjdCBkZXMzX2ZiIHsKLSNp Zm5kZWYgTUlUX0NVUlJFTlQKLSAgICBCbG9jayBrcmJkZXNfa2V5WzNdOwotICAgIFNjaGVkdWxl IGtyYmRlc19zY2hlZFszXTsKLSNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLwotICAgIEJsb2NrIHRl bXBfZmVlZDsKLSAgICB1bnNpZ25lZCBjaGFyIGZiX2ZlZWRbNjRdOwotICAgIGludCBuZWVkX3N0 YXJ0OwotICAgIGludCBzdGF0ZVsyXTsKLSAgICBpbnQga2V5aWRbMl07Ci0gICAgaW50IG9uY2U7 Ci0jaWZkZWYgTUlUX0NVUlJFTlQKLSAgICBpbnQgdmFsaWRrZXk7Ci0jZW5kaWYgLyogTUlUX0NV UlJFTlQgKi8KLSAgICBzdHJ1Y3QgZGVzM19zdGluZm8gc3RyZWFtc1syXTsKLX07Ci1zdGF0aWMg c3RydWN0IGRlczNfZmIgZGVzM19mYlsyXTsKLQotc3RydWN0IGtleWlkbGlzdCB7Ci0gICAgY2hh ciAgICAgICAgKmtleWlkOwotICAgIGludCBrZXlpZGxlbjsKLSAgICBjaGFyICAgICAgICAqa2V5 OwotICAgIGludCBrZXlsZW47Ci0gICAgaW50IGZsYWdzOwotfSBrZXlpZGxpc3QgW10gPSB7Ci0g ICAgeyAiXDAiLCAxLCAwLCAwLCAwIH0sICAgICAgICAgICAgICAgLyogZGVmYXVsdCBrZXkgb2Yg emVybyAqLwotICAgIHsgMCwgMCwgMCwgMCwgMCB9Ci19OwotCi0jZGVmaW5lIEtFWUZMQUdfTUFT SyAgICAwMwotCi0jZGVmaW5lIEtFWUZMQUdfTk9JTklUICAwMAotI2RlZmluZSBLRVlGTEFHX0lO SVQgICAgMDEKLSNkZWZpbmUgS0VZRkxBR19PSyAgICAgIDAyCi0jZGVmaW5lIEtFWUZMQUdfQkFE ICAgICAwMwotCi0jZGVmaW5lIEtFWUZMQUdfU0hJRlQgICAyCi0KLSNkZWZpbmUgU0hJRlRfVkFM KGEsYikgIChLRVlGTEFHX1NISUZUKigoYSkrKChiKSoyKSkpCi0KLSNkZWZpbmUgRkI2NF9JViAg ICAgICAgIDEKLSNkZWZpbmUgRkI2NF9JVl9PSyAgICAgIDIKLSNkZWZpbmUgRkI2NF9JVl9CQUQg ICAgIDMKLSNkZWZpbmUgRkI2NF9DSEFMTEVOR0UgIDQKLSNkZWZpbmUgRkI2NF9SRVNQT05TRSAg IDUKLQotdm9pZCBmYjY0X3N0cmVhbV9pdiBQKChCbG9jaywgc3RydWN0IGRlc19zdGluZm8gKikp Owotdm9pZCBmYjY0X2luaXQgUCgoc3RydWN0IGRlc19mYiAqKSk7Ci1zdGF0aWMgaW50IGZiNjRf c3RhcnQgUCgoc3RydWN0IGRlc19mYiAqLCBpbnQsIGludCkpOwotaW50IGZiNjRfaXMgUCgodW5z aWduZWQgY2hhciAqLCBpbnQsIHN0cnVjdCBkZXNfZmIgKikpOwotaW50IGZiNjRfcmVwbHkgUCgo dW5zaWduZWQgY2hhciAqLCBpbnQsIHN0cnVjdCBkZXNfZmIgKikpOwotc3RhdGljIGludCBmYjY0 X3Nlc3Npb24gUCgoU2Vzc2lvbl9LZXkgKiwgaW50LCBzdHJ1Y3QgZGVzX2ZiICopKTsKLXZvaWQg ZmI2NF9zdHJlYW1fa2V5IFAoKEJsb2NrLCBzdHJ1Y3QgZGVzX3N0aW5mbyAqKSk7Ci1pbnQgZmI2 NF9rZXlpZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICosIHN0cnVjdCBkZXNfZmIgKikp OwotCi0jaWZkZWYgTUlUX0NVUlJFTlQKLXN0YXRpYyB2b2lkCi0jaWZkZWYgQ0tfQU5TSUMKLWVj Yl9lbmNyeXB0KHN0cnVjdCBkZXNfc3RpbmZvICpzdHAsIEJsb2NrIGluLCBCbG9jayBvdXQpCi0j ZWxzZSAvKiBDS0FOU0lDICovCi1lY2JfZW5jcnlwdChzdHAsIGluLCBvdXQpCi0gICAgc3RydWN0 IGRlc19zdGluZm8gKnN0cDsKLSAgICBCbG9jayBpbjsKLSAgICBCbG9jayBvdXQ7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsKLSAgICBrcmI1X2Vycm9yX2NvZGUgY29kZTsKLSAgICBrcmI1X2Rh dGEgZGluOwotICAgIGtyYjVfZW5jX2RhdGEgZG91dDsKLQotICAgIGRpbi5sZW5ndGggPSA4Owot ICAgIGRpbi5kYXRhID0gaW47Ci0KLSAgICBkb3V0LmNpcGhlcnRleHQubGVuZ3RoID0gODsKLSAg ICBkb3V0LmNpcGhlcnRleHQuZGF0YSA9IG91dDsKLSAgICBkb3V0LmVuY3R5cGUgPSBFTkNUWVBF X1VOS05PV047Ci0KLSNpZmRlZiBDUllQVF9ETEwKLSAgICBjb2RlID0ga3JiNV9jX2VuY3J5cHQo KnBfazVfY29udGV4dCwgJnN0cC0+c3RyX2tleSwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICZkaW4sICZkb3V0KTsKLSNlbHNlIC8qIENSWVBUX0RMTCAqLwotICAgIGNvZGUgPSBr cmI1X2NfZW5jcnlwdChrNV9jb250ZXh0LCAmc3RwLT5zdHJfa2V5LCAwLCAwLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmRpbiwgJmRvdXQpOwotI2VuZGlmIC8qIENSWVBUX0RMTCAqLwot ICAgIC8qIFhYWCBJJ20gbm90IHN1cmUgd2hhdCB0byBkbyBpZiB0aGlzIGZhaWxzICovCi0gICAg aWYgKGNvZGUpCi0gICAgICAgIGNvbV9lcnIoImxpYnRlbG5ldCIsIGNvZGUsICJlbmNyeXB0aW5n IHN0cmVhbSBkYXRhIik7Ci19Ci0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLQotdm9pZAotY2Zi NjRfaW5pdChzZXJ2ZXIpCi0gICAgaW50IHNlcnZlcjsKLXsKLSAgICBmYjY0X2luaXQoJmRlc19m YltDRkJdKTsKLSAgICBkZXNfZmJbQ0ZCXS5mYl9mZWVkWzRdID0gRU5DVFlQRV9ERVNfQ0ZCNjQ7 Ci0gICAgZGVzX2ZiW0NGQl0uc3RyZWFtc1swXS5zdHJfZmxhZ3NoaWZ0ID0gU0hJRlRfVkFMKDAs IENGQik7Ci0gICAgZGVzX2ZiW0NGQl0uc3RyZWFtc1sxXS5zdHJfZmxhZ3NoaWZ0ID0gU0hJRlRf VkFMKDEsIENGQik7Ci19Ci0KLXZvaWQKLW9mYjY0X2luaXQoc2VydmVyKQotICAgIGludCBzZXJ2 ZXI7Ci17Ci0gICAgZmI2NF9pbml0KCZkZXNfZmJbT0ZCXSk7Ci0gICAgZGVzX2ZiW09GQl0uZmJf ZmVlZFs0XSA9IEVOQ1RZUEVfREVTX09GQjY0OwotICAgIGRlc19mYltDRkJdLnN0cmVhbXNbMF0u c3RyX2ZsYWdzaGlmdCA9IFNISUZUX1ZBTCgwLCBPRkIpOwotICAgIGRlc19mYltDRkJdLnN0cmVh bXNbMV0uc3RyX2ZsYWdzaGlmdCA9IFNISUZUX1ZBTCgxLCBPRkIpOwotfQotCi12b2lkCi1mYjY0 X2luaXQoZmJwKQotICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXNfZmIgKmZicDsKLXsKLSAgICBtZW1z ZXQoKHZvaWQgKilmYnAsIDAsIHNpemVvZigqZmJwKSk7Ci0gICAgZmJwLT5zdGF0ZVswXSA9IGZi cC0+c3RhdGVbMV0gPSB4RkFJTEVEOwotICAgIGZicC0+ZmJfZmVlZFswXSA9IElBQzsKLSAgICBm YnAtPmZiX2ZlZWRbMV0gPSBTQjsKLSAgICBmYnAtPmZiX2ZlZWRbMl0gPSBURUxPUFRfRU5DUllQ VElPTjsKLSAgICBmYnAtPmZiX2ZlZWRbM10gPSBFTkNSWVBUX0lTOwotfQotCi0vKgotICogUmV0 dXJuczoKLSAqICAgICAgLTE6IHNvbWUgZXJyb3IuICBOZWdvdGlhdGlvbiBpcyBkb25lLCBlbmNy eXB0aW9uIG5vdCByZWFkeS4KLSAqICAgICAgIDA6IFN1Y2Nlc3NmdWwsIGluaXRpYWwgbmVnb3Rp YXRpb24gYWxsIGRvbmUuCi0gKiAgICAgICAxOiBzdWNjZXNzZnVsLCBuZWdvdGlhdGlvbiBub3Qg ZG9uZSB5ZXQuCi0gKiAgICAgICAyOiBOb3QgeWV0LiAgT3RoZXIgdGhpbmdzIChsaWtlIGdldHRp bmcgdGhlIGtleSBmcm9tCi0gKiAgICAgICAgICBLZXJiZXJvcykgaGF2ZSB0byBoYXBwZW4gYmVm b3JlIHdlIGNhbiBjb250aW51ZS4KLSAqLwotaW50Ci1jZmI2NF9zdGFydChkaXIsIHNlcnZlcikK LSAgICBpbnQgZGlyOwotICAgIGludCBzZXJ2ZXI7Ci17Ci0gICAgcmV0dXJuKGZiNjRfc3RhcnQo JmRlc19mYltDRkJdLCBkaXIsIHNlcnZlcikpOwotfQotaW50Ci1vZmI2NF9zdGFydChkaXIsIHNl cnZlcikKLSAgICBpbnQgZGlyOwotICAgIGludCBzZXJ2ZXI7Ci17Ci0gICAgcmV0dXJuKGZiNjRf c3RhcnQoJmRlc19mYltPRkJdLCBkaXIsIHNlcnZlcikpOwotfQotCi1zdGF0aWMgaW50Ci1mYjY0 X3N0YXJ0KGZicCwgZGlyLCBzZXJ2ZXIpCi0gICAgc3RydWN0IGRlc19mYiAqZmJwOwotICAgIGlu dCBkaXI7Ci0gICAgaW50IHNlcnZlcjsKLXsKLSAgICBpbnQgeDsKLSAgICB1bnNpZ25lZCBjaGFy ICpwOwotICAgIHJlZ2lzdGVyIGludCBzdGF0ZTsKLQotICAgIHN3aXRjaCAoZGlyKSB7Ci0gICAg Y2FzZSBESVJfREVDUllQVDoKLSAgICAgICAgLyoKLSAgICAgICAgKiBUaGlzIGlzIHNpbXBseSBh IHJlcXVlc3QgdG8gaGF2ZSB0aGUgb3RoZXIgc2lkZQotICAgICAgICAqIHN0YXJ0IG91dHB1dCAo b3VyIGlucHV0KS4gIEhlIHdpbGwgbmVnb3RpYXRlIGFuCi0gICAgICAgICogSVYgc28gd2UgbmVl ZCBub3QgbG9vayBmb3IgaXQuCi0gICAgICAgICovCi0gICAgICAgIHN0YXRlID0gZmJwLT5zdGF0 ZVtkaXItMV07Ci0gICAgICAgIGlmIChzdGF0ZSA9PSB4RkFJTEVEKQotICAgICAgICAgICAgc3Rh dGUgPSBJTl9QUk9HUkVTUzsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIERJUl9FTkNSWVBU OgotICAgICAgICBzdGF0ZSA9IGZicC0+c3RhdGVbZGlyLTFdOwotICAgICAgICBpZiAoc3RhdGUg PT0geEZBSUxFRCkKLSAgICAgICAgICAgIHN0YXRlID0gSU5fUFJPR1JFU1M7Ci0gICAgICAgIGVs c2UgaWYgKChzdGF0ZSAmIE5PX1NFTkRfSVYpID09IDApCi0gICAgICAgICAgICBicmVhazsKLQot I2lmZGVmIE1JVF9DVVJSRU5UCi0gICAgICAgIGlmICghZmJwLT52YWxpZGtleSkgewotICAgICAg ICAgICAgZmJwLT5uZWVkX3N0YXJ0ID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9 Ci0jZWxzZSAvKiBNSVRfQ1VSUkVOVCAqLwotICAgICAgICBpZiAoIVZBTElES0VZKGZicC0+a3Ji ZGVzX2tleSkpIHsKLSAgICAgICAgICAgIGZicC0+bmVlZF9zdGFydCA9IDE7Ci0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgfQotI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCi0gICAgICAgIHN0 YXRlICY9IH5OT19TRU5EX0lWOwotICAgICAgICBzdGF0ZSB8PSBOT19SRUNWX0lWOwotICAgICAg ICAvKgotICAgICAgICAqIENyZWF0ZSBhIHJhbmRvbSBmZWVkIGFuZCBzZW5kIGl0IG92ZXIuCi0g ICAgICAgICovCi0jaWZkZWYgTUlUX0NVUlJFTlQKLSAgICAgICAgewotICAgICAgICAgICAga3Ji NV9kYXRhIGQ7Ci0gICAgICAgICAgICBrcmI1X2Vycm9yX2NvZGUgY29kZTsKLQotICAgICAgICAg ICAgZC5kYXRhID0gZmJwLT50ZW1wX2ZlZWQ7Ci0gICAgICAgICAgICBkLmxlbmd0aCA9IHNpemVv ZihmYnAtPnRlbXBfZmVlZCk7Ci0KLSNpZmRlZiBDUllQVF9ETEwKLSAgICAgICAgICAgIGlmIChj b2RlID0ga3JiNV9jX3JhbmRvbV9tYWtlX29jdGV0cygqcF9rNV9jb250ZXh0LCZkKSkKLSAgICAg ICAgICAgICAgICByZXR1cm4oeEZBSUxFRCk7Ci0jZWxzZSAvKiBDUllQVF9ETEwgKi8KLSAgICAg ICAgICAgIGlmIChjb2RlID0ga3JiNV9jX3JhbmRvbV9tYWtlX29jdGV0cyhrNV9jb250ZXh0LCZk KSkKLSAgICAgICAgICAgICAgICByZXR1cm4oeEZBSUxFRCk7Ci0jZW5kaWYgLyogQ1JZUFRfRExM ICovCi0gICAgICAgIH0KLQotI2Vsc2UgLyogTUlUX0NVUlJFTlQgKi8KLSAgICAgICAgZGVzX25l d19yYW5kb21fa2V5KGZicC0+dGVtcF9mZWVkKTsKLSAgICAgICAgZGVzX2VjYl9lbmNyeXB0KGZi cC0+dGVtcF9mZWVkLCBmYnAtPnRlbXBfZmVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBm YnAtPmtyYmRlc19zY2hlZCwgMSk7Ci0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLSAgICAgICAg cCA9IGZicC0+ZmJfZmVlZCArIDM7Ci0gICAgICAgICpwKysgPSBFTkNSWVBUX0lTOwotICAgICAg ICBwKys7Ci0gICAgICAgICpwKysgPSBGQjY0X0lWOwotICAgICAgICBmb3IgKHggPSAwOyB4IDwg c2l6ZW9mKEJsb2NrKTsgKyt4KSB7Ci0gICAgICAgICAgICBpZiAoKCAqcCsrID0gZmJwLT50ZW1w X2ZlZWRbeF0pID09IElBQykKLSAgICAgICAgICAgICAgICAqcCsrID0gSUFDOwotICAgICAgICB9 Ci0gICAgICAgICpwKysgPSBJQUM7Ci0gICAgICAgICpwKysgPSBTRTsKLQotICAgICAgICBpZiAo ZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgICAgIGludCBpOwotICAgICAg ICAgICAgc3ByaW50Zih0bl9tc2csCi0gICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQg U0IgJXMgSVMgJXMgRkI2NF9JViAiLAotICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKGZicC0+ ZmJfZmVlZFsyXSksCi0gICAgICAgICAgICAgICAgICAgICBlbmN0eXBlX25hbWVzW2ZicC0+ZmJf ZmVlZFs0XV0pOyAvKiBzYWZlICovCi0gICAgICAgICAgICB0bl9oZXgoKENIQVIgKil0bl9tc2cs VE5fTVNHX0xFTiwmZmJwLT5mYl9mZWVkWzZdLAotCQkocC1mYnAtPmZiX2ZlZWQpLTItNik7Ci0g ICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOwotICAgICAg ICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7Ci0gICAgICAgICAgICBpZiAodG5fZGViIHx8 IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICAgICAgfQotI2lmZGVmIE9TMgotICAgICAg ICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotICAg ICAgICB0dG9sKGZicC0+ZmJfZmVlZCwgcCAtIGZicC0+ZmJfZmVlZCk7Ci0jaWZkZWYgT1MyCi0g ICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAg IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybih4RkFJTEVEKTsKLSAgICB9Ci0gICAgcmV0dXJuKGZi cC0+c3RhdGVbZGlyLTFdID0gc3RhdGUpOwotfQotCi0vKgotICogUmV0dXJuczoKLSAqICAgICAg LTE6IHNvbWUgZXJyb3IuICBOZWdvdGlhdGlvbiBpcyBkb25lLCBlbmNyeXB0aW9uIG5vdCByZWFk eS4KLSAqICAgICAgIDA6IFN1Y2Nlc3NmdWwsIGluaXRpYWwgbmVnb3RpYXRpb24gYWxsIGRvbmUu Ci0gKiAgICAgICAxOiBzdWNjZXNzZnVsLCBuZWdvdGlhdGlvbiBub3QgZG9uZSB5ZXQuCi0gKi8K LWludAotY2ZiNjRfaXMoZGF0YSwgY250KQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAg aW50IGNudDsKLXsKLSAgICByZXR1cm4oZmI2NF9pcyhkYXRhLCBjbnQsICZkZXNfZmJbQ0ZCXSkp OwotfQotCi1pbnQKLW9mYjY0X2lzKGRhdGEsIGNudCkKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRh OwotICAgIGludCBjbnQ7Ci17Ci0gICAgcmV0dXJuKGZiNjRfaXMoZGF0YSwgY250LCAmZGVzX2Zi W09GQl0pKTsKLX0KLQotaW50Ci1mYjY0X2lzKGRhdGEsIGNudCwgZmJwKQotICAgIHVuc2lnbmVk IGNoYXIgKmRhdGE7Ci0gICAgaW50IGNudDsKLSAgICBzdHJ1Y3QgZGVzX2ZiICpmYnA7Ci17Ci0g ICAgdW5zaWduZWQgY2hhciAqcDsKLSAgICByZWdpc3RlciBpbnQgc3RhdGUgPSBmYnAtPnN0YXRl W0RJUl9ERUNSWVBULTFdOwotCi0gICAgaWYgKGNudC0tIDwgMSkKLSAgICAgICAgZ290byBmYWls dXJlOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKCFURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RM Uykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgc3dpdGNo ICgqZGF0YSsrKSB7Ci0gICAgY2FzZSBGQjY0X0lWOgotICAgICAgICBpZiAoY250ICE9IHNpemVv ZihCbG9jaykpIHsKLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdf bW9kZSkKLSAgICAgICAgICAgICAgICBwcmludGYoIkNGQjY0OiBpbml0aWFsIHZlY3RvciBmYWls ZWQgb24gc2l6ZVxyXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgc3RhdGUgPSB4RkFJTEVEOwot ICAgICAgICAgICAgZ290byBmYWlsdXJlOwotICAgICAgICB9Ci0KLSNpZmRlZiBERUJVRwotICAg ICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7Ci0gICAgICAgICAgICBwcmludGYoIkNGQjY0 OiBpbml0aWFsIHZlY3RvciByZWNlaXZlZFxyXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiSW5p dGlhbGl6aW5nIERlY3J5cHQgc3RyZWFtXHJcbiIpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAg ICAgZmI2NF9zdHJlYW1faXYoKHZvaWQgKilkYXRhLCAmZmJwLT5zdHJlYW1zW0RJUl9ERUNSWVBU LTFdKTsKLQotICAgICAgICBwID0gZmJwLT5mYl9mZWVkICsgMzsKLSAgICAgICAgKnArKyA9IEVO Q1JZUFRfUkVQTFk7Ci0gICAgICAgIHArKzsKLSAgICAgICAgKnArKyA9IEZCNjRfSVZfT0s7Ci0g ICAgICAgICpwKysgPSBJQUM7Ci0gICAgICAgICpwKysgPSBTRTsKLQotICAgICAgICBpZiAoZGVi bG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAg ICAgc3ByaW50Zih0bl9tc2csCi0gICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0Ig JXMgUkVQTFkgJXMgRkI2NF9JVl9PSyAiLAotICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKGZi cC0+ZmJfZmVlZFsyXSksCi0gICAgICAgICAgICAgICAgICAgICBlbmN0eXBlX25hbWVzW2ZicC0+ ZmJfZmVlZFs0XV0pOyAvKiBzYWZlICovCi0gICAgICAgICAgICB0bl9oZXgoKENIQVIgKil0bl9t c2csVE5fTVNHX0xFTiwmZmJwLT5mYl9mZWVkWzZdLAotCQkocC1mYnAtPmZiX2ZlZWQpLTItNik7 Ci0gICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOwotICAg ICAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7Ci0gICAgICAgICAgICBpZiAodG5fZGVi IHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICAgICAgfQotI2lmZGVmIE9TMgotICAg ICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgot ICAgICAgICB0dG9sKGZicC0+ZmJfZmVlZCwgcCAtIGZicC0+ZmJfZmVlZCk7Ci0jaWZkZWYgT1My Ci0gICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgICAgIHN0YXRlID0g SU5fUFJPR1JFU1M7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSNpZiAwCi0gICAg ICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKLSAgICAgICAgICAgIHByaW50ZigiVW5rbm93 biBvcHRpb24gdHlwZTogJWRcclxuIiwgKihkYXRhLTEpKTsKLSAgICAgICAgICAgIHByaW50Zigi XHJcbiIpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgLyogRkFMTCBUSFJPVUdIICovCi0g ICAgICBmYWlsdXJlOgotICAgICAgICAvKgotICAgICAgICAqIFdlIGZhaWxlZC4gIFNlbmQgYW4g RkI2NF9JVl9CQUQgb3B0aW9uCi0gICAgICAgICogdG8gdGhlIG90aGVyIHNpZGUgc28gaXQgd2ls bCBrbm93IHRoYXQKLSAgICAgICAgKiB0aGluZ3MgZmFpbGVkLgotICAgICAgICAqLwotICAgICAg ICBwID0gZmJwLT5mYl9mZWVkICsgMzsKLSAgICAgICAgKnArKyA9IEVOQ1JZUFRfUkVQTFk7Ci0g ICAgICAgIHArKzsKLSAgICAgICAgKnArKyA9IEZCNjRfSVZfQkFEOwotICAgICAgICAqcCsrID0g SUFDOwotICAgICAgICAqcCsrID0gU0U7Ci0KLSAgICAgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIg fHwgZGVic2VzKSB7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIHNwcmludGYodG5f bXNnLAotICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICVzIFJFUExZICVzIEZC NjRfSVZfQkFEICIsCi0gICAgICAgICAgICAgICAgICAgICBURUxPUFQoZmJwLT5mYl9mZWVkWzJd KSwKLSAgICAgICAgICAgICAgICAgICAgIGVuY3R5cGVfbmFtZXNbZmJwLT5mYl9mZWVkWzRdXSk7 IC8qIHNhZmUgKi8KLSAgICAgICAgICAgIHRuX2hleCgoQ0hBUiAqKXRuX21zZyxUTl9NU0dfTEVO LCZmYnAtPmZiX2ZlZWRbNl0sCi0JCShwLWZicC0+ZmJfZmVlZCktMi02KTsKLSAgICAgICAgICAg IGNrc3RybmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNHX0xFTik7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0 bl9kZWJ1Zyh0bl9tc2cpOwotICAgICAgICB9Ci0jaWZkZWYgT1MyCi0gICAgICAgIFJlcXVlc3RU ZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0gICAgICAgIHR0b2wo ZmJwLT5mYl9mZWVkLCBwIC0gZmJwLT5mYl9mZWVkKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgUmVs ZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJl dHVybihmYnAtPnN0YXRlW0RJUl9ERUNSWVBULTFdID0gc3RhdGUpOwotfQotCi0vKgotICogUmV0 dXJuczoKLSAqICAgICAgLTE6IHNvbWUgZXJyb3IuICBOZWdvdGlhdGlvbiBpcyBkb25lLCBlbmNy eXB0aW9uIG5vdCByZWFkeS4KLSAqICAgICAgIDA6IFN1Y2Nlc3NmdWwsIGluaXRpYWwgbmVnb3Rp YXRpb24gYWxsIGRvbmUuCi0gKiAgICAgICAxOiBzdWNjZXNzZnVsLCBuZWdvdGlhdGlvbiBub3Qg ZG9uZSB5ZXQuCi0gKi8KLWludAotY2ZiNjRfcmVwbHkoZGF0YSwgY250KQotICAgIHVuc2lnbmVk IGNoYXIgKmRhdGE7Ci0gICAgaW50IGNudDsKLXsKLSAgICByZXR1cm4oZmI2NF9yZXBseShkYXRh LCBjbnQsICZkZXNfZmJbQ0ZCXSkpOwotfQotaW50Ci1vZmI2NF9yZXBseShkYXRhLCBjbnQpCi0g ICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICBpbnQgY250OwotewotICAgIHJldHVybihmYjY0 X3JlcGx5KGRhdGEsIGNudCwgJmRlc19mYltPRkJdKSk7Ci19Ci0KLQotaW50Ci1mYjY0X3JlcGx5 KGRhdGEsIGNudCwgZmJwKQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgaW50IGNudDsK LSAgICBzdHJ1Y3QgZGVzX2ZiICpmYnA7Ci17Ci0gICAgcmVnaXN0ZXIgaW50IHN0YXRlID0gZmJw LT5zdGF0ZVtESVJfRU5DUllQVC0xXTsKLQotICAgIGlmIChjbnQtLSA8IDEpCi0gICAgICAgIGdv dG8gZmFpbHVyZTsKLQotICAgIHN3aXRjaCAoKmRhdGErKykgewotICAgIGNhc2UgRkI2NF9JVl9P SzoKLSAgICAgICAgZmI2NF9zdHJlYW1faXYoZmJwLT50ZW1wX2ZlZWQsICZmYnAtPnN0cmVhbXNb RElSX0VOQ1JZUFQtMV0pOwotICAgICAgICBpZiAoc3RhdGUgPT0geEZBSUxFRCkKLSAgICAgICAg ICAgIHN0YXRlID0gSU5fUFJPR1JFU1M7Ci0gICAgICAgIHN0YXRlICY9IH5OT19SRUNWX0lWOwot ICAgICAgICBlbmNyeXB0X3NlbmRfa2V5aWQoRElSX0VOQ1JZUFQsICh1bnNpZ25lZCBjaGFyICop IlwwIiwgMSwgMSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBGQjY0X0lWX0JBRDoKLSAg ICAgICAgbWVtc2V0KGZicC0+dGVtcF9mZWVkLCAwLCBzaXplb2YoQmxvY2spKTsKLSAgICAgICAg ZmI2NF9zdHJlYW1faXYoZmJwLT50ZW1wX2ZlZWQsICZmYnAtPnN0cmVhbXNbRElSX0VOQ1JZUFQt MV0pOwotICAgICAgICBzdGF0ZSA9IHhGQUlMRUQ7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVm YXVsdDoKLSNpZiAwCi0gICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKLSAgICAgICAg ICAgIHByaW50ZigiVW5rbm93biBvcHRpb24gdHlwZTogJWRcclxuIiwgZGF0YVstMV0pOwotICAg ICAgICAgICAgcHJpbnRmKCJcclxuIik7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICAvKiBG QUxMIFRIUk9VR0ggKi8KLSAgICAgIGZhaWx1cmU6Ci0gICAgICAgIHN0YXRlID0geEZBSUxFRDsK LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybihmYnAtPnN0YXRlW0RJUl9FTkNSWVBU LTFdID0gc3RhdGUpOwotfQotCi1pbnQKLWNmYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIpCi0gICAg U2Vzc2lvbl9LZXkgKmtleTsKLSAgICBpbnQgc2VydmVyOwotewotICAgIHJldHVybihmYjY0X3Nl c3Npb24oa2V5LCBzZXJ2ZXIsICZkZXNfZmJbQ0ZCXSkpOwotfQotCi1pbnQKLW9mYjY0X3Nlc3Np b24oa2V5LCBzZXJ2ZXIpCi0gICAgU2Vzc2lvbl9LZXkgKmtleTsKLSAgICBpbnQgc2VydmVyOwot ewotICAgIHJldHVybihmYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIsICZkZXNfZmJbT0ZCXSkpOwot fQotCi1zdGF0aWMgaW50Ci1mYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIsIGZicCkKLSAgICBTZXNz aW9uX0tleSAqa2V5OwotICAgIGludCBzZXJ2ZXI7Ci0gICAgc3RydWN0IGRlc19mYiAqZmJwOwot ewotICAgIGludCByYz0wOwotICAgIGludCB1c2Uya2V5czsKLSAgICBzdHJ1Y3QgZGVzX3N0aW5m byAqIHNfc3RyZWFtOwotICAgIHN0cnVjdCBkZXNfc3RpbmZvICogY19zdHJlYW07Ci0KLSAgICBp ZihzZXJ2ZXIpIHsKLSAgICAgICAgc19zdHJlYW0gPSAmZmJwLT5zdHJlYW1zW0RJUl9FTkNSWVBU LTFdOwotICAgICAgICBjX3N0cmVhbSA9ICZmYnAtPnN0cmVhbXNbRElSX0RFQ1JZUFQtMV07Ci0g ICAgfQotICAgIGVsc2UgewotICAgICAgICBzX3N0cmVhbSA9ICZmYnAtPnN0cmVhbXNbRElSX0RF Q1JZUFQtMV07Ci0gICAgICAgIGNfc3RyZWFtID0gJmZicC0+c3RyZWFtc1tESVJfRU5DUllQVC0x XTsKLSAgICB9Ci0KLSAgICBpZiAoIWtleSB8fCBrZXktPmxlbmd0aCA8IHNpemVvZihCbG9jaykp IHsKLSAgICAgICAgQ0hBUiBidWZbODBdOwotICAgICAgICBzcHJpbnRmKChjaGFyICopYnVmLCJD YW4ndCBzZXQgREVTIHNlc3Npb24ga2V5ICglZCA8ICVkKSIsCi0gICAgICAgICAgICAgICAga2V5 ID8ga2V5LT5sZW5ndGggOiAwLCBzaXplb2YoQmxvY2spKTsgICAgICAgICAgLyogc2FmZSAqLwot I2lmZGVmIERFQlVHCi0gICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpCi0gICAgICAgICAg ICBwcmludGYoIiVzXHJcbiIsYnVmKTsKLSNlbmRpZgotICAgICAgICBkZWJ1ZyhGMTEwLCJmYjY0 X3Nlc3Npb24iLGJ1ZiwwKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgdXNlMmtl eXMgPSAoa2V5LT50eXBlID09IFNLX0RFUyB8fAotICAgICAgICAgICAgICAgICBrZXktPmxlbmd0 aCA8IDIgKiBzaXplb2YoQmxvY2spKSA/IDAgOiAxOwotI2lmZGVmIE1JVF9DVVJSRU5UCi0gICAg aWYodXNlMmtleXMpIHsKLSAgICAgICAgbWVtY3B5KCh2b2lkICopIGZicC0+a2V5Ynl0ZXMsCi0g ICAgICAgICAgICAgICAgICh2b2lkICopIChrZXktPmRhdGEgKyBzaXplb2YoQmxvY2spKSwgc2l6 ZW9mKEJsb2NrKSk7Ci0gICAgICAgIGRlc19maXh1cF9rZXlfcGFyaXR5KGZicC0+KTsKLSAgICAg ICAgZmI2NF9zdHJlYW1fa2V5KGZicC0+a3JiZGVzX2tleSwgc19zdHJlYW0pOwotICAgIH0KLQot ICAgIG1lbWNweSgodm9pZCAqKWZicC0+a3JiZGVzX2tleSwgKHZvaWQgKilrZXktPmRhdGEsIHNp emVvZihCbG9jaykpOwotICAgIGlmIChrZXktPnR5cGUgIT0gU0tfREVTKQotICAgICAgICBkZXNf Zml4dXBfa2V5X3Bhcml0eShmYnAtPmtyYmRlc19rZXkpOwotCi0gICAgaWYoIXVzZTJrZXlzKQot ICAgICAgICBmYjY0X3N0cmVhbV9rZXkoZmJwLT5rcmJkZXNfa2V5LCBzX3N0cmVhbSk7Ci0gICAg ZmI2NF9zdHJlYW1fa2V5KGZicC0+a3JiZGVzX2tleSwgY19zdHJlYW0pOwotICAgIGZicC0+dmFs aWRrZXkgPSAxOwotCi0gICAgZmI2NF9zdHJlYW1fa2V5KGtleS0+ZGF0YSwgJmZicC0+c3RyZWFt c1tESVJfRU5DUllQVC0xXSk7Ci0gICAgZmI2NF9zdHJlYW1fa2V5KGtleS0+ZGF0YSwgJmZicC0+ c3RyZWFtc1tESVJfREVDUllQVC0xXSk7Ci0jZWxzZSAvKiBNSVRfQ1VSUkVOVCAqLwotICAgIGlm KHVzZTJrZXlzKSB7Ci0gICAgICAgIG1lbWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXksCi0g ICAgICAgICAgICAgICAgICh2b2lkICopIChrZXktPmRhdGEgKyBzaXplb2YoQmxvY2spKSwgc2l6 ZW9mKEJsb2NrKSk7Ci0gICAgICAgIGRlc19maXh1cF9rZXlfcGFyaXR5KGZicC0+a3JiZGVzX2tl eSk7Ci0gICAgICAgIGZiNjRfc3RyZWFtX2tleShmYnAtPmtyYmRlc19rZXksIHNfc3RyZWFtKTsK LSAgICB9Ci0KLSAgICBtZW1jcHkoKHZvaWQgKilmYnAtPmtyYmRlc19rZXksICh2b2lkICopa2V5 LT5kYXRhLCBzaXplb2YoQmxvY2spKTsKLSAgICBpZiAoa2V5LT50eXBlICE9IFNLX0RFUykKLSAg ICAgICAgZGVzX2ZpeHVwX2tleV9wYXJpdHkoZmJwLT5rcmJkZXNfa2V5KTsKLQotICAgIGlmKCF1 c2Uya2V5cykKLSAgICAgICAgZmI2NF9zdHJlYW1fa2V5KGZicC0+a3JiZGVzX2tleSwgc19zdHJl YW0pOwotICAgIGZiNjRfc3RyZWFtX2tleShmYnAtPmtyYmRlc19rZXksIGNfc3RyZWFtKTsKLQot ICAgIGlmIChmYnAtPm9uY2UgPT0gMCkgewotICAgICAgICBkZXNfc2V0X3JhbmRvbV9nZW5lcmF0 b3Jfc2VlZChmYnAtPmtyYmRlc19rZXkpOwotICAgICAgICBmYnAtPm9uY2UgPSAxOwotICAgIH0K LQotICAgIG1lbXNldChmYnAtPmtyYmRlc19zY2hlZCwwLHNpemVvZihTY2hlZHVsZSkpOwotICAg IGNraGV4ZHVtcCgiZmI2NF9zZXNzaW9uX2tleSIsZmJwLT5rcmJkZXNfa2V5LDgpOwotCi0gICAg cmMgPSBkZXNfa2V5X3NjaGVkKGZicC0+a3JiZGVzX2tleSwgZmJwLT5rcmJkZXNfc2NoZWQpOwot ICAgIGlmICggcmMgPT0gLTEgKSB7Ci0gICAgICAgIHByaW50ZigiP0ludmFsaWQgREVTIGtleSBz cGVjaWZpZWQgZm9yIGVuY3J5cHRpb25cbiIpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJmYjY0X3Nl c3Npb25fa2V5IiwKLSAgICAgICAgICAgICAgICJpbnZhbGlkIERFUyBLZXkgc3BlY2lmaWVkIGZv ciBlbmNyeXB0aW9uIiwwKTsKLSAgICB9IGVsc2UgaWYgKCByYyA9PSAtMiApIHsKLSAgICAgICAg cHJpbnRmKCI/V2VhayBERVMga2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvblxuIik7Ci0gICAg ICAgIGRlYnVnKEYxMTAsImZiNjRfc2Vzc2lvbl9rZXkiLAotICAgICAgICAgICAgICAgIndlYWsg REVTIEtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24iLDApOwotICAgIH0gZWxzZSBpZiAoIHJj ICE9IDAgKSB7Ci0gICAgICAgIHByaW50ZigiP0tleSBTY2hlZHVsZSBub3QgY3JlYXRlZCBieSBl bmNyeXB0aW9uXG4iKTsKLSAgICAgICAgZGVidWcoRjExMCwiZmI2NF9zZXNzaW9uX2tleSIsCi0g ICAgICAgICAgICAgICAiS2V5IFNjaGVkdWxlIG5vdCBjcmVhdGVkIGJ5IGVuY3J5cHRpb24iLDAp OwotICAgIH0KLQotICAgIGNraGV4ZHVtcCgiZmI2NF9zZXNzaW9uX2tleSBzY2hlZHVsZSIsZmJw LT5rcmJkZXNfc2NoZWQsOCoxNik7Ci0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLSAgICAvKgot ICAgICogTm93IGxvb2sgdG8gc2VlIGlmIGtyYmRlc19zdGFydCgpIHdhcyB3YXMgd2FpdGluZyBm b3IKLSAgICAqIHRoZSBrZXkgdG8gc2hvdyB1cC4gIElmIHNvLCBnbyBhaGVhZCBhbiBjYWxsIGl0 IG5vdwotICAgICogdGhhdCB3ZSBoYXZlIHRoZSBrZXkuCi0gICAgKi8KLSAgICBpZiAoZmJwLT5u ZWVkX3N0YXJ0KSB7Ci0gICAgICAgIGZicC0+bmVlZF9zdGFydCA9IDA7Ci0gICAgICAgIGZiNjRf c3RhcnQoZmJwLCBESVJfRU5DUllQVCwgc2VydmVyKTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwot fQotCi0vKgotICogV2Ugb25seSBhY2NlcHQgYSBrZXlpZCBvZiAwLiAgSWYgd2UgZ2V0IGEga2V5 aWQgb2YKLSAqIDAsIHRoZW4gbWFyayB0aGUgc3RhdGUgYXMgU1VDQ0VTUy4KLSAqLwotaW50Ci1j ZmI2NF9rZXlpZChkaXIsIGtwLCBsZW5wKQotICAgIGludCBkaXIsICpsZW5wOwotICAgIHVuc2ln bmVkIGNoYXIgKmtwOwotewotICAgIHJldHVybihmYjY0X2tleWlkKGRpciwga3AsIGxlbnAsICZk ZXNfZmJbQ0ZCXSkpOwotfQotCi1pbnQKLW9mYjY0X2tleWlkKGRpciwga3AsIGxlbnApCi0gICAg aW50IGRpciwgKmxlbnA7Ci0gICAgdW5zaWduZWQgY2hhciAqa3A7Ci17Ci0gICAgcmV0dXJuKGZi NjRfa2V5aWQoZGlyLCBrcCwgbGVucCwgJmRlc19mYltPRkJdKSk7Ci19Ci0KLWludAotZmI2NF9r ZXlpZChkaXIsIGtwLCBsZW5wLCBmYnApCi0gICAgaW50IGRpciwgKmxlbnA7Ci0gICAgdW5zaWdu ZWQgY2hhciAqa3A7Ci0gICAgc3RydWN0IGRlc19mYiAqZmJwOwotewotICAgIHJlZ2lzdGVyIGlu dCBzdGF0ZSA9IGZicC0+c3RhdGVbZGlyLTFdOwotCi0gICAgaWYgKCpsZW5wICE9IDEgfHwgKCpr cCAhPSAnXDAnKSkgewotICAgICAgICAqbGVucCA9IDA7Ci0gICAgICAgIHJldHVybihzdGF0ZSk7 Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlID09IHhGQUlMRUQpCi0gICAgICAgIHN0YXRlID0gSU5f UFJPR1JFU1M7Ci0KLSAgICBzdGF0ZSAmPSB+Tk9fS0VZSUQ7Ci0KLSAgICByZXR1cm4oZmJwLT5z dGF0ZVtkaXItMV0gPSBzdGF0ZSk7Ci19Ci0KLSNpZiAwCi12b2lkCi1mYjY0X3ByaW50c3ViKGRh dGEsIGNudCwgYnVmLCBidWZsZW4sIHR5cGUpCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YSwgKmJ1 ZiwgKnR5cGU7Ci0gICAgaW50IGNudCwgYnVmbGVuOwotewotICAgIGNoYXIgbGJ1Zls2NF07Ci0g ICAgcmVnaXN0ZXIgaW50IGk7Ci0gICAgY2hhciAqY3A7Ci0KLSAgICBidWZbYnVmbGVuLTFdID0g J1wwJzsgICAgICAgICAgICAgICAvKiBtYWtlIHN1cmUgaXQncyBOVUxMIHRlcm1pbmF0ZWQgKi8K LSAgICBidWZsZW4gLT0gMTsKLQotICAgIHN3aXRjaChkYXRhWzJdKSB7Ci0gICAgY2FzZSBGQjY0 X0lWOgotICAgICAgICBzcHJpbnRmKGxidWYsICIlc19JViIsIHR5cGUpOwotICAgICAgICBjcCA9 IGxidWY7Ci0gICAgICAgIGdvdG8gY29tbW9uOwotCi0gICAgY2FzZSBGQjY0X0lWX09LOgotICAg ICAgICBzcHJpbnRmKGxidWYsICIlc19JVl9PSyIsIHR5cGUpOwotICAgICAgICBjcCA9IGxidWY7 Ci0gICAgICAgIGdvdG8gY29tbW9uOwotCi0gICAgY2FzZSBGQjY0X0lWX0JBRDoKLSAgICAgICAg c3ByaW50ZihsYnVmLCAiJXNfSVZfQkFEIiwgdHlwZSk7Ci0gICAgICAgIGNwID0gbGJ1ZjsKLSAg ICAgICAgZ290byBjb21tb247Ci0KLSAgICBjYXNlIEZCNjRfQ0hBTExFTkdFOgotICAgICAgICBz cHJpbnRmKGxidWYsICIlc19DSEFMTEVOR0UiLCB0eXBlKTsKLSAgICAgICAgY3AgPSBsYnVmOwot ICAgICAgICBnb3RvIGNvbW1vbjsKLQotICAgIGNhc2UgRkI2NF9SRVNQT05TRToKLSAgICAgICAg c3ByaW50ZihsYnVmLCAiJXNfUkVTUE9OU0UiLCB0eXBlKTsKLSAgICAgICAgY3AgPSBsYnVmOwot ICAgICAgICBnb3RvIGNvbW1vbjsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHNwcmludGYobGJ1 ZiwgIiAlZCAodW5rbm93bikiLCBkYXRhWzJdKTsKLSAgICAgICAgY3AgPSBsYnVmOwotICAgICAg Y29tbW9uOgotICAgICAgICBmb3IgKDsgKGJ1ZmxlbiA+IDApICYmICgqYnVmID0gKmNwKyspOyBi dWYrKykKLSAgICAgICAgICAgIGJ1Zmxlbi0tOwotICAgICAgICBmb3IgKGkgPSAzOyBpIDwgY250 OyBpKyspIHsKLSAgICAgICAgICAgIHNwcmludGYobGJ1ZiwgIiAlZCIsIGRhdGFbaV0pOwotICAg ICAgICAgICAgZm9yIChjcCA9IGxidWY7IChidWZsZW4gPiAwKSAmJiAoKmJ1ZiA9ICpjcCsrKTsg YnVmKyspCi0gICAgICAgICAgICAgICAgYnVmbGVuLS07Ci0gICAgICAgIH0KLSAgICAgICAgYnJl YWs7Ci0gICAgfQotfQotCi12b2lkCi1jZmI2NF9wcmludHN1YihkYXRhLCBjbnQsIGJ1ZiwgYnVm bGVuKQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsICpidWY7Ci0gICAgaW50IGNudCwgYnVmbGVu OwotewotICAgIGZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1ZmxlbiwgIkNGQjY0Iik7 Ci19Ci0KLXZvaWQKLW9mYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBidWZsZW4pCi0gICAg dW5zaWduZWQgY2hhciAqZGF0YSwgKmJ1ZjsKLSAgICBpbnQgY250LCBidWZsZW47Ci17Ci0gICAg ZmI2NF9wcmludHN1YihkYXRhLCBjbnQsIGJ1ZiwgYnVmbGVuLCAiT0ZCNjQiKTsKLX0KLSNlbmRp ZgotCi12b2lkCi1mYjY0X3N0cmVhbV9pdihzZWVkLCBzdHApCi0gICAgQmxvY2sgc2VlZDsKLSAg ICByZWdpc3RlciBzdHJ1Y3QgZGVzX3N0aW5mbyAqc3RwOwotewotICAgIGludCByYz0wOwotCi0g ICAgbWVtY3B5KHN0cC0+c3RyX2l2LCAgICAgc2VlZCwgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgbWVt Y3B5KHN0cC0+c3RyX291dHB1dCwgc2VlZCwgc2l6ZW9mKEJsb2NrKSk7Ci0KLSAgICBtZW1zZXQo c3RwLT5zdHJfc2NoZWQsMCxzaXplb2YoU2NoZWR1bGUpKTsKLQotICAgIGNraGV4ZHVtcCgiZmI2 NF9zdHJlYW1faXYiLHN0cC0+c3RyX2lrZXksOCk7Ci0KLSNpZm5kZWYgTUlUX0NVUlJFTlQKLSAg ICByYyA9IGRlc19rZXlfc2NoZWQoc3RwLT5zdHJfaWtleSwgc3RwLT5zdHJfc2NoZWQpOwotICAg IGlmICggcmMgPT0gLTEgKSB7Ci0gICAgICAgIHByaW50ZigiP0ludmFsaWQgREVTIGtleSBzcGVj aWZpZWQgZm9yIGVuY3J5cHRpb25cclxuIik7Ci0gICAgICAgIGRlYnVnKEYxMTAsImZiNjRfc3Ry ZWFtX2l2IiwKLSAgICAgICAgICAgICAgICJpbnZhbGlkIERFUyBLZXkgc3BlY2lmaWVkIGZvciBl bmNyeXB0aW9uIiwwKTsKLSAgICB9IGVsc2UgaWYgKCByYyA9PSAtMiApIHsKLSAgICAgICAgcHJp bnRmKCI/V2VhayBERVMga2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvblxyXG4iKTsKLSAgICAg ICAgZGVidWcoRjExMCwiZmI2NF9zdHJlYW1faXYiLAotICAgICAgICAgICAgICAgIndlYWsgREVT IEtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24iLDApOwotICAgIH0gZWxzZSBpZiAoIHJjICE9 IDAgKSB7Ci0gICAgICAgIHByaW50ZigiP0tleSBTY2hlZHVsZSBub3QgY3JlYXRlZCBieSBlbmNy eXB0aW9uXHJcbiIpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJmYjY0X3N0cmVhbV9pdiIsCi0gICAg ICAgICAgICAgICAiS2V5IFNjaGVkdWxlIG5vdCBjcmVhdGVkIGJ5IGVuY3J5cHRpb24iLDApOwot ICAgIH0KLSAgICBja2hleGR1bXAoImZiNjRfc3RyZWFtX2l2IHNjaGVkdWxlIixzdHAtPnN0cl9z Y2hlZCw4KjE2KTsKLSNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLwotCi0gICAgc3RwLT5zdHJfaW5k ZXggPSBzaXplb2YoQmxvY2spOwotfQotCi12b2lkCi1mYjY0X3N0cmVhbV9rZXkoa2V5LCBzdHAp Ci0gICAgQmxvY2sga2V5OwotICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXNfc3RpbmZvICpzdHA7Ci17 Ci0gICAgaW50IHJjID0gMDsKLQotI2lmZGVmIE1JVF9DVVJSRU5UCi0gICAgbWVtY3B5KHN0cC0+ c3RyX2tleWJ5dGVzLCBrZXksIHNpemVvZihCbG9jaykpOwotICAgIHN0cC0+c3RyX2tleS5sZW5n dGggPSA4OwotICAgIHN0cC0+c3RyX2tleS5jb250ZW50cyA9IHN0cC0+c3RyX2tleWJ5dGVzOwot ICAgIC8qIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgY29kZSB1c2VzIGRlcyBlY2IgbW9k ZSwgYnV0Ci0gICAgaXQgb25seSBldmVyIGRvZXMgb25lIGJsb2NrIGF0IGEgdGltZS4gIGNiYyB3 aXRoIGEgemVybyBpdgotICAgIGlzIGlkZW50aWNhbCAqLwotICAgIHN0cC0+c3RyX2tleS5lbmN0 eXBlID0gRU5DVFlQRV9ERVNfQ0JDX1JBVzsKLSNlbHNlIC8qIE1JVF9DVVJSRU5UICovCi0gICAg bWVtY3B5KHN0cC0+c3RyX2lrZXksIGtleSwgc2l6ZW9mKEJsb2NrKSk7Ci0KLSAgICBtZW1zZXQo c3RwLT5zdHJfc2NoZWQsMCxzaXplb2YoU2NoZWR1bGUpKTsKLQotICAgIGNraGV4ZHVtcCgiZmI2 NF9zdHJlYW1fa2V5IixrZXksOCk7Ci0KLSAgICByYyA9IGRlc19rZXlfc2NoZWQoa2V5LCBzdHAt PnN0cl9zY2hlZCk7Ci0gICAgaWYgKCByYyA9PSAtMSApIHsKLSAgICAgICAgcHJpbnRmKCI/SW52 YWxpZCBERVMga2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvblxyXG4iKTsKLSAgICAgICAgZGVi dWcoRjExMCwiZmI2NF9zdHJlYW1fa2V5IiwKLSAgICAgICAgICAgICAgICJpbnZhbGlkIERFUyBL ZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uIiwwKTsKLSAgICB9IGVsc2UgaWYgKCByYyA9PSAt MiApIHsKLSAgICAgICAgcHJpbnRmKCI/V2VhayBERVMga2V5IHNwZWNpZmllZCBmb3IgZW5jcnlw dGlvblxyXG4iKTsKLSAgICAgICAgZGVidWcoRjExMCwiZmI2NF9zdHJlYW1fa2V5IiwKLSAgICAg ICAgICAgICAgICJ3ZWFrIERFUyBLZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uIiwwKTsKLSAg ICB9IGVsc2UgaWYgKCByYyAhPSAwICkgewotICAgICAgICBwcmludGYoIj9LZXkgU2NoZWR1bGUg bm90IGNyZWF0ZWQgYnkgZW5jcnlwdGlvblxyXG4iKTsKLSAgICAgICAgZGVidWcoRjExMCwiZmI2 NF9zdHJlYW1fa2V5IiwKLSAgICAgICAgICAgICAgICJLZXkgU2NoZWR1bGUgbm90IGNyZWF0ZWQg YnkgZW5jcnlwdGlvbiIsMCk7Ci0gICAgfQotICAgIGNraGV4ZHVtcCgiZmI2NF9zdHJlYW1fa2V5 IHNjaGVkdWxlIixzdHAtPnN0cl9zY2hlZCw4KjE2KTsKLSNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAq LwotCi0gICAgbWVtY3B5KHN0cC0+c3RyX291dHB1dCwgc3RwLT5zdHJfaXYsIHNpemVvZihCbG9j aykpOwotCi0gICAgc3RwLT5zdHJfaW5kZXggPSBzaXplb2YoQmxvY2spOwotfQotCi0vKgotICog REVTIDY0IGJpdCBDaXBoZXIgRmVlZGJhY2sKLSAqCi0gKiAgICAga2V5IC0tLT4rLS0tLS0rCi0g KiAgICAgICAgICArLT58IERFUyB8LS0rCi0gKiAgICAgICAgICB8ICArLS0tLS0rICB8Ci0gKiAg ICAgICAgICB8ICAgICAgICAgICB2Ci0gKiAgSU5QVVQgLS0oLS0tLS0tLS0tPigrKSstLS0+IERB VEEKLSAqICAgICAgICAgIHwgICAgICAgICAgICAgfAotICogICAgICAgICAgKy0tLS0tLS0tLS0t LS0rCi0gKgotICoKLSAqIEdpdmVuOgotICogICAgICBpVjogSW5pdGlhbCB2ZWN0b3IsIDY0IGJp dHMgKDggYnl0ZXMpIGxvbmcuCi0gKiAgICAgIERuOiB0aGUgbnRoIGNodW5rIG9mIDY0IGJpdHMg KDggYnl0ZXMpIG9mIGRhdGEgdG8gZW5jcnlwdCAoZGVjcnlwdCkuCi0gKiAgICAgIE9uOiB0aGUg bnRoIGNodW5rIG9mIDY0IGJpdHMgKDggYnl0ZXMpIG9mIGVuY3J5cHRlZCAoZGVjcnlwdGVkKSBv dXRwdXQuCi0gKgotICogICAgICBWMCA9IERFUyhpViwga2V5KQotICogICAgICBPbiA9IERuIF4g Vm4KLSAqICAgICAgVihuKzEpID0gREVTKE9uLCBrZXkpCi0gKi8KLQotdm9pZAotY2ZiNjRfZW5j cnlwdChzLCBjKQotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKnM7Ci0gICAgaW50IGM7Ci17 Ci0gICAgcmVnaXN0ZXIgc3RydWN0IGRlc19zdGluZm8gKnN0cCA9ICZkZXNfZmJbQ0ZCXS5zdHJl YW1zW0RJUl9FTkNSWVBULTFdOwotICAgIHJlZ2lzdGVyIGludCBpbmRleDsKLQotICAgIGluZGV4 ID0gc3RwLT5zdHJfaW5kZXg7Ci0gICAgd2hpbGUgKGMtLSA+IDApIHsKLSAgICAgICAgaWYgKGlu ZGV4ID09IHNpemVvZihCbG9jaykpIHsKLSAgICAgICAgICAgIEJsb2NrIGI7Ci0jaWZkZWYgTUlU X0NVUlJFTlQKLSAgICAgICAgICAgIGVjYl9lbmNyeXB0KHN0cCwgc3RwLT5zdHJfb3V0cHV0LCBi KTsKLSNlbHNlIC8qIE1JVF9DVVJSRU5UICovCi0gICAgICAgICAgICBkZXNfZWNiX2VuY3J5cHQo c3RwLT5zdHJfb3V0cHV0LCBiLCBzdHAtPnN0cl9zY2hlZCwgMSk7Ci0jZW5kaWYgLyogTUlUX0NV UlJFTlQgKi8KLSAgICAgICAgICAgIG1lbWNweShzdHAtPnN0cl9mZWVkLGIsc2l6ZW9mKEJsb2Nr KSk7Ci0gICAgICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBPbiBl bmNyeXB0aW9uLCB3ZSBzdG9yZSAoZmVlZCBeIGRhdGEpIHdoaWNoIGlzIGN5cGhlciAqLwotICAg ICAgICAqcyA9IHN0cC0+c3RyX291dHB1dFtpbmRleF0gPSAoc3RwLT5zdHJfZmVlZFtpbmRleF0g XiAqcyk7Ci0gICAgICAgIHMrKzsKLSAgICAgICAgaW5kZXgrKzsKLSAgICB9Ci0gICAgc3RwLT5z dHJfaW5kZXggPSBpbmRleDsKLX0KLQotaW50Ci1jZmI2NF9kZWNyeXB0KGRhdGEpCi0gICAgaW50 IGRhdGE7Ci17Ci0gICAgcmVnaXN0ZXIgc3RydWN0IGRlc19zdGluZm8gKnN0cCA9ICZkZXNfZmJb Q0ZCXS5zdHJlYW1zW0RJUl9ERUNSWVBULTFdOwotICAgIGludCBpbmRleDsKLQotICAgIGlmIChk YXRhID09IC0xKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICogQmFjayB1cCBvbmUgYnl0ZS4gIEl0 IGlzIGFzc3VtZWQgdGhhdCB3ZSB3aWxsCi0gICAgICAgICogbmV2ZXIgYmFjayB1cCBtb3JlIHRo YW4gb25lIGJ5dGUuICBJZiB3ZSBkbywgdGhpcwotICAgICAgICAqIG1heSBvciBtYXkgbm90IHdv cmsuCi0gICAgICAgICovCi0gICAgICAgIGlmIChzdHAtPnN0cl9pbmRleCkKLSAgICAgICAgICAg IC0tc3RwLT5zdHJfaW5kZXg7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0KLSAgICBpbmRl eCA9IHN0cC0+c3RyX2luZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IHNpemVvZihCbG9jaykpIHsK LSAgICAgICAgQmxvY2sgYjsKLSNpZmRlZiBNSVRfQ1VSUkVOVAotICAgICAgICBlY2JfZW5jcnlw dChzdHAsIHN0cC0+c3RyX291dHB1dCwgYik7Ci0jZWxzZSAvKiBNSVRfQ1VSUkVOVCAqLwotICAg ICAgICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLCBzdHAtPnN0cl9zY2hlZCwg MSk7Ci0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLSAgICAgICAgbWVtY3B5KHN0cC0+c3RyX2Zl ZWQsIGIsIHNpemVvZihCbG9jaykpOwotICAgICAgICBzdHAtPnN0cl9pbmRleCA9IDE7ICAgICAv KiBOZXh0IHRpbWUgd2lsbCBiZSAxICovCi0gICAgICAgIGluZGV4ID0gMDsgICAgICAgICAgICAg IC8qIEJ1dCBub3cgdXNlIDAgKi8KLSAgICB9Ci0KLSAgICAvKiBPbiBkZWNyeXB0aW9uIHdlIHN0 b3JlIChkYXRhKSB3aGljaCBpcyBjeXBoZXIuICovCi0gICAgc3RwLT5zdHJfb3V0cHV0W2luZGV4 XSA9IGRhdGE7Ci0gICAgcmV0dXJuKGRhdGEgXiBzdHAtPnN0cl9mZWVkW2luZGV4XSk7Ci19Ci0K LS8qCi0gKiBERVMgNjQgYml0IE91dHB1dCBGZWVkYmFjawotICoKLSAqIGtleSAtLS0+Ky0tLS0t KwotICogICAgICArLT58IERFUyB8LS0rCi0gKiAgICAgIHwgICstLS0tLSsgIHwKLSAqICAgICAg Ky0tLS0tLS0tLS0tKwotICogICAgICAgICAgICAgICAgICB2Ci0gKiAgSU5QVVQgLS0tLS0tLS0+ KCspIC0tLS0+IERBVEEKLSAqCi0gKiBHaXZlbjoKLSAqICAgICAgaVY6IEluaXRpYWwgdmVjdG9y LCA2NCBiaXRzICg4IGJ5dGVzKSBsb25nLgotICogICAgICBEbjogdGhlIG50aCBjaHVuayBvZiA2 NCBiaXRzICg4IGJ5dGVzKSBvZiBkYXRhIHRvIGVuY3J5cHQgKGRlY3J5cHQpLgotICogICAgICBP bjogdGhlIG50aCBjaHVuayBvZiA2NCBiaXRzICg4IGJ5dGVzKSBvZiBlbmNyeXB0ZWQgKGRlY3J5 cHRlZCkgb3V0cHV0LgotICoKLSAqICAgICAgVjAgPSBERVMoaVYsIGtleSkKLSAqICAgICAgVihu KzEpID0gREVTKFZuLCBrZXkpCi0gKiAgICAgIE9uID0gRG4gXiBWbgotICovCi12b2lkCi1vZmI2 NF9lbmNyeXB0KHMsIGMpCi0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqczsKLSAgICBpbnQg YzsKLXsKLSAgICByZWdpc3RlciBzdHJ1Y3QgZGVzX3N0aW5mbyAqc3RwID0gJmRlc19mYltPRkJd LnN0cmVhbXNbRElSX0VOQ1JZUFQtMV07Ci0gICAgcmVnaXN0ZXIgaW50IGluZGV4OwotCi0gICAg aW5kZXggPSBzdHAtPnN0cl9pbmRleDsKLSAgICB3aGlsZSAoYy0tID4gMCkgewotICAgICAgICBp ZiAoaW5kZXggPT0gc2l6ZW9mKEJsb2NrKSkgewotICAgICAgICAgICAgQmxvY2sgYjsKLSNpZmRl ZiBNSVRfQ1VSUkVOVAotICAgICAgICAgICAgZWNiX2VuY3J5cHQoc3RwLCBzdHAtPnN0cl9mZWVk LCBiKTsKLSNlbHNlIC8qIE1JVF9DVVJSRU5UICovCi0gICAgICAgICAgICBkZXNfZWNiX2VuY3J5 cHQoc3RwLT5zdHJfZmVlZCwgYiwgc3RwLT5zdHJfc2NoZWQsIDEpOwotI2VuZGlmIC8qIE1JVF9D VVJSRU5UICovCi0gICAgICAgICAgICBtZW1jcHkoc3RwLT5zdHJfZmVlZCxiLHNpemVvZihCbG9j aykpOwotICAgICAgICAgICAgaW5kZXggPSAwOwotICAgICAgICB9Ci0gICAgICAgICpzKysgXj0g c3RwLT5zdHJfZmVlZFtpbmRleF07Ci0gICAgICAgIGluZGV4Kys7Ci0gICAgfQotICAgIHN0cC0+ c3RyX2luZGV4ID0gaW5kZXg7Ci19Ci0KLWludAotb2ZiNjRfZGVjcnlwdChkYXRhKQotICAgIGlu dCBkYXRhOwotewotICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXNfc3RpbmZvICpzdHAgPSAmZGVzX2Zi W09GQl0uc3RyZWFtc1tESVJfREVDUllQVC0xXTsKLSAgICBpbnQgaW5kZXg7Ci0KLSAgICBpZiAo ZGF0YSA9PSAtMSkgewotICAgICAgICAvKgotICAgICAgICAqIEJhY2sgdXAgb25lIGJ5dGUuICBJ dCBpcyBhc3N1bWVkIHRoYXQgd2Ugd2lsbAotICAgICAgICAqIG5ldmVyIGJhY2sgdXAgbW9yZSB0 aGFuIG9uZSBieXRlLiAgSWYgd2UgZG8sIHRoaXMKLSAgICAgICAgKiBtYXkgb3IgbWF5IG5vdCB3 b3JrLgotICAgICAgICAqLwotICAgICAgICBpZiAoc3RwLT5zdHJfaW5kZXgpCi0gICAgICAgICAg ICAtLXN0cC0+c3RyX2luZGV4OwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotCi0gICAgaW5k ZXggPSBzdHAtPnN0cl9pbmRleCsrOwotICAgIGlmIChpbmRleCA9PSBzaXplb2YoQmxvY2spKSB7 Ci0gICAgICAgIEJsb2NrIGI7Ci0jaWZkZWYgTUlUX0NVUlJFTlQKLSAgICAgICAgZWNiX2VuY3J5 cHQoc3RwLCBzdHAtPnN0cl9mZWVkLCBiKTsKLSNlbHNlIC8qIE1JVF9DVVJSRU5UICovCi0gICAg ICAgIGRlc19lY2JfZW5jcnlwdChzdHAtPnN0cl9mZWVkLCBiLCBzdHAtPnN0cl9zY2hlZCwgMSk7 Ci0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLSAgICAgICAgbWVtY3B5KHN0cC0+c3RyX2ZlZWQs IGIsIHNpemVvZihCbG9jaykpOwotICAgICAgICBzdHAtPnN0cl9pbmRleCA9IDE7ICAgICAvKiBO ZXh0IHRpbWUgd2lsbCBiZSAxICovCi0gICAgICAgIGluZGV4ID0gMDsgICAgICAgICAgICAgIC8q IEJ1dCBub3cgdXNlIDAgKi8KLSAgICB9Ci0KLSAgICByZXR1cm4oZGF0YSBeIHN0cC0+c3RyX2Zl ZWRbaW5kZXhdKTsKLX0KLQotCi12b2lkIGRlczNfZmI2NF9zdHJlYW1faXYgUCgoQmxvY2ssIHN0 cnVjdCBkZXMzX3N0aW5mbyAqKSk7Ci12b2lkIGRlczNfZmI2NF9pbml0IFAoKHN0cnVjdCBkZXMz X2ZiICopKTsKLXN0YXRpYyBpbnQgZGVzM19mYjY0X3N0YXJ0IFAoKHN0cnVjdCBkZXMzX2ZiICos IGludCwgaW50KSk7Ci1pbnQgZGVzM19mYjY0X2lzIFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50LCBz dHJ1Y3QgZGVzM19mYiAqKSk7Ci1pbnQgZGVzM19mYjY0X3JlcGx5IFAoKHVuc2lnbmVkIGNoYXIg KiwgaW50LCBzdHJ1Y3QgZGVzM19mYiAqKSk7Ci1zdGF0aWMgaW50IGRlczNfZmI2NF9zZXNzaW9u IFAoKFNlc3Npb25fS2V5ICosIGludCwgc3RydWN0IGRlczNfZmIgKikpOwotdm9pZCBkZXMzX2Zi NjRfc3RyZWFtX2tleSBQKChCbG9jayAqLCBzdHJ1Y3QgZGVzM19zdGluZm8gKikpOwotaW50IGRl czNfZmI2NF9rZXlpZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICosIHN0cnVjdCBkZXMz X2ZiICopKTsKLQotdm9pZAotZGVzM19jZmI2NF9pbml0KHNlcnZlcikKLSAgICBpbnQgc2VydmVy OwotewotICAgIGRlczNfZmI2NF9pbml0KCZkZXMzX2ZiW0NGQl0pOwotICAgIGRlczNfZmJbQ0ZC XS5mYl9mZWVkWzRdID0gRU5DVFlQRV9ERVMzX0NGQjY0OwotICAgIGRlczNfZmJbQ0ZCXS5zdHJl YW1zWzBdLnN0cl9mbGFnc2hpZnQgPSBTSElGVF9WQUwoMCwgQ0ZCKTsKLSAgICBkZXMzX2ZiW0NG Ql0uc3RyZWFtc1sxXS5zdHJfZmxhZ3NoaWZ0ID0gU0hJRlRfVkFMKDEsIENGQik7Ci19Ci0KLXZv aWQKLWRlczNfb2ZiNjRfaW5pdChzZXJ2ZXIpCi0gICAgaW50IHNlcnZlcjsKLXsKLSAgICBkZXMz X2ZiNjRfaW5pdCgmZGVzM19mYltPRkJdKTsKLSAgICBkZXMzX2ZiW09GQl0uZmJfZmVlZFs0XSA9 IEVOQ1RZUEVfREVTM19PRkI2NDsKLSAgICBkZXMzX2ZiW0NGQl0uc3RyZWFtc1swXS5zdHJfZmxh Z3NoaWZ0ID0gU0hJRlRfVkFMKDAsIE9GQik7Ci0gICAgZGVzM19mYltDRkJdLnN0cmVhbXNbMV0u c3RyX2ZsYWdzaGlmdCA9IFNISUZUX1ZBTCgxLCBPRkIpOwotfQotCi12b2lkCi1kZXMzX2ZiNjRf aW5pdChmYnApCi0gICAgcmVnaXN0ZXIgc3RydWN0IGRlczNfZmIgKmZicDsKLXsKLSAgICBtZW1z ZXQoKHZvaWQgKilmYnAsIDAsIHNpemVvZigqZmJwKSk7Ci0gICAgZmJwLT5zdGF0ZVswXSA9IGZi cC0+c3RhdGVbMV0gPSB4RkFJTEVEOwotICAgIGZicC0+ZmJfZmVlZFswXSA9IElBQzsKLSAgICBm YnAtPmZiX2ZlZWRbMV0gPSBTQjsKLSAgICBmYnAtPmZiX2ZlZWRbMl0gPSBURUxPUFRfRU5DUllQ VElPTjsKLSAgICBmYnAtPmZiX2ZlZWRbM10gPSBFTkNSWVBUX0lTOwotfQotCi0vKgotICogUmV0 dXJuczoKLSAqICAgICAgLTE6IHNvbWUgZXJyb3IuICBOZWdvdGlhdGlvbiBpcyBkb25lLCBlbmNy eXB0aW9uIG5vdCByZWFkeS4KLSAqICAgICAgIDA6IFN1Y2Nlc3NmdWwsIGluaXRpYWwgbmVnb3Rp YXRpb24gYWxsIGRvbmUuCi0gKiAgICAgICAxOiBzdWNjZXNzZnVsLCBuZWdvdGlhdGlvbiBub3Qg ZG9uZSB5ZXQuCi0gKiAgICAgICAyOiBOb3QgeWV0LiAgT3RoZXIgdGhpbmdzIChsaWtlIGdldHRp bmcgdGhlIGtleSBmcm9tCi0gKiAgICAgICAgICBLZXJiZXJvcykgaGF2ZSB0byBoYXBwZW4gYmVm b3JlIHdlIGNhbiBjb250aW51ZS4KLSAqLwotaW50Ci1kZXMzX2NmYjY0X3N0YXJ0KGRpciwgc2Vy dmVyKQotICAgIGludCBkaXI7Ci0gICAgaW50IHNlcnZlcjsKLXsKLSAgICByZXR1cm4oZGVzM19m YjY0X3N0YXJ0KCZkZXMzX2ZiW0NGQl0sIGRpciwgc2VydmVyKSk7Ci19Ci1pbnQKLWRlczNfb2Zi NjRfc3RhcnQoZGlyLCBzZXJ2ZXIpCi0gICAgaW50IGRpcjsKLSAgICBpbnQgc2VydmVyOwotewot ICAgIHJldHVybihkZXMzX2ZiNjRfc3RhcnQoJmRlczNfZmJbT0ZCXSwgZGlyLCBzZXJ2ZXIpKTsK LX0KLQotc3RhdGljIGludAotZGVzM19mYjY0X3N0YXJ0KGZicCwgZGlyLCBzZXJ2ZXIpCi0gICAg c3RydWN0IGRlczNfZmIgKmZicDsKLSAgICBpbnQgZGlyOwotICAgIGludCBzZXJ2ZXI7Ci17Ci0g ICAgaW50IHg7Ci0gICAgdW5zaWduZWQgY2hhciAqcDsKLSAgICByZWdpc3RlciBpbnQgc3RhdGU7 Ci0KLSAgICBzd2l0Y2ggKGRpcikgewotICAgIGNhc2UgRElSX0RFQ1JZUFQ6Ci0gICAgICAgIC8q Ci0gICAgICAgICogVGhpcyBpcyBzaW1wbHkgYSByZXF1ZXN0IHRvIGhhdmUgdGhlIG90aGVyIHNp ZGUKLSAgICAgICAgKiBzdGFydCBvdXRwdXQgKG91ciBpbnB1dCkuICBIZSB3aWxsIG5lZ290aWF0 ZSBhbgotICAgICAgICAqIElWIHNvIHdlIG5lZWQgbm90IGxvb2sgZm9yIGl0LgotICAgICAgICAq LwotICAgICAgICBzdGF0ZSA9IGZicC0+c3RhdGVbZGlyLTFdOwotICAgICAgICBpZiAoc3RhdGUg PT0geEZBSUxFRCkKLSAgICAgICAgICAgIHN0YXRlID0gSU5fUFJPR1JFU1M7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgY2FzZSBESVJfRU5DUllQVDoKLSAgICAgICAgc3RhdGUgPSBmYnAtPnN0YXRl W2Rpci0xXTsKLSAgICAgICAgaWYgKHN0YXRlID09IHhGQUlMRUQpCi0gICAgICAgICAgICBzdGF0 ZSA9IElOX1BST0dSRVNTOwotICAgICAgICBlbHNlIGlmICgoc3RhdGUgJiBOT19TRU5EX0lWKSA9 PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKCFWQUxJREtFWShmYnAtPmty YmRlc19rZXlbMF0pIHx8Ci0gICAgICAgICAgICAhVkFMSURLRVkoZmJwLT5rcmJkZXNfa2V5WzFd KSB8fAotICAgICAgICAgICAgIVZBTElES0VZKGZicC0+a3JiZGVzX2tleVsyXSkgKSB7Ci0gICAg ICAgICAgICBmYnAtPm5lZWRfc3RhcnQgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg IH0KLSAgICAgICAgc3RhdGUgJj0gfk5PX1NFTkRfSVY7Ci0gICAgICAgIHN0YXRlIHw9IE5PX1JF Q1ZfSVY7Ci0gICAgICAgIC8qCi0gICAgICAgICogQ3JlYXRlIGEgcmFuZG9tIGZlZWQgYW5kIHNl bmQgaXQgb3Zlci4KLSAgICAgICAgKi8KLSAgICAgICAgZGVzX25ld19yYW5kb21fa2V5KGZicC0+ dGVtcF9mZWVkKTsKLSNpZmRlZiBMSUJERVMKLSAgICAgICAgZGVzX2VjYjNfZW5jcnlwdChmYnAt PnRlbXBfZmVlZCwgZmJwLT50ZW1wX2ZlZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZmJw LT5rcmJkZXNfc2NoZWRbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgZmJwLT5rcmJkZXNf c2NoZWRbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgZmJwLT5rcmJkZXNfc2NoZWRbMl0s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgMSk7Ci0jZWxzZSAvKiBMSUJERVMgKi8KLSAgICAg ICAgZGVzX2VjYl9lbmNyeXB0KGZicC0+dGVtcF9mZWVkLCBmYnAtPnRlbXBfZmVlZCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICBmYnAtPmtyYmRlc19zY2hlZFswXSwgMSk7Ci0gICAgICAgIGRl c19lY2JfZW5jcnlwdChmYnAtPnRlbXBfZmVlZCwgZmJwLT50ZW1wX2ZlZWQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgZmJwLT5rcmJkZXNfc2NoZWRbMV0sIDApOwotICAgICAgICBkZXNfZWNi X2VuY3J5cHQoZmJwLT50ZW1wX2ZlZWQsIGZicC0+dGVtcF9mZWVkLAotICAgICAgICAgICAgICAg ICAgICAgICAgIGZicC0+a3JiZGVzX3NjaGVkWzJdLCAxKTsKLSNlbmRpZiAvKiBMSUJERVMgKi8K LQotICAgICAgICBwID0gZmJwLT5mYl9mZWVkICsgMzsKLSAgICAgICAgKnArKyA9IEVOQ1JZUFRf SVM7Ci0gICAgICAgIHArKzsKLSAgICAgICAgKnArKyA9IEZCNjRfSVY7Ci0gICAgICAgIGZvciAo eCA9IDA7IHggPCBzaXplb2YoQmxvY2spOyArK3gpIHsKLSAgICAgICAgICAgIGlmICgoICpwKysg PSBmYnAtPnRlbXBfZmVlZFt4XSkgPT0gSUFDKQotICAgICAgICAgICAgICAgICpwKysgPSBJQUM7 Ci0gICAgICAgIH0KLSAgICAgICAgKnArKyA9IElBQzsKLSAgICAgICAgKnArKyA9IFNFOwotCi0g ICAgICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICAgICAgaW50 IGk7Ci0gICAgICAgICAgICBzcHJpbnRmKHRuX21zZywKLSAgICAgICAgICAgICAgICAgICAgICJU RUxORVQgU0VOVCBTQiAlcyBJUyAlcyBGQjY0X0lWICIsCi0gICAgICAgICAgICAgICAgICAgICBU RUxPUFQoZmJwLT5mYl9mZWVkWzJdKSwKLSAgICAgICAgICAgICAgICAgICAgIGVuY3R5cGVfbmFt ZXNbZmJwLT5mYl9mZWVkWzRdXSk7IC8qIHNhZmUgKi8KLSAgICAgICAgICAgIHRuX2hleCgoQ0hB UiAqKXRuX21zZyxUTl9NU0dfTEVOLCZmYnAtPmZiX2ZlZWRbNl0sCi0JCShwLWZicC0+ZmJfZmVl ZCktMi02KTsKLSAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNHX0xF Tik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAgICAgIGlm ICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOwotICAgICAgICB9Ci0jaWZkZWYg T1MyCi0gICAgICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwot I2VuZGlmCi0gICAgICAgIHR0b2woZmJwLT5mYl9mZWVkLCBwIC0gZmJwLT5mYl9mZWVkKTsKLSNp ZmRlZiBPUzIKLSAgICAgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICAgICAg YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuKHhGQUlMRUQpOwotICAgIH0KLSAg ICByZXR1cm4oZmJwLT5zdGF0ZVtkaXItMV0gPSBzdGF0ZSk7Ci19Ci0KLS8qCi0gKiBSZXR1cm5z OgotICogICAgICAtMTogc29tZSBlcnJvci4gIE5lZ290aWF0aW9uIGlzIGRvbmUsIGVuY3J5cHRp b24gbm90IHJlYWR5LgotICogICAgICAgMDogU3VjY2Vzc2Z1bCwgaW5pdGlhbCBuZWdvdGlhdGlv biBhbGwgZG9uZS4KLSAqICAgICAgIDE6IHN1Y2Nlc3NmdWwsIG5lZ290aWF0aW9uIG5vdCBkb25l IHlldC4KLSAqLwotaW50Ci1kZXMzX2NmYjY0X2lzKGRhdGEsIGNudCkKLSAgICB1bnNpZ25lZCBj aGFyICpkYXRhOwotICAgIGludCBjbnQ7Ci17Ci0gICAgcmV0dXJuKGRlczNfZmI2NF9pcyhkYXRh LCBjbnQsICZkZXMzX2ZiW0NGQl0pKTsKLX0KLQotaW50Ci1kZXMzX29mYjY0X2lzKGRhdGEsIGNu dCkKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGludCBjbnQ7Ci17Ci0gICAgcmV0dXJu KGRlczNfZmI2NF9pcyhkYXRhLCBjbnQsICZkZXMzX2ZiW09GQl0pKTsKLX0KLQotaW50Ci1kZXMz X2ZiNjRfaXMoZGF0YSwgY250LCBmYnApCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICBp bnQgY250OwotICAgIHN0cnVjdCBkZXMzX2ZiICpmYnA7Ci17Ci0gICAgdW5zaWduZWQgY2hhciAq cDsKLSAgICByZWdpc3RlciBpbnQgc3RhdGUgPSBmYnAtPnN0YXRlW0RJUl9ERUNSWVBULTFdOwot Ci0gICAgaWYgKGNudC0tIDwgMSkKLSAgICAgICAgZ290byBmYWlsdXJlOwotCi0jaWZkZWYgQ0tf U1NMCi0gICAgaWYgKCFURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2Zv bGxvd3MpCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgc3dpdGNoICgqZGF0YSsrKSB7Ci0gICAg Y2FzZSBGQjY0X0lWOgotICAgICAgICBpZiAoY250ICE9IHNpemVvZihCbG9jaykpIHsKLSNpZmRl ZiBERUJVRwotICAgICAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkKLSAgICAgICAgICAg ICAgICBwcmludGYoIkRFUzNfRkI2NDogaW5pdGlhbCB2ZWN0b3IgZmFpbGVkIG9uIHNpemVcclxu Iik7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0YXRlID0geEZBSUxFRDsKLSAgICAgICAgICAgIGdv dG8gZmFpbHVyZTsKLSAgICAgICAgfQotCi0jaWZkZWYgREVCVUcKLSAgICAgICAgaWYgKGVuY3J5 cHRfZGVidWdfbW9kZSkgewotICAgICAgICAgICAgcHJpbnRmKCJERVMzX0ZCNjQ6IGluaXRpYWwg dmVjdG9yIHJlY2VpdmVkXHJcbiIpOwotICAgICAgICAgICAgcHJpbnRmKCJJbml0aWFsaXppbmcg RGVjcnlwdCBzdHJlYW1cclxuIik7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBkZXMzX2Zi NjRfc3RyZWFtX2l2KCh2b2lkICopZGF0YSwgJmZicC0+c3RyZWFtc1tESVJfREVDUllQVC0xXSk7 Ci0KLSAgICAgICAgcCA9IGZicC0+ZmJfZmVlZCArIDM7Ci0gICAgICAgICpwKysgPSBFTkNSWVBU X1JFUExZOwotICAgICAgICBwKys7Ci0gICAgICAgICpwKysgPSBGQjY0X0lWX09LOwotICAgICAg ICAqcCsrID0gSUFDOwotICAgICAgICAqcCsrID0gU0U7Ci0KLSAgICAgICAgaWYgKGRlYmxvZyB8 fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIHNw cmludGYodG5fbXNnLAotICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICVzIFJF UExZICVzIEZCNjRfSVZfT0sgIiwKLSAgICAgICAgICAgICAgICAgICAgIFRFTE9QVChmYnAtPmZi X2ZlZWRbMl0pLAotICAgICAgICAgICAgICAgICAgICAgZW5jdHlwZV9uYW1lc1tmYnAtPmZiX2Zl ZWRbNF1dKTsgLyogc2FmZSAqLwotICAgICAgICAgICAgdG5faGV4KChDSEFSICopdG5fbXNnLFRO X01TR19MRU4sJmZicC0+ZmJfZmVlZFs2XSwKLQkJKHAtZmJwLT5mYl9mZWVkKS0yLTYpOwotICAg ICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVOKTsKLSAgICAgICAg ICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOwotICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBk ZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgICAgIH0KLSNpZmRlZiBPUzIKLSAgICAgICAg UmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSAgICAg ICAgdHRvbChmYnAtPmZiX2ZlZWQsIHAgLSBmYnAtPmZiX2ZlZWQpOwotI2lmZGVmIE9TMgotICAg ICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgICAgICBzdGF0ZSA9IElOX1BS T0dSRVNTOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0jaWYgMAotICAgICAgICBp ZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7Ci0gICAgICAgICAgICBwcmludGYoIlVua25vd24gb3B0 aW9uIHR5cGU6ICVkXHJcbiIsICooZGF0YS0xKSk7Ci0gICAgICAgICAgICBwcmludGYoIlxyXG4i KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIC8qIEZBTEwgVEhST1VHSCAqLwotICAgICAg ZmFpbHVyZToKLSAgICAgICAgLyoKLSAgICAgICAgKiBXZSBmYWlsZWQuICBTZW5kIGFuIEZCNjRf SVZfQkFEIG9wdGlvbgotICAgICAgICAqIHRvIHRoZSBvdGhlciBzaWRlIHNvIGl0IHdpbGwga25v dyB0aGF0Ci0gICAgICAgICogdGhpbmdzIGZhaWxlZC4KLSAgICAgICAgKi8KLSAgICAgICAgcCA9 IGZicC0+ZmJfZmVlZCArIDM7Ci0gICAgICAgICpwKysgPSBFTkNSWVBUX1JFUExZOwotICAgICAg ICBwKys7Ci0gICAgICAgICpwKysgPSBGQjY0X0lWX0JBRDsKLSAgICAgICAgKnArKyA9IElBQzsK LSAgICAgICAgKnArKyA9IFNFOwotCi0gICAgICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRl YnNlcykgewotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICBzcHJpbnRmKHRuX21zZywK LSAgICAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAlcyBSRVBMWSAlcyBGQjY0X0lW X0JBRCAiLAotICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKGZicC0+ZmJfZmVlZFsyXSksCi0g ICAgICAgICAgICAgICAgICAgICBlbmN0eXBlX25hbWVzW2ZicC0+ZmJfZmVlZFs0XV0pOyAvKiBz YWZlICovCi0gICAgICAgICAgICB0bl9oZXgoKENIQVIgKil0bl9tc2csVE5fTVNHX0xFTiwmZmJw LT5mYl9mZWVkWzZdLAotCQkocC1mYnAtPmZiX2ZlZWQpLTItNik7Ci0gICAgICAgICAgICBja3N0 cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOwotICAgICAgICAgICAgZGVidWcoRjEw MCx0bl9tc2csIiIsMCk7Ci0gICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVi dWcodG5fbXNnKTsKLSAgICAgICAgfQotI2lmZGVmIE9TMgotICAgICAgICBSZXF1ZXN0VGVsbmV0 TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotICAgICAgICB0dG9sKGZicC0+ ZmJfZmVlZCwgcCAtIGZicC0+ZmJfZmVlZCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFJlbGVhc2VU ZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4o ZmJwLT5zdGF0ZVtESVJfREVDUllQVC0xXSA9IHN0YXRlKTsKLX0KLQotLyoKLSAqIFJldHVybnM6 Ci0gKiAgICAgIC0xOiBzb21lIGVycm9yLiAgTmVnb3RpYXRpb24gaXMgZG9uZSwgZW5jcnlwdGlv biBub3QgcmVhZHkuCi0gKiAgICAgICAwOiBTdWNjZXNzZnVsLCBpbml0aWFsIG5lZ290aWF0aW9u IGFsbCBkb25lLgotICogICAgICAgMTogc3VjY2Vzc2Z1bCwgbmVnb3RpYXRpb24gbm90IGRvbmUg eWV0LgotICovCi1pbnQKLWRlczNfY2ZiNjRfcmVwbHkoZGF0YSwgY250KQotICAgIHVuc2lnbmVk IGNoYXIgKmRhdGE7Ci0gICAgaW50IGNudDsKLXsKLSAgICByZXR1cm4oZGVzM19mYjY0X3JlcGx5 KGRhdGEsIGNudCwgJmRlczNfZmJbQ0ZCXSkpOwotfQotaW50Ci1kZXMzX29mYjY0X3JlcGx5KGRh dGEsIGNudCkKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGludCBjbnQ7Ci17Ci0gICAg cmV0dXJuKGRlczNfZmI2NF9yZXBseShkYXRhLCBjbnQsICZkZXMzX2ZiW09GQl0pKTsKLX0KLQot Ci1pbnQKLWRlczNfZmI2NF9yZXBseShkYXRhLCBjbnQsIGZicCkKLSAgICB1bnNpZ25lZCBjaGFy ICpkYXRhOwotICAgIGludCBjbnQ7Ci0gICAgc3RydWN0IGRlczNfZmIgKmZicDsKLXsKLSAgICBy ZWdpc3RlciBpbnQgc3RhdGUgPSBmYnAtPnN0YXRlW0RJUl9FTkNSWVBULTFdOwotCi0gICAgaWYg KGNudC0tIDwgMSkKLSAgICAgICAgZ290byBmYWlsdXJlOwotCi0gICAgc3dpdGNoICgqZGF0YSsr KSB7Ci0gICAgY2FzZSBGQjY0X0lWX09LOgotICAgICAgICBkZXMzX2ZiNjRfc3RyZWFtX2l2KGZi cC0+dGVtcF9mZWVkLCAmZmJwLT5zdHJlYW1zW0RJUl9FTkNSWVBULTFdKTsKLSAgICAgICAgaWYg KHN0YXRlID09IHhGQUlMRUQpCi0gICAgICAgICAgICBzdGF0ZSA9IElOX1BST0dSRVNTOwotICAg ICAgICBzdGF0ZSAmPSB+Tk9fUkVDVl9JVjsKLSAgICAgICAgZW5jcnlwdF9zZW5kX2tleWlkKERJ Ul9FTkNSWVBULCAodW5zaWduZWQgY2hhciAqKSJcMCIsIDEsIDEpOwotICAgICAgICBicmVhazsK LQotICAgIGNhc2UgRkI2NF9JVl9CQUQ6Ci0gICAgICAgIG1lbXNldChmYnAtPnRlbXBfZmVlZCwg MCwgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIGRlczNfZmI2NF9zdHJlYW1faXYoZmJwLT50ZW1w X2ZlZWQsICZmYnAtPnN0cmVhbXNbRElSX0VOQ1JZUFQtMV0pOwotICAgICAgICBzdGF0ZSA9IHhG QUlMRUQ7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSNpZiAwCi0gICAgICAgIGlm IChlbmNyeXB0X2RlYnVnX21vZGUpIHsKLSAgICAgICAgICAgIHByaW50ZigiVW5rbm93biBvcHRp b24gdHlwZTogJWRcclxuIiwgZGF0YVstMV0pOwotICAgICAgICAgICAgcHJpbnRmKCJcclxuIik7 Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICAvKiBGQUxMIFRIUk9VR0ggKi8KLSAgICAgIGZh aWx1cmU6Ci0gICAgICAgIHN0YXRlID0geEZBSUxFRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot ICAgIHJldHVybihmYnAtPnN0YXRlW0RJUl9FTkNSWVBULTFdID0gc3RhdGUpOwotfQotCi1pbnQK LWRlczNfY2ZiNjRfc2Vzc2lvbihrZXksIHNlcnZlcikKLSAgICBTZXNzaW9uX0tleSAqa2V5Owot ICAgIGludCBzZXJ2ZXI7Ci17Ci0gICAgcmV0dXJuKGRlczNfZmI2NF9zZXNzaW9uKGtleSwgc2Vy dmVyLCAmZGVzM19mYltDRkJdKSk7Ci19Ci0KLWludAotZGVzM19vZmI2NF9zZXNzaW9uKGtleSwg c2VydmVyKQotICAgIFNlc3Npb25fS2V5ICprZXk7Ci0gICAgaW50IHNlcnZlcjsKLXsKLSAgICBy ZXR1cm4oZGVzM19mYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIsICZkZXMzX2ZiW09GQl0pKTsKLX0K LQotc3RhdGljIGludAotZGVzM19mYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIsIGZicCkKLSAgICBT ZXNzaW9uX0tleSAqa2V5OwotICAgIGludCBzZXJ2ZXI7Ci0gICAgc3RydWN0IGRlczNfZmIgKmZi cDsKLXsKLSAgICBpbnQgcmM9MCxpPTA7Ci0gICAgaW50IGtleXMydXNlPTA7Ci0gICAgc3RydWN0 IGRlczNfc3RpbmZvICogc19zdHJlYW07Ci0gICAgc3RydWN0IGRlczNfc3RpbmZvICogY19zdHJl YW07Ci0KLSAgICBpZihzZXJ2ZXIpIHsKLSAgICAgICAgc19zdHJlYW0gPSAmZmJwLT5zdHJlYW1z W0RJUl9FTkNSWVBULTFdOwotICAgICAgICBjX3N0cmVhbSA9ICZmYnAtPnN0cmVhbXNbRElSX0RF Q1JZUFQtMV07Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBzX3N0cmVhbSA9ICZmYnAtPnN0 cmVhbXNbRElSX0RFQ1JZUFQtMV07Ci0gICAgICAgIGNfc3RyZWFtID0gJmZicC0+c3RyZWFtc1tE SVJfRU5DUllQVC0xXTsKLSAgICB9Ci0KLSAgICBrZXlzMnVzZSA9IGtleS0+bGVuZ3RoIC8gc2l6 ZW9mKEJsb2NrKTsKLSAgICBpZiAoIWtleSB8fCAoa2V5LT50eXBlID09IFNLX0RFUykgfHwgKGtl eXMydXNlIDwgMikpIHsKLSAgICAgICAgQ0hBUiBidWZbODBdOwotICAgICAgICBzcHJpbnRmKChj aGFyICopYnVmLCJDYW4ndCBzZXQgM0RFUyBzZXNzaW9uIGtleSAoJWQgPCAlZCkiLAotICAgICAg ICAgICAgICAgIGtleSA/IGtleS0+bGVuZ3RoIDogMCwgMiAqIChpbnQpc2l6ZW9mKEJsb2NrKSk7 CS8qIHNhZmUgKi8KLSNpZmRlZiBERUJVRwotICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2Rl KQotICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLGJ1Zik7Ci0jZW5kaWYKLSAgICAgICAgZGVi dWcoRjExMCwiZGVzM19mYjY0X3Nlc3Npb24iLGJ1ZiwwKTsKLSAgICAgICAgcmV0dXJuKC0xKTsK LSAgICB9Ci0KLSAgICBkZWJ1ZyhGMTExLCJkZXMzX2ZiNjRfc2Vzc2lvbiIsImtleXMydXNlIixr ZXlzMnVzZSk7Ci0gICAgLyogQ29tcHV0ZSB0aGUgZmlyc3Qgc2V0IG9mIGtleXMgLyBrZXkgb3Jk ZXIgKi8KLSAgICBzd2l0Y2ggKCBrZXlzMnVzZSApIHsKLSAgICBjYXNlIDI6Ci0gICAgICAgIG1l bWNweSgodm9pZCAqKWZicC0+a3JiZGVzX2tleVswXSwgKHZvaWQgKilrZXktPmRhdGEsIHNpemVv ZihCbG9jaykpOwotICAgICAgICBtZW1jcHkoKHZvaWQgKikgZmJwLT5rcmJkZXNfa2V5WzFdLCh2 b2lkICopKGtleS0+ZGF0YSArIHNpemVvZihCbG9jaykpLAotICAgICAgICAgICAgICAgICBzaXpl b2YoQmxvY2spKTsKLSAgICAgICAgbWVtY3B5KCh2b2lkICopZmJwLT5rcmJkZXNfa2V5WzJdLCAo dm9pZCAqKWtleS0+ZGF0YSwgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh c2UgMzoKLSAgICBkZWZhdWx0OgotICAgICAgICBtZW1jcHkoKHZvaWQgKilmYnAtPmtyYmRlc19r ZXlbMF0sICh2b2lkICopa2V5LT5kYXRhLCBzaXplb2YoQmxvY2spKTsKLSAgICAgICAgbWVtY3B5 KCh2b2lkICopIGZicC0+a3JiZGVzX2tleVsxXSwodm9pZCAqKShrZXktPmRhdGEgKyBzaXplb2Yo QmxvY2spKSwKLSAgICAgICAgICAgICAgICAgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIG1lbWNw eSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMl0sCi0gICAgICAgICAgICAgICAgICh2b2lkICop IChrZXktPmRhdGEgKyAyKnNpemVvZihCbG9jaykpLCBzaXplb2YoQmxvY2spKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgfQotICAgIGNraGV4ZHVtcCgiZGVzM19zZXNzaW9uX2tleSBrZXktPmRhdGEi LGtleS0+ZGF0YSxzaXplb2YoQmxvY2spKTsKLSAgICBja2hleGR1bXAoImRlczNfc2Vzc2lvbl9r ZXkgZmJwLT5rcmJkZXNfa2V5WzBdIiwKLSAgICAgICAgICAgIGZicC0+a3JiZGVzX2tleVswXSwK LSAgICAgICAgICAgIHNpemVvZihCbG9jaykKLSAgICAgICAgICAgICk7Ci0gICAgaWYgKGZicC0+ b25jZSA9PSAwKSB7Ci0gICAgICAgIGRlc19zZXRfcmFuZG9tX2dlbmVyYXRvcl9zZWVkKGZicC0+ a3JiZGVzX2tleVswXSk7Ci0gICAgICAgIGZicC0+b25jZSA9IDE7Ci0gICAgfQotCi0gICAgZm9y ICggaT0wO2k8MztpKysgKQotICAgICAgICBkZXNfZml4dXBfa2V5X3Bhcml0eShmYnAtPmtyYmRl c19rZXlbaV0pOwotICAgIGRlczNfZmI2NF9zdHJlYW1fa2V5KGZicC0+a3JiZGVzX2tleSwgc19z dHJlYW0pOwotCi0KLSAgICAvKiBDb21wdXRlIHRoZSBzZWNvbmQgc2V0IG9mIGtleXMgLyBrZXkg b3JkZXIgKi8KLSAgICBzd2l0Y2ggKCBrZXlzMnVzZSApIHsKLSAgICBjYXNlIDI6Ci0gICAgICAg IG1lbWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMF0sKHZvaWQgKikoa2V5LT5kYXRhICsg c2l6ZW9mKEJsb2NrKSksCi0gICAgICAgICAgICAgICAgIHNpemVvZihCbG9jaykpOwotICAgICAg ICBtZW1jcHkoKHZvaWQgKilmYnAtPmtyYmRlc19rZXlbMV0sICh2b2lkICopa2V5LT5kYXRhLCBz aXplb2YoQmxvY2spKTsKLSAgICAgICAgbWVtY3B5KCh2b2lkICopIGZicC0+a3JiZGVzX2tleVsy XSwodm9pZCAqKShrZXktPmRhdGEgKyBzaXplb2YoQmxvY2spKSwKLSAgICAgICAgICAgICAgICAg c2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMzoKLSAgICAgICAgbWVt Y3B5KCh2b2lkICopIGZicC0+a3JiZGVzX2tleVswXSwodm9pZCAqKShrZXktPmRhdGEgKyBzaXpl b2YoQmxvY2spKSwKLSAgICAgICAgICAgICAgICAgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIG1l bWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMV0sCi0gICAgICAgICAgICAgICAgICh2b2lk ICopIChrZXktPmRhdGEgKyAyKnNpemVvZihCbG9jaykpLCBzaXplb2YoQmxvY2spKTsKLSAgICAg ICAgbWVtY3B5KCh2b2lkICopZmJwLT5rcmJkZXNfa2V5WzJdLCAodm9pZCAqKWtleS0+ZGF0YSwg c2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAgbWVt Y3B5KCh2b2lkICopIGZicC0+a3JiZGVzX2tleVswXSwodm9pZCAqKShrZXktPmRhdGEgKyBzaXpl b2YoQmxvY2spKSwKLSAgICAgICAgICAgICAgICAgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIG1l bWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMV0sCi0gICAgICAgICAgICAgICAgICh2b2lk ICopIChrZXktPmRhdGEgKyAzKnNpemVvZihCbG9jaykpLCBzaXplb2YoQmxvY2spKTsKLSAgICAg ICAgbWVtY3B5KCh2b2lkICopZmJwLT5rcmJkZXNfa2V5WzJdLCAodm9pZCAqKWtleS0+ZGF0YSwg c2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNToKLSAgICAgICAgbWVt Y3B5KCh2b2lkICopIGZicC0+a3JiZGVzX2tleVswXSwodm9pZCAqKShrZXktPmRhdGEgKyBzaXpl b2YoQmxvY2spKSwKLSAgICAgICAgICAgICAgICAgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIG1l bWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMV0sCi0gICAgICAgICAgICAgICAgICh2b2lk ICopIChrZXktPmRhdGEgKyAzKnNpemVvZihCbG9jaykpLCBzaXplb2YoQmxvY2spKTsKLSAgICAg ICAgbWVtY3B5KCh2b2lkICopZmJwLT5rcmJkZXNfa2V5WzJdLAotICAgICAgICAgICAgICAgICAo dm9pZCAqKShrZXktPmRhdGEgKyA0KnNpemVvZihCbG9jaykpLCBzaXplb2YoQmxvY2spKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSA2OgotICAgICAgICBtZW1jcHkoKHZvaWQgKikgZmJwLT5r cmJkZXNfa2V5WzBdLAotICAgICAgICAgICAgICAgICAodm9pZCAqKSAoa2V5LT5kYXRhICsgMypz aXplb2YoQmxvY2spKSwgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIG1lbWNweSgodm9pZCAqKWZi cC0+a3JiZGVzX2tleVsxXSwKLSAgICAgICAgICAgICAgICAgKHZvaWQgKikoa2V5LT5kYXRhICsg NCpzaXplb2YoQmxvY2spKSwgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIG1lbWNweSgodm9pZCAq KSBmYnAtPmtyYmRlc19rZXlbMl0sCi0gICAgICAgICAgICAgICAgICh2b2lkICopIChrZXktPmRh dGEgKyA1ICpzaXplb2YoQmxvY2spKSwgIHNpemVvZihCbG9jaykpOwotICAgICAgICBicmVhazsK LSAgICB9Ci0KLSAgICBmb3IgKCBpPTA7aTwzO2krKyApCi0gICAgICAgIGRlc19maXh1cF9rZXlf cGFyaXR5KGZicC0+a3JiZGVzX2tleVtpXSk7Ci0gICAgZGVzM19mYjY0X3N0cmVhbV9rZXkoZmJw LT5rcmJkZXNfa2V5LCBjX3N0cmVhbSk7Ci0KLSAgICAvKiBub3cgdXNlIHRoZSBzZWNvbmQgc2V0 IG9mIGtleXMgdG8gYnVpbGQgdGhlIGRlZmF1bHQgS2V5IFNjaGVkdWxlICovCi0gICAgLyogd2hp Y2ggaXMgdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUgSVYuICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqLwotICAgIGZvciAoIGk9MDtpPDM7aSsrICkgewotICAgICAgICBtZW1zZXQoZmJwLT5r cmJkZXNfc2NoZWRbaV0sMCxzaXplb2YoU2NoZWR1bGUpKTsKLQotICAgICAgICByYyA9IGRlc19r ZXlfc2NoZWQoZmJwLT5rcmJkZXNfa2V5W2ldLCBmYnAtPmtyYmRlc19zY2hlZFtpXSk7Ci0gICAg ICAgIGlmICggcmMgPT0gLTEgKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIERFUyBr ZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uIFtERVMzLCVzXVxyXG4iLAotICAgICAgICAgICAg ICAgICAgICBzZXJ2ZXI/InNlcnZlciI6ImNsaWVudCIpOwotICAgICAgICAgICAgZGVidWcoRjEx MCwiZGVzM19mYjY0X3N0cmVhbV9pdiIsCi0gICAgICAgICAgICAgICAgICAgImludmFsaWQgREVT IEtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24iLDApOwotICAgICAgICB9IGVsc2UgaWYgKCBy YyA9PSAtMiApIHsKLSAgICAgICAgICAgIHByaW50ZigiP1dlYWsgREVTIGtleSBzcGVjaWZpZWQg Zm9yIGVuY3J5cHRpb25cclxuIik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkZXMzX2ZiNjRf c3RyZWFtX2l2IiwKLSAgICAgICAgICAgICAgICAgICAid2VhayBERVMgS2V5IHNwZWNpZmllZCBm b3IgZW5jcnlwdGlvbiIsMCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIHJjICE9IDAgKSB7Ci0gICAg ICAgICAgICBwcmludGYoIj9LZXkgU2NoZWR1bGUgbm90IGNyZWF0ZWQgYnkgZW5jcnlwdGlvblxy XG4iKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImRlczNfZmI2NF9zdHJlYW1faXYiLAotICAg ICAgICAgICAgICAgICAgICJLZXkgU2NoZWR1bGUgbm90IGNyZWF0ZWQgYnkgZW5jcnlwdGlvbiIs MCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2toZXhkdW1wKCJkZXMzX2ZiNjRfc2Vzc2lvbl9rZXkg c2NoZWR1bGUiLGZicC0+a3JiZGVzX3NjaGVkW2ldLDgqMTYpOwotICAgIH0KLSAgICAvKgotICAg ICogTm93IGxvb2sgdG8gc2VlIGlmIGtyYmRlc19zdGFydCgpIHdhcyB3YXMgd2FpdGluZyBmb3IK LSAgICAqIHRoZSBrZXkgdG8gc2hvdyB1cC4gIElmIHNvLCBnbyBhaGVhZCBhbiBjYWxsIGl0IG5v dwotICAgICogdGhhdCB3ZSBoYXZlIHRoZSBrZXkuCi0gICAgKi8KLSAgICBpZiAoZmJwLT5uZWVk X3N0YXJ0KSB7Ci0gICAgICAgIGZicC0+bmVlZF9zdGFydCA9IDA7Ci0gICAgICAgIGRlczNfZmI2 NF9zdGFydChmYnAsIERJUl9FTkNSWVBULCBzZXJ2ZXIpOwotICAgIH0KLSAgICByZXR1cm4oMCk7 Ci19Ci0KLS8qCi0gKiBXZSBvbmx5IGFjY2VwdCBhIGtleWlkIG9mIDAuICBJZiB3ZSBnZXQgYSBr ZXlpZCBvZgotICogMCwgdGhlbiBtYXJrIHRoZSBzdGF0ZSBhcyBTVUNDRVNTLgotICovCi1pbnQK LWRlczNfY2ZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCkKLSAgICBpbnQgZGlyLCAqbGVucDsKLSAg ICB1bnNpZ25lZCBjaGFyICprcDsKLXsKLSAgICByZXR1cm4oZGVzM19mYjY0X2tleWlkKGRpciwg a3AsIGxlbnAsICZkZXMzX2ZiW0NGQl0pKTsKLX0KLQotaW50Ci1kZXMzX29mYjY0X2tleWlkKGRp ciwga3AsIGxlbnApCi0gICAgaW50IGRpciwgKmxlbnA7Ci0gICAgdW5zaWduZWQgY2hhciAqa3A7 Ci17Ci0gICAgcmV0dXJuKGRlczNfZmI2NF9rZXlpZChkaXIsIGtwLCBsZW5wLCAmZGVzM19mYltP RkJdKSk7Ci19Ci0KLWludAotZGVzM19mYjY0X2tleWlkKGRpciwga3AsIGxlbnAsIGZicCkKLSAg ICBpbnQgZGlyLCAqbGVucDsKLSAgICB1bnNpZ25lZCBjaGFyICprcDsKLSAgICBzdHJ1Y3QgZGVz M19mYiAqZmJwOwotewotICAgIHJlZ2lzdGVyIGludCBzdGF0ZSA9IGZicC0+c3RhdGVbZGlyLTFd OwotCi0gICAgaWYgKCpsZW5wICE9IDEgfHwgKCprcCAhPSAnXDAnKSkgewotICAgICAgICAqbGVu cCA9IDA7Ci0gICAgICAgIHJldHVybihzdGF0ZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlID09 IHhGQUlMRUQpCi0gICAgICAgIHN0YXRlID0gSU5fUFJPR1JFU1M7Ci0KLSAgICBzdGF0ZSAmPSB+ Tk9fS0VZSUQ7Ci0KLSAgICByZXR1cm4oZmJwLT5zdGF0ZVtkaXItMV0gPSBzdGF0ZSk7Ci19Ci0K LSNpZiAwCi12b2lkCi1kZXMzX2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1Zmxlbiwg dHlwZSkKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAqYnVmLCAqdHlwZTsKLSAgICBpbnQgY250 LCBidWZsZW47Ci17Ci0gICAgY2hhciBsYnVmWzY0XTsKLSAgICByZWdpc3RlciBpbnQgaTsKLSAg ICBjaGFyICpjcDsKLQotICAgIGJ1ZltidWZsZW4tMV0gPSAnXDAnOyAgICAgICAgICAgICAgIC8q IG1ha2Ugc3VyZSBpdCdzIE5VTEwgdGVybWluYXRlZCAqLwotICAgIGJ1ZmxlbiAtPSAxOwotCi0g ICAgc3dpdGNoKGRhdGFbMl0pIHsKLSAgICBjYXNlIEZCNjRfSVY6Ci0gICAgICAgIHNwcmludGYo bGJ1ZiwgIiVzX0lWIiwgdHlwZSk7Ci0gICAgICAgIGNwID0gbGJ1ZjsKLSAgICAgICAgZ290byBj b21tb247Ci0KLSAgICBjYXNlIEZCNjRfSVZfT0s6Ci0gICAgICAgIHNwcmludGYobGJ1ZiwgIiVz X0lWX09LIiwgdHlwZSk7Ci0gICAgICAgIGNwID0gbGJ1ZjsKLSAgICAgICAgZ290byBjb21tb247 Ci0KLSAgICBjYXNlIEZCNjRfSVZfQkFEOgotICAgICAgICBzcHJpbnRmKGxidWYsICIlc19JVl9C QUQiLCB0eXBlKTsKLSAgICAgICAgY3AgPSBsYnVmOwotICAgICAgICBnb3RvIGNvbW1vbjsKLQot ICAgIGNhc2UgRkI2NF9DSEFMTEVOR0U6Ci0gICAgICAgIHNwcmludGYobGJ1ZiwgIiVzX0NIQUxM RU5HRSIsIHR5cGUpOwotICAgICAgICBjcCA9IGxidWY7Ci0gICAgICAgIGdvdG8gY29tbW9uOwot Ci0gICAgY2FzZSBGQjY0X1JFU1BPTlNFOgotICAgICAgICBzcHJpbnRmKGxidWYsICIlc19SRVNQ T05TRSIsIHR5cGUpOwotICAgICAgICBjcCA9IGxidWY7Ci0gICAgICAgIGdvdG8gY29tbW9uOwot Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ByaW50ZihsYnVmLCAiICVkICh1bmtub3duKSIsIGRh dGFbMl0pOwotICAgICAgICBjcCA9IGxidWY7Ci0gICAgICBjb21tb246Ci0gICAgICAgIGZvciAo OyAoYnVmbGVuID4gMCkgJiYgKCpidWYgPSAqY3ArKyk7IGJ1ZisrKQotICAgICAgICAgICAgYnVm bGVuLS07Ci0gICAgICAgIGZvciAoaSA9IDM7IGkgPCBjbnQ7IGkrKykgewotICAgICAgICAgICAg c3ByaW50ZihsYnVmLCAiICVkIiwgZGF0YVtpXSk7Ci0gICAgICAgICAgICBmb3IgKGNwID0gbGJ1 ZjsgKGJ1ZmxlbiA+IDApICYmICgqYnVmID0gKmNwKyspOyBidWYrKykKLSAgICAgICAgICAgICAg ICBidWZsZW4tLTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQK LWRlczNfY2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1ZmxlbikKLSAgICB1bnNpZ25l ZCBjaGFyICpkYXRhLCAqYnVmOwotICAgIGludCBjbnQsIGJ1ZmxlbjsKLXsKLSAgICBkZXMzX2Zi NjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1ZmxlbiwgIkNGQjY0Iik7Ci19Ci0KLXZvaWQK LWRlczNfb2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1ZmxlbikKLSAgICB1bnNpZ25l ZCBjaGFyICpkYXRhLCAqYnVmOwotICAgIGludCBjbnQsIGJ1ZmxlbjsKLXsKLSAgICBkZXMzX2Zi NjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1ZmxlbiwgIk9GQjY0Iik7Ci19Ci0jZW5kaWYK LQotdm9pZAotZGVzM19mYjY0X3N0cmVhbV9pdihzZWVkLCBzdHApCi0gICAgQmxvY2sgc2VlZDsK LSAgICByZWdpc3RlciBzdHJ1Y3QgZGVzM19zdGluZm8gKnN0cDsKLXsKLSAgICBpbnQgcmM9MCwg aSA9IDA7OwotCi0gICAgbWVtY3B5KHN0cC0+c3RyX2l2LCAgICAgc2VlZCwgc2l6ZW9mKEJsb2Nr KSk7Ci0gICAgbWVtY3B5KHN0cC0+c3RyX291dHB1dCwgc2VlZCwgc2l6ZW9mKEJsb2NrKSk7Ci0g ICAgZm9yICggaT0wO2k8MztpKysgKSB7Ci0gICAgICAgIG1lbXNldChzdHAtPnN0cl9zY2hlZFtp XSwwLHNpemVvZihTY2hlZHVsZSkpOwotCi0gICAgICAgIGNraGV4ZHVtcCgiZGVzM19mYjY0X3N0 cmVhbV9pdiIsc3RwLT5zdHJfaWtleVtpXSw4KTsKLQotICAgICAgICByYyA9IGRlc19rZXlfc2No ZWQoc3RwLT5zdHJfaWtleVtpXSwgc3RwLT5zdHJfc2NoZWRbaV0pOwotICAgICAgICBpZiAoIHJj ID09IC0xICkgewotICAgICAgICAgICAgcHJpbnRmKCI/SW52YWxpZCBERVMga2V5IHNwZWNpZmll ZCBmb3IgZW5jcnlwdGlvbiBbREVTMyBpdl1cclxuIik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEw LCJkZXMzX2ZiNjRfc3RyZWFtX2l2IiwKLSAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBERVMg S2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvbiIsMCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIHJj ID09IC0yICkgewotICAgICAgICAgICAgcHJpbnRmKCI/V2VhayBERVMga2V5IHNwZWNpZmllZCBm b3IgZW5jcnlwdGlvblxyXG4iKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImRlczNfZmI2NF9z dHJlYW1faXYiLAotICAgICAgICAgICAgICAgICAgICJ3ZWFrIERFUyBLZXkgc3BlY2lmaWVkIGZv ciBlbmNyeXB0aW9uIiwwKTsKLSAgICAgICAgfSBlbHNlIGlmICggcmMgIT0gMCApIHsKLSAgICAg ICAgICAgIHByaW50ZigiP0tleSBTY2hlZHVsZSBub3QgY3JlYXRlZCBieSBlbmNyeXB0aW9uXHJc biIpOwotICAgICAgICAgICAgZGVidWcoRjExMCwiZGVzM19mYjY0X3N0cmVhbV9pdiIsCi0gICAg ICAgICAgICAgICAgICAgIktleSBTY2hlZHVsZSBub3QgY3JlYXRlZCBieSBlbmNyeXB0aW9uIiww KTsKLSAgICAgICAgfQotICAgICAgICBja2hleGR1bXAoImRlczNfZmI2NF9zdHJlYW1faXYgc2No ZWR1bGUiLHN0cC0+c3RyX3NjaGVkW2ldLDgqMTYpOwotICAgIH0KLSAgICBzdHAtPnN0cl9pbmRl eCA9IHNpemVvZihCbG9jayk7Ci19Ci0KLXZvaWQKLWRlczNfZmI2NF9zdHJlYW1fa2V5KGtleSwg c3RwKQotICAgIEJsb2NrICoga2V5OwotICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXMzX3N0aW5mbyAq c3RwOwotewotICAgIGludCByYyA9IDAsIGkgPSAwOwotCi0gICAgZm9yICggaT0wO2k8MztpKysg KSB7Ci0gICAgICAgIG1lbWNweShzdHAtPnN0cl9pa2V5W2ldLCBrZXlbaV0sIHNpemVvZihCbG9j aykpOwotCi0gICAgICAgIG1lbXNldChzdHAtPnN0cl9zY2hlZFtpXSwwLHNpemVvZihTY2hlZHVs ZSkpOwotCi0gICAgICAgIGNraGV4ZHVtcCgiZGVzM19mYjY0X3N0cmVhbV9rZXkiLGtleVtpXSw4 KTsKLQotICAgICAgICByYyA9IGRlc19rZXlfc2NoZWQoa2V5W2ldLCBzdHAtPnN0cl9zY2hlZFtp XSk7Ci0gICAgICAgIGlmICggcmMgPT0gLTEgKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9JbnZh bGlkIERFUyBrZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uIFtERVMzIGtleV1cclxuIik7Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkZXMzX2ZiNjRfc3RyZWFtX2tleSIsCi0gICAgICAgICAg ICAgICAgICAgImludmFsaWQgREVTIEtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24iLDApOwot ICAgICAgICB9IGVsc2UgaWYgKCByYyA9PSAtMiApIHsKLSAgICAgICAgICAgIHByaW50ZigiP1dl YWsgREVTIGtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb25cclxuIik7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJkZXMzX2ZiNjRfc3RyZWFtX2tleSIsCi0gICAgICAgICAgICAgICAgICAgIndl YWsgREVTIEtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24iLDApOwotICAgICAgICB9IGVsc2Ug aWYgKCByYyAhPSAwICkgewotICAgICAgICAgICAgcHJpbnRmKCI/S2V5IFNjaGVkdWxlIG5vdCBj cmVhdGVkIGJ5IGVuY3J5cHRpb25cclxuIik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkZXMz X2ZiNjRfc3RyZWFtX2tleSIsCi0gICAgICAgICAgICAgICAgICAgIktleSBTY2hlZHVsZSBub3Qg Y3JlYXRlZCBieSBlbmNyeXB0aW9uIiwwKTsKLSAgICAgICAgfQotICAgICAgICBja2hleGR1bXAo ImRlczNfZmI2NF9zdHJlYW1fa2V5IHNjaGVkdWxlIixzdHAtPnN0cl9zY2hlZFtpXSw4KjE2KTsK LSAgICB9Ci0KLSAgICBtZW1jcHkoc3RwLT5zdHJfb3V0cHV0LCBzdHAtPnN0cl9pdiwgc2l6ZW9m KEJsb2NrKSk7Ci0gICAgc3RwLT5zdHJfaW5kZXggPSBzaXplb2YoQmxvY2spOwotfQotCi0vKgot ICogREVTMyA2NCBiaXQgQ2lwaGVyIEZlZWRiYWNrCi0gKgotICogICAgICAgICAgICAgICAga2V5 MSAgICAgICBrZXkyICAgICAgIGtleTMKLSAqICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwg ICAgICAgICAgfAotICogICAgICAgICAgICAgICAgIHYgICAgICAgICAgdiAgICAgICAgICB2Ci0g KiAgICAgICAgICAgICArLS0tLS0tLSsgICstLS0tLS0tKyAgKy0tLS0tLS0rCi0gKiAgICAgICAg ICArLT58IERFUy1lIHwtPnwgREVTLWQgfC0+fCBERVMtZSB8LS0gKwotICogICAgICAgICAgfCAg Ky0tLS0tLS0rICArLS0tLS0tLSsgICstLS0tLS0tKyAgIHwKLSAqICAgICAgICAgIHwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Ci0gKiAgSU5QVVQgLS0oLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0+KCspKy0tLT4gREFUQQotICogICAgICAgICAgfCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICAgICAgICAgICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKgotICoKLSAqIEdpdmVuOgotICogICAgICBpVjog SW5pdGlhbCB2ZWN0b3IsIDY0IGJpdHMgKDggYnl0ZXMpIGxvbmcuCi0gKiAgICAgIERuOiB0aGUg bnRoIGNodW5rIG9mIDY0IGJpdHMgKDggYnl0ZXMpIG9mIGRhdGEgdG8gZW5jcnlwdCAoZGVjcnlw dCkuCi0gKiAgICAgIE9uOiB0aGUgbnRoIGNodW5rIG9mIDY0IGJpdHMgKDggYnl0ZXMpIG9mIGVu Y3J5cHRlZCAoZGVjcnlwdGVkKSBvdXRwdXQuCi0gKgotICogICAgICBWMCA9IERFUy1lKERFUy1k KERFUy1lKGlWLCBrZXkxKSxrZXkyKSxrZXkzKQotICogICAgICBPbiA9IERuIF4gVm4KLSAqICAg ICAgVihuKzEpID0gREVTLWUoREVTLWQoREVTLWUoT24sIGtleTEpLGtleTIpLGtleTMpCi0gKi8K LQotdm9pZAotZGVzM19jZmI2NF9lbmNyeXB0KHMsIGMpCi0gICAgcmVnaXN0ZXIgdW5zaWduZWQg Y2hhciAqczsKLSAgICBpbnQgYzsKLXsKLSAgICByZWdpc3RlciBzdHJ1Y3QgZGVzM19zdGluZm8g KnN0cCA9ICZkZXMzX2ZiW0NGQl0uc3RyZWFtc1tESVJfRU5DUllQVC0xXTsKLSAgICByZWdpc3Rl ciBpbnQgaW5kZXg7Ci0KLSAgICBpbmRleCA9IHN0cC0+c3RyX2luZGV4OwotICAgIHdoaWxlIChj LS0gPiAwKSB7Ci0gICAgICAgIGlmIChpbmRleCA9PSBzaXplb2YoQmxvY2spKSB7Ci0gICAgICAg ICAgICBCbG9jayBiOwotI2lmZGVmIExJQkRFUwotICAgICAgICAgICAgZGVzX2VjYjNfZW5jcnlw dChzdHAtPnN0cl9vdXRwdXQsIGIsIHN0cC0+c3RyX3NjaGVkWzBdLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMV0sIHN0cC0+c3RyX3NjaGVkWzJdLCAxKTsK LSNlbHNlIC8qIExJQkRFUyAqLwotICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3Ry X291dHB1dCwgYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRb MF0sIDEpOwotICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMV0sIDApOwotICAg ICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMl0sIDEpOwotI2VuZGlmIC8qIExJQkRF UyAqLwotICAgICAgICAgICAgbWVtY3B5KHN0cC0+c3RyX2ZlZWQsYixzaXplb2YoQmxvY2spKTsK LSAgICAgICAgICAgIGluZGV4ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE9uIGVuY3J5 cHRpb24sIHdlIHN0b3JlIChmZWVkIF4gZGF0YSkgd2hpY2ggaXMgY3lwaGVyICovCi0gICAgICAg ICpzID0gc3RwLT5zdHJfb3V0cHV0W2luZGV4XSA9IChzdHAtPnN0cl9mZWVkW2luZGV4XSBeICpz KTsKLSAgICAgICAgcysrOwotICAgICAgICBpbmRleCsrOwotICAgIH0KLSAgICBzdHAtPnN0cl9p bmRleCA9IGluZGV4OwotfQotCi1pbnQKLWRlczNfY2ZiNjRfZGVjcnlwdChkYXRhKQotICAgIGlu dCBkYXRhOwotewotICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXMzX3N0aW5mbyAqc3RwID0gJmRlczNf ZmJbQ0ZCXS5zdHJlYW1zW0RJUl9ERUNSWVBULTFdOwotICAgIGludCBpbmRleDsKLQotICAgIGlm IChkYXRhID09IC0xKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICogQmFjayB1cCBvbmUgYnl0ZS4g IEl0IGlzIGFzc3VtZWQgdGhhdCB3ZSB3aWxsCi0gICAgICAgICogbmV2ZXIgYmFjayB1cCBtb3Jl IHRoYW4gb25lIGJ5dGUuICBJZiB3ZSBkbywgdGhpcwotICAgICAgICAqIG1heSBvciBtYXkgbm90 IHdvcmsuCi0gICAgICAgICovCi0gICAgICAgIGlmIChzdHAtPnN0cl9pbmRleCkKLSAgICAgICAg ICAgIC0tc3RwLT5zdHJfaW5kZXg7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0KLSAgICBp bmRleCA9IHN0cC0+c3RyX2luZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IHNpemVvZihCbG9jaykp IHsKLSAgICAgICAgQmxvY2sgYjsKLSNpZmRlZiBMSUJERVMKLSAgICAgICAgZGVzX2VjYjNfZW5j cnlwdChzdHAtPnN0cl9vdXRwdXQsIGIsIHN0cC0+c3RyX3NjaGVkWzBdLAotICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHAtPnN0cl9zY2hlZFsxXSwgc3RwLT5zdHJfc2NoZWRbMl0sIDEpOwot I2Vsc2UgLyogTElCREVTICovCi0gICAgICAgICAgICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJf b3V0cHV0LCBiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHAtPnN0cl9zY2hlZFsw XSwgMSk7Ci0gICAgICAgICAgICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHAtPnN0cl9zY2hlZFsxXSwgMCk7Ci0gICAg ICAgICAgICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHAtPnN0cl9zY2hlZFsyXSwgMSk7Ci0jZW5kaWYgLyogTElCREVT ICovCi0gICAgICAgIG1lbWNweShzdHAtPnN0cl9mZWVkLCBiLCBzaXplb2YoQmxvY2spKTsKLSAg ICAgICAgc3RwLT5zdHJfaW5kZXggPSAxOyAgICAgLyogTmV4dCB0aW1lIHdpbGwgYmUgMSAqLwot ICAgICAgICBpbmRleCA9IDA7ICAgICAgICAgICAgICAvKiBCdXQgbm93IHVzZSAwICovCi0gICAg fQotCi0gICAgLyogT24gZGVjcnlwdGlvbiB3ZSBzdG9yZSAoZGF0YSkgd2hpY2ggaXMgY3lwaGVy LiAqLwotICAgIHN0cC0+c3RyX291dHB1dFtpbmRleF0gPSBkYXRhOwotICAgIHJldHVybihkYXRh IF4gc3RwLT5zdHJfZmVlZFtpbmRleF0pOwotfQotCi0vKgotICogREVTMyA2NCBiaXQgT3V0cHV0 IEZlZWRiYWNrCi0gKgotICoKLSAqICAgICAgICAgICAgICAgIGtleTEgICAgICAga2V5MiAgICAg ICBrZXkzCi0gKiAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgIHwKLSAqICAg ICAgICAgICAgICAgICB2ICAgICAgICAgIHYgICAgICAgICAgdgotICogICAgICAgICAgICAgKy0t LS0tLS0rICArLS0tLS0tLSsgICstLS0tLS0tKwotICogICAgICAgICAgKy0+fCBERVMtZSB8LT58 IERFUy1kIHwtPnwgREVTLWUgfC0tICsKLSAqICAgICAgICAgIHwgICstLS0tLS0tKyAgKy0tLS0t LS0rICArLS0tLS0tLSsgICB8Ci0gKiAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHYKLSAqICBJTlBVVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t PigrKSAtLS0tPiBEQVRBCi0gKgotICogR2l2ZW46Ci0gKiAgICAgIGlWOiBJbml0aWFsIHZlY3Rv ciwgNjQgYml0cyAoOCBieXRlcykgbG9uZy4KLSAqICAgICAgRG46IHRoZSBudGggY2h1bmsgb2Yg NjQgYml0cyAoOCBieXRlcykgb2YgZGF0YSB0byBlbmNyeXB0IChkZWNyeXB0KS4KLSAqICAgICAg T246IHRoZSBudGggY2h1bmsgb2YgNjQgYml0cyAoOCBieXRlcykgb2YgZW5jcnlwdGVkIChkZWNy eXB0ZWQpIG91dHB1dC4KLSAqCi0gKiAgICAgIFYwID0gREVTLWUoREVTLWQoREVTLWUoaVYsIGtl eTEpLGtleTIpLGtleTMpCi0gKiAgICAgIFYobisxKSA9IERFUy1lKERFUy1kKERFUy1lKFZuLCBr ZXkxKSxrZXkyKSxrZXkzKQotICogICAgICBPbiA9IERuIF4gVm4KLSAqLwotdm9pZAotZGVzM19v ZmI2NF9lbmNyeXB0KHMsIGMpCi0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqczsKLSAgICBp bnQgYzsKLXsKLSAgICByZWdpc3RlciBzdHJ1Y3QgZGVzM19zdGluZm8gKnN0cCA9ICZkZXMzX2Zi W09GQl0uc3RyZWFtc1tESVJfRU5DUllQVC0xXTsKLSAgICByZWdpc3RlciBpbnQgaW5kZXg7Ci0K LSAgICBpbmRleCA9IHN0cC0+c3RyX2luZGV4OwotICAgIHdoaWxlIChjLS0gPiAwKSB7Ci0gICAg ICAgIGlmIChpbmRleCA9PSBzaXplb2YoQmxvY2spKSB7Ci0gICAgICAgICAgICBCbG9jayBiOwot I2lmZGVmIExJQkRFUwotICAgICAgICAgICAgZGVzX2VjYjNfZW5jcnlwdChzdHAtPnN0cl9mZWVk LCBiLCBzdHAtPnN0cl9zY2hlZFswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rw LT5zdHJfc2NoZWRbMV0sIHN0cC0+c3RyX3NjaGVkWzJdLCAxKTsKLSNlbHNlIC8qIExJQkRFUyAq LwotICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMF0sIDEpOwotICAgICAgICAg ICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMV0sIDApOwotICAgICAgICAgICAgZGVzX2VjYl9l bmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RwLT5zdHJfc2NoZWRbMl0sIDEpOwotI2VuZGlmIC8qIExJQkRFUyAqLwotICAgICAgICAgICAg bWVtY3B5KHN0cC0+c3RyX2ZlZWQsYixzaXplb2YoQmxvY2spKTsKLSAgICAgICAgICAgIGluZGV4 ID0gMDsKLSAgICAgICAgfQotICAgICAgICAqcysrIF49IHN0cC0+c3RyX2ZlZWRbaW5kZXhdOwot ICAgICAgICBpbmRleCsrOwotICAgIH0KLSAgICBzdHAtPnN0cl9pbmRleCA9IGluZGV4OwotfQot Ci1pbnQKLWRlczNfb2ZiNjRfZGVjcnlwdChkYXRhKQotICAgIGludCBkYXRhOwotewotICAgIHJl Z2lzdGVyIHN0cnVjdCBkZXMzX3N0aW5mbyAqc3RwID0gJmRlczNfZmJbT0ZCXS5zdHJlYW1zW0RJ Ul9ERUNSWVBULTFdOwotICAgIGludCBpbmRleDsKLQotICAgIGlmIChkYXRhID09IC0xKSB7Ci0g ICAgICAgIC8qCi0gICAgICAgICogQmFjayB1cCBvbmUgYnl0ZS4gIEl0IGlzIGFzc3VtZWQgdGhh dCB3ZSB3aWxsCi0gICAgICAgICogbmV2ZXIgYmFjayB1cCBtb3JlIHRoYW4gb25lIGJ5dGUuICBJ ZiB3ZSBkbywgdGhpcwotICAgICAgICAqIG1heSBvciBtYXkgbm90IHdvcmsuCi0gICAgICAgICov Ci0gICAgICAgIGlmIChzdHAtPnN0cl9pbmRleCkKLSAgICAgICAgICAgIC0tc3RwLT5zdHJfaW5k ZXg7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0KLSAgICBpbmRleCA9IHN0cC0+c3RyX2lu ZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IHNpemVvZihCbG9jaykpIHsKLSAgICAgICAgQmxvY2sg YjsKLSNpZmRlZiBMSUJERVMKLSAgICAgICAgZGVzX2VjYjNfZW5jcnlwdChzdHAtPnN0cl9mZWVk LCBiLCBzdHAtPnN0cl9zY2hlZFswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RwLT5z dHJfc2NoZWRbMV0sIHN0cC0+c3RyX3NjaGVkWzJdLCAxKTsKLSNlbHNlIC8qIExJQkRFUyAqLwot ICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMF0sIDEpOwotICAgICAgICAgICAg ZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMV0sIDApOwotICAgICAgICAgICAgZGVzX2VjYl9lbmNy eXB0KHN0cC0+c3RyX291dHB1dCwgYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rw LT5zdHJfc2NoZWRbMl0sIDEpOwotI2VuZGlmIC8qIExJQkRFUyAqLwotICAgICAgICBtZW1jcHko c3RwLT5zdHJfZmVlZCwgYiwgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIHN0cC0+c3RyX2luZGV4 ID0gMTsgICAgIC8qIE5leHQgdGltZSB3aWxsIGJlIDEgKi8KLSAgICAgICAgaW5kZXggPSAwOyAg ICAgICAgICAgICAgLyogQnV0IG5vdyB1c2UgMCAqLwotICAgIH0KLQotICAgIHJldHVybihkYXRh IF4gc3RwLT5zdHJfZmVlZFtpbmRleF0pOwotfQotI2VuZGlmIC8qIENLX0RFUyAqLwotCi0jaWZk ZWYgQ0tfQ0FTVAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMKLSAqICAgICAgVGhl IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICogICAgICBDYWxp Zm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLSAqIDQuIE5laXRoZXIgdGhl IG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz Ci0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJF R0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU UklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1B R0UuCi0gKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5NyBTdGFuZm9yZCBVbml2ZXJzaXR5 Ci0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5k IHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQKLSAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVy cG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQKLSAqIHRoYXQgdGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2VzIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVh ciBpbgotICogYWxsIGNvcGllcyBvZiB0aGUgc29mdHdhcmUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRh dGlvbi4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTLUlTIiBBTkQgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLSAqIEVYUFJFU1MsIElNUExJRUQgT1IgT1RIRVJXSVNF LCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkKLSAqIFdBUlJBTlRZIE9GIE1FUkNI QU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqCi0gKiBJ TiBOTyBFVkVOVCBTSEFMTCBTVEFORk9SRCBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkNJ REVOVEFMLAotICogSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5E LCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCi0gKiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVT RSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIE9SIE5PVCBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T U0lCSUxJVFkgT0YgREFNQUdFLCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIEFSSVNJ TkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5D RSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2lmZGVmICBf X1NURENfXwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0KLS8qCi0gKiBjYXN0LmgKLSAq IEF1dGhvcjogVG9tIFd1Ci0gKgotICogVHlwZSBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZv ciBDQVNULgotICovCi0KLSNpZm5kZWYgX0NBU1RfSF8KLSNkZWZpbmUgX0NBU1RfSF8KLQotI2lm bmRlZiBQCi0jaWZkZWYgX19TVERDX18KLSNkZWZpbmUgUCh4KSB4Ci0jZWxzZQotI2RlZmluZSBQ KHgpICgpCi0jZW5kaWYgLyogX19TVERDX18gKi8KLSNlbmRpZiAvKiBQICovCi0KLSNpZm5kZWYg TElUVExFX0VORElBTgotI2lmbmRlZiBCSUdfRU5ESUFOCi0jaWZuZGVmIFdPUkRTX0JJR0VORElB TgotI2RlZmluZSBMSVRUTEVfRU5ESUFOIDEKLSNlbmRpZiAvKiBXT1JEU19CSUdFTkRJQU4gKi8K LSNlbmRpZiAvKiBCSUdfRU5ESUFOICovCi0jZW5kaWYgLyogTElUVExFX0VORElBTiAqLwotCi10 eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzI7ICAgIC8qIE11c3QgYmUgMzIgYml0cyAqLwotdHlw ZWRlZiB1aW50MzIgKiB1aW50MzJwOwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4OwotdHlw ZWRlZiB1aW50OCAqIHVpbnQ4cDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICBzdHJ1Y3QgQ2FzdFN1 YmtleVBhaXIgewotICAgIHVpbnQzMiBLbTsKLSAgICB1aW50MzIgS3I7Ci0gIH0gS1sxNl07Ci0g IGludCBrc2l6ZTsKLX0gQ2FzdEtleVNjaGVkOwotCi0vKgotICogY2FzdCpfa2V5X3NjaGVkKHNj aGVkdWxlLCBrZXkpCi0gKgotICogSW5pdGlhbGl6ZXMgdGhlIENBU1Qga2V5IHNjaGVkdWxlICJz Y2hlZHVsZSIgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBrZXkuCi0gKiBUaGUgZGlmZmVyZW50IHNl dHVwIHJvdXRpbmVzIGFjY2VwdCBkaWZmZXJlbnQgbGVuZ3RoIGtleXM6Ci0gKgotICogICBja19j YXN0NV80MF9rZXlfc2NoZWQ6IDQwLWJpdC81LWJ5dGUgKDEyIHJvdW5kKSBrZXlzCi0gKiAgIGNr X2Nhc3Q1XzY0X2tleV9zY2hlZDogNjQtYml0LzgtYnl0ZSAoMTIgcm91bmQpIGtleXMKLSAqICAg Y2tfY2FzdDVfODBfa2V5X3NjaGVkOiA4MC1iaXQvMTAtYnl0ZSAoMTIgcm91bmQpIGtleXMKLSAq ICAgY2tfY2FzdDEyOF9rZXlfc2NoZWQ6IDEyOC1iaXQvMTYtYnl0ZSAoMTYgcm91bmQpIGtleXMK LSAqLwotCi1leHRlcm4gdm9pZCBja19jYXN0NV80MF9rZXlfc2NoZWQgUCgoQ2FzdEtleVNjaGVk ICosIHVpbnQ4ICopKTsKLWV4dGVybiB2b2lkIGNrX2Nhc3Q1XzY0X2tleV9zY2hlZCBQKChDYXN0 S2V5U2NoZWQgKiwgdWludDggKikpOwotZXh0ZXJuIHZvaWQgY2tfY2FzdDVfODBfa2V5X3NjaGVk IFAoKENhc3RLZXlTY2hlZCAqLCB1aW50OCAqKSk7Ci1leHRlcm4gdm9pZCAgY2tfY2FzdDEyOF9r ZXlfc2NoZWQgUCgoQ2FzdEtleVNjaGVkICosIHVpbnQ4ICopKTsKLQotLyoKLSAqIGNrX2Nhc3Rf ZWNiX2VuY3J5cHQob3V0cHV0LCBpbnB1dCwgc2NoZWR1bGUsIG1vZGUpCi0gKiBja19jYXN0X2Vj Yl9jcnlwdChkYXRhLCBzY2hlZHVsZSwgbW9kZSkKLSAqCi0gKiBFbmNyeXB0cyB0aGUgNjQtYml0 ICJpbnB1dCIgYWNjb3JkaW5nIHRvIHRoZSBDQVNUIGtleSBzY2hlZHVsZQotICogInNjaGVkdWxl IiBhbmQgcGxhY2VzIHRoZSByZXN1bHQgaW4gIm91dHB1dCIuICBJZiAibW9kZSIgaXMgMCwKLSAq IGNrX2Nhc3RfZWNiX2VuY3J5cHQgd2lsbCBlbmNyeXB0LCBvdGhlcndpc2UgaXQgd2lsbCBkZWNy eXB0LgotICogIk91dHB1dCIgYW5kICJpbnB1dCIgY2FuIHBvaW50IHRvIHRoZSBzYW1lIG1lbW9y eSwgaW4gd2hpY2ggY2FzZQotICogZW4vZGVjcnlwdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBpbiBw bGFjZS4KLSAqCi0gKiBja19jYXN0X2VjYl9jcnlwdCBhY2NlcHRzIGlucHV0IGluIHRoZSBmb3Jt IG9mIGFuIGFycmF5IG9mIHR3bwotICogMzItYml0IHdvcmRzIGFuZCBwZXJmb3JtcyBlbmNyeXB0 aW9uL2RlY3J5cHRpb24gaW4gcGxhY2UuCi0gKi8KLQotZXh0ZXJuIHZvaWQgY2tfY2FzdF9lY2Jf ZW5jcnlwdCBQKCh1aW50OCAqLCB1aW50OCAqLCBDYXN0S2V5U2NoZWQgKiwgaW50KSk7Ci1leHRl cm4gdm9pZCBja19jYXN0X2VjYl9jcnlwdCBQKCh1aW50MzIgKiwgQ2FzdEtleVNjaGVkICosIGlu dCkpOwotCi0jZW5kaWYgLyogQ0FTVF9IICovCi0KLWV4dGVybiBlbmNyeXB0X2RlYnVnX21vZGU7 Ci0KLSNkZWZpbmUgQ0ZCXzQwICAwCi0jZGVmaW5lIE9GQl80MCAgMQotI2lmZGVmIENBU1RfRVhQ T1JUX0VOQ1JZUFRJT04KLSNkZWZpbmUgRkJfQ05UICAyCi0jZWxzZQotI2RlZmluZSBDRkJfMTI4 IDIKLSNkZWZpbmUgT0ZCXzEyOCAzCi0jZGVmaW5lIEZCX0NOVCAgNAotI2VuZGlmCi0KLSNkZWZp bmUgTk9fU0VORF9JViAgICAgIDEKLSNkZWZpbmUgTk9fUkVDVl9JViAgICAgIDIKLSNkZWZpbmUg Tk9fS0VZSUQgICAgICAgIDQKLSNkZWZpbmUgSU5fUFJPR1JFU1MgICAgIChOT19TRU5EX0lWfE5P X1JFQ1ZfSVZ8Tk9fS0VZSUQpCi0jZGVmaW5lIFNVQ0NFU1MgICAgICAgICAwCi0jZGVmaW5lIGNG QUlMRUQgICAgICAgICAtMQotCi0KLXN0cnVjdCBjYXN0X2ZiIHsKLSAgICAgICAgQmxvY2sgdGVt cF9mZWVkOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGZiX2ZlZWRbNjRdOwotICAgICAgICBpbnQg a2V5X2lzc2V0OwotICAgICAgICBpbnQgbmVlZF9zdGFydDsKLSAgICAgICAgaW50IHN0YXRlWzJd OwotICAgICAgICBzdHJ1Y3QgY2FzdF9zdGluZm8gewotICAgICAgICAgICAgICAgIEJsb2NrICAg ICAgICAgICBzdHJfb3V0cHV0OwotICAgICAgICAgICAgICAgIEJsb2NrICAgICAgICAgICBzdHJf ZmVlZDsKLSAgICAgICAgICAgICAgICBCbG9jayAgICAgICAgICAgc3RyX2l2OwotICAgICAgICAg ICAgICAgIENhc3RLZXlTY2hlZCAgICBzdHJfc2NoZWQ7Ci0gICAgICAgICAgICAgICAgaW50ICAg ICAgICAgICAgIHN0cl9pbmRleDsKLSAgICAgICAgfSBzdHJlYW1zWzJdOwotfTsKLQotc3RhdGlj IHN0cnVjdCBjYXN0X2ZiIGNhc3RfZmJbRkJfQ05UXTsKLQotI2RlZmluZSBGQjY0X0lWICAgICAg ICAgMQotI2RlZmluZSBGQjY0X0lWX09LICAgICAgMgotI2RlZmluZSBGQjY0X0lWX0JBRCAgICAg MwotCi0KLXN0YXRpYyB2b2lkIGNhc3RfZmI2NF9zdHJlYW1faXYgUCgoQmxvY2ssIHN0cnVjdCBj YXN0X3N0aW5mbyAqKSk7Ci1zdGF0aWMgdm9pZCBjYXN0X2ZiNjRfaW5pdCBQKChzdHJ1Y3QgY2Fz dF9mYiAqKSk7Ci1zdGF0aWMgaW50IGNhc3RfZmI2NF9zdGFydCBQKChzdHJ1Y3QgY2FzdF9mYiAq LCBpbnQsIGludCkpOwotc3RhdGljIGludCBjYXN0X2ZiNjRfaXMgUCgodW5zaWduZWQgY2hhciAq LCBpbnQsIHN0cnVjdCBjYXN0X2ZiICopKTsKLXN0YXRpYyBpbnQgY2FzdF9mYjY0X3JlcGx5IFAo KHVuc2lnbmVkIGNoYXIgKiwgaW50LCBzdHJ1Y3QgY2FzdF9mYiAqKSk7Ci1zdGF0aWMgaW50IGNh c3RfZmI2NF9zZXNzaW9uIFAoKFNlc3Npb25fS2V5ICosIGludCwgc3RydWN0IGNhc3RfZmIgKiwg aW50KSk7Ci1zdGF0aWMgdm9pZCBjYXN0X2ZiNjRfc3RyZWFtX2tleSBQKChCbG9jaywgc3RydWN0 IGNhc3Rfc3RpbmZvICosIGludCkpOwotc3RhdGljIGludCBjYXN0X2ZiNjRfa2V5aWQgUCgoaW50 LCB1bnNpZ25lZCBjaGFyICosIGludCAqLCBzdHJ1Y3QgY2FzdF9mYiAqKSk7Ci1zdGF0aWMgdm9p ZCBfY2FzdF9jZmI2NF9lbmNyeXB0IFAoKHVuc2lnbmVkIGNoYXIgKixpbnQsIHN0cnVjdCBjYXN0 X3N0aW5mbyAqKSk7Ci1zdGF0aWMgaW50IF9jYXN0X2NmYjY0X2RlY3J5cHQgUCgoaW50LCBzdHJ1 Y3QgY2FzdF9zdGluZm8gKikpOwotc3RhdGljIHZvaWQgX2Nhc3Rfb2ZiNjRfZW5jcnlwdCBQKCh1 bnNpZ25lZCBjaGFyICosaW50LCBzdHJ1Y3QgY2FzdF9zdGluZm8gKikpOwotc3RhdGljIGludCBf Y2FzdF9vZmI2NF9kZWNyeXB0IFAoKGludCwgc3RydWN0IGNhc3Rfc3RpbmZvICopKTsKLQotI2lm bmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCi12b2lkCi1jYXN0X2NmYjY0X2luaXQoc2VydmVy KQotICAgICAgICBpbnQgc2VydmVyOwotewotICAgICAgICBjYXN0X2ZiNjRfaW5pdCgmY2FzdF9m YltDRkJfMTI4XSk7Ci0gICAgICAgIGNhc3RfZmJbQ0ZCXzEyOF0uZmJfZmVlZFs0XSA9IEVOQ1RZ UEVfQ0FTVDEyOF9DRkI2NDsKLX0KLQotdm9pZAotY2FzdF9vZmI2NF9pbml0KHNlcnZlcikKLSAg ICAgICAgaW50IHNlcnZlcjsKLXsKLSAgICAgICAgY2FzdF9mYjY0X2luaXQoJmNhc3RfZmJbT0ZC XzEyOF0pOwotICAgICAgICBjYXN0X2ZiW09GQl8xMjhdLmZiX2ZlZWRbNF0gPSBFTkNUWVBFX0NB U1QxMjhfT0ZCNjQ7Ci19Ci0jZW5kaWYKLQotdm9pZAotY2FzdGV4cF9jZmI2NF9pbml0KHNlcnZl cikKLSAgICAgICAgaW50IHNlcnZlcjsKLXsKLSAgICAgICAgY2FzdF9mYjY0X2luaXQoJmNhc3Rf ZmJbQ0ZCXzQwXSk7Ci0gICAgICAgIGNhc3RfZmJbQ0ZCXzQwXS5mYl9mZWVkWzRdID0gRU5DVFlQ RV9DQVNUNV80MF9DRkI2NDsKLX0KLQotdm9pZAotY2FzdGV4cF9vZmI2NF9pbml0KHNlcnZlcikK LSAgICAgICAgaW50IHNlcnZlcjsKLXsKLSAgICAgICAgY2FzdF9mYjY0X2luaXQoJmNhc3RfZmJb T0ZCXzQwXSk7Ci0gICAgICAgIGNhc3RfZmJbT0ZCXzQwXS5mYl9mZWVkWzRdID0gRU5DVFlQRV9D QVNUNV80MF9PRkI2NDsKLX0KLQotc3RhdGljIHZvaWQKLWNhc3RfZmI2NF9pbml0KGZicCkKLSAg ICByZWdpc3RlciBzdHJ1Y3QgY2FzdF9mYiAqZmJwOwotewotICAgIG1lbXNldCgodm9pZCAqKWZi cCwgMCwgc2l6ZW9mKCpmYnApKTsKLSAgICBmYnAtPmtleV9pc3NldCA9IDA7Ci0gICAgZmJwLT5z dGF0ZVswXSA9IGZicC0+c3RhdGVbMV0gPSBjRkFJTEVEOwotICAgIGZicC0+ZmJfZmVlZFswXSA9 IElBQzsKLSAgICBmYnAtPmZiX2ZlZWRbMV0gPSBTQjsKLSAgICBmYnAtPmZiX2ZlZWRbMl0gPSBU RUxPUFRfRU5DUllQVElPTjsKLSAgICBmYnAtPmZiX2ZlZWRbM10gPSBFTkNSWVBUX0lTOwotfQot Ci0vKgotICogUmV0dXJuczoKLSAqICAgICAgLTE6IHNvbWUgZXJyb3IuICBOZWdvdGlhdGlvbiBp cyBkb25lLCBlbmNyeXB0aW9uIG5vdCByZWFkeS4KLSAqICAgICAgIDA6IFN1Y2Nlc3NmdWwsIGlu aXRpYWwgbmVnb3RpYXRpb24gYWxsIGRvbmUuCi0gKiAgICAgICAxOiBzdWNjZXNzZnVsLCBuZWdv dGlhdGlvbiBub3QgZG9uZSB5ZXQuCi0gKiAgICAgICAyOiBOb3QgeWV0LiAgT3RoZXIgdGhpbmdz IChsaWtlIGdldHRpbmcgdGhlIGtleSBmcm9tCi0gKiAgICAgICAgICBLZXJiZXJvcykgaGF2ZSB0 byBoYXBwZW4gYmVmb3JlIHdlIGNhbiBjb250aW51ZS4KLSAqLwotI2lmbmRlZiBDQVNUX0VYUE9S VF9FTkNSWVBUSU9OCi1pbnQKLWNhc3RfY2ZiNjRfc3RhcnQoZGlyLCBzZXJ2ZXIpCi0gICAgaW50 IGRpcjsKLSAgICBpbnQgc2VydmVyOwotewotICAgIHJldHVybihjYXN0X2ZiNjRfc3RhcnQoJmNh c3RfZmJbQ0ZCXzEyOF0sIGRpciwgc2VydmVyKSk7Ci19Ci0KLWludAotY2FzdF9vZmI2NF9zdGFy dChkaXIsIHNlcnZlcikKLSAgICBpbnQgZGlyOwotICAgIGludCBzZXJ2ZXI7Ci17Ci0gICAgcmV0 dXJuKGNhc3RfZmI2NF9zdGFydCgmY2FzdF9mYltPRkJfMTI4XSwgZGlyLCBzZXJ2ZXIpKTsKLX0K LSNlbmRpZgotCi1pbnQKLWNhc3RleHBfY2ZiNjRfc3RhcnQoZGlyLCBzZXJ2ZXIpCi0gICAgaW50 IGRpcjsKLSAgICBpbnQgc2VydmVyOwotewotICAgIHJldHVybihjYXN0X2ZiNjRfc3RhcnQoJmNh c3RfZmJbQ0ZCXzQwXSwgZGlyLCBzZXJ2ZXIpKTsKLX0KLQotaW50Ci1jYXN0ZXhwX29mYjY0X3N0 YXJ0KGRpciwgc2VydmVyKQotICAgIGludCBkaXI7Ci0gICAgaW50IHNlcnZlcjsKLXsKLSAgICBy ZXR1cm4oY2FzdF9mYjY0X3N0YXJ0KCZjYXN0X2ZiW09GQl80MF0sIGRpciwgc2VydmVyKSk7Ci19 Ci0KLXN0YXRpYyBpbnQKLWNhc3RfZmI2NF9zdGFydChmYnAsIGRpciwgc2VydmVyKQotICAgIHN0 cnVjdCBjYXN0X2ZiICpmYnA7Ci0gICAgaW50IGRpcjsKLSAgICBpbnQgc2VydmVyOwotewotICAg IEJsb2NrIGI7Ci0gICAgaW50IHg7Ci0gICAgdW5zaWduZWQgY2hhciAqcDsKLSAgICByZWdpc3Rl ciBpbnQgc3RhdGU7Ci0KLSAgICBzd2l0Y2ggKGRpcikgewotICAgIGNhc2UgRElSX0RFQ1JZUFQ6 Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgaXMgc2ltcGx5IGEgcmVxdWVzdCB0byBoYXZl IHRoZSBvdGhlciBzaWRlCi0gICAgICAgICAqIHN0YXJ0IG91dHB1dCAob3VyIGlucHV0KS4gIEhl IHdpbGwgbmVnb3RpYXRlIGFuCi0gICAgICAgICAqIElWIHNvIHdlIG5lZWQgbm90IGxvb2sgZm9y IGl0LgotICAgICAgICAgKi8KLSAgICAgICAgc3RhdGUgPSBmYnAtPnN0YXRlW2Rpci0xXTsKLSAg ICAgICAgaWYgKHN0YXRlID09IGNGQUlMRUQpCi0gICAgICAgICAgICBzdGF0ZSA9IElOX1BST0dS RVNTOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRElSX0VOQ1JZUFQ6Ci0gICAgICAgIHN0 YXRlID0gZmJwLT5zdGF0ZVtkaXItMV07Ci0gICAgICAgIGlmIChzdGF0ZSA9PSBjRkFJTEVEKQot ICAgICAgICAgICAgc3RhdGUgPSBJTl9QUk9HUkVTUzsKLSAgICAgICAgZWxzZSBpZiAoKHN0YXRl ICYgTk9fU0VORF9JVikgPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmICgh ZmJwLT5rZXlfaXNzZXQpIHsKLSAgICAgICAgICAgIGZicC0+bmVlZF9zdGFydCA9IDE7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZSAmPSB+Tk9fU0VORF9JVjsK LSAgICAgICAgc3RhdGUgfD0gTk9fUkVDVl9JVjsKLSNpZmRlZiBERUJVRwotICAgICAgICBpZiAo ZW5jcnlwdF9kZWJ1Z19tb2RlKQotICAgICAgICAgICAgcHJpbnRmKCJDcmVhdGluZyBuZXcgZmVl ZFxyXG4iKTsKLSNlbmRpZgotICAgICAgICAvKgotICAgICAgICAgKiBDcmVhdGUgYSByYW5kb20g ZmVlZCBhbmQgc2VuZCBpdCBvdmVyLgotICAgICAgICAgKi8KLSAgICAgICAgY2tfY2FzdF9lY2Jf ZW5jcnlwdChmYnAtPnRlbXBfZmVlZCwgZmJwLT50ZW1wX2ZlZWQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICZmYnAtPnN0cmVhbXNbZGlyLTFdLnN0cl9zY2hlZCwgMCk7Ci0KLSAgICAgICAg cCA9IGZicC0+ZmJfZmVlZCArIDM7Ci0gICAgICAgICpwKysgPSBFTkNSWVBUX0lTOwotICAgICAg ICBwKys7Ci0gICAgICAgICpwKysgPSBGQjY0X0lWOwotICAgICAgICBmb3IgKHggPSAwOyB4IDwg c2l6ZW9mKEJsb2NrKTsgKyt4KSB7Ci0gICAgICAgICAgICBpZiAoKCpwKysgPSBmYnAtPnRlbXBf ZmVlZFt4XSkgPT0gSUFDKQotICAgICAgICAgICAgICAgICpwKysgPSBJQUM7Ci0gICAgICAgIH0K LSAgICAgICAgKnArKyA9IElBQzsKLSAgICAgICAgKnArKyA9IFNFOwotCi0gICAgICAgIHR0b2wo ZmJwLT5mYl9mZWVkLCBwIC0gZmJwLT5mYl9mZWVkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm YXVsdDoKLSAgICAgICAgcmV0dXJuKGNGQUlMRUQpOwotICAgIH0KLSAgICByZXR1cm4oZmJwLT5z dGF0ZVtkaXItMV0gPSBzdGF0ZSk7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zOgotICogICAgICAtMTog c29tZSBlcnJvci4gIE5lZ290aWF0aW9uIGlzIGRvbmUsIGVuY3J5cHRpb24gbm90IHJlYWR5Lgot ICogICAgICAgMDogU3VjY2Vzc2Z1bCwgaW5pdGlhbCBuZWdvdGlhdGlvbiBhbGwgZG9uZS4KLSAq ICAgICAgIDE6IHN1Y2Nlc3NmdWwsIG5lZ290aWF0aW9uIG5vdCBkb25lIHlldC4KLSAqLwotI2lm bmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCi1pbnQKLWNhc3RfY2ZiNjRfaXMoZGF0YSwgY250 KQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgaW50IGNudDsKLXsKLSAgICByZXR1cm4o Y2FzdF9mYjY0X2lzKGRhdGEsIGNudCwgJmNhc3RfZmJbQ0ZCXzEyOF0pKTsKLX0KLQotaW50Ci1j YXN0X29mYjY0X2lzKGRhdGEsIGNudCkKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGlu dCBjbnQ7Ci17Ci0gICAgcmV0dXJuKGNhc3RfZmI2NF9pcyhkYXRhLCBjbnQsICZjYXN0X2ZiW09G Ql8xMjhdKSk7Ci19Ci0jZW5kaWYKLQotaW50Ci1jYXN0ZXhwX2NmYjY0X2lzKGRhdGEsIGNudCkK LSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGludCBjbnQ7Ci17Ci0gICAgcmV0dXJuKGNh c3RfZmI2NF9pcyhkYXRhLCBjbnQsICZjYXN0X2ZiW0NGQl80MF0pKTsKLX0KLQotaW50Ci1jYXN0 ZXhwX29mYjY0X2lzKGRhdGEsIGNudCkKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGlu dCBjbnQ7Ci17Ci0gICAgcmV0dXJuKGNhc3RfZmI2NF9pcyhkYXRhLCBjbnQsICZjYXN0X2ZiW09G Ql80MF0pKTsKLX0KLQotc3RhdGljIGludAotY2FzdF9mYjY0X2lzKGRhdGEsIGNudCwgZmJwKQot ICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgaW50IGNudDsKLSAgICBzdHJ1Y3QgY2FzdF9m YiAqZmJwOwotewotICAgIGludCB4OwotICAgIHVuc2lnbmVkIGNoYXIgKnA7Ci0gICAgQmxvY2sg YjsKLSAgICByZWdpc3RlciBpbnQgc3RhdGUgPSBmYnAtPnN0YXRlW0RJUl9ERUNSWVBULTFdOwot Ci0gICAgaWYgKGNudC0tIDwgMSkKLSAgICAgICAgZ290byBmYWlsdXJlOwotCi0jaWZkZWYgQ0tf U1NMCi0gICAgaWYgKCFURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2Zv bGxvd3MpCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgc3dpdGNoICgqZGF0YSsrKSB7Ci0gICAg Y2FzZSBGQjY0X0lWOgotICAgICAgICBpZiAoY250ICE9IHNpemVvZihCbG9jaykpIHsKLSNpZmRl ZiBERUJVRwotICAgICAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkKLSAgICAgICAgICAg ICAgICBwcmludGYoIkZCNjQ6IGluaXRpYWwgdmVjdG9yIGZhaWxlZCBvbiBzaXplXHJcbiIpOwot I2VuZGlmCi0gICAgICAgICAgICBzdGF0ZSA9IGNGQUlMRUQ7Ci0gICAgICAgICAgICBnb3RvIGZh aWx1cmU7Ci0gICAgICAgIH0KLSNpZmRlZiBERUJVRwotICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1 Z19tb2RlKQotICAgICAgICAgICAgcHJpbnRmKCJGQjY0OiBpbml0aWFsIHZlY3RvciByZWNlaXZl ZFxyXG4iKTsKLQotICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKQotICAgICAgICAgICAg cHJpbnRmKCJJbml0aWFsaXppbmcgRGVjcnlwdCBzdHJlYW1cclxuIik7Ci0jZW5kaWYKLSAgICAg ICAgY2FzdF9mYjY0X3N0cmVhbV9pdigodm9pZCAqKWRhdGEsICZmYnAtPnN0cmVhbXNbRElSX0RF Q1JZUFQtMV0pOwotCi0gICAgICAgIHAgPSBmYnAtPmZiX2ZlZWQgKyAzOwotICAgICAgICAqcCsr ID0gRU5DUllQVF9SRVBMWTsKLSAgICAgICAgcCsrOwotICAgICAgICAqcCsrID0gRkI2NF9JVl9P SzsKLSAgICAgICAgKnArKyA9IElBQzsKLSAgICAgICAgKnArKyA9IFNFOwotCi0gICAgICAgIHR0 b2woZmJwLT5mYl9mZWVkLCBwIC0gZmJwLT5mYl9mZWVkKTsKLSAgICAgICAgc3RhdGUgPSBJTl9Q Uk9HUkVTUzsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICAvKiB1bmtu b3duIG9wdGlvbiB0eXBlICovCi0gICAgICAgIC8qIEZBTEwgVEhST1VHSCAqLwotICAgICAgZmFp bHVyZToKLSAgICAgICAgLyoKLSAgICAgICAgKiBXZSBmYWlsZWQuICBTZW5kIGFuIEZCNjRfSVZf QkFEIG9wdGlvbgotICAgICAgICAqIHRvIHRoZSBvdGhlciBzaWRlIHNvIGl0IHdpbGwga25vdyB0 aGF0Ci0gICAgICAgICogdGhpbmdzIGZhaWxlZC4KLSAgICAgICAgKi8KLSAgICAgICAgcCA9IGZi cC0+ZmJfZmVlZCArIDM7Ci0gICAgICAgICpwKysgPSBFTkNSWVBUX1JFUExZOwotICAgICAgICBw Kys7Ci0gICAgICAgICpwKysgPSBGQjY0X0lWX0JBRDsKLSAgICAgICAgKnArKyA9IElBQzsKLSAg ICAgICAgKnArKyA9IFNFOwotCi0gICAgICAgIHR0b2woZmJwLT5mYl9mZWVkLCBwIC0gZmJwLT5m Yl9mZWVkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybihmYnAtPnN0YXRlW0RJ Ul9ERUNSWVBULTFdID0gc3RhdGUpOwotfQotCi0vKgotICogUmV0dXJuczoKLSAqICAgICAgLTE6 IHNvbWUgZXJyb3IuICBOZWdvdGlhdGlvbiBpcyBkb25lLCBlbmNyeXB0aW9uIG5vdCByZWFkeS4K LSAqICAgICAgIDA6IFN1Y2Nlc3NmdWwsIGluaXRpYWwgbmVnb3RpYXRpb24gYWxsIGRvbmUuCi0g KiAgICAgICAxOiBzdWNjZXNzZnVsLCBuZWdvdGlhdGlvbiBub3QgZG9uZSB5ZXQuCi0gKi8KLSNp Zm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgotaW50Ci1jYXN0X2NmYjY0X3JlcGx5KGRhdGEs IGNudCkKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGludCBjbnQ7Ci17Ci0gICAgcmV0 dXJuKGNhc3RfZmI2NF9yZXBseShkYXRhLCBjbnQsICZjYXN0X2ZiW0NGQl8xMjhdKSk7Ci19Ci0K LWludAotY2FzdF9vZmI2NF9yZXBseShkYXRhLCBjbnQpCi0gICAgdW5zaWduZWQgY2hhciAqZGF0 YTsKLSAgICBpbnQgY250OwotewotICAgIHJldHVybihjYXN0X2ZiNjRfcmVwbHkoZGF0YSwgY250 LCAmY2FzdF9mYltPRkJfMTI4XSkpOwotfQotI2VuZGlmCi0KLWludAotY2FzdGV4cF9jZmI2NF9y ZXBseShkYXRhLCBjbnQpCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICBpbnQgY250Owot ewotICAgIHJldHVybihjYXN0X2ZiNjRfcmVwbHkoZGF0YSwgY250LCAmY2FzdF9mYltDRkJfNDBd KSk7Ci19Ci0KLWludAotY2FzdGV4cF9vZmI2NF9yZXBseShkYXRhLCBjbnQpCi0gICAgdW5zaWdu ZWQgY2hhciAqZGF0YTsKLSAgICBpbnQgY250OwotewotICAgIHJldHVybihjYXN0X2ZiNjRfcmVw bHkoZGF0YSwgY250LCAmY2FzdF9mYltPRkJfNDBdKSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWNhc3Rf ZmI2NF9yZXBseShkYXRhLCBjbnQsIGZicCkKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAg IGludCBjbnQ7Ci0gICAgc3RydWN0IGNhc3RfZmIgKmZicDsKLXsKLSAgICBpbnQgeDsKLSAgICB1 bnNpZ25lZCBjaGFyICpwOwotICAgIEJsb2NrIGI7Ci0gICAgcmVnaXN0ZXIgaW50IHN0YXRlID0g ZmJwLT5zdGF0ZVtESVJfRU5DUllQVC0xXTsKLQotICAgIGlmIChjbnQtLSA8IDEpCi0gICAgICAg IGdvdG8gZmFpbHVyZTsKLQotICAgIHN3aXRjaCAoKmRhdGErKykgewotICAgIGNhc2UgRkI2NF9J Vl9PSzoKLSAgICAgICAgY2FzdF9mYjY0X3N0cmVhbV9pdihmYnAtPnRlbXBfZmVlZCwgJmZicC0+ c3RyZWFtc1tESVJfRU5DUllQVC0xXSk7Ci0gICAgICAgIGlmIChzdGF0ZSA9PSBjRkFJTEVEKQot ICAgICAgICAgICAgc3RhdGUgPSBJTl9QUk9HUkVTUzsKLSAgICAgICAgc3RhdGUgJj0gfk5PX1JF Q1ZfSVY7Ci0gICAgICAgIGVuY3J5cHRfc2VuZF9rZXlpZChESVJfRU5DUllQVCwgKHVuc2lnbmVk IGNoYXIgKikiXDAiLCAxLCAxKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZCNjRfSVZf QkFEOgotICAgICAgICBtZW1zZXQoZmJwLT50ZW1wX2ZlZWQsIDAsIHNpemVvZihCbG9jaykpOwot ICAgICAgICBjYXN0X2ZiNjRfc3RyZWFtX2l2KGZicC0+dGVtcF9mZWVkLCAmZmJwLT5zdHJlYW1z W0RJUl9FTkNSWVBULTFdKTsKLSAgICAgICAgc3RhdGUgPSBjRkFJTEVEOwotICAgICAgICBicmVh azsKLQotICAgIGRlZmF1bHQ6Ci0jaWYgMAotICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2Rl KSB7Ci0gICAgICAgICAgICBwcmludGYoIlVua25vd24gb3B0aW9uIHR5cGU6ICVkXHJcbiIsIGRh dGFbLTFdKTsKLSAgICAgICAgICAgIHByaW50ZChkYXRhLCBjbnQpOwotICAgICAgICAgICAgcHJp bnRmKCJcclxuIik7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICAvKiBGQUxMIFRIUk9VR0gg Ki8KLSAgICAgIGZhaWx1cmU6Ci0gICAgICAgIHN0YXRlID0gY0ZBSUxFRDsKLSAgICAgICAgYnJl YWs7Ci0gICAgfQotICAgIHJldHVybihmYnAtPnN0YXRlW0RJUl9FTkNSWVBULTFdID0gc3RhdGUp OwotfQotCi0jaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KLWludAotY2FzdF9jZmI2NF9z ZXNzaW9uKGtleSwgc2VydmVyKQotICAgIFNlc3Npb25fS2V5ICprZXk7Ci0gICAgaW50IHNlcnZl cjsKLXsKLSAgICByZXR1cm4oY2FzdF9mYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIsICZjYXN0X2Zi W0NGQl8xMjhdLCAxKSk7Ci19Ci0KLWludAotY2FzdF9vZmI2NF9zZXNzaW9uKGtleSwgc2VydmVy KQotICAgIFNlc3Npb25fS2V5ICprZXk7Ci0gICAgaW50IHNlcnZlcjsKLXsKLSAgICByZXR1cm4o Y2FzdF9mYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIsICZjYXN0X2ZiW09GQl8xMjhdLCAxKSk7Ci19 Ci0jZW5kaWYKLQotaW50Ci1jYXN0ZXhwX2NmYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIpCi0gICAg U2Vzc2lvbl9LZXkgKmtleTsKLSAgICBpbnQgc2VydmVyOwotewotICAgIHJldHVybihjYXN0X2Zi NjRfc2Vzc2lvbihrZXksIHNlcnZlciwgJmNhc3RfZmJbQ0ZCXzQwXSwgMCkpOwotfQotCi1pbnQK LWNhc3RleHBfb2ZiNjRfc2Vzc2lvbihrZXksIHNlcnZlcikKLSAgICBTZXNzaW9uX0tleSAqa2V5 OwotICAgIGludCBzZXJ2ZXI7Ci17Ci0gICAgcmV0dXJuKGNhc3RfZmI2NF9zZXNzaW9uKGtleSwg c2VydmVyLCAmY2FzdF9mYltPRkJfNDBdLCAwKSk7Ci19Ci0KLSNkZWZpbmUgQ0FTVDEyOF9LRVlM RU4gIDE2ICAgICAgLyogMTI4IGJpdHMgKi8KLSNkZWZpbmUgQ0FTVDVfNDBfS0VZTEVOICA1ICAg ICAgLyogIDQwIGJpdHMgKi8KLQotc3RhdGljIGludAotY2FzdF9mYjY0X3Nlc3Npb24oa2V5LCBz ZXJ2ZXIsIGZicCwgZnMpCi0gICAgU2Vzc2lvbl9LZXkgKmtleTsKLSAgICBpbnQgc2VydmVyOwot ICAgIHN0cnVjdCBjYXN0X2ZiICpmYnA7Ci0gICAgaW50IGZzOwotewotICAgIGludCBrbGVuOwot ICAgIHVuc2lnbmVkIGNoYXIgKiBrcHRyOwotCi0gICAgaWYoZnMpCi0gICAgICAgIGtsZW4gPSBD QVNUMTI4X0tFWUxFTjsKLSAgICBlbHNlCi0gICAgICAgIGtsZW4gPSBDQVNUNV80MF9LRVlMRU47 Ci0KLSAgICBpZiAoIWtleSB8fCBrZXktPmxlbmd0aCA8IGtsZW4pIHsKLSAgICAgICAgQ0hBUiBi dWZbODBdOwotICAgICAgICBzcHJpbnRmKChjaGFyICopYnVmLCJDYW4ndCBzZXQgQ0FTVCBzZXNz aW9uIGtleSAoJWQgPCAlZCkiLAotICAgICAgICAgICAgICAgIGtleSA/IGtleS0+bGVuZ3RoIDog MCwga2xlbik7ICAgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8KLSNpZmRlZiBERUJVRwotICAg ICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKQotICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4i LGJ1Zik7Ci0jZW5kaWYKLSAgICAgICAgZGVidWcoRjExMCwiY2FzdF9mYjY0X3Nlc3Npb24iLGJ1 ZiwwKTsKLSAgICAgICAgcmV0dXJuKGNGQUlMRUQpOwotICAgIH0KLSAgICBpZihrZXktPmxlbmd0 aCA8IDIgKiBrbGVuKQotICAgICAgICBrcHRyID0ga2V5LT5kYXRhOwotICAgIGVsc2UKLSAgICAg ICAga3B0ciA9IGtleS0+ZGF0YSArIGtsZW47Ci0KLSAgICBpZihzZXJ2ZXIpIHsKLSAgICAgICAg Y2FzdF9mYjY0X3N0cmVhbV9rZXkoa3B0ciwgJmZicC0+c3RyZWFtc1tESVJfRU5DUllQVC0xXSwg ZnMpOwotICAgICAgICBjYXN0X2ZiNjRfc3RyZWFtX2tleShrZXktPmRhdGEsICZmYnAtPnN0cmVh bXNbRElSX0RFQ1JZUFQtMV0sIGZzKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNhc3Rf ZmI2NF9zdHJlYW1fa2V5KGtwdHIsICZmYnAtPnN0cmVhbXNbRElSX0RFQ1JZUFQtMV0sIGZzKTsK LSAgICAgICAgY2FzdF9mYjY0X3N0cmVhbV9rZXkoa2V5LT5kYXRhLCAmZmJwLT5zdHJlYW1zW0RJ Ul9FTkNSWVBULTFdLCBmcyk7Ci0gICAgfQotCi0gICAgLyogU3R1ZmYgbGVmdG92ZXJzIGludG8g dGhlIGZlZWQgKi8KLSAgICBpZihrZXktPmxlbmd0aCA+PSAyICoga2xlbiArIHNpemVvZihCbG9j aykpCi0gICAgICAgIG1lbWNweShmYnAtPnRlbXBfZmVlZCwga2V5LT5kYXRhICsgMiAqIGtsZW4s IHNpemVvZihCbG9jaykpOwotICAgIGVsc2UgewotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgLyog VGhpcyBpcyBhIGJldHRlciB3YXkgb2YgZXJhc2luZyB0aGUgcGFzc3dvcmQgKi8KLSAgICAgICAg LyogYnV0IHdlIGRvIG5vdCB3YW50IHRvIGxpbmsgaW4gbGlic3JwICAgICAgICAgKi8KLSAgICAg ICAgdF9yYW5kb20oZmJwLT50ZW1wX2ZlZWQsIHNpemVvZihCbG9jaykpOwotI2Vsc2UKLSAgICAg ICAgbWVtc2V0KGZicC0+dGVtcF9mZWVkLCAwLCBzaXplb2YoQmxvY2spKTsKLSNlbmRpZgotICAg IH0KLQotICAgIGZicC0+a2V5X2lzc2V0ID0gMTsKLSAgICAvKgotICAgICogTm93IGxvb2sgdG8g c2VlIGlmIGNhc3RfZmI2NF9zdGFydCgpIHdhcyB3YXMgd2FpdGluZyBmb3IKLSAgICAqIHRoZSBr ZXkgdG8gc2hvdyB1cC4gIElmIHNvLCBnbyBhaGVhZCBhbiBjYWxsIGl0IG5vdwotICAgICogdGhh dCB3ZSBoYXZlIHRoZSBrZXkuCi0gICAgKi8KLSAgICBpZiAoZmJwLT5uZWVkX3N0YXJ0KSB7Ci0g ICAgICAgIGZicC0+bmVlZF9zdGFydCA9IDA7Ci0gICAgICAgIGNhc3RfZmI2NF9zdGFydChmYnAs IERJUl9FTkNSWVBULCBzZXJ2ZXIpOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qCi0g KiBXZSBvbmx5IGFjY2VwdCBhIGtleWlkIG9mIDAuICBJZiB3ZSBnZXQgYSBrZXlpZCBvZgotICog MCwgdGhlbiBtYXJrIHRoZSBzdGF0ZSBhcyBTVUNDRVNTLgotICovCi0jaWZuZGVmIENBU1RfRVhQ T1JUX0VOQ1JZUFRJT04KLWludAotY2FzdF9jZmI2NF9rZXlpZChkaXIsIGtwLCBsZW5wKQotICAg IGludCBkaXIsICpsZW5wOwotICAgIHVuc2lnbmVkIGNoYXIgKmtwOwotewotICAgIHJldHVybihj YXN0X2ZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCwgJmNhc3RfZmJbQ0ZCXzEyOF0pKTsKLX0KLQot aW50Ci1jYXN0X29mYjY0X2tleWlkKGRpciwga3AsIGxlbnApCi0gICAgaW50IGRpciwgKmxlbnA7 Ci0gICAgdW5zaWduZWQgY2hhciAqa3A7Ci17Ci0gICAgcmV0dXJuKGNhc3RfZmI2NF9rZXlpZChk aXIsIGtwLCBsZW5wLCAmY2FzdF9mYltPRkJfMTI4XSkpOwotfQotI2VuZGlmCi0KLWludAotY2Fz dGV4cF9jZmI2NF9rZXlpZChkaXIsIGtwLCBsZW5wKQotICAgIGludCBkaXIsICpsZW5wOwotICAg IHVuc2lnbmVkIGNoYXIgKmtwOwotewotICAgIHJldHVybihjYXN0X2ZiNjRfa2V5aWQoZGlyLCBr cCwgbGVucCwgJmNhc3RfZmJbQ0ZCXzQwXSkpOwotfQotCi1pbnQKLWNhc3RleHBfb2ZiNjRfa2V5 aWQoZGlyLCBrcCwgbGVucCkKLSAgICBpbnQgZGlyLCAqbGVucDsKLSAgICB1bnNpZ25lZCBjaGFy ICprcDsKLXsKLSAgICByZXR1cm4oY2FzdF9mYjY0X2tleWlkKGRpciwga3AsIGxlbnAsICZjYXN0 X2ZiW09GQl80MF0pKTsKLX0KLQotc3RhdGljIGludAotY2FzdF9mYjY0X2tleWlkKGRpciwga3As IGxlbnAsIGZicCkKLSAgICBpbnQgZGlyLCAqbGVucDsKLSAgICB1bnNpZ25lZCBjaGFyICprcDsK LSAgICBzdHJ1Y3QgY2FzdF9mYiAqZmJwOwotewotICAgIHJlZ2lzdGVyIGludCBzdGF0ZSA9IGZi cC0+c3RhdGVbZGlyLTFdOwotCi0gICAgaWYgKCpsZW5wICE9IDEgfHwgKCprcCAhPSAnXDAnKSkg ewotICAgICAgICAqbGVucCA9IDA7Ci0gICAgICAgIHJldHVybihzdGF0ZSk7Ci0gICAgfQotCi0g ICAgaWYgKHN0YXRlID09IGNGQUlMRUQpCi0gICAgICAgIHN0YXRlID0gSU5fUFJPR1JFU1M7Ci0K LSAgICBzdGF0ZSAmPSB+Tk9fS0VZSUQ7Ci0KLSAgICByZXR1cm4oZmJwLT5zdGF0ZVtkaXItMV0g PSBzdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jYXN0X2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250 LCBidWYsIGJ1ZmxlbiwgdHlwZSkKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAqYnVmLCAqdHlw ZTsKLSAgICBpbnQgY250LCBidWZsZW47Ci17Ci0gICAgY2hhciBsYnVmWzY0XTsKLSAgICByZWdp c3RlciBpbnQgaTsKLSAgICBjaGFyICpjcDsKLQotICAgIGJ1ZltidWZsZW4tMV0gPSAnXDAnOyAg ICAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSBpdCdzIE5VTEwgdGVybWluYXRlZCAqLwotICAgIGJ1 ZmxlbiAtPSAxOwotCi0gICAgc3dpdGNoKGRhdGFbMl0pIHsKLSAgICBjYXNlIEZCNjRfSVY6Ci0g ICAgICAgIHNwcmludGYobGJ1ZiwgIiVzX0lWIiwgdHlwZSk7Ci0gICAgICAgIGNwID0gbGJ1ZjsK LSAgICAgICAgZ290byBjb21tb247Ci0KLSAgICBjYXNlIEZCNjRfSVZfT0s6Ci0gICAgICAgIHNw cmludGYobGJ1ZiwgIiVzX0lWX09LIiwgdHlwZSk7Ci0gICAgICAgIGNwID0gbGJ1ZjsKLSAgICAg ICAgZ290byBjb21tb247Ci0KLSAgICBjYXNlIEZCNjRfSVZfQkFEOgotICAgICAgICBzcHJpbnRm KGxidWYsICIlc19JVl9CQUQiLCB0eXBlKTsKLSAgICAgICAgY3AgPSBsYnVmOwotICAgICAgICBn b3RvIGNvbW1vbjsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHNwcmludGYobGJ1ZiwgIiAlZCAo dW5rbm93bikiLCBkYXRhWzJdKTsKLSAgICAgICAgY3AgPSBsYnVmOwotICAgICAgY29tbW9uOgot ICAgICAgICBmb3IgKDsgKGJ1ZmxlbiA+IDApICYmICgqYnVmID0gKmNwKyspOyBidWYrKykKLSAg ICAgICAgICAgIGJ1Zmxlbi0tOwotICAgICAgICBmb3IgKGkgPSAzOyBpIDwgY250OyBpKyspIHsK LSAgICAgICAgICAgIHNwcmludGYobGJ1ZiwgIiAlZCIsIGRhdGFbaV0pOwotICAgICAgICAgICAg Zm9yIChjcCA9IGxidWY7IChidWZsZW4gPiAwKSAmJiAoKmJ1ZiA9ICpjcCsrKTsgYnVmKyspCi0g ICAgICAgICAgICAgICAgYnVmbGVuLS07Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg fQotfQotCi12b2lkCi1jYXN0X2NmYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBidWZsZW4p Ci0gICAgdW5zaWduZWQgY2hhciAqZGF0YSwgKmJ1ZjsKLSAgICBpbnQgY250LCBidWZsZW47Ci17 Ci0gICAgY2FzdF9mYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBidWZsZW4sICJDRkI2NCIp OwotfQotCi12b2lkCi1jYXN0X29mYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBidWZsZW4p Ci0gICAgdW5zaWduZWQgY2hhciAqZGF0YSwgKmJ1ZjsKLSAgICBpbnQgY250LCBidWZsZW47Ci17 Ci0gICAgY2FzdF9mYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBidWZsZW4sICJPRkI2NCIp OwotfQotCi1zdGF0aWMgdm9pZAotY2FzdF9mYjY0X3N0cmVhbV9pdihzZWVkLCBzdHApCi0gICAg QmxvY2sgc2VlZDsKLSAgICByZWdpc3RlciBzdHJ1Y3QgY2FzdF9zdGluZm8gKnN0cDsKLXsKLSAg ICBtZW1jcHkoKHZvaWQgKilzdHAtPnN0cl9pdiwgKHZvaWQgKilzZWVkLCBzaXplb2YoQmxvY2sp KTsKLSAgICBtZW1jcHkoKHZvaWQgKilzdHAtPnN0cl9vdXRwdXQsICh2b2lkICopc2VlZCwgc2l6 ZW9mKEJsb2NrKSk7Ci0KLSAgICBzdHAtPnN0cl9pbmRleCA9IHNpemVvZihCbG9jayk7Ci19Ci0K LXN0YXRpYyB2b2lkCi1jYXN0X2ZiNjRfc3RyZWFtX2tleShrZXksIHN0cCwgZnMpCi0gICAgdW5z aWduZWQgY2hhciAqIGtleTsKLSAgICByZWdpc3RlciBzdHJ1Y3QgY2FzdF9zdGluZm8gKnN0cDsK LSAgICBpbnQgZnM7Ci17Ci0jaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KLSAgICBpZihm cykKLSAgICAgICAgY2tfY2FzdDEyOF9rZXlfc2NoZWQoJnN0cC0+c3RyX3NjaGVkLCBrZXkpOwot ICAgIGVsc2UKLSNlbmRpZgotICAgICAgICBja19jYXN0NV80MF9rZXlfc2NoZWQoJnN0cC0+c3Ry X3NjaGVkLCBrZXkpOwotCi0gICAgbWVtY3B5KCh2b2lkICopc3RwLT5zdHJfb3V0cHV0LCAodm9p ZCAqKXN0cC0+c3RyX2l2LCBzaXplb2YoQmxvY2spKTsKLQotICAgIHN0cC0+c3RyX2luZGV4ID0g c2l6ZW9mKEJsb2NrKTsKLX0KLQotLyoKLSAqIENBU1QgNjQgYml0IENpcGhlciBGZWVkYmFjawot ICoKLSAqICAgICBrZXkgLS0tPistLS0tLS0rCi0gKiAgICAgICAgICArLT58IENBU1QgfC0tKwot ICogICAgICAgICAgfCAgKy0tLS0tLSsgIHwKLSAqICAgICAgICAgIHwgICAgICAgICAgICB2Ci0g KiAgSU5QVVQgLS0oLS0tLS0tLS0tLT4oKykrLS0tPiBEQVRBCi0gKiAgICAgICAgICB8ICAgICAg ICAgICAgICB8Ci0gKiAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rCi0gKgotICoKLSAqIEdpdmVu OgotICogICAgICBpVjogSW5pdGlhbCB2ZWN0b3IsIDY0IGJpdHMgKDggYnl0ZXMpIGxvbmcuCi0g KiAgICAgIERuOiB0aGUgbnRoIGNodW5rIG9mIDY0IGJpdHMgKDggYnl0ZXMpIG9mIGRhdGEgdG8g ZW5jcnlwdCAoZGVjcnlwdCkuCi0gKiAgICAgIE9uOiB0aGUgbnRoIGNodW5rIG9mIDY0IGJpdHMg KDggYnl0ZXMpIG9mIGVuY3J5cHRlZCAoZGVjcnlwdGVkKSBvdXRwdXQuCi0gKgotICogICAgICBW MCA9IENBU1QoaVYsIGtleSkKLSAqICAgICAgT24gPSBEbiBeIFZuCi0gKiAgICAgIFYobisxKSA9 IENBU1QoT24sIGtleSkKLSAqLwotI2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCi12b2lk Ci1jYXN0X2NmYjY0X2VuY3J5cHQocywgYykKLSAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hh ciAqczsKLSAgICAgICAgaW50IGM7Ci17Ci0gICAgX2Nhc3RfY2ZiNjRfZW5jcnlwdChzLCBjLCAm Y2FzdF9mYltDRkJfMTI4XS5zdHJlYW1zW0RJUl9FTkNSWVBULTFdKTsKLX0KLSNlbmRpZgotCi12 b2lkCi1jYXN0ZXhwX2NmYjY0X2VuY3J5cHQocywgYykKLSAgICByZWdpc3RlciB1bnNpZ25lZCBj aGFyICpzOwotICAgIGludCBjOwotewotICAgIF9jYXN0X2NmYjY0X2VuY3J5cHQocywgYywgJmNh c3RfZmJbQ0ZCXzQwXS5zdHJlYW1zW0RJUl9FTkNSWVBULTFdKTsKLX0KLQotc3RhdGljIHZvaWQK LV9jYXN0X2NmYjY0X2VuY3J5cHQocywgYywgc3RwKQotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNo YXIgKnM7Ci0gICAgaW50IGM7Ci0gICAgcmVnaXN0ZXIgc3RydWN0IGNhc3Rfc3RpbmZvICpzdHA7 Ci17Ci0gICAgcmVnaXN0ZXIgaW50IGluZGV4OwotCi0gICAgaW5kZXggPSBzdHAtPnN0cl9pbmRl eDsKLSAgICB3aGlsZSAoYy0tID4gMCkgewotICAgICAgICBpZiAoaW5kZXggPT0gc2l6ZW9mKEJs b2NrKSkgewotICAgICAgICAgICAgQmxvY2sgYjsKLSAgICAgICAgICAgIGNrX2Nhc3RfZWNiX2Vu Y3J5cHQoYiwgc3RwLT5zdHJfb3V0cHV0LCAmc3RwLT5zdHJfc2NoZWQsIDApOwotICAgICAgICAg ICAgbWVtY3B5KCh2b2lkICopc3RwLT5zdHJfZmVlZCwgKHZvaWQgKiliLCBzaXplb2YoQmxvY2sp KTsKLSAgICAgICAgICAgIGluZGV4ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE9uIGVu Y3J5cHRpb24sIHdlIHN0b3JlIChmZWVkIF4gZGF0YSkgd2hpY2ggaXMgY3lwaGVyICovCi0gICAg ICAgICpzID0gc3RwLT5zdHJfb3V0cHV0W2luZGV4XSA9IChzdHAtPnN0cl9mZWVkW2luZGV4XSBe ICpzKTsKLSAgICAgICAgcysrOwotICAgICAgICBpbmRleCsrOwotICAgIH0KLSAgICBzdHAtPnN0 cl9pbmRleCA9IGluZGV4OwotfQotCi0jaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KLWlu dAotY2FzdF9jZmI2NF9kZWNyeXB0KGRhdGEpCi0gICAgaW50IGRhdGE7Ci17Ci0gICAgcmV0dXJu IF9jYXN0X2NmYjY0X2RlY3J5cHQoZGF0YSwgJmNhc3RfZmJbQ0ZCXzEyOF0uc3RyZWFtc1tESVJf REVDUllQVC0xXSk7Ci19Ci0jZW5kaWYKLQotaW50Ci1jYXN0ZXhwX2NmYjY0X2RlY3J5cHQoZGF0 YSkKLSAgICBpbnQgZGF0YTsKLXsKLSAgICByZXR1cm4gX2Nhc3RfY2ZiNjRfZGVjcnlwdChkYXRh LCAmY2FzdF9mYltDRkJfNDBdLnN0cmVhbXNbRElSX0RFQ1JZUFQtMV0pOwotfQotCi1zdGF0aWMg aW50Ci1fY2FzdF9jZmI2NF9kZWNyeXB0KGRhdGEsIHN0cCkKLSAgICBpbnQgZGF0YTsKLSAgICBy ZWdpc3RlciBzdHJ1Y3QgY2FzdF9zdGluZm8gKnN0cDsKLXsKLSAgICBpbnQgaW5kZXg7Ci0KLSAg ICBpZiAoZGF0YSA9PSAtMSkgewotICAgICAgICAvKgotICAgICAgICAqIEJhY2sgdXAgb25lIGJ5 dGUuICBJdCBpcyBhc3N1bWVkIHRoYXQgd2Ugd2lsbAotICAgICAgICAqIG5ldmVyIGJhY2sgdXAg bW9yZSB0aGFuIG9uZSBieXRlLiAgSWYgd2UgZG8sIHRoaXMKLSAgICAgICAgKiBtYXkgb3IgbWF5 IG5vdCB3b3JrLgotICAgICAgICAqLwotICAgICAgICBpZiAoc3RwLT5zdHJfaW5kZXgpCi0gICAg ICAgICAgICAtLXN0cC0+c3RyX2luZGV4OwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotCi0g ICAgaW5kZXggPSBzdHAtPnN0cl9pbmRleCsrOwotICAgIGlmIChpbmRleCA9PSBzaXplb2YoQmxv Y2spKSB7Ci0gICAgICAgIEJsb2NrIGI7Ci0gICAgICAgIGNrX2Nhc3RfZWNiX2VuY3J5cHQoYiwg c3RwLT5zdHJfb3V0cHV0LCAmc3RwLT5zdHJfc2NoZWQsIDApOwotICAgICAgICBtZW1jcHkoKHZv aWQgKilzdHAtPnN0cl9mZWVkLCAodm9pZCAqKWIsIHNpemVvZihCbG9jaykpOwotICAgICAgICBz dHAtPnN0cl9pbmRleCA9IDE7ICAgICAvKiBOZXh0IHRpbWUgd2lsbCBiZSAxICovCi0gICAgICAg IGluZGV4ID0gMDsgICAgICAgICAgICAgIC8qIEJ1dCBub3cgdXNlIDAgKi8KLSAgICB9Ci0KLSAg ICAvKiBPbiBkZWNyeXB0aW9uIHdlIHN0b3JlIChkYXRhKSB3aGljaCBpcyBjeXBoZXIuICovCi0g ICAgc3RwLT5zdHJfb3V0cHV0W2luZGV4XSA9IGRhdGE7Ci0gICAgcmV0dXJuKGRhdGEgXiBzdHAt PnN0cl9mZWVkW2luZGV4XSk7Ci19Ci0KLS8qCi0gKiBDQVNUIDY0IGJpdCBPdXRwdXQgRmVlZGJh Y2sKLSAqCi0gKiBrZXkgLS0tPistLS0tLS0rCi0gKiAgICAgICstPnwgQ0FTVCB8LS0rCi0gKiAg ICAgIHwgICstLS0tLS0rICB8Ci0gKiAgICAgICstLS0tLS0tLS0tLS0rCi0gKiAgICAgICAgICAg ICAgICAgICB2Ci0gKiAgSU5QVVQgLS0tLS0tLS0tPigrKSAtLS0tPiBEQVRBCi0gKgotICogR2l2 ZW46Ci0gKiAgICAgIGlWOiBJbml0aWFsIHZlY3RvciwgNjQgYml0cyAoOCBieXRlcykgbG9uZy4K LSAqICAgICAgRG46IHRoZSBudGggY2h1bmsgb2YgNjQgYml0cyAoOCBieXRlcykgb2YgZGF0YSB0 byBlbmNyeXB0IChkZWNyeXB0KS4KLSAqICAgICAgT246IHRoZSBudGggY2h1bmsgb2YgNjQgYml0 cyAoOCBieXRlcykgb2YgZW5jcnlwdGVkIChkZWNyeXB0ZWQpIG91dHB1dC4KLSAqCi0gKiAgICAg IFYwID0gQ0FTVChpViwga2V5KQotICogICAgICBWKG4rMSkgPSBDQVNUKFZuLCBrZXkpCi0gKiAg ICAgIE9uID0gRG4gXiBWbgotICovCi0jaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KLXZv aWQKLWNhc3Rfb2ZiNjRfZW5jcnlwdChzLCBjKQotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIg KnM7Ci0gICAgaW50IGM7Ci17Ci0gICAgX2Nhc3Rfb2ZiNjRfZW5jcnlwdChzLCBjLCAmY2FzdF9m YltPRkJfMTI4XS5zdHJlYW1zW0RJUl9FTkNSWVBULTFdKTsKLX0KLSNlbmRpZgotCi12b2lkCi1j YXN0ZXhwX29mYjY0X2VuY3J5cHQocywgYykKLSAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpz OwotICAgIGludCBjOwotewotICBfY2FzdF9vZmI2NF9lbmNyeXB0KHMsIGMsICZjYXN0X2ZiW09G Ql80MF0uc3RyZWFtc1tESVJfRU5DUllQVC0xXSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fY2FzdF9v ZmI2NF9lbmNyeXB0KHMsIGMsIHN0cCkKLSAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpzOwot ICAgIGludCBjOwotICAgIHJlZ2lzdGVyIHN0cnVjdCBjYXN0X3N0aW5mbyAqc3RwOwotewotICAg IHJlZ2lzdGVyIGludCBpbmRleDsKLQotICAgIGluZGV4ID0gc3RwLT5zdHJfaW5kZXg7Ci0gICAg d2hpbGUgKGMtLSA+IDApIHsKLSAgICAgICAgaWYgKGluZGV4ID09IHNpemVvZihCbG9jaykpIHsK LSAgICAgICAgICAgIEJsb2NrIGI7Ci0gICAgICAgICAgICBja19jYXN0X2VjYl9lbmNyeXB0KGIs IHN0cC0+c3RyX2ZlZWQsICZzdHAtPnN0cl9zY2hlZCwgMCk7Ci0gICAgICAgICAgICBtZW1jcHko KHZvaWQgKilzdHAtPnN0cl9mZWVkLCAodm9pZCAqKWIsIHNpemVvZihCbG9jaykpOwotICAgICAg ICAgICAgaW5kZXggPSAwOwotICAgICAgICB9Ci0gICAgICAgICpzKysgXj0gc3RwLT5zdHJfZmVl ZFtpbmRleF07Ci0gICAgICAgIGluZGV4Kys7Ci0gICAgfQotICAgIHN0cC0+c3RyX2luZGV4ID0g aW5kZXg7Ci19Ci0KLSNpZm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgotaW50Ci1jYXN0X29m YjY0X2RlY3J5cHQoZGF0YSkKLSAgICBpbnQgZGF0YTsKLXsKLSAgICByZXR1cm4gX2Nhc3Rfb2Zi NjRfZGVjcnlwdChkYXRhLCAmY2FzdF9mYltPRkJfMTI4XS5zdHJlYW1zW0RJUl9ERUNSWVBULTFd KTsKLX0KLSNlbmRpZgotCi1pbnQKLWNhc3RleHBfb2ZiNjRfZGVjcnlwdChkYXRhKQotICAgIGlu dCBkYXRhOwotewotICAgIHJldHVybiBfY2FzdF9vZmI2NF9kZWNyeXB0KGRhdGEsICZjYXN0X2Zi W09GQl80MF0uc3RyZWFtc1tESVJfREVDUllQVC0xXSk7Ci19Ci0KLXN0YXRpYyBpbnQKLV9jYXN0 X29mYjY0X2RlY3J5cHQoZGF0YSwgc3RwKQotICAgIGludCBkYXRhOwotICAgIHJlZ2lzdGVyIHN0 cnVjdCBjYXN0X3N0aW5mbyAqc3RwOwotewotICAgIGludCBpbmRleDsKLQotICAgIGlmIChkYXRh ID09IC0xKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICogQmFjayB1cCBvbmUgYnl0ZS4gIEl0IGlz IGFzc3VtZWQgdGhhdCB3ZSB3aWxsCi0gICAgICAgICogbmV2ZXIgYmFjayB1cCBtb3JlIHRoYW4g b25lIGJ5dGUuICBJZiB3ZSBkbywgdGhpcwotICAgICAgICAqIG1heSBvciBtYXkgbm90IHdvcmsu Ci0gICAgICAgICovCi0gICAgICAgIGlmIChzdHAtPnN0cl9pbmRleCkKLSAgICAgICAgICAgIC0t c3RwLT5zdHJfaW5kZXg7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0KLSAgICBpbmRleCA9 IHN0cC0+c3RyX2luZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IHNpemVvZihCbG9jaykpIHsKLSAg ICAgICAgQmxvY2sgYjsKLSAgICAgICAgY2tfY2FzdF9lY2JfZW5jcnlwdChiLCBzdHAtPnN0cl9m ZWVkLCAmc3RwLT5zdHJfc2NoZWQsIDApOwotICAgICAgICBtZW1jcHkoKHZvaWQgKilzdHAtPnN0 cl9mZWVkLCAodm9pZCAqKWIsIHNpemVvZihCbG9jaykpOwotICAgICAgICBzdHAtPnN0cl9pbmRl eCA9IDE7ICAgICAvKiBOZXh0IHRpbWUgd2lsbCBiZSAxICovCi0gICAgICAgIGluZGV4ID0gMDsg ICAgICAgICAgICAgIC8qIEJ1dCBub3cgdXNlIDAgKi8KLSAgICB9Ci0KLSAgICByZXR1cm4oZGF0 YSBeIHN0cC0+c3RyX2ZlZWRbaW5kZXhdKTsKLX0KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5 NyBTdGFuZm9yZCBVbml2ZXJzaXR5Ci0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1v ZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQKLSAqIGl0cyBkb2N1 bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwg cHJvdmlkZWQKLSAqIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2VzIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotICogYWxsIGNvcGllcyBvZiB0aGUgc29mdHdhcmUg YW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTLUlTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLSAqIEVYUFJFU1Ms IElNUExJRUQgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkK LSAqIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4KLSAqCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBTVEFORk9SRCBCRSBMSUFCTEUg Rk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLAotICogSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIE9GIEFOWSBLSU5ELCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCi0gKiBSRVNV TFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIE9SIE5PVCBB RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgREFNQUdFLCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLS8qCi0gKiBj YXN0LmMKLSAqIEF1dGhvcjogVG9tIFd1Ci0gKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhl IENBU1QtMTI4IGVuY3J5cHRpb24gYWxnb3JpdGhtLCBhcwotICogc3BlY2lmaWVkIGluIFJGQyAy MTQ0LgotICovCi0KLS8qIFRoZSBmaXJzdCBmb3VyIFMtYm94ZXMgYXJlIGZvciBlbmNyeXB0aW9u L2RlY3J5cHRpb24gKi8KLQotc3RhdGljIHVpbnQzMiBTMVtdID0gewotICAweDMwZmI0MGQ0LCAw eDlmYTBmZjBiLCAweDZiZWNjZDJmLCAweDNmMjU4YzdhLCAweDFlMjEzZjJmLCAweDljMDA0ZGQz LAotICAweDYwMDNlNTQwLCAweGNmOWZjOTQ5LCAweGJmZDRhZjI3LCAweDg4YmJiZGI1LCAweGUy MDM0MDkwLCAweDk4ZDA5Njc1LAotICAweDZlNjNhMGUwLCAweDE1YzM2MWQyLCAweGMyZTc2NjFk LCAweDIyZDRmZjhlLCAweDI4NjgzYjZmLCAweGMwN2ZkMDU5LAotICAweGZmMjM3OWM4LCAweDc3 NWY1MGUyLCAweDQzYzM0MGQzLCAweGRmMmY4NjU2LCAweDg4N2NhNDFhLCAweGEyZDJiZDJkLAot ICAweGExYzllMGQ2LCAweDM0NmM0ODE5LCAweDYxYjc2ZDg3LCAweDIyNTQwZjJmLCAweDJhYmUz MmUxLCAweGFhNTQxNjZiLAotICAweDIyNTY4ZTNhLCAweGEyZDM0MWQwLCAweDY2ZGI0MGM4LCAw eGE3ODQzOTJmLCAweDAwNGRmZjJmLCAweDJkYjlkMmRlLAotICAweDk3OTQzZmFjLCAweDRhOTdj MWQ4LCAweDUyNzY0NGI3LCAweGI1ZjQzN2E3LCAweGI4MmNiYWVmLCAweGQ3NTFkMTU5LAotICAw eDZmZjdmMGVkLCAweDVhMDk3YTFmLCAweDgyN2I2OGQwLCAweDkwZWNmNTJlLCAweDIyYjBjMDU0 LCAweGJjOGU1OTM1LAotICAweDRiNmQyZjdmLCAweDUwYmI2NGEyLCAweGQyNjY0OTEwLCAweGJl ZTU4MTJkLCAweGI3MzMyMjkwLCAweGU5M2IxNTlmLAotICAweGI0OGVlNDExLCAweDRiZmYzNDVk LCAweGZkNDVjMjQwLCAweGFkMzE5NzNmLCAweGM0ZjZkMDJlLCAweDU1ZmM4MTY1LAotICAweGQ1 YjFjYWFkLCAweGExYWMyZGFlLCAweGEyZDRiNzZkLCAweGMxOWIwYzUwLCAweDg4MjI0MGYyLCAw eDBjNmU0ZjM4LAotICAweGE0ZTRiZmQ3LCAweDRmNWJhMjcyLCAweDU2NGMxZDJmLCAweGM1OWM1 MzE5LCAweGI5NDllMzU0LCAweGIwNDY2OWZlLAotICAweGIxYjZhYjhhLCAweGM3MTM1OGRkLCAw eDYzODVjNTQ1LCAweDExMGY5MzVkLCAweDU3NTM4YWQ1LCAweDZhMzkwNDkzLAotICAweGU2M2Qz N2UwLCAweDJhNTRmNmIzLCAweDNhNzg3ZDVmLCAweDYyNzZhMGI1LCAweDE5YTZmY2RmLCAweDdh NDIyMDZhLAotICAweDI5ZjlkNGQ1LCAweGY2MWIxODkxLCAweGJiNzIyNzVlLCAweGFhNTA4MTY3 LCAweDM4OTAxMDkxLCAweGM2YjUwNWViLAotICAweDg0YzdjYjhjLCAweDJhZDc1YTBmLCAweDg3 NGExNDI3LCAweGEyZDE5MzZiLCAweDJhZDI4NmFmLCAweGFhNTZkMjkxLAotICAweGQ3ODk0MzYw LCAweDQyNWM3NTBkLCAweDkzYjM5ZTI2LCAweDE4NzE4NGM5LCAweDZjMDBiMzJkLCAweDczZTJi YjE0LAotICAweGEwYmViYzNjLCAweDU0NjIzNzc5LCAweDY0NDU5ZWFiLCAweDNmMzI4YjgyLCAw eDc3MThjZjgyLCAweDU5YTJjZWE2LAotICAweDA0ZWUwMDJlLCAweDg5ZmU3OGU2LCAweDNmYWIw OTUwLCAweDMyNWZmNmMyLCAweDgxMzgzZjA1LCAweDY5NjNjNWM4LAotICAweDc2Y2I1YWQ2LCAw eGQ0OTk3NGM5LCAweGNhMTgwZGNmLCAweDM4MDc4MmQ1LCAweGM3ZmE1Y2Y2LCAweDhhYzMxNTEx LAotICAweDM1ZTc5ZTEzLCAweDQ3ZGE5MWQwLCAweGY0MGY5MDg2LCAweGE3ZTI0MTllLCAweDMx MzY2MjQxLCAweDA1MWVmNDk1LAotICAweGFhNTczYjA0LCAweDRhODA1ZDhkLCAweDU0ODMwMGQw LCAweDAwMzIyYTNjLCAweGJmNjRjZGRmLCAweGJhNTdhNjhlLAotICAweDc1YzYzNzJiLCAweDUw YWZkMzQxLCAweGE3YzEzMjc1LCAweDkxNWEwYmY1LCAweDZiNTRiZmFiLCAweDJiMGIxNDI2LAot ICAweGFiNGNjOWQ3LCAweDQ0OWNjZDgyLCAweGY3ZmJmMjY1LCAweGFiODVjNWYzLCAweDFiNTVk Yjk0LCAweGFhZDRlMzI0LAotICAweGNmYTRiZDNmLCAweDJkZWFhM2UyLCAweDllMjA0ZDAyLCAw eGM4YmQyNWFjLCAweGVhZGY1NWIzLCAweGQ1YmQ5ZTk4LAotICAweGUzMTIzMWIyLCAweDJhZDVh ZDZjLCAweDk1NDMyOWRlLCAweGFkYmU0NTI4LCAweGQ4NzEwZjY5LCAweGFhNTFjOTBmLAotICAw eGFhNzg2YmY2LCAweDIyNTEzZjFlLCAweGFhNTFhNzliLCAweDJhZDM0NGNjLDB4N2I1YTQxZjAs IDB4ZDM3Y2ZiYWQsCi0gIDB4MWIwNjk1MDUsIDB4NDFlY2U0OTEsIDB4YjRjMzMyZTYsIDB4MDMy MjY4ZDQsIDB4Yzk2MDBhY2MsIDB4Y2UzODdlNmQsCi0gIDB4YmY2YmIxNmMsIDB4NmE3MGZiNzgs IDB4MGQwM2Q5YzksIDB4ZDRkZjM5ZGUsIDB4ZTAxMDYzZGEsIDB4NDczNmY0NjQsCi0gIDB4NWFk MzI4ZDgsIDB4YjM0N2NjOTYsIDB4NzViYjBmYzMsIDB4OTg1MTFiZmIsIDB4NGZmYmNjMzUsIDB4 YjU4YmNmNmEsCi0gIDB4ZTExZjBhYmMsIDB4YmZjNWZlNGEsIDB4YTcwYWVjMTAsIDB4YWMzOTU3 MGEsMHgzZjA0NDQyZiwgMHg2MTg4YjE1MywKLSAgMHhlMDM5N2EyZSwgMHg1NzI3Y2I3OSwgMHg5 Y2ViNDE4ZiwgMHgxY2FjZDY4ZCwgMHgyYWQzN2M5NiwgMHgwMTc1Y2I5ZCwKLSAgMHhjNjlkZmYw OSwgMHhjNzViNjVmMCwgMHhkOWRiNDBkOCwgMHhlYzBlNzc3OSwgMHg0NzQ0ZWFkNCwgMHhiMTFj MzI3NCwKLSAgMHhkZDI0Y2I5ZSwgMHg3ZTFjNTRiZCwgMHhmMDExNDRmOSwgMHhkMjI0MGViMSwg MHg5Njc1YjNmZCwgMHhhM2FjMzc1NSwKLSAgMHhkNDdjMjdhZiwgMHg1MWM4NWY0ZCwgMHg1Njkw NzU5NiwgMHhhNWJiMTVlNiwweDU4MDMwNGYwLCAweGNhMDQyY2YxLAotICAweDAxMWEzN2VhLCAw eDhkYmZhYWRiLCAweDM1YmEzZTRhLCAweDM1MjZmZmEwLCAweGMzN2I0ZDA5LCAweGJjMzA2ZWQ5 LAotICAweDk4YTUyNjY2LCAweDU2NDhmNzI1LCAweGZmNWU1NjlkLCAweDBjZWQ2M2QwLCAweDdj NjNiMmNmLCAweDcwMGI0NWUxLAotICAweGQ1ZWE1MGYxLCAweDg1YTkyODcyLCAweGFmMWZiZGE3 LCAweGQ0MjM0ODcwLCAweGE3ODcwYmYzLCAweDJkM2I0ZDc5LAotICAweDQyZTA0MTk4LCAweDBj ZDBlZGU3LCAweDI2NDcwZGI4LCAweGY4ODE4MTRjLDB4NDc0ZDZhZDcsIDB4N2MwYzVlNWMsCi0g IDB4ZDEyMzE5NTksIDB4MzgxYjcyOTgsIDB4ZjVkMmY0ZGIsIDB4YWI4Mzg2NTMsIDB4NmUyZjFl MjMsIDB4ODM3MTljOWUsCi0gIDB4YmQ5MWUwNDYsIDB4OWE1NjQ1NmUsIDB4ZGMzOTIwMGMsIDB4 MjBjOGM1NzEsIDB4OTYyYmRhMWMsIDB4ZTFlNjk2ZmYsCi0gIDB4YjE0MWFiMDgsIDB4N2NjYTg5 YjksIDB4MWE2OWU3ODMsIDB4MDJjYzQ4NDMsIDB4YTJmN2M1NzksIDB4NDI5ZWY0N2QsCi0gIDB4 NDI3YjE2OWMsIDB4NWFjOWYwNDksIDB4ZGQ4ZjBmMDAsIDB4NWM4MTY1YmYKLX07Ci0KLXN0YXRp YyB1aW50MzIgUzJbXSA9IHsKLSAgMHgxZjIwMTA5NCwgMHhlZjBiYTc1YiwgMHg2OWUzY2Y3ZSwg MHgzOTNmNDM4MCwgMHhmZTYxY2Y3YSwgMHhlZWM1MjA3YSwKLSAgMHg1NTg4OWM5NCwgMHg3MmZj MDY1MSwgMHhhZGE3ZWY3OSwgMHg0ZTFkNzIzNSwgMHhkNTVhNjNjZSwgMHhkZTA0MzZiYSwKLSAg MHg5OWM0MzBlZiwgMHg1ZjBjMDc5NCwgMHgxOGRjZGI3ZCwgMHhhMWQ2ZWZmMywgMHhhMGI1MmY3 YiwgMHg1OWU4MzYwNSwKLSAgMHhlZTE1YjA5NCwgMHhlOWZmZDkwOSwgMHhkYzQ0MDA4NiwgMHhl Zjk0NDQ1OSwgMHhiYTgzY2NiMywgMHhlMGMzY2RmYiwKLSAgMHhkMWRhNDE4MSwgMHgzYjA5MmFi MSwgMHhmOTk3ZjFjMSwgMHhhNWU2Y2Y3YiwgMHgwMTQyMGRkYiwgMHhlNGU3ZWY1YiwKLSAgMHgy NWExZmY0MSwgMHhlMTgwZjgwNiwgMHgxZmM0MTA4MCwgMHgxNzliZWU3YSwgMHhkMzdhYzZhOSwg MHhmZTU4MzBhNCwKLSAgMHg5OGRlOGI3ZiwgMHg3N2U4M2Y0ZSwgMHg3OTkyOTI2OSwgMHgyNGZh OWY3YiwgMHhlMTEzYzg1YiwgMHhhY2M0MDA4MywKLSAgMHhkNzUwMzUyNSwgMHhmN2VhNjE1Ziwg MHg2MjE0MzE1NCwgMHgwZDU1NGI2MywgMHg1ZDY4MTEyMSwgMHhjODY2YzM1OSwKLSAgMHgzZDYz Y2Y3MywgMHhjZWUyMzRjMCwgMHhkNGQ4N2U4NywgMHg1YzY3MmIyMSwgMHgwNzFmNjE4MSwgMHgz OWY3NjI3ZiwKLSAgMHgzNjFlMzA4NCwgMHhlNGViNTczYiwgMHg2MDJmNjRhNCwgMHhkNjNhY2Q5 YywgMHgxYmJjNDYzNSwgMHg5ZTgxMDMyZCwKLSAgMHgyNzAxZjUwYywgMHg5OTg0N2FiNCwgMHhh MGUzZGY3OSwgMHhiYTZjZjM4YywgMHgxMDg0MzA5NCwgMHgyNTM3YTk1ZSwKLSAgMHhmNDZmNmZm ZSwgMHhhMWZmM2IxZiwgMHgyMDhjZmI2YSwgMHg4ZjQ1OGM3NCwgMHhkOWUwYTIyNywgMHg0ZWM3 M2EzNCwKLSAgMHhmYzg4NGY2OSwgMHgzZTRkZThkZiwgMHhlZjBlMDA4OCwgMHgzNTU5NjQ4ZCwg MHg4YTQ1Mzg4YywgMHgxZDgwNDM2NiwKLSAgMHg3MjFkOWJmZCwgMHhhNTg2ODRiYiwgMHhlODI1 NjMzMywgMHg4NDRlODIxMiwgMHgxMjhkODA5OCwgMHhmZWQzM2ZiNCwKLSAgMHhjZTI4MGFlMSwg MHgyN2UxOWJhNSwgMHhkNWE2YzI1MiwgMHhlNDk3NTRiZCwgMHhjNWQ2NTVkZCwgMHhlYjY2NzA2 NCwKLSAgMHg3Nzg0MGI0ZCwgMHhhMWI2YTgwMSwgMHg4NGRiMjZhOSwgMHhlMGI1NjcxNCwgMHgy MWYwNDNiNywgMHhlNWQwNTg2MCwKLSAgMHg1NGYwMzA4NCwgMHgwNjZmZjQ3MiwgMHhhMzFhYTE1 MywgMHhkYWRjNDc1NSwgMHhiNTYyNWRiZiwgMHg2ODU2MWJlNiwKLSAgMHg4M2NhNmI5NCwgMHgy ZDZlZDIzYiwgMHhlY2NmMDFkYiwgMHhhNmQzZDBiYSwgMHhiNjgwM2Q1YywgMHhhZjc3YTcwOSwK LSAgMHgzM2I0YTM0YywgMHgzOTdiYzhkNiwgMHg1ZWUyMmI5NSwgMHg1ZjBlNTMwNCwgMHg4MWVk NmY2MSwgMHgyMGU3NDM2NCwKLSAgMHhiNDVlMTM3OCwgMHhkZTE4NjM5YiwgMHg4ODFjYTEyMiwg MHhiOTY3MjZkMSwgMHg4MDQ5YTdlOCwgMHgyMmI3ZGE3YiwKLSAgMHg1ZTU1MmQyNSwgMHg1Mjcy ZDIzNywgMHg3OWQyOTUxYywgMHhjNjBkODk0YywgMHg0ODhjYjQwMiwgMHgxYmE0ZmU1YiwKLSAg MHhhNGIwOWY2YiwgMHgxY2E4MTVjZiwgMHhhMjBjMzAwNSwgMHg4ODcxZGY2MywgMHhiOWRlMmZj YiwgMHgwY2M2YzllOSwKLSAgMHgwYmVlZmY1MywgMHhlMzIxNDUxNywgMHhiNDU0MjgzNSwgMHg5 ZjYzMjkzYywgMHhlZTQxZTcyOSwgMHg2ZTFkMmQ3YywKLSAgMHg1MDA0NTI4NiwgMHgxZTY2ODVm MywgMHhmMzM0MDFjNiwgMHgzMGEyMmM5NSwgMHgzMWE3MDg1MCwgMHg2MDkzMGYxMywKLSAgMHg3 M2Y5ODQxNywgMHhhMTI2OTg1OSwgMHhlYzY0NWM0NCwgMHg1MmM4NzdhOSwgMHhjZGZmMzNhNiwg MHhhMDJiMTc0MSwKLSAgMHg3Y2JhZDlhMiwgMHgyMTgwMDM2ZiwgMHg1MGQ5OWMwOCwgMHhjYjNm NDg2MSwgMHhjMjZiZDc2NSwgMHg2NGEzZjZhYiwKLSAgMHg4MDM0MjY3NiwgMHgyNWE3NWU3Yiwg MHhlNGU2ZDFmYywgMHgyMGM3MTBlNiwgMHhjZGYwYjY4MCwgMHgxNzg0NGQzYiwKLSAgMHgzMWVl Zjg0ZCwgMHg3ZTA4MjRlNCwgMHgyY2NiNDllYiwgMHg4NDZhM2JhZSwgMHg4ZmY3Nzg4OCwgMHhl ZTVkNjBmNiwKLSAgMHg3YWY3NTY3MywgMHgyZmRkNWNkYiwgMHhhMTE2MzFjMSwgMHgzMGY2NmY0 MywgMHhiM2ZhZWM1NCwgMHgxNTdmZDdmYSwKLSAgMHhlZjg1NzljYywgMHhkMTUyZGU1OCwgMHhk YjJmZmQ1ZSwgMHg4ZjMyY2UxOSwgMHgzMDZhZjk3YSwgMHgwMmYwM2VmOCwKLSAgMHg5OTMxOWFk NSwgMHhjMjQyZmEwZiwgMHhhN2UzZWJiMCwgMHhjNjhlNDkwNiwgMHhiOGRhMjMwYywgMHg4MDgy MzAyOCwKLSAgMHhkY2RlZjNjOCwgMHhkMzVmYjE3MSwgMHgwODhhMWJjOCwgMHhiZWMwYzU2MCwg MHg2MWEzYzllOCwgMHhiY2E4ZjU0ZCwKLSAgMHhjNzJmZWZmYSwgMHgyMjgyMmU5OSwgMHg4MmM1 NzBiNCwgMHhkOGQ5NGU4OSwgMHg4YjFjMzRiYywgMHgzMDFlMTZlNiwKLSAgMHgyNzNiZTk3OSwg MHhiMGZmZWFhNiwgMHg2MWQ5YjhjNiwgMHgwMGIyNDg2OSwgMHhiN2ZmY2UzZiwgMHgwOGRjMjgz YiwKLSAgMHg0M2RhZjY1YSwgMHhmN2UxOTc5OCwgMHg3NjE5YjcyZiwgMHg4ZjFjOWJhNCwgMHhk Yzg2MzdhMCwgMHgxNmE3ZDNiMSwKLSAgMHg5ZmMzOTNiNywgMHhhNzEzNmVlYiwgMHhjNmJjYzYz ZSwgMHgxYTUxMzc0MiwgMHhlZjY4MjhiYywgMHg1MjAzNjVkNiwKLSAgMHgyZDZhNzdhYiwgMHgz NTI3ZWQ0YiwgMHg4MjFmZDIxNiwgMHgwOTVjNmUyZSwgMHhkYjkyZjJmYiwgMHg1ZWVhMjljYiwK LSAgMHgxNDU4OTJmNSwgMHg5MTU4NGY3ZiwgMHg1NDgzNjk3YiwgMHgyNjY3YThjYywgMHg4NTE5 NjA0OCwgMHg4YzRiYWNlYSwKLSAgMHg4MzM4NjBkNCwgMHgwZDIzZTBmOSwgMHg2YzM4N2U4YSwg MHgwYWU2ZDI0OSwgMHhiMjg0NjAwYywgMHhkODM1NzMxZCwKLSAgMHhkY2IxYzY0NywgMHhhYzRj NTZlYSwgMHgzZWJkODFiMywgMHgyMzBlYWJiMCwgMHg2NDM4YmM4NywgMHhmMGI1YjFmYSwKLSAg MHg4ZjVlYTJiMywgMHhmYzE4NDY0MiwgMHgwYTAzNmI3YSwgMHg0ZmIwODliZCwgMHg2NDlkYTU4 OSwgMHhhMzQ1NDE1ZSwKLSAgMHg1YzAzODMyMywgMHgzZTVkM2JiOSwgMHg0M2Q3OTU3MiwgMHg3 ZTZkZDA3YywgMHgwNmRmZGYxZSwgMHg2YzZjYzRlZiwKLSAgMHg3MTYwYTUzOSwgMHg3M2JmYmU3 MCwgMHg4Mzg3NzYwNSwgMHg0NTIzZWNmMQotfTsKLQotc3RhdGljIHVpbnQzMiBTM1tdID0gewot ICAweDhkZWZjMjQwLCAweDI1ZmE1ZDlmLCAweGViOTAzZGJmLCAweGU4MTBjOTA3LCAweDQ3NjA3 ZmZmLCAweDM2OWZlNDRiLAotICAweDhjMWZjNjQ0LCAweGFlY2VjYTkwLCAweGJlYjFmOWJmLCAw eGVlZmJjYWVhLCAweGU4Y2YxOTUwLCAweDUxZGYwN2FlLAotICAweDkyMGU4ODA2LCAweGYwYWQw NTQ4LCAweGUxM2M4ZDgzLCAweDkyNzAxMGQ1LCAweDExMTA3ZDlmLCAweDA3NjQ3ZGI5LAotICAw eGIyZTNlNGQ0LCAweDNkNGYyODVlLCAweGI5YWZhODIwLCAweGZhZGU4MmUwLCAweGEwNjcyNjhi LCAweDgyNzI3OTJlLAotICAweDU1M2ZiMmMwLCAweDQ4OWFlMjJiLCAweGQ0ZWY5Nzk0LCAweDEy NWUzZmJjLCAweDIxZmZmY2VlLCAweDgyNWIxYmZkLAotICAweDkyNTVjNWVkLCAweDEyNTdhMjQw LCAweDRlMWE4MzAyLCAweGJhZTA3ZmZmLCAweDUyODI0NmU3LCAweDhlNTcxNDBlLAotICAweDMz NzNmN2JmLCAweDhjOWY4MTg4LCAweGE2ZmM0ZWU4LCAweGM5ODJiNWE1LCAweGE4YzAxZGI3LCAw eDU3OWZjMjY0LAotICAweDY3MDk0ZjMxLCAweGYyYmQzZjVmLCAweDQwZmZmN2MxLCAweDFmYjc4 ZGZjLCAweDhlNmJkMmMxLCAweDQzN2JlNTliLAotICAweDk5YjAzZGJmLCAweGI1ZGJjNjRiLCAw eDYzOGRjMGU2LCAweDU1ODE5ZDk5LCAweGExOTdjODFjLCAweDRhMDEyZDZlLAotICAweGM1ODg0 YTI4LCAweGNjYzM2ZjcxLCAweGI4NDNjMjEzLCAweDZjMDc0M2YxLCAweDgzMDk4OTNjLCAweDBm ZWRkZDVmLAotICAweDJmN2ZlODUwLCAweGQ3YzA3ZjdlLCAweDAyNTA3ZmJmLCAweDVhZmI5YTA0 LCAweGE3NDdkMmQwLCAweDE2NTExOTJlLAotICAweGFmNzBiZjNlLCAweDU4YzMxMzgwLCAweDVm OTgzMDJlLCAweDcyN2NjM2M0LCAweDBhMGZiNDAyLCAweDBmN2ZlZjgyLAotICAweDhjOTZmZGFk LCAweDVkMmMyYWFlLCAweDhlZTk5YTQ5LCAweDUwZGE4OGI4LCAweDg0MjdmNGEwLCAweDFlYWM1 NzkwLAotICAweDc5NmZiNDQ5LCAweDgyNTJkYzE1LCAweGVmYmQ3ZDliLCAweGE2NzI1OTdkLCAw eGFkYTg0MGQ4LCAweDQ1ZjU0NTA0LAotICAweGZhNWQ3NDAzLCAweGU4M2VjMzA1LCAweDRmOTE3 NTFhLCAweDkyNTY2OWMyLCAweDIzZWZlOTQxLCAweGE5MDNmMTJlLAotICAweDYwMjcwZGYyLCAw eDAyNzZlNGI2LCAweDk0ZmQ2NTc0LCAweDkyNzk4NWIyLCAweDgyNzZkYmNiLCAweDAyNzc4MTc2 LAotICAweGY4YWY5MThkLCAweDRlNDhmNzllLCAweDhmNjE2ZGRmLCAweGUyOWQ4NDBlLCAweDg0 MmY3ZDgzLCAweDM0MGNlNWM4LAotICAweDk2YmJiNjgyLCAweDkzYjRiMTQ4LCAweGVmMzAzY2Fi LCAweDk4NGZhZjI4LCAweDc3OWZhZjliLCAweDkyZGM1NjBkLAotICAweDIyNGQxZTIwLCAweDg0 MzdhYTg4LCAweDdkMjlkYzk2LCAweDI3NTZkM2RjLCAweDhiOTA3Y2VlLCAweGI1MWZkMjQwLAot ICAweGU3YzA3Y2UzLCAweGU1NjZiNGExLCAweGMzZTk2MTVlLCAweDNjZjgyMDlkLCAweDYwOTRk MWUzLCAweGNkOWNhMzQxLAotICAweDVjNzY0NjBlLCAweDAwZWE5ODNiLCAweGQ0ZDY3ODgxLCAw eGZkNDc1NzJjLCAweGY3NmNlZGQ5LCAweGJkYTgyMjljLAotICAweDEyN2RhZGFhLCAweDQzOGEw NzRlLCAweDFmOTdjMDkwLCAweDA4MWJkYjhhLCAweDkzYTA3ZWJlLCAweGI5MzhjYTE1LAotICAw eDk3YjAzY2ZmLCAweDNkYzJjMGY4LCAweDhkMWFiMmVjLCAweDY0MzgwZTUxLCAweDY4Y2M3YmZi LCAweGQ5MGYyNzg4LAotICAweDEyNDkwMTgxLCAweDVkZTVmZmQ0LCAweGRkN2VmODZhLCAweDc2 YTJlMjE0LCAweGI5YTQwMzY4LCAweDkyNWQ5NThmLAotICAweDRiMzlmZmZhLCAweGJhMzlhZWU5 LCAweGE0ZmZkMzBiLCAweGZhZjc5MzNiLCAweDZkNDk4NjIzLCAweDE5M2NiY2ZhLAotICAweDI3 NjI3NTQ1LCAweDgyNWNmNDdhLCAweDYxYmQ4YmEwLCAweGQxMWU0MmQxLCAweGNlYWQwNGY0LCAw eDEyN2VhMzkyLAotICAweDEwNDI4ZGI3LCAweDgyNzJhOTcyLCAweDkyNzBjNGE4LCAweDEyN2Rl NTBiLCAweDI4NWJhMWM4LCAweDNjNjJmNDRmLAotICAweDM1YzBlYWE1LCAweGU4MDVkMjMxLCAw eDQyODkyOWZiLCAweGI0ZmNkZjgyLCAweDRmYjY2YTUzLCAweDBlN2RjMTViLAotICAweDFmMDgx ZmFiLCAweDEwODYxOGFlLCAweGZjZmQwODZkLCAweGY5ZmYyODg5LCAweDY5NGJjYzExLCAweDIz NmE1Y2FlLAotICAweDEyZGVjYTRkLCAweDJjM2Y4Y2M1LCAweGQyZDAyZGZlLCAweGY4ZWY1ODk2 LCAweGU0Y2Y1MmRhLCAweDk1MTU1YjY3LAotICAweDQ5NGE0ODhjLCAweGI5YjZhODBjLCAweDVj OGY4MmJjLCAweDg5ZDM2YjQ1LCAweDNhNjA5NDM3LCAweGVjMDBjOWE5LAotICAweDQ0NzE1MjUz LCAweDBhODc0YjQ5LCAweGQ3NzNiYzQwLCAweDdjMzQ2NzFjLCAweDAyNzE3ZWY2LCAweDRmZWI1 NTM2LAotICAweGEyZDAyZmZmLCAweGQyYmY2MGM0LCAweGQ0M2YwM2MwLCAweDUwYjRlZjZkLCAw eDA3NDc4Y2QxLCAweDAwNmUxODg4LAotICAweGEyZTUzZjU1LCAweGI5ZTZkNGJjLCAweGEyMDQ4 MDE2LCAweDk3NTczODMzLCAweGQ3MjA3ZDY3LCAweGRlMGY4ZjNkLAotICAweDcyZjg3YjMzLCAw eGFiY2M0ZjMzLCAweDc2ODhjNTVkLCAweDdiMDBhNmIwLCAweDk0N2IwMDAxLCAweDU3MDA3NWQy LAotICAweGY5YmI4OGY4LCAweDg5NDIwMTllLCAweDQyNjRhNWZmLCAweDg1NjMwMmUwLCAweDcy ZGJkOTJiLCAweGVlOTcxYjY5LAotICAweDZlYTIyZmRlLCAweDVmMDhhZTJiLCAweGFmN2E2MTZk LCAweGU1Yzk4NzY3LCAweGNmMWZlYmQyLCAweDYxZWZjOGMyLAotICAweGYxYWMyNTcxLCAweGNj ODIzOWMyLCAweDY3MjE0Y2I4LCAweGIxZTU4M2QxLCAweGI3ZGMzZTYyLCAweDdmMTBiZGNlLAot ICAweGY5MGE1YzM4LCAweDBmZjA0NDNkLCAweDYwNmU2ZGM2LCAweDYwNTQzYTQ5LCAweDU3Mjdj MTQ4LCAweDJiZTk4YTFkLAotICAweDhhYjQxNzM4LCAweDIwZTFiZTI0LCAweGFmOTZkYTBmLCAw eDY4NDU4NDI1LCAweDk5ODMzYmU1LCAweDYwMGQ0NTdkLAotICAweDI4MmY5MzUwLCAweDgzMzRi MzYyLCAweGQ5MWQxMTIwLCAweDJiNmQ4ZGEwLCAweDY0MmIxZTMxLCAweDljMzA1YTAwLAotICAw eDUyYmNlNjg4LCAweDFiMDM1ODhhLCAweGY3YmFlZmQ1LCAweDQxNDJlZDljLCAweGE0MzE1YzEx LCAweDgzMzIzZWM1LAotICAweGRmZWY0NjM2LCAweGExMzNjNTAxLCAweGU5ZDM1MzFjLCAweGVl MzUzNzgzCi19OwotCi1zdGF0aWMgdWludDMyIFM0W10gPSB7Ci0gIDB4OWRiMzA0MjAsIDB4MWZi NmU5ZGUsIDB4YTdiZTdiZWYsIDB4ZDI3M2EyOTgsIDB4NGE0ZjdiZGIsIDB4NjRhZDhjNTcsCi0g IDB4ODU1MTA0NDMsIDB4ZmEwMjBlZDEsIDB4N2UyODdhZmYsIDB4ZTYwZmI2NjMsIDB4MDk1ZjM1 YTEsIDB4NzllYmYxMjAsCi0gIDB4ZmQwNTlkNDMsIDB4NjQ5N2I3YjEsIDB4ZjM2NDFmNjMsIDB4 MjQxZTRhZGYsIDB4MjgxNDdmNWYsIDB4NGZhMmI4Y2QsCi0gIDB4Yzk0MzAwNDAsIDB4MGNjMzIy MjAsIDB4ZmRkMzBiMzAsIDB4YzBhNTM3NGYsIDB4MWQyZDAwZDksIDB4MjQxNDdiMTUsCi0gIDB4 ZWU0ZDExMWEsIDB4MGZjYTUxNjcsIDB4NzFmZjkwNGMsIDB4MmQxOTVmZmUsIDB4MWEwNTY0NWYs IDB4MGMxM2ZlZmUsCi0gIDB4MDgxYjA4Y2EsIDB4MDUxNzAxMjEsIDB4ODA1MzAxMDAsIDB4ZTgz ZTVlZmUsIDB4YWM5YWY0ZjgsIDB4N2ZlNzI3MDEsCi0gIDB4ZDJiOGVlNWYsIDB4MDZkZjQyNjEs IDB4YmI5ZTliOGEsIDB4NzI5M2VhMjUsIDB4Y2U4NGZmZGYsIDB4ZjU3MTg4MDEsCi0gIDB4M2Rk NjRiMDQsIDB4YTI2ZjI2M2IsIDB4N2VkNDg0MDAsIDB4NTQ3ZWViZTYsIDB4NDQ2ZDRjYTAsIDB4 NmNmM2Q2ZjUsCi0gIDB4MjY0OWFiZGYsIDB4YWVhMGM3ZjUsIDB4MzYzMzhjYzEsIDB4NTAzZjdl OTMsIDB4ZDM3NzIwNjEsIDB4MTFiNjM4ZTEsCi0gIDB4NzI1MDBlMDMsIDB4ZjgwZWIyYmIsIDB4 YWJlMDUwMmUsIDB4ZWM4ZDc3ZGUsIDB4NTc5NzFlODEsIDB4ZTE0ZjY3NDYsCi0gIDB4YzkzMzU0 MDAsIDB4NjkyMDMxOGYsIDB4MDgxZGJiOTksIDB4ZmZjMzA0YTUsIDB4NGQzNTE4MDUsIDB4N2Yz ZDVjZTMsCi0gIDB4YTZjODY2YzYsIDB4NWQ1YmNjYTksIDB4ZGFlYzZmZWEsIDB4OWY5MjZmOTEs IDB4OWY0NjIyMmYsIDB4Mzk5MTQ2N2QsCi0gIDB4YTViZjZkOGUsIDB4MTE0M2M0NGYsIDB4NDM5 NTgzMDIsIDB4ZDAyMTRlZWIsIDB4MDIyMDgzYjgsIDB4M2ZiNjE4MGMsCi0gIDB4MThmODkzMWUs IDB4MjgxNjU4ZTYsIDB4MjY0ODZlM2UsIDB4OGJkNzhhNzAsIDB4NzQ3N2U0YzEsIDB4YjUwNmUw N2MsCi0gIDB4ZjMyZDBhMjUsIDB4NzkwOThiMDIsIDB4ZTRlYWJiODEsIDB4MjgxMjNiMjMsIDB4 NjlkZWFkMzgsIDB4MTU3NGNhMTYsCi0gIDB4ZGY4NzFiNjIsIDB4MjExYzQwYjcsIDB4YTUxYTll ZjksIDB4MDAxNDM3N2IsIDB4MDQxZThhYzgsIDB4MDkxMTQwMDMsCi0gIDB4YmQ1OWU0ZDIsIDB4 ZTNkMTU2ZDUsIDB4NGZlODc2ZDUsIDB4MmY5MWEzNDAsIDB4NTU3YmU4ZGUsIDB4MDBlYWU0YTcs Ci0gIDB4MGNlNWMyZWMsIDB4NGRiNGJiYTYsIDB4ZTc1NmJkZmYsIDB4ZGQzMzY5YWMsIDB4ZWMx N2IwMzUsIDB4MDY1NzIzMjcsCi0gIDB4OTlhZmM4YjAsIDB4NTZjOGMzOTEsIDB4NmI2NTgxMWMs IDB4NWUxNDYxMTksIDB4NmU4NWNiNzUsIDB4YmUwN2MwMDIsCi0gIDB4YzIzMjU1NzcsIDB4ODkz ZmY0ZWMsIDB4NWJiZmM5MmQsIDB4ZDBlYzNiMjUsIDB4Yjc4MDFhYjcsIDB4OGQ2ZDNiMjQsCi0g IDB4MjBjNzYzZWYsIDB4YzM2NmE1ZmMsIDB4OWMzODI4ODAsIDB4MGFjZTMyMDUsIDB4YWFjOTU0 OGEsIDB4ZWNhMWQ3YzcsCi0gIDB4MDQxYWZhMzIsIDB4MWQxNjYyNWEsIDB4NjcwMTkwMmMsIDB4 OWI3NTdhNTQsIDB4MzFkNDc3ZjcsIDB4OTEyNmIwMzEsCi0gIDB4MzZjYzZmZGIsIDB4YzcwYjhi NDYsIDB4ZDllNjZhNDgsIDB4NTZlNTVhNzksIDB4MDI2YTRjZWIsIDB4NTI0MzdlZmYsCi0gIDB4 MmY4Zjc2YjQsIDB4MGRmOTgwYTUsIDB4ODY3NGNkZTMsIDB4ZWRkYTA0ZWIsIDB4MTdhOWJlMDQs IDB4MmMxOGY0ZGYsCi0gIDB4Yjc3NDdmOWQsIDB4YWIyYWY3YjQsIDB4ZWZjMzRkMjAsIDB4MmUw OTZiN2MsIDB4MTc0MWEyNTQsIDB4ZTViNmEwMzUsCi0gIDB4MjEzZDQyZjYsIDB4MmMxYzdjMjYs IDB4NjFjMmY1MGYsIDB4NjU1MmRhZjksIDB4ZDJjMjMxZjgsIDB4MjUxMzBmNjksCi0gIDB4ZDgx NjdmYTIsIDB4MDQxOGYyYzgsIDB4MDAxYTk2YTYsIDB4MGQxNTI2YWIsIDB4NjMzMTVjMjEsIDB4 NWUwYTcyZWMsCi0gIDB4NDliYWZlZmQsIDB4MTg3OTA4ZDksIDB4OGQwZGJkODYsIDB4MzExMTcw YTcsIDB4M2U5YjY0MGMsIDB4Y2MzZTEwZDcsCi0gIDB4ZDVjYWQzYjYsIDB4MGNhZWMzODgsIDB4 ZjczMDAxZTEsIDB4NmM3MjhhZmYsIDB4NzFlYWUyYTEsIDB4MWY5YWYzNmUsCi0gIDB4Y2ZjYmQx MmYsIDB4YzFkZTg0MTcsIDB4YWMwN2JlNmIsIDB4Y2I0NGExZDgsIDB4OGI5YjBmNTYsIDB4MDEz OTg4YzMsCi0gIDB4YjFjNTJmY2EsIDB4YjRiZTMxY2QsIDB4ZDg3ODI4MDYsIDB4MTJhM2E0ZTIs IDB4NmY3ZGU1MzIsIDB4NThmZDdlYjYsCi0gIDB4ZDAxZWU5MDAsIDB4MjRhZGZmYzIsIDB4ZjQ5 OTBmYzUsIDB4OTcxMWFhYzUsIDB4MDAxZDdiOTUsIDB4ODJlNWU3ZDIsCi0gIDB4MTA5ODczZjYs IDB4MDA2MTMwOTYsIDB4YzMyZDk1MjEsIDB4YWRhMTIxZmYsIDB4Mjk5MDg0MTUsIDB4N2ZiYjk3 N2YsCi0gIDB4YWY5ZWIzZGIsIDB4MjljOWVkMmEsIDB4NWNlMmE0NjUsIDB4YTczMGYzMmMsIDB4 ZDBhYTNmZTgsIDB4OGE1Y2MwOTEsCi0gIDB4ZDQ5ZTJjZTcsIDB4MGNlNDU0YTksIDB4ZDYwYWNk ODYsIDB4MDE1ZjE5MTksIDB4NzcwNzkxMDMsIDB4ZGVhMDNhZjYsCi0gIDB4NzhhODU2NWUsIDB4 ZGVlMzU2ZGYsIDB4MjFmMDVjYmUsIDB4OGI3NWUzODcsIDB4YjNjNTA2NTEsIDB4YjhhNWMzZWYs Ci0gIDB4ZDhlZWI2ZDIsIDB4ZTUyM2JlNzcsIDB4YzIxNTQ1MjksIDB4MmY2OWVmZGYsIDB4YWZl NjdhZmIsIDB4ZjQ3MGM0YjIsCi0gIDB4ZjNlMGViNWIsIDB4ZDZjYzk4NzYsIDB4MzllNDQ2MGMs IDB4MWZkYTg1MzgsIDB4MTk4NzgzMmYsIDB4Y2EwMDczNjcsCi0gIDB4YTk5MTQ0ZjgsIDB4Mjk2 YjI5OWUsIDB4NDkyZmMyOTUsIDB4OTI2NmJlYWIsIDB4YjU2NzZlNjksIDB4OWJkM2RkZGEsCi0g IDB4ZGY3ZTA1MmYsIDB4ZGIyNTcwMWMsIDB4MWI1ZTUxZWUsIDB4ZjY1MzI0ZTYsIDB4NmFmY2Uz NmMsIDB4MDMxNmNjMDQsCi0gIDB4ODY0NDIxM2UsIDB4YjdkYzU5ZDAsIDB4Nzk2NTI5MWYsIDB4 Y2NkNmZkNDMsIDB4NDE4MjM5NzksIDB4OTMyYmNkZjYsCi0gIDB4YjY1N2MzNGQsIDB4NGVkZmQy ODIsIDB4N2FlNTI5MGMsIDB4M2NiOTUzNmIsIDB4ODUxZTIwZmUsIDB4OTgzMzU1N2UsCi0gIDB4 MTNlY2YwYjAsIDB4ZDNmZmIzNzIsIDB4M2Y4NWM1YzEsIDB4MGFlZjdlZDIKLX07Ci0KLS8qIEVu Y3J5cHQvZGVjcnlwdCBvbmUgNjQtYml0IGJsb2NrIG9mIGRhdGEgKi8KLQotdm9pZAotY2tfY2Fz dF9lY2JfZW5jcnlwdChvdXQsIGluLCBzY2hlZCwgbW9kZSkKLSAgICB1aW50OHAgb3V0OwotICAg IHVpbnQ4cCBpbjsKLSAgICBDYXN0S2V5U2NoZWQgKiBzY2hlZDsKLSAgICBpbnQgbW9kZTsgICAg ICAgICAgIC8qIHplcm8gbWVhbnMgZW5jcnlwdCAqLwotewotICAgIHVpbnQzMiB0WzJdOwotCi0j aWZkZWYgTElUVExFX0VORElBTgotICAgIHRbMF0gPSAoaW5bMF0gPDwgMjQpIHwgKGluWzFdIDw8 IDE2KSB8IChpblsyXSA8PCA4KSB8IGluWzNdOwotICAgIHRbMV0gPSAoaW5bNF0gPDwgMjQpIHwg KGluWzVdIDw8IDE2KSB8IChpbls2XSA8PCA4KSB8IGluWzddOwotI2Vsc2UKLSAgICB0WzBdID0g Kih1aW50MzJwKSBpbjsKLSAgICB0WzFdID0gKih1aW50MzJwKSAoaW4gKyA0KTsKLSNlbmRpZgot Ci0gICAgY2tfY2FzdF9lY2JfY3J5cHQodCwgc2NoZWQsIG1vZGUpOwotCi0jaWZkZWYgTElUVExF X0VORElBTgotICAgIG91dFswXSA9ICh0WzBdID4+IDI0KSAmIDB4ZmY7Ci0gICAgb3V0WzFdID0g KHRbMF0gPj4gMTYpICYgMHhmZjsKLSAgICBvdXRbMl0gPSAodFswXSA+PiA4KSAmIDB4ZmY7Ci0g ICAgb3V0WzNdID0gdFswXSAmIDB4ZmY7Ci0gICAgb3V0WzRdID0gKHRbMV0gPj4gMjQpICYgMHhm ZjsKLSAgICBvdXRbNV0gPSAodFsxXSA+PiAxNikgJiAweGZmOwotICAgIG91dFs2XSA9ICh0WzFd ID4+IDgpICYgMHhmZjsKLSAgICBvdXRbN10gPSB0WzFdICYgMHhmZjsKLSNlbHNlCi0gICAgKih1 aW50MzJwKSBvdXQgPSB0WzBdOwotICAgICoodWludDMycCkgKG91dCArIDQpID0gdFsxXTsKLSNl bmRpZgotfQotCi12b2lkCi1ja19jYXN0X2VjYl9jcnlwdChkYXRhLCBzY2hlZCwgbW9kZSkKLSAg ICB1aW50MzJwIGRhdGE7Ci0gICAgQ2FzdEtleVNjaGVkICogc2NoZWQ7Ci0gICAgaW50IG1vZGU7 Ci17Ci0gICAgcmVnaXN0ZXIgdWludDMyIEwsIFIsIHRlbXA7Ci0gICAgcmVnaXN0ZXIgc3RydWN0 IENhc3RTdWJrZXlQYWlyICoga3A7Ci0gICAgcmVnaXN0ZXIgdWludDhwIElhLCBJYiwgSWMsIElk OwotICAgIHVpbnQzMiBJOwotCi0jaWZkZWYgTElUVExFX0VORElBTgotICAgIElkID0gKHVpbnQ4 cCkgJkk7Ci0gICAgSWMgPSBJZCArIDE7Ci0gICAgSWIgPSBJYyArIDE7Ci0gICAgSWEgPSBJYiAr IDE7Ci0jZWxzZQotICAgIElhID0gKHVpbnQ4cCkgJkk7Ci0gICAgSWIgPSBJYSArIDE7Ci0gICAg SWMgPSBJYiArIDE7Ci0gICAgSWQgPSBJYyArIDE7Ci0jZW5kaWYKLQotICAgIEwgPSBkYXRhWzBd OwotICAgIFIgPSBkYXRhWzFdOwotCi0jZGVmaW5lIHR5cGUwKGxlZnQscmlnaHQpICAgICAgIFwK LSAgICAgIHRlbXAgPSBrcC0+S20gKyByaWdodDtcCi0gICAgICBJID0gKHRlbXAgPDwga3AtPkty KSB8ICh0ZW1wID4+ICgzMiAtIGtwLT5LcikpO1wKLSAgICAgIGxlZnQgXj0gKChTMVsqSWFdIF4g UzJbKkliXSkgLSBTM1sqSWNdKSArIFM0WypJZF07Ci0KLSNkZWZpbmUgdHlwZTEobGVmdCxyaWdo dCkgICAgICAgXAotICAgICAgdGVtcCA9IGtwLT5LbSBeIHJpZ2h0O1wKLSAgICAgIEkgPSAodGVt cCA8PCBrcC0+S3IpIHwgKHRlbXAgPj4gKDMyIC0ga3AtPktyKSk7XAotICAgICAgbGVmdCBePSAo KFMxWypJYV0gLSBTMlsqSWJdKSArIFMzWypJY10pIF4gUzRbKklkXTsKLQotI2RlZmluZSB0eXBl MihsZWZ0LHJpZ2h0KSAgICAgICBcCi0gICAgICB0ZW1wID0ga3AtPkttIC0gcmlnaHQ7XAotICAg ICAgSSA9ICh0ZW1wIDw8IGtwLT5LcikgfCAodGVtcCA+PiAoMzIgLSBrcC0+S3IpKTtcCi0gICAg ICBsZWZ0IF49ICgoUzFbKklhXSArIFMyWypJYl0pIF4gUzNbKkljXSkgLSBTNFsqSWRdOwotCi0g ICAgaWYobW9kZSkgewotI2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCi0gICAgICAgIGlm KHNjaGVkLT5rc2l6ZSA+IDEwKSB7Ci0gICAgICAgICAgICBrcCA9ICZzY2hlZC0+S1sxNV07Ci0g ICAgICAgICAgICB0eXBlMChMLCBSKTsgLS1rcDsKLSAgICAgICAgICAgIHR5cGUyKFIsIEwpOyAt LWtwOwotICAgICAgICAgICAgdHlwZTEoTCwgUik7IC0ta3A7Ci0gICAgICAgICAgICB0eXBlMChS LCBMKTsgLS1rcDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAga3Ag PSAmc2NoZWQtPktbMTFdOwotICAgICAgICB0eXBlMihMLCBSKTsgLS1rcDsKLSAgICAgICAgdHlw ZTEoUiwgTCk7IC0ta3A7Ci0gICAgICAgIHR5cGUwKEwsIFIpOyAtLWtwOwotICAgICAgICB0eXBl MihSLCBMKTsgLS1rcDsKLSAgICAgICAgdHlwZTEoTCwgUik7IC0ta3A7Ci0gICAgICAgIHR5cGUw KFIsIEwpOyAtLWtwOwotICAgICAgICB0eXBlMihMLCBSKTsgLS1rcDsKLSAgICAgICAgdHlwZTEo UiwgTCk7IC0ta3A7Ci0gICAgICAgIHR5cGUwKEwsIFIpOyAtLWtwOwotICAgICAgICB0eXBlMihS LCBMKTsgLS1rcDsKLSAgICAgICAgdHlwZTEoTCwgUik7IC0ta3A7Ci0gICAgICAgIHR5cGUwKFIs IEwpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAga3AgPSAmc2NoZWQtPktbMF07Ci0gICAg ICAgIHR5cGUwKEwsIFIpOyArK2twOwotICAgICAgICB0eXBlMShSLCBMKTsgKytrcDsKLSAgICAg ICAgdHlwZTIoTCwgUik7ICsra3A7Ci0gICAgICAgIHR5cGUwKFIsIEwpOyArK2twOwotICAgICAg ICB0eXBlMShMLCBSKTsgKytrcDsKLSAgICAgICAgdHlwZTIoUiwgTCk7ICsra3A7Ci0gICAgICAg IHR5cGUwKEwsIFIpOyArK2twOwotICAgICAgICB0eXBlMShSLCBMKTsgKytrcDsKLSAgICAgICAg dHlwZTIoTCwgUik7ICsra3A7Ci0gICAgICAgIHR5cGUwKFIsIEwpOyArK2twOwotICAgICAgICB0 eXBlMShMLCBSKTsgKytrcDsKLSAgICAgICAgdHlwZTIoUiwgTCk7ICsra3A7Ci0jaWZuZGVmIENB U1RfRVhQT1JUX0VOQ1JZUFRJT04KLSAgICAgICAgaWYoc2NoZWQtPmtzaXplID4gMTApIHsKLSAg ICAgICAgICAgIHR5cGUwKEwsIFIpOyArK2twOwotICAgICAgICAgICAgdHlwZTEoUiwgTCk7ICsr a3A7Ci0gICAgICAgICAgICB0eXBlMihMLCBSKTsgKytrcDsKLSAgICAgICAgICAgIHR5cGUwKFIs IEwpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBkYXRhWzBdID0gUjsKLSAgICBk YXRhWzFdID0gTDsKLX0KLQotLyogVGhlIGxhc3QgZm91ciBTLWJveGVzIGFyZSBmb3Iga2V5IHNj aGVkdWxlIHNldHVwICovCi0KLXN0YXRpYyB1aW50MzIgUzVbXSA9IHsKLSAgMHg3ZWM5MGMwNCwg MHgyYzZlNzRiOSwgMHg5YjBlNjZkZiwgMHhhNjMzNzkxMSwgMHhiODZhN2ZmZiwgMHgxZGQzNThm NSwKLSAgMHg0NGRkOWQ0NCwgMHgxNzMxMTY3ZiwgMHgwOGZiZjFmYSwgMHhlN2Y1MTFjYywgMHhk MjA1MWIwMCwgMHg3MzVhYmEwMCwKLSAgMHgyYWI3MjJkOCwgMHgzODYzODFjYiwgMHhhY2Y2MjQz YSwgMHg2OWJlZmQ3YSwgMHhlNmEyZTc3ZiwgMHhmMGM3MjBjZCwKLSAgMHhjNDQ5NDgxNiwgMHhj Y2Y1YzE4MCwgMHgzODg1MTY0MCwgMHgxNWIwYTg0OCwgMHhlNjhiMThjYiwgMHg0Y2FhZGVmZiwK LSAgMHg1ZjQ4MGEwMSwgMHgwNDEyYjJhYSwgMHgyNTk4MTRmYywgMHg0MWQwZWZlMiwgMHg0ZTQw YjQ4ZCwgMHgyNDhlYjZmYiwKLSAgMHg4ZGJhMWNmZSwgMHg0MWE5OWIwMiwgMHgxYTU1MGEwNCwg MHhiYThmNjVjYiwgMHg3MjUxZjRlNywgMHg5NWE1MTcyNSwKLSAgMHhjMTA2ZWNkNywgMHg5N2E1 OTgwYSwgMHhjNTM5YjlhYSwgMHg0ZDc5ZmU2YSwgMHhmMmYzZjc2MywgMHg2OGFmODA0MCwKLSAg MHhlZDBjOWU1NiwgMHgxMWI0OTU4YiwgMHhlMWViNWE4OCwgMHg4NzA5ZTZiMCwgMHhkN2UwNzE1 NiwgMHg0ZTI5ZmVhNywKLSAgMHg2MzY2ZTUyZCwgMHgwMmQxYzAwMCwgMHhjNGFjOGUwNSwgMHg5 Mzc3ZjU3MSwgMHgwYzA1MzcyYSwgMHg1Nzg1MzVmMiwKLSAgMHgyMjYxYmUwMiwgMHhkNjQyYTBj OSwgMHhkZjEzYTI4MCwgMHg3NGI1NWJkMiwgMHg2ODIxOTljMCwgMHhkNDIxZTVlYywKLSAgMHg1 M2ZiM2NlOCwgMHhjOGFkZWRiMywgMHgyOGE4N2ZjOSwgMHgzZDk1OTk4MSwgMHg1YzFmZjkwMCwg MHhmZTM4ZDM5OSwKLSAgMHgwYzRlZmYwYiwgMHgwNjI0MDdlYSwgMHhhYTJmNGZiMSwgMHg0ZmI5 Njk3NiwgMHg5MGM3OTUwNSwgMHhiMGE4YTc3NCwKLSAgMHhlZjU1YTFmZiwgMHhlNTljYTJjMiwg MHhhNmI2MmQyNywgMHhlNjZhNDI2MywgMHhkZjY1MDAxZiwgMHgwZWM1MDk2NiwKLSAgMHhkZmRk NTViYywgMHgyOWRlMDY1NSwgMHg5MTFlNzM5YSwgMHgxN2FmODk3NSwgMHgzMmM3OTExYywgMHg4 OWY4OTQ2OCwKLSAgMHgwZDAxZTk4MCwgMHg1MjQ3NTVmNCwgMHgwM2I2M2NjOSwgMHgwY2M4NDRi MiwgMHhiY2YzZjBhYSwgMHg4N2FjMzZlOSwKLSAgMHhlNTNhNzQyNiwgMHgwMWIzZDgyYiwgMHgx YTllNzQ0OSwgMHg2NGVlMmQ3ZSwgMHhjZGRiYjFkYSwgMHgwMWM5NDkxMCwKLSAgMHhiODY4YmY4 MCwgMHgwZDI2ZjNmZCwgMHg5MzQyZWRlNywgMHgwNGE1YzI4NCwgMHg2MzY3MzdiNiwgMHg1MGY1 YjYxNiwKLSAgMHhmMjQ3NjZlMywgMHg4ZWNhMzZjMSwgMHgxMzZlMDVkYiwgMHhmZWYxODM5MSwg MHhmYjg4N2EzNywgMHhkNmU3ZjdkNCwKLSAgMHhjN2ZiN2RjOSwgMHgzMDYzZmNkZiwgMHhiNmY1 ODlkZSwgMHhlYzI5NDFkYSwgMHgyNmU0NjY5NSwgMHhiNzU2NjQxOSwKLSAgMHhmNjU0ZWZjNSwg MHhkMDhkNThiNywgMHg0ODkyNTQwMSwgMHhjMWJhY2I3ZiwgMHhlNWZmNTUwZiwgMHhiNjA4MzA0 OSwKLSAgMHg1YmI1ZDBlOCwgMHg4N2Q3MmU1YSwgMHhhYjZhNmVlMSwgMHgyMjNhNjZjZSwgMHhj NjJiZjNjZCwgMHg5ZTA4ODVmOSwKLSAgMHg2OGNiM2U0NywgMHgwODZjMDEwZiwgMHhhMjFkZTgy MCwgMHhkMThiNjlkZSwgMHhmM2Y2NTc3NywgMHhmYTAyYzNmNiwKLSAgMHg0MDdlZGFjMywgMHhj YmIzZDU1MCwgMHgxNzkzMDg0ZCwgMHhiMGQ3MGViYSwgMHgwYWIzNzhkNSwgMHhkOTUxZmIwYywK LSAgMHhkZWQ3ZGE1NiwgMHg0MTI0YmJlNCwgMHg5NGNhMGI1NiwgMHgwZjU3NTVkMSwgMHhlMGUx ZTU2ZSwgMHg2MTg0YjViZSwKLSAgMHg1ODBhMjQ5ZiwgMHg5NGY3NGJjMCwgMHhlMzI3ODg4ZSwg MHg5ZjdiNTU2MSwgMHhjM2RjMDI4MCwgMHgwNTY4NzcxNSwKLSAgMHg2NDZjNmJkNywgMHg0NDkw NGRiMywgMHg2NmI0ZjBhMywgMHhjMGYxNjQ4YSwgMHg2OTdlZDVhZiwgMHg0OWU5MmZmNiwKLSAg MHgzMDllMzc0ZiwgMHgyY2I2MzU2YSwgMHg4NTgwODU3MywgMHg0OTkxZjg0MCwgMHg3NmYwYWUw MiwgMHgwODNiZTg0ZCwKLSAgMHgyODQyMWM5YSwgMHg0NDQ4OTQwNiwgMHg3MzZlNGNiOCwgMHhj MTA5MjkxMCwgMHg4YmM5NWZjNiwgMHg3ZDg2OWNmNCwKLSAgMHgxMzRmNjE2ZiwgMHgyZTc3MTE4 ZCwgMHhiMzFiMmJlMSwgMHhhYTkwYjQ3MiwgMHgzY2E1ZDcxNywgMHg3ZDE2MWJiYSwKLSAgMHg5 Y2FkOTAxMCwgMHhhZjQ2MmJhMiwgMHg5ZmU0NTlkMiwgMHg0NWQzNDU1OSwgMHhkOWYyZGExMywg MHhkYmM2NTQ4NywKLSAgMHhmM2U0Zjk0ZSwgMHgxNzZkNDg2ZiwgMHgwOTdjMTNlYSwgMHg2MzFk YTVjNywgMHg0NDVmNzM4MiwgMHgxNzU2ODNmNCwKLSAgMHhjZGM2NmE5NywgMHg3MGJlMDI4OCwg MHhiM2NkY2Y3MiwgMHg2ZTVkZDJmMywgMHgyMDkzNjA3OSwgMHg0NTliODBhNSwKLSAgMHhiZTYw ZTJkYiwgMHhhOWMyMzEwMSwgMHhlYmE1MzE1YywgMHgyMjRlNDJmMiwgMHgxYzVjMTU3MiwgMHhm NjcyMWIyYywKLSAgMHgxYWQyZmZmMywgMHg4YzI1NDA0ZSwgMHgzMjRlZDcyZiwgMHg0MDY3Yjdm ZCwgMHgwNTIzMTM4ZSwgMHg1Y2EzYmM3OCwKLSAgMHhkYzBmZDY2ZSwgMHg3NTkyMjI4MywgMHg3 ODRkNmIxNywgMHg1OGViYjE2ZSwgMHg0NDA5NGY4NSwgMHgzZjQ4MWQ4NywKLSAgMHhmY2ZlYWU3 YiwgMHg3N2I1ZmY3NiwgMHg4YzIzMDJiZiwgMHhhYWY0NzU1NiwgMHg1ZjQ2YjAyYSwgMHgyYjA5 MjgwMSwKLSAgMHgzZDM4ZjVmNywgMHgwY2E4MWYzNiwgMHg1MmFmNGE4YSwgMHg2NmQ1ZTdjMCwg MHhkZjNiMDg3NCwgMHg5NTA1NTExMCwKLSAgMHgxYjVhZDdhOCwgMHhmNjFlZDVhZCwgMHg2Y2Y2 ZTQ3OSwgMHgyMDc1ODE4NCwgMHhkMGNlZmE2NSwgMHg4OGY3YmU1OCwKLSAgMHg0YTA0NjgyNiwg MHgwZmY2ZjhmMywgMHhhMDljN2Y3MCwgMHg1MzQ2YWJhMCwgMHg1Y2U5NmMyOCwgMHhlMTc2ZWRh MywKLSAgMHg2YmFjMzA3ZiwgMHgzNzY4MjlkMiwgMHg4NTM2MGZhOSwgMHgxN2UzZmUyYSwgMHgy NGI3OTc2NywgMHhmNWE5NmIyMCwKLSAgMHhkNmNkMjU5NSwgMHg2OGZmMWViZiwgMHg3NTU1NDQy YywgMHhmMTlmMDZiZSwgMHhmOWUwNjU5YSwgMHhlZWI5NDkxZCwKLSAgMHgzNDAxMDcxOCwgMHhi YjMwY2FiOCwgMHhlODIyZmUxNSwgMHg4ODU3MDk4MywgMHg3NTBlNjI0OSwgMHhkYTYyN2U1NSwK LSAgMHg1ZTc2ZmZhOCwgMHhiMTUzNDU0NiwgMHg2ZDQ3ZGUwOCwgMHhlZmU5ZTdkNAotfTsKLQot c3RhdGljIHVpbnQzMiBTNltdID0gewotICAweGY2ZmE4ZjlkLCAweDJjYWM2Y2UxLCAweDRjYTM0 ODY3LCAweGUyMzM3ZjdjLCAweDk1ZGIwOGU3LCAweDAxNjg0M2I0LAotICAweGVjZWQ1Y2JjLCAw eDMyNTU1M2FjLCAweGJmOWYwOTYwLCAweGRmYTFlMmVkLCAweDgzZjA1NzlkLCAweDYzZWQ4NmI5 LAotICAweDFhYjZhNmI4LCAweGRlNWViZTM5LCAweGYzOGZmNzMyLCAweDg5ODliMTM4LCAweDMz ZjE0OTYxLCAweGMwMTkzN2JkLAotICAweGY1MDZjNmRhLCAweGU0NjI1ZTdlLCAweGEzMDhlYTk5 LCAweDRlMjNlMzNjLCAweDc5Y2JkN2NjLCAweDQ4YTE0MzY3LAotICAweGEzMTQ5NjE5LCAweGZl Yzk0YmQ1LCAweGExMTQxNzRhLCAweGVhYTAxODY2LCAweGEwODRkYjJkLCAweDA5YTg0ODZmLAot ICAweGE4ODg2MTRhLCAweDI5MDBhZjk4LCAweDAxNjY1OTkxLCAweGUxOTkyODYzLCAweGM4ZjMw YzYwLCAweDJlNzhlZjNjLAotICAweGQwZDUxOTMyLCAweGNmMGZlYzE0LCAweGY3Y2EwN2QyLCAw eGQwYTgyMDcyLCAweGZkNDExOTdlLCAweDkzMDVhNmIwLAotICAweGU4NmJlM2RhLCAweDc0YmVk M2NkLCAweDM3MmRhNTNjLCAweDRjN2Y0NDQ4LCAweGRhYjVkNDQwLCAweDZkYmEwZWMzLAotICAw eDA4MzkxOWE3LCAweDlmYmFlZWQ5LCAweDQ5ZGJjZmIwLCAweDRlNjcwYzUzLCAweDVjM2Q5YzAx LCAweDY0YmRiOTQxLAotICAweDJjMGU2MzZhLCAweGJhN2RkOWNkLCAweGVhNmY3Mzg4LCAweGU3 MGJjNzYyLCAweDM1ZjI5YWRiLCAweDVjNGNkZDhkLAotICAweGYwZDQ4ZDhjLCAweGI4ODE1M2Uy LCAweDA4YTE5ODY2LCAweDFhZTJlYWM4LCAweDI4NGNhZjg5LCAweGFhOTI4MjIzLAotICAweDkz MzRiZTUzLCAweDNiM2EyMWJmLCAweDE2NDM0YmUzLCAweDlhZWEzOTA2LCAweGVmZThjMzZlLCAw eGY4OTBjZGQ5LAotICAweDgwMjI2ZGFlLCAweGMzNDBhNGEzLCAweGRmN2U5YzA5LCAweGE2OTRh ODA3LCAweDViN2M1ZWNjLCAweDIyMWRiM2E2LAotICAweDlhNjlhMDJmLCAweDY4ODE4YTU0LCAw eGNlYjIyOTZmLCAweDUzYzA4NDNhLCAweGZlODkzNjU1LCAweDI1YmZlNjhhLAotICAweGI0NjI4 YWJjLCAweGNmMjIyZWJmLCAweDI1YWM2ZjQ4LCAweGE5YTk5Mzg3LCAweDUzYmRkYjY1LCAweGU3 NmZmYmU3LAotICAweGU5NjdmZDc4LCAweDBiYTkzNTYzLCAweDhlMzQyYmMxLCAweGU4YTExYmU5 LCAweDQ5ODA3NDBkLCAweGM4MDg3ZGZjLAotICAweDhkZTRiZjk5LCAweGExMTEwMWEwLCAweDdm ZDM3OTc1LCAweGRhNWEyNmMwLCAweGU4MWY5OTRmLCAweDk1MjhjZDg5LAotICAweGZkMzM5ZmVk LCAweGI4NzgzNGJmLCAweDVmMDQ0NTZkLCAweDIyMjU4Njk4LCAweGM5YzRjODNiLCAweDJkYzE1 NmJlLAotICAweDRmNjI4ZGFhLCAweDU3ZjU1ZWM1LCAweGUyMjIwYWJlLCAweGQyOTE2ZWJmLCAw eDRlYzc1Yjk1LCAweDI0ZjJjM2MwLAotICAweDQyZDE1ZDk5LCAweGNkMGQ3ZmEwLCAweDdiNmUy N2ZmLCAweGE4ZGM4YWYwLCAweDczNDVjMTA2LCAweGY0MWUyMzJmLAotICAweDM1MTYyMzg2LCAw eGU2ZWE4OTI2LCAweDMzMzNiMDk0LCAweDE1N2VjNmYyLCAweDM3MmI3NGFmLCAweDY5MjU3M2U0 LAotICAweGU5YTlkODQ4LCAweGYzMTYwMjg5LCAweDNhNjJlZjFkLCAweGE3ODdlMjM4LCAweGYz YTVmNjc2LCAweDc0MzY0ODUzLAotICAweDIwOTUxMDYzLCAweDQ1NzY2OThkLCAweGI2ZmFkNDA3 LCAweDU5MmFmOTUwLCAweDM2ZjczNTIzLCAweDRjZmI2ZTg3LAotICAweDdkYTRjZWMwLCAweDZj MTUyZGFhLCAweGNiMDM5NmE4LCAweGM1MGRmZTVkLCAweGZjZDcwN2FiLCAweDA5MjFjNDJmLAot ICAweDg5ZGZmMGJiLCAweDVmZTJiZTc4LCAweDQ0OGY0ZjMzLCAweDc1NDYxM2M5LCAweDJiMDVk MDhkLCAweDQ4YjlkNTg1LAotICAweGRjMDQ5NDQxLCAweGM4MDk4ZjliLCAweDdkZWRlNzg2LCAw eGMzOWEzMzczLCAweDQyNDEwMDA1LCAweDZhMDkxNzUxLAotICAweDBlZjNjOGE2LCAweDg5MDA3 MmQ2LCAweDI4MjA3NjgyLCAweGE5YTlmN2JlLCAweGJmMzI2NzlkLCAweGQ0NWI1Yjc1LAotICAw eGIzNTNmZDAwLCAweGNiYjBlMzU4LCAweDgzMGYyMjBhLCAweDFmOGZiMjE0LCAweGQzNzJjZjA4 LCAweGNjM2M0YTEzLAotICAweDhjZjYzMTY2LCAweDA2MWM4N2JlLCAweDg4Yzk4Zjg4LCAweDYw NjJlMzk3LCAweDQ3Y2Y4ZTdhLCAweGI2Yzg1MjgzLAotICAweDNjYzJhY2ZiLCAweDNmYzA2OTc2 LCAweDRlOGYwMjUyLCAweDY0ZDgzMTRkLCAweGRhMzg3MGUzLCAweDFlNjY1NDU5LAotICAweGMx MDkwOGYwLCAweDUxMzAyMWE1LCAweDZjNWI2OGI3LCAweDgyMmY4YWEwLCAweDMwMDdjZDNlLCAw eDc0NzE5ZWVmLAotICAweGRjODcyNjgxLCAweDA3MzM0MGQ0LCAweDdlNDMyZmQ5LCAweDBjNWVj MjQxLCAweDg4MDkyODZjLCAweGY1OTJkODkxLAotICAweDA4YTkzMGY2LCAweDk1N2VmMzA1LCAw eGI3ZmJmZmJkLCAweGMyNjZlOTZmLCAweDZmZTRhYzk4LCAweGIxNzNlY2MwLAotICAweGJjNjBi NDJhLCAweDk1MzQ5OGRhLCAweGZiYTFhZTEyLCAweDJkNGJkNzM2LCAweDBmMjVmYWFiLCAweGE0 ZjNmY2ViLAotICAweGUyOTY5MTIzLCAweDI1N2YwYzNkLCAweDkzNDhhZjQ5LCAweDM2MTQwMGJj LCAweGU4ODE2ZjRhLCAweDM4MTRmMjAwLAotICAweGEzZjk0MDQzLCAweDljN2E1NGMyLCAweGJj NzA0ZjU3LCAweGRhNDFlN2Y5LCAweGMyNWFkMzNhLCAweDU0ZjRhMDg0LAotICAweGIxN2Y1NTA1 LCAweDU5MzU3Y2JlLCAweGVkYmQxNWM4LCAweDdmOTdjNWFiLCAweGJhNWFjN2I1LCAweGI2ZjZk ZWFmLAotICAweDNhNDc5YzNhLCAweDUzMDJkYTI1LCAweDY1M2Q3ZTZhLCAweDU0MjY4ZDQ5LCAw eDUxYTQ3N2VhLCAweDUwMTdkNTViLAotICAweGQ3ZDI1ZDg4LCAweDQ0MTM2Yzc2LCAweDA0MDRh OGM4LCAweGI4ZTVhMTIxLCAweGI4MWE5MjhhLCAweDYwZWQ1ODY5LAotICAweDk3YzU1Yjk2LCAw eGVhZWM5OTFiLCAweDI5OTM1OTEzLCAweDAxZmRiN2YxLCAweDA4OGU4ZGZhLCAweDlhYjZmNmY1 LAotICAweDNiNGNiZjlmLCAweDRhNWRlM2FiLCAweGU2MDUxZDM1LCAweGEwZTFkODU1LCAweGQz NmI0Y2YxLCAweGY1NDRlZGViLAotICAweGIwZTkzNTI0LCAweGJlYmI4ZmJkLCAweGEyZDc2MmNm LCAweDQ5YzkyZjU0LCAweDM4YjVmMzMxLCAweDcxMjhhNDU0LAotICAweDQ4MzkyOTA1LCAweGE2 NWIxZGI4LCAweDg1MWM5N2JkLCAweGQ2NzVjZjJmCi19OwotCi1zdGF0aWMgdWludDMyIFM3W10g PSB7Ci0gIDB4ODVlMDQwMTksIDB4MzMyYmY1NjcsIDB4NjYyZGJmZmYsIDB4Y2ZjNjU2OTMsIDB4 MmE4ZDdmNmYsIDB4YWI5YmM5MTIsCi0gIDB4ZGU2MDA4YTEsIDB4MjAyOGRhMWYsIDB4MDIyN2Jj ZTcsIDB4NGQ2NDI5MTYsIDB4MThmYWMzMDAsIDB4NTBmMThiODIsCi0gIDB4MmNiMmNiMTEsIDB4 YjIzMmU3NWMsIDB4NGIzNjk1ZjIsIDB4YjI4NzA3ZGUsIDB4YTA1ZmJjZjYsIDB4Y2Q0MTgxZTks Ci0gIDB4ZTE1MDIxMGMsIDB4ZTI0ZWYxYmQsIDB4YjE2OGMzODEsIDB4ZmRlNGU3ODksIDB4NWM3 OWIwZDgsIDB4MWU4YmZkNDMsCi0gIDB4NGQ0OTUwMDEsIDB4MzhiZTQzNDEsIDB4OTEzY2VlMWQs IDB4OTJhNzljM2YsIDB4MDg5NzY2YmUsIDB4YmFlZWFkZjQsCi0gIDB4MTI4NmJlY2YsIDB4YjZl YWNiMTksIDB4MjY2MGMyMDAsIDB4NzU2NWJkZTQsIDB4NjQyNDFmN2EsIDB4ODI0OGRjYTksCi0g IDB4YzNiM2FkNjYsIDB4MjgxMzYwODYsIDB4MGJkOGRmYTgsIDB4MzU2ZDFjZjIsIDB4MTA3Nzg5 YmUsIDB4YjNiMmU5Y2UsCi0gIDB4MDUwMmFhOGYsIDB4MGJjMDM1MWUsIDB4MTY2YmY1MmEsIDB4 ZWIxMmZmODIsIDB4ZTM0ODY5MTEsIDB4ZDM0ZDc1MTYsCi0gIDB4NGU3YjNhZmYsIDB4NWY0MzY3 MWIsIDB4OWNmNmUwMzcsIDB4NDk4MWFjODMsIDB4MzM0MjY2Y2UsIDB4OGM5MzQxYjcsCi0gIDB4 ZDBkODU0YzAsIDB4Y2IzYTZjODgsIDB4NDdiYzI4MjksIDB4NDcyNWJhMzcsIDB4YTY2YWQyMmIs IDB4N2FkNjFmMWUsCi0gIDB4MGM1Y2JhZmEsIDB4NDQzN2YxMDcsIDB4YjZlNzk5NjIsIDB4NDJk MmQ4MTYsIDB4MGE5NjEyODgsIDB4ZTFhNWMwNmUsCi0gIDB4MTM3NDllNjcsIDB4NzJmYzA4MWEs IDB4YjFkMTM5ZjcsIDB4Zjk1ODM3NDUsIDB4Y2YxOWRmNTgsIDB4YmVjM2Y3NTYsCi0gIDB4YzA2 ZWJhMzAsIDB4MDcyMTFiMjQsIDB4NDVjMjg4MjksIDB4Yzk1ZTMxN2YsIDB4YmM4ZWM1MTEsIDB4 MzhiYzQ2ZTksCi0gIDB4YzZlNmZhMTQsIDB4YmFlODU4NGEsIDB4YWQ0ZWJjNDYsIDB4NDY4ZjUw OGIsIDB4NzgyOTQzNWYsIDB4ZjEyNDE4M2IsCi0gIDB4ODIxZGJhOWYsIDB4YWZmNjBmZjQsIDB4 ZWEyYzRlNmQsIDB4MTZlMzkyNjQsIDB4OTI1NDRhOGIsIDB4MDA5YjRmYzMsCi0gIDB4YWJhNjhj ZWQsIDB4OWFjOTZmNzgsIDB4MDZhNWI3OWEsIDB4YjI4NTZlNmUsIDB4MWFlYzNjYTksIDB4YmU4 Mzg2ODgsCi0gIDB4MGUwODA0ZTksIDB4NTVmMWJlNTYsIDB4ZTdlNTM2M2IsIDB4YjNhMWYyNWQs IDB4ZjdkZWJiODUsIDB4NjFmZTAzM2MsCi0gIDB4MTY3NDYyMzMsIDB4M2MwMzRjMjgsIDB4ZGE2 ZDBjNzQsIDB4NzlhYWM1NmMsIDB4M2NlNGUxYWQsIDB4NTFmMGM4MDIsCi0gIDB4OThmOGYzNWEs IDB4MTYyNmE0OWYsIDB4ZWVkODJiMjksIDB4MWQzODJmZTMsIDB4MGM0ZmI5OWEsIDB4YmIzMjU3 NzgsCi0gIDB4M2VjNmQ5N2IsIDB4NmU3N2E2YTksIDB4Y2I2NThiNWMsIDB4ZDQ1MjMwYzcsIDB4 MmJkMTQwOGIsIDB4NjBjMDNlYjcsCi0gIDB4YjkwNjhkNzgsIDB4YTMzNzU0ZjQsIDB4ZjQzMGM4 N2QsIDB4YzhhNzEzMDIsIDB4Yjk2ZDhjMzIsIDB4ZWJkNGU3YmUsCi0gIDB4YmU4YjlkMmQsIDB4 Nzk3OWZiMDYsIDB4ZTcyMjUzMDgsIDB4OGI3NWNmNzcsIDB4MTFlZjhkYTQsIDB4ZTA4M2M4NTgs Ci0gIDB4OGQ2Yjc4NmYsIDB4NWE2MzE3YTYsIDB4ZmE1Y2Y3YTAsIDB4NWRkYTAwMzMsIDB4ZjI4 ZWJmYjAsIDB4ZjViOWMzMTAsCi0gIDB4YTBlYWMyODAsIDB4MDhiOTc2N2EsIDB4YTNkOWQyYjAs IDB4NzlkMzQyMTcsIDB4MDIxYTcxOGQsIDB4OWFjNjMzNmEsCi0gIDB4MjcxMWZkNjAsIDB4NDM4 MDUwZTMsIDB4MDY5OTA4YTgsIDB4M2Q3ZmVkYzQsIDB4ODI2ZDJiZWYsIDB4NGVlYjg0NzYsCi0g IDB4NDg4ZGNmMjUsIDB4MzZjOWQ1NjYsIDB4MjhlNzRlNDEsIDB4YzI2MTBhY2EsIDB4M2Q0OWE5 Y2YsIDB4YmFlM2I5ZGYsCi0gIDB4YjY1ZjhkZTYsIDB4OTJhZWFmNjQsIDB4M2FjN2Q1ZTYsIDB4 OWVhODA1MDksIDB4ZjIyYjAxN2QsIDB4YTQxNzNmNzAsCi0gIDB4ZGQxZTE2YzMsIDB4MTVlMGQ3 ZjksIDB4NTBiMWI4ODcsIDB4MmI5ZjRmZDUsIDB4NjI1YWJhODIsIDB4NmEwMTc5NjIsCi0gIDB4 MmVjMDFiOWMsIDB4MTU0ODhhYTksIDB4ZDcxNmU3NDAsIDB4NDAwNTVhMmMsIDB4OTNkMjlhMjIs IDB4ZTMyZGJmOWEsCi0gIDB4MDU4NzQ1YjksIDB4MzQ1M2RjMWUsIDB4ZDY5OTI5NmUsIDB4NDk2 Y2ZmNmYsIDB4MWM5ZjQ5ODYsIDB4ZGZlMmVkMDcsCi0gIDB4Yjg3MjQyZDEsIDB4MTlkZTdlYWUs IDB4MDUzZTU2MWEsIDB4MTVhZDZmOGMsIDB4NjY2MjZjMWMsIDB4NzE1NGMyNGMsCi0gIDB4ZWEw ODJiMmEsIDB4OTNlYjI5MzksIDB4MTdkY2IwZjAsIDB4NThkNGYyYWUsIDB4OWVhMjk0ZmIsIDB4 NTJjZjU2NGMsCi0gIDB4OTg4M2ZlNjYsIDB4MmVjNDA1ODEsIDB4NzYzOTUzYzMsIDB4MDFkNjY5 MmUsIDB4ZDNhMGMxMDgsIDB4YTFlNzE2MGUsCi0gIDB4ZTRmMmRmYTYsIDB4NjkzZWQyODUsIDB4 NzQ5MDQ2OTgsIDB4NGMyYjBlZGQsIDB4NGY3NTc2NTYsIDB4NWQzOTMzNzgsCi0gIDB4YTEzMjIz NGYsIDB4M2QzMjFjNWQsIDB4YzNmNWUxOTQsIDB4NGIyNjkzMDEsIDB4Yzc5ZjAyMmYsIDB4M2M5 OTdlN2UsCi0gIDB4NWU0Zjk1MDQsIDB4M2ZmYWZiYmQsIDB4NzZmN2FkMGUsIDB4Mjk2NjkzZjQs IDB4M2QxZmNlNmYsIDB4YzYxZTQ1YmUsCi0gIDB4ZDNiNWFiMzQsIDB4ZjcyYmY5YjcsIDB4MWIw NDM0YzAsIDB4NGU3MmI1NjcsIDB4NTU5MmEzM2QsIDB4YjUyMjkzMDEsCi0gIDB4Y2ZkMmE4N2Ys IDB4NjBhZWI3NjcsIDB4MTgxNDM4NmIsIDB4MzBiY2MzM2QsIDB4MzhhMGMwN2QsIDB4ZmQxNjA2 ZjIsCi0gIDB4YzM2MzUxOWIsIDB4NTg5ZGQzOTAsIDB4NTQ3OWY4ZTYsIDB4MWNiOGQ2NDcsIDB4 OTdmZDYxYTksIDB4ZWE3NzU5ZjQsCi0gIDB4MmQ1NzUzOWQsIDB4NTY5YTU4Y2YsIDB4ZTg0ZTYz YWQsIDB4NDYyZTFiNzgsIDB4NjU4MGY4N2UsIDB4ZjM4MTc5MTQsCi0gIDB4OTFkYTU1ZjQsIDB4 NDBhMjMwZjMsIDB4ZDE5ODhmMzUsIDB4YjZlMzE4ZDIsIDB4M2ZmYTUwYmMsIDB4M2Q0MGYwMjEs Ci0gIDB4YzNjMGJkYWUsIDB4NDk1OGMyNGMsIDB4NTE4ZjM2YjIsIDB4ODRiMWQzNzAsIDB4MGZl ZGNlODMsIDB4ODc4ZGRhZGEsCi0gIDB4ZjJhMjc5YzcsIDB4OTRlMDFiZTgsIDB4OTA3MTZmNGIs IDB4OTU0YjhhYTMKLX07Ci0KLXN0YXRpYyB1aW50MzIgUzhbXSA9IHsKLSAgMHhlMjE2MzAwZCwg MHhiYmRkZmZmYywgMHhhN2ViZGFiZCwgMHgzNTY0ODA5NSwgMHg3Nzg5ZjhiNywgMHhlNmMxMTIx YiwKLSAgMHgwZTI0MTYwMCwgMHgwNTJjZThiNSwgMHgxMWE5Y2ZiMCwgMHhlNTk1MmYxMSwgMHhl Y2U3OTkwYSwgMHg5Mzg2ZDE3NCwKLSAgMHgyYTQyOTMxYywgMHg3NmUzODExMSwgMHhiMTJkZWYz YSwgMHgzN2RkZGRmYywgMHhkZTlhZGViMSwgMHgwYTBjYzMyYywKLSAgMHhiZTE5NzAyOSwgMHg4 NGEwMDk0MCwgMHhiYjI0M2EwZiwgMHhiNGQxMzdjZiwgMHhiNDRlNzlmMCwgMHgwNDllZWRmZCwK LSAgMHgwYjE1YTE1ZCwgMHg0ODBkMzE2OCwgMHg4YmJiZGU1YSwgMHg2NjlkZWQ0MiwgMHhjN2Vj ZTgzMSwgMHgzZjhmOTVlNywKLSAgMHg3MmRmMTkxYiwgMHg3NTgwMzMwZCwgMHg5NDA3NDI1MSwg MHg1YzdkY2RmYSwgMHhhYmJlNmQ2MywgMHhhYTQwMjE2NCwKLSAgMHhiMzAxZDQwYSwgMHgwMmU3 ZDFjYSwgMHg1MzU3MWRhZSwgMHg3YTMxODJhMiwgMHgxMmE4ZGRlYywgMHhmZGFhMzM1ZCwKLSAg MHgxNzZmNDNlOCwgMHg3MWZiNDZkNCwgMHgzODEyOTAyMiwgMHhjZTk0OWFkNCwgMHhiODQ3Njlh ZCwgMHg5NjViZDg2MiwKLSAgMHg4MmYzZDA1NSwgMHg2NmZiOTc2NywgMHgxNWI4MGI0ZSwgMHgx ZDViNDdhMCwgMHg0Y2ZkZTA2ZiwgMHhjMjhlYzRiOCwKLSAgMHg1N2U4NzI2ZSwgMHg2NDdhNzhm YywgMHg5OTg2NWQ0NCwgMHg2MDhiZDU5MywgMHg2YzIwMGUwMywgMHgzOWRjNWZmNiwKLSAgMHg1 ZDBiMDBhMywgMHhhZTYzYWZmMiwgMHg3ZThiZDYzMiwgMHg3MDEwOGMwYywgMHhiYmQzNTA0OSwg MHgyOTk4ZGYwNCwKLSAgMHg5ODBjZjQyYSwgMHg5YjZkZjQ5MSwgMHg5ZTdlZGQ1MywgMHgwNjkx ODU0OCwgMHg1OGNiN2UwNywgMHgzYjc0ZWYyZSwKLSAgMHg1MjJmZmZiMSwgMHhkMjQ3MDhjYywg MHgxYzdlMjdjZCwgMHhhNGViMjE1YiwgMHgzY2YxZDJlMiwgMHgxOWI0N2EzOCwKLSAgMHg0MjRm NzYxOCwgMHgzNTg1NjAzOSwgMHg5ZDE3ZGVlNywgMHgyN2ViMzVlNiwgMHhjOWFmZjY3YiwgMHgz NmJhZjViOCwKLSAgMHgwOWM0NjdjZCwgMHhjMTg5MTBiMSwgMHhlMTFkYmY3YiwgMHgwNmNkMWFm OCwgMHg3MTcwYzYwOCwgMHgyZDVlMzM1NCwKLSAgMHhkNGRlNDk1YSwgMHg2NGM2ZDAwNiwgMHhi Y2MwYzYyYywgMHgzZGQwMGRiMywgMHg3MDhmOGYzNCwgMHg3N2Q1MWI0MiwKLSAgMHgyNjRmNjIw ZiwgMHgyNGI4ZDJiZiwgMHgxNWMxYjc5ZSwgMHg0NmE1MjU2NCwgMHhmOGQ3ZTU0ZSwgMHgzZTM3 ODE2MCwKLSAgMHg3ODk1Y2RhNSwgMHg4NTljMTVhNSwgMHhlNjQ1OTc4OCwgMHhjMzdiYzc1Ziwg MHhkYjA3YmEwYywgMHgwNjc2YTNhYiwKLSAgMHg3ZjIyOWIxZSwgMHgzMTg0MmU3YiwgMHgyNDI1 OWZkNywgMHhmOGJlZjQ3MiwgMHg4MzVmZmNiOCwgMHg2ZGY0YzFmMiwKLSAgMHg5NmY1YjE5NSwg MHhmZDBhZjBmYywgMHhiMGZlMTM0YywgMHhlMjUwNmQzZCwgMHg0ZjliMTJlYSwgMHhmMjE1ZjIy NSwKLSAgMHhhMjIzNzM2ZiwgMHg5ZmI0YzQyOCwgMHgyNWQwNDk3OSwgMHgzNGM3MTNmOCwgMHhj NDYxODE4NywgMHhlYTdhNmU5OCwKLSAgMHg3Y2QxNmVmYywgMHgxNDM2ODc2YywgMHhmMTU0NDEw NywgMHhiZWRlZWUxNCwgMHg1NmU5YWYyNywgMHhhMDRhYTQ0MSwKLSAgMHgzY2Y3Yzg5OSwgMHg5 MmVjYmFlNiwgMHhkZDY3MDE2ZCwgMHgxNTE2ODJlYiwgMHhhODQyZWVkZiwgMHhmZGJhNjBiNCwK LSAgMHhmMTkwN2I3NSwgMHgyMGUzMDMwZiwgMHgyNGQ4YzI5ZSwgMHhlMTM5NjczYiwgMHhlZmE2 M2ZiOCwgMHg3MTg3MzA1NCwKLSAgMHhiNmYyY2YzYiwgMHg5ZjMyNjQ0MiwgMHhjYjE1YTRjYywg MHhiMDFhNDUwNCwgMHhmMWU0N2Q4ZCwgMHg4NDRhMWJlNSwKLSAgMHhiYWU3ZGZkYywgMHg0MmNi ZGE3MCwgMHhjZDdkYWUwYSwgMHg1N2U4NWI3YSwgMHhkNTNmNWFmNiwgMHgyMGNmNGQ4YywKLSAg MHhjZWE0ZDQyOCwgMHg3OWQxMzBhNCwgMHgzNDg2ZWJmYiwgMHgzM2QzY2RkYywgMHg3Nzg1M2I1 MywgMHgzN2VmZmNiNSwKLSAgMHhjNTA2ODc3OCwgMHhlNTgwYjNlNiwgMHg0ZTY4YjhmNCwgMHhj NWM4YjM3ZSwgMHgwZDgwOWVhMiwgMHgzOThmZWI3YywKLSAgMHgxMzJhNGY5NCwgMHg0M2I3OTUw ZSwgMHgyZmVlN2QxYywgMHgyMjM2MTNiZCwgMHhkZDA2Y2FhMiwgMHgzN2RmOTMyYiwKLSAgMHhj NDI0ODI4OSwgMHhhY2YzZWJjMywgMHg1NzE1ZjZiNywgMHhlZjM0NzhkZCwgMHhmMjY3NjE2Ziwg MHhjMTQ4Y2JlNCwKLSAgMHg5MDUyODE1ZSwgMHg1ZTQxMGZhYiwgMHhiNDhhMjQ2NSwgMHgyZWRh N2ZhNCwgMHhlODdiNDBlNCwgMHhlOThlYTA4NCwKLSAgMHg1ODg5ZTllMSwgMHhlZmQzOTBmYywg MHhkZDA3ZDM1YiwgMHhkYjQ4NTY5NCwgMHgzOGQ3ZTViMiwgMHg1NzcyMDEwMSwKLSAgMHg3MzBl ZGViYywgMHg1YjY0MzExMywgMHg5NDkxN2U0ZiwgMHg1MDNjMmZiYSwgMHg2NDZmMTI4MiwgMHg3 NTIzZDI0YSwKLSAgMHhlMDc3OTY5NSwgMHhmOWMxN2E4ZiwgMHg3YTViMjEyMSwgMHhkMTg3Yjg5 NiwgMHgyOTI2M2E0ZCwgMHhiYTUxMGNkZiwKLSAgMHg4MWY0N2M5ZiwgMHhhZDExNjNlZCwgMHhl YTdiNTk2NSwgMHgxYTAwNzI2ZSwgMHgxMTQwMzA5MiwgMHgwMGRhNmQ3NywKLSAgMHg0YTBjZGQ2 MSwgMHhhZDFmNDYwMywgMHg2MDViZGZiMCwgMHg5ZWVkYzM2NCwgMHgyMmViZTZhOCwgMHhjZWU3 ZDI4YSwKLSAgMHhhMGU3MzZhMCwgMHg1NTY0YTZiOSwgMHgxMDg1MzIwOSwgMHhjN2ViOGYzNywg MHgyZGU3MDVjYSwgMHg4OTUxNTcwZiwKLSAgMHhkZjA5ODIyYiwgMHhiZDY5MWE2YywgMHhhYTEy ZTRmMiwgMHg4NzQ1MWMwZiwgMHhlMGY2YTI3YSwgMHgzYWRhNDgxOSwKLSAgMHg0Y2YxNzY0Ziwg MHgwZDc3MWMyYiwgMHg2N2NkYjE1NiwgMHgzNTBkODM4NCwgMHg1OTM4ZmEwZiwgMHg0MjM5OWVm MywKLSAgMHgzNjk5N2IwNywgMHgwZTg0MDkzZCwgMHg0YWE5M2U2MSwgMHg4MzYwZDg3YiwgMHgx ZmE5OGIwYywgMHgxMTQ5MzgyYywKLSAgMHhlOTc2MjVhNSwgMHgwNjE0ZDFiNywgMHgwZTI1MjQ0 YiwgMHgwYzc2ODM0NywgMHg1ODllOGQ4MiwgMHgwZDIwNTlkMSwKLSAgMHhhNDY2YmIxZSwgMHhm OGRhMGE4MiwgMHgwNGYxOTEzMCwgMHhiYTZlNGVjMCwgMHg5OTI2NTE2NCwgMHgxZWU3MjMwZCwK LSAgMHg1MGIyYWQ4MCwgMHhlYWVlNjgwMSwgMHg4ZGIyYTI4MywgMHhlYThiZjU5ZQotfTsKLQot LyogSW5pdGlhbGl6ZSBhIGtleSBzY2hlZHVsZSBmcm9tIGEgMTI4LWJpdCBrZXkgKi8KLQotc3Rh dGljIHZvaWQKLWNhc3Rfa2V5X3NjaGVkKHNjaGVkLCBrZXkpCi0gICAgIENhc3RLZXlTY2hlZCAq IHNjaGVkOwotICAgICB1aW50OHAga2V5OwotewotICAgIHVpbnQ4cCB4MCwgeDEsIHgyLCB4Mywg eDQsIHg1LCB4NiwgeDcsIHg4LCB4OSwgeEEsIHhCLCB4QywgeEQsIHhFLCB4RjsKLSAgICB1aW50 OHAgejAsIHoxLCB6MiwgejMsIHo0LCB6NSwgejYsIHo3LCB6OCwgejksIHpBLCB6QiwgekMsIHpE LCB6RSwgekY7Ci0gICAgdWludDMyIFgwMywgWDQ3LCBYOEIsIFhDRiwgWjAzLCBaNDcsIFo4Qiwg WkNGOwotCi0jaWZkZWYgTElUVExFX0VORElBTgotICAgIHgzID0gKHVpbnQ4cCkgJlgwMzsgIHgy ID0geDMgKyAxOyAgeDEgPSB4MiArIDE7ICB4MCA9IHgxICsgMTsKLSAgICB4NyA9ICh1aW50OHAp ICZYNDc7ICB4NiA9IHg3ICsgMTsgIHg1ID0geDYgKyAxOyAgeDQgPSB4NSArIDE7Ci0gICAgeEIg PSAodWludDhwKSAmWDhCOyAgeEEgPSB4QiArIDE7ICB4OSA9IHhBICsgMTsgIHg4ID0geDkgKyAx OwotICAgIHhGID0gKHVpbnQ4cCkgJlhDRjsgIHhFID0geEYgKyAxOyAgeEQgPSB4RSArIDE7ICB4 QyA9IHhEICsgMTsKLSAgICB6MyA9ICh1aW50OHApICZaMDM7ICB6MiA9IHozICsgMTsgIHoxID0g ejIgKyAxOyAgejAgPSB6MSArIDE7Ci0gICAgejcgPSAodWludDhwKSAmWjQ3OyAgejYgPSB6NyAr IDE7ICB6NSA9IHo2ICsgMTsgIHo0ID0gejUgKyAxOwotICAgIHpCID0gKHVpbnQ4cCkgJlo4Qjsg IHpBID0gekIgKyAxOyAgejkgPSB6QSArIDE7ICB6OCA9IHo5ICsgMTsKLSAgICB6RiA9ICh1aW50 OHApICZaQ0Y7ICB6RSA9IHpGICsgMTsgIHpEID0gekUgKyAxOyAgekMgPSB6RCArIDE7Ci0jZWxz ZQotICAgIHgwID0gKHVpbnQ4cCkgJlgwMzsgIHgxID0geDAgKyAxOyAgeDIgPSB4MSArIDE7ICB4 MyA9IHgyICsgMTsKLSAgICB4NCA9ICh1aW50OHApICZYNDc7ICB4NSA9IHg0ICsgMTsgIHg2ID0g eDUgKyAxOyAgeDcgPSB4NiArIDE7Ci0gICAgeDggPSAodWludDhwKSAmWDhCOyAgeDkgPSB4OCAr IDE7ICB4QSA9IHg5ICsgMTsgIHhCID0geEEgKyAxOwotICAgIHhDID0gKHVpbnQ4cCkgJlhDRjsg IHhEID0geEMgKyAxOyAgeEUgPSB4RCArIDE7ICB4RiA9IHhFICsgMTsKLSAgICB6MCA9ICh1aW50 OHApICZaMDM7ICB6MSA9IHowICsgMTsgIHoyID0gejEgKyAxOyAgejMgPSB6MiArIDE7Ci0gICAg ejQgPSAodWludDhwKSAmWjQ3OyAgejUgPSB6NCArIDE7ICB6NiA9IHo1ICsgMTsgIHo3ID0gejYg KyAxOwotICAgIHo4ID0gKHVpbnQ4cCkgJlo4QjsgIHo5ID0gejggKyAxOyAgekEgPSB6OSArIDE7 ICB6QiA9IHpBICsgMTsKLSAgICB6QyA9ICh1aW50OHApICZaQ0Y7ICB6RCA9IHpDICsgMTsgIHpF ID0gekQgKyAxOyAgekYgPSB6RSArIDE7Ci0jZW5kaWYKLQotI2lmZGVmIExJVFRMRV9FTkRJQU4K LSAgICAqeDAgPSBrZXlbMF07Ci0gICAgKngxID0ga2V5WzFdOwotICAgICp4MiA9IGtleVsyXTsK LSAgICAqeDMgPSBrZXlbM107Ci0gICAgKng0ID0ga2V5WzRdOwotICAgICp4NSA9IGtleVs1XTsK LSAgICAqeDYgPSBrZXlbNl07Ci0gICAgKng3ID0ga2V5WzddOwotICAgICp4OCA9IGtleVs4XTsK LSAgICAqeDkgPSBrZXlbOV07Ci0gICAgKnhBID0ga2V5WzEwXTsKLSAgICAqeEIgPSBrZXlbMTFd OwotICAgICp4QyA9IGtleVsxMl07Ci0gICAgKnhEID0ga2V5WzEzXTsKLSAgICAqeEUgPSBrZXlb MTRdOwotICAgICp4RiA9IGtleVsxNV07Ci0jZWxzZQotICAgIFgwMyA9ICoodWludDMycCkga2V5 OwotICAgIFg0NyA9ICoodWludDMycCkgKGtleSArIDQpOwotICAgIFg4QiA9ICoodWludDMycCkg KGtleSArIDgpOwotICAgIFhDRiA9ICoodWludDMycCkgKGtleSArIDEyKTsKLSNlbmRpZgotCi0g IC8qIEZpcnN0IGhhbGYgb2Yga2V5IHNjaGVkdWxlICovCi0KLSAgICBaMDMgPSBYMDMgXiBTNVsq eERdIF4gUzZbKnhGXSBeIFM3Wyp4Q10gXiBTOFsqeEVdIF4gUzdbKng4XTsKLSAgICBaNDcgPSBY OEIgXiBTNVsqejBdIF4gUzZbKnoyXSBeIFM3Wyp6MV0gXiBTOFsqejNdIF4gUzhbKnhBXTsKLSAg ICBaOEIgPSBYQ0YgXiBTNVsqejddIF4gUzZbKno2XSBeIFM3Wyp6NV0gXiBTOFsqejRdIF4gUzVb Kng5XTsKLSAgICBaQ0YgPSBYNDcgXiBTNVsqekFdIF4gUzZbKno5XSBeIFM3Wyp6Ql0gXiBTOFsq ejhdIF4gUzZbKnhCXTsKLQotICAgIHNjaGVkLT5LWzBdLkttID0gUzVbKno4XSBeIFM2Wyp6OV0g XiBTN1sqejddIF4gUzhbKno2XSBeIFM1Wyp6Ml07Ci0gICAgc2NoZWQtPktbMV0uS20gPSBTNVsq ekFdIF4gUzZbKnpCXSBeIFM3Wyp6NV0gXiBTOFsqejRdIF4gUzZbKno2XTsKLSAgICBzY2hlZC0+ S1syXS5LbSA9IFM1Wyp6Q10gXiBTNlsqekRdIF4gUzdbKnozXSBeIFM4Wyp6Ml0gXiBTN1sqejld OwotICAgIHNjaGVkLT5LWzNdLkttID0gUzVbKnpFXSBeIFM2Wyp6Rl0gXiBTN1sqejFdIF4gUzhb KnowXSBeIFM4Wyp6Q107Ci0KLSAgICBYMDMgPSBaOEIgXiBTNVsqejVdIF4gUzZbKno3XSBeIFM3 Wyp6NF0gXiBTOFsqejZdIF4gUzdbKnowXTsKLSAgICBYNDcgPSBaMDMgXiBTNVsqeDBdIF4gUzZb KngyXSBeIFM3Wyp4MV0gXiBTOFsqeDNdIF4gUzhbKnoyXTsKLSAgICBYOEIgPSBaNDcgXiBTNVsq eDddIF4gUzZbKng2XSBeIFM3Wyp4NV0gXiBTOFsqeDRdIF4gUzVbKnoxXTsKLSAgICBYQ0YgPSBa Q0YgXiBTNVsqeEFdIF4gUzZbKng5XSBeIFM3Wyp4Ql0gXiBTOFsqeDhdIF4gUzZbKnozXTsKLQot ICAgIHNjaGVkLT5LWzRdLkttID0gUzVbKngzXSBeIFM2Wyp4Ml0gXiBTN1sqeENdIF4gUzhbKnhE XSBeIFM1Wyp4OF07Ci0gICAgc2NoZWQtPktbNV0uS20gPSBTNVsqeDFdIF4gUzZbKngwXSBeIFM3 Wyp4RV0gXiBTOFsqeEZdIF4gUzZbKnhEXTsKLSAgICBzY2hlZC0+S1s2XS5LbSA9IFM1Wyp4N10g XiBTNlsqeDZdIF4gUzdbKng4XSBeIFM4Wyp4OV0gXiBTN1sqeDNdOwotICAgIHNjaGVkLT5LWzdd LkttID0gUzVbKng1XSBeIFM2Wyp4NF0gXiBTN1sqeEFdIF4gUzhbKnhCXSBeIFM4Wyp4N107Ci0K LSAgICBaMDMgPSBYMDMgXiBTNVsqeERdIF4gUzZbKnhGXSBeIFM3Wyp4Q10gXiBTOFsqeEVdIF4g UzdbKng4XTsKLSAgICBaNDcgPSBYOEIgXiBTNVsqejBdIF4gUzZbKnoyXSBeIFM3Wyp6MV0gXiBT OFsqejNdIF4gUzhbKnhBXTsKLSAgICBaOEIgPSBYQ0YgXiBTNVsqejddIF4gUzZbKno2XSBeIFM3 Wyp6NV0gXiBTOFsqejRdIF4gUzVbKng5XTsKLSAgICBaQ0YgPSBYNDcgXiBTNVsqekFdIF4gUzZb Kno5XSBeIFM3Wyp6Ql0gXiBTOFsqejhdIF4gUzZbKnhCXTsKLQotICAgIHNjaGVkLT5LWzhdLktt ID0gUzVbKnozXSBeIFM2Wyp6Ml0gXiBTN1sqekNdIF4gUzhbKnpEXSBeIFM1Wyp6OV07Ci0gICAg c2NoZWQtPktbOV0uS20gPSBTNVsqejFdIF4gUzZbKnowXSBeIFM3Wyp6RV0gXiBTOFsqekZdIF4g UzZbKnpDXTsKLSAgICBzY2hlZC0+S1sxMF0uS20gPSBTNVsqejddIF4gUzZbKno2XSBeIFM3Wyp6 OF0gXiBTOFsqejldIF4gUzdbKnoyXTsKLSAgICBzY2hlZC0+S1sxMV0uS20gPSBTNVsqejVdIF4g UzZbKno0XSBeIFM3Wyp6QV0gXiBTOFsqekJdIF4gUzhbKno2XTsKLQotICAgIFgwMyA9IFo4QiBe IFM1Wyp6NV0gXiBTNlsqejddIF4gUzdbKno0XSBeIFM4Wyp6Nl0gXiBTN1sqejBdOwotICAgIFg0 NyA9IFowMyBeIFM1Wyp4MF0gXiBTNlsqeDJdIF4gUzdbKngxXSBeIFM4Wyp4M10gXiBTOFsqejJd OwotICAgIFg4QiA9IFo0NyBeIFM1Wyp4N10gXiBTNlsqeDZdIF4gUzdbKng1XSBeIFM4Wyp4NF0g XiBTNVsqejFdOwotICAgIFhDRiA9IFpDRiBeIFM1Wyp4QV0gXiBTNlsqeDldIF4gUzdbKnhCXSBe IFM4Wyp4OF0gXiBTNlsqejNdOwotCi0gICAgc2NoZWQtPktbMTJdLkttID0gUzVbKng4XSBeIFM2 Wyp4OV0gXiBTN1sqeDddIF4gUzhbKng2XSBeIFM1Wyp4M107Ci0gICAgc2NoZWQtPktbMTNdLktt ID0gUzVbKnhBXSBeIFM2Wyp4Ql0gXiBTN1sqeDVdIF4gUzhbKng0XSBeIFM2Wyp4N107Ci0gICAg c2NoZWQtPktbMTRdLkttID0gUzVbKnhDXSBeIFM2Wyp4RF0gXiBTN1sqeDNdIF4gUzhbKngyXSBe IFM3Wyp4OF07Ci0gICAgc2NoZWQtPktbMTVdLkttID0gUzVbKnhFXSBeIFM2Wyp4Rl0gXiBTN1sq eDFdIF4gUzhbKngwXSBeIFM4Wyp4RF07Ci0KLSAgLyogU2Vjb25kIGhhbGYgb2Yga2V5IHNjaGVk dWxlIC0ganVzdCBsaWtlIGZpcnN0IGhhbGYgKi8KLQotICAgIFowMyA9IFgwMyBeIFM1Wyp4RF0g XiBTNlsqeEZdIF4gUzdbKnhDXSBeIFM4Wyp4RV0gXiBTN1sqeDhdOwotICAgIFo0NyA9IFg4QiBe IFM1Wyp6MF0gXiBTNlsqejJdIF4gUzdbKnoxXSBeIFM4Wyp6M10gXiBTOFsqeEFdOwotICAgIFo4 QiA9IFhDRiBeIFM1Wyp6N10gXiBTNlsqejZdIF4gUzdbKno1XSBeIFM4Wyp6NF0gXiBTNVsqeDld OwotICAgIFpDRiA9IFg0NyBeIFM1Wyp6QV0gXiBTNlsqejldIF4gUzdbKnpCXSBeIFM4Wyp6OF0g XiBTNlsqeEJdOwotCi0gICAgc2NoZWQtPktbMF0uS3IgPSAoUzVbKno4XSBeIFM2Wyp6OV0gXiBT N1sqejddIF4gUzhbKno2XSBeIFM1Wyp6Ml0pICYgMHgxZjsKLSAgICBzY2hlZC0+S1sxXS5LciA9 IChTNVsqekFdIF4gUzZbKnpCXSBeIFM3Wyp6NV0gXiBTOFsqejRdIF4gUzZbKno2XSkgJiAweDFm OwotICAgIHNjaGVkLT5LWzJdLktyID0gKFM1Wyp6Q10gXiBTNlsqekRdIF4gUzdbKnozXSBeIFM4 Wyp6Ml0gXiBTN1sqejldKSAmIDB4MWY7Ci0gICAgc2NoZWQtPktbM10uS3IgPSAoUzVbKnpFXSBe IFM2Wyp6Rl0gXiBTN1sqejFdIF4gUzhbKnowXSBeIFM4Wyp6Q10pICYgMHgxZjsKLQotICAgIFgw MyA9IFo4QiBeIFM1Wyp6NV0gXiBTNlsqejddIF4gUzdbKno0XSBeIFM4Wyp6Nl0gXiBTN1sqejBd OwotICAgIFg0NyA9IFowMyBeIFM1Wyp4MF0gXiBTNlsqeDJdIF4gUzdbKngxXSBeIFM4Wyp4M10g XiBTOFsqejJdOwotICAgIFg4QiA9IFo0NyBeIFM1Wyp4N10gXiBTNlsqeDZdIF4gUzdbKng1XSBe IFM4Wyp4NF0gXiBTNVsqejFdOwotICAgIFhDRiA9IFpDRiBeIFM1Wyp4QV0gXiBTNlsqeDldIF4g UzdbKnhCXSBeIFM4Wyp4OF0gXiBTNlsqejNdOwotCi0gICAgc2NoZWQtPktbNF0uS3IgPSAoUzVb KngzXSBeIFM2Wyp4Ml0gXiBTN1sqeENdIF4gUzhbKnhEXSBeIFM1Wyp4OF0pICYgMHgxZjsKLSAg ICBzY2hlZC0+S1s1XS5LciA9IChTNVsqeDFdIF4gUzZbKngwXSBeIFM3Wyp4RV0gXiBTOFsqeEZd IF4gUzZbKnhEXSkgJiAweDFmOwotICAgIHNjaGVkLT5LWzZdLktyID0gKFM1Wyp4N10gXiBTNlsq eDZdIF4gUzdbKng4XSBeIFM4Wyp4OV0gXiBTN1sqeDNdKSAmIDB4MWY7Ci0gICAgc2NoZWQtPktb N10uS3IgPSAoUzVbKng1XSBeIFM2Wyp4NF0gXiBTN1sqeEFdIF4gUzhbKnhCXSBeIFM4Wyp4N10p ICYgMHgxZjsKLQotICAgIFowMyA9IFgwMyBeIFM1Wyp4RF0gXiBTNlsqeEZdIF4gUzdbKnhDXSBe IFM4Wyp4RV0gXiBTN1sqeDhdOwotICAgIFo0NyA9IFg4QiBeIFM1Wyp6MF0gXiBTNlsqejJdIF4g UzdbKnoxXSBeIFM4Wyp6M10gXiBTOFsqeEFdOwotICAgIFo4QiA9IFhDRiBeIFM1Wyp6N10gXiBT NlsqejZdIF4gUzdbKno1XSBeIFM4Wyp6NF0gXiBTNVsqeDldOwotICAgIFpDRiA9IFg0NyBeIFM1 Wyp6QV0gXiBTNlsqejldIF4gUzdbKnpCXSBeIFM4Wyp6OF0gXiBTNlsqeEJdOwotCi0gICAgc2No ZWQtPktbOF0uS3IgPSAoUzVbKnozXSBeIFM2Wyp6Ml0gXiBTN1sqekNdIF4gUzhbKnpEXSBeIFM1 Wyp6OV0pICYgMHgxZjsKLSAgICBzY2hlZC0+S1s5XS5LciA9IChTNVsqejFdIF4gUzZbKnowXSBe IFM3Wyp6RV0gXiBTOFsqekZdIF4gUzZbKnpDXSkgJiAweDFmOwotICAgIHNjaGVkLT5LWzEwXS5L ciA9IChTNVsqejddIF4gUzZbKno2XSBeIFM3Wyp6OF0gXiBTOFsqejldIF4gUzdbKnoyXSkgJiAw eDFmOwotICAgIHNjaGVkLT5LWzExXS5LciA9IChTNVsqejVdIF4gUzZbKno0XSBeIFM3Wyp6QV0g XiBTOFsqekJdIF4gUzhbKno2XSkgJiAweDFmOwotCi0gICAgWDAzID0gWjhCIF4gUzVbKno1XSBe IFM2Wyp6N10gXiBTN1sqejRdIF4gUzhbKno2XSBeIFM3Wyp6MF07Ci0gICAgWDQ3ID0gWjAzIF4g UzVbKngwXSBeIFM2Wyp4Ml0gXiBTN1sqeDFdIF4gUzhbKngzXSBeIFM4Wyp6Ml07Ci0gICAgWDhC ID0gWjQ3IF4gUzVbKng3XSBeIFM2Wyp4Nl0gXiBTN1sqeDVdIF4gUzhbKng0XSBeIFM1Wyp6MV07 Ci0gICAgWENGID0gWkNGIF4gUzVbKnhBXSBeIFM2Wyp4OV0gXiBTN1sqeEJdIF4gUzhbKng4XSBe IFM2Wyp6M107Ci0KLSAgICBzY2hlZC0+S1sxMl0uS3IgPSAoUzVbKng4XSBeIFM2Wyp4OV0gXiBT N1sqeDddIF4gUzhbKng2XSBeIFM1Wyp4M10pICYgMHgxZjsKLSAgICBzY2hlZC0+S1sxM10uS3Ig PSAoUzVbKnhBXSBeIFM2Wyp4Ql0gXiBTN1sqeDVdIF4gUzhbKng0XSBeIFM2Wyp4N10pICYgMHgx ZjsKLSAgICBzY2hlZC0+S1sxNF0uS3IgPSAoUzVbKnhDXSBeIFM2Wyp4RF0gXiBTN1sqeDNdIF4g UzhbKngyXSBeIFM3Wyp4OF0pICYgMHgxZjsKLSAgICBzY2hlZC0+S1sxNV0uS3IgPSAoUzVbKnhF XSBeIFM2Wyp4Rl0gXiBTN1sqeDFdIF4gUzhbKngwXSBeIFM4Wyp4RF0pICYgMHgxZjsKLX0KLQot LyogSW5pdGlhbGl6ZSB3aXRoIGEgZnVsbC1zdHJlbmd0aCAxMjgtYml0IGtleSAqLwotCi0jaWZu ZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KLXZvaWQKLWNrX2Nhc3QxMjhfa2V5X3NjaGVkKHNj aGVkLCBrZXkpCi0gICAgQ2FzdEtleVNjaGVkICogc2NoZWQ7Ci0gICAgdWludDggKiBrZXk7Ci17 Ci0gICAgc2NoZWQtPmtzaXplID0gMTY7Ci0gICAgY2FzdF9rZXlfc2NoZWQoc2NoZWQsIGtleSk7 Ci19Ci0jZW5kaWYKLQotLyogSGFuZGxlIHJlZHVjZWQta2V5c2l6ZSB2YXJpYW50cyAqLwotCi1z dGF0aWMgdm9pZAotY2FzdDVfa2V5X3NjaGVkKHNjaGVkLCBrZXksIHN6KQotICAgIENhc3RLZXlT Y2hlZCAqIHNjaGVkOwotICAgIHVpbnQ4ICoga2V5OwotICAgIGludCBzejsKLXsKLSAgICB1aW50 OCBidWZbMTZdOwotCi0gICAgc2NoZWQtPmtzaXplID0gc3o7Ci0gICAgbWVtc2V0KGJ1ZiwgMCwg c2l6ZW9mKGJ1ZikpOwotICAgIG1lbWNweShidWYsIGtleSwgc3opOwotICAgIGNhc3Rfa2V5X3Nj aGVkKHNjaGVkLCBidWYpOwotfQotCi0vKiA0MCwgNjQsIGFuZCA4MC1iaXQga2V5cyAtIGFsbCB1 c2UgMTIgcm91bmRzICovCi0KLXZvaWQKLWNrX2Nhc3Q1XzQwX2tleV9zY2hlZChzY2hlZCwga2V5 KQotICAgIENhc3RLZXlTY2hlZCAqIHNjaGVkOwotICAgIHVpbnQ4ICoga2V5OwotewotICAgIGNh c3Q1X2tleV9zY2hlZChzY2hlZCwga2V5LCA1KTsKLX0KLQotI2lmbmRlZiBDQVNUX0VYUE9SVF9F TkNSWVBUSU9OCi12b2lkCi1ja19jYXN0NV82NF9rZXlfc2NoZWQoc2NoZWQsIGtleSkKLSAgICAg Q2FzdEtleVNjaGVkICogc2NoZWQ7Ci0gICAgIHVpbnQ4ICoga2V5OwotewotICAgIGNhc3Q1X2tl eV9zY2hlZChzY2hlZCwga2V5LCA4KTsKLX0KLQotdm9pZAotY2tfY2FzdDVfODBfa2V5X3NjaGVk KHNjaGVkLCBrZXkpCi0gICAgIENhc3RLZXlTY2hlZCAqIHNjaGVkOwotICAgICB1aW50OCAqIGtl eTsKLXsKLSAgICBjYXN0NV9rZXlfc2NoZWQoc2NoZWQsIGtleSwgMTApOwotfQotI2VuZGlmIC8q IENBU1RfRVhQT1JUX0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAvKiBDS19DQVNUICovCi0KLSNpZmRl ZiBDUllQVF9ETEwKLXN0YXRpYyBjaGFyICoKLWNrX2NyeXB0X2RsbF92ZXJzaW9uKCkKLXsKLSAg ICByZXR1cm4oY2tjcnB2KTsKLX0KLQotaW50Ci1jcnlwdF9kbGxfaW5pdCggc3RydWN0IF9jcnlw dF9kbGxfaW5pdCAqIGluaXQgKQotewotI2lmZGVmIExJQkRFUwotICAgIGV4dGVybiBpbnQgZGVz X2NoZWNrX2tleTsKLSAgICBleHRlcm4gdm9pZCBsaWJkZXNfZGxsX2luaXQoc3RydWN0IF9jcnlw dF9kbGxfaW5pdCAqKTsKLSAgICBkZXNfY2hlY2tfa2V5ID0gMTsKLSNlbmRpZiAvKiBMSUJERVMg Ki8KLQotICAgIGlmICggaW5pdC0+dmVyc2lvbiA+PSAxICkgewotICAgICAgICBwX3R0b2wgPSBp bml0LT5wX3R0b2w7Ci0gICAgICAgIHBfZG9kZWJ1ZyA9IGluaXQtPnBfZG9kZWJ1ZzsKLSAgICAg ICAgcF9kb2hleGR1bXAgPSBpbml0LT5wX2RvaGV4ZHVtcDsKLSAgICAgICAgcF90bl9kZWJ1ZyA9 IGluaXQtPnBfdG5fZGVidWc7Ci0gICAgICAgIHBfdnNjcm5wcmludGYgPSBpbml0LT5wX3ZzY3Ju cHJpbnRmOwotICAgICAgICBpZiAoIGluaXQtPnZlcnNpb24gPT0gMSApCi0gICAgICAgICAgICBy ZXR1cm4oMSk7Ci0gICAgfQotICAgIGlmICggaW5pdC0+dmVyc2lvbiA+PSAyICkgewotICAgICAg ICAvKiBUaGlzIGlzIGEgazVfY29udGV4dCBidXQgd2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIGty YjUuaCAqLwotICAgICAgICBwX2s1X2NvbnRleHQgPSAodm9pZCAqKSBpbml0LT5wX2s1X2NvbnRl eHQ7Ci0gICAgICAgIGlmICggaW5pdC0+dmVyc2lvbiA9PSAyICkKLSAgICAgICAgICAgIHJldHVy bigxKTsKLSAgICB9Ci0gICAgaWYgKCBpbml0LT52ZXJzaW9uID49IDMgKSB7Ci0gICAgICAgIGlu aXQtPnBfaW5zdGFsbF9mdW5jcygiZW5jcnlwdF9wYXJzZSIsZW5jcnlwdF9wYXJzZSk7Ci0gICAg ICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygiZW5jcnlwdF9pbml0IixlbmNyeXB0X2luaXQpOwot ICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImVuY3J5cHRfc2Vzc2lvbl9rZXkiLGVuY3J5 cHRfc2Vzc2lvbl9rZXkpOwotICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImVuY3J5cHRf c2VuZF9yZXF1ZXN0X3N0YXJ0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5 cHRfc2VuZF9yZXF1ZXN0X3N0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImVuY3J5cHRfcmVxdWVzdF9zdGFydCIsZW5j cnlwdF9yZXF1ZXN0X3N0YXJ0KTsKLSAgICAgICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJlbmNy eXB0X3NlbmRfcmVxdWVzdF9lbmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5j cnlwdF9zZW5kX3JlcXVlc3RfZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImVuY3J5cHRfcmVxdWVzdF9lbmQiLGVuY3J5 cHRfcmVxdWVzdF9lbmQpOwotICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImVuY3J5cHRf c2VuZF9lbmQiLGVuY3J5cHRfc2VuZF9lbmQpOwotICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVu Y3MoImVuY3J5cHRfc2VuZF9zdXBwb3J0IixlbmNyeXB0X3NlbmRfc3VwcG9ydCk7Ci0gICAgICAg IGluaXQtPnBfaW5zdGFsbF9mdW5jcygiZW5jcnlwdF9pc19lbmNyeXB0aW5nIixlbmNyeXB0X2lz X2VuY3J5cHRpbmcpOwotICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImVuY3J5cHRfaXNf ZGVjcnlwdGluZyIsZW5jcnlwdF9pc19kZWNyeXB0aW5nKTsKLSAgICAgICAgaW5pdC0+cF9pbnN0 YWxsX2Z1bmNzKCJnZXRfY3J5cHRfdGFibGUiLGdldF9jcnlwdF90YWJsZSk7Ci0gICAgICAgIGlu aXQtPnBfaW5zdGFsbF9mdW5jcygiZGVzX2lzX3dlYWtfa2V5Iixja19kZXNfaXNfd2Vha19rZXkp OwotICAgICAgICBsaWJkZXNfZGxsX2luaXQoaW5pdCk7Ci0gICAgICAgIGlmIChpbml0LT52ZXJz aW9uID09IDMpCi0gICAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLSAgICBpZiAoIGluaXQtPnZl cnNpb24gPj0gNCApIHsKLSAgICAgICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJjcnlwdF9kbGxf dmVyc2lvbiIsY2tfY3J5cHRfZGxsX3ZlcnNpb24pOwotICAgICAgICBpZiAoaW5pdC0+dmVyc2lv biA9PSA0KQotICAgICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0KLSAgICBpZiAoIGluaXQtPnZl cnNpb24gPj0gNSApIHsKLSAgICAgICAgcF9yZXF0ZWxtdXRleCA9IGluaXQtPnBfcmVxdGVsbXV0 ZXg7Ci0gICAgICAgIHBfcmVsdGVsbXV0ZXggPSBpbml0LT5wX3JlbHRlbG11dGV4OwotICAgICAg ICBpZiAoaW5pdC0+dmVyc2lvbiA9PSA1KQotICAgICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0K LSAgICBpZiAoIGluaXQtPnZlcnNpb24gPj0gNiApIHsKLSAgICAgICAgaW5pdC0+cF9pbnN0YWxs X2Z1bmNzKCJlbmNyeXB0X2RvbnRfc3VwcG9ydCIsZW5jcnlwdF9kb250X3N1cHBvcnQpOwotICAg ICAgICBpZiAoIGluaXQtPnZlcnNpb24gPT0gNiApCi0gICAgICAgICAgICByZXR1cm4oMSk7Ci0g ICAgICAgIC8qIHdoZW4gYWRkaW5nIG5ldyB2ZXJzaW9uczsgbWlncmF0ZSB0aGUgbmV4dCB0d28g bGluZXMgKi8KLSAgICAgICAgaW5pdC0+dmVyc2lvbiA9IDY7Ci0gICAgICAgIHJldHVybigxKTsK LSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0jdW5kZWYgbWFsbG9jCi0jdW5kZWYgcmVhbGxv YwotI3VuZGVmIGZyZWUKLSN1bmRlZiBzdHJkdXAKLQotc3RhdGljIHZvaWQKLWZhdGFsKGNoYXIg Km1zZykgewotICAgIGlmICghbXNnKSBtc2cgPSAiIjsKLQotICAgIHByaW50Zihtc2cpOwotICAg IGV4aXQoMSk7ICAgICAgICAvKiBFeGl0IGluZGljYXRpbmcgZmFpbHVyZSAqLwotfQotCi12b2lk ICoKLWttYWxsb2Moc2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCAqcHRyOwotCi0gICAgaWYgKHNp emUgPT0gMCkgewotICAgICAgICBmYXRhbCgia21hbGxvYzogemVybyBzaXplIik7Ci0gICAgfQot ICAgIHB0ciA9IG1hbGxvYyhzaXplKTsKLSAgICBpZiAocHRyID09IE5VTEwpIHsKLSAgICAgICAg ZmF0YWwoImttYWxsb2M6IG91dCBvZiBtZW1vcnkiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHB0cjsK LX0KLQotdm9pZCAqCi1rcmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKLXsKLSAg ICB2b2lkICpuZXdfcHRyOwotCi0gICAgaWYgKG5ld19zaXplID09IDApIHsKLSAgICAgICAgZmF0 YWwoImtyZWFsbG9jOiB6ZXJvIHNpemUiKTsKLSAgICB9Ci0gICAgaWYgKHB0ciA9PSBOVUxMKQot ICAgICAgICBuZXdfcHRyID0gbWFsbG9jKG5ld19zaXplKTsKLSAgICBlbHNlCi0gICAgICAgIG5l d19wdHIgPSByZWFsbG9jKHB0ciwgbmV3X3NpemUpOwotICAgIGlmIChuZXdfcHRyID09IE5VTEwp IHsKLSAgICAgICAgZmF0YWwoImtyZWFsbG9jOiBvdXQgb2YgbWVtb3J5Iik7Ci0gICAgfQotICAg IHJldHVybiBuZXdfcHRyOwotfQotCi12b2lkCi1rZnJlZSh2b2lkICpwdHIpCi17Ci0gICAgaWYg KHB0ciA9PSBOVUxMKSB7Ci0gICAgICAgIHByaW50Zigia2ZyZWU6IE5VTEwgcG9pbnRlciBnaXZl biBhcyBhcmd1bWVudCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGZyZWUocHRyKTsK LX0KLQotY2hhciAqCi1rc3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKLXsKLSAgICBzaXplX3QgbGVu OwotICAgIGNoYXIgKmNwOwotCi0gICAgaWYgKHN0ciA9PSBOVUxMKSB7Ci0gICAgICAgIGZhdGFs KCJrc3RyZHVwOiBOVUxMIHBvaW50ZXIgZ2l2ZW4gYXMgYXJndW1lbnQiKTsKLSAgICB9Ci0gICAg bGVuID0gc3RybGVuKHN0cikgKyAxOwotICAgIGNwID0ga21hbGxvYyhsZW4pOwotICAgIGlmIChj cCkKLSAgICAgICAgbWVtY3B5KGNwLCBzdHIsIGxlbik7Ci0gICAgcmV0dXJuIGNwOwotfQotI2Vu ZGlmIC8qIENSWVBUX0RMTCAqLwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KCmRpZmYgLS1n aXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrX2Rlcy5jIGIvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja19kZXMuYwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggYzUzNDY1Mi4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrX2Rlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAs MCBAQAotLyoKLSAgQyBLIF8gRCBFIFMgLiBDICAtICBsaWJERVMgaW50ZXJmYWNlIGZvciBLZXJt aXQgOTUiCi0KLSAgQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAxLCBUcnVzdGVlcyBvZiBDb2x1bWJp YSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldwotICBZb3JrLiAgVGhlIEMtS2VybWl0IHNv ZnR3YXJlIG1heSBub3QgYmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGxpY2Vuc2VkIG9yCi0gIHNv bGQgZm9yIHByb2ZpdCBhcyBhIHNvZnR3YXJlIHByb2R1Y3QgaXRzZWxmLCBub3IgbWF5IGl0IGJl IGluY2x1ZGVkIGluIG9yCi0gIGRpc3RyaWJ1dGVkIHdpdGggY29tbWVyY2lhbCBwcm9kdWN0cyBv ciBvdGhlcndpc2UgZGlzdHJpYnV0ZWQgYnkgY29tbWVyY2lhbAotICBjb25jZXJucyB0byB0aGVp ciBjbGllbnRzIG9yIGN1c3RvbWVycyB3aXRob3V0IHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUK LSAgT2ZmaWNlIG9mIEtlcm1pdCBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uLCBDb2x1bWJp YSBVbml2ZXJzaXR5LiAgVGhpcwotICBjb3B5cmlnaHQgbm90aWNlIG11c3Qgbm90IGJlIHJlbW92 ZWQsIGFsdGVyZWQsIG9yIG9ic2N1cmVkLgotCi0gIEF1dGhvcjoKLSAgSmVmZnJleSBFIEFsdG1h biAoamFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbSkKLSovCi0KLS8qCi0gICBUaGlzIGZpbGUg Y29udGFpbnMgd3JhcHBlcnMgc28gdGhhdCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3aWxsIGJl IGltcG9ydGVkCi0gICBpbnRvIHRoZSBrOTVjcnlwdC5kbGwvazJjcnlwdC5kbGwgZmlsZXMgaW4g c3VjaCBhIGZvcm0gdGhhdCB0aGV5IGNhbiBiZQotICAgcmUtZXhwb3J0ZWQgdG8gazk1LmV4ZS9r Mi5leGUuICBUaGlzIHN1YnNldCBvZiB0aGUgREVTIGxpYnJhcnkgaXMgbmVlZGVkIHRvCi0gICBw cm92aWRlIERFUyBiYXNlZCBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbi4KLSovCi0KLQotI2lmZGVm IExJQkRFUwotLyogVGhlIGZvbGxvd2luZyBpcyBzcGVjaWZpYyB0byBteSBpbnN0YWxsYXRpb24s IGJ1dCBzaW5jZSBJJ20gdGhlIG9ubHkgb25lICovCi0vKiB0aGF0IHVzZXMgdGhpcyBmaWxlIC4u LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNp bmNsdWRlICJja2NkZWIuaCIKLSNpbmNsdWRlICJja3VhdGguaCIKLSNkZWZpbmUgQ0tfREVTX0MK LSNpbmNsdWRlICJja3VhdDIuaCIKLSNpZmRlZiBOVAotI2lmZGVmIF9NX0FMUEhBCi0jaW5jbHVk ZSA8Yzpcc3JwXGRlc1xkZXMuaD4KLSNlbHNlCi0jaW5jbHVkZSA8Yzpcc3JjXHNycFxkZXNcZGVz Lmg+Ci0jZW5kaWYKLSNlbHNlCi0jaW5jbHVkZSA8Yzpcc3JwXGRlc1xkZXMuaD4KLSNlbmRpZgot Ci1pbnQKLWxpYmRlc19yYW5kb21fa2V5KGRlc19jYmxvY2sgQikKLXsKLSAgICBkZXNfcmFuZG9t X2tleShCKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLXZvaWQKLWxpYmRlc19yYW5kb21fc2VlZChk ZXNfY2Jsb2NrIEIpCi17Ci0gICAgZGVzX3JhbmRvbV9zZWVkKEIpOwotfQotCi12b2lkCi1saWJk ZXNfa2V5X3NjaGVkKGRlc19jYmxvY2sgKiBCLCBkZXNfa2V5X3NjaGVkdWxlIFMpCi17Ci0gICAg ZGVzX2tleV9zY2hlZChCLFMpOwotfQotCi12b2lkCi1saWJkZXNfZWNiX2VuY3J5cHQoZGVzX2Ni bG9jayAqIEIxLCBkZXNfY2Jsb2NrICogQjIsIGRlc19rZXlfc2NoZWR1bGUgUywgaW50IG4pCi17 Ci0gICAgZGVzX2VjYl9lbmNyeXB0KEIxLEIyLFMsbik7Ci19Ci0KLWludAotbGliZGVzX3N0cmlu Z190b19rZXkoY2hhciAqIHMsIGRlc19jYmxvY2sgKiBCKQotewotICAgIGRlc19zdHJpbmdfdG9f a2V5KHMsQik7Ci0gICAgcmV0dXJuKDApOwotfQotCi12b2lkCi1saWJkZXNfZml4dXBfa2V5X3Bh cml0eShkZXNfY2Jsb2NrICogQikKLXsKLSAgICBkZXNfc2V0X29kZF9wYXJpdHkoQik7Ci19Ci0K LXZvaWQKLWxpYmRlc19wY2JjX2VuY3J5cHQoZGVzX2NibG9jayAqaW5wdXQsIGRlc19jYmxvY2sg Km91dHB1dCwgbG9uZyBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICBkZXNfa2V5X3NjaGVk dWxlIHNjaGVkdWxlLCBkZXNfY2Jsb2NrICppdmVjLCBpbnQgZW5jKQotewotICAgIGRlc19wY2Jj X2VuY3J5cHQoaW5wdXQsb3V0cHV0LGxlbmd0aCxzY2hlZHVsZSxpdmVjLGVuYyk7Ci19Ci0KLXZv aWQKLWxpYmRlc19kbGxfaW5pdChzdHJ1Y3QgX2NyeXB0X2RsbF9pbml0ICogaW5pdCkKLXsKLSAg ICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImxpYmRlc19yYW5kb21fa2V5IixsaWJkZXNfcmFuZG9t X2tleSk7Ci0gICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJsaWJkZXNfcmFuZG9tX3NlZWQiLGxp YmRlc19yYW5kb21fc2VlZCk7Ci0gICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJsaWJkZXNfa2V5 X3NjaGVkIixsaWJkZXNfa2V5X3NjaGVkKTsKLSAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImxp YmRlc19lY2JfZW5jcnlwdCIsbGliZGVzX2VjYl9lbmNyeXB0KTsKLSAgICBpbml0LT5wX2luc3Rh bGxfZnVuY3MoImxpYmRlc19zdHJpbmdfdG9fa2V5IixsaWJkZXNfc3RyaW5nX3RvX2tleSk7Ci0g ICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJsaWJkZXNfZml4dXBfa2V5X3Bhcml0eSIsbGliZGVz X2ZpeHVwX2tleV9wYXJpdHkpOwotICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygibGliZGVzX3Bj YmNfZW5jcnlwdCIsbGliZGVzX3BjYmNfZW5jcnlwdCk7Ci0KLX0KLSNlbmRpZiAvKiBMSUJERVMg Ki8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr X3NzbC5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja19zc2wuYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI4ZmI3Yy4uMDAwMDAwMAotLS0gYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrX3NzbC5jCisrKyAvZGV2L251bGwK QEAgLTEsNDM1OCArMCwwIEBACi1jaGFyICpja3NzbHYgPSAiU1NML1RMUyBzdXBwb3J0LCA5LjAu MjI3LCAwNCBBdWcgMjAxMCI7Ci0vKgotICBDIEsgXyBTIFMgTCAuIEMgLS0gIE9wZW5TU0wgSW50 ZXJmYWNlIGZvciBDLUtlcm1pdAotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMCwKLSAgICBU cnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgot ICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZp bGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3Ig ZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0KLSAgICBBdXRob3I6ICBKZWZmcmV5IEUgQWx0 bWFuIChqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tKQotICAgICAgICAgICAgICAgU2VjdXJl IEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5Ci0KLSAgUHJvdmlkZXM6Ci0KLSAgLiBUZWxu ZXQgQXV0aCBTU0wgb3B0aW9uIGNvbXBhdGlibGUgd2l0aCBUaW0gSHVkc29uJ3MgaGFjay4KLSAg LiBUZWxuZXQgU1RBUlRfVExTIG9wdGlvbgotICAuIENvbmZpZ3VyYXRpb24gb2YgY2VydGlmaWNh dGUgYW5kIGtleSBmaWxlcwotICAuIENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBhbmQgcmV2b2Nh dGlvbiBsaXN0IGNoZWNrcwotICAuIENsaWVudCBjZXJ0aWZpY2F0ZSB0byB1c2VyIGlkIHJvdXRp bmUKLQotICBOb3RlOiBUaGlzIGNvZGUgaXMgd3JpdHRlbiB0byBiZSBjb21wYXRpYmxlIHdpdGgg T3BlblNTTCAwLjkuNlthYmNkZWZnaF0KLSAgYW5kIDAuOS43IGJldGEgNSAoYW5kLCBwcmVzdW1h Ymx5LCBsYXRlcikuCi0gIEl0IHdpbGwgYWxzbyBjb21waWxlIHdpdGggdmVyc2lvbiAwLjkuNSBh bHRob3VnaCB0aGF0IGlzIGRpc2NvdXJhZ2VkCi0gIGR1ZSB0byBzZWN1cml0eSB3ZWFrbmVzc2Vz IGluIHRoYXQgcmVsZWFzZS4KLSovCi0KLSNpbmNsdWRlICJja2NzeW0uaCIKLSNpbmNsdWRlICJj a2NkZWIuaCIKLQotI2lmZGVmIENLX1NTTAotI2luY2x1ZGUgImNrY25ldC5oIgotI2luY2x1ZGUg ImNrdWF0aC5oIgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0j aWZkZWYgVU5JWAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpZm5kZWYgRlJFRUJTRDQKLSNp bmNsdWRlIDxhcnBhL2luZXQuaD4KLSNlbmRpZiAvKiBGUkVFQlNENCAqLwotI2VuZGlmIC8qIFVO SVggKi8KLQotI2lmZGVmIERFQ19UQ1BJUAotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDxp bmV0Lmg+Ci0jZW5kaWYgLyogREVDX1RDUElQICovCi0KLSNpZmRlZiBPUzIKLWV4dGVybiBjaGFy IGV4ZWRpcltdOwotI2lmZGVmIE5UCi1jaGFyICogR2V0QXBwRGF0YShpbnQpOwotI2VuZGlmCi0j ZW5kaWYgLyogT1MyICovCi0KLWV4dGVybiBpbnQgcXVpZXQ7CQkJLyogZmRjIC0gTW9uIE5vdiAy OCAxMTo0NDoxNSAyMDA1ICovCi0KLXN0YXRpYyBpbnQgc3NsX2luc3RhbGxlZCA9IDE7Ci0jZW5k aWYgLyogQ0tfU1NMICovCi1pbnQKLWNrX3NzaF9pc19pbnN0YWxsZWQoKQotewotI2lmZGVmIFNT SEJVSUxUSU4KLSNpZmRlZiBTU0xETEwKLSNpZmRlZiBOVAotICAgIGV4dGVybiBISU5TVEFOQ0Ug aENSWVBUTzsKLSNlbHNlIC8qIE5UICovCi0gICAgZXh0ZXJuIEhNT0RVTEUgaENSWVBUTzsKLSNl bmRpZiAvKiBOVCAqLwotICAgIGRlYnVnKEYxMTEsImNrX3NzaF9pc19pbnN0YWxsZWQiLCJoQ1JZ UFRPIixoQ1JZUFRPKTsKLSAgICByZXR1cm4oc3NsX2luc3RhbGxlZCAmJiAoaENSWVBUTyAhPSBO VUxMKSk7Ci0jZWxzZSAvKiBTU0xETEwgKi8KLSAgICByZXR1cm4oc3NsX2luc3RhbGxlZCk7Ci0j ZW5kaWYgLyogU1NMRExMICovCi0jZWxzZQotICAgIHJldHVybiAwOwotI2VuZGlmCi19Ci0KLWlu dAotI2lmZGVmIENLX0FOU0lDCi1ja19zc2xlYXlfaXNfaW5zdGFsbGVkKHZvaWQpCi0jZWxzZQot Y2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpCi0jZW5kaWYKLXsKLSNpZmRlZiBDS19TU0wKLSNpZmRl ZiBTU0xETEwKLSNpZmRlZiBOVAotICAgIGV4dGVybiBISU5TVEFOQ0UgaFNTTCwgaENSWVBUTzsK LSNlbHNlIC8qIE5UICovCi0gICAgZXh0ZXJuIEhNT0RVTEUgaFNTTCwgaENSWVBUTzsKLSNlbmRp ZiAvKiBOVCAqLwotICAgIGRlYnVnKEYxMTEsImNrX3NzbGVheV9pc19pbnN0YWxsZWQiLCJoU1NM IixoU1NMKTsKLSAgICBkZWJ1ZyhGMTExLCJja19zc2xlYXlfaXNfaW5zdGFsbGVkIiwiaENSWVBU TyIsaENSWVBUTyk7Ci0gICAgcmV0dXJuKHNzbF9pbnN0YWxsZWQgJiYgKGhTU0wgIT0gTlVMTCkg JiYgKGhDUllQVE8gIT0gTlVMTCkpOwotI2Vsc2UgLyogU1NMRExMICovCi0gICAgcmV0dXJuKHNz bF9pbnN0YWxsZWQpOwotI2VuZGlmIC8qIFNTTERMTCAqLwotI2Vsc2UgLyogQ0tfU1NMICovCi0g ICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIENLX1NTTCAqLwotfQotCi0jaWZkZWYgQ0tfU1NMCi0j aW5jbHVkZSAiY2tja2VyLmgiCi0jaW5jbHVkZSAiY2t1Y21kLmgiICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBGb3Igc3RydWN0IGtleXRhYiAqLwotI2luY2x1ZGUgImNrY3RlbC5oIgot I2luY2x1ZGUgImNrX3NzbC5oIgotI2lmZGVmIFVOSVgKLSNpbmNsdWRlIDxwd2QuaD4gICAgICAg ICAgICAgICAgICAgIC8qIFBhc3N3b3JkIGZpbGUgZm9yIGhvbWUgZGlyZWN0b3J5ICovCi0jZW5k aWYgLyogVU5JWCAqLwotI2lmZGVmIE9TMgotI2luY2x1ZGUgPHByb2Nlc3MuaD4KLSNlbmRpZiAv KiBPUzIgKi8KLSNpZmRlZiBPUzJPTkxZCi0jaW5jbHVkZSAiY2tvdGNwLmgiCi0jZW5kaWYgLyog T1MyT05MWSAqLwotCi0jaWZkZWYgU1NMRExMCi1pbnQgc3NsX2ZpbmlzaGVkX21lc3NhZ2VzID0g MDsKLSNlbHNlIC8qIFNTTERMTCAqLwotI2lmZGVmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIKLWlu dCBzc2xfZmluaXNoZWRfbWVzc2FnZXMgPSAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDAw OTA1ODFmTCk7Ci0jZWxzZQotIUVSUk9SIFRoaXMgbW9kdWxlIHJlcXVpcmVzIE9wZW5TU0wgMC45 LjVhIG9yIGhpZ2hlcgotI2VuZGlmIC8qIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgKi8KLSNlbmRp ZiAvKiBTU0xETEwgKi8KLQotc3RhdGljIGludCBhdXRoX3NzbF92YWxpZCA9IDA7Ci1zdGF0aWMg Y2hhciAqYXV0aF9zc2xfbmFtZSA9IDA7ICAgIC8qIHRoaXMgaG9sZHMgdGhlIG9uZWxpbmUgbmFt ZSAqLwotY2hhciBzc2xfZXJyW1NTTF9FUlJfQkZTWl09IiI7Ci0KLUJJTyAqYmlvX2Vycj1OVUxM OwotWDUwOV9TVE9SRSAqY3JsX3N0b3JlID0gTlVMTDsKLQotI2lmbmRlZiBOT0ZUUAotI2lmbmRl ZiBTWVNGVFAKLVNTTCAqc3NsX2Z0cF9jb24gICAgICAgICAgICAgPSBOVUxMOwotU1NMX0NUWCAq c3NsX2Z0cF9jdHggICAgICAgICA9IE5VTEw7Ci1TU0wgKnNzbF9mdHBfZGF0YV9jb24gICAgICAg ID0gTlVMTDsKLWludCBzc2xfZnRwX2FjdGl2ZV9mbGFnICAgICAgPSAwOwotaW50IHNzbF9mdHBf ZGF0YV9hY3RpdmVfZmxhZyA9IDA7Ci0jZW5kaWYgLyogU1lTRlRQICovCi0jZW5kaWYgLyogTk9G VFAgKi8KLQotI2lmbmRlZiBOT0hUVFAKLVNTTCAqdGxzX2h0dHBfY29uICAgICAgICAgICAgPSBO VUxMOwotU1NMX0NUWCAqdGxzX2h0dHBfY3R4ICAgICAgICA9IE5VTEw7Ci1pbnQgdGxzX2h0dHBf YWN0aXZlX2ZsYWcgICAgID0gMDsKLWludCBzc2xfaHR0cF9pbml0aWFsaXplZCA9IDA7Ci0jZW5k aWYgLyogTk9IVFRQICovCi0KLVNTTF9DVFggKnNzbF9jdHggPSBOVUxMOwotU1NMICpzc2xfY29u ID0gTlVMTDsKLWludCBzc2xfZGVidWdfZmxhZyA9IDA7Ci1pbnQgc3NsX3ZlcmJvc2VfZmxhZyA9 IDA7Ci1pbnQgc3NsX29ubHlfZmxhZyA9IDA7Ci1pbnQgc3NsX3Jhd19mbGFnID0gMDsKLWludCBz c2xfYWN0aXZlX2ZsYWcgPSAwOwotaW50IHNzbF92ZXJpZnlfZmxhZyA9IFNTTF9WRVJJRllfUEVF UjsKLWludCBzc2xfY2VydHNva19mbGFnID0gMDsKLWNoYXIgKnNzbF9yc2FfY2VydF9maWxlID0g TlVMTDsKLWNoYXIgKnNzbF9yc2FfY2VydF9jaGFpbl9maWxlID0gTlVMTDsKLWNoYXIgKnNzbF9y c2Ffa2V5X2ZpbGUgPSBOVUxMOwotY2hhciAqc3NsX2RzYV9jZXJ0X2ZpbGUgPSBOVUxMOwotY2hh ciAqc3NsX2RzYV9jZXJ0X2NoYWluX2ZpbGUgPSBOVUxMOwotY2hhciAqc3NsX2RoX2tleV9maWxl ID0gTlVMTDsKLWNoYXIgKnNzbF9jcmxfZmlsZSA9IE5VTEw7Ci1jaGFyICpzc2xfY3JsX2RpciA9 IE5VTEw7Ci1jaGFyICpzc2xfdmVyaWZ5X2ZpbGUgPSBOVUxMOwotY2hhciAqc3NsX3ZlcmlmeV9k aXIgPSBOVUxMOwotY2hhciAqc3NsX2RoX3BhcmFtX2ZpbGUgPSBOVUxMOwotY2hhciAqc3NsX2Np cGhlcl9saXN0ID0gTlVMTDsKLWNoYXIgKnNzbF9ybmRfZmlsZSA9IE5VTEw7Ci0KLVNTTF9DVFgg KnRsc19jdHggPSBOVUxMOwotU1NMICp0bHNfY29uID0gTlVMTDsKLWludCB0bHNfb25seV9mbGFn ID0gMDsKLWludCB0bHNfcmF3X2ZsYWcgPSAwOwotaW50IHRsc19hY3RpdmVfZmxhZyA9IDA7Ci0K LWludCBzc2xfaW5pdGlhbGl6ZWQgPSAwOwotaW50IHNzbF92ZXJpZnlfZGVwdGggPSAtMTsgLyog dXNlZCB0byB0cmFjayBkZXB0aCBpbiB2ZXJpZnkgcm91dGluZXMgKi8KLQotLyogY29tcGlsZSB0 aGlzIHNldCB0byAxIHRvIG5lZ290aWF0ZSBTU0wvVExTIGJ1dCBub3QgYWN0dWFsbHkgc3RhcnQg aXQgKi8KLWludCBzc2xfZHVtbXlfZmxhZz0wOwotCi1leHRlcm4gaW50IGluc2VydmVyOwotZXh0 ZXJuIGludCBkZWJzZXM7Ci1leHRlcm4gaW50IGFjY2VwdF9jb21wbGV0ZTsKLWV4dGVybiBjaGFy IHN6SG9zdE5hbWVbXSwgc3pVc2VyTmFtZVJlcXVlc3RlZFtdLCBzelVzZXJOYW1lQXV0aGVudGlj YXRlZFtdOwotCi1fUFJPVE9UWVAoaW50IFg1MDlfdG9fdXNlciwoWDUwOSAqLCBjaGFyICosIGlu dCkpOwotCi1zdGF0aWMgaW50IHZlcmJvc2l0eSA9IDA7CQkvKiBNZXNzYWdlIGNvbnRyb2wgKi8K LXN0YXRpYyBWT0lECi1zZXR2ZXJib3NpdHkoKSB7Ci0gICAgdmVyYm9zaXR5ID0gc3NsX3ZlcmJv c2VfZmxhZzsKLSAgICBpZiAocXVpZXQpIHZlcmJvc2l0eSA9IDA7Ci19Ci0KLWludAotI2lmZGVm IENLX0FOU0lDCi1zc2xfc2VydmVyX3ZlcmlmeV9jYWxsYmFjayhpbnQgb2ssIFg1MDlfU1RPUkVf Q1RYICogY3R4KQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXNzbF9zZXJ2ZXJfdmVyaWZ5X2NhbGxi YWNrKG9rLCBjdHgpCi1pbnQgb2s7Ci1YNTA5X1NUT1JFX0NUWCAqY3R4OwotI2VuZGlmIC8qIENL X0FOU0lDICovCi17Ci0gICAgc3RhdGljIGNoYXIgKnNhdmVkX3N1YmplY3Q9TlVMTDsKLSAgICBj aGFyICpzdWJqZWN0PU5VTEwsICppc3N1ZXI9TlVMTDsKLSAgICBpbnQgZGVwdGgsZXJyb3I7Ci0g ICAgWDUwOSAqeHMgPSBOVUxMOwotCi0gICAgaWYgKCBzc2xfY2VydHNva19mbGFnICkKLSAgICAg ICAgcmV0dXJuKDEpOwotCi0gICAgc2V0dmVyYm9zaXR5KCk7Ci0KLSAgICBlcnJvcj1YNTA5X1NU T1JFX0NUWF9nZXRfZXJyb3IoY3R4KTsKLSAgICBkZXB0aD1YNTA5X1NUT1JFX0NUWF9nZXRfZXJy b3JfZGVwdGgoY3R4KTsKLSAgICB4cz1YNTA5X1NUT1JFX0NUWF9nZXRfY3VycmVudF9jZXJ0KGN0 eCk7Ci0KLSAgICBpZiAoZGVwdGg9PTApIHsKLSAgICAgICAgLyogY2xlYXIgdGhpbmdzICovCi0g ICAgICAgIGlmIChzYXZlZF9zdWJqZWN0IT1OVUxMKSB7Ci0gICAgICAgICAgICBmcmVlKHNhdmVk X3N1YmplY3QpOwotICAgICAgICAgICAgc2F2ZWRfc3ViamVjdD1OVUxMOwotICAgICAgICB9Ci0g ICAgICAgIGlmIChhdXRoX3NzbF9uYW1lIT1OVUxMKSB7Ci0gICAgICAgICAgICBmcmVlKGF1dGhf c3NsX25hbWUpOwotICAgICAgICAgICAgYXV0aF9zc2xfbmFtZT1OVUxMOwotICAgICAgICB9Ci0g ICAgfQotCi0KLSAgICBpZiAoc3NsX2RlYnVnX2ZsYWcgJiYgIWluc2VydmVyKSB7Ci0gICAgICAg IHByaW50Zigic3NsOnNlcnZlcl92ZXJpZnlfY2FsbGJhY2s6ZGVwdGg9JWQgb2s9JWQgZXJyPSVk LSVzXHJcbiIsCi0gICAgICAgICAgICBkZXB0aCxvayxlcnJvcixYNTA5X3ZlcmlmeV9jZXJ0X2Vy cm9yX3N0cmluZyhlcnJvcikpOwotICAgIH0KLQotICAgIC8qIGZpcnN0IHRoaW5nIGlzIHRvIGhh dmUgYSBtZWFuaW5nZnVsIG5hbWUgZm9yIHRoZSBjdXJyZW50Ci0gICAgICogY2VydGlmaWNhdGUg dGhhdCBpcyBiZWluZyB2ZXJpZmllZCAuLi4gYW5kIGlmIHdlIGNhbm5vdAotICAgICAqIGRldGVy bWluZSB0aGF0IHRoZW4gc29tZXRoaW5nIGlzIHNlcmlvdXNseSB3cm9uZyEKLSAgICAgKi8KLSAg ICBtYWtlc3RyKCZzdWJqZWN0LAotICAgICAgICAgICAgKGNoYXIgKilYNTA5X05BTUVfb25lbGlu ZShYNTA5X2dldF9zdWJqZWN0X25hbWUoeHMpLE5VTEwsMCkpOwotICAgIG1ha2VzdHIoJmlzc3Vl ciwKLSAgICAgICAgICAgIChjaGFyICopWDUwOV9OQU1FX29uZWxpbmUoWDUwOV9nZXRfaXNzdWVy X25hbWUoeHMpLE5VTEwsMCkpOwotICAgIGlmICghc3ViamVjdCB8fCAhc3ViamVjdFswXSB8fCAh aXNzdWVyIHx8ICFpc3N1ZXJbMF0pIHsKLSAgICAgICAgb2sgPSAwOwotICAgICAgICBnb3RvIHJl dHVybl90aW1lOwotICAgIH0KLQotICAgIGlmICh2ZXJib3NpdHkgJiYgIWluc2VydmVyICYmIGRl cHRoICE9IHNzbF92ZXJpZnlfZGVwdGgpIHsKLSAgICAgICAgcHJpbnRmKCJbJWRdIENlcnRpZmlj YXRlIFN1YmplY3Q6XHJcbiVzXHJcbiIsZGVwdGgsc3ViamVjdCk7Ci0gICAgICAgIHByaW50Zigi WyVkXSBDZXJ0aWZpY2F0ZSBJc3N1ZXI6XHJcbiVzXHJcbiIsZGVwdGgsaXNzdWVyKTsKLSAgICAg ICAgc3NsX3ZlcmlmeV9kZXB0aCA9IGRlcHRoOwotICAgIH0KLQotICAgIC8qIG1ha2Ugc3VyZSB0 aGF0IHRoZSBjZXJ0aWZpY2F0ZSB0aGF0IGhhcyBiZWVuIHByZXNlbnRlZCAqLwotICAgIC8qIGhh cyBub3QgYmVlbiByZXZva2VkIChpZiB3ZSBoYXZlIGJlZW4gZ2l2ZW4gYSBDUkwuICAgICAqLwot ICAgIG9rID0gIHNzbF92ZXJpZnlfY3JsKG9rLCBjdHgpOwotCi0gICAgLyogaWYgd2UgaGF2ZSBh bnkgZm9ybSBvZiBlcnJvciBpbiBzZWN1cmUgbW9kZSB3ZSByZWplY3QgdGhlIGNvbm5lY3Rpb24g Ki8KLSAgICBpZiAoZXJyb3IhPVg1MDlfVl9PSykgewotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsK LSNpZmRlZiBDS1NZU0xPRwotICAgICAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19MSSAm JiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfTEksIDAsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICJYLjUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZnkgZmFpbHVy ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIHN1YmplY3QsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgIChjaGFyICopWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmco ZXJyb3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0jZW5k aWYgLyogQ0tTWVNMT0cgKi8KLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCBz c2xfdmVyaWZ5X2ZsYWcgJgotICAgICAgICAgICAgICAgICAoU1NMX1ZFUklGWV9QRUVSIHwgU1NM X1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCkpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJF cnJvcjogIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJXYXJu aW5nOiAiKTsKLSAgICAgICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKLSAgICAgICAgICAgIGNhc2Ug WDUwOV9WX0VSUl9ERVBUSF9aRVJPX1NFTEZfU0lHTkVEX0NFUlQ6Ci0gICAgICAgICAgICAgICAg cHJpbnRmKCJDZXJ0aWZpY2F0ZSBpcyBzZWxmIHNpZ25lZC5cclxuIik7Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFg1MDlfVl9FUlJfQ0VSVF9IQVNfRVhQSVJFRDoK LSAgICAgICAgICAgICAgICBwcmludGYoIkNlcnRpZmljYXRlIGhhcyBleHBpcmVkLlxyXG4iKTsK LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgWDUwOV9WX0VSUl9VTkFC TEVfVE9fR0VUX0lTU1VFUl9DRVJUX0xPQ0FMTFk6Ci0gICAgICAgICAgICAgICAgcHJpbnRmKAot ICAiQ2VydGlmaWNhdGUgaXNzdWVyJ3MgY2VydGlmaWNhdGUgaXNuJ3QgYXZhaWxhYmxlIGxvY2Fs bHkuXHJcbiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBYNTA5 X1ZfRVJSX1VOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkU6Ci0gICAgICAgICAgICAgICAg cHJpbnRmKCJVbmFibGUgdG8gdmVyaWZ5IGxlYWYgc2lnbmF0dXJlLlxyXG4iKTsKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJUX1JFVk9LRUQ6 Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJDZXJ0aWZpY2F0ZSByZXZva2VkLlxyXG4iKTsKLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg ICAgcHJpbnRmKCJFcnJvciAlZCB3aGlsZSB2ZXJpZnlpbmcgY2VydGlmaWNhdGUuXHJcbiIsCi0g ICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ZXJyb3IpOwotICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG9rID0gIShzc2xfdmVyaWZ5X2Zs YWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKTsKLSAgICB9IGVsc2UgewotICAg ICAgICAvKiBpZiB3ZSBnb3QgYWxsIHRoZSB3YXkgdG8gdGhlIHRvcCBvZiB0aGUgdHJlZSB0aGVu Ci0gICAgICAgICAqIHdlICpjYW4qIHVzZSB0aGlzIGNlcnRpZmljYXRlIGZvciBhIHVzZXJuYW1l IHRvCi0gICAgICAgICAqIG1hdGNoIC4uLiBpbiBhbGwgb3RoZXIgY2FzZXMgd2UgbXVzdCBub3Qh Ci0gICAgICAgICAqLwotICAgICAgICBhdXRoX3NzbF9uYW1lID0gc2F2ZWRfc3ViamVjdDsKLSAg ICAgICAgc2F2ZWRfc3ViamVjdCA9IE5VTEw7Ci0gICAgfQotCi0gIHJldHVybl90aW1lOgotCi0g ICAgLyogc2F2ZSB0aGUgbmFtZSBpZiBhdCBsZWFzdCB0aGUgZmlyc3QgbGV2ZWwgaXMgb2theSAq LwotICAgIGlmIChkZXB0aCA9PSAwICYmIG9rKQotICAgICAgICBtYWtlc3RyKCZzYXZlZF9zdWJq ZWN0LHN1YmplY3QpOwotCi0gICAgLyogY2xlYW4gdXAgdGhpbmdzICovCi0gICAgaWYgKHN1Ympl Y3QhPU5VTEwpCi0gICAgICAgIGZyZWUoc3ViamVjdCk7Ci0gICAgaWYgKGlzc3VlciE9TlVMTCkK LSAgICAgICAgZnJlZShpc3N1ZXIpOwotCi0gICAgcmV0dXJuIG9rOwotfQotCi1pbnQKLSNpZmRl ZiBDS19BTlNJQwotc3NsX2NsaWVudF92ZXJpZnlfY2FsbGJhY2soaW50IG9rLCBYNTA5X1NUT1JF X0NUWCAqIGN0eCkKLSNlbHNlCi1zc2xfY2xpZW50X3ZlcmlmeV9jYWxsYmFjayhvaywgY3R4KQot aW50IG9rOwotWDUwOV9TVE9SRV9DVFggKmN0eDsKLSNlbmRpZgotewotICAgIGNoYXIgc3ViamVj dFsyNTZdPSIiLCBpc3N1ZXJbMjU2XT0iIjsKLSAgICBpbnQgZGVwdGgsIGVycm9yLCBsZW47Ci0g ICAgWDUwOSAqeHM7Ci0KLSAgICBzZXR2ZXJib3NpdHkoKTsKLQotICAgIHhzPVg1MDlfU1RPUkVf Q1RYX2dldF9jdXJyZW50X2NlcnQoY3R4KTsKLSAgICBlcnJvcj1YNTA5X1NUT1JFX0NUWF9nZXRf ZXJyb3IoY3R4KTsKLSAgICBkZXB0aD1YNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3JfZGVwdGgoY3R4 KTsKLQotICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKQotICAgICAgICBwcmludGYoInNzbDpjbGll bnRfdmVyaWZ5X2NhbGxiYWNrOmRlcHRoPSVkIG9rPSVkIGVycj0lZC0lc1xyXG4iLAotICAgICAg ICAgICAgICAgIGRlcHRoLG9rLGVycm9yLFg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVy cm9yKSk7Ci0KLSAgICBpZiAoIHNzbF9jZXJ0c29rX2ZsYWcgKSB7Ci0gICAgICAgIG9rID0gMTsK LSAgICB9Ci0KLSAgICAvKiBmaXJzdCB0aGluZyBpcyB0byBoYXZlIGEgbWVhbmluZ2Z1bCBuYW1l IGZvciB0aGUgY3VycmVudAotICAgICAqIGNlcnRpZmljYXRlIHRoYXQgaXMgYmVpbmcgdmVyaWZp ZWQgLi4uIGFuZCBpZiB3ZSBjYW5ub3QKLSAgICAgKiBkZXRlcm1pbmUgdGhhdCB0aGVuIHNvbWV0 aGluZyBpcyBzZXJpb3VzbHkgd3JvbmchCi0gICAgICovCi0jaWZkZWYgWE5fRkxBR19TRVBfTVVM VElMSU5FCi0gICAgWDUwOV9OQU1FX3ByaW50X2V4KGJpb19lcnIsWDUwOV9nZXRfc3ViamVjdF9u YW1lKHhzKSw0LAotICAgICAgICAgICAgICAgICAgICAgICAgWE5fRkxBR19TRVBfTVVMVElMSU5F KTsKLSAgICBsZW4gPSBCSU9fcmVhZChiaW9fZXJyLHN1YmplY3QsMjU2KTsKLSAgICBzdWJqZWN0 W2xlbiA8IDI1NiA/IGxlbiA6IDI1NV0gPSAnXDAnOwotICAgIGlmICghc3ViamVjdFswXSkgewot ICAgICAgICBFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwotICAgICAgICBsZW4gPSBCSU9fcmVh ZChiaW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKLSAgICAgICAgc3NsX2VycltsZW4gPCBT U0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsKLSAgICAgICAgdXFfb2so IlguNTA5IFN1YmplY3QgTmFtZSB1bmF2YWlsYWJsZSIsIHNzbF9lcnIsIDEsIE5VTEwsIDApOwot ICAgICAgICBvaz0wOwotICAgICAgICBnb3RvIHJldHVybl90aW1lOwotICAgIH0KLQotICAgIFg1 MDlfTkFNRV9wcmludF9leChiaW9fZXJyLFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKHhzKSw0LAotICAg ICAgICAgICAgICAgICAgICAgICAgWE5fRkxBR19TRVBfTVVMVElMSU5FKTsKLSAgICBsZW4gPSBC SU9fcmVhZChiaW9fZXJyLGlzc3VlciwyNTYpOwotICAgIGlzc3VlcltsZW4gPCAyNTYgPyBsZW4g OiAyNTVdID0gJ1wwJzsKLSAgICBpZiAoIWlzc3VlclswXSkgewotICAgICAgICBFUlJfcHJpbnRf ZXJyb3JzKGJpb19lcnIpOwotICAgICAgICBsZW4gPSBCSU9fcmVhZChiaW9fZXJyLHNzbF9lcnIs U1NMX0VSUl9CRlNaKTsKLSAgICAgICAgc3NsX2VycltsZW4gPCBTU0xfRVJSX0JGU1ogPyBsZW4g OiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsKLSAgICAgICAgdXFfb2soIlguNTA5IElzc3VlciBOYW1l IHVuYXZhaWxhYmxlIiwgc3NsX2VyciwgMSwgTlVMTCwgMCk7Ci0gICAgICAgIG9rPTA7Ci0gICAg ICAgIGdvdG8gcmV0dXJuX3RpbWU7Ci0gICAgfQotI2Vsc2UgLyogWE5fRkxBR19TRVBfTVVMVElM SU5FICovCi0gICAgWDUwOV9OQU1FX29uZWxpbmUoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHhzKSxz dWJqZWN0LDI1Nik7Ci0gICAgaWYgKCFzdWJqZWN0WzBdKSB7Ci0gICAgICAgIGludCBsZW47Ci0g ICAgICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0gICAgICAgIGxlbiA9IEJJT19yZWFk KGJpb19lcnIsc3NsX2VycixTU0xfRVJSX0JGU1opOwotICAgICAgICBzc2xfZXJyW2xlbiA8IFNT TF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAnOwotICAgICAgICB1cV9vaygi WC41MDkgU3ViamVjdCBOYW1lIHVuYXZhaWxhYmxlIiwgc3NsX2VyciwgMSwgTlVMTCwgMCk7Ci0g ICAgICAgIG9rPTA7Ci0gICAgICAgIGdvdG8gcmV0dXJuX3RpbWU7Ci0gICAgfQotCi0gICAgWDUw OV9OQU1FX29uZWxpbmUoWDUwOV9nZXRfaXNzdWVyX25hbWUoeHMpLGlzc3VlciwyNTYpOwotICAg IGlmICghaXNzdWVyWzBdKSB7Ci0gICAgICAgIGludCBsZW47Ci0gICAgICAgIEVSUl9wcmludF9l cnJvcnMoYmlvX2Vycik7Ci0gICAgICAgIGxlbiA9IEJJT19yZWFkKGJpb19lcnIsc3NsX2VycixT U0xfRVJSX0JGU1opOwotICAgICAgICBzc2xfZXJyW2xlbiA8IFNTTF9FUlJfQkZTWiA/IGxlbiA6 IFNTTF9FUlJfQkZTWl0gPSAnXDAnOwotICAgICAgICB1cV9vaygiWC41MDkgSXNzdWVyIE5hbWUg dW5hdmFpbGFibGUiLCBzc2xfZXJyLCAxLCBOVUxMLCAwKTsKLSAgICAgICAgb2s9MDsKLSAgICAg ICAgZ290byByZXR1cm5fdGltZTsKLSAgICB9Ci0jZW5kaWYgLyogWE5fRkxBR19TRVBfTVVMVElM SU5FICovCi0KLSAgICBpZiAodmVyYm9zaXR5ICYmIGRlcHRoICE9IHNzbF92ZXJpZnlfZGVwdGgp IHsKLSAgICAgICAgcHJpbnRmKCJbJWRdIENlcnRpZmljYXRlIFN1YmplY3Q6XHJcbiVzXHJcbiIs ZGVwdGgsc3ViamVjdCk7Ci0gICAgICAgIHByaW50ZigiWyVkXSBDZXJ0aWZpY2F0ZSBJc3N1ZXI6 XHJcbiVzXHJcbiIsZGVwdGgsaXNzdWVyKTsKLSAgICAgICAgc3NsX3ZlcmlmeV9kZXB0aCA9IGRl cHRoOwotICAgIH0KLQotICAgIG9rID0gc3NsX3ZlcmlmeV9jcmwob2ssIGN0eCk7Ci0KLSAgICBp ZiAoICFvayApIHsKLSAgICAgICAgY2hhciBwcmVmaXhbMTAyNF07Ci0gICAgICAgIC8qIGlmIHRo ZSBzZXJ2ZXIgaXMgdXNpbmcgYSBzZWxmIHNpZ25lZCBjZXJ0aWZpY2F0ZSB0aGVuCi0gICAgICAg ICAqIHdlIG5lZWQgdG8gZGVjaWRlIGlmIHRoYXQgaXMgZ29vZCBlbm91Z2ggZm9yIHVzIHRvCi0g ICAgICAgICAqIGFjY2VwdCAuLi4KLSAgICAgICAgICovCi0KLSAgICAgICAgc3dpdGNoICggZXJy b3IgKSB7Ci0gICAgICAgIGNhc2UgWDUwOV9WX0VSUl9ERVBUSF9aRVJPX1NFTEZfU0lHTkVEX0NF UlQ6IHsKLSAgICAgICAgICAgIGlmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX0ZBSUxf SUZfTk9fUEVFUl9DRVJUKSB7Ci0gICAgICAgICAgICAgICAgLyogbWFrZSAxMDAlIHN1cmUgdGhh dCBpbiBzZWN1cmUgbW9yZSB3ZSBkcm9wIHRoZQotICAgICAgICAgICAgICAgICAqIGNvbm5lY3Rp b24gaWYgdGhlIHNlcnZlciBkb2VzIG5vdCBoYXZlIGEKLSAgICAgICAgICAgICAgICAgKiByZWFs IGNlcnRpZmljYXRlIQotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGNrbWFr eG1zZyhwcmVmaXgsMTAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvcjogU2Vy dmVyIGhhcyBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlXG4iLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlsiLGNraXRvYShkZXB0aCksIl0gQ2VydGlmaWNhdGUgU3ViamVjdD1cbiIsc3Vi amVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJcblsiLGNraXRvYShkZXB0aCksIl0g Q2VydGlmaWNhdGUgSXNzdWVyPVxuIixpc3N1ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLE5VTEwsTlVMTCk7Ci0KLSAgICAgICAgICAgICAgICB1cV9vayhwcmVmaXgsICJSZWpl Y3RpbmcgQ29ubmVjdGlvbiIsIDEsIE5VTEwsIDApOwotCi0gICAgICAgICAgICAgICAgLyogc29t ZXRpbWVzIGl0IGlzIHJlYWxseSBoYW5keSB0byBiZSBhYmxlIHRvIGRlYnVnIHRoaW5ncwotICAg ICAgICAgICAgICAgICogYW5kIHN0aWxsIGdldCBhIGNvbm5lY3Rpb24hCi0gICAgICAgICAgICAg ICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpIHsKLSAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCJTU0w6IGRlYnVnIC0+IGlnbm9yaW5nIGNlcnQgcmVxdWlyZWQhXHJc biIpOwotICAgICAgICAgICAgICAgICAgICBvaz0xOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgICAgIG9rPTA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIGdvdG8gcmV0dXJuX3RpbWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNzbF92ZXJp ZnlfZmxhZyAhPSBTU0xfVkVSSUZZX05PTkUpIHsKLSAgICAgICAgICAgICAgICBja21ha3htc2co cHJlZml4LDEwMjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiV2FybmluZzogU2VydmVy IGhhcyBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlXG4iLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlsiLGNraXRvYShkZXB0aCksIl0gQ2VydGlmaWNhdGUgU3ViamVjdD1cbiIsc3ViamVj dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJcblsiLGNraXRvYShkZXB0aCksIl0gQ2Vy dGlmaWNhdGUgSXNzdWVyPVxuIixpc3N1ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBO VUxMLE5VTEwsTlVMTCk7Ci0KLSAgICAgICAgICAgICAgICBvayA9IHVxX29rKHByZWZpeCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICJDb250aW51ZT8gKFkvTikgIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIDMsIE5VTEwsIDApOwotICAgICAgICAgICAgICAgIGlmICggb2sgPCAw ICkKLSAgICAgICAgICAgICAgICAgICAgb2sgPSAwOwotICAgICAgICAgICAgICAgIGdvdG8gcmV0 dXJuX3RpbWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBYNTA5X1Zf RVJSX1VOQUJMRV9UT19HRVRfSVNTVUVSX0NFUlQ6Ci0gICAgICAgICAgICBpZiAoc3NsX3Zlcmlm eV9mbGFnICYgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCkgewotICAgICAgICAgICAg ICAgIC8qIG1ha2UgMTAwJSBzdXJlIHRoYXQgaW4gc2VjdXJlIG1vcmUgd2UgZHJvcCB0aGUKLSAg ICAgICAgICAgICAgICAgKiBjb25uZWN0aW9uIGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgaGF2ZSBh Ci0gICAgICAgICAgICAgICAgICogcmVhbCBjZXJ0aWZpY2F0ZSEKLSAgICAgICAgICAgICAgICAg Ki8KLSAgICAgICAgICAgICAgICBja21ha3htc2cocHJlZml4LDEwMjQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAiRXJyb3I6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh ciAqKVg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVycm9yKSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICJcbkNlcnRpZmljYXRlIElzc3Vlcj1cbiIsaXNzdWVyLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM KTsKLSAgICAgICAgICAgICAgICB1cV9vayhwcmVmaXgsICJSZWplY3RpbmcgQ29ubmVjdGlvbiIs IDEsIE5VTEwsIDApOwotCi0gICAgICAgICAgICAgICAgLyogc29tZXRpbWVzIGl0IGlzIHJlYWxs eSBoYW5keSB0byBiZSBhYmxlIHRvIGRlYnVnIHRoaW5ncwotICAgICAgICAgICAgICAgICogYW5k IHN0aWxsIGdldCBhIGNvbm5lY3Rpb24hCi0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg ICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJT U0w6IGRlYnVnIC0+IGlnbm9yaW5nIGNlcnQgcmVxdWlyZWQhXHJcbiIpOwotICAgICAgICAgICAg ICAgICAgICBvaz0xOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg ICAgIG9rPTA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGdvdG8gcmV0dXJu X3RpbWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNzbF92ZXJpZnlfZmxhZyAhPSBTU0xfVkVS SUZZX05PTkUpIHsKLSAgICAgICAgICAgICAgICBja21ha3htc2cocHJlZml4LDEwMjQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAiV2FybmluZzogIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjaGFyICopWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyb3IpLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlxuQ2VydGlmaWNhdGUgSXNzdWVyPVxuIixpc3N1ZXIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgIG9rID0gdXFfb2socHJlZml4LCAiQ29udGlu dWUgKFkvTikiLCAzLCBOVUxMLCAwKTsKLSAgICAgICAgICAgICAgICBnb3RvIHJldHVybl90aW1l OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWDUwOV9W X0VSUl9DRVJUX05PVF9ZRVRfVkFMSUQ6Ci0gICAgICAgIGNhc2UgWDUwOV9WX0VSUl9FUlJPUl9J Tl9DRVJUX05PVF9CRUZPUkVfRklFTEQ6Ci0gICAgICAgICAgICBpZiAoc3NsX3ZlcmlmeV9mbGFn ICYgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCkgewotICAgICAgICAgICAgICAgIGlu dCBsZW47Ci0gICAgICAgICAgICAgICAgLyogbWFrZSAxMDAlIHN1cmUgdGhhdCBpbiBzZWN1cmUg bW9yZSB3ZSBkcm9wIHRoZQotICAgICAgICAgICAgICAgICAqIGNvbm5lY3Rpb24gaWYgdGhlIHNl cnZlciBkb2VzIG5vdCBoYXZlIGEKLSAgICAgICAgICAgICAgICAgKiByZWFsIGNlcnRpZmljYXRl IQotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIEFTTjFfVElNRV9wcmludChi aW9fZXJyLFg1MDlfZ2V0X25vdEJlZm9yZSh4cykpOwotICAgICAgICAgICAgICAgIGxlbiA9IEJJ T19yZWFkKGJpb19lcnIsc3NsX2VycixTU0xfRVJSX0JGU1opOwotICAgICAgICAgICAgICAgIHNz bF9lcnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7Ci0g ICAgICAgICAgICAgICAgY2ttYWt4bXNnKHByZWZpeCwxMDI0LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIkVycm9yOiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilY NTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhlcnJvciksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAiXG5DZXJ0aWZpY2F0ZSBTdWJqZWN0PVxuIixzdWJqZWN0LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlxubm90QmVmb3JlPSIsc3NsX2VyciwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAg ICB1cV9vayhwcmVmaXgsICJSZWplY3RpbmcgQ29ubmVjdGlvbiIsIDEsIE5VTEwsIDApOwotICAg ICAgICAgICAgICAgIC8qIHNvbWV0aW1lcyBpdCBpcyByZWFsbHkgaGFuZHkgdG8gYmUgYWJsZSB0 byBkZWJ1ZyB0aGluZ3MKLSAgICAgICAgICAgICAgICAqIGFuZCBzdGlsbCBnZXQgYSBjb25uZWN0 aW9uIQotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19m bGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiU1NMOiBkZWJ1ZyAtPiBpZ25vcmlu ZyBjZXJ0IHJlcXVpcmVkIVxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgb2s9MTsKLSAgICAg ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBvaz0wOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBnb3RvIHJldHVybl90aW1lOwotICAgICAgICAgICAg fSBlbHNlIGlmIChzc2xfdmVyaWZ5X2ZsYWcgIT0gU1NMX1ZFUklGWV9OT05FKSB7Ci0gICAgICAg ICAgICAgICAgaW50IGxlbjsKLSAgICAgICAgICAgICAgICBBU04xX1RJTUVfcHJpbnQoYmlvX2Vy cixYNTA5X2dldF9ub3RCZWZvcmUoeHMpKTsKLSAgICAgICAgICAgICAgICBsZW4gPSBCSU9fcmVh ZChiaW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKLSAgICAgICAgICAgICAgICBzc2xfZXJy W2xlbiA8IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAnOwotICAgICAg ICAgICAgICAgIGNrbWFreG1zZyhwcmVmaXgsMTAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICJXYXJuaW5nOiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilYNTA5 X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhlcnJvciksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAiXG5DZXJ0aWZpY2F0ZSBTdWJqZWN0PVxuIixzdWJqZWN0LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlxuICAgIG5vdEJlZm9yZT0iLHNzbF9lcnIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAg ICAgb2sgPSB1cV9vayhwcmVmaXgsICJDb250aW51ZSAoWS9OKSIsIDMsIE5VTEwsIDApOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWDUwOV9WX0VSUl9D RVJUX0hBU19FWFBJUkVEOgotICAgICAgICBjYXNlIFg1MDlfVl9FUlJfRVJST1JfSU5fQ0VSVF9O T1RfQUZURVJfRklFTEQ6Ci0gICAgICAgICAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZF UklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCkgewotICAgICAgICAgICAgICAgIGludCBsZW47Ci0g ICAgICAgICAgICAgICAgLyogbWFrZSAxMDAlIHN1cmUgdGhhdCBpbiBzZWN1cmUgbW9yZSB3ZSBk cm9wIHRoZQotICAgICAgICAgICAgICAgICAqIGNvbm5lY3Rpb24gaWYgdGhlIHNlcnZlciBkb2Vz IG5vdCBoYXZlIGEKLSAgICAgICAgICAgICAgICAgKiByZWFsIGNlcnRpZmljYXRlIQotICAgICAg ICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIEFTTjFfVElNRV9wcmludChiaW9fZXJyLFg1 MDlfZ2V0X25vdEFmdGVyKHhzKSk7Ci0gICAgICAgICAgICAgICAgbGVuID0gQklPX3JlYWQoYmlv X2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7Ci0gICAgICAgICAgICAgICAgc3NsX2VycltsZW4g PCBTU0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsKLQotICAgICAgICAg ICAgICAgIGNrbWFreG1zZyhwcmVmaXgsMTAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICJFcnJvcjogIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopWDUwOV92ZXJp ZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyb3IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg IlxuQ2VydGlmaWNhdGUgU3ViamVjdD1cbiIsc3ViamVjdCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICJcbiAgICBub3RBZnRlcj0iLHNzbF9lcnIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAgICAgdXFf b2socHJlZml4LCAiUmVqZWN0aW5nIENvbm5lY3Rpb24iLCAxLCBOVUxMLCAwKTsKLSAgIAotICAg ICAgICAgICAgICAgIC8qIHNvbWV0aW1lcyBpdCBpcyByZWFsbHkgaGFuZHkgdG8gYmUgYWJsZSB0 byBkZWJ1ZyB0aGluZ3MKLSAgICAgICAgICAgICAgICAqIGFuZCBzdGlsbCBnZXQgYSBjb25uZWN0 aW9uIQotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19m bGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiU1NMOiBkZWJ1ZyAtPiBpZ25vcmlu ZyBjZXJ0IHJlcXVpcmVkIVxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgb2s9MTsKLSAgICAg ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBvaz0wOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBnb3RvIHJldHVybl90aW1lOwotICAgICAgICAgICAg fSBlbHNlIGlmIChzc2xfdmVyaWZ5X2ZsYWcgIT0gU1NMX1ZFUklGWV9OT05FKSB7Ci0gICAgICAg ICAgICAgICAgaW50IGxlbjsKLSAgICAgICAgICAgICAgICBBU04xX1RJTUVfcHJpbnQoYmlvX2Vy cixYNTA5X2dldF9ub3RBZnRlcih4cykpOwotICAgICAgICAgICAgICAgIGxlbiA9IEJJT19yZWFk KGJpb19lcnIsc3NsX2VycixTU0xfRVJSX0JGU1opOwotICAgICAgICAgICAgICAgIHNzbF9lcnJb bGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7Ci0gICAgICAg ICAgICAgICAgY2ttYWt4bXNnKHByZWZpeCwxMDI0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIldhcm5pbmc6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKVg1MDlf dmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVycm9yKSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICJcbkNlcnRpZmljYXRlIFN1YmplY3Q9XG4iLHN1YmplY3QsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAiXG4gICAgbm90QWZ0ZXI9Iixzc2xfZXJyLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAg IG9rID0gdXFfb2socHJlZml4LCAiQ29udGludWUgKFkvTikiLCAzLCBOVUxMLCAwKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFg1MDlfVl9FUlJfU0VM Rl9TSUdORURfQ0VSVF9JTl9DSEFJTjoKLSAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9U T19HRVRfSVNTVUVSX0NFUlRfTE9DQUxMWToKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAg KiBXaGVuIGFuIFNTTCBzZXJ2ZXIgc2VuZHMgaXRzIGNlcnRpZmljYXRlcyB0byB0aGUgY2xpZW50 IHRoZXJlCi0gICAgICAgICAgICAgKiBhcmUgdHdvIiBjb252ZW50aW9ucyI6IG9uZSBpcyB0byBz ZW5kIHRoZSBjb21wbGV0ZSBjZXJ0aWZpY2F0ZQotICAgICAgICAgICAgICogY2hhaW4gYW5kIHRo ZSBvdGhlciBpcyB0byBzZW5kIHRoZSB3aG9sZSBjaGFpbiBhcGFydCBmcm9tIHRoZQotICAgICAg ICAgICAgICogcm9vdC4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBZb3UgZG9uJ3Qg dXN1YWxseSBuZWVkIHRoZSByb290IGJlY2F1c2UgdGhlIHJvb3QgaXMgbm9ybWFsbHkKLSAgICAg ICAgICAgICAqIHN0b3JlZCBhbmQgdHJ1c3RlZCBsb2NhbGx5LgotICAgICAgICAgICAgICoKLSAg ICAgICAgICAgICAqIFNvIGlmIHlvdSBnZXQgdGhlIHdob2xlIGNoYWluIGl0IHdpbGwgY29tcGxh aW4gYWJvdXQgdGhlIHNlbGYKLSAgICAgICAgICAgICAqIHNpZ25lZCBjZXJ0aWZpY2F0ZSB3aGVy ZWFzIGlmIHRoZSByb290IGlzIG1pc3NpbmcgaXQgc2F5cyBpdAotICAgICAgICAgICAgICogY2Fu J3QgZmluZCB0aGUgaXNzdWVyIGNlcnRpZmljYXRlLgotICAgICAgICAgICAgICovCi0gICAgICAg ICAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VS VCkgewotICAgICAgICAgICAgICAgIC8qIG1ha2UgMTAwJSBzdXJlIHRoYXQgaW4gc2VjdXJlIG1v cmUgd2UgZHJvcCB0aGUKLSAgICAgICAgICAgICAgICAgKiBjb25uZWN0aW9uIGlmIHRoZSBzZXJ2 ZXIgZG9lcyBub3QgaGF2ZSBhCi0gICAgICAgICAgICAgICAgICogcmVhbCBjZXJ0aWZpY2F0ZSEK LSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBja21ha3htc2cocHJlZml4LDEw MjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3I6ICIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAoY2hhciAqKVg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVycm9y KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbkNlcnRpZmljYXRlIElzc3Vlcj1cbiIs aXNzdWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICB1cV9vayhwcmVmaXgsICJSZWpl Y3RpbmcgQ29ubmVjdGlvbiIsIDEsIE5VTEwsIDApOwotICAgICAgICAgICAgICAgIC8qIHNvbWV0 aW1lcyBpdCBpcyByZWFsbHkgaGFuZHkgdG8gYmUgYWJsZSB0byBkZWJ1ZyB0aGluZ3MKLSAgICAg ICAgICAgICAgICAqIGFuZCBzdGlsbCBnZXQgYSBjb25uZWN0aW9uIQotICAgICAgICAgICAgICAg ICovCi0gICAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKSB7Ci0gICAgICAgICAgICAg ICAgICAgIHByaW50ZigiU1NMOiBkZWJ1ZyAtPiBpZ25vcmluZyBjZXJ0IHJlcXVpcmVkIVxyXG4i KTsKLSAgICAgICAgICAgICAgICAgICAgb2s9MTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgICBvaz0wOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBnb3RvIHJldHVybl90aW1lOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzc2xfdmVyaWZ5 X2ZsYWcgIT0gU1NMX1ZFUklGWV9OT05FKSB7Ci0gICAgICAgICAgICAgICAgY2ttYWt4bXNnKHBy ZWZpeCwxMDI0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIldhcm5pbmc6ICIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKVg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3Ry aW5nKGVycm9yKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbkNlcnRpZmljYXRlIElz c3Vlcj1cbiIsaXNzdWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICBvayA9IHVxX29r KHByZWZpeCwgIkNvbnRpbnVlIChZL04pIiwgMywgTlVMTCwgMCk7Ci0jaWZkZWYgTlQKLSAgICAg ICAgICAgICAgICBpZiAob2spIHsKLSAgICAgICAgICAgICAgICAgICAgLyogaWYgdGhlIHVzZXIg ZGVjaWRlcyB0byBhY2NlcHQgdGhlIGNlcnRpZmljYXRlCi0gICAgICAgICAgICAgICAgICAgICAq IG9mZmVyIHRvIHN0b3JlIGl0IGZvciBmdXR1cmUgY29ubmVjdGlvbnMgaW4gCi0gICAgICAgICAg ICAgICAgICAgICAqIHRoZSB1c2VyJ3MgcHJpdmF0ZSBzdG9yZQotICAgICAgICAgICAgICAgICAg ICAgKi8KLSAgICAgICAgICAgICAgICAgICAgb2sgPSB1cV9vaygKLSAgIkRvIHlvdSB3aXNoIHRv IHN0b3JlIHRoZSBjZXJ0aWZpY2F0ZSB0byB2ZXJpZnkgZnV0dXJlIGNvbm5lY3Rpb25zPyIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRpbnVlIChZL04pIiwgMywgTlVMTCwg MCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvaykKLSAgICAgICAgICAgICAgICAgICAgICAg IGNrX1g1MDlfc2F2ZV9jZXJ0X3RvX3VzZXJfc3RvcmUoeHMpOwotICAgICAgICAgICAgICAgIH0K LSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIGNhc2UgWDUwOV9WX0VSUl9VTkFCTEVfVE9fVkVSSUZZX0xFQUZfU0lHTkFUVVJFOgotICAg ICAgICBjYXNlIFg1MDlfVl9FUlJfVU5BQkxFX1RPX0dFVF9DUkw6Ci0gICAgICAgIGNhc2UgWDUw OV9WX0VSUl9VTkFCTEVfVE9fREVDUllQVF9DRVJUX1NJR05BVFVSRToKLSAgICAgICAgY2FzZSBY NTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNSWVBUX0NSTF9TSUdOQVRVUkU6Ci0gICAgICAgIGNhc2Ug WDUwOV9WX0VSUl9VTkFCTEVfVE9fREVDT0RFX0lTU1VFUl9QVUJMSUNfS0VZOgotICAgICAgICBj YXNlIFg1MDlfVl9FUlJfQ0VSVF9TSUdOQVRVUkVfRkFJTFVSRToKLSAgICAgICAgY2FzZSBYNTA5 X1ZfRVJSX0NSTF9TSUdOQVRVUkVfRkFJTFVSRToKLSAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0NS TF9OT1RfWUVUX1ZBTElEOgotICAgICAgICBjYXNlIFg1MDlfVl9FUlJfQ1JMX0hBU19FWFBJUkVE OgotICAgICAgICBjYXNlIFg1MDlfVl9FUlJfRVJST1JfSU5fQ1JMX0xBU1RfVVBEQVRFX0ZJRUxE OgotICAgICAgICBjYXNlIFg1MDlfVl9FUlJfRVJST1JfSU5fQ1JMX05FWFRfVVBEQVRFX0ZJRUxE OgotICAgICAgICBjYXNlIFg1MDlfVl9FUlJfT1VUX09GX01FTToKLSAgICAgICAgY2FzZSBYNTA5 X1ZfRVJSX0NFUlRfQ0hBSU5fVE9PX0xPTkc6Ci0gICAgICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJU X1JFVk9LRUQ6Ci0gICAgICAgIGNhc2UgWDUwOV9WX0VSUl9BUFBMSUNBVElPTl9WRVJJRklDQVRJ T046Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnICYg U1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCkgewotICAgICAgICAgICAgICAgIC8qIG1h a2UgMTAwJSBzdXJlIHRoYXQgaW4gc2VjdXJlIG1vZGUgd2UgZHJvcCB0aGUKLSAgICAgICAgICAg ICAgICAgKiBjb25uZWN0aW9uIGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgaGF2ZSBhCi0gICAgICAg ICAgICAgICAgICogcmVhbCBjZXJ0aWZpY2F0ZSEKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAg ICAgICAgICAgICBja21ha3htc2cocHJlZml4LDEwMjQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAiRXJyb3I6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKVg1MDlf dmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVycm9yKSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICJcbkNlcnRpZmljYXRlIFN1YmplY3Q9XG4iLHN1YmplY3QsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAg ICAgICAgICAgICAgIHVxX29rKHByZWZpeCwgIlJlamVjdGluZyBDb25uZWN0aW9uIiwgMSwgTlVM TCwgMCk7Ci0KLSAgICAgICAgICAgICAgICAvKiBzb21ldGltZXMgaXQgaXMgcmVhbGx5IGhhbmR5 IHRvIGJlIGFibGUgdG8gZGVidWcgdGhpbmdzCi0gICAgICAgICAgICAgICAgKiBhbmQgc3RpbGwg Z2V0IGEgY29ubmVjdGlvbiEKLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlm IChzc2xfZGVidWdfZmxhZykgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIlNTTDogZGVi dWcgLT4gaWdub3JpbmcgY2VydCByZXF1aXJlZCFcclxuIik7Ci0gICAgICAgICAgICAgICAgICAg IG9rPTE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgb2s9 MDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ290byByZXR1cm5fdGltZTsK LSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3NsX3ZlcmlmeV9mbGFnICE9IFNTTF9WRVJJRllfTk9O RSkgewotICAgICAgICAgICAgICAgIGNrbWFreG1zZyhwcmVmaXgsMTAyNCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICJXYXJuaW5nOiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNoYXIgKilYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhlcnJvciksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAiXG5DZXJ0aWZpY2F0ZSBTdWJqZWN0PVxuIixzdWJqZWN0LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMKTsKLSAgICAgICAgICAgICAgICBvayA9IHVxX29rKHByZWZpeCwgIkNvbnRpbnVlIChZ L04pIiwgMywgTlVMTCwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgfQotICAgIH0KLQotICByZXR1cm5fdGltZToKLSAgICBpZiAoIHNzbF9kZWJ1Z19mbGFn ICkKLSAgICAgICAgcHJpbnRmKCJzc2w6Y2xpZW50X3ZlcmlmeV9jYWxsYmFjayA9PiBvazogJWRc clxuIixvayk7Ci0gICAgcmV0dXJuIG9rOwotfQotCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLXNz bF9jbGllbnRfaW5mb19jYWxsYmFjayhjb25zdCBTU0wgKnMsIGludCB3aGVyZSwgaW50IHJldCkK LSNlbHNlCi1zc2xfY2xpZW50X2luZm9fY2FsbGJhY2socyx3aGVyZSxyZXQpCi1jb25zdCBTU0wg KnM7Ci1pbnQgd2hlcmU7Ci1pbnQgcmV0OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAg aWYgKGluc2VydmVyIHx8ICFzc2xfZGVidWdfZmxhZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg c2V0dmVyYm9zaXR5KCk7Ci0KLSAgICBzd2l0Y2ggKCB3aGVyZSApIHsKLSAgICBjYXNlIFNTTF9D Ql9DT05ORUNUX0xPT1A6Ci0gICAgICAgIHByaW50ZigiU1NMX2Nvbm5lY3Q6JXMgJXNcclxuIiwK LSAgICAgICAgICAgICAgICBTU0xfc3RhdGVfc3RyaW5nKChTU0wgKilzKSxTU0xfc3RhdGVfc3Ry aW5nX2xvbmcoKFNTTCAqKXMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTU0xfQ0JfQ09O TkVDVF9FWElUOgotICAgICAgICBpZiAocmV0ID09IDApIHsKLSAgICAgICAgICAgIHByaW50Zigi U1NMX2Nvbm5lY3Q6ZmFpbGVkIGluICVzICVzXHJcbiIsCi0gICAgICAgICAgICAgICAgICAgIFNT TF9zdGF0ZV9zdHJpbmcoKFNTTCAqKXMpLFNTTF9zdGF0ZV9zdHJpbmdfbG9uZygoU1NMICopcykp OwotICAgICAgICB9IGVsc2UgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiU1NM X2Nvbm5lY3Q6ZXJyb3IgaW4gJXMgJXNcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgU1NMX3N0 YXRlX3N0cmluZygoU1NMICopcyksU1NMX3N0YXRlX3N0cmluZ19sb25nKChTU0wgKilzKSk7Ci0g ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTU0xfQ0JfQUNDRVBUX0xPT1A6Ci0g ICAgICAgIHByaW50ZigiU1NMX2FjY2VwdDolcyAlc1xyXG4iLAotICAgICAgICAgICAgICAgIFNT TF9zdGF0ZV9zdHJpbmcoKFNTTCAqKXMpLFNTTF9zdGF0ZV9zdHJpbmdfbG9uZygoU1NMICopcykp OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNTTF9DQl9BQ0NFUFRfRVhJVDoKLSAgICAgICAg aWYgKHJldCA9PSAwKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNTTF9hY2NlcHQ6ZmFpbGVkIGlu ICVzICVzXHJcbiIsCi0gICAgICAgICAgICAgICAgICAgIFNTTF9zdGF0ZV9zdHJpbmcoKFNTTCAq KXMpLFNTTF9zdGF0ZV9zdHJpbmdfbG9uZygoU1NMICopcykpOwotICAgICAgICB9IGVsc2UgaWYg KHJldCA8IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiU1NMX2FjY2VwdDplcnJvciBpbiAlcyAl c1xyXG4iLAotICAgICAgICAgICAgICAgICAgICBTU0xfc3RhdGVfc3RyaW5nKChTU0wgKilzKSxT U0xfc3RhdGVfc3RyaW5nX2xvbmcoKFNTTCAqKXMpKTsKLSAgICAgICAgfQotICAgICAgICBicmVh azsKLSAgICBjYXNlIFNTTF9DQl9SRUFEX0FMRVJUOgotICAgICAgICBwcmludGYoIlNTTF9yZWFk X2FsZXJ0XHJcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNTTF9DQl9XUklURV9BTEVS VDoKLSAgICAgICAgcHJpbnRmKCJTU0xfd3JpdGVfYWxlcnRcclxuIik7Ci0gICAgICAgIGJyZWFr OwotICAgIGNhc2UgU1NMX0NCX0hBTkRTSEFLRV9TVEFSVDoKLSAgICAgICAgcHJpbnRmKCJTU0xf aGFuZHNoYWtlOiVzICVzXHJcbiIsCi0gICAgICAgICAgICAgICAgU1NMX3N0YXRlX3N0cmluZygo U1NMICopcyksU1NMX3N0YXRlX3N0cmluZ19sb25nKChTU0wgKilzKSk7Ci0gICAgICAgIGJyZWFr OwotICAgIGNhc2UgU1NMX0NCX0hBTkRTSEFLRV9ET05FOgotICAgICAgICBwcmludGYoIlNTTF9o YW5kc2hha2U6JXMgJXNcclxuIiwKLSAgICAgICAgICAgICAgICBTU0xfc3RhdGVfc3RyaW5nKChT U0wgKilzKSxTU0xfc3RhdGVfc3RyaW5nX2xvbmcoKFNTTCAqKXMpKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgfQotfQotCi0jaWZkZWYgVVNFX0NFUlRfQ0IKLS8qIFJldHVybiAxLCBjbGllbnQgY2Vy dCBpcyBhdmFpbGFibGUgKi8KLS8qIFJldHVybiAwLCBubyBjbGllbnQgY2VydCBpcyBhdmFpbGFi bGUgKi8KLS8qIFJldHVybiAtMSwgY2FsbGJhY2sgbXVzdCBiZSBjYWxsZWQgYWdhaW4uIFNTTF93 YW50X3g1MDlfbG9va3VwKCkgPT0gMSAqLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXNzbF9jbGll bnRfY2VydF9jYWxsYmFjayhTU0wgKiBzLCBYNTA5ICoqIHg1MDksIEVWUF9QS0VZICoqIHBrZXkp Ci0jZWxzZSAvKiBDS19BTlNJQyAqLwotc3NsX2NsaWVudF9jZXJ0X2NhbGxiYWNrKHMsIHg1MDks IHBrZXkpCi0gICAgU1NMICogczsKLSAgICBYNTA5ICoqIHg1MDk7Ci0gICAgRVZQX1BLRVkgKiog cGtleTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHNldHZlcmJvc2l0eSgpOwotCi0g ICAgaWYgKCBzc2xfZGVidWdfZmxhZyApIHsKLSAgICAgICAgY29uc3QgY2hhciAqIGNpcGhlcl9s aXN0PVNTTF9nZXRfY2lwaGVyKHMpOwotICAgICAgICBwcmludGYoInNzbF9jbGllbnRfY2VydF9j YWxsYmFjayBjYWxsZWQgKCVzKVxyXG4iLAotICAgICAgICAgICAgICAgIGNpcGhlcl9saXN0P2Np cGhlcl9saXN0OiJVTktOT1dOIik7Ci0gICAgfQotI2lmZGVmIENPTU1FTlQKLSAgICBpZiAoIHMg PT0gdGxzX2NvbiApIHsKLSAgICAgICAgaWYgKHRsc19sb2FkX2NlcnRzKHRsc19jdHMsdGxzX2Nv biwwKSkgewotICAgICAgICAgICAgKng1MDkgPSBTU0xfZ2V0X2NlcnRpZmljYXRlKHMpOwotICAg ICAgICAgICAgKnBrZXkgPSBTU0xfZ2V0X3ByaXZhdGVrZXkocyk7Ci0gICAgICAgICAgICByZXR1 cm4oMSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCBzID09IHNzbF9jb24gKSB7Ci0gICAg ICAgIGlmICh0bHNfbG9hZF9jZXJ0cyhzc2xfY3R4LHNzbF9jb24sMCkpIHsKLSAgICAgICAgICAg ICp4NTA5ID0gU1NMX2dldF9jZXJ0aWZpY2F0ZShzKTsKLSAgICAgICAgICAgICpwa2V5ID0gU1NM X2dldF9wcml2YXRla2V5KHMpOwotICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICB9Ci0g ICAgfQotICAgIHJldHVybigwKTsKLSNlbHNlIC8qIENPTU1FTlQgKi8KLSAgICByZXR1cm4oMCk7 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotfQotI2VuZGlmIC8qIFVTRV9DRVJUX0NCICovCi0KLSNp Zm5kZWYgTVNfQ0FMTEJBQ0sKLSNkZWZpbmUgTVNfQ0FMTEJBQ0sKLSNlbmRpZiAvKiBNU19DQUxM QkFDSyAqLwotCi1zdGF0aWMgUlNBIE1TX0NBTExCQUNLICoKLSNpZmRlZiBDS19BTlNJQwotdG1w X3JzYV9jYihTU0wgKiBzLCBpbnQgZXhwb3J0LCBpbnQga2V5bGVuZ3RoKQotI2Vsc2UgLyogQ0tf QU5TSUMgKi8KLXRtcF9yc2FfY2IocyxleHBvcnQsa2V5bGVuZ3RoKQotU1NMICpzOwotaW50IGV4 cG9ydDsKLWludCBrZXlsZW5ndGg7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBzdGF0 aWMgUlNBICpyc2FfdG1wPU5VTEw7Ci0KLSNpZm5kZWYgTk9fUlNBCi0gICAgaWYgKHJzYV90bXAg PT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAg IHByaW50ZigiR2VuZXJhdGluZyB0ZW1wb3JhcnkgKCVkIGJpdCkgUlNBIGtleS4uLlxyXG4iLGtl eWxlbmd0aCk7Ci0KLSAgICAgICAgcnNhX3RtcD1SU0FfZ2VuZXJhdGVfa2V5KGtleWxlbmd0aCxS U0FfRjQsTlVMTCxOVUxMKTsKLQotICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAg ICAgICBwcmludGYoIlxyXG4iKTsKLSAgICB9Ci0jZWxzZSAvKiBOT19SU0EgKi8KLSAgICBpZiAo c3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgIHByaW50ZigiVW5hYmxlIHRvIGdlbmVyYXRlIHRlbXBv cmFyeSBSU0Ega2V5Li4uXHJcbiIpOwotI2VuZGlmCi0gICAgcmV0dXJuKHJzYV90bXApOwotfQot Ci0KLSNpZm5kZWYgTk9fREgKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRoNTEyX3BbXT17Ci0gICAg MHhFOSwweDRFLDB4M0EsMHg2NCwweEZBLDB4NjUsMHg1RiwweEE2LDB4NDQsMHhDNywweEZDLDB4 RjEsCi0gICAgMHgxNiwweDhCLDB4MTEsMHgxMSwweDdBLDB4RjAsMHhCMiwweDQ5LDB4ODAsMHg1 NiwweEEzLDB4RjgsCi0gICAgMHgwRiwweDdELDB4MDEsMHg2OCwweDVELDB4RjYsMHg4QSwweEVB LDB4OEMsMHhERCwweDAxLDB4REMsCi0gICAgMHg0MywweDE4LDB4RTAsMHhDNCwweDg5LDB4ODAs MHhFNiwweDJELDB4NDQsMHg3NywweDQ1LDB4RkQsCi0gICAgMHhCQSwweEZDLDB4NDMsMHgzNSww eDEyLDB4QzAsMHhFRCwweDMyLDB4RDMsMHgxNiwweEVGLDB4NTEsCi0gICAgMHgwOSwweDQ0LDB4 QTIsMHhEQiwKLX07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBkaDUxMl9nW109ewotICAgIDB4MDUs Ci19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBkaDc2OF9wW109ewotICAgIDB4OEIsMHgyQSww eDhDLDB4NkMsMHgwRiwweDg3LDB4QzcsMHgzNCwweEVFLDB4MkUsMHhGQiwweDYwLAotICAgIDB4 OTQsMHhCMywweEJGLDB4OTUsMHhCQSwweDg0LDB4NzQsMHg4NiwweEVBLDB4RTAsMHhBNCwweDMz LAotICAgIDB4RTAsMHg4RiwweDdDLDB4NzksMHg1QywweDYyLDB4RTIsMHg5MSwweEM1LDB4NkQs MHg2OCwweEI5LAotICAgIDB4NkMsMHg1RSwweDRFLDB4OTQsMHgwQywweDhFLDB4NTYsMHg4RSww eEVCLDB4OTgsMHg3QywweDZFLAotICAgIDB4MEUsMHhGMiwweEQ1LDB4QUEsMHgyMiwweDI3LDB4 M0YsMHgwRiwweEFGLDB4MTAsMHhCNSwweDBCLAotICAgIDB4MTYsMHhDQywweDA1LDB4MjcsMHhC QiwweDU4LDB4NkQsMHg2MSwweDRCLDB4MkIsMHhBQiwweERDLAotICAgIDB4NkEsMHgxNSwweEJD LDB4MzYsMHg3NSwweDRELDB4RUMsMHhBQiwweEZBLDB4QjYsMHhFMSwweEIxLAotICAgIDB4MTMs MHg3MCwweEQ4LDB4NzcsMHhDRCwweDVFLDB4NTEsMHg3NywweDgxLDB4MEQsMHg3NywweDQzLAot fTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRoNzY4X2dbXT17Ci0gICAgMHgwNSwKLX07Ci0KLXN0 YXRpYyB1bnNpZ25lZCBjaGFyIGRoMTAyNF9wW109ewotICAgIDB4QTQsMHg3NSwweENGLDB4MzUs MHgwMCwweEFGLDB4M0MsMHgxNywweENFLDB4QjAsMHhEMCwweDUyLAotICAgIDB4NDMsMHhBMCww eDBFLDB4RkEsMHhBMiwweEM5LDB4QkUsMHgwQiwweDc2LDB4N0EsMHhEOSwweDJFLAotICAgIDB4 RjQsMHg5NywweEFDLDB4MDIsMHgyNCwweDY5LDB4RjYsMHgzNiwweDRGLDB4QUIsMHhDQywweDQz LAotICAgIDB4QzEsMHg3NCwweEZGLDB4QTMsMHhENCwweDA0LDB4MEYsMHgxMSwweDJCLDB4NkQs MHg4QywweDQ3LAotICAgIDB4QzksMHhDRiwweDQwLDB4OTMsMHg5QiwweDdELDB4MUUsMHg1Miww eDg1LDB4QjIsMHgxNywweDU1LAotICAgIDB4OUMsMHhGMiwweDQxLDB4MDIsMHgyQSwweDlELDB4 NUYsMHgyNCwweDIyLDB4QzYsMHgwNCwweEM0LAotICAgIDB4QUIsMHg5MiwweDZELDB4QzcsMHhD OCwweEYzLDB4NDEsMHg1OCwweDZDLDB4ODYsMHhGRCwweEI4LAotICAgIDB4MEYsMHgyRCwweERE LDB4QkYsMHhBOCwweDQwLDB4MEMsMHg1OCwweEM4LDB4RjIsMHgzRiwweDE4LAotICAgIDB4RUYs MHhGMSwweDkzLDB4M0UsMHhCQSwweDE2LDB4NDEsMHhCRSwweDMyLDB4NkMsMHhDNSwweDYzLAot ICAgIDB4RkYsMHg4QSwweDAyLDB4M0QsMHhBQywweEQ1LDB4NUEsMHg0OSwweDY0LDB4MzQsMHgx NCwweDJFLAotICAgIDB4RkIsMHgyRSwweEU3LDB4MzksMHgxQSwweDBGLDB4M0MsMHgzMywKLX07 Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBkaDEwMjRfZ1tdPXsKLSAgICAweDA1LAotfTsKLQotc3Rh dGljIHVuc2lnbmVkIGNoYXIgZGgxNTM2X3BbXT17Ci0gICAgMHhBMywweDJCLDB4NzUsMHgwRSww eDdCLDB4MzEsMHg4MiwweENBLDB4RjIsMHhGQywweEYzLDB4M0QsCi0gICAgMHhDRSwweDVGLDB4 Q0QsMHg1QiwweDk1LDB4RjYsMHgyRiwweEE0LDB4NUQsMHgwOCwweDI2LDB4RDIsCi0gICAgMHg1 RiwweEMwLDB4M0YsMHhDNSwweEQ4LDB4QTIsMHhGRSwweDgzLDB4MjYsMHhCQywweEVCLDB4N0Qs Ci0gICAgMHhGMCwweDRFLDB4RDIsMHhBNiwweEJCLDB4M0MsMHg4OCwweDYzLDB4Q0UsMHg5OCww eERFLDB4MDgsCi0gICAgMHhFMiwweEUxLDB4QUYsMHhFMiwweDM4LDB4QTgsMHhGQSwweDY4LDB4 NzYsMHg4RCwweEJGLDB4REYsCi0gICAgMHhCQiwweDMwLDB4MTUsMHhGRSwweEJELDB4MjIsMHhD QywweDAzLDB4NEUsMHg1RSwweDMzLDB4QTMsCi0gICAgMHg2RCwweEQ2LDB4NjgsMHgxMiwweDk3 LDB4MTcsMHg0QiwweEI1LDB4ODQsMHg1RiwweDVGLDB4QTMsCi0gICAgMHg1QywweDJGLDB4QTQs MHgxMCwweEMxLDB4QUQsMHhCRiwweEFDLDB4MzAsMHhDQSwweDQ3LDB4NjQsCi0gICAgMHg2Myww eEZFLDB4RUUsMHhFRSwweEExLDB4NjQsMHg3MywweDcwLDB4QUEsMHhGOSwweEZFLDB4QzYsCi0g ICAgMHhBRCwweDVFLDB4RjYsMHhGMywweDlDLDB4REYsMHgzNCwweDUzLDB4MzQsMHg3MiwweEE2 LDB4QTQsCi0gICAgMHhCQiwweDgxLDB4NUEsMHg0MywweDQxLDB4RkQsMHg0MSwweDA1LDB4NUIs MHg3NywweDdCLDB4ODQsCi0gICAgMHgwMywweEZBLDB4OEEsMHhGQSwweEY3LDB4OEUsMHgwRiww eENCLDB4NTEsMHhBMiwweEI4LDB4NDUsCi0gICAgMHhGRiwweDU5LDB4NDIsMHhFRiwweENGLDB4 RjYsMHgyNSwweDM3LDB4RTIsMHg2RCwweEZGLDB4NjksCi0gICAgMHgxMSwweEY1LDB4NzcsMHg1 OSwweDc5LDB4MUMsMHg1RiwweDA1LDB4RkMsMHg3QSwweDY1LDB4ODEsCi0gICAgMHgwMywweDRB LDB4NzgsMHhDNiwweEU5LDB4NDgsMHg3MywweEY2LDB4MTAsMHhCQywweDk5LDB4MUMsCi0gICAg MHhFRSwweDQ0LDB4MkYsMHg4QiwweDcwLDB4Q0EsMHhBOCwweEI2LDB4MDIsMHg4MywweDNFLDB4 MEIsCi19Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgZGgxNTM2X2dbXT17Ci0gICAgMHgwNSwKLX07 Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRoMjA0OF9wW109ewotICAgIDB4RkEsMHg0RSwweEU0 LDB4M0IsMHhGQSwweEMxLDB4ODcsMHhERCwweEU3LDB4QzYsMHg4QiwweEU2LAotICAgIDB4MTMs MHg4NSwweEJDLDB4OUIsMHgyQiwweDhCLDB4NUIsMHg0NiwweEJCLDB4OEIsMHg4NiwweDZELAot ICAgIDB4RDcsMHhCNiwweEQ1LDB4NDksMHhDNSwweDU0LDB4RjIsMHgzRSwweEQyLDB4MzksMHg2 NCwweDlCLAotICAgIDB4MEUsMHgzMywweDM5LDB4OEYsMHhGQSwweEZBLDB4RDksMHg3OCwweEVE LDB4MzQsMHg4MiwweDI5LAotICAgIDB4MzcsMHg1OCwweDRELDB4NUQsMHg0MCwweENCLDB4Njks MHhFMywweDhBLDB4OUYsMHgxNywweDBDLAotICAgIDB4MDEsMHgyMywweDZCLDB4MDUsMHgwMSww eEFGLDB4MzMsMHhERSwweERGLDB4MUEsMHhCQiwweDdCLAotICAgIDB4NkEsMHg5RiwweEQ4LDB4 RUQsMHg4RCwweDVFLDB4NDQsMHgxOSwweDVCLDB4RTAsMHhCNiwweDIzLAotICAgIDB4RjksMHg3 QSwweDk2LDB4NkUsMHg5NCwweDMzLDB4MzEsMHg0OSwweEJBLDB4ODQsMHhENSwweDEyLAotICAg IDB4RDcsMHg2RCwweERDLDB4MzUsMHg1NCwweDY0LDB4QTMsMHhEOCwweDA0LDB4MjYsMHhDNSww eEFGLAotICAgIDB4N0YsMHhFMywweEZFLDB4NkYsMHhCRSwweEQ1LDB4MTcsMHg3MiwweDRCLDB4 QTYsMHhEMCwweEE3LAotICAgIDB4NUYsMHgxOCwweEY1LDB4RjAsMHgyRCwweDExLDB4OUEsMHhG NiwweEQ1LDB4M0IsMHg2QywweDYxLAotICAgIDB4M0MsMHg2RiwweDhFLDB4MDksMHg0RiwweDJD LDB4RTEsMHgyNiwweDA2LDB4NTEsMHhCMywweDE5LAotICAgIDB4ODUsMHg4NSwweDEzLDB4Rjks MHhDMiwweDZFLDB4ODAsMHgyOCwweDlFLDB4OEEsMHhBMCwweDAxLAotICAgIDB4NDYsMHhEMSww eDg1LDB4NDQsMHg4QywweEU2LDB4RUUsMHg3RSwweDFFLDB4MTcsMHgzRCwweEJBLAotICAgIDB4 NTQsMHhGRiwweEU4LDB4MEUsMHhERCwweDUxLDB4RjMsMHg3NCwweDdGLDB4MEQsMHgwQiwweEFC LAotICAgIDB4Q0EsMHg4NCwweDhELDB4MjQsMHg1RCwweDU2LDB4RDQsMHg0NywweDAyLDB4RkMs MHg5MywweDlGLAotICAgIDB4QUUsMHg5QiwweDVDLDB4REIsMHg2MywweEVCLDB4NjUsMHgwMSww eDM4LDB4QzIsMHg3QiwweDMwLAotICAgIDB4MUUsMHgxNywweDFDLDB4NzUsMHhGNSwweDE2LDB4 M0IsMHg0RiwweDVGLDB4NDEsMHgzMiwweEI1LAotICAgIDB4RkYsMHg5RSwweDYxLDB4RkQsMHhE MiwweDYyLDB4NkUsMHhGRCwweDhBLDB4MjgsMHg5MywweDU5LAotICAgIDB4MkQsMHg3MCwweDE0 LDB4NEQsMHhFMSwweDg2LDB4RDUsMHg5MCwweEI0LDB4REYsMHg3MiwweDcxLAotICAgIDB4RTAs MHhCNCwweEQwLDB4RDYsMHg4MiwweDNBLDB4NEEsMHgwNCwweDU4LDB4MzIsMHgwQiwweEQzLAot ICAgIDB4NTEsMHgxMywweDMyLDB4NjMsCi19Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgZGgyMDQ4 X2dbXT17Ci0gICAgMHgwMiwKLX07Ci0KLXN0YXRpYyBESCAqCi1nZXRfZGg1MTIoKQotewotICAg IERIICpkaD1OVUxMOwotCi0gICAgaWYgKChkaD1ESF9uZXcoKSkgPT0gTlVMTCkKLSAgICAgICAg cmV0dXJuKE5VTEwpOwotICAgIGRoLT5wPUJOX2JpbjJibihkaDUxMl9wLHNpemVvZihkaDUxMl9w KSxOVUxMKTsKLSAgICBkaC0+Zz1CTl9iaW4yYm4oZGg1MTJfZyxzaXplb2YoZGg1MTJfZyksTlVM TCk7Ci0gICAgaWYgKChkaC0+cCA9PSBOVUxMKSB8fCAoZGgtPmcgPT0gTlVMTCkpCi0gICAgICAg IHJldHVybihOVUxMKTsKLSAgICByZXR1cm4oZGgpOwotfQotCi1zdGF0aWMgREggKgotZ2V0X2Ro NzY4KCkKLXsKLSAgICBESCAqZGg9TlVMTDsKLQotICAgIGlmICgoZGg9REhfbmV3KCkpID09IE5V TEwpCi0gICAgICAgIHJldHVybihOVUxMKTsKLSAgICBkaC0+cD1CTl9iaW4yYm4oZGg3NjhfcCxz aXplb2YoZGg3NjhfcCksTlVMTCk7Ci0gICAgZGgtPmc9Qk5fYmluMmJuKGRoNzY4X2csc2l6ZW9m KGRoNzY4X2cpLE5VTEwpOwotICAgIGlmICgoZGgtPnAgPT0gTlVMTCkgfHwgKGRoLT5nID09IE5V TEwpKQotICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgcmV0dXJuKGRoKTsKLX0KLQotc3RhdGlj IERIICoKLWdldF9kaDEwMjQoKQotewotICAgIERIICpkaD1OVUxMOwotCi0gICAgaWYgKChkaD1E SF9uZXcoKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgIGRoLT5wPUJOX2Jp bjJibihkaDEwMjRfcCxzaXplb2YoZGgxMDI0X3ApLE5VTEwpOwotICAgIGRoLT5nPUJOX2JpbjJi bihkaDEwMjRfZyxzaXplb2YoZGgxMDI0X2cpLE5VTEwpOwotICAgIGlmICgoZGgtPnAgPT0gTlVM TCkgfHwgKGRoLT5nID09IE5VTEwpKQotICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgcmV0dXJu KGRoKTsKLX0KLQotc3RhdGljIERIICoKLWdldF9kaDE1MzYoKQotewotICAgIERIICpkaD1OVUxM OwotCi0gICAgaWYgKChkaD1ESF9uZXcoKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuKE5VTEwp OwotICAgIGRoLT5wPUJOX2JpbjJibihkaDE1MzZfcCxzaXplb2YoZGgxNTM2X3ApLE5VTEwpOwot ICAgIGRoLT5nPUJOX2JpbjJibihkaDE1MzZfZyxzaXplb2YoZGgxNTM2X2cpLE5VTEwpOwotICAg IGlmICgoZGgtPnAgPT0gTlVMTCkgfHwgKGRoLT5nID09IE5VTEwpKQotICAgICAgICByZXR1cm4o TlVMTCk7Ci0gICAgcmV0dXJuKGRoKTsKLX0KLQotc3RhdGljIERIICoKLWdldF9kaDIwNDgoKQot ewotICAgIERIICpkaD1OVUxMOwotCi0gICAgaWYgKChkaD1ESF9uZXcoKSkgPT0gTlVMTCkKLSAg ICAgICAgcmV0dXJuKE5VTEwpOwotICAgIGRoLT5wPUJOX2JpbjJibihkaDIwNDhfcCxzaXplb2Yo ZGgyMDQ4X3ApLE5VTEwpOwotICAgIGRoLT5nPUJOX2JpbjJibihkaDIwNDhfZyxzaXplb2YoZGgy MDQ4X2cpLE5VTEwpOwotICAgIGlmICgoZGgtPnAgPT0gTlVMTCkgfHwgKGRoLT5nID09IE5VTEwp KQotICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgcmV0dXJuKGRoKTsKLX0KLSNlbmRpZiAvKiBO T19ESCAqLwotCi1zdGF0aWMgREggTVNfQ0FMTEJBQ0sgKgotI2lmZGVmIENLX0FOU0lDCi10bXBf ZGhfY2IoU1NMICogcywgaW50IGV4cG9ydCwgaW50IGtleWxlbmd0aCkKLSNlbHNlIC8qIENLX0FO U0lDICovCi10bXBfZGhfY2IocyxleHBvcnQsa2V5bGVuZ3RoKQotU1NMICpzOwotaW50IGV4cG9y dDsKLWludCBrZXlsZW5ndGg7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBzdGF0aWMg REggKmRoX3RtcD1OVUxMOwotICAgIEJJTyAqYmlvPU5VTEw7Ci0KLSNpZm5kZWYgTk9fREgKLSAg ICBpZiAoZGhfdG1wID09IE5VTEwpCi0gICAgewotICAgICAgICBpZiAoc3NsX2RoX3BhcmFtX2Zp bGUgICYmCi0gICAgICAgICAgICAgKGJpbz1CSU9fbmV3X2ZpbGUoc3NsX2RoX3BhcmFtX2ZpbGUs InIiKSkgIT0gTlVMTCkKLSAgICAgICAgICAgIGRoX3RtcD1QRU1fcmVhZF9iaW9fREhwYXJhbXMo YmlvLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYgKGJpbyAhPSBOVUxMKQotICAgICAgICAg ICAgQklPX2ZyZWUoYmlvKTsKLQotICAgICAgICBpZiAoIGRoX3RtcCA9PSBOVUxMICkgewotICAg ICAgICAgICAgaWYgKCBrZXlsZW5ndGggPCA3NjggKQotICAgICAgICAgICAgICAgIGRoX3RtcCA9 IGdldF9kaDUxMigpOwotICAgICAgICAgICAgZWxzZSBpZiAoIGtleWxlbmd0aCA8IDEwMjQgKQot ICAgICAgICAgICAgICAgIGRoX3RtcCA9IGdldF9kaDc2OCgpOwotICAgICAgICAgICAgZWxzZSBp ZiAoIGtleWxlbmd0aCA8IDE1MzYgKQotICAgICAgICAgICAgICAgIGRoX3RtcCA9IGdldF9kaDEw MjQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCBrZXlsZW5ndGggPCAyMDQ4ICkKLSAgICAgICAg ICAgICAgICBkaF90bXAgPSBnZXRfZGgxNTM2KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg ICAgICAgICAgZGhfdG1wID0gZ2V0X2RoMjA0OCgpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2Ug LyogTk9fREggKi8KLSAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgIHByaW50ZigiREgg bm90IHN1cHBvcnRlZC4uLlxyXG4iKTsKLSNlbmRpZiAvKiBOT19ESCAqLwotICAgIHJldHVybihk aF90bXApOwotfQotCi1zdGF0aWMgdm9pZAotc3NsX2Rpc3BsYXlfY29tcChTU0wgKiBzc2wpCi17 Ci0gICAgaWYgKCBxdWlldCApCQkJLyogZmRjIC0gTW9uIE5vdiAyOCAxMTo0NDoxNSAyMDA1ICov Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICggIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSAp Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChzc2wgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJu OwotCi0gICAgaWYgKHNzbC0+ZXhwYW5kID09IE5VTEwgfHwgc3NsLT5leHBhbmQtPm1ldGggPT0g TlVMTCkKLSAgICAgICAgcHJpbnRmKCJDb21wcmVzc2lvbjogTm9uZVxyXG4iKTsKLSAgICBlbHNl IHsKLSAgICAgICAgcHJpbnRmKCJDb21wcmVzc2lvbjogJXNcclxuIixzc2wtPmV4cGFuZC0+bWV0 aC0+bmFtZSk7Ci0gICAgfQotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotc3NsX2Rpc3BsYXlf Y29ubmVjdF9kZXRhaWxzKFNTTCAqIHNzbF9jb24sIGludCBzZXJ2ZXIsIGludCB2ZXJib3NlKQot I2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXNzbF9kaXNwbGF5X2Nvbm5lY3RfZGV0YWlscyhzc2xfY29u LHNlcnZlcix2ZXJib3NlKQotU1NMICpzc2xfY29uOwotaW50IHNlcnZlcjsKLWludCB2ZXJib3Nl OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgWDUwOSAqcGVlcjsKLSAgICBTU0xfQ0lQ SEVSICogY2lwaGVyOwotICAgIGNvbnN0IGNoYXIgKmNpcGhlcl9saXN0OwotICAgIGNoYXIgYnVm WzUxMl09IiI7Ci0KLSAgICBpZiAoIHF1aWV0ICkJCQkvKiBmZGMgLSBNb24gTm92IDI4IDExOjQ0 OjE1IDIwMDUgKi8KLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKCAhY2tfc3NsZWF5X2lz X2luc3RhbGxlZCgpICkKLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKCBpbnNlcnZlciAm JiAhdG5fZGViICkKLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgLyogdGhlIGNpcGhlciBsaXN0 ICpjYW4qIGJlIE5VTEwgLi4uIHVzZWxlc3MgYnV0IGl0IGhhcHBlbnMhICovCi0gICAgY2lwaGVy ID0gU1NMX2dldF9jdXJyZW50X2NpcGhlcihzc2xfY29uKTsKLSAgICBjaXBoZXJfbGlzdCA9IFNT TF9DSVBIRVJfZ2V0X25hbWUoY2lwaGVyKTsKLSAgICBTU0xfQ0lQSEVSX2Rlc2NyaXB0aW9uKGNp cGhlcixidWYsc2l6ZW9mKGJ1ZikpOwotICAgIGlmIChjaXBoZXJfbGlzdD09TlVMTCkKLSAgICAg ICAgY2lwaGVyX2xpc3Q9IjxOVUxMPiI7Ci0gICAgcHJpbnRmKCJbVExTIC0gJXMiLGJ1Zik7Ci0g ICAgc3NsX2Rpc3BsYXlfY29tcChzc2xfY29uKTsKLQotICAgIGlmICggc2VydmVyICkgewotICAg ICAgICBjaXBoZXJfbGlzdD1TU0xfZ2V0X3NoYXJlZF9jaXBoZXJzKHNzbF9jb24sYnVmLDUxMik7 Ci0gICAgICAgIGlmIChjaXBoZXJfbGlzdD09TlVMTCkKLSAgICAgICAgICAgIGNpcGhlcl9saXN0 PSI8TlVMTD4iOwotICAgICAgICBwcmludGYoIltUTFMgLSBzaGFyZWQgY2lwaGVycz0lc11cclxu IiwKLSAgICAgICAgICAgICAgICBjaXBoZXJfbGlzdCk7Ci0gICAgICAgIH0gICAgICAgCi0gICAg aWYgKCBzZXJ2ZXIgfHwgdG5fZGViICkgewotICAgICAgICBwZWVyPVNTTF9nZXRfcGVlcl9jZXJ0 aWZpY2F0ZShzc2xfY29uKTsKLSAgICAgICAgaWYgKHBlZXIgIT0gTlVMTCkgewotICAgICAgICAg ICAgWDUwOV9OQU1FX29uZWxpbmUoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHBlZXIpLGJ1Ziw1MTIp OwotICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gc3ViamVjdD0lc11cclxuIixidWYpOwotICAg ICAgICAgICAgWDUwOV9OQU1FX29uZWxpbmUoWDUwOV9nZXRfaXNzdWVyX25hbWUocGVlciksYnVm LDUxMik7Ci0gICAgICAgICAgICBwcmludGYoIltUTFMgLSBpc3N1ZXI9JXNdXHJcbiIsYnVmKTsK LSAgICAgICAgICAgIC8qIFg1MDlfZnJlZShwZWVyKTsgKi8KLSAgICAgICAgfSBlbHNlIGlmICgh dGxzX2lzX2tyYjUoMCkpIHsKLSAgICAgICAgICAgIGlmICggIXNzdGVsbmV0ICYmICF0Y3BfaW5j b21pbmcgKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gTm8gY2VydGlmaWNhdGUg cHJvdmlkZWQuXVxyXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGYoCi0gICAgICJbVExTIC0g VGhlIGlkZW50aXR5IG9mIHRoZSBob3N0IGNvdWxkIG5vdCBiZSB2ZXJpZmllZC5dXHJcbiIpOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0KLQotLyoK LSAqIFVzZSBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YShTU0xfQ1RYICos IHZvaWQgKiB1c2VyZGF0YSkKLSAqIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIHVzZXJkYXRhLiAg V2UgYXJlIGdvaW5nIHRvIHVzZSBpdCB0byBzdG9yZSB0aGUKLSAqIHByb21wdC4KLSAqLwotCi1p bnQKLSNpZmRlZiBDS19BTlNJQwotc3NsX3Bhc3N3ZF9jYWxsYmFjayhjaGFyICpidWYsIGludCBs ZW4sIGludCByd2ZsYWcsIFZPSUQgKiB1c2VyZGF0YSkKLSNlbHNlIC8qIENLX0FOU0lDICovCi1z c2xfcGFzc3dkX2NhbGxiYWNrKGJ1ZixsZW4scndmbGFnLHVzZXJkYXRhKQotICAgIGNoYXIgKiBi dWY7IGludCBsZW47IGludCByd2ZsYWc7IFZPSUQgKnVzZXJkYXRhOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17Ci0gICAgZXh0ZXJuIGNoYXIgcHdidWZbXTsKLSAgICBleHRlcm4gaW50ICBwd2Zs ZywgcHdjcnlwdDsKLSAgICBpbnQgICBvazsKLSAgICBjaGFyICpwcm9tcHQ9TlVMTDsKLQotICAg IGlmICggcHdidWZbMF0gJiYgcHdmbGcgKSB7Ci0gICAgICAgIGludCBuOwotICAgICAgICBuID0g Y2tzdHJuY3B5KGJ1Zixwd2J1ZixsZW4pOwotI2lmZGVmIE9TMgotICAgICAgICBpZiAoIHB3Y3J5 cHQgKQotICAgICAgICAgICAgY2tfZW5jcnlwdCgoY2hhciAqKWJ1Zik7Ci0jZW5kaWYgLyogT1My ICovCi0gICAgICAgIHJldHVybihuKTsKLSAgICB9Ci0KLSAgICBpZiAoIHVzZXJkYXRhID09IE5V TEwgKQotICAgICAgICBwcm9tcHQ9IkVudGVyIGNlcnRpZmljYXRlIHBhc3NwaHJhc2U6ICI7Ci0g ICAgZWxzZQotICAgICAgICBwcm9tcHQ9KGNoYXIqKXVzZXJkYXRhOwotICAgIG9rID0gdXFfdHh0 KE5VTEwscHJvbXB0LDIsTlVMTCxidWYsbGVuLE5VTEwsREVGQVVMVF9VUV9USU1FT1VUKTsKLSAg ICByZXR1cm4ob2sgPiAwID8gc3RybGVuKGJ1ZikgOiAwKTsKLX0KLQotCi0vKiBBdHRlbXB0cyB0 byBsb2FkIGNlcnRpZmljYXRlIGRhdGEgaW50byB0aGUgVExTIGNvbnRleHQgc3RydWN0dXJlcyAq LwotLyogUmV0dXJucyAxIG9uIHN1Y2Nlc3M7IDAgb24gZmFpbHVyZSAqLwotaW50Ci10bHNfbG9h ZF9jZXJ0cyhTU0xfQ1RYICogY3R4LCBTU0wgKiBjb24sIGludCBzZXJ2ZXIpCi17Ci0gICAgaW50 IHJjID0gMTsKLQotICAgIGlmICggIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSApCi0gICAgICAg IHJldHVybigwKTsKLQotICAgIGRlYnVnKEYxMTAsInRsc19sb2FkX2NlcnRzIiwiU1NMX0NUWCIs MCk7Ci0gICAgZGVidWcoRjExMCwidGxzX2xvYWRfY2VydHMiLCJTU0wiLDApOwotICAgIGRlYnVn KEYxMTAsInRsc19sb2FkX2NlcnRzIiwic2VydmVyIiwwKTsKLQotICAgIGlmICggY29uICkgewot ICAgICAgICBpZiAoc3NsX3JzYV9jZXJ0X2ZpbGUpIHsKLSAgICAgICAgICAgIGlmICggc3NsX2Rl YnVnX2ZsYWcgKQotICAgICAgICAgICAgICAgIHByaW50ZigiTG9hZGluZyBSU0EgY2VydGlmaWNh dGUgaW50byBTU0xcclxuIik7Ci0KLSAgICAgICAgICAgIHJjID0gU1NMX3VzZV9jZXJ0aWZpY2F0 ZV9maWxlKGNvbiwgc3NsX3JzYV9jZXJ0X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFg1MDlfRklMRVRZUEVfUEVNKTsKLSAgICAgICAgICAgIGlm ICghcmMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCAhcXVpZXQgfHwgc3Ns X2RlYnVnX2ZsYWcgKQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yIGxvYWRpbmcg Y2VydGlmaWNhdGUgZnJvbSAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNz bF9yc2FfY2VydF9maWxlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg aWYgKCFzc2xfcnNhX2tleV9maWxlIHx8ICFzc2xfcnNhX2tleV9maWxlWzBdKQotICAgICAgICAg ICAgICAgICAgICBtYWtlc3RyKCZzc2xfcnNhX2tleV9maWxlLHNzbF9yc2FfY2VydF9maWxlKTsK LQotICAgICAgICAgICAgICAgIHJjID0gU1NMX3VzZV9Qcml2YXRlS2V5X2ZpbGUoY29uLCBzc2xf cnNhX2tleV9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyYykKLSAg ICAgICAgICAgICAgICAgICAgcmMgPSBTU0xfdXNlX1ByaXZhdGVLZXlfZmlsZShjb24sIHNzbF9y c2FfY2VydF9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgWDUwOV9GSUxFVFlQRV9QRU0pOwotICAgICAgICAgICAgICAgIGlmICghcmMp Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoICFxdWlldCB8fCBz c2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yIGxv YWRpbmcga2V5IGZyb20gJXNcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3NsX3JzYV9rZXlfZmlsZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICAgICAgcmMgPSBTU0xfY2hlY2tfcHJpdmF0ZV9rZXkoY29uKTsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKCFyYykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKAotICAgICAgICAgICAgICAgICJQcml2YXRlIGtleSBkb2VzIG5vdCBtYXRjaCB0aGUg Y2VydGlmaWNhdGUgcHVibGljIGtleVxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChz c2xfZHNhX2NlcnRfZmlsZSkgewotICAgICAgICAgICAgaWYgKCBzc2xfZGVidWdfZmxhZyApCi0g ICAgICAgICAgICAgICAgcHJpbnRmKCJMb2FkaW5nIERTQSBjZXJ0aWZpY2F0ZSBpbnRvIFNTTFxy XG4iKTsKLQotICAgICAgICAgICAgcmMgPSBTU0xfdXNlX2NlcnRpZmljYXRlX2ZpbGUoY29uLCBz c2xfZHNhX2NlcnRfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgWDUwOV9GSUxFVFlQRV9QRU0pOwotICAgICAgICAgICAgaWYgKCFyYykKLSAgICAg ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkgewotICAgICAg ICAgICAgICAgICAgICBwcmludGYoIkVycm9yIGxvYWRpbmcgY2VydGlmaWNhdGUgZnJvbSAlc1xy XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9kc2FfY2VydF9maWxlKTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlm ICghc3NsX2RoX2tleV9maWxlIHx8ICFzc2xfZGhfa2V5X2ZpbGVbMF0pCi0gICAgICAgICAgICAg ICAgICAgIG1ha2VzdHIoJnNzbF9kaF9rZXlfZmlsZSxzc2xfZHNhX2NlcnRfZmlsZSk7Ci0gICAg ICAgICAgICAgICAgcmMgPSBTU0xfdXNlX1ByaXZhdGVLZXlfZmlsZShjb24sIHNzbF9kaF9rZXlf ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg WDUwOV9GSUxFVFlQRV9QRU0pOwotICAgICAgICAgICAgICAgIGlmICghcmMpCi0gICAgICAgICAg ICAgICAgICAgIHJjID0gU1NMX3VzZV9Qcml2YXRlS2V5X2ZpbGUoY29uLCBzc2xfZHNhX2NlcnRf ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFg1MDlfRklMRVRZUEVfUEVNKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJjKQotICAgICAg ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhcXVpZXQgfHwgc3NsX2RlYnVn X2ZsYWcgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yIGxvYWRpbmcg a2V5IGZyb20gJXNcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2Ro X2tleV9maWxlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gU1NMX2NoZWNrX3ByaXZhdGVfa2V5KGNvbik7 Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcmMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50ZigKLSAgICAgICAgICAgICAgICAgICAiUHJpdmF0ZSBrZXkg ZG9lcyBub3QgbWF0Y2ggdGhlIGNlcnRpZmljYXRlIHB1YmxpYyBrZXlcbiIpOwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9 Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHNzbF9yc2FfY2VydF9maWxlKSB7Ci0gICAgICAg ICAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKLSAgICAgICAgICAgICAgICBwcmludGYoIkxvYWRp bmcgUlNBIGNlcnRpZmljYXRlIGludG8gU1NMXHJcbiIpOwotCi0gICAgICAgICAgICByYyA9IFNT TF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUoY3R4LCBzc2xfcnNhX2NlcnRfZmlsZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfRklMRVRZUEVfUEVNKTsKLSAg ICAgICAgICAgIGlmICghcmMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCAh cXVpZXQgfHwgc3NsX2RlYnVnX2ZsYWcgKQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVy cm9yIGxvYWRpbmcgY2VydGlmaWNhdGUgZnJvbSAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNzbF9yc2FfY2VydF9maWxlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgaWYgKCFzc2xfcnNhX2tleV9maWxlIHx8ICFzc2xfcnNhX2tleV9maWxlWzBd KQotICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xfcnNhX2tleV9maWxlLHNzbF9yc2Ff Y2VydF9maWxlKTsKLQotICAgICAgICAgICAgICAgIHJjID0gU1NMX0NUWF91c2VfUHJpdmF0ZUtl eV9maWxlKGN0eCwgc3NsX3JzYV9rZXlfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9GSUxFVFlQRV9QRU0pOwotICAgICAgICAgICAg ICAgIGlmICghcmMpCi0gICAgICAgICAgICAgICAgICByYyA9IFNTTF9DVFhfdXNlX1ByaXZhdGVL ZXlfZmlsZShjdHgsIHNzbF9yc2FfY2VydF9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9GSUxFVFlQRV9QRU0pOwotICAgICAgICAg ICAgICAgIGlmICghcmMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBzc2xfZGVidWdfZmxh ZyApCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBsb2FkaW5nIGtleSBmcm9t ICVzXHJcbiIsc3NsX3JzYV9rZXlfZmlsZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICAgICAgcmMgPSBTU0xfQ1RYX2NoZWNrX3ByaXZhdGVfa2V5KGN0eCk7Ci0g ICAgICAgICAgICAgICAgICAgIGlmICghcmMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm ICggc3NsX2RlYnVnX2ZsYWcgKQotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCi0g ICAgICAgICAgICAgICAgIlByaXZhdGUga2V5IGRvZXMgbm90IG1hdGNoIHRoZSBjZXJ0aWZpY2F0 ZSBwdWJsaWMga2V5XHJcbiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzc2xfZHNhX2NlcnRf ZmlsZSkgewotICAgICAgICAgICAgaWYgKCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAg IHByaW50ZigiTG9hZGluZyBEU0EgY2VydGlmaWNhdGUgaW50byBTU0xcclxuIik7Ci0KLSAgICAg ICAgICAgIHJjID0gU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZShjdHgsIHNzbF9kc2FfY2Vy dF9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1 MDlfRklMRVRZUEVfUEVNKTsKLSAgICAgICAgICAgIGlmICghcmMpIHsKLSAgICAgICAgICAgICAg ICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVy cm9yIGxvYWRpbmcgY2VydGlmaWNhdGUgZnJvbSAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3NsX2RzYV9jZXJ0X2ZpbGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzc2xfZGhfa2V5X2ZpbGUgfHwgIXNz bF9kaF9rZXlfZmlsZVswXSkKLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX2RoX2tl eV9maWxlLHNzbF9kc2FfY2VydF9maWxlKTsKLSAgICAgICAgICAgICAgICByYyA9IFNTTF9DVFhf dXNlX1ByaXZhdGVLZXlfZmlsZShjdHgsIHNzbF9kaF9rZXlfZmlsZSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9GSUxFVFlQRV9QRU0pOwot ICAgICAgICAgICAgICAgIGlmICghcmMpCi0gICAgICAgICAgICAgICAgICByYyA9IFNTTF9DVFhf dXNlX1ByaXZhdGVLZXlfZmlsZShjdHgsIHNzbF9kc2FfY2VydF9maWxlLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9GSUxFVFlQRV9Q RU0pOwotICAgICAgICAgICAgICAgIGlmICghcmMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg KCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBs b2FkaW5nIGtleSBmcm9tICVzXHJcbiIsc3NsX2RoX2tleV9maWxlKTsKLSAgICAgICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByYyA9IFNTTF9DVFhfY2hlY2tfcHJpdmF0 ZV9rZXkoY3R4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFyYykgewotICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigKLSAgICAgICAgICAgICAgICAgICAiUHJpdmF0ZSBrZXkgZG9lcyBub3QgbWF0 Y2ggdGhlIGNlcnRpZmljYXRlIHB1YmxpYyBrZXlcbiIpOwotICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g ICAgaWYgKHNzbF9yc2FfY2VydF9jaGFpbl9maWxlICYmIHNlcnZlcikgewotICAgICAgICBpbnQg c2tpcDFzdCA9IDA7Ci0gICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgIHBy aW50ZigiTG9hZGluZyBSU0EgQ2VydGlmaWNhdGUgQ2hhaW4gaW50byBTU0xcclxuIik7Ci0gICAg ICAgIGlmICghY2tzdHJjbXAoc3NsX3JzYV9jZXJ0X2NoYWluX2ZpbGUsc3NsX3JzYV9jZXJ0X2Zp bGUsLTEsCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgICAgIDAKLSNlbHNlCi0gICAg ICAgICAgICAgICAgICAgICAgIDEKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgKSkKLSAgICAgICAgICAgIHNraXAxc3QgPSAxOwotICAgICAgICByYyA9IFNTTF9DVFhf dXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUoY3R4LHNzbF9yc2FfY2VydF9jaGFpbl9maWxlKTsK LSAgICAgICAgaWYgKCFyYyAmJiBzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBwcmlu dGYoIkVycm9yIGxvYWRpbmcgUlNBIENlcnRpZmljYXRlIENoYWluIGludG8gU1NMXHJcbiIpOwot ICAgIH0KLSAgICBpZiAoc3NsX2RzYV9jZXJ0X2NoYWluX2ZpbGUgJiYgc2VydmVyKSB7Ci0gICAg ICAgIGludCBza2lwMXN0ID0gMDsKLSAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAg ICAgICAgcHJpbnRmKCJMb2FkaW5nIERTQSBDZXJ0aWZpY2F0ZSBDaGFpbiBpbnRvIFNTTFxyXG4i KTsKLSAgICAgICAgaWYgKCFja3N0cmNtcChzc2xfZHNhX2NlcnRfY2hhaW5fZmlsZSxzc2xfZHNh X2NlcnRfZmlsZSwtMSwKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgICAgMAotI2Vs c2UKLSAgICAgICAgICAgICAgICAgICAgICAgMQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAg ICAgICAgICAgICAgICApKQotICAgICAgICAgICAgc2tpcDFzdCA9IDE7Ci0gICAgICAgIHJjID0g U1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZShjdHgsc3NsX2RzYV9jZXJ0X2NoYWlu X2ZpbGUpOwotICAgICAgICBpZiAoIXJjICYmIHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAg ICAgIHByaW50ZigiRXJyb3IgbG9hZGluZyBEU0EgQ2VydGlmaWNhdGUgQ2hhaW4gaW50byBTU0xc clxuIik7Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19Ci0KLVZPSUQKLSNpZmRlZiBDS19BTlNJ Qwotc3NsX29uY2VfaW5pdCh2b2lkKQotI2Vsc2UKLXNzbF9vbmNlX2luaXQoKQotI2VuZGlmIC8q IENLX0FOU0lDICovCi17Ci0gICAgQ09NUF9NRVRIT0QgKiBjbTsKLSAgICBjaGFyICogczsKLQot ICAgIGlmICggIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSApCi0gICAgICAgIHJldHVybjsKLS8q Ci0gIE9wZW5TU0wgZG9lcyBub3QgcHJvdmlkZSBmb3IgQUJJIGNvbXBhdGliaWxpdHkgYmV0d2Vl biByZWxlYXNlcyBwcmlvcgotICB0byB2ZXJzaW9uIDEuMC4wLiAgSWYgdGhlIHZlcnNpb24gZG9l cyBub3QgbWF0Y2gsIGl0IGlzIG5vdCBzYWZlIHRvCi0gIGFzc3VtZSB0aGF0IGFueSBmdW5jdGlv biB5b3UgY2FsbCB0YWtlcyB0aGUgc2FtZSBwYXJhbWV0ZXJzIG9yIGRvZXMKLSAgdGhlIHNhbWUg dGhpbmcgd2l0aCB0aGVtLiAgUmVtb3ZpbmcgdGhpcyB0ZXN0IHByaW9yIHRvIHRoZSBPcGVuU1NM IDEuMC4wCi0gIHJlbGVhc2Ugd2lsbCByZXN1bHQgaW4gYW4gaW5jcmVhc2UgaW4gdW5leHBsYWlu ZWQgb3IgaW5jb3JyZWN0IGJlaGF2aW9ycy4KLSAgVGhlIHRlc3Qgc2hvdWxkIGJlIHJldmlzZWQg b25jZSBPcGVuU1NMIDEuMC4wIGlzIHJlbGVhc2VkIGFuZCB3ZSBzZWUgd2hhdAotICBpdHMgY2xh aW1zIGFyZSBhcyB0byBBQkkgY29tcGF0aWJpbGl0eS4KLSovCi0gICAgZGVidWcoRjExMSwiS2Vy bWl0IGJ1aWx0IGZvciBPcGVuU1NMIixPUEVOU1NMX1ZFUlNJT05fVEVYVCxTU0xFQVlfVkVSU0lP Tl9OVU1CRVIpOwotI2lmbmRlZiBPUzJPTkxZCi0gICAgZGVidWcoRjExMSwiT3BlblNTTCBMaWJy YXJ5IixTU0xlYXlfdmVyc2lvbihTU0xFQVlfVkVSU0lPTiksCi0gICAgICAgICAgIFNTTGVheSgp KTsKLSAgICBkZWJ1ZyhGMTEwLCJPcGVuU1NMIExpYnJhcnkiLFNTTGVheV92ZXJzaW9uKFNTTEVB WV9CVUlMVF9PTiksMCk7Ci0gICAgZGVidWcoRjExMCwiT3BlblNTTCBMaWJyYXJ5IixTU0xlYXlf dmVyc2lvbihTU0xFQVlfQ0ZMQUdTKSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJPcGVuU1NMIExpYnJh cnkiLFNTTGVheV92ZXJzaW9uKFNTTEVBWV9QTEFURk9STSksMCk7Ci0KLSAgICAvKiBUaGUgZm9s bG93aW5nIHRlc3QgaXMgc3VnZ2VzdGVkIGJ5IFJpY2hhcmQgTGV2aXR0ZSAqLwotICAgIGlmICgo KE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgXiBTU0xlYXkoKSkgJiAweGZmZmZmZjBmKSAKLSNpZmRl ZiBPUzIKLSAgICAgICAgIHx8IGNrc3RyY21wKE9QRU5TU0xfVkVSU0lPTl9URVhULChjaGFyICop U1NMZWF5X3ZlcnNpb24oU1NMRUFZX1ZFUlNJT04pLC0xLDEpCi0jZW5kaWYgLyogT1MyICovCi0g ICAgICAgICApIHsKLSAgICAgICAgc3NsX2luc3RhbGxlZCA9IDA7Ci0gICAgICAgIGRlYnVnKEYx MTEsIk9wZW5TU0wgVmVyc2lvbiBkb2VzIG5vdCBtYXRjaC4gIEJ1aWx0IHdpdGgiLAotICAgICAg ICAgICAgICAgU1NMZWF5X3ZlcnNpb24oU1NMRUFZX1ZFUlNJT04pLFNTTEVBWV9WRVJTSU9OX05V TUJFUik7Ci0gICAgICAgIHByaW50ZigiP09wZW5TU0wgbGlicmFyaWVzIGRvIG5vdCBtYXRjaCBy ZXF1aXJlZCB2ZXJzaW9uOlxyXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIC4gQy1LZXJtaXQgYnVp bHQgd2l0aCAlc1xyXG4iLE9QRU5TU0xfVkVSU0lPTl9URVhUKTsKLSAgICAgICAgcHJpbnRmKCIg IC4gVmVyc2lvbiBmb3VuZCAgJXNcclxuIixTU0xlYXlfdmVyc2lvbihTU0xFQVlfVkVSU0lPTikp OwotICAgICAgICBwcmludGYoIiAgT3BlblNTTCB2ZXJzaW9ucyBwcmlvciB0byAxLjAuMCBtdXN0 IGJlIHRoZSBzYW1lLlxyXG4iKTsgICAgCi0KLQlzID0gIlIiOwotI2lmZGVmIFNPTEFSSVMKLQlw cmludGYoIiAgU2V0IENEX0xJQlJBUllfUEFUSCBmb3IgJXMuXHJcbiIsT1BFTlNTTF9WRVJTSU9O X1RFWFQpOwotCXMgPSAiIE9yIHIiOwotI2VuZGlmCS8qIFNPTEFSSVMgKi8KLQotI2lmZGVmIEhQ VVgKLQlwcmludGYoIiAgU2V0IFNITElCX1BBVEggZm9yICVzLlxyXG4iLE9QRU5TU0xfVkVSU0lP Tl9URVhUKTsKLQlzID0gIiBPciByIjsKLSNlbmRpZgkvKiBIUFVYICovCi0KLSNpZmRlZiBBSVgK LQlwcmludGYoIiAgU2V0IExJQlBBVEggZm9yICVzLlxyXG4iLE9QRU5TU0xfVkVSU0lPTl9URVhU KTsKLQlzID0gIiBPciByIjsKLSNlbmRpZgkvKiBBSVggKi8KLQotI2lmZGVmIExJTlVYCi0JcHJp bnRmKCIgIFNldCBMRF9MSUJSQVJZX1BBVEggZm9yICVzLlxyXG4iLE9QRU5TU0xfVkVSU0lPTl9U RVhUKTsKLQlzID0gIiBPciByIjsKLSNlbmRpZgkvKiBMSU5VWCAqLwotCi0gICAgICAgIHByaW50 ZigiICVzZWJ1aWxkIEMtS2VybWl0IGZyb20gc291cmNlIG9uIHRoaXMgY29tcHV0ZXIgdG8gbWFr ZSBcCi12ZXJzaW9ucyBhZ3JlZS5cclxuIixzKTsKLQotI2lmZGVmIEtUQVJHRVQKLQl7Ci0JICAg IGNoYXIgKiBzOwotCSAgICBzID0gS1RBUkdFVDsKLQkgICAgaWYgKCFzKSBzID0gIiI7Ci0JICAg IGlmICghKnMpIHMgPSAiKHVua25vd24pIjsKLQkgICAgcHJpbnRmKCIgIEMtS2VybWl0IG1ha2Vm aWxlIHRhcmdldDogJXNcclxuIixzKTsKLQl9Ci0jZW5kaWYJLyogS1RBUkdFVCAqLwotICAgICAg ICBwcmludGYoIiAgT3IgaWYgdGhhdCBpcyB3aGF0IHlvdSBkaWQgdGhlbiB0cnkgdG8gZmluZCBv dXQgd2h5XHJcbiIpOwotICAgICAgICBwcmludGYoIiAgdGhlIHByb2dyYW0gbG9hZGVyIChpbWFn ZSBhY3RpdmF0b3IpIGlzIGNob29zaW5nIGFcclxuIik7Ci0gICAgICAgIHByaW50ZigiICBkaWZm ZXJlbnQgT3BlblNTTCBsaWJyYXJ5IHRoYW4gdGhlIG9uZSBzcGVjaWZpZWQgaW4gXAotdGhlIGJ1 aWxkLlxyXG5cclxuIik7Ci0gICAgICAgIHByaW50ZigiICBBbGwgU1NML1RMUyBmZWF0dXJlcyBk aXNhYmxlZC5cclxuXHJcbiIpOwotICAgICAgICBibGVlcChCUF9GQUlMKTsKLSNpZmRlZiBTU0xE TEwKLSAgICAgICAgY2tfc3NsX3VubG9hZGRsbCgpOwotICAgICAgICBja19jcnlwdG9fdW5sb2Fk ZGxsKCk7Ci0jZW5kaWYgLyogU1NMRExMICovCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5k aWYgLyogT1MyT05MWSAqLwotCi0gICAgLyogaW5pdCB0aGluZ3Mgc28gd2Ugd2lsbCBnZXQgbWVh bmluZ2Z1bCBlcnJvciBtZXNzYWdlcwotICAgICAqIHJhdGhlciB0aGFuIG51bWJlcnMKLSAgICAg Ki8KLSAgICBTU0xfbG9hZF9lcnJvcl9zdHJpbmdzKCk7Ci0KLSNpZmRlZiBTU0hCVUlMVElOCi0g ICAgT1BFTlNTTF9hZGRfYWxsX2FsZ29yaXRobXNfbm9jb25mKCk7Ci0jZWxzZQotICAgIC8qIFNT TF9saWJyYXJ5X2luaXQoKSBvbmx5IGxvYWRzIHRob3NlIGNpcGhlcnMgbmVlZHMgZm9yIFNTTCAg Ki8KLSAgICAvKiBUaGVzZSBoYXBwZW4gdG8gYmUgYSBzaW1pbGFyIHNldCB0byB0aG9zZSByZXF1 aXJlZCBmb3IgU1NIICovCi0gICAgLyogYnV0IHRoZXkgYXJlIG5vdCBhIGNvbXBsZXRlIHNldCBv ZiBjaXBoZXJzIHByb3ZpZGVkIGJ5IHRoZSAqLwotICAgIC8qIGNyeXB0byBsaWJyYXJ5LiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBTU0xfbGlicmFy eV9pbml0KCk7Ci0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotCi0jaWZkZWYgWkxJQgotICAgIGNt ID0gQ09NUF96bGliKCk7Ci0gICAgaWYgKGNtICE9IE5VTEwgJiYgY20tPnR5cGUgIT0gTklEX3Vu ZGVmKSB7Ci0gICAgICAgIFNTTF9DT01QX2FkZF9jb21wcmVzc2lvbl9tZXRob2QoMHhlMCwgY20p OyAvKiBFQVkncyBaTElCIElEICovCi0gICAgfQotI2VuZGlmIC8qIFpMSUIgKi8KLSAgICBjbSA9 IENPTVBfcmxlKCk7Ci0gICAgaWYgKGNtICE9IE5VTEwgJiYgY20tPnR5cGUgIT0gTklEX3VuZGVm KQotICAgICAgICBTU0xfQ09NUF9hZGRfY29tcHJlc3Npb25fbWV0aG9kKDB4ZTEsIGNtKTsgLyog RUFZJ3MgUkxFIElEICovCi0KLSAgICAvKiBFbnN1cmUgdGhlIFJhbmRvbSBudW1iZXIgZ2VuZXJh dG9yIGhhcyBlbm91Z2ggZW50cm9weSAqLwotICAgIGlmICggIVJBTkRfc3RhdHVzKCkgKSB7Ci0g ICAgICAgIGNoYXIgYnVmZmVyWzI1Nl09IiI7Ci0gICAgICAgIGNoYXIgcmFuZG9tYnl0ZXNbMjU2 XTsKLSAgICAgICAgaW50IHJjMSA9IC0xLCByYzIgPSAxOyAgLyogYXNzdW1lIGZhaWx1cmUgYW5k IHN1Y2Nlc3MgKi8KLQotICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfb25jZV9pbml0IiwiIVJBTkRf c3RhdHVzKCkiLDApOwotCi0gICAgICAgIGlmICggc3NsX3JuZF9maWxlID09IE5VTEwgKSB7Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfcm5kX2ZpbGUiLCJzc2xfcm5kX2ZpbGUgaXMgTlVM TCIsMCk7Ci0gICAgICAgICAgICBSQU5EX2ZpbGVfbmFtZShidWZmZXIsMjU2KTsKLSAgICAgICAg ICAgIGlmICggYnVmZmVyWzBdICkKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xfcm5kX2Zp bGUsIGJ1ZmZlcik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWFrZXN0cigm c3NsX3JuZF9maWxlLCIucm5kIik7Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMCwic3Ns X3JuZF9maWxlIixzc2xfcm5kX2ZpbGUsMCk7Ci0KLSAgICAgICAgcmMxID0gUkFORF9lZ2Qoc3Ns X3JuZF9maWxlKTsKLSAgICAgICAgZGVidWcoRjExMSwic3NsX29uY2VfaW5pdCIsIlJBTkRfZWdk KCkiLHJjMSk7Ci0gICAgICAgIGlmICggcmMxIDw9IDAgKSB7Ci0gICAgICAgICAgICByYzIgPSBS QU5EX2xvYWRfZmlsZShzc2xfcm5kX2ZpbGUsIC0xKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEs InNzbF9vbmNlX2luaXQiLCJSQU5EX2xvYWRfZmlsZSgpIixyYzEpOwotICAgICAgICB9Ci0KLSAg ICAgICAgaWYgKCByYzEgPD0gMCAmJiAhcmMyICkKLSAgICAgICAgewotICAgICAgICAgICAgdGlt ZV90IHQgPSB0aW1lKE5VTEwpOwotICAgICAgICAgICAgaW50IHRsZW4gPSBzaXplb2YodGltZV90 KTsKLSAgICAgICAgICAgIGludCBwaWQgPSBnZXRwaWQoKTsKLSAgICAgICAgICAgIGludCBwbGVu ID0gc2l6ZW9mKGludCk7Ci0gICAgICAgICAgICBpbnQgbjsKLSNpZm5kZWYgUkFORF9NQVgKLSNk ZWZpbmUgUkFORF9NQVggMHg3RkZGCi0jZW5kaWYKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNz bF9vbmNlX2luaXQiLCJjYWxsaW5nIFJBTkRfc2VlZCgpIiwwKTsKLQotICAgICAgICAgICAgUkFO RF9zZWVkKCh1bnNpZ25lZCBjaGFyICopJnQsIHRsZW4pOwotICAgICAgICAgICAgUkFORF9zZWVk KCh1bnNpZ25lZCBjaGFyICopJnBpZCwgcGxlbik7Ci0KLSAgICAgICAgICAgIHNyYW5kKCh1bnNp Z25lZCBpbnQpdCk7Ci0gICAgICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiUuMGYiLCAoKChkb3Vi bGUpKHJhbmQoKSVSQU5EX01BWCkvUkFORF9NQVgpKgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoc2l6ZW9mKHJhbmRvbWJ5dGVzKS0xMjgtMSkpKTsKLSAgICAgICAgICAg IG4gPSAoYXRvaShidWZmZXIpKzEpJShzaXplb2YocmFuZG9tYnl0ZXMpLTEyOC0xKTsKLSAgICAg ICAgICAgIFJBTkRfc2VlZChyYW5kb21ieXRlcywgMTI4KTsKLSAgICAgICAgfQotCi0gICAgICAg IGlmICggIVJBTkRfc3RhdHVzKCkgKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfb25j ZV9pbml0IiwiVW5hYmxlIHRvIGluaXRpYWxpemUgUFJORyIsMCk7Ci0gICAgICAgICAgICBwcmlu dGYoIiBVbmFibGUgdG8gbG9hZCAncmFuZG9tIHN0YXRlJ1xuIik7Ci0gICAgICAgICAgICBwcmlu dGYoIiBTU0wgYW5kIFRMUyBhcmUgdW5hdmFpbGJsZS5cbiIpOwotICAgICAgICAgICAgcHJpbnRm KCIgVXNlIFNFVCBBVVRIIFNTTCBSQU5ET00tRklMRSA8ZmlsZT4gY29tbWFuZCB0byBwcm92aWRl IHJhbmRvbSBkYXRhLlxuIik7Ci0gICAgICAgICAgICBwcmludGYoIiBTcGVjaWZpZWQgZmlsZSB3 aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggbmV3IHJhbmRvbSBkYXRhIGFmdGVyIHVzZS5cbiIpOwot ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBzc2xfcm5kX2Zp bGUgKSB7Ci0gICAgICAgICAgICBpbnQgcmMgPSBSQU5EX3dyaXRlX2ZpbGUoc3NsX3JuZF9maWxl KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInNzbF9vbmNlX2luaXQiLCJSQU5EX3dyaXRlX2Zp bGUoKSIscmMpOwotICAgICAgICB9Ci0gICAgfQotCi0jaWZkZWYgTlQKLSAgICAvLyBJbml0aWFs aXplIGFkZGl0aW9uYWwgT0lEIHR5cGVzIGZvciB1c2Ugd2hlbiBzYXZpbmcgY2VydHMgdG8gYSBm aWxlCi0gICAgT0JKX2NyZWF0ZSgiMi45OTk5OS4zIiwiU0VULmV4MyIsIlNFVCB4NTA5djMgZXh0 ZW5zaW9uIDMiKTsKLSNlbmRpZiAvKiBOVCAqLwotCi0gICAgLyogbWFrZSBzdXJlIHdlIGhhdmUg c29tZXdoZXJlIHdlIGNhbiBsb2cgZXJyb3JzIHRvICovCi0gICAgYmlvX2Vycj1CSU9fbmV3KEJJ T19zX21lbSgpKTsKLQotICAgIGRlYnVnKEYxMDAsInNzbF9vbmNlX2luaXQoKSBjb21wbGV0ZSIs IiIsMCk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1zc2xfdG5faW5pdChpbnQgbW9kZSkK LSNlbHNlCi1zc2xfdG5faW5pdChtb2RlKSBpbnQgbW9kZTsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotewotI2lmZGVmIEtSQjUKLSAgICBleHRlcm4gY2hhciAqIGs1X2tleXRhYjsKLSAgICBleHRl cm4gY2hhciAqIGtyYjVfZF9zcnY7Ci0jZW5kaWYgLyogS1JCNSAqLwotICAgIHN0YXRpYyBpbnQg bGFzdF9zc2xfbW9kZSA9IC0xOwotICAgIFNTTCAqIHNzbF9jb254PU5VTEwsICogdGxzX2Nvbng9 TlVMTDsKLQotICAgIHNzbF9pbml0aWFsaXplZCA9IDA7Ci0KLSAgICBpZiAoICFja19zc2xlYXlf aXNfaW5zdGFsbGVkKCkgKQotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICBkZWJ1ZyhGMTExLCJz c2xfdG5faW5pdCIsIm1vZGUiLG1vZGUpOwotCi0gICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAg ICAgICBwcmludGYoIlNTTF9ERUJVR19GTEFHIG9uXHJcbiIpOwotCi0gICAgaWYgKGxhc3Rfc3Ns X21vZGUgIT0gbW9kZSkgewotICAgICAgICBpZiAoc3NsX2N0eCkgewotICAgICAgICAgICAgU1NM X0NUWF9mcmVlKHNzbF9jdHgpOwotICAgICAgICAgICAgc3NsX2N0eCA9IE5VTEw7Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKHRsc19jdHgpIHsKLSAgICAgICAgICAgIFNTTF9DVFhfZnJlZSh0bHNf Y3R4KTsKLSAgICAgICAgICAgIHRsc19jdHggPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0g ICAgaWYgKCAobGFzdF9zc2xfbW9kZSAhPSBtb2RlKSB8fCAhc3NsX2N0eCB8fCAhdGxzX2N0eCAp IHsKLSAgICAgICAgaWYgKCBtb2RlID09IFNTTF9DTElFTlQgKSB7Ci0gICAgICAgICAgICBzc2xf Y3R4PShTU0xfQ1RYICopU1NMX0NUWF9uZXcoU1NMdjIzX2NsaWVudF9tZXRob2QoKSk7Ci0gICAg ICAgICAgICAvKiBUaGlzIGNhbiBmYWlsIGJlY2F1c2Ugd2UgZG8gbm90IGhhdmUgUlNBIGF2YWls YWJsZSAqLwotICAgICAgICAgICAgaWYgKCAhc3NsX2N0eCApIHsKLSAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlNTTHYyM19jbGllbnRfbWV0aG9kIGZhaWxlZCIsMCk7 Ci0gICAgICAgICAgICAgICAgc3NsX2N0eD0oU1NMX0NUWCAqKVNTTF9DVFhfbmV3KFNTTHYzX2Ns aWVudF9tZXRob2QoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoICFzc2xfY3R4 ICkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IiwiU1NMdjNfY2xp ZW50X21ldGhvZCBmYWlsZWQiLDApOwotICAgICAgICAgICAgICAgIGxhc3Rfc3NsX21vZGUgPSAt MTsKLSAgICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICB9Ci0jaWZuZGVmIENP TU1FTlQKLSAgICAgICAgICAgIHRsc19jdHg9KFNTTF9DVFggKilTU0xfQ1RYX25ldyhUTFN2MV9j bGllbnRfbWV0aG9kKCkpOwotI2Vsc2UgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgdGxzX2N0 eD0oU1NMX0NUWCAqKVNTTF9DVFhfbmV3KFNTTHYyM19jbGllbnRfbWV0aG9kKCkpOwotICAgICAg ICAgICAgLyogVGhpcyBjYW4gZmFpbCBiZWNhdXNlIHdlIGRvIG5vdCBoYXZlIFJTQSBhdmFpbGFi bGUgKi8KLSAgICAgICAgICAgIGlmICggIXRsc19jdHggKSB7Ci0gICAgICAgICAgICAgICAgZGVi dWcoRjExMCwic3NsX3RuX2luaXQiLCJTU0x2MjNfY2xpZW50X21ldGhvZCBmYWlsZWQiLDApOwot ICAgICAgICAgICAgICAgIHRsc19jdHg9KFNTTF9DVFggKilTU0xfQ1RYX25ldyhTU0x2M19jbGll bnRfbWV0aG9kKCkpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAg ICAgICAgIGlmICggIXRsc19jdHggKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3Ns X3RuX2luaXQiLCJUTFN2MV9jbGllbnRfbWV0aG9kIGZhaWxlZCIsMCk7Ci0gICAgICAgICAgICAg ICAgbGFzdF9zc2xfbW9kZSA9IC0xOwotICAgICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAg ICAgICAgIH0KLSNpZmRlZiBVU0VfQ0VSVF9DQgotICAgICAgICAgICAgU1NMX0NUWF9zZXRfY2xp ZW50X2NlcnRfY2Ioc3NsX2N0eCxzc2xfY2xpZW50X2NlcnRfY2FsbGJhY2spOwotICAgICAgICAg ICAgU1NMX0NUWF9zZXRfY2xpZW50X2NlcnRfY2IodGxzX2N0eCxzc2xfY2xpZW50X2NlcnRfY2Fs bGJhY2spOwotI2VuZGlmIC8qIFVTRV9DRVJUX0NCICovCi0gICAgICAgIH0gZWxzZSBpZiAobW9k ZSA9PSBTU0xfU0VSVkVSKSB7Ci0gICAgICAgICAgICAvKiBXZSBhcmUgYSBzZXJ2ZXIgKi8KLSAg ICAgICAgICAgIHNzbF9jdHg9KFNTTF9DVFggKilTU0xfQ1RYX25ldyhTU0x2MjNfc2VydmVyX21l dGhvZCgpKTsKLSAgICAgICAgICAgIC8qIFRoaXMgY2FuIGZhaWwgYmVjYXVzZSB3ZSBkbyBub3Qg aGF2ZSBSU0EgYXZhaWxhYmxlICovCi0gICAgICAgICAgICBpZiAoICFzc2xfY3R4ICkgewotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IiwiU1NMdjIzX3NlcnZlcl9tZXRo b2QgZmFpbGVkIiwwKTsKLSAgICAgICAgICAgICAgICBzc2xfY3R4PShTU0xfQ1RYICopU1NMX0NU WF9uZXcoU1NMdjNfc2VydmVyX21ldGhvZCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGlmICggIXNzbF9jdHggKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2lu aXQiLCJTU0x2M19zZXJ2ZXJfbWV0aG9kIGZhaWxlZCIsMCk7Ci0gICAgICAgICAgICAgICAgbGFz dF9zc2xfbW9kZSA9IC0xOwotICAgICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAg IH0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICB0bHNfY3R4PShTU0xfQ1RYICopU1NMX0NU WF9uZXcoVExTdjFfc2VydmVyX21ldGhvZCgpKTsKLSNlbHNlIC8qIENPTU1FTlQgKi8KLSAgICAg ICAgICAgIHRsc19jdHg9KFNTTF9DVFggKilTU0xfQ1RYX25ldyhTU0x2MjNfc2VydmVyX21ldGhv ZCgpKTsKLSAgICAgICAgICAgIC8qIFRoaXMgY2FuIGZhaWwgYmVjYXVzZSB3ZSBkbyBub3QgaGF2 ZSBSU0EgYXZhaWxhYmxlICovCi0gICAgICAgICAgICBpZiAoICF0bHNfY3R4ICkgewotICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IiwiU1NMdjIzX3NlcnZlcl9tZXRob2Qg ZmFpbGVkIiwwKTsKLSAgICAgICAgICAgICAgICB0bHNfY3R4PShTU0xfQ1RYICopU1NMX0NUWF9u ZXcoVExTdjFfc2VydmVyX21ldGhvZCgpKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDT01N RU5UICovCi0gICAgICAgICAgICBpZiAoICF0bHNfY3R4ICkgewotICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsInNzbF90bl9pbml0IiwiVExTdjFfc2VydmVyX21ldGhvZCBmYWlsZWQiLDApOwot ICAgICAgICAgICAgICAgIGxhc3Rfc3NsX21vZGUgPSAtMTsKLSAgICAgICAgICAgICAgICByZXR1 cm4oMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSAvKiBVbmtub3duIG1vZGUgKi8K LSAgICAgICAgICAgIHJldHVybigwKTsKLQotICAgICAgICBpZiAoICFpbnNlcnZlciApIHsKLSAg ICAgICAgICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKHNzbF9jdHgsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwZW1fcGFzc3dvcmRfY2IgKilzc2xfcGFzc3dk X2NhbGxiYWNrKTsKLSAgICAgICAgICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKHRs c19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwZW1fcGFzc3dvcmRf Y2IgKilzc2xfcGFzc3dkX2NhbGxiYWNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGZvciBT U0wgc3dpdGNoIG9uIGFsbCB0aGUgaW50ZXJvcGVyYWJpbGl0eSBhbmQgYnVnCi0gICAgICAgICAq IHdvcmthcm91bmRzIHNvIHRoYXQgd2Ugd2lsbCBjb21tdW5pY2F0ZSB3aXRoIHBlb3BsZQotICAg ICAgICAgKiB0aGF0IGNhbm5vdCByZWFkIHBvb3JseSB3cml0dGVuIHNwZWNzIDotKQotICAgICAg ICAgKiBmb3IgVExTIGJlIHN1cmUgdG8gcHJldmVudCB1c2Ugb2YgU1NMdjIKLSAgICAgICAgICov Ci0gICAgICAgIFNTTF9DVFhfc2V0X29wdGlvbnMoc3NsX2N0eCxTU0xfT1BfQUxMfFNTTF9PUF9O T19TU0x2Mik7Ci0gICAgICAgIFNTTF9DVFhfc2V0X29wdGlvbnModGxzX2N0eCwKLSAgICAgICAg ICAgICAgICAgU1NMX09QX05PX1NTTHYyfFNTTF9PUF9TSU5HTEVfREhfVVNFfFNTTF9PUF9FUEhF TUVSQUxfUlNBKTsKLQotICAgICAgICBTU0xfQ1RYX3NldF9pbmZvX2NhbGxiYWNrKHNzbF9jdHgs c3NsX2NsaWVudF9pbmZvX2NhbGxiYWNrKTsKLSAgICAgICAgU1NMX0NUWF9zZXRfaW5mb19jYWxs YmFjayh0bHNfY3R4LHNzbF9jbGllbnRfaW5mb19jYWxsYmFjayk7Ci0KLSNpZm5kZWYgQ09NTUVO VAotICAgICAgICAvKiBTZXQgdGhlIHByb3BlciBjYWNoaW5nIG1vZGUgKi8KLSAgICAgICAgaWYg KCBtb2RlID09IFNTTF9TRVJWRVIgKSB7Ci0gICAgICAgICAgICBTU0xfQ1RYX3NldF9zZXNzaW9u X2NhY2hlX21vZGUoc3NsX2N0eCxTU0xfU0VTU19DQUNIRV9TRVJWRVIpOwotICAgICAgICAgICAg U1NMX0NUWF9zZXRfc2Vzc2lvbl9jYWNoZV9tb2RlKHRsc19jdHgsU1NMX1NFU1NfQ0FDSEVfU0VS VkVSKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFNTTF9DVFhfc2V0X3Nlc3Npb25f Y2FjaGVfbW9kZShzc2xfY3R4LFNTTF9TRVNTX0NBQ0hFX0NMSUVOVCk7Ci0gICAgICAgICAgICBT U0xfQ1RYX3NldF9zZXNzaW9uX2NhY2hlX21vZGUodGxzX2N0eCxTU0xfU0VTU19DQUNIRV9DTElF TlQpOwotICAgICAgICB9Ci0gICAgICAgIFNTTF9DVFhfc2V0X3Nlc3Npb25faWRfY29udGV4dChz c2xfY3R4LChDSEFSICopIjEiLDEpOwotICAgICAgICBTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2Nv bnRleHQodGxzX2N0eCwoQ0hBUiAqKSIyIiwxKTsKLSNlbHNlIC8qIENPTU1FTlQgKi8KLSAgICAg ICAgU1NMX0NUWF9zZXRfc2Vzc2lvbl9jYWNoZV9tb2RlKHNzbF9jdHgsU1NMX1NFU1NfQ0FDSEVf T0ZGKTsKLSAgICAgICAgU1NMX0NUWF9zZXRfc2Vzc2lvbl9jYWNoZV9tb2RlKHRsc19jdHgsU1NM X1NFU1NfQ0FDSEVfT0ZGKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotCi0gICAgLyog VGhlIHNlcnZlciB1c2VzIGRlZmF1bHRzIGZvciB0aGUgY2VydGlmaWNhdGUgZmlsZXMuICovCi0g ICAgLyogVGhlIGNsaWVudCBkb2VzIG5vdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICovCi0gICAgaWYgKG1vZGUgPT0gU1NMX1NFUlZFUikgewotICAgICAgICBjaGFyIGNlcnRfZmls ZXBhdGhbMTAyNF07Ci0gICAgICAgIGNvbnN0IGNoYXIgKiBkZWZkaXIgPSBOVUxMOwotICAgICAg ICBESCAqIGRoID0gTlVMTDsKLQotICAgICAgICBkZWZkaXIgPSBnZXRlbnYoIlNTTF9DRVJUX0RJ UiIpOwotICAgICAgICBpZiAoICFkZWZkaXIgKSB7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICBk ZWZkaXIgPSBleGVkaXI7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgICAgIGRlZmRpciA9IFg1 MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXIoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAg IGRlYnVnKEYxMTAsInNzbF90bl9pbml0IC0gc2V0dGluZyBkZWZhdWx0IGRpcmVjdG9yeSB0byIs ZGVmZGlyLDApOwotICAgICAgICB9Ci0gICAgICAgIGlmICggIWRlZmRpciApCi0gICAgICAgICAg ICBkZWZkaXIgPSAiIjsKLQotICAgICAgICBpZiAoIXNzbF9yc2FfY2VydF9maWxlKSB7Ci0gICAg ICAgICAgICAvKiB3ZSBuZWVkIHRvIGtub3cgdGhlIGZ1bGxwYXRoIHRvIHRoZSBsb2NhdGlvbiBv ZiB0aGUKLSAgICAgICAgICAgICogY2VydGlmaWNhdGUgdGhhdCB3ZSB3aWxsIGJlIHJ1bm5pbmcg d2l0aCBhcyB3ZSBjYW5ub3QKLSAgICAgICAgICAgICogYmUgc3VyZSBvZiB0aGUgY3dkIHdoZW4g d2UgYXJlIGxhdW5jaGVkCi0gICAgICAgICAgICAqLwotICAgICAgICAgICAgc3ByaW50ZihjZXJ0 X2ZpbGVwYXRoLCIlcy8lcyIsZGVmZGlyLCJ0ZWxuZXRkLXJzYS5wZW0iKTsKLSAgICAgICAgICAg IGlmICh6Y2hraShjZXJ0X2ZpbGVwYXRoKSA+IDApCi0gICAgICAgICAgICAgICAgbWFrZXN0cigm c3NsX3JzYV9jZXJ0X2ZpbGUsY2VydF9maWxlcGF0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KHNzbF9yc2FfY2VydF9maWxlICYmICFzc2xfcnNhX2tleV9maWxlKSB7Ci0gICAgICAgICAgICAv KiB3ZSBuZWVkIHRvIGtub3cgdGhlIGZ1bGxwYXRoIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUKLSAg ICAgICAgICAgICogY2VydGlmaWNhdGUgdGhhdCB3ZSB3aWxsIGJlIHJ1bm5pbmcgd2l0aCBhcyB3 ZSBjYW5ub3QKLSAgICAgICAgICAgICogYmUgc3VyZSBvZiB0aGUgY3dkIHdoZW4gd2UgYXJlIGxh dW5jaGVkCi0gICAgICAgICAgICAqLwotICAgICAgICAgICAgc3ByaW50ZihjZXJ0X2ZpbGVwYXRo LCIlcy8lcyIsZGVmZGlyLCJ0ZWxuZXRkLXJzYS1rZXkucGVtIik7Ci0gICAgICAgICAgICBpZiAo emNoa2koY2VydF9maWxlcGF0aCkgPiAwKQotICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9y c2Ffa2V5X2ZpbGUsY2VydF9maWxlcGF0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFzc2xf ZHNhX2NlcnRfZmlsZSkgewotICAgICAgICAgICAgLyogd2UgbmVlZCB0byBrbm93IHRoZSBmdWxs cGF0aCB0byB0aGUgbG9jYXRpb24gb2YgdGhlCi0gICAgICAgICAgICAqIGNlcnRpZmljYXRlIHRo YXQgd2Ugd2lsbCBiZSBydW5uaW5nIHdpdGggYXMgd2UgY2Fubm90Ci0gICAgICAgICAgICAqIGJl IHN1cmUgb2YgdGhlIGN3ZCB3aGVuIHdlIGFyZSBsYXVuY2hlZAotICAgICAgICAgICAgKi8KLSAg ICAgICAgICAgIHNwcmludGYoY2VydF9maWxlcGF0aCwiJXMvJXMiLGRlZmRpciwidGVsbmV0ZC1k c2EucGVtIik7Ci0gICAgICAgICAgICBpZiAoemNoa2koY2VydF9maWxlcGF0aCkgPiAwKQotICAg ICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9kc2FfY2VydF9maWxlLGNlcnRfZmlsZXBhdGgpOwot ICAgICAgICB9Ci0gICAgICAgIGlmIChzc2xfZHNhX2NlcnRfZmlsZSAmJiAhc3NsX2RoX2tleV9m aWxlKSB7Ci0gICAgICAgICAgICAvKiB3ZSBuZWVkIHRvIGtub3cgdGhlIGZ1bGxwYXRoIHRvIHRo ZSBsb2NhdGlvbiBvZiB0aGUKLSAgICAgICAgICAgICogY2VydGlmaWNhdGUgdGhhdCB3ZSB3aWxs IGJlIHJ1bm5pbmcgd2l0aCBhcyB3ZSBjYW5ub3QKLSAgICAgICAgICAgICogYmUgc3VyZSBvZiB0 aGUgY3dkIHdoZW4gd2UgYXJlIGxhdW5jaGVkCi0gICAgICAgICAgICAqLwotICAgICAgICAgICAg c3ByaW50ZihjZXJ0X2ZpbGVwYXRoLCIlcy8lcyIsZGVmZGlyLCJ0ZWxuZXRkLWRzYS1rZXkucGVt Iik7Ci0gICAgICAgICAgICBpZiAoemNoa2koY2VydF9maWxlcGF0aCkgPiAwKQotICAgICAgICAg ICAgICAgIG1ha2VzdHIoJnNzbF9kaF9rZXlfZmlsZSxjZXJ0X2ZpbGVwYXRoKTsKLSAgICAgICAg fQotICAgICAgICBpZiAoIXNzbF9jcmxfZGlyKSB7Ci0gICAgICAgICAgICAvKiB3ZSBuZWVkIHRv IGtub3cgdGhlIGZ1bGxwYXRoIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUKLSAgICAgICAgICAgICog Y2VydGlmaWNhdGUgdGhhdCB3ZSB3aWxsIGJlIHJ1bm5pbmcgd2l0aCBhcyB3ZSBjYW5ub3QKLSAg ICAgICAgICAgICogYmUgc3VyZSBvZiB0aGUgY3dkIHdoZW4gd2UgYXJlIGxhdW5jaGVkCi0gICAg ICAgICAgICAqLwotICAgICAgICAgICAgc3ByaW50ZihjZXJ0X2ZpbGVwYXRoLCIlcy9jcmwiLGRl ZmRpcik7Ci0gICAgICAgICAgICBpZiAoemNoa2koY2VydF9maWxlcGF0aCkgPiAwKQotICAgICAg ICAgICAgICAgIG1ha2VzdHIoJnNzbF9jcmxfZGlyLGNlcnRfZmlsZXBhdGgpOwotICAgICAgICB9 Ci0KLSAgICAgICAgaWYgKHNzbF9vbmx5X2ZsYWcgJiYgIXRsc19sb2FkX2NlcnRzKHNzbF9jdHgs c3NsX2NvbiwxKSkgewotICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJVbmFi bGUgdG8gbG9hZCBTU0wgY2VydHMiLDApOwotICAgICAgICAgICAgbGFzdF9zc2xfbW9kZSA9IC0x OwotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0bHNfb25s eV9mbGFnICYmICF0bHNfbG9hZF9jZXJ0cyh0bHNfY3R4LHRsc19jb24sMSkpIHsKLSAgICAgICAg ICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IiwiVW5hYmxlIHRvIGxvYWQgVExTIGNlcnRzIiww KTsKLSAgICAgICAgICAgIGxhc3Rfc3NsX21vZGUgPSAtMTsKLSAgICAgICAgICAgIHJldHVybigw KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggKGxhc3Rfc3NsX21vZGUgIT0gbW9kZSkgfHwg IXNzbF9jdHggfHwgIXRsc19jdHggKSB7Ci0gICAgICAgICAgICAvKiB3ZSBtYXkgcmVxdWlyZSBh IHRlbXAgNTEyIGJpdCBSU0Ega2V5IGJlY2F1c2Ugb2YgdGhlCi0gICAgICAgICAgICAgKiB3b25k ZXJmdWwgd2F5IGV4cG9ydCB0aGluZ3Mgd29yayAuLi4gaWYgc28gd2UgZ2VuZXJhdGUKLSAgICAg ICAgICAgICAqIG9uZSBub3chCi0gICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgU1NMX0NU WF9zZXRfdG1wX3JzYV9jYWxsYmFjayhzc2xfY3R4LCB0bXBfcnNhX2NiKTsKLSAgICAgICAgICAg IFNTTF9DVFhfc2V0X3RtcF9kaF9jYWxsYmFjayggc3NsX2N0eCwgdG1wX2RoX2NiKTsKLSAgICAg ICAgICAgIFNTTF9DVFhfc2V0X3RtcF9yc2FfY2FsbGJhY2sodGxzX2N0eCwgdG1wX3JzYV9jYik7 Ci0gICAgICAgICAgICBTU0xfQ1RYX3NldF90bXBfZGhfY2FsbGJhY2soIHRsc19jdHgsIHRtcF9k aF9jYik7Ci0KLSAgICAgICAgICAgIGRoID0gdG1wX2RoX2NiKE5VTEwsMCw1MTIpOwotICAgICAg ICAgICAgU1NMX0NUWF9zZXRfdG1wX2RoKHNzbF9jdHgsZGgpOwotICAgICAgICAgICAgU1NMX0NU WF9zZXRfdG1wX2RoKHRsc19jdHgsZGgpOwotCi0gICAgICAgICAgICAvKiBUaGUgZm9sbG93aW5n IGNvZGUgaXMgb25seSBjYWxsZWQgaWYgd2UgYXJlIHVzaW5nIGEKLSAgICAgICAgICAgICAqIGNl cnRpZmljYXRlIHdpdGggYW4gUlNBIHB1YmxpYyBrZXkgYW5kIHdoZXJlIHRoZQotICAgICAgICAg ICAgICogY2VydGlmaWNhdGUgaGFzIGEga2V5IGxlbmd0aCBsZXNzIHRoYW4gNTEyIGJpdHMgb3Ig aXMKLSAgICAgICAgICAgICAqIG1hcmtlZCBmb3Igc2lnbmluZyBvbmx5LiAgVGhpcyBpcyBzbyB3 ZSBjYW4gc3VwcG9ydAotICAgICAgICAgICAgICogdGhlIGdyZWF0ZXN0IGxlZ2FsIHByaXZhY3kg bGV2ZWwgd2l0aCBleHBvcnRhYmxlIGNsaWVudHMuCi0gICAgICAgICAgICAgKi8KLQotICAgICAg ICAgICAgaWYgKFNTTF9DVFhfbmVlZF90bXBfUlNBKHNzbF9jdHgpIHx8Ci0gICAgICAgICAgICAg ICAgIFNTTF9DVFhfbmVlZF90bXBfUlNBKHRsc19jdHgpKQotICAgICAgICAgICAgewotICAgICAg ICAgICAgICAgIFJTQSAqcnNhOwotCi0gICAgICAgICAgICAgICAgaWYgKCBzc2xfZGVidWdfZmxh ZyApCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiR2VuZXJhdGluZyB0ZW1wICg1MTIgYml0 KSBSU0Ega2V5IC4uLlxyXG4iKTsKLSAgICAgICAgICAgICAgICByc2E9UlNBX2dlbmVyYXRlX2tl eSg1MTIsUlNBX0Y0LE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAgICAgaWYgKCBzc2xfZGVidWdf ZmxhZyApCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiR2VuZXJhdGlvbiBvZiB0ZW1wICg1 MTIgYml0KSBSU0Ega2V5IGRvbmVcclxuIik7Ci0KLSAgICAgICAgICAgICAgICBpZiAoU1NMX0NU WF9uZWVkX3RtcF9SU0Eoc3NsX2N0eCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFTU0xf Q1RYX3NldF90bXBfcnNhKHNzbF9jdHgscnNhKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KAotICAiRmFpbGVkIHRvIGFzc2lnbiBnZW5lcmF0ZWQgdGVtcCBSU0Ega2V5IHRvIFNTTCFcclxu Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgaWYgKFNTTF9DVFhfbmVlZF90bXBfUlNBKHRsc19jdHgpKSB7Ci0gICAgICAgICAgICAg ICAgICAgIGlmICghU1NMX0NUWF9zZXRfdG1wX3JzYSh0bHNfY3R4LHJzYSkpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigKLSAgIkZhaWxlZCB0byBhc3NpZ24gZ2VuZXJhdGVkIHRlbXAgUlNB IGtleSB0byBUTFMhXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIFJTQV9mcmVlKHJzYSk7Ci0gICAgICAgICAgICAgICAgaWYg KCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiQXNzaWduZWQg dGVtcCAoNTEyIGJpdCkgUlNBIGtleVxyXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgIH0KLQotICAgIC8qIG1ha2Ugc3VyZSB3ZSB3aWxsIGZpbmQgY2VydGlmaWNhdGVzIGluIHRo ZSBzdGFuZGFyZAotICAgICAqIGxvY2F0aW9uIC4uLiBvdGhlcndpc2Ugd2UgZG9uJ3QgbG9vayBh bnl3aGVyZSBmb3IKLSAgICAgKiB0aGVzZSB0aGluZ3Mgd2hpY2ggaXMgZ29pbmcgdG8gbWFrZSBj bGllbnQgY2VydGlmaWNhdGUKLSAgICAgKiBleGNoYW5nZSByYXRoZXIgdXNlbGVzcyA6LSkKLSAg ICAgKiBJbiBPUzIsIGRlZmF1bHQgdmFsdWVzIGZvciBzc2xfdmVyaWZ5X2ZpbGUgYW5kIHNzbF92 ZXJpZnlfcGF0aC4KLSAgICAgKi8KLQotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0gICAgewotICAg ICAgICAvKiBUaGUgZGVmYXVsdHMgaW4gdGhlIFNTTCBjcnlwdG8gbGlicmFyeSBhcmUgbm90IGFw cHJvcHJpYXRlIGZvciBPUy8yICovCi0gICAgICAgIGNoYXIgcGF0aFtDS01BWFBBVEhdOwotCi0g ICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILGV4ZWRpciwiY2VydHMiLE5VTEwsTlVMTCk7 Ci0gICAgICAgIGlmIChpc2RpcihwYXRoKSAmJiAKLSAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92 ZXJpZnlfbG9jYXRpb25zKHRsc19jdHgsTlVMTCxwYXRoKSA9PSAxKSAgewotICAgICAgICAgICAg ZGVidWcoRjExMCwic3NsX3RuX2luaXQgY2VydGlmaWNhdGUgdmVyaWZ5IGRpciIscGF0aCwwKTsK LSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBwcmludGYo IiAgQ2VydGlmaWNhdGUgVmVyaWZpY2F0aW9uIERpcmVjdG9yeTogJXNcclxuIixwYXRoKTsKLSAg ICAgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9jdHgsTlVMTCxwYXRo KTsKLSAgICAgICAgfQotICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxHZXRBcHBEYXRh KDEpLCJrZXJtaXQgOTUvY2VydHMiLE5VTEwsTlVMTCk7Ci0gICAgICAgIGlmIChpc2RpcihwYXRo KSAmJgotICAgICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxzX2N0eCxO VUxMLHBhdGgpID09IDEpICB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBj ZXJ0aWZpY2F0ZSB2ZXJpZnkgZGlyIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1 Z19mbGFnKQotICAgICAgICAgICAgICAgIHByaW50ZigiICBDZXJ0aWZpY2F0ZSBWZXJpZmljYXRp b24gRGlyZWN0b3J5OiAlc1xyXG4iLHBhdGgpOwotICAgICAgICAgICAgU1NMX0NUWF9sb2FkX3Zl cmlmeV9sb2NhdGlvbnMoc3NsX2N0eCxOVUxMLHBhdGgpOwotICAgICAgICB9Ci0gICAgICAgIGNr bWFrbXNnKHBhdGgsQ0tNQVhQQVRILEdldEFwcERhdGEoMCksImtlcm1pdCA5NS9jZXJ0cyIsTlVM TCxOVUxMKTsKLSAgICAgICAgaWYgKGlzZGlyKHBhdGgpICYmCi0gICAgICAgICAgICBTU0xfQ1RY X2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfY3R4LE5VTEwscGF0aCkgPT0gMSkgIHsKLSAgICAg ICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNlcnRpZmljYXRlIHZlcmlmeSBkaXIiLHBh dGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAg cHJpbnRmKCIgIENlcnRpZmljYXRlIFZlcmlmaWNhdGlvbiBEaXJlY3Rvcnk6ICVzXHJcbiIscGF0 aCk7Ci0gICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfY3R4LE5V TEwscGF0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsZXhl ZGlyLCJjYV9jZXJ0cy5wZW0iLE5VTEwsTlVMTCk7Ci0gICAgICAgIGlmICh6Y2hraShwYXRoKSA+ IDAgJiYgCi0gICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfY3R4 LHBhdGgsTlVMTCkgPT0gMSkgewotICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQg Y2VydGlmaWNhdGUgdmVyaWZ5IGZpbGUiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2Rl YnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgIENlcnRpZmljYXRlIFZlcmlmaWNh dGlvbiBGaWxlOiAlc1xyXG4iLHBhdGgpOwotICAgICAgICAgICAgU1NMX0NUWF9sb2FkX3Zlcmlm eV9sb2NhdGlvbnMoc3NsX2N0eCxwYXRoLE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIGNrbWFr bXNnKHBhdGgsQ0tNQVhQQVRILEdldEFwcERhdGEoMSksImtlcm1pdCA5NS9jYV9jZXJ0cy5wZW0i LE5VTEwsTlVMTCk7Ci0gICAgICAgIGlmICh6Y2hraShwYXRoKSA+IDAgJiYgCi0gICAgICAgICAg ICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfY3R4LHBhdGgsTlVMTCkgPT0gMSkg ewotICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQgY2VydGlmaWNhdGUgdmVyaWZ5 IGZpbGUiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAg ICAgICAgICAgcHJpbnRmKCIgIENlcnRpZmljYXRlIFZlcmlmaWNhdGlvbiBGaWxlOiAlc1xyXG4i LHBhdGgpOwotICAgICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2N0 eCxwYXRoLE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRI LEdldEFwcERhdGEoMCksImtlcm1pdCA5NS9jYV9jZXJ0cy5wZW0iLE5VTEwsTlVMTCk7Ci0gICAg ICAgIGlmICh6Y2hraShwYXRoKSA+IDAgJiYgCi0gICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVy aWZ5X2xvY2F0aW9ucyh0bHNfY3R4LHBhdGgsTlVMTCkgPT0gMSkgewotICAgICAgICAgICAgZGVi dWcoRjExMCwic3NsX3RuX2luaXQgY2VydGlmaWNhdGUgdmVyaWZ5IGZpbGUiLHBhdGgsMCk7Ci0g ICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIg IENlcnRpZmljYXRlIFZlcmlmaWNhdGlvbiBGaWxlOiAlc1xyXG4iLHBhdGgpOwotICAgICAgICAg ICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2N0eCxwYXRoLE5VTEwpOwotICAg ICAgICB9Ci0gICAgfQotI2Vsc2UgLyogTlQgKi8KLSAgICB7Ci0gICAgICAgIC8qIFRoZSBkZWZh dWx0cyBpbiB0aGUgU1NMIGNyeXB0byBsaWJyYXJ5IGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIE9T LzIgKi8KLSAgICAgICAgY2hhciBwYXRoW0NLTUFYUEFUSF07Ci0KLSAgICAgICAgY2ttYWttc2co cGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjZXJ0cyIsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYgKGlz ZGlyKHBhdGgpICYmIAotICAgICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMo dGxzX2N0eCxOVUxMLHBhdGgpID09IDEpICB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xf dG5faW5pdCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgZGlyIixwYXRoLDApOwotICAgICAgICAgICAgaWYg KHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAgICAgIHByaW50ZigiICBDZXJ0aWZpY2F0ZSBW ZXJpZmljYXRpb24gRGlyZWN0b3J5OiAlc1xyXG4iLHBhdGgpOwotICAgICAgICAgICAgU1NMX0NU WF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2N0eCxOVUxMLHBhdGgpOwotICAgICAgICB9Ci0g ICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILGV4ZWRpciwiY2FfY2VydHMucGVtIixOVUxM LE5VTEwpOwotICAgICAgICBpZiAoemNoa2kocGF0aCkgPiAwICYmIAotICAgICAgICAgICAgU1NM X0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxzX2N0eCxwYXRoLE5VTEwpID09IDEpIHsKLSAg ICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNlcnRpZmljYXRlIHZlcmlmeSBmaWxl IixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAg ICAgIHByaW50ZigiICBDZXJ0aWZpY2F0ZSBWZXJpZmljYXRpb24gRmlsZTogJXNcclxuIixwYXRo KTsKLSAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9jdHgscGF0 aCxOVUxMKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UgLyogT1My ICovCi0gICAgU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoc3NsX2N0eCk7Ci0gICAg U1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHModGxzX2N0eCk7Ci0jZW5kaWYgLyogT1My ICovCi0KLSAgICBpZiAoc3NsX3ZlcmlmeV9maWxlKSB7Ci0gICAgICAgIGlmICh6Y2hraShzc2xf dmVyaWZ5X2ZpbGUpID4gMCAmJiAKLSAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9j YXRpb25zKHRsc19jdHgsc3NsX3ZlcmlmeV9maWxlLE5VTEwpID09IDEpIHsKLSAgICAgICAgICAg IGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNlcnRpZmljYXRlIHZlcmlmeSBmaWxlIixzc2xfdmVy aWZ5X2ZpbGUsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAg ICAgICAgcHJpbnRmKCIgIENlcnRpZmljYXRlIFZlcmlmaWNhdGlvbiBGaWxlOiAlc1xyXG4iLHNz bF92ZXJpZnlfZmlsZSk7Ci0gICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9u cyhzc2xfY3R4LHNzbF92ZXJpZnlfZmlsZSxOVUxMKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBp ZiAoc3NsX3ZlcmlmeV9kaXIgJiYgaXNkaXIoc3NsX3ZlcmlmeV9kaXIpKSB7Ci0gICAgICAgIGlm IChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfY3R4LE5VTEwsc3NsX3ZlcmlmeV9k aXIpID09IDEpICB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjZXJ0aWZp Y2F0ZSB2ZXJpZnkgZGlyIixzc2xfdmVyaWZ5X2RpciwwKTsKLSAgICAgICAgICAgIGlmIChzc2xf ZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBwcmludGYoIiAgQ2VydGlmaWNhdGUgVmVyaWZp Y2F0aW9uIERpcmVjdG9yeTogJXNcclxuIixzc2xfdmVyaWZ5X2Rpcik7Ci0gICAgICAgICAgICBT U0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfY3R4LE5VTEwsc3NsX3ZlcmlmeV9kaXIp OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtb2RlID09IFNTTF9TRVJWRVIpIHsKLSAgICAg ICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHNzbF9jdHgsCi0gICAgICAgICAgICAgICAgICAgICBzc2xf dmVyaWZ5X2ZsYWc/c3NsX3ZlcmlmeV9mbGFnfFNTTF9WRVJJRllfQ0xJRU5UX09OQ0U6MCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9zZXJ2ZXJfdmVyaWZ5X2NhbGxiYWNrKTsKLSAg ICAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHRsc19jdHgsCi0gICAgICAgICAgICAgICAgICAgICBz c2xfdmVyaWZ5X2ZsYWc/c3NsX3ZlcmlmeV9mbGFnfFNTTF9WRVJJRllfQ0xJRU5UX09OQ0U6MCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9zZXJ2ZXJfdmVyaWZ5X2NhbGxiYWNrKTsK LSAgICB9IGVsc2UgewotICAgICAgICBTU0xfQ1RYX3NldF92ZXJpZnkoc3NsX2N0eCxzc2xfdmVy aWZ5X2ZsYWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfY2xpZW50X3ZlcmlmeV9j YWxsYmFjayk7Ci0gICAgICAgIFNTTF9DVFhfc2V0X3ZlcmlmeSh0bHNfY3R4LHNzbF92ZXJpZnlf ZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jbGllbnRfdmVyaWZ5X2NhbGxi YWNrKTsKLSAgICB9Ci0KLSAgICAvKiBGcmVlIHRoZSBleGlzdGluZyBDUkwgU3RvcmUgKi8KLSAg ICBpZiAoY3JsX3N0b3JlKSB7Ci0gICAgICAgIFg1MDlfU1RPUkVfZnJlZShjcmxfc3RvcmUpOwot ICAgICAgICBjcmxfc3RvcmUgPSBOVUxMOwotICAgIH0KLQotICAgIC8qIHNldCB1cCB0aGUgbmV3 IENSTCBTdG9yZSAqLwotICAgIGNybF9zdG9yZSA9IFg1MDlfU1RPUkVfbmV3KCk7Ci0gICAgaWYg KGNybF9zdG9yZSkgewotI2lmZGVmIE9TMgotICAgICAgICBjaGFyIHBhdGhbQ0tNQVhQQVRIXTsK LQotICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNybHMiLE5VTEwsTlVM TCk7Ci0gICAgICAgIGlmIChpc2RpcihwYXRoKSAmJgotICAgICAgICAgICAgWDUwOV9TVE9SRV9s b2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUsTlVMTCxwYXRoKSA9PSAxKSB7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjcmwgZGlyIixwYXRoLDApOwotICAgICAgICAgICAgaWYg KHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAgICAgIHByaW50ZigiICBDUkwgRGlyZWN0b3J5 OiAlc1xyXG4iLHBhdGgpOwotICAgICAgICB9Ci0jaWZkZWYgTlQKLSAgICAgICAgY2ttYWttc2co cGF0aCxDS01BWFBBVEgsR2V0QXBwRGF0YSgxKSwia2VybWl0IDk1L2NybHMiLE5VTEwsTlVMTCk7 Ci0gICAgICAgIGlmIChpc2RpcihwYXRoKSAmJiAKLSAgICAgICAgICAgIFg1MDlfU1RPUkVfbG9h ZF9sb2NhdGlvbnMoY3JsX3N0b3JlLE5VTEwscGF0aCkgPT0gMSkgewotICAgICAgICAgICAgZGVi dWcoRjExMCwic3NsX3RuX2luaXQgY3JsIGRpciIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChz c2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBwcmludGYoIiAgQ1JMIERpcmVjdG9yeTog JXNcclxuIixwYXRoKTsKLSAgICAgICAgfQotICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFU SCxHZXRBcHBEYXRhKDApLCJrZXJtaXQgOTUvY3JscyIsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYg KGlzZGlyKHBhdGgpICYmIAotICAgICAgICAgICAgWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhj cmxfc3RvcmUsTlVMTCxwYXRoKSA9PSAxKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xf dG5faW5pdCBjcmwgZGlyIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFn KQotICAgICAgICAgICAgICAgIHByaW50ZigiICBDUkwgRGlyZWN0b3J5OiAlc1xyXG4iLHBhdGgp OwotICAgICAgICB9Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgCi0gICAgICAgIGNrbWFrbXNn KHBhdGgsQ0tNQVhQQVRILGV4ZWRpciwiY2FfY3Jscy5wZW0iLE5VTEwsTlVMTCk7Ci0gICAgICAg IGlmICh6Y2hraShwYXRoKSA+IDAgJiYgCi0gICAgICAgICAgICBYNTA5X1NUT1JFX2xvYWRfbG9j YXRpb25zKGNybF9zdG9yZSxwYXRoLE5VTEwpID09IDEpIHsKLSAgICAgICAgICAgIGRlYnVnKEYx MTAsInNzbF90bl9pbml0IGNybCBmaWxlIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9k ZWJ1Z19mbGFnKQotICAgICAgICAgICAgICAgIHByaW50ZigiICBDUkwgRmlsZTogJXNcclxuIixw YXRoKTsKLSAgICAgICAgfQotI2lmZGVmIE5UCi0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQ QVRILEdldEFwcERhdGEoMSksImtlcm1pdCA5NS9jYV9jcmxzLnBlbSIsTlVMTCxOVUxMKTsKLSAg ICAgICAgaWYgKHpjaGtpKHBhdGgpID4gMCAmJiAKLSAgICAgICAgICAgIFg1MDlfU1RPUkVfbG9h ZF9sb2NhdGlvbnMoY3JsX3N0b3JlLHBhdGgsTlVMTCkgPT0gMSkgewotICAgICAgICAgICAgZGVi dWcoRjExMCwic3NsX3RuX2luaXQgY3JsIGZpbGUiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAo c3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgIENSTCBGaWxlOiAlc1xy XG4iLHBhdGgpOwotICAgICAgICB9Ci0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILEdl dEFwcERhdGEoMCksImtlcm1pdCA5NS9jYV9jcmxzLnBlbSIsTlVMTCxOVUxMKTsKLSAgICAgICAg aWYgKHpjaGtpKHBhdGgpID4gMCAmJiAKLSAgICAgICAgICAgIFg1MDlfU1RPUkVfbG9hZF9sb2Nh dGlvbnMoY3JsX3N0b3JlLHBhdGgsTlVMTCkgPT0gMSkgewotICAgICAgICAgICAgZGVidWcoRjEx MCwic3NsX3RuX2luaXQgY3JsIGZpbGUiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2Rl YnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgIENSTCBGaWxlOiAlc1xyXG4iLHBh dGgpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAg ICAgICBpZiAoc3NsX2NybF9maWxlIHx8IHNzbF9jcmxfZGlyKSB7Ci0gICAgICAgICAgICBpZiAo c3NsX2NybF9maWxlICYmIHpjaGtpKHNzbF9jcmxfZmlsZSkgPiAwICYmIAotICAgICAgICAgICAg ICAgIFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3JlLHNzbF9jcmxfZmlsZSxOVUxM KSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQgY3JsIGZp bGUiLHNzbF9jcmxfZmlsZSwwKTsKLSAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcp Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiICBDUkwgRmlsZTogJXNcclxuIixzc2xfY3Js X2ZpbGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNzbF9jcmxfZGlyICYmIGlz ZGlyKHNzbF9jcmxfZGlyKSAmJgotICAgICAgICAgICAgICAgIFg1MDlfU1RPUkVfbG9hZF9sb2Nh dGlvbnMoY3JsX3N0b3JlLE5VTEwsc3NsX2NybF9kaXIpID09IDEpIHsKLSAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjcmwgZGlyIixzc2xfY3JsX2RpciwwKTsKLSAgICAg ICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgICAgIHByaW50 ZigiICBDUkwgRGlyZWN0b3J5OiAlc1xyXG4iLHNzbF9jcmxfZGlyKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfSAKLSNpZm5kZWYgT1MyCi0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgWDUw OV9TVE9SRV9zZXRfZGVmYXVsdF9wYXRocyhjcmxfc3RvcmUpOwotICAgICAgICB9Ci0jZW5kaWYg LyogT1MyICovCi0gICAgfQotCi0jaWZuZGVmIENPTU1FTlQKLSAgICBzc2xfY29ueCA9IHNzbF9j b247Ci0gICAgc3NsX2Nvbj0oU1NMICopU1NMX25ldyhzc2xfY3R4KTsKLSAgICBpZiAoICFzc2xf Y29uICkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlNTTF9uZXcoc3NsX2Nv bikgZmFpbGVkIiwwKTsKLSAgICAgICAgbGFzdF9zc2xfbW9kZSA9IC0xOwotICAgICAgICBzc2xf Y29uID0gc3NsX2Nvbng7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKHNzbF9j b254KSB7Ci0gICAgICAgIGlmICggbW9kZSA9PSBTU0xfQ0xJRU5UICkgewotICAgICAgICAgICAg U1NMX3NldF9zZXNzaW9uKHNzbF9jb24sIFNTTF9nZXRfc2Vzc2lvbihzc2xfY29ueCkpOwotICAg ICAgICB9Ci0jaWZkZWYgU1NMX0tSQjUKLQkJaWYgKHNzbF9jb254LT5rc3NsX2N0eCkgewotCQkJ a3NzbF9jdHhfZnJlZShzc2xfY29ueC0+a3NzbF9jdHgpOwotCQkJc3NsX2NvbngtPmtzc2xfY3R4 ID0gTlVMTDsKLQkJfQotI2VuZGlmIC8qIFNTTF9LUkI1ICovCi0gICAgICAgIFNTTF9mcmVlKHNz bF9jb254KTsKLSAgICAgICAgc3NsX2NvbnggPSBOVUxMOwotICAgIH0KLSAgICB0bHNfY29ueCA9 IHRsc19jb247Ci0gICAgdGxzX2Nvbj0oU1NMICopU1NMX25ldyh0bHNfY3R4KTsKLSAgICBpZiAo ICF0bHNfY29uICkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlNTTF9uZXco dGxzX2NvbikgZmFpbGVkIiwwKTsKLSAgICAgICAgbGFzdF9zc2xfbW9kZSA9IC0xOwotICAgICAg ICB0bHNfY29uID0gdGxzX2Nvbng7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgaWYg KHRsc19jb254KSB7Ci0gICAgICAgIGlmICggbW9kZSA9PSBTU0xfQ0xJRU5UICkKLSAgICAgICAg ICAgIFNTTF9zZXRfc2Vzc2lvbih0bHNfY29uLCBTU0xfZ2V0X3Nlc3Npb24odGxzX2NvbngpKTsK LSNpZmRlZiBTU0xfS1JCNQotCQlpZiAodGxzX2NvbngtPmtzc2xfY3R4KSB7Ci0JCQlrc3NsX2N0 eF9mcmVlKHRsc19jb254LT5rc3NsX2N0eCk7Ci0JCQl0bHNfY29ueC0+a3NzbF9jdHggPSBOVUxM OwotCQl9Ci0jZW5kaWYgLyogU1NMX0tSQjUgKi8KLSAgICAgICAgU1NMX2ZyZWUodGxzX2Nvbngp OwotICAgICAgICB0bHNfY29ueCA9IE5VTEw7Ci0gICAgfQotI2Vsc2UgLyogQ09NTUVOVCAqLwot ICAgIC8qIEkgZG9uJ3Qga25vdyB3aHkgdGhpcyBkb2VzIG5vdCB3b3JrIHRvIHJldXNlIHRoZSBj b25uZWN0aW9uLiAqLwotICAgIGlmICggc3NsX2NvbiApIHsKLSAgICAgICAgU1NMX2NsZWFyKHNz bF9jb24pOwotICAgICAgICBTU0xfc2V0X3Nlc3Npb24oc3NsX2NvbixOVUxMKTsKLSAgICAgICAg U1NMX3NldF9hY2NlcHRfc3RhdGUoc3NsX2NvbikgOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNz bF9jb249KFNTTCAqKVNTTF9uZXcoc3NsX2N0eCk7Ci0gICAgICAgIGlmICghc3NsX2Nvbikgewot ICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJTU0xfbmV3KHNzbF9jdHgpIGZh aWxlZCIsMCk7Ci0gICAgICAgICAgICBsYXN0X3NzbF9tb2RlID0gLTE7Ci0gICAgICAgICAgICBz c2xfY29uID0gc3NsX2Nvbng7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAg ICB9Ci0KLSAgICBpZiAoIHRsc19jb24gKSB7Ci0gICAgICAgIFNTTF9jbGVhcih0bHNfY29uKTsK LSAgICAgICAgU1NMX3NldF9zZXNzaW9uKHRsc19jb24sTlVMTCk7Ci0gICAgICAgIFNTTF9zZXRf YWNjZXB0X3N0YXRlKHRsc19jb24pIDsKLSAgICB9IGVsc2UgewotICAgICAgICB0bHNfY29uPShT U0wgKilTU0xfbmV3KHRsc19jdHgpOwotICAgICAgICBpZiAoICF0bHNfY29uICkgewotICAgICAg ICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJTU0xfbmV3KHRsc19jdHgpIGZhaWxlZCIs MCk7Ci0gICAgICAgICAgICBsYXN0X3NzbF9tb2RlID0gLTE7Ci0gICAgICAgICAgICB0bHNfY29u ID0gdGxzX2Nvbng7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgU1NMX0tSQjUKLSNpZm5kZWYgS1JCNV9TRVJW SUNFX05BTUUKLSNkZWZpbmUgS1JCNV9TRVJWSUNFX05BTUUgICAgImhvc3QiCi0jZW5kaWYKLQot ICAgIGlmIChzc2xfY29uLT5rc3NsX2N0eCA9PSBOVUxMKQotICAgICAgICBzc2xfY29uLT5rc3Ns X2N0eCA9IGtzc2xfY3R4X25ldygpOwotICAgIGlmICh0bHNfY29uLT5rc3NsX2N0eCA9PSBOVUxM KQotICAgIHRsc19jb24tPmtzc2xfY3R4ID0ga3NzbF9jdHhfbmV3KCk7Ci0gICAgaWYgKG1vZGUg PT0gU1NMX1NFUlZFUikgewotICAgICAgICBpZiAoc3NsX2Nvbi0+a3NzbF9jdHggIT0gTlVMTCkK LSAgICAgICAgICAgIGtzc2xfY3R4X3NldHN0cmluZyhzc2xfY29uLT5rc3NsX2N0eCwgS1NTTF9L RVlUQUIsIGs1X2tleXRhYik7Ci0gICAgICAgIGlmICh0bHNfY29uLT5rc3NsX2N0eCAhPSBOVUxM KQotICAgICAgICAgICAga3NzbF9jdHhfc2V0c3RyaW5nKHRsc19jb24tPmtzc2xfY3R4LCBLU1NM X0tFWVRBQiwgazVfa2V5dGFiKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3NsX2Nvbi0+ a3NzbF9jdHggIT0gTlVMTCkKLSAgICAgICAgICAgIGtzc2xfY3R4X3NldHN0cmluZyhzc2xfY29u LT5rc3NsX2N0eCwgS1NTTF9TRVJWRVIsIHN6SG9zdE5hbWUpOwotICAgICAgICBpZiAodGxzX2Nv bi0+a3NzbF9jdHggIT0gTlVMTCkKLSAgICAgICAgICAgIGtzc2xfY3R4X3NldHN0cmluZyh0bHNf Y29uLT5rc3NsX2N0eCwgS1NTTF9TRVJWRVIsIHN6SG9zdE5hbWUpOwotICAgIH0KLSAgICBrc3Ns X2N0eF9zZXRzdHJpbmcoc3NsX2Nvbi0+a3NzbF9jdHgsIEtTU0xfU0VSVklDRSwKLSAgICAgICAg ICAgICAgICAgICAgICAgIGtyYjVfZF9zcnYgPyBrcmI1X2Rfc3J2IDogS1JCNV9TRVJWSUNFX05B TUUpOwotICAgIGtzc2xfY3R4X3NldHN0cmluZyh0bHNfY29uLT5rc3NsX2N0eCwgS1NTTF9TRVJW SUNFLAotICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9kX3NydiA/IGtyYjVfZF9zcnYgOiBL UkI1X1NFUlZJQ0VfTkFNRSk7Ci0jZW5kaWYgLyogU1NMX0tSQjUgKi8KLQotICAgIGlmIChzc2xf Y2lwaGVyX2xpc3QpIHsKLSAgICAgICAgU1NMX3NldF9jaXBoZXJfbGlzdChzc2xfY29uLHNzbF9j aXBoZXJfbGlzdCk7Ci0gICAgICAgIFNTTF9zZXRfY2lwaGVyX2xpc3QodGxzX2Nvbixzc2xfY2lw aGVyX2xpc3QpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoYXIgKiBwOwotICAgICAgICBpZiAo cCA9IGdldGVudigiU1NMX0NJUEhFUiIpKSB7Ci0gICAgICAgICAgICBTU0xfc2V0X2NpcGhlcl9s aXN0KHNzbF9jb24scCk7Ci0gICAgICAgICAgICBTU0xfc2V0X2NpcGhlcl9saXN0KHRsc19jb24s cCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTU0xfc2V0X2NpcGhlcl9saXN0KHNz bF9jb24sREVGQVVMVF9DSVBIRVJfTElTVCk7Ci0gICAgICAgICAgICBTU0xfc2V0X2NpcGhlcl9s aXN0KHRsc19jb24sREVGQVVMVF9DSVBIRVJfTElTVCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg ICBzc2xfdmVyaWZ5X2RlcHRoID0gLTE7Ci0KLSAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKLSAg ICAgICAgcHJpbnRmKCJTU0wvVExTIGluaXQgZG9uZSFcclxuIik7Ci0KLSAgICBzc2xfaW5pdGlh bGl6ZWQgPSAxOwotICAgIGxhc3Rfc3NsX21vZGUgPSBtb2RlOwotICAgIGRlYnVnKEYxMTAsInNz bF90bl9pbml0IiwiZG9uZSIsMCk7Ci0gICAgcmV0dXJuKDEpOwotfQotCi0jaWZuZGVmIE5PSFRU UAotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXNzbF9odHRwX2luaXQoY2hhciAqIGhvc3RuYW1lKQot I2Vsc2UKLXNzbF9odHRwX2luaXQoaG9zdG5hbWUpIGNoYXIgKiBob3N0bmFtZTsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotewotI2lmZGVmIEtSQjUKLSAgICBleHRlcm4gY2hhciAqIGs1X2tleXRh YjsKLSAgICBleHRlcm4gY2hhciAqIGtyYjVfZF9zcnY7Ci0jZW5kaWYgLyogS1JCNSAqLwotICAg IFNTTCAqIHRsc19jb254PU5VTEw7Ci0KLSAgICBzc2xfaHR0cF9pbml0aWFsaXplZCA9IDA7Ci0K LSAgICBpZiAoICFja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgKQotICAgICAgICByZXR1cm4oMCk7 Ci0gICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCIsaG9zdG5hbWUsMCk7Ci0KLSAgICBpZiAo c3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgIHByaW50ZigiU1NMX0RFQlVHX0ZMQUcgb25cclxuIik7 Ci0KLSAgICBpZiAoIXRsc19odHRwX2N0eCApIHsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIC8q IHRvbyBtYW55IHdlYiBzZXJ2ZXJzIHN0aWxsIGRvIG5vdCBzdXBwb3J0IFRMU3YxICovCi0gICAg ICAgIHRsc19odHRwX2N0eD0oU1NMX0NUWCAqKVNTTF9DVFhfbmV3KFRMU3YxX2NsaWVudF9tZXRo b2QoKSk7Ci0jZWxzZSAvKiBDT01NRU5UICovCi0gICAgICAgIHRsc19odHRwX2N0eD0oU1NMX0NU WCAqKVNTTF9DVFhfbmV3KFNTTHYyM19jbGllbnRfbWV0aG9kKCkpOwotICAgICAgICAvKiBUaGlz IGNhbiBmYWlsIGJlY2F1c2Ugd2UgZG8gbm90IGhhdmUgUlNBIGF2YWlsYWJsZSAqLwotICAgICAg ICBpZiAoICF0bHNfaHR0cF9jdHggKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0 cF9pbml0IiwiU1NMdjIzX2NsaWVudF9tZXRob2QgZmFpbGVkIiwwKTsKLSAgICAgICAgICAgIHRs c19odHRwX2N0eD0oU1NMX0NUWCAqKVNTTF9DVFhfbmV3KFNTTHYzX2NsaWVudF9tZXRob2QoKSk7 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGlmICggIXRsc19odHRw X2N0eCApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQiLCJUTFN2MV9j bGllbnRfbWV0aG9kIGZhaWxlZCIsMCk7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAg IH0KLSNpZmRlZiBVU0VfQ0VSVF9DQgotICAgICAgICBTU0xfQ1RYX3NldF9jbGllbnRfY2VydF9j Yih0bHNfaHR0cF9jdHgsc3NsX2NsaWVudF9jZXJ0X2NhbGxiYWNrKTsKLSNlbmRpZiAvKiBVU0Vf Q0VSVF9DQiAqLwotICAgIH0KLQotICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKHRs c19odHRwX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGVtX3Bhc3N3 b3JkX2NiICopc3NsX3Bhc3N3ZF9jYWxsYmFjayk7Ci0KLSAgICAvKiBmb3IgU1NMIHN3aXRjaCBv biBhbGwgdGhlIGludGVyb3BlcmFiaWxpdHkgYW5kIGJ1ZwotICAgICAqIHdvcmthcm91bmRzIHNv IHRoYXQgd2Ugd2lsbCBjb21tdW5pY2F0ZSB3aXRoIHBlb3BsZQotICAgICAqIHRoYXQgY2Fubm90 IHJlYWQgcG9vcmx5IHdyaXR0ZW4gc3BlY3MgOi0pCi0gICAgICogZm9yIFRMUyBiZSBzdXJlIHRv IHByZXZlbnQgdXNlIG9mIFNTTHYyCi0gICAgICovCi0gICAgU1NMX0NUWF9zZXRfb3B0aW9ucyh0 bHNfaHR0cF9jdHgsCi0gICAgICAgICAgICBTU0xfT1BfTk9fU1NMdjJ8U1NMX09QX1NJTkdMRV9E SF9VU0V8U1NMX09QX0VQSEVNRVJBTF9SU0EpOwotCi0gICAgU1NMX0NUWF9zZXRfaW5mb19jYWxs YmFjayh0bHNfaHR0cF9jdHgsc3NsX2NsaWVudF9pbmZvX2NhbGxiYWNrKTsKLQotI2lmbmRlZiBD T01NRU5UCi0gICAgU1NMX0NUWF9zZXRfc2Vzc2lvbl9jYWNoZV9tb2RlKHRsc19odHRwX2N0eCxT U0xfU0VTU19DQUNIRV9DTElFTlQpOwotICAgIFNTTF9DVFhfc2V0X3Nlc3Npb25faWRfY29udGV4 dCh0bHNfaHR0cF9jdHgsKENIQVIgKikiMyIsMSk7Ci0jZWxzZSAvKiBDT01NRU5UICovCi0gICAg U1NMX0NUWF9zZXRfc2Vzc2lvbl9jYWNoZV9tb2RlKHRsc19odHRwX2N0eCxTU0xfU0VTU19DQUNI RV9PRkYpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIC8qIG1ha2Ugc3VyZSB3ZSB3aWxs IGZpbmQgY2VydGlmaWNhdGVzIGluIHRoZSBzdGFuZGFyZAotICAgICAqIGxvY2F0aW9uIC4uLiBv dGhlcndpc2Ugd2UgZG9uJ3QgbG9vayBhbnl3aGVyZSBmb3IKLSAgICAgKiB0aGVzZSB0aGluZ3Mg d2hpY2ggaXMgZ29pbmcgdG8gbWFrZSBjbGllbnQgY2VydGlmaWNhdGUKLSAgICAgKiBleGNoYW5n ZSByYXRoZXIgdXNlbGVzcyA6LSkKLSAgICAgKi8KLQotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0g ICAgewotICAgICAgICAvKiBUaGUgZGVmYXVsdHMgaW4gdGhlIFNTTCBjcnlwdG8gbGlicmFyeSBh cmUgbm90IGFwcHJvcHJpYXRlIGZvciBPUy8yICovCi0gICAgICAgIGNoYXIgcGF0aFtDS01BWFBB VEhdOwotCi0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILGV4ZWRpciwiY2VydHMiLE5V TEwsTlVMTCk7Ci0gICAgICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNf aHR0cF9jdHgsTlVMTCxwYXRoKSA9PSAwKSAgewotICAgICAgICAgICAgZGVidWcoRjExMCwic3Ns X2h0dHBfaW5pdCB1bmFibGUgdG8gbG9hZCBwYXRoIixwYXRoLDApOwotICAgICAgICAgICAgaWYg KHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2Fk IHZlcmlmeS1kaXI6ICVzXHJcbiIscGF0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBja21ha21z ZyhwYXRoLENLTUFYUEFUSCxHZXRBcHBEYXRhKDEpLCJrZXJtaXQgOTUvY2VydHMiLE5VTEwsTlVM TCk7Ci0gICAgICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfaHR0cF9j dHgsTlVMTCxwYXRoKSA9PSAwKSAgewotICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBf aW5pdCB1bmFibGUgdG8gbG9hZCBwYXRoIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9k ZWJ1Z19mbGFnKQotICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlm eS1kaXI6ICVzXHJcbiIscGF0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBja21ha21zZyhwYXRo LENLTUFYUEFUSCxHZXRBcHBEYXRhKDApLCJrZXJtaXQgOTUvY2VydHMiLE5VTEwsTlVMTCk7Ci0g ICAgICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfaHR0cF9jdHgsTlVM TCxwYXRoKSA9PSAwKSAgewotICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCB1 bmFibGUgdG8gbG9hZCBwYXRoIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19m bGFnKQotICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1kaXI6 ICVzXHJcbiIscGF0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBja21ha21zZyhwYXRoLENLTUFY UEFUSCxleGVkaXIsImNhX2NlcnRzLnBlbSIsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYgKFNTTF9D VFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19odHRwX2N0eCxwYXRoLE5VTEwpID09IDApIHsK LSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQgdW5hYmxlIHRvIGxvYWQgcGF0 aCIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAg ICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCB2ZXJpZnktZmlsZTogJXNcclxuIixwYXRoKTsK LSAgICAgICAgfQotCi0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILEdldEFwcERhdGEo MSksImtlcm1pdCA5NS9jYV9jZXJ0cy5wZW0iLE5VTEwsTlVMTCk7Ci0gICAgICAgIGlmIChTU0xf Q1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfaHR0cF9jdHgscGF0aCxOVUxMKSA9PSAwKSB7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVuYWJsZSB0byBsb2FkIHBh dGgiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAg ICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWZpbGU6ICVzXHJcbiIscGF0aCk7 Ci0gICAgICAgIH0KLQotICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxHZXRBcHBEYXRh KDApLCJrZXJtaXQgOTUvY2FfY2VydHMucGVtIixOVUxMLE5VTEwpOwotICAgICAgICBpZiAoU1NM X0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxzX2h0dHBfY3R4LHBhdGgsTlVMTCkgPT0gMCkg ewotICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCB1bmFibGUgdG8gbG9hZCBw YXRoIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAg ICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1maWxlOiAlc1xyXG4iLHBhdGgp OwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UgLyogTlQgKi8KLSAgICB7Ci0gICAgICAgIC8qIFRo ZSBkZWZhdWx0cyBpbiB0aGUgU1NMIGNyeXB0byBsaWJyYXJ5IGFyZSBub3QgYXBwcm9wcmlhdGUg Zm9yIE9TLzIgKi8KLSAgICAgICAgY2hhciBwYXRoW0NLTUFYUEFUSF07Ci0KLSAgICAgICAgY2tt YWttc2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjZXJ0cyIsTlVMTCxOVUxMKTsKLSAgICAgICAg aWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19odHRwX2N0eCxOVUxMLHBhdGgp ID09IDApICB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVuYWJsZSB0 byBsb2FkIHBhdGgiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0g ICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWRpcjogJXNcclxu IixwYXRoKTsKLSAgICAgICAgfQotICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxleGVk aXIsImNhX2NlcnRzLnBlbSIsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92 ZXJpZnlfbG9jYXRpb25zKHRsc19odHRwX2N0eCxwYXRoLE5VTEwpID09IDApIHsKLSAgICAgICAg ICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQgdW5hYmxlIHRvIGxvYWQgcGF0aCIscGF0aCww KTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBwcmlu dGYoIj9VbmFibGUgdG8gbG9hZCB2ZXJpZnktZmlsZTogJXNcclxuIixwYXRoKTsKLSAgICAgICAg fQotICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UgLyogT1MyICovCi0gICAgU1NMX0NUWF9z ZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHModGxzX2h0dHBfY3R4KTsKLSNlbmRpZiAvKiBPUzIgKi8K LQotICAgIGlmIChzc2xfdmVyaWZ5X2ZpbGUgJiYKLSAgICAgICAgU1NMX0NUWF9sb2FkX3Zlcmlm eV9sb2NhdGlvbnModGxzX2h0dHBfY3R4LHNzbF92ZXJpZnlfZmlsZSxOVUxMKSA9PSAwKSAgewot ICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVuYWJsZSB0byBsb2FkIHNzbF92ZXJp ZnlfZmlsZSIsc3NsX3ZlcmlmeV9maWxlLDApOwotICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcp Ci0gICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCB2ZXJpZnktZmlsZTogJXNcclxu Iixzc2xfdmVyaWZ5X2ZpbGUpOwotICAgIH0KLSAgICBpZiAoc3NsX3ZlcmlmeV9kaXIgJiYKLSAg ICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxzX2h0dHBfY3R4LE5VTEwsc3Ns X3ZlcmlmeV9kaXIpID09IDApICB7Ci0gICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQg dW5hYmxlIHRvIGxvYWQgc3NsX3ZlcmlmeV9kaXIiLHNzbF92ZXJpZnlfZGlyLDApOwotICAgICAg ICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9h ZCB2ZXJpZnktZGlyOiAlc1xyXG4iLHNzbF92ZXJpZnlfZGlyKTsKLSAgICB9Ci0KLSAgICBTU0xf Q1RYX3NldF92ZXJpZnkodGxzX2h0dHBfY3R4LHNzbF92ZXJpZnlfZmxhZywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNzbF9jbGllbnRfdmVyaWZ5X2NhbGxiYWNrKTsKLQotICAgIC8qIEZy ZWUgdGhlIGV4aXN0aW5nIENSTCBTdG9yZSAqLwotICAgIGlmIChjcmxfc3RvcmUpIHsKLSAgICAg ICAgWDUwOV9TVE9SRV9mcmVlKGNybF9zdG9yZSk7Ci0gICAgICAgIGNybF9zdG9yZSA9IE5VTEw7 Ci0gICAgfQotCi0gICAgLyogc2V0IHVwIHRoZSBuZXcgQ1JMIFN0b3JlICovCi0gICAgY3JsX3N0 b3JlID0gWDUwOV9TVE9SRV9uZXcoKTsKLSAgICBpZiAoY3JsX3N0b3JlKSB7Ci0jaWZkZWYgT1My Ci0gICAgICAgIGNoYXIgcGF0aFtDS01BWFBBVEhdOwotCi0gICAgICAgIGNrbWFrbXNnKHBhdGgs Q0tNQVhQQVRILGV4ZWRpciwiY3JscyIsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYgKFg1MDlfU1RP UkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3JlLE5VTEwscGF0aCkgPT0gMCkgewotICAgICAgICAg ICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCB1bmFibGUgdG8gbG9hZCBkaXIiLHBhdGgsMCk7 Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRm KCI/VW5hYmxlIHRvIGxvYWQgY3JsLWRpcjogJXNcclxuIixwYXRoKTsKLSAgICAgICAgfQotI2lm ZGVmIE5UCi0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILEdldEFwcERhdGEoMSksImtl cm1pdCA5NS9jcmxzIixOVUxMLE5VTEwpOwotICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xv Y2F0aW9ucyhjcmxfc3RvcmUsTlVMTCxwYXRoKSA9PSAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTEwLCJzc2xfaHR0cF9pbml0IHVuYWJsZSB0byBsb2FkIGRpciIscGF0aCwwKTsKLSAgICAgICAg ICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUg dG8gbG9hZCBjcmwtZGlyOiAlc1xyXG4iLHBhdGgpOwotICAgICAgICB9Ci0gICAgICAgIGNrbWFr bXNnKHBhdGgsQ0tNQVhQQVRILEdldEFwcERhdGEoMCksImtlcm1pdCA5NS9jcmxzIixOVUxMLE5V TEwpOwotICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUsTlVM TCxwYXRoKSA9PSAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVu YWJsZSB0byBsb2FkIGRpciIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxh ZykKLSAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZGlyOiAlc1xy XG4iLHBhdGgpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgCi0gICAgICAg IGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILGV4ZWRpciwiY2FfY3Jscy5wZW0iLE5VTEwsTlVMTCk7 Ci0gICAgICAgIGlmIChYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxwYXRoLE5V TEwpID09IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQgdW5hYmxl IHRvIGxvYWQgZmlsZSIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykK LSAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZmlsZTogJXNcclxu IixwYXRoKTsKLSAgICAgICAgfQotI2lmZGVmIE5UCi0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tN QVhQQVRILEdldEFwcERhdGEoMSksImtlcm1pdCA5NS9jYV9jcmxzLnBlbSIsTlVMTCxOVUxMKTsK LSAgICAgICAgaWYgKFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3JlLHBhdGgsTlVM TCkgPT0gMCkgewotICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCB1bmFibGUg dG8gbG9hZCBmaWxlIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQot ICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1maWxlOiAlc1xyXG4i LHBhdGgpOwotICAgICAgICB9Ci0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILEdldEFw cERhdGEoMCksImtlcm1pdCA5NS9jYV9jcmxzLnBlbSIsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYg KFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3JlLHBhdGgsTlVMTCkgPT0gMCkgewot ICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCB1bmFibGUgdG8gbG9hZCBmaWxl IixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAg ICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1maWxlOiAlc1xyXG4iLHBhdGgpOwotICAg ICAgICB9Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgICAgICBpZiAo c3NsX2NybF9maWxlIHx8IHNzbF9jcmxfZGlyKSB7Ci0gICAgICAgICAgICBpZiAoc3NsX2NybF9m aWxlICYmCi0gICAgICAgICAgICAgICAgWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3Rv cmUsc3NsX2NybF9maWxlLE5VTEwpID09IDApIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJzc2xfaHR0cF9pbml0IHVuYWJsZSB0byBsb2FkIHNzbF9jcmxfZmlsZSIsc3NsX2NybF9maWxl LDApOwotICAgICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgY3JsLWZpbGU6ICVzXHJcbiIsc3NsX2NybF9m aWxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzc2xfY3JsX2RpciAmJgotICAg ICAgICAgICAgICAgIFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3JlLE5VTEwsc3Ns X2NybF9kaXIpID09IDApIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9p bml0IHVuYWJsZSB0byBsb2FkIHNzbF9jcmxfZGlyIixzc2xfY3JsX2RpciwwKTsKLSAgICAgICAg ICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgICAgIHByaW50Zigi P1VuYWJsZSB0byBsb2FkIGNybC1kaXI6ICVzXHJcbiIsc3NsX2NybF9kaXIpOwotICAgICAgICAg ICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgWDUwOV9TVE9SRV9zZXRfZGVmYXVs dF9wYXRocyhjcmxfc3RvcmUpOwotICAgICAgICB9Ci0gICAgfQotCi0jaWZuZGVmIENPTU1FTlQK LSAgICB0bHNfY29ueCA9IHRsc19odHRwX2NvbjsKLSAgICB0bHNfaHR0cF9jb249KFNTTCAqKVNT TF9uZXcodGxzX2h0dHBfY3R4KTsKLSAgICBpZiAoICF0bHNfaHR0cF9jb24gKSB7Ci0gICAgICAg IGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQiLCJTU0xfbmV3KHRsc19odHRwX2NvbikgZmFpbGVk IiwwKTsKLSAgICAgICAgdGxzX2h0dHBfY29uID0gdGxzX2Nvbng7Ci0gICAgICAgIHJldHVybigw KTsKLSAgICB9Ci0gICAgaWYgKHRsc19jb254KSB7Ci0gICAgICAgIFNTTF9zZXRfc2Vzc2lvbih0 bHNfaHR0cF9jb24sIFNTTF9nZXRfc2Vzc2lvbih0bHNfY29ueCkpOwotI2lmZGVmIFNTTF9LUkI1 Ci0JCWlmICh0bHNfY29ueC0+a3NzbF9jdHgpIHsKLQkJCWtzc2xfY3R4X2ZyZWUodGxzX2Nvbngt Pmtzc2xfY3R4KTsKLQkJCXRsc19jb254LT5rc3NsX2N0eCA9IE5VTEw7Ci0JCX0KLSNlbmRpZiAv KiBTU0xfS1JCNSAqLwotICAgICAgICBTU0xfZnJlZSh0bHNfY29ueCk7Ci0gICAgICAgIHRsc19j b254ID0gTlVMTDsKLSAgICB9Ci0jZWxzZSAvKiBDT01NRU5UICovCi0gICAgLyogSSBkb24ndCBr bm93IHdoeSB0aGlzIGRvZXMgbm90IHdvcmsgdG8gcmV1c2UgdGhlIGNvbm5lY3Rpb24uICovCi0g ICAgaWYgKCB0bHNfaHR0cF9jb24gKSB7Ci0gICAgICAgIFNTTF9jbGVhcih0bHNfaHR0cF9jb24p OwotICAgICAgICBTU0xfc2V0X3Nlc3Npb24odGxzX2h0dHBfY29uLE5VTEwpOwotICAgICAgICBT U0xfc2V0X2FjY2VwdF9zdGF0ZSh0bHNfaHR0cF9jb24pIDsKLSAgICB9IGVsc2UgewotICAgICAg ICB0bHNfaHR0cF9jb249KFNTTCAqKVNTTF9uZXcodGxzX2h0dHBfY3R4KTsKLSAgICAgICAgaWYg KCAhdGxzX2h0dHBfY29uICkgewotICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5p dCIsIlNTTF9uZXcodGxzX2h0dHBfY3R4KSBmYWlsZWQiLDApOwotICAgICAgICAgICAgdGxzX2h0 dHBfY29uID0gdGxzX2Nvbng7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAg ICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgU1NMX0tSQjUKLSNpZm5kZWYgS1JC NV9TRVJWSUNFX05BTUUKLSNkZWZpbmUgS1JCNV9TRVJWSUNFX05BTUUgICAgImhvc3QiCi0jZW5k aWYKLQotICAgIGlmICh0bHNfaHR0cF9jb24tPmtzc2xfY3R4ID09IE5VTEwpCi0gICAgdGxzX2h0 dHBfY29uLT5rc3NsX2N0eCA9IGtzc2xfY3R4X25ldygpOwotICAgIGlmICh0bHNfaHR0cF9jb24t Pmtzc2xfY3R4ICE9IE5VTEwpCi0gICAgICAgIGtzc2xfY3R4X3NldHN0cmluZyh0bHNfaHR0cF9j b24tPmtzc2xfY3R4LCBLU1NMX1NFUlZFUiwgaG9zdG5hbWUpOwotCi0gICAga3NzbF9jdHhfc2V0 c3RyaW5nKHRsc19odHRwX2Nvbi0+a3NzbF9jdHgsIEtTU0xfU0VSVklDRSwKLSAgICAgICAgICAg ICAgICAgICAgICAgIGtyYjVfZF9zcnYgPyBrcmI1X2Rfc3J2IDogS1JCNV9TRVJWSUNFX05BTUUp OwotI2VuZGlmIC8qIFNTTF9LUkI1ICovCi0KLSAgICBpZiAoc3NsX2NpcGhlcl9saXN0KQotICAg ICAgICBTU0xfc2V0X2NpcGhlcl9saXN0KHRsc19odHRwX2Nvbixzc2xfY2lwaGVyX2xpc3QpOwot ICAgIGVsc2UgewotICAgICAgICBjaGFyICogcDsKLSAgICAgICAgaWYgKHAgPSBnZXRlbnYoIlNT TF9DSVBIRVIiKSkgewotICAgICAgICAgICAgU1NMX3NldF9jaXBoZXJfbGlzdCh0bHNfaHR0cF9j b24scCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTU0xfc2V0X2NpcGhlcl9saXN0 KHRsc19odHRwX2NvbixERUZBVUxUX0NJUEhFUl9MSVNUKTsKLSAgICAgICAgfQotICAgIH0KLQot ICAgIHNzbF92ZXJpZnlfZGVwdGggPSAtMTsKLQotICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKQot ICAgICAgICBwcmludGYoIlNTTC9UTFMgaW5pdCBkb25lIVxyXG4iKTsKLQotICAgIHNzbF9odHRw X2luaXRpYWxpemVkID0gMTsKLSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYgLyogTk9IVFRQICov Ci0KLWNoYXIgKgotc3NsX2dldF9kTlNOYW1lKHNzbCkgU1NMICogc3NsOwotewotICAgIHN0YXRp YyBjaGFyICpkbnMgPSBOVUxMOwotICAgIFg1MDkgKnNlcnZlcl9jZXJ0ID0gTlVMTDsKLSAgICBp bnQgaTsKLSAgICBYNTA5X0VYVEVOU0lPTiAqZXh0ID0gTlVMTDsKLSAgICBTVEFDS19PRihHRU5F UkFMX05BTUUpICppYWx0ID0gTlVMTDsKLSAgICBHRU5FUkFMX05BTUUgKmdlbiA9IE5VTEw7Ci0K LSAgICBpZiAoIGRucyApIHsKLSAgICAgICAgZnJlZShkbnMpOwotICAgICAgICBkbnMgPSBOVUxM OwotICAgIH0KLQotICAgIGlmIChzZXJ2ZXJfY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0 ZShzc2wpKSB7Ci0gICAgICAgIGlmICgoaSA9IFg1MDlfZ2V0X2V4dF9ieV9OSUQoc2VydmVyX2Nl cnQsIE5JRF9zdWJqZWN0X2FsdF9uYW1lLCAtMSkpPDApCi0gICAgICAgICAgICByZXR1cm4gTlVM TDsKLSAgICAgICAgaWYgKCEoZXh0ID0gWDUwOV9nZXRfZXh0KHNlcnZlcl9jZXJ0LCBpKSkpCi0g ICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgWDUwOVYzX2FkZF9zdGFuZGFyZF9leHRl bnNpb25zKCk7Ci0gICAgICAgIGlmICghKGlhbHQgPSBYNTA5VjNfRVhUX2QyaShleHQpKSkKLSAg ICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2tfR0VORVJB TF9OQU1FX251bShpYWx0KTsgaSsrKSB7Ci0gICAgICAgICAgICBnZW4gPSBza19HRU5FUkFMX05B TUVfdmFsdWUoaWFsdCwgaSk7Ci0gICAgICAgICAgICBpZiAoZ2VuLT50eXBlID09IEdFTl9ETlMp IHsKLSAgICAgICAgICAgICAgICBpZiAoIWdlbi0+ZC5pYTUgfHwgIWdlbi0+ZC5pYTUtPmxlbmd0 aCkKLQkJICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoc3RybGVuKChjaGFyICopZ2VuLT5k LmlhNS0+ZGF0YSkgIT0gZ2VuLT5kLmlhNS0+bGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAg IC8qIElnbm9yaW5nIElBNVN0cmluZyBjb250YWluaW5nIG51bGwgY2hhcmFjdGVyICovCi0gICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBkbnMgPSBtYWxsb2MoZ2VuLT5kLmlhNS0+bGVuZ3RoICsgMSk7Ci0gICAgICAgICAgICAg ICAgaWYgKGRucykgewotICAgICAgICAgICAgICAgICAgICBtZW1jcHkoZG5zLCBnZW4tPmQuaWE1 LT5kYXRhLCBnZW4tPmQuaWE1LT5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBkbnNbZ2Vu LT5kLmlhNS0+bGVuZ3RoXSA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFg1MDlWM19FWFRfY2xl YW51cCgpOwotICAgIH0KLWNsZWFudXA6Ci0gICAgaWYgKGlhbHQpICAgICAgICAgICBza19HRU5F UkFMX05BTUVfZnJlZShpYWx0KTsKLSAgICBpZiAoc2VydmVyX2NlcnQpICAgIFg1MDlfZnJlZShz ZXJ2ZXJfY2VydCk7Ci0gICAgcmV0dXJuIGRuczsKLX0KLQotY2hhciAqCi1zc2xfZ2V0X2NvbW1v bk5hbWUoc3NsKSBTU0wgKiBzc2w7IHsKLSAgICBzdGF0aWMgY2hhciBuYW1lWzI1Nl07Ci0gICAg aW50IG5hbWVfdGV4dF9sZW47Ci0gICAgaW50IGVycjsKLSAgICBYNTA5ICpzZXJ2ZXJfY2VydDsK LQotICAgIG5hbWVfdGV4dF9sZW4gPSAwOwotICAgIGlmIChzZXJ2ZXJfY2VydCA9IFNTTF9nZXRf cGVlcl9jZXJ0aWZpY2F0ZShzc2wpKSB7Ci0gICAgICAgIG5hbWVfdGV4dF9sZW4gPQotCSAgICBY NTA5X05BTUVfZ2V0X3RleHRfYnlfTklEKFg1MDlfZ2V0X3N1YmplY3RfbmFtZShzZXJ2ZXJfY2Vy dCksCi0JCQkJICAgICAgTklEX2NvbW1vbk5hbWUsIG5hbWUsIHNpemVvZihuYW1lKSk7Ci0gICAg ICAgIFg1MDlfZnJlZShzZXJ2ZXJfY2VydCk7Ci0gICAgfQotICAgIGlmIChuYW1lX3RleHRfbGVu IDw9IDApIHsKLQkvKiBDb21tb24gTmFtZSB3YXMgZW1wdHkgb3Igbm90IHJldHJpZXZlZCAqLwot ICAgICAgICBlcnIgPSAwOwotICAgIH0gZWxzZSBpZiAoc3RybGVuKG5hbWUpICE9IG5hbWVfdGV4 dF9sZW4pIHsKLSAgICAgICAgLyogSWdub3JpbmcgQ29tbW9uIE5hbWUgY29udGFpbmluZyBudWxs IGNoYXJhY3RlciAqLwotCWVyciA9IDA7Ci0gICAgfSBlbHNlIHsKLQllcnIgPSAxOwotICAgIH0K LSAgICBpZiAoZXJyID4gMCkKLSAgICAgIHJldHVybiBuYW1lOwotICAgIGVsc2UKLSAgICAgIHJl dHVybiBOVUxMOwotfQotCi1jaGFyICoKLXNzbF9nZXRfaXNzdWVyX25hbWUoc3NsKSBTU0wgKiBz c2w7Ci17Ci0gICAgc3RhdGljIGNoYXIgbmFtZVsyNTZdOwotICAgIFg1MDkgKnNlcnZlcl9jZXJ0 OwotCi0gICAgbmFtZVswXSA9ICdcMCc7Ci0gICAgaWYgKHNlcnZlcl9jZXJ0ID0gU1NMX2dldF9w ZWVyX2NlcnRpZmljYXRlKHNzbCkpIHsKLSAgICAgICAgWDUwOV9OQU1FX29uZWxpbmUoWDUwOV9n ZXRfaXNzdWVyX25hbWUoc2VydmVyX2NlcnQpLG5hbWUsc2l6ZW9mKG5hbWUpKTsKLSAgICAgICAg WDUwOV9mcmVlKHNlcnZlcl9jZXJ0KTsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotICAg IGVsc2UgewotI2lmZGVmIENPTU1FTlQKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiV2FybmluZzog Tm8gY2VydGlmaWNhdGUgZnJvbSBzZXJ2ZXIhXHJcbiIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi1jaGFyICoKLXNzbF9nZXRfc3ViamVj dF9uYW1lKHNzbCkgU1NMICogc3NsOwotewotICAgIHN0YXRpYyBjaGFyIG5hbWVbMjU2XTsKLSAg ICBYNTA5ICpzZXJ2ZXJfY2VydDsKLQotICAgIG5hbWVbMF0gPSAnXDAnOwotICAgIGlmIChzZXJ2 ZXJfY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzc2wpKSB7Ci0gICAgICAgWDUwOV9O QU1FX29uZWxpbmUoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHNlcnZlcl9jZXJ0KSxuYW1lLHNpemVv ZihuYW1lKSk7Ci0gICAgICAgWDUwOV9mcmVlKHNlcnZlcl9jZXJ0KTsKLSAgICAgICByZXR1cm4g bmFtZTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gTlVMTDsKLX0KLQotI2lmZGVm IENPTU1FTlQKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICYmICEoY2tfc3NsZWF5X2lzX2lu c3RhbGxlZCgpICYmCi0gICAgICAgICAgICAgICAodGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3Rp dmVfZmxhZykgJiYKLSAgICAgICAgICAgICAgIHNzbF9hbm9ueW1vdXNfY2lwaGVyKHRsc19hY3Rp dmVfZmxhZz90bHNfY29uOnNzbF9jb24pKQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi1pbnQKLXNz bF9hbm9ueW1vdXNfY2lwaGVyKHNzbCkgU1NMICogc3NsOwotewotICAgIFg1MDkgKiBjZXJ0Owot Ci0gICAgaWYgKHNzdGVsbmV0KQotICAgICAgICBjZXJ0ID0gU1NMX2dldF9jZXJ0aWZpY2F0ZShz c2wpOwotICAgIGVsc2UKLSAgICAgICAgY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShz c2wpOwotCi0gICAgaWYgKCBjZXJ0ICkgewotICAgICAgICBYNTA5X2ZyZWUoY2VydCk7Ci0gICAg ICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gMTsKLX0KLSNlbmRpZiAvKiBDT01NRU5U ICovCi0KLS8qCi0gIFRoaXMgb25lIGlzICh2ZXJ5IG11Y2ghKSBiYXNlZCBvbiB3b3JrIGJ5Ci0g IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+LgotICBDb21tZW50cyBi eSBSYWxmLgotKi8KLWludAotc3NsX3ZlcmlmeV9jcmwoaW50IG9rLCBYNTA5X1NUT1JFX0NUWCAq Y3R4KQotewotICAgIFg1MDlfT0JKRUNUIG9iajsKLSAgICBYNTA5X05BTUUgKnN1YmplY3QgPSBO VUxMOwotICAgIFg1MDlfTkFNRSAqaXNzdWVyID0gTlVMTDsKLSAgICBYNTA5ICp4cyA9IE5VTEw7 Ci0gICAgWDUwOV9DUkwgKmNybCA9IE5VTEw7Ci0gICAgWDUwOV9SRVZPS0VEICpyZXZva2VkID0g TlVMTDsKLSAgICBYNTA5X1NUT1JFX0NUWCAqIHN0b3JlX2N0eCA9IE5VTEw7Ci0gICAgbG9uZyBz ZXJpYWw7Ci0gICAgQklPICpiaW8gPSBOVUxMOwotICAgIGludCBpLCBuLCByYzsKLSAgICBjaGFy ICpjcDsKLSAgICBjaGFyICpjcDI7Ci0KLSAgICAvKgotICAgICAqIFVubGVzcyBhIHJldm9jYXRp b24gc3RvcmUgZm9yIENSTHMgd2FzIGNyZWF0ZWQgd2UKLSAgICAgKiBjYW5ub3QgZG8gYW55IENS TC1iYXNlZCB2ZXJpZmljYXRpb24sIG9mIGNvdXJzZS4KLSAgICAgKi8KLSAgICBpZiAoIWNybF9z dG9yZSkKLSAgICAgICAgcmV0dXJuIG9rOwotCi0gICAgc3RvcmVfY3R4ID0gWDUwOV9TVE9SRV9D VFhfbmV3KCk7Ci0gICAgaWYgKCAhc3RvcmVfY3R4ICkKLSAgICAgICAgcmV0dXJuKG9rKTsKLQot ICAgIC8qCi0gICAgICogRGV0ZXJtaW5lIGNlcnRpZmljYXRlIGluZ3JlZGllbnRzIGluIGFkdmFu Y2UKLSAgICAgKi8KLSAgICB4cyAgICAgID0gWDUwOV9TVE9SRV9DVFhfZ2V0X2N1cnJlbnRfY2Vy dChjdHgpOwotICAgIHN1YmplY3QgPSBYNTA5X2dldF9zdWJqZWN0X25hbWUoeHMpOwotICAgIGlz c3VlciAgPSBYNTA5X2dldF9pc3N1ZXJfbmFtZSh4cyk7Ci0KLSAgICAvKgotICAgICAqIE9wZW5T U0wgcHJvdmlkZXMgdGhlIGdlbmVyYWwgbWVjaGFuaXNtIHRvIGRlYWwgd2l0aCBDUkxzIGJ1dCBk b2VzIG5vdAotICAgICAqIHVzZSB0aGVtIGF1dG9tYXRpY2FsbHkgd2hlbiB2ZXJpZnlpbmcgY2Vy dGlmaWNhdGVzLCBzbyB3ZSBkbyBpdAotICAgICAqIGV4cGxpY2l0bHkgaGVyZS4gV2Ugd2lsbCBj aGVjayB0aGUgQ1JMIGZvciB0aGUgY3VycmVudGx5IGNoZWNrZWQKLSAgICAgKiBjZXJ0aWZpY2F0 ZSwgaWYgdGhlcmUgaXMgc3VjaCBhIENSTCBpbiB0aGUgc3RvcmUuCi0gICAgICoKLSAgICAgKiBX ZSBjb21lIHRocm91Z2ggdGhpcyBwcm9jZWR1cmUgZm9yIGVhY2ggY2VydGlmaWNhdGUgaW4gdGhl IGNlcnRpZmljYXRlCi0gICAgICogY2hhaW4sIHN0YXJ0aW5nIHdpdGggdGhlIHJvb3QtQ0EncyBj ZXJ0aWZpY2F0ZS4gQXQgZWFjaCBzdGVwIHdlJ3ZlIHRvCi0gICAgICogYm90aCB2ZXJpZnkgdGhl IHNpZ25hdHVyZSBvbiB0aGUgQ1JMICh0byBtYWtlIHN1cmUgaXQncyBhIHZhbGlkIENSTCkKLSAg ICAgKiBhbmQgaXQncyByZXZvY2F0aW9uIGxpc3QgKHRvIG1ha2Ugc3VyZSB0aGUgY3VycmVudCBj ZXJ0aWZpY2F0ZSBpc24ndAotICAgICAqIHJldm9rZWQpLiAgQnV0IGJlY2F1c2UgdG8gY2hlY2sg dGhlIHNpZ25hdHVyZSBvbiB0aGUgQ1JMIHdlIG5lZWQgdGhlCi0gICAgICogcHVibGljIGtleSBv ZiB0aGUgaXNzdWluZyBDQSBjZXJ0aWZpY2F0ZSAod2hpY2ggd2FzIGFscmVhZHkgcHJvY2Vzc2Vk Ci0gICAgICogb25lIHJvdW5kIGJlZm9yZSksIHdlJ3ZlIGEgbGl0dGxlIHByb2JsZW0uIEJ1dCB3 ZSBjYW4gYm90aCBzb2x2ZSBpdCBhbmQKLSAgICAgKiBhdCB0aGUgc2FtZSB0aW1lIG9wdGltaXpl IHRoZSBwcm9jZXNzaW5nIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcKLSAgICAgKiB2ZXJpZmljYXRp b24gc2NoZW1lIChpZGVhIGFuZCBjb2RlIHNuaXBwZXRzIGJvcnJvd2VkIGZyb20gdGhlIEdMT0JV UwotICAgICAqIHByb2plY3QpOgotICAgICAqCi0gICAgICogMS4gV2UnbGwgY2hlY2sgdGhlIHNp Z25hdHVyZSBvZiBhIENSTCBpbiBlYWNoIHN0ZXAgd2hlbiB3ZSBmaW5kIGEgQ1JMCi0gICAgICog ICAgdGhyb3VnaCB0aGUgX3N1YmplY3RfIG5hbWUgb2YgdGhlIGN1cnJlbnQgY2VydGlmaWNhdGUu IFRoaXMgQ1JMCi0gICAgICogICAgaXRzZWxmIHdpbGwgYmUgbmVlZGVkIHRoZSBmaXJzdCB0aW1l IGluIHRoZSBuZXh0IHJvdW5kLCBvZiBjb3Vyc2UuCi0gICAgICogICAgQnV0IHdlIGRvIHRoZSBz aWduYXR1cmUgcHJvY2Vzc2luZyBvbmUgcm91bmQgYmVmb3JlIHRoaXMgd2hlcmUgdGhlCi0gICAg ICogICAgcHVibGljIGtleSBvZiB0aGUgQ0EgaXMgYXZhaWxhYmxlLgotICAgICAqCi0gICAgICog Mi4gV2UnbGwgY2hlY2sgdGhlIHJldm9jYXRpb24gbGlzdCBvZiBhIENSTCBpbiBlYWNoIHN0ZXAg d2hlbgotICAgICAqICAgIHdlIGZpbmQgYSBDUkwgdGhyb3VnaCB0aGUgX2lzc3Vlcl8gbmFtZSBv ZiB0aGUgY3VycmVudCBjZXJ0aWZpY2F0ZS4KLSAgICAgKiAgICBUaGlzIENSTHMgc2lnbmF0dXJl IHdhcyB0aGVuIGFscmVhZHkgdmVyaWZpZWQgb25lIHJvdW5kIGJlZm9yZS4KLSAgICAgKgotICAg ICAqIFRoaXMgdmVyaWZpY2F0aW9uIHNjaGVtZSBhbGxvd3MgYSBDQSB0byByZXZva2UgaXRzIG93 biBjZXJ0aWZpY2F0ZSBhcwotICAgICAqIHdlbGwsIG9mIGNvdXJzZS4KLSAgICAgKi8KLQotICAg IC8qCi0gICAgICogVHJ5IHRvIHJldHJpZXZlIGEgQ1JMIGNvcnJlc3BvbmRpbmcgdG8gdGhlIF9z dWJqZWN0XyBvZgotICAgICAqIHRoZSBjdXJyZW50IGNlcnRpZmljYXRlIGluIG9yZGVyIHRvIHZl cmlmeSBpdCdzIGludGVncml0eS4KLSAgICAgKi8KLSAgICBtZW1zZXQoKGNoYXIgKikmb2JqLCAw LCBzaXplb2Yob2JqKSk7Ci0gICAgWDUwOV9TVE9SRV9DVFhfaW5pdChzdG9yZV9jdHgsIGNybF9z dG9yZSwgTlVMTCwgTlVMTCk7Ci0gICAgcmMgPSBYNTA5X1NUT1JFX2dldF9ieV9zdWJqZWN0KHN0 b3JlX2N0eCwgWDUwOV9MVV9DUkwsIHN1YmplY3QsICZvYmopOwotICAgIFg1MDlfU1RPUkVfQ1RY X2NsZWFudXAoc3RvcmVfY3R4KTsKLSAgICBjcmwgPSBvYmouZGF0YS5jcmw7Ci0gICAgaWYgKHJj ID4gMCAmJiBjcmwgIT0gTlVMTCkgewotICAgICAgICAvKgotICAgICAgICAgKiBWZXJpZnkgdGhl IHNpZ25hdHVyZSBvbiB0aGlzIENSTAotICAgICAgICAgKi8KLSAgICAgICAgaWYgKFg1MDlfQ1JM X3ZlcmlmeShjcmwsIFg1MDlfZ2V0X3B1YmtleSh4cykpIDw9IDApIHsKLSAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAiSW52YWxpZCBzaWduYXR1cmUgb24gQ1JMIVxuIik7Ci0gICAgICAgICAg ICBYNTA5X1NUT1JFX0NUWF9zZXRfZXJyb3IoY3R4LCBYNTA5X1ZfRVJSX0NSTF9TSUdOQVRVUkVf RkFJTFVSRSk7Ci0gICAgICAgICAgICBYNTA5X09CSkVDVF9mcmVlX2NvbnRlbnRzKCZvYmopOwot ICAgICAgICAgICAgWDUwOV9TVE9SRV9DVFhfZnJlZShzdG9yZV9jdHgpOwotICAgICAgICAgICAg cmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBDaGVjayBkYXRl IG9mIENSTCB0byBtYWtlIHN1cmUgaXQncyBub3QgZXhwaXJlZAotICAgICAgICAgKi8KLSAgICAg ICAgaSA9IFg1MDlfY21wX2N1cnJlbnRfdGltZShYNTA5X0NSTF9nZXRfbmV4dFVwZGF0ZShjcmwp KTsKLSAgICAgICAgaWYgKGkgPT0gMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJG b3VuZCBDUkwgaGFzIGludmFsaWQgbmV4dFVwZGF0ZSBmaWVsZC5cbiIpOwotICAgICAgICAgICAg WDUwOV9TVE9SRV9DVFhfc2V0X2Vycm9yKGN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFg1MDlfVl9FUlJfRVJST1JfSU5fQ1JMX05FWFRfVVBEQVRFX0ZJRUxEKTsKLSAg ICAgICAgICAgIFg1MDlfT0JKRUNUX2ZyZWVfY29udGVudHMoJm9iaik7Ci0gICAgICAgICAgICBY NTA5X1NUT1JFX0NUWF9mcmVlKHN0b3JlX2N0eCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAg ICAgICAgfQotICAgICAgICBpZiAoaSA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LAotIkZvdW5kIENSTCBpcyBleHBpcmVkIC0gcmV2b2tpbmcgYWxsIGNlcnRpZmljYXRlcyB1bnRp bCB5b3UgZ2V0IHVwZGF0ZWQgQ1JMLlxuIgotICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgWDUwOV9TVE9SRV9DVFhfc2V0X2Vycm9yKGN0eCwgWDUwOV9WX0VSUl9DUkxfSEFTX0VY UElSRUQpOwotICAgICAgICAgICAgWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50cygmb2JqKTsKLSAg ICAgICAgICAgIFg1MDlfU1RPUkVfQ1RYX2ZyZWUoc3RvcmVfY3R4KTsKLSAgICAgICAgICAgIHJl dHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIFg1MDlfT0JKRUNUX2ZyZWVfY29udGVudHMoJm9i aik7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBUcnkgdG8gcmV0cmlldmUgYSBDUkwgY29ycmVz cG9uZGluZyB0byB0aGUgX2lzc3Vlcl8gb2YKLSAgICAgKiB0aGUgY3VycmVudCBjZXJ0aWZpY2F0 ZSBpbiBvcmRlciB0byBjaGVjayBmb3IgcmV2b2NhdGlvbi4KLSAgICAgKi8KLSAgICBtZW1zZXQo KGNoYXIgKikmb2JqLCAwLCBzaXplb2Yob2JqKSk7Ci0gICAgWDUwOV9TVE9SRV9DVFhfaW5pdChz dG9yZV9jdHgsIGNybF9zdG9yZSwgTlVMTCwgTlVMTCk7Ci0gICAgcmMgPSBYNTA5X1NUT1JFX2dl dF9ieV9zdWJqZWN0KHN0b3JlX2N0eCwgWDUwOV9MVV9DUkwsIGlzc3VlciwgJm9iaik7Ci0gICAg WDUwOV9TVE9SRV9DVFhfZnJlZShzdG9yZV9jdHgpOwkJLyogY2FsbHMgWDUwOV9TVE9SRV9DVFhf Y2xlYW51cCgpICovCi0gICAgY3JsID0gb2JqLmRhdGEuY3JsOwotICAgIGlmIChyYyA+IDAgJiYg Y3JsICE9IE5VTEwpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogQ2hlY2sgaWYgdGhlIGN1cnJl bnQgY2VydGlmaWNhdGUgaXMgcmV2b2tlZCBieSB0aGlzIENSTAotICAgICAgICAgKi8KLSAgICAg ICAgbiA9IHNrX1g1MDlfUkVWT0tFRF9udW0oWDUwOV9DUkxfZ2V0X1JFVk9LRUQoY3JsKSk7Ci0g ICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgICAgIHJldm9rZWQgPSBz a19YNTA5X1JFVk9LRURfdmFsdWUoWDUwOV9DUkxfZ2V0X1JFVk9LRUQoY3JsKSwgaSk7Ci0gICAg ICAgICAgICBpZiAoQVNOMV9JTlRFR0VSX2NtcChyZXZva2VkLT5zZXJpYWxOdW1iZXIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X2dldF9zZXJpYWxOdW1iZXIoeHMpKSA9 PSAwKSB7Ci0KLSAgICAgICAgICAgICAgICBzZXJpYWwgPSBBU04xX0lOVEVHRVJfZ2V0KHJldm9r ZWQtPnNlcmlhbE51bWJlcik7Ci0gICAgICAgICAgICAgICAgY3AgPSBYNTA5X05BTUVfb25lbGlu ZShpc3N1ZXIsIE5VTEwsIDApOwotICAgICAgICAgICAgICAgIGZyZWUoY3ApOwotCi0gICAgICAg ICAgICAgICAgWDUwOV9TVE9SRV9DVFhfc2V0X2Vycm9yKGN0eCwgWDUwOV9WX0VSUl9DRVJUX1JF Vk9LRUQpOwotICAgICAgICAgICAgICAgIFg1MDlfT0JKRUNUX2ZyZWVfY29udGVudHMoJm9iaik7 Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICAgICAgWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50cygmb2JqKTsKLSAgICB9Ci0gICAgcmV0dXJu IG9rOwotfQotCi1jaGFyICoKLXRsc191c2VyaWRfZnJvbV9jbGllbnRfY2VydChzc2wpIFNTTCAq IHNzbDsKLXsKLSAgICBzdGF0aWMgY2hhciBjblsyNTZdOwotICAgIHN0YXRpYyBjaGFyICpyID0g Y247Ci0gICAgaW50IGVycjsKLSAgICBYNTA5ICpjbGllbnRfY2VydDsKLQotICAgIGlmIChjbGll bnRfY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzc2wpKSB7Ci0gICAgICAgIC8qIGNh bGwgdGhlIGN1c3RvbSBmdW5jdGlvbiAqLwotICAgICAgICBlcnIgPSBYNTA5X3RvX3VzZXIoY2xp ZW50X2NlcnQsIGNuLCBzaXplb2YoY24pKTsKLSAgICAgICAgWDUwOV9mcmVlKGNsaWVudF9jZXJ0 KTsKLSAgICAgICAgaWYgKGVycikKLSAgICAgICAgICAgIHJldHVybiByID0gTlVMTDsKLSAgICAg ICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHI7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAg cmV0dXJuIHIgPSBOVUxMOwotfQotCi11bnNpZ25lZCBjaGFyICoqCi10bHNfZ2V0X1NBTl9vYmpz KFNTTCAqIHNzbCwgaW50IHR5cGUpCi0vKiByZXR1cm5zIE5VTEwgb3IgYW4gYXJyYXkgb2YgbWFs bG9jJ2VkIG9iamVjdHMgb2YgdHlwZSBgdHlwZScgZnJvbSB0aGUgc2VydmVyJ3MKLSAqIHN1Ympl Y3RBbHROYW1lLCByZW1lbWJlciB0byBmcmVlKCkgdGhlbSBhbGwhCi0gKi8KLXsKLSNkZWZpbmUg TlVNX1NBTl9PQkpTIDY0Ci0gICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgKm9ianNbTlVNX1NBTl9P QkpTXTsKLSAgICB1bnNpZ25lZCBjaGFyICoqcnYgPSBOVUxMOwotICAgIFg1MDkgKnNlcnZlcl9j ZXJ0ID0gTlVMTDsKLSAgICBpbnQgaSwgajsKLSAgICBYNTA5X0VYVEVOU0lPTiAqZXh0ID0gTlVM TDsKLSAgICBTVEFDS19PRihHRU5FUkFMX05BTUUpICppYWx0ID0gTlVMTDsKLSAgICBHRU5FUkFM X05BTUUgKmdlbiA9IE5VTEw7Ci0KLSAgICBtZW1zZXQob2JqcywgMCwgc2l6ZW9mKG9ianMpKTsK LSAgICBpZiAoc2VydmVyX2NlcnQgPSBTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoc3NsKSkgewot ICAgICAgICBpZiAoKGkgPSBYNTA5X2dldF9leHRfYnlfTklEKHNlcnZlcl9jZXJ0LCBOSURfc3Vi amVjdF9hbHRfbmFtZSwgLTEpKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVqZWN0OwotICAgICAg ICBpZiAoIShleHQgPSBYNTA5X2dldF9leHQoc2VydmVyX2NlcnQsIGkpKSkKLSAgICAgICAgICAg IGdvdG8gZWplY3Q7Ci0gICAgICAgIFg1MDlWM19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9ucygpOwot ICAgICAgICBpZiAoIShpYWx0ID0gWDUwOVYzX0VYVF9kMmkoZXh0KSkpCi0gICAgICAgICAgICBn b3RvIGVqZWN0OwotICAgICAgICBydiA9IG9ianM7Ci0gICAgICAgIGZvciAoaSA9IDAsIGogPSAw OyBpIDwgc2tfR0VORVJBTF9OQU1FX251bShpYWx0KSAmJiBqIDwgTlVNX1NBTl9PQkpTIC0gMjsg aSsrKSB7Ci0gICAgICAgICAgICBnZW4gPSBza19HRU5FUkFMX05BTUVfdmFsdWUoaWFsdCwgaSk7 Ci0gICAgICAgICAgICAvKiBUaGUgdXNlIG9mIFZfQVNOMV9DT05URVhUX1NQRUNJRklDIGlzIGJl Y2F1c2UgT3BlblNTTCAwLjkuNiBkZWZpbmVkIGl0cwotICAgICAgICAgICAgICogdHlwZXMgfCBW X0FTTjFfQ09OVEVYVF9TUEVDSUZJQy4gIDAuOS43IGRvZXMgbm90LiAgSW4gY2FzZSwgd2UgYXJl IGJ1aWx0Ci0gICAgICAgICAgICAgKiB3aXRoIG9uZSBhbmQgbGlua2VkIHRvIHRoZSBvdGhlciB3 ZSB1c2UgdGhpcyBoYWNrLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoKGdlbi0+ dHlwZSB8IFZfQVNOMV9DT05URVhUX1NQRUNJRklDKSA9PSAodHlwZSB8IFZfQVNOMV9DT05URVhU X1NQRUNJRklDKSkgewotICAgICAgICAgICAgICAgIGlmICghZ2VuLT5kLmlhNSB8fCAhZ2VuLT5k LmlhNS0+bGVuZ3RoKQotCQkgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChzdHJsZW4oKGNo YXIgKilnZW4tPmQuaWE1LT5kYXRhKSAhPSBnZW4tPmQuaWE1LT5sZW5ndGgpIHsKLSAgICAgICAg ICAgICAgICAgICAgLyogSWdub3JpbmcgSUE1U3RyaW5nIGNvbnRhaW5pbmcgbnVsbCBjaGFyYWN0 ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIG9ianNbal0gPSBtYWxsb2MoZ2VuLT5kLmlhNS0+bGVuZ3RoICsgMSk7 Ci0gICAgICAgICAgICAgICAgaWYgKG9ianNbal0pIHsKLSAgICAgICAgICAgICAgICAgICAgbWVt Y3B5KG9ianNbal0sIGdlbi0+ZC5pYTUtPmRhdGEsIGdlbi0+ZC5pYTUtPmxlbmd0aCk7Ci0gICAg ICAgICAgICAgICAgICAgIG9ianNbal1bZ2VuLT5kLmlhNS0+bGVuZ3RoXSA9IDA7Ci0gICAgICAg ICAgICAgICAgICAgIGorKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSAgICAgICAgWDUwOVYzX0VYVF9jbGVhbnVwKCk7Ci0gICAgfQotZWplY3Q6Ci0gICAg aWYgKGlhbHQpICAgICAgICAgICBza19HRU5FUkFMX05BTUVfZnJlZShpYWx0KTsKLSAgICBpZiAo c2VydmVyX2NlcnQpICAgIFg1MDlfZnJlZShzZXJ2ZXJfY2VydCk7Ci0gICAgcmV0dXJuIHJ2Owot fQotCi0KLXN0YXRpYyBpbnQKLWROU05hbWVfY21wKGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNo YXIgKmROU05hbWUpCi17Ci0gICAgaW50IGMxID0gMSwgYzIgPSAxLCBudW1fY29tcCwgcnYgPSAt MTsKLSAgICBjaGFyICpwLCAqcDEsICpwMiwgKmhvc3RfY29weT1OVUxMLCAqZE5TTmFtZV9jb3B5 PU5VTEw7Ci0KLSAgICAvKiBmaXJzdCB3ZSBjb3VudCB0aGUgbnVtYmVyIG9mIGRvbWFpbiBuYW1l IGNvbXBvbmVudHMgaW4gYm90aCBwYXJhbWV0ZXJzLgotICAgICAqIHRoZXkgc2hvdWxkIGJlIGVx dWFsIG1hbnksIG9yIGl0J3Mgbm90IGEgbWF0Y2gKLSAgICAgKi8KLSAgICBwID0gKGNoYXIgKikg aG9zdDsKLSAgICB3aGlsZSAocCA9IHN0cnN0cihwLCAiLiIpKSB7Ci0gICAgICAgIGMxKys7Ci0g ICAgICAgIHArKzsKLSAgICB9Ci0gICAgcCA9IChjaGFyICopIGROU05hbWU7Ci0gICAgd2hpbGUg KHAgPSBzdHJzdHIocCwgIi4iKSkgewotICAgICAgICBjMisrOwotICAgICAgICBwKys7Ci0gICAg fQotICAgIGlmIChjMSAhPSBjMikKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIG51bV9jb21wID0g YzE7Ci0KLSAgICBtYWtlc3RyKCZob3N0X2NvcHksaG9zdCk7Ci0gICAgbWFrZXN0cigmZE5TTmFt ZV9jb3B5LGROU05hbWUpOwotICAgIGlmIChob3N0X2NvcHkgPT0gTlVMTCB8fCBkTlNOYW1lX2Nv cHkgPT0gTlVMTCkKLSAgICAgICAgZ290byBlamVjdDsKLSAgICAvKiBtYWtlIHN1YnN0cmluZ3Mg YnkgcmVwbGFjaW5nICcuJyB3aXRoICdcMCcgKi8KLSAgICBwID0gZE5TTmFtZV9jb3B5OwotICAg IHdoaWxlIChwID0gc3Ryc3RyKHAsICIuIikpIHsKLSAgICAgICAgKnAgPSAnXDAnOwotICAgICAg ICBwKys7Ci0gICAgfQotICAgIHAgPSBob3N0X2NvcHk7Ci0gICAgd2hpbGUgKHAgPSBzdHJzdHIo cCwgIi4iKSkgewotICAgICAgICAqcCA9ICdcMCc7Ci0gICAgICAgIHArKzsKLSAgICB9Ci0KLSAg ICAvKiBjb21wYXJlIGVhY2ggY29tcG9uZW50ICovCi0gICAgcDEgPSBob3N0X2NvcHk7Ci0gICAg cDIgPSBkTlNOYW1lX2NvcHk7Ci0gICAgZm9yICg7IG51bV9jb21wOyBudW1fY29tcC0tKSB7Ci0g ICAgICAgIGlmICghY2ttYXRjaChwMiwgcDEsMCwxKSkKLSAgICAgICAgICAgIC8qIGZhaWxlZCBt YXRjaCAqLwotICAgICAgICAgICAgZ290byBlamVjdDsKLSAgICAgICAgcDEgKz0gc3RybGVuKHAx KSArIDE7Ci0gICAgICAgIHAyICs9IHN0cmxlbihwMikgKyAxOwotICAgIH0KLSAgICAvKiBtYXRj aCBvayAqLwotICAgIHJ2ID0gMDsKLQotICBlamVjdDoKLSAgICBpZiAoZE5TTmFtZV9jb3B5KSAg IGZyZWUoZE5TTmFtZV9jb3B5KTsKLSAgICBpZiAoaG9zdF9jb3B5KSAgICAgIGZyZWUoaG9zdF9j b3B5KTsKLSAgICByZXR1cm4gcnY7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1zaG93X2hvc3RuYW1l X3dhcm5pbmcoY2hhciAqczEsIGNoYXIgKnMyKQotewotICAgIGNoYXIgcHJlZml4WzEwMjRdOwot ICAgIGludCBvayA9IDE7Ci0gICAgc2V0dmVyYm9zaXR5KCk7Ci0gICAgY2ttYWt4bXNnKHByZWZp eCwxMDI0LAotICAgICAgICAgICAgICAiV2FybmluZzogSG9zdG5hbWUgKFwiIiwgczEsIAotICAg ICAgICAgICAgICAiXCIpIGRvZXMgbm90IG1hdGNoIHNlcnZlcidzIGNlcnRpZmljYXRlIChcIiIs IHMyLCAiXCIpIiwKLSAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCk7Ci0gICAgaWYgKHNzbF92ZXJpZnlfZmxhZykKLSAgICAgICAgb2sgPSB1cV9vayhwcmVm aXgsCi0gICAgICAgICAgICAgICAgICAgICJDb250aW51ZT8gKFkvTikgIiwKLSAgICAgICAgICAg ICAgICAgICAgMywgTlVMTCwgMCk7Ci0gICAgZWxzZSBpZiAodmVyYm9zaXR5KQotICAgICAgICBw cmludGYocHJlZml4KTsKLSAgICByZXR1cm4ob2spOwotfQotCi0jaWZuZGVmIE9TRjUwCi0jaWZu ZGVmIEhQVVgxMAotI2lmbmRlZiBIUFVYMTEwMAotI2lmbmRlZiBTQ09fT1NSNTA1Ci0jaWZuZGVm IE9wZW5CU0QKLSNpZm5kZWYgRlJFRUJTRDQKLSNpZm5kZWYgTkVUQlNEMTUKLSNpZm5kZWYgTElO VVgKLSNpZm5kZWYgQUlYNDEKLSNpZm5kZWYgVVc3Ci0jaWZuZGVmIElSSVg2NQotI2lmbmRlZiBT T0xBUklTOQotI2lmbmRlZiBTT0xBUklTOAotI2lmbmRlZiBTT0xBUklTNwotI2lmbmRlZiBNQUNP U1gKLSNpZmRlZiBERUNfVENQSVAKLSNkZWZpbmUgaW5ldF9hdG9uIElORVRfQVRPTgotI2VuZGlm IC8qIERFQ19UQ1BJUCAqLwotCi0jaWZuZGVmIE5PX0RDTF9JTkVUX0FUT04KLXN0YXRpYyBpbnQK LWluZXRfYXRvbihjaGFyICogaXBhZGRyZXNzLCBzdHJ1Y3QgaW5fYWRkciAqIGlhKSB7Ci0gICAg c3RydWN0IHN0cmluZ2FycmF5ICogcTsKLSAgICB1bmlvbiB7Ci0gICAgICAgIHVuc2lnbmVkIGxv bmcgbDsKLSAgICAgICAgdW5zaWduZWQgY2hhciBiWzRdOwotICAgIH0gZHVtbXk7Ci0KLSAgICBx ID0gY2tzcGxpdCgxLDAsaXBhZGRyZXNzLCIuIiwiMDEyMzQ1Njc4OWFiY2RlZkFDREVGIiw4LDAs MCk7Ci0gICAgaWYgKHEtPmFfc2l6ZSA9PSA0KSB7Ci0gICAgICAgIGR1bW15LmJbMF0gPSBhdG9p KHEtPmFfaGVhZFsxXSk7Ci0gICAgICAgIGR1bW15LmJbMV0gPSBhdG9pKHEtPmFfaGVhZFsyXSk7 Ci0gICAgICAgIGR1bW15LmJbMl0gPSBhdG9pKHEtPmFfaGVhZFszXSk7Ci0gICAgICAgIGR1bW15 LmJbM10gPSBhdG9pKHEtPmFfaGVhZFs0XSk7Ci0gICAgICAgIGlhLT5zX2FkZHIgPSBkdW1teS5s OwotICAgICAgICByZXR1cm4oaWEtPnNfYWRkciAhPSAwKTsKLSAgICB9Ci0gICAgcmV0dXJuKDAp OwotfQotI2VuZGlmCS8qIE5PX0RDTF9JTkVUX0FUT04gKi8KLQotI2VuZGlmIC8qIE1BQ09TWCAq LwotI2VuZGlmIC8qIFNPTEFSSVM3ICovCi0jZW5kaWYgLyogU09MQVJJUzggKi8KLSNlbmRpZiAv KiBTT0xBUklTOSAqLwotI2VuZGlmIC8qIElSSVg2NSAqLwotI2VuZGlmIC8qIFVXNyAqLwotI2Vu ZGlmIC8qIEFJWDQxICovCi0jZW5kaWYgLyogTElOVVggKi8KLSNlbmRpZiAvKiBORVRCU0QxNSAq LwotI2VuZGlmIC8qIEZSRUVCU0Q0ICovCi0jZW5kaWYgLyogT3BlbkJTRCAqLwotI2VuZGlmIC8q IFNDT19PU1I1MDUgKi8KLSNlbmRpZiAvKiBIUFVYMTEwMCAqLwotI2VuZGlmIC8qIEhQVVgxMCAq LwotI2VuZGlmIC8qIE9TRjUwICovCi0KLWludAotc3NsX2NoZWNrX3NlcnZlcl9uYW1lKFNTTCAq IHNzbCwgY2hhciAqIGhvc3RuYW1lKQotLyogcmV0dXJucyAwIGlmIGhvc3RuYW1lIGFuZCBzZXJ2 ZXIncyBjZXJ0IG1hdGNoZXMsIGVsc2UgLTEgKi8KLXsKLSAgICBjaGFyICogY29tbW9uTmFtZTsK LSAgICB1bnNpZ25lZCBjaGFyICoqIGROU05hbWU7Ci0gICAgdW5zaWduZWQgY2hhciAqKiBpcEFk ZHJlc3M7Ci0gICAgc3RydWN0IGluX2FkZHIgaWE7Ci0gICAgaW50IHJ2OwotCi0gICAgc2V0dmVy Ym9zaXR5KCk7Ci0gICAgaWYgKHZlcmJvc2l0eSAmJiAhaW5zZXJ2ZXIpIHsKLSAgICAgICAgaWYg KGROU05hbWUgPSB0bHNfZ2V0X1NBTl9vYmpzKHNzbCxHRU5fRE5TKSkgewotICAgICAgICAgICAg aW50IGkgPSAwOwotICAgICAgICAgICAgZm9yIChpID0gMDsgZE5TTmFtZVtpXTsgaSsrKSB7Ci0g ICAgICAgICAgICAgICAgcHJpbnRmKCJDZXJ0aWZpY2F0ZVswXSBhbHRTdWJqZWN0TmFtZSBETlM9 JXNcclxuIixkTlNOYW1lW2ldKTsKLSAgICAgICAgICAgICAgICBmcmVlKGROU05hbWVbaV0pOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChpcEFkZHJlc3MgPSB0bHNfZ2V0 X1NBTl9vYmpzKHNzbCxHRU5fSVBBREQpKSB7Ci0gICAgICAgICAgICBpbnQgaSA9IDA7Ci0gICAg ICAgICAgICBjaGFyICpzZXJ2ZXJfaXA7Ci0gICAgICAgICAgICBzdHJ1Y3QgaW5fYWRkciBpYTsK LQotICAgICAgICAgICAgZm9yIChpID0gMDsgaXBBZGRyZXNzW2ldOyBpKyspIHsKLSAgICAgICAg ICAgICAgICBpZiAoaXBBZGRyZXNzW2ldKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlhLnNfYWRk ciA9ICoodW5zaWduZWQgbG9uZyAqKWlwQWRkcmVzc1tpXTsKLSAgICAgICAgICAgICAgICAgICAg c2VydmVyX2lwID0gaW5ldF9udG9hKGlhKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJD ZXJ0aWZpY2F0ZVswXSBhbHRTdWJqZWN0TmFtZSBJUEFkZHI9JXNcclxuIixzZXJ2ZXJfaXApOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcmVlKGlwQWRkcmVzc1tpXSk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBpcEFkZHJlc3MgcG9pbnRzIHRvIGEgc3RhdGlj IC0gZG9uJ3QgZnJlZSAqLwotICAgICAgICB9Ci0gICAgICAgIGlmIChkTlNOYW1lID0gdGxzX2dl dF9TQU5fb2Jqcyhzc2wsR0VOX0VNQUlMKSkgewotICAgICAgICAgICAgaW50IGkgPSAwOwotICAg ICAgICAgICAgZm9yIChpID0gMDsgZE5TTmFtZVtpXTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg cHJpbnRmKCJDZXJ0aWZpY2F0ZVswXSBhbHRTdWJqZWN0TmFtZSBFbWFpbD0lc1xyXG4iLGROU05h bWVbaV0pOwotICAgICAgICAgICAgICAgIGZyZWUoZE5TTmFtZVtpXSk7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGROU05hbWUgPSB0bHNfZ2V0X1NBTl9vYmpzKHNzbCxH RU5fVVJJKSkgewotICAgICAgICAgICAgaW50IGkgPSAwOwotICAgICAgICAgICAgZm9yIChpID0g MDsgZE5TTmFtZVtpXTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJDZXJ0aWZpY2F0 ZVswXSBhbHRTdWJqZWN0TmFtZSBVUkk9JXNcclxuIixkTlNOYW1lW2ldKTsKLSAgICAgICAgICAg ICAgICBmcmVlKGROU05hbWVbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg IGlmIChkTlNOYW1lID0gdGxzX2dldF9TQU5fb2Jqcyhzc2wsR0VOX09USEVSTkFNRSkpIHsKLSAg ICAgICAgICAgIGludCBpID0gMDsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGROU05hbWVbaV07 IGkrKykgewotICAgICAgICAgICAgICAgIHByaW50ZigiQ2VydGlmaWNhdGVbMF0gYWx0U3ViamVj dE5hbWUgT3RoZXI9JXNcclxuIixkTlNOYW1lW2ldKTsKLSAgICAgICAgICAgICAgICBmcmVlKGRO U05hbWVbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogZmly c3Qgd2UgY2hlY2sgaWYgYGhvc3RuYW1lJyBpcyBpbiBmYWN0IGFuIGlwIGFkZHJlc3MgKi8KLSAg ICBpZiAoaW5ldF9hdG9uKGhvc3RuYW1lLCAmaWEpKSB7Ci0gICAgICAgIGlwQWRkcmVzcyA9IHRs c19nZXRfU0FOX29ianMoc3NsLEdFTl9JUEFERCk7Ci0gICAgICAgIGlmIChpcEFkZHJlc3MpIHsK LSAgICAgICAgICAgIGludCBpID0gMDsKLSAgICAgICAgICAgIGNoYXIgKnNlcnZlcl9pcCA9ICJV TktOT1dOIjsKLQotICAgICAgICAgICAgZm9yIChpID0gMDsgaXBBZGRyZXNzW2ldOyBpKyspCi0g ICAgICAgICAgICAgICAgaWYgKCoodW5zaWduZWQgbG9uZyAqKWlwQWRkcmVzc1tpXSA9PSBpYS5z X2FkZHIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgICBpZiAo aXBBZGRyZXNzW2kgLSAxXSkgewotICAgICAgICAgICAgICAgIGlhLnNfYWRkciA9ICoodW5zaWdu ZWQgbG9uZyAqKWlwQWRkcmVzc1tpIC0gMV07Ci0gICAgICAgICAgICAgICAgc2VydmVyX2lwID0g aW5ldF9udG9hKGlhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJ2ID0gc2hvd19ob3N0 bmFtZV93YXJuaW5nKGhvc3RuYW1lLCBzZXJ2ZXJfaXApID8gMCA6IC0xOwotICAgICAgICAgICAg Zm9yIChpID0gMDsgaXBBZGRyZXNzW2ldOyBpKyspCi0gICAgICAgICAgICAgICAgZnJlZShpcEFk ZHJlc3NbaV0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcnYgPSBzaG93X2hvc3Ru YW1lX3dhcm5pbmcoaG9zdG5hbWUsICJOTyBJUCBJTiBDRVJUIikgPyAwIDogLTE7Ci0gICAgICAg IH0KLSAgICAgICAgcmV0dXJuKHJ2KTsKLSAgICB9Ci0KLSAgICAvKiBsb29rIGZvciBkTlNOYW1l KHMpIGluIHN1YmplY3RBbHROYW1lIGluIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSAqLwotICAg IGROU05hbWUgPSB0bHNfZ2V0X1NBTl9vYmpzKHNzbCxHRU5fRE5TKTsKLSAgICBpZiAoZE5TTmFt ZSkgewotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIGZvciAoaSA9IDA7IGROU05hbWVbaV07 IGkrKykgewotICAgICAgICAgICAgaWYgKCFkTlNOYW1lX2NtcChob3N0bmFtZSwoY2hhciAqKWRO U05hbWVbaV0pKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAg IHJ2ID0gc2hvd19ob3N0bmFtZV93YXJuaW5nKGhvc3RuYW1lLAotCQkJCSAgIChjaGFyICopKChk TlNOYW1lW2kgLSAxXSA9PSBOVUxMKSA/IAotCQkJICAgICAgICAgICAoY2hhciAqKSJVTktOT1dO IiA6IChjaGFyICopZE5TTmFtZVtpIC0gMV0pKQotCSAgICAgPyAwIDogLTE7Ci0gICAgICAgIGZv ciAoaSA9IDA7IGROU05hbWVbaV07IGkrKykKLSAgICAgICAgICAgIGZyZWUoZE5TTmFtZVtpXSk7 Ci0gICAgICAgIHJldHVybiBydjsKLSAgICB9IGVsc2UgaWYgKChjb21tb25OYW1lID0gc3NsX2dl dF9jb21tb25OYW1lKHNzbCkpKSB7Ci0gICAgICAgLyogc28gdGhlIHNlcnZlciBkaWRuJ3QgaGF2 ZSBhbnkgZE5TTmFtZSdzLCBjaGVjayB0aGUgY29tbW9uTmFtZSAqLwotICAgICAgIGlmICghZE5T TmFtZV9jbXAoaG9zdG5hbWUsIGNvbW1vbk5hbWUpKQotICAgICAgICAgICByZXR1cm4gMDsKLSAg ICAgICBlbHNlCi0gICAgICAgICAgIHJldHVybiAoc2hvd19ob3N0bmFtZV93YXJuaW5nKGhvc3Ru YW1lLCBjb21tb25OYW1lKSA/IDAgOiAtMSk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQot LyogSXMgJ3VzZXInIGF1dGhvcml6ZWQgdG8gYWNjZXNzIHRoZSBzeXN0ZW0gd2l0aG91dCBhIGxv Z2luICovCi1pbnQKLXRsc19pc191c2VyX3ZhbGlkKFNTTCAqIHNzbCwgY29uc3QgY2hhciAqdXNl cikKLXsKLSAgICBYNTA5ICpjbGllbnRfY2VydDsKLSAgICBpbnQgciA9IDA7Ci0KLSAgICBpZiAo ICFzc2wgfHwgIXVzZXIgfHwgIXVzZXJbMF0gKQotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICBp ZiAoIShjbGllbnRfY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzc2wpKSkKLSAgICAg ICAgcmV0dXJuIDA7Ci0KLSAgICAvKiBVc2UgdXNlciBzdXBwbGllZCBmdW5jdGlvbiAqLwotICAg IHIgPSBYNTA5X3VzZXJvayhjbGllbnRfY2VydCx1c2VyKTsKLQotICAgIFg1MDlfZnJlZShjbGll bnRfY2VydCk7Ci0gICAgcmV0dXJuIHI7Ci19Ci0KLWludAotdGxzX2lzX2Fub24oaW50IHgpCi17 Ci0gICAgY2hhciBidWZbMTI4XTsKLSAgICBTU0xfQ0lQSEVSICogY2lwaGVyOwotICAgIFNTTCAq IHNzbCA9IE5VTEw7Ci0KLSAgICBzd2l0Y2ggKCB4ICkgewotI2lmbmRlZiBOT0ZUUAotI2lmbmRl ZiBTWVNGVFAKLSAgICBjYXNlIDE6ICAgICAvKiBmdHAgY29tbWFuZCAqLwotICAgICAgICBpZiAo IHNzbF9mdHBfYWN0aXZlX2ZsYWcgKQotICAgICAgICAgICAgc3NsID0gc3NsX2Z0cF9jb247Ci0g ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAyOiAgICAgLyogZnRwIGRhdGEgKi8KLSAgICAgICAgaWYgKCBzc2xfZnRwX2RhdGFfYWN0 aXZlX2ZsYWcgKQotICAgICAgICAgICAgc3NsID0gc3NsX2Z0cF9kYXRhX2NvbjsKLSAgICAgICAg ZWxzZQotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBT WVNGVFAgKi8KLSNlbmRpZiAvKiBOT0ZUUCAqLwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICh0 bHNfYWN0aXZlX2ZsYWcpCi0gICAgICAgICAgICBzc2wgPSB0bHNfY29uOwotICAgICAgICBlbHNl IGlmIChzc2xfYWN0aXZlX2ZsYWcpCi0gICAgICAgICAgICBzc2wgPSBzc2xfY29uOwotICAgICAg ICBlbHNlCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotCi0gICAgY2lwaGVyID0gU1NM X2dldF9jdXJyZW50X2NpcGhlcihzc2wpOwotICAgIGlmIChTU0xfQ0lQSEVSX2Rlc2NyaXB0aW9u KGNpcGhlcixidWYsc2l6ZW9mKGJ1ZikpKSB7Ci0gICAgICAgIGlmIChja2luZGV4KCJBdT1Ob25l IixidWYsMCwwLDApICE9IDApCi0gICAgICAgICAgICByZXR1cm4oMSk7ICAgICAgICAgICAgICAg ICAgLyogYW5vbnltb3VzICovCi0gICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAv KiBrbm93biAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIGNvdWxkIG5vdCBnZXQgY2lwaGVy IGRlc2NyaXB0aW9uLiAgQXNzdW1lIGFub255bW91cyAqLwotICAgICAgICByZXR1cm4oMSk7Ci0g ICAgfQotfQotCi1pbnQKLXRsc19pc19rcmI1KGludCB4KQotewotICAgIGNoYXIgYnVmWzEyOF07 Ci0gICAgU1NMX0NJUEhFUiAqIGNpcGhlcjsKLSAgICBTU0wgKiBzc2wgPSBOVUxMOwotCi0gICAg c3dpdGNoICggeCApIHsKLSNpZm5kZWYgTk9GVFAKLSNpZm5kZWYgU1lTRlRQCi0gICAgY2FzZSAx OiAgICAgLyogZnRwIGNvbW1hbmQgKi8KLSAgICAgICAgaWYgKCBzc2xfZnRwX2FjdGl2ZV9mbGFn ICkKLSAgICAgICAgICAgIHNzbCA9IHNzbF9mdHBfY29uOwotICAgICAgICBlbHNlCi0gICAgICAg ICAgICByZXR1cm4oMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjogICAgIC8qIGZ0cCBk YXRhICovCi0gICAgICAgIGlmICggc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnICkKLSAgICAgICAg ICAgIHNzbCA9IHNzbF9mdHBfZGF0YV9jb247Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJl dHVybigwKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogU1lTRlRQICovCi0jZW5kaWYgLyog Tk9GVFAgKi8KLSNpZm5kZWYgTk9IVFRQCi0gICAgY2FzZSAzOgotICAgICAgICBpZiAoIHRsc19o dHRwX2FjdGl2ZV9mbGFnICkKLSAgICAgICAgICAgIHNzbCA9IHRsc19odHRwX2NvbjsKLSAgICAg ICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9IVFRQICovCi0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYg KHRsc19hY3RpdmVfZmxhZykKLSAgICAgICAgICAgIHNzbCA9IHRsc19jb247Ci0gICAgICAgIGVs c2UgaWYgKHNzbF9hY3RpdmVfZmxhZykKLSAgICAgICAgICAgIHNzbCA9IHNzbF9jb247Ci0gICAg ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0KLSAgICBjaXBoZXIgPSBT U0xfZ2V0X2N1cnJlbnRfY2lwaGVyKHNzbCk7Ci0gICAgaWYgKGNpcGhlciAmJiBTU0xfQ0lQSEVS X2Rlc2NyaXB0aW9uKGNpcGhlcixidWYsc2l6ZW9mKGJ1ZikpKSB7Ci0gICAgICAgIGlmIChja2lu ZGV4KCJBdT1LUkI1IixidWYsMCwwLDApICE9IDApCi0gICAgICAgICAgICByZXR1cm4oMSk7ICAg ICAgICAgICAgICAgICAgLyoga3JiNSAqLwotICAgIH0KLSAgICByZXR1cm4oMCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBub3QgKi8KLX0KLQotaW50Ci1zc2xfZ2V0X2NsaWVudF9maW5p c2hlZChjaGFyICpidWYsIGludCBjb3VudCkKLXsKLSNpZmRlZiBOT19HRVRfRklOSVNIRUQKLSAg ICByZXR1cm4oMCk7Ci0jZWxzZQotICAgIGlmIChzc3RlbG5ldCB8fCB0Y3BfaW5jb21pbmcpIHsK LSAgICAgICAgcmV0dXJuKFNTTF9nZXRfcGVlcl9maW5pc2hlZChzc2xfYWN0aXZlX2ZsYWc/c3Ns X2Nvbjp0bHNfY29uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYs Y291bnQpKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4oU1NMX2dldF9maW5pc2hlZChz c2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBidWYsY291bnQpKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9fR0VUX0ZJTklT SEVEICovCi19Ci0KLWludAotc3NsX2dldF9zZXJ2ZXJfZmluaXNoZWQoY2hhciAqYnVmLCBpbnQg Y291bnQpCi17Ci0jaWZkZWYgTk9fR0VUX0ZJTklTSEVECi0gICAgcmV0dXJuKDApOwotI2Vsc2UK LSAgICBpZiAoc3N0ZWxuZXQgfHwgdGNwX2luY29taW5nKSB7Ci0gICAgICAgIHJldHVybihTU0xf Z2V0X2ZpbmlzaGVkKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24sCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zixjb3VudCkpOwotICAgIH0gZWxzZSB7Ci0g ICAgICAgIHJldHVybihTU0xfZ2V0X3BlZXJfZmluaXNoZWQoc3NsX2FjdGl2ZV9mbGFnP3NzbF9j b246dGxzX2NvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLGNv dW50KSk7Ci0gICAgfQotI2VuZGlmIC8qIE5PX0dFVF9GSU5JU0hFRCAqLwotfQotCi0KLSNpZmRl ZiBDS19BVVRIRU5USUNBVElPTgotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXNzbF9yZXBseShpbnQg aG93LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY250KQotI2Vsc2UKLXNzbF9yZXBseShob3cs ZGF0YSxjbnQpIGludCBob3c7IHVuc2lnbmVkIGNoYXIgKmRhdGE7IGludCBjbnQ7Ci0jZW5kaWYK LXsKLSAgICBjaGFyICogc3RyPU5VTEw7Ci0KLSAgICBzZXR2ZXJib3NpdHkoKTsKLSAgICBkYXRh ICs9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBzdGF0dXMgYnl0ZSAq LwotICAgIGNudCAgLT0gNDsKLQotICAgIGlmKGNudC0tIDwgMSkgewotICAgICAgICBhdXRoX2Zp bmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLSAgICB9 Ci0KLSAgICBzd2l0Y2goKmRhdGErKykgewotICAgIGNhc2UgU1NMX0FDQ0VQVDoKLSAgICAgICAg aWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIGhhbmRz aGFrZSBzdGFydGluZ10iKTsKLSAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAgICAg ICAgICBwcmludGYoIltTU0wgLSBoYW5kc2hha2Ugc3RhcnRpbmddXHJcbiIpOwotICAgICAgICBk ZWJ1ZyhGMTEwLCJzc2xfcmVwbHkiLCJbU1NMIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXSIsMCk7Ci0K LSAgICAgICAgLyogcmlnaHQgLi4uIG5vdyB3ZSBkcm9wIGludG8gdGhlIFNTTCBsaWJyYXJ5ICov Ci0gICAgICAgIGlmICghc3NsX29ubHlfZmxhZykgewotICAgICAgICAgICAgaWYgKHNzbF9kdW1t eV9mbGFnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAg ICAgICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gRHVtbXkgQ29ubmVjdGVkXSIpOwotICAgICAg ICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBy aW50ZigiW1NTTCAtIER1bW15IENvbm5lY3RlZF1cclxuIik7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9yZXBseSIsIltTU0wgLSBEdW1teSBDb25u ZWN0ZWRdIiwwKTsKLSAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVU5LTk9XTik7 Ci0gICAgICAgICAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKLSAgICAgICAgICAgICAgICBy ZXR1cm4gQVVUSF9TVUNDRVNTOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoU1NM X2Nvbm5lY3Qoc3NsX2NvbikgPD0gMCkgewotICAgICAgICAgICAgICAgIGludCBsZW47Ci0gICAg ICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgICAgICAgICAgICAg dG5fZGVidWcoIltTU0wgLSBGQUlMRURdIik7Ci0gICAgICAgICAgICAgICAgICAgIEVSUl9wcmlu dF9lcnJvcnMoYmlvX2Vycik7Ci0gICAgICAgICAgICAgICAgICAgIGxlbiA9IEJJT19yZWFkKGJp b19lcnIsc3NsX2VycixTU0xfRVJSX0JGU1opOwotICAgICAgICAgICAgICAgICAgICBzc2xfZXJy W2xlbiA8IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAnOwotICAgICAg ICAgICAgICAgICAgICBwcmludGYoc3NsX2Vycik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm ICggdmVyYm9zaXR5ICkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIltTU0wgLSBGQUlM RURdXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICBFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIp OwotICAgICAgICAgICAgICAgICAgICBsZW4gPSBCSU9fcmVhZChiaW9fZXJyLHNzbF9lcnIsU1NM X0VSUl9CRlNaKTsKLSAgICAgICAgICAgICAgICAgICAgc3NsX2VycltsZW4gPCBTU0xfRVJSX0JG U1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAgICAgcHJp bnRmKHNzbF9lcnIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJzc2xfcmVwbHkiLCJbU1NMIC0gRkFJTEVEXSIsMCk7Ci0gICAgICAgICAgICAgICAgYXV0 aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICAgICAgdHRjbG9zKDApOwotICAg ICAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0gICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgICAgICAg ICB0bl9kZWJ1ZygiW1NTTCAtIE9LXSIpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJi b3NpdHkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1NTTCAtIE9LXVxyXG4iKTsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3JlcGx5 IiwiW1NTTCAtIE9LXSIsMCk7Ci0KLSAgICAgICAgICAgICAgICBzc2xfYWN0aXZlX2ZsYWcgPSAx OwotICAgICAgICAgICAgICAgIHNzbF9kaXNwbGF5X2Nvbm5lY3RfZGV0YWlscyhzc2xfY29uLDAs dmVyYm9zaXR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBhdXRoX2Zpbmlz aGVkKEFVVEhfVU5LTk9XTik7Ci0gICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9IDE7Ci0gICAgICAg IGJyZWFrOwotCi0gICAgY2FzZSBTU0xfUkVKRUNUOgotICAgICAgICBpZiAodG5fZGViIHx8IGRl YnNlcykgewotICAgICAgICAgICAgdG5fZGVidWcoCi0gICAgICAgICAgICAgICAgICJbU1NMIC0g ZmFpbGVkIHRvIHN3aXRjaCBvbiBTU0wgLSB0cnlpbmcgcGxhaW50ZXh0IGxvZ2luXSIpOwotICAg ICAgICB9IGVsc2UgaWYgKCB2ZXJib3NpdHkgKSB7Ci0gICAgICAgICAgICBwcmludGYoIltTU0wg LSBmYWlsZWQgdG8gc3dpdGNoIG9uIFNTTF1cclxuIik7Ci0gICAgICAgICAgICBwcmludGYoIlRy eWluZyBwbGFpbnRleHQgbG9naW46XHJcbiIpOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYx MTAsInNzbF9yZXBseSIsIltTU0wgLSBmYWlsZWQgdG8gc3dpdGNoIG9uIFNTTF0iLDApOwotICAg ICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgcmV0dXJuIEFVVEhfRkFJ TFVSRTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0gICAg fQotICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1z c2xfaXModW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNudCkKLSNlbHNlCi1zc2xfaXMoZGF0YSxj bnQpIHVuc2lnbmVkIGNoYXIgKmRhdGE7IGludCBjbnQ7Ci0jZW5kaWYKLXsKLSAgICBpZiAoKGNu dCAtPSA0KSA8IDEpCi0gICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0KLSAgICBzZXR2ZXJi b3NpdHkoKTsKLSAgICBkYXRhICs9IDQ7Ci0gICAgc3dpdGNoKCpkYXRhKyspIHsKLSAgICBjYXNl IFNTTF9TVEFSVDoKLSAgICAgICAgLyogc2VydmVyIHN0YXJ0cyB0aGUgU1NMIHN0dWZmIG5vdyAu Li4gKi8KLSAgICAgICAgaWYgKCFzc2xfb25seV9mbGFnKSB7Ci0gICAgICAgICAgICBpZiAoICF0 bHNfbG9hZF9jZXJ0cyhzc2xfY3R4LHNzbF9jb24sMSkgKSB7Ci0gICAgICAgICAgICAgICAgYXV0 aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJ TFVSRTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp Ci0gICAgICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBoYW5kc2hha2Ugc3RhcnRpbmddIik7 Ci0gICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAgICAgICAgICAgICAgICBwcmlu dGYoIltTU0wgLSBoYW5kc2hha2Ugc3RhcnRpbmddXHJcbiIpOwotICAgICAgICAgICAgZGVidWco RjExMCwic3NsX2lzIiwiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGluZ10iLDApOwotCi0gICAgICAg ICAgICBTZW5kU1NMQXV0aFNCKFNTTF9BQ0NFUFQsICh2b2lkICopMCwgMCk7Ci0KLSAgICAgICAg ICAgIGF1dGhfc3NsX3ZhbGlkID0gMTsKLQotICAgICAgICAgICAgaWYgKHNzbF9kdW1teV9mbGFn KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAg ICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gRHVtbXkgQ29ubmVjdGVkXSIpOwotICAgICAgICAgICAg ICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Zigi W1NTTCAtIER1bW15IENvbm5lY3RlZF1cclxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9pcyIsIltTU0wgLSBEdW1teSBDb25uZWN0ZWRdIiww KTsKLSAgICAgICAgICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAxOwotICAgICAgICAgICAgICAg IGF1dGhfZmluaXNoZWQoQVVUSF9VTktOT1dOKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQVVU SF9TVUNDRVNTOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoU1NMX2FjY2VwdChz c2xfY29uKSA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBlcnJidWZbMTAyNF07Ci0KLSAg ICAgICAgICAgICAgICBzcHJpbnRmKGVycmJ1ZiwiW1NTTCAtIFNTTF9hY2NlcHQgZXJyb3I6ICVz IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJy b3IoKSxOVUxMKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAg ICAgICAgICAgICAgICAgICAgdG5fZGVidWcoZXJyYnVmKTsKLSAgICAgICAgICAgICAgICBlbHNl IGlmICggc3NsX2RlYnVnX2ZsYWcgKQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVzXHJc biIsZXJyYnVmKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJbU1NMIC0gU1NMX2FjY2VwdCBlcnJvcl1cclxuIik7Ci0K LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaXMiLGVycmJ1ZiwwKTsKLQotICAgICAg ICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgICAgIHR0 Y2xvcygwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwotICAgICAgICAg ICAgfQotCi0gICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAgICAgICAgICAg ICB0bl9kZWJ1ZygiW1NTTCAtIE9LXSIpOwotICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0 eSApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIltTU0wgLSBPS11cclxuIik7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaXMiLCJbU1NMIC0gT0tdIiwwKTsK LSAgICAgICAgICAgIHNzbF9hY3RpdmVfZmxhZyA9IDE7Ci0gICAgICAgICAgICBzc2xfZGlzcGxh eV9jb25uZWN0X2RldGFpbHMoc3NsX2NvbiwxLHZlcmJvc2l0eSk7Ci0KLSAgICAgICAgICAgIC8q IG5vdyBjaGVjayB0byBzZWUgdGhhdCB3ZSBnb3QgZXhhY3RseSB3aGF0IHdlCi0gICAgICAgICAg ICAqIHdhbnRlZCBmcm9tIHRoZSBjYWxsZXIgLi4uIGlmIGEgY2VydGlmaWNhdGUgaXMKLSAgICAg ICAgICAgICogcmVxdWlyZWQgdGhlbiB3ZSBtYWtlIDEwMCUgc3VyZSB0aGF0IHdlIHdlcmUKLSAg ICAgICAgICAgICogZ2l2ZW4gb25lIGR1cmluZyB0aGUgaGFuZHNoYWtlIChhcyBpdCBpcyBhbiBv cHRpb25hbAotICAgICAgICAgICAgKiBwYXJ0IG9mIFNTTCkKLSAgICAgICAgICAgICovCi0KLSNp ZmRlZiBTU0xfS1JCNQotICAgICAgICAgICAgaWYgKCB0bHNfaXNfa3JiNSgwKSApIHsKLSAgICAg ICAgICAgICAgICBpZiAoc3NsX2Nvbi0+a3NzbF9jdHgtPmNsaWVudF9wcmluYykKLSAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2lzIEtSQjUiLHNzbF9jb24tPmtzc2xfY3R4LT5j bGllbnRfcHJpbmMsMCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBTU0xfS1JCNSAq LwotICAgICAgICAgICAgaWYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9O T19QRUVSX0NFUlQpIHsKLSAgICAgICAgICAgICAgICBYNTA5ICogcGVlciA9IFNTTF9nZXRfcGVl cl9jZXJ0aWZpY2F0ZShzc2xfY29uKTsKLSAgICAgICAgICAgICAgICBpZiAocGVlciA9PSBOVUxM KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAg ICAgICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBwZWVyIGNoZWNrIGZhaWxlZF0iKTsKLSAg ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoIltTU0wgLSBwZWVyIGNoZWNrIGZhaWxlZF1cclxuIik7Ci0gICAg ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9pcyIsIltTU0wgLSBwZWVyIGNoZWNrIGZh aWxlZF0iLDApOwotCi0gICAgICAgICAgICAgICAgICAgIC8qIExPR0dJTkcgUkVRVUlSRUQgSEVS RSEgKi8KLSAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0g ICAgICAgICAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1VOS05PV04p OwotICAgICAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKLSAgICAgICAgfQotICAgICAgICBi cmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFNlbmRTU0xBdXRoU0IoU1NMX1JFSkVDVCwg KHZvaWQgKikgIlVua25vd24gb3B0aW9uIHJlY2VpdmVkIiwgLTEpOwotICAgICAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykKLSAgICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gVW5rbm93biBvcHRp b24gcmVjZWl2ZWRdIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiVW5rbm93 biBTU0wgb3B0aW9uICVkXHJcbiIsIGRhdGFbLTFdKTsKLSAgICAgICAgZGVidWcoRjExMSwic3Ns X2lzIiwiW1NTTCAtIFVua25vd24gb3B0aW9uIHJlY2VpdmVkXSIsZGF0YVstMV0pOwotICAgICAg ICBhdXRoX3NzbF92YWxpZCA9IDA7Ci0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1Qp OwotICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAgICB9Ci0gICAgcmV0dXJuIEFVVEhf U1VDQ0VTUzsKLX0KLQotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0KLWludAotY2tf dG5fdGxzX25lZ290aWF0ZShWT0lEKQotewotICAgIFg1MDkgKiBwZWVyID0gTlVMTDsKLSAgICBj aGFyIHN0clsyNTZdLCAqdWlkPU5VTEw7Ci0gICAgZXh0ZXJuIGludCBzc3RlbG5ldDsKLQotICAg IGlmICggIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSApCi0gICAgICAgIHJldHVybigtMSk7Ci0K LSAgICBzZXR2ZXJib3NpdHkoKTsKLSAgICBpZiAoc3N0ZWxuZXQpIHsKLSAgICAgICAgLyogc2Vy dmVyIHN0YXJ0cyB0aGUgVExTIHN0dWZmIG5vdyAuLi4gKi8KLSAgICAgICAgaWYgKCF0bHNfb25s eV9mbGFnKSB7Ci0gICAgICAgICAgICBpZiAoICF0bHNfbG9hZF9jZXJ0cyh0bHNfY3R4LHRsc19j b24sMSkgKSB7Ci0gICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0g ICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp ZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIGhh bmRzaGFrZSBzdGFydGluZ10iKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQot ICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIGhhbmRzaGFrZSBzdGFydGluZ11cclxuIik7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl90bHNfbmVnb3RpYXRlIiwiW1RMUyAtIGhh bmRzaGFrZSBzdGFydGluZ10iLDApOwotCi0gICAgICAgICAgICBpZiAoc3NsX2R1bW15X2ZsYWcp IHsKLSAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAgICAgICAgICAg ICAgICAgdG5fZGVidWcoIltUTFMgLSBEdW1teSBDb25uZWN0ZWRdIik7Ci0gICAgICAgICAgICAg ICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJb VExTIC0gRHVtbXkgQ29ubmVjdGVkXVxyXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgZGVidWcoRjExMCwiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltUTFMgLSBEdW1teSBD b25uZWN0ZWRdIiwwKTsKLSAgICAgICAgICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAxOwotICAg ICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgICAg IHJldHVybiAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoU1NMX2FjY2VwdCh0 bHNfY29uKSA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBlcnJidWZbMTAyNF07Ci0KLSAg ICAgICAgICAgICAgICBzcHJpbnRmKGVycmJ1ZiwiW1RMUyAtIFNTTF9hY2NlcHQgZXJyb3I6ICVz IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJy b3IoKSxOVUxMKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAg ICAgICAgICAgICAgICAgICAgdG5fZGVidWcoZXJyYnVmKTsKLSAgICAgICAgICAgICAgICBlbHNl IGlmICggc3NsX2RlYnVnX2ZsYWcgKQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVzXHJc biIsZXJyYnVmKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gU1NMX2FjY2VwdCBlcnJvcl1cclxuIik7Ci0K LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl90bHNfbmVnb3RpYXRlIixlcnJidWYs MCk7Ci0gICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAg ICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykKLSAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIE9LXSIpOwot ICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApIHsKLSAgICAgICAgICAgICAgICBwcmlu dGYoIltUTFMgLSBPS11cclxuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlYnVn KEYxMTAsImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExTIC0gT0tdIiwwKTsKLSAgICAgICAgICAg IHRsc19hY3RpdmVfZmxhZyA9IDE7Ci0gICAgICAgICAgICBzc2xfZGlzcGxheV9jb25uZWN0X2Rl dGFpbHModGxzX2NvbiwxLHZlcmJvc2l0eSk7Ci0KLQotI2lmZGVmIFNTTF9LUkI1Ci0gICAgICAg ICAgICBpZiAoIHRsc19pc19rcmI1KDApICkgewotICAgICAgICAgICAgICAgIGlmICh0bHNfY29u LT5rc3NsX2N0eC0+Y2xpZW50X3ByaW5jKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgKnA7 Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzelVzZXJOYW1lQXV0aGVudGljYXRlZCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bHNfY29uLT5rc3NsX2N0eC0+Y2xpZW50 X3ByaW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJREJVRkxFTik7Ci0gICAg ICAgICAgICAgICAgICAgIGNrc3RybmNweShzelVzZXJOYW1lUmVxdWVzdGVkLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRsc19jb24tPmtzc2xfY3R4LT5jbGllbnRfcHJpbmMsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlEQlVGTEVOKTsKLSAgICAgICAgICAgICAg ICAgICAgZm9yICggcCA9IHN6VXNlck5hbWVSZXF1ZXN0ZWQ7ICpwIDsgcCsrICkgewotICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCAqcCA9PSAnQCcgfHwgKnAgPT0gJy8nICkgewotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpwID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN6VXNl ck5hbWVSZXF1ZXN0ZWRbMF0gPSAnXDAnOwotICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1l QXV0aGVudGljYXRlZFswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgfQotI2lmZGVmIENLX0xP R0lOCi0gICAgICAgICAgICAgICAgaWYgKHp2dXNlcihzelVzZXJOYW1lUmVxdWVzdGVkKSkKLSAg ICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1ZBTElEKTsKLSAgICAgICAgICAg ICAgICBlbHNlCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICAgICAgICAgICAgICAgICAgYXV0 aF9maW5pc2hlZChBVVRIX1VTRVIpOwotICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogU1NM X0tSQjUgKi8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIG5vdyBjaGVjayB0byBzZWUg dGhhdCB3ZSBnb3QgZXhhY3RseSB3aGF0IHdlCi0gICAgICAgICAgICAqIHdhbnRlZCBmcm9tIHRo ZSBjYWxsZXIgLi4uIGlmIGEgY2VydGlmaWNhdGUgaXMKLSAgICAgICAgICAgICogcmVxdWlyZWQg dGhlbiB3ZSBtYWtlIDEwMCUgc3VyZSB0aGF0IHdlIHdlcmUKLSAgICAgICAgICAgICogZ2l2ZW4g b25lIGR1cmluZyB0aGUgaGFuZHNoYWtlIChhcyBpdCBpcyBhbiBvcHRpb25hbAotICAgICAgICAg ICAgKiBwYXJ0IG9mIFRMUykKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBwZWVyPVNTTF9n ZXRfcGVlcl9jZXJ0aWZpY2F0ZSh0bHNfY29uKTsKLSAgICAgICAgICAgIGlmIChwZWVyID09IE5V TEwpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJTU0xfZ2V0X3BlZXJfY2VydGlmaWNh dGUoKSA9PSBOVUxMIiwiIiwwKTsKLSAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhf UkVKRUNUKTsKLSAgICAgICAgICAgICAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklG WV9GQUlMX0lGX05PX1BFRVJfQ0VSVCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGVi IHx8IGRlYnNlcykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gcGVl ciBjaGVjayBmYWlsZWRdIik7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNzbF9kZWJ1 Z19mbGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBwZWVyIGNo ZWNrIGZhaWxlZF1cclxuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjExMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJja190bl90bHNf bmVnb3RpYXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJbVExTIC0gcGVlciBjaGVj ayBmYWlsZWRdIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIC8qIExPR0dJTkcgUkVRVUlSRUQg SEVSRSEgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiU1NM X2dldF9wZWVyX2NlcnRpZmljYXRlKCkgIT0gTlVMTCIsIiIsMCk7Ci0gICAgICAgICAgICAgICAg WDUwOV9OQU1FX2dldF90ZXh0X2J5X05JRChYNTA5X2dldF9zdWJqZWN0X25hbWUocGVlciksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTklEX2NvbW1vbk5hbWUs c3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAg ICAgaWYgKCB2ZXJib3NpdHkgKQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBj b21tb25OYW1lPSVzXVxyXG4iLHN0cik7Ci0KLSAgICAgICAgICAgICAgICBYNTA5X05BTUVfZ2V0 X3RleHRfYnlfTklEKFg1MDlfZ2V0X3N1YmplY3RfbmFtZShwZWVyKSwKLSNpZm5kZWYgTklEX3g1 MDBVbmlxdWVJZGVudGlmaWVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTklEX3VuaXF1ZUlkZW50aWZpZXIsCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5JRF94NTAwVW5pcXVlSWRlbnRpZmllciwKLSNlbmRpZgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIGlmICggdmVyYm9z aXR5ICkKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gdW5pcXVlSWRlbnRpZmll cj0lc11cclxuIixzdHIpOwotCi0gICAgICAgICAgICAgICAgLyogVHJ5IHRvIGRldGVybWluZSB1 c2VyIG5hbWUgKi8KLSAgICAgICAgICAgICAgICB1aWQgPSB0bHNfdXNlcmlkX2Zyb21fY2xpZW50 X2NlcnQodGxzX2Nvbik7Ci0gICAgICAgICAgICAgICAgaWYgKCB1aWQgKSB7Ci0gICAgICAgICAg ICAgICAgICAgIC8qIFRoaXMgY29kZSBpcyB2ZXJ5IHF1ZXN0aW9uYWJsZS4KLSAgICAgICAgICAg ICAgICAgICAgICogSG93IHNob3VsZCBpdCBiZWhhdmU/Ci0gICAgICAgICAgICAgICAgICAgICAq IFRoZSBjbGllbnQgaGFzIHByZXNlbnRlZCBhIGNlcnRpZmljYXRlIHRoYXQKLSAgICAgICAgICAg ICAgICAgICAgICogY29udGFpbnMgYSB1c2VybmFtZS4gIFdlIGhhdmUgdmFsaWRhdGVkIHRoZQot ICAgICAgICAgICAgICAgICAgICAgKiBjZXJ0aWZpY2F0ZSBidXQgd2UgZG8gbm90IGF1dG9tYXRp Y2FsbHkKLSAgICAgICAgICAgICAgICAgICAgICogbG9nIHRoZSB1c2VyIGluIHVubGVzcyB0aGVy ZSBpcyBhIC50bHNsb2dpbgotICAgICAgICAgICAgICAgICAgICAgKiBmaWxlLgotICAgICAgICAg ICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFt ZVJlcXVlc3RlZCx1aWQsVUlEQlVGTEVOKTsKLSNpZmRlZiBDS19MT0dJTgotICAgICAgICAgICAg ICAgICAgICBpZiAoenZ1c2VyKHVpZCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2Zp bmlzaGVkKEFVVEhfVkFMSUQpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyog Q0tfTE9HSU4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9V U0VSKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg ICAgICAgICAgICAgIHN6VXNlck5hbWVSZXF1ZXN0ZWRbMF0gPSAnXDAnOwotICAgICAgICAgICAg ICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg ICAgICBjaGFyICogc3RyPU5VTEw7Ci0KLSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0g ICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIGhhbmRzaGFrZSBzdGFydGluZ10iKTsKLSAgICAg ICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAgICAgICAgICBwcmludGYoIltUTFMgLSBoYW5k c2hha2Ugc3RhcnRpbmddXHJcbiIpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl90bHNfbmVn b3RpYXRlIiwiW1RMUyAtIGhhbmRzaGFrZSBzdGFydGluZ10iLDApOwotCi0gICAgICAgIC8qIHJp Z2h0IC4uLiBub3cgd2UgZHJvcCBpbnRvIHRoZSBTU0wgbGlicmFyeSAqLwotICAgICAgICBpZiAo IXRsc19vbmx5X2ZsYWcpIHsKLSAgICAgICAgICAgIGNoYXIgKnN1YmplY3Q9TlVMTCwgKmlzc3Vl cj1OVUxMLCAqY29tbW9uTmFtZT1OVUxMLCAqZE5TTmFtZT1OVUxMOwotCi0gICAgICAgICAgICBp ZiAoc3NsX2R1bW15X2ZsYWcpIHsKLSAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNl cykKLSAgICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBEdW1teSBDb25uZWN0ZWRd Iik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApIHsKLSAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCJbVExTIC0gRHVtbXkgQ29ubmVjdGVkXVxyXG4iKTsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdG5fdGxzX25lZ290aWF0 ZSIsIltUTFMgLSBEdW1teSBDb25uZWN0ZWRdIiwwKTsKLSAgICAgICAgICAgICAgICBhdXRoX2Zp bmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAx OwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotCi0jaWZuZGVmIFVT RV9DRVJUX0NCCi0gICAgICAgICAgICBpZiAoIXRsc19sb2FkX2NlcnRzKHRsc19jdHgsdGxzX2Nv biwwKSkKLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIFVTRV9DRVJUX0NC ICovCi0gICAgICAgICAgICBpZiAoU1NMX2Nvbm5lY3QodGxzX2NvbikgPD0gMCkgewotICAgICAg ICAgICAgICAgIGludCBsZW47Ci0gICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp IHsKLSAgICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBGQUlMRURdIik7Ci0gICAg ICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0gICAgICAgICAgICAg ICAgICAgIGxlbiA9IEJJT19yZWFkKGJpb19lcnIsc3NsX2VycixTU0xfRVJSX0JGU1opOwotICAg ICAgICAgICAgICAgICAgICBzc2xfZXJyW2xlbiA8IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9F UlJfQkZTWl0gPSAnXDAnOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoc3NsX2Vycik7Ci0g ICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdmVyYm9zaXR5ICkgewotICAgICAgICAgICAgICAg ICAgICBwcmludGYoIltUTFMgLSBGQUlMRURdXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICBF UlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwotICAgICAgICAgICAgICAgICAgICBsZW4gPSBCSU9f cmVhZChiaW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKLSAgICAgICAgICAgICAgICAgICAg c3NsX2VycltsZW4gPCBTU0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsK LSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKHNzbF9lcnIpOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl90bHNfbmVnb3RpYXRlIiwiW1RMUyAt IEZBSUxFRF0iLDApOwotICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1Qp OwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg ICAgdGxzX2FjdGl2ZV9mbGFnID0gMTsKLSAgICAgICAgICAgIGlmICggIXNzbF9jZXJ0c29rX2Zs YWcgJiYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfUEVFUikKLSAgICAgICAgICAgICAg ICAgJiYgIXRsc19pc19rcmI1KDApKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBwcm1wdFsxMDI0 XTsKLSAgICAgICAgICAgICAgICBzdWJqZWN0ID0gc3NsX2dldF9zdWJqZWN0X25hbWUodGxzX2Nv bik7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXN1YmplY3QpIHsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQp Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9k ZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExT IC0gRkFJTEVEXSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0 eSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gRkFJTEVEXVxy XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdv dGlhdGUiLCJbVExTIC0gRkFJTEVEXSIsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRo X2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAt MTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IGludCBvazsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gdXFfb2soIldhcm5pbmc6IFNl cnZlciBkaWRuJ3QgcHJvdmlkZSBhIGNlcnRpZmljYXRlIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkNvbnRpbnVlPyAoWS9OKSIsIDMsIE5VTEwsIDApOwotICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm ICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9k ZWJ1ZygiW1RMUyAtIEZBSUxFRF0iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl IGlmICggdmVyYm9zaXR5ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJbVExTIC0gRkFJTEVEXVxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2tfdG5fdGxzX25l Z290aWF0ZSIsIltUTFMgLSBGQUlMRURdIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNzbF9jaGVja19zZXJ2ZXJfbmFtZSh0 bHNfY29uLCBzekhvc3ROYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8 IGRlYnNlcykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gRkFJTEVE XSIpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIEZBSUxFRF1cclxuIik7Ci0gICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiY2tfdG5f dGxzX25lZ290aWF0ZSIsIltUTFMgLSBGQUlMRURdIiwwKTsKLSAgICAgICAgICAgICAgICAgICAg YXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAt MTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgg c3NsX2RlYnVnX2ZsYWcgJiYgc3NsX2ZpbmlzaGVkX21lc3NhZ2VzKSB7Ci0gICAgICAgICAgICAg ICAgY2hhciBtc2dbMzJdOwotICAgICAgICAgICAgICAgIGludCBpLCBsZW49MzI7Ci0gICAgICAg ICAgICAgICAgZXh0ZXJuIGNoYXIgdG5fbXNnW10sIGhleGJ1ZltdOwotCi0gICAgICAgICAgICAg ICAgdG5fbXNnWzBdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBsZW4gPSBzc2xfZ2V0X2NsaWVu dF9maW5pc2hlZChtc2csbGVuKTsKLSAgICAgICAgICAgICAgICBpZiAoIGxlbiA+IDAgKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGZvciAoIGk9MDtpPGxlbjtpKysgKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBzcHJpbnRmKGhleGJ1ZiwiJTAyWCAiLG1zZ1tpXSk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLGhleGJ1ZixUTl9NU0dfTEVOKTsKLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIlRMUyBjbGllbnQgZmlu aXNoZWQ6ICVzXHJcbiIsdG5fbXNnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgdG5fbXNnWzBdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBsZW4gPSBzc2xfZ2V0X3NlcnZl cl9maW5pc2hlZChtc2csbGVuKTsKLSAgICAgICAgICAgICAgICBpZiAoIGxlbiA+IDAgKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGZvciAoIGk9MDtpPGxlbjtpKysgKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBzcHJpbnRmKGhleGJ1ZiwiJTAyWCAiLG1zZ1tpXSk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLGhleGJ1ZixUTl9NU0dfTEVOKTsKLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIlRMUyBzZXJ2ZXIgZmlu aXNoZWQ6ICVzXHJcbiIsdG5fbXNnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9 Ci0KLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgICAgIHRu X2RlYnVnKCJbVExTIC0gT0tdIik7Ci0gICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkK LSAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBPS11cclxuIik7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJja190bl90bHNfbmVnb3RpYXRlIiwiW1RMUyAtIE9LXSIsMCk7Ci0KLSAgICAg ICAgICAgIHNzbF9kaXNwbGF5X2Nvbm5lY3RfZGV0YWlscyh0bHNfY29uLDAsdmVyYm9zaXR5KTsK LSAgICAgICAgfQotICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICB9Ci0g ICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKLSAgICBhdXRoX3NzbF92YWxpZCA9IDE7Ci0gICAgcmV0 dXJuKDApOwotfQotCi1pbnQKLWNrX3NzbF9pbmNvbWluZyhmZCkgaW50IGZkOwotewotICAgIC8q IGlmIHdlIGFyZSBub3QgcnVubmluZyBpbiBkZWJ1ZyB0aGVuIGFueSBlcnJvcgotICAgICogc3R1 ZmYgZnJvbSBTU0wgZGVidWcgKm11c3QqIG5vdCBnbyBkb3duCi0gICAgKiB0aGUgc29ja2V0ICh3 aGljaCAwLDEsMiBhcmUgYWxsIHBvaW50aW5nIHRvIGJ5Ci0gICAgKiBkZWZhdWx0KQotICAgICov Ci0KLSAgICBpbnQgdGltbyA9IDIwMDA7Ci0KLSAgICBzZXR2ZXJib3NpdHkoKTsKLSAgICBpZiAo ICFja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAg LyogZG8gdGhlIFNTTCBzdHVmZiBub3cgLi4uIGJlZm9yZSB3ZSBwbGF5IHdpdGggcHR5J3MgKi8K LSAgICBTU0xfc2V0X2ZkKHNzbF9jb24sZmQpOwotICAgIFNTTF9zZXRfZmQodGxzX2NvbixmZCk7 Ci0KLSAgICBpZiAodGxzX29ubHlfZmxhZykgewotICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNl cykKLSAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXSIpOwot ICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAgICAgICAgICAgIHByaW50ZigiW1RMUyAt IGhhbmRzaGFrZSBzdGFydGluZ11cclxuIik7Ci0gICAgICAgIGRlYnVnKEYxMTAsImNrX3NzbF9p bmNvbWluZyIsIltUTFMgLSBoYW5kc2hha2Ugc3RhcnRpbmddIiwwKTsKLQotICAgICAgICAvKiBo bW0gLi4uIG9ubHkgd2hlbiBydW5uaW5nIHRhbGtpbmcgdG8gdGhpbmdzIGxpa2UKLSAgICAgICAg KiBodHRwcyBzZXJ2ZXJzIHNob3VsZCB3ZSBoaXQgdGhpcyBjb2RlIGFuZCB0aGVuCi0gICAgICAg ICogd2UgcmVhbGx5IGRvbid0IGNhcmUgKndobyogd2UgdGFsayB0byA6LSkKLSAgICAgICAgKi8K LSAgICAgICAgaWYgKFNTTF9hY2NlcHQodGxzX2NvbikgPD0gMCkgewotICAgICAgICAgICAgY2hh ciBlcnJidWZbMTAyNF07Ci0KLSAgICAgICAgICAgIHNwcmludGYoZXJyYnVmLCJbVExTIC0gU1NM X2FjY2VwdCBlcnJvcjogJXMiLAotICAgICAgICAgICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmlu ZyhFUlJfZ2V0X2Vycm9yKCksTlVMTCkpOwotCi0gICAgICAgICAgICBpZiAodG5fZGViIHx8IGRl YnNlcykKLSAgICAgICAgICAgICAgICB0bl9kZWJ1ZyhlcnJidWYpOwotICAgICAgICAgICAgZWxz ZSBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzXHJcbiIs ZXJyYnVmKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQotICAgICAgICAgICAg ICAgIHByaW50ZigiW1RMUyAtIFNTTF9hY2NlcHQgZXJyb3JdXHJcbiIpOwotCi0gICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJja19zc2xfaW5jb21pbmciLGVycmJ1ZiwwKTsKLSAgICAgICAgICAgIHJl dHVybigtMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodG5fZGViIHx8IGRl YnNlcykKLSAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIE9LXSIpOwotICAgICAgICAg ICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0g T0tdXHJcbiIpOwotICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfc3NsX2luY29taW5nIiwiW1RM UyAtIE9LXSIsMCk7Ci0gICAgICAgICAgICB0bHNfYWN0aXZlX2ZsYWcgPSAxOwotICAgICAgICB9 Ci0gICAgfSBlbHNlIGlmIChzc2xfb25seV9mbGFnKSB7Ci0gICAgICAgIGlmICh0bl9kZWIgfHwg ZGVic2VzKQotICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBoYW5kc2hha2Ugc3RhcnRpbmdd Iik7Ci0gICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQotICAgICAgICAgICAgcHJpbnRmKCJb U1NMIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXVxyXG4iKTsKLSAgICAgICAgZGVidWcoRjExMCwiY2tf c3NsX2luY29taW5nIiwiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGluZ10iLDApOwotCi0gICAgICAg IC8qIGhtbSAuLi4gb25seSB3aGVuIHJ1bm5pbmcgdGFsa2luZyB0byB0aGluZ3MgbGlrZQotICAg ICAgICAgKiBodHRwcyBzZXJ2ZXJzIHNob3VsZCB3ZSBoaXQgdGhpcyBjb2RlIGFuZCB0aGVuCi0g ICAgICAgICAqIHdlIHJlYWxseSBkb24ndCBjYXJlICp3aG8qIHdlIHRhbGsgdG8gOi0pCi0gICAg ICAgICAqLwotICAgICAgICBpZiAoU1NMX2FjY2VwdChzc2xfY29uKSA8PSAwKSB7Ci0gICAgICAg ICAgICBjaGFyIGVycmJ1ZlsxMDI0XTsKLQotICAgICAgICAgICAgc3ByaW50ZihlcnJidWYsIltT U0wgLSBTU0xfYWNjZXB0IGVycm9yOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICBFUlJfZXJy b3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSxOVUxMKSk7Ci0KLSAgICAgICAgICAgIGlmICh0bl9k ZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgICAgIHRuX2RlYnVnKGVycmJ1Zik7Ci0gICAgICAg ICAgICBlbHNlIGlmICggc3NsX2RlYnVnX2ZsYWcgKQotICAgICAgICAgICAgICAgIHByaW50Zigi JXNcclxuIixlcnJidWYpOwotICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAg ICAgICAgICAgICAgcHJpbnRmKCJbU1NMIC0gU1NMX2FjY2VwdCBlcnJvcl1cclxuIik7Ci0KLSAg ICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3NzbF9pbmNvbWluZyIsZXJyYnVmLDApOwotICAgICAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh0bl9k ZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gT0tdIik7Ci0g ICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAgICAgICAgICAgIHByaW50ZigiW1NT TCAtIE9LXVxyXG4iKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9pcyIsIltTU0wgLSBP S10iLDApOwotICAgICAgICAgICAgc3NsX2FjdGl2ZV9mbGFnID0gMTsKLSAgICAgICAgfQotICAg IH0KLSAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgewotICAgICAg ICBYNTA5ICpwZWVyOwotICAgICAgICBjaGFyIHN0clsyNTZdLCAqdWlkPU5VTEw7Ci0KLSAgICAg ICAgLyogbm93IGNoZWNrIHRvIHNlZSB0aGF0IHdlIGdvdCBleGFjdGx5IHdoYXQgd2UKLSAgICAg ICAgICogd2FudGVkIGZyb20gdGhlIGNhbGxlciAuLi4gaWYgYSBjZXJ0aWZpY2F0ZSBpcwotICAg ICAgICAgKiByZXF1aXJlZCB0aGVuIHdlIG1ha2UgMTAwJSBzdXJlIHRoYXQgd2Ugd2VyZQotICAg ICAgICAgKiBnaXZlbiBvbiBkdXJpbmcgdGhlIGhhbmRzaGFrZSAoYXMgaXQgaXMgYW4gb3B0aW9u YWwKLSAgICAgICAgICogcGFydCBvZiBTU0wgYW5kIFRMUykKLSAgICAgICAgICovCi0KLSAgICAg ICAgaWYgKCB0bHNfYWN0aXZlX2ZsYWcgKSB7Ci0gICAgICAgICAgICBwZWVyPVNTTF9nZXRfcGVl cl9jZXJ0aWZpY2F0ZSh0bHNfY29uKTsKLSAgICAgICAgfSBlbHNlIGlmICggc3NsX2FjdGl2ZV9m bGFnICkgewotICAgICAgICAgICAgcGVlcj1TU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoc3NsX2Nv bik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocGVlciA9PSBOVUxMKSB7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTAwLCJTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoKSA9PSBOVUxMIiwiIiwwKTsK LSAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotCi0gICAgICAgICAgICBp ZiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCkgewot ICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgICAgICAg ICB0bl9kZWJ1ZygiW1NTTC9UTFMgLSBwZWVyIGNoZWNrIGZhaWxlZF0iKTsKLSAgICAgICAgICAg ICAgICBlbHNlIGlmIChzc2xfZGVidWdfZmxhZykgewotICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIltTU0wvVExTIC0gcGVlciBjaGVjayBmYWlsZWRdXHJcbiIpOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLAotICAgICAgICAgICAgICAgICAgICAgICAi Y2tfdG5fdGxzX25lZ290aWF0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICJbU1NML1RMUyAt IHBlZXIgY2hlY2sgZmFpbGVkXSIsCi0gICAgICAgICAgICAgICAgICAgICAgIDAKLSAgICAgICAg ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAvKiBMT0dHSU5HIFJFUVVJUkVEIEhF UkUhICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotCi0gICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJTU0xfZ2V0X3BlZXJfY2VydGlm aWNhdGUoKSAhPSBOVUxMIiwiIiwwKTsKLSAgICAgICAgICAgIFg1MDlfTkFNRV9nZXRfdGV4dF9i eV9OSUQoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHBlZXIpLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTklEX2NvbW1vbk5hbWUsc3RyLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMjU2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gY29tbW9uTmFtZT0lc11cclxu IixzdHIpOwotCi0gICAgICAgICAgICBYNTA5X05BTUVfZ2V0X3RleHRfYnlfTklEKFg1MDlfZ2V0 X3N1YmplY3RfbmFtZShwZWVyKSwKLSNpZm5kZWYgTklEX3g1MDBVbmlxdWVJZGVudGlmaWVyCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSURfdW5pcXVlSWRlbnRpZmll ciwKLSNlbHNlICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSURf eDUwMFVuaXF1ZUlkZW50aWZpZXIsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0ciwyNTYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICBwcmludGYoIltUTFMgLSB1bmlxdWVJZGVudGlmaWVyPSVzXVxy XG4iLHN0cik7Ci0KLSAgICAgICAgICAgIC8qIFRyeSB0byBkZXRlcm1pbmUgdXNlciBuYW1lICov Ci0gICAgICAgICAgICB1aWQgPSB0bHNfdXNlcmlkX2Zyb21fY2xpZW50X2NlcnQodGxzX2Nvbik7 Ci0gICAgICAgICAgICBpZiAoIHVpZCApIHsKLSAgICAgICAgICAgICAgICAvKiBUaGlzIGNvZGUg aXMgdmVyeSBxdWVzdGlvbmFibGUuCi0gICAgICAgICAgICAgICAgKiBIb3cgc2hvdWxkIGl0IGJl aGF2ZT8KLSAgICAgICAgICAgICAgICAqIFRoZSBjbGllbnQgaGFzIHByZXNlbnRlZCBhIGNlcnRp ZmljYXRlIHRoYXQKLSAgICAgICAgICAgICAgICAqIGNvbnRhaW5zIGEgdXNlcm5hbWUuICBXZSBo YXZlIHZhbGlkYXRlZCB0aGUKLSAgICAgICAgICAgICAgICAqIGNlcnRpZmljYXRlIGJ1dCB3ZSBk byBub3QgYXV0b21hdGljYWxseQotICAgICAgICAgICAgICAgICogbG9nIHRoZSB1c2VyIGluIHVu bGVzcyB0aGVyZSBpcyBhIC50bHNsb2dpbgotICAgICAgICAgICAgICAgICogZmlsZS4KLSAgICAg ICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWVSZXF1 ZXN0ZWQsdWlkLFVJREJVRkxFTik7Ci0jaWZkZWYgQ0tfTE9HSU4KLSAgICAgICAgICAgICAgICBp ZiAoenZ1c2VyKHVpZCkpCi0gICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9W QUxJRCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAg ICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHN6VXNlck5hbWVSZXF1ZXN0ZWRb MF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybigwKTsgIC8qIHN1Y2Nl c3MgKi8KLX0KLQotaW50Ci1ja19zc2xfb3V0Z29pbmcoZmQpIGludCBmZDsKLXsKLSAgICBpbnQg dGltbyA9IDIwMDA7Ci0KLSAgICBzZXR2ZXJib3NpdHkoKTsKLSAgICBpZiAoICFja19zc2xlYXlf aXNfaW5zdGFsbGVkKCkgKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgLyogYmluZCBpbiB0 aGUgbmV0d29yayBkZXNjcmlwdG9yICovCi0gICAgU1NMX3NldF9mZChzc2xfY29uLGZkKTsKLSAg ICBTU0xfc2V0X2ZkKHRsc19jb24sZmQpOwotCi0gICAgLyogSWYgd2UgYXJlIGRvaW5nIHJhdyBU TFMgdGhlbiBzdGFydCBpdCBub3cgLi4uICovCi0gICAgaWYgKHRsc19vbmx5X2ZsYWcpIHsKLSNp Zm5kZWYgVVNFX0NFUlRfQ0IKLSAgICAgICAgaWYgKCF0bHNfbG9hZF9jZXJ0cyh0bHNfY3R4LHRs c19jb24sMCkpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3NzbF9vdXRnb2luZyIsInRs c19sb2FkX2NlcnRzKCkgZmFpbGVkIiwwKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBVU0VfQ0VSVF9DQiAqLwotICAgICAgICBpZiAodG5fZGViIHx8IGRl YnNlcykKLSAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXSIp OwotICAgICAgICBlbHNlIGlmICh2ZXJib3NpdHkpCi0gICAgICAgICAgICBwcmludGYoIltUTFMg LSBoYW5kc2hha2Ugc3RhcnRpbmddXHJcbiIpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJja19zc2xf b3V0Z29pbmciLCJbVExTIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXSIsMCk7Ci0gICAgICAgIGlmIChT U0xfY29ubmVjdCh0bHNfY29uKSA8PSAwKSB7Ci0gICAgICAgICAgICBjaGFyIGVycmJ1ZlsxMDI0 XTsKLQotICAgICAgICAgICAgc3ByaW50ZihlcnJidWYsIltUTFMgLSBTU0xfY29ubmVjdCBlcnJv cjogJXMiLAotICAgICAgICAgICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vy cm9yKCksTlVMTCkpOwotCi0gICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAg ICAgICAgICAgICB0bl9kZWJ1ZyhlcnJidWYpOwotICAgICAgICAgICAgZWxzZSBpZiAoIHNzbF9k ZWJ1Z19mbGFnICkKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzXHJcbiIsZXJyYnVmKTsKLQot ICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAgICAgdG5fZGVi dWcoIltUTFMgLSBGQUlMRURdIik7Ci0gICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkK LSAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBGQUlMRURdXHJcbiIpOwotICAgICAgICAg ICAgZGVidWcoRjExMCwiY2tfc3NsX291dGdvaW5nIiwiW1RMUyAtIEZBSUxFRF0iLDApOwotICAg ICAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgIHRsc19hY3RpdmVfZmxhZyA9IDE7Ci0gICAgICAgICAgICBpZiAo ICFzc2xfY2VydHNva19mbGFnICYmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX1BFRVIp ICYmIAotICAgICAgICAgICAgICAgICAhdGxzX2lzX2tyYjUoMCkgKSB7Ci0gICAgICAgICAgICAg ICAgY2hhciAqc3ViamVjdCA9IHNzbF9nZXRfc3ViamVjdF9uYW1lKHRsc19jb24pOwotCi0gICAg ICAgICAgICAgICAgaWYgKCFzdWJqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzc2xf dmVyaWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKQotICAgICAgICAg ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNl cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIEZBSUxFRF0i KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIEZBSUxFRF1cclxuIik7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl90bHNfbmVnb3RpYXRlIiwiW1RM UyAtIEZBSUxFRF0iLDApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVk KEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgcHJt cHRbMTAyNF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2s7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBvayA9IHVxX29rKCJXYXJuaW5nOiBTZXJ2ZXIgZGlkbid0IHByb3ZpZGUgYSBj ZXJ0aWZpY2F0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250aW51 ZT8gKFkvTikiLCAzLCBOVUxMLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb2sp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBGQUlMRURdIik7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIEZBSUxFRF1cclxuIik7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExTIC0gRkFJTEVE XSIsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JF SkVDVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg fSBlbHNlIGlmIChzc2xfY2hlY2tfc2VydmVyX25hbWUodGxzX2Nvbiwgc3pIb3N0TmFtZSkpIHsK LSAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAg ICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIEZBSUxFRF0iKTsKLSAgICAgICAgICAgICAgICAg ICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo IltUTFMgLSBGQUlMRURdXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExTIC0g RkFJTEVEXSIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpF Q1QpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAg ICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBPS10iKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFx dWlldCkKLQkJcHJpbnRmKCJbVExTIC0gT0tdXHJcbiIpOwotICAgICAgICAgICAgZGVidWcoRjEx MCwiY2tfc3NsX291dGdvaW5nIiwiW1RMUyAtIE9LXSIsMCk7Ci0gICAgICAgICAgICBzc2xfZGlz cGxheV9jb25uZWN0X2RldGFpbHModGxzX2NvbiwwLHZlcmJvc2l0eSk7Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgLyogaWYgd2UgYXJlIGRvaW5nIHJhdyBTU0wgdGhlbiBzdGFydCBpdCBub3cgLi4u ICovCi0gICAgZWxzZSBpZiAoc3NsX29ubHlfZmxhZykgewotI2lmbmRlZiBVU0VfQ0VSVF9DQgot ICAgICAgICBpZiAoIXRsc19sb2FkX2NlcnRzKHNzbF9jdHgsc3NsX2NvbiwwKSkKLSAgICAgICAg ICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogVVNFX0NFUlRfQ0IgKi8KLSAgICAgICAgaWYgKHRu X2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIGhhbmRzaGFrZSBz dGFydGluZ10iKTsKLSAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAgICAgICAgICBw cmludGYoIltTU0wgLSBoYW5kc2hha2Ugc3RhcnRpbmddXHJcbiIpOwotICAgICAgICBkZWJ1ZyhG MTEwLCJja19zc2xfb3V0Z29pbmciLCJbU1NMIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXSIsMCk7Ci0g ICAgICAgIGlmIChTU0xfY29ubmVjdChzc2xfY29uKSA8PSAwKSB7Ci0gICAgICAgICAgICBpZiAo IHNzbF9kZWJ1Z19mbGFnICkgewotICAgICAgICAgICAgICAgIGNoYXIgZXJyYnVmWzEwMjRdOwot Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihlcnJidWYsIltTU0wgLSBTU0xfY29ubmVjdCBlcnJv cjogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dl dF9lcnJvcigpLE5VTEwpKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzXHJcbiIsZXJyYnVm KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAg ICAgICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gRkFJTEVEXSIpOwotICAgICAgICAgICAgZWxz ZSBpZiAoIHZlcmJvc2l0eSApCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJbU1NMIC0gRkFJTEVE XVxyXG4iKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3NzbF9vdXRnb2luZyIsIltTU0wg LSBGQUlMRURdIiwwKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICBzc2xfYWN0aXZlX2ZsYWcgPSAxOwotCi0gICAgICAgICAgICBpZiAoICFz c2xfY2VydHNva19mbGFnICYmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX1BFRVIpICYm Ci0gICAgICAgICAgICAgICAgICF0bHNfaXNfa3JiNSgwKSkgewotICAgICAgICAgICAgICAgIGNo YXIgKnN1YmplY3QgPSBzc2xfZ2V0X3N1YmplY3RfbmFtZShzc2xfY29uKTsKLQotICAgICAgICAg ICAgICAgIGlmICghc3ViamVjdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3NsX3Zlcmlm eV9mbGFnICYgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCkKLSAgICAgICAgICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBGQUlMRURdIik7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIltTU0wgLSBGQUlMRURdXHJcbiIpOwotICAgICAgICAg ICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltTU0wgLSBG QUlMRURdIiwwKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRI X1JFSkVDVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHBybXB0WzEw MjRdOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9rOwotICAgICAgICAgICAgICAgICAg ICAgICAgb2sgPSB1cV9vaygiV2FybmluZzogU2VydmVyIGRpZG4ndCBwcm92aWRlIGEgY2VydGlm aWNhdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGludWU/IChZ L04pIiwgMywgTlVMTCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9rKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gRkFJTEVEXSIpOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIltTU0wgLSBGQUlMRURdXHJcbiIpOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJja190bl90bHNfbmVnb3RpYXRlIiwiW1NTTCAtIEZBSUxFRF0iLDAp OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1Qp OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAoc3NsX2NoZWNrX3NlcnZlcl9uYW1lKHNzbF9jb24sIHN6SG9zdE5hbWUpKSB7Ci0gICAg ICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgICAgICAg ICAgICAgdG5fZGVidWcoIltTU0wgLSBGQUlMRURdIik7Ci0gICAgICAgICAgICAgICAgICAgIGVs c2UgaWYgKCB2ZXJib3NpdHkgKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbU1NM IC0gRkFJTEVEXVxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwgImNrX3Ru X3Rsc19uZWdvdGlhdGUiLCJbU1NMIC0gRkFJTEVEXSIsMCk7Ci0gICAgICAgICAgICAgICAgICAg IGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g LTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRu X2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBPS10iKTsK LQkgICAgZWxzZSBpZiAoIXF1aWV0KQotCSAgICAgICAgcHJpbnRmKCJbU1NMIC0gT0tdXHJcbiIp OwotICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfc3NsX291dGdvaW5nIiwiW1NTTCAtIE9LXSIs MCk7Ci0gICAgICAgICAgICBzc2xfZGlzcGxheV9jb25uZWN0X2RldGFpbHMoc3NsX2NvbiwwLHZl cmJvc2l0eSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKDApOyAgLyogc3VjY2VzcyAq LwotfQotCi0jaWZuZGVmIE5PSFRUUAotaW50Ci1ja19zc2xfaHR0cF9jbGllbnQoZmQsIGhvc3Ru YW1lKSBpbnQgZmQ7IGNoYXIgKiBob3N0bmFtZTsKLXsKLSAgICBpbnQgdGltbyA9IDIwMDA7Ci0K LSAgICBpZiAoICFja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgKQotICAgICAgICByZXR1cm4oLTEp OwotCi0gICAgc2V0dmVyYm9zaXR5KCk7Ci0KLSAgICAvKiBiaW5kIGluIHRoZSBuZXR3b3JrIGRl c2NyaXB0b3IgKi8KLSAgICBTU0xfc2V0X2ZkKHRsc19odHRwX2NvbixmZCk7Ci0KLSAgICAvKiBJ ZiB3ZSBhcmUgZG9pbmcgcmF3IFRMUyB0aGVuIHN0YXJ0IGl0IG5vdyAuLi4gKi8KLSAgICBpZiAo MSkgewotI2lmbmRlZiBVU0VfQ0VSVF9DQgotICAgICAgICBpZiAoIXRsc19sb2FkX2NlcnRzKHRs c19odHRwX2N0eCx0bHNfaHR0cF9jb24sMCkpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImNr X3NzbF9odHRwX2NsaWVudCIsInRsc19sb2FkX2NlcnRzKCkgZmFpbGVkIiwwKTsKLSAgICAgICAg ICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBVU0VfQ0VSVF9DQiAqLwotICAg ICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0g aGFuZHNoYWtlIHN0YXJ0aW5nXSIpOwotICAgICAgICBlbHNlIGlmICh2ZXJib3NpdHkpCi0gICAg ICAgICAgICBwcmludGYoIltUTFMgLSBoYW5kc2hha2Ugc3RhcnRpbmddXHJcbiIpOwotICAgICAg ICBkZWJ1ZyhGMTEwLCJja19zc2xfb3V0Z29pbmciLCJbVExTIC0gaGFuZHNoYWtlIHN0YXJ0aW5n XSIsMCk7Ci0gICAgICAgIGlmIChTU0xfY29ubmVjdCh0bHNfaHR0cF9jb24pIDw9IDApIHsKLSAg ICAgICAgICAgIGNoYXIgZXJyYnVmWzEwMjRdOwotCi0gICAgICAgICAgICBzcHJpbnRmKGVycmJ1 ZiwiW1RMUyAtIFNTTF9jb25uZWN0IGVycm9yOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICBF UlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSxOVUxMKSk7Ci0KLSAgICAgICAgICAgIGlm ICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgICAgIHRuX2RlYnVnKGVycmJ1Zik7Ci0g ICAgICAgICAgICBlbHNlIGlmICggc3NsX2RlYnVnX2ZsYWcgKQotICAgICAgICAgICAgICAgIHBy aW50ZigiJXNcclxuIixlcnJidWYpOwotCi0gICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNl cykKLSAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIEZBSUxFRF0iKTsKLSAgICAgICAg ICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQotICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAt IEZBSUxFRF1cclxuIik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19zc2xfaHR0cF9jbGll bnQiLCJbVExTIC0gRkFJTEVEXSIsMCk7Ci0gICAgICAgICAgICBodHRwX2Nsb3NlKCk7Ci0gICAg ICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGxzX2h0 dHBfYWN0aXZlX2ZsYWcgPSAxOwotICAgICAgICAgICAgaWYgKCAhc3NsX2NlcnRzb2tfZmxhZyAm JiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9QRUVSKSAmJgotICAgICAgICAgICAgICAg ICAhdGxzX2lzX2tyYjUoMykgKSB7Ci0gICAgICAgICAgICAgICAgY2hhciAqc3ViamVjdCA9IHNz bF9nZXRfc3ViamVjdF9uYW1lKHRsc19odHRwX2Nvbik7Ci0KLSAgICAgICAgICAgICAgICBpZiAo IXN1YmplY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNzbF92ZXJpZnlfZmxhZyAmIFNT TF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gRkFJTEVEXSIpOwotICAgICAgICAgICAg ICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCJbVExTIC0gRkFJTEVEXVxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExTIC0gRkFJTEVEXSIsMCk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHBybXB0WzEwMjRdOwotICAg ICAgICAgICAgICAgICAgICAgICAgaW50IG9rOwotICAgICAgICAgICAgICAgICAgICAgICAgb2sg PSB1cV9vaygiV2FybmluZzogU2VydmVyIGRpZG4ndCBwcm92aWRlIGEgY2VydGlmaWNhdGUiLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGludWU/IChZL04pIiwgMywg TlVMTCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gRkFJTEVEXSIpOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBGQUlMRURdXHJcbiIpOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJja190bl90bHNfbmVnb3RpYXRlIiwiW1RMUyAtIEZBSUxFRF0iLDApOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3Ns X2NoZWNrX3NlcnZlcl9uYW1lKHRsc19odHRwX2NvbiwgaG9zdG5hbWUpKSB7Ci0gICAgICAgICAg ICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgICAgICAgICAgICAg dG5fZGVidWcoIltUTFMgLSBGQUlMRURdIik7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg KCB2ZXJib3NpdHkgKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gRkFJ TEVEXVxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICJja190bl90bHNfbmVnb3RpYXRlIiwiW1RMUyAtIEZBSUxFRF0iLDAp OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfQotCi0gICAgICAgICAgICBwcmludGYoIltUTFMgLSBPS11cclxuIik7Ci0gICAg ICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAgICAgICAgICAgICB0bl9kZWJ1Zygi W1RMUyAtIE9LXSIpOwotICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfc3NsX291dGdvaW5nIiwi W1RMUyAtIE9LXSIsMCk7Ci0gICAgICAgICAgICBzc2xfZGlzcGxheV9jb25uZWN0X2RldGFpbHMo dGxzX2h0dHBfY29uLDAsdmVyYm9zaXR5KTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4o MCk7ICAvKiBzdWNjZXNzICovCi19Ci0jZW5kaWYgLyogTk9IVFRQICovCi1pbnQKLWNrX3NzbF9y ZW5lZ290aWF0ZV9jaXBoZXJzKCkKLXsKLQotICAgIGlmICggIWNrX3NzbGVheV9pc19pbnN0YWxs ZWQoKSApCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIGlmICggIXNzdGVsbmV0ICkKLSAgICAg ICAgcmV0dXJuKDApOwotCi0gICAgaWYgKCBzc2xfYWN0aXZlX2ZsYWcgKQotICAgICAgICByZXR1 cm4gU1NMX3JlbmVnb3RpYXRlKHNzbF9jb24pOwotICAgIGVsc2UgaWYgKCB0bHNfYWN0aXZlX2Zs YWcgKQotICAgICAgICByZXR1cm4gU1NMX3JlbmVnb3RpYXRlKHRsc19jb24pOwotICAgIHJldHVy bigwKTsKLX0KLQotI2lmZGVmIE5UCi1pbnQgCi1ja19YNTA5X3NhdmVfY2VydF90b191c2VyX3N0 b3JlKFg1MDkgKmNlcnQpCi17Ci0jaWZkZWYgWDUwOVYzX0VYVF9EVU1QX1VOS05PV04KLSAgICBj aGFyIHBhdGhbQ0tNQVhQQVRIXTsKLSAgICBjaGFyIGhhc2hbMTZdOwotICAgIGNoYXIgKiBHZXRB cHBEYXRhKGludCk7Ci0gICAgQklPICogb3V0PU5VTEw7Ci0KLSAgICBpZiAoIGNlcnQgPT0gTlVM TCApCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIHNwcmludGYoaGFzaCwiJTA4bHgiLFg1MDlf c3ViamVjdF9uYW1lX2hhc2goY2VydCkpOwotICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILEdl dEFwcERhdGEoMCksImtlcm1pdCA5NS9jZXJ0cy8iLAotICAgICAgICAgICAgIGhhc2gsIi4wIik7 Ci0KLSAgICAKLSAgICBvdXQ9QklPX25ldyhCSU9fc19maWxlKCkpOwotICAgIGlmIChvdXQgPT0g TlVMTCkKLSAgICB7Ci0gICAgICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0gICAgICAg IHJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKEJJT193cml0ZV9maWxlbmFtZShvdXQscGF0aCkg PD0gMCkgewotICAgICAgICBwZXJyb3IocGF0aCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9 Ci0KLSAgICBYNTA5X3ByaW50X2V4KG91dCwgY2VydCwgWE5fRkxBR19TRVBfTVVMVElMSU5FLCBY NTA5VjNfRVhUX0RVTVBfVU5LTk9XTik7Ci0gICAgaWYgKCFQRU1fd3JpdGVfYmlvX1g1MDkob3V0 LGNlcnQpKSB7Ci0gICAgICAgIEJJT19wcmludGYoYmlvX2VyciwidW5hYmxlIHRvIHdyaXRlIGNl cnRpZmljYXRlXG4iKTsKLSAgICAgICAgRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKLSAgICAg ICAgQklPX2ZyZWVfYWxsKG91dCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgQklP X2ZyZWVfYWxsKG91dCk7Ci0gICAgcmV0dXJuKDEpOwotI2Vsc2UgLyogWDUwOVYzX0VYVF9EVU1Q X1VOS05PV04gKi8KLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogWDUwOVYzX0VYVF9EVU1QX1VO S05PV04gKi8KLX0KLSNlbmRpZiAvKiBOVCAqLwotCi0jaWZuZGVmIE9TMgotLyogVGhlIGZvbGxv d2luZyBmdW5jdGlvbiBzaG91bGQgYmUgcmVwbGFjZWQgYnkgaW5zdGl0dXRpb24gc3BlY2lmaWMg Ki8KLS8qIGNvZGUgdGhhdCB3aWxsIGNvbnZlcnQgYW4gWDUwOSBjZXJ0IHN0cnVjdHVyZSB0byBh IHVzZXJpZCBmb3IgdGhlICovCi0vKiBwdXJwb3NlcyBvZiBjbGllbnQgdG8gaG9zdCBsb2dpbi4g IFRoZSBleGFtcGxlIGNvZGUgaW5jbHVkZWQgICAgICAqLwotLyogc2ltcGx5IHJldHVybnMgdGhl IFVJRCBmaWVsZCBvZiB0aGUgU3ViamVjdCBpZiBpdCBleGlzdHMuICAgICAgICAgKi8KLQotLyog WDUwOV90b191c2VyKCkgcmV0dXJucyAwIGlmIHZhbGlkIHVzZXJpZCBpbiAndXNlcmlkJywgZWxz ZSAtMSAqLwotaW50Ci1YNTA5X3RvX3VzZXIoWDUwOSAqcGVlcl9jZXJ0LCBjaGFyICp1c2VyaWQs IGludCBsZW4pCi17Ci0jaWZkZWYgWDUwOV9VSURfVE9fVVNFUgotICAgIC8qIEJFR0lOIEVYQU1Q TEUgKi8KLSAgICBpbnQgZXJyOwotCi0gICAgaWYgKCEocGVlcl9jZXJ0ICYmIHVzZXJpZCkgfHwg bGVuIDw9IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHVzZXJpZFswXSA9ICdcMCc7Ci0g ICAgZGVidWcoRjExMCwiWDUwOV90b191c2VyKCkgc3ViamVjdCIsCi0gICAgICAgICAgIFg1MDlf TkFNRV9vbmVsaW5lKFg1MDlfZ2V0X3N1YmplY3RfbmFtZShwZWVyX2NlcnQpLE5VTEwsMCksMCk7 Ci0KLSAgICAvKiB1c2VyaWQgaXMgaW4gY2VydCBzdWJqZWN0IC9VSUQgKi8KLSAgICBlcnIgPSBY NTA5X05BTUVfZ2V0X3RleHRfYnlfTklEKFg1MDlfZ2V0X3N1YmplY3RfbmFtZShwZWVyX2NlcnQp LAotI2lmbmRlZiBOSURfeDUwMFVuaXF1ZUlkZW50aWZpZXIKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOSURfdW5pcXVlSWRlbnRpZmllciwKLSNlbHNlCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTklEX3g1MDBVbmlxdWVJZGVudGlmaWVyLAotI2Vu ZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcmlkLCBsZW4pOwot Ci0gICAgZGVidWcoRjExMSwiWDUwOV90b191c2VyKCkgdXNlcmlkIix1c2VyaWQsZXJyKTsKLSAg ICBpZiAoZXJyID4gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvKiBFTkQgRVhBTVBMRSAq LwotI2Vsc2UgLyogWDUwOV9VSURfVE9fVVNFUiAqLwotI2lmZGVmIFg1MDlfU1VCSkVDVF9BTFRf TkFNRV9UT19VU0VSCi0gICAgLyogQkVHSU4gRVhBTVBMRSAqLwotICAgIGludCBpOwotICAgIFg1 MDlfRVhURU5TSU9OICpleHQgPSBOVUxMOwotICAgIFNUQUNLX09GKEdFTkVSQUxfTkFNRSkgKmlh bHQgPSBOVUxMOwotICAgIEdFTkVSQUxfTkFNRSAqZ2VuID0gTlVMTDsKLSAgICBjaGFyIGVtYWls WzI1Nl07Ci0KLSAgICBpZiAoIShwZWVyX2NlcnQgJiYgdXNlcmlkKSB8fCBsZW4gPD0gMCkKLSAg ICAgICAgcmV0dXJuIC0xOwotCi0gICAgdXNlcmlkWzBdID0gJ1wwJzsKLSAgICBlbWFpbFswXSA9 ICdcMCc7Ci0gICAgZGVidWcoRjExMCwiWDUwOV90b191c2VyKCkgc3ViamVjdCIsCi0gICAgICAg ICAgIFg1MDlfTkFNRV9vbmVsaW5lKFg1MDlfZ2V0X3N1YmplY3RfbmFtZShwZWVyX2NlcnQpLE5V TEwsMCksMCk7Ci0KLSAgICBpZiAoKGkgPSBYNTA5X2dldF9leHRfYnlfTklEKHBlZXJfY2VydCwg TklEX3N1YmplY3RfYWx0X25hbWUsIC0xKSk8MCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlm ICghKGV4dCA9IFg1MDlfZ2V0X2V4dChwZWVyX2NlcnQsIGkpKSkKLSAgICAgICAgcmV0dXJuIC0x OwotICAgIFg1MDlWM19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9ucygpOwotICAgIGlmICghKGlhbHQg PSBYNTA5VjNfRVhUX2QyaShleHQpKSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGZvciAoaSA9 IDA7IGkgPCBza19HRU5FUkFMX05BTUVfbnVtKGlhbHQpOyBpKyspIHsKLSAgICAgICAgZ2VuID0g c2tfR0VORVJBTF9OQU1FX3ZhbHVlKGlhbHQsIGkpOwotICAgICAgICBpZiAoZ2VuLT50eXBlID09 IEdFTl9ETlMpIHsKLSAgICAgICAgICAgIGlmICghZ2VuLT5kLmlhNSB8fCAhZ2VuLT5kLmlhNS0+ bGVuZ3RoKQotCSAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHN0cmxlbihnZW4tPmQuaWE1 LT5kYXRhKSAhPSBnZW4tPmQuaWE1LT5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAvKiBJZ25v cmluZyBJQTVTdHJpbmcgY29udGFpbmluZyBudWxsIGNoYXJhY3RlciAqLwotICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCBnZW4tPmQuaWE1 LT5sZW5ndGggKyAxID4gc2l6ZW9mKGVtYWlsKSApIHsKLSAgICAgICAgICAgICAgICBnb3RvIGNs ZWFudXA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZW1jcHkoZW1haWwsIGdlbi0+ZC5p YTUtPmRhdGEsIGdlbi0+ZC5pYTUtPmxlbmd0aCk7Ci0gICAgICAgICAgICBlbWFpbFtnZW4tPmQu aWE1LT5sZW5ndGhdID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot ICBjbGVhbnVwOgotICAgIFg1MDlWM19FWFRfY2xlYW51cCgpOwotICAgIGlmIChpYWx0KQotICAg ICAgICBza19HRU5FUkFMX05BTUVfZnJlZShpYWx0KTsKLQotICAgIGRlYnVnKEYxMTAsIlg1MDlf dG9fdXNlcigpIGVtYWlsIixlbWFpbCwwKTsKLQotICAgIGlmICggZW1haWxbMF0gKSB7Ci0gICAg ICAgIGNoYXIgKiBkb21haW4gPSBOVUxMOwotCi0gICAgICAgIC8qIEZpbmQgZG9tYWluICovCi0g ICAgICAgIGZvciAoIGk9MCA7IGVtYWlsW2ldIDsgaSsrICkgewotICAgICAgICAgICAgaWYgKCBl bWFpbFtpXSA9PSAnQCcgKSB7Ci0gICAgICAgICAgICAgICAgZW1haWxbaV0gPSAnXDAnOwotICAg ICAgICAgICAgICAgIGRvbWFpbiA9ICZlbWFpbFtpKzFdOwotICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBkb21haW4gKSB7Ci0g ICAgICAgICAgICAvKiBYWFggLSBQdXQgY29kZSB0byBWZXJpZnkgZG9tYWluIGhlcmUgKi8KLQot ICAgICAgICAgICAgaWYgKCAvKiBkb21haW4gaXMgb2theSAqLyAxICkKLSAgICAgICAgICAgICAg ICBja3N0cm5jcHkodXNlcmlkLGVtYWlsLGxlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy ZXR1cm4odXNlcmlkWzBdID8gMCA6IC0xKTsKLSAgICAvKiBFTkQgRVhBTVBMRSAqLwotI2VuZGlm IC8qIFg1MDlfU1VCSkVDVF9BTFRfTkFNRV9UT19VU0VSICovCi0jZW5kaWYgLyogWDUwOV9VSURf VE9fVVNFUiAqLwotICAgIHJldHVybiAtMTsKLX0KLQotLyogVGhlIGZvbGxvd2luZyBmdW5jdGlv biBzaG91bGQgYmUgcmVwbGFjZWQgYnkgaW5zdGl0dXRpb24gc3BlY2lmaWMgKi8KLS8qIGNvZGUg dGhhdCB3aWxsIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGUgY29tYmluYXRpb24gb2YgdGhl ICAgICovCi0vKiBwcm92aWRlZCBYNTA5IGNlcnRpZmljYXRlIGFuZCB1c2VybmFtZSBpcyB2YWxp ZCBmb3IgYXV0b21hdGljICAgICAqLwotLyogbG9naW4uICAgV2hlcmVhcyBYNTA5X3RvX3VzZXIo KSBpcyB1c2VkIHRvIHByb3ZpZGUgYXV0aGVudGljYXRpb24gKi8KLS8qIG9mIHRoZSB1c2VyLCB0 aGUgWDUwOV91c2Vyb2soKSBmdW5jdGlvbiBpcyB1c2VkIHRvIHByb3ZpZGUgICAgICAgICovCi0v KiBhdXRob3JpemF0aW9uLiAgVGhlIGNlcnRpZmljYXRlIHBhc3NlZCBpbnRvIFg1MDlfdXNlcm9r KCkgZG9lcyAgICAqLwotLyogbmVlZCB0byBtYXAgdG8gYSB1c2VyaWQ7IG5vciB3b3VsZCB0aGUg dXNlcmlkIGl0IHdvdWxkIG1hcCB0byAgICAgKi8KLS8qIG5lZWQgdG8gbWF0Y2ggdGhlIHVzZXJp ZCBwcm92aWRlZCB0byB0aGUgZnVuY3Rpb24uICBUaGVyZSBhcmUgICAgICovCi0vKiBudW1lcm91 cyBjaXJjdW1zdGFuY2VzIGluIHdoaWNoIGl0IGlzIGJlbmVmaWNpYWwgdG8gaGF2ZSB0aGUgYWJp bGl0eSAqLwotLyogZm9yIG11bHRpcGxlIHVzZXJzIHRvIGdhaW4gYWNjZXNzIHRvIGEgY29tbW9u IGFjY291bnQgc3VjaCBhcyAgICAgKi8KLS8qICdyb290JyBvbiBVbml4OyBvciBhIGNsYXNzIGFj Y291bnQgb24gYSB3ZWIgc2VydmVyLiAgSW4gVW5peCB3ZSAgICovCi0vKiBpbXBsZW1lbnQgdGhp cyBjYXBhYmlsaXR5IHdpdGggdGhlIH51c2VyaWQvLnRsc2xvZ2luIGZpbGUgd2hpY2ggICAqLwot LyogYSBsaXN0IG9mIFg1MDkgY2VydGlmaWNhdGVzIHdoaWNoIG1heSBiZSB1c2VkIHRvIGFjY2Vz cyB0aGUgICAgICAgKi8KLS8qIGFjY291bnQgJ3VzZXJpZCcuICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLS8qIFg1MDlfdG9fdXNlcigpIHJldHVy bnMgMCBpZiBhY2Nlc3MgaXMgZGVuaWVkOyAxIGlzIGFjY2VzcyBpcyBwZXJtaXR0ZWQgKi8KLWlu dAotWDUwOV91c2Vyb2soWDUwOSAqIHBlZXJfY2VydCwgY29uc3QgY2hhciAqIHVzZXJpZCkKLXsK LSNpZm5kZWYgVk1TCi0gICAgLyogY2hlY2sgaWYgY2xpZW50cyBjZXJ0IGlzIGluICJ1c2VyIidz IH4vLnRsc2xvZ2luIGZpbGUgKi8KLSAgICBjaGFyIGJ1Zls1MTJdOwotICAgIGludCByID0gMDsK LSAgICBGSUxFICpmcDsKLSAgICBzdHJ1Y3QgcGFzc3dkICpwd2Q7Ci0gICAgWDUwOSAqZmlsZV9j ZXJ0OwotCi0gICAgaWYgKCBwZWVyX2NlcnQgPT0gTlVMTCApCi0gICAgICAgIHJldHVybigwKTsK LQotICAgIGlmICghKHB3ZCA9IGdldHB3bmFtKHVzZXJpZCkpKQotICAgICAgIHJldHVybiAwOwot ICAgIGlmIChzdHJsZW4ocHdkLT5wd19kaXIpID4gNTAwKQotICAgICAgIHJldHVybigwKTsKLSAg ICBzcHJpbnRmKGJ1ZiwgIiVzLy50bHNsb2dpbiIsIHB3ZC0+cHdfZGlyKTsKLQotICAgIGlmICgh KGZwID0gZm9wZW4oYnVmLCAiciIpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgd2hpbGUgKCFy ICYmIChmaWxlX2NlcnQgPSBQRU1fcmVhZF9YNTA5KGZwLCBOVUxMLCBOVUxMLCBOVUxMKSkpIHsK LSAgICAgICAgaWYgKCFBU04xX1NUUklOR19jbXAocGVlcl9jZXJ0LT5zaWduYXR1cmUsIGZpbGVf Y2VydC0+c2lnbmF0dXJlKSkKLSAgICAgICAgICAgIHIgPSAxOwotICAgICAgICBYNTA5X2ZyZWUo ZmlsZV9jZXJ0KTsKLSAgICB9Ci0gICAgZmNsb3NlKGZwKTsKLSAgICByZXR1cm4ocik7Ci0jZWxz ZSAvKiBWTVMgKi8KLSAgICAvKiBOZWVkIHRvIGltcGxlbWVudCBhbiBhcHByb3ByaWF0ZSBmdW5j dGlvbiBmb3IgVk1TICovCi0gICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIFZNUyAqLwotfQotI2Vu ZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENLX1NTTCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tfc3NsLmggYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrX3NzbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA5N2I2NTQ0Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2tfc3NsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoKLSAg QyBLIF8gUyBTIEwgLiBIIC0tICBPcGVuU1NMIEludGVyZmFjZSBIZWFkZXIgZm9yIEMtS2VybWl0 Ci0KLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA1LAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlh IFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNl cnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5 cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJt aXNzaW9ucy4KLQotICAgIEF1dGhvcjogIEplZmZyZXkgRSBBbHRtYW4gKGphbHRtYW5Ac2VjdXJl LWVuZHBvaW50cy5jb20pCi0gICAgICAgICAgICAgICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5l dyBZb3JrIENpdHkKLSovCi0KLSNpZmRlZiBDS19TU0wKLSNpZm5kZWYgQ0tfQU5TSUMKLSNkZWZp bmUgTk9QUk9UTwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0KLSNpZmRlZiBDT01NRU5UICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOb3QgZm9yIEMtS2VybWl0IDcuMSAqLwotI2lmZGVmIEtS QjUKLSNpZm5kZWYgTk9TU0xLNQotI2lmbmRlZiBTU0xfS1JCNQotI2RlZmluZSBTU0xfS1JCNQot I2VuZGlmIC8qIFNTTF9LUkI1ICovCi0jZW5kaWYgLyogTk9TU0xLNSAqLwotI2VuZGlmIC8qIEtS QjUgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgWkxJQgot I2RlZmluZSBaTElCCi0jZW5kaWYgLyogWkxJQiAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZk ZWYgWkxJQgotI2luY2x1ZGUgPG9wZW5zc2wvY29tcC5oPgotI2VuZGlmIC8qIFpMSUIgKi8KLS8q IFdlIHBsYWNlIHRoZSBmb2xsb3dpbmcgdG8gYXZvaWQgbG9hZGluZyBvcGVuc3NsL21kYzIuaCBz aW5jZSBpdCAKLSAqIHJlbGllcyBvbiB0aGUgT3BlblNTTCBkZXMuaC4gIFNpbmNlIHdlIGRvIG5v dCBuZWVkIHRoZSBNREMyIAotICogZGVmaW5pdGlvbnMgdGhlcmUgaXMgbm8gcmVhc29uIHRvIGhh dmUgaXQgaW5jbHVkZWQgYnkgb3BlbnNzbC9ldnAuaAotICovCi0jZGVmaW5lIE9QRU5TU0xfTk9f TURDMgotI2lmZGVmIE9QRU5TU0xfMTAwCi0jZGVmaW5lIE9QRU5TU0xfMDk4Ci0jZW5kaWYJLyog T1BFTlNTTF8xMDAgKi8KLSNpZmRlZiBPUEVOU1NMXzA5OAotI2RlZmluZSBPUEVOU1NMXzA5Nwot I2VuZGlmIC8qIE9QRU5TU0xfMDk4ICovCi0jaWZkZWYgQ0tfREVTCi0jaW5jbHVkZSA8b3BlbnNz bC9kZXMuaD4KLSNlbmRpZgkvKiBDS19ERVMgKi8KLSNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgot I2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0j aW5jbHVkZSA8b3BlbnNzbC94NTA5X3ZmeS5oPgotI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0j aW5jbHVkZSA8b3BlbnNzbC9wZW0uaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0jaW5jbHVk ZSA8b3BlbnNzbC9ibG93ZmlzaC5oPgotI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSNpbmNsdWRl IDxvcGVuc3NsL3JjNC5oPgotI2luY2x1ZGUgPG9wZW5zc2wvY2FzdC5oPgotI2luY2x1ZGUgPG9w ZW5zc2wvZHNhLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSNpbmNsdWRlIDxvcGVuc3Ns L21kNS5oPgotI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KLSNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSNpZmRlZiBTU0xfS1JCNQotI2luY2x1ZGUg PG9wZW5zc2wva3NzbC5oPgotI2VuZGlmIC8qIFNTTF9LUkI1ICovCi0KLWV4dGVybiBCSU8gKmJp b19lcnI7Ci1leHRlcm4gU1NMICpzc2xfY29uOwotZXh0ZXJuIFNTTF9DVFggKnNzbF9jdHg7Ci1l eHRlcm4gaW50IHNzbF9kZWJ1Z19mbGFnOwotZXh0ZXJuIGludCBzc2xfb25seV9mbGFnOwotZXh0 ZXJuIGludCBzc2xfYWN0aXZlX2ZsYWc7Ci1leHRlcm4gaW50IHNzbF92ZXJpZnlfZmxhZzsKLWV4 dGVybiBpbnQgc3NsX3ZlcmJvc2VfZmxhZzsKLWV4dGVybiBpbnQgc3NsX2NlcnRzb2tfZmxhZzsK LWV4dGVybiBpbnQgc3NsX2R1bW15X2ZsYWc7Ci1leHRlcm4gaW50IHNzbF92ZXJpZnlfZGVwdGg7 Ci0KLWV4dGVybiBjaGFyICpzc2xfcnNhX2NlcnRfZmlsZTsKLWV4dGVybiBjaGFyICpzc2xfcnNh X2NlcnRfY2hhaW5fZmlsZTsKLWV4dGVybiBjaGFyICpzc2xfcnNhX2tleV9maWxlOwotZXh0ZXJu IGNoYXIgKnNzbF9kc2FfY2VydF9maWxlOwotZXh0ZXJuIGNoYXIgKnNzbF9kc2FfY2VydF9jaGFp bl9maWxlOwotZXh0ZXJuIGNoYXIgKnNzbF9kaF9rZXlfZmlsZTsKLWV4dGVybiBjaGFyICpzc2xf Y2lwaGVyX2xpc3Q7Ci1leHRlcm4gY2hhciAqc3NsX2NybF9maWxlOwotZXh0ZXJuIGNoYXIgKnNz bF9jcmxfZGlyOwotZXh0ZXJuIGNoYXIgKnNzbF92ZXJpZnlfZmlsZTsKLWV4dGVybiBjaGFyICpz c2xfdmVyaWZ5X2RpcjsKLWV4dGVybiBjaGFyICpzc2xfZGhfcGFyYW1fZmlsZTsKLWV4dGVybiBj aGFyICpzc2xfcm5kX2ZpbGU7Ci0KLWV4dGVybiBTU0xfQ1RYICp0bHNfY3R4OwotZXh0ZXJuIFNT TCAqdGxzX2NvbjsKLWV4dGVybiBpbnQgdGxzX29ubHlfZmxhZzsKLWV4dGVybiBpbnQgdGxzX2Fj dGl2ZV9mbGFnOwotZXh0ZXJuIGludCB4NTA5X2NlcnRfdmFsaWQ7Ci1leHRlcm4gWDUwOV9TVE9S RSAqY3JsX3N0b3JlOwotCi1leHRlcm4gaW50IHNzbF9yYXdfZmxhZzsKLWV4dGVybiBpbnQgdGxz X3Jhd19mbGFnOwotCi0jaWZuZGVmIE5PSFRUUAotZXh0ZXJuIFNTTF9DVFggKnRsc19odHRwX2N0 eDsKLWV4dGVybiBTU0wgKnRsc19odHRwX2NvbjsKLWV4dGVybiBpbnQgdGxzX2h0dHBfYWN0aXZl X2ZsYWc7Ci0jZW5kaWYgLyogTk9IVFRQICovCi0KLWV4dGVybiBpbnQgc3NsX2luaXRpYWxpemVk OwotCi1fUFJPVE9UWVAoVk9JRCBzc2xfb25jZV9pbml0LCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50 IHNzbF90bl9pbml0LChpbnQpKTsKLV9QUk9UT1RZUChpbnQgc3NsX2h0dHBfaW5pdCwoY2hhciAq KSk7Ci1fUFJPVE9UWVAoaW50IGNrX3NzbF9odHRwX2NsaWVudCwoaW50LGNoYXIgKikpOwotX1BS T1RPVFlQKGludCBzc2xfZGlzcGxheV9jb25uZWN0X2RldGFpbHMsKFNTTCAqLGludCxpbnQpKTsK LV9QUk9UT1RZUChpbnQgc3NsX3NlcnZlcl92ZXJpZnlfY2FsbGJhY2ssKGludCwgWDUwOV9TVE9S RV9DVFggKikpOwotX1BST1RPVFlQKGludCBzc2xfY2xpZW50X3ZlcmlmeV9jYWxsYmFjaywoaW50 LCBYNTA5X1NUT1JFX0NUWCAqKSk7Ci1fUFJPVE9UWVAoaW50IHNzbF9yZXBseSwoaW50LCB1bnNp Z25lZCBjaGFyICosIGludCkpOwotX1BST1RPVFlQKGludCBzc2xfaXMsKHVuc2lnbmVkIGNoYXIg KiwgaW50KSk7Ci1fUFJPVE9UWVAoaW50IGNrX3NzbF9pbmNvbWluZywoaW50KSk7Ci1fUFJPVE9U WVAoaW50IGNrX3NzbF9vdXRnb2luZywoaW50KSk7Ci1fUFJPVE9UWVAoaW50IHRsc19pc191c2Vy X3ZhbGlkLChTU0wgKiwgY29uc3QgY2hhciAqKSk7Ci1fUFJPVE9UWVAoY2hhciAqIHNzbF9nZXRf ZG5zTmFtZSwoU1NMICopKTsKLV9QUk9UT1RZUChjaGFyICogc3NsX2dldF9jb21tb25OYW1lLChT U0wgKikpOwotX1BST1RPVFlQKGNoYXIgKiBzc2xfZ2V0X2lzc3Vlcl9uYW1lLChTU0wgKikpOwot X1BST1RPVFlQKGNoYXIgKiBzc2xfZ2V0X3N1YmplY3RfbmFtZSwoU1NMICopKTsKLV9QUk9UT1RZ UChpbnQgc3NsX2dldF9jbGllbnRfZmluaXNoZWQsKGNoYXIgKiwgaW50KSk7Ci1fUFJPVE9UWVAo aW50IHNzbF9nZXRfc2VydmVyX2ZpbmlzaGVkLChjaGFyICosIGludCkpOwotX1BST1RPVFlQKGlu dCBzc2xfcGFzc3dkX2NhbGxiYWNrLChjaGFyICosIGludCwgaW50LCBWT0lEICopKTsKLV9QUk9U T1RZUChWT0lEIHNzbF9jbGllbnRfaW5mb19jYWxsYmFjaywoY29uc3QgU1NMICosaW50LCBpbnQp KTsKLV9QUk9UT1RZUChpbnQgc3NsX2Fub255bW91c19jaXBoZXIsKFNTTCAqIHNzbCkpOwotX1BS T1RPVFlQKGludCB0bHNfbG9hZF9jZXJ0cywoU1NMX0NUWCAqIGN0eCwgU1NMICogY29uLCBpbnQg c2VydmVyKSk7Ci1fUFJPVE9UWVAoaW50IHNzbF92ZXJpZnlfY3JsLChpbnQsIFg1MDlfU1RPUkVf Q1RYICopKTsKLV9QUk9UT1RZUChpbnQgdGxzX2lzX2tyYjUsKGludCkpOwotX1BST1RPVFlQKGlu dCBYNTA5X3VzZXJvaywoWDUwOSAqLGNvbnN0IGNoYXIgKikpOwotX1BST1RPVFlQKGludCBja19Y NTA5X3NhdmVfY2VydF90b191c2VyX3N0b3JlLChYNTA5ICopKTsKLS8qIFNNUyAyMDA3LzAyLzE1 ICovCi1fUFJPVE9UWVAoaW50IHNzbF9jaGVja19zZXJ2ZXJfbmFtZSwoU1NMICogc3NsLCBjaGFy ICogaG9zdG5hbWUpKTsKLSNpZmRlZiBPUzIKLSNpbmNsdWRlICJja29zc2xjLmgiCi0jaW5jbHVk ZSAiY2tvc3NsLmgiCi0jZW5kaWYgLyogT1MyICovCi0KLSNkZWZpbmUgU1NMX0NMSUVOVCAwCi0j ZGVmaW5lIFNTTF9TRVJWRVIgMQotI2RlZmluZSBTU0xfSFRUUCAgIDIKLQotI2RlZmluZSBTU0xf RVJSX0JGU1ogNDA5NgotCi0jaWZkZWYgU1NMX0tSQjUKLSNkZWZpbmUgREVGQVVMVF9DSVBIRVJf TElTVCAiSElHSDpNRURJVU06TE9XOitLUkI1OitBREg6K0VYUCIKLSNlbHNlCi0jZGVmaW5lIERF RkFVTFRfQ0lQSEVSX0xJU1QgIkhJR0g6TUVESVVNOkxPVzorQURIOitFWFAiCi0jZW5kaWYgLyog U1NMX0tSQjUgKi8KLSNlbmRpZiAvKiBDS19TU0wgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrYWFhYS50eHQgYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrYWFhYS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDMzNWVjN2QuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja2FhYWEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzgwICswLDAgQEAKLWNr YWFhYS50eHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEp1bHkgMjAxMQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDLUtFUk1JVCBW RVJTSU9OIDkuMC4zMDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9WRVJWSUVXIE9G IEZJTEVTCi0KLSAgICAgICAgICAgICAgIENvbW11bmljYXRpb25zIHNvZnR3YXJlIGZvciBVTklY IGFuZCAoT3BlbilWTVMuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgQW5kIGluIGZvcm1lciB2 ZXJzaW9ucyBhbHNvIGZvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyYXR1cyBWT1Ms IEFPUy9WUywgUU5YLAotICAgICAgICAgICAgIFBsYW4gOSwgT1MtOSwgQXBvbGxvIEFlZ2lzLCBh bmQgdGhlIENvbW1vZG9yZSBBbWlnYS4KLSAgICAgICAgICAgICAgICAgICAgICBUaGUgQXBwbGUg TWFjaW50b3NoLCB0aGUgQXRhcmkgU1QuCi0KLSAgICAgICAgICAgICAgICAgIFRoZSBLZXJtaXQg UHJvamVjdCAtIENvbHVtYmlhIFVuaXZlcnNpdHkKLQotICAgICAgICAgICAgICBodHRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS8gLSBrZXJtaXRAY29sdW1iaWEuZWR1Ci0KLQotICBDb3B5cmlnaHQg KEMpIDE5ODUsIDIwMTEsCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0 aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBD LUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGluIHRo ZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotICAgIEJS SUVGTFk6IEMtS2VybWl0IDkuMCBoYXMgdGhlIE9QRU4gU09VUkNFIDMtY2xhdXNlIE1PRElGSUVE IEJTRCBMSUNFTlNFLgotCi0KLURPQ1VNRU5UQVRJT04KLQotICBDLUtlcm1pdCBpcyBkb2N1bWVu dGVkIGluIHRoZSBib29rICJVc2luZyBDLUtlcm1pdCIsIFNlY29uZCBFZGl0aW9uLCBieQotICBG cmFuayBkYSBDcnV6IGFuZCBDaHJpc3RpbmUgTS4gR2lhbm9uZSwgRGlnaXRhbCBQcmVzcywgSVNC TiAxLTU1NTU4LTE2NC0xLAotICBzdXBwbGVtZW50ZWQgYnkgV2ViLWJhc2VkIHVwZGF0ZXMgZm9y IEMtS2VybWl0IDcuMCwgOC4wLCBhbmQgOS4wLgotCi1QTEFURk9STVMKLSAgICAgICAgICAgICAg ICAgICBTZWN1cml0eQotICAgTmFtZSAgICAgICAgICAgIEluY2x1ZGVkICAgTGFzdCBVcGRhdGVk Ci0KLSAgIFVuaXggICAgICAgICAgICAgICBZZXMgICAgIDkuMC4zMDAgIDMwIEp1biAyMDExCi0g ICAoT3BlbilWTVMgICAgICAgICAgWWVzICAgICA5LjAuMzAwICAzMCBKdW4gMjAxMQotICAgV2lu ZG93cyAoSzk1KSAgICAgIFllcyAgICAgOC4wLjIwOCAgMTQgTWFyIDIwMDMgIChLOTUgMi4xKQot ICAgT1MvMiAoSzk1KSAgICAgICAgIFllcyAgICAgOC4wLjIwOCAgMTQgTWFyIDIwMDMgIChLOTUg Mi4xKQotICAgREcgQU9TL1ZTICAgICAgICAgIE5vICAgICAgNy4wLjE5NiAgIDEgSmFuIDIwMDAK LSAgIFN0cmF0dXMgVk9TICAgICAgICBObyAgICAgIDcuMC4xOTYgICAxIEphbiAyMDAwCi0gICBC ZWxsIFBsYW4gOSAgICAgICAgTm8gICAgICA3LjAuMTk2ICAgMSBKYW4gMjAwMAotICAgTWljcm93 YXJlIE9TLTkgICAgIE5vICAgICAgNy4wLjE5NiAgIDEgSmFuIDIwMDAKLSAgIENvbW1vZG9yZSBB bWlnYSAgICBObyAgICAgIDcuMC4xOTYgICAxIEphbiAyMDAwCi0gICBNYWNpbnRvc2ggICAgICAg ICAgTm8gICAgICA1QSgxOTApICAxNiBBdWcgMTk5NCAgKE1hYyBLZXJtaXQgMC45OTEpCi0gICBB dGFyaSBTVCAgICAgICAgICAgTm8gICAgICA1QSgxODkpICAzMCBKdW4gMTk5MwotCi1RVUlDSyBT VEFSVCBGT1IgRlRQIFVTRVJTCi0KLSAgSWYgeW91IGhhdmUgYSBXZWIgYnJvd3NlciwgZ28gdG86 Ci0KLSAgICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0KLSAg QW5kIHRha2UgaXQgZnJvbSB0aGVyZS4gIE90aGVyd2lzZS4uLgotCi0gIFRoZSBkZWZpbml0aXZl IEZUUCBzb3VyY2UgZm9yIEtlcm1pdCBzb2Z0d2FyZSBpcyBrZXJtaXQuY29sdW1iaWEuZWR1Lgot ICBLZXJtaXQgc29mdHdhcmUgb2J0YWluZWQgZnJvbSBvdGhlciBGVFAgc2l0ZXMgaXMgbm90IG5l Y2Vzc2FyaWx5IGNvbXBsZXRlCi0gIG9yIHVwIHRvIGRhdGUsIGFuZCBtYXkgaGF2ZSBiZWVuIG1v ZGlmaWVkLgotCi1DLUtlcm1pdCBmb3IgVU5JWCBjb21wdXRlcnMgdGhhdCBoYXZlIGEgQyBjb21w aWxlciBhbmQgJ21ha2UnIHByb2dyYW06Ci0KLSAgRGlyZWN0b3J5IGtlcm1pdC9hcmNoaXZlcywg YmluYXJ5IG1vZGUsIGZpbGUgY2t1MjExLnRhci5aIG9yIGNrdTIxMS50YXIuZ3oKLQotICBUaGlz IGlzIGEgY29tcHJlc3NlZCB0YXIgYXJjaGl2ZSBvZiBVTklYIEMtS2VybWl0IHNvdXJjZSBjb2Rl LCBtYWtlZmlsZSwgYW5kCi0gIG90aGVyIGZpbGVzLiAgSXQgdW5wYWNrcyBpbnRvIGl0cyBjdXJy ZW50IGRpcmVjdG9yeSwgc28gZG93bmxvYWQgaXQgaW50byBhCi0gIGZyZXNoIGRpcmVjdG9yeS4g IFRyYW5zZmVyIGluIGJpbmFyeSBtb2RlLCB1bmNvbXByZXNzIChvciBndW56aXApLCB1bnRhciAo dGFyCi0gIHh2ZiBja3UyMTEudGFyKSwgYW5kIHRoZW4gZ2l2ZSB0aGUgYXBwcm9wcmlhdGUgIm1h a2UiIGNvbW1hbmQgdG8gYnVpbGQgZm9yCi0gIHlvdXIgVU5JWCBzeXN0ZW07IHJlYWQgdGhlIGNv bW1lbnRzIGluIHRoZSBtYWtlZmlsZSBhbmQgY2t1aW5zLnR4dCBmb3IKLSAgZnVydGhlciBpbmZv LgotCi1DLUtlcm1pdCBmb3IgVk1TOgotCi0gIElmIHlvdSBoYXZlIFZNUyBVTlpJUCwgZ2V0IHRo ZSBmaWxlIGtlcm1pdC9hcmNoaXZlcy9ja3YyMTEuemlwIGluIGJpbmFyeQotICBtb2RlLCB1bnpp cCAtYWEsIGFuZCBidWlsZCB3aXRoIENLVktFUi5DT00gKEBja3ZrZXIuY29tKS4gIFJlYWQgdGhl IGNvbW1lbnRzCi0gIGF0IHRoZSB0b3Agb2YgQ0tWS0VSLkNPTSBmb3IgZGV0YWlscy4KLQotT3Ro ZXJzOiAgSW4gdGhlIGtlcm1pdC9mIG9yIGtlcm1pdC90ZXN0IGRpcmVjdG9yaWVzIHVuZGVyIHRo ZSBhcHByb3ByaWF0ZQotcHJlZml4ZXMsIGV4cGxhaW5lZCBiZWxvdy4KLQotCi1JTlNUQUxMQVRJ T04KLQotSW5zdGFsbGF0aW9uIHByb2NlZHVyZXMgZGVwZW5kIG9uIHRoZSBvcGVyYXRpbmcgc3lz dGVtLiAgUGxlYXNlIHJlYWQgdGhlCi1DSz9JTlMuVFhULCBpZiBhbnksIGZpbGUgZm9yIHlvdXIg b3BlcmF0aW5nIHN5c3RlbSAoPz1VIGZvciBVTklYLCBWIGZvciBWTVMsCi1ldGMpLiAgUGxlYXNl IG5vdGUgdGhlIG5hbWluZyBhbmQgcGxhY2VtZW50IGZvciB0aGUgaW5pdGlhbGl6YXRpb24gZmls ZXM6Ci0KLSAgQ0tFUk1JVC5JTkkKLSAgICAua2VybXJjIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJl Y3RvcnkgKFVOSVgpLgotICAgIENLRVJNSVQuSU5JIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3Rv cnkgKG90aGVyIE9TJ3MpLgotCi0KLSAgQ0tFUk1PRC5JTkkKLSAgICAubXlrZXJtcmMgaW4gdGhl IHVzZXIncyBob21lIGRpcmVjdG9yeSAoVU5JWCkuCi0gICAgQ0tFUk1PRC5JTkkgZWxzZXdoZXJl LgotCi0gIERJQUxJTkcgRElSRUNUT1JJRVMKLSAgICBEaWFsaW5nIGRpcmVjdG9yeSBmaWxlcyBj YW4gYmUgc3lzdGVtLXdpZGUsIHBlci1ncm91cCwgb3IgcGVyLXVzZXIsIG9yCi0gICAgYW55IGNv bWJpbmF0aW9uLiAgRm9yIGV4YW1wbGUsIHRoZXJlIGNhbiBiZSBhIGNvcnBvcmF0ZSB3aWRlIGRp cmVjdG9yeQotICAgIHNoYXJlZCBieSBhbGwgdXNlcnMsIGEgc3VwcGxlbWVudGFsIGRpcmVjdG9y eSBmb3IgZWFjaCBkaXZpc2lvbiBvcgotICAgIGRlcGFydG1lbnQsIGFuZCBhIHBlcnNvbmFsIGRp cmVjdG9yeSBmb3IgZWFjaCB1c2VyLiAgU2ltcGx5IGJlIHN1cmUgdGhlCi0gICAgZGlhbGluZyBk aXJlY3RvcnkgZmlsZXMgYXJlIGlkZW50aWZpZWQgYSBTRVQgRElBTCBESVJFQ1RPUlkgY29tbWFu ZCBpbgotICAgIHRoZSB1c2VyJ3MgKG9yIHRoZSBzeXN0ZW0td2lkZSkgQy1LZXJtaXQgaW5pdGlh bGl6YXRpb24gZmlsZSwgb3IgaW4gdGhlCi0gICAgZW52aXJvbm1lbnQgdmFyaWFibGUgKGxvZ2lj YWwgbmFtZSwgc3ltYm9sKSBLX0RJQUxfRElSRUNUT1JZLiAgKFRoZQotICAgIHN0YW5kYXJkIGlu aXRpYWxpemF0aW9uIGZpbGUgbG9va3MgYnkgZGVmYXVsdCBpbiB0aGUgdXNlcidzIGhvbWUgb3Ig bG9naW4KLSAgICBkaXJlY3RvcnkuKSAgV2hlbiBpbnN0YWxsaW5nIEMtS2VybWl0IG9uIG11bHRp dXNlciBwbGF0Zm9ybXMgZnJvbSB3aGljaAotICAgIHVzZXJzIHdpbGwgZGlhbCBvdXQsIHlvdSBj YW4gYWxzbyBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBhcmVhCi0gICAgY29kZSwgY291 bnRyeSBjb2RlLCBhbmQgdGhlIHZhcmlvdXMgZGlhbGluZyBwcmVmaXhlcyBhcyBkZXNjcmliZWQg b24gcGFnZQotICAgIDQ3OCBvZiAiVXNpbmcgQy1LZXJtaXQiIChzZWNvbmQgZWRpdGlvbiksIHNv IHVzZXJzIGRvbid0IGhhdmUgdG8gd29ycnkKLSAgICBhYm91dCBkZWZpbmluZyB0aGVzZSBpdGVt cyB0aGVtc2VsdmVzLiAgIE5ldHdvcmsgZGlyZWN0b3JpZXMgYW5kIHNlcnZpY2UKLSAgICBkaXJl Y3RvcmllcyBjYW4gYWxzbyBiZSBzZXQgdXAgaW4gYSBzaW1pbGFyIG1hbm5lci4KLQotICBET0NV TUVOVEFUSU9OCi0gICAgSW4gVU5JWCwgdGhlIGdlbmVyYWwgQy1LZXJtaXQgbWFuIHBhZ2UgKG9y IG9uZSBvZiB0aGUgdmVyc2lvbnMgdGFpbG9yZWQKLSAgICBmb3IgYSBzcGVjaWZpYyBwbGF0Zm9y bSwgbGlrZSBIUC1VWCBvciBTb2xhcmlzKSBzaG91bGQgYmUgaW5zdGFsbGVkIGluCi0gICAgdGhl IGFwcHJvcHJpYXRlIHBsYWNlLiAgSW4gVk1TLCB0aGUgVk1TIGhlbHAgdG9waWMgKENLVktFUi5I TFApIHNob3VsZAotICAgIGJlIGluc3RhbGxlZCBhcyBkZXNjcmliZWQgaW4gQ0tWSU5TLlRYVC4g IFBsYWluLXRleHQgZG9jdW1lbnRhdGlvbiBzdWNoCi0gICAgYXMgQ0tFUk1JVDIuVFhUIHNob3Vs ZCBiZSBwdXQgaW4gd2hhdGV2ZXIgcGxhY2UgcGVvcGxlIGFyZSBhY2N1c3RvbWVkCi0gICAgdG8g bG9va2luZy4KLQotRklMRVMgQU5EIEZJTEUgTkFNSU5HIENPTlZFTlRJT05TCi0KLUMtS2VybWl0 IGlzIGEgZmFtaWx5IG9mIEtlcm1pdCBwcm9ncmFtcyBmb3IgbWFueSBkaWZmZXJlbnQgY29tcHV0 ZXIgc3lzdGVtcy4KLVRoZSBwcm9ncmFtIHNoYXJlcyBhIGNvbW1vbiBzZXQgb2Ygc3lzdGVtLWlu ZGVwZW5kZW50IGZpbGUgdHJhbnNmZXIgcHJvdG9jb2wKLW1vZHVsZXMsIHdyaXR0ZW4gaW4gdGhl IEMgbGFuZ3VhZ2UuICBTeXN0ZW0tZGVwZW5kZW50IG9wZXJhdGlvbnMgYXJlIGNvbGxlY3RlZAot aW50byBzeXN0ZW0tc3BlY2lmaWMgbW9kdWxlcyBmb3IgZWFjaCBzeXN0ZW0uCi0KLUMtS2VybWl0 IGZpbGUgbmFtZXMgYWxsIHN0YXJ0IHdpdGggdGhlIGxldHRlcnMgIkNLIiwgZm9sbG93ZWQgYnkg YSBzaW5nbGUKLWxldHRlciBpbmRpY2F0aW5nIHRoZSBzdWJncm91cC4gIFdoZW4gcmVmZXJyaW5n IHRvIHRoZXNlIGZpbGVzIGluIHRoZSBVTklYLAotQU9TL1ZTLCBvciBWT1MgZW52aXJvbm1lbnRz LCB1c2UgbG93ZXJjYXNlIGxldHRlcnMsIHJhdGhlciB0aGFuIHRoZSB1cHBlcmNhc2UKLWxldHRl cnMgc2hvd24gaGVyZS4gIFN1Ymdyb3VwczoKLQotICBfOiBTZWN1cml0eS9BdXRoZW50aWNhdGlv bi9FbmNyeXB0aW9uIGNvZGUsIHBvc3NpYmx5IHJlZ3VsYXRlZCBieSBsYXcKLSAgYTogR2VuZXJh bCBkZXNjcmlwdGl2ZSBtYXRlcmlhbCBhbmQgZG9jdW1lbnRhdGlvbgotICBiOiBCT08gZmlsZSBl bmNvZGVycyBhbmQgZGVjb2RlcnMgKG9ic29sZXRlKQotICBjOiBBbGwgcGxhdGZvcm1zIHdpdGgg QyBjb21waWxlcnMKLSAgZDogRGF0YSBHZW5lcmFsIEFPUy9WUwotICBlOiBSZXNlcnZlZCBmb3Ig ImNrZXJtaXQiIGZpbGVzLCBsaWtlIENLRVJNSVQuSU5JLCBDS0VSTUlUODAuVFhUCi0gIGY6IChy ZXNlcnZlZCkKLSAgZzogKHJlc2VydmVkKQotICBoOiAocmVzZXJ2ZWQpCi0gIGk6IENvbW1vZG9y ZSBBbWlnYSAoSW50dWl0aW9uKQotICBqOiAodW51c2VkKQotICBrOiAodW51c2VkKQotICBsOiBT dHJhdHVzIFZPUwotICBtOiBNYWNpbnRvc2ggd2l0aCBNYWMgT1MKLSAgbjogTWljcm9zb2Z0IFdp bmRvd3MgTlQKLSAgbzogT1MvMiBhbmQvb3IgTWljcm9zb2Z0IFdpbmRvd3MgOTUvOTgvTUUvTlQv MjAwMC9YUC8uLi4KLSAgcDogQmVsbCBMYWJzIFBsYW4gOQotICBxOiAocmVzZXJ2ZWQpCi0gIHI6 IERFQyBQRFAtMTEgd2l0aCBSU1RTL0UgKHJlc2VydmVkKQotICBzOiBBdGFyaSBTVCBHRU1ET1Mg KGxhc3Qgc3VwcG9ydGVkIGluIHZlcnNpb24gNUEoMTg5KSkKLSAgdDogREVDIFBEUC0xMSB3aXRo IFJULTExIChyZXNlcnZlZCkKLSAgdTogVU5JWCBvciBlbnZpcm9ubWVudHMgd2l0aCBVTklYLWxp a2UgQyBsaWJyYXJpZXMKLSAgdjogVk1TIGFuZCBPcGVuVk1TCi0gIHc6IFdhcnQgKExleC1saWtl IHByZXByb2Nlc3NvciwgdXNlZCB3aXRoIGFsbCBzeXN0ZW1zKQotICB4OiAocmVzZXJ2ZWQpCi0g IHk6IChyZXNlcnZlZCkKLSAgejogKHJlc2VydmVkKQotICAwLTM6IChyZXNlcnZlZCkKLSAgNDog SUJNIEFTLzQwMCAocmVzZXJ2ZWQgYnV0IHByb2JhYmx5IG5ldmVyIHdpbGwgYmUgdXNlZCkKLSAg NS04OiAocmVzZXJ2ZWQpCi0gIDk6IE1pY3Jvd2FyZSBPUy05Ci0KLUV4YW1wbGVzOgotCi0gIGNr YWFhYS50eHQgLSBUaGlzIGZpbGUKLSAgY2t1ZmlvLmMgICAtIEZpbGUgaS9vIGZvciBVTklYCi0g IGNrc3Rpby5jICAgLSBDb21tdW5pY2F0aW9ucyBpL28gZm9yIHRoZSBBdGFyaSBTVAotICBtYWtl ZmlsZSAgIC0gbWFrZWZpbGUgZm9yIGJ1aWxkaW5nIFVOSVggQy1LZXJtaXQKLSAgY2twa2VyLm1r ICAtIG1ha2VmaWxlIGZvciBidWlsZGluZyBQbGFuIDkgQy1LZXJtaXQKLSAgY2t2a2VyLmNvbSAt IGJ1aWxkIHByb2NlZHVyZSBmb3IgVk1TIEMtS2VybWl0Ci0KLUlNUE9SVEFOVCBGSUxFUyAodXNl IGxvd2VyY2FzZSBuYW1lcyBvbiBVTklYLCBWT1MsIG9yIEFPUy9WUyk6Ci0KLSAgY2thYWFhLnR4 dCAgLSBUaGlzIGZpbGUgKG92ZXJ2aWV3IG9mIHRoZSBDLUtlcm1pdCBmaWxlcykuCi0gICAgICAg ICAgICAgICAgRm9yIHN5c3RlbS1zcGVjaWZpYyBkaXN0cmlidXRpb25zLCB0aGlzIHdpbGwgbm9y bWFsbHkKLSAgICAgICAgICAgICAgICBiZSByZXBsYWNlZCBieSBhIHN5c3RlbS1zcGVjaWZpYyBS RUFELk1FIGZpbGUuCi0KLSAgY2tlcm1pdDcwLnR4dCAtIFVwZGF0ZXM6IFN1cHBsZW1lbnQgdG8g IlVzaW5nIEMtS2VybWl0IiwgMm5kIEVkLCBmb3IgNy4wLgotICBja2VybWl0ODAudHh0IC0gVXBk YXRlczogU3VwcGxlbWVudCB0byAiVXNpbmcgQy1LZXJtaXQiLCAybmQgRWQsIGZvciA4LjAuCi0g IGNrdXR1dG9yLnR4dCAgLSBDLUtlcm1pdCBUdXRvcmlhbCBmb3IgVW5peCAocGxhaW4gdGV4dCkK LSAgY2tjYndyLnR4dCAgLSAiQmV3YXJlIGZpbGUiIChsaW1pdGF0aW9ucywga25vd24gYnVncywg aGludHMpLCBnZW5lcmFsLgotICBja2VybWl0LmluaSAtIFN0YW5kYXJkIGluaXRpYWxpemF0aW9u IGZpbGUgKHJlbmFtZSB0byAua2VybXJjIGluIFVOSVgsIE9TLTkpCi0gIGNrZXJtb2QuaW5pIC0g U2FtcGxlIGN1c3RvbWl6YXRpb24gZmlsZSAocmVuYW1lIHRvIC5teWtlcm1yYyBpbiBVTklYLCBP Uy05KQotCi1UaGUgZm9sbG93aW5nIGNhbiBiZSBmb3VuZCBhdCB0aGUgS2VybWl0IEZUUCBzaXRl OgotCi0gIGNrZXJtaXQua2RkIC0gU2FtcGxlIGRpYWxpbmcgZGlyZWN0b3J5IGZpbGUgKHJlbmFt ZSB0byAua2RkIGluIFVOSVgsIE9TLTkpCi0gIGNrZXJtaXQua25kIC0gU2FtcGxlIGRpYWxpbmcg ZGlyZWN0b3J5IGZpbGUgKHJlbmFtZSB0byAua25kIGluIFVOSVgsIE9TLTkpCi0gIGNrZXJtaXQu a3NkIC0gU2FtcGxlIHNlcnZpY2VzIGRpcmVjdG9yeSBmaWxlIChyZW5hbWUgdG8gLmtzZCBpbiBV TklYLCBPUy05KQotICBja2VkZW1vLmtzYyAtIERlbW9uc3RyYXRpb24gbWFjcm9zIGZyb20gIlVz aW5nIEMtS2VybWl0IgotICBja2VwYWdlLmtzYyAtIERpdHRvCi0gIGNrZXZ0LmtzYyAgIC0gRGl0 dG8KLQotVU5JWC1zcGVjaWZpYyBmaWxlczoKLQotICBja3VpbnMudHh0IC0gVU5JWC1zcGVjaWZp YyBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgotICBja3Vid3IudHh0IC0gVU5JWC1zcGVjaWZp YyBiZXdhcmUgZmlsZS4KLSAgY2t1a2VyLm5yICAtICJtYW4gcGFnZSIgZm9yIFVOSVguCi0KLVZN Uy1zcGVjaWZpYyBmaWxlczoKLQotICBja3ZpbnMudHh0IC0gVk1TLXNwZWNpZmljIGluc3RhbGxh dGlvbiBpbnN0cnVjdGlvbnMuCi0gIGNrdmJ3ci50eHQgLSBWTVMtc3BlY2lmaWMgYmV3YXJlIGZp bGUKLSAgY2t2a2VyLmhscCAtIFZNUyBDLUtlcm1pdCBIRUxQIHRvcGljIChuZWVkcyB1cGRhdGlu ZykuCi0KLURHIEFPUy9WUy1zcGVjaWZpYyBmaWxlczoKLQotICBja2RpbnMudHh0IC0gRGF0YSBH ZW5lcmFsIEFPUy9WUyBDLUtlcm1pdCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zCi0gIGNrZGJ3 ci50eHQgLSBBT1MvVlMgImJld2FyZSIgZmlsZQotICBja2QqLmNsaSAgIC0gUHJvY2VkdXJlcyBm b3IgYnVpbGRpbmcgQU9TL1ZTIEMtS2VybWl0Ci0KLVRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIG9m IGludGVyZXN0IG1haW5seSB0byBwcm9ncmFtbWVycyBhbmQgaGlzdG9yaWFucwotKGZpbmQgdGhl bSBhdCB0aGUgS2VybWl0IGZ0cCBzaXRlIGluIHRoZSBrZXJtaXQvZiBkaXJlY3RvcnkpOgotCi0g IGNrY2tlci5hbm4gLSBSZWxlYXNlIGFubm91bmNlbWVudHMuCi0gIGNrY2NmZy50eHQgLSBDb25m aWd1cmF0aW9uIGluZm9ybWF0aW9uIChmZWF0dXJlIHNlbGVjdGlvbiksIGdlbmVyYWwuCi0gIGNr Y3BsbS50eHQgLSBQcm9ncmFtIGxvZ2ljIG1hbnVhbCAoZm9yIHByb2dyYW1tZXJzKS4KLSAgY2tj MzAwLnR4dCAtIFByb2dyYW0gdXBkYXRlIGhpc3RvcnkgZm9yIGVkaXQgMjEyLTMwMCAoQy1LZXJt aXQgOS4wKS4KLSAgY2tjMjExLnR4dCAtIFByb2dyYW0gdXBkYXRlIGhpc3RvcnkgZm9yIGVkaXQg MjAxLTIxMS4KLSAgY2tjMjAwLnR4dCAtIFByb2dyYW0gdXBkYXRlIGhpc3RvcnkgZm9yIGVkaXQg MTk4LTIwMCAoYmlnKQotICBja2MxOTcudHh0IC0gUHJvZ3JhbSB1cGRhdGUgaGlzdG9yeSBmb3Ig ZWRpdCAxOTUtMTk3IChiaWcpCi0gIGNrYzE5MC50eHQgLSBQcm9ncmFtIHVwZGF0ZSBoaXN0b3J5 IGZvciBlZGl0cyAxODktMTkwIChiaWcpLgotICBja2MxODgudHh0IC0gUHJvZ3JhbSB1cGRhdGUg aGlzdG9yeSwgZWRpdHMgMTc5LTE4OCAoYmlnKS4KLSAgY2tjMTc4LnR4dCAtIFByb2dyYW0gZWRp dCBoaXN0b3J5LCA1QSBlZGl0cyB0aHJvdWdoIDE3OCAodmVyeSBiaWcpLgotICBja2N2NGYudHh0 IC0gUHJvZ3JhbSBlZGl0IGhpc3RvcnksIHZlcnNpb24gNEYuCi0gIGNrY3Y0ZS50eHQgLSBQcm9n cmFtIGVkaXQgaGlzdG9yeSwgdmVyc2lvbiA0RS4KLQotQklOQVJJRVMKLQotSWYgeW91IGhhdmUg RlRQIGFjY2VzcyB0byBrZXJtaXQuY29sdW1iaWEuZWR1IChhbHNvIGtub3duIGFzCi1rZXJtaXQu Y2MuY29sdW1iaWEuZWR1LCBmdHAuY2MuY29sdW1iaWEuZWR1KSwgeW91IGNhbiBhbHNvIHJldHJp ZXZlIHZhcmlvdXMKLUMtS2VybWl0IGJpbmFyaWVzIGZyb20gdGhlIGRpcmVjdG9yeSBrZXJtaXQv YmluL2NrKi4qLCBvciBtb3JlIGNvbnZlbmllbnRseQotZnJvbSB0aGUgd2ViIHBhZ2U6Ci0KLSAg aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrODBiaW5hcmllcy5odG1sCi0KLVRlc3Qg dmVyc2lvbnMgd291bGQgYmUgaW4ga2VybWl0L3Rlc3QvYmluL2NrKi4qLiAgQmUgc3VyZSB0byB0 cmFuc2ZlciB0aGVzZQotZmlsZXMgaW4gYmluYXJ5IG1vZGUuICBUaGUgUkVBRC5NRSBmaWxlIGlu IHRoYXQgZGlyZWN0b3J5IGV4cGxhaW5zIHdoYXQncwotd2hhdC4KLQotU09VUkNFIEZJTEVTCi0K LVRoZSBzb3VyY2UgZmlsZXMgZm9yIHRoZSBVTklYIHZlcnNpb24gKGFsbCBVTklYIHZlcnNpb25z KSBhcmUgYXZhaWxhYmxlIGluCi1rZXJtaXQvYXJjaGl2ZXMvY2t1Tk5OLnRhci5aLCBhcHByb3hp bWF0ZWx5IDFNQiBpbiBzaXplLiAgVHJhbnNmZXIgdGhpcyBmaWxlCi1pbiBiaW5hcnkgbW9kZS4g IFRoaXMgaXMgYSBjb21wcmVzc2VkIHRhciBhcmNoaXZlLiAgVGhlcmUgaXMgYWxzbyBhIGd6aXAn ZAotdmVyc2lvbiwgY2t1MjExLnRhci5nei4gIFRvIGdldCB0aGUgYmluYXJ5IHRhciBhcmNoaXZl OgotCi0gIG1rZGlyIGtlcm1pdCAgICAgICAgICAgICAgICAgICAoYXQgc2hlbGwgcHJvbXB0LCBt YWtlIGEgS2VybWl0IGRpcmVjdG9yeSkKLSAgY2Qga2VybWl0ICAgICAgICAgICAgICAgICAgICAg IChtYWtlIGl0IHlvdXIgY3VycmVudCBkaXJlY3RvcnkpCi0KLSAgZnRwIGtlcm1pdC5jb2x1bWJp YS5lZHUgICAgICAgIChtYWtlIGFuIGZ0cCBjb25uZWN0aW9uKQotICB1c2VyOiBhbm9ueW1vdXMg ICAgICAgICAgICAgICAgKGxvZyBpbiBhcyB1c2VyICJhbm9ueW1vdXMiLCBsb3dlciBjYXNlISkK LSAgcGFzc3dvcmQ6ICAgICAgICAgICAgICAgICAgICAgICh1c2UgeW91ciBlbWFpbCBpZCBhcyBh IHBhc3N3b3JkKQotICBjZCBrZXJtaXQvYXJjaGl2ZXMgICAgICAgICAgICAgKGdvIHRvIHRoZSBh cmNoaXZlcyBkaXJlY3RvcnkpCi0gIHR5cGUgYmluYXJ5ICAgICAgICAgICAgICAgICAgICAoc3Bl Y2lmeSBiaW5hcnkgZmlsZSB0cmFuc2ZlcikKLSAgZ2V0IGNrdTMwMC50YXIuWiAgICAgICAgICAg ICAgIChnZXQgdGhlIHRhciBhcmNoaXZlKSAob3IgZ2V0IGNrdTE5Mi50YXIuZ3opCi0gIGJ5ZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlzY29ubmVjdCBhbmQgZXhpdCBmcm9tIGZ0cCkK LQotICB1bmNvbXByZXNzIGNrdTMwMC50YXIuWiAgICAgICAgKGF0IHRoZSBzaGVsbCBwcm9tcHQs IHVuY29tcHJlc3MgdGhlIGFyY2hpdmUpCi0gIHRhciB4dmYgY2t1MzAwLnRhciAgICAgICAgICAg ICAoZXh0cmFjdCB0aGUgZmlsZXMgZnJvbSB0aGUgdGFyIGFyY2hpdmUpCi0gIG1ha2UgeHh4ICAg ICAgICAgICAgICAgICAgICAgICAoYnVpbGQgQy1LZXJtaXQgZm9yIHlvdXIgc3lzdGVtKQotCi0o d2hlcmUgInh4eCIgaXMgdGhlIG1ha2VmaWxlIGVudHJ5IGFwcHJvcHJpYXRlIGZvciB5b3VyIHN5 c3RlbS4pCi0KLUFsbCBDLUtlcm1pdCBzb3VyY2UgYW5kIG90aGVyIHRleHQgZmlsZXMgYXJlIGFs c28ga2VwdCBzZXBhcmF0ZWx5IGluIHRoZQota2VybWl0L2YgZGlyZWN0b3J5LiAgVGhlIGZpbGVz IG5lY2Vzc2FyeSB0byBidWlsZCBhIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24KLW9mIEMtS2Vy bWl0IGFyZSBsaXN0ZWQgaW4gdGhlIGFwcHJvcHJpYXRlIG1ha2VmaWxlIG9yIGVxdWl2YWxlbnQ6 Ci0KLSAgICAgICBVTklYOiBtYWtlZmlsZSAob3IgcmVuYW1lIGNrdWtlci5tYWsgdG8gbWFrZWZp bGUpCi0gICAyLjExIEJTRDogY2t1YnMyLm1hayAocmVuYW1lIHRvIG1ha2VmaWxlKSwgY2t1c3Ry LnNlZAotICAgICBQbGFuIDk6IGNrcGtlci5tayAgKHJlbmFtZSB0byBta2ZpbGUpCi0gIE1hY2lu dG9zaDogY2tta2VyLm1hayAocmVuYW1lIHRvIGtlcm1pdC5tYWtlLCB1c2UgTVBXIEMgMy4yKQot ICAgICAgICBWTVM6IENLVktFUi5DT00gKERDTCkgKGFuZCBvcHRpb25hbGx5IGFsc28gQ0tWS0VS Lk1NUykKLSAgICAgICAgICAgICBvciBDS1ZPTEQuQ09NIChmb3IgVk1TIDQueCkKLSAgICAgIEFt aWdhOiBDS0lLRVIuTUFLIChBenRlYyBDKSBvciBDS0lTQVMuTUFLIChTQVMgQykKLSAgIEF0YXJp IFNUOiBDS1NLRVIuTUFLCi0gICAgICAgT1MtOTogY2s5a2VyLm1hayBvciBjazlrZXIuZ2NjCi0g ICAgIEFPUy9WUzogY2tkbWFrLmNsaSwgY2tkY2MuY2xpLCBja2RsbmsuY2xpCi1TdHJhdHVzIFZP UzogY2tsbWFrLmNtCi0KLU1pbmltYWwgc291cmNlIGZpbGVzIGZvciBidWlsZGluZyBzZWxlY3Rl ZCB2ZXJzaW9ucyAodGhlc2UgcGF0dGVybnMgZ2V0IGFsbAotdGhlIGZpbGVzIHlvdSBuZWVkLCBh bmQgaW4gc29tZSBjYXNlcyBtYXliZSBhIGZldyBleHRyYSk6Ci0KLSAgIFVOSVg6ICAgY2tbY3V3 XSouW2N3aF0gICAoaW5jbHVkaW5nIFFOWCwgUGxhbiA5LCBhbmQgQmVCb3gpCi0gICBVTklYOiAg IGNrW2N1d19dKi5bY3doXSAgKFVuaXggd2l0aCBzZWN1cml0eSBtb2R1bGVzKQotICAgVk1TOiAg ICBja1tjdXd2XSouW2N3aF0gIFZNUwotICAgVk1TOiAgICBja1tjdXd2X10qLltjd2hdIFZNUyB3 aXRoIFNTTC9UTFMKLSAgIE1hYzogICAgY2tbY3V3bV0qLltjd2hyXSBPbGQgTWFjIE9TLCBub3Qg TWFjIE9TIFgsIHdoaWNoIGlzIFVOSVguCi0gICBBT1MvVlM6IGNrW2N1d2RdKi5bY3doXQotICAg Vk9TOiAgICBja1tjd2hsXSouW2N3aF0KLSAgIEFtaWdhOiAgY2tbY3V3aV0qLltjd2hdCi0gICBB dGFyaTogIGNrW2N1d3NdKi5bY3doXQotICAgT1MtOTogICBja1tjdXc5XSouW2N3aGFdCi0KLUZp bmFsbHksIGhlcmUgaXMgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBDLUtlcm1p dCBmaWxlIG5hbWluZwotY29udmVudGlvbnMuICBBIEMtS2VybWl0IGZpbGVuYW1lIGhhcyB0aGUg Zm9ybToKLQotICBDSzxzeXN0ZW0+PHdoYXQ+Ljx0eXBlPgotCi13aGVyZToKLQotPHN5c3RlbT4g aXMgZGVzY3JpYmVkIGVhcmxpZXIgaW4gdGhpcyBmaWxlOwotCi08dHlwZT4gaXMgdGhlIGZpbGUg dHlwZSAodXNlIGxvd2VyY2FzZSBvbiBVTklYLCBWT1MsIG9yIEFPUy9WUyk6Ci0KLSAgYzogICBD IGxhbmd1YWdlIHNvdXJjZQotICBoOiAgIEhlYWRlciBmaWxlIGZvciBDIGxhbmd1YWdlIHNvdXJj ZQotICB3OiAgIFdhcnQgcHJlcHJvY2Vzc29yIHNvdXJjZSwgY29udmVydGVkIGJ5IFdhcnQgKG9y IExleCkgdG8gYSBDIHByb2dyYW0KLSAgcjogICBNYWNpbnRvc2ggcmVzb3VyY2UgZmlsZSAoOC1i aXQgdGV4dCkKLSAgYTogICBBc3NlbWJsZXIgc291cmNlCi0KLSAgdHh0OiBQbGFpbiB0ZXh0Lgot ICBucjogIE5yb2ZmL1Ryb2ZmIHRleHQgZm9ybWF0dGVyIHNvdXJjZSBmb3IgVU5JWCAibWFuIHBh Z2UiCi0gIG1zczogU2NyaWJlIHRleHQgZm9ybWF0dGVyIHNvdXJjZQotICBwczogIFR5cGVzZXQg bWF0ZXJpYWwgdG8gYmUgcHJpbnRlZCBvbiBhIFBvc3RTY3JpcHQgcHJpbnRlcgotICBwZGY6IEFu IEFkb2JlIFBERiBmaWxlCi0gIGhscDogQSBWTVMgSGVscCB0b3BpYwotCi0gIGluaTogSW5pdGlh bGl6YXRpb24gZmlsZQotICBrc2M6IEEgS2VybWl0IFNjcmlwdCB0byBiZSBleGVjdXRlZCBieSB0 aGUgVEFLRSBjb21tYW5kCi0gIGtkZDogQSBLZXJtaXQgRGlhbGluZyBEaXJlY3RvcnkKLSAga25k OiBBIEtlcm1pdCBOZXR3b3JrIERpcmVjdG9yeQotICBrc2Q6IEEgS2VybWl0IFNlcnZpY2VzIERp cmVjdG9yeQotCi0gIG1hazogQSBNYWtlZmlsZSBvciBvdGhlciBidWlsZCBwcm9jZWR1cmUgKG9m dGVuIG5lZWRzIHJlbmFtaW5nKQotICBjb206IChWTVMgb25seSkgYSBEQ0wgY29tbWFuZCBwcm9j ZWR1cmUKLSAgY2xpOiAoQU9TL1ZTIG9ubHkpIGEgY29tbWFuZCBwcm9jZWR1cmUKLSAgY21kOiAo T1MvMiBvbmx5KSBhIFJleHggY29tbWFuZCBwcm9jZWR1cmUKLQotICBib286ICJib28iLWVuY29k ZWQgZXhlY3V0YWJsZSBwcm9ncmFtLCBkZWNvZGUgd2l0aCBDS0JVTkIgcHJvZ3JhbS4KLSAgaGV4 OiAiaGV4Ii1lbmNvZGVkIGV4ZWN1dGFibGUgcHJvZ3JhbSwgZGVjb2RlIHdpdGggQ0tWREVIIHBy b2dyYW0gKFZNUyBvbmx5KS4KLSAgaHF4OiBCaW5IZXgnZCBNYWNpbnRvc2ggS2VybWl0IHByb2dy YW0sIGRlY29kZSB3aXRoIEJpbkhleCB2ZXJzaW9uIDQuMC4KLSAgdXVlOiBBIHV1ZW5jb2RlZCBi aW5hcnkgZmlsZSwgZGVjb2RlIHdpdGggdXVkZWNvZGUgb3IgKERHIG9ubHkpIENLREVDTy4KLQot ICBkZWY6IEFuIE9TLzIgbGlua2VyIGRlZmluaXRpb25zIGZpbGUuCi0gIHNoOiAgQSBVTklYIHNo ZWxsIHNjcmlwdC4KLSAgc2VkOiBBIFVOSVggc2VkIChlZGl0b3IpIHNjcmlwdC4KLSAgc3RyOiBB IGZpbGUgb2YgY2hhcmFjdGVyIHN0cmluZ3MgZXh0cmFjdGVkIGZyb20gQy1LZXJtaXQgKEJTRCAy LjF4IG9ubHkpLgotCi08d2hhdD4gaXMgbW5lbW9uaWMgKHVwIHRvIDMgY2hhcmFjdGVycykgZm9y IHdoYXQncyBpbiB0aGUgZmlsZToKLQotTk9URTogQWZ0ZXIgQy1LZXJtaXQgNi4wLCB0ZXh0IGZp bGV0eXBlcyBzdWNoIGFzIC5ET0MgYW5kIC5ITFAgd2VyZSBjaGFuZ2VkCi10byAuVFhUIHRvIGF2 b2lkIGNvbmZ1c2lvbiBpbiBXaW5kb3dzLWJhc2VkIFdlYiBicm93c2Vycywgd2hpY2ggd291bGQK LW90aGVyd2lzZSBtaXN0YWtlIHRoZW0gZm9yIE1pY3Jvc29mdCBXb3JkIG9yIFdpbmRvd3MgSGVs cCBkb2N1bWVudHMuCi0KLSAgYWFhOiBBICJyZWFkLW1lIiBmaWxlLCBsaWtlIHRoaXMgb25lCi0g IGluczogSW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBvciBwcm9jZWR1cmVzCi0gIGJ3cjogIkJl d2FyZSIgZmlsZSAtLSB0aGluZ3MgdG8gd2F0Y2ggb3V0IGZvciwgaGludHMgYW5kIHRpcHMKLSAg cGxtOiBQcm9ncmFtIExvZ2ljIE1hbnVhbAotICBrZXI6IEdlbmVyYWwgQy1LZXJtaXQgZGVmaW5p dGlvbnMsIGluZm9ybWF0aW9uLCBkb2N1bWVudGF0aW9uCi0KLSAgbm5uOiBEaWdpdHM6IEMtS2Vy bWl0IGVkaXQgbnVtYmVyIChlLmcuIGNrdTMwMC50YXIuZ3opCi0gIGNtZDogQ29tbWFuZCBwYXJz aW5nCi0gIGNvbjogQ09OTkVDVCBjb21tYW5kCi0gIGNuczogQ09OTkVDVCBjb21tYW5kIChVTklY IG9ubHkgLSB2ZXJzaW9uIHRoYXQgdXNlcyBzZWxlY3QoKSwgbm90IGZvcmsoKSkKLSAgZGViOiBE ZWJ1Zy9UcmFuc2FjdGlvbiBMb2cgZm9ybWF0cywgVHlwZWRlZnMKLSAgZGlhOiBNb2RlbS9EaWFs ZXIgY29udHJvbAotICBmaW86IFN5c3RlbS1kZXBlbmRlbnQgRmlsZSBJL08KLSAgZm5zOiBQcm90 b2NvbCBzdXBwb3J0IGZ1bmN0aW9ucwotICBmbjI6IE1vcmUgcHJvdG9jb2wgc3VwcG9ydCBmdW5j dGlvbnMgKGFuZCBGTjMsIC4uLikKLSAgbGliOiBDb21tb24gbGlicmFyeSByb3V0aW5lcyBtb2R1 bGUKLSAgbWFpOiBNYWluIHByb2dyYW0KLSAgbmV0OiBOZXR3b3JrIGkvbyBtb2R1bGUKLSAgcHJv OiBQcm90b2NvbAotICBzY3I6IFNDUklQVCBjb21tYW5kCi0gIHRlbDogVGVsbmV0IHByb3RvY29s IG1vZHVsZQotICB0aW86IFN5c3RlbS1kZXBlbmRlbnQgY29tbXVuaWNhdGlvbnMgaS9vICYgY29u dHJvbCBhbmQgaW50ZXJydXB0IGhhbmRpbmcKLSAgc2lnOiBTaWduYWwgaGFuZGxpbmcgbW9kdWxl Ci0gIHVzcjogSW50ZXJhY3RpdmUvc2NyaXB0IHVzZXIgaW50ZXJmYWNlCi0gIHVzMjogTW9yZSB1 c2VyIGludGVyZmFjZSAobWFpbmx5IGhlbHAgdGV4dCkKLSAgdXMzOiBTdGlsbCBtb3JlIHVzZXIg aW50ZXJmYWNlIChhbmQgVVNSNCwgVVNSNSwgVVNSNiwgVVNSNykKLSAgdXN4OiBDb21tb24gdXNl ciBpbnRlcmZhY2UgZnVuY3Rpb25zCi0gIHVzeTogQ29tbWFuZC1saW5lIHBhcnNpbmcKLSAgeGxh OiBDaGFyYWN0ZXIgc2V0IHRyYW5zbGF0aW9uIG1vZHVsZQotICB1bmk6IFVuaWNvZGUgc3VwcG9y dAotICBwdHk6IFBzZXVkb3Rlcm1pbmFsIHN1cHBvcnQKLSAgbWRiOiBNYWxsb2MtZGVidWdnaW5n IG1vZHVsZSAobm90IGluY2x1ZGVkIGluIHJlYWwgYnVpbGRzKQotICBzdHI6IFN0cmluZ3MgbW9k dWxlIChvbmx5IGZvciAyLnhCU0QpCi0KLShFbmQgb2YgY2thYWFhLnR4dCkKCmRpZmYgLS1naXQg YS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrYzMwMi50eHQgYi9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrYzMwMi50eHQKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDEzYTY2MWEuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2MzMDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzg4 MSArMCwwIEBACi1DLUtFUk1JVCA5LjAgQ0hBTkdFIExPRyAoQ2hhbmdlcyBzaW5jZSA4LjAuMjA3 IC8gSzk1IDIuMS4zIEphbnVhcnkgMjAwMykKLQotICBDaHJvbm9sb2dpY2FsIG9yZGVyLgotICBH byB0byB0aGUgYm90dG9tIHRvIGZpbmQgdGhlIG5ld2VzdCBlZGl0cy4KLQotICBGLiBkYSBDcnV6 LCBUaGUgS2VybWl0IFByb2plY3QsIENvbHVtYmlhIFVuaXZlcnNpdHksIE5ZQy4KLSAgTGFzdCB1 cGRhdGU6IDI4IEp1bmUgMjAxMS4KLQotRlRQIFVTRVIsIEZUUCBBQ0NPVU5ULCBwbHVzIHRoZSB2 YXJpb3VzIHByb21wdHMgYW5kIHN3aXRjaGVzIGZvciBGVFAgdXNlcm5hbWUsCi1wYXNzd29yZCwg YW5kIGFjY291bnQgYWxsIG5lZ2xlY3RlZCB0byBzdHJpcCBxdW90ZXMsIGFuZCBpbiBtb3N0IGNh c2VzIHF1b3RlcwotYXJlIG5lY2Vzc2FyeSB0byBzcGVjaWZ5IGEgdXNlcm5hbWUgdGhhdCBjb250 YWlucyBzcGFjZXMuICBja2NmdHAuYywKLTE1IEphbiAyMDAzLgotCi1GVFAgTVBVVCBmMSBmMiBm My4uLiBnZXRzIGEgcGFyc2UgZXJyb3IgaWYgYW55IG9mIHRoZSBmbidzIGRvIG5vdCBtYXRjaCBh bgotZXhpc3RpbmcgZmlsZS4gIFRoaXMgaXMgYmFkIGZvciBzY3JpcHRzLiAgSW4gZG9mdHBwdXQo KSwgY21mZGIoKSBsb29rcyBmb3IKLWtleXdvcmRzIChzd2l0Y2hlcykgb3IgQ01JRkkuICBXaGVu IGl0IGhpdHMgQ01JRkksIGl0IGV4aXRzIGZyb20gdGhlIGluaXRpYWwKLXBhcnNlIGxvb3AgYW5k IHRoZW4gZG9lcyBhZGRpdGlvbmFsIGNtaWZpKClzIGluIGEgbG9vcCB1bnRpbCBkb25lLiAgVGhl IG1vc3QKLW9idmlvdXMgZml4IGlzIHRvIHBhcnNlIGVhY2ggZmllbGQgd2l0aCBjbWZkYihDTUlG SSxDTUZMRCksIGkuZS4gZmFsbCBiYWNrIHRvCi1DTUZMRCBpZiBDTUlGSSBkb2Vzbid0IG1hdGNo IGFueXRoaW5nLiAgVGhlbiBpZiBDTUZMRCB3YXMgdXNlZCwgd2UgZG9uJ3QgYWRkCi10aGUgZmls ZXNwZWMgdG8gdGhlIGxpc3QuICBUaGlzIGlzIGEgcmF0aGVyIGJpZyBjaGFuZ2UgYnV0IGl0IHNl ZW1zIHRvIHdvcmsuCi1ObyBlcnJvciBtZXNzYWdlcyBvciBmYWlsdXJlcyBoYXBwZW4gZm9yIG5v bi1tYXRjaGluZyBmaWVsZHMsIGJ1dCBhbiBlcnJvcgotbWVzc2FnZSBpcyBwcmludGVkIChhbmQg dGhlIE1QVVQgY29tbWFuZCBmYWlscykgaWYgbm9uZSBvZiB0aGUgZmllbGRzIG1hdGNoCi1hbnkg ZmlsZXMuICBUaGlzIGZpeCBnb3QgaW4gdG9vIGxhdGUgZm9yIDIuMS4zOyB3b3JrYXJvdW5kOiB1 c2UgQy1TaGVsbAotbGlrZSB3aWxkY2FyZCBsaXN0IChmdHAgbXB1dCAieyouYWJjLGZvby4qfSIp LiAgY2tjZnRwLmMsIDE2IEphbiAyMDAzLgotCi1HUkVQIGRpZCBub3QgcGFzcyBpdHMgcGF0dGVy biB0aHJvdWdoIHRoZSBleHBhbmRlciwgdGh1cyB2YXJpYWJsZXMgY291bGQKLW5vdCBiZSB1c2Vk IGZvciBwYXR0ZXJucy4gIFRoaXMgbXVzdCBoYXZlIGJlZW4gYW4gb3ZlcnNpZ2h0IC0tIEkgY2Fu J3QgZmluZAotYW55dGhpbmcgaW4gbXkgbm90ZXMgYWJvdXQgaXQuICBGaXhlZCBpbiBkb2dyZXAo KTogY2t1dXM2LmMsIDI0IEphbiAyMDAzLgotCi1OZXcgbWFrZWZpbGUgdGFyZ2V0IGZvciBIUC1V WCAxMS54eCB3aXRoIE9wZW5TU0wgZnJvbSBUYXBhbmkgVGFydmFpbmVuLgotbWFrZWZpbGUsIDMx IEphbiAyMDAzLgotCi1Gcm9tIEplZmY6Ci0gLiBBdm9pZCBjb3JlIGR1bXAgd2hlbiBkZXJlZmVy ZW5jaW5nIHRuY19nZXRfc2lnbmF0dXJlKCk6IGNrdXVzNC5jLgotIC4gQnVtcCB2ZXJzaW9uIG51 bWJlcnMgdG8gOC4wLjIwOCwgMi4xLjQ6IGNrY21haS5jLgotCi1BZGRlZCAvTk9MT0dJTiB0byBG VFAgW09QRU5dLiAgY2tjZnRwLmMsIDEwIEZlYiAyMDAzLgotCi1Eb24ndCBkdW1wIGNvcmUgaWYg RlRQIERFQlVHIGlzIE9OIGFuZCBGVFAgT1BFTiBkb2VzIG5vdCBpbmNsdWRlIGEgc2VydmljZS4K LW9wZW5mdHAoKTogY2tjZnRwLmMsIDEwIEZlYiAyMDAzLgotCi1IRUxQIFBBVFRFUk4gdGV4dCBp bmNvcnJlY3RseSBpZGVudGlmaWVkIGNvbW1hbmRzIGFuZCBmdW5jdGlvbnMgd2l0aAotZmxvYXRp bmcgYW5kIGFuY2hvcmVkIHBhdHRlcm5zLiAgVGhlIGNvcnJlY3RlZCBsaXN0cyBhcmU6Ci1GbG9h dGluZzogR1JFUCwgVFlQRSAvTUFUQ0g6LCAvRVhDRVBUOiBwYXR0ZXJucywgXGZhcnJheWxvb2so KSwKLUFuY2hvcmVkOiBJRiBNQVRDSCwgZmlsZS1tYXRjaGluZyB3aWxkY2FyZHMsIFxmc2VhcmNo KCksIFxmcnNlYXJjaCgpCi1ja3V1czIuYywgMTAgRmViIDIwMDMuICAgICAKLQotSU5QVVQgbiBc ZnBhdHRlcm4oeHh4KSBkaWQgbm90IHdvcmsgZm9yIGNhc2UtaW5kZXBlbmRlbnQgY29tcGFyaXNv bnMuCi1GaXhlZCBpbiBkb2lucHV0KCk6IGNrdXVzNC5jLCAxMCBGZWIgMjAwMy4KLQotSXQgc2Vl bXMgXGZwYXR0ZXJuKCkgZGlkbid0IHdvcmsgd2l0aCBNSU5QVVQgYXQgYWxsLiAgVGhlcmUgd2Fz IG5vIGNvZGUgdG8KLWhhbmRsZSBcZnBhdHRlcm4oKSBpbiB0aGUgTUlOUFVUIHBhcnNlIGxvb3As IHNvIGl0IG5ldmVyIHdvcmtlZC4gIFRoZSBjb2RlCi1oYWQgdG8gYmUgdG90YWxseSByZXdyaXR0 ZW4gdG8gdXNlIGNtZmxkKCkgaW4gYSBsb29wLCByYXRoZXIgdGhhbiBjbXR4dCgpCi1hbmQgdGhl biBja3NwbGl0KCkuICBGdXJ0aGVybW9yZSwgd2hlbmV2ZXIgYW55IG9mIHRoZSBmaWVsZHMgd2Fz IGFuCi1cZmpvaW4oKSwgdGhpcyBoYWQgdG8gYmUgc3BsaXQuICBja3V1c3IuYywgMTAgRmViIDIw MDMuCi0KLU1hY3JvIHJlcGxhY2VtZW50IHZpYSBcbSgpIGFuZCBcZmRlZmluaXRpb24oKSBkb2Vz IG5vdCB3b3JrIGFzIGFkdmVydGlzZWQKLShpLmUuIGNhc2Ugc2Vuc2l0aXZlbHkpIGZvciBhc3Nv Y2lhdGl2ZSBhcnJheSBlbGVtZW50czsgZS5nLiBcbSh4eHg8YWJjPikgaXMKLXRyZWF0ZWQgdGhl IHNhbWUgYXMgXG0oeHh4PEFCQz4pLCBjb250cmFyeSB0byBzZWN0aW9uIDcuMTAuMTAgb2YgdGhl IEMtS2VybWl0Ci03LjAgdXBkYXRlIG5vdGVzLCBhbmQgdG8gdGhlIGZhY3QgdGhhdCB0aGUgdHdv IHJlYWxseSBkbyBleGlzdCBzZXBhcmF0ZWx5LgotRml4ZWQgYnkgYWRkaW5nIGEgc3RhdGljIGZ1 bmN0aW9uIGlzYWFycmF5KHMpIHdoaWNoIHN1Y2NlZWRzIGlmIHMgaXMgYW4KLWFzc29jaWF0aXZl IGFycmF5IHJlZmVyZW5jZSBhbmQgZmFpbHMgb3RoZXJ3aXNlLCBhbmQgdGhlbiBoYXZpbmcgXG0o KQotYW5kIFxmZGVmKCkgY2FsbCBteHhsb29rKCkgKGNhc2Utc2Vuc2l0aXZlIGxvb2t1cCkgaWYg aXNhYXJyYXkoKSwgb3RoZXJ3aXNlCi0oYXMgYmVmb3JlKSBteGxvb2soKSkuICBja3V1czQuYywg MTEgRmViIDIwMDMuCi0KLUZpeGVkIEZUUCBPUEVOIHRvIGFsbG93IHRoZSAvVVNFUiBzd2l0Y2gg dG8gb3ZlcnJpZGUgU0VUIEZUUCBBVVRPTE9HSU4gT0ZGLAotanVzdCBhcyAvTk9MT0dJTiBvdmVy cmlkZXMgU0VUIEZUUCBBVVRPTE9HSU4gT04uICBja2NmdHAuYywgMTEgRmViIDIwMDMuCi0KLUlu IEs5NSwgInNldCBrZXkgXDEyMzQgXDI3SCIgKGFueSBTRVQgS0VZIGNvbW1hbmQgaW4gd2hpY2gg dGhlIGZpcnN0IGNoYXIgb2YKLXRoZSBkZWZpbml0aW9uIHdhcyBiYWNrc2xhc2gsIGFuZCB0aGUg T05MWSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGJhY2tzbGFzaAotcXVhbnRpdHkgd2FzIGFuIHVwcGVy Y2FzZSBsZXR0ZXIsIHRoYXQgbGV0dGVyIHdvdWxkIGJlIGxvd2VyY2FzZWQpLiAgRGlhZ25vc2lz OgoteGxvb2t1cCgpIHBva2luZyBpdHMgYXJndW1lbnQgKHNlZSBub3RlcyBmcm9tIEp1bHkgMjAw MCkuICBKZWZmIHNlbnQgYSBmaXguCi1ja3VjbWQuYywgMTUgRmViIDIwMDMuCi0KLVJhbiBteSBT LUV4cHJlc3Npb24gdG9ydHVyZSB0ZXN0IHRvIG1ha2Ugc3VyZSBTZXhwcyBzdGlsbCB3b3JrZWQu ICBUaGV5IGRvLAotZXhjZXB0IHRoZSBiaXR3aXNlICYgYW5kIHwgb3BlcmF0b3JzIHdlcmUgYnJv a2VuLCBlLmcuICgmIDcgMikgYW5kICh8IDEgMiA0KQotZ2V0ICJJbnZhbGlkIG9wZXJhbmQiIGVy cm9ycy4gIEplZmYncyBjb2RlIGhhZCBhZGRlZCBhbiBlYXJseSBmYWlsdXJlIHJldHVybgotZnJv bSB0aGUgbG9va3VwIGxvb3Agd2hlbiB3aGVuIGEgc2luZ2xlLWJ5dGUga2V5d29yZCBtYXRjaGVk IGEga2V5d29yZCB0aGF0Ci1zdGFydGVkIHdpdGggdGhlIHNhbWUgYnl0ZSBidXQgd2FzIG1vcmUg dGhhbiBvbmUgYnl0ZSBsb25nLiAgU28gIiYiIHdvdWxkIGhpdAotIiYmIiBhbmQgZmFpbCBpbnN0 ZWFkIG9mIGNvbnRpbnVpbmcgaXRzIHNlYXJjaCAoeGxvb2t1cCB0YWJsZXMgYXJlbid0IHNvcnRl ZAotc28gdGhlcmUgY2FuIGJlIG5vIGVhcmx5IHJldHVybikuICBGaXhlZCBpbiB4bG9va3VwKCk6 IGNrdWNtZC5jLCAxNiBGZWIgMjAwMy4KLQotR290IHJpZCBvZiAia3JibWl0IiB0YXJnZXQgZnJv bSBtYWtlZmlsZS4gIEl0J3Mgc3RpbGwgdGhlcmUsIGJ1dCB3ZSBkb24ndAotdXNlIGl0IGFueSBt b3JlLiAgQWxsIHNlY3VyZSB0YXJnZXRzIG5vdyB1c2UgInhlcm1pdCIsIGFuZCBwcm9kdWNlIGEg YmluYXJ5Ci1jYWxsZWQgd2VybWl0LCBqdXN0IGxpa2UgdGhlIHJlZ3VsYXIgb25lcyBkbyAoZXhj ZXB0IHRoZSBvbGQgY2t1Y29uLmMgb25lcykuCi1Ob24tc2VjdXJlIHRhcmdldHMsIHNpbmNlIHRo ZXkgZG9uJ3QgZGVmaW5lIGFueSBvZiB0aGUgc2VjdXJpdHkgc3ltYm9scywKLXdpbmQgdXAgY29t cGlsaW5nIGFuZCBsaW5raW5nIHRvIChtb3N0bHkpIGVtcHR5IHNlY3VyaXR5IG1vZHVsZXMuICBt YWtlZmlsZSwKLTE1IEZlYiAyMDAzLgotCi1BZGRlZCBcZmN2dGRhdGUoeHh4LDMpIHRvIGZvcm1h dCBpdHMgcmVzdWx0IGluIE1EVE0gZm9ybWF0ICh5eXl5bW1kZGhobW1zcywKLWFsbCBudW1lcmlj LCBubyBzcGFjZXMgb3IgcHVuY3R1YXRpb24pLiAgT2YgY291cnNlIHRoZXNlIG51bWVyaWMgc3Ry aW5ncwotYXJlIHRvbyBiaWcgdG8gYmUgMzItYml0IG51bWJlcnMgYW5kIGFyZSB1c2VsZXNzIGZv ciBhcml0aG1ldGljLCBidXQgdGhleSdyZQotdXNlZnVsIGZvciBsZXhpY2FsIGNvbXBhcmlzb24s IGV0Yy4gIGNrdXVzWzI0XS5jLCAxNiBGZWIgMjAwMy4KLQotVGhlIGZvbGxvd2luZyBGVFAgY29t bWFuZHMgZGlkIG5vdCBzZXQgRkFJTFVSRSB3aGVuIHRoZXkgZmFpbGVkOiBSTURJUiwKLUNELCBD RFVQLCBGaXhlZCBpbiB0aGUgY29ycmVzcG9uZGluZyBkb2Z0cGJsYWgoKSByb3V0aW5lcy4gIGNr Y2Z0cC5jLAotMTYgRmViIDIwMDMuCi0KLVJFTkFNRSB3b3VsZCBzb21ldGltZXMgbm90IHByaW50 IGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiBpdCBmYWlsZWQsIGUuZy4gaW4gSzk1Ci13aGVuIHRoZSBk ZXN0aW5hdGlvbiBmaWxlIGFscmVhZHkgZXhpc3RlZC4gIGNrdXVzNi5jLCAxNyBGZWIgMjAwMy4K LQotRml4ZWQgQ09QWSBlcnJvciBtZXNzYWdlcywgd2hpY2ggZGlkIG5vdCBjb21lIG91dCBpbiBz dGFuZGFyZCBmb3JtYXQgd2hlbgotL0xJU1Qgd2FzIG5vdCBpbmNsdWRlZC4gIGNrdXVzNi5jLCAx NyBGZWIgMjAwMy4KLQotRml4ZWQgI2lmZGVmcyBpbiBja19jcnAuYyB0byBhbGxvdyBub25zZWN1 cmUgYnVpbGRzIG9uIG9sZCBwbGF0Zm9ybXMgbGlrZQotU3lzdGVtIFYvNjggUjMuICAxOSBGZWIg MjAwMy4KLQotU2ltaWxhciB0cmVhdG1lbnQgZm9yIGNrX3NzbC5jLiAgMjAgRmViIDIwMDMuCi0K LUZyb20gSmVmZiwgMjEgRmViIDIwMDM6Ci0gLiBBSVg1MyBhbmQgQUlYNTIgc3ltYm9scyBmb3Ig Y2tjZGViLmgsIG1ha2VmaWxlLgotIC4gTmV3IGdjYyB0YXJnZXRzIGZvciB2YXJpb3VzIEFJWCA0 LngvNS54IHZlcnNpb25zOiBtYWtlZmlsZS4KLSAuIENvcHlyaWdodCBkYXRlIHVwZGF0ZXM6IGNr X2NycC5jLCBja19zc2wuYy4KLSAuIEVOQUJMRS9ESVNBQkxFIFFVRVJZIGJyb2tlbiBiZWNhdXNl IGtleXdvcmQgdGFibGUgb3V0IG9mIG9yZGVyOiBja3V1c3IuYy4KLSAuIEZpeGVkIHRoZSB1c2Ug b2YgSFRUUCBwcm94aWVzIGZvciBIVFRQIFtSRV1PUEVOIGZvciBVbml4OiBja2NuZXQuYy4KLQot QWxzbyBmb3IgSzk1IG9ubHk6IEFsbG93IGZpbGUgdHJhbnNmZXIgd2hlbiBLOTUgaXMgaW52b2tl ZCBvbiB0aGUgcmVtb3RlIGVuZAotb2YgYSBjb25uZWN0aW9uIHRvIGEgUHJhZ21hIFN5c3RlbXMg VGVybWluYWwgU2VydmVyIGNvbm5lY3Rpb247IGF1dG9tYXRpY2FsbHkKLVNFVCBFWElUIEhBTkdV UCBPRkYgd2hlbiBpbnZva2VkIHdpdGggb3BlbiBwb3J0IGhhbmRsZSAoIms5NSAtbCBubm5uIiku Ci0KLSJjZCBhKiIgZmFpbGVkIGV2ZW4gd2hlbiAiYSoiIG1hdGNoZWQgb25seSBvbmUgZGlyZWN0 b3J5LiAgRml4ZWQgaW4gY21pZmkoKToKLWNrdWNtZC5jLCAyMSBGZWIgMjAwMy4KLQotSW4gdGhl IFVuaXggdmVyc2lvbiwgcmVwbGFjZSAiZXh0ZXJuIGludCBlcnJubzsiIHdpdGggIiNpbmNsdWRl IDxlcnJuby5oPiIKLWlmIF9fR0xJQkNfXyBpcyBkZWZpbmVkLCBzaW5jZSBnbGliYyBub3cgZGVm aW5lcyBhIHRocmVhZC1zcGVjaWZpYyBlcnJuby4KLWNrY2RlYi5oLCAyNiBGZWIgMjAwMy4KLQot QWRkZWQgI2lmZGVmcyB0byBza2lwIGNvbXBpbGF0aW9uIG9mIGNrdWF0aC5jIGluIG5vbnNlY3Vy ZSBidWlsZHMuICBUZXN0ZWQKLWJ5IGJ1aWxkaW5nIGJvdGggc2VjdXJlIGFuZCByZWd1bGFyIHZl cnNpb25zIGluIExpbnV4LiAgY2t1YXRoLmMsIDI2IEZlYiAyMDAzLgotCi1SYW4gdGhlIGJ1aWxk LWluLTg0LWRpZmZlcmVudC1jb25maWd1cmF0aW9ucyBzY3JpcHQgb24gTGludXggdG8gbWFrZSBz dXJlIGl0Ci1zdGlsbCBidWlsZHMgd2l0aCBhbGwgZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBvZiBm ZWF0dXJlIHNlbGVjdGlvbiBvcHRpb25zLgotQWxsIE9LLiAgMjYgRmViIDIwMDMuCi0KLUJ1aWx0 IG9uIFZNUy4gIE5lZWRlZCB0byBhZGQgYSBwcm90b3R5cGUgZm9yIG14eGxvb2sqKCkgdG8gY2t1 dXNyLmg7IGJ1aWx0Ci1PSyBvdGhlcndpc2UuICAyNiBGZWIgMjAwMy4KLQotRnJvbSBKZWZmOiBN b3JlICNpZmRlZiBzaHVmZmxpbmcgZm9yIG5vbnNlY3VyZSBidWlsZHM6IGNrdWF0aC5jLCBja19z c2wuYywKLTI3IEZlYiAyMDAzLgotCi1BZGRlZCBjb2RlIHRvIGVuc3VyZSBcdihkb3dubG9hZCkg ZW5kcyBpbiBhIGRpcmVjdG9yeSBzZXBhcmF0b3IgaW4gVW5peCwKLVdpbmRvd3MsIGFuZCBPUy8y LiAgY2t1dXM3LmMsIDI3IEZlYiAyMDAzLgotCi1BZGRlZCBjb2RlIHRvIEs5NSB6Zm5xZnAoKSB0 byB0YWNrIG9uIGRpcmVjdG9yeSBzZXBhcmF0b3Igd2hlbiByZXR1cm5pbmcKLWEgZGlyZWN0b3J5 IG5hbWUuICBja29maW8uYywgMjcgRmViIDIwMDMuCi0KLVNvbWVob3cgYW4gb2xkIGNvcHkgb2Yg Y2t1YXRoLmMgcG9wcGVkIHRvIHJlcGxhY2UgdGhlIG5ldyBvbmUuICBQdXQgdGhlIG5ldwotb25l IGJhY2suICAyOCBGZWIgMjAwMy4KLQotRnJvbSBKZWZmOiBGaXggdHlwbyBpbiBteSBLOTUgemZu cWZwKCkgY29kZSBmcm9tIHllc3RlcmRheTsgZml4ZXMgZm9yIGhhbmRsaW5nCi1VTkNzIHVuaWZv cm1seSwgbm8gbWF0dGVyIHdoaWNoIHdheSB0aGVpciBzbGFzaGVzIGFyZSBsZWFuaW5nLiAgY2tv ZmlvLmMsCi0yOCBGZWIgMjAwMy4KLQotQXQgSmVmZiBNZXplaSdzIHN1Z2dlc3Rpb24sIHNlcGFy YXRlIHRleHQgYW5kIGJpbmFyeSBtb2RlIG9wZW4gc2VxdWVuY2VzCi1mb3IgVk1TIHNlc3Npb24g bG9nLiAgY2t2ZmlvLmMsIDI4IEZlYiAyMDAzLgotCi1BZGRlZCBmcmVlYnNkNDggdGFyZ2V0IGZv ciBGcmVlQlNEIDQuOC4gIG1ha2VmaWxlLCAxIE1hciAyMDAzLgotCi1DaGFuZ2VkIE1hYyBPUyBY IGVudHJpZXMgdG8gaW5jbHVkZSAtRFVTRV9TVFJFUlJPUi4gIG1ha2VmaWxlLCAyIE1hciAyMDAz LgotCi1GaXhlZCBHRVRPSyAvR1VJIHRvIGV2YWx1YXRlIGl0cyB0ZXh0IGFyZ3VtZW50LiAgY2t1 dXM2LmMsIDMgTWFyIDIwMDMuCi0KLUplZmYgZml4ZWQgdGhlIEs5NSBEaWFsZXIgUVVJQ0sgZGlh bG9nIHRvIChhKSBhbGxvdyB0ZW1wbGF0ZXMsIGFuZCAoYikgaGF2ZQotYSBTYXZlLUFzIG9wdGlv bi4gIDMgTWFyIDIwMDMuCi0KLUplZmYgZml4ZWQgYSBwcm9ibGVtIHdpdGggdGhlIFhtb2RlbS1D UkMgY2hlY2tzdW0gYmVpbmcgY3J1bmNoZWQgd2hlbmV2ZXIKLXRoZXJlIHdhcyBhIHJldHJhbnNt aXNzaW9uLiAgNyBNYXIgMjAwMy4KLQotQWRkZWQgdGFyZ2V0L2Jhbm5lciBmb3IgVHJ1NjQgNS4x Qi4gIG1ha2VmaWxlLCBja3V2ZXIuaCwgNSBNYXIgMjAwMy4KLQotSW4gVW5peCwgdGhlIHpjb3B5 KCkgcm91dGluZSAodXNlZCBieSB0aGUgQ09QWSBjb21tYW5kKSByZXNldCB0aGUgdXNlcidzIHVt YXNrCi10byAwIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBLZXJtaXQgcHJvY2VzcyBsaWZldGlt ZS4gIFRoZSBidWcgd2FzIGluCi1ja3VmaW8uYyA4LjAuMTk0LCAyNCBPY3QgMjAwMiwgYW5kIGlz IGZpeGVkIGluIGNrdWZpby5jIDguMC4xOTUsIDYgTWFyIDIwMDMuCi1PZiBjb3Vyc2UgdGhpcyBo YXBwZW5lZCBhZnRlciBidWlsZGluZyAxNTUgQy1LZXJtaXQgOC4wLjIwOCBiaW5hcmllcy4gIChC dXQKLWJlZm9yZSBvZmZpY2lhbGx5IHJlbGVhc2luZyA4LjAuMjA4LikKLQotSW4gdGhlIFZNUyB2 ZXJzaW9uLCBjaGFuZ2VkOgotCi0gICAgICAgIHdoaWxlICgobi0tKSAmJiB4eF9pbmMoMikgPiAt MSkgOwotdG86Ci0gICAgICAgIHdoaWxlICgobi0tKSAmJiB4eF9pbmMoMikgPj0gMCkgOwotCi10 byBzdXBwcmVzcyB0aGUgIi4uLmlzIGJlaW5nIGNvbXBhcmVkIHdpdGggYSByZWxhdGlvbmFsIG9w ZXJhdG9yIHRvIGEgY29uc3RhbnQKLXdob3NlIHZhbHVlIGlzIG5vdCBncmVhdGVyIHRoYW4gemVy byIgd2FybmluZy4gIGNrdnRpby5jLCA3IE1hciAyMDAyLgotCi1BZGRlZCBhIGRlYnVnIGNhbGwg dG8gZG9sb2dlbmQgaW4gaG9wZXMgb2YgY2F0Y2hpbmcgb3ZlcnplYWxvdXMgTG9jdXMKLXN3aXRj aGluZywgd2hpY2ggc2VlbXMgdG8gaGFwcGVuIG9ubHkgaW4gSzk1LiAgY2t1dXMzLmMsIDcgTWFy IDIwMDIuCi0KLVJlYnVpbHQgYmluYXJpZXMgZm9yIHNvbWUgb2YgdGhlIG1vcmUgY3VycmVudCBV bml4IHJlbGVhc2VzOiBBSVggNC4zLjMtNS4xLAotU29sYXJpcyA3LTkgLCBSZWQgSGF0IDcuMC04 LjAsIFNsYWNrd2FyZSA4LjEsIEZyZWVic2QgNC43LTQuOCwgTmV0QlNEIDEuNiwKLU9wZW5CU0Qg My4yLCBVbml4d2FyZSA3LjEuMywgT3BlbiBVbml4IDgsIE9TUjUuMC42YSwgZXRjLiAgQSBVbml4 IGJpbmFyeSB3aXRoCi1DT1BZIHVtYXNrIGZpeCBzaG93cyBhIDYgTWFyIDIwMDMgZGF0ZSBmb3Ig IlVOSVggRmlsZSBzdXBwb3J0IiBpbiBTSE9XCi1WRVJTSU9OUzsgYSBiaW5hcnkgd2l0aG91dCB0 aGUgZml4IHNob3dzIDI0IE9jdCAyMDAyLgotCi1DLUtlcm1pdCA4LjAuMjA4IGRhdGVkIDE0IE1h cmNoIDIwMDMgcmVsZWFzZWQgb24gMTAgTWFyY2ggMjAwMy4KLQotLS0tOC4wLjIwOC0tLQotCi1G cm9tIEplZmYgMTMgTWFyIDIwMDM6Ci0gLiBVcGRhdGVkIFNTTCBtb2R1bGUgYWxsb3dzIGltcG9y dGF0aW9uIG9mIHRpY2tldHMgZnJvbSBob3N0LgotIC4gZnJlZWJzZDUwK29wZW5zc2wgdGFyZ2V0 OiBtYWtlZmlsZS4KLSAuIEZUUCBQVVQgL1BFUk1JU1NJT05TIGVycm9yIG1lc3NhZ2UgZm9yIEs5 NTogY2tjZnRwLmMuCi0gCi1GaXhlZCBNSU5QVVQgdG8gc3RyaXAgcXVvdGVzIG9yIGJyYWNlcyBm cm9tIGFyb3VuZCB0YXJnZXRzICh0aGlzIHdhcyBicm9rZW4KLW9uIEZlYiAxMHRoKS4gIFRoYW5r cyB0byBKYXNvbiBIZXNrZXR0IGZvciBkaXNjb3ZlcmluZyBhbmQgcmVwb3J0aW5nIHRoaXMKLShr aWxsZXIpIGJ1Zy4gIGNrdXVzci5jLCAxNCBNYXIgMjAwMy4KLQotQ2hhbmdlZCB2ZXJzaW9uIG51 bWJlciB0byAyMDkgRGV2LjAwLiAgY2tjbWFpLmMsIDE0IE1hciAyMDAzLgotCi1XaGlsZSBkZWJ1 Z2dpbmcgdGhlIGFscGhhcGFnZSBzY3JpcHQsIEkgZm91bmQgdGhhdCB0aGUgY29tbWFuZCAibWlu cHV0IDggXDZcMTMKLVwyMVwxMyBcMTNcMjdcNFwxMyBcMzBcMTMiIGdldHMgIj9Ob3QgY29uZmly bWVkIiBpbiA4LjAuMjA4IGFuZCA4LjAuMjA5LCBidXQKLW5vdCBpbiAyMDYgYW5kIGVhcmxpZXIu ICBUaGlzIHByb2JsZW0gdG9vIHdhcyBpbnRyb2R1Y2VkIG9uIEZlYiAxMHRoIGJ5Ci1jaGFuZ2lu ZyBNSU5QVVQgcGFyc2luZyBmcm9tIGNtdHh0KCkgZm9sbG93ZWQgYnkgY2tzcGxpdCgpIHRvIGNt ZmxkKCkgaW4gYQotbG9vcC4gIGNtZmxkKCkgdXNlcyBzZXRhdG0oKSB0byByZXR1cm4gaXRzIHJl c3VsdCBhbmQgb2YgY291cnNlIHNldGF0bSgpCi1icmVha3Mgb24gXDEzLiAgQ2hhbmdpbmcgc2V0 YXRtKCkgbm90IHRvIGRvIHRoaXMgd291bGQgYnJlYWsgZXZlcnl0aGluZyBlbHNlLgotQnV0IGNt ZmxkKCkgaGFzIG5vIGFyZ3VtZW50cyB0aGF0IGxldCB1cyB0ZWxsIGl0IHRvIGRvIGFueXRoaW5n IGRpZmZlcmVudCBpbgotdGhpcyBjYXNlLiAgQ2hhbmdpbmcgdGhlIEFQSSB3b3VsZCBiZSBhIGRp c2FzdGVyLiAgVGhlIG9ubHkgc29sdXRpb24gaXMgdG8gYWRkCi1hbiAiTUlOUFVUIEFDVElWRSIg KG1pbnB1dGFjdGl2ZSkgZ2xvYmFsIHZhcmlhYmxlIHRoYXQgdGVsbHMgY21mbGQoKSB0byB0ZWxs Ci1zZXRhdG0oKSBub3QgdG8gYnJlYWsgb24gQ1IuICBOb3cgTUlOUFVUIHdpdGggYnJhY2VkIHRh cmdldHMgY29udGFpbmluZyBDUgotYW5kL29yIExGIHdvcmtzIGluIDIwOSwgMjA2LCBhbmQgMjAx IChidXQgbm90IDIwOCkuICBja3VjbWQuYywgY2t1dXNyLmMsCi1ja3V1czUuYywgMTUgTWFyIDIw MDMuCi0KLU1JTlBVVCBuIFxmam9pbigmYSkgd29ya3MgT0sgaWYgYWxsIHRoZSBtZW1iZXJzIG9m IFwmYVtdIGFyZSB0ZXh0IHN0cmluZ3MsIGJ1dAotaWYgdGhleSBhcmUgc3RyaW5ncyBvZiBjb250 cm9sIGNoYXJzIChhcyBhYm92ZSksIHRoZXkgZG9uJ3QgZ2V0IHNlcGFyYXRlZCBieQotdGhlIHNw YWNlcy4gIEZvciBleGFtcGxlIGluOgotCi0gIGRjbCBcJmFbXSA9ICJcNFw1IiAiXDZcNyIgeHh4 Ci0gIG1pbnB1dCAxMCBcZmpvaW4oJmEpCi0KLU1JTlBVVCBnZXRzIHR3byB0YXJnZXRzOiAiYWFh IiBhbmQgIlw0XDUgXDZcNyB4eHgiLiAgVGhlIGJ1ZyB3YXMgaW4gdGhlCi1ja3NwbGl0KCkgY2Fs bCBpbiB0aGUgXGZqb2luKCkgY2FzZSBvZiBNSU5QVVQ6IGl0IG5lZWRlZCB0byBzcGVjaWZ5IGFu Ci1pbmNsdWRlIHNldCBjb25zaXN0aW5nIG9mIGFsbCB0aGUgY29udHJvbCBjaGFyYWN0ZXJzIGV4 Y2VwdCBOVUwuICBja3V1c3IuYywKLTE2IE1hciAyMDAzLgotCi1CdXQgdGhlcmUncyBzdGlsbCBh IHByb2JsZW06Ci0KLSAgZGNsIFwmYVtdID0gIlw0XDVcMTNcMTAiICJcNlw3IiAieHh4IgotCi1j cmVhdGVzIGFuIGFycmF5IHdob3NlIGZpcnN0IG1lbWJlciBpcyAiXkReRSAob25lIGRvdWJsZXF1 b3RlIGluY2x1ZGVkKS4gIEJ1dAotaWYgYnJhY2VzIGFyZSB1c2VkIGluc3RlYWQsIHRoZXJlJ3Mg bm8gcHJvYmxlbS4gIFNhbWUgZGVhbCBhcyBNSU5QVVQ6IGNtZmxkKCkKLWJyZWFrcyBvbiBDUiBv ciBMRiwgdGh1cyB0aGUgZW5kIHF1b3RlIGlzIGxvc3QuICBJZiBJIHNldCBtaW5wdXRhY3RpdmUg Zm9yCi1ERUNMQVJFIGluaXRpYWxpemVycyB0b28sIHRoYXQgZml4ZXMgaXQuICBJcyB0aGVyZSBh bnkgcmVhc29uIG5vdCB0byBkbyB0aGlzPwotQ2FuJ3QgdGhpbmsgb2YgYW55IChmYW1vdXMgbGFz dCB3b3JkcykuLi4gIGNrdXVzci5jLCAxNiBNYXIgMjAwMy4KLQotU2luY2UgaXQgaGFzIG11bHRp cGxlIGFwcGxpY2F0aW9ucywgY2hhbmdlZCB0aGUgZmxhZydzIG5hbWUgZnJvbSBtaW5wdXRhY3Rp dmUKLXRvIGtlZXBhbGxjaGFycy4gIGNrdWNtZC5jLCBja3V1c1tyNV0uYywgMTYgTWFyIDIwMDMu Ci0KLVx2KGV4ZWRpcikgd2Fzbid0IGJlaW5nIHNldCBjb3JyZWN0bHkgKGl0IGluY2x1ZGVkIHRo ZSBwcm9ncmFtIG5hbWUgYXMgd2VsbAotYXMgdGhlIGRpcmVjdG9yeSkuICBGaXhlZCBpbiBnZXRl eGVkaXIoKTogY2t1dXM0LmMsIDE2IE1hciAyMDAzLgotCi1TRVQgQ0FSUklFUi1XQVRDSCA8RXNj PiAiYXV0byBtYXRpYyIgKHNwdXJpb3VzIHNwYWNlIGluIHN1cHBsaWVkIGtleXdvcmQpLgotQ29z bWV0aWMgb25seTsgaXQgc3RpbGwgd29ya2VkLiAgRml4ZWQgaW4gc2V0ZGNkKCk6IGNrdXVzMy5j LCAxNiBNYXIgMjAwMy4KLQotImRpcmVjdG9yeSBhIGIgYyIgbGlzdGVkIHRvbyBtYW55IGZpbGVz IC0tIGFsbCBmaWxlcyB3aG9zZSBuYW1lcyBFTkQgV0lUSCBhLAotYiwgb3IgYywgcmF0aGVyIHRo YW4gdGhlIGZpbGVzIHdob3NlIG5hbWVzIFdFUkUgYSwgYiwgb3IgYy4gIERpYWdub3NpczogVGhl Ci1maWxlc3BlYyBpcyBjaGFuZ2VkIGludG8gYSBwYXR0ZXJuOiB7YSxiLGN9LCB3aGljaCBpcyB0 aGUgY29ycmVjdCBmb3JtLiAgSXQgaXMKLXBhc3NlZCB0byBuenhwYW5kKCksIHdoaWNoIGdvZXMg dGhyb3VnaCB0aGUgZGlyZWN0b3J5IGdldHRpbmcgZmlsZW5hbWVzIGFuZAotc2VuZGluZyBlYWNo IG9uZSB0byBja21hdGNoKCkgd2l0aCB0aGUgZ2l2ZW4gcGF0dGVybi4gIGNrbWF0Y2goKSByZWNl aXZlcyB0aGUKLWNvcnJlY3QgcGF0dGVybiBidXQgdGhlbiBwcmVwZW5kcyBhICIqIiAtLSB0aGF0 J3Mgbm90IHJpZ2h0LiAgSXQncyBub3QganVzdAotaW4gZmlsZW5hbWUgbWF0Y2hpbmcgZWl0aGVy LiAgVGhlIGZvbGxvd2luZyBzdWNjZWVkcyB3aGVuIGl0IHNob3VsZG4ndDoKLQotICBpZiBtYXRj aCB4eHh4YyB7e2EsYixjfX0gPGNvbW1hbmQ+Ci0KLUNoYW5naW5nIGNrbWF0Y2goKSB0byBub3Qg cHJlcGVuZCB0aGUgIioiIHRvIGVhY2ggc2VnbWVudCBmaXhlcyB0aGUgY29tbWFuZAotYWJvdmUg YnV0IGJyZWFrcyBsb3RzIG9mIG90aGVycy4gIFJ1bm5pbmcgdGhyb3VnaCB0aGUgIm1hdGNoIiB0 b3J0dXJlLXRlc3QKLXNjcmlwdCBzaG93cyB0aGUgcHJvYmxlbSBvY2N1cnMgb25seSB3aGVuIHRo ZSB7YSxiLGN9IGxpc3QgaXMgdGhlIGVudGlyZQotcGF0dGVybiwgYW5kIG5vdCBlbWJlZGRlZCB3 aXRoaW4gYSBsYXJnZXIgcGF0dGVybi4gIFRlc3RpbmcgZm9yIHRoaXMgY2FzZQotZml4ZWQgdGhl IHByb2JsZW0uICBja21hdGNoKCk6IGNrY2xpYi5jLCAxNiBNYXIgMjAwMy4KLQotRml4ZWQgRlRQ IE1PRFRJTUUgdG8gbm90IHByaW50IGFueXRoaW5nIGlmIFFVSUVUIE9OLiAgY2tjZnRwLmMsIDE2 IE1hciAyMDAzLgotCi1QaWNrZWQgdXAgYSBuZXcgY2t1YXRoLmMgZnJvbSBKZWZmLCBub3Qgc3Vy ZSB3aGF0IHRoZSBjaGFuZ2VzIGFyZS4gMTYgTWFyIDIwMDMuCi0KLURpZCBhIGZldyByZWd1bGFy IGFuZCBzZWN1cmUgYnVpbGRzIHRvIG1ha2Ugc3VyZSBJIGRpZG4ndCB3cmVjayBhbnl0aGluZy4K LQotQ2hhbmdlZCB2ZXJzaW9uIG51bWJlciB0byAyMDkgKGZpbmFsKS4gIGNrY21haS5jLCAxNiBN YXIgMjAwMy4KLQotSmFzb24gSGVza2V0dCBmb3VuZCBhbm90aGVyIGJ1ZzogaWYgeW91IGRlZmlu ZSBhIG1hY3JvIEZPTyBpbnNpZGUgdGhlCi1kZWZpbml0aW9uIG9mIGFub3RoZXIgbWFjcm8gQkFS LCBhbmQgRk9PJ3MgZGVmaW5pdGlvbiBpbmNsdWRlcyBhbiBvZGQgbnVtYmVyCi1vZiBkb3VibGVx dW90ZXMgKHN1Y2ggYXMgMSksIEZPTydzIGRlZmluaXRpb24gYWJzb3JicyB0aGUgcmVzdCBvZiBC QVIncwotZGVmaW5pdGlvbi4gIEV4YW1wbGU6Ci0KLSAgZGVmIFRFU1QgewotICAgIC5mb28gPSB7 WCJ9Ci0gICAgc2hvIG1hYyBmb28KLSAgfQotICBkbyB0ZXN0Ci0gIHNobyBtYWMgZm9vCi0KLVJl c3VsdHMgaW46Ci0KLSAgZm9vID0ge1gifSwgc2hvIG1hYyBmb28KLQotRGlhZ25vc2lzOiB0aGUg VEVTVCBkZWZpbml0aW9uIGJlY29tZXM6Ci0KLSAgZGVmIFRFU1QgLmZvbyA9IHtYIn0sIHNobyBt YWMgZm9vCi0KLWFuZCB0aGUgbWFjcm8gcmVhZGVyIGlzIGVycm9uZW91c2x5IHRyZWF0aW5nIHRo ZSBkb3VibGVxdW90ZSBhcyBhbiBvcGVuCi1xdW90ZSwgYW5kIHRoZW4gYXV0b21hdGljYWxseSBj bG9zZXMgdGhlIHF1b3RlIGF0IHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24uCi1UaGUgZXJyb3Ig aXMgdGhhdCBhIGRvdWJsZXF1b3RlIHNob3VsZCBiZSBzaWduaWZpY2FudCBvbmx5IGF0IHRoZSBi ZWdpbm5pbmcgb2YKLWEgZmllbGQuICBCdXQgdGhlIG1hY3JvIHJlYWRlciBpc24ndCBhIGNvbW1h bmQgcGFyc2VyOyBpdCBkb2Vzbid0IGtub3cgd2hhdAotYSBmaWVsZCBpcyAtLSBpdCdzIGp1c3Qg bG9va2luZyBmb3IgY29tbWFzIGFuZCBza2lwcGluZyBvdmVyIHF1b3RlZCBvbmVzLgotRmlyc3Qg d2UgaGF2ZSB0byBmaXggYW4gb3ZlcnNpZ2h0OiBTRVQgQ09NTUFORCBET1VCTEVRVU9USU5HIE9G RiBzaG91bGQgaGF2ZQotd29ya2VkIGhlcmUsIGJ1dCBpdCB3YXNuJ3QgdGVzdGVkIGluIHRoaXMg Y2FzZS4gIEZpeGVkIGluIGdldG5jbSgpOiBja3V1czUuYywKLTE3IE1hciAyMDAzLgotCi1UaGVy ZSBhcmUgb25seSBjZXJ0YWluIGNhc2VzIHdoZXJlIGl0IG1ha2VzIHNlbnNlIHRvIHRyZWF0IGRv dWJsZXF1b3RlcyBhcwotc2lnbmlmaWNhbnQ6Ci0KLSAuIEFuIG9wZW4gcXVvdGUgbXVzdCBiZSBh dCB0aGUgYmVnaW5uaW5nIG9yIHByZWNlZGVkIGJ5IGEgc3BhY2UuCi0gLiBBIGNsb3NlIHF1b3Rl IGlzIG9ubHkgYXQgdGhlIGVuZCBvciBlbHNlIGZvbGxvd2VkIGJ5IGEgc3BhY2UuCi0KLVRoaXMg dG9vIHdhcyBmaXhlZCBpbiBnZXRuY20oKTogY2t1dXM1LmMsIDE3IE1hciAyMDAzLgotCi1BIGZp eCBmcm9tIEplZmYgU1NML1RMUyBGVFAgZGF0YSBkZWNvZGluZy4gIGNrY2Z0cC5jLCAxOCBNYXIg MjAwMy4KLQotVHJpZWQgYnVpbGRpbmcgQy1LZXJtaXQgb24gYSBDcmF5IFktTVAgd2l0aCBVTklD T1MgOS4wLiAgImludCBzdXNwZW5kIiwKLWRlY2xhcmVkIGluIGNrY21haS5jIGFuZCB1c2VkIGlu IG1hbnkgbW9kdWxlcywgY29uZmxpY3RzIHdpdGg6Ci0KLSAgdW5pc3RkLmg6ZXh0ZXJuIGludCBz dXNwZW5kIF9fKChpbnQgX0NhdGVnb3J5LCBpbnQgX0lkKSk7Ci0KLVRoZSAiPURzdXNwZW5kPXhz dXNwZW5kIiB0cmljayBkb2Vzbid0IHdvcmsgZm9yIHRoaXM7IHRoZXJlIGlzIG5vIHdheSBhcm91 bmQKLXRoZSBjb25mbGljdCBvdGhlciB0aGFuIHRvIHJlbmFtZSB0aGUgdmFyaWFibGU6IGNrY21h aS5jLCBja3V0aW8uYywKLWNrdXVzWzM1eHldLmMuICAyNiBNYXIgMjAwMy4gIFZNUyBhbmQgSzk1 IG5vdCBhZmZlY3RlZC4KLQotT0sgdGhhdCBnZXRzIHVzIHBhc3QgY2tjbWFpLmMuLi4gIFRoZW4g aW4gY2t1dGlvLmMgSSBoYWQgdG8gYWRkIGEgbmV3ICNpZmRlZgotYXJvdW5kIHRoZSBMRkRFVk5P IHNldHRpbmcsIGJlY2F1c2UgdGhlIENyYXkgZGlkbid0IGhhdmUgbWtkZXYuaC4gIENvdWxkIG5v dAotZmluZCBhIENyYXktc3BlY2lmaWMgbWFuaWZlc3Qgc3ltYm9sLCBzbyBJIG1hZGUgYSBuZXcg bWFrZWZpbGUgdGFyZ2V0IChjcmF5OSkKLXRoYXQgc2V0cyB0aGlzIHN5bWJvbC4gIEhhdmluZyBk b25lIHRoaXMgSSBoYXZlIG5vIGlkZWEgd2hhdCBraW5kIG9mIGxvY2tmaWxlCi13b3VsZCBiZSBj cmVhdGVkLCBidXQgSSBhbHNvIGRvdWJ0IGlmIGFueWJvZHkgZGlhbHMgb3V0IGZyb20gYSBDcmF5 LiAgVGhlCi1iaW5hcnkgc2hvdWxkIHJ1biBhIEM5MCwgSjkwLCBvciBZLU1QLiAgbWFrZWZpbGUs IDI2IE1hciAyMDAzLgotCi1BZGRlZCBhIHRhcmdldCBmb3IgU0NPIE9TUjUuMC43LiAgbWFrZWZp bGUsIGNrdXZlci5oLCAzMCBNYXIgMjAwMy4KLQotQ2hhbmdlZCBzaW5jZSAyMDg6Ci1tYWtlZmls ZSBja3V2ZXIuaCBja2NtYWkuYyBja2NsaWIuYyBja2NmdHAuYyBja3VjbWQuYyBja3V1cyouYyBj a3V0aW8uYy4KLQotLS0tOC4wLjIwOS0tLQotCi1Gcm9tIE1hcmsgU2FwaXJvLCBhIGZpeCBmb3Ig dGhlIE1hcmNoIDE3dGggZG91YmxlcXVvdGUgZml4LCBnZXRuY20oKTogY2t1dXM1LmMsCi00IEFw ciAyMDAzLgotCi1Gcm9tIEplZmYsIDI5IEFwciAyMDAzOgotIC4gQ29ycmVjdGVkIHRhcmdldCBm b3IgSFAtVVggMTEuMDAgKyBPcGVuU1NMOiBtYWtlZmlsZSwgCi0gLiBEbyBub3QgYWxsb3cgV0lM TCBBVVRIIGJlZm9yZSBXT05UIFNUQVJUX1RMUzogY2tjdGVsLmggY2tjdGVsLmMKLSAuIEFkZCBo b29rcyBmb3IgU0ZUUCBhbmQgU0VUL1NIT1cgU0ZUUDogY2tjZGViLmggY2t1dXNyLmggY2t1dXNy LmMgY2t1dXMzLmMKLSAuIEFkZCBTS0VSTUlUIGNrdXVzci5oIGNrdXVzci5jCi0gLiBBZGQgQURN LTUgdGVybWluYWwgZW11bGF0aW9uOiBja3V1czcuYywgY2t1dXM1LmMKLSAuIFVuY29tbWVudCBh bmQgdXBkYXRlIEhFTFAgU0VUIFNTSCBWMiBBVVRPLVJFS0VZOiBja3V1czIuYwotIC4gRW5hYmxl IElGIFRFUk1JTkFMLU1BQ1JPIGFuZCBJRiBTVEFSVEVELUZST00tRElBTEVSIGZvciBDLUtlcm1p dDogY2t1dXM2LmMKLSAuIEZpeCBjb25mbGljdGluZyBOT1NDUk9MTCBrZXl3b3JkIGRlZmluaXRp b246IGNrdXVzci5oCi0gLiBTZXQgdHRuYW1lIHdoZW4gSV9BTV9TU0g6IGNrdXVzeS5jCi0gLiBB ZGQgZXh0ZW5kZWQgYXJnIHBhcnNpbmcgZm9yIFNTSCwgUmxvZ2luLCBUZWxuZXQ6IGNrdXVzeS5j LCBja3V1czQuYwotIC4gU2VjdXJpdHkgdXBkYXRlczogY2t1YXRoLmMsIGNrX3NzbC5jCi0gLiBD aGFuZ2UgSzk1IHZlcnNpb24gbnVtYmVyIHRvIDIuMi4wOiBja2NtYWkuYwotIC4gU2F2ZSBLOTUg dGVybSBpL28gc3RhdGUgYmVmb3JlIGV4ZWN1dGluZyBrZXlib2FyZCBtYWNybzogY2t1dXM0LmMK LSAuIEFkZCB0ZXN0cyBmb3IgU1NIIFN1YnN5c3RlbSBhY3RpdmUgZHVyaW5nIElOUFVUL09VVFBV VC9DT05ORUNUOiBja3V1c1s0NV0uYwotIC4gRW5hYmxlIEs5NSBTRVQgU1NIIFYyIEFVVE8tUkVL RVk6IGNrdXVzMy5jCi0KLVNGVFAgYW5kIFNFVCBTRlRQIHN1YmNvbW1hbmRzIGFyZSBpbXBsZW1l bnRlZCB1cCB0byB0aGUgY2FzZSBzdGF0ZW1lbnRzLgotCi1GaWxlcyBvZiBtaW5lIHRoYXQgSmVm ZiBoYWRuJ3QgcGlja2VkIHVwOgotICBja3V2ZXIuaCBja2NmdHAuYyBja3V0aW8uYyBja3V1c3gu YyAoanVzdCBtaW5vciBjaGFuZ2VzIGZvciBsYXN0IGJ1aWxkLWFsbCkKLQotT24gNCBKYW4gMjAw MywgU0VUIFJFQ0VJVkUgTU9WRS1UTyB3YXMgY2hhbmdlZCB0byBjb252ZXJ0IGlzIGFyZ3VtZW50 IHRvIGFuCi1hYnNvbHV0ZSBwYXRoLCB3aGljaCBtYWRlIGl0IGltcG9zc2libGUgdG8gc3BlY2lm eSBhIHJlbGF0aXZlIHBhdGgsIHRoZW4KLW1vdmUgdG8gZGlmZmVyZW50IGRpcmVjdG9yaWVzIGFu ZCBoYXZlIGl0IGFwcGx5IHJlbGF0aXZlbHkgdG8gZWFjaCBkaXJlY3RvcnkuCi1DaGFuZ2VkIHRo aXMgYXMgZm9sbG93czoKLQotIC4gUGFyc2VyIHVzZXMgY210eHQoKSByYXRoZXIgdGhhbiBjbWRp cigpIHNvIGl0IHdvbid0IGZhaWwgYXQgcGFyc2UgdGltZS4KLSAuIElmIHBhdGggaXMgYWJzb2x1 dGUsIHdlIGZhaWwgYXQgcGFyc2UgdGltZSBpZiBkaXJlY3RvcnkgZG9lc24ndCBleGlzdC4KLSAu IEluIHJlb2YoKSB3ZSBydW4gdGhlIHRoZSBwYXRoIHRocm91Z2ggeHhzdHJpbmcgKGFnYWluLCBp biBjYXNlIGRlZmVycmVkCi0gICBldmFsdWF0aW9uIG9mIHZhcmlhYmxlcyBpcyBkZXNpcmVkKSBh bmQgdGhlbiwgaWYgbm90IG51bGwsIHVzZSBpdC4KLSAuIElmIHRoZSBkaXJlY3RvcnkgZG9lc24n dCBleGlzdCwgcmVuYW1lKCkgZmFpbHMgYW5kIHJlb2YoKSByZXR1cm5zIC00LAotICAgcmVzdWx0 aW5nIGluIGEgcHJvdG9jb2wgZXJyb3IgKHRoaXMgaXMgbm90IGEgY2hhbmdlKS4gIFdlIGRvIE5P VCBjcmVhdGUKLSAgIHRoZSBkaXJlY3Rvcnkgb24gdGhlIGZseS4gCi0KLUkgYWxzbyBmaXhlZCBT RVQgU0VORC9SRUNFSVZFIFJFTkFNRS1UTyB0byBwYXJzZSB3aXRoIGNtdHh0KCkgcmF0aGVyIHRo YW4KLWNtZGlyKCksIHNpbmNlIGl0J3MgcGFyc2luZyBhIHRleHQgdGVtcGxhdGUsIG5vdCBhIGRp cmVjdG9yeSBuYW1lLCBlLmcuCi0ic2V0IHJlY2VpdmUgcmVuYW1lLXRvIGZpbGUtXHYodGltZSkt dihkYXRlKS1cdihwaWQpIi4gIFRoaXMgd2FzIHRvdGFsbHkKLWJyb2tlbiwgc2luY2Ugd2hlbiBJ IGRvbid0IGtub3cuICBXZSBkb24ndCBjYWxsIHh4c3RyaW5nKCkgaW4gdGhpcyBwYXJzZSwgc28K LWV2YWx1YXRpb24gaXMgYWx3YXlzIGRlZmVycmVkIC0tIEknZCBiZXR0ZXIgbm90IGNoYW5nZSB0 aGlzLiAgY2t1dXM3LmMsCi1ja2NmbnMuYywgMSBNYXkgMjAwMy4KLQotRnJvbSBKZWZmLCBTYXQg TWF5ICAzIDE0OjE1OjIzIDIwMDM6Ci0gLiBQaWNrIHVwIHRoZSByaWdodCBpc2FzY2lpIGRlZmlu aXRpb24gZm9yIEs5NTogY2tjdGVsLmMKLSAuIG1hbGxvYy4uLiAgY2t1YXRoLmMgKG5ldyBzYWZl IG1hbGxvYyByb3V0aW5lcyBmb3IgSzk1KQotIC4gQWRkIGF1dGhvciBsaXN0aW5nOiBja3V1czUu YwotIC4gU1NIIEhlYXJ0YmVhdCBzdXBwb3J0IChLOTUgb25seSk6IGNrdXVzWzIzXS5jCi0gLiBQ cmVzY2FuIC0taGVpZ2h0IGFuZCAtLXdpZHRoIHRvIGF2b2lkIHdpbmRvdyByZXNpemluZyBhdCBz dGFydHVwOiBja3V1c3kuYwotIC4gQWRkIGNoZWNrcyBmb3IgZmF0YWwoKSBvciBkb2V4aXQoKSBj YWxsZWQgZnJvbSBzeXNpbml0KCk6IGNrdXVzeC5jCi0gLiBNb3ZlIHNvbWUgSzk1LXNwZWNpZmlj IGRlZmluaXRpb25zIHRvIGNrb2tlci5oOiBja2NkZWIuaAotIC4gQWRkIHN1cHBvcnQgZm9yIE9O X0NEIG1hY3JvIGluIHpjaGRpcigpOiBja3VmaW8uYwotIC4gQWRkIGEgY29tbWFuZCB0byBsZXQg RlRQIGNsaWVudCBhdXRoZW50aWNhdGUgd2l0aCBTU0x2MjogY2tjZnRwLmMKLSAuIEZpeCBwYXJz aW5nIG9mIEZUUCBmaWxlIGZhY3RzIGxpa2UgIlVOSVgubW9kZSI6IGNrY2Z0cC5jCi0KLU9OX0NE IHdpbGwgbmVlZCBzb21lIGV4cGxhaW5pbmcgKHRvIGJlIGRvbmUpLiAgSXQncyBpbXBsZW1lbnRl ZCBmb3IgVW5peCwKLVZNUywgV0luZG93cywgYW5kIE9TLzIuCi0KLVRoZSBGVFAgZmlsZSBmYWN0 cyBmaXggY2FtZSBmcm9tIGZpcnN0IGV4cG9zdXJlIHRvIHRoZSBuZXcgT3BlbkJTRCBGVFAKLXNl cnZlcjogZnRwOi8vZnRwNy51c2Eub3BlbmJzZC5vcmcvcHViL29zL09wZW5CU0QvMy4zL2kzODYv Ci1UaGUgcGVyaW9kIGluICJVTklYLm1vZGUiIGNhdXNlZCBhbiBlcnJvbmVvdXMgd29yZCBicmVh aywgYWRkaW5nIGp1bmsgdG8KLXRoZSBmaWxlbmFtZS4KLQotQWJvdXQgdGhlIG1hbGxvYyBjaGFu Z2VzLCBKZWZmIHNheXMgIks5NSBpcyBub3QgYmVoYXZpbmcgd2VsbCBpbiBsb3cgbWVtb3J5Ci1l bnZpcm9ubWVudHMuICBJJ20gbm90IHN1cmUgdGhhdCBDLUtlcm1pdCBkb2VzIG11Y2ggYmV0dGVy LiAgVGhlIHByb2dyYW0gZG9lcwotbm90IGNyYXNoIGJ1dCBpdCBjZXJ0YWlubHkgZG9lcyBub3Qg YmVoYXZlIHRoZSB3YXkgdGhlIHVzZXIgZXhwZWN0cyBpdCB0by4KLUknbSBiZWdpbm5pbmcgdG8g dGhpbmsgdGhhdCBhbnkgbWFsbG9jKCkgZXJyb3Igc2hvdWxkIGJlIHRyZWF0ZWQgYXMgZmF0YWwu IgotCi1Ob3QgdmlzaWJsZSBpbiB0aGVzZSBjaGFuZ2VzIGJlY2F1c2UgaXQncyBpbiBLOTUtc3Bl Y2lmaWMgbW9kdWxlczogSmVmZiBtYWRlCi1TRVQgQVRUUklCVVRFUyBPRkYgYW5kIFNFVCBBVFRS SUJVVEVTIERBVEUgT0ZGIGFwcGx5IHRvIFhZWk1PREVNIHRyYW5zZmVycy4KLQotRnJvbSBKZWZm LCAxMSBNYXkgMjAwMzoKLSAuIEFkZCBzdXBwb3J0IGZvciBTU0ggS2VlcGFsaXZlIHRvIHJlbGV2 YW50IFNFVCBjb21tYW5kIChLOTUpOiBja3V1czMuYwotIC4gUmVkdWNlIG1heCBvdmVybGFwcGVk IGkvbyByZXF1ZXN0cyBmcm9tIDMwIHRvIDcgKEs5NSk6IGNrdXVzNy5jCi0gLiBEb24ndCBjYWxs IHN5c2luaXQoKSBpbiBmYXRhbCgpOiBja3V1c3guYy4KLSAuIFNvbWUgbmV3IGNvbmRpdGlvbmFs aXphdGlvbnMgZm9yIFNTTCBtb2R1bGU6IGNrX3NzbC5jCi0KLVRoZSBkb3VibGVxdW90ZS1wYXJz aW5nIGZpeGVzIGZyb20gTWFyY2ggYW5kIEFwcmlsIGJyb2tlIHRoZSBTV0lUQ0ggc3RhdGVtZW50 LAotd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgaW50ZXJuYWxseSBkZWZpbmluZywgdGhlbiBleGVj dXRpbmcsIGEgbWFjcm8uICBJZiBJCi1kcm9wIGJhY2sgdG8gdGhlIG9sZCBkdW1iIGhhbmRsaW5n IG9mIGRvdWJsZXF1b3RlcywgZXZlcnl0aGluZyBpcyBmaXhlZCBleGNlcHQKLXRoZSBwcm9ibGVt IG9mIE1hcmNoIDE3dGguICBCdXQgY2FuIHdlIHJlYWxseSBleHBlY3QgZ2V0bmNtKCkgdG8gcHJl LWd1ZXNzCi13aGF0IHRoZSBwYXJzZXIgaXMgZ29pbmcgdG8gZG8/ICBnZXRuY20oKSdzIG9ubHkg am9iIGlzIHRvIGZpbmQgY29tbWFuZAotYm91bmRhcmllcywgd2hpY2ggYXJlIHJlcHJlc2VudGVk IGJ5IGNvbW1hcy4gIENvbW1hcywgaG93ZXZlciwgaXMgbmVlZGVkIElOCi1jb21tYW5kcyB0b28u ICBXZSB0YWtlIGEgY29tbWEgbGl0ZXJhbGx5IGlmIGl0IGlzIHF1b3RlZCB3aXRoIFwsIG9yIGlz IGluc2lkZQotYSBtYXRjaGVkIHBhaXIgb2YgYnJhY2VzLCBwYXJlbnMsIG9yIGRvdWJsZXF1b3Rl cy4gIEl0IGlzIG5vdCB1bnJlYXNvbmFibGUgdG8KLXJlcXVpcmUgYSBkb3VibGVxdW90ZSBpbiBh IG1hY3JvIGRlZmluaXRpb24gdG8gYmUgcHJlZml4ZWQgYnkgXCB3aGVuIGl0IGlzIHRvCi1iZSB0 YWtlbiBsaXRlcmFsbHkuICBUaGUgcHJvcGVyIHJlc3BvbnNlIHRvIEphc29uIEhlc2tldHQncyBj b21wbGFpbnQgb2YgTWFyY2gKLTE3dGggc2hvdWxkIGhhdmUgYmVlbiB0byBsZWF2ZSB0aGUgY29k ZSBhbG9uZSBhbmQgcmVjb21tYW5kIGFuIGFwcHJvcHJpYXRlCi1mb3JtIG9mIHF1b3Rpbmc6Ci0K LSAgZGVmIFRFU1QgewotICAgICAgLmZvbyA9IHtYXCJ9Ci0gICAgICBzaG8gbWFjIGZvbwotICB9 Ci0KLUFuZCB0aGlzIGlzIHdoYXQgSSBoYXZlIGRvbmUuICBBbm90aGVyIHJlYXNvbiBmb3Igc3Rp Y2tpbmcgd2l0aCB0aGUgb2xkIG1ldGhvZAotaXMgdGhhdCBpdCdzIGV4cGxhaW5hYmxlLiAgVGhl ICJpbXByb3ZlZCIgbWV0aG9kLCBldmVuIGlmIGl0IHdvcmtlZCwgd291bGQgYmUKLWJlIGltcG9z c2libGUgdG8gZXhwbGFpbi4gIEJ0dywgaW4gdGVzdGluZyB0aGlzIEkgbm90aWNlZCB0aGF0IHRo ZSBzd2l0Y2gtdGVzdAotc2NyaXB0IG1hZGUgOC4wLjIwMSBkdW1wIGNvcmUuICBUb2RheSdzIHZl cnNpb24gaXMgZmluZS4gIFRoZSBwcm9ibGVtIHdpdGgKLXF1b3RlZCBzdHJpbmdzIGluc2lkZSBv ZiBJRiB7Li4ufSBjbGF1c2VzIGFuZCBGT1IgYW5kIFdISUxFIGxvb3BzIGlzIGZpeGVkCi10b28u ICBQZXJoYXBzICJ1bmJyb2tlbiIgd291bGQgYmUgYSBiZXR0ZXIgd29yZC4gIGNrdXVzNS5jLCAx MSBNYXkgMjAwMy4KLQotVmFjZSBkaXNjb3ZlcmVkIHRoYXQgRlRQIE1HRVQgL0VYQ0VQVDp7Li4u ICh3aXRoIGFuIHVudGVybWluYXRlZCAvRVhDRVBUIGxpc3QpCi1jb3VsZCBjcmFzaCBLZXJtaXQu ICBGaXhlZCBpbiBja2NmdHAuYywgMTEgTWF5IDIwMDMuCi0KLUNPTlRJTlVFIHNob3VsZCBub3Qg YWZmZWN0IFNVQ0NFU1MvRkFJTFVSRSBzdGF0dXMuICBja3V1c3IuYywgMTEgTWF5IDIwMDMuCi0K LUZpeGVkIGFuIG92ZXJzaWdodCB0aGF0IGdvZXMgYmFjayAxNSB5ZWFycy4gIFdoaWxlIFx7MTIz fSBpcyBhbGxvd2VkIGZvcgotZGVjaW1hbCBjb2RlcywgXHh7MTJ9IGFuZCBcb3sxMjN9IHdlcmUg bmV2ZXIgaGFuZGxlZC4gIGNrdWNtZC5jLCAxMSBNYXkgMjAwMy4KLQotQWRkZWQgc3VwcG9ydCBm b3IgUmVkIEhhdCA8YmF1ZGJveS5oPiBhbmQgL3Vzci9zYmluL2xvY2tkZXYuICBTdXBwb3NlZGx5 IHRoaXMKLWFsbG93cyBLZXJtaXQgdG8gYmUgaW5zdGFsbGVkIHdpdGhvdXQgc2V0dWlkIG9yIHNl dGdpZCBiaXRzIGFuZCBzdGlsbCBiZSBhYmxlCi10byBsb2NrIGFuZCB1c2UgdGhlIHNlcmlhbCBk ZXZpY2UuICBDb21waWxlcyBhbmQgc3RhcnRzLCBidXQgbm90IHRlc3RlZC4KLWNrY2RlYi5oLCBt YWtlZmlsZSwgY2t1dGlvLmMsIGNrdXVzNS5jLCAxNiBNYXkgMjAwMy4KLQotRnJvbSBKZWZmOiBG VFAgQVNDSUkgc2VuZCBkYXRhIHRvIGhvc3Qgd2hlbiBGVFAgL1NTTCB3YXMgaW4gdXNlIHdhcyBi cm9rZW4uCi1mdHBfZHBsIGlzIHNldCB0byBDbGVhciB3aGVuIEZUUCAvU1NMIGlzIGluIHVzZS4g IFRoaXMgd2FzIGNhdXNpbmcgdGhlIGRhdGEgdG8KLWJlIHdyaXR0ZW4gdG8gdGhlIHNvY2tldCB3 aXRoIHNlbmQoKSBpbnN0ZWFkIG9mIHRoZSBPcGVuU1NMIHJvdXRpbmVzLgotY2tjZnRwLmMsIGNr dWF0aC5jLCAyMSBNYXkgMjAwMy4KLQotRnJvbSBKZWZmOiBTdHVmZiBmb3IgS2VyYmVyb3MgNTI0 OiBja2NkZWIuaC4gIEZpeGVzIGZvciBGVFA7ICJGVFAgQVNDSUkgc2VuZAotZGF0YSBkaWQgbm90 IHByb3Blcmx5IGNvbXB1dGUgdGhlIGVuZCBvZiBsaW5lIHRyYW5zbGF0aW9ucy4gIE9uIFVuaXgg KGFuZAotc2ltaWxhciBwbGF0Zm9ybXMpIHRoZSBlbmQgb2YgbGluZSB3YXMgY29ycmVjdCBmb3Ig bm8gY2hhcmFjdGVyIHNldHMgYnV0Ci1pbmNvcnJlY3Qgd2hlbiBjaGFyYWN0ZXIgc2V0cyB3ZXJl IHNwZWNpZmllZC4gIE9uIFdpbmRvd3MvT1MyLCB0aGUgZW5kIG9mIGxpbmUKLXdhcyBjb3JyZWN0 IHdoZW4gY2hhcmFjdGVyIHNldHMgd2VyZSBzcGVjaWZpZWQgYW5kIGluY29ycmVjdCB3aGVuIHRo ZXkgd2VyZQotbm90LiAgT24gTUFDLCBib3RoIHdlcmUgYnJva2VuLiAgQWxzbywgRlRQIFNlbmQg Qnl0ZSBjb3VudHMgd2VyZSBpbmNvcnJlY3QKLXdoZW4gY2hhcmFjdGVyIHNldHMgd2VyZSBzcGVj aWZpZWQuIiAgY2tjZnRwLmMuICAxNyBKdW4gMjAwMy4KLQotRnJvbSBKZWZmOiBmaXhlcyB0byBI VFRQIC9BR0VOVDogYW5kIC9VU0VSOiBzd2l0Y2ggYWN0aW9uOiBja2NuZXQuYyBja3V1czMuYwot Y2tfY3JwLmMgY2tjZnRwLmMgY2t1dXMyLmMgY2t1dXN5LmMgY2t1dXNyLmMgY2tjbmV0LmgsIDIx IEp1biAyMDAzLgotCi1Gcm9tIEplZmY6IEZpeCBTRVQgRElBTEVSIEJBQ0tTUEFDRSBzbyBpdCBj YW4gb3ZlcnJpZGUgYSBwcmV2aW91cyBTRVQgS0VZCi0oZS5nLiBmcm9tIElOSSBmaWxlKTogY2t1 dXM3LmMuICBTb21lIFNTTC9UTFMgdXBkYXRlczogY2tfc3NsLmMuICBIVFRQIHN1cHBvcnQKLWZv ciBWTVMgYW5kIG90aGVyIFZNUyBpbXByb3ZlbWVudHMgKGUuZy4gYSB3YXkgdG8gbm90IGhhdmUg dG8gaGFyZHdpcmUgdGhlCi1DLUtlcm1pdCB2ZXJzaW9uIG51bWJlciBpbnRvIHRoZSBidWlsZCBz Y3JpcHQpIGZyb20gTWFydGluIFZvcmxhZW5kZXI6Ci1ja2NuZXQuaCwgY2t1dXNbcjNdLmMsIGNr Y2RlYi5oLCBja3Z0aW8uYywgY2tjbmV0LmMsIGNrdmtlci5jb20uICBCdWlsdCBvbgotU29sYXJp cyAoZ2NjL2Fuc2kpIGFuZCBTdW5PUyAoY2MvayZyKS4gIFRoZSBuZXcgVk1TIHNjcmlwdCB0ZXN0 cyB0aGUgVk1TCi12ZXJzaW9uIGFuZCBpbmNsdWRlcyBIVFRQIHN1cHBvcnQgb25seSBmb3IgVk1T IDYuMiBvciBsYXRlci4gIDIgSnVsIDIwMDMuCi0KLVRyaWVkIHRvIGJ1aWxkIG9uIG91ciBsYXN0 IFZNUyBzeXN0ZW0gYnV0IGl0IHNlZW1zIHRvIGJlIGRlYWQuICBMb29rcyBsaWtlIGEKLWhlYWQg Y3Jhc2ggKG1ha2VzIHJlYWxseSBsb3VkIG5vaXNlcywgYm9vdCBzYXlzIERLQTAgbm90IHJlY29n bml6ZWQpIChmb29leSwgSQotanVzdCBwYWlkIGdvb2QgbW9uZXkgdG8gcmVuZXcgdGhlIFZNUyBs aWNlbnNlKS4gIFRyaWVkIGJ1aWxkaW5nIGF0IGFub3RoZXIKLXNpdGUgd2l0aDoKLQotICBQcm9j ZXNzIFNvZnR3YXJlIE11bHRpTmV0IFY0LjMgUmV2IEEtWCwKLSAgQ29tcGFxIEFscGhhU2VydmVy IEVTNDAsIE9wZW5WTVMgQVhQIFY3LjMKLSAgQ29tcGFxIEMgVjYuNC0wMDggb24gT3BlblZNUyBB bHBoYSBWNy4zCi0KLUhhZCB0byBtYWtlIGEgZmV3IGNvcnJlY3Rpb25zIHRvIGNrdmtlci5jb20u ICBCdXQgc3RpbGwsIGNvbXBpbGF0aW9uIG9mCi1ja2NuZXQuYyBib21icywgaW5kaWNhdGluZyB0 aGF0IHRoZSBTRUxFQ1QgZGVmaW5pdGlvbiBzb21laG93IGdvdCBsb3N0Ci1zb21ld2hlcmUgc2lu Y2UgdGhlIDIwOSByZWxlYXNlIChpLmUuIG5vIFNFTEVDVCB0eXBlIGlzIGRlZmluZWQgc28gaXQg ZmFsbHMKLXRocnUgdG8gIlNFTEVDVCBpcyByZXF1aXJlZCBmb3IgdGhpcyBjb2RlIikuICBCdXQg SSBkb24ndCBzZWUgYW55dGhpbmcgaW4KLWNrY2RlYi5oIG9yIGNrY25ldC5bY2hdIHRoYXQgd291 bGQgZXhwbGFpbiB0aGlzLiAgTm90IGNrdmtlci5jb20gZWl0aGVyCi0ocHV0dGluZyB0aGUgb2xk IG9uZSBiYWNrIGdpdmVzIHRoZSBzYW1lIHJlc3VsdCkuICBPSywgSSBnaXZlIHVwLCBtYXliZSBp dCdzCi1qdXN0IHRoYXQgSSBoYXZlbid0IHRyaWVkIGJ1aWxkaW5nIGl0IG9uIE11bHRpTmV0IHJl Y2VudGx5LiAgV2hhdCBhYm91dCBVQ1g/Ci1BaGEsIGJ1aWxkcyBmaW5lIHRoZXJlIGV4Y2VwdCBm b3Igd2FybmluZ3MgYWJvdXQgbWxvb2ssIGRvZG8sIGFuZCBwYXJzZXIgaW4KLWNrdmZpby5jIChi ZWNhdXNlIG9mIE9OX0NEKSAtLSBJIHN1cHBvc2UgSSBoYXZlICNpbmNsdWRlIDxja3VjbWQuaD4u Li4gKGRvbmUpCi1Bbnlob3cgaXQgYnVpbGRzIE9LIGFuZCB0aGUgSFRUUCBjb2RlIGlzIGFjdGl2 ZSBhbmQgYWxtb3N0IHdvcmtzIChIVFRQIE9QRU4KLXdvcmtzOyBIVFRQIEdFVCBzZWVtcyB0byBz dWNjZWVkIGJ1dCBjcmVhdGVzIGFuIGVtcHR5IGZpbGUgZXZlcnkgdGltZSkuICBUcmllZAotYnVp bGRpbmcgdW5kZXIgTXVsdGlOZXQgYXQgYW5vdGhlciBpbnN0YWxsYXRpb247IHNhbWUgYmFkIHJl c3VsdC4KLQotT0sgc28gd2h5IHdvbid0IGl0IGJ1aWxkIGZvciBNdWx0aU5ldD8gIENvbXBhcmlu ZyBja2NuZXQuYyB3aXRoIHRoZSAyMDkKLXZlcnNpb24sIG5vdCBhIHNpbmdsZSAjaWZkZWYgb3Ig I2luY2x1ZGUgaXMgY2hhbmdlZC4gIFRyaWVkIGJ1aWxkaW5nIHdpdGgKLXAzPSJOT0hUVFAiIC0t IGJ1aWxkcyBPSywgYWhhLiAgV2hlcmUncyB0aGUgcHJvYmxlbT8gIE5vdCBja2NuZXQuaC4uLgot Tm90IGNrY2RlYi5oLi4uICBPSyBJIGdpdmUgdXAsIHdpbGwgcmV2aXNpdCB0aGlzIG5leHQgdGlt ZSBJIGdldCB0aW1lIHRvCi1kbyBhbnl0aGluZyB3aXRoIHRoZSBjb2RlLgotCi1MYXRlciBKZWZm IHNhaWQgIk1hcnRpbiBkaWQgbm90IGltcGxlbWVudCBWTVMgbmV0d29ya2luZyBmb3IgdGhlIEhU VFAgY29kZS4KLUFsbCBoZSBkaWQgd2FzIGFjdGl2YXRlIHRoZSAjZGVmaW5lIEhUVFAgd2hpY2gg aGFwcGVucyB0byB3b3JrIGJlY2F1c2UgaGlzCi1jb25uZWN0aW9ucyBhcmUgdXNpbmcgU1NML1RM UyBjb25uZWN0aW9ucy4gIGh0dHBfaW5jKCksIGh0dHBfdG9sKCksIGV0YyBoYXZlCi1ubyBzdXBw b3J0IGZvciBWTVMgbmV0d29ya2luZyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgVUNYIG9y IE1VTFRJTkVULgotVGhlIHZhc3QgbWFqb3JpdHkgb2YgSFRUUCBjb25uZWN0aW9ucyBhcmUgbm90 IHNlY3VyZWQgYnkgU1NML1RMUy4gIEl0IG1ha2VzIG5vCi1zZW5zZSB0byBzdXBwb3J0IEhUVFAg b24gVk1TIHVudGlsIHNvbWVvbmUgaXMgd2lsbGluZyB0byBlaXRoZXIgZG8gdGhlIHdvcmsgb3IK LXBheSBoYXZlIHRoZSB3b3JrIGRvbmUgdG8gaW1wbGVtZW50IFZNUyBuZXR3b3JraW5nIGluIHRo YXQgY29kZSBiYXNlLiIgIFNvIHRoZQotZml4IGlzIHRvIG5vdCBlbmFibGUgSFRUUCBmb3IgVk1T IGFmdGVyIGFsbC4gIFJlbW92ZWQgdGhlIENLSFRUUCBkZWZpbml0aW9uCi1mb3IgVk1TIGZyb20g Y2tjZGViLmgsIDYgSnVsIDIwMDMuCi0KLUZpeGVkIGNrdmZpby5jIHRvICNpbmNsdWRlIDxja3V1 c3IuaD4gKGluc3RlYWQgb2YgPGNrdWNtZC5oPikgdG8gcGljayB1cCAKLW1pc3NpbmcgcHJvdG90 eXBlcy4gIDYgSnVsIDIwMDMuCi0KLUZyb20gQXJ0aHVyIE1hcnNoOiBzb2xhcmlzMnhnK29wZW5z c2wremxpYitzcnArcGFtK3NoYWRvdyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKLVNvbGFyaXMgNyB0 YXJnZXQuICBtYWtlZmlsZSwgNiBKdWwgMjAwMy4KLQotUmVtb3ZlIGR1cGxpY2F0ZSAjaW5jbHVk ZXMgZm9yIDxzeXMvc3RhdC5oPiwgPGVycm5vLmg+LCBhbmQgPGN0eXBlLmg+IGZyb20KLWNrY2Z0 cC5jLiAgNiBKdWwgMjAwMy4KLQotQWRkIC1EVVNFX01FTUNQWSB0byBNb3Rvcm9sYSBTVi82OCB0 YXJnZXRzIGJlY2F1c2Ugb2Ygc2h1ZmZsZWQgI2luY2x1ZGVzIGluIAotY2tjZnRwLmMuICA4IEp1 bCAyMDAzLgotCi1Gcm9tIEplZmY6IEZpeCBwcm9ibGVtcyBtaXhpbmcgU1NMIGFuZCBTUlAgd2l0 aG91dCBLZXJiZXJvcy4gIFBsdXMgYSBmZXcgbWlub3IKLSNkZWZpbmUgY29tbWVudCBjaGFuZ2Vz IGFuZCBhIHJlc2h1ZmZsaW5nIG9mICNkZWZpbmVzIGluIGNrY2RlYi5oIHRvIGFsbG93IG1lCi10 byBidWlsZCBvbiBYODYgV2luZG93cyB3aXRob3V0IEtlcmJlcm9zLiAgY2tjZGViLmgsIGNrX2Ny cC5jLCBja3VhdGguYywKLTEwIEp1bCAyMDAzLgotCi1Gcm9tIEplZmY6IHVwZGF0ZWQgY2t1YXQy LmggYW5kIGNrdWF0aC5jLCAyOSBKdWwgMjAwMy4KLQotTWF0cyBQZXRlcnNvbiBub3RpY2VkIHRo YXQgYSB2ZXJ5IHNtYWxsIExhdGluLTEgZmlsZSB3b3VsZCBiZSBpbmNvcnJlY3RseQotaWRlbnRp ZmllZCBhcyBVQ1MtMiBieSBzY2FuZmlsZSgpLiAgRml4ZWQgaW4gY2t1dXN4LmMsIDI5IEp1bCAy MDAzLgotCi1GaXhlZCBBQ0NFU1MgbWFjcm8gZGVmaW5pdGlvbiB0byBhY2NvdW50IGZvciB0aGUg ZmFjdCB0aGF0IEZJTkQgaXMgbm93IGEKLWJ1aWx0LWluIGNvbW1hbmQuICBja2VybWl0LmluaSwg MzAgSnVsIDIwMDMuCi0KLUZyb20gSmVmZjogRml4IGZvciB0eXBvIGluIHVybHBhcnNlKCkgKHN2 Yy9ob3MpOiBja3V1c3kuYywgMTggQXVnIDIwMDMuCi0KLUZyb20gSmVmZjogUmVkaGF0OSBtYWtl ZmlsZSB0YXJnZXRzIChuZWVkZWQgZm9yIGZvciBPcGVuU1NMIDAuOS43KToKLW1ha2VmaWxlLCAx OSBBdWcgMjAwMy4KLQotR1JFUCAvTk9MSVNUIGFuZCAvQ09VTlQgZGlkIHRvbyBtdWNoIG1hZ2lj LCB3aXRoIHNvbWUgdW5kZXNpcmFibGUgZmFsbG91dDoKLSJHUkVQIC9OT0xJU1QgL0NPVU5UOngg YXJncyIgcHJpbnRlZCAiZmlsZTpjb3VudCIgZm9yIGVhY2ggZmlsZS4gICJHUkVQCi0vQ09VTlQ6 eCAvTk9MSVNUIGFyZ3MiIGRpZCBub3QgcHJpbnQgImZpbGU6Y291bnQiLCBidXQgbmVpdGhlciBk aWQgaXQgc2V0IHRoZQotY291bnQgdmFyaWFibGUuICBSZW1vdmVkIHRoZSBtYWdpYy4gIEFsc28g b25lIG9mIHRoZSBHUkVQIHN3aXRjaGVzLAotL0xJTkVOVU1CRVJTLCB3YXMgb3V0IG9mIG9yZGVy LiAgRml4ZWQgaW4gY2t1dXM2LmMsIDIwIEF1ZyAyMDAzLgotCi1Gcm9tIEplZmY6ICJSZW9yZ2Fu aXppbmcgY29kZSB0byBlbmFibGUgYnVpbGRpbmcgd2l0aCBkaWZmZXJlbnQgc3Vic2V0cyBvZgot b3B0aW9uczsgYSBmZXcgdHlwb3MgY29ycmVjdGVkIGFzIHdlbGwuIiAgY2tjZGViLmgsIGNrdXZl ci5oIChmb3IgUkg5KSwKLWNrY25ldC5jLCBja3V1czcuYywgY2t1dXMzLmM6IDI0IEF1ZyAyMDAz LgotCi1TY2FuZmlsZSBtaXNpZGVudGlmaWVkIGEgYmlnIFBERiBmaWxlIGFzIHRleHQgYmVjYXVz ZSB0aGUgZmlyc3QgODAwSyBvZiBpdAotKndhcyogdGV4dCAobW9zdCBvdGhlciBQREYgZmlsZXMg d2VyZSBjb3JyZWN0bHkgdGFnZ2VkIGFzIGJpbmFyeSkuICBGaXhlZAotYnkgYWRkaW5nIGEgY2hl Y2sgZm9yIHRoZSBQREYgc2lnbmF0dXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCi1z Y2FuZmlsZSgpOiBja3V1c3guYywgMjUgQXVnIDIwMDMuCi0KLURpdHRvIGZvciBQb3N0U2NyaXB0 IGZpbGVzLCBidXQgY29uc2VydmF0aXZlbHkuICBTaWduYXR1cmUgYXQgYmVnaW5uaW5nIG9mCi1m aWxlIG11c3QgYmVnaW4gd2l0aCAiJSFQUy1BZG8iLiAgSWYgaXQncyBqdXN0ICIlISIgKG9yIHNv bWV0aGluZyBub25zdGFuZGFyZAotbGlrZSAiJSVDcmVhdG9yOiBXaW5kb3dzIFBTQ1JJUFQiKSB3 ZSBkbyBhIHJlZ3VsYXIgc2Nhbi4gIEFsc28gYWRkZWQgIioucHMiCi10byBhbGwgYmluYXJ5IGZp bGVuYW1lIHBhdHRlcm5zLiAgY2t1dXN4LmMsIDQgU2VwIDIwMDMuCi0KLURpdHRvIChidXQgd2l0 aGluICNpZm5kZWYgTk9QQ0xTQ0FOKSBmb3IgUENMICg8RVNDPkUpIGFuZCBQSkwgKDxFU0M+JSkg ZmlsZXMsCi1idXQgbm8gYmlucGF0dGVybnMgKG5vdGU6ICIuUENMIiBpcyB0aGUgZXh0ZW5zaW9u IGZvciBUT1BTLTIwIEVYRUMgc2NyaXB0cykuCi1ja3V1c3guYywgNCBTZXAgMjAwMy4KLQotQWRk ZWQgY29tbWVudHMgYWJvdXQgT3BlblNTTCAwLjkuNyB0byBhbGwgbGludXgrb3BlbnNzbCB0YXJn ZXRzLgotbWFrZWZpbGUsIDQgU2VwIDIwMDMuCi0KLUZyb20gSmVmZjogQWRkZWQgLSAjZGVmaW5l IEFMTE9XX0tSQl8zREVTX0VOQ1JZUFQuICBXaGVuIHRoaXMgc3ltYm9sIGlzIGRlZmluZWQKLWF0 IGNvbXBpbGF0aW9uIEtlcm1pdCB3aWxsIGFsbG93IG5vbi1ERVMgc2Vzc2lvbiBrZXlzIHRvIGJl IHVzZWQgZHVyaW5nIFRlbG5ldAotQXV0aC4gIFRoZXNlIHNlc3Npb24ga2V5cyBjYW4gdGhlbiBi ZSB1c2VkIGZvciBUZWxuZXQgRW5jcnlwdC4gIFRoZSByZWFzb24KLXRoaXMgaXMgbm90IGNvbXBp bGVkIG9uIGJ5IGRlZmF1bHQgaXMgdGhhdCB0aGUgTUlUIEtlcmJlcm9zIFRlbG5ldCBkb2VzIG5v dAotZm9sbG93IHRoZSBSRkMgZm9yIGNvbnN0cnVjdGluZyBrZXlzIGZvciBFTkNSWVBUIERFUyB3 aGVuIHRoZSBrZXlzIGFyZSBsb25nZXIKLXRoYW4gOCBieXRlcyBpbiBsZW5ndGguICBja3VhdGgu YywgY2t1dXM1LmMsIDQgU2VwIDIwMDMuCi0KLSJmdHAgbWdldCBhIGIgYyIgc3VjY2VlZGVkIGlm IG9uZSBvciBtb3JlIG9mIHRoZSBmaWxlcyBkaWQgbm90IGV4aXN0LCBldmVuCi13aXRoICJzZXQg ZnRwIGVycm9yLWFjdGlvbiBwcm9jZWVkIi4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgc2VydmVyJ3Mg TkxTVCBmaWxlCi1saXN0IGRvZXMgbm90IGluY2x1ZGUgYW55IGZpbGVzIHRoYXQgZG9uJ3QgZXhp c3QsIHNvIHRoZSBjbGllbnQgbmV2ZXIgZXZlbgotdHJpZXMgdG8gZ2V0IHRoZW0uICBGb3J0dW5h dGVseSwgdGhlIHdheSB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkLCB0aGlzIG9uZSB3YXMKLWVhc3kg dG8gZml4LiAgY2tjZnRwLmMsIDE0IFNlcCAyMDAzLgotCi1Gcm9tIEplZmY6IENvcnJlY3RlZCBj b2RlIGluIGNrY25ldC5jIHRvIGVuc3VyZSB0aGF0IFJldmVyc2UgRE5TIExvb2t1cHMgYXJlCi1u b3QgcGVyZm9ybWVkIGlmIHRjcF9yZG5zIGlzIE9GRi4gIEZpeGVkIGNrX2tyYjVfZ2V0cmVhbG0o KSB0byBhY3R1YWxseSByZXR1cm4KLXRoZSByZWFsbSBvZiB0aGUgY3JlZGVudGlhbHMgY2FjaGUg YW5kIG5vdCB0aGUgZGVmYXVsdCByZWFsbSBzcGVjaWZpZWQgaW4gdGhlCi1rcmI1LmNvbmYgZmls ZS4gIFByZXZpb3VzbHkga3JiNV9jY19nZXRfcHJpbmNpcGFsKCkgd2FzIG5vdCBiZWluZyBjYWxs ZWQuCi1GaXhlZCBja19rcmI1X2lzX3RndF92YWxpZCgpIHRvIHRlc3QgdGhlIFRHVCBpbiB0aGUg Y3VycmVudCBjY2FjaGUgYW5kIG5vdCB0aGUKLVRHVCBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBkZWZh dWx0IHJlYWxtLiAgY2tjbmV0LmMsIGNrdWF0aC5jLCAxNCBTZXAgMjAwMy4KLQotTWFyY28gQmVy bmFyZGkgbm90aWNlZCB0aGF0IElGIERJUkVDVE9SWSBjb3VsZCBwcm9kdWNlIGEgZmFsc2UgcG9z aXRpdmUgaWYKLXRoZSBhcmd1bWVudCBkaXJlY3RvcnkgaGFkIHByZXZpb3VzbHkgYmVlbiByZWZl cmVuY2VkIGJ1dCB0aGVuIHJlbW92ZWQuICBUaGlzCi1pcyBiZWNhdXNlIG9mIHRoZSBjbGV2ZXIg aXNkaXIoKSBjYWNoZSB0aGF0IHdhcyBhZGRlZCB0byBzcGVlZCB1cCByZWN1cnNpb24KLXRocm91 Z2ggYmlnIGRpcmVjdG9yeSB0cmVlcy4gIENoYW5nZWQgSUYgRElSRUNUT1JZIHRvIG1ha2UgYSBz ZWNvbmQgY2hlY2sKLShkZWZpbml0aXZlIGJ1dCBtb3JlIGV4cGVuc2l2ZSkgaWYgaXNkaXIoKSBz dWNjZWVkcywgYW5kIGNoYW5nZWQgdGhlCi1kaXJlY3RvcnktZGVsZXRpbmcgcm91dGluZSwgY2tt a2RpcigpLCB0byBmbHVzaCB0aGUgZGlyZWN0b3J5IGNhY2hlIChVTklYCi1vbmx5IC0tIHRoaXMg YWxzbyBzaG91bGQgYmUgZG9uZSBpbiBLOTUgYnV0IGl0J3Mgbm90IGNyaXRpY2FsKS4gIFRoaXMg d2FzCi1kb25lIGJ5IGFkZGluZyBhIHJvdXRpbmUsIGNscmRpcmNhY2hlKCkgdG8gY2t1ZmlvLmMs IHdoaWNoIHNldHMgcHJldnN0YXQKLXRvIC0xIGFuZCBwcmV2cGF0aFswXSB0byBOVUwuICBja2Nm bjMuYywgY2t1dXM2LmMsIGNrdWZpby5jLCAxOCBTZXAgMjAwMy4KLQotTWFyY28gcmVwb3J0ZWQg dGhlIHNlY29uZCBmaXggc3RpbGwgZGlkbid0IHdvcmsgZm9yIGhpbSAoZXZlbiB0aG91Z2ggaXQg ZGlkCi1mb3IgbWUpLiAgUmF0aGVyIHRoYW4gdHJ5IHRvIGZpZ3VyZSBvdXQgd2h5LCBJIGNvbmNs dWRlZCB0aGF0IHRoZSBkaXJlY3RvcnkKLWNhY2hlIGlzIGp1c3Qgbm90IHNhZmU6IGEgZGlyZWN0 b3J5IGZvdW5kIGEgc2Vjb25kIGFnbyBtaWdodCBoYXZlIGJlZW4gZGVsZXRlZAotb3IgcmVuYW1l ZCBub3Qgb25seSBieSBLZXJtaXQgYnV0IGJ5IHNvbWUgb3RoZXIgcHJvY2Vzcy4gIFdoeSBkaWQg SSBhZGQgdGhpcwotaW4gdGhlIGZpcnN0IHBsYWNlPyAgVGhlIGxvZyBzYXlzOgotCi0gIFNvbWUg ZGVidWcgbG9ncyBzaG93ZWQgdGhhdCBpc2RpcigpIGlzIG9mdGVuIGNhbGxlZCB0d2ljZSBpbiBh IHJvdyBvbiB0aGUKLSAgc2FtZSBmaWxlLiAgUmF0aGVyIHRoYW4gdHJ5IHRvIHNvcnQgb3V0IGNs aWVudHMsIEkgYWRkZWQgYSAxLWVsZW1lbnQgY2FjaGUKLSAgdG8gVW5peCBpc2RpcigpLiAgY2t1 ZmlvLmMsIDI0IEFwciAyMDAwLgotCi1FeHBlcmltZW50YXRpb24gd2l0aCBESVIgYW5kIERJUiAv UkVDVVJTSVZFIGRvZXMgbm90IHNob3cgdGhpcyBoYXBwZW5pbmcgYXQKLWFsbC4gIFNvIEkgI2lm ZGVmJ2Qgb3V0IHRoZSBkaXJlY3RvcnkgY2FjaGUgKHNlZSAjaWZkZWYgSVNESVJDQUNIRSBpbiBj a3VmaW8uYzsKLUlTRElSQ0FDSEUgaXMgbm90IGRlZmluZWQpIGFuZCBiYWNrZWQgb2ZmIHRoZSBw cmV2aW91cyBjaGFuZ2VzOiBja3VmaW8uYywKLWNrY2ZuMy5jLCBja3V1czYuYywgMjggU2VwIDIw MDMuCi0KLUZyb20gSmVmZjogUmVwbGFjZSB0aGUgY29tcGlsZSB0aW1lIEFMTE9XX0tSQl8zREVT X0VOQ1JZUFQgd2l0aCBhIHJ1bi10aW1lCi1jb21tYW5kIFNFVCBURUxORVQgQlVHIEFVVEgtS1JC NS1ERVMgd2hpY2ggZGVmYXVsdHMgdG8gT046IGNrY3RlbC5bY2hdLAotY2t1dXNbMjM0XS5jLCBj a19jcnAuYywgY2t1YXRoLmMuICA0IE9jdCAyMDAzLgotCi1BbGxvdyBESUFMIFJFVFJJRVMgdG8g YmUgYW55IHBvc2l0aXZlIG51bWJlciwgYW5kIGNhdGNoIG5lZ2F0aXZlIG9uZXMuCi1BbHNvIGFk ZGVkIGNvZGUgdG8gY2hlY2sgZm9yIGF0b2koKSBlcnJvcnMgKGUuZy4gdHJ1bmNhdGlvbikuICBB dCBsZWFzdCBvbgotc29tZSBwbGF0Zm9ybXMgKGUuZy4gU29sYXJpcykgYXRvaSgpIGlzIHN1cHBv c2VkIHRvIHNldCBlcnJubywgYnV0IGl0Ci1kb2Vzbid0LiAgY2t1dXMzLmMsIGNrdWNtZC5jLCA0 IE9jdCAyMDAzLgotCi1BZGRlZCAvREVGQVVMVDogdG8gQVNLLWNsYXNzIGNvbW1hbmRzIChBU0ss IEFTS1EsIEdFVE9LKToKLQotIC4gRm9yIHBvcHVwczogbm8gd2F5IHRvIHNlbmQgZGVmYXVsdHMg dG8gcG9wdXBfcmVhZHRleHQoKSBvciBwb3B1cF9yZWFkcGFzcygpLgotIC4gRm9yIEdVSSBBU0tb UV0sIHBhc3MgZGVmYXVsdCB0byBndWlfdHh0X2RpYWxvZygpLgotIC4gRm9yIEdVSSBHRVRPSywg Y29udmVydCAieWVzIiAib2siIG9yICJubyIgZGVmYXVsdCB0byBudW1iZXIgZm9yIHVxX29rKCku Ci0gLiBGb3IgVGV4dCBHRVRPSywgYWRkIGRlZmF1bHQgdG8gY21rZXkoKS4KLSAuIEZvciBUZXh0 IEFTS1tRXSwgYWRkIGRlZmF1bHQgdG8gY210eHQoKS4KLSAuIEZvciBHRVRDLCBHRVRLRVksIGFu ZCBSRUFEOiBubyBjaGFuZ2VzLgotCi1HRVRPSywgQVNLLCBhbmQgQVNLUSB3aXRoIC9USU1FT1VU OiBubyBsb25nZXIgZmFpbCB3aGVuIHRoZSB0aW1lciBnb2VzIG9mZgotaWYgYSAvREVGQVVMVCB3 YXMgc3VwcGxpZWQuICBUaGUgR1VJIGZ1bmN0aW9ucyAodXFfYmxhaCkgZG9uJ3Qgc2VlbSB0bwot c3VwcG9ydCB0aW1lb3V0cy4gIE9ubHkgdGhlIHRleHQgdmVyc2lvbiBoYXMgYmVlbiB0ZXN0ZWQu ICBja3V1c1syNl0uYywKLTQgT2N0IDIwMDMuCi0KLUZyb20gSmVmZjogYWRkIC9ERUZBVUxUOiBm b3IgcG9wdXBzLiAgY2t1dXM2LmMuIDYgT2N0IDIwMDMuCi0KLUNoYW5nZSBTRVQgRElBTCBJTlRF UlZBTCB0byBiZSBsaWtlIFNFVCBESUFMIFJFVFJJRVMuICBja3V1c1szNF0uYywgNiBPY3QgMjAw My4KLQotQWRkZWQgdGFyZ2V0IGZvciBIUC1VWCAxMC8xMSArIE9wZW5TU0wgYnVpbHQgd2l0aCBn Y2MsIGZyb20gQ2hyaXMgQ2hlbmV5LgotTWFrZWZpbGUsIDEyIE9jdCAyMDAzLgotCi1Gcm9tIEpl ZmYsIDYgTm92IDIwMDM6Ci0gLiAjaWZkZWYgYWRqdXN0bWVudHM6IGNrY2Z0cC5jLCBja2NkZWIu aAotIC4gRml4IHNwdXJpb3VzIGNvbnN1bXB0aW9uIG9mIGZpcnN0IGJ5dGUocykgb24gVGVsbmV0 IGNvbm5lY3Rpb246IGNrY3RlbC5jCi0gLiBBbm90aGVyIEhQIFBKTCB0ZXN0IGZvciBzY2FuZmls ZTogY2t1dXN4LmMuCi0gLiBLOTU6IFJlY29nbml6ZSBERzR4eCBwcm90ZWN0ZWQgZmllbGRzIGlu IERHMnh4IGVtdWxhdGlvbjogY2t1dXM3LmMuCi0gLiBBZGQgU1NMZWF5IHZlcnNpb24gZGlzcGxh eSB0byBTSE9XIEFVVEggY29tbWFuZDogY2t1dXM3LmMKLSAuIEltcHJvdmVkIFNFVCBNT1VTRSBD TEVBUiBoZWxwIHRleHQ6IGNrdXVzMi5jLgotIC4gSW1wcm92ZWQgS3ZlcmJzIGhlbHAgdGV4dDog Y2t1dXMyLmMgKCsgbmV3IElCTS0zMTUxIEt2ZXJicykuCi0gLiBTb21lIGNoYW5nZXMgdG8gY2tf c3NsLmMsIGNrdWF0aC5jLgotCi1Gcm9tIFBldGVyRSwgMTAgTm92IDIwMDM6Ci0gLiBJbXByb3Zl ZCBIUC1VWCAxMC8xMSBtYWtlZmlsZSB0YXJnZXRzIGZvciBPcGVuU1NMLgotIC4gI2lmZGVmIGZp eCBmb3IgT3BlblNTTCBvbiBIUC1VWDogY2tfc3NsLmMuCi0KLUFub3RoZXIgbmV3IG1ha2VmaWxl IGZyb20gUGV0ZXJFIHdpdGggaW1wcm92ZWQgYW5kIGludGVncmF0ZWQgSFAtVVggdGFyZ2V0cy4K LTEyIE5vdiAyMDAzLgotCi1BIGNvdXBsZSBmaXhlcyB0byB0aGUgc29sYXJpczlnK2tyYjUra3Ji NCtvcGVuc3NsK3NoYWRvdytwYW0remxpYiB0YXJnZXQKLWZyb20gSmVmZi4gIEFkZGVkIGEgc29s YXJpczlnK29wZW5zc2wrc2hhZG93K3BhbSt6bGliIHRhcmdldC4gIG1ha2VmaWxlLAotMjEgTm92 IDIwMDMuCi0KLUZyb20gSmVmZiwgMzAgTm92IDIwMDM6Ci0gLiBGaXggU0VORCAvTU9WRS1UTzog Y2t1dXNyLmMuCi0gLiBGaXggSzk1IFNFVCBUSVRMRSB0byBhbGxvdyBxdW90ZXMvYnJhY2VzIGFy b3VuZCB0ZXh0OiBja3V1czcuYy4KLSAuIEltcHJvdmVkICJzZXQgdGVybSBhdXRvZG93bmxvYWQg PyIgcmVzcG9uc2U6IGNrdXVzNS5jLgotIC4gRml4IFNIT1cgRkVBVFVSRVMgdG8gc3BlY2lmeSB0 aGUgcHJvdG9jb2wgZm9yIGVuY3J5cHRpb246IGNrdXVzNS5jCi0gLiBNYWtlIHtTRU5ELCBSRUNF SVZFfSB7TU9WRS1UTywgUkVOQU1FLVRPfSB3b3JrIGZvciBYWVpNT0RFTSAoSzk1IG9ubHkpLgot Ci1Gcm9tIEplZmY6IDcgSmFuIDIwMDQ6Ci0gLiBBdCBvbmUgcG9pbnQgRnJhbmsgc3RhcnRlZCB0 byBhZGQgYSB0aW1lciBwYXJhbWV0ZXIgdG8gdGhlCi0gICB1cV90eHQoKSBmdW5jdGlvbiBidXQg aGUgb25seSBkaWQgaXQgZm9yIHRoZSBub24tQU5TSQotICAgY29tcGlsZXJzLiAgSSBhZGRlZCBp dCBmb3IgdGhlIEFOU0kgY29tcGlsZXJzLCBmaXhlZCB0aGUKLSAgIHByb3RvdHlwZXMgYW5kIHBy b3ZpZGVkIGEgZGVmYXVsdCB2YWx1ZSBlYXNpbHkgY2hhbmdlZAotICAgREVGQVVMVF9VUV9USU1F T1VUOiBja2NrZXIuaCwgY2t1dXNbMzZdLmMsIGNrX3NzbC5jLCBja2NmdHAuYywgY2t1YXRoLmMu Ci0gLiBGaXhlZCBTRVQgVEVSTUlOQUwgREVCVUcgT04gKHR5cG8gaW4gdmFyaWFibGUgbmFtZSk6 IGNrdXVzNy5jLgotIC4gRml4ZWQgQkVFUCBJTkZPUk1BVElPTjsgcHJldmlvdXNseSBpdCBtYWRl IG5vIHNvdW5kLCBub3cgdXNlcwotICAgTUJfSUNPTlFVRVNUSU9OLiAgY2t1dXN4LmMuCi0KLUZy b20gSWFuIEJlY2t3aXRoIDxpYW5AbmVzc2llLm1jYy5hYy51az4gKERlYmlhbml6YXRpb24pLCA3 IEphbiAyMDA0OgotIC4gU2VhcmNoIGRpci9ja2VybWl0IGZvciBkb2NzLCBhcyB3ZWxsIGFzIGRp ci9rZXJtaXQgaW4gY21kaW5pKCk6IGNrdXVzNS5jLgotIC4gTmV3IGxpbnV4K2tyYjUra3JiNCtv cGVuc3NsK3NoYWRvdytwYW0gdGFyZ2V0IChraXRjaGVuIHNpbmsgbWludXMgU1JQLAotICAgd2hp Y2ggRGViaWFuIGRvZXMgbm90IGRpc3RyaWJ1dGUpOiBtYWtlZmlsZS4KLSA/IE1hbmdsZXMgdGhl IERFU1RESVIgc3VwcG9ydCBpbiBtYWtlZmlsZSB0byBpbnN0YWxsIGludG8gYSBzdGFnaW5nIGFy ZWE6Ci0gICBtYWtlZmlsZSAoSSBkaWRuJ3QgdGFrZSB0aGlzIG9uZSB5ZXQpLgotCi1VcGRhdGVk IGNvcHlyaWdodCBub3RpY2VzIGZvciAyMDA0LCBhbGwgbW9kdWxlcy4gIDcgSmFuIDIwMDQuCi0K LUFkZGVkIElOUFVUIC9OT01BVENILCBhbGxvd2luZyBJTlBVVCB0byBiZSB1c2VkIGZvciBhIGZp eGVkIGFtb3VudCBvZiB0aW1lCi13aXRob3V0IGF0dGVtcHRpbmcgdG8gbWF0Y2ggYW55IHRleHQg b3IgcGF0dGVybnMsIHNvIGl0J3Mgbm8gbG9uZ2VyCi1uZWNlc3NhcnkgdG8gImlucHV0IDYwMCBT VFJJTkdfVEhBVF9XSUxMX05FVkVSX0NPTUUiLiAgSWYgL05PTUFUQ0ggaXMKLWluY2x1ZGVkLCBJ TlBVVCBzdWNjZWVkcyBpZiB0aGUgdGltZW91dCBleHBpcmVzLCB3aXRoIFx2KGluc3RhdHVzKSA9 IDEKLShtZWFuaW5nICJ0aW1lZCBvdXQiKTsgZmFpbHMgdXBvbiBpbnRlcnJ1cHRpb24gb3IgaS9v IGVycm9yLiAgY2t1dXNyLmgsCi1ja3V1c1tyMjRdLmMsIDcgSmFuIDIwMDQuCi0KLUFkZGVkIFNF VCBJTlBVVCBTQ0FMRS1GQUNUT1IgPGZsb2F0Pi4gIFRoaXMgc2NhbGVzIGFsbCBJTlBVVCB0aW1l b3V0cyBieSB0aGUKLWdpdmVuIGZhY3RvciwgYWxsb3dpbmcgdGltZS1zZW5zaXRpdmUgc2NyaXB0 cyB0byBiZSBhZGp1c3RlZCB0byBjaGFuZ2luZwotY29uZGl0aW9ucyBzdWNoIGFzIGNvbmdlc3Rl ZCBuZXR3b3JrcyBvciBkaWZmZXJlbnQtc3BlZWQgbW9kZW1zIHdpdGhvdXQKLWhhdmluZyB0byBj aGFuZ2UgZWFjaCBJTlBVVC1jbGFzcyBjb21tYW5kLiAgVGhpcyBhZmZlY3RzIG9ubHkgdGhvc2Ug dGltZW91dHMKLXRoYXQgYXJlIGdpdmVuIGluIHNlY29uZHMsIG5vdCBhcyB3YWxsLWNsb2NrIHRp bWVzLiAgQWx0aG91Z2ggdGhlIHNjYWxlCi1mYWN0b3IgY2FuIGhhdmUgYSBmcmFjdGlvbmFsIHBh cnQsIHRoZSBJTlBVVCB0aW1lb3V0IGlzIHN0aWxsIGFuIGludGVnZXIuCi1BZGRlZCB0aGlzIHRv IFNIT1cgSU5QVVQsIGFuZCBhZGRlZCBhIFx2KGluc2NhbGUpIHZhcmlhYmxlIGZvciBpdC4KLWNr dXVzci5oLCBja3V1c1tyMjU3XS5jLCA3IEphbiAyMDA0LgotCi11bmRlZiBcJWEsIFxmdmVyaWZ5 KGFiYyxcJWEpIHJldHVybnMgMCwgd2hpY2ggbWFrZXMgaXQgbG9vayBhcyBpZiBcJWEgaXMgYQot c3RyaW5nIGNvbXBvc2VkIG9mIGEncywgYidzLCBhbmQvb3IgYydzLCB3aGVuIGluIGZhY3QgaXQg Y29udGFpbnMgbm90aGluZy4KLUNoYW5nZWQgXGZ2ZXJpZnkoKSB0byByZXR1cm4gLTEgaW4gdGhp cyBjYXNlLiAgY2t1dXM0LmMsIDEyIEphbiAyMDA0LgotCi1cZmNvZGUoeHh4KSByZXR1cm5lZCBh biBlbXB0eSBzdHJpbmcgaWYgaXRzIGFyZ3VtZW50IHN0cmluZyB3YXMgZW1wdHkuICBUaGlzCi1t YWtlcyBpdCB1bnNhZmUgdG8gdXNlIGluIGFyaXRobWV0aWMgb3IgYm9vbGVhbiBleHByZXNzaW9u cy4gIENoYW5nZWQgaXQgdG8KLXJldHVybiAwIGlmIGl0cyBhcmd1bWVudCB3YXMgbWlzc2luZywg bnVsbCwgb3IgZW1wdHkuICBja3V1czQuYywgMTIgSmFuIDIwMDQuCi0KLVVwZGF0ZWQgXHZlcmlm eSgpIGFuZCBcZmNvZGUoKSBoZWxwIHRleHQuICBja3V1czIuYywgMTIgSmFuIDIwMDQuCi0KLVdo aWxlIHNldHRpbmcgdXAgSUtTRCwgSWFuIEJlY2t3aXRoIG5vdGljZWQgdGhhdCBpbmNsdWRpbmcg dGhlIC0taW5pdGZpbGU6Ci1vcHRpb24gY2F1c2VkIEtlcm1pdCB0byBzdGFydCBwYXJzaW5nIGl0 cyBvd24gQ29weXJpZ2h0IHN0cmluZyBhcyBpZiBpdCB3ZXJlCi10aGUgY29tbWFuZCBsaW5lLCBh bmQgZXZlbnR1YWxseSBjcmFzaC4gIEkgY291bGRuJ3QgcmVwcm9kdWNlIG9uIFNvbGFyaXMgLwot U3BhcmMgYnV0IEkgY291bGQgaW4gTGludXggLyBpMzg2ICh3aGF0IElhbiBpcyB1c2luZykgLS0g YSBjaGFuZ2UgZnJvbSBKZWZmCi1vbiAyOCBBcHIgMjAwMyBzZXQgdGhlIGNvbW1hbmQtbGluZSBh cmcgcG9pbnRlciB0byBhIGxpdGVyYWwgZW1wdHkgc3RyaW5nIGluCi1wcmVzY2FuKCkgYWJvdXQg bGluZSAxNzQwIG9mIG9mIGNrdXVzNC5jOyB0aGUgcG9pbnRlciBpcyBpbmNyZW1lbnRlZCBuZXh0 Ci10aW1lIHRocnUgdGhlIGxvb3AsIHJlc3VsdGluZyBpbiByYW5kb20gbWVtb3J5IGJlaW5nIHJl ZmVyZW5jZWQuICBGaXhlZCBieQotc2V0dGluZyB0aGUgcG9pbnRlciB0byBOVUxMIGluc3RlYWQg b2YgIiIuICBja3V1czQuYywgMTIgSmFuIDIwMDQuCi0KLWRlY2xhcmUgXCZhWzk5OTk5OTk5OTk5 OTk5OV0gd291bGQgZHVtcCBjb3JlIG9uIHNvbWUgcGxhdGZvcm1zLiAgYXRvaSgpCi1vciB3aGF0 ZXZlciB3b3VsZCB0cnVuY2F0ZSB0aGUgZGltZW5zaW9uIHRvIG1heGludC4gIFdoZW4gd2UgYWRk IDEgdG8gdGhlCi1yZXN1bHQsIHdlIGdldCBhIG5lZ2F0aXZlIG51bWJlciwgd2hpY2ggaXMgdXNl ZCBhcyBhbiBpbmRleCwgbG9vcCB0ZXN0LCBldGMuCi1GaXhlZCBib3RoIGRvZGNsKCkgYW5kIGRj bGFycmF5KCkgdG8gY2hlY2sgZm9yIChuKzEgPCAwKS4gIGNrdXVzW3I1XS5jLAotMTIgSmFuIDIw MDQuCi0KLVVuaXggemNoa2koKSB3b3VsZCBmYWlsIG9uIC9kZXYvdHR5LCB3aGljaCBpcyB1bnJl YXNvbmFibGUuICBUaGlzIHByZXZlbnRlZAotRk9QRU4gL1JFQUQgZnJvbSByZWFkaW5nIGZyb20g dGhlIHRlcm1pbmFsLiAgemNoa2koKSBhbHJlYWR5IGFsbG93ZWQgZm9yCi0vZGV2L251bGwsIHNv IEkgYWRkZWQgL2Rldi90dHkgdG8gdGhlIGxpc3Qgb2Ygc3BlY2lhbHMuICBEaXR0byBmb3IgRk9Q RU4KLS9XUklURSBhbmQgemNoa28oKS4gIGNrdWZpby5jIDEzIEphbiAyMDA0LgotCi1BZGRlZCB1 bnRhYmlmeSgpIHJvdXRpbmUgdG8gY2tjbGliLltjaF0sIDEzIEphbiAyMDA0LgotQWRkZWQgRlJF QUQgL1RSSU0gYW5kIC9VTlRBQklGWS4gIGNrdXVzWzI3XS5jLCAxMyBKYW4gMjAwNC4KLUFkZGVk IFxmdW50YWJpZnkoKS4gIGNrdXVzci5oLCBja3V1c1syNF0uYywgMTMgSmFuIDIwMDQuCi0KLURh dCBOZ3V5ZW4gbm90aWNlZCB0aGF0IChzZXRxIHUgJ3AnKSBmb2xsb3dlZCBieSAodSkgZHVtcGVk IGNvcmUuICBUaGlzIHdhcwotY2F1c2VkIGJ5IGFuIG92ZXItY2xldmVyIG9wdGltaXphdGlvbiB0 aGF0IHNraXBwZWQgbWFsbG9jcyBmb3Igc2hvcnQKLWxpdGVyYWxzLCBidXQgdGhlbiB3ZW50IG9u IGxhdGVyIHRvIHRyeSB0byBmcmVlIG9uZSB0aGF0IGhhZG4ndCBiZWVuCi1tYWxsb2MnZC4gIEZp eGVkIGluIGRvc2V4cCgpOiBja3V1czMuYywgMTQgSmFuIDIwMDQuCi0KLUNhdGNoIGFub3RoZXIg Y29weXJpZ2h0IGRhdGUuICBja3V1czUuYywgMTQgSmFuIDIwMDQuCi0KLUZpeGVkIFNXSVRDSCB0 byB3b3JrIGV2ZW4gd2hlbiBTRVQgQ09NTUFORCBET1VCTEVRVU9URSBPRkYgKGZyb20gTWFyawot U2FwaXJvKS4gIGNrdXVzNS5jLCAxNSBKYW4gMjAwNC4KLQotQ2hhbmdlZCB2ZXJzaW9uIHRvIDgu MC4yMTEgc28gc2NyaXB0cyBjYW4gdGVzdCBmb3IgcmVjZW50bHkgYWRkZWQgZmVhdHVyZXMuCi1j a2NtYWkuYywgMTUgSmFuIDIwMDQuCi0KLUZpeGVkIGEgZ2xpdGNoIGluIEs5NSAiaGVscCBzZXQg cG9ydCIuICBja3V1czIuYywgMjAgSmFuIDIwMDQuCi0KLUZpeCBmcm9tIEplZmY6IENvbm5lY3Rp b25zIHRvIGEgVExTLWF3YXJlIHByb3RvY29sIHdoaWNoIHJlcXVpcmUgYSByZWNvbm5lY3QKLXVw b24gY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGZhaWx1cmUgY291bGQgbm90IHJlY29ubmVjdCBp ZiB0aGUgY29ubmVjdGlvbgotd2FzIGluaXRpYXRlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgb3Ig dmlhIGEgVVJMLiAgY2tjdGVsLmMgY2tjbWFpLmMKLWNrdXVzci5jIGNrdXVzNy5jIGNrdXVzeS5j LCAyMCBKYW4gMjAwNC4KLQotRnJvbSBBbGV4IExld2luOiBtYWtlZmlsZSB0YXJnZXQgYW5kICNp ZmRlZiBmb3IgTWFjIE9TIFggMTAuMyAoUGFudGhlcik6Ci1tYWtlZmlsZSwgY2tjbmV0LmMsIDcg RmViIDIwMDQuCi0KLUFkZGVkIEtGTEFHUyB0byBzY28zMnY1MDcgdGFyZ2V0cyB0byBtYWtlIFBU WSBhbmQgU1NIIGNvbW1hbmRzIHdvcmsuICBUaGUKLXNhbWUgZmxhZ3MgY291bGQgcHJvYmFibHkg YWxzbyBiZSBhZGRlZCB0byBlYXJsaWVyIE9TUjUgdGFyZ2V0cyBidXQgdGhleQotaGF2ZSBub3Qg YmVlbiB0ZXN0ZWQgdGhlcmUuICBtYWtlZmlsZSwgNyBGZWIgMjAwNC4KLQotQ2hlY2tlZCBhIGNv bXBsYWludCB0aGF0ICJMT0NBTCAmYSIgZGlkIG5vdCBtYWtlIGFycmF5IFwmYVtdIGxvY2FsLiAg SW5kZWVkCi1pdCBkaWQgbm90LCBhbmQgY2FuIG5vdC4gIFlvdSBoYXZlIHRvIHVzZSB0aGUgZnVs bCBzeW50YXggaW4gdGhlIExPQ0FMCi1jb21tYW5kLCAiTE9DQUwgXCZhW10iLCBvciBlbHNlIGl0 IGRvZXNuJ3Qga25vdyBpdCdzIG5vdCBhIG1hY3JvIG5hbWVkICZhLgotNyBGZWIgMjAwNC4KLQot Rml4ZWQgc29tZSBjb25mdXNpb24gaW4gY3JlYXRpbmcgSUtTRCBkYXRhYmFzZSBmaWxlIGFuZCB0 ZW1wLWZpbGUgbmFtZXMuCi1JIHdhcyBjYWxsaW5nIHpmbnFmcCgpIHdpdGhvdXQgcmVtZW1iZXJp bmcgdGhhdCB0aGUgcGF0aCBtZW1iZXIgb2YgdGhlCi1yZXR1cm5lZCBzdHJ1Y3QgaW5jbHVkZWQg dGhlIGZpbGVuYW1lLCBzbyB0byBnZXQganVzdCB0aGUgZGlyZWN0b3J5IG5hbWUsCi1JIG5lZWRl ZCB0byBzdHJpcCB0aGUgZmlsZW5hbWUgZnJvbSB0aGUgcmlnaHQuICBja3V1c3kuYywgMiBNYXIg MjAwNC4KLQotTmV3IGNrdWF0aC5jLCBja19zc2wuYyBmcm9tIEplZmYuICAyIE1hciAyMDA0Lgot Ci1VcGRhdGVkIEplZmYncyBhZmZpbGlhdGlvbiBpbiBWRVJTSU9OIGNvbW1hbmQgdGV4dC4gIGNr dXVzci5jLCAyIE1hciAyMDA0LgotCi1EZXNpZ25hdGlvbiBjaGFuZ2VkIGZyb20gRGV2LjAwIHRv IEJldGEuMDEuICBja2NtYWkuYywgMiBNYXIgMjAwNC4KLQotRml4ZWQgenJlbmFtZSgpIHN5c2xv Z2dpbmcgLS0gaXQgaGFkIHN1Y2Nlc3MgYW5kIGZhaWx1cmUgcmV2ZXJzZWQuCi1CZXRhLjAyOiBj a3VmaW8uYywgNCBNYXIgMjAwNC4KLQotUHJvYmxlbTogd2hlbiBhY2Nlc3NpbmcgSUtTRCB2aWEg YSBrZXJtaXQ6Ly8gb3IgaWtzZDovLyBVUkwsIGFuZCBhIHVzZXIgSUQKLWlzIGdpdmVuIGJ1dCBu byBwYXNzd29yZCwgZG94YXJnKCkgc2V0IHRoZSBwYXNzd29yZCB0byAiIiBpbnN0ZWFkIG9mIGxl YXZpbmcKLWl0IE5VTEwsIGJ1dCBhbGwgdGhlIHRlc3RzIGluIGRvdXJsKCkgYXJlIGZvciBOVUxM LiAgRml4ZWQgaW4gZG94YXJnKCk6Ci1ja3V1c3kuYywgNSBNYXIgMjAwNC4KLQotVGhlIGxvZ2lj IGluIGRvdXJsKCkgYWJvdXQgd2hpY2ggbWFjcm8gdG8gY29uc3RydWN0IChsb2dpbiBhbmQgY29u bmVjdCwKLWxvZ2luIGFuZCBnZXQgZGlyZWN0b3J5IGxpc3RpbmcsIG9yIGxvZ2luIGFuZCBmZXRj aCBhIGZpbGUpIHdhcyBhIGJpdCBvZmYsCi1zbyBhbGwgdGhyZWUgY2FzZXMgd2VyZSBub3QgaGFu ZGxlZC4gIGNrY21haS5jLCA1IE1hciAyMDA0LgotCi1UcmlhbCBCZXRhIGJ1aWxkczoKLSAuIEhQ LVVYIEIuMTEuMTEgUEEtUklTQwotIC4gSFAtVVggQi4xMS4yMyBJQTY0Ci0gLiBUcnU2NCA0LjBH IEFscGhhCi0gLiBUcnU2NCA1LjFCIEFscGhhCi0gLiBEZWJpYW4gMy4wIGkzODYKLSAuIFJlZCBI YXQgRVMgMi4xIGkzODYKLSAuIFNsYWNrd2FyZSA5LjEgaTM4NgotIC4gVk1TIDcuMy0xIEFscGhh ICsgVUNYIDUuMwotIC4gVk1TIDcuMy0xIEFscGhhIG5vIFRDUC9JUAotIC4gVk1TIDcuMyBBbHBo YSBNdWx0aU5ldCA0LjMgQS1YCi0gLiBTQ08gVW5peFdhcmUgNy4xLjQgaTM4NgotIC4gU0NPIE9T UjUuMC43IGkzODYKLSAuIFNvbGFyaXMgOSBTcGFyYwotCi1GaXhlZCBjb21waWxlciB3YXJuaW5n IGluIGRveGFyZygpIGNhdXNlZCBieSB0eXBvIChOVUxMIGluc3RlYWQgb2YgTlVMKSBpbgotdGhl IDUgTWFyY2ggZG94YXJnKCkgZWRpdC4gIGNrdXVzeS5jLCA5IE1hciAyMDA0LgotCi1JS1NEIChr ZXJtaXQ6Ly8pIGNvbW1hbmQtbGluZSBVUkxzIGRpZCBub3Qgd29yayByaWdodCBpZiB0aGUgY2xp ZW50IGhhZAotYWxyZWFkeSBwcmVhdXRoZW50aWNhdGVkIHdpdGggS2VyYmVyb3Mgb3Igc29tZXN1 Y2ggYmVjYXVzZSB0aGV5IHRyaWVkIHRvIGxvZwotaW4gYWdhaW4gd2l0aCBSRU1PVEUgTE9HSU4u ICBUaGUgbWFjcm9zIGNvbnN0cnVjdGVkIGluIGRveGFyZygpIG5lZWRlZCB0bwotY2hlY2sgXHYo YXV0aHN0YXRlKSBiZWZvcmUgYXR0ZW1wdGluZyBSRU1PVEUgTE9HSU4uICBja2NtYWkuYywgMTAg TWFyIDIwMDQuCi0KLUFkZGVkIGNrdWtlci5uciB0byB4LnNoIChja2RhaWx5IHVwbG9hZCkgYW5k IHVwZGF0ZWQgY2t1a2VyLm5yIHdpdGggY3VycmVudAotdmVyc2lvbiBudW1iZXIgYW5kIGRhdGVz LiAgMTAgTWFyIDIwMDQuCi0KLVJlcGxhY2VkIGhhcmR3aXJlZCByZWZlcmVuY2VzIHRvIC91c3Iv bG9jYWwgaW4gbWFrZWZpbGUgd2l0aCAkKHByZWZpeCkKLSh3aGljaCBkZWZhdWx0cyB0byAvdXNy L2xvY2FsLCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gb24gdGhlIGNvbW1hbmQgbGluZSksCi1zdWdn ZXN0ZWQgYnkgTmVsc29uIEJlZWJlIGZvciB1c2Ugd2l0aCBDb25maWd1cmUuICAxMCBNYXIgMjAw NC4KLQotRnJvbSBOZWxzb24gQmVlYmU6IEluIHRoZSBLZXJtaXQgbWFrZWZpbGUgaW4gdGhlIGlu c3RhbGwgdGFyZ2V0IGNvbW1hbmRzLAotbGluZSA5ODEgcmVhZHM6Ci0KLSAgICAgICAgY3AgJChC SU5BUlkpICQoREVTVERJUikkKEJJTkRJUikva2VybWl0IHx8IGV4aXQgMTtcCi0KLUNvdWxkIHlv dSBwbGVhc2UgYWRkIHRoaXMgbGluZSBiZWZvcmUgaXQ6Ci0KLSAgICAgICAgcm0gLWYgJChERVNU RElSKSQoQklORElSKS9rZXJtaXQ7XAotCi1Tb21lIHNpdGVzIChtaW5lIGluY2x1ZGVkKSBrZWVw IG11bHRpcGxlIHZlcnNpb25zIG9mIHNvZnR3YXJlIGFyb3VuZCwKLXdpdGggaGFyZCBsaW5rcyBi ZXR3ZWVuICQocHJlZml4KS9wcm9nbmFtZSBhbmQgJChwcmVmaXgpL3Byb2duYW1lLXgueS56Lgot RmFpbHVyZSB0byByZW1vdmUgdGhlICQocHJlZml4KS9wcm9nbmFtZSBhdCAibWFrZSBpbnN0YWxs IiB0aW1lIHRoZW4KLXJlcGxhY2VzIHRoZSBvbGQgJChwcmVmaXgpL3Byb2duYW1lLXgueS56IHdp dGggdGhlIG5ldyBvbmUsIGRlc3Ryb3lpbmcKLWFuIG9sZCB2ZXJzaW9uIHRoYXQgdGhlIHNpdGUg d2FudGVkIHRvIGJlIHByZXNlcnZlZC4gIG1ha2VmaWxlLCAxMCBNYXIgMjAwNC4KLQotTWlub3Ig c3ludGF4IGFuZCB0eXBvIGZpeGVzIChtb3N0bHkgcHJvdG90eXBlcyk6IGNrY2RlYi5oLCBja2Nm bnMuYywKLWNrY2xpYi5jLCBja3VmaW8uYywgY2t1dXNyLmgsIGNrdXVzeC5jLCAxMCBNYXIgMjAw NC4gIChJIHN0aWxsIGhhdmUgYSBmZXcKLW1vcmUgdG8gZG8uKQotCi1BZGRlZCBDQz0kKENDKSBD QzI9JChDQzIpIHRvIG1hbnkgKGJ1dCBub3QgYWxsKSBtYWtlZmlsZSB0YXJnZXRzIHRoYXQKLXJl ZmVyZW5jZSBvdGhlciBtYWtlZmlsZSB0YXJnZXRzLiAgT24gc29tZSBwbGF0Zm9ybXMgKG5vdGFi bHkgQUlYLCBTb2xhcmlzLAotU3VuT1MpIHRoZXJlIGFyZSBzcGVjaWZpYyB0YXJnZXRzIGZvciBk aWZmZXJlbnQgY29tcGlsZXJzLCBzbyBJIHNraXBwZWQKLXRob3NlLiAgbWFrZWZpbGUsIDEwIE1h ciAyMDA0LgotCi1BZGRlZCBlcnJvciBjaGVja2luZyB0byBrZXJtaXQ6Ly8gVVJMIG1hY3Jvcywg c28gdGhleSBkb24ndCBwbG93IGFoZWFkCi1hZnRlciB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQu ICBja2NtYWkuYywgMTEgTWFyIDIwMDQuCi0KLUFkZGVkIEZyZWVCU0QgNC45IGFuZCA1LjEgdGFy Z2V0cyAob25seSB0aGUgaGVyYWxkIGlzIGFmZmVjdGVkKS4KLW1ha2VmaWxlLCBja3V2ZXIuaCwg MTEgTWFyIDIwMDQuCi0KLUFkZGVkICJMSUJTPS1sY3J5cHQiIHRvIGJzZDQ0IHRhcmdldHMgc2lu Y2Ugbm93YWRheXMgY3J5cHQgaXMgYWxtb3N0IGFsd2F5cwotdW5idW5kbGVkIGZyb20gbGliYy4g IEFsc28gYWRkZWQgZXhwbGFuYXRvcnkgbm90ZXMuICBtYWtlZmlsZSwgMTEgTWFyIDIwMDQuCi0K LUNoYW5nZWQgTUFORElSIHRvIGRlZmF1bHQgdG8gJChtYW5yb290KS9tYW4vbWFuMSwgYW5kIG1h bnJvb3QgdG8gZGVmYXVsdAotdG8gJChwcmVmaXgpLiAgTW9yZSBhZGRpbmcgb2YgQ0M9JChDQykg Y2xhdXNlczoge0ZyZWUsTmV0LE9wZW59QlNELCA0LjRCU0QuCi1tYWtlZmlsZSwgMTEgTWFyIDIw MDQuCi0KLU1pc2NlbGxhbmVvdXMgY2xlYW51cHM6IGNrdXVzeC5jLCBja2NuZXQuYywgY2t1Zmlv LmMsIDExIE1hciAyMDA0LgotCi1Db3JyZWN0ZWQgdGhlIGNoZWNrIGluIHRoZSBsaW51eCB0YXJn ZXQgdG8gc2VlIGlmIC91c3IvaW5jbHVkZS9jcnlwdC5oCi1leGlzdHMsIGFuZCBpZiBzbyB0byBk ZWZpbmUgSEFWRV9DUllQVF9ILCB3aGljaCBpcyB1c2VkIGluIGNrY2RlYi5oIHRvCi0jaW5jbHVk ZSA8Y3J5cHQuaD4gdG8gZ2V0IHRoZSBwcm90b3R5cGUgZm9yIGNyeXB0KCkgYW5kIHByZXZlbnQg Ym9ndXMKLWNvbnZlcnNpb25zIG9uIGl0cyByZXR1cm4gdHlwZSBvbiA2NC1iaXQgcGxhdGZvcm1z ICh0aGUgcHJldmlvdXMgdGVzdCB3YXNuJ3QKLXF1aXRlIHJpZ2h0IGFuZCB0aGUgcmVzdWx0aW5n IHN5bWJvbCB3YXNuJ3Qgc3BlbGxlZCByaWdodCkuICBtYWtlZmlsZSwKLTEyIE1hciAyMDA0Lgot Ci1Gcm9tIEplZmYsIDE0IE1hciAyMDA0OgotIC4gSW5pdGlhbGl6ZSBsb2NhbHVpZGJ1ZltdIGlu IHRuX3NuZW52KCk6IGNrY3RlbC5jLgotIC4gUmVtb3ZlIHJlbW90ZS1tb2RlIGNoZWNrcyBpbiBo dXBvaygpIGZvciBLOTVHIG9ubHkgKHdoeT8pOiBja3V1czMuYy4KLSAuIEFkZCBoZWxwIHRleHQg Zm9yIG5ldyBLOTUtb25seSBUWVBFIC9HVUkgc3dpdGNoZXM6IGNrdXVzMi5jLgotIC4gVFlQRSAv R1VJIHBhcnNpbmcsIC4uLjogY2t1dXNyLmMuCi0gLiBUWVBFIC9HVUkgYWN0aW9uLCBkb3R5cGUo KTogY2t1dXM2LmMKLSAuIENoYW5nZSBKZWZmJ3MgYWZmaWxpYXRpb246IG1vc3QgbW9kdWxlcy4K LQotMjAgTWFyIDIwMDQ6IExvb2tlZCBpbnRvIGFkZGluZyBsb25nIGZpbGUgc3VwcG9ydCwgaS5l LiBoYW5kbGluZyBmaWxlcyBtb3JlCi10aGFuIDJHQiAob3IgNEdCKSBsb25nLiAgRGlzY292ZXJl ZCB2ZXJ5IHF1aWNrbHkgdGhpcyB3b3VsZCBiZSBhIG1ham9yCi1wcm9qZWN0LiAgRWFjaCBwbGF0 Zm9ybSBoYXMgYSBkaWZmZXJlbnQgQVBJLCBvciBlbnZpcm9ubWVudCwgb3IgdHJhbnNpdGlvbgot cGxhbiwgb3Igd2hhdGV2ZXIgLS0gYSBuaWdodG1hcmUgdG8gaGFuZGxlIGluIHBvcnRhYmxlIGNv ZGUuICBBdCB0aGUgdmVyeQotbGVhc3Qgd2UnbGwgbmVlZCB0byBjb252ZXJ0IGEgbG90IG9mIEtl cm1pdCB2YXJpYWJsZXMgZnJvbSBsb25nIG9yIHVuc2lnbmVkCi1sb25nIHRvIHNvbWUgbmV3IEtl cm1pdCB0eXBlLCB3aGljaCBpbiB0dXJuIGlzICNkZWZpbmVkIG9yIHR5cGVkZWYnZAotYXBwcm9w cmlhdGVseSBmb3IgZWFjaCBwbGF0Zm9ybSAodG8gb2ZmX3Qgb3Igc2l6ZV90IG9yIHdoYXRldmVy KS4gIFRoZW4gd2UKLWhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRldGFpbHMgb2Ygb3BlbigpIHZz IGZvcGVuKCk7IHByaW50ZigpIGZvcm1hdHMgKCVsbGQKLXZzICVMZCB2cyAlIlBSSWQ2NCIuLi4p LCBwbGF0Zm9ybXMgbGlrZSBIUC1VWCB3aGVyZSB5b3UgbWlnaHQgaGF2ZSB0byB1c2UKLWRpZmZl cmVudCBBUElzIGZvciBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zIG9uIHRoZSBzYW1lIGNvbXB1dGVy LCBldGMuICBXZSdsbAotbmVlZCB0byBjb25mcm9udCB0aGlzIHNvb24sIGJ1dCBsZXQncyBnZXQg YSBnb29kIHN0YWJsZSA4LjAuMjExIHJlbGVhc2Ugb3V0Ci1maXJzdCEgIE1lYW53aGlsZSwgZm9y IGZ1dHVyZSByZWZlcmVuY2UsIGhlcmUgYXJlIGEgZmV3IGFydGljbGVzOgotCi1HZW5lcmFsOiBo dHRwOi8vZnJlc2htZWF0Lm5ldC9hcnRpY2xlcy92aWV3LzcwOS8KLUxpbnV4OiAgIGh0dHA6Ly93 d3cuZWNlLnV0ZXhhcy5lZHUvfmx1by9saW51eF9sZnMuaHRtbAotSFAtVVg6ICAgaHR0cDovL2Rl dnJzcmMxLmV4dGVybmFsLmhwLmNvbS9TVEsvcGFydG5lci9sZ19maWxlcy5wZGYKLVNvbGFyaXM6 IGh0dHA6Ly93d3dzLnN1bi5jb20vc29mdHdhcmUvd2hpdGVwYXBlcnMvd3AtbGFyZ2VmaWxlcy9s YXJnZWZpbGVzLnBkZgotCi1Mb29rZWQgaW50byBGVFAgdGltZW91dHMuICBJdCBhcHBlYXJzIEkg Y2FuIGp1c3QgY2FsbCBlbXB0eSgpICh3aGljaCBpcwotbm90aGluZyBtb3JlIHRoYW4gYSBmcm9u dCBlbmQgZm9yIHNlbGVjdCgpKSB3aXRoIHRoZSBkZXNpcmVkIHRpbWVvdXQgYmVmb3JlCi1hbnkg a2luZCBvZiBuZXR3b3JrIHJlYWQuICBJZiBpdCByZXR1cm5zIDw9IDAsIHdlIGhhdmUgYSB0aW1l b3V0LiAgVGhpcyBpcwotbm90IHF1aXRlIHRoZSBzYW1lIGFzIHVzaW5nIGFsYXJtKCkgLyBzaWdu YWwoKSBhcm91bmQgYSByZWN2KCkgKHdoaWNoIGNvdWxkCi1nZXQgc3R1Y2spIGJ1dCBhbGFybSgp IC8gc2lnbmFsKCkgYXJlIG5vdCBub3QgdXNlZCBpbiB0aGUgRlRQIG1vZHVsZSBhbmQgYXJlCi1u b3QgbmF0dXJhbGx5IHBvcnRhYmxlIHRvIFdpbmRvd3MsIGJ1dCBzZWxlY3QoKSBpcyBhbHJlYWR5 IGluIHVzZSBpbiB0aGUgRlRQCi1tb2R1bGUgZm9yIGJvdGggVW5peCBhbmQgV2luZG93cy4gIFRo aXMgZm9ybSBvZiB0aW1lb3V0IGNvdWxkIGJlIHVzZWQKLXBvcnRhYmx5IGZvciBib3RoIGNvbW1h bmQgcmVzcG9uc2UgYW5kIGRhdGEgcmVhZHMuICBXaGF0IGFib3V0IHdyaXRlcyB0byB0aGUKLWNv bW1hbmQgb3IgZGF0YSBzb2NrZXQ/ICBUaGV5IGNhbiBnZXQgc3R1Y2sgZm9yIGhvdXJzIGFuZCBo b3VycyB3aXRob3V0Ci1yZXR1cm5pbmcgdG9vLCBidXQgdGhlIHNlbGVjdCgpIGFwcHJvYWNoIHdv bid0IGhlbHAgaGVyZSAtLSB3ZSBuZWVkIHRoZQotYWN0dWFsIHNlbmQoKSBvciByZWN2KCkgdG8g dGltZSBvdXQsIG9yIGJlIHdyYXBwZWQgaW4gYW4gYWxhcm0oKS9zaWduYWwoKQota2luZCBvZiBt ZWNoYW5pc20uICBCdXQgaWYgd2UgY2FuIGRvIHRoYXQgZm9yIHNlbmRzLCB3ZSBjYW4gYWxzbyBk byBpdCBmb3IKLXJlY2VpdmVzLiAgQmV0dGVyIGNoZWNrIHdpdGggSmVmZiBiZWZvcmUgSSBzdGFy dCBwcm9ncmFtbWluZyBhbnl0aGluZy4KLTIwIE1hciAyMDA0LgotCi1MYXRlcjogRGVjaWRlZCB0 byBwb3N0cG9uZSB0aGUgYWJvdmUgdHdvIHByb2plY3RzIChkaXR0byBJUHY2KSB1bnRpbCBhZnRl cgotOC4wLjIxMSBpcyByZWxlYXNlZCBiZWNhdXNlIGJvdGggd2lsbCBoYXZlIG1ham9yIGltcGFj dHMgb24gcG9ydGFiaWxpdHkuCi1HcnVtYmxlOiBhbGwgaS9vIEFQSXMgc2hvdWxkIGhhdmUgYmVl biBkZXNpZ25lZCBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhCi10aW1lb3V0IHBhcmFtZXRlci4g IFRvIHRoaXMgZGF5LCBoYXJkbHkgYW55IGhhdmUgdGhpcyBmZWF0dXJlLgotCi0zLTQgQXByIDIw MDQ6IE1vcmUgOC4wLjIxMSBCZXRhLjAyKyB0ZXN0IGJ1aWxkczoKLQotIC4gRnJlZUJTRCAzLjMK LSAuIEZyZWVCU0QgNC40Ci0gLiBMaW51eCBEZWJpYW4gMi4xCi0gLiBMaW51eCBSSCA2LjEKLSAu IExpbnV4IFJIIDcuMQotIC4gTGludXggUkggNy4yCi0gLiBMaW51eCBSSCA5ICh3aXRoIDg0IGRp ZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgZmVhdHVyZSBzZWxlY3Rpb24pCi0gLiBMaW51eCBTdVNF IDYuNAotIC4gTGludXggU3VTRSA3LjAKLSAuIE5ldEJTRCAxLjQuMQotIC4gTmV0QlNEIDEuNS4y Ci0gLiBPcGVuQlNEIDIuNQotIC4gT3BlbkJTRCAzLjAKLSAuIFFOWCA0LjI1Ci0gLiBTQ08gVW5p eFdhcmUgMi4xLjMKLSAuIFNDTyBVbml4V2FyZSA3LjEuNAotIC4gU0NPIE9wZW5TZXJ2ZXIgNS4w LjcKLSAuIFNDTyBYRU5JWCAyLjMuNCAobm8gVENQKQotCi1DaGFuZ2VzIG5lZWRlZDogTm9uZS4K LQotUHJvYmxlbTogU0NPIFhFTklYIDIuMy40IG5ldHdvcmsgYnVpbGQgZmFpbGVkIGluIHRoZSBG VFAgbW9kdWxlIHdpdGgKLWhlYWRlci1maWxlIHN5bnRheCBhbmQgY29uZmxpY3RpbmctZGVmaW5p dGlvbnMgdHJvdWJsZS4gIEknbSBub3QgZ29pbmcgdG8KLXRyeSB0byBmaXggaXQ7IDguMC4yMDkg YnVpbHQgT0sgd2l0aCBGVFAsIHNvIHdlJ2xsIGp1c3Qga2VlcCB0aGF0IG9uZQotYXZhaWxhYmxl LgotCi1Hb3QgYWNjZXNzIHRvIFZNUyA4LjEgb24gSUE2NC4gIEJ1aWxkaW5nIHRoZSBub25ldCB2 ZXJzaW9uIG9mIEMtS2VybWl0Ci1yZXF1aXJlZCBtaW5vciBtb2RpZmljYXRpb25zIHRvIGNrdnZt cy5oLCBja3ZbZnRdaW8uYywgYW5kIGNrdmNvbi5jLCB0bwotYWNjb3VudCBmb3IgYSB0aGlyZCBh cmNoaXRlY3R1cmUuICBBbHNvIHRvIFNIT1cgRkVBVFVSRVMgaW4gY2t1dXM1LmMuICBPbmNlCi10 aGF0IHdhcyBkb25lLCB0aGUgVUNYIDUuNSB2ZXJzaW9uIGJ1aWx0IE9LIHRvby4gIFN0YXJ0cyBP SywgbWFrZXMgVGVsbmV0Ci1jb25uZWN0aW9uIE9LLCBzZW5kcyBmaWxlcy4gIEhhcyBzb21lIG9i dmlvdXMgZ2xpdGNoZXMgdGhvdWdoIC0tICJzdGF0IgotYWZ0ZXIgYSBmaWxlIHRyYW5zZmVyIHJl cG9ydHMgMCBlbGFwc2VkIHRpbWUgKGluIGZhY3QgaXQgd2FzIDAwOjA5OjQ4KSBhbmQKLTEyMTkx NzQ0MDAgY3BzICh3aGVuIGluIGZhY3QgaXQgd2FzIDEwMzY0KS4gIFRoaXMgZG9lc24ndCBoYXBw ZW4gb24gdGhlCi1BbHBoYS4gIEJ0dywgdGhlIElBNjQgYmluYXJ5IGlzIHR3aWNlIGFzIGJpZyBh cyB0aGUgQWxwaGEgb25lLiAgQ2hhbmdlZAotdG8gQmV0YS4wMy4gIDUgQXByIDIwMDQuCi0KLUZp eGVkIHRoZSBja2RhaWx5IHNjcmlwdCB0byBpbmNsdWRlIHRoZSBtYWtlZmlsZSBhbmQgbWFuIHBh Z2UgaW4gdGhlIFppcAotZmlsZSAodGhleSB3ZXJlIG5vdCBpbmNsdWRlZCBiZWNhdXNlIHRoZSBa aXAgZmlsZSB3YXMgaW50ZW5kZWQgbWFpbmx5IGZvcgotVk1TIHVzZXJzLCBidXQgc29tZSBVbml4 IHVzZXJzIHByZWZlciBaaXAgdG8gdGFyLmd6KS4gIDYgQXByIDIwMDQuCi0KLVRyYWNlZCBwcm9i bGVtcyBpbiBWTVMvSUE2NCBzdGF0aXN0aWNzIHJlcG9ydCB0byByZnRpbWVyKCkvZ2Z0aW1lcigp IGluCi1ja3Z0aW8uYywgd2hpY2ggdXNlIHN5cyQgYW5kIGxpYiQgY2FsbHMgdG8gZmlndXJlIGVs YXBzZWQgdGltZS4gIFRoZXNlIHdvcmsKLW9uIFZBWCBhbmQgQWxwaGEgYnV0IG5vdCBJQTY0LiAg U2VudCBhIHJlcG9ydCB0byB0aGUgY2hpZWYgZW5naW5lZXIgb2YgdGhlCi1JQTY0IFZNUyBwb3J0 OyBoZSBzYXlzIGl0J3MgcHJvYmFibHkgYSBidWcgaW4gVk1TIDguMSAod2hpY2ggaXMgbm90IGEg cmVhbAotcmVsZWFzZSk7IGhlJ2xsIG1ha2Ugc3VyZSBpdCdzIGZpeGVkIGluIDguMi4gIEFzIGFu IGV4cGVyaW1lbnQsIHRyaWVkCi1zd2FwcGluZyBpbiB0aGUgVW5peCB2ZXJzaW9ucyBvZiB0aGVz ZSByb3V0aW5lcyAod2hpY2ggY2FsbCBnZXR0aW1lb2ZkYXkoKQotZXRjKS4gIFRoZXkgc2VlbSB3 b3JrIGp1c3QgZmluZSAoaXQgaHVuZyBhIGNvdXBsZSB0aW1lcyBidXQgSSB0aGluayB0aGF0J3MK LWJlY2F1c2UgdGhlIHVuZGVybHlpbmcgc3lzdGVtIGh1bmcgdG9vOyB0cnlpbmcgaXQgbGF0ZXIg b24gYSBuZXcgY29ubmVjdGlvbiwKLWl0IHdhcyBmaW5lOyBob3dldmVyIEkgbm90aWNlZCBhIEJJ RyBkaXNjcmVwYW5jeSBpbiB0aHJvdWdocHV0IGJldHdlZW4KLXNlbmRpbmcgYW5kIHJlY2Vpdmlu ZykuICBNb3ZlZCBkZWZpbml0aW9ucyBmb3IgVk1TNjRCSVQgYW5kIFZNU0k2NCB0bwotY2tjZGVi Lmggc28gYWxsIG1vZHVsZXMgY2FuIHVzZSB0aGVtIGFuZCBhZGRlZCB0aGVtIHRvIHRoZSBTSE9X IEZFQVRVUkVTCi1kaXNwbGF5LiAgQWRkZWQgVk1TVjgwIGRlZmluaXRpb24gdG8gYnVpbGQgcHJv Y2VkdXJlLiAgQmV0YS4wMysuICBja2NkZWIuaCwKLWNrY3V1czUuYywgY2tjdnZtcy5oLCBja3Z0 aW8uYywgY2t2a2VyLmNvbSwgNiBBcHIgMjAwNC4KLQotV2hpbGUgZG9pbmcgdGhlIGJ1aWxkLWFs bCwgSSBub3RpY2VkIHRoZSBWTVMgdmVyc2lvbiBkaWQgbm90IGJ1aWxkIHdpdGgKLU11bHRpbmV0 IG9yIG9sZGVyIFVDWCB2ZXJzaW9ucywgYWx3YXlzIHdpdGggdGhlIHNhbWUgZXJyb3JzIC0tIHVu ZGVjbGFyZWQKLXZhcmlhYmxlcywgdW5kZWZpbmVkIHN5bWJvbHMsIGFsbCBUQ1AvSVAgcmVsYXRl ZC4gIFRoaXMgZGlkbid0IGhhcHBlbiBhCi1jb3VwbGUgd2Vla3MgYWdvLi4uICBTb21laG93IHRo ZSBvcmRlciBvZiAjaW5jbHVkZXMgd2FzIG1lc3NlZCB1cCAtLQotY2t1dXNyLmggZGVwZW5kZWQg b24gc3ltYm9scyB0aGF0IGFyZSBkZWZpbmVkIGluIGNrY25ldC5oLCBidXQgY2tjbmV0LmgKLXdh cyBiZWluZyBpbmNsdWRlZCBhZnRlciBja3V1c3IuaC4uLiAgdGhpcyB3YXMgY29tcG91bmRlZCBi eSB0d28gbWlzc2luZwotY29tbWFzIGluIGNrdmtlci5jb20uICAxMSBBcHIgMjAwNC4KLQotUmVt b3ZlZCBCZXRhIGRlc2lnbmF0aW9uLCByZWxlYXNlZCBhcyA4LjAuMjExLCAxMCBBcHIgMjAwNC4K LQotSSBoYWQgc29tZWhvdyBsb3N0IHRoZSBlZGl0IHRvIGNrdXRpby5jIHRoYXQgY2hhbmdlZCB0 aGUgVVVDUCBsb2NrZmlsZSBmb3IKLU1hYyBPUyBYIGZyb20gL3Zhci9zcG9vbC91dWNwIHRvIC92 YXIvc3Bvb2wvbG9jay4gIFNvIEkgc2xpcHBlZCBpdCBpbiBhbmQKLXJlLXVwbG9hZGVkIHZlcnNp b24gOC4wLjIxMS4gIFlvdSBjYW4gdGVsbCB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIFNIT1cKLVZF UlNJT05TIGhhcyAxNyBBcHIgMjAwNCBmb3IgdGhlIENvbW11bmljYXRpb25zIEkvTyBtb2R1bGUu ICBBbHNvIHRoZSAxMC4zCi1leGVjdXRhYmxlIG5vdyBoYXMgYSBkZXNpZ25lciBiYW5uZXI6ICJN YWMgT1MgWCAxMC4zIi4gIG1ha2VmaWxlLCBja3V2ZXIuaCwKLWNrdXRpby5jLCBja3V1c1s0NV0u YywgMTcgQXByIDIwMDQuCi0KLS0tLTguMC4yMTEtLS0KLQotUmVtb3ZlZCAid2VybWl0IiBmcm9t ICJtYWtlIGNsZWFuIiAoaG93IGRpZCBpdCBnZXQgdGhlcmU/KS4gIG1ha2VmaWxlLgotCi1Gcm9t IEplZmYsIGFwcGxpZWQgMTAgTWF5IDIwMDQuCi0gLiBSZWFycmFuZ2UgI2lmZGVmcyB0aGF0IGRl ZmluZSBPUy8yLW9ubHkgZmVhdHVyZXMuIGNrY2RlYi5oLgotIC4gRml4IHR3byBzdHJuY2F0KClz IHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBja3N0cm5jYXQoKXMuICBja3V1czcuYy4KLSAuIEZpeCB0 d28gc3RybmNhdCgpcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2tzdHJuY2F0KClzLiAgY2t1dXM0 LmMuCi0gLiBGaXggb25lIHN0cm5jYXQoKS4gY2tjZm5zLmMuCi0gLiBTRVQgRlRQIENIQVIgT04g dXNlZCBiYWNrd2FyZHMgYnl0ZSBvcmRlciB3aGVuIG91dHB1dCB0byBzY3JlZW4uICBja2NmbnMu Yy4KLSAuIEZpeCB0d28gc3RybmNhdCgpcy4gIGNrdXVzMy5jLgotIC4gQWRkIFNFVCBORVRXT1JL IFRZUEUgTkFNRUQtUElQRSBmb3IgSzk1LiAgY2t1dXMzLmMuCi0gLiBBZGQgIk5vIGFjdGl2ZSBj b25uZWN0aW9ucyIgbWVzc2FnZSB0byBodXBvaygpLiAgY2t1dXMzLmMuCi0gLiBGaXggbWFueSBz dHJuY2F0KClzLiAgY2tjbmV0LmMuCi0gLiBGaXggc29tZSBzdHJuY2F0KClzLiAgY2tjZnRwLmMK LSAuIE1ha2UgRlRQIHBvcnQgdW5zaWduZWQgc2hvcnQgZm9yIDE2MzgzIDwgcG9ydCA8IDY1NTM2 LiAgY2tjZnRwLmMuCi0gLiBJbXByb3ZlbWVudHMgdG8gRlRQIFVTRVIgY29tbWFuZC4gIGNrY2Z0 cC5jLgotIC4gRml4IEZFQVQgcGFyc2luZyB0byBhbGxvdyBmb3IgdmFyaW91cyBmb3JtcyBvZiB3 aGl0ZXNwYWNlLiAgY2tjZnRwLmMuCi0KLVMtRXhwcmVzc2lvbiAoQU5EIEZPTyBCQVIpIHdvdWxk IG5vdCBzaG9ydC1jaXJjdWl0IGlmIEZPTydzIHZhbHVlIHdhcyAwLAotZXZlbiB0aG91Z2ggc2hv cnQtY2lyY3VpdGluZyBjb2RlIGhhcyBiZWVuIHRoZXJlIHNpbmNlIERheSAxLiAgU2ltaWxhcmx5 IGZvcgotKE9SIEJBUiBGT08pLiAgVHVybnMgb3V0IHRoZSBmaXJzdCBvcGVyYW5kIHdhcyBhIHNw ZWNpYWwgY2FzZSB0aGF0IGJ5cGFzc2VkCi10aGUgc2hvcnQtY2lyY3VpdCBjaGVjay4gIEZpeGVk IGluIGRvc2V4cCgpOiBja3V1czMuYywgMTAgTWF5IDIwMDQuCi0KLVJlZCBIYXQgNy4zIChhbmQg bWF5YmUgb3RoZXJzKSA8YmF1ZGJveS5oPiByZWZlcmVuY2VkIG9wZW4oKSB3aXRob3V0IGZpcnN0 Ci1lbnN1cmluZyBpdCB3YXMgZGVjbGFyZWQuICBUaGUgZGVjbGFyYXRpb24gaXMgaW4gPGZjbnRs Lmg+LCB3aGljaCBpcyBhZnRlcgotPGJhdWRib3kuaD4gaW4gY2t1dGlvLmMgc2VyaWVzIG9mICNp bmNsdWRlcy4gIE1hZGUgYSBzcGVjaWFsIGNhc2UgZm9yIHRoaXMuCi1ja3V0aW8uYyAoc2VlIGNv bW1lbnRzKSwgMTAgTWF5IDIwMDQuCi0KLUlmIHRoZSBsb2NhbCBLZXJtaXQncyBwYXJpdHkgaXMg c2V0IHRvIFNQQUNFIGFuZCB0aGVuIGEgZmlsZSBhcnJpdmVzIHZpYQotYXV0b2Rvd25sb2FkLCBh dXRvbWF0aWMgcGFyaXR5IGRldGVjdGlvbiBpbXByb3Blcmx5IHN3aXRjaGVzIGl0IHRvIE5PTkUu Ci1GaXhlZCBpbiBycGFjaygpIGJ5IHN3aXRjaGluZyBwYXJpdHkgYXV0b21hdGljYWxseSBvbmx5 IGlmIHBhcmNoaygpIHJldHVybnMKLT4gMCAocmF0aGVyIHRoYW4gPiAtMSksIHNpbmNlIE5PTkUg YW5kIFNQQUNFIGFyZSBpbmRpc3Rpbmd1aXNoYWJsZS4gIEEKLWJpZ2dlciBwcm9ibGVtIHN0aWxs IHJlbWFpbnM6IGF1dG9kb3dubG9hZCBkb2VzIG5vdCB3b3JrIGF0IGFsbCBpZiB0aGUKLXNlbmRl ciBpcyB1c2luZyBhY3R1YWwgcGFyaXR5IGJpdHMgKGV2ZW4sIG9kZCwgb3IgbWFyaykgYW5kIHRo ZSByZWNlaXZlcidzCi1wYXJpdHkgaXMgTk9ORS4gIGNrY2ZuMi5jLCAxMCBNYXkgMjAwNC4KLQot V2hlbiBhIERJQUwgTUFDUk8gaXMgZGVmaW5lZCBhbmQgdGhlIHBob25lIG51bWJlciBpcyBjb21w cmlzZWQgb2YgbW9yZSB0aGFuCi1vbmUgIndvcmQiIChpLmUuIGNvbnRhaW5zIHNwYWNlcyksIHRo ZSBkaWFsIG1hY3JvIGxvc2VzIHRoZSBzZWNvbmQgYW5kCi1zdWJzZXF1ZW50IHdvcmRzIGFmdGVy IHRoZSBmaXJzdCBjYWxsLiBGaXhlZCBpbiB4ZGlhbCgpIGJ5IGluc2VydGluZyBxdW90ZXMKLWFy b3VuZCBwaG9uZSBudW1iZXIgYmVmb3JlIHBhc3NpbmcgaXQgdG8geGRpYWwoKS4gY2t1dXM2LmMs IDEwIE1heSAyMDA0LgotCi1ESUFMIE1BQ1JPIGZpeCB3YXMgbm90IHJpZ2h0OyB0aGUgcXVvdGVz IHdlcmUga2VwdCBhcyBwYXJ0IG9mIHRoZSBwaG9uZQotbnVtYmVyIGFuZCBzZW50IHRvIHRoZSBt b2RlbS4gIGRvZG8oKSBwb2tlcyBpdHMgYXJndW1lbnQgdG8gc2VwYXJhdGUgdGhlCi1tYWNybyBh cmd1bWVudCBzdHJpbmcgaW50byBpdHMgY29tcG9uZW50IGFyZ3VtZW50cy4gIHhkaWFsKCkgaXMg Y2FsbGVkCi1yZXBlYXRlZGx5IG9uIHRoZSBzYW1lIHN0cmluZywgc28gYWZ0ZXIgdGhlIGZpcnN0 IHRpbWUsIGEgTlVMIGhhcyBiZWVuCi1kZXBvc2l0ZWQgYWZ0ZXIgdGhlIGZpcnN0IHdvcmQgb2Yg dGhlIHRlbGVwaG9uZSBudW1iZXIuICBUaGUgZml4IGlzIHRvIGhhdmUKLXhkaWFsKCkgY3JlYXRl IGEgcG9rZWFibGUgY29weSBvZiBpdHMgYXJndW1lbnQgc3RyaW5nIGJlZm9yZSBjYWxsaW5nCi1k b2RvKGRpYWwtbWFjcm8sYXJncy4uLikuICBJdCBtaWdodCBzZWVtIG9kZCB0aGF0IGRvZG8gcG9r ZXMgaXRzIGFyZ3VtZW50LAotYnV0IG1ha2luZyBjb3BpZXMgd291bGQgYmUgd291bGQgYmUgcHJv aGliaXRpdmUgaW4gc3BhY2UgYW5kIHRpbWUuCi1ja3V1czYuYywgMjMgTWF5IDIwMDQuCi0KLUZU UCBDRCBkaWQgbm90IHN0cmlwIGJyYWNlcyBvciBxdW90ZXMgZnJvbSBhcm91bmQgaXRzIGFyZ3Vt ZW50LiAgRml4ZWQgaW4KLWRvZnRwcm10KCk6IGNrY2Z0cC5jLCAyMyBNYXkgMjAwNC4KLQotQWRk ZWQgY2xpZW50IHNpZGUgb2YgUkVNT1RFIE1FU1NBR0UvUk1FU1NBR0UvUk1TRzogY2t1dXNbcjI3 XS5jLCAyMyBNYXkgMjAwNC4KLQotU2VydmVyIHNpZGUgb2YgUkVNT1RFIE1FU1NBR0U6IGNrY3By by53LCAyMyBNYXkgMjAwNC4KLQotRnJvbSBEYXZlIFNuZWRkb246IGFuIHVwZGF0ZWQgQ0tWS0VS LkNPTSBjb250YWluaW5nIGEgZml4IHdoZXJlIHRoZQotQ09NUEFRX1NTTCBzeW1ib2wgd2FzIG5v dCBkZWZpbmVkIGJ1dCBsYXRlciByZWZlcmVuY2VkIHdoaWNoIGdlbmVyYXRlZCBhbgotdW5kZWZp bmVkIHN5bWJvbCBlcnJvci4gIGNrdmtlci5jb20sIDUgSmFuIDIwMDUuCi0KLUZyb20gQW5keSBU YW5lbmJhdW0gKDI4IE1heSAyMDA1KToKLSAuIEZpeCBhbiBlcnJhbnQgcHJvdG90eXBlIGluIGNr Y2tlci5oIGFuZCBja3VjbWQuaCAtICgpIGluc3RlYWQgb2YgKHZvaWQpLgotIC4gQWRkIHN1cHBv cnQgZm9yIE1JTklYIDMuMC4gIG1ha2VmaWxlLCBja3V0aW8uYywgY2t1ZmlvLmMsIGNrdXZlci5o LgotCi1GaXhlZCBtZXNzZWQtdXAgc25kaGxwKCkgY2FsbCB3aGljaCBhcHBhcmVudGx5IGhhZCBi ZWVuIGppZ2dlcmVkIHRvCi1jb21wZW5zYXRlIGZvciB0aGUgYmFkIHByb3RvdHlwZSB3aGljaCBo YXMgbm93IGJlZW4gZml4ZWQsIGNrY3Byby53LAotMTIgSnVuIDIwMDUuCi0KLUZyb20gSmVmZiAo MTIgSnVuZSAyMDA1KToKLSAuIFNlY3VyaXR5IHVwZGF0ZXMuICBja19zc2wuYywgY2tfY3JwLmMs IGNrdWF0aC5jLgotIC4gRml4IGJ1ZyBpbiBLOTUgU0VUIFBSSU5URVIgQ0hBUkFDVEVSLVNFVC4g Y2t1dXMzLmMuCi0gLiBBZGQgcHJpbnRlciBjaGFyYWN0ZXItc2V0IHRvIEs5NSBTSE9XIFBSSU5U RVIgZGlzcGxheS4gY2t1dXM1LGMKLSAuIEFkZCBTRVQgTVNLRVJNSVQgRklMRS1SRU5BTUlORyB0 byBLOTUuIGNrdXVzNy5jLCBja3V1c3IuaC4KLSAuIEFkZCBoZWxwIGZvciBLOTUgU0VUIE1TS0VS TUlULiAgY2t1dXMyLmMuCi0gLiBBZGQgU0VUIEdVSSBDTE9TRSB0byBLOTUuICBja3V1c3IuaCwg Y2t1dXMyLmMsIGNrdXVzMy5jCi0gLiBBZGQgaGVscCB0ZXh0IGZvciBLOTUgU0VUIEdVSSBNRU5V QkFSIGFuZCBUT09MQkFSLiAgY2t1dXMyLmMuCi0gLiBBZGQgLS1ub2Nsb3NlIGNvbW1hbmQtbGlu ZSBvcHRpb24gZm9yIEs5NS4gIGNrdXVzeS5jCi0gLiBBZGQgUEFNIHN1cHBvcnQgZm9yIE1hYyBP UyBYLiAgY2t1ZmlvLmMuCi0gLiBBZGQgR1NTQVBJIHN1cHBvcnQgZm9yIE1hYyBPUyBYLiAgY2tj ZnRwLmMuCi0gLiBQaWNrIHVwIG1vcmUgVVJMIG9wdGlvbnMuICBja2NrZXIuaCwgY2t1dXN5LmMu Ci0gLiBGaXggYnVnIGluIGRlbHRhLXRpbWUgY2FsY3VsYXRpb24gYWNyb3NzIHllYXIgYm91bmRh cnkuICBja3VjbWQuYy4KLSAuIEFkZCBTZWN1cmUgRW5kcG9pbnRzIHRvIGNvcHlyaWdodCBub3Rp Y2VzLiAgY2tjbWFpLmMuCi0gLiBGaXggRlRQIEhFTFAgdG8gb3ZlcnJpZGUgdW52ZXJib3NlIHNl dHRpbmcuICBja2NmdHAuYy4KLSAuIEZpeCBhc3NvcnRlZCBtaW5vciB0eXBvcy4KLQotRnJvbSBN YXR0aGlhcyBLdXJ6OiBhdXRvbWF0aWMgaGVyYWxkIGdlbmVyYXRpb24gZm9yIE5ldEJTRCAyLjAg YW5kIGxhdGVyLAotIm1ha2UgbmV0YnNkMiIuICBja3V2ZXIuaCwgbWFrZWZpbGUsIDEyIEp1biAy MDA1LgotCi1BZGRlZCBTRVQgVEVSTUlOQUwgTEYtRElTUExBWSwgbGlrZSBDUi1ESVNQTEFZIGJ1 dCBmb3IgbGluZWZlZWQgcmF0aGVyIHRoYW4KLWNhcnJpYWdlIHJldHVybi4gIGNrdXVzci5oLCBj a3V1c1syNTd4XS5jLCAxMiBKdW4gMjAwNS4KLQotTWFkZSBhIGNvbW1hbmQtbGluZSBvcHRpb24g LS11bmJ1ZmZlcmVkIHRvIGRvIHdoYXQgdGhlIC1ETk9OT1NFVEJVRgotY29tcGlsZS10aW1lIG9w dGlvbiBkb2VzLCBpLmUuIGZvcmNlIHVuYnVmZmVyZWQgY29uc29sZSBpL28uICBVbml4IG9ubHku Ci1ja3V1c3IuaCwgY2t1dXN5LmMsIGNrdXRpby5jLCAxMiBKdW4gMjAwNS4KLQotRml4ZWQgZ2V0 aWFjdCgpICh3aGljaCBkaXNwbGF5cyBURVJNIElETEUtQUNUSU9OIHNldHRpbmcpIHRvIGRpc3Bs YXkKLXNwYWNlIGFzIFx7MzJ9LiAgY2t1dXM3LmMsIDEyIEp1biAyMDA1LgotCi1BZGRlZCBMTVYg YXMgYSBzeW5vbnltIGZvciBMUkVOQU1FLCB3aGljaCBpcyBpdHNlbGYgYSBzeW5vbnltIGZvciBM T0NBTAotUkVOQU1FLiAgY2t1dXNyLmMsIDEyIEp1biAyMDA1LgotCi1QdXQgSEVMUCBTRVQgVEVS TUlOQUwgREctVU5JWC1NT0RFIHRleHQgd2hlcmUgaXQgYmVsb25nZWQuICBja3V1czIuYywKLTEy IEp1biAyMDA1LgotCi1BZGRlZCBJRiBMSU5LIChVbml4IG9ubHkpIHRvIHRlc3QgaWYgYSBmaWxl bmFtZSBpcyBhIHN5bWxpbmsuICBVc2VzIHRoZSBtb3N0Ci1zaW1wbGVtaW5kZWQgcG9zc2libGUg bWV0aG9kLCBjYWxscyByZWFkbGluaygpIHRvIHNlZSBpZiBpdCBzdWNjZWVkcyBvciBmYWlscy4K LU5vIG90aGVyIG1ldGhvZCBpcyBkZXBlbmRhYmxlIGFjcm9zcyBkaWZmZXJlbnQgVW5peGVzLiAg VGhpcyBjb2RlIHNob3VsZCBiZQotcG9ydGFibGUgYmVjYXVzZSBJIGFscmVhZHkgdXNlIHJlYWRs aW5rKCkgZWxzZXdoZXJlIHdpdGhpbiBleGFjdGx5IHRoZSBzYW1lCi0jaWZkZWZzLiAgY2t1Zmlv LmMsIGNrdXVzMi5jLCBja3V1czYuYywgMTIgSnVuIDIwMDUuCi0KLUZpeGVkIGEgYnVnIGluIHdo aWNoIFxmZGlyKCkgd291bGRuJ3Qgd29yayB3aGVuIGl0cyBhcmd1bWVudCB3YXMgdGhlIG5vbndp bGQKLW5hbWUgb2YgYSBkaXJlY3RvcnkgZmlsZS4gIHp4cGFuZCgpOiBja3VmaW8uYywgMTIgSnVu IDIwMDUuCi0KLU1hZGUgXGZkaXJlY3RvcnkoKSBhIHN5bm9ueW0gZm9yIFxmZGlyZWN0b3JpZXMo KS4gIE1hZGUgXGZkaXIoKSBhbgotYWNjZXB0YWJsZSBhYmJyZXZpYXRpb24gZm9yIHRoZXNlLCBl dmVuIHRob3VnaCBpdCBjbGFzaGVzIHdpdGggXGZkaXJuYW1lKCksCi13aGljaCBzdGlsbCB3b3Jr cyBhcyBiZWZvcmUuICBja3V1czQuYywgMTIgSnVuIDIwMDUuCi0KLUFkZGVkIHRoZSBsb25nLW5l ZWRlZCBcZmxvcHgoKSBmdW5jdGlvbiwgdG8gcmV0dXJuIHJpZ2h0bW9zdCBwaWVjZXMgb2YKLXN0 cmluZ3MsIHN1Y2ggYXMgZmlsZSBleHRlbnNpb25zLiAgXGZzdHJpcHgoKSBhbmQgXGZsb3B4KCkg YXJlIHRoZQotb3J0aG9nb25hbCBmdW5jdGlvbnMgd2UgbmVlZCB0byBwaWNrIGZpbGVuYW1lcyBh cGFydCBmcm9tIHRoZSByaWdodDoKLVxzdHJpcHgoZm9vLnRhci5neikgPSBmb28udGFyOyBmbG9w eChmb28udGFyLmd6KSA9IGd6LiAgY2t1dXNyLmgsIGNrdXVzci5jLAotY2t1dXMyLmMsIDEyIEp1 biAyMDA1LgotCi1SZW1vdmVkIHJlZmVyZW5jZSB0byBkZWZ1bmN0IGZheCBudW1iZXIsIGNrY21h aS5jLCAxMiBKdW4gMjAwNS4KLQotQWRkZWQgLURIQVZFX1BUTVggdG8gbGludXgra3JiNStvcGVu c3NsK3psaWIrc2hhZG93K3BhbS4gIEZyb20gVGltb3RoeSBGb2xrcy4KLW1ha2VmaWxlLCAxMiBK dW4gMjAwNS4KLQotQnVpbHQgb24gU29sYXJpcyA5IGFuZCBOZXRCU0QgMi4wLgotCi1Gcm9tIEpl ZmY6IE5ldyBidWlsZCB0YXJnZXQgZm9yIE1hYyBPUyBYIDEwLjMgd2l0aCBLZXJiZXJvcyA1IGFu ZCBTU0wuCi1tYWtlZmlsZSwgMTQgSnVuIDIwMDUuCi0KLUZpeGVkIGVycm9yIGluIGNrdXZlci5o IE5ldEJTRCAjaWZkZWZzLiAgMTUgSnVuIDIwMDUuCi0KLUZpeGVkIFNFVCBURVJNSU5BTCBJRExF LUFDVElPTiBPVVRQVVQgdG8gd29yayBhcyBkb2N1bWVudGVkLCBuYW1lbHkgaWYgdGhlCi1vdXRw dXQgc3RyaW5nIGlzIGVtcHR5LCB0byBzZW5kIGEgTlVMLiAgUHJldmlvdXNseSB0aGVyZSB3YXMg bm8gd2F5IHRvIG1ha2UKLWl0IHNlbmQgYSBOVUwuICBja3V1czcuYywgMTUgSnVuIDIwMDUuCi0K LVN1cHBvc2UgKGluIFVuaXgsIGZvciBleGFtcGxlKSBhIGZpbGVuYW1lIGNvbnRhaW5zIHdpbGRj YXJkIGNoYXJhY3RlcnMsIHN1Y2gKLWFzIHthYmN9LnR4dC4gIFdoZW4gcmVmZXJyaW5nIHRvIHN1 Y2ggYSBmaWxlIChlLmcuIGluIGEgU0VORCBjb21tYW5kKSwgdGhlc2UKLWNoYXJhY3RlcnMgY2Fu IGJlIHF1b3RlZCwgZS5nLiBce2FiY1x9LnR4dC4gIEJ1dCBpZiB0aGUgZmlsZSBsaXN0IGhhcyBi ZWVuCi1vYnRhaW5lZCBwcm9ncmFtbWF0aWNhbGx5LCBlLmcuIHN0b3JlZCBpbiBhbiBhcnJheSwg dGhlcmUgaXMgbm8gd2F5LCBzaG9ydAotb2YgdGVkaW91cywgY29tcGxpY2F0ZWQsIGFuZCBlcnJv ci1wcm9uZSBzdHJpbmcgcHJvY2Vzc2luZywgdG8gcmVmZXJlbmNlIHRoZQotZmlsZS4gIEZvciB0 aGlzIHdlIG5lZWQgYSB3YXkgdG8gZGlzYWJsZSB3aWxkY2FyZCBwcm9jZXNzaW5nLiAgSSBhZGRl ZCB7IE9OLAotT0ZGIH0gY2hvaWNlcyBmb3IgdGhlIFNFVCBXSUxEIGFuZCBTSE9XIEZJTEUgY29t bWFuZHM6IGNrdXVzci5oLCBja3V1c1syMzRdLmMuCi17IE9OLCBPRkYgfSB0dXJucyB3aWxkY2Fy ZGluZyBvZmYgYW5kIG9uIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSB7IEtFUk1JVCwKLVNIRUxMIH0g YWdlbnQgY2hvaWNlOyBpdCBkb2VzIHRoaXMgYnkgc2V0dGluZyBhIG5ldyBhbmQgc2VwYXJhdGUg Z2xvYmFsCi12YXJpYWJsZSwgd2lsZGVuYS4gIEFkZGVkIHNlbWFudGljcyB0byBja3VmaW8uYy4g IENydWRlIGJ1dCBlZmZlY3RpdmUuICBJdAotbWlnaHQgaGF2ZSBiZWVuIG1vcmUgVW5peGxpa2Ug dG8gYWRkIFlldCBBbm90aGVyIGZvcm0gb2YgcXVvdGluZyBidXQgd2UKLWhhdmUgZW5vdWdoIG9m IHRoYXQgYWxyZWFkeSAobGF0ZXIgbWF5YmUgSSdsbCBhZGQgYSBcZnVuY3Rpb24oKSBmb3IgdGhp cykuCi1OZWVkcyB0byBiZSBwcm9wYWdhdGVkIHRvIFdpbmRvd3MgYW5kIFZNUy4gIDE1IEp1biAy MDA1LgotCi1JbXByb3ZlZCBhbmQgZml4ZWQgdHlwb3MgaW4gSEVMUCBXSUxEQ0FSRCBhbmQgSEVM UCBQQVRURVJOLiAgY2t1dXMyLmMsCi0xNSBKdW4gMjAwNS4KLQotVGhlIEdSRVAgY29tbWFuZCwg YW5kIHByb2JhYmx5IGFueXRoaW5nIGVsc2UgdGhhdCB1c2VzIGNrbWF0Y2goKSBmb3IgcGF0dGVy bgotbWF0Y2hpbmcsIGZhaWxlZCBvbiBwYXR0ZXJucyBsaWtlICovWzAtM10qLmh0bWwuICBUaGUg W2EtYl0gaGFuZGxlciwgd2hlbgotZmFpbGluZyB0byBtYXRjaCBhdCB0aGUgY3VycmVudCBwb3Np dGlvbiwgbmVnbGVjdGVkIHRvIGJhY2sgdXAgdGhlIHBhdHRlcm4KLWFuZCB0cnkgYWdhaW4gb24g dGhlIHJlbWFpbmRlciBvZiB0aGUgc3RyaW5nLiAgSSBhbHNvIGZpeGVkIGFub3RoZXIgY2FzZSwg aW4KLXdoaWNoIG1hdGNoaW5nIGEgbGl0ZXJhbCBzdHJpbmcgYSpiP2MgYWdhaW5zdCB0aGUgcGF0 dGVybiBhWyo/XSpbPypdYyBjYXVzZWQKLWNrbWF0Y2goKSB0byByZWN1cnNlIHVudGlsIGl0IGJs ZXcgdXAuICBja2NsaWIuYywgMTYgSnVuIDIwMDUuCi0KLUFkZGVkIGJ1aWxkcyBhbmQgZGVzaWdu ZXIgYmFubmVyIGZvciBTb2xhcmlzIDEwLiAgbWFrZWZpbGUsIGNrdXZlci5oLAotMjcgSnVuIDIw MDUuCi0KLURlZmluZWQgQ0tIVFRQIGZvciBOZXRCU0QsIHRoZSBIVFRQIGNvZGUgYnVpbGRzIGFu ZCB3b3JrcyBmaW5lIHRoZXJlLgotY2tjZGViLmgsIDIgSnVsIDIwMDUuCi0KLUFkZGVkICNpZm5k ZWYgT1NGNDAuLiNlbmRpZiBhcm91bmQgZGVmaW5pdGlvbiBvZiBpbmV0X2F0b24oKSBpbiBja19z c2woKQotdG8gYWxsb3cgYnVpbGRpbmcgaW4gVHJ1NjQuICBBZGRlZCB0cnU2NC01MWIrb3BlbnNz bCB0byBtYWtlZmlsZS4KLTE1IEp1bCAyMDA1LgotCi1IVFRQIEdFVCB3b3VsZCBmYWlsIGlmIHRo ZSBVUkwgY29udGFpbmVkIGFueSBtZXRhY2hhcmFjdGVycywgbm8gbWF0dGVyIGhvdwotbXVjaCB5 b3UgcXVvdGVkIHRoZW0uICBBbHRob3VnaCBpdCB1c2VzIGNtZmxkKCkgdG8gcGFyc2UgdGhlIChw YXJ0aWFsKSBVUkwsCi1pdCB0aGVuIHVzZXMgY21vZmkoKSB0byBnZXQgdGhlIG91dHB1dCBmaWxl bmFtZSwgd2hpY2ggYnkgZGVmYXVsdCBpcyB0aGUKLSJmaWxlbmFtZSIgZnJvbSB0aGUgVVJMLCB3 aGljaCBtaWdodCBiZSBzb21ldGhpbmcgbGlrZSAicmFua2VtLmFzcD9pZD0xNjM5Ii4KLWNtb2Zp KCkgcmVmdXNlcyB0byBhY2NlcHQgdW5xdW90ZWQgbWV0YWNoYXJhY3RlcnMgaW4gImZpbGVuYW1l cyIgYW5kIHRoYXQncwotd2hhdCBoYXBwZW5zIGluIHRoaXMgY2FzZSBpZiB0aGUgb3V0cHV0IGZp bGVuYW1lIGlzIG5vdCBzcGVjaWZpZWQuICBXb3JrZWQKLWFyb3VuZCB0aGlzIGJ5IGRpc2FibGlu ZyB3aWxkY2FyZCBwcm9jZXNzaW5nIGFyb3VuZCBIVFRQIEdFVCB1c2luZyB0aGUgbmV3Ci0id2ls ZGVuYSIgdmFyaWFibGUgZnJvbSBKdW5lIDE1dGguICBja3V1c3IuYywgMTggSnVsIDIwMDUuCi0K LUZpeGVkIHRoZSBKdW5lIDE2dGggZml4IHRvIHRoZSBwYXR0ZXJuIG1hdGNoZXIuICBJIGZpeGVk IGEgcmVhbCBwcm9ibGVtLCBidXQKLUkgbWFkZSBhbiB1bnJlbGF0ZWQgb3B0aW1pemF0aW9uIHRo YXQgaW50cm9kdWNlZCBuZXcgb25lcy4gIGNrY2xpYi5jLAotMTggSnVsIDIwMDUuCi0KLUFkZGVk IG1pc3NpbmcgaGVscCB0ZXh0IGZvciBcZmI2NGVuY29kZSgpIGFuZCBcZmI2NGRlY29kZSgpLiAg Y2t1dXMyLmMsCi0xOCBKdWwgMjAwNS4KLQotQ2hhbmdlZCBTRVQgV0lMRCBPRkYgaGVscCB0ZXh0 IHRvIHdhcm4gdGhhdCB0aGlzIHNldHRpbmcgcHJldmVudHMgdGhlCi1jcmVhdGlvbiBvZiBiYWNr dXAgZmlsZXMgKGxhdGVyIEknbGwgaGF2ZSB0byBzZWUgaWYgc29tZXRoaW5nIG1vcmUgdXNlZnVs Ci1jYW4gYmUgZG9uZSBhYm91dCB0aGlzKS4gIGNrdXVzMi5jLCAxOCBKdWwgMjAwNS4KLQotQnVp bHQgT0sgb24gTWFjIE9TIFggMTAuNC4yIHVzaW5nIG1hY29zeDEwMyB0YXJnZXQgKGJ1dCB3aXRo IHNvbWUKLSJzaWduZWRuZXNzIiB3YXJuaW5ncyBpbiBja2NuZXQuYyBhbmQgY2tjZnRwLmMpLiAg QnVpbHQgb24gVW5peHdhcmUgNy4xLjQKLXdpdGggdXc3IHRhcmdldC4gIDI3LTI4IEp1bCAyMDA1 LiAKLQotQWRkZWQgLURDS0hUVFAgdG8gTWFjIE9TIFggMTAuMy0uNCBLRkxBR1MuICBNYWtlZmls ZSwgNCBBdWcgMjAwNS4KLQotQnVpbHQgb24gQlNESSA0LjMuMS4gIEFkZGVkIC1EQ0tIVFRQLiAg Ci0KLUNvbXBhY3Qgc3Vic3RyaW5nIG5vdGF0aW9uIGV4dGVuZGVkIHRvIGFjY2VwdCBub3Qgb25s eSBzdGFydDpsZW5ndGggYnV0IGFsc28KLXN0YXJ0LWVuZCBub3RhdGlvbi4gIFRodXMgXHMoZm9v WzEyOjE4XSkgbWVhbnMgdGhlIHN1YnN0cmluZyBvZiBmb28gc3RhcnRpbmcKLWF0IHBvc2l0aW9u IDEyIG9mIGxlbmd0aCAxOCwgYW5kIHRuZSBuZXcgXHMoZm9vWzEyLTE4XSkgbWVhbnMgdGhlIHN1 YnN0cmluZwotb2YgZm9vIHN0YXJ0aW5nIGF0IHBvc2l0aW9uIDEyIGFuZCBlbmRpbmcgd2l0aCBw b3NpdGlvbiAxOC4gIERpdHRvIGZvcgotXDooXCVhKSwgZXRjLiAgY2t1dXM0LmMsIDkgQXVnIDIw MDUuCi0KLVNlZSBjb3JyZXNwb25kZW5jZSB3aXRoIE1hcmsgU2FwaXJvLCBOb3YgMjAwMyBhbmQg U2VwIDIwMDQsIGFib3V0IGNlcnRhaW4KLXZhcmlhdGlvbnMgb24gSUYgc3ludGF4IGhhdmluZyBi ZWVuIGJyb2tlbiBieSB0aGUgaW50cm9kdWN0aW9uIG9mICJpbW1lZGlhdGUKLW1hY3JvcyIgY2ly Y2EgMTk5OS4gIEl0IHNlZW1zIHRoZSBwcm9ibGVtIC0tIHZhcmlhYmxlcyBub3QgYmVpbmcgZXhw YW5kZWQgLS0KLWFsd2F5cyBvY2N1cnMgaW4gdGhlIEVMU0UgcGFydCB3aGVuIChhKSB0aGUgSUYg Y29uZGl0aW9uIGlzIGZhbHNlOyAoYikgdGhlCi1FTFNFIGNvbW1hbmQgaXMgInN0YW5kYWxvbmUi LCBpLmUuIGV4cHJlc3NlZCBhcyBhIHNlcGFyYXRlIGNvbW1hbmQgYWZ0ZXIgdGhlCi1JRiBjb21t YW5kIChvcmlnaW5hbCBDLUtlcm1pdCA1QSBzeW50YXgpLCBhbmQgKGMpIGl0cyBjb21tYW5kIGxp c3QgaXMgYSBibG9jay4KLVRoaXMgd291bGQgc3VnZ2VzdCB0aGUgcHJvYmxlbSBpcyBpbiB0aGUg WFhFTFMgcGFyc2VyLgotCi1Hb2luZyBiYWNrIHRvIDE5OTksIEkgZmluZCB0aGlzOgotICBGaXhl ZCBhIHByb2JsZW0gSmltIFdoaXRieSBub3RpY2VkIHdpdGggcXVvdGluZyBpbiBFTFNFIHN0YXRl bWVudHMuICBUaGlzCi0gIHByb2JsZW0gd2FzIGludHJvZHVjZWQgd2hlbiBJIHVuaWZpZWQgSUYg YW5kIFhJRiwgYW5kIG9jY3VycyBvbmx5IHdoZW4KLSAgRUxTRSBiZWdpbnMgb24gYSBsaW5lLCBm b2xsb3dlZCBieSBhIHsgY29tbWFuZCBsaXN0IH0gcmF0aGVyIHRoYW4gYSBzaW5nbGUKLSAgY29t bWFuZC4gIFRoZSBzb2x1dGlvbiAoZ3Jvc3MpIHdhcyB0byBtYWtlIGEgc3BlY2lhbCB2ZXJzaW9u IG9mIHB1c2hjbWQoKQotICAoY2FsbGVkIHB1c2hxY21kKCkpIGZvciB0aGlzIHNpdHVhdGlvbiwg d2hpY2ggZG91YmxlcyBiYWNrc2xhc2hlcyB3aGlsZQotICBjb3B5aW5nLCBCVVQgT05MWSBJRiBp dCdzIGEgY29tbWFuZCBsaXN0IChpLmUuIHN0YXJ0cyB3aXRoICJ7Iik7IG90aGVyd2lzZQotICB3 ZSBicmVhayBsb3RzIG9mIG90aGVyIHN0dWZmLiAgUmVzdWx0IHBhc3NlcyBKaW0ncyB0ZXN0IGFu ZCBzdGlsbCBwYXNzZXMKLSAgY2tlZGVtby5rc2MgYW5kIGlmdGVzdC5rc2MuICBja3VjbWQuYywg Y2t1dXM2LmMsIDI3IFNlcCA5OS4KLQotSSB1bmRpZCB0aGlzIGNoYW5nZSBhbmQgaXQgbWFkZSBu byBkaWZmZXJlbmNlIHRvIGFsbCB0aGUgb3RoZXIgSUYKLWNvbnN0cnVjdGlvbnMgKGluIGZhY3Qs IGl0IGZpeGVkIGFuIHVucmVsYXRlZCBvbmUgdGhhdCB3YXMgYnJva2VuLCBzbyBub3cKLWlmdGVz dCBzY29yZXMgNTQgb3V0IG9mIDU0LCBpbnN0ZWFkIG9mIDUzKS4gIEhvd2V2ZXIsIGl0IGRvZXMg bm90IGZpeCB0aGUKLUVMU0UgcHJvYmxlbTsgaW4gZmFjdCBpdCBwdXNoZXMgaXQgYWxsIHRoZSB3 YXkgaW4gdGhlIG90aGVyIGRpcmVjdGlvbjoKLQotICBUaGUgb3Bwb3NpdGUgb2NjdXJzIGFueSB0 aW1lIHlvdSB0cnkgdG8gZXhlY3V0ZSBhbiBpbW1lZGlhdGUgbWFjcm8gaW5zaWRlIGEKLSAgbWFj cm8gb3IgYW55IG90aGVyIHsgYmxvY2sgfTogbm90IG9ubHkgaXMgdGhlIHZhcmlhYmxlIGV2YWx1 YXRlZCwgaXQgaXMKLSAgZXZhbHVhdGVkIGludG8gbm90aGluZy4gIEl0IGxvb2tzIGxpa2UgdGhp cyBoYXBwZW5zIG9ubHkgaW4gaW1tZWRpYXRlCi0gIG1hY3JvcywgaS5lLiAqY29tbWFuZHMqIHRo YXQgc3RhcnQgd2l0aCAneycuICBTbyBtYXliZSB3ZSByZWFsbHkgaGF2ZSB0d28KLSAgaXNvbGF0 ZWQgcHJvYmxlbXMsIHRoYXQgY2FuIGVhY2ggYmUgZml4ZWQuCi0KLVRoZSBzaXR1YXRpb24gaXMg aWxsdXN0cmF0ZWQgYnkgdGhpcyBzaW1wbGUgc2NyaXB0OgotCi0gIGRlZiB4eCB7Ci0gICAgICBp ZiBmYWxzZSB7IGVjaG8gXCUxLCBlY2hvIFwlMiB9Ci0gICAgICBlbHNlIHsgZWNobyBcJTMsIGVj aG8gXCU0IH0KLSAgfQotICB4eCBvbmUgdHdvIHRocmVlIGZvdXIKLQotV2l0aCBwdXNocWNtZCgp IGl0IGVjaG9lcyB0aGUgdmFyaWFibGUgbmFtZXMgbGl0ZXJhbGx5OyB3aXRoIHB1c2hjbWQoKSBp dCAKLWVjaG9lcyBlbXB0eSBsaW5lcy4gIFNpbmNlIEVMU0UsIHdoZW4gaXRzIGFyZ3VtZW50IGlz IGEgYmxvY2ssIGRpc3BhdGNoZXMKLXRvIHRoZSBpbW1lZGlhdGUtbWFjcm8gaGFuZGxlciwgaXQg c2VlbXMgd2UgaGF2ZSB1bmlmaWVkIHRoZSB0d28gcHJvYmxlbXMsCi1zbyBmaXhpbmcgb25lIHNo b3VsZCBmaXggdGhlIG90aGVyLgotCi1UaGUgcHJvYmxlbSBpcyB0aGF0IHdlIGRlZmluZSBhIG5l dyB0ZW1wb3JhcnkgbWFjcm8gYW5kIHRoZW4gY2FsbCBkb2RvKCkgdG8KLWV4ZWN1dGUgaXQuICBC dXQgaWYgdGhlIGRlZmluaXRpb24gY29udGFpbnMgbWFjcm8gYXJndW1lbnRzLCB3ZSBoYXZlIGFk ZGVkIGEKLW5ldyBsZXZlbCBvZiBtYWNybyBpbnZvY2F0aW9uLCB0aHVzIHdpcGluZyBvdXQgdGhl IGN1cnJlbnQgbGV2ZWwgb2YgYXJncy4KLVRoZSBjdXJlIGlzIHRvIGV4cGFuZCB0aGUgdmFyaWFi bGVzIGluIHRoZSBpbW1lZGlhdGUgbWFjcm8gaW4gdGhlIGN1cnJlbnQKLWNvbnRleHQsIGJlZm9y ZSBleGVjdXRpbmcgaXQuICBUaGlzIG1lYW5zIHNpbXBseSBjaGFuZ2luZyB0aGUgY210eHQoKSBj YWxsCi10aGF0IHJlYWRzIHRoZSBpbW1lZGlhdGUgbWFjcm8gdG8gc3BlY2lmeSB4eHN0aW5nIGFz IGl0cyBwcm9jZXNzaW5nCi1mdW5jdGlvbiwgcmF0aGVyIHRoYW4gTlVMTCwgd2hpY2ggaXMgdXNl ZCBmb3IgcmVhbCBtYWNyb3MgdG8gZGVmZXIgdGhlaXIKLWFyZ3VtZW50IGV2YWx1YXRpb24gdW50 aWwgYWZ0ZXIgdGhlIG1hY3JvIGVudGVyZWQuICBja3V1c3IuYywgMTEgQXVnIDIwMDUuCi0KLUFk ZGVkIGEgbmV3IG1ha2VmaWxlIHRhcmdldCwgbWFjb3N4MTAuNCwgZm9yIE1hYyBPUyBYIDEwLjQu ICBUaGlzIG9uZSB1c2VzCi1hbiB1bmRvY3VtZW50ZWQgdHJpY2sgdG8gZ2V0IHRoZSBvdGhlcndp c2UgdW5hdmFpbGFibGUtZXhjZXB0LWJ5LWNsaWNraW5nCi1NYWMgT1MgWCB2ZXJzaW9uIG51bWJl ciAoaW4gdGhpcyBjYXNlIDEwLjQuMikgYW5kIHN0dWZmIGl0IGludG8gdGhlIEhFUkFMRAotc3Ry aW5nLiAgbWFrZWZpbGUsIDExIEF1ZyAyMDA1LgotCi1CdWlsdCBPSyBvbiBTb2xhcmlzIDksIFNv bGFyaXMgMTAgKHdpdGggYSBmZXcgaW1wbGljaXQgZGVjbGFyYXRpb24gd2FybmluZ3MKLWluIGNr dXVzeC5jKSwgTWFjIE9TIFggMTAuNC4yICh3aXRoIHNvbWUgd2FybmluZ3MgaW4gY2tjbmV0LmMg YW5kIGNrY2Z0cC5jKSwKLU1hYyBPUyBYIDEwLjMuOSAoYWxzbyB1c2luZyB0aGUgbWFjb3MxMC40 IGVudHJ5LCB3aGljaCBnZXRzIHRoZSByaWdodAotdmVyc2lvbiBudW1iZXIsIGFuZCBnZXRzIG5v IHdhcm5pbmdzIGF0IGFsbCksIFJIIEVudGVycHJpc2UgTGludXggQVM0IG9uIEFNRAoteDg2XzY0 LCBUcnU2NCBVbml4IDQuMEYsIFNDTyBVbml4V2FyZSA3LjEuNAotCi1Gb3IgZG9jcyBhbmQvb3Ig c2NyaXB0bGliOiAgVW5peCBDLUtlcm1pdCBjYW4gYmUgYSBzdGRpbi9vdXQgZmlsdGVyLiAgVGhl Ci10cmljayBpcyB0byB1c2UgdGhlIEFTSywgQVNLUSwgb3IgR0VUQyBjb21tYW5kIGZvciBpbnB1 dCwgc3BlY2lmeWluZyBubwotcHJvbXB0LCBhbmQgRUNITyBvciBYRUNITyBmb3Igb3V0cHV0LCBl LmcuOgotCi13aGlsZSB0cnVlIHsKLSAgICBhc2sgbGluZQotICAgIGlmIGZhaWwgZXhpdCAwCi0g ICAgZWNobyBcZnJldmVyc2UoXG0obGluZSkpCi19Ci1leGl0IDAKLQotRk9QRU4gZGlkbid0IGRv IGFueXRoaW5nIHdpdGggdGhlIGNoYW5uZWwgbnVtYmVyIGlmIHRoZSBvcGVuIGZhaWxlZCwgc28g YW55Ci1zdWJzZXF1ZW50IGNvbW1hbmQgdGhhdCB0cmllZCB0byByZWZlcmVuY2UgaXQgd291bGQg Z2V0IGEgcGFyc2UgZXJyb3IgaXQgd2FzCi11bmRlZmluZWQgb3Igbm9uLW51bWVyaWMsIG5vdCB2 ZXJ5IGhlbHBmdWwuICBDaGFuZ2VkIEZPUEVOIHRvIHNldCB0aGUKLWNoYW5uZWwgbnVtYmVyIHRv IC0xIGlmIHRoZSBmaWxlIGNhbid0IGJlIG9wZW5lZC4gIE5vdyBzdWJzZXF1ZW50IG9wZXJhdGlv bnMKLW9uIHRoZSBjaGFubmVsIGZhaWwgd2l0aCAiQ2hhbm5lbCAtMTogRmlsZSBub3Qgb3BlbiIu ICBJIGFsc28gYWRkZWQgdHdvCi1tYWdpYyBjaGFubmVsIG51bWJlcnM6IC04IG1lYW5zIHRoYXQg YW55IEZJTEUgY29tbWFuZCAoYmVzaWRlcyBPUEVOIGFuZAotU1RBVFVTKSBvbiB0aGF0IGNoYW5u ZWwgaXMgYSBub29wIHRoYXQgc3VjY2VlZHMgc2lsZW50bHk7IC05IGlzIGEgbm9vcCB0aGF0Ci1m YWlscyBzaWxlbnRseS4gIFNvIG5vdyBpdCdzIHBvc3NpYmxlIHRvIHNpbXBseSBzZXQgYSBjaGFu bmVsIG51bWJlciB0byBvbmUKLW9mIHRoZXNlIHZhbHVlcyB0byBkaXNhYmxlIGkvbyB0byBjZXJ0 YWluIGZpbGUgd2l0aG91dCBnZXR0aW5nIGxvdHMgb2YgZXJyb3IKLW1lc3NhZ2VzLiAgZG9maWxl KCk6IGNrdXVzNy5jLCAxMiBBdWcgMjAwNS4KLQotQWRkZWQgYXV0b21hdGljIGhlcmFsZCBjb25z dHJ1Y3Rpb24gZm9yIFVuaXhXYXJlIDcuICBtYWtlZmlsZSwgMTIgQXVnIDIwMDUuCi0KLVVuaXgg aXNkaXIoKSBuZXZlciBhbGxvd2VkIGZvciBhcmd1bWVudHMgdGhhdCBzdGFydGVkIHdpdGggdGls ZGUsIHNvIGdhdmUKLWluY29ycmVjdCByZXN1bHRzIGZvciB+L3RtcC8gb3IgfmZkYy4gIFRoZSBw cm9ibGVtIHdhcyBtYWlubHkgaW52aXNpYmxlCi1zaW5jZSBtb3N0IGNvbW1hbmRzIHRoYXQgcGFy c2VkIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzIHVzZWQgY21pZmkoKSwgY21kaXIoKSwKLWV0Yywg d2hpY2ggZGlkIHRoZSBjb252ZXJzaW9ucyB0aGVtc2VsdmVzLiAgQnV0IElGIERJUkVDVE9SWSB3 YXMgYW4gZXhjZXB0aW9uLAotc2luY2UgaXRzIG9wZXJhbmQgaGFkIHRvIGJlIHRyZWF0ZWQgYXMg anVzdCB0ZXh0LCBhbmQgdGhlbiB0ZXN0ZWQgYWZ0ZXIgaXQKLXdhcyBwYXJzZWQuICBja3VmaW8u YywgMTMgQXVnIDIwMDUuCi0KLUZpeGVkIHRoZSBmb2xsb3dpbmc6Ci0iY2t1dXN4LmMiLCBsaW5l IDg5NTk6IHdhcm5pbmc6IGltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uOiBja2dldHBlZXIK LSJja3VmaW8uYyIsIGxpbmUgMTg2OTogd2FybmluZzogaW1wbGljaXQgZnVuY3Rpb24gZGVjbGFy YXRpb246IHR0d2FpdAotImNrdWZpby5jIiwgbGluZSAyOTQxOiB3YXJuaW5nOiBpbXBsaWNpdCBm dW5jdGlvbiBkZWNsYXJhdGlvbjogbWxvb2sKLSJja3VmaW8uYyIsIGxpbmUgMjk0Mzogd2Fybmlu ZzogaW1wbGljaXQgZnVuY3Rpb24gZGVjbGFyYXRpb246IGRvZG8KLSJja3VmaW8uYyIsIGxpbmUg Mjk0NDogd2FybmluZzogaW1wbGljaXQgZnVuY3Rpb24gZGVjbGFyYXRpb246IHBhcnNlcgotImNr Y2Z0cC5jIiwgbGluZSAyNjI1OiB3YXJuaW5nOiBpbXBsaWNpdCBmdW5jdGlvbiBkZWNsYXJhdGlv bjogZGVsdGEyc2VjCi0iY2tjZnRwLmMiLCBsaW5lIDQwNzE6IHdhcm5pbmc6IG5vIGV4cGxpY2l0 IHR5cGUgZ2l2ZW4gZm9yIHBhcmFtZXRlcjogcHJtCi0iY2tjZnRwLmMiLCBsaW5lIDgzODk6IHdh cm5pbmc6IG5vIGV4cGxpY2l0IHR5cGUgZ2l2ZW4gZm9yIHBhcmFtZXRlcjogYnJpZWYKLWNrdXVz eC5jLCBja3VmaW8uYywgY2tjZnRwLmMsIGNrdWNtZC5oLiAgMTMgQXVnIDIwMDUuCi0KLVVuYnVm ZmVyZWQgc3Rkb3V0IGNvZGUgaGFzIG5ldmVyIHdvcmtlZCBiZWNhdXNlIHRoZSBzZXRidWYoc3Rk b3V0LE5VTEwpIGNhbGwKLWhhcyB0byBvY2N1ciBiZWZvcmUgdGhlIHN0ZG91dCBoYXMgYmVlbiB1 c2VkLiAgVGhlIHJlYXNvbiBpdCdzIG5lZWRlZCBpcwotdGhhdCBzb21lIEtlcm1pdCBjb2RlIHdy aXRlcyB0byBzdGRlcnIgKHdoaWNoIGlzIHVuYnVmZmVyZWQpIGFuZCBvdGhlciBjb2RlCi13cml0 ZXMgdG8gc3Rkb3V0LCBhbmQgdGhlcmVmb3JlIHR5cGVzY3JpcHRzIGNhbiBjb21lIG91dCBqdW1i bGVkLiAgUm9iZXJ0Ci1TaW1tb25zIDxyb2JlcnRsc0Bub3J0ZWwuY29tPiBwcm92aWRlZCB0aGUg bmVlZGVkIGNsdWUgd2hlbiBoZSBpbnNpc3RlZCBpdAotd29ya2VkIG9ubHkgd2hlbiBleGVjdXRl ZCBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgbWFpbigpLiAgU28gSSBtb3ZlZCB0aGUKLWNvZGUg dG8gdGhhdCBzcG90LiAgQnV0IHNpbmNlIG5vdyB3ZSBhbHNvIHdhbnQgdG8gbWFrZSB1bmJ1ZmZl cmVkIGEgcnVudGltZQotKGNvbW1hbmQtbGluZSkgb3B0aW9uLCBJIGhhZCB0byBkbyBhIGNsdW5r eSBieS1oYW5kIHByZS1wcmVzY2FuIGlubGluZSBpbgotbWFpbigpIHRvIGxvb2sgdGhydSBhcmd2 W10sIGV2ZW4gYmVmb3JlIHByZXNjYW4oKSB3YXMgY2FsbGVkLiAgY2tjbWFpLmMsCi1ja3V0aW8u YywgY2t1dXN5LmMsIDEzIEF1ZyAyMDA1LiAgKE5vdyB0aGF0IHRoaXMgd29ya3MsIGl0IG1pZ2h0 IGJlIGEgZ29vZAotaWRlYSB0byByZW1vdmUgYWxsIHVzZSBvZiBzdGRlcnIgZnJvbSBLZXJtaXQu KQotCi1NYW5hZ2VkLCBhZnRlciBzb21lIGZpbmFnbGluZywgdG8gYnVpbGQgYSA2NC1iaXQgdmVy c2lvbiBvbiBTb2xhcmlzIDEwIGF0Ci1VdGFoIE1hdGggd2l0aCBTdW4gY2MuICAoQ2FuJ3QgbWFr ZSBhbnkgZ2NjIGJ1aWxkcyBhdCBhbGwsIDMyLSBvciA2NC1iaXQsCi10aGV5IGFsbCBibG93IHVw IGluIDxzeXMvc2lnaW5mby5oPi4pICBOZXcgdGFyZ2V0OiBzb2xhcmlzMTBfNjQuICBtYWtlZmls ZSwKLTE1IEF1ZyAyMDA1LgotCi1UaGUgNjQtYml0IFNvbGFyaXMgMTAgdmVyc2lvbiBjb21waWxl cyBhbmQgbGlua3MgT0sgYW5kIHRyYW5zZmVycyBmaWxlcyBpbgotcmVtb3RlIG1vZGUuICBJdCBj YW4gbWFrZSBGVFAgY29ubmVjdGlvbnMgYW5kIHVzZSB0aGVtLCBidXQgVGVsbmV0IGNvbm5lY3Rp b25zCi1hbHdheXMgZmFpbCB3aXRoICJuZXR3b3JrIHVucmVhY2hhYmxlIi4gIFRoaXMgaXMgd2l0 aCBhbGwgZGVmYXVsdCBsaWJzIGFuZAotaW5jbHVkZSBmaWxlcy4gIE5lbHNvbiBoYXMgYSBzZXBh cmF0ZSBzZXQgaW4gL3Vzci9sb2NhbCwgd2hpY2ggaGUgcmVmZXJlbmNlcwotZXhwbGljaXRseSBp biBhbGwgaGlzIDY0LWJpdCBidWlsZHMsIGJ1dCB1c2luZyB0aGVzZSBtYWtlcyBubyBkaWZmZXJl bmNlLgotU29tZSBkYXRhIHR5cGUgaXMgd3JvbmcgaW4gY2tjbmV0LmMuICBCdXQgdGVsbmV0IHdv cmtzIGZpbmUgaW4gNjQtYml0IExpbnV4Ci1hbmQgVHJ1NjQgYnVpbGRzLiAgRGVidWcgbG9ncyB0 cmFjZSB0aGUgZGlmZmVyZW5jZSB0byBuZXRvcGVuKCkgKG9mIGNvdXJzZSksCi10aGUgc3BvdCB3 aGVyZSB3ZSB0ZXN0IHRoZSByZXN1bHRzIG9mIGluZXRfYWRkcigpLCB3aGljaCBpcyBhbHJlYWR5 IG1hcmtlZAotc3VzcGljaW91cyBmb3IgNjQtYml0IGJ1aWxkcy4gIEl0IHNlZW1zIHRoYXQgaW5l dF9hZGRyKCkgaXMgb2YgdHlwZSBpbl9hZGRyX3QsCi13aGljaCBpbiB0dXJuIGlzIHVfaW50MzIs IGkuZS4gYW4gdW5zaWduZWQgMzItYml0IGludC4gIFlldCB0aGUgbWFuIHBhZ2Ugc2F5cwotdGhh dCBmYWlsdXJlIGlzIGluZGljYXRlZCBieSByZXR1cm5pbmcgLTEuICBJIGd1ZXNzIHRoaXMgZG9l c24ndCBtYXR0ZXIgaW4KLTMyLWJpdCBidWlsZHMsIGJ1dCBpbiB0aGUgNjQtYml0IHdvcmxkLCB0 aGUgdGVzdCBmb3IgZmFpbHVyZSBkaWRuJ3Qgd29yawotcmlnaHQuICBJIG1hZGUgYSBTb2xhcmlz LXNwZWNpZmljIHdvcmthcm91bmQsIGFuZCBjaGVja2VkIHRoYXQgaXQgd29ya3MgaW4KLWJvdGgg MzItYml0IGFuZCA2NC1idWlsZHMuICBJIHJlYWxseSBoYXRlIHR5cGVkZWZzLiAgY2tjbmV0LmMs IDE1IEF1ZyAyMDA1LgotCi1DaGFuZ2VkIHRoZSBwbGFpbi10ZXh0IHZlcnNpb24gKGFzIG9wcG9z ZWQgdG8gdGhlIHBvcHVwIG9yIEdVSSB2ZXJzaW9uIC0gdGhlCi1HVUkgdmVyc2lvbiwgYXQgbGVh c3QsIGFscmVhZHkgZG9lcyB0aGlzKSBvZiBBU0tRIHRvIGVjaG8ga2V5c3Ryb2tlcwotYXN0ZXJp c2tzIHJhdGhlciB0aGFuIHNpbXBseSBub3QgZWNobyBhbnl0aGluZywgc28gaXQncyBlYXNpZXIg dG8gc2VlIHdoYXQKLXlvdSdyZSBkb2luZywgdGhlIGVmZmVjdHMgb2YgZWRpdGluZywgZXRjLiAg RXhwZXJpbWVudGFsOyBmb3Igbm93LCB0aGVyZSdzCi1ubyB3YXkgdG8gZGlzYWJsZSB0aGlzLiAg Tm90IHN1cmUgaWYgdGhlcmUgbmVlZHMgdG8gYmUuICBBbnl3YXksIHRvIGdldCB0aGlzCi13b3Jr aW5nIHJlcXVpcmVkIGEgZmFpciBhbW91bnQgb2YgY2xlYW5pbmcgdXAgb2YgZ3R3b3JkKCksIHdo aWNoIHdhcyBlY2hvaW5nCi1kaWZmZXJlbnQgd2F5cyBpbiBkaWZmZXJlbnQgcGxhY2VzLiAgY2t1 dXM2LmMsIGNrdWNtZC5jLCAxNSBBdWcgMjAwNS4KLQotQWRkZWQgYSBzb2xhcmlzOV82NCB0YXJn ZXQgZm9yIGJ1aWxkaW5nIGEgNjQtYml0IHZlcnNpb24gb24gU29sYXJpcyA5IHdpdGgKLVN1biBj Yy4gIFZlcmlmaWVkLCB1c2luZyB0aGUgRElSIGNvbW1hbmQgYW5kIFxmc2l6ZSgpIGZ1bmN0aW9u IG9uIGEgNC40R0IKLWZpbGUsIHRoYXQgdGhlIFNvbGFyaXMgNjQtYml0IHZlcnNpb24gb2YgS2Vy bWl0IGdldHMgdGhlIHNpemUgY29ycmVjdGx5LCBhbmQKLXRoYXQgaXQgY2FuIGNvcHkgc3VjaCBh IGZpbGUgKHRodXMgaXRzIGZvcGVuL2ZyZWFkL2Z3cml0ZS9mY2xvc2UgaW50ZXJmYWNlCi13b3Jr cyByaWdodCkuICBJbml0aWF0ZWQgYSBsYXJnZS1maWxlIHRyYW5zZmVyIGJldHdlZW4gaGVyZSBh bmQgVXRhaCBvdmVyCi1TU0ggYW5kIHZlcmlmaWVkIHRoYXQgaXQgcHV0cyB0aGUgY29ycmVjdCBm aWxlIHNpemUgaW4gdGhlIEEgcGFja2V0IHdoZW4KLXNlbmRpbmc7IHRoZSByaWdodCBxdWFudGl0 aWVzIGFyZSBzaG93biBvbiB0aGUgZmlsZSB0cmFuc2ZlciBkaXNwbGF5IChmaWxlCi1zaXplIENQ UywgcGVyY2VudCBkb25lLCBldGMpLiAgQnV0IGV2ZW4gYXQgNU1iL3NlYywgaXQgdGFrZXMgYSBn b29kIHdoaWxlIHRvCi10cmFuc2ZlciA0LjRHQiwgbW9yZSB0aGFuIDIgaG91cnMgKG5vdCBzdHJl YW1pbmc7IDMwIHdpbmRvdyBzbG90cywgNEsKLXBhY2tldHMsIG1heWJlIGl0IHdvdWxkIGdvIGZh c3RlciB3aXRoIHN0cmVhbWluZykuLi4gIEFmdGVyIGFuIGhvdXIgb3Igc28sCi1pdCBmaWxsZWQg dXAgdGhlIHBhcnRpdGlvbiBhbmQgZ2F2ZSB1cCAoZ3JhY2VmdWxseSkgYmVmb3JlIGl0IHJlYWNo ZWQgdGhlCi0yR0IgZnJvbnRpZXIgKGRyYWluZWQgaXRzIHBlbmRpbmcgcGFja2V0cywgY2xvc2Vk IHRoZSBwYXJ0aWFsIGZpbGUpLgotUmVzdGFydGVkIGF0IDEyOjU0LCB0aGlzIHRpbWUgd2l0aCBz dHJlYW1pbmcgYW5kIDhLIHBhY2tldHMgKHRoZSBzcGVlZAotd2Fzbid0IHNpZ25pZmljYW50bHkg ZGlmZmVyZW50KS4gIFRoaXMgdGltZSBpdCB0cmFuc2ZlcnJlZCA5NSUgb2YgdGhlIGZpbGUKLSg0 MTg3NjYwMjg4IGJ5dGVzKSBiZWZvcmUgZmFpbGluZyBiZWNhdXNlIHRoZSBkaXNrIGZpbGxlZCB1 cC4gIFdlbnQgdG8gVXRhaAotYW5kIHN0YXJ0ZWQgYSB0cmFuc2ZlciBiZXR3ZWVuIHR3byBTb2xh cmlzIDEwL1NwYXJjIGhvc3RzOyB0aGlzIGdvZXMgYWJvdXQgOAotdGltZXMgZmFzdGVyLiAgVGhl IHRyYW5zZmVyIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgYWZ0ZXIgMTdtNDFzLiAgQWxsIGZpZWxk cwotaW4gdGhlIGYudC4gZGlzcGxheSBsb29rZWQgcmlnaHQgdGhlIHdob2xlIHRpbWUuICBUaGVu IEkgdmVyaWZpZWQgdmFyaW91cwotb3RoZXIgNjQtYml0IGNvbWJpbmF0aW9ucyB0cmFuc2ZlcnJp bmcgdGhlIHNhbWUgNC40R0IgZmlsZToKLQotICAgICAgICBUby4uLi4uLi4uLi4uLi4uLi4KLSAg RnJvbSAgU29sICBBbWQgIGk2NCAgVHJ1ICAgICAgCi0gIFNvbCAgIE9LICAgT0sgICBPSyAgIE9L ICAgICAgU29sID0gU29sYXJpcyAxMCAvIFNwYXJjCi0gIEFtZCAgIE9LICAgICAgICAgICAgICAg ICAgICAgQW1kID0gQU1EIHg4Nl82NCBSSCBFbnRlcnByaXNlIExpbnV4IEFTNAotICBpNjQgICBP SyAgICAgICAgICAgICAgICAgICAgIGk2NCA9IEludGVsIElBNjQsIFJIIDIuMUFTCi0gIFRydSAg ICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ID0gVHJ1NjQgVW5peCA0LjBGIEFscGhhCi0KLShU aGUgb3RoZXIgY29tYmluYXRpb25zIGFyZSBkaWZmaWN1bHQgdG8gdGVzdCBmb3IgbG9naXN0aWNh bCByZWFzb25zLikKLQotVHJpZWQgc2VuZGluZyB0aGUgc2FtZSBsb25nIGZpbGUgd2l0aCBLZXJt aXQncyBGVFAgY2xpZW50LiAgSXQgY2h1Z2dlZCBhbG9uZwotZm9yIGEgd2hpbGUgdW50aWwgSSBz dG9wcGVkIGl0OyBpdCB3b3VsZCBoYXZlIHRha2VuIGhvdXJzIHRvIGNvbXBsZXRlLgotVGhlcmUg aXMgbm8gaW5kaWNhdGlvbiB0aGF0IGl0IHdvdWxkbid0IGhhdmUgd29ya2VkLCBhc3N1bWluZyB0 aGUgRlRQIHNlcnZlcgotY291bGQgYWxzbyBoYW5kbGUgbG9uZyBmaWxlcywgd2hpY2ggd2hvIGtu b3dzLiAgQW55d2F5LCBLZXJtaXQgc2hvd2VkIGFsbAotdGhlIHJpZ2h0IGRhdGEgb24gdGhlIGRp c3BsYXkgc2NyZWVuLiAgMTcgQXVnIDIwMDUuCi0KLU9uIEFNRCB4ODZfNjQgYW5kIElBNjQgbmF0 aXZlIDY0LWJpdCBMaW51eCBidWlsZHMsIHRoZSBwdHkgcm91dGluZXMgZGlkIG5vdAotd29yayBh dCBhbGwuICBwdHNuYW1lKCkgZHVtcGVkIGNvcmUuICBJZiBJIGNvbW1lbnRlZCBvdXQgcHRzbmFt ZSgpLCB0aGVuIHRoZQotbmV4dCB0aGluZyBkdW1wZWQgY29yZS4gIFRoZSBzYW1lIGNvZGUgd29y a3Mgb24gdGhlIG90aGVyIDY0LWJpdCBidWlsZHMuCi1Qb2tpbmcgYXJvdW5kLCBJIHNlZSB0aGF0 IHRoaXMgdmVyc2lvbiBvZiBMaW51eCBoYXMgYW4gb3BlbnB0eSgpIGZ1bmN0aW9uLAotd2hpY2gg SSBjb3VsZCB0cnkgdXNpbmcgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBBUEkgLS0gZ3JhbnRwdHko KSwgZXRjLiAgVGhlbgotSSBzZWUgdGhhdCBvcGVucHR5KCkgaXMgYWxyZWFkeSBjb2RlZCBpbnRv IEtlcm1pdCdzIHB0eSBtb2R1bGUsCi1jb25kaXRpb25hbGl6ZWQgdW5kZXIgSEFWRV9PUEVOUFRZ LCB3aGljaCBoYXMgbmV2ZXIgYmVmb3JlIGJlZW4gZGVmaW5lZCBmb3IKLWFueSBidWlsZC4gIEkg YWRkZWQgYSB0ZXN0IHRvIHRoZSBtYWtlZmlsZSBsaW51eCB0YXJnZXQgKGxvb2sgZm9yIHRoZQot b3BlbnB0eSgpIHByb3RvdHlwZSBpbiA8cHR5Lmg+LCBpZiBmb3VuZCBkZWZpbmUgSEFWRV9PUEVO UFRZIGFzIGEgQ0ZMQUcgYW5kCi1hbHNvIGFkZCAtbHV0aWwgdG8gTE5LRkxBR1MpLiAgV29ya3Mg ZmluZSBvbiB0aGUgcHJvYmxlbSBidWlsZHMsIGFuZCBhbHNvCi1vbiBwcmV2aW91c2x5IHdvcmtp bmcgMzItYml0IGJ1aWxkcy4gIG1ha2VmaWxlLCAxNyBBdWcgMjAwNS4KLQotRml4ZWQgYSBidWcg aW4gdGhlIEFTS1EgZWNobyBhc3Rlcmlza3MgY29kZSwgd2hpY2ggbWFkZSB0aGUgVk1TIHZlcnNp b24gb2YKLUMtS2VybWl0IGFsd2F5cyBlY2hvIGFzdGVyaXNrcy4gIFR1cm5zIG91dCB0aGF0IHNv bWUgY29kZSBpbiB0aGUgbWFpbiBwYXJzZQotbG9vcCB0byByZXNldCBjb21tYW5kLXNwZWNpZmlj IGZsYWdzIHdhcyBpbiB0aGUgd3JvbmcgcGxhY2UsIHdoaWNoIGhhZCBvdGhlcgotZWZmZWN0cyB0 b28sIGZvciBleGFtcGxlIEFTS1EgdGVtcG9yYXJpbHkgdHVybnMgb2ZmIGRlYnVnIGxvZ2dpbmcg YXMgYQotc2VjdXJpdHkgbWVhc3VyZSwgYnV0IHRoZSBjb2RlIHRvIHR1cm4gaXQgYmFjayBvbiB3 YXMgc2tpcHBlZCBpbiBtb3N0IGNhc2VzLgotU29tZSBvdGhlciBzaWRlIGVmZmVjdHMgcmVsYXRl ZCB0byB0aGUgRElSRUNUT1JZIGFuZCBDRCBjb21tYW5kcyBtaWdodCBoYXZlCi1iZWVuIHBvc3Np YmxlIGJ1dCBJIGhhdmVuJ3Qgc2VlbiB0aGVtLiAgY2t1dXNbNTZdLmMsIDIzIEF1ZyAyMDA1Lgot Ci1Qcm9ibGVtIHJlcG9ydGVkIHdoZW4gc2VuZGluZyBhIGZpbGUgdG8gVk1TIHdoZW4gdGhlIG5h bWUgaW4gdGhlIEYgcGFja2V0Ci1zdGFydHMgd2l0aCBhIGRldmljZSBzcGVjaWZpY2F0aW9uIGFu ZCBkb2VzIG5vdCBpbmNsdWRlIGEgZGlyZWN0b3J5IGZpZWxkLAotYW5kIFBBVEhOQU1FUyBhcmUg UkVMQVRJVkUuICBFeGFtcGxlOiBkc2s6Zm9vLmJhciBiZWNvbWVzIGZfb28uYmFyLiAgVGhlCi1j b2RlIGFzc3VtZXMgdGhhdCBpZiB0aGVyZSBpcyBhIGRldmljZSBmaWVsZCwgaXQgaXMgZm9sbG93 ZWQgYnkgYSBkaXJlY3RvcnkKLWZpZWxkLCBhbmQgaXQgaW5zZXJ0cyBhIGRvdCBhZnRlciB0aGUg J1snLCB3aGljaCBpbiB0aGlzIGNhc2UgaXMgbm90IHRoZXJlLgotTGF0ZXIgdGhlIGRvdCBiZWNv bWVzICdfJyBiZWNhdXNlIG9mIHRoZSBvbmx5LW9uZS1kb3QgcnVsZS4gIFNvbHV0aW9uOiBvbmx5 Ci1pbnNlcnQgdGhlIGRvdCBpZiB0aGVyZSByZWFsbHkgaXMgYW4gb3BlbmluZyBicmFja2V0LiAg bnpydG9sKCk6IGNrdmZpby5jLAotMjMgQXVnIDIwMDUuCi0KLUEgcmVwb3J0IG9uIHRoZSBuZXdz Z3JvdXAgY29tcGxhaW5zIHRoYXQgQy1LZXJtaXQgYW5kIEs5NSBzZXJ2ZXJzIHdlcmUKLXNlbmRp bmcgUkVNT1RFIERJUiBsaXN0aW5ncyB3aXRoIG9ubHkgI0ogbGluZSB0ZXJtaW5hdG9ycywgcmF0 aGVyIHRoYW4gI00jSi4KLVlldCBhbGwgdGhlIG90aGVyIFJFTU9URSB4eHggcmVzcG9uc2VzIGFy cml2ZWQgd2l0aCAjTSNKLiAgc25kZGlyKCkgd2FzCi1uZWdsZWN0aW5nIHRvIHN3aXRjaCB0byB0 ZXh0IG1vZGUuICBja2NmbnMuYywgMjYgQXVnIDIwMDUuCi0KLUJhY2sgdG8gbG9uZyBmaWxlcy4g IFdoYXQgaGFwcGVucyBpZiAzMi1iaXQgS2VybWl0IGlzIHNlbnQgYSBsb25nIGZpbGU/Ci1JdCBn ZXRzIGFuIEEtcGFja2V0IHRoYXQgbG9va3MgbGlrZSB0aGlzOgotCi0gIF5BXyJBLiJVMSIiQjgj MTIwMDUwODE1IDE4OjI4OjAzISc0MjkyMDY0MSo0Mzk1MDczNTM2LCM3NzUtITdAIClDUAotCi1U aGUgMzItYml0IHJlY2VpdmVyIHJlYWN0cyBsaWtlIHNvOgotCi0gIGdhdHRyIGxlbmd0aFs0Mzk1 MDczNTM2XT0xMDAxMDYyNDAKLQotdGhlIGZpcnN0IG51bWJlciBiZWluZyB0aGUgc3RyaW5nIGZy b20gdGhlIEEtcGFja2V0LCB0aGUgc2Vjb25kIGJlaW5nIHRoZQotdmFsdWUgb2YgdGhlIGxvbmcg aW50IGl0IHdhcyBjb252ZXJ0ZWQgdG8gYnkgYXRvbCgpLiAgQ2xlYXJseSBub3QgZXF1YWwgaW4K LXRoaXMgY2FzZS4gIFdoZW4gdGhpcyBoYXBwZW5zIEtlcm1pdCBzaG91bGQgcmVqZWN0IHRoZSBm aWxlIGluc3RlYWQgb2YKLWFjY2VwdGluZyBpdCBhbmQgdGhlbiBnZXR0aW5nIGEgaG9ycmlibGUg ZXJyb3IgYSBsb25nIHRpbWUgbGF0ZXIuICBBZGRlZAotY29kZSB0byBnYXR0cigpIHRvIGNvbnZl cnQgdGhlIHJlc3VsdCBvZiBhdG9sKCkgYmFjayB0byBhIHN0cmluZyBhbmQgY29tcGFyZQotaXQg d2l0aCB0aGUgb3JpZ2luYWwgc3RyaW5nOyBpZiB0aGV5J3JlIG5vdCBlcXVhbCwgcmVqZWN0IHRo ZSBmaWxlIG9uIHRoZQotYXNzdW1wdGlvbiB0aGF0IHRoZSBvbmx5IHJlYXNvbiB0aGlzIGNvdWxk IGhhcHBlbiBpcyBvdmVyZmxvdy4gIEFsc28gc29tZQotb3RoZXIgY29kZSBpbiBjYXNlIHRoZSBz ZW5kZXIgc2VuZHMgdGhlIG9ubHkgTEVOR1RISyBhdHRyaWJ1dGUuICBOb3cgZmlsZXMKLXdob3Nl IGxlbmd0aHMgYXJlIHRvbyBiaWcgZm9yIGEgbG9uZyBpbnQgYXJlIHJlamVjdGVkIHJpZ2h0IGF3 YXksIHByb3ZpZGVkCi10aGUgc2VuZGVyIHNlbmRzIHRoZSBsZW5ndGggaW4gYW4gQSBwYWNrZXQg YWhlYWQgb2YgdGhlIGZpbGUgaXRzZWxmLiAgSWYKLXRoaXMgbmV3IGNvZGUgc2hvdWxkIGV2ZXIg Y2F1c2UgYSBwcm9ibGVtLCBpdCBjYW4gYmUgYnlwYXNzZWQgd2l0aCBTRVQKLUFUVFJJQlVURSBM RU5HVEggT0ZGLiAgY2tjZm4zLmMsIDI2IEF1ZyAyMDA1LgotCi1BcyBJIHJlY2FsbCBmcm9tIHdo ZW4gSSB3YXMgdGVzdGluZyB0aGlzIGEgZmV3IHdlZWtzIGFnbywgd2hlbiB0aGUgdG9vLWJpZwot bGVuZ3RoIGlzIG5vdCBjYXVnaHQgYXQgQS1wYWNrZXQgdGltZSwgdGhlIHRyYW5zZmVyIGZhaWxz IG1vcmUgb3IgbGVzcwotZ3JhY2VmdWxseSB3aGVuIHRoZSBmaXJzdCBhdHRlbXB0IGlzIG1hZGUg dG8gd3JpdGUgcGFzdCB0aGUgbGltaXQuICBJIHdlbnQKLXRvIGRvdWJsZWNoZWNrIHRoaXMgYnkg c2VuZGluZyBhIGJpZyBmaWxlIGZyb20gdGhlIDY0LWJpdCBTb2xhcmlzMTAgdmVyc2lvbgotdG8g YSAzMi1iaXQgTWFjIE9TIFggdmVyc2lvbiB0aGF0IGRvZXMgbm90IGhhdmUgdG9kYXkncyBjb2Rl LiAgVGhlIE1hYwotdGhpbmtzIHRoZSBpbmNvbWluZyBmaWxlIGlzIDJHQiBsb25nIHdoZW4gaXQn cyByZWFsbHkgNEdCKy4gIEJ1dCBpbiB0aGlzCi1jYXNlLCBzb21ldGhpbmcgbmV3IGhhcHBlbnMh ICBBbHRob3VnaCB0aGUgcGVyY2VudCBkb25lIGFuZCB0cmFuc2ZlciByYXRlIGdvCi1uZWdhdGl2 ZSwgdGhlIGZpbGUga2VlcHMgY29taW5nLiAgSXQgd291bGQgc2VlbSB0aGF0IE1hYyBPUyBYIGxl dHMgdXMgY3JlYXRlCi1sb25nIGZpbGVzIHdpdGhvdXQgdXNpbmcgYW55IHNwZWNpYWwgQVBJcy4g IFRoZSB0cmFuc2ZlciBydW5zIHRvIGNvbXBsZXRpb24uCi1NYWMgT1MgWCBLZXJtaXQgc2F5cyBT VUNDRVNTIChidXQgZ2V0cyB0aGUgYnl0ZSBjb3VudCBhbmQgY3BzIHdyb25nLCBvZgotY291cnNl KS4gIEJ1dCB0aGVuIGEgU1RBVFVTIGNvbW1hbmQgc2F5cyBGQUlMVVJFLiAgVGhlIGZpbGUgd2Fz LCBob3dldmVyLAotdHJhbnNmZXJyZWQgc3VjY2Vzc2Z1bGx5OyBpdCBpcyBleGFjdGx5IHRoZSBz YW1lIGxlbmd0aCBhbmQgY29tcGFyZXMgYnl0ZQotZm9yIGJ5dGUgd2l0aCB0aGUgb3JpZ2luYWwu ICBUaGlzIHRlbGxzIG1lIHRoYXQgaW4gdGhlIE1hYyBPUyBYIHZlcnNpb24gLS0KLWFuZCBob3cg bWFueSBvdGhlcnMgbGlrZSBpdD8/PyAtLSB0b2RheSdzIHJlamVjdGlvbiBjb2RlIHNob3VsZCBu b3QgYmUKLWVuYWJsZWQuICBNZWFud2hpbGUgSSBwdXQgdG9kYXkncyBuZXcgY29kZSBpbiAjaWZu ZGVmIE5PQ0hFQ0tPVkVSRkxPVy4uI2VuZGlmLAotYW5kIGRlZmluZWQgdGhpcyBzeW1ib2wgaW4g dGhlIE1hYyBPUyBYIDEwLjQgdGFyZ2V0LiAgT3ZlciB0aW1lLCBJJ2xsIGhhdmUKLXRvIGZpbmQg b3V0IHdoYXQgb3RoZXIgcGxhdGZvcm1zIGhhdmUgdGhpcyBjaGFyYWN0ZXJpc3RpYy4gIEFuZCBv ZiBjb3Vyc2UKLUknbGwgYWxzbyBoYXZlIHRvIGRvIHNvbWV0aGluZyBhYm91dCBmaWxlLXRyYW5z ZmVyIGRpc3BsYXksIHN0YXRpc3RpY3MsIGFuZAotc3RhdHVzLiAgbWFrZWZpbGUsIGNrY2ZuMy5j LCAyNiBBdWcgMjAwNS4KLQotRnJvbSBub3cgb24gSSdtIGdvaW5nIHRvIGJ1bXAgdGhlIERldi54 eCBudW1iZXIgZWFjaCB0aW1lIEkgdXBsb2FkIGEgbmV3Ci1ja2RhaWx5LiAgVGhpcyBvbmUgd2ls bCBiZSBEZXYuMDIuICBja2NrbWFpLmMsIDI2IEF1ZyAyMDA1LgotCi1Hb3QgcmlkIG9mIGFsbCB0 aGUgZXh0cmFuZW91cyBGcmVlQlNEIDQgYW5kIDUgYnVpbGQgdGFyZ2V0cy4gIE5vdyB0aGVyZSdz Ci1vbmUgKGZyZWVic2QpIGZvciBhbGwgRnJlZUJTRCA0LjEgYW5kIGxhdGVyLiAgbWFrZWZpbGUs IDI3IEF1ZyAyMDA1LgotCi1NYWMgT1MgWCAxMC40IChUaWdlcikgaXMgYSA2NC1iaXQgT1MuICBC dWlsZGluZyBDLUtlcm1pdCAwbiAxMC40LjIgd2l0aG91dAotYW55IHNwZWNpYWwgc3dpdGNoZXMg c3RpbGxsIGdpdmVzIGEgMzItYml0IGV4ZWN1dGFibGUuICBEaXR0byBidWlsZGluZyB3aXRoCi0t bXBvd2VycGM2NC4gIEZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0dXJuZWQgdXAgYSB0aXAgc2hlZXQg b24gTXlTUUwgdGhhdCBzYXlzCi15b3UgaGF2ZSB0byBpbmNsdWRlIGFsbCBvZiB0aGVzZTogLW1w b3dlcnBjNjQgLW1jcHU9RzUgLW10dW5lPUc1IC1hcmNoCi1wcGM2NC4gIFRoYXQgZGlkIHRoZSB0 cmljay4gIE5ldyBtYWtlZmlsZSB0YXJnZXQ6IG1hY29zeDEwLjRfNjQuICBCdXQgdGhlCi0xMC40 LjIgc3lzdGVtIEkgdHJpZWQgZGlkIG5vdCBoYXZlIDY0LWJpdCBbbl1jdXJzZXMgb3IgcmVzb2x2 IGxpYnMsIHNvIHRoaXMKLWJ1aWxkIGhhcyBubyAtRE5PQ1VSU0VTIC1ETk9fRE5TX1NSVi4gIG1h a2VmaWxlLCAyNyBBdWcgMjAwNS4KLQotQ3JlYXRlZCBhIHN5bWJvbCBDS182NEJJVCB0byBpbmRp Y2F0ZSB0cnVlIDY0LWJpdCBidWlsZHMgYXQgY29tcGlsZSB0aW1lLgotQWRkZWQgNjQtYml0IGFu bm91bmNlbWVudCB0byB0aGUgc3RhcnR1cCBoZXJhbGQgYW5kIHRoZSBWRVJTSU9OIHRleHQuCi1j a2NkZWIuaCwgY2t1dXNbcjVdLmMsIDI3IEF1ZyAyMDA1LgotCi1BZGRlZCBhIGJ1aWx0LWluIHZh cmlhYmxlIFx2KGJpdHMpIHRvIGluZGljYXRlIHRoZSBzaXplIG9mIHRoZSBidWlsZAotKDE2LCAz MiwgNjQsIG9yIHdoYXRldmVyIGVsc2Ugc2l6ZW9mKCkgbWlnaHQgcmVwb3J0KS4gIGNrdXVzci5o LCBja3V1czQuYywKLTI3IEF1ZyAyMDA1LgotCi1Hb3QgcmlkIG9mIGFsbCB0aGUgd2FybmluZ3Mg aW4gNjQtYml0IE1hYyBPUyBYIGFib3V0IGFyZ3MgdG8gZ2V0c29ja29wdCgpLAotZ2V0c29ja25h bWUoKSwgYW5kIGdldHBlZXJuYW1lKCksIGFuZCB0aGUgY29tcGFyaXNvbnMgb24gdGhlIHJldHVy biB2YWx1ZQotb2YgaW5ldF9hZGRyKCkuICBja2NuZXQuW2NoXSwgMjcgQXVnIDIwMDUuCi0KLU5v dyB0byBjaGVjayB0aGUgZWZmZWN0cyBvbiBvdGhlciBidWlsZHMuLi4KLSAgTGludXggb24gQU1E NjQ6IG9rLgotICBMaW51eCBvbiBJQTY0OiBvay4KLSAgTGludXggb24gaTM4Njogb2suCi0gIE1h YyBPUyBYIDEwLjMuOSAzMi1iaXQ6IG9rLgotICBTb2xhcmlzIDEwIDY0LWJpdDogb2suCi0gIFNv bGFyaXMgOSAzMi1iaXQ6IG9rLgotICBUcnU2NCA0LjBGOiBvay4KLSAgRnJlZUJTRCA0LjExOiBv ay4KLSAgRnJlZUJTRCA1LjQgaWE2NCAoNjQtYml0KTogb2suCi0gIEZyZWVCU0QgNS40IGkzODYg KDMyLWJpdCk6IG9rLgotCi1UaGUgVHJ1NjQgNS4xQiBidWlsZCB0b3RhbGx5IGJsZXcgdXAgYmVj YXVzZSB0aGV5IGhhdmUgdGhlaXIgb3duIHVuaXF1ZQotc29ja29wdC9ldGMgbGVuZ3RoLWFyZ3Vt ZW50IGRhdGEgdHlwZSAoaW50ISksIHNvIEkgaGFkIHRvIHJvbGwgYmFjayBvbiB1c2luZwotc29j a2xlbl90IGZvciB0aGlzIGluIGFsbCA2NC1iaXQgYnVpbGRzLiAgQ2hlY2tlZCB0byBtYWtlIHN1 cmUgaXQgc3RpbGwKLWJ1aWxkcyBvbiBUcnU2NCA0LjBGIGFmdGVyIHRoaXMgY2hhbmdlIChpdCBk b2VzKS4gIGNrY25ldC5oLCAyNyBBdWcgMjAwNS4KLQotVGhlIEhQLVVYIDExaS9pYTY0IGJ1aWxk IGNvbWVzIG91dCB0byBiZSAzMi1iaXQgYnV0IHRoaW5rcyBpdCdzIDY0LWJpdC4KLUNLXzY0QklU IGlzIHNldCBiZWNhdXNlIF9faWE2NCBpcyBkZWZpbmVkLiAgU28gaG93IGRvIEkgYWN0dWFsbHkg bWFrZSBhCi02NC1iaXQgSFAtVVggYnVpbGQ/ICBJIHRyaWVkIGFkZGluZyArREQ2NCB0byBDRkxB R1MsIGFuZCB0aGlzIGdlbmVyYXRlcwotNjQtYml0IG9iamVjdCBmaWxlcyBidXQgbGlua2luZyBm YWlscyB0byBmaW5kIHRoZSBuZWVkZWQgNjQtYml0IGxpYnMKLShlLmcuIC1sbSkuICBGb3Igbm93 IEkgYWRkZWQgYW4gZXhjZXB0aW9uIGZvciBIUFVYIHRvIHRoZSBDS182NEJJVAotZGVmaW5pdGlv biBzZWN0aW9uLiAgY2tjZGViLmgsIDI3IEF1ZyAyMDA1LgotCi1Ub29rIHRoZSB0aW1lIHRvIHZl cmlmeSBteSByZWNvbGxlY3Rpb24gYWJvdXQgdGhlICJncmFjZWZ1bCBmYWlsdXJlIiBvbiBhCi1y ZWd1bGFyIFBlbnRpdW0gTGludXggc3lzdGVtIHdoZW4gcmVjZWl2aW5nIGEgdG9vLWJpZyBmaWxl Li4uICBPSywgaXQncyBub3QKLWV4YWN0bHkgZ3JhY2VmdWwuICBJdCBnZXRzIGEgIkZpbGUgc2l6 ZSBsaW1pdCBleGNlZWRlZCIgZXJyb3I7IHRoZSBtZXNzYWdlCi1pcyBwcmludGVkIGluIHRoZSBt aWRkbGUgb2YgdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSwgYXBwYXJlbnRseSBub3QgYnkKLUtl cm1pdCwgYW5kIEtlcm1pdCBleGl0cyBpbW1lZGlhdGVseS4gIExvb2tzIGxpa2UgYSB0cmFwLi4u ICBZdXAuICAiRmlsZQotc2l6ZSBsaW1pdCBleGNlZWRlZCIgaXMgU0lHWEZTWiAoMjUpLiAgV2hh dCBoYXBwZW5zIGlmIHdlIHNldCBpdCB0byBTSUdfSUdOPwotSnVzdCB0aGUgcmlnaHQgdGhpbmc6 IFRoZSByZWNlaXZlciBnZXRzICJFcnJvciB3cml0aW5nIGRhdGEiIGF0IDIxNDc0ODM2NDcKLWJ5 dGVzLCBzZW5kcyBFLXBhY2tldCB0byBzZW5kZXIgd2l0aCB0aGlzIG1lc3NhZ2UsIGFuZCByZWNv dmVycyB3aXRoIHRvdGFsCi1ncmFjZSAoZHJhaW5zIHBhY2tldCBidWZmZXJzLCByZXR1cm5zIHRv IHByb21wdCkuICBja3V0aW8uYywgMjcgQXVnIDIwMDUuCi0KLUJhY2tlZCBvZmYgZnJvbSByZWpl Y3RpbmcgYSBmaWxlIGJlY2F1c2UgaXRzIGFubm91bmNlZCBzaXplIG92ZXJmbG93cyBhCi1sb25n LiAgTm93IGluc3RlYWQsIEkgc2V0IHRoZSBmaWxlIHNpemUgdG8gLTIgKGEgbmVnYXRpdmUgc2l6 ZSBtZWFucyB0aGUKLXNpemUgaXMgdW5rbm93biwgYnV0IHdlIGhhdmUgYWx3YXlzIHVzZWQgLTEg Zm9yIHRoaXM7IC0yIG1lYW5zICJ1bmtub3duIGFuZAotcHJvYmFibHkgdG9vIGJpZyIpLiAgSW4g dGhpcyBjYXNlLCB0aGUgZi10IGRpc3BsYXkgc2F5czoKLQotICBGaWxlIFNpemU6IFBPU1NJQkxZ IEVYQ0VFRFMgTE9DQUwgRklMRSBTSVpFIExJTUlUCi0KLXRoZW4gdGhlIHVzZXIgY2FuIGludGVy cnVwdCBpdCB3aXRoIFggb3Igd2hhdGV2ZXIsIG9yIGNhbiBsZXQgaXQgcnVuIGFuZAotc2VlIGlm IG1heWJlIChhcyBpbiB0aGUgY2FzZSBvZiBNYWMgT1MgWCkgaXQgd2lsbCBiZSBhY2NlcHRlZCBh bnl3YXkuICBUaGlzCi13YXksIHdlIHNraXAgYWxsIHRoZSBib2d1cyBjYWxjdWxhdGlvbnMgb2Yg cGVyY2VudCBkb25lLCB0aW1lIHJlbWFpbmluZywgZXRjLgotY2tjZm4zLmMsIGNrdXVzeC5jLCAy NyBBdWcgMjAwNS4KLQotRGlzY292ZXJlZCB0aGF0IFZNUyBDLUtlcm1pdCBvbiBBbHBoYSBhbmQg SUE2NCBpcyBhIDMyLWJpdCBhcHBsaWNhdGlvbjsKLXNpemVvZihsb25nKSA9PSBzaXplb2YoY2hh ciAqKSA9PSA0LiAgVHJpZWQgYWRkaW5nIC9QT0lOVEVSX1NJWkU9NjQgdG8gVk1TCi1ERUNDIGJ1 aWxkcyBvbiBBbHBoYSBhbmQgSUE2NCwgYnV0IHRoZSByZXN1bHRzIGFyZW4ndCBncmVhdC4gIFRv bnMgb2YKLXdhcm5pbmdzIGFib3V0IHBvaW50ZXIgc2l6ZSBtaXNtYXRjaGVzIGJldHdlZW4gS2Vy bWl0IHBvaW50ZXJzIGFuZCBSTVMgb25lcywKLWFuZCB0aGUgZXhlY3V0YWJsZSBkb2Vzbid0IHJ1 bi4gIEl0IGFwcGVhcnMgdGhhdCBhY2Nlc3MgdG8gbG9uZyBmaWxlcwotd291bGQgcmVxdWlyZSBh IGxvdCBvZiBoYWNraW5nLCBzaW1pbGFyIHRvIHdoYXQncyBuZWVkZWQgZm9yIDMyLWJpdCBMaW51 eC4KLQotLS0tIERldi4wMjogMjcgQXVnIDIwMDUgLS0tCi0KLUZyb20gSmVmZiwgMjggQXVnIDIw MDUuCi0gLiBGaXggU1NIIEdMT0JBTC1LTk9XTi1IT1NUUy1GSUxFIC8gVVNFUi1LTk9XTi1IT1NU Uy1GSUxFIHBhcnNpbmcsIGNrdXVzMy5jLgotIC4gUGljayB1cCBLOTVTVEFSVEZMQUdTIGZyb20g ZW52aXJvbm1lbnQsIGNrdXVzNC5jLgotIC4gRml4IHNvbWUgdHlwb3MgaW4gY29tbWFuZC1saW5l IHByb2Nlc3NpbmcgKC1xKSwgY2t1dXM0LmMuCi0gLiBCZSBzdXJlIHRvIHN1cHByZXNzIGhlcmFs ZCBpZiBzdGFydGVkIHdpdGggLXEsIGNrdXVzNy5jLgotIC4gRml4IHNzaCBjb21tYW5kLWxpbmUg c3dpdGNoZXMsIGNrdXVzeS5jLgotCi1FcmljIFNtdXR6IGNvbXBsYWluZWQgdGhhdCBIVFRQIFBP U1Qgd2FzIGFkZGluZyBhbiBleHRyYW5lb3VzIGJsYW5rIGxpbmUsCi13aGljaCBwcmV2ZW50ZWQg aGlzIGFwcGxpY2F0aW9uIGZyb20gc3VjY2Vzc2Z1bGx5IHBvc3RpbmcuICBSRkMgMjYxNiBzdGF0 ZXMKLShpbiBTZWN0aW9uIDQuMSk6Ci0KLSAgIEluIHRoZSBpbnRlcmVzdCBvZiByb2J1c3RuZXNz LCBzZXJ2ZXJzIFNIT1VMRCBpZ25vcmUgYW55IGVtcHR5Ci0gICBsaW5lKHMpIHJlY2VpdmVkIHdo ZXJlIGEgUmVxdWVzdC1MaW5lIGlzIGV4cGVjdGVkLiBJbiBvdGhlciB3b3JkcywgaWYKLSAgIHRo ZSBzZXJ2ZXIgaXMgcmVhZGluZyB0aGUgcHJvdG9jb2wgc3RyZWFtIGF0IHRoZSBiZWdpbm5pbmcg b2YgYQotICAgbWVzc2FnZSBhbmQgcmVjZWl2ZXMgYSBDUkxGIGZpcnN0LCBpdCBzaG91bGQgaWdu b3JlIHRoZSBDUkxGLgotCi0gICBDZXJ0YWluIGJ1Z2d5IEhUVFAvMS4wIGNsaWVudCBpbXBsZW1l bnRhdGlvbnMgZ2VuZXJhdGUgZXh0cmEgQ1JMRidzCi0gICBhZnRlciBhIFBPU1QgcmVxdWVzdC4g VG8gcmVzdGF0ZSB3aGF0IGlzIGV4cGxpY2l0bHkgZm9yYmlkZGVuIGJ5IHRoZQotICAgQk5GLCBh biBIVFRQLzEuMSBjbGllbnQgTVVTVCBOT1QgcHJlZmFjZSBvciBmb2xsb3cgYSByZXF1ZXN0IHdp dGggYW4KLSAgIGV4dHJhIENSTEYuCi0KLVRoaXMgc2VlbXMgcHJldHR5IGNsZWFyLiAgT25lIHNl Y3Rpb24gb2YgY29kZSBpbiBodHRwX3Bvc3QoKSAoanVzdCBhYm92ZSB0aGUKLXBvc3RvcGVuOiBs YWJlbCkgd2FzIGFwcGVuZGluZyBhIENSTEYgdG8gYSBidWZmZXIgd2hvc2UgbGFzdCBhbHJlYWR5 IHdhcwotdGVybWluYXRlZCBieSBDUkxGLCBhbmQgdGhlbiBhcHBlbmRlZCBhIHNlY29uZCBDUkxG OyB0aHVzIHR3byBlbXB0eSBsaW5lcy4KLUkgcmVtb3ZlZCB0aGUgc2Vjb25kIG9uZS4gIGNrY25l dC5jLCAyOCBBdWcgMjAwNS4KLQotSSBsb29rZWQgaW50byB0aGUgNjQtYml0bmVzcyBvZiBOZXRC U0QsIGl0IHNlZW1zIHRvIGJlIGxpa2UgTGludXggYW5kCi1GcmVlQlNEIG9uIDY0LWJpdCBoYXJk d2FyZSwgaS5lLiB5b3UganVzdCBidWlsZCBpdCB0aGVyZSBhbmQgaXQgd29ya3MsIGF0Ci1sZWFz dCBvbiBBbHBoYSBhbmQgQU1ENjQsIGdvaW5nIGJhY2sgdG8gTmV0QlNEIDEuNCBvciAxLjUuICBC dXQgSSBkb24ndCBoYXZlCi1hY2Nlc3MgdG8gYW55IG9mIHRoZXNlIGZvciB2ZXJpZmljYXRpb24g YW5kIGRvY3VtZW50YXRpb24gb24gdGhlIFdlYiBpcwotc2NhbnR5LgotCi1DaGVja2VkIFBldGVy RSdzIGNvbXBsYWludCBhZ2FpbiBvZiB3YXJuaW5ncyBpbiBja3V0aW8uYyBhYm91dCBwYXJhbWV0 ZXIKLWxpc3Qgb2YgZ2V0W3VnXWlkKCkgYW5kIGdldGVbdWddaWQoKS4gIFdoZW4gSSAibWFrZSBo cHV4MTEwMG8iIG9uIEhQLVVYCi0xMS4xMSAoUEEtUklTQyksIHRoZXJlIGFyZSBkZWZpbml0ZWx5 IG5vIHdhcm5pbmdzLiAgSGUgc2F5cyB0aGUgc2FtZSB0aGluZwotaGFwcGVucyBvbiAxMC54eCwg YnV0IEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhhdCBhbnkgbW9yZS4gIEkgYWxzbyBkaWQKLSJt YWtlIGhwdXgxMTAwbyIgb24gSFAtVVggMTEuMjMgKDExaSB2MikgKFBBLVJJU0MpLCBhbHNvIG5v IHdhcm5pbmdzLgotKEV4Y2VwdCBpbiBib3RoIGNhc2VzLCBhIHdhcm5pbmcgYWJvdXQgYSBjb21t ZW50IHdpdGhpbiBhIGNvbW1lbnQgaW4KLS91c3IvaW5jbHVkZS9zeXMvcHR5aW8uaCkuICBPbiBI UC1VWCAxMWkgdjIgb24gSXRhbml1bSwgaG93ZXZlciwgdGhlcmUgYXJlCi1UT05TIG9mIHdhcm5p bmdzLCBtb3N0bHkgb2YgdGhlICJ2YXJpYWJsZSBzZXQgYnV0IG5ldmVyIHVzZWQiIGtpbmQuICBB bHNvCi0iZG9sbGFyIHNpZ24gdXNlZCBpbiBpZGVudGlmaWVyIi4gIFRyYWNraW5nIHRoaXMgbGFz dCBvbmUgZG93biwgSSBzZWUgaXQncwotY29tcGxhaW5pbmcgYWJvdXQgY29kZSB0aGF0J3MgaW4g I2lmZGVmcyBmb3Igb3RoZXIgcGxhdGZvcm1zLCBzdWNoIGFzCi1BcG9sbG8gQWVnaXMuICBJcyAi YWVnaXMiIGRlZmluZWQgaW4gSFAtVVggMTFpIHYyL0lBNjQ/ICBObyEgIChJdCB3b3VsZCBzaG93 Ci11cCBpbiBTSE9XIEZFQVRVUkVTIGlmIGl0IHdhcy4pICBTb21lIHBoYXNlIG9mIHRoZSBjb21w aWxlciBpcyBjb21wbGFpbmluZwotYWJvdXQgY29kZSB0aGF0IGl0IHNob3VsZCBiZSBza2lwcGlu ZyAoYW5kIHRoYXQsIGluIGZhY3QsIGl0ICppcyogc2tpcHBpbmcKLWl0IGJlY2F1c2UgdGhlIGJ1 aWxkIGlzIHN1Y2Nlc3NmdWwpLiAgSXQncyBhcyBpZiBjYyBpcyBydW5uaW5nIGxpbnQgZm9yIG1l Ci1idXQgbm90IHRlbGxpbmcgbGludCB3aGljaCBtYWNyb3MgYXJlIGRlZmluZWQgYW5kIHdoaWNo IGFyZSBub3QuCi0KLVZlcmlmaWVkIHRoYXQgNjQtYml0IGxpbmtpbmcgZmFpbHMgaW4gdGhlIHNh bWUgd2F5IGZvciBIUC1VWCAxMWkgdjIgb24gYm90aAotSUE2NCBhbmQgUEEtUklTQy4gIFNlbnQg YSBxdWVyeSB0byBIUC4KLQotQ29tcGlsaW5nIGNrY25ldC5jIGFuZCBja2NmdHAuYyBnb3QgdGhl IGZhbWlsaWFyIHNvY2tvcHQtcmVsYXRlZCB3YXJuaW5ncyBvbgotSFAtVVggMTFpIHYyOyB0dXJu cyBvdXQgaXQgaXMganVzdCBsaWtlIFRydTY0IFVuaXggaW4gdXNpbmcgYW4gaW50IGZvciB0aGUK LWxlbmd0aCBhcmd1bWVudC4gIEFkZGVkIGFub3RoZXIgc3BlY2lhbCBjYXNlIGFuZCB0aGUgd2Fy bmluZ3Mgd2VudCBhd2F5LgotY2tjbmV0LmgsIDI4IEF1ZyAyMDA1LgotCi1BZGRlZCBzb21lIHN0 dWZmIHRvIFNIT1cgRkVBVFVSRVMgdG8gc2VlIHdoYXQga2luZHMgb2YgbWFjcm9zIGFyZSBleHBv c2VkCi0oZS5nLiBJTlRfTUFYLCBMT05HX01BWCwgTExPTkdfTUFYLCBldGMpIGFuZCBhbHNvIHNo b3cgc2l6ZW9mKGxvbmcgbG9uZykgYW5kCi1zaXplb2Yob2ZmX3QpLiAgQnVpbGRpbmcgdGhpcyBj b2RlIGFsbCBvdmVyIHRoZSBwbGFjZSB3aWxsIGdpdmUgbWUgYW4gaWRlYQotb2YgaG93IHdpZGVz cHJlYWQgdGhlc2UgZGF0YSB0eXBlcyBhcmUsIGFuZCB0byB3aGF0IGV4dGVudCBJIGNhbiB0ZWxs Ci13aGV0aGVyIHRoZXkgYXJlIGF2YWlsYWJsZSBmcm9tIGNsdWVzIGluIHRoZSBoZWFkZXIgZmls ZXMuICAoQXQgZmlyc3QKLWdsYW5jZSwgaXQgYXBwZWFycyB0aGF0IEknbSBub3QgcGlja2luZyB1 cCA8bGltaXRzLmg+LCBidXQgYWRkaW5nIGFuCi0jaW5jbHVkZSBmb3IgaXQgaXMganVzdCBhc2tp bmcgZm9yIHRyb3VibGUuKSAgTm8gY29tcGxhaW50cyBhYm91dCBsb25nIGxvbmcKLW9yIG9mZl90 IGZyb20gU29sYXJpcyA5IG9yIHJlY2VudCBMaW51eGVzLiAgY2t1dXM1LmMsIDI4IEF1ZyAyMDA1 LgotCi1GaXhlZCBhIHdhcm5pbmcgaW4gSFAtVVggMTAgYW5kIDExIHN0ZW1taW5nIGZyb20gc29t ZSBvbGQtc3R5bGUgcHJvdG90eXBlcwotaW4gY2t1dGlvLmMgZm9yIGdldFtyZV1bZ3VdaWQoKS4g IGNrdXRpby5jLCAyOSBBdWcgMjAwNS4KLQotVXBkYXRlZCBtaW5peDMgdGFyZ2V0IGZyb20gQW5k eSBUYW5lbmJhdW0uICBtYWtlZmlsZSwgMjkgQXVnIDIwMDUuCi0KLVBldGVyRSBjb25maXJtcyB0 aGF0ICJsb25nIGxvbmciIGFuZCBvZmZfdCBhcmUgYXZhaWxhYmxlIGluIGFsbCBIUC1VWCAxMCBh bmQKLTExLCBhbmQgaW4gSFAtVVggOSBvbiBQQS1SSVNDIGJ1dCBub3QgTW90b3JvbGEuICAzMCBB dWcgMjAwNS4KLQotR290IDY0LWJpdCBidWlsZHMgdG8gd29yayBvbiBIUC1VWC4gIEFjY29yZGlu ZyB0byBteSBub3RlcywgSm9obiBCaWdnIG9mIEhQCi1zYWlkIChpbiAxOTk5KSB0aGF0IEhQLVVY IDEwLjMwIGFuZCBsYXRlciByZXF1aXJlIFBBLVJJU0MgMS4xLCBhbmQgZG8gbm90Ci13b3JrIG9u IFBBLVJJU0MgMS4wLiAgQnV0IGlzIFBBIDEuMCA2NC1iaXQgb3Igd2hhdD8gIFRvZGF5LCBBbGV4 IE1jS2FsZSBvZgotSFAgc2FpZCAiVGhlIDY0LWJpdCBiaW5hcmllcyB3aWxsIHdvcmsgb24gYWxs IG1hY2hpbmVzIHRoYXQgaGF2ZSB0aGUgc2FtZSBvcgotbGF0ZXIgcmVsZWFzZSBvZiBIUC1VWCAo ZXhjbHVkaW5nIFBBLVJJU0MgMS4xIG1hY2hpbmVzKSIuICBTdGlsbCBuZWVkCi1jbGFyaWZpY2F0 aW9uLi4uICBNYXliZSBpdCdzIHRoYXQgYWxsIElBNjQgYnVpbGRzIGNhbiBiZSA2NC1iaXQgYnV0 IEkgbmVlZAotZHVhbCBidWlsZHMgZm9yIFBBLVJJU0MuICBNZWFud2hpbGUgSSBzdGFydGVkIHRy YW5zZmVyIG9mIGEgNEdCKyBmaWxlIGZyb20KLVNvbGFyaXMgdG8gSFAtVVggMTFpIGJ1dCBpdCBl eGNlZWRlZCBzb21lIHF1b3RhIG9uIHRoZSBIUCBsb25nIGJlZm9yZSBpdAotYXBwcm9hY2hlZCB0 aGUgMkcgcG9pbnQuICBJdCBmYWlsZWQgY2xlYW5seSBhbmQgdXAgdW50aWwgdGhlbiBpdCB3YXMg d29ya2luZwotZmluZSAobnVtYmVycywgc3RhdHMsIGV0YykuICAzMCBBdWcgMjAwNS4KLQotU3Vw cG9ydCBvZiBsYXJnZSBmaWxlcyBpbiAzMi1iaXQgYnVpbGRzIGJlZ2FuIGluIDEwLjIwLiAgNjQt Yml0IGFwcGxpY2F0aW9uCi1zdXBwb3J0IGJlZ2FuIGluIDExLjAwLCBidXQgbm90IGFsbCBtYWNo aW5lcyB0aGF0IHJ1biAxMS4wMCBzdXBwb3J0IDY0IGJpdHMuCi1BYm91dCBsb25nIGZpbGVzLCBz ZWUgSFAgL3Vzci9zaGFyZS9kb2MvbGdfZmlsZXMudHh0LgotCi1QZXRlckUgZm91bmQgdGhhdCBj ZXJ0YWluIHBhdHRlcm5zIGNhbiBzdGlsbCBtYWtlIEtlcm1pdCBsb29wOyBleGFtcGxlOgotCi0g IGlmIG1hdGNoIFQwMTAxMS0wMDg1Ni0yMS02MzItMDczICpbYWJjXSB7IGVjaG8gR09PRCB9IGVs c2UgeyBlY2hvIEJBRCB9Ci0gIGlmIG1hdGNoIFQwMTAxMS0wMDg1Ni0yMS02MzItMDczICpbYS16 XSB7IGVjaG8gR09PRCB9IGVsc2UgeyBlY2hvIEJBRCB9Ci0KLVRoZSBtaW5pbXVtIG9mZmVuZGlu ZyBwYXR0ZXJuIGlzICogZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgYW4gW3h4eF0KLWNvbnN0cnVj dGlvbiwgZm9sbG93ZWQgYnkgYW55dGhpbmcgZWxzZSwgaW5jbHVkaW5nIG5vdGhpbmcuICBQcmV2 aW91cwotdmVyc2lvbnMgb2YgS2VybWl0IGhhbmRsZWQgdGhpcyBvbmUgY29ycmVjdGx5LCB3aXRo b3V0IGxvb3BpbmcgKGJ1dCBmYWlsZWQKLWNlcnRhaW4gbWF0Y2hlcyB0aGF0IHNob3VsZCBoYXZl IHN1Y2NlZWRlZCkuICBUaGUgbmV3IHNlY3Rpb24gb2YgY29kZSBJCi1hZGRlZCBvbiAxNSBKdW5l LCB1cG9uIGZhaWx1cmUgdG8gbWF0Y2gsIGFkdmFuY2VzIHRoZSBzdHJpbmcgcG9pbnRlciBhbmQK LWJhY2tzIHVwIHRoZSBwYXR0ZXJuIHRvIHRoZSBwcmV2aW91cyBwYXR0ZXJuLCBhbmQgc3RhcnRz IGFnYWluCi0ocmVjdXJzaXZlbHkpLiAgSG93ZXZlciwgdGhlcmUgbmVlZGVkIHRvIGJlIGEgY29y cmVzcG9uZGluZyBjaGVjayBhdCBlbnRyeQotZm9yIGFuIGVtcHR5IHRhcmdldCBzdHJpbmcuICBj a21hdGNoKCk6IGNrY2xpYi5jLCAxMiBTZXAgMjAwNS4KLQotUGV0ZXJFIGRpc2NvdmVyZWQgdGhh dCAia2VybWl0IC15IGZpbGV0aGF0ZG9lc25vdGV4aXQiIGdpdmVzIGFuIGVycm9uZW91cwotZXJy b3IgbWVzc2FnZSB0aGF0IG5hbWVzIHRoZSB1c2VyJ3MgY3VzdG9taXphdGlvbiwgcmF0aGVyIHRo YW4gdGhlIG5hbWUKLWdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuICBkb2luaXQoKTogY2t1dXM1 LmMsIDEyIFNlcCAyMDA1LgotCi1GUkVBRCBkb2VzIG5vdCBnZXQgYW4gZXJyb3IgaWYgaXQgdHJp ZXMgdG8gcmVhZCBhIHJlY29yZCBvciBmaWxlIG9yIHBpZWNlIG9mCi1maWxlIHRoYXQgaXMgdG9v IGJpZyBmb3IgaXRzIGJ1ZmZlci4gIEluIHBhcnRpY3VsYXIsIEZSRUFEIC9TSVpFOnh4eCBzZWVt cwotdG8gc3VjY2VlZCBldmVuIGlmIGxlc3MgdGhhbiB4eHggd2FzIHJlYWQuICBJdCBzaG91bGQg ZmFpbCB1bmxlc3MsIHBlcmhhcHMsCi1pdCBzdWNjZXNzZnVsbHkgcmVhZCB1cCB0byB0aGUgZW5k IG9mIHRoZSBmaWxlLiAgRnVydGhlcm1vcmUsIGlmIHh4eCBpcwotYmlnZ2VyIHRoYW4gdGhlIGZp bGUgYnVmZmVyIHNpemUsIGl0IHNob3VsZCBjb21wbGFpbi4gIFRoZSBidWZmZXIgaXMKLWxpbmVb TElOQlVGU0laXSwgMzJLLiAgVGhlIGxhY2sgb2YgZmFpbHVyZSB3YXMgZHVlIHRvIGNvZGUgaW4g ZG9maWxlKCkgdGhhdAotYWRqdXN0ZWQgdGhlIGdpdmVuIHNpemUgc2lsZW50bHkgaWYgaXQgd2Fz IGdyZWF0ZXIgdGhhbiB0aGUgYnVmZmVyIHNpemUsCi13aGljaCBJIHJlbW92ZWQsIGFuZCBhbHNv IGFkZGVkIGEgY2hlY2sgd2hlbiBwYXJzaW5nIHRoZSAvU0laRTogc3dpdGNoLgotZG9maWxlKCk6 IGNrdXVzNy5jLCAxMiBTZXAgMjAwNS4KLQotVGhhdCBzdGlsbCBkaWRuJ3QgaGVscCB3aXRoIEZS RUFEIC9TSVpFOm4gcmV0dXJuaW5nIGxlc3MgdGhhbiBuIGJ5dGVzLCBldmVuCi13aGVuIHRoZXkg d2VyZSBhdmFpbGFibGUuICBUaGF0J3MgYmVjYXVzZSB0aGUgdW5kZXJseWluZyByb3V0aW5lLCB6 X2luKCksCi1kaWRuJ3QgY2hlY2sgZnJlYWQoKSdzIHJldHVybiBjb2RlLCB3aGljaCBpcyB0aGUg bnVtYmVyIG9mIGJ5dGVzIHJlYWQuCi1JZiBmcmVhZCgpIGhhcyBzbWFsbGVyIGJ1ZmZlcnMsIGl0 IG5lZWRzIHRvIGJlIGNhbGxlZCBpbiBhIGxvb3AuICB6X2luKCk6Ci1ja3V1czcuYywgMTIgU2Vw IDIwMDUuCi0KLUZsZW4oKSBmYWlscyBvbiBzdHJpbmdzIG9mIGxlbmd0aCA4MTkyIG9yIG1vcmUu ICBUaGUgbGltaXRhdGlvbiBpcyBpbiB0aGUKLWNhbGxlcnMgb2YgenpzdHJpbmcsIHdoaWNoIHNl ZW0gdG8gYmUgc3BlY2lmeWluZyBhbiA4SyBidWZmZXIsIGluIHRoaXMgY2FzZQotZm5ldmFsKCku ICBUaGUgb3BlcmFibGUgc3ltYm9scyBhcmUgRk5WQUxMIChtYXggbGVuZ3RoIG9mIHZhbHVlIHJl dHVybmVkIGJ5Ci1hIGZ1bmN0aW9uKSBhbmQgTUFYQVJHTEVOIChtYXhpbXVtIGxlbmd0aCBvZiBh biBhcmd1bWVudCB0byBhIGZ1bmN0aW9uKS4gIEkKLWNoYW5nZWQgYm90aCBvZiB0aGVzZSBmb3Ig QklHQlVGT0sgYnVpbGRzIHRvIGJlIENNREJMLiAgQnVmZmVycyBjYW4gbmV2ZXIgYmUKLWluZmlu aXRlLCB0aGVyZSBoYXMgdG8gYmUgYSBsaW1pdC4gIEl0J3MgaW1wb3J0YW50IHRvIG1ha2UgZXZl cnl0aGluZyB3b3JrCi1jb25zaXN0ZW50bHkgd2l0aGluIHRoYXQgbGltaXQsIGFuZCB0byBtYWtl IHNvbWV0aGluZyB1c2VmdWwgaGFwcGVuIHdoZW4gdGhlCi1saW1pdCBpcyBleGNlZWRlZC4gIEF0 IHRoaXMgcG9pbnQsIEkgY2FuIHByb2JhYmx5IGFsc28gaW5jcmVhc2UgdGhlIGxpbWl0cwotZm9y IG1vZGVybiAzMi1iaXQgc3lzdGVtcywgYW5kIGNlcnRhaW5seSBmb3IgNjQtYml0IG9uZXMuICBB bHNvIHRoZXJlJ3Mgbm8KLXBvaW50IGluIHdvcnJ5aW5nIGFib3V0IDE2LWJpdCBwbGF0Zm9ybXMg YW55IG1vcmU7IGVhcmxpZXIgQy1LZXJtaXQgdmVyc2lvbnMKLWNhbiBzdGlsbCBiZSB1c2VkIG9u IHRoZW0gaWYgbmVjZXNzYXJ5LiBja3V1c3IuaCwgMTIgU2VwIDIwMDUuCi0KLVNwZWNpYWwgI2lm ZGVmcyBmb3IgZmluZGluZyByZXNvbHYuaCBhbmQgbmFtZXNlci5oIGluIE1JTklYMyBmcm9tIEFu ZHkKLVRhbmVuYmF1bS4gIGNrY25ldC5jLCAyMCBTZXAgMjAwNS4KLQotUGV0ZXJFIG5vdGljZWQg dGhhdCBja21hdGNoKCksIGV2ZW4gdGhvdWdoIGl0IHdvcmtzIHByZXR0eSB3ZWxsIG5vdywgZG9l cyBhCi1sb3Qgb2YgZXh0cmEgYW5kIHVubmVjZXNzYXJ5IHJlY3Vyc2lvbiBhZnRlciBkZXRlcm1p bmluZyB0aGUgc3RyaW5nIGFuZAotcGF0dGVybiBkbyBub3QgbWF0Y2gsIGF0IGxlYXN0IHdoZW4g dGhlIHBhdHRlcm4gaXMgb2YgdGhlIGZvcm0gKlthYmNdLgotQWZ0ZXIgc2V2ZXJhbCBmYWxzZSBz dGFydHMgSSB3YXMgYWJsZSByZWR1Y2UgdGhpcyBlZmZlY3QgdG8gYSBtaW5vciBsZXZlbAotKGJ1 dCBub3QgZWxpbWluYXRlIGl0IGFsbCB0b2dldGhlcikgYnkgY2hhbmdpbmcgYSB3aGlsZSBsb29w IGludG8gYSBkbyBsb29wLgotY2ttYXRjaCgpOiBja2NsaWIuYywgMTUgT2N0IDIwMDUuCi0KLUFk ZGVkIC1ETk9MT05HTE9ORyB0byBIUC1VWCA4LjAwIGFuZCBlYXJsaWVyIGJ1aWxkcywgYW5kIHRv IE1vdG9yb2xhLWJhc2VkCi1IUC1VWCA5LjAwIGJ1aWxkcy4gIFRoaXMgaXMgc2ltcGx5IHRvIGlu aGliaXQgdGhlIHRlc3QgZm9yIHdoZXRoZXIgImxvbmcKLWxvbmciIGlzIHN1cHBvcnRlZCBieSB0 aGUgY29tcGlsZXIsIHNpbmNlIHdoZW4gaXQgaXNuJ3QsIHRoZSBtb2R1bGUKLWNvbnRhaW5pbmcg dGhlIHRlc3Qgd29uJ3QgY29tcGlsZS4gIG1ha2VmaWxlLCBja3V1czUuYywgMTYgT2N0IDIwMDUu Ci0KLU1ha2luZyBBU0tRIGFsd2F5cyBlY2hvIGFzdGVyaXNrcyBpcyBhIGJhZCBpZGVhLCBiZWNh dXNlIHdoZW4gaXQgZG9lc24ndAotZWNobywgaXQncyB0aGUgcGVyZmVjdCB3YXkgdG8gcmVhZCBz aWxlbnRseSBmcm9tIHN0ZGluLCBlLmcuIGluIGEgQ0dJIHNjcmlwdAotKElOUFVUIGNhbiBhbHNv IGJlIHVzZWQgZm9yIHRoaXMgYnV0IGl0J3Mgbm90IGFzIHN0cmFpZ2h0Zm9yd2FyZCkuICBTbyBJ IHB1dAotdGhlIGRlZmF1bHQgZm9yIEFTS1EgYmFjayB0byBubyBlY2hvaW5nLCB0aGVuIGdhdmUg QVNLUSBpdHMgb3duIHN3aXRjaAotdGFibGUsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIGZvciBBU0sg d2l0aCB0aGUgYWRkaXRpb24gb2YgYW4gL0VDSE86eCBzd2l0Y2gsCi13aGljaCB0ZWxscyB3aGF0 IGNoYXJhY3RlciB0byBlY2hvLiAgY2t1Y21kLmMsIGNrdXVzWzI2XS5jLCAxNyBPY3QgMjAwNS4K LQotRml4ZWQgYSBidWcgaW4gRlRQIEdFVCAvQ09NTUFORCBmaWxlbmFtZSBjb21tYW5kbmFtZTsg aXQgYWx3YXlzIGR1bXBlZCBjb3JlCi1kZXJlZmVyZW5jaW5nIGEgbnVsbCBzdHJpbmcgKHRoZSBu b25leGlzdGVudCBsb2NhbCBhc25hbWUpLiAgY2tjZnRwLmMsCi0xNyBPY3QgMjAwNS4KLQotRm9y IGRvY3M6IGlmIHlvdSBkb24ndCBsaWtlIHRoZSBmdW5ueSBidXNpbmVzcyB0aGF0IGhhcHBlbnMg d2hlbiB5b3UgdHlwZQotYW4gSUYgY29tbWFuZCBhdCB0aGUgcHJvbXB0LCB1c2UgWElGIGluc3Rl YWQgYW5kIGl0IHdvbid0IGhhcHBlbi4gIEFsc28gbm90ZQotdGhhdCBjb21tYW5kcyBsaWtlICJp ZiB4eHggeyBlY2hvIGJsYWggfSBlbHNlIHsgZWNobyBibGFoIGJsYWggfSIgZG9uJ3QKLXdvcmsg d2hlbiB0eXBlZCBhdCB0aGUgcHJvbXB0OyB5b3UgaGF2ZSB0byB1c2UgWElGIGZvciB0aGlzLiAK LQotQmFjayB0byBja21hdGNoKCkuLi4gIFVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyAoZS5nLiBw YXR0ZXJucyBsaWtlICpbYWJjXSkKLWZhaWx1cmUgdG8gbWF0Y2ggd291bGQgbm90IHN0b3AgdGhl IHJlY3Vyc2lvbiBiZWNhdXNlIHRoZSBzdHJpbmcgYW5kIHBhdHRlcm4KLWFyZ3VtZW50cyBhcmUg b24gdGhlIHN0YWNrLCBhcyB0aGV5IG11c3QgYmUsIHNvIHRoZXJlIHdhcyBubyB3YXkgZm9yIGxl dmVsCi1uLTEgdG8ga25vdyB0aGF0IGxldmVsIG4gaGFkIGRldGVjdGVkIGEgZGVmaW5pdGl2ZSBu b25tYXRjaCBhbmQgdGhhdCBubwotZnVydGhlciBhdHRlbXB0cyBhdCBtYXRjaGluZyB3ZXJlIHJl cXVpcmVkLiAgVGhlIHJpZ2h0IHdheSB0byBoYW5kbGUgdGhpcyBpcwotdG8gcmVjb2RlIHRoZSB3 aG9sZSB0aGluZyBhcyBjb3JvdXRpbmVzLCB0aGUgY2hlYXAgd2F5IG91dCBpcyB3aXRoIGEgZ2xv YmFsCi1zdGF0aWMgZmxhZy4gIFdvcmtzIHBlcmZlY3RseSwgaW4gdGhlIHNlbnNlIHRoYXQgdGhl IG1hdGNoLmtzYyB0ZXN0IHJlc3VsdHMKLWFyZSBpZGVudGljYWwgdG8gd2hhdCB0aGV5IHdlcmUg YmVmb3JlIGFuZCB0aGUgZXh0cmEgYmFja2luZyB1cCBhbmQKLXJlY3Vyc2lvbiBhcmUgZWxpbWlu YXRlZC4gIChUaGUgT2N0IDE1dGggZml4IHdhc24ndCByZWFsbHkgYSBmaXgsIGl0IGJyb2tlCi1h IGNvdXBsZSBvZiBjYXNlcy4pICBja2NsaWIuYywgMjAgT2N0IDIwMDUuCi0KLWNrdXVzNy5jKDI5 ODcpOiB3YXJuaW5nICMyNjc6IHRoZSBmb3JtYXQgc3RyaW5nIHJlcXVpcmVzIGFkZGl0aW9uYWwg YXJndW1lbnRzCi0oaW4gUFVSR0UgY29tbWFuZCk7IGZpeGVkIDIwIE9jdCAyMDA1LgotCi1Gcm9t IEFuZHkgVGFuZW5iYXVtLCBmaW5hbCBjaGFuZ2VzIGZvciBNSU5JWDM6ICNpZmRlZiBvdXQgdGhl IGlubGluZQotZGVmaW5pdGlvbnMgZm9yIGdldHRpbWVvZmRheSgpIGFuZCByZWFkbGluaygpLiAg Y2t1dGlvLmMsIDIzIE9jdCAyMDA1LgotCi1Gcm9tIEplZmY6IHN0cnVjdCBnc3NfdHJpYWxzIGlu aXRpYWxpemVycyBjaGFuZ2VkIGZyb20gZ3NzX21lY2hfa3JiNSB0bwotY2tfZ3NzX21lY2hfa3Ji NS4gIGNrY2Z0cC5jLCAyMyBPY3QgMjAwNS4KLQotRnJvbSBKZWZmOiBzb21lIGltcHJvdmVtZW50 cyB0byBLOTUgR1VJIFNIT1cgVEVSTUlOQUwuICBja3V1czUuYywgMjMgT2N0IDIwMDUuCi0KLUZv dW5kIGFuZCBjb3JyZWN0ZWQgc29tZSBtaXNwbGFjZWQgI2lmZGVmcyBpbiBzaG9mZWF0KCksIGNr dXVzNS5jLCAyMyBPY3QgMjAwNS4KLQotLS0tIERldi4wMyAtLS0KLQotRml4ZWQgYSBjb21waWxl ciB3YXJuaW5nIGluIGEgZGVidWcoKSBzdGF0ZW1lbnQgaW4genpzdHJpbmcoKSBieSBhZGRpbmcK LXBhcmVucy4gIGNrdXVzNC5jLCAyNCBPY3QgMjAwNS4KLQotQWRkZWQgLUROT0xPTkdMT05HIHRv IHN2NjhyM3Y2IHRhcmdldCwgbWFrZWZpbGUsIDI1IE9jdCAyMDA1LgotCi1OZXcgbWFrZWZpbGUg dGFyZ2V0cyBmb3IgSFAtVVggZnJvbSBQZXRlckUgdG8gaGFuZGxlIHRoZSAnbG9uZyBsb25nJwot c2l0dWF0aW9uLiAgIDI2IE9jdCAyMDA1LgotCi1Gcm9tIEplZmY6IGNoYW5nZXMgdG8gc3VwcG9y dCBPcGVuU1NMIDAuOS44LCBja19zc2wuaC4gIGNrY2FzYy5oIGhhcyBoYWQKLXNob3J0IG5hbWVz IGRlZmluZWQgZm9yIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycyBmb3IgMjAtc29tZSB5ZWFycyBi dXQgbm93Ci10aGV5IGFyZSBjYXVzaW5nIGNvbmZsaWN0cywgc28gRU0gYmVjb21lcyBYRU0gKGFs c28gZm9yIE9wZW5TU0wgMC45LjgpLgotQ2hhbmdlZCBLOTUncyBkZWZhdWx0IHRlcm1pbmFsIHR5 cGUgZnJvbSBWVDMyMCB0byBWVDIyMCBiZWNhdXNlIFZUMzIwCi10ZXJtY2Fwcy90ZXJtaW5mb3Mg YXJlIGRpc2FwcGVhcmluZyBmcm9tIFVuaXggaG9zdHM6IGNrdXVzNy5jLiAgUmVvcmdhbml6ZQot dGhlIGRhdGEtdHlwZXMgc2VjdGlvbiBvZiBTSE9XIEZFQVRVUkVTIHRvIGFkZCBtb3JlIG1hY3Jv IHRlc3RzIGZvciBpbnRlZ3JhbAotc2l6ZXMgYW5kIHRvIHByb3ZpZGUgZm9yIHRoZSBwcm9wZXIg cHJpbnRmIGZvcm1hdHRpbmcgaW4gb3JkZXIgdG8gYWxsb3cgdGhlCi1zaXplcyB0byBiZSBvdXRw dXQgKCJZb3UgYXJlIGdvaW5nIHRvIG5lZWQgdG8gYmUgY2FyZWZ1bCBiZWNhdXNlICVsbHggaXMg bm90Ci1zdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3Jtcy4gIE9uIFdpbmRvd3MsIGl0IGlzIHRoZSBz YW1lIGFzICVseCwgMzIgYml0cyIpOgotY2t1dXM1LmMsIDI2IE9jdCAyMDA1LgotCi1EZWZpbmVk IE5PTE9OR0xPTkcgY2tjZGViLmggZm9yIHZhcmlvdXMgb2xkIHBsYXRmb3JtcyB3aGVyZSB3ZSBr bm93IHdlIGFyZQotbmV2ZXIgZ29pbmcgdG8gbmVlZCA2NC1iaXQgaW50cyAoZXZlbiBpZiB0aGV5 IHN1cHBvcnQgYSBsb25nIGxvbmcgZGF0YXR5cGUsCi1jaGFuY2VzIGFyZSBwcmV0dHkgc2xpbSB0 aGV5IHN1cHBvcnRlZCA2NC1iaXQgZmlsZSBzaXplcykuICBja2NkZWIuaCwKLTI2IE9jdCAyMDA1 LgotCi1QZXRlckUgbm90aWNlZCB0aGF0IEdPVE8gdGFyZ2V0cyBjYW4gb25seSBiZSA1MCBjaGFy YWN0ZXJzIGxvbmcuICBUaGlzIHdhcwotYnkgZGVzaWduLCBhIGxvbmcgdGltZSBhZ28sIG9uIHRo ZSBhc3N1bXB0aW9uIHRoYXQgbm9ib2R5IHdvdWxkIG1ha2UgbG9uZ2VyCi1sYWJlbHMuICBCdXQg aW4gU1dJVENIIHN0YXRlbWVudHMsIGNhc2UgbGFiZWxzIGNhbiBiZSB2YXJpYWJsZXMgdGhhdCBl eHBhbmQKLXRvIGFueXRoaW5nIGF0IGFsbC4gIElmIHdlIGNob3AgdGhlbSBvZmYgYXQgNTAsIHdl IG1pZ2h0IGV4ZWN1dGUgdGhlIHdyb25nCi1jYXNlLiAgQ2hhbmdlZCB0aGUgbWF4aW11bSBsYWJl bCBzaXplIHRvIGJlIDhLLCBhbmQgYWRkZWQgY29kZSB0byBkb2dvdG8oKQotdG8gY2hlY2sgd2hl biBhIGxhYmVsIG9yIHRhcmdldCBpcyB0b28gbG9uZyBhbmQgZmFpbCwgdG8gcHJldmVudCBzcHVy aW91cwotR09UTyBvciBTV0lUQ0ggcmVzdWx0cy4gIGNrdXVzci5oLCBja3V1c1tyNl0uYywgMjYg T2N0IDIwMDUuCi0KLVRlc3RpbmcgcmV2ZWFsZWQgdGhlcmUgd2FzIHN0aWxsIGEgcHJvYmxlbSB3 aXRoIFNXSVRDSCBjYXNlIGxhYmVscyB0aGF0IHdlcmUKLXZhcmlhYmxlcyB0aGF0IGV4cGFuZGVk IGludG8gbG9uZyBzdHJpbmdzLiAgVHVybnMgb3V0IHRoYXQgSSB3YXMgYmVpbmcKLXRvbyBjbGV2 ZXIgd2hlbiBJIGRlY2lkZWQgdGhhdCwgaWYgdGhlIFNXSVRDSCBtYWNybyB3YXMgbjEgY2hhcmFj dGVycyBsb25nCi1hbmQgdGhlIGNhc2UtbGFiZWwgc2VhcmNoIHRhcmdldCB3YXMgbjIgY2hhcmFj dGVycyBsb25nLCBJIG9ubHkgaGFkIHRvCi1zZWFyY2ggdGhlIGZpcnN0IG4xLW4yKzEgY2hhcmFj dGVycyBvZiB0aGUgbWFjcm8gZGVmaW5pdGlvbi4gIFRoYXQgd2FzIHRydWUKLWJlZm9yZSBJIGFs bG93ZWQgY2FzZSBsYWJlbHMgdG8gYmUgdmFyaWFibGVzLCBidXQgbm90IGFueSBtb3JlISAgRml4 ZWQgaW4KLWRvZ290bygpOiBja3V1czUuYywgMjYgT2N0IDIwMDUuCi0KLS0tLSBEZXYuMDQgLS0t Ci0KLURldi4wNCBkaWRuJ3QgYWN0dWFsbHkgY29udGFpbiBKZWZmJ3MgZGF0YS10eXBlIGNoYW5n ZXMgdG8gc2hvZmVhdCgpLAotSSB0aGluayBJIHNhdmVkIHRoZSB3cm9uZyBidWZmZXIgaW4gRU1B Q1MuLi4gIEZpeGVkIG5vdy4gIDI3IE9jdCAyMDA1LgotCi1QZXRlckUgY29ycmVjdGVkIGEgdHlw byBpbiB0aGUgSFAtVVggNy4wMCBtYWtlZmlsZSB0YXJnZXQuICAyNyBPY3QgMjAwNS4KLQotUGV0 ZXJFIGhhZCBiZWVuIHJlcG9ydGluZyBwcm9ibGVtcyBzdHJlc3MtdGVzdGluZyB0aGUgbmV3IFNX SVRDSCBjb2RlLCBidXQKLW9ubHkgb24gSFAtVVggOSwgcHJpbWFyaWx5IHN0YWNrIG92ZXJydW4u ICBUdXJucyBvdXQgdG8gYmUgdGhlIEhQLVVYIDkKLW9wdGltaXppbmcgY29tcGlsZXIncyBmYXVs dC4gIE5vIG9wdGltaXphdGlvbiwgbm8gcHJvYmxlbXMuCi0KLVBldGVyRSBmb3VuZCB0aGF0IGV2 ZW4gd2hlbiBkb2dvdG8oKSBkZXRlY3RzIGEgc3RyaW5nIHRoYXQgaXMgdG9vIGxvbmcKLWFuZCBm YWlscywgdGhpcyBkb2VzIG5vdCBzdG9wIFNXSVRDSCBmcm9tIHByb2R1Y2luZyBhIHJlc3VsdCwg d2hpY2ggY2FuIG5vdAotcG9zc2libHkgYmUgdHJ1c3RlZC4gIENoYW5nZWQgdGhlIHBhcnQgb2Yg ZG9nb3RvKCkgdGhhdCBoYW5kbGVzIHRoaXMgdG8KLW5vdCBqdXN0IGZhaWwsIGJ1dCBhbHNvIHRv IGV4aXQgdGhlIHNjcmlwdCBpbW1lZGlhdGVseSBhbmQgcmV0dXJuIHRvIHRvcAotbGV2ZWwuICBj a3V1czYuYywgMjggT2N0IDIwMDUuCi0KLUFuIGlkZWEgcG9wcGVkIGludG8gbXkgaGVhZCBhZnRl ciBoYXZpbmcgdHlwZWQgdG9vIG1hbnkgY29tbWFuZHMgbGlrZSAiZGlyCi1ja1tjdXddKi5bY3do XSIgdG8gY2hlY2sgdGhlIGxpc3Qgb2YgbWF0Y2hpbmcgZmlsZXMsIGFuZCB0aGVuIGhhdmluZyB0 bwotcmV0eXBlIHRoZSBzYW1lIGZpbGVzcGVjIGluIGEgU0VORCBjb21tYW5kOiBXaHkgbm90IHVu bGVhc2ggc29tZSB1bnVzZWQKLWNvbnRyb2wgY2hhcmFjdGVyIHN1Y2ggYXMgQ3RybC1LIHRvIHNw aXQgb3V0IHRoZSBtb3N0IHJlY2VudGx5IGVudGVyZWQgaW5wdXQKLWZpbGVzcGVjPyAgSXQgd2Fz IGVhc3ksIGp1c3QgYSBmZXcgbGluZXMgaW4gY21pZmkyKCkgYW5kIGd0d29yZCgpLCBwbHVzIGEK LWNvdXBsZSBkZWNsYXJhdGlvbnMuICBUbyBzZWUgYWxsIHRoZSBjaGFuZ2VzLCBzZWFyY2ggZm9y ICJsYXN0ZmlsZSIgKGFsbCB0aGUKLW5ldyBjb2RlIGlzIHByb3RlY3RlZCBieSAjaWZuZGVmIE5P TEFTVEZJTEUpLiAgY2t1Y21kLmMsIDI4IE9jdCAyMDA1LgotCi1JIGFkZGVkIGEgbmV3IHZhcmlh YmxlIFx2KGxhc3RmaWxlc3BlYykgdGhhdCBleHBhbmRzIHRvIHRoZSBzYW1lIGxhc3QKLWZpbGVz cGVjLCBmb3IgdXNlIGluIHNjcmlwdHMuICBja3V1c3IuaCwgY2t1dXM0LmMsIDI4IE9jdCAyMDA1 LgotCi1UaGUgVW5peCB2ZXJzaW9uIG9mIEMtS2VybWl0IGZhaWxlZCB0byBwdXQgYW55dGhpbmcg aW4gdGhlIHNlc3Npb24gbG9nIGlmCi1TRVQgVEVSTUlOQUwgREVCVUcgT04uICBSZWFycmFuZ2Vk IHRoZSBwZXJ0aW5lbnQgY2xhdXNlIHNvIGxvZ2dpbmcgaGFwcGVucwotaW5kZXBlbmRlbnQgb2Yg VEVSTUlOQUwgREVCVUcuICBGb3Igbm93LCBzaW5jZSB0aGUgdXNlciB3aG8gbm90aWNlZCB0aGlz Ci13YW50ZWQgZGVidWcgZm9ybWF0IHRvIGdvIGludG8gdGhlIHNlc3Npb24gbG9nLCB0aGF0J3Mg d2hhdCBJIGRvLiAgVGhlCi1hbHRlcm5hdGl2ZSB3b3VsZCBiZSB0byBqdXN0IGxvZyB0aGUgcmF3 IGluY29taW5nIHN0cmVhbSBhcyB1c3VhbCwgb3IgdG8gYWRkCi1ZZXQgQW5vdGhlciBTRVQgQ29t bWFuZCB0byBjaG9vc2UuICBja3VjbnMuYywgMTEgTm92IDIwMDUuCi0KLUZpeGVkIEhFTFAgSU5U Uk8gdGV4dC4gIGNrdXVzMi5jLCAxMSBOb3YgMjAwNS4KLQotQWRkZWQgTk9MT05HTE9ORyBmb3Ig U1Y2OC4gIGNrY2RlYi5oLCAxMSBOb3YgMjAwNS4KLQotLS0tIERldi4wNSAtLS0KLQotQWRkZWQg YSBkZWJ1ZygpIHN0YXRlbWVudCBpbiBGVFAgc2VjdXJlX2dldGJ5dGUoKSB0byBzZWUgd2hhdCdz IGdvaW5nIG9uCi13aXRoIE11aGFtYWQgVGF1ZmlxIFRhanVkZGluJ3MgMjA1LWJ5dGUtcGVyLXNl Y29uZCBGVFAvU1NMIGRvd25sb2Fkcy4KLQotLS0tIERldi4wNiAtLS0KLQotUmVzdWx0OiBub3Ro aW5nLCBTU0xfZ2V0X2Vycm9yKCkgZG9lcyBub3QgcmVwb3J0IGFueSBlcnJvcnMuICBTdWdnZXN0 ZWQKLXRlc3RpbmcgU1NMX3JlYWQoKSdzIHJldHVybiBjb2RlLCBpZiAwIGRvbid0IHVwZGF0ZSB0 aGUgc2NyZWVuLgotCi1DcmVhdGVkIGEgbmV3IGRhdGEgdHlwZSBDS19PRkZfVCBpbiBja2NkZWIu aCB0aGF0IHdpbGwgZXZlbnR1YWxseSByZXNvbHZlCi10byB3aGF0ZXZlciBlYWNoIHBsYXRmb3Jt IHVzZXMgZm9yIGZpbGUgc2l6ZXMgYW5kIG9mZnNldHMuICBja2NkZWIuaCwKLTE3IE5vdiAyMDA1 LgotCi1NYWRlIGEgbmV3IGxpYnJhcnkgcm91dGluZSBja2ZzdG9hKCkgdGhhdCBjb252ZXJ0cyBh IGZpbGUgc2l6ZSBvciBvZmZzZXQgdG8KLWEgc3RyaW5nLiAgVGhpcyBpcyB0byBzb2x2ZSB0aGUg cHJvYmxlbSB3aXRoIGhhdmluZyB0byB1c2UgZGlmZmVyZW50Ci1wcmludGYoKSBmb3JtYXRzIGZv ciBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zIG9mIGZpbGUgc2l6ZSAoaW50LCBsb25nLCBsb25n Ci1sb25nLCBvZmZfdCwgc2lnbmVkLCB1bnNpZ25lZCwgZXRjKS4gIFJlcGxhY2VkIGEgZmV3IHBy aW50ZigiJWwiLHNpemUpIHdpdGgKLXByaW50ZigiJXMiLGNrZnN0b2Eoc2l6ZSkpIHdpdGggdGhl IGV4cGVjdGVkIHJlc3VsdHMuICBUaGlzIGlzIGp1c3QgYSBzdGFydCwKLXRoZSBkZWZpbml0aW9u cyB3aWxsIG5lZWQgYWRqdXN0bWVudCBmb3IgbWFueSBwbGF0Zm9ybXMsIHZhcmlhYmxlcyBuZWVk IHRvCi1iZSByZWRlY2xhcmVkLCBhbmQgYWxsIHRoZSBvZmZlbmRpbmcgcHJpbnRmJ3MgKGFuZCBw cmludHcncykgd2lsbCBoYXZlIHRvCi1odW50ZWQgZG93biBhbmQgY29udmVydGVkLiAgY2tjbGli LltjaF0sIGNrdXVzNC5jLCAxNyBOb3YgMjAwNS4KLQotQnVpbHQgYSBtaW5pbWFsIHZlcnNpb24g b24gTGludXggd2l0aDoKLW1ha2UgbGludXggIktGTEFHUz0tRE5PTE9DQUwgLUROT0lDUCAtRE5P Q1NFVFMgLUROT0RFQlVHIgotV29ya2VkIGZpbmUsIHJlc3VsdCB3YXMgMjYwSyBvbiBpNjg2LiAg MjEgTm92IDIwMDUuCi0KLURpc2NvdmVyZWQgdGhhdCBLZXJtaXQncyBkYXRlIHBhcnNlciwgY29u dHJhcnkgdG8gdGhlIGRvY3VtZW50YXRpb24sIGZhaWxlZAotdG8gaGFuZGxlIHN0cmluZ3MgbGlr ZSAiV2VkLCAxMyBGZWIgMjAwMiAxNzo0MzowMiAtMDgwMCAoUFNUKSIsIHdoaWNoIGFyZQotY29t bW9ubHkgZm91bmQgaW4gZW1haWwuICBUaGlzIHdhcyBiZWNhdXNlIG9mIGFuIG92ZXJ6ZWFsb3Vz IGFuZCBtaXNndWlkZWQKLWNoZWNrIGluIHRoZSBjb2RlOyBvbmNlIHJlbW92ZWQsIGFsbCB3YXMg d2VsbC4gIGNrdWNtZC5jLCAyNiBOb3YgMjAwNS4KLQotQWRkZWQgYSBuZXcgZm9ybWF0IGNvZGUg NCB0byBcZmN2dGRhdGUoKSB0byBlbWl0IGFzY3RpbWUoKSBmb3JtYXQsIHVzZWQgaW4KLUJTRC1m b3JtYXQgZW1haWwgbWVzc2FnZSBlbnZlbG9wZXMgKGkuZS4gdGhlICJGcm9tICIgbGluZSkuICBz aHVmZmxlZGF0ZSgpLAotY2t1Y21kLmMsIGNrdXVzWzI0XS5jLCAyNiBOb3YgMjAwNS4KLQotQWRk ZWQgYSBuZXcgZnVuY3Rpb24gXGZlbWFpbGFkZHJlc3MoKS4gIEdpdmVuIGEgRnJvbTogb3IgU2Vu ZGVyOiBoZWFkZXIgbGluZQotZnJvbSBhbiBSRkMyODIyLWZvcm1hdCBlbWFpbCBhZGRyZXNzLCBl eHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgYWN0dWFsIGVtYWlsCi1hZGRyZXNzLCBzdWNoIGFzIGtl cm1pdEBjb2x1bWJpYS5lZHUuICBja3V1c3IuaCwgY2t1dXNbNDJdLmMsIDI2IE5vdiAyMDA1Lgot Ci1Vc2luZyB0aGUgbmV3IGZ1bmN0aW9ucywgSSB3cm90ZSBhIHNjcmlwdCB0byBmZXRjaCBtYWls IGZyb20gYSBQT1AzIHNlcnZlcgotb3ZlciBhIFRMUyBjb25uZWN0aW9uLiAgQnV0IHRoZSBsaW5l LWF0LWEtdGltZSBpbnB1dCAobmVlZGVkIGZvciBjaGFuZ2luZwotbGluZSB0ZXJtaW5hdG9ycyBh bmQgYnl0ZS1zdHVmZmluZyB0ZXh0IGxpbmVzIHRoYXQgc3RhcnQgd2l0aCAiRnJvbSAiKSBpcwot c2xvdywgMTcgc2VjIHRvIHJlYWQgMjkgbWVzc2FnZXMgdG90YWxpbmcgMTc1Sy4KLQotQWRkZWQg SU5QVVQgL0NMRUFSIHNvIElOUFVUIGNhbiBiZSBzdGFydGVkIHdpdGggYSBjbGVhbiBidWZmZXIg d2l0aG91dAotcmVxdWlyaW5nIGEgc2VwYXJhdGUgQ0xFQVIgSU5QVVQgY29tbWFuZC4gIGNrdXVz ci5oLCBja3V1c1tyMjRdLmMsCi0yNyBOb3YgMjAwNS4KLQotT25lIHRoaW5nIHRoYXQgSU5QVVQg d2FzIG5ldmVyIGFibGUgdG8gZG8gd2VsbCB3YXMgcmVhZCBhbmQgc2F2ZSB0aGUKLWNvbXBsZXRl IGluY29taW5nIGRhdGEgc3RyZWFtLiAgVGhhdCdzIGJlY2F1c2UsIHdoaWxlIHdhaXRpbmcgZm9y IGl0cwotdGFyZ2V0LCB0aGUgYnVmZmVyIG1pZ2h0IG92ZXJmbG93IHdyYXAgYXJvdW5kLiAgWWV0 IHRoZXJlIHdhcyBuZXZlciBhIHdheSB0bwotdGVsbCBpdCB0byBzdG9wIHdoZW4gaXRzIGJ1ZmZl ciBmaWxscyB1cCBhbmQgbGV0IG1lIHNhdmUgaXQuICBJIGFkZGVkIGEKLS9OT1dSQVAgc3dpdGNo IHRoYXQgZG9lcyB0aGlzLiAgSWYgdGhlIGJ1ZmZlciBmaWxscyB1cCBiZWZvcmUgYW55IG90aGVy Ci1jb21wbGV0aW9uIGNyaXRlcmlvbiBpcyBtZXQsIElOUFVUIHJldHVybnMgZmFpbHVyZSwgYnV0 IHdpdGggXHYoaW5zdGF0dXMpCi1zZXQgdG8gNiAodGhlIG5leHQgYXZhaWxhYmxlIGluc3RhdHVz IHZhbHVlKS4gIFRodXMgYSBwcm9ncmFtIHRoYXQgd2FudHMgdG8KLXJlYWQgYW5kIHNhdmUgKHNh eSkgYW4gZW1haWwgbWVzc2FnZSBmcm9tIGEgUE9QIHNlcnZlciwgd2hpY2ggY291bGQgYmUgYW55 Ci1sZW5ndGggYXQgYWxsLCBhbmQgd2hpY2ggdGVybWluYXRlcyB3aXRoIDxDUkxGPi48Q1JMRj4g Y291bGQgZG8gdGhpczoKLQotICBzZXQgZmxhZyBvZmYKLSAgd2hpbGUgb3BlbiBjb25uZWN0aW9u IHsKLSAgICAgIGlucHV0IC9ub3dyYXAgMTAgXDEzXDEwLlwxM1wxMCAjIFdhaXQgZm9yIDxDUkxG Pi48Q1JMRj4KLSAgICAgIGlmIHN1Y2Nlc3MgewotICAgICAgICAgIGZyd3JpdGUgL3N0cmluZyBc JW8ge1xmcmVwbGFjZShcdihpbnB1dCksXDEzXDEwLlwxM1wxMCxcMTNcMTApfQotICAgICAgICAg IHNldCBmbGFnIG9uCi0gICAgICAgICAgYnJlYWsKLSAgICAgIH0gZWxzZSBpZiAoID09IFx2KGlu c3RhdHVzKSA2IHx8ID09IFx2KGluc3RhdHVzKSAxICkgewotICAgICAgICAgIGZyd3JpdGUgL3N0 cmluZyBcJW8ge1x2KGlucHV0KX0KLSAgICAgICAgICBjb250aW51ZQotICAgICAgfQotICAgICAg YnJlYWsKLSAgfQotICBpZiBmbGFnIChoYW5kbGUgc3VjY2VzcykKLQotTm90ZSBjYXJlZnVsbHkg dGhlIGJyYWNlcyBhcm91bmQgdGhlIEZXUklURSB0ZXh0OyB3aXRob3V0IHRoZW0sIHRyYWlsaW5n Ci1zcGFjZXMgd291bGQgYmUgbG9zdC4KLQotUHJldmlvdXNseSB0aGUgb25seSB3YXkgdG8gSU5Q VVQgYW4gZW50aXJlIGRhdGEgc3RyZWFtIHdpdGhvdXQgbG9zaW5nCi1hbnl0aGluZyAoYXNzdW1p bmcgaXQgd2FzIG9yZGluYXJ5IGxpbmVzIG9mIHRleHQgdGhhdCB3ZXJlIG5vdCAidG9vIGxvbmci KSwKLXdhcyBsaW5lLWJ5LWxpbmU6Ci0KLSAgd2hpbGUgb3BlbiBjb25uZWN0aW9uIHsKLSAgICAg IGlucHV0IC9jbGVhciAxMCBcMTNcMTAKLSAgICAgIGlmIGZhaWwgYnJlYWsKLSAgICAgIGlmIGVx ICJcdihpbnB1dCkiICIkIFwxM1wxMCIgYnJlYWsKLSAgICAgIGZ3cml0ZSAvc3RyaW5nIFwlbyB7 XGZyZXBsYWNlKFx2KGlucHV0KSxcMTNcMTAsXDEwKX0KLSAgfQotCi1UaGUgbmV3IGNvZGUgaXMg MyB0aW1lcyBmYXN0ZXIgdXNpbmcgdGhlIGRlZmF1bHQgSU5QVVQgYnVmZmVyIGxlbmd0aCBvZiA0 Sy4KLVJhaXNpbmcgaXQgdG8gMTZLIG1ha2VzIGl0IDMuNiB0aW1lcyBmYXN0ZXIgKG5vdCB3b3J0 aCBpdCkuICBDaGFuZ2luZyB0aGUKLVBPUDMgc2NyaXB0IHRvIHVzZSBJTlBVVCAvTk9XUkFQIG1h a2VzIGl0IGFib3V0IHR3aWNlIGFzIGZhc3QgKGl0IGRvZXMgbW9yZTsKLWl0IGhhcyB0byBkbyBh bGwgdGhlIGJ5dGUtc3R1ZmZpbmcgYW5kIHVuc3R1ZmZpbmcpLiAgMjcgTm92IDIwMDUuCi0KLUNo YW5nZWQgc3NsX2Rpc3BsYXlfeHh4KCkgdG8ganVzdCByZXR1cm4gaWYgU0VUIFFVSUVUIE9OLiAg T3RoZXJ3aXNlIHRoZXJlCi1pcyBubyB3YXkgdG8gc3VwcHJlc3MgdGhlIG1lc3NhZ2VzLiAgQWxz byBwcm90ZWN0ZWQgYSBwcmV2aW91c2x5IHVucHJvdGVjdGVkCi1wcmludGYoIltTU0wgLSBPS11c clxuIik7IGJ5IGlmICggc3NsX3ZlcmJvc2VfZmxhZyApLiAgY2tfc3NsLmMsCi0yOCBOb3YgMjAw NS4KLQotRGlzY292ZXJlZCB0aGF0IEZPUEVOIC9BUFBFTkQgZG9lc24ndCB3b3JrIGlmIHRoZSBm aWxlIGRvZXNuJ3QgZXhpc3QuICBJdAotdXNlcyBjbWlvZmkoKSB3aGljaCBpcyBhIHN1cGVyLWhv a2V5IGZyb250IGVuZCB0byBjbWlmaTIoKS4gIEkgaGFkIGNvZGUgdG8KLWNhbGwgaXQgYnV0IGZv ciBzb21lIHJlYXNvbiBpdCB3YXMgY29tbWVudGVkIG91dCwgd2l0aCBhIG5vdGUgdG8gdGhlIGVm ZmVjdAotaXQgZGlkbid0IHdvcmsuICBJIHVuY29tbWVudGVkIGl0IGJ1dCB0aGF0IGRpZG4ndCBo ZWxwIG11Y2guICBTbyBJIHdyb3RlIGFuCi1lbnRpcmVseSBuZXcgY21pb2ZpKCkgdGhhdCB3b3Jr cyBleGFjdGx5IGFzIGl0IHNob3VsZCwgdXNpbmcgY2hhaW5lZCBGREJzLAotX0NNSUZJIHRvIF9D TU9GSSAoSSB0aGluayB0aGUgb3JpZ2luYWwgY21pb2ZpKCkgcHJlZGF0ZWQgY2hhaW5lZCBGREJz KS4KLWNrdXVzNy5jLCBja3VjbWQuYywgMjkgTm92IDIwMDUuCi0KLUdldHRpbmcgcmlkIG9mIHRo ZSBhd2Z1bCBoYWNrcyByZXF1aXJlZCB0byBjYWxsIGNtaW9maSgpIG1lYW50IEkgYWxzbyBoYWQg dG8KLWNoYW5nZSB0aGUgRURJVCBjb21tYW5kLCB3aGljaCBpcyB0aGUgb25seSBvdGhlciBwbGFj ZSB3aGVyZSBpdCdzIHVzZWQuCi1VbmZvcnR1bmF0ZWx5IG5vdyBpdCdzIG5vIGxvbmdlciBwb3Nz aWJsZSB0byBnaXZlIEVESVQgd2l0aG91dCBhIGZpbGVuYW1lCi0odG8ganVzdCBzdGFydCBhbiBl bXB0eSBlZGl0b3IpIGJ1dCBJIGRvdWJ0IGFueW9uZSB3aWxsIG5vdGljZS4gIGNrdXVzci5jLAot MjkgTm92IDIwMDUuCi0KLUlGIEtFUkJBTkcgZGlkbid0IGFsd2F5cyB3b3JrIHJpZ2h0LiAgSWYg YSBrZXJiYW5nIHNjcmlwdCBUQUtFcyBhbm90aGVyCi1rZXJiYW5nIHNjcmlwdCwgdGhlIHNlY29u ZCBvbmUgc2hvdWxkIGhhdmUgSUYgS0VSQkFORyBmYWxzZSwgYnV0IGl0IGRpZG4ndC4KLUFkZGVk IGEgY2hlY2sgZm9yIFx2KGNtZGxldmVsKSA9PSAxLiAgTm93IHlvdSBjYW4gd3JpdGUgYSB3cmFw cGVyIHRoYXQgcnVucwotYSBrZXJiYW5nIHNjcmlwdCBpbiBhIGxvb3AsIGFuZCB0aGUgbGF0dGVy IGNhbiB1c2UgSUYgS0VSQkFORyB0byBrbm93Ci13aGV0aGVyIHRvIEVYSVQgKGlmIGNhbGxlZCBh dCB0b3AgbGV2ZWwpIG9yIEVORCAoaWYgY2FsbGVkIGJ5IGFub3RoZXIKLXNjcmlwdCwgdGh1cyBh bGxvd2luZyAtLSBpbiB0aGlzIGNhc2UgLS0gdGhlIGxvb3AgdG8gY29udGludWUpLiAgY2t1dXM2 LmMsCi0yOSBOb3YgMjAwNS4KLQotQ2hhbmdlZCBcZmxvcCgpIGFuZCBmbG9weCgpIGZ1bmN0aW9u cyB0byB0YWtlIGEgdGhpcmQgYXJndW1lbnQsIGEgbnVtYmVyCi1zaWduaWZ5aW5nIGF0IHdoaWNo IG9jY3VycmVuY2Ugb2YgdGhlIGJyZWFrIGNoYXJhY3RlciB0byBsb3AsIHNvOgotCi0gIFxmbG9w eChzZXNhbWUuY2MuY29sdW1iaWEuZWR1KSA9IGVkdQotICBcZmxvcHgoc2VzYW1lLmNjLmNvbHVt YmlhLmVkdSwsMikgPSBjb2x1bWJpYS5lZHUKLQotY2t1dXNbMjRdLmMsIDEgRGVjIDIwMDUuCi0K LUJ1aWx0IE9LIG9uIFZNUyA3LjItMSB3aXRoIE11bHRpTmV0IDQuNC4gIEJ1aWx0IHdpdGggYW5k IHdpdGhvdXQgT3BlblNTTCBvbgotTGludXggT0ssIGRpdHRvIFNvbGFyaXMgOS4gIEJ1aWx0IE9L IG9uIFJIIExpbnV4IEFTNCBvbiBYODZfNjQgKDY0LWJpdCk7Ci0ic2hvdyB2YXIgZnNpemUiICh1 c2luZyBuZXcgY2tmc3RvYSgpKSB3b3JrcyBPSyB0aGVyZS4gIEFsc28gTWFjIE9TIFggMTAuMy45 Ci0oMzItYml0KSwgVHJ1NjQgVU5JWCA0LjBGICg2NC1iaXQpLCBIUC1VWCAxMWl2MiAoNjQtYml0 KSAocGlja3kgbmV3IGNvbXBpbGVyCi1zcGV3cyBvdXQgdG9ucyBvZiB1c2VsZXNzIHdhcm5pbmdz KSwgRnJlZUJTRCA2LjAgb24gaWE2NCAoNjQtYml0KS4KLQotLS0tIERldi4wNyAtLS0KLQotQ2hh bmdlZCAibWFrZSBuZXRic2QiIHRvIGJlIGEgc3lub255bSBmb3IgIm1ha2UgbmV0YnNkMiIgYmVj YXVzZSB0aGUKLW9yaWdpbmFsIG5ldGJzZCB0YXJnZXQgd2FzIGFuY2llbnQuICBSZW5hbWVkIGl0 IHRvIG5ldGJzZC1vbGQuICBtYWtlZmlsZSwKLTMgRGVjIDIwMDUuCi0KLVVwZGF0ZWQgSU5QVVQg YW5kIE1JTlBVVCBoZWxwIHRleHQuICBja3V1czIuYywgMyBEZWMgMjAwNS4KLQotRGlzY292ZXJl ZCB0aGF0IG9uIGEgU0VUIFBPUlQgL1NTTCBjb25uZWN0aW9uLCBLZXJtaXQgdHJlYXRzIGluY29t aW5nCi0weGZmIGRhdGEgYnl0ZXMgKGUuZy4gc2VudCBmcm9tIHRoZSBQT1Agc2VydmVyKSBhcyBJ QUNzIGFuZCBnb2VzIGludG8gVGVsbmV0Ci1uZWdvdGlhdGlvbnMuICBKZWZmIHNheXMgIllvdSB3 aWxsIG5lZWQgdG8gaW1wbGVtZW50IE5QX1NTTFJBVyBhbmQgTlBfVExTUkFXCi10aGF0IGRvIHRo ZSBzYW1lIGFzIE5QX1RDUFJBVyBidXQgbmVnb3RpYXRlIFNTTCBvciBUTFMgYXMgYXBwcm9wcmlh dGUuIgotVGhpcyB3YXMgbm90IGFzIGVhc3kgYXMgaXQgc291bmRlZCwgYmVjYXVzZSBhcHBhcmVu dGx5IGEgbG90IG9mIHRoZSBUZWxuZXQKLWNvZGUgaXMgdXNlZCBieSBTU0wgYW5kIFRMUyBldmVu IHdoZW4gVGVsbmV0IHByb3RvY29sIGlzIG5vdCBiZWluZyBleGVjdXRlZC4KLUkgd291bmQgdXAg ZG9pbmcgdGhpcyBhcyBmb2xsb3dzOiBJIGFkZGVkIC9TU0wtUkFXIGFuZCAvVExTLVJBVyB0byB0 aGUKLXN3aXRjaCB0YWJsZS4gIFJhdGhlciB0aGFuIGRpc2FibGUgVGVsbmV0LCB0aGV5IGRvIGV4 YWN0bHkgd2hhdCB0aGUgL1NTTCBhbmQKLS9UTFMgc3dpdGNoZXMgZG8sIGJ1dCBhbHNvIHNldCBh IHNwZWNpYWwgZmxhZy4gIFRoaXMgZmxhZyBpcyBjaGVja2VkIGluIG9ubHkKLXR3byBwbGFjZTog bmV0Y2xvcygpICh0byBwcmV2ZW50IEtlcm1pdCBmcm9tIHNlbmRpbmcgVEVMTkVUIExPR09VVCB3 aGVuCi1jbG9zaW5nIHRoZSBjb25uZWN0aW9uKSwgYW5kIHRuX2Rvb3AoKSAodG8gcHJldmVudCBL ZXJtaXQgZnJvbSByZWFjdGluZyB0bwotaW5jb21pbmcgSUFDczsgaXQgbWFrZXMgdG5fZG9vcCgp IHJldHVybigzKSwgd2hpY2ggbWVhbnMgInF1b3RlZCBJQUMiLCB3aGljaAotY2F1c2VzIHRoZSBj YWxsZXIgdG8ga2VlcCB0aGUgSUFDIGFzIGRhdGEpLiAgY2tjbmV0LmgsIGNrY3RlbC5oLCBja2N0 ZWwuYywKLWNrdXVzNy5jLCA0IERlYyAyMDA1LgotCi1UaGUgSU5QVVQgY29tbWFuZCBkaWQgbm90 IGFjY291bnQgZm9yIHRuX2Rvb3AoKSByZXR1cm5pbmcgMy4gIEZpeGVkIGluCi1kb2lucHV0KCks IGNrdXVzNC5jLCA0IERlYyAyMDA1LgotCi1BZGRlZCBhbm90aGVyIGRlYnVnKCkgc3RhdGVtZW50 IGluIEZUUCBzZWN1cmVfZ2V0Ynl0ZSgpIHRvIHNlZSB3aGF0J3MgZ29pbmcgb24KLXdpdGggTXVo YW1hZCBUYXVmaXEgVGFqdWRkaW4ncyAyMDUtYnl0ZS1wZXItc2Vjb25kIEZUUC9TU0wgZG93bmxv YWRzLCBwbHVzCi1uZXcgY29kZSB0byB0ZXN0IFNTTF9yZWFkKCkncyByZXR1cm4gY29kZSAoYnl0 ZSBjb3VudCk7IGlmIDAgZG9uJ3QgdXBkYXRlCi10aGUgc2NyZWVuLiAgY2tjZnRwLmMsIDQgRGVj IDIwMDUuCi0KLS0tLSBEZXYuMDggLS0tCi0KLUZpeGVkIGEgdHlwbyBpbiB0aGUgbm9uLUFOU0lD IGRlZmluaXRpb24gb2YgY2tmc3RvYSgpLiAgY2tjbGliLmMsIDcgRGVjIDIwMDUuCi0KLU91ciBD dHJsLUMgdHJhcCAodGhlIE9OX0NUUkxDIG1hY3JvKSB3YXNuJ3Qgd29ya2luZyBmb3Iga2VyYmFu ZyBmaWxlcy4KLVJlYXJyYW5nZWQgc29tZSBjb2RlIHRvIG1ha2UgaXQgd29yay4gIGNrY21haS5j LCA4IERlYyAyMDA1LgotCi1TdGFydGVkIGNvbnZlcnRpbmcgY29kZSB0byB1c2UgQ0tfT0ZGX1Qg Zm9yIGZpbGUgc2l6ZXMgYW5kIG9mZnNldHMsIGFuZAotYWxsIFtzXXByaW50ZidzIHRvIHJlcGxh Y2UgIiVsZCIgb3Igd2hhdGV2ZXIgd2l0aCAiJXMiLCBhbmQgdGhlIHNpemUKLXZhcmlhYmxlIHdp dGggYSBjYWxsIHRvIGNrZnN0b2EoKS4gIFNpbmNlIEkgaGF2ZW4ndCBhY3R1YWxseSBjaGFuZ2Vk IHRoZQotZGVmaW5pdGlvbiBvZiBDS19PRkZfVCBmcm9tIHdoYXQgYWxsIHRoZSBzaXplIHZhcmlh YmxlcyB3ZXJlIHRvIGJlZ2luCi13aXRoIChpLmUuIGxvbmcpLCBpdCBzaG91bGRuJ3QgZG8gYW55 IGhhcm0uICBTbyBmYXIganVzdCBja2NmbjMuYwotMTAgRGVjIDIwMDUuCi0KLUFuIHVwZGF0ZWQg SFAtVVggOS54eCBtYWtlZmlsZSB0YXJnZXQgZnJvbSBQZXRlckUgdG8gZml4IGEgY29yZSBkdW1w IHRoYXQKLWhhcHBlbnMgb24gdGhhdCBwbGF0Zm9ybSBkdWUgdG8gaW5zdWZmaWNpZW50IHJlc291 cmNlcy4gIDE0IERlYyAyMDA1LgotCi1BZGRlZCBkZWJ1ZygpIHN0YXRlbWVudHMgdG8gaHR0cF9i bGFoKCkgcm91dGluZXMgdG8gdGVsbCB3aGV0aGVyIHRoZQotY29ubmVjdGlvbiBpcyAiY2h1bmtl ZCIuICBUaGVyZSBzZWVtcyB0byBiZSBhIGJhZCBwZXJmb3JtYW5jZSBwcm9ibGVtLgotY2tjbmV0 LmMsIDE0IERlYyAyMDA1LgotCi1QZXRlckUgY29tcGxhaW5lZCBhYm91dCB1Z2x5IERJUkVDVE9S WSBlcnJvciBtZXNzYWdlLCA/Tm8gZmlsZXMgbWF0Y2ggLQotIntibGFofSIuICBUaGUgYnJhY2Vz IGFyZSB1c2VkIGludGVybmFsbHkgaW4gY2FzZSB0aGUgdXNlciB0eXBlZCBtb3JlIHRoYW4KLW9u ZSBmaWxlc3BlYy4gIEkgY2hhbmdlZCB0aGUgZXJyb3IgbWVzc2FnZSB0byByZW1vdmUgdGhlbS4g IERpdHRvIERFTEVURS4KLWNrdXVzNi5jLCAxNSBEZWMgMjAwNS4KLQotVGhlIHByb2JsZW0gd2l0 aCBIVFRQIGRvd25sb2FkcyBpcyB0aGF0IEtlcm1pdCBhbHdheXMgZG9lcyBzaW5nbGUtY2hhcmFj dGVyCi1yZWFkKCkgb3Igc29ja2V0X3JlYWQoKSBjYWxscyAob3IgdGhlIFNTTCBlcXVpdmFsZW50 KTsgc2VlIGh0dHBfaW5jKCkuICBJCi1hZGRlZCBidWZmZXJpbmcgY29kZSBmb3Igbm9uLVNTTCBj b25uZWN0aW9ucyBvbmx5IGJ1dCBpdCdzIGdyb3NzIGJlY2F1c2UgaXQKLWhhcyB0byBzd2FwIHR0 eWZkIGFuZCBodHRwZmQgYmVmb3JlIGNhbGxpbmcgbmV0dGNoaygpLiAgSSB0cmllZCBtYWtpbmcg YQotbmV0dGNoaygpIGNsb25lIHRoYXQgYWNjZXB0cyBhIGZpbGUgZGVzY3JpcHRvciBhcyBhbiBh cmd1bWVudCBidXQgaXQgZGlkbid0Ci13b3JrIGJlY2F1c2UgdG9vIG1hbnkgb3RoZXIgcm91dGlu ZXMgdGhhdCBhcmUgaW52b2tlZCBkaXJlY3RseSBvciBpbXBsaWNpdGx5Ci1ieSBuZXR0Y2hrKCkg KHN1Y2ggYXMgaW5fY2hrKCkpIGFyZSBzdGlsbCBoYXJkd2lyZWQgdG8gdXNlIHR0eWZkLiAgSFRU UCBHRVRzCi1hcmUgbm93IDIwIHRpbWVzIGZhc3RlciBvbiB0aGUgbG9jYWwgbmV0d29yayAodGhl IGltcHJvdmVtZW50IGlzIGxlc3MKLWRyYW1hdGljIG92ZXIgYSBjbG9nZ2VkIEludGVybmV0KS4g IGNrY25ldC5bY2hdLCAxNSBEZWMgMjAwNS4KLQotLS0tIERldi4wOSAtLS0KLQotSFRUUCBmaWxl LWRlc2NyaXB0b3Igc3dhcHBpbmcgaXMgbm90IHRocmVhZCBzYWZlLiAgRG9pbmcgaXQgcmlnaHQs IG9mCi1jb3Vyc2UsIGlzIGEgYmlnIGRlYWwsIHNvIGZvciBub3cgSSBqdXN0IGRvbid0IGRlZmlu ZSBIVFRQX0JVRkZFUklORyBmb3IKLVdpbmRvd3MuICBja2NuZXQuYywgMTUgRGVjIDIwMDUuCi0K LU5vdGljZWQgdGhhdCBIVFRQIG5vdCBpbmNsdWRlZCBpbiBGcmVlQlNEIGFuZCBPcGVuQlNEIGJ1 aWxkcy4gIEZpeGVkIGluCi1ja2NkZWIuaCwgMjIgRGVjIDIwMDUuCi0KLUZsZXNoZWQgb3V0IDMy LzY0LWJpdCBkYXRhIHR5cGUgZGVmaW5pdGlvbnMgYW5kIGNoYW5nZWQgc3RydWN0IHphdHRyCi0o ZmlsZSBhdHRyaWJ1dGUgc3RydWN0dXJlKSBtZW1iZXJzIGxlbmd0aCBhbmQgbGVuZ3RoayB0byBo YXZlIHRoZSBuZXcKLUNLX09GRl9UIHR5cGUuICBDaGFuZ2VkIGZpbmFsIGFyZ3VtZW50cyBvZiBk ZWJ1ZygpIGFuZCB0bG9nKCkgdG8gYmUgdGhlIG5ldwotTE9OR0xPTkcgdHlwZS4gIGNrY2RlYi5o LCAyMiBEZWMgMjAwNS4KLQotQ2hhbmdlZCBja2ZzdG9hKCkgdG8gcmV0dXJuIGEgc2lnbmVkIG51 bWJlciBpbiBzdHJpbmcgZm9ybSwgcmF0aGVyIHRoYW4gYW4KLXVuc2lnbmVkIG9uZS4gIFRoYXQn cyBiZWNhdXNlIG9mZl90IGlzIHNpZ25lZCAodGhhbmsgZ29vZG5lc3MpLiAgQWRkZWQgdGhlCi1p bnZlcnNlIGZ1bmN0aW9uLCBja2F0b2ZzKCkgc28gd2UgY2FuIGNvbnZlcnQgZmlsZSBzaXplcyBh bmQgb2Zmc2V0cyBiYWNrCi1hbmQgZm9ydGggYmV0d2VlbiBiaW5hcnkgbnVtYmVyIGFuZCBzdHJp bmcuICBja2NsaWIuYywgMjIgRGVjIDIwMDUuCi0KLUNoYW5nZWQgQXR0cmlidXRlIFBhY2tldCBy ZWFkZXIgdG8gY29udmVydCBpbmNvbWluZyBmaWxlIHNpemUgYXR0cmlidXRlCi13aXRoIGNrYXRv ZnMoKSByYXRoZXIgdGhhbiBhdG9sKCkuICBja2NmbjMuYywgMjIgRGVjIDIwMDUuCi0KLUNvbnZl cnRlZCBkZWJ1ZygpLCB0bG9nKCksIGNrc2NyZWVuKCksIGV0YywgdG8gaGFuZGxlIHBvdGVudGlh bGx5ICJsb25nIGxvbmciCi1hcmd1bWVudHMgYnkgbWFraW5nIHRoZWlyICJuIiBhcmd1bWVudCBD S19PRkZfVC4gIGNrdXVzeC5jLCBja2NkZWIuaCwKLTIyIERlYyAyMDA1LgotCi1Db252ZXJ0ZWQg dGhlIHJlc3Qgb2YgdGhlIHNvdXJjZSBmaWxlcyB0byB1c2UgQ0tfT0ZGX1QgZm9yIGFsbCBmaWxl IHNpemUKLWFuZCBvZmZzZXQgYW5kIGJ5dGUtY291bnQgcmVsYXRlZCB2YXJpYWJsZXMsIGFuZCBj b252ZXJ0ZWQgYWxsIHJlZmVyZW5jZXMgdG8KLXRoZXNlIHZhcmlhYmxlcyBpbiBwcmludGZzIHRv IGdvIHRocm91Z2ggY2tmc3RvYSgpLiAgVGhlbiBJIGJ1aWx0IGl0IG9uCi1MaW51eC9pMzg2IHdp dGg6Ci0KLSAgbWFrZSBsaW51eCAiS0ZMQUdTPS1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9P RkZTRVRfQklUUz02NCIKLQotd2hpY2ggbWFrZXMgb2ZmX3QgYmUgNjQgYml0cyBhbmQgbWFnaWNh bGx5IG1ha2VzIGFsbCB0aGUgcmVndWxhciBmaWxlIEFQSXMKLXVzZSA2NC1iaXQgc2l6ZXMgYW5k IG9mZnNldHMgd2l0aG91dCBjaGFuZ2luZyB0aGUgQVBJIGNhbGxzIGluIHRoZSBzb3VyY2UKLWNv ZGUuICBJdCdzIGdvaW5nIHRvIGJlIGEgbG90IG9mIHdvcmsgdG8gZ2V0IHRocm91Z2ggYWxsIHRo ZSBraW5rcyBidXQgSSB3YXMKLWFibGUgdG8gc2VuZCBhIGxvbmcgZmlsZSwgZG8gZGlyZWN0b3J5 IGxpc3RpbmdzIG9mIGxvbmcgZmlsZXMsIGRvCi1cZnNpemUobG9uZ2ZpbGUpLCBldGMuICBXaGVu IGl0IHNlbmRzIGEgZmlsZSwgdGhlIGxlbmd0aCBpcyBzaG93biBjb3JyZWN0bHkKLWluIHRoZSBB IHBhY2tldC4gIElmIHRoZSByZWNlaXZlciBkb2VzIG5vdCBzdXBwb3J0IGJpZyBudW1iZXJzLCBp dCByZWNlaXZlcwotdGhlIGZpbGUgT0sgYW55d2F5LCB3aXRob3V0IHNob3dpbmcgdGhlIHNpemUs IHRoZSB0aGVybW9tZXRlciwgb3IgcGVyY2VudAotZG9uZSAoYW5kIHRoZW4gd2lsbCBnZXQgYW4g ZXJyb3Igd2hlbiB0aGUgZmlsZSBrZWVwcyBjb21pbmcgYWZ0ZXIgdGhlIDJHCi1tYXJrKS4gIEtl cm1pdCA5NSBhY3R1YWxseSByZWZ1c2VzIGxvbmcgZmlsZXMgZm9yICJTaXplIiwgYnV0IG9ubHkg aWYgdGhlCi1hbm5vdW5jZWQgaXMgbGVzcyB0aGFuIDJeNjMgYnl0ZXMuICBXaGVuIHRvZGF5J3Mg TGludXggdmVyc2lvbiByZWNlaXZlcyBhCi1maWxlLCBpdCBzaG93cyB0aGUgbGVuZ3RoIGNvcnJl Y3RseSBpbiB0aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5LCBhcyB3ZWxsIGFzCi1wZXJjZW50IGRv bmUsIHRoZXJtb21ldGVyLCBldGMuICBBbHNvIGJ1aWx0IHRoaXMgdmVyc2lvbiBvbiB0cnVlIDY0 LWJpdAotTGludXgsIGFuZCBpdCB3b3JrZWQgZmluZS4gIE1hbnkgZmlsZXMgY2hhbmdlZCwgMjIg RGVjIDIwMDUuCi0KLUZvciB0aGUgcmVjb3JkLCB0aGlzIEFQSSBpcyBzcGVjaWZpZWQgaW4gWC9P cGVuJ3MgU2luZ2xlIFVOSVggU3BlY2lmaWNhdGlvbgotVmVyc2lvbiAyLCB3aGljaCBpcyBicmFu ZGVkIGFzIFVOSVggOTguICBJdCBpcyBjYWxsZWQgTGFyZ2UgRmlsZSBTdXBwb3J0LCBvcgotTEZT LCBhbmQgd2FzIGRldmVsb3BlZCBhdCB0aGUgTGFyZ2UgRmlsZSBTdW1taXQuCi0KLUl0IGxvb2tz IGxpa2UgdGhlIG9wZXJhdGl2ZSBmZWF0dXJlLXRlc3QgbWFjcm8gaW4gZ2xpYmMgZm9yIHRyYW5z aXRpb25hbAotbGFyZ2UgZmlsZSBzdXBwb3J0IGlzIF9fVVNFX0xBUkdFRklMRTY0LiAgU28gaWYg dGhpcyBpcyBkZWZpbmVkLCB3ZSBjYW4gYWxzbwotc3VwcGx5IF9MQVJHRUZJTEVfU09VUkNFIGFu ZCBfRklMRV9PRkZTRVRfQklUUz02NCBhdXRvbWF0aWNhbGx5IGZvciAzMi1iaXQKLUxpbnV4IGJ1 aWxkcy4gIEJ1dCB0aGVyZSdzIGEgQ2F0Y2gtMjIsIHlvdSBkb24ndCBrbm93IGlmIHRoaXMgaXMg ZGVmaW5lZAotdW50aWwgeW91IHJlYWQgdGhlIGhlYWRlciBmaWxlcywgYnV0IHlvdSBoYXZlIHRv IGRlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQotYW5kIF9GSUxFX09GRlNFVF9CSVRTIGJlZm9yZSB5 b3UgcmVhZCB0aGUgaGVhZGVyIGZpbGVzLiAgTWF5YmUgaXQncyBnb29kCi1lbm91Z2ggdG8gZ3Jl cCB0aHJvdWdoIDxmZWF0dXJlcy5oPiBmb3IgX19VU0VfTEFSR0VGSUxFNjQuICBtYWtlZmlsZSwK LTIzIERlYyAyMDA1LgotCi1DaGVja2VkIHRoaXMgb24gdHJ1ZSA2NC1iaXQgTGludXguICBUaGUg c2FtZSBzeW1ib2xzIGFyZSBkZWZpbmVkIGluIENGTEFHUywKLWJ1dCB0aGV5IGRvIG5vIGhhcm07 IGl0IGJ1aWxkcyB3aXRob3V0IGNvbXBsYWludCBhbmQgd29ya3MgZmluZS4gIDI0IERlYyAyMDA1 LgotCi1CdWlsdCBpdCBvbiBSZWQgSGF0IExpbnV4IDYuMSBmcm9tIDE5OTkuICBUaGlzIHBpY2tl ZCB1cCB0aGUgbG9uZyBmaWxlCi1zdXBwb3J0IHRvby4gIEd1ZXNzIDYuMSBpc24ndCBvbGQgZW5v dWdoIHRvIG5vdCBoYXZlIGl0ISAgS2VybWl0IHNlZW1zIHRvCi13b3JrIE9LIG9uIHJlZ3VsYXIg ZmlsZXMgYnV0IEkgZG9uJ3QgaGF2ZSBlbm91Z2ggZGlzayBzcGFjZSB0byBjcmVhdGUgYSBsb25n Ci1maWxlLCBhbmQgbXkgYmlnZmlsZS5jIHByb2dyYW0gKHdoaWNoIGNyZWF0ZXMgYSBsb25nIGZp bGUgY29udGFpbmluZyBvbmx5IDEKLWJ5dGUpIGRvZXNuJ3Qgd29yayAoImZzZWVrbzogaW52YWxp ZCBhcmd1bWVudCIpLiAgSXQgbG9va3MgbGlrZSBwYXJ0cyBvZgotdGhpcyBBUEkgd2VyZSB2aXNp YmxlIGluIExpbnV4IGJlZm9yZSB0aGV5IHdlcmUgYWN0dWFsbHkgd29ya2luZy4KLTI0IERlYyAy MDA1LgotCi1Db252ZXJ0ZWQgYWxsIGZzZWVrKCkgYW5kIGZ0ZWxsKCkgdG8gbWFjcm9zIHRoYXQg ZXhwYW5kIHRvIGZzZWVrKCkgYW5kIGZ0ZWxsKCkKLW9yIGZzZWVrbygpIGFuZCBmdGVsbG8oKSBk ZXBlbmRpbmcgb24gd2hldGhlciBfTEFSR0VGSUxFX1NPVVJDRSBpcyBkZWZpbmVkLgotY2t1Zmlv LmMsIGNrdXVzNy5jLCBja3V1c3guYywgMjQgRGVjIDIwMDUuCi0KLU1hZGUgYSBDS19PRkZfVCB2 ZXJzaW9uIG9mIGNtbnVtKCkuICBJdCB3b3VsZCBiZSBhIHZlcnkgYmlnIGRlYWwgdG8ganVzdAot Y2hhbmdlIGNtbnVtKCkgdG8gcmV0dXJuIGEgbmV3IHR5cGUsIHNvIGFub3RoZXIgaWRlYSBpcyB0 byByZW5hbWUgY21udW0oKSB0bwotc29tZXRoaW5nIGVsc2UsIGNtbnVtdygpLCBjaGFuZ2UgaXRz IHJlc3VsdCBhcmd1bWVudCB0byBDS19PRkZfVCwgYW5kIHRoZW4KLW1ha2UgYSBzdHViIGNtbnVt KCkgdG8gY2FsbCBpdCB0byBnZXQgYW4gaW50LCB0aGVuIGNhbGwgY21udW13KCkgZXhwbGljaXRs eQotYW55IHRpbWUgd2UgbmVlZCBhIGJpZyBudW1iZXIuICBja3VjbWQuYywgMjQgRGVjIDIwMDUu Ci0KLUNhbGxpbmcgY21udW13KCkgZGlyZWN0bHkgcmVxdWlyZXMgY2hhbmdlcyB0byBlYWNoIHJv dXRpbmUgdGhhdCB1c2VzIGl0LgotVGhlIElOQ1JFTUVOVCBhbmQgREVDUkVNRU5UIGNvbW1hbmRz LCBmb3IgZXhhbXBsZSwgcmVxdWlyZWQgY2hhbmdlcyB0bwotZG9pbmNyKCksIHZhcnZhbCgpLCBh bmQgaW5jdmFyKCksIGFuZCBhbGwgcmVmZXJlbmNlcyB0byB0aGVtLiAgY2t1dXNyLltjaF0sCi1j a3V1c1s1Nl0uYywgMjQgRGVjIDIwMDUuCi0KLUNhbGxpbmcgY21udW13KCkgaW4gY2hhaW5lZCBG REJzIHJlcXVpcmVkIGRlZmluaW5nIGEgbmV3IGZ1bmN0aW9uIGNvZGUsCi1fQ01OVVcsIGFkZGlu ZyBhIG5ldyBtZW1iZXIgdG8gdGhlIE9GREIgc3RydWN0IGZvciByZXR1cm5pbmcgd2lkZSByZXN1 bHRzLAotYW5kIGFkZGluZyBhIG5ldyBjYXNlIHRvIGNtZmRiKCkuICBja3VjbWQuW2NoXSwgMjQg RGVjIDIwMDUuCi0KLUNoYW5nZWQgRlNFRUsgYW5kIEZDT1VOVCB0byB1c2UgdGhlIG5ldyBjaGFp bmVkIEZEQiBpbnRlcmZhY2UsIG5vdyB3ZSBjYW4KLXNlZWsgYW5kIGxvb2sgcGFzdCAyR0IuICBj a3V1czcuYywgMjQgRGVjIDIwMDUuCi0KLU5leHQgY29tZSBzd2l0Y2hlcywgd2hpY2ggc3RvcmUg dGhlaXIgcmVzdWx0cyBpbiBhIHN0cnVjdCBzdHJpbmdpbnQuICBUaGlzCi1zdHJ1Y3Qgd2FzIGRl ZmluZWQgaW4gZWFjaCBtb2R1bGUgd2hlcmUgaXQgd2FzIHVzZWQgKGNrdXVzW3IzNjddLmMsIGNr Y2Z0cC5jKS4KLUkgbW92ZWQgdGhlIGRlZmluaXRpb24gdG8gY2t1dXNyLmggYW5kIGFkZGVkIGEg d3ZhbCBtZW1iZXIsIHdoaWNoIGNhbiBiZQotcmVmZXJlbmNlZCBieSBhbnkgc3dpdGNoLXBhcnNp bmcgY29kZSB0aGF0IGNhbGxzIGNtbnVtdygpLiAgMjQgRGVjIDIwMDUuCi0KLUNoYW5nZWQgU0VO RCAvQ0FMSUJSQVRFOm4gdG8gYWxsb3cgYmlnIHZhbHVlcyBvZiBuLiAgVGhpcyBtYWtlcyBpdCBw b3NzaWJsZQotdG8gdGVzdCB0aGUgcHJvdG9jb2wgYXNwZWN0cyBvZiBsb25nLWZpbGUgdHJhbnNm ZXIgd2l0aG91dCBhY3R1YWxseSBoYXZpbmcgYQotbG9uZyBmaWxlIGhhbmR5LiAgY2t1dXNyLmMs IDI0IERlYyAyMDA1LgotCi1TRU5EIC9TTUFMTEVSLVRIQU46biwgU0VORCAvTEFSR0VSLVRIQU46 biwgYW5kIGFuZCBTRU5EIC9TVEFSVDpuIGFsc28gbm93Ci1hbGxvdyBsYXJnZSB2YWx1ZXMgb2Yg bi4gIGNrdXVzci5jLCAyNCBEZWMgMjAwNS4KLQotQ2hhbmdlZCB0aGUgYWxnZWJyYWljIGV4cHJl c3Npb24gZXZhbHVhdG9yIHRvIHVzZSB3aWRlIHZhbHVlcy4KLWNrdXVzNS5jLCAyNCBEZWMgMjAw NS4KLQotRml4ZWQgY2tmc3RvYSgpIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVuIG4gaXMgbmVnYXRp dmUgYW5kICgwIC0gbikgaXMgYWxzbwotbmVnYXRpdmUsIHdoaWNoIGhhcHBlbnMgZm9yIG51bWJl cnMgMl4obi0xKSBvciBncmVhdGVyLCB3aGVyZSBuIGlzIHRoZQotbnVtYmVyIG9mIGJpdHMgaW4g dGhlIHdvcmQgc2l6ZSB3ZSdyZSBkZWFsaW5nIHdpdGgsIGUuZy4gNjQsIGluIHdoaWNoIGNhc2UK LTJeNjMgaGFzIGl0cyBzaWduIGJpdCBzZXQgc28gc2VlbXMgdG8gYmUgbmVnYXRpdmUuICBJbiBz dWNoIGNhc2VzLCBja2ZzdG9hKCkKLXJldHVybnMgIk9WRVJGTE9XIiBpbnN0ZWFkIG9mIGEgbnVt ZXJpYyBzdHJpbmcuICBXZSdsbCBoYXZlIHRvIHNlZSBob3cgdGhpcwotcGxheXMgb3V0IGJ1dCBJ IHRoaW5rIGl0J3MgYmV0dGVyIHRvIGNhdXNlIGEgcGFyc2UgZXJyb3IgYW5kIHN0b3AgdGhpbmdz Ci1kZWFkIHRoYW4gdG8gcmV0dXJuIGEgc3B1cmlvdXMgbnVtYmVyLiAgY2tjbGliLmMsIDI0IERl YyAyMDA1LgotCi1Db252ZXJ0ZWQgdGhlIFMtRXhwcmVzc2lvbiBoYW5kbGVyIHRvIHVzZSB3aWRl IGludGVnZXJzLiBja3V1czMuYywgMjQgRGVjIDIwMDUuCi0KLVRvb2sgYWxsIHRoZSBMT05HTE9O RyBzdHVmZiBvdXQgb2YgY2tjZGViLmgsIHdlIGRvbid0IG5lZWQgaXQuCi0KLUFsbCBvZiB0aGVz ZSBjaGFuZ2VzIHJlc3VsdCBpbiA2NC1iaXQgYXJpdGhtZXRpYyAobW9yZSBvciBsZXNzKSBvbiAz Mi1iaXQKLUxpbnV4LCBhcyB3ZWxsIGFzIG9uIHRydWUgNjQtYml0IHBsYXRmb3Jtcy4KLQotUmVi dWlsdCB0b2RheSdzIGNvZGUgb24gU29sYXJpcyA5IGluIHRoZSAzMi1iaXQgYW5kIDY0LWJpdCB3 b3JsZHMsIG9uIFJlZAotSGF0IDYuMSwgUmVkIEhhdCBBUzQuMi4gIEkgaGF2ZW4ndCBib3RoZXJl ZCB0cnlpbmcgYSAzMi82NCBoeWJyaWQgYnVpbGQgZm9yCi1Tb2xhcmlzLCBzaW5jZSBJIGNhbiBi dWlsZCBhIHB1cmUgNjQtYml0IHZlcnNpb24gdGhlcmUuICBRdWljayB0ZXN0cyBzaG93Ci10aGUg bGFyZ2UtbnVtYmVyIGFyaXRobWV0aWMgd29ya3MgT0sgaW4gYWxsIGNhc2VzIGV4Y2VwdCwgb2Yg Y291cnNlLCBvbiBwdXJlCi0zMi1iaXQgYnVpbGRzICh1bmZvcnR1bmF0ZWx5IEkgY2FuJ3QgZmlu ZCBhIHJ1bm5pbmcgTGludXggc3lzdGVtIG9sZCBlbm91Z2gKLXRvIHZlcmlmeSB0aGlzIGZvciBM aW51eCwgYnV0IGl0J3MgdHJ1ZSBmb3Igb3RoZXIgMzItYml0IHBsYXRmb3JtcykuCi0yNCBEZWMg MjAwNS4KLQotVHJpZWQgYnVpbGRpbmcgYSBoeWJyaWQgdmVyc2lvbiBvbiBTb2xhcmlzIDkgYWZ0 ZXIgYWxsIHNpbmNlIHRoZSBMRlMgQVBJIGlzCi1vc3RlbnNpYmx5IHRoZSBzYW1lIGFzIGZvciBM aW51eDoKLQotIG1ha2Ugc29sYXJpczkgIktGTEFHUz0tRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJ TEVfT0ZGU0VUX0JJVFM9NjQiCi0KLUl0IGJ1aWx0IHNtb290aGx5IGFuZCB0aGUgcmVzdWx0aW5n IGJpbmFyeSBpcyAyLjVNQiBjb21wYXJlZCB0byAzLjRNQiBmb3IKLXRoZSAxMDAlIDY0LWJpdCB2 ZXJzaW9uLiAgTG9va3MgbGlrZSBhIGtlZXBlci4gIEZvciBub3csIGFkZGVkIHNvbGFyaXM5bGZz Ci1hbmQgc29sYXJpczEwbGZzIGVudHJpZXMgdG8gdGhlIG1ha2VmaWxlIGJ1dCBpZiB0aGVzZSB3 b3JrIG9uIFBDcyB3ZSBjYW4KLW1ha2UgdGhlc2UgdGhlIHJlZ3VsYXIgZW50cmllcyBmb3IgU29s YXJpcyA5IGFuZCAxMC4gIDI3IERlYyAyMDA1LgotCi1CdWlsdCBvbiBNYWMgT1MgWCAxMC40IHdp dGggdGhlIHJlZ3VsYXIgdGFyZ2V0LiAgSXQgc2VlbXMgdGhhdCBpbiB0aGF0IGNhc2UsCi1vZmZf dCBpcyA2NCBiaXRzIGFueXdheS4gIE5vdGljZWQgdGhhdCBhIGxvdCBvZiBzdHVmZiBkaWRuJ3Qg d29yaywgbGlrZQotZXhwb25lbnRpYXRpb24gaW4gUy1FeHByZXNzaW9ucy4gIFRyaWVkIGJ1aWxk aW5nIGl0IGFzIGFib3ZlLCB3aGljaCB3b3JrZWQsCi1hbmQgbm93IENLX09GRl9UIGlzIDY0IGJp dHMgaW5zdGVhZCBvZiAzMiwgYnV0ICheIDIgMzApIGlzIHN0aWxsIDIuMC4gIEluCi1mYWN0IDIt dG8tdGhlLWFueS1wb3dlciBpcyAyLjAuICBJdCBzZWVtcyB0aGF0IHRoZSBNYWMgT1MgWCB2ZXJz aW9uIGRpZCBub3QKLWhhdmUgRk5GTE9BVCBkZWZpbmVkLiAgSXQgYWxzbyBzZWVtcyB0aGF0IGV2 ZXJ5IHRlc3QgaW4gZG9zZXhwKCkgbGlrZToKLQotICBpZiAocmVzdWx0ICE9IGZwcmVzdWx0KSBm cGZsYWcrKzsKLQotc2hvdWxkIGhhdmUgYmVlbiBwcm90ZWN0ZWQgYnkgI2lmZGVmIEZORkxPQVQu LiNlbmRpZiAvKiBGTkZMT0FUICovIC0tIGEKLWRvdWJsZS1lbmRlZCBicmVhaywgYXMgdGhleSBz YXkgaW4gdGhlIG51Y2xlYXIgcG93ZXIgaW5kdXN0cnkuICBja3V1czMuYywKLTI3IERlYyAyMDA1 LgotCi1BZGRlZCBHUkVQIC9FWENFUFQ6cGF0dGVybi4gIGNrdXVzWzI2XS5jLCAyNyBEZWMgMjAw NS4KLQotRml4ZWQgYSBwcm9ibGVtIHdpdGggdW5pbml0aWFsaXplZCBwdltdLnd2YWwgKHN3aXRj aC1wYXJzaW5nIHBhcmFtZXRlci12YWx1ZSkKLW1lbWJlcnMgdGhhdCBzaG93ZWQgdXAgb24gY2Vy dGFpbiBwbGF0Zm9ybXMgb3Igd2l0aCBjZXJ0YWluIGNvbXBpbGVycy4gIE5vdwotdGhlIE1hYyBP UyBYIDEwLjQgdmVyc2lvbiB3b3Jrcy4gIGNrdXVzW3IzNjddLmMsIGNrY2Z0cC5jLCAyOCBEZWMg MjAwNS4KLQotQnVpbHQgb24gVW5peHdhcmUgNy4xLjEsIGEgcHVyZSAzMi1iaXQgYnVpbGQsIHNl ZW1zIGZpbmUuICBSZWJ1aWx0IG9uIFJlZAotSGF0IEFTIDQuMiBqdXN0IHRvIG1ha2Ugc3VyZSBJ IGRpZG4ndCBicmVhayBhbnl0aGluZywgaXQncyBPSy4gIE5vIHRlc3RpbmcKLW9uIEhQLVVYLCBl dGMsIGJlY2F1c2UgSFAgdGVzdGRyaXZlIGZpbGUgc3lzdGVtIGlzIGZ1bGwsIGNhbid0IHVwbG9h ZAotYW55dGhpbmcuICAyOSBEZWMgMjAwNS4KLQotQ29tbWVudGVkIG91dCB0aGUgU0hPVyBGRUFU VVJFUyBzZWN0aW9uIHRoYXQgZGlzcGxheXMgY29uc3RhbnRzIGxpa2UKLUlOVF9NQVgsIENIQVJf TUFYLCBldGMsIGJlY2F1c2UgcHJpbnRpbmcgZWFjaCB2YWx1ZSBpbiB0aGUgYXBwcm9wcmlhdGUK LWZvcm1hdCBpcyB0b28gdHJpY2t5LCBhbmQgd2UgZG9uJ3QgbmVlZCB0aGVtIGFueXdheS4gIGNr dXVzNS5jLCAyOSBEZWMgMjAwNS4KLQotVXBkYXRlZCBja3ZmaW8uYyB0byB1c2UgQ0tfT0ZGX1Qg Zm9yIHRoZSByZWxldmFudCB2YXJpYWJsZXMuICBCdWlsdCBhbmQKLXRlc3RlZCBvbiBWTVMvQWxw aGEgNy4yOiBmaWxlIHRyYW5zZmVyIGluIHJlbW90ZSBtb2RlOyBtYWtpbmcgYSBUZWxuZXQKLWNv bm5lY3Rpb24gYW5kIHRoZW4gbG9jYWwtbW9kZSBmaWxlIHRyYW5zZmVyOyBTLUV4cHJlc3Npb25z LCBhbGwgT0suICBBbHNvCi1idWlsdCBhIG5vLW5ldCB2ZXJzaW9uIE9LLiAgMjkgRGVjIDIwMDUu Ci0KLUJ1aWx0IGFuZCB0ZXN0ZWQgb24gUmVkIEhhdCBBUzQgQU1EIFg4Nl82NCwgdXNlZCBpdCB0 byB1cGxvYWQgbmV3IHNvdXJjZXMgdG8KLUZyZWVCU0QgNC4xMS4gIEJ1aWx0IG9uIEZyZWVCU0Qg NC4xMS9pMzg2LiAgSGVyZSdzIGFub3RoZXIgb25lIHdoZXJlIG9mZl90Ci1pcyA2NCBiaXRzLCBl dmVuIHRob3VnaCBsb25nIGlzIDMyIGJpdHMuICBCdXQgaXQgc2VlbXMgdG8gd29yayBvaywgbm90 IHN1cmUKLXdoeSwgd2hlbiBDS19PRkZfVCBpcyAzMiBiaXRzLiAgVGhlcmUgaXMgbm8gX0xBUkdF RklMRV9TT1VSQ0Ugc3R1ZmYgaW4gdGhlCi1oZWFkZXIgZmlsZXMuICAyOSBEZWMgMjAwNS4KLQot QnVpbHQgb24gTWFjIE9TIFggMTAuMy45IHVzaW5nIHRoZSBuZXcgbWFjb3N4MTAuNCB0YXJnZXQg dG8gcGljayB1cCBMRlMuCi1Xb3JrcyBmaW5lLgotCi1CdWlsdCBvbiBSZWQgSGF0IExpbnV4IDRX UyBvbiBJQTY0ICg2NC1iaXQpLiAgTm93IHRoaXMgb25lIGlzIG9kZCwgc3RhdCgpCi1mYWlscyBv biBiaWcgZmlsZXMuICBJdCBoYXBwZW5zIGFsc28gaWYgSSB1c2UgdGhlICJsaW51eG5vbGZzIiB0 YXJnZXQsIHdoaWNoCi1kb2VzIG5vdCBkZWZpbmUgX1VTRV9MQVJHRUZJTEUgb3IgX0ZJTEVfT0ZG U0VUX0JJVFM9NjQuICBESVJFQ1RPUlkgQklHRklMRQotc2hvd3MgdGhlIHNpemUgYXMgLTEsIGJ1 dCBpZiAibG9nIGRlYnVnIiwgaXQgc2F5cyAibm8gZmlsZXMgbWF0Y2giLCBpLmUuCi1kaWZmZXJl bnQgYmVoYXZpb3IsIG9ic2VydmVyIGVmZmVjdC4gIEkgaGF0ZSB3aGVuIHRoYXQgaGFwcGVucy4K LQotTGV0J3Mgc2VlIGlmIHRoYXQncyBhbiBhbm9tYWx5Li4uICBCdWlsdCBvbiBUcnU2NCBVbml4 IDQuMEYgKDY0LWJpdCBBbHBoYSkuCi1JdCBzZWVzIGxvbmcgZmlsZXMganVzdCBmaW5lLiAgUmVi dWlsdCBhbmQgY2hlY2tlZCBvbiB4ODZfNjQgYWdhaW4uLi4gZmluZS4KLU9LLCBsZXQncyBub3Qg d29ycnkgYWJvdXQgSUE2NCB5ZXQuCi0KLUFub3RoZXIgc21hbGwgZml4IHRvIHRoZSBIUC1VWCA5 LjAgdGFyZ2V0IGZyb20gUGV0ZXJFLiAgbWFrZWZpbGUsIDI5IERlYyAyMDA1LgotCi0tLS1EZXYu MTAtLS0KLQotQ29kZSBhZGp1c3RtZW50cyBmcm9tIEplZmYsIG1haW5seSB0byB0aGUgU1NMIGFu ZCBUTFMgUmF3IG1vZGUgY29kZSBmcm9tCi1zZXZlcmFsIHdlZWtzIGFnbywgcGx1cyBjaGFuZ2lu ZyBzb21lIGRhdGEgdHlwZXMgaW4gdGhlIHNlY3VyaXR5IGNvZGUgdG8KLUNLX09GRl9ULCBwbHVz IGEgZGlmZmVyZW50IGRhdGEgdHlwZSBmb3IgQ0tfT0ZGX1QgZm9yIEs5NSBiZWNhdXNlIFdpbmRv d3MKLXNpemVfVCBpc24ndCBzaWduZWQuICBUaGlzIHByZXN1bWFibHkgd2lsbCBhbGxvdyBsYXJn ZS1udW1iZXIgYXJpdGhtZXRpYyBidXQKLWl0IHdpbGwgbm90IGdpdmUgbGFyZ2UgZmlsZSBhY2Nl c3MgYmVjYXVzZSB0aGF0IHdpbGwgcmVxdWlyZSByZXBsYWNpbmcgYWxsIEMKLWxpYnJhcnkgZmls ZSBpL28gY2FsbHMgKGVzcC4gaW4gY2tvZmlvLmMpIHdpdGggbmF0aXZlIFdpbmRvd3MgQVBJcy4g IEJ1aWxkCi1vbiBTb2xhcmlzIDkgd2l0aCBhbmQgd2l0aG91dCBTU0wgYW5kIG9uIExpbnV4IFJI IEFTNC4yIHdpdGggYW5kIHdpdGhvdXQKLVNTTC4gIGNrX2NycC5jLCBja19zc2wuYywgY2tfc3Ns LmgsIGNrY2RlYi5oLCBja2NmdHAuYywgY2tjbWFpLmMsIGNrY25ldC5jLAotY2tjbmV0LmgsIGNr Y3RlbC5jLCBja3VhdDIuaCwgY2t1dXM0LmMsIGNrdXVzNy5jLCBja3V1c3IuYywgMzAgRGVjIDIw MDUuCi0KLUl0IHdhcyByZXBvcnRlZCB0aGF0IFdSSVRFIFNFU1NJT04gYWx3YXlzIHJldHVybmVk IGEgZmFpbHVyZSBzdGF0dXMsIGV2ZW4KLXdoZW4gaXQgc3VjY2VlZGVkLiAgVGhlIHByb2JsZW0g d2FzIHRoYXQgVW5peCB2ZXJzaW9ucyBvZiB6c291dCgpIGFuZAotenNvdXRsKCksIGZvciB0aGUg c2Vzc2lvbiBsb2cgb25seSwgd2VyZSB1c2luZyB3cml0ZSgpIGFuZCByZXR1cm5pbmcKLXdyaXRl KCkncyByZXR1cm4gY29kZSwgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gd2hhdCB6c291dCgpIGFu ZCB6c291dGwoKSBhcmUKLWRvY3VtZW50ZWQgdG8gcmV0dXJuLiAgQWxzbyBwbHVnZ2VkIGEgY291 cGxlIHBvdGVudGlhbCBob2xlcyBpbiB6c291dHgoKQotdGhhdCBJIG5vdGljZWQgd2hpbGUgSSB3 YXMgaW4gdGhlIG5laWdoYm9yaG9vZC4gIGNrdWZpby5jLCAzMCBEZWMgMjAwNS4KLQotQWRkZWQg RlNFRUsgL0ZJTkQ6cGF0dGVybi4gIFRoaXMgZm9ybSBvZiBGU0VFSyBhY2NlcHRzIGFsbCB0aGUg b3RoZXIKLXN3aXRjaGVzIGFuZCBhcmd1bWVudHMgYW5kIHBlcmZvcm1zIHRoZSBkZXNpcmVkIHNl ZWsuICBUaGVuLCBpZiB0aGUgc2VlayB3YXMKLXN1Y2Nlc3NmdWwsIGl0IHN0YXJ0cyBmcm9tIHRo YXQgcG9pbnQgYW5kIHJlYWRzIHRocm91Z2ggdGhlIGZpbGUsIGxpbmUgYnkKLWxpbmUsIHNlYXJj aGluZyBmb3IgdGhlIGZpcnN0IGxpbmUgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gc3RyaW5nIG9y IG1hdGNoZXMKLXRoZSBnaXZlbiAodW5hbmNob3JlZCkgcGF0dGVybiBhbmQsIGlmIGZvdW5kLCBz ZXRzIHRoZSBmaWxlIHBvaW50ZXIgdG8gdGhlCi1iZWdpbm5pbmcgb2YgdGhhdCBsaW5lLiAgVXNl ZnVsLCBlLmcuLCBmb3IgdmVyeSBsb25nIHRpbWVzdGFtcGVkIGxvZ3MsIHdoZXJlCi15b3Ugd2Fu dCB0byBzdGFydCBwcm9jZXNzaW5nIGF0IGEgY2VydGFpbiBkYXRlIG9yIHRpbWU7IHNlYXJjaGlu ZyBmb3IgYQotcGFydGljdWxhciBzdHJpbmcgaXMgbXVjaCBmYXN0ZXIgdGhhbiBkb2luZyBkYXRl IGNvbXBhcmlzb25zIG9uIGVhY2ggbGluZS4KLWNrdXVzWzI3XS5jLCAzMCBEZWMgMjAwNS4KLQot SXQgd2FzIGFubm95aW5nIG1lIHRoYXQgRklMRSBTVEFUVVMgKEZTVEFUVVMpIHJlcXVpcmVkIGEg Y2hhbm5lbCBudW1iZXIgdG8KLWJlIGdpdmVuIGV2ZW4gaWYgb25seSBvbmUgZmlsZSB3YXMgb3Bl biwgc28gSSBzdXBwbGllZCB0aGUgY29ycmVjdCBkZWZhdWx0Ci1pbiB0aGF0IGNhc2UuICBja3V1 czcuYywgMzAgRGVjIDIwMDUuCi0KLUlOUFVUIC9OT1dSQVAsIGFkZGVkIHJlY2VudGx5LCBpcyB1 c2VkIGZvciBlZmZpY2llbnRseSBjb3B5aW5nIHRoZSBJTlBVVAotc3RyZWFtIGludGFjdCwgYnV0 IGl0J3Mgbm90IGdvb2QgZm9yIG1hdGNoaW5nIGJlY2F1c2UgaWYgdGhlIElOUFVUIHRhcmdldCBp cwotYnJva2VuIGJldHdlZW4gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgYnVmZmVyIGFuZCB0aGUg YmVnaW5uaW5nIG9mIHRoZSBuZXh0Ci1vbmUsIHRoZSBjb250ZXh0IGlzIGxvc3QgYW5kIHRoZSBt YXRjaCBkb2VzIG5vdCBvY2N1ci4gIEkgdGhvdWdodCBvZiBzZXZlcmFsCi13YXlzIGFyb3VuZCB0 aGlzLCBidXQgdGhleSBhbGwgaW52b2x2ZSBzYXZpbmcgYSBodWdlIGFtb3VudCBvZiBjb250ZXh0 IC0tCi1vbGQgaW5wdXQgYnVmZmVycywgdGhlIGFycmF5cyBvZiB0YXJnZXQgc3RyaW5ncyBhbmQg Y29ycmVzcG9uZGluZyBtYXRjaAotcG9zaXRpb25zLCBldGMuICBUaGUgYWx0ZXJuYXRpdmUgaXMg ZmFpcmx5IHNpbXBsZSBidXQgaXQncyBub3QgdHJhbnNwYXJlbnQKLXRvIHRoZSB1c2VyLiAgSGVy ZSdzIHdoYXQgSSBkaWQgaW4gYSBQT1Agc2NyaXB0OgotCi0gICAgLmVvbSA6PSAiXDEzXDEwLlwx M1wxMCIKLSAgICBzZXQgZmxhZyBvZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZMQUcg T04gPSBzdWNjZXNzCi0gICAgd2hpbGUgKCBvcGVuIGNvbm5lY3Rpb24gJiYgbm90IGZsYWcgKSB7 Ci0gICAgICAgIC5vbGRpbnB1dCA6PSBcZnJpZ2h0KFx2KGlucHV0KSw4KSAgIyBTYXZlIHRhaWwg b2YgcHJldmlvdXMgSU5QVVQgYnVmZmVyCi0gICAgICAgIGlucHV0IC9jbGVhciAvbm93cmFwIDQg XG0oZW9tKSAgICAgIyBHZXQgbmV3IElOUFVUIGJ1ZmZlcgotICAgICAgICBpZiBzdWNjZXNzIHsg ICAgICAgICAgICAgICAgICAgICAgICMgSU5QVVQgbWF0Y2hlZCAtIGdvb2QKLSAgICAgICAgICAg IC5zIDo9IHtcZnJlcGxhY2UoXHYoaW5wdXQpLFxtKGVvbSksXDEzXDEwKX0KLSAgICAgICAgICAg IHNldCBmbGFnIG9uCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBObyBtYXRjaAotICAgICAgICAgICAgLnMgOj0gXHYoaW5wdXQpICAgICAgICAgICAgICAgICMg Q2hlY2sgaWYgdGFyZ2V0IGNyb3NzZWQgdGhlIGJvcmRlcgotICAgICAgICAgICAgLm9sZGlucHV0 IDo9IFxtKG9sZGlucHV0KVxmc3Vic3RyKFx2KGlucHV0KSwxLDgpCi0gICAgICAgICAgICBpZiBc ZmluZGV4KFxtKGVvbSksXG0ob2xkaW5wdXQpKSBzZXQgZmxhZyBvbgotICAgICAgICB9Ci0gICAg ICAgIC4uLgotICAgIH0KLQotSSB0aGluayB0aGlzIHdpbGwgYmUgZWFzaWVyIHRvIGV4cGxhaW4g dGhhbiBhbnkgZGFuZ2Vyb3VzIGFuZCBncm90ZXNxdWUKLW1hZ2ljIEkgbWlnaHQgcHV0IGludG8g ZG9pbnB1dCgpIGl0c2VsZi4gIEZvciBub3csIGFkZGVkIGEgZmV3IHdvcmRzIGFib3V0Ci10aGlz IHRvIEhFTFAgSU5QVVQuICBja3V1czIuYywgMzAgRGVjIDIwMDUuCi0KLUJhY2sgdG8gdGhlIHBh dHRlcm4gbWF0Y2hlci4gIE5vdGljZWQgdGhhdCAiSUYgTUFUQ0ggaW5kZXguaHRtbCBbYS1oai16 XSoiCi1zdWNjZWVkZWQgd2hlbiBpdCBzaG91bGQgaGF2ZSBmYWlsZWQuICBJbiBja21hdGNoKCks IHRoZSBjbGlzdCBzZWN0aW9uCi1uZWVkZWQgb25lIG1vcmUgY2xhdXNlOiBpdCBjYW4ndCBmbG9h dCB0aGUgcGF0dGVybiBpZiBhbiBhc3RlcmlzayBkb2VzIG5vdAotb2NjdXIgaW4gdGhlIHBhdHRl cm4gYmVmb3JlIHRoZSBjbGlzdC4gIFRoaXMgY2hhbmdlIGZpeGVzIHRoZSBwcm9ibGVtCi13aXRo b3V0IGJyZWFraW5nIGFueSBvdGhlciBjYXNlcyB0aGF0IHdlcmVuJ3QgYWxyZWFkeSBicm9rZW4s IG1vc3Qgb2Ygd2hpY2gKLWludm9sdmUgc2xpc3RzLCBpLmUuIHtzdHJpbmcsc3RyaW5nLHN0cmlu ZywuLi59LiAgY2tjbGliLmMsIDMwIERlYyAyMDA1LgotCi1UcmllZCBGU0VFSyAvRklORDogb24g YSBsYXJnaXNoIGZpbGUgKG92ZXIgMTAwLDAwMCBsaW5lcyksIHVzaW5nIGl0IHRvIHNlZWsKLXRv IGEgbGluZSBuZWFyIHRoZSBlbmQuICBJdCB0b29rIDAuNzU2IHNlY29uZHMsIGNvbXBhcmVkIHdp dGggVW5peCBncmVwLAotd2hpY2ggZGlkIHRoZSBzYW1lIHRoaW5nIGluIDAuMTUxIHNlYy4gIFRo YXQncyBiZWNhdXNlIEMtS2VybWl0IGlzIHVzaW5nCi1ja21hdGNoKCkuICBCdXQgaWYgdGhlIHNl YXJjaCB0YXJnZXQgaXMgbm90IGEgcGF0dGVybiwgaXQgc2hvdWxkIGJlIGEgYml0Ci1mYXN0ZXIg dG8gdXNlIGNraW5kZXgoKS4gIFl1cCwgMC41NTQgc2VjLCBhIDM2JSBpbXByb3ZlbWVudC4gIENh bid0IGV4cGVjdAotdG8gY29tcGV0ZSB3aXRoIGdyZXAsIHRob3VnaDsgaXQncyBoaWdobHkgdHVu ZWQgZm9yIGl0cyBzaW5nbGUgcHVycG9zZS4KLWNrY2xpYi5bY2hdLCBja3V1czcuYywgMSBKYW4g MjAwNi4KLQotVXBkYXRlZCB2aXNpYmxlIGNvcHlyaWdodCBkYXRlcyB0byAyMDA2OiBja2NtYWku YywgY2t1dXMyLmMsIGNrdXVzNS5jLAotMSBKYW4gMjAwNi4KLQotTm90aWNlZCB0aGF0IE5ldEJT RCAyLjAuMyBoYXMgNjQtYml0IG9mZl90LCBhbmQgdGhhdCBfTEFSR0VGSUxFX1NPVVJDRSBpcwot bWVudGlvbmVkIGluIDxzdGRpby5oPi4gIFRyaWVkIGJ1aWxkaW5nIEtlcm1pdCB3aXRoIF9MQVJH RUZJTEVfU09VUkNFIGFkZGVkCi10byBDRkxBR1MsIGl0J3MgZ29vZC4gIEFkZGVkIGl0IHRvIHRo ZSBuZXRic2QgdGFyZ2V0LiAgbWFrZWZpbGUsIDEgSmFuIDIwMDYuCi0KLUZpeGVkIHR5cG8sICNp ZmRlZiBDS19OT0xPTkdMT05HIGluIGNrdXVzNS5jIHNob3VsZCBoYXZlIGJlZW4gI2lmbmRlZgot Q0tfTE9OR0xPTkcgKHdoaWNoLCBpdCB0dXJucyBvdXQsIHdlIGRvbid0IHVzZSBhbnl3YXkpLiAg MiBKYW4gMjAwNS4KLQotT2JzZXJ2ZWQgdGhhdCBGcmVlQlNEIDQueCBoYXMgYSA2NC1iaXQgb2Zm X3QsIGJ1dCBkb2VzIG5vdCB1c2UgdGhlCi1fTEFSR0VGSUxFX1NPVVJDRSBjb252ZW50aW9uLiAg UmVhc29uaW5nIHRoYXQgYWxsIHZlcnNpb25zIG9mIEZyZWVCU0QgaGF2ZQotb2ZmX3QgKEkgd2Fz IGFibGUgdG8gY2hlY2sgYmFjayB0byBGcmVlQlNEIDMuMyksIEkgc2ltcGx5ICNkZWZpbmUgQ0tf T0ZGX1QKLXRvIGJlIG9mZl90IGluIGNrY2RlYi5oIHdpdGhpbiAjaWZkZWYgX19GcmVlQlNEX18g Li4gI2VuZGlmLiAgQW5vdGhlciBvbmUKLWRvd24uICBUaGlzIGNhbiBiZSBkb25lIGZvciBhbnkg cGxhdGZvcm0gdGhhdCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgb2ZmX3QuCi1UdXJucyBvdXQgRnJl ZUJTRCAzLjMgaGFzIDY0LWJpdCBvZmZfdCB0b28uICAyIEphbiAyMDA1LgotCi1PcGVuQlNELCBz YW1lIGFzIEZyZWVCU0QuICBBbHNvLCBhZGRlZCBPUy12ZXJzaW9uLWdldHRpbmcgdGhpbmcgdG8g bWFrZWZpbGUKLXRhcmdldCBmb3IgdGhlIHByb2dyYW0gaGVyYWxkLCBhcyBpbiB0aGUgb3RoZXIg QlNEcy4gIEJ1aWx0IG9uIE9wZW5CU0QgMi41Ci1mcm9tIDE5OTgsIGl0IGhhcyA2NC1iaXQgb2Zm X3QgdG9vLiAgY2tjZGViLmgsIG1ha2VmaWxlLCAyIEphbiAyMDA1LgotCi1EdW1waW5nIHRoZSBj b21tYW5kIHN0YWNrIGV2ZXJ5IHRpbWUgdGhlcmUncyBhbiBlcnJvciBpcyByZWFsbHkgdG9vIG11 Y2guCi1JIGFkZGVkIFNFVCBDT01NQU5EIEVSUk9SLURJU1BMQVkgezAsMSwyLDN9IHRvIHNldCB0 aGUgdmVyYm9zaXR5IGxldmVsIG9mCi1lcnJvciBtZXNzYWdlcy4gIE9ubHkgbGV2ZWwgMyBkdW1w cyB0aGUgc3RhY2suICBja3V1c1syMzVdLmMsIDIgSmFuIDIwMDUuCi0KLUJ1aWx0IG9uIEhQLVVY IDExLjExIHdpdGggX0xBUkdFRklMRV9TT1VSQ0UgYW5kIF9GSUxFX09GRlNFVF9CSVRTPTY0LiAg VGhlCi1yZXN1bHQgd29ya3MgZmluZSBhcyBmYXIgYXMgSSBjYW4gdGVsbC4gIEl0IHNlZXMgYmln IGZpbGVzLCBpdCBjYW4gb3BlbgotdGhlbSwgc2VlayB0byBwb3NpdGlvbnMgcGFzdCB0aGUgMl4z MSBib3VuZGFyeS4gIEl0IGNhbiBzZW5kIGxhcmdlIGZpbGVzLgotSXQgY2FuIGRvIGxhcmdlLW51 bWJlciBhcml0aG1ldGljICheIDIgNjIpLiAgVGhlIG9ubHkgcHJvYmxlbSBpcyB0aGF0IGR1cmlu ZwotY29tcGlsYXRpb24sIGV2ZXJ5IHNpbmdsZSBtb2R1bGVzIHdhcm5zOgotCi0gIGNjOiAiL3Vz ci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIsIGxpbmUgNTA0OiB3YXJuaW5nIDU2MjogUmVkZWNsYXJh dGlvbiBvZgotICAic2VuZGZpbGUiIHdpdGggYSBkaWZmZXJlbnQgc3RvcmFnZSBjbGFzcyBzcGVj aWZpZXI6ICJzZW5kZmlsZSIgd2lsbCBoYXZlCi0gIGludGVybmFsIGxpbmthZ2UuCi0gIGNjOiAi L3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIsIGxpbmUgNTA1OiB3YXJuaW5nIDU2MjogUmVkZWNs YXJhdGlvbiBvZgotICAic2VuZHBhdGgiIHdpdGggYSBkaWZmZXJlbnQgc3RvcmFnZSBjbGFzcyBz cGVjaWZpZXI6ICJzZW5kcGF0aCIgd2lsbCBoYXZlCi0gIGludGVybmFsIGxpbmthZ2UuCi0KLVRo ZXNlIHdhcm5pbmdzIHNob3VsZCBiZSBwZXJmZWN0bHkgaGFybWxlc3Mgc2luY2UgdGhleSBhcmUg bm90IGNvbWluZyBmcm9tCi1DLUtlcm1pdCBjb2RlLCBub3IgZG9lcyBDLUtlcm1pdCB1c2UgZWl0 aGVyIG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMuICBUaGVzZQotd2FybmluZ3MgZG9uJ3QgY29tZSBv dXQgaW4gSFAtVVggMTFpIHYyLCBidXQgb24gdGhhdCBvbmUgd2UgZ2V0IHRvbnMgYW5kIHRvbnMK LW9mIHBpY2t5IGNvbXBpbGVyIHdhcm5pbmdzICh2YXJpYWJsZXMgc2V0IGJ1dCBub3QgdXNlZCwg ZGVmaW5lZCBidXQgbm90Ci1yZWZlcmVuY2VkLCBldGMpLiAgQSBjb3VwbGUsIGhvd2V2ZXIsIHR1 cm5lZCBvdXQgdG8gYmUgdmFsaWQ7IG9uZSBjYXNlIG9mCi0iZXhwcmVzc2lvbiBoYXMgbm8gZWZm ZWN0IiwgYW5kIHR3byBvZiAic3RyaW5nIGZvcm1hdCBpbmNvbXBhdGlibGUgd2l0aAotZGF0YSB0 eXBlIiAoSSBtaXNzZWQgYSBjb3VwbGUgZmlsZS1zaXplIHByaW50ZnMpLgotCi1UaGVyZSB3ZXJl IGFsc28gbnVtZXJvdXMgd2FybmluZ3MgYWJvdXQgc2lnbmVkbmVzcyBtaXNtYXRjaCBvciBzaWdu Ci1jb252ZXJzaW9uIG9mIGNvbnN0YW50cyBsaWtlIElBQyAoMHhmZikuICBEb2VzIHRoZSBIUC1V WCBPcHRpbWl6aW5nIENvbXBpbGVyCi1oYXZlIGEgY29tcGlsZXIgZmxhZyB0byBtYWtlIGFsbCBj aGFycyB1bnNpZ25lZD8gIFllcywgK3VjLCBidXQgdGhlIG1hbiBwYWdlCi1zYXlzICJCZSBjYXJl ZnVsIHdoZW4gdXNpbmcgdGhpcyBvcHRpb24uICBZb3VyIGFwcGxpY2F0aW9uIG1heSBoYXZlIHBy b2JsZW1zCi1pbnRlcmZhY2luZyB3aXRoIEhQLVVYIHN5c3RlbSBsaWJyYXJpZXMgYW5kIG90aGVy IGxpYnJhcmllcyB0aGF0IGRvIG5vdCB1c2UKLXRoaXMgb3B0aW9uIi4gIFNpZ2gsIGJldHRlciBu b3QgdXNlIGl0LgotCi1BZnRlciByZXZpZXdpbmcgIkhQLVVYIExhcmdlIEZpbGVzIFdoaXRlIFBh cGVyIFZlcnNpb24gMS40IiBhbmQgSFAncwotIldyaXRpbmcgUG9ydGFibGUgQ29kZSIgZG9jdW1l bnRzLCBJIGFkZGVkIC1EX0xBUkdFRklMRV9TT1VSQ0UKLS1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQg dG8gdGhlIGhwdXgxMDAwIHRhcmdldCwgd2hpY2ggaXMgdGhlIGJhc2lzIGZvciBhbGwKLUhQLVVY IDEwLjAwIGFuZCBsYXRlciBidWlsZHMuICBMYXJnZSBmaWxlcyBhcmUgYXZhaWxhYmxlIGluIEhQ LVVYIDEwLjIwIGFuZAotbGF0ZXIuICAxMC4wMCBhbmQgMTAuMTAgd2VyZSBub3QgcmVhbCByZWxl YXNlcywgYW5kIGFueXdheSB0aGVzZSBmbGFncwotc2hvdWxkIGJlIGhhcm1sZXNzIHRoZXJlIHVu bGVzcyB0aGUgbGFyZ2UtZmlsZSBpbXBsZW1lbnRhdGlvbiB3YXMgb25seQotcGFydGx5IGRvbmUu ICBCdWlsdCBPSyBvbiBib3RoIFBBLVJJU0MgYW5kIElBNjQsIG9wdGltaXplZCBhbmQgcGxhaW4u Ci1tYWtlZmlsZSwgNCBKYW4gMjAwNi4KLQotQnVpbHQgb24gRnJlZUJTRCA2LjAgb24gSUE2NC4g IEFsbCBPSyBleGNlcHQgSSBnb3QgYSB3YXJuaW5nIGFib3V0IHRoZQotYXJndW1lbnQgcGFzc2Vk IHRvIHRpbWUoKSBpbiBsb2d3dG1wKCkgaW4gY2t1ZmlvLmMuICBUaGlzIHNlY3Rpb24gaGFkCi1h bHJlYWR5IGJlZW4gcGFydGlhbGx5IGZpeGVkOyB0aHVzIEkgcHV0IHRoZSBpbXByb3ZlZCB2ZXJz aW9uIGludG8KLSNpZmRlZiBDS182NEJJVCwgd2hpY2ggaXMgb3VyIG5ld2x5IGF2YWlsYWJsZSBz eW1ib2wgdGhhdCBzaG91bGQgYmUKLWF1dG9tYXRpY2FsbHkgZGVmaW5lZCBmb3IgYW55IHRydWUg NjQtYml0IGJ1aWxkLiAgY2t1ZmlvLmMsIDQgSmFuIDIwMDYuCi0KLUZpbmFsbHkgZ290IGFyb3Vu ZCB0byB0ZXN0aW5nIEplZmYncyBjaGFuZ2VzIHRvIFNTTC9UTFMgUkFXIG1vZGUgZnJvbQotRGVj ZW1iZXIgMzB0aCBhZ2FpbnN0IG91ciBQT1Agc2VydmVyLiAgSXQgZGlkbid0IHdvcmssIGNvdWxk bid0IGxvZyBpbi4KLVRyaWVkIGJhY2tpbmcgb2ZmIHRoZSBja2N0ZWwuYyBjaGFuZ2VzIGZpcnN0 OyB0aGF0IGFsbG93ZWQgbG9naW4gYW5kCi1jb21tdW5pY2F0aW9uLCBidXQgaXQgZGlkIG5vdCBz dXBwcmVzcyBhY3RpdmF0aW9uIG9mIFRlbG5ldCBwcm90b2NvbAotd2hlbmV2ZXIgYSAweGZmIGJ5 dGUgYXJyaXZlZC4gIEJhY2tlZCBvZmYgdGhlIHJlc3Qgb2YgdGhlIGNoYW5nZXMgYW5kIG5vdwot YWxsIGlzIE9LIGFnYWluLiAgY2tjdGVsLmMsIGNrY25ldC5jLCBja3V1czcuYywgOSBKYW4gMjAw Ni4KLQotQnVpbHQgb24gTmV0QlNEIDEuNC4xICgxOTk5KSwgZm91bmQgdGhhdCBpdCBkaWQgbm90 IGxpa2UgdGhlIGxhcmdlIGZpbGUKLWFzc3VtcHRpb24gLS0gZnNlZWtvKCkgYW5kIGZ0ZWxsbygp IGRvIG5vdCBleGlzdDsgYWRkZWQgYSBjbGF1c2UgdG8gdGhlCi1uZXRic2QgdGFyZ2V0IHRvIGNo ZWNrIGZvciBmc2Vla28gYW5kIG5vdCBkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UgaWYgbm90Ci1m b3VuZC4gIE9kZGx5IGVub3VnaCwgb2ZmX3QgaXMgNjQgYml0cyBhbnl3YXksIGJ1dCBpdCBkb2Vz bid0IGxvb2sgbGlrZSB0aGUKLUFQSXMgYXJlIGhhbGYtZG9uZS4gIEZvciBleGFtcGxlLCBzdGF0 KCkgdXNlcyBvZmZfdCAoNjQgYml0cykgZm9yIHRoZSBmaWxlCi1sZW5ndGgsIGJ1dCBmc2Vlaygp IHVzZXMgbG9uZyAoMzIgYml0cykgYW5kIHRoZXJlIGlzIG5vIDY0LWJpdCBhbmFsb2cuCi1Bbnl3 YXkgdGhlIG5ldyBuZXRic2QgdGFyZ2V0IHdvcmtzIG9uIGJvdGggMS40LjEgYW5kIDEuNS4yIChu byBsYXJnZSBmaWxlcykKLWFuZCBvbiAyLjAuMyAobGFyZ2UgZmlsZXMpLiAgbWFrZWZpbGUsIDkg SmFuIDIwMDYuCi0KLUJ1aWx0IG9uIFFOWC0zMiA0LjI1LCB3aGljaCBoYXMgbm8gbGFyZ2UgZmls ZSBzdXBwb3J0LiAgR290IGEgZmV3IHN0cmFuZ2UKLWNvbXBpbGVyIChXYXRDb20pIHdhcm5pbmdz LCBidXQgaXQgYnVpbHQgYW5kIHJ1bnMgT0suICBOb3RpY2VkIHRoYXQgZmlsZQotdHJhbnNmZXJz IGludG8gUU5YIG92ZXIgYSBUZWxuZXQgY29ubmVjdGlvbiBjYW4ndCB1c2Ugc3RyZWFtaW5nLCBi dXQgdGhhdCdzCi1ub3RoaW5nIG5ldyB0byB0aGlzIHZlcnNpb247IHNhbWUgdGhpbmcgaGFwcGVu cyB3aXRoIEMtS2VybWl0IDcuMC4gIDkgSmFuIDIwMDYuCi0KLUJ1aWx0IG9uIElSSVggNi41LiAg SSBkaWRuJ3QgYm90aGVyIHdpdGggbGFyZ2UgZmlsZXMgdGhlcmUgYmVjYXVzZSBpdCBkb2VzCi1u b3Qgc3VwcG9ydCB0aGUgX0xBUkdFRklMRV9TT1VSQ0UgaW50ZXJmYWNlOyB5b3UgaGF2ZSB0byBj aGFuZ2UgYWxsIHRoZSBBUElzCi1hdCB0aGUgc291cmNlIGxldmVsIGZyb20gYmxhaCgpIHRvIGJs YWg2NCgpLiAgU2VlbXMgdG8gd29yayBmaW5lIGFzIGEgMzItYml0Ci1hcHAgZXZlbiB0aG91Z2gg aXRzIG9mZl90IGlzIDY0IGJpdHMuICBUcmllZCBhIHB1cmUgNjQtYml0IElSSVggNi41IGJ1aWxk Ci1idXQgaXQgZGllcyBpbiBja2NuZXQuYyB3aGVuIGl0IGhpdHMgU09DS09QVF9UIGFuZCBHU09D S05BTUVfVCB3aXRoICJUaGUKLWlkZW50aWZpZXIgJ3NvY2tsZW5fdCcgaXMgdW5kZWZpbmVkIi4K LQotTG9va3MgbGlrZSBJIG5vIGxvbmdlciBoYXZlIGFjY2VzcyB0byBTQ08gT1NSNS4KLQotTWFk ZSBhIHB1cmUgMzItYml0IGJ1aWxkIG9uIFNDTyBVbml4V2FyZSA3LjEuNCwgYWxsIE9LLiAgRm91 bmQgdGhhdCB0aGlzCi12ZXJzaW9uIGFsc28gc3VwcG9ydHMgTEZTLCBhZGRlZCBpdCB0byB0aGUg dXc3IHRhcmdldC4gIG1ha2VmaWxlLCA5IEphbiAyMDA2LgotCi0tLS0gRGV2LjExIC0tLQotCi1F dmlkZW50bHkgdGhlIEhQLVVYIGJ1bmRsZWQgKG5vbi1BTlNJIG5vbi1vcHRpbWl6aW5nKSBjb21w aWxlciBkb2Vzbid0IGxpa2UKLWxvbmcgaW50ZWdlcnMgaW4gc3dpdGNoIGV4cHJlc3Npb25zLiAg Q2hhbmdlZCB0aHJlZSBleGFtcGxlcyBvZiB0aGVzZSBpbiB0aGUKLVMtZXhwcmVzc2lvbiBjb2Rl LiAgY2t1dXMzLmMsIDEwIEphbiAyMDA2LgotCi1BIHNlY3Rpb24gb2YgdHN0YXRzKCkgd2hlcmUg R0ZUSU1FUiBpc24ndCBkZWZpbmVkIChlLmcuIG9uIE1vdG9yb2xhCi1zdjY4cjN2Nikgd2FzIGdh cmJsZWQuICBGaXhlZCBpbiBja2NmbjIuYywgMTAgSmFuIDIwMDYuCi0KLUEgZml4IGZvciBzZXR0 aW5nIDkyMTYwMCBicHMgb24gTGludXggZnJvbSBQYXVsIEZ1bGdodW0sIE1pY3JvZ2F0ZSBTeXN0 ZW1zIEx0ZC4KLXR0Z3NwZCgpOiBja3V0aW8uYywgMTEgSmFuIDIwMDYuCi0KLU5vdGljZWQgdGhh dCB3aGVuIEkgY2hhbmdlZCB0aGUgY29tcGFjdCBzdWJzdHJpbmcgbm90YXRpb24gY29kZSBiYWNr IG9uCi1BdWd1c3QgOXRoLCBJIGJyb2tlIHRoZSBhYmlsaXR5IHRvIHVzZSBhcml0aG1ldGljIGV4 cHJlc3Npb25zIHdpdGhpbiB0aGUKLWJyYWNrZXRzLCB3aGljaCBleHBsYWlucyBzb21lIHJhdGhl ciBvZGQgYmVoYXZpb3IgSSBzYXcgd2l0aCBzb21lIG9mIG15Ci1zY3JpcHRzLiAgTG9va2luZyBt b3JlIGRlZXBseSBpbnRvIHRoaXMsIEkgYWxzbyBzZWUgdGhhdCBhbGwgdGhlIHBhcnNlcnMgSQot aGF2ZSBiZWVuIHVzaW5nIHVwIHRvIG5vdyBmb3IgdGhpcywgYXMgd2VsbCBhcyBmb3IgYXJyYXkg Ym91bmRzIHBhaXJzLCBoYXZlCi1iZWVuIGluYWRlcXVhdGUgYmVjYXVzZSB0aGV5IG5ldmVyIGFs bG93ZWQgZm9yIG5lc3RlZCBjb25zdHJ1Y3Rpb25zLCBzdWNoIGFzCi1hIG1lbWJlciBvZiBhIGJv dW5kcyBwYWlyIHRoYXQgaXRzZWxmIHdhcyBhbiBhcnJheSBlbGVtZW50LCBwb3NzaWJseSB3aXRo Ci1hbm90aGVyIGFycmF5IGVsZW1lbnQgYXMgYSBzdWJzY3JpcHQuICBJIHdyb3RlIGEgbmV3IHJv dXRpbmUgZm9yIHRoaXMsCi1jYWxsZWQgYm91bmRzcGFpcigpLCB3aGljaCBpcyBsaWtlIGFycmF5 Ym91bmRzKCkgZXhjZXB0IGl0IGFjY2VwdHMgYW4gZXh0cmEKLWFyZ3VtZW50LCBhbiBhcnJheSBv ZiBjaGFyYWN0ZXJzIHRoYXQgY2FuIHNlcnZlIGFzIGJvdW5kcy1wYWlyIGRlbGltaXRlcnMsCi1h bmQgaXQgcmV0dXJucyB0aGUgcGFpciBzZXBhcmF0b3IgdGhhdCB3YXMgZW5jb3VudGVyZWQgaW4g YW5vdGhlciBuZXcKLWFyZ3VtZW50LiAgRm9yIHRoZSBhbHRlcm5hdGl2ZSBzdWJzdHJpbmcgbm90 YXRpb24gZm9yIFtzdGFydHBvcy1lbmRwb3NdIEkKLWhhZCB0byBjaGFuZ2UgdGhlIGRlbGltaXRl ciBmcm9tICctJyB0byAnXycgYmVjYXVzZSAnLScgY2FuIGJlIHVzZWQgaW4KLWFyaXRobWV0aWMg YnV0ICdfJyBpcyBub3QgYSByZWNvZ25pemVkIG9wZXJhdG9yLiAgVGhpcyBpcyBzbyBJIGNhbiBw YXJzZSwKLWUuZy4gW2E6Yl0gb3IgW2FfYl0gaW4gdGhlIHNhbWUgY29udGV4dCwgYW5kIHRoZW4g ZmluZCBvdXQgd2hpY2ggZm9ybSB3YXMKLXVzZWQsIGUuZy4gXHMobGluZVs5OjEyXSkgb3IgXHMo bGluZVs5XzEyXSk7IHRoZSBmaXJzdCBzdHJpbmcgaXMgNCBieXRlcwotbG9uZywgdGhlIHNlY29u ZCBpcyAxMi4gIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgT0sgbm93LiAgXHMobGluZVsxMF0pIGdp dmVzCi1ldmVyeXRoaW5nIHN0YXJ0aW5nIGF0IDEwLCBidXQgXHMobGluZVsxMDowXSkgZ2l2ZXMg dGhlIG51bGwgc3RyaW5nLiAgQmFkCi1zeW50YXggaW4gdGhlIGJvdW5kcyBwYWlycyByZXN1bHRz IGluIGEgbnVsbCBzdHJpbmc7IG1pc3NpbmcgcGllY2VzIG9mIHRoZQotYm91bmRzIHBhaXIgcmVz dWx0IGluIGRlZmF1bHRzIHRoYXQgc2hvdWxkIGJlIGNvbXBhdGlibGUgd2l0aCBwcmV2aW91cwot YmVoYXZpb3IuICBja3V1c1s0NV0uYywgY2t1dXNyLmgsIDEzIEphbiAyMDA1LgotCi1DaGFuZ2Vk IGFycmF5Ym91bmRzKCkgdG8gY2FsbCBib3VuZHNwYWlyKCkuICBUaGlzIHdhcyBhIHJhdGhlciBk cmFzdGljCi1jaGFuZ2UsIG5vdCBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBJIHRoaW5rIEkgZ290 IGFsbCB0aGUga2lua3Mgb3V0LgotY2t1dXM1LmMsIDEzIEphbiAyMDA1LgotCi1DaGFuZ2VzIGZy b20gUGV0ZXJFIHRvIHRoZSBtYWtlZmlsZSBmb3IgSFAtVVggNiBhbmQgNywgdG8gYWNjb21tb2Rh dGUgYmlnZ2VyCi1zeW1ib2wgdGFibGVzLCBldGMuICAxOSBKYW4gMjAwNS4KLQotRGV0ZXJtaW5l ZCB0aGF0IFNDTyBPU1I1LjAuNiAoYW5kIGVhcmxpZXIpIGRvKGVzKSBub3Qgc3VwcG9ydCBsYXJn ZSBmaWxlcy4KLURvbid0IGtub3cgYWJvdXQgNS4wLjcuICAzMCBKYW4gMjAwNS4KLQotQ3JlYXRl ZCBhIG5ldyBidWlsZCB0YXJnZXQgZm9yIFNDTyBPU1I2LjAuMC4gIEdldHMgdGhlIGV4YWN0IDYu eC54IHZlcnNpb24KLWR5bmFtaWNhbGx5LiAgU3VwcG9ydHMgbGFyZ2UgZmlsZXMgYW5kIGJpZy1u dW1iZXIgYXJpdGhtZXRpYyB2aWEgQ0tfT0ZGX1QuCi1UaGUgc29ja29wdCgpIGZhbWlseSBvZiBm dW5jdGlvbnMgY2hhbmdlZCB0aGUgZGF0YSB0eXBlcyBvZiBzb21lIG9mIHRoZWlyCi1hcmd1bWVu dHMgc2luY2UgT1NSNS4gIEl0IHdhcyBhbHJlYWR5IHBvc3NpYmxlIHRvIGRlZmluZSBTT0NLT1BU X1QgYW5kCi1HU09DS05BTUVfVCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYnV0IEkgaGFkIHRvIGFk ZCBjb2RlIHRvIGFsc28gYWxsb3cgdGhpcwotZm9yIEdQRUVSTkFNRV9UIHRvby4gIGNrY25ldC5j LCBtYWtlZmlsZSwgMzAgSmFuIDIwMDUuCi0KLUFwcGFyZW50bHksIGV2ZXIgc2luY2UgQy1LZXJt aXQgNy4wIHdhcyByZWxlYXNlZCwgaXQgaGFzIG5ldmVyIGJlZW4gcG9zc2libGUKLXRvIHVzZSBh IHZhcmlhYmxlIGZvciB0aGUgYXMtbmFtZSBpbiBhIFJFQ0VJVkUgY29tbWFuZCBpbiBLZXJtaXQg OTUuICBUaGlzCi1pcyBiZWNhdXNlIGV2YWx1YXRpb24gb2YgdGhlIGFzLW5hbWUgZmllbGQgd2Fz IGRlZmVycmVkIHVudGlsIGFmdGVyIHdlIGNvdWxkCi1jaGVjayB3aGV0aGVyIGl0IG1pZ2h0IGJl IGEgZGlyZWN0b3J5IG5hbWUgKHdoaWNoLCBpbiBXaW5kb3dzLCBjb3VsZCBzdGFydAotd2l0aCBh IGJhY2tzbGFzaCkuICAgVGhpcyBsaXR0bGUgYml0IG9mIG1hZ2ljIHdhcyBub3QgYSBnb29kIGlk ZWEsIG1hZ2ljCi1oYXJkbHkgZXZlciBpcy4gIEkgY2hhbmdlZCB0aGUgY29kZSB0byBldmFsdWF0 ZSBib3RoIGFzLW5hbWUgZmllbGRzIGluIHRoZQotbm9ybWFsIHdheS4gIElmIHRoZXkgd2FudCB0 byByZWNlaXZlIHRvIGEgZGlyZWN0b3J5IGNhbGxlZCAiXCUxIiwgdGhleSdsbAotanVzdCBoYXZl IHRvIHNwZWxsIGl0IGRpZmZlcmVudGx5LiAgVGhlIHdvcmthcm91bmQgaXMgdG8gdHVybiB0aGUg d2hvbGUKLWNvbW1hbmQgaW50byBhIG1hY3JvIGFuZCBldmFsdWF0ZSBpdCBiZWZvcmUgZXhlY3V0 aW5nIGl0LCBlLmcuOgotCi0gIGFzc2lnbiB4eCByZWNlaXZlIC9hcy1uYW1lOlwlMQotICBkbyB4 eAotCi1ja3V1czYuYywgMSBGZWIgMjAwNi4KLQotQnVpbHQgT0sgb24gRnJlZUJTRCA2LjEgb24g QU1ENjQuICBBZGp1c3RlZCBzb21lIGNvcHlyaWdodHMgYW5kIGRhdGUgc3RhbXBzLgotY2tjbWFp LmMsIG1ha2VmaWxlLCA4IEZlYiAyMDA2LgotCi0tLS0gRGV2LjEyIC0tLQotCi1GaXhlZCBhIHNp Z25lZC91bnNpZ25lZCBjaGFyIHdhcm5pbmcgaW4gdGhlIG5ldyBib3VuZHNwYWlyKCkgY2FsbGlu ZyBjb2RlCi1pbiB0aGUgY29tcGFjdCBzdWJzdHJpbmcgbm90YXRpb24gaGFuZGxlci4gIGNrdXVz NC5jLCA5IEZlYiAyMDA2LgotCi1SZW1vdmVkIGEgc3B1cmlvdXMgZXh0cmEgbGludXgrb3BlbnNz bCBsYWJlbCBmcm9tIHRoZSBtYWtlZmlsZSwgYWRkZWQKLXNvbGFyaXMxMGdfNjQgc3lub255bS4g IDkgRmViIDIwMDYuCi0KLVNhdGlzZmllZCBteXNlbGYgdGhhdCBMRlMgaXMgT0sgb24gU29sYXJp cyAxMCBpMzg2LCBhbmQgSSdtIGdvaW5nIHRvIGFzc3VtZQotaXQncyBhbHNvIE9LIG9uIFNvbGFy aXMgOS4gIE1hZGUgTEZTIHN0YW5kYXJkIGZvciBhbGwgU29sYXJpcyA5IGFuZCAxMAotYnVpbGRz IChpbmNsdWRpbmcgdGhlIHNlY3VyZSBvbmVzKSBleGNlcHQgdGhlIGV4cGxpY2l0bHkgNjQtYml0 IG9uZXMsIGFuZAotbWFkZSB0aGUgcHJvdmlzaW9uYWwgc29sYXJpc1hYbGZzIHRhcmdldHMgaW50 byBzeW5vbnltcy4gIG1ha2VmaWxlLCA5IEZlYiAyMDA2LgotCi0tLS0gRGV2LjEzIC0tLQotCi1G dXJ0aGVyIGF0dGVtcHRzIGF0IFNTTC9UTFMgbWVzc2FnZSBzdXBwcmVzc2lvbiB3aGVuIFFVSUVU IGlzIE9OLgotY2tfc3NsLmMsIDE2IEZlYiAyMDA2LgotCi1Gcm9tIEouU2NvdHQgS2FzdGVuOiAo cXVvdGUuLi4pIEkganVzdCB1cGxvYWRlZCBhIHBhdGNoIHRvIC9rZXJtaXQvaW5jb21pbmcuCi1U aGUgZmlsZSBuYW1lIGlzICJqc2stcGF0Y2gtZm9yLWNrdTIxMS5kaWZmIi4gIEkgaGF2ZSBhbHNv IGluY2x1ZGVkIHRoZQotcGF0Y2ggYXMgQVNDSUkgdGV4dCBpbiB0aGlzIGVtYWlsIGJlbG93LiAg VGhpcyBwYXRjaCBtYXkgYmUgYXBwbGllZCB0byB0aGUKLWNrdTIxMS50YXIuZ3ogc291cmNlIGNv ZGUgdmlhOgotICBjZCBja3UyMTEsIHBhdGNoIC1wMSA8Li4vanNrLXBhdGNoLWZvci1ja3UyMTEu ZGlmZgotVGhlIHBhdGNoIGFkZHMgNCBuZXcgYnVpbGQgdGFyZ2V0czoKLSAgbmV0YnNkd29jIC0g YSBzdHJpcHBlZCBubyBjdXJzZXMgdGFyZ2V0IGZvciBpa3NkIHVzZWQuCi0gIG5ldGJzZHNlICAt IHNlY3VyaXR5IGVuaGFuY2VkIHRhcmdldCB3aXRoIHNycCwgc3NsLCBhbmQgemxpYi4KLSAgaXJp eDY1Z2NjIC0gYnVpbGQgb24gU0dJIElyaXggNi41IHBsYXRmb3JtIHVzaW5nIGdjYy4KLSAgaXJp eDY1c2UgIC0gc2VjdXJpdHkgZW5oYW5jZWQgdGFyZ2V0IHdpdGggc3JwLCBzc2wsIGFuZCB6bGli LgotVGhlIHBhdGNoIGZpeGVzIG9uZSBidWlsZCB0YXJnZXQ6Ci0gIGlyaXg2NGdjYyAtIFRoZSAi LXMiIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGdjYyB1bmRlciBJcml4LgotSSB0aGFuayBh bGwgb2YgeW91IGluIHRoZSBLZXJtaXQgUHJvamVjdCBmb3Igc3VjaCBhIGZpbmUgdXRpbGl0eS4g IEkKLXJlY2VudGx5IGhhZCB0byBnZXQgYSAxNiBNQiBmaWxlIG92ZXJzZWFzIGFjcm9zcyBhIHNw b3R0eSBjb21tdW5pY2F0aW9ucwotbGluayB0byByZXBhaXIgYSBjb21wdXRlciByZW1vdGVseS4g IEtlcm1pdCB3YXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBjb3VsZCBkbwotdGhlIGpvYiwgc28gSSB3 YW50ZWQgdG8gY29udHJpYnV0ZSB0aGVzZSBwYXRjaGVzIGJhY2sgdG8gdGhlIG1haW5zdHJlYW0g dG8KLXNheSB0aGFua3MuICBUaGlzIGRpZ2l0YWxseSBzaWduZWQgZW1haWwgaXMgYSBiaW5kaW5n IGNvbnRyYWN0IHRoYXQKLW9mZmljaWFsbHkgYXNzaWducyB0aGUgcmlnaHRzIHRvIHRoZSBzb3Vy Y2UgY29kZSBwYXRjaCAoc2hvd24gYmVsb3cpIHRoYXQgSQotZGV2ZWxvcGVkIHRvIHRoZSBLZXJt aXQgUHJvamVjdCBhdCBDb2x1bWJpYSBVbml2ZXJzaXR5LiAoLi4uZW5kIHF1b3RlKQotY2tfc3Ns LmMsIG1ha2VmaWxlLCAyMyBGZWIgMjAwNi4KLQotQ2hhbmdlZCB0aGUgbmV3IE5ldEJTRCB0YXJn ZXQgbmFtZXMgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBjb252ZW50aW9ucwotdXNlZCBpbiBt b3N0IG90aGVyIHRhcmdldHM6Ci0KLSAgbmV0YnNkd29jIC0+IG5ldGJzZG5jCi0gIG5ldGJzZHNl ICAtPiBuZXRic2Qrc3NsK3NycCt6bGliCi0gIGlyaXg2NXNlICAtPiBpcml4NjUrc3NsK3NycCt6 bGliCi0KLWFuZCByZW1vdmVkIG9sZCwgbm93IHN1cGVyZmx1b3VzLCBOZXRCU0QgdGFyZ2V0cyAo b2xkLW5ldGJzZCwgbmV0YnN0MTUsCi1uZXRic3QxNiksIGxlYXZpbmcgc3lub255bSBsYWJlbHMg aW4gdGhlaXIgcGxhY2UuICBBbHNvIHVwZGF0ZWQgKGNydWRlbHkpCi10aGUgTGludXggdGFyZ2V0 IHZhcmlhdGlvbnMgKGN1cnNlcyBpbnN0ZWFkIG9mIG5vY3Vyc2VzLCBubyBjdXJzZXMgYXQgYWxs KQotdG8gYmUgKGFwcHJvcHJpYXRlbHkgbW9kaWZpZWQpIGNvcGllcyBvZiB0aGUgY3VycmVudCBs aW51eCB0YXJnZXQuICBJdCB3b3VsZAotYmUgbmljZXIgdG8gY29tYmluZSB0aGVtLCBidXQgdGhp cyBnZXRzIHRoZSBqb2IgZG9uZS4gIG1ha2VmaWxlLCAyMyBGZWIgMjAwNi4KLQotLS0tIERldi4x NCAtLS0KLQotRml4ZWQgdGhlIEhFTFAgY29tbWFuZCB3aGVuIHVzZWQgd2l0aCB0b2tlbnMgbGlr ZSBALCBeLCAjLCBhbmQgOy4gIFRoZSBmaXJzdAotdHdvIGhhZCBiZWVuIG9taXR0ZWQgZnJvbSB0 aGUgdGFibGUuICBUaGUgc2Vjb25kIHR3byByZXF1aXJlZCBhIG5ldyBwYXRoCi1pbnRvIHRoZSBn dXRzIG9mIHRoZSBwYXJzZXIsIHNpbmNlIGNvbW1lbnRzIGFyZSBub3JtYWxseSBzdHJpcHBlZCBh dCBhIHZlcnkKLWxvdyBsZXZlbC4gIGNrdXVzW3IyXS5jLCBja3VjbWQuYywgMjQgRmViIDIwMDYu Ci0KLUJ1aWx0IG9uIEFJWCA1LjEgKCJtYWtlIGFpeDUxIikgd2l0aG91dCBpbmNpZGVudC4gIFRo ZW4gSSB0cmllZDoKLQotIG1ha2UgYWl4NTEgIktGTEFHUz0tRF9MQVJHRUZJTEVfU09VUkNFIC1E X0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCi0KLVRoaXMgaGFkIG5vIGVmZmVjdC4gIEkgZm91bmQgdGhl IHJlbGV2YW50IGRvY3VtZW50IGF0aCB0aGUgSUJNIHdlYnNpdGUuICBJdAotc2F5cyB0byB1c2Ug LURfTEFSR0VfRklMRVMgaW5zdGVhZC4gIEkgYWRkZWQgdGhpcyB0byB0aGUgQUlYIDQuMiB0YXJn ZXQKLXNpbmNlIChhKSBJQk0gc2F5cyBsYXJnZSBmaWxlcyBhcmUgc3VwcG9ydGVkIGJ5IEFJWCA0 LjIgYW5kIGxhdGVyLCBhbmQgKGIpCi1hbGwgS2VybWl0IEFJWCB0YXJnZXRzIHBhc3QgNC4yIHVz ZSB0aGUgNC4yIG9uZS4gIFBsdXMgYSBjbGF1c2UgdG8gbWFrZQotc3VyZSBDS19PRkZfVCBpcyBk ZWZpbmVkIGFwcHJvcHJpYXRlbHkuICBja2NkZWIuaCwgbWFrZWZpbGUsIDYgTWFyIDIwMDYuCi0K LUFkZGVkIGEgMzItYml0IGFpeDUxK29wZW5zc2wgdGFyZ2V0LiAgQnVpbGRzIE9LLCB3b3JrcyBm aW5lICh0ZXN0ZWQgYWdhaW5zdAotb3VyIFNTTCBQT1Agc2VydmVyKS4gIFRyaWVkIEkgdHJpZWQg YWRkaW5nIC1EX0xBUkdFX0ZJTEVTLiAgSXQgc2VlbXMgdG8gd29yawotZmluZSwgc28gd2UnbGwg a2VlcCBpdC4gIENsZWFuZWQgdXAgdGhlIG90aGVyIGFpeDVibGFoIGVudHJpZXMgYSBiaXQgYWxz by4KLW1ha2VmaWxlLCA2IE1hciAyMDA2LgotCi1GaXhlcyBmcm9tIEouIFNjb3R0IEthc3RlbiB0 byB0aGUgSVJJWCA2LjQgYW5kIDYuNSBtYWtlZmlsZSB0YXJnZXRzLiAgVGhleQotd2VyZSBiYWRs eSB3cm9uZy4gIG1ha2VmaWxlLCA2IE1hciAyMDA2LgotCi1UaGUgcmVhc29uIEtlcm1pdCB3YXMg bG9vcGluZyBvbiBkaXJlY3RvcmllcyBpbiBJUklYIHdhcyBhIGNsYXNzaWMKLSJkb3VibGUtZW5k ZWQgYnJlYWsiLiAgVGhlIG1ha2VmaWxlIHRhcmdldHMgZmFpbGVkIHRvIGRlZmluZSBESVJFTlQg c28KLUtlcm1pdCB3YXMgb3Blbi9yZWFkIG9uIGRpcmVjdG9yaWVzIHJhdGhlciB0aGFuIG9wZW5k aXIoKS9yZWFkZGlyKCkuICBCdXQKLXRoZW4gaXQgd2FzIGFsc28gZmFpbGluZyB0byBhY2NvdW50 IGZvciB0aGUgZmFjdCB0aGF0IHJlYWQoKSB3b3VsZCByZXR1cm4gLTEKLW9uIGVycm9yLiAgVGhl IG1ha2VmaWxlIGZpeCBhZGRzIC1ERElSRU5ULCBhbmQgdGhlIHJlYWQoKSBjYXNlIGluIHRyYXZl cnNlKCkKLW5vdyBwcm9wZXJseSB0ZXJtaW5hdGVzIGl0cyBsb29wIG9uIGVycm9yLiAgY2t1Zmlv LmMsIDYgTWFyIDIwMDYuCi0KLS0tLSBEZXYuMTQgLS0tCi0KLUluIHJlc3BvbnNlIHRvIGEgY29t cGxhaW50IHRoYXQgQy1LZXJtaXQgd291bGQgbm90IGJ1aWxkIG9uIEhQLVVYIDExIHdpdGgKLU9w ZW5TU0wsIEkgdHJpZWQgaXQgbXlzZWxmIG9uIGJvdGggMTEuMTEvUEEtUklTQyBhbmQgMTFpIHYy L0l0YW5pdW0uICBJdCBidWlsdAotT0sgb24gYm90aCBidXQgSSBoYWQgdG8gYWRkIGEgbmV3IHRh cmdldCAoaHB1eDEwMDBvK29wZW5zc2wtbm96bGliKSBmb3Igbm8KLVpsaWIgc2luY2UgdGhlc2Ug Ym94ZXMgZGlkIG5vdCBoYXZlIGl0IGluc3RhbGxlZC4gIG1ha2VmaWxlLCA5IE1hciAyMDA2Lgot Ci1BZGRlZCBPcGVuU1NMIHZlcnNpb24gbnVtYmVyIGRpc3BsYXkgdG8gU0hPVyBGRUFUVVJFUy4g IGNrdXVzNS5jLCA5IE1hciAyMDA2LgotCi1HYXZpbiBHcmFoYW0gbm90aWNlZCB0aGF0IEZUUCBb TV1HRVQgL0RFTEVURSAvTU9WRS1UTzogd2FzIHJlamVjdGVkIHdpdGgKLSI/U29ycnksIC9ERUxF VEUgY29uZmxpY3RzIHdpdGggL01PVkUgb3IgL1JFTkFNRSIuICBUaGlzIGNoZWNrIGJlbG9uZ3Mg aW4gdGhlCi1QVVQgY29kZSBidXQgbm90IGluIHRoZSBHRVQgY29kZS4gIENvbW1lbnRlZCBpdCBv dXQgYW5kIHRlc3RlZCB0aGUgcmVzdWx0LgotVGhlIGNvbWJpbmF0aW9uIGlzIG5vdyBhY2NlcHRl ZCBidXQgdGhlbiBLZXJtaXQgcmVmdXNlcyB0aGUgaW5jb21pbmcgZmlsZSBhcwotaWYgaXQgaGFk IGJlZW4gZ2l2ZW4gYSAvU01BTExFUi1USEFOOiBvciAvTEFSR0VSLVRIQU46IHN3aXRjaCwgd2hp Y2ggaXQgZGlkbid0Ci1oYXBwZW4uICBUdXJucyBvdXQgdGhlcmUgd2FzIG9uZSBtb3JlIHBsYWNl IHdoZXJlIEkgd2Fzbid0IGluaXRpYWxpemluZyB0aGUKLW5ldyAid2lkZSBpbnQiIG1lbWJlciBv ZiB0aGUgc3dpdGNoLXBhcnNpbmcgcHZbXSBzdHJ1Y3QuICBPbmNlIHRoaXMgd2FzIGZpeGVkLAot dGhlIC9NT1ZFLVRPIHBhcnQgc3RpbGwgZGlkbid0IHdvcmsuICBUdXJuZWQgb3V0IHRoZSAvREVM RVRFIGNhc2Ugd2FzIHBhcnQgb2YKLWEgbG9uZyBpZi1lbHNlLWlmLWVsc2UtIGNoYWluLCB3aGlj aCBlZmZlY3RpdmVseSBtYWRlIC9ERUxFVEUgYW5kIC9NT1ZFLVRPOiBvcgotL1JFTkFNRS1UTzog bXV0dWFsbHkgZXhjbHVzaXZlLiAgRml4ZWQgdGhpcywgbm93IGl0IHdvcmtzIGZpbmUuICBja2Nm dHAuYywKLTEzIE1hciAyMDA2LgotCi1Hb3QgYWNjZXNzIHRvIEFJWCA1LjMsIGJ1aWx0IHRoZXJl LCBhbGwgT0ssIGluY2x1ZGluZyBsYXJnZSBmaWxlcy4gMTMgTWFyIDIwMDYuCi0KLS0tLSBEZXYu MTYgLS0tCi0KLVBhdGNoZXMgZnJvbSBNYXJrIFNhcGlybyB0byBzdXBwcmVzcyBnZXRzb2Nrb3B0 KCkgYW5kIGdldHNvY2tuYW1lKCkgd2FybmluZ3MKLWluIE1hYyBPUyBYLiAgY2tjbmV0LltjaF0s IDE4IE1hciAyMDA2LgotCi1JbiByZXNwb25zZSB0byBhIGNvbXBsYWludCBmcm9tIENsYXJlbmNl IERvbGQsIHRyaWVkICJtYWtlIHJlZGhhdDkiICh3aGljaAotaXMgdGhlIHJhdGhlciBkYXRlZCB0 YXJnZXQgdGhhdCB0cmllZCB0byBpbmNsdWRlIGFsbCBmb3JtcyBvZiBzZWN1cml0eSkgb24KLVJI IExpbnV4IEFTNC4zLCBpdCBmYWlsZWQgbWlzZXJhYmx5LiAgSSBtYWRlIGEgbmV3IG1ha2VmaWxl IHRhcmdldCwgcmVtb3ZpbmcKLUtlcmJlcm9zIElWIGFuZCBnb3QgYSBsb3QgZmFydGhlci4gIEJ1 dCB0aGVuIGluIGNrY2Z0cC5jLCB0aGUgZm9sbG93aW5nCi1zdHJ1Y3QgZGVmaW5pdGlvbjoKLQot ICBzdHJ1Y3QgewotICAgICAgQ09OU1QgZ3NzX09JRF9kZXNjICogQ09OU1QgKiBtZWNoX3R5cGU7 Ci0gICAgICBjaGFyICpzZXJ2aWNlX25hbWU7Ci0gIH0gZ3NzX3RyaWFsc1tdID0gewotICAgICAg eyAmY2tfZ3NzX21lY2hfa3JiNSwgImZ0cCIgfSwKLSAgICAgIHsgJmNrX2dzc19tZWNoX2tyYjUs ICJob3N0IiB9LAotICB9OwotCi1yZWZlcnMgdG8gYSB2YXJpYWJsZSwgY2tfZ3NzX21lY2hfa3Ji NSwgdGhhdCBpcyBub3QgZGVmaW5lZCBhbnl3aGVyZS4gIFVwCi1hYm92ZSwgaG93ZXZlciwgaXMg YSBzdGF0aWMgZGVmaW5pdGlvbiBmb3IgZ3NzX21lY2hfa3JiNSwgc28gSSBjaGFuZ2VkIHRoZQot c3RydWN0IGRlZmluaXRpb24gdG8gbWF0Y2guICBOZXh0LCBpbiBja3VhdGguYywgdGhlIGNvbXBp bGVyIGNvdWxkIG5vdCBmaW5kCi10aGUgY29tX2Vyci5oIGZpbGUuICBUdXJucyBvdXQgaW4gTGlu dXggdGhpcyBpcyBpbiBhIHN1YmRpcmVjdG9yeSwgZXQsIHNvIHdlCi1oYXZlIHRvIGFkZCBhIC1J IGNsYXVzZSB0byB0aGUgbWFrZWZpbGUgdGFyZ2V0IGZvciB0aGlzLiAgTWFkZSBhIHRhcmdldCBm b3IKLUxpbnV4K1NTTCBvbmx5LiAgTWFkZSBhIHRhcmdldCBmb3IgTGludXgrS3JiNSBvbmx5OyB0 aGlzIHJlcXVpcmVkIG1vdmluZyBhbgotI2lmZGVmIGluIGNrdXVzNy5jIHRvIHByZXZlbnQgYW4g dW5ndWFyZGVkIHJlZmVyZW5jZSB0byBTU0xFQVlfVkVSU0lPTi4KLU5ldyB0YXJnZXRzOiBsaW51 eCtrcmI1K3NzbCwgbGludXgra3JiNSwgbGludXgra3JiNS4gIGNrY2Z0cC5jLCBja3V1czcuYywK LW1ha2VmaWxlLCAyNyBNYXIgMjAwNi4gIAotCi1OZXcgdGFyZ2V0cyBvZiBIUC1VWCAxMC8xMSB3 aXRoIE9wZW5TU0wgZnJvbSBQZXRlckUuICBtYWtlZmlsZSwgMjcgTWFyIDIwMDYuCi0KLUFkZGVk IGxhcmdlIGZpbGUvaW50ZWdlciBzdXBwb3J0IHRvIFNIT1cgRkVBVFVSRVMuICBja3V1czUuYywg MjcgTWFyIDIwMDYuCi0KLUJ1aWx0IE9LIG9uIFNvbGFyaXMgOSBhbmQgMTAgd2l0aCBnY2MgKHNv bWVvbmUgd2FzIGNvbXBsYWluaW5nIHRoYXQgdGhpcwotZGlkbid0IHdvcmssIGJ1dCB0aGF0IHdh cyA4LjAuMjExKS4KLQotU3RhcnRlZCBidWlsZCBvbiBhIFN1biAzLzgwIG1jNjgwMzAgd2l0aCBO ZXRCU0QgMi4wIGFuZCBnY2MgMy4zLjMuICBCdXQgaXQKLWRpZWQgd2l0aCBhbiBhc3NlbWJsZXIg ZXJyb3IgaW4gY2tjZm4yLmMgKGNvbXBpbGVyIGJ1ZykuICAyNyBNYXIgMjAwNi4KLQotLS0tIERl di4xNyAtLS0KLQotTmViQlNEIDIuMCBidWlsZCBjb21wbGV0ZWQgYnkgdHVybmluZyBvZmYgb3B0 aW1pemF0aW9uIG9uIGNrY2ZuMi5jCi0oIktGTEFHUz0tTzAiKS4gIFJlc3VsdCBzdXBwb3J0cyA2 NC1iaXQgaW50cyBhbmQsIHByZXN1bWFibHksIGxhcmdlIGZpbGVzLgotdW5hbWUgLXAgPSAibTY4 ayIsIC1tID0gInN1bjMiLiAyOSBNYXIgMjAwNi4KLQotQ29ycmVjdGVkIGFuIG9taXNzaW9uIGlu IGFwcGx5aW5nIFBldGVyRSdzIHVwZGF0ZXMgdG8gdGhlIEhQLVVYIHRhcmdldHMuCi1tYWtlZmls ZSwgMjggTWFyIDIwMDYuCi0KLXNvbGFyaXMyeGcra3JiNStrcmI0K29wZW5zc2wrc2hhZG93Ogot Ci1UcmllZCByZXN1cnJlY3RpbmcgdGhlIHNvbGFyaXMyeGcra3JiNStrcmI0K29wZW5zc2wrc2hh ZG93IHRhcmdldC4gIEl0IGFza3MKLXRvIGxpbmsgd2l0aCBsaWJkZXMgYnV0IHRoZXJlIGlzIG5v IGxpYmRlcy4gIFJlbW92ZWQgLWxkZXMgZnJvbSB0aGUgdGFyZ2V0LAotbm93IGF0IGxlYXN0IGl0 IGJ1aWxkcyBhbmQgcnVucyB3YXJ0LiAgVGhlIGNvbXBpbGF0aW9uIGJsb3dzIHVwIGluIGNrY2Z0 cC5jCi1mb3IgbWlzc2luZyBoZWFkZXIgZmlsZXM6Ci0KLSAgY2tjZnRwLmM6NDYyOiBrZXJiZXJv c0lWL2tyYi5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ci0gIGNrY2Z0cC5jOjUwMDogZ3Nz YXBpL2dzc2FwaV9nZW5lcmljLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKLSAgY2tjZnRw LmM6NTAxOiBnc3NhcGkvZ3NzYXBpX2tyYjUuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQot Ci1Hb3QgYSBiaXQgZmFydGhlciBieSBhZGRpbmcgYXBwcm9wcmlhdGUgLUkncyBhbmQgLUwncyB0 byBLRkxBR1MgYnV0IGl0IHN0aWxsCi1kaWVzIGNvbXBpbGluZyAob3IgbGlua2luZz8pIGNrY2Z0 cC5jLCBidXQgaXQgZG9lc24ndCBzYXkgZXhhY3RseSB3aHkuICBPSywKLWRlZmVycmVkLgotCi1B ZGRlZCBTRVQgU0VYUFJFU1NJT04gVFJVTkNBVEUtQUxMLVJFU1VMVFMgeyBPTiwgT0ZGIH0uICBU aGlzIGNhbiBiZSB1c2VkCi1mb3IgZm9yY2UgaW50ZWdlciBhcml0aG1ldGljIGluIGFueSBraW5k IG9mIGNhbGN1bGF0aW9uIHRoYXQgcmVxdWlyZXMgaXQsCi1zdWNoIGFzIGRhdGUgY2FsY3VsYXRp b25zLiAgVGhpcyBpcyBhIGdsb2JhbCBzZXR0aW5nLCBub3Qgb24gYW55IGtpbmQgb2YKLXN0YWNr LiAgQWxzbywgdXBkYXRlZCBTSE9XIFNFWFAgYW5kIGFkZGVkIEhFTFAgU0VUIFNFWFAgd2hpY2gg d2Fzbid0IHRoZXJlCi1iZWZvcmUuICBja3V1c1syM10uYywgMzAgTWFyIDIwMDYuCi0KLVRvIG1h a2UgdGhlIFJFTkFNRSBjb21tYW5kIGEgYml0IG1vcmUgdXNlZnVsLCBuZWVkIHRvIGFkZCBzb21l IHN3aXRjaGVzLgotQnV0IGl0IHNoYXJlcyBhIHN3aXRjaCB0YWJsZSwgcXZzd3RhYltdLCB3aXRo IHNvbWUgb3RoZXIgY29tbWFuZHMuICBCcm9rZQotdGhpcyBvZmYgaW50byBpdHMgb3duIHN3aXRj aCB0YWJsZS4gIGNrdXVzNi5jLCAxNyBBcHIgMjAwNi4KLQotQWRkZWQgUkVOQU1FIHN3aXRjaCB2 YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCBpbiB0aGUgc2FtZSB0YWJsZSB3aXRoIHRoZSBERUxFVEUK LXN3aXRjaCB2YWx1ZXMsIHdoaWNoIGFyZSBzaGFyZWQgYnkgbWFueSBjb21tYW5kcy4gIGNrdXVz ci5oLCAxNyBBcHIgMjAwNi4KLQotRGlzY292ZXJlZCB0aGF0IHRoZSBSRU5BTUUgY29tbWFuZCBj b3VsZCBiZSBlbnRlcmVkIHdpdGhvdXQgYW55IGFyZ3VtZW50cwotYW5kIGl0IHdvdWxkIHN0aWxs IHN1Y2NlZWQuICBGaXhlZCBpbiBkb3JlbmFtKCk6IGNrdXVzNi5jLCAxNyBBcHIgMjAwNi4KLQot QWRkZWQgcGFyc2luZyBmb3IgUkVOQU1FIC9VUFBFUjpvcHRpb24gKHRvIHVwcGVyY2FzZSB0aGUg ZmlsZSBuYW1lKHMpKSwKLS9MT1dFUjpvcHRpb24gKHRvIGxvd2VyY2FzZSksIGFuZCAvUkVQTEFD RTp7e3MxfXtzMn19ICh0byBkbyBzdHJpbmcKLXJlcGxhY2VtZW50IG9uIHRoZSBmaWxlbmFtZShz KSksIGJ1dCBub3QgdGhlIHNlbWFudGljcy4gIFdoZW4gYW55IG9mIHRoZXNlCi1zd2l0Y2hlcyBp cyBnaXZlbiwgdGhlIHRhcmdldCAoInRvIikgbmFtZSBpcyBub3QgcGFyc2VkOyB0aGV5IGFjdCBv biB0aGUKLXNvdXJjZSBuYW1lLiAgVGhlIC9MT1dFUjogc3dpdGNoIHRha2VzIGtleXdvcmQgYXJn cyB0byBzcGVjaWZ5IHdoZXRoZXIgaXQKLXNob3VsZCBhY3Qgb25seSBvbmx5IGZpbGVzIHRoYXQg aGF2ZSBhbGwgVVBQRVIgY2FzZSBsYXR0ZXJzLCBvciBvbiBBTEwgZmlsZXMKLShpLmUuLCBpbmNs dWRpbmcgZmlsZXMgd2l0aCBtaXhlZC1jYXNlIG5hbWVzKTsgc2ltaWxhcmx5IGZvciB0aGUgL1VQ UEVSOgotc3dpdGNoLiAgVGhlcmUgaXMgc29tZSBjcmVhdGl2ZSBwYXJzaW5nIGFsbG93aW5nIHRo ZXNlIHRvIGJlIGdpdmVuIHdpdGggb3IKLXdpdGhvdXQgYSBjb2xvbiBhbmQga2V5d29yZCBhcmd1 bWVudCwgd2hpY2ggd29ya3MgZmluZSBleGNlcHQgaWYgeW91IGluY2x1ZGUKLXRoZSBjb2xvbiBi dXQgbm8gYXJndW1lbnQsIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKHdoaWNoIHdvcmtzIGZpbmUpLCBh bmQgdGhlbgotcmVjYWxsIHRoZSBjb21tYW5kLiAgSSBoYXZlbid0IHlldCBkZWNpZGVkIGFib3V0 IHRoZSBpbnRlcmFjdGlvbiBhbW9uZyB0aGVzZQotc3dpdGNoZXMuICBDbGVhcmx5IGlmIC9VUFBF UiBpcyBnaXZlbiBhZnRlciAvTE9XRVIsIGl0IG92ZXJyaWRlcy4gIEJ1dCBpZgotL1VQUEVSIChv ciAvTE9XRVIpIGlzIGdpdmVuIHdpdGggL1JFUExBQ0UsIHdoYXQgc2hvdWxkIGhhcHBlbj8gIGNr dXVzNi5jLAotMTcgQXByIDIwMDYuCi0KLUZpbGxlZCBpbiBhY3Rpb25zIGZvciBSRU5BTUUgL1VQ UEVSOiBhbmQgL0xPV0VSOiBmb3IgdGhlIHNpbmdsZSBmaWxlIGNhc2UsCi1hbmQgdGVzdGVkIGFs bCBjb21iaW5hdGlvbnMgb2Ygc3dpdGNoIHZhbHVlcyBhbmQgZmlsZW5hbWUgY29uZmlndXJhdGlv bnMuCi1PbmNlIHRoYXQgd2FzIE9LLCBtb3ZlZCB0aGUgY29kZSBvdXQgaW50byBhIHNlcGFyYXRl IHJvdXRpbmUsIHJlbmFtZW9uZSgpLAotYW5kIHRoZW4gY2FsbGVkIGl0IGZyb20gYm90aCB0aGUg c2luZ2xlLWZpbGUgY2FzZSBhbmQgdGhlIG11bHRpZmlsZSBjYXNlLgotY2t1dXM2LmMsIDE5IEFw ciAyMDA2LgotCi1BZGRlZCBSRU5BTUUgL1NJTVVMQVRFLiAgRmlsbGVkIGluIHRoZSBjb2RlIGZv ciBzdHJpbmcgcmVwbGFjZW1lbnQsIG5lZWRzCi10ZXN0aW5nLiAgY2t1dXM2LmMsIDIwIEFwciAy MDA2LgotCi1DaGFuZ2VkIC9SRVBMQUNFIG9wdGlvbnMgdG8gYWxsb3cgYSBuZWdhdGl2ZSBudW1i ZXIgdG8gc3BlY2lmeSBhbiBvY2N1cnJlbmNlCi1mcm9tIHRoZSByaWdodCwgc28gLTEgbWVhbnMg dGhlIGxhc3Qgb2NjdXJyZW5jZSwgLTIgbWVhbnMgdGhlIG5leHQtdG8tbGFzdCwKLWV0Yy4gIGNr dXVzNi5jLCAyNCBBcHIgMjAwNi4KLQotQWRkZWQgUkVOQU1FIC9DT0xMSVNJT046e09WRVJXUklU RSxQUk9DRUVELEZBSUx9LiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBidXQKLW5vdCB0ZXN0ZWQuICBj a3V1czYuYywgMjQgQXByIDIwMDYuCi0KLVdvcmtlZCBvbiBSRU5BTUUgL0NPTExJU0lPTjpGQUlM LiAgSSBkZWNpZGVkIGl0IHdhcyBsZXNzIHRoYW4gdXNlZnVsIHRvIC4uLgotCi1BZGRlZCBTRVQg UkVOQU1FIHsgQ09MTElTSU9OLCBMSVNUIH0gdG8gbGV0IHVzZXIgY2hhbmdlIGRlZmF1bHQgY29s bGlzaW9uCi1hbmQgbGlzdGluZyBhY3Rpb25zLiAgY2t1dXNyLltjaF0sIGNrdXVzWzM2XS5jLCAy NSBBcHIgMjAwNi4KLQotRXhwZXJpbWVudGVkIHdpdGggcGFyc2luZyBmb3IgL0NPTlZFUlQ6Y3Nl dDE6Y3NldDIuICBUaGUgcHJvYmxlbSBoZXJlIGlzCi10aGF0IHRoZXJlIGlzIG5vIHN0cmFpZ2h0 Zm9yd2FyZCB3YXkgZm9yIGEgc3dpdGNoIHRvIGhhdmUgbXVsdGlwbGUKLWFyZ3VtZW50cy4gIE9y IGlzIHRoZXJlLi4uPyAgSWYgSSBwYXJzZSBjc2V0MSB3aXRoIGNtc3dpKCkgcmF0aGVyIHRoYW4K LWNta2V5KCksIGl0IGFsbW9zdCB3b3JrczsgdGhlIG9ubHkgcHJvYmxlbSBpcyB0aGF0IHRoZSBj aGFyYWN0ZXItc2V0Ci1rZXl3b3JkcyBkb24ndCBoYXZlIENNX0FSRyBzZXQsIHNvIHRoZXkgZG9u J3Qga25vdyB0byBzdG9wIG9uLCBhbmQgaWdub3JlLCBhCi1jb2xvbi4gIElmIEkgbWFrZSBhIGNv cHkgb2YgdGhlIHRhYmxlIGFuZCBzZXQgQ01fQVJHIGluIHRoZSBmbGFncyBmaWVsZCBmb3IKLWVh Y2gga2V5d29yZCwgaXQgd29ya3MgZmluZTogaWYgSSBUYWIgaW4gdGhlIGZpcnN0IG5hbWUsIGl0 IGZpbGxzIGl0c2VsZgotb3V0LCBzdXBwbGllcyBhIGNvbG9uLCBhbmQgd2FpdHMgZm9yIHRoZSBz ZWNvbmQgbmFtZS4gIFNvIGluIHRoZSBjb2RlLCB0aGUKLWZpcnN0IHRpbWUgdGhhdCBSRU5BTUUg L0NPTlZFUlQgaXMgaW52b2tlZCwgSSBwdXQgY29kZSB0byBjb3B5IGZjc3RhYltdIGFuZAotc2V0 IENNX0FSRyBpbiBlYWNoIGZsYWdzIGZpZWxkLiAgV29ya3MgZmluZSwgYW5kIG5vdyB3ZSBrbm93 IGhvdyB0byBtYWtlIGEKLXN3aXRjaCB0aGF0IHRha2VzIG11bHRpcGxlIGFyZ3VtZW50cy4gIGNr dXVzNi5jLCAyNCBBcHIgMjAwNi4KLQotSSB0aG91Z2h0IEkgaGFkIGEgZnVuY3Rpb24gdG8gY29u dmVydCB0aGUgY2hhcmFjdGVyIHNldCBvZiBhIHN0cmluZyBidXQgSQotZG9uJ3QsIHNvIGFjdHVh bGx5IGltcGxlbWVudGluZyAvQ09OVkVSVDogd2lsbCBiZSBkaWZmaWN1bHQuCi0KLUFjdHVhbGx5 IHRoZSBwYXJzaW5nIHdhc24ndCB0aGF0IGVhc3kgZWl0aGVyLiAgSXQgd29ya3MgT0sgaW50ZXJh Y3RpdmVseSwKLWJ1dCBub3QgaW4gYSBUQUtFIGZpbGUuICBUbyBtYWtlIGEgbG9uZyBzdG9yeSBz aG9ydCwgSSBoYWQgdG8gY2hhbmdlCi1ndHdvcmQoKSBhbmQgY21rZXkyKCkgdG8gbm90IHJlcXVp cmUgIi8iIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBzd2l0Y2gsIGFuZAotdGhlbiB0byBwYXJzZSBh cmd1bWVudHMtdGhhdC1hcmUtZm9sbG93ZWQtYnktb3RoZXItYXJndW1lbnRzIGFzIGlmIHRoZXkg d2VyZQotc3dpdGNoZXMsIHNvIHRoYXQgdGhleSBjYW4gZW5kIHdpdGggY29sb24gcmF0aGVyIHRo YW4gc3BhY2UuICBUaGlzIG1pZ2h0Ci1zZWVtIGRhbmdlcm91cywgYnV0IHN3aXRjaGVzIGFsd2F5 cyBoYXZlICIvIiBhdCB0aGUgYmVnaW5uaW5nLCBzbyB0aGUgY2hlY2sKLWlzIHN1cGVyZmx1b3Vz LiAgY2t1Y21kLmMsIDI2IEFwciAyMDA2LgotCi1CYWNrIHRvIC9DT05WRVJULi4uICBPbmNlIEkg d2FzIGFibGUgdG8gZ2V0IHRoZSBjb2RlIHRvIGNhbGwgY3Z0c3RyaW5nKCkgSQotd2FzIGFibGUg dG8gZGVidWcgaXQgKGF0IGZpcnN0IGl0IHdhcyBza2lwcGluZyBldmVyeSBzZWNvbmQgY2hhcmFj dGVyKS4gIEFuZAotbm93IHdlIGhhdmUgYSBnZW5lcmFsLXB1cnBvc2Ugc3RyaW5nLXRyYW5zbGF0 aW5nIGZ1bmN0aW9uIHdlIGNhbiBjYWxsIGZyb20KLWFueXdoZXJlLiAgUmVxdWlyZXMgdGhhdCBD LUtlcm1pdCBiZSBidWlsdCB3aXRoIFVuaWNvZGUgc3VwcG9ydC4KLWNrdXVzNi5jLCAyNiBBcHIg MjAwNi4KLQotQWRkZWQgU0hPVyBSRU5BTUUuICBja3V1c3IuaCwgY2t1dXNbcjVdLmMsIDI2IEFw ciAyMDA2LgotCi1Db25kaXRpb25hbGl6ZWQgc29tZSBVbml4L1dpbmRvd3MgYXNzdW1wdGlvbnMg aW4gcmVuYW1lb25lKCkgc28gdGhlIGNvZGUKLWNvdWxkIHdvcmsgaW4gVk1TLiAgY2t1dXM2LmMs IDIgTWF5IDIwMDYuCi0KLUFkZGVkIFJFTkFNRSAvRklYU1BBQ0VTIHRvIGNoYW5nZSBhbGwgc3Bh Y2VzIGluIHRoZSBmaWxlbmFtZShzKSB0bwotdW5kZXJzY29yZSBvciBhbnkgb3RoZXIgY2hhcmFj dGVyIG9yIHN0cmluZyB0aGF0IGlzIGdpdmVuLiAgVGhpcyBpcyBqdXN0IGEKLXNwZWNpYWwgY2Fz ZSBvZiBSRU5BTUUgL1JFUExBQ0U6e3sgfXt4fX0gd2l0aCBlYXNpZXIgc3ludGF4LgotY2t1dXNy LmgsIGNrdXVzNi5jLCAyIE1heSAyMDA2LgotCi1BZGRlZCBhbiAiYWxsLWJ1dCIgY29udHJvbCB0 byB0aGUgL1JFUExBQ0Ugb3B0aW9uczoKLS9SRVBMQUNFOnt7Ln17X317fjF9fSBtZWFucyByZXBs YWNlIGFsbCBidXQgdGhlIGZpcnN0ICh0aGlzIG9uZSB3b3Jrcyk7Ci0vUkVQTEFDRTp7ey59e199 e34tMX19IG1lYW5zIHJlcGxhY2UgYWxsIGJ1dCB0aGUgbGFzdCAodGhpcyBvbmUgbm90IHlldCku Ci1ja3V1czYuYywgMiBNYXkgMjAwNi4KLQotRmlsbGVkIGluIHRoZSBzZWNvbmQgb25lICgiYWxs IGJ1dCIgdGhlIGdpdmVuIG9jY3VycmVuY2UpLiAgVGhlIGFsZ29yaXRobSBpcwotc2ltcGx5IHRv IHJldmVyc2UgdGhlIHRocmVlIHN0cmluZ3MgYW5kIHRoZW4gdXNlIHRoZSBzYW1lIGNvZGUgYXMg d2UgdXNlIGluCi10aGUgbGVmdC1yaWdodC1jYXNlLCBhbmQgdGhlbiB1bnJldmVyc2UgdGhlIHJl c3VsdC4gIEF0IGZpcnN0IEkgdXNlZAoteXlzdHJpbmcoKSBmb3IgdGhpcyBidXQgeWlrZXMsIHdo YXQgYSBiYWQgZGVzaWduISAgU28gSSBtYWRlIGEgYmV0dGVyCi1zdHJpbmctcmV2ZXJzYWwgcm91 dGluZSwgZ25pcnRzKCksIGZvciB0aGlzIChsdWNraWx5IHl5c3RyaW5nKCkgaXMgb25seSB1c2Vk Ci1pbiBvbmUgcGxhY2UsIGZvciB3aGljaCBpdHMgZGVzaWduIGlzIGFwcHJvcHJpYXRlKS4gY2t1 dXM2LmMsIDMtNCBNYXkgMjAwNi4KLQotQWRkZWQgY29kZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hl cmUgdGhlIGZpbGUgYmVpbmcgcmVuYW1lZCBpbmNsdWRlcyBhIHBhdGgKLXNwZWNpZmljYXRpb24u ICBJbiB0aGlzIGNhc2Ugd2Ugc2VwYXJhdGUgdGhlIHBhdGgsIGFwcGx5IHRoZSByZW5hbWluZwot ZnVuY3Rpb25zIHRvIHRoZSBmaWxlbmFtZSBvbmx5LCBhbmQgdGhlbiBhdCB0aGUgZW5kIHJlam9p biB0aGUgb3JpZ2luYWwKLWZpbGVuYW1lIHdpdGggdGhlIHBhdGgsIGFuZCBqb2luIHRoZSBuZXcg bmFtZSB3aXRoIHNhbWUgcGF0aCBvciwgaWYgYQotZGVzdGluYXRpb24gZGlyZWN0b3J5IHdhcyBn aXZlbiwgd2l0aCB0aGF0LiAgY2t1dXM2LmMsIDQgTWF5IDIwMDYuCi0KLUFkZGVkIEhFTFAgU0VU IFJFTkFNRSBhbmQgdXBkYXRlZCBIRUxQIFJFTkFNRS4gIGNrdXVzMi5jLCA0IE1heSAyMDA2Lgot Ci0iVG9tIFZpb2xpbiIgKFRvbSBIYW5zZW4pIG5vdGljZWQgdGhhdCB0aGUgZmlyc3QgdGltZSB5 b3UgRk9QRU4gYSBmaWxlLAotS2VybWl0J3MgbWVtb3J5IGNvbnN1bXB0aW9uIGdvZXMgd2F5IHVw LiAgSW4gZmFjdCB0aGVyZSdzIGEgd2FybmluZyB0byB0aGF0Ci1lZmZlY3QgaW4gdGhlIGNvZGUs IHdoZXJlLCB1cG9uIGZpcnN0IG9wZW4sIGEgcG90ZW50aWFsbHkgYmlnIGFycmF5IG9mCi1wb3Rl bnRpYWxseSBiaWcgc3RydWN0cyBpcyBhbGxvY2F0ZWQuICBJIHJld3JvdGUgdGhlIGNvZGUgdG8g YWxsb2NhdGUgZWFjaAotYXJyYXkgbWVtYmVyIChzdHJ1Y3QgY2t6X2ZpbGUpIGFzIG5lZWRlZCwg aS5lLiB3aGVuIGEgZmlsZSBpcyBvcGVuZWQsIGFuZCB0bwotZnJlZSBpdCB3aGVuIHRoZSBmaWxl IGlzIGNsb3NlZCAob3IgdGhlIG9wZW4gZmFpbHMpLiAgVGhpcyB3YXMgYWN0dWFsbHkKLXF1aXRl IGEgbG90IG9mIHdvcmssIHdoaWNoIGlzIHdoeSBJIGRpZG4ndCBkbyBpdCB0aGUgZmlyc3QgdGlt ZSBhcm91bmQ6Ci1ldmVyeSBzaW5nbGUgIi4iICBoYWQgdG8gYmUgY2hhbmdlZCB0byAiLT4iLiAg RXZlcnkgY2hlY2sgZm9yIGEgdmFsaWQKLWNoYW5uZWwgZmlyc3QgaGFkIHRvIGNoZWNrIGlmIHRo ZSBjaGFubmVsJ3Mgc3RydWN0IHdhcyBhbGxvY2F0ZWQgYW5kIGV2ZXJ5Ci1vdGhlciByZWZlcmVu Y2UgdG8gel9maWxlW2ldLT5hbnl0aGluZyBoYWQgdG8gYmUgcHJlY2hlY2tlZCB0aGF0IHpfZmls ZVtpXQotd2FzIG5vdCBhIE5VTEwgcG9pbnRlci4gIEFsc28gSSBtYWRlIHNvbWUgaW1wcm92ZW1l bnRzIHRvIEZJTEUgU1RBVFVTLCBhbmQgSQotZml4ZWQgRklMRSBDTE9TRSB0byBkZWZhdWx0IHRo ZSBjaGFubmVsIG51bWJlciBpZiBvbmx5IG9uZSBjaGFubmVsIHdhcyBvcGVuLAotYXMgSSBkaWQg Zm9yIEZJTEUgU1RBVFVTIGEgd2hpbGUgYmFjay4gIGNrdXVzNy5jLCBDaW5jbyBkZSBtYXlvIDIw MDYuCi0KLVJhbiBteSBvbGQgQlVJTERTIHNjcmlwdCB0aGF0IGJ1aWxkcyBDLUtlcm1pdCB3aXRo IGFib3V0IDEwMCBkaWZmZXJlbnQKLWNvbWJpbmF0aW9ucyBvZiBmZWF0dXJlLXNlbGVjdGlvbiBz d2l0Y2hlcy4gIEZpeGVkIGEgZmV3IHNtYWxsIGdsaXRjaGVzIHNvCi1ub3cgdGhleSBhbGwgYnVp bGQgT0sgKGV4Y2VwdCBjYW4ndCBkbyBOT0FOU0kgYnVpbGRzIGFueSBtb3JlIG9uIHJlY2VudAot TGludXhlcyBiZWNhdXNlIG9mIHZhcmFyZ3MoKSkuICBja3V1czMuYywgY2t1dXM1LmMsIGNrdXVz Ni5jLCBja3V1czcuYywKLWNrdWNtZC5jLCBja2NmbnMuYywgNiBNYXkgMjAwNi4KLQotRml4ZWQg UkVOQU1FIC9MT1dFUiBhbmQgL1VQUEVSLCB3aGVuIGdpdmVuIHdpdGggbm8gY29sb24gb3IgYXJn dW1lbnQsIHRvCi1kZWZhdWx0IHRvIEFMTC4gIGNrdXVzNi5jLCAxMyBNYXkgMjAwNi4KLQotQnVp bHQgb24gVk1TIDcuMi0xLCB0ZXN0ZWQgbmV3IFJFTkFNRSBjb21tYW5kIHRoZXJlOyBzZWVtcyB0 byBiZSBPSy4KLTEzIE1heSAyMDA2LgotCi0tLS0gRGV2LjE4IC0tLQotCi1JIHdhbnRlZCB0byB0 ZXN0IGxhcmdlIGZpbGVzIGFnYWluc3QgUkVTRU5EIGJ1dCBJIGRvbid0IGhhdmUgYWNjZXNzIHRv IGFueQotc3lzdGVtIHRoYXQgY2FuIHJ1biBDLUtlcm1pdCBhbmQgdGhhdCBhbHNvIGhhcyBlbm91 Z2ggc3BhY2UgZm9yIGEgbGFyZ2UKLWZpbGUuICBJIGNyZWF0ZWQgYSAiZmFrZSIgbGFyZ2UgZmls ZSBvbiBMaW51eCAoM0cgaG9sZSBwbHVzIDEgYnl0ZSksIGFuZAotc2VudCBpdCBvdmVyIGEgbG9j YWxob3N0IGNvbm5lY3Rpb24sIGFuZCBpbnRlcnJ1cHRlZCBpdCByZXBlYXRlZGx5IGFuZCB0aGVu Ci1pbml0aWF0ZWQgYSBSRVNFTkQgYXQgdGhlIHNlbmRlci4gIEluIGVhY2ggY2FzZSwgaXQgcGlj a2VkIHVwIHdoZXJlIGl0IGxlZnQKLW9mZi4gIEJ1dCBiZWZvcmUgdGhlIDJHIGJvdW5kYXJ5IHdh cyBjcm9zc2VkIHRoZSBkaXNrIGZpbGxlZCB1cC4KLUluY29uY2x1c2l2ZS4gIDE0IE1heSAyMDA2 LgotCi1QZXRlckUgZ290IGEgd2FybmluZyBpbiB0aGUgbmV3IEZJTEUgT1BFTiBjb2RlIHdoZW4g YnVpbGRpbmcgaW4gSFAtVVggOS4KLUkgYWRkZWQgYSBjYXN0LCBidWlsdCBvbiBIUC1VWCAxMSwg bm8gbW9yZSBjb21wbGFpbnQuICBIb3dldmVyIHRoZXJlCi1hcmUgd2FybmluZ3MgYWJvdXQgaW50 ZXJuYWwgdnMgZXh0ZXJuYWwgYmluZGluZ3Mgb2Ygc2VuZHBhdGggYW5kIHNlbmRmaWxlCi1pbiBl dmVyeSBtb2R1bGUuICBUb28gYmFkLCB0aGVzZSBhcmUgbm90IEtlcm1pdCB0b2tlbnMsIGl0J3Mg YSBjb25mbGljdCBpbgotSFAncyBoZWFkZXIgZmlsZXMuICBNYXJjIFNhcGlybyBkb2Vzbid0IHNl ZSB0aGVtOyBwcm9iYWJseSBpdCdzIHNvbWV0aGluZwotb24gdGhlIEhQIHRlc3Rkcml2ZSBzaXRl LiAgY2t1dXM3LmMsIDE3IE1heSAyMDA2LgotCi1GaXhlZCB0aGUgdHJ1NjQtNTFiK29wZW5zc2wg dGFyZ2V0IC0tIHRoZSB0ZXJtaW5hdGluZyBkb3VibGVxdW90ZSBvZiBLRkxBR1MKLXdhcyBtaXNz aW5nIC0tIGFuZCBhbHNvIHRoZSBvc2YgdGFyZ2V0LCB3aGljaCBmYWlsZWQgdG8gaW1wb3J0IHRo ZSBMSUJTCi1kZWZpbml0aW9uIGZyb20gd2hhdGV2ZXIgb3RoZXIgdGFyZ2V0IGludm9rZWQgaXQu ICBOb3cgdGhlIFNTTCBidWlsZCBnb2VzIE9LCi1vbiBUcnU2NCA1LjFCLiAgUmVwbGFjZWQgeC50 YXIueiBpbiB0aGUgZG93bmxvYWQgYXJlYXMgd2l0aG91dCBkZWNsYXJpbmcgYQotbmV3IERldiBu dW1iZXIuICBUaGUgbmV3IG9uZSBoYXMgYSBtYWtlZmlsZSB3aXRoIHRvZGF5J3MgZGF0ZS4gIFNv ZnR3YXJlCi1lbmdpbmVlcmluZyBhdCBpdHMgYmVzdCEgIG1ha2VmaWxlLCAxOCBNYXkgMjAwNi4K LQotU2NvdHQgS2FzdGVuIG5vdGVkIHRoYXQgdGhlIGVzdGltYXRlZC10aW1lLXJlbWFpbmluZyBj YWxjdWxhdGlvbiB3b3VsZCBnbwotYm9ua2VycyBvbiBMRlMgc3lzdGVtcyB3aGVuIFJFU0VORGlu ZyBhIGxhcmdlIGZpbGUuICBJdCBsb29rcyBsaWtlIHRoZQotc2hvY3BzKCkgYW5kIHNob2V0bCgp IGZ1bmN0aW9ucyBlc2NhcGVkIHRoZSBDS19PRkZfVCBjb252ZXJzaW9uLiAgSSBtYWRlCi13aGF0 IHNlZW1lZCB0byBiZSB0aGUgcmlnaHQgYWRqdXN0bWVudHMsIGFuZCB0aGVuIHdhcyBsdWNreSBl bm91Z2ggdG8gZmluZCBhCi1jb21wdXRlciB0aGF0IGhhZCBlbm91Z2ggZnJlZSBkaXNrIHNwYWNl IGZvciBtZSB0byBzZW5kIGEgbGFyZ2UgZmlsZSwKLWludGVycnVwdCBpdCBzZXZlcmFsIHRpbWVz LCByZXNlbmQgaXQsIGFsbCBzZWVtcyB0byBiZSBPSy4gIDI4IE1heSAyMDA2LgotTGF0ZXIgU2Nv dHQgdmVyaWZpZWQgdGhlc2UgY2hhbmdlcyBpbmRlcGVuZGVudGx5IGZvciBMaW51eCwgYnV0IHRo ZSBwcm9ibGVtcwotaW4gSVJJWCByZW1haW4uCi0KLVBhdGNoZXMgZnJvbSBTY290dCBLYXN0ZW4g Zm9yIGxhcmdlIGZpbGVzIG9uIElSSVggNi41OiBja2NkZWIuaCwgbWFrZWZpbGUsCi0xMiBKdW4g MjAwNi4KLQotLS0tIERldi4xOSAtLS0KLQotQWRkZWQgYSBuZXcgZnVuY3Rpb24gZm9yIGRlYWxp bmcgd2l0aCBKUEdzIGFuZCBHSUZzOgotCi1cZnBpY3R1cmUoZmlsZW5hbWUsJmEpCi0gIHJldHVy bnMgMCBpZiBmaWxlIG5vdCByZWNvZ25pemVkIG9yIGNhbid0IGJlIG9wZW5lZDsKLSAgcmV0dXJu cyAxIGlmIGxhbmRzY2FwZSwgMiBpZiBwb3J0cmFpdCBvciBzcXVhcmUuCi0gIElmIGFycmF5IGdp dmVuLCBlbGVtZW50IDEgaXMgd2lkdGgsIGVsZW1lbnQgMiBpcyBoZWlnaHQuCi0KLWNrdXVzci5o LCBja3V1czQuYywgMTkgSnVuIDIwMDYuCi0KLVNjb3R0IEthc3RlbiByZXBvcnRzIHRoYXQgdGhl IEZUUCBjbGllbnQgY2FuIHRyYW5zZmVyIGxhcmdlIGZpbGVzIE9LLCBhdAotbGVhc3QgaW4gTGlu dXgsIGJ1dCBoYXMgdHJvdWJsZSB3aXRoIHJlY292ZXJ5OgotCi0gLiBLZXJtaXQgdGFrZXMgYSB2 ZXJ5IGxvbmcgdGltZSB0byBzdGFydCB0aGUgdHJhbnNmZXIsIHNvbWV0aW1lcyBvdmVyCi0gICAz MCBtaW51dGVzLiAgU3VzcGVjdCB0aGUgZnRwIHNlcnZlciBpcyBjb3VudGluZyB0aGUgYnl0ZXMg aW4gYSBsb25nIGZpbGU/Ci0gICBPciBtYXliZSBpdCdzIGEgdGV4dC1tb2RlIHRyYW5zZmVyIGFu ZCBpdCdzIGNvdW50aW5nIHRoZSBsaW5lcz8gIFByb2JhYmx5Ci0gICBpbiByZXNwb25zZSB0byBL ZXJtaXQncyBTSVpFIGNvbW1hbmQuCi0KLSAuIFRoZSBzaXplIHNob3duIGluIHRoZSBGVCBkaXNw bGF5IGlzIHdyb25nIGJ5IGEgcmFuZG9tIGFtb3VudC4gIEFuZCBvZgotICAgY291cnNlIHNvIGFy ZSB0aGUgcHJvZ3Jlc3MgYmFyLCBwZXJjZW50IGRvbmUsIGFuZCB0aW1lIHJlbWFpbmluZy4KLQot IC4gVGhlIGZpbGUsIGhvd2V2ZXIsIGlzIHRyYW5zZmVycmVkIGNvcnJlY3RseS4gIFJFR0VUIHdv cmtzIGNvcnJlY3RseSB0b28uCi0KLUkgdHJpZWQgc2V0dGluZyB1cCBhIHRlc3Qgc2NlbmFyaW8g bG9jYWxseSBidXQgb3VyIFNvbGFyaXMgRlRQIHNlcnZlciBkb2VzCi1ub3Qgc3VwcG9ydCBsYXJn ZSBmaWxlczoKLQotICBGVFAgU0VOVCBbU0laRSBCSUdGSUxFXQotICBGVFAgUkNWRCBbNTUwIEJJ R0ZJTEU6IG5vdCBhIHBsYWluIGZpbGUuXQotICBGVFAgU0VOVCBbUEFTVl0KLSAgRlRQIFJDVkQg WzIyNyBFbnRlcmluZyBQYXNzaXZlIE1vZGUgKDEyOCw1OSw0OCwyNCwyNDYsMzcpXQotICBGVFAg U0VOVCBbUkVUUiBCSUdGSUxFXQotICBGVFAgUkNWRCBbNTUwIEJJR0ZJTEU6IFZhbHVlIHRvbyBs YXJnZSBmb3IgZGVmaW5lZCBkYXRhIHR5cGUuXQotCi1DcmVhdGVkIHRoZSBzYW1lIDNHQiBvbiBh IFRydTY0IFVuaXggc3lzdGVtIHRoYXQgYWxsb3dzIEZUUCBhY2Nlc3MuICBNYWRlCi10aGUgY29u bmVjdGlvbiBmcm9tIEMtS2VybWl0IG9uIFNvbGFyaXMgKDMyLWJpdCB3aXRoIExGUyk6Ci0KLSAg MTY6NDY6MTIuOTA4IEZUUCBTRU5UIFtTSVpFIEJJR0ZJTEVdCi0gIDE2OjQ2OjEyLjk0NyBGVFAg UkNWRCBbMjEzIDMwMDAwMDAwMDFdCi0KLU5vdGUgdGhhdCBpdCB0YWtlcyBsZXNzIHRoYW4gaGFs ZiBhIHNlY29uZCB0byBnZXQgdGhlIHJlcGx5LiAgTm93IEkgc3RhcnQKLXRoZSBkb3dubG9hZCBh bmQgdGhlbiBpbnRlcnJ1cHQgaXQgYXQgYWJvdXQgMiU6Ci0KLSAgMTY6NDY6MTIuOTc5IEZUUCBT RU5UIFtUWVBFIEldCi0gIDE2OjQ2OjEzLjE3NCBGVFAgUkNWRCBbMjAwIFR5cGUgc2V0IHRvIEku XQotICAxNjo0NjoxMy4yMjYgRlRQIFNFTlQgW1BBU1ZdCi0gIDE2OjQ2OjEzLjI2MiBGVFAgUkNW RCBbMjI3IEVudGVyaW5nIFBhc3NpdmUgTW9kZSAoMTUsMTcwLDE3OCwxNzEsMTEsMzcpXQotICAx Njo0NjoxMy4yOTkgRlRQIFNFTlQgW1JFVFIgQklHRklMRV0KLSAgMTY6NDY6MTMuMzM3IEZUUCBS Q1ZEIFsxNTAgT3BlbmluZyBCSU5BUlkgbW9kZSBkYXRhIGNvbm5lY3Rpb24gZm9yIEJJR0ZJTEUu Ll0KLSAgMTY6NDc6MjQuODk1IEZUUCBSQ1ZEIFs0MjYgVHJhbnNmZXIgYWJvcnRlZC4gRGF0YSBj b25uZWN0aW9uIGNsb3NlZC5dCi0gIDE2OjQ3OjI0LjkzNCBGVFAgUkNWRCBbMjI2IEFib3J0IHN1 Y2Nlc3NmdWxdCi0gIDE2OjQ3OjI0Ljk5MSBGVFAgU0VOVCBbTURUTSBCSUdGSUxFXQotICAxNjo0 NzoyNS4wMjggRlRQIFJDVkQgWzIxMyAyMDA2MDcwNjIwNDQ1OF0KLQotTm93IEkgZG8gYSBSRUdF VDoKLQotICAxNjo1MTo1NS4zMjEgRlRQIFNFTlQgW1BBU1ZdCi0gIDE2OjUxOjU1LjM1NyBGVFAg UkNWRCBbMjI3IEVudGVyaW5nIFBhc3NpdmUgTW9kZSAoMTUsMTcwLDE3OCwxNzEsMTEsNDMpXQot ICAxNjo1MTo1NS4zOTQgRlRQIFNFTlQgW1JFU1QgMTIyNzM2NjQwXQotICAxNjo1MTo1NS40MzAg RlRQIFJDVkQgWzM1MCBSZXN0YXJ0aW5nIGF0IDEyMjczNjY0MC4gU2VuZCBTVE9SRSBvciBSRVRS SUVWRS4uXQotICAxNjo1MTo1NS40MzEgRlRQIFNFTlQgW1JFVFIgQklHRklMRV0KLSAgMTY6NTE6 NTUuNDY5IEZUUCBSQ1ZEIFsxNTAgT3BlbmluZyBCSU5BUlkgbW9kZSBkYXRhIGNvbm5lY3Rpb24g Zm9yIEJJR0ZJTEUuLl0KLQotVGhpcyB3b3JrZWQgcGVyZmVjdGx5LCBhcyBmYXIgYXMgSSBjYW4g dGVsbDsgdGhlIEZUIGRpc3BsYXkgcGlja2VkIHVwIGluIHRoZQotcmlnaHQgcGxhY2U7IHRoZSB0 aGVybW9tZXRlciwgcGVyY2VudCBkb25lLCBhbmQgZXN0aW1hdGVkIHRpbWUgcmVtYWluaW5nCi13 ZXJlIHRoZSBzYW1lIGFzIHdoZW4gd2UgbGVmdCBvZmYgbGFzdCB0aW1lLiAgSSBkaWQgdGhlIHNh bWUgdGhpbmcgc2V2ZXJhbAotbW9yZSB0aW1lcywgZXZlcnl0aGluZyB3YXMgT0suICBJdCB3b3Vs ZCBoYXZlIHRha2VuIGEgcmVhbGx5IGxvbmcgdGltZSB0bwotbGV0IHRoaXMgcnVuIHRvIGNvbXBs ZXRpb24sIGJ1dCBJIHRoaW5rIHRoaXMgZGVtb25zdHJhdGVzIHRoYXQgU2NvdHQncwotc3ltcHRv bXMgYXJlIHNlcnZlci1kZXBlbmRlbnQuICBObyBjaGFuZ2VzLiAgNiBKdWx5IDIwMDYuCi0KLUNo ZWNrZWQgY3VycmVudCBjb2RlIG9uIFZNUyA4LjItMSBvbiBJQTY0IC8gVUNYIDUuNSwgYnVpbGRz IGZpbmUuCi1ObyBjaGFuZ2VzLiAgVXBkYXRlZCBsaXN0aW5nIGF0IEhQLiAgNiBKdWx5IDIwMDYu Ci0KLUNoZWNrZWQgRlRQIEdFVCBvZiBsYXJnZSBmaWxlIGluIEFTQ0lJIG1vZGUgYWdhaW5zdCBU cnU2NCBGVFAgc2VydmVyLiAgSXQKLXdhcyBmaW5lLCBhbmQgdGhlcmUgd2FzIG5vIGRlbGF5IGlu IHRoZSBzZXJ2ZXIncyByZXNwb25zZSB0byBvdXIgU0laRSBjb21tYW5kCi0oYXMgdGhlcmUgd291 bGQgYmUgaWYgaXQgd2VyZSBzY2FubmluZyB0aGUgZW50aXJlIGZpbGUgdG8gY291bnQgaG93IG1h bnkKLWJ5dGVzIHdvdWxkIGJlIHJlcXVpcmVkIHRvIHNlbmQgaXQgaW4gdGV4dCBtb2RlKS4gIDcg SnVsIDIwMDYuCi0KLVRlc3RlZCBGVFAgUFVUIGJpZyBmaWxlIGFnYWluc3QgVHJ1NjQsIE9LLiAg RGl0dG8gRlRQIFJFU0VORCBiaWcgZmlsZToKLQotICBDLUtlcm1pdD5yZXNlbmQgQklHRklMRQot ICAgUFVUIEJJR0ZJTEUgKGJpbmFyeSkgKDMwMDAwMDAwMDEgYnl0ZXMpLS0tPiBQQVNWCi0gIDIy NyBFbnRlcmluZyBQYXNzaXZlIE1vZGUgKDE1LDE3MCwxNzgsMTcxLDEzLDE4NikKLSAgLS0tPiBT SVpFIEJJR0ZJTEUKLSAgMjEzIDM0MzIxMTI4MAotICAtLS0+IE1EVE0gQklHRklMRQotICAyMTMg MjAwNjA3MDcxNDEyNDMKLSAgLS0tPiBBUFBFIEJJR0ZJTEUKLSAgMTUwIE9wZW5pbmcgQklOQVJZ IG1vZGUgZGF0YSBjb25uZWN0aW9uIGZvciBCSUdGSUxFICgxMjguNTkuNTkuNTYsNDU0NzApLgot Ci1NYWRlIFJFUFVUIGEgc3lub255bSBmb3IgUkVTRU5ELiAgY2t1dXNyLmMsIDcgSnVsIDIwMDYu Ci0KLUFkZGVkIEZUUCBSRVBVVCBhbmQgRlRQIFJFU0VORCBzaW5jZSBwcmV2aW91c2x5IHRoZXJl IHdhcyBubyBGVFAtcHJlZml4ZWQKLWNvbW1hbmQgZm9yIHJlY292ZXJpbmcgdXBsb2Fkcywgb25s eSB0aGUgcmVndWxhciBSRVNFTkQgY29tbWFuZCwgd2hpY2ggbWlnaHQKLW5vdCBoYXZlIGJlZW4g b2J2aW91cyB0byBwZW9wbGUuICBja2NmdHAuYywgNyBKdWwgMjAwNi4KLQotQWRkZWQgaGVscCB0 ZXh0IGZvciBGVFAgUkVTRU5EIGFuZCBSRVBVVCBhbmQgYW1lbmRlZCBSRVNFTkQgaGVscCB0ZXh0 LgotY2tjZnRwLmMsIGNrdXVzMi5jLCA3IEp1bCAyMDA2LgotCi1DaGFuZ2VkIG5hbWUgb2YgXGZw aWN0dXJlKCkgdG8gXGZwaWN0dXJlaW5mbygpIGFuZCBhZGRlZCBoZWxwIHRleHQuICBCeSB0aGUK LXdheSwgSW1hZ2VNYWdpY2sgY2FuIGRvIHRoaXMgdG9vOiBpZGVudGlmeSAtZm9ybWF0ICIldyAl aCIgZHNjZjA1MjAuanBnLgotVGhlIGFkdmFudGFnZSBvZiBoYXZpbmcgaXQgaW4gS2VybWl0IGlz IHRoYXQgbm90IGV2ZXJ5Ym9keSBoYXMgSW1hZ2VNYWdpY2suCi1ja3V1c1syNF0uYywgNyBKdWwg MjAwNi4KLQotQ2hhbmdlZCB0aGUgbnVtZXJpYyBjb21wYXJpc29ucyA9IDwgPiA8PSA+PSAhPSB0 byBhbGxvdyBsb25nIGludGVnZXJzIGJ5Ci1jaGFuZ2luZyB0aGUgZGF0YSB0eXBlIHRvIENLX09G Rl9ULCBldGMuICBja3V1czYuYywgNyBKdWwgMjAwNi4KLQotTm90aWNlZCB0aGF0IFxma2V5d29y ZHZhbHVlKGZvbz10aGlzIGlzIGEgc3RyaW5nKSBvbmx5IGtlcHQgdGhlIGZpcnN0IHdvcmQuCi1G aXhlZCBpdCB0byBrZWVwIHRoZSB3aG9sZSBkZWZpbml0aW9uLiAgQWxzbyBhZGRlZCBcZmt3dmFs dWUoKSBhcyBhIGJyaWVmZXIKLXN5bm9ueW0uICBja3V1czQuYywgNyBKdWwgMjAwNgotCi1Tb21l dGltZXMgd2Ugd2FudCB0byBjaGVjayBpZiBhIGZpbGUncyBzdGF0dXMgYmVmb3JlIHdlJ3ZlIEZP UEVOJ2QgaXQsIGluCi13aGljaCBjYXNlIHRoZSBjaGFubmVsIHZhcmlhYmxlIGlzIGxpa2VseSB0 byBiZSBlbXB0eSBhbmQgXGZfc3RhdHVzKFwlYykKLXdvdWxkIGdldCBhbiBlcnJvci4gIE1ha2lu ZyB0aGUgb2J2aW91cyBjaGFuZ2UgZGlkbid0IGZpeCB0aGlzLCBob3dldmVyLiAgSXQKLXR1cm5z IG91dCB0aGF0IHRoZSBmdW5jdGlvbiBldmFsdWF0b3IgZmFpbGVkIHRvIGFkanVzdCBhcmduIChh cmd1bWVudCBjb3VudCkKLXdoZW4gdHJhaWxpbmcgYXJndW1lbnRzIHdlcmUgZW1wdHksIGFuZCBh cmduIHdhcyBiZWluZyB1c2VkIGluIHRoaXMgY2FzZSwKLWFuZCBwcm9iYWJseSBvdGhlcnMsIHRv IHRlc3Qgd2hldGhlciBhbiBhcmd1bWVudCBleGlzdGVkLiAgSSBhZGRlZCBjb2RlIHRvCi1hZGp1 c3QgYXJnbiB0byByZWZsZWN0IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHVwIHRvIGFuZCBpbmNs dWRpbmcgdGhlCi1yaWdodG1vc3Qgbm9uLWVtcHR5IG9uZS4gIGNrdXVzNC5jLCA3IEp1bCAyMDA2 LgotCi1GaXhlZCBcZnN0cmlwYigpIHRvIG5vdCBkdW1wIGNvcmUgaWYgc2Vjb25kIGFyZ3VtZW50 IGlzIG1pc3NpbmcuCi1ja3V1czQuYywgNyBKdWwgMjAwNi4KLQotRGlzY292ZXJlZCB0aGF0IGl0 IHdhcyBub3Qgb2J2aW91cyB3aGF0IHBhdHRlcm4gdG8gdXNlIHRvIG1hdGNoIHN0cmluZ3MKLWVu Y2xvc2VkIGluIHNxdWFyZSBicmFja2V0cy4gICJpZiBtYXRjaCBbYWJjXSBcWypcXSIgZGlkbid0 IHdvcmsuICBOZWl0aGVyCi1kaWQgdmFyaW91cyBvdGhlciB0cmlja3MgbGlrZSBOQ1JzIGZvciB0 aGUgYnJhY2tldHMuICBIb3dldmVyLCAiaWYgbWF0Y2gKLVthYmNdIFxcWypcXF0iIGRvZXMgd29y ay4gIFRyeWluZyB0byBmaXggdGhpcyB3b3VsZCBubyBkb3VidCBicmVhayAxMDAgb3RoZXIKLXRo aW5ncywgc28gbGV0J3MgY2FsbCBpdCBhIGZlYXR1cmUuICA3IEp1bCAyMDA2LgotCi1BZGRlZCBc ZmdldHBpZGluZm8obikgdG8gcmV0dXJuIGluZm8gYWJvdXQgYSBwcm9jZXNzIElEOyBmb3Igbm93 IGl0IHNpbXBseQotcmV0dXJucyAxIGlmIHRoZSBwcm9jZXNzIGlzIGFsaXZlIGFuZCAwIGlmIG5v dCAob3IgLTEgaWYgdGhlIGFyZ3VtZW50IGlzCi1iYWQgb3IgbWlzc2luZyBvciBvbiBhbnkga2lu ZCBvZiBlcnJvcikuICBja3V1c3IuaCwgY2t1dXNbMjRdLmMsIDcgSnVsIDIwMDYuCi0KLVRoZSAi d2hlcmUtZGlkLW15LWZpbGUtZ28iIG1lc3NhZ2Ugc2VlbWVkIHRvIGJlIGVuZGluZyB3aXRoIGEg TEYgcmF0aGVyCi10aGFuIENSTEYsIHByb2JhYmx5IGJlY2F1c2UgdGhlIHRlcm1pbmFsIG1vZGVz IGhhZCBub3QgeWV0IGJlZW4gcmVzdG9yZWQsCi1sZWF2aW5nIHRoZSBuZXh0IHByb21wdCBoYW5n aW5nIGJlbG93IGl0LCByYXRoZXIgdGhhbiBvbiB0aGUgbGVmdCBtYXJnaW4sCi1pZiBDLUtlcm1p dCBleGl0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRyYW5zZmVyLiAgRml4ZWQgYnkgY2hhbmdp bmcKLWFsbCBcbidzIHRvIFxyXG4ncyBpbiB3aGVyZW1zZygpOiBja2Nwcm8udywgOCBKdWwgMjAw Ni4KLQotQWRkZWQgXHYobGFzdGt3dmFsKSBzbyB3ZSBjYW4gcmV0cmlldmUgcHJvZ3JhbW1hdGlj YWxseSB0aGUga2V5d29yZCBtb3N0Ci1yZWNlbnRseSBwcm9jZXNzZWQgYnkgXGZrZXl3b3JkdmFs KCkuICBja3V1c3IuaCwgY2t1dXM0LmMsIDkgSnVsIDIwMDYuCi0KLS0tLSBEZXYuMjAgLS0tCi0K LUFkZGVkICNpZmRlZiBTVjY4LCAjaW5jbHVkZSA8dW5pc3RkLmg+LCAjZW5kaWYgYmVjYXVzZSBV bml4IFN5c3RlbSBWLzY4IG9uCi1Nb3Rvcm9sYSBjaG9rZWQgb24gdGhlIFNFRUtfQ1VSIHJlZmVy ZW5jZSB3aXRob3V0IGl0LiAgY2t1dXM0LmMsIDEwIEp1bCAyMDA2LgotCi1NYWtlIFxma2V5d29y ZHZhbCh4eHgpIHVuZGVmaW5lIHh4eCAoaS5lLiB3aGVuIGEga2V5d29yZCBpcyBnaXZlbiB3aXRo IG5vCi12YWx1ZSkuICBUaGlzIHdheSBjb21tYW5kLWxpbmUga2V5d29yZHMgd2lsbCBhbHdheXMg b3ZlcnJpZGUgcHJlZXhpc3RpbmcKLWRlZmF1bHQgZGVmaW5pdGlvbnMsIHdoZXRoZXIgdGhleSBo YXZlIGEgdmFsdWUgb3Igbm90LCB3aGljaCBtYWtlcyBpdCBlYXNpZXIKLXRvIHBhcnNlIGNvbW1h bmQgbGluZXMgbGlrZSAiZm9vPWJhciBibGFoIHh4PXl5Ii4gIGNrdXVzWzI0XS5jLCAxMiBKdWwg MjAwNi4KLQotT24gMjkgTm92IDIwMDUgSSBjaGFuZ2VkIElGIEtFUkJBTkcgdG8gc29sdmUgYSBw cm9ibGVtIChzZWUgZW50cnkgZm9yIHRoYXQKLWRhdGUpLCBidXQgaW50cm9kdWNlZCBhIG5ldyBv bmU7IG5hbWVseSB0aGF0IHlvdSBjYW4ndCBoYXZlIChlLmcuKSAgYSBGQVRBTAotbWFjcm8gdGhh dCB1c2VzIElGIEtFUkJBTkcgdG8gZGVjaWRlIHdoZXRoZXIgdG8gRVhJVCBhbGwgdGhlIHdheSBv ciBTVE9QCi1iYWNrIHRvIHRoZSBwcm9tcHQuICBDaGFuZ2VkIGl0IGFnYWluLCB0aGlzIHRpbWUg dG8gcmVxdWlyZSBub3QgdGhhdCB0aGUKLWNvbW1hbmQgbGV2ZWwgYmUgMSwgYnV0IHRoYXQgdGhl IGNvbW1hbmQgKmZpbGUqIGxldmVsIGJlIDAgKGkuZS4gdGhhdCB3ZSBhcmUKLWluIHRoZSB0b3At bGV2ZWwgY29tbWFuZCBmaWxlLCBpcnJlc3BlY3RpdmUgb2YgdGhlIGNvbW1hbmQgb3IgbWFjcm8g bGV2ZWwsCi1idXQgbm90IGluIGEgc3ViZmlsZSkuICBja3V1czYuYywgMTIgSnVsIDIwMDYuCi0K LUl0IGlzIHVuaGVscGZ1bCB3aGVuIEtlcm1pdCBnZXRzIGEgc3ludGF4IGVycm9yIGluIHRoZSBt aWRkbGUgb2YgYSBiaWcKLWNvbXBvdW5kIHN0YXRlbWVudCBibG9jayAoZS5nLiBGT1Igb3IgV0hJ TEUgbG9vcCkgYW5kIGR1bXBzIG91dCB0aGUgd2hvbGUKLXRoaW5nIGluIGFuIGVycm9yIG1lc3Nh Z2UuICBJIGNoYW5nZWQgdGhlIHR3byBwbGFjZXMgd2hlcmUgdGhpcyBjYW4gaGFwcGVuCi10byBj YWxsIGEgbmV3IHJvdXRpbmUgdGhhdCwgaW5zdGVhZCBvZiBkdW1waW5nIG91dCB0aGUgZW50aXJl IGNtZGJ1ZiwKLWNoZWNrcyBpdHMgbGVuZ3RoIGZpcnN0IGFuZCBpZiBpdCdzIG1vcmUgdGhhbiBh IGxpbmUgbG9uZywgdHJ1bmNhdGVzIGl0Ci1hbmQgYWRkcyBhbiBlbGxpcHNpcy4gIGNrdXVzNi5j LCAxMiBKdWwgMjAwNi4KLQotVGhlIG5ldyBSRU5BTUUgY29tbWFuZCBkaWRuJ3QgZ2l2ZSB2ZXJ5 IGdvb2QgZXJyb3IgbWVzc2FnZXMsIGUuZy4gaWYgdGhlCi1maWxlc3BlYyBkaWRuJ3QgbWF0Y2gg YW55IGZpbGVzLiAgRml4ZWQgaW4gZG9yZW5hbSgpOiBja3V1czYuYywgMTIgSnVsIDIwMDYuCi0K LUZpeGVkIERJUiAvVE9QIHRvIHdvcmsgaWYgdGhlIC9UT1A6biBhcmd1bWVudCB3YXMgb21pdHRl ZCwgZGVmYXVsdGluZwotdG8gMTAuICBkb215ZGlyKCk6IGNrdXVzNi5jLCAxMiBKdWwgMjAwNi4K LQotQWRkZWQgRElSIC9DT1VOVDp2IHRvIGNvdW50IHRoZSBudW1iZXIgb2YgZmlsZXMgdGhhdCBt YXRjaCB0aGUgZ2l2ZW4KLWNyaXRlcmlhIGFuZCBzdG9yZSByZXN1bHQgaW4gdGhlIHZhcmlhYmxl IHYuICBja3V1c3IuaCwgY2t1dXNbcjI2XS5jLAotMjQgQXVnIDIwMDYuCi0KLUFkZGVkIEhESVJF Q1RPUlkgYXMgYW4gaW52aXNpYmxlIHN5bm9ueW0gZm9yIERJUiAvU09SVDpTSVpFIC9SRVZFUlNF LgotQ2FuIGJlIHVzZWQgd2l0aCBvdGhlciBzd2l0Y2hlcywgb2YgY291cnNlLCBzbyAoZS5nLikg SEQgL1RPUCBzaG93cyB0aGUKLXRlbiBiaWdnZXN0IGZpbGVzLiAgY2t1dXNyLmgsIGNrdXVzW3Iy Nl0uYywgMjQgQXVnIDIwMDYuCi0KLURJUiAvRk9MTE9XTElOS1MgYW5kIC9OT0ZPTExPV0xJTktT IGFsd2F5cyBkaWQgdGhlIHNhbWUgdGhpbmc7IHRoZSBzd2l0Y2gKLXdhcyBpZ25vcmVkLCBhIHN5 bWxpbmsgaXMgYWx3YXlzIGZvbGxvd2VkLiAgRml4ZWQgaW4gY2t1dXM2LmMsIDI0IEF1ZyAyMDA2 LgotCi1BZGRlZCBESVIgL05PTElOS1MsIHdoaWNoIG1lYW5zIGRvbid0IHNob3cgb3IgY291bnQg c3ltbGlua3MgYXQgYWxsLgotY2t1dXNyLmgsIGNrdXVzW3IyNl0uYywgMjQgQXVnIDIwMDYuCi0K LUJ1aWxkIG9uIFNvbGFyaXMgOSBhbmQgTmV0QlNEIDMuMCwgMjQgQXVnIDIwMDYuCi0KLUFkZGVk IGEgbWlzc2luZyBkZWZpbml0aW9uIGZvciBMT0NLX0RJUiBpbiB0aGUgTGludXggSEFWRV9CQVVE Qk9ZIGNhc2UsCi1zdWdnZXN0ZWQgYnkgR2VycnkgQmVsYW5nZXIuICBja3V0aW8uYywgNiBPY3Qg MjAwNi4KLQotU3VnZ2VzdGVkIGJ5IEppbSBDcmFwdWNoZXR0ZXM6IFx2KGRpYWxtZXNzYWdlKSBp cyB0aGUgdGV4dCBzdHJpbmcKLWNvcnJlc3BvbmRpbmcgdG8gXHYoZGlhbHN0YXR1cykuICBja3V1 c3IuaCwgY2t1dXM0LmMsIDYgT2N0IDIwMDYuCi0KLVNvZXdvbm8gRWZmZW5kaSBzZW50IGNvZGUg Zm9yIGV4aXQgc2VxdWVuY2UgdG8gbGVhdmUgRFRSIG9uOyB0aGlzIGFtb3VudGVkCi10byB1bnNl dHRpbmcgSFBVQ0wgaW4gY19jZmxhZy4gIEkgZGlkIGl0IGEgc2ltcGxlciB3YXksIGhvcGVmdWxs eSBwb3J0YWJsZQotdG8gYWxsIFVuaXhlcywgYnV0IHdobyBrbm93cyBhdCB0aGlzIGxhdGUgZGF0 ZS4gIFRoZSBjb2RlIGlzIGluc2lkZQotI2lmbmRlZiBDS19OT0hVUENMLi4jZW5kaWYgaW4gY2Fz ZSBpdCBjYXVzZXMgdHJvdWJsZS4gIEl0IGlzIGV4ZWN1dGVkIGlmCi1TRVQgRVhJVCBIQU5HVVAg aXMgT0ZGIGFuZCBhIHNlcmlhbCBwb3J0IHdhcyBvcGVuIGF0IHRoZSB0aW1lIEtlcm1pdCBleGl0 cwotKG9yIGNsb3NlcyBpdCBleHBsaWNpdGx5KS4gIHR0Y2xvcygpOiBja3V0aW8uYywgNiBPY3Qg MjAwNi4KLQotQnVpbHQgb24gU29sYXJpczkvU3BhcmM7IEZyZWVCU0QgNi4yL0FNRDY0OyBOZXRC U0QgMy4wL2kzODY7IEhQLVVYIDExaSB2MjsKLVNDTyBPU1I2LjAwLgotCi0tLS0gRGV2LjIxIC0t LQotCi1BZGRlZCBuZXRic2Qrb3BlbnNzbCB0YXJnZXQgdG8gbWFrZWZpbGUuICBCdWlsdCBPSyAo TmV0QlNEIDMuMCwgT3BlblNTTAotMC45LjdkKSBleGNlcHQgd2l0aCBzb21lIHdhcm5pbmdzIGlu IGNrX2NycC5jLiAgQ29ubmVjdHMgYW5kIGxvZ3MgaW4gT0sgdG8gYQotc2VjdXJlIHNpdGUuICAx MCBPY3QgMjAwNi4KLQotQWRkZWQgYSBkZWJ1ZyBzdGF0ZW1lbnQgdG8gZnRwX2hvb2t1cCgpIHRv IHJlY29yZCB0aGUgVENQIHBvcnQgdGhhdCB3YXMgdXNlZC4KLWNrY2Z0cC5jLCAxMSBPY3QgMjAw Ni4KLQotQnVpbHQgd2l0aCBPcGVuU1NMIDAuOS43bCBvbiBTb2xhcmlzIDkuICBCdWlsdCB3aXRo IE9wZW5TU0wgMC45LjhkIG9uCi1Tb2xhcmlzIDk7IGNvbm5lY3RzIGFuZCBsb2dzIGluIHRvIGEg c2VjdXJlIHNpdGUuICAxMSBPY3QgMjAwNi4KLQotVGhlIG5ldyBSRU5BTUUgY29tbWFuZCBkaWRu J3Qgd29yayBpZiBib3RoIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG5hbWVzCi1pbmNsdWRl ZCBkaXJlY3Rvcnkgc2VnbWVudHMsIGUuZy4gInJlbmFtZSAvdG1wL2ZvbyB+L2JhciIgKHNlZSBu b3RlcyBvZgotNCBNYXkgMjAwNikuICBUaGlzIHdhcyBmaXhlZCBpbiByZW5hbWVvbmUoKSBieSBh IHNwZWNpYWwgY2FzZSBpbiB3aGljaAotdGhlIHNlY29uZCBhcmd1bWVudCBpcyBnaXZlbiBidXQg aXQgaXMgYSBmaWxlbmFtZSwgbm90IGEgZGlyZWN0b3J5IG5hbWUuCi1ja3V1czYuYywgMTEgT2N0 IDIwMDYuCi0KLUZpeGVkIHVuZ3VhcmRlZCByZWZlcmVuY2UgdG8gZGlhbG1zZ1tdIGZvciBcZmRp YWxtZXNzYWdlKCksIG5vdGljZWQgYnkKLUdlcnJ5IEJlbGFuZ2VyLiAgY2t1dXM0LmMsIDEyIE9j dCAyMDA2LgotCi1BZGRlZCBhIFRPVUNIIGNvbW1hbmQgdGhhdCBkb2VzIHdoYXQgVU5JWCB0b3Vj aCBkb2VzOiBjcmVhdGVzIHRoZSBmaWxlIGlmIGl0Ci1kb2VzIG5vdCBleGlzdCwgdXBkYXRlcyB0 aGUgdGltZXN0YW1wIGlmIGl0IGRvZXMuICBJZiBhIHdpbGRjYXJkIGlzIGdpdmVuLAotaXQgb3Bl cmF0ZXMgb25seSBvbiBleGlzdGluZyBmaWxlcy4gIEl0IHNoYXJlcyB0aGUgRElSRUNUT1JZIGNv bW1hbmQgcGFyc2VyLAotc28gYWxsIHRoZSBzYW1lIGZpbGUgc2VsZWN0aW9uIHN3aXRjaGVzIGNh biBiZSBnaXZlbi4gIGNrdXVzci5bY2hdLAotY2t1dXNbMjZdLmMsIDEyIE9jdCAyMDA2LgotCi1Q ZXRlckUgbm90aWNlZCB0aGF0IGlmIHlvdSBGT1BFTiBhIGZpbGUsIGRvIHNvbWUgc2Vla3Mgb3Ig cmVhZHMsIHRoZW4gRkNMT1NFCi1pdCwgdGhlbiBGT1BFTiBpdCBhZ2FpbiAob3Igb3BlbiBhIGRp ZmZlcmVudCBvbmUpLCBzb21lIG9mIHRoZSBvbGQKLWluZm9ybWF0aW9uIGlzIHN0aWxsIHRoZXJl IChlLmcuIGN1cnJlbnQgbGluZSBudW1iZXIpLiAgVGhpcyBpcyBhbiBhcnRpZmFjdAotb2YgdGhl IGNoYW5nZXMgb2YgTWF5IDR0aC4gIE5vdyB0aGUgZmlsZSBjbG9zaW5nIGFuZCBvcGVuaW5nIHJv dXRpbmVzIGFyZSBhCi1iaXQgbW9yZSBjYXJlZnVsIGFib3V0IHNjcnViYmluZyBhbmQgaW5pdGlh bGl6aW5nIHRoZSBmaWxlIGluZm8gc3RydWN0LgotY2t1dXM3LmMsIDEyIE9jdCAyMDA2LgotCi0t LS0gRGV2LjIyIC0tLQotCi1CdWlsdCBPSyBvbiBSZWQgSGF0IExpbnV4IEFTNCB3aXRoIGJvdGgg Im1ha2UgbGludXgiIGFuZCAibWFrZSBsaW51eG5jIi4gCi0xNSBPY3QgMjAwNi4KLQotRElSRUNU T1JZIC9CUklFRiBpZ25vcmVkIGZpbGUgc2VsZWN0aW9uIHN3aXRjaGVzIGFuZCBhbHdheXMgbGlz dGVkIGFsbAotZmlsZXMuICBUaGlzIHdhcyBiZWNhdXNlIG9mIGhvdyBJIGNsZXZlcmx5IGNhbGxl ZCBmaWxoZWxwKCkgKHRoZSByb3V0aW5lCi10aGF0IGxpc3RzIG1hdGNoaW5nIGZpbGVzIHdoZW4g PyBpcyB0eXBlZCBpbiBhIGZpbGVuYW1lIGZpZWxkKSBhbmQsIG9mCi1jb3Vyc2UsIGZpbGhlbHAo KSBkb2Vzbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIERJUkVDVE9SWSBjb21tYW5kJ3MgZmls ZQotc2VsZWN0aW9ucy4gIENoYW5nZWQgZmlsaGVscCgpIHRvIGFjY2VwdCBhbGwgdGhlIGFyZ3Mg bmVlZGVkIGZvciBwYXNzaW5nCi1hbG9uZyB0byBmaWxlc2VsZWN0KCksIHJlbmFtZWQgaXQgdG8g eGZpbGhlbHAoKSwgYW5kIG1hZGUgYSBmaWxoZWxwKCkgc3R1YgotdGhhdCBjaGFpbnMgdG8geGZp bGhlbHAoKSB3aXRoIG51bGwgc2VsZWN0aW9ucy4gIGNrY2tlci5oLCBja3VjbWQuW2NoXSwKLWNr dXVzNi5jLCAyOSBOb3YgMjAwNi4KLQotU0hPVyBDT05ORUNUSU9OIGZvciBhbiBTU0ggY29ubmVj dGlvbiBzYWlkIHRoZSBjb25uZWN0aW9uIHR5cGUgd2FzICJORVQiCi1yYXRoZXIgdGhhbiAiU1NI Ii4gIEZpeGVkIGluIGRvbG9nbmV0KCk6IGNrdXVzMy5jLCAyOSBOb3YgMjAwNi4KLQotU0hPVyBD T05ORUNUSU9OIGRpZG4ndCBzaG93IHRoZSBUQ1AgcG9ydCBudW1iZXIuICBUaGlzIGNvbW1hbmQg d29ya3MgYnkKLXBhcnNpbmcgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBsb2cgZW50cnkgc3RyaW5n LCB3aGljaCBkb2Vzbid0IGhhdmUgYSBmaWVsZAotZm9yIHRoaXMsIGJ1dCB3aGljaCBzb21ldGlt ZXMgc2hvd3MgdGhlIHBvcnQgbnVtYmVyIGFzIHBhcnQgb2YgdGhlIGhvc3RuYW1lCi0oYnV0IG1v cmUgb2Z0ZW4gbm90KS4gIEFkZGVkIGNvZGUgdG8gZG9sb2duZXQoKSB0byBsb2cgdGhlIFRDUCBw b3J0IG51bWJlciwKLWlmIGtub3duLiAgVGhpcyBpbnZvbHZlZCBhZGRpbmcgYSBnZXR0Y3Bwb3J0 KCkgZnVuY3Rpb24gdG8gY2tjbmV0LmMuCi1ja2NuZXQuW2NoXSwgY2t1dXMzLmMsIDI5IE5vdiAy MDA2LgotCi1UaGlzIHdhcyBpbXBvc3NpYmxlOiBkZWYgXCUxIHVwcGVyLCBlY2hvIFxmXCUxKGFi YykgLS0gaS5lLiB0byAiY29tcG9zZSIgYQotZnVuY3Rpb24gbmFtZS4gIEZpeGVkIGluIHp6c3Ry aW5nKCkuICBCdXQgbm90ZSB0aGF0IGl0J3Mgc3RpbGwgbm90IHBvc3NpYmxlCi10byBkbyB0aGlz OiBkZWYgXCUxIFxmdXBwZXIsIGVjaG8gXCUxKGFiYykgLS0gYmVjYXVzZSBhdCB0aGUgcG9pbnQg d2hlcmUKLSJcZnVwcGVyIiBpcyBlbmNvdW50ZXJlZCwgd2hpY2ggaXMgYXV0b21hdGljYWxseSBm ZWQgdG8gZm5ldmFsKCksIHRoZQotYXJndW1lbnQgbGlzdCBoYXNuJ3QgYmVlbiByZWFkIHlldC4g IGNrdXVzNC5jLCAyOSBOb3YgMjAwNi4KLQotVGhlIG1lYW5pbmdsZXNzIExpc3AgY29tbWFuZCAo PSkgd291bGQgY2F1c2UgS2VybWl0IHRvIGhhbmcuICBEdWUgdG8gc29tZQotaWRpb3N5bmNyYWN5 IGluIHRoZSBwYXJzZXIsIGl0IHdvdWxkIHNlZSB0aGlzIGFzICgoPSkgYW5kIHdvdWxkIGdvIGlu dG8KLSJ3YWl0IGZvciB0aGUgY2xvc2luZyBwYXJlbiIgbW9kZS4gIFRoZXJlIHdhcyBhbHJlYWR5 IGEgaGFjayBpbiB0aGUgY29kZSB0bwotY29tcGVuc2F0ZSBmb3IgdGhpcywgYnV0IGl0IGRpZG4n dCB3b3JrLiAgSSBmaXhlZCB0aGUgaGFjayBidXQgSSBkb24ndAotdW5kZXJzdGFuZCB0aGUgcmVh bCBwcm9ibGVtLiAgQW55d2F5LCBjb21wYXJpbmcgS2VybWl0IHdpdGggcmVhbCAoRnJhbnopCi1M aXNwIEkgZGlzY292ZXJlZCB0aGF0IGNvbXBhcmlzb24gb3BlcmF0b3JzIGRvIG5vdCByZXF1aXJl IHR3byBhcmd1bWVudHMsIGFzCi1LZXJtaXQgaGFzIGJlZW4gZG9pbmcsIGFsdGhvdWdoIHRoZXkg ZG8gcmVxdWlyZSBhdCBsZWFzdCBvbmUuICBJIGNoYW5nZWQKLUtlcm1pdCB0byBub3QgcmVxdWly ZSB0d28sIHNvIG5vdyBhbGwgdGhlIGNvbXBhcmlzb24gcHJlZGljYXRlcyBiZWhhdmUKLWV4YWN0 bHkgbGlrZSBGcmFueiBMaXNwLCBpbmNsdWRpbmcgZ2V0dGluZyBhbiBlcnJvciBpZiB0aGVyZSBh cmUgbm8gYXJncykuCi1ja3V1c1tyM10uYywgMjkgTm92IDIwMDYuCi0KLUZyb20gdG8tZG8gbGlz dDogTWFrZSBhIHdheSB0byBpbmhpYml0IHBhdHRlcm4gbWF0Y2hpbmcgaW4gU1dJVENIIGxhYmVs cy4KLUl0J3MgYWxyZWFkeSB0aGVyZTsganVzdCBxdW90ZSB0aGUgd2lsZGNhcmQgY2hhcmFjdGVy czsgdGhlIG9ubHkgdHJpY2sgaXMKLXRoYXQgZm9yIHNvbWUgcmVhc29uIChzdWNoIGFzIHRoYXQg U1dJVENIIGlzIHJlYWxseSBhbiBpbnRlcm5hbGx5IGRlZmluZWQKLW1hY3JvKSwgYSBkb3VibGUg cXVvdGUgaXMgbmVlZGVkOgotCi0gIHN3aXRjaCBcJTEgewotICAgIDphXFwqeiwgZWNobyBsaXRl cmFsbHkgImEqeiIsIGJyZWFrCi0gICAgOmFiY3h5eiwgZWNobyBsaXRlcmFsbHkgImFiY3h5eiIs IGJyZWFrCi0gICAgOmEqeiwgZWNobyBhLi4ueiwgYnJlYWsKLSAgICA6ZGVmYXVsdCwgZWNobyBO TyBNQVRDSAotICB9Ci0KLUluIGZpcnN0IGNhc2UsIHRoZSBhc3RlcmlzayBpcyB0YWtlbiBsaXRl cmFsbHk7IGluIHRoZSB0aGlyZCBpdCdzIGEKLW1ldGFjaGFyYWN0ZXIgYW5kIHRoZSBsYWJlbCBt YXRjaGVzIGFueSBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCAnYScgYW5kCi1lbmRzIHdpdGggJ3on LgotCi1BcnJheSBpbml0aWFsaXphdGlvbiB3b3VsZCBxdWl0IGVhcmx5IGlmIGFueSBpbml0aWFs aXplcnMgd2VyZSB1bmRlZmluZWQsCi1lLmcuICJkZWNsIFwmYVtdID0gXCVhIFwlYiBcJWMiIHdv dWxkIHN0b3AgYXQgdGhlIGZpcnN0IGVsZW1lbnQgaWYgXCViCi13YXMgbm90IGRlZmluZWQsIGV2 ZW4gdGhvdWdoIFwlYyBtaWdodCBiZSBkZWZpbmVkLiAgRml4ZWQgaW4gZG9kY2woKToKLWNrdXVz ci5jLCAzMCBOb3YgMjAwNi4KLQotRElSIC9BUlJBWTphIGZpbGVzcGVjLCB3aGVuIHRoZSBmaWxl c3BlYyBkb2VzIG5vdCBtYXRjaCBhbnkgZmlsZXMsCi10ZXJtaW5hdGVzIHdpdGggdGhlIGFycmF5 IHVuZGVjbGFyZWQuICBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gcmV0dXJuIGEKLWRlY2xhcmVkIGJ1 dCBlbXB0eSBhcnJheSAoXCZhWzBdID0gMCkuICBUaGUgY29kZSBpcyBhbHJlYWR5IHRoZXJlIHRv IGRvCi10aGF0LCBidXQgaXNuJ3Qgd29ya2luZy4gIEFuZCB5ZXQgImRlY2xhcmUgXCZhWzBdIiBk b2VzIGluZGVlZCBjcmVhdGUgYQotMC1lbGVtZW50IGFycmF5ICgic2hvdyBhcnJheSIgc2hvd3Mg YSBkaW1lbnNpb24gb2YgMCkuICBUdXJucyBvdXQgdGhlcmUgd2VyZQotdHdvIHByb2JsZW1zOyBv bmUgd2FzIHRoZSBjYXJlbGVzcyByZWN5Y2xpbmcgb2YgYSBsb2NhbCB2YXJpYWJsZSAoImFycmF5 IiksCi1yZXN1bHRpbmcgaW4gZmFpbHVyZSB0byBjcmVhdGUgXCZhW10gKGJ1dCBub3QgYW55IG90 aGVyIGFycmF5KS4gIEZpeGVkIGluCi1kb215ZGlyKCk6IGNrdXVzNi5jLCAzMCBOb3YgMjAwNi4K LQotVGhlIG90aGVyIHByb2JsZW0gd2FzIHRoYXQgZGNsYXJyYXkoKSwgd2hlbiBjYWxsZWQgd2l0 aCBhbiBhcnJheSBuYW1lIGFuZCBhCi1kaW1lbnNpb24gb2YgemVybywgZG9lcyB0d28gZGlmZmVy ZW50IHRoaW5ncyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgYXJyYXkKLWFscmVhZHkgZXhpc3Rl ZC4gIFRoZXJlIGlzIHN0aWxsIGEgZmFpciBhbW91bnQgb2YgY29uZnVzaW9uIGFib3V0IHdoZXRo ZXIgYQotZGltZW5zaW9uIG9mIDAgaW5kaWNhdGVzIGFuIGFycmF5IHdpdGggMSBlbGVtZW50IChh cyBpdCBzaG91bGQpIG9yIGEKLW5vbmV4aXN0ZW50IGFycmF5LiAgV2UgY2FsbCBkY2xhcnJheSgp IHdpdGggYSBzaXplIG9mIDAgdG8gdW5kZWNsYXJlIGFuCi1hcnJheSBidXQgd2UgYWxzbyBuZWVk IHRvIGFibGUgYWJsZSB0byBkZWNsYXJlIGFuIGFycmF5IHdpdGggb25seSBlbGVtZW50IDAuCi1J IGNoYW5nZWQgZGNsYXJyYXkoKSB0byB0cmVhdCBhIG5lZ2F0aXZlIGRpbWVuc2lvbiBhcyBhIGNv bW1hbmQgdG8gZGVzdHJveQotdGhlIGFycmF5LCBhbmQgMCBvciBwb3NpdGl2ZSBhcyBhIGNvbW1h bmQgdG8gY3JlYXRlIHRoZSBhcnJheSB3aXRoIHRoZSBnaXZlbgotZGltZW5zaW9uLiAgY2t1dXNb cjU2XS5jLCAzMCBOb3YgMjAwNi4KLQotTmV4dCBwcm9ibGVtOiB3aGVuIGNoa2FycmF5KCkgcmV0 dXJucyAwLCB0aGlzIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgdG8KLW1lYW4gdGhlIGFycmF5 IGRvZXMgbm90IGV4aXN0LiAgTG9va3MgbGlrZSB0aGUgb25seSBwbGFjZSB0aGlzIGhhcHBlbmVk IHdhcwotaW4gXGZjb250ZW50cygpOyBmaXhlZCBpbiBja3V1czQuYywgMzAgTm92IDIwMDYuCi0K LUlmIHdlIGluY2x1ZGUgZmlsZSBzZWxlY3RvcnMgd2l0aCBESVIgL0FSUkFZOiZhIGFuZCBzb21l IG9mIHRoZSBmaWxlcyB0aGF0Ci1tYXRjaCB0aGUgZ2l2ZW4gZmlsZXNwZWMgYnV0IGRvbid0IGZp dCB0aGUgc2VsZWN0b3JzLCB0aGUgYXJyYXkncyBkaW1lbnNpb24KLWlzIGJpZ2dlciB0aGFuIGl0 cyBudW1iZXIgb2YgZWxlbWVudHMuICBBZGRlZCBjb2RlIGF0IHRoZSBlbmQgb2YgZG9teWRpcigp Ci10byByZXNpemUgdGhlIGFycmF5IHNvIFxmZGltKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGZp bGVuYW1lcyBpbiB0aGUgYXJyYXksCi1hbmQgYWxzbyBtYWRlIHN1cmUgdGhhdCBlbGVtZW50IDAg Y29udGFpbnMgdGhhdCBudW1iZXIgdG9vLiAgY2t1dXM2LmMsCi0zMCBOb3YgMjAwNi4KLQotVGhp cyB3b3VsZCBiZSBhIG5pY2UgZWxlZ2FudCB3YXkgdG8gbG9vcCBvdmVyIGEgYnVuY2ggb2YgZmls ZXMsIGlmIGl0IHdvcmtlZDoKLQotICBmb3IgXCVpIDEgXGZmaWxlcygqKSAxIHsgcmVuYW1lIFxm bmV4dGZpbGUoKSB4eHhfXGZscGFkKFwlaSwzLDApIH0KLQotQnV0IGluIHRoaXMgbG9vcCwgS2Vy bWl0IHNraXBzIGV2ZXJ5IG90aGVyIGZpbGUgKGJlZ2lubmluZyB3aXRoIHRoZSBmaXJzdCkKLWFu ZCB0aGVuIHJ1bnMgb3V0IG9mIGZpbGVzIGhhbGZ3YXkgdGhyb3VnaCB0aGUgbG9vcC4gIFdoeT8g IEJlY2F1c2UgaW4KLWNvbW1hbmRzIGxpa2UgUkVOQU1FIGFuZCBERUxFVEUsIHRoZSBmaWxlbmFt ZSBwYXJzZXIgaXMgaW4gYSBjaGFpbmVkIEZEQgotd2l0aCB0aGUgc3dpdGNoIHBhcnNlci4gIEZp cnN0IHRoZSBzd2l0Y2ggcGFyc2VyLCBjbXN3aSgpLCBnZXRzIGl0cyBoYW5kcyBvbgotXGZuZXh0 ZmlsZSgpLCBwYXNzaW5nIGl0IHRocm91Z2ggdGhlIGV2YWx1YXRvciBhbmQgdGh1cyBnZXR0aW5n IHRoZSBmaXJzdAotZmlsZW5hbWUsIHdoaWNoIGl0IHRoZW4gc2VlcyBpcyBub3QgYSBzd2l0Y2gs IHNvIG5vdyB0aGUgZmllbGQgaXMgcGFyc2VkIGJ5Ci10aGUgbmV4dCBwYXJzZXIgaW4gdGhlIGNo YWluLCBjbWlmaSgpLCB3aGljaCBjYXVzZXMgXGZuZXh0ZmlsZSgpIHRvIGJlIAotZXhlY3V0ZWQg YWdhaW4uICBJbiBmYWN0LCB0aGUgRk9SIGxvb3AgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aDsgdGhl IHNhbWUKLXRoaW5nIGhhcHBlbnMgbGlrZSB0aGlzOgotCi0gIHZvaWQgXGZmaWxlcygqKQotICBk ZWxldGUgXGZuZXh0ZmlsZSgpCi0KLVRoaXMgZGVsZXRlcyBub3QgdGhlIGZpcnN0IGZpbGUsIGJ1 dCB0aGUgc2Vjb25kIG9uZS4gIE9idmlvdXNseSB1c2VycyBjYW4gYmUKLXRvbGQgbm90IHRvIHJl ZmVyIHRvIFxmbmV4dGZpbGUoKSBpbiBjaGFpbmVkLWZkYiBmaWVsZHM6Ci0KLSAgZm9yIFwlaSAx IFxmZmlsZXMoKikgMSB7IC5mIDo9IFxmbmV4dGZpbGUoKSwgZGVsZXRlIFxtKGYpIH0KLQotYnV0 IHRoaXMgaXMgaGFyZGx5IGludHVpdGl2ZS4gIEkgaGFkIHNvbWUgY2xldmVyIGlkZWFzIG9mIGhv dyB0byBtYWtlCi1cZm5leHRmaWxlKCkgd29yayBhcyBleHBlY3RlZCBpbiB0aGlzIGNvbnRleHQg YnV0IGl0J3Mgd2F5IHRvbyBtdWNoIG1hZ2ljLgotQmV0dGVyIHRvIHNpbXBseSBkb2N1bWVudCB0 aGF0IFxmbmV4dGZpbGUoKSBpcyAiZGVwcmVjYXRlZCIgYW5kIHRoZSBhcnJheQotZm9ybWF0IHNo b3VsZCBiZSB1c2VkOgotCi0gIGZvciBcJWkgMSBcZmZpbGVzKCosJmEpIDEgeyBkZWxldGUgXCZh W1wlaV0gfQotCi1UaGUgZGlmZmVyZW5jZSBpcywgYW4gYXJyYXkgZWxlbWVudCBkb2Vzbid0IGNo YW5nZSBldmVyeSB0aW1lIGl0J3MgcmVmZXJyZWQgdG8hCi0KLUFkZGVkIGEgL1BSRVNFUlZFIHN3 aXRjaCB0byB0aGUgQ09QWSBjb21tYW5kIHRvIHByZXNlcnZlIHRoZSB0aW1lc3RhbXAgYW5kCi1w ZXJtaXNzaW9ucyBvZiB0aGUgZmlsZS4gIEkgZGlkIHRoaXMgdXNpbmcgdGhlIEtlcm1pdCBBUElz IHNvIGl0IHNob3VsZCB3b3JrCi1mb3IgYW55IHZlcnNpb24gb2YgQy1LZXJtaXQgb3IgSzk1LiAg Y2t1dXNbMjZdLmMsIDMwIE5vdiAyMDA2LgotCi1BZGRlZCBDT1BZIC9PVkVSV1JJVEU6e0FMV0FZ UyxORVZFUixPTERFUixORVdFUn0gdG8gY29udHJvbCBuYW1lIGNvbGxpc2lvbnMKLXdoZW4gY29w eWluZyBhY3Jvc3MgZGlyZWN0b3JpZXMuICBja3V1c1syNl0uYywgMSBEZWMgMjAwNi4KLQotLS0t IERldi4yMyAtLS0KLQotRml4ZWQgYSBidWcgaW4gU0VUIFRFTE5FVCBQUk9NUFQtRk9SLVVTRVJJ RCwgU0VUIEFVVEggS0VSQkVST1NbNDVdIFBST01QVCwKLWFuZCBTRVQgQVVUSCBTUlAgUFJPTVBU IGluIHdoaWNoIHRoZSB1c2VyJ3Mgc3RyaW5nIHdhcyBjb21wYXJlZCB3aXRoIGEKLWxpdGVyYWwg KHMgPT0gIiIpLCByZXBvcnRlZCBieSBQYXZvbCBSdXNuYWsuICBXb3JzZSwgZW1wdHkgc3RyaW5n cyAoaWYgdGhlCi10ZXN0IHN1Y2NlZWRlZCkgd2VyZSB0dXJuZWQgaW50byBudWxsIHBvaW50ZXJz LCBhbmQgdGhlbiBmZWQgdG8gc3RybGVuKCkuCi1GaXhlZCBpbiBja3V1czMuYywgNSBEZWMgMjAw Ni4KLQotQWRkZWQgYW4gb3B0aW9uYWwgNHRoIGFyZ3VtZW50IHRvIFxmaW5kZXgoKSwgXGZyaW5k ZXgoKSwgXGZzZWFyY2goKSwgYW5kCi1cZnJzZWFyY2goKTogdGhlIGRlc2lyZWQgb2NjdXJyZW5j ZSBudW1iZXIgb2YgdGhlIHNlYXJjaGVkLWZvciBzdHJpbmcuCi1cZnJzZWFyY2goKSB3YXMgYSBi aXQgdHJpY2t5LiAgY2t1dXNbMjRdLmMsIDcgRGVjIDIwMDYuCi0KLUFkZGVkIFxmY291bnQoczEs czIpIHRvIHRlbGwgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiBzMSBpbiBzMi4KLWNrdXVz WzI0XS5jLCA4IERlYyAyMDA2LgotCi1BZGRlZCBcZmZ1bmN0aW9uKHMxKSB0byB0ZWxsIGlmIGEg Z2l2ZW4gYnVpbHQtaW4gZnVuY3Rpb24gaXMgYXZhaWxhYmxlLgotY2t1dXNbMjRdLmMsIDggRGVj IDIwMDYuCi0KLUNoYW5nZWQgUkVOQU1FIC9DT0xMSVNJT046UFJPQ0VFRCB0byBiZSAvQ09MTElT SU9OOlNLSVAsIHdoaWNoIGlzIGNsZWFyZXIuCi1ja3V1c1syNl0uYywgOCBEZWMgMjAwNi4KLQot Rm9yIGNvbW11bmljYXRpb24gcHJvdG9jb2xzOiBJTlBVVCAvQ09VTlQ6biB0byByZWFkIGV4YWN0 bHkgbiBjaGFyYWN0ZXJzCi13aXRob3V0IGFueSBtYXRjaGluZy4gIENhbiBiZSB1c2VkLCBmb3Ig ZXhhbXBsZSwgd2l0aCBDT05URU5UX0xFTkdUSCBpbiBDR0kKLXNjcmlwdHM7IE5VTCBjaGFyYWN0 ZXJzIGFyZSBjb3VudGVkIGJ1dCBub3QgY29sbGVjdGVkLiAgY2t1dXNyLltjaF0sCi1ja3V1czQu YywgOCBEZWMgMjAwNi4KLQotVGhlcmUgd2FzIGEgYmFkIGJ1ZyBpbiB0aGUgZGF0ZS1wYXJzaW5n IHJvdXRpbmVzOyBpdCdzIGJlZW4gdGhlcmUgZm9yIHllYXJzLgotSWYgYSBkYXRlIHN0cmluZyBp bmNsdWRlcyBhIHRpbWV6b25lLCBlLmcuICJTYXQsIDkgRGVjIDIwMDYgMTk6MjY6MjMgRVNUIiwK LWFuZCBjb252ZXJ0aW5nIHRvIEdNVCBjaGFuZ2VzIHRoZSBkYXRlLCB0aGUgdmFyaWFibGVzIGZv ciBkYXksIG1vbnRoLCBhbmQKLXllYXIgKHdoaWNoIGFyZSB1c2VkIGxhdGVyKSB3ZXJlIG5vdCB1 cGRhdGVkLCBhbmQgdGhlIGZpbmFsIHJlc3VsdCB3YXMgYSBkYXkKLW9mZi4gIEZpeGVkIGluIGNt Y3Z0ZGF0ZSgpOiBja3VjbWQuYywgMTAgRGVjIDIwMDYuCi0KLUJ1aWx0IE9LIHdpdGggU1NML1RM Uy4gIFRlc3RlZCB3aXRoIHRoZSBQT1Agc2NyaXB0LCBmb3VuZCB0aGF0IEkgYnJva2UgSU5QVVQK LXdoZW4gYWRkaW5nIHRoZSAvQ09VTlQgZmVhdHVyZTsgdGhlcmUgd2FzIGEgcGF0aCB0aHJvdWdo IHRoZSBjb2RlIHRoYXQgY291bGQKLWxlYXZlIHRoZSAiYW55Y2hhciIgdmFyaWFibGUgdW5zZXQg YW5kIHRoZXJlZm9yZSByYW5kb20uICBGaXhlZCBpbgotZG9pbnB1dCgpLiAgVGhlIFBPUCBzY3Jp cHQsIHdoaWNoIGRvZXMgbm90IHVzZSAvQ09VTlQsIHdvcmtzIGFnYWluIGFuZCBzbwotZG9lcyBh IG5ldyBDR0kgc2NyaXB0LCB3aGljaCBkb2VzIHVzZSAvQ09VTlQuICBja3V1czQuYywgMTAgRGVj IDIwMDYuCi0KLVN1cHBsaWVkIGEgbWlzc2luZyBjb21tYSBpbiB0aGUgaGVscC10ZXh0IGFycmF5 IGZvciBIRUxQIFNFVCBURVJNSU5BTCwgd2hpY2gKLXJlc3VsdGVkIGluIGJhZCBmb3JtYXR0aW5n IGluIEs5NSBhcm91bmQgU0VUIFNOSS1GSVJNV0FSRS1WRVJTSU9OUy4KLWNrdXVzMi5jLCAxMCBE ZWMgMjAwNi4KLQotTWFkZSAiaGVscCBsb2N1cyIgYSBzeW5vbnltIGZvciAiaGVscCBzZXQgbG9j dXMiLiAgY2t1dXNyLltjaF0sIGNrdXVzMi5jLAotMTEgRGVjIDIwMDYuCi0KLVRoaXMgbW9ybmlu ZyB0aGUgQ29sdW1iaWEgRlRQIHNlcnZlciB3YXMgbWFsZnVuY3Rpb25pbmcgaW4gYSBwZXJmZWN0 IHdheQotZm9yIG1lIHRvIGltcGxlbWVudCBhbmQgdGVzdCBhbiBGVFAgdGltZW91dCBtZWNoYW5p c20uICBUaGUgc2VydmVyIHdvdWxkCi1jbG9zZSB0aGUgZGF0YSBjb25uZWN0aW9uIGFmdGVyIHNl bmRpbmcgdGhlIGZpbGUsIGJ1dCB0aGUgY2xpZW50IG5ldmVyIHNhdwotdGhlIGNsb3NlIGFuZCB3 YXMgc3R1Y2sgZm9yZXZlciBpbiBhIHJlY3YoKS4gIEkgYWRkZWQgY29kZSB0byBkbyBhIHNlbGVj dCgpCi1vbiB0aGUgZGF0YSBjb25uZWN0aW9uIHByaW9yIHRvIGVudGVyaW5nIHRoZSByZWN2KCks IHdpdGggYSB0aW1lb3V0IG9uIHRoZQotc2VsZWN0KCkgdGhhdCB0aGUgdXNlciBjYW4gZXN0YWJs aXNoIHdpdGggU0VUIEZUUCBUSU1FT1VULiAgQnVpbHQgYW5kIHRlc3RlZAotb24gU29sYXJpcyA5 LCBjbGVhci10ZXh0IEZUUC4gIEFsc28gYnVpbHQgY2xlYW5seSBmb3IgRlRQUyBhbmQgdGVzdGVk Ci1hZ2FpbnN0IGEgc2VydmVyIHRoYXQgZG9lcyBub3QgaGFuZzsgSSBkb24ndCBoYXZlIGFjY2Vz cyB0byBhbiBGVFBTIHNlcnZlcgotdGhhdCB3b3VsZCB0aWNrbGUgdGhlIHRpbWVvdXQgY29kZS4g IGNrY2Z0cC5jLCAxMSBEZWMgMjAwNi4KLQotLS0tIERldi4yNCAtLS0KLQotRml4ZWQgYSBidWcg aW4gdGhlIElOUFVUIC9DT1VOVDogcGFyc2VyOiB0aGUgYXJyYXkgb2Ygc2VhcmNoIHN0cmluZ3Mg d2FzCi1uZXZlciBpbml0aWFsaXplZCwgd2hpY2ggZGlkbid0IG1hdHRlciBiZWZvcmUsIGJ1dCB3 aXRoIC9DT1VOVDosIGlmIHRoZQotZmlyc3QgZWxlbWVudCB3YXMgbm90IGEgTlVMTCBwb2ludGVy LCB3ZSdkIHRyZWF0IGl0IGFzIGEgc2VhcmNoIHN0cmluZywgYW5kCi10aGVuIGlmIGl0IGhhcHBl bmVkIHRvIG1hdGNoIHNvbWV0aGluZyBpbiB0aGUgaW5wdXQgc3RyZWFtLCB0aGUgb3BlcmF0aW9u Ci13b3VsZCBzdG9wIGJlZm9yZSB0aGUgY291bnQgd2FzIGV4aGF1c3RlZC4gIEZpeGVkIGJ5IChh KSBpbml0aWFsaXppbmcgdGhlCi1hcnJheSwgYW5kIChiKSBpZ25vcmluZyBhbnkgc2VhcmNoIHN0 cmluZ3MgaWYgL0NPVU5UOiB3YXMgZ2l2ZW4uICBja3V1c3IuYywKLTEzIERlYyAyMDA2LgotCi1S ZW1vdmVkIGEgZGVidWcoKSBzdGF0ZW1lbnQgZnJvbSB6c2F0dHIoKSB0aGF0IHN1ZGRlbmx5IHN0 YXJ0ZWQgbWFraW5nIHNvbWUKLXZlcnNpb24gb2YgZ2NjIGNvbXBsYWluLCByZXBvcnRlZCBieSBH ZXJyeSBCZWxhbmdlci4gIGNrdWZpby5jLCAxMyBEZWMgMjAwNi4KLQotLS0tIERldi4yNSAtLS0K LQotU29tZSBjYXN0cyBmb3IgdGhlIDMgaW50ZXJpb3IgYXJncyBvZiB0aGUgbmV3IHNlbGVjdCgp IGNhbGwgaW4gY2tjZnRwLmMKLWZvciBIUC1VWCA5LiAgMTQgRGVjIDIwMDYuCi0KLUNoYW5nZWQg XGZrZXl3b3JkdmFsdWUoKSB0byBhY2NlcHQgYSBzdHJpbmcgcmF0aGVyIHRoYW4gYSBzaW5nbGUg d29yZAotYXMgaXRzIHNlY29uZCBhcmd1bWVudCwgc28gdGhhdCBtb3JlIHRoYW4gb25lIHNlcGFy YXRvciBjb3VsZCBiZSBzcGVjaWZpZWQsCi1hbmQgdG8gcmV0dXJuIC0xIG9uIGVycm9yLCAwIGlm IGl0IGZvdW5kIG5vdGhpbmcsIDEgaWYgZ2l2ZW4gYSBrZXl3b3JkIGJ1dAotbm8gdmFsdWUsIGFu ZCAyIGlmIHRoZXJlIHdhcyBhIGtleXdvcmQgYW5kIGEgdmFsdWUuICBkb2t3dmFsKCk6IGNrdXVz WzI0XS5jLAotMTQgRGVjIDIwMDYuCi0KLUNoZWNrZWQgRlRQIHRpbWVvdXQgb24gY29tbWFuZCBj aGFubmVsIHdpdGggRlRQIERJUkVDVE9SWSBvZiBhIGJpZyBkaXJlY3RvcnkKLXVzaW5nIGEgcGF0 aCBpbnRvIG91ciBmdHAgc2VydmVyIHRoYXQgcHJlc2VydmVzIHRoZSBoYW5naW5nIGJlaGF2aW9y LiAgVGhlCi10aW1lb3V0IHdhcyBhY3R1YWxseSB3b3JraW5nLCBidXQgdGhlIGZhaWx1cmUgY29u ZGl0aW9uIHdhc24ndCBwcm9wYWdhdGluZwotYmFjayB0byB0aGUgdXNlciwgYW5kIHRoZXJlIHdh cyBubyBlcnJvciBtZXNzYWdlLiAgRml4ZWQgaW4gZG9mdHByZWN2MigpIGFuZAotZmFpbGZ0cHJl Y3YyKCk6IGNrY2Z0cC5jLCAxNSBEZWMgMjAwNi4KLQotQWRkZWQgdGhlIG9idmlvdXMgdGltZW91 dCBjaGVja3MgZm9yIEZUUCB1cGxvYWRzLCBidXQgSSBoYXZlIG5vIHdheSB0byB0ZXN0Ci10aGUg Y29kZSBzaW5jZSBvdXIgbWlzYmVoYXZpbmcgRlRQIHNlcnZlciBkb2VzIG5vdCBoYW5nIHdoZW4g cmVjZWl2aW5nCi1maWxlcywgb25seSB3aGVuIHNlbmRpbmcgdGhlbS4gIEJ1dCB1cGxvYWRzIHdv cmsgYm90aCB3aXRoIGFuZCB3aXRob3V0IGEKLXRpbWVvdXQgc2V0LCBzbyBhdCBsZWFzdCBubyBo YXJtIGlzIGRvbmUuICBja2NmdHAuYywgMTcgRGVjIDIwMDYuCi0KLVdoZW4gZG93bmxvYWRpbmcg d2l0aCBGSUxFIERFU1RJTkFUSU9OIE5PV0hFUkUgKD0gL0NBTElCUkFURSksIEtlcm1pdCBzdGls bAotY2hlY2tlZCB0aGUgc2l6ZSBvZiB0aGUgaW5jb21pbmcgZmlsZSBhbmQgcmVmdXNlZCBpdCBp ZiB0aGVyZSB3YXNuJ3QgZW5vdWdoCi1mcmVlIGRpc2sgc3BhY2UsIG9uIHBsYXRmb3JtcyAoc3Vj aCBhcyBWTVMpIHdoZXJlIHpjaGtzcGEoKSkgYWN0dWFsbHkgd29ya3M7Ci1yZXBvcnRlZCBieSBC b2IgR2V6ZWx0ZXIuICBja2NmbjMuYywgMTggRGVjIDIwMDYuCi0KLUJ1aWx0IG9uIE1hYyBPUyBY IDEwLjQuOCBhbmQgTmV0QlNEIDMuMV9SQzMsIGFsbCBPSy4gIDE5IERlYyAyMDA2LgotCi0tLS0g RGV2LjI2IC0tLQotCi1CdWlsdCBvbiBWTVMgNy4zLTIvQWxwaGEuICBIYWQgdG8gc3F1ZWxjaCBh IGNvdXBsZSBjb21waWxlciB3YXJuaW5ncyBieQotY2hhbmdpbmcgc29tZSBpbnRzIGluIHRoZSBu ZXcgXGZwaWN0dXJlaW5mbygpIGNvZGUgZnJvbSB1bnNpZ25lZCB0byBzaWduZWQsCi1hbmQgZml4 IGEgdHlwbyBpbiB0aGUgcHJvdG90eXBlIGZvciB0aGUgbmV3IGdldHRjcHBvcnQoKSBmdW5jdGlv bi4KLWNrY25ldC5oLCBja3V1czQuYywgMjIgRGVjIDIwMDYuCi0KLS0tLSBEZXYuMjcgLS0tCi0K LVBhcmFtZXRlcml6ZWQgcHR5IHJvdXRpbmVzIGFuZCBhbGwgcmVmZXJlbmNlcyB0byB0aGVtIGZv ciBmaWxlIGRlc2NyaXB0b3IsCi1yYXRoZXIgdGhhbiB0byB1c2UgZ2xvYmFsIHR0eWZkLCB0aHVz IGFsbG93aW5nIHB0eXMgdG8gYmUgY3JlYXRlZCBmb3IKLWRpZmZlcmVudCBwdXJwb3Nlcy4gIFRl c3RlZCBvbiBTb2xhcmlzIDkgYW5kIE1hYyBPUyBYIDEwLjQuOCwgd2l0aCAic2V0IGhvc3QKLS9j b25uZWN0IC9wdHkgZW1hY3MiIChmaW5lIGluIGJvdGggY2FzZXMpLCBhbmQgKG1vcmUgdG8gdGhl IHBvaW50KSAic2V0IGhvc3QKLS9jb25uZWN0IC9wdHkga2VybWl0IiAtLSBoZXJlIHdlIG1ha2Ug YSBjb25uZWN0aW9uIGZyb20gb25lIEtlcm1pdCBwcm9jZXNzCi10byBhbm90aGVyIGFuZCB0cmFu c2ZlciBhIGZpbGU7IHdvcmtzIGZpbmUgYW5kIHdhc24ndCBlc3BlY2lhbGx5IHNsb3cgZWl0aGVy OwotYSBnb29kIHNpZ24uICBja2NkZWIuaCwgY2t1dGlvLmMsIGNrdXB0eS5jLCAyMiBEZWMgMjAw Ni4KLQotQ3JlYXRlZCBhIG5ldyB2ZXJzaW9uIG9mIHR0cnVuY21kKCkgY2FsbGVkIHR0eXB0eWNt ZCgpLCB3aGljaCB3b3JrcyBieQotY2FsbGluZyBkb19wdHkoKSB0byBnZXQgYSBwdHkgdG8gcnVu IHRoZSBjb21tYW5kIG9uLCBhbmQgdGhlbiBpbiBhIGxvb3AsCi1yZWFkcyBmcm9tIHRoZSBwdHkg YW5kIHdyaXRlcyB0byB0aGUgbmV0IGFuZCByZWFkcyBmcm9tIHRoZSBuZXQgYW5kIHdyaXRlcwot dG8gdGhlIHB0eSwgdXNpbmcgc2VsZWN0KCkgdG8gd2hpY2ggb2YgdGhvc2UgaXQgc2hvdWxkIGRv IG9uIGVhY2ggcGFzcy4KLUZpcnN0IGN1dCBqdXN0IHVzZXMgc2luZ2xlLWJ5dGUgcmVhZHMgYW5k IHdyaXRlcy4gIFRlc3RlZCB1c2luZyBLZXJtaXQKLWl0c2VsZiBhcyBhbiBleHRlcm5hbCBwcm90 b2NvbC4gIFdvcmtzIGJ1dCBzbG93bHk6IDYwMDBjcHMuICBabW9kZW0gZG9lc24ndAotd29yayBh dCBhbGwuICBja3V0aW8uYywgMjQgRGVjIDIwMDYuCi0KLUNoYW5nZWQgc2luZ2xlLWNoYXJhY3Rl ciByZWFkKCkgYW5kIHdyaXRlKCkgdG8gYnVmZmVyZWQgcmVhZHMgYW5kIHdyaXRlcywKLXdpdGgg dHR4aW4oKSBhbmQgdHRvbCgpIHVzZWQgZm9yIG5ldHdvcmsgaS9vLiAgVXNpbmcgS2VybWl0IGFz IHRoZSBleHRlcm5hbAotcHJvdG9jb2wsIHRoaXMgZ2l2ZXMgNDUwS2NwcyAoYWJvdXQgMS8zIG5v cm1hbCBvbiB0aGlzIGNvbm5lY3Rpb24pLiAgCi0KLUJ1dCBub3cgdGhlcmUncyBhIHByb2JsZW06 IHRoZSBsb29wIGRvZXNuJ3Qga25vdyB3aGVuIHRvIHN0b3AuICBIb3cgZG9lcyBpdAota25vdyB3 aGVuIHRoZSBwcm9jZXNzIHRoYXQgaXMgcnVubmluZyBvbiB0aGUgcHR5IGhhcyBleGl0ZWQ/ICBX aXRoIHNpbmdsZQotY2hhcmFjdGVyIHJlYWQoKSdzIHRoYXQgYXJlIGV4ZWN1dGVkIHVuY29uZGl0 aW9uYWxseSB3aGVuIHNlbGVjdCgpIHNheXMgdGhlCi1wdHkgaGFzIGRhdGEgd2FpdGluZywgYXMg aW4gdGhlIGZpcnN0IHBhc3MsIEkgZ2V0IEVJTyBpZiB0aGVyZSBhY3R1YWxseQotaXNuJ3QgYW55 LCBhbmQgY2FuIGV4aXQgdGhlIGxvb3AuICBCdXQgbm93LCB0byBhdm9pZCBibG9ja2luZywgSSBj YWxsCi1pbl9jaGsoKSB0byBzZWUgaG93IG11Y2ggZGF0YSBpcyB3YWl0aW5nLCBhbmQgSSBkb24n dCB0cnkgdG8gcmVhZCBhbnl0aGluZwotaWYgaXQgc2F5cyBub3RoaW5nIGlzIHdhaXRpbmcuICBJ ZiB0aGUgcHJvY2VzcyBhc3NvY2lhdGVkIHdpdGggdGhlIHB0eSBmaWxlCi1kZXNjcmlwdG9yIGhh cyB0ZXJtaW5hdGVkLCBpbl9jaGsoKSB3b3VsZCBwcmVzdW1hYmx5IGdldCBzb21lIGtpbmQgb2Yg ZXJyb3IsCi1idXQgaXQgZG9lc24ndC4gIEkgY2hhbmdlZCBkb19wdHkgdG8gcmV0dXJuIHRoZSBw aWQgb2YgdGhlIGZvcmsgd2hlcmUgaXQKLWV4ZWNzIGl0cyBjb21tYW5kIHNvIHdlIGNhbiBjaGVj ayB0aGUgcGlkIHdpdGgga2lsbChwaWQsMCkgd2hlbiBpbl9jaGsoKSBvZgotdGhlIHB0eSBzYXlz IDAsIGJ1dCB0aGlzIGRvZXNuJ3QgaGVscCBlaXRoZXI7IGl0IHNlZW1zIGxpa2UgdGhlIHByb2Nl c3MgaXMKLW5vdCBleGl0aW5nLCBidXQgb2YgY291cnNlIGl0IGlzLgotCi1JIGNvdWxkIG5vdCBm aW5kIGFueSBsZWdpdGltYXRlIHdheSB0byB0ZXN0IHdoZW4gdGhlIHB0eSBmb3JrIHRlcm1pbmF0 ZWQuCi1TZWxlY3QoKSBhbHdheXMgc2F5cyB0aGUgcHR5IGZpbGUgZGVzY3JpcHRvciB3YXMgcmVh ZHksIG5vIG1hdHRlciB3aGF0LgotU2VsZWN0KCkgbmV2ZXIgcmVwb3J0cyBhbiBleGNlcHRpb24g b24gdGhlIHB0eSBmaWxlIGRlc2NyaXB0b3I7Ci1pbl9jaGsocHR5ZmQpIHJldHVybnMgMCBhbmQg bm90IGFuIGVycm9yLiAgcmVhZChwdHlmZCwuLi4pIGdldHMgMCBidXQgbm90IGFuCi1lcnJvci4g IGZjbnRsKHB0eWZkLC4uLikgZG9lc24ndCBnZXQgYW4gZXJyb3IuICBGaW5hbGx5IEkgdHJpZWQK LXdyaXRlKHB0eWZkLGMsMCkgYW5kIHRoaXMgaW5kZWVkIGdldHMgRUlPIChpL28gZXJyb3IpLiAg V2l0aCB0aGlzLCB1c2luZwotS2VybWl0IGFzIHRoZSBleHRlcm5hbCBwcm90b2NvbCB3b3JrcyBm aW5lIGluIFNvbGFyaXMgYnV0IEkgdGVuZCB0byB0aGluawotdGhpcyB0cmljayB3aWxsIG5vdCBi ZSB2ZXJ5IHBvcnRhYmxlIChpdCBpc24ndCkuICAyNCBEZWMgMjAwNi4KLQotTWFkZSB0dHB0eWNt ZCgpIHVzZSBhIG1vcmUgaW50ZWxsaWdlbnQgYnVmZmVyaW5nIHNjaGVtZSwgZml4ZWQgYSBmZXcg dGhpbmdzCi1hYm91dCBob3cgSSB3YXMgc2V0dGluZyB1cCB0aGUgc2VsZWN0KCkgY2FsbCB0aGF0 IHNob3VsZCBhZGRyZXNzIHNvbWUgb2YKLXllc3RlcmRheSdzIHByb2JsZW1zLiAgU3RpbGwgZG9l c24ndCB3b3JrIGJ1dCBpdCdzIHByb2dyZXNzLiAgQTogMjUgRGVjIDIwMDYuCi0KLURlYnVnZ2lu ZyB5ZXN0ZXJkYXkncyBjb2RlLi4uICBTdGlsbCwgdGhlIGVycm9yIGNvbmRpdGlvbnMgYXJlIG5l dmVyIHNldCwKLXdlIG5ldmVyIGRldGVjdCB3aGVuIHRoZSBwdHkgY2xvc2VzLiAgSW4gU29sYXJp cywgaWYgc2VsZWN0KCkgc2F5cyBwdHlmZCBpcwotcmVhZHkgdG8gcmVhZCBidXQgaW5fY2hrKCkg c2F5cyB0aGVyZSBhcmUgbm8gY2hhcmFjdGVycyB0aGVyZSwgd2UgY2FuIHRyZWF0Ci10aGlzIGFz IGEgbG9vcC1leGl0IGNvbmRpdGlvbi4gIEJ1dCBpbiBOZXRCU0QsIGluX2NoaygpIGFsd2F5cyBz YXlzIDAgd2hlbgotdXNlZCBvbiBhIHB0eSAoYnV0IHdvcmtzIE9LIG9uIGEgc2VyaWFsIG9yIG5l dCBjb25uZWN0aW9uKS4KLQotUmVhbGl6ZWQgSSBjb3VsZCBub3QgdXNlIGluX2NoaygpIG9uIHRo ZSBwdHkgYmVjYXVzZSB0aGVyZSBpcyB0b28gbXVjaAotYmFnZ2FnZSB3aXRoIHRoZSBjb21tdW5p Y2F0aW9uIHBhdGggLS0gbXlyZWFkKCksIGV0YyBldGMpIC0tIHNvIEkgcmVwbGFjZWQKLXRoaXMg d2l0aCBhIHNpbXBsZSBpb2N0bChwdHlmZCxGSU9OUkVBRCwmbikuICBUaGlzIHdvcmtzIGZpbmUg aW4gU29sYXJpcyBidXQKLWFsd2F5cyByZXR1cm5zIDAgaW4gTmV0QlNELCBkZXNwaXRlIHdoYXQg dGhlIG1hbiBwYWdlIHNheXMgKGkuZS4gdGhhdCB0aGlzCi1mdW5jdGlvbiBjYW4gYmUgdXNlZCBv biBhbnkgZmlsZSBkZXNjcmlwdG9yKS4KLQotT0ssIGxldCdzIHNlZS4uLi4gc2VsZWN0KCkgZG9l cyBub3QgcmV0dXJuIHVzZWZ1bCByZXN1bHRzLiAgSXQgc2F5cwotY2hhcmFjdGVycyBhcmUgd2Fp dGluZyBvbiBwdHlmZCB3aGVuIHRoZXkgYXJlIG5vdCwgYW5kIGl0IG5ldmVyIGRldGVjdHMgdGhl Ci1jbG9zdXJlIG9mIHRoZSBwdHkuLi4uLiAgV2VsbCBvZiBjb3Vyc2Ugbm90LCBiZWNhdXNlIHdl IGFyZSB0aGUgb25lcyB3aG8KLWhhdmUgdG8gY2xvc2UgaXQuICBKdXN0IGJlY2F1c2UgdGhlIHBy b2Nlc3MgaGFzIHN0b3BwZWQgZG9lc24ndCBtZWFuIHRoZSBwdHkKLWlzIGNsb3NlZC4gIFNvIHdl J3JlIGJhY2sgdG8gc3F1YXJlIG9uZSwgaG93IGRvIHdlIGtub3cgd2hlbiB0byBjbG9zZSBpdD8K LWNrdXB0eS5jIHNlZW1zIHRvIGtlZXAgdGhlIHByb2Nlc3MgSUQgaW4gYSBnbG9iYWwgdmFyaWFi bGUsIHB0eV9mb3JrX3BpZAotKHdoaWNoIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgcGlkIG5vdyBy ZXR1cm5lZCBieSBkb19wdHkoKSwgd2hpY2ggaXMKLXVzZWxlc3MsIGJ1dCBJIGRvbid0IHVuZGVy c3RhbmQgd2h5KS4gIEJ1dCBpdCBkb2Vzbid0IG1hdHRlciBiZWNhdXNlIHdoZW4gd2UKLWtpbGwo cHR5X2ZvcmtfcGlkLDApLCB3ZSBzdGlsbCBnZXQgbm8gZXJyb3Igb2YgYW55IGtpbmQsIGV2ZW4g YWZ0ZXIgd2Uga25vdwotdGhlIHByb2Nlc3MgaGFzIGV4aXRlZC4gIEkgYW0gY29tcGxldGVseSBm bHVtbW94ZWQuICBzZWxlY3QoKSBsaWVzLCBhbmQgZXZlbgotaWYgaXQgZGlkbid0LCB0aGVyZSBp cyBzaW1wbHkgbm8gY29tcGxldGlvbiBjcml0ZXJpb24uICBJbiB0aGUgbG9vcCwKLXNlbGVjdCgp IGFsd2F5cyBzYXlzIHRoYXQgdGhlIHB0eSBpcyByZWFkeSB0byByZWFkLiAgVG8gYmUgY29udGlu dWVkLgotMjYgRGVjIDIwMDYuCi0KLUJhY2sgdG8gU3F1YXJlIE9uZSwgc2luZ2xlLWJ5dGUgcmVh ZHMgYW5kIHdyaXRlcy4KLQotIC4gVGhpcyB3b3JrcyBmb3IgYm90aCByaXBwbGUgYW5kIEtlcm1p dC4KLSAuIERvZXNuJ3Qgd29yayBmb3IgWm1vZGVtIGJ1dCB3ZSdsbCBkZWFsIHdpdGggdGhhdCBs YXRlci4KLSAuIEluIHRoaXMgY2FzZSBGRF9JU1NFVChwdHlmZCkgaXMgc3RpbGwgdHJ1ZSBhZnRl ciBwdHkgY2xvc2VzLgotCi1CdXQgdGhlIGVuc3VpbmcgcmVhZCgpIGdldHMgRUlPIHNvIHdlIGtu b3cgdGhlIHB0eSBpcyBnb25lLiAgVGhhdCBtZWFucyB0aGUKLXNhbWUgdGhpbmcgc2hvdWxkIGhh cHBlbiBpbiB0aGUgYnVmZmVyZWQgdmVyc2lvbiwgbm8/ICBZZXM7IEkgd2VudCBiYWNrIHRvCi10 aGUgYnVmZmVyZWQgdmVyc2lvbiBhbmQgcmVwbGFjZWQgYWxsIHRoZSBvdGhlciBub253b3JraW5n IHRlc3RzIGJ5IGEKLWJsb2NraW5nIHJlYWQgb2YgMSBieXRlIG9uIHRoZSBwdHkgYW5kIHRoaXMg ZGV0ZWN0cyB0aGUgdGVybWluYXRpb24uICBOb3c6Ci0KLSAuIHJpcHBsZSB3b3JrcyBwZXJmZWN0 bHkgKG9mIGNvdXJzZSBpdCdzIG9ubHkgb25lLXdheSkuCi0gLiBLZXJtaXQgZmFpbHMKLQotTGV0 J3MgY2FsbCB0aGUgcmVtb3RlLCBmb3JrZWQsIHJlZGlyZWN0ZWQsIGV4dGVybmFsIEtlcm1pdCBB IGFuZCBpdHMKLWxvY2FsIHBhcnRuZXIgQi4gIEEgc2VuZHMgaXRzIFMtcGFja2V0LCBCIHJlY2Vp dmVzIGl0IE9LIGFuZCBBY2tzLgotQSBhcHBhcmVudGx5IGRvZXMgbm90IHJlY2VpdmUgdGhlIEFD SyBpbiB0aW1lLCBzbyBzZW5kcyB0aGUgUyBhZ2FpbiwgYnV0IE9LLgotZm9sbG93ZWQgaW1tZWRp YXRlbHkgYnkgdGhlIEYuICBCIEFja3MgdGhlIEYuICBBIHNlbmRzIHRoZSBBLCBCIEFja3MgaXQu Ci1CdXQgbm93IEEgc2VuZHMgYSBwaWVjZSBvZiB0aGUgcHJldmlvdXMgRiBwYWNrZXQgYW5kIHRo ZSB0aGUgZmlyc3QgcGllY2UKLW9mIGEgRCBwYWNrZXQuCi0KLUNsZWFybHkgdGhlIGJ1ZmZlcmlu ZyBpcyBtZXNzZWQgdXAuICBTdXJlIGVub3VnaCwgdGhlcmUgd2FzIGFuIGV4dHJhbmVvdXMKLXN0 YXRlbWVudCBpbmNyZW1lbnRpbmcgYSByZWFkIHBvaW50ZXIgaW4gYSB3cml0ZSBzZWN0aW9uLiAg UmVtb3ZpbmcgdGhhdAotY2xlYXJlZCB1cCB0aGUgcHJvYmxlbXMgd2l0aCBLZXJtaXQsIG5vdyB3 ZSBjYW4gc2VuZCBhbmQgcmVjZWl2ZSBzdWJzdGFudGlhbAotZmlsZXMgZWZmaWNpZW50bHkgaW4g cmVtb3RlIG1vZGUuICBabW9kZW0gc2VlbXMgdG8gd29yayB0b28sIGV4Y2VwdCB0aGF0IGF0Ci10 aGUgYmVnaW5uaW5nIGEgYnVuY2ggb2YgIioqQjA4MDAwMDAwMDAwMjJkIidzIGFyZSBzdHVmZmVk IGludG8gS2VybWl0J3MKLWNvbW1hbmQgYnVmZmVyLCBzbyBhZnRlciB0aGUgdHJhbnNmZXIgd2Ug Z2V0IHNvbWUgZXJyb3IgbWVzc2FnZXMuCi0KLUluIGxvY2FsIG1vZGUsIG92ZXIgYSBUZWxuZXQg Y29ubmVjdGlvbiwgS2VybWl0IHdvcmtzIGZpbmUuICBabW9kZW0gd29ya3MKLU9LIHRvbyBleGNl cHQgaXQgZG9lc24ndCBmaW5pc2ggcmlnaHQsIHNvIGF0IHRoZSB2ZXJ5IGVuZCByeiBvbiB0aGUg ZmFyIGVuZAotaXMgc3RpbGwgd2FpdGluZyBmb3Igc29tZXRoaW5nOyBpZiBJIGNhbmNlbCBvdXQg b2YgaXQgd2l0aCBeWF5YXlheWF5YLCBpdAotZGVsZXRlcyB0aGUgZmlsZS4gIFNvIHRoZXJlIHN0 aWxsIGlzIHNvbWV0aGluZyB3cm9uZyB3aXRoIHRoZSB0ZXJtaW5hdGlvbgotdGVzdC4KLQotQWxz byB5b3UgZG9uJ3Qgc2VlIGFueXRoaW5nIG9uIHlvdXIgc2NyZWVuIHdoZW4gcnVubmluZyBLZXJt aXQgb3IgWm1vZGVtCi10aGlzIHdheS4gIFRoYXQncyB0byBiZSBleHBlY3RlZCwgc2luY2UgdGhl eSBhcmUgdXNpbmcgc3RkaW8gZm9yIHRoZQotdHJhbnNmZXIsIHNvIHRoZXkgY2FuJ3QgYWxzbyBi ZSBkaXNwbGF5aW5nIHByb2dyZXNzIG9yIG90aGVyIG1lc3NhZ2VzLgotCi1CdWlsdCB0aGlzIG9u IE5ldEJTRCBhZ2Fpbi4uLiAgU2VlbXMgdG8gd29yayB0aGlzIHRpbWUsIGJ1dCBoYXMgdHJvdWJs ZQotZmluaXNoaW5nLCBsaWtlIFptb2RlbS4gIEhtbW0sIG9uIGNsb3NlciBleGFtaW5hdGlvbiwg aXQgdHVybnMgb3V0IHRoYXQKLXNpbmNlIGluX2NoaygpIGFsd2F5cyByZXR1cm5zIDAgb24gdGhl IHB0eWZkLCB3ZSBmYWxsIGludG8gb3VyIG5ldwotc2luZ2xlLWJ5dGUgcmVhZCBjb2RlLCBzbyBp dCdzIHJlYWxseSBzbG93LCBsaWtlIDEwSyBjcHMgb24gYSBjb25uZWN0aW9uCi13aGVyZSAxTSBp cyB0aGUgbm9ybS4gIDI3IERlYyAyMDA2LgotCi1Td2l0Y2hlZCB0aGUgcHR5IGZyb20gYnVmZmVy IHBlZWtpbmcgKEZJT05SRUFEKSBhbmQgYmxvY2tpbmcgcmVhZHMgdG8gdG8KLW5vbmJsb2NraW5n IHJlYWRzIChPX05PTkJMT0NLIC8gT19OREVMQVkpLiAgV29ya3MganVzdCBmaW5lIG9uIE5ldEJT RCBleGNlcHQKLW5vdyB3ZSBubyBsb25nZXIgZ2V0IEVJTyBhdCB0aGUgZW5kIHdoZW4gdHJ5aW5n IHRvIHJlYWQgZnJvbSB0aGUgcHR5IHByb2Nlc3MKLXRoYXQgaGFzIGV4aXRlZC4gIEluIGZhY3Qs IHdlJ3JlIGJhY2sgdG8gc3F1YXJlIG9uZSBhZ2Fpbi4gIG5vdCBpb2N0bCgpLCBub3QKLWZjbnRs KCksIG5vdCBzZWxlY3QoKSwgbm90IGV2ZW4gcmVhZCgpIGdldHMgYW4gaS9vIGVycm9yIGFmdGVy IHRoZSBwdHkKLXByb2Nlc3MgZXhpdHMuICBCdXQgaW4gTmV0QlNELCB3ZSBoYXZlIHRvIHVzZSBu b25ibG9ja2luZyByZWFkcyBiZWNhdXNlIC4uLgotSG1tbW0sIG1heWJlIHN3aXRjaCB0aGUgZmQg YmV0d2VlbiBibG9ja2luZyBhbmQgbm9uYmxvY2tpbmcgZm9yIHRoZSB0ZXN0Li4uCi1Ob3BlLCBO ZXRCU0Qgc2VlbXMgdG8gYmUgaG9wZWxlc3MgKGxhdGVyLCBFZCBSYXZpbiBjb25maXJtZWQgdGhh dCBzaW1pbGFyCi1wcm9ibGVtcyBoYXZlIGJlZW4gb2JzZXJ2ZWQgd2l0aCBvdGhlciBhcHBsaWNh dGlvbnMgdGhhdCB0cnkgdG8gZG8gdGhpcykuCi0KLVN3aXRjaGluZyB0byBMaW51eCwgSSBzZWUg dGhhdCB5ZXN0ZXJkYXkncyBTb2xhcmlzIGNvZGUgKGJsb2NraW5nIHJlYWRzKQotd29ya3MgZXhh Y3RseSB0aGUgc2FtZSB3YXkgb24gTGludXguCi0KLVRyaWVkIHRvZGF5J3MgT19OREVMQVkgbWV0 aG9kIG9uIFNvbGFyaXMuICBJdCB3b3JrcyBwZXJmZWN0bHkuICBBbmQgdGhlbiBJCi1tb3ZlZCB0 aGlzIG9uZSB0byBMaW51eCBhbmQgaXQgd29ya3MgcGVyZmVjdGx5IHRoZXJlIHRvby4gIEV4Y2Vw dCBpbiBib3RoCi1jYXNlcyB3ZSBoYXZlIHRoZSB3ZWlyZCB0aGluZyB3aXRoIFptb2RlbSBhdCB0 aGUgZW5kLCBidXQgSSB0aGluayB0aGF0J3MKLWJlY2F1c2Ugcnovc3ogZG9uJ3QgdXNlIHN0YW5k YXJkIGkvby4gIE9uIE5ldEJTRCwgaXQgc3RpbGwgaGFuZ3MgYXQgdGhlIGVuZC4KLQotVHVybnMg b3V0IHRoYXQgdGVzdGluZyB0aGUgcGlkIHdvcmtzIGluIE5ldEJTRCwgZXZlbiB0aG91Z2ggaXQg ZGlkbid0IGluCi1Tb2xhcmlzLiAgVHVybnMgb3V0IHJlYWQoKSBnZXRzIGFuIGkvbyBlcnJvciBp biBTb2xhcmlzIGFuZCBMaW51eCBidXQgbm90Ci1pbiBOZXRCU0QuICBTbyBjaGVja2luZyB0aGUg cmVhZCByZXN1bHQgZmlyc3QsIGFuZCB0aGVuIGNoZWNraW5nIHRoZSBwaWQKLWlmIHJlYWQoKSBn b3QgemVybyBieXRlcyBjYXRjaGVzIGFsbCB0aHJlZS4gIDI4IERlYyAyMDA2LgotCi1Ob3cgdGhl IHF1ZXN0aW9uIG9mIHJldHVybiBjb2RlLiAgSW4gdGhlIG9yaWdpbmFsIHR0cnVuY21kKCkgZnVu Y3Rpb24sIHdlIGRvCi1hIGZvcmsoKSBhbmQgYSB3YWl0KCkuICBXaGVuIHRoZSBleHRlcm5hbCBw cm90b2NvbCBwcm9ncmFtIGZpbmlzaGVzLCB3YWl0KCkKLWdpdmVzIHVzIGl0cyByZXR1cm4gY29k ZSBhbmQgd2UgY2FuIHBhc3MgaXQgb24gdGhyb3VnaCBcdihwZXhpdHN0YXQpIGFzIHdlbGwKLXR0 cnVuY21kJ3Mgb3duIHJldHVybiBjb2RlLiAgQnV0IHR0cHR5Y21kKCkgaGFzIHRvIGludGVyYWN0 IHdpdGggdGhlIHB0eQotY29udGludW91c2x5LCBzbyBpdCBjYW4ndCBqdXN0IHNpdCBiYWNrIGFu ZCB3YWl0KCkgZm9yIGl0LiAgSW5zdGVhZCB3ZSBoYXZlCi10byBkZXRlY3Qgd2hlbiB0aGUgcHJv Y2VzcyBoYXMgZXhpdGVkIGFuZCB0aGVuIGNhbGwgd2FpdHBpZCgpIG9uIHRoZSBmb3JrCi1waWQs IGJlZm9yZSBzaHV0dGluZyBkb3duIHRoZSBwdHkuICBUZXN0ZWQgb24gU29sYXJpcyB1c2luZyBL ZXJtaXQgYXMgdGhlCi1leHRlcm5hbCBwcm90b2NvbCBhbmQgdGhlbiBpbmR1Y2luZyBmYWlsdXJl LCBvciBsZXR0aW5nIGl0IHJ1biB0bwotY29tcGxldGlvbi4gIEZBSUxVUkUgYW5kIFNVQ0NFU1Mg c2V0IGFwcHJvcHJpYXRlbHkgaW4gZWFjaCBjYXNlLiAgVGVzdGVkCi13aXRoIFptb2RlbSB0b28s IHdvcmtzIE9LIGV4Y2VwdCBmb3IgdGhlIGFmb3JlbWVudGlvbmVkIGNvc21ldGljIGdsaXRjaCBh dAotdGhlIGVuZC4gIFRlc3RlZCBvbiBOZXRCU0QsIGFsbCBPSy4KLQotVG8gbWFrZSBLNSBjb25u ZWN0aW9uIHRvIFBhbml4IGZyb20gU3BhbToKLQotIHNldCB0ZWxuZXQgZGVidWcgb24KLSBhdXRo ZW50aWNhdGUgSzUgaW5pdCAvcmVhbG06UEFOSVguQ09NIC9wYXNzd29yZDp4eHh4eAotIHNldCBo b3N0IHNoZWxsLnBhbml4LmNvbSAyMyAvazVsb2dpbgotCi1Hb29kLi4uICBOb3cgSSB0cnkgdG8g c2VuZCBhIGZpbGUgZnJvbSBTcGFtIHRvIFBhbml4IG92ZXIgdGhlIEs1IGNvbm5lY3Rpb24KLXVz aW5nIEtlcm1pdCBpdHNlbGYgYXMgdGhlIGV4dGVybmFsIHByb3RvY29sLiAgSXQgZmFpbHMuICBJ bnNwZWN0aW9uIG9mIHRoZQotZGVidWcgbG9nIG9uIHRoZSBmYXIgc2lkZSBzaG93cyB0aGF0IHRo ZSBTLVBhY2tldCB3YXMgcmVjZWl2ZWQgY29ycmVjdGx5LAotZ29vZCEgIFRoaXMgbWVhbnMgd2Ug YXJlIHJlYWRpbmcgdGhlIGNsZWFyLXRleHQgUy1QYWNrZXQgZnJvbSB0aGUgZXh0ZXJuYWwKLUtl cm1pdCBwcm9ncmFtLCBhbmQgdGhhdCB0dG9sKCkgaXMgZW5jcnlwdGluZyBhcHByb3ByaWF0ZWx5 LgotCi1UaGUgcmVtb3RlIEtlcm1pdCBzZW5kcyB0aGUgQWNrIGFuZCBnb2VzIHRvIHJlYWQgdGhl IG5leHQgcGFja2V0OiB0dGlubCgpCi1jYWxscyBteWZpbGxidWYoKSBhbmQ6Ci0KLSAgU1ZPUlBP U0lYIG15ZmlsbGJ1ZiBjYWxsaW5nIHJlYWQoKQotICBTVk9SUE9TSVggbXlmaWxsYnVmPTAgICAg ICAgICAgICAgICAgPC0tIHJlYWQgcmV0dXJucyAwCi0gIFNWT1JQT1NJWCBteWZpbGxidWYgdHRj YXJyPTIKLSAgU1ZPUlBPU0lYIG15ZmlsbGJ1ZiBlcnJubz0wICAgICAgICAgIDwtLSBhbmQgcmVw b3J0cyBubyBlcnJvcgotICBIRVhEVU1QOiBteWdldGJ1ZiByZWFkICgtMyBieXRlcykKLSAgbXln ZXRidWYgZXJybm89MAotICB0dGlubCBteXJlYWQgZmFpbHVyZSwgbj0tMwotICB0dGlubCBteXJl YWQgZXJybm89MAotICB0dGlubCBub24tRUlOVFIgLTNbY2xvc2luZ10KLQotVGhpcyBoYXBwZW5z IGJlY2F1c2UgbXlmaWxsYnVmKCkgZGVsaWJlcmF0ZWx5IHJldHVybnMgLTMgd2hlbiByZWFkKCkg Z2V0cyAwCi1ieXRlcy4gIEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgdGhpcyBoYXBwZW5zIGJ1dCB0 aGUgcmVhbCBwcm9ibGVtIGlzIHlldCB0bwotY29tZS4gIFRoZSBsb2NhbCBLZXJtaXQgKHRoZSBv bmUgdGhhdCBoYXMgbWFkZSB0aGUgc2VjdXJlIGNvbm5lY3Rpb24gYW5kIGlzCi1ydW5uaW5nIHRo ZSBleHRlcm5hbCBwcm90b2NvbCB0aHJvdWdoIHR0cHR5Y21kKCkpIGV2ZW50dWFsbHkgZmlndXJl cyBvdXQKLXRoYXQgdGhlIHRyYW5zZmVyIGZhaWxlZCBhbmQgd2hlbiB3ZSByZWNvbm5lY3QsIHdl IGdldCB0b3RhbCBnYXJiYWdlIC0tIHRoZQotZW5jcnlwdGlvbiBlaXRoZXIgc3RvcHBlZCBoYXBw ZW5pbmcsIG9yIGdvdCBvdXQgb2Ygc3luYy4KLQotTG9va2luZyBhdCB0aGUgbG9jYWwgZGVidWcg bG9nLCB0dG9sKCkgaXMgZG9pbmcgaXRzIGpvYiwgY29udmVydGluZyB0aGUKLWluaXRpYWwgImtl cm1pdCAtclwxMyIgZnJvbSBwbGFpbnRleHQgdG8gY3lwaGVydGV4dCwgYXMgc2hvd24gYnkgdGhl Ci1oZXhkdW1wcy4gIFRoZW4gaXQgZW50ZXJzIHR0cHR5Y21kKCkuLi4gIEhtbW1tLCB3YWl0LCBo b3cgY2FuIGl0IHNlbmQgdGhlCi0ia2VybWl0IC1yIiBiZWZvcmUgaXQgc3RhcnRzIHRoZSBleHRl cm5hbCBwcm90b2NvbD8gIE5ldmVyIG1pbmQsIHdvcnJ5IGFib3V0Ci10aGF0IGxhdGVyLi4uICBB bnl3YXksIHR0cHR5Y21kKCkgc2F5czoKLQotICB0dHB0eWNtZCBsb29wIHRvcCBoYXZlX3B0eT0x Ci0gIHR0cHR5Y21kIGxvb3AgdG9wIGhhdmVfbmV0PTEKLSAgdHRwdHljbWQgRkRfU0VUIHB0eWZk IGluCi0gIHR0cHR5Y21kIEZEX1NFVCB0dHlmZCBpbgotICB0dHB0eWNtZCBuZmRzPTUKLSAgdHRw dHljbWQgc2VsZWN0PTEKLSAgdHRwdHljbWQgRkRfSVNTRVQgdHR5ZmQgaW4KLSAgLi4uCi0gIHR0 cHR5Y21kIGluX2Noayh0dHlmZCkgbj0xMQotICB0dHB0eWNtZCB0dHhpbiBuPTExCi0KLXR0eGlu KCkgYXNrcyBmb3IgMTEgYnl0ZXMsIG15ZmlsbGJ1ZigpIGdldHMgMTEgYnl0ZXMsIGFuZCBoZXhk dW1wKCkgc2hvd3MKLXRoZSBjeXBoZXJ0ZXh0LCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYW55 IGRlY3J5cHRpbmcgZ29pbmcgb24uICBIbW1tLCBpdAotbG9va3MgbGlrZSB0aGUgcmVndWxhciBj b2RlIGNhbGxzIHR0aW5jKCkgaW4gYSBsb29wLCByYXRoZXIgdGhhbiB0dHhpbigpLgotTWF5YmUg dHR4aW4oKSBkb2Vzbid0IGhhdmUgZGVjcnlwdGlvbiBob29rcy4gIE5vLCB0aGF0J3Mgbm90IGl0 LCB0aGUgY29kZSBpcwotdGhlcmUsIGJ1dCB0aGUgS2VybWl0IHBhY2tldCByZWFkZXIgZG9lcyBu b3QgdXNlIHR0eGluKCksIGl0IHVzZXMgdHRpbmwoKS4KLUJ1dCBvZiBjb3Vyc2Ugd2UgY2FuJ3Qg dXNlIHRoYXQgZm9yIGV4dGVybmFsIHByb3RvY29scyBiZWNhdXNlIGl0J3MgZGVzaWduZWQKLW9u bHkgdG8gcmVhZCBLZXJtaXQgcGFja2V0cy4gIFN1YnN0aXR1dGluZyBhIGxvb3Agb2YgdHRpbmMo KXMgZm9yIHRoZSB0dHhpbigpCi1jYWxsIGZpeGVzIHRoaW5ncyAoYW5kIHN0cmFuZ2VseSBlbm91 Z2gsIGl0IHNlZW1zIHRvIGJlIGZhc3RlcikuICBBbmQgbm93IHdlCi1oYXZlIG91ciBmaXJzdCBl eHRlcm5hbCBwcm90b2NvbCB0cmFuc2ZlciBvdmVyIGEgc2VjdXJlIGNvbm5lY3Rpb24gKGV4dGVy bmFsCi1LZXJtaXQgcHJvZ3JhbSwgTGludXggb3ZlciBLZXJiZXJvcyA1IHRvIE5ldEJTRCkuICBa bW9kZW0gd29ya2VkIHRvbyBmb3IgYQotc2hvcnQgZmlsZSBidXQgInNvbWV0aGluZyBoYXBwZW5z IiB3aXRoIGxvbmdlciBvbmVzLiAgMjkgRGVjIDIwMDYuCi0KLU5ldyBtYWtlZmlsZSB0YXJnZXQg Zm9yIExpbnV4IHdpdGggS2VyYmVyb3MgNSwgbGludXgra3JiNSwgdGhhdCBkb2Vzbid0Ci1pbmNs dWRlIGFueXRoaW5nIGV4dHJhIGZyb20gU1NMIG9yIG90aGVyIHNlY3VyaXR5IG1ldGhvZHMgKGJ1 dCBhcHBhcmVudGx5IGl0Ci1pcyBzdGlsbCBuZWNlc3NhcnkgdG8gaW5jbHVkZSAtRE9QRU5TU0xf MDk3IGluIG9yZGVyIHRvIGdldCB0aGUgcmlnaHQgbmFtZXMKLWZvciB0aGUgREVTIHJvdXRpbmVz PykuICBEaXR0byBuZXRic2Qra3JiNSBmb3IgTmV0QlNELCBleGNlcHQgaW4gdGhpcyBjYXNlCi0t RE9QRU5TU0xfMDk3IGlzIG5vdCBuZWNlc3NhcnkuICBtYWtlZmlsZSwgMzAgRGVjIDIwMDYuCi0K LU5vdGUgdG8gbXlzZWxmOiBPbiBQYW5peDoKLQotICBleHBvcnQgTERfTElCUkFSWV9QQVRIPS91 c3IvbG9jYWwva2VyYmxpYgotICBtYWtlIG5ldGJzZCtrcmI1ICJLNUxJQj0tTC91c3IvbG9jYWwv a2VyYmxpYiIgIks1SU5DPS1JL3Vzci9sb2NhbC9pbmNsdWRlIgotCi1DYW4ndCB0ZWxuZXQtazUg ZnJvbSBuZXdseSBidWlsdCBLZXJtaXQgb24gTmV0QlNEOyBwYXJ0d2F5IHRocm91Z2ggdGhlCi1u ZWdvdGlhdGlvbnMsIGp1c3QgYWZ0ZXIgIlRFTE5FVCBSQ1ZEIFNCIEVOQ1JZUFRJT04gU1VQUE9S VCBERVNfQ0ZCNjQKLURFU19PRkI2NCBJQUMgU0UiIGl0IGR1bXBzIGNvcmUuICBUaGUgbGFzdCB0 d28gbGluZXMgaW4gZGVidWcubG9nIGFmdGVyCi10aGlzIGFyZToKLQotICB0bl9zYltsZW5dPTUK LSAgZW5jcnlwdF9zdXBwb3J0W2NudF09MgotCi1SZWJ1aWxkaW5nIHdpdGggLURPUEVOU1NMXzA5 NyBkb2Vzbid0IGNoYW5nZSBhbnl0aGluZy4gIEVkIFJhdmluIHNhaWQgdGhleQotaGF2ZSB0d28g ZGlmZmVyZW50IEtlcmJlcm9zIGluc3RhbGxhdGlvbnMsIEhlaW1kYWwgYW5kIE1JVDsgbWF5YmUg c29tZQotbWl4dXAgYmV0d2VlbiB0aGUgdHdvIGV4cGxhaW5zIHRoZSBwcm9ibGVtIChKZWZmIGNv bmN1cnMpLiBUaGUgY29yZSBkdW1wCi1vY2N1cnMgaW4gY2tfY3JwOiBlbmNyeXB0X3N1cHBvcnQo KToKLQotICAgZGVidWcoRjEwMCwiWFhYIGVwIG5vdCBOVUxMIiwiIiwwKTsKLSAgIHR5cGUgPSBl cC0+c3RhcnQgPyAoKmVwLT5zdGFydCkoRElSX0VOQ1JZUFQsIDApIDogMDsgPC0tIEhlcmUKLSAg IGRlYnVnKEYxMDEsIlhYWCBuZXcgdHlwZSIsIiIsdHlwZSk7Ci0KLUFueXdheSwgSSBjYW4gbG9n IGluIHdpdGggS2VyYmVyb3MgNSB0byBQYW5peCBPSyBmcm9tIENvbHVtYmlhIChzZXNhbWUpCi11 c2luZyA4LjAuMjAxLiAgU28gbGV0J3MgdHJ5IHRvIHJlc3VycmVjdCB0aGUgU29sYXJpcyB2ZXJz aW9uIHdpdGggZXZlcnl0aGluZzoKLQotICBzb2xhcmlzOWcra3JiNStrcmI0K29wZW5zc2wrc2hh ZG93K3BhbSt6bGliCi0KLUkgaHVudGVkIGFyb3VuZCB0byBmaW5kIHdoZXJlIHRoZSBjdXJyZW50 IGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlCi1kaXJlY3RvcmllcyB3ZXJlLi4uICBMYXN0IHRpbWUg SSB0cmllZCB0aGlzIChNYXJjaCAyMDA2KSBpdCBib21iZWQsIG5vdAotZmluZGluZyBsaWJkZXMu ICBJbnN0ZWFkIHdlIGhhdmUgL29wdC9rZXJiZXJvczUxMjUvbGliL2xpYmRlczQyNS5hLiAgTWFk ZSBhCi1uZXcgY3Utc3BlY2lmaWMgdGFyZ2V0IHRoYXQgaW5jbHVkZXMgdGhpczsgbm93IHdlIGdl dCBmYXJ0aGVyOyBpdCBibG93cyB1cAotaW4gY2tjZnRwLmMgd2l0aCB0b25zIG9mIGVycm9ycyBh bmQgd2FybmluZ3MsIHdoaWNoIHdlIGNhbiB3b3JyeSBhYm91dAotbGF0ZXIuICBCdWlsZGluZyBh Z2FpbiB3aXRoIC1ETk9GVFAsIGl0IGdldHMgdG8gY2t1YXRoLmMgKHRoZSBmaXJzdCBzZWN1cml0 eQotbW9kdWxlKSBhbmQ6Ci0KLSAgY2t1YXRoLmM6MTUxOjE4OiBlcnJvcjoga3JiNS5oOiBObyBz dWNoIGZpbGUgb3IgZGlyZWN0b3J5Ci0gIGNrdWF0aC5jOjE1MjoyMTogZXJyb3I6IHByb2ZpbGUu aDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQotICBja3VhdGguYzoxNTM6MjE6IGVycm9yOiBj b21fZXJyLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKLSAgY2t1YXRoLmM6MTc2OjI4OiBl cnJvcjoga2VyYmVyb3NJVi9rcmIuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQotICBJbiBm aWxlIGluY2x1ZGVkIGZyb20gL29wdC9vcGVuc3NsLTAuOS44ZC9pbmNsdWRlL29wZW5zc2wvZGVz Lmg6MTAxLAotCQkgICBmcm9tIGNrdWF0aC5jOjIxOToKLQotRm91bmQga3JiNS5oIGluIC9vcHQv a2VyYmVyb3M1MTI1L2luY2x1ZGUva3JiNS5oLCBhZGRlZCBhIC1JIGZvciB0aGlzCi1kaXJlY3Rv cnkgLi4uICBOb3cgd2UgZ2V0IGxvdHMgb2Ygd2FybmluZ3MgaW4gY2t1YXRoLmMsIGJ1dCBpdCBj b21wbGV0ZXMgT0ssCi10aGVuIHdlIHdpbmQgdXAgYm9tYmluZyBvdXQgaW4gY2tfY3JwLmM7IEkg ZG9uJ3Qga25vdyB3aHkgLS0gdGhlcmUgYXJlIGFsbAotdGhlIHNhbWUgd2FybmluZ3MgKHJlbGF0 ZWQgdG8gYXJndW1lbnQgcGFzc2luZyB0byBERVMgZnVuY3Rpb25zKSwgYnV0IG5vCi1lcnJvcnMu ICBJIGhhdmUgbm8gY2x1ZS4KLQotVHJpZWQgdG8gcmVzdXJyZWN0IHRoZSBzb2xhcmlzMngra3Ji NCB0YXJnZXQ7IHRoaXMgcmVxdWlyZWQgY2hhbmdpbmcgLWxrcmIKLXRvIC1sa3JiNCBhbmQgLWxk ZXMgdG8gLWxkZXM0MjUuICBMb3RzIG9mIHdhcm5pbmdzIGluIGNrdXRpby5jLCBja2NuZXQuYywK LWNrY3RlbC5jLCB0aGVuIGl0IGJvbWJzIG91dCBpbiBja2NmdHAuYyBiZWNhdXNlIGl0IGNhbid0 IGZpbmQga3JiLmguICBJCi1mb3VuZCBpdCwgYWRqdXN0ZWQgdGhlIC1JIGZsYWdzLCBidXQgbm93 IGl0IGJvbWJzIGJlY2F1c2Uga3JiLmggaXRzZWxmCi0jaW5jbHVkZXMgPGtlcmJlcm9zSVYvZGVz Lmg+LCB3aGljaCBvZiBjb3Vyc2UgaXQgY2FuJ3QgZmluZCBiZWNhdXNlIHRoZQotYnJhY2tldHMg bWVhbiBpdCdzIGxvb2tpbmcgaW4gL3Vzci9pbmNsdWRlL2tlcmJlcm9zSVYvLCB3aGljaCwgb2Yg Y291cnNlLAotdGhlIHN5cyBmb2xrcyBoYXZlIHJlbW92ZWQuICBHaXZpbmcgdXAgb24gU29sYXJp cyBhZ2Fpbi4gIExhdGVyLCBKZWZmIHNhaWQKLSJTb2xhcmlzIGRvZXMgbm90IHB1YmxpY2x5IGV4 cG9ydCB0aGUga3JiNSBsaWJyYXJpZXMuICBZb3UgbmVlZCB0byBidWlsZAotdGhlIE1JVCBLZXJi ZXJvcyBsaWJyYXJpZXMgc2VwYXJhdGVseSBhbmQgbGluayB0byB0aGVtLiIgIDMwIERlY2VtYmVy IDIwMDYuCi0KLUNoYW5nZWQgY29weXJpZ2h0IGRhdGUgdG8gMjAwNy4gIGNrY21haS5jLCAxIEph biAyMDA3LgotCi1XaXRoIEVkIFJhdmluJ3MgaGVscCwgc3VjY2Vzc2Z1bGx5IGJ1aWx0IEMtS2Vy bWl0IHdpdGggS2VyYmVyb3MgNSBhbmQKLU9wZW5TU0wgKG5ldGJzZCtrcmI1K29wZW5zc2wremxp YiksIGJ1dCBpdCBkb2VzIG5vdCBtYWtlIEs1IGNvbm5lY3Rpb25zOyBpdAotZ2V0cyBodW5nIHVw IGluIHRoZSBUZWxuZXQgbmVnb3RpYXRpb25zLiAgMyBKYW4gMjAwNy4KLQotRG93bmxvYWRlZCBN SVQgS2VyYmVyb3MgNSB2MS40LjQgdG8gU29sYXJpcyA5LCA1NE1CIHdvcnRoLiAgVGhpcyBpcyBq dXN0IHNvCi1JIGNhbiBidWlsZCBhIEtlcmJlcml6ZWQgQy1LZXJtaXQgZm9yIHRlc3RpbmcgdHR5 cHR5Y21kKCkuICBSYW4gdGhlCi1jb25maWd1cmUgcHJvZ3JhbSwgZ290IGEgZmV3IHdhcm5pbmdz IGJ1dCBpdCBkaWRuJ3QgZmFpbCAoc2hvdWxkIGl0PykgIERpZAotIm1ha2UgaW5zdGFsbCIsIHNw ZWNpZnlpbmcgYSBwcml2YXRlIGRpcmVjdG9yeSBidXQgaXQgZmFpbGVkIGltbWVkaWF0ZWx5Ci13 aXRoICJjYW5ub3Qgc3RhdCBsaWJrcmI1c3VwcG9ydC5zby4wLjA6IE5vIHN1Y2ggZmlsZSBvciBk aXJlY3RvcnkiLgotT0ssIEkgdHJpZWQuICAzIEphbiAyMDA3LgotCi1NYWRlIGEgbmV3IG1ha2Vm aWxlIHRhcmdldCBmb3IgTWFjIE9TIFgsIG1hY29zeDEwLjQra3JiNStzc2wsIHJhbiBpdCBvbiBN YWMKLU9TIFggMTAuNC44LiAgSXQgYm9tYnMgb3V0IGluIGNrY2Z0cC5jIHdpdGg6IGNrY2Z0cC5j OjU1MTogZXJyb3I6IHN0YXRpYwotZGVjbGFyYXRpb24gb2YgJ2dzc19tZWNoX2tyYjUnIGZvbGxv d3Mgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbgotL3Vzci9pbmNsdWRlL2dzc2FwaS9nc3NhcGlfa3Ji NS5oOjc2OiBlcnJvcjogcHJldmlvdXMgZGVjbGFyYXRpb24gb2YKLSdnc3NfbWVjaF9rcmI1JyB3 YXMgaGVyZSIuICBEaXR0byBmb3IgZ3NzX21lY2hfa3JiNV9vbGQsIGdzc19udF9rcmI1X25hbWUs Ci1hbmQgZ3NzX250X2tyYjVfcHJpbmNpcGFsLiAgVHJpZWQgYWdhaW4gd2l0aCAtRE5PRlRQLiAg V2UgZ2V0IGxvdHMgb2YKLXdhcm5pbmdzIGluIHRoZSBuZXR3b3JrIG1vZHVsZXMsIGJ1dCB0aGV5 IGNvbXBsZXRlLiAgQnV0IGNrX3NzbC5jIGJvbWJlZAotd2l0aCBhIGNvbmZsaWN0IGJldHdlZW4g aXRzIG93biBkZWNsYXJhdGlvbnMgb2YgZW5jcnlwdF9vdXRwdXQgYW5kCi1kZWNyeXB0X2lucHV0 IGFuZCB0aGUgb25lcyBpbiBja3VhdDIuaDsgcmVtb3ZlZCB0aGUgcHJvdG90eXBlcyBmcm9tIHRo ZQotbGF0dGVyIChhcyBKZWZmIGFkdmlzZWQpIGl0IGJ1aWx0IE9LIGFuZCBpdCB3b3JrcyBPSyB0 b28uICBCdWlsdCB3aXRoIEZUUAotdG9vLCBidXQgd2l0aCBsaW5rLXRpbWUgd2FybmluZ3MgYWJv dXQgdGhlIGFmb3JlbWVudGlvbmVkIGdzc18qIHN5bWJvbHMuCi0jaWZkZWYnZCB0aGVtIG91dCAo Z3NzX21lY2hfa3JiNSwgZ3NzX21lY2hfa3JiNV9vbGQsIGdzc19tZWNoX25hbWUsIGFuZAotZ3Nz X21lY2hfcHJpbmNpcGFsKSBmb3IgTUFDT1NYLCB3aGVyZSB0aGVzZSBzeW1ib2xzIGFyZSBleHBv cnRlZCBieSB0aGUKLWxpYnJhcnkuICBOb3cgaXQgYWxsIGNvbXBpbGVzIGFuZCBsaW5rcyBPSywg YW5kIHJ1bnMgT0sgdG9vLiAgMyBKYW4gMjAwNy4KLQotU3BlbnQgYSBkYXkgaHVudGluZyBhcm91 bmQgZm9yIGEgdmVyc2lvbiBvZiBabW9kZW0gdGhhdCB3b3VsZCBidWlsZCBhbmQKLWV4ZWN1dGUg b24gTWFjIE9TIFgsIGZpbmFsbHkgZm91bmQgb25lLiAgTm93IGF0IGxhc3QgSSBjb3VsZCB0cnkg YSBabW9kZW0KLWV4dGVybmFsLXByb3RvY29sIHRyYW5zZmVyIG92ZXIgYSBzZWN1cmUgY29ubmVj dGlvbi4gIEJ1dCBwaG9vZXksIEMtS2VybWl0J3MKLXB0eSBzdXBwb3J0IGRpZG4ndCB3b3JrIG9u IHRoaXMgYm94LiAgS2VybWl0IGZpbmRzIG1hc3RlciAvZGV2L3B0eXBhIE9LLAotdGhlbiBpbiBw dHlpbnRfdm9pZF9hc3NvY2lhdGlvbigpIHRyaWVzIHRvIG9wZW4gL2Rldi90dHkgYnV0IGdldHMg RVJSTk89NgotImRldmljZSBub3QgY29uZmlndXJlZCIgKHdoaWNoIGlzIGFwcGFyZW50bHkgT0ss IGJlY2F1c2UgdGhlIHNhbWUgdGhpbmcKLWhhcHBlbnMgb24gb3RoZXIgcGxhdGZvcm1zIHdoZXJl IHRoaXMgd29ya3MpLCB0aGVuIHRyaWVzIHRvIG9wZW4gc2xhdmUKLS9kZXYvdHR5cGEgYW5kIGdl dHMgRVJSTk89MTMgInBlcm1pc3Npb24gZGVuaWVkIiBiZWNhdXNlLCBpbmRlZWQsIEkgZG9uJ3QK LWhhdmUgci93IHBlcm1pc3Npb24gb24gdGhlIGRldmljZS4gIExlZnQgYSBtZXNzYWdlLiAgNCBK YW4gMjAwNy4KLQotQ2hhbmdlZCBUUkFOU01JVCAvQklOQVJZIG91dHB1dCBidWZmZXIgc2l6ZSBm cm9tIDI1MiB0byA1MDggdG8gYXZvaWQKLVRDUCBmcmFnbWVudGF0aW9uLiAgTmVlZCB0byBhZGQg YSBTRVQgY29tbWFuZCBmb3IgdGhpcyBsYXRlci4KLWNrdXVzNC5jLCA1IEphbiAyMDA3LgotCi1G b3VuZCBhbm90aGVyIE1hYyB3aGVyZSB0aGUgcHR5cyB3ZXJlbid0IHByb3RlY3RlZCBhZ2FpbnN0 IG1lLCBtYWtlIGEgSzUKLWNvbm5lY3Rpb24gYW5kIHRyYW5zZmVycmVkIGEgbGFyZ2lzaCBmaWxl IHdpdGggWm1vZGVtIHdpdGggemVybyBnbGl0Y2hlcywKLWV4Y2VwdCBpdCB3YXMga2luZCBvZiBz bG93LCA4NEsgY3BzLiAgV2VsbCwgd2UncmUgZG9pbmcgc2luZ2xlLWNoYXJhY3RlcgotcmVhZHMg b24gdGhlIG5ldCAodHRpbmMoKSdzIGluc3RlYWQgb2YgdHR4aW4oKSkuICBIbW1tLCBidXQgdGhl biBJIGRpZCBpdAotYWdhaW4gYW5kIGdvdCAyLjJNY3BzLiAgU3VjY2VzcyB3YXMgcmVwb3J0ZWQs IGJ1dCBpdCBhY3R1YWxseSBkaWRuJ3Qgd29yazsKLWl0IG9ubHkgc2VudCB0aGUgZmlyc3QgcXVh cnRlciBvZiB0aGUgZmlsZS4uLi4gIE9oIHdlbGwsIGF0IGxlYXN0IG5vdyB3ZQotaGF2ZSBhIHRl c3RiZWQuICA1IEphbiAyMDA3LgotCi1UcmllZCBhZ2Fpbiwgc2F3IHRoYXQgdGhlIGZpbGUgaXMg YWN0dWFsbHkgdHJhbnNmZXJyZWQgaW5zdGFudGx5IGJ1dCB0aGVuCi13ZSdyZSBub3QgcGlja2lu ZyB1cCB0aGUgcHJvdG9jb2wgYXQgdGhlIGVuZC4gIFRoZW9yeTogYWZ0ZXIgdGhlIHRyYW5zZmVy Ci1maW5pc2hlcywgd2UgY29tZSBiYWNrIHRvIHRoZSBwcm9tcHQgb24gdGhlIHJlbW90ZSBob3N0 LCB3aGljaCBtZWFucyB3ZSBoYXZlCi1zb21ldGhpbmcgdG8gcmVhZCBmcm9tIHRoZSBuZXQgYW5k IHdyaXRlIHRvIHRoZSBwdHksIGJ1dCB0aGUgcHR5IGhhcyBhbHJlYWR5Ci1leGl0ZWQuICBBRlRF UiBUSEUgUFRZIElTIEdPTkUsIFdFIERPIE5PVCBXQU5UIFRPIFJFQUQgRlJPTSBUSEUgTkVUIEFO WQotTU9SRS4gIEFkZGluZyB0aGlzIHRlc3QgbWFrZXMgS2VybWl0IHN1Y2NlZWQgcmlnaHQgYXdh eSB3aGVuIHNlbmRpbmcgdGhlCi1zYW1lIGxhcmdpc2ggZmlsZSwgd2l0aCBhIHRyYW5zZmVyIHJh dGUgb2YgNE0gY3BzLCB0aGF0J3MgYmV0dGVyLiAgQnV0IHRoZQotcnogcHJvZ3JhbSBvbiB0aGUg ZmFyIGVuZCBpcyBldmlkZW50bHkgbm90IHJlY2VpdmluZyB0aGUgZ29vZGJ5ZSBoYW5kc2hha2UK LWZyb20gdGhlIHJlY2VpdmVyLCBiZWNhdXNlIGl0IHNpdHMgdGhlcmUgZm9yZWV2ZXIgaW4gaXRz ICpCMDkwMDI0MDIwMDk0MTgKLW1vZGUgdW50aWwgSSBeWF5YXlheWF5YIG91dCBvZiBpdCwgYXQg d2hpY2ggcG9pbnQgaXQgZGVsZXRlcyB0aGUgZmlsZSBpdAotYWxyZWFkeSByZWNlaXZlZCwgbm90 IHZlcnkgaGVscGZ1bC4gIEluIHRoZSBjb2RlLCBJIHJlYWQgZnJvbSB0aGUgcHR5IGlmIHRoZQot cHR5IGlzIG9wZW4gYW5kIHRoZXJlIGlzIHJvb20gaW4gdGhlIGJ1ZmZlci4gIFRoaXMgbWVhbnMg dGhhdCB3aGVuIHdlIGdldCB0bwotdGhlIGVuZCwgZWl0aGVyIHRoZXJlIGlzIG5vIHJvb20gaW4g dGhlIGJ1ZmZlciAodW5saWtlbHkpIG9yIHRoZSBsYXN0IGJpdAotc2VudCBieSBzeiBiZWZvcmUg ZXhpdGluZyB3YXMgY3V0IG9mZiB3aGVuIHRoZSBmb3JrIGNsb3NlZC4gIFdoeSBkbyB3ZSBnZXQK LWluIHRoaXMgZml4IG9ubHkgd2l0aCBabW9kZW0gYW5kIG5vdCB3aXRoIEtlcm1pdD8KLQotSW4g TWFjIE9TIFgsIGFmdGVyIHN6IGV4aXRzLCB3ZSBnZXQgRVJSTk89NSBpZiB3ZSB0cnkgdG8gd3Jp dGUgdG8gdGhlIHB0eSwKLWJ1dCB3ZSBzdGlsbCBnZXQgbm8gZXJyb3JzIGFmdGVyIHRoYXQgaWYg d2UgdHJ5IHRvIHJlYWQgZnJvbSBpdC4gIFN0aWxsLAotcHJpb3IgdG8gdGhpcyB3ZSBkaWQgbW9y ZSB0aGFuIDIwIHVucHJvZHVjdGl2ZSBub25ibG9ja2luZyByZWFkcyBmcm9tIHRoZQotcHR5IChu byBlcnJvciwgbm8gYnl0ZXMpIHdpdGhvdXQgaW5jaWRlbnQ7IHRoZXJlIGRpZCBub3Qgc2VlbSB0 byBiZSBhbnl0aGluZwotd2FpdGluZy4gIEluIGZhY3QsIHRoZSBsYXN0IHRoaW5nIHdlIHJlYWQg ZnJvbSB0aGUgcHR5IHdlcmUgdGhlIHRleHQKLW1lc3NhZ2VzIHRoYXQgYXJlIGlzc3VlZCBhdCB0 aGUgZW5kIG9mIHRoZSB0cmFuc2ZlcjogInJ6IDMuNzMgMS0zMC0wMwotZmluaXNoZWQuIiAgQWZ0 ZXIgd2hpY2ggaXQgcGF1c2VzIGEgc2Vjb25kIGFuZCBzcGl0cyBvdXQgYSBtZXNzYWdlIGFib3V0 Ci1VTlJFR0lTVEVSRUQgQ09QWS4KLQotRmlndXJlZCBvdXQgaG93IHRvIGJ1aWxkIGxyenN6LCBp biBob3BlcyB0aGF0IHRoZSBwcmV2aW91cyBwcm9ibGVtcyB3ZXJlCi13aXRoIHJ6c3ogYW5kIGNy enN6J3MgZmlkZGxpbmcgd2l0aCBmaWxlIGRlc2NyaXB0b3JzLCBidXQgSSBnZXQgdGhlIHNhbWUK LWJlaGF2aW9yLiAgV2hpY2ggaXMgZ29vZCwgSSBndWVzcywgYmVjYXVzZSBpZiBJIGNhbiBmaXgg b25lLCBJIGZpeCB0aGVtIGFsbC4KLU9yIG5vdC4uLiAgVGVzdGluZyBscnogYnkgaXRzZWxmIChu b3QgdW5kZXIgQy1LZXJtaXQpLCBJIHNlZSB0aGF0IGl0IGRvZXNuJ3QKLXdvcmsgYXQgYWxsIHdp dGggS2VybWl0J3Mgb3duIFptb2RlbSBpbXBsZW1lbnRhdGlvbi4KLQotT0ssIGhlcmUncyBvbmUg cHJvYmxlbTogYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNmZXIsIHRoZSBPbWVuIFptb2RlbXMgcHJp bnQKLXN0dWZmIGxpa2UgIlBsZWFzZSByZWFkIHRoZSBsaWNlbnNlIGFncmVlbWVudCIsIEtlcm1p dCBkdXRpZnVsbHkgcmVhZHMgdGhpcwotZnJvbSB0aGUgcHR5IGFuZCBzZW5kcyBpdCB0byB0aGUg aG9zdCwgdGhlIGhvc3Qgc2hlbGwgc2F5cyAiUGxlYXNlOiBjb21tYW5kCi1ub3QgZm91bmQiLCBp c3N1ZXMgaXRzIHByb21wdCBhZ2Fpbiwgd2hpY2ggS2VybWl0IHJlYWRzLCBmZWVkcyB0byB0aGUg cHR5LAotYW5kIGFwcGFyZW50bHkgdGhlIHB0eSBlY2hvZXMgaXQsIHNvIHdlIHNlbmQgaXQgYmFj ayB0byB0aGUgaG9zdCwgYW5kIHRoZXJlCi1lbnN1ZXMgYW4gaW5maW5pdGUgbG9vcCBvZiBnZXR0 eSBiYWJibGUgdW50aWwgdGhlIHB0eSBjbG9zZXMuICBOb3csIHRoZXJlCi1vdWdodCB0byBiZSBh IHdheSB0byBtYWtlIHRoZSBleHRlcm5hbCBwcm90b2NvbCBzaHV0IHVwLCBsaWtlIEtlcm1pdCdz Ci0tcSh1aWV0KSBmbGFnLCBidXQgdGhlc2UgYXJlIHVucmVnaXN0ZXJlZCB2ZXJzaW9ucyBzbyB5 b3UgY2FuJ3Qgc2h1dCB1cCB0aGUKLW1lc3NhZ2VzLiAgSW4gZmFjdCwgdGhlIHRyYW5zZmVyIHdv cmtzLCBidXQgdGhlIGdldHR5IGJhYmJsZSBhdCB0aGUgZW5kCi1ydWlucyB0aGUgZXhwZXJpZW5j ZS4gIE5vdyBJJ20gYmVnaW5uaW5nIHRvIHdvbmRlciBob3cgYW55IG9mIHRoZXNlIHByb2dyYW1z Ci1ldmVyIHdvcmtlZCBhcyBleHRlcm5hbCBwcm90b2NvbHMuICBIbW1tLCBub3cgdGhhdCBJIHRy eSBpdCwgSSBzZWUgdGhlCi1zYW1lIHRoaW5nIGhhcHBlbnMgdGhlIG9sZCB3YXksIHdoZW4gdXNp bmcgdHRydW5jbWQoKSByYXRoZXIgdGhhbiB0dHB0eWNtZCgpLgotCi1SZWFkaW5nIHRoZSBjcnpz eiBkb2N1bWVudGF0aW9uIEkgc2VlIGl0IHNheXMgdGhhdCBtZXNzYWdlcyBjb21lIG91dCBvbgot c3RkZXJyLiAgT0ssIHRoYXQncyBwcm9ncmVzcy4gIEluIGNrdXB0eS5jIEkgdHJ5IHJlZGlyZWN0 aW5nIDIgdG8gL2Rldi9udWxsLgotV2VsbCBnb29kLCB0aGlzIGZpbHRlcnMgb3V0IHRoZSBtZXNz YWdlcyBmcm9tIGNzeiwgYnV0IHdlIHN0aWxsIGdldCBnZXR0eQotYmFiYmxlIG9uIHRoZSBwcm9t cHQuICBJbiB0aGUgZGVidWcgbG9nLCB3ZSByZWFkIHRoZSBsYXN0IGJ1bmNoIG9mIHN0dWZmCi1m cm9tIG5ldCwgNjE4IGJ5dGVzIG9mIFptb2RlbSBzdHVmZi4uLiAgIE5vdyB3aGF0IGhhcHBlbnM/ Ci0KLVptb2RlbSBvbiB0aGUgcmVtb3RlIGV4aXRzLCB0aGUgaG9zdCBwcmludHMgaXRzIHByb21w dC4gIEtlcm1pdCwgb2YgY291cnNlLAotcmVhZHMgdGhlIHByb21wdCBmcm9tIHRoZSBuZXQsIG5v dyBjb21lIHRvIHRoZSBib3R0b20gb2YgdGhlIGxvb3AgYW5kIHdlCi1oYXZlIDcgYnl0ZXMgdG8g d3JpdGUgdG8gdGhlIHB0eSwgYW5kIG5vIGVycm9yIGNvbmRpdGlvbiwgc28gd2UgY29udGludWUg dGhlCi1sb29wLiAgc2VsZWN0KCkgc2F5cyB0aGF0IHRoZSBwdHkgaXMgcmVhZHkgZm9yIHdyaXRp bmcuICBXZSB3cml0ZSB0aGUgNwotYnl0ZXMgYW5kIGFuZCBnZXQgbm8gZXJyb3IuICBMb29wIGFn YWluLCB0aGlzIHRpbWUgc2VsZWN0KCkgc2F5cyB0aGUgcHR5IGhhcwotZGF0YSB3YWl0aW5nLiAg U3VyZSBlbm91Z2ggd2UgZ2V0IHRoZSBwcm9tcHQgYmFjaywgYW5kIHNlbmQgaXQgdG8gdGhlIG5l dCwKLWFuZCB0aHVzIGJlZ2lucyB0aGUgZ2V0dHkgYmFiYmxlLiAgVGhlcmUgYXJlIHR3byBjYXVz ZXMgZm9yIHRoaXM6Ci0KLSAgMS4gY3J6c3ogZG9lcyBub3QgZXhpdCBpbW1lZGlhdGVseTsgaXQg c2xlZXBzIGZvciAxMCBzZWNvbmRzIGFmdGVyCi0gICAgIHByaW50aW5nIGl0cyBuYWcgbWVzc2Fn ZS4KLQotICAyLiBEdXJpbmcgdGhpcyBpbnRlcnZhbCB0aGUgcHR5IHNlZW1zIHRvIGJlIGVjaG9p bmcgd2hhdCBpcyBzZW50IHRvIGl0LgotICAgICBjc3ogaXMgbm90IGVjaG9pbmc7IEkgY2hlY2tl ZC4gIEFueXdheSwgcmVtb3ZpbmcgdGhlIHBhdXNlIGRvZXNuJ3QKLSAgICAgc2VlbSB0byBtYWtl IGEgZGlmZmVyZW5jZS4KLQotdHRwdHljbWQoKSBuZWVkcyB0bzoKLQotIC4gVEVMTCB0aGUgcHR5 IG1vZHVsZSB0byByZWRpcmVjdCBzdGRlcnIgdG8gL2Rldi9udWxsCi0gLiBTRVQgUFRZIFRPIE5P RUNITyAobWFzdGVyIG9yIHNsYXZlPykKLQotVHJpZWQgc2V0dGluZyB0aGUgcHR5IHRvIG5vZWNo bzoKLQotICB0ZXJtYnVmLmNfbGZsYWcgJj0gfihFQ0hPfEVDSE9FfEVDSE9LKTsKLQotYW5kIHRo aXMgc2VlbWVkIHRvIHN0b3AgdGhlIGdldHR5IGJhYmJsZS4gIEFmdGVyIHRoZSBmaWxlIHRyYW5z ZmVyLCBJIHJlYWQKLWJhY2sgdGhlIHByb21wdCBmcm9tIHRoZSBob3N0IHNoZWxsLCBJIHdyaXRl IHRoZSBwcm9tcHQgYnl0ZXMgdG8gdGhlIHB0eTsKLXRoZXJlIGlzIG5vIGVycm9yLiAgQW5kIG5v dyBzZWxlY3QoKSBzaW1wbHkgaGFuZ3MgZm9yZXZlciAob3IgdGltZXMgb3V0IGlmCi1hIHRpbWVv dXQgaXMgc2V0KS4gIFRoZSBxdWVzdGlvbiBoZXJlIGlzOiB3aHkgZGlkbid0IHdyaXRpbmcgdG8g dGhlIHB0eQotcHJvZHVjZSBhbiBlcnJvcj8gIEFuZCwgYmVjYXVzZSB3ZSBuZXZlciBkZXRlY3Qg dGhlIHB0eSBoYXMgZXhpdGVkLCB3ZSBjYW4ndAotc2V0IGEgZ29vZCByZXR1cm4gY29kZS4gIDUg SmFuIDIwMDcuCi0KLU1vdmVkIHB0eSBmb3JrIHRlc3RpbmcgdG8gYSBzZXBhcmF0ZSByb3V0aW5l LCBwdHlfZ2V0X3N0YXR1cygpLCBhbmQgCi1hZGRlZCBhIGNhbGwgdG8gaXQgZnJvbSB0aGUgcGxh Y2Ugd2hlcmUgd2UgdGltZSBvdXQsIGluIGNhc2UgdGhlIGZvcmsKLXRlcm1pbmF0ZWQ7IHRoZW4g d2UgY2FuIGdldCBhbmQgcmV0dXJuIGl0cyBzdGF0dXMuICA2IEphbiAyMDA3LgotCi1BZGRlZCBj YWxscyB0byBwdHlfZ2V0X3N0YXR1cygpIHRvIGV2ZXJ5IHBsYWNlIHdoZXJlIHdlIHN1c3BlY3Qg YSBwdHkgZXJyb3IsCi10cmllZCBhZ2FpbiB3aXRoIGxyenN6LCBjcnpzeiwgYW5kIHJlZ3VsYXIg cnpzei4gIEFsbCB0aHJlZSB3b3JrLCBidXQgaW4KLWVhY2ggY2FzZSB3YWl0cGlkKCkgaW5kaWNh dGVzIHRoYXQgdGhlIHN6IHByb2dyYW0gZ2F2ZSBleGl0IGNvZGUgMSAoZmFpbHVyZSkuCi1ja3V0 aW8uYywgNyBKYW4gMjAwNy4KLQotQ2hhbmdpbmcgdGhlIHN1YmplY3QuLi4gIE9uIG15IHRlc3Qg c3lzdGVtLCBldmVyeSB0aW1lIEkgZXhlY3V0ZSB0dHB0eWNtZCgpLAotSSBnZXQgInBlcm1pc3Np b24gZGVuaWVkIiBvbiAvZGV2L3R0eXAzLiAgVGhlbiBJIHJ1biBpdCBhZ2FpbiBhbmQgZ2V0IHRv Ci10dHlwNCB3aGljaCBpcyBPSy4gIEkgd2FudGVkIHRvIHNraXAgcGFzdCBhbnkgcHR5IGZvciB3 aGljaCBJIGxhY2sKLXBlcm1pc3Npb24gYW5kIHRyeSB0aGUgbmV4dCB3aXRob3V0IHJhaXNpbmcg YW4gZXJyb3IuICBBZGRlZCBkZWJ1Z2dpbmcgY29kZToKLQotICAxNjoyNToyMy41MjQgcHR5X2dl dHB0eSgpIHB0eSBtYXN0ZXIgb3BlbiBlcnJvclsvZGV2L3B0eXAwXT01Ci0gIDE2OjI1OjIzLjUy NCBwdHlfZ2V0cHR5KCkgcHR5IG1hc3RlciBvcGVuIGVycm9yWy9kZXYvcHR5cDFdPTUKLSAgMTY6 MjU6MjMuNTI0IHB0eV9nZXRwdHkoKSBwdHkgbWFzdGVyIG9wZW4gZXJyb3JbL2Rldi9wdHlwMl09 NQotICAxNjoyNToyMy41MjQgcHR5X2dldHB0eSgpIGZvdW5kIHB0eSBtYXN0ZXJbL2Rldi9wdHlw M10KLSAgMTY6MjU6MjMuNTI0IHB0eV9nZXRwdHkoKSBzbGF2ZWJ1ZiBbMl1bL2Rldi90dHlwM10K LQotU28gaXQgYWxyZWFkeSB3YXMgc2tpcHBpbmcgcGFzdCBvcGVuIGVycm9yczsgdHR5cDMgd2Fz IG9wZW5lZCBzdWNjZXNzZnVsbHkuCi1UaGUgcHJvYmxlbSBpcyB0aGF0IHB0eXAzIGlzIHJ3LXJ3 LXJ3LSwgYnV0IHRoZSBjb3JyZXNwb25kaW5nIG1hc3RlciwKLXR0eXAzLCBpcyBydy0tci0tLS0u ICBJdCBzZWVtcyB0aGUgY29kZSBhc3N1bWVzIHRoYXQgaWYgdGhlIG1hc3RlciBjYW4gYmUKLW9w ZW5lZCwgdGhlbiBzbyBjYW4gdGhlIGNvcnJlc3BvbmRpbmcgc2xhdmUuICBVbmZvcnR1bmF0ZWx5 LCB0aGUgY29kZSBpcwotbm90IHN0cnVjdHVyZWQgdG8gYWxsb3cgdXMgdG8gc2tpcCBhaGVhZCB0 byB0aGUgbmV4dCBtYXN0ZXIgaWYgdGhlIHNsYXZlCi1jYW4ndCBiZSBvcGVuZWQuICA3IEphbiAy MDA3LgotCi1TcGVudCBhIGNvdXBsZSBob3VycyB0cnlpbmcgdG8gcmVhcnJhbmdlIHRoZSBjb2Rl IGluIHRoZSBwdHkgbW9kdWxlIHRvIHNraXAKLXBhc3QgaW5hY2Nlc3NpYmxlIHNsYXZlcyBidXQg aXQgd2FzIGEgcmFiYml0IGhvbGUsIG5vdCB3b3J0aCBpdCwgYmFja2VkIG9mZi4KLTggSmFuIDIw MDguCi0KLVRyaWVkIGFuIHVwbG9hZCBvdmVyIGEgc2VjdXJlIGNvbm5lY3Rpb24gdXNpbmcgbHN6 LiAgVW5leHBlY3RlZGx5LCB0aGlzIHRpbWUKLWl0IHdvcmtlZDsgbm90IG9ubHkgd2FzIHRoZSBm aWxlIChhYm91dCAwLjVNQikgdHJhbnNmZXJyZWQgY29ycmVjdGx5LCBidXQKLUtlcm1pdCBkZXRl Y3RlZCB0aGUgZm9yaydzIHRlcm1pbmF0aW9uIGFuZCBnb3QgdGhlIHBpZCdzIGV4aXQgc3RhdHVz LCBhbmQsCi1mb3IgdGhlIGZpcnN0IHRpbWUsIGNvcnJlY3RseSByZXBvcnRlZCBhIHN1Y2Nlc3Nm dWwgdHJhbnNmZXIuICBJIGhhdmUgbm8KLWlkZWEgd2h5IHRoaXMgd29ya3MgdG9kYXkgYW5kIG5v dCB5ZXN0ZXJkYXkuICBNb3JlIHRlc3RzOyBpdCB3b3JrcyBtb3N0IG9mCi10aGUgdGltZS4gIEl0 IHdvcmtzIHdpdGggY3N6IGFuZCB3aXRoIHJlZ3VsYXIgc3ogdG9vLgotCi0oZGF5cyBsYXRlci4u LikKLQotY2t1Y25zLmMgc2VlbXMgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nOyBpdCByZWNvZ25pemUg dGhlIFpTVEFSVCBzdHJpbmcsCi1hY3RpdmF0ZXMgdGhlIFptb2RlbS1SZWNlaXZlIEFQQywgYW5k IHJldHVybnMuICBkb2NvbmVjdCgpIHNlZXMgdGhlIEFQQyBhbmQKLWJlZ2lucyB0byBleGVjdXRl IGl0LiAgVGhlIFJFQ0VJVkUgY29tbWFuZCByZXN1bHRzIGluIGEgY2FsbCB0byB0aGUgR0VUCi1j b21tYW5kIHBhcnNlciwgZG94Z2V0KCkgKElTIFRIQVQgUklHSFQ/KSwgdGhlbiBjb21lcyBhIHR0 Zmx1aSgpLCB3aGljaAotdGhyb3dzIGF3YXkgYSBidW5jaCBvZiBzdHVmZi4gIEZpbmFsbHkgd2Ug Z2V0IHRvIHR0cHR5Y21kKCksIHdlIGdldCBhIHB0eQotYW5kIHJ1biBscnogaW4gaXQsIHNlbGVj dCgpIHNheXMgc3R1ZmYgaXMgd2FpdGluZyBmcm9tIHRoZSBwdHksIGJ1dCByZWFkCi1yZXR1cm5z IDAsIGVycm5vIDAuICBTa2lwcGluZyB0aGUgdHRmbHVpKCkgaW4gZG94Z2V0KCkgaWYgdGhlIHBy b3RvY29sIHdhcwotbm90IEtlcm1pdCBkaWRuJ3Qgc2VlbSB0byBtYWtlIGRpZmZlcmVuY2UuICBj a3V1czYuYywgOCBKYW4gMjAwNy4KLQotVGhlIHByb2JsZW0gaXMgdGhhdCBpbiB0aGlzIGNhc2Us IHJlYWRzIGZyb20gdGhlIHB0eSBuZXZlciBnZXQgYW55dGhpbmcgKG5vCi1kYXRhLCBubyBlcnJv ciksIHdyaXRlIGFsd2F5cyBnZXRzIGFuIGVycm9yLiAgSXQncyBhcyBpZiB0aGUgcHR5IHdhcyBu b3QKLWJlaW5nIHNldCB1cCByaWdodCwgb3Igd2UncmUgdXNpbmcgdGhlIHdyb25nIGZpbGUgZGVz Y3JpcHRvci4gIEFuZCBpZiB3ZQotc2tpcCB0aGUgYXV0b2Rvd25sb2FkPyAgU2FtZSB0aGluZy4K LQotT0ssIHB1dHRpbmcgZG93bmxvYWRzIGFzaWRlIGZvciBhIG1vbWVudCwgbGV0J3MgZ2V0IHVw bG9hZHMgd29ya2luZyBhcyB3ZWxsCi1hcyBwb3NzaWJsZS4gIEF0IHRoaXMgcG9pbnQgd2UgaGF2 ZSB0aGUgb2RkIHNpdHVhdGlvbiAoYXQgbGVhc3QgaW4gdGhpcwotY29uZmlndXJhdGlvbikgdGhh dCB0aGUgdXBsb2FkIHN1Y2NlZWRzLCBidXQgbm93IGZvciBzb21lIHJlYXNvbiB3ZSBhcmUKLXVu YWJsZSB0byByZWFkIHRoZSBleGl0IHN0YXR1cyBmcm9tIHRoZSBwcm9jZXNzLCBldmVuIHRob3Vn aCB0aGlzIHdhcwotd29ya2luZyBiZWZvcmUsIHNvIHR0cHR5Y21kKCkgcmV0dXJucyAwIChmYWls dXJlKSwgeWV0IEtlcm1pdCByZXBvcnRzCi1zdWNjZXNzLgotCi1XZWxsLCBpdCB0dXJucyBvdXQg dGhhdCBraWxsKHB0eV9mb3JrX3BpZCwwKSB3YXMgZ3VtbWluZyB1cCB0aGUgd29ya3MuCi1JZiB3 ZSB1c2Ugb25seSB3YWl0cGlkKCkgYWxsIGlzIHdlbGwsIEkgdGhpbmsuICB3YWl0cGlkKCkgd2l0 aCBXTk9IQU5HCi1yZXR1cm5zIC0xIHdpdGggc3RhdHVzIC0xIGVycm5vIDAgaWYgdGhlIHBpZCBo YXMgbm90IGV4aXRlZCwgYW5kIGl0IHJldHVybnMKLXRoZSBwaWQgYW5kIHN0YXR1cyA+IC0xIGlm IHRoZSBwcm9jZXNzIGhhcyBleGl0ZWQuICBGaXhlZCBwdHlfZ2V0X3N0YXR1cygpCi10byBkbyBp dCB0aGlzIHdheS4gIGNrdXRpby5jLCA3IEphbiAyMDA3LgotCi1MZXQncyBtb3ZlIHRoaXMgZnJv bSBNYWMgT1MgdG8gTmV0QlNEIGFuZCBzZWUgaG93IGl0IHdvcmtzLiAgV2VsbCwgdGhlIGZpbGUK LXRyYW5zZmVyIHdhcyBqdXN0IGZpbmUsIGJ1dCB0aGVuIEkgdXNlZCBzb21lIHNleHBzIHRvIGNh bGN1bGF0ZSB0aGUgZWxhcHNlZAotdGltZSBhbmQgdHJhbnNmZXIgcmF0ZSwgYW5kIEtlcm1pdCBo dW5nIGluIGRvc2V4cCgpLiAgRmluZSwgaWdub3JpbmcgdGhhdC4uLgotVGhlIGRlYnVnIGxvZyBz aG93cyB0aGF0IHR0cHR5Y21kKCkgZ2V0cyB0aGUgcHR5IE9LLCBtYXN0ZXIgYW5kIHNsYXZlLCB0 aGUKLWkvbyBnb2VzIHNtb290aGx5LCBhbmQgd2FpdHBpZCgpIGRvZXMgaXRzIGpvYiBwZXJmZWN0 bHkuICBTb2xhcmlzLCBzYW1lCi1kZWFsOyB0dHJ1bmNtZCgpIGdvZXMgc21vb3RobHksIGJ1dCB0 aGVuIHRoZSBzZXhwcyBhZnRlcndhcmQgZ2V0ICJBcml0aG1ldGljCi1leGNlcHRpb24iLiAgVHVy bnMgb3V0IHRoZXJlIHdhcyBhIEJBRCBidWcgaW4gZG9zZXhwKCkgdGhhdCBhbGxvd2VkIGFuCi1p bnRlZ2VyIGRpdmlzaW9uIGJ5IDAgdG8gb2NjdXIgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2Vz OyBpdCdzIGFsd2F5cyBiZWVuCi10aGVyZS4gIEZpeGVkIGluIGRvc2V4cCgpOiBja3V1czMuYywg OCBKYW4gMjAwNy4KLQotQWZ0ZXIgbm90aWNpbmcgYSBmZXcgcHJvYmxlbXMgcnVubmluZyB0aGUg cG9wLmtzYyBzY3JpcHQgaW4gcHJvZHVjdGlvbiBvdmVyCi10aGUgcGFzdCB5ZWFyLCByZXdyb3Rl IFxmZW1haWxhZGRyZXNzKCkgdG8gYmUgbW9yZSByZWxpYWJsZSBhbmQgYSBsb3QKLXNpbXBsZXIu ICBja3V1czQuYywgOSBKYW4gMjAwNy4KLQotQmFjayB0byB0dHB0eWNtZCgpLi4uICBXaGVuIHdl IGxlZnQgb2ZmLCB3ZSBjb3VsZCBzZW5kIGJ1dCBub3QgcmVjZWl2ZS4gIFNldAotdXAgYSB0ZXN0 IGNhc2UgdXNpbmcgS2VybWl0IGFzIHRoZSBleHRlcm5hbCBwcm90b2NvbCBmb3IgcmVjZWl2aW5n IGEgc2hvcnQKLWZpbGUuICBJZiBJIFNFVCBTVFJFQU1JTkcgT0ZGIGFuZCB1c2Ugc2hvcnQgcGFj a2V0cywgaXQgYWN0dWFsbHkgZG9lcyB3b3JrLAotc28gaXQncyBub3QgYSBjb21wbGV0ZSBmYWls dXJlIHRvIGZ1bmN0aW9uLCBidXQgYXBwYXJlbnRseSBhIGxhY2sgb2YgZmxvdwotY29udHJvbCBm b3IgdGhlIHB0eS4gIEJlZ2FuIGJ5IGNvbXBsZXRpbmcgdGhlIHBhcmFtZXRlcml6YXRpb24gb2Yg dGhlIHB0eQotbW9kdWxlLCBzbyBpdCBjYW4gYmUgY2FsbGVkIGZvciBpbnRlcmFjdGl2ZSB1c2Ug KGZjIDApIG9yIGZvciBydW5uaW5nCi1wcm90b2NvbHMgKDEpLiAgQ29uZmlybWVkIHRoYXQgZXZl cnl0aGluZyB3b3JrcyBhdCBsZWFzdCBhcyB3ZWxsIGFzIGJlZm9yZQotKGUuZy4gInNldCBob3N0 IC9wdHkgZW1hY3MiIHZzIGV4dGVybmFsIHByb3RvY29scykuICBja2NkZWIuaCwgY2t1dGlvLmMs Ci1ja3VwdHkuYywgOSBKYW4gMjAwNy4KLQotRm91bmQgaW4gSFAtVVggIm1hbiA3IHB0eSIgYSBk ZXNjcmlwdGlvbiBvZiBpb2N0bChmZCxUSU9DVFRZLGZjKSB3aGljaCBpcwotZXhhY3RseSB3aGF0 IHdlIHdhbnQ6IGZjIDAgdHVybnMgb2ZmIGFsbCB0ZXJtaW8gcHJvY2Vzc2luZyBhbmQgZ3VhcmFu dGVlcyBhbgotdW5pbnRlcnJ1cHRlZCwgdW5tb2xlc3RlZCwgZmxvdy1jb250cm9sbGVkIHN0cmVh bSBvZiBieXRlcyBpbiBib3RoCi1kaXJlY3Rpb25zLiAgVGhpcyBmdW5jdGlvbiBhbHNvIGV4aXN0 cyBpbiBMaW51eCwgYnV0IG5vdCBpbiBTb2xhcmlzLCBOZXRCU0QsCi1vciBNYWMgT1MgWCAoVElP Q05PVFRZIGlzIG5vdCB3aGF0IHdlIHdhbnQsIGl0IGRvZXMgc29tZXRoaW5nIGVsc2UgZW50aXJl bHkpLgotCi1Bbm90aGVyIHBvc3NpYmlsaXR5IGlzIFRJT0NSRU1PVEUsIHdoaWNoICJjYXVzZXMg aW5wdXQgdG8gdGhlIHBzZXVkb3Rlcm1pbmFsCi10byBiZSBmbG93IGNvbnRyb2xsZWQgYW5kIG5v dCBpbnB1dCBlZGl0ZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHRlcm1pbmFsCi1tb2RlIi4gIFRoaXMg b25lIGV4aXN0cyBpbiBhdCBsZWFzdCBIUFVYLCBOZXRCU0QsIFNvbGFyaXMsIGFuZCBNYWMgT1Mg WC4KLQotU29sYXJpczogYnVpbGRzIE9LLCBidXQgYXQgcnVudGltZSB3ZSBnZXQgRU5PVFRZICgi SW5hcHByb3ByaWF0ZSBpb2N0bCBmb3IKLWRldmljZSIpLiAgQnkgdGhlIHRpbWUgdGhpcyBoYXBw ZW5zLCBpdCdzIGhhcmQgdG8gdGVsbCBmcm9tIHRoZSBjb2RlIHdoZXRoZXIKLXRoZSBmZCB3ZSdy ZSB1c2luZyBpcyBmb3IgdGhlIG1hc3RlciBvciB0aGUgc2xhdmU7IFRJT0NSRU1PVEUgY2FuIGJl IHVzZWQKLW9ubHkgb24gdGhlIG1hc3Rlci4gIENsb3NlIGluc3BlY3Rpb24gc2hvd3MgdGhhdCBJ IGFtIGluZGVlZCBkb2luZyB0aGF0OwotcHR5ZmQgYXMgc2VlbiBieSB0dHB0eWNtZCgpIGlzIHRy dWx5IHRoZSBtYXN0ZXIsIGkuZS4gdGhlIC9kZXYvcHR5WFggZGV2aWNlLAotbm90IHRoZSAvZGV2 L3R0eVhYIGRldmljZSAodGhlIHNsYXZlIGZkIGNhbid0IGJlIHNlZW4gYXQgYWxsLCBhcyBpdCBl eGlzdHMKLW9ubHkgaW4gYSBzZXBhcmF0ZSBmb3JrKS4gIE9LLCBzbyBub3cgd2Uga25vdyB0aGF0 IFRJT0NSRU1PVEUgY2FuJ3QgYmUgdXNlZAotb24gU29sYXJpcy4KLQotTmV0QlNEOiBTb21laG93 LCB3aGV0aGVyIGFzIGEgcmVzdWx0IG9mIHRvZGF5J3MgZmlkZGxpbmcgb3IgdGhlIHBoYXNlIG9m IHRoZQotbW9vbiwgdGhlIGNvZGUgaW4gcHR5X29wZW5fc2xhdmUoKSB0aGF0IHRyaWVzIHRvIG9w ZW4gL2Rldi90dHkgc3RhcnRlZAotZmFpbGluZyBvbiBOZXRCU0QgKCJEZXZpY2Ugbm90IGNvbmZp Z3VyZWQiKS4gIENoYW5naW5nIGl0IHRvIGJlIHJ1biBvbmx5IGlmCi1mYyA9PSAwICh3aGljaCBk b2Vzbid0IHNlZW0gdG8gaHVydCBhbnl0aGluZyksIG9uY2UgYWdhaW4gSSBnZXQgRU5PVFRZIG9u Ci10aGUgVElPQ1JFTU9URSBpb2N0bC4gIFptb2RlbSB3b3JrcyBidXQgS2VybWl0IHRvdGFsbHkg ZmFpbHMgKHRoZSBmb3JrIGV4aXRzCi1pbW1lZGlhdGVseSB3aXRoIGFuIGV4aXQgY29kZSBvZiAw LCBldmVuIHRob3VnaCBpdCBkaWRuJ3QgZG8gYW55dGhpbmcpLgotCi1NYWMgT1MgWDogRXhhY3Rs eSB0aGUgc2FtZSBzZXF1ZW5jZSBhbmQgcmVzdWx0cyBhcyBOZXRCU0QuCi0KLUxpbnV4OiAgSXQg ZGlkIG5vdCBleGVjdXRlIHRoZSBuZXcgaW9jdGwgYXQgYWxsOyBhcHBhcmVudGx5IHRoZSBUSU9D IHN5bWJvbHMKLWFyZSBoaWRkZW4gb3Igbm90IGV4cG9ydGVkIG9yIHNvbWV0aGluZy4KLQotV2hl cmUgd2Ugc3RhbmQ6Ci0gLiBEb3dubG9hZHMgZG9uJ3Qgd29yawotIC4gVXBsb2FkcyBnb3Qgc2xv dyBhZ2FpbgotIC4gS2VybWl0IGRvZXNuJ3Qgd29yayBhdCBhbGwgYXMgYW4gZXh0ZXJuYWwgcHJv dG9jb2wKLQotQWN0dWFsbHkgaWYgSSB0YWtlIHRoZSBkZWJ1Z2dpbmcgb3V0IGl0IGdvZXMgZmFz dCwgYnV0IGl0IGRvZXNuJ3QgZmluaXNoLgotCi1BbGwgdG9kYXkncyB3b3JrIG9uIHR0cHR5Y21k KCkgbG9va3MgbGlrZSBhIGRlYWQgZW5kLiAgVG8gcm9sbCBiYWNrIHRvCi15ZXN0ZXJkYXk6Ci0K LSAgY3AgY2t1dGlvLmMtMjAwNzAxMDggY2t1dGlvLmMKLSAgY3AgY2t1cHR5LmMtMjAwNzAxMDgg Y2t1cHR5LmMKLSAgY3AgY2t1cHR5LmgtMjAwNzAxMDggY2t1cHR5LmgKLQotb3IgdG8gY29udGlu dWUgd2l0aCB0b2RheSdzOgotCi0gIGNwIGNrdXRpby5jLTIwMDcwMTA5IGNrdXRpby5jCi0gIGNw IGNrdXB0eS5jLTIwMDcwMTA5IGNrdXB0eS5jCi0gIGNwIGNrdXB0eS5oLTIwMDcwMTA5IGNrdXB0 eS5oCi0KLUNvbXBhcmluZyBNb25kYXkncyBhbmQgVHVlc2RheSdzIHB0eS1yZWxhdGVkIGNvZGUs IHRoZSBkaWZmZXJlbmNlcyBhcmU6Ci0gMS4gUGFzc2luZyBvZiBmdW5jdGlvbiBjb2RlIHRvIGFu ZCBhbW9uZyBwdHkgbW9kdWxlcy4KLSAyLiBTa2lwcGluZyB0aGUgVElPQ1NDVFRZIGlvY3RsIGFu ZCB0aGUgb3BlbigiL2Rldi90dHkiKSB0ZXN0LgotIDMuIEF0dGVtcHRpbmcgdG8gcHV0IHB0eSBp biBUSU9DVFRZIG9yIFRJT0NSRU1PVEUgbW9kZS4KLQotQ29tbWVudGluZyBvdXQgMiBhbmQgMyBz aG91bGQgcHV0IHVzIGJhY2sgd2hlcmUgd2Ugd2VyZSBvbiBNb25kYXkgaWYgdGhlCi1wYXJhbWV0 ZXJpemF0aW9uIHdhcyBkb25lIHJpZ2h0LiAgQW5kIHdpdGggdGhpcywgb24gU29sYXJpcywgZG93 bmxvYWRpbmcKLXdpdGggS2VybWl0IGV4dGVybmFsIHByb3RvY29sIHdvcmtzIGJ1dCBzbG93bHks IDhLIGNwcywgd2l0aCBvciB3aXRob3V0Ci1kZWJ1Z2dpbmcuICBEZWJ1ZyBsb2cgZG9lcyBub3Qg c2hvdyBhbnkgb2J2aW91cyBib3R0bGVuZWNrczsgc2VsZWN0KCkgdGFrZXMKLWFueXdoZXJlIGJl dHdlZW4gbm8gdGltZSBhdCBhbGwgYW5kIDAuMSBzZWNvbmRzIHRvIHJldHVybi4gIElmIEkgaW5j cmVhc2UKLXRoZSBwdHktbmV0IGJ1ZmZlciBzaXplIGZyb20gMUsgdG8gNEssIHRoZSByYXRlIGdv ZXMgdXAgdG8gNTVLIGNwcy4gIElmIEkKLW1ha2UgaXQgOEsgSSBnZXQgMTM2SyBjcHMuICBXaXRo IDE2SyBJIGdldCAzNDZLIGNwcy4gIDMySzogMzk1SyBjcHMgLS0gdGhpcwotbGFzdCBvbmUgaXNu J3Qgd29ydGggdGhlIGRvdWJsaW5nLiAgQnV0IGF0IDI0SyBJIGdldCA0OTBLIGNwcywgc29tZXRp bWVzCi10d2ljZSB0aGF0LiAgTGV0J3Mgc3RpY2sgd2l0aCAyNEsgZm9yIG5vdy4gIERvd25sb2Fk aW5nIHdpdGggWm1vZGVtIChyenN6KQotd29ya3MgYXQgdGhlIHNhbWUgcmF0ZSwgYnV0IG5vdyB3 ZSdyZSBiYWNrIHRvIHNlZWluZyB0aGUgZ2V0dHkgYmFiYmxlCi0oU2V2ZXJhbCAiKipCMDgwMDAw MDAwMDAyMmQiKSBhdCB0aGUgZW5kLiAxMCBKYW4gMjAwNy4KLQotTW92aW5nIHRvIE1hYyBPUyBY LCBldmVyeXRoaW5nIHdvcmtzIHRoZSBzYW1lIGFzIG9uIFNvbGFyaXMsIGV4Y2VwdCBJIGRvbid0 Ci1nZXQgdGhlIFptb2RlbSBnZXR0eSBiYWJibGUgdGhlcmUsIG5vdCBldmVuIHdpdGggT21lbiBy enN6LiAgVGVzdGVkIHNlbmRzCi1pbiBib3RoIHJlbW90ZSBhbmQgbG9jYWwgbW9kZSwgdGhlIGxh dHRlciBvdmVyIGEgc2VjdXJlIEtlcmJlcm9zIDUgVGVsbmV0Ci1jb25uZWN0aW9uLCB1c2luZyBD LUtlcm1pdCwgcnpzeiwgbHJ6c3osIGFuZCBjcnpzeiwgYWxsIGdvb2QuICAxMCBKYW4gMjAwNy4K LQotTm93IHdlJ3JlIGJhY2sgd2hlcmUgd2Ugd2VyZSB5ZXN0ZXJkYXkgbW9ybmluZywgYnV0IHdp dGggYmV0dGVyIHRocm91Z2hwdXQuCi1UaGUgYmlnIGlzc3VlIHRoZW4gd2FzIHJlY2VpdmluZyBm aWxlcy4gIEJ1dCB5aWtlcywgbm93IGl0IHdvcmtzISAgTm90IG9ubHkKLXRoYXQsIEkgZ290IGEg dHJhbnNmZXIgcmF0ZSBvZiAyLjFNIGNwcy4gIFRoYXQncyB1c2luZyBLZXJtaXQgcHJvdG9jb2ws Ci1zdHJlYW1pbmcsIGFuZCBiaWcgKDRLKSBwYWNrZXRzLiAgV2hpY2ggZGlkbid0IHdvcmsgYmVm b3JlLiAgTm90IGEgZmx1a2UKLWVpdGhlciwgSSB1cGxvYWRlZCBiaWdnZXIgYW5kIGJpZ2dlciBm aWxlcyB1cCB0byA2TUIsIHRoZXkgYWxsIHdlbnQKLXNtb290aGx5LCBhdCByYXRlcyBiZXR3ZWVu IDEgYW5kIDIgTUJwcy4gIDEwIEphbiAyMDA3LgotCi1Ob3Qgc28gZ3JlYXQgaW4gWm1vZGVtIGxh bmQsIGhvd2V2ZXIuICBJZiBJIHN0YXJ0IHRoZSBleHRlcm5hbC1wcm90b2NvbAotcmVjZWl2ZXIg b24gdGhlIGZhciBlbmQsIGVzY2FwZSBiYWNrIGFuZCBzdGFydCBhIFptb2RlbSBzZW5kLi4uIG5v dGhpbmcuCi1JZiBJIGxlYXZlIHRoZSByZW1vdGUgQy1LZXJtaXQgYXQgaXRzIHByb21wdCAod2hl cmUgaXQgc3VwcG9zZWQgdG8gcmVjb2duaXplCi10aGUgWm1vZGVtIHN0YXJ0IHN0cmluZyksIHN0 aWxsIG5vdGhpbmcuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgSSBkbyBpdAotd2l0aCBhIHNjcmlw dCBpbnN0ZWFkIG9mIGJ5IGhhbmQ6Ci0KLSAgZGVmIHh4IG91dHB1dCB0YWtlIGJsYWhcMTMsIHNl bmQgL3Byb3RvOnptb2RlbSBcJTEKLSAgCi1pdCB3b3JrcywgYXQgbGVhc3QgaW50ZXJtaXR0ZW50 bHkuICBCdXQgdGhhdCdzIGluIHJlbW90ZSBtb2RlLiAgV2Ugd29uJ3QgYmUKLXVzaW5nIHRoaXMg aW4gcmVtb3RlIG1vZGUuICBJbiBsb2NhbCBtb2RlLCB3aGVyZSB3ZSBoYXZlIGEgc2VjdXJlIGNv bm5lY3Rpb24KLXRvIGFub3RoZXIgY29tcHV0ZXIsIGl0IHNlZW1zIHdlIGNhbiByZWFkIGZyb20g dGhlIHB0eSBhbmQgd3JpdGUgdG8gdGhlIG5ldCwKLWJ1dCB3ZSB0aW1lIG91dCB3YWl0aW5nIHRv IHJlYWQgZnJvbSB0aGUgbmV0OyBub3RoaW5nIGFycml2ZXMuICBXZWxsLCB3ZQota25vdyB0aGF0 IGkvbyB3b3JrcyBib3RoIHdheXMsIHNvIHRoZXJlIGlzIHNvbWUga2luZCBvZiBzY3Jld3VwIHdp dGggdGhlCi1abW9kZW0gcHJvdG9jb2wgc3RhcnQgaXRzZWxmLiAgSW5jcmVhc2luZyB0aGUgKHN0 aWxsIGhhcmR3aXJlZCB0aW1lb3V0KSBmcm9tCi01IHRvIDIyc2VjIGFuZCBkcml2aW5nIHRoZSB3 aG9sZSBwcm9jZXNzIHdpdGggYSBzY3JpcHQgc28gYXMgdG8gYXZvaWQKLWF1dG9kb3dubG9hZCBh cyB3ZWxsIGFzIG1hbnVhbCBkZXh0ZXJpdHkgZWZmZWN0cy4uLiAgSXQganVzdCBzaXRzIHRoZXJl Ci1mb3JldmVyLCB3YXkgbG9uZ2VyIHRoYW4gMjIgc2VjLiAgXkMnaW5nIG91dCwgSSBzZWUgdGhh dCBzeiB3YXMgaW5kZWVkCi1zdGFydGVkIG9uIHRoZSBmYXIgZW5kIGFuZCB0aGUgcHJvdG9jb2wg d2FzIGV4ZWN1dGluZy4gIEJ1dCBpdCBsb29rcyBsaWtlCi10aGUgcmVjZWl2ZXIgKHRoZSBvbmUg cnVubmluZyB1bmRlciB0dHB0eWNtZCgpKSBpcyBnZXR0aW5nIHRyYXNoZWQgcGFja2V0cywKLWJl Y2F1c2UgKGEpIGl0IHNlZW1zIHRvIGJlIHNlbmRpbmcgdGhlIHNhbWUgdGhpbmcgb3ZlciBhbmQg b3ZlciBhZ2FpbiwgYW5kCi0oYikgc29tZXRpbWVzIGl0IHdhaXRzIGFzIGxvbmcgYXMgMTAgc2Vj b25kcyBiZWZvcmUgYW55dGhpbmcgYXJyaXZlcyBmcm9tCi10aGUgcmVtb3RlLiAgTWF5YmUgSSB3 YXMgdG9vIGltcGF0aWVudDsgSSBpbnRlcnJ1cHRlZCBpdCBhZnRlciA0IG1pbnV0ZXMgYnV0Ci1p dCBzZWVtcyB0byBoYXZlIGJlZW4gbWFraW5nIHNvbWUgcHJvZ3Jlc3MuICBXaGVuZXZlciB0aGVy ZSB3YXMgZGF0YQotYXZhaWxhYmxlIHRvIHJlYWQgZnJvbSB0aGUgbmV0LCBpdCB3YXMgYWx3YXlz IDY1IGJ5dGVzLCBhbmQgaXQgd2FzIG5vdAotYWN0dWFsbHkgdGhlIHNhbWUgZGF0YSBvdmVyIGFu ZCBvdmVyLiAgVGhpcyBpcyB1c2luZyBscnogYXMgdGhlIGV4dGVybmFsCi1wcm90b2NvbC4gIGNy eiBnZXRzIGEgYml0IGZhcnRoZXIuICBJbiB0aGlzIGNhc2Ugd2UgcmVhZCB1cCB0byAyNEsgYXQg YQotZ3VscCwgYnV0IHRoZSBhbW91bnQgdmFyaWVzIGEgbG90LiAgSXQgbG9va3MgbGlrZSB3ZSB0 b29rIGluIGFib3V0IDEuMk1CIG9mCi1abW9kZW0gcHJvdG9jb2wgZGF0YSwgYnV0IHdlcmUgb25s eSBhYmxlIHRvIG91dHB1dCB0aGUgZmlyc3QgMjBLIG9mIHRoZQotZmlsZS4gIENsZWFybHkgdGhl cmUgd2VyZSBsb3RzIG9mIGVycm9ycy4gIEluIHRoZSBlbmQsIHRoZSBjcnogZXhpdHMgd2l0aAot c3RhdHVzIDEgKGZhaWx1cmUpLgotCi1Bbnl3YXkgaXQgbG9va3MgbGlrZSB3ZSdyZSBiYWNrIGF0 IG5lZWRpbmcgdG8gZmluZCBhIHdheSB0byBhY2NvbXBsaXNoCi1zb21ldGhpbmcgbGlrZSBUSU9D UkVNT1RFIG9uIHRoZSBwdHksIHdoaWNoIGlzIHdoZXJlIHdlIGNhbWUgaW4uICAxMCBKYW4gMjAw Ny4KLQotV2l0aG91dCBhbnkgd2F5IHRvIG1ha2UgdGhlIHB0eSB0cmFuc3BhcmVudCBhbmQgZmxv dyBjb250cm9sbGVkLCBpdCB3b3VsZAotc2VlbSB0byBtYWtlIHNlbnNlIHRvIHdyaXRlIHRvIHRo ZSBwdHkgaW4gc21hbGxlciBjaHVua3MgdGhhbiB3ZSBkbyB0byB0aGUKLW5ldC4gIEkgbGVmdCB0 aGUgcmVhZC1mcm9tLXB0eS13cml0ZS10by1uZXQgYnVmZmVyIGF0IDI0SyBhbmQgY2hhbmdlZCB0 aGUKLXJlYWQtZnJvbS1uZXQtd3JpdGUtdG8tcHR5IGJ1ZmZlciB0byA0OCBieXRlcy4KLQotVXBs b2FkIHVzaW5nIGxzeiB3b3JrZWQgYnV0IHRvb2sgYWJvdXQgMyBtaW51dGVzLiAgQWN0dWFsbHkg aXQgZGlkbid0IHdvcmsuCi1PbiB0aGUgbG9jYWwgZW5kIGl0IHNlZW1lZCB0byB3b3JrLCBidXQg dGhlIGZpbGUgZGlkIG5vdCBhcHBlYXIgb24gdGhlCi1yZW1vdGUgZW5kLiAgVHJpZWQgdGhpcyBz ZXZlcmFsIHRpbWVzLCBlYWNoIHRpbWUgd2l0aCBkaWZmZXJlbnQgcmVzdWx0cywKLWFkZGluZyBt b3JlIGRlYnVnZ2luZyBlYWNoIHRpbWUuICBUaGUgcHJvYmxlbSB0aGlzIHRpbWUgd2FzIHRoYXQg dGhlIHB0eQotcmVhZCBjb3VsZCBnZXQgRVdPVUxEQkxPQ0suICBDaGFuZ2VkIHRoZSBjb2RlIHRv IG5vdCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yLAotbm93IFptb2RlbSB1cGxvYWRzIGFyZSBzb2xp ZCBhZ2FpbiBleGNlcHQgSSBuZXZlciBnb3QgRVdPVUxEQkxPQ0sgYWdhaW4KLWVpdGhlciwgZXZl biB0aG91Z2ggSSByZXBlYXRlZCB0aGUgc2FtZSB1cGxvYWQgYWJvdXQgMTAwMCB0aW1lcyAod2l0 aAotdGhyb3VnaHB1dCBvZiBvdmVyIDJNQnBzIGV2ZW4gd2l0aCBkZWJ1Z2dpbmcgb24pLCBzbyB0 aGUgdGVzdCBmb3IgaXQgaGFzCi1ub3QgYmVlbiBleGVyY2lzZWQuCi0KLU9LLCB1cGxvYWRzIHN0 aWxsIHdvcmsuICBCYWNrIHRvIGRvd25sb2FkaW5nLi4uICBUaGUgdmVyeSBmaXJzdCBwdHkgcmVh ZAotZ2V0cyAwIGJ5dGVzLCBmb2xsb3dlZCBieSB0aGUgZm9yayB0ZXN0IHRoYXQgc2hvd3MgdGhh dCBpdCBleGl0ZWQgd2l0aAotZXhpdCBzdGF0dXMgMi4gCi0KLU5leHQgd2UgdHJ5IHN0YXJ0aW5n IHN6IHdpdGggc29tZSBkaWZmZXJlbnQgb3B0aW9ucyBvbiB0aGUgZmFyIGVuZDoKLQotIC1xOiBx dWlldCAobm8gbWVzc2FnZXMpOgotICAgICBmb3Igc29tZSByZWFzb24gdGhpcyBnZXRzIHRvdGFs bHkgc3R1Y2suCi0gICAgIGl0IGxvb2tzIGFzIGlmIHRoaXMgb3B0aW9uIGlzIG1pc2RvY3VtZW50 ZWQ7Ci0gICAgIHN6IHNlZW1zIHRvIGJlIHNlbmRpbmcgdGhlIGxldHRlciBDIChhcyBpbiBYbW9k ZW0gMUsgb3Igd2hhdGV2ZXIpCi0KLSAtZTogZXNjYXBlIChhbGwgY29udHJvbCBjaGFycyk6Ci0g ICAgIGZpcnN0IGF0dGVtcHQgdG8gcmVhZCBwdHkgZmluZHMgdGhlIHByb2Nlc3MgZ29uZSB3aXRo IGV4aXQgc3RhdHVzIDIuCi0KLSAtazogc2VuZCAxayBibG9ja3M6Ci0gICAgIHRoaXMgb25lIGRp ZG4ndCBzdG9wIGltbWVkaWF0ZWx5LiAgSXQgcmVhZHMgNDggYnl0ZXMgZnJvbSBuZXQsIHdyaXRl cwotICAgICA0OCB0byB0aGUgcHR5IHdpdGggbm8gZXJyb3IuICBUaGVuIHJlYWRzIDIxIGJ5dGVz IGZyb20gdGhlIHB0eSwgd3JpdGVzCi0gICAgIHRoZW0gdG8gdGhlIG5ldCBPSy4gIFRoZW4gcmVh ZHMgNDggYnl0ZXMgZnJvbSBuZXQsIHdyaXRlcyB0aGVtIHRvIHB0eSBPSywKLSAgICAgcmVhZHMg MjEgZnJvbSBwdHksIHdyaXRlcyB0byBuZXQgT0ssIGV0YyBldGMuLi4gIEl0IGFwcGVhcnMgdG8g aGF2ZQotICAgICB3b3JrZWQgYnV0IChmaW5hbCByZWFkIGZyb20gcHR5IHJldHVybmVkIDAsIGZv cmsgdGVzdCBzaG93ZWQgbHJ6IGV4aXRlZAotICAgICB3aXRoIHN0YXR1cyAwKSwgYnV0IG9ubHkg NzU0IGJ5dGVzIHdlcmUgcmVjZWl2ZWQgZnJvbSB0aGUgbmV0IHdoZW4gdGhlCi0gICAgIGZpbGUg aXMgNDIwSy4uLgotCi1XZWxsIHRoaXMgb25seSBnb2VzIHRvIHNob3cgdGhhdCB0aGUgZmFzdGVy IHdlIHNob3ZlIHN0dWZmIGludG8gdGhlIHB0eSwgdGhlCi13b3JzZSBpdCBnZXRzLiAgWm1vZGVt IGRvd25sb2FkcyB3b24ndCB3b3JrIHVubGVzcyB3ZSBjYW4gbWFrZSB0aGUgcHR5Ci10cmFuc3Bh cmVudCBhbmQgZmxvdy1jb250cm9sbGVkLiAgU28gdG8gc3VtbWFyaXplIHRvZGF5J3MgZGV2ZWxv cG1lbnRzOgotCi0gLiBzZXBhcmF0ZWQgaW4vb3V0IGJ1ZmZlciBzaXplcwotIC4gaGFuZGxlZCBF V09VTERCTE9DSwotIC4gZm91bmQgb3V0IHRoYXQgc3ogb3B0aW9ucyBkb24ndCBoZWxwIG11Y2gK LQotMTEgSmFuIDIwMDcuCi0KLU5leHQgZGF5LiAgVGhpcyBoYXMgZ290IHRvIGJlIHRoZSBtb3N0 IGRlbGljYXRlIGNvZGUgZXZlciwgaXQncyBsaWtlCi1XaGFjay1BLU1vbGUsIGZpeCBBIGFuZCBC IHBvcHMgdXAuICBFdmVuIHdpdGhvdXQgdG91Y2hpbmcgaXQsIHNvbWV0aGluZyB0aGF0Ci13b3Jr ZWQgcGVyZmVjdGx5IGEgMjowMCBkb2Vzbid0IHdvcmsgYXQgYWxsIGFuIGhvdXIgbGF0ZXIuICBN YXliZSBJIGNvdWxkCi1oYXZlIHVzZWQgcGlwZXMgaW5zdGVhZCBvZiBwdHlzLCBidXQgcGlwZXMg aGF2ZSBwcm9ibGVtcyBvZiB0aGVpciBvd24uCi1UaGVyZSBoYXMgdG8gYmUgYSB3YXkgdG8gZG8g dGhpcy4gIFRoZSB0ZWxuZXQgc2VydmVyLCB0aGUgU1NIIHNlcnZlciwgZXRjIC0tCi10aGV5IGFs bCBydW4gb24gcHR5cywgYW5kIHdlIGNhbiB1cGxvYWQgZmlsZXMgdG8gdGhlbSB3aXRoIEtlcm1p dC4gIFdoeT8KLUJlY2F1c2UgS2VybWl0IHB1dHMgaXRzIHRlcm1pbmFsIGludG8gYWxsIHRoZSBy aWdodCBtb2RlcyB1c2luZyB0aGUKLXRpbWUtaG9ub3JlZCBtZXRob2RzIG9mIHR0cGt0KCkgYW5k IHR0dnQoKS4gIFBlcmhhcHMgYWxsIHdlIG5lZWQgaXMgYSBjb3B5Ci1vZiB0dHBrdCgpIHRoYXQg b3BlcmF0ZXMgb24gdGhlIHB0eS4KLQotT24gdGhhdCB0aGVvcnksIGxldCdzIGdvIGJhY2sgdG8g S2VybWl0IGFzIHRoZSBleHRlcm5hbCBwcm90b2NvbC4KLUl0J3MgaW1wb3J0YW50IHRvIHN1cHBy ZXNzIGFsbCBtZXNzYWdlcyBhbmQgZGlzcGxheXMuICBXaXRoIHRoYXQsCi11cGxvYWRzIHdvcmsg ZmluZSwgbm8gaGl0Y2hlcy4KLQotRG93bmxvYWRzOiAgV2UgZmFpbCByaWdodCBhd2F5LiAgVGhl IGRlYnVnIGxvZyBzaG93cyB0aGUgS2VybWl0IHByb2dyYW0gdGhhdAotd2UgYXJlIHN0YXJ0aW5n IGluIHRoZSBwdHkgc2F5czoKLQotICAiIiAtIEludmFsaWQgY29tbWFuZC1saW5lIG9wdGlvbiwg dHlwZSAia2VybWl0IC1oIiBmb3IgaGVscC4KLQotQnV0IG9mIGNvdXJzZSB3ZSBhcmUgbm90IGdp dmluZyBpdCBhbiBpbnZhbGlkIGNvbW1hbmQtbGluZSBvcHRpb24uCi1Td2l0Y2hpbmcgdG8gZ2tl cm1pdCBmb3IgdGhlIGV4dGVybmFsIHByb3RvY29sLCBub3cgd2Ugc2VlIHRoYXQgbm8gbWF0dGVy Ci1jb21tYW5kLWxpbmUgb3B0aW9ucyB3ZSB1c2UsIHdlIHJlYWQgMGQgMGQgMGEgZnJvbSB0aGUg cHR5IGFuZCB0aGVuIHRoZQotbmV4dCB0aW1lIHdlIGdvIHRvIHJlYWQgZnJvbSB0aGUgcHR5IHdl IGdldCAwIGJ5dGVzIGFuZCB3YWl0cGlkKCkgc2F5cyB0aGUKLXByb2dyYW0gaGFzIGV4aXRlZCB3 aXRoIHN0YXR1cyAxLgotCi1XaHkgc2hvdWxkIGRvd25sb2FkaW5nIGJlIGRpZmZlcmVudCBmcm9t IHVwbG9hZGluZz8gIHR0cHR5Y21kIGhhcyBubyBpZGVhLAotaXQgZG9lcyBldmVyeXRoaW5nIHRo ZSBzYW1lLiAgVGhlIG9ubHkgZGlmZmVyZW5jZSB3b3VsZCBzZWVtIHRvIGJlIHdoaWNoCi1zaWRl IHNlbmRzIGZpcnN0LCBidXQgZXZlbiB0aGF0IHRlbmRzIHRvIGdldCB3YXNoZWQgb3V0IGJ5IGVh Y2ggcHJvZ3JhbSdzCi1zdGFydHVwIG1lc3NhZ2VzLgotCi1Eb3dubG9hZGluZyB3aXRoIEtlcm1p dCB3b3JrZWQgMiBkYXlzIGFnbywgd2hhdCdzIGRpZmZlcmVudCBub3c/ICBUaGUgYnVmZmVyCi1z aXplcy4gIFB1dHRpbmcgdGhlIG5ldC10by1wdHkgYmFjayB1cCB0byAyNEsgKGZyb20gNDggYnl0 ZXMpLi4uICBOb3cgaXQKLXdvcmtzIGFnYWluLgotCi1Db25jbHVzaW9uOiBLZXJtaXQgY29uZGl0 aW9ucyB0aGUgcHR5IGNvcnJlY3RseSwgWm1vZGVtIGRvZXMgbm90LiAgVGhlcmVmb3JlCi10dHJ1 bmNtZCgpIG11c3QgZHVwbGljYXRlIHdoYXQgdHRwa3QoKSBkb2VzLgotCi1PciBub3QuICBCZWNh dXNlIHJ6IHdvcmtzIGZpbmUgb24gc3NoL3RlbG5ldCBwdHlzIHRvby4gIEJ1dCBub3Qgb24gb3Vy IHB0eS4KLWxyeiBleGl0cyBpbW1lZGlhdGVseSB3aXRoIHN0YXR1cyBjb2RlIDIgPSAwMTAwMCBi dXQgdGhlcmUgYXJlIG5vIGNsdWVzIGluCi10aGUgbHJ6LmMgc291cmNlIGNvZGUsIEkgZG9uJ3Qg ZXZlbiBzZWUgdGhpcyBleGl0IHN0YXR1cyBzZXQgYW55d2hlcmUuCi1VbnJlZGlyZWN0aW5nIHN0 ZGVyciwgSSBzZWUgdGhhdCB0aGUgZXJyb3IgaXMgImxyejogZ2FyYmFnZSBvbiBjb21tYW5kIGxp bmUiLgotCi1XaHkgZG8gYm90aCBLZXJtaXQgYW5kIFptb2RlbSBzb21ldGltZXMgdGhpbmsgdGhl eSBhcmUgcmVjZWl2aW5nIGFuIGludmFsaWQKLWNvbW1hbmQgbGluZT8gIElmIEkgY291bGQgY2Fw dHVyZSB0aGUgZ2FyYmFnZS4uLgotCi1TaWRlIHRyaXAgIzE6ICgicHR5LmxvZyIsT19XUk9OTFkp IGdpdmVzICJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ii4KLUNoYW5nZWQgdGhpcyB0byAoInB0 eS5sb2ciLE9fQ1JFQVQsMDY0NCkgYW5kIG5vdyBpdCBkb2Vzbid0IGdldCBhbiBlcnJvciwKLWFu ZCBpdCBjcmVhdGVzIHRoZSBmaWxlLCBidXQgbm90IHdpdGggMDY0NCBwZXJtaXNzaW9ucywgYW5k IHdpdGggbm90aGluZwotd3JpdHRlbiBpbiBpdC4gIEhvdyBjb21lIG5vdGhpbmcgd29ya3M/Ci0K LUZpbmUsIHRoZSBkZWJ1ZyBsb2cgc2hvd3MgdGhhdCB0dHB0eWNtZCgpIHJlY2VpdmVzIHRoZSBj b3JyZWN0IHN0cmluZwotKGUuZy4gImxyeiAtdiIpLiAgSXQgcGFzc2VzIGl0IHRvIGRvX3B0eSgp IGNvcnJlY3RseSwgYW5kIGRvX3B0eSgpIHBhc3NlcyBpdAotdG8gZXhlY19jbWQoKSwgd2hpY2gg cnVucyBja3NwbGl0KCkgb24gaXQsIGNvbWluZyB1cCAoaW4gdGhpcyBjYXNlKSB3aXRoCi0ibHJ6 IiBhbmQgIi12Iiwgd2hpY2ggaXMgcmlnaHQsIGFuZCB0aGVuOgotCi0gICAgYXJncyA9IHEtPmFf aGVhZCArIDE7Ci0gICAgZXhlY3ZwKGFyZ3NbMF0sYXJncyk7Ci0KLWV4ZWN2cCgpIHdhbnRzIHRo ZSBhcmdzIGFycmF5IHRvIGhhdmUgYSBudWxsIGVsZW1lbnQgYXQgdGhlIGVuZC4gIGNrc3BsaXQo KQotZG9lcyBpbmRlZWQgZG8gdGhhdCwgb3IgYXQgbGVhc3QgdGhlIGNvZGUgaXMgdGhlcmUuICBB ZGRlZCBjb2RlIHRvIGV4ZWNfY21kKCkKLXRvIHZlcmlmeSB0aGUgYXJndW1lbnQgbGlzdCBhbmQg dGhhdCBpdCBpcyBudWxsLXRlcm1pbmF0ZWQuICBTbyBmYXIgaXQgaXMuCi0KLUFueXdheSwgd2Ug aGF2ZSB0cmFmZmljIGJldHdlZW4gdGhlIFptb2RlbSBwYXJ0bmVycywgYnV0IG5vIGpveS4KLUNv bW1lbnRpbmcgb3V0IHRoZSBiaXQgdGhhdCByZWRpcmVjdHMgc3RkZXJyLCBub3cgSSBjYW4gc2Vl IGl0IG9uIG15IHNjcmVlbgotaW4gcmVhbCB0aW1lOgotCi0gIGxyeiB3YWl0aW5nIHRvIHJlY2Vp dmUuUmV0cnkgMDogQmFkIENSQwotICBSZXRyeSAwOiBHb3QgRVJST1IKLSAgUmV0cnkgMDogVElN RU9VVAotICBSZXRyeSAwOiBUSU1FT1VUCi0gIFJldHJ5IDA6IFRJTUVPVVQKLSAgUmV0cnkgMDog VElNRU9VVAotCi1ldGMgZXRjLCBmb3JldmVyLiAgVHJ5aW5nIHN6IC1lIG9uIHRoZSBmYXIgZW5k LCBJIGdldDoKLQotICBSZXRyeSAwOiBCYWQgQ1JDCi0gIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQg ZXhjZWVkZWQKLSAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAotICBSZXRyeSAwOiBH YXJiYWdlIGNvdW50IGV4Y2VlZGVkCi0gIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQK LSAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAotICBSZXRyeSAwOiBHYXJiYWdlIGNv dW50IGV4Y2VlZGVkCi0gIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKLSAgLi4uCi0g IFJldHJ5IDA6IEdvdCBFUlJPUgotICBSZXRyeSAwOiBCYWQgQ1JDCi0gIFJldHJ5IDA6IEdvdCBF UlJPUgotICBSZXRyeSAwOiBHb3QgRVJST1IKLSAgbHJ6OiB4eHVmaW8uYyByZW1vdmVkLgotCi1T byBhcHBhcmVudGx5IGl0J3Mgbm90IGEgbWF0dGVyIG9mIGVzY2FwaW5nLiAgVHJ5aW5nIHNvbWUg b3RoZXIgc3R1ZmYsIEkKLWNhdWdodCB0aGUgY29tbWFuZC1saW5lIHByb2JsZW0gaW4gdGhlIGFj dDoKLQotICBscno6IGdhcmJhZ2Ugb24gY29tbWFuZGxpbmUKLSAgVHJ5IGBscnogLS1oZWxwJyBm b3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotRGVidWcgbG9nIHNob3dzOgotCi0gIGNrc3BsaXQgcmVz dWx0W2xyel09MQotICBja3NwbGl0IHJlc3VsdFstdl09MgotICBleGVjX2NtZCBhcmdbbHJ6XT0w Ci0gIGV4ZWNfY21kIGFyZ1stdl09MQotICBleGVjX2NtZCBhcmdbXT0yCi0KLUFuIGVtcHR5IHN0 cmluZyBhdCB0aGUgZW5kIGluc3RlYWQgb2YgYSBudWxsIHBvaW50ZXIuICBJIHJlYWxseSBkbyBu b3Qgc2VlCi1hbnkgd2F5IHRoYXQgY291bGQgaGFwcGVuLCBidXQgcmF0aGVyIHRoYW4gZGlnIGlu dG8gY2tzcGxpdCgpIGFnYWluIGFmdGVyCi1hbGwgdGhlc2UgeWVhcnMgSSBhZGRlZCBhIHRlc3Qg Zm9yIHRoaXMgaW4gZXhlY19jbWQoKSwgd2hpY2gsIG9mIGNvdXJzZQotYWZ0ZXIgYWRkaW5nIGl0 LCBuZXZlciBlbmNvdW50ZXJlZCB0aGlzIGJlaGF2aW9yIGFnYWluLgotCi1GaWRkbGVkIHdpdGgg cHR5IGJ1ZmZlciBzaXplIGFnYWluLiAgTWFkZSBpdCA1MTIgYnl0ZXMgaW5zdGVhZCBvZiAyNEsu Ci1abW9kZW0gZG93bmxvYWRzIGFyZSB0aGUgc2FtZSAoUmV0eSAwOiBUSU1FT1VULCBvdmVyIGFu ZCBvdmVyKS4gIEJ1dCBJIGRvbid0Ci1zZWUgd2hhdCB0aGUgcHJvYmxlbSBpcyAtLSBldmVyeSB0 aW1lIHdlIHJlY2VpdmUgbiBieXRlcyBmcm9tIHRoZSBuZXQsIHdlCi13cml0ZSBuIGJ5dGVzIHN1 Y2Nlc3NmdWxseSB0byB0aGUgcHR5IGFuZCB0aGVyZSBhcmUgbm8gZXJyb3JzLiAgQnV0IGl0IGFs c28KLWxvb2tzIGxpa2UgdGhlIHJlbW90ZSBzZW5kZXIgaXMgc2VuZGluZyB0aGUgZmlsZSBoZWFk ZXIgb3ZlciBhbmQgb3ZlcgotYmVjYXVzZSBpdCdzIG5vdCByZWNlaXZpbmcgYW4gYWNrbm93bGVk Z21lbnQuICBJZiB3ZSdyZSBub3QgbG9zaW5nIGRhdGEsCi10aGVuIG1heWJlIGl0J3MgYSB0cmFu c3BhcmVuY3kgcHJvYmxlbS4KLQotVHJpZWQgdW5jb21tZW50aW5nIHRoZSBUSU9DYmxhaCBzdHVm ZiBJIGNvbW1lbnRlZCBvdXQgYmVmb3JlLiAgTm93IGluc3RlYWQKLW9mIG9ubHkgdGltZW91dHMg SSBnZXQ6Ci0KLSAgbHJ6IHdhaXRpbmcgdG8gcmVjZWl2ZS5SZXRyeSAwOiBCYWQgQ1JDCi0gIFJl dHJ5IDA6IEdvdCBFUlJPUgotICBSZXRyeSAwOiBCYWQgQ1JDCi0gIFJldHJ5IDA6IEdvdCBFUlJP UgotICBSZXRyeSAwOiBCYWQgQ1JDCi0gIFJldHJ5IDA6IEdvdCBFUlJPUgotICBSZXRyeSAwOiBU SU1FT1VUCi0KLXdoaWNoIGlzIG9kZCBiZWNhdXNlIHRoZSBUSU9DUkVNT1RFIGlvY3RsIGZhaWxl ZCB3aXRoIGVycm5vIDE0LCBFRkFVTFQsCi1iYWQgYWRkcmVzcywgd2hpY2ggc2hvdWxkIGluZGlj YXRlIGl0IGhhZCBubyBlZmZlY3QuICBXZSdyZSBzdGlsbCByZWNlaXZpbmcKLWRhdGEgZnJvbSB0 aGUgcmVtb3RlIGluIHRpbnkgY2h1bmtzIChmcm9tIDEyIHRvIDY1IGJ5dGVzKSwgYXBwYXJlbnRs eSB0aGUKLXNhbWUgc3R1ZmYgKGZpbGUgaGVhZGVyKSwgYW5kIHdyaXRpbmcgdGhlbSB0byB0aGUg cHR5IHN1Y2Nlc3NmdWxseSBidXQKLW5vdGhpbmcuLi4KLQotTG9va2VkIGF0IGNsb25pbmcgdHRw a3QoKSBmb3IgdGhlIHB0eSwgYnV0IHRoZXNlIHN0dXBpZCByb3V0aW5lcyB1c2UgZ2xvYmFsCi10 dHkgbW9kZSBzdHJ1Y3RzIHNvIGl0J3Mgbm90IGdvaW5nIHRvIGJlIGVhc3kuCi0KLVdlbGwsIHdl IGdvdCBleGFjdGx5IG5vd2hlcmUgdG9kYXksIGJ1dCBJIHRoaW5rIEknbGwgbGVhdmUgc3RkZXJy IGFzIGl0IGlzCi1zbyB1c2VycyB3aWxsIHNlZSBzb21lIGZlZWRiYWNrOyBubyByZWFzb24gbm90 IHRvLgotCi1XSFkgRE8gS0VSTUlUIERPV05MT0FEUyBXT1JLIEFORCBaTU9ERU0gTk9UPwotCi1J cyBpdCA4LWJpdCB0cmFuc3BhcmVuY3k/ICBVcCB0aWwgbm93IEkndmUgYmVlbiB0ZXN0aW5nIHdp dGggdGV4dCBmaWxlcy4KLUlmIEkgdHJ5IHRvIGRvd25sb2FkIGEgYmluYXJ5IHdoYXQgaGFwcGVu cz8gIEZhaWxzIGFmdGVyIDk5IHNlY29uZHMuICBQYWNrZXQKLWxvZyBmcm9tIHRoZSBmYXIgZW5k IHNob3dzIHRoYXQgYXMgc29vbiBhcyB0aGUgZmlyc3QgcGFja2V0IGNvbnRhaW5pbmcgOC1iaXQK LWRhdGEgaXMgc2VudCwgZXZlcnl0aGluZyBzdG9wcy4gIEF0IGxlYXN0IEkgZ290IG9uZSBvZiB0 aGVzZToKLQotICAxNzoyMzo1Ni40NzUgZXhlY19jbWQgYXJnW2drZXJtaXRdPTAKLSAgMTc6MjM6 NTYuNDc1IGV4ZWNfY21kIGFyZ1stcXJdPTEKLSAgMTc6MjM6NTYuNDc1IGV4ZWNfY21kIGFyZ1td PTIKLSAgMTc6MjM6NTYuNDc1IGV4ZWNfY21kIFNVQlNUSVRVVElORyBOVUxMPTIgIDwtLSB0aGUg Y29kZSBJIGp1c3QgYWRkZWQKLQotRG9pbmcgdGhpcyBhZ2FpbiBzaG93cyB0aGUgc2FtZSB0aGlu ZyBvbiB0aGUgbmVhciBlbmQuICBBbGwgdGhlIDctYml0LW9ubHkKLXBhY2tldHMgYXJlIHNlbnQg YW5kIGFja25vd2xlZGdlZCBPSy4gIFRocmVlIDgtYml0IGRhdGEgcGFja2V0cyBhcnJpdmUgYW5k Ci1ub3RoaW5nIGVsc2UgaGFwcGVucyBhZnRlciB0aGF0LiAgVGhpcyBpcyB3aXRoIEctS2VybWl0 LgotCi1UaGUgc2FtZSB0aGluZyBoYXBwZW5zIHdpdGggQy1LZXJtaXQgcmVjZWl2aW5nLiAgQnV0 IGlmIEkgY2hhbmdlIEMtS2VybWl0J3MKLS5rZXJtcmMgdG8gdHVybiBvZmYgc3RyZWFtaW5nIGFu ZCB1c2UgYSBzaG9ydCBwYWNrZXQgbGVuZ3RoOgotCi1UaGUgdHJhbnNmZXIgd29ya3MsIGV2ZW4g dGhvdWdoIGl0J3Mgc2VuZGluZyA4LWJpdCBieXRlcy4gIFNvIHRoZSBwcm9ibGVtIGlzCi1ub3Qg OC1iaXQgZGF0YSBhZnRlciBhbGwsIHBlciBzZS4gIEZhY3RzOgotCi0gLiBLZXJtaXQgY2FuIHJl Y2VpdmUgc3RyZWFtaW5nIHRyYW5zZmVycyBvZiA3LWJpdCBmaWxlcy4KLSAuIEtlcm1pdCBjYW4g bm90IHJlY2VpdmUgc3RyZWFtaW5nIHRyYW5zZmVycyBvZiA4LWJpdCBmaWxlcy4KLSAuIEtlcm1p dCBjYW4gcmVjZWl2ZSBub25zdHJlYW1pbmcgdHJhbnNmZXJzIG9mIDgtYml0IGZpbGVzIHdpdGgg c2hvcnQgcGFja2V0cy4KLSAuIEtlcm1pdCBjYW4gcmVjZWl2ZSBub25zdHJlYW1pbmcgdHJhbnNm ZXJzIG9mIDgtYml0IGZpbGVzIHdpdGggMUsgcGFja2V0cy4KLSAuIEtlcm1pdCBjYW4gcmVjZWl2 ZSBub25zdHJlYW1pbmcgdHJhbnNmZXJzIG9mIDgtYml0IGZpbGVzIHdpdGggNEsgcGFja2V0cy4K LQotU28gaXQncyB0aGUgY29tYmluYXRpb24gb2Ygc3RyZWFtaW5nIGFuZCA4LWJpdCBkYXRhPyAg MTIgSmFuIDIwMDcuCi0KLUFzIGEgdGVzdCBJIG1hZGUgYSBuZXcgcm91dGluZSBwdHlfbWFrZV9y YXcoKSB0aGF0IGRvZXMgY2ZtYWtlcmF3KCkgKGEKLW5vbnBvcnRhYmxlICJQT1NJWC1saWtlIiBm dW5jdGlvbiBrbm93biB0byBiZSB1c2VkIG9uIHB0eXMgaW4gYXBwbGljYXRpb25zCi10aGF0IGRv IGFwcHJveGltYXRlbHkgd2hhdCB3ZSdyZSBhdHRlbXB0aW5nKS4gIFJlc3VsdHM6Ci0KLSBTb2xh cmlzOiBlcnJubyAyNSAtIGluYXBwcm9wcmlhdGUgaW9jdGwgZm9yIGRldmljZS4KLQotVGhpcyBo YXBwZW5zIGV2ZW4gd2hlbiB3ZSB0cnkgdG8gZ2V0IHRoZSB0ZXJtaW5hbCBtb2RlcyB3aXRoIHRj Z2V0YXR0cigpLAotd2hpY2ggaXMgY29tcGxldGVseSBudXRzLiAgV2UgcGFzcyBpdCB0aGUgZmls ZSBkZXNjcmlwdG9yIG9mIHRoZSBwdHkgbWFzdGVyLAotd2hpY2ggaXMgc3VwcG9zZWQgdG8gd29y ay4gIEJ1dCBpbiBNYWMgT1MgWCwgdGhlcmUgYXJlIG5vIGVycm9ycy4gIEJ1dAotZG93bmxvYWRz IHN0aWxsIGRvbid0IHdvcms7IGxvdHMgb2YgZXJyb3JzIGJ1dCB0aGUgcGF0dGVybiBpcyBkaWZm ZXJlbnQuCi1Vc2luZyBhIHZlcnkgc21hbGwgYnVmZmVyOgotCi0gIFJldHJ5IDA6IEJhZCBDUkMK LSAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAotICBSZXRyeSAwOiBHYXJiYWdlIGNv dW50IGV4Y2VlZGVkCi0gIFJldHJ5IDA6IEdvdCBUSU1FT1VUCi0gIFJldHJ5IDA6IFRJTUVPVVQK LSAgUmV0cnkgMDogQmFkIENSQwotICBSZXRyeSAwOiBCYWQgQ1JDCi0gIFJldHJ5IDA6IEdhcmJh Z2UgY291bnQgZXhjZWVkZWQKLSAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAotICBS ZXRyeSAwOiBUSU1FT1VUCi0gIFJldHJ5IDA6IEdvdCBFUlJPUgotICBSZXRyeSAwOiBUSU1FT1VU Ci0gIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKLSAgUmV0cnkgMDogR2FyYmFnZSBj b3VudCBleGNlZWRlZAotICBSZXRyeSAwOiBCYWQgQ1JDCi0KLVVzaW5nIGEgYmlnZ2VyIGJ1ZmZl cjoKLQotICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCi0gIFJldHJ5IDA6IEdhcmJh Z2UgY291bnQgZXhjZWVkZWQKLSAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAotICBS ZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCi0gIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQg ZXhjZWVkZWQKLSAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAotICAoc2V2ZXJhbCBz Y3JlZW5zZnVsKQotCi1WYXJpb3VzIG90aGVyIGNvbWJpbmF0aW9ucy4uLiBOb3RoaW5nIHNlZW1z IHRvIHdvcmsuCi0KLUluc2lnaHQ6IHRlbG5ldGQgZG9lcyBleGFjdGx5IHdoYXQgd2Ugd2FudCB0 byBkbywgc29ydCBvZi4KLUJ1dCBpdCB1c2VzIFRJT0NQS1QsIHNvIGV2ZXJ5IHRpbWUgaXQgcmVh ZHMgZnJvbSBwdHksIGl0IHJlY2VpdmVzCi1vbmUgY29udHJvbCBieXRlIGFuZCB0aGVuIHRoZSBk YXRhIGJ5dGVzLCB3aGljaCB3b3VsZCBjb21wbGljYXRlIG91cgotYnVmZmVyaW5nIHNjaGVtZSBj b25zaWRlcmFibHkuICBBbnl3YXkgdGhlIFRJT0NQS1QgaW9jdGwoKSBmYWlscyBvbgotTWFjIE9T IFggd2l0aCAxNCAiQmFkIGFkZHJlc3MiLgotCi1BbHNvIHNlZTogc25vb3BzZXJ2ZXIuYyAoZm91 bmQgaW4gR29vZ2xlKS4gIEl0IHNlZW1zIHRvIGRvIHRoaW5ncyBpbiBhCi1zbGlnaHRseSBkaWZm ZXJlbnQgd2F5IC0tIGl0IHNldHMgc3Rkb3V0IHRvIHJhdyBhbmQgdGhlbiBkdXBzIGl0IHRvIHRo ZQotc2xhdmUgc2lkZSBvZiB0aGUgcHR5PwotCi1NYXliZSBpdCdzIGEgbWlzdGFrZSB0byB1c2Ug dGhlIGNrdXB0eS5jIHJvdXRpbmVzLiAgVGhleSBhcmUgZGVzaWduZWQgZm9yCi1jcmVhdGluZyBh bmQgYWNjZXNzaW5nIGFuIGludGVyYWN0aXZlIHNlc3Npb24uICBNYXliZSBqdXN0IGNvcHkgb25l IG9mIHRoZQotb3RoZXIgcHJvZ3JhbXMuCi0KLTE4IEphbiAyMDA3LiAgVHJpZWQgZ29pbmcgYmFj ayB0byBibG9ja2luZyByYXRoZXIgdGhhbiBub25ibG9ja2luZyByZWFkcwotdG8gc2VlIGlmIGl0 IHdvdWxkIG1ha2UgYSBkaWZmZXJlbmNlLCBhZnRlciBhbGwgdGhlIG90aGVyIGNoYW5nZXMuICBO b3BlLgotT0ssIGxldCdzIGxvb2sgYXQgc29tZSBvZiB0aGVzZSBvdGhlciBwcm9ncmFtcy4uLgot Ci1zbm9vcHNlcnZlci5jLiAgSSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCB0aGlzIGlzIG9yIHdo ZXJlIGl0J3MgZnJvbSBvciB3aGF0Ci1wbGF0Zm9ybSBpdCBydW5zIG9uIGFuZCB0aGVyZSBhcmUg bm8gY29tbWVudHMgdG8gc3BlYWsgb2YsIGJ1dCBpdCBkb2VzCi1hcHByb3hpbWF0ZWx5IHdoYXQg dHRwdHljbWQoKSBkb2VzLiAgVG8gZ2V0IGEgcHR5IGl0IHVzZXMgb3BlbnB0eSgpOgotCi0gIGlm IChvcGVucHR5KCZwdHksICZ0dHksIE5VTEwsIE5VTEwsIE5VTEwpID09IC0xKQotCi10aGVuIGNy ZWF0ZXMgYSBmb3JrLiAgSW4gdGhlIGZvcmssIGl0IGNsb3NlcyB0aGUgcHR5IChtYXN0ZXIpIGFu ZAotbWFuaXB1bGF0ZXMgdGhlIG1vZGVzIG9mIHRoZSB0dHkgKHNsYXZlKSwgZHVwcyB0dHkgdG8g YmUgc3RkaW8sIGFuZCB0aGVuCi1kb2V4IGV4ZWN2KCkgb24gdGhlIGNvbW1hbmQuICBNZWFud2hp bGUgdGhlIHVwcGVyIGZvcmsgY2xvc2VzIHRoZSB0dHkKLShzbGF2ZSksIGdldHMgdGhlIGF0dHJp YnV0ZXMgb2Ygc3RkaW4sIHVzaW5nIGF0ZXhpdCgpIHRvIGhhdmUgdGhlbQotYXV0b21hdGljYWxs eSByZXN0b3JlZCBvbiBleGl0LiAgVGhlbiBpdCBzZXRzIHN0ZGluIHRvIHJhdyBtb2RlIGFuZCBl bnRlcnMKLXRoZSBzZWxlY3QoKSBsb29wIG9uIHN0ZGluLCB0aGUgcHR5IG1hc3RlciwgYW5kIHRo ZSBuZXQuICBJdCB1c2VzIHJlZ3VsYXIKLWJsb2NraW5nIHJlYWRzLiAgSXQgZG9lcyBub3QgdXNl IFRJT0NQS1Qgb3IgYW55dGhpbmcgbGlrZSBpdC4KLQotb3BlbnB0eSgpIGlzIHN1cHBvcnRlZCBv bjogTGludXgsIE1hYyBPUyBYLCBOZXRCU0QsIEZyZWVCU0QsIC4uLgotb3BlbnB0eSgpIGlzIE5P VCBzdXBwb3J0ZWQgb246IFNvbGFyaXMsIEhQLVVYLCAuLi4KLQotIDEuIFRyeSBjb3B5aW5nIHRo ZSBwdHkgY29kZSwgYnV0IGtlZXAgZXZlcnl0aGluZyBlbHNlIHRoZSBzYW1lLgotCi1JIGRpZCB0 aGlzOyBpdCBjb21waWxlcyBhbmQgc3RhcnRzIE9LLCB1cHBlciBmb3JrICh0dHB0eWNtZCkgZGVi dWcgbG9nIHNob3dzCi1ubyBlcnJvcnMsIGJ1dCBub3RoaW5nIGhhcHBlbnMuICBMb2dzIHNob3cg dGhhdCB0aGUgS2VybWl0IHByb2dyYW0gdGhhdCBpcwotc3RhcnRlZCBpbiB0aGUgc3ViZm9yayBz ZWVtcyB0byBkaWUgYXMgc29vbiBhcyBpdCByZWFjaGVzIGVvZiBvbiBpdHMgaW5pdAotZmlsZS4g IFRoZSBnb29kIG5ld3MsIGF0IGxlYXN0LCBpcyB0aGF0IHNlbGVjdCgpIGRvZXNuJ3QgcmVwb3J0 IHJlcG9ydCB0aGF0Ci10aGUgcHR5IGlzIHJlYWR5IHRvIGJlIHJlYWQuICBDbGVhcmx5IHRoZSBm aWxlIGRlc2NyaXB0b3JzIGFyZW4ndCBiZWluZwotYXNzaWduZWQgYXMgZXhwZWN0ZWQsIG9yIGFz IGJlZm9yZS4KLSAgCi1JbiBja3VwdHkuYyBnZXRwdHlzbGF2ZSgpIGR1cDIncyB0aGUgc2xhdmUg ZmQgdG8gMCBhbmQgMS4gIFRoZSBuZXcgY29kZQotZG9lcyBleGFjdGx5IHRoZSBzYW1lIHRoaW5n LiAgRGVidWcgbG9nIG1ha2VzIGl0IGxvb2sgbGlrZSB0aGUgZm9ya2VkIGtlcm1pdAotaXMgbm90 IHJlY2VpdmluZyBpdHMgY29tbWFuZCBsaW5lLiAgQnV0IG5vdyBJJ20gbm90IGV2ZW4gc3VyZSB0 aGF0IHRoZQotZm9ya2VkIGtlcm1pdCBzdGFydGVkIGF0IGFsbC4gIHBzIGZyb20gYW5vdGhlciB0 ZXJtaW5hbCBkb2Vzbid0IHNob3cgaXQuCi0KLTE5IEphbiAyMDA3OiBOb3RpY2VkIHRoYXQgaW4g c25vb3BzZXJ2ZXIsIHRoZSBzZWxlY3QoKSBjYWxscyB1c2Ugc3RhbmRhcmQKLWlucHV0IGFuZCBv dXRwdXQgZmlsZSBkZXNjcmlwdG9ycywgcmF0aGVyIHRoYW4gdGhlIHB0eSBtYXN0ZXIuICBNYWRl IHRoYXQKLWNoYW5nZS4uLiAgSW4gZG9pbmcgdGhhdCBJIGhhZCB0byBsb29rIGF0IGV2ZXJ5IGZp bGUgZGVzY3JpcHRvciBpbiBldmVyeQotbGluZSBvZiBjb2RlIGFuZCBkaXNjb3ZlcmVkIGEgY291 cGxlIG1pc3Rha2VzLCBmaXhlZCB0aGVtLCBwdXQgYmFjayB0aGUKLW9yaWdpbmFsIGNvZGUgYnV0 IHdpdGggdGhlIGZpeGVzLCB0cmllZCBpdCwgYnV0IG5vIGNoYW5nZTsgY2FuIHVwbG9hZCBPSyBi dXQKLXN0aWxsIGNhbid0IGRvd25sb2FkIHdpdGggWm1vZGVtIHdpdGhvdXQgbG90cyBvZiBlcnJv cnMgYW5kIHVsdGltYXRlCi1mYWlsdXJlLiAgR29pbmcgYmFjayB0byB0aGUgYWx0ZXJuYXRpdmUg dmVyc2lvbiBhbmQgdHJ5aW5nIHRvIGdldCB0aGUgdGhlCi1maWxlIGRlc2NyaXB0b3JzIHNvcnRl ZCBvdXQsIG5vdyBpdCBhcHBlYXJzIHRoYXQgdGhlIGV4dGVybmFsIEtlcm1pdCBwcm9ncmFtCi1u ZXZlciBldmVuIHN0YXJ0cyBpbiB0aGUgbG93ZXIgZm9yay4gIEFmdGVyIGEgYml0IG1vcmUgZmlk ZGxpbmcgSSBzb3J0IHRoYXQKLW91dCwgYnV0IG5vdyB3aGVuIHRoZSBsb3dlciBLZXJtaXQgcHJv Z3JhbSBnb2VzIHRvIG9wZW4gIi9kZXYvdHR5IiBpdCBnZXRzCi1lcnJubyA2ICJEZXZpY2Ugbm90 IGNvbmZpZ3VyZWQiLiAgRm9yY2luZyBpdCB0byB1c2Ugc3RkaW8gd2l0aCAiLWwgMCIsIGl0Ci1n ZXRzIHBhc3QgdGhpcyBhbmQgYWN0dWFsbHkgc2VuZHMgaXRzIGZpcnN0IHBhY2tldC4gIEJ1dCB0 aGUgS2VybWl0IG9uIHRvcAotcmVhZHMgbm90aGluZyBmcm9tIHRoZSBwdHkuCi0KLU5leHQsIEkg Y2hhbmdlIHRoZSBwdHkgZmQgZnJvbSBTVERJTl9GSUxFTk8gYW5kIFNURE9VVF9GSUxFTk8gdG8g c2xhdmVmZC4KLU5vIGRpZmZlcmVuY2UuICBOZXh0IEkgY29tbWVudCBvdXQgdGhlIGR1cDIoKSBj YWxscy4gIFRoaXMgdGltZSBJIGdldCBzb21lCi1hY3Rpb24uICBUaGUgdHJhbnNmZXIgc3RhcnRz LCBidXQgb25seSBvbmUgcGFja2V0IGNvbWVzLiAgTG9nIHNob3dzIHRoYXQKLXRoZSBsb3dlciBL ZXJtaXQgc2VuZHMgaXRzIFMgcGFja2V0LiAgVGhlIHVwcGVyIEtlcm1pdCByZWNlaXZlcyB0aGUg QUNLCi1idXQgdGhlIGxvd2VyIEtlcm1pdCBuZXZlciBnZXRzIGl0LiAgVGhlIHdyaXRlIHRvIHRo ZSBwdHkgc3VjY2VlZHMsIG5vCi1lcnJvci4gIERpZmZlcmVudCBjb21iaW5hdGlvbnMgZ2l2ZSBk aWZmZXJlbnQgcmVzdWx0cy4gIElmIHdyaXRlIHRvIG1hc3RlcgotYW5kIHJlYWQgZnJvbSB0aGUg c2xhdmUsIEkgZ2V0IHBhY2tldHMgaW4gYm90aCBkaXJlY3Rpb25zIGJ1dCB0b25zIG9mCi1lcnJv cnMuLi4uICBUaGlzIGhhcHBlbnMgb25seSBpZiBJIGNvbW1lbnQgb3V0IHRoZSBkdXAyKCkncy4K LQotMjUgSmFuIDIwMDc6IEFmdGVyIGxlYXZpbmcgaXQgc2l0IGZvciBhIHdoaWxlLCBhbmQgcmVh bGl6aW5nIHRoYXQgd2hhdCBJJ20KLXRyeWluZyB0byBkbyBoYXMgdG8gYmUgcG9zc2libGUgYmVj YXVzZSBzbyBtdWNoIG90aGVyIHNvZnR3YXJlIGRvZXMgdGhlIHNhbWUKLXRoaW5nIChlLmcuIFRl bG5ldCBzZXJ2ZXJzKSwgSSBwdXQgdGhpbmdzIGJhY2sgdG8gaG93IHRoZXkgd2VyZSBvcmlnaW5h bGx5Ci0tLSB0aGUgdXBwZXIgZm9yayAoS2VybWl0KSB1c2VzIHRoZSBtYXN0ZXIgYW5kIHRoZSBs b3dlciBmb3JrIHRoZSBzbGF2ZS4KLVRoZSB1cHBlciBmb3JrIHB1dHMgdGhlIG1hc3RlciBpbiBy YXcgbW9kZSwgdGhlIGxvd2VyIGZvcmsgcHV0cyB0aGUgc2xhdmUgaW4KLXJhdyBtb2RlLiAgVGhl IGxvd2VyIGZvcmsgZHVwMidzIHRoZSBzbGF2ZSBmZCB0byBzdGRpbi9vdXQuICBTZW5kIGZpbGUg aW4KLXJlbW90ZSBtb2RlIHVzaW5nIGV4dGVybmFsIEtlcm1pdDogd29ya3MgT0sgYnV0IHNlbGVj dCgpIHRpbWVzIG91dCBhdCB0aGUKLWVuZC4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgc2VsZi1jb250 YWluZWQgcHR5IGNvZGUgaW4gdHRwdHljbWQoKSBpcyBzb3J0ZWQKLW91dCAtLSBhbGwgdGhlIGZp bGUgZGVzY3JpcHRvcnMgZ28gdG8gdGhlIHJpZ2h0IHBsYWNlLCBldGMsIGFuZCBub3cgd2UgY2Fu Ci11c2UgdGhpcyByb3V0aW5lIGFzIGEgdGVzdGJlZCwgcmF0aGVyIHRoYW4gdGhlIG9yaWdpbmFs IGNrdXB0eS5jLWJhc2VkIG9uZS4KLQotQnV0IHNlbmQgd2l0aCBsc3osIGNzeiwgYW5kIHJlZ3Vs YXIgcno6IE5vdGhpbmcgaGFwcGVucywgdGltZXMgb3V0IGFmdGVyIDAKLWJ5dGVzIG9mIGkvby4g IE9uY2UgYWdhaW4sIEtlcm1pdCB3b3JrcywgWm1vZGVtIGRvZXNuJ3QuICBUaGUgcmVhc29uIGZv cgotcnVubmluZyBabW9kZW0gaW4gYSBwdHkgaXMgc28gaXRzIGkvbyB3aWxsIHdvcmsgYXMgaXQg ZG9lcyBvbiBhIHRlcm1pbmFsLAotbm8gbWF0dGVyIGhvdyBpdCBtYXkgZmlkZGxlIHRoZSBmaWxl IGRlc2NyaXB0b3JzLiAgU28gd2h5IGRvbid0IHdlIHNlZSBhCi1zaW5nbGUgYnl0ZSBjb21lIG91 dD8KLQotQ29tbWVudGluZyBvdXQgcHR5X21ha2VfcmF3KCksIEkgZ2V0IGEgc3VjY2Vzc2Z1bCBa bW9kZW0gc2VuZCB1c2luZyBsc3ouCi1jc3ogbWFuYWdlcyB0byBnZXQgdGhlIGZpbGVuYW1lIGFj cm9zcywgYnV0IHRoZW4gZ2V0cyBzdHVjay4gIHJlZ3VsYXIgc3osIG9uCi10aGUgb3RoZXIgaGFu ZCwgd29ya3MgcGVyZmVjdGx5LiAgVGVzdGluZyBjc3ogYnkgaXRzZWxmIChub3QgdW5kZXIgS2Vy bWl0KSwKLUkgc2VlIGl0IGZhaWxzIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5ICgiR290IHBob255 IFpFT0YiLCBldGMpLiAgT0ssIGZvcmdldAotY3J6c3ouCi0KLU9LLCBsZXQncyBtb3ZlIHRvIGxv Y2FsIG1vZGUgb3ZlciBhIEtlcmJlcml6ZWQgVGVsbmV0IGNvbm5lY3Rpb24uLi4KLVVwbG9hZGlu ZyAoc2VuZGluZykgd2l0aCBleHRlcm5hbCBLZXJtaXQgcHJvdG9jb2wuLi4gd29ya3MuCi1Eb3du bG9hZGluZyAocmVjZWl2aW5nKSB3aXRoIGV4dGVybmFsIEtlcm1pdCBwcm90b2NvbC4uLiB3b3Jr cy4KLVVwbG9hZGluZyB3aXRoIHN6Li4uIHdvcmtzLgotRG93bmxvYWRpbmcgd2l0aCBscnouLi4g IEdldHMgdG9ucyBvZiBlcnJvcnMgYW5kIGZhaWxzLgotCi1SdW5uaW5nIHB0eV9tYWtlX3Jhdygp IG9uIHRoZSBzbGF2ZSBidXQgbm90IG9uIHRoZSBtYXN0ZXI6IG5vIGRpZmZlcmVuY2UuCi1SdW5u aW5nIHB0eV9tYWtlX3JhdygpIG9uIHRoZSBtYXN0ZXIgYnV0IG5vdCBvbiB0aGUgc2xhdmU6IG5v IGRpZmZlcmVuY2UuCi0KLUJhY2sgd2hlcmUgd2Ugc3RhcnRlZC4uLiAgRWl0aGVyOgotCi0gLiBa bW9kZW0gaXMgb3ZlcmRyaXZpbmcgdGhlIHB0eSwgbm8gbWF0dGVyIHdoYXQgbW9kZXMgd2UgcHV0 IGl0IGluLiAgCi0gLiBJdCdzIGEgdHJhbnNwYXJlbmN5IHByb2JsZW0uCi0KLVRoZW9yZXRpY2Fs bHkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdGVzdCB0aGVzZSBieSB1c2luZyBkaWZmZXJlbnQgc3og c3dpdGNoZXM6Ci0gIC1xOiAgICBxdWlldCAoc2hvdWxkIGFsd2F5cyB1c2UgdGhpcykKLSAgLWU6 ICAgIGVzY2FwZSBhbGwgY29udHJvbCBjaGFyYWN0ZXJzCi0gIC1CIG46ICBCdWZmZXIgbiBieXRl cyAocmF0aGVyIHRoYW4gd2hvbGUgZmlsZSkKLSAgLUwgbjogIFBhY2tldCBsZW5ndGgKLSAgLWwg bjogIEZyYW1lIGxlbmd0aCAoPj0gcGFja2V0IGxlbmd0aCkKLSAgLXcgbjogIFdpbmRvdyBzaXpl Ci0gIC00OiAgICA0SyBibG9ja3NpemUgKGRvZXNuJ3QgaGVscCkKLQotLXEgYnkgaXRzZWxmIGRv ZXNuJ3QgaGVscC4KLS1xIC1lLCB0aGlzIG9uZSB3b3JrZWQgYnV0IHN0aWxsIGdvdCBhYm91dCAx MDAgZXJyb3JzIGFuZCB3YXMgdmVyeSBzbG93LgotLXEgLWUgLWwgMjAwIC1MIDEwMCwgZmFpbGVk IGZhc3QgYW5kIGJhZC4KLS1xIC1lIC13IDEuICBGYWlsZWQgcXVpY2tseS4KLS1xIC1lIC13IDEg LUIgMTAwLiAgRXZlbnR1YWxseSBmYWlsZWQuCi0tcSAtdyAxLCBFdmVudHVhbGx5IGZhaWxlZC4K LS1xIC1sIDEwMjQsIHRoaXMgZ2V0cyBtdWNoIG1vcmUgZXJyb3JzLCBkZWZpbml0ZWx5IG5lZWQg LWUuCi0tcSAtZSAtbCAxMDI0LCBnb3QgcHJldHR5IGZhciBiZWZvcmUgZmFpbGluZy4KLS1xIC1l IC13IDEgLWwgMTAyNCwgYWxzbyBnb3QgcHJldHR5IGZhciBiZWZvcmUgZmFpbGluZy4KLS1xIC1l LCB0aGlzIG9uZSBnb3QgZmFydGhlc3Qgb2YgYWxsLCBhYm91dCA0OEssIGJlZm9yZSBnZXR0aW5n IGVycm9ycy4KLQotSW4gdGhlIGxhdHRlciBjb21iaW5hdGlvbnMgdGhhdCB3b3JrIHNvbWV3aGF0 IGJldHRlciwgd2UgYWx3YXlzIGdldCB1cCB0bwotMTZLLCBvciAzMkssIG9yIDQ4SywgYmVmb3Jl IHRoZSBlcnJvcnMgc3RhcnQgY29taW5nIG91dCBhbmQgcGlsaW5nIHVwLgotU29tZXRpbWVzIHRo ZSBlcnJvcnMgYXJlIHJlY292ZXJhYmxlIGFuZCB3ZSByZWNlaXZlIGFzIG11Y2ggYXMgMzAwSwot c3VjY2Vzc2Z1bGx5IGJlZm9yZSBnaXZpbmcgdXAuCi0KLU5vdyB0aGF0IHdlIGhhdmUgZGF0YSBm bG93aW5nIHByZXR0eSB3ZWxsIChidXQgbm90IHdlbGwgZW5vdWdoKSwgdHJpZWQKLXJlaW5zdGF0 aW5nIHB0eV9tYWtlX3JhdygpLCBidXQgaXQgaHVydCBtb3JlIHRoYW4gaGVscGVkLgotCi1BcyBh IHNhbml0eSBjaGVjaywgSSB0cmllZCB0cmFuc2ZlcnJpbmcgZnJvbSB0aGUgc2FtZSBob3N0IG92 ZXIgdGhlIHNhbWUKLWtpbmQgb2YgY29ubmVjdGlvbiAoS2VyYmVyaXplZCBUZWxuZXQpIGRpcmVj dGx5IHRvIEs5NSdzIGJ1aWx0LWluIFptb2RlbQotcHJvdG9jb2wsIGFuZCB0aGF0IHdvcmtlZCBm aW5lLiAgU28gdGhlIHByb2JsZW0gaXMgZGVmaW5pdGVseSBpbiB0aGUgcHR5LgotT3IgbW9yZSBw cmVjaXNlbHksIHdoZXJlIEtlcm1pdCB3cml0ZXMgaW5jb21pbmcgbmV0IGRhdGEgdG8gdGhlIHB0 eSBtYXN0ZXIuCi0KLTI2IEphbiAyMDA3OiBUcmllZCBjaGFuZ2luZyB0aGUgc2l6ZSBvZiB0aGUg bmV0LXRvLXB0eSBidWZmZXIgZnJvbSAyNEsgdG8KLTFLLiAgUmVzdWx0OiB0b3RhbCBmYWlsdXJl LiAgU2V0IGJvdGggYnVmZmVycyB0byAxSy4gIFN0aWxsIHRvdGFsIGZhaWx1cmUuCi1TZXQgYm90 aCB0byA0Szogbm93IHdlIGdldCBhYm91dCA0NUsgb2YgZGF0YSwgdGhlbiBmYWlsdXJlLiAgUHV0 IHRoZW0gYm90aAotYmFjayB0byAyNEssIHN0aWxsIGZhaWxzIHRvdGFsbHkgLS0gdGhlIHNhbWUg Y29kZSB0aGF0IHdvcmtlZCBwcmV0dHkgd2VsbAoteWVzdGVyZGF5LiAgQWN0dWFsbHksIG5vIGRv d25sb2FkcyB3b3JrLCBub3QgZXZlbiBLZXJtaXQsIG5vdCBldmVuIG9mCi10ZXh0IGZpbGVzLgot Ci0yNyBKYW4gMjAwNzogU2luY2UgSSBoYXZlIG5vdCBiZWVuIGFibGUgdG8gZmluZCBhIHdheSB0 byBtYWtlIHB0eXMgd29yayBmb3IKLXRoaXMsIEkgbWFkZSBhIHRoaXJkIGNvcHkgb2YgdGhpcyBy b3V0aW5lLCB0aGlzIHRpbWUgdXNpbmcgcGlwZXMgaW5zdGVhZCBvZgotcHR5cy4gIFRoZSBkaXNh ZHZhbnRhZ2UgaGVyZSBpcyB0aGF0IGlmIHRoZSBleHRlcm5hbCBwcm90b2NvbCBkb2VzIG5vdCB1 c2UKLXN0ZGlvLCB0aGUgcGlwZXMgd29uJ3Qgd29yaywgYnV0IG9uZSB0aGluZyBhIHRpbWUuLi4K LQotSW5mZXJpb3IgS2VybWl0IHN0YXJ0cyBpbiBsb3dlciBmb3JrLCBidXQgd2hlbiBpdCB0cmll cyB0byBzZW5kIGl0cyBmaXJzdAotcGFja2V0IGl0IGdldHMgZXJybm89OSBFQkFERiwgQmFkIEZp bGUgRGVzY3JpcHRvci4gIFN1YnN0aXR1dGluZyBHLUtlcm1pdCBhcwotdGhlIGV4dGVybmFsIHBy b3RvY29sLCB3aGljaCBpcyBzaW1wbGVyLCByZXZlYWxzIHRoYXQgdGhlIHByb2JsZW0gaXMgdGhh dAotdGhlIGV4dGVybmFsIHByb3RvY29sIGdldHMgZXJyb3JzIHdoZW4gaXQgdHJpZXMgdG8gbWFu aXB1bGF0ZSB0aGUgaXRzIHN0ZGlvCi1maWxlIGRlc2NyaXB0b3JzIHdpdGggaW9jdGxzLCBldGM7 IHRoZXNlIGFyZSBub3QgdmFsaWQgZm9yIGEgcGlwZS4gIFRoZSBwaXBlCi1tZWNoYW5pc20gaXRz ZWxmIHdvcmtzLiAgSWYgSSB0YWtlIG91dCB0aGUgdGVzdCBmb3IgdHRwa3QoKSBmYWlsaW5nIGlu Ci1na2VybWl0LCB0aGUgZmlsZSB0cmFuc2ZlciB3b3JrcyBPSy4gIFRyeWluZyBabW9kZW0uLi4g U2VuZGluZyB3b3JrcyBPSzsKLXJlY2VpdmluZyB3b3JrcyBhIGxvdCBiZXR0ZXIgdGhhbiB3aXRo IHB0eXMgKGl0IGdvdCAzNjBLIGludG8gdGhlIGZpbGUKLWJlZm9yZSBmYWlsaW5nKS4gIE1ha2lu ZyB0aGUgYnVmZmVycyBzbWFsbGVyLCBkb2Vzbid0IGhlbHAuCi0KLUknbSBzdGFydGluZyB0byB3 b25kZXIgaWYgdGhlIHByb2JsZW0gbWlnaHQgYmUgaW4gbXkgYnVmZmVyaW5nIGNvZGUsIHJhdGhl cgotdGhhbiBpbiB0aGUgcHR5IG9yIHBpcGUgaW50ZXJmYWNlLi4uICBUcnkgbWFraW5nIGEgdmVy c2lvbiB0aGF0IGRvZXMKLXNpbmdsZS1jaGFyYWN0ZXIgcmVhZHMgYW5kIHdyaXRlcy4KLQotVGhp cyBvbmUgcmVhZHMgdGhlIGZpcnN0IHBhY2tldCBmcm9tIHRoZSBsb3dlciBLZXJtaXQgYW5kIHNl bmRzIGl0LiAgSXQgaXMKLXJlY29nbml6ZWQgYnkgdGhlIG90aGVyIEtlcm1pdCwgd2hpY2ggc2Vu ZHMgYW4gQUNLLiAgV2Ugc2VlIHRoZSBeQSBvZiB0aGUKLUFDSywgYnV0IHRoZW4gc2VsZWN0KCkg dGltZXMgb3V0IG9uIHRoZSBuZXh0IGNoYXJhY3RlciAtLSBPRiBDT1VSU0U6IGJlY2F1c2UKLWF0 IGEgbG93ZXIgbGV2ZWwsIGl0IGhhcyBhbHJlYWR5IGJlZW4gcmVhZC4gIFdlIGhhdmUgdG8gY2hl Y2sgdGhlIG15cmVhZAotYnVmZmVyLCBhbmQgdGhlbiBjYWxsIHNlbGVjdCgpIG9ubHkgaWYgaXQn cyBlbXB0eS4gIE1ha2luZyB0aGlzIGNoYW5nZToKLQotIC4gU0VORCB3aXRoIEctS2VybWl0IHdv cmtzIChidXQgdmVyeSBzbG93bHkpLgotIC4gU0VORCB3aXRoIGxzeiB3b3JrcyBidXQgZ2V0cyBh IGxvdCBvZiBlcnJvcnMsIGV2ZW50dWFsbHkgc3VjY2VlZHMuCi0KLUxldCdzIHdvcmsgb3VyIHdh eSBiYWNrLi4uICBXaXRoIHRoZSBzYW1lIGNoYW5nZXMgdG8gdGhlIGJ1ZmZlcmVkIHBpcGUgdmVy c2lvbjoKLQotIC4gU0VORCB3aXRoIEctS2VybWl0L3N0cmVhbWluZyB3b3JrcyAoZmFzdCkuCi0g LiBTRU5EIHdpdGggbHN6IHdvcmtzIHRvbyAoZmFzdCksIGJ1dCB3ZSBnZXQgZ3ViYmlzaCBhdCB0 aGUgZW5kLgotIC4gUkVDRUlWRSB3aXRoIEtlcm1pdCBmYWlscyBiZWNhdXNlICIvZGV2L3R0eSBp cyBub3QgYSB0ZXJtaW5hbCBkZXZpY2UiLgotIC4gUkVDRUlWRSB3aXRoIHJzei4uLiBsb3RzIG9m IGVycm9ycyAoImdhcmJhZ2UgY291bnQgZXhjZWVkZWQiKSBidXQgc3VjY2VlZGVkLgotCi1CdXQg bWF5YmUgbm93IHdlJ3JlIHNlZWluZyBwaXBlIGFydGlmYWN0cywgc28gZ29pbmcgYmFjayBvbmUg bW9yZSBzdGVwIHRvCi10aGUgdmVyc2lvbiB0aGF0IGdldHMgaXRzIG93biBwdHkgYW5kIHN0YXJ0 cyBpdHMgb3duIGZvcms6Ci0KLSAuIFNFTkQgd2l0aCBHLUtlcm1pdC9TdHJlYW1pbmcgd29ya3Mg KGZhc3QpIGJ1dCBzZWxlY3QoKSB0aW1lcyBvdXQgYXQgdGhlIGVuZC4KLQotQW5vdGhlciBicmVh a3Rocm91Z2g6IE1vdmVkIHRoZSB3cml0ZSBwaWVjZXMgdG8gYmVsb3cgdGhlIHJlYWQgcGllY2Vz LiAgVGhpcwotaXMgd2hhdCB3YXMgcHJldmVudGluZyB0aGUgYnVmZmVyIHJlc2V0IGNvZGUgZnJv bSB3b3JraW5nIC0tIHdpdGggdGhlIHdyaXRlcwotZG9uZSBiZWZvcmUgdGhlIHJlYWRzLCB3ZSBu ZXZlciBjYXRjaCB1cCBhbmQgY2FuIG5ldmVyIHJlc2V0IHRoZSBidWZmZXJzLgotCi0gLiBTRU5E IHdpdGggRy1LZXJtaXQvc3RyZWFtaW5nIHdvcmtzIChmYXN0KSAoYnV0IHRoZXJlJ3MgYSBwYXVz ZSBhdCB0aGUgZW5kKQotIC4gU0VORCB3aXRoIGxzeiB3b3JrcyAoZmFzdCkgKGJ1dCB0aGVyZSdz IGEgcGF1c2UgYXQgdGhlIGVuZCkKLSAuIFJFQ0VJVkUgd2l0aCByc3ouLi4gbG90cyBvZiBlcnJv cnMgKCJnYXJiYWdlIGNvdW50IGV4Y2VlZGVkIikgYW5kIGZhaWxzLgotIC4gUkVDRUlWRSB3aXRo IEtlcm1pdCAtLSBub3RoaW5nIGhhcHBlbnMgKGl0IHRoaW5rcyBpdCBzdWNjZWVkZWQpLCB0aGVu IHdlCi0gICAgIHJlY29ubmVjdCwgdGVybWluYWwgc2VlcyBTIHBhY2tldCBhbmQgZ29lcyBpbnRv IGF1dG9kb3dubG9hZAotCi1Gcm9tIHRoZSBsb2cgaXQgbG9va3MgbGlrZSB0dHBrdCgpIGZhaWxz IGluIHRoZSBsb3dlciBLZXJtaXQuICBTd2l0Y2hpbmcKLXRoaXMgd2l0aCB0aGUgaGFja2VkIEct S2VybWl0Li4uICBpdCBnZXRzICJ0cmFuc21pc3Npb24gZXJyb3Igb24gcmVsaWFibGUKLWxpbmsi LiAgVHJpZWQgYWdhaW4gd2l0aCByZWFsIEtlcm1pdCBiZWxvdywgdGhpcyB0aW1lIHdpdGggIi1s IDAiIGFuZCBub3QKLXN0cmVhbWluZy4gIFRoaXMgd2FzIGFjdHVhbGx5IHdvcmtpbmcsIGJ1dCBz bG93bHksIEkgZG9uJ3Qgc2VlIGFueSBOQUtzIGluCi10aGUgcGFja2V0IGxvZywgYnV0IHRoZW4g c2VsZWN0KCkgdGltZWQgb3V0LgotCi0yOCBKYW4gMjAwNzogUmVzdG9yZWQgYm90aCB0aGUgY2Fs bHMgdG8gcHR5X21ha2VfcmF3KCk6Ci0KLSAuIFNFTkQgd2l0aCBDLUtlcm1pdCBzdHJlYW1pbmcg d29ya3MsIGJ1dCBzbG93ICg1NEtjcHMpCi0gLiBEaXR0bywgYnV0IHdpdGggZGVidWdnaW5nIG9m ZiAtLSBoYW5ncyBmb3JldmVyLgotIC4gRGl0dG8sIGJ1dCB1c2luZyBHLUtlcm1pdCBpbnN0ZWFk IG9mIEMtS2VybWl0IC0tIGFsc28gaGFuZ3MgZm9yZXZlci4KLQotQmFja2VkIG9mZiBvbiBjYWxs aW5nIHB0eV9tYWtlX3JhdygpLiAgU2FtZSB0aGluZy4KLVJlZHVjZWQgc2l6ZSBvZiBuZXQtdG8t cHR5IGJ1ZmZlci4gIFNhbWUgdGhpbmcuCi0KLTE1IEZlYiAyMDA3Li4uICBEZWNpZGVkIHRvIGdp dmUgdXAgb24gdGhpcyBhbmQgcHVibGlzaCBpdCBhcyBpcywgaW4gaG9wZXMKLXRoYXQgc29tZWJv ZHkgd2l0aCBtb3JlIGV4cGVyaWVuY2Ugd2l0aCBwdHlzIGNhbiBtYWtlIGl0IHdvcmssIGJlY2F1 c2UgSSdtCi1qdXN0IGdvaW5nIGluIGNpcmNsZXMuICBTbyB0b2RheSBJIGp1c3QgaGF2ZSB0byBn ZXQgdGhlIGNvZGUgaW50byBzaGFwZSBzbwotcGVvcGxlIGNvdWxkIGNob29zZSBhbW9uZyB0aGUg dGhyZWUgYWx0ZXJuYXRpdmUgcm91dGluZXMuICBUaGUgc2Vjb25kIG9uZSwKLXl0dHlwdHljbWQo KSwgaXMgdGhlIG9uZSB0aGF0IHVzZXMgb3BlbnB0eSgpLCB3aGljaCBpcyBub3QgcG9ydGFibGUs IHNvIGl0Ci1jYW4gYmUgZW5hYmxlZCBvbmx5IGZvciBNYWMgT1MgWCwgTmV0QlNELCBGcmVlQlNE LCBhbmQgTGludXgsIG9yIGJ5IGFsc28KLWRlZmluaW5nIEhBVkVfT1BFTlBUWSBhdCBjb21waWxl IHRpbWUuICBBbnl3YXksIGlmIHlvdSBidWlsZCBLZXJtaXQgaW4gdGhlCi1ub3JtYWwgd2F5LCB5 b3UgZ2V0IHRoZSByZWd1bGFyIGJlaGF2aW9yIC0tIHR0cnVuY21kKCkgaXMgdXNlZCB0byBleGVj dXRlCi1leHRlcm5hbCBwcm90b2NvbHMuICBJZiB5b3UgYnVpbGQgaXQgd2l0aCAtRFhUVFBUWUNN RCwgeW91IGdldCB0aGUgZmlyc3QKLXZlcnNpb24gb2YgdHRwdHljbWQoKTsgd2l0aCAtRFlUVFBU WUNNRCB0aGUgc2Vjb25kLCBhbmQgd2l0aCAtRFpUVFBUWUNNRCB0aGUKLXRoaXJkLgotCi0oVGhl biBzb21lIGludGVycnVwdGlvbnMsIHRoZW4uLi4pCi0KLUZyb20gSmVmZiwgZml4IGhvc3RuYW1l IGNvbXBhcmlzb24gaW4gWC41MDkgY2VydGlmaWNhdGUgY2hlY2tpbmcgdG8gd29yawotcmlnaHQg aW4gdGhlIGNhc2Ugb2YgbmFtZXMgdGhhdCBjb250YWluIG5vIHBlcmlvZHMuICBkTlNOYW1lX2Nt cCgpOiBjbF9zc2wuYywKLTIxIEZlYiAyMDA3LgotCi1Kb2huIER1bmxhcCBub3RpY2VkIHNvbWUg c3RyYW5nZSBiZWhhdmlvciB3aGVuIHRyYW5zZmVycmluZyBmaWxlcyBiZXR3ZWVuCi1ob21lIGJh c2UgYW5kIHRoZSBFTS1BUEVYIG9jZWFub2dyYXBoaWMgZmxvYXRzIHZpYSBzYXRlbGxpdGUuLi4g bG9uZyBzdG9yeSwKLWJ1dCBldmVyeSBzbyBvZnRlbiB0aGUgdHJhbnNmZXIgd291bGQgZ2V0IHN0 dWNrIGZvciBhIGxvbmcgdGltZSwgYW5kIGl0Ci1oYXBwZW5lZCBvbmx5IHdoZW4gQy1LZXJtaXQg d2FzIHNlbmRpbmcgYSBmaWxlIGFuZCByZWNlaXZlZCB0d28gb3IgbW9yZQotcGFja2V0cyAoQWNr IG9yIE5haykgYmFjayB0byBiYWNrIGZyb20gdGhlIGZsb2F0LiAgWWVhcnMgYWdvIEkgYWRkZWQg c29tZQotbG9va2FoZWFkIGNvZGUgdG8gdHRpbmwoKSB0byBjbGVhciB0aGUgaW5wdXQgYnVmZmVy IG9mIGFueSBpbnRlcnBhY2tldCBqdW5rCi1zbyB0aGF0LCBpbiB0aGUgd2luZG93aW5nIGNhc2Us IHdlIHdvdWxkbid0IGJlIHRyaWNrZWQgbmV4dCB0aW1lIGFyb3VuZCBpbnRvCi10aGlua2luZyBh IHBhY2tldCB3YXMgd2FpdGluZyB0byBiZSByZWFkIHdoZW4gdGhlcmUgd2Fzbid0LiAgVGhlIGNv ZGUsIHdoaWNoCi1oYXMgYmVlbiB0aGVyZSBmb3IgYSB3aGlsZSwgd2FzIGEgYml0IGZyYWN0dXJl ZDsgbHVja2lseSwgaXQgd291bGQgYmUKLWV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZGVidWcgbG9n IHdhcyBhY3RpdmUgc28gaXQgZGlkbid0IGhhdmUgbXVjaCBlZmZlY3QuCi1UaGUgcHJvYmxlbSB3 YXMgdGhhdCBpZiB0aGUgU09QIGNhbWUgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIEVPUCwgaXQgY291 bGQgYmUKLW1pc3NlZCBiZWNhdXNlIHRoZSBsb29wIHJlYWQgdGhlIG5leHQgY2hhcmFjdGVyIGJl Zm9yZSBjaGVja2luZyB0aGUgY3VycmVudAotb25lLiAgRml4ZWQgYnkgcmVhcnJhbmdpbmcgdGhl IGxvb3AuICBBbHNvIEkgY2hhbmdlZCBpdCBzbyBpdCB3b3VsZCBleGVjdXRlCi1pbiBhbGwgY2Fz ZXMsIG5vdCBvbmx5IHdoZW4gdGhlIGRlYnVnIGxvZyB3YXMgYWN0aXZlLiAgQWxzbywgY2xlYW5l ZCB1cCBhCi1idW5jaCBvZiBjb25mdXNpbmcgI2lmZGVmcyBhbmQgcmVtb3ZlZCBzb21lIGNodW5r cyB0aGF0IGhhZCBiZWVuIGNvbW1lbnRlZAotb3V0IGZvciB5ZWFycywgZGVjYWRlcyBtYXliZS4g IHR0aW5sKCk6IGNrdXRpby5jLCAyMS0yMiBGZWIgMjAwNy4KLQotQWRkZWQgTk9XIGtleXdvcmQg aW5mbyB0byBIRUxQIERBVEUsIHBsdXMgYSB0aXAgYWJvdXQgaG93IHRvIGNvbnZlcnQgdG8gVVRD Owotc3VnZ2VzdGVkIGJ5IEFydGh1ciBNYXJzaC4gIGNrdXVzMi5jLCAyMiBGZWIgMjAwNy4KLQot V2hlbiBhbiBGVFAgY2xpZW50IHNlbmRzIE5MU1QgdG8gdGhlIHNlcnZlciBhbmQgbm8gbWF0Y2hp bmcgZmlsZXMgYXJlIGZvdW5kLAotdGhlIHNlcnZlciBpcyBzdXBwb3NlZCB0byByZXNwb25kIHdp dGggYW4gZXJyb3IgbWVzc2FnZSBvbiB0aGUgY29udHJvbAotY2hhbm5lbCBhbmQgbm90aGluZyBv biB0aGUgZGF0YSBjaGFubmVsLiAgSG93ZXZlciBpdCBzZWVtcyB0aGF0IGF0IGxlYXN0IG9uZQot c2VydmVyIHNlbmRzIHRoZSBlcnJvciBtZXNzYWdlIGJhY2sgb24gdGhlIGRhdGEgY2hhbm5lbCwg YXMgaWYgaXQgd2VyZSBhCi1maWxlbmFtZSAoIi9iaW4vbHM6IGJsYWg6IE5vIHN1Y2ggZmlsZSBv ciBkaXJlY3RvcnkiKSwgYW5kIG9uIHRoZSBjb250cm9sCi1jaGFubmVsIHRoZXJlIGlzIG5vIGVy cm9yIGluZGljYXRpb24gKCIyMjYgQVNDSUkgVHJhbnNmZXIgY29tcGxldGUiKS4gIEF0Ci10aGlz IHBvaW50IHJlbW90ZV9maWxlcygpIGhhcyBhIGxpc3RmaWxlIGFuZCwgaWYgYSBtYXRjaCBwYXR0 ZXJuIHdhcyBnaXZlbiwKLWl0IGxvb2tzIHRocm91Z2ggbGlzdCB0byBzZWUgaWYgYW55IG9mIHRo ZSBsaW5lcyBtYXRjaCB0aGUgZ2l2ZW4gZmlsZW5hbWUsCi1lLmcuICJibGFoIi4gIFRoaXMgbWFr ZXMgRlRQIENIRUNLIGdpdmUgZmFsc2UgcG9zaXRpdmVzLiAgVGhlIHByb2JsZW0KLShkaWFnbm9z ZWQgYnkgSmVmZikgaXMgdGhhdCB0aGUgbWF0Y2ggcGF0dGVybiB3YXMgbm90IGdpdmVuIGluIHRo aXMgY2FzZSwgc28KLWl0IHRha2VzIHNvbWUgcmFuZG9tIGRlZmF1bHQgYWN0aW9uLCByZXN1bHRp bmcgaW4gdGhlIHNwdXJpb3VzIHN1Y2Nlc3MKLXJldHVybi4gIEZpeGVkIGJ5IHVzaW5nIHRoZSB1 c2VyJ3Mgc3RyaW5nIGFzIHRoZSBwYXR0ZXJuLiAgTm90IHRlc3RlZCwKLWhvd2V2ZXIsIHNpbmNl IEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gYSBzZXJ2ZXIgdGhhdCBiZWhhdmVzIHRoaXMgd2F5Lgot Y2tjZnRwLmMsIDIyIEZlYiAyMDA3LgotCi1JZiBhbiBleHRlcm5hbC1wcm90b2NvbCBmaWxlIHRy YW5zZmVyIGZhaWxzLCBkb24ndCBwcmludCBLZXJtaXQtc3BlY2lmaWMKLWhpbnRzLiAgY2t1dXM1 LmMsIDIyIEZlYiAyMDA3LgotCi1PbmUgbW9yZSB0aW1lIHdpdGggdHRpbmwoKS4gIEdvdCByaWQg b2YgdGhlICJjc2F2ZSIganVuaywgd2hpY2ggbmV2ZXIgY291bGQKLWhhdmUgd29ya2VkICh3aGlj aCBpcyBubyBkb3VidCB3aHkgaXQgd2FzIGluIGEgZGVidWdnaW5nIHNlY3Rpb24pLiAgVGhlCi1w cm9ibGVtIHdhcyB0aGF0IHNhdmluZyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IHBhY2tldCBs b2NhbGx5IGRpZCBub3QKLXN5bmNocm9uaXplIHdpdGggdGhlIGJ1ZmZlciBjbGVhcmluZyAodHRm bHVpKCkpIGRvbmUgYXQgYSBoaWdoZXIgbGV2ZWwsCi1iZXR3ZWVuIGNhbGxzIHRvIHR0aW5sKCku ICBTbyBub3csIHRoZSBsb29rYWhlYWQgY29kZSwgaWYgaXQgZmluZHMgdGhlCi1iZWdpbm5pbmcg YW4gYXMteWV0IHVucmVhZCBwYWNrZXQsIHB1dHMgaXQgYmFjayBhdCB0aGUgaGVhZCBvZiB0aGUg aW5wdXQKLXF1ZXVlLiAgVGhpcyB3YXksIGlmIHRoZSBwcm90b2NvbCBlbmdpbmUgY2xlYXJzIHRo ZSBpbnB1dCBidWZmZXIsIGl0IHdpbGwKLWdldCB0aGUgd2hvbGUgcGFja2V0LCBub3QganVzdCB0 aGUgcGFydCBhZnRlciB0aGUgU09ILiAgY2t1dGlvLmMsIDI0IEZlYiAyMDA3LgotCi1Gcm9tIFN0 ZXZlbiBNIFNjaHdlZGEsIFNhaW50IFBhdWwsIE1OOiBhZGFwdGF0aW9uIG9mIGxhcmdlIGZpbGUg c3VwcG9ydCB0bwotVk1TIChpdCB3YXMgYWxyZWFkeSBwb3NzaWJsZSB0byB0cmFuc2ZlciBsYXJn ZSBmaWxlcyBpbiBWTVMgQy1LZXJtaXQgYnV0IHRoZQotZmlsZS10cmFuc2ZlciBkaXNwbGF5IGFu ZCBzdGF0aXN0aWNzIHdlcmUgd3JvbmcpLiAgQW5kIGEgbWluaW1hbCBhZGFwdGF0aW9uCi1vZiB0 aGUgRlRQIGNsaWVudCB0byBWTVMgLS0gbm8gUk1TLCBubyBzcGVjaWFsIFZNUyBmaWxlIHN0dWZm LCBTdHJlYW1fTEYgYW5kCi1iaW5hcnkgZmlsZXMgb25seSwgZGV2ZWxvcGVkIGFuZCB0ZXN0ZWQg b25seSB3aXRoIFVDWC4gIFNTTC9UTFMgaXMKLXN1cHBvcnRlZC4gIFRoZSBzb3VyY2UtY29kZSBj aGFuZ2VzIGFyZSBtaW5pbWFsOyBtb3N0IGhhdmUgbm90aGluZyB0byBkbwotd2l0aCBWTVMsIGJ1 dCB3aXRoIGhlYWRlciBmaWxlcywgcHJvdG90eXBlcywgYW5kIGRhdGEgdHlwZXMgKGUuZy4gZnRw X3BvcnQKLWludCByYXRoZXIgdGhhbiBzaG9ydCwgdmFyaW91cyBzaWduZWQvdW5zaWduZWQgY29u ZmxpY3RzKSB0byBzaHV0IHVwCi1jb21waWxlciB3YXJuaW5ncy4gIFNvbWUgb2YgdGhlc2UgY291 bGQgYmUgZGFuZ2Vyb3VzIGluIHRlcm1zIG9mCi1wb3J0YWJpbGl0eTsgSSd2ZSBtYXJrZWQgdGhl bSB3aXRoIC8qIFNNUyAyMDA3LzAyLzE1ICovLiAgY2tjZm5zLmMsCi1ja2NuZXQuaCwgY2tfc3Ns LmgsIGNrdXVzMy5jLCBja3V1czQuYywgY2t2ZmlvLmMsIGNrY2Z0cC5jLCBja3ZrZXIubW1zCi0o d2hpY2ggd2FzIHJld3JpdHRlbiB0byBhY3R1YWxseSByZWZsZWN0IHRoZSBzb3VyY2UgbW9kdWxl IGRlcGVuZGVuY2llcyksCi1ja3ZrZXIuY29tIChhbHNvIGhlYXZpbHkgbW9kaWZpZWQpLiAgY2t2 a2VyLmNvbSAodGhlICJtYWtlZmlsZSIgZm9yIFZNUwotQy1LZXJtaXQpIG5vdyBpbmNsdWRlcyAi RiIgYW5kICJJIiBvcHRpb24gZmxhZ3MgZm9yIHRoZSBsYXJnZSBGaWxlIGFuZAotSW50ZXJuYWwg ZnRwIGZlYXR1cmVzLCBwbHVzIGJldHRlciBoYW5kbGluZyBvZiBWYXgvQWxwaGEvSUE2NCBkaXN0 aW5jdGlvbi4KLTI2IEZlYiAyMDA3LgotCi1DaGFuZ2VkIE5ldEJTRCB0YXJnZXRzIHRvIGluY2x1 ZGUgLURIQVZFX09QRU5QVFkgYW5kIC1sdXRpbCwgc28gdGhleQotY2FuIHVzZSBvcGVucHR5KCku ICBtYWtlZmlsZSwgMjYgRmViIDIwMDcuCi0KLUJ1aWx0IG9uIFNvbGFyaXMgd2l0aG91dCBhbmQg d2l0aCBTU0wgT0suCi1CdWlsdCBvbiBOZXRCU0Qgd2l0aCBLZXJiZXJvcyA1LCBPSy4KLUJ1aWx0 IG9uIE1hYyBPUyBYIDEwLjQsIHJlZ3VsYXIgdmVyc2lvbiwgT0suCi1CdWlsdCBvbiBNYWMgT1Mg WCAxMC40IHdpdGggU1NMIGFuZCBLZXJiZXJvcyA1LCBPSy4KLQotT24gVk1TIDcuMi0xL0FscGhh IHdpdGggTXVsdGlOZXQgNC40QS1YLi4uCi0KLSdDQycgJ0NDT1BUJyBLU1A6Y2t1dXMzCi0lRENM LVctVEtOT1ZGLCBjb21tYW5kIGVsZW1lbnQgaXMgdG9vIGxvbmcgLSBzaG9ydGVuCi0gXENLVVVT NC5PQkogIidDQycgJ0NDT1BUJyBLU1A6Y2t1dXM0IiAiS1NQOmNrdXVzNC5jIEtTUDpja2NzeW0u aCBLU1A6Y2tjZGViLmgKLSBLU1A6Y2tjbGliLmgiICJLU1A6Y2tjYXNjLmggS1NQOmNrY2tlci5o IEtTUDpja2NuZXQuaCBLU1A6Y2t2aW9jLmgiCi0iS1NQOmNrY3RlbC5oIEtTUDpja3V1c3IuaCBL U1A6Y2t1Y21kLmggS1NQOmNrdXZlci5oIiAiS1NQOmNrY3hsYS5oCi0gS1NQOmNrdXhsYS5oIEtT UDpja2N1bmkuaCBLU1A6Y2t1YXRoLmgiCi0KLVRoZSBuZXcgcnVsZSBmb3IgY2t1dXM0LmMgd2Fz IHRvbyBsb25nLiAgSSByZW1vdmVkIG9uZSBmaWxlIGZyb20gdGhlCi1kZXBlbmRlbmN5IGxpc3Qg KGNrY3hsYS5oLCB3aGljaCB3aWxsIHByb2JhYmx5IG5ldmVyIGNoYW5nZSBhZ2FpbikgYW5kIHRo YXQKLW1hZGUgaXQgT0suICBCdWlsdCBOb25ldCBhbmQgTmV0IHZlcnNpb25zIE9LLCBidXQgdGhp cyBpcyB3aXRob3V0IHRoZSBuZXcKLXN0dWZmLgotCi0ibWFrZSBmIiAobGFyZ2UtZmlsZSBzdXBw b3J0KSBvbiBWTVMgNy4yLTEuLi4KLSdDQycgJ0NDT1BUJyBLU1A6Y2t1dXM0Ci0gICAgICAgICAg ICAgICAgICAgIGlmIChDS0ZTRUVLKGZwLChDS19PRkZfVClqLFNFRUtfQ1VSKSAhPSAwKSB7Ci0u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi5eCi0lQ0MtSS1JTVBMSUNJVEZVTkMsIEluIHRoaXMgc3Rh dGVtZW50LCB0aGUgaWRlbnRpZmllciAiZnNlZWtvIiBpcyBpbXBsaWNpdGx5Ci1kZWNsYXJlZCBh cyBhIGZ1bmN0aW9uLgotCi1EaXR0byBmb3IgZnRlbGxvIGFuZCBmc2Vla28gaW4gdmFyaW91cyBv dGhlciBwbGFjZXMsIGFuZCB0aGVuIGZzZWVrbyBhbmQKLWZ0ZWxsbyBjb21lIHVwIHVwIHVuZGVm aW5lZCBhdCBsaW5rIHRpbWUuCi0KLVRoZSBydWxlIGZvciBja2NmdHAgaW4gIm1ha2UgaSIgKElu dGVybmFsIEZUUCBzdXBwb3J0KSBoYWQgdGhlIHNhbWUgcHJvYmxlbS4KLUkgcmVtb3ZlZCBja2N4 bGEuaCBmcm9tIGl0cyBkZXBlbmRlbmN5IGxpc3QgdG9vLCBidXQgInV0aW1lIiBjb21lcyB1cAot dW5kZWNsYXJlZCBhdCBjb21waWxlIHRpbWUgYW5kIHVuZGVmaW5lZCBhdCBsaW5rIHRpbWUuCi0K LVZlcmRpY3Q6IG5laXRoZXIgb25lIG9mIHRoZSB0d28gbmV3IGZlYXR1cmVzIGNhbiBiZSB1c2Vk IGluIFZNUyA3LjIgb3IKLWVhcmxpZXIsIGJ1dCB0aGUgY29kZSBzdGlsbCBidWlsZHMgT0sgaWYg eW91IGRvbid0IGFzayBmb3IgdGhlbS4KLQotVk1TIDguMyBvbiBJQTY0Li4uICBDYW4ndCBidWls ZCBhbnl0aGluZzoKLSVNTVMtRi1CQURUQVJHLCBTcGVjaWZpZWQgdGFyZ2V0IChXRVJNSVQpIGRv ZXMgbm90IGV4aXN0IGluIGRlc2NyaXB0aW9uIGZpbGUKLQotMjcgRmViIDIwMDc6IENoYW5nZWQg Q0tWS0VSLkNPTSB0byBrZWVwIGFsbCBpdHMgZGVwZW5kZW5jaWVzIGJ1dCB1c2UgYQotc2hvcnRl ciBsb2dpY2FsIG5hbWUgKFN0ZXZlbiBNIFNjaHdlZGEpLiAgVGhlIHByb2JsZW0gb24gVk1TIDgu MyBpcyB0aGF0IE1NUwotbm93IHN1cHBvcnRzIGNhc2Utc2Vuc2l0aXZlIGZpbGUgc3lzdGVtcywg YW5kIHNvIGl0IGNhbid0IGZpbmQgYW55dGhpbmcuCi1Xb3JrYXJvdW5kOiBieXBhc3MgTU1TIChp bmNsdWRlICJtIiBpbiBQMSkuICBXaXRoIHRoaXMsICJAY2t2a2VyLmNvbSBpZm0iCi1idWlsZHMg T0sgb24gSFAgVGVzdGRyaXZlLCBidXQgSSBjYW4ndCB0ZXN0IHRoZSBuZXcgZmVhdHVyZXMgc2lu Y2Ugb3V0Ym91bmQKLWNvbm5lY3Rpb25zIGFyZSBub3QgYWxsb3dlZCB0aGVyZS4gIEFzIGZvciBm c2Vla28oKSwgZnRlbGxvKCksIGFuZCB1dGltZSgpLAotdGhleSBzaW1wbHkgYXJlIG5vdCBhdmFp bGFibGUgcHJpb3IgdG8gVk1TIDcuMy4gIEl0IHdvdWxkIHByb2JhYmx5IGJlIGEgZ29vZAotaWRl YSB0byB0ZXN0IGZvciB0aGlzIGluIENLVktFUi5DT00sIGJ1dCBhY3R1YWxseSBpdCBpcyBwb3Nz aWJsZSB0byBpbnN0YWxsCi1uZXdlciBDJ3MgYW5kIENSVExzIG9uIG9sZGVyIFZNUyB2ZXJzaW9u cywgc28gZG9uJ3Qgc3RhbmQgaW4gdGhlaXIgd2F5LgotCi0yOCBGZWIgMjAwNzogV2l0aCBhZGRp dGlvbmFsIGNoYW5nZXMgZnJvbSBTTVMsIGFuZCB0aGVuIHNvbWUgZnVydGhlcgotYWRqdXN0bWVu dHMsIEkgd2FzIGFibGUgdG8gYnVpbGQgdGhlIEZUUCB2ZXJzaW9uIG9uIFZNUyA3LjItMS4gIEZp cnN0IEkKLXRlc3RlZCBpdCB3aXRoIEdFVCBvZiBhIGJpbmFyeSBmaWxlLCBidXQgaXQgdHJhbnNm ZXJyZWQgaXQgaW4gdGV4dCBtb2RlLgotQWZ0ZXIgYSBmZXcgbW9yZSBhdHRlbXB0cyB3aXRoIFBV VCBhbmQgR0VULCBpdCBjcmFzaGVkIHdpdGggImZsb2F0aW5nL2RlY2ltYWwKLWRpdmlkZSBieSB6 ZXJvIiBpbiBja3NjcmVlbiwgY2t1dXN4LmMgbGluZSAyNzg1OS4gIE9mIGNvdXJzZSwgdGhhdCdz IHRoZQotbGlzdGluZyBsaW5lLCBub3QgdGhlIHNvdXJjZSBsaW5lLCBhbmQgSSBkb24ndCBoYXZl IGEgbGlzdGluZy4KLQotVG8gZ2V0IGEgbGlzdGluZywgSSBkZWxldGVkIENLVVVTWC5PQkogYW5k IHRoZW4gZGlkOgotCi0gICQgbWFrZSBpICIiICIiICIvTElTVCIKLQotU3VycHJpc2luZ2x5LCBp dCByZWNvbXBpbGVkIGV2ZXJ5dGhpbmcuCi0KLUFueXdheSwgdGhlIGRpdmlkZSBieSB6ZXJvIGhh cHBlbmVkIGluIGEgc2VjdGlvbiBvZiBjb2RlIHdoZXJlIHRoZSBkaXZpc29yCi13YXMgbm90IGNo ZWNrZWQsIGJ1dCBpdCB3YXMgYSBzZWN0aW9uIG9mIGNvZGUgd2Ugc2hvdWxkIG5vdCBoYXZlIGJl ZW4KLWV4ZWN1dGluZyBhdCBhbGwsIHNpbmNlIHRoZSBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgd2Fz IGZ1bGxzY3JlZW4sIGFuZCB0aGlzCi13YXMgaW4gdGhlICJicmllZiIgc2VjdGlvbi4gIEFueXdh eSwgSSBhZGRlZCB0aGUgbmVlZGVkIGNoZWNrLiAgQWdhaW4sIGl0Ci1yZWNvbXBpbGVzIGV2ZXJ5 dGhpbmcuICBNYXliZSB0aGVyZSdzIG5vIE1NUyBvbiBncnVtcHkgLS0gcmlnaHQsIHRoZXJlIGlz bid0LgotCi1BTllXQVkuLi4gVHJ5IHRvIEdFVCBhIGJpbmFyeSBmaWxlIGxpa2UgdGhpczoKLQot ICBiaW5hcnkKLSAgLS0tPiBUWVBFIEkKLSAgMjAwIFR5cGUgc2V0IHRvIEkuCi0gIGdldCBna2Vy bWl0Ci0gIC0tLT4gVFlQRSBBCi0gIDIwMCBUeXBlIHNldCB0byBBLgotICAtLS0+IFNJWkUgZ2tl cm1pdAotICA1NTAgZ2tlcm1pdDogZmlsZSB0b28gbGFyZ2UgZm9yIFNJWkUuCi0gIEdFVCBna2Vy bWl0ICh0ZXh0KSAoLTEgYnl0ZXMpLS0tPiBUWVBFIEEKLQotQW55d2F5Li4uICJnZXQgL2JpbmFy eSBna2VybWl0IiBkb3dubG9hZHMgaXQsIHNlZW1pbmdseSBjb3JyZWN0bHkgKHRoZSBieXRlCi1j b3VudCBpcyByaWdodCkuCi0KLUJ1dCAicHV0IC9iaW5hcnkgZ2tlcm1pdC47MSIgcmVzdWx0cyBp biBhIDAtbGVuZ3RoIEdLRVJNSVQgZmlsZSBiZWluZyBzZW50LgotSGVyZSdzIHRoZSBkZWJ1ZyBs b2c6Ci0KLUZUUCBQVVQgZ25maWxlW0RJU0skTVNBNDpbQy5GREMuTkVUXWdrZXJtaXQuOzFdPTEK LWZ0cCBwdXRmaWxlIGZsZ1tESVNLJE1TQTQ6W0MuRkRDLk5FVF1na2VybWl0LjsxXT0wCi16bHRv ciBmbmNudltESVNLJE1TQTQ6W0MuRkRDLk5FVF1na2VybWl0LjsxXT0tMQotRlRQIFBVVCBuemx0 b3JbR0tFUk1JVF0KLXpmbnFmcCAxW0RJU0skTVNBNDpbQy5GREMuTkVUXWdrZXJtaXQuOzFdPTY3 NQotemZucWZwIDJbRElTSyRNU0E0OltDLkZEQy5ORVRdR0tFUk1JVC47MV09MzEKLXpmbnFmcCAz W0RJU0skTVNBNDpbQy5GREMuTkVUXUdLRVJNSVQuOzFdPTMxCi16cmVsbmFtIHJlc3VsdCAyW2dr ZXJtaXQuOzFdCi1mdHAgc2VuZHJlcXVlc3QgcmVzdGFydFtESVNLJE1TQTQ6W0MuRkRDLk5FVF1n a2VybWl0LjsxXT0wCi1vcGVuaSBuYW1lW0RJU0skTVNBNDpbQy5GREMuTkVUXWdrZXJtaXQuOzFd Ci1vcGVuaSBzbmRzcmM9LTEKLW9wZW5pIGZpbGUgbnVtYmVyPTIKLXpvcGVuaVtESVNLJE1TQTQ6 W0MuRkRDLk5FVF1na2VybWl0LjsxXT0yCi16b3BlbmkgZnA9MAotY2hrZm49MgotY2hrZm4gcmV0 dXJuPTAKLXpvcGVuaSBmaXhlZCBmaWxlIGZvcm1hdCAtIHVzaW5nIGJsayBJL08KLXpvcGVuaSBi aW5hcnkgZmxhZyBhdCBvcGVuPTEKLXpvcGVuaSBpZmlsZV9ibW9kZT0xCi16b3BlbmkgYmluYXJ5 PTEKLXpvcGVuaSBSTVMgb3BlcmF0aW9ucyBjb21wbGV0ZWQgb2sKLW9wZW5pIHpvcGVuaSAxW0RJ U0skTVNBNDpbQy5GREMuTkVUXWdrZXJtaXQuOzFdPTEKLWZ0cGNtZCBjbWRbUEFTVl0KLUZUUCBT RU5UIFtQQVNWXQotRlRQIFJDVkQgWzIyNyBFbnRlcmluZyBQYXNzaXZlIE1vZGUgKDE2Niw4NCwx LDIsMjMzLDIxNildCi1pbml0Y29ubiBjb25uZWN0IG9rCi1GVFAgU0VOVCBbU1RPUiBHS0VSTUlU XQotRlRQIFJDVkQgWzE1MCBPcGVuaW5nIEJJTkFSWSBtb2RlIGRhdGEgY29ubmVjdGlvbiBmb3Ig J0dLRVJNSVQnLl0KLWRvZnRwc2VuZDIgZnRwY29kZVtTVE9SXT0xNTAKLQotICBIZXJlIGlzIHdo ZXJlIHRoZSBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHJlYWQgYW5kIHNlbnQgYnV0IHRoZXJlIGlz IG5vdGhpbmcKLSAgaW4gdGhlIGxvZyBiZXR3ZWVuIHRoZSAiZG9mdHBzZW5kMiBmdHBjb2RlIiBs aW5lIGFuZCB0aGUgZm9sbG93aW5nIGxpbmUuCi0KLXJmdGltZXIgc3RhdHVzPTEKLWdmdGltZXIg c3RhdHVzIDE9MQotZ2Z0aW1lciBzdGF0dXMgMj0xNDA5MDI1Ci1nZnRpbWVyIHN0YXR1cyAzPTE0 MDkwMjUKLWdmdGltZXIgc1swLjAwMDAwMF0KLXpjbG9zZSBuPTIKLWNoa2ZuPTIKLWNoa2ZuIHJl dHVybj0xCi16Y2xvc2UgWklGSUxFIFJNUyBvcGVyYXRpb25zIGNvbXBsZXRlZCBvawotZnRwIGdl dHJlcGx5IGxjcz0wCi1mdHAgZ2V0cmVwbHkgcmNzPS0xCi1mdHAgZ2V0cmVwbHkgZmM9MAotRlRQ IFJDVkQgWzIyNiBUcmFuc2ZlciBjb21wbGV0ZS5dCi1mdHAgZ2V0cmVwbHlbMjI2IFRyYW5zZmVy IGNvbXBsZXRlLl09MgotZG9mdHBzZW5kMiBvaz0wCi0KLUV2ZXJ5dGhpbmcgaXMgT0sgdXAgdW50 aWwgd2UgZ28gdG8gc2VuZCB0aGUgZmlsZSwgdGhlbiBpdCBiZWhhdmVzIGFzIGlmIHdlCi1nb3Qg RU9GIGltbWVkaWF0ZWx5IGFuZCBzbyBjbG9zZXMgdGhlIGRhdGEgY29ubmVjdGlvbiwgYW5kIHJl cG9ydHMgc3VjY2VzczsKLWFuIGVtcHR5IGNvcHkgb2YgdGhlIGZpbGUgaXMgbGVmdCBvbiB0aGUg ZmFyIGVuZC4KLQotU3RhcnRpbmcgb3ZlciB3aXRoIGEgdGV4dCBmaWxlLi4uLiAgUFVUIExPR0lO LkNPTSBnZXRzIGFub3RoZXIgZGl2aWRlIGJ5Ci16ZXJvLiAgQnV0IGl0IGhhcHBlbmVkIGluIHRo ZSBjb2RlIEkganVzdCBmaXhlZCwgd2hpY2ggaXMgaW1wb3NzaWJsZS4gIFN3ZWxsLgotSSByZWNv bXBpbGVkIGV2ZXJ5dGhpbmcgYW5kIHRoaXMgdGltZSB0aGUgdXBsb2FkIHdvcmtlZCwgYW5kIGRv d25sb2FkaW5nIGl0Ci1hZ2FpbiB3b3JrZWQgdG9vLgotCi1CdXQgYSBiaW5hcnkgZmlsZSBzdGls bCBjYW4ndCBiZSB1cGxvYWRlZC4gIFRyeWluZyB0byB1cGxvYWQgYSB0ZXh0IGZpbGUKLWFmdGVy IGRvaW5nIHRoaXMgc2VlbXMgdG8gc3VjY2VlZCAocmVwb3J0cyB0aGUgcmlnaHQgbnVtYmVyIG9m IGJ5dGVzIHNlbnQpCi1idXQgbm90aGluZyBhcHBlYXJzIG9uIHRoZSBmYXIgc2lkZS4KLQotU1VN TUFSWToKLQotICBUbyBkb3dubG9hZCBhIHRleHQgZmlsZTogR0VUIC9BU0NJSSBibGFoLnR4dCAg ICAoL0FTQ0lJIGlzIG9wdGlvbmFsKQotICBUbyBkb3dubG9hZCBhIGJpbmFyeSBmaWxlOiBHRVQg L0JJTkFSWSBibGFoLmJpbiAoL0JJTkFSWSBpcyByZXF1aXJlZCkKLSAgVG8gdXBsb2FkIGEgdGV4 dCBmaWxlOiBQVVQgYmxhaC50eHQgICAgICAgICAgICAgKC9BU0NJSSBzd2l0Y2ggbm90IG5lZWRl ZCkKLSAgVG8gdXBsb2FkIGEgYmluYXJ5IGZpbGU6IFBVVCAvQklOQVJZIGJsYWguYmluICAgKGRv ZXNuJ3Qgd29yaykKLQotUHJvYmxlbXM6Ci0gIC4gV2h5IGRvZXNuJ3QgQklOQVJZICJzdGljayI/ Ci0gIC4gV2h5IGRvbid0IGJpbmFyeSB1cGxvYWRzIHdvcms/Ci0KLVRoZSBjdWxwcml0IHNlZW1z IHRvIGJlIHRoZSBWTVMgdmVyc2lvbiBvZiB6eGluKCkuICBJbiB0aGUgRlRQIG1vZHVsZSwKLXp4 aW4oKSBpcyBjYWxsZWQgb25seSB3aGVuIHNlbmRpbmcgYmluYXJ5IGZpbGVzLiAgSW4gVk1TLCB6 eGluKCkgaXMganVzdAotYSBmcm9udCBlbmQgZm9yIEMtTGlicmFyeSBmcmVhZCgpLiAgSXQgcHJv YmFibHkgbmVlZHMgdG8gZG8ganVzdCBkbwotem1pbmNoYXIoKSBpbiBhIGxvb3AsIGxpa2UgYmlu YXJ5IG1vZGUgZG9lcywgYnV0IGNhbGxpbmcgenpvdXQgaW5zdGVhZAotb2YgeHhvdXQuICBPciBz b21ldGhpbmcgbGlrZSB0aGF0LiAgRklOSVNIIFRISVMgVE9NT1JST1cgKGRlYnVnIG9uIGdydW1w eSkuCi0KLTIgTWFyIDIwMDc6IE5ldyBsb2dzIGZyb20gSm9obiBEdW5sYXAuCi0KLWVtYS0xNjM2 LWxvZy0wMTc1LmRiZzogQy1LZXJtaXQgdXBsb2FkcyBhIHNob3J0IGZpbGUuIEl0IHJlY2VpdmVz IGFuIEFjayBmb3IKLXRoZSBaIHBhY2tldCBpdCBqdXN0IHNlbnQsIHRhaWxnYXRlZCBieSB0aGUg YmVnaW5uaW5nIG9mIGEgTmFrIGZvciB0aGUgbmV4dAotcGFja2V0LiAgV2hlbiB0aGUgc2Vjb25k IFNPSCBpcyBlbmNvdW50ZXJlZCwgaXQgaXMgcHV0IGJhY2sgaW4gdGhlIG15cmVhZAotcXVldWUu ICBUaGVuIHRoZSBwcm90b2NvbCBlbmdpbmUsIHRvIHdoaWNoIHdlIHJldHVybiB0aGUgQWNrLCBz YXlzLCAiSSBoYXZlCi10aGUgcGFja2V0IEkgd2FudGVkIHNvIEknbSBjbGVhcmluZyB0aGUgYnVm ZmVyIiwgYW5kIGF3YXkgZ28gdGhlIGZpcnN0IHR3bwotYnl0ZXMgb2YgdGhlIE5hayBmcm9tIHRo ZSBteXJlYWQgYnVmZmVyLiAgVGhlbiwgaGF2aW5nIGp1c3QgcmVjZWl2ZWQgdGhlIEFjawotb2Yg b3VyIFogcGFja2V0LCB3ZSBzZW5kIG91ciBCLCBhbmQgZ28gdG8gcmVhZCB0aGUgcmVwbHkuICBp bl9jaGsgZmluZHMgMCBpbgotdGhlIG15cmVhZCBidWZmZXIgKHdoaWNoIHdlIGp1c3QgY2xlYXJl ZCkgYW5kIDYgd2FpdGluZyB0byBiZSByZWFkIGZyb20gdGhlCi1jb21tcyBjaGFubmVsLCB3aGlj aCBpdCBkb2VzLCBvYnRhaW5pbmcgdGhlIHJlbWFpbmluZyA2IGJ5dGVzIG9mIHRoZSBOYWssCi13 aGljaCBpdCBwcm9wZXJseSBkaXNjYXJkcy4gIChUaGUgcmVhc29uIHRoaXMgaXMgcHJvcGVyIGlz IHRoYXQsIGhhdmluZwotYWxyZWFkeSByZWNlaXZlZCB0aGUgQWNrIGZvciB0aGUgbGFzdCBwYWNr ZXQgaXQgc2VudCwgbm8gQWNrIG9yIE5hayB0aGF0Ci1hcnJpdmVzIHN1YnNlcXVlbnRseSAtLSBp biB0aGUgbm9uLXdpbmRvd2luZyBjYXNlIC0tIGNvdWxkIHBvc3NpYmx5IGFmZmVjdAotd2hhdCBp dCBkb2VzIG5leHQuKSAgU2luY2UgaXQgaGFzbid0IHlldCBmb3VuZCBhIGdvb2QgcGFja2V0LCBp dCBrZWVwcwotcmVhZGluZywgYW5kIG5vdyBpdCBmaW5kcyB0aGUgQWNrIHRvIHRoZSBCLCBhcyBz b29uIGFzIGl0IHNob3dlZCB1cC4gIFRoaXMKLWlzIGhvdyBpdCdzIHN1cHBvc2VkIHRvIHdvcmsu ICBObyB0aW1lIHdhcyBsb3N0IGJlY2F1c2Ugb2YgYW55dGhpbmcgdGhhdAotQy1LZXJtaXQgZGlk LgotCi1lbWEtMTYzNi1sb2ctMDE3NC5kYmc6IEMtS2VybWl0IHVwbG9hZHMgYSBzaG9ydCBmaWxl LiBJdCBzZW5kcyBEYXRhIHBhY2tldAotIzMgYW5kIHJlY2VpdmVzIHRoZSBBY2sgZm9sbG93ZWQg aW1tZWRpYXRlbHkgYnkgdGhlIGZpcnN0IDMgYnl0ZXMgb2YgYSBOYWsKLWZvciBwYWNrZXQgNC4g IFdoZW4gaXQgZ2V0cyB0byB0aGUgU09IIG9mIHRoZSBzZWNvbmQgcGFja2V0LCBpdCBwdXNoZXMg aXQKLWJhY2sgaW4gdGhlIHF1ZXVlLiAgQWdhaW4sIGlucHV0KCkgZmx1c2hlcyB0aGUgaW5wdXQg YnVmZmVyIChteXJlYWQgcXVldWUKLWFuZCBkZXZpY2UgYnVmZmVyKS4gIEMtS2VybWl0IGRldGVj dHMgRU9GIG9uIHRoZSBmaWxlIGl0IGlzIHNlbmRpbmcsIGFuZAotc2VuZHMgdGhlIFogcGFja2V0 LiAgVGhlbiBpdCByZWFkcyB0aGUgcmVtYWluaW5nIGJ5dGVzIG9mIHRoZSBOYWssCi13aGljaCBp dCBkaXNjYXJkcywgYW5kIHRoZW4gaXQgZmluZHMgdGhlIEFjayBmb3IgWiB3aGljaCBjb21lcyBp biAyMyBzZWNvbmRzCi1sYXRlciwgc2VuZHMgdGhlIEIsIGdldHMgYSBOYWsgZm9yIHRoZSBCLCBz ZW5kcyB0aGUgQiBhZ2FpbiwgZ2V0cyB0aGUgQWNrCi1mb3IgdGhlIEIgNCBzZWNvbmRzIGxhdGVy LCBhbmQgZG9uZS4gIEFnYWluLCBpdCdzIHdvcmtpbmcgcmlnaHQgYW5kIGxvc2luZwotbm8gdGlt ZS4KLQotVGhlIHF1ZXN0aW9uIHJlbWFpbnM6IHdoYXQgd291bGQgaGFwcGVuIGlmIHRoZSBwcm90 b2NvbCBlbmdpbmUgZGlkIG5vdCBjbGVhcgotdGhlIGJ1ZmZlcj8gIFdvdWxkIHR0aW5sKCkgcmV0 cmlldmUgYWxsIHBhY2tldHMgaW4gc2VxdWVuY2UgZXZlbiB3aGVuIHRoZXkKLWNvbWUgYmFjayB0 byBiYWNrPyAgVG8gdGVzdCB0aGlzLCBJIGhhZCBDLUtlcm1pdCBzZW5kIGEgZmlsZSB1c2luZyAz MCB3aW5kb3cKLXNsb3RzIGFuZCBvYnNlcnZlZCB0aGUgc3RyZWFtIG9mIEFja3MgaW4gdGhlIHJl dmVyc2UgZGlyZWN0aW9uOgotCi0gIEhFWERVTVA6IG15Z2V0YnVmIHJlYWQgKDE2IGJ5dGVzKQot ICAwMSAyNSAyMyA1OSAyZiA1MiAzOSAwZCB8IDAxIDI1IDI0IDU5IDJiIDI2IDMxIDBkICAuJSNZ L1I5LiAuJSRZKyYxLgotICB0dGlubCBsb29rYWhlYWQgbXlfY291bnQ9OQotICB0dGlubCBsb29r YWhlYWQgcmVtb3ZlZD1eTQotICB0dGlubCBsb29rYWhlYWQgcHVzaGJhY2sgU09QPV5BCi0gIEhF WERVTVA6IHR0aW5sIGdvdCAoNyBieXRlcykKLSAgMDEgMjUgMjMgNTkgMmYgNTIgMzkgICAgfCAg ICAgICAgICAgICAgICAgICAgICAgICAgLiUjWS9SOQotICBSRUNFSVZFIEJVRkZFUlM6Ci0gIGJ1 ZmZlciBpbnVzZSBhZGRyZXNzIGxlbmd0aCBkYXRhIHR5cGUgc2VxIGZsYWcgcmV0cmllcwotICAg ICAwICAgICAxICAgICAyOTIxMiA5NjY3ICAgICAwICAgWSAgICAzICAgICAwCi0gIFsBJSNZXQot ICAuLi4KLSAgaW5fY2hrIG15X2NvdW50PTgKLSAgLi4uCi0gIHR0aW5sIGxvb2thaGVhZCBteV9j b3VudD0xCi0gIHR0aW5sIGxvb2thaGVhZCByZW1vdmVkPV5NCi0gIEhFWERVTVA6IHR0aW5sIGdv dCAoNyBieXRlcykKLSAgMDEgMjUgMjQgNTkgMmIgMjYgMzEgICAgfCAgICAgICAgICAgICAgICAg ICAgICAgICAgLiUkWSsmMQotICBSRUNFSVZFIEJVRkZFUlM6Ci0gIGJ1ZmZlciBpbnVzZSBhZGRy ZXNzIGxlbmd0aCBkYXRhIHR5cGUgc2VxIGZsYWcgcmV0cmllcwotICAgICAwICAgICAxICAgICAy OTIxMiA5NjY3ICAgICAwICAgWSAgICA0ICAgICAwCi0gIFsBJSRZXQotCi1IZXJlIHdlIGNhbiBz ZWUgdGhhdCB0aGUgcHVzaGVkLWJhY2sgU09IIHdhcyBwcm9wZXJseSByZXRyaWV2ZWQgbmV4dCB0 aW1lCi1hcm91bmQsIGFuZCB0aGUgdGFpbGdhdGluZyBBY2sgd2FzIG5vdCBsb3N0LiAgVGhpcyBz Y2VuYXJpbyByZXBlYXRzIGl0c2VsZgotMjEyIHRpbWVzIGluIHRoZSBsb2csIGFuZCB0aGVyZSBh cmUgbm8gc2NyZXd1cHMuCi0KLUJhY2sgdG8gVk1TIEZUUC4uLiAgVGhlIHByb2JsZW0gd2l0aCBz ZW5kaW5nIGJpbmFyeSBmaWxlcyBpcyB0aGF0IHp4aW4oKQotdXNlcyBDLUxpYnJhcnkgZm9wZW4o KS9mcmVhZCgpIGluc3RlYWQgb2YgUk1TLCBzbyBpdCBjYW4ndCBhY2Nlc3MgdGhlIGlucHV0Ci1m aWxlLCB3aGljaCB3YXMgb3BlbmVkIGJ5IHpvcGVuaSgpLCB3aGljaCBpcyB0b3RhbGx5IFJNUy1p ZmllZCBpbiBWTVMKLUMtS2VybWl0LiAgRm9yIFZNUyBvbmx5LCBJIHJlcGxhY2VkIHRoZSB6eGlu KCkgbG9vcCBieSBhIHptaW5jaGFyKCkgbG9vcAotbGlrZSB0aGUgb25lIHVzZWQgaW4gdGV4dCBt b2RlLCBleGNlcHQgd2l0aG91dCB0aGUgY2hhcmFjdGVyIHNldCBvcgotcmVjb3JkLWZvcm1hdCBj b252ZXJzaW9uLiAgVGVzdGVkIGJ5IFBVVCAvQklOQVJZIG9mIHNvbWUgYmluYXJ5IGZpbGVzLCB3 aGljaAotd29ya2VkIGZpbmUuICBja2NmdHAuYywgMiBNYXIgMjAwNy4KLQotTmV4dCBwcm9ibGVt Li4uICBWTVMgQy1LZXJtaXQgZnRwIGNsaWVudCBzZW5kaW5nIGJpbmFyeSBmaWxlcyBpbiB0ZXh0 IG1vZGUuCi1WYXJpYXRpb24gMTogV2UganVzdCBzZW5kIHRoZSBmaWxlLiAgem9wZW5pKCkgaXMg c3VwcG9zZWQgdG8gZGV0ZWN0IHRoYXQKLWl0J3MgYSBiaW5hcnkgZmlsZSBhbmQgYXV0b21hdGlj YWxseSBzZXQgdGhlIG1vZGUuICBBbmQgaXQgZG9lczoKLQotICB6b3BlbmkgZml4ZWQgZmlsZSBm b3JtYXQgLSB1c2luZyBibGsgSS9PCi0gIHpvcGVuaSBiaW5hcnkgZmxhZyBhdCBvcGVuPTAKLSAg em9wZW5pIGlmaWxlX2Jtb2RlPTEKLSAgem9wZW5pIGJpbmFyeT0wCi0gIHpvcGVuaSBhdXRvc3dp dGNoIGZyb20gVEVYVCB0byBCSU5BUlkKLSAgem9wZW5pIFJNUyBvcGVyYXRpb25zIGNvbXBsZXRl ZCBvawotCi1idXQgdGhlbiBpbiBnbmZpbGUoKToKLQotICBpZiAoIXNlcnZlciB8fCAoc2VydmVy ICYmICgod2hhdHJ1ICYgV01JX0ZMQUcpID09IDApKSkKLSAgICBiaW5hcnkgPSBnbmZfYmluYXJ5 OwkvKiBSZXN0b3JlIHByZXZhaWxpbmcgdHJhbnNmZXIgbW9kZSAqLwotCi1XZWxsLCBzaW5jZSBW TVMgc2V0cyB0ZXh0L2JpbmFyeSBtb2RlIGF1dG9tYXRpY2FsbHkgd2hlbiBzZW5kaW5nIGZpbGVz LAotdGhpcyBjb2RlIGNhbiAoYW5kIHNob3VsZCkgYmUgc2tpcHBlZCBpbiBWTVMuICBnbmZpbGUo KTogY2tjZm5zLmMsIDIgTWFyIDIwMDcuCi0KLVZhcmlhdGlvbiAyOiBCSU5BUlkgb3IgU0VUIEZJ TEUgVFlQRSBCSU5BUlkgZG9lc24ndCBmb3JjZSBiaW5hcnkgbW9kZS4gIEJ1dAotU0VUIEZUUCBU WVBFIEJJTkFSWSBkb2VzLiAgQnV0IEJJTkFSWSBkb2VzIGluZGVlZCBjYWxsIGRvZnRwdHlwKCkg c28gd2hhdCdzCi10aGUgcHJvYmxlbT8gIFdlIGRvIGluZGVlZCBzZXQgZnRwX3R5cCB0byAxIGJ1 dCBpdCBnZXRzIHJlc2V0IHNvbWV3aGVyZQotYmVmb3JlIHdlIGNhbGwgem9wZW5pKCkuICBCdXQg dGhlbiB6b3BlbmkoKSBwdXRzIGl0IGJhY2sgdG8gMS4gIFRyYWNpbmcKLXRocm91Z2ggYSB0cmFu c2ZlciwgaXQgbG9va3MgbGlrZSBhbGwgb2YgdGhpcyB3b3JrcyByaWdodCwgaXQncyBvbmx5IHRo YXQKLXRoZSBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgc2F5cyBURVhUIHdoZW4gdGhlIHRyYW5zZmVy IGlzIHJlYWxseSBpbiBiaW5hcnkKLW1vZGUuICBUaGlzIGlzIGJlY2F1c2Ugc2NyZWVuKCkgaXMg Y2FsbGVkIGJlZm9yZSBvcGVuaSgpLiAgSSB3b25kZXIgaWYgd2UKLWNhbiBjYWxsIHNjcmZ0KCkg ZnJvbSB0aGUgZnRwIG1vZHVsZS4uLiAgTm8sIHRoYXQgd291bGQgYmUgdG9vIGVhc3kuICBPSywK LXNlbmRyZXF1ZXN0IGNhbGxzIG9wZW5pKCkgYW5kIHNldHMgdGhlIGZpbGUgbW9kZTsgcHV0Zmls ZSgpIGNhbGxzCi1zY3JlZW4oU0NSX0ZOKSwgd2hpY2ggcHJpbnRzIHRoZSB0cmFuc2ZlciBtb2Rl LiAgQnV0IHB1dGZpbGUgY2FsbHMKLXNlbmRyZXF1ZXN0KCkgYWZ0ZXIgaXQgcHV0cyB1cCB0aGUg c2NyZWVuIHRoYXQgc2F5cyB0aGUgZmlsZSB0eXBlLiAgU28gaXQKLWxvb2tzIGxpa2Ugc2VuZHJl cXVlc3QoKSBoYXMgdG8gY2FsbCBzY3JlZW4oU0NSX0ZOKSBhZ2FpbiBpZiBpdCBjaGFuZ2VzIHRo ZQotZmlsZSB0eXBlLiAgT0ssIHRoYXQgZGlkIGl0LiAgY2t1dXN4LmMsIGNrY2Z0cC5jLCAyIE1h ciAyMDA3LgotCi1UaGUgQklOQVJZIGFuZCBURVhUIChBU0NJSSkgY29tbWFuZHMgZG8gbm90IGlu aGliaXQgYXV0b21hdGljIHR5cGUgc3dpdGNoaW5nCi1pbiBWTVMuICBUaGV5IGRvbid0IGluIFVu aXggZWl0aGVyLiAgVGhleSBuZXZlciBoYXZlLiAgU2hvdWxkIHRoZXk/ICBJIHRoaW5rCi1zbywg b3RoZXJ3aXNlIHdoYXQgZ29vZCBhcmUgdGhleT8gIFBsdXMgd2Ugd2FudCB0aGUgS2VybWl0IEZU UCBjbGllbnQgdG8KLWJlaGF2ZSBsaWtlIHRoZSBvdGhlcnMuICBJIGFkZGVkIGNvZGUgZm9yIHRo aXMgYnV0IGl0IGRvZXNuJ3Qgd29yaywgZHVlIHRvCi10aGUgbGF5ZXJzIGFuZCBsYXllcnMgb2Yg dGV4dC9iaW5hcnkgZGV0ZWN0aW9uIGFuZCBzd2l0Y2hpbmcgYW5kCi1pZi10aGlzLWJ1dC10aGVu LWlmLXRoYXQuLi4gIEFueXdheSwgbm8gaGFybSBkb25lLiAgVGhlIG5vcm1hbCBydWxlIGlzOgot d2hlbiB5b3UgUFVUIGEgZmlsZSwgS2VybWl0IGZpZ3VyZXMgb3V0IG9uIGEgcGVyLWZpbGUgYmFz aXMgd2hldGhlciB0byB1c2UKLXRleHQgb3IgYmluYXJ5IG1vZGUgdW5sZXNzIHlvdSBpbmNsdWRl IGEgL1RFWFQgKC9BU0NJSSkgb3IgL0JJTkFSWSBzd2l0Y2gKLWluIHRoZSBQVVQgKG9yIE1QVVQp IGNvbW1hbmQuICBja3V1c1tyM10uYywgY2tjZnRwLmMsIDIgTWFyIDIwMDcuCi0KLVdlZCBNYXIg NyAxNjoyMToxMyAyMDA3IFdST1RFIFNIT1JUIFRFU1QgUFJPR1JBTSBmb3IgdHRydW5jbWQgKHRo ZSBvcGVucHR5Ci12ZXJzaW9uKSBvbiBNYWMgT1MgWC4gIE9uIGR1bGNlOiB+L2tlcm1pdC90dHB0 eS5jIC8gdHRwdHkuc2guICBJdCBzdGFydHMgdGhlCi1leHRlcm5hbCBwcm90b2NvbCBpbiB0aGUg bG93ZXIgZm9yay4gIFRoZSBjb21tYW5kIHRvIHJ1biBpcyBhIGNvbW1hbmQtbGluZQotYXJndW1l bnQuICBTZW5kaW5nIGFuZCByZWNlaXZpbmcgZmlsZXMgd2l0aCBLZXJtaXQgd29ya3MgT0suICBC dXQgYWdhaW4sIHRoZQotc3RhbmRhbG9uZSBwcm9ncmFtIHRvdGFsbHkgZmFpbHMgd2hlbiBJIHVz ZSBzeiBvciBsc3ogYXMgdGhlIGV4dGVybmFsCi1wcm90b2NvbC4gIFNvIGl0IGxvb2tzIGxpa2Ug d2UgY2FuIHJ1bGUgb3V0IGFueSBlbnZpcm9ubWVudGFsIGVmZmVjdHMgb2YKLXJ1bm5pbmcgdGhl IGNvZGUgaW5zaWRlIEMtS2VybWl0LgotCi1Nb24gTWFyIDEyIDE2OjUyOjIwIDIwMDc6IFB1dCBz b21lIGVmZm9ydCBpbnRvIG1ha2luZyB0dHB0eS5jIG1vcmUgdXNlZnVsOwotYWRkZWQgYSBkZWJ1 ZyBsb2cuICBGb3VuZCB0aGF0IGZvciBzb21lIHJlYXNvbiwgYXQgbGVhc3Qgb24gTWFjIE9TIFgs Ci1zZWxlY3QoKSBhbHdheXMgdGltZWQgb3V0IGF0IHRoZSB0aGUgZW5kLiAgSSBhZGRlZCBhIFNJ R0NITEQgYWxhcm0gYW5kIHRoYXQKLXNlZW1zIHRvIGhhbmRsZSB0aGUgZm9yayBleGl0IGNvbmRp dGlvbiB2ZXJ5IG5pY2VseS4gIE5vdyB3ZSBjYW4gc2VuZCAoc2F5KQotYSAzTUIgZmlsZSBhdCBn b29kIHNwZWVkIG9uIEV0aGVybmV0ICgxTWNwcykgY29uc2lkZXJpbmcgdGhlIGRlYnVnZ2luZywg ZXRjLAotYW5kIGl0IHRlcm1pbmF0ZXMgaW5zdGFudGx5LiAgQnV0IHdoZW4gc2VuZGluZyBhIGZp bGUgaW50byB0dHB0eWNtZCAod2l0aAotImdrZXJtaXQgLXIiKSwgdGhpbmdzIGdvIHdyb25nIGF0 IHRoZSBlbmQgLS0gdGhlIFogcGFja2V0IGlzIG5ldmVyCi1hY2tub3dsZWRnZWQuICBUaGlzIGlz IHJlcHJvZHVjaWJsZS4gIE1heWJlIHRoaXMgaXMgYSBnb29kIGxlYWQuLi4uICBUaGUgbG9nCi1z aG93cyB0aGF0IHNlbGVjdCgpIHRpbWVkIG91dCwgZXZlbiB0aG91Z2ggdGhlIGdrZXJtaXQgZm9y ayBoYWQgbm90IHlldAotZXhpdGVkIChvciBmaW5pc2hlZCkuICBJdCBsb29rcyBsaWtlIGdrZXJt aXQgc2VudCB0aGUgQWNrLCB0dHB0eS5jIHJlYWQgaXQKLWZyb20gdGhlIHB0eSBhbmQgc2VudCBp dCBvdXQgdGhlIG5ldDoKLQotICAwMDAzOiByZWFkIHB0eT04ICAgICAgICAgICAgICAgIDwtLSBy ZWFkIEFjayBmcm9tIHB0eQotICAwMDAzOiBsb29wIHRvcCBoYXZlX3B0eT0xCi0gIDAwMDM6IGxv b3AgdG9wIGhhdmVfbmV0PTEKLSAgMDAwMzogRkRfU0VUIHB0eV9pbgotICAwMDAzOiBGRF9TRVQg dHR5ZmQgaW4KLSAgMDAwMzogRkRfU0VUIHR0eWZkIG91dD04Ci0gIDAwMDM6IG5mZHM9NQotICAw MDAzOiBzZWxlY3Q9MQotICAwMDAzOiBGRF9JU1NFVCB0dHlmZCBvdXQKLSAgMDAwMzogd3JpdGUg bmV0PTggICAgICAgICAgICAgICA8LS0gc2VuZCBhY2sgdG8gbmV0Ci0gIDAwMDM6IGxvb3AgdG9w IGhhdmVfcHR5PTEKLSAgMDAwMzogbG9vcCB0b3AgaGF2ZV9uZXQ9MQotICAwMDAzOiBGRF9TRVQg cHR5X2luCi0gIDAwMDM6IEZEX1NFVCB0dHlmZCBpbgotICAwMDAzOiBuZmRzPTUKLSAgMDAwOTog c2VsZWN0PTAKLSAgMDAwOTogc2VsZWN0IHRpbWVvdXQgLSBoYXZlX3B0eT0xCi0KLUJ1dCBBY2sg bmV2ZXIgYXJyaXZlZC4gIFRoaXMgaXMgYSBzdHJlYW1pbmcgdHJhbnNmZXIuICBCdXQgbm9wZSwg c3RyZWFtaW5nCi1pcyBub3QgdGhlIHByb2JsZW0uICBJZiBJIGRpc2FibGUgc3RyZWFtaW5nICgi Z2tlcm1pdCAtU3IiKSwgd2UgaGFuZyBpbiBpbgotdGhlIG1pZGRsZSBvZiBzZW5kaW5nIHRoZSBk YXRhLiAgSWYgSSB1c2Ugc21hbGwgcGFja2V0cywgd2UgZG9uJ3QgaGFuZzoKLTEwMDAgaXMgT0ss IDIwMDAgaXMgbm90LiAgSW4gZmFjdCwgdGhlIGN1dG9mZiBpcyAxMDI0LiAgT0ssIFRCQy4uLgot Ci1XZWQgMTQgTWFyIDIwMDc6IFJlY2VpdmluZyBhIGZpbGUgdGhydSB0dHB0eSAiZ2tlcm1pdCAt ZSAxMjAwIC1TcmQiCi1wcm9kdWNlcyBhIGRlYnVnIGxvZyB0aGF0IHNob3dzIHRoYXQgZ2tlcm1p dCBnZXRzIGEgbG90IG9mIEVBR0FJTiBlcnJvcnMKLXdoZW4gaXQgdHJpZXMgdG8gcmVhZCBmcm9t IGl0cyBzdGRpbi4gIEluIGZhY3QsIGl0IHRha2VzIDYgdHJpZXMgKHJlYWQoKQotY2FsbHMpIHRv IHJlYWQgdGhlIFMgcGFja2V0ICgyNyBieXRlcykuICBUaGVuIHdoZW4gdGhlIGZpcnN0IGRhdGEg cGFja2V0Ci1hcnJpdmVzICgxMjAwIGJ5dGVzKSwgcmVhZCgpIG5ldmVyIHJldHVybnMgZXZlbiBv bmUgc2luZ2xlIGJ5dGUuICBUaGUKLXRpbWVvdXQgaW50ZXJ2YWwgaXMgMTUgc2Vjb25kcyBhbmQg aXQgdGltZXMgb3V0IHJlcGVhdGVkbHkuICBBZGRlZCBhCi1wcmltaXRpdmUgaGV4IGR1bXAgdG8g dGhlIHR0cHR5IGRlYnVnIGxvZyBmb3IgZWFjaCByZWFkL3dyaXRlIChzaG93aW5nIG9ubHkKLXRo ZSBmaXJzdCAyNCBjaGFyYWN0ZXJzIGFuZCB0aGUgbGFzdCBjaGFyYWN0ZXIsIHNvIGl0IGZpdHMg b24gb25lIGxpbmUpLgotVHJpZWQgdXBsb2FkaW5nIGEgZmlsZS4gIFRoZSBTLCBGLCBhbmQgQSBw YWNrZXRzIChzaG9ydCkgYXJlIHJlY2VpdmVkIGFuZAotQWNrJ2QgT0ssIGJ1dCB0aGVuIHR0cHR5 IHNlbGVjdCgpIHRpbWVzIG91dCwgbmV2ZXIgcmVjZWl2aW5nIGV2ZW4gb25lIGJ5dGUKLWZyb20g dGhlIEQgcGFja2V0LiAgQ2xlYXJseSwgd2hlbiB0aGUgcHR5IGRyaXZlciByZWNlaXZlcyBhIGJ1 cnN0IG9mID4gMUsKLWJ5dGVzLCBzdG9wcyB3b3JraW5nLiAgQXMgYmVmb3JlLCBpZiBJIGxpbWl0 IHRoZSBwYWNrZXRzIHRvIDwgMUssIGl0IHdvcmtzCi1maW5lLgotCi1DYW4gSSBzZW5kIGFuIDgt Yml0IGJpbmFyeSBmaWxlPyAgTm9wZS4gIHR0cHR5IHJlYWRzIHRoZSBiaW5hcnkgZGF0YSBqdXN0 Ci1maW5lIGZyb20gdGhlIG5ldCBhbmQgd3JpdGVzIGl0IGV4YWN0bHkgYXMgaXQgd2FzIHJlY2Vp dmVkIHRvIHRoZSBwdHksIGJ1dAotdGhlIGZpcnN0IHRpbWUgd2Ugd3JpdGUgYW4gOC1iaXQgYnl0 ZSwgd2UgbmV2ZXIgaGVhciBiYWNrIGZyb20gdGhlIFBUWQotYWdhaW4uICBCdXQgdGhlIGxvZyBz aG93cyB0aGF0IHdoZW4gdGhlIGluaXRpYWwgNy1iaXQgcGFja2V0cyBmcm9tIHRoZSBwdHksCi1p dCBsb29rcyBsaWtlIHRoZSBQVFkgaXMgbm90IGluIHJhd21vZGUsIGJlY2F1c2UgdGhlc2UgcGFj a2V0cyBlbmQgd2l0aCBeSgotcmF0aGVyIHRoYW4gXk0uICBDYWxsaW5nIHB0eV9tYWtlX3Jhdygp IG9uIHRoZSBtYXN0ZXJmZCBhbmQgc2xhdmVmZAotZXhwbGljaXRseSwgaG93ZXZlciwgZG9lc24n dCBjaGFuZ2UgYW55dGhpbmcuICBJdCBkb2Vzbid0IG1hdHRlciBpZiBJIGRvCi10aGlzIGluIHRo ZSBsb3dlciBmb3JrIG9yIHRoZSB1cHBlciBmb3JrLiAgU28gbWF5YmUgaXQncyB0aGUgYWN0dWFs Ci1zZW1hbnRpY3Mgb2YgcHR5X21ha2VfcmF3KCkgdGhhdCBhcmUgd3JvbmcuCi0KLVRodSAxNSBN YXIgMjAwNzogV2VudCB0aHJ1IGFsbCB0aGUgdGVybWluYWwgbW9kZSBmbGFncyBpbiBNYWMgT1Mg WDsgZGlkbid0Ci1oZWxwLiAgQ2hhbmdlZCBoZXggZHVtcCB0byBzaG93IHdob2xlIHBhY2tldC4g IFB1dCBoZXggZHVtcCByb3V0aW5lIGluIGEKLXByaXZhdGUgY29weSBvZiBHLUtlcm1pdC4gIFRy aWVkIHRvIHRyYW5zZmVyIGFuIDgtYml0IGZpbGUsIGxvZ2dpbmcgYm90aAotdHRwdHkgYW5kIGdr ZXJtaXQuICBDb21wYXJlZCB3aGF0IHR0cHR5IHJlY2VpdmVkIG9uIHN0ZGluIHdpdGggd2hhdCBp dCBzZW50Ci10byB0aGUgcHR5IChzYW1lKSBhbmQgd2hhdCB3YXMgcmVjZWl2ZWQgYnkgRy1LZXJt aXQgKHNhbWUpLiAgVGhlbiBJIHJlYWxpemVkCi10aGF0IG15IGxpdHRsZSB0ZXN0IHByb2dyYW0g d2FzIG5vdCBwdXR0aW5nIGl0cyBjb250cm9sbGluZyB0ZXJtaW5hbCBpbnRvCi1yYXcgbW9kZTsg d2hlbiBJIGRpZCB0aGF0LCBJIGNvdWxkIHVwbG9hZCBiaW5hcnkgZmlsZXMgKHN0cmVhbWluZywg Mk1CL3NlYykuCi1BbmQgd2l0aCBabW9kZW0gdG9vICh3aXRoIHJ6OyBscnogZG9lc24ndCB3b3Jr IGZvciBzb21lIHJlYXNvbikuICBMb29raW5nCi1iYWNrIGF0IHRoZSBvcmlnaW5hbCBpbiBja3V0 aW8uYywgSSBzZWUgdGhhdCB0dHB0eWNtZCgpIG5ldmVyIGNhbGxlZAotdHRwa3QoKS4gIE1heWJl IHRoYXQgd2FzIHRoZSB0cm91YmxlIGFsbCBhbG9uZy4gIChZdXAsIGJ1dCBtYXliZSBub3QgdGhl Ci13aG9sZSB0cm91YmxlLikKLQotTW92aW5nIGJhY2sgdG8gQy1LZXJtaXQgYW5kIHRoZSBvcmln aW5hbCB0dHB0eWNtZCgpIHJvdXRpbmUsIGFkZGluZyB0aGUgY2FsbAotdG8gdHRwa3QoKSwgYW5k IHN0cmlwcGluZyBvdXQgYSBsb3Qgb2YgY3J1ZnQsIGFuZCBtb3ZpbmcgdGhlIHB0eV9tYWtlX3Jh dygpCi1jb2RlIHRvIGNrdXB0eS5jLCBLZXJtaXQgdXBsb2FkcyBhbmQgZG93bmxvYWRzIChzdHJl YW1pbmcpIHdvcmsgZmluZSBpbgotU29sYXJpcy4gIFptb2RlbSBzZW5kcyBhIGZpbGUsIGJ1dCB0 aGVuIHRoZSB0cmFuc2ZlciBoYW5ncyBhdCB0aGUgdmVyeSBlbmQsCi1hcyBpZiB0aGUgc2lnbm9m ZiBwcm90b2NvbCB3ZXJlIGxvc3QuICBUaGlzIGhhcHBlbnMgb24gU29sYXJpcy4gIElmIEkgbW92 ZQotYmFjayB0byBNYWMgT1MgWCwgZXZlcnl0aGluZyB3b3JrcyBqdXN0IGZpbmUuICBUaGVuLCBt YWtpbmcgYSBLZXJiZXJpemVkCi1jb25uZWN0aW9uIGZyb20gdGhlIE1hYyB0byBOZXRCU0QsIEkg Y2FuIHNlbmQgZmlsZXMgZnJvbSB0aGUgTWFjIHdpdGggYm90aAotWm1vZGVtIGFuZCBLZXJtaXQu ICBSZWNlaXZpbmcuLi4gIEtlcm1pdCBPSy4gIFptb2RlbS4uLiAgTm9wZS4gICJyejoKLVBlcnNp c3RlbnQgQ1JDIG9yIG90aGVyIEVSUk9SIiAoYW5kIGNyZWF0ZWQgYSAyNjVNQiBkZWJ1Zy5sb2ch KQotCi1GcmkgMTYgTWFyIDIwMDc6IHR0cHR5Y21kKCkgd2FzIGZvciBzZW5kaW5nIGZpbGVzIHdp dGggWm1vZGVtIGFjcm9zcwotZW5jcnlwdGVkIGNvbm5lY3Rpb25zLiAgQnV0IGl0IG9jY3VycmVk IHRvIG1lIHRoYXQgaXQncyBuZWNlc3NhcnkgZm9yCi1jbGVhci10ZXh0IGNvbm5lY3Rpb25zIHRv bzsgZS5nLiBUZWxuZXQsIHdoZXJlIDB4ZmYgaGFzIHRvIGJlIGRvdWJsZWQuICBPZgotY291cnNl IFptb2RlbSBkb2Vzbid0IGRvIHRoYXQgaXRzZWxmLCBzbyB0aGVyZSdzIG5vIHdheSBabW9kZW0g ZXh0ZXJuYWwKLXByb3RvY29sIGNvdWxkIHdvcmsgd2hlbiBleGVjdXRlZCBvdmVyIGEgVGVsbmV0 IGNvbm5lY3Rpb24sIGFuZCBpbiBmYWN0Ci1pdCBkb2Vzbid0LiAgSSB3b25kZXIgd2h5IEkgZXZl ciB0aG91Z2h0IGl0IGRpZC4KLQotV2VkIDIxIE1hciAyMDA3OiBCYWNrIHRvIHdoZXJlIHdlIGxl ZnQgb2ZmIGEgd2VlayBhZ28uICBUcnlpbmcgQy1LZXJtaXQncwotdHRwdHljbWQoKSBvbiB0aGUg TWFjIGFnYWluLCBpbiByZW1vdGUgbW9kZToKLQotIC4gRy1LZXJtaXQgc2VuZCB0eHQgKGtzdCk6 IE9LICA4MzJLY3BzICAKLSAuIEctS2VybWl0IHJlY3YgdHh0IChrcik6ICBPSyAgNDI1S2NwcyAg Ci0gLiBHLUtlcm1pdCBzZW5kIGJpbiAoa3NiKTogT0sgMTAwMEtjcHMgIAotIC4gRy1LZXJtaXQg cmVjdiBiaW4gKGtyKTogIE9LICAxODhLY3BzICAKLQotQW5kIFptb2RlbToKLQotIC4gc3ogdHh0 ICh6c3QpOiBPSyAgNTYzS2NwcyAgCi0gLiBzeiBiaW4gKHpzYik6IE9LICA3MTRLY3BzICAKLSAu IHJ6IHR4dCAoenIpOiAgT0sgIDg2M0tjcHMgIAotIC4gcnogYmluICh6cik6ICBPSyAgMTk4S2Nw cyAgCi0KLVNvIGluIHJlbW90ZSBtb2RlLCBldmVyeXRoaW5nIHdvcmtzLiAgTm93IGxldCdzIHRy eSBhIGNsZWFyLXRleHQgVGVsbmV0Ci1jb25uZWN0aW9uLi4uCi0KLSAuIEctS2VybWl0IHNlbmQg dHh0IChrc3QpOiBPSyAgODQxS2NwcwotIC4gRy1LZXJtaXQgcmVjdiB0eHQgKGtydCk6IE9LICAz OTFLY3BzCi0gLiBHLUtlcm1pdCBzZW5kIGJpbiAoa3NiKTogT0sgIDgxMUtjcHMKLSAuIEctS2Vy bWl0IHJlY3YgYmluIChrcmIpOiBPSyAgMTcxS2NwcwotCi1BbmQgWm1vZGVtIG92ZXIgdGhlIHNh bWUgY2xlYXItdGV4dCB0ZWxuZXQgY29ubmVjdGlvbjoKLQotIC4gc3ogdHh0ICh6c3QpOiBPSyAg OTFLY3BzICgqKQotCi1LZXJtaXQgaXMgc2VuZGluZyBzeiBtZXNzYWdlcyBsaWtlICJzeiAzLjcz IDEtMzAtMDMgZmluaXNoZWQuIiB0byB0aGUKLWhvc3QsIHdoaWNoIHRyaWVzIHRvIGV4ZWN1dGUg dGhlbSwgYWZ0ZXIgdGhlIHRyYW5zZmVyIGlzIGZpbmlzaGVkLgotT2YgY291cnNlICJzeiIgaXMg YSBjb21tYW5kLCBidXQ6Ci0KLSAgc3o6IGNhbm5vdCBvcGVuIDMuNzM6IE5vIHN1Y2ggZmlsZSBv ciBkaXJlY3RvcnkKLSAgc3o6IGNhbm5vdCBvcGVuIDEtMzAtMDM6IE5vIHN1Y2ggZmlsZSBvciBk aXJlY3RvcnkKLSAgc3o6IGNhbm5vdCBvcGVuIGZpbmlzaGVkLjogTm8gc3VjaCBmaWxlIG9yIGRp cmVjdG9yeQotCi1EaWQgSSBsb3NlIHRoYXQgY29kZSB0aGF0IGRpcy1yZWRpcmVjdHMgc3RkZXJy IHdoZW4gSSB3ZW50IGJhY2sgdG8gdXNpbmcgdGhlCi1wdHkgY29kZSBmcm9tIHRoZSBja3VwdHkg bW9kdWxlPyAgTm8sIGl0J3MgdGhlcmUgYW5kIGl0J3MgYmVpbmcgZXhlY3V0ZWQuCi1BcHBhcmVu dGx5IHRoZSBjb3B5IG9mIHN6IEkgaGF2ZSBpcyB3cml0aW5nIGl0cyAiZmluaXNoZWQiIG1lc3Nh Z2UgdG8gc3Rkb3V0Ci1iZWNhdXNlICJzeiBibGFoIDI+IC9kZXYvbnVsbCIgZG9lcyBub3Qgc3Vw cHJlc3MgaXQuICBTdGFydGluZyBhZ2FpbiB3aXRoCi1sc3ogaW5zdGVhZCBvZiBzejoKLQotIC4g c3ogdHh0IChsenN0KTogT0sgIDQxM0tjcHMKLSAuIHN6IGJpbiAobHpzYik6IE9LICBGQUlMRUQg KCopCi0gLiByeiB0eHQgKGx6cnQpOiBPSyAgCi0gLiByeiBiaW4gKGx6cmIpOiBPSwotCi0oKikg U2lnaC4gIFVzaW5nIGxzeiwgd2UgZ2V0ICJnYXJiYWdlIGNvdW50IGV4Y2VlZGVkIiBlcnJvcnMg YW5kIGV2ZW50dWFsCi1mYWlsdXJlLiAgQnV0IHVzaW5nIHJlZ3VsYXIgc3osIHdlIGdldCB0aGUg ZXh0cmFuZW91cyBtZXNzYWdlIHRoYXQgc3RhcnRzCi1zeiBvbiB0aGUgZmFyIHRlbmQsIGFuZCB0 aGUgcmVzdWx0aW5nIGdldHR5IGJhYmJsZS4KLQotQnV0IGV2ZW4gd2l0aG91dCBjaGFuZ2luZyB0 aGUgY29kZSwgaXQgd2lsbCB3b3JrIG9uZSBtaW51dGUsIGFuZCB0aGVuIGZhaWwKLWNvbnNpc3Rl bnRseSB0aGUgbmV4dC4gIEZvciBleGFtcGxlLCBJIHdhcyBhYmxlIHRvIHNlbmQgZmlsZXMgd2l0 aCBzegotc3VjY2Vzc2Z1bGx5IG92ZXIgYW5kIG92ZXIsIGJ1dCB3aXRoIHRoZSBnZXR0eSBiYWJi bGUgYXQgdGhlIGVuZC4gIFRoZW4sCi1hZnRlciB0cnlpbmcgbHN6IGFuZCB0aGVuIGdvaW5nIGJh Y2sgdG8gc3osIGV2ZXJ5IGF0dGVtcHQgYXQgc2VuZGluZyBhIGZpbGUKLXF1aXRzIHdpdGggIkdv dCBaQ0FOIi4gIFRoZSBkaWZmZXJlbmNlIGhhcyB0byBiZSB0aGF0IEtlcm1pdCBhbHdheXMgZG9l cyBhdAotbGVhc3Qgc29tZSBtaW5pbWFsIGVuY29kaW5nIG9mIEMwL0MxIGNvbnRyb2wgY2hhcmFj dGVycyBzdWNoIE5VTCBhbmQgREVMIGFuZAotSUFDLCBhbmQgSSBkb3VidCB0aGF0IFptb2RlbSBk b2VzLgotCi1odHRwOi8venNzaC5zb3VyY2Vmb3JnZS5uZXQvIHNheXM6Ci0KLSAgSWYgZmlsZSB0 cmFuc2ZlciBpcyBpbml0aWF0ZWQgYnV0IG5ldmVyIGNvbXBsZXRlcyAoaWUgYSBsaW5lIGxpa2Ug OgotCi0gICAgIEJ5dGVzIFNlbnQ6ICAgICAgMC8gICAgNTEzICAgQlBTOjAgICAgICAgIEVUQSAw MDowMCAgUmV0cnkgMDogR290IFpDQU4KLQotICAgY2FuIGJlIHNlZW4sIGJ1dCB0cmFuc2ZlciBu ZXZlciBjb21wbGV0ZXMpLCBjaGFuY2VzIGFyZSB0aGUgcHR5L3R0eSBvbiBvbmUKLSAgIG9mIHRo ZSBzeXN0ZW1zIGFyZSBub3QgOC1iaXQgY2xlYW4uICAoTGludXggaXMgOC1iaXQgY2xlYW4sIE5l dEJTRCBpcyBub3QpLgotICAgVXNpbmcgdGhlIC1lIChlc2NhcGUpIG9wdGlvbiBvZiByeiBzaG91 bGQgc29sdmUgdGhpcyBwcm9ibGVtLgotCi1JdCBkb2Vzbid0LCBhdCBsZWFzdCBub3Qgd2l0aCBs cnouICBBbmQgeWVzLCB0aGUgcmVjZWl2aW5nIGVuZCBoYXBwZW5zIHRvIGJlCi1OZXRCU0QuICBC dXQgaXQgbG9va3MgbGlrZSB0aGUgenNzaCBwZW9wbGUgaGF2ZSBiZWVuIGRvd24gdGhpcyByb2Fk IHRvby4KLQotQnV0IHdpdGggcnogYW5kIHN6LCBpdCB3b3JrZWQuICBPbmNlLiAgVHdpY2UuICBU aHJlZSB0aW1lcy4gIEJ1dCBvZiBjb3Vyc2UsCi13aXRoIHRoZSBnZXR0eSBiYWJibGUgYXQgdGhl IGVuZC4gIFRoaXMgY2FuIGJlIHRha2VuIGNhcmUgb2YgYnkgZG9pbmc6Ci0KLSAgcnogLWVxIDsg Y2F0ID4gZm9vCi0KLXdoaWNoIHB1dHMgInN6IDMuNzMgMS0zMC0wMyBmaW5pc2hlZCIgYW5kIGFu eSBvdGhlciBtZXNzYWdlcyBpbiBmb28gKGJ1dCB5b3UKLWhhdmUgdG8gdHlwZSBeRCB0byBmaW5p c2ggdGhlIGNhdCkuICBVc2luZyB0aGlzIG1ldGhvZCBJIHdhcyBhbHNvIGFibGUgdG8KLXNlbmQg YW4gOEsgYmluYXJ5IGZpbGUgdGhhdCBjb250YWluZWQgYSB0ZXN0IHBhdHRlcm4gb2YgYWxsIDI1 NiBwb3NzaWJsZSBieXRlCi12YWx1ZXMuICBUaGVuIEkgdHJpZWQgYSAzTUIgYmluYXJ5IGV4ZWN1 dGFibGUuICBBbGwgT0suICBTbyBoZXJlIHdlIGdvIGFnYWluOgotCi0gLiBzeiB0eHQgKHpzdCk6 IE9LCi0gLiBzeiBiaW4gKHpzYik6IE9LCi0gLiByeiB0eHQgKHpydCk6IAotIC4gcnogYmluICh6 cmIpOiAKLQotRG93bmxvYWRpbmcgZmFpbHMgYWJvdXQgaGFsZndheSB0aHJvdWdoIGEgZmFpcmx5 IGxhcmdlIGZpbGUuICBJIHRyaWVkIGFuCi1ldmVuIGJpZ2dlciBmaWxlLCBndWFyYW50ZWVkIHRv IGJlIDEwMCUgQVNDSUk7IHNhbWUgdGhpbmcgLS0gaGFsZndheQotdGhyb3VnaDogInJ6OiBQZXJz aXN0ZW50IENSQyBvciBvdGhlciBFUlJPUiIuICBCdXQgaXQgd29ya2VkIHdpdGggYSBzbWFsbGVy Ci12ZXJzaW9uIG9mIHRoZSBzYW1lIGZpbGUgKDgySyB2ZXJzdXMgMk1CKS4gIFRyaWVkIGFnYWlu IHdpdGggdGhlIGJpZ2dlcgotdmVyc2lvbiwgaXQgZmFpbGVkIGluIGV4YWN0bHkgdGhlIHNhbWUg d2F5IGF0IGV4YWN0bHkgdGhlIHNhbWUgc3BvdDogYnl0ZQotbnVtYmVyIDEwNDgzMjAuICBCdXQg dGhpcyBpcyBqdXN0IEFTQ0lJIHRleHQgc28gaXQgY2FuJ3QgYmUgYSB0cmFuc3BhcmVuY3kKLXBy b2JsZW0uICBTdWJzdGl0dXRpbmcgYW5vdGhlciBwbGFpbiBBU0NJSSBmaWxlIG9mIHRoZSBzYW1l IHNpemUgYnV0IHRvdGFsbHkKLWRpZmZlcmVudCBjb250ZW50cywgaXQgZG9lc24ndCBmYWlsICgy LjM2TUIpLiAgQmFjayB0byB0aGUgcHJldmlvdXMgZmlsZSwgaXQKLWZhaWxzIGFnYWluLCBidXQg aW4gYSBkaWZmZXJlbnQgc3BvdCAoODMyOTYwKS4gIFNvIGl0J3Mgbm90IHRvdGFsbHkKLWRldGVy bWluaXN0aWMuCi0KLVRvIHJvdW5kIHRoaW5ncyBvdXQsIEkgdHJpZWQgZG93bmxvYWRpbmcgdGhl IGJpbmFyeSB0ZXN0LXBhdHRlcm4gZmlsZTsgaXQncwotb25seSA4Sy4gIFRoaXMgZmFpbGVkLgot Ci0gIC00LCAtLXRyeS00ayAgICAgICAgICAgICAgICBnbyB1cCB0byA0SyBibG9ja3NpemUKLSAg LUIsIC0tYnVmc2l6ZSBOICAgICAgICAgICAgIGJ1ZmZlciBOIGJ5dGVzIChOPT1hdXRvOiBidWZm ZXIgd2hvbGUgZmlsZSkKLSAgLWUsIC0tZXNjYXBlICAgICAgICAgICAgICAgIGVzY2FwZSBhbGwg Y29udHJvbCBjaGFyYWN0ZXJzIChaKQotICAtRSwgLS1yZW5hbWUgICAgICAgICAgICAgICAgZm9y Y2UgcmVjZWl2ZXIgdG8gcmVuYW1lIGZpbGVzIGl0IGFscmVhZHkgaGFzCi0gIC1MLCAtLXBhY2tl dGxlbiBOICAgICAgICAgICBsaW1pdCBzdWJwYWNrZXQgbGVuZ3RoIHRvIE4gYnl0ZXMgKFopCi0g IC1sLCAtLWZyYW1lbGVuIE4gICAgICAgICAgICBsaW1pdCBmcmFtZSBsZW5ndGggdG8gTiBieXRl cyAobD49TCkgKFopCi0KLVRyaWVkIGFnYWluIHdpdGggInN6IC1MIDI1NiAtQiAyNTYgLTRhZXEi LiAgRG9lc24ndCBjaGFuZ2UgYW55dGhpbmcuCi0KLU5PVEU6IE1hYyBPUyBYIHJ6IDMuNzMgMS0z MC0wMyBkb2VzIG5vdCBzdXBwb3J0IC1lLgotTmV0QlNEIHJ6IDAuMTIuMjAgZG9lcyBzdXBwb3J0 IC1lLgotCi1UaHUgMjIgTWFyIDIwMDc6IEl0IG9jY3VycyB0byBtZSB0aGF0IHR0cGt0KCkgbWln aHQgc3RpbGwgYmUgYSBwcm9ibGVtOwotbWF5YmUgaXQncyB0aGUgbmV0d29yayBjb25uZWN0aW9u IGFuZCBub3QgdGhlIHB0eSB0aGF0IGlzIG5vdCB0cmFuc3BhcmVudAotZW5vdWdoLiAgVG8gdGVz dCB0aGlzIHRoZW9yeSBJIGRpZCAic3R0eSByYXcgOyBzdHR5IC1hIiBhbmQgdGhlbiBjb3BpZWQg YWxsCi1vZiB0aGUgZmxhZyB2YWx1ZXMgaW50byB0dHBrdCBpbiB0aGUgQlNENDRPUlBPU0lYIHNl Y3Rpb246Ci0KLSAuIHJ6IHR4dCAoenJ0KTogT0sgKDIuMzZNQiBmaWxlLCB3b3JrZWQgMiBvdXQg b2YgMyB0aW1lcykKLSAuIHJ6IGJpbiAoenJiKTogInJ6OiBQZXJzaXN0ZW50IENSQyBvciBvdGhl ciBFUlJPUiIKLQotQSBsaXR0bGUgbW9yZSBmaWRkbGluZyB3aXRoIHRoZSBmbGFncyBhbmQgSSBn b3QgdGhlIDhLIGJpbmFyeSB0ZXN0IHBhdHRlcm4KLXRvIFNFRU0gdG8gZG93bmxvYWQgT0sgKGlu IHRoZSBzZW5zZSB0aGF0IHJ6IGdhdmUgYSAwIHJldHVybiBjb2RlKSBidXQgdGhlCi1maWxlIGl0 c2VsZiB3YXMgdHJ1bmNhdGVkLCBhbHdheXMgYXQgMjI0LiAgSWYgSSBjaGFuZ2VkIHRoZSB0ZXN0 IHBhdHRlcm4KLWZpbGUgdG8gbm90IGluY2x1ZGUgYW55IGJ5dGVzIHdpdGggdmFsdWUgMjI0ICgw eGUwKSBvciAyNTUgKDB4ZmYpLCB0aGUKLWRvd25sb2FkIHdvcmtlZC4gIFNvIHdlIGhhdmUgYSB0 cmFuc3BhcmVuY3kgcHJvYmxlbSBzb21ld2hlcmUuICBUaGUgZGVidWcKLWxvZyBzaG93cyB0aGF0 IGFsbCBieXRlIHZhbHVlcyBhcmUgYmVpbmcgcmVjZWl2ZWQgZnJvbSB0aGUgbmV0d29yayBjb3Jy ZWN0bHkKLXNvIHRoZSBwcm9ibGVtIGhhcyB0byBvY2N1ciB3aGVuIHdlIHRyeSB0byBmZWVkIHRo ZW0gdG8gdGhlIHB0eS4KLQotQnV0IG5vIGFtb3VudCBvZiB0d2lkZGxpbmcgd2l0aCB0aGUgdGVy bWlvcyBmbGFncyBzZWVtcyB0byBsZXQgdGhlc2UKLWNoYXJhY3RlcnMgcGFzcyB0aHJvdWdoLiAg T2YgY291cnNlLCBzaW5jZSB0aGV5IGFyZSBub3QgaW4gdGhlIEMwIG9yIEMxCi1jb250cm9sIHJh bmdlLCAic3ogLWUiIGRvZXNuJ3QgcXVvdGUgdGhlbSAod2hpY2ggaXQgZG9lcyBieSBwcmVmaXhp bmcgd2l0aAotQ3RybC1YIGFuZCB0aGVuIGFkZGluZyAweDQwIHRvIHRoZSBieXRlIHZhbHVlIHNv IChlLmcuKSBOVUwgYmVjb21lcyBeWEAuCi1Ob3RlIHRoYXQgMjU1IGRvZXMgbm90IGNhdXNlIHBy b2JsZW1zIGJlY2F1c2UgaXQgY29pbmNpZGVzIHdpdGggdGhlIElBQwotY2hhcmFjdGVyOyB0aGUg cmVtb3RlIFRlbG5ldCBzZXJ2ZXIgZG91YmxlcyBvdXRib3VuZCBJQUNzLCBhbmQgS2VybWl0J3MK LXR0aW5jKCkgdW5kb3VibGVzIHRoZW0gYXV0b21hdGljYWxseSAoYXMgdGhlIGxvZyBzaG93cyku Ci0KLVRyeWluZyB0byBzZW5kIGEgZGlmZmVyZW50IGZpbGUgKGEgQy1LZXJtaXQgYmluYXJ5KSBz aG93cyB0aGF0IDI1NSBpcyB0aGUKLXJlYWwga2lsbGVyOyB0aGUgZmlsZSBpcyB0cnVuY2F0ZWQg d2hlcmUgdGhlIGZpcnN0IG9uZSBhcHBlYXJzIChhdCBhYm91dAotNkspLCBldmVuIHRob3VnaCBz b21lIDIyNCdzIHByZWNlZGUgaXQuICBHb2luZyBiYWNrIHRvIHRoZSByZW1vdGUtbW9kZSB0ZXN0 LAotSSBzZWUgdGhlIHNhbWUgdGhpbmcgaGFwcGVucyB3aXRoIHRoZSBiaW5hcnkgdGVzdC1wYXR0 ZXJuIGZpbGUsIGlmIEkgc2VuZCBpdAotZnJvbSBLOTUgZGlyZWN0IHRvIHJ6LXVuZGVyLUMtS2Vy bWl0LWluLXJlbW90ZS1tb2RlLiAgU28gaXQgaGFzIG5vdGhpbmcgdG8KLWRvIHdpdGggQy1LZXJt aXQgaGF2aW5nIGEgbmV0d29yayBjb25uZWN0aW9uLiAgWWV0IGlmIEkgc2VuZCB0aGUgc2FtZSBm aWxlCi1kaXJlY3QgZnJvbSBLOTUgdG8gcnosIGl0IGdvZXMgT0sgYW5kIHRoZSByZXN1bHQgaXMg bm90IHRydW5jYXRlZCwgc28gaXQncwotbm90IFptb2RlbSBlaXRoZXIuICBUaGUgZGF0YSBhcnJp dmVzIHRvIEMtS2VybWl0IGludGFjdCwgc28gdGhlIGZhaWx1cmUgaXMKLWRlZmluaXRlbHkgaW4g d3JpdGluZyBpdCB0byB0aGUgcnogcHJvY2VzcyB0aHJvdWdoIHRoZSBzbGF2ZSBhbmQgbWFzdGVy IHB0eXMuCi0KLUJVVCBpZiBJIHNlbmQgdGhlIHNhbWUgZmlsZSBmcm9tIEs5NSB0byByei11bmRl ci10dHB0eSwgdGhhdCB3b3Jrcy4gIFdoYXQncwotdGhlIGRpZmZlcmVuY2U/ICBTdXBwb3NlIEkg anVzdCB0cmFuc3BsYW50IHR0cHR5IGxpdGVyYWxseSBpbnRvIEMtS2VybWl0Li4uCi1JdCBtYWtl cyBubyBkaWZmZXJlbmNlLiAgV2hlbiByZWNlaXZpbmcgdGhlIHRlc3QtcGF0dGVybiwgaXQgdHJ1 bmNhdGVzIGl0Ci1pbiBleGFjdGx5IHRoZSBzYW1lIHBsYWNlLgotCi1XZWxsLCBhbGwgdGhpcyBp cyBvbiBNYWMgT1MgWC4gIFdoYXQgaWYgSSBtb3ZlIGl0IHRvIGEgZGlmZmVyZW50IHBsYXRmb3Jt PwotT0ssIGJ1aWxkaW5nIG9uIFNvbGFyaXMgYW5kIGZvbGxvd2luZyB0aGUgZXhhY3Qgc2FtZSBw cm9jZWR1cmUsIHR0cHR5Y21kKCkKLWRvZXNuJ3QgZXZlbiB1c2UgdGhlIG5ldHdvcmsgY29ubmVj dGlvbi4gIEkgdGhpbmsgdGhhdCdzIGJlY2F1c2UgcnpzeiBvbgotU29sYXJpcyBpcyBoYXJkd2ly ZWQgdG8gdXNlIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBhbmQgY2FuJ3QgYmUKLXJlZGlyZWN0 ZWQsIGV2ZW4gaW4gYSBwdHk/Ci0KLU1vdmVkIHRvIE5ldEJTRC4KLQotIC4gc3ogdHh0ICh6c3Qp OiBGYWlsZWQgKCJHb3QgWkNBTiIpCi0gLiBzeiBiaW4gKHpzYik6IAotIC4gcnogdHh0ICh6cnQp OiBPSwotIC4gcnogYmluICh6cmIpOiAKLQotV2VsbCwgdGhpcyBpcyBhIGJpZyBtZXNzLiAgU2Vu ZGluZyBkb2Vzbid0IHdvcmsgKG9yIHNvbWV0aW1lcyBpdCBkb2VzIGJ1dAotcmVwb3J0cyB0aGF0 IGl0IGRpZG4ndCkuICBSZWNlaXZpbmcuLi4gIHdlbGwsIGFjdHVhbGx5IGl0J3MgdGhlIHNhbWUg dGhpbmc7Ci10aGUgZmlsZSBpcyBjb21wbGV0ZWx5IHRyYW5zZmVycmVkIGJ1dCB0aGVuIHRoZSBm aW5hbCBwcm90b2NvbCBoYW5kc2hha2UgaXMKLWxvc3QuICBUaGUgbG9jYWwgQy1LZXJtaXQgcmV0 dXJucyB0byBpdHMgcHJvbXB0LCBidXQgcnogaXMgc3RpbGwgcnVubmluZzoKLQotICBSZXRyeSAw OiBHb3QgVElNRU9VVAotICBSZXRyeSAwOiBUSU1FT1VUCi0gIFJldHJ5IDA6IEdvdCBUSU1FT1VU Ci0gIFJldHJ5IDA6IFRJTUVPVVQKLSAgUmV0cnkgMDogR290IFRJTUVPVVQKLSAgUmV0cnkgMDog VElNRU9VVAotICBSZXRyeSAwOiBHb3QgVElNRU9VVAotICBSZXRyeSAwOiBUSU1FT1VUCi0gIFJl dHJ5IDA6IEdvdCBUSU1FT1VUCi0gIFJldHJ5IDA6IFRJTUVPVVQKLSAgUmV0cnkgMDogR290IFRJ TUVPVVQKLQotSSBkb24ndCBzZWUgaG93IHRoYXQgaXMgZXZlbiBwb3NzaWJsZS4gIEV2ZW4gYWZ0 ZXIgSSBleGl0IGZyb20gS2VybWl0IHRoZQotbWVzc2FnZXMga2VlcCBjb21pbmcsIGV2ZW4gdGhv dWdoIHBzIGRvZXNuJ3Qgc2hvdyB0aGUgcnogcHJvY2VzcyBhbnl3aGVyZS4KLUxvb2tpbmcgYXQg dGhlIGNvZGUsIEkgc2VlIGEgcGxhY2Ugd2hlcmUgZW5kX3B0eSgpIHdhcyBzdGlsbCBjb21tZW50 ZWQgb3V0Ci1mcm9tIHRoZSB0dHB0eS5jIGVwaXNvZGUsIEkgdW5jb21tZW50ZWQgaXQuICBCdXQg c3RpbGw6Ci0KLSAuIHN6IHR4dCAoenN0KTogRmFpbHMgKCJHb3QgWkNBTiIpCi0gLiBzeiBiaW4g KHpzYik6IEZhaWxzIGluc3RhbnRseSAoYnV0IHdpdGggbm8gZGlhZ25vc3RpYykKLSAuIHJ6IHR4 dCAoenJ0KTogT0sKLSAuIHJ6IGJpbiAoenJiKTogRmFpbHMgd2l0aCB0b25zIG9mICJCYWQgQ1JD IiwgIkdhcmJhZ2UgQ291bnQgZXhjZWVkZWQiCi0KLUNvbmNsdXNpb24gZm9yIHRoZSBkYXk6IEkg dGhpbmsgdGhpcyBpcyBob3BlbGVzcy4gIEV2ZW4gaWYgSSBjYW4gZ2V0IGl0IHRvCi13b3JrIHNv bWV3aGVyZSwgdGhlIHJlc3VsdHMgZGVwZW5kIG9uIHRoZSBleGFjdCBabW9kZW0gc29mdHdhcmUs IGhvdyBpdCB1c2VzCi1zdGRpbi9vdXQgdnMgc3RkZXJyIHZlcnN1cyBnZXR0aW5nIGl0cyBvd24g bm9ucmVkaXJlY3RhYmxlIGZpbGUgZGVzY3JpcHRvciwKLXZlcnN1cyB0aGUgWm1vZGVtIHZlcnNp b24gb24gdGhlIG90aGVyIGVuZCBhbmQgd2hpY2ggb3B0aW9ucyBhcmUgYXZhaWxhYmxlCi1vbiBl YWNoLCB2ZXJzdXMgdGhlIHB0eSBhbmQgc2VsZWN0KCkgcXVpcmtzIG9uIGVhY2ggcGxhdGZvcm0s IGFuZCBvbiBhbmQgb24uCi1JdCB3aWxsIGJlIHNvIGhhcmQgdG8gZXhwbGFpbiBhbmQgdG8gc2V0 IHVwIHRoYXQgbm9ib2R5IHdvdWxkIGV2ZXIgdXNlIGl0LgotSXQgd291bGQgYmUgYmV0dGVyIHRv IGp1c3QgaW1wbGVtZW50IFptb2RlbSBpbnRlcm5hbGx5LgotCi1GcmkgMjMgTWFyIDIwMDc6IFdl bnQgYmFjayB0byB0aGUgc21hbGwgdGVzdCBwcm9ncmFtLCB0dHB0eS5jLiAgVHJpZWQKLXNldHRp bmcgYm90aCB0aGUgbWFzdGVyIGFuZCB0aGUgc2xhdmUgcHR5IHRvIHJhd21vZGUsIGV2ZW4gdGhv dWdoIEkgaGF2ZQotbmV2ZXIgc2VlbiBhbnkgb3RoZXIgc29mdHdhcmUgdGhhdCBkaWQgdGhpcy4g IEkgaGFkIGl0IHJlY2VpdmUgdGhlIGJpbmFyeQotdGVzdCBwYXR0ZXJuIGZpbGU7IGl0IHdvcmtl ZC4gIEkgbWFkZSBhIGJpZ2dlciB0ZXN0LXBhdHRlcm4gZmlsZSwgM01CLAotY29udGFpbmluZyBz aW5nbGUsIGRvdWJsZSwgYW5kIHRyaXBsZSBjb3BpZXMgb2YgZWFjaCBieXRlIGluIGJ5dGUgb3Jk ZXIgYW5kCi1pbiByYW5kb20gb3JkZXIsIHRoaXMgb25lIHdhcyBhY2NlcHRlZCB0b28uCi0KLVNv IGl0IHdvdWxkIHNlZW0gdGhhdCB0aGUgY2t1cHR5LmMgbW9kdWxlIGlzIHNvbWV0aGluZyB0byBh dm9pZCBhZnRlciBhbGwuCi1JdCdzIGZ1bGwgb2Ygc3R1ZmYgSSBkb24ndCB1bmRlcnN0YW5kIGFu ZCBwcm9iYWJseSBzaG91bGQgbm90IHVuZG8uICBTbwotY2hhbmdpbmcgQy1LZXJtaXQncyB0dHB0 eWNtZCgpIHRvIG1hbmFnZSBpdHMgb3duIHB0eSBhZ2FpbiwgdXNpbmcgb3BlbnB0eSgpCi0od2hp Y2ggaXMgbm90IHBvcnRhYmxlKSwgSSBnb3QgaXQgYWxsIHRvIHdvcmsgaW4gcmVtb3RlIG1vZGU6 IEtlcm1pdAotdGV4dC9iaW5hcnkgdXAvZG93biBhbmQgWm1vZGVtIHRleHQvYmluYXJ5IHVwL2Rv d24uICBCdXQgaW4gbG9jYWwgbW9kZSBvbgotdGhlIGNsaWVudCBzaWRlIG9mIGEgVGVsbmV0IGNv bm5lY3Rpb24uLi4KLQotICB6c3Q6IE9LLCBidXQgd2Ugc3RpbGwgZ2V0IHRoZSBnZXR0eSBiYWJi bGUgYXQgdGhlIGVuZCB0aGF0IHN0YXJ0cyBzei4KLSAgenNiOiBPSywgZGl0dG8uICBUaGlzIGlz IHdpdGggdGhlIDNNQiB0ZXN0LXBhdHRlcm4gZmlsZS4KLSAgenJ0OiBOb3QgT0sgLS0gIlBlcnNp c3RlbnQgQ1JDIG9yIG90aGVyIEVSUk9SIgotICB6cmI6IE5vdCBPSyAtLSBnb3QgdGhlIGN1dG9m ZiBhdCAyMjQgYWdhaW4gIlBlcnNpc3RlbnQgQ1JDIG9yIG90aGVyIEVSUk9SIgotCi1JdCdzIGNs b3NlLiAgQnV0IGFjdHVhbGx5IHRoaXMgd2FzIHN0aWxsIHdpdGggVVNFX0NLVVBUWV9DIGRlZmlu ZWQuICBXaGVuIEkKLXVuZGVmaW5lZCBpdCwgaXQgd2FzIGJhY2sgdG8gYmVpbmcgdG90YWxseSBi cm9rZW4uICBTdGFydCBvdmVyLiAgKENoZWNrIHRoZQotbmV3IGNmbWFrZXJhdygpIGNvZGUuKQot Ci1UdWUgMjcgTWFyIDIwMDc6IFN0YXJ0aW5nIG92ZXIuICBCYWNrIHRvIHR0cHR5LmMuICBMZXQn cyB2ZXJpZnksIFZFUlkKLUNBUkVGVUxMWSwgdGhhdCBpdCByZWFsbHkgZG9lcyB3b3JrLCB1c2lu ZyB0aGUgbW9zdCBzdHJlc3NmdWwgb2YgdGhlIGZvdXIKLXRlc3RzOiBzZW5kaW5nIHRoZSBiaWcg KDMuMjc2OE1CKSBiaW5hcnkgdGVzdCBwYXR0ZXJuIGZyb20gSzk1IGludG8gcnoKLXRocm91Z2gg dHRwdHksIGxvZ2dpbmcgZXZlcnl0aGluZy4gIHR0cHR5IGRlZmluaXRlbHkgcmVjZWl2ZXMgdGhl IGJpZyBmaWxlCi1zbW9vdGhseSB3aXRoIG5vIGVycm9ycyBvciBoaWNjdXBzIHdoZW4gSSBoYXZl IGl0IHNldCB0byB1c2UgdGhlIG1hc3RlciBzaWRlCi1vZiB0aGUgcHR5IGZvciBpL28uICBUaGUg YXBwbGljYXRpb24gcHJvZ3JhbSAoWm1vZGVtIGluIHRoaXMgY2FzZSkgcnVucyBvbgotdGhlIHNs YXZlLCBhbmQgdGhlIG5ldHdvcmsgYW5kL29yIGNvbnRyb2wgcHJvZ3JhbSBjb21tdW5pY2F0ZXMg d2l0aCB0aGUKLW1hc3Rlci4gIFRoaXMgaW1wbGllcyB0aGF0IFptb2RlbSBjb250cm9scyB0aGUg dGVybWluYWwgbW9kZXMgb2YgdGhlIHNsYXZlLAotYW5kIHR0cHR5IHNob3VsZCBiZSBjb25jZXJu ZWQgd2l0aCB0aG9zZSBvZiB0aGUgbWFzdGVyLiAgRG9pbmcgaXQgdGhpcyB3YXkKLWluIHR0cHR5 IGNvbmZpcm1zIHRoaXMuCi0KLUZpbmUuICBCdXQgaWYgSSB0ZWxsIHR0cHR5IHRvIFNFTkQgYSBm aWxlIHdpdGggc3osIG5vdGhpbmcgaGFwcGVucy4gIERpdHRvCi13aXRoIGxzei4gIFNlbGVjdCB0 aW1lcyBvdXQgd2FpdGluZyBmb3IgaW5wdXQgZnJvbSB0aGUgcHR5LiAgQnV0IGlmIEkKLW1hbnVh bGx5IHRlbGwgSzk1IHRvIFJFQ0VJVkUgL1BST1RPQ09MOlpNT0RFTSBpdCB3b3JrcyBPSy4gIFNv bWVob3cgc3oncwotaW5pdGlhbCBCMDAwMDAwIHN0cmluZyBpcyBiZWluZyBzd2FsbG93ZWQgc29t ZXdoZXJlLCBhbmQgaXQncyB3YWl0aW5nIGZvcgotYSByZXBseSBmcm9tIHRoZSByZWNlaXZlci4g IHNpZ2guLi4gIEJ1dCAidHRwdHkgZ2tlcm1pdCAtcyBmaWxlbmFtZSIgd29ya3MKLWZpbmUuICBX aGF0J3MgdGhlIGRpZmZlcmVuY2U/ICBJdCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHN0ZG91dCB2 cyBzdGRlcnI7Ci1zeiBpcyBub3Qgd3JpdGluZyB0byBzdGRlcnIgYXQgYWxsLiAgSXMgaXQgc29t ZSB0aW1pbmcgdGhpbmcgYmV0d2VlbiB0aGUKLWZvcmtzPyAgQWhhLiAgSXQncyB0aGF0IEkgY2hh bmdlIHRoZSBtb2RlcyBvZiB0aGUgcHR5IG1hc3RlciBpbiBvbmUgZm9yawotd2hpbGUgc3ogaXMg YWxyZWFkeSBzdGFydGluZyBpbiB0aGUgb3RoZXIgZm9yay4KLQotT0ssIGdvb2QsIG5vdyBmb3Ig dGhlIGZpcnN0IHRpbWUgd2UgaGF2ZSBLZXJtaXQgYW5kIFptb2RlbSBib3RoIGFibGUgdG8KLXVw bG9hZCBhbmQgZG93bmxvYWQgYSBsYXJnZSB3b3JzdC1jYXNlIGJpbmFyeSB0ZXN0LXBhdHRlcm4g ZmlsZS4uLiBpbgotcmVtb3RlIG1vZGUuICBOb3cgdGFraW5nIHRvZGF5J3MgbGVzc29ucyBhbmQg Zml0dGluZyB0aGVtIGJhY2sgaW50bwotQy1LZXJtaXQgc28gSSBjYW4gdHJ5IGl0IGxvY2FsIG1v ZGUuLi4KLQotVXNpbmcgRy1LZXJtaXQgYXMgdGhlIGV4dGVybmFsIHByb3RvY29sLCBmaXJzdCBp biByZW1vdGUgbW9kZS4uLiAgQWxsIGdvb2Q6Ci10ZXh0L2JpbmFyeSB1cC9kb3duLiAgVGhlICJo YWx0aW5nIHByb2JsZW0iIGlzIHNvbHZlZCBieSBTSUdDSExELCB3aGljaAotY2F0Y2hlcyBmb3Jr IHRlcm1pbmF0aW9uIGluc3RhbnRseSBhbmQgbGV0cyB0dHB0eWNtZCgpIGtub3cgdGhlcmUgaXMg bm8gbW9yZQotcHR5LiAgWm1vZGVtOgotCi0gIHpzdDogT0sKLSAgenNiOiBPSwotICB6cnQ6IE9L Ci0gIHpyYjogT0sKLQotVGhhdCdzIGEgZmlyc3QuICBOZXh0LCByZXBlYXQgaW4gbG9jYWwgbW9k ZSwgaW4gd2hpY2ggQy1LZXJtaXQgaXMgdGhlIGNsaWVudAotYW5kIGhhcyBtYWRlIGEgVGVsbmV0 IGNvbm5lY3Rpb24gdG8gYW5vdGhlciBob3N0IG92ZXIgYSBzZWN1cmUgKEtlcmJlcm9zIFYpCi1j b25uZWN0aW9uOgotCi0gIGtzdDogT0sgICAgIHpzdDogLi4uCi0gIGtzYjogT0sKLSAga3J0OiBP SyAgCi0gIGtyYjogT0sKLSAgCi1JdCBzZWVtcyB3ZSBjYW4gbmV2ZXIgZW5kIGEgZGF5IG9uIGEg aGlnaCBub3RlLiAgU29tZWhvdyBJIHNlZW0gdG8gaGF2ZQotYnJva2VuIHJlZ3VsYXIgaW50ZXJu YWwgS2VybWl0IHByb3RvY29sIHRyYW5zZmVycyBvdmVyIGVuY3J5cHRlZCBjb25uZWN0aW9ucwot LS0gdGhlIGVuL2RlY3J5cHRpb24gZW5naW5lIGxvc2VzIHN5bmMuICBCdXQgdGhleSBzdGlsbCB3 b3JrIE9LIG92ZXIgYQotY2xlYXItdGV4dCBUZWxuZXQgY29ubmVjdGlvbi4KLQotVG9kYXkncyBj b2RlIGluIH4vODAvZHVsY2UudGFyICgyNyBNYXIgMjAwNykuCi0KLUFkZGVkIG1ha2VmaWxlIHRh cmdldCBzb2xhcmlzMTBnK29wZW5zc2wuICBHYXRoZXJlZCBhbGwgdGhlIHN0YW5kYXJkIENGTEFH UwotZm9yIFNvbGFyaXMgaW50byBjZGNkZWIuaCBzbyB0aGV5IGRvbid0IGhhdmUgdG8gYmUgaW5j bHVkZWQgaW4gZXZlcnkgc2luZ2xlCi1tYWtlZmlsZSB0YXJnZXQgZm9yIFNvbGFyaXMuICBPbiBs b2NhbCBTb2xhcmlzIDEwIGhvc3QgT3BlblNTTCBpcyBpbgotL29wdC9vcGVuc3NsLTAuOS44ZS8u ICBUcmllZCB0aGUgbmV3IG1ha2VmaWxlIHRhcmdldCwgd29ya3MgT0suICBBbHNvIG1hZGUKLXNv bGFyaXMxMCtvcGVuc3NsIGZvciBTdW4gQ0MsIGJ1dCBjb3VsZG4ndCB0ZXN0IGl0IGJlY2F1c2Ug SSBjYW4ndCBmaW5kIGFueQotU29sYXJpcyAxMCBob3N0IHRoYXQgaGFzIFN1biBDQy4gIEJ1aWx0 IHdpdGggZ2NjIGF0IGFub3RoZXIgc2l0ZSB0aGF0IGhhcwotT3BlblNTTCAwLjkuOGYtZGV2LCBh bGwgT0suICBja2NkZWIuaCwgbWFrZWZpbGUsIDI0IEp1biAyMDA3LgotCi1JdCBvY2N1cnMgdG8g bWUgdGhhdCBLZXJtaXQgdHJhbnNmZXJzIG9uIHNlY3VyZSBjb25uZWN0aW9ucyBtaWdodCBoYXZl IGJlZW4KLWJyb2tlbiBieSB0aGUgY2hhbmdlcyBJIG1hZGUgYmFjayBpbiBGZWJydWFyeSB0byB0 dGlubCgpIGZvciBKb2huIER1bmxhcC4KLUhlcmUsIGZvciB0aGUgZmlyc3QgdGltZSwgd2UgaW52 b2tlIG15dW5yZCgpIHRvIHB1c2ggYSBieXRlIGJhY2sgaW50byB0aGUKLWlucHV0IHF1ZXVlLCBh bmQgdGhlcmUgaXMgYWxzbyBzb21lIGZ1bm55IGJ1c2luZXNzIHdpdGggImNzYXZlIiwgd2hpY2gK LWNoYW5nZWQsIGFuZCB3aGljaCBhbiBvbGQgY29tbWVudCBub3RlcyB0aGF0IGl0IGhhcyB0byBi ZSB0cmVhdGVkIHNwZWNpYWxseQotd2hlbiBlbmNyeXB0aW5nLiAgU28gaXQgY291bGQgYmUgdGhh dCB0aGUgYnJva2VuIEtlcm1pdCB0cmFuc2ZlciBoYXMgbm90aGluZwotdG8gZG8gd2l0aCB0aGUg d29yayBvbiBleHRlcm5hbCBwcm90b2NvbHMsIGFuZCB0aGF0IHB1dHRpbmcgYmFjayB0aGUKLXBy ZXZpb3VzIHR0aW5sKCkgd2lsbCBmaXggaXQuICBCdXQgbm93IEkgY2FuJ3Qgc2VlbSB0byBtYWtl IGEgS2VyYmVyaXplZAotY29ubmVjdGlvbiBmcm9tIFBhbml4IHRvIFBhbml4LCBldmVuIHRob3Vn aCBJIGNhbiBtYWtlIG9uZSBmcm9tIENvbHVtYmlhIHRvCi1QYW5peC4gIFRoaXMgbWVhbnMgSSBo YXZlIHRvIGJ1aWxkIGEgS2VyYmVyaXplZCBiaW5hcnkgZnJvbSB0aGUgY3VycmVudAotc291cmNl IGNvZGUgb24gZWl0aGVyIFNvbGFyaXMgb3IgTWFjIE9TIFguICBUcnlpbmcgU29sYXJpcwotZmly c3QuLi4gW34vc29sYXJpczlrNS9tazUuc2hdIFRoaXMgZGlkbid0IHdvcmsgdGhlIGZpcnN0IHRp bWUgZHVlIHRvCi11bmRlZmluZWQga3JiNV9pbml0X2V0cywgd2hpY2ggaXMgcmVmZXJlbmNlZCBp ZiBNSVRfQ1VSUkVOVCBpcyBub3QgZGVmaW5lZAotKGl0IHNob3VsZCBiZSBmb3IgS2VyYmVyb3Mg NSAxLjA1IGFuZCBsYXRlciBhbmQgd2UgaGF2ZSAxLjQyIGhlcmUpLCB0cmllZAotYWdhaW4gd2l0 aCAtRE1JVF9DVVJSRU5UPTEuLi4gIE5vcGUsIHRoYXQgb25lIHRvdGFsbHkgYmxldyB1cCBpbiBj a19jcnAuYy4KLUxhdGVyLCBKZWZmIHNheXMga3JiNV9pbml0X2V0cyBpcyBhIG5vLW9wIGluIEtl cmJlcm9zIDEuNC54IGFuZCBsYXRlciwKLXNvIEkgYWRkZWQgYW4gI2lmZGVmIChOT19LUkI1X0lO SVRfRVRTKSBmb3Igc2tpcHBpbmcgaXQ7IG5vdyBpdCBidWlsZHMgYW5kCi1ydW5zIE9LLiAgY2t1 YXRoLmMsIG1ha2VmaWxlLCA5IEp1bCAyMDA3LgotCi1NZWFud2hpbGUsIHVzaW5nIEMtS2VybWl0 IG9uIE1hYyBPUyBYLCB3aGljaCBtYWtlcyB0aGUgS2VyYmVyaXplZCBjb25uZWN0aW9uCi1qdXN0 IGZpbmUsIGJ1dCBzdGlsbCBoYXMgdGhlIHByb2JsZW0gdHJhbnNmZXJyaW5nIGZpbGVzIG92ZXIg aXQuICBQYWNrZXQgbG9nCi1zaG93czoKLQotICBzLTAwLTAxLV5BOSBTei8gQC0jWTN+WiEgejBf X19GIlUxQEFeTSAKLSAgci0wMC0wMS1eQTkgWX4vIEAtI1kzfl4+SikwX19fSiJVMUBJCi0gIHMt MDEtMDEtXkEoIUZ4LngpKFZeTQotICByLXh4LTA4LTx0aW1lb3V0PgotICBTLTAxLTA4LV5BKCFG eC54KShWXk0KLSAgci14eC0wOC08dGltZW91dD4KLSAgUy0wMS0wOC1eQSghRngueCkoVl5NCi0g IHIteHgtMTYtPHRpbWVvdXQ+Ci0KLU5vdGUgdGhhdCBTIHBhY2tldCBpcyBzZW50LCByZWNlaXZl ZCwgYW5kIEFjaydkIE9LLiAgVGhlIEYgcGFja2V0IGlzIHNlbnQgYnV0Ci1pcyBuZXZlciBBY2sn ZC4gIFRyaWVkIHRoaXMgc2V2ZXJhbCB0aW1lcyBhbmQgbm90aWNlZCB0aGF0IGl0J3MganVzdAot cmVjZWl2aW5nIHRoYXQgaXMgc2NyZXdlZCB1cCwgbm90IHNlbmRpbmcuICBBZnRlciBeQydpbmcg b3V0IG9mIHRoZQotdHJhbnNmZXIsIEkgY2FuIHN0aWxsIHR5cGUgY29tbWFuZHMsIGFuZCB0aGV5 IGFyZSBleGVjdXRlZCBvbiB0aGUgZmFyIGVuZCwKLWJ1dCB0aGUgcmVzdWx0cyBjb21pbmcgYmFj ayBhcmUgZ2liYmVyaXNoLiAgTW9uIEp1bCA5IDE2OjA4OjIyIDIwMDcgKGNvbWUKLWJhY2sgdG8g dGhpcyBsYXRlci4uLiBzdWJzdGl0dXRlIERldi4yNyB0dGlubCBmb3IgY3VycmVudCBvbmUgYW5k IHNlZSBpZgotdGhlIHByb2JsZW0gZ29lcyBhd2F5LCBhbmQgaWYgc28sIGNvbmRpdGlvbmFsaXpl IHRoZSBuZXcgY29kZSBmb3IgY2xlYXItdGV4dAotY29ubmVjdGlvbnMpLgotCi1CdWlsdCBDLUtl cm1pdCB3aXRoIEtlcmJlcm9zIDUgb24gU29sYXJpcyB3aXRoIGEgdmVyc2lvbiBvZiBja3V0aW8u YyB0aGF0Ci11c2VzIHRoZSBvbGQgdHRpbmwoKSBhbmQgdHJhbnNmZXJyZWQgYSBmaWxlIE9LIG92 ZXIgYSBLZXJiZXJpemVkIGNvbm5lY3Rpb24uCi1TbyBub3cgaXQncyBqdXN0IGEgbWF0dGVyIG9m IHJlY29uY2lsaW5nIHRoZSBvbGQgYW5kIG5ldyB0dGlubC4gIFRoZSBlYXNpZXN0Ci13YXkgdG8g ZG8gdGhpcyBpcyB0byBoYXZlIG5ldyB0dGlubCgpIGNoYWluIHRvIG9sZCB0dGlubCgpIGlmIHRo ZSBjb25uZWN0aW9uCi1pcyBlbmNyeXB0ZWQsIHdoaWNoIGlzIHdoYXQgSSBkaWQgYW5kIGl0IHdv cmtzIGZpbmUuICBBdCBzb21lIHBvaW50IHRoZSB0d28KLXZlcnNpb25zIG9mIHR0aW5sKCkgc2hv dWxkIGJlIHJlY29uY2lsZWQuICBja3V0aW8uYywgMTIgQXVnIDIwMDcuCi0KLVRoZXJlIHdhcyBh IGZ1bmN0aW9uLCBpc2xpbmsoKSwgdXNlZCBpbiBvbmx5IG9uZSBwbGFjZSAoY2t1dXM2LmMpIHRo YXQgaGFkCi10aGUgc2FtZSBuYW1lIGFzIGEgY29tbW9ubHkgdXNlZCBzY2FsYXIgdmFyaWFibGUs IGFuZCBpdCB3YXMgbWlzc2luZyBhCi1wcm90b3R5cGUuICBDaGFuZ2VkIGl0cyBuYW1lIHRvIGlz YWxpbmsoKSBhbmQgYWRkZWQgdGhlIHByb3RvdHlwZSAoVW5peAotb25seSksIGNrdXVzNi5jLCBj a3VmaW8uYywgY2tjZGViLmguIDEyIEF1ZyAyMDA3LgotCi1SZXZpc2l0aW5nIHRoZSBBU0NJSSBh bmQgQklOQVJZIHRvcC1sZXZlbCBjb21tYW5kcywgd2hpY2ggYXJlIHN1cHBvc2VkIHRvCi1iZSBs aWtlIGluIG90aGVyIEZUUCBjbGllbnRzLCBidXQgZG9uJ3Qgc2VlbSB0byBoYXZlIGFueSBlZmZl Y3QuICBJIGFkZGVkIGEKLW5ldyByb3V0aW5lIHRvIHRoZSBGVFAgbW9kdWxlLCBkb2Z0cGdsb2Jh bHR5cGUoKSwgdGhhdCBzZXRzIHRoZSBnbG9iYWwsCi1zdGlja3ksIHBlcm1hbmVudCB0cmFuc2Zl ciBtb2RlIChBU0NJSSBvciBCSU5BUlkpIChURU5FWCBjb3VsZCBiZSBhZGRlZCB0bwotaWYgYW55 Ym9keSBhc2tzKS4gIFRoZXNlIGNvbW1hbmRzIChub3cgdGhhdCB0aGV5IHdvcmspIGFyZSBkaWZm ZXJlbnQgZnJvbQotU0VUIEZUUCBUWVBFIHsgQVNDSUksIEJJTkFSWSB9LCB3aGljaCBzZXQgdGhl ICpkZWZhdWx0KiB0cmFuc2ZlciBtb2RlIHdoZW4KLWF1dG9tYXRpYyBzd2l0Y2hpbmcgZmFpbHMg Zm9yIGEgZ2l2ZW4gZmlsZS4gIGNrdXVzci5jLCBja2NmdHAuYywgMTIgQXVnIDIwMDcuCi0gKG5v dGlmeTogTWF0dCA8bWxpc3RAY21jZmxleC5jb20+KQotCi1FdmVuIHRob3VnaCB0aGUgY29kZSBo YXNuJ3QgY2hhbmdlZCwgc3VkZGVubHkgd2UncmUgZ2V0dGluZzoKLQotICAiY2t1dXN4LmMiLCBs aW5lIDU2ODI6IHdhcm5pbmc6IGltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uOiB0Z2V0ZW50 Ci0gICJja3V1c3guYyIsIGxpbmUgNjE4Mzogd2FybmluZzogaW1wbGljaXQgZnVuY3Rpb24gZGVj bGFyYXRpb246IHRnZXRzdHIKLSAgImNrdXVzeC5jIiwgbGluZSA2MjYyOiB3YXJuaW5nOiBpbXBs aWNpdCBmdW5jdGlvbiBkZWNsYXJhdGlvbjogdHB1dHMKLSAgImNrdXVzeC5jIiwgbGluZSA2MjY2 OiB3YXJuaW5nOiBpbXBsaWNpdCBmdW5jdGlvbiBkZWNsYXJhdGlvbjogdGdvdG8KLQotaW4gY2t1 dXN4LmMgb24gU29sYXJpcyA5LiAgPGN1cnNlcy5oPiBpcyBzdGlsbCBpbiAvdXNyL2luY2x1ZGUs IGRhdGVkIDIwMDIuCi1BIHF1aWNrIHNlYXJjaCBzaG93cyB0aGUgbWlzc2luZyBmdW5jdGlvbnMg YXJlIGhpZGluZyBpbiA8dGVybS5oPiwgd2hpY2gKLXVudGlsIG5vdyB3YXMgaW5jbHVkZWQgb25s eSBpbiBMaW51eC4gIEFkZGVkIGEgVVNFX1RFUk1fSCBjbGF1c2UuICBObywgdGhhdAotZG9lc24n dCBoZWxwLCB0aGUgcHJvdG90eXBlcyBhcmUgbm90IHNlbGVjdGVkIGF0IGNvbXBpbGUgdGltZTsg dGhlcmUgYXJlCi0jaWZkZWZzIGluIHRoYXQgZmlsZSB0aGF0IHNraXAgb3ZlciB0aGVzZSBwcm90 b3R5cGVzLiAgSSBoYWQgdG8gcHV0IHRoZW0gaW4KLXRoZSBjb2RlIHVuZGVyICNpZmRlZiBCVUc5 OTkuLiNlbmRpZiAoSSBjb3VsZCBoYXZlIHVzZWQgYSBsb25nZXIgbmFtZSBsaWtlCi0jaWZkZWYg QUREX1BST1RPVFlQRVNfRk9SX0NVUlNFU19GVU5DVElPTlMsIGJ1dCB0aGF0IHdvdWxkIG5vdCBi ZSBwb3J0YWJsZSkuCi1ja3V1c3guYywgMTIgQXVnIDIwMDcuCi0KLUFsc286Ci0KLSAgImNrdXVz eC5jIiwgbGluZSA5MjMyOiB3YXJuaW5nOiBpbXBsaWNpdCBmdW5jdGlvbiBkZWNsYXJhdGlvbjog Y3JlYXQKLQotVGhpcyBpcyBjYWxsZWQgaW4gdGhlIElLU0QgZGF0YWJhc2UgY29kZSwgdXNlZCBm b3IgZ2V0dGluZyBhIGxvY2tmaWxlLgotY3JlYXQoKSBpcyBhIFVuaXhpc20gaW4gY29kZSB0aGF0 IGlzIHN1cHBvc2VkIHRvIGJlIHBvcnRhYmxlLiAgQnV0IElLU0Qgb25seQotcnVucyBvbiBVbml4 IGFuZCBXaW5kb3dzLCBzbyBJIGFzc3VtZSB0aGUgV2luZG93cyBDIGxpYnJhcnkgaGFzIGEgY3Jl YXQoKQotZnVuY3Rpb24uICBBbnl3YXksIHN1ZGRlbmx5IHRoZSBTb2xhcmlzIGhlYWRlciBmaWxl cyBzZWVtIHRvIGhhdmUgYmxvY2tlZAotd2hhdGV2ZXIgcGF0aCBwcmV2aW91c2x5IGV4aXN0ZWQg dG8gdGhlIGNyZWF0KCkgcHJvdG90eXBlICh3aGljaCBpcyBpbgotPGZjbnRsLmg+KSwgc28gSSBh ZGRlZCBhbiAjaW5jbHVkZSBpbiB0aGUgYXBwcm9wcmlhdGUgc3BvdC4gIGNrdXVzeC5jLAotMTIg QXVnIDIwMDcuCi0KLUtlcm1pdCBmdW5jdGlvbnMgZm9yIGNvbnZlcnRpbmcgdGhlIG51bWJlciBi YXNlIC0tIFxmcmFkaXgoKSwgXGZoZXhpZnkoKSwKLVx1bmZoZXhpZnkoKSAtLSBkaWQgbm90IHdv cmsgd2l0aCBiaWcgbnVtYmVyczsgY2tyYWRpeCgpIHdhcyBtaXNzZWQgaW4gdGhlCi1DS19PRkZf VCBjb252ZXJzaW9uLiAgRml4ZWQgaW4gY2tjbGliLmMsIDEyIEF1ZyAyMDA3LgotCi1VcGRhdGVk IHRoZSBoZWxwIHRleHQgZm9yIEFTQ0lJLCBCSU5BUlksIGFuZCBTRVQgRlRQIFRZUEUgdG8gY2xh cmlmeSB0aGUKLXNlbWFudGljcy4gIGNrdXVzMi5jLCBja2NmdHAuYywgMTIgQXVnIDIwMDcuCi0K LUVycm9yIG1lc3NhZ2VzIHdlcmUgcHJpbnRlZCB1cG9uIGZhaWx1cmUgdG8gb3BlbiBhbnkgb2Yg dGhlIGZvdXIgbG9nIGZpbGUsCi1ldmVuIHdpdGggU0VUIFFVSUVUIE9OLiAgRml4ZWQgaW4gY2t1 dXM0LmMsIDEyIEF1ZyAyMDA3LgotCi1CdWlsdCBPSyBvbiBOZXRCU0QgMS4zX1JDMy4gIFRyaWVk IHRvIGJ1aWxkIHNlY3VyZSB2ZXJzaW9uIGJ1dCB0aGUgbGlicmFyaWVzCi1oYWQgZGlzYXBwZWFy ZWQuICAxMyBBdWcgMjAwNy4KLQotQnVpbHQgT0sgb24gTWFjIE9TIFggMTAuNC45LiAgVHJpZWQg dGhlIHNlY3VyZSB2ZXJzaW9uLCBtYWNvc3gxMC40K2tyYjUrc3NsLgotSGVyZSB3ZSBnZXQgdGhl IHVzdWFsIHBpbGUgb2YgInBvaW50ZXIgdGFyZ2V0cyBpbiBwYXNzaW5nIGFyZ3VtZW50IDEgb2YK LShmdW5jdGlvbiBuYW1lKSBkaWZmZXIgaW4gc2lnbmVkbmVzcyIsIHJlZ2FyZGluZyBzZWN1cml0 eSBmdW5jdGlvbnMsIGJ1dCBpdAotYnVpbHQgT0suICAxMyBBdWcgMjAwNy4KLQotUmVjb25jaWxp bmcgdGhlIHR3byB0dGlubCdzLi4uICBPbiBlbmNyeXB0ZWQgY29ubmVjdGlvbnMgbXlyZWFkKCkg cmV0dXJucwotZW5jcnlwdGVkIGJ5dGVzOyB0dGlubCgpIGhhcyB0byBkZWNyeXB0IHRoZW07IGl0 IHdhc24ndCBkb2luZyB0aGlzIGluIHRoZQotbG9va2FoZWFkIHNlY3Rpb24gc28gSSBmaXhlZCBp dC4gIFRoZSBuZXcgY29kZSB3b3JrcyBvbiBib3RoIGVuY3J5cHRlZCBhbmQKLWNsZWFyLXRleHQg Y29ubmVjdGlvbnMuICBJIHJlbW92ZWQgdGhlIGNoYWluaW5nIHRvIG9sZHR0aW5sKCksIGFuZAot b2xkdHRpbmwoKSBpdHNlbGYuICBja3V0aW8uYywgMTMgQXVnIDIwMDcuCi0KLSAgKFdvdWxkbid0 IGl0IG1ha2UgbW9yZSBzZW5zZSBhbmQgYmUgbW9yZSBlZmZpY2llbnQgYW5kIGxlc3MgY29uZnVz aW5nCi0gIGZvciBteWZpbGxidWYoKSB0byBkbyB0aGUgZGVjcnlwdGluZz8pCi0KLVdoZW4gQy1L ZXJtaXQgdXNlcyBabW9kZW0gYXMgYW4gZXh0ZXJuYWwgcHJvdG9jb2wsIGl0IGRvZXNuJ3Qgc2Vl bSB0byBzY2FuCi1maWxlcyBiZWZvcmUgc2VuZGluZyB0aGVtIHRvIHNldCB0ZXh0IG9yIGJpbmFy eSBtb2RlIGFwcHJvcHJpYXRlbHkuICBJdCdzCi10aGF0IGV4dGVybmFsIHByb3RvY29scyBieXBh c3MgS2VybWl0J3Mgd2hvbGUgImdldCBuZXh0IGZpbGUiIG1lY2hhbmlzbTsgdGhlCi0ocG9zc2li bHkgd2lsZCkgZmlsZXNwZWMgaXMgc2ltcGx5IHBhc3NlZCB0byB0aGUgZXh0ZXJuYWwgcHJvdG9j b2wgcHJvZ3JhbS4KLUNoYW5naW5nIHRoaXMgd291bGQgYmUgYSB2ZXJ5IGJpZyBkZWFsLiAgQnV0 IGlmIG9ubHkgb25lIGZpbGUgaXMgYmVpbmcgc2VudAotKHRoZSBmaWxlc3BlYyBpcyBub3Qgd2ls ZCkgaXQncyBlYXN5IGVub3VnaCB0byBjaGVjay4gIEkgYWRkZWQgdGhpcyB0byB0aGUKLWV4dGVy bmFsIHByb3RvY29scyBzZWN0aW9uIG9mIHRoZSBwcm90b2NvbCBtb2R1bGUuICBJdCBjYW4gYmUg b3ZlcnJpZGRlbiBpbgotYW55IG9mIHRoZSByZWd1bGFyIHdheXMgKC9URVhUIG9yIC9CSU5BUlkg c3dpdGNoIG9uIFNFTkQgY29tbWFuZCwgU0VUCi1QQVRURVJOUyBPRkYsIFNFVCBUUkFOU0ZFUiBN T0RFIE1BTlVBTCwgZXRjKS4gIGNrY3Byby53LCAxMyBBdWcgMjAwNy4KLQotW0ZUUCBTRU5EIC9S RUNVUlNJVkVdCi1QZXRlciBDcm93bGV5IHJlcG9ydGVkIGEgcHJvYmxlbSB3aXRoIEZUUCByZWN1 cnNpdmUgdXBsb2FkcyBnZXR0aW5nIHRoZQotZGlyZWN0b3J5IHRyZWUgd3Jvbmcgd2hlbiB0aGUg cHJldmlvdXMgcGF0aG5hbWUgd2FzIGEgbGVmdCBzdWJzdHJpbmcgb2YgdGhlCi1uZXcgcGF0aG5h bWUgKGUuZy4gZm9vL2Jhci8gYW5kIGZvby9iYXIyLykuICBUaGUgbG9naWMgZGlkIG5vdCBoYW5k bGUgdGhpcwotY2FzZSBhbmQgY3JlYXRlZCB0aGUgYmFyMiBkaXJlY3RvcnkgYXMgYSBzdWJkaXJl Y3Rvcnkgb2YgYmFyLCByYXRoZXIgdGhhbiBhcwotYSBwYXJhbGxlbCBkaXJlY3RvcnkuICBGaXhl ZCBpbiBzeW5jZGlyKCkgYW5kIHRlc3RlZCB3aXRoIHZhcmlvdXMgZWRnZSBjYXNlcy4KLWNrY2Z0 cC5jIDE0IEF1ZyAyMDA3LgotCi0gIG5vdGlmeSA8cGV0ZXIuY3Jvd2xleUBhbHVtbmkudXRleGFz Lm5ldD4KLQotQWRkZWQgQ0QgbWVzc2FnZXMgdG8gRlRQIEJSSUVGIGRpc3BsYXkgdG8gdHJhY2sg dGhlIHVwcyBhbmQgZG93bnMgb2YKLXJlY3Vyc2l2ZSB1cGxvYWRzLiAgY2tjZnRwLmMsIDE0IEF1 ZyAyMDA3LgotCi1UaGUgT1VUUFVUIGNvbW1hbmQgZ2F2ZSBhIG1pc2xlYWRpbmcgZXJyb3IgbWVz c2FnZSAoIkNvbm5lY3Rpb24gdG8geHh4IG5vdAotb3BlbiIpIHdoZW4gdXNlZCBvbiBhIHNlcmlh bCBwb3J0IHRoYXQgd2FzLCBpbmRlZWQsIG9wZW4gYnV0IHdhcyBub3QKLXByZXNlbnRpbmcgdGhl IENhcnJpZXIgc2lnbmFsLCB3aGVuIENBUlJJRVItV0FUQ0ggd2FzIG5vdCBPRkYuICBBZGRlZCBh IG5ldwotbWVzc2FnZSBmb3IgdGhpcywgYW5kIHNvbWUgb3RoZXJzLiAgY2t1dXM1LmMsIDE0IEF1 ZyAyMDA3LgotCi1TZW5kaW5nIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgZS5nLiBrZXJtaXQgLXMg Zm9vLCBkaWQgbm90IGdpdmUgYW4KLWluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2UgaWYgdGhlIGZp bGUgY291bGQgbm90IGJlIGZvdW5kIG9yIG9wZW5lZC4gIEZpeGVkCi1pbiBja3V1c3kuYywgMTQg QXVnIDIwMDcuCi0KLU9LLCBiYWNrIHRvIHR0cHR5Y21kLi4uLiAgSXQgc2VlbXMgdGhhdCBiYWNr IG9uIE1hcmNoIDI3dGgsIEkgZ290IGV2ZXJ5dGhpbmcKLXdvcmtpbmcgYnV0IEkgdGhvdWdodCB0 aGF0IHRoZXJlIHdhcyBzdGlsbCBzb21ldGhpbmcgd3Jvbmcgd2l0aCBpdCBiZWNhdXNlCi1hbiB1 bnJlbGF0ZWQgcHJvYmxlbSBzbyBJIHB1dCBpdCBhc2lkZS4gIFRoZSB2ZXJzaW9uIG9mIHR0cHR5 LmMgZnJvbSB0aGF0Ci1kYXRlIHdvcmtlZCBPSywgYW5kIGl0IGxvb2tzIGxpa2UgSSB1cGRhdGVk IGNrdXRpby5jIGZyb20gaXQsIGJ1dCB0aGF0Ci12ZXJzaW9uIG9mIGNrdXRpby5jIHdhcyBwdXQg YXNpZGUuICBTaW5jZSB0aGVuIEkgaGF2ZSBiZWVuIHdvcmtpbmcgb24gdGhlCi1ja3V0aW8uYyB2 ZXJzaW9uIHRoYXQgd2FzIE5PVCBwdXQgYXNpZGUgYW5kIHNvIG5vdyBJIGhhdmUgdG8gcmVjb25j aWxlIHRoZQotdHdvOgotCi0gIH4vODAvdHR5cHR5LzIwMDcwMzI3L2NrdXRpby5jCi0gIH4vODAv Y2t1dGlvLmMKLQotQXMgYSBmaXJzdCBjdXQgSSBkaWQgdGhpcyBzaW1wbHkgYnkgcmVwbGFjaW5n IHRoZSBjb250ZW50cyBvZiB0aGUgI2lmZGVmCi1DS19SRURJUiBzZWN0aW9uIG9mIHRoZSBsYXR0 ZXIgd2l0aCB0aGF0IG9mIHRoZSBmb3JtZXIuICBPZiBjb3Vyc2UgaW4KLVNvbGFyaXMgdGhpcyBj b21lcyB1cCB3aXRoIG9wZW5wdHkoKSBpbXBsaWNpdGx5IGRlY2xhcmVkIGF0IGNvbXBpbGUgdGlt ZSBhbmQKLXVucmVzb2x2ZWQgYXQgbGluayB0aW1lLiAgU28gdGhlIGZpcnN0IHRhc2sgaXMgdG8g Z2V0IEhBVkVfT1BFTlBUWSBkZWZpbmVkCi1mb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSBpdCBhbmQg aGF2ZSB0aGUgb3RoZXJzIHVzZSB0aGUgdHRydW5jbWQoKS4gIEZvcgotc3RhcnRlcnMgSSBwdXQg YW4gI2lmZGVmIGJsb2NrIGluIGNrY2RlYi5oIHRoYXQgZGVmaW5lcyBIQVZFX09QRU5QVFkgZm9y Ci1MaW51eCwgRnJlZUJTRCwgTmV0QlNELCBPcGVuQlNELCBhbmQgTWFjIE9TIFguICBPbmVzIHRo YXQgZG9uJ3QgaGF2ZQotb3BlbnB0eSgpIGluY2x1ZGUgQUlYLCBIUC1VWCwgYW5kIFNvbGFyaXMu ICBPdGhlcnMgbGlrZSBTQ08gSSBkb24ndCBrbm93IGJ1dAotSSBkb3VidCBpdC4gIFRoZSByZWFs IHNvbHV0aW9uIGlzIHRvIGdldCB0aGUgY2t1cHR5LmMgbW9kdWxlIHRvIHdvcmsgYnV0IG9uZQot dGhpbmcgYXQgYSB0aW1lLi4uICBUaGlzIHZlcnNpb24gaXMgc3VwcG9zZWQgd29yayB3aXRoIHNl Y3VyZSBidWlsZHMgb24gdGhlCi1vcGVucHR5KCkgcGxhdGZvcm1zLCBhbmQgb24gdGhlIG90aGVy cyBsaWtlIFNvbGFyaXMsIGlmIGFuIGV4dGVybmFsIHByb3RvY29sCi1pcyBhdHRlbXB0ZWQgb24g YSBzZWN1cmUgKGVuY3J5cHRlZCkgY29ubmVjdGlvbiwgYW4gZXJyb3IgbWVzc2FnZSBpcwotcHJp bnRlZCBhbmQgdGhlIGNvbW1hbmQgZmFpbHMuICBja3V0aW8uYywgMTQgQXVnIDIwMDcuCi0KLUhv dyB0byB0ZXN0PyAgQXBwYXJlbnRseSBJIGRpZCBhbGwgbXkgdGVzdGluZyBvbiBQYW5peCBiZWZv cmUsIGFuZCB0aGF0J3MKLXdoZXJlIGFsbCBteSBabW9kZW0gYnVpbGRzIGFyZSwgYnV0IG5vdyB3 aGVuIEkgYnVpbGQgYSBLZXJiZXJpemVkIHZlcnNpb24KLSh3aGljaCB3b3JrcyBpZiBJIGRvIGl0 IG9uIHRoZSByaWdodCBwb29sIGhvc3QpLCBpdCB3b24ndCBtYWtlIGEgbG9jYWwKLWNvbm5lY3Rp b24sIGFuZCB0aGVyZSBpcyBubyBvdGhlciBwbGFjZSBJIGNhbiBjb25uZWN0IHRvIHRoYXQgaGFz IGEKLUtlcmJlcml6ZWQgVGVsbmV0IHNlcnZlci4gIEkgY2FuLCBob3dldmVyLCBjb25uZWN0IHRv IFBhbml4IGZyb20gaGVyZSwgdXNpbmcKLXRoZSBzYW1lIGNvZGUsIGJ1dCBvbiBNYWMgT1MgWC4u LgotCi1TbGlnaHQgZGV0b3VyOiBHb3QgYWNjZXNzIHRvIEFJWCBhZ2FpbiAoNS4zLjAuMCkuICBQ aWNreSBjb21waWxlciwgc29tZQotdGhpbmdzIG5lZWRlZCBmaXhpbmcuLi4uICBBbHNvIGl0IHNh eXMgIjE1MDYtNTA3IChXKSBObyBsaWNlbnNlcyBhdmFpbGFibGUuCi1Db250YWN0IHlvdXIgcHJv Z3JhbSBzdXBwbGllciB0byBhZGQgYWRkaXRpb25hbCB1c2Vycy4gQ29tcGlsYXRpb24gd2lsbAot cHJvY2VlZCBzaG9ydGx5IiBhbmQgb2YgY291cnNlIGl0IGdvZXMga2luZCBvZiBzbG93LiAgRm9y IHNvbWUgcmVhc29uLCBJCi1jYW4ndCBkbyBzdHJlYW1pbmcgdHJhbnNmZXJzIGludG8gQUlYIG92 ZXIgYSBsb2NhbCBuZXR3b3JrICh0byBpdHMgU1NICi1zZXJ2ZXIpLCBidXQgd2luZG93ZWQgdHJh bnNmZXJzIGFyZSBPSy4gIEFueXdheSwgbm90aW5nIHRoYXQgd2UndmUgYmVlbgotdXNpbmcgdGhl IHNhbWUgYmFzaWMgbWFrZWZpbGUgdGFyZ2V0IHNpbmNlIEFJWCA0LjIsIGNoYW5naW5nIG5vdGhp bmcgYnV0IHRoZQotdmVyc2lvbiBoZXJhbGQsIEkgbWFkZSBhIG5ldyB0YXJnZXQsIHNpbXBseSAi YWl4IiwgdGhhdCBwaWNrcyB1cCB0aGUgQUlYCi12ZXJzaW9uIGF1dG9tYXRpY2FsbHkgYW5kIHNl dHMgdGhlIGhlcmFsZCBmcm9tIGl0LiAgRGl0dG8gZm9yIGFpeCtvcGVuc3NsLAotYnV0IG9uIHRo aXMgaG9zdCByZXF1aXJlcyBzZXR0aW5nIFNTTElOQyBhbmQgU1NMTElCIHRvIC9vcHQvc3NsL2lu Y2x1ZGUgYW5kCi0vb3B0L3NzbC9saWIuICBBbHNvIHRoZSBtYWtlIHByb2dyYW0gaGVyZSB3YXMg ZXh0cmVtZWx5IHNlbnNpdGl2ZSB0byBzcGFjaW5nCi1zbyBJIGhhZCB0byBtYWtlIHNvbWUgbWlu b3IgZWRpdHMgdG8gZ2V0IHRoZSBsaW5rIHN0ZXAgdG8gd29yayBmb3IgdGhlIFNTTAotdmVyc2lv bi4gIGNrdXVzeS5jLCBtYWtlZmlsZSwgMTQtMTUgQXVnIDIwMDcuCi0KLUdvdCByaWQgb2YgdGhl IHNwZWNpYWwgUGFuaXggc2VjdXJlIE5ldEJTRCB0YXJnZXQsIHJlcGxhY2VkIGl0IHdpdGggYQot cmVndWxhciBvbmUsIHdoaWNoIGlzIGludm9rZWQgaW4gdGhlIG5vcm1hbCB3YXkgYnkgZGVmaW5p bmcgSzVJTkMgYW5kIEs1TElCCi10byBwb2ludCB0byB0byB3aGVyZSB0aGUgc3R1ZmYgaXMgaGlk ZGVuLiAgQ2xlYW5lZCB1cCBhbmQgbW9kZXJuaXplZCB0aGUKLWNvbW1lbnRzIGluIHRoZSBtYWtl ZmlsZSBhIGJpdC4gIG1ha2VmaWxlIDE1IEF1ZyAyMDA3LgotCi1DaGFuZ2VkIHNvbWUgZGF0YSB0 eXBlcyBhbmQgYWRkZWQgc29tZSBjYXN0cyB0byBja2N0ZWwuYyB0byBkbyBhd2F5IHdpdGgKLXRv bnMgb2YgInBvaW50ZXIgdGFyZ2V0cyBpbiBwYXNzaW5nIGFyZ3VtZW50IDEgb2YgJ3h4eCcgZGlm ZmVyIGluIHNpZ25lZG5lc3MiCi13YXJuaW5ncy4gIDE1IEF1ZyAyMDA3LgotCi1TZXQgdXAgTWFj IE9TIFggYXMgdGhlIHRlc3RiZWQgZm9yIHR0cHR5Y21kKCksIHdpdGggUGFuaXggYXMgdGhlIHJl bW90ZQotcGFydG5lciBvdmVyIGEgS2VyYmVyb3MgNSBjb25uZWN0aW9uLiAgVGhlIGZpcnN0IHRl c3QgaXMgdG8gc2VuZCBhIDMwMEsKLXRleHQgZmlsZSB3aXRoIGdrZXJtaXQgYXMgdGhlIGV4dGVy bmFsIHByb3RvY29sLiAgSXQgd29ya2VkIGZpbmUsIGFuZCB0aGUKLWRlYnVnIGxvZyBzaG93ZWQg YWxsIHRoZSByaWdodCBjb21wb25lbnRzIHdlcmUgYWN0aXZlIChuYW1lbHkgZW5jcnlwdGlvbiBh bmQKLXR0cHR5Y21kKSBba2VybWl0L3ptb2RlbSBzZW5kL3JlY2VpdmUgdGV4dC9iaW5hcnldOgot Ci0gIEtlcm1pdCAgICBabW9kZW0KLSAga3N0IE9LICAgIHpzdCBPSwotICBrc2IgT0sgICAgenNi IE9LCi0gIGtydCBPSyAgICB6cnQgT0sKLSAga3JiIE9LICAgIHpyYiBGYWlsZWQgInJ6OiBQZXJz aXN0ZW50IENSQyBvciBvdGhlciBFUlJPUiIKLQotV2UndmUgc2VlbiB0aGlzIGJlZm9yZS4gIFRo ZSBwcm9ibGVtIGlzIDB4ZmYsIFRlbG5ldCBJQUMsIGFzIEkgcHJvdmVkIHRvCi1teXNlbGYgYnkg Y29uc3RydWN0aW5nIGEgM01CIGZpbGUgdGhhdCBjb250YWluZWQgZXZlcnkgYnl0ZSBidXQgMHhm ZiBpbiBldmVyeQotbWl4dHVyZSBhbmQgb3JkZXIgYW5kIHRyYW5zZmVycmluZyBpdCBzdWNjZXNz ZnVsbHkgb3ZlciB0aGUgc2FtZSBjb25uZWN0aW9uLgotUHJlc3VtYWJseSB0aGUgVGVsbmV0IHNl cnZlciBpcyBkb3VibGluZyBJQUNzLCB3aGVyZWFzIG9mIGNvdXJzZSByeiBpcyBub3QKLXVuZG91 YmxpbmcsIHRodXMgdGhlIENSQyBlcnJvci4gIFRoaXMgaXMgcHJvZ3Jlc3MuICAxNSBBdWcgMjAw Ny4KLQotTG9nIHNob3dzIHRoYXQgaW5kZWVkIGV2ZXJ5IElBQyBpbiB0aGUgc291cmNlIGZpbGUg YXJyaXZlcyBkb3VibGVkLiAgQWRkaW5nCi1jb2RlIHRvIHJlbW92ZSB0aGUgZmlyc3QgSUFDIG9m IGV2ZXJ5IGFkamFjZW50IHBhaXIsIGEgc21hbGwgdGVzdCBmaWxlIHdpdGgKLWRpZmZlcmVudC1s ZW5ndGggcnVucyBvZiBJQUNzIHRyYW5zZmVycyBPSy4gIFRoZSAzTUIgYWxsLmJpbiBmaWxlIGRv ZXMgbm90LgotCi1TdGFydGluZyBvdmVyLi4uICBJIGNhbiByZWNlaXZlIGEgYmlnIHRleHQgZmls ZSB3aXRoIFptb2RlbSBPSy4gIFRoZSAzLjJNQgotYmluYXJ5IHRlc3QgcGF0dGVybiB0aGF0IGNv bnRhaW5zIG5vIElBQ3MgZmFpbGVkIGFmdGVyIDEuOE1CLCBidXQgdGhlIHBhcnQKLXRoYXQgaXQg dHJhbnNmZXJyZWQgd2FzIE9LLiAgQSBzZWNvbmQgdHJ5LCBhbG1vc3QgdGhlIHdob2xlIHRoaW5n IGFycml2ZWQsCi1pdCBzdG9wcGVkIGp1c3QgNTg0IGJ5dGVzIHNob3J0IG9mIHRoZSBlbmQuICBD b3VsZCBiZSB0aGF0IGZpbGUgc2l6ZSBpcyBhCi1zZXBhcmF0ZSBwcm9ibGVtLiAgTWFraW5nIGEg bmV3IGNvcHkgZXhhY3RseSAxTUIgbG9uZy4uLiAgV2VsbCwgdGhhdCdzCi1pbnRlcmVzdGluZywg dGhpcyBvbmUgdG9vIHN0b3BwZWQganVzdCBzaG9ydCBvZiB0aGUgZW5kLiAgQW5kIGFnYWluLCB0 aGUKLXNhbWUgdGhpbmcuICBXaGVuIGNvbm5lY3RpbmcgYmFjayB0byB0aGUgaG9zdCwgdGhlIGxh c3QgWm1vZGVtIHBhY2tldCBjYW4KLWJlIHNlZW4gb24gdGhlIHNjcmVlbjsgaXQncyBhcyBpZiB0 aGUgbG9jYWwgWm1vZGVtIGV4aXRlZCBiZWZvcmUgcmVhZGluZwotdGhlIGxhc3QgcGFja2V0Li4u ICBCdXQgT0ssIGlmIEkgY2hhbmdlIHRoZSBvcHRpb25zIG9uIHRoZSByZW1vdGUgc3oKLXNlbmRl ciB0byB1c2Ugc21hbGwgYmxvY2tzLCBldGMsIHRoZW4gaXQgd29ya3MuCi0KLU5vdywgY2hhbmdp bmcgZnJvbSB0aGUgMU1CIG5vLUlBQy1iaW5hcnkgdGVzdCBwYXR0ZXJuLCB0byB0aGUgMU1CIGFs bC12YWx1ZXMKLXRlc3QgcGF0dGVybiwgd2UgZmFpbCBhZnRlciA4MUsuICBCdXQgdGhlIHBhcnQg dGhhdCB3YXMgdHJhbnNmZXJyZWQgaXMKLWNvcnJlY3QuICBTZWNvbmQgdHJ5LCBzYW1lIHRoaW5n LCBidXQgNTdLLiAgVGhpcmQ6IDQwSy4gIEVhY2ggdGltZSwgdXBvbgotY29ubmVjdGluZyBiYWNr LCB0aGUgc2Vzc2lvbiBpcyBjb21wbGV0ZWx5IGRlYWQuCi0KLUlGIEkgSEFWRSBUTyB1bmRvdWJs ZSBJQUNzIGZvciBpbmNvbWluZyBmaWxlcywgZG9uJ3QgSSBoYXZlIHRvIGRvdWJsZSB0aGVtCi1n b2luZyBvdXQ/ICBUbyBzZW5kIGEgYmxvY2sgdG8gbmV0IHdlIGp1c3QgY2FsbCB0dG9sKCksIGJ1 dCB0dG9sKCkgZG9lc24ndAotZG8gYW55IGRvdWJsaW5nIChiZWNhdXNlIEtlcm1pdCBwcm90b2Nv bCBhbHdheXMgcXVvdGVzIDB4ZmYpLiAgVG8gc2VlIHdoYXQKLWhhcHBlbnMsIEkgY2hhbmdlZCB0 aGUgdHRvbCgpIGNhbGwgdG8gdHRvYygpIGluIGEgbG9vcCB0aGF0IGRvdWJsZXMgSUFDcy4gIEkK LXRlc3RlZCB0aGlzIGJ5IHNlbmRpbmcgdGhlIGZ1bGwgMy4yTUIgdGVzdCBwYXR0ZXJuLCB3aGlj aCB3b3JrZWQgZmluZS4KLQotRm9yIHJlY2VpdmluZywgaXQncyBzbG93IGJ1dCBpdCB3b3JrcyBP SyB3aXRoIGZpbGVzIHRoYXQgZG9uJ3QgY29udGFpbiBJQUNzCi0obXkgY29uY2VybiB3YXMgdGhh dCBJQUNzIG1pZ2h0IGFwcGVhciBpbiBvdXRib3VuZCBmaWxlcyBvciBpbiBabW9kZW0KLXByb3Rv Y29sIG1lc3NhZ2VzKS4gIEl0IHJlY2VpdmVzIHRoZSAxTUIgbm8tSUFDIHRlc3QgcGF0dGVybiwg c28gdGhlcmUgYXJlCi1ubyBwcm9ibGVtcyB3aXRoIHByb3RvY29sIG9yIHRpbWluZy4gIEJ1dCB0 aGUgZnVsbCB0ZXN0IHBhdHRlcm4gYWx3YXlzIGdldHMKLWN1dCBvZmYsIGJ1dCBhdCBkaWZmZXJl bnQgcG9pbnRzLCBhcyBiZWZvcmUsIHdpdGggdGhlIHJlbW90ZSBzZXNzaW9uIGRlYWQuCi1DaGFu Z2luZyB0aGUgWm1vZGVtIHJlY2VpdmVyIGZyb20gcnogdG8gbHJ6IG9uIHRoZSBsb2NhbCBlbmQg KHNpbmNlIHRoZQotc2VuZGVyIG9uIHRoZSByZW1vdGUgZW5kIGlzIGxzeikgZG9lcyBub3QgY2hh bmdlIHRoZSBiZWhhdmlvci4KLQotQW55d2F5LCBJIHdlbnQgYmFjayBhbmQgcmVwbGFjZWQgdGhl IGJ5dGUgbG9vcCB3aXRoIHNvbWV0aGluZyBtb3JlCi1lZmZpY2llbnQsIGFuZCBpdCBnb2VzIGFi b3V0IDIwIHRpbWVzIGZhc3Rlci4gIEJ1dCB0aGlzIGRvZXNuJ3QgaGVscCBlaXRoZXIsCi1pdCBv bmx5IG1ha2VzIGl0IGZhaWwgZmFzdGVyLiAgQnV0IGFoYSwgd2hhdCBpZiBhIGRvdWJsZWQgSUFD IGlzIGJyb2tlbgotYWNyb3NzIHN1Y2Nlc3NpdmUgcHR5IHJlYWRzIC0tIHdlIGhhdmUgdG8gbWFr ZSB0aGUgInByZXZpb3VzIGNoYXJhY3RlciIKLW1lbW9yeSBwZXJzaXN0ZW50LiAgV2VsbCwgdGhh dCB3YXMgYSBnb29kIGluc2lnaHQsIGJ1dCBpdCBzdGlsbCBkaWRuJ3QgZml4Ci1pdC4gIFRoZSBs b2cgc2hvd3MgdGhlIElBQyBoYW5kbGluZyBjb2RlIGlzIHdvcmtpbmcgZmluZS4KLQotV2hhdCBk b2VzIHN6IHNheT8gIENhcHR1cmluZyBpdHMgc3RkZXJyIHRvIGEgZmlsZS4uLiAiUmV0cnkgMTog R290IFpDQU4iLgotTmV4dCB0aW1lOiAiUmV0cnkgMTogR290IFRJTUVPVVQiLiAgTmV4dCB0aW1l OiBHb3QgWkNBTi4KLQotVHJ5aW5nIGRpZmZlcmVudCBabW9kZW0gb3B0aW9ucy4uLiAgYXBwYXJl bnRseSBJIGRvbid0IG5lZWQgdG8gdXNlIHNob3J0Ci1ibG9ja3MuICBCdXQgSSBkbyBuZWVkIHRv IHVzZSAtZSwgcHJvYmFibHkgYmVjYXVzZSBvZiBUZWxuZXQgTlZUIHRyZWF0bWVudAotb2YgY2Fy cmlhZ2UgcmV0dXJuOyB3aXRob3V0IC1lLCB0aGVyZSBpcyBhICJwZXJzaXN0ZW50IENSQyBlcnJv ciIuICAtTwotZGlzYWJsZXMgdGltZW91dHMsIGJ1dCB0aGlzIG1ha2VzIG5vIGRpZmZlcmVuY2Uu Ci0KLU9LLCB3ZSBzdGlsbCBoYXZlIHR3byBCaWcgUHJvYmxlbXM6Ci0KLSAxLiBXaGVuIGEgbG9u ZyBmaWxlIGhhcyBubyBJQUNzLCB0aGUgZmluYWwgPCAxSyBvZiB0aGUgZmlsZSBpcyBub3QgcmVj ZWl2ZWQuCi0gMi4gV2hlbiBhIGxvbmcgZmlsZSBoYXMgSUFDcywgdGhlIHRyYW5zZmVyIGdlbmVy YWxseSBzdG9wcyB2ZXJ5IGVhcmx5LgotCi1Qcm9ibGVtIDE6IHRoZSB0cmFuc2ZlciBjb25zaXN0 ZW50bHkgZmFpbHMgbGVzcyB0aGFuIDFLIGZyb20gdGhlIGVuZCBvZiB0aGUKLWZpbGUuICBVcG9u IENPTk5FQ1QgYmFjayB0byB0aGUgaG9zdCwgYSBiaWcgWm1vZGVtIHBhY2tldCBpcyBzaXR0aW5n IHRoZXJlCi13YWl0aW5nIHRvIGJlIHJlYWQsIHdoaWNoIG1lYW5zIHR0cHR5Y21kKCkncyBjb3B5 IG9mIHJ6IGlzIHRlcm1pbmF0aW5nCi1lYXJseS4gIENhbiB3ZSBjYXRjaCBpdCBpbiB0aGUgZGVi dWcgbG9nPyAgRG9pbmcgdGhpcyB0YWtlcyBmb3JldmVyIGFuZAotd3JpdGVzIGEgR0IgdG8gdGhl IGRpc2suLi4gIEFuZCB0aGVuIHRoZSBwcm9ibGVtIGRvZXNuJ3QgaGFwcGVuLiAgQWxzbywgSQot Y2FuIHJlY2VpdmUgYSBIVUdFIHRleHQgZmlsZSBhbG1vc3QgaW5zdGFudGx5IHdpdGggbm8gZXJy b3JzIGF0IGFsbC4KLQotU3dpdGNoaW5nIHRvIGxyeiBvbiB0aGUgcmVjZWl2aW5nIGVuZCwgbm93 IEkgc2VlIHRoZSBlcnJvciBtZXNzYWdlcywgYWJvdXQKLTMwMCBsaW5lcyBsaWtlIHRoaXM6Ci0K LSAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAotICBCeXRlcyByZWNlaXZlZDogIDg3 MjM1Mi8xMDAwMDAwICAgQlBTOjg1NDY0ICBFVEEgMDA6MDEgIFJldHJ5IDA6IEJhZCBDUkMKLSAg Qnl0ZXMgcmVjZWl2ZWQ6ICA4OTI0NDgvMTAwMDAwMCAgIEJQUzo4NjY5MCAgRVRBIDAwOjAxICBS ZXRyeSAwOiBCYWQgQ1JDCi0gIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKLSAgUmV0 cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAotICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4 Y2VlZGVkCi0gIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKLSAgUmV0cnkgMDogR2Fy YmFnZSBjb3VudCBleGNlZWRlZAotICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCi0g IFJldHJ5IDA6IEdvdCBFUlJPUgotICBCeXRlcyByZWNlaXZlZDogIDg5ODMzNi8xMDAwMDAwICAg QlBTOjg0MjkzICBFVEEgMDA6MDEgIFJldHJ5IDA6IEJhZCBDUkMKLSAgUmV0cnkgMDogR2FyYmFn ZSBjb3VudCBleGNlZWRlZAotICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCi0gIEJ5 dGVzIHJlY2VpdmVkOiAgOTAwMzg0LzEwMDAwMDAgICBCUFM6ODM3NTEgIEVUQSAwMDowMSAgQmFk IGVzY2FwZSBzZXF1ZW5jZQotICAyZlJlCi0gIHRyeSAwOiBCYWQgZGF0YSBzdWJwYWNrZXQKLSAg Qnl0ZXMgcmVjZWl2ZWQ6ICA5NDE0NzIvMTAwMDAwMCAgIEJQUzo4NjE5MSAgRVRBIDAwOjAwICBS ZXRyeSAwOiBCYWQgQ1JDCi0gIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKLQotRXZl biB3aGVuIGl0IHN1Y2NlZWRzLCBpdCBnZXRzIHRoZXNlLiAgQnV0IGlmIEkgcmVjZWl2ZSBhIHRl eHQgZmlsZSwgbm8KLW1hdHRlciBob3cgYmlnLCBubyBlcnJvcnMgb3IgcmV0cmllcyBvciB0aW1l b3V0cyBhdCBhbGwuICBTbyBpdCBhcHBlYXJzIHRoYXQKLXRoZXJlIGlzIG9ubHkgb25lIHByb2Js ZW06IGEgYmlnLXRpbWUgbGFjayBvZiB0cmFuc3BhcmVuY3kgcmVnYXJkaW5nIDgtYml0Ci1hbmQv b3IgY29udHJvbCBjaGFyYWN0ZXJzLiAgVGhlIG9kZCB0aGluZyBpcywgaXQncyBub3QgdGhhdCB0 aGUgY2hhcmFjdGVycwotY2FuJ3QgZ2V0IHRocm91Z2ggLS0gdGhleSBhbGwgY2FuIC0tIGJ1dCB0 aGV5IHNlZW0gdG8gY2F1c2UgdHJhbnNpdG9yeQotYmxvY2thZ2VzLiAgMTYgQXVnIDIwMDcuCi0K LUNsZWFuZWQgdXAgdGhlIHJlbWFpbmluZyBwb2ludGVyIHNpZ25lZG5lc3Mgd2FybmluZ3MgaW4g Y2t1dGlvLmMsIGJ1dCB0aGlzCi13YXMgYSBtaXN0YWtlLCBpdCBicm9rZSBLZXJiZXJvcyBjb25u ZWN0aW9ucyBjb21wbGV0ZWx5LiAgVW5kaWQgdGhlIGNoYW5nZXMuCi1ja3V0aW8uYywgMTcgQXVn IDIwMDcuCi0KLUNoYW5nZWQgYWxsIHJldHVybigpIGluIHRoZSBmb3JrKCk9PTAgc2VjdGlvbiBv ZiB0dHB0eWNtZCgpIHRvIGV4aXQoKS4KLWNrdXRpby5jLCAxNyBBdWcgMjAwNy4KLQotVHJpZWQg ZXhwbGljaXRseSBzZXR0aW5nIHRoZSBzbGF2ZSBwdHkgdG8gcmF3bW9kZS4gIE1ha2VzIG5vIGRp ZmZlcmVuY2UuCi1UcmllZCB1c2luZyB0aGUgTWFjIE9TIFggKGN1cnNlcykgcmF3KCkgZnVuY3Rp b24sIGFuZCBhbHNvIHN5c3RlbSgic3R0eQotcmF3Iik7IHN0aWxsIG5vIGRpZmZlcmVuY2UuICBU cmllZCBkb2luZyBhbGwgb2YgdGhlc2UgaW4gZGlmZmVyZW50Ci1jb21iaW5hdGlvbnMgYW5kIG9y ZGVycy4gIEkgZm91bmQgb25lIGNvbWJpbmF0aW9uIHRoYXQgY3V0cyB0aGUgZXJyb3JzIGFib3V0 Ci1pbiBoYWxmLCBhbmQgdGhlIHRyYW5zZmVyIG9mIHRoZSBuby1JQUMgdGVzdCBwYXR0ZXJuIGFs bW9zdCBhbHdheXMgc3VjY2VlZHMKLShidXQgaXQncyBzbG93KS4gIEFueXdheSwgaXQgZG9lc24n dCBoZWxwIG11Y2ggd2l0aCB0aGUgdGVzdCBwYXR0ZXJuIHRoYXQKLWNvbnRhaW5zIElBQ3MuICBX ZWxsLCB0aGUgY29kZSBpcyBtb3JlIHNvbGlkIHRoYW4gaXQgd2FzIGJlZm9yZSBidXQKLWZ1bmN0 aW9uYWxseSB3ZSBoYXZlIG5vdCBhZHZhbmNlZCBtdWNoIGlmIHdlIGNhbid0IGRvd25sb2FkIGEg YmluYXJ5IGZpbGUKLXdpdGggWm1vZGVtISAgT24gdGhlIG90aGVyIGhhbmQsIHdlIGNhbiB1cGxv YWQgdGhlbSwgYW5kIHdlIGNhbiB0cmFuc2ZlcgotdGV4dCBmaWxlcyBpbiBib3RoIGRpcmVjdGlv bnMsIHdoaWNoIGlzIGFuIGltcHJvdmVtZW50IG92ZXIgdGhlIHByZXZpb3VzCi1zaXR1YXRpb24s IGluIHdoaWNoIHRoZSBlbnRpcmUgc2Vzc2lvbiB3b3VsZCBoYW5nIGR1ZSB0byBsb3NzIG9mCi1z eW5jaHJvbml6YXRpb24gb2YgdGhlIGVuY3J5cHRpb24gc3RyZWFtLgotCi1UcmllZCBhZGRpbmcg LWZ1bnNpZ25lZC1jaGFyIHRvIENGTEFHUyBvZiBNYWMgT1MgWCB0YXJnZXQuICBJdCBkb2VzIG5v dAotbWFrZSB0aGUgInNpZ25lZG5lc3MiIHdhcm5pbmdzIGdvIGF3YXkgYW5kIGl0IGRvZXNuJ3Qg Y2hhbmdlIHRoZSBydW50aW1lCi1zeW1wdG9tcy4KLQotSSB0cmllZCBhIHNpbXBsZXIgdmVyc2lv biBvZiBwdHlfbWFrZV9yYXcoKSwgdGhlIG9uZSBmcm9tIFNlcmcgSWFrb3ZsZXYsIGJ1dAotaXQg d2FzIGEgdG90YWwgZmFpbHVyZS4gIFRoYXQncyBlbmNvdXJhZ2luZyB0aG91Z2gsIGJlY2F1c2Ug aXQgaW5kaWNhdGVzCi10aGF0IHB0eV9tYWtlX3JhdygpIGlzIHRoZSByaWdodCBwbGFjZSB0byBi ZSB3b3JraW5nLgotCi1UaGVuIEkgbWFkZSBwdHlfbWFrZV9yYXcoKSBzZXQgb3IgdW5zZXQgZXZl cnkgc2luZ2xlIHRlcm1pbmFsIGZsYWcKLWV4cGxpY2l0bHkuICBUaGlzIG1hZGUgbm8gZGlmZmVy ZW5jZSwgYnV0IGRpZG4ndCBodXJ0IGFueXRoaW5nIGVpdGhlci4KLQotVGhlbiBJIG1hZGUgcHR5 X21ha2VfcmF3KCkgZXhwbGljaXRseSBzZXQgYWxsIHRoZSBjX2NjW10gY2hhcmFjdGVycyB0byAw Ci0oYnV0IGxlZnQgY19jY1tWTUlOXSBhcyAxKS4gIFRoaXMgbWFkZSBubyBkaWZmZXJlbmNlIGVp dGhlci4KLQotSSBjaGVja2VkIHB0eV9tYWtlX3JhdygpIGFnYWluc3QgdHRwa3QoKSBhbmQgdGhl IG9ubHkgZGlmZmVyZW5jZSBJIGZvdW5kIGluCi10aGUgdGVybWluYWwgZmxhZ3MgaXMgdGhhdCB0 dHBrdCgpIHNldHMgSUdOUEFSIHRoaW5raW5nIGl0IG1lYW5zICJpZ25vcmUKLXBhcml0eSBlcnJv cnMiIHdoZW4gcmVhbGx5IGl0IG1lYW5zICJkaXNjYXJkIGFueSBjaGFyYWN0ZXIgdGhhdCBoYXMg YSBwYXJpdHkKLWVycm9yIiAoYXQgbGVhc3QgYWNjb3JkaW5nIHRvIElha292bGV2KSAtLSBleGFj dGx5IHRoZSBvcHBvc2l0ZS4gIEJ1dCBJCi10cmllZCBpdCBib3RoIHdheXMsIG5vIGRpZmZlcmVu Y2UuICAxNyBBdWcgMjAwNy4KLQotSSBub3RpY2VkIHRoYXQgZXZlbiBabW9kZW0gdGV4dCByZWNl aXZlcyBjYW4gZmFpbC4gIFRoZXkgZG9uJ3QgZ2V0IGFueQotZXJyb3JzLCB0aGV5IGp1c3QgZ2V0 IGN1dCBvZmYgc2hvcnRseSBiZWZvcmUgdGhlIGVuZC4gIChCdXQgdXN1YWxseSB0aGV5Ci1zdWNj ZWVkLCBhbmQgZmFzdCB0b28sIGxpa2UgNTAwSyBjcHMpLgotCi1XaGF0IGlmIEkgZG9uJ3QgY2Fs bCBwdHlfbWFrZV9yYXcoKSBhdCBhbGwgb24gdGhlIHNsYXZlIHB0eT8KLQotenJ0OiBFRVNTU1NT U1NTOiA4MCUgZ29vZCAoRSA9IHN0b3BwZWQganVzdCBiZWZvcmUgZW5kIGJ1dCBubyBvdGhlciBl cnJvcnMpCi0KLXpyYiBuby1JQUMgdGVzdCBwYXR0ZXJuLCBzaG9ydCBibG9ja3M6Ci0gMS4gUy81 IChzdWNjZXNzIHdpdGggNSBzY3JlZW5zIG9mIGVycm9ycy4KLSAyLiBTLzcKLSAzLiBTLzcKLSA0 LiBTLzYKLSA1LiBFLzcgKGZhaWxlZCBqdXN0IGJlZm9yZSBlbmQpCi0gNi4gUy83Ci0gNy4gUy82 Ci0gOC4gUy82Ci0gOS4gUy82Ci0xMC4gUy80Ci0KLVNvLCBsb3RzIG9mIGVycm9ycywgYnV0IGl0 IHJlY292ZXJlZCA5MCUgb2YgdGhlIHRpbWUuCi1OZXh0LCBzYW1lIHRoaW5nLCBidXQgd2l0aG91 dCByZXF1ZXN0aW5nIHNob3J0IGJsb2NrczoKLQotIDEuIEUvNQotIDIuIFMvNQotIDMuIEUvNAot IDQuIFMvNQotIDUuIFMvNQotIDYuIFMvNQotIDcuIFgvMCAoaGFyZCBmYWlsdXJlIHJpZ2h0IGF3 YXk6ICJHb3QgWkNBTiIKLSA4LiBTLzUKLSA5LiBTLzUKLTEwLiBTLzUKLQotU28gaXQgZG9lc24n dCBsb29rIGxpa2Ugc2hvcnQgYmxvY2tzIG1ha2UgdGhhdCBtdWNoIGRpZmZlcmVuY2UuICBOb3cg d2hhdCBpZgotSSB0dXJuIG9mZiBwcmVmaXhpbmc/ICBCYWQgQ1JDLCBmYWlscyBpbW1lZGlhdGVs eSBldmVyeSB0aW1lLiAgUHV0dGluZyBiYWNrCi1wdHlfbWFrZV9yYXcoc2xhdmUpLCBpdCBzdGls bCBmYWlscyBoYXJkLgotCi1UcmllZCBhIG5ldyBzdHJhdGVneSB3aXRoIHB0eV9tYWtlX3Jhdygp OiByYXRoZXIgdGhhbiBtb2RpZnkgZXhpc3RpbmcgZmxhZ3MsCi1JIHNldCBhbGwgZmxhZ3MgdG8g MCwgYW5kIHRoZW4gdHVybiBvbiBvbmx5IHRob3NlIGZldyB0aGF0IHdlIG5lZWQgbGlrZSBDUzgu Ci1Ob3cgd2UgZ2V0IG9ubHkgMi41IHNjcmVlbnMgb2YgZXJyb3JzIGluc3RlYWQgNC03IGFuZCB0 aGUgdHJhbnNmZXIgcmF0ZSBpcwotaGlnaGVyIGZvciBiaW5hcnkgZmlsZXMgKGFsbCBvZiB0aGUg cHJldmlvdXMgb25lcyB3ZXJlIHVuZGVyIDEwMEsgQ1BTLCB3aGlsZQotZm9yIHRleHQgZmlsZXMg aXQgd2FzIDQwMC01MDBLIENQUyk6Ci0KLSAxLiBTLzIgMTk1NjY5IENQUwotIDIuIFMvMiAxOTQ3 MjAKLSAzLiBFLzMKLSA0LiBTLzIgMTkyNTUwCi0gNS4gUy8zIDE5MjMyNQotIDYuIFMvMyAxNDUw NjYKLSA3LiBTLzIgMjAwNjg5Ci0gOC4gUy8zIDE4ODk0OAotIDkuIFMvMiAyMDk0NjEKLTEwLiBT LzMgMTgxOTkxCi0KLUkgbm90aWNlZCB0aGF0IHRoZXJlIHdhcyBubyBUSU9DU1RUWSBpb2N0bCBp biB0aGUgcHR5L2Zvcmsgc2V0dXAgc2VxdWVuY2UsCi13aGljaCBpcyByZWNvbW1lbmRlZCBzb21l d2hlcmUsIHNvIEkgdHJpZWQgdGhhdCBhbmQgaXQgd2FzIGEgZGlzYXN0ZXI7IHRoZQotZW50aXJl IHNlc3Npb24gaHVuZy4gIEkgdG9vayBpdCBiYWNrIG91dC4gIDE4IEF1ZyAyMDA3LgotCi1Ucmll ZCBzb21lIHRyYW5zZmVycyBvdmVyIGEgY2xlYXItdGV4dCAobm90IGVuY3J5cHRlZCkgY29ubmVj dGlvbiB3aXRoIHRoZQotc2FtZSByZXN1bHRzOiBzbW9vdGgsIGZhc3QgdHJhbnNmZXIgb2YgYSBi aWcgdGV4dCBmaWxlICg0MDBLIGNwcyk7IHJvY2t5IGJ1dAotc3VjY2Vzc2Z1bCB0cmFuc2ZlciBv ZiB0aGUgbm8tSUFDIGJpbmFyeSBwYXR0ZXJuIGZpbGUgKDEzNUsgY3BzKS4gIFN3aXRjaGluZwot YmFjayB0byB0dHJ1bmNtZCgpLCB0aGUgc2FtZSBiaW5hcnkgZmlsZSBpcyByZWNlaXZlZCBhdCAx LjVNIGNwcywgYW5kIHRoZQotbm8tSUFDIGJpbmFyeSBmaWxlIHRvdGFsbHkgZmFpbHMgYWZ0ZXIg dG9vIG1hbnkgIkJhZCBDUkMiczsgYW5kIHdlIGFscmVhZHkKLWtub3cgdGhhdCBhbnkgZmlsZSB0 aGF0IGNvbnRhaW5zIElBQ3Mgd2lsbCBmYWlsLiAgT25lIG1pZ2h0IHNheSB0aGF0Ci10dHB0eWNt ZCgpIGlzIGJldHRlciBpbiBldmVyeSByZXNwZWN0IHRoYW4gdHRydW5jbWQoKSBleGNlcHQgaW4g c3BlZWQKLSh3aGVuIGl0IHdvcmtzKS4KLQotTGV0J3Mgc2VlIGlmIHR0eXB0eWNtZCBzdGlsbCB3 b3JrcyBpbiByZW1vdGUgbW9kZSAodG8gbG9jYWwgSzk1KToKLSAuIHN6IC8gdGV4dCB3b3Jrcywg YnV0IHNsb3dseS4KLSAuIGxzeiAvIHRleHQgd29ya3MgYnV0IHNvbWUgd2VpcmQgZXJyb3JzIGFy ZSByZXBvcnRlZC4KLSAuIGxzeiAvIGJpbmFyeSAvIG5vIElBQyBkb2Vzbid0IHdvcmsgYXQgYWxs IChDUkMtMzIgbWlzbWF0Y2ggZm9yIGEgaGVhZGVyOwotICAgICAgICBVbmV4cGVjdGVkIGNvbnRy b2wgY2hhcmFjdGVyIGlnbm9yZWQ6IDEzLCBldGMpLgotIC4gc3ogLyBiaW5hcnkgLyBubyBJQUMg d29ya3MgT0sgYnV0IHNsb3cuCi0gLiBzeiAvIGJpbmFyeSAvIGZ1bGwgdGVzdCBwYXR0ZXJuIHdp dGggSUFDIHdvcmtzIE9LIGJ1dCBzbG93LgotIC4gU2VuZGluZyB0ZXh0IGludG8gcnogZmFpbHMg Y29tcGxldGVseS4KLQotV2hhdCBhYm91dCB0dHJ1bmNtZCgpIGluIHJlbW90ZSBtb2RlPwotIC4g c2VuZCAvdGV4dCB3b3JrcywgZmFzdC4KLSAuIHNlbmQgL2JpbmFyeSB3b3JrcywgZmFzdC4gCi0g LiByZWNlaXZlIC90ZXh0IHdvcmtzLCBub3Qgc28gZmFzdCBidXQgbm90IGJhZC4KLSAuIHJlY2Vp dmUgL2JpbmFyeSB3b3Jrcywgbm90IHNvIGZhc3QgYnV0IG5vdCBiYWQuCi0KLVNvIHdlIHVzZSB0 dHJ1bmNtZCgpIGZvciByZW1vdGUgbW9kZSwgYW5kIHdlIHVzZSBpdCBmb3IgbG9jYWwgbW9kZQot c2VyaWFsLXBvcnQgYW5kIG1vZGVtIGNvbm5lY3Rpb25zLCBhbmQgd2UgdXNlIHR0cHR5Y21kKCkg b24gbmV0d29yawotY29ubmVjdGlvbnMgYmVjYXVzZSAoYSkgdGhleSBtaWdodCBiZSBlbmNyeXB0 ZWQsIGFuZCAoYikgZXZlbiBpZiB0aGV5IGFyZQotbm90LCB0aGV5IHVzZSBzb21lIHByb3RvY29s IHRoYXQgd2UgaGF2ZSB0byBoYW5kbGUsIGUuZy4gVGVsbmV0LCBSbG9naW4uCi0xOSBBdWcgMjAw Ny4KLQotRGlzY292ZXJlZCB0aGF0IFNlbmRpbmcgYmluYXJ5IGZpbGVzIG5vIGxvbmdlciB3b3Jr cy4gIFRleHQgaXMgT0ssIGJpbmFyeQotdHJhbnNmZXJzIGRvbid0IGV2ZW4gc3RhcnQuICBUaGlz IGhhcHBlbnMgb24gYm90aCBlbmNyeXB0ZWQgYW5kIGNsZWFyLXRleHQKLWNvbm5lY3Rpb25zLiAg dHRwdHljbWQoKSBpcyBiZWluZyB1c2VkIGluIGJvdGggY2FzZXMuICBCdXQgb2RkbHkgZW5vdWdo LAotcmVjZWl2aW5nIGJpbmFyeSBzdGlsbCB3b3JrcyBhcyBiZWZvcmUuICBXaGF0IGRpZCBJIGJy ZWFrLCBhbmQgd2hlbj8KLU9oLCBpdCB3YXMganVzdCB0aGUgc2NyaXB0LCB3aGVuIEkgY2hhbmdl ZCBpdCBmcm9tIHVzaW5nIHN6IHRvIGxzei4gIFB1dHRpbmcKLWl0IGJhY2sgdG8gc3ogbWFrZXMg aXQgd29yaywgZXZlbiB3aXRoIHRoZSBmdWxsIDMuMk1CIGJpbmFyeSBwYXR0ZXJuIHdpdGgKLUlB Q3MuCi0KLUkgYmFja2VkIG9mZiB0aGUgY2hhbmdlcyBJIG1hZGUgdG8gY2tjdGVsLmMgdG8gc3Vw cHJlc3Mgc29tZSB3YXJuaW5ncywgaW4KLXZpZXcgb2YgdGhlIGZhY3QgdGhhdCBzaW1pbGFyIGNo YW5nZXMgdG8gY2t1dGlvLmMgYnJva2UgdGhpbmdzIHNvIGJhZGx5LgotMTkgQXVnIDIwMDcuCi0K LUlmIHN6IGlzIG5vdCBnaXZlbiB0aGUgLWUgZmxhZywgaXQgc2VuZHMgY29udHJvbCBjaGFyYWN0 ZXJzIGJhcmUsIGV4Y2VwdCBeUCwKLV5RLCBeUywgYW5kIF5YLiAgXlggaXMgdGhlIGNvbnRyb2wg cHJlZml4LCBzbyBeQSBpcyBzZW50IF5YIGZvbGxvd2VkIGJ5IEEuCi1XaXRoIC1lLCBhbGwgQzAg Y29udHJvbCBjaGFycyBhcmUgcHJlZml4ZWQsIGJ1dCB3aXRoIF5YLCB3aGljaCBpcywgb2YKLWNv dXJzZSwgYSBjb250cm9sIGNoYXJhY3Rlci4gIEludGVyZXN0aW5nbHksIHRoZSBDMSBhbmFsb2dz IG9mIF5QLCBeUSwgXlMKLShidXQgbm90IF5YIGFuZCwgdW5mb3J0dW5hdGVseSwgbm90IElBQykg YXJlIGFsc28gcHJlZml4ZWQuICAtZSBtYWtlcyBubwotZGlmZmVyZW5jZSBmb3IgOC1iaXQgY2hh cmFjdGVycy4KLQotSWYgd2UgaGF2ZSBhIFRlbG5ldCBjb25uZWN0aW9uIGFuZCB0aGUgc2VydmVy IGlzIGluIEFTQ0lJIChOVlQpIG1vZGUsIENSIGlzCi1hbHdheXMgZm9sbG93ZWQgYnkgTEYgb3Ig TlVMLiAgV2VsbCwgaXQgc2VlbXMgdGhlIHNlcnZlciBpcyBwdXR0aW5nIHVzCi0oS2VybWl0KSBp biBiaW5hcnkgbW9kZSBpbiB0aGlzIGNhc2UsIGJ1dCBzdGF5aW5nIGluIEFTQ0lJIG1vZGUgaXRz ZWxmLgotQWRkZWQgY29kZSB0byBoYW5kbGUgTlZUIGJ5dGUgc3R1ZmZpbmcgYW5kIHVuc3R1ZmZp bmcgaW4gZWFjaCBkaXJlY3Rpb24KLWluZGVwZW5kZW50bHksIGFjY29yZGluZyB0byB0aGUgVFJB TlNNSVRfQklOQVJZIHN0YXRlIGluIHRoYXQgZGlyZWN0aW9uLiAgSQotbWFkZSBhIGZpbGUgY29u dGFpbmluZyBqdXN0IHRoZSBieXRlcyAwLTMxIGFuZCAxMjcgYW5kIDEyOC0xNTkgYW5kIDI1NSAo NjYKLWJ5dGVzIGFsbCB0b2dldGhlcikgYW5kIHNlbmRpbmcgaXQgZnJvbSB0aGUgaG9zdCB0byBD LUtlcm1pdCwgdGhlIGxvY2FsIGxvZwotc2hvd3MgdGhhdCBldmVyeSBjb250cm9sIGNoYXJhY3Rl ciB3YXMgcmVjZWl2ZWQgY29ycmVjdGx5IGFuZCBhbGwgVEVMTkVUCi1jb252ZXJzaW9ucyB3ZXJl IGRvbmUgcmlnaHQgLS0gTlVMIHJlbW92ZWQgYWZ0ZXIgQ1IgKGFuZCBvbmx5IGFmdGVyIENSKTsg SUFDCi1yZW1vdmVkIGFmdGVyIElBQyAoYW5kIG9ubHkgYWZ0ZXIgYW4gSUFDIG1lYW50IGFzIGEg cXVvdGUpLiAgRm9yIHRoZSBmaXJzdAotdGltZSwgSSBjYW4gcmVjZWl2ZSB0aGUgMU1CIGFsbC12 YWx1ZXMgdGVzdCBwYXR0ZXJuLCBidXQgdGhlcmUgYXJlIHN0aWxsCi10b25zIG9mIChjb3JyZWN0 YWJsZSkgQ1JDIGVycm9ycywgc28gdGhlIHRyYW5zZmVyIHJhdGUgaXMgcmVhbGx5IGF3ZnVsLCBs aWtlCi1hYm91dCA1JSBvZiB3aGF0IHdlIGdldCB3aXRoIGEgdGV4dCBmaWxlICgyNUtjcHMgaW5z dGVhZCBvZiA1MDApLgotCi1GdXJ0aGVyIGV4cGVyaW1lbnRhdGlvbiBzaG93cyB0aGF0IHRoZSBm dW5kYW1lbnRhbCB0cmFuc3BhcmVuY3kgcHJvYmxlbSBpcwotZml4ZWQ7IHdlIGNhbiByZWNlaXZl IHNob3J0IGZpbGVzIChzYXksIDFLIG9yIGxlc3MpIGNvbnRhaW5pbmcgYWJzb2x1dGVseQotYW55 IGJ5dGUgdmFsdWVzIGluIGFueSBjb21iaW5hdGlvbiB3aXRoIG5vIGVycm9ycyBhdCBhbGwuICBC dXQgb25jZSB0aGUgZmlsZQotc2l6ZSByZWFjaGVzIChzYXkpIDEwSywgd2UgZ2V0IENSQyBlcnJv cnMsIGxpa2Ugb25lIGV2ZXJ5IDIgb3IgM0sgb2YgZGF0YS4KLVRoZXNlIGFyZSBub3QgZGV0ZXJt aW5pc3RpYy4gIEluIHN1Y2Nlc3NpdmUgdHJhbnNmZXJzIG9mIHRoZSBzYW1lIGZpbGUsIHRoZXkK LWNvbWUgaW4gZGlmZmVyZW50IHNwb3RzLiAgSXQncyB0ZW1wdGluZyB0byBibGFtZSBwdHkgYnVm ZmVyIG92ZXJydW5zLCBidXQKLXRoZW4gdGV4dCBmaWxlcyB3b3VsZCBzaG93IHRoZSBzYW1lIGJl aGF2aW9yLiAgV2hlbiBhIGJpbmFyeSBmaWxlIHNpemUKLWV4Y2VlZHMsIHNheSwgMU1CLCB0aGUg Y2hhbmNlcyBvZiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gZ28gd2F5IGRvd24sCi1pbmRlcGVuZGVu dCBvZiB3aGV0aGVyIG15IGV4dGVybmFsIHByb3RvY29sIGlzIHJ6IG9yIGxyei4gIEkgbGlrZSBs cnogYmV0dGVyCi1iZWNhdXNlIHRoZSBlcnJvciByZXBvcnRzIGNvbWUgb3V0IG9uIHRoZSBzY3Jl ZW4gYXMgdGhlIHRyYW5zZmVyIGlzIGdvaW5nCi1vbi4gIFRyeWluZyB0byBkb3dubG9hZCBhIHJl YWwtd29ybGQgYmluYXJ5IGZpbGUgLS0gYSAyLjJNQiBDLUtlcm1pdAotZXhlY3V0YWJsZSAtLSBJ IGdldCA0NTAwIGVycm9yIG1lc3NhZ2VzIGJ1dCB0aGUgdHJhbnNmZXIgZXZlbnR1YWxseSBzdWNj ZWVkcywKLXdpdGggYW4gZWZmZWN0aXZlIHRocm91Z2hwdXQgb2YgMjFLY3BzLgotCi1BY3R1YWxs eSBpdCB0dXJucyBvdXQgdGhhdCAic3ogLWEgc29tZWJpZ3RleHRmaWxlIiAoMi4yTUIpIGFsc28g Z2V0cyBhIGxvdAotb2YgQ1JDIGVycm9ycy4gIFRoZSAtZSBmbGFnIChlc2NhcGUgYWxsIGNvbnRy b2wgY2hhcmFjdGVycykgbWFrZXMgdGhlIHNhbWUKLWJpZyB0ZXh0IGZpbGUgdHJhbnNmZXIgd2l0 aCBmZXcgb3Igbm8gZXJyb3JzLiAgSXQncyBub3Qgc3VyZS1maXJlLgotU29tZXRpbWVzIG5vIGVy cm9ycywgc29tZXRpbWVzIG9uZSBvciB0d28sIGFuZCBzb21ldGltZXMgYSBmYXRhbCBlcnJvciB0 aGF0Ci1raWxscyB0aGUgdHJhbnNmZXIuCi0KLVdpdGggYmluYXJ5IGZpbGVzLi4uIGEgMzJLIGJp bmFyeSBmaWxlIHNlZW1zIHRvIG1ha2UgaXQgZXZlcnkgdGltZS4gIDQwSwotZmFpbHMgYWJvdXQg NTAlIG9mIHRoZSB0aW1lLiAgNDhLIGZhaWxzIDYwJSBhbmQgZXZlcnkgdGltZSBpdCBmYWlscywg aXQgaGFzCi1jcmVhdGVkIGEgcGFydGlhbCBmaWxlIG9mIGV4YWN0bHkgMzJLICgzMjc2OCBieXRl cykuICA5NksgZmFpbHMgOSBvdXQgb2YgMTAKLXRpbWVzLCB3aGVuIGl0IGZhaWxzLCB0aGUgcGFy dGlhbCBmaWxlIGlzIGFsd2F5cyAwIGJ5dGVzLCBvciAzMjc2OCwgb3IKLTY1NTM2LCBidXQgdGhh dCBqdXN0IG1lYW5zIHRoYXQgcnoncyBmaWxlIG91dHB1dCBidWZmZXIgaXMgMzJLLgotCi1XaHks IHRoZW4sIGRvIGJpbmFyeSBmaWxlcyBjYXVzZSB0cm91YmxlIGlmIGl0IGlzIG5vdCBhIHNvbGlk IHRyYW5zcGFyZW5jeQotcHJvYmxlbT8gIElmIGEgY2VydGFpbiBmaWxlIGNhbiBnZXQgdGhyb3Vn aCBvbmNlLCB3aHkgY2FuJ3QgaXQgZ2V0IHRocm91Z2gKLWV2ZXJ5IHRpbWU/ICBXaGVuIGEgY2hh cmFjdGVyIGFycml2ZXMgYXQgdGhlIHB0eSwgdGhlIHB0eSBkcml2ZXIgcHJvYmFibHkKLXRha2Vz IGEgZGlmZmVyZW50IHBhdGggdGhyb3VnaCBpdHMgY29kZSwgY2hlY2tpbmcgdGhlIHRlcm1pbmFs IGZsYWdzIHRoYXQKLXdvdWxkIGFmZmVjdCB0aGF0IGNoYXJhY3Rlci4gIEkgdHJpZWQgbWFraW5n IEtlcm1pdCdzIG5ldHdvcmsgcmVhZCBidWZmZXJzCi12ZXJ5IHNtYWxsIGJ1dCwgc3VycHJpc2lu Z2x5LCB0aGlzIG1hZGUgdGhpbmdzIHdvcnNlLiAgSSBhbHNvIHRyaWVkIG1ha2luZwotdGhlbSB2 ZXJ5IG11Y2ggYmlnZ2VyLCB3aGljaCBkaWRuJ3QgaGVscCBlaXRoZXIuICAyNEsgc3RpbGwgc2Vl bXMgdG8gYmUgdGhlCi1yaWdodCBzaXplLgotCi1TbywgaXMgaXQgdGhhdCBzb21lIGNoYXJhY3Rl cnMgdGFrZSBsb25nZXIgdG8gcHJvY2VzcyB0aGFuIG90aGVycz8gIFNvIGxvbmcKLXRoYXQgZGF0 YSBpcyBsb3N0IGR1ZSB0byBsYWNrIG9mIGZsb3cgY29udHJvbCBiZXR3ZWVuIFRDUCBhbmQgdGhl IHB0eT8gIE9uZQotd2F5IHRvIHRlc3QgdGhpcyB0aGVvcnkgaXMgdG8gc2xvdyBabW9kZW0gZG93 bi4gIEkgdHJpZWQgIi1sIDMyIiB3aGljaCwKLWFjY29yZGluZyB0byB0aGUgbWFuIHBhZ2UsIHRl bGxzIHN6IHRvICJ3YWl0IGZvciB0aGUgcmVjZWl2ZXIgdG8gYWNrbm93bGVkZ2UKLWNvcnJlY3Qg ZGF0YSBldmVyeSBOICgzMiA8PSBOIDw9IDEwMjQpIGNoYXJhY3RlcnMuICBUaGlzIG1heSBiZSB1 c2VkIHRvCi1hdm9pZCBuZXR3b3JrIG92ZXItcnVuIHdoZW4gWE9GRiBmbG93IGNvbnRyb2wgaXMg bGFja2luZy4iICBNYWtlcyBubwotZGlmZmVyZW5jZS4gIEkgYWxzbyB0cmllZCB0aGUgLXcgKFdp bmRvdykgc3dpdGNoLCBkaXR0by4gIEluIGZhY3QgdGhlcmUgYXJlCi1hbGwgc29ydHMgb2Ygb3B0 aW9ucyB0byBzZXQgdGhlICJ3aW5kb3cgc2l6ZSIsICJwYWNrZXQgbGVuZ3RoIiwgImJsb2NrCi1z aXplIiwgYW5kICJmcmFtZSBsZW5ndGgiLCBidXQgd2l0aCBubyBleHBsYW5hdGlvbiBvZiB3aGF0 IHRoZXNlIG1lYW4gb3IgaG93Ci10aGV5IGFyZSByZWxhdGVkLiAgSWYgSSBjcmFuayBldmVyeXRo aW5nIGRvd24gdG8gbWluaW11bSB2YWx1ZToKLQotICBsc3ogcSAtTCAzMiAtbCAzMiAtdyAxCi0K LUkgZ2V0IDUwJSBzdWNjZXNzIHdpdGggdGhlIDk2SyBmaWxlIGluc3RlYWQgb2YgMTAlLiAgQWRk aW5nIC1lLCBvZGRseQotZW5vdWdoLCBtYWRlIGl0IHdvcnNlLiAgSSBhbHNvIHRyaWVkIHNldHRp bmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCi1aTlVMTFMgdG8gZGlmZmVyZW50IG51bWJlcnMg bGlrZSA1MTIsIG5vIGhlbHAgdGhlcmUgZWl0aGVyLgotCi1JIHRyaWVkIG1ha2luZyB0aGUgcmVh ZC1mcm9tLW5ldC13cml0ZS10by1wdHkgYnVmZmVyIHNtYWxsICgxSykgYnV0IGxlYXZpbmcKLXRo ZSBwdHktdG8tbmV0IG9uZSBiaWcuICBUaGlzIGltcHJvdmVzIGNoYW5jZXMgb2Ygc3VjY2Vzcywg YnV0IGl0J3MKLWludG9sZXJhYmx5IHNsb3cgKDNLY3BzIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMg Y2FwYWJsZSBvZiA1MDBLKS4KLQotSSBhbHNvIGNoYW5nZWQgdGhlIHdyaXRlLXRvLXB0eSBvcGVy YXRpb24gZnJvbSBhIHNpbmdsZSB3cml0ZSgpIGNhbGwgb2YKLXBvc3NpYmx5IG1hbnkgSyBjaGFy YWN0ZXJzIHRvIGEgYnl0ZSBsb29wLCBvbmUgd3JpdGUoKSBwZXIgYnl0ZS4gIFNhbWUKLXJlc3Vs dDogc3VjY2VzcyAoYnV0IHN0aWxsIGFib3V0IDMwMCByZWNvdmVyYWJsZSBlcnJvcnMpLCB0aHJv dWdocHV0IDNLY3BzLgotMjAgQXVnIDIwMDcuCi0KLVdpdGggdHRwdHljbWQoKSBjb25maWd1cmVk IHRvIHdyaXRlIHRvIHRoZSBwdHkgaW4gYSBieXRlIGxvb3AsIGl0IGlzCi1wb3NzaWJsZSB0byBk ZWxheSBlYWNoIHdyaXRlLiAgQWRkaW5nIGEgMTBtc2VjIGRlbGF5IHBlciBjaGFyYWN0ZXIgcmVz dWx0cwotaW4gYSB0cmFuc2ZlciB0aGF0IHJ1bnMgYXQgYWJvdXQgMjAgY3BzIGFuZCAoZm9yIHRo ZSA5NksgdGVzdCBmaWxlKSB3b3VsZAotdGFrZSBhYm91dCA4MCBtaW51dGVzIHRvIGNvbXBsZXRl LiAgQW5kIHlldCBpdCBzdGlsbCBnZXRzIGp1c3QgYXMgbWFueQotZXJyb3JzLiAgU28gaXQncyBu b3QgYSBtYXR0ZXIgb2YgdGltaW5nIGVpdGhlci4gIFRoZSBlcnJvcnMgY29tZSwgb24KLWF2ZXJh Z2UsIGV2ZXJ5IGZpbGUgMzg4IGJ5dGVzLCBidXQgbm90IGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLgot Ci1JIHRyaWVkIHRoZSBUSU9DUkVNT1RFIGlvY3RsIG9uIHRoZSBwdHkgbWFzdGVyLCBhcyBkaXNj dXNzZWQgc29tZXdoYXQKLW9ibGlxdWVseSBpbiB0aGUgTWFjIE9TIFggIm1hbiBwdHkiIHBhZ2U7 ICJUaGlzIG1vZGUgY2F1c2VzIGlucHV0IHRvIHRoZQotcHNldWRvIHRlcm1pbmFsIHRvIGJlIGZs b3cgY29udHJvbGxlZCBhbmQgbm90IGlucHV0IGVkaXRlZCAocmVnYXJkbGVzcyBvZgotdGhlIHRl cm1pbmFsIG1vZGUpIiAtLSBzb3VuZHMgbGlrZSBqdXN0IHRoZSB0aWNrZXQgYnV0IGl0IG1hZGUg bm8KLWRpZmZlcmVuY2UuICBBY3R1YWxseSwgbG9va2luZyBhdCBhIG1hbiBwYWdlIG9uIGFub3Ro ZXIgT1MgKFNvbGFyaXMpLCBpdAotc2F5cyB0aGlzIGlzIG9ubHkgZm9yIGxpbmVzIG9mIHRleHQs IEVPTHMgYXJlIHN1cHBsaWVkLCBzbyB0aGF0IHdvdWxkIG1lc3MKLXVwIHRoZSBwcm90b2NvbC4g IFNvIHJlbWVtYmVyOiBkb24ndCB1c2UgdGhpcy4KLQotVHJpZWQgd2l0aG91dCBPX05ERUxBWTsg dGhlIGJlaGF2aW9yIHdhcyB0aGUgc2FtZSBidXQgdGhlIHNwZWVkIHdhcyBtdWNoCi1zbG93ZXIu Ci0KLVRyaWVkIHN3aXRjaGluZyBiYWNrIHRvIHRoZSBja3VwdHkuYyByb3V0aW5lcyBvbiBNYWMg T1MgWCBhbmQgZm91bmQgdGhhdCBpdAotd29ya3Mgbm93IHRoZSBzYW1lIGFzIHdpdGggb3BlbnB0 eSgpLCBleGNlcHQgdGhhdCBJIHNlZW0gdG8gZ2V0IG1vcmUgZ2V0dHkKLWJhYmJsZSBhdCB0aGUg ZW5kLiAgQnV0IHRoaXMgbWVhbnMgSSBjYW4gcnVuIHNvbWUgdGVzdHMgb24gU29sYXJpcy4gIEkg bW92ZWQKLXRoZSBlbnRpcmUgdGVzdCBlbnZpcm9ubWVudCBmcm9tIE1hYyBPUyBYIDEwLjQuOSB0 byBTb2xhcmlzIDkuICBCdXQgaXQKLWRvZXNuJ3Qgd29yayBhdCBhbGwuCi0KLVRyeWluZyB0byBm aWd1cmUgb3V0IHRoZSBja3VwdHkuYyBtb2R1bGVzIGFnYWluLgotIC4gZG9fcHR5KCkgY2FsbHMg cHR5X2dldHB0eSgpIHdoaWNoIHJldHVybnMgaW4gYXJnMSB0aGUgZmQgb2YgdGhlIHB0eSBtYXN0 ZXIuCi0gLiBUaGVuIGl0IGNyZWF0ZXMgYSBwaXBlIGFzIGEgd2F5IHRvIHRlbGwgd2hlbiB0aGUg Y2hpbGQgZGllcwotIC4gVGhlbiBpdCBjcmVhdGVzIGEgZm9yazoKLSAgICAtIFRoZSBwYXJlbnQg ZG9lcyBhIGJsb2NraW5nIHJlYWQgZnJvbSB0aGUgcGlwZQotICAgIC0gVGhlIGNoaWxkIGNhbGxz IGdldHB0eXNsYXZlKCkgdG8gZ2V0IHRoZSBwdHkgc2xhdmUKLSAgICAgIGFuZCB3cml0ZXMgb25l IGJ5dGUgdG8gdGhlIHBpcGUKLSAgICAgIGFuZCB0aGVuIGV4ZWNzIHRoZSBjb21tYW5kIGl0J3Mg c3VwcG9zZWQgdG8gcnVuCi1Ob3RlIHRoYXQgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgc2xh dmUgaXMga25vd24gb25seSB0byB0aGUgbG93ZXIgZm9yay4KLVRoZXJlZm9yZSB0aGUgbG93ZXIg Zm9yayBpcyB0aGUgb25lIHRoYXQgaGFzIHRvIHNldCBhbGwgdGhlIHR0eSBtb2RlcywgZXRjLgot SSB0b29rIGNhcmUgb2YgYWxsIHRoYXQgYnV0IHRoZSBja3VwdHkuYyBtZXRob2QgZG9lc24ndCB3 b3JrIGF0IGFsbCBvbgotU29sYXJpcy4gIEJ1dCBpdCB3b3JrcyAiZmluZSIgb24gTWFjIE9TIFgg KHRoZSAzMksgYWxsLWJ5dGVzIHRlc3QgZmlsZQotdHJhbnNmZXJzIGluc3RhbnRseSB3aXRoIG5v IGVycm9ycywgYnV0IHRoZSA5Nksgb25lIGVycm9ycyBvdXQpLgotCi1UaGUgcHJvYmxlbSBvbiBT b2xhcmlzIGlzIHRoYXQgcHR5X21ha2VfcmF3KCkgZmFpbHMgb24gdGhlIG1hc3RlcmZkIChidXQg bm90Ci1vbiB0aGUgc2xhdmVmZCkgd2l0aCBlcnJubyAyNSAiaW9jdGwgaW5hcHByb3ByaWF0ZSBm b3IgZGV2aWNlIi4gIEl0IGRvZXNuJ3QKLW1hdHRlciB3aGV0aGVyIEkgZG8gaXQgaW4gY2t1cHR5 LmMgb3IgY2t1dGlvLmMuICBJIGZvdW5kIGEgd2ViIHBhZ2Ugb24KLWtkZS5vcmcgdGhhdCBzYXlz IFNvbGFyaXMgZG9lcyBub3QgYWxsb3cgdGNnZXQvc2V0YXR0cigpIG9uIGEgcHR5IG1hc3Rlci4K LUJ1dCB0aGUgU3VuICJrbm93bGVkZ2UgYmFzZSIgaXMgbm90IG9wZW4gdG8gdGhlIHB1YmxpYy4g IFdlbGwsIHByZXN1bWFibHkKLWNoYW5nZXMgbWFkZSB0byB0aGUgc2xhdmUgYXJlIHJlZmxlY3Rl ZCBpbiB0aGUgbWFzdGVyIChjb21tZW50cyBpbiBTb2xhcmlzCi10ZWxuZXRkIHNlZW0gdG8gY29u ZmlybSB0aGlzLi4uKSAgTGV0J3MgY29tZSBiYWNrIHRvIFNvbGFyaXMgbGF0ZXIuCi0KLU1vdmlu ZyB0byBhIExpbnV4IHdpdGggbHJ6c3ogaW5zdGFsbGVkLi4uICBCdWlsdCBhIEtlcmJlcm9zIDUg dmVyc2lvbiB3aXRoCi1VU0VfQ0tVUFRZX0MuICBMaWtlIG9uIE1hYyBPUyBYLCBpdCB0cmFuc2Zl cnMgc2hvcnQgZmlsZXMgT0sgYW5kIGNob2tlcyBvbgotbG9uZ2VyIG9uZXMuICBTd2l0Y2hlZCB0 byBvcGVucHR5KCksIGl0IGJlaGF2ZXMgdGhlIHNhbWUuICBTbyB0aGUgcHJvYmxlbXMKLW9uIE1h YyBPUyBYIGFyZSBldmlkZW50bHkgbm90IE9TLXNwZWNpZmljLCB3aGljaCBpcyBnb29kIEkgZ3Vl c3MsIHNpbmNlIHRoYXQKLW1lYW5zIGZpbmRpbmcgdGhlIHdheSBhcm91bmQgdGhlbSB3aWxsIGFw cGx5IHRvIG1vcmUgdGhhbiBvbmUgcGxhdGZvcm0uCi0yMSBBdWcgMjAwNy4KLQotTG9vayBpbnRv IFRJT0NTQ1RUWSBhZ2Fpbi4gIE9uIFN5c3RlbSBWIGJhc2VkIE9TJ3MsIG9wZW5pbmcgYSBwdHkg YWNxdWlyZXMgYQotY29udHJvbGxpbmcgdGVybWluYWwgYXV0b21hdGljYWxseS4gIE9uIEJTRC1i YXNlZCBPUydzLCBubzsgeW91IGhhdmUgdG8gdXNlCi10aGUgVElPQ1NDVFRZIG9uIHRoZSBzbGF2 ZSBmaWxlIGRlc2NyaXB0b3IgdG8gZ2l2ZSBpdCBvbmUuICBJJ20gbm90IHN1cmUgd2h5Ci1hIGNv bnRyb2xsaW5nIHRlcm1pbmFsIHdvdWxkIGJlIG5lZWRlZCwgZXhjZXB0IHRoYXQgd2l0aG91dCBv bmUsIHRoZSB2aXJ0dWFsCi1kZXZpY2UgIi9kZXYvdHR5IiBkb2VzIG5vdCBleGlzdCBmb3IgdGhl IHByb2Nlc3MgdGhhdCBydW5zIG9uIHRoZSBwdHksIGFuZAotbWF5YmUgdGhlIGFwcGxpY2F0aW9u IHRoYXQgcnVucyB0aGVyZSAoZS5nLiByenN6KSBjaGVja3MgZm9yIGl0LiAgT24gdGhlCi1kb3du c2lkZSwgaGF2aW5nIGEgY29udHJvbGxpbmcgdGVybWluYWwgb3BlbnMgdGhlIHByb2Nlc3MgdXAg dG8gdGVybWluYWwKLWludGVycnVwdHMgbGlrZSBTSUdJTlQgYW5kIFNJR1FVSVQuICBVbnRpbCBu b3cgSSBoYXZlIG5vdCBiZWVuIHVzaW5nIHRoaXMKLWlvY3RsKCkuICBSZXN1bHRzIChpbiBMaW51 eCk6Ci0KLSAgV2l0aCBUSU9DU0NUVFk6IDk2SyBhbGwtYnl0ZXMgdGVzdDogMTEgc2NyZWVucyBv ZiBlcnJvcnMsIHRoZW4gc3VjY2VzcwotICBXaXRob3V0IFRJT0NTQ1RUWTogZXhhY3RseSB0aGUg c2FtZS4KLQotVHJpZWQgdGhlIHNhbWUgdGhpbmcgd2l0aCBUSU9DTk9UVFkgaW5zdGVhZCBvZiBU SU9DU0NUVFksIHdpdGggZXhhY3RseSB0aGUKLXNhbWUgcmVzdWx0cyAobm8gZWZmZWN0IHdoYXRz b2V2ZXIpLgotCi1UaGVyZSBoYXMgdG8gYmUgYSB3YXkgdG8gbWFrZSB0aGlzIHdvcmssIGJlY2F1 c2UgWm1vZGVtIHdvcmtzIHRocm91Z2gKLXRlbG5ldGQsIHdoaWNoIGJhc2ljYWxseSB0aGUgc2Ft ZSB0aGluZyBhcyB0dHB0eWNtZCgpOiBhIHJlbGF5IGJldHdlZW4gdGhlCi1uZXR3b3JrIGFuZCBh IHB0eS4gIHR0cHR5Y21kKCkgaXMgbGlrZSB0ZWxuZXRkIGJhY2t3YXJkcy4gIE1vZGVybiB0ZWxu ZXRkcwotYXJlIG5vdCBtdWNoIGhlbHA7IHRoZXkgZG9uJ3QgYWNjZXNzIHB0eXMgb3IgdGhlIG5l dHdvcmsgZGlyZWN0bHksIHRoZXkgZ28KLXRocm91Z2ggIm11eCIgZGV2aWNlcyBzbyBJIGNhbid0 IHNlZSB3aGF0IHRoZXkncmUgZG9pbmcgdG8gZ2V0IHRyYW5zcGFyZW5jeQotYW5kIGZsb3cgY29u dHJvbC4gIEFuIG9sZCBCU0QgdGVsbmV0ZCB1c2VzIHBhY2tldCBtb2RlIGJ1dCB0aGF0IHdvdWxk IGJlIGEKLWJpZyBkZWFsLi4uCi0KLUkgdHJpZWQgaWdub3JpbmcgdmFyaW91cyBzaWduYWxzIGxp a2UgU0lHVFRPVSBhbmQgU0lUU1RQLCBzaW5jZSBzb21lIFRlbG5ldAotY2xpZW50cyBkbyB0aGlz LiAgTm8gZWZmZWN0LCBubyBkaWZmZXJlbmNlLiAgQW55d2F5LCBpbiBMaW51eCB0aGUgdHJhbnNm ZXJzCi1hbG1vc3QgYWx3YXlzIGZpbmlzaCBPSyBkZXNwaXRlIHRoZSBtYW55IGVycm9ycy4gIFRo ZXJlIGlzIGp1c3Qgc29tZSB0cmljawotSSdtIG1pc3NpbmcgdG8gbWFrZSB0aGUgcHR5IGFjY2Vw dCBhIHN0cmVhbSBvZiBhcmJpdHJhcnkgYnl0ZXMgd2l0aG91dAotaGljY3VwaW5nLgotCi1XaGF0 IGFib3V0IFNvbGFyaXMsIHdoaWNoIHVzZXMgY2t1cHR5LmM/ICBJbiBzdHJlYW1zLWJhc2VkIE9T J3MsIHdoZXJlIGxpbmUKLWRpc2NpcGxpbmVzIGFuZCB3aGF0bm90IGFyZSBwdXNoZWQgb24gdG9w IG9mIHRoZSBwdHksIGl0IGxvb2tzIGxpa2UgdGhlIHB0eQotbW9kdWxlIHNhdmVzIHRoZSBmaWxl IGRlc2NyaXB0b3Igb2YgdGhlICJiYXJlIiBzbGF2ZSBwdHkgKGFzICdzcHR5JykgYmVmb3JlCi1w dXNoaW5nIHRoaW5ncyBvbnRvIGl0LCBhbmQgdGhlbiBsYXRlciB1c2VzIHNwdHkgcmF0aGVyIHRo YW4gdGhlIHJlZ3VsYXIKLXNsYXZlIHB0eSBmaWxlIGRlc2NyaXB0b3Igd2hlbiBnZXR0aW5nL3Nl dHRpbmcgdGVybWluYWwgbW9kZXMuICBJJ20gbm90IHN1cmUKLXdoYXQgdGhpcyBpcyBhbGwgYWJv dXQgYnV0IGl0J3MgZGVmaW5pdGVseSBTeXNWaXNoLi4uICBJdCBoYXBwZW5zIGlmCi1TVFJFQU1T UFRZIGlzIGRlZmluZWQsIGJ1dCBJIG5vdGljZWQgdGhhdCBTVFJFQU1TUFRZIGlzIG5ldmVyIGRl ZmluZWQKLWFueXdoZXJlLiAgSSB0cmllZCBkZWZpbmluZyBpdCBzbyB3ZSB0YWtlIGFuIGVudGly ZWx5IGRpZmZlcmVudCBwYXRoIHRocm91Z2gKLXRoZSBjb2RlLiAgSXQgbWFkZSBhYnNvbHV0ZWx5 IG5vIGRpZmZlcmVuY2UuCi0KLVRoZW4gSSBub3RpY2VkIHRoYXQgSEFWRV9TVFJFQU1TIGlzIG5v dCBkZWZpbmVkIGZvciBTb2xhcmlzIGVpdGhlci4gIFRyaWVkCi1kZWZpbmluZyBpdCwgYnV0IHRo ZSBzZXNzaW9uIGRpZG4ndCB3b3JrIGF0IGFsbCwgbm8gaS9vLiAgUmVtb3ZpbmcgdGhlCi1IQVZF X1NUUkVBTVMgZGVmaW5pdGlvbiBidXQga2VlcGluZyB0aGUgU1RSRUFNU1BUWSBkZWZpbmVkLCBJ IHJlYnVpbHQgYW5kCi10cmllZCAic2V0IGhvc3QgL2Nvbm5lY3QgL3B0eSBlbWFjcyIuICBJIGdv dCBhbiBFTUFDUyBzY3JlZW4gYnV0IGNvdWxkIG5vdAotdHlwZSBhbnl0aGluZyBpbnRvIGl0LCB3 aGljaCBtZWFucyB0aGF0IFNUUkVBTVNQVFkgc2hvdWxkIG5vdCBiZSBkZWZpbmVkCi1laXRoZXIu ICBSZW1vdmVkIHRoZSBkZWZpbml0aW9uIGFuZCAic2V0IGhvc3QgL3B0eSIgd29ya3MgYWdhaW4u ICBTbyB3aGF0J3MKLXRoZSBwcm9ibGVtIHdpdGggdHRwdHljbWQoKT8KLQotSW4gZmFjdCwgdHRw dHljbWQoKSB3b3JrcyBvbiBTb2xhcmlzIHdpdGggS2VybWl0IGFzIHRoZSBleHRlcm5hbCBwcm90 b2NvbCwKLWJ1dCBub3Qgd2l0aCBabW9kZW0sIG5vdCBldmVuIHdpdGggdGV4dCBmaWxlcy4gIFNv IGFnYWluLCB0aGVyZSBpcyBubwotZnVuZGFtZW50YWwgcHJvYmxlbSB3aXRoIHRoZSBjb2RlIG9y IHRoZSBsb2dpYywgaXQncyBKdXN0IEEgTWF0dGVyIE9mCi1UcmFuc3BhcmVuY3kgdG8gY29udHJv bCBhbmQvb3IgOC1iaXQgY2hhcmFjdGVycyAtLSBzb21lIHRyaWNrIEkgZG9uJ3Qga25vdwotYWJv dXQuCi0KLUxvb2tpbmcgYXQgdGhlIFNvbGFyaXMgZGVidWcgbG9nLi4uICBJIHNlZSB0aGF0IGNr dXB0eS5jIGlzIGNhbGxpbmcKLWluaXRfdGVybWJ1ZigpIHRvIHNldCB0aGUgdHR5IG1vZGVzIG9m IHRoZSBtYXN0ZXIsIG5vdCB0aGUgc2xhdmUsIGFuZAotc2V0X3Rlcm1idWYoKSB0byBzZXQgdGhl bSwgYnV0IHlvdSBjYW4ndCBkbyB0aGF0IGluIFNvbGFyaXMsIGVycm9yIDI1LiAgVGhpcwotaXMg aW4gZ2V0cHR5c2xhdmUoKS4gIFNob3VsZG4ndCBnZXRwdHlzbGF2ZSgpIGJlIHNldHRpbmcgdGhl IHR0eSBtb2RlcyBvZgotdGhlIHNsYXZlLCBub3QgdGhlIG1hc3Rlcj8gIEkgY2hhbmdlZCBpdCB0 byBkbyB0aGlzLCBidXQgbGlrZSBhbGwgb3RoZXIKLWNoYW5nZXMsIGl0IG1hZGUgbm8gZGlmZmVy ZW5jZS4gIEkgY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhhdCBhZnRlciB0aGUgY2hhbmdlLAotInNl dCBob3N0IC9wdHkgL2Nvbm5lY3QgZW1hY3MiIHN0aWxsIHdvcmtlZCBhbmQgaXQgZGlkLgotCi1B bmQgdGhlbiB3aGF0Li4uICBJIGhhZCBzb21lIGNvZGUgdG8gcmVkaXJlY3Qgc3RkZXJyIGluIGNr dXB0eS5jIHRoYXQgd2FzCi1ub3QgYmVpbmcgZXhlY3V0aW5nIGR1ZSB0byBhIHR5cG8uICBXaGVu IEkgZml4ZWQgdGhlIHR5cG8sIHBvb2YsIFptb2RlbQotYmluYXJ5IHRyYW5zZmVycyBzdGFydGVk IHdvcmtpbmcsIG9yIHdvcmtpbmcgYXMgd2VsbCBhcyB0aGV5IHdvcmsgaW4gTGludXgKLWFuZCBN YWMgT1MgWC4gIEl0IHR1cm5zIG91dCB0aGF0IGlmIEkgZG9uJ3QgcmVkaXJlY3Qgc3RkZXJyLCBz eiBhbmQgcnoKLWp1c3QgZG9uJ3Qgd29yay4gIEJ1dCBsc3ogYW5kIGxyeiBkby4gIEJ1dCBpZiBJ IGRvIHJlZGlyZWN0IGl0LCBJIGRvbid0IHNlZQotdGhlIHByb2dyZXNzIG1lc3NhZ2VzIGZyb20g bHN6L2xyei4gIDIyIEF1ZyAyMDA3LgotCi1CdWlsdCBvbiBIUC1VWCAxMWkgdjMgKEIuMTEuMzEg VSBpYTY0KSB3aXRoIG9wdGltaXppbmcgY29tcGlsZXIsIGdvdCB0b25zIG9mCi1waWNreSB3YXJu aW5ncywgYnV0IGl0IGZpbmlzaGVkIGFuZCBsaW5rZWQgYW5kIHJ1bnMgT0suICBNYW55IG9mIHRo ZQotd2FybmluZ3Mgd2VyZSBsaWtlIHRoaXM6Ci0KLSAgImNrdWNucy5jIiwgbGluZSAxNjA2OiB3 YXJuaW5nICMyMDY4LUQ6IGludGVnZXIgY29udmVyc2lvbiByZXN1bHRlZCBpbiBhCi0gIGNoYW5n ZSBvZiBzaWduOiAgIHRub3B0WzBdID0gKENIQVIpIElBQzsKLQotSUFDIGlzIGRlZmluZWQgYXMg MjU1IGluIGNrY3RlbC5oLiAgSWYgSSBkZWZpbmUgaXQgYXMgMHhmZiwgSSBkb24ndCBnZXQgdGhl Ci13YXJuaW5ncy4gIEkgY2hhbmdlZCB0aGUgZGVmaW5pdGlvbnMgb2YgYWxsIHRoZSBUZWxuZXQg Y29tbWFuZHMgdG8gYmUgaW4gaGV4Ci1ub3RhdGlvbiByYXRoZXIgdGhhbiBkZWNpbWFsLiAgSWYg Y3V0cyB3YXkgZG93biBvbiB0aGUgSFAtVVggd2FybmluZ3MgYW5kCi1kb2Vzbid0IHNlZW0gdG8g Y2F1c2UgcHJvYmxlbXMgZWxzZXdoZXJlLiAgY2tjdGVsLmgsIDIzIEF1ZyAyMDA3LgotCi1Ob3cg aXQgbG9va3MgbGlrZSBTb2xhcmlzIGlzIHdvcmtpbmcgYnV0IHRoZW4gaXQgaGFuZ3MgYXQgdGhl IGVuZC4gIEl0Ci1hcHBlYXJzIGFzIGlmIHRoZSBja3VwdHkuYyBtb2R1bGUgaXMgYmxvY2tpbmcg U0lHQ0hMRC4gIERlYnVnIGxvZyBzaG93cyB0aGF0Ci13aGVuIHRoZSB0cmFuc2ZlciBpcyBjb21w bGV0ZSwgd2UgcmVjZWl2ZWQgSUFDIERNIChUZWxuZXQgRGF0YSBNYXJrKSBhZnRlcgotc3oncyBs YXN0IGdhc3AgYW5kIGJlZm9yZSB0aGUgc2hlbGwgcHJvbXB0IGlzIHByaW50ZWQuICBCdXQgY2Fs bGluZwotdG5fZG9vcCgpIGluIHRoaXMgY2FzZSBpcyBhIG1pc3Rha2UgYmVjYXVzZSB3ZSBhcmUg cmVhZGluZyB0aGUgbnVtYmVyIG9mCi1ieXRlcyB0aGF0IHdlIGtub3cgYXJlIGF2YWlsYWJsZSBp biBhIGNvdW50ZWQgbG9vcCwgYnV0IHRuX2Rvb3AoKSB3b3VsZAotY29uc3VtZSBhbiB1bmtub3du IG51bWJlciBvZiBieXRlcyBhbmQgd2Ugd291bGQgbmV2ZXIga25vdyB3aGVuIHRvIGV4aXQgdGhl Ci1sb29wLiAgQW55d2F5LCBDLUtlcm1pdCBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggRE0uICBT a2lwcGluZyBvdmVyCi10bl9kb29wKCkgKGFuZCBub3Qgd3JpdGluZyBvdXQgdGhlIFRlbG5ldCBj b21tYW5kIGJ5dGVzKSBmaXhlcyB0aGUgaGFuZ2luZwotY29uZGl0aW9uIGF0IHRoZSBlbmQsIGV2 ZW4gdGhvdWdoIFNJR0NITEQgaXMgbmV2ZXIgcmFpc2VkLiAgY2t1dGlvLmMsCi0yMyBBdWcgMjAw Ny4KLQotU29tZSB0ZXN0cywgU29sYXJpcyB0byBOZXRCU0Qgb3ZlciBLNS4KLXpzdCBzZW5kcyBh c2NpaS50eHQsIGEgMi4zNk1CIGFzY2lpIHRleHQgZmlsZSAoS2NwcyAvIEVycm9ycykuCi16cnQg cmVjZWl2ZXMgdGhlIHNhbWUgZmlsZToKLQotICB6c3QgNTg3LzAgNTI2LzAgNTQyLzAgNDM0LzAg NDIzLzAKLSAgenJ0IDgyNy8wIDgwMC8wIDg0Ny8wIEZBSUwgIDYxMC8wCi0KLVNvIHRleHQgaXMg Z29vZC4gIEJpbmFyeSBub3Qgc28gZ29vZC4gIEhlcmUgd2UgdHJhbnNmZXIgdGhlIDFNQiBhbGwt Ynl0ZXMKLXBhdHRlcm4gZmlsZS4gIHpyYiByZWNlaXZlcyBpdCBzdWNjZXNzZnVsbHksIGJ1dCB3 aXRoIDEyNDggZXJyb3JzLCBhdCBvbmx5Ci0xNUtjcHMuICBTZW5kaW5nIHRoZSBzYW1lIGZpbGUg b3V0IGFsd2F5cyBmYWlsczoKLQotICBCZWdpbiAyMDA3MDgyMyAxNjozMjowNzogU0VORCBCSU5B UlkgYWxsMi5iaW4gW3N6XQotICBTZW5kaW5nOiBhbGwyLmJpbgotICBCeXRlcyBTZW50OiAgIDU2 MDAvMTAwMDAwMCAgIEJQUzoxMjQ0NiAgICBFVEEgMDE6MTkgICBGQUlMVVJFCi0gIEVuZCAyMDA3 MDgyMyAxNjozMjoxMwotICBFbGFwc2VkIHRpbWU6IDYuNjE3OTkyOTk5OTk5ODQyCi0gIGNwcyA9 IDE1MTEwMy4yMTIxMDY3NTU2Ci0gIGxzejogY2F1Z2h0IHNpZ25hbCAxOyBleGl0aW5nCi0KLURl Y2lkZWQgdG8gbW92ZSB0byBMaW51eCBidXQgZm91bmQgdGhhdCBzb21ldGhpbmcgaXMgc2NyZXdl ZCB1cCBpbiBMaW51eAotQy1LZXJtaXQgd2l0aCB0aWxkZSBleHBhbnNpb246Ci0KLSAgc2VuZCB+ L3Rlc3RmaWxlcy9hbGwuYmluCi0KLWRvZXNuJ3QgZXhwYW5kIGF0IGFsbCAoYnV0IGl0IGRpZCB5 ZXN0ZXJkYXkhKS4gIFRoZSBwcm9ibGVtIHdhcyBpbiB0aGUKLWFuY2llbnQsIGFuY2llbnQgcmVh bHVpZC9zZXR1aWQgaGFuZGxpbmcgY29kZTsgcmVhbF91aWQoKSBubyBsb25nZXIgd29ya3MgaW4K LUxpbnV4LiAgSSB3b3JrZWQgYXJvdW5kIHRoaXMgaW4gd2hvYW1pKCkgYnkgc2V0dGluZyBydWlk IHRvIGdldHVpZCgpIGlmCi1yZWFsX3VpZCgpIHJldHVybmVkIGEgbmVnYXRpdmUgbnVtYmVyLiAg TWF5YmUgZGFuZ2Vyb3VzLCB3b3JyeSBhYm91dCBpdAotbGF0ZXIuICBja3VmaW8uYywgMjMgQXVn IDIwMDcuCi0KLUFOWVdBWS4uLiBhZnRlciBmaXhpbmcgdGhhdCwgSSB0ZXN0ZWQgenNiIG9uIExp bnV4LCBhbmQgaXQncyBicm9rZW4gdGhlcmUKLXRvbywgdXNpbmcgb3BlbnB0eSgpLCBzbyBpdCdz IG5vdGhpbmcgdG8gZG8gd2l0aCBja3VwdHkuYy4gIEFmdGVyIHNlbmRpbmcKLXRoZSBmaXJzdCBa bW9kZW0gZGF0YSBwYWNrZXQsIGl0IGp1c3QgaGFuZ3MsIG5vdGhpbmcgY29tZXMgYmFjay4gIElu IHRleHQKLW1vZGUgaXQgZ2V0cyBmYXJ0aGVyLCBidXQgdGhlbiB0aGUgc2FtZSB0aGluZyBoYXBw ZW5zLiAgQ2FwdHVyZWQgc3RkZXJyIGZyb20KLXJ6IG9uIHRoZSBmYXIgZW5kOgotCi0gIEJ5dGVz IHJlY2VpdmVkOiAgICAgNjA4LzEwMDAwMDAgICBCUFM6MjExMzcgIEVUQSAwMDo0NyAgUmV0cnkg MDogQmFkIENSQwotICBCeXRlcyByZWNlaXZlZDogICAgIDg2NC8xMDAwMDAwICAgQlBTOjIzNTQw ICBFVEEgMDA6NDIgIFJldHJ5IDA6IEJhZCBDUkMKLSAgQnl0ZXMgcmVjZWl2ZWQ6ICAgIDExMjAv MTAwMDAwMCAgIEJQUzoyNTAwMyAgRVRBIDAwOjM5ICBSZXRyeSAwOiBCYWQgQ1JDCi0gIEJ5dGVz IHJlY2VpdmVkOiAgICA1Njk2LzEwMDAwMDAgICBCUFM6NTY5ODggIEVUQSAwMDoxNyAgUmV0cnkg MDogQmFkIENSQwotICBCeXRlcyByZWNlaXZlZDogICAgOTEyMC8xMDAwMDAwICAgQlBTOjYyMjI3 ICBFVEEgMDA6MTUgIFJldHJ5IDA6IEJhZCBDUkMKLSAgQnl0ZXMgcmVjZWl2ZWQ6ICAgIDkzNzYv MTAwMDAwMCAgIEJQUzo2MDc2NiAgRVRBIDAwOjE2ICBSZXRyeSAwOiBCYWQgQ1JDCi0gIEJ5dGVz IHJlY2VpdmVkOiAgICA5NjMyLzEwMDAwMDAgICBCUFM6NjAzNjEgIEVUQSAwMDoxNiAgUmV0cnkg MDogR290IFRJTUVPVVQKLSAgUmV0cnkgMDogU2VuZGVyIENhbmNlbGVkCi0gIFJldHJ5IDA6IEdv dCBaQ0FOCi0KLVRoZSBsb2NhbCBzeiwgaG93ZXZlciwgZG9lc24ndCBnaXZlIGFueSBlcnJvciBt ZXNzYWdlLiAgWkNBTiBtZWFuczogIm90aGVyCi1lbmQgY2FuY2VsZWQgc2Vzc2lvbiBieSBzZW5k aW5nIDUgXlgncyIgKG9yIHVzZXIgdHlwZWQgdGhlbSkuICBXaGF0IGFjdHVhbGx5Ci1oYXBwZW5z IGlzIHRoYXQgdHRwdHljbWQoKSdzIHNlbGVjdCgpIHRpbWVzIG91dCB3YWl0aW5nIGZvciBzb21l dGhpbmcgZnJvbQotdGhlIFptb2RlbSBwYXJ0bmVyIGFuZCB0dHB0eWNtZCgpIGl0c2VsZiBraWxs cyB0aGUgc3ogZm9yayB3aXRoIFNJR0hVUC4KLVdoZW4gbHN6IHJlY2VpdmVzIFNJR0hVUCBpdCBz ZW5kcyB0aGUgWkNBTi4gIFNvIHRoZSByZWFsIHByb2JsZW0gaXMgdGhhdAotYWZ0ZXIgc29tZSBw b2ludCB3ZSdyZSBub3QgcmVjZWl2aW5nIGFueXRoaW5nLgotCi1JIGNoYW5nZWQgdGhlIHRpbWVv dXQgZnJvbSA0IHNlY29uZHMgdG8gMzAgc2Vjb25kcyBhbmQgbm93IEkgc2VlIGl0IGp1c3QKLXN0 b3BzIGZvciBsb25nIHBlcmlvZHMgb2YgdGltZSBhbmQgdGhlbiByZXN1bWVzLiAgVGhlIGxyeiBs b2cgb24gdGhlCi1yZWNlaXZpbmcgZW5kIHNob3dzIHRvbnMgb2YgdGltb3V0cywgQ1JDIGVycm9y cywgYW5kIG90aGVyIGVycm9ycy4gIFRoZQotbG9jYWwgbG9nIHNob3dzIHRoYXQgbHN6IHdvdW5k IHVwIHNlbmRpbmcgWkNBTiAoMiB4ICgxMCB4IF5ILCAxMCB4IF5YKSkuCi0KLU1vdmluZyBvbiB0 byBhbm90aGVyIHByb2JsZW0uLi4gIFR1cm5zIG91dCBDdHJsLUMgKFNJR0lOVCkgaXMgd29ya2lu ZyByaWdodAotYWZ0ZXIgYWxsLiAgU2luY2UgSSdtIHVzaW5nIG15IHRlc3Qgc2NyaXB0cyBsaWtl IGtlcmJhbmcgc2NyaXB0cywgQ3RybC1DCi1leGl0cyB0aHJvdWdoIHRyYXAoKSwgYXMgaXQgc2hv dWxkLCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGFuZCBjbGVhbmluZyB1cC4KLUlmIEkgc3RhcnQg S2VybWl0IGFuZCB0ZWxsIGl0IHRvIFRBS0UgdGhlIHNjcmlwdCwgdGhlbiBDdHJsLUMgYnJpbmdz IG1lIGJhY2sKLXRvIHRoZSBwcm9tcHQgd2l0aCB0aGUgY29ubmVjdGlvbiBzdGlsbCBvcGVuIChh cyBpdCBzaG91bGQpLiAgSG93ZXZlciwgdW50aWwKLW5vdyBJIGhhdmVuJ3QgZG9uZSBhbnl0aGlu ZyBhYm91dCB0aGUgZm9yayBvciB0aGUgcHR5cy4gIEFkZGVkIGNvZGUgdG8KLXRyYXAoKSB0byBr aWxsIHRoZSBmb3JrIGFuZCBjbG9zZSB0aGUgbWFzdGVyIHB0eS4gIGNrdXVzeC5jLCAyNCBBdWcg MjAwNy4KLQotQWRkZWQgY29kZSB0byB0cnkgdG8gYnJlYWsgdGhlIGRlYWRsb2NrLiAgSWYgc2Vs ZWN0KCkgdGltZXMgb3V0LCBidXQgd2UgaGF2ZQotc3R1ZmYgdG8gd3JpdGUgZWl0aGVyIHRvIHRo ZSBwdHkgb3IgdGhlIG5ldCwgdHJ5IHRvIGRvIGl0IGFueXdheSwgZXZlbgotdGhvdWdoIHNlbGVj dCgpIGRpZCBub3Qgc2F5IHdlIGNvdWxkLiAgQnV0IHRoaXMgZG9lc24ndCBoZWxwIGJlY2F1c2Ug d2hlbgotc2VsZWN0KCkgdGltZXMgb3V0IHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gd3JpdGUu ICBUaGUgcHJvYmxlbSBpcyB0aGF0Ci1hZnRlciByZWNlaXZpbmcgdGhhdCBsYXN0IHBhY2tldCBm cm9tIHRoZSByZW1vdGUgcnosIHRoZSBsb2NhbCBsc3ogZG9lc24ndAotc2VlbSB0byBkbyBhbnl0 aGluZywgYXMgaWYgdGhlIGxvd2VyIGZvcmsgd2Fzbid0IHJ1bm5pbmcgKGFuZCB0byBjb25maXJt Ci10aGlzIGh5cG90aGVzaXMsIHNvbWV0aW1lcyBJIG5vdGljZWQgdGhhdCB3aGVuIEkgQ3RybC1D J2Qgb3V0IG9mIHRoaXMsIHRoZQotdHJhbnNmZXIgd291bGQgdGFrZSBvZmYgYWdhaW4pLgotCi1C YWNraW5nIHVwIGFuZCB0ZXN0aW5nIHdpdGggZ2tlcm1pdCByYXRoZXIgdGhhbiB6bW9kZW06Ci0K LSBrc3QgcmlwcGxlLnR4dCBbODI0S10gT0sKLSBrc3QgYXNjaWkudHh0IFsxMzU5S10gT0sKLSBr cnQgcmlwcGxlLnR4dCAtLSBGQUlMRUQKLQotSXQgc2VlbXMgdGhhdCB3ZSBjYW4ndCBoYW5kbGUg c3RyZWFtaW5nLiAgSWYgSSBzZXQgdXAga3J0IHRvIGRpc2FibGUKLXN0cmVhbWluZyBvbiByZWNl aXB0LCBpdCB3b3JrcyBPSy4KLQotIGtydCByaXBwbGUudHh0IFs4MjRLXSBPSwotIGtyYiBhbGwy LmJpbiAgWzEwMDBLXSBPSwotCi1TbyBoZXJlIHdlIGhhdmUgbm8gdHJvdWJsZSBzZW5kaW5nIGJ1 dCBiaWcgdHJvdWJsZSByZWNlaXZpbmcgdW5sZXNzIHdlCi1kaXNhYmxlIHN0cmVhbWluZy4gIFdo ZXJlYXMgd2l0aCBabW9kZW0gd2UgaGF2ZSB0cm91YmxlIHJlY2VpdmluZy4KLQotQnV0IHRoaXMg d2Fzbid0IGhhcHBlbmluZyBiZWZvcmUsIHdoYXQgY2hhbmdlZD8gIFVzaW5nIEMtS2VybWl0IG9u IHRoZSBmYXIKLWVuZCB0byByZWNlaXZlIHRoZSBmaWxlIHdpdGggZGVidWcgbG9nIG9uLCBJIHNl ZSB0aGF0IGl0IGlzIHNlbmRpbmcgNEsgZGF0YQotcGFja2V0IGFmdGVyIDRLIGRhdGEgcGFja2V0 LCB3aXRoIHRoZSBsb2NhbCBna2VybWl0IHNpbGVudCwgYXMgZXhwZWN0ZWQuCi1BYm91dCBtaWR3 YXkgdGhyb3VnaCB0aGUgdHJhbnNmZXIsIHRoZSBsb2NhbCBLZXJtaXQgc2VuZHMgYW4gZXJyb3Ig cGFja2V0Ci0iVHJhbnNtaXNzaW9uIGVycm9yIG9uIHJlbGlhYmxlIGxpbmsiLiAgTG9va2luZyBh dCBHLUtlcm1pdCdzIGRlYnVnIGxvZy4uLgotSXQgcmVjZWl2ZXMgdGhlIGZpcnN0IGZpdmUgNEsg ZGF0YSBwYWNrZXRzIE9LLCBidXQgZ2V0cyBhIENSQyBlcnJvciBvbiB0aGUKLWZpZnRoIG9uZSwg YW5kIHNlbmRzIHRoZSBFcnJvciBwYWNrZXQuICBTbyBpdCBoYXMgcmVjZWl2ZWQgYSBzdHJlYW0g b2YKLTIwLXNvbWUgdGhvdXNhbmQgYnl0ZXMgT0sgYW5kIHRoZW4gbWVzc2VzIHVwLiAgVGhhdCBu dW1iZXIgc291bmRzIGEgbG90IGxpa2UKLXR0cHR5Y21kKCkncyBidWZmZXIgc2l6ZS4gIEkgY2hh bmdlZCB0aGUgYnVmZmVyIHNpemVzIHRvIGJlIGRpZmZlcmVudDoKLQotICBSZWFkIGZyb20gcHR5 IGFuZCB3cml0ZSB0byBuZXQ6IDRLICAKLSAgUmVhZCBmcm9tIG5ldCBhbmQgd3JpdGUgdG8gcHR5 OiAxSwotCi1UaGlzIHRpbWUgaXQgcmVjZWl2ZWQgdGhlIGZpcnN0IDRLIHBhY2tldCBhbmQgZmFp bGVkIG9uIHRoZSBzZWNvbmQgb25lLgotVGhlbiBJIGluY3JlYXNlZCB0aGUgYnVmZmVycyB0byA5 OEsgZWFjaCwgZXhwZWN0aW5nIHRvIHJlY2VpdmUgbG90cyBtb3JlCi1wYWNrZXRzIHN1Y2Nlc3Nm dWxseSBidXQgaXQgYm9tYmVkIG91dCBvbiB0aGUgNXRoIG9uZS4gIEJ1dCB0aGF0J3MgZ29vZCwg aXQKLWNvbmZpcm1zIHRoZXJlJ3Mgbm8gbG9naWMgZXJyb3IgaW4gdGhlIGJ1ZmZlciBtYW5hZ2Vt ZW50LiAgSnVzdCB0byBtYWtlCi1zdXJlLCB0aG91Z2gsIGxldCdzIHNldCB0aGUgYnVmZmVyIHNp emUgc21hbGxlciB0aGFuIHRoZSBwYWNrZXQgc2l6ZSBhbmQKLWRpc2FibGUgc3RyZWFtaW5nLiAg SW4gdGhpcyBjYXNlIHdlIGdldCA0IGdvb2QgZGF0YSBwYWNrZXRzIGFuZCBhIENSQyBlcnJvcgot b24gdGhlIDV0aCBvbmUgYW5kIHNvIHdlIHJlcXVlc3QgcmV0cmFuc21pc3Npb24sIGFuZCB0aGUg bmV4dCA4IHRpbWVzIGl0Ci1hcnJpdmVzIGl0IGdldHMgYSBkaWZmZXJlbnQgQ1JDIGVycm9yLCBi dXQgdGhlIDl0aCBjb3B5IGlzIE9LLiAgVGhlbiB0aGUKLW5leHQgcGFja2V0IGNvbWVzIGFuZCBp dCBnZXRzIGEgQ1JDIGVycm9yIGV2ZXJ5IHRpbWUuICBBbmQgdGhpcyBpcyBub3RoaW5nCi1idXQg cGxhaW4gQVNDSUkgdGV4dC4KLQotU3dpdGNoaW5nIHRvIHJlbW90ZSBtb2RlOgotCi0gIFJFTU9U RT0xIGtrIGtzdAotCi0oYWZ0ZXIgdHJpY2tpbmcgbXlzZWxmIGJlY2F1c2UgaXQgd2FzIHVzaW5n IHR0cnVuY21kKCkgZm9yIHRoaXMuLi4pIEkgc2VlCi10aGF0IG5vdGhpbmcgd29ya3MgYXQgYWxs LiAgV2hhdCBkaWQgSSBicmVhaz8gIDI0IEF1ZyAyMDA3LgotCi1GaXhlZCB0dHB0eWNtZCgpIHRv IHJlc3RvcmUgY29uc29sZSBtb2RlcyBhZnRlciBhIHJlbW90ZS1tb2RlIHRyYW5zZmVyLgotY2t1 dGlvLmMsIDI1IEF1ZyAyMDA3LgotCi1Ob3RpY2VkIHRoYXQgZXJyb3IgY29kZXMgbGlrZSBFU1JD SCBhcmUgbm90IGF2YWlsYWJsZSBpbiBhbGwgbW9kdWxlcy4KLVRoYXQncyBiZWNhdXNlIG9mIHNv bWUgY29tcGxpY2F0ZWQgaW4gI2lmZGVmcyBpbiBja2NkZWIuaCB0aGF0IHdpbmQgdXAgbm90Ci1h bHdheXMgI2luY2x1ZGluZyA8ZXJybm8uaD4uICBCdXQgSSBub3RpY2UgdGhhdCBja3V0aW8uYyBp bmNsdWRlcyBpdAotdW5jb25kaXRpb25hbGx5IHdpdGggbm8gaWxsIGVmZmVjdHMsIGFuZCBzbyBk b2VzIGNrdmZpby5jLiAgRG9lcyBhbnkgdmVyc2lvbgotb2YgVW5peCBhdCBhbGwgbm90IGhhdmUg PGVycm5vLmg+PyAgQWRkZWQgYSBjYXRjaC1hbGwgY2xhdXNlIHRvIGNrY2RlYi5oIHRvCi0jaW5j bHVkZSA8ZXJybm8uaD4gKGluIFVOSVggb25seSkgaWYsIGFmdGVyIHRoZSBvdGhlciBjbGF1c2Vz LCBFU1JDSCB3YXMKLXN0aWxsIG5vdCBkZWZpbmVkLiAgY2tjZGViLmgsIDI1IEF1ZyAyMDA3Lgot Ci1Ob3cgYmFjayB0byBkZWJ1Z2dpbmcgdHRwdHljbWQoKS4uLiAgUmVtb3RlLW1vZGUgdHJhbnNm ZXJzIHdpdGggdHRwdHljbWQoKQotd2VyZSBicm9rZW4gaW4gdHdvIHBsYWNlcywgbWF5YmUgYXMg bG9uZyBhcyAyIHdlZWtzIGFnbyAodGhpcyB3b3VsZCBoYXZlCi1hZmZlY3RlZCBub24tbmV0d29y ayB0cmFuc2ZlcnMgdG9vLCB3aGljaCBJIGNhbid0IHRlc3QgYW55IG1vcmUpLgotVGhlIGxvZ2lj IHdhcyBtaXNzaW5nIGluIGEgY291cGxlIHBsYWNlcyBmb3IgdGhlIG5vbi1uZXR3b3JrIGFuZC9v cgotbm9uLVRlbG5ldCBhbmQvb3Igbm9uLWVuY3J5cHRpbmcgY29ubmVjdGlvbnMgKGlmIHN0YXRl bWVudHMgd2l0aCBubyBlbHNlCi1wYXJ0cykuICBGaXhlZCBpbiBja3V0aW8uYywgMjUgQXVnIDIw MDcuCi0KLVRlc3RpbmcgcmVtb3RlIG1vZGU6Ci0KLSBrc3QgT0sgICB6c3QgT0sKLSBrc2IgT0sg ICB6c2IgT0sKLSBrcnQgT0sgICB6cnQgT0sKLSBrcmIgT0sgICB6cmIgT0sKLQotRnVuY3Rpb25h bGx5IGl0IGFsbCB3b3JrcyBidXQgdGhlcmUgYXJlIGhpdGNoZXMgd2l0aCBabW9kZW0gYXMgYWx3 YXlzLgotV2hlbiBzZW5kaW5nIHRvIEs5NToKLQotIC4gSWYgSSBzZW5kIHdpdGggbHN6LCB0aGVy ZSBhcmUgaHVuZHJlZHMgb2YgIlN1YnBhY2tldCB0b28gbG9uZyIgZXJyb3JzLAotICAgYW5kIHRo ZSB0cmFuc2ZlciBpcyB2ZXJ5IHNsb3csIGJ1dCBpdCBzdWNjZWVkcy4KLQotIC4gSWYgSSBzZW5k IHdpdGggdGhlIDE5OTQgT21lbiB2ZXJzaW9uIG9mIHN6LCB0cmFuc21pc3Npb24gaXMgaW5zdGFu dGFuZW91cwotICAgYW5kIHdpdGhvdXQgZXJyb3JzLCBidXQgdGhlbiBpdCBoYW5ncyBhdCB0aGUg ZW5kLgotCi0gLiBJZiBJIGJ5cGFzcyBDLUtlcm1pdCBhbmQgc2VuZCBkaXJlY3QgZnJvbSBsc3og b3Igc3osIGJvdGggd29yayBmaW5lLgotCi1TbyBjbGVhcmx5IHRoZSBwdHlzIGFyZSBnZXR0aW5n IGluIHRoZSB3YXkuICBUaGUgaGFuZ2luZyBhdCB0aGUgZW5kIHdvdWxkIGJlCi1jYXVzZWQgYnkg dGhlIHN6IHByb2Nlc3MgY2xvc2luZyBiZWZvcmUgaXRzIGxhc3Qgb3V0cHV0IHJlYWNoZWQgdGhl IG1hc3RlcgotcHR5LiAgSXQgd291bGQgbmVlZCB0byBkbyBzb21lIGZvcm0gb2YgZmx1c2hpbmcg YW5kL29yIHBhdXNpbmcgYXQgdGhlIGVuZAotYnV0IHRoZXJlJ3Mgbm90aGluZyBJIGNhbiBkbyBh Ym91dCB0aGF0OyB0aGVzZSBwcm9ncmFtcyB3ZXJlIG5vdCBkZXNpZ25lZCB0bwotYmUgdXNlZCBp biB0aGlzIHdheS4gIEFueXdheSwgaXQgb25seSBzZWVtcyB0byBoYXBwZW4gd2l0aCBmaWxlcyBs b25nZXIgdGhhbgotMTAwSy4KLQotRm9yIGxvY2FsIG1vZGUsIHRlc3RpbmcgaW4gU29sYXJpcyBv dmVyIG91ciBLZXJiZXJvcyA1IGNvbm5lY3Rpb24gYWdhaW46Ci0KLSBna2VybWl0ICBscnpzegot IGtzdCBPSyAgIHpzdCBGQUlMCi0ga3NiIE9LICAgenNiIEZBSUwKLSBrcnQgT0sgICB6cnQgT0sg YnV0IHdpdGggZXJyb3JzCi0ga3JiIE9LICAgenJiIEZBSUwKLQotSWYgSSB1c2UgT21lbiByenN6 IGFzIHRoZSBleHRlcm5hbCBwcm90b2NvbCAoZS5nLiB3aXRoIHpzdCksIGl0IGJsb2NrcwotcmVk aXJlY3Rpb24gYW5kIGl0IHNlbmRzIHRoZSBmaWxlIHRvIG15IHRlcm1pbmFsLCByYXRoZXIgdGhh biBvdmVyIHRoZQotY29ubmVjdGlvbi4gIFRoaXMgd291bGQgcHJvYmFibHkgYmUgYmVjYXVzZSBp dCBmaW5kcyBvdXQgdGhlIGRldmljZSBuYW1lIG9mCi10aGUgam9iJ3MgY29udHJvbGxpbmcgdGVy bWluYWwgYW5kIG9wZW5zIGl0LCB0byBwcmV2ZW50IHJlZGlyZWN0aW9uLiAgVGhpcwotaXMgaGFy ZCB0byBwcmV2ZW50IGluIFNvbGFyaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBUSU9DU1RUWSBpb2N0 bCgpLgotU3VwcG9zZWRseSB0aGUgc2FtZSB0aGluZyBpcyBhY2NvbXBsaXNoZWQgYnkgY2xvc2lu ZyBhbmQgcmVvcGVuaW5nIHRoZSBzbGF2ZQotcHR5IGFmdGVyIGRvaW5nIHNldHNpZCgpLiAgSSBh ZGRlZCBjb2RlIHRvIGRvIHRoaXMsIGJ1dCBpdCBtYWRlIG5vCi1kaWZmZXJlbmNlLiAgKElmIEkg dXNlIGxzeiBpbnN0ZWFkIG9mIHN6LCBpdCBpcyBpbmRlZWQgcmVkaXJlY3RlZCwgYnV0IGphbXMK LXVwIGFmdGVyIGFib3V0IDE1Sy4pICBja3VwdHkuYywgMjcgQXVnIDIwMDcuCi0KLU9uIE1hYyBP UyBYIHdpdGggc3ogMy43MyAxLTMwLTAzLCBob3dldmVyLCB0aGUgcmVkaXJlY3Rpb24gd29ya3Ms IHNvIEkKLWFzc3VtZSBpdCB3b3VsZCBhbHNvIHdvcmsgaW4gTGludXgsIEZyZWVCU0QsIE5ldEJT RCwgZXRjLCB0b28uICBEb2luZyB0aGUKLWZ1bGwgdGVzdCBzdWl0ZSBvbiBNYWMgT1MgWDoKLQot IGdrZXJtaXQgICBscnpzeiAgICAgICAgICByenN6Ci0gIGtzdCBPSyAgIHpzdCBGQUlMICgxKSAg ICBPSwotICBrc2IgT0sgICB6c2IgRkFJTCAoMikgICAgT0sKLSAga3J0IE9LICAgenJ0IE9LICAg KDMpICAgIE9LIGZvciAxMDBLIGZpbGUsIGZhaWxzIGZvciBsb25nZXIuCi0gIGtyYiBPSyAgIHpy YiBGQUlMICg0KSAgICBPSyAoMU1CIGFsbC1ieXRlcyB0ZXN0IHBhdHRlcm4pCi0KLSgxKSA2NEsg ZmlsZSBPSyBldmVyeSB0aW1lOyAxMDBLIGZpbGUgZmFpbHMgZXZlcnkgdGltZS4KLSgyKSAxMEsg ZmlsZSBmYWlscyBldmVyeSB0aW1lLgotKDMpIFN1Y2NlZWRzIHdpdGggODAwSyBmaWxlIGJ1dCBn ZXRzIGEgZmV3IHJlY292ZXJhYmxlIGVycm9ycy4KLSg0KSBTdWNjZWVkcyB3aXRoIDQ4SyBiaW5h cnkgZmlsZSB3aXRoIHNvbWUgZXJyb3JzLCBmYWlscyB3aXRoIGxvbmdlciBvbmVzLgotCi1TbyBh Y3R1YWxseSBpdCBsb29rcyBwcmV0dHkgZ29vZCwgaXQncyBqdXN0IHRoYXQgbHJ6c3ogbWVzc2Vz IHVwLiAgV2hlbgotc2VuZGluZyB3aXRoIGxzeiBpZiBJIGluY2x1ZGUgLUwgNTEyIGl0IHNlbmRz IHRoZSAxMDBLIHRlc3QgZmlsZSB3aXRoIG5vCi1lcnJvcnMsIGJ1dCBzdGlsbCBjaG9rZXMgb24g bG9uZ2VyIG9uZXMuCi0KLVRlc3Rpbmcgb24gTWFjIE9TIFggYWdhaW4sIGJ1dCB0aGlzIHRpbWUg b3ZlciBhIGNsZWFyLXRleHQgVGVsbmV0IGNvbm5lY3Rpb246Ci0KLSBna2VybWl0ICAgICAgICBs cnpzeiAgICByenN6Ci0gIGtzdCBPSyAgIHpzdCAgRkFJTCgxKSAgIE9LCi0gIGtzYiBPSyAgIHpz YiAgRkFJTCgyKSAgIE9LCi0gIGtydCBPSyAgIHpydCAgT0soMykgICAgIE9LCi0gIGtyYiBPSyAg IHpyYiAgRkFJTCg0KSAgIE9LIAotCi0oMSkgQWxtb3N0IHdvcmtlZCwgZmluaXNoZWQgNzc3SyBv dXQgb2YgODI0SyB3aXRob3V0IGVycm9ycy4KLSgyKSBHb3QgdG9ucyBvZiBlcnJvcnMsIGZhaWxl ZCBpbiBmaXJzdCAzMEsgb3V0IG9mIDEwMDBLLgotKDMpIE9LIGZvciAxMDBLIGZpbGUgYnV0IGZh aWxzIGZvciBsYXJnZXIuCi0oNCkgT0sgZm9yIDQ4SyBiaW5hcnkgZmFpbCBidXQgZmFpbHMgZm9y IGxhcmdlci4KLQotTWF5YmUgc2VlIGlmIHdlIGNhbiBkbyB3aXRob3V0IHRoZSBPUEVOUFRZIHBh cnQuCi0KLVRPTU9SUk9XIC0tIGp1c3QgY2xlYW4gdXAgdGhlIGNvZGUsIGFkZCBzb21lIFNFVCAv IFNIT1cgLyBIRUxQIGNvbW1hbmRzLAotZG9jdW1lbnQgaXQsIGFuZCBtb3ZlIG9uLgotCi1Ob3Rl OiBJbiBLOTUsIFNFVCBXSU5ET1cgc2V0cyB0aGUgWm1vZGVtIHBhY2tldCBsZW5ndGgsIDMyIC0g MTAyNCwgbXVsdGlwbGUKLW9mIDY0LgotCi1TRUUgfi84MC9leHRlcm5hbC50eHQKLQotQ2hhbmdl ZCBmdHAgcG9ydCBmcm9tIGludCB0byB1bnNpZ25lZCBpbnQuICBja2NmdHAuYywgMzAgQXVnIDIw MDcuCi0KLVRyaWVkIGFnYWluIHRvIGJ1aWxkIEtSQjQvS1JCNS9TU0wvVExTIHZlcnNpb24gZm9y IFNvbGFyaXMgOS4gIEhhZCB0byB1cGRhdGUKLXRoZSBidWlsZCBwcm9jZWR1cmUgYWdhaW4sIG9m IGNvdXJzZSwgYmVjYXVzZSBvZiBuZXcgZmlsZSBhbmQgZGlyZWN0b3J5Ci1uYW1lcywgYnV0IHJh biBpbnRvIHByb2JsZW1zIGFueXdheSBiZWNhdXNlIHRoZQotY3Utc29sYXJpczlnK2tyYjUra3Ji NCtvcGVuc3NsK3NoYWRvdytwYW0remxpYiB0YXJnZXQgd2FzIGNhbGxpbmcgYW5vdGhlcgotdGFy Z2V0IHRoYXQgZGlkIG5vdCBrbm93IGFib3V0IHRoZSBoYXJkd2lyZWQgcGF0aG5hbWVzLiAgSW50 ZWdyYXRlZCB0aGUgdHdvCi10YXJnZXRzIGFuZCB0cmllZCBidWlsZGluZyBhZ2Fpbi4gIEl0IGFj dHVhbGx5IGNvbXBpbGVkIG9rIChidXQgd2l0aCBsb3RzIG9mCi13YXJuaW5ncyBmcm9tIHRoZSBz ZWN1cml0eSBtb2R1bGVzKSwgYnV0IGZhaWxlZCBhdCBsaW5rIHRpbWUgd2l0aAota3JiNV9pbml0 X2V0cyBub3QgZm91bmQ7IGZpeGVkIHRoYXQgd2l0aCBhbiAjaWZkZWYgTk9fS1JCNV9JTklUX0VU Uywgbm93IGl0Ci1idWlsZHMgT0sgYnV0IHdpdGhvdXQgdGhlIGZ0cCBjbGllbnQuICBUcmllZCBi dWlsZGluZyBpdCBXSVRIIHRoZSBGVFAgYW5kCi10aGF0IHdhcyBPSyB0b28sIG5vIGNoYW5nZXMg bmVlZGVkIGV4Y2VwdCB0byB0aGUgYnVpbGQgcHJvY2VkdXJlLiAgMTIgRmViCi0yMDA4LCB0aGF0 IGlzOiBDLUtlcm1pdCA4LjAuMjEyIDogMjAwODAyMTIuCi0KLVRyaWVkIHRvIGJ1aWxkIHdpdGgg LURDS19TUlAgYW5kIC1sc3JwIGJ1dDoKLQotICBoYXNoX3N1cHBvcnRlZCAgICAgICAgICAgICAg ICAgICAgICBja2NmdHAubwotICBoYXNoX2dldGRlc2NieW5hbWUgICAgICAgICAgICAgICAgICBj a2NmdHAubwotICBoYXNoX2dldGRlc2NieWlkICAgICAgICAgICAgICAgICAgICBja2NmdHAubwot ICBjaXBoZXJfZ2V0ZGVzY2J5bmFtZSAgICAgICAgICAgICAgICBja2NmdHAubwotICBrcnlwdG9f ZGVsZXRlICAgICAgICAgICAgICAgICAgICAgICBja2NmdHAubwotICBrcnlwdG9fbmV3ICAgICAg ICAgICAgICAgICAgICAgICAgICBja2NmdHAubwotICBjaXBoZXJfc3VwcG9ydGVkICAgICAgICAg ICAgICAgICAgICBja2NmdHAubwotICBrcnlwdG9fbXNnX3ByaXYgICAgICAgICAgICAgICAgICAg ICBja2NmdHAubwotICBrcnlwdG9fbXNnX3NhZmUgICAgICAgICAgICAgICAgICAgICBja2NmdHAu bwotICBoYXNoX2dldGxpc3QgICAgICAgICAgICAgICAgICAgICAgICBja2NmdHAubwotICBjaXBo ZXJfZ2V0bGlzdCAgICAgICAgICAgICAgICAgICAgICBja2NmdHAubwotICBjaXBoZXJfZ2V0ZGVz Y2J5aWQgICAgICAgICAgICAgICAgICBja2NmdHAubwotCi1TZW50IG1haWwgdG8gVG9tIFd1IGFu ZCBiYWNrZWQgb2ZmIGZvciBub3cuICBtYWtlZmlsZSwgMTQgRmViIDIwMDguCi0oVG9tIFd1IG5l dmVyIGFuc3dlcmVkOyBzZWVtcyBsaWtlIFNSUCBpcyBkZWZ1bmN0LikKLQotVGhlICIuYmxhaCA9 IHh4eCIgZm9ybSBvZiB2YXJpYWJsZSBhc3NpZ25tZW50IG9ubHkgd29ya2VkIGZvciB2YXJpYWJs ZXMKLW5hbWVzIG9mIGxlbmd0aCAyMiBvciBsZXNzLCBub3RpY2VkIGFuZCBmaXhlZCBieSBXb2xm cmFtIFNhbmcuICBja3VjbWQuYywKLTUgTWFyIDIwMDguCi0KLUluICJzZXQgaG9zdCAvcHR5IHNz aCAuLi4iIGNvbm5lY3Rpb25zLCB0aGUgSU5QVVQgY29tbWFuZCBzdWRkZW5seSBzdG9wcGVkCi13 b3JraW5nLiAgVGhpcyBpcyBpbiBTb2xhcmlzIDkuICBJdCBoYXBwZW5zIHdpdGggYWxsIDguMC4q IHZlcnNpb25zIG9mCi1DLUtlcm1pdCwgc28gaXQncyBub3RoaW5nIHRvIGRvIHdpdGggdHRwdHlj bWQoKS4gIEFkZGVkIHNvbWUgZGVidWcoKQotc3RhdGVtZW50cyBidXQgdGhleSBkb24ndCBzaG93 IGFueXRoaW5nLiAgVHVybnMgb3V0IHRoZXJlIHdhc24ndCBhIHByb2JsZW0KLWFmdGVyIGFsbC4g IFdlZCBNYXIgMjYgMTY6MDQ6NTMgMjAwOAotCi1DaGFuZ2VkIGNtaWZpKCkgdG8gbm90IHByaW50 ICI/Tm8gZmlsZXMgbWF0Y2giIChvciB3aGF0ZXZlcikgaWYgU0VUIFFVSUVUIE9OLgotY2t1Y21k LmMsIDI2IE1hciAyMDA4LgotCi1BZGRlZCBcdihyZW1vdGVpcCkgZm9yIHRoZSBJUCBhZGRyZXNz IG9mIHRoZSBob3N0IHdlJ3JlIGNvbm5lY3RlZCB0bywKLWFuZCBcdihpbm1lc3NhZ2UpIGZvciBJ TlBVVCBzdGF0dXMgbWVzc2FnZXMgY29ycmVzcG9uZGluZyB0byBcdihpbnN0YXR1cykuCi1ja3V1 c3IuaCwgY2tjbWFpLmMsIGNrdXVzWzI0XS5jLCAyNiBNYXIgMjAwOC4KLQotTWFkZSBcZmtleXdv cmR2YWwoKSBzdHJpcCBicmFjZXMvcXVvdGVzIGZyb20gdGhlIHJpZ2h0LWhhbmQgc2lkZSBzbyB3 ZSBjYW4KLWhhbmRsZSB0aGluZ3MgbGlrZToKLQotICBwYXNzd29yZD0ic3RyaW5nd2l0aHNwYWNl YXRlbmQgIgotCi1ja3V1czQuYywgNiBBdWcgMjAwOC4KLQotQWRkZWQgaW52aXNpYmxlIFBVVEVO ViBjb21tYW5kIGZvciBVTklYIG9ubHkuICBWYWx1ZSBzaG91bGQgbm90IGJlIGVuY2xvc2VkCi1p biBkb3VibGVxdW90ZXMuICBSZXF1aXJlcyBsZ2UgXHYoYnVpbGRpZCkgMjAwODA4MjYuICBja3V1 c3IuW2NoXSwgMjYgQXVnIDIwMDguCi0KLUFkZGVkIFNFVCBWQVJJQUJMRS1FVkFMVUFUSU9OIHsg UkVDVVJTSVZFLCBTSU1QTEUgfS4gIFRoaXMgaXMgaGlnaGx5Ci1leHBlcmltZW50YWwsIGJ1dCBh bHNvIGhpZ2hseSBkZXNpcmFibGUgaWYgaXQgd29ya3Mgb3V0LiAgU0lNUExFIGluaGliaXRzCi10 aGUgZGVmYXVsdCByZWN1cnNpdmUgbWV0aG9kIG9mIGV2YWx1YXRpbmcgXCV4IGFuZCBcJnhbXSB2 YXJpYWJsZXMsIHdoaWNoCi1pcywgcXVpdGUgZnJhbmtseSwgbnV0cyBhbmQgbWFrZXMgcHJvZ3Jh bW1pbmcgaW4gS2VybWl0IGF0IGJlc3QKLWNvdW50ZXJpbnR1aXRpdmUuICBJIG1hZGUgYW4gZXhj ZXB0aW9uIGluIHRoZSBjYXNlIG9mIGFycmF5IHN1YnNjcmlwdHMsCi1iZWNhdXNlIGNoYW5naW5n IGhvdyB0aGV5IGFyZSBldmFsdWF0ZWQgY291bGQgYnJlYWsgYSBsb3Qgb2Ygc2NyaXB0cywgYW5k Ci1hbnl3YXkgdGhlcmUgc2hvdWxkIG5ldmVyIGJlIGFueSBoYXJtIGluIGV2YWx1YXRpbmcgdGhl bSByZWN1cnNpdmVseSBiZWNhdXNlCi10aGVpciBmaW5hbCB2YWx1ZSBpcyBhbHdheXMgKG9yIHNo b3VsZCBiZSkgbnVtZXJpYywgbm90IHNvbWUgc3RyaW5nIHRoYXQKLW1pZ2h0IGNvbnRhaW4gYmFj a3NsYXNoZXMuICBUaGUgU0VUIFZBUiBzZXR0aW5nIGlzIG9uIHRoZSBzdGFjaywganVzdCBsaWtl Ci1TRVQgUVVJRVQgKGl0IGZvbGxvd3MgdGhlIHF1aWV0L3hxdWlldCBjb2RlIGluIGNrdXVzWzM1 Nl0uYyksIHNvIG1hY3JvcyBvcgotY29tbWFuZCBmaWxlcyB0aGF0IGNoYW5nZSBpdCBjYW4ndCBi cmVhayB0aGUgc2NyaXB0IHRoYXQgaW52b2tlcyB0aGVtLgotQWRkZWQgXGZyZWN1cnNlKCkgdG8g Zm9yY2UgcmVjdXJzaXZlIGV2YWx1YXRpb24gb2YgYSBcJXggb3IgXCZ4W10gdmFyaWFibGUKLXJl Z2FyZGxlc3Mgb2YgdGhlIFZBUklBQkxFLUVWQUxVQVRJT04gc2V0dGluZy4gIEFkZGVkIFx2KHZh cmV2YWwpIHRvIGFsbG93Ci1wcm9ncmFtbWF0aWMgc2V0dGluZyB0byBjdXJyZW50IHNldHRpbmcu ICBUZXN0ZWQgb24gU29sYXJpcyA5IGJ1dCBzaG91bGQgYmUKLXRvdGFsbHkgcG9ydGFibGUuICBj a3V1c3IuW2NoXSwgY2t1dXNbMzU2XS5jLCAxMSBTZXAgMjAwOC4KLQotRnJvbSBH77+9bnRlciBL bmF1ZjogNjQtYml0IGJ1aWxkcyB3ZXJlIGZhaWxpbmcgb24gU3VTRSBMaW51eCBiZWNhdXNlCi1s aWJyZXNvbHYgYW5kIGxpYmNyeXB0IHdlcmUgaW4gbGliNjQgcmF0aGVyIHRoYW4gbGliOyB1cGRh dGVkIHRoZSB0ZXN0cyBpbgotdGhlIGxpbnV4IG1ha2VmaWxlIHRhcmdldCB0byBmaW5kIHRoZW0u ICBtYWtlZmlsZSwgMTIgSmFuIDIwMDkuCi0KLVRyaWVkIGJ1aWxkaW5nIG9uIFJlZCBIYXQgRW50 ZXJwcmlzZSBMaW51eCBTZXJ2ZXIgcmVsZWFzZSA1LjMgNjQtYml0LgotVGhlcmUgaXMgbm8gY3Vy c2VzIG9yIG5jdXJzZXMuICAibWFrZSBsaW51eG5jIiBjb21waWxlZCBPSyBidXQgY29sbGFwc2Vk IGF0Ci1saW5rIHRpbWUgbG9va2luZyBmb3IgY3J5cHQoKSwgcmVzX3NlYXJjaCgpLCBhbmQgZG5f ZXhwYW5kKCkuICBUdXJuZWQgb3V0Ci10aGUgbGludXhuYyAoYW5kIGxpbnV4YykgdGFyZ2V0cyBu ZWVkZWQgdGhlIHNhbWUgdHJlYXRtZW50IGFzIHRoZSBMaW51eCBvbmUKLWZvciA2NC1iaXQgTGlu dXhlcy4gIG1ha2VmaWxlLCAzIE1hciAyMDA5LgotCi1Db25zb2xpZGF0ZWQgdGhlIGxpbnV4IHRh cmdldHMgc28gd2Ugbm8gbG9uZ2VyIG5lZWQgdGhyZWUgc2VwYXJhdGUgb25lcyBmb3IKLWN1cnNl cywgbmN1cnNlcywgYW5kIG5vIGN1cnNlcy4gICJtYWtlIGxpbnV4IiB3b3JrcyBvayBvbiBjb21w dXRlcnMgd2l0aCBhbmQKLXdpdGhvdXQgKG4pY3Vyc2VzLiAgIm1ha2UgbGludXgrc3NsIiwgZGl0 dG8uICAibGludXgra3JiNStzc2wgYnVpbGRzIE9LIGJ1dAotbmVlZHMgLUROT19LUkI1X0lOSVRf RVRTIi4gIE1ha2VmaWxlLCAzIE1hciAyMDA5LgotCi1GaXhlZCBjb3B5cmlnaHQgZGF0ZSBhbm5v dW5jZWQgaW4gaGVyYWxkLCBja3V1czUuYywgMyBNYXIgMjAwOS4KLQotUGF0Y2ggZnJvbSBTZXRo IFRoZXJpYXVsdCB0byBhdm9pZCBkZXByZWNhdGlvbiB3YXJuaW5nIGZvciB1dG1wIHJlZmVyZW5j ZXMKLWluIGNrdWZpby5jIGluIE1hYyBPUyBYIDEwLjUgKGxhdGVyLCB0aGlzIGJlY2FtZSBhIGNv bnNvbGlkYXRlZCBtYWtlZmlsZQotdGFyZ2V0IHRoYXQgd29ya3MgYXV0b21hdGljYWxseSBmb3Ig YXQgbGVhc3QgTWFjIE9TIFggMTAuMy45IHRocm91Z2gKLTEwLjUuNikuICBtYWtlZmlsZSwgY2t1 ZmlvLmMsIDI4IEFwcmlsIDIwMDkuCi0KLXpzaGNtZCgpICh0aGUgZnVuY3Rpb24gdXNlZCBieSBS VU4gYW5kICEgdG8gcnVuIGV4dGVybmFsIGNvbW1hbmRzKSB3YXMgbm90Ci1mYWxsaW5nIGJhY2sg YXMgZXhwZWN0ZWQgaW4gTGludXggUkhFTDQvNSBpZiBTSEVMTCB3YXMgbm90IGRlZmluZWQgaW4g dGhlCi1lbnZpcm9ubWVudC4gIEFsc28gaW4gYWxsIFVuaXggdmVyc2lvbnMsIHRoZXJlIHdhcyBu byBpbmRpY2F0aW9uIGlmIGEgUlVOLyEKLWNvbW1hbmQgZmFpbGVkIChvdGhlciB0aGFuIHRoZSBy ZXR1cm4gY29kZSkgYmVjYXVzZSB0aGUgc3BlY2lmaWVkIHNoZWxsCi1kaWRuJ3QgZXhpc3Qgb3Ig d2FzIG5vdCBleGVjdXRhYmxlIChlLmcuIHRoZSBTSEVMTCBlbnZpcm9ubWVudCB2YXJpYWJsZSB3 YXMKLW1pc2RlZmluZWQpLiAgTm93IGl0IHByaW50cyB0aGUgbmFtZSBvZiB0aGUgb2ZmZW5kaW5n IHNoZWxsIGFuZCB0aGUgcmVhc29uCi1pdCBjb3VsZG4ndCBiZSBleGVjdXRlZCAoTm90IGZvdW5k LCBQZXJtaXNzaW9uIGRlbmllZCwgZXRjKS4gIGNrdWZpby5jLAotMjggQXByaWwgMjAwOS4KLQot VGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZ2V0IHRoZSBsYXN0IGZpZWxkIG9mIHN0cmluZzsgZm9y IGV4YW1wbGUsIHRoZQotZXh0ZW5zaW9uIGZyb20gYSBmaWxlbmFtZSwgd2hpY2ggbWlnaHQgaGF2 ZSBhbnkgbnVtYmVyIG9mIGZpZWxkcy4gIEluCi1nZW5lcmFsIHdlIHdhbnQgdG8gYmUgYWJsZSB0 byBnZXQgIndvcmQgbnVtYmVyIG4iIGNvdW50aW5nIGZyb20gdGhlIHJpZ2h0OwotXGZ3b3JkKCkg bGFja3MgdGhpcyBhYmlsaXR5LiAgTm93IGlmIHlvdSBnaXZlIGl0IGEgbmVnYXRpdmUgd29yZCBu dW1iZXIsCi10aGF0IHNheXMgdG8gY291bnQgZnJvbSB0aGUgcmlnaHQ7IGZvciBleGFtcGxlIFxm d29yZChvbmUgdHdvIHRocmVlIGZvdXIKLWZpdmUsIC0yKSByZXR1cm5zICJmb3VyIi4gIGNrY2xp Yi5jLCBja3V1c3IuYywgMTQgTWF5IDIwMDkuCi0KLUZpeGVkIGEgdHlwbyBpbiB0aGUgYWl4NTEr b3BlbnNzbCAoU1NMTElCUyBzaG91bGQgaGF2ZSBiZWVuIFNTTExJQikuCi1Gcm9tIEphc29uIExl aHIuICBtYWtlZmlsZSwgMjcgTWF5IDIwMDkuCi0KLVVwZGF0ZWQgdGhlIGxpbnV4K29wZW5zc2wr emxpYitzaGFkb3crcGFtIHRhcmdldCB0byBjaGFpbiB0byB0aGUgbmV3IG1haW4KLUxpbnV4IHRh cmdldC4gIEEgYnVuY2ggb2Ygb3RoZXIgb25lcyByZW1haW4gdW4tdXBkYXRlZC4gbWFrZWZpbGUs IDEyIEp1biAyMDA5LgotCi1VcGRhdGVzIHRvIHRoZSBuZXcgTWFjIE9TIFggMTAuNSB0YXJnZXQg ZnJvbSBTZXRoIFRoZXJpYXVsdCAod2hpY2ggaXMKLXN1cHBvc2VkIHRvIHdvcmsgb24gYWxsIE1h YyBPUyAxMC1wb2ludC1hbnl0aGluZykgdG8gYXZvaWQgd2FybmluZ3MKLXRoYXQgY2FtZSB1cCBv biBvbiBNYWMgT1MgMTAuNC4xMS9JbnRlbC4gIE9uY2UgdGhpcyBvbmUgaXMgcHJvdmVuIHdlIHNo b3VsZAotYmUgYWJsZSB0byByZW1vdmUvY29uc29saWRhdGUgbG90cyBvZiBvdGhlciBvbmVzLiAg bWFrZWZpbGUsIDEyIEp1biAyMDA5LgotCi1DLUtlcm1pdCBkaXNhYmxlcyBTU0wgd2l0aCB0aGUg bWVzc2FnZSAiP09wZW5TU0wgbGlicmFyaWVzIGRvIG5vdCBtYXRjaAotcmVxdWlyZWQgdmVyc2lv bi4iIGlmIHRoZSB2ZXJzaW9uIG9mIE9wZW5TU0wgdGhhdCBLZXJtaXQgd2FzIGJ1aWx0IHdpdGgg aXMKLW5vdCBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSB2ZXJzaW9uIHRoYXQgaXMgbG9hZGVkIGR5 bmFtaWNhbGx5IGF0IHJ1bnRpbWUuCi1UaGlzIGlzIGFjdHVhbGx5IHRoZSBwcm9wZXIgYmVoYXZp b3IsIHNpbmNlIEFQSXMgYXJlIG5vdCBndWFyYW50ZWVkIG5vdCB0bwotY2hhbmdlIGJldHdlZW4g T3BlblNTTCB2ZXJzaW9ucyBwcmlvciB0byAxLjAuMC4gIE1hZGUgdGhlIGVycm9yIG1lc3NhZ2Ug bW9yZQotaW5mb3JtYXRpdmUuICBja19zc2wuYywgMjYgQXVnIDIwMDksIGFuZCBhZ2FpbiAyOCBB dWcgMjAwOS4KLQotQUlYIDYuMSBpcyBvdXQsIGl0IGlzIHJlYWxseSBqdXN0IGEgbmV3IG5hbWUg Zm9yIEFJWCA1LjQuICBBZGRlZCBtYWtlZmlsZQotdGFyZ2V0cywgcGx1cyBmb3IgdGhlIGZpcnN0 IEkgbWFkZSBBSVggNC4yIGFuZCBsYXRlciBmaWd1cmUgb3V0IGl0cyB2ZXJzaW9uCi1udW1iZXIg aW4gdGhlIG1ha2VmaWxlIHRhcmdldCBzbyB3ZSBkb24ndCBoYXZlIHRvIGtlZXAgYWRkaW5nIG5l dyAtREFJWG5uCi1zZWN0aW9ucyB0byB0aGUgY29kZSwgYW5kIGFsc28gZ2V0IGl0cyBoYXJkd2Fy ZSBuYW1lIChlLmcuICJwb3dlcnBjIikgZnJvbQotdW5hbWUgYXQgbWFrZSB0aW1lLCByYXRoZXIg dGhhbiBoYXJkd2lyaW5nICJyczYwMDAiIGFzIEkgZGlkIGJlZm9yZS4KLUNvbnNvbGlkYXRlZCBh bGwgQUlYIDQuMiBhbmQgbGF0ZXIgdGFyZ2V0cyBzbyBub3cganVzdCAibWFrZSBhaXgiIG9yICJt YWtlCi1haXgrc3NsIiBjYW4gYmUgdXNlZC4gIEV4Y2VwdCBub3QgdGhlIGdjYyBvbmVzIGFzIHRo ZXkgaGF2ZSBzb21lIHF1aXJrcyBzbwotSSdkIHJhdGhlciBub3QgZGlzdHVyYiB0aGVtLiAgVGVz dGVkIHRoaXMgb24gQUlYIDUuMy4KLW1ha2VmaWxlLCAyOCBBdWcgMjAwOS4KLQotRnJvbSBLaW5q YWwgU2hhaCwgYSBjb3JyZWN0aW9uIHRvIHRoZSBMaW51eCBtYWtlZmlsZSBlbnRyeSB0aGF0IGFs bG93cyBpdAotZmluZCB0aGUgNjQtYml0IGN1cnNlcyBvciBuY3Vyc2VzIGxpYnJhcnkuICBtYWtl ZmlsZSwgMjkgQXVnIDIwMDkuCi0KLVJlbmFtZWQgYWl4NFsyM106IHRvIG9sZGFpeDRbMjNdOiBp biBtYWtlZmlsZSB0byBmaXggdGhlIHdhcm5pbmcgbWVzc2FnZXMKLUkgZGlkbid0IG5vdGljZSBi ZWZvcmUuICBJIGRpZG4ndCB3YW50IHRvIHJlbW92ZSB0aGVtIGJlY2F1c2UgdGhleSBoYXZlCi1z b21lIHNwZWNpYWwgdGhpbmdzIHRoYXQgbWlnaHQgc3RpbGwgYmUgbmVlZGVkLCBpZiBhbnlib2R5 IHN0aWxsIGhhcyB0aGVzZSAKLUFJWCB2ZXJzaW9ucy4gIG1ha2VmaWxlLCAyOSBBdWcgMjAwOS4K LQotQnVpbHQgb24gUkhFTCA1LjMgNjQtYml0LCByZWd1bGFyIGFuZCB3aXRoIE9wZW5TU0wgMC45 LjhlLiAgMzEgQXVnIDIwMDkuCi0KLUJ1aWx0IG9uIE5ldEJTRCA1LjAuMS9pMzg2LCByZWd1bGFy IGFuZCB3aXRoIE9wZW5TU0wgMC45LjktZGV2LCAxIFNlcCAyMDA5LgotCi1DaGFuZ2VkIFNTTCBt ZXNzYWdlIHRvIG1lbnRpb24gTERfTElCUkFSWV9QQVRIIChTb2xhcmlzKSwgU0hMSUJfUEFUSCAo SFAtVVgpLAotTElCUEFUSCAoQUlYKSwgb3IgTERfTElCUkFSWV9QQVRIIChMaW51eCkuICBja19z c2wuYywgMyBTZXAgMjAwOQotCi1Ob3RpY2VkIHRoYXQgIm1ha2UgbGludXgrb3BlbnNzbCIgZmFp bHMgdG8gaW5jbHVkZSAtbHV0aWwgYSBsaW5rIHRpbWUsIHdoaWNoCi1pdCBuZWVkcyBmb3Igb3Bl bnB0eSgpLiAgVGhhdCdzIGJlY2F1c2UgdGhpcyB0YXJnZXQgaXMgb2Jzb2xldGUuICBJIHJlbmFt ZWQKLWl0IHRvIGJlIG9sZGxpbnV4K29wZW5zc2wgYW5kIGFkZGVkIGxpbnV4K29wZW5zc2wgYXMg YSBzeW5vbnltIGZvcgotbGludXgrc3NsLiAgbWFrZWZpbGUsIDMgU2VwIDIwMDkuCi0KLVRlc3Rl ZCBsaW51eCtvcGVuc3NsK3psaWIrc2hhZG93K3BhbSwgaXQncyBPSy4gIEFsc28gbGludXgra3Ji NS4gIEFsc28KLWxpbnV4K2tyYjUrc3NsLiAgbWFrZWZpbGUsIDMgU2VwIDIwMDkuCi0KLVRyaWVk IGJ1aWxkaW5nIG9uIFNvbGFyaXMgOSB3aXRoIE9wZW5TU0wgMC45LjhrIHdpdGgKLXNvbGFyaXM5 ZytvcGVuc3NsK3NoYWRvdytwYW0remxpYiwgaXQgZmFpbGVkIGxpa2Ugc286Ci0KLSAgY2tfc3Ns LmM6Mjg3NTogZXJyb3I6IGNvbmZsaWN0aW5nIHR5cGVzIGZvciAnaW5ldF9hdG9uJwotICAvdXNy L2luY2x1ZGUvYXJwYS9pbmV0Lmg6NTI6IHByZXZpb3VzIGRlY2xhcmF0aW9uIG9mICdpbmV0X2F0 b24nIHdhcyBoZXJlCi0gIG1ha2VbMl06IFtja19zc2wub10gRXJyb3IgMQotICBtYWtlWzJdOiBM ZWF2aW5nIGRpcmVjdG9yeSBobXQvc2lyaXVzMS9wcnYwL2tkL2ZkYy9zb2xhcmlzOXNzbCcKLSAg bWFrZVsxXTogW3NvbGFyaXMyeGcrb3BlbnNzbCt6bGliK3BhbStzaGFkb3ddIEVycm9yIDIKLSAg bWFrZVsxXTogTGVhdmluZyBkaXJlY3RvcnkgaG10L3Npcml1czEvcHJ2MC9rZC9mZGMvc29sYXJp czlzc2wnCi0gIG1ha2U6IFtzb2xhcmlzOWcrb3BlbnNzbCtzaGFkb3crcGFtK3psaWJdIEVycm9y IDIKLQotVGhlIHByb2JsZW0gd2FzIGNhdXNlZCBieSBpbmNsdWRpbmcgYW4gaW5ldF9hdG9uKCkg ZnVuY3Rpb24gY2tfc3NsLmMgZm9yCi10aGUgYmVuZWZpdCBvZiBwbGF0Zm9ybXMgdGhhdCBkb24n dCBoYXZlIG9uZSBpbiB0aGVpciBsaWJyYXJpZXMuICBUaGlzIGlzCi1kZWZlYXRlZCBieSBpbmNs dWRpbmcgTk9fRENMX0lORVRfQVRPTiBpbiBLRkxBR1MuICBJIGFkZGVkIHRoaXMsIGJ1dCB0aGVu Ci1JIHRob3VnaHQgaXQgd291bGQgYmUgYSBnb29kIGlkZWEgdG8gYXV0b21hdGljYWxseSBzZW5z ZSB0aGUgT3BlblNTTAotdmVyc2lvbiBzbyB3ZSBjYW4gYXV0b21hdGljYWxseSBzZXQgT1BFTlNT TF8wOTcgb3IgT1BFTlNTTF8wOTggcmF0aGVyIHRoYW4KLWJvbWJpbmcgb3V0LCBzbyBJIGFkZGVk IGNvZGUgdG8gZG8gdGhhdCB0b28sIGFuZCBhbHNvIHRvIHNldCB0aGUgU29sYXJpcwotdmVyc2lv biBudW1iZXI6IDksIDEwLCBvciAxMS4gIFRoZSBuZXcgZW50cnkgaXMgc29sYXJpczlnK29wZW5z c2wuCi1ja2NkZWIuaCwgbWFrZWZpbGUsIDMgU2VwIDIwMDkuCi0KLUZpeGVkIGEgY29tcGxhaW50 IGluIGNrdWZpby5jIGFib3V0IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGluaXRncm91cHMuCi1j a3VmaW8uYywgNCBTZXAgMjAwOS4KLQotQnVpbHQgb24gU29sYXJpcyAxMCB3aXRoIGdjYyBhbmQg U3VuIENDIHVzaW5nIG5ldyBzb2xhcmlzezksMTAsMTF9IHRhcmdldAotdGhhdCBpcyBsaWtlIHRo ZSBuZXcgc29sYXJpc3s5LDEwLDExfWcgb25lIGJ1dCB3aXRob3V0IHRoZSBnY2Npc21zLgotbWFr ZWZpbGUsIDQgU2VwIDIwMDkuCi0KLUNoYW5nZWQgc29sYXJpc3s5LDEwLDExfWcrc3NsIHRhcmdl dCB0byBzZXQgb25seSB0aGUgU1NMLXNwZWNpZmljIHRoaW5ncyBhbmQKLXRoZW4gY2hhaW4gdG8g dGhlIG1haW4gc29sYXJpc3s5LDEwLDExfWcgdGFyZ2V0LiAgVGVzdGVkIE9LIG9uIFNvbGFyaXMg OSBhbmQKLTEwLiAgbWFrZWZpbGUsIDQgU2VwIDIwMDkuCi0KLUNyZWF0ZWQgc29sYXJpc3s5LDEw LDExfStzc2wgdGFyZ2V0IHRoYXQgaXMgZXhhY3RseSBsaWtlIHRoZQotc29sYXJpc3s5LDEwLDEx fWcrc3NsIGV4Y2VwdCBpdCBjaGFpbnMgdG8gdGhlIHNvbGFyaXN7OSwxMCwxMX0gdGFyZ2V0Ci1p bnN0ZWFkIG9mIHRoZSBzb2xhcmlzezksMTAsMTF9ZyBvbmUuICBUaGF0IGlzLCBpdCBidWlsZHMg YW4gU1NMIHZlcnNpb24gb2YKLUMtS2VybWl0IHVzaW5nIFN1biBDQyByYXRoZXIgdGhhbiBnY2Mu ICBtYWtlZmlsZSwgNCBTZXAgMjAwOS4KLQotVHJpZWQgYnVpbGRpbmcgb24gSFAtVVggMTAuMjAs IGJ1bmRsZWQgKG5vbi1BTlNJKSBjb21waWxlciAoIm1ha2UKLWhwdXgxMDAwIikuICBUaGlzIGZh aWxlZCB1bnRpbCBJOgotCi0gLiBNb3ZlZCBhIHN0cnVjdCBpbml0aWFsaXphdGlvbiBvdXQgb2Yg c2V0ZXh0ZXJuKCksIGNrdXVzMy5jLgotIC4gUmVtb3ZlZCBhbiBBTlNJaXNtIGZyb20gdGhlIGRl Y2xhcmF0aW9uIG9mIHNpZ2NobGRfaGFuZGxlcigpIGluIGNrdXRpby5jCi0gLiBBZGRlZCBhIGNh c3QgdG8gc3RyY21wKCkgaW4genZ1c2VyKCksIGNrdWZpby5jLgotCi1CdWlsZHMgT0sgbm93LiAg QnVpbHQgT0sgd2l0aCAiaHB1eDEwMDBvIiAodGhlIEFOU0kgY29tcGlsZXIpIHRvby4KLUFuZCB3 aXRoICJocHV4MTAwMGdjYyIuICBDb3VsZG4ndCB0ZXN0ICJocHV4MTAwMG8rb3BlbnNzbCIuICAy MSBTZXAgMjAwOS4KLQotVGhlIFNvbnkgUGxheXN0YXRpb24gMiBhbmQgMyBhcmUgNjQtYml0IFBv d2VyUEMgcGxhdGZvcm1zIHRoYXQgY2FuIHJ1biBMaW51eAotaWYgaXQgaXMgaW5zdGFsbGVkIGFz IGFuICJvdGhlciBPUyIgb24gaXRzIGhhcmQgZGlzazsgYW5kIHRoZSBMaW51eCBrZXJuZWwKLXNp bmNlIDIuNi4yMSBzdXBwb3J0cyB0aGUgUFMzIHdpdGhvdXQgYW55IHBhdGNoaW5nIHJlcXVpcmVk LiAgUGF3ZWwgUm9nb2N6Ci1yZXBvcnRlZCB0aGF0ICJtYWtlIGxpbnV4cHBjIiAob25lIG9mIHRo ZSBvbGQgdGFyZ2V0cyB0aGF0IGhhcyBub3QgeWV0IGJlZW4KLWludGVncmF0ZWQgaW50byB0aGUg bWFpbiAibGludXgiIHRhcmdldCkgY29tcGlsZXMgT0sgb24gMi42LjI5LXlkbDYxLjMKLShZZWxs b3cgRG9nIExpbnV4IHJlbGVhc2UgNi4yICdQeXhpcycpLCBidXQgZmFpbHMgYXQgbGluayB0aW1l IGJlY2F1c2UKLSdvcGVucHR5JyBpc24ndCBmb3VuZCwgYmVjYXVzZSAtbHV0aWwgd2FzIG5vdCBp bmNsdWRlZCwgYmVjYXVzZSB0aGF0IHBhcnQKLXdhcyBhZGRlZCBvbmx5IHRvIHRoZSBtYWluIGxp bnV4IHRhcmdldC4gIEkgYXNrZWQgaGltIHRvIHRyeSAibWFrZSBsaW51eCIKLWFuZCBoZSBzZW50 IGJhY2sgYSB0cmFuc2NyaXB0IGluIHdoaWNoIHRoZXJlIHdlcmUgdGhvdXNhbmRzIG9mIGVycm9y cyBmcm9tCi10aGUgY3Vyc2VzIGNvZGUgY2t1dXN4LmMuICBMYXRlciBJIHRyaWVkIGl0IG15c2Vs ZiBhbmQgaXQgYnVpbHQgd2l0aG91dCBhCi1oaXRjaC4gIE15IHRoZW9yeSBpcyB0aGF0IGJldHdl ZW4gdGhlbiBhbmQgbm93LCBhIG1pc3NpbmcgcGllY2Ugb2YgdGhlCi1uY3Vyc2VzIGxpYnJhcnkg KC91c3IvaW5jbHVkZS9uY3Vyc2Vzdykgd2FzIGluc3RhbGxlZC4gIDIxIFNlcCAyMDA5LgotCi1I UC1VWCA5LjA1IG9uIFBBLVJJU0MgOTAwMC83MTIgYnVpbGRpbmcgd2l0aCBocHV4MDkwMCAoYnVu ZGxlZCBjb21waWxlcik6Ci0gLiBja3V0aW8uYyBjb21waWxhdGlvbiBmYWlsZWQgd2l0aCBQRU5E SU4gYW5kIEZMVVNITyBub3QgZGVmaW5lZCBpbgotICAgcHR5X21ha2VfcmF3KCkuICBJIGR1bW1p ZWQgZGVmaW5pdGlvbnMgZm9yIHRoZW0gdG8gaGFuZGxlIHRoaXMgc2l0dWF0aW9uCi0gICBvbiB0 aGlzIG9yIGFueSBvdGhlciBwbGF0Zm9ybSB3aGVyZSBpdCBtaWdodCBjcm9wIHVwLgotICAgY2t1 dGlvLmMsIDI0IFNlcCAyMDA5LgotIC4gRGl0dG8gZm9yIHRoZSBQVFkgbW9kdWxlLCArIElNQVhC RUwuICBja3VwdHkuYywgMjQgU2VwIDIwMDkuCi0gLiBSZWZlcmVuY2VzIHRvIGVuZHVzZXJzaGVs bCgpIHdlcmUgZmF0YWwgaW4gdGhlIGJ1bmRsZWQgY29tcGlsZXIuICBDaGFuZ2VkCi0gICB0aGUg aHB1eDA5MDAgdGFyZ2V0IHRvIGRlZmluZSBOT0RDTEVORFVTRVJTSEVMTCwgYW5kIHB1dCBhIHNw ZWNpYWwgY2FzZQotICAgaW4gY2t1ZmlvLmMgdG8gbm90IHB1dCBhIGNhc3QgaW4gZnJvbnQgb2Yg dGhlIGNhbGwgaWYgTk9EQ0xFTkRVU0VSU0hFTEwKLSAgIGlzIGRlZmluZWQuICBOb3cgaXQgYnVp bGRzIGFuZCBsaW5rcyBPSy4gIG1ha2VmaWxlLCBja3VmaW8uYywgMjQgU2VwIDIwMDkuCi0KLUhQ LVVYIDkuMDUgb24gUEEtUklTQyA5MDAwLzcxMiBidWlsZGluZyB3aXRoIGhwdXgwOTAwbyAob3B0 aW1pemluZyBjb21waWxlcik6Ci0gLiBXYXJuaW5ncyBpbiBja3V0aW8uYyBhdCBsaW5lIDE0ODYw IGFib3V0IGFyZ3VtZW50cyB0byBzZWxlY3QgKHBvaW50ZXJzCi0gICBhcmUgbm90IGFzc2lnbm1l bnQtY29tcGF0aWJsZSkuICAibWFuIHNlbGVjdCIgc2F5cyBhcmd1bWVudHMgYXJlIGludHMuCi0g ICBEZWZpbmluZyBJTlRTRUxFQ1QgZml4ZXMgdGhlc2Ugd2FybmluZ3MgYnV0IHJlc3VsdHMgaW4g ZmF0YWwgZXJyb3JzIGxhdGVyCi0gICBhcm91bmQgbGluZSAxNDg4MSBhbmQgb3RoZXJzIGluIHRo ZSBhcmVhIGludm9sdmluZyBGRF9TRVQuICBUaGlzIHdhcyB0b28KLSAgIGludm9sdmVkIHNvIEkg cHV0IGl0IGJhY2sgYXMgaXQgd2FzLiAgMjQgU2VwIDIwMDkuCi0KLUJ1aWx0IE9LIG9uIFNvbGFy aXMgMTAgd2l0aCBTdW4gQ0MuICBBIGNvdXBsZSB3YXJuaW5ncyBhYm91dCBpbXBsaWNpdAotZnVu Y3Rpb24gZGVjbGFyYXRpb25zIGZvciBjdXJzZXMgcm91dGluZXMgYmVjYXVzZSBhcHBhcmVudGx5 IHRoZXkgYXJlbid0Ci1kZWNsYXJlZCBpbiBjdXJzZXMuaC4gIFR1ZmYuICAyNSBTZXAgMjAwOS4K LQotVHJpZWQgYnVpbGRpbmcgb24gU29sYXJpcyAxMCB3aXRoIFN1biBDQyBhbmQgT3BlblNTTCAw LjkuOGssIGFuZCB0aGlzCi11bmNvdmVyZWQgdmFyaW91cyBsb29zZSBlbmRzIGluIHRoZSBzb2xh cmlzOStvcGVuc3NsIHRhcmdldCwgd2hpY2ggSSBmaXhlZC4KLW1ha2VmaWxlLCAyNSBTZXAgMjAw NS4KLQotRml4ZWQgZm91ciB0eXBvcyBpbiBwcmludGZzIGluIGNrX3NzbC5jLCBcJSBpbnN0ZWFk IG9mIGp1c3QgJS4gIDI1IFNlcCAyMDA5LgotCi1TcXVlbGNoZWQgMjAtc29tZSBjb21wbGFpbnRz IGFib3V0IGEgY2hhcmFjdGVyIGFycmF5IGJlaW5nIHJlZmVycmVkIHRvCi1kaXJlY3RseSBpbnN0 ZWFkIG9mIGJ5IGEgcG9pbnRlciwgcGx1cyBzZXZlcmFsIG90aGVyIHNpbWlsYXIgbml0cyB0byBn ZXQgcmlkCi1vZiBhbGwgdGhlIGNvbXBpbGF0aW9uIHdhcm5pbmdzIG9uIFNvbGFyaXMgMTAgd2l0 aCBTdW4gQyA1LjggUGF0Y2ggMTIxMDE1LTA2Ci0yMDA3LzEwLzAzLiAgY2tjdGVsLmMsIGNrY3Rl bC5oLCAyNSBTZXAgMjAwOS4KLQotQnVpbHQgdGhlIHJlc3VsdCBvbiB0aGUgc2FtZSBTb2xhcmlz IDEwIHN5c3RlbSB3aXRoIGdjYyA0LjIuNCB1c2luZyB0aGUKLW5ldyBzb2xhcmkxMGcrb3BlbnNz bCB0YXJnZXQsIHdvcmtpbmcgb3V0IGEgZmV3IGtpbmtzIGhlcmUgdG9vLgotbWFrZWZpbGUsIDI1 IFNlcCAyMDA5LgotCi1NYWRlIGNvbnNvbGlkYXRlZCBTb2xhcmlzIDkvMTAvMTEgNjQtYml0IHRh cmdldHMgZm9yIGdjYywgc29sYXJpczlnNjQsCi1zb2xhcmlzMTBnNjQsIHNvbGFyaXMxMWc2NCwg dGVzdGVkIG9uIFNvbGFyaXMgMTAgU3BhcmMuIG1ha2VmaWxlLCAyNSBTZXAgMjAwOS4KLQotTWFk ZSBjb25zb2xpZGF0ZWQgU29sYXJpcyA5LzEwLzExIDY0LWJpdCB0YXJnZXRzIGZvciBTdW4gY2M6 IHNvbGFyaXM5XzY0LAotc29sYXJpczEwXzY0LCBzb2xhcmlzMTFfNjQuICBUaGVzZSBzaW1wbHkg c2V0IGEgY291cGxlIGZsYWdzIGFuZCBjaGFpbiB0bwotdGhlIG1haW4gc29sYXJpczkgdGFyZ2V0 LiAgbWFrZWZpbGUsIDI1IFNlcCAyMDA5LgotCi1SZW1vdmVkIGEgYnVuY2ggb2Ygb2xkIHN1cGVy Zmx1b3VzIFNvbGFyaXMgOSBhbmQgMTAgdGFyZ2V0czogb2xkc29sYXJpczksCi1vbGRzb2xhcmlz OWxmcywgc29sYXJpczlnNjQgc29sYXJpczlnXzY0LCBvbGRzb2xhcmlzMTAgb2xkIHNvbGFyaXMx MGxmcywKLW9sZHNvbGFyaXMxMCtvcGVuc3NsLCBvbGRzb2xhcmlzMTBnK29wZW5zc2wsIHNvbGFy aXMxMF82NCwgb2xkc29sYXJpczEwZywKLXNvbGFyaXMxMGdfNjQsIHNvbGFyaXMxMGc2NC4gIFRo ZXJlIGFyZSBzdGlsbCBwbGVudHkgbW9yZSB0byBwcnVuZSBidXQgaXQncwotYSBzdGFydC4gIG1h a2VmaWxlLCAyNSBTZXAgMjAwOS4KLQotQWRkZWQgb3IgZml4ZWQgc29tZSBtaXNzaW5nIHByb3Rv dHlwZXMgaW4gY2tjdGVsLmg6Ci1md2R4X3NlbmRfeGF1dGhfdG9feHNlcnZlcigpLCBmd2R4X3Bh cnNlX2Rpc3BsYXluYW1lLiAgMjUgU2VwIDIwMDkuCi0KLUltcHJvdmVkIHRoZSBpbnN0cnVjdGlv bnMgZm9yIGJ1aWxkaW5nIHNlY3VyZSB2ZXJzaW9ucyBpbiB0aGUgbWFrZWZpbGUsCi11c2luZyB0 aGlzIGV4YW1wbGU6Ci0KLSAgbWFrZSBzb2xhcmlzOStvcGVuc3NsICJTU0xJTkM9LUkvb3B0L29w ZW5zc2wtMC45LjhrL2luY2x1ZGUiIFwKLSAgICJTU0xMSUI9LUwvb3B0L29wZW5zc2wtMC45Ljhr L2xpYiIKLQotbWFrZWZpbGUsIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L3NlY3VyaXR5Lmh0 bWwsIDI1IFNlcCAyMDA5LgotCi1CdWlsdCBvbiBIUC1VWCAxMS4xMSwgMjYgU2VwIDIwMDk6Ci0g LiBtYWtlIGhwdXgxMTAwIChvaykKLSAuIG1ha2UgaHB1eDExMDBnY2MgKG9rKQotIC4gbWFrZSBo cHV4MTEwMG8gKGdldHMgYSBsb3Qgb2Ygd2FybmluZ3MgYWJvdXQgc2VuZHBhdGggYW5kIHNlbmRm aWxlLAotICAgIGJlY2F1c2UgdGhleSBhcmUgYWxzbyBkZWNsYXJlZCBpbiA8c3lzL3NvY2tldC5o PiwgYnV0IGJ1aWxkcyBPSykKLSAuIG1ha2UgaHB1eDEwMDBnY2Mrb3BlbnNzbCBcCi0gICAgU1NM SU5DPS1JL29wdC9vcGVuc3NsL2luY2x1ZGUgU1NMTElCPS1ML29wdC9vcGVuc3NsL2xpYgotCi1O b3RlOiBzZW5kcGF0aCBhbmQgc2VuZGZpbGUgYXJlIG5vdCBLZXJtaXQgc3ltYm9scy4gIFRoZSB3 YXJuaW5ncyBhcmUgY29taW5nCi1mcm9tIHNvY2tldC5oOiAnUmVkZWNsYXJhdGlvbiBvZiAic2Vu ZGZpbGUiIHdpdGggYSBkaWZmZXJlbnQgc3RvcmFnZSBjbGFzcwotc3BlY2lmaWVyJy4gIFRoaXMg aXMgbm90aGluZyBuZXc7IHNlZSBub3RlcyBvZiAyLTQgSmFuIDIwMDUuCi0KLUZyb20gUGV0ZXIg RWljaGhvcm46Ci0gLiBVcGRhdGUgdG8gbWFrZWZpbGUgdG8gbWFrZSBjdXJyZW50IGNvZGUgYnVp bGQgT0sgb24gSFAtVVggOC4wMC4KLSAuIENoYW5nZXMgdG8gZm9ybWF0IG9mIHNvbWUgaGludHMg dG8gbWFrZSB0aGVtIG1vcmUgY29weS1hbmQtcGFzdGFibGUuCi1tYWtlZmlsZSwgY2t1dTUuYywg MjggU2VwIDIwMDkuCi0KLUZyb20gUGV0ZXIgRWljaGhvcm46IENoYW5nZXMgdG8gSFAtVVggNy4w IHRhcmdldCB0byBpbmNyZWFzZSB0aGUgc3dpdGNoIHRhYmxlCi1zdGFjayBzaXplLCB3aGljaCB3 YXMgb3ZlcmZsb3dpbmcuICBtYWtlZmlsZSwgMzAgU2VwIDIwMDkKLQotSFAtVVggNi41ICgxOTg5 KSwgIm1ha2UgaHB1eDA2NTB0Y3BjIi4uLiAoODoxOS4uLikgIE5lZWRlZCB0byBub3QgaW5jbHVk ZQotYXJwYS9pbmV0LmggKHdoaWNoIGRvZXNuJ3QgZXhpc3QpIGFuZCBub3QgdXNlIGhvc3QgYWRk cmVzcyBsaXN0cyAoYWRkCi0tRE5PSEFERFJMSVNUKSwgd2hpY2ggZ2V0cyB1cyBwYXN0IGNrY25l dC5jLCBidXQgaW4gY2tjZnRwLmMgd2UgYm9tYiBvdXQgb24KLUZEX1NFVFNJWkUgdW5kZWZpbmVk LiAgU29tZWhvdyB3ZSB3b3JrZWQgYXJvdW5kIHRoaXMgaW4gY2tjbmV0LmMuICBQYXRjaGVkCi1p biBhIGRlZmluaXRpb24gaW4gY2tjZnRwLmMsIGFuZCBhbHNvIGFkZGVkIC1ESU5UU0VMRUNUIHRv IGNvbXBpbGVyIGZsYWdzLgotQ29tcGlsZXMgb2ssIGJvbWJzIGF0IGxpbmsgdGltZSBvbiBiY29w eSwgYnplcm8sIEZEX1pFUk8sIEZEX1NFVCwgRkRfSVNTRVQuCi1Ob3cgaXQgY29tcGlsZXMgYW5k IGxpbmtzIE9LIGJ1dCBkdW1wcyBjb3JlIHdoZW4gc3RhcnRlZC4gIEFkZGVkCi0tRE5PQ0tHRVRG UUhPU1QsIHJlYnVpbHQgZnJvbSBzY3JhdGNoICh0YWtlcyAzNSBtaW51dGVzKS4gIEl0IHN0YXJ0 cyBPSywgYnV0Ci1pdCBkdW1wcyBjb3JlIHdoZW4gZ2l2ZW4gYSAidGVsbmV0IHh4eCIgY29tbWFu ZCwgd2hlcmUgeHh4IGlzIGEgaG9zdG5hbWUuCi1Ib3dldmVyLCBpdCB3b3JrcyBPSyBpZiBhbiBJ UCBhZGRyZXNzIGlzIHVzZWQ6ICJ0ZWxuZXQgMTIzLjQ1LjYuNzgiLiAgSXQKLXRvb2sgYWxsIGRh eSB0byB0cmFjayB0aGlzIGRvd24sIGJ1dCBub3cgaXQncyBmaXhlZCAoc2VlIHRoZSAjaWZkZWYg SFBVWDYKLXNlY3Rpb25zIG9mIGNrY25ldC5jKS4gIFNvIG5vdyAoZm9yIHRoZSBmaXJzdCB0aW1l LCBJIHRoaW5rKSB3ZSBoYXZlIGJvdGgKLXRlbG5ldCBhbmQgZnRwIGluIEhQLVVYIDYueCwgaWYg YW55b25lIGNhcmVzLiAgY2tjbmV0LltjaF0sIGNrY2Z0cC5jLAotbWFrZWZpbGUsIDIgT2N0IDIw MDkuCi0KLUNoYW5nZWQgZGVmYXVsdCBTRVQgVEVSTUlOQUwgVFlQRSB0eXBlIGZvciBLOTUgZnJv bSB2dDMyMCB0byB2dDIyMC4gIFRoaXMgaXMKLWJlY2F1c2UgVW5peCBPUydzIHN1Y2ggYXMgU29s YXJpcyBoYXZlIGRyb3BwZWQgdnQzMjAgYXMgYSB0ZXJtaW5hbCB0eXBlLgotc2V0dHJtdHlwKCks IGNrdXVzNy5jLCA1IE9jdCAyMDA5LgotCi1JIG1vdmVkIHRoZSBQVVRFTlYgY29tbWFuZCBjb2Rl LCB3aGljaCB3YXMgaW5saW5lLCB0byBhIGZ1bmN0aW9uLCBkb3B1dGVudigpLgotY2t1dXNbcjdd LmMsIGNrdXVzci5oLCA1IE9jdCAyMDA5LgotCi1DaGFuZ2VkIHRoZSBVTklYIHZlcnNpb24gb2Yg U0VUIFRFUk1JTkFMIFRZUEUgdG8gdGFrZSBhIHZhbHVlIGFuZCB0aGVuIGRvCi10aGUgZXF1aXZh bGVudCBvZiAiZXhwb3J0IFRFUk09dmFsdWUiIGJ5IGNhbGxpbmcgZG9wdXRlbnYoKS4gIFRoaXMg c2V0cwotXCQoVEVSTSkgY29ycmVjdGx5IGFuZCBwYXNzZXMgaXRzIHZhbHVlIGFsb25nIHRvIGlu ZmVyaW9yIHByb2Nlc3Nlcy4KLUhvd2V2ZXIsIHRvIG1ha2UgdGhpcyB0YWtlIGVmZmVjdCB3aXRo aW4gS2VybWl0IGl0c2VsZiAoZm9yIHRoZSBmdWxsc2NyZWVuCi1maWxlIHRyYW5zZmVyIGRpc3Bs YXkgYW5kIGZvciB0aGUgU0NSRUVOIGNvbW1hbmQsIEN0cmwtTCwgZXRjKSBJIGFsc28gaGFkIHRv Ci1yZWluaXRpYWxpemUgdGhlIGN1cnNlcyBkYXRhYmFzZSwgd2hpY2ggaXMgdHJpY2t5IGJlY2F1 c2Ugbm9ybWFsbHkgaWYgeW91Ci1mZWVkIGl0IGFuIHVua25vd24gdGVybWluYWwgbmFtZSwgaXQg anVzdCBleGl0cy4gIGNrdXVzNy5jLCA1IE9jdCAyMDA5LgotCi1DaGFuZ2VkIHRoZSBsaXR0bGUt a25vd24gYW5kIGxpdHRsZS11c2VkIFJFU0VUIGNvbW1hbmQgKHdoaWNoIGNsb3NlcyBhbGwKLW9w ZW4gZmlsZXMpIHRvIGFsc28gcHV0IGNvbW1hbmQgZWNob2luZyBiYWNrIHRvIG5vcm1hbCBpbiBj YXNlIGl0IGdvdAotbWVzc2VkIHVwIHNvbWVob3cgKGFzIGluIEhQLVVYIDYuNSwgdXBvbiByZXR1 cm5pbmcgZnJvbSBQVVNIKS4KLWNrdXVzeC5jLCA1IE9jdCAyMDA5LgotCi1Gb3IgVW5peCwgaW5j cmVhc2VkIHN0cmluZyBidWZmZXIgc2l6ZXMgZm9yIHdpbGRjYXJkIGV4cGFuc2lvbiBmb3IgYWxs Ci1wbGF0Zm9ybXMgdGhhdCBoYXZlIEJJR0JVRk9LIGRlZmluZWQgZnJvbSA1MDAwMDAgKDAuNU0p IHRvIDEwMDAwMDAwICgxME0pCi1ieXRlcywgYW5kIGZvciA2NC1iaXQgYnVpbGRzIHRvIDIwMDAw MDAwMDAgKDJHKSBieXRlcy4gIE5vIHBvaW50IG1ha2luZwotaXQgYmlnZ2VyIHRoYW4gdGhhdCBi ZWNhdXNlIG1hbGxvYydzIGFyZ3VtZW50IGlzIGEgc2l6ZV90LCB3aGljaCBpcyBhbiBpbnQuCi1j a3VmaW8uYywgNSBPY3QgMjAwOS4KLQotQnVpbHQgb24gTWFjIE9TIFggMTAuNC4xMSwgcmVxdWly ZWQgb25lIG1pbm9yIGFkanVzdG1lbnQgdG8gdGhlIG1ha2VmaWxlCi0oLUROT0RDTElOSVRHUk9V UFMpLiAgVGhpcyB3YXMgdXNpbmcgdGhlIG1hY29zeDEwLjUgdGFyZ2V0LCB3aGljaCBpcwotc3Vw cG9zZWQgdG8gYmUgdW5pdmVyc2FsIGxpa2UgdGhlIGxpbnV4IGFuZCBuZXRic2QgdGFyZ2V0cywg YnV0IG5vdCB5ZXQKLXByb3Zlbi4gIEFsc28gYnVpbHQgYSA2NC1iaXQgdmVyc2lvbiAoLW1wb3dl cnBjNjQgLW1jcHU9RzUgLW10dW5lPUc1Ci0tYXJjaCBwcGM2NCk7IGl0IGNvbXBpbGVzIGFuZCBs aW5rcyBPSyBidXQgd29uJ3Qgc3RhcnQ6ICJCYWQgQ1BVIFR5cGUKLWluIGV4ZWN1dGFibGUiLiAg Rml4IGxhdGVyLi4uICBtYWtlZmlsZSwgNSBPY3QgMjAwOS4KLQotQ2hhbmdlcyBmcm9tIFNldGgg VGhlcmlhdWx0IHRvIHN1cHByZXNzIHNpZ25lZCB2cyB1bnNpZ25lZCBjaGFyIHdhcm5pbmdzIGlu Ci1NYWMgT1MgMTAuNS44IGZyb20gZ2NjNCwgYW5kIGEgbmV3IG1ha2VmaWxlIHRhcmdldCBmb3Ig TWFjIE9TIFggKHByZXN1bWFibHkKLTEwLjMuOSBvciBsYXRlcikgKyBLZXJiZXJvcyA1IGFuZCBP cGVuU1NMLiAgY2t1dGlvLmMsIGNrdWF0aC5jLCBja2N0ZWwuYywKLWNrY25ldC5jLCBja2NmdHAu YywgY2tfY3JwLmMsIG1ha2VmaWxlLCA2IE9jdCAyMDA5LgotCi0gIExhdGVyIEkgaGFkIHRvIGJh Y2sgb3V0IG9mIHRoZXNlLCBiZWNhdXNlIGFsdGhvdWdoIGl0IG1hZGUgZm9yIGEKLSAgY2xlYW4g YnVpbGQsIGluIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSBTU0wgY29ubmVjdGlvbnMgZGlkbid0 IHdvcmsuCi0KLVR1ZSBPY3QgIDYgMTc6MjM6MjcgMjAwOQotRlRQIGFkZHJlc3MgcmVzb2x1dGlv biBpcyBicm9rZW4sIGJ1dCBmdHBfaG9va3VwKCkgaGFzbid0IGNoYW5nZWQuCi1Tby4uLiAoc2Vl IHRoZSAjaWZkZWYgSFBVWDYgc2VjdGlvbnMgb2YgY2tjbmV0LmMpICAoSSBkaWQsIGFuZCBJIHJv bGxlZAotYmFjayBzb21lIG9mIHRoZSBjaGFuZ2VzIGZyb20gdGhlIG90aGVyIGRheSwgYnV0IGl0 IG1hZGUgbm8gZGlmZmVyZW5jZS4pCi1QdXR0aW5nIGJhY2sgdGhlIGNrY2Z0cC5jIGZyb20gYSBm ZXcgd2Vla3MgYWdvIG1ha2VzIG5vIGRpZmZlcmVuY2UuCi1QdXR0aW5nIGJhY2sgdGhlIGNrY25l dC5jIGZyb20gYSBmZXcgd2Vla3MgYWdvIG1ha2VzIG5vIGRpZmZlcmVuY2UuCi0KLUFkZGVkIHBh dGNoZXMgZnJvbSBTZXRoIFRoZXJpYXVsdCBzbyBtYWNvc3gxMC41K2tyYjUrb3BlbnNzbCB3b3Vs ZCBidWlsZAotb24gTWFjIE9TIFggMTAuMy45LiAgbWFrZWZpbGUsIGNrY2Z0cC5jLCA3IE9jdCAy MDA5LgotCi1CdWlsdCB0b2RheSdzIGNvZGUgb24gTGludXggUkhFTDQsIE5ldEJTRCA1LjAuMSwg U29sYXJpcyA5LCBhbmQgTWFjIE9TIFgKLTEwLjQuMTEsIGJvdGggd2l0aCBhbmQgd2l0aG91dCBT U0wuICBUaGUgTmV0QlNEIHN5c3RlbSBoYXMgT3BlblNTTCAwLjkuOS1kZXYuCi03IE9jdCAyMDA5 LgotCi1JbiBNYWMgT1MgWCAxMC42LCB0aGUgZm9sbG93aW5nIHN5bWJvbHMgYXJlIHVucmVzb2x2 ZWQgYXQgbGluayB0aW1lOgotX2Rlc19rZXlfc2NoZWQsIF9kZXNfbmV3X3JhbmRvbV9rZXksIF9k ZXNfZWNiX2VuY3J5cHQsCi1fZGVzX2luaXRfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IsIF9kZXNf Zml4dXBfa2V5X3Bhcml0eS4gIFRoaXMgaXMKLXdpdGggT3BlblNTTCAwLjkuOGsuICBCdXQgaXQg ZG9lc24ndCBoYXBwZW4gb24gb3RoZXIgcGxhdGZvcm1zIHRoYXQKLWhhdmUgMC45LjhrLgotCi1B ZGRlZCBTRVQgU0VTU0lPTi1MT0cgTlVMTC1URVJNSU5BVEVELVRFWFQuICBUaGlzIGlzIGZvciB0 aGUgYmVuZWZpdCBvZiBhCi1zcGVlY2ggc3ludGhlc2l6ZXIgdGhhdCB3aWxsIHNwZWFrIGEgbGlu ZSBvZiB0ZXh0IG9ubHkgYWZ0ZXIgcmVjZWl2aW5nIGEKLU5VTCBjaGFyYWN0ZXIuICBBIG1vcmUg Z2VuZXJhbCBzb2x1dGlvbiB3b3VsZCBiZSB0byBkZWZpbmUgYSBmaWx0ZXIgb3IKLXdoYXRldmVy LCBidXQgd2hvIGhhcyB0aW1lLiAgY2t1dXNbMjN4XS5jLCA3IE9jdCAyMDA5LgotCi1Db25zb2xp ZGF0ZWQgTWFjIE9TIFggdGFyZ2V0cywgYW5kIHJlbW92ZWQgZXhwZXJpbWVudGFsIDY0LWJpdCBv bmVzLCBiZWNhdXNlCi10aGV5IG5ldmVyIGNvdWxkIHdvcmsgaW4gMTAuNSBhbmQgZWFybGllciBi ZWNhdXNlIDY0LWJpdCBsaWJzIGFyZSBtaXNzaW5nLAotYW5kIDEwLjYgYW5kIGxhdGVyIGFyZSA2 NC1iaXQgYXV0b21hdGljYWxseS4gIG1ha2VmaWxlLCA4IE9jdCAyMDA5LgotCi1CdWlsdCBvbiBN YWMgT1MgWCAxMC42LjEuICBJdCBjYW1lIG91dCBhdXRvbWF0aWNhbGx5IGFzIGEgNjQtYml0IGJ1 aWxkCi1iZWNhdXNlIF9fTFA2NF9fIGlzIGRlZmluZWQgc29tZXdoZXJlIHRoYXQgSSBjYW4ndCBm aW5kLiAgQnV0IHRoaXMgZXhwbGFpbnMKLXdoeSB0aGUgMC45LjhrIG9uIDEwLjYgY29tZXMgdXAg d2l0aCBtaXNzaW5nIHN5bWJvbHMgd2hlbiB0aGUgMC45LjhrIGxpYgotMTAuNSAob3Igb24gU29s YXJpcyBvciBvbiBMaW51eCkgZG9lcyBub3Q6IGl0J3MgYSBkaWZmZXJlbnQgbGlicmFyeTogIk1h Y2gtTwotNjQtYml0IGR5bmFtaWNhbGx5IGxpbmtlZCBzaGFyZWQgbGlicmFyeSB4ODZfNjQiLCBy YXRoZXIgdGhhbiAiTWFjaC1PCi1keW5hbWljYWxseSBsaW5rZWQgc2hhcmVkIGxpYnJhcnkgcHBj Ii4gIFByb2JhYmx5IHRoZSA2NC1iaXQgdmVyc2lvbiBoYXMKLXNvbWUgdGhpbmdzICNpZmRlZidk IG91dC4gIEFkZGVkIC1tMzIgdG8gdGhlIENGTEFHUyBhbmQgTE5LRkxBR1MgZm9yIHRoZQotbWFj b3N4K2tyYjUrb3BlbnNzbCB0YXJnZXRzLCBhbmQgaXQgYnVpbHQgT0sgb25lIHRpbWUuICBCdXQg dGhlbiB0aGUgZXJyb3JzCi1jYW1lIGJhY2suICBtYWtlZmlsZSwgOCBPY3QgMjAwOS4KLQotVXBk YXRlZCBDLUtlcm1pdCBpbnN0YWxsYXRpb24gZm9yIE1hYyBPUyBYIGluIGNrdXdyLmh0bWwgb24g dGhlIHdlYnNpdGUuCi04IE9jdCAyMDA5LgotCi1UcmllZCBzb21lIHRoaW5ncyB0byBnZXQgYXJv dW5kIHRoZSBwcm9ibGVtIHdpdGggT3BlblNTTCBpbiBNYWMgT1MgWCAxMC42LAotdG8gbm8gYXZh aWwuICBBc2tlZCBKZWZmLiAgSGUgc2FpZCwgIk1hY09TIFggbm8gbG9uZ2VyIGluY2x1ZGVzIERF UyBhbnl3aGVyZQotb24gdGhlIHN5c3RlbS4gIE5vdCBmb3IgU1NMLCBub3QgZm9yIEtlcmJlcm9z LCBub3QgZm9yIGFueXRoaW5nLiAgVGhpcyB3aWxsCi1pbmNyZWFzaW5nbHkgYmVjb21lIHRoZSBz aXR1YXRpb24gb24gbmV3IG9wZXJhdGluZyBzeXN0ZW1zLiAgV2luZG93cyA3IGFuZAotMjAwOCBS MiB3aWxsIGFsc28gc2hpcCB3aXRoIG5vIERFUy4iICBTdXJlIGVub3VnaCwgdGhlIE1hYyBPUyBY IFNlcnZlcgotVXBncmFkaW5nIGFuZCBNaWdyYXRpbmcgZG9jdW1lbnQgZm9yIDEwLjYgc2F5cywg Ik1hYyBPUyBYIFNlcnZlciB2MTAuNiBkb2VzCi1ub3Qgc3VwcG9ydCBzaW5nbGUgREVTIGVuY3J5 cHRpb24uIEl0IHN1cHBvcnRzIEFFUyAxMjggYW5kIDI1NiBlbmNyeXB0aW9uCi10eXBlcy4gSG93 ZXZlciwgZHVyaW5nIGEgbWlncmF0aW9uIG9yIHVwZ3JhZGUgZnJvbSB2MTAuNCB0byB2MTAuNiwg c2VydmVycwotdGhhdCB3ZXJlIEtlcmJlcml6ZWQgYnkgdGhlIHYxMC41IE9wZW4gRGlyZWN0b3J5 IHNlcnZlciB3aWxsIG5vdCB1c2UgdGhlIEFFUwotMTI4IG9yIDI1NiBlbmNyeXB0aW9uIHR5cGVz LiBUbyB1c2UgdGhlIEFFUyAxMjggb3IgMjU2IGVuY3J5cHRpb24gdHlwZXMgeW91Ci1tdXN0IHJl LUtlcmJlcml6ZSBhbGwgc2VydmVycy4iICAxMiBPY3QgMjAwOS4KLQotREVTIGFuZCAzREVTIGVu Y3J5cHRpb24gY2FuIGJlIGV4Y2x1ZGluZyByZW1vdmluZyB0aGUgLURDS19ERVMgZmxhZy4gIEkK LXJlbW92ZWQgdGhpcyBvbmUgYW5kIC1ETElCREVTIChhbmQgLW0zMikgYW5kIHRoaXMgbWFrZXMg YSB3b3JraW5nIDY0LWJpdAotdmVyc2lvbi4gIFRoZW4gSSBhZGRlZCBjb2RlIHRvIHRoZSBtYWNv c3gra3JiNStvcGVuc3NsIHRhcmdldCB0byB1c2UgdGhlc2UKLWZsYWdzIGlmIHRoZSBNYWMgT1Mg WCB2ZXJzaW9uIHdhcyAxMC41IG9yIGxlc3MgYW5kIGxlYXZlIHRoZW0gb3V0IGZvciAxMC42Ci1v ciBsYXRlci4gIFRlc3RlZCBvbiAxMC40LjExIGFuZCAxMC42LjEuICBBIGJldHRlciB3YXkgdG8g ZG8gaXQgbWlnaHQgaGF2ZQotYmVlbiAibm0gLWdqIGxpYnNzbC5keWxpYiB8IGdyZXAgZGVzXyIs IGJ1dCB0aGF0IGdpdmVzIHRoZSBzYW1lIHJlc3VsdHMgb24KLTEwLjQgYW5kIDEwLjYuICBBbHNv LCAxMC42IHN0aWxsIGhhcyAvdXNyL2luY2x1ZGUvc3NsL2Rlcy5oLgotbWFrZWZpbGUsIDEzIE9j dCAyMDA5LgotCi1OZXh0IGlzc3VlOgotICBJbiBmaWxlIGluY2x1ZGVkIGZyb20gY2t1dGlvLmM6 MTU2NzQ6Ci0gIC91c3IvbGliL2djYy9pMzg2LXJlZGhhdC1saW51eC8zLjQuNi9pbmNsdWRlL3Zh cmFyZ3MuaDo0OjI6ICNlcnJvciAiR0NDIG5vCi0gIGxvbmdlciBpbXBsZW1lbnRzIDx2YXJhcmdz Lmg+LiIKLSAgL3Vzci9saWIvZ2NjL2kzODYtcmVkaGF0LWxpbnV4LzMuNC42L2luY2x1ZGUvdmFy YXJncy5oOjU6MjogI2Vycm9yICJSZXZpc2UKLSAgeW91ciBjb2RlIHRvIHVzZSA8c3RkYXJnLmg+ LiIKLQotVGhlIHByb2JsZW0gb2NjdXJzIHdoZW4gdHJ5aW5nIHRvIGZvcmNlIGEgbm9uLUFOU0lD IGJ1aWxkIHdpdGggR0NDLgotQ2hhbmdpbmcgdGhlIHNvdXJjZSBmaWxlIHRvIGluY2x1ZGUgPHN0 ZGFyZy5oPiBpbnN0ZWFkIG9mIDx2YXJhcmdzLmg+Ci1kb2Vzbid0IGhlbHAgYmVjYXVzZSBldmlk ZW50bHkgPHN0ZGFyZy5oPiByZXF1aXJlcyBhbiBBTlNJIEMgY29tcGlsZXIuCi1Ob3RoaW5nIGNh biBiZSBkb25lIGFib3V0IHRoaXMuICAxMyBPY3QgMjAwOS4KLQotTmV4dCBpc3N1ZTogQ2FuJ3Qg Y29tcGlsZSBja2NmdHAuYyB3aXRoIC1ETk9DU0VUUyBvciAtRE5PU1BMOyBzb21lCi0jaWZkZWYv I2VuZGlmIGRvZXNuJ3QgbWF0Y2ggdXAuICBTaWdoLCB0aGlzIGlzIHRoZSBoYXJkZXN0IGtpbmQg b2YgdGhpbmcgdG8KLWRlYnVnLiAgVGhlcmUncyAxNyw2MjIgbGluZXMgb2YgY29kZSBpbiB0aGlz IG1vZHVsZSBhbmQgbm8gdG9vbCB0aGF0IEkga25vdwotb2YuLi4uIFdhaXQsIEkgd3JvdGUgb25l LiAgQnV0IGl0IHNob3dzIGFsbCB0aGUgI2lmLyNpZmRlZi8jaWZuZGVmJ3MgYW5kCi0jZW5kaWZz IG1hdGNoaW5nIHVwIGp1c3QgZmluZS4gIEJhY2tpbmcgb2ZmIHRvIGNrY2Z0cC5jIG9mIGEgZmV3 IGRheXMgYWdvCi0oYmVmb3JlIGNoYXIgLyB1bnNpZ25lZCBjaGFyIGNhc3RzIHdlcmUgYWRkZWQp LCBJIHNlZSB0aGF0IGl0IGJ1aWxkcyBPSywgc28KLUkgYmFja2VkIG9mZiB0byB0aGF0IG9uZSwg YnV0IHB1dCBiYWNrIHRoZSBzcGVjaWFsIGNhc2UgI2lmZGVmIGZvciBNQUNPU1gxMDMKLWRlY2xh cmluZyBDT05TVCBnc3NfT0lEX2Rlc2MsIGFuZCBpdCBidWlsZHMgT0sgKHRoZSBvdGhlciBzdHVm ZiB3YXMgcHVyZWx5Ci1jb3NtZXRpYywgd2hlbiB3aWxsIEkgbGVhcm4/KS4gIGNrY2Z0cC5jLCAx MyBPY3QgMjAwOS4KLQotUHJvdGVjdGVkIGN2dHN0cmluZygpIGFuZCByZWxhdGVkIGZ1bmN0aW9u cyB3aXRoICNpZmRlZiBOT0NTRVRTLi4jZW5kaWYsCi1hbmQgZGl0dG8gZm9yIHRoZSBjaGFyYWN0 ZXItc2V0IGNvbnZlcnNpb24gY29kZSBpbiBkb3JlbmFtZSgpLgotY2t1dXM2LmMsIDEzIE9jdCAy MDA5LgotCi1GaXhlZCBhbiAjZW5kaWYgLyogVE5DT0RFICovIHRoYXQgd2FzIGEgbGluZSB0b28g bG93IGluIHR0cHR5Y21kKCksCi1jYXVzaW5nIC1ETk9ORVQgYnVpbGRzIHRvIGZhaWwuICBja3V0 aW8uYywgMTMgT2N0IDIwMDkuCi0KLVRoZXJlIHdhcyBhIHJlZmVyZW5jZSB0byBkb3B1dGVudigp IHRoYXQgd2Fzbid0IGd1YXJkZWQgYnkgI2lmbmRlZiBOT1BVVEVOViwKLWZpeGVkIGluIGNrdXVz Ny5jLCAxMyBPY3QgMjAwOS4KLQotTW92ZWQgZG9wdXRlbnYoKSBhbmQgc2V0dGVybXR5cCgpIG91 dCBvZiBhbiAjaWZkZWYgTk9MT0NBTCBzZWN0aW9uIGJlY2F1c2UKLXRoZXNlIGFyZSB1c2VmdWwg ZXZlbiB3aGVuIG5vdCBtYWtpbmcgY29ubmVjdGlvbnMuICBja3V1czcuYywgMTMgT2N0IDIwMDku Ci0KLU1vdmVkIGhhdmVsZnMgZGVjbGFyYXRpb24gb3V0c2lkZSBvZiAjaWZkZWYgTk9YRkVSIGJl Y2F1c2UgaXQgd2FzIGFsc28gdXNlZAotZm9yIG90aGVyIHRoaW5ncy4gIGNrY21haS5jLCAxMyBP Y3QgMjAwOS4KLQotQ09QWSAvUFJFU0VSVkUgZGVwZW5kZWQgb24gY29kZSBmcm9tIHRoZSBLZXJt aXQgcHJvdG9jb2wgbW9kdWxlLCB3aGljaAotaXMgb21pdHRlZCBpbiAtRE5PWEZFUiBidWlsZHMu ICBEaXNhYmxlZCBDT1BZIC9QUkVTRVJWRSBpbiAtRE5PWEZFUgotYnVpbGRzLiAgY2t1dXM2LmMs IDE0IE9jdCAyMDA5LgotCi1TSE9XIFBST1RPQ09MIGNvZGUgZm9yIGV4dGVybmFsIHByb3RvY29s cyBoYWQgdG8gYmUgI2lmZGVmJ2Qgb3V0IGZvcgotLUROT1BVU0ggYnVpbGRzLiAgY2t1dXM0LmMs IDE0IE9jdCAyMDA5LgotCi1UaGVyZSB3YXMgc29tZSBjb25mdXNpb24gYmV0d2VlbiAiTm8gWFla TU9ERU0iIGFuZCAiTm8gZXh0ZXJuYWwgcHJvdG9jb2xzIjsKLWNsZWFyZWQgdXAgaW4gY2t1dXMz LmMsIDE0IE9jdCAyMDA5LgotCi1BZnRlciBhbGwgdGhhdCwgODYgZGlmZmVyZW50IGNvbWJpbmF0 aW9ucyBvZiBmZWF0dXJlIHNlbGVjdGlvbnMgYnVpbHQgT0sgb24KLUxpbnV4LiAgQW5kIHRoZSBL ZXJiZXJpemVkIHZlcnNpb24gKEs1KSB3b3JrcyBPSyBvbiBMaW51eCBmb3IgVGVsbmV0IGFuZCBG VFAuCi0xNCBPY3QgMjAwOS4KLQotQ2hhbmdlZCB2ZXJzaW9uIG51bWJlciB0byA5LjAuICBBbGwg bW9kdWxlcywgMTYgT2N0IDIwMDkuCi0KLU5lZWQgdG8gbWFrZSBMT0cgU0VTU0lPTiBsb2cgdG8g YSB0dHkuICBSaWdodCBub3cgImxvZyBzZXNzaW9uCi0vZGV2L3R0eUtleVNlcmlhbDEiIHNheXMg IldyaXRlIHBlcm1pc3Npb24gZGVuaWVkIiBldmVuIHRob3VnaCB0aGUgZGV2aWNlIGlzCi1jcnct cnctcnctLiAgVGhpcyBoYXBwZW5zIGluIHpjaGtvKCksIHdoaWNoIGlzIGNhbGxlZCBieSBjbW9m aSgpLiAgVGhlCi1wcm9ibGVtIGlzIHRoYXQgL2Rldi8gaXMgbm90IHdyaXRlYWJsZS4gIEkgYWRk ZWQgYSBVbml4LW9ubHkgY2xhdXNlIHRoYXQKLWF0dGVtcHRzIHRvIG9wZW4gdGhlIGZpbGUgZm9y IHdyaXRlIGFjY2VzcyB1c2luZyBvcGVuKCksIGluIG9yZGVyIHRvIGdldCBhCi1maWxlIGRlc2Ny aXB0b3IsIHdoaWNoIHRoZW4gY2FuIGJlIHBhc3NlZCB0byBpc2F0dHkoKSB0byBjaGVjayBpZiBp dCdzIGEKLXR0eSwgYW5kIGlmIHNvLCB0byBhbGxvdyBhY2Nlc3MuICBBbmQgdGhlbiBjbG9zZSBp dC4gIEkgdGVzdGVkIHRoaXMgb24gTWFjCi1PUyBYIGFzIGZvbGxvd3M6Ci0KLSAgbG9nIHNlc3Np b24gL2Rldi90dHlLZXlTZXJpYWwxCi0gIHRlbG5ldCBzb21laG9zdAotCi1UaGUgTWFjJ3Mgc2Vy aWFsIHBvcnQgd2FzIGNvbm5lY3RlZCB0byB0aGUgc2VyaWFsIHBvcnQgb2YgYW5vdGhlciBjb21w dXRlcgotd2hlcmUgS2VybWl0IGRpc3BsYXllZCB0aGUgaW5jb21pbmcgY2hhcmFjdGVycyBpbiBD T05ORUNUIG1vZGUuICBHbGl0Y2hlczoKLQotIDEuIFRoZSBwb3J0IGhhcyB0byBiZSBzZXQgdXAg YXMgZGVzaXJlZCBpbiBhZHZhbmNlLCBvdXRzaWRlIG9mIEtlcm1pdC4KLSAyLiBsb2cgc2Vzc2lv biAvZGV2L3R0eUtleVNlcmlhbDEgd2lsbCBoYW5nIGlmIGFueSByZXF1aXJlZCBtb2RlbSBzaWdu YWxzCi0gICAgYXJlIG5vdCBwcmVzZW50IHdoZW4gdGhlIHBvcnQgaXMgb3BlbmVkLgotIDMuIEJ5 cGFzc2VzIGxvY2tmaWxlIG1lY2hhbmlzbSAtIHNvIHdlIGRvIHRoaXMgb25seSBpZiAtRE5PVVVD UC4KLQotRm9yICgyKSwgSSB0cmllZCBzZXR0aW5nIE9fTkRFTEFZIC8gT19OT05CTE9DSywgYW5k IHRoaXMgYWxsb3dlZCB6Y2hrbygpIHRvCi1jb250aW51ZSwgYnV0IHRoZW4gaXQgZnJlZXplcyBp biB0aGUgc3Vic2VxdWVudCBmb3BlbigpLiAgU28gSSBjaGFuZ2VkCi16b3Blbm8oKSB0byBhbHNv IGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYSBzZXJpYWwgcG9ydCwgYW5kIGlmIHNvLCB0byBvcGVu KCkKLWl0IHdpdGggT19OREVMQVkgLyBPX05PTkJMT0NLLCBhbmQgdGhlbiBjb252ZXJ0IHRoZSBm aWxlIGRlc2NyaXB0b3IgaW50byBhCi1maWxlIHBvaW50ZXIgd2l0aCBmZG9wZW4oKS4KLQotTm93 IGZvciB0aGUgc3BlYWtpbmcgZGV2aWNlIHRoYXQgbmVlZHMgbGluZXMgdG8gYmUgdGVybWluYXRl ZCBieSBOVUwuLi4KLQotICBzZXQgc2Vzc2lvbi1sb2cgYmluYXJ5ICAgICAgIDwtLSBuZWVkIHRv IHB1dCB0aGVzZSBpbiBTSE9XIExPRwotICBzZXQgc2Vzc2lvbi1sb2cgbnVsbC1wYWRkZWQgICAg ICAoYW5kIGluIEhFTFAgU0VUIExPRykKLSAgc2V0IGxpbmUgL2Rldi90dHlLZXlTZXJpYWwxCi0K LVRoaXMgcGFydCB3b3Jrcy4KLQotVGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgb25seSBmb3IgLURO T1VVQ1AgYnVpbGRzIGJlY2F1c2Ugc2VyaWFsIHBvcnRzIGFyZW4ndAotbGlrZSBvdGhlciBVbml4 IGZpbGVzOyB3ZSB3b3VsZCBoYXZlIHRvIGNyZWF0ZSBhIGxvY2tmaWxlLCBidXQgd2UgY2FuJ3Qg ZG8KLXRoYXQuLi4gIGFjdHVhbGx5LCB0dGxvY2soKSB0YWtlcyBhIG5hbWUgYXMgYW4gYXJndW1l bnQsIGJ1dCB0dHVubGNrKCkgZG9lcwotbm90LCBzbyB0aGVyZSB3b3VsZCBiZSBubyB3YXkgdG8g cmVtb3ZlIHRoZSBsb2NrLiAgQW55d2F5LCB0aGVyZSBpcyBvbmx5IG9uZQotQVBJIGZvciBjb25m aWd1cmluZyB0aGUgcG9ydCAoc3BlZWQsIGZsb3cgY29udHJvbCwgZXRjKSBhbmQgaXQgb25seSB3 b3Jrcwotd2l0aCB0aGUgU0VUIExJTkUgZGV2aWNlLCBub3QgYW55IHJhbmRvbSBmaWxlLiAgVG8g Zml4IHRoaXMgd291bGQgcmVxdWlyZQotbWFzc2l2ZSByZWRlc2lnbiBhbmQgY2hhbmdlcy4gIGNr dXVzWzIzXS5jLCBja3VmaW8uYywgMTktMjAgT2N0IDIwMDkuCi0KLUkgbWFkZSAtRE5PVVVDUCB0 aGUgZGVmYXVsdCBmb3IgTWFjIE9TIFgsIHNpbmNlIGV2ZXJ5Ym9keSB3aW5kcyB1cCBidWlsZGlu ZwotaXQgdGhhdCB3YXkgYW55aG93LiAgVG8gdW5kbyB0aGlzLCBkbyAibWFrZSBtYWNvc3ggS0ZM QUdTPS1VTk9VVUNQIi4KLW1ha2VmaWxlLCAyMSBPY3QgMjAwOS4KLQotQ2hhbmdlZCBTRVQgU0VT U0lPTi1MT0cgVEVYVCB0byBzdHJpcCBvdXQgQU5TSSBlc2NhcGUgc2VxdWVuY2VzOyAKLXByZXZp b3VzbHkgdGhlcmUgd2Fzbid0IHRoYXQgbXVjaCBkaWZmZXJlbmNlIGJldHdlZW4gVEVYVCBhbmQg QklOQVJZIGxvZ3MuCi1JdCdzIHN0aWxsIG5vdCBwZXJmZWN0OyBmb3IgZXhhbXBsZSBpdCBkb2Vz bid0IGRlbGV0ZSBjaGFyYWN0ZXJzIHRoYXQgdGhlCi11c2VyIGVyYXNlZC4gIChNYWRlIHN1cmUg dGhpcyBzdGlsbCBidWlsZHMgd2l0aCAtRE5PRVNDU0VRLikKLWNrdWNucy5jLCAyMiBPY3QgMjAw OS4KLQotQ2hhbmdlZCBTSE9XIExPRyB0byBzaG93IHRoZSBTRVQgU0VTU0lPTi1MT0cgc2V0dGlu Z3MsIGFzIHdlbGwgYXMKLVNFVCBERUJVRywgd2hpY2ggd2FzIG5vdCBzaG93biBiZWZvcmUuICBj a3V1czUuYywgMjIgT2N0IDIwMDkuCi0KLUlmIGEgc2VyaWVzIG9mIFBVVEVOViBjb21tYW5kcyBp cyBnaXZlbiwgZWFjaCBuZXcgb25lIHVuZG9lcyB0aGUgcHJldmlvdXMKLW9uZSwgc28gb25seSB0 aGUgbGFzdCBkZWZpbml0aW9uIGlzIHNlZW4gYnkgdGhlIG5ldyBmb3JrIChvciBieSBLZXJtaXQK LWl0c2VsZikuICBUdXJucyBvdXQgeW91IGNhbid0IGZlZWQgYXV0b21hdGljIHZhcmlhYmxlcyB0 byBwdXRlbnYoKTsgdGhleQotaGF2ZSB0byBiZSBzdGF0aWMsIHNvIHRvIGFsbG93IGZvciBtdWx0 aXBsZSBQVVRFTlYgY29tbWFuZHMgS2VybWl0IGhhcyB0bwotbWFpbnRhaW4gYW4gYXJyYXkgb2Yg c3RhdGljIHN0cmluZ3MuICBja3V1czcuYywgNiBOb3YgMjAwOS4KLQotRnJvbSBTZXRoIFRoZXJp YXVsdCwgYSBiZXR0ZXIgd2F5IGZvciB0aGUgbWFrZWZpbGUgdG8gZGV0ZXJtaW5lIHRoZQotTWFj IE9TIFggdmVyc2lvbiBudW1iZXI7IHRoZXJlJ3MgYSBwcm9ncmFtIGZvciB0aGlzLCBzd192ZXIu ICBtYWtlZmlsZSwKLTYgTm92IDIwMDkuCi0KLVBldGVyIEVpY2hob3JuIHJlcG9ydGVkIHRoYXQg ZmlsZS10cmFuc2ZlciBmYWlsdXJlIGhpbnRzIHdlcmUgbm90IGNvbWluZwotb3V0IHNpbmNlIERl di4yNy4gIFRoZSBvbmx5IGNoYW5nZSBJIG1hZGUgc2luY2UgdGhlbiB3YXMgdG8gc2tpcCB0aGVt IGlmCi10aGUgZmlsZS10cmFuc2ZlciBwcm90b2NvbCB3YXMgbm90IEtlcm1pdC4gIEkgd2FzIHVz aW5nIHRoZSB3cm9uZyB2YXJpYWJsZQotaW4gdGhlIHRlc3RzLCAncHJvdG8nIGluc3RlYWQgb2Yg J3Byb3RvY29sJy4gIGNrdXVzNS5jLCA2IE5vdiAyMDA5LgotCi1DaGFuZ2VkIE1hYyBPUyBYIHRh cmdldHMgdG8gY29ycmVjdGx5IGV4dHJhY3QgdGhlIE1hYyBPUyBtYWpvciB2ZXJzaW9uCi1mcm9t IHVuYW1lIC1yIGluIG9yZGVyIHRvIGNob29zZSBjb3JyZWN0bHkgYmV0d2VlbiB1dG1wIGFuZCB1 dG1weDsgdGhpcwotd2Fzbid0IHdvcmtpbmcgaW4gMTAuNi4xLiAgbWFrZWZpbGUsIDYgTm92IDIw MDkuCi0KLUZpeCBmcm9tIFNldGggVC4gZm9yIGFuIG92ZXJzaWdodCBpbiB0aGUgcHJldmlvdXMg ZWRpdC4gIEFsc28gYWRkCi1NQUNPU1gxMDMgdG8gInNob3cgZmVhdHVyZXMiIGRpc3BsYXkuICBt YWtlZmlsZSwgY2t1dXM1LmMsIDEwIE5vdiAyMDA5LgotCi1BZGRlZCBSRUpFQ1QgYXMgYSBzeW5v bnltIGZvciBESVNDQVJEIGluIFNFVCBGSUxFIENPTExJU0lPTjsgaXQncyBtb3JlCi1pbnR1aXRp dmUgYW5kIG1vcmUgYWNjdXJhdGUuICBja3V1c1syN10uYywgMTUgTm92IDIwMDkuCi0KLVxmc3Bs aXQoKSBhbmQgXGZ3b3JkKCkgYWx3YXlzIGJyZWFrIG9uIDgtYml0IGNoYXJhY3RlcnMgdW5sZXNz IHlvdSBleHBsaWNpdGx5Ci1wdXQgZXZlcnkgc2luZ2xlIDgtYml0IHZhbHVlIGludG8gdGhlIGlu Y2x1ZGUgc2V0LCBlLmcuIChmb3IgYSBUU1YgZmlsZSk6Ci0KLSAgdW5kZWYgaW5jbHVkZQotICBm b3IgXCVpIDEyOCAyNTUgMSB7Ci0gICAgICBpZiA9PSBcJWkgOSBjb250aW51ZQotICAgICAgLmlu Y2x1ZGUgOj0gXG0oaW5jbHVkZSlcZmNoYXIoXCVpKQotICB9Ci0gIC5cJW4gOj0gXGZzcGxpdChc bShsaW5lKSwmYSxcOSxcbShpbmNsdWRlKSkKLQotSSBjaGFuZ2VkIGNrc3BsaXQoKSB0byB0cmVh dCBhbGwgOC1iaXQgYnl0ZXMgMTI4LTI1NSBhcyBub24tYnJlYWsgY2hhcmFjdGVycwotYnkgZGVm YXVsdC4gIEl0IG1pZ2h0IGhhdmUgbWFkZSBtb3JlIHNlbnNlIHRvIGRvIHRoaXMgZm9yIDE2MC0y NTUgKHNpbmNlCi0xMjgtMTU5IGFyZSB0cmFkaXRpb25hbGx5IEMxIGNvbnRyb2wgY2hhcmFjdGVy cykgYnV0IHRoYW5rcyB0byBNaWNyb3NvZnQKLXRyYWRpdGlvbiBpcyBvdXQgdGhlIHdpbmRvdy4g IFRvIHRyZWF0IG9uZSBvciBtb3JlIDgtYml0IGNoYXJhY3RlcnMgYXMgYnJlYWsKLWNoYXJhY3Rl cnMsIHB1dCB0aGVtIGluIHRoZSBicmVhayBzZXQuICBUaGlzIG1pZ2h0IGJyZWFrIHNvbWUgc2Ny aXB0cywgYnV0IEkKLWRvdWJ0IGl0IGJlY2F1c2UgdGhpcyBmbGF3IHdhcyBzbyBhd2Z1bCB0aGF0 IGlmIGFueW9uZSBoYWQgY29tZSB1cCBhZ2FpbnN0Ci10aGV5IHdvdWxkIGhhdmUgbGV0IG1lIGtu b3cuICBja2NsaWIuYywgMTYgTm92IDIwMDkuCi0KLUNoYW5nZWQgdGhlIG5ldGJzZCB0YXJnZXQg dG8gc2V0IC1mdW5zaWduZWQtY2hhciwgc2luY2UgY2Mgb24gTmV0QlNEIGlzCi1hY3R1YWxseSBn Y2MuICBtYWtlZmlsZSwgMTYgTm92IDIwMDkuCi0KLUNoYW5nZWQgbWFjb3N4IHRhcmdldHMgdG8g Z2V0IHRoZSBDUFUgdHlwZSBmcm9tIHRoZSBIT1NUVFlQRSBlbnZpcm9ubWVudAotdmFyaWFibGUu ICBBbHNvIGFkZGVkIGdldGVudigiSE9TVFRZUEUiKSBhcyBhIGxhc3QtcmVzb3J0IG1ldGhvZCB0 byBzZXQgdGhlCi1cdihjcHUpIHZhcmlhYmxlIGF0IHJ1bnRpbWUgKG1heWJlIGl0IHNob3VsZCBi ZSB0aGUgZmlyc3QgcmVzb3J0PykuLi4KLWNrdXVzNC5jLCBtYWtlZmlsZSwgMTYgTm92IDIwMDku Ci0KLU1hZGUgc3VyZSB0aGUgc29sYXJpczlfNjQgYW5kIHNvbGFyaXMxMCB0YXJnZXRzIHN0aWxs IHdvcmsuICAxNiBOb3YgMjAwOS4KLQotTWFkZSBzdXJlIHRoZSBjdXJyZW50IHNvdXJjZSBwYWNr YWdlIGJ1aWxkcyBPSyBvbiBIUC1VWCAxMC4yMC4uLiAgR290IGEgbG90Ci1vZiAid2FybmluZyA2 MDYyOiBPcHRkcml2ZXI6IEV4Y2VlZGluZyBjb21waWxlciByZXNvdXJjZSBsaW1pdHMgaW4geHh4 OyBzb21lCi1vcHRpbWl6YXRpb25zIHNraXBwZWQuIFVzZSArT25vbGltaXQgaWYgb3ZlcnJpZGUg ZGVzaXJlZCIgYnV0IGl0IGJ1aWxkcyBPSy4KLVRlc3RlZCBsb25nIGZpbGUgdHJhbnNmZXI7IHdv cmtzIE9LLiAgMTcgTm92IDIwMDkuCi0KLUJ1aWx0IG9uIEZyZWVCU0QgNy4yIHdpdGggYW5kIHdp dGhvdXQgT3BlblNTTCwgYWxsIE9LLiAgMTcgTm92IDIwMDkuCi0KLUJ1aWx0IG9uIE5ldEJTRCA1 LjAuMSB3aXRoIGFuZCB3aXRob3V0IE9wZW5TU0wsIGFsbCBPSywgYnV0IG5ldGJzZCtrcmI1Ci1m YWlscyB3aXRoICJjYW4ndCBmaW5kIC1sZ3NzYXBpX2tyYjUiOyB3b3JrZWQgYXJvdW5kIHRoaXMg d2l0aAotIks1TElCPS1ML3Vzci9sb2NhbC9rZXJibGliIiAod2hlcmUgdGhlIGxpYiBhY3R1YWxs eSBpcyBvbiB0aGlzIGhvc3QpIGJ1dAotdGhlbiBpdCBmYWlsZWQgd2l0aCAiY2tjZnRwLmM6MTM4 Njg6IGVycm9yOiAnZ3NzX250X3NlcnZpY2VfbmFtZScgdW5kZWNsYXJlZCIuCi0xNyBOb3YgMjAw OS4KLQotSSBmb3VuZCBhIFZNUyA2LjIgc3lzdGVtLi4uIFRha2VzIGEgbG9vb29uZyB0aW1lIHRv IGJ1aWxkIHRoZXJlLiAgSW4KLWNrdXVzeS5jLCBERUMgQyBkaWRuJ3QgbGlrZSB0aGUgcHJvdG90 eXBlcyBhbmQgZGVjbGFyYXRpb25zIG9mIGRvcmxnYXJnKCkKLWFuZCBkb3RuYXJnKCkgYXMgc3Rh dGljIHNvIEkgbWFkZSB0aGVtIG5vdCBzdGF0aWMuICBCdXQgdGhhdCBkaWRuJ3QgaGVscCwKLW5v dyBpdCBmYWlscyBhdCB0aGUgdmVyeSBlbmQsIHNheWluZyB0aGUgZmluYWwgI2lmZGVmIGlzIGFu IGludmFsaWQKLXN0YXRlbWVudC4gIEl0IGxvb2tzIGxpa2UgYW4gI2lmZGVmIG1pc21hdGNoIHRo YXQgYWZmZWN0cyBvbmx5IFZNUy4gIEkgcmFuCi1teSAjaWZkZWYgbWF0Y2hlciwgaXQgdHVybmVk IHVwIG5vdGhpbmcuICBJIHN1YnN0aXR1dGVkIGEgY29weSBvZiBja3V1c3kuYwotZnJvbSAyMDA3 LCBpdCBjb21lcyB1cCB3aXRoIHRoZSBzYW1lIGVycm9ycy4gIFRoZW4gSSBzdWJzdGl0dXRlZCB0 aGUgY29weQotZnJvbSA4LjAuMjExIGZyb20gMjAwNCwgYW5kIHRoaXMgb25lIGNvbXBpbGVkIE9L IGFuZCwgbWlyYWN1bG91c2x5LCB0aGUKLXdob2xlIG1lc3MgZXZlbiBsaW5rZWQgT0sgYW5kIHJ1 bnMgT0suICBUaGUgQWxwaGEgYmluYXJ5IGlzIDIuODRNQi4gIE5vdyBJCi1oYXZlIDQ1MDAgbGlu ZXMgb2YgY29kZSB0byBjb21wYXJlLi4uLiAgSSB3ZW50IHRocm91Z2ggdGhlIHR3byBmaWxlcyBs aW5lIGJ5Ci1saW5lIGFuZCBJIGNhbid0IHNlZSBhIHNpbmdsZSB0aGluZyB3cm9uZy4gIEkgZ2F2 ZSB1cCBhbmQgdHJpZWQgYnVpbGRpbmcgdGhlCi1UQ1AvSVAgdmVyc2lvbi4gIEl0IGJ1aWxkcyBm aW5lIGV4Y2VwdCBmb3IgY2t1dXN5LmMsIHdpdGggdGhlIHV0dGVybHkKLXVzZWxlc3MgZXJyb3Ig bWVzc2FnZToKLQotICAjZW5kaWYgLyogTk9DTURMICovCi0gIC4uLi4uLi4uLi4uLi4uLi4uLi5e Ci0gICVDQy1FLUJBRFNUTVQsIEludmFsaWQgc3RhdGVtZW50LgotCi1JbmRpY2F0aW5nIHRoZSBs YXN0IGxpbmUgaW4gdGhlIGZpbGUuICBKdXN0IGZvciB0aGUgaGVjayBvZiBpdCwgSSBwdXQKLWFu b3RoZXIgbGluZSBhZnRlciB0aGF0IG9uZToKLQotICAvKiBUaGlzIGlzIGEgdGVzdCAqLwotCi1h bmQgZ290OgotCi0gIC8qIFRoaXMgaXMgYSB0ZXN0ICovCi0gIC4uLi4uLi4uLi4uLi4uLi4uLi4u XgotICAlQ0MtRS1CQURTVE1ULCBJbnZhbGlkIHN0YXRlbWVudC4KLQotU28gaXQgaXMgbm90IG9i amVjdGluZyB0byBhbnl0aGluZyBpbiB0aGUgZmlsZS4gIFRyeWluZyB0aGUgb2xkIExJU1AgdHJp Y2ssCi1JIHB1dCBhbiBleHRyYW5lb3VzIGNsb3NpbmcgYnJhY2tldCBhZnRlciB0aGF0LiAgU3Vj Y2VzcyEgIEhvbmVzdGx5LCBJIGRvbid0Ci1zZWUgYW55dGhpbmcgd3Jvbmcgd2l0aCBmaWxlLiAg SXQncyBERUMgQyBWNS4zLTAwNi4gIEkgc3VzcGVjdCBhIEMgYnVnLgotSSdsbCBsZWF2ZSBpdCBs aWtlIHRoaXMgZm9yIG5vdyB1bnRpbCBJIGdldCBhY2Nlc3MgdG8gc29tZSBvdGhlciBWTVMKLXZl cnNpb25zLiAgQW5vdGhlciBjbHVlIGlzIHRoYXQgd2hlbiBidWlsZGluZyB0aGUgbmV0d29yayB2 ZXJzaW9uIEkgZ2V0IGEKLWhvcnJpYmxlIHdhcm5pbmcgSSBuZXZlciBzYXcgYmVmb3JlIGZyb20g YSBtb2R1bGUgdGhhdCBoYXNuJ3QgYmVlbiB0b3VjaGVkCi1pbiBhIHZlcnkgbG9uZyB0aW1lIChj a3ZydGwuYykuICBBbHNvLCBpbiB0aGUgbmV0d29yayB2ZXJzaW9uLCBJIG5vdGUgdGhhdAotdGhl IEZUUCBjb2RlIGlzIG5vdCBjb21waWxlZCBpbi4gIFdlIGhhdmUgdG8gdHJ5IHRoaXMgYWdhaW4g d2l0aCBzb21lCi1jb21tYW5kLWxpbmUgc3dpdGNoZXMsIGJ1dCBpdCdsbCBkbyBmb3Igbm93LiAg Y2t1dXN5LmMsIDE4IE5vdiAyMDA5LgotCi0tLS1DLUtlcm1pdCA5LjAgQWxwaGEuMDEtLS0KLQot RnJvbSBTdGV2ZW4gU2Nod2VkYSAoU01TKSwgdGhlIHJlYWwgc29sdXRpb24gZm9yIHRoZSBWTVMg Y2xvc2luZyBicmFjZQotcHJvYmxlbSwgaXQgd2Fzbid0IGEgREVDQyBidWcsIGl0IHdhcyBhIG1l IGJ1Zy4gIGNrdXVzeS5jLCAyMCBOb3YgMjAwOS4KLQotUmVkaXNjb3ZlcmVkIHRoZSBuZXcgVk1T IGJ1aWxkIG9wdGlvbnM6IGYgZm9yIExvbmcgRmlsZXMsIGkgZm9yIEludGVybmFsCi1GVFAuICAi bWFrZSBtbmYiIGRvZXNuJ3Qgd29yayBvbiBWTVMgNi4yLCBpdCBsb29rcyBsaWtlIHRoZSBWTVMg ZGVmaW5pdGlvbgotZm9yIENLX09GRl9UIGdvdCBsb3N0LiAgU2FtZSB0aGluZyB3aXRoICJtYWtl IG1maSIuICBDb21lIGJhY2sgdG8gdGhpcyBsYXRlci4KLQotRnJvbSBHZXJyeSBCZWxhbmdlciwg YSBmaXggdG8gSU5QVVQgL0NPVU5UOm4uICBja3V1czQuYywgMjYgTm92IDIwMDkuCi0KLUFkZGVk IFxmc3F1ZWV6ZShzKSwgcmV0dXJucyBzdHJpbmcgcyB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5n IHdoaXRlc3BhY2UKLXJlbW92ZWQsIFRhYnMgY29udmVydGVkIHRvIFNwYWNlcywgYW5kIG11bHRp cGxlIHNwYWNlcyBjb252ZXJ0ZWQgdG8gc2luZ2xlCi1zcGFjZXMuICBGb3Igbm93LCBBU0NJSSBv bmx5LCBubyBvcHRpb25zLiAgY2t1dXNyLmgsIGNrdXVzWzI0XS5jLCAyNyBOb3YgMjAwOS4KLQot SSB3cm90ZSBhIEtlcm1pdCBzY3JpcHQgdG8gcmVhZCBhIGJpZyBmaWxlIG9mIGFkZHJlc3NlcyBv biBTb2xhcmlzIDksCi1cZnNxdWVlemUoKWluZyBlYWNoIGxpbmUuICBBZnRlciBhYm91dCAxNDAw MCBsaW5lcywgdGhlcmUgd2FzIGEgbWFsbG9jCi1mYWlsdXJlIGluIGdldG5jdCgpICh0aGUgY29t bWFuZC1maWxlIHJlYWRlcikuICBUaGVyZSdzIG5vdGhpbmcgd3Jvbmcgd2l0aAotXGZzcXVlZXpl KCksIHRoZSBmYWlsdXJlIGlzIG9uIGEgZGVlcGVyIGxldmVsLCBiZWNhdXNlIHRoZSBzYW1lIHRo aW5nCi1oYXBwZW5zIGlmIEkgdXNlIFxmdXBwZXIoKSAod2hpY2ggaXMgc3RydWN0dXJhbGx5IGlk ZW50aWNhbCB0byBcZnNxdWVlemUoKSkKLWluIHRoZSBzYW1lIHNjcmlwdC4gIFRoZSBwcm9ibGVt IGlzIG5vdCBpbiBnZXRuY3QoKSBlaXRoZXIsIGJlY2F1c2UgZXZlcnkKLW1hbGxvYygpIGlzIGZy ZWVkIChJIGNoZWNrZWQpLiAgT24gdGhlIG90aGVyIGhhbmQsIHRoZSBzYW1lIHNjcmlwdCAod2l0 aAotXGZ1cHBlcigpIGluc3RlYWQgb2YgXGZzcXVlZXplKCkgY29tcGxldGVzIE9LIGluIEMtS2Vy bWl0IDguMC4yMDEuICBJZiBJCi1yZW1vdmUgdGhlIGZ1bmN0aW9uIGNhbGwgKFxmc3F1ZWV6ZSgp IG9yIFxmdXBwZXIoKSkgZnJvbSB0aGUgc2NyaXB0LCBpdCBhbHNvCi1ydW5zIE9LIGluIDkuMC4g IFRoaXMgc2VlbXMgdG8gcG9pbnQgdGhlIGZpbmdlciBhdCBmbmV2ZWwoKSwgd2hpY2ggY29udGFp bnMKLWNvdW50bGVzcyBtYWxsb2MncyBhbmQgZnJlZSdzLiAgQnV0IGNvbXBhcmluZyBmbmV2YWwo KSBiZXR3ZWVuIDguMC4yMTEgYW5kCi05LjAsIEkgZG9uJ3Qgc2VlIGFueSBkaWZmZXJlbmNlIHRo YXQgd291bGQgZXhwbGFpbiB0aGlzIGJlaGF2aW9yIC0tIG5vdGhpbmcKLWF0IGFsbCB0aGF0IGlu dm9sdmVzIG1hbGxvYygpLCBtYWtzdHIoKSwgb3IgZnJlZSgpLiAgTm9yIGFueSBwZXJ0aW5lbnQK LWNoYW5nZSBpbiB0aGUgY2FsbGVyICh6enN0cmluZykgb2YgZm5ldmFsKCkuICAyNyBOb3YgMzAw OS4KLQotQW5vdGhlciBwcm9ibGVtIGlzIHRoYXQgd2hlbiB0aGlzIGhhcHBlbnMsIHRoZSBlcnJv ciBpcyBub3QgY2F1Z2h0IChlLmcuIGJ5Ci10aGUgSUYgRkFJTCBzdGF0ZW1lbnQgYWZ0ZXIgdGhl IGNvbW1hbmQgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gY2FsbCk7Ci1pbnN0ZWFkLCBDLUtl cm1pdCByZXR1cm5zIGltbWVkaWF0ZWx5IHRvIGl0cyBwcm9tcHQuICAyNyBOb3YgMjAwOS4KLQot SXQgY291bGQgc2ltcGx5IGJlIHRoYXQgc29tZSBvZiB0aGUgYnVmZmVycyB3ZSBhbGxvY2F0ZSBh cmUgbXVjaCBiaWdnZXIgbm93LgotQnV0IGFnYWluLCBJIGRvbid0IHNlZSBtdWNoIGRpZmZlcmVu Y2UgYmV0d2VlbiA4LjAuMjExIGFuZCA5LjA7IHdlIHdlcmUKLWFscmVhZHkgYWxsb2NhdGluZyAz MksgY29tbWFuZC1yZWxhdGVkIGJ1ZmZlcnMgKG1hbGxvYygpIHRha2VzIGEgc2l6ZV90LCBhbmQK LXNpemVfdCBpcyBhbiBpbnQgYWxtb3N0IGV2ZXJ5d2hlcmUpLiAgSSBidWlsdCB0aGUgc2FtZSBz b3VyY2Ugb24gTmV0QlNEIGFuZAotcmFuIHRoZSBzYW1lIHNjcmlwdCAod2l0aCBcZnF1ZWV6ZSgp KSwgYW5kIGl0IHdvcmtlZCBmaW5lLiAgTGV0J3Mgd29ycnkKLWFib3V0IHRoaXMgbGF0ZXIsIGlm IGl0IGNvbWVzIHVwLiAgMjcgTm92IDIwMDkuCi0KLUJ1aWx0IE9LIG9uIFNpbGljb24gR3JhcGhp Y3MgSVJJWCA2LjUgUjEwMDAwOyByZWd1bGFyIGJ1aWxkIE9LLCBTU0wgYW5kCi1LZXJiZXJvcyBi dWlsZHMgZmFpbGVkLiAgMzAgTm92IDMwMDkuCi0KLVRyaWVkIHRvIGJ1aWxkIG9uIERpZ2l0YWwg VW5peCA0LjBGIGJ1dCBpdCBibGV3IHVwIGluIGNrdXRpby5jLCBhcHBhcmVudGx5Ci1ub3QgcmVj b2duaXppbmcgYW55IG9mIHRoZSB0ZXJtaW5hbCBzdHJ1Y3Qgc3ltYm9scyBmcm9tIHRlcm1pb3Mu aC4gIFRyaWVkCi1hZ2FpbiB3aXRoIGdjYywgc2FtZSB0aGluZy4gIFRyaWVkIGV4cGxpY2l0bHkg I2luY2x1ZGluZyA8c3lzL3Rlcm1pb3MuaD4KLXdpdGhpbiAjaWZkZWYgVFJVNjQsIHNhbWUgdGhp bmcuICBXaGF0IGNvdWxkIGhhdmUgY2hhbmdlZD8gIDMwIE5vdiAyMDA5LgotCi1CdWlsdCBPSyBv biBMaW51eCBSSEVMNS40L0l0YW5pdW0tMiwgbWFrZSBsaW51eC4gIFRoZSBzZWN1cmUgYnVpbGQK LXJlcXVpcmVkICJGTEFHUz0tRE5PX0tSQjVfSU5JVF9FVFMiIGFuZCBidWlsdCBPSy4gIDMwIE5v diAyMDA5LgotCi1CdWlsdCBPSyBvbiBEaWdpdGFsIFVuaXggNC4wRiB1c2luZyAibWFrZSBvc2Yi IGluc3RlYWQgb2YgIm1ha2UgdHJ1NjQtNDBmIi4KLUkgZG9uJ3Qga25vdyB3aHkgdGhlIHNwZWNp ZmljIHRhcmdldCBkb2Vzbid0IHdvcmssIGJ1dCBpdCdzIG5vdCB3b3J0aAotY2hhc2luZyBkb3du LiAgMiBEZWMgMjAwOS4KLQotQnVpbHQgT0sgb24gTWlyQlNEIDEwLCBkZXNwaXRlIGEgbG90IG9m IGdyYXR1aXRvdXMgY29tcGlsZXIgd2FybmluZ3MuICBCdWlsdAotT0sgb24gTWlyQlNEIDEwLCBP cGVuQlNEIDQuNSwgYW5kIEZlZG9yYSAxMC4gIDMgRGVjIDIwMDkuCi0KLShWYXJpb3VzIG90aGVy IHN1Y2Nlc3NmdWwgVW5peCBidWlsZHMgaW4gdGhlc2Ugd2Vla3MuLi4pCi0KLUJ1aWx0IG9uIFZN UyA3LjIgYW5kIDguMyB3aXRoIGFuZCB3aXRob3V0IFRDUC9JUCwgbm8gcHJvYmxlbXMuICAxMSBK YW4gMjAxMC4KLQotQnVpbHQgb24gVk1TIDguMyB3aXRoICJtYWtlIGZpIiB0byBpbmNsdWRlIHRo ZSBGVFAgY2xpZW50IGFuZCBsb25nLWZpbGUKLXN1cHBvcnQgKG1pZCBKYW4gMjAxMCkuCi0KLUJ1 aWx0IG9uIFZNUyA4LjMgd2l0aCBVWEMgNS42IGFuZCBIUCBTU0wgMS4zLCB3aGljaCBpcyBPcGVu U1NMIDAuOS43ZS4KLUl0IGNvbXBpbGVkIGFuZCBsaW5rZWQgT0sgYnV0IHdoZW4gSSB0cmllZCB0 byBtYWtlIGFuIEZUUCBTU0wgY29ubmVjdGlvbgotaXQgY3Jhc2hlZCBpbiBTU0wkTElCU1NMX1NI Uiwgd2hpY2ggaXMgY2FsbGVkIGZyb20gc3NsX2F1dGgoKSwgYWZ0ZXIgaGF2aW5nCi1oYWQgVExT IGFjY2VwdGVkIGFzIGFuIGF1dGhlbnRpY2F0aW9uIHR5cGUsIGJ1dCBiZWZvcmUgYWN0dWFsbHkK LWF1dGhlbnRpY2F0aW5nLiAgSW4gVW5peDoKLQotIDE5LiBmdHAgb3BlbiBmdHAuc29tZWNvbXBh bnkuY29tIC91c2VyOnBnZS5jb20vdGVzdF9xdW90YSAvcGFzc3dvcmQ6eHh4eHh4Ci1Db25uZWN0 ZWQgdG8gZnRwLnNvbWVjb21wYW55LmNvbS4KLTIyMC1Tb21lY29tcGFueSBGVFAgdjYuMCBmb3Ig V2luU29jayByZWFkeS4uLgotMjIwIFdlbGNvbWUgdG8gdGhlIG9ubGluZSBzdG9yYWdlIEZUUCBz ZXJ2ZXIuICBQbGVhc2UgY2hlY2sgdGhlIG1haW4gd2ViCi1zaXRlIGZvciBzeXN0ZW0gYW5ub3Vu Y2VtZW50cyBhbmQgQVVQLiAoTykKLS0tLT4gQVVUSCBUTFMKLTIzNCBBVVRIIGNvbW1hbmQgT0su IEluaXRpYWxpemluZyBTU0wgY29ubmVjdGlvbi4KLVRMUyBhY2NlcHRlZCBhcyBhdXRoZW50aWNh dGlvbiB0eXBlCi1TU0wgREVCVUcgQUNUSVZFCi09PlNUQVJUIFNTTC9UTFMgY29ubmVjdCBvbiBD T01NQU5ECi0KLUluIFZNUzoKLQotIDE5LiBmdHAgb3BlbiBmdHAuc29tZWNvbXBhbnkuY29tIC91 c2VyOnBnZS5jb20vdGVzdF9xdW90YSAvcGFzc3dvcmQ6eHh4eHh4Ci1Db25uZWN0ZWQgdG8gZnRw LnNvbWVjb21wYW55LmNvbS4KLTIyMCBTb21lY29tcGFueSBGVFAgdjYuMCBmb3IgV2luU29jayBy ZWFkeS4uLgotLS0tPiBBVVRIIFRMUwotMjM0IEFVVEggY29tbWFuZCBPSy4gSW5pdGlhbGl6aW5n IFNTTCBjb25uZWN0aW9uLgotVExTIGFjY2VwdGVkIGFzIGF1dGhlbnRpY2F0aW9uIHR5cGUKLVNT TCBERUJVRyBBQ1RJVkUKLSVTWVNURU0tRi1BQ0NWSU8sIGFjY2VzcyB2aW9sYXRpb24sIHJlYXNv biBtYXNrPTA0LCB2aXJ0dWFsCi1hZGRyZXNzPUZGRkZGRkZGODAwMUExMjAsIFBDPTAwMDAwMDAw MDA2OEIxMTgsIFBTPTAwMDAwMDFCCi0KLU5vdGU6IFRoZSBVbml4IHZlcnNpb24gcmVjZWl2ZWQg dGhlIHNlY29uZCAyMjAgcmVzcG9uc2UsIHRoZSBWTVMgdmVyc2lvbiBkaWQKLW5vdC4gIFRoYXQn cyBvZGQsIGl0J3MgdGhlIHNhbWUgY29kZS4uLiAgMjUgSmFuIDIwMTAuCi0KLUFkZGVkIHNvbWUg ZXNzZW50aWFsIGRldGFpbHMgdG8gdGhlIEhFTFAgRlNFRUsgdGV4dC4gIGNrdXVzMi5jLCAyNSBK YW4gMjAxMC4KLQotRGlzY292ZXJlZCB0aGF0IHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgXGZzZWFy Y2goKSBpcyB0b3RhbGx5IHVucmVsaWFibGUuCi1UaGlzIGlzIHByb2JhYmx5IHRvbyBoYXJkIHRv IGZpeC4KLQotRlNFRUsgZGlkIG5vdCBwYXkgYXR0ZW50aW9uIHRvIFNFVCBDQVNFLCBzZWFyY2hl cyB3ZXJlIGFsd2F5cyBjYXNlIHNlbnNpdGl2ZS4KLUZpeGVkIGluIGNrdXVzNy5jLCAyNiBKYW4g MjAxMC4KLQotRlNFRUsgZmFpbGVkIHRvIGZpbmQgYW55dGhpbmcgaWYgdGhlIHNlYXJjaCBwYXR0 ZXJuIHdhcyBtYXRjaGVkIGluIHRoZSBmaXJzdAotbGluZSBvZiB0aGUgZmlsZS4gIEZpeGVkIGlu IGNrdXVzNy5jLCAyNiBKYW4gMjAxMC4KLQotXGZ3b3JkKCkgYW5kIFxmc3BsaXQoKS4uLi4gIEFu b3RoZXIgY2hhbmdlLCBidXQgbm90IGJhY2t3YXJkcy1pbmNvbXBhdGlibGUuCi1PbmUgbWF5IG5v dyBwdXQgdGhlIHdvcmQgQUxMIChqdXN0IGxpa2UgdGhhdCwgYWxsIHVwcGVyY2FzZSkgYXMgdGhl IGluY2x1ZGUKLXNldCAoNHRoIGFyZ3VtZW50KSB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIHdpbGwg YmUgbm8gYnJlYWsgY2hhcmFjdGVycyBvdGhlcgotdGhhbiB0aG9zZSBleHBsaWNpdGx5IGdpdmVu IGluIHRoZSBicmVhayBzZXQsIGUuZy4gXGZzcGxpdChcbSh4eCksJmEsOixBTEwpCi1icmVha3Mg YSBsaW5lIG9ubHkgb24gYSBjb2xvbiAoOiksIG5vdGhpbmcgZWxzZS4gIFRoZSBvcmlnaW5hbCBy dWxlcyBmb3IKLWNrc3BsaXQoKSB3ZXJlIG1vcmUgdGhhbiBhIGxpdHRsZSBjb3VudGVyaW50dWl0 aXZlOiB0aGUgZGVmYXVsdCBicmVhayBzZXQgaXMKLWFsbCBub24gYWxwaGFudW1zLCBhbmQgdGhl IGRlZmF1bHQgaW5jbHVkZSBzZXQgaXMgYWxsIGFscGhhbnVtcywgc28gaWYgeW91Ci13YW50ZWQg dG8gcGFyc2UgKHNheSkgYSBDU1YgZmlsZSwgYnJlYWtpbmcgb25seSBvbiBjb21tYSwgeW91IGhh ZCB0byB0aGluawotb2YgYWxsIHRoZSBjaGFyYWN0ZXJzIHlvdSB3YW50ZWQgdG8ga2VlcC4gIFRo aXMgd2F5IHlvdSBqdXN0IHNheSBBTEwuCi1ja2NsaWIuYywgMjYgSmFuIDIwMTAuCi0KLVNwZWFr aW5nIG9mIENTViBmaWxlcy4uLiBIb3cgY2FuIHlvdSBwdXQgY29tbWEgYXMgYSBmdW5jdGlvbiBh cmd1bWVudCB3aGVuCi1jb21tYSBpcyB0aGUgZnVuY3Rpb24tYXJndW1lbnQgc2VwYXJhdG9yPyAg VXNlIG9uZSBvZiB0aGVzZSBmb3JtczoKLQotIFxmc3BsaXQoXG0oeHgpLCZhLCIsIixBTEwpCi0g XGZzcGxpdChcbSh4eCksJmEseyx9LEFMTCkKLSBcZnNwbGl0KFxtKHh4KSwmYSxcNDQsQUxMKQot IFxmc3BsaXQoXG0oeHgpLCZhLFxmY2hhcig0NCksQUxMKQotCi1Gcm9tIEpvaG4gRHVubGFwLCBV LiBvZiBXYXNoaW5ndG9uIEFwcGxpZWQgUGh5c2ljcyBMYWI6ICdXaGVuICJzdHR5IC1hIDwKLS9k ZXYvdHR5UzAgfCBncmVwIGNydHNjdHMiIHNob3dzICJjcnRzY3RzIiAobm90ICItY3J0c2N0cyIp IGFuZCB3aGVuIHVzaW5nIGEKLXRocmVlIHdpcmUgc2VyaWFsIGludGVyZmFjZSBhbmQgd2hlbiBh c2tpbmcga2VybWl0IHRvIG5vdCB1c2UgZmxvdyBjb250cm9sCi0oc2V0IGZsb3cgbm9uZSkgdGhl biAiY2t1dGlvLmMxIiAoc2VlIGF0dGFjaG1lbnRzKSBmYWlscyB3aGlsZSAiY2t1dGlvLmMiCi13 b3Jrcy4gIFRoZSByZXN1bHQgb2YgImRpZmYgLXUgY2t1dGlvLmMxIGNrdXRpby5jIiBpcyBhdHRh Y2hlZCBhcyAiZGlmZnMiJy4KLWNrdXRpby5jLCAyNiBKYW4gMjAxMC4KLQotQ2hhbmdlZCB0aGUg eWVhciBmcm9tIDIwMDkgdG8gMjAxMCBpbiB0aGUgbW9kdWxlcyBJIHdvcmtlZCBvbiB0b2RheSBh bmQgaW4KLXRoZSBoZXJhbGRzLCBldGMuICBja2NrbWFpLmMsIGNrdXVzNS5jLCBja3V0aW8uYywg Y2tjbGliLmMsIGNrdXVzNy5jLAotMjYgSmFuIDIwMTAuCi0KLUJ1aWx0IG9uIExpbnV4IEZlZG9y YSBDb3JlIDMsIHJlZ3VsYXIgYW5kIHdpdGggT3BlblNTTCAwLjkuN2EuICBCdWlsdCBvbgotVWJ1 bnR1IDkuNCBPSywgYnV0IFNTTCBhbmQgS2VyYmVyb3MgYnVpbGRzIGZhaWxlZCBkdWUgdG8gbm90 IGZpbmRpbmcgbGlicwotYW5kL29yIGhlYWRlciBmaWxlcy4gIEknbSBzdXJlIHRoaXMgY291bGQg YmUgZml4ZWQuLi4gIDI3IEphbiAyMDEwLgotCi1BZGRlZCBTU0wsIEtSQjQsIGFuZCBLUkI1IHRv IHRoZSBzdGFydHVwIGhlcmFsZCBmb3IgdmVyc2lvbnMgdGhhdCB3ZXJlCi1idWlsdCB3aXRoIFNT TCwgS2VyYmVyb3MgNCwgb3IgS2VyYmVyb3MgNS4gIEJ1aWx0IE9LIG9uIEZlZG9yYSAzIHdpdGgK LWxpbnV4K2tyYjUrc3NsIGFuZCBuZXcgYmFubmVyIHNob3dzIGNvcnJlY3RseS4gIGNrdXVzNS5j LCAyNyBKYW4gMjAxMC4KLQotU2V0IE5PX0tSQjVfSU5JVF9FVFMgYnkgZGVmYXVsdCBpbiBja3Vh dGguaCBzaW5jZSBrcmI1X2luaXRfZXRzKCkgaXMgYSBuby1vcAotaW4gS2VyYmVyb3MgMS40Lngg YW5kIGxhdGVyIGFuZCBpbiBzb21lIGluc3RhbGxhdGlvbnMgaXQgY2FuJ3QgYmUgZm91bmQsCi13 aGljaCBjbG9iYmVycyB0aGUgYnVpbGQuICBja3VhdGguaCwgMjcgSmFuIDIwMTAuCi0KLUFkYXB0 ZWQgdG8gTUlOSVggMyAxLjUsIHRoZSBmaXJzdCB2ZXJzaW9uIHRoYXQgaGFzIHZpcnR1YWwgbWVt b3J5IGFjY29yZGluZwotdG8gQW5keSBULCB3aG8gc2hvdWxkIGtub3cuICBPbiBlYXJsaWVyIHZl cnNpb25zIChlLmcuIE1JTklYIDMgMS4yKSBhbnkKLWF0dGVtcHQgdG8gYnVpbGQgQy1LZXJtaXQg Y2F1c2VzIHRoZSBjb21waWxlciB0byBjcmFzaC4gIE5vdyB0aGUgY29tcGlsZXIKLWRvZXNuJ3Qg Y3Jhc2ggYnV0IGl0IHNwZXdzIG91dCBjb3VudGxlc3Mgd2FybmluZ3MgYWJvdXQgb2xkLWZhc2hp b25lZAotZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRoYXQgSSBkb24ndCBnZXQgYW55d2hlcmUgZWxz ZS4gIFRoZSByZWFsIHByb2JsZW1zCi1jYW1lIGluIGNrdXRpby5jIHdoZXJlIG51bWVyb3VzIHN5 bWJvbHMgd2VyZSB1bmRlZmluZWQgYXQgY29tcGlsZSB0aW1lIGFuZAotdGhlIFBPU0lYIGZ1bmN0 aW9uIHRjZ2V0cGdycCgpIHdhcyBub3QgZm91bmQgYXQgbGluayB0aW1lLCBldmVuIHRob3VnaCB0 aGVyZQotaXMgYSBwcm90b3R5cGUgZm9yIGl0IGluIHRoZSBNSU5JWCBoZWFkZXIgZmlsZXMsIGFu ZCB0aGVyZSBpcyBubyBhbHRlcm5hdGl2ZQotKHNpbmNlIFBPU0lYIGRvZXNuJ3QgbGV0IHVzIHVz ZSBpb2N0bCgpKS4gIEFsc28gbm90ZSB0aGF0IHRoZXJlIGlzIHNvbWUKLWNvbmZ1c2lvbiBvdmVy IHRoZSBjb21waWxlLXRpbWUgc3ltYm9scyBNSU5JWCwgTUlOSVgyLCBNSU5JWDMsIGFuZCBNSU5J WDMxNS4KLVlvdSB3b3VsZCBleHBlY3QgTUlOSVggdG8gbWVhbiAiYW55IHZlcnNpb24gb2YgTUlO SVgiIGJ1dCBpbiBzb21lIHBhcnRzIG9mCi1ja3V0aW8uYyBpdCBtZWFucyBNSU5JWCAxLjAuICBJ IHNpbmNlcmVseSBkb3VidCB0aGF0IEMtS2VybWl0IDkuMCBjYW4gYmUKLWJ1aWx0IG9uIGFueSB2 ZXJzaW9uIG9mIE1pbml4IGJlZm9yZSAzLjEuNSBzbyBJIHJlbW92ZWQgdGhlIGNvbmZ1c2lvbiBh bmQKLW1hZGUgTUlOSVggbWVhbiAiYW55IE1pbml4Ii4gIEl0IGJ1aWxkcyBvbiAzLjEuNSBPSyBu b3csIGV4Y2VwdCBmb3IgdGhlIEZUUAotY2xpZW50LiAgVGhpcyBjYW4gcHJvYmFibHkgYmUgZml4 ZWQgYnV0Li4uICBNb2R1bGVzIGNoYW5nZWQ6IGNrY2RlYi5oLAotY2t1dmVyLmgsIGNrY21haS5j LCBja3V1czUuYywgY2t1dGlvLmMsIDEgRmViIDIwMTAuCi0KLUxhdGVyLi4gQW5keSBzYXlzIE1J TklYIGRvZXMgbm90IHN1cHBvcnQgam9iIGNvbnRyb2wsIHNvIG5vIHByb2dyYW0gaXMgZXZlcgot aW4gdGhlIGJhY2tncm91bmQuICBUaGF0IHNldHRsZXMgdGhhdCEgIDEgRmViIDIwMTAuCi0KLUJ1 aWx0IE9LIG9uIE1pbml4LCBMaW51eCwgTWFjIE9TIFgsIFNvbGFyaXMgOSwgTmV0QlNEIDUuMC4x Li4uICAxIEZlYiAyMDEwLgotCi0tLS1DLUtlcm1pdCA5LjAgQWxwaGEuMDItLS0KLQotRnJvbSBD aHJpc3RpYW4gQ29ydGkgYXQgVW5pLVN0dXR0Z2FydC5kZTogZml4ZXMgdG8gYWxsb3cgYnVpbGRp bmcgb24gU3VuT1MKLTQuMSwgd2hpY2ggb25jZSB3YXMgbXkgbWFpbiBkZXZlbG9wbWVudCBwbGF0 Zm9ybSBidXQgd2hpY2ggaXMgbG9uZy1nb25lIGZyb20KLWhlcmUuICBja3VwdHkuYywgY2t1dGlv LmMsIDkgRmViIDIwMTAuICAoSGUgc2F5cyBpdCBpcyBhbHNvIG5lY2Vzc2FyeSB0bwotY29tbWVu dCBvdXQgdGhlICJzdHJ1Y3Qgd2luc2l6ZSIgYW5kICJzdHJ1Y3QgdHR5c2l6ZSIgaW4gc3lzL2lv Y3RsLmg7Ci1vdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIGNvbmZsaWN0IHdpdGggc3lzL3R0eWNv bS5oIChpbmNsdWRlZCBieSB0ZXJtaW9zLmgpCi13aGljaCBhbHNvIGRlY2xhcmVzIHRoZXNlIHN0 cnVjdHMuIEJ1dCB5b3UgbmVlZCBib3RoIGluY2x1ZGVzLicpCi0KLUZyb20gSm9obiBEdW5sYXAs IGEgZml4IGZvciBLZXJtaXQgcHJvdG9jb2wgZml4ZWQgcGFja2V0LXRpbWVvdXQgaW50ZXJ2YWwK LWdvaW5nIHRvIGEgdW5leHBlY3RlZCB2YWx1ZSAobWlzc2luZyBlbHNlIGNsYXVzZSBpbiB0d28g cGxhY2VzKS4KLWNrY2ZuMi5jLCA5IEZlYiAyMDEwLgotCi1BZGRlZCBhbiBhaXhnIHRhcmdldCB0 byBidWlsZCBvbiBBSVggd2l0aCBnY2Mgd2hlbiBnY2MgaXMgbm90IGluc3RhbGxlZCBhcwotY2Ms IGFuZCBhbHNvIGFkZGVkIENDPSQoQ0MpIENDMj0kKENDKSBjbGF1c2VzIHRvIHRoZSBhaXggYW5k IGFpeCtzc2wKLXRhcmdldHMuICBXb3csIEFJWCByZWFsbHkgbG9zZXMgYmlndGltZSB3aGVuIHJl Y2VpdmluZyBmaWxlcyB0aHJvdWdoIGl0cyBzc2gKLXNlcnZlci4gIFN0cmVhbWluZyBjYW4ndCBi ZSB1c2VkLCBzbGlkaW5nIHdpbmRvd3MgcmVjb3ZlciBmcm9tIGVycm9ycyBidXQKLXRoZXJlIGFy ZSB0b25zIG9mIHRoZW0gdXNpbmcgdGhlIGRlZmF1bHQgNEsgcGFja2V0czsgNTAwIHdvcmtzIG11 Y2ggYmV0dGVyLgotQnVpbHQgd2l0aCBJQk0gY2MgYW5kIGdjYywgYW5kIGFsc28gdGVzdGVkIChz dWNjZXNzZnVsbHkpIHRoZSBuZXcgYWl4K2libXNzbAotdGFyZ2V0LCBpbiB3aGljaCB0aGUgT3Bl blNTTCBoZWFkZXJzIGFuZCBsaWJzIGFyZSBpbiBhIHN0YW5kYXJkIHBsYWNlLgotbWFrZWZpbGUs IDkgRmViIDIwMTAuCi0KLUluIGNrdXB0eS5oLCBtYWtlIHRoZSAjaW5jbHVkZSA8c3lzL2lvY3Rs Lmg+IGJlICNpZm5kZWYgU1VOT1M0MS4KLUZyb20gQ2hyaXN0aWFuIENvcnRpLiAgMTAgRmViIDIw MTAuCi0KLUJ1aWx0IG9uIFZNUyBFOC40LiAgMTIgRmViIDIwMTAuCi0KLVRyaWVkIHRvIGJ1aWxk IG9uIGEgcmVhbCBWQVgtMTEvNzg1IGJ1dCB0aGUgbWFjaGluZSBzZWVtcyB0byBiZSBzZXJpb3Vz bHkKLXdlZGdlZC4gIDEyLTE1IEZlYiAyMDEwLgotCi1BZGRlZCBub3RlIHRvIENLVktFUi5DT00g dG8gdGhlIGVmZmVjdCB0aGUgdGhlICdmJyBvcHRpb24gaGFzIG5vIGVmZmVjdAotb24gVkFYIGFy Y2hpdGVjdHVyZS4gIDE1IEZlYiAyMDEwLgotCi1Nb3ZlZCB0aGUgI2luY2x1ZGUgImNrdnJ0bC5o IiBpbiB0aGUgRlRQIG1vZHVsZSB0byBiZWxvdyB0aGUgaW5jbHVkZSBmb3IKLXV0aW1lLmgsIGJl Y2F1c2UgYnVpbGRpbmcgdGhlIFZNUyB2ZXJzaW9uIHdpdGggdGhlICdpJyBvcHRpb24gKG1lYW5p bmcKLSJpbmNsdWRlIGludGVybmFsIGZ0cCBjbGllbnQiKSByZXN1bHRzIGluICJzdHJ1Y3QgdXRp bWJ1ZiB0cCIgZXJyb3Jpbmcgb3V0Ci1iZWNhdXNlIHN0cnVjdCB1dGltYnVmIGlzIG5vdCBkZWZp bmVkIHlldCAoYXQgbGVhc3QgaW4gc29tZSB2ZXJzaW9uIG9mIFZNUwotd2l0aCBzb21lIHZlcnNp b24gb2YgQykuICBGcm9tIFJvYiBCcm93biwgY2tjZnRwLmMsIDIwIEZlYiAyMDEwLgotCi1Gcm9t IE1hcnRpbiBWb3JsYWVuZGVyOiBuZXcgY29kZSBpbiBWTVMgQy1LZXJtaXQgYnVpbGQgcHJvY2Vk dXJlIHRvIGRldGVjdAotT3BlblNTTCB2ZXJzaW9uIGF1dG9tYXRpY2FsbHkuICBja3ZrZXIuY29t LCAyMiBGZWIgMjAxMC4KLQotQWRkZWQgY29kZSB0byBJTlBVVCBjb21tYW5kIHRvIHN0cmlwIEFO U0kgZXNjYXBlIHNlcXVlbmNlcy4gIEl0J3MgYWN0aXZhdGVkCi1ieSBTRVQgU0VTU0lPTi1MT0cg VEVYVC4gIGNrdXVzci5oOiBhZGRlZCBwcm90b3R5cGUgZm9yIGNoa2FlcygpOwotY2t1Y29uLmMs IGNrdWNucy5jOiBtYWRlIGluZXNjW10gYW5kIG9sZGVzY1tdIGdsb2JhbCBpbnN0ZWFkIG9mIHN0 YXRpYzsgCi1ja3V1czQuYzogZG9pbnB1dCgpIGNvZGUgZm9yIHNraXBwaW5nIGVzY2FwZSBzZXF1 ZW5jZXMuICAxIE1hciAyMDEwLgotCi1QZXRlciBFaWNoaG9ybiBjb21wbGFpbmVkIHRoYXQgaWYg eW91IG1ha2UgYW4gc3NoIGNvbm5lY3Rpb24gd2l0aCBLZXJtaXQsCi10aGVuIGxvZyBvdXQgZnJv bSB0aGUgc3NoIGhvc3QsIGFuZCB0aGVuIHVzZSBhICJjb25uZWN0IiBjb21tYW5kIHRvCi1tYWtl IGEgbmV3IGNvbm5lY3Rpb24gdG8gdGhlIHNhbWUgaG9zdCAod2hpY2ggeW91IGNhbiBkbyB3aXRo IFRlbG5ldCksCi1LZXJtaXQgc2F5cyAoZS5nLik6Ci0KLSBETlMgTG9va3VwLi4uIENhbid0IGdl dCBhZGRyZXNzIGZvciBzc2ggLWUgbm9uZSBzb21laG9zdG5hbWUKLSBTb3JyeSwgY2FuJ3Qgb3Bl biBzc2ggLWUgbm9uZSBzb21laG9zdG5hbWU6IEVycm9yIDAKLQotSSBhZGRlZCBjb2RlIHRvIGRl dGVjdCBhbmQgaGFuZGxlIHRoaXMgY2FzZSBhbmQgaXQgc2VlbXMgdG8gd29yayBPSywgZXZlbgot dGhvdWdoIGl0J3Mga2luZCBvZiBhIGhhY2suICBja3V1c3IuW2NoXSwgY2t1dXM3LmMsIDEgTWFy IDIwMTAuCi0KLVRoZXJlIGhhcyBuZXZlciBiZWVuIGEgY2xlYW4gd2F5IHRvIHB1dCBkZWJ1Z2dp bmcgbWVzc2FnZXMgKEVDSE8gY29tbWFuZHMpCi1pbiBhIHNjcmlwdCB3aGljaCBhcmUgZXhlY3V0 ZWQgb25seSBpZiBkZWJ1Z2dpbmcgaXMgZGVzaXJlZCBhbmQgaWdub3JlZAotb3RoZXJ3aXNlLiAg WW91J2QgaGF2ZSB0byBzZXQgYSByYW5kb20gdmFyaWFibGUgYW5kIHRlc3QgaXQsIG9yIGRlZmlu ZSBhCi1tYWNybyBvciB3aGF0ZXZlci4gIFRvIG1ha2UgdGhpcyBtb3JlIHN0cmFpZ2h0Zm9yd2Fy ZCwgSSBhZGRlZCBTRVQgREVCVUcKLU1FU1NBR0UgT04vT0ZGL1NUREVSUiwgYW5kIGFkZGVkIGEg bmV3IE1FU1NBR0UgKHN5bjogTVNHKSBjb21tYW5kIGZvciBwcmludGluZwotZGVidWdnaW5nIG1l c3NhZ2VzIHRvIHN0ZG91dCBpZiBTRVQgREVCVUcgTUVTU0FHRSBpcyBPTiBvciB0byBzdGRlcnIg aWYgU0VUCi1ERUJVRyBNRVNTQUdFIGlzIFNUREVSUi4gIGNrY21haS5jLCBja3V1c1tyMjNdLmMs IDEyIE1hciAyMDEwLgotCi1BbHNvIGZvciBkZWJ1Z2dpbmcgYW5kIGVycm9yIG1lc3NhZ2VzLCBJ IGFkZGVkIFx2KGxhc3Rjb21tbWFuZCkgc28gdGhhdAotdGhlIGNvbW1hbmQgdGhhdCBmYWlsZWQg Y2FuIGJlIGluY2x1ZGVkIGluIGFuIElGIEZBSUwgb3IgREVCVUcgZXJyb3IgbWVzc2FnZS4KLVRo aXMgd29ya3MgZXZlbiBmb3IgY29tbWFuZHMgdGhhdCBoYXZlIHN5bnRheCBlcnJvcnMuCi1ja3V1 c3IuaCwgY2t1dXM1LmMsIGNrdWNtZC5jLCAxMiBNYXIgMjAxMC4KLQotRnJvbSBTTVMgZm9yIFZN UzogJ0FkZGVkL2RvY3VtZW50ZWQgUDMgb3B0aW9ucyBJTlRTRUxFQ1QsIE9MREZJQiwgT0xESVAu Ci1EaXNhYmxlZCAoY29tbWVudGVkIG91dCkgYXV0b21hdGljIGRlZmluaXRpb24gb2YgTk9TRVRU SU1FIGZvciBWTVMgYmVmb3JlCi1WNy4yICh2bXNfdmVyIC5sdHMuICJWTVNfVjcyIikuJyAgY2tj ZGViLmgsIGNrY2Z0cC5jLCBja2NuZXQuYywgY2t1dXNbMjU2N10uYywKLWNrdmZpby5jLCBja3Zr ZXIuY29tLCBja3ZydGwuW2NoXSwgMTUgTWFyIDIwMTAuCi0KLUV4cG9zZWQgaW5lc2NbXSBhbmQg b2xkZXNjW10gZm9yIFZNUywgc28gbmV3IElOUFVUIGNvbW1hbmQgZXNjYXBlLXNlcXVlbmNlCi1z dHJpcHBpbmcgY2FuIHdvcmsgKHJlYWxseSwgY2hrYWVzKCkgYW5kIHJlbGF0ZWQgZ2xvYmFsIHZh cmlhYmxlcyBzaG91bGQgYmUKLW1vdmVkIG91dCBvZiBja1t1dmRdY29uLmMvY2t1Y25zLmMgYW5k IGludG8gYSBjb21tb24gbW9kdWxlOyBkbyB0aGF0IGxhdGVyKS4KLWNrdXVzci5oLCBja3Zjb24u YywgMTUgTWFyIDIwMTAuCi0KLUJ1aWx0IE9LIG9uIFNvbGFyaXM5LCBNYWMgT1MgWCAxMC40LjEx LCBSSEVMNCAoMzItYml0KSwgUkhFTDUgKDY0LWJpdCksCi1BSVggNS4zLCBTQ08gT3BlblNlcnZy IDYuMC4wLi4uICAxNSBNYXIgMjAxMC4KLQotTm90IHNvIGdvb2Qgb24gVk1TLCB0dXJucyBvdXQg SSBtYWRlIGEgdHlwbyBpbiBvbmUgb2YgdGhlIFZNUyB1cGRhdGVzCi0oI2lmbmRlZiBPTERJUCBp bnN0ZWFkIG9mICNpZmRlZi4uLikuICBja2NuZXQuYywgMTYgTWFyIDIwMTAuCi0KLU1vcmUgZnJv bSBTTVMgZm9yIFZNUywgMTYgTWFyIDIwMTA6Ci0gLiBTZXQgTUFYUEFUSCBjb3JyZWN0bHkgZm9y IFZNUywgY2tjZGViLmguCi0gLiBOQU0gLT4gTkFNTCwgUUlPIHJlcGxhY2VzIHN5c3RlbSggIlNF VCBQUk9URUNUSU9OIiksIGJ1Z2ZpeGVzIGluCi0gICBjdnRkaXIoKSBhbmQgbnpsdG9yKCksIC4u LiAgKFNlZSBjb21tZW50cyk6IGNrdmZpby5jLCBuZXcgY2t2cm1zLmguCi0gICAoVGhlIFJNUyBj b2RlIGluIGNrdmZpby5jIHdhcyBhbG1vc3QgdG90YWxseSByZXdyaXR0ZW4pCi0gLiBNb3ZlZCAi TkFNWCQqIiAoYW5kIHJlbGF0ZWQpIG1hY3JvcyB0byBja3ZybXMuaCwgYW5kIHJlbmFtZWQgdG8K LSAgICJOQU1YXyoiIChhbmQgc2ltaWxhciAiJCIgLT4gIl8iKSwgbW92ZWQgIkZJQl8qIiBtYWNy b3MgZnJvbSBja3ZydGwuYy4KLQotVGhlc2UgY2hhbmdlcyBhcmUgbWFpbmx5IHRvIGFjY29tbW9k YXRlIHRoZSBPRFM1IGZpbGUgc3lzdGVtLCB3aGljaCBoYXMKLWxvbmdlciBhbmQgbWl4ZWQtY2Fz ZSBmaWxlbmFtZXMsIGFuZCBhbHNvIHRvIGV4ZWN1dGUgY2VydGFpbiBjb21tYW5kcwotKGUuZy4g Zm9yIHNldHRpbmcgZmlsZSBwcm90ZWN0aW9uLCBkZWxldGluZyBkaXJlY3RvcmllcykgZGlyZWN0 bHkgaW5zdGVhZAotb2YgdXNpbmcgYSBzeXN0ZW0oKSBjb21tYW5kLgotCi1CdWlsdCBPSyBvbiBW TVMgOC4zICh3aXRoIGFuZCB3aXRob3V0IG5ldHdvcmsgc3VwcG9ydCkuICAxNiBNYXIgMjAxMC4K LQotRmFpbGVkIHRvIGJ1aWxkIG9uIFZNUyA2LjIuICAxNiBNYXIgMjAxMC4KLQotRnJlZUJTRCA4 LjAgPGxpYnV0aWwuaD4gaGFzIGEgaGV4ZHVtcCgpIHByb3RvdHlwZSB0aGF0IGNvbmZsaWN0cyB3 aXRoIHRoZQotaGV4ZHVtcCBtYWNybyBkZWZpbmVkIGluIGNrY2RlYi5oLiAgU2luY2UgdGhlIHNh bWUgdGhpbmcgaXMgbGlrZWx5IHRvIGhhcHBlbgotZWxzZXdoZXJlLCBJIGNoYW5nZWQgdGhlIEtl cm1pdCBtYWNybyB0byBja2hleGR1bXAgYXMgd2VsbCBhbGwgcmVmZXJlbmNlcyB0bwotaXQ6IGNr Y2RlYi5oLCBja2NmdHAuYywgY2tjbmV0LmMsIGNrY3RlbC5jLCBja3VhdGguYywgY2t1dGlvLmMs IDE2IE1hciAyMDEwLgotCi1CdWlsdCBPSyBvbiBEaWdpdGFsIFVuaXggVHJ1LTY0IDQuMEUgdXNp bmcgIm1ha2Ugb3NmIiwgMTYgTWFyIDIwMTAuCi0KLVRyaWVkIGFnYWluIHRvIGJ1aWxkIERpZ2l0 YWwgVW5peCBUcnU2NCA0LjBFIHVzaW5nICJtYWtlIHRydTY0LTQwZSIsIGJ1dAotc29tZXRoaW5n IHByZXZlbnRzIGl0IGZyb20gcGlja2luZyB1cCB0aGUgdGVybWlvcyBzeW1ib2xzIGFuZCBpdCBi bG93cyB1cCBpbgotY2t1dGlvLmMsIHdoZXJlYXMgdGhpcyB1c2VkIHRvIHdvcmsgaW4gZWFybGll ciBDLUtlcm1pdCB2ZXJzaW9ucy4gIFRoaXMgaXMKLXRoZSBvbmx5IFRydTY0IHN5c3RlbSBJIHN0 aWxsIGhhdmUgYWNjZXNzIHRvLCBzbyBJIGNhbid0IHRlbGwgaWYgaXQncyBhCi1sb2NhbCBwZWN1 bGlhcml0eSBvciB3aGF0LiAgTm90ZSB0aGF0IFBPU0lYIGlzIG5vdCBkZWZpbmVkIGZvciB0aGlz IGJ1aWxkLgotQnV0IGlmIEkgZGVmaW5lIGl0LCBJIGdldCBpbnRvIHRyb3VibGUgd2l0aCAic3Ry dWN0IHRpbWV2YWwiLiAgVHJpZWQgYWdhaW4KLXdpdGggIktGTEFHUz0tRFBPU0lYIC1ETk9USU1F VkFMIiBidXQgdGhhdCBkb2Vzbid0IGhlbHAuICBUcmllZCAibWFrZQotZGVjLW9zZiIgYW5kIHRo YXQgd29ya2VkIE9LIGJ1dCBvZGRseSBlbm91Z2ggaXQgbWFrZXMgYSBLZXJtaXQgd2l0aCBsZXNz Ci1mZWF0dXJlcyB0aGFuICJtYWtlIG9zZiIuICAxNiBNYXIgMjAxMC4KLQotVG8gZ28gd2l0aCBN RVNTQUdFIGFuZCBTRVQgREVCVUcgTUVTU0FHRSwgSSBhZGRlZCBJRiBERUJVRywgd2hpY2ggaXMg dHJ1ZQotaWYgU0VUIERFQlVHIE1FU1NBR0UgaXMgbm90IE9GRiBhbmQgZmFsc2Ugb3RoZXJ3aXNl LiAgY2t1dXNyLmgsIGNrdXVzNi5jLAotMTYgTWFyIDIwMTAuCi0KLUZyb20gU01TOiBDb3JyZWN0 aW9ucyB0byBteSBtZXJnaW5nIG9mIFNNUydzIGNoYW5nZXMsIGNrY2Z0cC5jLCBja3ZydGwuaC4K LUJ1aWxkcyBPSyBvbiBWTVMgNi4yIG5vdy4gIEFsc28gZGlkIGFuIFNTTCBidWlsZCBvbiBWTVMg OC4zIHdpdGggT3BlblNTTAotbTAuOS43ZSBhbmQgIk9QRU5TU0xfRElTQUJMRV9PTERfREVTX1NV UFBPUlQiIHdhcyBpbmNsdWRlZCBpbiBQMwotYXV0b21hdGljYWxseSBieSBNYXJ0aW4gVidzIGFk ZGl0aW9uIHRvIGNrdmtlci5jb20uICAxNyBNYXIgMjAxMC4KLQotRnJvbSBTTVM6ICNpbmNsdWRl IDx0eXBlcy5oPiBlYXJsaWVyIGZvciBWTVMgaW4gY2tjZGViLmggdG8gcGljayB1cCBvZmZfdAot YmVmb3JlIGl0IGlzIHJlZmVyZW5jZWQuICBUaGlzIGFsbG93cyBDLUtlcm1pdCB0byBjb21waWxl IG9uIFZNUy9BbHBoYSA2LjIKLWJ1dCBsaW5raW5nIGZhaWxzIG9uIGZzZWVrbygpIGFuZCBmdGVs bG8oKSAoYW5kIHlldCwgYSBmdW5jdGlvbmFsIGV4ZWN1dGFibGUKLWlzIGNyZWF0ZWQsIGFuZCBG U0VFSyB3b3JrcyByaWdodCkuICBCdWlsZHMgdGhlIHNhbWUgd2F5IHdpdGggbm8gcHJvYmxlbXMg YXQKLWFsbCBvbiBWTVMgOC4zIC8gQWxwaGEuICBJbiB0aGlzIGNhc2Ugd2UgZ2V0IHRoZSBmdWxs IDY0LWJpdCBhcml0aG1ldGljLi4uCi1XZWxsLCA2MiBiaXRzOgotCi0gIEFUTEFTOjpDLUtlcm1p dD4oIF4gMiA2MykKLSAgIDkyMjMzNzIwMzY4NTQ3NzUwMDAuMAotICBBVExBUzo6Qy1LZXJtaXQ+ KCBeIDIgNjIpCi0gICA0NjExNjg2MDE4NDI3Mzg3OTA0Ci0KLXdoZXJlYXMgb24gVk1TIDYuMiB3 ZSBnZXQgaW50ZWdlcnMgb25seSB1cCB0byAoXiAyIDMwKS4gIDE3IE1hciAyMDEwLgotCi1DaGFu Z2VkIHRoZSBWTVMgYnVpbGQgcHJvY2VkdXJlIHRvIGVuYWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQg YXV0b21hdGljYWxseQotZm9yIG5vbi1WQVggYW5kIFZNUyA3LjMgb3IgZ3JlYXRlci4gIE5vIHJl YXNvbiBub3QgdG8gaW5jbHVkZSB0aGlzIGZlYXR1cmUuCi1DaGFuZ2VkIHRoZSBzZW5zZSBvZiB0 aGUgRiBvcHRpb24gdG8gRElTQUJMRSBsYXJnZSBmaWxlIHN1cHBvcnQgaW4gdGhlCi11bmxpa2Vs eSBjYXNlIHRoYXQgQy1LZXJtaXQgaXMgYmVpbmcgYnVpbHQgb24gYSBzdWl0YWJsZSBwbGF0Zm9y bSBidXQgdGhlCi1DIGxpYnJhcnkgaXMgb2xkZXIgdGhhbiBWTVM3M19BQ1JUTC1WMDIwMCwgaW4g d2hpY2ggY2FzZSBmc2Vla28oKSBhbmQKLWZ0ZWxsbygpIHdpbGwgY29tZSB1cCBtaXNzaW5nIGF0 IGxpbmsgdGltZS4gIGNrdmtlci5jb20sIDE4IE1hciAyMDEwLgotCi1DaGFuZ2VkIFZNUyBidWls ZCBwcm9jZWR1cmUgdG8gaW5jbHVkZSB0aGUgRlRQIGNsaWVudCBpbiBhbnkgbmV0d29yayBidWls ZAotYnkgZGVmYXVsdC4gIENoYW5nZWQgdGhlIHNlbnNlIG9mIHRoZSBJIG9wdGlvbiB0byBleGNs dWRlIHRoZSBGVFAgY2xpZW50LAotaW4gY2FzZSBhbnlib2R5IHdvdWxkIHdhbnQgdG8gZG8gdGhh dC4gIGNrdmtlci5jb20sIDE4IE1hciAyMDEwLgotCi1Gcm9tIFNNUzogdXBkYXRlZCBkZXBlbmRl bmNpZXMgaW4gQ0tWS0VSLkNPTSwgZml4IHRoZSAiZG9uJ3QgcmVpbmNsdWRlIG1lIgotY2xhdXNl IGluIENLVlJUTC5ILiAgMTkgTWFyIDIwMTAuCi0KLUJ1aWx0IE9LIG9uIFZNUyA2LjIgYW5kIDgu MyB3aXRoIGFuZCB3aXRob3V0IG5ldHdvcmtpbmcuICBMYXJnZSBmaWxlIHN1cHBvcnQKLWluY2x1 ZGVkIGF1dG9tYXRpY2FsbHkgaW4gVk1TIDguMyAgRlRQIGNsaWVudCBpbmNsdWRlZCBhdXRvbWF0 aWNhbGx5IGluIGJvdGgKLW5ldHdvcmsgYnVpbGRzLiAgMTkgTWFyIDIwMTAuCi0KLUNoYW5nZWQg aGV4ZHVtcCgpIHRvIGNraGV4ZHVtcCgpIGluIGNrX2NycC5jLCB3aGljaCBJIG1pc3NlZCBiZWZv cmUuCi0xOSBNYXIgMjAxMC4KLQotLS0tQy1LZXJtaXQgOS4wIEFscGhhLjAzLS0tCi0KLUluIEhQ LVVYIHdpdGggdGhlIGJ1bmRsZWQtbm9uIEFOU0kgY29tcGlsZXIsIHdlIGdldCB3YXJuaW5ncyBh Ym91dCBmdW5jdGlvbnMKLXN1Y2ggYXMgZW5kdXNlcnNoZWxsKCksIHdoaWNoIGFyZSBkZWNsYXJl ZCB2b2lkIGluIHRoZSBoZWFkZXIgZmlsZXMuICBCdXQgaW4KLW5vbi1BTlNJIGJ1aWxkcyB3ZSBk ZWZpbmQgVk9JRCB0byBiZSBpbnQgcmF0aGVyIHRoYW4gdm9pZCwgc28gb3VyIHByb3RvdHlwZXMK LWFyZSB3cm9uZy4gIEkgY2hlY2tlZCB0aGF0IEhQLVVYIDksIDEwLCBhbmQgMTEgYWxsIGhhdmUg dm9pZCBkYXRhdHlwZSBhbmQKLWNoYW5nZWQgdGhlIGRlZmluaXRpb24gb2YgVk9JRCB0byB2b2lk IGluIHRob3NlIGNhc2VzLiAgY2tjZGViLmgsIDI5IE1hciAyMDEwLgotCi1GaXhlZCBhIHR5cG8g aW4gYSBkZWJ1ZygpIHN0YXRlbWVudCBpbiBja3NwbGl0KCkgdGhhdCB3YXMgY2F1c2luZyBzb21l Ci13YXJuaW5ncy4gIGNrY2xpYi5jLCAyOSBNYXIgMjAxMC4KLQotRGl0dG8gaW4gdGxzX2xvYWRf Y2VydHMoKS4gIGNrX3NzbC5jLCAyOSBNYXIgMjAxMC4KLQotIm1ha2UgaHB1eDEwMDBvK3NzbCIg ZmlsZXMgd2l0aDoKLS91c3IvY2NzL2Jpbi9sZDogVW5zYXRpc2ZpZWQgc3ltYm9sczoKLSAgIF9f dW1vZGRpMyAoY29kZSkKLSAgIF9fdWRpdmRpMyAoY29kZSkKLSAgIF9fZXByaW50ZiAoY29kZSkK LQotSXQgYXBwZWFycyB0aGF0IE9wZW5TU0wgKDAuOS43YyBpbiB0aGlzIGNhc2UpIHJlcXVpcmVz IC1sZ2NjLgotQW5kIGluZGVlZCBocHV4MTAwMGdjYytzc2wgYnVpbGRzIGZpbmUuICAyOSBNYXIg MjAxMC4KLQotVGhlcmUgYXJlIHZhcmlvdXMgd2FybmluZ3MgaW4gdGhlIFNTTCBjb2RlIGluIGNr dXRpby5jLCBja2NmdHAuYywgYW5kCi1ja2NuZXQuYyBhYm91dCBwb2ludGVycyBub3QgYmVpbmcg YXNzaWdubWVudCBjb21wYXRpYmxlLCBidXQgSSBoYXZlIGxlYXJuZWQKLWZyb20gZXhwZXJpZW5j ZSBub3QgdG8gdHJ5IHRvIGZpeCB0aGVzZSAoc2VlIG5vdGVzIGZyb20gNiBPY3QgMjAwOSkuCi0y OSBNYXIgMjAxMC4KLQotY29ubmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopJmhpc2N0bGFkZHIs IHNpemVvZiAoaGlzY3RsYWRkcikpOiBJbiBGVFAsCi10aGlzIGRvZXNuJ3Qgd29yayBvbiBSSEVM NSAvIE1hYyBPWCBYIDYuMS8yIDY0LWJpdC4gIEJ1dCB0aGUgY29ubmVjdCgpIGluCi1UZWxuZXQg d29ya3MuICBPbiBNYWMgT1MgWCA2LjIgSSB0cmllZCBjaGFuZ2luZyB0aGUgc29ja2V0KCkgY2Fs bCB0byBiZSBsaWtlCi10aGUgb25lIGluIGNrY25ldC5jIGZvciBUZWxuZXQsIGJ1dCBpdCBtYWRl IG5vIGRpZmZlcmVuY2UuICBPbiBhIFJIRUw1LjQKLXN5c3RlbSBvbiBpMzg2LCBGVFAgd29ya3Mg ZmluZSwgc28gaXQncyBub3QgdGhlIFJlZCBIYXQgdmVyc2lvbi4gIE9uIERpZ2l0YWwKLVVuaXgg NC4wRSA2NC1iaXQsIHNhbWUgdGhpbmc6Ci0KLSAgMTE6MjM6MTAuNzIyIGZ0cF9ob29rdXBba2Vy bWl0LmNvbHVtYmlhLmVkdV09MjEKLSAgMTE6MjM6MTAuNzIyIGZ0cCBob29rdXAgQVtrZXJtaXQu Y29sdW1iaWEuZWR1XQotICAxMToyMzoxMC43MjIgZnRwIGhvb2t1cCBDW2tlcm1pdC5jb2x1bWJp YS5lZHVdCi0gIDExOjIzOjEwLjcyMiBmdHAgaG9va3VwIHNvY2tldD00Ci0gIDExOjIzOjEwLjcy MiBmdHAgaG9va3VwIEhBRERSTElTVAotICAxMToyMzoxMC43MjMgZnRwIGhvb2t1cCBjb25uZWN0 IGZhaWxlZD0xMwotICAxMToyMzoxMC43MjMgZnRwIGhvb2t1cCBiYWQKLQotMTMgPSBQZXJtaXNz aW9uIGRlbmllZDoKLQotICBbRUFDQ0VTU10gU2VhcmNoIHBlcm1pc3Npb24gaXMgZGVuaWVkIGZv ciBhIGNvbXBvbmVudCBvZiB0aGUgcGF0aCBwcmVmaXg7Ci0gICAgb3Igd3JpdGUgYWNjZXNzIHRv IHRoZSBuYW1lZCBzb2NrZXQgaXMgZGVuaWVkLgotCi1PbiBHZW50b28gTGludXgsIGFsc28gb24g QWxwaGEsIHRoZSBlcnJubyBpcyA1MTogTmV0d29yayBpcyB1bnJlYWNoYWJsZS4KLUNsZWFybHkg c29tZSBkYXRhIHR5cGUgaW4gdGhlIHNvY2tldHMgc3RydWN0cyBpcyBvdXQgb2Ygd2hhY2suCi0K LVRoZSB0aGlyZCBjb25uZWN0KCkgYXJndW1lbnQgaXMgImFkZHJlc3MgbGVuZ3RoIi4gIFRoZSBh ZGRyZXNzIGlzIGEKLXN0cnVjdCBzb2NrYWRkci4gIEFib3V0IHRoZSB0aGlyZCBhcmd1bWVudCwg UkhFTDUgIm1hbiBjb25uZWN0IiBzYXlzOgotCi0gIFRoZSB0aGlyZCBhcmd1bWVudCBvZiBjb25u ZWN0KCkgaXMgaW4gcmVhbGl0eSBhbiBpbnQgKGFuZCB0aGlzIGlzIHdoYXQgCi0gIDQueCBCU0Qg YW5kIGxpYmM0IGFuZCBsaWJjNSBoYXZlKS4gIFNvbWUgUE9TSVggY29uZnVzaW9uIHJlc3VsdGVk IGluIAotICB0aGUgcHJlc2VudCBzb2NrbGVuX3QsIGFsc28gdXNlZCBieSBnbGliYy4gIFNlZSBh bHNvIGFjY2VwdCgyKS4KLQotQnVpbGRpbmcgb24gUkhFTDUgb24geDg2XzY0LCB3aGVyZSBzaXpl X3QgaXMgOCBhbmQgc29ja2xlbl90IGlzIDQsIEkgZ2V0IGEKLXdhcm5pbmc6Ci0KLSAgY2tjZnRw LmM6IEluIGZ1bmN0aW9uICdmdHBfaG9va3VwJzoKLSAgY2tjZnRwLmM6MTQ2Njc6IHdhcm5pbmc6 Ci0gICBjb21wYXJpc29uIGlzIGFsd2F5cyB0cnVlIGR1ZSB0byBsaW1pdGVkIHJhbmdlIG9mIGRh dGEKLQotUmVmZXJyaW5nIHRvOgotCi0gIGlmIChoaXNjdGxhZGRyLnNpbl9hZGRyLnNfYWRkciAh PSAodW5zaWduZWQgbG9uZykgLTEpCi0KLVRoaXMgc2VlbXMgdG8gYmUgdGhlIHByb2JsZW07IGlm IEkgcmVtb3ZlIHRoZSAodW5zaWduZWQgbG9uZykgY2FzdCAoaW4gdHdvCi1wbGFjZXMpLCB0aGUg cHJvYmxlbSBnb2VzIGF3YXkuICBBY3R1YWxseSB3aGF0IEkgc2hvdWxkIGJlIGNvbXBhcmluZyBp dCB3aXRoCi1pcyBJTkFERFJfTk9ORSwgd2hpY2ggaXMgZGVmaW5lZCBhcHByb3ByaWF0ZWx5IGlu IHNvbWUgaGVhZGVyIGZpbGUsIGUuZy4gYXMKLTB4ZmZmZmZmZmYuICBBbHNvIEkgZGVmaW5lIGl0 IGV4cGxpY2l0bHkgYXMgLTEgaWYgaXQgaXMgbm90IGRlZmluZWQgaW4gYW55Ci1oZWFkZXIgZmls ZSAoYXMgaXMgdGhlIGNhc2UgaW4gU29sYXJpcyA5KS4gIFRlc3RlZCBPSyBvbiA2NC1iaXQgUkhF TDUsCi0zMi1iaXQgUkhFTDUsIERpZ2l0YWwgVW5peCA0LjBFIDY0LWJpdCwgU29sYXJpcyA5IDMy LWJpdCwgTWFjIE9TIFggMTAuNC4xMQotMzItYml0LCBNYWMgT1MgWCAxMC42LjMgNjQtYml0LCBB SVggNS4zLCBHZW50b28gTGludXggMi42LjMxIG9uIEFscGhhCi02NC1iaXQsIE5ldEJTRCA1LjAu MSAzMi1iaXQuLi4uICBja2NmdHAuYywgMjkgTWFyIDIwMTAuCi0KLS0tLUMtS2VybWl0IDkuMCBB bHBoYS4wNC0tLQotCi1ZZXN0ZXJkYXkncyBWT0lEIHJlZGVmaW5pdGlvbiBjYXVzZWQgcHJvYmxl bXMgZm9yIEhQLVVYIGluIGNrdXVzeC5jLCBpbiB0aGUKLWN1cnNlcyBzZWN0aW9uIHdoZXJlIFZP SUQgaXMgdW5kZWYnZCBhbmQgbm90IHVzZWQgdG8gYXZvaWQgYSBjb25mbGljdCB3aXRoCi1jdXJz ZXMuaC4gIEFzIGEgd29ya2Fyb3VuZCBJIGRlZmluZWQgYSBuZXcgbWFjcm8gQ0tWT0lEIHdpdGgg dGhlIHNhbWUKLWRlZmluaXRpb24gYXMgVk9JRCBhbmQgdXNlZCBpdCBpbiB0aGUgb2ZmZW5kaW5n IHNlY3Rpb24gb2YgY2t1dXN4LiAgVGhlIHJlYWwKLXNvbHV0aW9uIGlzIHRvIHJlcGxhY2UgYWxs IHJlZmVyZW5jZXMgdG8gVk9JRCB3aXRoIENLVk9JRCAoc2luY2UgVk9JRCBpcwotaW5jcmVhc2lu Z2x5IGxpa2VseSB0byBjYXVzZSBjb25mbGljdHMpLCBidXQgYSBtYXNzIHNlYXJjaCBhbmQgcmVw bGFjZSBpcwotbm90IHdpdGhvdXQgcmlza3MuICBja2NkZWIuaCwgY2t1dXN4LmMsIDMwIE1hciAy MDEwLgotCi1DaGFuZ2VkIFZPSUQgYW5kIENLVk9JRCBkZWZpbml0aW9uIHRvIGJlICd2b2lkJyBm b3IgYWxsIEhQLVVYICh2ZXJpZmllZCBieQotUGV0ZXJFIGJhY2sgdG8gSFAtVVggNi41LCAxOTg5 KS4gIFN0aWxsIG5lZWQgdG8gY2hlY2sgdGhpcyBvbiBIUC1VWCA1LjIxOwotaWYgdGhhdCdzIGFu IGV4Y2VwdGlvbiBpdCBjYW4gYmUgZG9uZSBpbiB0aGUgbWFrZWZpbGUuICBja2NkZWIuaCwgMzAg TWFyIDIwMTAuCi0KLVRoZSBjaGFuZ2UgSSBtYWRlIHRvIGFsbG93IENPTk5FQ1QgdG8gcmVlc3Rh Ymxpc2ggYSBwcmV2aW91cyBTU0ggY29ubmVjdGlvbgotcHJldmVudGVkIGEgbmV3IFNTSCBjb25u ZWN0aW9uIHRvIGEgZGlmZmVyZW50IGhvc3QgdG8gYmUgbWFkZS4gIEZpeGVkIGluCi1ja3V1czcu YywgMzAgTWFyIDIwMTAuCi0KLUZpeGVkIG1pc3Rha2VuIGV4dGVybiBkZWNsYXJhdGlvbnMgb2Yg a3JiNF9lcnJubyBhbmQga3JiNV9lcnJubyBhcyBzdHJpbmdzCi1pbiBudmxvb2soKTsgdGhleSBh cmUgaW50cy4gQnVpbHQgT0sgb24gTWFjIE9TIFggMTAuNi4zLiBja3V1czQuYywgMzAgTWFyIDIw MTAuCi0KLUEgZml4IHRvIFRydXN0ZWQgSFAtVVggbWFrZWZpbGUgdGFyZ2V0IGZyb20gUGV0ZXJF LCB0byBhY2NvdW50IGZvciB0aGUKLWVxdWl2YWxlbmNlIG9mICtvcGVuc3NsIGFuZCArc3NsIGFz IHRhcmdldCBzdWZmaXhlcy4gIDMwIE1hciAyMDEwLgotCi1BZGRlZCBhIG5ldyBmdW5jdGlvbiBc ZmN2dGNzZXRzKHN0cmluZyxjc2V0MSxjc2V0MSkgdGhhdCBjb252ZXJ0cyBhIHN0cmluZwotZnJv bSBvbmUgY2hhcmFjdGVyIHNldCB0byBhbm90aGVyLiAgVGhlIGNzZXRzIGFyZSBGaWxlIENoYXJh Y3Rlci1TZXQgbmFtZXMuCi1ja3V1czQuYywgMzEgTWFyIDIwMTAuCi0KLUFkZGVkIGEgbmV3IGZ1 bmN0aW9uIFxmZGVjb2RlaGV4KHN0cmluZyxwcmVmaXgpIHRoYXQgZGVjb2RlcyBhIHN0cmluZwot Y29udGFpbmluZyBwcmVmaXhlZCBoZXggYnl0ZXMuICBEZWZhdWx0IHByZWZpeCBpcyAlJSwgYnV0 IGFueSBwcmVmaXggb2YKLW9uZSBvZiB0d28gY2hhcnMgKHN1Y2ggYXMgJSBvciAweCkgY2FuIGJl IHNwZWNpZmllZC4gIGNrdXVzci5oLCBja2NsaWIuaCwKLWNrY2xpYi5jLCBja3V1c3IuYywgMzEg TWFyIDIwMTAuCi0KLVJpY2hhcmQgTm9sZGUgcmVwb3J0cyB0aGF0IEtlcm1pdCBjYW4ndCBmaW5k IC1scGFtIG9uIEZlZG9yYSAxMiBiZWNhdXNlIGl0J3MKLWluIC9saWIgcmF0aGVyIHRoYW4gL3Vz ci9saWIuICBSSEVMNSBoYXMgc3ltbGlua3MsIEZDMTIgc2hvdWxkIHRvby4gIEFkZGVkIGEKLW5v dGUgdG8gdGhlIG1ha2VmaWxlLiAgMSBBcHIgMjAxMC4KLQotQnVpbGQgb24gU29sYXJpcyAxMSBm b3IgdGhlIGZpcnN0IHRpbWUuICBIYWQgdG8gYWRqdXN0IGNrdXZlci5oIHRvIGdldCB0aGUKLXZl cnNpb24gaGVyYWxkIHJpZ2h0LiAgVGhpcyB3YXMgb24gYSBib3ggdGhhdCByZXBvcnRlZCBpdHMg YXJjaGl0ZWN0dXJlIGFzCi1pODZwYy4gIDEgQXByIDIwMTAuCi0KLUFkZGVkIE1JTUUgY2hhcmFj dGVyLXNldCBuYW1lcyBhcyBpbnZpc2libGUgc3lub255bXMgaW4gdGhlIGZpbGUgYW5kCi10ZXJt aW5hbCBjaGFyYWN0ZXItc2V0IHRhYmxlcywgZmNzdGFiW10gYW5kIHRjc3RhYltdLiAgTm90ZSB0 aGF0IG5vdCBhbGwgdGhlCi1jaGFyYWN0ZXIgc2V0cyBrbm93biB0byBLZXJtaXQgYXJlIHJlZ2lz dGVyZWQgaW4gTUlNRS4gIEJ1dCBhdCBsZWFzdCBub3cKLU1JTUUtcmVnaXN0ZXJlZCBjaGFyYWN0 ZXIgc2V0cyBjYW4gYmUgcmVmZXJyZWQgdG8gYnkgdGhlaXIgTUlNRSBuYW1lcywgZS5nLgotSVNP LTg4NTktMSwgSVNPNjQ2LUVTLCBJQk00MzcsIFdJTkRPV1MtMTI1Mi4gIFRoZXNlIGFyZSBub3Qg bGlzdGVkIGlmIHlvdQotdHlwZSA/IGluIGEgZmllbGQgdGhhdCBpcyBwYXJzaW5nIHRoZW0sIHVu bGVzcyB5b3UgdHlwZSBhIGxldHRlciBmaXJzdCwKLWUuZy4gImk/IiBsaXN0cyBJU08tIGFuZCBJ Qk0gc2V0IG5hbWVzLiAgTGF0ZXIgbWF5YmUgSSdsbCBtYWtlIHBhcmFsbGVsCi10YWJsZXMsIG9y IGtleXdvcmQgYXR0cmlidXRlIGJpdCB0aGF0IHNheXMgd2hldGhlciBhIG5hbWUgaXMgTUlNRSBv ciBub3QuCi1UaGUgcmVhbCBiZW5lZml0IG9mIHRoaXMgY2hhbmdlIGlzIHRoYXQgbm93IEtlcm1p dCBjYW4gdGFrZSBpdHMKLWNoYXJhY3Rlci1zZXQgbmFtZXMgZnJvbSBleHRlcm5hbCBzb3VyY2Vz IGxpa2UgZW1haWwgaGVhZGVycyBvciB3ZWIgbG9ncy4KLWNrdXhsYS5jLCAxIEFwciAyMDEwLgot Ci1DaGFuZ2VkIHRoZSBJRiBjb21tYW5kIHRvIGFjY2VwdCBhIGJhcmUgbWFjcm8gbmFtZSBpdHMg Y29uZGl0aW9uLiAgVGhpcyB3aWxsCi1wYXJzZSBhbmQgZXhlY3V0ZSBjb3JyZWN0bHkgaWYgdGhl IG1hY3JvIGlzIGRlZmluZWQgYW5kIGlmIGl0IGhhcyBhIG51bWVyaWMKLXZhbHVlLCBvciBpZiBp dCBpcyBub3QgZGVmaW5lZCwgaW4gd2hpY2ggY2FzZSBpdCBldmFsdWF0ZXMgdG8gMCAoRkFMU0Up LiAgSWYKLWl0IGlzIGRlZmluZWQgYnV0IGhhcyBhIG5vbi1udW1lcmljIHZhbHVlLCBhIHBhcnNl IGVycm9yIG9jY3Vycy4gIGNrdXVzNi5jLAotMiBBcHIgMjAxMC4KLQotQWRkZWQgXGZzdHJpbmd0 eXBlKCkgZnVuY3Rpb24uICBHaXZlbiBhIHN0cmluZyBhcmd1bWVudCwgaXQgdGVsbHMgd2hldGhl cgotdGhlIHN0cmluZyBpcyA3Yml0LCA4Yml0LCB1dGY4LCBiaW5hcnksIGV0Yy4gIGNrdXVzci5o LCBja3V1c1s0eF0uYywKLTIgQXByIDIwMTAuCi0KLURpZCBhIGZldyBidWlsZHMgdG8gbWFrZSBz dXJlIHRoZXJlIHdlcmUgbm8gYm9vYm9vcy4gIFNvbGFyaXMgOSwgTmV0QlNECi01LjAxLCBMaW51 eCBSSEVMNCwgSFAtVVggMTAuMjAgKG5vbi1BTlNJIGNvbXBpbGVyIGFuZCBBTlNJIG9wdGltaXpp bmcKLWNvbXBpbGVyKSwgTWFjIE9TIFggMTAuNC4xMSwgU0NPIE9TUiA2LjAwLiAgNSBBcHIgMjAx MC4KLQotLS0tQy1LZXJtaXQgOS4wIEFscGhhLjA1LS0tCi0KLUluY3JlYXNlZCBtYXhpbXVtIHZh cmlhYmxlIG5hbWUgbGVuZ3RoIGZyb20gNEsgdG8gMTZLLiBWZXJpZmllZCB0aGF0Ci10b28tbG9u ZyBuYW1lcyBhcmUgY2F1Z2h0IGFuZCByZWNvdmVyZWQgZnJvbSBjb3JyZWN0bHkuICBja3V1c3Iu aCwgNiBBcHIgMjAxMC4KLQotSW1wbGVtZW50ZWQgYSBuZXcgXGZzcGxpdCgpIG9wdGlvbiBmb3Ig cGFyc2luZyBDU1YgZmlsZXMsIHdoaWNoIHR1cm5zIG91dCB0bwotYmUgYSBsaXR0bGUgY29tcGxp Y2F0ZWQsIGJlY2F1c2UgdGhlIHNlcGFyYXRvciBpcyBub3QganVzdCBhIGNvbW1hLCBidXQgYQot Y29tbWEgYW5kIGFsbCBpdHMgc3Vycm91bmRpbmcgc3BhY2VzLiAgQWxzbyB0aGVyZSBhcmUgc3Bl Y2lhbCBxdW90aW5nIHJ1bGVzCi1mb3IgZmllbGRzIHdpdGggZW1iZWRkZWQgY29tbWFzIGFuZCBm aWVsZHMgd2l0aCBlbWJlZGRlZCBxdW90ZXMuICBja2NsaWIuYywKLTcgQXByIDIwMTAuCi0KLS0t LUMtS2VybWl0IDkuMCBBbHBoYS4wNi0tLQotCi1WTVMgY2hhbmdlcyBmcm9tIFNNUy4gIFRoZXkg YnVpbGQgT0ssIEtlcm1pdCBmaWxlIHRyYW5zZmVycyBhcmUgc3RpbGwgT0ssCi1idXQgRlRQIHRl eHQtbW9kZSBHRVRzIGFsd2F5cyBoYW5nIG9uIHRoZSAxMHRoIDhLIG5ldHdvcmsgcmVhZC4gIENv dWxkbid0Ci1nZXQgYSBkZWJ1ZyBsb2cgdGhpcyB0aW1lLiAgY2tjbWFpLmMsIGNrdmZpby5jLCBj a3ZybXMuaCwgY2t2a2VyLmNvbS4KLTggQXByIDIwMTAuCi0KLUNoYW5naW5nIFZOQU1MIGZyb20g NEsgdG8gMTZLIGJyb2tlIHRoZSBidWlsZCBvbiBIUC1VWCA5LiAgUHV0IGl0IGJhY2sgdG8KLTRL LiAgOSBBcHIgMjAxMC4KLQotSm9obiBEdW5sYXAsIHJ1bm5pbmcgZGF5cy1sb25nIHN0cmVzcyB0 ZXN0cyBiZXR3ZWVuIEUtS2VybWl0IGFuZCBDLUtlcm1pdCwKLWZvdW5kIGEgYnVnIGluIHRoZSBw YWNrZXQtcmVhZGluZyBhbmQgLWRlY29kaW5nIGNvZGU6IElmIGEgTkFLIHBhY2tldAotYXJyaXZl cyB3aXRoIGl0cyBsZW5ndGggZmllbGQgY29ycnVwdGVkIHRvIGluZGljYXRlIGEgYmlnZ2VyIHNp emUsIGFuZCB0aGVyZQotYXJlIGVub3VnaCBieXRlcyBmb2xsb3dpbmcgaW4gdGhlIHBpcGVsaW5l LCB0dGlubCgpIHdpbGwgcmV0dXJuIGEgdG9vLWxvbmcKLXBhY2tldCAoaWYgdGhlcmUgYXJlIG5v dCBlbm91Z2ggYnl0ZXMgd2FpdGluZyB0byBiZSByZWFkLCB0aGVuIHR0aW5sKCkgd2lsbAotcHJv cGVybHkgdGltZSBvdXQpLiAgSW4gdGhlIGJhZCBjYXNlIHJwYWNrKCkgdHJ1c3RzIHRoZSBwYWNr ZXQgbGVuZ3RoLCB1c2VzCi1pdCBhcyB0aGUgYmFzaXMgZm9yIGNvbXB1dGF0aW9uIG9mIHRoZSBi bG9jay1jaGVjayBsZW5ndGgsIHdoaWNoIGlzIHRoZW4KLXVzZWQgdG8gYWNjZXNzIG1lbW9yeSB0 aGF0IG1pZ2h0IG5vdCBiZSB0aGVyZSwgY2F1c2luZyAoYXQgbGVhc3Qgb24gSm9obidzCi1MaW51 eCBzeXN0ZW0pIGEgc2VnbWVudGF0aW9uIGZhdWx0LiAgSm9obiBhZGRlZCB0aGUgbm9ybWFsIGNs YXVzZSB0byBjaGVjawotdGhlIHJlc3VsdCBvZiB0aGUgYmxvY2stY2hlY2sgY2FsY3VsYXRpb24s IGFuZCBJIGNoYW5nZWQgdHRpbmwoKSB0byBhbHdheXMKLWJyZWFrIG9uIHRoZSBlb2wgY2hhcmFj dGVyIChub3JtYWxseSBjYXJyaWFnZSByZXR1cm4pLCBzaW5jZSB0aGlzIGNhbiBuZXZlcgotYXBw ZWFyIGluIGEgcGFja2V0LCBldmVuIGlmIHdlICJzZXQgY29udHJvbCB1bnByZWZpeCBhbGwiLiAg QWxzbyBhZGRlZCBhCi1jaGVjayB0byB0dGlubCgpIHRvIHByb3RlY3QgYWdhaW5zdCBsZW5ndGgg ZmllbGRzIGNvcnJ1cHRlZCBpbnRvIGlsbGVnYWwKLXZhbHVlcy4gIGNrY2ZuMi5jLCBja3V0aW8u YywgMTMgQXByIDIwMTAuCi0KLUZyb20gTGV3aXMgTWNDYXJ0aHk6Ci0gIEJhc2VkIG9uIGNvZGUg aW5zcGVjdGlvbiwgQy1LZXJtaXQgYXBwZWFycyB0byBoYXZlIGFuIFNTTC1yZWxhdGVkIHNlY3Vy aXR5Ci0gIHZ1bG5lcmFiaWxpdHkgYW5hbG9nb3VzIHRvIHRoYXQgaWRlbnRpZmllZCBhcyBDVkUt MjAwOS0zNzY3IChzZWUgZS5nLgotICBodHRwOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5h bWUuY2dpP25hbWU9Q1ZFLTIwMDktMzc2NykuCi0KLSAgSSdtIGF0dGFjaGluZyBhIHBhdGNoIGZv ciB0aGlzIGlzc3VlIHJlbGF0aXZlIHRvIHRoZSByZXZpc2lvbiBvZiBja19zc2wuYwotICBvYnRh aW5lZCBmcm9tIGEgY29weSBvZiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZnRwL3Rl c3QvdGFyL3guemlwCi0gIGRvd25sb2FkZWQgb24gMjAxMC8wNy8zMCwgd2hpY2ggSSBiZWxpZXZl IGlzIHRoZSBsYXRlc3QuCi0KLSAgV2hlbiB0aGlzIGZsYXcgd2FzIGZpcnN0IHdpZGVseSBwdWJs aWNpemVkIGF0IGxhc3QgeWVhcidzIEJsYWNrIEhhdAotICBjb25mZXJlbmNlLCBpdCB3YXMgY2xh aW1lZCB0aGF0IHNvbWUgcHVibGljIGNlcnRpZmljYXRlIGF1dGhvcml0aWVzIGhhZAotICBpbmRl ZWQgaXNzdWVkIGNlcnRpZmljYXRlcyB0aGF0IGNvdWxkIGJlIHVzZWQgdG8gZXhwbG9pdCB0aGlz IGNsYXNzIG9mCi0gIHZ1bG5lcmFiaWxpdHkuIEFzIGZhciBhcyBJIGtub3cgdGhleSBoYXZlIG5v dCByZXZlYWxlZCBzcGVjaWZpY2FsbHkgd2hpY2gKLSAgcHVibGljIENBKHMpIGhhZCBiZWVuIGZv dW5kIGlzc3Vpbmcgc3VjaCBjZXJ0aWZpY2F0ZXMuCi0gIFNvbWUgcmVmZXJlbmNlczogaHR0cDov L3d3dy5tc2VjbGFiLmNvbS8/cD0xODAKLSAgaHR0cDovL3d3dy50aGVyZWdpc3Rlci5jby51ay8y MDA5LzA3LzMwL3VuaXZlcnNhbF9zc2xfY2VydGlmaWNhdGUvCi0KLVBhdGNoZXMgYWRkZWQgdG8g Y2tfc3NsLmMsIDQgQXVnIDIwMTAuCi0KLVBldGVyIEVpY2hob3JuIHJlcG9ydGVkIHRoYXQgIlJF TkFNRSAuLi94IC4iIGRpZG4ndCB3b3JrLiAgVGhpcyBpcyBhIHNpZGUKLWVmZmVjdCBvZiB0aGUg Y2hhbmdlcyBvZiAyMDA2IHRvIHRoZSBSRU5BTUUgY29tbWFuZCwgdGhlcmUgd2FzIGEgbGl0dGxl Ci1jb25mdXNpb24gaW4gdGhlIHJlbmFtZW9uZSgpIHJvdXRpbmU7IGZpeGVkIGluIGNrdXVzNi5j LCA0IEF1ZyAyMDEwLgotCi1JZiBvbmx5IG9uZSBmaWxlIGlzIEZPUEVOJ2QsIEZDTE9TRSBnaXZl biB3aXRoIG5vIGFyZ3VtZW50cyB3b3VsZCBjbG9zZSBpdC4KLVR1cm5zIG91dCB0byBiZSBhIGJh ZCBpZGVhLiBFeGFtcGxlOiBwcm9ncmFtIHdpdGggYW4gaW5wdXQgYW5kIG91dHB1dCBmaWxlLAot dHJ5IHRvIGNsb3NlIHRoZSBvdXRwdXQgZmlsZSBiZWZvcmUgaXQgaXMgb3BlbmVkIGJ5IGp1c3Qg dHlwaW5nIEZDTE9TRTsgdGhpcwotY2FuIG1lc3MgdXAgdGhlIGlucHV0IGZpbGUuICAgRm9yIHNh ZmV0eSBGQ0xPU0UgaGFzIHRvIHJlcXVpcmUgYSBjaGFubmVsCi1udW1iZXIgb3IgQUxMLiAgY2t1 dXM3LmMsIDQgQXVnIDIwMTAuCi0KLUFkZGVkIFxmc3RyY21wKHMxLHMyLGNhc2Usc3RhcnQsbGVu Z3RoKSwgd2hpY2ggaGFzIHRoZSBhZHZhbnRhZ2Ugb3ZlciBJRgotRVFVLExHVCxMTFQgdGhhdCBj YXNlIHNlbnNpdGl2aXR5IGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBmdW5jdGlvbiBhcmcsIGFuZAot YWxzbyBzdWJzdHJpbmdzIGNhbiBiZSBzcGVjaWZpZWQuICBja3V1c3IuaCwgY2t1dXNbMjRdLmMs IDUgQXVnIDIwMTAuCi0KLVRoZSBDU1YgZmVhdHVyZSBvZiBBbHBoYS4wNiBoYWQgYSBzdWJ0bGUg ZmxhdywgbmFtZWx5IHRoYXQgaWYgdGhlIGxhc3QgaXRlbQotaW4gYSBjb21tYSBzZXBhcmF0ZWQg bGlzdCB3YXMgZW5jbG9zZWQgd2l0aGluIGRvdWJsZXF1b3RlcyB3aXRoIGEgdHJhaWxpbmcKLXNw YWNlIGFmdGVyIHRoZSBjbG9zaW5nIGRvdWJsZXF1b3RlLCBhIHNwdXJpb3VzIGVtcHR5IGZpbmFs IGVsZW1lbnQgd291bGQgYmUKLWNyZWF0ZWQgaW4gdGhlIHJlc3VsdCBhcnJheS4gIEZpeGVkIGlu IGNrc3BsaXQoKSwgY2tjbGliLmMsIDUgQXVnIDIwMTAuCi0KLS0tLUFscGhhLjA3LS0tCi0KLVRo ZSBDU1YgZmVhdHVyZSBvZiBcZnNwbGl0KCkgc3BsaXRzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qg aW50byBhbiBhcnJheS4KLVRvIHR1cm4gdGhlIGFycmF5IGJhY2sgaW50byBhIGNvbW1hIHNlcGFy YXRlZCBsaXN0LCBcZmpvaW4oJmEsXDQ0LDEpIGFsbW9zdAotd29ya3MsIGV4Y2VwdCBmb3IgZWxl bWVudHMgY29udGFpbiBsaXRlcmFsIGRvdWJsZXF1b3Rlcywgc3VjaCBhczoKLQotICBNb2hhbW1h ZCAiVGhlIEdyZWF0ZXN0IiBBbGkKLQotVGhpcyBjYWxscyBmb3IgbWFraW5nIGEgc3ltYm9saWMg Q1NWIGFyZ3VtZW50IGZvciBcZmpvaW4oKSBsaWtlIHRoZSBvbmUgdGhhdAotd2FzIG1hZGUgZm9y IFxmc3BsaXQoKTogXGZqb2luKCZhLENTVikuICBBbHNvIFxmam9pbigmYSxUU1YpIGZvcgotVGFi LXNlcGFyYXRlZCBsaXN0LiAgVGh1cyBpZiBLZXJtaXQgcmVhZHMgYSByZWNvcmQgaW4gQ1NWIGZv cm1hdCwgc3BsaXRzIGl0Ci1pbnRvIGFuIGFycmF5LCBhbmQgdGhlbiBqb2lucyB0aGUgYXJyYXkg YmFjayBpbnRvIGEgQ1NWIHJlY29yZCwgdGhlIHJlc3VsdAotd2lsbCBiZSBlcXVpdmFsZW50IHRv IHRoZSBvcmlnaW5hbCwgYWNjb3JkaW5nIHRvIHRoZSBDU1YgZGVmaW5pdGlvbi4gIEl0Ci1taWdo dCBub3QgYmUgaWRlbnRpY2FsLCBiZWNhdXNlIGlmIHRoZSByZXN1bHQgaGFkIGV4dHJhbmVvdXMg c3BhY2VzIGJlZm9yZQotb3IgYWZ0ZXIgdGhlIHNlcGFyYXRpbmcgY29tbWFzLCB0aGVzZSBhcmUg ZGlzY2FyZGVkLCBidXQgdGhhdCBkb2VzIG5vdAotYWZmZWN0IHRoZSBlbGVtZW50cyB0aGVtc2Vs dmVzLiAgRnVydGhlcm1vcmUgaXQgaXMgbm93IHBvc3NpYmxlIHRvIGNvbnZlcnQKLWEgY29tbWEt c2VwYXJhdGVkIGxpc3QgaW50byBhIHRhYi1zZXBhcmF0ZWQgbGlzdCwgYW5kIHZpY2UgdmVyc2Eg KHdoaWNoIGlzCi1ub3QgYSBzaW1wbGUgbWF0dGVyIG9mIGNoYW5naW5nIGNvbW1hcyB0byB0YWJz IG9yIHZpY2UgdmVyc2EpLiAgY2t1dXM0LmMsCi0xMiBBdWcgMjAxMC4KLQotRnJvbSBKb29wIEJv b25lbiAyNiBKdWxpIDIwMTA6ICJBZGRlZCBIQVZFX0xPQ0tERVYgYXMgb3BlblN1U0UgPj0gMTEu MyB1c2VzCi1sb2NrZGV2IGJ1dCBub3QgYmF1ZGJveS4gIFRoZXkgdXNlIHR0eWxvY2sgZGlyZWN0 bHkuICBUaGUgcHJvZ3JhbSBjb2RlIGhhcwotYmVlbiBhZGRlZCBzbyB0aGUgdGhlIHByb2dyYW0g d29ya3Mgd2l0aG91dCBhIHByb2JsZW0uIiAgbWFrZWZpbGUsIGNrY2RlYi5oLAotY2t1dGlvLmMs IGNrdXVzNS5jLCAyMyBBdWcgMjAxMC4KLQotLS0tQWxwaGEuMDgtLS0KLQotRnJvbSBHYXJ5IE1p bGxzIGF0IHRoZSBVIG9mIE1hbml0b2JhOiBjb252ZXJ0IFNvbGFyaXMgdmVyc2lvbiBmcm9tIEJT RCBwdHlzCi10byBzdHJlYW1zIHB0eXMgYmVjYXVzZSB0aGVyZSBhcmUgb25seSA0OCBCU0Qtc3R5 bGUgcHR5cyBhbmQgaGUgd2FzIHJ1bm5pbmcKLW91dC4gIE5vIGNvZGUgY2hhbmdlcyBuZWVkZWQs IHRoZSBvbmx5IGNoYW5nZSBuZWNlc3Nhcnkgd2FzIHRvIGFkZCB0aGUKLWZvbGxvd2luZyBmbGFn cyB0byB0aGUgbWFrZWZpbGUgdGFyZ2V0OgotCi0gIC1ESEFWRV9TVFJFQU1TIC1ESEFWRV9HUkFO VFBUIC1ESEFWRV9QVFNOQU1FCi0gIC1EUFVTSF9QVEVNIC1EUFVTSF9MRFRFUk0gLURQVVNIX1RU Q09NUEFUCi0KLW1ha2VmaWxlLCBja2NtYWkuYywgMjEgU2VwIDIwMTAuCi0KLVRlc3RpbmcgdGhp cyBpbiBTb2xhcmlzIDkgSSBzZWUgdGhhdCB0aGUgREVTIGxpYnJhcnkgZGlzYXBwZWFyZWQuICBB ZGRlZAotY29kZSB0byB0aGUgc29sYXJpczkgdGFyZ2V0cyAoYWxzbyB1c2VkIGJ5IFNvbGFyaXMg MTAgYW5kIDExKSB0byBjaGVjayBmb3IKLXRoaXMuICBtYWtlZmlsZSwgMjEgU2VwIDIwMTAuCi0K LVRoZSBTb2xhcmlzIHRhcmdldCBjaGVja2VkIHRoZSBPcGVuU1NMIHZlcnNpb24gYXV0b21hdGlj YWxseSB0byBzZXQgdGhlCi1yaWdodCBmbGFnLCB0aGUgTGludXggdGFyZ2V0IGRpZG4ndC4gIFB1 dCB0aGUgT3BlblNTTC12ZXJzaW9uIHRlc3RpbmcgY29kZQotaW4gdGhlIExpbnV4IHRhcmdldCB0 b28uICBtYWtlZmlsZSwgMjEgU2VwIDIwMTAuCi0KLUEgY291cGxlIG1pbm9yIGNoYW5nZXMgdG8g dGhlIHRydTY0LTUxYiBtYWtlZmlsZSB0YXJnZXRzIGZyb20gU3RldmVuIFNjaHdlZGEKLWJ1dCB0 aGVyZSBzdGlsbCBhcmUgc29tZSBwcm9ibGVtcyB3aXRoIHRoZSBUcnU2NCBVbml4IGJ1aWxkcy4K LW1ha2VmaWxlLCAyMSBTZXAgMjAxMC4KLQotLS0tQWxwaGEuMDktLS0KLQotXGZjb250ZW50cyhc JmFbM10pIGdvdCBhbiBlcnJvciBpZiB0aGUgYXJyYXkgd2FzIGRlY2xhcmVkIGJ1dCBpdHMgZGlt ZW5zaW9uCi13YXMgbGVzcyB0aGFuIDMsIHdoaWNoIGlzIGJhZCB3aGVuIGRlYWxpbmcgd2l0aCAo c2F5KSBhbiBhcnJheSBjcmVhdGVkCi1keW5hbWljYWxseSBieSBcZnNwbGl0KCksIHdoaWNoIG1p Z2h0IG9yIG1pZ2h0IG5vdCBoYXZlIGEgdGhpcmQgZWxlbWVudC4KLUluIGNhc2UgaXQgZG9lc24n dCAtLSBpLmUuIGluIGNhc2Ugd2UgYXJlIHJlZmVycmluZyB0byBhbiBvdXQgb2YgcmFuZ2UKLWVs ZW1lbnQgb2YgYW55IGFycmF5IHRoYXQgaXMgZGVjbGFyZWQgLS0gd2Ugc2hvdWxkIGp1c3QgcmV0 dXJuIGEgbnVsbAotc3RyaW5nLCBhcyB3ZSBkbyB3aXRoIG90aGVyIHR5cGVzIG9mIHZhcmlhYmxl cyB0aGF0IGFyZSBub3QgZGVmaW5lZC4KLUZvciB0aGF0IG1hdHRlciwgZGl0dG8gZXZlbiBpZiB0 aGUgYXJyYXkgaXMgbm90IGRlY2xhcmVkOyB3aGF0IHVzZWZ1bAotcHVycG9zZSBpcyBzZXJ2ZWQg YnkgdGhyb3dpbmcgYW4gZXJyb3IgaW4gdGhpcyBjYXNlPwotY2t1dXM0LmMsIDMwIERlYyAyMDEw LgotCi1ja3NwbGl0KCkgdHJlYXRzIFwgYXMgYSBxdW90aW5nIGNoYXJhY3Rlci4gIElmIHRoZSBz b3VyY2Ugc3RyaW5nIGNvbnRhaW5zCi1iYWNrc2xhc2hlcywgdGhleSBhcmUgc3dhbGxvd2VkIChv ciwgaWYgZG91YmxlZCwgb25lIGlzIGtlcHQpLiAgVGhhdCdzIG5vdAotZ29vZCBmb3IgcGFyc2lu ZyBleHRlcm5hbCBkYXRhLCBzdWNoIGFzIGxpbmVzIHJlYWQgZnJvbSBmaWxlcywgd2hlcmUgdGhl cmUKLWFyZSBubyBxdW90aW5nIHJ1bGVzLiAgVGhpcyBjYW1lIHVwIHdoZW4gcGFyc2luZyBDU1Yg ZmlsZXM7IGFzIGEgd29ya2Fyb3VuZCwKLUkgbWFkZSBcZnNwbGl0KCkgdHJlYXQgYmFja3NsYXNo IGFzIGFuIG9yZGluYXJ5IGNoYXJhY3RlciBmb3IgQ1NWIGFuZCBUU1YKLXNwbGl0dGluZyAoYSBi ZXR0ZXIgc29sdXRpb24gbWlnaHQgYmUgeWV0IGFub3RoZXIgYXJndW1lbnQgdGhhdCBzcGVjaWZp ZXMKLWEgcXVvdGUgY2hhcmFjdGVyKS4gIGNrY2xpYi5jLCAzMCBEZWMgMjAxMC4KLQotQmVnYW4g Y29udmVydGluZyBDLUtlcm1pdCB0byBPcGVuIFNvdXJjZSB3aXRoIHRoZSBTaW1wbGlmaWVkIDMt Q2xhdXNlIEJTRAotbGljZW5zZS4gIFVwZGF0ZWQgdGhlIHRleHQgZm9yIHRoZSBJTlRSTywgTElD RU5TRSwgTkVXUywgYW5kIFNVUFBPUlQKLWNvbW1hbmRzLiAgRml4ZWQgdGhpbmdzIHNvIHRoZSBj b3B5cmlnaHQgeWVhciB0byBiZSBkaXNwbGF5ZWQgaXMgZGVmaW5lZCBpbgotb25lIHBsYWNlIChj a19jcnllYXIgaW4gY2tjbWFpLmMpLCByYXRoZXIgdGhhbiBoYXJkd2lyZWQgaW50byB0ZXh0IHN0 cmluZ3MKLWFsbCBvdmVyIHRoZSBwbGFjZS4gIENPUFlJTkcuVFhULCBja2NtYWkuYywgY2t1dXNb MjU2XS5jLCAyIEp1biAyMDExLgotCi1XaGVuIEkgYWRkZWQgTUlNRSBzeW5vbnltcyBmb3IgS2Vy bWl0IGNoYXJhY3Rlci1zZXQgbmFtZXMsIEkgbGVmdCBhIGJvZ3VzCi1lbnRyeSBpbiB0aGUgdGFi bGVzICgid2luZG93cy0xMjUxIikgdGhhdCB3YXMgaW4gdGhlIHdyb25nIHBsYWNlCi1hbHBoYWJl dGljYWxseSwgdGh1cyBwcmV2ZW50aW5nIG1vc3QgcmVmZXJlbmNlcyB0byBmaWxlIGNoYXJhY3Rl ci1zZXQgbmFtZXMKLWZyb20gd29ya2luZyByaWdodC4gIFJlbW92ZWQgdGhlIGJvZ3VzIGVudHJ5 LiAgY2t1eGxhLmMsIDIgSnVuIDIwMTEuCi0KLU1vc3QgY29tYmluYXRpb25zIHdvcmsgT0ssIGJ1 dCBub3QgdHJhbnNsYXRpbmcgQ3lyaWxsaWMgdGV4dCBmcm9tIFVURi04Ci10byBMYXRpbi9DeXJp bGxpYywgYW5kIHByb2JhYmx5IHRoZSBzYW1lIHdvdWxkIGJlIHRydWUgZm9yIGFueSBjYXNlIG9m Ci1jb252ZXJ0aW5nIGZyb20gVVRGLTggb3IgVUNTLTIgdG8gYW55dGhpbmcgZWxzZS4gIFRoZSBw cm9ibGVtIHdhcyBpbgoteGduYnl0ZSgpLCB3aGljaCBjb252ZXJ0cyB0aGUgaW5wdXQgc3RyZWFt IGZyb20gdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgdG8KLVVDUzI7IGl0IG5lZWRlZCB0byBtYWtl IGEgc3BlY2lhbCBjYXNlIGZvciB3aGVuIHRoZSBpbnB1dCBmaWxlIHdhcyBhbHJlYWR5Ci1Vbmlj b2RlLiAgQmVsaWV2ZSBpdCBvciBub3QsIHRoaXMgcHJvYmxlbSBvY2N1cnJlZCBhdCBsZWFzdCBh cyBmYXIgYmFjayBhcwotOC4wLjIwMSAoOS41IHllYXJzIGFnbykgYW5kIG5vYm9keSBub3RpY2Vk LiAgU28gaWYgdGhlIGZpeCBpc24ndCBwZXJmZWN0Ci1wcm9iYWJseSBub2JvZHkgd2lsbCBub3Rp Y2UgdGhhdCBlaXRoZXIuICBja2NmbnMuYywgMyBKdW4gMjAxMS4KLQotVGhlIFNFVCBCTE9DSyBD SEVDSyBjb21tYW5kIGRpZCBub3QgcGFyc2UgYWxsIHRoZSBpdGVtcyBpbiBpdHMga2V5d29yZAot bGlzdC4gIEZpeGVkIGluIGNrdXVzMy5jLCAzIEp1biAyMDExLgotCi1Gb3IgRU0tQVBFWCBvY2Vh biBmbG9hdHMgcHJvamVjdCwgd2hlcmUgYnVveXMgaW4gc3Rvcm15IHdhdGVycyBoYXZlIHRvCi10 cmFuc21pdCBkYXRhIHRocm91Z2ggYW4gZWFydGggc2F0ZWxsaXRlIHVzaW5nIG5vbi1lcnJvci1j b3JyZWN0aW5nIG1vZGVtcywKLUpvaG4gRHVubGFwIHJhbiBleGhhdXN0aXZlIHN0cmVzcyB0ZXN0 cyBvZiBLZXJtaXQgcHJvdG9jb2wgdHJhbnNmZXJzIHRocm91Z2gKLWEgc2ltdWxhdGVkIGNvbm5l Y3Rpb24gdGhhdCBpbmplY3RlZCBlcnJvcnMgYW5kIGRlbGF5cyBhbmQgaWRlbnRpZmllZCBhCi13 ZWFrbmVzcyBpbiBLZXJtaXQgcHJvdG9jb2wgd2hlbiBpdCBpcyB1c2VkIHVuZGVyIGV4dHJlbWVs eSBiYWQgY29uZGl0aW9uczoKLUlmIGEgZGF0YSBieXRlIG9mIHRoZSBTIHBhY2tldCAob3IgaXRz IEFjaykgaXMgY29ycnVwdGVkIGFuZCB0aGUgMS1ieXRlCi1jaGVja3N1bSBpcyBhbHNvIGNvcnJ1 cHRlZCBpbiBzdWNoIGEgd2F5IHRoYXQgdGhhdCB0aGUgY2hlY2tzdW0gbWF0Y2hlcyB0aGUKLWNv cnJ1cHRlZCBkYXRhLCB0aGUgdHdvIEtlcm1pdCBwcm9ncmFtcyB3aWxsIGRpc2FncmVlIGFzIHRv IHRoZSBuZWdvdGlhdGVkCi1wYXJhbWV0ZXJzLiAgRm9yIGV4YW1wbGUsIGlmIGZpbGUgU2VuZGVy J3MgUlBUIGZpZWxkIGlzIGNoYW5nZWQgZnJvbSAnficgdG8KLSdeJywgdGhlIHJlY2VpdmVyIHdp bGwgZGVjb2RlIHRoZSBwYWNrZXQgaW5jb3JyZWN0bHkuICBEaXR0byBmb3IgbW9zdCBvZiB0aGUK LW90aGVyIHBhcmFtZXRlcnMuICBUaGUgcmVzdWx0IGlzIHRoYXQgYSBjb3JydXB0ZWQgZmlsZSBp cyByZWNlaXZlZCBidXQKLXJlcG9ydGVkIGNvcnJlY3QuICBKb2huIHN1Z2dlc3RlZCBhIG5ldyBt b2RlIG9mIG9wZXJhdGlvbiBpbiB3aGljaCB0aGUgVHlwZQotMyBibG9jayBjaGVjayBpcyB1c2Vk IGZvciBhbGwgcGFja2V0cy4gIFN1Y2ggYSBtb2RlIGNhbiBub3QgYmUgbmVnb3RpYXRlZAotYmVj YXVzZSB0aGUgbmVnb3RpYXRpb24gcGFja2V0IGl0c2VsZiBpcyBhc3N1bWVkIGJ5IGFsbCBLZXJt aXQgcHJvZ3JhbXMgdG8KLWhhdmUgYSAxLWJ5dGUgY2hlY2tzdW0uICBBZGRlZCBTRVQgQkxPQ0st Q0hFQ0sgNSB0byB0aGUgcGFyc2VyICh3aXRoCi1pbnZpc2libGUgc3lub255bSBGT1JDRS0zIi4g IGNrdXVzMy5jLCAzIEp1biAyMDExLgotCi1BZGRlZCBzdXBwb3J0aW5nIGNvZGUgZm9yIFNFVCBC TE9DSyA1OiBja2NmblsyM10uYywgY2tjcHJvLncsIGNrY21haS5jLAotY2t1dXMzLmMsIDMgSnVu IDIwMTEuCi0KLUFkZGVkIGNvZGUgdG8gc2tpcCB0aGUgaGV1cmlzdGljIHRoYXQgUyBhbmQgSSBw YWNrZXRzIGFsd2F5cyBoYXZlIGJsb2NrCi1jaGVjayB0eXBlIDEuICBGaWxlIHRyYW5zZmVyIE9L IGJldHdlZW4gdHdvIEMtS2VybWl0cyB3aXRoIFNFVCBCTE9DSyA1LgotcnBhY2soKTogY2tjZm4y LmMsIDUgSnVuIDIwMTEuCi0KLU1hZGUgdGhlIGZpbGUgcmVjZWl2ZXIgcHV0ICI1IiBpbiB0aGUg YmxvY2stY2hlY2stdHlwZSBpbiBpdHMgQUNLIHRvIHRoZQotUy1QYWNrZXQuICBzcGFyKCk6IGNr Y2Zucy5jLCA1IEp1biAyMDExLgotCi1Ob3cgdGhlIHF1ZXN0aW9uIGlzOiBDYW4gd2UgbWFrZSB0 aGUgZmlsZSByZWNlaXZlciBhdXRvbWF0aWNhbGx5IGFuZCBzYWZlbHkKLXJlY29nbml6ZSBhIHRo cmVlLWJ5dGUgYmxvY2sgY2hlY2sgb24gYW4gaW5jb21pbmcgUyBvciBJIHBhY2tldD8gIEl0J3MK LXRyaWNreSBiZWNhdXNlIHRoZSBibG9jayBjaGVjayBmaWVsZCBpcyBub3Qgc2VsZi1pZGVudGlm aWVkLCBpdCdzIGp1c3QgdGhlCi1sYXN0ICJuIiBjaGFyYWN0ZXJzIG9mIHN0cmluZyBpbmRpY2F0 ZWQgYnkgdGhlIGxlbmd0aCBmaWVsZCwgc28gY29ycmVjdAotZGVjb2Rpbmcgb2YgdGhlIHBhY2tl dCBkZXBlbmRzIG9uIHN0YXRlZnVsIGtub3dsZWRnZSBvZiAibiIuICBIb3cgYWJvdXQgdGhpczoK LXJwYWNrKCkgYWxyZWFkeSBrbm93cyB3aGF0IHR5cGUgb2YgcGFja2V0IGl0IGlzLCBzbyBpZiBp dCdzIGFuIFMgb3IgSSBwYWNrZXQKLWFuZCB0aGUgOHRoIGJ5dGUgb2YgdGhlIGRhdGEgZmllbGQg aXMgIjUiIGFuZCBsYXN0IDMgYnl0ZXMsIHdoZW4gaW50ZXJwcmV0ZWQKLWFzIHRoZSBDUkMsIG1h dGNoIHRoZSBwYWNrZXQgY29udGVudHMsIHRoZW4gd2UgYWNjZXB0IHRoZSBwYWNrZXQgYW5kIHN3 aXRjaAotdG8gQkxPQ0sgNSBtb2RlLiAgCi0KLU9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgIjUi IHdhcyBwdXQgdGhlcmUgYnkgY29ycnVwdGlvbiwgdGhlIENSQyBzaG91bGQKLWNhdGNoIHRoZSBl cnJvci4gIEluIHRoYXQgY2FzZSB3ZSBOQUsgdGhlIHBhY2tldCBhbmQgcHJlc3VtYWJseSBnZXQg YQotZGlmZmVyZW50IHZlcnNpb24gYmFjay4gIFRoZXJlIHdvdWxkIGJlIG5vIHJlYXNvbiB0byB0 cnkgdG8gcmUtcmVhZCB0aGUgc2FtZQotcGFja2V0IHdpdGggYSBkaWZmZXJlbnQgYmxvY2sgY2hl Y2ssIGJlY2F1c2UgdGhlICI1IiBjb3VsZCBub3QgcG9zc2libHkgYmUKLXRoZXJlIGxlZ2l0aW1h dGVseSB1bmxlc3MgaXQgaGFkIGEgMy1ieXRlIENSQy4gIFRvIGJlIGNsZWFyLCB0aGlzIGlzCi1j aGVhdGluZy4gIFdlIHJlYWQgdGhlIHBhY2tldCBjb250ZW50cyBiZWZvcmUgd2Uga25vdyB0aGUg cGFja2V0IGlzIGNvcnJlY3QsCi10aGVuIHdlIGNoZWNrIHRoYXQgaXQgKmlzKiBjb3JyZWN0LiAg SSBtYWRlIHRoZSA0LWxpbmUgY2hhbmdlIHRvIHJwYWNrKCkKLWFuZCBpdCB3b3JrcyBPSyBpbiB0 aGUgYWJzZW5jZSBvZiB0cmFuc21pc3Npb24gZXJyb3JzLiAgY2tjZm4yLmMsIDMgSnVuIDIwMTEu Ci0KLVNvIHRoZSB2YXJpb3VzIGNvbWJpbmF0aW9ucyBzaG91bGQgd29yayBhcyBkZXNpcmVkOgot Ci0gLiBTZW5kZXIgYW5kIHJlY2VpdmVyIGJvdGggc3VwcG9ydCBhbmQgYXJlIHRvbGQgdG8gU0VU IEJMT0NLIDUgKCJTQjUiKS4KLSAuIFNlbmRlciBTQjUsIGJ1dCByZWNlaXZlciBkb2Vzbid0IHN1 cHBvcnQgaXQgKGVycm9ycyBvdXQpLgotIC4gU2VuZGVyIFNCNSwgcmVjZWl2ZXIgc3VwcG9ydHMg aXQgYnV0IHdhc24ndCB0b2xkIChhdXRvLXJlY29nbml6ZXMgaXQpLgotIC4gUmVjZWl2ZXIgU0I1 IGJ1dCBzZW5kZXIgbm8gKGVycm9ycyBvdXQpLgotCi1Ob3RlIGluIHRoZSBsYXN0IGNhc2UsIHRo ZSByZWNlaXZlciBzaG91bGQgTk9UIGF1dG9tYXRpY2FsbHkgZmFsbCBiYWNrIHRvCi1zdGFuZGFy ZCBiZWhhdmlvciBiZWNhdXNlIGlmIHRoZSB1c2VyIHNhaWQgU0VUIEJMT0NLIDUgdGhhdCBtZWFu cyBldmVyeQotcGFja2V0IE1VU1QgYmUgcHJvdGVjdGVkIGJ5IENSQyB0byBwcmV2ZW50IHRoZSBJ L1MgcGFja2V0cyBmcm9tIGJlaW5nCi1jb3JydXB0ZWQuCi0KLUluc3RhbGxlZCBuZXcgSEVMUCBT RVQgQkxPQ0stQ0hFQ0sgdGV4dC4gIGNrdXVzMi5jLCA1IEp1biAyMDExLgotCi1BdXRvZG93bmxv YWQgZGlkbid0IHdvcmsgd2hlbiB0aGUgUyBvciBJIHBhY2tldCBoYWQgYSAzLWJ5dGUgYmxvY2sg Y2hlY2sKLWJlY2F1c2Uga3N0YXJ0KCkgY2hlY2tlZCBpdCBmb3IgYSAxLWJ5dGUgY2hlY2tzdW0u ICBGaXhlZCBpbiBrc3RhcnQoKSwKLWNrY2ZuMi5jLCA2IEp1biAyMDExLiAgSG93ZXZlciwgb2xk ZXIgS2VybWl0IHZlcnNpb25zIGFuZCBwcm9ncmFtcyB0aGF0Ci1jbGFpbSB0byBkbyAiYXV0b2Rv d25sb2FkIiB3aWxsIG5ldmVyIHJlY29nbml6ZSB0aGlzIHR5cGUgb2YgcGFja2V0LiAgTm8KLWJp ZyBkZWFsIHNpbmNlIGV2ZW4gaWYgdGhleSBkaWQsIHRoZSB0cmFuc2ZlciB3b3VsZCBmYWlsIGFu eXdheS4KLQotQWRkZWQgJ0ZPUkNFIDMnIHRvIEUtS2VybWl0LCBjYWxsZWQgaXQgRUsgMS43LiAg VGhlIG9wdGlvbiBpcyAiLWIgNSIuICBXb3JrcwotT0sgZm9yIHNlbmRpbmcgYW5kIHJlY2Vpdmlu ZywgYm90aCB3aXRoIGFuZCB3aXRob3V0IHRoZSBuZXcgb3B0aW9uLiAgQWxzbwotd29ya3Mgd2l0 aCAiLWIgNSIgaWYgeW91IHNlbmQgYW4gUyBwYWNrZXQgdG8gaXQgd2l0aCAnNScgaW4gdGhlIEJD VCBmaWVsZC4KLUNoYW5nZXMgd2VyZSBtaW5pbWFsLCBJIGhhdmUgdGhlbSBhbGwgaW4gZWsxNy5k aWZmLgotCi1JIGNvdWxkIHByb2JhYmx5IGFsc28gbWFrZSBhIG5ldyBHLUtlcm1pdCBpbiBhYm91 dCAxMCBtaW51dGVzLCBidXQgd2hvIGNhcmVzCi1hYm91dCBHLUtlcm1pdC4uLiAgV2UgYWxyZWFk eSBoYXZlIHR3byB1c2VmdWwgS2VybWl0IHByb2dyYW1zIHRoYXQKLWludGVyb3BlcmF0ZSB3aXRo IHRoZSBuZXcgcHJvdG9jb2wuICA2IEp1biAyMDExLgotCi1SZXBsYWNlZCB0aGUgdmVyeSBpbmFk ZXF1YXRlIGhlbHAgdGV4dHMgZm9yIGZ1bmN0aW9ucyBcZndvcmQoKSBhbmQKLVxmc3BsaXQoKSB3 aXRoIG5ldyBvbmVzLiAgY2t1dXMyLmMsIDYgSnVuIDIwMTEuCi0KLVRoZXJlIHdlcmUgYSBjb3Vw bGUgcmVwb3J0cyBvZiBmaWxlIGNvcnJ1cHRpb24gdGhhdCBJIHdhcyBzYXZpbmcgZm9yIGxhdGVy LgotTm93IHRoYXQgbm93IGlzIGxhdGVyIEkgZHVnIHVwIHRoZSBtZXNzYWdlcywgZmlsZXMsIGFu ZCBsb2dzIGFuZCBpdCB0dXJucwotb3V0IHRoYXQgbm9ib2R5IGhhZCByZXBvcnRlZCBhIHJlcHJv ZHVjaWJsZSBjYXNlIG9mIEtlcm1pdCBjb3JydXB0aW5nIGEKLWZpbGUuICBUaGVyZSBoYXZlIGJl ZW4gbm9uLXJlcHJvZHVjaWJsZSBjYXNlcyB0aG91Z2gsIGFsbW9zdCBjZXJ0YWlubHkgZHVlCi10 byBjb3JydXB0aW9uIG9mIHRoZSBTIG9yIEkgcGFja2V0IG9yIGl0cyBBQ0ssIHdoaWNoIGlzIHdo eSB3ZSBub3cgaGF2ZSBTRVQKLUJMT0NLIDUuICBFdmVuIHdpdGggQkxPQ0sgQ0hFQ0sgNSwgdGhl cmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIHNhbWUgdGhpbmcKLXdvbid0IGhhcHBlbiwgaXQg aXMganVzdCBmYXIgbGVzcyBsaWtlbHkuICBFdmVuIGlmIHdlIGFkZGVkIGEgMzItYml0IENSQyBv cgotZXZlbiA2NC1iaXQgb25lLCB0aGVyZSB3b3VsZCBzdGlsbCBiZSBhIHNtYWxsIGNoYW5jZSBp dCBjb3VsZCBoYXBwZW4uCi0KLTcgSnVuIDIwMTE6Ci0KLUNvcnJlY3RlZCB2YXJpb3VzICNpZmRl ZnMgKG9yIGxhY2sgb2YgdGhlbSkgd2hlbiBidWlsZGluZyBDLUtlcm1pdCB3aXRoCi1kaWZmZXJl bnQgY29tYmluYXRpb25zIG9mIGZlYXR1cmUtc2VsZWN0aW9uIG9wdGlvbnMgc3VjaCBhcyBOT0NT RVRTLCBOT0lDUCwKLU5PTE9DQUwsIE5PU1BMLCBOT1VOSUNPREUsIGV0Yy4gIGNrY2Zucy5jIGNr Y21haS5jIGNrY3hsYS5oIGNrdXVzMi5jCi1ja3V1czQuYyBja3V1czUuYyBja3V1czYuYyBja3V1 c3IuYywgNyBKdW4gMjAxMS4gIEFmdGVyIHJ1bm5pbmcgdGhlIHNjcmlwdAotdGhhdCBkb2VzIGFs bCB0aGVzZSBidWlsZHMgKDg0IG9mIHRoZW0pIEkgcmFuIGl0IGFnYWluIHRvIG1ha2Ugc3VyZSB0 aGF0Ci1ub25lIG9mIHRoZSBjaGFuZ2VzIGJyb2tlIGJ1aWxkcyB0aGF0IHN1Y2NlZWRlZCBiZWZv cmUgdGhlIGNoYW5nZXMgd2VyZSBtYWRlLgotCi1CdWlsdCBPSyBvbiBTb2xhcmlzOSAoIm1ha2Ug c29sYXJpczkiKQotRGl0dG8gd2l0aCBLcmI1IGFuZCBPcGVuU1NMIDAuOS44cSAgKCJtYWtlIHNv bGFyaXM5ZytvcGVuc3NsK3NoYWRvdytwYW0remxpYiIpCi0KLUJ1aWx0IE9LIG9uIE1hYyBPUyBY IDEwLjQuMTEgKCJtYWtlIG1hY29zeCIpLgotQWxzbyAibWFrZSBtYWNvc3gra3JiNStvcGVuc3Ns LgotCi1CdWlsdCBPSyBvbiBMaW51eCBSSEVMNCAoIm1ha2UgbGludXgiKS4KLUJ1aWx0IE9LIG9u IExpbnV4IFJIRUw0IHdpdGggT3BlblNTTCAwLjkuN2EgKCJtYWtlIGxpbnV4K3NzbCIpLgotQnVp bHQgT0sgb24gTGludXggUkhFTDUgKCJtYWtlIGxpbnV4IikuCi0KLSJtYWtlIGxpbnV4K3NzbCIg ZmFpbHMgb24gUkhFTDUgYmVjYXVzZSBvZiBERVMsIGV2ZW4gdGhvdWdoIHRoZSB0YXJnZXQKLXRl c3RzIGZvciB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiB0aGUgREVTIGxpYnJhcmllcy4gIElu IHRoaXMgY2FzZSB0aGUKLWxpYnJhcmllcyBhcmUgdGhlcmUgYnV0IHRoZXkgbGFjayB0aGUgZnVu Y3Rpb25zIGRlc19lY2IzX2VuY3J5cHQsCi1kZXNfcmFuZG9tX3NlZWQsIGFuZCBkZXNfc2V0X29k ZF9wYXJpdHkuICBUaGUgYnVpbGQgc3VjY2VlZHMgYXM6Ci0KLSAgbWFrZSBsaW51eCtzc2wgS0ZM QUdTPS1VQ0tfU1NMCi0KLVNpbmNlIERFUyBpcyBub3cgY29uc2lkZXJlZCBoYXJtZnVsLCBKZWZm IEFsdG1hbiBzdWdnZXN0cyB0aGF0IGFsbCBPcGVuU1NMCi1idWlsZHMsIGV2ZW4gZm9yIG9sZCB2 ZXJzaW9ucywgc2hvdWxkIG9taXQgaXQgKCJJZiB5b3UgYXJlIGJ1aWxkaW5nIHdpdGgKLW9wZW5z c2wgYW5kIG5vIGtlcmJlcm9zIG9yIHNycCwganVzdCBkaXNhYmxlIERFUy4gIERpc2FibGluZyBE RVMgd2lsbCBpbXBhY3QKLXRlbG5ldCBhbmQgcmxvZ2luIGJ1dCBpdCB3b24ndCBtYXR0ZXIgaWYg eW91IGhhdmUgbm8gYWJpbGl0eSB0byBuZWdvdGlhdGUgYQotc2Vzc2lvbiBrZXkiKS4KLQotRnJv bSBJYW4gQmVja3dpdGgsIHBhdGNoZXMgZm9yIERlYmlhbiBMaW51eDoKLSAuIENoYW5nZSBhbGwg Jy0nIHRvICdcKGh5JyBpbiBtYW4gcGFnZSAobmV3IHBlZGFudHJ5KTogY2t1a2VyLm5yLgotIC4g TWFrZSBJS1NEIGF1dGhlbnRpY2F0aW9uICh1c2luZyBQQU0pIGFzayBmb3IgYSBwYXNzd29yZCB3 aGVuIGFuIGludmFsaWQKLSAgIHVzZXJuYW1lIGhhcyBiZWVuIGdpdmVuLCB0byBhdm9pZCBkaXNj bG9zaW5nIHdoaWNoIGFjY291bnQgbmFtZXMgYXJlIHZhbGlkOgotICAgY2t1ZmlvLmMsIGNrdXVz Ny5jLgotIC4gRml4IHNwZWxsaW5nIGVycm9yczogY2tjZnRwLmMsIGNrdXVzMi5jLCBja3VrZXIu bnIsIGNrY3Byby53LCBja3V1c3IuaC4KLSAuIFBhdGNoIG1ha2VmaWxlIHRvIHN1cHBvcnQgaW5z dGFsbCB0byBhIHN0YWdpbmcgYXJlYSB3aXRoIERFU1RESVIuCi0gLiBTb21lIG90aGVyIHBhdGNo ZXMgKG1haW5seSBmb3IgdHlwb3MpIHdlcmUgZm9yIHBsYWluLXRleHQgZG9jdW1lbnRhdGlvbgot ICAgZmlsZXMgdGhhdCB3ZXJlIGdlbmVyYXRlZCBmcm9tIFdlYiBwYWdlczsgSSB1cGRhdGVkIHRo ZSB3ZWIgcGFnZXMuCi0KLUEgYmlnIGNvcnBvcmF0ZSBDLUtlcm1pdCB1c2VyIGhhcyBhbiBhcHBs aWNhdGlvbiB3aGVyZSBhIGxvY2FsIEMtS2VybWl0Ci1tYWtlcyBhIGNvbm5lY3Rpb24gdG8gYSBy ZW1vdGUgb25lLCB1cGxvYWRzIHNvbWUgZmlsZXMsIGFuZCB0aGVuIGlmIHRoZQotc2VydmVyIGhh cyBhbnkgbmV3IHBhdGNoIGZpbGVzIGZvciB0aGUgbG9jYWwsIGl0IHNlbmRzIHRoZSBwYXRjaGVz IGFuZAotZG9lcyBhIFJFTU9URSBIT1NUIGNvbW1hbmQgdG8gcnVuIHRoZSBwYXRjaCBwcm9ncmFt LiAgVGhpcyBzdG9wcGVkIHdvcmtpbmcKLWluIEMtS2VybWl0IDYuMCBvciA3LjAgd2hlbiBJIHB1 dCBhIGNoZWNrIHRvIHByZXZlbnQgaXQsIGJlY2F1c2UgIml0IG1ha2VzCi1ubyBzZW5zZSB0byBz ZW5kIFJFTU9URSBjb21tYW5kcyB0byB0aGUgbG9jYWwgZW5kLCBiZWNhdXNlIHRoZSByZXN1bHRz IGFyZQotc2VudCBiYWNrIHRvIHRoZSByZW1vdGUgdG8gYmUgZGlzcGxheWVkIG9uIGl0cyBzY3Jl ZW4gYnV0IGl0IGhhcyBubyBzY3JlZW4iLgotVGhhdCBtYXkgYmUgdHJ1ZSwgYnV0IGlmIHRoZSB1 c2VyIG5lZWRzIHRvIGNvbnRyb2wgdGhlIGxvY2FsIGZyb20gdGhlCi1yZW1vdGUsIHRoZXkgc2hv dWxkIGJlIGFibGUgdG8uICBJIHJlbW92ZWQgdGhlIGNoZWNrcy4gIFRoaXMgZG9lc24ndCBzb2x2 ZQotdGhlIHByb2JsZW0gb2Ygd2hlcmUgdGhlIG91dHB1dCBnb2VzOyBpZGVhbGx5IGl0IHdvdWxk IGdvIHRvIHRoZSBsb2NhbAotc2NyZWVuIGJ1dCBJIGRvbid0IHNlZSBhbnkgZWxlZ2FudCBhbmQg c2ltcGxlIHdheSB0byBtYWtlIHRoYXQgY2hhbmdlLgotSG93ZXZlciB0aGUgb3V0cHV0IHJlZGly ZWN0b3JzIGNhbiBzdGlsbCBiZSB1c2VkIHdpdGggdGhlIFJFTU9URSBjb21tYW5kCi1zbyB0aGUg cmVzdWx0cyBjYW4gYmUgY2FwdHVyZWQgdG8gYSByZW1vdGUgZmlsZSwgd2hpY2ggY291bGQgdGhl biBiZSBzZW50LgotY2t1dXM3LmMsIDcgSnVuIDIwMTEuCi0KLUNoYW5nZWQgU0VUIFZBUklBQkxF LUVWQUxVQVRJT04gdG8gU0VUIENPTU1BTkQgVkFSSUFCTEUtRVZBTFVBVElPTiwgYnV0IGxlZnQK LXRoZSBmb3JtZXIgdmVyc2lvbiBhdmFpbGFibGUuICBja3V1c3IuYywgOSBKdW4gMjAxMS4KLQot RG9jdW1lbnRlZCB0aGUgU0VUIENPTU1BTkQgVkFSSUFCTEUtRVZBTFVBVElPTiBjb21tYW5kLCB3 aGljaCBJIGFkZGVkIGluCi0yMDA4LiAgY2s5MC5odG1sLCA5IEp1biAyMDExLgotCi1SZW5hbWVk IGFsbCBvbGQgTWFjIE9TIFggbWFrZWZpbGUgdGFyZ2V0cyB0byBoYXZlIHRoZSBwcmVmaXggIm9s ZCIgdG8gYXZvaWQKLWNvbmZ1c2luZyB0aGVtIHdpdGggdGhlIGN1cnJlbnQgdGFyZ2V0cywgYW5k IG1hZGUgbWFjb3N4MTAgYSBzeW5vbnltIGZvcgotbWFjb3N4LCBzbyB0aG9zZSB3aG8gdXNlZCBw cmV2aW91cyBtYWtlZmlsZXMgd2lsbCBnZXQgYSBjdXJyZW50IHRhcmdldAotd2l0aG91dCBoYXZp bmcgdG8ga25vdyB0aGUgbmV3IG5hbWUuICBtYWtlZmlsZSwgOSBKdW4gMjAxMS4KLQotQWRkZWQg WE1FU1NBR0UsIHdoaWNoIGlzIHRvIE1FU1NBR0UgYXMgWEVDSE8gaXMgRUNITzogcHJpbnRzIHRo ZSB0ZXh0Ci13aXRob3V0IGEgbGluZSB0ZXJtaW5hdG9yLCBzbyBpdCBjYW4gYmUgY29udGludWVk IGJ5IHN1YnNlcXVlbnQgW1hdTUVTU0FHRQotY29tbWFuZHMuICBja3V1c3IuW2NoXSwgOSBKdW4g MjAxMS4KLQotQmFjayB0byAibWFrZSBsaW51eCtzc2wiIG9uIFJIRUw1Li4uICBJIHRvb2sgdGhl IGNvd2FyZCdzIHdheSBvdXQgYW5kIGFkZGVkCi1jb2RlIHRvIHRoZSBtYWtlZmlsZSB0YXJnZXQg dG8gY2hlY2sgd2hldGhlciB0aGUgYnVpbGQgd29ya2VkIChzb21lYm9keSBsZXQKLW1lIGtub3cg aWYgdGhlcmUgaXMgYSBiZXR0ZXIgd2F5IHRvIGNoZWNrKSwgYW5kIGlmIG5vdCB0byBnaXZlIGEg bWVzc2FnZQotc3VnZ2VzdGluZyB0aGV5ICJtYWtlIGNsZWFuIDsgbWFrZSBsaW51eCtzc2wgS0ZM QUdTPS1VQ0tfREVTIi4gIG1ha2VmaWxlLAotOSBKdW4gMjAxMS4KLQotTm90aWNlZCB0aGF0IFxm cmVjdXJzZSgpIHdvdWxkIGR1bXAgY29yZSBpZiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMuCi1G aXhlZCBpbiBja3V1czQuYywgOSBKdW4gMjAxMS4KLQotQWRkZWQgXHEoKSBhcyBhbiBhbHRlcm5h dGl2ZSB0byB0aGUgbW9yZSB2ZXJib3NlIFxmbGl0ZXJhbCgpIGZvciBxdW90aW5nCi1zdHJpbmdz IHRoYXQgY29udGFpbiBjaGFyYWN0ZXJzIChsaWtlIFwpIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJl IHNpZ25pZmljYW50Ci10byBLZXJtaXQuICBJdCdzIG1vcmUgZWZmaWNpZW50IGJlY2F1c2UgaXQg aXNuJ3QgYSBmdW5jdGlvbiBjYWxsLCBhbmQgJ3EnCi1pcyBhbiBpbnR1aXRpdmUgbGV0dGVyIHRv IG1lYW4gJ3F1b3RlJy4gIEl0IGFsc28gd29ya3MgYmV0dGVyIHRoYW4KLVxmbGl0ZXJhbCgpIGJl Y2F1c2UgZnVuY3Rpb25zIHRyZWF0IGNvbW1hcyBhbmQgYnJhY2VzIHNwZWNpYWxseS4gIGNrdXVz NC5jLAotMTAgSnVuIDIwMTEuCi0KLUJ1aWx0IE9LIG9uIFZNUyA4LjMgb24gQWxwaGEsIG5vIG5l dC4gIERFQyBDIGNhdWdodCBhIGNvdXBsZSBnbGl0Y2hlcyBpbiB0aGUKLW5ldyBjb2RlIHRoYXQg Z2NjIGRpZG4ndCBjYXRjaCwgd2hpY2ggSSBmaXhlZC4gIGNrdXVzWzI1XS5jLCAxMCBKdW4gMjAx MS4KLQotQnVpbHQgT0sgb24gVk1TIDguMyBvbiBBbHBoYSB3aXRoIE11bHRpbmV0IDUuMy4gIFRo ZSBTU0wgYnVpbGQgZmFpbGVkIGJ1dAotSSdtIG5vdCBnb2luZyB0byB3b3JyeSBhYm91dCBpdC4g IDEwIEp1biAyMDExLgotCi1CdWlsdCBPSyBvbiBOZXRCU0QgNS4xLiAgMTAgSnVuIDIwMTEuCi0K LVRyaWVkIHRvIHJlc3VycmVjdCBteSBvbGQgImJ1aWxkLWFsbCIgbWFjaGluZSwgYW4gSUJNIE5l dGZpbml0eSAzNTAwIGZyb20KLTE5OTcgd2l0aCAyMC1zb21lIG1vdW50YWJsZSBib290YWJsZSBo YXJkIGRpc2tzIHdpdGggbG90cyBvZiAxOTkwcyBPUydzIG9uCi10aGVtLiAgTm8gZGljZS4gIEkg Y2FuIHNlZSB0aGUgQklPUyBidXQgbm90IHRoZSBoYXJkIGRpc2tzLiAgVGhlCi1jb25maWd1cmF0 aW9uIGlzIHN0aWxsIGNvcnJlY3QgYmVjYXVzZSBpdCB0cmllcyB0byBib290IGZyb20gdGhlIG1v dW50YWJsZQotaGFyZCBkaXNrLCBidXQgaXQgZmFpbHMgKEkgdHJpZWQgc2l4IGRpZmZlcmVudCBv bmVzKS4KLQotVHJpZWQgdG8gcmVzdXJyZWN0IG15IG9sZCBTaWVtZW5zIE5peGRvcmYgUk0gMjAw IE1JUFMgbWFjaGluZS4gIEJvb3RlZCBPSywKLWhlYWRsZXNzIGV2ZW4sIGJ1dCBtYWtlcyBhIGhl bGxpc2ggaGlnaC1waXRjaGVkIHdoaW5lLCBsaWtlIGEgZGVudGlzdCBkcmlsbC4KLUl0J3MgcHJl dHR5IHNsb3cgdG9vLiAgIm1ha2Ugc2luaXg1NDIiIChmb3IgU0lOSVggNS40LjIpIGJvbWJlZCBh dCBsaW5rCi10aW1lIG9uIG5vIHJkY2hrKCkuICBGaXhlZCBieSAjaW5jbHVkaW5nIDxzeXMvZmls aW8uaD4uICBja3V0aW8uYywgMTAgSnVuIDIwMTEuCi0KLVRyaWVkIHRvIHJlc3VycmVjdCBteSBv bGQgU0NPIFhlbml4IDIuMy40IG1hY2hpbmUsIGFsc28gaGVhZGxlc3MuICBBbWF6aW5nbHkKLWl0 IHN0aWxsIHdvcmtzOyBpdCBjYW4ndCB1c2UgYSBtb25pdG9yIGJ1dCBJIGNhbiBUZWxuZXQgdG8g aXQuICBIYWQgdG8gdHdlYWsKLXNvbWUgI2lmZGVmcyBidXQgSSBnb3QgYSBuby1uZXQgdmVyc2lv biBidWlsdCBzdWNjZXNzZnVsbHkuICBBY2NvcmRpbmcgdG8gbXkKLW5vdGVzLCBpdCBoYXNuJ3Qg YmVlbiBwb3NzaWJsZSB0byBidWlsZCB3aXRoIFRDUC9JUCBzaW5jZSBDLUtlcm1pdCA4LjAsCi1i dXQgaG93IG1hbnkgcGVvcGxlIGV2ZXIgaGFkIFNDTyBYZW5peCAyLjMuNCB3aXRoIFRDUC9JUCBh bnl3YXk/ICBBbnl3YXkgd2UKLXN0aWxsIGhhdmUgdGhlIGJpbmFyaWVzIGZvciBDLUtlcm1pdCA3 LjAuICBja3V1czQuYywgMTAgSnVuIDIwMTEuCi0KLUJ1aWx0IE9LIG9uIEFJWCA1LjMuICBCdWls dCBPSyBvbiBTb2xhcmlzIDEwLiAgMTEgSnVuIDIwMTEuCi0KLVRyaWVkIGhhcmRlciB0byByZXZp dmUgdGhlIGJ1aWxkLWFsbCBtYWNoaW5lLCBub3cgaXQgc29ydCBvZiB3b3JrcywgYnV0IG5vdAot YWxsIG9mIHRoZSBib290YWJsZSBPUydzIHdvcmsuICBCdWlsdCBDLUtlcm1pdCA5LjAgT0sgb24g T3BlbkJTRCAzLjAuICBCdWlsdAotT0sgb24gUU5YIDQuMjUgYnV0IGhhZCB0byAjaWZkZWYgcmVm ZXJlbmNlcyB0byBJWEFOWSBpbiBja3V0aW8uYyBhbmQgY2t1cHR5LgotQnVpbHQgT0sgb24gTmV0 QlNEIDEuNS4xICgyMDAwKS4gIFRyaWVkICJtYWtlIG5ldGJzZCtzc2wiIG9uIHRoaXMgb25lLCBp dCdzCi1PcGVuU1NMIDAuOS41YSAxIEFwciAyMDAwLCBidXQgaXQgYm9tYnMgb3V0IGluIGNrdWF0 aC5jLCBubyBiaWcgZGVhbC4KLUFub3RoZXIgcHJvYmxlbSBpbiBOZXRCU0QgMS41LjIgaXMgdGhh dCBldmVuIHRob3VnaCBvZmZfdCBpcyA4LCBDS19PRkZfVAotaXMgNC4gIFdvcnRoIG5vdGluZyBi dXQgbm90IHdvcnRoIGZpeGluZyB1bmxlc3Mgc29tZW9uZSBlbHNlIG5vdGljZXMuCi0xMyBKdW4g MjAxMS4KLQotU3VTRSA3LjAuLi4gYm9vdHMgT0sgYnV0IHRlbG5ldCBzZXJ2ZXIgZG9lc24ndCB3 b3JrLiAgQ2FuIHRlbG5ldCBvdXQgYnV0Ci1pdCdzIHRvbyBmbGFreSwgY29ubmVjdGlvbiBkcm9w cyBpZiBJIHRyeSB0byB0cmFuc2ZlciBhIGZpbGUuCi0KLU9wZW5CU0QgMi41IFsxOTk5XSBPSy4g IFJlZCBIYXQgNy4xIE9LLiAgUmVkIEhhdCA3LjEgd2l0aCBPcGVuU1NMIDAuOS42Ci1ub3QgT0ss IHNhbWUgZXJyb3IgYXMgd2l0aCAwLjkuNWE6Ci0KLWNrdWF0aC5jCi1JbiBmaWxlIGluY2x1ZGVk IGZyb20gY2tfc3NsLmg6NDgsCi0gICAgICAgICAgICAgICAgIGZyb20gY2t1YXRoLmM6MjI1Ogot L3Vzci9pbmNsdWRlL29wZW5zc2wvZGVzLmg6Nzc6IHdhcm5pbmc6IHJlZGVmaW5pdGlvbiBvZiBg QmxvY2snCi1ja3VhdDIuaDo4Njogd2FybmluZzogYEJsb2NrJyBwcmV2aW91c2x5IGRlY2xhcmVk IGhlcmUKLS91c3IvaW5jbHVkZS9vcGVuc3NsL2Rlcy5oOjgzOiByZWRlZmluaXRpb24gb2YgYHN0 cnVjdCBkZXNfa3Nfc3RydWN0JwotL3Vzci9pbmNsdWRlL29wZW5zc2wvZGVzLmg6OTE6IHdhcm5p bmc6IHJlZGVmaW5pdGlvbiBvZiBgU2NoZWR1bGUnCi1ja3VhdDIuaDo5MDogd2FybmluZzogYFNj aGVkdWxlJyBwcmV2aW91c2x5IGRlY2xhcmVkIGhlcmUKLQotU28gaXQgYXBwZWFycyB0aGF0IE9w ZW5TU0wgc3VwcG9ydCBpcyBicm9rZW4gZm9yIHByZS0wLjkuNy4gIFRyaWVkCi1idWlsZGluZyBp dCBhZ2FpbiB3aXRoIC1VQ0tfU1NMIChzaW5jZSB0aGUgZXJyb3JzIGFyZSBvcmlnaW5hdGluZyBm cm9tCi1mcm9tIGRlcy5oKS4uLiAgQnV0IGl0IHN0aWxsIGZhaWxlZCBleGFjdGx5IHRoZSBzYW1l IHdheS4gIEkgZm91bmQKLSNpbmNsdWRlcyBmb3IgZGVzLmggaW4gY2t1YXRoLmMgYW5kIGFuZCBj a19zc2wuaCBhbmQgI2lmZGVmJ2QgdGhlbSBvdXQsCi1idXQgaXQgc3RpbGwgZmFpbHM6Ci0KLUlu IGZpbGUgaW5jbHVkZWQgZnJvbSAvdXNyL2luY2x1ZGUvb3BlbnNzbC9ldnAuaDo4OSwKLSAgICAg ICAgICAgICAgICAgZnJvbSAvdXNyL2luY2x1ZGUvb3BlbnNzbC94NTA5Lmg6NjcsCi0gICAgICAg ICAgICAgICAgIGZyb20gL3Vzci9pbmNsdWRlL29wZW5zc2wvc3NsLmg6NjksCi0gICAgICAgICAg ICAgICAgIGZyb20gY2tfc3NsLmg6NTEsCi0gICAgICAgICAgICAgICAgIGZyb20gY2t1YXRoLmM6 MjI3OgotL3Vzci9pbmNsdWRlL29wZW5zc2wvZGVzLmg6Nzc6IHdhcm5pbmc6IHJlZGVmaW5pdGlv biBvZiBgQmxvY2snCi1ja3VhdDIuaDo4Njogd2FybmluZzogYEJsb2NrJyBwcmV2aW91c2x5IGRl Y2xhcmVkIGhlcmUKLS91c3IvaW5jbHVkZS9vcGVuc3NsL2Rlcy5oOjgzOiByZWRlZmluaXRpb24g b2YgYHN0cnVjdCBkZXNfa3Nfc3RydWN0JwotL3Vzci9pbmNsdWRlL29wZW5zc2wvZGVzLmg6OTE6 IHdhcm5pbmc6IHJlZGVmaW5pdGlvbiBvZiBgU2NoZWR1bGUnCi1ja3VhdDIuaDo5MDogd2Fybmlu ZzogYFNjaGVkdWxlJyBwcmV2aW91c2x5IGRlY2xhcmVkIGhlcmUKLQotQnVpbHQgT0sgb24gRGVi aWFuIDIuMS4gIDEzIEp1biAyMDExLgotCi1PbiBGcmVlQlNEIDQuNCwgaXQgYmxvd3MgdXAgd2l0 aDoKLWNrdWZpby5jOiBJbiBmdW5jdGlvbiB2cGFzcyc6Ci1ja3VmaW8uYzo4MjAxOiBjb25mbGlj dGluZyB0eXBlcyBmb3IgJ2luaXRncm91cHMnCi0vdXNyL2luY2x1ZGUvdW5pc3RkLmg6MTU0OiBw cmV2aW91cyBkZWNsYXJhdGlvbiBvZiAnaW5pdGdyb3VwcycKLWNrdWZpby5jOjgyMDE6IHdhcm5p bmc6IGV4dGVybiBkZWNsYXJhdGlvbiBvZiAnaW5pdGdyb3VwcycgZG9lc24ndCBtYXRjaCBnbG9i YWwKLW9uZS4gIEZpeGVkIGJ5IGRlZmluaW5nIE5PRENMSU5JVEdST1VQUyBmb3IgRnJlZUJTRCBp biBja3VmaW8uYy4gSXQgbWlnaHQgbm90IAotYmUgdGhlIHJpZ2h0IGZpeCwgYnV0IEkgZG9uJ3Qg aGF2ZSBhIGxvdCBvZiBvdGhlciBGcmVlQlNEIHZlcnNpb25zIHRvCi1jb21wYXJlIHdpdGguICBB bnl3YXkgbm93IGl0IGJ1aWxkcyBPSyBvbiA0LjQsIGFuZCBhbHNvIG9uIEZyZWVCU0QgMy4zLgot Y2t1ZmlvLmMsIDEzIEp1biAyMDExLgotCi1UcmllZCB0byBidWlsZCBvbiBTQ08gT3BlbiBTZXJ2 ZXIgNS4wLjcgYnV0IGl0IGZhaWxzIGF0IGxpbmsgdGltZSBiZWNhdXNlCi1pdCBjYW4ndCBmaW5k IHJkY2hrKCkuICBCdXQgaXQncyBzdXBwb3NlZCB0byBiZSB0aGVyZSEgIENvbWUgYmFjayB0byB0 aGlzCi1sYXRlci4uLgotCi1SZWQgSGF0IDYuMSAgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBs aW51eCAgICAgICAgICAyMzMyNTQ1Ci1SZWQgSGF0IDcuMSAgICAgICAgICAgICBpMzg2ICAgMzIv NjQgICBsaW51eCAgICAgICAgICAyMzY4NTI4Ci1SZWQgSGF0IEVMNCAgICAgICAgICAgICBpMzg2 ICAgMzIvNzQgICBsaW51eCAgICAgICAgICAyMzYzMDY3Ci1SZWQgSGF0IEVMNS42ICAgICAgICAg ICBpMzg2ICAgIDY0ICAgICBsaW51eCAgICAgICAgICAyMzcxMjc5Ci1Tb2xhcmlzOSAgICAgICAg ICAgICAgICBzcGFyYyAgMzIvNjQgICBzb2xhcmlzOSAgICAgICAyODQ5ODk2Ci1Tb2xhcmlzOStz c2wgICAgICAgICAgICBzcGFyYyAgMzIvNjQgICBzb2xhcmlzOSAgICAgICA1MDIxNzY0Ci1Tb2xh cmlzMTAgICAgICAgICAgICAgICBzcGFyYyAgMzIvNjQgICBzb2xhcmlzMTAgICAgICAyODU1Nzc2 Ci1RTlggICAgICAgICAgICAgICAgICAgICBpMzg2ICAgIDMyICAgICBxbngzMiAgICAgICAgICAy MDEyMzIzIAotTmV0QlNEIDEuNS4xICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAgbmV0YnNkICAg ICAgICAgMjE5ODA1NQotTmV0QlNEIDUuMSAgICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAgbmV0 YnNkICAgICAgICAgMjE1OTg2MwotT3BlbkJTRCAyLjUgICAgICAgICAgICAgaTM4NiAgIDMyLzY0 ICAgb3BlbmJzZCAgICAgICAgMjIzNjAzNgotTWFjIE9TIFggMTAuNi43ICAgICAgICAgeDg2XzY0 ICA2NCAgICAgbWFjb3N4ICAgICAgICAgMi43TQotTWFjIE9TIFggMTAuNC4xMSAgICAgICAgcHBj ICAgIDMyLzY0ICAgbWFjb3N4ICAgICAgICAgMjQ5NjMwNAotRGViaWFuIDIuMSAgICAgICAgICAg ICAgaTM4NiAgIDMyLzY0ICAgbGludXggICAgICAgICAgMjIxMzIyMQotRnJlZUJTRCA0LjQgICAg ICAgICAgICAgaTM4NiAgIDMyLzY0ICAgZnJlZWJzZCAgICAgICAgMjI5MTMzMwotRnJlZUJTRCAz LjMgICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAgZnJlZWJzZCAgICAgICAgMjE0NzM3MAotU0lO SVggNS40MiAgICAgICAgICAgICAgbWlwcyAgICAzMiAgICAgc2luaXg1NDIgICAgICAgMzMxOTMy NSAoMTk5NSkKLVNDTyBVbml4d2FyZSAyLjEuMyAgICAgIGkzODYgICAgMzIgICAgIHV3MjEzICAg ICAgICAgIDIyNDIxNzYKLVNDTyBPU1I2LjAuMCAgICAgICAgICAgIGkzODYgICAzMi82NCAgIHNj b19vc3I2MDAgICAgIDIzNjgzMDAKLQotTW9yZSBidWlsZHMsIDE0IEp1bmUgMjAxMToKLQotVk1T IDYuMiAgICAgICAgICAgICAgICAgYWxwaGEgICAzMiAgICAgbWFrZSBtbiAgICAgICAgMjU1Njky OCBObyBUQ1AvSVAKLVZNUyA2LjIgICAgICAgICAgICAgICAgIGFscGhhICAgMzIgICAgIG1ha2Ug bSAgICAgICAgIDMxMTI5NjAgVUNYIDQuMAotU29sYXJpcyAxMSAgICAgICAgICAgICAgaTM4NiAg IDMyLzY0ICAgc29sYXJpczExICAgICAgMjgyMzg2MAotU29sYXJpcyAxMSAgICAgICAgICAgICAg aTM4NiAgIDMyLzY0ICAgc29sYXJpczExK3NzbCAgMjk5MzY2MCBPcGVuU1NMIDAuOS44bAotTmV0 QlNEIDUuMSAgICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAgbmV0YnNkK2tyYjUgICAgMjMwNzg1 NSBLZXJiZXJvcyA1Ci1MaW51eCBTbGFja3dhcmUgMTIuMS4wICBpMzg2ICAgMzIvNjUgICBsaW51 eCAgICAgICAgICAyMTc1NzU0Ci1MaW51eCBGZWRvcmEgMTQgICAgICAgICBpMzg2ICAgMzIvNjQg ICBsaW51eCAgICAgICAgICAyMjU2NTE0Ci1MaW51eCBGZWRvcmEgMTQgICAgICAgICBpMzg2ICAg MzIvNjQgICBsaW51eCtzc2wgICAgICAuLi4uLi4uIE9wZW5TU0wgMS4wLjBkCi1MaW51eCBGZWRv cmEgMTQgICAgICAgICBpMzg2ICAgMzIvNjQgICBsaW51eCtrcmIgICAgICAyNDQ5NjE0ICgqKQot Ci0oKikgbWFrZSBsaW51eCtrcmI1ICJMSUJTPSRMSUJTIC9saWIvbGliazVjcnlwdG8uc28uMyAv bGliL2xpYmNvbV9lcnIuc28uMiIKLQotTm90aWNlZCB0aGF0IG5ldGJzZCtzc2wgYnVpbGQgb24g TmV0QlNEIDUuMSBzYWlkICJOZXRCU0QgMS41IiBpbiBpdHMgYmFubmVyLgotRml4ZWQgYnkgcmVw bGFjaW5nIHRoZSBvbGQgaGFyZHdpcmVkIHRhcmdldCB3aXRoIHRoZSBuZXcgInN1YnJvdXRpbml6 ZWQiCi10YXJnZXQgYSdsYSBsaW51eCtzc2wgYW5kIGFkYXB0aW5nIGl0IHRvIE5ldEJTRC4gIG1h a2VmaWxlLCAxNSBKdW4gMjAxMS4KLQotU2FtZSBkZWFsIGZvciBLZXJiZXJvcyA1LCBtYWtlIGEg bmV3IG5ldGJzZCtrcmI1IHRhcmdldCBhbmQgaXQgYnVpbGRzIG9rLAotYXQgbGVhc3Qgb25jZSBv bmUgZmlndXJlcyBvdXQgd2hlcmUgdGhlIEtlcmJlcm9zIGhlYWRlcnMgYW5kIGxpYnMgYXJlLgot bWFrZWZpbGUsIDE1IEp1biAyMDExLgotCi1TYW1lIGRlYWwgZm9yIHRoZSBuZXRic2RuYyB0YXJn ZXQsIG5vdyBpdCBzaW1wbHkgZGVmaW5lZCBOT0NVUlNFUyBhbmQKLWNoYWlucyB0byB0aGUgbWFp biBuZXRic2QgdGFyZ2V0LiAgbWFrZWZpbGUsIDE1IEp1biAyMDExLgotCi1UcmllZCB0byBidWls ZCB3aXRoIEtlcmJlcm9zIDUgb24gU29sYXJpcywgZmFpbHMgYmVjYXVzZSB0aGUgREVTIGxpYnJh cnkKLW5vIGxvbmdlciBleGlzdHMuICBUaGlzIG9uZSBpcyBiZXlvbmQgbWUsIHNvcnJ5LgotCi1N YWRlIG5ldyB0YXJnZXRzIGZvciBNaXJCU0QsIG1pcmJzZCBhbmQgbWlyYnNkK3NzbCwgbWFrZWZp bGUgMTUgSnVuIDIwMTEuCi0KLUluIE9wZW5TVVNFIDExLjIgd2l0aCBPcGVuU1NMIDAuOS44ciB3 ZSBib21iIG9uIHVuZGVmaW5lZCByZWZlcmVuY2VzIGZyb20KLXZhcmlvdXMgREVTIGxpYnJhcnkg cm91dGluZXMuICBCdWlsZHMgT0sgd2l0aG91dCBERVMuCi0KLVZhcmlvdXMgbGludXgra3JiNSBi dWlsZHMgZmFpbCBiZWNhdXNlIGNhbid0IGZpbmQgLWxnc3NhcGlfa3JiNQotCi1TU0wgYnVpbGRz IHdpdGggT3BlblNTTCA8IDAuOS43IGZhaWwgZXZlbiB0aG91Z2ggdGhlcmUgaXMgY29kZSB0byBz dXBwb3J0Ci10aGUgb2xkZXIgU1NMLgotCi1GaXhlZCBzb21lIHByaW50ZiAlbGQgdnMgaW50IGlu c3RhbmNlcyBpbiB0aGUgc2l6ZW9mcyBzZWN0aW9uIG9mIFNIT1cgRkVBVFVSRVMuCi1ja3V1czUu YywgMTUgSnVuIDIwMTEuCi0KLUZpeGVkIHRoZSBuZXcgbGludXgrc3NsIHRhcmdldCB0byBhY3R1 YWxseSB1c2UgdGhlIFNTTElOQyBhbmQgU1NMTElCUwotZGVmaW5pdGlvbnMsIG9vcHMuICBtYWtl ZmlsZSwgMTUgSnVuIDIwMTEuCi0KLTE1IEp1bmUgMjAxMSBidWlsZHMgKEJldGEuMDEpOgotCi1B SVggNS4zICAgICAgICAgICAgICAgICBwcGMgICAgMzIvNjQgICBhaXgrc3NsICAgICAgICAzMjgz ODQ2IE9wZW5TU0wgMC45LjhtCi1OZXRCU0QgNS4xICAgICAgICAgICAgICBpMzg2ICAgMzIvNjQg ICBuZXRic2QgICAgICAgICAyMTU5ODYzCi1OZXRCU0QgNS4xICAgICAgICAgICAgICBpMzg2ICAg MzIvNjQgICBuZXRic2Qrc3NsICAgICAyMzUwMjc0IE9wZW5TU0wgMC45LjktZGV2Ci1OZXRCU0Qg NS4xICAgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBuZXRic2Qra3JiNSAgICAyMzQ5NjI3IE1J VCBLcmI1IDEuNi4zCi1GcmVlQlNEIDguMiAgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBmcmVl YnNkICAgICAgICAyMjk4NDE0Ci1GcmVlQlNEIDguMiAgICAgICAgICAgICBpMzg2ICAgMzIvNjQg ICBmcmVlYnNkK3NzbCAgICAyNDQ4OTYxIE9wZW5TU0wgMC45LjhxCi1PcGVuQlNEIDQuNyAgICAg ICAgICAgICBpMzg2ICAgMzIvNjQgICBvcGVuYnNkICAgICAgICAyMjY2MTMyCi1PcGVuQlNEIDQu NyAgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBvcGVuYnNkK3NzbCAgICAyNDA5MjYzIE9wZW5T U0wgMC45LjhrCi1NaXJCU0QgMTAgICAgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBtaXJic2Qg ICAgICAgICAyMjE2NjAxCi1NaXJCU0QgMTAgICAgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBt aXJic2Qrc3NsICAgICAyMzU4MzE4IE9wZW5TU0wgMC45LjhyCi1PcGVuU3VzZSAxMS4yICAgICAg ICAgICB4ODZfNjQgIDY0ICAgICBsaW51eCAgICAgICAgICAyMzQ4NDY4Ci1PcGVuU3VzZSAxMS4y ICAgICAgICAgICB4ODZfNjQgIDY0ICAgICBsaW51eCtzc2wgKCopICAyNTQ2NTQwIE9wZW5TU0wg MC45LjhyCi1SSEVMIDUuNiAgICAgICAgICAgICAgICBpYTY0ICAgIDY0ICAgICBsaW51eCAgICAg ICAgICA0MzkwNjg3Ci1SSEVMIDUuNiAgICAgICAgICAgICAgICBpYTY0ICAgIDY0ICAgICBsaW51 eCtzc2wgKCopICA0Nzc1MDA3IE9wZW5TU0wgMC45LjhlCi1VYnVudHUgOS4xMCAgICAgICAgICAg ICBpMzg2ICAgMzIvNjQgICBsaW51eCAgICAgICAgICAyMjc1NTIzCi1VYnVudHUgOS4xMCAgICAg ICAgICAgICBpMzg2ICAgMzIvNjQgICBsaW51eCtzc2wgICAgICAyNDY2NzA4IE9wZW5TU0wgMC45 LjhyCi1HZW50b28gMS4xMi4xMyAgICAgICAgICBwcGMgICAgMzIvNjQgICBsaW51eCAgICAgICAg ICAyMzg2NTk3Ci1HZW50b28gMS4xMi4xMyAgICAgICAgICBwcGM2NCAgIDY0ICAgICBsaW51eCAg ICAgICAgICAyNzQ5MDE1Ci1HZW50b28gMS4xMi4xMyAgICAgICAgICBwcGM2NCAgIDY0ICAgICBs aW51eCtzc2wgICAgICAzMDAyMTUwIE9wZW5TU0wgMC45LjhyCi1HZW50b28gMS4xMi4xMyAgICAg ICAgICBzcGFyYyAgMzIvNjQgICBsaW51eCAgICAgICAgICAyNDc4MzgyCi1HZW50b28gMS4xMi4x MyAgICAgICAgICBzcGFyYyAgMzIvNjQgICBsaW51eCtzc2wgICAgICAyNjkwNDk5IE9wZW5TU0wg MC45LjhyCi1Tb2xhcmlzIDkgICAgICAgICAgICAgICBzcGFyYyAgMzIvNjQgICBzb2xhcmlzOSAg ICAgICAyODQ5ODk2Ci1Tb2xhcmlzIDEwICAgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBzb2xh cmlzMTAgICAgICAyODM3NjIwCi1JUklYIDYuNSAgICAgICAgICAgICAgICBSMTAwMDAgMzIvNjQg ICBpcml4NjUgICAgICAgICAyODY5NzA0Ci0KLSogYW5kIEtGTEFHUz0tVUNLX0RFUwotCi1Ucmll ZCBidWlsZGluZyBvbiBOZXRCU0QgNS4xIHdpdGggSGVpbWRhbCBLZXJiZXJvcyB1c2luZzoKLQot bWFrZSBuZXRic2Qra3JiNSBcCi0gIktGTEFHUz0tREhFSU1EQUwiIFwKLSAiSzVJTkM9LUkvdXNy L2luY2x1ZGUiIFwKLSAiSzVMSUI9LUwvdXNyL2xpYiIKLQotSXQgZm91bmQgYWxsIGl0cyBoZWFk ZXJzIE9LLCBidXQgaXQgYmxldyB1cCBpbiBja3VhdGguYy4gIFNtYWxsIHdvbmRlciwKLWNrY2Nm Zy5odG1sIHNheXM6Ci0KLUhFSU1EQUwKLSAgICBTaG91bGQgYmUgZGVmaW5lZCBpZiBLZXJiZXJv cyBWIHN1cHBvcnQgaXMgcHJvdmlkZWQgYnkgSEVJTURBTC4gU3VwcG9ydAotICAgIGZvciB0aGlz IG9wdGlvbiBpcyBub3QgY29tcGxldGUgaW4gQy1LZXJtaXQgOC4wLiBBbnlvbmUgaW50ZXJlc3Rl ZCBpbgotICAgIHdvcmtpbmcgb24gdGhpcyBzaG91bGQgY29udGFjdCBrZXJtaXQtc3VwcG9ydC4g Ci0KLSdrcmI1LWNvbmZpZyAtLXZlcnNpb24nIGdpdmVzIHRoZSBNSVQgS2VyYmVyb3MgNSB2ZXJz aW9uIG51bWJlci4KLQotTWFrZSBhIG5ldyBuZXRic2Qra3JiNStzc2wgdGFyZ2V0IGJhc2VkIG9u IHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgbmV3Ci1uZXRic2Qrc3NsIGFuZCBuZXRic2Qra3JiNSB0 YXJnZXRzLiAgVGhlcmUgd2VyZSBsb3RzIG9mIHdhcm5pbmdzIGluIHRoZQotY29tcGlsYXRpb24g YnV0IG5vIGVycm9ycywgYnV0IGl0IHByb2R1Y2VkIGFuIGV4ZWN1dGFibGUgdGhhdCBzdGFydHMg YW5kCi1kb2VzIG5vcm1hbCB0aGluZ3MgYnV0IEkgaGF2ZSBubyBpZGVhIGlmIHRoZSBTU0wgb3Ig S2VyYmVyb3MgZnVuY3Rpb25zIHdvcmsuCi1tYWtlZmlsZSwgMTYgSnVuIDIwMTEuCi0KLUNoYW5n ZWQgdGhlIGN1LXNvbGFyaXM5LWtyYjUgdGFyZ2V0IHRvIHRlc3QgZm9yIHRoZSBwcmVzZW5jZSBv ZiBERVMgYmVjYXVzZQotREVTIGlzbid0IHRoZXJlLCB0byBzZWUgaWYgdGhpcyB3b3VsZCBhbGxv dyBhIEtlcmJlcm9zIGJ1aWxkIHRvIHByb2NlZWQuCi1BbmQgaXQgd29ya2VkLCBhbWF6aW5nLiAg QXQgbGVhc3QgdGhlIGJ1aWxkIGNvbXBsZXRlZCwgSSBoYXZlIG5vIHdheSB0byB0ZXN0Ci10aGUg S2VyYmVyb3MgcGFydC4gIG1ha2VmaWxlLCAxNiBKdW4gMjAxMS4KLQotVXBkYXRlZCB0aGUgc29s YXJpczkrc3NsIHRhcmdldCB0byBkbyB0aGUgREVTIHRlc3RpbmcuICBtYWtlZmlsZSwgMTYgSnVu IDIwMTEuCi0KLVVwZGF0ZWQgY3Utc29sYXJpcytrcmI1IHRhcmdldCB0byB0ZXN0IHdoZXRoZXIg dGhlIEdTU0FQSSBsaWJyYXJ5IGlzIGNhbGxlZAotbGliZ2Fzc2FwaSBvciBsaWJnYXNzYXBpX2ty YjUuICBtYWtlZmlsZSwgMTYgSnVuIDIwMTEuCi0KLUFkZGVkIGxvdHMgb2YgdGVzdHMgdG8gdGhl IExpbnV4IEtlcmJlcm9zIDUgZW50cmllcywgbGludXgra3JiNSBhbmQKLWxpbnV4K2tyYjUrc3Ns LCBiZWNhdXNlIHNvbWUgaGF2ZSBsaWJrNWNyeXB0byBhbmQgc29tZSBkb24ndDsgc29tZSBoYXZl Ci1saWJjb21fZXJyIGFuZCBzb21lIGRvbid0OyBhbmQgc29tZSBoYXZlIGxpYmdzc2FwaV9rcmI1 IChlLmcuIFJIRUw1LAotT3BlblN1c2UgMTEuMikgd2hlcmVhcyBvdGhlcnMgaGF2ZSBsaWJnc3Nh cGkgKEdlbnRvbykuCi0KLTE2IEp1bmUgMjAxMSBidWlsZHMgKEJldGEuMDEpOgotCi1OZXRCU0Qg NS4xIGkzODYgICAzMi82NCAgbmV0YnNkK2tyYjUrc3NsICAgMjQ1MTc1NyBPcGVuU1NMIDAuOS45 IE1JVCBLcmI1IDEuNi4zCi1Tb2xhcmlzIDkgIHNwYXJjICAzMi82NCAgc29sYXJpczkra3JiNSAg ICAgMjU0MzAzNiBNSVQgS2VyYmVyb3MgNSAxLjcuMQotU29sYXJpcyA5ICBzcGFyYyAgMzIvNjQg IHNvbGFyaXM5K3NzbCAgICAgIDUwMjE1NDQgT3BlblNTTCAwLjkuOHEgKGdjYykKLUdlbnRvby4u LiAgcHBjICAgIDMyLzY0ICBsaW51eCAgICAgICAgICAgICAyMzg2NTk3Ci1HZW50b28uLi4gIHBw YyAgICAzMi82NCAgbGludXgrc3NsICAgICAgICAgMjU5MzU2MSBPcGVuU1NMIDAuOS44ciAKLUdl bnRvby4uLiAgcHBjNjQgICA2NCAgICBsaW51eCAgICAgICAgICAgICAyNzQ5MDE1Ci1HZW50b28u Li4gIHBwYzY0ICAgNjQgICAgbGludXgrc3NsICAgICAgICAgMzAwMjE1MCBPcGVuU1NMIDAuOS44 ciAKLVJIRUw1ICAgICAgeDg2XzY0ICA2NCAgICBsaW51eCtrcmI1ICgqKSAgICAyNTYzODc4IE1J VCBLZXJiZXJvcyA1IDEuNi4xCi1SSEVMNSAgICAgIHg4Nl82NCAgNjQgICAgbGludXgra3JiNStz c2woKikgMjU2Mzg3OCBNSVQgS2VyYmVyb3MgNSAxLjYuMQotRmVkb3JhIDE0ICBpMzg2ICAgMzIv NjQgIGxpbnV4K2tyYjUrc3NsICAgIDI1Mzk4OTEgTUlUIEtyYjUgKyBPcGVuU1NMIDAuOS44cgot Ci0qIEtGTEFHUz0tVUNLX0RFUwotCi0tLS0gQy1LZXJtaXQgOS4wLjI5OSBCZXRhLjAxIC0tLQot Ci1zaXplb2YoKSBjYW4gcmV0dXJuIGEgbG9uZyBvciBhbiBpbnQsIHNvIG5laXRoZXIgcHJpbnRm KCIlZCIsc2l6ZW9mKGJsYWgpKTsKLW9yIHByaW50ZigiJWxkIixzaXplb2YoYmxhaCkpOyBjYW4g YmUgdXNlZCBldmVyeXdoZXJlLiAgQ2hhbmdlZCB0aGUKLSJzaXplb2ZzIiBzZWN0aW9uIG9mIFNI T1cgRkVBVFVSRVMgaW4gdGhlIGR1bWJlc3QgKGFuZCB0aGVyZWZvcmUgbW9zdAotcG9ydGFibGUp IHdheSB0byBzcXVlbGNoIHRoZSB3YXJuaW5ncy4gIGNrdXVzNS5jLCAxNyBKdW4gMjAxMS4KLQot RnJvbSBKb2huIER1bmxhcDogIldhdGNoaW5nIHRoZSBzZXJ2ZXIgc2NyZWVuIGxlZCBtZSB0byBv ZmZlciBhIGNvc21ldGljCi1wYXRjaCBmb3IgY2t1dXN4LmMuICBJIG5vdGljZWQgdGhhdCB0aGUg c2VydmVyIHNjcmVlbiBzYWlkIGl0IHdhcwotIlJFU0VORElORyIgd2hlbiBpdCByZWFsbHkgd2Fz bid0LiAgVGhlIGF0dGFjaGVkIHBhdGNoIGVtaXRzIGJsYW5rcyB0bwotaW5zdXJlIHRoYXQgb2xk IGxhYmVscyBhcmUgY29tcGxldGVseSBlcmFzZWQuIiAgY2t1dXN4LmMsIDE3IEp1biAyMDExLgot Ci1OZWxzb24gQmVlYmUgZm91bmQgdHdvIHBsYWNlcyB3aGVyZSBJIGhhZCBTU0xMSUJTIGluIHRo ZSBtYWtlZmlsZSBpbnN0ZWFkIG9mCi1TU0xMSUIuICBtYWtlZmlsZSwgMTggSnVuIDIwMTEuCi0K LU1vcmUgaW1wb3J0YW50IGhlIGtuZXcgaG93IHRvIGZvcmNlIGdjYyB0byBsb2FkIHRoZSByaWdo dCBoZWFkZXIgZmlsZXMgZm9yCi1PcGVuU1NMIDEuMC4wZCAoYnkgdXNpbmcgJy1pc3lzdGVtJyBy YXRoZXIgdGhhbiAnLUknKS4gIFByZXZpb3VzbHkgaXQgd2FzCi11c2luZyB0aGUgMC45LjhyIGhl YWRlciBmaWxlcyBidXQgbGlua2luZyB3aXRoIHRoZSAxLjAuMGQgbGlicmFyaWVzLiAgVGhpcwot aXMgbm90IGluIHRoZSBzb3VyY2VzIG9yIG1ha2VmaWxlOyBpdCdzIGRvbmUgd2hlbiBnaXZpbmcg dGhlICdtYWtlJyBjb21tYW5kOgotCi0gIGV4cG9ydCBQQVRIPS91c3IvYmluOiRQQVRICi0gIGV4 cG9ydCBTU0xJTkM9LWlzeXN0ZW0vdXNyL2luY2x1ZGUKLSAgZXhwb3J0ICJTU0xMSUI9LUwvdXNy L2xpYiAtV2wsLXJwYXRoLC91c3IvbGliIgotICBtYWtlIGxpbnV4K3NzbAotCi1Gb2xkZWQgdGhl IHByZXZpb3VzIGxpbnV4K29wZW5zc2wremxpYitzaGFkb3crcGFtIGFuZCBsaW51eCtvcGVuc3Ns K3NoYWRvdwotdGFyZ2V0cyBpbnRvIGxpbnV4K3NzbC4gIENoZWNrZWQgdGhlIGxpbnV4c28gKHNj cmlwdGluZyBvbmx5KSB0YXJnZXQsIGJ1aWxkcwotT0ssIDYwMEsuICBNYWRlIG5ldyBzdWJyb3V0 aW5pemVkIGxpbnV4K2tyYjUra3JiNCB0YXJnZXQgYnV0IGNhbid0IGZpbmQKLWFueXBsYWNlIHRv IHRlc3QgaXQuICAgTWFkZSBuZXcgc3Vicm91dGluaXplZCBsaW51eCtzaGFkb3crcGFtIHRhcmdl dCwgd29ya3MKLWZpbmUgb24gUkhFTDQuICBSZXZpc2VkIGNvbW1lbnRzIGFuZCBsaXN0cyBhZ2Fp bi4gIG1ha2VmaWxlLCAxOCBKdW4gMjAxMS4KLQotRm9yIHRoZSBwbHVnZ2FibGUtZGlzayBPUydz IHRoYXQgYm9vdCBPSyBidXQgbGFjayBhIHdvcmtpbmcgbmV0d29yaywgSQotcmlnZ2VkIHVwIGEg c2VyaWFsIGNvbm5lY3Rpb24gdXNpbmcgYSBEQjktRkYgbnVsbCBtb2RlbSBjYWJsZSwgYW5kIHRo ZW4gYQotREI5LU1GIG1vZGVtIGNhYmxlIHRvIG1ha2UgaXQgcmVhY2guICBJIGRvbid0IHNlZSBh bnkgbW9kZW0gc2lnbmFscyBvbgotZWl0aGVyIGVuZCwgYnV0IHRoZSBkYXRhIGdvZXMgdGhyb3Vn aCBPSy4gIENPTTEgb24gdGhlIGRlc2t0b3AgUEMsCi0vZGV2L3R0eVMxIG9yIHdoYXRldmVyIG9u IExhYi4gIFNpbmNlIHRoZXJlIGFyZSBubyBtb2RlbSBzaWduYWxzLCBjYW4ndCB1c2UKLVJUUy9D VFMuICBBdCA1NzYwMGJwcyB3aXRoIFhvbi9Yb2ZmLCA1MDAtYnl0ZSBwYWNrZXRzIGFuZCBzbGlk aW5nIHdpbmRvd3MsCi10cmFuc2ZlcnMgd29yayBPSyBhdCBhYm91dCA1MDAwY3BzIHVzaW5nIDUg d2luZG93IHNsb3RzOyB0YWtlcyA4IG1pbnV0ZXMgdG8KLXRyYW5zZmVyIHRoZSBnemlwcGVkIEMt S2VybWl0IHRhcmJhbGwuICBLZXJtaXQgdG8gdGhlIHJlc2N1ZS4gIDE5IEp1biAyMDExLgotCi1U cmFuc2ZlcnJlZCB0aGUgdGFyYmFsbCBvdmVyIHNlcmlhbCBwb3J0cyB0byBTQ08gT1NSNS4wLjUg YXQgMzguNEticHMsIHRoZQotaGlnaGVzdCBzcGVlZCBzdXBwb3J0ZWQsIDEyIG1pbnV0ZXMsIG5v IGVycm9ycywgMzMwMGNwcy4gIFVucGFjaywgbWFrZQotc2NvMzJ2NTA1dWRrLCBPSy4gIEFsc28g YnVpbHQgdGhlIFRDUC9JUCB2ZXJzaW9uIGFuZCBpdCBhbG1vc3QgbWFkZSBhbgotb3V0Ym91bmQg Y29ubmVjdGlvbiwgYnV0IG9ubHkgb25jZSAobm90IGEgS2VybWl0IHByb2JsZW0gYnV0IHNvbWV0 aGluZyB3aXRoCi10aGUgVENQL0lQIHN0YWNrKS4gIDE5IEp1biAyMDExLgotCi1EaXR0byBmb3Ig U29sYXJpcyAyLjYvaTM4NiwgZXhjZXB0IDU3LjZLYnBzLCA0Sy1ieXRlIHBhY2tldHMsIG5vIHBy b2JsZW0uCi1Tb2xhcmlzIDgvaTM4NiwgZGl0dG8uICAxOSBKdW4gMjAxMS4KLQotU0NPIE9wZW5T ZXJ2ZXIgNS4wLjUgIGkzODYgICAzMiAgIHNjbzMydjUwNXVkayAgICAgMTk0MDk2NCAgTm8gVENQ L0lQCi1TQ08gT3BlblNlcnZlciA1LjAuNSAgaTM4NiAgIDMyICAgc2NvMzJ2NTA1dWRrbmV0ICAy MzE0NjY4ICBXaXRoIFRDUC9JUAotU3VuIFNvbGFyaXMgMi42ICAgICAgIGkzODYgICAzMiAgIHNv bGFyaXMyNmcgICAgICAgNDY2MTM2OAotU3VuIFNvbGFyaXMgOCAgICAgICAgIGkzODYgICAzMiAg IHNvbGFyaXM4ZyAgICAgICAgNDY3NTQzMgotCi1XaGVuIHVzaW5nIGNvbXBhY3Qgc3Vic3RyaW5n IG5vdGF0aW9uLCBccyh4eFs0XSkgcmV0dXJucyB0aGUgd2hvbGUgc3RyaW5nCi14eCBzdGFydGlu ZyBhdCBwb3NpdGlvbiA0LCBidXQgXHMoeHhbNDpdKSByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4g IEZpeGVkCi10aGUgbGF0dGVyIHRvIGJlIGxpa2UgdGhlIGZvcm1lci4gIGNrdXVzNS5jLCAyMCBK dW4gMjAxMC4KLQotUmVhbGx5IGl0IHdvdWxkIGhhdmUgYmVlbiBuaWNlciBpZiBccyh4eFs0XSkg cmV0dXJuZWQgYSBzaW5nbGUgY2hhcmFjdGVyLAotdGhlIDR0aCBjaGFyYWN0ZXIgb2YgeHgsIGJ1 dCBpdCdzIHRvbyBsYXRlIG5vdy4gIEFkZGVkIGFub3RoZXIgInNlcGFyYXRvciIKLWNoYXJhY3Rl ciAnLicgKHBlcmlvZCkgZm9yIHRoYXQ6IFxzKHh4WzQuXSkgaXMgdGhlIDR0aCBjaGFyYWN0ZXIg b2YgeHguCi1ja3V1czQuYywgMjAgSnVuIDIwMTAuCi0KLUJhY2sgdG8gU0NPIE9TUjUuMC43Li4u IFRoaXMgZmFpbGVkIGJlZm9yZSBiZWNhdXNlICdyZGNoaycgY2FtZSB1cCB1bmtub3duCi1hdCBs aW5rIHRpbWUsIHVubGlrZSBhbGwgcHJldmlvdXMgT1NSNSdzLCB0aGF0IHVzZWQgcmRjaGsoKSBp biBwbGFjZSBvZiB0aGUKLUZJT05SRUFEIGlvY3RsLiAgQWRkZWQgI2lmZGVmcyB0byBtYWtlIGEg c3BlY2lhbCBjYXNlIGZvciA1LjAuNy4gIEknbSBub3QKLXN1cmUgdGhpcyBpcyB0aGUgYmVzdCB3 YXksIGJ1dCB0aGlzIGlzIHRoZSBtaW5pbWFsIGNoYW5nZSB0byBnZXQgaXQgdG8gd29yay4KLUlm IGFueWJvZHkgY2FyZXMsIG1heWJlIHRoZSBzYW1lIGNhbiBiZSBkb25lIGZvciBwcmV2aW91cyBP U1I1IHJlbGVhc2VzLgotY2t1dGlvLmMsIDIwIEp1biAyMDEwIChzZWFyY2ggZm9yIFNDT19PU1I1 MDcpLgotCi1TQ08gT3BlblNlcnZlciA1LjAuNyAgaTM4NiAgIDMyICAgc2NvMzJ2NTA3ICAgICAg ICAxODk1NzI0ICBObyBUQ1AvSVAKLVNDTyBPcGVuU2VydmVyIDUuMC43ICBpMzg2ICAgMzIgICBz Y28zMnY1MDduZXQgICAgIDIyNDY3OTIgIFdpdGggVENQL0lQCi0KLUNoZWNrZWQgY3VycmVudCBj b2RlIG9uIFJIRUw0LCBmb3VuZCB0aGF0IG15IEdTU0FQSS1saWIgZmluZGluZyBtYWtlZmlsZQot dGFyZ2V0IGRpZG4ndCBsb29rIGluIGVub3VnaCBwbGFjZXM7IGFkZGVkIHNvbWUgbW9yZS4gIG1h a2VmaWxlLCAyMSBKdW4gMjAxMS4KLQotR290IHJlcG9ydHMgYmFjayBvbiBIUFVYIGZyb20gUGV0 ZXIgRWljaGhvcm4sIGFsbW9zdCBhbGwgZ29vZCBvbiBIUC1VWCA3LCA4LAotOSwgMTAsIGFuZCAx MS4gIDIxLTIyIEp1biAyMDExLgotCi1Hb3QgYWNjZXNzIHRvIERlYmlhbiA1LjAgYW5kIDctdG8t YmUgKCJXaGVlenkvU2lkIikuICBSZWd1bGFyICdtYWtlIGxpbnV4JyBpcwotT0sgaW4gRGViaWFu IDUsIGJ1dCBpbiA3IGNhbid0IGZpbmQgY3J5cHQsIHJlc19zZWFyY2gsIG9yIGRuX2V4cGFuZDsg aGFkCi10byBhZGQgbW9yZSBsaWJyYXJ5IHNlYXJjaCBjbGF1c2VzIHRvICdtYWtlIGxpbnV4Jy4g IG1ha2VmaWxlLCAyMSBKdW4gMjAxMS4KLQotSW4gRGViaWFuIDcuMCwgbGliazVjcnlwdG8gY291 bGQgbm90IGJlIGZvdW5kIHdpdGhvdXQgYWRkaW5nIGFub3RoZXIgY2xhdXNlCi10byAnbWFrZSBs aW51eCtrcmI1Jy4gIFRoYXQgZG9uZSwgdGhlIFNTTCBidWlsZCAoMS4wLjBkKSB3YXMgT0ssIGFz IHdlbGwgYXMKLXRoZSBrcmI1K3NzbCBvbmUuICBtYWtlZmlsZSwgMjEgSnVuIDIwMTEuCi0KLUkg Zm91bmQgYSBMaW51eCBib3ggdGhhdCBoYWQgYm90aCBLZXJiZXJvcyA0IGFuZCA1IGluc3RhbGxl ZCBhbmQgdHJpZWQgJ21ha2UKLWxpbnV4K2tyYjUra3JiNCcsIHdoaWNoIGZhaWxlZCBiZWNhdXNl IG9mIG1pc3NpbmcgREVTIGZ1bmN0aW9ucy4gIFRyaWVkCi0nbWFrZSBsaW51eCtrcmI1K2tyYjQg S0ZMQUdTPS1VQ0tfREVTJywgYnV0IHRoYXQgZmFpbHMgdG9vLCBldmVuIHRob3VnaCBpdAotZG9l c24ndCBmYWlsIGZvciBLZXJiZXJvcyA1IGFsb25lLCBzbyBwcm9iYWJseSBzb21lIEtyYjQgY29k ZSBpcyBtYWtpbmcKLXVuZ3VhcmRlZCBjYWxscyB0byB0aGUgREVTIHJvdXRpbmVzLiAgV2hhdCBp cyByZWFsbHkgbmVlZGVkIGlzIGEgd2F5IHRvCi1jb21wbGV0ZWx5IHN0cmlwIGFsbCBERVMgcmVm ZXJlbmNlcyBmcm9tIGFueSBnaXZlbiBidWlsZCwgY29kZSBhbmQgbWFrZWZpbGUsCi1hIGJpZyBk ZWFsLiAgMjEgSnVuIDIwMTEuCi0KLUZpeGVkIHNvbWUgdHlwb3MgaW4gQ09QWUlORy5UWFQgKG5v dGljZWQgYnkgSWFuIEJlY2t3aXRoKS4gIDI0IEp1biAyMDExLgotCi1Hb3QgYWNjZXNzIHRvIHBl cmhhcHMgdGhlIGxhc3QgbGl2aW5nIDQuM0JTRCBWQVggc3lzdGVtLiAgSXQgZG9lc24ndCBoYXZl Ci1TRUVLX0NVUiBzbyBJIGhhZCB0byAjaWZkZWYgb3V0IHRoZSBcZnBpY3R1cmUoKSBmdW5jdGlv bi4gIEFzaWRlIGZyb20gdGhhdCwKLW5vIHByb2JsZW1zLiAgY2t1dXM0LmMsIDI0IEp1biAyMDEx LgotCi1JIGhhZCBiZWVuIHdhbnRpbmcgdGhlIFMtRXhwcmVzc2lvbiAoUk9VTkQgeCkgdG8gYWxs b3cgYSBzZWNvbmQgYXJndW1lbnQgbiwKLXdoaWNoLCBpZiBnaXZlbiwgdGVsbHMgd2hlcmUgdGhl IHJvdW5kaW5nIHNob3VsZCBvY2N1ci4gIElmIG4gaXMgcG9zaXRpdmUsCi10aGUgbnVtYmVyIGlz IHJvdW5kZWQgdG8gbiBkZWNpbWFsIHBsYWNlcy4gIElmIHplcm8sIGl0IGlzIHJvdW5kZWQgdG8g dGhlCi1uZWFyZXN0IGludGVnZXQuICBJZiBwb3NpdGl2ZSwgdGhlIG51bWJlciBpcyByb3VuZGVk IHRvIHRoZSBuZWFyZXN0IHBvd2VyIG9mCi0xMDsgZS5nLiAtMiBtZWFucyAidG8gdGhlIG5lYXJl c3QgaHVuZHJlZCIuICBJZiBST1VORCBpcyB1c2VkIGFzIGJlZm9yZSwKLXdpdGggb25lIGFyZ3Vt ZW50LCBpdCB3b3JrcyBhcyBiZWZvcmUuICBja2NsaWIuYywgY2t1dXMzLmMsIDI1IEp1biAyMDEx LgotCi1Gcm9tIEFydGh1ciBNYXJzaCwgYSBmZXcgbW9yZSBkaXJlY3RvcmllcyB0byB0ZXN0IGZv ciBsaWJyZXNvbHYgaW4gTGludXguCi1tYWtlZmlsZSwgMjYgSnVuIDIwMTEuCi0KLUZyb20gTWFy dGluIFZvcmxhZW5kZXIsIGEgZml4IGZvciB0aGUgVk1TIGZpbGUtdHJhbnNmZXIgZGlzcGxheSBh bmQKLXN0YXRpc3RpY3MsIGEgcGxhY2Ugd2hlcmUgYSBmaWxlIGxlbmd0aCB3YXNuJ3QgYmVpbmcg Y2FzdCB0byBDS19PRkZfVAotaW4gemNoa2koKS4gIGNrdmZpby5jLCAyOCBKdW4gMjAxMS4KLQot VXBkYXRlZCB2ZXJzaW9uIHRvIDkuMC4zMDAgYW5kIHJlbW92ZWQgdGhlIEJldGEgZGVzaWduYXRp b24uCi1ja2NtYWkuYywgbWFrZWZpbGUsIDI4IEp1biAyMDExLgotCi1SZW1vdmVkIHNvbGFyaXM5 XzY0IHRhcmdldCBmcm9tIG1ha2VmaWxlLiAgSXQgYnVpbGRzIGJ1dCBpdCBkb2Vzbid0IHdvcmsK LWF0IGFsbC4gIDMwIEp1biAyMDExLgotCi0tLS0gQy1LZXJtaXQgOS4wLjMwMCAtLS0KLQotT24g U29sYXJpcyAxMCBhbmQgMTEsIEROUyBsb29rdXBzIGRvbid0IHdvcmsuICBJdCBzZWVtcyB0aGVz ZSBTb2xhcmlzCi12ZXJzaW9ucyBoYXZlIElOQUREUlggYW5kIElOQUREUlhfTk9ORSBkZWZpbmVk LCB0aHVzIHRyaWdnZXJpbmcgdGhlIGNvZGUgaW4KLWNrY25ldC5jLCBja3VjbnMuYywgYW5kIGNr Y2Z0cC5jICNpZmRlZidkIG9uIHRoZXNlIHN5bWJvbHMsIGJ1dCB0aGF0IGNvZGUKLWRvZXNuJ3Qg d29yayBpbiB0aGlzIGNhc2UuICBUaGlzIGhhcHBlbnMgYnVpbGRpbmcgd2l0aCBnY2MgYXMgd2Vs bCBhcyB3aXRoCi1TdW4gY2MuICBQdXQgI2lmZGVmcyBpbiBja2NuZXQuaCB0byB1bmRlZmluZSB0 aGVzZSBzeW1ib2xzIChpZiB0aGV5IGFyZQotZGVmaW5lZCBhZnRlciBpbmNsdWRpbmcgYWxsIHRo ZSBoZWFkZXIgZmlsZXMpIGZvciBTb2xhcmlzLiAgSSBkaWRuJ3QgYm90aGVyCi10cnlpbmcgdG8g ZGlmZmVyZW50aWF0ZSB0aGUgU29sYXJpcyB2ZXJzaW9ucyBiZWNhdXNlIHRoZSBzeW1ib2xzIGFy ZSBub3QKLWRlZmluZWQgaW4gU29sYXJpcyA5IG9yIGVhcmxpZXIsIGFuZCB0aGV5IHNob3VsZCBu b3QgYmUgdXNlZCBpbiBTb2xhcmlzIDEwCi1vciAxMS4gIGNrY25ldC5oLCA2IEp1bHkgMjAxMS4K LQotRnJvbSBTTVM6ICBUbyBhdm9pZCB0aGUgJUNDLVctUFRSTUlTTUFUQ0gxIGNvbXBsYWludHMg ZnJvbSBja19zc2wuYywgYWRkCi10d28gKGhhcm1sZXNzKSB0eXBlIGNhc3RzIGF0IGxpbmVzIDI0 NjAgYW5kIDI3NzMsIDYgSnVseSAyMDExLgotCi1CdWlsdCBhbmQgdGVzdGVkIG9uIFNvbGFyaXMg OSwgU29sYXJpcyAxMCwgYW5kIFJIRUw1LiAgNiBKdWx5IDIwMTEuCi0KLS0tLSBDLUtlcm1pdCA5 LjAuMzAxIEJldGEuMDEgLS0tCi0KLVVwZGF0ZWQgdmVyc2lvbiB0ZXh0IGFuZCBkYXRlLiAgY2tj bWFpLmMsIG1ha2VmaWxlLCAxMSBKdWx5IDIwMTEuCi0KLS0tLSBDLUtlcm1pdCA5LjAuMzAxIC0t LQotCi1BZnRlciB0aGUgaW5pdGlhbCByZWxlYXNlIEkgbWFkZSBzb21lIHNtYWxsIGNoYW5nZXMg dGhhdCBhZmZlY3Qgb25seSBIUC1VWAotNS54OiBhZGRlZCAtRFZPSUQ9dm9pZCBhbmQgLURDS1ZP SUQ9dm9pZCB0byB0aGUgaHB1eDA1MDAgbWFrZWZpbGUgdGFyZ2V0cywKLWFuZCBwdXQgI2lmZGVm cyBhcm91bmQgI2luY2x1ZGUgPGVycm5vLmg+LCB3aGljaCAoaW4gdGhlIFdpblRDUCBjYXNlKSBk aWRuJ3QKLXByb3RlY3QgaXRzZWxmIGFnYWluc3QgbXVsdGlwbGUgaW5jbHVzaW9uICh3aGljaCBp cyBoYXBwZW5pbmcgaW4gb3RoZXIKLWhlYWRlciBmaWxlcywgbm90IGluIEtlcm1pdCkuICBtYWtl ZmlsZSwgY2t1Y21kLmMsIGNrdWNvbi5jLCBja3V0aW8uYywKLWNrdWZpby5jLCBja2NuZXQuYywg Y2tjZnRwLmMsIDE0IEp1bHkgMjAxMS4KLQotSW4gdGhlIG5ldyBjb3B5cmlnaHQgbm90aWNlLCBj b3BpZWQgZnJvbSB0aGUgQlNEIGxpY2Vuc2UgdGVtcGxhdGUsCi1vbmUgaW5zdGFuY2Ugb2YgInRo ZSA8T1JHQU5JWkFUSU9OPiIgd2FzIG5vdCByZXBsYWNlZCBieSAiQ29sdW1iaWEKLVVuaXZlcnNp dHkiLiAgRml4ZWQgaW4gY2tjbWFpLmMsIDE5IEp1bHkgMjAxMS4KLQotQWRkZWQgYW5vdGhlciBz ZWFyY2ggdGVybSBmb3IgbGs1Y3J5cHRvIGluIHRoZSBsaW51eCtrcmI1IHRhcmdldHMuCi1tYWtl ZmlsZSwgMjAgSnVseSAyMDExLgotCi1BZGRlZCBhbmQgc3VjY2Vzc2Z1bGx5IHVzZWQgYSBuZXcg c29sYXJpczkra3JiNStzc2wgdGFyZ2V0LgotbWFrZWZpbGUsIDggQXVnIDIwMTEuCi0KLUZyZWVC U0QgOSBzd2l0Y2hlZCBmcm9tIHV0bXAgdG8gdXRtcHgsIHdoaWNoIGJyb2tlIGNvbXBpbGF0aW9u IG9mIEtlcm1pdCBvbgotdGhhdCB2ZXJzaW9uLiAgRnVydGhlcm1vcmUsIHRoZSBVVUNQIGxvY2tm aWxlIGNvbnZlbnNpb25zIGNoYW5nZWQgaW4gRnJlZUJTRAotOCwgd2hpY2ggZGlkIG5vdCBwcmV2 ZW50IEMtS2VybWl0IGZyb20gY29tcGlsaW5nLCBidXQgYW55IGF0dGVtcHQgdG8gbG9jayBhCi10 ZXJtaW5hbCBvciBwdHkgZGV2aWNlIHdvdWxkIGZhaWwuICBUaGFua3MgdG8gQWxleGV5IERva3Vj aGFldiAiZGFuZmUiIGZvcgotZmluZGluZyBhbmQgcGF0Y2hpbmcgdGhlIHByb2JsZW1zLiAgSSB1 bmRpZCB0aGUgcGF0Y2hlcyBhbmQgZml4ZWQgdGhlIGNvZGUKLXNvIGl0IGRpZG4ndCBuZWVkIHRv IGJlIHBhdGNoZWQsIGV4Y2VwdCBmb3Igc29tZSBkZWNsYXJhdGlvbnMgaW4gdGhlCi1ja19jcnAu YyBtb2R1bGUsIHdoaWNoIEkgZmVsdCBoYWQgYmV0dGVyIG5vdCBiZSBjaGFuZ2VkIHdpdGhvdXQg dGhvcm91Z2hseQotdGVzdGluZyB0aGUgY2hhbmdlcyBvbiBkb3plbnMgb2YgZGlmZmVyZW50IHBs YXRmb3Jtcywgd2hpY2ggSSBkb24ndCBoYXZlCi10aW1lIHRvIGRvIChpbiBhbnkgY2FzZSwgaXQg YnVpbGRzIE9LIG9uIEZyZWVCU0QgOSB3aXRob3V0IHRoZSBwYXRjaCkuICBJbgotcGFydGljdWxh ciBJIG1hZGUgY29tcGxldGVseSBuZXcgbWFrZWZpbGUgdGFyZ2V0cyBmb3IgRnJlZUJTRCA0LjAg YW5kIGxhdGVyLAotd2hpY2ggYXV0b21hdGljYWxseSBkZXRlY3QgRnJlZUJTRCA4IGFuZCBGcmVl QlNEIDkgdG8gZW5hYmxlIHRoZSBhcHByb3ByaWF0ZQotZmVhdHVyZSB0ZXN0cyBpbiB0aGUgY29k ZSwgZm9yIGEgcmVndWxhciBidWlsZCBhbmQgYSBidWlsZCB3aXRoIE9wZW5TU0wuCi1UaGVzZSBj aGFuZ2VzIHNob3VsZCBhZmZlY3Qgb25seSBGcmVlQlNELiAgY2t1dGlvLmMsIGNrdWZpby5jLCBj a19jcnAuYywKLWNrdXVzNS5jLCBtYWtlZmlsZSwgMjAgQXVnIDIwMTEuCi0KLUNoYW5nZWQgdGhl IHZlcnNpb24gdG8gOS4wLjMwMiwgY2tjbWFpLmMsIDIwIEF1ZyAyMDExLgotCi1GaXhlZCBmcmVl YnNkK3NzbCBhbmQgbmV0YnNkK3NzbCwgbmV0YnNkK2tyYjUsIGFuZCBuZXRic2Qra3JiNStzc2wg dGFyZ2V0cwotdG8gaGF2ZSBDQz0kKENDKSBpbnN0ZWFkIG9mIENDPWdjYzsgZGl0dG8gZm9yIEND MiwgYW5kIGFkanVzdGVkIGxpbmUgYnJlYWtzCi1pbiBmcmVlYnNkIGFuZCBmcmVlYnNkK3NzbCB0 YXJnZXRzLiAgbWFrZWZpbGUsIDIxIEF1ZyAyMDExLgotCi0tLS0gOS4wLjMwMiAtLS0KLQotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKioqKioqKioqKioqKioqKioqKioqKioq KioKCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr Y2FzYy5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Nhc2MuaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhjZDJmNy4uMDAwMDAwMAotLS0gYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2FzYy5oCisrKyAvZGV2L251bGwK QEAgLTEsNjkgKzAsMCBAQAotLyoKLSAgRmlsZSBDS0NBU0MuSAotICBNbmVtb25pY3MgZm9yIEFT Q0lJIGNvbnRyb2wgY2hhcmFjdGVycyAoYW5kIFNwYWNlKSBmb3IgdXNlIHdpdGggQy1LZXJtaXQu Ci0qLwotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IChmZGNAY29sdW1iaWEuZWR1KS4KLSAg Q29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9y ayBDaXR5LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKLSAgICBUcnVzdGVlcyBvZiBD b2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdo dHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0g ICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBh bmQgcGVybWlzc2lvbnMuCi0qLwotI2lmbmRlZiBDS0NBU0NfSAotI2RlZmluZSBDS0NBU0NfSAot Ci0jZGVmaW5lIE5VTCAgJ1wwJyAgICAgICAvKiBOdWxsIEN0cmwtQCovCi0jZGVmaW5lIFNPSCAg ICAxICAgICAgICAvKiBTdGFydCBvZiBoZWFkZXIgQ3RybC1BICovCi0jZGVmaW5lIFNUWCAgICAy ICAgICAgICAvKiBDdHJsLUIgKi8KLSNkZWZpbmUgRVRYICAgIDMgICAgICAgIC8qIEN0cmwtQyAq LwotI2RlZmluZSBFT1QgICAgNCAgICAgICAgLyogQ3RybC1EICovCi0jZGVmaW5lIEVOUSAgICA1 ICAgICAgICAvKiBFTlEgQ3RybC1FICovCi0jZGVmaW5lIEFDSyAgICA2ICAgICAgICAvKiBDdHJs LUYgKi8KLSNkZWZpbmUgQkVMICAgIDcgICAgICAgIC8qIEJlbGwgKEJlZXApIEN0cmwtRyAqLwot I2RlZmluZSBCUyAgICAgOCAgICAgICAgLyogQmFja3NwYWNlIEN0cmwtSCAqLwotI2RlZmluZSBI VCAgICAgOSAgICAgICAgLyogSG9yaXpvbnRhbCBUYWIgQ3RybC1JICovCi0jZGVmaW5lIExGICAg IDEwICAgICAgICAvKiBMaW5lZmVlZCBDdHJsLUogKi8KLSNkZWZpbmUgVlQgICAgMTEgICAgICAg IC8qIFZlcnRpY2FsIFRhYiBDdHJsLUsgKi8KLSNkZWZpbmUgTkwgICAnXG4nICAgICAgIC8qIE5l d2xpbmUgKi8KLSNkZWZpbmUgRkYgICAgMTIgICAgICAgIC8qIEZvcm1mZWVkIEN0cmwtTCAqLwot I2RlZmluZSBDUiAgICAxMyAgICAgICAgLyogQ2FycmlhZ2UgUmV0dXJuIEN0cmwtTSAqLwotI2Rl ZmluZSBTTyAgICAxNCAgICAgICAgLyogU2hpZnQgT3V0IEN0cmwtTiAqLwotI2RlZmluZSBTSSAg ICAxNSAgICAgICAgLyogU2hpZnQgSW4gQ3RybC1PICovCi0jZGVmaW5lIERMRSAgIDE2ICAgICAg ICAvKiBEYXRhbGluayBFc2NhcGUgQ3RybC1QICovCi0jZGVmaW5lIFhPTiAgIDE3ICAgICAgICAv KiBYT04gQ3RybC1RICovCi0jZGVmaW5lIERDMSAgIDE3Ci0jZGVmaW5lIERDMiAgIDE4ICAgICAg ICAvKiBDdHJsLVIgKi8KLSNkZWZpbmUgWE9GRiAgMTkgICAgICAgIC8qIFhPRkYgQ3RybC1TICov Ci0jZGVmaW5lIERDMyAgIDE5Ci0jZGVmaW5lIERDNCAgIDIwICAgICAgICAvKiBDdHJsLVQgKi8K LSNkZWZpbmUgTkFLICAgMjEgICAgICAgIC8qIEN0cmwtVSAqLwotI2RlZmluZSBTWU4gICAyMiAg ICAgICAgLyogU1lOLCBDdHJsLVYgKi8KLSNkZWZpbmUgRVRCICAgMjMgICAgICAgIC8qIEN0cmwt VyAqLwotI2RlZmluZSBDQU4gICAyNCAgICAgICAgLyogQ0FOLCBDdHJsLVggKi8KLSNkZWZpbmUg WEVNICAgMjUgICAgICAgIC8qIEN0cmwtWSAod2FzIEVNIGJ1dCBjb25mbGljdHMgd2l0aCBPcGVu U1NMKSAqLwotI2RlZmluZSBTVUIgICAyNiAgICAgICAgLyogU1VCIEN0cmwtWiAqLwotI2RlZmlu ZSBFU0MgICAyNyAgICAgICAgLyogRXNjYXBlIEN0cmwtWyAqLwotI2RlZmluZSBYRlMgICAyOCAg ICAgICAgLyogRmllbGQgU2VwYXJhdG9yLCAgQ3RybC1CYWNrc2xhc2ggKi8KLSNkZWZpbmUgWEdT ICAgMjkgICAgICAgIC8qIEdyb3VwIFNlcGFyYXRvciwgIEN0cmwtUmlnaHRicmFja2V0ICovCi0j ZGVmaW5lIFhSUyAgIDMwICAgICAgICAvKiBSZWNvcmQgU2VwYXJhdG9yLCBDdHJsLUNpcmN1bWZs ZXggKi8KLSNkZWZpbmUgVVMgICAgMzEgICAgICAgIC8qIFVuaXQgU2VwYXJhdG9yLCAgIEN0cmwt VW5kZXJzY29yZSAqLwotI2RlZmluZSBTUCAgICAzMiAgICAgICAgLyogU3BhY2UgKi8KLSNkZWZp bmUgREVMICAxMjcgICAgICAgIC8qIERlbGV0ZSAoUnVib3V0KSAqLwotI2RlZmluZSBSVUIgIDEy NyAgICAgICAgLyogRGVsZXRlIChSdWJvdXQpICovCi0KLSNpZmRlZiBPUzIKLS8qCi0gIFRoZXNl IGFyZSBuZWVkZWQgaW4gT1MvMiwgc28gbGV0J3Mgbm90IGNhdXNlIGFueSB1bm5lY2Vzc2FyeSBj b25mbGljdHMuCi0qLwotI2RlZmluZSBfQ1NJICAwMjMzICAgICAgLyogOC1iaXQgQ29udHJvbCBT ZXF1ZW5jZSBJbnRyb2R1Y2VyICovCi0jZGVmaW5lIF9TUzIgIDAyMTYgICAgICAvKiA4LWJpdCBT aW5nbGUgU2hpZnQgMiAqLwotI2RlZmluZSBfU1MzICAwMjE3ICAgICAgLyogOC1iaXQgU2luZ2xl IFNoaWZ0IDMgKi8KLSNkZWZpbmUgX0RDUyAgMDIyMCAgICAgIC8qIDgtYml0IERldmljZSBDb250 cm9sIFN0cmluZyBJbnRyb2R1Y2VyICovCi0jZGVmaW5lIF9TVDggIDAyMzQgICAgICAvKiA4LWJp dCBTdHJpbmcgVGVybWluYXRvciAqLwotI2RlZmluZSBfT1NDICAwMjM1ICAgICAgLyogOC1iaXQg T3BlcmF0aW5nIFN5c3RlbSBDb21tYW5kICovCi0jZGVmaW5lIF9QTTggIDAyMzYgICAgICAvKiA4 LWJpdCBQcml2YWN5IE1lc3NhZ2UgKi8KLSNkZWZpbmUgX0FQQyAgMDIzNyAgICAgIC8qIDgtYml0 IEFwcGxpY2F0aW9uIFByb2dyYW0gQ29tbWFuZCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlm IC8qIENLQ0FTQ19IICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja2Nid3IudHh0IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja2Nid3IudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzNjOTQ2Li4w MDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjYndy LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE1MTQgKzAsMCBAQAotCi0gICBbMV1UaGUgQ29sdW1i aWEgQ3Jvd24gVGhlIEtlcm1pdCBQcm9qZWN0IHwgQ29sdW1iaWEgVW5pdmVyc2l0eQotICAgNjEy IFdlc3QgMTE1dGggU3RyZWV0LCBOZXcgWW9yayBOWSAxMDAyNSBVU0EgbyBbMl1rZXJtaXRAY29s dW1iaWEuZWR1Ci0gICAuLi5zaW5jZSAxOTgxCi0gICBbM11Ib21lIFs0XUtlcm1pdCA5NSBbNV1D LUtlcm1pdCBbNl1TY3JpcHRzIFs3XUN1cnJlbnQgWzhdTmV3IFs5XUZBUQotICAgWzEwXVN1cHBv cnQKLQotICAgQXMgb2Y6IEMtS2VybWl0IDkuMC4zMDAsIDMwIEp1bmUgMjAxMQotICAgVGhpcyBw YWdlIGxhc3QgdXBkYXRlZDogVHVlIEp1biAyOCAwODo1NDozMCAyMDExIChOZXcgWW9yayBVU0Eg VGltZSkKLQotICAgICBJRiBZT1UgQVJFIFJFQURJTkcgQSBQTEFJTi1URVhUIHZlcnNpb24gb2Yg dGhpcyBkb2N1bWVudCwgaXQgaXMgYQotICAgICBwbGFpbi10ZXh0IGR1bXAgb2YgYSBXZWIgcGFn ZS4gWW91IGNhbiB2aXNpdCB0aGUgb3JpZ2luYWwgKGFuZAotICAgICBwb3NzaWJseSBtb3JlIHVw LXRvLWRhdGUpIFdlYiBwYWdlIGhlcmU6Ci0KLSAgWzExXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2Nid3IuaHRtbAotCi0gICBUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHBsYXRmb3Jt LWluZGVwZW5kZW50IEMtS2VybWl0IGhpbnRzIGFuZCB0aXBzLgotICAgQWxzbyBzZWUgdGhlIHBs YXRmb3JtLXNwZWNpZmljIEMtS2VybWl0IGhpbnRzIGFuZCB0aXBzIGRvY3VtZW50IGZvcgotICAg eW91ciBwbGF0Zm9ybSwgZm9yIGV4YW1wbGU6Ci0KLSAgWzEyXWh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbAotCi0gICBmb3IgVW5peC4gVGhpcyBkb2N1bWVudCBhbHNv IGFwcGxpZXMgdG8gWzEzXUtlcm1pdCA5NSBmb3IgV2luZG93cywKLSAgIHdoaWNoIGlzIGJhc2Vk IG9uIEMtS2VybWl0LgotCi0gICBbIFsxNF1DLUtlcm1pdCBdIFsgWzE1XVRVVE9SSUFMIF0KLQot Q09OVEVOVFMKLQotICAgMC4gWzE2XVBBVENIRVMKLSAgIDEuIFsxN11JTkNPTVBBVElCTEUgQ0hB TkdFUwotICAgMi4gWzE4XVRIRSBDLUtFUk1JVCBDT01NQU5EIFBBUlNFUgotICAgMy4gWzE5XU1V TFRJUExFIFNFU1NJT05TCi0gICA0LiBbMjBdTkVUV09SSyBDT05ORUNUSU9OUwotICAgNS4gWzIx XU1PREVNUyBBTkQgRElBTElORwotICAgNi4gWzIyXURJQUxJTkcgSElOVFMgQU5EIFRJUFMKLSAg IDcuIFsyM11URVJNSU5BTCBTRVJWRVJTCi0gICA4LiBbMjRdVEVSTUlOQUwgRU1VTEFUSU9OCi0g ICA5LiBbMjVdS0VZIE1BUFBJTkcKLSAgMTAuIFsyNl1GSUxFIFRSQU5TRkVSCi0gIDExLiBbMjdd U0NSSVBUIFBST0dSQU1NSU5HCi0KLTAuIFBBVENIRVMKLQotICAgWyBbMjhdVG9wIF0gWyBbMjld Q29udGVudHMgXSBbIFszMF1OZXh0IF0KLQotICAgU291cmNlLWxldmVsIHBhdGNoZXMgZm9yIEMt S2VybWl0IDguMC4yMTE6Ci0KLSAgICAgKE5vbmUpCi0KLTEuIElOQ09NUEFUSUJMRSBDSEFOR0VT Ci0KLSAgIFsgWzMxXVRvcCBdIFsgWzMyXUNvbnRlbnRzIF0gWyBbMzNdTmV4dCBdCi0KLSAgIFRo ZXNlIGFyZSBub3QgbmVjZXNzYXJpbHkgZXhoYXVzdGl2ZSBsaXN0cy4KLQotMS4xLiBDLUtlcm1p dCA2LjAKLQotICAgQy1LZXJtaXQgNi4wIHdhcyByZWxlYXNlZCA2IFNlcHRlbWJlciAxOTk2IGFu ZCBpcyBjb21wbGV0ZWx5IGRvY3VtZW50ZWQKLSAgIGluIFszNF1Vc2luZyBDLUtlcm1pdCwgMm5k IEVkaXRpb24uIFRoZSBmb2xsb3dpbmcgaW5jb21wYXRpYmxlIGNoYW5nZXMKLSAgIHdlcmUgbWFk ZSBpbiBDLUtlcm1pdCA2LjA6Ci0KLSAgICAgKiBVbmxlc3MgeW91IHRlbGwgQy1LZXJtaXQgb3Ro ZXJ3aXNlLCBpZiBhIHNlcmlhbCBvciBuZXR3b3JrCi0gICAgICAgY29ubmVjdGlvbiBzZWVtcyB0 byBiZSBvcGVuLCBhbmQgeW91IGF0dGVtcHQgdG8gRVhJVCBvciB0byBvcGVuIGEKLSAgICAgICBu ZXcgY29ubmVjdGlvbiwgQy1LZXJtaXQgd2FybnMgeW91IHRoYXQgYW4gYWN0aXZlIGNvbm5lY3Rp b24KLSAgICAgICBhcHBlYXJzIHRvIGJlIG9wZW4gYW5kIGFza3MgeW91IGlmIHlvdSByZWFsbHkg d2FudCB0byBjbG9zZSBpdC4gSWYKLSAgICAgICB5b3UgZG8gbm90IHdhbnQgdGhlc2Ugd2Fybmlu Z3MsIGFkZCBTRVQgRVhJVCBXQVJOSU5HIE9GRiB0byB5b3VyCi0gICAgICAgY3VzdG9taXphdGlv biBmaWxlIG9yIHNjcmlwdCwgb3IgZ2l2ZSB0aGlzIGNvbW1hbmQgYXQgdGhlIHByb21wdC4KLSAg ICAgKiBUaGUgZGVmYXVsdCBmb3IgU0VUIHsgU0VORCwgUkVDRUlWRSB9IFBBVEhOQU1FUyB3YXMg Y2hhbmdlZCBmcm9tIE9OCi0gICAgICAgdG8gT0ZGLCB0byBwcmV2ZW50IHVuZXhwZWN0ZWQgY3Jl YXRpb24gb2YgZGlyZWN0b3JpZXMgYW5kCi0gICAgICAgZGVwb3NpdGluZyBvZiBpbmNvbWluZyBm aWxlcyBpbiBwbGFjZXMgeW91IG1pZ2h0IG5vdCBrbm93IHRvIGxvb2suCi0gICAgICogVGhlIGRl ZmF1bHQgZm9yIFNFVCBGSUxFIElOQ09NUExFVEUgd2FzIGNoYW5nZWQgZnJvbSBESVNDQVJEIHRv Ci0gICAgICAgS0VFUCB0byBhbGxvdyBmb3IgZmlsZSB0cmFuc2ZlciByZWNvdmVyeS4KLSAgICAg KiBUaGUgZGVmYXVsdCBmaWxlLXRyYW5zZmVyIGJsb2NrLWNoZWNrIGlzIG5vdyAzLCByYXRoZXIg dGhhbiAxLiBJZgotICAgICAgIHRoZSBvdGhlciBLZXJtaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGlz LCB0aGUgdHdvIHdpbGwgZHJvcCBiYWNrIHRvCi0gICAgICAgdHlwZSAxIGF1dG9tYXRpY2FsbHkg dW5sZXNzIHRoZSBvdGhlciBLZXJtaXQgZmFpbHMgdG8gZm9sbG93IHRoZQotICAgICAgIHByb3Rv Y29sIHNwZWNpZmljYXRpb24uCi0gICAgICogVGhlIGRlZmF1bHQgZmxvdy1jb250cm9sIGlzIG5v dyAiYXV0byIgKCJkbyB0aGUgcmlnaHQgdGhpbmcgZm9yCi0gICAgICAgZWFjaCB0eXBlIG9mIGNv bm5lY3Rpb24iKSwgbm90IFhvbi9Yb2ZmLgotICAgICAqIEJhY2tzbGFzaCAoXCkgaXMgbm8gbG9u Z2VyIGEgY29tbWFuZCBjb250aW51YXRpb24gY2hhcmFjdGVyLiBPbmx5IC0KLSAgICAgICAoaHlw aGVuLCBkYXNoKSBtYXkgYmUgdXNlZCBmb3IgdGhpcyBpbiBDLUtlcm1pdCA2LjAgYW5kIGxhdGVy LgotICAgICAqIE5lZ2F0aXZlIElOUFVUIHRpbWVvdXQgbm93IHJlc3VsdHMgaW4gaW5maW5pdGUg d2FpdCwgcmF0aGVyIHRoYW4gMQotICAgICAgIHNlY29uZC4KLQotMS4yLiBDLUtlcm1pdCA3LjAK LQotICAgQy1LZXJtaXQgNy4wIHdhcyByZWxlYXNlZCAxIEphbnVhcnkgMjAwMC4gSXRzIG5ldyBm ZWF0dXJlcyBhcmUKLSAgIGRvY3VtZW50ZWQgaW4gdGhlIEMtS2VybWl0IDcuMCBTdXBwbGVtZW50 LAotICAgWzM1XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Mi5odG1sLiBU aGUgZm9sbG93aW5nCi0gICBpbmNvbXBhdGlibGUgY2hhbmdlcyB3ZXJlIG1hZGUgaW4gQy1LZXJt aXQgNy4wOgotICAgICAqIFRoZSAibXVsdGlsaW5lIEdFVCIgY29tbWFuZCBpcyBnb25lLiBOb3cg dXNlIGVpdGhlciBvZiB0aGUKLSAgICAgICBmb2xsb3dpbmcgZm9ybXMgaW5zdGVhZDoKLSAgZ2V0 IHJlbW90ZS1uYW1lIGxvY2FsLW5hbWUKLSAgZ2V0IC9hcy1uYW1lOmxvY2FsLW5hbWUgcmVtb3Rl LW5hbWUKLQotICAgICAgIElmIGVpdGhlciBuYW1lIGNvbnRhaW5zIHNwYWNlcywgZW5jbG9zZSBp dCBpbiBicmFjZXMgKG9yLCBpbgotICAgICAgIEMtS2VybWl0IDguMCwgZG91YmxlcXVvdGVzKS4K LSAgICAgKiBUbyBpbmNsdWRlIG11bHRpcGxlIGZpbGUgc3BlY2lmaWNhdGlvbnMgaW4gYSBHRVQg Y29tbWFuZCwgeW91IG11c3QKLSAgICAgICBub3cgdXNlIE1HRVQgcmF0aGVyIHRoYW4gR0VUOgot ICBtZ2V0IGZpbGUxIGZpbGUyIGZpbGUzIC4uLgotCi0gICAgICogQy1LZXJtaXQgNy4wIGFuZCBs YXRlciB1c2UgRkFTVCBLZXJtaXQgcHJvdG9jb2wgc2V0dGluZ3MgYnkKLSAgICAgICBkZWZhdWx0 LiBUaGlzIGluY2x1ZGVzICJ1bnByZWZpeGluZyIgb2YgY2VydGFpbiBjb250cm9sIGNoYXJhY3Rl cnMuCi0gICAgICAgQmVjYXVzZSBvZiB0aGlzLCBmaWxlIHRyYW5zZmVycyB0aGF0IHdvcmtlZCB3 aXRoIHByZXZpb3VzIHJlbGVhc2VzCi0gICAgICAgbWlnaHQgbm90IHdvcmsgaW4gdGhlIG5ldyBy ZWxlYXNlIGVzcGVjaWFsbHkgYWdhaW5zdCBhCi0gICAgICAgbm9uLUtlcm1pdC1Qcm9qZWN0IEtl cm1pdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiAoYnV0IGl0IGlzIG1vcmUKLSAgICAgICBsaWtl bHkgdGhhdCB0aGV5IHdpbGwgd29yaywgYW5kIG11Y2ggZmFzdGVyKS4gSWYgYSB0cmFuc2ZlciBm YWlscywKLSAgICAgICB5b3UnbGwgZ2V0IGEgY29udGV4dC1zZW5zaXRpdmUgaGludCBzdWdnZXN0 aW5nIHBvc3NpYmxlIGNhdXNlcyBhbmQKLSAgICAgICBjdXJlcy4gVXN1YWxseSBTRVQgUFJFRklY SU5HIEFMTCBkb2VzIHRoZSB0cmljay4KLSAgICAgKiBCeSBkZWZhdWx0IEMtS2VybWl0IDcuMCBh bmQgbGF0ZXIgc2VuZCBmaWxlcyBpbiB0ZXh0IG9yIGJpbmFyeSBtb2RlCi0gICAgICAgYnkgbG9v a2luZyBhdCBlYWNoIGZpbGUgdG8gc2VlIHdoaWNoIGlzIHRoZSBhcHByb3ByaWF0ZSBtb2RlLiBU bwotICAgICAgIHJlc3RvcmUgdGhlIHByZXZpb3VzIGJlaGF2aW9yLCBwdXQgU0VUIFRSQU5TRkVS IE1PREUgTUFOVUFMIGFuZCB0aGUKLSAgICAgICBkZXNpcmVkIFNFVCBGSUxFIFRZUEUgKFRFWFQg b3IgQklOQVJZKSBpbiB5b3VyIEMtS2VybWl0Ci0gICAgICAgaW5pdGlhbGl6YXRpb24gZmlsZS4K LSAgICAgKiBUaGUgUkVTRU5EIGFuZCBSRUdFVCBjb21tYW5kcyBhdXRvbWF0aWNhbGx5IHN3aXRj aCB0byBiaW5hcnkgbW9kZTsKLSAgICAgICBwcmV2aW91c2x5IGlmIFJFU0VORCBvciBSRUdFVCB3 ZXJlIGF0dGVtcHRlZCB3aGVuIEZJTEUgVFlQRSB3YXMKLSAgICAgICBURVhULCB0aGVzZSBjb21t YW5kcyB3b3VsZCBmYWlsIGltbWVkaWF0ZWx5LCB3aXRoIGEgbWVzc2FnZSB0ZWxsaW5nCi0gICAg ICAgeW91IHRoZXkgd29yayBvbmx5IHdoZW4gdGhlIEZJTEUgVFlQRSBpcyBCSU5BUlkuIE5vdyB0 aGV5IHNpbXBseSBkbwotICAgICAgIHRoaXMgZm9yIHlvdS4KLSAgICAgKiBTRVQgUFJFRklYSU5H IENBVVRJT1VTIGFuZCBNSU5JTUFMIG5vdyBib3RoIHByZWZpeCBsaW5lZmVlZCAoMTAgYW5kCi0g ICAgICAgMTM4KSBpbiBjYXNlIHJsb2dpbiwgc3NoLCBvciBjdSBhcmUgImluIHRoZSBtaWRkbGUi LCBzaW5jZQotICAgICAgIG90aGVyd2lzZSA8TEY+fiBtaWdodCBhcHBlYXIgaW4gS2VybWl0IHBh Y2tldHMsIGFuZCB0aGlzIHdvdWxkCi0gICAgICAgY2F1c2UgcmxvZ2luLCBzc2gsIG9yIGN1IHRv IGRpc2Nvbm5lY3QsIHN1c3BlbmQsZXNjYXBlIGJhY2ssIG9yCi0gICAgICAgb3RoZXJ3aXNlIHdy ZWNrIHRoZSBmaWxlIHRyYW5zZmVyLiBYb24gYW5kIFhvZmYgYXJlIG5vdyBhbHdheXMKLSAgICAg ICBwcmVmaXhlZCB0b28sIGV2ZW4gd2hlbiBYb24vWG9mZiBmbG93IGNvbnRyb2wgaXMgbm90IGlu IGVmZmVjdCwKLSAgICAgICBzaW5jZSB1bnByZWZpeGluZyB0aGVtIGhhcyBwcm92ZW4gZGFuZ2Vy b3VzIG9uIFRDUC9JUCBjb25uZWN0aW9ucy4KLSAgICAgKiBJbiBVTklYLCBWTVMsIFdpbmRvd3Ms IGFuZCBPUy8yLCB0aGUgRElSRUNUT1JZIGNvbW1hbmQgaXMgYnVpbHQKLSAgICAgICBpbnRvIEMt S2VybWl0IGl0c2VsZiByYXRoZXIgdGhhbiBpbXBsZW1lbnRlZCBieSBydW5uaW5nIGFuIGV4dGVy bmFsCi0gICAgICAgY29tbWFuZCBvciBwcm9ncmFtLiBUaGUgYnVpbHQtaW4gY29tbWFuZCBtaWdo dCBub3QgYmVoYXZlIHRoZSB3YXkKLSAgICAgICB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZXh0ZXJu YWwgb25lIGRpZCwgYnV0IG1hbnkgb3B0aW9ucyBhcmUKLSAgICAgICBhdmFpbGFibGUgZm9yIGN1 c3RvbWl6YXRpb24uIE9mIGNvdXJzZSB0aGUgdW5kZXJseWluZwotICAgICAgIHBsYXRmb3JtLXNw ZWNpZmljIGNvbW1hbmQgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkIHdpdGggIiEiLCAiQCIsIG9yCi0g ICAgICAgIlJVTiIgd2hlcmV2ZXIgdGhlIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBmb3JiaWQuIElu IFVOSVgsIHRoZSAibHMiCi0gICAgICAgY29tbWFuZCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkg YXMgImxzIiBpbiBDLUtlcm1pdC4KLSAgICAgKiBTRU5EID8gcHJpbnRzIGEgbGlzdCBvZiBzd2l0 Y2hlcyByYXRoZXIgdGhhbiBhIGxpc3Qgb2YgZmlsZW5hbWVzLgotICAgICAgIElmIHlvdSB3YW50 IHRvIHNlZSBhIGxpc3Qgb2YgZmlsZW5hbWVzLCB1c2UgYSAoc3lzdGVtLWRlcGVuZGVudCkKLSAg ICAgICBjb25zdHJ1Y3Rpb24gc3VjaCBhcyBTRU5EIC4vPyAoZm9yIFVOSVgsIFdpbmRvd3MsIG9y IE9TLzIpLCBTRU5ECi0gICAgICAgW10/IChWTVMpLCBldGMuCi0gICAgICogSW4gVU5JWCwgT1Mt OSwgYW5kIEtlcm1pdCA5NSwgdGhlIHdpbGRjYXJkIGNoYXJhY3RlcnMgaW4gcHJldmlvdXMKLSAg ICAgICB2ZXJzaW9ucyB3ZXJlICogYW5kID8uIEluIEMtS2VybWl0IDcuMCB0aGV5IGFyZSAqLCA/ LCBbLCBdLCB7LCBhbmQKLSAgICAgICB9LCB3aXRoIGRhc2ggdXNlZCBpbnNpZGUgW10ncyB0byBk ZW5vdGUgcmFuZ2VzIGFuZCBjb21tYSB1c2VkCi0gICAgICAgaW5zaWRlIHt9IHRvIHNlcGFyYXRl IGxpc3QgZWxlbWVudHMuIElmIHlvdSBuZWVkIHRvIGluY2x1ZGUgYW55IG9mCi0gICAgICAgdGhl c2UgY2hhcmFjdGVycyBsaXRlcmFsbHkgaW4gYSBmaWxlbmFtZSwgcHJlY2VkZSBlYWNoIG9uZSB3 aXRoCi0gICAgICAgYmFja3NsYXNoIChcKS4KLSAgICAgKiBTRVQgUVVJRVQgeyBPTiwgT0ZGIH0g aXMgbm93IG9uIHRoZSBjb21tYW5kIHN0YWNrLCBqdXN0IGxpa2UgU0VUCi0gICAgICAgSU5QVVQg Q0FTRSwgU0VUIENPVU5ULCBTRVQgTUFDUk8gRVJST1IsIGV0YywgYXMgZGVzY3JpYmVkIG9uIHAu NDU4Ci0gICAgICAgb2YgWzM2XVVzaW5nIEMtS2VybWl0LCAybmQgRWRpdGlvbi4gVGhpcyBhbGxv d3MgYW55IG1hY3JvIG9yCi0gICAgICAgY29tbWFuZCBmaWxlIHRvIFNFVCBRVUlFVCBPTiBvciBP RkYgd2l0aG91dCB3b3JyeWluZyBhYm91dCBzYXZpbmcKLSAgICAgICBhbmQgcmVzdG9yaW5nIHRo ZSBnbG9iYWwgUVVJRVQgdmFsdWUuIEZvciBleGFtcGxlLCB0aGlzIGxldHMgeW91Ci0gICAgICAg d3JpdGUgYSBzY3JpcHQgdGhhdCB0cmllcyBTRVQgTElORSBvbiBsb3RzIG9mIGRldmljZXMgdW50 aWwgaXQKLSAgICAgICBmaW5kcyBvbmUgZnJlZSB3aXRob3V0IHNwZXdpbmcgb3V0IGxvYWRzIG9m IGVycm9yIG1lc3NhZ2VzLCBhbmQKLSAgICAgICBhbHNvIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUg Z2xvYmFsIFFVSUVUIHNldHRpbmcsIHdoYXRldmVyIGl0IHdhcy4KLSAgICAgKiBCZWNhdXNlIG9m IHRoZSBuZXcgIi4iIG9wZXJhdG9yICh3aGljaCBpbnRyb2R1Y2VzIGFzc2lnbm1lbnRzKSwKLSAg ICAgICBtYWNyb3Mgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCAiLiIgY2FuIG5vdCBiZSBpbnZva2Vk ICJieSBuYW1lIi4KLSAgICAgICBIb3dldmVyLCB0aGV5IHN0aWxsIGNhbiBiZSBpbnZva2VkIHdp dGggRE8gb3IgXGZleGVjdXRlKCkuCi0gICAgICogVGhlIHN5bnRheCBvZiB0aGUgRVZBTFVBVEUg Y29tbWFuZCBoYXMgY2hhbmdlZC4gVG8gcmVzdG9yZSB0aGUKLSAgICAgICBwcmV2aW91cyBzeW50 YXgsIHVzZSBTRVQgRVZBTFVBVEUgT0xELgotICAgICAqIFRoZSBcdihkaXJlY3RvcnkpIHZhcmlh YmxlIG5vdyBpbmNsdWRlcyB0aGUgdHJhaWxpbmcgZGlyZWN0b3J5Ci0gICAgICAgc2VwYXJhdG9y OyBpbiBwcmV2aW91cyByZWxlYXNlcyBpdCBkaWQgbm90LiBUaGlzIGlzIHRvIGFsbG93Ci0gICAg ICAgY29uc3RydWN0aW9ucyBzdWNoIGFzOgotICBjZCBcdihkaXIpZGF0YS50bXAKLQotICAgICAg IHRvIHdvcmsgYWNyb3NzIHBsYXRmb3JtcyB0aGF0IG1pZ2h0IGhhdmUgZGlmZmVyZW50IGRpcmVj dG9yeQotICAgICAgIG5vdGF0aW9uLCBzdWNoIGFzIFVOSVgsIFdpbmRvd3MsIGFuZCBWTVMuCi0g ICAgICogUHJpb3IgdG8gQy1LZXJtaXQgNy4wLCB0aGUgRkxPVy1DT05UUk9MIHNldHRpbmcgd2Fz IGdsb2JhbCBhbmQKLSAgICAgICBzdGlja3kuIEluIEMtS2VybWl0IDcuMCwgdGhlcmUgaXMgYW4g YXJyYXkgb2YgZGVmYXVsdCBmbG93LWNvbnRyb2wKLSAgICAgICB2YWx1ZXMgZm9yIGVhY2gga2lu ZCBvZiBjb25uZWN0aW9uLCB0aGF0IGFyZSBhcHBsaWVkIGF1dG9tYXRpY2FsbHkKLSAgICAgICBh dCBTRVQgTElORS9QT1JUL0hPU1QgdGltZS4gVGh1cyBhIFNFVCBGTE9XIGNvbW1hbmQgZ2l2ZW4g YmVmb3JlCi0gICAgICAgU0VUIExJTkUvUE9SVC9IT1NUIGlzIGxpa2VseSB0byBiZSB1bmRvbmUu IFRoZXJlZm9yZSBTRVQgRkxPVyBjYW4KLSAgICAgICBiZSBndWFyYW50ZWVkIHRvIGhhdmUgdGhl IGRlc2lyZWQgZWZmZWN0IG9ubHkgaWYgZ2l2ZW4gYWZ0ZXIgdGhlCi0gICAgICAgU0VUIExJTkUv UE9SVC9IT1NUIGNvbW1hbmQuCi0gICAgICogQ2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiB3b3Jr cyBkaWZmZXJlbnRseSBpbiB0aGUgVFJBTlNNSVQgY29tbWFuZAotICAgICAgIHdoZW4gKGEpIHRo ZSBmaWxlIGNoYXJhY3Rlci1zZXQgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBsb2NhbCBlbmQgb2YK LSAgICAgICB0aGUgdGVybWluYWwgY2hhcmFjdGVyLXNldCwgb3IgKGIpIHdoZW4gdGhlIHRlcm1p bmFsIGNoYXJhY3Rlci1zZXQKLSAgICAgICBpcyBUUkFOU1BBUkVOVC4KLQotMS4zLiBDLUtlcm1p dCA4LjAKLQotICAgVGhlIGZvbGxvd2luZyBpbmNvbXBhdGlibGUgY2hhbmdlcyB3ZXJlIG1hZGUg aW4gQy1LZXJtaXQgOC4wOgotICAgICAqIEMtS2VybWl0IG5vdyBhY2NlcHRzIGRvdWJsZXF1b3Rl cyBpbiBtb3N0IGNvbnRleHRzIHdoZXJlIHlvdQotICAgICAgIHByZXZpb3VzbHkgaGFkIHRvIHVz ZSBicmFjZXMgdG8gZ3JvdXAgbXVsdGlwbGUgd29yZHMgaW50byBhIHNpbmdsZQotICAgICAgIGZp ZWxkLCBvciB0byBmb3JjZSBpbmNsdXNpb24gb2YgbGVhZGluZyBvciB0cmFpbGluZyBibGFua3Mu IFRoaXMKLSAgICAgICBtaWdodCBjYXVzZSBwcm9ibGVtcyBpbiBjb250ZXh0cyB3aGVyZSB5b3Ug d2FudGVkIHRoZSBkb3VibGVxdW90ZQotICAgICAgIGNoYXJhY3RlcnMgdG8gYmUgdGFrZW4gbGl0 ZXJhbGx5LiBDb25zdWx0IFszN11TZWN0aW9uIDUgb2YgdGhlCi0gICAgICAgWzM4XUMtS2VybWl0 IDguMCBVcGRhdGUgTm90ZXMgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCi0gICAgICogVXNpbmcg dGhlIFNFVCBIT1NUIGNvbW1hbmQgdG8gbWFrZSBIVFRQIGNvbm5lY3Rpb25zIGlzIG5vIGxvbmdl cgotICAgICAgIHN1cHBvcnRlZC4gSW5zdGVhZCwgdXNlIHRoZSBuZXcgWzM5XUhUVFAgT1BFTiBj b21tYW5kLgotCi0xLjQuIEMtS2VybWl0IDkuMAotCi0gICBUaGUgWzQwXVxmc3BsaXQoKSBmdW5j dGlvbiBpcyBpbmNyZWRpYmx5IGhhbmR5LCBpdCBjYW4gZG8gYWxtb3N0Ci0gICBhbnl0aGluZywg dXAgdG8gYW5kIGluY2x1ZGluZyBwYXJzaW5nIGEgTElTUCBwcm9ncmFtICh0aGUgdW5kZXJseWlu ZwotICAgY29kZSBpcyB0aGUgYmFzaXMgb2YgdGhlIFs0MV1TLUV4cHJlc3Npb24gaW50ZXJwcmV0 ZXIpLiBCdXQgZGlkIHlvdQotICAgZXZlciB0cnkgdG8gdXNlIGl0IHRvIHBhcnNlIChzYXkpIGEg VGFiLVNlcGFyYXRlZC1MaXN0IChUU1YgZmlsZSkgb3IKLSAgIENvbW1hLVNlcGFyYXRlZC1MaXN0 IChDU1YpPyBJdCB3b3JrcyBhcyBleHBlY3RlZCBhcyBsb25nIGFzIHRoZSBkYXRhCi0gICBjb250 YWlucyBvbmx5IDctYml0IGNoYXJhY3RlcnMuIEJ1dCBpZiB5b3VyIGRhdGEgY29udGFpbnMgKHNh eSkgU3BhbmlzaAotICAgb3IgR2VybWFuIG9yIFJ1c3NpYW4gdGV4dCB3cml0dGVuIGluIGFuIDgt Yml0IGNoYXJhY3RlciBzZXQgc3VjaCBhcyBJU08KLSAgIDg4NTktMSwgZXZlcnkgOC1iaXQgY2hh cmFjdGVyIChhbnkgdmFsdWUgMTI4LTI1NSkgaXMgdHJlYXRlZCBhcyBhIGJyZWFrCi0gICBjaGFy YWN0ZXIuIFRoaXMgaXMgZml4ZWQgaW4gQy1LZXJtaXQgOS4wIGJ5IHRyZWF0aW5nIGFsbCA4LWJp dCBieXRlcyBhcwotICAgImluY2x1ZGUiIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gYnJlYWsgY2hh cmFjdGVycywgYSB0b3RhbCByZXZlcnNhbCBvZgotICAgcGFzdCBiZWhhdmlvci4gSSBkb24ndCB0 aGluayBpdCB3aWxsIGFmZmVjdCBhbnlvbmUgdGhvdWdoLCBiZWNhdXNlIGlmCi0gICB0aGlzIGhh ZCBoYXBwZW5lZCB0byBhbnlvbmUsIEkgd291bGQgaGF2ZSBoZWFyZCBhYm91dCBpdCEKLQotICAg U2luY2UgbW9zdCBzdGFuZGFyZCA4LWJpdCBjaGFyYWN0ZXIgc2V0cyBoYXZlIGNvbnRyb2wgY2hh cmFjdGVycyBpbgotICAgcG9zaXRpb25zIDEyOC0xNjAsIGl0IG1pZ2h0IGhhdmUgbWFkZSBzZW5z ZSB0byBrZWVwIDEyOC0xNjAgaW4gdGhlCi0gICBicmVhayBzZXQsIGJ1dCB3aXRoIHRoZSBwcm9s aWZlcmF0aW9uIG9mIE1pY3Jvc29mdCBXaW5kb3dzIGNvZGUgcGFnZXMsCi0gICB0aGVyZSBpcyBu byB0ZWxsaW5nIHdoaWNoIDgtYml0IGNoYXJhY3RlciBpcyBsaWtlbHkgdG8gYmUgc29tZSBraW5k IG9mCi0gICB0ZXh0LCBlLmcuICJzbWFydCBxdW90ZXMiIG9yIEVhc3QgRXVyb3BlYW4gb3IgVHVy a2lzaCBhY2NlbnRlZCBsZXR0ZXJzLgotCi0yLiBUSEUgQy1LRVJNSVQgQ09NTUFORCBQQVJTRVIK LQotICAgWyBbNDJdVG9wIF0gWyBbNDNdQ29udGVudHMgXSBbIFs0NF1OZXh0IF0gWyBbNDVdUHJl dmlvdXMgXQotCi0gICBWYXJpb3VzIGNvbW1hbmQtcmVsYXRlZCBsaW1pdHMgYXJlIHNob3duIGlu IHRoZSBmb2xsb3dpbmcgdGFibGUsIGluCi0gICB3aGljaCB0aGUgc2FtcGxlIHZhbHVlcyBhcmUg Zm9yIGEgImxhcmdlIG1lbW9yeSBtb2RlbCIgYnVpbGQgb2YKLSAgIEMtS2VybWl0LCB0eXBpY2Fs IGZvciBtb2Rlcm4gcGxhdGZvcm1zIChMaW51eCwgU29sYXJpcywgQUlYLCBWTVMsIGV0YykuCi0g ICBZb3UgY2FuIHNlZSB0aGUgdmFsdWVzIGZvciB5b3VyIHZlcnNpb24gb2YgS2VybWl0IGJ5IGdp dmluZyB0aGUgU0hPVwotICAgRkVBVFVSRVMgY29tbWFuZC4gVGhlIG1heGltdW0gbGVuZ3RoIGZv ciBhIEtlcm1pdCBjb21tYW5kIChDTURCTCkgYWxzbwotICAgZGV0ZXJtaW5lcyB0aGUgbWF4aW11 bSBsZW5ndGggZm9yIGEgbWFjcm8gZGVmaW5pdGlvbiwgc2luY2UgREVGSU5FIGlzCi0gICBpdHNl bGYgYSBjb21tYW5kLiBUaGUgbWF4aW11bSBsZW5ndGggZm9yIGEgdmFyaWFibGUgbmFtZSBpcyBi ZXR3ZWVuIDI1NgotICAgYW5kIDQwOTYgY2hhcmFjdGVycywgZGVwZW5kaW5nIG9uIHRoZSBwbGF0 Zm9ybTsgZm9yIGFycmF5IGRlY2xhcmF0aW9ucwotICAgYW5kIHJlZmVyZW5jZXMsIHRoYXQgaW5j bHVkZXMgdGhlIHN1YnNjcmlwdC4KLQotICAgSXRlbSBTeW1ib2wgU2FtcGxlCi0gICBWYWx1ZSBE ZWZpbml0aW9uCi0gICBOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBhIGNvbW1hbmQgQ01EQkwgMzI3 NjMgY2t1Y21kLmgKLSAgIE51bWJlciBvZiBjaGFycyBpbiBhIGZpZWxkIG9mIGEgY29tbWFuZCAg ICBBVE1CTCAxMDIzOCBja3VjbWQuaAotICAgTmVzdGluZyBsZXZlbCBmb3IgY29tbWFuZCBmaWxl cyBNQVhUQUtFIDU0ICAgY2t1dXNyLmgKLSAgIE5lc3RpbmcgbGV2ZWwgZm9yIG1hY3JvcyBNQUNM RVZFTCAxMjggY2t1dXNyLmgKLSAgIE5lc3RpbmcgbGV2ZWwgZm9yIEZPUiAvIFdISUxFIGxvb3Bz IEZPUkRFUFRIIDMyIGNrdXVzci5oCi0gICBOdW1iZXIgb2YgbWFjcm9zIE1BQ19NQVggMTYzODQg Y2t1dXNyLmgKLSAgIFNpemUgb2YgSU5QVVQgYnVmZmVyIElOUEJVRlNJWiA0MDk2IGNrdXVzci5o Ci0gICBNYXhpbXVtIGZpbGVzIHRvIG1hdGNoIGEgd2lsZGNhcmQgTUFYV0xEICAgIDEwMjQwMCBj a2NkZWIuaAotICAgRmlsZXNwZWNzIGluIE1TRU5EIGNvbW1hbmQgTVNFTkRNQVggMTAyNCBja3V1 c3IuaAotICAgTGVuZ3RoIGZvciBHT1RPIHRhcmdldCBsYWJlbCBMQkxTSVogNTAgY2t1dXNyLmgK LSAgIFxmZXhlY3V0ZSgpIHJlY3Vyc2lvbiBkZXB0aCBsaW1pdCBDTURERVAgNjQgY2t1Y21kLmgK LQotICAgSWYgeW91IG5lZWQgdG8gZGVmaW5lIGEgbWFjcm8gdGhhdCBpcyBsb25nZXIgdGhhbiBD TURCTCwgeW91IGNhbiBicmVhawotICAgdGhlIG1hY3JvIHVwIGludG8gc3ViLW1hY3JvcyBvciBy ZXdyaXRlIHRoZSBtYWNybyBhcyBhIGNvbW1hbmQgZmlsZS4gSW4KLSAgIGEgcGluY2ggeW91IGNh biBhbHNvIHJlZGVmaW5lIENNREJMIGFuZCByZWNvbXBpbGUgQy1LZXJtaXQuIEFsbCBvZgotICAg dGhlc2UgbnVtYmVycyByZXByZXNlbnQgdHJhZGVvZmZzOiB0aGUgYmlnZ2VyIHRoZSBudW1iZXIs IHRoZSBtb3JlCi0gICAicG93ZXJmdWwiIEtlcm1pdCBpbiB0aGUgY29ycmVzcG9uZGluZyBhcmVh LCBidXQgYWxzbyB0aGUgYmlnZ2VyIHRoZQotICAgcHJvZ3JhbSBpbWFnZSBhbmQgcG9zc2libHkg ZGlzayBmb290cHJpbnQsIGFuZCB0aGUgbG9uZ2VyIGl0IHRha2VzIHRvCi0gICBsb2FkIGFuZCBp bml0aWFsaXplLgotCi0gICBJbiB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXI6Ci0KLSAg ICAgKiBFTUFDUy0gb3IgVkktc3R5bGUgY29tbWFuZCBsaW5lIGVkaXRpbmcgaXMgbm90IHN1cHBv cnRlZC4KLSAgICAgKiBFZGl0aW5nIGtleXMgYXJlIGhhcmR3aXJlZCAoQ3RybC1VLCBDdHJsLVcs IGV0YykuCi0KLSAgIElmIHlvdSBpbnRlcnJ1cHQgQy1LZXJtaXQgYmVmb3JlIGl0IGhhcyBpc3N1 ZWQgaXRzIGZpcnN0IHByb21wdCwgaXQKLSAgIHdpbGwgZXhpdC4gVGhpcyBtZWFucyB0aGF0IHlv dSBjYW5ub3QgaW50ZXJydXB0IGV4ZWN1dGlvbiBvZiB0aGUKLSAgIGluaXRpYWxpemF0aW9uIGZp bGUsIG9yIG9mIGFuICJhcHBsaWNhdGlvbiBmaWxlIiAoZmlsZSB3aG9zZSBuYW1lIGlzCi0gICBn aXZlbiBhcyB0aGUgZmlyc3QgY29tbWFuZC1saW5lIGFyZ3VtZW50KSwgb3Igb2YgYW4gYWx0ZXJu YXRpdmUKLSAgIGluaXRpYWxpemF0aW9uIGZpbGUgKCIteSBmaWxlbmFtZSIpLCBhbmQgZ2V0IHRv IHRoZSBwcm9tcHQuIFRoZXJlIGlzLAotICAgaG93ZXZlciwgb25lIGV4Y2VwdGlvbiB0byB0aGlz IHJ1bGU6IHlvdSAqY2FuKiBpbnRlcnJ1cHQgY29tbWFuZHMgLS0KLSAgIGluY2x1ZGluZyBUQUtF IGNvbW1hbmRzIC0tIGdpdmVuIGluIHRoZSAnLUMgImNvbW1hbmQgbGlzdCInCi0gICBjb21tYW5k LWxpbmUgYXJndW1lbnQgYW5kIC0tIGlmIHRoZXJlIHdlcmUgbm8gYWN0aW9uIGNvbW1hbmRzIGFt b25nIHRoZQotICAgY29tbWFuZC1saW5lIGFyZ3VtZW50cyAtLSB5b3Ugd2lsbCBiZSByZXR1cm5l ZCB0byB0aGUgQy1LZXJtaXQgcHJvbXB0LgotICAgU28sIGZvciBleGFtcGxlLCBpZiB5b3Ugd2Fu dCB0byBzdGFydCBDLUtlcm1pdCBpbiBzdWNoIGEgd2F5IHRoYXQgaXQKLSAgIGV4ZWN1dGVzIGEg Y29tbWFuZCBmaWxlIGJlZm9yZSBpc3N1aW5nIGl0cyBmaXJzdCBwcm9tcHQsIGFuZCB5b3UgYWxz bwotICAgd2FudCB0byBiZSBhYmxlIHRvIGludGVycnVwdCB0aGUgY29tbWFuZCBmaWxlIGFuZCBn ZXQgdG8gdGhlIHByb21wdCwKLSAgIGluY2x1ZGUgYSBUQUtFIGNvbW1hbmQgZm9yIHRoZSBkZXNp cmVkIGNvbW1hbmQgaW4gdGhlIC1DIGFyZ3VtZW50LCBmb3IKLSAgIGV4YW1wbGU6Ci0KLSAga2Vy bWl0IC1DICJ0YWtlIGRpYWwuc2NyIgotCi0gICBBdCB0aGUgY29tbWFuZCBwcm9tcHQsIGlmIHlv dSB1c2UgdGhlIGJhY2tzbGFzaCAoXCkgcHJlZml4IHRvIGVudGVyIGEKLSAgIGNvbnRyb2wgY2hh cmFjdGVyLCBzcGFjZSwgb3IgcXVlc3Rpb24gbWFyayBpbnRvIGEgY29tbWFuZCBsaXRlcmFsbHks Ci0gICB0aGUgYmFja3NsYXNoIGRpc2FwcGVhcnMgYW5kIGlzIHJlcGxhY2VkIGJ5IHRoZSBxdW90 ZWQgY2hhcmFjdGVyLiBJZiBpdAotICAgd2FzIGEgY29udHJvbCBjaGFyYWN0ZXIsIGl0IGlzIHNo b3duIGFzIGEgY2lyY3VtZmxleCAoXikuIFRoaXMgYWxsb3dzCi0gICBlZGl0aW5nIChiYWNrc3Bh Y2UsIGRlbGV0ZSwgQ3RybC1XKSB0byB3b3JrIGNvcnJlY3RseSBldmVuIGZvciBjb250cm9sCi0g ICBjaGFyYWN0ZXJzLgotCi0gICBQcmlvdCB0byBDLUtlcm1pdCA4LjAsIHRoZSBvbmx5IHdheSB0 byBpbmNsdWRlIGEgY29tbWEgbGl0ZXJhbGx5IGluIGEKLSAgIG1hY3JvIGRlZmluaXRpb24gLS0g YXMgb3Bwb3NlZCB0byBoYXZpbmcgaXQgc2VwYXJhdGUgY29tbWFuZHMgd2l0aGluCi0gICB0aGUg ZGVmaW5pdGlvbiAtLSBpcyB0byBlbnRlciBpdHMgQVNDSUkgdmFsdWUgKDQ0KSBpbiBiYWNrc2xh c2gKLSAgIG5vdGF0aW9uLCBlLmcuOgotCi0gIERFRklORSBST1dTIFJVTiBNT0RFIENPODBcezQ0 fVwlMQotCi0gICBJbiBDLUtlcm1pdCA4LjAgeW91IGNhbiB1c2UgY29uc3RydWN0aW9ucyBsaWtl IHRoaXM6Ci0KLSAgREVGSU5FIFJPV1MgUlVOIE1PREUgIkNPODAsXCUxIgotCi0gICBJZiB5b3Ug cXVvdGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGEgZmlsZW5hbWUgKGUuZy4gaW4gdGhlIFNFTkQK LSAgIGNvbW1hbmQpLCBmaWxlbmFtZSBjb21wbGV0aW9uIG1heSBzZWVtIHRvIHdvcmsgaW5jb3Jy ZWN0bHkuIEZvcgotICAgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBmaWxlIHdob3NlIG5hbWUgaXMg YSpiICh0aGUgbmFtZSByZWFsbHkgY29udGFpbnMKLSAgIGFuIGFzdGVyaXNrKSwgYW5kIHlvdSB0 eXBlICJzZW5kIGFcXCo8RVNDPiIsIHRoZSAiYiIgZG9lcyBub3QgYXBwZWFyLAotICAgbm9yIHdp bGwgQ3RybC1SIHJlZGlzcGxheSB0aGUgY29tcGxldGVkIG5hbWUgY29ycmVjdGx5LiBCdXQgaW50 ZXJuYWxseQotICAgdGhlIGZpbGUgbmFtZSBpcyByZWNvZ25pemVkIGFueXdheS4KLQotICAgUXVl c3Rpb24tbWFyayBoZWxwIGRvZXMgbm90IHdvcmsgZHVyaW5nIGV4ZWN1dGlvbiBvZiBhbiBBU0tR IGNvbW1hbmQuCi0gICBUaGUgcXVlc3Rpb24gbWFya3MgYXJlIHNpbXBseSBhY2NlcHRlZCBhcyB0 ZXh0LgotCi0gICBJbiBPVVRQVVQgY29tbWFuZHMgb25seSwgXEIgc2VuZHMgYSBCUkVBSyBzaWdu YWwsIFxMIHNlbmRzIGEgTG9uZyBCUkVBSwotICAgc2lnbmFsLCBhbmQgXE4gc2VuZHMgYSBOVUwg KEFTQ0lJIDApLiBCUkVBSyBhbmQgTG9uZyBCUkVBSyBhcmUgc3BlY2lhbAotICAgc2lnbmFscywg bm90IGNoYXJhY3RlcnMsIGFuZCBOVUwgaXMgYSBjaGFyYWN0ZXIgdGhhdCBub3JtYWxseSBjYW5u b3QgYmUKLSAgIGluY2x1ZGVkIGluIGEgQyBzdHJpbmcsIHNpbmNlIGl0IGlzIHRoZSBDIHN0cmlu ZyB0ZXJtaW5hdG9yLiBJZiB5b3UKLSAgIHJlYWxseSB3YW50IHRvIG91dHB1dCBhIGJhY2tzbGFz aCBmb2xsb3dlZCBieSBhIEIsIGFuIEwsIG9yIGFuIE4gKGFzIGlzCi0gICBuZWVkZWQgdG8gY29u ZmlndXJlIGNlcnRhaW4gbW9kZW1zLCBldGMpLCBkb3VibGUgdGhlIGJhY2tzbGFzaCwgZS5nLgot ICAgIm91dHB1dCBcXEIiLiBJbiBDLUtlcm1pdCA3LjAgb3IgbGF0ZXIsIHlvdSBjYW4gZGlzYXJt IGFuZCByZS1hcm0gdGhlCi0gICBzcGVjaWFsIE9VVFBVVC1jb21tYW5kIGVzY2FwZXMgKFxCLCBc TCwgYW5kIFxOKSB3aXRoIFNFVCBPVVRQVVQKLSAgIFNQRUNJQUwtRVNDQVBFUyB7IE9GRiwgT04g fS4KLQotICAgV2hlbiB1c2luZyB0aGUgY29tbWFuZC1saW5lIHByb2Nlc3NvciAoImtlcm1pdCAt bCAvZGV2L3R0eTAwIC1iIDE5MjAwIiwKLSAgIGV0YyksIG5vdGUgdGhhdCBpbiBzb21lIGNhc2Vz IHRoZSBvcmRlciBvZiB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMKLSAgIG1ha2VzIGEgZGlmZmVy ZW5jZSwgY29udHJhcnkgdG8gdGhlIGV4cGVjdGF0aW9uIHRoYXQgb3JkZXIgb2YKLSAgIGNvbW1h bmQtbGluZSBvcHRpb25zIHNob3VsZCBub3QgbWF0dGVyLiBGb3IgZXhhbXBsZSwgdGhlIC1iIG9w dGlvbiBtdXN0Ci0gICBiZSBnaXZlbiBhZnRlciB0aGUgLWwgb3B0aW9uIGlmIGl0IGlzIHRvIGFm ZmVjdCB0aGUgZGV2aWNlIHNwZWNpZmllZCBpbgotICAgdGhlIC1sIG9wdGlvbi4KLQotMy4gTVVM VElQTEUgU0VTU0lPTlMKLQotICAgWyBbNDZdVG9wIF0gWyBbNDddQ29udGVudHMgXSBbIFs0OF1O ZXh0IF0gWyBbNDldUHJldmlvdXMgXQotCi0gICBDLUtlcm1pdCA3LjAgYW5kIGVhcmxpZXIgZG8g bm90IHN1cHBvcnQgbXVsdGlwbGUgc2Vzc2lvbnMuIFdoZW4geW91IFNFVAotICAgTElORSAob3Ig U0VUIFBPUlQsIHNhbWUgdGhpbmcpIHRvIGEgbmV3IGRldmljZSwgb3IgU0VUIEhPU1QgdG8gYSBu ZXcKLSAgIGhvc3QsIHRoZSBwcmV2aW91cyBTRVQgTElORSBkZXZpY2Ugb3IgbmV0d29yayBob3N0 IGNvbm5lY3Rpb24gaXMKLSAgIGNsb3NlZCwgcmVzdWx0aW5nIGluIGhhbmd1cCBvZiB0aGUgbW9k ZW0gb3IgdGVybWluYXRpb24gb2YgdGhlIG5ldHdvcmsKLSAgIGNvbm5lY3Rpb24uIEluIHdpbmRv d2luZyBlbnZpcm9ubWVudHMgbGlrZSBIUC1WVUUsIE5lWFRTVEVQLCBXaW5kb3dzLAotICAgT1Mv MiwgZXRjLCB5b3UgY2FuIHJ1biBzZXBhcmF0ZSBjb3BpZXMgb2YgS2VybWl0IGluIGRpZmZlcmVu dCB3aW5kb3dzCi0gICB0byBhY2hpZXZlIG11bHRpcGxlIHNlc3Npb25zLgotCi0gICBUbyBhY2hp ZXZlIG11bHRpcGxlIHNlc3Npb25zIHRocm91Z2ggYSBzaW5nbGUgc2VyaWFsIHBvcnQgKGUuZy4g d2hlbgotICAgZGlhbGluZyB1cCksIHlvdSBjYW4gaW5zdGFsbCBTTElQIG9yIFBQUCBvbiB5b3Vy IGNvbXB1dGVyIGFuZCB0aGVuIHVzZQotICAgQy1LZXJtaXQncyBUQ1AvSVAgc3VwcG9ydCBvdmVy IHRoZSBTTElQIG9yIFBQUCBjb25uZWN0aW9uLCBhc3N1bWluZyB5b3UKLSAgIGFsc28gaGF2ZSBU Q1AvSVAgbmV0d29ya2luZyBpbnN0YWxsZWQgb24geW91ciBjb21wdXRlci4KLQotICAgQy1LZXJt aXQgOC4wIGhhcyB0aGUgc2FtZSByZXN0cmljdGlvbiBvbiBTRVQgTElORSBhbmQgU0VUIEhPU1QK LSAgIHNlc3Npb25zOiBvbmx5IG9uZSByZWd1bGFyIHNlc3Npb24gKGRpYWxvdXQsIFRlbG5ldCwg ZXRjKSBjYW4gYmUgb3BlbgotICAgYXQgYSB0aW1lLiBIb3dldmVyLCB2ZXJzaW9uIDguMCBhZGRz IHR3byBuZXcga2luZHMgb2Ygc2Vzc2lvbnM6IEZUUCBhbmQKLSAgIEhUVFA7IG9uZSBvciBib3Ro IG9mIHRoZXNlIGNhbiBiZSBvcGVuIGF0IHRoZSBzYW1lIGFzIGEgcmVndWxhcgotICAgc2Vzc2lv bi4KLQotNC4gTkVUV09SSyBDT05ORUNUSU9OUwotCi0gICBbIFs1MF1Ub3AgXSBbIFs1MV1Db250 ZW50cyBdIFsgWzUyXU5leHQgXSBbIFs1M11QcmV2aW91cyBdCi0KLUZUUCBDbGllbnQgQnVncwot Ci0gICBUaGUgVW5peCBDLUtlcm1pdCA4LjAuMjA2IEZUUCBjbGllbnQgaGFkIHRoZSBmb2xsb3dp bmcgYnVncyBhdCB0aGUgdGltZQotICAgbW9zdCBvZiB0aGUgOC4wLjIwNiBiaW5hcmllcyB3ZXJl IGJ1aWx0IGZvciB0aGUgQy1LZXJtaXQgOC4wIENEUk9NOgotCi0gICAgMS4gRlRQIE1HRVQgZmFp bHMgd2hlbiBkaXJlY3Rvcnkgc2VnbWVudHMgY29udGFpbiB3aWxkY2FyZHMsIGFzIGluCi0gICAg ICAgImZ0cCBtZ2V0ICovZGF0YS8qLmRhdCIuIFdvcmsgYXJvdW5kIGJ5IGRvaW5nIGEgc2VwYXJh dGUgTUdFVCBmb3IKLSAgICAgICBlYWNoIHNvdXJjZSBkaXJlY3RvcnkuCi0gICAgMi4gRlRQIE1H RVQgY2FuIGZhaWwgb3IgcHJvZHVjZSByYW5kb20gc2lkZSBlZmZlY3RzIGlmIHlvdSBoYXZlIGEK LSAgICAgICBUTVBESVIgb3IgQ0tfVE1QIGVudmlyb25tZW50IHZhcmlhYmxlIGRlZmluaXRpb24g aW4gZWZmZWN0LCBvciBhCi0gICAgICAgU0VUIFRFTVAtRElSRUNUT1JZIHZhbHVlLCBsb25nZXIg dGhhbiA3IGNoYXJhY3RlcnMuIFdvcmsgYXJvdW5kIGJ5Ci0gICAgICAgZ2l2aW5nIGEgU0VUIFRF TVAtRElSRUNUT1JZIGNvbW1hbmQgd2l0aCBhIHNob3J0IHZhbHVlLCBzdWNoIGFzCi0gICAgICAg Ii90bXAiLgotCi0gICBUaGVzZSB0d28gYnVncyBhcmUgZml4ZWQgaW4gdGhlIHNvdXJjZSBjb2Rl IHRoYXQgaXMgaW5jbHVkZWQgb24gdGhlCi0gICBDRFJPTSwgYW5kIGFsc28gaW4gS2VybWl0IDk1 IDIuMS4xLiBZb3UgY2FuIHRlbGwgaWYgYSBDLUtlcm1pdCA4LjAuMjA2Ci0gICBiaW5hcnkgaGFz IHRoZXNlIGZpeGVzIGJ5IHR5cGluZyBTSE9XIFZFUlNJT047IGlmIGl0IHNheXMgIkZUUCBDbGll bnQsCi0gICA4LjAuMjAwLCAyNCBPY3QgMjAwMiIgaXQgaGFzIHRoZSBmaXhlczsgaWYgdGhlIGVk aXQgbnVtYmVyIGlzIGxlc3MgdGhhdAotICAgMjAwLCBpdCBkb2Vzbid0LCBpbiB3aGljaCBjYXNl IGNhbiBidWlsZCBhIG5ldyBiaW5hcnkgZnJvbSB0aGUgc291cmNlCi0gICBjb2RlIChvciBjb250 YWN0IHVzIGFuZCB3ZSdsbCB0cnkgdG8gZ2V0IGdldCBvbmUgZm9yIHlvdSkuCi0KLU1ha2luZyBU Q1AvSVAgQ29ubmVjdGlvbnMgQ2FuIFRha2UgYSBMb25nIFRpbWUKLQotICAgVGhlIG1vc3QgZnJl cXVlbnRseSBhc2tlZCBxdWVzdGlvbiBpbiBtYW55IG5ld3Nncm91cHMgaXMgIldoeSBkb2VzIGl0 Ci0gICB0YWtlIHN1Y2ggYSBsb25nIHRpbWUgdG8gbWFrZSBhIFRlbG5ldCBjb25uZWN0aW9uIHRv IChvciBmcm9tKSBteQotICAgKGUuZy4pIExpbnV4IFBDPyIgKHRoaXMgYXBwbGllcyB0byBLZXJt aXQgYXMgd2VsbCBhcyB0byByZWd1bGFyIFRlbG5ldAotICAgY2xpZW50cyk6Ci0KLSAgICAxLiBN b3N0IFRlbG5ldCBzZXJ2ZXJzIHBlcmZvcm0gcmV2ZXJzZSBETlMgbG9va3VwcyBvbiB0aGUgY2xp ZW50IGZvcgotICAgICAgIHNlY3VyaXR5IGFuZC9vciBsb2dnaW5nIHJlYXNvbnMuIElmIHRoZSBU ZWxuZXQgY2xpZW50J3MgaG9zdCBjYW5ub3QKLSAgICAgICBiZSBmb3VuZCBieSB0aGUgc2VydmVy J3MgbG9jYWwgRE5TIHNlcnZlciwgdGhlIEROUyByZXF1ZXN0IGdvZXMgb3V0Ci0gICAgICAgdG8g dGhlIEludGVybmV0IGF0IGxhcmdlLCBhbmQgdGhpcyBjYW4gdGFrZSBxdWl0ZSBzb21lIHRpbWUu IFRoZQotICAgICAgIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB0byBtYWtlIHN1cmUgdGhh dCBib3RoIGNsaWVudCBhbmQgaG9zdAotICAgICAgIGFyZSByZWdpc3RlcmVkIGluIEROUy4KLSAg ICAyLiBDLUtlcm1pdCBpdHNlbGYgcGVyZm9ybXMgcmV2ZXJzZSBETlMgbG9va3VwcyB1bmxlc3Mg eW91IHRlbGwgaXQgbm90Ci0gICAgICAgdG8uIFRoaXMgaXMgdG8gYWxsb3cgQy1LZXJtaXQgdG8g bGV0IHlvdSBrbm93IHdoaWNoIGhvc3QgaXQgaXMKLSAgICAgICBhY3R1YWxseSBjb25uZWN0ZWQg dG8gaW4gY2FzZSB5b3UgaGF2ZSBtYWRlIGEgY29ubmVjdGlvbiB0byBhICJob3N0Ci0gICAgICAg cG9vbCIgKG11bHRpaG9tZWQgaG9zdCkuIFlvdSBjYW4gZGlzYWJsZSBDLUtlcm1pdCdzIHJldmVy c2UgRE5TCi0gICAgICAgbG9va3VwIHdpdGggU0VUIFRDUCBSRVZFUlNFLUROUy1MT09LVVAgT0ZG LgotICAgIDMuIEMtS2VybWl0IDcuMCBhbmQgbGF0ZXIgc3RyaWN0bHkgZW5mb3JjZSBUZWxuZXQg cHJvdG9jb2wgcnVsZXMuIE9uZQotICAgICAgIHN1Y2ggcnVsZSBpcyB0aGF0IGNlcnRhaW4gbmVn b3RpYXRpb25zIG11c3QgYmUgcmVzcG9uZGVkIHRvLiBJZgotICAgICAgIEMtS2VybWl0IHNlbmRz IGEgc3VjaCBhIG5lZ290aWF0aW9uIGFuZCB0aGUgaG9zdCBkb2VzIG5vdCByZXNwb25kLAotICAg ICAgIEMtS2VybWl0IHdhaXRzIGEgbG9uZyB0aW1lIGZvciB0aGUgcmVwbHkgKGluIGNhc2UgdGhl IG5ldHdvcmsgaXMKLSAgICAgICBjb25nZXN0ZWQgb3IgdGhlIGhvc3QgaXMgc2xvdyksIGJ1dCBl dmVudHVhbGx5IHdpbGwgdGltZSBvdXQuIFRvCi0gICAgICAgZWxpbWluYXRlIHRoZSB3YWl0cyAo YW5kIHRoZXJlZm9yZSByaXNrIHBvc3NpYmxlIHByb3RvY29sCi0gICAgICAgbWlzbWF0Y2hlcyAt LSBvciB3b3JzZSAtLSBiZXR3ZWVuIFRlbG5ldCBjbGllbnQgYW5kIHNlcnZlciksIHRlbGwKLSAg ICAgICBDLUtlcm1pdCB0byBTRVQgVEVMTkVUIFdBSVQgT0ZGIChvciBpbmNsdWRlIHRoZSAvTk9X QUlUIHN3aXRjaCB3aXRoCi0gICAgICAgdGhlIFRFTE5FVCBjb21tYW5kKS4KLQotVGhlIFJsb2dp biBDbGllbnQKLQotICAgSW4gbXVsdGl1c2VyIG9wZXJhdGluZyBzeXN0ZW1zIHN1Y2ggYXMgVU5J WCBhbmQgVk1TLCBUQ1AvSVAgUmxvZ2luCi0gICBjb25uZWN0aW9ucyBhcmUgYXZhaWxhYmxlIG9u bHkgdG8gcHJpdmlsZWdlZCB1c2Vycywgc2luY2UgImxvZ2luIiBpcyBhCi0gICBwcml2aWxlZ2Vk IHNvY2tldC4gQXNzdW1pbmcgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSBpdCBpbiB0aGUgZmlyc3QK LSAgIHBsYWNlLCBpdCBpcyBsaWtlbHkgdG8gYmVoYXZlIGRpZmZlcmVudGx5IGRlcGVuZGluZyBv biB3aGF0IHR5cGUgb2YKLSAgIGhvc3QgeW91IGFyZSBybG9nZ2luZyBpbiB0bywgZHVlIHRvIHRl Y2huaWNhbCByZWFzb25zIGhhdmluZyB0byBkbyB3aXRoCi0gICBjb25mbGljdGluZyBpbnRlcnBy ZXRhdGlvbnMgb2YgUkZDNzkzIChPdXQtT2YtQmFuZCBEYXRhKSBhbmQgUmxvZ2luCi0gICAoUkZD MTEyMikuLi4gIlNwZWNpZmljYWxseSwgdGhlIFRDUCB1cmdlbnQgcG9pbnRlciBpbiBCU0QgcG9p bnRzIHRvIHRoZQotICAgYnl0ZSBhZnRlciB0aGUgdXJnZW50IGRhdGEgYnl0ZSwgYW5kIGFuIFJG Qy1jb21wbGlhbnQgVENQIHVyZ2VudAotICAgcG9pbnRlciBwb2ludHMgdG8gdGhlIHVyZ2VudCBk YXRhIGJ5dGUuIEFzIGEgcmVzdWx0LCBpZiBhbiBhcHBsaWNhdGlvbgotICAgc2VuZHMgdXJnZW50 IGRhdGEgZnJvbSBhIEJTRC1jb21wYXRpYmxlIGltcGxlbWVudGF0aW9uIHRvIGFuCi0gICBbNTRd UkZDLTExMjIgY29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbiB0aGVuIHRoZSByZWNlaXZlciB3aWxs IHJlYWQgdGhlCi0gICB3cm9uZyB1cmdlbnQgZGF0YSBieXRlIChpdCB3aWxsIHJlYWQgdGhlIGJ5 dGUgbG9jYXRlZCBhZnRlciB0aGUgY29ycmVjdAotICAgYnl0ZSBpbiB0aGUgZGF0YSBzdHJlYW0g YXMgdGhlIHVyZ2VudCBkYXRhIGJ5dGUpLiIgUmxvZ2luIHJlcXVpcmVzIHRoZQotICAgdXNlIG9m IE9PQiBkYXRhIHdoaWxlIFRlbG5ldCBkb2VzIG5vdC4gVGhlcmVmb3JlLCBpdCBpcyBwb3NzaWJs ZSBmb3IKLSAgIFRlbG5ldCB0byB3b3JrIGJldHdlZW4gYWxsIHN5c3RlbXMgd2hpbGUgQlNEIGFu ZCBTeXN0ZW0gViBUQ1AvSVAKLSAgIGltcGxlbWVudGF0aW9ucyBhcmUgYWxtb3N0IGFsd2F5cyBh IGJhZCBtaXguCi0KLVRoZSBUZWxuZXQgQ2xpZW50Ci0KLSAgIE9uIGEgVENQL0lQIFRFTE5FVCBj b25uZWN0aW9uLCB5b3Ugc2hvdWxkIG5vcm1hbGx5IGhhdmUgUEFSSVRZIHNldCB0bwotICAgTk9O RSBhbmQgKGV4Y2VwdCBpbiBWTVMgQy1LZXJtaXQpIEZMT1ctQ09OVFJPTCBhbHNvIHNldCB0byBO T05FLiBJZgotICAgZmlsZSB0cmFuc2ZlciBkb2VzIG5vdCB3b3JrIHdpdGggdGhlc2Ugc2V0dGlu Z3MgKGZvciBleGFtcGxlLCBiZWNhdXNlCi0gICB0aGUgcmVtb3RlIFRFTE5FVCBzZXJ2ZXIgb25s eSBnaXZlcyBhIDctYml0IGRhdGEgcGF0aCksIHVzZSBTRVQgUEFSSVRZCi0gICBTUEFDRS4gRG8g bm90IHVzZSBTRVQgUEFSSVRZIE1BUkssIEVWRU4sIG9yIE9ERCBvbiBhIFRFTE5FVCBjb25uZWN0 aW9uCi0gICAtLSBpdCBpbnRlcmZlcmVzIHdpdGggVEVMTkVUIHByb3RvY29sLgotCi0gICBJZiBl Y2hvaW5nIGRvZXMgbm90IHdvcmsgcmlnaHQgYWZ0ZXIgY29ubmVjdGluZyB0byBhIG5ldHdvcmsg aG9zdCBvcgotICAgYWZ0ZXIgZGlhbGluZyB0aHJvdWdoIGEgVENQL0lQIG1vZGVtIHNlcnZlciwg aXQgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUKLSAgIFRFTE5FVCBzZXJ2ZXIgb24gdGhlIGZhciBl bmQgb2YgdGhlIGNvbm5lY3Rpb24gaXMgZXhlY3V0aW5nIHRoZSBURUxORVQKLSAgIHByb3RvY29s IGluY29ycmVjdGx5LiBBZnRlciBpbml0aWFsbHkgY29ubmVjdGluZyBhbmQgZGlzY292ZXJpbmcK LSAgIGluY29ycmVjdCBlY2hvaW5nIChjaGFyYWN0ZXJzIGFyZSBlY2hvZWQgdHdpY2UsIG9yIG5v dCBhdCBhbGwpLCBlc2NhcGUKLSAgIGJhY2ssIGdpdmUgdGhlIGFwcHJvcHJpYXRlIFNFVCBEVVBM RVggY29tbWFuZCAoRlVMTCBvciBIQUxGKSwgYW5kIHRoZW4KLSAgIENPTk5FQ1QgYWdhaW4uIEZv ciBhIGNvbnNpc3RlbnRseSBtaXNiZWhhdmluZyBjb25uZWN0aW9uLCB5b3UgY2FuCi0gICBhdXRv bWF0ZSB0aGlzIHByb2Nlc3MgaW4gYSBtYWNybyBvciBUQUtFIGZpbGUuCi0KLSAgIFRFTE5FVCBz ZXNzaW9ucyBhcmUgdHJlYXRlZCBqdXN0IGxpa2Ugc2VyaWFsIGNvbW11bmljYXRpb25zIHNlc3Np b25zIGFzCi0gICBmYXIgYXMgInRlcm1pbmFsIGJ5dGVzaXplIiBhbmQgImNvbW1hbmQgYnl0ZXNp emUiIGFyZSBjb25jZXJuZWQuIElmIHlvdQotICAgbmVlZCB0byB2aWV3IGFuZC9vciBlbnRlciA4 LWJpdCBjaGFyYWN0ZXJzIGR1cmluZyBhIFRFTE5FVCBzZXNzaW9uLCB5b3UKLSAgIG11c3QgdGVs bCBDLUtlcm1pdCB0byBTRVQgVEVSTUlOQUwgQllURVNJWkUgOCwgU0VUIENPTU1BTkQgQllURVNJ WkUgOCwKLSAgIGFuZCBTRVQgUEFSSVRZIE5PTkUuCi0KLSAgIElmIHlvdSBTRVQgVEVMTkVUIERF QlVHIE9OIHByaW9yIHRvIG1ha2luZyBhIGNvbm5lY3Rpb24sIHByb3RvY29sCi0gICBuZWdvdGlh dGlvbnMgd2lsbCBiZSBkaXNwbGF5ZWQgb24geW91ciBzY3JlZW4uIFlvdSBjYW4gYWxzbyBjYXB0 dXJlCi0gICB0aGVtIGluIHRoZSBkZWJ1ZyBsb2cgKGFsb25nIHdpdGggZXZlcnl0aGluZyBlbHNl KSBhbmQgdGhlbiBleHRyYWN0Ci0gICB0aGVtIGVhc2lseSwgc2luY2UgYWxsIFRlbG5ldCBuZWdv dGlhdGlvbnMgbGluZXMgYmVnaW4gd2l0aCAodXBwZXJjYXNlKQotICAgIlRFTE5FVCIuCi0KLVRo ZSBTU0ggQ2xpZW50Ci0KLSAgIEMtS2VybWl0IGRvZXMgbm90IGhhdmUgaXRzIG93biBidWlsdC1p biBTU0ggY2xpZW50OyBpbnN0ZWFkLCBpbiB0aGUKLSAgIFVuaXggdHJhZGl0aW9uLCB1c2VzIHRo ZSBleHRlcm5hbCBTU0ggY2xpZW50IHRvIGRvIHRoZSBTU0ggcGFydCwgYW5kCi0gICBLZXJtaXQg ZG9lcyBpdHMgdGhpbmcgb24gdG9wIC0tIGZpbGUgdHJhbnNmZXIsIHNjcmlwdGluZywgZXRjLiBV bmRlcgotICAgY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gaWRl bnRpZmllZCwgaXQgc29tZXRpbWVzCi0gICBoYXBwZW5zIHRoYXQgYWZ0ZXIgbWFraW5nIGFuIFNT SCBjb25uZWN0aW9uIGZyb20gQy1LZXJtaXQsIGxvZ2dpbmcgb3V0Ci0gICBmcm9tIHRoZSByZW1v dGUgaG9zdCwgYW5kIHBvcHBpbmcgYmFjayB0byB0aGUgbG9jYWwgQy1LZXJtaXQgcHJvZ3JhbSwK LSAgIHN1YnNlcXVlbnQgU1NIIGNvbW1hbmRzIGZpbGUgd2l0aCBhIG1lc3NhZ2UgbGlrZSAiTmV0 d29yayB0eXBlIG5vdAotICAgc3VwcG9ydGVkIi4gU3RhcnRpbmcgYSBuZXcgY29weSBvZiBDLUtl cm1pdCBpcyB0aGUgd29ya2Fyb3VuZC4KLQotNS4gTU9ERU1TIEFORCBESUFMSU5HCi0KLSAgIFsg WzU1XVRvcCBdIFsgWzU2XUNvbnRlbnRzIF0gWyBbNTddTmV4dCBdIFsgWzU4XVByZXZpb3VzIF0K LQotICAgRXh0ZXJuYWwgbW9kZW1zIGFyZSByZWNvbW1lbmRlZCBiZWNhdXNlOgotCi0gICAgICog VGhleSBkb24ndCBuZWVkIGFueSBzcGVjaWFsIGRyaXZlcnMuCi0gICAgICogVGhleSBhcmUgbGVz cyBsaWtlbHkgdG8gaW50ZXJmZXJlIHdpdGggbm9ybWFsIG9wZXJhdGlvbiBvZiB5b3VyCi0gICAg ICAgY29tcHV0ZXIuCi0gICAgICogWW91IGNhbiB1c2UgdGhlIGxpZ2h0cyBhbmQgc3BlYWtlciB0 byB0cm91Ymxlc2hvb3QgZGlhbGluZy4KLSAgICAgKiBZb3UgY2FuIHNoYXJlIHRoZW0gYW1vbmcg YWxsIHR5cGVzIG9mIGNvbXB1dGVycy4KLSAgICAgKiBZb3UgY2FuIGVhc2lseSB0dXJuIHRoZW0g b2ZmIGFuZCBvbiB3aGVuIHBvd2VyLWN5Y2xpbmcgc2VlbXMKLSAgICAgICB3YXJyYW50ZWQuCi0g ICAgICogVGhleSBhcmUgbW9yZSBsaWtlbHkgdG8gaGF2ZSBtYW51YWxzLgotCi0gICBNb2RlbXMg Y2FuIGJlIHVzZWQgYnkgQy1LZXJtaXQgb25seSB3aGVuIHRoZXkgYXJlIHZpc2libGUgYXMgb3Ig dGhyb3VnaAotICAgYSByZWd1bGFyIHNlcmlhbCBwb3J0IGRldmljZS4gQ2VydGFpbiBtb2RlbXMg Y2FuIG5vdCBiZSB1c2VkIGluIHRoaXMKLSAgIG5vcm1hbCB3YXkgb24gbWFueSBraW5kcyBvZiBj b21wdXRlcnM6IFdpbm1vZGVtcywgUlBJIG1vZGVtcywKLSAgIENvbnRyb2xsZXJsZXNzIG1vZGVt cywgdGhlIElCTSBNd2F2ZSwgZXRjOyBhbGwgb2YgdGhlc2UgcmVxdWlyZSBzcGVjaWFsCi0gICBk cml2ZXJzIHRoYXQgcGVyZm9ybSBzb21lLCBtb3N0LCBvciBhbGwgb2YgdGhlIG1vZGVtJ3MgZnVu Y3Rpb25zIGluCi0gICBzb2Z0d2FyZS4gU3VjaCBkcml2ZXJzIGFyZSBnZW5lcmFsbHkgTk9UIGF2 YWlsYWJsZSBpbiBVTklYIG9yIG90aGVyCi0gICBub24tV2luZG93cyAob3Igbm9uLU9TLzIsIGlu IHRoZSBjYXNlIG9mIHRoZSBNd2F2ZSkgcGxhdGZvcm1zLgotCi0gICBJbiBvcmRlciB0byBkaWFs IGEgbW9kZW0sIEMtS2VybWl0IG11c3Qga25vdyB0aGUgbW9kZW0ncyByZXBlcnRvaXJlIG9mCi0g ICBjb21tYW5kcyBhbmQgcmVzcG9uc2VzLiBFYWNoIG1vZGVtIG1ha2UgYW5kIG1vZGVsIGlzIGxp a2VseSB0byBoYXZlIGEKLSAgIGRpZmZlcmVudCByZXBlcnRvaXJlLiBTaW5jZSBLZXJtaXQgaGFz IG5vIHdheSBvZiBrbm93aW5nIHdoaWNoIGtpbmQgb2YKLSAgIG1vZGVtIHdpbGwgYmUgZGlhbGVk LCBub3JtYWxseSB5b3UgaGF2ZSB0byB0ZWxsIGl0IHdpdGggYSBTRVQgTU9ERU0KLSAgIFRZUEUg Y29tbWFuZCwgZS5nLjoKLQotICBzZXQgbW9kZW0gdHlwZSB1c3JvYm90aWNzCi0gIHNldCBsaW5l IC9kZXYvY3VhMAotICBzZXQgc3BlZWQgNTc2MDAKLSAgZGlhbCA3NjU0MzIxCi0KLSAgIEluIHRo ZSBlYXJseSBkYXlzLCB0aGVyZSB3YXMgYSB3aWRlIHZhcmlldHkgb2YgbW9kZW1zIGFuZCBjb21t YW5kCi0gICBsYW5ndWFnZXMuIE5vd2FkYXlzLCBhbG1vc3QgZXZlcnkgbW9kZW0gdXNlcyB0aGUg SGF5ZXMgQVQgY29tbWFuZCBzZXQKLSAgIChidXQgd2l0aCBzb21lIGRpZmZlcmVuY2VzIGluIHRo ZSBkZXRhaWxzKSBhbmQgaXRzIHN0YXJ0dXAKLSAgIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgZXJy b3IgY29ycmVjdGlvbiwgZGF0YSBjb21wcmVzc2lvbiwgYW5kIGhhcmR3YXJlCi0gICAoUlRTL0NU UykgZmxvdyBjb250cm9sLiBBcyBsb25nIGFzIEMtS2VybWl0IGlzIGNhcGFibGUgb2YgaGFyZHdh cmUgZmxvdwotICAgY29udHJvbCAoYXMgaXQgaXMgb24gbWFueSwgYnV0IG5vdCBhbGwsIHRoZSBw bGF0Zm9ybXMgd2hlcmUgaXQgcnVucywKLSAgIHNpbmNlIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMg ZG9uJ3Qgc3VwcG9ydCBpdCksIHRoZSBtb2RlbSBjYW4gYmUgZGlhbGVkCi0gICBpbW1lZGlhdGVs eSwgd2l0aG91dCBsZW5ndGh5IGNvbmZpZ3VyYXRpb24gZGlhbG9ncywgYW5kIGluIGZhY3QgdGhp cyBpcwotICAgd2hhdCBTRVQgTU9ERU0gVFlQRSBHRU5FUklDLUhJR0gtU1BFRUQgZG9lcy4gSW4g Qy1LZXJtaXQgOC4wLAotICAgR0VORVJJQy1ISUdILVNQRUVEIGhhcyBiZWNvbWUgdGhlIGRlZmF1 bHQgbW9kZW0gdHlwZSwgc28gbm93IGl0IGlzCi0gICB1c3VhbGx5IHBvc3NpYmxlIHRvIFNFVCBM SU5FLCBTRVQgU1BFRUQsIGFuZCBESUFMIHdpdGhvdXQgaGF2aW5nIHRvCi0gICBpZGVudGlmeSB5 b3VyIG1vZGVtLiBJZiB0aGlzIGRvZXNuJ3Qgd29yaywgb2YgY291cnNlLCB0aGVuIHlvdSBtaWdo dAotICAgaGF2ZSB0byBmYWxsIGJhY2sgdG8gdGhlIHRyYWRpdGlvbmFsIG1ldGhvZDogR2l2ZSBh IFNFVCBNT0RFTSBUWVBFIGZvcgotICAgYSBzcGVjaWZpYyBtb2RlbSBmaXJzdCwgdGhlbiBTRVQg TElORSwgU0VUIFNQRUVELCBhbmQgRElBTC4KLQotICAgQW4gaW1wb3J0YW50IGNoYW5nZSBpbiBD LUtlcm1pdCA2LjAgaXMgdGhhdCB3aGVuIHlvdSBnaXZlIGEgU0VUIE1PREVNCi0gICBUWVBFIGNv bW1hbmQgdG8gdGVsbCBLZXJtaXQgd2hhdCBraW5kIG9mIG1vZGVtIHlvdSBoYXZlLCBLZXJtaXQg YWxzbwotICAgc2V0cyBhIG51bWJlciBvZiBvdGhlciBtb2RlbS1yZWxhdGVkIHBhcmFtZXRlcnMg YXV0b21hdGljYWxseSBmcm9tIGl0cwotICAgaW50ZXJuYWwgbW9kZW0gZGF0YWJhc2UuIFRodXMs IHRoZSBvcmRlciBpbiB3aGljaCB5b3UgZ2l2ZQotICAgbW9kZW0tcmVsYXRlZCBjb21tYW5kcyBp cyBzaWduaWZpY2FudCwgd2hlcmVhcyBpbiBwcmlvciByZWxlYXNlcyB0aGV5Ci0gICBjb3VsZCBi ZSBnaXZlbiBpbiBhbnkgb3JkZXIuCi0KLSAgIEluIHBhcnRpY3VsYXIsIE1PREVNIFNQRUVELU1B VENISU5HIGlzIHNldCBhY2NvcmRpbmcgdG8gd2hldGhlciB0aGUKLSAgIG1vZGVtIGlzIGtub3du IHRvIGJlIGNhcGFibGUgb2Ygc3BlZWQgYnVmZmVyaW5nLiBTRVQgTU9ERU0gVFlQRQotICAgSEFZ RVMtMjQwMCBhdXRvbWF0aWNhbGx5IHR1cm5zIFNQRUVELU1BVENISU5HIE9OLCBiZWNhdXNlIHdo ZW4gdGhlCi0gICBIYXllcyAyNDAwIHJlcG9ydHMgYSBwYXJ0aWN1bGFyIHNwZWVkIGluIGl0cyBD T05ORUNUIG1lc3NhZ2UsIHRoYXQKLSAgIG1lYW5zIGl0cyBpbnRlcmZhY2Ugc3BlZWQgaGFzIGNo YW5nZWQgdG8gdGhhdCBzcGVlZCwgYW5kIEMtS2VybWl0J3MKLSAgIG11c3QgY2hhbmdlIGFjY29y ZGluZ2x5IGlmIGl0IGlzIHRvIGNvbnRpbnVlIGNvbW11bmljYXRpbmcuIFRoaXMgbWlnaHQKLSAg IGNhdXNlIHNvbWUgY29uZnVzaW9uIGlmIHlvdSB1c2UgInNldCBtb2RlbSB0eXBlIGhheWVzIiBm b3IgZGlhbGluZyBhCi0gICBtb3JlIGFkdmFuY2VkIHR5cGUgb2YgbW9kZW0uCi0KLSAgIFRoZSBu ZXcgZGVmYXVsdCBmb3IgZmxvdyBjb250cm9sIGlzICJhdXRvIiwgbWVhbmluZyAiZG8gdGhlIHJp Z2h0IHRoaW5nCi0gICBmb3IgZWFjaCB0eXBlIG9mIGNvbm5lY3Rpb24iLiBTbyAoZm9yIGV4YW1w bGUpIGlmIHlvdXIgdmVyc2lvbiBvZgotICAgQy1LZXJtaXQgc3VwcG9ydHMgU0VUIEZMT1cgUlRT L0NUUyBhbmQgeW91ciBtb2RlbSBhbHNvIHN1cHBvcnRzCi0gICBSVFMvQ1RTLCB0aGVuIEtlcm1p dCBhdXRvbWF0aWNhbGx5IHNldHMgaXRzIGZsb3cgY29udHJvbCB0byBSVFMvQ1RTIGFuZAotICAg c2V0IG1vZGVtJ3MgZmxvdyBjb250cm9sIHRvIFJUUy9DVFMgdG9vIGJlZm9yZSBhdHRlbXB0aW5n IHRvIHVzZSB0aGUKLSAgIG1vZGVtLgotCi0gICBGb3IgdGhlc2UgcmVhc29ucywgZG9uJ3QgYXNz dW1lIHRoYXQgInNldCBtb2RlbSB0eXBlIGhheWVzIiBzaG91bGQgYmUKLSAgIHVzZWQgZm9yIGFs bCBtb2RlbXMgdGhhdCB1c2VzIHRoZSBIYXllcyBBVCBjb21tYW5kIHNldC4gInNldCBtb2RlbSB0 eXBlCi0gICBoYXllcyIgcmVhbGx5IGRvZXMgbWVhbiBIYXllcyAxMjAwIG9yIDI0MDAsIHdoaWNo IGluIHR1cm4gbWVhbnMgbm8KLSAgIGhhcmR3YXJlIGZsb3cgY29udHJvbCwgYW5kIG5vIHNwZWVk IGJ1ZmZlcmluZy4gVGhpcyBjaG9pY2Ugd2lsbCByYXJlbHkKLSAgIHdvcmsgd2l0aCBhIG1vZGVy biBoaWdoLXNwZWVkIG1vZGVtLgotCi02LiBESUFMSU5HIEhJTlRTIEFORCBUSVBTCi0KLSAgIFsg WzU5XVRvcCBdIFsgWzYwXUNvbnRlbnRzIF0gWyBbNjFdTmV4dCBdIFsgWzYyXVByZXZpb3VzIF0K LQotICAgSWYgeW91IGhhdmUgYSBoaWdoLXNwZWVkLCBlcnJvci1jb3JyZWN0aW5nLCBkYXRhLWNv bXByZXNzaW5nLAotICAgc3BlZWQtYnVmZmVyaW5nIG1vZGVtLCB5b3Ugc2hvdWxkIGZpeCB0aGUg bW9kZW0ncyBpbnRlcmZhY2Ugc3BlZWQgYXMKLSAgIGhpZ2ggYXMgcG9zc2libGUsIHByZWZlcmFi bHkgKGF0IGxlYXN0KSBmb3VyIHRpbWVzIGhpZ2hlciB0aGFuIGl0cwotICAgbWF4aW11bSBjb25u ZWN0aW9uIChtb2R1bGF0aW9uKSBzcGVlZCB0byBhbGxvdyBjb21wcmVzc2lvbiB0byB3b3JrIGF0 Ci0gICBmdWxsIGFkdmFudGFnZS4gSW4gdGhpcyB0eXBlIG9mIHNldHVwLCB5b3UgbXVzdCBhbHNv IGhhdmUgYW4gZWZmZWN0aXZlCi0gICBtZWFucyBvZiBmbG93IGNvbnRyb2wgZW5hYmxlZCBiZXR3 ZWVuIEMtS2VybWl0IGFuZCB0aGUgbW9kZW0sCi0gICBwcmVmZXJhYmx5IGhhcmR3YXJlIChSVFMv Q1RTKSBmbG93IGNvbnRyb2wuIE9uIHBsYXRmb3JtcyB0aGF0IGRvIG5vdAotICAgc3VwcG9ydCBo YXJkd2FyZSBmbG93IGNvbnRyb2wsIGl0IGlzIHVzdWFsbHkgcG9zc2libGUgdG8gc2VsZWN0Ci0g ICBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKFhvbi9Yb2ZmKSwgYW5kIEMtS2VybWl0IHdpbGwgZG8g aXRzIGJlc3QgdG8gc2V0Ci0gICB0aGUgbW9kZW0gZm9yIGxvY2FsIFhvbi9Yb2ZmIGZsb3cgY29u dHJvbCB0b28gKGJ1dCB0aGVuLCBvZiBjb3Vyc2UsCi0gICBDdHJsLVMgYW5kIEN0cmwtUSBjaGFy YWN0ZXJzIGNhbiBub3QgYmUgdHJhbnNtaXR0ZWQgb24gdGhlIGNvbm5lY3Rpb24pLgotCi0gICBJ ZiB5b3UgYXJlIGhhdmluZyB0cm91YmxlIGRpYWxpbmcgeW91ciBtb2RlbSwgU0VUIERJQUwgRElT UExBWSBPTiB0bwotICAgd2F0Y2ggdGhlIGRpYWxpbmcgaW50ZXJhY3Rpb25zIGJldHdlZW4gQy1L ZXJtaXQgYW5kIHlvdXIgbW9kZW0uIENvbnN1bHQKLSAgIENoYXB0ZXJzIDMtNCBvZiBbNjNdVXNp bmcgQy1LZXJtaXQgKDJuZCBFZCkgZm9yIG1vZGVtLWRpYWxpbmcKLSAgIHRyb3VibGVzaG9vdGlu ZyBpbnN0cnVjdGlvbnMuIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgb2ZmZXIgc29tZQotICAgYWRk aXRpb25hbCBoaW50cyBhbmQgdGlwcy4KLQotNi4xLiBTeW50YXgKLQotICAgSWYgeW91IHdhbnQg dG8gZGlhbCBhIG51bWJlciB0aGF0IHN0YXJ0cyB3aXRoICMsIHlvdSdsbCBuZWVkIHRvIHF1b3Rl Ci0gICB0aGUgIiMiIGNoYXJhY3RlciAoYXMgXCMgb3IgXHszNX0pLCBzaW5jZSBpdCBpcyBhbHNv IGEgY29tbWVudAotICAgaW50cm9kdWNlcjoKLQotICBDLUtlcm1pdD5kaWFsICM5ODc2NTQyMS0x LTIxMi01NTUxMjEyICAgOyBMb29rcyBsaWtlIGEgY29tbWVudAotICA/WW91IG11c3Qgc3BlY2lm eSBhIG51bWJlciB0byBkaWFsCi0gIEMtS2VybWl0PmRpYWwgXCM5ODc2NTQyMS0xLTIxMi01NTUx MjEyICA7IFdvcmtzIE9LCi0gIEMtS2VybWl0PmRpYWwgPSM5ODc2NTQyMS0xLTIxMi01NTUxMjEy ICA7IFRoaXMgd29ya3MgdG9vCi0KLSAgIFdoZW4gdXNpbmcgYSBkaWFsaW5nIGRpcmVjdG9yeSwg cmVtZW1iZXIgd2hhdCBoYXBwZW5zIGlmIGEgbmFtZSBpcyBub3QKLSAgIGZvdW5kOgotCi0gIEMt S2VybWl0PmRpYWwgeHl6Y29ycAotICBMb29rdXA6ICJ4eXpjb3JwIiAtIG5vdCBmb3VuZCAtIGRp YWxpbmcgYXMgZ2l2ZW4KLQotICAgVGhpcyBub3JtYWxseSBkb2VzIG5vIGhhcm0sIGJ1dCBzb21l IG1vZGVtcyBtaWdodCBiZWhhdmUgc3RyYW5nZWx5IHdoZW4KLSAgIGdpdmVuIGRpYWwgc3RyaW5n cyB0aGF0IGNvbnRhaW4gY2VydGFpbiBsZXR0ZXJzLiBGb3IgZXhhbXBsZSwgYSBjZXJ0YWluCi0g ICBHZXJtYW4gbW9kZW0gdHJlYXRzIGFueSBkaWFsIHN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSBs ZXR0ZXIgInMiIGFzIGEKLSAgIGNvbW1hbmQgdG8gZmV0Y2ggYSBudW1iZXIgZnJvbSBpdHMgaW50 ZXJuYWwgbGlzdCwgYW5kIHJlcGxpZXMgT0sgdG8gdGhlCi0gICBBVEQgY29tbWFuZCwgd2hpY2gg aXMgbm9ybWFsbHkgbm90IGEgdmFsaWQgcmVzcG9uc2UgZXhjZXB0IGZvciBwYXJ0aWFsCi0gICBk aWFsaW5nLiBUbyBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgdXNlOgotCi0gIGxvb2t1cCB4eXpjb3Jw Ci0gIGlmIHN1Y2Nlc3MgZGlhbAotCi02LjIuIFRoZSBDYXJyaWVyIFNpZ25hbAotCi0gICBSZW1l bWJlcjogSW4gbWFueSBDLUtlcm1pdCBpbXBsZW1lbnRhdGlvbnMgKGRlcGVuZGluZyBvbiB0aGUg dW5kZXJseWluZwotICAgb3BlcmF0aW5nIHN5c3RlbSAtLSBtb3N0bHkgV2luZG93cywgT1MvMiwg YW5kIFN5c3RlbS1WLWJhc2VkIFVOSVgKLSAgIHZlcnNpb25zLCBhbmQgaW4gQy1LZXJtaXQgNy4w LCBhbHNvIFZNUyksIHlvdSBjYW4ndCBDT05ORUNUIHRvIGEgbW9kZW0KLSAgIGFuZCB0eXBlIHRo ZSBtb2RlbSdzIGRpYWxpbmcgY29tbWFuZCAobGlrZSAiQVREVDc2NTQzMjEiKSBtYW51YWxseSwK LSAgIHVubGVzcyB5b3UgZmlyc3QgdGVsbCBDLUtlcm1pdCB0bzoKLQotICBTRVQgQ0FSUklFUi1X QVRDSCBPRkYKLQotICAgVGhpcyBpcyBiZWNhdXNlIChpbiB0aGVzZSBpbXBsZW1lbnRhdGlvbnMp LCB0aGUgQ09OTkVDVCBjb21tYW5kCi0gICByZXF1aXJlcyB0aGUgbW9kZW0ncyBDYXJyaWVyIERl dGVjdCAoQ0QpIHNpZ25hbCB0byBiZSBvbiwgYnV0IHRoZSBDRAotICAgc2lnbmFsIGRvZXNuJ3Qg Y29tZSBvbiB1bnRpbCBhZnRlciBkaWFsaW5nIGlzIGNvbXBsZXRlLiBUaGlzCi0gICByZXF1aXJl bWVudCBpcyB3aGF0IGFsbG93cyBDLUtlcm1pdCB0byBwb3AgYmFjayB0byBpdHMgcHJvbXB0Ci0g ICBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgaHVuZyB1cC4gU2VlIHRoZSBk ZXNjcmlwdGlvbiBvZgotICAgU0VUIENBUlJJRVItV0FUQ0ggaW4gIlVzaW5nIEMtS2VybWl0Ii4K LQotICAgU2ltaWxhcmx5LCBpZiB5b3VyIGRpYWxlZCBjb25uZWN0aW9uIGRyb3BzIHdoZW4gQ0FS UklFUi1XQVRDSCBpcyBzZXQgdG8KLSAgIEFVVE8gb3IgT04sIHlvdSBjYW4ndCBDT05ORUNUIGJh Y2sgdG8gdGhlIChub3cgZGlzY29ubmVjdGVkKSBzY3JlZW4gdG8KLSAgIHNlZSB3aGF0IG1pZ2h0 IGhhdmUgaGFwcGVuZWQgdW5sZXNzIHlvdSBmaXJzdCBTRVQgQ0FSUklFUi1XQVRDSCBPRkYuCi0g ICBCdXQgc29tZXRpbWVzIG5vdCBldmVuIFNFVCBDQVJSSUVSLVdBVENIIE9GRiB3aWxsIGhlbHAg aW4gdGhpcwotICAgc2l0dWF0aW9uOiBjZXJ0YWluIHBsYXRmb3JtcyAoZm9yIGV4YW1wbGUgVW5p eHdhcmUgMi4xKSwgb25jZSBjYXJyaWVyCi0gICBkcm9wcywgd29uJ3QgbGV0IHRoZSBhcHBsaWNh dGlvbiBkbyBpL28gd2l0aCB0aGUgZGV2aWNlIGFueSBtb3JlLiBJbgotICAgdGhhdCBjYXNlLCBp ZiB5b3Ugd2FudCB0byB1c2UgdGhlIGRldmljZSBhZ2FpbiwgeW91IGhhdmUgdG8gQ0xPU0UgaXQK LSAgIGFuZCBPUEVOIGl0IGFnYWluLiBPciB5b3UgY2FuIGhhdmUgS2VybWl0IGRvIHRoaXMgZm9y IHlvdSBhdXRvbWF0aWNhbGx5Ci0gICBieSB0ZWxsaW5nIGl0IHRvIFNFVCBDTE9TRS1PTi1ESVND T05ORUNUIE9OLgotCi02LjMuIERpYWxpbmcgYW5kIEZsb3cgQ29udHJvbAotCi0gICBEb24ndCBT RVQgRkxPVyBSVFMvQ1RTIGlmIHlvdXIgbW9kZW0gaXMgdHVybmVkIG9mZiwgb3IgaWYgaXQgaXMg bm90Ci0gICBwcmVzZW50aW5nIHRoZSBDVFMgc2lnbmFsLiBPdGhlcndpc2UsIHRoZSBzZXJpYWwg ZGV2aWNlIGRyaXZlciBjYW4gZ2V0Ci0gICBzdHVjayB3YWl0aW5nIGZvciB0aGlzIHNpZ25hbCB0 byBhcHBlYXIuCi0KLSAgIE1vc3QgbW9kZXJuIG1vZGVtcyBzdXBwb3J0IFJUUy9DVFMgKGlmIHRo ZXkgc3VwcG9ydCBhbnkgaGFyZHdhcmUgZmxvdwotICAgY29udHJvbCBhdCBhbGwpLCBidXQgc29t ZSBjb21wdXRlcnMgdXNlIGRpZmZlcmVudCBSUy0yMzIgY2lyY3VpdHMgZm9yCi0gICB0aGUgc2Ft ZSBwdXJwb3NlcywgZS5nLiBEVFIgYW5kIENELCBvciBEVFIgYW5kIENUUy4gSW4gc3VjaCBjYXNl cywgeW91Ci0gICBtaWdodCBiZSBhYmxlIHRvIG1ha2UgeW91ciBjb21wdXRlciB3b3JrIHdpdGgg eW91ciBtb2RlbSBieQotICAgYXBwcm9wcmlhdGVseSBjcm9zcy13aXJpbmcgdGhlIGNpcmN1aXRz IGluIHRoZSBjYWJsZSBjb25uZWN0b3IsIGZvcgotICAgZXhhbXBsZSB0aGUgY29tcHV0ZXIncyBE VFIgdG8gdGhlIG1vZGVtJ3MgUlRTLCBhbmQgbW9kZW0ncyBDRCB0byB0aGUKLSAgIGNvbXB1dGVy J3MgQ1RTLiBIT1dFVkVSLCBDLUtlcm1pdCBkb2VzIG5vdCBrbm93IHlvdSBoYXZlIGRvbmUgdGhp cy4gU28KLSAgIGlmIHlvdSBoYXZlIChzYXkpIFNFVCBGTE9XIERUUi9DRCwgQy1LZXJtaXQgd2ls bCBtYWtlIG5vIGF0dGVtcHQgdG8KLSAgIHRlbGwgdGhlIG1vZGVtIHRvIHVzZSBSVFMvQ1RTLiBZ b3UgcHJvYmFibHkgZGlkIHRoaXMgeW91cnNlbGYgd2hlbiB5b3UKLSAgIGNvbmZpZ3VyZWQgdGhl IG1vZGVtLgotCi02LjQuIFRoZSBEaWFsIFRpbWVvdXQKLQotICAgSWYgaXQgdGFrZXMgeW91ciBj YWxsIGxvbmdlciB0byBiZSBjb21wbGV0ZWQgdGhhbiB0aGUgdGltZW91dCBpbnRlcnZhbAotICAg dGhhdCBDLUtlcm1pdCBjYWxjdWxhdGVzLCB5b3UgY2FuIHVzZSB0aGUgU0VUIERJQUwgVElNRU9V VCBjb21tYW5kIHRvCi0gICBvdmVycmlkZSBDLUtlcm1pdCdzIHZhbHVlLiBCdXQgYmV3YXJlOiB0 aGUgbW9kZW0gaGFzIGl0cyBvd24gdGltZW91dAotICAgZm9yIGNvbXBsZXRpbmcgdGhlIGNhbGwu IElmIGl0IGlzIGEgSGF5ZXMtbGlrZSBtb2RlbSwgQy1LZXJtaXQgYWRqdXN0cwotICAgdGhlIG1v ZGVtJ3MgdmFsdWUgdG9vIGJ5IHNldHRpbmcgcmVnaXN0ZXIgUzcuIEJ1dCB0aGUgbWF4aW11bSB2 YWx1ZSBmb3IKLSAgIFM3IG1pZ2h0IGJlIHNtYWxsZXIgdGhhbiB0aGUgdGltZSB5b3UgbmVlZCEg SW4gdGhhdCBjYXNlLCBDLUtlcm1pdCBzZXRzCi0gICBTNyB0byAwLCAyNTUsIG9yIG90aGVyICht b2RlbS1zcGVjaWZpYykgdmFsdWUgdG8gc2lnbmlmeSAibm8gdGltZW91dCIuCi0gICBJZiBLZXJt aXQgYXR0ZW1wdHMgdG8gc2V0IHJlZ2lzdGVyIFM3IHRvIGEgdmFsdWUgaGlnaGVyIHRoYW4geW91 cgotICAgbW9kZW0ncyBtYXhpbXVtLCB0aGUgbW9kZW0gd2lsbCBzYXkgIkVSUk9SIiBhbmQgeW91 IHdpbGwgZ2V0IGEgIkZhaWx1cmUKLSAgIHRvIGluaXRpYWxpemUgbW9kZW0iIGVycm9yLiBJbiB0 aGF0IGNhc2UsIHVzZSBTRVQgRElBTCBUSU1FT1VUIHRvCi0gICBvdmVycmlkZSBDLUtlcm1pdCdz IGNhbGN1bGF0aW9uIG9mIHRoZSB0aW1lb3V0IHZhbHVlIHdpdGggdGhlIGhpZ2hlc3QKLSAgIHZh bHVlIHRoYXQgaXMgbGVnYWwgZm9yIHlvdXIgbW9kZW0sIGUuZy4gNjAuCi0KLTYuNS4gRXNjYXBl IFNlcXVlbmNlIEd1YXJkIFRpbWUKLQotICAgQSAiVElFUyIgKFRpbWUtSW5kZXBlbmRlbnQgRXNj YXBlIFNlcXVlbmNlKSBtb2RlbSBkb2VzIG5vdCByZXF1aXJlIGFueQotICAgZ3VhcmQgdGltZSBh cm91bmQgaXRzIGVzY2FwZSBzZXF1ZW5jZS4gVGhlIGZvbGxvd2luZyB0ZXh0OgotCi0gICsrK0FU SDAKLQotICAgaWYgc2VudCB0aHJvdWdoIGEgVElFUyBtb2RlbSwgZm9yIGV4YW1wbGUgYmVjYXVz ZSB5b3Ugd2VyZSB1cGxvYWRpbmcKLSAgIHRoaXMgZmlsZSB0aHJvdWdoIGl0LCBjb3VsZCBwb3Ag dGhlIG1vZGVtIGJhY2sgaW50byBjb21tYW5kIG1vZGUgYW5kCi0gICBtYWtlIGl0IGhhbmcgdXAg dGhlIGNvbm5lY3Rpb24uIExhdGVyIHZlcnNpb25zIG9mIHRoZSBUZWxlYml0IFQxNjAwIGFuZAot ICAgVDMwMDAgKHZlcnNpb24gTEEzLjAxRSBmaXJtd2FyZSBhbmQgbGF0ZXIpLCBhbmQgYWxsIFdv cmxkQmxhemVycywgdXNlCi0gICBUSUVTLgotCi0gICBBbHRob3VnaCB0aGUgcHJvYmFiaWxpdHkg b2YgIisrKyIgYXBwZWFyaW5nIGluIGEgS2VybWl0IHBhY2tldCBpcwotICAgbWFya2VkbHkgbG93 ZXIgdGhhbiB3aXRoIG1vc3Qgb3RoZXIgcHJvdG9jb2xzIChzZWUgdGhlIFs2NF1GaWxlCi0gICBU cmFuc2ZlciBzZWN0aW9uIGJlbG93KSwgaXQgY2FuIHN0aWxsIGhhcHBlbiB1bmRlciBjZXJ0YWlu Ci0gICBjaXJjdW1zdGFuY2VzLiBJdCBjYW4gYWxzbyBoYXBwZW4gd2hlbiB1c2luZyBDLUtlcm1p dCdzIFRSQU5TTUlUCi0gICBjb21tYW5kLiBJZiB5b3UgYXJlIHVzaW5nIGEgVGVsZWJpdCBUSUVT IG1vZGVtLCB5b3UgY2FuIGNoYW5nZSB0aGUKLSAgIG1vZGVtJ3MgZXNjYXBlIHNlcXVlbmNlIHRv IGFuIG90aGVyd2lzZSBsaXR0bGUtdXNlZCBjb250cm9sIGNoYXJhY3RlcgotICAgc3VjaCBhcyBD dHJsLV8gKENvbnRyb2wtVW5kZXJzY29yZSk6Ci0KLSAgQVQgUzI9MzEKLQotICAgQSBzZXF1ZW5j ZSBvZiB0aHJlZSBjb25zZWN1dGl2ZSBDdHJsLV8gY2hhcmFjdGVycyB3aWxsIG5vdCBhcHBlYXIg aW4gYQotICAgS2VybWl0IHBhY2tldCB1bmxlc3MgeW91IGdvIHRvIGV4dHJhb3JkaW5hcnkgbGVu Z3RocyB0byBkZWZlYXQgbW9yZQotICAgdGhhbiBhIGZldyBvZiBLZXJtaXQncyBidWlsdC1pbiBz YWZldHkgbWVjaGFuaXNtcy4gQW5kIGlmIHlvdSBkbyB0aGlzLAotICAgdGhlbiB5b3Ugc2hvdWxk IGFsc28gdHVybiBvZmYgdGhlIG1vZGVtJ3MgZXNjYXBlLXNlcXVlbmNlIHJlY29nbml0aW9uCi0g ICBhbHRvZ2V0aGVyOgotCi0gIEFUIFM0OD0wIFMyPTI1NQotCi0gICBCdXQgd2hlbiBlc2NhcGUg c2VxdWVuY2UgcmVjb2duaXRpb24gaXMgdHVybmVkIG9mZiwgIm1vZGVtIGhhbmd1cCIKLSAgICg8 cGF1c2U+KysrPHBhdXNlPkFUSDA8Q1I+KSB3aWxsIG5vdCB3b3JrLCBzbyB5b3Ugc2hvdWxkIGFs c28gU0VUIE1PREVNCi0gICBIQU5HVVAgUlMyMzItU0lHTkFMIChyYXRoZXIgdGhlbiBNT0RFTS1D T01NQU5EKS4KLQotNi42LiBBZGFwdGl2ZSBEaWFsaW5nCi0KLSAgIFNvbWUgbW9kZW1zIGhhdmUg YSBmZWF0dXJlIGNhbGxlZCBhZGFwdGl2ZSBkaWFsaW5nLiBXaGVuIHRoZXkgYXJlIHRvbGQKLSAg IHRvIGRpYWwgYSBudW1iZXIgdXNpbmcgVG9uZSBkaWFsaW5nLCB0aGV5IGNoZWNrIHRvIG1ha2Ug c3VyZSB0aGF0Ci0gICBkaWFsdG9uZSBoYXMgZ29uZSBhd2F5IGFmdGVyIGRpYWxpbmcgdGhlIGZp cnN0IGRpZ2l0LiBJZiBpdCBoYXMgbm90LAotICAgdGhlIG1vZGVtIGFzc3VtZXMgdGhlIHBob25l IGxpbmUgZG9lcyBub3QgYWNjZXB0IFRvbmUgZGlhbGluZyBhbmQgc28KLSAgIHN3aXRjaGVzIHRv IFB1bHNlLiBXaGVuIGRpYWxpbmcgb3V0IGZyb20gYSBQQlgsIHRoZXJlIGlzIGFsbW9zdCBhbHdh eXMKLSAgIGEgc2Vjb25kYXJ5IGRpYWx0b25lLiBUeXBpY2FsbHkgeW91IHRha2UgdGhlIHBob25l IG9mZi1ob29rLCBnZXQgdGhlCi0gICBQQlggZGlhbHRvbmUsIGRpYWwgIjkiIHRvIGdldCBhbiBv dXRzaWRlIGxpbmUsIGFuZCB0aGVuIGdldCB0aGUgcGhvbmUKLSAgIGNvbXBhbnkncyBkaWFsdG9u ZS4gSW4gYSBzaXR1YXRpb24gbGlrZSB0aGlzLCB5b3UgbmVlZCB0byB0ZWxsIHRoZQotICAgbW9k ZW0gdG8gZXhwZWN0IHRoZSBzZWNvbmRhcnkgZGlhbHRvbmUuIE9uIEhheWVzIGFuZCBjb21wYXRp YmxlIG1vZGVtcywKLSAgIHRoaXMgaXMgZG9uZSBieSBwdXR0aW5nIGEgIlciIGluIHRoZSBkaWFs IHN0cmluZyBhdCB0aGUgYXBwcm9wcmlhdGUKLSAgIHBsYWNlLiBGb3IgZXhhbXBsZSwgdG8gZGlh bCA5IGZvciBhbiBvdXRzaWRlIGxpbmUsIGFuZCB0aGVuIDc2NTQzMjEsCi0gICB1c2UgQVREVDlX NzY1NDMyMToKLQotICBTRVQgUEJYLU9VVFNJREUtUFJFRklYIDlXCi0KLSAgIChyZXBsYWNlICI5 IiB3aXRoIHdoYXRldmVyIHlvdXIgUEJYJ3Mgb3V0c2lkZS1saW5lIHByZWZpeCBpcykuCi0KLTYu Ny4gVGhlIEJ1c3kgU2lnbmFsCi0KLSAgIFNvbWUgcGhvbmUgY29tcGFuaWVzIGFyZSBlbGltaW5h dGluZyB0aGUgYnVzeSBzaWduYWwuIEluc3RlYWQsIHRoZXkKLSAgIGlzc3VlIGEgdm9pY2UgbWVz c2FnZSBzdWNoIGFzICJwcmVzcyAxIHRvIGF1dG9tYXRpY2FsbHkgcmVkaWFsIHVudGlsCi0gICB0 aGUgbnVtYmVyIGFuc3dlcnMsIG9yLi4uIi4gT2J2aW91c2x5IHRoaXMgaXMgYSBkaXNhc3RlciBm b3IgbW9kZW0KLSAgIGNhbGxzLiBJZiB5b3VyIHNlcnZpY2UgaGFzIHRoaXMgZmVhdHVyZSwgdGhl cmUncyBub3RoaW5nIEtlcm1pdCBjYW4gZG8KLSAgIGFib3V0IGl0LiBZb3VyIG1vZGVtIHdpbGwg cmVzcG9uZCB3aXRoIE5PIENBUlJJRVIgKGFmdGVyIGEgbG9uZyB0aW1lKQotICAgcmF0aGVyIHRo YW4gQlVTWSAoaW1tZWRpYXRlbHkpLCBhbmQgS2VybWl0IHdpbGwgZGVjbGFyZSB0aGUgY2FsbCBh Ci0gICBmYWlsdXJlLCByYXRoZXIgdGhhbiB0cnlpbmcgdG8gcmVkaWFsIHRoZSBzYW1lIG51bWJl ci4KLQotNi44LiBIYW5naW5nIFVwCi0KLSAgIFRoZXJlIGFyZSB0d28gd2F5cyB0byBoYW5nIHVw IGEgbW9kZW06IGJ5IHR1cm5pbmcgb2ZmIHRoZSBzZXJpYWwgcG9ydCdzCi0gICBEVFIgc2lnbmFs IChTRVQgTU9ERU0gSEFOR1VQLU1FVEhPRCBSUzIzMi1TSUdOQUwpIG9yIHNlbmRpbmcgdGhlIG1v ZGVtCi0gICBpdHMgZXNjYXBlIHNlcXVlbmNlIGZvbGxvd2VkIGJ5IGl0cyBoYW5ndXAgY29tbWFu ZCAoU0VUIE1PREVNCi0gICBIQU5HVVAtTUVUSE9EIE1PREVNLUNPTU1BTkQpLiBJZiBvbmUgZG9l c24ndCB3b3JrLCB0cnkgdGhlIG90aGVyLiBJZgotICAgdGhlIGF1dG9tYXRpYyBoYW5ndXAgcGVy Zm9ybWVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBESUFMIGNvbW1hbmQKLSAgIGNhdXNlcyB0cm91 YmxlLCB0aGVuIFNFVCBESUFMIEhBTkdVUCBPRkYuCi0KLSAgIFRoZSBIQU5HVVAgY29tbWFuZCBo YXMgbm8gZWZmZWN0IHdoZW4gQy1LZXJtaXQgaXMgaW4gcmVtb3RlIG1vZGUuIFRoaXMKLSAgIGlz IG9uIHB1cnBvc2UuIElmIEMtS2VybWl0IGNvdWxkIGhhbmcgdXAgaXRzIG93biBjb250cm9sbGlu ZyB0ZXJtaW5hbCwKLSAgIHRoaXMgd291bGQgKGEpIG1vc3QgbGlrZWx5IGxlYXZlIGJlaGluZCB6 b21iaWUgcHJvY2Vzc2VzLCBhbmQgKGIpIHBvc2UKLSAgIGEgc2VjdXJpdHkgcmlzay4KLQotICAg SWYgeW91IERJQUwgYSBtb2RlbSwgZGlzY29ubmVjdCwgdGhlbiBTRVQgSE9TVCBvciBURUxORVQs IGFuZCB0aGVuCi0gICBIQU5HVVAsIEtlcm1pdCBzZW5kcyB0aGUgbW9kZW0ncyBoYW5ndXAgY29t bWFuZCwgc3VjaCBhcyAiKysrQVRITyIuCi0gICBUaGVyZSBpcyBubyBnb29kIHdheSB0byBhdm9p ZCB0aGlzLCBiZWNhdXNlIHRoaXMgY2FzZSBjYW4ndCByZWxpYWJseSBiZQotICAgZGlzdGluZ3Vp c2hlZCBmcm9tIHRoZSBjYXNlIGluIHdoaWNoIHRoZSB1c2VyIGRvZXMgU0VUIEhPU1QKLSAgIHRl cm1pbmFsLXNlcnZlciwgU0VUIE1PREVNIFRZUEUgbmFtZSwgRElBTC4gSW4gYm90aCBjYXNlcyB3 ZSBoYXZlIGEKLSAgIHZhbGlkIG1vZGVtIHR5cGUgc2VsZWN0ZWQgYW5kIHdlIGhhdmUgYSBuZXR3 b3JrIGNvbm5lY3Rpb24uIElmIHlvdSB3YW50Ci0gICB0byBESUFMIGFuZCB0aGVuIGxhdGVyIG1h a2UgYSByZWd1bGFyIG5ldHdvcmsgY29ubmVjdGlvbiwgeW91IHdpbGwgaGF2ZQotICAgdG8gU0VU IE1PREVNIFRZUEUgTk9ORSBvciBTRVQgRElBTCBIQU5HVVAgT0ZGIHRvIGF2b2lkIHRoaXMgcGhl bm9tZW5vbi4KLQotNy4gVEVSTUlOQUwgU0VSVkVSUwotCi0gICBbIFs2NV1Ub3AgXSBbIFs2Nl1D b250ZW50cyBdIFsgWzY3XU5leHQgXSBbIFs2OF1QcmV2aW91cyBdCi0KLSAgIFdhdGNoIG91dCBm b3IgdGVybWluYWwgc2VydmVyJ3MgZXNjYXBlIGNoYXJhY3RlciAtLSB1c3VhbGx5IGEgY29udHJv bAotICAgY2hhcmFjdGVyIHN1Y2ggYXMgQ3RybC1DaXJjdW1mbGV4IChDdHJsLV4pLiBEb24ndCB1 bnByZWZpeCBpdCBpbgotICAgS2VybWl0IQotCi0gICBDaXNjb3MgLS0gbXVzdCBvZnRlbiBiZSB0 b2xkIHRvICJ0ZXJtaW5hbCBkb3dubG9hZCIuLi4gQ2lzY28gQVNNIG1vZGVscwotICAgZG9uJ3Qg aGF2ZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaW4gYm90aCBkaXJlY3Rpb25zLgotCi0gICBNYW55 IHRlcm1pbmFsIHNlcnZlcnMgb25seSBnaXZlIHlvdSBhIDctYml0IGNvbm5lY3Rpb24sIHNvIGlm IHlvdSBjYW4ndAotICAgbWFrZSBpdCA4LWJpdCwgdGVsbCBLZXJtaXQgdG8gInNldCBwYXJpdHkg c3BhY2UiLgotCi0gICBUaGUgZm9sbG93aW5nIHN0b3J5LCByZWdhcmRpbmcgdHJvdWJsZSB0cmFu c2ZlcnJpbmcgOC1iaXQgZmlsZXMgdGhyb3VnaAotICAgYSByZXZlcnNlIHRlcm1pbmFsIHNlcnZl ciwgd2FzIGNvbnRyaWJ1dGVkIGJ5IGFuIEFubmV4IHRlcm1pbmFsIHNlcnZlcgotICAgdXNlcjoK LQotICAgICBVc2luZyBDLUtlcm1pdCBvbiBhbiBIUCA5MDAwIDcxMi84MCBydW5uaW5nIHRoZSBI UC1VWCAxMC4wMAotICAgICBvcGVyYXRpbmcgc3lzdGVtLiBUaGUgSFAgd2FzIGNvbm5lY3RlZCB0 byBhIFh5bG9naWNzIEFubmV4Ci0gICAgIE1JQ1JPLUVMUy1VWCBSNy4xIDggcG9ydCB0ZXJtaW5h bCBzZXJ2ZXIgdmlhIGV0aGVybmV0LiBPbiB0aGUgc2Vjb25kCi0gICAgIHBvcnQgb2YgdGhlIHRl cm1pbmFsIHNlcnZlciBpcyBhbiBBVCZUIFBhcmFkeW5lIDM4MTAgbW9kZW0sIHdoaWNoIGlzCi0g ICAgIGNvbm5lY3RlZCB0byBhIHRlbGVwaG9uZSBsaW5lLiBUaGVyZSBpcyBhIHByb2dyYW0gd2hp Y2ggcnVucyBvbiB0aGUKLSAgICAgSFAgdG8gZXN0YWJsaXNoIGEgVGVsbmV0IGNvbm5lY3Rpb24g YmV0d2VlbiBhIHNlcmlhbCBsaW5lIG9uIHRoZQotICAgICBBbm5leCBhbmQgYSBjaGFyYWN0ZXIg c3BlY2lhbCBmaWxlIG9uIHRoZSBIUCAoL2RldiBmaWxlKS4gVGhpcyBpcyBhbgotICAgICBBbm5l eCBzcGVjaWZpYyBwcm9ncmFtIGNhbGxlZCBydGVsbmV0IChyZXZlcnNlIHRlbG5ldCkgYW5kIGlz Ci0gICAgIHByb3ZpZGVkIHdpdGggdGhlIHRlcm1pbmFsIHNlcnZlciBzb2Z0d2FyZS4gVGhlIHJ0 ZWxuZXQgdXRpbGl0eSBydW5zCi0gICAgIG9uIHRvcCBvZiB0aGUgcHNldWRvLXRlcm1pbmFsIGZh Y2lsaXR5IHByb3ZpZGVkIGJ5IFVOSVguIEl0IGNyZWF0ZXMKLSAgICAgaG9zdC1vcmlnaW5hdGVk IGNvbm5lY3Rpb25zIHRvIGRldmljZXMgYXR0YWNoZWQgb3QgQW5uZXggc2VyaWFsCi0gICAgIHBv cnRzLiBUaGVyZSBhcmUgc2V2ZXJhbCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGJlIHNwZWNp ZmllZCB3aXRoCi0gICAgIHRoaXMgcHJvZ3JhbTogdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHRlcm1p bmFsIHNlcnZlciwgdGhlIG51bWJlciBvZgotICAgICB0aGUgcG9ydCB0byBhdHRhY2ggdG8sIGFu ZCB0aGUgbmFtZSBvZiB0aGUgcHNldWRvLWRldmljZSB0byBjcmVhdGUuCi0gICAgIEluIGFkZGl0 aW9uIHRvIHRoZXNlIHRoZXJlIGFyZSBvcHRpb25zIHRvIHRlbGwgcnRlbG5ldCBob3cgdG8KLSAg ICAgb3BlcmF0ZSBvbiB0aGUgY29ubmVjdDogLWIgcmVxdWVzdHMgbmVnb3RpYXRpb24gZm9yIFRl bG5ldCBiaW5hcnkKLSAgICAgbW9kZSwgLWQgdHVybnMgb24gc29ja2V0LWxldmUgZGVidWdnaW5n LCAtZiBlbmFibGVzICJjb25uZWN0IG9uIHRoZQotICAgICBmbHkiIG1vZGUsIC1yIHJlbW92ZXMg dGhlIGRldmljZS1uYW1lIGlmIGl0IGFscmVhZHkgZXhpc3RzLCBldGMuIFRoZQotICAgICBtb3N0 IGltcG9ydGFudCBvZiB0aGVzZSB0byBiZSBzcGVjaWZpZWQgd2hlbiB1c2luZyA4IGRhdGEgYml0 cyBhbmQKLSAgICAgbm8gcGFyaXR5LCBhcyB3ZSBmb3VuZCBvdXQsIHdhcyB0aGUgLXQgb3B0aW9u LiBUaGlzIGNyZWF0ZXMgYQotICAgICB0cmFuc3BhcmVudCBUQ1AgY29ubmVjdGlvbiB0byB0aGUg dGVybWluYWwgc2VydmVyLiBBZ2Fpbiwgd2hhdCB3ZQotICAgICBhc3N1bWVkIHRvIGJlIGhhcHBl bmluZyB3YXMgdGhhdCB0aGUgcnRlbG5ldCBwcm9ncmFtIGVuY291bnRlcmVkIGEKLSAgICAgY2hh cmFjdGVyIHNlcXVlbmNlIHNwZWNpYWwgdG8gaXRzZWxmIGFuZCB0aGVuICJlYXRpbmciIHRob3Nl IGtlcm1pdAotICAgICBwYWNrZXRzLiBJIHRoaW5rIHRoaXMgaXMgYWxsIG9mIHRoZSBpbmZvcm1h dGlvbiBJIGNhbiBnaXZlIHlvdSBvbgotICAgICB0aGUgY29uZmlndXJhdGlvbiwgc2hvcnQgb2Yg dGhlIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBvcnQgb24KLSAgICAgdGhlIHRlcm1pbmFs IHNlcnZlci4KLQotICAgSG93IHRvIERJQUwgZnJvbSBhIFRDUC9JUCByZXZlcnNlIHRlcm1pbmFs IHNlcnZlciAobW9kZW0gc2VydmVyKToKLQotICAgIDEuIChvbmx5IGlmIG5lY2Vzc2FyeSkgU0VU IFRFTE5FVCBFQ0hPIFJFTU9URQotICAgIDIuIFNFVCBIT1NUIHRlcm1pbmFsLXNlcnZlci1pcC1u YW1lLW9yLWFkZHJlc3MgWyBwb3J0IF0KLSAgICAzLiBTRVQgTU9ERU0gVFlQRSBtb2RlbS10eXBl Ci0gICAgNC4gKG9ubHkgaWYgbmVjZXNzYXJ5KSBTRVQgRElBTCBIQU5HVVAgT0ZGCi0gICAgNS4g KGZvciB0cm91Ymxlc2hvb3RpbmcpIFNFVCBESUFMIERJU1BMQVkgT04KLSAgICA2LiBESUFMIHBo b25lLW51bWJlcgotCi0gICBUaGUgb3JkZXIgaXMgaW1wb3J0YW50OiBTRVQgSE9TVCBiZWZvcmUg U0VUIE1PREVNIFRZUEUuIFNpbmNlIHRoaXMgaXMgYQotICAgVGVsbmV0IGNvbm5lY3Rpb24sIHNl cmlhbC1wb3J0IHJlbGF0ZWQgY29tbWFuZHMgc3VjaCBhcyBTRVQgU1BFRUQsIFNFVAotICAgU1RP UC1CSVRTLCBIQU5HVVAgKHdoZW4gTU9ERU0gSEFOR1VQLU1FVEhPRCBpcyBSUzIzMiksIGV0Yywg aGF2ZSBubwotICAgZWZmZWN0LiBIb3dldmVyLCBpbiBDLUtlcm1pdCA4LjAsIGlmIHRoZSBtb2Rl bSBzZXJ2ZXIgc3VwcG9ydHMKLSAgIFs2OV1SRkMtMjIxNyBUZWxuZXQgQ29tLVBvcnQgQ29udHJv bCBwcm90b2NvbCwgdGhlc2UgY29tbWFuZHMgZG8gaW5kZWVkCi0gICB0YWtlIGVmZmVjdCBhdCB0 aGUgc2VydmVyJ3Mgc2VyaWFsIHBvcnQuCi0KLTguIFRFUk1JTkFMIEVNVUxBVElPTgotCi0gICBb IFs3MF1Ub3AgXSBbIFs3MV1Db250ZW50cyBdIFsgWzcyXU5leHQgXSBbIFs3M11QcmV2aW91cyBd Ci0KLSAgIEV4Y2VwdCBmb3IgdGhlIFdpbmRvd3MsIE9TLzIsIGFuZCBNYWNpbnRvc2ggdmVyc2lv bnMsIEMtS2VybWl0IGRvZXMgbm90Ci0gICBlbXVsYXRlIGFueSBraW5kIG9mIHRlcm1pbmFsLiBS YXRoZXIsIGl0IGFjdHMgYXMgYSAic2VtaXRyYW5zcGFyZW50Ci0gICBwaXBlIiwgcGFzc2luZyB0 aGUgY2hhcmFjdGVycyB5b3UgdHlwZSBkdXJpbmcgYSBDT05ORUNUIHNlc3Npb24gdG8gdGhlCi0g ICByZW1vdGUgaG9zdCwgYW5kIHNlbmRpbmcgdGhlIGNoYXJhY3RlcnMgcmVjZWl2ZWQgZnJvbSB0 aGUgcmVtb3RlIGhvc3QKLSAgIHRvIHlvdXIgc2NyZWVuLiBXaGF0ZXZlciBpcyBjb250cm9sbGlu ZyB5b3VyIGtleWJvYXJkIGFuZCBzY3JlZW4KLSAgIHByb3ZpZGVzIHRoZSBzcGVjaWZpYyB0ZXJt aW5hbCBlbXVsYXRpb246IGEgcmVhbCB0ZXJtaW5hbCwgYSBQQyBydW5uaW5nCi0gICBhIHRlcm1p bmFsIGVtdWxhdG9yLCBldGMsIG9yIChpbiB0aGUgY2FzZSBvZiBhIHNlbGYtY29udGFpbmVkCi0g ICB3b3Jrc3RhdGlvbikgeW91ciBjb25zb2xlIGRyaXZlciwgYSB0ZXJtaW5hbCB3aW5kb3csIHh0 ZXJtLCBldGMuCi0KLSAgIEtlcm1pdCBpcyBzZW1pdHJhbnNwYXJlbnQgcmF0aGVyIHRoYW4gZnVs bHkgdHJhbnNwYXJlbnQgaW4gdGhlCi0gICBmb2xsb3dpbmcgd2F5czoKLQotICAgICAqIER1cmlu ZyBhIFRFTE5FVCAoInNldCBob3N0Iikgc2Vzc2lvbiwgQy1LZXJtaXQgaXRzZWxmIGV4ZWN1dGVz IHRoZQotICAgICAgIFRFTE5FVCBwcm90b2NvbCBhbmQgcGVyZm9ybXMgVEVMTkVUIG5lZ290aWF0 aW9ucy4gKEJ1dCBpdCBkb2VzIG5vdAotICAgICAgIHBlcmZvcm0gVE4zMjcwIHByb3RvY29sIG9y IGFueSBvdGhlciB0eXBlIG9mIDMyNzAgdGVybWluYWwKLSAgICAgICBlbXVsYXRpb24uKQotICAg ICAqIElmIHlvdSBoYXZlIGNoYW5nZWQgeW91ciBrZXlib2FyZCBtYXBwaW5nIHVzaW5nIFNFVCBL RVksIEMtS2VybWl0Ci0gICAgICAgcmVwbGFjZXMgdGhlIGNoYXJhY3RlcnMgeW91IHR5cGUgd2l0 aCB0aGUgY2hhcmFjdGVycyBvciBzdHJpbmdzCi0gICAgICAgdGhleSBhcmUgbWFwcGVkIHRvLgot ICAgICAqIElmIHlvdSBTRVQgeW91ciBURVJNSU5BTCBDSEFSQUNURVItU0VUIHRvIGFueXRoaW5n IGJ1dCBUUkFOU1BBUkVOVCwKLSAgICAgICBDLUtlcm1pdCB0cmFuc2xhdGVzIHlvdXIga2V5c3Ry b2tlcyAoYWZ0ZXIgYXBwbHlpbmcgYW55IFNFVCBLRVkKLSAgICAgICBkZWZpbml0aW9ucykgYmVm b3JlIHRyYW5zbWl0dGluZyB0aGVtLCBhbmQgdHJhbnNsYXRlcyByZWNlaXZlZAotICAgICAgIGNo YXJhY3RlcnMgYmVmb3JlIHNob3dpbmcgdGhlbSBvbiB5b3VyIHNjcmVlbi4KLSAgICAgKiBJZiB5 b3VyIHJlbW90ZSBhbmQvb3IgbG9jYWwgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCBpcyBhbiBJU08g NjQ2Ci0gICAgICAgNy1iaXQgbmF0aW9uYWwgY2hhcmFjdGVyIHNldCwgc3VjaCBhcyBHZXJtYW4s IEZyZW5jaCwgSXRhbGlhbiwKLSAgICAgICBTd2VkaXNoLCBldGMsIG9yIFNob3J0IEtPSSB1c2Vk IGZvciBDeXJpbGxpYywgQy1LZXJtaXQncyBDT05ORUNUCi0gICAgICAgY29tbWFuZCBhdXRvbWF0 aWNhbGx5IHNraXBzIG92ZXIgQU5TSSBlc2NhcGUgc2VxdWVuY2VzIHRvIGF2b2lkCi0gICAgICAg dHJhbnNsYXRpbmcgdGhlaXIgY2hhcmFjdGVycy4gT25seSBBTlNJL0lTTyBzdGFuZGFyZAotICAg ICAgIChWVDEwMC8yMDAvMzAwLWxpa2UpIDctYml0IGVzY2FwZSBzZXF1ZW5jZSBmb3JtYXRzIGFy ZSBzdXBwb3J0ZWQKLSAgICAgICBmb3IgdGhpcyBwdXJwb3NlLCBubyBwcm9wcmlldGFyeSBzY2hl bWVzIGxpa2UgSC1QLCBUZWxldmlkZW8sCi0gICAgICAgVGVrdHJvbml4LCBldGMuCi0gICAgICog SWYgeW91ciB2ZXJzaW9uIG9mIEMtS2VybWl0IGluY2x1ZGVzIFNFVCBURVJNSU5BTCBBUEMgY29t bWFuZCwgdGhlbgotICAgICAgIEMtS2VybWl0J3MgQ09OTkVDVCBjb21tYW5kIHdpbGwgaGFuZGxl IEFQQyBlc2NhcGUgc2VxdWVuY2VzIGlmCi0gICAgICAgVEVSTUlOQUwgQVBDIGlzIG5vdCBzZXQg dG8gT0ZGICh3aGljaCBpcyB0aGUgZGVmYXVsdCkuCi0KLSAgIFlvdSBjYW4gbWFrZSBDLUtlcm1p dCBmdWxseSB0cmFuc3BhcmVudCBieSBzdGFydGluZyBpdCB3aXRoIHRoZSAtMAotICAgKGRhc2gg emVybykgY29tbWFuZC1saW5lIG9wdGlvbi4KLQotICAgSWYgeW91IGFyZSBydW5uaW5nIEMtS2Vy bWl0IHVuZGVyIGEgY29uc29sZSBkcml2ZXIsIG9yIGluIGEgdGVybWluYWwKLSAgIHdpbmRvdywg dGhhdCBlbXVsYXRlcyB0aGUgVlQxMDAsIGFuZCB1c2UgQy1LZXJtaXQgdG8gbG9nIGluIHRvIGEg Vk1TCi0gICBzeXN0ZW0sIHRoZSBjb25zb2xlIGRyaXZlciBvciB0ZXJtaW5hbCB3aW5kb3cgKG5v dCBLZXJtaXQpIGlzIHN1cHBvc2VkCi0gICB0byByZXBseSB0byB0aGUgIndoYXQgYXJlIHlvdT8i IHF1ZXJ5IChFU0MgWikgZnJvbSB0aGUgVkFYLiBJZiBpdAotICAgZG9lc24ndCwgYW5kIHlvdSBj YW4ndCBtYWtlIGl0IGRvIHNvLCB0aGVuIHlvdSBjYW4gKGEpIGxpdmUgd2l0aCB0aGUKLSAgICJ1 bmtub3duIHRlcm1pbmFsIiBwcm9ibGVtOyAoYikgdGVsbCBWTVMgdG8gU0VUIFRFUk1JTkFML0RF VklDRT1WVDEwMDsKLSAgIChjKSBwcm9ncmFtIGEga2V5IHVzaW5nIFNFVCBLRVkgdG8gc2VuZCB0 aGUgYXBwcm9wcmlhdGUgc2VxdWVuY2UgYW5kCi0gICB0aGVuIHB1bmNoIHRoZSBrZXkgYXQgdGhl IHJpZ2h0IHRpbWU7IG9yIChkKSB1c2UgdGhlIFZNU0xPR0lOIG1hY3JvCi0gICB0aGF0IGlzIGRl ZmluZWQgaW4gQ0tFUk1JVC5JTkkgdG8gZG8gdGhpcyBmb3IgeW91IGF1dG9tYXRpY2FsbHkuCi0K LSAgIFNFVCBTRVNTSU9OLUxPRyB7IFRFWFQsIEJJTkFSWSB9LCB3aGljaCBpcyBlZmZlY3RpdmUg aW4gVU5JWCBhbmQgQU9TL1ZTCi0gICBidXQgbm90IG90aGVyIEMtS2VybWl0IHZlcnNpb25zLCBy ZW1vdmVzIENSLCBERUwsIE5VTCwgWE9OLCBhbmQgWE9GRgotICAgY2hhcmFjdGVycyAoVXNpbmcg Qy1LZXJtaXQgbmVnbGVjdHMgdG8gbWVudGlvbiB0aGF0IFhPTiBhbmQgWE9GRiBhcmUKLSAgIHJl bW92ZWQpLiBUaGUgVEVYVC1tb2RlIHNldHRpbmcgaXMgaW5lZmZlY3RpdmUgZHVyaW5nIFNDUklQ VCBjb21tYW5kCi0gICBleGVjdXRpb24sIGFzIHdlbGwgYXMgb24gWC4yNSBjb25uZWN0aW9ucy4K LQotOS4gS0VZIE1BUFBJTkcKLQotICAgWyBbNzRdVG9wIF0gWyBbNzVdQ29udGVudHMgXSBbIFs3 Nl1OZXh0IF0gWyBbNzddUHJldmlvdXMgXQotCi0gICBFeGNlcHQgaW4gdGhlIHRlcm1pbmFsLWVt dWxhdGluZyB2ZXJzaW9ucywgQy1LZXJtaXQncyBrZXkgbWFwcGluZwotICAgZmFjaWxpdGllcyBh cmUgbGltaXRlZCB0byBub3JtYWwgIkFTQ0lJIiBrZXlzLCBhbmQgY2Fubm90IGJlIHVzZWQgd2l0 aAotICAgZnVuY3Rpb24ga2V5cywgYXJyb3cga2V5cywgYXJjYW5lIGtleSBjb21iaW5hdGlvbnMs IGV0Yy4gU2luY2UgQy1LZXJtaXQKLSAgIHJ1bnMgb24gc3VjaCBhIHdpZGUgdmFyaWV0eSBvZiBo YXJkd2FyZSBwbGF0Zm9ybXMgKGluY2x1ZGluZywgZm9yCi0gICBleGFtcGxlLCBtb3JlIHRoYW4g MzYwIGRpZmZlcmVudCBVTklYIHBsYXRmb3JtcyksIGl0IGlzIG5vdCBwb3NzaWJsZQotICAgZm9y IEMtS2VybWl0IHRvIHN1cHBvcnQgZXZlcnkgY29uY2VpdmFibGUga2V5Ym9hcmQgdW5kZXIgZXZl cnkgcmVsZWFzZQotICAgb2YgZXZlcnkgVU5JWCAob3IgVk1TLCBvciAuLi4pIHByb2R1Y3Qgb24g ZXZlcnkgZGlmZmVyZW50IGtpbmQgb2YKLSAgIGNvbXB1dGVyIHBvc3NpYmx5IHVuZGVyIGFsbCBt YW5uZXIgb2YgZGlmZmVyZW50IGNvbnNvbGUgZHJpdmVycywgZXZlbgotICAgaWYgaXQgaGFkIHRo ZSBtZWFucyB0byBkbyBzby4KLQotICAgSW4gdGVjaG5pY2FsIHRlcm1zLCBDLUtlcm1pdCB1c2Vz IHRoZSByZWFkKCkgZnVuY3Rpb24gdG8gcmVhZAotICAga2V5c3Ryb2tlcywgYW5kIHJlYWQoKSBy ZXR1cm5zIGEgc2luZ2xlIGJ5dGUgKHZhbHVlIDAgdGhyb3VnaCAyNTUpLgotICAgQy1LZXJtaXQn cyBTRVQgS0VZIGZ1bmN0aW9uIGFwcGxpZXMgdG8gdGhlc2Ugc2luZ2xlLWJ5dGUgY29kZXMuCi0g ICAiRXh0ZW5kZWQgZnVuY3Rpb24iIGtleXMsIHN1Y2ggYXMgRi1rZXlzLCBhcnJvdyBrZXlzLCBl dGMsIHVzdWFsbHkKLSAgIHJldHVybiBlaXRoZXIgYSAyLWJ5dGUgInNjYW4gY29kZSIgb3IgZWxz ZSBhIGNoYXJhY3RlciBzdHJpbmcgKHN1Y2ggYXMKLSAgIGFuIGVzY2FwZSBzZXF1ZW5jZSBsaWtl ICI8RVNDPiBPIHAiKS4gSW4gYm90aCBjYXNlcywgQy1LZXJtaXQgaGFzIG5vCi0gICB3YXkgdG8g dGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN1Y2ggbXVsdGlieXRlIGtleSB2YWx1ZXMsIGFu ZCB0aGUKLSAgIGNvcnJlc3BvbmRpbmcgc2VyaWVzIG9mIHNpbmdsZS1ieXRlIGtleSB2YWx1ZXMu IFRoaXMgY291bGQgb25seSBiZSBkb25lCi0gICBieSBhY2Nlc3NpbmcgdGhlIGtleWJvYXJkIGF0 IGEgbXVjaCBsb3dlciBsZXZlbCBpbiBhIGhpZ2hseQotICAgcGxhdGZvcm0tZGVwZW5kZW50IG1h bm5lciwgcHJvYmFibHkgcmVxdWlyaW5nIHRlbnMgb2YgdGhvdXNhbmRzIG9mCi0gICBsaW5lcyBv ZiBjb2RlIHRvIHN1cHBvcnQgZXZlbiBhIHNhbXBsaW5nIG9mIHRoZSBtb3N0IHBvcHVsYXIKLSAg IHdvcmtzdGF0aW9uIC8gT1MgY29tYmluYXRpb25zLgotCi0gICBIb3dldmVyLCBtb3N0IHdvcmtz dGF0aW9uIGNvbnNvbGUgZHJpdmVycyAodGVybWluYWwgZW11bGF0aW9uIHdpbmRvd3MsCi0gICBl dGMpIGluY2x1ZGUgdGhlaXIgb3duIGtleS1tYXBwaW5nIGZhY2lsaXR5LiBGb3IgZXhhbXBsZSBp biBBSVgsIHRoZQotICAgQUlYdGVybSBwcm9ncmFtIChpbiB3aG9zZSB3aW5kb3cgeW91IHdvdWxk IHJ1biBDLUtlcm1pdCkgYWxsb3dzCi0gICByZWJpbmRpbmcgb2YgdGhlIEYxLUYxMiBrZXlzIHRv IGFyYml0cmFyeSBzdHJpbmdzLiBUaGUgc2FtZSBpcyB0cnVlIG9mCi0gICBYdGVybSBhbmQgREVD dGVybSB3aW5kb3dzLCBldGMuIENvbnN1bHQgdGhlIHRlY2huaWNhbCBkb2N1bWVudGF0aW9uIGZv cgotICAgeW91ciB3b3Jrc3RhdGlvbiBvciBlbXVsYXRvci4gU2VlIHNhbXBsZSBYdGVybSAoWG1v ZG1hcCkgbWFwcGluZ3MgaW4KLSAgIHRoZSBbNzhdVW5peCBDLUtlcm1pdCBIaW50cyBhbmQgVGlw cyBkb2N1bWVudC4KLQotICAgVGhlIFNFVCBLRVkgY29tbWFuZCAoZXhjZXB0IGluIEtlcm1pdCA5 NSkgZG9lcyBub3QgYWxsb3cgYSBrZXkKLSAgIGRlZmluaXRpb24gdG8gYmUgKG9yIGNvbnRhaW4p IHRoZSBOVUwgKFwwKSBjaGFyYWN0ZXIuCi0KLTEwLiBGSUxFIFRSQU5TRkVSCi0KLSAgIFsgWzc5 XVRvcCBdIFsgWzgwXUNvbnRlbnRzIF0gWyBbODFdTmV4dCBdIFsgWzgyXVByZXZpb3VzIF0KLQot ICAgQy1LZXJtaXQgNy4wIGlzIHRoZSBmaXJzdCByZWxlYXNlIG9mIEMtS2VybWl0IHRvIHVzZSBm YXN0IChyYXRoZXIgdGhhbgotICAgcm9idXN0IGFuZCB0aGVyZWZvcmUgc2xvdykgcHJvdG9jb2wg ZGVmYXVsdHM6IGxvbmcgcGFja2V0cywgc2xpZGluZwotICAgd2luZG93cywgY29udHJvbC1jaGFy YWN0ZXIgdW5wcmVmaXhpbmcsIGFuZCBzdHJlYW1pbmcgd2hlcmUgcG9zc2libGUuCi0gICBUaGlz IG1ha2VzIG1vc3QgdHJhbnNmZXJzIChwYXJ0bmVyIHdpbGxpbmcpIGRyYW1hdGljYWxseSBmYXN0 ZXIgIm91dCBvZgotICAgdGhlIGJveCIgYnV0IG1pZ2h0IGJyZWFrIHNvbWUgY29tYmluYXRpb25z IHRoYXQgd29ya2VkIGJlZm9yZS4gSWYKLSAgIHRyYW5zZmVycyB3aXRoIEMtS2VybWl0IDcuMCBv ciBsYXRlciBmYWlsIHdoZXJlIHRyYW5zZmVycyB3b3JrZWQgd2l0aAotICAgZWFybGllciBDLUtl cm1pdCB2ZXJzaW9ucywgdHJ5IHRoZSBmb2xsb3dpbmcgKG9uZSBhdCBhIHRpbWUsIGluIHRoaXMK LSAgIG9yZGVyKToKLQotICAgIDEuIFNFVCBQUkVGSVhJTkcgQUxMOiBEaXNhYmxlcyBjb250cm9s LWNoYXJhY3RlciB1bnByZWZpeGluZy4KLSAgICAyLiBTRVQgU1RSRUFNSU5HIE9GRjogRGlzYWJs ZXMgc3RyZWFtaW5nLgotICAgIDMuIENBVVRJT1VTOiBTZWxlY3RzIG1lZGl1bSBidXQgY2F1dGlv dXMgcHJvdG9jb2wgc2V0dGluZ3MuCi0gICAgNC4gUk9CVVNUOiB0aGlzIGNvbW1hbmQgcmV2ZXJ0 cyB0byB0aGUgbW9zdCBjb25zZXJ2YXRpdmUgcHJvdG9jb2wKLSAgICAgICBzZXR0aW5ncy4KLQot ICAgRXhlY3V0aW9uIG9mIG11bHRpcGxlIGZpbGUgdHJhbnNmZXJzIGJ5IEMtS2VybWl0IGZyb20g YSBjb21tYW5kIGZpbGUKLSAgIHdoZW4gaW4gcmVtb3RlIG1vZGUgbWlnaHQgZXhoaWJpdCBsb25n IGRlbGF5cyBiZXR3ZWVuIGVhY2ggdHJhbnNmZXIuIFRvCi0gICBhdm9pZCB0aGlzLCBqdXN0IGlu Y2x1ZGUgdGhlIGNvbW1hbmQgIlNFVCBERUxBWSAwIiBpbiB5b3VyIGNvbW1hbmQgZmlsZQotICAg YmVmb3JlIGFueSBvZiB0aGUgZmlsZS10cmFuc2ZlciBjb21tYW5kcy4KLQotICAgRmlsZSB0cmFu c2ZlciBmYWlsdXJlcyBjYW4gb2NjdXIgZm9yIGFsbCBzb3J0cyBvZiByZWFzb25zLCBtb3N0IG9m IHRoZW0KLSAgIGxpc3RlZCBpbiBDaGFwdGVyIDEwIG9mIFs4M11Vc2luZyBDLUtlcm1pdC4gVGhl IGZvbGxvd2luZyBzZWN0aW9ucwotICAgdG91Y2ggb24gc29tZSB0aGF0IGFyZW4ndC4KLQotICAg VGhlIFs4NF1DLUtlcm1pdCA3LjAgUmVsZWFzZSBOb3RlcyBkb2N1bWVudCBTRU5EIC9DT01NQU5E IGFzIHRha2luZyBhbgotICAgYXJndW1lbnQsIGJ1dCBpdCBkb2Vzbid0LiBJbnN0ZWFkIG9mIFNF TkQgL0NPTU1BTkQ6e3NvbWUgY29tbWFuZH0sIHVzZToKLQotU0VORCAvQ09NTUFORCBbIG90aGVy IHN3aXRjaGVzIHN1Y2ggYXMgL0FTLU5BTUU6IF0gY29tbWFuZCBbIGFyZ3VtZW50cy4uLiBdCi0K LTEwLjEuIExhcHRvcHMKLQotICAgV2F0Y2ggb3V0IGZvciBsYXB0b3BzIGFuZCB0aGVpciBhc3Nv cnRlZCBwb3dlci1zYXZlciBmZWF0dXJlczsgZm9yCi0gICBleGFtcGxlLCBhIGJ1aWx0LWluIG1v ZGVtJ3MgImF1dG8gdGltZW91dCBkZWxheSIgaGFuZ2luZyB1cCB0aGUKLSAgIGNvbm5lY3Rpb24g aW4gdGhlIG1pZGRsZSBvZiBhIGZpbGUgdHJhbnNmZXIuIE1vc3QgbW9kZW1zLCBldmVuIGlmIHRo ZXkKLSAgIGhhdmUgdGhpcyBmZWF0dXJlLCBkbyBub3QgaGF2ZSBpdCBlbmFibGVkIGJ5IGRlZmF1 bHQuIEJ1dCBpZiB5b3UKLSAgIGV4cGVyaWVuY2Ugb3RoZXJ3aXNlIGluZXhwbGljYWJsZSBkaXNj b25uZWN0aW9ucyBpbiB0aGUgbWlkc3Qgb2YgeW91cgotICAgS2VybWl0IHNlc3Npb25zLCBjaGVj ayB0aGUgbW9kZW0gbWFudWFsIGZvciBzdWNoIHRoaW5ncyBhcyAiaWRsZQotICAgdGltZW91dCIs ICJhdXRvIHRpbWVvdXQiLCBldGMsIGFuZCBhZGQgdGhlIGNvbW1hbmQgdG8gZGlzYWJsZSB0aGlz Ci0gICBmZWF0dXJlIHRvIEtlcm1pdCdzIGluaXQgc3RyaW5nIGZvciB0aGlzIG1vZGVtLgotCi0x MC4yLiBORlMKLQotICAgSWYgdXBsb2FkaW5nIGEgbGFyZ2UgZmlsZSB0byBhbiBORlMtbW91bnRl ZCBkaXNrIGZhaWxzIChvciBpcyBwYWluZnVsbHkKLSAgIHNsb3cpLCB0cnkgdXBsb2FkaW5nIGl0 IHRvIGEgbG9jYWwgZGlzayAoZS5nLiAvdG1wIG9uIFVuaXgpIGFuZCB0aGVuCi0gICBjb3B5aW5n IHRvIHRoZSBORlMgZGlzayBsYXRlci4KLQotMTAuMy4gTW9kZW1zCi0KLSAgIElmIHlvdSBhcmUg ZGlhbGluZyBvdXQgYW5kIGZpbmQgdGhhdCBkb3dubG9hZHMgd29yayBidXQgdXBsb2FkcyBkb24n dCwKLSAgIHRyeSBhZ2FpbiB3aXRoIGEgbG93ZXIgc2VyaWFsLXBvcnQgc3BlZWQuIENhc2UgaW4g cG9pbnQ6IGRpYWxpbmcgb3V0IG9uCi0gICBhIGNlcnRhaW4gUEMgZnJvbSBMaW51eCBhdCAxMTUy MDAgYnBzIHVzaW5nIGEgVVNSIENvdXJpZXIgNTZLCi0gICAiVi5FdmVyeXRoaW5nIiBleHRlcm5h bCBtb2RlbSBhbmQgUlRTL0NUUyBmbG93IGNvbnRyb2wuIERvd25sb2FkcwotICAgd29ya2VkIGZs YXdsZXNzbHksIHVwbG9hZHMgc3RvcHBlZCBkZWFkIGFmdGVyIHRoZSBmaXJzdCBmZXcgcGFja2V0 cwotICAgd2VyZSBzZW50LiBUaGUgbW9kZW0gbGlnaHRzIHNob3dlZCBjb25zdGFudCByZXRyYWlu aW5nIChBUlEgbGlnaHQKLSAgIGJsaW5rcyBzbG93bHkpLCBhbmQgdGhlIENUUyBsaWdodCB3YXMg b2ZmIDk1JSBvZiB0aGUgdGltZSwgYWxsb3dpbmcKLSAgIG5vdGhpbmcgdG8gZ2V0IHRocm91Z2gu IFJlZHVjaW5nIHRoZSBzZXJpYWwgcG9ydCBzcGVlZCB0byA1NzYwMCBicHMKLSAgIG1hZGUgdGhl IHByb2JsZW1zIGdvIGF3YXkuIEV2aWRlbnRseSB0aGUgUEMgaW4gcXVlc3Rpb24gaGFzIGEgdmVy eSBmYXN0Ci0gICBzZXJpYWwgcG9ydCwgc2luY2UgZGlhbGluZyB0aGUgc2FtZSBtb2RlbSB3aXRo IGEgZGlmZmVyZW50IFBDIGF0IDExNTIwMAotICAgYnBzIHdvcmtzIHdpdGhvdXQgaW5jaWRlbnQu Ci0KLTEwLjQuIFRDUC9JUCBDb25uZWN0aW9ucwotCi0gICBJZiB5b3UgaGF2ZSB0cm91YmxlIHRy YW5zZmVycmluZyBmaWxlcyBvdmVyIGEgVENQL0lQIGNvbm5lY3Rpb24sIHRlbGwKLSAgIEtlcm1p dCB0byBTRVQgUEFSSVRZIFNQQUNFIGFuZCB0cnkgYWdhaW4uIElmIHRoYXQgZG9lc24ndCB3b3Jr LCBhbHNvCi0gICB0cnkgYSBzaG9ydGVyIHBhY2tldCBsZW5ndGggb3Igc21hbGxlciB3aW5kb3cg c2l6ZSAodG8gY29tcGVuc2F0ZSBmb3IKLSAgIGNlcnRhaW4gd2VsbC1rbm93biBicm9rZW4gVGVs bmV0IHNlcnZlcnMpLCBhbmQvb3IgU0VUIFJFTElBQkxFIE9GRi4KLQotMTAuNS4gTXVsdGlob3Ag Q29ubmVjdGlvbnMKLQotICAgSWYgeW91IGhhdmUgYSBtdWx0aWhvcCBjb25uZWN0aW9uLCB3aXRo IHRoZSBpbnRlcmlvciBub2RlcyBpbiBDT05ORUNUCi0gICBtb2RlIChLZXJtaXQsIFRlbG5ldCwg UmxvZ2luLCBvciBhbnkgb3RoZXIpLCB5b3UgY2FuIGV4cGVjdCAoYSkgZmlsZQotICAgdHJhbnNm ZXIgdG8gYmUgc2xvd2VyLCBhbmQgKGIpIHRoZSBjb25uZWN0aW9uIHRvIGJlIGxlc3MgdHJhbnNw YXJlbnQKLSAgICh0byBjb250cm9sIGNoYXJhY3RlcnMsIHBlcmhhcHMgdG8gdGhlIDh0aCBiaXQp IHRoYW4gYSBtb3JlIGRpcmVjdAotICAgY29ubmVjdGlvbi4gQy1LZXJtaXQgNy4wIGFuZCBsYXRl ciBoYXZlIGEgIi0wIiAoZGFzaC16ZXJvKSBjb21tYW5kLWxpbmUKLSAgIG9wdGlvbiB0byBtYWtl IGl0IDEwMCUgdHJhbnNwYXJlbnQgaW4gY2FzZXMgd2hlcmUgaXQgaXMgdG8gYmUgdXNlZCBpbgot ICAgdGhlIG1pZGRsZS4KLQotMTAuNi4gUmVjb3ZlcnkKLQotICAgVGhlIHJlY292ZXJ5IGZlYXR1 cmUgKFJFU0VORCBjb21tYW5kKSB0aGF0IHdhcyBhZGRlZCBpbiB2ZXJzaW9uIDVBKDE5MCkKLSAg IHdvcmtzIG9ubHkgZm9yIGJpbmFyeS1tb2RlIHRyYW5zZmVycy4gSW4gb3JkZXIgZm9yIHRoaXMg ZmVhdHVyZSB0byBiZQotICAgdXNlZnVsIGF0IGFsbCwgdGhlIGRlZmF1bHQgZm9yIFNFVCBGSUxF IElOQ09NUExFVEUgd2FzIGNoYW5nZWQgZnJvbQotICAgRElTQ0FSRCB0byBLRUVQLiBPdGhlcndp c2UgYW4gaW50ZXJydXB0ZWQgdHJhbnNmZXIgd291bGQgbGVhdmUgbm8KLSAgIHBhcnRpYWwgZmls ZSBiZWhpbmQgdW5sZXNzIHlvdSBoYWQgcmVtZW1iZXJlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQu Ci0gICBCdXQgbm93IHlvdSBoYXZlIHRvIHBheSBjbG9zZXIgYXR0ZW50aW9uIHRvIEtlcm1pdCdz IG1lc3NhZ2VzIHRvIGtub3cKLSAgIHdoZXRoZXIgYSB0cmFuc2ZlciBzdWNjZWVkZWQgb3IgZmFp bGVkIC0tIHByZXZpb3VzbHksIGlmIGl0IGZhaWxlZCwgdGhlCi0gICBmaWxlIHdvdWxkIG5vdCBz aG93IHVwIG9uIHRoZSByZWNlaXZpbmcgZW5kIGF0IGFsbDsgaW4gNUEoMTkwKSBhbmQKLSAgIGxh dGVyLCB5b3UnbGwgZ2V0IGEgcGFydGlhbCBmaWxlIHdoaWNoIGNvdWxkIGVhc2lseSBiZSBtaXN0 YWtlbiBmb3IgdGhlCi0gICBjb21wbGV0ZSBmaWxlIHVubGVzcyB5b3UgY2hhbmdlIHRoZSBkZWZh dWx0IGJhY2sgdG8gRElTQ0FSRCBvciByZWFkIHRoZQotICAgc2NyZWVuIG1lc3NhZ2VzLCBvciBr ZWVwIGEgdHJhbnNhY3Rpb24gbG9nLgotCi0xMC43LiBGaWxlbmFtZSBDb2xsaXNpb25zCi0KLSAg IFNFVCBGSUxFIENPTExJU0lPTiBCQUNLVVAgaXMgdGhlIGRlZmF1bHQuIFRoaXMgbWVhbnM6Ci0K LSAgICAgKiBJZiB5b3Ugc2VuZCB0aGUgc2FtZSBmaWxlIGxvdHMgb2YgdGltZXMsIHRoZXJlIHdp bGwgYmUgbWFueSBiYWNrdXAKLSAgICAgICBmaWxlcy4gVGhlcmUgaXMgbm8gYXV0b21hdGljIG1l Y2hhbmlzbSB3aXRoaW4gS2VybWl0IHRvIGRlbGV0ZQotICAgICAgIHRoZW0sIG5vIG5vdGlvbiBv ZiBhICJ2ZXJzaW9uIHJldGVudGlvbiBjb3VudCIsIGV0YywgYnV0IHlvdSBjYW4KLSAgICAgICB1 c2UgdGhlIFBVUkdFIGNvbW1hbmQgdG8gY2xlYW4gdGhlbSB1cC4KLSAgICAgKiBJZiBhIGZpbGUg YXJyaXZlcyB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIGEgZGlyZWN0b3J5LCB0aGUgZmlsZQot ICAgICAgIHRyYW5zZmVyIGZhaWxzIGJlY2F1c2UgS2VybWl0IHdpbGwgbm90IHJlbmFtZSBhIGRp cmVjdG9yeS4gU2VuZCB0aGUKLSAgICAgICBmaWxlIHdpdGggYW5vdGhlciBuYW1lLCBvciB1c2Ug U0VUIEZJTEUgQ09MTElTSU9OIFJFTkFNRS4KLSAgICAgKiBJZiB0aGUgZGlyZWN0b3J5IGxhY2tz IHdyaXRlIHBlcm1pc3Npb24sIHRoZSBmaWxlIHRyYW5zZmVyIGZhaWxzCi0gICAgICAgZXZlbiBp ZiB5b3UgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhlIGZpbGUgdGhhdCBpcyBiZWluZyBiYWNrZWQg dXA7Ci0gICAgICAgaW4gdGhhdCBjYXNlLCBzd2l0Y2ggdG8gU0VUIEZJTEUgQ09MTElTSU9OIE9W RVJXUklURSBvciBBUFBFTkQsIG9yCi0gICAgICAgc2VuZCB0byBhIGRpZmZlcmVudCBkaXJlY3Rv cnkuCi0KLSAgIFNFVCBGSUxFIENPTExJU0lPTiBVUERBVEUgZGVwZW5kcyBvbiB0aGUgZGF0ZS90 aW1lIHN0YW1wIGluIHRoZQotICAgYXR0cmlidXRlIHBhY2tldC4gSG93ZXZlciwgdGhpcyBpcyBy ZWNvcmRlZCBpbiBsb2NhbCB0aW1lLCBub3QKLSAgIFVuaXZlcnNhbCBUaW1lIChHTVQpLCBhbmQg dGhlcmUgaXMgbm8gaW5kaWNhdGlvbiBvZiB0aW1lIHpvbmUuIFRoZSB0aW1lCi0gICBpcyBleHBy ZXNzZWQgdG8gdGhlIHByZWNpc2lvbiBvZiAxIHNlY29uZCwgYnV0IHNvbWUgZmlsZSBzeXN0ZW1z IGRvIG5vdAotICAgcmVjb3JkIHdpdGggdGhpcyBwcmVjaXNpb24gLS0gZm9yIGV4YW1wbGUsIE1T LURPUyByZWNvcmRzIHRoZSBmaWxlCi0gICBkYXRlL3RpbWUgb25seSB0byB0aGUgbmVhcmVzdCAy IHNlY29uZHMuIFRoaXMgbWlnaHQgY2F1c2UgdXBkYXRlCi0gICBvcGVyYXRpb25zIHRvIHNlbmQg bW9yZSBmaWxlcyB0aGFuIG5lY2Vzc2FyeS4KLQotICAgKFRoaXMgcGFyYWdyYXBoIGRvZXMgTk9U IGFwcGx5IHRvIFVOSVgsIHdoZXJlLCBhcyBvZiBDLUtlcm1pdCA3LjAsCi0gICBDLUtlcm1pdCBw aXBlcyBpbmNvbWluZyBtYWlsIGFuZCBwcmludCBtYXRlcmlhbCBkaXJlY3RseSB0aGUgbWFpbCBv cgotICAgcHJpbnQgcHJvZ3JhbSk6IFdoZW4gQy1LZXJtaXQgaXMgcmVjZWl2aW5nIGZpbGVzIGZy b20gYW5vdGhlciBLZXJtaXQKLSAgIHByb2dyYW0gdGhhdCBoYXMgYmVlbiBnaXZlbiB0aGUgTUFJ TCBvciBSRU1PVEUgUFJJTlQgY29tbWFuZCwgQy1LZXJtaXQKLSAgIGZvbGxvd3MgdGhlIGN1cnJl bnQgZmlsZW5hbWUgY29sbGlzaW9uIGFjdGlvbi4gVGhpcyBjYW4gYmUKLSAgIGRpc2NvbmNlcnRp bmcgaWYgdGhlIGFjdGlvbiB3YXMgKGZvciBleGFtcGxlKSBCQUNLVVAsIGJlY2F1c2UgdGhlCi0g ICBleGlzdGluZyBmaWxlIHdpbGwgYmUgcmVuYW1lZCwgYW5kIHRoZSBuZXcgZmlsZSB3aWxsIGJl IG1haWxlZCAob3IKLSAgIHByaW50ZWQpIGFuZCB0aGVuIGRlbGV0ZWQuIEtlcm1pdCBjYW5ub3Qg dGVtcG9yYXJpbHkgY2hhbmdlIHRvIFJFTkFNRQotICAgYmVjYXVzZSB0aGUgZmlsZSBjb2xsaXNp b24gYWN0aW9uIG9jY3VycyB3aGVuIHRoZSBmaWxlbmFtZSBwYWNrZXQgaXMKLSAgIHJlY2VpdmVk LCBhbmQgdGhlIFBSSU5UIG9yIE1BSUwgZGlzcG9zaXRpb24gb25seSBjb21lcyBsYXRlciwgaW4g dGhlCi0gICBBdHRyaWJ1dGUgcGFja2V0LgotCi0gICBXYXRjaCBvdXQgZm9yIFNFVCBGSUxFIENP TExJU0lPTiBSRU5BTUUsIGVzcGVjaWFsbHkgd2hlbiB1c2VkIGluCi0gICBjb25qdW5jdGlvbiB3 aXRoIHJlY292ZXJ5LiBSZWNhbGwgdGhhdCB0aGlzIG9wdGlvbiAod2hpY2ggaXMgTk9UIHRoZQot ICAgZGVmYXVsdCkgcmVuYW1lcyB0aGUgaW5jb21pbmcgZmlsZSBpZiBhIGZpbGUgYWxyZWFkeSBl eGlzdHMgd2l0aCB0aGUKLSAgIHNhbWUgbmFtZSAodGhlIGRlZmF1bHQgaXMgdG8gcmVuYW1lIHRo ZSBwcmV2aW91c2x5IGV4aXN0aW5nIGZpbGUsIGFuZAotICAgc3RvcmUgdGhlIGluY29taW5nIGZp bGUgd2l0aCBpdHMgb3duIG5hbWUpLiBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZAotICAgdGhh dCB5b3UgZG8gbm90IHVzZSBTRVQgRklMRSBDT0xMSVNJT04gUkVOQU1FIGlmIHlvdSBldmVyIGlu dGVuZCB0byB1c2UKLSAgIHRoZSByZWNvdmVyeSBmZWF0dXJlOgotCi0gICAgICogV2hlbiB0aGUg ZmlsZSBpcyBmaXJzdCByZWNlaXZlZCBieSBDLUtlcm1pdCwgaXRzIG5hbWUgaXMgY2hhbmdlZCBp ZgotICAgICAgIGFub3RoZXIgZmlsZSBhbHJlYWR5IGhhcyB0aGUgc2FtZSBuYW1lLiBXaGVuIHlv dSBSRVNFTkQgdGhlIHNhbWUKLSAgICAgICBmaWxlIGFmdGVyIGEgZmFpbHVyZSwgQy1LZXJtaXQg d2lsbCBwcm9iYWJseSB0cnkgdG8gYXBwZW5kIHRoZQotICAgICAgIHJlLXNlbnQgcG9ydGlvbiB0 byB0aGUgd3JvbmcgZmlsZS4KLSAgICAgKiBBc3N1bWluZyB0aGF0IHlvdSBnZXQgUkVTRU5EIHRv IHdvcmsgd2l0aCBGSUxFIENPTExJU0lPTiBSRU5BTUUsCi0gICAgICAgQy1LZXJtaXQsIHdoZW4g cmVjZWl2aW5nIHRoZSByZW1haW5kZXIgb2YgdGhlIGZpbGUgZHVyaW5nIGEgUkVTRU5ECi0gICAg ICAgb3BlcmF0aW9uLCB3aWxsIHJlcG9ydCBiYWNrIHRoZSB3cm9uZyBuYW1lLiBOb3RoaW5nIGNh biBiZSBkb25lCi0gICAgICAgYWJvdXQgdGhpcyBiZWNhdXNlIHRoZSBuYW1lIGlzIHJlcG9ydGVk IGJhY2sgYmVmb3JlIHRoZSByZWNlaXZpbmcKLSAgICAgICBLZXJtaXQgcHJvZ3JhbSBmaW5kcyBv dXQgdGhhdCBpdCBpcyBhIHJlY292ZXJ5IG9wZXJhdGlvbi4KLQotICAgQWxzbyB3YXRjaCBvdXQg Zm9yIERJU0FCTEUgREVMRVRFLCBzaW5jZSB0aGlzIGltcGxpY2l0bHkgc2V0cyBGSUxFCi0gICBD T0xMSVNJT04gdG8gUkVOQU1FLiBBbmQgbm90ZSB0aHQgREVMRVRFIGlzIERJU0FCTEVkIGF1dG9t YXRpY2FsbHkgYW55Ci0gICB0aW1lIHlvdSBLZXJtaXQgaXMgaW4gbG9jYWwgbW9kZSAoaS5lLiBp dCBtYWtlcyBhIGNvbm5lY3Rpb24pLiBBbHNvCi0gICBub3RlIHRoYXQgZm9yIHB1cnBvc2VzIG9m IERJU0FCTEUgYW5kIEVOQUJMRSwgInNldCBob3N0ICoiIGNvbm5lY3Rpb25zCi0gICBkbyBub3Qg Y291bnQgYXMgbG9jYWwgbW9kZSBldmVuIHRob3VnaCwgc3RyaWN0bHkgc3BlYWtpbmcsIHRoZXkg YXJlLgotCi0xMC44LiBET1MgUGF0aG5hbWVzCi0KLSAgIFdoZW4gcmVmZXJyaW5nIHRvIGZvcmVp Z24gTVMtRE9TLCBXaW5kb3dzLCBBdGFyaSBTVCwgT1MvMiwgb3Igb3RoZXIKLSAgIGZpbGUgc3Bl Y2lmaWNhdGlvbnMgdGhhdCBjb250YWluIGJhY2tzbGFzaCBjaGFyYWN0ZXJzIGluIGEgQy1LZXJt aXQKLSAgIGNvbW1hbmQsIHlvdSBtaWdodCBoYXZlIHRvIGRvdWJsZSBlYWNoIGJhY2tzbGFzaCwg Zm9yIGV4YW1wbGU6Ci0KLSAgQy1LZXJtaXQ+Z2V0IGM6XFxkaXJlY3RvcnlcXGZvby50eHQKLQot ICAgVGhpcyBpcyBiZWNhdXNlIGJhY2tzbGFzaCBpcyB1c2VkIGluIEMtS2VybWl0IGNvbW1hbmRz IGZvciBpbnRyb2R1Y2luZwotICAgc3BlY2lhbCBjaGFyYWN0ZXIgY29kZXMsIHZhcmlhYmxlcywg ZnVuY3Rpb25zLCBldGMuCi0KLTEwLjkuIENhbmNlbGxhdGlvbgotCi0gICBJZiBhdHRlbXB0aW5n IHRvIGNhbmNlbCBsb2NhbC1tb2RlIGZpbGUgcmVjZXB0aW9uIGF0IGEgdmVyeSBlYXJseSBzdGFn ZQotICAgKGkuZS4gYmVmb3JlIGRhdGEgcGFja2V0cyBhcmUgZXhjaGFuZ2VkKSB3aXRoIFggb3Ig WiBkb2VzIG5vdCB3b3JrLCB1c2UKLSAgIEUgb3IgQ3RybC1DIGluc3RlYWQsIG9yIHdhaXQgdW50 aWwgdGhlIGZpcnN0IGRhdGEgcGFja2V0cyBhcmUgc2VudC4KLQotICAgSWYgeW91IGNhbmNlbCBh IHRyYW5zZmVyIHRoYXQgaXMgdW5kZXJ3YXkgdXNpbmcgWCBvciBaLCBhbmQgYSBsb3Qgb2YKLSAg IHdpbmRvdyBzbG90cyBhcmUgaW4gdXNlLCBpdCBtaWdodCB0YWtlIGEgd2hpbGUgZm9yIHRoZSBj YW5jZWxsYXRpb24gdG8KLSAgIHRha2UgZWZmZWN0LCBlc3BlY2lhbGx5IGlmIHlvdSBkbyB0aGlz IG9uIHRoZSByZWNlaXZpbmcgZW5kOyB0aGF0J3MKLSAgIGJlY2F1c2UgYSBsb3Qgb2YgcGFja2V0 cyBtaWdodCBhbHJlYWR5IGJlIG9uIHRoZWlyIHdheSB0byB5b3UuIEluIHRoYXQKLSAgIGNhc2Us IGp1c3QgYmUgcGF0aWVudCBhbmQgbGV0IEtlcm1pdCAiZHJhaW4iIHRoZW0uCi0KLSAgIElmIEMt S2VybWl0IGlzIHNlbmRpbmcgYSBmaWxlLCByZW1vdGUtbW9kZSBwYWNrZXQtbW9kZSBicmVha291 dCAodGhyZWUKLSAgIGNvbnNlY3V0aXZlIEN0cmwtQydzIGJ5IGRlZmF1bHQpIGlzIG5vdCBlZmZl Y3RpdmUgdW50aWwgYWZ0ZXIgQy1LZXJtaXQKLSAgIHNlbmRzIGl0cyBmaXJzdCBwYWNrZXQuIElm IEMtS2VybWl0IGlzIHJlY2VpdmluZyBhIGZpbGUgb3IgaXMgaW4gc2VydmVyCi0gICBtb2RlLCBp dCBpcyBlZmZlY3RpdmUgcmlnaHQgYXdheS4gSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgU0VUIERF TEFZCi0gICB2YWx1ZSBkZXRlcm1pbmVzIHRoZSBlYXJsaWVzdCB0aW1lIGF0IHdoaWNoIHlvdSBj YW4gYnJlYWsgb3V0IG9mIHBhY2tldAotICAgbW9kZS4KLQotMTAuMTAuIFBhcnRuZXIgUGVjdWxp YXJpdGllcwotCi0gICBXaGVuIG9uZSBvciBib3RoIHBhcnRuZXJzIGlzIG9uIGFuIFNDTyBvcGVy YXRpbmcgc3lzdGVtIHN1Y2ggYXMgT1NSNSwKLSAgIHlvdSBtaWdodCBpc3N1ZSB0aGUgY29tbWFu ZDoKLQotbWFwY2hhbiAtbgotCi0gICB0byBkaXNhYmxlIGNoYXJhY3Rlci1zZXQgY29udmVyc2lv biBieSB0aGUgdGVybWluYWwgZHJpdmVyLiBTaW1pbGFybHkKLSAgIGZvciBBSVg6Ci0KLXNldG1h cHMgLXQgTk9NQVAKLQotICAgV2hlbiB1c2luZyBDLUtlcm1pdCB0byB0cmFuc2ZlciBmaWxlcyB3 aXRoIHRoZSBIUDQ4U1ggY2FsY3VsYXRvciwgeW91Ci0gICBtdXN0IFNFVCBGTE9XIE5PTkUuIFRo ZSBIUDQ4U1ggZG9lcyBub3Qgc3VwcG9ydCBmbG93IGNvbnRyb2wsIGFuZAotICAgZXZpZGVudGx5 IGFsc28gYmVjb21lcyBjb25mdXNlZCBpZiB5b3UgYXR0ZW1wdCB0byB1c2UgaXQuIFlvdSBtaWdo dAotICAgYWxzbyBuZWVkIHRvIHVzZSBTRVQgU0VORCBQQVVTRSAxMDAgKG9yIG90aGVyIG51bWJl cikuIEZvciBncmVhdGVyCi0gICBkZXRhaWwgYWJvdXQgdHJhbnNmZXJyaW5nIGZpbGVzIHRoZSBI UC00OCwgc2VlOgotCi0gIFs4NV1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaHA0OC5o dG1sCi0KLSAgIFNvbWUgY29tbXVuaWNhdGlvbiBwcm9ncmFtcyBoYXZlIGVycm9ycyBpbiB0aGVp ciBpbXBsZW1lbnRhdGlvbiBvZgotICAgS2VybWl0IGF0dHJpYnV0ZSBwYWNrZXRzLiBJZiB5b3Ug Z2V0IGFuIGVycm9yIG1lc3NhZ2UgZnJvbSB5b3VyCi0gICBjb21tdW5pY2F0aW9uIHByb2dyYW0g bGlrZSAiQXR0cmlidXRlIGVycm9yIiwgdGVsbCBDLUtlcm1pdCB0byBTRVQKLSAgIEFUVFJJQlVU RVMgT0ZGLiBCZXR0ZXIgeWV0LCBzd2l0Y2ggdG8gYSByZWFsIEtlcm1pdCBwcm9ncmFtLgotCi0g ICBTb21lIGNvbW11bmljYXRpb24gc29mdHdhcmUgY2xhaW1zIHRvIGltcGxlbWVudCBLZXJtaXQg c2xpZGluZyB3aW5kb3dzLAotICAgYnV0IGRvZXMgc28gaW5jb3JyZWN0bHkuIElmIHNsaWRpbmcg d2luZG93IHRyYW5zZmVycyBmYWlsLCBzZXQKLSAgIEMtS2VybWl0J3Mgd2luZG93IHNpemUgdG8g dGhlIHNtYWxsZXN0IG9uZSB0aGF0IHdvcmtzLCBmb3IgZXhhbXBsZSwgU0VUCi0gICBXSU5ET1cg MS4KLQotICAgRm9yIGxvdHMgbW9yZSBkZXRhaWwgYWJvdXQgaG93IHRvIGNvcGUgd2l0aCBkZWZl Y3RpdmUgS2VybWl0IHBhcnRuZXJzLAotICAgc2VlOgotCi0gICAgICogWzg2XUNvcGluZyB3aXRo IEZhdWx0eSBLZXJtaXQgSW1wbGVtZW50YXRpb25zIChDLUtlcm1pdCA3LjAgYW5kCi0gICAgICAg bGF0ZXIpLgotICAgICAqIFs4N11Db3Bpbmcgd2l0aCBCcm9rZW4gS2VybWl0IFBhcnRuZXJzIChD LUtlcm1pdCA4LjAgYW5kIGxhdGVyKS4KLQotICAgVGhlIFVOSVggdmVyc2lvbiBvZiBDLUtlcm1p dCBkaXNjYXJkcyBjYXJyaWFnZSByZXR1cm5zIHdoZW4gcmVjZWl2aW5nCi0gICBmaWxlcyBpbiB0 ZXh0IG1vZGUuIFRodXMsICJiYXJlIiBjYXJyaWFnZSByZXR1cm5zIChzb21ldGltZXMgdXNlZCB0 bwotICAgYWNoaWV2ZSBvdmVyc3RyaWtpbmcpIGFyZSBsb3N0LgotCi0xMS4gU0NSSVBUIFBST0dS QU1NSU5HCi0KLSAgIFsgWzg4XVRvcCBdIFsgWzg5XUNvbnRlbnRzIF0gWyBbOTBdUHJldmlvdXMg XQotCi0xMS4xLiBDb21tZW50cyBWZXJzdXMgdGhlIFNDUklQVCBDb21tYW5kCi0KLSAgIFJlbWVt YmVyIHRoYXQgIjsiIGFuZCAiIyIgaW50cm9kdWNlIGNvbW1lbnRzIHdoZW4gKGEpIHRoZXkgYXJl IHRoZQotICAgZmlyc3QgY2hhcmFjdGVyIG9uIHRoZSBsaW5lLCBvciAoYikgdGhleSBhcmUgcHJl Y2VkZWQgYnkgYXQgbGVhc3Qgb25lCi0gICBibGFuayBvciB0YWIgd2l0aGluIGEgbGluZS4gVGh1 cyBjb25zdHJ1Y3Rpb25zIGxpa2U6Ci0KLSAgSU5QVVQgNSA7Ci0gIFNDUklQVCB+MCAjLS0jLS0j Ci0KLSAgIG11c3QgYmUgY29kZWQgdXNpbmcgYmFja3NsYXNoIG5vdGF0aW9uIHRvIGtlZXAgdGhl IGRhdGEgZnJvbSBiZWluZwotICAgaWdub3JlZDoKLQotICBJTlBVVCA1IFw1OSAgICAgICAgICAg ICAgICAgICA7IDU5IGlzIHRoZSBkZWNpbWFsIEFTQ0lJIGNvZGUgZm9yICI7IgotICBTQ1JJUFQg fjAgXDM1LS0jLS0jICAgICAgICAgICA7IDQzIGlzIHRoZSBkZWNpbWFsIEFTQ0lJIGNvZGUgZm9y ICIjIgotCi0gICBvciwgbW9yZSBzaW1wbHk6Ci0KLSAgSU5QVVQgNSBcOyAgICAgICAgICAgICAg ICAgICAgOyBKdXN0IHF1b3RlIHRoZSBzZW1pY29sb24KLSAgU0NSSVBUIH4wIFwjLS0jLS0jICAg ICAgICAgICAgOyBKdXN0IHF1b3RlIHRoZSAiIyIKLQotMTEuMi4gQWxwaGFiZXRpYyBDYXNlIGFu ZCB0aGUgSU5QVVQgQ29tbWFuZAotCi0gICBJTlBVVCBhbmQgTUlOUFVUIGNhc2VsZXNzIHN0cmlu ZyBjb21wYXJpc29ucyBkbyBub3Qgd29yayBmb3Igbm9uLUFTQ0lJCi0gICAoaW50ZXJuYXRpb25h bCkgY2hhcmFjdGVycy4gV29ya2Fyb3VuZDogU0VUIElOUFVUIENBU0UgT0JTRVJWRS4gRXZlbgot ICAgdGhlbiwgdGhlICJsZXhpY2FsbHkgbGVzcyB0aGFuIiBhbmQgImxleGljYWxseSBncmVhdGVy IHRoYW4iIG9wZXJhdGlvbnMKLSAgIChJRiBMTFQsIElGIExHVCkgcHJvYmFibHkgd29uJ3Qgd29y ayBhcyBleHBlY3RlZC4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IKLSAgIHRoZSBjYXNlLWNvbnZlcnNp b24gZnVuY3Rpb25zIFxGbG93ZXIoKSBhbmQgXEZ1cHBlcigpLiBDLUtlcm1pdCBkb2VzCi0gICBu b3Qga25vdyB0aGUgY29sbGF0aW5nIHNlcXVlbmNlIGZvciBkaWZmZXJlbnQgY2hhcmFjdGVyIHNl dHMgYW5kCi0gICBsYW5ndWFnZXMuIChPbiB0aGUgb3RoZXIgaGFuZCwgaXQgbWlnaHQgd29yayBk ZXBlbmRpbmcgb24gc3VjaCBpdGVtcyBhcwotICAgaG93IEtlcm1pdCB3YXMgbGlua2VkLCB3aGV0 aGVyIHlvdXIgb3BlcmF0aW5nIHN1cHBvcnRzICJsb2NhbGVzIiwgZXRjKQotCi0xMS4zLiBOVUwg KDApIENoYXJhY3RlcnMgaW4gQy1LZXJtaXQgQ29tbWFuZHMKLQotICAgWW91IGNhbid0IGluY2x1 ZGUgYSBOVUwgY2hhcmFjdGVyIChcMCkgaW4gQy1LZXJtaXQgY29tbWFuZCB0ZXh0IHdpdGhvdXQK LSAgIHRlcm1pbmF0aW5nIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIGluIHdoaWNoIGl0IGFwcGVhcnMu IEZvciBleGFtcGxlOgotCi0gIGVjaG8gSW4gdGhlc2UgYnJhY2tldHMgW1wwXSBpcyBhIE5VTAot Ci0gICB3aWxsIGVjaG8gIkluIHRoZXNlIGJyYWNrZXRzIFsiLiBUaGlzIGFwcGxpZXMgdG8gRUNI TywgSU5QVVQsIE9VVFBVVCwKLSAgIGFuZCBhbGwgb3RoZXIgY29tbWFuZHMgKGJ1dCB5b3UgY2Fu IHJlcHJlc2VudCBOVUwgYnkgIlxOIiBpbiBhbiBPVVRQVVQKLSAgIHN0cmluZykuIFRoaXMgaXMg YmVjYXVzZSBDLWxhbmd1YWdlIHN0cmluZ3MgYXJlIHRlcm1pbmF0ZWQgaW50ZXJuYWxseQotICAg YnkgdGhlIE5VTCBjaGFyYWN0ZXIsIGFuZCBpdCBhbGxvd3MgYWxsIG9mIEMtS2VybWl0J3Mgc3Ry aW5nIGNvbXBhcmlzb24KLSAgIGFuZCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIHRvIHdvcmsgaW4g dGhlIG5vcm1hbCAiQyIgd2F5LgotCi0gICBUbyBpbGx1c3RyYXRlOgotCi0gIElOUFVUIDUgXDAK LQotICAgaXMgZXF1aXZhbGVudCB0bzoKLQotICBJTlBVVCA1Ci0KLSAgIGFuZDoKLQotICBJTlBV VCA1IEFCQ1wwREVGCi0KLSAgIGlzIGVxdWl2YWxlbnQgdG86Ci0KLSAgSU5QVVQgNSBBQkMKLQot ICAgSU5QVVQgb3BlcmF0aW9ucyBkaXNjYXJkIGFuZCBpZ25vcmUgTlVMIGNoYXJhY3RlcnMgdGhh dCBhcnJpdmUgZnJvbSB0aGUKLSAgIGNvbW11bmljYXRpb24gZGV2aWNlLCBtZWFuaW5nIHRoYXQg dGhleSBkbyBub3QgZmlndXJlIGludG8gbWF0Y2hpbmcKLSAgIG9wZXJhdGlvbnMgKGUuZy4gQTxO VUw+QiBtYXRjaGVzIEFCKTsgdGhleSBhcmUgbm90IGRlcG9zaXRlZCBpbiB0aGUKLSAgIElOUFVU IGJ1ZmZlciAoXHYoaW5wdXQpKTsgYW5kIHRoZXkgYXJlIG5vdCBjb3VudGVkIGluIFx2KGluY291 bnQpLCB3aXRoCi0gICB0d28gZXhjZXB0aW9uczoKLQotICAgIDEuIEFuIGFycml2aW5nIE5VTCBj aGFyYWN0ZXIgcmVzdGFydHMgdGhlIElOUFVUIFNJTEVOQ0UgdGltZXIuCi0gICAgMi4gQW4gYXJy aXZpbmcgTlVMIGNoYXJhY3RlciB0ZXJtaW5hdGVzIHRoZSBJTlBVVCBjb21tYW5kIHdpdGggdGhl Ci0gICAgICAgU1VDQ0VTUyBjb25kaXRpb24gaWYgdGhlIElOUFVUIGNvbW1hbmQgd2FzIGdpdmVu IGFuIGVtcHR5IHNlYXJjaAotICAgICAgIHN0cmluZy4gSW4gdGhpcyBjYXNlIFx2KGluY291bnQp IGlzIHNldCB0byAxLgotCi0gICBBbHNvLCB0aGUgXHYoaW5jaGFyKSB2YXJpYWJsZSBpcyBudWxs IChjb21wbGV0ZWx5IGVtcHR5KSBpZiB0aGUgbGFzdAotICAgSU5QVVQgY2hhcmFjdGVyIHdhcyBO VUwuIFRoYXQgaXMsIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIG9ubHkgYnkKLSAgIGxvb2tpbmcg YXQgXHYoaW5jaGFyKSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgTlVMIHRoYXQgd2FzIElOUFVU IGFuZAotICAgbm8gSU5QVVQgYXQgYWxsLiBJZiB0aGUgSU5QVVQgY29tbWFuZCBzdWNjZWVkZWQg YnV0IFx2KGluY2hhcikgaXMKLSAgIGVtcHR5LCB0aGVuIGEgTlVMIGNoYXJhY3RlciB3YXMgaW5w dXQuIEFsc28sIFx2KGluY291bnQpIHdpbGwgYmUgc2V0IHRvCi0gICAxLgotCi0gICBIZXJlJ3Mg YSBzYW1wbGUgc2NyaXB0IGZyYWdtZW50IHRvIHJlYWQgY2hhcmFjdGVycywgcG9zc2libHkgaW5j bHVkaW5nCi0gICBOVUwsIGZyb20gdGhlIGNvbW11bmljYXRpb24gY29ubmVjdGlvbiBhbmQgd3Jp dGUgdGhlbSB0byBhIGZpbGU6Ci0KLSAgd2hpbGUgdHJ1ZSB7Ci0gICAgICBpbnB1dCAxICAgICAg ICAgICAgICAgICAgICAgIDsgcmVhZCBvbmUgYnl0ZQotICAgICAgaWYgZmFpbCBicmVhayAgICAg ICAgICAgICAgICA7IHRpbWVkIG91dCBvciBjb25uZWN0aW9uIGNsb3NlZAotICAgICAgZndyaXRl IC9jaGFyIFwlYyBcdihpbmNoYXIpICA7IHJlY29yZCB0aGUgYnl0ZQotICB9Ci0KLSAgIFRoaXMg d29ya3MgYmVjYXVzZSB3aGVuIFx2KGluY2hhcikgaXMgTlVMLCB0aGF0J3MgZXF1aXZhbGVudCB0 byBGV1JJVEUKLSAgIC9DSEFSIGhhdmluZyBubyB0ZXh0IGFyZ3VtZW50IGF0IGFsbCwgaW4gd2hp Y2ggY2FzZSBpdCB3cml0ZXMgYSBOVUwKLSAgIGNoYXJhY3Rlci4KLQotICAgXHYoaW5jb3VudCkg YW5kIFx2KGluY2hhcikgYXJlIE5PVCBhZmZlY3RlZCBieSB0aGUgQ0xFQVIgY29tbWFuZC4KLQot MTEuNC4gXGZmaWxlcygpIGFuZCBcZm5leHRmaWxlKCkgUGVjdWxpYXJpdGllcwotCi0gICBUaGUg Zm9sbG93aW5nIHNjcmlwdCBwcm9ncmFtOgotCi0gIGZvciBcJWkgMSBcZmZpbGVzKG9vZmEuKikg MSB7Ci0gICAgICBzZW5kIFxmbmV4dGZpbGUoKQotICB9Ci0KLSAgIGRpZCBub3Qgd29yayBhcyBl eHBlY3RlZCBpbiBDLUtlcm1pdCA2LjAgYW5kIGVhcmxpZXIgYnV0IGRvZXMgd29yayBpbgotICAg Qy1LZXJtaXQgNy4wIGFuZCBsYXRlci4KLQotMTEuNS4gQ29tbWFuZHMgVGhhdCBIYXZlIE9ubHkg TG9jYWwgRWZmZWN0Ci0KLSAgIENlcnRhaW4gc2V0dGluZ3MgYXJlIGxvY2FsIHRvIGVhY2ggY29t bWFuZCBsZXZlbCwgbWVhbmluZyB0aGF0Ci0gICBzdWJvcmRpbmF0ZSBjb21tYW5kIGxldmVscyAo bWFjcm9zIG9yIGNvbW1hbmQgZmlsZXMpIGNhbiBjaGFuZ2UgdGhlbQotICAgd2l0aG91dCBhZmZl Y3RpbmcgdGhlaXIgdmFsdWVzIGF0IGhpZ2hlciBjb21tYW5kIGxldmVscy4gV2hlbiBhIG5ldwot ICAgY29tbWFuZCBsZXZlbCBpcyBpbnZva2VkLCB0aGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20g dGhlIHByZXZpb3VzCi0gICBsZXZlbC4gVGhlc2Ugc2V0dGluZ3MgYXJlOgotCi0gIENBU0UKLSAg Q09VTlQgYW5kIFx2KGNvdW50KQotICBJTlBVVCBDQVNFCi0gIElOUFVUIFRJTUVPVVQKLSAgTUFD Uk8gRVJST1IKLSAgUVVJRVQKLSAgVEFLRSBFUlJPUgotCi0gICBUaGlzIGFycmFuZ2VtZW50IGFs bG93cyBDQVNFLCBUSU1FT1VULCBhbmQgRVJST1Igc2V0dGluZ3MsIHdoaWNoIGFyZQotICAgdXNl ZCB0byBjb250cm9sIGF1dG9tYXRpYyBleGl0IGZyb20gYSBjb21tYW5kIGZpbGUgb3IgbWFjcm8g dXBvbiBlcnJvciwKLSAgIHRvIGJlIGF1dG9tYXRpY2FsbHkgcmVzdG9yZWQgd2hlbiB0aGUgY29t bWFuZCBmaWxlIG9yIG1hY3JvIGV4aXRzLgotCi0gICBUaGUgQ09VTlQgdmFyaWFibGUgZm9sbG93 cyB0aGlzIHJ1bGUgdG9vLCB3aGljaCBwZXJtaXRzIG5lc3RlZCBTRVQKLSAgIENPVU5UIC8gSUYg Q09VTlQgbG9vcHMsIGFzIGluIHRoaXMgZXhhbXBsZSBpbiB3aGljaCB0aGUgaW5uZXIgbG9vcAot ICAgY291bnRzIGRvd24gZnJvbSB0aGUgY3VycmVudCBDT1VOVCB2YWx1ZSBvZiB0aGUgb3V0ZXIg bG9vcCAodHJ5IGl0KToKLQotICBERUZJTkUgSU5ORVIgV0hJTEUgQ09VTlQgeyBXUklURSBTQ1JF RU4geyAgIElubmVyOn0sIFNIT1cgQ09VTlQgfQotICBTRVQgQ09VTlQgNQotICBXSElMRSBDT1VO VCB7IFdSSVRFIFNDUkVFTiBPdXRlcjosIFNIT1cgQ09VTlQsIERPIElOTkVSIH0KLQotICAgS2Vl cCBpbiBtaW5kIHRoYXQgYW4gaW5mZXJpb3IgY29tbWFuZCBsZXZlbCBjYW5ub3QgbWFuaXB1bGF0 ZSB0aGUgQ09VTlQKLSAgIHZhbHVlIGhlbGQgYnkgYSBoaWdoZXIgbGV2ZWwuIEZvciBleGFtcGxl OgotCi0gIERFRklORSBPT0ZBIFNIT1cgQ09VTlQsIElGIENPVU5UIEdPVE8gTE9PUAotICBTRVQg Q09VTlQgNQotICA6TE9PUAotICBPT0ZBCi0gIEVDSE8gRG9uZQotCi0gICByZXN1bHRzIGluIGFu IGluZmluaXRlIGxvb3A7IHRoZSBDT1VOVCB2YWx1ZSByZW1haW5zIGF0IDUgYmVjYXVzZSBpdCBp cwotICAgbmV2ZXIgZGVjcmVtZW50ZWQgYXQgdGhlIHNhbWUgbGV2ZWwgYXQgd2hpY2ggaXQgd2Fz IHNldC4KLQotMTEuNi4gTGl0ZXJhbCBCcmFjZXMgaW4gRnVuY3Rpb24gQ2FsbHMKLQotICAgU2lu Y2UgYnJhY2VzIGFyZSB1c2VkIGluIGZ1bmN0aW9uIGNhbGxzIHRvIGluZGljYXRlIGdyb3VwaW5n LCB0aGVyZSBpcwotICAgbm8gd2F5IHRvIHBhc3MgbGl0ZXJhbCBicmFjZXMgdG8gdGhlIGZ1bmN0 aW9uIGl0c2VsZi4gU29sdXRpb246IERlZmluZQotICAgYSB2YXJpYWJsZSBjb250YWluaW5nIHRo ZSBzdHJpbmcgdGhhdCBoYXMgYnJhY2VzLiBFeGFtcGxlOgotCi0gIGRlZmluZSBcJWEgYWJ7Y2QK LSAgZWNobyBcZnN1YnN0cmluZyhcJWEpCi0gIGFie2NkCi0KLSAgIElmIHRoZSBzdHJpbmcgaXMg dG8gc3RhcnQgd2l0aCBhIGxlYWRpbmcgYnJhY2UgYW5kIGVuZCB3aXRoIGEgY2xvc2luZwotICAg YnJhY2UsIHRoZW4gZG91YmxlIGJyYWNlcyBtdXN0IGFwcGVhciBhcm91bmQgdGhlIHN0cmluZyAo d2hpY2ggaXRzZWxmCi0gICBpcyBlbmNsb3NlZCBpbiBicmFjZXMpOgotCi0gIGRlZmluZSBcJWEg e3t7Zm9vfX19Ci0gIGVjaG8gXGZzdWJzdHJpbmcoXCVhKQotICB7Zm9vfQotCi0gICBUaGlzIGFs c28gd29ya3MgZm9yIGFueSBvdGhlciBraW5kIG9mIHN0cmluZzoKLQotICBkZWZpbmUgXCVhIHt7 YWJ7Y2R9fQotICBlY2hvIFxmc3Vic3RyaW5nKFwlYSkKLSAgYWJ7Y2QKLQotMTEuNy4gRGVmaW5p bmcgVmFyaWFibGVzIG9uIHRoZSBDLUtlcm1pdCBDb21tYW5kIExpbmUKLQotICAgVG8gZGVmaW5l IHZhcmlhYmxlcyBvbiB0aGUgQy1LZXJtaXQgY29tbWFuZCBsaW5lLCB1c2UgdGhlIC1DCi0gICBj b21tYW5kLWxpbmUgb3B0aW9uIHdpdGggb25lIG9yIG1vcmUgREVGSU5FIG9yIEFTU0lHTiBjb21t YW5kcy4gTm90ZQotICAgdGhhdCB0aGUgQy1LZXJtaXQgY29tbWFuZCBsaW5lIG11c3QgY29wZSB3 aXRoIHRoZSBxdW90aW5nIHJ1bGVzIG9mIHlvdXIKLSAgIHNoZWxsLiBFeGFtcGxlczoKLQotICBr ZXJtaXQgLUMgImRlZmluZSBcXCVhIGZvbywgZGVmaW5lIHBob25lbnVtYmVyIDc2NTQzMjEiCi0K LSAgIEluIHRoaXMgY2FzZSB3ZSBmb2xsb3cgVU5JWCBxdW90aW5nIHJ1bGVzIGJ5IGRvdWJsaW5n IHRoZSBiYWNrc2xhc2guCi0gICBPbmNlIEMtS2VybWl0IHN0YXJ0cywgdGhlIFwlYSBhbmQgXG0o cGhvbmVudW1iZXIpIHZhcmlhYmxlcyBhcmUgZGVmaW5lZAotICAgYXMgaW5kaWNhdGVkIGFuZCBj YW4gYmUgdXNlZCBpbiB0aGUgbm9ybWFsIHdheS4KLQotICAgSW4gRE9TIG9yIFdpbmRvd3Mgb3Ig T1MvMiB0aGUgY29tbWFuZCB3b3VsZCBiZToKLQotICBrZXJtaXQgLUMgImRlZmluZSBcJSVhIGZv bywgZGVmaW5lIHBob25lbnVtYmVyIDc2NTQzMjEiCi0KLSAgIEhlcmUgd2UgbmVlZCB0byBkb3Vi bGUgdGhlIHBlcmNlbnQgc2lnbiByYXRoZXIgdGhhbiB0aGUgYmFja3NsYXNoCi0gICBiZWNhdXNl IG9mIERPUyBzaGVsbCBxdW90aW5nIHJ1bGVzLgotCi0xMS44LiBQZXItQ2hhcmFjdGVyIEVjaG8g Q2hlY2sgd2l0aCB0aGUgT1VUUFVUIENvbW1hbmQKLQotICAgU29tZXRpbWVzIHRoZSBPVVRQVVQg Y29tbWFuZCBtdXN0IGJlIHVzZWQgdG8gc2VuZCBjb21tYW5kcyBvciBkYXRhIHRvIGEKLSAgIGRl dmljZSBpbiAiZWNob3BsZXgiIG1vZGUsIG1lYW5pbmcgdGhhdCBjaGFyYWN0ZXJzIG11c3QgYmUg c2VudCBvbmUgYXQKLSAgIGEgdGltZSwgYW5kIHRoZSBuZXh0IGNoYXJhY3RlciBjYW4gbm90IGJl IHNlbnQgdW50aWwgdGhlIGVjaG8gZnJvbSB0aGUKLSAgIHByZXZpb3VzIG9uZSBoYXMgYmVlbiBy ZWNlaXZlZC4gRm9yIGV4YW1wbGUsIGEgY2VydGFpbiBQQlggbWlnaHQgaGF2ZQotICAgdGhpcyBj aGFyYWN0ZXJpc3RpYy4gTGV0J3Mgc2F5IGEgS2VybWl0IHNjcmlwdCBpcyB1c2VkIHRvIHByb2dy YW0gdGhlCi0gICBQQlguIElmIGNoYXJhY3RlcnMgYXJlIHNlbnQgdG9vIGZhc3QsIHRoZXkgY2Fu IGJlIGxvc3QuIEl0IHdvdWxkIHNlZW0KLSAgIHRoYXQgdGhlIGNvbW1hbmQ6Ci0KLSAgU0VUIE9V VFBVVCBQQUNJTkcgbWlsbGlzZWNvbmRzCi0KLSAgIGNvdWxkIGJlIHVzZWQgdG8gdGFrZSBjYXJl IG9mIHRoaXMsIGJ1dCB0aGUgcGFjaW5nIGludGVydmFsIGlzIGNvbnN0YW50Ci0gICBhbmQgbXVz dCBiZSBzZXQgbGFyZ2UgZW5vdWdoIHRvIGFsbG93IGV2ZW4gdGhlIHNsb3dlc3QgZWNobyB0byBm aW5pc2guCi0gICBJZiB0aGUgc2NyaXB0IGlzIGxhcmdlIChhbiBhY3R1YWwgZXhhbXBsZSBpcyAx NCwwMDAgbGluZXMgbG9uZyksIHRoaXMKLSAgIGNhbiBjYXVzZSBpdCB0byB0YWtlIGhvdXJzIGxv bmdlciB0aGFuIGl0IG5lZWRzIHRvLgotCi0gICBIZXJlIGlzIGEgbWFjcm8geW91IGNhbiB1c2Ug dG8gT1VUUFVUIGEgc3RyaW5nIGluIGFuIEVjaG9wbGV4Ci0gICBlbnZpcm9ubWVudDoKLQotICBk ZWZpbmUgWE9VVFBVVCB7Ci0gICAgICBsb2NhbCBcJWMgXCVpCi0gICAgICBzZXQgb3V0cHV0IHBh Y2luZyAwCi0gICAgICBmb3IgXCVpIDEgXGZsZW4oXCUqKSAxIHsKLSAgICAgICAgICBhc2cgXCVj IFxmc3Vic3RyKFwlKixcJWksMSkKLSAgICAgICAgICBvdXRwdXQgXCVjCi0gICAgICAgICAgaW5w dXQgMiBcJWMKLSAgICAgIH0KLSAgfQotCi0gICBDLUtlcm1pdCA3LjAgb3IgbGF0ZXIgaXMgcmVx dWlyZWQuCi0KLSAgIEl0IHNlbmRzIG9uZSBjaGFyYWN0ZXIgYXQgYSB0aW1lIGFuZCB0aGVuIHdh aXRzIHVwIHRvIDIgc2Vjb25kcyBmb3IgdGhlCi0gICBjaGFyYWN0ZXIgdG8gYmUgZWNob2VkIGJh Y2ssIGJ1dCBjb250aW51ZXMgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGFzCi0gICBzb29uIGFzIHRo ZSBlY2hvIGFwcGVhcnMsIHNvIG5vIHRpbWUgaXMgd2FzdGVkLiBZb3UgY2FuIGFkZCBhbiBJRiBG QUlMCi0gICBjbGF1c2UgYWZ0ZXIgdGhlIElOUFVUIGluIGNhc2UgeW91IHdhbnQgdG8gZG8gc29t ZXRoaW5nIHNwZWNpYWwgYWJvdXQKLSAgIGZhaWx1cmUgdG8gZGV0ZWN0IGFuIGVjaG8gd2l0aGlu IHRoZSB0aW1lb3V0IHBlcmlvZC4gT2J2aW91c2x5IHlvdSBjYW4KLSAgIGFsc28gY2hhbmdlIHRo ZSAyLXNlY29uZCBsaW1pdCwgYW5kIGFkanVzdCB0aGUgc2NyaXB0IGluIGFueSBvdGhlcgotICAg ZGVzaXJlZCB3YXkuCi0KLTExLjkuIFNjcmlwdGVkIEZpbGUgVHJhbnNmZXIKLQotICAgU29tZXRp bWVzIGEgdXNlciBjb21wbGFpbnMgdGhhdCB3aGVuIHNoZSBtYWtlcyBhIGNvbm5lY3Rpb24gYnkg aGFuZCwKLSAgIGxvZ3MgaW4sIGFuZCB0cmFuc2ZlcnMgYSBmaWxlLCB0aGVyZSBhcmUgbm8gcHJv YmxlbXMsIGJ1dCB3aGVuIHNoZQotICAgc2NyaXB0cyB0aGUgdGhlIGV4YWN0IHNhbWUgc2VxdWVu Y2UsIHRoZSBmaWxlIHRyYW5zZmVyIGFsd2F5cyBmYWlscwotICAgYWZ0ZXIgYSBmZXcgcGFja2V0 cy4gSGVyZSdzIGEgc2NlbmFyaW8gd2hlcmUgdGhpcyBjYW4gaGFwcGVuOgotCi0gICAgMS4gVXBv biBsb2dnaW5nIGluIHRvIHRoZSByZW1vdGUgY29tcHV0ZXIsIGl0IHNlbmRzIGEgIldoYXQgQXJl IFlvdT8iCi0gICAgICAgZXNjYXBlIHNlcXVlbmNlLgotICAgIDIuIFdoZW4geW91IGxvZyBpbiBp bnRlcmFjdGl2ZWx5LCB5b3VyIHRlcm1pbmFsIGVtdWxhdG9yIHNlbmRzIHRoZQotICAgICAgIHJl c3BvbnNlLiBUaGlzIGlzIGludmlzaWJsZSB0byB5b3U7IHlvdSBkb24ndCBrbm93IGl0J3MgaGFw cGVuaW5nLgotICAgIDMuIFdoZW4geW91IHNjcmlwdCB0aGUgbG9naW4sIGFuZCBiZWdpbiBhIGZp bGUgdHJhbnNmZXIgaW1tZWRpYXRlbHkKLSAgICAgICB1cG9uIGxvZ2dpbmcgaW4sIHRoZSBob3N0 IHN0aWxsIHNlbmRzIHRoZSAiV2hhdCBBcmUgWW91PyIgc2VxdWVuY2UuCi0gICAgICAgS2VybWl0 J3MgSU5QVVQgRUNITyBzZXR0aW5nIGlzIE9OIGJ5IGRlZmF1bHQsIHNvIHRoZSBlc2NhcGUKLSAg ICAgICBzZXF1ZW5jZSBwYXNzZXMgdGhyb3VnaCB0byB0aGUgdGVybWluYWwsIGFuZCB0aGUgdGVy bWluYWwgc2VuZHMgaXRzCi0gICAgICAgcmVzcG9uc2UuIEJ1dCBieSB0aGlzIHRpbWUgS2VybWl0 IGhhcyBhbHJlYWR5IHN0YXJ0ZWQgdGhlIGZpbGUKLSAgICAgICB0cmFuc2Zlci4KLSAgICA0LiBC eSBkZWZhdWx0LCB0aGUgbG9jYWwgS2VybWl0IHByb2dyYW0gZXhhbWluZXMgdGhlIGtleWJvYXJk IGZvcgotICAgICAgIGludGVycnVwdGlvbiBjaGFyYWN0ZXJzIGJldHdlZW4gZXZlcnkgcGFja2V0 LiBUaGUgIldoYXQgQXJlIFlvdSIKLSAgICAgICByZXNwb25zZSBpcyBzaXR0aW5nIGluIHRoZSBr ZXlib2FyZCBidWZmZXIuIEV2ZW50dWFsbHkgS2VybWl0IHdpbGwKLSAgICAgICByZWFkIGEgY2hh cmFjdGVyIHN1Y2ggYXMgImMiIHRoYXQgaXMgYSB2YWxpZCBpbnRlcnJ1cHRpb24KLSAgICAgICBj aGFyYWN0ZXIsIGFuZCB0aGUgZmlsZSB0cmFuc2ZlciBzdG9wcyB3aXRoICJVc2VyIGNhbmNlbGVk Ii4KLQotICAgVGhlIHJpZ2h0IHdheSB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24gaXMgdG8gaGF2 ZSB5b3VyIGxvb2sgZm9yIHRoZQotICAgIldoYXQgQXJlIFlvdT8iIHNlcXVlbmNlIGFuZCBzZW5k IHRoZSByZXNwb25zZSBpdHNlbGYsIGFzIGRlc2NyaWJlZCBpbgotICAgVXNpbmcgQy1LZXJtaXQs IHBwLjQyOS00MzEuIE9yIHlvdSBjYW4gd29yayBhcm91bmQgaXQgYnkgdGVsbGluZyB0aGUKLSAg IGxvY2FsIEtlcm1pdCB0byAic2V0IGlucHV0IGVjaG8gb2ZmIiBhbmQvb3IgInNldCB0cmFuc2Zl ciBpbnRlcnJ1cHRpb24KLSAgIG9mZiIuCi0KLTExLjEwLiBIZXhhZGVjaW1hbCBhcml0aG1ldGlj Li4uCi0KLSAgIEMtS2VybWl0IGNhbiBkbyBib3RoIGludGVnZXIgYW5kIGZsb2F0aW5nLXBvaW50 IGFyaXRobWV0aWMsIGluIGJvdGgKLSAgIG9yZGluYXJ5IGFsZ2VicmFpYyBub3RhdGlvbiBhbmQg aW4gTGlzcCBTLUV4cHJlc3Npb24gbm90YXRpb24uIEFsbAotICAgYXJpdGhtZXRpYyBvcGVyYXRv cnMgYW5kIGZ1bmN0aW9ucyBvcGVyYXRlIG9ubHkgb24gZGVjaW1hbCBudW1iZXJzLiBJdAotICAg aXMgcG9zc2libGUsIGhvd2V2ZXIsIHRvIHdyaXRlIHNjcmlwdHMgdGhhdCBvcGVyYXRlIG9uIGhl eGFkZWNpbWFsCi0gICBudW1iZXJzLiBUaGlzIGlzIGRvbmUgYnkgY29udmVydGluZyB0aGVtIHRv IGRlY2ltYWwgcHJpb3IgdG8gYW55Ci0gICBhcml0aG1ldGljIG9wZXJhdGlvbnMsIGFuZCB0aGVu IGNvbnZlcnRpbmcgdGhlbSBiYWNrIHRvIGhleGFkZWNpbWFsIGZvcgotICAgZGlzcGxheS4gRXhh bXBsZToKLQotOyBFVkFMVUFURSBpcyBhIGNvbW1hbmQgdGhhdCBldmFsdWF0ZXMgYW4gYXJpdGht ZXRpYyBleHByZXNzaW9uLgotOyBTZWUgSEVMUCBFVkFMVUFURSBmb3IgZGV0YWlscy4gIFRoaXMg aXMganVzdCBmb3IgZGVtb25zdHJhdGlvbi4KLTsgQXJpdGhtZXRpYyBleHByZXNzaW9ucyBjYW4g YmUgdXNlZCBpbiBhbnkgY29udGV4dCB3aGVyZSBhIG51bWJlcgotOyBjYW4gYmUgdXNlZC4gIEFs c28sIHRoZSBzcGVjaWFsIG5vdGF0aW9uOgotOwotOyAuXCVhIDo6PSBleHByZXNzaW9uCi07Ci07 IGV2YWx1YXRpb25zIHRoZSBleHByZXNzaW9uIGFuZCBhc3NpZ25zIHRoZSByZXN1bHQgdG8gdGhl IHZhcmlhYmxlLgotOwotLlwlYSA6PSBmZmZlICAgICAgICAgICAgICAgIDsgU2V0IHZhcmlhYmxl IHRvIGhleCB2YWx1ZQotc2V0IGV2YWwgb2xkICAgICAgICAgICAgICAgIDsgU2VlIEhFTFAgRVZB TAotZXZhbCBcZmhleDJuKFwlYSkgICAgICAgICAgIDsgU2hvdyB2YWx1ZSBvZiB2YXJpYWJsZQot ZXZhbCBcZmhleDJuKFwlYSkgKyAxICAgICAgIDsgU2hvdyB2YWx1ZSBvZiBleHByZXNzaW9uCi1l dmFsIFxmaGV4Mm4oXCVhKSArIDIgICAgICAgOyBTaG93IHZhbHVlIG9mIGV4cHJlc3Npb24KLS5c JXggOjo9IFxmaGV4Mm4oXCVhKSArIDEgICA7IEFzc2lnbiB2YWx1ZSBvZiBleHByZXNzaW9uIHRv IHZhcmlhYmxlCi1lY2hvIFxmbjJoZXgoXCV4KSAgICAgICAgICAgOyBEaXNwbGF5IHZhcmlhYmxl J3MgdmFsdWUgaW4gaGV4Ci0uXCV4IDo6PSBcZmhleDJuKFwlYSkgKyAyICAgOiBEaXR0bwotZWNo byBcZm4yaGV4KFwleCkKLS5cJXggOjo9IFxmaGV4Mm4oXCVhKSB8IFxmaGV4Mm4oZmZmZikgIDsg U2ltaWxhcmx5IGZvciBsb2dpY2FsIE9SCi1lY2hvIFxmbjJoZXgoXCV4KQotLlwleCA6Oj0gXGZo ZXgybihcJWEpICYgXGZoZXgybihmZmZmKSAgOyBhbmQgbG9naWNhbCBBTkQKLWVjaG8gXGZuMmhl eChcJXgpCi0KLSAgIEJ5IHRoZSB3YXksIHlvdSBtaWdodCBiZSB0ZW1wdGVkIHRvIHVzZSBLZXJt aXQncyBceG5uIG5vdGF0aW9uIHRvIHBsdWcKLSAgIGhleCBudW1iZXJzIGludG8gYXJpdGhtZXRp YyBleHByZXNzaW9ucyBidXQgdGhpcyBkb2Vzbid0IHdvcmsuIFRoYXQKLSAgIG5vdGF0aW9uIGlz IHN0cmljdGx5IGZvciBieXRlcyAoaGV4IHJlcHJlc2VudGF0aW9uIG9mIGNoYXJhY3RlcgotICAg dmFsdWVzKSwgbm90IGZvciBudW1iZXJzLgotCi0xMS4xMS4gT3RoZXIuLi4KLQotICAgRXNjYXBl IHNlcXVlbmNlcyAob3IgYW55IHN0cmluZ3MgdGhhdCBjb250YWluIGNvbnRyb2wgY2hhcmFjdGVy cykgY2FuJ3QKLSAgIGJlIHVzZWQgYXMgbGFiZWxzLCBHT1RPIHRhcmdldHMsIG9yIFNXSVRDSCBj YXNlcy4KLQotICAgWyBbOTFdVG9wIF0gWyBbOTJdQ29udGVudHMgXSBbIFs5M11DLUtlcm1pdCBI b21lIF0gWyBbOTRdQy1LZXJtaXQgOC4wCi0gICBPdmVydmlldyBdIFsgWzk1XUtlcm1pdCBIb21l IF0KLSAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCi0KLSAgIEMtS2VybWl0IDguMCBVbml4IEhpbnRzIGFuZCBUaXBz IC8gWzk2XVRoZSBLZXJtaXQgUHJvamVjdCAvCi0gICBbOTdda2VybWl0QGNvbHVtYmlhLmVkdSAv IDMwIEp1bmUgMjAxMQotCi1SZWZlcmVuY2VzCi0KLSAgIDEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1LwotICAgMi4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKLSAgIDMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gICA0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvazk1Lmh0bWwKLSAgIDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0Lmh0bWwKLSAgIDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Nj cmlwdHMuaHRtbAotICAgNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1cnJlbnQu aHRtbAotICAgOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3doYXRzbmV3Lmh0bWwK LSAgIDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mYXEuaHRtbAotICAxMC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRtbAotICAxMS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sCi0gIDEyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwKLSAgMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9rOTUuaHRtbAotICAxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQuaHRtbAotICAxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9y Lmh0bWwKLSAgMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4 MAotICAxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3gxCi0g IDE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDIKLSAgMTku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MwotICAyMC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3g0Ci0gIDIxLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDUKLSAgMjIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4NgotICAyMy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3g3Ci0gIDI0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDgKLSAgMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2Nid3IuaHRtbCN4OQotICAyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2J3ci5odG1sI3gxMAotICAyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrY2J3ci5odG1sI3gxMQotICAyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr Y2J3ci5odG1sI3RvcAotICAyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3 ci5odG1sI2NvbnRlbnRzCi0gIDMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj YndyLmh0bWwjeDIKLSAgMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3Iu aHRtbCN0b3AKLSAgMzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRt bCNjb250ZW50cwotICAzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5o dG1sI3gyCi0gIDM0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5o dG1sCi0gIDM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDIuaHRtbAot ICAzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrNjBtYW51YWwuaHRtbAotICAz Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g1Ci0gIDM4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwKLSAgMzkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yCi0gIDQwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguNy4yCi0gIDQx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkKLSAgNDIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN0b3AKLSAgNDMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCNjb250ZW50cwotICA0NC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3gzCi0gIDQ1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDEKLSAgNDYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN0b3AKLSAgNDcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCNjb250ZW50cwotICA0OC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3g0Ci0gIDQ5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDIKLSAgNTAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN0b3AKLSAgNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCNjb250ZW50cwotICA1Mi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3g1Ci0gIDUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjYndyLmh0bWwjeDMKLSAgNTQuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVz L3JmYzExMjIudHh0Ci0gIDU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndy Lmh0bWwjdG9wCi0gIDU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0 bWwjY29udGVudHMKLSAgNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3Iu aHRtbCN4NgotICA1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1s I3g0Ci0gIDU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjdG9w Ci0gIDYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjY29udGVu dHMKLSAgNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4Nwot ICA2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3g1Ci0gIDYz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCi0gIDY0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDEwCi0gIDY1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjdG9wCi0gIDY2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjY29udGVudHMKLSAgNjcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4OAotICA2OC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3g2Ci0gIDY5LiBmdHA6Ly9mdHAuaXNp LmVkdS9pbi1ub3Rlcy9yZmMyMjE3LnR4dAotICA3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY2J3ci5odG1sI3RvcAotICA3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2J3ci5odG1sI2NvbnRlbnRzCi0gIDcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjYndyLmh0bWwjeDkKLSAgNzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2Nid3IuaHRtbCN4NwotICA3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr Y2J3ci5odG1sI3RvcAotICA3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3 ci5odG1sI2NvbnRlbnRzCi0gIDc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj YndyLmh0bWwjeDEwCi0gIDc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndy Lmh0bWwjeDgKLSAgNzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bAotICA3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3RvcAot ICA4MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI2NvbnRlbnRz Ci0gIDgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDExCi0g IDgyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDkKLSAgODMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazYwbWFudWFsLmh0bWwKLSAgODQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWk3MC5odG0KLSAgODUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ocDQ4Lmh0bWwKLSAgODYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMgotICA4Ny4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gxNQotICA4OC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3RvcAotICA4OS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrY2J3ci5odG1sI2NvbnRlbnRzCi0gIDkwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDEwCi0gIDkxLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjdG9wCi0gIDkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjYndyLmh0bWwjY29udGVudHMKLSAgOTMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgOTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9jazgwLmh0bWwKLSAgOTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRl eC5odG1sCi0gIDk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAot ICA5Ny4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKCmRpZmYgLS1naXQgYS9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2NmZy50eHQgYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2NmZy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAxODVjM2QuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja2NjZmcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTczOCArMCwwIEBACi0K LSAgIFsxXVRoZSBDb2x1bWJpYSBDcm93biBUaGUgS2VybWl0IFByb2plY3QgfCBDb2x1bWJpYSBV bml2ZXJzaXR5Ci0gICA2MTIgV2VzdCAxMTV0aCBTdHJlZXQsIE5ldyBZb3JrIE5ZIDEwMDI1IFVT QSBvIFsyXWtlcm1pdEBjb2x1bWJpYS5lZHUKLSAgIC4uLnNpbmNlIDE5ODEKLSAgIFszXUhvbWUg WzRdS2VybWl0IDk1IFs1XUMtS2VybWl0IFs2XVNjcmlwdHMgWzddQ3VycmVudCBbOF1OZXcgWzld RkFRCi0gICBbMTBdU3VwcG9ydAotCi1DLUtlcm1pdCBDb25maWd1cmF0aW9uIE9wdGlvbnMKLQot ICAgQXMgb2Y6IEMtS2VybWl0IDkuMC4zMDAsIDMwIEp1bmUgMjAxMQotICAgVGhpcyBwYWdlIGxh c3QgdXBkYXRlZDogRnJpIEp1bCAxIDE1OjQ4OjIxIDIwMTEgKE5ldyBZb3JrIFVTQSBUaW1lKQot Ci0gICAgIElGIFlPVSBBUkUgUkVBRElORyBBIFBMQUlOLVRFWFQgdmVyc2lvbiBvZiB0aGlzIGRv Y3VtZW50LCBub3RlIHRoYXQKLSAgICAgdGhpcyBmaWxlIGlzIGEgcGxhaW4tdGV4dCBkdW1wIG9m IGEgV2ViIHBhZ2UuIFlvdSBjYW4gdmlzaXQgdGhlCi0gICAgIG9yaWdpbmFsIChhbmQgcG9zc2li bHkgbW9yZSB1cC10by1kYXRlKSBXZWIgcGFnZSBoZXJlOgotCi0gIFsxMV1odHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwKLQotICAgWyBbMTJdQy1LZXJtaXQgSG9tZSBd IFsgWzEzXUtlcm1pdCBIb21lIF0KLQotICBDT05URU5UUwotCi0gIDEuIFsxNF1GSUxFIFRSQU5T RkVSCi0gIDIuIFsxNV1TRVJJQUwgQ09NTVVOSUNBVElPTiBTUEVFRFMKLSAgMy4gWzE2XUZVTExT Q1JFRU4gRklMRSBUUkFOU0ZFUiBESVNQTEFZCi0gIDQuIFsxN11DSEFSQUNURVIgU0VUUwotICA1 LiBbMThdQVBDIEVYRUNVVElPTgotICA2LiBbMTldUFJPR1JBTSBTSVpFCi0gIDcuIFsyMF1NT0RF TSBESUFMSU5HCi0gIDguIFsyMV1ORVRXT1JLIFNVUFBPUlQKLSAgOS4gWzIyXUVYQ0VQVElPTiBI QU5ETElORwotIDEwLiBbMjNdU0VDVVJJVFkgRkVBVFVSRVMKLSAxMS4gWzI0XUVOQUJMSU5HIFNF TEVDVCgpCi0gMTIuIFsyNV1JL08gUkVESVJFQ1RJT04KLSAxMy4gWzI2XUZMT0FUSU5HLVBPSU5U IE5VTUJFUlMsIFRJTUVSUywgQU5EIEFSSVRITUVUSUMKLSAxNC4gWzI3XVNQRUNJQUwgQ09ORklH VVJBVElPTlMKLSAgSS4gWzI4XVNVTU1BUlkgT0YgQ09NUElMRS1USU1FIE9QVElPTlMKLQotICBP VkVSVklFVwotCi0gICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBjb25maWd1cmF0aW9uIG9wdGlv bnMgZm9yIEMtS2VybWl0ICg1QSBhbmQKLSAgIGxhdGVyKS4gVGhlIG1ham9yIHRvcGljcyBjb3Zl cmVkIGluY2x1ZGUgcHJvZ3JhbSBzaXplIChhbmQgaG93IHRvCi0gICByZWR1Y2UgaXQpLCBob3cg dG8gaW5jbHVkZSBvciBleGNsdWRlIHBhcnRpY3VsYXIgZmVhdHVyZXMsIG5vdGVzIG9uCi0gICBz ZXJpYWwtcG9ydCwgbW9kZW0sIGFuZCBuZXR3b3JrIHN1cHBvcnQsIGFuZCBhIGxpc3Qgb2YgQy1L ZXJtaXQncwotICAgY29tcGlsZS10aW1lIG9wdGlvbnMuCi0KLSAgIEZvciBkZXRhaWxzIGFib3V0 IHlvdXIgcGFydGljdWxhciBvcGVyYXRpbmcgc3lzdGVtLCBhbHNvIHNlZSB0aGUKLSAgIHN5c3Rl bS1zcGVjaWZpYyBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZpbGUsIHN1Y2ggYXMgdGhlCi0g ICBbMjldQy1LZXJtaXQgSW5zdGFsbGF0aW9uIEluc3RydWN0aW9ucyBmb3IgVW5peC4KLQotICAg WyBbMzBdQy1LZXJtaXQgSG9tZSBdIFsgWzMxXUtlcm1pdCBIb21lIF0KLQotICAxLiBGSUxFIFRS QU5TRkVSCi0KLSAgIFsgWzMyXVRvcCBdIFsgWzMzXUNvbnRlbnRzIF0gWyBbMzRdTmV4dCBdIFsg WzM1XVByZXZpb3VzIF0KLQotICAgUHJpb3IgdG8gdmVyc2lvbiA3LjAsIEMtS2VybWl0IHdhcyBh bHdheXMgYnVpbHQgd2l0aCB0aGUgbW9zdAotICAgY29uc2VydmF0aXZlIEtlcm1pdCBmaWxlLXRy YW5zZmVyIHByb3RvY29sIGRlZmF1bHRzIG9uIGV2ZXJ5IHBsYXRmb3JtOgotICAgbm8gY29udHJv bC1jaGFyYWN0ZXIgcHJlZml4aW5nLCA5NC1ieXRlIHBhY2tldHMsIGFuZCBhIHdpbmRvdyBzaXpl IG9mCi0gICAxLgotCi0gICBTdGFydGluZyBpbiB2ZXJzaW9uIDcuMCwgZmFzdCBzZXR0aW5ncyBh cmUgdGhlIGRlZmF1bHQuIFRvIG92ZXJyaWRlCi0gICB0aGVzZSBhdCBjb21waWxlIHRpbWUsIGlu Y2x1ZGU6Ci0KLSAgLUROT0ZBU1QKLQotICAgaW4gdGhlIEMgY29tcGlsZXIgQ0ZMQUdTLiBFdmVu IHdpdGggdGhlIGZhc3QgZGVmYXVsdHMsIEMtS2VybWl0Ci0gICBhdXRvbWF0aWNhbGx5IGRyb3Bz IGRvd24gdG8gd2hhdGV2ZXIgd2luZG93IGFuZCBwYWNrZXQgc2l6ZXMgcmVxdWVzdGVkCi0gICBi eSB0aGUgb3RoZXIgS2VybWl0LCBpZiB0aGVzZSBhcmUgc21hbGxlciwgd2hlbiBzZW5kaW5nIGZp bGVzIChleGNlcHQKLSAgIGZvciBjb250cm9sLWNoYXJhY3RlciB1bnByZWZpeGluZywgd2hpY2gg aXMgbm90IG5lZ290aWF0ZWQsIGFuZCB3aGljaAotICAgaXMgbm93IHNldCB0byBDQVVUSU9VUyBy YXRoZXIgdGhhbiBOT05FIGF0IHN0YXJ0dXApLiBDLUtlcm1pdCdzCi0gICBzZXR0aW5ncyBwcmV2 YWlsIHdoZW4gaXQgaXMgcmVjZWl2aW5nLgotCi0gICBbIFszNl1DLUtlcm1pdCBIb21lIF0gWyBb MzddS2VybWl0IEhvbWUgXQotCi0gIDIuIFNFUklBTCBDT01NVU5JQ0FUSU9OIFNQRUVEUwotCi0g ICBbIFszOF1Ub3AgXSBbIFszOV1Db250ZW50cyBdIFsgWzQwXU5leHQgXSBbIFs0MV1QcmV2aW91 cyBdCi0KLSAgIEFzIG9mIDYgU2VwdGVtYmVyIDE5OTcsIGEgbmV3IHNpbXBsaWZpZWQgbWVjaGFu aXNtIGZvciBvYnRhaW5pbmcgdGhlCi0gICBsaXN0IG9mIGxlZ2FsIHNlcmlhbCBpbnRlcmZhY2Ug c3BlZWRzIGlzIGluIHBsYWNlOgotCi0gICAgICogSWYgdGhlIHN5bWJvbCBUVFNQRExJU1QgaXMg ZGVmaW5lZCwgdGhlIHN5c3RlbS1kZXBlbmRlbnQgcm91dGluZQotICAgICAgIHR0c3BkbGlzdCgp IGlzIGNhbGxlZCBhdCBwcm9ncmFtIGluaXRpYWxpemF0aW9uIHRvIG9idGFpbiB0aGUgbGlzdC4K LSAgICAgKiBUaGlzIHN5bWJvbCBzaG91bGQgYmUgZGVmaW5lZCBvbmx5IGZvciBDLUtlcm1pdCBp bXBsZW1lbnRhdGlvbnMKLSAgICAgICB0aGF0IGhhdmUgaW1wbGVtZW50ZWQgdGhlIHR0c3BkbGlz dCgpIGZ1bmN0aW9uLCB0eXBpY2FsbHkgaW4gdGhlCi0gICAgICAgY2s/dGlvLmMgbW9kdWxlLiBT ZWUgWzQyXWNrdXRpby5jIGZvciBhbiBleGFtcGxlLgotICAgICAqIFRUU1BETElTVCBpcyBhdXRv bWF0aWNhbGx5IGRlZmluZWQgaW4gWzQzXWNrY2RlYi5oIGZvciBVTklYLiBBZGQKLSAgICAgICB0 aGUgYXBwcm9wcmlhdGUgI2lmZGVmcyBmb3Igb3RoZXIgcGxhdGZvcm1zIHdoZW4gdGhlIGNvcnJl c3BvbmRpbmcKLSAgICAgICB0dHNwZGxpc3QoKSBmdW5jdGlvbnMgYXJlIGZpbGxlZCBpbi4KLSAg ICAgKiBJZiBUVFNQRExJU1QgaXMgKG9yIG5vcm1hbGx5IHdvdWxkIGJlKSBkZWZpbmVkLCB0aGUg b2xkIGNvZGUKLSAgICAgICAoZGVzY3JpYmVkIGJlbG93KSBjYW4gc3RpbGwgYmUgc2VsZWN0ZWQg YnkgZGVmaW5pbmcgTk9UVFNQRExJU1QuCi0KLSAgIFRoZSB0dHNwZGxpc3QoKSBmdW5jdGlvbiBj YW4gb2J0YWluIHRoZSBzcGVlZHMgaW4gYW55IHdheSB0aGF0IHdvcmtzLgotICAgRm9yIGV4YW1w bGUsIGJhc2VkIHNpbXBseSBvbiAjaWZkZWYgQm5ubm4uLiNlbmRpZiAoaW4gVU5JWCkuIEFsdGhv dWdoCi0gICBpdCBtaWdodCBiZSBiZXR0ZXIgdG8gYWN0dWFsbHkgY2hlY2sgZWFjaCBzcGVlZCBh Z2FpbnN0IHRoZSBjdXJyZW50bHkKLSAgIHNlbGVjdGVkIGhhcmR3YXJlIGludGVyZmFjZSBiZWZv cmUgYWxsb3dpbmcgaXQgaW4gdGhlIGFycmF5LCB0aGVyZSBpcwotICAgdXN1YWxseSBubyBwYXNz aXZlIGFuZC9vciByZWxpYWJsZSBhbmQgc2FmZSB3YXkgdG8gZG8gdGhpcywgYW5kIHNvIGl0J3MK LSAgIGJldHRlciB0byBsZXQgc29tZSBzcGVlZHMgaW50byB0aGUgYXJyYXkgdGhhdCBtaWdodCBu b3Qgd29yaywgdGhhbiBpdAotICAgaXMgdG8gZXJyb25lb3VzbHkgZXhjbHVkZSBvdGhlcnMuIFNw ZWVkcyB0aGF0IGRvbid0IHdvcmsgYXJlIGNhdWdodAotICAgd2hlbiB0aGUgU0VUIFNQRUVEIGNv bW1hbmQgaXMgYWN0dWFsbHkgZ2l2ZW4uCi0KLSAgIE5vdGUgdGhhdCB0aGlzIHNjaGVtZSBkb2Vz IG5vdCBuZWNlc3NhcmlseSBydWxlIG91dCBzcGxpdCBzcGVlZAotICAgb3BlcmF0aW9uLCBidXQg ZWZmZWN0aXZlbHkgaXQgZG9lcyBpbiBDLUtlcm1pdCBhcyBwcmVzZW50bHkgY29uc3RpdHV0ZWQK LSAgIHNpbmNlIHRoZXJlIGFyZSBubyBjb21tYW5kcyB0byBzZXQgaW5wdXQgYW5kIG91dHB1dCBz cGVlZCBzZXBhcmF0ZWx5Ci0gICAoZXhjZXB0IHRoZSBzcGVjaWFsIGNhc2UgInNldCBzcGVlZCA3 NS8xMjAwIikuCi0KLSAgIE5vdGUgdGhhdCBzb21lIHBsYXRmb3Jtcywgbm90YWJseSBBSVggNC4y IGFuZCA0LjMsIGltcGxlbWVudCBoaWdoCi0gICBzZXJpYWwgc3BlZWRzIHRyYW5zcGFyZW50bHkg dG8gdGhlIGFwcGxpY2F0aW9uLCBlLmcuIGJ5IG1hcHBpbmcgNTAgYnBzCi0gICB0byA1NzYwMCBi cHMsIGFuZCBzbyBvbi4KLQotICAgVGhhdCdzIHRoZSB3aG9sZSBkZWFsLiBXaGVuIFRUU1BETElT VCBpcyBub3QgZGVmaW5lZCwgdGhlIGZvbGxvd2luZwotICAgYXBwbGllczoKLQotICAgU3BlZWRz IGFyZSBkZWZpbmVkIGluIHR3byBwbGFjZXM6IHRoZSBTRVQgU1BFRUQga2V5d29yZCBsaXN0IGlu IHRoZQotICAgY29tbWFuZCBwYXJzZXIgKGFzIG9mIHRoaXMgd3JpdGluZywgaW4gdGhlIFs0NF1j a3V1czMuYyBzb3VyY2UgZmlsZSksCi0gICBhbmQgaW4gdGhlIHN5c3RlbS0gZGVwZW5kZW50IGNv bW11bmljYXRpb25zIGkvbyBtb2R1bGUsIGNrP3Rpby5jLAotICAgZnVuY3Rpb25zIHR0c3NwZCgp IChzZXQgc3BlZWQpIGFuZCB0dGdzcGQoKSAoZ2V0IHNwZWVkKS4gVGhlIGZvbGxvd2luZwotICAg c3BlZWRzIGFyZSBhc3N1bWVkIHRvIGJlIGF2YWlsYWJsZSBpbiBhbGwgdmVyc2lvbnM6Ci0KLSAg MCwgMTEwLCAzMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgOTYwMAotCi0gICBJZiBvbmUgb3Ig bW9yZSBvZiB0aGVzZSBzcGVlZHMgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIHN5c3RlbSwgeW91 J2xsCi0gICBuZWVkIHRvIGNoYW5nZSB0aGUgc291cmNlIGNvZGUgKHRoaXMgaGFzIG5ldmVyIGhh cHBlbmVkIHNvIGZhcikuIE90aGVyCi0gICBzcGVlZHMgdGhhdCBhcmUgbm90IGNvbW1vbiB0byBh bGwgc3lzdGVtcyBoYXZlIEtlcm1pdC1zcGVjaWZpYyBzeW1ib2xzOgotCi0gICAgICAgICAgICAg ICBTeW1ib2wgICAgICAgU3ltYm9sCi0gIFNwZWVkIChicHMpICB0byBlbmFibGUgICAgdG8gZGlz YWJsZQotICAgICAgIDUwICAgICAgIEJQU181MCAgICAgICBOT0JfNTAKLSAgICAgICA3NSAgICAg ICBCUFNfNzUgICAgICAgTk9CXzc1Ci0gICAgICAgNzUvMTIwMCAgQlBTXzc1MTIgICAgIE5PQl83 NTEyCi0gICAgICAxMzQuNSAgICAgQlBTXzEzNCAgICAgIE5PQl8xMzQKLSAgICAgIDE1MCAgICAg ICBCUFNfMTUwICAgICAgTk9CXzE1MAotICAgICAgMjAwICAgICAgIEJQU18yMDAgICAgICBOT0Jf MjAwCi0gICAgIDE4MDAgICAgICAgQlBTXzE4MDAgICAgIE5PQl8xODAwCi0gICAgIDM2MDAgICAg ICAgQlBTXzM2MDAgICAgIE5PQl8zNjAwCi0gICAgIDcyMDAgICAgICAgQlBTXzcyMDAgICAgIE5P Ql83MjAwCi0gICAgMTQ0MDAgICAgICAgQlBTXzE0SyAgICAgIE5PQl8xNEsKLSAgICAxOTIwMCAg ICAgICBCUFNfMTlLICAgICAgTk9CXzE5SwotICAgIDI4ODAwICAgICAgIEJQU18yOEsgICAgICBO T0JfMjhLCi0gICAgMzg0MDAgICAgICAgQlBTXzM4SyAgICAgIE5PQl8zOEsKLSAgICA1NzYwMCAg ICAgICBCUFNfNTdLICAgICAgTk9CXzU3SwotICAgIDc2ODAwICAgICAgIEJQU183NksgICAgICBO T0JfNzZLCi0gICAxMTUyMDAgICAgICAgQlBTXzExNUsgICAgIE5PQl8xNTVLCi0gICAyMzA0MDAg ICAgICAgQlBTXzIzMEsgICAgIE5PQl8yMzBLCi0gICA0NjA4MDAgICAgICAgQlBTXzQ2MEsgICAg IE5PQl80NjBLCi0gICA5MjE2MDAgICAgICAgQlBTXzkyMUsgICAgIE5PQl85MjFLCi0KLSAgIFRo ZSBbNDVdY2tjZGViLmggaGVhZGVyIGZpbGUgY29udGFpbnMgZGVmYXVsdCBzcGVlZCBjb25maWd1 cmF0aW9ucyBmb3IKLSAgIHRoZSBtYW55IHN5c3RlbXMgdGhhdCBDLUtlcm1pdCBzdXBwb3J0cy4g WW91IGNhbiBvdmVycmlkZSB0aGVzZQotICAgZGVmYXVsdHMgYnkgKGEpIGVkaXRpbmcgY2tjZGVi LmgsIG9yIChiKSBkZWZpbmluZyB0aGUgYXBwcm9wcmlhdGUKLSAgIGVuYWJsaW5nIGFuZC9vciBk aXNhYmxpbmcgc3ltYm9scyBvbiB0aGUgQ0MgY29tbWFuZCBsaW5lLCBmb3IgZXhhbXBsZToKLQot ICAtREJQU18xNDQwMCAtRE5PQl8xMTUyMDAKLQotICAgb3IgdGhlICJtYWtlIiBjb21tYW5kIGxp bmUsIGUuZy46Ci0KLSAgbWFrZSBibGFoICJLRkxBR1M9LURCUFNfMTQ0MDAgLUROT0JfMTE1MjAw IgotCi0gICBOb3RlOiBzb21lIHNwZWVkcyBoYXZlIG5vIHN5bWJvbHMgZGVmaW5lZCBmb3IgdGhl bSwgYmVjYXVzZSB0aGV5IGhhdmUKLSAgIG5ldmVyIGJlZW4gbmVlZGVkOiAxMi41YnBzLCA0NS41 YnBzLCAyMDAwMGJwcywgZXRjLiBUaGVzZSBjYW4gZWFzaWx5IGJlCi0gICBhZGRlZCBpZiByZXF1 aXJlZCAoYnV0IHRoZXkgd2lsbCB3b3JrIG9ubHkgaWYgdGhlIE9TIHN1cHBvcnRzIHRoZW0pLgot Ci0gICBJTVBPUlRBTlQ6IEFkZGluZyBvbmUgb2YgdGhlc2UgZmxhZ3MgYXQgY29tcGlsZSB0aW1l IGRvZXMgbm90Ci0gICBuZWNlc3NhcmlseSBtZWFuIHRoYXQgeW91IHdpbGwgYmUgYWJsZSB0byB1 c2UgdGhhdCBzcGVlZC4gQSBwYXJ0aWN1bGFyCi0gICBzcGVlZCBpcyB1c2FibGUgb25seSBpZiB5 b3VyIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSBzdXBwb3J0cyBpdC4KLSAgIEluIHBhcnRp Y3VsYXIsIGl0IG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIGFwcHJvcHJpYXRlIHN5c3RlbSBo ZWFkZXIKLSAgIGZpbGUgKGUuZy4gaW4gVU5JWCwgY2QgdG8gL3Vzci9pbmNsdWRlIGFuZCBncmVw IGZvciBCOTYwMCBpbiAqLmggYW5kCi0gICBzeXMvKi5oIHRvIGZpbmQgdGhlIGhlYWRlciBmaWxl IHRoYXQgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUKLSAgIHN1cHBvcnRlZCBzcGVl ZHMpLCBhbmQgc3VwcG9ydGVkIGJ5IHRoZSBzZXJpYWwgZGV2aWNlIGRyaXZlciwgYW5kIG9mCi0g ICBjb3Vyc2UgYnkgdGhlIHBoeXNpY2FsIGRldmljZSBpdHNlbGYuCi0KLSAgIEFMU08gSU1QT1JU QU5UOiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgc3BlZWRzIGlzIGluZGVwZW5kZW50IG9mIGhvdyB0 aGV5Ci0gICBhcmUgc2V0LiBUaGUgbWFueSBVTklYZXMsIGZvciBleGFtcGxlLCBvZmZlciBhIHdp ZGUgdmFyaWV0eSBvZiBBUElzCi0gICB0aGF0IGFyZSBCU0QtYmFzZWQsIFNZU1YtYmFzZWQsIFBP U0lYLWJhc2VkLCBhbmQgcHVyZWx5IG1hZGUgdXAuIFNlZQotICAgdGhlIHR0c3NwZCgpLCB0dGdz cGQoKSwgYW5kIHR0c3BkbGlzdCgpIHJvdXRpbmVzIGluIFs0Nl1ja3V0aW8uYyBmb3IKLSAgIGls bHVzdHJhdGlvbnMuCi0KLSAgIFRoZSBsYXRlc3QgZW50cmllcyBpbiB0aGlzIGhvcnNlcmFjZSBh cmUgdGhlIHRjZ2V0c3BlZWQoKSBhbmQKLSAgIHR0c2V0c3BlZWQoKSByb3V0aW5lcyBmb3VuZCBp biBVbml4V2FyZSA3LiBVbmxpa2Ugb3RoZXIgbWV0aG9kcywgdGhleQotICAgYWNjZXB0IHRoZSBl bnRpcmUgcmFuZ2Ugb2YgaW50ZWdlcnMgKGxvbmdzIHJlYWxseSkgYXMgc3BlZWQgdmFsdWVzLAot ICAgcmF0aGVyIHRoYW4gY2VydGFpbiBjb2RlcywgYW5kIHJldHVybiBhbiBlcnJvciBpZiB0aGUg bnVtYmVyIGlzIG5vdCwgaW4KLSAgIGZhY3QsIGEgbGVnYWwgc3BlZWQgZm9yIHRoZSBkZXZpY2Uv ZHJpdmVyIGluIHF1ZXN0aW9uLiBJbiB0aGlzIGNhc2UsCi0gICB0aGVyZSBpcyBubyB3YXkgdG8g YnVpbGQgYSBsaXN0IG9mIGxlZ2FsIHNwZWVkcyBhdCBjb21waWxlIHRpbWUsIHNpbmNlCi0gICBu byBCbm5ubiBzeW1ib2xzIGFyZSBkZWZpbmVkIChleGNlcHQgZm9yICJkZXByZWNhdGVkLCBsZWdh Y3kiCi0gICBpbnRlcmZhY2VzIGxpa2UgaW9jdGwoKSkgYW5kIHNvIHRoZSBsZWdhbCBzcGVlZCBs aXN0IG11c3QgYmUgZW51bWVyYXRlZAotICAgaW4gdGhlIGNvZGUgLS0gc2VlIHR0c3BkbGlzdCgp IGluIFs0N11ja3V0aW8uYy4KLQotICAgWyBbNDhdQy1LZXJtaXQgSG9tZSBdIFsgWzQ5XUtlcm1p dCBIb21lIF0KLQotICAzLiBGVUxMU0NSRUVOIEZJTEUgVFJBTlNGRVIgRElTUExBWQotCi0gICBb IFs1MF1Ub3AgXSBbIFs1MV1Db250ZW50cyBdIFsgWzUyXU5leHQgXSBbIFs1M11QcmV2aW91cyBd Ci0KLSAgIE5ldyB0byBlZGl0IDE4MCBpcyBzdXBwb3J0IGZvciBhbiBNUy1ET1MtS2VybWl0LWxp a2UgbG9jYWwtbW9kZSBmdWxsCi0gICBzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5LCBhY2Nv bXBsaXNoZWQgdXNpbmcgdGhlIGN1cnNlcyBsaWJyYXJ5LCBvcgotICAgc29tZXRoaW5nIGVxdWl2 YWxlbnQgKGZvciBleGFtcGxlLCB0aGUgU2NyZWVuIE1hbmFnZXIgb24gREVDIFZNUykuIFRvCi0g ICBlbmFibGUgdGhpcyBmZWF0dXJlLCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW4geW91ciBDRkxB R1M6Ci0KLSAgLURDS19DVVJTRVMKLQotICAgYW5kIHRoZW4gY2hhbmdlIHlvdXIgYnVpbGQgcHJv Y2VkdXJlIChpZiBuZWNlc3NhcnkpIHRvIGluY2x1ZGUgdGhlCi0gICBuZWNlc3NhcnkgbGlicmFy aWVzLiBGb3IgZXhhbXBsZSwgaW4gVW5peCB0aGVzZSBhcmUgdXN1YWxseSAiY3Vyc2VzIiBvcgot ICAgIm5jdXJzZXMiIChhbmQgbW9yZSByZWNlbnRseSwgIm5jdXJzZXN3IiBhbmQgInNsYW5nIiks IHBlcmhhcHMgYWxzbwotICAgInRlcm1jYXAiLCAidGVybWxpYiIsIG9yICJ0aW5mbyI6Ci0KLSAg IkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCIKLSAgIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWxpYiIK LSAgIkxJQlM9IC1sbmN1cnNlcyIKLSAgIkxJQlM9IC1sdGVybWxpYiIKLSAgIkxJQlM9IC1sdGlu Zm8iCi0KLSAgICJtYW4gY3Vyc2VzIiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgYW5kIHNlYXJj aCB0aHJvdWdoIHRoZSBVbml4Ci0gICBbNTRdbWFrZWZpbGUgZm9yICJDS19DVVJTRVMiIHRvIHNl ZSBtYW55IGV4YW1wbGVzLCBhbmQgYWxzbyBzZWUgdGhlCi0gICByZWxldmFudCBzZWN0aW9ucyBv ZiB0aGUgWzU1XVVuaXggQy1LZXJtaXQgSW5zdGFsbGF0aW9uIEluc3RydWN0aW9ucywKLSAgIHBh cnRpY3VsYXJseSBTZWN0aW9ucyBbNTZdNCBhbmQgWzU3XTkuMi4KLQotICAgVGhlcmUgbWlnaHQg c3RpbGwgYmUgYSBjb21wbGljYXRpb24uIFNvbWUgaW1wbGVtZW50YXRpb25zIG9mIGN1cnNlcwot ICAgcmVzZXJ2ZSB0aGUgcmlnaHQgdG8gYWx0ZXIgdGhlIGJ1ZmZlcmluZyBvbiB0aGUgb3V0cHV0 IGZpbGUgd2l0aG91dAotICAgcmVzdG9yaW5nIGl0IGFmdGVyd2FyZHMsIHdoaWNoIGNhbiBsZWF2 ZSBLZXJtaXQncyBjb21tYW5kIHByb2Nlc3NpbmcgaW4KLSAgIGEgbWVzcyB3aGVuIHRoZSBwcm9t cHQgY29tZXMgYmFjayBhZnRlciBhIGZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlcgotICAgZGlzcGxh eS4gVGhlIHR5cGljYWwgc3ltcHRvbSBpcyB0aGF0IGNoYXJhY3RlcnMgeW91IHR5cGUgYXQgdGhl IHByb21wdAotICAgYWZ0ZXIgYSBsb2NhbC1tb2RlIGZpbGUgdHJhbnNmZXIgKGkuZS4gYWZ0ZXIg c2VlaW5nIHRoZSBjdXJzZXMKLSAgIGZpbGUtdHJhbnNmZXIgZGlzcGxheSkgZG8gbm90IGVjaG8g dW50aWwgeW91IHByZXNzIHRoZSBSZXR1cm4gKEVudGVyKQotICAga2V5LiBJZiB0aGlzIGhhcHBl bnMgdG8geW91LCB0cnkgYWRkaW5nCi0KLSAgLURDS19ORVdURVJNCi0KLSAgIHRvIHlvdXIgbWFr ZWZpbGUgdGFyZ2V0IChzZWUgY29tbWVudHMgaW4gc2NyZWVuYygpIGluIFs1OF1ja3V1c3guYyBm b3IKLSAgIGFuIGV4cGxhbmF0aW9uKS4KLQotICAgSWYgdGhhdCBkb2Vzbid0IGZpeCB0aGUgcHJv YmxlbSwgdGhlbiB1c2UgYSBiaWdnZXIgaGFtbWVyIGFuZCByZXBsYWNlCi0gICAtRENLX05FV1RF Uk0gd2l0aDoKLQotICAtRE5PTk9TRVRCVUYKLQotICAgd2hpY2ggdGVsbHMgS2VybWl0IHRvIGZv cmNlIHN0ZG91dCB0byBiZSB1bmJ1ZmZlcmVkIHNvIENCUkVBSyBtb2RlIGNhbgotICAgd29yay4K LQotICAgSW4gU0NPIFhlbml4IGFuZCBTQ08gVU5JWCwgdGhlcmUgYXJlIHR3byBzZXBhcmF0ZSBj dXJzZXMgbGlicmFyaWVzLCBvbmUKLSAgIGJhc2VkIG9uIHRlcm1jYXAgYW5kIHRoZSBvdGhlciBi YXNlZCBvbiB0ZXJtaW5mby4gVGhlIGRlZmF1bHQgbGlicmFyeSwKLSAgIHVzdWFsbHkgdGVybWlu Zm8sIGlzIGVzdGFibGlzaGVkIHdoZW4gdGhlIGRldmVsb3BtZW50IHN5c3RlbSBpcwotICAgaW5z dGFsbGVkLiBUbyBtYW51YWxseSBzZWxlY3QgdGVybWluZm8gKGF0IGNvbXBpbGUgdGltZSk6Ci0K LSAgY29tcGlsZSAtRE1fVEVSTUlORk8gYW5kIGxpbmsgLWx0aW5mbwotCi0gICBhbmQgdG8gbWFu dWFsbHkgc2VsZWN0IHRlcm1jYXA6Ci0KLSAgY29tcGlsZSAtRE1fVEVSTUNBUCBhbmQgbGluayAt bHRjYXAgLWx0ZXJtbGliCi0KLSAgIDxjdXJzZXMuaD4gbG9va3MgYXQgTV9URVJNSU5GTyBhbmQg TV9URVJNQ0FQIHRvIGRlY2lkZSB3aGljaCBoZWFkZXIKLSAgIGZpbGVzIHRvIHVzZS4gL3Vzci9s aWIvbGliY3Vyc2VzLmEgaXMgYSBsaW5rIHRvIGVpdGhlciBsaWJ0aW5mby5hIG9yCi0gICBsaWJ0 Y2FwLmEuIFRoZSBDLUtlcm1pdCBjb21waWxhdGlvbiBvcHRpb25zIG11c3QgYWdyZWUgd2l0aCB0 aGUgdmVyc2lvbgotICAgb2YgdGhlIGN1cnNlcyBsaWJyYXJ5IHRoYXQgaXMgYWN0dWFsbHkgaW5z dGFsbGVkLgotCi0gICBOT1RFOiBJZiB5b3UgYXJlIGRvaW5nIGFuIEFOU0ktQyBjb21waWxhdGlv biBhbmQgeW91IGdldCBjb21waWxlIHRpbWUKLSAgIHdhcm5pbmdzIGxpa2UgdGhlIGZvbGxvd2lu ZzoKLQotICBXYXJuaW5nOiBmdW5jdGlvbiBub3QgZGVjbGFyZWQgaW4gY2t1dXN4LmM6IHdtb3Zl LCBwcmludHcsIHdjbHJ0b2VvbCwKLSAgd2NsZWFyLCB3cmVmcmVzaCwgZW5kd2luLCBldGMuLi4K LQotICAgaXQgbWVhbnMgdGhhdCB5b3VyIDxjdXJzZXMuaD4gZmlsZSBkb2VzIG5vdCBjb250YWlu IHByb3RvdHlwZXMgZm9yCi0gICB0aGVzZSBmdW5jdGlvbnMuIFRoZSB3YXJuaW5ncyBzaG91bGQg YmUgaGFybWxlc3MuCi0KLSAgIE5ldyB0byBlZGl0IDE5MCBpcyB0aGUgYWJpbGl0eSB0byByZWZy ZXNoIGEgbWVzc2VkLXVwIGZ1bGwtc2NyZWVuCi0gICBkaXNwbGF5LCBlLmcuIGFmdGVyIHJlY2Vp dmluZyBhIGJyb2FkY2FzdCBtZXNzYWdlLiBUaGlzIGRlcGVuZHMgb24gdGhlCi0gICBjdXJzZXMg cGFja2FnZSBpbmNsdWRpbmcgdGhlIHdyZWZyZXNoKCkgYW5kIGNsZWFyb2soKSBmdW5jdGlvbnMg YW5kIHRoZQotICAgY3Vyc2NyIHZhcmlhYmxlLiBJZiB5b3VyIHZlcnNpb24gaGFzIHRoZXNlLCBv ciBoYXMgY29kZSB0byBzaW11bGF0ZQotICAgdGhlbSwgdGhlbiBhZGQ6Ci0KLSAgLURDS19XUkVG UkVTSAotCi0gICBUaGUgY3Vyc2VzIGFuZCB0ZXJtY2FwIGxpYnJhcmllcyBhZGQgY29uc2lkZXJh YmxlIHNpemUgdG8gdGhlIHByb2dyYW0KLSAgIGltYWdlIChlLmcuIGFib3V0IDIwSyBvbiBhIFNV Ti00LCA0MEsgb24gYSAzODYpLiBPbiBzb21lIHNtYWxsIHN5c3RlbXMsCi0gICBzdWNoIGFzIHRo ZSBBVCZUIDYzMDAgUExVUywgY3Vyc2VzIGNhbiBwdXNoIEtlcm1pdCBvdmVyIHRoZSBlZGdlLi4u Ci0gICBldmVuIHRob3VnaCBpdCBjb21waWxlcywgbG9hZHMsIGFuZCBydW5zIGNvcnJlY3RseSwg aXRzIGluY3JlYXNlZCBzaXplCi0gICBhcHBhcmVudGx5IG1ha2VzIGl0IHN3YXAgY29uc3RhbnRs eSwgc2xvd2luZyBpdCBkb3duIHRvIGEgY3Jhd2wsIGV2ZW4KLSAgIHdoZW4gdGhlIGN1cnNlcyBk aXNwbGF5IGlzIG5vdCBpbiB1c2UuIFNvbWUgbmV3IG1ha2VmaWxlIHRhcmdldHMgaGF2ZQotICAg YmVlbiBhZGRlZCB0byB0YWtlIGNhcmUgb2YgdGhpcyAoZS5nLiBzeXMzdXBjc2hjYyksIGJ1dCBz aW1pbGFyIHRyaWNrcwotICAgbWlnaHQgYmUgbmVjZXNzYXJ5IGluIG90aGVyIGNhc2VzIHRvby4K LQotICAgT24gdGhlIGN1cnNlcyBmaWxlLXRyYW5zZmVyIGRpc3BsYXksIGp1c3QgYmVsb3cgdGhl ICJ0aGVybW9tZXRlciIsIGlzIGEKLSAgIHJ1bm5pbmcgZGlzcGxheSBvZiB0aGUgdHJhbnNmZXIg cmF0ZSwgYXMgYSBmbGF0IHF1b3RpZW50IG9mIGZpbGUKLSAgIGNoYXJhY3RlcnMgcGVyIGVsYXBz ZWQgc2Vjb25kcyBzbyBmYXIuIFlvdSBjYW4gY2hhbmdlIHRoaXMgdG8gYW4KLSAgIGF2ZXJhZ2Ug dGhhdCBnaXZlcyBncmVhdGVyIHdlaWdodCB0byByZWNlbnQgaGlzdG9yeSAoMC4yNSAqCi0gICBp bnN0YW50YW5lb3VzIGNwcyArIDAuNzUgKiBoaXN0b3JpY2FsIGNwcykgYnkgYWRkaW5nIC1EQ1BT X1dFSUdIVEVEIHRvCi0gICB5b3VyIENGTEFHUyAoc29ycnkgZm9sa3MsIHRoaXMgb25lIGlzIG5v dCB3b3J0aCBhIFNFVCBjb21tYW5kKS4gWW91IGNhbgotICAgY2hvb3NlIGEgc2Vjb25kIHR5cGUg b2Ygd2VpZ2h0ZWQgYXZlcmFnZSBpbiB3aGljaCB0aGUgd2VpZ2h0aW5nIHNtb290aHMKLSAgIG91 dCBwcm9ncmVzc2l2ZWx5IGFzIHRoZSB0cmFuc2ZlciBwcm9ncmVzc2VzIGJ5IGFkZGluZyAtRENQ U19WSU5DRSB0bwotICAgLURDUFNfV0VJR0hURUQuCi0KLSAgIEFuIGFsdGVybmF0aXZlIHRvIGN1 cnNlcyBpcyBhbHNvIGF2YWlsYWJsZSBhdCBjb21waWxlIHRpbWUsIGJ1dCBzaG91bGQKLSAgIGJl IHNlbGVjdGVkIGlmIHlvdXIgdmVyc2lvbiBvZiBLZXJtaXQgaXMgdG8gYmUgcnVuIGluIGxvY2Fs IG1vZGUgb25seQotICAgaW4gYW4gQU5TSSB0ZXJtaW5hbCBlbnZpcm9ubWVudCwgZm9yIGV4YW1w bGUgb24gYSBkZXNrdG9wIHdvcmtzdGF0aW9uCi0gICB0aGF0IGhhcyBhbiBBTlNJIGNvbnNvbGUg ZHJpdmVyLiBUbyBzZWxlY3QgdGhpcyBvcHRpb24gaW4gcGxhY2Ugb2YKLSAgIGN1cnNlcywgZGVm aW5lIHRoZSBzeW1ib2wgTVlDVVJTRVM6Ci0KLSAgLURNWUNVUlNFUwotCi0gICBpbnN0ZWFkIG9m IENLX0NVUlNFUy4gVGhlIE1ZQ1VSU0VTIG9wdGlvbiB1c2VzIGJ1aWx0LWluIEFOU0kgKFZUMTAw KQotICAgZXNjYXBlIHNlcXVlbmNlcywgYW5kIGRlcGVuZHMgdXBvbiB5b3VyIHRlcm1pbmFsIG9y IGNvbnNvbGUgZHJpdmVyIHRvCi0gICBpbnRlcnByZXQgdGhlbSBjb3JyZWN0bHkuCi0KLSAgIElu IHNvbWUgQy1LZXJtaXQgYnVpbGRzLCB3ZSByZXBsYWNlIHByaW50ZigpIHZpYSAjZGVmaW5lIHBy aW50Zi4uLgotICAgSG93ZXZlciwgdGhpcyBjYW4gY2F1c2UgY29uZmxpY3RzIHdpdGggdGhlIFtu XWN1cnNlcyBoZWFkZXIgZmlsZXMuCi0gICBWYXJpb3VzIGhhY2tzIGFyZSByZXF1aXJlZCB0byBn ZXQgYXJvdW5kIHRoaXMgLS0gc2VlIFs1OV1ja3V0aW8uYywKLSAgIFs2MF1ja3VmaW8uYywgWzYx XWNrdXVzeC5jLCBbNjJdY2t1Y21kLmMsIGV0Yy4KLQotICAgWyBbNjNdQy1LZXJtaXQgSG9tZSBd IFsgWzY0XUtlcm1pdCBIb21lIF0KLQotICA0LiBDSEFSQUNURVIgU0VUUwotCi0gICBbIFs2NV1U b3AgXSBbIFs2Nl1Db250ZW50cyBdIFsgWzY3XU5leHQgXSBbIFs2OF1QcmV2aW91cyBdCi0KLSAg IFNpbmNlIHZlcnNpb24gNUEsIEMtS2VybWl0IGhhcyBpbmNsdWRlZCBzdXBwb3J0IGZvciBjb252 ZXJzaW9uIG9mCi0gICBjaGFyYWN0ZXIgc2V0cyBmb3IgV2VzdGVybiBFdXJvcGVhbiBsYW5ndWFn ZXMgKGkuZS4gbGFuZ3VhZ2VzIHRoYXQKLSAgIG9yaWdpbmF0ZWQgaW4gV2VzdGVybiBFdXJvcGUs IGJ1dCBhcmUgbm93IGFsc28gc3Bva2VuIGluIHRoZSBXZXN0ZXJuCi0gICBIZW1pc3BoZXJlIGFu ZCBvdGhlciBwYXJ0cyBvZiB0aGUgd29ybGQpLCB2aWEgSVNPIDg4NTktMSBMYXRpbiBBbHBoYWJl dAotICAgMSwgZm9yIEVhc3Rlcm4gRXVyb3BlYW4gbGFuZ3VhZ2VzIChJU08gTGF0aW4tMiksIEhl YnJldyAoYW5kIFlpZGRpc2gpLAotICAgR3JlZWssIGFuZCBDeXJpbGxpYy1hbHBoYWJldCBsYW5n dWFnZXMgKElTTyBMYXRpbi9DeXJpbGxpYykuIE1hbnkgZmlsZQotICAgKGxvY2FsKSBjaGFyYWN0 ZXIgc2V0cyBhcmUgc3VwcG9ydGVkOiBJU08gNjQ2IDctYml0IG5hdGlvbmFsIHNldHMsIElCTQot ICAgY29kZSBwYWdlcywgQXBwbGUsIERFQywgREcsIE5lWFQsIGV0Yy4KLQotICAgVG8gYnVpbGQg S2VybWl0IHdpdGggbm8gY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiBhdCBhbGwsIGluY2x1ZGUK LSAgIC1ETk9DU0VUUyBpbiB0aGUgQ0ZMQUdTLiBUbyBidWlsZCB3aXRoIG5vIExhdGluLTIsIGFk ZCAtRE5PTEFUSU4yLiBUbwotICAgYnVpbGQgd2l0aCBubyBDeXJpbGxpYywgYWRkIC1ETk9DWVJJ TC4gVG8gb21pdCBIZWJyZXcsIGFkZCAtRE5PSEVCUkVXLgotICAgSWYgLUROT0NTRVRTIGlzICpu b3QqIGluY2x1ZGVkLCB5b3UnbGwgYWx3YXlzIGdldCBMQVRJTjEuIFRvIGJ1aWxkIHdpdGgKLSAg IG5vIEtBTkpJIGluY2x1ZGUgLUROT0tBTkpJLiBUaGVyZSBpcyBwcmVzZW50bHkgbm8gd2F5IHRv IGluY2x1ZGUKLSAgIExhdGluLTIsIEN5cmlsbGljLCBIZWJyZXcsIG9yIEthbmppIHdpdGhvdXQg YWxzbyBpbmNsdWRpbmcgTGF0aW4tMS4KLQotICAgWzY5XVVuaWNvZGUgc3VwcG9ydCB3YXMgYWRk ZWQgaW4gQy1LZXJtaXQgNy4wLCBhbmQgaXQgYWRkcyBhIGZhaXIKLSAgIGFtb3VudCBvZiB0YWJs ZXMgYW5kIGNvZGUgKGFuZCB0aGlzIGlzIG9ubHkgYSAiTGV2ZWwgMSIgaW1wbGVtZW50YXRpb24K LSAgIC0tIGEgaGlnaGVyIGxldmVsIHdvdWxkIGFsc28gcmVxdWlyZSBidWlsZGluZyBpbiB0aGUg ZW50aXJlIFVuaWNvZGUKLSAgIGRhdGFiYXNlKS4gT24gYSBQQyB3aXRoIFJIIDUuMiBMaW51eCwg YnVpbGRpbmcgQy1LZXJtaXQgNy4wLCB3ZSBnZXQgdGhlCi0gICBmb2xsb3dpbmcgc2l6ZXM6Ci0K LSAgTk9DU0VUUyBOT1VOSUNPREUgTk9LQU5KSSAgIEJlZm9yZSAgICBBZnRlcgotICAgWyAgIF0g ICAgWyAgIF0gICAgWyAgIF0gICAgMTMyOTAxNCAgIChGdWxsKQotICAgWyAgIF0gICAgWyAgIF0g ICAgWyBYIF0gICAgMTMyNTY4NiAgIChVbmljb2RlIGJ1dCBubyBLYW5qaSkKLSAgIFsgICBdICAg IFsgWCBdICAgIFsgICBdICAgIDExNTg4MzcgICAoQWxsIGNoYXJzZXRzIGV4Y2VwdCBVbmljb2Rl KQotICAgWyBYIF0gICAgWyB4IF0gICAgWyB4IF0gICAgMTA5MDg0NSAgIChOT0NTRVRTIGltcGxp ZXMgdGhlIG90aGVyIHR3bykKLQotICAgTm90ZSwgYnkgdGhlIHdheSwgdGhhdCBOT0tBTkpJIHdp dGhvdXQgTk9VTklDT0RFIG9ubHkgcmVtb3ZlcyB0aGUKLSAgIG5vbi1Vbmljb2RlIEthbmppIHNl dHMgKFNoaWZ0LUpJUywgRVVDLUpQLCBKSVMtNywgZXRjKS4gS2FuamkgaXMgc3RpbGwKLSAgIHJl cHJlc2VudGFibGUgaW4gVUNTLTIgYW5kIFVURi04LgotCi0gICBbIFs3MF1DLUtlcm1pdCBIb21l IF0gWyBbNzFdS2VybWl0IEhvbWUgXQotCi0gIDUuIEFQQyBFWEVDVVRJT04KLQotICAgWyBbNzJd VG9wIF0gWyBbNzNdQ29udGVudHMgXSBbIFs3NF1OZXh0IF0gWyBbNzVdUHJldmlvdXMgXQotCi0g ICBUaGUgS2VybWl0IENPTk5FQ1QgYW5kIElOUFVUIGNvbW1hbmRzIGFyZSBjb2RlZCB0byBleGVj dXRlIEFwcGxpY2F0aW9uCi0gICBQcm9ncmFtIENvbW1hbmQgZXNjYXBlIHNlcXVlbmNlcyBmcm9t IHRoZSBob3N0OgotCi0gIDxFU0M+Xzx0ZXh0PjxFU0M+XAotCi0gICB3aGVyZSA8dGV4dD4gaXMg YSBDLUtlcm1pdCBjb21tYW5kLCBvciBhIGxpc3Qgb2YgQy1LZXJtaXQgY29tbWFuZHMKLSAgIHNl cGFyYXRlZCBieSBjb21tYXMsIHVwIHRvIGFib3V0IDFLIGluIGxlbmd0aC4KLQotICAgVG8gZGF0 ZSwgdGhpcyBmZWF0dXJlIGhhcyBiZWVuIGluY2x1ZGVkIGluIHRoZSBPUy8yLCBXaW5kb3dzLCBW TVMsCi0gICBPUy05LCBhbmQgVW5peCB2ZXJzaW9ucywgZm9yIHdoaWNoIHRoZSBzeW1ib2w6Ci0K LSAgQ0tfQVBDCi0KLSAgIGlzIGRlZmluZWQgYXV0b21hdGljYWxseSBpbiBbNzZdY2t1dXNyLmgu IEZvciBPUy8yLCBBUEMgaXMgZW5hYmxlZCBhdAotICAgcnVudGltZSBieSBkZWZhdWx0LCBmb3Ig VU5JWCBpdCBpcyBkaXNhYmxlZC4gSXQgaXMgY29udHJvbGxlZCBieSB0aGUKLSAgIFNFVCBURVJN SU5BTCBBUEMgY29tbWFuZC4gQ29uZmlndXJpbmcgQVBDIGNhcGFiaWxpdHkgaW50byBhIHZlcnNp b24KLSAgIHRoYXQgZ2V0cyBpdCBieSBkZWZhdWx0IChiZWNhdXNlIENLX0FQQyBpcyBkZWZpbmVk IGluIFs3N11ja3V1c3IuaCkgY2FuCi0gICBiZSBvdmVycmlkZGVuIGJ5IGluY2x1ZGluZzoKLQot ICAtRE5PQVBDCi0KLSAgIG9uIHRoZSBDQyBjb21tYW5kIGxpbmUuCi0KLSAgIEMtS2VybWl0J3Mg YXV0b2Rvd25sb2FkIGZlYXR1cmUgZGVwZW5kcyBvbiB0aGUgQVBDIGZlYXR1cmUsIHNvCi0gICBk ZWNvbmZpZ3VyaW5nIEFQQyBhbHNvIGRpc2FibGVzIGF1dG9kb3dubG9hZCAoaXQgZG9lc24ndCB1 c2UgQVBDIGVzY2FwZQotICAgc2VxdWVuY2VzLCBidXQgdXNlcyB0aGUgQVBDIHN3aXRjaGluZyBt ZWNoYW5pc20gaW50ZXJuYWxseSkuCi0KLSAgIFsgWzc4XUMtS2VybWl0IEhvbWUgXSBbIFs3OV1L ZXJtaXQgSG9tZSBdCi0KLSAgNi4gUFJPR1JBTSBTSVpFCi0KLSAgIFsgWzgwXVRvcCBdIFsgWzgx XUNvbnRlbnRzIF0gWyBbODJdTmV4dCBdIFsgWzgzXVByZXZpb3VzIF0KLQotICAgU0VDVElPTiBD T05URU5UUwotCi0gIDYuMS4gWzg0XUZlYXR1cmUgU2VsZWN0aW9uCi0gIDYuMi4gWzg1XUNoYW5n aW5nIEJ1ZmZlciBTaXplcwotICA2LjMuIFs4Nl1PdGhlciBTaXplLVJlbGF0ZWQgSXRlbXMKLSAg Ni40LiBbODddU3BhY2UvVGltZSBUcmFkZW9mZnMKLQotICAgKEFsc28gc2VlIFs4OF1TZWN0aW9u IDQpCi0KLSAgIEVhY2ggcmVsZWFzZSBvZiBDLUtlcm1pdCBpcyBsYXJnZXIgdGhhbiB0aGUgbGFz dC4gT24gc29tZSBjb21wdXRlcnMKLSAgICh1c3VhbGx5IG9sZCBvbmVzKSB0aGUgc2l6ZSBvZiB0 aGUgcHJvZ3JhbSBwcmV2ZW50cyBpdCBmcm9tIGJlaW5nCi0gICBzdWNjZXNzZnVsbHkgbGlua2Vk IGFuZCBsb2FkZWQuIE9uIHNvbWUgb3RoZXJzIChhbHNvIHVzdWFsbHkgb2xkIG9uZXMpLAotICAg aXQgb2NjdXBpZXMgc28gbXVjaCBtZW1vcnkgdGhhdCBpdCBpcyBjb25zdGFudGx5IHN3YXBwaW5n IG9yIHBhZ2luZy4gSW4KLSAgIHN1Y2ggY2FzZXMsIHlvdSBjYW4gcmVkdWNlIEMtS2VybWl0J3Mg c2l6ZSBpbiB2YXJpb3VzIHdheXMsIG91dGxpbmVkIGluCi0gICB0aGlzIHNlY3Rpb24uIFRoZSBm b2xsb3dpbmcgb3B0aW9ucyBjYW4gY3V0IGRvd24gb24gdGhlIHByb2dyYW0ncyBzaXplCi0gICBh dCBjb21waWxlIHRpbWUgYnkgcmVtb3ZpbmcgZmVhdHVyZXMgb3IgY2hhbmdpbmcgdGhlIHNpemUg b2Ygc3RvcmFnZQotICAgYXJlYXMuCi0KLSAgIElmIHlvdSBhcmUgcmVhZGluZyB0aGlzIHNlY3Rp b24gYmVjYXVzZSBhbGwgeW91IHdhbnQgaXMgYSBzbWFsbCwgZmFzdCwKLSAgIHF1aWNrLXRvLWxv YWQgS2VybWl0IGZpbGUtdHJhbnNmZXIgYXBwbGljYXRpb24gZm9yIHRoZSByZW1vdGUgZW5kIG9m Ci0gICB5b3VyIGNvbm5lY3Rpb24sIGFuZCB0aGUgcmVtb3RlIGVuZCBpcyBVbml4IGJhc2VkLCB0 YWtlIGEgbG9vayBhdAotICAgRy1LZXJtaXQ6Ci0KLSAgWzg5XWh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9na2VybWl0Lmh0bWwKLQotICA2LjEuIEZlYXR1cmUgU2VsZWN0aW9uCi0KLSAg IEZlYXR1cmVzIGNhbiBiZSBhZGRlZCBvciByZW1vdmVkIGJ5IGRlZmluaW5nIHN5bWJvbHMgb24g dGhlIENDIChDCi0gICBjb21waWxlcikgY29tbWFuZCBsaW5lLiAiLUQiIGlzIHRoZSBub3JtYWwg Q0MgZGlyZWN0aXZlIHRvIGRlZmluZSBhCi0gICBzeW1ib2wgc28sIGZvciBleGFtcGxlLCAiLURO T0RFQlVHIiBkZWZpbmVzIHRoZSBzeW1ib2wgTk9ERUJVRy4gU29tZSBDCi0gICBjb21waWxlcnMg bWlnaHQgdXNlIGRpZmZlcmVudCBzeW50YXgsIGUuZy4gIi1kIE5PREVCVUciIG9yCi0gICAiL0RF RklORT1OT0RFQlVHIi4gRm9yIEMgY29tcGlsZXJzIHRoYXQgZG8gbm90IGFjY2VwdCBjb21tYW5k LWxpbmUKLSAgIGRlZmluaXRpb25zLCB5b3UgY2FuIHB1dCB0aGUgY29ycmVzcG9uZGluZyAjZGVm aW5lIHN0YXRlbWVudHMgaW4gdGhlCi0gICBmaWxlIGNrY3N5bS5oLCBmb3IgZXhhbXBsZToKLQot ICAjZGVmaW5lIE5PREVCVUcKLQotICAgVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUgc2F2 aW5ncyBhY2hpZXZlZCB3aGVuIGJ1aWxkaW5nIEMtS2VybWl0Ci0gICA4LjAgKEJldGEuMDQpIHdp dGggc2VsZWN0ZWQgZmVhdHVyZS1kZXNlbGVjdGlvbiBzd2l0Y2hlcyBvbiBhbgotICAgSW50ZWwt YmFzZWQgUEMgd2l0aCBSZWQgSGF0IExpbnV4IDcuMCBhbmQgZ2NjIDIuOTYuIFRoZSBzaXplcyBh cmUgZm9yCi0gICBub24tc2VjdXJpdHkgYnVpbGRzLiBUaGUgZnVsbHkgY29uZmlndXJlZCBub24t c2VjdXJpdHkgYnVpbGQgaXMgMjEyNzQwOAotICAgYnl0ZXMuCi0KLSAgIE9wdGlvbiAgICAgIFNp emUgICAgU2F2aW5ncyBFZmZlY3QKLSAgIE5PSUNQICAgICAgICA1NDUzMzAgICA3NC40JSBObyBJ bnRlcmFjdGl2ZSBDb21tYW5kIFBhcnNlciAoY29tbWFuZC1saW5lIG9ubHkpCi0gICBOT0xPQ0FM ICAgICAxNTM5OTk0ICAgMjcuNiUgTm8gbWFraW5nIGNvbm5lY3Rpb25zLgotICAgTk9YRkVSICAg ICAgMTU1MTEwOCAgIDI3LjElIE5vIGZpbGUgdHJhbnNmZXIuCi0gICBJS1NET05MWSAgICAxNTY2 NjA4ICAgMjYuNCUgSW50ZXJuZXQgS2VybWl0IFNlcnZlciBvbmx5LgotICAgTk9DU0VUUyAgICAg MTc1MDA5NyAgIDE3LjclIE5vIGNoYXJhY3Rlci1zZXQgY29udmVyc2lvbi4KLSAgIE5PU1BMICAg ICAgIDE4MDAyOTMgICAxNS40JSBObyBTY3JpcHQgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UuCi0gICBO T05FVCAgICAgICAxODA4NTc1ICAgMTUuMCUgTm8gbWFraW5nIG5ldHdvcmsgY29ubmVjdGlvbnMu Ci0gICBOT1VOSUNPREUgICAxODM0NDI2ICAgMTMuOCUgTm8gVW5pY29kZSBjaGFyYWN0ZXItc2V0 IGNvbnZlcnNpb24uCi0gICBOT0hFTFAgICAgICAxODM3ODc3ICAgMTMuNiUgTm8gYnVpbHQtaW4g aGVscCB0ZXh0LgotICAgTk9ERUJVRyAgICAgMTg5MTY2OSAgIDExLjElIE5vIGRlYnVnIGxvZy4K LSAgIE5PRlJJTExTICAgIDE5MTg5NjYgICAgOS44JSBObyAiZnJpbGxzIi4KLSAgIE5PRlRQICAg ICAgIDE5NzI0OTYgICAgNy4zJSBObyBGVFAgY2xpZW50LgotICAgTk9ESUFMICAgICAgMTk4NDQ4 OCAgICA2LjclIE5vIGF1dG9tYXRpYyBtb2RlbSBkaWFsaW5nLgotICAgTk9QVVNIICAgICAgMjA3 MDE4NCAgICAyLjclIE5vIHNoZWxsIGFjY2VzcywgcnVubmluZyBleHRlcm5hbCBwcm9ncmFtcywg ZXRjLgotICAgTk9JS1NEICAgICAgMjA3NDEyOSAgICAyLjUlIE5vIEludGVybmV0IEtlcm1pdCBT ZXJ2ZXIgY2FwYWJpbGl0eS4KLSAgIE5PSFRUUCAgICAgIDIwODI2MTAgICAgMi4xJSBObyBIVFRQ IGNsaWVudC4KLSAgIE5PRkxPQVQgICAgIDIwOTEzMzIgICAgMS43JSBObyBmbG9hdGluZy1wb2lu dCBhcml0aG1ldGljLgotICAgTk9DSEFOTkVMSU8gMjA5NTk3OCAgICAxLjUlIE5vIEZPUEVOL0ZS RUFEL0ZXUklURS9GQ0xPU0UsIGV0Yy4KLSAgIE1JTklESUFMICAgIDIwOTgwMzUgICAgMS40JSBO byBidWlsdC1pbiBzdXBwb3J0IGZvciBtYW55IGtpbmRzIG9mIG1vZGVtcy4KLSAgIE5PU0VSVkVS ICAgIDIwOTg5ODcgICAgMS4zJSBObyBzZXJ2ZXIgbW9kZS4KLSAgIE5PU0VYUCAgICAgIDIxMDU4 OTggICAgMS4wJSBObyBTLUV4cHJlc3Npb25zLgotICAgTk9QVFkgICAgICAgMjExNzc0MyAgICAw LjUlIE5vIHBzZXVkb3Rlcm1pbmFsIHN1cHBvcnQuCi0gICBOT1JMT0dJTiAgICAyMTIxMDg5ICAg IDAuMyUgTm8gUkxPR0lOIGNvbm5lY3Rpb25zLgotICAgTk9PTERNT0RFTVMgMjEyNDAzOCAgICAw LjIlIE5vIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG9sZCBraW5kcyBvZiBtb2RlbXMuCi0gICBOT1NT SCAgICAgICAyMTI1Njk2ICAgIDAuMSUgTm8gU1NIIGNvbW1hbmQuCi0KLSAgIEFuZCBoZXJlIGFy ZSBhIGZldyBjb21iaW5hdGlvbnMKLQotICAgT3B0aW9ucyBTaXplIFNhdmluZ3MgRWZmZWN0Ci0g ICBOT0RFQlVHIE5PSUNQIE5PQ1NFVFMgTk9MT0NBTCAyODE2NDEgODYuNyUgTm8gZGVidWcgbG9n LCBwYXJzZXIsCi0gICBjaGFyYWN0ZXIgc2V0cywgb3IgbWFraW5nIGNvbm5lY3Rpb25zLgotICAg Tk9JQ1AgTk9DU0VUUyBOT0xPQ0FMIDM3NjQ2OCA4Mi4zJSBObyBwYXJzZXIsIGNoYXJhY3RlciBz ZXRzLCBvciBtYWtpbmcKLSAgIGNvbm5lY3Rpb25zLgotICAgTk9JQ1AgTk9DU0VUUyBOT05FVCA0 Mjc1MTAgNzkuOSUgTm8gcGFyc2VyLCBjaGFyYWN0ZXIgc2V0cywgb3IgbmV0d29yawotICAgY29u bmVjdGlvbnMuCi0gICBOT1NQTCBOT0NTRVRTIDE0MjM3ODQgMzMuMSUgTm8gc2NyaXB0IGxhbmd1 YWdlLCBvciBjaGFyYWN0ZXIgc2V0cy4KLQotICAgLUROT0ZSSUxMUyByZW1vdmVzIHZhcmlvdXMg Y29tbWFuZCBzeW5vbnltczsgdGhlIGZvbGxvd2luZyB0b3AtbGV2ZWwKLSAgIGNvbW1hbmRzOiBD TEVBUiwgREVMRVRFLCBESVNBQkxFLCBFTkFCTEUsIEdFVE9LLCBNQUlMLCBSRU5BTUUsIFRZUEUs Ci0gICBXSE87IGFuZCB0aGUgZm9sbG93aW5nIFJFTU9URSBjb21tYW5kczogS0VSTUlULCBMT0dJ TiwgTE9HT1VULCBQUklOVCwKLSAgIFRZUEUsIFdITy4KLQotICA2LjIuIENoYW5naW5nIEJ1ZmZl ciBTaXplcwotCi0gICBNb3N0IG1vZGVybiBjb21wdXRlcnMgaGF2ZSBzbyBtdWNoIG1lbW9yeSB0 aGF0IChhKSB0aGVyZSBpcyBubyBuZWVkIHRvCi0gICBzY3JpbXAgYW5kIHNhdmUsIGFuZCAoYikg Qy1LZXJtaXQsIGV2ZW4gd2hlbiBmdWxseSBjb25maWd1cmVkLCBpcwotICAgcmVsYXRpdmVseSBz bWFsbCBieSB0b2RheSdzIHN0YW5kYXJkcy4KLQotICAgVHdvIG1ham9yIGZhY3RvcnMgYWZmZWN0 IEtlcm1pdCdzIHNpemU6IGZlYXR1cmUgc2VsZWN0aW9uIGFuZCBidWZmZXIKLSAgIHNpemVzLiBC dWZmZXIgc2l6ZXMgYWZmZWN0IHN1Y2ggdGhpbmdzIGFzIHRoZSBtYXhpbXVtIGxlbmd0aCBmb3Ig YQotICAgS2VybWl0IHBhY2tldCwgdGhlIG1heGltdW0gbGVuZ3RoIGZvciBhIGNvbW1hbmQsIGZv ciBhIG1hY3JvLCBmb3IgdGhlCi0gICBuYW1lIG9mIGEgbWFjcm8sIGV0Yy4gQmlnIGJ1ZmZlciBz aXplcyBhcmUgdXNlZCB3aGVuIHRoZSBmb2xsb3dpbmcKLSAgIHN5bWJvbCBpcyBkZWZpbmVkOgot Ci0gIEJJR0JVRk9LCi0KLSAgIGFzIGl0IGlzIGJ5IGRlZmF1bHQgZm9yIG1vc3QgbW9kZXJuIHBs YXRmb3JtcyAoTGludXgsIEFJWCA0IGFuZCA1LAotICAgSFAtVVggMTAgYW5kIDExLCBTb2xhcmlz LCBldGMpIGluIFs5MF1ja3V1c3IuaC4gSWYgeW91ciBidWlsZCBkb2VzIG5vdAotICAgZ2V0IGJp ZyBidWZmZXJzIGF1dG9tYXRpY2FsbHkgKFNIT1cgRkVBVFVSRVMgdGVsbHMgeW91KSwgeW91IGNh bgotICAgaW5jbHVkZSB0aGVtIGJ5IHJlYnVpbGRpbmcgd2l0aCBCSUdCVUZPSyBkZWZpbmVkOyBl LmcuIGluIFVuaXg6Ci0KLSAgbWFrZSB4eHh4IEtGTEFHUz0tREJJR0JVRk9LCi0KLSAgIHdoZXJl IHh4eHggaXMgdGhlIG1ha2VmaWxlIHRhcmdldC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHlvdSB3 YW50IHRvCi0gICBidWlsZCB3aXRob3V0IGJpZyBidWZmZXJzIHdoZW4gdGhleSBub3JtYWxseSB3 b3VsZCBiZSBzZWxlY3RlZCwgdXNlOgotCi0gIG1ha2UgeHh4eCBLRkxBR1M9LUROT0JJR0JVRgot Ci0gICBUaGVyZSBhcmUgb3B0aW9ucyB0byBjb250cm9sIEtlcm1pdCdzIHBhY2tldCBidWZmZXIg YWxsb2NhdGlvbnMuIFRoZQotICAgZm9sbG93aW5nIHN5bWJvbHMgYXJlIGRlZmluZWQgaW4gWzkx XWNrY2tlci5oIGluIHN1Y2ggYSB3YXkgdGhhdCB5b3UKLSAgIGNhbiBvdmVycmlkZSB0aGVtIGJ5 IHJlZGVmaW5pbmcgdGhlbSBpbiBDRkxBR1M6Ci0KLSAgLURNQVhTUD14eHh4IC0gTWF4aW11bSBz ZW5kLXBhY2tldCBsZW5ndGguCi0gIC1ETUFYUlA9eHh4eCAtIE1heGltdW0gcmVjZWl2ZS1wYWNr ZXQgbGVuZ3RoLgotICAtRFNCU0laPXh4eHggLSBUb3RhbCBhbGxvY2F0aW9uIGZvciBzZW5kLXBh Y2tldCBidWZmZXJzLgotICAtRFJCU0laPXh4eHggLSBUb3RhbCBhbGxvY2F0aW9uIGZvciByZWNl aXZlLXBhY2tldCBidWZmZXJzLgotCi0gICBUaGUgZGVmYXVsdHMgZGVwZW5kIG9uIHRoZSBwbGF0 Zm9ybS4KLQotICAgVXNpbmcgZHluYW1pYyBhbGxvY2F0aW9uICgtRERZTkFNSUMpIHJlZHVjZXMg c3RvcmFnZSByZXF1aXJlbWVudHMgZm9yCi0gICB0aGUgZXhlY3V0YWJsZSBwcm9ncmFtIG9uIGRp c2ssIGFuZCBhbGxvd3MgbW9yZSBhbmQgYmlnZ2VyIHBhY2tldHMgYXQKLSAgIHJ1bnRpbWUuIFRo aXMgaGFzIHByb3ZlbiBzYWZlIG92ZXIgdGhlIHllYXJzLCBhbmQgbm93IG1vc3QgYnVpbGRzIChl LmcuCi0gICBhbGwgVW5peCwgVk1TLCBXaW5kb3dzLCBhbmQgT1MvMiBvbmVzKSB1c2UgZHluYW1p YyBtZW1vcnkgYWxsb2NhdGlvbiBieQotICAgZGVmYXVsdC4gSWYgaXQgY2F1c2VzIHRyb3VibGUs IGhvd2V2ZXIsIHRoZW4gb21pdCB0aGUgLUREWU5BTUlDIG9wdGlvbgotICAgZnJvbSBDRkxBR1Ms IG9yIGFkZCAtRE5PRFlOQU1JQy4KLQotICA2LjMuIE90aGVyIFNpemUtUmVsYXRlZCBJdGVtcwot Ci0gICBUbyBtYWtlIEtlcm1pdCBjb21waWxlIGFuZCBsb2FkIHN1Y2Nlc3NmdWxseSwgeW91IG1p Z2h0IGhhdmUgdG8gY2hhbmdlCi0gICB5b3VyIGJ1aWxkIHByb2NlZHVyZSB0bzoKLQotICAgIGEu IFJlcXVlc3QgYSBsYXJnZXIgKCJsYXJnZSIgb3IgImh1Z2UiKSBjb21waWxhdGlvbiAvIGNvZGUt Z2VuZXJhdGlvbgotICAgICAgIG1vZGVsLiBUaGlzIGlzIG5lZWRlZCBmb3IgMTYtYml0IFBDLWJh c2VkIFVOSVggdmVyc2lvbnMgKG1vc3Qgb3IKLSAgICAgICBhbGwgb2Ygd2hpY2ggZmFpbCB0byBi dWlsZCBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyIGFueXdheSkuIFRoaXMgaXMKLSAgICAgICB0eXBp Y2FsbHkgZG9uZSB3aXRoIGEgLU0gYW5kL29yIC1GIHN3aXRjaCAoc2VlIHlvdXIgY2MgbWFudWFs IG9yCi0gICAgICAgbWFuIHBhZ2UgZm9yIGRldGFpbHMpLgotICAgIGIuIFNvbWUgZGV2ZWxvcG1l bnQgc3lzdGVtcyBzdXBwb3J0IG92ZXJsYXlzLiBJZiB0aGUgcHJvZ3JhbSBpcyB0b28KLSAgICAg ICBiaWcgdG8gYmUgYnVpbHQgYXMgaXMsIGNoZWNrIHlvdXIgbG9hZGVyIG1hbnVhbCAoIm1hbiBs ZCIpIHRvIHNlZQotICAgICAgIGlmIGFuIG92ZXJsYXkgZmVhdHVyZSBpcyBhdmFpbGFibGUuIFNl ZSB0aGUgMi4xMC8yLjExIEJTRCBleGFtcGxlCi0gICAgICAgaW4gdGhlIFVOSVggbWFrZWZpbGUu IChBY3R1YWxseSwgYXMgb2YgdmVyc2lvbiA3LjAsIEMtS2VybWl0IGlzIHRvbwotICAgICAgIGJp ZyB0byBidWlsZCwgcGVyaW9kLCBldmVuIHdpdGggb3ZlcmxheXMsIG9uIDIueHggQlNEKS4KLSAg ICBjLiBTaW1pbGFybHksIHNvbWUgc21hbGwgYW5kL29yIHNlZ21lbnQtYmFzZWQgYXJjaGl0ZWN0 dXJlcyBzdXBwb3J0Ci0gICAgICAgImNvZGUgbWFwcGluZyIsIHdoaWNoIGlzIHNpbWlsYXIgdG8g b3ZlcmxheXMgKFBEUDExLWJhc2VkIFZFTklYCi0gICAgICAgMS4wLCBjaXJjYSAxOTg0LCB3YXMg YW4gZXhhbXBsZSkuIFNlZSB0aGUgbGlua2VyIGRvY3VtZW50YXRpb24gb24KLSAgICAgICB0aGUg YWZmZWN0ZWQgcGxhdGZvcm0uCi0KLSAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gcmVkdWNlIHRo ZSBzaXplIG9mIHRoZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZQotICAgaW4gc2V2ZXJhbCBvdGhl ciB3YXlzOgotCi0gICAgYS4gSW5jbHVkZSB0aGUgLU8gKG9wdGltaXplKSBjb21waWxlciBzd2l0 Y2ggaWYgaXQgaXNuJ3QgYWxyZWFkeQotICAgICAgIGluY2x1ZGVkIGluIHlvdXIgIm1ha2UiIGVu dHJ5IChhbmQgaWYgaXQgd29ya3MhKS4gSWYgeW91ciBjb21waWxlcgotICAgICAgIHN1cHBvcnRz IGhpZ2hlciBsZXZlbHMgb2Ygb3B0aW1pemF0aW9uIChlLmcuIC1PMiBvciBoaWdoZXIgbnVtYmVy LAotICAgICAgIC1Pbm9saW1pdCAoSFAtVVgpLCBldGMpLCB0cnkgdGhlbTsgdGhlIGdyZWF0ZXIg dGhlIGxldmVsIG9mCi0gICAgICAgb3B0aW1pemF0aW9uLCB0aGUgbG9uZ2VyIHRoZSBjb21waWxh dGlvbiBhbmQgbW9yZSBsaWtlbHkgdGhlCi0gICAgICAgY29tcGlsZXIgd2lsbCBydW4gb3V0IG9m IG1lbW9yeS4gVGhlIGxhdHRlciBldmVudHVhbGl0eSwgc29tZQotICAgICAgIGNvbXBpbGVycyBh bHNvIHByb3ZpZGUgY29tbWFuZC1saW5lIG9wdGlvbnMgdG8gYWxsb2NhdGUgbW9yZSBtZW1vcnkK LSAgICAgICBmb3IgdGhlIG9wdGltaXplciwgbGlrZSAiLU9saW1pdCBudW1iZXIiIGluIFVsdHJp eC4KLSAgICBiLiBJZiB5b3VyIHBsYXRmb3JtIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMsIGNo YW5nZSB0aGUgbWFrZSBlbnRyeQotICAgICAgIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgZmVh dHVyZS4gVGhlIHdheSB0byBkbyB0aGlzIGlzLCBvZgotICAgICAgIGNvdXJzZSwgcGxhdGZvcm0g ZGVwZW5kZW50OyBzZWUgdGhlIE5lWFQgbWFrZWZpbGUgdGFyZ2V0IGZvciBhbgotICAgICAgIGV4 YW1wbGUuIHNvbWUgcGxhdGZvcm1zIChsaWtlIFNvbGFyaXMpIGRvIGl0IGF1dG9tYXRpY2FsbHkg YW5kIGdpdmUKLSAgICAgICB5b3Ugbm8gY2hvaWNlLiBCdXQgd2F0Y2ggb3V0OiBleGVjdXRhYmxl cyBsaW5rZWQgd2l0aCBzaGFyZWQKLSAgICAgICBsaWJyYXJpZXMgYXJlIGxlc3MgcG9ydGFibGUg dGhhbiBzdGF0aWNhbGx5IGxpbmtlZCBleGVjdXRhYmxlcy4KLSAgICBjLiBTdHJpcCB0aGUgcHJv Z3JhbSBpbWFnZSBhZnRlciBidWlsZGluZyAoIm1hbiBzdHJpcCIgZm9yIGZ1cnRoZXIKLSAgICAg ICBpbmZvKSwgb3IgYWRkIC1zIHRvIHRoZSBMTktGTEFHUyAoVU5JWCBvbmx5KS4gVGhpcyBzdHJp cHMgdGhlCi0gICAgICAgcHJvZ3JhbSBvZiBpdHMgc3ltYm9sIHRhYmxlIGFuZCByZWxvY2F0aW9u IGluZm9ybWF0aW9uLgotICAgIGQuIE1vdmUgY2hhcmFjdGVyIHN0cmluZ3MgaW50byBhIHNlcGFy YXRlIGZpbGUuIFNlZSB0aGUgMi4xMSBCU0QKLSAgICAgICB0YXJnZXQgZm9yIGFuIGV4YW1wbGUu Ci0KLSAgNi40LiBTcGFjZS9UaW1lIFRyYWRlb2ZmcwotCi0gICBUaGVyZSBhcmUgbW9yZSB0aGFu IDYwMDAgZGVidWcoKSBzdGF0ZW1lbnRzIGluIHRoZSBwcm9ncmFtLiBJZiB5b3Ugd2FudAotICAg dG8gc2F2ZSBib3RoIHNwYWNlIChwcm9ncmFtIHNpemUpIGFuZCB0aW1lIChwcm9ncmFtIGV4ZWN1 dGlvbiB0aW1lKSwKLSAgIGluY2x1ZGUgLUROT0RFQlVHIGluIHRoZSBjb21waWxhdGlvbi4gSWYg eW91IHdhbnQgdG8gaW5jbHVkZSBkZWJ1Z2dpbmcKLSAgIGZvciB0cmFja2luZyBkb3duIHByb2Js ZW1zLCBvbWl0IC1ETk9ERUJVRyBmcm9tIHRoZSBtYWtlIGVudHJ5LiBCdXQKLSAgIHdoZW4geW91 IGluY2x1ZGUgZGVidWdnaW5nLCB5b3UgaGF2ZSB0d28gY2hvaWNlcyBmb3IgaG93IGl0J3MgZG9u ZS4gT25lCi0gICBkZWZpbml0aW9uIGRlZmluZXMgZGVidWcoKSB0byBiZSBhIGZ1bmN0aW9uIGNh bGw7IHRoaXMgaXMgY2hlYXAgaW4KLSAgIHNwYWNlIGJ1dCBleHBlbnNpdmUgaW4gZXhlY3V0aW9u LiBUaGUgb3RoZXIgZGVmaW5lcyBkZWJ1ZyBhcyAiaWYKLSAgIChkZWJsb2cpIiBhbmQgdGhlbiB0 aGUgZnVuY3Rpb24gY2FsbCwgdG8gb21pdCB0aGUgZnVuY3Rpb24gY2FsbAotICAgb3ZlcmhlYWQg d2hlbiB0aGUgZGVidWcgbG9nIGlzIG5vdCBhY3RpdmUuIEJ1dCB0aGlzIGFkZHMgYSBsb3Qgb2Yg c3BhY2UKLSAgIHRvIHRoZSBwcm9ncmFtLiBCb3RoIG1ldGhvZHMgd29yaywgdGFrZSB5b3VyIGNo b2ljZTsgSUZERUJVRyBpcwotICAgcHJlZmVycmVkIGlmIG1lbW9yeSBpcyBub3QgYSBjb25zdHJh aW50IGJ1dCB0aGUgY29tcHV0ZXIgaXMgbGlrZWx5IHRvCi0gICBiZSBzbG93LiBUaGUgZmlyc3Qg bWV0aG9kIGlzIHRoZSBkZWZhdWx0LCBpLmUuIGlmIG5vdGhpbmcgaXMgZG9uZSB0bwotICAgdGhl IENGTEFHUyBvciBpbiBbOTJdY2tjZGViLmggKGJ1dCBpbiBzb21lIGNhc2VzLCBlLmcuIFZNUywg aXQgaXMpLiBUbwotICAgc2VsZWN0IHRoZSBzZWNvbmQgbWV0aG9kLCBpbmNsdWRlIC1ESUZERUJV RyBpbiB0aGUgY29tcGlsYXRpb24gKGFuZAotICAgZG9uJ3QgaW5jbHVkZSAtRE5PREVCVUcpLgot Ci0gICBbIFs5M11DLUtlcm1pdCBIb21lIF0gWyBbOTRdS2VybWl0IEhvbWUgXQotCi0gIDcuIE1P REVNIERJQUxJTkcKLQotICAgWyBbOTVdVG9wIF0gWyBbOTZdQ29udGVudHMgXSBbIFs5N11OZXh0 IF0gWyBbOThdUHJldmlvdXMgXQotCi0gICAtRE5PRElBTCByZW1vdmVzIGF1dG9tYXRpYyBtb2Rl bSBkaWFsaW5nIGNvbXBsZXRlbHksIGluY2x1ZGluZyB0aGUKLSAgIGVudGlyZSBbOTldY2t1ZGlh LmMgbW9kdWxlLCBwbHVzIGFsbCBjb21tYW5kcyB0aGF0IHJlZmVyIHRvIGRpYWxpbmcgaW4KLSAg IHRoZSB2YXJpb3VzIGNrdXVzKi5jIG1vZHVsZXMuCi0KLSAgIC1ETUlOSURJQUwgbGVhdmVzIHRo ZSBESUFMIGFuZCByZWxhdGVkIGNvbW1hbmRzIChTRVQvU0hPVyBNT0RFTSwKLSAgIFNFVC9TSE9X IERJQUwpIGludGFjdCwgYnV0IHJlbW92ZXMgc3VwcG9ydCBmb3IgYWxsIHR5cGVzIG9mIG1vZGVt cwotICAgZXhjZXB0IENDSVRULCBIYXllcywgVW5rbm93biwgVXNlci1kZWZpbmVkLCBHZW5lcmlj LWhpZ2gtc3BlZWQsIGFuZAotICAgTm9uZSAoPSBEaXJlY3QpLiBUaGUgTUlOSURJQUwgb3B0aW9u IGN1dHMgdGhlIHNpemUgb2YgdGhlIGRpYWwgbW9kdWxlCi0gICBhcHByb3hpbWF0ZWx5IGluIGhh bGYuIFVzZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBvbmx5IEhheWVzIG9yIENDSVRUCi0gICBt b2RlbXMgYW5kIGRvbid0IHdhbnQgdG8gY2FycnkgdGhlIGJhZ2dhZ2UgZm9yIHRoZSBvdGhlciB0 eXBlcy4KLQotICAgQSBjb21wcm9taXNlIGJldHdlZW4gZnVsbCBkaWFsZXIgc3VwcG9ydCBhbmQg TUlOSURJQUwgaXMgb2J0YWluZWQgYnkKLSAgIHJlbW92aW5nIHN1cHBvcnQgZm9yICJvbGQiIG1v ZGVtcyAtLSBhbGwgdGhlIHN0cmFuZ2Ugbm9uLUhheWVzCi0gICBjb21wYXRpYmxlIDEyMDAgYW5k IDI0MDAgYnBzIG1vZGVtcyB0aGF0IEMtS2VybWl0IGhhcyBiZWVuIGNhcnJ5aW5nCi0gICBhcm91 bmQgc2luY2UgMTk4NSBvciBzby4gVG8gcmVtb3ZlIHN1cHBvcnQgZm9yIHRoZXNlIG1vZGVtcywg YWRkCi0gICAtRE5PT0xETU9ERU1TIHRvIENGTEFHUyBhdCBjb21waWxhdGlvbiB0aW1lLgotCi0g ICBGaW5hbGx5LCBpZiB5b3Uga2VlcCBzdXBwb3J0IGZvciBvbGQgbW9kZW1zLCB5b3Ugd2lsbCBu b3RpY2UgdGhhdCB0aGVpcgotICAgbmFtZXMgYXBwZWFyIG9uIHRoZSAic2V0IG1vZGVtID8iIG1l bnUuIFRoYXQncyBiZWNhdXNlIHRoZWlyIG5hbWVzIGFyZSwKLSAgIGJ5IGRlZmF1bHQsICJ2aXNp YmxlIi4gQnV0IHRoZSBsaXN0IGlzIGNvbmZ1c2luZyB0byB0aGUgeW91bmdlcgotICAgZ2VuZXJh dGlvbiwgd2hvIGhhdmUgb25seSBoZWFyZCBvZiBtb2RlbXMgZnJvbSB0aGUgVi4zMmJpcy1hbmQt bGF0ZXIKLSAgIGVyYS4gSWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2Ugb2xkIG1vZGVtcywg YnV0IGRvbid0IHdhbnQgdGhlaXIKLSAgIG5hbWVzIGNsdXR0ZXJpbmcgdXAgbWVudXMsIGFkZCB0 aGlzIHRvIENGTEFHUzoKLQotICAtRE1fT0xEPTEKLQotICAgWyBbMTAwXUMtS2VybWl0IEhvbWUg XSBbIFsxMDFdS2VybWl0IEhvbWUgXQotCi0gIDguIE5FVFdPUksgU1VQUE9SVAotCi0gICBbIFsx MDJdVG9wIF0gWyBbMTAzXUNvbnRlbnRzIF0gWyBbMTA0XU5leHQgXSBbIFsxMDVdUHJldmlvdXMg XQotCi0gICBTRUNUSU9OIENPTlRFTlRTCi0KLSAgOC4xLiBbMTA2XVRDUC9JUAotICA4LjIuIFsx MDddWC4yNQotICA4LjMuIFsxMDhdT3RoZXIgTmV0d29ya3MKLQotICAgQy1LZXJtaXQgc3VwcG9y dHMgbm90IG9ubHkgc2VyaWFsLXBvcnQgYW5kIG1vZGVtIGNvbm5lY3Rpb25zLCBidXQgYWxzbwot ICAgVENQL0lQIGFuZCBYLjI1IG5ldHdvcmsgY29ubmVjdGlvbnMuIFNvbWUgdmVyc2lvbnMgc3Vw cG9ydCBvdGhlcgotICAgbmV0d29yayB0eXBlcyB0b28gbGlrZSBERUNuZXQsIExBVCwgTkVUQklP UywgZXRjLiBJZiB5b3UgZGVmaW5lIHRoZQotICAgZm9sbG93aW5nIHN5bWJvbDoKLQotICBOT05F VAotCi0gICB0aGVuIGFsbCBuZXR3b3JrIHN1cHBvcnQgaXMgY29tcGlsZWQgYXdheS4KLQotICA4 LjEuIFRDUC9JUAotCi0gICBTVUJTRUNUSU9OIENPTlRFTlRTCi0KLSAgOC4xLjEuIFsxMDldRmly ZXdhbGxzCi0gIDguMS4yLiBbMTEwXUNvbXBpbGF0aW9uIGFuZCBMaW5raW5nIFByb2JsZW1zCi0g IDguMS4zLiBbMTExXUVuYWJsaW5nIEhvc3QgQWRkcmVzcyBMaXN0cwotICA4LjEuNC4gWzExMl1F bmFibGluZyBUZWxuZXQgTkFXUwotICA4LjEuNS4gWzExM11FbmFibGluZyBJbmNvbWluZyBUQ1Av SVAgQ29ubmVjdGlvbnMKLSAgOC4xLjYuIFsxMTRdRGlzYWJsaW5nIFNFVCBUQ1AgT3B0aW9ucwot Ci0gICBDLUtlcm1pdCdzIFRDUC9JUCBmZWF0dXJlcyByZXF1aXJlIHRoZSBCZXJrZWxleSBzb2Nr ZXRzIGxpYnJhcnkgb3IKLSAgIGVxdWl2YWxlbnQsIGdlbmVyYWxseSBhdmFpbGFibGUgb24gYW55 IFVuaXggc3lzdGVtLCBhcyB3ZWxsIGFzIGluCi0gICBXaW5kb3dzIDl4L05ULCBPUy8yLCBWTVMs IEFPUy9WUywgVk9TLCBldGMuIFRoZSBUQ1AvSVAgc3VwcG9ydCBpbmNsdWRlcwotICAgYnVpbHQt aW4gVEVMTkVULCBGVFAsIGFuZCBIVFRQIHByb3RvY29sLiBUbyBzZWxlY3QgVENQL0lQIHN1cHBv cnQsCi0gICBpbmNsdWRlIC1EVENQU09DS0VUIGluIHlvdXIgbWFrZWZpbGUgdGFyZ2V0J3MgQ0ZM QUdTLCBvciAoaW4gVk1TKSB0aGUKLSAgIGFwcHJvcHJpYXRlIHZhcmlhbnQgKGUuZy4gLURXT0xM T05HT05HLCAtRE1VTFRJTkVULCAtREVYQ0VMQU4sCi0gICAtRFdJTlRDUCwgZXRjKS4KLQotICAg VGhlIFZNUyBhbmQvb3IgZWFybHkgVW5peCB0aGlyZC1wYXJ0eSBUQ1AvSVAgcHJvZHVjdHMgYXJl IG9mdGVuCi0gICBpbmNvbXBhdGlibGUgd2l0aCBlYWNoIG90aGVyLCBhbmQgc29tZXRpbWVzIHdp dGggZGlmZmVyZW50IHZlcnNpb25zIG9mCi0gICB0aGVtc2VsdmVzLiBGb3IgZXhhbXBsZSwgV29s bG9uZ29uZyByZXBvcnRlZGx5IHB1dCBoZWFkZXIgZmlsZXMgaW4KLSAgIGRpZmZlcmVudCBkaXJl Y3RvcmllcyBmb3IgZGlmZmVyZW50IFVOSVggdmVyc2lvbnM6Ci0KLSAgICAgKiBpbi5oIGNhbiBi ZSBpbiBlaXRoZXIgL3Vzci9pbmNsdWRlL3N5cyBvciAvdXNlci9pbmNsdWRlL25ldGluZXQuCi0g ICAgICogdGVsbmV0LmggY2FuIGJlIGluIGVpdGhlciAvdXNyL2luY2x1ZGUvYXJwYSBvcgotICAg ICAgIC91c2VyL2luY2x1ZGUvbmV0aW5ldC4KLSAgICAgKiBpbmV0LmggY2FuIGJlIGluIGVpdGhl ciAvdXNyL2luY2x1ZGUvYXJwYSBvciAvdXNlci9pbmNsdWRlL3N5cy4KLQotICAgSW4gY2FzZXMg bGlrZSB0aGlzLCB1c2UgdGhlIC1JIGNjIGNvbW1hbmQtbGluZSBvcHRpb24gd2hlbiBwb3NzaWJs ZTsKLSAgIG90aGVyd2lzZSBpdCdzIGJldHRlciB0byBtYWtlIGxpbmtzIGluIHRoZSBmaWxlIHN5 c3RlbSB0aGFuIGl0IGlzIHRvCi0gICBoYWNrIHVwIHRoZSBDLUtlcm1pdCBzb3VyY2UgY29kZS4g U3VwcG9zZSwgZm9yIGV4YW1wbGUsIEtlcm1pdCBpcwotICAgbG9va2luZyBmb3IgdGVsbmV0Lmgg aW4gL3Vzci9pbmNsdWRlL2FycGEsIGJ1dCBvbiB5b3VyIGNvbXB1dGVyIGl0IGlzCi0gICBpbiAv dXNyL2luY2x1ZGUvbmV0aW5ldC4gRG8gdGhpcyAoYXMgcm9vdCwgb3IgZ2V0IHRoZSBzeXN0ZW0K LSAgIGFkbWluaXN0cmF0b3IgdG8gZG8gaXQpOgotCi0gIGNkIC91c3IvaW5jbHVkZS9hcnBhCi0g IGxuIC91c3IvaW5jbHVkZS9uZXRpbmV0L3RlbG5ldC5oIHRlbG5ldC5oCi0KLSAgICgibWFuIGxu IiBmb3IgZGV0YWlscyBhYm91dCBsaW5rcy4pCi0KLSAgIFRoZSBuZXR3b3JrIHN1cHBvcnQgZm9y IFRDUC9JUCBhbmQgWC4yNSBpcyBpbiB0aGUgc291cmNlIGZpbGVzCi0gICBbMTE1XWNrY25ldC5o LCBbMTE2XWNrY3RlbC5jLCBbMTE3XWNrY3RlbC5jLCBbMTE4XWNrY3RlbC5oLAotICAgWzExOV1j a2NmdHAuYywgd2l0aCBtaXNjZWxsYW5lb3VzIFNIT1cgY29tbWFuZHMsIGV0YywgaW4gdGhlIHZh cmlvdXMKLSAgIGNrdXVzKi5jIG1vZHVsZXMsIHBsdXMgY29kZSBpbiB0aGUgY2sqY29uLmMgb3Ig Y2t1Y25zLmMgKENPTk5FQ1QKLSAgIGNvbW1hbmQpIGFuZCBzZXZlcmFsIG90aGVyIG1vZHVsZXMg dG8gZGV0ZWN0IFRFTE5FVCBuZWdvdGlhdGlvbnMsIGV0Yy4KLQotICAgV2l0aGluIHRoZSBUQ1BT T0NLRVQgY29kZSwgc29tZSBzb2NrZXQtbGV2ZWwgY29udHJvbHMgYXJlIGluY2x1ZGVkIGlmCi0g ICBUQ1BTT0NLRVQgaXMgZGVmaW5lZCBpbiB0aGUgQy1LZXJtaXQgQ0ZMQUdTIGFuZCBTT0xfU09D S0VUIGlzIGRlZmluZWQKLSAgIGluIGluIHRoZSBzeXN0ZW0ncyBUQ1AtcmVsYXRlZCBoZWFkZXIg ZmlsZXMsIHN1Y2ggYXMgPHN5cy9zb2NrZXQuaD4uCi0gICBUaGVzZSBhcmU6Ci0KLSAgU0VUIFRD UCBLRUVQQUxJVkUKLSAgU0VUIFRDUCBMSU5HRVIKLSAgU0VUIFRDUCBSRUNWQlVGCi0gIFNFVCBU Q1AgU0VOREJVRgotCi0gICBJbiBhZGRpdGlvbiwgaWYgVENQX05PREVMQVkgaXMgZGVmaW5lZCwg dGhlIGZvbGxvd2luZyBjb21tYW5kIGlzIGFsc28KLSAgIGVuYWJsZWQ6Ci0KLSAgU0VUIFRDUCBO T0RFTEFZIChOYWdsZSBhbGdvcml0aG0pCi0KLSAgIFNlZSB0aGUgWzEyMF1DLUtlcm1pdCB1c2Vy IGRvY3VtZW50YXRpb24gZm9yIGRlc2NyaXB0aW9ucyBvZiB0aGVzZQotICAgY29tbWFuZHMuCi0K LSAgOC4xLjEuIEZpcmV3YWxscwotCi0gICBUaGVyZSBleGlzdCB2YXJpb3VzIHR5cGVzIG9mIGZp cmV3YWxscywgc2V0IHVwIHRvIHNlcGFyYXRlIHVzZXJzIG9mIGFuCi0gICBpbnRlcm5hbCBUQ1Av SVAgbmV0d29yayAoIkludHJhbmV0IikgZnJvbSB0aGUgZ3JlYXQgd2lkZSBJbnRlcm5ldCwgYnV0 Ci0gICB0aGVuIHRvIGxldCBzZWxlY3RlZCB1c2VycyBvciBzZXJ2aWNlcyBnZXQgdGhyb3VnaCBh ZnRlciBhbGwuCi0KLSAgIE9uZSBmaXJld2FsbCBtZXRob2QgaXMgY2FsbGVkIFNPQ0tTLCBpbiB3 aGljaCBhIHByb3h5IHNlcnZlciBhbGxvd3MKLSAgIHVzZXJzIGluc2lkZSBhIGZpcmV3YWxsIHRv IGFjY2VzcyB0aGUgb3V0c2lkZSB3b3JsZCwgYmFzZWQgb24gYQotICAgcGVybWlzc2lvbiBsaXN0 IGdlbmVyYWxseSBzdG9yZWQgaW4gYSBmaWxlLiBTT0NLUyBpcyBlbmFibGVkIGluIG9uZSBvZgot ICAgdHdvIHdheXMuIEZpcnN0LCB0aGUgc3RhbmRhcmQgc29ja2V0cyBsaWJyYXJ5IGlzIG1vZGlm aWVkIHRvIGhhbmRsZSB0aGUKLSAgIGZpcmV3YWxsLCBhbmQgdGhlbiBhbGwgdGhlIGNsaWVudCBh cHBsaWNhdGlvbnMgYXJlIHJlbGlua2VkIChpZgotICAgbmVjZXNzYXJ5LCBpLmUuIGlmIHRoZSBs aWJyYXJpZXMgYXJlIG5vdCBkeW5hbWljYWxseSBsb2FkZWQpIHdpdGggdGhlCi0gICBtb2RpZmll ZCBzb2NrZXRzIGxpYnJhcnkuIFRoZSBBUElzIGFyZSBhbGwgdGhlIHNhbWUsIHNvIHRoZQotICAg YXBwbGljYXRpb25zIGRvIG5vdCBuZWVkIHRvIGJlIHJlY29kZWQgb3IgcmVjb21waWxlZC4KLQot ICAgSW4gdGhlIG90aGVyIG1ldGhvZCwgdGhlIGFwcGxpY2F0aW9ucyBtdXN0IGJlIG1vZGlmaWVk IHRvIGNhbGwKLSAgIHJlcGxhY2VtZW50IHJvdXRpbmVzLCBzdWNoIGFzIFJhY2NlcHQoKSBpbnN0 ZWFkIG9mIGFjY2VwdCgpLCBSYmluZCgpCi0gICBpbnN0ZWFkIG9mIGJpbmQoKSwgZXRjLCBhbmQg dGhlbiBsaW5rZWQgd2l0aCBhIHNlcGFyYXRlIFNPQ0tTIGxpYnJhcnkuCi0gICBUaGlzIHNlY29u ZCBtZXRob2QgaXMgYWNjb21wbGlzaGVkIChmb3IgU09DS1M0KSBpbiBDLUtlcm1pdCBieQotICAg aW5jbHVkaW5nIC1EQ0tfU09DS1MgaW4geW91ciBDRkxBR1MsIGFuZCBhbHNvIGFkZGluZzoKLQot ICAtbHNvY2tzCi0KLSAgIHRvIExJQlMsIG9yIHJlcGxhY2luZyAtbHNvY2tldHMgd2l0aCAtbHNv Y2tzIChkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKLSAgIHNvY2tzIGxpYnJhcnkgYWxzbyBpbmNs dWRlcyBhbGwgdGhlIHNvY2tldHMgZW50cnkgcG9pbnRzKS4KLQotICAgRm9yIFNPQ0tTNSwgdXNl IC1EQ0tfU09DS1M1LgotCi0gICBFeHBsaWNpdCBmaXJld2FsbCBzdXBwb3J0IGNhbiwgaW4gZ2Vu ZXJhbCwgbm90IGJlIGEgc3RhbmRhcmQgZmVhdHVyZSBvcgotICAgYSBmZWF0dXJlIHRoYXQgaXMg c2VsZWN0ZWQgYXQgcnVudGltZSwgYmVjYXVzZSB0aGUgU09DS1MgbGlicmFyeSB0ZW5kcwotICAg dG8gYmUgZGlmZmVyZW50IGF0IGVhY2ggc2l0ZSAtLSBsb2NhbCBtb2RpZmljYXRpb25zIGFib3Vu ZC4KLQotICAgVGhlIGlkZWFsIHNpdHVhdGlvbiBvY2N1cnMgd2hlbiBmaXJld2FsbHMgYXJlIHN1 cHBvcnRlZCBieSB0aGUgZmlyc3QKLSAgIG1ldGhvZCwgdXNpbmcgZHluYW1pY2FsbHkgbGlua2Vk IHNvY2tldHMtcmVwbGFjZW1lbnQgbGlicmFyaWVzOyBpbiB0aGlzCi0gICBjYXNlLCBhbGwgeW91 ciBUQ1AvSVAgY2xpZW50IGFwcGxpY2F0aW9ucyBuZWdvdGlhdGUgdGhlIGZpcmV3YWxsCi0gICB0 cmFuc3BhcmVudGx5LgotCi0gIDguMS4yLiBDb21waWxhdGlvbiBhbmQgTGlua2luZyBQcm9ibGVt cwotCi0gICBJZiB5b3UgZ2V0IGEgY29tcGlsYXRpb24gZXJyb3IgaW4gWzEyMV1ja2NuZXQuYywg d2l0aCBhIGNvbXBsYWludCBsaWtlCi0gICAiaW5jb21wYXRpYmxlIHR5cGVzIGluIGFzc2lnbm1l bnQiLCBpdCBwcm9iYWJseSBoYXMgc29tZXRoaW5nIHRvIGRvCi0gICB3aXRoIHRoZSBkYXRhIHR5 cGUgeW91ciBzeXN0ZW0gdXNlcyBmb3IgdGhlIGluZXRfYWRkcigpIGZ1bmN0aW9uLCB3aGljaAot ICAgaXMgZGVjbGFyZWQgKHVzdWFsbHkpIGluIDxhcnBhL2luZXQuaD4uIEtlcm1pdCB1c2VzICJ1 bnNpZ25lZCBsb25nIgotICAgdW5sZXNzIHRoZSBzeW1ib2wgSU5BRERSWCBpcyBkZWZpbmVkLCBp biB3aGljaCBjYXNlICJzdHJ1Y3QgaW5hZGRyIiBpcwotICAgdXNlZCBpbnN0ZWFkLiBUcnkgYWRk aW5nIC1ESU5BRERSWCB0byBDRkxBR1MgaW4geW91ciBtYWtlIGVudHJ5LCBhbmQgaWYKLSAgIHRo YXQgZml4ZXMgdGhlIHByb2JsZW0sIHBsZWFzZSBzZW5kIGEgcmVwb3J0IHRvIGtlcm1pdEBjb2x1 bWJpYS5lZHUuCi0KLSAgIENvbXBpbGF0aW9uIGVycm9ycyBtaWdodCBhbHNvIGhhdmUgdG8gZG8g d2l0aCB0aGUgZGF0YSB0eXBlIHVzZWQgZm9yCi0gICBnZXRzb2Nrb3B0KCkgYW5kIHNldHNvY2tv cHQoKSBvcHRpb24tbGVuZ3RoIGZpZWxkLiBUaGlzIGlzIG5vcm1hbGx5IGFuCi0gICBpbnQsIGJ1 dCBzb21ldGltZXMgaXQncyBhIHNob3J0LCBhIGxvbmcsIG9yIGFuIHVuc2lnbmVkIGFueSBvZiB0 aG9zZSwKLSAgIG9yIGEgc2l6ZV90LiBUbyBmaXggdGhlIGNvbXBpbGF0aW9uIHByb2JsZW0sIGFk ZCAtRFNPQ0tPUFRfVD14eHggdG8gdGhlCi0gICBDRkxBR1MgaW4geW91ciBtYWtlZmlsZSB0YXJn ZXQsIHdoZXJlIHh4eCBpcyB0aGUgYXBwcm9wcmlhdGUgdHlwZSAodXNlCi0gICAibWFuIGdldHNv Y2tvcHQiIG9yIGdyZXAgdGhyb3VnaCB5b3VyIHN5c3RlbS9uZXR3b3JrIGhlYWRlciBmaWxlcyB0 bwotICAgZmluZCB0aGUgbmVlZGVkIHR5cGUpLgotCi0gIDguMS4zLiBFbmFibGluZyBIb3N0IEFk ZHJlc3MgTGlzdHMKLQotICAgV2hlbiB5b3UgZ2l2ZSBLZXJtaXQgYW4gSVAgaG9zdCBuYW1lLCBp dCBjYWxscyB0aGUgc29ja2V0IHJvdXRpbmUKLSAgIGdldGhvc3RieW5hbWUoKSB0byByZXNvbHZl IGl0LiBnZXRob3N0YnluYW1lKCkgcmV0dXJucyBhIGhvc3RlbnQKLSAgIHN0cnVjdCwgd2hpY2gg bWlnaHQgb3IgbWlnaHQgbm90IG5vdCBpbmNsdWRlIGEgbGlzdCBvZiBhZGRyZXNzZXM7IGlmIGl0 Ci0gICBkb2VzLCB0aGVuIGlmIHRoZSBmaXJzdCBvbmUgZmFpbHMsIEtlcm1pdCBjYW4gdHJ5IHRo ZSBzZWNvbmQgb25lLCBhbmQKLSAgIHNvIG9uLiBIb3dldmVyLCB0aGlzIHdpbGwgb25seSB3b3Jr IGlmIHRoZSBzeW1ib2wgImhfYWRkciIgaXMgYSBtYWNybwotICAgZGVmaW5lZCBhcyAiaF9hZGRy X2xpc3RbMF0iLCB1c3VhbGx5IGluIG5ldGRiLmguIElmIGl0IGlzLCB0aGVuIHlvdSBjYW4KLSAg IGFjdGl2YXRlIHRoaXMgZmVhdHVyZSBieSBkZWZpbmluZyB0aGUgZm9sbG93aW5nIHN5bWJvbCBp biBDRkxBR1M6Ci0KLSAgSEFERFJMSVNUCi0KLSAgOC4xLjQuIEVuYWJsaW5nIFRlbG5ldCBOQVdT Ci0KLSAgIFRoZSBUZWxuZXQgTmVnb3RpYXRpb24gQWJvdXQgV2luZG93IFNpemUgKE5BV1MpIG9w dGlvbiByZXF1aXJlcyB0aGUKLSAgIGFiaWxpdHkgdG8gZmluZCBvdXQgdGhlIHRlcm1pbmFsIHNj cmVlbidzIGRpbWVuc2lvbnMuIEUuZy4gaW4gVW5peCwgd2UKLSAgIG5lZWQgc29tZXRoaW5nIGxp a2UgaW9jdGwoMCwgVElPQ0dXSU5TWiwgLi4uKS4gSWYgeW91ciB2ZXJzaW9uIG9mCi0gICBLZXJt aXQgd2FzIGJ1aWx0IHdpdGggTkFXUyBjYXBhYmlsaXR5LCBTSE9XIFZFUlNJT05TIGluY2x1ZGVz IENLX05BV1MKLSAgIGFtb25nIHRoZSBjb21waWxlciBvcHRpb25zLiBJZiBpdCBkb2Vzbid0LCB5 b3UgY2FuIGFkZCBpdCBieSBkZWZpbmluZwotICAgQ0tfTkFXUyBhdCBjb21waWxlIHRpbWUuIFRo ZW4sIGlmIHRoZSBjb21waWxlciBvciBsaW5rZXIgY29tcGxhaW4gYWJvdXQKLSAgIHVuZGVmaW5l ZCBvciBtaXNzaW5nIHN5bWJvbHMsIG9yIHRoZXJlIGlzIG5vIGNvbXBsYWludCBidXQgU0hPVwot ICAgVEVSTUlOQUwgZmFpbHMgdG8gc2hvdyByZWFzb25hYmxlICJSb3dzID0sIENvbHVtbnMgPSIg dmFsdWVzLCB0aGVuIHRha2UKLSAgIGEgbG9vayBhdCAob3Igd3JpdGUpIHRoZSBhcHByb3ByaWF0 ZSB0dGd3c2l6KCkgcm91dGluZS4gT24gdGhlIG90aGVyCi0gICBoYW5kLCBpZiBDS19OQVdTIGlz IGRlZmluZWQgYnkgZGVmYXVsdCBmb3IgeW91ciBzeXN0ZW0gKGluCi0gICBbMTIyXWNrY25ldC5o KSwgYnV0IGNhdXNlcyB0cm91YmxlLCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgZGVmaW5pdGlvbiBi eQotICAgaW5jbHVkaW5nIHRoZSAtRE5PTkFXUyBzd2l0Y2ggb24geW91ciBDQyBjb21tYW5kIGxp bmUsIHRodXMgZGlzYWJsaW5nCi0gICB0aGUgTkFXUyBmZWF0dXJlLgotCi0gICBUaGlzIGFwcGVh cnMgdG8gYmUgbmVlZGVkIGF0IGxlYXN0IG9uIHRoZSBBVCZUIDNCMiwgd2hlcmUgaW4KLSAgIFsx MjNdY2t1dGlvLmMsIHRoZSByb3V0aW5lIHR0Z3dzaXooKSBmaW5kcyB0aGF0IHRoZSBUSU9DR1dJ TlNaIHN5bWJvbAotICAgaXMgZGVmaW5lZCBidXQgbGFja3MgZGVmaW5pdGlvbnMgZm9yIHRoZSBj b3JyZXNwb25kaW5nIHdpbnNpemUgc3RydWN0Ci0gICBhbmQgaXRzIG1lbWJlcnMgd3NfY29sIGFu ZCB3c19yb3cuCi0KLSAgIFRoZSBVTklYIHZlcnNpb24gb2YgQy1LZXJtaXQgYWxzbyB0cmFwcyBT SUdXSU5DSCwgc28gaXQgY2FuIHNlbmQgYSBOQVdTCi0gICB0byB0aGUgVGVsbmV0IHNlcnZlciBh bnkgdGltZSB0aGUgbG9jYWwgY29uc29sZSB0ZXJtaW5hbCB3aW5kb3cgc2l6ZQotICAgY2hhbmdl cywgZS5nLiB3aGVuIHlvdSBzdHJldGNoIGl0IHdpdGggYSBtb3VzZS4gVGhlIFNJR1dJTkNILXRy YXBwaW5nCi0gICBjb2RlIGlzIGVuYWJsZWQgaWYgU0lHV0lOQ0ggaXMgZGVmaW5lZCAoaS5lLiBp biBzaWduYWwuaCkuIElmIHRoaXMgY29kZQotICAgc2hvdWxkIGNhdXNlIHByb2JsZW1zLCB5b3Ug Y2FuIGRpc2FibGUgaXQgd2l0aG91dCBkaXNhYmxpbmcgdGhlIE5BV1MKLSAgIGZlYXR1cmUgYWx0 b2dldGhlciwgYnkgZGVmaW5pbmcgTk9TSUdXSU5DSCBhdCBjb21waWxlIHRpbWUuCi0KLSAgOC4x LjUuIEVuYWJsaW5nIEluY29taW5nIFRDUC9JUCBDb25uZWN0aW9ucwotCi0gICBUaGlzIGZlYXR1 cmUgbGV0cyB5b3UgInNldCBob3N0ICogcG9ydCIgYW5kIHdhaXQgZm9yIGFuIGluY29taW5nCi0g ICBjb25uZWN0aW9uIG9uIHRoZSBnaXZlbiBwb3J0LiBUaGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBh dXRvbWF0aWNhbGx5IGF0Ci0gICBjb21waWxlIGlmIFRDUFNPQ0tFVCBpcyBkZWZpbmVkIGFuZCBT RUxFQ1QgaXMgYWxzbyBkZWZpbmVkLiBCdXQgd2F0Y2gKLSAgIG91dCwgc2ltcGx5IGRlZmluaW5n IFNFTEVDVCBvbiB0aGUgY2MgY29tbWFuZCBsaW5lIGRvZXMgbm90IGd1YXJhbnRlZQotICAgc3Vj Y2Vzc2Z1bCBjb21waWxhdGlvbiBvciBsaW5raW5nIChzZWUgWzEyNF1TZWN0aW9uIDExKS4KLQot ICAgSWYgeW91IHdhbnQgdG8gZGlzYWJsZSBpbmNvbWluZyBUQ1AvSVAgY29ubmVjdGlvbnMsIHRo ZW4gYnVpbGQgQy1LZXJtaXQKLSAgIHdpdGg6Ci0KLSAgLUROT0xJU1RFTgotCi0gIDguMS42LiBE aXNhYmxpbmcgU0VUIFRDUCBPcHRpb25zCi0KLSAgIFRoZSBtYWluIHJlYXNvbiBmb3IgdGhpcyBp cyBiZWNhdXNlIG9mIGhlYWRlciBmaWxlIC8gcHJvdG90eXBlCi0gICBjb25mbGljdHMgYXQgY29t cGlsZSB0aW1lIHJlZ2FyZGluZyBnZXQtIC8gc2V0c29ja29wdCgpLiBJZiB5b3UgY2FuJ3QKLSAg IGZpeCB0aGVtICh3aXRob3V0IGJyZWFraW5nIG90aGVyIGJ1aWxkcyksIGFkZCB0aGUgZm9sbG93 aW5nIGluIENGTEFHUzoKLQotICAtRE5PVENQT1BUUwotCi0gIDguMi4gWC4yNQotCi0gICBYLjI1 IHN1cHBvcnQgcmVxdWlyZXMgKGEpIGEgU3VuLCAoYikgdGhlIFN1bkxpbmsgcHJvZHVjdCAobGli cmFyaWVzIGFuZAotICAgaGVhZGVyIGZpbGVzKSwgYW5kIChjKSBhbiBYLjI1IGNvbm5lY3Rpb24g aW50byB5b3VyIFN1bi4gU2ltaWxhcmx5IChpbgotICAgQy1LZXJtaXQgNy4wIG9yIGxhdGVyKSBT dHJhdHVzIFZPUyBhbmQgSUJNIEFJWC4KLQotICAgSW4gVU5JWCwgc3BlY2lhbCBtYWtlZmlsZSB0 YXJnZXRzIHN1bm9zNHgyNSBhbmQgc3Vub3M0MXgyNSAoZm9yIFNVTk9TCi0gICA0LjAgYW5kIDQu MSwgcmVzcGVjdGl2ZWx5KSwgb3IgYWl4NDF4MjUsIGFyZSBwcm92aWRlZCB0byBidWlsZCBpbiB0 aGlzCi0gICBmZWF0dXJlLCBidXQgdGhleSBvbmx5IHdvcmsgaWYgY29uZGl0aW9ucyAoYSktKGMp IGFyZSBtZXQuIFRvIHJlcXVlc3QKLSAgIHRoaXMgZmVhdHVyZSwgaW5jbHVkZSAtRFNVTlgyNSAo b3IgLURJQk1YMjUpIGluIENGTEFHUy4KLQotICAgU1VOWDI1IChvciAtRElCTVgyNSkgYW5kIFRD UFNPQ0tFVCBjYW4gYmUgZnJlZWx5IG1peGVkIGFuZCBtYXRjaGVkLCBhbmQKLSAgIHNlbGVjdGVk IGJ5IHRoZSB1c2VyIGF0IHJ1bnRpbWUgd2l0aCB0aGUgU0VUIE5FVFdPUksgVFlQRSBjb21tYW5k IG9yCi0gICBTRVQgSE9TVCBzd2l0Y2hlcy4KLQotICA4LjMuIE90aGVyIE5ldHdvcmtzCi0KLSAg IFN1cHBvcnQgZm9yIG90aGVyIG5ldHdvcmtpbmcgbWV0aG9kcyAtLSBORVRCSU9TLCBMQVQsIE5h bWVkIFBpcGVzLCBldGMKLSAgIC0tIGlzIGluY2x1ZGVkIGluIGNrKm5ldC5oIGFuZCBjaypuZXQu YyBmb3IgaW1wbGVtZW50YXRpb25zIChzdWNoIGFzCi0gICBXaW5kb3dzIG9yIE9TLzIpIHdoZXJl IHRoZXNlIG1ldGhvZHMgYXJlIHN1cHBvcnRlZC4KLQotICAgUHJvdmlzaW9uIGlzIG1hZGUgaW4g dGhlIG9yZ2FuaXphdGlvbiBvZiB0aGUgbW9kdWxlcywgaGVhZGVyIGZpbGVzLAotICAgY29tbWFu ZHMsIGV0YywgZm9yIGFkZGl0aW9uIG9mIG5ldyBuZXR3b3JrIHR5cGVzIHN1Y2ggYXMgREVDbmV0 LCBYLjI1Ci0gICBmb3Igb3RoZXIgc3lzdGVtcyAoSFAtVVgsIFZNUywgZXRjKSwgYW5kIHNvIG9u LiBTZW5kIGVtYWlsIHRvCi0gICBbMTI1XWtlcm1pdEBjb2x1bWJpYS5lZHUgaWYgeW91IGFyZSB3 aWxsaW5nIGFuZCBhYmxlIHRvIHdvcmsgb24gc3VjaCBhCi0gICBwcm9qZWN0LgotCi0gICBbIFsx MjZdQy1LZXJtaXQgSG9tZSBdIFsgWzEyN11LZXJtaXQgSG9tZSBdCi0KLSAgOS4gRVhDRVBUSU9O IEhBTkRMSU5HCi0KLSAgIFsgWzEyOF1Ub3AgXSBbIFsxMjldQ29udGVudHMgXSBbIFsxMzBdTmV4 dCBdIFsgWzEzMV1QcmV2aW91cyBdCi0KLSAgIFRoZSBDIGxhbmd1YWdlIHNldGptcC9sb25nam1w IG1lY2hhbmlzbSBpcyB1c2VkIGZvciBoYW5kbGluZwotICAgZXhjZXB0aW9ucy4gVGhlIGp1bXAg YnVmZmVyIGlzIG9mIHR5cGUgam1wX2J1Ziwgd2hpY2ggYWxtb3N0IGV2ZXJ5d2hlcmUKLSAgIGlz IHR5cGVkZWYnZCBhcyBhbiBhcnJheSwgaW4gd2hpY2ggY2FzZSB5b3Ugc2hvdWxkIGhhdmUgbm8g dHJvdWJsZQotICAgY29tcGlsaW5nIHRoZSBleGNlcHRpb24taGFuZGxpbmcgY29kZS4gSG93ZXZl ciwgaWYgeW91IGFyZSBidWlsZGluZwotICAgQy1LZXJtaXQgaW4vZm9yIGFuIGVudmlyb25tZW50 IHdoZXJlIGptcF9idWYgaXMgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4KLSAgIGFycmF5IChlLmcu IGEgc3RydWN0KSwgdGhlbiB5b3UnbGwgaGF2ZSB0byBkZWZpbmUgdGhlIGZvbGxvd2luZyBzeW1i b2w6Ci0KLSAgSkJOT1RBUlJBWQotCi0gICBbIFsxMzJdQy1LZXJtaXQgSG9tZSBdIFsgWzEzM11L ZXJtaXQgSG9tZSBdCi0KLSAgMTAuIFNFQ1VSSVRZIEZFQVRVUkVTCi0KLSAgIFsgWzEzNF1Ub3Ag XSBbIFsxMzVdQ29udGVudHMgXSBbIFsxMzZdTmV4dCBdIFsgWzEzN11QcmV2aW91cyBdCi0KLSAg IFNlY3VyaXR5LCBpbiB0aGUgc2Vuc2Ugb2Ygc2VjdXJlIGF1dGhlbnRpY2F0aW9uIGFuZCBzdHJv bmcgZW5jcnlwdGlvbiwKLSAgIGNhbiBiZSBidWlsdCBpbnRvIHZlcnNpb25mIG9mIEMtS2VybWl0 IGZvciB3aGljaCB0aGUgYXBwcm9wcmlhdGUKLSAgIGxpYnJhcmllcyBhbmQgaGVhZGVyIGZpbGVz IGFyZSBhdmFpbGFibGUgKEtlcmJlcm9zIElWLCBLZXJiZXJvcyBWLAotICAgT3BlblNTTCwgU1JQ KSwgYXMgZXhwbGFpbmVkIGluIGdyZWF0IGRldGFpbCBpbiB0aGUgS2VybWl0IFNlY3VyaXR5Ci0g ICBSZWZlcmVuY2UKLSAgIC4gVGhlIGZvbGxvd2luZyBzeW1ib2xzIGdvdmVybiBDLUtlcm1pdCdz IHNlY3VyaXR5IGZlYXR1cmVzIGF0IGJ1aWxkCi0gICB0aW1lOgotCi0gICBOT19BVVRIRU5USUNB VElPTgotICAgICAgICAgIE1lYW5zIGRvIG5vdCBjb25maWd1cmUgYW55IFRFTE5FVCBBVVRIRU5U SUNBVElPTiBzdXBwb3J0LiBJdAotICAgICAgICAgIGltcGxpZXMgTk9fRU5DUllQVElPTiBhbmQg dW5kZWZpbmVzIGFueSBvZiB0aGUgYXV0aCBhbmQgZW5jcnlwdAotICAgICAgICAgIHR5cGVzLiBJ dCBkb2VzIG5vdCB1bmRlZmluZSBDS19TU0wgZXZlbiB0aG91Z2ggYnVpbGRzIHdpdGgKLSAgICAg ICAgICBDS19TU0wgY2Fubm90IHN1Y2NlZWQgd2l0aG91dCBDS19BVVRIRU5USUNBVElPTi4gKFRo aXMgd2lsbCBiZQotICAgICAgICAgIHN1cHBvcnRlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiBJdCB3 aWxsIGJlIG5lZWRlZCB0byBhbGxvdwotICAgICAgICAgIEMtS2VybWl0IHRvIGJlIGJ1aWx0IG9u bHkgYXMgYW4gRlRQIGNsaWVudC4pCi0KLSAgIE5PX0tFUkJFUk9TCi0gICAgICAgICAgTWVhbnMg ZG8gbm90IGNvbXBpbGUgaW4gYW55IEtFUkJFUk9TIHN1cHBvcnQgd2hlbgotICAgICAgICAgIENL X0FVVEhFTlRJQ0FUSU9OIGhhcyBiZWVuIGRlZmluZWQuCi0KLSAgIE5PX1NSUAotICAgICAgICAg IERvIG5vdCBjb21waWxlIGluIGFueSBTUlAgc3VwcG9ydCB3aGVuIENLX0FVVEhFTlRJQ0FUSU9O IGhhcwotICAgICAgICAgIGJlZW4gZGVmaW5lZC4KLQotICAgTk9fU1NMCi0gICAgICAgICAgRG8g bm90IGNvbXBpbGUgaW4gYW55IFNTTC9UTFMgc3VwcG9ydAotCi0gICBOT19FTkNSWVBUSU9OCi0g ICAgICAgICAgRG8gbm90IGNvbXBpbGUgaW4gYW55IFRlbG5ldCBlbmNyeXB0aW9uIHN1cHBvcnQu IEl0IGRvZXMgbm90Ci0gICAgICAgICAgYWZmZWN0IHRoZSB1c2Ugb2YgU1NML1RMUwotCi0gICBO T1NTSAotICAgICAgICAgIERvIG5vdCBjb21waWxlIGluIGFueSBTU0ggc3VwcG9ydCB3aGV0aGVy IGludGVybmFsIG9yIGV4dGVybmFsCi0KLSAgIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgICAg VGVsbmV0IEFVVEhFTlRJQ0FUSU9OIHN1cHBvcnQuIChBbHNvLCByZXF1aXJlZCBpZiBTU0wvVExT Ci0gICAgICAgICAgc3VwcG9ydCBpcyBkZXNpcmVkLikgT24gbW9zdCBwbGF0Zm9ybXMgdGhpcyBk b2VzIG5vdCBhdXRvZGVmaW5lCi0gICAgICAgICAgYW55IGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlz bXMgc3VjaCBhcyBLZXJiZXJvcyBWLCBLZXJiZXJvcyBJViwKLSAgICAgICAgICBTUlAsIC4uLiBU aG9zZSBuZWVkIHRvIGJlIGRlZmluZWQgc2VwYXJhdGVseS4KLQotICAgQ0tfS0VSQkVST1MKLSAg ICAgICAgICBEZWZpbmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBLUkI0LCBLUkI1LCBvciBLUkI1MjQg YXJlIGRlZmluZWQuCi0gICAgICAgICAgSW1wbGllcyB0aGF0IHNvbWUgdmVyc2lvbiBvZiBLZXJi ZXJvcyBpcyBpbiB1c2UuCi0KLSAgIEtSQjQKLSAgICAgICAgICBTaG91bGQgYmUgZGVmaW5lZCB3 aGVuIEtlcmJlcm9zIElWIHN1cHBvcnQgaXMgZGVzaXJlZC4KLQotICAgS1JCNQotICAgICAgICAg IFNob3VsZCBiZSBkZWZpbmVkIHdoZW4gS2VyYmVyb3MgViBzdXBwb3J0IGlzIGRlc2lyZWQuCi0K LSAgIEtSQjUyNAotICAgICAgICAgIFNob3VsZCBiZSBkZWZpbmVkIGlmIGJvdGggS2VyYmVyb3Mg ViBhbmQgS2VyYmVyb3MgSVYgYXJlIHVzZWQKLSAgICAgICAgICBhbmQgdGhlIEtlcmJlcm9zIElW IHN1cHBvcnQgaXMgcHJvdmlkZWQgYnkgdGhlIE1JVCBLZXJiZXJvcyBJVgotICAgICAgICAgIGNv bXBhdGliaWxpdHkgbGlicmFyeSBpbiB0aGUgY3VycmVudCBLZXJiZXJvcyA1IGRpc3RyaWJ1dGlv bi4KLQotICAgS1JCNV9VMlUKLSAgICAgICAgICBTaG91bGQgYmUgZGVmaW5lZCBpZiBLUkI1IGlz IGRlZmluZWQgYW5kIEtlcmJlcm9zIDUgVXNlciB0byBVc2VyCi0gICAgICAgICAgbW9kZSBpcyBk ZXNpcmVkLgotCi0gICBIRUlNREFMCi0gICAgICAgICAgU2hvdWxkIGJlIGRlZmluZWQgaWYgS2Vy YmVyb3MgViBzdXBwb3J0IGlzIHByb3ZpZGVkIGJ5IEhFSU1EQUwuCi0gICAgICAgICAgU3VwcG9y dCBmb3IgdGhpcyBvcHRpb24gaXMgbm90IGNvbXBsZXRlIGluIEMtS2VybWl0IDguMC4gQW55b25l Ci0gICAgICAgICAgaW50ZXJlc3RlZCBpbiB3b3JraW5nIG9uIHRoaXMgc2hvdWxkIGNvbnRhY3Qg a2VybWl0LXN1cHBvcnQuCi0KLSAgIENLX1NSUAotICAgICAgICAgIFNob3VsZCBiZSBkZWZpbmVk IGlmIFNSUCBzdXBwb3J0IGlzIGRlc2lyZWQuCi0KLSAgIENLX0VOQ1JZUFRJT04KLSAgICAgICAg ICBTaG91bGQgYmUgZGVmaW5lZCBpZiBURUxORVQgRU5DUllQVElPTiBvcHRpb24gc3VwcG9ydCBp cwotICAgICAgICAgIGRlc2lyZWQuIFRoaXMgb3B0aW9uIGRvZXMgbm90IGRlZmluZSBhbnkgcGFy dGljdWxhciBlbmNyeXB0aW9uCi0gICAgICAgICAgdHlwZXMuIFRoYXQgc2hvdWxkIGJlIGRvbmUg YnkgZGVmaW5pbmcgQ0tfREVTIG9yIENLX0NBU1QuCi0KLSAgIENLX0RFUwotICAgICAgICAgIFNo b3VsZCBiZSBkZWZpbmVkIGlmIGVpdGhlciBERVMgb3IgM0RFUyBUZWxuZXQgRW5jcnlwdGlvbiBv cHRpb24KLSAgICAgICAgICBzdXBwb3J0IGlzIGRlc2lyZWQuCi0KLSAgIExJQkRFUwotICAgICAg ICAgIElmIENLX0RFUyBpcyBkZWZpbmVkIGFuZCBERVMgc3VwcG9ydCBpcyBiZWluZyBwcm92aWRl ZCBieSBlaXRoZXIKLSAgICAgICAgICBFcmljIFlvdW5nJ3MgbGliZGVzLmEgb3IgT3BlblNTTCAw LjkuNnggb3IgZWFybGllciwgdGhpcyBvcHRpb24KLSAgICAgICAgICBtdXN0IGJlIGRlZmluZWQu IElmIGl0IGlzIG5vdCBkZWZpbmVkLCBpdCB3aWxsIGJlIGFzc3VtZWQgdGhhdAotICAgICAgICAg IERFUyBzdXBwb3J0IGlzIHByb3ZpZGVkIGJ5IHRoZSBNSVQgS2VyYmVyb3MgSVYgbGlicmFyaWVz LgotCi0gICBDS19DQVNUCi0gICAgICAgICAgU2hvdWxkIGJlIGRlZmluZWQgaWYgQ0FTVCBUZWxu ZXQgRW5jcnlwdGlvbiBvcHRpb24gc3VwcG9ydCBpcwotICAgICAgICAgIGRlc2lyZWQKLQotICAg Q0tfU1NMCi0gICAgICAgICAgU2hvdWxkIGJlIGRlZmluZWQgaWYgU1NML1RMUyBzdXBwb3J0IChP cGVuU1NMKSBpcyBkZXNpcmVkLgotCi0gICBTU0xfS1JCNQotICAgICAgICAgIElmIEtSQjUgaXMg ZGVmaW5lZCwgYW5kIE9wZW5TU0wgaXMgYnVpbHQgdG8gc3VwcG9ydCB0aGUgS2VyYmVyb3MKLSAg ICAgICAgICA1IGNpcGhlcnMsIHRoZW4geW91IHNob3VsZCBkZWZpbmUgU1NMX0tSQjUKLQotICAg Tk9TU0xLUkI1Ci0gICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBPcGVuU1NMIDAuOS43IG9yIGhp Z2hlciBhbmQgZG8gbm90IHdpc2ggdG8KLSAgICAgICAgICBidWlsZCB3aXRoIHN1cHBvcnQgZm9y IEtlcmJlcm9zIDUgVExTIGNpcGhlcnMsIHRoaXMgb3B0aW9uIG11c3QKLSAgICAgICAgICBiZSBk ZWZpbmVkLgotCi0gICBaTElCCi0gICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBPcGVuU1NMIDAu OS42IG9yIGhpZ2hlciBhbmQgaXQgaGFzIGJlZW4KLSAgICAgICAgICBjb21waWxlZCB3aXRoIHN1 cHBvcnQgZm9yIFpMSUIgY29tcHJlc3Npb24sIHRoaXMgb3B0aW9uIHNob3VsZAotICAgICAgICAg IGJlIGRlZmluZWQgdG8gZW5hYmxlIEtlcm1pdCB0byBwcm9wZXJseSBlbmFibGUgdGhlIHVzZSBv ZgotICAgICAgICAgIGNvbXByZXNzaW9uLgotCi0gICBTU0hDTUQKLSAgICAgICAgICBEZWZpbmVk IGZvciBDLUtlcm1pdCB0byBlbmFibGUgdGhlIHVzZSBvZiBleHRlcm5hbCBTU0ggY2xpZW50cwot ICAgICAgICAgIGZyb20gdGhlIEtlcm1pdCBjb21tYW5kIGxhbmd1YWdlCi0KLSAgIFNTSEJVSUxU SU4KLSAgICAgICAgICBEZWZpbmVkIGZvciBLZXJtaXQgaW1wbGVtZW50YXRpb25zIHRoYXQgaGF2 ZSBpbnRlZ3JhdGVkIFNTSAotICAgICAgICAgIHN1cHBvcnQuIEN1cnJlbnRseSBvbmx5IFdpbmRv d3MuCi0KLSAgIEFOWVNTSAotICAgICAgICAgIERlZmluZWQgaWYgZWl0aGVyIFNTSENNRCBvciBT U0hCVUlMVElOIGFyZSBkZWZpbmVkLgotCi0gICBDS19TTkRMT0MKLSAgICAgICAgICBUZWxuZXQg U2VuZCBMb2NhdGlvbiBzdXBwb3J0LgotCi0gICBOT1NORExPQwotICAgICAgICAgIERvIG5vdCBp bmNsdWRlIFRlbG5ldCBTZW5kIExvY2F0aW9uIHN1cHBvcnQuCi0KLSAgIENLX1hESVNQTE9DCi0g ICAgICAgICAgVGVsbmV0IFgtRGlzcGxheSBMb2NhdGlvbiBzdXBwb3J0LiBEZXRlcm1pbmVzIGlm IHRoZSBYLURpc3BsYXkKLSAgICAgICAgICBsb2NhdGlvbiBpbmZvcm1hdGlvbiBpcyBzZW50IHRv IHRoZSBUZWxuZXQgc2VydmVyIGVpdGhlciB2aWEKLSAgICAgICAgICBUZWxuZXQgWERJU1BMT0Mg b3IgTkVXLUVOViBvcHRpb25zLgotCi0gICBOT1hESVNQTE9DCi0gICAgICAgICAgRG8gbm90IGlu Y2x1ZGUgVGVsbmV0IFgtRGlzcGxheSBMb2NhdGlvbiBzdXBwb3J0LgotCi0gICBDS19GT1JXQVJE X1gKLSAgICAgICAgICBUZWxuZXQgRm9yd2FyZCBYIFdpbmRvd3MgU2Vzc2lvbiBEYXRhIG9wdGlv bi4gVXNlZCB0byBwcm90ZWN0Ci0gICAgICAgICAgdGhlIHByaXZhY3kgYW5kIGludGVncml0eSBv ZiBYIFdpbmRvd3MgU2Vzc2lvbnMgd2hlbiBzZWN1cmUKLSAgICAgICAgICB0ZWxuZXQgc2Vzc2lv bnMgYXJlIGluIHVzZS4KLQotICAgTk9GT1JXQVJEWAotICAgICAgICAgIERvIG5vdCBpbmNsdWRl IFRlbG5ldCBGb3J3YXJkIFggV2luZG93cyBTZXNzaW9uIERhdGEgb3B0aW9uLgotCi0gICBCZXNp ZGVzIHRoZSBzdHJvbmcgZm9ybXMgb2Ygc2VjdXJpdHkgbGlzdGVkIGFib3ZlLCBDLUtlcm1pdCBh bHNvCi0gICBlbWJvZGllcyB2YXJpb3VzIGludGVybmFsIHNlY3VyaXR5IGZlYXR1cmVzLCBpbmNs dWRpbmc6Ci0KLSAgIE5PUFVTSAotICAgICAgICAgIENvbXBpbGluZyB3aXRoIHRoZSBOT1BVU0gg c3ltYm9sIGRlZmluZWQgcmVtb3ZlcyBhbGwgdGhlICJzaGVsbAotICAgICAgICAgIGVzY2FwZSIg ZmVhdHVyZXMgZnJvbSB0aGUgcHJvZ3JhbSwgaW5jbHVkaW5nIHRoZSBQVVNILCBSVU4sIGFuZAot ICAgICAgICAgIFNQQVdOIGNvbW1hbmRzLCB0aGUgIiEiIGFuZCAiQCIgY29tbWFuZCBwcmVmaXhl cywgT1BFTiAhUkVBRCwKLSAgICAgICAgICBPUEVOICFXUklURSwgam9iIGNvbnRyb2wgKGluY2x1 ZGluZyB0aGUgU1VTUEVORCBjb21tYW5kKSwgdGhlCi0gICAgICAgICAgUkVESVJFQ1QgY29tbWFu ZCwgc2hlbGwvRENMIGVzY2FwZSBmcm9tIENPTk5FQ1QgbW9kZSwgYXMgd2VsbCBhcwotICAgICAg ICAgIHRoZSBzZXJ2ZXIncyBleGVjdXRpb24gb2YgUkVNT1RFIEhPU1QgY29tbWFuZHMgKGFuZCwg b2YgY291cnNlLAotICAgICAgICAgIHRoZSBFTkFCTEUgSE9TVCBjb21tYW5kKS4gQWRkIE5PRElT UE8gdG8gYWxzbyBwcmV2ZW50IGFjY2VwdGFuY2UKLSAgICAgICAgICBvZiBpbmNvbWluZyBNQUlM IG9yIFJFTU9URSBQUklOVCBmaWxlcy4gRm9yIFVOSVgsIGFsc28gYmUgc3VyZQotICAgICAgICAg IHRvIHJlYWQgWzEzOF1TZWN0aW9uIDExIG9mIHRoZSBbMTM5XVVuaXggQy1LZXJtaXQgSW5zdGFs bGF0aW9uCi0gICAgICAgICAgSW5zdHJ1Y3Rpb25zLiBhYm91dCBzZXRbdWddaWQgY29uZmlndXJh dGlvbi4gQWRkaXRpb25hbAotICAgICAgICAgIHJlc3RyaWN0aW9ucyBjYW4gYmUgZW5mb3JjZWQg d2hlbiBpbiBzZXJ2ZXIgbW9kZTsgcmVhZCBhYm91dCB0aGUKLSAgICAgICAgICBESVNBQkxFIGNv bW1hbmQgaW4gdGhlIHVzZXIgbWFudWFsLgotCi0gICBOT0NDVFJBUAotICAgICAgICAgIENvbXBp bGluZyB3aXRoIE5PQ0NUUkFQIHByZXZlbnRzIHRoZSB0cmFwcGluZyBvZiBTSUdJTlQgYnkKLSAg ICAgICAgICBLZXJtaXQuIFRodXMgaWYgdGhlIHVzZXIgZ2VuZXJhdGVzIGEgU0lHSU5UIHNpZ25h bCAoZS5nLiBieQotICAgICAgICAgIHR5cGluZyB0aGUgc3lzdGVtJ3MgaW50ZXJydXB0IGNoYXJh Y3RlciksIEtlcm1pdCB3aWxsIGV4aXQKLSAgICAgICAgICBpbW1lZGlhdGVseSwgcmF0aGVyIHRo YW4gcmV0dXJuaW5nIHRvIGl0cyBwcm9tcHQuCi0KLSAgIE5PUFVTSCBhbmQgTk9DQ1RSQVAgdG9n ZXRoZXIgYWxsb3cgS2VybWl0IHRvIGJlIHJ1biBmcm9tIHJlc3RyaWN0ZWQKLSAgIHNoZWxscywg cHJldmVudGluZyBhY2Nlc3MgdG8gc3lzdGVtIGZ1bmN0aW9ucy4KLQotICAgWyBbMTQwXUMtS2Vy bWl0IEhvbWUgXSBbIFsxNDFdS2VybWl0IEhvbWUgXQotCi0gIDExLiBFTkFCTElORyBTRUxFQ1Qo KQotCi0gICBbIFsxNDJdVG9wIF0gWyBbMTQzXUNvbnRlbnRzIF0gWyBbMTQ0XU5leHQgXSBbIFsx NDVdUHJldmlvdXMgXQotCi0gICBLZXJtaXQgd29ya3MgYmVzdCBpZiBpdCBjYW4gZG8gbm9uYmxv Y2tpbmcgcmVhZHMsIG5vbmRlc3RydWN0aXZlIGlucHV0Ci0gICBidWZmZXIgY2hlY2tpbmcsIGFu ZCBtaWxsaXNlY29uZCBzbGVlcHMuIEFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgY2FuIGJlCi0gICBh Y2NvbXBsaXNoZWQgYnkgdGhlIHNlbGVjdCgpIGZ1bmN0aW9uLCB3aGljaCwgdW5mb3J0dW5hdGVs eSwgaXMgbm90Ci0gICB1bml2ZXJzYWxseSBhdmFpbGFibGUuIEZ1cnRoZXJtb3JlLCBzZWxlY3Qo KSBpcyByZXF1aXJlZCBpZiBpbmNvbWluZwotICAgVENQL0lQIGNvbm5lY3Rpb25zIGFyZSB0byBi ZSBzdXBwb3J0ZWQuCi0KLSAgIHNlbGVjdCgpIHdhcyBpbnRyb2R1Y2VkIHdpdGggQmVya2VsZXkg VU5JWCwgcmVqZWN0ZWQgYnkgQVQmVCBmb3IgU3lzdGVtCi0gICBWLCBidXQgaXMgZ3JhZHVhbGx5 IGNyZWVwaW5nIGluIHRvIGFsbCBVTklYIHZlcnNpb25zIChhbmQgb3RoZXIKLSAgIG9wZXJhdGlu ZyBzeXN0ZW1zIHRvbykgYnkgdmlydHVlIG9mIGl0cyBwcmVzZW5jZSBpbiB0aGUgc29ja2V0cwot ICAgbGlicmFyeSwgd2hpY2ggaXMgbmVlZGVkIGZvciBUQ1AvSVAuIEFUJlQgU1ZJRCBmb3IgU3lz dGVtIFYgUjQgaW5jbHVkZXMKLSAgIHNlbGVjdCgpLCBidXQgdGhhdCBkb2VzIG5vdCBtZWFuIHRo YXQgYWxsIFNWUjQgaW1wbGVtZW50YXRpb25zIGhhdmUgaXQuCi0KLSAgIEZ1cnRoZXJtb3JlLCBl dmVuIHdoZW4gc2VsZWN0KCkgaXMgYXZhaWxhYmxlLCBpdCBtaWdodCB3b3JrIG9ubHkgb24KLSAg IHNvY2tldCBmaWxlIGRlc2NyaXB0b3JzLCBidXQgbm90IG9uIG90aGVycyBsaWtlIHNlcmlhbCBw b3J0cywgcGlwZXMsCi0gICBldGMuIEZvciBleGFtcGxlLCBpbiBBT1MvVlMgYW5kIEJlT1MsIGl0 IHdvcmtzIG9ubHkgd2l0aCBmaWxlCi0gICBkZXNjcmlwdG9ycyB0aGF0IHdlcmUgY3JlYXRlZCBi eSBzb2NrZXQoKSBhbmQgb3BlbmVkIGJ5IGNvbm5lY3QoKSBvcgotICAgYWNjZXB0KCkuCi0KLSAg IE90aGVyIGFsdGVybmF0aXZlcyBpbmNsdWRlIHBvbGwoKSBhbmQgcmRjaGsoKS4gT25seSBvbmUg b2YgdGhlc2UgdGhyZWUKLSAgIGZ1bmN0aW9ucyBzaG91bGQgYmUgaW5jbHVkZWQuIFRoZSBmb2xs b3dpbmcgc3ltYm9scyBnb3Zlcm4gdGhpczoKLQotICAgICBTRUxFQ1QgIFVzZSBzZWxlY3QoKSAo QlNELCBvciBzeXN0ZW1zIHdpdGggc29ja2V0cyBsaWJyYXJpZXMpCi0gICAgIENLX1BPTEwgVXNl IHBvbGwoKSAgIChTeXN0ZW0gVikKLSAgICAgUkRDSEsgICBVc2UgcmRjaGsoKSAgKFNDTyBYRU5J WCBhbmQgVU5JWCkKLQotICAgSWYgeW91ciBzeXN0ZW0gc3VwcG9ydHMgdGhlIHNlbGVjdCgpIGZ1 bmN0aW9uLCBidXQgeW91ciB2ZXJzaW9uIG9mCi0gICBDLUtlcm1pdCBkb2VzIG5vdCwgdHJ5IGFk ZGluZzoKLQotICAtRFNFTEVDVAotCi0gICB0byB0aGUgQ0ZMQUdTLCBhbmQgcmVtb3ZpbmcgLURS RENISyBvciAtRENLX1BPTEwgaWYgaXQgaXMgdGhlcmUuIElmIHlvdQotICAgZ2V0IGNvbXBpbGF0 aW9uIGVycm9ycywgc29tZSBhZGp1c3RtZW50cyB0byBjayp0aW8uYyBhbmQvb3IgY2sqbmV0LmMK LSAgIG1pZ2h0IGJlIG5lZWRlZDsgc2VhcmNoIGZvciBTRUxFQ1QgKHVwcGVyY2FzZSkgaW4gdGhl c2UgZmlsZXMgKG5vdGUKLSAgIHRoYXQgdGhlcmUgYXJlIHNldmVyYWwgdmFyaWF0aW9ucyBvbiB0 aGUgY2FsbGluZyBjb252ZW50aW9ucyBmb3IKLSAgIHNlbGVjdCgpKS4KLQotICAgVmFyaW91cyBt YWNyb3MgYW5kIGRhdGEgdHlwZXMgbmVlZCB0byBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIHVzZQot ICAgc2VsZWN0KCkuIFVzdWFsbHkgdGhlc2UgYXJlIHBpY2tlZCB1cCBmcm9tIDx0eXBlcy5oPiBv ciA8c3lzL3R5cGVzLmg+LgotICAgQnV0IG9uIHNvbWUgc3lzdGVtcywgdGhleSBhcmUgaW4gPHN5 cy9zZWxlY3QuaD4uIEluIHRoYXQgY2FzZSwgYWRkIHRoZQotICAgZm9sbG93aW5nOgotCi0gIC1E U0VMRUNUX0gKLQotICAgdG8gdGhlIENGTEFHUyB0byB0ZWxsIEMtS2VybWl0IHRvICNpbmNsdWRl IDxzeXMvc2VsZWN0Lmg+LiBBIGdvb2QKLSAgIGluZGljYXRpb24gdGhhdCB5b3UgbmVlZCB0byBk byB0aGlzIHdvdWxkIGJlIGlmIHlvdSBnZXQgY29tcGlsZS10aW1lCi0gICBjb21wbGFpbnRzIGFi b3V0ICJmZF9zZXQiIG9yICJGRF9TRVQiIG5vdCBiZWluZyBkZWNsYXJlZCBvciBkZWZpbmVkLgot Ci0gICBJbiBVTklYLCB0aGUgdXNlIG9mIHNlbGVjdCgpIHZzIGZvcmsoKSBpbiB0aGUgQ09OTkVD VCBjb21tYW5kIGlzCi0gICBpbmRlcGVuZGVudCBvZiB0aGUgYWJvdmUgY29uc2lkZXJhdGlvbnMs IGFuZCBpcyBnb3Zlcm5lZCBieSBjaG9vc2luZyBhCi0gICBwYXJ0aWN1bGFyIG1ha2VmaWxlIHRh cmdldC4KLQotICAgQXMgb2YgQy1LZXJtaXQgNy4wLCBzZWxlY3QoKSBpcyBhbHNvIHRoZSBwcmVm ZXJyZWQgY29udHJvbCBtZWNoYW5pc20KLSAgIGZvciB0aGUgQ09OTkVDVCBjb21tYW5kLiBVbmZv cnR1bmF0ZWx5LCB0aGUgc3RydWN0dXJlcyB1c2VkIGJ5IHRoZQotICAgb3JpZ2luYWwgVU5JWCBD T05ORUNUIGNvbW1hbmQsIGJhc2VkIG9uIGZvcmsoKSwgYW5kIHRob3NlIHVzZWQgYnkKLSAgIHNl bGVjdCgpLCBhcmUgc28gZGlmZmVyZW50LCBpdCB3YXMgbm90IHByYWN0aWNhbCB0byBpbXBsZW1l bnQgdGhlbSBib3RoCi0gICBpbiBvbmUgbW9kdWxlLiBTbyB0aGUgc2VsZWN0KCktYmFzZWQgQ09O TkVDVCBjb21tYW5kIG1vZHVsZSBmb3IgVU5JWCBpcwotICAgWzE0Nl1ja3VjbnMuYywgYW5kIHRo ZSBmb3JrLWJhc2VkIG9uZSByZW1haW5zIFsxNDddY2t1Y29uLmMuIFRvIGNob29zZQotICAgdGhl IGZvcmstYmFzZWQgb25lLCB3aGljaCBpcyBtb3JlIHBvcnRhYmxlIChidXQgc2xvd2VyIGFuZCBt b3JlCi0gICBmcmFnaWxlKSwgdXNlICJ3ZXJtaXQiIGFzIHRoZSBtYWtlIHRhcmdldC4gVG8gY2hv b3NlIHRoZSBzZWxlY3QtYmFzZWQKLSAgIG9uZSwgdXNlICJ4ZXJtaXQiLiBPbmx5IGRvIHRoaXMg aWYgeW91IGNhbiB2ZXJpZnkgdGhhdCB0aGUgQ09OTkVDVAotICAgY29tbWFuZCB3b3JrcyBvbiBz ZXJpYWwgY29ubmVjdGlvbnMgYW5kIFBJUEUgY29ubmVjdGlvbnMgYXMgd2VsbCBhcyBUQ1AKLSAg IGNvbm5lY3Rpb25zLgotCi0gICAgIFRoZSBzZWxlY3QoKS1iYXNlZCBVbml4IENPTk5FQ1QgbW9k dWxlLCBja3VjbnMuYywgbXVzdCBiZSB1c2VkIGlmCi0gICAgIGVuY3J5cHRpb24gaXMgdG8gYmUg ZG9uZSwgc2luY2UgdGhlIGZvcmsoKSB2ZXJzaW9uIChja3Vjb24uYykgbG9zZXMKLSAgICAgaXRz IGFiaWxpdHkgdG8gc2hhcmUgdml0YWwgc3RhdGUgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgdHdv IGZvcmtzLgotICAgICBBbHNvIG5vdGUgdGhhdCB0aGUgc2VsZWN0KCkgdmVyc2lvbiBpcyBzdXBl cmlvciBpbiBtYW55IG90aGVyIHdheXMKLSAgICAgdG9vLiBGb3IgZXhhbXBsZSwgaXQgcmVjb3Zl cnMgYmV0dGVyIGZyb20gZXh0ZXJpb3Iga2lsbGluZywgZm9yY2VkCi0gICAgIGRpc2Nvbm5lY3Rp b25zLCBldGMsIHBsdXMgaXQgZ29lcyBmYXN0ZXIuCi0KLSAgIFNIT1cgVkVSU0lPTlMgdGVsbHMg d2hldGhlciB0aGUgQ09OTkVDVCBtb2R1bGUgdXNlcyBmb3JrKCkgb3Igc2VsZWN0KCkuCi0KLSAg IEMtS2VybWl0IDguMCBhZGRzIGxlYXJuZWQgc2NyaXB0IGNhcGFiaWxpdHksIHdoaWNoIGRlcGVu ZHMgb24gc2VsZWN0KCkuCi0gICBBbGwgdGhlICJ3ZXJtaXQiIGJhc2VkIHRhcmdldHMgKGFzIG9w cG9zZWQgdG8gInhlcm1pdCIpIGhhZCBOT0xFQVJOCi0gICBhZGRlZCB0byB0aGVtLiBXaGVuZXZl ciBjaGFuZ2luZyBhIHRhcmdldCBvdmVyIGZyb20gd2VybWl0IHRvIHhlcm1pdCwKLSAgIGFsc28g cmVtZW1iZXIgdG8gcmVtb3ZlIE5PTEVBUk4uCi0KLSAgIFsgWzE0OF1DLUtlcm1pdCBIb21lIF0g WyBbMTQ5XUtlcm1pdCBIb21lIF0KLQotICAxMi4gSS9PIFJFRElSRUNUSU9OCi0KLSAgIFsgWzE1 MF1Ub3AgXSBbIFsxNTFdQ29udGVudHMgXSBbIFsxNTJdTmV4dCBdIFsgWzE1M11QcmV2aW91cyBd Ci0KLSAgIFRoZSBSRURJUkVDVCBjb21tYW5kIGFsbG93cyBhIGxvY2FsIHByb2dyYW0gdG8gYmUg cnVuIHdpdGggaXRzIGkvbwotICAgcmVkaXJlY3RlZCBvdmVyIHRoZSBjb21tdW5pY2F0aW9ucyBj b25uZWN0aW9uLiBZb3VyIHZlcnNpb24gb2YgQy1LZXJtaXQKLSAgIGhhcyBhIFJFRElSRUNUIGNv bW1hbmQgaWYgaXQgd2FzIGJ1aWx0IHdpdGggdGhlIGZvbGxvd2luZyBDRkxBRzoKLQotICAtRENL X1JFRElSCi0KLSAgIFRoaXMsIGluIHR1cm4sIGlzIHBvc3NpYmxlIG9ubHkgaWYgdGhlIHVuZGVy bHlpbmcgQVBJIGlzIHRoZXJlLiBJbiB0aGUKLSAgIGNhc2Ugb2YgVU5JWCB0aGlzIGlzIGp1c3Qg dGhlIHdhaXQoKSBzeXN0ZW0gY2FsbCwgc28gYWxsIFVOSVggdmVyc2lvbnMKLSAgIGdldCB0aGlz IGZlYXR1cmUgYXMgb2YgNi4wLjE5MiAoZWFybGllciB2ZXJzaW9ucyBuZWVkZWQgYSA8c3lzL3dh aXQuaD4KLSAgIGhlYWRlciBmaWxlIGRlZmluaW5nIHRoZSBzeW1ib2xzIFdJRkVYSVRFRCBhbmQg V0VYSVRTVEFUVVMpLgotCi0gICBBcyBvZiB2ZXJzaW9uIDcuMCwgZmlsZSB0cmFuc2ZlciBjYW4g YmUgZG9uZSB1c2luZyBwaXBlcyBhbmQgZmlsdGVycy4KLSAgIFRvIGVuYWJsZSB0aGlzIGZlYXR1 cmUsICNkZWZpbmUgUElQRVNFTkQgKGFuZCBmaWxsIGluIHRoZSBjb2RlKS4gVG8KLSAgIGRpc2Fi bGUgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBub3JtYWxseSBlbmFibGVkLCBkZWZpbmUgTk9QSVBF U0VORC4KLSAgIFRoaXMgZmVhdHVyZSBpcywgb2YgY291cnNlLCBhbHNvIGRpc2FibGVkIGJ5IGJ1 aWxkaW5nIHdpdGggTk9QVVNIIChvcgotICAgZ2l2aW5nIHRoZSAibm9wdXNoIiBjb21tYW5kIGF0 IHJ1bnRpbWUpLgotCi0gICBDLUtlcm1pdCA3LjAgYWxzbyBhZGRzIHRoZSBQSVBFIGFuZCBTRVQg SE9TVCAvQ09NTUFORCBjb21tYW5kcywgd2hpY2gKLSAgIHByb3ZpZGUgYW5vdGhlciBmb3JtIG9m IHJlZGlyZWN0aW9uLiBUaGlzIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2l0aAotICAgLURORVRDTUQu IENLX1JESVIgbXVzdCBhbHNvIGJlIGRlZmluZWQsIHNpbmNlIHRoZSBzYW1lIG1lY2hhbmlzbXMg YXJlCi0gICB1c2VkIGludGVybmFsbHkuCi0KLSAgIFsgWzE1NF1DLUtlcm1pdCBIb21lIF0gWyBb MTU1XUtlcm1pdCBIb21lIF0KLQotICAxMy4gRkxPQVRJTkctUE9JTlQgTlVNQkVSUywgVElNRVJT LCBBTkQgQVJJVEhNRVRJQwotCi0gICBbIFsxNTZdVG9wIF0gWyBbMTU3XUNvbnRlbnRzIF0gWyBb MTU4XU5leHQgXSBbIFsxNTldUHJldmlvdXMgXQotCi0gICBGbG9hdGluZy1wb2ludCBzdXBwb3J0 IHdhcyBhZGRlZCBpbiBDLUtlcm1pdCA3LjAuCi0KLSAgIEZsb2F0aW5nLXBvaW50IG51bWJlcnMg YXJlIGVuYWJsZWQgaW50ZXJuYWxseSwgYXQgbGVhc3QgZm9yIHVzZSBpbgotICAgaGlnaC1wcmVj aXNpb24gZmlsZS10cmFuc2ZlciB0aW1lcnMgYW5kIHN0YXRpc3RpY3MsIHVubGVzcyB0aGUKLSAg IGZvbGxvd2luZyBzeW1ib2wgaXMgZGVmaW5lZCBhdCBjb21waWxlIHRpbWU6Ci0KLSAgLUROT0ZM T0FUCi0KLSAgIFRoaXMgbWlnaHQgYmUgbmVjZXNzYXJ5IG9uIG9sZCBQQ3MgdGhhdCBkbyBub3Qg aGF2ZSBidWlsdC1pbgotICAgZmxvYXRpbmctcG9pbnQgaGFyZHdhcmUuCi0KLSAgIFdoZW4gTk9G TE9BVCBpcyBub3QgZGVmaW5lZCwgdGhlIGZvbGxvd2luZyBzeW1ib2wgdGVsbHMgd2hpY2gKLSAg IGZsb2F0aW5nLXBvaW50IHR5cGUgdG8gdXNlOgotCi0gIC1EQ0tGTE9BVD14eHh4Ci0KLSAgIFRo ZSB2YWx1ZSBpcyBlaXRoZXIgImRvdWJsZSIgKG5vcm1hbCBmb3IgMzItIGFuZCAxNi1iaXQgYXJj aGl0ZWN0dXJlcykKLSAgIG9yICJmbG9hdCIgKG5vcm1hbCBmb3IgNjQtYml0IGFyY2hpdGVjdHVy ZXMpLgotCi0gICBDLUtlcm1pdCBjYW4gYmUgY29uZmlndXJlZCB0byB1c2UgaGlnaC1wcmVjaXNp b24gZmlsZS10cmFuc2ZlciB0aW1lcnMKLSAgIGZvciBtb3JlIGFjY3VyYXRlIHN0YXRpc3RpY3Mu IFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIHdpdGg6Ci0KLSAgLURHRlRJTUVSCi0KLSAgIGFuZCBk aXNhYmxlZCB3aXRoOgotCi0gIC1ETk9HRlRJTUVSCi0KLSAgIElmIHlvdSB0cnkgdG8gYnVpbGQg d2l0aCAtREdGVElNRVIgYnV0IHlvdSBnZXQgY29tcGlsYXRpb24gZXJyb3JzLAotICAgZWl0aGVy IGZpeCB0aGVtIChhbmQgc2VuZCBlbWFpbCB0byBrZXJtaXRAY29sdW1iaWEuZWR1IHRlbGxpbmcg d2hhdCB5b3UKLSAgIGRpZCksIG9yIGVsc2UgZ2l2ZSB1cCBhbmQgdXNlIC1ETk9HRlRJTUVSIChv ciAtRE5PRkxPQVQpIGluc3RlYWQuIEhpbnQ6Ci0gICBkZXBlbmRpbmcgb24geW91ciBtYWNoaW5l IGFyY2hpdGVjdHVyZSwgeW91IG1pZ2h0IGhhdmUgYmV0dGVyIGx1Y2sKLSAgIHVzaW5nIGRvdWJs ZSB0aGFuIGZsb2F0IGFzIHRoZSBkYXRhIHR5cGUgZm9yIGZsb2F0aW5nLXBvaW50IG51bWJlcnMs IG9yCi0gICB2aWNlIHZlcnNhLiBMb29rIGluIFsxNjBdY2tjZGViLmggZm9yIHRoZSBDS0ZMT0FU IGRlZmluaXRpb24uCi0KLSAgIEZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgaXMgYWxzbyBzdXBw b3J0ZWQgaW4gdGhlIHNjcmlwdCBwcm9ncmFtbWluZwotICAgbGFuZ3VhZ2UuIEZpcnN0IHZpYSB0 aGUgXGZwcC4uLigpIGZ1bmN0aW9ucywgc3VjaCBhcyBcZnBwYWRkKCksIHdoaWNoCi0gICBhZGRz IHR3byBmbG9hdGluZy1wb2ludCBudW1iZXJzLCBzZWNvbmQgaW4gUy1FeHByZXNzaW9ucy4gQWRk aXRpb24sCi0gICBzdWJ0cmFjdGlvbiwgbXVsdGlwbGljYXRpb24sIGFuZCBkaXZpc2lvbiBhcmUg YWx3YXlzIGF2YWlsYWJsZS4gQnV0Ci0gICBvdGhlciBmdW5jdGlvbnMgc3VjaCBhcyBsb2dzLCBy YWlzaW5nIHRvIHBvd2Vycywgc2luZXMgYW5kIGNvc2luZXMsCi0gICBldGMsIHJlcXVpcmUgdGhl IEMgTWF0aCBsaWJyYXJ5LiBUbyBpbmNsdWRlIHVzZXItbGV2ZWwgZmxvYXRpbmctcG9pbnQKLSAg IG1hdGggeW91IG11c3QgcHV0OgotCi0gIC1ERk5GTE9BVAotCi0gICBhbmQgaW4gVW5peCB5b3Ug bXVzdCBsaW5rIHdpdGggdGhlIE1hdGggbGlicmFyeToKLQotICBMSUJTPSIuLi4uIC1sbSIKLQot ICAgSW4gSzk1IGFuZCBWTVMsIEZORkxPQVQgaXMgZGVmaW5lZCBhdXRvbWF0aWNhbGx5IGlmIENL RkxPQVQgaXMgZGVmaW5lZC4KLSAgIEluIFVuaXgsIGhvd2V2ZXIsIEZORkxPQVQgbXVzdCBiZSBh ZGRlZCB0byBlYWNoIG1ha2VmaWxlIHRhcmdldAotICAgaW5kaXZpZHVhbGx5LCBiZWNhdXNlIG9m IHRoZSBzcGVjaWFsIGxpbmtpbmcgaW5zdHJ1Y3Rpb25zIHRoYXQgbXVzdAotICAgYWxzbyBiZSBh ZGRlZCB0byBlYWNoIHRhcmdldC4KLQotICAgTm90ZTogUy1FeHByZXNzaW9ucyByZXF1aXJlIEZO RkxPQVQuCi0KLSAgIFsgWzE2MV1DLUtlcm1pdCBIb21lIF0gWyBbMTYyXUtlcm1pdCBIb21lIF0K LQotICAxNC4gU1BFQ0lBTCBDT05GSUdVUkFUSU9OUwotCi0gICBbIFsxNjNdVG9wIF0gWyBbMTY0 XUNvbnRlbnRzIF0gWyBbMTY1XVByZXZpb3VzIF0KLQotICAgQXMgb2YgQy1LZXJtaXQgNy4wLCBp ZiB5b3UgYnVpbGQgQy1LZXJtaXQgbm9ybWFsbHksIGJ1dCB3aXRoIC1ETk9JQ1AKLSAgIChObyBJ bnRlcmFjdGl2ZSBDb21tYW5kIFBhcnNlciksIHlvdSBnZXQgYSBwcm9ncmFtIGNhcGFibGUgb2Yg bWFraW5nCi0gICBzZXJpYWwgY29ubmVjdGlvbnMgKGJ1dCBub3QgZGlhbGluZykgYW5kIG5ldHdv cmsgY29ubmVjdGlvbnMgKGlmCi0gICBUQ1BTT0NLRVQgb3Igb3RoZXIgbmV0d29yayBvcHRpb24g aW5jbHVkZWQpLCBhbmQgY2FuIGFsc28gdHJhbnNmZXIKLSAgIGZpbGVzIHVzaW5nIEtlcm1pdCBw cm90b2NvbCwgYnV0IG9ubHkgdmlhIGF1dG9kb3dubG9hZC91cGxvYWQuCi0gICBGdXJ0aGVybW9y ZSwgaWYgeW91IGNhbGwgdGhlIGV4ZWN1dGFibGUgInRlbG5ldCIsIGl0IHdpbGwgYWN0IGxpa2UK LSAgIFRlbG5ldCAtLSB1c2luZyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMuIEhvd2V2ZXIsIGlu IHRoaXMgY2FzZSB0aGVyZQotICAgaXMgbm90aGluZyB0byBlc2NhcGUgYmFjayB0bywgc28gaWYg eW91IHR5cGUgQ3RybC1cYywgaXQganVzdCBwcmludHMgYQotICAgbWVzc2FnZSB0byB0aGlzIGVm ZmVjdC4KLQotICAgWW91IGNhbiBhbHNvIGJ1aWxkIEMtS2VybWl0IHdpdGggLUROT1hGRVIsIG1l YW5pbmcgb21pdCBhbGwgdGhlCi0gICBmaWxlLXRyYW5zZmVyIGZlYXR1cmVzLiBUaGlzIGxlYXZl cyB5b3Ugd2l0aCBhIHNjcmlwdGFibGUKLSAgIGNvbW11bmljYXRpb25zIHByb2dyYW0gdGhhdCBp cyBjb25zaWRlcmFibHkgc21hbGxlciB0aGFuIHRoZSBmdWxsCi0gICBDLUtlcm1pdC4KLQotICAg WyBbMTY2XUMtS2VybWl0IEhvbWUgXSBbIFsxNjddS2VybWl0IEhvbWUgXQotCi0gIEFQUEVORElY IEk6IFNVTU1BUlkgT0YgQ09NUElMRS1USU1FIE9QVElPTlMKLQotICAgWyBbMTY4XVRvcCBdIFsg WzE2OV1Db250ZW50cyBdCi0KLSAgIFRoZXNlIGFyZSB0aGUgc3ltYm9scyB0aGF0IGNhbiBiZSBz cGVjaWZpZWQgb24gdGhlIGNjIGNvbW1hbmQgbGluZSwKLSAgIGxpc3RlZCBhbHBoYWJldGljYWxs eS4gT3RoZXJzIGFyZSB1c2VkIGludGVybmFsbHksIGluY2x1ZGluZyB0aG9zZQotICAgdGFrZW4g ZnJvbSBoZWFkZXIgZmlsZXMsIHRob3NlIGRlZmluZWQgYnkgdGhlIGNvbXBpbGVyIGl0c2VsZiwg YW5kCi0gICB0aG9zZSBpbmZlcnJlZCBmcm9tIHRoZSBvbmVzIGdpdmVuIGJlbG93LiBLZXJtaXQn cyBTSE9XIFZFUlNJT05TCi0gICBjb21tYW5kIGF0dGVtcHRzIHRvIGRpc3BsYXkgbW9zdCBvZiB0 aGVzZS4gU2VlIFsxNzBdY2tjZGViLmggYW5kCi0gICBbMTcxXWNrY25ldC5oIGZvciBpbmZlcmVu Y2UgcnVsZXMuIEZvciBleGFtcGxlIFNWUjMgaW1wbGllcyBBVFRTViwKLSAgIE1VTFRJTkVUIGlt cGxpZXMgVENQU09DS0VULCBhbmQgc28gb24uCi0KLSAgIEhlcmUgaXMgdGhlIGNvbXBsZXRlIGxp c3Qgb2YgdGhlIEtlcm1pdC1zcGVjaWZpYyBjb21waWxlLXRpbWUgc3dpdGNoZXM6Ci0KLSAgIEFD VUNOVFJMIFNlbGVjdCBCU0QgNC4zLXN0eWxlIGFjdWNudHJsKCkgYmlkaXJlY3Rpb25hbCB0dHkg Y29udHJvbC4KLSAgIGFlZ2lzIEJ1aWxkIGZvciBBcG9sbG8gQWVnaXMgKHByZWRlZmluZWQgb24g QXBvbGxvIHN5c3RlbXMpLgotICAgQUlYMzcwIEJ1aWxkIGZvciBJQk0gQUlYLzM3MCBmb3IgSUJN IG1haW5mcmFtZXMuCi0gICBBSVhFU0EgQnVpbGQgZm9yIElCTSBBSVgvRVNBIGZvciBJQk0gbWFp bmZyYW1lcy4KLSAgIEFJWFBTMiBCdWlsZCBmb3IgSUJNIEFJWCAzLjAgZm9yIFBTLzIgc2VyaWVz IChuZXZlciBmb3JtYWxseSByZWxlYXNlZCkuCi0gICBBSVhSUyBCdWlsZCBmb3IgSUJNIEFJWCAz Lnggb24gUlMvNjAwMC4KLSAgIEFJWDQxIEJ1aWxkIGZvciBJQk0gQUlYIDQueCBvbiBSUy82MDAw LgotICAgQU1JR0EgQnVpbGQgZm9yIENvbW1vZG9yZSBBbWlnYSB3aXRoIEludHVpdGlvbiBPUy4K LSAgIEFUVDYzMDAgQnVpbGQgZm9yIEFUJlQgNjMwMCBQTFVTLgotICAgQVRUNzMwMCBCdWlsZCBm b3IgQVQmVCA3MzAwIFVOSVggUEMgKDNCMSkuCi0gICBBVFRTViBCdWlsZCBmb3IgQVQmVCBTeXN0 ZW0gSUlJIG9yIFYgVU5JWC4KLSAgIEFVWCBCdWlsZCBmb3IgQXBwbGUgQS9VWCBmb3IgdGhlIE1h Y2ludG9zaC4KLSAgIEJJR0JVRk9LIE9LIHRvIHVzZSBiaWcgYnVmZmVycyAtICJtZW1vcnkgaXMg bm90IGEgcHJvYmxlbSIKLSAgIEJQU194eHh4IEVuYWJsZSBTRVQgU1BFRUQgeHh4eAotICAgQlNE MjkgQnVpbGQgZm9yIEJTRCAyLjkgb3IgMi4xMC4KLSAgIEJTRDQgQnVpbGQgZm9yIEJTRCA0LjIu Ci0gICBCU0Q0MSBCdWlsZCBmb3IgQlNEIDQuMS4KLSAgIEJTRDQzIEJ1aWxkIGZvciBCU0QgNC4z LgotICAgQlNENDQgQnVpbGQgZm9yIEJTRCA0LjQuCi0gICBDNzAgQnVpbGQgZm9yIEJCTiBDLzcw LgotICAgQ0lFIEJ1aWxkIGZvciBDSUUgU3lzdGVtcyA2ODAvMjAuCi0gICBDS0NPTklOVEI0Q0Ig V29yayBhcm91bmQgcHJvbXB0LWRpc2FwcGVhcnMgYWZ0ZXIgZXNjYXBlIGJhY2sgZnJvbQotICAg Q09OTkVDVC4KLSAgIENLTEVBUk4gQnVpbGQgd2l0aCBzdXBwb3J0IGZvciBsZWFybmVkIHNjcmlw dHMuCi0gICBDS0xPR0RJQUwgRW5hYmxlIGNvbm5lY3Rpb24gbG9nLgotICAgQ0tNQVhQQVRIIE1h eGltdW0gbGVuZ3RoIGZvciBhIGZ1bGx5IHF1YWxpZmllZCBmaWxlbmFtZS4KLSAgIENLUkVHRVgg KG1pc25vbWVyKSBJbmNsdWRlIFsuLi5dIG9yIHt4eHgseHh4LHh4eH0gbWF0Y2hpbmcgaW4KLSAg IGNrbWF0Y2goKS4KLSAgIENLU1lTTE9HIEVuYWJsZSBzeXNsb2dnaW5nLgotICAgQ0tfQU5TSUMg RW5hYmxlIEFOU0kgQyBjb25zdHJ1Y3RzIC0gcHJvdG90eXBlcywgZXRjLgotICAgQ0tfQU5TSUxJ QlMgVXNlIGhlYWRlciBmaWxlcyBmb3IgQU5TSSBDIGxpYnJhcmllcy4KLSAgIENLX0FQQyBFbmFi bGUgQVBDIGV4ZWN1dGlvbiBieSBDT05ORUNUIG1vZHVsZS4KLSAgIENLX0NVUlNFUyBFbmFibGUg ZnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkuCi0gICBDS19EU1lTSU5JIFVzZSBzeXN0 ZW0td2lkZSBpbml0IGZpbGUsIHdpdGggbmFtZSBzdXBwbGllZCBieSBLZXJtaXQuCi0gICBDS19E VFJDRCBEVFIvQ0QgZmxvdyBjb250cm9sIGlzIGF2YWlsYWJsZS4KLSAgIENLX0ZBU1QgQnVpbGQg d2l0aCBmYXN0IEtlcm1pdCBwcm90b2NvbCBkZWZhdWx0cy4KLSAgIENLX0ZPUktfU0lHIFVOSVgg b25seTogc2lnbmFsKCkgbnVtYmVyIGZvciBDT05ORUNUIG1vZHVsZSBmb3Jrcy4KLSAgIENLX0lG Uk8gSUYgUkVNT1RFIGNvbW1hbmQgaXMgYXZhaWxhYmxlIChhbmQgY2FuIHJ1biBpbiByZW1vdGUg bW9kZSkuCi0gICBDS19JTklfQSBTeXN0ZW0td2lkZSBpbml0IGZpbGUgdGFrZXMgcHJlY2VkZW5j ZSBvdmVyIHVzZXIncy4KLSAgIENLX0lOSV9CIFVzZXIncyBpbml0IGZpbGUgdGFrZXMgcHJlY2Vk ZW5jZSBvdmVyIHRoZSBzeXN0ZW0td2lkZSBvbmUuCi0gICBDS19MQUJFTEVEIEluY2x1ZGUgc3Vw cG9ydCBmb3IgU0VUIEZJTEUgVFlQRSBMQUJFTEVELgotICAgQ0tfTEJSSyBUaGlzIHZlcnNpb24g Y2FuIHNlbmQgTG9uZyBCUkVBSy4KLSAgIENLX0xJTkdFUiBBZGQgY29kZSB0byB0dXJuIG9mIFRD UCBzb2NrZXQgImxpbmdlciIgcGFyYW1ldGVyLgotICAgQ0tfTUtESVIgVGhpcyB2ZXJzaW9uIGhh cyBhIHpta2RpcigpIGNvbW1hbmQgdG8gY3JlYXRlIGRpcmVjdG9yaWVzLgotICAgQ0tfTkFXUyBJ bmNsdWRlIFRFTE5FVCBOZWdvdGlhdGUgQWJvdXQgV2luZG93IFNpemUgc3VwcG9ydC4KLSAgIENL X05FV1RFUk0gVXNlIG5ld3Rlcm0oKSByYXRoZXIgdGhhbiBpbml0c2NyKCkgdG8gaW5pdGlhbGl6 ZSBjdXJzZXMuCi0gICBDS19QQU0gSW5jbHVkZSBQQU0gYXV0aGVudGljYXRpb24gKG1pZ2h0IGFs c28gcmVxdWlyZSAtbHBhbSkuCi0gICBDS19QQ1RfQkFSIEZ1bGxzY3JlZW4gZmlsZSB0cmFuc2Zl ciBkaXNwbGF5IHNob3VsZCBpbmNsdWRlCi0gICAidGhlcm1vbWV0ZXIiLgotICAgQ0tfUE9MTCBT eXN0ZW0tViBvciBQT1NJWCBiYXNlZCBVTklYIGhhcyBwb2xsKCkgZnVuY3Rpb24uCi0gICBDS19Q T1NJWF9TSUcgVXNlIFBPU0lYIHNpZ25hbCBoYW5kaW5nOiBzaWdqbXBfYnVmLCBzaWdzZXRqbXAs Ci0gICBzaWdsb25nam1wLgotICAgQ0tfUkVBRDAgcmVhZChmZCwmeCwwKSBjYW4gYmUgdXNlZCB0 byB0ZXN0IFRDUC9JUCBjb25uZWN0aW9ucy4KLSAgIENLX1JFRElSIEVuYWJsZSB0aGUgUkVESVJF Q1QgY29tbWFuZC4KLSAgIENLX1JFU0VORCBJbmNsdWRlIHRoZSBSRVNFTkQgY29tbWFuZCAobmVl ZHMgemZzZWVrKCkgKyBhcHBlbmQpLgotICAgQ0tfUlRTQ1RTIFJUUy9DVFMgZmxvdyBjb250cm9s IGlzIGF2YWlsYWJsZS4KLSAgIENLX1NIQURPVyBJbmNsdWRlIHN1cHBvcnQgZm9yIHNoYWRvdyBw YXNzd29yZHMgKGUuZy4gZm9yIElLU0QKLSAgIGF1dGhlbnRpY2F0aW9uKS4KLSAgIENLX1NPQ0tC VUYgRW5hYmxlIFRDUCBzb2NrZXQtYnVmZmVyLXNpemUtaW5jcmVhc2luZyBjb2RlLgotICAgQ0tf U09DS1MgVU5JWCBvbmx5OiBCdWlsZCB3aXRoIHNvY2tzIGxpYnJhcnkgcmF0aGVyIHRoYW4gcmVn dWxhcgotICAgc29ja2V0cwotICAgQ0tfU09DS1M1IFVOSVggb25seTogQnVpbGQgd2l0aCBzb2Nr cyA1IGxpYiByYXRoZXIgdGhhbiByZWd1bGFyIHNvY2tldHMKLSAgIENLX1NQRUVEIEVuYWJsZSBj b250cm9sLWNoYXJhY3RlciB1bnByZWZpeGluZy4KLSAgIENLX1NZU0lOST0ieHh4eHgiIFF1b3Rl ZCBzdHJpbmcgdG8gYmUgdXNlZCBhcyBzeXN0ZW0td2lkZSBpbml0IGZpbGUKLSAgIG5hbWUuCi0g ICBDS19USU1FUlMgQnVpbGQgd2l0aCBzdXBwb3J0IGZvciBkeW5hbWljYWxseSBjYWxjdWxhdGVk IHBhY2tldAotICAgdGltZW91dHMuCi0gICBDS19UTVBESVIgVGhpcyB2ZXJzaW9uIG9mIEtlcm1p dCBoYXMgYW4gaXNkaXIoKSBmdW5jdGlvbi4KLSAgIENLX1RUWUZEIERlZmluZWQgb24gc3lzdGVt cyB3aGVyZSB0aGUgY29tbXVuaWNhdGlvbnMgY29ubmVjdGlvbiBmaWxlCi0gICBkZXNjcmlwdG9y ICh0dHlmZCkgY2FuIGJlIHBhc3NlZCB0byBvdGhlciBwcm9jZXNzZXMgYXMgYSBjb21tYW5kLWxp bmUKLSAgIGFyZ3VtZW50IHZpYSBcdih0dHlmZCkuCi0gICBDS19VUkwgUGFyc2UgVVJMcyBhcyB3 ZWxsIGFzIGhvc3RuYW1lcywgZXRjLgotICAgQ0tfWE9OWE9GRiBYb24vWG9mZiBmbG93IGNvbnRy b2wgYXZhaWxhYmxlLgotICAgQ0tfWFlaIEluY2x1ZGUgc3VwcG9ydCBmb3IgWFlaTU9ERU0gcHJv dG9jb2xzLgotICAgQ0tfV1JFRlJFU0ggQ3Vyc2VzIHBhY2thZ2UgaW5jbHVkZXMgd3JlZnJlc2go KSxjbGVhcm9rKCkgZm9yIHNjcmVlbgotICAgcmVmcmVzaC4KLSAgIENLRkxPQVQ9dHlwZSBGbG9h dGluZy1wb2ludCBkYXRhIHR5cGUsICJkb3VibGUiIG9yICJmbG9hdCIuCi0gICBDS1RZUF9IPXh4 eCBGb3JjZSBpbmNsdWRlIG9mIHh4eCBhcyA8dHlwZXMuaD4gZmlsZS4KLSAgIENMU09QTiBXaGVu IGhhbmdpbmcgdXAgYSB0dHkgZGV2aWNlLCBhbHNvIGNsb3NlIGFuZCByZW9wZW4gaXQuCi0gICBD TURERVAgTWF4aW11bSByZWN1cnNpb24gZGVwdGggZm9yIHNlbGYtcmVmZXJlbnRpYWwgdXNlci1k ZWZpbmVkIGZuJ3MuCi0gICBDT0hFUkVOVCBCdWlsZCBmb3IgTWFyayBXaWxsaWFtcyBDb2hlcmVu dCBVTklYCi0gICBDT05HU1BEIERlZmluZSBpZiB0aGlzIHZlcnNpb24gaGFzIGNvbmdzcGQoKSBy b3V0aW5lIGluIGNrP3Rpby5jCi0gICBkYXRhZ2VuZXJhbCBCdWlsZCBmb3IgRGF0YSBHZW5lcmFs IEFPUy9WUyBvciBBT1MvVlMgSUkKLSAgIERDTFBPUEVOIHBvcGVuKCkgaXMgYXZhaWxhYmxlIGJ1 dCBuZWVkcyB0byBiZSBkZWNsYXJlZAotICAgREVDX1RDUElQIEJ1aWxkIHdpdGggc3VwcG9ydCBm b3IgREVDIFRDUC9JUCAoVUNYKSBmb3IgKE9wZW4pVk1TCi0gICBER1VYNDMwIEJ1aWxkIGZvciBE Ry9VWCA0LjMwCi0gICBER1VYNTQwIEJ1aWxkIGZvciBERy9VWCA1LjQwCi0gICBERUZQQVI9eCBE ZWZhdWx0IHBhcml0eSwgMCwgJ2UnLCAnbycsICdtJywgb3IgJ3MnLgotICAgREZUVFk9eHh4IERl ZmF1bHQgY29tbXVuaWNhdGlvbnMgZGV2aWNlIG5hbWUuCi0gICBESVJFTlQgVU5JWCBkaXJlY3Rv cnkgc3RydWN0dXJlIHRvIGJlIHRha2VuIGZyb20gPGRpcmVudC5oPi4KLSAgIERJUlBXRFJQIFBy b21wdCBmb3IgcGFzc3dvcmQgaW4gUkVNT1RFIENXRCBjb21tYW5kLgotICAgRFRJTERFIEluY2x1 ZGUgVU5JWCB+IG5vdGF0aW9uIGZvciB1c2VybmFtZS9ob21lLWRpcmVjdG9yeQotICAgRFlOQU1J QyBBbGxvY2F0ZSBmaWxlIHRyYW5zZmVyIHBhY2tldCBidWZmZXJzIGR5bmFtaWNhbGx5IHdpdGgg bWFsbG9jLgotICAgRU5DT1JFIEJ1aWxkIGZvciBFbmNvcmUgTXVsdGltYXggY29tcHV0ZXJzLgot ICAgRVhDRUxBTiBCdWlsZCB3aXRoIGV4Y2VsYW4gVENQL0lQLgotICAgRk5GTE9BVCBJbmNsdWRl IGZsb2F0aW5nLXBvaW50IG1hdGggZnVuY3Rpb25zIChsb2dzLCBzaW4sIGNvcywgZXhwLAotICAg ZXRjKQotICAgRlQxOCBCdWlsZCBmb3IgRm9ydHVuZSBGb3I6UHJvIDEuOC4KLSAgIEZUMjEgQnVp bGQgZm9yIEZvcnR1bmUgRm9yOlBybyAyLjEuCi0gICBHRU1ET1MgQnVpbGQgZm9yIEF0YXJpIFNU IEdFTURPUy4KLSAgIEdGVElNRVIgVXNlIGhpZ2gtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGZp bGUtdHJhbnNmZXIgdGltZXJzLgotICAgR0lEX1Q9eHh4IEdyb3VwIElEcyBhcmUgb2YgdHlwZSB4 eHggKHVzdWFsbHkgaW50LCBzaG9ydCwgb3IgZ2lkX3QpLgotICAgSEFERFJMSVNUIElmIGdldGhv c3RieW5hbWUoKSBob3N0ZW50IHN0cnVjdCBjb250YWlucyBhIGxpc3Qgb2YKLSAgIGFkZHJlc3Nl cy4KLSAgIEhEQlVVQ1AgQnVpbGQgd2l0aCBzdXBwb3J0IGZvciBIb25leSBEYW5CZXIgVVVDUC4K LSAgIEhQVVggQnVpbGQgZm9yIEhld2xldHQgUGFja2FyZCBIUC1VWC4KLSAgIEhQVVg5IEJ1aWxk IGZvciBIZXdsZXR0IFBhY2thcmQgSFAtVVggOS54LgotICAgSFBVWDEwIEJ1aWxkIGZvciBIZXds ZXR0IFBhY2thcmQgSFAtVVggMTAueC4KLSAgIEhXUEFSSVRZIERlZmluZSBpZiB0aGlzIHZlcnNp b24gY2FuIFNFVCBQQVJJVFkgSEFSRFdBUkUgeyBFVkVOLCBPREQuLi59Ci0gICBJMzg2SVggQnVp bGQgZm9yIEludGVyYWN0aXZlIFN5c3RlbSBWIFIzLgotICAgSUZERUJVRyBBZGQgSUYgc3RtdHMg ImlmIChkZWJsb2cpIiBiZWZvcmUgImRlYnVnKCkiIGNhbGxzLgotICAgSU5BRERSWCBUQ1AvSVAg aW5ldF9hZGRyKCkgdHlwZSBpcyBzdHJ1Y3QgaW5hZGRyLCBub3QgdW5zaWduZWQgbG9uZy4KLSAg IElOVEVSTEFOIEJ1aWxkIHdpdGggc3VwcG9ydCBmb3IgUmFjYWwvSW50ZXJsYW4gVENQL0lQLgot ICAgSVNESVJCVUcgU3lzdGVtIGRlZnMgb2YgU19JU0RJUiBhbmQgU19JU1JFRyBoYXZlIGJ1Zywg ZGVmaW5lIG91cnNlbHZlcy4KLSAgIElTSUlJIEJ1aWxkIGZvciBJbnRlcmFjdGl2ZSBTeXN0ZW0g SUlJLgotICAgSVgzNzAgQnVpbGQgZm9yIElCTSBJWC8zNzAuCi0gICBLQU5KSSBCdWlsZCB3aXRo IEthbmppIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gc3VwcG9ydC4KLSAgIExDS0RJUiBVVUNQ IGxvY2sgZGlyZWN0b3J5IGlzIC91c3Ivc3Bvb2wvdXVjcC9MQ0svLgotICAgTEZERVZOTyBVVUNQ IGxvY2tmaWxlIG5hbWUgdXNlcyBkZXZpY2UgbnVtYmVycywgYXMgaW4gU1ZSNC4KLSAgIExJTlVY RlNTVE5EIEZvciBMaW51eCwgdXNlIEZTU1RORCBVVUNQIGxvY2tmaWxlIGNvbnZlbnRpb25zIChk ZWZhdWx0KS4KLSAgIExPQ0tfRElSPXh4eCBVVUNQIGxvY2sgZGlyZWN0b3J5IGlzIHh4eCAocXVv dGVkIHN0cmluZykuCi0gICBMT0NLRiBVc2UgbG9ja2YoKSAoaW4gYWRkaXRpb24gdG8gbG9ja2Zp bGVzKSBvbiBzZXJpYWwgbGluZXMKLSAgIExPTkdGTiBCU0QgbG9uZyBmaWxlbmFtZXMgc3VwcG9y dGVkIHVzaW5nIDxkaXIuaD4gYW5kIG9wZW5kaXIoKS4KLSAgIExZTlhPUyBCdWlsZCBmb3IgTHlu eCBPUyAyLjIgb3IgbGF0ZXIgKFBPU0lYLWJhc2VkKS4KLSAgIE1BQyBCdWlsZCBmb3IgQXBwbGUg TWFjaW50b3NoIHdpdGggTWFjIE9TLgotICAgTUFUQ0hET1QgTWFrZSB3aWxkY2FyZHMgbWF0Y2gg ZmlsZW5hbWVzIHRoYXQgc3RhcnQgd2l0aCBwZXJpb2QgKC4pCi0gICBNQVhSUD1udW1iZXIgTWF4 aW11bSByZWNlaXZlLXBhY2tldCBsZW5ndGguCi0gICBNQVhTUD1udW1iZXIgTWF4aW11bSBzZW5k LXBhY2tldCBsZW5ndGguCi0gICBNREVCVUcgTWFsbG9jLWRlYnVnZ2luZyByZXF1ZXN0ZWQuCi0g ICBNSU5JRElBTCBNaW5pbXVtIG1vZGVtIGRpYWxlciBzdXBwb3J0OiBDQ0lUVCwgSGF5ZXMsIFVu a25vd24sIGFuZCBOb25lLgotICAgTUlOSVggQnVpbGQgZm9yIE1JTklYLgotICAgTUlQUyBCdWls ZCBmb3IgTUlQUyB3b3Jrc3RhdGlvbi4KLSAgIE1VTFRJTkVUIEJ1aWxkIHdpdGggc3VwcG9ydCBm b3IgVEdWIE11bHRpTmV0IFRDUC9JUCAoVkFYL1ZNUykuCi0gICBNX1VOSVggRGVmaW5lZCBieSBT Q08uCi0gICBOQVAgVGhlIG5hcCgpIGlzIGF2YWlsYWJsZSAoY29uZmxpY3RzIHdpdGggU0VMRUNU IGFuZCBVU0xFRVApCi0gICBOQVBIQUNLIFRoZSBuYXAoKSBjYWxsIGlzIGF2YWlsYWJsZSBidXQg b25seSBhcyBzeXNjYWxsKDMxMTIsLi4uKQotICAgTkRJUiBCU0QgbG9uZyBmaWxlbmFtZXMgc3Vw cG9ydGVkIHVzaW5nIDxuZGlyLmg+IGFuZCBvcGVuZGlyKCkuCi0gICBOREdQV05BTSBEb24ndCBk ZWNsYXJlIGdldHB3bmFtKCkuCi0gICBORFNZU0VSUkxJU1QgRG9uJ3QgZGVjbGFyZSBzeXNfZXJy bGlzdFtdLgotICAgTkVFRFNFTEVDVERFRlMgc2VsZWN0KCkgaXMgYXZhaWxhYmxlIGJ1dCB3ZSBu ZWVkIHRvIGRlZmluZSBGRF9ibGFoCi0gICBvdXJzZWx2ZXMuCi0gICBORVRDTUQgQnVpbGQgd2l0 aCBzdXBwb3J0IGZvciBTRVQgSE9TVCAvQ09NTUFORCBhbmQgUElQRSBjb21tYW5kcy4KLSAgIE5F WFQgQnVpbGQgZm9yIE5lWFQgTWFjaCAxLnggb3IgMi54IG9yIDMuMCwgMy4xLCBvciAzLjIuCi0g ICBORVhUMzMgQnVpbGQgZm9yIE5lWFQgTWFjaCAzLjMuCi0gICBOT0FOU0kgRGlzYWJsZSBBTlNJ IEMgZnVuY3Rpb24gcHJvdG90eXBpbmcuCi0gICBOT0FQQyBEbyBub3QgaW5jbHVkZSBDS19BUEMg Y29kZS4KLSAgIE5PQVJST1dLRVlTIEV4Y2x1ZGUgY29kZSB0byBwYXJzZSBBTlNJIGFycm93LWtl eSBzZXF1ZW5jZXMuCi0gICBOT0JfeHh4eCBEaXNhYmxlIFNFVCBTUEVFRCB4eHh4Ci0gICBOT0JJ R0JVRiBPdmVycmlkZSBCSUdCVUZPSyB3aGVuIGl0IGlzIHRoZSBkZWZhdWx0Ci0gICBOT0JSS0Mg RG9uJ3QgdHJ5IHRvIHJlZmVyIHRvIHRfYnJrYyBvciB0X2VvZiB0Y2hhcnMgc3RydWN0dXJlIG1l bWJlcnMuCi0gICBOT0NLRlFIT1NUTkFNRSBFeGNsdWRlIGNvZGUgdG8gZ2V0IGZ1bGx5IHF1YWxp ZmllZCBob3N0bmFtZSBpbiBjYXNlIGl0Ci0gICBjYXVzZXMgY29yZSBkdW1wcy4KLSAgIE5PQ0NU UkFQIERpc2FibGUgQ29udHJvbC1DIChTSUdJTlQpIHRyYXBwaW5nLgotICAgTk9DS1NQRUVEIERp c2FibGUgY29udHJvbC1wcmVmaXggcmVtb3ZhbCBmZWF0dXJlIChTRVQgQ09OVFJPTCkuCi0gICBO T0NLVElNRVJTIEJ1aWxkIHdpdGhvdXQgc3VwcG9ydCBmb3IgZHluYW1pYyB0aW1lcnMuCi0gICBO T0NLWFlaIE92ZXJyaWRlcyBDS19YWVouCi0gICBOT0NLUkVHRVggRG8gbm90IGluY2x1ZGUgWy4u Ll0gb3Ige3h4eCx4eHgseHh4fSBtYXRjaGluZyBpbiBja21hdGNoKCkuCi0gICBOT0NNREwgQnVp bGQgd2l0aCBubyBjb21tYW5kLWxpbmUgb3B0aW9uIHByb2Nlc3NpbmcuCi0gICBOT0NPVEZNQyBO byBDbG9zZShPcGVuKCkpIFRvIEZvcmNlIE1vZGUgQ2hhbmdlIChVTklYIHZlcnNpb24pLgotICAg Tk9DU0VUUyBCdWlsZCB3aXRoIG5vIHN1cHBvcnQgZm9yIGNoYXJhY3RlciBzZXQgdHJhbnNsYXRp b24uCi0gICBOT0NZUklMIEJ1aWxkIHdpdGggbm8gc3VwcG9ydCBmb3IgQ3lyaWxsaWMgY2hhcmFj dGVyIHNldCB0cmFuc2xhdGlvbi4KLSAgIE5PQ1lSSUxMSUMgRGl0dG8uCi0gICBOT0RFQlVHIEJ1 aWxkIHdpdGggbm8gZGVidWcgbG9nZ2luZyBjYXBhYmlsaXR5LgotICAgTk9ESUFMIEJ1aWxkIHdp dGggbm8gRElBTCBvciBTRVQgRElBTCBjb21tYW5kcy4KLSAgIE5PRElTUE8gQnVpbGQgdG8gYWx3 YXlzIHJlZnVzZSBpbmNvbWluZyBNQUlMIG9yIFJFTU9URSBQUklOVCBmaWxlcy4KLSAgIEROT0RJ U1BMQVkgQnVpbGQgd2l0aCBubyBmaWxlLXRyYW5zZmVyIGRpc3BsYXkuCi0gICBOT0VTQ1NFUSBC dWlsZCB3aXRoIG5vIHN1cHBvcnQgZm9yIEFOU0kgZXNjYXBlIHNlcXVlbmNlIHJlY29nbml0aW9u LgotICAgTk9GQVNUIERvIG5vdCBtYWtlIEZBU1QgS2VybWl0IHByb3RvY29sIHNldHRpbmdzIHRo ZSBkZWZhdWx0LgotICAgTk9GRFpFUk8gRG8gbm90IHVzZSBmaWxlIGRlc2NyaXB0b3IgMCBmb3Ig cmVtb3RlLW1vZGUgZmlsZSB0cmFuc2Zlci4KLSAgIE5PRklMRUggRG8gbm90ICNpbmNsdWRlIDxz eXMvZmlsZS5oPi4KLSAgIE5PRkxPQVQgRG9uJ3QgaW5jbHVkZSBhbnkgZmxvYXRpbmctcG9pbnQg ZGF0YSB0eXBlcyBvciBvcGVyYXRpb25zLgotICAgTk9GUklMTFMgQnVpbGQgd2l0aCAibm8gZnJp bGxzIiAodGhpcyBzaG91bGQgYmUgcGhhc2VkIG91dC4uLikKLSAgIE5PRlRSVU5DQVRFIEluY2x1 ZGUgdGhpcyBvbiBVTklYZXMgdGhhdCBkb24ndCBoYXZlIGZ0cnVuY2F0ZSgpLgotICAgTk9HRVRV U0VSU0hFTEwgSW5jbHVkZSB0aGlzIG9uIFVOSVhlcyB0aGF0IGRvbid0IGhhdmUgZ2V0dXNlcnNo ZWxsKCkuCi0gICBOT0dGVElNRVIgRG9uJ3QgdXNlIGhpZ2gtcHJlY2lzaW9uIGZsb2F0aW5nLXBv aW50IGZpbGUtdHJhbnNmZXIgdGltZXJzLgotICAgTk9IRUJSRVcgQnVpbGQgd2l0aCBubyBzdXBw b3J0IGZvciBIZWJyZXcgY2hhcmFjdGVyIHNldHMuCi0gICBOT0hFTFAgQnVpbGQgd2l0aCBubyBi dWlsdC1pbiBoZWxwLgotICAgTk9JS1NEIEJ1aWxkIHdpdGggSUtTRCBzdXBwb3J0IGV4Y2x1ZGVk LgotICAgTk9JTklUR1JPVVBTIEluY2x1ZGUgdGhpcyBvbiBVTklYZXMgdGhhdCBkb24ndCBoYXZl IGluaXRncm91cHMoKS4KLSAgIE5PSUNQIEJ1aWxkIHdpdGggbm8gaW50ZXJhY3RpdmUgY29tbWFu ZCBwYXJzZXIuCi0gICBOT0pDIEJ1aWxkIHdpdGggbm8gc3VwcG9ydCBmb3Igam9iIGNvbnRyb2wg KHN1c3BlbmQpLgotICAgTk9LQU5KSSBCdWlsZCB3aXRoIG5vIHN1cHBvcnQgZm9yIEphcGFuZXNl IEthbmppIGNoYXJhY3RlciBzZXRzLgotICAgTk9LVkVSQlMgQnVpbGQgd2l0aCBubyBzdXBwb3J0 IGZvciBrZXlib2FyZCB2ZXJicyAoXEt2ZXJicykuCi0gICBOT0xBVElOMiBCdWlsZCB3aXRoIG5v IElTTyBMYXRpbi0yIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gc3VwcG9ydC4KLSAgIE5PTEVB Uk4gQnVpbGQgd2l0aCBubyBzdXBwb3J0IGZvciBsZWFybmVkIHNjcmlwdHMuCi0gICBOT0xJTktC SVRTIFVzZSBvZiBTX0lTTE5LIGFuZCBfSUZMTksgdW50cnVzdHdvcnRoeTsgdXNlIHJlYWRsaW5r KCkKLSAgIGluc3RlYWQuCi0gICBOT0xPQ0FMIEJ1aWxkIHdpdGhvdXQgYW55IGxvY2FsLW1vZGUg ZmVhdHVyZXM6IE5vIE1ha2luZyBDb25uZWN0aW9ucy4KLSAgIE5PTE9HRElBTCBEaXNhYmxlIGNv bm5lY3Rpb24gbG9nLgotICAgTk9MT0dJTiBCdWlsZCB3aXRob3V0IElLU0QgKG5ldHdvcmsgbG9n aW4pIHN1cHBvcnQuCi0gICBOT0xTVEFUIE5vdCBPSyB0byB1c2UgbHN0YXQoKS4KLSAgIE5PTURN SFVQIEJ1aWxkIHdpdGhvdXQgIm1vZGVtLXNwZWNpZmljIGhhbmd1cCIgKGUuZy4gQVRIMCkgZmVh dHVyZS4KLSAgIE5PTUhIT1NUIEV4Y2x1ZGUgdGhlIG11bHRpaG9tZWQtaG9zdCBUQ1AvSVAgY29k ZSAoaWYgY29tcGlsYXRpb24KLSAgIGVycm9ycykKLSAgIE5PTUlOUFVUIEJ1aWxkIHdpdGhvdXQg TUlOUFVUIGNvbW1hbmQuCi0gICBOT01TRU5EIEJ1aWxkIHdpdGggbm8gTVNFTkQgY29tbWFuZC4K LSAgIE5PTkFXUyBEbyBub3QgaW5jbHVkZSBURUxORVQgTmVnb3RpYXRlIEFib3V0IFdpbmRvdyBT aXplIHN1cHBvcnQuCi0gICBOT05FVCBEbyBub3QgaW5jbHVkZSBhbnkgbmV0d29yayBzdXBwb3J0 LgotICAgTk9OT1NFVEJVRiAoU2VlIE5PU0VUQlVGKQotICAgTk9QQVJTRU4gQnVpbGQgd2l0aG91 dCBhdXRvbWF0aWMgcGFyaXR5IGRldGVjdGlvbi4KLSAgIE5PUElQRVNFTkQgRGlzYWJsZSBmaWxl IHRyYW5zZmVyIHVzaW5nIHBpcGVzIGFuZCBmaWx0ZXJzLgotICAgTk9QT0xMIE92ZXJyaWRlIENL X1BPTEwgZGVmaW5pdGlvbi4KLSAgIE5PUE9QRU4gVGhlIHBvcGVuKCkgbGlicmFyeSBjYWxsIGlz IG5vdCBhdmFpbGFibGUuCi0gICBOT1BVUkdFIEJ1aWxkIHdpdGggbm8gUFVSR0UgY29tbWFuZC4K LSAgIE5PUFVTSCBCdWlsZCB3aXRoIG5vIGVzY2FwZXMgdG8gb3BlcmF0aW5nIHN5c3RlbS4KLSAg IE5PUkVBTFBBVEggSW4gVU5JWCwgcmVhbHBhdGgoKSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxl LgotICAgTk9SRUNBTEwgRGlzYWJsZSB0aGUgY29tbWFuZC1yZWNhbGwgZmVhdHVyZS4KLSAgIE5P UkVESVJFQ1QgRGlzYWJsZSBSRURJUkVDVCBjb21tYW5kLgotICAgTk9SRU5BTUUgRG9uJ3QgdXNl IHJlbmFtZSgpIHN5c3RlbSBjYWxsLCB1c2UgbGluaygpL3VubGluaygpIChVTklYKS4KLSAgIE5P UkVTRU5EIEJ1aWxkIHdpdGggbm8gUkVTRU5EIGNvbW1hbmQuCi0gICBOT1JFVFJZIEJ1aWxkIHdp dGggbm8gY29tbWFuZC1yZXRyeSBmZWF0dXJlLgotICAgTk9TQ1JJUFQgQnVpbGQgd2l0aCBubyBT Q1JJUFQgY29tbWFuZC4KLSAgIE5PU0VMRUNUIERvbid0IHRyeSB0byB1c2Ugc2VsZWN0KCkuCi0g ICBOT1NFUlZFUiBCdWlsZCB3aXRoIG5vIFNFUlZFUiBtb2RlIGFuZCBubyBzZXJ2ZXItcmVsYXRl ZCBjb21tYW5kcy4KLSAgIE5PU0VUQlVGIERvbid0IG1ha2UgY29uc29sZSB3cml0ZXMgdW5idWZm ZXJlZC4KLSAgIE5PTk9TRVRCVUYgRE8gbWFrZSBjb25zb2xlIHdyaXRlcyB1bmJ1ZmZlcmVkLgot ICAgTk9TRVRSRVUgc2V0cmV1aWQoKSBhbmQvb3Igc2V0cmVnaWQoKSBub3QgYXZhaWxhYmxlLgot ICAgTk9TSE9XIEJ1aWxkIHdpdGggbm8gU0hPVyBjb21tYW5kIChub3QgcmVjb21tZW5kZWQhKS4K LSAgIE5PU0lHV0lOQ0ggRGlzYWJsZSBTSUdXSU5DSCBzaWduYWwgdHJhcHBpbmcuCi0gICBOT1NQ TCBCdWlsZCB3aXRoIG5vIHNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFnZS4KLSAgIE5PU1RBVCBE b24ndCBjYWxsIHN0YXQoKSBmcm9tIG1haW5saW5lIGNvZGUuCi0gICBOT1NZTUxJTksgSW5jbHVk ZSB0aGlzIGZvciBVTklYZXMgdGhhdCBkb24ndCBoYXZlIHJlYWRsaW5rKCkuCi0gICBOT1NZU0lP Q1RMSCBEbyBub3QgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPi4KLSAgIE5PU1lTVElNRUggQ28gbm90 IGluY2x1ZGUgPHN5cy90aW1lLmg+LgotICAgTk9TWVNMT0cgRGlzYWJsZSBzeXNsb2dnaW5nIGNv ZGUuCi0gICBOT1RDUE9QVFMgQnVpbGQgd2l0aCBubyBTRVQgVENQIG9wdGlvbnMgb3IgdW5kZXJs eWluZyBzdXBwb3J0LgotICAgTk9UTE9HIEJ1aWxkIHdpdGggbm8gc3VwcG9ydCBmb3IgdHJhbnNh Y3Rpb24gbG9nZ2luZy4KLSAgIE5PVE1fSVNEU1QgU3RydWN0IHRtIGhhcyBubyB0bV9pc2RzdCBt ZW1iZXIuCi0gICBOT1VOSUNPREUgQnVpbGQgd2l0aCBubyBzdXBwb3J0IGZvciBVbmljb2RlIGNo YXJhY3Rlci1zZXQgdHJhbnNsYXRpb24uCi0gICBOT1VSTCBEb24ndCBwYXJzZSBVUkxzCi0gICBO T1VVQ1AgQnVpbGQgd2l0aCBubyBVVUNQIGxvY2tmaWxlIHN1cHBvcnQgKGRhbmdlcm91cyEpLgot ICAgTk9XQVJOIE1ha2UgRVhJVCBXQVJOSU5HIGJlIE9GRiBieSBkZWZhdWx0IChvdGhlcndpc2Ug aXQncyBPTikuCi0gICBOT1dSRUZSRVNIIE92ZXJyaWRlIGJ1aWx0LWluIGRlZmluaXRpb24gb2Yg Q0tfV1JFRlJFU0ggKHEudi4pLgotICAgTk9YRkVSIEJ1aWxkIHdpdGggbm8gS2VybWl0IG9yIG90 aGVyIGZpbGUtdHJhbnNmZXIgcHJvdG9jb2xzLgotICAgTk9YTUlUIEJ1aWxkIHdpdGggbm8gVFJB TlNNSVQgY29tbWFuZC4KLSAgIE5PWFBSSU5UIERpc2FibGVzIHRyYW5zcGFyZW50IHByaW50IGNv ZGUuCi0gICBPTERNU0cgVXNlIG9sZCAiZW50ZXJpbmcgc2VydmVyIG1vZGUiIG1lc3NhZ2UgKHNl ZSBbMTcyXWNrY21haS5jKS4KLSAgIE9MSU5VWEhJU1BFRUQgQnVpbGQgaW4gb2xkIExpbnV4IGhp LXNlcmlhbC1zcGVlZCBjb2RlIChmb3IgTGludXggPD0KLSAgIDEuMCkuCi0gICBPUEVOQlNEIEJ1 aWxkIGZvciBPcGVuQlNELgotICAgT1MyIEJ1aWxkIGZvciBPUy8yLgotICAgT1NGIEJ1aWxkIGZv ciBPU0YvMS4KLSAgIE9TRlBDIEJ1aWxkIGZvciBPU0YvMSBvbiBhIFBDLgotICAgT1NGMzIgRGln aXRhbCBVTklYIDMuMiBvciBsYXRlci4KLSAgIE9TRjQwIEJ1aWxkIGZvciBEaWdpdGFsIFVOSVgg NC4wLgotICAgT1NGNTAgQnVpbGQgZm9yIERpZ2l0YWwgVU5JWCA1LjAuCi0gICBPU0sgQnVpbGQg Zm9yIE9TLTkuCi0gICBPWE9TIEJ1aWxkIGZvciBPbGl2ZXR0aSBYL09TIDIuMy4KLSAgIFBDSVgg QnVpbGQgZm9yIFBDL0lYCi0gICBQSURfVD14eHggVHlwZSBmb3IgcGlkcyBpcyB4eHggKG5vcm1h bGx5IGludCBvciBwaWRfdCkuCi0gICBQT1NJWCBCdWlsZCBmb3IgUE9TSVg6IHVzZSBQT1NJWCBo ZWFkZXIgZmlsZXMsIGZ1bmN0aW9ucywgZXRjLgotICAgX1BPU0lYX1NPVVJDRSBEaXNhYmxlIG5v bi1QT1NJWCBmZWF0dXJlcy4KLSAgIFBST1ZYMSBCdWlsZCBmb3IgVmVuaXggMS4wIG9uIERFQyBQ cm9mZXNzaW9uYWwgM3h4LgotICAgUFRYIEJ1aWxkIGZvciBEeW5peC9QVFgKLSAgIFBXSURfVD14 eHggZ2V0cHdpZCgpIHR5cGUgaXMgeHh4LgotICAgUkJTSVo9eHh4IERlZmluZSBvdmVyYWxsIHNp emUgb2YgcmVjZWl2ZS1wYWNrZXQgYnVmZmVyICh3aXRoIERZTkFNSUMpLgotICAgUkRDSEsgcmRj aGsoKSBzeXN0ZW0gY2FsbCBpcyBhdmFpbGFibGUuCi0gICBSRU5BTUUgcmVuYW1lKCkgc3lzdGVt IGNhbGwgaXMgYXZhaWxhYmxlIChVTklYKS4KLSAgIFJUQUlYIEJ1aWxkIGZvciBBSVggMi4yLjEg b24gSUJNIFJUIFBDLgotICAgUlRVIEJ1aWxkIGZvciBNYXNzY29tcCAvIENvbmN1cnJlbnQgUlRV LgotICAgU0FWRURVSUQgQlNEIG9yIG90aGVyIG5vbi1BVCZUIFVOSVggaGFzIHNhdmVkLXNldHVp ZCBmZWF0dXJlLgotICAgU0JTSVo9eHh4IERlZmluZSBvdmVyYWxsIHNpemUgb2Ygc2VuZC1wYWNr ZXQgYnVmZmVyICh1c2Ugd2l0aCBEWU5BTUlDKS4KLSAgIFNESVJFTlQgRGlyZWN0b3J5IHN0cnVj dHVyZSBzcGVjaWZpZWQgaW4gPHN5cy9kaXJlbnQuaD4uCi0gICBTRUxFQ1Qgc2VsZWN0KCkgZnVu Y3Rpb24gYXZhaWxhYmxlIChjb25mbGljdHMgd2l0aCBSRENISyBhbmQgQ0tfUE9MTCkKLSAgIFNF TEVDVF9IIEluY2x1ZGUgPHN5cy9zZWxlY3QuaD4gZm9yIHNlbGVjdCgpLXJlbGF0ZWQgZGVmaW5p dGlvbnMuCi0gICBTRVRFVUlEIEJTRCA0LjQtc3R5bGUgc2V0ZVhpZCgpIGZ1bmN0aW9ucyBhdmFp bGFibGUuCi0gICBTSUdfViBUeXBlIGZvciBzaWduYWwoKSBpcyB2b2lkLiBVc2VkIHRvIG92ZXJy aWRlIG5vcm1hbCBhc3N1bXB0aW9uLgotICAgU0lHX0kgVHlwZSBmb3Igc2lnbmFsKCkgaXMgaW50 LiBVc2VkIHRvIG92ZXJyaWRlIG5vcm1hbCBhc3N1bXB0aW9uLgotICAgU09DS09QVF9UIE92ZXJy aWRlIGRlZmF1bHQgZGF0YSB0eXBlIGZvciBnZXQvc2V0c29ja29wdCgpIG9wdGlvbgotICAgbGVu Z3RoLgotICAgU09MQVJJUyBCdWlsZCBmb3IgU29sYXJpcy4KLSAgIFNPTEFSSVMyNSBCdWlsZCBm b3IgU29sYXJpcyAyLjUgb3IgbGF0ZXIuCi0gICBTT05ZTkVXUyBCdWlsZCBmb3IgU29ueSBORVdT LU9TLgotICAgU1RFUk1JT1ggPHN5cy90ZXJtaW94Lmg+IGlzIGF2YWlsYWJsZS4KLSAgIFNUUkFU VVMgQnVpbGQgZm9yIFN0cmF0dXMgVk9TLgotICAgU1RSQVRVU1gyNSBJbmNsdWRlIFN0cmF0dXMg Vk9TIFguMjUgc3VwcG9ydC4KLSAgIFNVTjRTNSBCdWlsZCBmb3IgU1VOT1MgNC54IGluIHRoZSBT eXN0ZW0gViBSMyBlbnZpcm9ubWVudC4KLSAgIFNVTk9TNCBCdWlsZCBmb3IgU1VOT1MgNC4wIGlu IHRoZSBCU0QgZW52aXJvbm1lbnQuCi0gICBTVU5PUzQxIEJ1aWxkIGZvciBTVU5PUyA0LjEgaW4g dGhlIEJTRCBlbnZpcm9ubWVudC4KLSAgIFNVTlgyNSBCdWlsZCB3aXRoIHN1cHBvcnQgZm9yIFN1 bkxpbmsgWC4yNS4KLSAgIFNWUjMgQnVpbGQgZm9yIEFUJlQgU3lzdGVtIFYgUmVsZWFzZSAzLgot ICAgU1ZSM0pDIEFsbG93IGpvYiBjb250cm9sIHN1cHBvcnQgb24gU3lzdGVtIFYgUmVsZWFzZSAz IFVOSVggdmVyc2lvbnMuCi0gICBTVlI0IEJ1aWxkIGZvciBBVCZUIFN5c3RlbSBWIFJlbGVhc2Ug NC4KLSAgIFNXX0FDQ19JRCBVTklYIG9ubHkgLS0gc3dhcCByZWFsICYgZWZmZWN0aXZlIGlkcyBh cm91bmQgYWNjZXNzKCkgY2FsbHMuCi0gICBzeGFFNTAgQnVpbGQgZm9yIFBGVSBDb21wYWN0IEEg U2VyaWVzIFNYL0EgVElTUC4KLSAgIFNZU0xPR0xFVkVMPW4gRm9yY2Ugc3lzbG9nZ2luZyBhdCBn aXZlbiBsZXZlbC4KLSAgIFNZU1RJTUVIIEluY2x1ZGUgPHN5cy90aW1lLmg+LgotICAgU1lTVVRJ TUVIIEluY2x1ZGUgPHN5cy91dGltZS5oPiBmb3Igc2V0dGluZyBmaWxlIGRhdGVzICg4OE9QRU4p Ci0gICBUQ1BTT0NLRVQgQnVpbGQgd2l0aCBzdXBwb3J0IGZvciBUQ1AvSVAgdmlhIEJlcmtlbGV5 IHNvY2tldHMgbGlicmFyeS4KLSAgIFRFUk1JT1ggPHRlcm1pb3guaD4gaGVhZGVyIGZpbGUgaXMg YXZhaWxhYmxlIChtb3N0bHkgU1ZSNCkuCi0gICBUTkNPREUgSW5jbHVkZSBURUxORVQtc3BlY2lm aWMgY29kZS4KLSAgIFRPV0VSMSBCdWlsZCBmb3IgTkNSIFRvd2VyIDE2MzIgd2l0aCBPUyAxLjAy LgotICAgVFJTMTYgQnVpbGQgZm9yIFRhbmR5IDE2LzYwMDAuCi0gICBVSURfVD14eHggVHlwZSBm b3IgdWlkcyBpcyB4eHggKG5vcm1hbGx5IGludCBvciB1aWRfdCkuCi0gICBVTklYIE11c3QgYmUg ZGVmaW5lZCBmb3IgYWxsIFVOSVggdmVyc2lvbnMuCi0gICBVTklYMzUxTSBBVCZUIFVOSVggMy41 MW0gb24gdGhlIEFUJlQgNzMwMCBVTklYIFBDLgotICAgVVNFX0FSUk9XS0VZUyBJbmNsdWRlIGNv ZGUgdG8gcGFyc2UgQU5TSSBhcnJvdy1rZXkgc2VxdWVuY2VzLgotICAgVVNFX0xTVEFUIE9LIHRv IHVzZSBsc3RhdCgpLgotICAgVVNFX01FTUNQWSBEZWZpbmUgdGhpcyBpZiBtZW1jcHkoKS9tZW1z ZXQoKS9tZW1tb3ZlKCkgYXZhaWxhYmxlLgotICAgVVNFX1NUUkVSUk9SIERlZmluZSB0aGlzIGlm IHN0cmVycm9yKCkgaXMgYXZhaWxhYmxlLgotICAgVVNMRUVQIHVzbGVlcCgpIHN5c3RlbSBjYWxs IGF2YWlsYWJsZSAoY29uZmxpY3RzIHdpdGggTkFQICYgU0VMRUNUKS4KLSAgIFVURUsgQnVpbGQg Zm9yIFRla3Ryb25peCB3b3Jrc3RhdGlvbnMgd2l0aCBVVEVLIE9TLgotICAgVVRJTUVIIEluY2x1 ZGUgPHV0aW1lLmg+IGZvciBzZXR0aW5nIGZpbGUgZGF0ZXMgKFNWUjQsIFBPU0lYKQotICAgVVRT MjQgQnVpbGQgZm9yIEFtZGFobCBVVFMgMi40LgotICAgVjcgQnVpbGQgZm9yIFZlcnNpb24gNyBV TklYLgotICAgVk1TIEJ1aWxkIGZvciBWQVgvVk1TLgotICAgVk9JRD14eHggVk9JRCB0eXBlIGZv ciBmdW5jdGlvbnMgKGludCBvciB2b2lkKS4KLSAgIFZYVkUgQnVpbGQgZm9yIENEQyBWWC9WRSA1 LjIuMS4KLSAgIFdBSVRfVD14eHggVHlwZSBvZiBhcmd1bWVudCBwYXNzZWQgdG8gd2FpdCgpLgot ICAgV0lOVENQIEJ1aWxkIHdpdGggV29sbG9uZ29uZyBWQVgvVk1TIFRDUC9JUCAoaW1wbGllcyBU Q1BTT0NLRVQpCi0gICBXT0xMT05HT05HIEJ1aWxkIHdpdGggV29sbG9uZ29uZyBVTklYIFRDUC9J UCAoaW1wbGllcyBUQ1BTT0NLRVQpCi0gICBYRU5JWCBCdWlsZCBmb3IgWGVuaXggKFNDTywgVGFu ZHksIG90aGVycykuCi0gICBYTkRJUiBTdXBwb3J0IGZvciBCU0QgbG9uZyBmaWxlbmFtZXMgdmlh IDxzeXMvbmRpci5oPi4KLSAgIFhZWl9JTlRFUk5BTCBTdXBwb3J0IGZvciBYWVpNT0RFTSBwcm90 b2NvbHMgaXMgaW50ZXJuYWwsIG5vdCBleHRlcm5hbC4KLSAgIFpGQ0RBVCBEZWZpbmUgdGhpcyBp ZiB6ZmNkYXQoKSBmdW5jdGlvbiBpcyBhdmFpbGFibGUgaW4gS2VybWl0LgotICAgWklMT0cgQnVp bGQgZm9yIFppbG9nIFpFVVMuCi0gICBaSkRBVEUgSGFzIHpqZGF0ZSgpIGZ1bmN0aW9uIHRoYXQg Y29udmVydHMgZGF0ZSB0byBKdWxpYW4gZm9ybWF0LgotICAgWFBSSU5UIFRyYW5zcGFyZW50IHBy aW50IGNvZGUgaW5jbHVkZWQgaW4gQ09OTkVDVCBtb2R1bGUuCi0KLSAgIFsgWzE3M11Ub3AgXSBb IFsxNzRdQ29udGVudHMgXSBbIFsxNzVdQy1LZXJtaXQgSG9tZSBdIFsgWzE3Nl1LZXJtaXQKLSAg IEhvbWUgXQotICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KLQotCi0gICAgQy1LZXJtaXQgQ29uZmlndXJhdGlvbiBP cHRpb25zIC8gWzE3N11UaGUgS2VybWl0IFByb2plY3QgLwotICAgIFsxNzhda2VybWl0QGNvbHVt YmlhLmVkdSAvIDMwIEp1bmUgMjAxMQotCi1SZWZlcmVuY2VzCi0KLSAgIDEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1LwotICAgMi4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKLSAgIDMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gICA0LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1Lmh0bWwKLSAgIDUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgIDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3NjcmlwdHMuaHRtbAotICAgNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2N1cnJlbnQuaHRtbAotICAgOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3doYXRz bmV3Lmh0bWwKLSAgIDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mYXEuaHRtbAot ICAxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRtbAotICAxMS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sCi0gIDEyLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gIDEzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotICAxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrY2NmZy5odG1sI3gxCi0gIDE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjeDIKLSAgMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NjZmcuaHRtbCN4MwotICAxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr Y2NmZy5odG1sI3g0Ci0gIDE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2Zn Lmh0bWwjeDUKLSAgMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRt bCN4NgotICAyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g3 Ci0gIDIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDgKLSAg MjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4OQotICAyMy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gxMAotICAyNC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gxMQotICAyNS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gxMgotICAyNi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gxMwotICAyNy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gxNAotICAyOC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3hhMQotICAyOS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sCi0gIDMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdC5odG1sCi0gIDMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv aW5kZXguaHRtbAotICAzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5o dG1sI3RvcAotICAzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1s I2NvbnRlbnRzCi0gIDM0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0 bWwjeDIKLSAgMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4 MAotICAzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICAz Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAgMzguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN0b3AKLSAgMzkuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCNjb250ZW50cwotICA0MC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gzCi0gIDQxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDEKLSAgNDIuIGZ0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCi0gIDQzLiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NkZWIuaAotICA0NC4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dXMzLmMKLSAgNDUuIGZ0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2RlYi5oCi0gIDQ2LiBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYwotICA0Ny4gZnRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKLSAgNDguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgNDkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gIDUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCi0gIDUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVudHMKLSAgNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NjZmcuaHRtbCN4NAotICA1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2NmZy5odG1sI3gyCi0gIDU0LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9tYWtlZmlsZQotICA1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sCi0gIDU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDQKLSAgNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bCN4OS4yCi0gIDU4LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9j a3V1c3guYwotICA1OS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQv Y2t1dGlvLmMKLSAgNjAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0 L2NrdWZpby5jCi0gIDYxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1p dC9ja3V1c3guYwotICA2Mi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJt aXQvY2t1Y21kLmMKLSAgNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 Lmh0bWwKLSAgNjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0g IDY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCi0gIDY2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVudHMKLSAg NjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4NQotICA2OC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gzCi0gIDY5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdW5pY29kZS5odG1sCi0gIDcwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gIDcxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotICA3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY2NmZy5odG1sI3RvcAotICA3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2NmZy5odG1sI2NvbnRlbnRzCi0gIDc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjeDYKLSAgNzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NjZmcuaHRtbCN4NAotICA3Ni4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2t1dXNyLmgKLSAgNzcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2Mta2VybWl0L2NrdXVzci5oCi0gIDc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdC5odG1sCi0gIDc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXgu aHRtbAotICA4MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3Rv cAotICA4MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2NvbnRl bnRzCi0gIDgyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDcK LSAgODMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4NQotICA4 NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g2LjEKLSAgODUu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4Ni4yCi0gIDg2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDYuMwotICA4Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g2LjQKLSAgODguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4NAotICA4OS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2drZXJtaXQuaHRtbAotICA5MC4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dXNyLmgKLSAgOTEuIGZ0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2tlci5oCi0gIDkyLiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NkZWIuaAotICA5My4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICA5NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAgOTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCN0b3AKLSAgOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NjZmcuaHRtbCNjb250ZW50cwotICA5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2NmZy5odG1sI3g4Ci0gIDk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tjY2ZnLmh0bWwjeDYKLSAgOTkuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrdWRpYS5jCi0gMTAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdC5odG1sCi0gMTAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRt bAotIDEwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3RvcAot IDEwMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2NvbnRlbnRz Ci0gMTA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDkKLSAx MDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4NwotIDEwNi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g4LjEKLSAxMDcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4OC4yCi0gMTA4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDguMwotIDEwOS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g4LjEuMQotIDExMC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g4LjEuMgotIDExMS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g4LjEuMwotIDExMi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g4LjEuNAotIDExMy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g4LjEuNQotIDExNC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g4LjEuNgotIDExNS4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjbmV0LmgKLSAxMTYuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY3RlbC5jCi0gMTE3LiBmdHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2N0ZWwuYwotIDExOC4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjdGVsLmgKLSAxMTkuIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2Z0cC5jCi0gMTIwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMTIxLiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NuZXQuYwotIDEyMi4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjbmV0LmgKLSAxMjMuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCi0gMTI0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDExCi0gMTI1LiBtYWlsdG86 a2VybWl0QGNvbHVtYmlhLmVkdQotIDEyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQuaHRtbAotIDEyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4 Lmh0bWwKLSAxMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN0 b3AKLSAxMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCNjb250 ZW50cwotIDEzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gx MAotIDEzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g4Ci0g MTMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMTMzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDEzNC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3RvcAotIDEzNS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2NvbnRlbnRzCi0gMTM2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDExCi0gMTM3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDkKLSAxMzguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTEKLSAxMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAotIDE0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQuaHRtbAotIDE0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lu ZGV4Lmh0bWwKLSAxNDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRt bCN0b3AKLSAxNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCNj b250ZW50cwotIDE0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1s I3gxMgotIDE0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gx MAotIDE0Ni4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1Y25z LmMKLSAxNDcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWNv bi5jCi0gMTQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0g MTQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDE1MC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3RvcAotIDE1MS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2NvbnRlbnRzCi0gMTUyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDEzCi0gMTUzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDExCi0gMTU0LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMTU1LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDE1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY2NmZy5odG1sI3RvcAotIDE1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2NmZy5odG1sI2NvbnRlbnRzCi0gMTU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjeDE0Ci0gMTU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjY2ZnLmh0bWwjeDEyCi0gMTYwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9ja2NkZWIuaAotIDE2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQuaHRtbAotIDE2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4 Lmh0bWwKLSAxNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN0 b3AKLSAxNjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCNjb250 ZW50cwotIDE2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gx MwotIDE2Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDE2 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAxNjguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN0b3AKLSAxNjkuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCNjb250ZW50cwotIDE3MC4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjZGViLmgKLSAxNzEuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY25ldC5oCi0gMTcyLiBmdHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NtYWkuYwotIDE3My4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3RvcAotIDE3NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2NvbnRlbnRzCi0gMTc1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMTc2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDE3Ny4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAxNzguIG1haWx0bzprZXJtaXRAY29sdW1iaWEuZWR1 CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Nk ZWIuaCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjZGViLmgKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZmYwMDguLjAwMDAwMDAKLS0tIGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NkZWIuaAorKysgL2Rldi9udWxsCkBA IC0xLDY2MDcgKzAsMCBAQAotLyogIEMgSyBDIEQgRSBCIC4gSCAgKi8KLQotLyoKLU1vbiBBdWcg MjMgMDk6MjI6MDUgMjAxMAotCi0gIE5PVEUgVE8gQ09OVFJJQlVUT1JTOiBUaGlzIGZpbGUsIGFu ZCBhbGwgdGhlIG90aGVyIEMtS2VybWl0IGZpbGVzLCBtdXN0IGJlCi0gIGNvbXBhdGlibGUgd2l0 aCBDIHByZXByb2Nlc3NvcnMgdGhhdCBzdXBwb3J0IG9ubHkgI2lmZGVmLCAjZWxzZSwgI2VuZGlm LAotICAjZGVmaW5lLCBhbmQgI3VuZGVmLiAgUGxlYXNlIGRvIG5vdCB1c2UgI2lmLCBsb2dpY2Fs IG9wZXJhdG9ycywgb3Igb3RoZXIKLSAgbGF0ZXItbW9kZWwgcHJlcHJvY2Vzc29yIGZlYXR1cmVz IGluIGFueSBvZiB0aGUgcG9ydGFibGUgQy1LZXJtaXQgbW9kdWxlcy4KLSAgWW91IGNhbiwgb2Yg Y291cnNlLCB1c2UgdGhlc2UgY29uc3RydWN0aW9ucyBpbiBwbGF0Zm9ybS1zcGVjaWZpYyBtb2R1 bGVzCi0gIHdoZW4geW91IGtub3cgdGhleSBhcmUgc3VwcG9ydGVkLgotKi8KLQotLyoKLSAgVGhp cyBmaWxlIGlzIGluY2x1ZGVkIGJ5IGFsbCBDLUtlcm1pdCBtb2R1bGVzLCBpbmNsdWRpbmcgdGhl IG1vZHVsZXMKLSAgdGhhdCBhcmVuJ3Qgc3BlY2lmaWMgdG8gS2VybWl0IChsaWtlIHRoZSBjb21t YW5kIHBhcnNlciBhbmQgdGhlIGNrP3RpbyBhbmQKLSAgY2s/ZmlvIG1vZHVsZXMpLiAgSXQgc2hv dWxkIGJlIGluY2x1ZGVkIEJFRk9SRSBhbnkgb3RoZXIgQy1LZXJtaXQgaGVhZGVyCi0gIGZpbGVz LiAgSXQgc3BlY2lmaWVzIGZvcm1hdCBjb2RlcyBmb3IgZGVidWcoKSwgdGxvZygpLCBhbmQgc2lt aWxhcgotICBmdW5jdGlvbnMsIGFuZCBpbmNsdWRlcyBhbnkgbmVjZXNzYXJ5IGRlZmluaXRpb25z IHRvIGJlIHVzZWQgYnkgYWxsIEMtS2VybWl0Ci0gIG1vZHVsZXMsIGFuZCBhbHNvIGluY2x1ZGVz IHNvbWUgZmVhdHVyZSBzZWxlY3Rpb24gY29tcGlsZS10aW1lIHN3aXRjaGVzLCBhbmQKLSAgYWxz byBzeXN0ZW0tIG9yIGNvbXBpbGVyLWRlcGVuZGVudCBkZWZpbml0aW9ucywgcGx1cyAjaW5jbHVk ZXMgYW5kIHByb3RvdHlwZXMKLSAgcmVxdWlyZWQgYnkgYWxsIEMtS2VybWl0IG1vZHVsZXMuCi0q LwotCi0vKgotICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAotICBD b2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3Jr IENpdHkuCi0KLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDEwLAotICAgIFRydXN0ZWVzIG9mIENv bHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAg ICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFu ZCBwZXJtaXNzaW9ucy4KLSovCi0KLS8qCi0gIEV0eW1vbG9neTogVGhlIG5hbWUgb2YgdGhpcyBm aWxlIG1lYW5zICJDLUtlcm1pdCBDb21tb24tQy1MYW5ndWFnZSBEZWJ1Z2dpbmcKLSAgSGVhZGVy IiwgYmVjYXVzZSBvcmlnaW5hbGx5IGl0IGNvbnRhaW5lZCBvbmx5IHRoZSBmb3JtYXRzIChGMDAw LUYxMTEpIGZvcgotICB0aGUgZGVidWcoKSBhbmQgdGxvZygpIGZ1bmN0aW9ucy4gIFNpbmNlIHRo ZW4gaXQgaGFzIGdyb3duIHRvIGluY2x1ZGUgYWxsCi0gIG1hdGVyaWFsIHJlcXVpcmVkIGJ5IGFs bCBvdGhlciBDLUtlcm1pdCBtb2R1bGVzLCBpbmNsdWRpbmcgdGhlIG5vbi1LZXJtaXQKLSAgc3Bl Y2lmaWMgb25lcy4gIEluIG90aGVyIHdvcmRzLCB0aGlzIGlzIHRoZSBvbmUgaGVhZGVyIGZpbGUg dGhhdCBpcwotICBndWFyYW50ZWVkIHRvIGJlIGluY2x1ZGVkIGJ5IGFsbCBDLUtlcm1pdCBzb3Vy Y2UgbW9kdWxlcy4KLSovCi0KLSNpZm5kZWYgQ0tDREVCX0gJCQkvKiBEb24ndCBpbmNsdWRlIG1l IG1vcmUgdGhhbiBvbmNlLiAqLwotI2RlZmluZSBDS0NERUJfSAotCi0jaWZkZWYgT1MyCi0jaW5j bHVkZSAiY2tva2VyLmgiCi0jZWxzZSAvKiBPUzIgKi8KLS8qIFVuc2lnbmVkIG51bWJlcnMgKi8K LQotI2lmbmRlZiBVU0hPUlQKLSNkZWZpbmUgVVNIT1JUIHVuc2lnbmVkIHNob3J0Ci0jZW5kaWYg LyogVVNIT1JUICovCi0KLSNpZm5kZWYgVUlOVAotI2RlZmluZSBVSU5UIHVuc2lnbmVkIGludAot I2VuZGlmIC8qIFVJTlQgKi8KLQotI2lmbmRlZiBVTE9ORwotI2RlZmluZSBVTE9ORyB1bnNpZ25l ZCBsb25nCi0jZW5kaWYgLyogVUxPTkcgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE1B Q09TWDEwCQkJCS8qIE1hYyBPUyBYIDEuMCAqLwotI2lmbmRlZiBNQUNPU1gJCQkJLyogaW1wbGll cyBNYWMgT1MgWCAqLwotI2RlZmluZSBNQUNPU1gKLSNlbmRpZiAvKiBNQUNPU1ggKi8KLSNlbmRp ZiAvKiBNQUNPU1gxMCAqLwotCi0jaWZkZWYgTUFDT1NYCQkJCS8qIE1hYyBPUyBYICovCi0jaWZu ZGVmIEJTRDQ0CQkJCS8qIGltcGxpZXMgNC40IEJTRCAqLwotI2RlZmluZSBCU0Q0NAotI2VuZGlm IC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogTUFDT1NYICovCi0KLSNpZmRlZiBTQ09fT1NSNTA1CQkJ LyogU0NPIDMuMnY1LjAuNSAqLwotI2lmbmRlZiBTQ09fT1NSNTA0CQkJLyogaW1wbGllcyBTQ08g My4ydjUuMC40ICovCi0jZGVmaW5lIFNDT19PU1I1MDQKLSNlbmRpZiAvKiBTQ09fT1NSNTA0ICov Ci0jZW5kaWYgLyogU0NPX09TUjUwNSAqLwotCi0jaWZkZWYgU0NPX09TUjUwNAkJCS8qIFNDTyAz LjJ2NS4wLjQgKi8KLSNpZm5kZWYgQ0tfU0NPVjUJCQkvKiBpbXBsaWVzIFNDTyAzLjJ2NS4wICov Ci0jZGVmaW5lIENLX1NDT1Y1Ci0jZW5kaWYgLyogQ0tfU0NPVjUgKi8KLSNpbmNsdWRlIDxzeXMv dHlwZXMuaD4JCQkvKiBUbyBzaWRlc3RlcCBoZWFkZXItZmlsZSBtZXNzICovCi0jZW5kaWYgLyog U0NPX09TUjUwNCAqLwotCi0jaWZkZWYgQ0tfU0NPVjUKLSNpZm5kZWYgQU5ZU0NPCi0jZGVmaW5l IEFOWVNDTwotI2VuZGlmIC8qIEFOWVNDTyAqLwotI2VuZGlmIC8qIENLX1NDT1Y1ICovCi0KLSNp ZmRlZiBVTklYV0FSRQotI2lmbmRlZiBBTllTQ08KLSNkZWZpbmUgQU5ZU0NPCi0jZW5kaWYgLyog QU5ZU0NPICovCi0jZW5kaWYgLyogVU5JWFdBUkUgKi8KLQotI2lmbmRlZiBNSU5JWAkJCQkvKiBN aW5peCB2ZXJzaW9ucyAqLwotI2lmZGVmIE1JTklYMzE1Ci0jZGVmaW5lIE1JTklYCi0jZWxzZQot I2lmZGVmIE1JTklYMwotI2RlZmluZSBNSU5JWAotI2Vsc2UKLSNpZmRlZiBNSU5JWDIKLSNkZWZp bmUgTUlOSVgKLSNlbmRpZgkvKiBNSU5JWDIgKi8KLSNlbmRpZgkvKiBNSU5JWDMgKi8KLSNlbmRp ZgkvKiBNSU5JWDMxNSAqLwotI2VuZGlmCS8qIE1JTklYICovCi0KLSNpZmRlZiBDS19TQ08zMlY0 CQkJLyogU0NPIDMuMnY0ICovCi0jaWZuZGVmIEFOWVNDTwotI2RlZmluZSBBTllTQ08KLSNlbmRp ZiAvKiBBTllTQ08gKi8KLSNpZm5kZWYgWEVOSVgKLSNkZWZpbmUgWEVOSVgKLSNlbmRpZiAvKiBY RU5JWCAqLwotI2lmbmRlZiBTVlIzCi0jZGVmaW5lIFNWUjMKLSNlbmRpZiAvKiBTVlIzICovCi0j aWZuZGVmIERJUkVOVAotI2RlZmluZSBESVJFTlQKLSNlbmRpZiAvKiBESVJFTlQgKi8KLSNpZm5k ZWYgUkVOQU1FCi0jZGVmaW5lIFJFTkFNRQotI2VuZGlmIC8qIFJFTkFNRSAqLwotI2lmbmRlZiBT VlIzSkMKLSNkZWZpbmUgU1ZSM0pDCi0jZW5kaWYgLyogU1ZSM0pDICovCi0jaWZuZGVmIENLX1JU U0NUUwotI2RlZmluZSBDS19SVFNDVFMKLSNlbmRpZiAvKiBDS19SVFNDVFMgKi8KLSNpZm5kZWYg UElEX1QKLSNkZWZpbmUgUElEX1QgcGlkX3QKLSNlbmRpZiAvKiBQSURfVCAqLwotI2lmbmRlZiBQ V0lEX1QKLSNkZWZpbmUgUFdJRF9UIGludAotI2VuZGlmIC8qIFBXSURfVCAqLwotI2VuZGlmIC8q IENLX1NDTzMyVjQgKi8KLQotI2lmZGVmIE5PSUNQCQkJCS8qIElmIG5vIGNvbW1hbmQgcGFyc2Vy ICovCi0jaWZuZGVmIE5PU1BMCQkJCS8qIFRoZW4gbm8gc2NyaXB0IGxhbmd1YWdlIGVpdGhlciAq LwotI2RlZmluZSBOT1NQTAotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIE5PQ1NFVFMJCQkJ LyogT3IgY2hhcmFjZXIgc2V0cyAqLwotI2RlZmluZSBOT0NTRVRTCi0jZW5kaWYgLyogTk9DU0VU UyAqLwotI2lmbmRlZiBOT0ZUUAkJCQkvKiBPciBGVFAgY2xpZW50ICovCi0jZGVmaW5lIE5PRlRQ Ci0jZW5kaWYgLyogTk9GVFAgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0vKiBCdWlsdC1pbiBt YWtlZmlsZSBlbnRyaWVzICovCi0KLSNpZmRlZiBTT0xBUklTMTEJCQkvKiBTb2xhcmlzIDExIGlt cGxpZXMgMTAgKi8KLSNpZm5kZWYgU09MQVJJUzEwCi0jZGVmaW5lIFNPTEFSSVMxMAotI2VuZGlm IC8qIFNPTEFSSVMxMCAqLwotI2VuZGlmIC8qIFNPTEFSSVMxMSAqLwotCi0jaWZkZWYgU09MQVJJ UzEwCQkJLyogU29sYXJpcyAxMCBpbXBsaWVzIDkgKi8KLSNpZm5kZWYgU09MQVJJUzkKLSNkZWZp bmUgU09MQVJJUzkKLSNlbmRpZiAvKiBTT0xBUklTOSAqLwotI2VuZGlmIC8qIFNPTEFSSVMxMCAq LwotCi0jaWZkZWYgU09MQVJJUzkJCQkJLyogU29sYXJpcyA5IGltcGxpZXMgOCAqLwotI2lmbmRl ZiBTT0xBUklTOAotI2RlZmluZSBTT0xBUklTOAotI2VuZGlmIC8qIFNPTEFSSVM4ICovCi0jZW5k aWYgLyogU09MQVJJUzkgKi8KLQotI2lmZGVmIFNPTEFSSVM4CQkJCS8qIFNvbGFyaXMgOCBpbXBs aWVzIDcgKi8KLSNpZm5kZWYgU09MQVJJUzcKLSNkZWZpbmUgU09MQVJJUzcKLSNlbmRpZiAvKiBT T0xBUklTNyAqLwotI2VuZGlmIC8qIFNPTEFSSVM4ICovCi0KLSNpZmRlZiBTT0xBUklTNwkJCQkv KiBTb2xhcmlzIDcgaW1wbGllcyAyLjYgKi8KLSNpZm5kZWYgU09MQVJJUzI2Ci0jZGVmaW5lIFNP TEFSSVMyNgotI2VuZGlmIC8qIFNPTEFSSVMyNiAqLwotI2VuZGlmIC8qIFNPTEFSSVM3ICovCi0K LSNpZmRlZiBTT0xBUklTMjYJCQkvKiBTb2xhcmlzIDIuNiBpbXBsaWVzIDIuNSAqLwotI2lmbmRl ZiBTT0xBUklTMjUKLSNkZWZpbmUgU09MQVJJUzI1Ci0jZW5kaWYgLyogU09MQVJJUzI1ICovCi0j ZW5kaWYgLyogU09MQVJJUzI2ICovCi0KLSNpZmRlZiBTT0xBUklTMjUJCQkvKiBTb2xhcmlzIDIu NSBpbXBsaWVzIFNvbGFyaXMgKi8KLSNpZm5kZWYgU09MQVJJUwotI2RlZmluZSBTT0xBUklTCi0j ZW5kaWYgLyogU09MQVJJUyAqLwotI2lmbmRlZiBQT1NJWAkJCQkvKiBBbmQgUE9TSVggKi8KLSNk ZWZpbmUgUE9TSVgKLSNlbmRpZiAvKiBQT1NJWCAqLwotI2lmbmRlZiBDS19XUkVGUkVTSAkJCS8q IEFuZCB0aGlzIChjdXJzZXMpICovCi0jZGVmaW5lIENLX1dSRUZSRVNICi0jZW5kaWYgLyogQ0tf V1JFRlJFU0ggKi8KLSNlbmRpZiAvKiBTT0xBUklTMjUgKi8KLQotI2lmZGVmIFNPTEFSSVMyNAkJ CS8qIFNvbGFyaXMgMi40IGltcGxpZXMgU29sYXJpcyAqLwotI2lmbmRlZiBTT0xBUklTCi0jZGVm aW5lIFNPTEFSSVMKLSNlbmRpZiAvKiBTT0xBUklTICovCi0jZW5kaWYgLyogU09MQVJJUzI0ICov Ci0KLSNpZmRlZiBTT0xBUklTCQkJCS8qIFNvbGFyaXMgZ2V0cyAiUE9TSVgiIFJUUy9DVFMgQVBJ ICovCi0jaWZkZWYgUE9TSVgKLSNpZm5kZWYgUE9TSVhfQ1JUU0NUUwotI2RlZmluZSBQT1NJWF9D UlRTQ1RTCi0jZW5kaWYgLyogUE9TSVhfQ1JUU0NUUyAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0j aWZuZGVmIFNWUjQKLSNkZWZpbmUgU1ZSNAotI2VuZGlmCS8qIFNWUjQgKi8KLSNpZm5kZWYgU1RF Uk1JT1gKLSNkZWZpbmUgU1RFUk1JT1gKLSNlbmRpZgkvKiBTVEVSTUlPWCAqLwotI2lmbmRlZiBT RUxFQ1QKLSNkZWZpbmUgU0VMRUNUCi0jZW5kaWYJLyogU0VMRUNUICovCi0jaWZuZGVmIEZORkxP QVQKLSNkZWZpbmUgRk5GTE9BVAotI2VuZGlmCS8qIEZORkxPQVQgKi8KLSNpZm5kZWYgRElSRU5U Ci0jZGVmaW5lIERJUkVOVAotI2VuZGlmCS8qIERJUkVOVCAqLwotI2lmbmRlZiBCSUdCVUZPSwot I2RlZmluZSBCSUdCVUZPSwotI2VuZGlmCS8qIEJJR0JVRk9LICovCi0jaWZuZGVmIENLX05FV1RF Uk0KLSNkZWZpbmUgQ0tfTkVXVEVSTQotI2VuZGlmCS8qIENLX05FV1RFUk0gKi8KLSNlbmRpZiAv KiBTT0xBUklTICovCi0KLSNpZmRlZiBTVU40UzUJCQkJLyogU3VuLTQgU3lzdGVtIFYgZW52aXJv bm1lbnQgKi8KLSNpZm5kZWYgU1ZSMwkJCQkvKiBpbXBsaWVzIFN5c3RlbSBWIFIzIG9yIGxhdGVy ICovCi0jZGVmaW5lIFNWUjMKLSNlbmRpZiAvKiBTVlIzICovCi0jZW5kaWYgLyogU1VONFM1ICov Ci0jaWZkZWYgU1VOT1M0MQkJCQkvKiBTVU5PUzQxIGltcGxpZXMgU1VOT1M0ICovCi0jaWZuZGVm IFNVTk9TNAotI2RlZmluZSBTVU5PUzQKLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNlbmRpZiAvKiBT VU5PUzQxICovCi0KLSNpZmRlZiBTVU40UzUJCQkJLyogU3VuLTQgU3lzdGVtIFYgZW52aXJvbm1l bnQgKi8KLSNpZm5kZWYgU1ZSMwkJCQkvKiBpbXBsaWVzIFN5c3RlbSBWIFIzIG9yIGxhdGVyICov Ci0jZGVmaW5lIFNWUjMKLSNlbmRpZiAvKiBTVlIzICovCi0jZW5kaWYgLyogU1VONFM1ICovCi0K LSNpZmRlZiBTVU5PUzQxCQkJCS8qIFNVTk9TNDEgaW1wbGllcyBTVU5PUzQgKi8KLSNpZm5kZWYg U1VOT1M0Ci0jZGVmaW5lIFNVTk9TNAotI2VuZGlmIC8qIFNVTk9TNCAqLwotI2VuZGlmIC8qIFNV Tk9TNDEgKi8KLQotI2lmZGVmIFNVTk9TNAkJCQkvKiBCdWlsdC1pbiBTVU5PUzQgbWFrZWZpbGUg ZW50cnkgKi8KLSNpZm5kZWYgVU5JWAotI2RlZmluZSBVTklYCi0jZW5kaWYgLyogVU5JWCAqLwot I2lmbmRlZiBCU0Q0Ci0jZGVmaW5lIEJTRDQKLSNlbmRpZiAvKiBCU0Q0ICovCi0jaWZuZGVmIE5P U0VUQlVGCi0jZGVmaW5lIE5PU0VUQlVGCi0jZW5kaWYgLyogTk9TRVRCVUYgKi8KLSNpZm5kZWYg RElSRU5UCi0jZGVmaW5lIERJUkVOVAotI2VuZGlmIC8qIERJUkVOVCAqLwotI2lmbmRlZiBOT05F VAotI2lmbmRlZiBUQ1BTT0NLRVQKLSNkZWZpbmUgVENQU09DS0VUCi0jZW5kaWYgLyogVENQU09D S0VUICovCi0jZW5kaWYgLyogTk9ORVQgKi8KLSNpZm5kZWYgU0FWRURVSUQKLSNkZWZpbmUgU0FW RURVSUQKLSNlbmRpZiAvKiBTQVZFRFVJRCAqLwotI2lmbmRlZiBEWU5BTUlDCi0jZGVmaW5lIERZ TkFNSUMKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0jZW5kaWYgLyogU1VOT1M0ICovCi0KLSNpZmRl ZiBTT0xBUklTCQkJCS8qIEJ1aWx0IGluIG1ha2VmaWxlIGVudHJ5ICovCi0jaWZuZGVmIE5PU0VU QlVGCQkJLyogZm9yIFNvbGFyaXMgMi54ICovCi0jZGVmaW5lIE5PU0VUQlVGCi0jZW5kaWYgLyog Tk9TRVRCVUYgKi8KLSNpZm5kZWYgTk9DVVJTRVMKLSNpZm5kZWYgQ0tfQ1VSU0VTCi0jZGVmaW5l IENLX0NVUlNFUwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotI2VuZGlmIC8qIE5PQ1VSU0VTICov Ci0jaWZuZGVmIENLX05FV1RFUk0KLSNkZWZpbmUgQ0tfTkVXVEVSTQotI2VuZGlmIC8qIENLX05F V1RFUk0gKi8KLSNpZm5kZWYgRElSRU5UCi0jZGVmaW5lIERJUkVOVAotI2VuZGlmIC8qIERJUkVO VCAqLwotI2lmbmRlZiBOT05FVAotI2lmbmRlZiBUQ1BTT0NLRVQKLSNkZWZpbmUgVENQU09DS0VU Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogTk9ORVQgKi8KLSNpZm5kZWYgVU5J WAotI2RlZmluZSBVTklYCi0jZW5kaWYgLyogVU5JWCAqLwotI2lmbmRlZiBTVlI0Ci0jZGVmaW5l IFNWUjQKLSNlbmRpZiAvKiBTVlI0ICovCi0jaWZuZGVmIEhBRERSTElTVAotI2RlZmluZSBIQURE UkxJU1QKLSNlbmRpZiAvKiBIQUREUkxJU1QgKi8KLSNpZm5kZWYgU1RFUk1JT1gKLSNkZWZpbmUg U1RFUk1JT1gKLSNlbmRpZiAvKiBTVEVSTUlPWCAqLwotI2lmbmRlZiBTRUxFQ1QKLSNkZWZpbmUg U0VMRUNUCi0jZW5kaWYgLyogU0VMRUNUICovCi0jaWZuZGVmIERZTkFNSUMKLSNkZWZpbmUgRFlO QU1JQwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLSNpZm5kZWYgTk9VVUNQCi0jaWZuZGVmIEhEQlVV Q1AKLSNkZWZpbmUgSERCVVVDUAotI2VuZGlmIC8qIEhEQlVVQ1AgKi8KLSNlbmRpZiAvKiBOT1VV Q1AgKi8KLSNlbmRpZiAvKiBTT0xBUklTICovCi0KLS8qIEZlYXR1cmVzIHRoYXQgY2FuIGJlIGVs aW1pbmF0ZWQgZnJvbSBhIG5vLWZpbGUtdHJhbnNmZXIgdmVyc2lvbiAqLwotCi0jaWZkZWYgTk9Y RkVSCi0jaWZuZGVmIE5PRlRQCi0jZGVmaW5lIE5PRlRQCi0jZW5kaWYgLyogTk9GVFAgKi8KLSNp Zm5kZWYgT1MyCi0jaWZuZGVmIE5PQ1VSU0VTCQkJLyogRnVsbHNjcmVlbiBmaWxlLXRyYW5zZmVy IGRpc3BsYXkgKi8KLSNkZWZpbmUgTk9DVVJTRVMKLSNlbmRpZiAvKiBOT0NVUlNFUyAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotI2lmbmRlZiBOT0NLWFlaCQkJCS8qIFhZWk1PREVNIHN1cHBvcnQgKi8K LSNkZWZpbmUgTk9DS1hZWgotI2VuZGlmIC8qIE5PQ0tYWVogKi8KLSNpZm5kZWYgTk9DS1NQRUVE CQkJLyogQ3RybC1jaGFyIHVucHJlZml4aW5nICovCi0jZGVmaW5lIE5PQ0tTUEVFRAotI2VuZGlm IC8qIE5PQ0tTUEVFRCAqLwotI2lmbmRlZiBOT1NFUlZFUgkJCS8qIFNlcnZlciBtb2RlICovCi0j ZGVmaW5lIE5PU0VSVkVSCi0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSNpZm5kZWYgTk9DS1RJTUVS UwkJCS8qIER5bmFtaWMgcGFja2V0IHRpbWVycyAqLwotI2RlZmluZSBOT0NLVElNRVJTCi0jZW5k aWYgLyogTk9DS1RJTUVSUyAqLwotI2lmbmRlZiBOT1BBVFRFUk5TCQkJLyogRmlsZS10eXBlIHBh dHRlcm5zICovCi0jZGVmaW5lIE5PUEFUVEVSTlMKLSNlbmRpZiAvKiBOT1BBVFRFUk5TICovCi0j aWZuZGVmIE5PU1RSRUFNSU5HCQkJLyogU3RyZWFtaW5nICovCi0jZGVmaW5lIE5PU1RSRUFNSU5H Ci0jZW5kaWYgLyogTk9TVFJFQU1JTkcgKi8KLSNpZm5kZWYgTk9JS1NECQkJCS8qIEludGVybmV0 IEtlcm1pdCBTZXJ2aWNlICovCi0jZGVmaW5lIE5PSUtTRAotI2VuZGlmIC8qIE5PSUtTRCAqLwot I2lmbmRlZiBOT1BJUEVTRU5ECQkJLyogU2VuZGluZyBmcm9tIHBpcGVzICovCi0jZGVmaW5lIE5P UElQRVNFTkQKLSNlbmRpZiAvKiBOT1BJUEVTRU5EICovCi0jaWZuZGVmIE5PQVVUT0RMCQkJLyog QXV0b2Rvd25sb2FkICovCi0jZGVmaW5lIE5PQVVUT0RMCi0jZW5kaWYgLyogTk9BVVRPREwgKi8K LSNpZm5kZWYgTk9NU0VORAkJCQkvKiBNU0VORCAqLwotI2RlZmluZSBOT01TRU5ECi0jZW5kaWYg LyogTk9NU0VORCAqLwotI2lmbmRlZiBOT1RMT0cJCQkJLyogVHJhbnNhY3Rpb24gbG9nZ2luZyAq LwotI2RlZmluZSBOT1RMT0cKLSNlbmRpZiAvKiBOT1RMT0cgKi8KLSNpZm5kZWYgTk9DS1hYQ0hB UgkJCS8qIFBhY2tldCBjaGFyYWN0ZXIgZG91YmxpbmcgKi8KLSNkZWZpbmUgTk9DS1hYQ0hBUgot I2VuZGlmIC8qIE5PQ0tYWENIQVIgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIE5P SUNQCQkJCS8qIE5vIEludGVyYWN0aXZlIENvbW1hbmQgUGFyc2VyICovCi0jaWZuZGVmIE5PRElB TAkJCQkvKiBJbXBsaWVzIE5vIERJQUwgY29tbWFuZCAqLwotI2RlZmluZSBOT0RJQUwKLSNlbmRp ZiAvKiBOT0RJQUwgKi8KLSNpZm5kZWYgTk9DS1hZWgkJCQkvKiBhbmQgbm8gZXh0ZXJuYWwgcHJv dG9jb2xzICovCi0jZGVmaW5lIE5PQ0tYWVoKLSNlbmRpZiAvKiBOT0NLWFlaICovCi0jZW5kaWYg LyogTk9JQ1AgKi8KLQotI2lmbmRlZiBOT0lLU0QKLSNpZmRlZiBJS1NET05MWQotI2lmbmRlZiBJ S1NECi0jZGVmaW5lIElLU0QKLSNlbmRpZiAvKiBJS1NEICovCi0jaWZuZGVmIE5PTE9DQUwKLSNk ZWZpbmUgTk9MT0NBTAotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZm5kZWYgTk9QVVNICi0jZGVm aW5lIE5PUFVTSAotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2lmbmRlZiBUTkNPREUKLSNkZWZpbmUg VE5DT0RFCi0jZW5kaWYgLyogVE5DT0RFICovCi0jaWZuZGVmIFRDUFNPQ0tFVAotI2RlZmluZSBU Q1BTT0NLRVQKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNpZm5kZWYgTkVUQ09OTgotI2RlZmlu ZSBORVRDT05OCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2lmZGVmIFNVTlgyNQotI3VuZGVmIFNV TlgyNQotI2VuZGlmIC8qIFNVTlgyNSAqLwotI2lmZGVmIElCTVgyNQotI3VuZGVmIElCTVgyNQot I2VuZGlmIC8qIElCTVgyNSAqLwotI2lmZGVmIFNUUkFUVVNYMjUKLSN1bmRlZiBTVFJBVFVTWDI1 Ci0jZW5kaWYgLyogU1RSQVRVU1gyNSAqLwotI2lmZGVmIENLX05FVEJJT1MKLSN1bmRlZiBDS19O RVRCSU9TCi0jZW5kaWYgLyogQ0tfTkVUQklPUyAqLwotI2lmZGVmIFNVUEVSTEFUCi0jdW5kZWYg U1VQRVJMQVQKLSNlbmRpZiAvKiBTVVBFUkxBVCAqLwotI2lmZGVmIE5QSVBFCi0jdW5kZWYgTlBJ UEUKLSNlbmRpZiAvKiBOUElQRSAqLwotI2lmZGVmIE5FVEZJTEUKLSN1bmRlZiBORVRGSUxFCi0j ZW5kaWYgLyogTkVURklMRSAqLwotI2lmZGVmIE5FVENNRAotI3VuZGVmIE5FVENNRAotI2VuZGlm IC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotI3VuZGVmIE5FVFBUWQotI2VuZGlmIC8qIE5F VFBUWSAqLwotI2lmZGVmIFJMT0dDT0RFCi0jdW5kZWYgUkxPR0NPREUKLSNlbmRpZiAvKiBSTE9H Q09ERSAqLwotI2lmZGVmIE5FVERMTAotI3VuZGVmIE5FVERMTAotI2VuZGlmIC8qIE5FVERMTCAq LwotI2lmbmRlZiBOT1NTSAotI3VuZGVmIE5PU1NICi0jZW5kaWYgLyogTk9TU0ggKi8KLSNpZm5k ZWYgTk9GT1JXQVJEWAotI2RlZmluZSBOT0ZPUldBUkRYCi0jZW5kaWYgLyogTk9GT1JXQVJEWCAq LwotI2lmbmRlZiBOT0JST1dTRVIKLSNkZWZpbmUgTk9CUk9XU0VSCi0jZW5kaWYgLyogTk9CUk9X U0VSICovCi0jaWZuZGVmIE5PSFRUUAotI2RlZmluZSBOT0hUVFAKLSNlbmRpZiAvKiBOT0hUVFAg Ki8KLSNpZm5kZWYgTk9GVFAKLSNkZWZpbmUgTk9GVFAKLSNlbmRpZiAvKiBOT0ZUUCAqLwotI2lm bmRlZiBOT19DT01QT1JUCi0jZGVmaW5lIE5PX0NPTVBPUlQKLSNlbmRpZiAvKiBOT19DT01QT1JU ICovCi0jZW5kaWYgLyogSUtTRE9OTFkgKi8KLSNlbmRpZiAvKiBOT0lLU0QgKi8KLQotLyogRmVh dHVyZXMgdGhhdCBjYW4gYmUgZWxpbWluYXRlZCBmcm9tIGEgcmVtb3RlLW9ubHkgdmVyc2lvbiAq LwotCi0jaWZkZWYgTk9MT0NBTAotI2lmbmRlZiBOT0ZUUAotI2RlZmluZSBOT0ZUUAotI2VuZGlm IC8qIE5PRlRQICovCi0jaWZuZGVmIE5PSFRUUAotI2RlZmluZSBOT0hUVFAKLSNlbmRpZiAvKiBO T0hUVFAgKi8KLSNpZm5kZWYgTk9TU0gKLSNkZWZpbmUgTk9TU0gKLSNlbmRpZiAvKiBOT1NTSCAq LwotI2lmbmRlZiBOT1RFUk0KLSNkZWZpbmUgTk9URVJNCi0jZW5kaWYgLyogTk9URVJNICovCi0j aWZuZGVmIE5PQ1VSU0VTCQkJLyogRnVsbHNjcmVlbiBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgKi8K LSNkZWZpbmUgTk9DVVJTRVMKLSNlbmRpZiAvKiBOT0NVUlNFUyAqLwotI2lmbmRlZiBOT0RJQUwK LSNkZWZpbmUgTk9ESUFMCi0jZW5kaWYgLyogTk9ESUFMICovCi0jaWZuZGVmIE5PU0NSSVBUCi0j ZGVmaW5lIE5PU0NSSVBUCi0jZW5kaWYgLyogTk9TQ1JJUFQgKi8KLSNpZm5kZWYgTk9TRVRLRVkK LSNkZWZpbmUgTk9TRVRLRVkKLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotI2lmbmRlZiBOT0tWRVJC UwotI2RlZmluZSBOT0tWRVJCUwotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0jaWZuZGVmIE5PWE1J VAotI2RlZmluZSBOT1hNSVQKLSNlbmRpZiAvKiBOT1hNSVQgKi8KLSNpZmRlZiBDS19DVVJTRVMK LSN1bmRlZiBDS19DVVJTRVMKLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLSNpZm5kZWYgSUtTRE9O TFkKLSNpZm5kZWYgTk9BUEMKLSNkZWZpbmUgTk9BUEMKLSNlbmRpZiAvKiBOT0FQQyAqLwotI2lm bmRlZiBOT05FVAotI2RlZmluZSBOT05FVAotI2VuZGlmIC8qIE5PTkVUICovCi0jZW5kaWYgLyog SUtTRE9OTFkgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRlZiBOT05FVAotI2lmZGVm IE5FVENPTk4KLSN1bmRlZiBORVRDT05OCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2lmZGVmIFRD UFNPQ0tFVAotI3VuZGVmIFRDUFNPQ0tFVAotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2lmbmRl ZiBOT1RDUE9QVFMKLSNkZWZpbmUgTk9UQ1BPUFRTCi0jZW5kaWYgLyogTk9UQ1BPUFRTICovCi0j aWZkZWYgU1VOWDI1Ci0jdW5kZWYgU1VOWDI1Ci0jZW5kaWYgLyogU1VOWDI1ICovCi0jaWZkZWYg SUJNWDI1Ci0jdW5kZWYgSUJNWDI1Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0jaWZkZWYgU1RSQVRV U1gyNQotI3VuZGVmIFNUUkFUVVNYMjUKLSNlbmRpZiAvKiBTVFJBVFVTWDI1ICovCi0jaWZkZWYg Q0tfTkVUQklPUwotI3VuZGVmIENLX05FVEJJT1MKLSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0j aWZkZWYgU1VQRVJMQVQKLSN1bmRlZiBTVVBFUkxBVAotI2VuZGlmIC8qIFNVUEVSTEFUICovCi0j aWZkZWYgTlBJUEUKLSN1bmRlZiBOUElQRQotI2VuZGlmIC8qIE5QSVBFICovCi0jaWZkZWYgTkVU RklMRQotI3VuZGVmIE5FVEZJTEUKLSNlbmRpZiAvKiBORVRGSUxFICovCi0jaWZkZWYgTkVUQ01E Ci0jdW5kZWYgTkVUQ01ECi0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0jdW5k ZWYgTkVUUFRZCi0jZW5kaWYgLyogTkVUUFRZICovCi0jaWZkZWYgUkxPR0NPREUKLSN1bmRlZiBS TE9HQ09ERQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgTkVURExMCi0jdW5kZWYgTkVU RExMCi0jZW5kaWYgLyogTkVURExMICovCi0jaWZuZGVmIE5PU1NICi0jZGVmaW5lIE5PU1NICi0j ZW5kaWYgLyogTk9TU0ggKi8KLSNpZm5kZWYgTk9GVFAKLSNkZWZpbmUgTk9GVFAKLSNlbmRpZiAv KiBOT0ZUUCAqLwotI2lmbmRlZiBOT0hUVFAKLSNkZWZpbmUgTk9IVFRQCi0jZW5kaWYgLyogTk9I VFRQICovCi0jaWZuZGVmIE5PQlJPV1NFUgotI2RlZmluZSBOT0JST1dTRVIKLSNlbmRpZiAvKiBO T0JST1dTRVIgKi8KLSNpZm5kZWYgTk9GT1JXQVJEWAotI2RlZmluZSBOT0ZPUldBUkRYCi0jZW5k aWYgLyogTk9GT1JXQVJEWCAqLwotI2VuZGlmIC8qIE5PTkVUICovCi0KLSNpZmRlZiBJS1NET05M WQotI2lmZGVmIFNVTlgyNQotI3VuZGVmIFNVTlgyNQotI2VuZGlmIC8qIFNVTlgyNSAqLwotI2lm ZGVmIElCTVgyNQotI3VuZGVmIElCTVgyNQotI2VuZGlmIC8qIElCTVgyNSAqLwotI2lmZGVmIFNU UkFUVVNYMjUKLSN1bmRlZiBTVFJBVFVTWDI1Ci0jZW5kaWYgLyogU1RSQVRVU1gyNSAqLwotI2lm ZGVmIENLX05FVEJJT1MKLSN1bmRlZiBDS19ORVRCSU9TCi0jZW5kaWYgLyogQ0tfTkVUQklPUyAq LwotI2lmZGVmIFNVUEVSTEFUCi0jdW5kZWYgU1VQRVJMQVQKLSNlbmRpZiAvKiBTVVBFUkxBVCAq LwotI2lmZGVmIE5QSVBFCi0jdW5kZWYgTlBJUEUKLSNlbmRpZiAvKiBOUElQRSAqLwotI2lmZGVm IE5FVEZJTEUKLSN1bmRlZiBORVRGSUxFCi0jZW5kaWYgLyogTkVURklMRSAqLwotI2lmZGVmIE5F VENNRAotI3VuZGVmIE5FVENNRAotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQot I3VuZGVmIE5FVFBUWQotI2VuZGlmIC8qIE5FVFBUWSAqLwotI2lmZGVmIFJMT0dDT0RFCi0jdW5k ZWYgUkxPR0NPREUKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2lmZGVmIE5FVERMTAotI3VuZGVm IE5FVERMTAotI2VuZGlmIC8qIE5FVERMTCAqLwotI2lmbmRlZiBOT1NTSAotI2RlZmluZSBOT1NT SAotI2VuZGlmIC8qIE5PU1NIICovCi0jaWZuZGVmIE5PSFRUUAotI2RlZmluZSBOT0hUVFAKLSNl bmRpZiAvKiBOT0hUVFAgKi8KLSNpZm5kZWYgTk9CUk9XU0VSCi0jZGVmaW5lIE5PQlJPV1NFUgot I2VuZGlmIC8qIE5PQlJPV1NFUiAqLwotI2VuZGlmIC8qIElLU0RPTkxZICovCi0vKgotICBOb3Rl IHRoYXQgbm9uZSBvZiB0aGUgYWJvdmUgcHJlY2x1ZGVzIFROQ09ERSwgd2hpY2ggY2FuIGJlIGRl ZmluZWQgaW4KLSAgdGhlIGFic2VuY2Ugb2YgVENQU09DS0VULCBldGMsIHRvIGVuYWJsZSBzZXJ2 ZXItc2lkZSBUZWxuZXQgbmVnb3RhdGlvbi4KLSovCi0jaWZuZGVmIFROQ09ERQkJCQkvKiBUaGlz IGlzIGZvciB0aGUgYmVuZWZpdCBvZiAqLwotI2lmZGVmIFRDUFNPQ0tFVAkJCS8qIG1vZHVsZXMg dGhhdCBtaWdodCBuZWVkIFROQ09ERSAqLwotI2RlZmluZSBUTkNPREUJCQkJLyogbm90IGFsbCBv ZiBja2NuZXQuaC4uLiAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIFROQ09E RSAqLwotCi0jaWZuZGVmIE5FVENPTk4KLSNpZmRlZiBUQ1BTT0NLRVQKLSNkZWZpbmUgTkVUQ09O TgotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmbmRl ZiBERUZQQVIJCQkJLyogRGVmYXVsdCBwYXJpdHkgKi8KLSNkZWZpbmUgREVGUEFSIDAJCQkvKiBN dXN0IGJlIGhlcmUgYmVjYXVzZSBpdCBpcyB1c2VkICovCi0jZW5kaWYgLyogREVGUEFSICovCQkJ LyogYnkgYWxsIGNsYXNzZXMgb2YgbW9kdWxlcyAqLwotCi0jaWZkZWYgTlQKLSNpZm5kZWYgT1My T1JXSU4zMgotI2RlZmluZSBPUzJPUldJTjMyCi0jZW5kaWYgLyogT1MyT1JXSU4zMiAqLwotI2lm bmRlZiBPUzIKLSNkZWZpbmUgV0lOMzJPTkxZCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyog TlQgKi8KLQotI2lmZGVmIE9TMgkJCQkvKiBGb3IgT1MvMiBkZWJ1Z2dpbmcgKi8KLSNpZm5kZWYg T1MyT1JXSU4zMgotI2RlZmluZSBPUzJPUldJTjMyCi0jZW5kaWYgLyogT1MyT1JXSU4zMiAqLwot I2lmZGVmIE5UCi0jZGVmaW5lIE5PQ1JZUFQKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZGVmaW5l IE5UU0lHCi0jZWxzZSAvKiBOVCAqLwotI2RlZmluZSBPUzJPTkxZCi0jaW5jbHVkZSA8b3MyZGVm Lmg+Ci0jZW5kaWYgLyogTlQgKi8KLSNpZm5kZWYgT1MyT1JVTklYCi0jZGVmaW5lIE9TMk9SVU5J WAotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotI2lmbmRlZiBPUzJPUlZNUwotI2RlZmluZSBPUzJP UlZNUwotI2VuZGlmIC8qIE9TMk9SVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpbmNsdWRl IDxzdGRpby5oPgkJCS8qIEJlZ2luIGJ5IGluY2x1ZGluZyB0aGlzLiAqLwotI2luY2x1ZGUgPGN0 eXBlLmg+CQkJLyogYW5kIHRoaXMuICovCi0KLSNpZmRlZiBWTVMKLSNpbmNsdWRlIDx0eXBlcy5o PgkJCS8qIEVuc3VyZSBvZmZfdC4gKi8KLSNpbmNsdWRlICJja3ZybXMuaCIJCQkvKiBHZXQgTkFN REVGIE5BTVhfQ19NQVhSU1MuICovCi0jZW5kaWYgLyogZGVmIFZNUyAqLwotCi0vKiBTeXN0ZW0t dHlwZSBjb21waWxhdGlvbiBzd2l0Y2hlcyAqLwotCi0jaWZkZWYgRlQyMQkJCQkvKiBGb3J0dW5l IEZvcjpQcm8gMi4xIGltcGxpZXMgMS44ICovCi0jaWZuZGVmIEZUMTgKLSNkZWZpbmUgRlQxOAot I2VuZGlmIC8qIEZUMTggKi8KLSNlbmRpZiAvKiBGVDIxICovCi0KLSNpZmRlZiBfX2JzZGlfXwot I2lmbmRlZiBCU0RJCi0jZGVmaW5lIEJTREkKLSNlbmRpZiAvKiBCU0RJICovCi0jZW5kaWYgLyog X19ic2RpX18gKi8KLQotI2lmZGVmIEFJWFBTMgkJCQkvKiBBSVhQUzIgaW1wbGllcyBBSVgzNzAg Ki8KLSNpZm5kZWYgQUlYMzcwCi0jZGVmaW5lIEFJWDM3MAotI2VuZGlmIC8qIEFJWDM3MCAqLwot I2VuZGlmIC8qIEFJWFBTMiAqLwotCi0jaWZkZWYgQUlYMzcwCQkJCS8qIEFJWCBQUy8yIG9yIDM3 MCBpbXBsaWVzIEJTRDQgKi8KLSNpZm5kZWYgQlNENAotI2RlZmluZSBCU0Q0Ci0jZW5kaWYgLyog QlNENCAqLwotI2VuZGlmIC8qIEFJWDM3MCAqLwotCi0jaWZkZWYgQUlYRVNBCQkJCS8qIEFJWC9F U0EgaW1wbGllcyBCU0Q0LjQgKi8KLSNpZm5kZWYgQlNENDQKLSNkZWZpbmUgQlNENDQKLSNlbmRp ZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIEFJWEVTQSAqLwotCi0jaWZkZWYgQUlYNTMJCQkJLyog QUlYNTMgaW1wbGllcyBBSVg1MiAqLwotI2lmbmRlZiBBSVg1MgotI2RlZmluZSBBSVg1MgotI2Vu ZGlmIC8qIEFJWDUyICovCi0jZW5kaWYgLyogQUlYNTMgKi8KLQotI2lmZGVmIEFJWDUyCQkJCS8q IEFJWDUyIGltcGxpZXMgQUlYNTEgKi8KLSNpZm5kZWYgQUlYNTEKLSNkZWZpbmUgQUlYNTEKLSNl bmRpZiAvKiBBSVg1MSAqLwotI2VuZGlmIC8qIEFJWDUyICovCi0KLSNpZmRlZiBBSVg1MQkJCQkv KiBBSVg1MSBpbXBsaWVzIEFJWDUwICovCi0jaWZuZGVmIEFJWDUwCi0jZGVmaW5lIEFJWDUwCi0j ZW5kaWYgLyogQUlYNTAgKi8KLSNlbmRpZiAvKiBBSVg1MSAqLwotCi0jaWZkZWYgQUlYNTAJCQkJ LyogQUlYNTAgaW1wbGllcyBBSVg0NSAqLwotI2lmbmRlZiBBSVg0NQotI2RlZmluZSBBSVg0NQot I2VuZGlmIC8qIEFJWDQ1ICovCi0jZW5kaWYgLyogQUlYNTAgKi8KLQotI2lmZGVmIEFJWDQ1CQkJ CS8qIEFJWDQ1IGltcGxpZXMgQUlYNDQgKi8KLSNpZm5kZWYgQUlYNDQKLSNkZWZpbmUgQUlYNDQK LSNlbmRpZiAvKiBBSVg0NCAqLwotI2VuZGlmIC8qIEFJWDQ1ICovCi0KLSNpZmRlZiBBSVg0NAkJ CQkvKiBBSVg0NCBpbXBsaWVzIEFJWDQzICovCi0jaWZuZGVmIEFJWDQzCi0jZGVmaW5lIEFJWDQz Ci0jZW5kaWYgLyogQUlYNDMgKi8KLSNlbmRpZiAvKiBBSVg0NCAqLwotCi0jaWZkZWYgQUlYNDMJ CQkJLyogQUlYNDMgaW1wbGllcyBBSVg0MiAqLwotI2lmbmRlZiBBSVg0MgotI2RlZmluZSBBSVg0 MgotI2VuZGlmIC8qIEFJWDQyICovCi0jZW5kaWYgLyogQUlYNDMgKi8KLQotI2lmZGVmIEFJWDQy CQkJCS8qIEFJWDQyIGltcGxpZXMgQUlYNDEgKi8KLSNpZm5kZWYgQUlYNDEKLSNkZWZpbmUgQUlY NDEKLSNlbmRpZiAvKiBBSVg0MSAqLwotI2VuZGlmIC8qIEFJWDQyICovCi0KLSNpZmRlZiBTVjY4 UjNWNgkJCQkvKiBTeXN0ZW0gVi82OCBSMzJWNiBpbXBsaWVzIFNWUjMgKi8KLSNpZm5kZWYgU1ZS MwotI2RlZmluZSBTVlIzCi0jZW5kaWYgLyogU1ZSMyAqLwotI2VuZGlmIC8qIFNWNjhSM1Y2ICov Ci0KLSNpZmRlZiBTVjg4UjMyCQkJCS8qIFN5c3RlbSBWLzg4IFIzMiBpbXBsaWVzIFNWUjMgKi8K LSNpZm5kZWYgU1ZSMwotI2RlZmluZSBTVlIzCi0jZW5kaWYgLyogU1ZSMyAqLwotI2VuZGlmIC8q IFNWODhSMzIgKi8KLQotI2lmZGVmIERHVVg1NDAJCQkJLyogREcgVVggNS40MCBpbXBsaWVzIFN5 cyBWIFIgNCAqLwotI2lmbmRlZiBTVlI0Ci0jZGVmaW5lIFNWUjQKLSNlbmRpZiAvKiBTVlI0ICov Ci0jZW5kaWYgLyogREdVWDU0MCAqLwotCi0jaWZuZGVmIERHVVgKLSNpZmRlZiBER1VYNTQwCQkJ CS8qIERHL1VYIDUuNDAgaW1wbGllcyBER1VYICovCi0jZGVmaW5lIERHVVgKLSNlbHNlCi0jaWZk ZWYgREdVWDQzMAkJCQkvKiBTbyBkb2VzIERHL1VYIDQuMzAgKi8KLSNkZWZpbmUgREdVWAotI2Vu ZGlmIC8qIERHVVg0MzAgKi8KLSNlbmRpZiAvKiBER1VYNTQwICovCi0jZW5kaWYgLyogREdVWCAq LwotCi0jaWZkZWYgSVJJWDY1CQkJCS8qIElSSVggNi41IGltcGxpZXMgSVJJWCA2LjQgKi8KLSNp Zm5kZWYgSVJJWDY0Ci0jZGVmaW5lIElSSVg2NAotI2VuZGlmIC8qIElSSVg2NCAqLwotI2VuZGlm IC8qIElSSVg2NSAqLwotCi0jaWZkZWYgSVJJWDY0CQkJCS8qIElSSVggNi40IGltcGxpZXMgSVJJ WCA2LjIgKi8KLSNpZm5kZWYgQlNENDRPUlBPU0lYCi0jZGVmaW5lIEJTRDQ0T1JQT1NJWAkJCS8q IGZvciBja3V0aW8ncyBiZW5lZml0ICovCi0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0jaWZu ZGVmIElSSVg2MgotI2RlZmluZSBJUklYNjIKLSNlbmRpZiAvKiBJUklYNjIgKi8KLSNlbmRpZiAv KiBJUklYNjQgKi8KLQotI2lmZGVmIElSSVg2MgkJCQkvKiBJUklYIDYuMiBpbXBsaWVzIElSSVgg Ni4wICovCi0jaWZuZGVmIElSSVg2MAotI2RlZmluZSBJUklYNjAKLSNlbmRpZiAvKiBJUklYNjAg Ki8KLSNlbmRpZiAvKiBJUklYNjIgKi8KLQotI2lmZGVmIElSSVg2MAkJCQkvKiBJUklYIDYuMCBp bXBsaWVzIElSSVggNS4xICovCi0jaWZuZGVmIElSSVg1MQotI2RlZmluZSBJUklYNTEKLSNlbmRp ZiAvKiBJUklYNTEgKi8KLSNpZm5kZWYgSVJJWDUyCQkJCS8qIEFuZCBJUklYIDUuMiAoZm9yIGh3 ZmMpICovCi0jZGVmaW5lIElSSVg1MgotI2VuZGlmIC8qIElSSVg1MiAqLwotI2VuZGlmIC8qIElS SVg2MCAqLwotCi0jaWZuZGVmIElSSVgJCQkJLyogSVJJWCA0LjAgb3IgZ3JlYXRlciBpbXBsaWVz IElSSVggKi8KLSNpZmRlZiBJUklYNjQKLSNkZWZpbmUgSVJJWAotI2Vsc2UKLSNpZmRlZiBJUklY NjIKLSNkZWZpbmUgSVJJWAotI2Vsc2UKLSNpZmRlZiBJUklYNjAKLSNkZWZpbmUgSVJJWAotI2Vs c2UKLSNpZmRlZiBJUklYNTEKLSNkZWZpbmUgSVJJWAotI2Vsc2UKLSNpZmRlZiBJUklYNDAKLSNk ZWZpbmUgSVJJWAotI2VuZGlmIC8qIElSSVg0MCAqLwotI2VuZGlmIC8qIElSSVg1MSAqLwotI2Vu ZGlmIC8qIElSSVg2MCAqLwotI2VuZGlmIC8qIElSSVg2MiAqLwotI2VuZGlmIC8qIElSSVg2NCAq LwotI2VuZGlmIC8qIElSSVggKi8KLQotI2lmZGVmIE1JUFMJCQkJLyogTUlQUyBTeXN0ZW0gViBl bnZpcm9ubWVudCAqLwotI2lmbmRlZiBTVlIzCQkJCS8qIGltcGxpZXMgU3lzdGVtIFYgUjMgb3Ig bGF0ZXIgKi8KLSNkZWZpbmUgU1ZSMwotI2VuZGlmIC8qIFNWUjMgKi8KLSNlbmRpZiAvKiBNSVBT ICovCi0KLSNpZmRlZiBIUFVYOQkJCQkvKiBIUC1VWCA5LnggKi8KLSNpZm5kZWYgU1ZSMwotI2Rl ZmluZSBTVlIzCi0jZW5kaWYgLyogU1ZSMyAqLwotI2lmbmRlZiBIUFVYCi0jZGVmaW5lIEhQVVgK LSNlbmRpZiAvKiBIUFVYICovCi0jaWZuZGVmIEhQVVg5UExVUwotI2RlZmluZSBIUFVYOVBMVVMK LSNlbmRpZiAvKiBIUFVYOVBMVVMgKi8KLSNlbmRpZiAvKiBIUFVYOSAqLwotCi0jaWZkZWYgSFBV WDEwCQkJCS8qIEhQLVVYIDEwLnggKi8KLSNpZm5kZWYgSFBVWDEwMTAJCQkvKiBJZiBhbnl0aGlu ZyBoaWdoZXIgaXMgZGVmaW5lZCAqLwotI2lmZGVmIEhQVVgxMDIwCQkJCS8qIGRlZmluZSBIUFVY MTAxMCB0b28uICovCi0jZGVmaW5lIEhQVVgxMDEwCi0jZW5kaWYgLyogSFBVWDEwMjAgKi8KLSNp ZmRlZiBIUFVYMTAzMAotI2RlZmluZSBIUFVYMTAxMAotI2VuZGlmIC8qIEhQVVgxMDMwICovCi0j ZW5kaWYgLyogSFBVWDEwMTAgKi8KLQotI2lmZGVmIEhQVVgxMTAwCQkJCS8qIEhQLVVYIDExLjAw IGltcGxpZXMgMTAuMTAgKi8KLSNpZm5kZWYgSFBVWDEwMTAKLSNkZWZpbmUgSFBVWDEwMTAKLSNl bmRpZiAvKiBIUFVYMTAxMCAqLwotI2VuZGlmIC8qIEhQVVgxMTAwICovCi0KLSNpZm5kZWYgU1ZS NAotI2RlZmluZSBTVlI0Ci0jZW5kaWYgLyogU1ZSNCAqLwotI2lmbmRlZiBIUFVYCi0jZGVmaW5l IEhQVVgKLSNlbmRpZiAvKiBIUFVYICovCi0jaWZuZGVmIEhQVVg5UExVUwotI2RlZmluZSBIUFVY OVBMVVMKLSNlbmRpZiAvKiBIUFVYOVBMVVMgKi8KLSNlbmRpZiAvKiBIUFVYMTAgKi8KLQotI2lm ZGVmIFFOWAkJCQkvKiBRTlggU29mdHdhcmUgU3lzdGVtcyBJbmMgKi8KLSNpZm5kZWYgUE9TSVgJ CQkJLyogUU5YIDQuMCBvciBsYXRlciBpcyBQT1NJWCAqLwotI2RlZmluZSBQT1NJWAotI2VuZGlm IC8qIFBPU0lYICovCi0jaWZuZGVmIF9fMzg2X18JCQkJLyogQ29tZXMgaW4gMTYtYml0IGFuZCAz Mi1iaXQgKi8KLSNkZWZpbmUgX18xNkJJVF9fCi0jZGVmaW5lIENLX1FOWDE2Ci0jZWxzZQotI2Rl ZmluZSBfXzMyQklUX18KLSNkZWZpbmUgQ0tfUU5YMzIKLSNlbmRpZiAvKiBfXzM4Nl9fICovCi0j ZW5kaWYgLyogUU5YICovCi0KLS8qCi0gIDQuNEJTRCBpcyBhIG1peHR1cmUgb2YgU3lzdGVtIFYg UjQsIFBPU0lYLCBhbmQgNC4zQlNELgotKi8KLSNpZmRlZiBCU0Q0NAkJCQkvKiA0LjQgQlNEICov Ci0jaWZuZGVmIFNWUjQJCQkJLyogQlNENDQgaW1wbGllcyBTVlI0ICovCi0jZGVmaW5lIFNWUjQK LSNlbmRpZiAvKiBTVlI0ICovCi0jaWZuZGVmIE5PU0VUQlVGCQkJLyogTk9TRVRCVUYgaXMgc2Fm ZSAqLwotI2RlZmluZSBOT1NFVEJVRgotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0jaWZuZGVmIERJ UkVOVAkJCQkvKiBVc2VzIDxkaXJlbnQuaD4gKi8KLSNkZWZpbmUgRElSRU5UCi0jZW5kaWYgLyog RElSRU5UICovCi0jZW5kaWYgLyogQlNENDQgKi8KLQotI2lmZGVmIE9QRU5CU0QJCQkJLyogT3Bl bkJTRCBtaWdodCBvciBtaWdodCBub3QgKi8KLSNpZm5kZWYgX19PcGVuQlNEX18JCQkvKiBoYXZl IHRoaXMgZGVmaW5lZC4uLiAqLwotI2RlZmluZSBfX09wZW5CU0RfXwotI2VuZGlmIC8qIF9fT3Bl bkJTRF9fICovCi0jZW5kaWYgLyogT1BFTkJTRCAqLwotCi0jaWZkZWYgU1ZSMwkJCQkvKiBTVlIz IGltcGxpZXMgQVRUU1YgKi8KLSNpZm5kZWYgQVRUU1YKLSNkZWZpbmUgQVRUU1YKLSNlbmRpZiAv KiBBVFRTViAqLwotI2VuZGlmIC8qIFNWUjMgKi8KLQotI2lmZGVmIFNWUjQJCQkJLyogU1ZSNCBp bXBsaWVzIEFUVFNWICovCi0jaWZuZGVmIEFUVFNWCi0jZGVmaW5lIEFUVFNWCi0jZW5kaWYgLyog QVRUU1YgKi8KLSNpZm5kZWYgU1ZSMwkJCQkvKiAuLi5hcyB3ZWxsIGFzIFNWUjMgKi8KLSNkZWZp bmUgU1ZSMwotI2VuZGlmIC8qIFNWUjMgKi8KLSNlbmRpZiAvKiBTVlI0ICovCi0KLSNpZmRlZiBP WE9TCi0jaWZuZGVmIEFUVFNWCi0jZGVmaW5lIEFUVFNWCQkJCS8qIE9YT1MgaW1wbGllcyBBVFRT ViAqLwotI2VuZGlmIC8qICEgQVRUU1YgKi8KLSNkZWZpbmUgU1dfQUNDX0lECQkJLyogYWNjZXNz KCkgd2FudHMgcHJpdnMgb24gKi8KLSNkZWZpbmUga2lsbCBwcml2X2tpbGwJCQkvKiBraWxsKCkg d2FudHMgcHJpdnMgb24gKi8KLSNpZm5kZWYgTk9TRVRCVUYKLSNkZWZpbmUgTk9TRVRCVUYJCQkv KiBOT1NFVEJVRiBpcyBzYWZlICovCi0jZW5kaWYgLyogISBOT1NFVEJVRiAqLwotI2VuZGlmIC8q IE9YT1MgKi8KLQotI2lmZGVmIFVUU1YJCQkJLyogVVRTViBpbXBsaWVzIEFUVFNWICovCi0jaWZu ZGVmIEFUVFNWCi0jZGVmaW5lIEFUVFNWCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBV VFNWICovCi0KLSNpZmRlZiBYRU5JWAkJCQkvKiBYRU5JWCBpbXBsaWVzIEFUVFNWICovCi0jaWZu ZGVmIEFUVFNWCi0jZGVmaW5lIEFUVFNWCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBY RU5JWCAqLwotCi0jaWZkZWYgQVVYCQkJCS8qIEFVWCBpbXBsaWVzIEFUVFNWICovCi0jaWZuZGVm IEFUVFNWCi0jZGVmaW5lIEFUVFNWCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBBVVgg Ki8KLQotI2lmZGVmIEFUVDczMDAJCQkJLyogQVRUNzMwMCBpbXBsaWVzIEFUVFNWICovCi0jaWZu ZGVmIEFUVFNWCi0jZGVmaW5lIEFUVFNWCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBB VFQ3MzAwICovCi0KLSNpZmRlZiBBVFQ2MzAwCQkJCS8qIEFUVDYzMDAgaW1wbGllcyBBVFRTViAq LwotI2lmbmRlZiBBVFRTVgotI2RlZmluZSBBVFRTVgotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5k aWYgLyogQVRUNjMwMCAqLwotCi0jaWZkZWYgSFBVWAkJCQkvKiBIUFVYIGltcGxpZXMgQVRUU1Yg Ki8KLSNpZm5kZWYgQVRUU1YKLSNkZWZpbmUgQVRUU1YKLSNlbmRpZiAvKiBBVFRTViAqLwotI2Vu ZGlmIC8qIEhQVVggKi8KLQotI2lmZGVmIElTSUlJCQkJCS8qIElTSUlJIGltcGxpZXMgQVRUU1Yg Ki8KLSNpZm5kZWYgQVRUU1YKLSNkZWZpbmUgQVRUU1YKLSNlbmRpZiAvKiBBVFRTViAqLwotI2Vu ZGlmIC8qIElTSUlJICovCi0KLSNpZmRlZiBORVhUMzMJCQkJLyogTkVYVDMzIGltcGxpZXMgTkVY VCAqLwotI2lmbmRlZiBORVhUCi0jZGVmaW5lIE5FWFQKLSNlbmRpZiAvKiBORVhUICovCi0jZW5k aWYgLyogTkVYVDMzICovCi0KLSNpZmRlZiBORVhUCQkJCS8qIE5FWFQgaW1wbGllcyBCU0Q0ICov Ci0jaWZuZGVmIEJTRDQKLSNkZWZpbmUgQlNENAotI2VuZGlmIC8qIEJTRDQgKi8KLSNlbmRpZiAv KiBORVhUICovCi0KLSNpZmRlZiBCU0Q0MQkJCQkvKiBCU0Q0MSBpbXBsaWVzIEJTRDQgKi8KLSNp Zm5kZWYgQlNENAotI2RlZmluZSBCU0Q0Ci0jZW5kaWYgLyogQlNENCAqLwotI2VuZGlmIC8qIEJT RDQxICovCi0KLSNpZmRlZiBCU0Q0MwkJCQkvKiBCU0Q0MyBpbXBsaWVzIEJTRDQgKi8KLSNpZm5k ZWYgQlNENAotI2RlZmluZSBCU0Q0Ci0jZW5kaWYgLyogQlNENCAqLwotI2VuZGlmIC8qIEJTRDQz ICovCi0KLSNpZmRlZiBCU0Q0CQkJCS8qIEJTRDQgaW1wbGllcyBBTllCU0QgKi8KLSNpZm5kZWYg QU5ZQlNECi0jZGVmaW5lIEFOWUJTRAotI2VuZGlmIC8qIEFOWUJTRCAqLwotI2VuZGlmIC8qIEJT RDQgKi8KLQotI2lmZGVmIEJTRDI5CQkJCS8qIEJTRDI5IGltcGxpZXMgQU5ZQlNEICovCi0jaWZu ZGVmIEFOWUJTRAotI2RlZmluZSBBTllCU0QKLSNlbmRpZiAvKiBBTllCU0QgKi8KLSNlbmRpZiAv KiBCU0QyOSAqLwotCi0jaWZkZWYgQVRUU1YJCQkJLyogQVRUU1YgaW1wbGllcyBVTklYICovCi0j aWZuZGVmIFVOSVgKLSNkZWZpbmUgVU5JWAotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBB VFRTViAqLwotCi0jaWZkZWYgQU5ZQlNECQkJCS8qIEFOWUJTRCBpbXBsaWVzIFVOSVggKi8KLSNp Zm5kZWYgVU5JWAotI2RlZmluZSBVTklYCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIEFO WUJTRCAqLwotCi0jaWZkZWYgUE9TSVgJCQkJLyogUE9TSVggaW1wbGllcyBVTklYICovCi0jaWZu ZGVmIFVOSVgKLSNkZWZpbmUgVU5JWAotI2VuZGlmIC8qIFVOSVggKi8KLSNpZm5kZWYgRElSRU5U CQkJCS8qIGFuZCBESVJFTlQsIGkuZS4gPGRpcmVudC5oPiAqLwotI2lmbmRlZiBTRElSRU5UCi0j ZGVmaW5lIERJUkVOVAotI2VuZGlmIC8qIFNESVJFTlQgKi8KLSNlbmRpZiAvKiBESVJFTlQgKi8K LSNpZm5kZWYgTk9GSUxFSAkJCQkvKiBQT1NJWCBkb2Vzbid0IHVzZSA8c3lzL2ZpbGUuaD4gKi8K LSNkZWZpbmUgTk9GSUxFSAotI2VuZGlmIC8qIE5PRklMRUggKi8KLSNlbmRpZiAvKiBQT1NJWCAq LwotCi0jaWZkZWYgVjcKLSNpZm5kZWYgVU5JWAotI2RlZmluZSBVTklYCi0jZW5kaWYgLyogVU5J WCAqLwotI2VuZGlmIC8qIFY3ICovCi0KLSNpZmRlZiBDT0hFUkVOVAotI2lmbmRlZiBVTklYCi0j ZGVmaW5lIFVOSVgKLSNlbmRpZiAvKiBVTklYICovCi0jaWZkZWYgQ09NTUVOVAotI2lmbmRlZiBO T0NVUlNFUwotI2RlZmluZSBOT0NVUlNFUwotI2VuZGlmIC8qIE5PQ1VSU0VTICovCi0jZW5kaWYg LyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLSNpZmRlZiBNSU5JWAotI2lm bmRlZiBVTklYCi0jZGVmaW5lIFVOSVgKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogTUlO SVggKi8KLS8qCi0gIFRoZSBzeW1ib2wgU1ZPUlBPU0lYIGlzIGRlZmluZWQgZm9yIGJvdGggQVQm VCBhbmQgUE9TSVggY29tcGlsYXRpb25zCi0gIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNlbGVjdCBp dGVtcyB0aGF0IFN5c3RlbSBWIGFuZCBQT1NJWCBoYXZlIGluIGNvbW1vbiwKLSAgYnV0IHdoaWNo IEJTRCwgVjcsIGV0YywgZG8gbm90IGhhdmUuCi0qLwotI2lmZGVmIEFUVFNWCi0jaWZuZGVmIFNW T1JQT1NJWAotI2RlZmluZSBTVk9SUE9TSVgKLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLSNlbmRp ZiAvKiBBVFRTViAqLwotCi0jaWZkZWYgUE9TSVgKLSNpZm5kZWYgU1ZPUlBPU0lYCi0jZGVmaW5l IFNWT1JQT1NJWAotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0K LS8qCi0gIFRoZSBzeW1ib2wgU1ZSNE9SUE9TSVggaXMgZGVmaW5lZCBmb3IgYm90aCBBVCZUIFN5 c3RlbSBWIFI0IGFuZCBQT1NJWAotICBjb21waWxhdGlvbnMgdG8gbWFrZSBpdCBlYXNpZXIgdG8g c2VsZWN0IGl0ZW1zIHRoYXQgU3lzdGVtIFYgUjQgYW5kIFBPU0lYCi0gIGhhdmUgaW4gY29tbW9u LCBidXQgd2hpY2ggQlNELCBWNywgYW5kIFN5c3RlbSBWIFIzIGFuZCBlYXJsaWVyLCBldGMsIGRv Ci0gIG5vdCBoYXZlLgotKi8KLSNpZmRlZiBQT1NJWAotI2lmbmRlZiBTVlI0T1JQT1NJWAotI2Rl ZmluZSBTVlI0T1JQT1NJWAotI2VuZGlmIC8qIFNWUjRPUlBPU0lYICovCi0jZW5kaWYgLyogUE9T SVggKi8KLSNpZmRlZiBTVlI0Ci0jaWZuZGVmIFNWUjRPUlBPU0lYCi0jZGVmaW5lIFNWUjRPUlBP U0lYCi0jZW5kaWYgLyogU1ZSNE9SUE9TSVggKi8KLSNlbmRpZiAvKiBTVlI0ICovCi0KLS8qCi0g IFRoZSBzeW1ib2wgQlNENDRPUlBPU0lYIGlzIGRlZmluZWQgZm9yIGJvdGggNC40QlNEIGFuZCBQ T1NJWCBjb21waWxhdGlvbnMKLSAgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2VsZWN0IGl0ZW1zIHRo YXQgNC40QlNEIGFuZCBQT1NJWCBoYXZlIGluIGNvbW1vbiwKLSAgYnV0IHdoaWNoIFN5c3RlbSBW LCBCU0QsIFY3LCBldGMsIGRvIG5vdCBoYXZlLgotKi8KLSNpZmRlZiBCU0Q0NAotI2lmbmRlZiBC U0Q0NE9SUE9TSVgKLSNkZWZpbmUgQlNENDRPUlBPU0lYCi0jZW5kaWYgLyogQlNENDRPUlBPU0lY ICovCi0jZW5kaWYgLyogQlNENDQgKi8KLQotI2lmZGVmIFBPU0lYCi0jaWZuZGVmIEJTRDQ0T1JQ T1NJWAotI2RlZmluZSBCU0Q0NE9SUE9TSVgKLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSNl bmRpZiAvKiBQT1NJWCAqLwotCi0jaWZkZWYgVU5JWAkJCQkvKiBGb3IgaXRlbXMgY29tbW9uIHRv IE9TLzIgYW5kIFVOSVggKi8KLSNpZm5kZWYgT1MyT1JVTklYCi0jZGVmaW5lIE9TMk9SVU5JWAot I2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmZGVmIFVOSVgJ CQkJLyogRm9yIGl0ZW1zIGNvbW1vbiB0byBWTVMgYW5kIFVOSVggKi8KLSNkZWZpbmUgVk1TT1JV TklYCi0jZWxzZQotI2lmZGVmIFZNUwotI2RlZmluZSBWTVNPUlVOSVgKLSNpZm5kZWYgT1MyT1JW TVMKLSNkZWZpbmUgT1MyT1JWTVMKLSNlbmRpZiAvKiBPUzJPUlZNUyAqLwotI2VuZGlmIC8qIFZN UyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmbmRlZiBVTklYT1JPU0sJCQkvKiBVTklYIG9y IE9TLTkgKG9yIE9TLTkwMDApICovCi0jaWZkZWYgVU5JWAotI2RlZmluZSBVTklYT1JPU0sKLSNl bHNlCi0jaWZkZWYgT1NLCi0jZGVmaW5lIFVOSVhPUk9TSwotI2VuZGlmIC8qIE9TSyAqLwotI2Vu ZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLQotI2lmbmRlZiBPU0tPUlVO SVgKLSNpZmRlZiBVTklYT1JPU0sKLSNkZWZpbmUgT1NLT1JVTklYCi0jZW5kaWYgLyogVU5JWE9S T1NLICovCi0jZW5kaWYgLyogT1NLT1JVTklYICovCi0KLSNpZmRlZiBPUzIKLSNkZWZpbmUgQ0tf QU5TSUMJCSAvKiBPUy8yIHN1cHBvcnRzIEFOU0lDIGFuZCBtb3JlIGV4dGVuc2lvbnMgKi8KLSNl bmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE9TRjUwCQkJICAgLyogTmV3ZXIgT1NGLzEgdmVyc2lv bnMgaW1wbHkgb2xkZXIgb25lcyAqLwotI2lmbmRlZiBPU0Y0MAotI2RlZmluZSBPU0Y0MAotI2Vu ZGlmIC8qIE9TRjQwICovCi0jZW5kaWYgLyogT1NGNTAgKi8KLQotI2lmZGVmIE9TRjQwCi0jaWZu ZGVmIE9TRjMyCi0jZGVmaW5lIE9TRjMyCi0jZW5kaWYgLyogT1NGMzIgKi8KLSNlbmRpZiAvKiBP U0Y0MCAqLwotCi0jaWZkZWYgT1NGMzIKLSNpZm5kZWYgT1NGMzAKLSNkZWZpbmUgT1NGMzAKLSNl bmRpZiAvKiBPU0YzMCAqLwotI2VuZGlmIC8qIE9TRjMyICovCi0KLSNpZmRlZiBPU0YzMAotI2lm bmRlZiBPU0YyMAotI2RlZmluZSBPU0YyMAotI2VuZGlmIC8qIE9TRjIwICovCi0jZW5kaWYgLyog T1NGMzAgKi8KLQotI2lmZGVmIE9TRjIwCi0jaWZuZGVmIE9TRjEwCi0jZGVmaW5lIE9TRjEwCi0j ZW5kaWYgLyogT1NGMTAgKi8KLSNlbmRpZiAvKiBPU0YyMCAqLwotCi0jaWZkZWYgX19ERUNDCQkJ CS8qIEZvciBERUMgQWxwaGEgVk1TIG9yIE9TRi8xICovCi0jaWZuZGVmIENLX0FOU0lDCi0jZGVm aW5lIENLX0FOU0lDCQkJLyogRXZlbiB3aXRoIC9zdGFuZD12YXhjLCBuZWVkIGFuc2kgKi8KLSNl bmRpZiAvKiBDS0FOU0lDICovCi0jaWZuZGVmIFNJR19WCi0jZGVmaW5lIFNJR19WCQkJCS8qIGFu ZCBzaWduYWwgdHlwZSBpcyBWT0lEICovCi0jZW5kaWYgLyogU0lHX1YgKi8KLSNpZm5kZWYgQ0tf QU5TSUxJQlMKLSNkZWZpbmUgQ0tfQU5TSUxJQlMJCQkvKiAoTWFydGluIFppbnNlciwgRmViIDE5 OTUpICovCi0jZW5kaWYgLyogQ0tfQU5TSUxJQlMgKi8KLSNpZm5kZWYgX1BPU0lYX0NfU09VUkNF Ci0jZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAxCi0jZW5kaWYgLyogX1BPU0lYX0NfU09VUkNFICov Ci0jZW5kaWYJLyogX19ERUNDICovCi0KLSNpZmRlZiBWTVMKLSNpZmRlZiBfX2lhNjQJCQkJLyog Vk1TIG9uIEl0YW5pdW0gKi8KLSNpZm5kZWYgVk1TSTY0Ci0jZGVmaW5lIFZNU0k2NAotI2VuZGlm CS8qIFZNU0k2NCAqLwotI2VuZGlmCS8qIF9faWE2NCAqLwotI2lmbmRlZiBWTVM2NEJJVAkJCS8q IDY0LWJpdCBWTVMgb24gSXRhbml1bSBvciBBbHBoYSAqLwotI2lmZGVmIF9faWE2NAotI2RlZmlu ZSBWTVM2NEJJVAotI2Vsc2UKLSNpZmRlZiBfX0FMUEhBCi0jZGVmaW5lIFZNUzY0QklUCi0jZW5k aWYJLyogX19pYTY0ICovCi0jZW5kaWYJLyogX19BTFBIQSAqLwotI2VuZGlmCS8qIFZNUzY0QklU ICovCi0jZW5kaWYJLyogVk1TICovCi0KLSNpZmRlZiBhcG9sbG8JCQkJLyogTWF5IGJlIEFOU0kt QywgY2hlY2sgZnVydGhlciAqLwotI2lmZGVmIF9fU1REQ1BQX18KLSNkZWZpbmUgQ0tfQU5TSUMJ CQkvKiBZZXMsIHRoaXMgaXMgcmVhbCBBTlNJLUMgKi8KLSNkZWZpbmUgU0lHX1YKLSNlbHNlCi0j ZGVmaW5lIE5PQU5TSQkJCQkvKiBOb3BlLCBub3QgQU5TSSAqLwotI3VuZGVmIF9fU1REQ19fCQkJ CS8qIEV2ZW4gdGhvdWdoIGl0IHNheSBpdCBpcyEgKi8KLSNkZWZpbmUgU0lHX0kKLSNlbmRpZiAv KiBfX1NURENQUF9fICovCi0jZW5kaWYgLyogYXBvbGxvICovCi0KLSNpZmRlZiBQT1NJWAkJCQkv KiAtRFBPU0lYIG9uIGNjIGNvbW1hbmQgbGluZSAqLwotI2lmbmRlZiBfUE9TSVhfU09VUkNFCQkJ LyogSW1wbGllcyBfUE9TSVhfU09VUkNFICovCi0jZGVmaW5lIF9QT1NJWF9TT1VSQ0UKLSNlbmRp ZiAvKiBfUE9TSVhfU09VUkNFICovCi0jZW5kaWYgLyogUE9TSVggKi8KLQotLyoKLSAgQU5TSSBD PyAgVGhhdCBpcywgZG8gd2UgaGF2ZSBmdW5jdGlvbiBwcm90b3R5cGVzLCBuZXctc3R5bGUKLSAg ZnVuY3Rpb24gZGVjbGFyYXRpb25zLCBhbmQgcGFyYW1ldGVyIHR5cGUgY2hlY2tpbmcgYW5kIGNv ZXJjaW9uPwotKi8KLSNpZmRlZiBNQUMJCQkJLyogTVBXIEMgaXMgQU5TSSAqLwotI2lmbmRlZiBO T0FOU0kKLSNpZm5kZWYgQ0tfQU5TSUMKLSNkZWZpbmUgQ0tfQU5TSUMKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotI2VuZGlmIC8qIE5PQU5TSSAqLwotI2VuZGlmIC8qIE1BQyAqLwotCi0jaWZkZWYg U1RSQVRVUwkJCQkvKiBTdHJhdHVzIFZPUyAqLwotI2lmbmRlZiBDS19BTlNJQwotI2RlZmluZSBD S19BTlNJQwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0jaWZuZGVmIE5PU1RBVAotI2RlZmluZSBO T1NUQVQKLSNlbmRpZiAvKiBOT1NUQVQgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0KLSNpZm5k ZWYgTk9BTlNJCi0jaWZkZWYgX19TVERDX18JCQkJLyogX19TVERDX18gbWVhbnMgQU5TSSBDICov Ci0jaWZuZGVmIENLX0FOU0lDCi0jZGVmaW5lIENLX0FOU0lDCi0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLSNlbmRpZiAvKiBfX1NURENfXyAqLwotI2VuZGlmIC8qIE5PQU5TSSAqLwotLyoKLSAgX1BS T1RPVFlQKCkgaXMgdXNlZCBmb3IgZm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zIHNv IHdlIGNhbiBoYXZlCi0gIHBhcmFtZXRlciBhbmQgcmV0dXJuIHZhbHVlIHR5cGUgY2hlY2tpbmcg aWYgdGhlIGNvbXBpbGVyIG9mZmVycyBpdC4KLSAgX19TVERDX18gc2hvdWxkIGJlIGRlZmluZWQg YnkgdGhlIGNvbXBpbGVyIG9ubHkgaWYgZnVuY3Rpb24gcHJvdG90eXBlcyBhcmUKLSAgYWxsb3dl ZC4gIE90aGVyd2lzZSwgd2UgZ2V0IG9sZC1zdHlsZSBmb3J3YXJkIGRlY2xhcmF0aW9ucy4gIE91 ciBvd24gcHJpdmF0ZQotICBDS19BTlNJQyBzeW1ib2wgdGVsbHMgd2hldGhlciB3ZSB1c2UgQU5T SSBDIHByb3RvdHlwZXMuICBUbyBmb3JjZSB1c2Ugb2YKLSAgQU5TSSBwcm90b3R5cGVzLCBpbmNs dWRlIC1EQ0tfQU5TSUMgb24gdGhlIGNjIGNvbW1hbmQgbGluZS4gIFRvIGRpc2FibGUgdGhlCi0g IHVzZSBvZiBBTlNJIHByb3RvdHlwZXMsIGluY2x1ZGUgLUROT0FOU0kuCi0qLwotI2lmZGVmIENL X0FOU0lDCi0jZGVmaW5lIF9QUk9UT1RZUCggZnVuYywgcGFybXMgKSBmdW5jIHBhcm1zCi0jZWxz ZSAvKiBOb3QgQU5TSSBDICovCi0jZGVmaW5lIF9QUk9UT1RZUCggZnVuYywgcGFybXMgKSBmdW5j KCkKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotCi0jaWZuZGVmIE9TMgotI2lmZGVmIE5PTE9HSU4J CQkJLyogTk9MT0dJTiBpbXBsaWVzIE5PSUtTRCAqLwotI2lmbmRlZiBOT0lLU0QKLSNkZWZpbmUg Tk9JS1NECi0jZW5kaWYgLyogTk9JS1NEICovCi0jZW5kaWYgLyogTk9MT0dJTiAqLwotI2VuZGlm IC8qIE9TMiAqLwotCi0jaWZkZWYgTk9JS1NECQkJCS8qIEludGVybmV0IEtlcm1pdCBTZXJ2aWNl IERhZW1vbiAqLwotI2lmbmRlZiBPUzIKLSNpZm5kZWYgTk9QUklOVEZTVUJTVAotI2RlZmluZSBO T1BSSU5URlNVQlNUCi0jZW5kaWYgLyogTk9QUklOVEZTVUJTVCAqLwotI2VuZGlmIC8qIE9TMiAq LwotI2lmbmRlZiBOT0xPR0lOCi0jZGVmaW5lIE5PTE9HSU4KLSNlbmRpZiAvKiBOT0xPR0lOICov Ci0jaWZuZGVmIE5PU1lTTE9HCi0jZGVmaW5lIE5PU1lTTE9HCi0jZW5kaWYgLyogTk9TWVNMT0cg Ki8KLSNpZm5kZWYgTk9XVE1QCi0jZGVmaW5lIE5PV1RNUAotI2VuZGlmIC8qIE5PV1RNUCAqLwot I2Vsc2UKLSNpZm5kZWYgSUtTRAotI2lmZGVmIE9TMk9SVU5JWAkJCS8qIFBsYXRmb3JtcyB3aGVy ZSBJS1NEIGlzIHN1cHBvcnRlZCAqLwotI2RlZmluZSBJS1NECi0jZW5kaWYgLyogT1MyT1JVTklY ICovCi0jZW5kaWYgLyogSUtTRCAqLwotI2VuZGlmIC8qIE5PSUtTRCAqLwotCi0jaWZkZWYgSUtT RAkJCQkvKiBJS1NEIG9wdGlvbnMuLi4gKi8KLSNpZm5kZWYgSUtTRENPTkYJCQkvKiBJS1NEIGNv bmZpZ3VyYXRpb24gZmlsZSAqLwotI2lmZGVmIFVOSVgKLSNkZWZpbmUgSUtTRENPTkYgIi9ldGMv aWtzZC5jb25mIgotI2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUgSUtTRENPTkYgImlrc2Qua3Nj IgotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBJS1NEQ09O RiAqLwotI2lmbmRlZiBOT0lLU0RCCi0jaWZuZGVmIElLU0RCCQkJCS8qIElLU0QgZGF0YWJhc2Ug Ki8KLSNpZmRlZiBVTklYCi0jZGVmaW5lIElLU0RCCi0jZGVmaW5lIElLX0xDS1RSSUVTIDE2CQkJ LyogSG93IG1hbnkgdGltZXMgdG8gdHJ5IHRvIGdldCBsb2NrICovCi0jZGVmaW5lIElLX0xDS1NM RUVQIDEJCQkvKiBIb3cgbG9uZyB0byBzbGVlcCBiZXR3ZWVuIHRyaWVzICovCi0jZGVmaW5lIElL X0xPQ0tGSUxFICJpa3NkLmxjayIJCS8qIERhdGFiYXNlIGxvY2tmaWxlbmFtZSAqLwotI2RlZmlu ZSBJS19EQkFTRURJUiAiL3Zhci9sb2cvIgkJLyogRGF0YWJhc2UgZGlyZWN0b3J5ICovCi0jZGVm aW5lIElLX0RCQVNFRklMICJpa3NkLmRiIgkJLyogRGF0YWJhc2UgZmlsZW5hbWUgKi8KLSNlbHNl IC8qIFVOSVggKi8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgSUtTREIKLSNpZm5kZWYgTk9GVFJVTkNB VEUJCQkvKiBmdHJ1bmNhdGUoKSBub3QgYXZhaWxhYmxlICovCi0jZGVmaW5lIE5PRlRSVU5DQVRF Ci0jZW5kaWYgLyogTk9GVFJVTkNBVEUgKi8KLSNkZWZpbmUgSUtfTENLVFJJRVMgMTYJCQkvKiBI b3cgbWFueSB0aW1lcyB0byB0cnkgdG8gZ2V0IGxvY2sgKi8KLSNkZWZpbmUgSUtfTENLU0xFRVAg MQkJCS8qIEhvdyBsb25nIHRvIHNsZWVwIGJldHdlZW4gdHJpZXMgKi8KLSNkZWZpbmUgSUtfTE9D S0ZJTEUgImlrc2QubGNrIgkJLyogREIgbG9ja2ZpbGVuYW1lIChpbiBzeXN0ZW1yb290KSAqLwot I2RlZmluZSBJS19EQkFTRUZJTCAiaWtzZC5kYiIJCS8qIERhdGFiYXNlIGZpbGVuYW1lICovCi0j ZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIElLU0RCICovCi0j ZW5kaWYgLyogTk9JS1NEQiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLS8qCi0gIFN1YnN0aXR1dGVz IGZvciBwcmludGYoKSBhbmQgZnJpZW5kcyB1c2VkIGluIElLUyB0byBjb21wZW5zYXRlIGZvcgot ICBsYWNrIG9mIGEgdGVybWluYWwgZHJpdmVyLCBtYWlubHkgdG8gc3VwcGx5IENSIGFmdGVyIExG LgotKi8KLSNpZm5kZWYgTk9QUklOVEZTVUJTVAotI2lmZGVmIE1BQwotLyoKLSAqIFRoZSBNQUMg ZG9lc24ndCB1c2Ugc3RhbmRhcmQgc3RkaW8gcm91dGluZXMuCi0gKi8KLSN1bmRlZiBnZXRjaGFy Ci0jZGVmaW5lIGdldGNoYXIoKSAgIG1hY19nZXRjaGFyKCkKLSN1bmRlZiBwdXRjaGFyCi0jZGVm aW5lIHB1dGNoYXIoYykJbWFjX3B1dGNoYXIoYykKLSNkZWZpbmUgcHJpbnRmCQltYWNfcHJpbnRm Ci0jZGVmaW5lIHBlcnJvcgkJbWFjX3BlcnJvcgotI2RlZmluZSBwdXRzCQltYWNfcHV0cwotZXh0 ZXJuIGludCBtYWNfcHV0Y2hhciAoaW50IGMpOwotZXh0ZXJuIGludCBtYWNfcHV0cyAoY29uc3Qg Y2hhciAqc3RyaW5nKTsKLWV4dGVybiBpbnQgbWFjX3ByaW50Zihjb25zdCBjaGFyICosIC4uLik7 Ci1leHRlcm4gaW50IG1hY19nZXRjaGFyICh2b2lkKTsKLSNlbmRpZiAvKiBNQUMgKi8KLQotI2lm ZGVmIE9TMgotI2RlZmluZSBwcmludGYgVnNjcm5wcmludGYKLSNkZWZpbmUgZnByaW50ZiBWc2Ny bmZwcmludGYKLWV4dGVybiBpbnQgVnNjcm5wcmludGYoY29uc3QgY2hhciAqLCAuLi4pOwotZXh0 ZXJuIGludCBWc2NybnByaW50dyhjb25zdCBjaGFyICosIC4uLik7Ci1leHRlcm4gaW50IFZzY3Ju ZnByaW50ZihGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKLSNpZmRlZiBwdXRjaGFyCi0jdW5k ZWYgcHV0Y2hhcgotI2VuZGlmIC8qIHB1dGNoYXIgKi8KLSNkZWZpbmUgcHV0Y2hhcih4KSBWc2Ny bnByaW50ZigiJWMiLHgpCi0jZGVmaW5lIHBlcnJvcih4KSAgVnNjcm5wZXJyb3IoeCkKLSNlbmRp ZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBDS1dBUlRfQwotI2lmZGVmIFVOSVgKLSNpZm5kZWYgcGRw MTEKLSNpZm5kZWYgQ0tYUFJJTlRGCi0jZGVmaW5lIENLWFBSSU5URgotI2VuZGlmIC8qIENLWFBS SU5URiAqLwotI2VuZGlmIC8qIHBkcDExICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8q IENLV0FSVF9DICovCi0jZW5kaWYgLyogTk9QUklOVEZTVUJTVCAqLwotCi0jaWZkZWYgQ0tYUFJJ TlRGCi0jZGVmaW5lIHByaW50ZiBja3hwcmludGYKLSNkZWZpbmUgZnByaW50ZiBja3hmcHJpbnRm Ci0jaWZkZWYgQ0tfQU5TSUMKLV9QUk9UT1RZUChpbnQgY2t4cHJpbnRmLChjb25zdCBjaGFyICos IC4uLikpOwotI2lmZGVmIE5FWFQKLV9QUk9UT1RZUCh2b2lkIGNreHBlcnJvciwoY29uc3QgY2hh ciAqKSk7Ci0jZWxzZQotI2lmZGVmIENLX1NDT1Y1Ci1fUFJPVE9UWVAodm9pZCBja3hwZXJyb3Is KGNvbnN0IGNoYXIgKikpOwotI2Vsc2UKLV9QUk9UT1RZUChpbnQgY2t4cGVycm9yLChjb25zdCBj aGFyICopKTsKLSNlbmRpZiAvKiBDS19TQ09WNSAqLwotI2VuZGlmIC8qIE5FWFQgKi8KLV9QUk9U T1RZUChpbnQgY2t4ZnByaW50ZiwoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLikpOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi0jaWZkZWYgcHV0Y2hhcgotI3VuZGVmIHB1dGNoYXIKLSNlbmRpZiAv KiBwdXRjaGFyICovCi0jZGVmaW5lIHB1dGNoYXIoeCkgY2t4cHJpbnRmKCIlYyIseCkKLSNpZmRl ZiBwdXRjCi0jdW5kZWYgcHV0YwotI2VuZGlmIC8qIHB1dGMgKi8KLSNkZWZpbmUgcHV0YyhhLGIp IGNreGZwcmludGYoYiwiJWMiLGEpCi0jZGVmaW5lIHBlcnJvcih4KSAgY2t4cGVycm9yKHgpCi0j ZW5kaWYgLyogQ0tYUFJJTlRGICovCi0KLS8qCi0gIEFsdG9zLXNwZWNpZmljIGl0ZW1zOiA0ODYs IDU4NiwgOTg2IG1vZGVscy4uLgotKi8KLSNpZmRlZiBBOTg2Ci0jZGVmaW5lIE1fVk9JRAotI2Rl ZmluZSB2b2lkIGludAotI2RlZmluZSBDSEFSIGNoYXIKLSNkZWZpbmUgU0lHX0kKLSNlbmRpZiAv KiBBOTg2ICovCi0KLS8qIFNpZ25hbCBoYW5kbGluZyAqLwotCi0jaWZkZWYgUU5YCi0jaWZuZGVm IENLX1BPU0lYX1NJRwotI2RlZmluZSBDS19QT1NJWF9TSUcKLSNlbmRpZiAvKiBDS19QT1NJWF9T SUcgKi8KLSNlbmRpZiAvKiBRTlggKi8KLQotLyogCi0gIHZvaWQgdHlwZSwgbm9ybWFsbHkgYXZh aWxhYmxlIG9ubHkgaW4gQU5TSSBjb21waWxlcnMuCi0gIFRoZSBIUC1VWCBleGNlcHRpb24gKGZv ciBpdHMgImJ1bmRsZWQiIG5vbi1BTlNJIEMgY29tcGlsZXIpCi0gIGlzIGtub3duIHRvIGJlIHZh bGlkIGJhY2sgdG8gSFAtVVggNi41LgotICBBZGp1c3RtZW50cyBtaWdodCBiZSBuZWVkZWQgZm9y IGVhcmxpZXIgSFAtVVggdmVyc2lvbnMuCi0qLwotI2lmbmRlZiBWT0lECQkJCS8qIFVzZWQgdGhy b3VnaG91dCBhbGwgQy1LZXJtaXQgKi8KLSNpZmRlZiBDS19BTlNJQwkJCQkvKiBtb2R1bGVzLi4u ICovCi0jZGVmaW5lIFZPSUQgdm9pZAotI2Vsc2UKLSNpZmRlZiBIUFVYCi0jZGVmaW5lIFZPSUQg dm9pZAotI2Vsc2UKLSNkZWZpbmUgVk9JRCBpbnQKLSNlbmRpZiAvKiBIUFVYICovCi0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLSNlbmRpZiAvKiBWT0lEICovCi0vKgotICBFeGFjdGx5IHRoZSBzYW1l IGFzIFZPSUQgYnV0IGZvciB1c2UgaW4gY29udGV4dHMgd2hlcmUgdGhlIFZPSUQgc3ltYm9sCi0g IGNvbmZsaWN0cyBzb21lIGhlYWRlci1maWxlIGRlZmluaXRpb24uICBUaGlzIGlzIG5lZWRlZCBm b3IgdGhlIHNlY3Rpb24KLSAgb2YgY2t1dXN4LmMgdGhhdCBwcm92aWRlcyBDLUtlcm1pdCdzIGN1 cnNlcyBpbnRlcmZhY2UsIHJvdWdobHkgdGhlCi0gIHNlY29uZCBoYWxmIG9mIGNrdXVzeC5jLgot Ki8KLSNpZm5kZWYgQ0tWT0lECi0jaWZkZWYgQ0tfQU5TSUMKLSNkZWZpbmUgQ0tWT0lEIHZvaWQK LSNlbHNlCi0jaWZkZWYgSFBVWAotI2RlZmluZSBDS1ZPSUQgdm9pZAotI2Vsc2UKLSNkZWZpbmUg Q0tWT0lEIGludAotI2VuZGlmIC8qIEhQVVggKi8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotI2Vu ZGlmIC8qIENLVk9JRCAqLwotCi0vKiBDb25zdCB0eXBlICovCi0KLSNpZm5kZWYgQ09OU1QKLSNp ZmRlZiBPU0sKLSNpZmRlZiBfVUNDCi0jZGVmaW5lIENPTlNUIGNvbnN0Ci0jZWxzZQotI2RlZmlu ZSBDT05TVAotI2VuZGlmIC8qIF9VQ0MgKi8KLSNlbHNlICAvKiAhT1NLICovCi0jaWZkZWYgQ0tf U0NPMzJWNAotI2RlZmluZSBDT05TVAotI2Vsc2UKLSNpZmRlZiBDS19BTlNJQwotI2RlZmluZSBD T05TVCBjb25zdAotI2Vsc2UKLSNkZWZpbmUgQ09OU1QKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot I2VuZGlmIC8qIENLX1NDTzMyVjQgKi8KLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBDT05T VCAqLwotCi0vKiBTaWduYWwgdHlwZSAqLwotCi0jaWZuZGVmIFNJR19WCQkJCS8qIHNpZ25hbCgp IHR5cGUsIGlmIG5vdCBkZWYnZCB5ZXQgKi8KLSNpZm5kZWYgU0lHX0kKLSNpZmRlZiBPUzIKLSNk ZWZpbmUgU0lHX1YKLSNlbHNlCi0jaWZkZWYgUE9TSVgKLSNkZWZpbmUgU0lHX1YKLSNlbHNlCi0j aWZkZWYgU1ZSMwkJCQkvKiBTeXN0ZW0gViBSMyBhbmQgbGF0ZXIgKi8KLSNkZWZpbmUgU0lHX1YK LSNlbHNlCi0jaWZkZWYgU1VOT1M0CQkJCS8qIFNVTk9TIFYgNC4wIGFuZCBsYXRlciAqLwotI2lm bmRlZiBzdW4zODYKLSNkZWZpbmUgU0lHX1YKLSNlbHNlCi0jZGVmaW5lIFNJR19JCi0jZW5kaWYg Lyogc3VuMzg2ICovCi0jZWxzZQotI2lmZGVmIE5FWFQJCQkJLyogTmVYVCAqLwotI2RlZmluZSBT SUdfVgotI2Vsc2UKLSNpZmRlZiBBSVgzNzAKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNkZWZpbmUg U0lHX1YKLSNkZWZpbmUgU0lHVFlQIF9fU0lHVk9JRAkJLyogQUlYMzcwICovCi0jZWxzZQotI2lm ZGVmIFNUUkFUVVMJCQkJLyogU3RyYXR1cyBWT1MgKi8KLSNkZWZpbmUgU0lHX1YKLSNlbHNlCi0j aWZkZWYgTUFDCi0jZGVmaW5lIFNJR1RZUCBsb25nCi0jZGVmaW5lIFNJR19JCi0jaWZuZGVmIE1Q VzMzCi0jZGVmaW5lIFNJR19JR04gMAotI2VuZGlmIC8qIE1QVzMzICovCi0jZGVmaW5lIFNJR0FM Uk0gMQotI2lmbmRlZiBNUFczMwotI2RlZmluZSBTSUdJTlQgIDIKLSNlbmRpZiAvKiBNUFczMyAq LwotI2Vsc2UgLyogRXZlcnl0aGluZyBlbHNlICovCi0jZGVmaW5lIFNJR19JCi0jZW5kaWYgLyog TUFDICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIEFJWDM3MCAqLwotI2VuZGlm IC8qIE5FWFQgKi8KLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNlbmRpZiAvKiBTVlIzICovCi0jZW5k aWYgLyogUE9TSVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBTSUdfSSAqLwotI2Vu ZGlmIC8qIFNJR19WICovCi0KLSNpZmRlZiBTSUdfSQotI2RlZmluZSBTSUdSRVRVUk4gcmV0dXJu KDApCi0jaWZuZGVmIFNJR1RZUAotI2RlZmluZSBTSUdUWVAgaW50Ci0jZW5kaWYgLyogU0lHVFlQ ICovCi0jZW5kaWYgLyogU0lHX0kgKi8KLQotI2lmZGVmIFNJR19WCi0jZGVmaW5lIFNJR1JFVFVS TiByZXR1cm4KLSNpZm5kZWYgU0lHVFlQCi0jZGVmaW5lIFNJR1RZUCB2b2lkCi0jZW5kaWYgLyog U0lHVFlQICovCi0jZW5kaWYgLyogU0lHX1YgKi8KLQotI2lmZGVmIE5UCi0jaWZuZGVmIFNJR1RZ UAotI2RlZmluZSBTSUdUWVAgdm9pZAotI2VuZGlmIC8qIFNJR1RZUCAqLwotI2VuZGlmIC8qIE5U ICovCi0KLSNpZm5kZWYgU0lHVFlQCi0jZGVmaW5lIFNJR1RZUCBpbnQKLSNlbmRpZiAvKiBTSUdU WVAgKi8KLQotI2lmbmRlZiBTSUdSRVRVUk4KLSNkZWZpbmUgU0lHUkVUVVJOIHJldHVybigwKQot I2VuZGlmIC8qIFNJR1JFVFVSTiAqLwotCi0jaWZkZWYgQ0tOVFNJRwotLyogVGhpcyBkb2VzIG5v dCB3b3JrLCBzbyBkb24ndCB1c2UgaXQuICovCi0jZGVmaW5lIHNpZ25hbCBja250c2lnbmFsCi1T SUdUWVAgKCpja250c2lnbmFsKGludCB0eXBlLCBTSUdUWVAgKCopKGludCkpKShpbnQpOwotI2Vu ZGlmIC8qIENLTlRTSUcgKi8KLQotLyogV2Ugd2FudCBhbGwgY2hhcmFjdGVycyB0byBiZSB1bnNp Z25lZCBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgaXQgKi8KLQotI2lmZGVmIEtVSQotI2lmZGVm IENIQVIKLSN1bmRlZiBDSEFSCi0jZW5kaWYgLyogQ0hBUiAqLwotI2RlZmluZSBDSEFSIHVuc2ln bmVkIGNoYXIKLSNlbHNlCi0jaWZkZWYgUFJPVlgxCi10eXBlZGVmIGNoYXIgQ0hBUjsKLS8qIHR5 cGVkZWYgbG9uZyBMT05HOyAqLwotdHlwZWRlZiBpbnQgdm9pZDsKLSNlbHNlCi0jaWZkZWYgTUlO SVgKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBDSEFSOwotI2Vsc2UKLSNpZmRlZiBWNwotdHlwZWRl ZiBjaGFyIENIQVI7Ci0jZWxzZQotI2lmZGVmIEM3MAotdHlwZWRlZiBjaGFyIENIQVI7Ci0vKiB0 eXBlZGVmIGxvbmcgTE9ORzsgKi8KLSNlbHNlCi0jaWZkZWYgQlNEMjkKLXR5cGVkZWYgY2hhciBD SEFSOwotLyogdHlwZWRlZiBsb25nIExPTkc7ICovCi0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFs Ci0jZGVmaW5lIENIQVIgdW5zaWduZWQgY2hhcgkJCS8qIDMuMjIgY29tcGlsZXIgKi8KLSNlbHNl Ci0jaWZkZWYgSFBVWAotI2RlZmluZSBDSEFSIHVuc2lnbmVkIGNoYXIKLSNlbHNlCi0jaWZkZWYg T1MyCi0jaWZkZWYgTlQKLSNkZWZpbmUgQ0hBUiB1bnNpZ25lZCBjaGFyCi0jZWxzZSAvKiBOVCAq LwotI2lmZGVmIENIQVIKLSN1bmRlZiBDSEFSCi0jZW5kaWYgLyogQ0hBUiAqLwotdHlwZWRlZiB1 bnNpZ25lZCBjaGFyIENIQVI7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbHNlIC8qIE9TMiAqLwotI2lm ZGVmIFZNUwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIENIQVI7Ci0jZWxzZQotI2lmZGVmIENIQVIK LSN1bmRlZiBDSEFSCi0jZW5kaWYgLyogQ0hBUiAqLwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIENI QVI7Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogSFBVWCAq LwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogQlNEMjkgKi8KLSNlbmRpZiAv KiBDNzAgKi8KLSNlbmRpZiAvKiBWNyAqLwotI2VuZGlmIC8qIE1JTklYICovCi0jZW5kaWYgLyog UFJPVlgxICovCi0jZW5kaWYgLyogS1VJICovCi0KLXVuaW9uIGNrX3Nob3J0IHsJCQkvKiBNYWlu bHkgZm9yIFVuaWNvZGUgKi8KLSAgICBVU0hPUlQgeF9zaG9ydDsKLSAgICBDSEFSIHhfY2hhclsy XTsKLX07Ci0KLSNpZmRlZiBNQUMJCQkJLyogTWFjaW50b3NoIGZpbGUgcm91dGluZXMgKi8KLSNp Zm5kZWYgQ0tXQVJUX0MJCQkvKiBCdXQgbm90IGluICJ3YXJ0Ii4uLiAqLwotI2lmZGVmIGZlb2YK LSN1bmRlZiBmZW9mCi0jZW5kaWYgLyogZmVvZiAqLwotI2RlZmluZSBmZW9mIG1hY19mZW9mCi0j ZGVmaW5lIHJld2luZCBtYWNfcmV3aW5kCi0jZGVmaW5lIGZnZXRzIG1hY19mZ2V0cwotI2RlZmlu ZSBmb3BlbiBtYWNfZm9wZW4KLSNkZWZpbmUgZmNsb3NlIG1hY19mY2xvc2UKLWludCBtYWNfZmVv ZigpOwotdm9pZCBtYWNfcmV3aW5kKCk7Ci1jaGFyICptYWNfZmdldHMoKTsKLUZJTEUgKm1hY19m b3BlbigpOwotaW50IG1hY19mY2xvc2UoKTsKLSNlbmRpZiAvKiBDS0NQUk9fVyAqLwotI2VuZGlm IC8qIE1BQyAqLwotLyoKLSAgIFN5c3RlbXMgd2hvc2UgbWFpbmxpbmUgbW9kdWxlcyBoYXZlIGFj Y2VzcyB0byB0aGUgY29tbXVuaWNhdGlvbi1saW5lCi0gICBmaWxlIGRlc2NyaXB0b3IsIHR0eWZk LgotKi8KLSNpZm5kZWYgQ0tfVFRZRkQKLSNpZmRlZiBVTklYCi0jZGVmaW5lIENLX1RUWUZECi0j ZWxzZQotI2lmZGVmIE9TMgotI2RlZmluZSBDS19UVFlGRAotI2Vsc2UKLSNpZmRlZiBWTVMKLSNk ZWZpbmUgQ0tfVFRZRkQKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRp ZiAvKiBVTklYICovCi0jZW5kaWYgLyogQ0tfVFRZRkQgKi8KLQotLyogU3lzdGVtcyB3aGVyZSB3 ZSBjYW4gZ2V0IG91ciBvd24gcHJvY2VzcyBJRCAqLwotCi0jaWZuZGVmIENLX1BJRAotI2lmZGVm IFVOSVgKLSNkZWZpbmUgQ0tfUElECi0jZW5kaWYgLyogVU5JWCAqLwotI2lmZGVmIE9TMgotI2Rl ZmluZSBDS19QSUQKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBWTVMKLSNkZWZpbmUgQ0tfUElE Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogQ0tfUElEICovCi0KLS8qIFN5c3RlbXMgdGhh dCBzdXBwb3J0IHRoZSBNaWNyb3NvZnQgVGVsZXBob255IEFQSSAoVEFQSSkgKi8KLQotI2lmbmRl ZiBOT0RJQUwKLSNpZm5kZWYgQ0tfVEFQSQotI2lmZGVmIE5UCi0jZGVmaW5lIENLX1RBUEkKLSNl bmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8K LQotI2lmbmRlZiBOT05aWFBBTkQKLSNpZm5kZWYgTlpYUEFORAotI2lmZGVmIE9TMk9SVU5JWAot I2RlZmluZSBOWlhQQU5ECi0jZWxzZQotI2lmZGVmIFZNUwotI2RlZmluZSBOWlhQQU5ECi0jZWxz ZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0jZGVmaW5lIE5aWFBBTkQKLSNlbHNlCi0jaWZkZWYgT1NL Ci0jZGVmaW5lIE5aWFBBTkQKLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotI2VuZGlmIC8q IE5aWFBBTkQgKi8KLSNlbHNlCi0jaWZkZWYgTlpYUEFORAotI3VuZGVmIE5aWFBBTkQKLSNlbmRp ZiAvKiBOWlhQQU5EICovCi0jZW5kaWYgLyogTk9OWlhQQU5EICovCi0KLS8qIG56eHBhbmQoKSBv cHRpb24gZmxhZ3MgKi8KLQotI2RlZmluZSBaWF9GSUxPTkxZICAgMQkJCS8qIE1hdGNoIG9ubHkg cmVndWxhciBmaWxlcyAqLwotI2RlZmluZSBaWF9ESVJPTkxZICAgMgkJCS8qIE1hdGNoIG9ubHkg ZGlyZWN0b3JpZXMgKi8KLSNkZWZpbmUgWlhfUkVDVVJTRSAgIDQJCQkvKiBEZXNjZW5kIHRocm91 Z2ggZGlyZWN0b3J5IHRyZWUgKi8KLSNkZWZpbmUgWlhfTUFUQ0hET1QgIDgJCQkvKiBNYXRjaCAi ZG90IGZpbGVzIiAqLwotI2RlZmluZSBaWF9OT0JBQ0tVUCAxNgkJCS8qIERvbid0IG1hdGNoICJi YWNrdXAgZmlsZXMiICovCi0jZGVmaW5lIFpYX05PTElOS1MgIDMyCQkJLyogRG9uJ3QgZm9sbG93 IHN5bWxpbmtzICovCi0KLSNpZm5kZWYgTlpYUEFORAotI2RlZmluZSBuenhwYW5kKGEsYikgenhw YW5kKGEpCi0jZW5kaWYgLyogTlpYUEFORCAqLwotCi0jaWZuZGVmIE5PWlhSRVdJTkQKLSNpZm5k ZWYgWlhSRVdJTkQJCQkvKiBQbGF0Zm9ybXMgdGhhdCBoYXZlIHp4cmV3aW5kKCkgKi8KLSNpZmRl ZiBPUzJPUlVOSVgKLSNkZWZpbmUgWlhSRVdJTkQKLSNlbHNlCi0jaWZkZWYgVk1TCi0jZGVmaW5l IFpYUkVXSU5ECi0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0jZGVmaW5lIFpYUkVXSU5ECi0j ZWxzZQotI2lmZGVmIE9TSwotI2RlZmluZSBaWFJFV0lORAotI2Vsc2UKLSNpZmRlZiBTVFJBVFVT Ci0jZGVmaW5lIFpYUkVXSU5ECi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIE9TSyAq LwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyog T1MyT1JVTklYICovCi0jZW5kaWYgLyogWlhSRVdJTkQgKi8KLSNlbHNlCi0jaWZkZWYgWlhSRVdJ TkQKLSN1bmRlZiBaWFJFV0lORAotI2VuZGlmIC8qIFpYUkVXSU5EICovCi0jZW5kaWYgLyogTk9a WFJFV0lORCAqLwotCi0vKiBUZW1wb3JhcnktZGlyZWN0b3J5LWZvci1SRUNFSVZFIGZlYXR1cmUg Li4uICovCi0vKiBUaGlzIHNheXMgd2hldGhlciB3ZSBoYXZlIHRoZSBpc2RpcigpIGZ1bmN0aW9u IGRlZmluZWQuICovCi0KLSNpZmRlZiBVTklYCQkJCS8qIFVOSVggaGFzIGl0ICovCi0jaWZuZGVm IENLX1RNUERJUgotI2lmbmRlZiBwZHAxMQotI2RlZmluZSBDS19UTVBESVIKLSNkZWZpbmUgVE1Q RElSTEVOIDI1NgotI2VuZGlmIC8qIHBkcDExICovCi0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0j ZW5kaWYgLyogVU5JWCAqLwotCi0jaWZkZWYgVk1TCQkJCS8qIFZNUyB0b28gKi8KLSNpZm5kZWYg Q0tfVE1QRElSCi0jZGVmaW5lIENLX1RNUERJUgotI2RlZmluZSBUTVBESVJMRU4gMjU2Ci0jZW5k aWYgLyogQ0tfVE1QRElSICovCi0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBPUzIJCQkJLyog T1MgdHdvIHRvbyAqLwotI2lmbmRlZiBDS19UTVBESVIKLSNkZWZpbmUgQ0tfVE1QRElSCi0jZGVm aW5lIFRNUERJUkxFTiAxMjkKLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLQotI2lmZGVmIFNUUkFUVVMJCQkJLyogU3RyYXR1cyBWT1MgdG9vLiAqLwotI2lmbmRlZiBD S19UTVBESVIKLSNkZWZpbmUgQ0tfVE1QRElSCi0jZGVmaW5lIFRNUERJUkxFTiAyNTYKLSNlbmRp ZiAvKiBDS19UTVBESVIgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0KLSNpZmRlZiBPU0sJCQkJ LyogT1MtOSB0b28gKi8KLSNpZm5kZWYgQ0tfVE1QRElSCi0jZGVmaW5lIENLX1RNUERJUgotI2Rl ZmluZSBUTVBESVJMRU4gMjU2Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0jZW5kaWYgLyogT1NL ICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbAkJCS8qIEFPUy9WUyB0b28gKi8KLSNpZm5kZWYgQ0tf VE1QRElSCi0jZGVmaW5lIENLX1RNUERJUgotI2RlZmluZSBUTVBESVJMRU4gMjU2Ci0jZW5kaWYg LyogQ0tfVE1QRElSICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotI2lmZGVmIENLX1RN UERJUgkJCS8qIE5lZWRzIGNvbW1hbmQgcGFyc2VyICovCi0jaWZkZWYgTk9JQ1AKLSN1bmRlZiBD S19UTVBESVIKLSNlbmRpZiAvKiBOT0lDUCAqLwotI2VuZGlmIC8qIENLX1RNUERJUiAqLwotCi0v KiBXaGV0aGVyIHRvIGluY2x1ZGUgPHN5cy90aW1lLmg+ICovCi0KLSNpZm5kZWYgTk9USU1FSAkJ CQkvKiA8dGltZS5oPiAqLwotI2lmbmRlZiBUSU1FSAotI2RlZmluZSBUSU1FSAotI2VuZGlmIC8q IFRJTUVIICovCi0jZW5kaWYgLyogTk9USU1FSCAqLwotCi0jaWZuZGVmIE5PU1lTVElNRUgJCQkv KiA8c3lzL3RpbWUuaD4gKi8KLSNpZm5kZWYgU1lTVElNRUgKLSNpZmRlZiBVTklYCQkJCS8qIFVO SVggKi8KLSNpZmRlZiBTVk9SUE9TSVgJCQkvKiBTeXN0ZW0gViBvciBQT1NJWC4uLiAqLwotI2lm ZGVmIE1fVU5JWAotI2RlZmluZSBTWVNUSU1FSAotI2Vsc2UKLSNpZmRlZiBTQ09fMzJWNAotI2Rl ZmluZSBTWVNUSU1FSAotI2Vsc2UKLSNpZmRlZiBPWE9TCi0jZGVmaW5lIFNZU1RJTUVICi0jZWxz ZQotI2lmZGVmIEJTRDQ0Ci0jZGVmaW5lIFNZU1RJTUVICi0jZWxzZQotI2lmZGVmIF9fbGludXhf XwotI2RlZmluZSBTWVNUSU1FSAotI2Vsc2UKLSNpZmRlZiBBSVhSUwotI2lmbmRlZiBBSVg0MQot I2RlZmluZSBTWVNUSU1FSAotI2VuZGlmIC8qIEFJWDQxICovCi0jZWxzZQotI2lmZGVmIElSSVg2 MAotI2RlZmluZSBTWVNUSU1FSAotI2Vsc2UKLSNpZmRlZiBJMzg2SVgKLSNkZWZpbmUgU1lTVElN RUgKLSNlbHNlCi0jaWZkZWYgU1Y2OFIzVjYKLSNkZWZpbmUgU1lTVElNRUgKLSNlbmRpZiAvKiBT VjY4UjNWNiAqLwotI2VuZGlmIC8qIEkzODZJWCAqLwotI2VuZGlmIC8qIElSSVg2MCAqLwotI2Vu ZGlmIC8qIEFJWFJTICovCi0jZW5kaWYgLyogX19saW51eF9fICovCi0jZW5kaWYgLyogQlNENDQg Ki8KLSNlbmRpZiAvKiBPWE9TICovCi0jZW5kaWYgLyogU0NPXzMyVjQgKi8KLSNlbmRpZiAvKiBN X1VOSVggKi8KLQotI2Vsc2UgIC8qIE5vdCBTVk9SUE9TSVggKi8KLQotI2lmbmRlZiBCRUxMVjEw CQkJCS8qIEFsbCBidXQgdGhlc2UuLi4gKi8KLSNpZm5kZWYgUFJPVlgxCi0jaWZuZGVmIFY3Ci0j aWZuZGVmIEJTRDQxCi0jaWZuZGVmIENPSEVSRU5UCi0jZGVmaW5lIFNZU1RJTUVICi0jZW5kaWYg LyogQ09IRVJFTlQgKi8KLSNlbmRpZiAvKiBCU0Q0MSAqLwotI2VuZGlmIC8qIFY3ICovCi0jZW5k aWYgLyogUFJPVlgxICovCi0jZW5kaWYgLyogQkVMTFYxMCAqLwotI2VuZGlmIC8qIFNWT1JQT1NJ WCAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBTWVNUSU1FSCAqLwotI2VuZGlmIC8q IE5PU1lTVElNRUggKi8KLQotI2lmbmRlZiBOT1NZU1RJTUVCSAkJCS8qIDxzeXMvdGltZWIuaD4g Ki8KLSNpZm5kZWYgU1lTVElNRUJICi0jaWZkZWYgT1NGCi0jZGVmaW5lIFNZU1RJTUVCSAotI2Vs c2UKLSNpZmRlZiBDT0hFUkVOVAotI2RlZmluZSBTWVNUSU1FQkgKLSNlbHNlCi0jaWZkZWYgQlNE NDEKLSNkZWZpbmUgU1lTVElNRUJICi0jZWxzZQotI2lmZGVmIEJTRDI5Ci0jZGVmaW5lIFNZU1RJ TUVCSAotI2Vsc2UKLSNpZmRlZiBUT1dFUjEKLSNkZWZpbmUgU1lTVElNRUJICi0jZWxzZQotI2lm ZGVmIEZUMjEKLSNkZWZpbmUgU1lTVElNRUJICi0jZWxzZQotI2lmZGVmIEJFTExWMTAKLSNkZWZp bmUgU1lTVElNRUJICi0jZW5kaWYgLyogQkVMTFYxMCAqLwotI2VuZGlmIC8qIEZUMjEgKi8KLSNl bmRpZiAvKiBUT1dFUjEgKi8KLSNlbmRpZiAvKiBCU0QyOSAqLwotI2VuZGlmIC8qIEJTRDQxICov Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSNlbmRpZiAvKiBPU0YgKi8KLSNlbmRpZiAvKiBTWVNU SU1FQkggKi8KLSNlbmRpZiAvKiBOT1NZU1RJTUVCSCAqLwotCi0vKgotIERlYnVnIGFuZCB0cmFu c2FjdGlvbiBsb2dnaW5nIGlzIGluY2x1ZGVkIGF1dG9tYXRpY2FsbHkgdW5sZXNzIHlvdSBkZWZp bmUKLSBOT0RFQlVHIG9yIE5PVExPRy4gIERvIHRoaXMgaWYgeW91IHdhbnQgdG8gc2F2ZSB0aGUg c3BhY2UgYW5kIG92ZXJoZWFkLgotIChOb3RlLCBpbiB2ZXJzaW9uIDRGIHRoZXNlIGRlZmluaXRp b25zIGNoYW5nZWQgZnJvbSAie30iIHRvIHRoZSBudWxsIHN0cmluZwotIHRvIGF2b2lkIHByb2Js ZW1zIHdpdGggc2VtaWNvbG9ucyBhZnRlciBicmFjZXMsIGFzIGluOiAiaWYgKHgpIHRsb2codGhp cyk7Ci0gZWxzZSB0bG9nKHRoYXQpOyIKLSovCi0jaWZuZGVmIE5PREVCVUcKLSNpZm5kZWYgREVC VUcKLSNkZWZpbmUgREVCVUcKLSNlbmRpZiAvKiBERUJVRyAqLwotI2Vsc2UKLSNpZmRlZiBERUJV RwotI3VuZGVmIERFQlVHCi0jZW5kaWYgLyogREVCVUcgKi8KLSNlbmRpZiAvKiBOT0RFQlVHICov Ci0KLSNpZmRlZiBOT1RMT0cKLSNpZmRlZiBUTE9HCi0jdW5kZWYgVExPRwotI2VuZGlmIC8qIFRM T0cgKi8KLSNlbHNlICAvKiBOT1RMT0cgKi8KLSNpZm5kZWYgVExPRwotI2RlZmluZSBUTE9HCi0j ZW5kaWYgLyogVExPRyAqLwotI2VuZGlmIC8qIE5PVExPRyAqLwotCi0vKiBkZWJ1ZygpIG1hY3Jv IHN0eWxlIHNlbGVjdGlvbi4gKi8KLQotI2lmZGVmIFZNUwotI2lmbmRlZiBJRkRFQlVHCi0jZGVm aW5lIElGREVCVUcKLSNlbmRpZiAvKiBJRkRFQlVHICovCi0jZW5kaWYgLyogVk1TICovCi0KLSNp ZmRlZiBNQUMKLSNpZm5kZWYgSUZERUJVRwotI2RlZmluZSBJRkRFQlVHCi0jZW5kaWYgLyogSUZE RUJVRyAqLwotI2VuZGlmIC8qIE1BQyAqLwotCi0jaWZkZWYgT1MyCi0jaWZuZGVmIElGREVCVUcK LSNkZWZpbmUgSUZERUJVRwotI2VuZGlmIC8qIElGREVCVUcgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LQotI2lmZGVmIE9YT1MJCQkJLyogdHN0IGlzIGZhc3RlciB0aGFuIGpzciAqLwotI2lmbmRlZiBJ RkRFQlVHCi0jZGVmaW5lIElGREVCVUcKLSNlbmRpZiAvKiBJRkRFQlVHICovCi0jZW5kaWYgLyog T1hPUyAqLwotCi0jaWZuZGVmIENLQ01BSQotZXh0ZXJuIGludCBkZWJsb2c7Ci1leHRlcm4gaW50 IGRlYm9rOwotZXh0ZXJuIGludCBkZWJ4bGVuOwotZXh0ZXJuIGludCBtYXRjaGRvdDsKLWV4dGVy biBpbnQgdHRfYmVsbDsKLSNlbmRpZiAvKiBDS0NNQUkgKi8KLQotI2lmZGVmIE9TMgotX1BST1RP VFlQKCB2b2lkIGJsZWVwLCAoc2hvcnQpICk7Ci0jZWxzZSAvKiBPUzIgKi8KLSNkZWZpbmUgYmxl ZXAoeCkgaWYodHRfYmVsbClwdXRjaGFyKCdcMDcnKQotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZu ZGVmIEJFT1NPUkJFQk9YCi0jaWZkZWYgQkVCT1gJCQkJLyogVGhpcyB3YXMgdXNlZCBvbmx5IGZv ciBEUjcgKi8KLSNkZWZpbmUgQkVPU09SQkVCT1gKLSNlbHNlCi0jaWZkZWYgQkVPUwkJCQkvKiBU aGlzIGlzIHVzZWQgZm9yIEJlT1MgNC54ICovCi0jZGVmaW5lIEJFT1NPUkJFQk9YCi0jZW5kaWYg LyogQkVPUyAqLwotI2VuZGlmIC8qIEJFQk9YICovCi0jZW5kaWYgLyogQkVPU09SQkVCT1ggKi8K LQotI2lmZGVmIE5PSUNQCi0jaWZkZWYgVExPRwotI3VuZGVmIFRMT0cKLSNlbmRpZiAvKiBUTE9H ICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQotLyogRm9ybWF0cyBmb3IgZGVidWcoKSBhbmQgdGxv ZygpICovCi0KLSNkZWZpbmUgRjAwMCAwCi0jZGVmaW5lIEYwMDEgMQotI2RlZmluZSBGMDEwIDIK LSNkZWZpbmUgRjAxMSAzCi0jZGVmaW5lIEYxMDAgNAotI2RlZmluZSBGMTAxIDUKLSNkZWZpbmUg RjExMCA2Ci0jZGVmaW5lIEYxMTEgNwotCi0jaWZkZWYgX19saW51eF9fCi0jaWZuZGVmIExJTlVY Ci0jZGVmaW5lIExJTlVYCi0jZW5kaWYgLyogTElOVVggKi8KLSNlbmRpZiAvKiBfX2xpbnV4X18g Ki8KLQotLyogUGxhdGZvcm1zIHdoZXJlIHNtYWxsIHNpemUgaXMgbmVlZGVkICovCi0KLSNpZmRl ZiBwZHAxMQotI2RlZmluZSBDS19TTUFMTAotI2VuZGlmIC8qIHBkcDExICovCi0KLS8qIENhbiB3 ZSB1c2UgcmVhbHBhdGgoKT8gKi8KLQotI2lmbmRlZiBOT1JFQUxQQVRICi0jaWZkZWYgcGRwMTEK LSNkZWZpbmUgTk9SRUFMUEFUSAotI2VuZGlmIC8qIHBkcDExICovCi0jZW5kaWYgLyogTk9SRUFM UEFUSCAqLwotCi0jaWZuZGVmIE5PUkVBTFBBVEgKLSNpZmRlZiBVTklYCi0jaWZkZWYgSFBVWDUK LSNkZWZpbmUgTk9SRUFMUEFUSAotI2Vsc2UKLSNpZmRlZiBIUFVYNgotI2RlZmluZSBOT1JFQUxQ QVRICi0jZWxzZQotI2lmZGVmIEhQVVg3Ci0jZGVmaW5lIE5PUkVBTFBBVEgKLSNlbHNlCi0jaWZk ZWYgSFBVWDgKLSNkZWZpbmUgTk9SRUFMUEFUSAotI2Vsc2UKLSNpZmRlZiBTVjY4UjNWNgotI2Rl ZmluZSBOT1JFQUxQQVRICi0jZWxzZQotI2lmZGVmIFhFTklYCi0jZGVmaW5lIE5PUkVBTFBBVEgK LSNlbHNlCi0jaWZkZWYgQ0tfU0NPMzJWNAotI2RlZmluZSBOT1JFQUxQQVRICi0jZWxzZQotI2lm ZGVmIENLX1NDT1Y1Ci0jZGVmaW5lIE5PUkVBTFBBVEgKLSNlbHNlCi0jaWZkZWYgT1NGMzIKLSNk ZWZpbmUgTk9SRUFMUEFUSAotI2Vsc2UKLSNpZmRlZiBPU0YzMAotI2RlZmluZSBOT1JFQUxQQVRI Ci0jZWxzZQotI2lmZGVmIHVsdHJpeAotI2RlZmluZSBOT1JFQUxQQVRICi0jZWxzZQotI2lmZGVm IENPSEVSRU5UCi0jZGVmaW5lIE5PUkVBTFBBVEgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2Vu ZGlmIC8qIHVsdHJpeCAqLwotI2VuZGlmIC8qIE9TRjMwICovCi0jZW5kaWYgLyogT1NGMzIgKi8K LSNlbmRpZiAvKiBDS19TQ09WNSAqLwotI2VuZGlmIC8qIENLX1NDTzMyVjQgKi8KLSNlbmRpZiAv KiBYRU5JWCAqLwotI2VuZGlmIC8qIFNWNjhSM1Y2ICovCi0jZW5kaWYgLyogSFBVWDggKi8KLSNl bmRpZiAvKiBIUFVYNyAqLwotI2VuZGlmIC8qIEhQVVg2ICovCi0jZW5kaWYgLyogSFBVWDUgKi8K LSNlbmRpZiAvKiBOT1JFQUxQQVRIICovCi0KLSNpZm5kZWYgTk9SRUFMUEFUSAotI2lmbmRlZiBD S1JFQUxQQVRICi0jZGVmaW5lIENLUkVBTFBBVEgKLSNlbmRpZiAvKiBOT1JFQUxQQVRIICovCi0j ZW5kaWYgLyogQ0tSRUFMUEFUSCAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmZGVmIENLUkVB TFBBVEgKLSNpZmRlZiBPUzJPUlVOSVgKLSNpZm5kZWYgQ0tST09UCi0jZGVmaW5lIENLUk9PVAot I2VuZGlmIC8qIENLUk9PVCAqLwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotI2VuZGlmIC8qIENL UkVBTFBBVEggKi8KLQotLyogQ0tTWU1MSU5LIHNob3VsZCBiZSBzZXQgb25seSBpZiB3ZSBjYW4g dXNlIHJlYWRsaW5rKCkgKi8KLQotI2lmZGVmIFVOSVgKLSNpZm5kZWYgTk9TWU1MSU5LCi0jaWZu ZGVmIENLU1lNTElOSwotI2RlZmluZSBDS1NZTUxJTksKLSNlbmRpZiAvKiBOT1NZTUxJTksgKi8K LSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLS8qIFBsYXRmb3Jt cyB3aGVyZSB3ZSBjYW4gdXNlIGxzdGF0KCkgaW5zdGVhZCBvZiBzdGF0KCkgKGZvciBzeW1saW5r cykgKi8KLS8qIFRoaXMgc2hvdWxkIGJlIHNldCBvbmx5IGlmIGJvdGggbHN0YXQoKSBhbmQgcmVh ZGxpbmsoKSBhcmUgYXZhaWxhYmxlICovCi0KLSNpZm5kZWYgTk9MU1RBVAotI2lmbmRlZiBOT1NZ TUxJTksKLSNpZm5kZWYgVVNFX0xTVEFUCi0jaWZkZWYgVU5JWAotI2lmZGVmIENLU1lNTElOSwot I2lmZGVmIFNWUjQJCQkJLyogU1ZSNCBoYXMgbHN0YXQoKSAqLwotI2RlZmluZSBVU0VfTFNUQVQK LSNlbHNlCi0jaWZkZWYgQlNENDIJCQkJLyogNC4yQlNEIGFuZCA0LjNCU0QgaGF2ZSBpdCAqLwot I2RlZmluZSBVU0VfTFNUQVQJCQkvKiBUaGlzIHNob3VsZCBpbmNsdWRlIG9sZCBIUFVYcyAqLwot I2Vsc2UKLSNpZmRlZiBCU0Q0NAkJCQkvKiA0LjRCU0QgaGFzIGl0ICovCi0jZGVmaW5lIFVTRV9M U1RBVAotI2Vsc2UKLSNpZmRlZiBMSU5VWAkJCQkvKiBMSU5VWCBoYXMgaXQgKi8KLSNkZWZpbmUg VVNFX0xTVEFUCi0jZWxzZQotI2lmZGVmIFNVTk9TNAkJCQkvKiBTdW5PUyBoYXMgaXQgKi8KLSNk ZWZpbmUgVVNFX0xTVEFUCi0jZW5kaWYgLyogU1VOT1M0ICovCi0jZW5kaWYgLyogTElOVVggKi8K LSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIEJTRDQyICovCi0jZW5kaWYgLyogU1ZSNCAq LwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBV U0VfTFNUQVQgKi8KLSNlbmRpZiAvKiBOT1NZTUxJTksgKi8KLSNlbmRpZiAvKiBOT0xTVEFUICov Ci0KLSNpZmRlZiBOT0xTVEFUCi0jaWZkZWYgVVNFX0xTVEFUCi0jdW5kZWYgVVNFX0xTVEFUCi0j ZW5kaWYgLyogVVNFX0xTVEFUICovCi0jZW5kaWYgLyogTk9MU1RBVCAqLwotCi0jaWZuZGVmIE5P VFRZTE9DSwkJCS8qIFVOSVggc3lzdGVtcyB0aGF0IGhhdmUgdHR5bG9jaygpICovCi0jaWZuZGVm IFVTRVRUWUxPQ0sKLSNpZmRlZiBBSVhSUwkJCQkvKiBBSVggMy4xIGFuZCBsYXRlciAqLwotI2Rl ZmluZSBVU0VUVFlMT0NLCi0jZWxzZQotI2lmZGVmIFVTRV9VVV9MT0NLCQkJLyogRnJlZUJTRCBv ciBvdGhlciB3aXRoIHV1X2xvY2soKSAqLwotI2RlZmluZSBVU0VUVFlMT0NLCi0jZWxzZQotLyoK LSAgUHJpb3IgdG8gOC4wLjI5OSBBbHBoYS4wOCB0aGlzIHdhcyBIQVZFX0JBVURCT1kgd2hpY2gg d2FzIGFkZGVkIGZvcgotICBSZWQgSGF0IDcuMiBpbiBNYXkgMjAwMyBidXQgd2hpY2ggaXMgbm8g bG9uZ2VyIHN1cHBvcnRlZCBpbiBEZWJpYW4gYW5kCi0gIE9wZW5TdXNlIChhdCBsZWFzdCkuCi0q LwotI2lmZGVmIEhBVkVfTE9DS0RFVgotI2RlZmluZSBVU0VUVFlMT0NLCi0jZW5kaWYgLyogSEFW RV9MT0NLREVWICovCi0jZW5kaWYgLyogVVNFX1VVX0xPQ0sgKi8KLSNlbmRpZiAvKiBBSVhSUyAq LwotI2VuZGlmIC8qIFVTRVRUWUxPQ0sgKi8KLSNlbmRpZiAvKiBOT1RUWUxPQ0sgKi8KLQotI2lm bmRlZiBOT19PUEVOUFRZCQkJLyogQ2FuIHVzZSBvcGVucHR5KCkgKi8KLSNpZm5kZWYgSEFWRV9P UEVOUFRZCi0jaWZkZWYgX19saW51eF9fCi0jZGVmaW5lIEhBVkVfT1BFTlBUWQotI2Vsc2UKLSNp ZmRlZiBfX0ZyZWVCU0RfXwotI2RlZmluZSBIQVZFX09QRU5QVFkKLSNlbHNlCi0jaWZkZWYgX19P cGVuQlNEX18KLSNkZWZpbmUgSEFWRV9PUEVOUFRZCi0jZWxzZQotI2lmZGVmIF9fTmV0QlNEX18K LSNkZWZpbmUgSEFWRV9PUEVOUFRZCi0jZWxzZQotI2lmZGVmIE1BQ09TWDEwCi0jZGVmaW5lIEhB VkVfT1BFTlBUWQotI2VuZGlmCS8qIE1BQ09TWDEwICovCi0jZW5kaWYJLyogX19OZXRCU0RfXyAq LwotI2VuZGlmCS8qIF9fT3BlbkJTRF9fICovCi0jZW5kaWYJLyogX19GcmVlQlNEX18gKi8KLSNl bmRpZgkvKiBfX2xpbnV4X18gKi8KLSNlbmRpZgkvKiBIQVZFX09QRU5QVFkgKi8KLSNlbmRpZgkv KiBOT19PUEVOUFRZICovCi0KLS8qIEtlcm1pdCBmZWF0dXJlIHNlbGVjdGlvbiAqLwotCi0jaWZu ZGVmIE5PU1BMCi0jaWZuZGVmIE5PQ0hBTk5FTElPCQkJLyogQ2hhbm5lbC1iYXNlZCBmaWxlIGkv byBwYWNrYWdlICovCi0jaWZuZGVmIENLQ0hBTk5FTElPCi0jaWZkZWYgVU5JWAotI2RlZmluZSBD S0NIQU5ORUxJTwotI2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUgQ0tDSEFOTkVMSU8KLSNlbHNl Ci0jaWZkZWYgVk1TCi0jZGVmaW5lIENLQ0hBTk5FTElPCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMK LSNkZWZpbmUgQ0tDSEFOTkVMSU8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogVk1T ICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIENLQ0hB Tk5FTElPICovCi0jZW5kaWYgLyogTk9DSEFOTkVMSU8gKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwot Ci0jaWZuZGVmIE5PQ0tFWEVDCQkJLyogRVhFQyBjb21tYW5kICovCi0jaWZuZGVmIE5PUFVTSAot I2lmbmRlZiBDS0VYRUMKLSNpZmRlZiBVTklYCQkJCS8qIFVOSVggY2FuIGRvIGl0ICovCi0jZGVm aW5lIENLRVhFQwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBDS0VYRUMgKi8KLSNlbmRp ZiAvKiBOT1BVU0ggKi8KLSNlbmRpZiAvKiBOT0NLRVhFQyAqLwotCi0jaWZuZGVmIE5PRkFTVAkJ CQkvKiBGYXN0IEtlcm1pdCBwcm90b2NvbCBieSBkZWZhdWx0ICovCi0jaWZuZGVmIENLX0ZBU1QK LSNpZmRlZiBVTklYCi0jZGVmaW5lIENLX0ZBU1QKLSNlbHNlCi0jaWZkZWYgVk1TCi0jZGVmaW5l IENLX0ZBU1QKLSNlbHNlCi0jaWZkZWYgT1MyCi0jZGVmaW5lIENLX0ZBU1QKLSNlbmRpZiAvKiBP UzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogQ0tf RkFTVCAqLwotI2VuZGlmIC8qIE5PRkFTVCAqLwotCi0jaWZkZWYgVU5JWAkJCQkvKiBUcmFuc3Bh cmVudCBwcmludCAqLwotI2lmbmRlZiBOT1hQUklOVAotI2lmbmRlZiBYUFJJTlQKLSNkZWZpbmUg WFBSSU5UCi0jZW5kaWYgLyogWFBSSU5UICovCi0jZW5kaWYgLyogTk9YUFJJTlQgKi8KLSNlbmRp ZiAvKiBVTklYICovCi0KLSNpZm5kZWYgTk9IV1BBUklUWQkJCS8qIEhhcmR3YXJlIHBhcml0eSAq LwotI2lmbmRlZiBIV1BBUklUWQotI2lmZGVmIFNWT1JQT1NJWAkJCS8qIFN5c3RlbSBWIG9yIFBP U0lYIGNhbiBoYXZlIGl0ICovCi0jZGVmaW5lIEhXUEFSSVRZCi0jZWxzZQotI2lmZGVmIFNVTk9T NDEJCQkJLyogU3VuT1MgNC4xIGNhbiBoYXZlIGl0ICovCi0jZGVmaW5lIEhXUEFSSVRZCi0jZWxz ZQotI2lmZGVmIE9TMgkJCQkvKiBLOTUgY2FuIGhhdmUgaXQgKi8KLSNkZWZpbmUgSFdQQVJJVFkK LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBTVU5PUzQxICovCi0jZW5kaWYgLyogU1ZPUlBP U0lYICovCi0jZW5kaWYgLyogSFdQQVJJVFkgKi8KLSNlbmRpZiAvKiBOT0hXUEFSSVRZICovCi0K LSNpZm5kZWYgTk9TVE9QQklUUwkJCS8qIFN0b3AtYml0IHNlbGVjdGlvbiAqLwotI2lmbmRlZiBT VE9QQklUUwotI2lmZGVmIE9TMk9SVU5JWAotLyogSW4gVW5peCByZWFsbHkgdGhpcyBzaG91bGQg b25seSBiZSBpZiBDU1RPUEIgaXMgZGVmaW5lZC4gKi8KLS8qIEJ1dCB3ZSBkb24ndCBrbm93IHRo YXQgeWV0LiAqLwotI2RlZmluZSBTVE9QQklUUwotI2Vsc2UKLSNpZmRlZiBUTl9DT01QT1JUCi0j ZGVmaW5lIFNUT1BCSVRTCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotI2VuZGlmIC8qIE9TMk9S VU5JWCAqLwotI2VuZGlmIC8qIFNUT1BCSVRTICovCi0jZW5kaWYgLyogTk9TVE9QQklUUyAqLwot Ci0jaWZkZWYgVU5JWAotI2lmbmRlZiBORVRDTUQJCQkJLyogQ2FuIFNFVCBORVRXT1JLIFRZUEUg Q09NTUFORCAqLwotI2RlZmluZSBORVRDTUQKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNlbmRpZiAv KiBVTklYICovCi0KLS8qIFB0eSBzdXBwb3J0LCBub25wb3J0YWJsZSwgYXZhaWxhYmxlIG9uIGEg Y2FzZS1ieS1jYXNlIGJhc2lzICovCi0KLSNpZm5kZWYgTk9QVFkKLSNpZmRlZiBORVhUCQkJCS8q IE5lWFRTVEVQICh0ZXN0ZWQgb24gMy4xKSovCi0jZGVmaW5lIE5FVFBUWQotI2Vsc2UKLSNpZmRl ZiBDS19TQ09WNQkJCQkvKiBTQ08gT1NSNSAodGVzdGVkIG9uIDUuMC41KSovCi0jZGVmaW5lIE5F VFBUWQotI2Vsc2UKLSNpZmRlZiBRTlgJCQkJLyogUU5YICh0ZXN0ZWQgb24gNC4yNSkgKi8KLSNk ZWZpbmUgTkVUUFRZCi0jZWxzZQotI2lmZGVmIFNJTklYICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNpbml4ICh0ZXN0ZWQgb24gNS40MikgKi8KLSNkZWZpbmUgTkVUUFRZCi0jZWxzZQot I2lmZGVmIERHVVg1NDAJCQkJLyogREcvVVggNS40KysgKHRlc3RlZCBvbiA1LjRSNC4xMSkgKi8K LSNkZWZpbmUgTkVUUFRZCi0jZWxzZQotI2lmZGVmIE9TRjMyCQkJCS8qIERpZ2l0YWwgVW5peCAz LjIgKi8KLSNkZWZpbmUgTkVUUFRZCi0jZWxzZQotI2lmZGVmIE9TRjQwCQkJCS8qIERpZ2l0YWwg VW5peCA0LjAgLyBUcnU2NCAqLwotI2RlZmluZSBORVRQVFkKLSNlbHNlCi0jaWZkZWYgSVJJWDYw CQkJCS8qIElSSVggNi4wIChub3QgZWFybGllcikgKi8KLSNkZWZpbmUgTkVUUFRZCi0jZWxzZQot I2lmZGVmIEhQVVgxMAkJCQkvKiBIUFVYIDEwLjAwIG9yIGxhdGVyICovCi0jZGVmaW5lIE5FVFBU WQotI2lmbmRlZiBIQVZFX1BUWVRSQVAKLSNkZWZpbmUgSEFWRV9QVFlUUkFQCi0jZW5kaWYgLyog SEFWRV9QVFlUUkFQICovCi0jZWxzZQotI2lmZGVmIEhQVVg5CQkJCS8qIEhQVVggOS4wMCAobm90 IGVhcmxpZXIpICovCi0jZGVmaW5lIE5FVFBUWQotI2lmbmRlZiBIQVZFX1BUWVRSQVAKLSNkZWZp bmUgSEFWRV9QVFlUUkFQCi0jZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCi0jZWxzZQotI2lmZGVm IEJTRDQ0CQkJCS8qIEJTRDQ0LCB7TmV0LEZyZWUsT3Blbn1CU0QgKi8KLSNkZWZpbmUgTkVUUFRZ Ci0jZWxzZQotI2lmZGVmIEJTREkJCQkJLyogQlNESS9PUyAodGVzdGVkIGluIDQpICovCi0jZGVm aW5lIE5FVFBUWQotI2Vsc2UKLSNpZmRlZiBTT0xBUklTCQkJCS8qIFNvbGFyaXMgKHRlc3RlZCBp biAyLjUpICovCi0jZGVmaW5lIE5FVFBUWQotI2Vsc2UKLSNpZmRlZiBVVzcJCQkJLyogVW5peHdh cmUgNyAqLwotI2RlZmluZSBORVRQVFkKLSNlbHNlCi0jaWZkZWYgU1VOT1M0MQkJCQkvKiBTdW5P UyAodGVzdGVkIGluIDQuMS4zKSAqLwotI2RlZmluZSBORVRQVFkKLSNlbHNlCi0jaWZkZWYgQUlY NDEJCQkJLyogQUlYIDQuMSBhbmQgbGF0ZXIgKi8KLSNkZWZpbmUgTkVUUFRZCi0jZWxzZQotI2lm ZGVmIExJTlVYCQkJCS8qIExpbnV4ICovCi0jZGVmaW5lIE5FVFBUWQotI2VuZGlmIC8qIExJTlVY ICovCi0jZW5kaWYgLyogQUlYNDEgKi8KLSNlbmRpZiAvKiBTVU5PUzQxICovCi0jZW5kaWYgLyog VVc3ICovCi0jZW5kaWYgLyogU09MQVJJUyAqLwotI2VuZGlmIC8qIEJTREkgKi8KLSNlbmRpZiAv KiBCU0Q0NCAqLwotI2VuZGlmIC8qIEhQVVg5ICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5k aWYgLyogSVJJWDYwICovCi0jZW5kaWYgLyogT1NGNDAgKi8KLSNlbmRpZiAvKiBPU0YzMiAqLwot I2VuZGlmIC8qIERHVVg1NDAgKi8KLSNlbmRpZiAvKiBTSU5JWCAqLwotI2VuZGlmIC8qIFFOWCAq LwotI2VuZGlmIC8qIENLX1NDT1Y1ICovCi0jZW5kaWYgLyogTkVYVCAqLwotCi0jZWxzZSAvKiBO T1BUWSAqLwotCi0jaWZkZWYgTkVUUFRZCi0jdW5kZWYgTkVUUFRZCi0jZW5kaWYgLyogTkVUUFRZ ICovCi0jZW5kaWYgLyogTk9QVFkgKi8KLQotI2lmZGVmIE5FVFBUWSAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE5FVENNRCByZXF1aXJlZCBmb3IgTkVUUFRZICovCi0jaWZuZGVmIE5FVENN RAotI2RlZmluZSBORVRDTUQKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNlbmRpZiAvKiBORVRQVFkg Ki8KLQotI2lmbmRlZiBDS19VVFNOQU1FCQkJLyogQ2FuIHdlIGNhbGwgdW5hbWUoKT8gKi8KLSNp ZmRlZiBWTVMKLSNkZWZpbmUgQ0tfVVRTTkFNRQotI2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUg Q0tfVVRTTkFNRQotI2Vsc2UKLSNpZmRlZiBQT1NJWAkJCQkvKiBJdCdzIGluIFBPU0lYLjEgKi8K LSNkZWZpbmUgQ0tfVVRTTkFNRQotI2Vsc2UKLSNpZmRlZiBTVU5PUzQxCQkJCS8qIEl0J3MgaW4g U3VuT1MgNC4xICovCi0jZGVmaW5lIENLX1VUU05BTUUKLSNlbHNlCi0jaWZkZWYgQUlYUlMJCQkJ LyogSXQncyBpbiBBSVggKi8KLSNkZWZpbmUgQ0tfVVRTTkFNRQotI2Vsc2UKLSNpZmRlZiBTVlI0 CQkJCS8qIEl0J3MgaW4gU1ZSNCAoYnV0IG5vdCBTVlIzKSAqLwotI2RlZmluZSBDS19VVFNOQU1F Ci0jZWxzZQotI2lmZGVmIEhQVVgJCQkJLyogSXQncyBpbiBIUC1VWCA1LjAwIGFuZCBsYXRlciAq LwotI2RlZmluZSBDS19VVFNOQU1FCi0jZWxzZQotI2lmZGVmIE9TRgkJCQkvKiBJdCdzIGluIE9T Ri8xIC8gRGlnaXRhbCBVTklYICovCi0jZGVmaW5lIENLX1VUU05BTUUKLSNlbHNlCi0jaWZkZWYg Q0tfU0NPVjUKLSNkZWZpbmUgQ0tfVVRTTkFNRQotI2VuZGlmIC8qIENLX1NDT1Y1ICovCi0jZW5k aWYgLyogT1NGICovCi0jZW5kaWYgLyogSFBVWCAqLwotI2VuZGlmIC8qIFNWUjQgKi8KLSNlbmRp ZiAvKiBBSVhSUyAqLwotI2VuZGlmIC8qIFNVTk9TNDEgKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwot I2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIENLX1VUU05BTUUg Ki8KLQotLyogVGhpcyBzZWN0aW9uIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IHVzZSBmbG9hdGlu Zy1wb2ludCAqLwotCi0vKiBJZiB0aGUgZm9sbG93aW5nIGNhdXNlcyB0cm91YmxlIHVzZSAtREZM T0FUPWZsb2F0IG9uIHRoZSBjb21tYW5kIGxpbmUgKi8KLQotI2lmZGVmIE5PU1BMCi0jaWZkZWYg Rk5GTE9BVAotI3VuZGVmIEZORkxPQVQKLSNlbmRpZiAvKiBGTkZMT0FUICovCi0jaWZkZWYgQ0tG TE9BVAotI3VuZGVmIENLRkxPQVQKLSNlbmRpZiAvKiBDS0ZMT0FUICovCi0jZW5kaWYgLyogTk9T UEwgKi8KLQotI2lmbmRlZiBOT0ZMT0FUCi0KLSNpZm5kZWYgQ0tGTE9BVAotI2lmZGVmIF9fYWxw aGEKLS8qIERvbid0IHVzZSBkb3VibGUgb24gNjQtYml0IHBsYXRmb3JtcyAtLSBiYWQgdGhpbmdz IGhhcHBlbiAqLwotI2RlZmluZSBDS0ZMT0FUIGZsb2F0Ci0jZGVmaW5lIENLRkxPQVRfUyAiZmxv YXQiCi0jZWxzZQotI2RlZmluZSBDS0ZMT0FUIGRvdWJsZQotI2RlZmluZSBDS0ZMT0FUX1MgImRv dWJsZSIKLSNlbmRpZiAvKiBfX2FscGhhICovCi0jZW5kaWYgLyogQ0tGTE9BVCAqLwotCi0jaWZu ZGVmIE5PR0ZUSU1FUgkJCS8qIEZsb2F0aW5nLXBvaW50IHRpbWVycyAqLwotI2lmbmRlZiBHRlRJ TUVSCi0jaWZkZWYgVU5JWAkJCQkvKiBGb3IgVU5JWCAqLwotI2RlZmluZSBHRlRJTUVSCi0jZW5k aWYgLyogVU5JWCAqLwotI2lmZGVmIFZNUwkJCQkvKiBWTVMgKi8KLSNpZm5kZWYgT0xEX1ZNUwkJ CQkvKiA1LjAgYW5kIGxhdGVyICovCi0jZGVmaW5lIEdGVElNRVIKLSNlbmRpZiAvKiBPTERfVk1T ICovCi0jZW5kaWYgLyogVk1TICovCi0jaWZkZWYgT1MyCQkJCS8qIEFuZCBLOTUgKi8KLSNkZWZp bmUgR0ZUSU1FUgotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIFNUUkFUVVMJCQkJLyogQW5kIFN0 cmF0dXMgVk9TICovCi0jZGVmaW5lIEdGVElNRVIKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5k aWYgLyogR0ZUSU1FUiAqLwotI2VuZGlmIC8qIE5PR0ZUSU1FUiAqLwotCi0jaWZuZGVmIE5PU1BM Ci0jaWZuZGVmIEZORkxPQVQJCQkJLyogRmxvYXRpbmctcG9pbnQgbWF0aCBmdW5jdGlvbnMgKi8K LSNpZmRlZiBWTVMJCQkJLyogZGVmaW5lZCBieSBkZWZhdWx0IGluIFZNUyAqLwotI2RlZmluZSBG TkZMT0FUCi0jZWxzZQotI2lmZGVmIE9TMgkJCQkvKiBhbmQgSzk1ICovCi0jZGVmaW5lIEZORkxP QVQKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBGTkZMT0FU ICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2Vsc2UgIC8qIE5PRkxPQVQgaXMgZGVmaW5lZCAq LwotCi0jaWZkZWYgQ0tGTE9BVAotI3VuZGVmIENLRkxPQVQKLSNlbmRpZiAvKiBDS0ZMT0FUICov Ci0KLSNpZmRlZiBHRlRJTUVSCi0jdW5kZWYgR0ZUSU1FUgotI2VuZGlmIC8qIEdGVElNRVIgKi8K LQotI2lmZGVmIEZORkxPQVQKLSN1bmRlZiBGTkZMT0FUCi0jZW5kaWYgLyogRk5GTE9BVCAqLwot Ci0jZW5kaWYgLyogTk9GTE9BVCAqLwotCi0jaWZkZWYgR0ZUSU1FUgkJCQkvKiBGcmFjdGlvbiBv ZiBzZWNvbmQgdG8gdXNlIHdoZW4gKi8KLSNpZm5kZWYgR0ZNSU5USU1FCQkJLyogZWxhcHNlZCB0 aW1lIGlzIDw9IDAgKi8KLSNkZWZpbmUgR0ZNSU5USU1FIDAuMDA1Ci0jZW5kaWYgLyogR0ZNSU5U SU1FICovCi0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0jaWZuZGVmIENLQ01BSQotZXh0ZXJuIGxv bmcgenRtc2VjLCB6dHVzZWM7CQkvKiBGcmFjdGlvbiBvZiBzZWMgb2YgY3VycmVudCB0aW1lICov Ci0jZW5kaWYgLyogQ0tDTUFJICovCi0KLSNpZm5kZWYgTk9VTlBSRUZJWFpFUk8JCQkvKiBBbGxv dyB1bnByZWZpeGluZyBvZiBOVUwgKDApICovCi0jaWZuZGVmIFVOUFJFRklYWkVSTwkJCS8qIGlu IGZpbGUtdHJhbnNmZXIgcGFja2V0cyAqLwotI2RlZmluZSBVTlBSRUZJWFpFUk8KLSNlbmRpZiAv KiBVTlBSRUZJWFpFUk8gKi8KLSNlbmRpZiAvKiBOT1VOUFJFRklYWkVSTyAqLwotCi0jaWZkZWYg Q0tfU01BTEwKLSNkZWZpbmUgTk9DQUwJCQkJLyogQ2FsaWJyYXRlICovCi0jZW5kaWYgLyogQ0tf U01BTEwgKi8KLQotI2lmbmRlZiBOT1BBVFRFUk5TCQkJLyogRmlsZXR5cGUgbWF0Y2hpbmcgcGF0 dGVybnMgKi8KLSNpZm5kZWYgUEFUVEVSTlMKLSNpZm5kZWYgVk1TCi0jaWZuZGVmIENLX1NNQUxM Ci0jZGVmaW5lIFBBVFRFUk5TCi0jZW5kaWYgLyogQ0tfU01BTEwgKi8KLSNlbmRpZiAvKiBWTVMg Ki8KLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotI2VuZGlmIC8qIE5PUEFUVEVSTlMgKi8KLQotI2lm bmRlZiBOT0NBTAotI2lmbmRlZiBDQUxJQlJBVEUKLSNkZWZpbmUgQ0FMSUJSQVRFCi0jZW5kaWYg LyogQ0FMSUJSQVRFICovCi0jZWxzZQotI2lmZGVmIENBTElCUkFURQotI3VuZGVmIENBTElCUkFU RQotI2VuZGlmIC8qIENBTElCUkFURSAqLwotI2VuZGlmIC8qIE5PQ0FMICovCi0KLSNpZm5kZWYg Tk9SRUNVUlNFCQkJLyogUmVjdXJzaXZlIGRpcmVjdG9yeSB0cmF2ZXJzYWwgKi8KLSNpZm5kZWYg UkVDVVJTSVZFCi0jaWZkZWYgVk1TCi0jZGVmaW5lIFJFQ1VSU0lWRQotI2Vsc2UKLSNpZmRlZiBP UzJPUlVOSVgKLSNpZm5kZWYgQ0tfU01BTEwKLSNkZWZpbmUgUkVDVVJTSVZFCi0jZW5kaWYgLyog Q0tfU01BTEwgKi8KLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotI2RlZmluZSBSRUNVUlNJVkUKLSNl bHNlCi0jaWZkZWYgT1NLCi0jZGVmaW5lIFJFQ1VSU0lWRQotI2VuZGlmIC8qIE9TSyAqLwotI2Vu ZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSNlbmRpZiAvKiBWTVMg Ki8KLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSNlbmRpZiAvKiBOT1JFQ1VSU0UgKi8KLQotI2lm bmRlZiBDS19TTUFMTAkJCS8qIEVuYWJsZSBmaWxlLXRyYW5zZmVyIHR1bmluZyBjb2RlICovCi0j aWZuZGVmIENLVFVOSU5HCQkJLyogaW4gd2hpY2ggbW9yZSBjb2RlIGlzIGFkZGVkICovCi0jaWZu ZGVmIE5PVFVOSU5HCQkJLyogdG8gYXZvaWQgZnVuY3Rpb24gY2FsbHMsIGV0YyAqLwotI2RlZmlu ZSBDS1RVTklORwotI2VuZGlmIC8qIE5PVFVOSU5HICovCi0jZW5kaWYgLyogQ0tUVU5JTkcgKi8K LSNlbmRpZiAvKiBDS19TTUFMTCAqLwotCi0jaWZuZGVmIE5PVVJMCQkJCS8qIFBhcnNlIFVSTHMg aW4gU0VUIEhPU1QsIGV0YyAqLwotI2RlZmluZSBDS19VUkwKLSNkZWZpbmUgTk9fRlRQX0FVVEgg ICAgICAgICAgICAgICAgICAgICAvKiBObyBhdXRoICJmdHAiIC8gImFub255bW91cyIgKi8KLSNl bmRpZiAvKiBOT1VSTCAqLwotCi0jaWZuZGVmIE5PVFJJR0dFUgotI2lmbmRlZiBDS19UUklHR0VS CQkJLyogVHJpZ2dlciBzdHJpbmcgdG8gZXhpdCBDT05ORUNUICovCi0jaWZkZWYgT1MyT1JVTklY CQkJLyogT0sgZm9yIFVOSVggYW5kIEs5NSAqLwotI2RlZmluZSBDS19UUklHR0VSCi0jZWxzZQot I2lmZGVmIFZNUwkJCQkvKiBhbmQgVk1TICovCi0jZGVmaW5lIENLX1RSSUdHRVIKLSNlbHNlCi0j aWZkZWYgZGF0YWdlbmVyYWwJCQkvKiBhbmQgQU9TL1ZTICovCi0jZGVmaW5lIENLX1RSSUdHRVIK LSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotI2VuZGlm IC8qIFZNUyAqLwotI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KLSNlbmRpZiAvKiBOT1RSSUdHRVIg Ki8KLQotI2lmZGVmIENLX1RSSUdHRVIKLSNkZWZpbmUgVFJJR0dFUlMgOAkJCS8qIEhvdyBtYW55 IHRyaWdnZXJzIGFsbG93ZWQgKi8KLSNlbmRpZiAvKiBDS19UUklHR0VSICovCi0KLSNpZm5kZWYg WExJTUlUUwkJCQkvKiBDT05ORUNUIGxpbWl0cyAqLwotI2lmZGVmIE9TMgotI2RlZmluZSBYTElN SVRTCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogWExJTUlUUyAqLwotCi0jaWZkZWYgTk9G UklMTFMKLSNpZm5kZWYgTk9CUk9XU0VSCi0jZGVmaW5lIE5PQlJPV1NFUgotI2VuZGlmIC8qIE5P QlJPV1NFUiAqLwotI2lmbmRlZiBOT0ZUUAotI2RlZmluZSBOT0ZUUAotI2VuZGlmIC8qIE5PRlRQ ICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lmbmRlZiBOT0hUVFAJCQkJLyogSFRUUCBm ZWF0dXJlcyBuZWVkLi4uICovCi0jaWZkZWYgTk9JQ1AJCQkJLyogYW4gaW50ZXJhY3RpdmUgY29t bWFuZCBwYXJzZXIgKi8KLSNkZWZpbmUgTk9IVFRQCi0jZW5kaWYgLyogTk9JQ1AgKi8KLSNpZm5k ZWYgVk1TCi0jaWZuZGVmIE9TMk9SVU5JWAkJCS8qIEs5NSBvciBVTklYIChiZWNhdXNlIG9mICov Ci0jZGVmaW5lIE5PSFRUUAkJCQkvKiB0aW1lIGZ1bmN0aW9ucywgdGltZV90LCBldGMpICovCi0j ZW5kaWYgLyogT1MyT1JVTklYICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogTk9IVFRQ ICovCi0KLQotI2lmbmRlZiBOT05FVAotI2lmZGVmIFRDUFNPQ0tFVAotCi0vKiBUaGUgSFRUUCBj b2RlIGlzIG5vdCB2ZXJ5IHBvcnRhYmxlLCBzbyBpdCBtdXN0IGJlIGFza2VkIGZvciB3aXRoIC1E Q0tIVFRQICovCi0KLSNpZm5kZWYgTk9IVFRQCi0jaWZuZGVmIENLSFRUUAotI2lmZGVmIFNVTk9T NAkJCQkvKiBXZSBjYW4gdXNlIGl0IGluIFN1bk9TICovCi0jZGVmaW5lIENLSFRUUAotI2VuZGlm IC8qIFNVTk9TNCAqLwotI2lmZGVmIFNPTEFSSVMJCQkJLyogQW5kIGluIFNvbGFyaXMgKi8KLSNk ZWZpbmUgQ0tIVFRQCi0jZW5kaWYgLyogU09MQVJJUyAqLwotI2lmZGVmIExJTlVYCQkJCS8qIEFu ZCBMaW51eCAqLwotI2RlZmluZSBDS0hUVFAKLSNlbmRpZiAvKiBMSU5VWCAqLwotI2lmZGVmIEhQ VVgxMAkJCQkvKiBBbmQgSFAtVVggMTAgYW5kIGFib3ZlICovCi0jZGVmaW5lIENLSFRUUAotI2Vu ZGlmIC8qIEhQVVgxMCAqLwotI2lmZGVmIE9TMgkJCQkvKiBBbmQgaW4gSy05NSAqLwotI2RlZmlu ZSBDS0hUVFAKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBBSVg0MQkJCQkvKiBJbiBBSVggNC4x IGFuZCBoaWdoZXIgKi8KLSNkZWZpbmUgQ0tIVFRQCi0jZW5kaWYgLyogQUlYNDEgKi8KLSNpZmRl ZiBVTklYV0FSRQkJCQkvKiBJbiBVbml4d2FyZSAyLjEgYW5kIGhpZ2hlciAqLwotI2RlZmluZSBD S0hUVFAJCQkJLyogYW5kIHByb2JhYmx5IGFsc28gaW4gMS54IGFuZCAyLjAgKi8KLSNlbmRpZiAv KiBVTklYV0FSRSAqLwotI2lmZGVmIENLX1NDT1Y1Ci0jZGVmaW5lIENLSFRUUAotI2VuZGlmIC8q IENLX1NDT1Y1ICovCi0jaWZkZWYgT1NGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog QW5kIGluIE9TRiBEaWdpdGFsIFVOSVgvVHJ1ZSA2NCAqLwotI2RlZmluZSBDS0hUVFAKLSNlbmRp ZiAvKiBPU0YgKi8KLSNpZmRlZiB1bHRyaXggICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBB bmQgaW4gVWx0cml4IE1pcHMgKi8KLSNpZmRlZiBtaXBzCi0jZGVmaW5lIENLSFRUUAotI2VuZGlm IC8qIG1pcHMgKi8KLSNlbmRpZiAvKiB1bHRyaXggKi8KLSNpZmRlZiBfX05ldEJTRF9fCQkJLyog TmV0QlNEICovCi0jZGVmaW5lIENLSFRUUAotI2VuZGlmCS8qIF9fTmV0QlNEX18gKi8KLSNpZmRl ZiBfX0ZyZWVCU0RfXwotI2RlZmluZSBDS0hUVFAKLSNlbmRpZgkvKiBfX0ZyZWVCU0RfXyAqLwot I2lmZGVmIF9fT3BlbkJTRF9fCi0jZGVmaW5lIENLSFRUUAotI2VuZGlmCS8qIF9fT3BlbkJTRF9f ICovCi0vKiBBZGQgbW9yZSBoZXJlLi4uICovCi0jZW5kaWYgLyogQ0tIVFRQICovCi0jaWZuZGVm IENLSFRUUAkJCQkvKiBJZiBDS0hUVFAgbm90IGRlZmluZWQgeWV0ICovCi0jZGVmaW5lIE5PSFRU UAkJCQkvKiB0aGVuIGRlZmluZSBOT0hUVFAgKi8KLSNlbmRpZiAvKiBDS0hUVFAgKi8KLSNlbmRp ZiAvKiBOT0hUVFAgKi8KLQotI2lmZGVmIE5FVENPTk4JCQkJLyogU3BlY2lhbCAibmV0d29yayIg dHlwZXMuLi4gKi8KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotI2lmbmRlZiBORVRGSUxF Ci0jZGVmaW5lIE5FVEZJTEUKLSNlbmRpZiAvKiBORVRGSUxFICovCi0jaWZuZGVmIE5PUFVTSAot I2lmbmRlZiBORVRDTUQKLSNkZWZpbmUgTkVUQ01ECi0jZW5kaWYgLyogTkVUQ01EICovCi0jZW5k aWYgLyogTk9QVVNIICovCi0jaWZkZWYgTlQKLSNpZm5kZWYgTkVURExMCi0jZGVmaW5lIE5FVERM TAotI2VuZGlmIC8qIE5FVERMTCAqLwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogT1MyICov Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmbmRlZiBO T0ZUUAotI2lmbmRlZiBTWVNGVFAKLSNpZm5kZWYgTkVXRlRQCi0jaWZkZWYgT1MyT1JVTklYCi0j ZGVmaW5lIE5FV0ZUUAotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotI2VuZGlmIC8qIE5FV0ZUUCAq LwotI2VuZGlmIC8qIFNZU0ZUUCAqLwotI2VuZGlmIC8qIE5PRlRQICovCi0KLSNpZm5kZWYgTk9G VFAKLSNpZmRlZiBORVdGVFAKLSNpZmRlZiBTWVNGVFAKLSN1bmRlZiBTWVNGVFAKLSNlbmRpZiAv KiBTWVNGVFAgKi8KLSNlbHNlIC8qIE5FV0ZUUCAqLwotI2lmbmRlZiBTWVNGVFAKLSNkZWZpbmUg U1lTRlRQCi0jZW5kaWYgLyogU1lTRlRQICovCi0jZW5kaWYgLyogTkVXRlRQICovCi0jZWxzZSAv KiBOT0ZUUCAqLwotI2lmZGVmIE5FV0ZUUAotI3VuZGVmIE5FV0ZUUAotI2VuZGlmIC8qIE5FV0ZU UCAqLwotI2lmZGVmIFNZU0ZUUAotI3VuZGVmIFNZU0ZUUAotI2VuZGlmIC8qIFNZU0ZUUCAqLwot I2VuZGlmIC8qIE5PRlRQICovCi0KLSNpZm5kZWYgTk9CUk9XU0VSCi0jaWZkZWYgVU5JWAotI2lm bmRlZiBCUk9XU0VSCi0jaWZuZGVmIE5PUFVTSAotI2RlZmluZSBCUk9XU0VSCi0jZW5kaWYgLyog Tk9QVVNIICovCi0jZW5kaWYgLyogQlJPV1NFUiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNpZmRl ZiBPUzIKLSNpZm5kZWYgQlJPV1NFUgotI2lmbmRlZiBOT1BVU0gKLSNkZWZpbmUgQlJPV1NFUgot I2VuZGlmIC8qIE5PUFVTSCAqLwotI2VuZGlmIC8qIEJST1dTRVIgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbHNlCi0jaWZkZWYgQlJPV1NFUgotI3VuZGVmIEJST1dTRVIKLSNlbmRpZiAvKiBCUk9X U0VSICovCi0jZW5kaWYgLyogTk9CUk9XU0VSICovCi0KLSNlbHNlIC8qIFRDUFNPQ0tFVCAqLwot I2lmbmRlZiBOT0hUVFAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhUVFAgcmVxdWlyZXMg VENQU09DS0VUICovCi0jZGVmaW5lIE5PSFRUUAotI2VuZGlmIC8qIE5PSFRUUCAqLwotI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIE5PTkVUICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQK LSNpZm5kZWYgTk9DS0dFVEZRSE9TVAotI2lmZGVmIF9faWE2NF9fCi0jZGVmaW5lIE5PQ0tHRVRG UUhPU1QKLSNlbHNlICAvKiBfX2lhNjRfXyAqLwotI2lmZGVmIFNWNjgKLSNkZWZpbmUgTk9DS0dF VEZRSE9TVAotI2Vsc2UKLSNpZmRlZiBIUFVYUFJFNjUKLSNkZWZpbmUgTk9DS0dFVEZRSE9TVAot I2VuZGlmIC8qIEhQVVhQUkU2NSAqLwotI2VuZGlmIC8qIFNWNjggKi8KLSNlbmRpZiAvKiBfX2lh NjQgKi8KLSNlbmRpZiAvKiBOT0NLR0VURlFIT1NUICovCi0vKgotICBSZWdhcmRpbmcgU3lzdGVt IFYvNjggKFNWNjgpIChmcm9tIEdlcnJ5IEJlbGFuZ2VyLCBPY3QgMjAwMik6Ci0KLSAgICAxKSBU aGUgZ2V0aG9zdGJ5bmFtZSgpIGFwcGVhcnMgdG8gcmV0dXJuIHRoZSBhY3R1YWwgaG9zdCBJUAot ICAgICAgIGFkZHJlc3MgaW4gdGhlIGhvc3RlbnQgc3RydWN0LCBpbnN0ZWFkIG9mIHRoZSBleHBl Y3RlZCBwb2ludGVyCi0gICAgICAgdG8gdGhlIGFkZHJlc3MuIEhlbmNlIHRoZSBib2d1cyBhZGRy ZXNzIGluIHRoZSBiY29weS9tZW1jb3B5LgotICAgICAgIFRoaXMgaXMgZGVzcGl0ZSB0aGUgaGVh ZGVyIGFncmVlaW5nIHdpdGggb3VyIGV4cGVjdGF0aW9ucy4KLQotICAgIDIpIHRoZSBleHBlY3Rl ZCBhcmd1bWVudCBzd2FwIGJldHdlZW4gYmNvcHkgYW5kIG1lbWNvcHkKLSAgICAgICBkaWQgbm90 IGhhcHBlbi4gIFdoYXQgZ3JpZWYgdGhpcyBtaWdodCBjYXVzZSwgSSBrbm93IG5vdC4KLSovCi0j ZW5kaWYgLyogVENQU09DS0VUICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZmRlZiBPUzJPTkxZ Ci0jaWZuZGVmIE5PU09DS1MKLSNkZWZpbmUgTk9TT0NLUwotI2VuZGlmIC8qIE5PU09DS1MgKi8K LSNlbmRpZiAvKiBPUzJPTkxZICovCi0jaWZkZWYgTk9TT0NLUwotI2lmZGVmIENLX1NPQ0tTCi0j dW5kZWYgQ0tfU09DS1MKLSNlbmRpZiAvKiBDS19TT0NLUyAqLwotI2lmZGVmIENLX1NPQ0tTNQot I3VuZGVmIENLX1NPQ0tTNQotI2VuZGlmIC8qIENLX1NPQ0tTNSAqLwotI2Vsc2UgLyogTk9TT0NL UyAqLwotI2lmZGVmIE5UCi0jaWZuZGVmIENLX1NPQ0tTCi0jZGVmaW5lIENLX1NPQ0tTCi0jZW5k aWYgLyogQ0tfU09DS1MgKi8KLSNlbmRpZiAvKiBOVCAqLwotI2lmZGVmIENLX1NPQ0tTNQkJCS8q IENLX1NPQ0tTNSBpbXBsaWVzIENLX1NPQ0tTICovCi0jaWZuZGVmIENLX1NPQ0tTCi0jZGVmaW5l IENLX1NPQ0tTCi0jZW5kaWYgLyogQ0tfU09DS1MgKi8KLSNlbmRpZiAvKiBDS19TT0NLUzUgKi8K LSNlbmRpZiAvKiBOT1NPQ0tTICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLSNpZmRlZiBU TkNPREUKLSNpZm5kZWYgQ0tfQVVUSEVOVElDQVRJT04KLSNpZmRlZiBPUzIKLSNpZmRlZiBfTV9Q UEMKLSNkZWZpbmUgTk9fS0VSQkVST1MKLSNkZWZpbmUgTk9fU1JQCi0jZWxzZSAvKiBfTV9QUEMg Ki8KLSNpZm5kZWYgTk9fU1NMCi0jZGVmaW5lIENLX1NTTAotI2RlZmluZSBTU0xETEwKLSNlbmRp ZiAvKiBOT19TU0wgKi8KLSNlbmRpZiAvKiBfTV9QUEMgKi8KLSNpZm5kZWYgTk9fS0VSQkVST1MK LSNkZWZpbmUgQ0tfS0VSQkVST1MKLSNkZWZpbmUgS1JCNAotI2RlZmluZSBLUkI1Ci0jZGVmaW5l IEtSQjUyNAotI2RlZmluZSBLUkI1MjRfQ09OVgotI2lmZGVmIE5UCi0jaWZuZGVmIF9NX1BQQwot I2lmbmRlZiBfTV9BTFBIQQotI2lmbmRlZiBOT19TU0xfS1JCNQotI2RlZmluZSBTU0xfS1JCNQot I2VuZGlmIC8qIE5PX1NTTF9LUkI1ICovCi0jZW5kaWYgLyogX01fQUxQSEEgKi8KLSNlbmRpZiAv KiBfTV9QUEMgKi8KLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIE5PX0tFUkJFUk9TICovCi0j aWZuZGVmIE5PX1NSUAotI2RlZmluZSBDS19TUlAKLSNlbmRpZiAvKiBOT19TUlAgKi8KLSNkZWZp bmUgQ0tfQVVUSEVOVElDQVRJT04KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDS19BVVRI RU5USUNBVElPTiAqLwotCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04JCS8qIEVuY3J5cHRpb24g bXVzdCBoYXZlIEF1dGggKi8KLSNpZm5kZWYgQ0tfRU5DUllQVElPTgotI2lmbmRlZiBOT19FTkNS WVBUSU9OCi0jaWZkZWYgT1MyCi0jZGVmaW5lIENLX0VOQ1JZUFRJT04KLSNkZWZpbmUgQ0tfREVT Ci0jZGVmaW5lIENLX0NBU1QKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT19FTkNSWVBU SU9OICovCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJ Q0FUSU9OICovCi0KLSNpZmRlZiBOT19BVVRIRU5USUNBVElPTiAgICAgICAgICAgICAgICAvKiBB bGxvdyBhdXRoZW50aWNhdGlvbiB0byBiZSAqLwotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OICAg ICAgICAgICAgICAgIC8qIGRpc2FibGVkIGluIE5UIGFuZCBPUy8yICAgICovCi0jdW5kZWYgQ0tf QVVUSEVOVElDQVRJT04KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2lmZGVmIENL X0tFUkJFUk9TCi0jdW5kZWYgQ0tfS0VSQkVST1MKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwot I2lmZGVmIENLX1NSUAotI3VuZGVmIENLX1NSUAotI2VuZGlmIC8qIENLX1NSUCAqLwotI2lmZGVm IENLX0VOQ1JZUFRJT04KLSN1bmRlZiBDS19FTkNSWVBUSU9OCi0jZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLwotI2VuZGlmIC8qIE5PX0FVVEhFTlRJQ0FUSU9OICovCi0KLSNpZmRlZiBOT19FTkNS WVBUSU9OICAgICAgICAgICAgICAgICAgICAvKiBBbGxvdyBlbmNyeXB0aW9uIHRvIGJlICovCi0j aWZkZWYgQ0tfRU5DUllQVElPTiAgICAgICAgICAgICAgICAgICAgLyogZGlzYWJsZWQgaW4gTlQg YW5kIE9TLzIgKi8KLSN1bmRlZiBDS19FTkNSWVBUSU9OCi0jZW5kaWYgLyogQ0tfRU5DUllQVElP TiAqLwotI2VuZGlmIC8qIE5PX0VOQ1JZUFRJT04gKi8KLQotI2lmZGVmIENLX0tFUkJFUk9TICAg ICAgLyogRGlzYWJsZSBmdW5jcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIEhlaW1kYWwgKi8KLSNp ZmRlZiBLUkI1Ci0jaWZuZGVmIEhFSU1EQUwKLSNkZWZpbmUgS1JCNV9VMlUKLSNlbmRpZiAvKiBI RUlNREFMICovCi0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0K LS8qCi0gIFNTSCBzZWN0aW9uLiAgTk9TU0ggZGlzYWJsZXMgYW55IGZvcm0gb2YgU1NIIHN1cHBv cnQuCi0gIElmIE5PU1NIIGlzIG5vdCBkZWZpbmVkIChvciBpbXBsaWVkIGJ5IE5PTkVULCBOT0xP Q0FMLCBldGMpCi0gIHRoZW4gU1NIQlVJTFRJTiBpcyBkZWZpbmVkIGZvciBLOTUgYW5kIFNTSENN RCBpcyBkZWZpbmVkIGZvciBVTklYLgotICBUaGVuLCBpZiBlaXRoZXIgU1NIQlVJTFRJTiBvciBT U0hDTUQgaXMgZGVmaW5lZCwgQU5ZU1NIIGlzIGFsc28gZGVmaW5lZC4KLSovCi0KLSNpZm5kZWYg Tk9TU0gKLSNpZm5kZWYgTk9fU1NMCi0jaWZkZWYgT1MyT05MWQotI2RlZmluZSBOT1NTSAotI2Vu ZGlmIC8qIE9TMk9OTFkgKi8KLSNpZmRlZiBOVAotI2lmbmRlZiBDS19TU0wKLSNkZWZpbmUgTk9T U0gKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UgLyogTk9fU1NM ICovCi0jZGVmaW5lIE5PU1NICi0jZW5kaWYgLyogTk9fU1NMICovCi0jZW5kaWYgLyogTk9TU0gg Ki8KLQotI2lmZGVmIE5PU1NICQkJCS8qIE5PU1NIICovCi0jaWZkZWYgU1NIQlVJTFRJTgkJCS8q IHVuZGVmaW5lcyBhbnkgU1NIIHNlbGN0b3JzICovCi0jdW5kZWYgU1NIQlVJTFRJTgotI2VuZGlm IC8qIFNTSEJVSUxUSU4gKi8KLSNpZmRlZiBTRlRQX0JVSUxUSU4KLSN1bmRlZiBTRlRQX0JVSUxU SU4KLSNlbmRpZiAvKiBTRlRQX0JVSUxUSU4gKi8KLSNpZmRlZiBTU0hDTUQKLSN1bmRlZiBTU0hD TUQKLSNlbmRpZiAvKiBTU0hDTUQgKi8KLSNpZmRlZiBBTllTU0gKLSN1bmRlZiBBTllTU0gKLSNl bmRpZiAvKiBBTllTU0ggKi8KLSNlbHNlICAvKiBOb3QgTk9TU0ggKi8KLSNpZm5kZWYgTk9MT0NB TAotI2lmZGVmIE9TMgotI2lmbmRlZiBTU0hCVUlMVElOCi0jZGVmaW5lIFNTSEJVSUxUSU4KLSNl bmRpZiAvKiBTU0hCVUlMVElOICovCi0jZWxzZSAgLyogTm90IE9TMiAqLwotI2lmZGVmIFVOSVgK LSNpZm5kZWYgU1NIQ01ECi0jaWZkZWYgTkVUUFRZCi0jaWZuZGVmIE5PUFVTSAotI2RlZmluZSBT U0hDTUQKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNlbmRpZiAvKiBORVRQVFkgKi8KLSNlbmRpZiAv KiBTU0hDTUQgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogT1MyICovCi0jaWZuZGVm IEFOWVNTSAotI2lmZGVmIFNTSEJVSUxUSU4KLSNkZWZpbmUgQU5ZU1NICi0jaWZkZWYgU1NIQ01E Ci0jdW5kZWYgU1NIQ01ECi0jZW5kaWYgLyogU1NIQ01EICovCi0jZWxzZSAgLyogU1NIQlVJTFRJ TiAqLwotI2lmZGVmIFNTSENNRAotI2RlZmluZSBBTllTU0gKLSNlbmRpZiAvKiBTU0hDTUQgKi8K LSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jZW5kaWYgLyogQU5ZU1NIICovCi0jZW5kaWYgLyog Tk9MT0NBTCAqLwotI2VuZGlmIC8qIE5PU1NIICovCi0KLS8qIFRoaXMgaXMgaW4gY2FzZSAjaWZk ZWYgU1NIIGlzIHVzZWQgYW55d2hlcmUgaW4gdGhlIEs5NSBtb2R1bGVzICovCi0KLSNpZmRlZiBP UzIKLSNpZmRlZiBTU0hCVUlMVElOCi0jaWZuZGVmIFNTSAotI2RlZmluZSBTU0gKLSNlbmRpZiAv KiBTU0ggKi8KLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNp ZmRlZiBDS19BVVRIRU5USUNBVElPTgotI2RlZmluZSBDS19TRUNVUklUWQotI2Vsc2UKLSNpZmRl ZiBDS19TU0wKLSNkZWZpbmUgQ0tfQVVUSEVOVElDQVRJT04KLSNkZWZpbmUgQ0tfU0VDVVJJVFkK LSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotCi0v KiBFbnZpcm9ubWVudCBzdHVmZiAqLwotCi0jaWZuZGVmIE9TMk9SVU5JWAotI2lmbmRlZiBOT1BV VEVOVgotI2RlZmluZSBOT1BVVEVOVgotI2VuZGlmIC8qIE5PUFVURU5WICovCi0jZW5kaWYgLyog T1MyT1JVTklYICovCi0KLSNpZm5kZWYgQ0tfRU5WSVJPTk1FTlQKLSNpZmRlZiBPUzIKLSNkZWZp bmUgQ0tfRU5WSVJPTk1FTlQKLSNlbHNlCi0jaWZkZWYgVU5JWAotI2RlZmluZSBDS19FTlZJUk9O TUVOVAotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0jZGVmaW5lIENLX0VOVklST05NRU5UCi0jZWxz ZQotI2lmZGVmIFZNUwotI2RlZmluZSBDS19FTlZJUk9OTUVOVAotI2VuZGlmIC8qIFZNUyAqLwot I2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogT1MyICov Ci0jZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KLSNpZm5kZWYgTk9TTkRMT0MJCQkvKiBSRkMg Nzc5IFNFTkQgTE9DQVRJT04gKi8KLSNpZm5kZWYgQ0tfU05ETE9DCi0jZGVmaW5lIENLX1NORExP QwotI2VuZGlmIC8qIENLX1NORExPQyAqLwotI2VuZGlmIC8qIE5PU05ETE9DICovCi0jaWZuZGVm IE5PWERJU1BMT0MJCQkvKiBSRkMgMTA5NiBYRElTUExPQyAqLwotI2lmbmRlZiBDS19YRElTUExP QwotI2RlZmluZSBDS19YRElTUExPQwotI2VuZGlmIC8qIENLX1hESVNQTE9DICovCi0jZW5kaWYg LyogTk9YRElTUExPQyAqLwotI2lmbmRlZiBOT0ZPUldBUkRYCi0jaWZuZGVmIE5PUFVURU5WCi0j aWZuZGVmIE5PU0VMRUNUCi0jaWZuZGVmIENLX0ZPUldBUkRfWAotI2lmZGVmIENLX0FVVEhFTlRJ Q0FUSU9OCi0jaWZuZGVmIE9TMk9OTFkKLSNkZWZpbmUgQ0tfRk9SV0FSRF9YCi0jZW5kaWYgLyog T1MyT05MWSAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0jZW5kaWYgLyogQ0tf Rk9SV0FSRF9YICovCi0jZW5kaWYgLyogTk9TRUxFQ1QgKi8KLSNlbmRpZiAvKiBOT1BVVEVOViAq LwotI2VuZGlmIC8qIE5PRk9SV0FSRFggKi8KLSNpZm5kZWYgTk9fQ09NUE9SVAotI2lmZGVmIFRD UFNPQ0tFVAotI2lmbmRlZiBUTl9DT01QT1JUCi0jZGVmaW5lIFROX0NPTVBPUlQKLSNlbmRpZiAv KiBUTl9DT01QT1JUICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogTk9fQ09N UE9SVCAqLwotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0jaWZuZGVmIE5PWEZFUgotI2lmbmRlZiBO T0NUUkxaCQkJCS8qIEFsbG93IFNFVCBGSUxFIEVPRiBDVFJMLVogKi8KLSNpZm5kZWYgQ0tfQ1RS TFoKLSNpZmRlZiBPUzJPUlVOSVgKLSNkZWZpbmUgQ0tfQ1RSTFoKLSNlbmRpZiAvKiBPUzJPUlVO SVggKi8KLSNlbmRpZiAvKiBDS19DVFJMWiAqLwotI2VuZGlmIC8qIE5PQ1RSTFogKi8KLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT1BFUk1TCQkJCS8qIEZpbGUgcGVybWlzc2lvbnMg aW4gQSBwYWNrZXRzICovCi0jaWZuZGVmIENLX1BFUk1TCi0jaWZkZWYgVU5JWAotI2RlZmluZSBD S19QRVJNUwotI2Vsc2UKLSNpZmRlZiBWTVMKLSNkZWZpbmUgQ0tfUEVSTVMKLSNlbmRpZiAvKiBW TVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLSNlbmRpZiAv KiBOT1BFUk1TICovCi0jaWZkZWYgQ0tfUEVSTVMKLSNkZWZpbmUgQ0tfUEVSTUxFTiAyNAkJCS8q IE1heCBsZW5ndGggb2Ygc3lzLWRlcGVuZGVudCBwZXJtcyAqLwotI2VuZGlmIC8qIENLX1BFUk1T ICovCi0KLSNpZmRlZiBVTklYCQkJCS8qIE5PU0VUQlVGIGZvciBldmVyeWJvZHkgKi8KLSNpZm5k ZWYgTk9TRVRCVUYKLSNpZm5kZWYgVVNFX1NFVEJVRgkJCS8qIFRoaXMgaXMgdGhlIGVzY2FwZSBj bGF1c2UgKi8KLSNkZWZpbmUgTk9TRVRCVUYKLSNlbmRpZiAvKiBVU0VfU0VUQlVGICovCi0jZW5k aWYgLyogTk9TRVRCVUYgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZm5kZWYgVVNFX1NUUkVS Uk9SCQkJLyogV2hldGhlciB0byB1c2Ugc3RyZXJyb3IoKSAqLwotI2lmZGVmIHBkcDExCi0jZGVm aW5lIFVTRV9TVFJFUlJPUgotI2VuZGlmIC8qIHBkcDExICovCi0jZW5kaWYgLyogVVNFX1NUUkVS Uk9SICovCi0KLSNpZmRlZiBWTVMJCQkJLyogRmVhdHVyZXMgZm9yIGFsbCBWTVMgYnVpbGRzICov Ci0jaWZuZGVmIE5PSkMKLSNkZWZpbmUgTk9KQwotI2VuZGlmIC8qIE5PSkMgKi8KLSNpZm5kZWYg Tk9TRVRCVUYKLSNkZWZpbmUgTk9TRVRCVUYKLSNlbmRpZiAvKiBOT1NFVEJVRiAqLwotI2lmbmRl ZiBEWU5BTUlDCi0jZGVmaW5lIERZTkFNSUMKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0jaWZuZGVm IE5PQ1VSU0VTCi0jaWZuZGVmIENLX0NVUlNFUwotI2RlZmluZSBDS19DVVJTRVMKLSNlbmRpZiAv KiBDS19DVVJTRVMgKi8KLSNlbmRpZiAvKiBOT0NVUlNFUyAqLwotI2VuZGlmIC8qIFZNUyAqLwot Ci0jaWZuZGVmIE5PQ0tUSU1FUlMJCQkvKiBEeW5hbWljIHRpbWVvdXRzICovCi0jaWZuZGVmIENL X1RJTUVSUwotI2RlZmluZSBDS19USU1FUlMKLSNlbmRpZiAvKiBDS19USU1FUlMgKi8KLSNlbmRp ZiAvKiBOT0NLVElNRVJTICovCi0KLSNkZWZpbmUgQ0tfU1BFRUQJCQkvKiBDb250cm9sLXByZWZp eCByZW1vdmFsICovCi0jaWZkZWYgTk9DS1NQRUVECi0jdW5kZWYgQ0tfU1BFRUQKLSNlbmRpZiAv KiBOT0NLU1BFRUQgKi8KLQotI2lmbmRlZiBOT0NLWFhDSEFSCi0jaWZuZGVmIENLWFhDSEFSCi0j aWZkZWYgVU5JWAotI2RlZmluZSBDS1hYQ0hBUgotI2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUg Q0tYWENIQVIKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyog Q0tYWENIQVIgKi8KLSNlbmRpZiAvKiBOT0NLWFhDSEFSICovCi0KLSNpZmRlZiBNQUMJCQkJLyog Rm9yIE1hY2ludG9zaCwgbm8gZXNjYXBlICovCi0jZGVmaW5lIE5PUFVTSAkJCQkvKiB0byBvcGVy YXRpbmcgc3lzdGVtICovCi0jZW5kaWYgLyogTUFDICovCi0KLS8qIFN5c3RlbXMgd2hlcmUgd2Ug Y2FuIGNhbGwgem1rZGlyKCkgdG8gY3JlYXRlIGRpcmVjdG9yaWVzLiAqLwotCi0jaWZuZGVmIENL X01LRElSCi0jaWZuZGVmIE5PTUtESVIKLQotI2lmZGVmIFVOSVgKLSNpZm5kZWYgcGRwMTEKLSNk ZWZpbmUgQ0tfTUtESVIKLSNlbmRpZiAvKiBwZHAxMSAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQot I2lmZGVmIE9TMgotI2RlZmluZSBDS19NS0RJUgotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYg Vk1TCi0jZGVmaW5lIENLX01LRElSCi0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBTVFJBVFVT Ci0jZGVmaW5lIENLX01LRElSCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotCi0jaWZkZWYgT1NLCi0j ZGVmaW5lIENLX01LRElSCi0jZW5kaWYgLyogT1NLICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbAot I2RlZmluZSBDS19NS0RJUgotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0KLSNlbmRpZiAvKiBD S19NS0RJUiAqLwotI2VuZGlmIC8qIE5PTUtESVIgKi8KLQotI2lmZGVmIE5PTUtESVIJCQkJLyog QWxsb3cgZm9yIGNvbW1hbmQtbGluZSBvdmVycmlkZSAqLwotI2lmZGVmIENLX01LRElSCi0jdW5k ZWYgQ0tfTUtESVIKLSNlbmRpZiAvKiBDS19NS0RJUiAqLwotI2VuZGlmIC8qIE5PTUtESVIgKi8K LQotLyogU3lzdGVtcyBmb3Igd2hpY2ggd2UgY2FuIGVuYWJsZSB0aGUgUkVESVJFQ1QgY29tbWFu ZCBhdXRvbWF0aWNhbGx5ICovCi0vKiAgIEFzIG9mIDYuMC4xOTMsIGl0IHNob3VsZCB3b3JrIGZv ciBhbGwgVU5JWC4uLiAqLwotCi0jaWZuZGVmIE5PUkVESVJFQ1QKLSNpZm5kZWYgQ0tfUkVESVIK LSNpZmRlZiBVTklYCi0jZGVmaW5lIENLX1JFRElSCi0jZW5kaWYgLyogVU5JWCAqLwotI2lmZGVm IE9TMgkJCQkvKiBBcyB3ZWxsIGFzIE9TLzIgYW5kIGZyaWVuZHMuLi4gKi8KLSNkZWZpbmUgQ0tf UkVESVIKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDS19SRURJUiAqLwotI2VuZGlmIC8q IE5PUkVESVJFQ1QgKi8KLQotI2lmZGVmIE5PUFVTSAkJCQkvKiBCdXQuLi4gUkVESVJFQ1QgY29t bWFuZCBpcyBub3QgKi8KLSNpZmRlZiBDS19SRURJUgkJCQkvKiAgYWxsb3dlZCBpZiBOT1BVU0gg aXMgZGVmaW5lZC4gKi8KLSN1bmRlZiBDS19SRURJUgotI2VuZGlmIC8qIENLX1JFRElSICovCi0j aWZkZWYgTkVUQ01ECQkJCS8qIE5vciBpcyBTRVQgTkVUIENPTU1BTkQgKi8KLSN1bmRlZiBORVRD TUQKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSN1bmRlZiBORVRQVFkKLSNl bmRpZiAvKiBORVRQVFkgKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmbmRlZiBQRVhJVFNU QVQJCQkvKiBcdihwZXhpdHN0YXQpIHZhcmlhYmxlIGRlZmluZWQgKi8KLSNpZmRlZiBPUzJPUlVO SVgKLSNkZWZpbmUgUEVYSVRTVEFUCi0jZWxzZQotI2lmZGVmIFZNUwotI2RlZmluZSBQRVhJVFNU QVQKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSNlbmRpZiAvKiBQ RVhJVFNUQVQgKi8KLQotLyogVGhlIGZvbGxvd2luZyBhbGxvd3MgYXV0b21hdGljIGVuYWJsaW5n IG9mIFJFRElSRUNUIHRvIGJlIG92ZXJyaWRkZW4uLi4gKi8KLQotI2lmZGVmIE5PUkVESVJFQ1QK LSNpZmRlZiBORVRDTUQKLSN1bmRlZiBORVRDTUQKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRl ZiBORVRQVFkKLSN1bmRlZiBORVRQVFkKLSNlbmRpZiAvKiBORVRQVFkgKi8KLSNpZmRlZiBDS19S RURJUgotI3VuZGVmIENLX1JFRElSCi0jZW5kaWYgLyogQ0tfUkVESVIgKi8KLSNlbmRpZiAvKiBO T1JFRElSRUNUICovCi0KLSNpZmRlZiBOT05FVENNRAotI2lmZGVmIE5FVENNRAotI3VuZGVmIE5F VENNRAotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotI3VuZGVmIE5FVFBUWQot I2VuZGlmIC8qIE5FVFBUWSAqLwotI2VuZGlmIC8qIE5PTkVUQ01EICovCi0KLSNpZmRlZiBDS19S RURJUgotX1BST1RPVFlQKCBpbnQgdHRydW5jbWQsIChjaGFyICopICk7Ci0jZW5kaWYgLyogQ0tf UkVESVIgKi8KLQotLyogVXNlIGJ1aWx0LWluIERJUkVDVE9SWSBjb21tYW5kICovCi0KLSNpZm5k ZWYgTk9NWURJUgotI2lmbmRlZiBET01ZRElSCi0jaWZkZWYgVU5JWE9ST1NLCi0jZGVmaW5lIERP TVlESVIKLSNlbHNlCi0jaWZkZWYgT1MyCi0jZGVmaW5lIERPTVlESVIKLSNlbHNlCi0jaWZkZWYg Vk1TCi0jZGVmaW5lIERPTVlESVIKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSNlbmRpZiAvKiBET01ZRElSICovCi0jZW5kaWYgLyog Tk9NWURJUiAqLwotCi0vKiBTZW5kaW5nIGZyb20gYW5kIHJlY2VpdmluZyB0byBjb21tYW5kcy9w aXBlcyAqLwotCi0jaWZuZGVmIFBJUEVTRU5ECi0jaWZkZWYgVU5JWAotI2RlZmluZSBQSVBFU0VO RAotI2VuZGlmIC8qIFVOSVggKi8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgUElQRVNFTkQKLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCi0jaWZkZWYgUElQRVNFTkQKLSNp ZmRlZiBOT1BJUEVTRU5ECi0jdW5kZWYgUElQRVNFTkQKLSNlbmRpZiAvKiBOT1BJUEVTRU5EICov Ci0jaWZkZWYgTk9QVVNICi0jdW5kZWYgUElQRVNFTkQKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNl bmRpZiAvKiBQSVBFU0VORCAqLwotCi0jaWZkZWYgTk9QVVNICi0jaWZkZWYgQlJPV1NFUgotI3Vu ZGVmIEJST1dTRVIKLSNlbmRpZiAvKiBCUk9XU0VSICovCi0jZW5kaWYgLyogTk9QVVNIICovCi0K LS8qIFZlcnNpb25zIHdoZXJlIHdlIHN1cHBvcnQgdGhlIFJFU0VORCBjb21tYW5kICovCi0KLSNp Zm5kZWYgTk9YRkVSCi0jaWZuZGVmIE5PUkVTRU5ECi0jaWZuZGVmIENLX1JFU0VORAotI2lmZGVm IFVOSVgKLSNpZm5kZWYgcGRwMTEKLSNkZWZpbmUgQ0tfUkVTRU5ECi0jZW5kaWYgLyogcGRwMTEg Ki8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZmRlZiBWTVMKLSNkZWZpbmUgQ0tfUkVTRU5ECi0j ZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBPUzIKLSNkZWZpbmUgQ0tfUkVTRU5ECi0jZW5kaWYg LyogT1MyICovCi0KLSNpZmRlZiBBTUlHQQotI2RlZmluZSBDS19SRVNFTkQKLSNlbmRpZiAvKiBB TUlHQSAqLwotCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSNkZWZpbmUgQ0tfUkVTRU5ECi0jZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KLQotI2lmZGVmIFNUUkFUVVMKLSNkZWZpbmUgQ0tfUkVTRU5ECi0j ZW5kaWYgLyogU1RSQVRVUyAqLwotCi0jaWZkZWYgT1NLCi0jZGVmaW5lIENLX1JFU0VORAotI2Vu ZGlmIC8qIE9TSyAqLwotCi0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0jZW5kaWYgLyogTk9SRVNF TkQgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotLyogU3lzdGVtcyBpbXBsZW1lbnRpbmcgIkRv b21zZGF5IEtlcm1pdCIgcHJvdG9jb2wgLi4uICovCi0KLSNpZm5kZWYgRE9PTVNEQVkKLSNpZmRl ZiBVTklYCi0jZGVmaW5lIERPT01TREFZCi0jZWxzZQotI2lmZGVmIFZNUwotI2RlZmluZSBET09N U0RBWQotI2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUgRE9PTVNEQVkKLSNlbHNlCi0jaWZkZWYg U1RSQVRVUwotI2RlZmluZSBET09NU0RBWQotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyog RE9PTVNEQVkgKi8KLQotLyogU3lzdGVtcyB3aGVyZSB3ZSB3YW50IHRoZSBUaGVybW9tZXRlciB0 byBiZSB1c2VkIGZvciBmdWxsc2NyZWVuICovCi0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgQ0tfUENU X0JBUgotI2RlZmluZSBDS19QQ1RfQkFSCi0jZW5kaWYgLyogQ0tfUENUX0JBUiAqLwotI2VuZGlm IC8qIE9TMiAqLwotCi0vKiBTeXN0ZW1zIHdoZXJlIHdlIGhhdmUgYSBSRVhYIGNvbW1hbmQgKi8K LQotI2lmZGVmIE9TMgotI2lmZGVmIF9fMzJCSVRfXwotI2lmbmRlZiBOT1JFWFgKLSNkZWZpbmUg Q0tfUkVYWAotI2VuZGlmIC8qIE5PUkVYWCAqLwotI2VuZGlmIC8qIF9fMzJCSVRfXyAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotCi0vKiBQbGF0Zm9ybXMgdGhhdCBoYXZlIGEgWkNIS1BJRCBmdW5jdGlv biAqLwotCi0jaWZkZWYgT1MyT1JVTklYCi0jZGVmaW5lIFpDSEtQSUQKLSNlbmRpZiAvKiBPUzJP UlVOSVggKi8KLQotI2lmbmRlZiBaQ0hLUElECi0vKiBJZiB3ZSBjYW4ndCBjaGVjayBwaWRzIHRo ZW4gd2UgaGF2ZSB0cmVhdCBhbGwgcGlkcyBhcyBhY3RpdmUgJiB2YWxpZC4gKi8KLSNkZWZpbmUg emNoa3BpZCh4KSAxCi0jZW5kaWYgLyogWkNIS1BJRCAqLwotCi0vKiBTeXN0ZW1zIHRoYXQgaGF2 ZSBhIFpSRU5BTUUgZnVuY3Rpb24gKi8KLQotI2RlZmluZSBaUkVOQU1FCQkJCS8qIFRoZXkgYWxs IGRvICovCi0KLS8qIFN5c3RlbXMgdGhhdCBoYXZlIGEgWkNPUFkgZnVuY3Rpb24gKi8KLQotI2lm bmRlZiBaQ09QWQotI2lmZGVmIFZNUwotI2RlZmluZSBaQ09QWQotI2Vsc2UKLSNpZmRlZiBPUzIK LSNkZWZpbmUgWkNPUFkKLSNlbHNlCi0jaWZkZWYgVU5JWAotI2RlZmluZSBaQ09QWQotI2Vsc2UK LSNpZmRlZiBTVFJBVFVTCi0jZGVmaW5lIFpDT1BZCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2Vu ZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRp ZiAvKiBaQ09QWSAqLwotCi0vKiBTeXN0ZW1zIHRoYXQgaGF2ZSB0dGd3c2l6KCkgKHRoZXkgYWxs IHNob3VsZCBidXQgdGhleSBkb24ndCkgKi8KLQotI2lmbmRlZiBOT1RUR1dTSVoKLSNpZm5kZWYg Q0tfVFRHV1NJWgotI2lmZGVmIFVOSVgKLSNkZWZpbmUgQ0tfVFRHV1NJWgotI2Vsc2UKLSNpZmRl ZiBWTVMKLSNkZWZpbmUgQ0tfVFRHV1NJWgotI2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUgQ0tf VFRHV1NJWgotI2Vsc2UKLSNpZmRlZiBPU0sKLSNkZWZpbmUgQ0tfVFRHV1NJWgotI2VuZGlmIC8q IE9TSyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVO SVggKi8KLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0jZW5kaWYgLyogTk9UVEdXU0laICovCi0K LSNpZmRlZiBOT1RUR1dTSVoKLSNpZmRlZiBDS19UVEdXU0laCi0jdW5kZWYgQ0tfVFRHV1NJWgot I2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSNlbmRpZiAvKiBOT1RUR1dTSVogKi8KLQotI2lmZGVm IE9TMgotLyogT1MvMiBDLUtlcm1pdCBmZWF0dXJlcyBub3QgYXZhaWxhYmxlIGluIDE2LWJpdCB2 ZXJzaW9uLi4uICovCi0KLSNpZmRlZiBPUzJPTkxZCi0jaWZuZGVmIF9fMzJCSVRfXwotI2lmbmRl ZiBOT0xPQ0FMCi0jaWZkZWYgUENGT05UUwkJCQkvKiBQQyBGb250IHN1cHBvcnQgKi8KLSN1bmRl ZiBQQ0ZPTlRTCi0jZW5kaWYgLyogUENGT05UUyAqLwotI2lmZGVmIE5QSVBFCQkJCS8qIE5hbWVk IFBpcGVzIGNvbW11bmljYXRpb24gKi8KLSN1bmRlZiBOUElQRQotI2VuZGlmIC8qIE5QSVBFICov Ci0jaWZkZWYgQ0tfTkVUQklPUwkJCS8qIE5FVEJJT1MgY29tbXVuaWNhdGlvbiAqLwotI3VuZGVm IENLX05FVEJJT1MKLSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0jaWZkZWYgT1MyTU9VU0UJCQkJ LyogTW91c2UgKi8KLSN1bmRlZiBPUzJNT1VTRQotI2VuZGlmIC8qIE9TMk1PVVNFICovCi0jaWZk ZWYgT1MyUE0JCQkJLyogUHJlc2VudGF0aW9uIE1hbmFnZXIgKi8KLSN1bmRlZiBPUzJQTQotI2Vu ZGlmIC8qIE9TMlBNICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmZGVmIENLX1JFWFgJCQkJ LyogUmV4eCAqLwotI3VuZGVmIENLX1JFWFgKLSNlbmRpZiAvKiBDS19SRVhYICovCi0jZW5kaWYg LyogX18zMkJJVF9fICovCi0jZW5kaWYgLyogT1MyT05MWSAqLwotCi0vKiBPUy8yIEMtS2VybWl0 IGZlYXR1cmVzIG5vdCBhdmFpbGFibGUgaW4gV2luZG93cyBOVCB2ZXJzaW9uLi4uICovCi0KLSNp ZmRlZiBOVAotI2lmZGVmIFBDRk9OVFMJCQkJLyogUEMgRm9udCBzdXBwb3J0ICovCi0jdW5kZWYg UENGT05UUwotI2VuZGlmIC8qIFBDRk9OVFMgKi8KLSNpZmRlZiBPUzJQTQkJCQkvKiBQcmVzZW50 YXRpb24gTWFuYWdlciAqLwotI3VuZGVmIE9TMlBNCi0jZW5kaWYgLyogT1MyUE0gKi8KLSNpZmRl ZiBDS19SRVhYCQkJCS8qIFJleHggKi8KLSN1bmRlZiBDS19SRVhYCi0jZW5kaWYgLyogQ0tfUkVY WCAqLwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogT1MyICovCi0KLS8qCi0gIFN5c3RlbXMg dGhhdCBoYXZlIHNlbGVjdCgpLgotICBUaGlzIGlzIHVzZWQgZm9yIGJvdGggbXNsZWVwKCkgYW5k IGZvciByZWFkLWJ1ZmZlciBjaGVja2luZyBpbiBpbl9jaGsoKS4KLSovCi0jZGVmaW5lIENLX1NM RUVQSU5UIDI1MCAvKiBtaWxsaXNlY29uZHMgLSBzZXQgdGhpcyB0byBzb21ldGhpbmcgdGhhdAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlcyBldmVubHkgaW50byAxMDAwICovCi0j aWZuZGVmIFNFTEVDVAotI2lmbmRlZiBOT1NFTEVDVAotI2lmZGVmIF9fbGludXhfXwotI2RlZmlu ZSBTRUxFQ1QKLSNlbHNlCi0jaWZkZWYgU1VOT1M0Ci0jZGVmaW5lIFNFTEVDVAotI2Vsc2UKLSNp ZmRlZiBORVhUCi0jZGVmaW5lIFNFTEVDVAotI2Vsc2UKLSNpZmRlZiBSVEFJWAotI2RlZmluZSBT RUxFQ1QKLSNlbHNlCi0jaWZkZWYgSFBVWAotLyoKLSAgTm90IHJlYWxseS4gIEkgdGhpbmsgaXQn cyBvbmx5IGluIEhQLVVYIDcuMCBhbmQgbGF0ZXIsIGV4Y2VwdCBpdCdzIGFsc28KLSAgaW4gZWFy bGllciB2ZXJzaW9ucyB0aGF0IGhhdmUgVENQL0lQIGluc3RhbGxlZC4gIE92ZXJyaWRlIHRoaXMg ZGVmYXVsdAotICBpbiBwYXJ0aWN1bGFyIEhQLVVYIG1ha2VmaWxlIGVudHJpZXMgYnkgYWRkaW5n IC1ETk9TRUxFQ1QsIGFzIGluIChlLmcuKQotICB0aGUgSFAtVVggNi41IG9uZXMuCi0qLwotI2Rl ZmluZSBTRUxFQ1QKLSNlbHNlCi0jaWZkZWYgQUlYUlMKLSNkZWZpbmUgU0VMRUNUCi0jZWxzZQot I2lmZGVmIEJTRDQ0Ci0jZGVmaW5lIFNFTEVDVAotI2Vsc2UKLSNpZmRlZiBCU0Q0Ci0jZGVmaW5l IFNFTEVDVAotI2Vsc2UKLSNpZmRlZiBPWE9TCi0jZGVmaW5lIFNFTEVDVAotI2Vsc2UKLSNpZmRl ZiBPUzIKLSNkZWZpbmUgU0VMRUNUCi0jZWxzZQotI2lmZGVmIEJFQk9YCi0jZGVmaW5lIFNFTEVD VAotI2VuZGlmIC8qIEJFQk9YICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogT1hPUyAq LwotI2VuZGlmIC8qIEJTRDQgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIEFJWFJT ICovCi0jZW5kaWYgLyogSFBVWCAqLwotI2VuZGlmIC8qIFJUQUlYICovCi0jZW5kaWYgLyogTkVY VCAqLwotI2VuZGlmIC8qIF9fbGludXhfXyAqLwotI2VuZGlmIC8qIFNVTk9TNCAqLwotI2VuZGlm IC8qIE5PU0VMRUNUICovCi0jZW5kaWYgLyogU0VMRUNUICovCi0KLS8qCi0gIFRoZSBmb2xsb3dp bmcgc2VjdGlvbiBtb3ZlZCBoZXJlIGZyb20gY2tjbmV0LmggaW4gNi4xIGJlY2F1c2Ugc2VsZWN0 KCkKLSAgaXMgbm93IHVzZWQgZm9yIG5vbi1uZXR3b3JraW5nIHB1cnBvc2VzLgotKi8KLQotLyog T24gSFAtOTAwMC81MDAgSFAtVVggNS4yMSB0aGlzIHN0dWZmIGlzIG5vdCBkZWZpbmVkIGluIGFu eSBoZWFkZXIgZmlsZSAqLwotCi0jaWZkZWYgaHA5MDAwczUwMAotI2lmbmRlZiBORUVEU0VMRUNU REVGUwotI2RlZmluZSBORUVEU0VMRUNUREVGUwotI2VuZGlmIC8qIE5FRURTRUxFQ1RERUZTICov Ci0jZW5kaWYgLyogaHA5MDAwczUwMCAqLwotCi0jaWZkZWYgTkVFRFNFTEVDVERFRlMKLXR5cGVk ZWYgbG9uZyBmZF9tYXNrOwotI2lmbmRlZiBOQkJZCi0jZGVmaW5lIE5CQlkgOAotI2VuZGlmIC8q IE5CQlkgKi8KLSNpZm5kZWYgRkRfU0VUU0laRQotI2RlZmluZSBGRF9TRVRTSVpFIDMyCi0jZW5k aWYgLyogRkRfU0VUU0laRSAqLwotI2lmbmRlZiBORkRCSVRTCi0jZGVmaW5lIE5GREJJVFMgKHNp emVvZihmZF9tYXNrKSAqIE5CQlkpCi0jZW5kaWYgLyogTkZEQklUUyAqLwotI2lmbmRlZiBob3dt YW55Ci0jZGVmaW5lIGhvd21hbnkoeCx5KSAoKCh4KSsoKHkpLTEpKS8oeSkpCi0jZW5kaWYgLyog aG93bWFueSAqLwotdHlwZWRlZiBzdHJ1Y3QgZmRfc2V0IHsKLSAgICBmZF9tYXNrIGZkc19iaXRz W2hvd21hbnkoRkRfU0VUU0laRSwgTkZEQklUUyldOwotfSBmZF9zZXQ7Ci0jaWZuZGVmIEZEX1NF VAotI2RlZmluZSBGRF9TRVQobixwKSAoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gfD0gKDEg PDwgKChuKSAlIE5GREJJVFMpKSkKLSNlbmRpZiAvKiBGRF9TRVQgKi8KLSNpZm5kZWYgRkRfQ0xS Ci0jZGVmaW5lIEZEX0NMUihuLHApICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSAmPSB+KDEg PDwgKChuKSAlIE5GREJJVFMpKSkKLSNlbmRpZiAvKiBGRF9DTFIgKi8KLSNpZm5kZWYgRkRfSVNT RVQKLSNkZWZpbmUgRkRfSVNTRVQobixwKSAoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gJiAo MSA8PCAoKG4pICUgTkZEQklUUykpKQotI2VuZGlmIC8qIEZEX0lTU0VUICovCi0jaWZuZGVmIEZE X0NPUFkKLSNkZWZpbmUgRkRfQ09QWShmLHQpIChiY29weShmLHQsc2l6ZW9mKCooZikpKQotI2Vu ZGlmIC8qIEZEX0NPUFkgKi8KLSNpZm5kZWYgRkRfWkVSTwotI2RlZmluZSBGRF9aRVJPKHApIGJ6 ZXJvKChjaGFyICopKHApLHNpemVvZigqKHApKSkKLSNlbmRpZiAvKiBGRF9aRVJPICovCi0jZW5k aWYgLyogTkVFRFNFTEVDVERFRlMgKi8KLQotLyoKLSAgQ0tfTkVFRF9TSUcgaXMgZGVmaW5lZCBp ZiB0aGUgc3lzdGVtIGNhbm5vdCBjaGVjayB0aGUgY29uc29sZSB0bwotICB0byBzZWUgaWYgY2hh cmFjdGVycyBhcmUgd2FpdGluZy4gIFRoaXMgaXMgdXNlZCBkdXJpbmcgbG9jYWwtbW9kZSBmaWxl Ci0gIHRyYW5zZmVyIHRvIGludGVycnVwdCB0aGUgdHJhbnNmZXIsIHJlZnJlc2ggdGhlIHNjcmVl biBkaXNwbGF5LCBldGMuCi0gIElmIENLX05FRURfU0lHIGlzIGRlZmluZWQsIHRoZW4gZmlsZS10 cmFuc2ZlciBpbnRlcnJ1cHRpb24gY2hhcmFjdGVycwotICBoYXZlIHRvIGJlIHByZWNlZGVkIGEg c3BlY2lhbCBjaGFyYWN0ZXIsIGUuZy4gdGhlIFNJR1FVSVQgY2hhcmFjdGVyLgotICBDS19ORUVE X1NJRyBzaG91bGQgYmUgZGVmaW5lZCBpZiB0aGUgY29uY2hrKCkgZnVuY3Rpb24gaXMgbm90IG9w ZXJhdGlvbmFsLgotKi8KLSNpZmRlZiBOT1BPTEwJCQkJLyogRm9yIG92ZXJyaWRpbmcgQ0tfUE9M TCBkZWZpbml0aW9uICovCi0jaWZkZWYgQ0tfUE9MTAotI3VuZGVmIENLX1BPTEwKLSNlbmRpZiAv KiBDS19QT0xMICovCi0jZW5kaWYgLyogTk9QT0xMICovCi0KLSNpZm5kZWYgQ0tfUE9MTAkJCQkv KiBJZiB3ZSBkb24ndCBoYXZlIHBvbGwoKSAqLwotI2lmbmRlZiBSRENISwkJCQkvKiBBbmQgd2Ug ZG9uJ3QgaGF2ZSByZGNoaygpICovCi0jaWZuZGVmIFNFTEVDVAkJCQkvKiBBbmQgd2UgZG9uJ3Qg aGF2ZSBzZWxlY3QoKSAqLwotI2lmZGVmIEFUVFNWCi0jaWZuZGVmIGFlZ2lzCi0jaWZuZGVmIGRh dGFnZW5lcmFsCi0jaWZuZGVmIE9YT1MKLSNkZWZpbmUgQ0tfTkVFRF9TSUcKLSNlbmRpZiAvKiBP WE9TICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBhZWdpcyAqLwotI2Vu ZGlmIC8qIEFUVFNWICovCi0jaWZkZWYgUE9TSVgKLSNpZm5kZWYgQ0tfTkVFRF9TSUcKLSNkZWZp bmUgQ0tfTkVFRF9TSUcKLSNlbmRpZiAvKiBDS19ORUVEX1NJRyAqLwotI2VuZGlmIC8qIFBPU0lY ICovCi0jZW5kaWYgLyogU0VMRUNUICovCi0jZW5kaWYgLyogUkRDSEsgKi8KLSNlbmRpZiAvKiBD S19QT0xMICovCi0KLSNpZmRlZiBIUFVYCQkJCS8qIEhQLVVYIGhhcyBzZWxlY3QoKSAqLwotI2lm ZGVmIENLX05FRURfU0lHCi0jdW5kZWYgQ0tfTkVFRF9TSUcKLSNlbmRpZiAvKiBDS19ORUVEX1NJ RyAqLwotI2VuZGlmIC8qIEhQVVggKi8KLQotI2lmZGVmIEFJWFJTCQkJCS8qIEFJWCBoYXMgc2Vs ZWN0KCkgKi8KLSNpZmRlZiBDS19ORUVEX1NJRwotI3VuZGVmIENLX05FRURfU0lHCi0jZW5kaWYg LyogQ0tfTkVFRF9TSUcgKi8KLSNlbmRpZiAvKiBBSVhSUyAqLwotCi0jaWZkZWYgQlNENDQJCQkJ LyogNC40QlNEIGhhcyBGSU9OUkVBRCAqLwotI2lmZGVmIENLX05FRURfU0lHCi0jdW5kZWYgQ0tf TkVFRF9TSUcKLSNlbmRpZiAvKiBDS19ORUVEX1NJRyAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0K LSNpZmRlZiBRTlgJCQkJLyogUU5YIGhhcyBGSU9OUkVBRCBhbmQgc2VsZWN0KCkgKi8KLSNpZmRl ZiBDS19ORUVEX1NJRwotI3VuZGVmIENLX05FRURfU0lHCi0jZW5kaWYgLyogQ0tfTkVFRF9TSUcg Ki8KLSNlbmRpZiAvKiBRTlggKi8KLQotI2lmZGVmIENPSEVSRU5UCi0jaWZuZGVmIE5PVElNRVpP TkUKLSNkZWZpbmUgTk9USU1FWk9ORQotI2VuZGlmIC8qIE5PVElNRVpPTkUgKi8KLSNlbmRpZiAv KiBDT0hFUkVOVCAqLwotCi0jaWZkZWYgVU5JWAotI2lmbmRlZiBIQVZFX1RaCQkJCS8qIENhbiB3 ZSB1c2Ugc3RydWN0IHRpbWV6b25lPyAqLwotI2lmbmRlZiBOT1RJTUVaT05FCi0jaWZkZWYgUFRY Ci0jZGVmaW5lIE5PVElNRVpPTkUKLSNlbHNlCi0jaWZuZGVmIFNFTEVDVAotI2lmZGVmIENPSEVS RU5UCi0jZGVmaW5lIE5PVElNRVpPTkUKLSNlbHNlCi0jaWZkZWYgQkVMTFYxMAotI2RlZmluZSBO T1RJTUVaT05FCi0jZW5kaWYgLyogQkVMTFYxMCAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0j ZW5kaWYgLyogU0VMRUNUICovCi0jZW5kaWYgLyogUFRYICovCi0jZW5kaWYgLyogTk9USU1FWk9O RSAqLwotI2VuZGlmIC8qIEhBVkVfVFogKi8KLSNpZm5kZWYgTk9USU1FVkFMCQkJLyogQ2FuIHdl IHVzZSBzdHJ1Y3QgdGltZXZhbD8gKi8KLSNpZm5kZWYgSEFWRV9UVgotI2RlZmluZSBIQVZFX1RW Ci0jZW5kaWYgLyogSEFWRV9UViAqLwotI2VuZGlmIC8qIE5PVElNRVZBTCAqLwotI2lmbmRlZiBO T1RJTUVaT05FCi0jaWZuZGVmIEhBVkVfVFoKLSNkZWZpbmUgSEFWRV9UWgotI2VuZGlmIC8qIEhB VkVfVFogKi8KLSNlbmRpZiAvKiBOT1RJTUVaT05FICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0j aWZkZWYgU0NPMzIKLSNpZmRlZiBIQVZFX1RWCi0jdW5kZWYgSEFWRV9UVgotI2VuZGlmIC8qIEhB VkVfVFYgKi8KLSNpZmRlZiBIQVZFX1RaCi0jdW5kZWYgSEFWRV9UWgotI2VuZGlmIC8qIEhBVkVf VFogKi8KLSNpZm5kZWYgTk9USU1FVkFMCi0jZGVmaW5lIE5PVElNRVZBTAotI2VuZGlmIC8qIE5P VElNRVZBTCAqLwotI2lmbmRlZiBOT1RJTUVaT05FCi0jZGVmaW5lIE5PVElNRVpPTkUKLSNlbmRp ZiAvKiBOT1RJTUVaT05FICovCi0jZW5kaWYgLyogU0NPMzIgKi8KLQotI2lmZGVmIEFUVDczMDAK LSNpZmRlZiBIQVZFX1RWCi0jdW5kZWYgSEFWRV9UVgotI2VuZGlmIC8qIEhBVkVfVFYgKi8KLSNp ZmRlZiBIQVZFX1RaCi0jdW5kZWYgSEFWRV9UWgotI2VuZGlmIC8qIEhBVkVfVFogKi8KLSNpZm5k ZWYgTk9USU1FVkFMCi0jZGVmaW5lIE5PVElNRVZBTAotI2VuZGlmIC8qIE5PVElNRVZBTCAqLwot I2lmbmRlZiBOT1RJTUVaT05FCi0jZGVmaW5lIE5PVElNRVpPTkUKLSNlbmRpZiAvKiBOT1RJTUVa T05FICovCi0jZW5kaWYgLyogQVRUNzMwMCAqLwotCi0vKgotICBBdXRvbWF0aWMgcGFyaXR5IGRl dGVjdGlvbi4KLSAgVGhpcyBhY3R1YWxseSBpbXBsaWVzIGEgbG90IG1vcmUgbm93OiBsZW5ndGgt ZHJpdmVuIHBhY2tldCByZWFkaW5nLAotICAiRG9vbXNkYXkgS2VybWl0IiBJQk0gTWFpbmZyYW1l IGZpbGUgdHJhbnNmZXIgdGhyb3VnaCAzMjcwIGRhdGEgc3RyZWFtcywgZXRjLgotKi8KLSNpZmRl ZiBVTklYCQkJCS8qIEZvciBVbml4ICovCi0jaWZuZGVmIE5PUEFSU0VOCi0jZGVmaW5lIFBBUlNF TlNFCi0jZW5kaWYgLyogTk9QQVJTRU4gKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZmRlZiBW TVMJCQkJLyogLi4uIGFuZCBWTVMgKi8KLSNpZm5kZWYgTk9QQVJTRU4KLSNkZWZpbmUgUEFSU0VO U0UKLSNlbmRpZiAvKiBOT1BBUlNFTiAqLwotI2lmZGVmIF9fR05VQ19fCi0jZGVmaW5lIFZNU0dD QwotI2VuZGlmIC8qIF9fR05VQ19fICovCi0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBNQUMJ CQkJLyogYW5kIE1hY2ludG9zaCAqLwotI2lmbmRlZiBOT1BBUlNFTgotI2RlZmluZSBQQVJTRU5T RQotI2VuZGlmIC8qIE5PUEFSU0VOICovCi0jZW5kaWYgLyogTUFDICovCi0KLSNpZmRlZiBTVFJB VFVTCQkJCS8qIGFuZCBTdHJhdHVzIFZPUyAqLwotI2lmbmRlZiBOT1BBUlNFTgotI2RlZmluZSBQ QVJTRU5TRQotI2VuZGlmIC8qIE5PUEFSU0VOICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotCi0j aWZkZWYgT1MyCQkJCS8qIGFuZCBPUy8yLCBmaW5hbGx5ICovCi0jaWZuZGVmIE5PUEFSU0VOCi0j ZGVmaW5lIFBBUlNFTlNFCi0jZW5kaWYgLyogTk9QQVJTRU4gKi8KLSNlbmRpZiAvKiBPUzIgKi8K LQotI2lmbmRlZiBOT0RZTkFNSUMJCQkvKiBEWU5BTUlDIGlzIGRlZmF1bHQgZm9yIFVOSVggKi8K LSNpZm5kZWYgRFlOQU1JQwkJCQkvKiBhcyBvZiBDLUtlcm1pdCA3LjAgKi8KLSNpZmRlZiBVTklY Ci0jZGVmaW5lIERZTkFNSUMKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogRFlOQU1JQyAq LwotI2VuZGlmIC8qIE5PRFlOQU1JQyAqLwotCi0jaWZkZWYgRFlOQU1JQwkJCQkvKiBJZiBEWU5B TUlDIGlzIGRlZmluZWQgKi8KLSNkZWZpbmUgRENNREJVRgkJCQkvKiB0aGVuIGFsc28gZGVmaW5l IHRoaXMuICovCi0jZW5kaWYgLyogRFlOQU1JQyAqLwotCi0jaWZuZGVmIENLX0xCUksJCQkJLyog Q2FuIHNlbmQgTG9uZyBCUkVBSyAqLwotCi0jaWZkZWYgVU5JWAkJCQkvKiAoZXZlcnlib2R5IGJ1 dCBPUy05KSAqLwotI2RlZmluZSBDS19MQlJLCi0jZW5kaWYgLyogVU5JWCAqLwotI2lmZGVmIFZN UwotI2RlZmluZSBDS19MQlJLCi0jZW5kaWYgLyogVk1TICovCi0jaWZkZWYgZGF0YWdlbmVyYWwK LSNkZWZpbmUgQ0tfTEJSSwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jaWZkZWYgR0VNRE9T Ci0jZGVmaW5lIENLX0xCUksKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSNpZmRlZiBPUzIKLSNkZWZp bmUgQ0tfTEJSSwotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIEFNSUdBCi0jZGVmaW5lIENLX0xC UksKLSNlbmRpZiAvKiBBTUlHQSAqLwotI2lmZGVmIFNUUkFUVVMKLSNkZWZpbmUgQ0tfTEJSSwot I2VuZGlmIC8qIFNUUkFUVVMgKi8KLQotI2VuZGlmIC8qIENLX0xCUksgKi8KLQotLyogQ2Fycmll ciB0cmVhdG1lbnQgKi8KLS8qIFRoZXNlIGFyZSBkZWZpbmVkIGhlcmUgYmVjYXVzZSB0aGV5IGFy ZSBzaGFyZWQgYnkgdGhlIHN5c3RlbSBkZXBlbmRlbnQgKi8KLS8qIGFuZCB0aGUgc3lzdGVtIGlu ZGVwZW5kZW50IG1vZHVsZXMuICovCi0KLSNkZWZpbmUgIENBUl9PRkYgMAkvKiBPZmY6IGlnbm9y ZSBjYXJyaWVyIGFsd2F5cy4gKi8KLSNkZWZpbmUgIENBUl9PTiAgMSAgICAgIC8qIE9uOiBoZWVk IGNhcnJpZXIgYWx3YXlzLCBleGNlcHQgZHVyaW5nIERJQUwuICovCi0jZGVmaW5lICBDQVJfQVVU IDIgICAgICAvKiBBdXRvOiBoZWVkIGNhcnJpZXIsIGJ1dCBvbmx5IGlmIGxpbmUgaXMgZGVjbGFy ZWQgKi8KLQkJCS8qIHRvIGJlIGEgbW9kZW0gbGluZSwgYW5kIG9ubHkgZHVyaW5nIENPTk5FQ1Qu ICovCi0KLS8qIEFuZCBtb3JlIGdlbmVyaWNhbGx5IChmb3IgdXNlIHdpdGggYW55IE9OL09GRi9B VVRPIGZlYXR1cmUpICovCi0jZGVmaW5lICBDS19PRkYgIDAKLSNkZWZpbmUgIENLX09OICAgMQot I2RlZmluZSAgQ0tfQVVUTyAyCi0KLSNpZm5kZWYgTk9MT0NBTAotLyoKLSAgU2VyaWFsIGludGVy ZmFjZSBzcGVlZHMgYXZhaWxhYmxlLgotCi0gIEFzIG9mIEMtS2VybWl0IDYuMSB0aGVyZSBpcyBh IG5ldyBtZXRob2QgdG8gZ2V0IHRoZSBzdXBwb3J0ZWQKLSAgc3BlZWRzLCB3aGljaCBvYnZpYXRl cyB0aGUgbmVlZCBmb3IgYWxsIHRoZSBjcmF6aW5lc3MgYmVsb3cuICBBdCBydW50aW1lLAotICBq dXN0IGNhbGwgdGhlIG5ldyB0dHNwZGxpc3QoKSByb3V0aW5lIHRvIGdldCBhIGxpc3Qgb2Ygc3Vw cG9ydGVkIHNwZWVkcy4KLSAgVGhlbiB0aGUgdXNlciBpbnRlcmZhY2UgbW9kdWxlIGNhbiBidWls ZCBhIGtleXdvcmQgdGFibGUgb3IgbWVudSBmcm9tIGl0LgotKi8KLSNpZm5kZWYgVFRTUERMSVNU Ci0jaWZkZWYgVU5JWAkJCQkvKiBGb3Igbm93LCBvbmx5IGZvciBVTklYICovCi0jaWZuZGVmIE9M SU5VWEhJU1BFRUQJCQkvKiBCdXQgbm90IHN5c3RlbXMgd2l0aCBoYWNrcyBmb3IgKi8KLSNpZm5k ZWYgTUlOSVgJCQkJLyogaGlnaCBzcGVlZHMsIGxpa2UgMTEwID0gMTE1MjAwICovCi0jZGVmaW5l IFRUU1BETElTVAotI2VuZGlmIC8qIE1JTklYICovCi0jZW5kaWYgLyogT0xJTlVYSElTUEVFRCAq LwotI2Vsc2UKLSNpZmRlZiBWTVMKLSNkZWZpbmUgVFRTUERMSVNUCQkJLyogVk1TIGdldHMgaXQg dG9vICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIFRU U1BETElTVCAqLwotCi0jaWZuZGVmIE5PRElBTAkJCQkvKiBIYW5ndXAgYnkgbW9kZW0gY29tbWFu ZCAqLwotI2lmbmRlZiBOT01ETUhVUAotI2lmbmRlZiBNRE1IVVAKLSNkZWZpbmUgTURNSFVQCi0j ZW5kaWYgLyogTURNSFVQICovCi0jZW5kaWYgLyogTk9NRE1IVVAgKi8KLSNlbmRpZiAvKiBOT0RJ QUwgKi8KLQotI2lmZGVmIE5PU1BMCi0jaWZuZGVmIE5PTE9HRElBTAkJCS8qIENvbm5lY3Rpb24g bG9nIG5lZWRzIG1qZCgpLCBldGMuICovCi0jZGVmaW5lIE5PTE9HRElBTAotI2VuZGlmIC8qIE5P TE9HRElBTCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBwZHAxMQotI2RlZmluZSBO T0xPR0RJQUwKLSNlbmRpZiAvKiBwZHAxMSAqLwotCi0jaWZuZGVmIE5PTE9HRElBTAkJCS8qIENv bm5lY3Rpb24gbG9nICovCi0jaWZuZGVmIENYTE9HRklMRQotI2RlZmluZSBDWExPR0ZJTEUgIkNY LkxPRyIJCS8qIERlZmF1bHQgY29ubmVjdGlvbiBsb2cgZmlsZSBuYW1lICovCi0jZW5kaWYgLyog Q1hMT0dGSUxFICovCi0jaWZuZGVmIENLTE9HRElBTAotI2lmbmRlZiBDS19TTUFMTAotI2RlZmlu ZSBDS0xPR0RJQUwKLSNkZWZpbmUgQ1hMT0dCVUZMIDEwMjQJCQkvKiBDb25uZWN0aW9uIGxvZyBy ZWNvcmQgYnVmZmVyIHNpemUgKi8KLSNlbmRpZiAvKiBDS19TTUFMTCAqLwotI2VuZGlmIC8qIE5P TE9HRElBTCAqLwotI2VuZGlmIC8qIENLTE9HRElBTCAqLwotCi0jZW5kaWYgLyogTk9MT0NBTCAq LwotCi0jaWZkZWYgTk9UVFNQRExJU1QJCQkvKiBFeGNlcHQgaWYgTk9UVFNQRExJU1QgaXMgZGVm aW5lZCAqLwotI2lmZGVmIFRUU1BETElTVAotI3VuZGVmIFRUU1BETElTVAotI2VuZGlmIC8qIFRU U1BETElTVCAqLwotI2VuZGlmIC8qIE5PVFRTUERMSVNUICovCi0KLSNpZmRlZiBUVFNQRExJU1QK LQotX1BST1RPVFlQKCBsb25nICogdHRzcGRsaXN0LCAodm9pZCkgKTsKLQotI2Vsc2UgLyogVFRT UERMSVNUIG5vdCBkZWZpbmVkICovCi0vKgotICBXZSBtdXN0IHVzZSBhIGxvbmcgYW5kIGNvbnZv bHV0ZWQgc2VyaWVzIG9mICNpZmRlZnMgdGhhdCBoYXZlIHRvIGJlIGtlcHQgaW4KLSAgc3luYyB3 aXRoIHRoZSBjb2RlIGluIHRoZSBjaz90aW8uYyBtb2R1bGUuCi0KLSAgV2UgYXNzdW1lIHRoYXQg ZXZlcnlib2R5IHN1cHBvcnRzOiAwLCAxMTAsIDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCBh bmQKLSAgOTYwMCBicHMuICBTeW1ib2xzIGZvciBvdGhlciBzcGVlZHMgYXJlIGRlZmluZWQgaGVy ZS4gIFlvdSBjYW4gYWxzbyBhZGQKLSAgZGVmaW5pdGlvbnMgb24gdGhlIENDIGNvbW1hbmQgbGlu ZXMuICBUaGVzZSBkZWZpbml0aW9ucyBhZmZlY3QgdGhlIFNFVCBTUEVFRAotICBrZXl3b3JkIHRh YmxlLCBhbmQgYXJlIG5vdCBuZWNlc3NhcmlseSB1c2FibGUgaW4gdGhlIHN5c3RlbS1kZXBlbmRl bnQKLSAgc3BlZWQtc2V0dGluZyBjb2RlIGluIHRoZSBjaz90aW8uYyBtb2R1bGVzLCB3aGljaCBk ZXBlbmRzIG9uIHN5c3RlbS1zcGVjaWZpYwotICBzeW1ib2xzIGxpa2UgKGluIFVOSVgpIEIxOTIw MC4gIEluIG90aGVyIHdvcmRzLCBqdXN0IGRlZmluaW5nIGl0IGRvZXNuJ3QKLSAgbWVhbiBpdCds bCB3b3JrIC0tIHlvdSBhbHNvIGhhdmUgdG8gc3VwcGx5IHRoZSBzdXBwb3J0aW5nIGNvZGUgaW4g dHRzc3BkKCkKLSAgYW5kIHR0Z3NwZCgpIGluIGNrP3Rpby5jLgotCi0gIFRoZSBzeW1ib2xzIGhh dmUgdGhlIGZvcm0gQlBTX3h4eHgsIHdoZXJlIHh4eHggaXMgdGhlIHNwZWVkIGluIGJpdHMgcGVy Ci0gIHNlY29uZCwgb3IgKGZvciBicHMgdmFsdWVzIGxhcmdlciB0aGFuIDk5OTkpIHRob3VzYW5k cyBvZiBicHMgZm9sbG93ZWQgYnkgSy4KLSAgVGhlIHRvdGFsIHN5bWJvbCBsZW5ndGggc2hvdWxk IGJlIDggY2hhcmFjdGVycyBvciBsZXNzLiAgU29tZSB2YWx1ZXMgYXJlCi0gIGVuYWJsZWQgYXV0 b21hdGljYWxseSBiZWxvdy4gIFlvdSBjYW4gZGlzYWJsZSBhIHBhcnRpY3VsYXIgdmFsdWUgYnkg ZGVmaW5pbmcKLSAgTk9CX3h4eHggb24gdGhlIENDIGNvbW1hbmQgbGluZS4KLQotKi8KLQotI2lm bmRlZiBOT0JfNTAKLSNkZWZpbmUgQlBTXzUwCQkJCS8qIDUwIGJwcyAqLwotI2VuZGlmCi0KLSNp Zm5kZWYgTk9CXzc1Ci0jZGVmaW5lIEJQU183NQkJCQkvKiA3NSBicHMgKi8KLSNlbmRpZgotCi0j aWZuZGVmIE5PQjc1MTIKLSNpZmRlZiBBTllCU0QKLSNkZWZpbmUgQlBTXzc1MTIJCQkvKiA3NS8x MjAwIFNwbGl0IFNwZWVkICovCi0jZW5kaWYgLyogQU5ZQlNEICovCi0jZW5kaWYgLyogTk9CNzUx MiAqLwotCi0jaWZuZGVmIE5PQjEzNAotI2lmZGVmIFNPTEFSSVMyNQotI2RlZmluZSBCUFNfMTM0 Ci0jZWxzZQotI3VuZGVmIEJQU18xMzQJCQkJLyogMTM0LjUgYnBzIChJQk0gMjc0MSkgKi8KLSNl bmRpZiAvKiBCUFNfMTM0ICovCi0jZW5kaWYgLyogTk9CMTM0ICovCi0KLSNpZm5kZWYgTk9CXzE1 MAotI2RlZmluZSBCUFNfMTUwCQkJCS8qIDE1MCBicHMgKi8KLSNlbmRpZgotCi0jaWZuZGVmIE5P Ql8yMDAKLSNkZWZpbmUgQlBTXzIwMAkJCQkvKiAyMDAgYnBzICovCi0jZW5kaWYKLQotI2lmbmRl ZiBOT0JfMTgwMAotI2lmZGVmIE1BQwotI2RlZmluZSBCUFNfMTgwMAkJCS8qIDE4MDAgYnBzICov Ci0jZWxzZQotI2lmZGVmIFNPTEFSSVMyNQotI2RlZmluZSBCUFNfMTgwMAotI2VuZGlmCi0jZW5k aWYKLSNlbmRpZgotCi0jaWZuZGVmIE5PQl8zNjAwCi0jaWZuZGVmIFNPTEFSSVMyNQotI2RlZmlu ZSBCUFNfMzYwMAkJCS8qIDM2MDAgYnBzICovCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIE5P Ql83MjAwCi0jaWZuZGVmIFNPTEFSSVMyNQotI2RlZmluZSBCUFNfNzIwMAkJCS8qIDcyMDAgYnBz ICovCi0jZW5kaWYgLyogU09MQVJJUzI1ICovCi0jZW5kaWYKLQotI2lmbmRlZiBOT0JfMTRLCi0j aWZkZWYgQlNENDQKLSNkZWZpbmUgQlBTXzE0SwkJCQkvKiAxNDQwMCBicHMgKi8KLSNlbHNlCi0j aWZkZWYgT1MyCi0jZGVmaW5lIEJQU18xNEsKLSNlbHNlCi0jaWZkZWYgTkVYVAotI2RlZmluZSBC UFNfMTRLCi0jZWxzZQotI2lmZGVmIE1BQwotI2RlZmluZSBCUFNfMTRLCi0jZWxzZQotI2lmZGVm IEFNSUdBCi0jZGVmaW5lIEJQU18xNEsKLSNlbmRpZiAvKiBBTUlHQSAqLwotI2VuZGlmIC8qIE1B QyAqLwotI2VuZGlmIC8qIE5FWFQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBCU0Q0 NCAqLwotI2VuZGlmIC8qIE5PQl8xNEsgKi8KLQotI2lmbmRlZiBOT0JfMTlLCi0jZGVmaW5lIEJQ U18xOUsJCQkJLyogMTkyMDAgYnBzICovCi0jZW5kaWYKLQotI2lmbmRlZiBOT0JfMjhLCi0jaWZk ZWYgQlNENDQKLSNkZWZpbmUgQlBTXzI4SwotI2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUgQlBT XzI4SwotI2Vsc2UKLSNpZmRlZiBORVhUCi0jZGVmaW5lIEJQU18yOEsJCQkJLyogMjg4MDAgYnBz ICovCi0jZWxzZQotI2lmZGVmIE1BQwotI2RlZmluZSBCUFNfMjhLCQkJCS8qIDI4ODAwIGJwcyAq LwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIE5FWFQgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIE5PQl8yOEsgKi8KLQotI2lmbmRlZiBOT0Jf MzhLCi0jZGVmaW5lIEJQU18zOEsJCQkJLyogMzg0MDAgYnBzICovCi0jZW5kaWYKLQotI2lmbmRl ZiBOT0JfNTdLCi0jaWZkZWYgUGxhbjkKLSNkZWZpbmUgQlBTXzU3SwotI2Vsc2UKLSNpZmRlZiBT T0xBUklTMjUKLSNkZWZpbmUgQlBTXzU3SwotI2Vsc2UKLSNpZmRlZiBWTVMKLSNkZWZpbmUgQlBT XzU3SwkJCQkvKiA1NzYwMCBicHMgKi8KLSNlbHNlCi0jaWZkZWYgT1MyCi0jZGVmaW5lIEJQU181 N0sKLSNlbHNlCi0jaWZkZWYgX19saW51eF9fCi0jZGVmaW5lIEJQU181N0sKLSNlbHNlCi0jaWZk ZWYgSFBVWAotI2RlZmluZSBCUFNfNTdLCi0jZWxzZQotI2lmZGVmIE5FWFQKLSNkZWZpbmUgQlBT XzU3SwotI2Vsc2UKLSNpZmRlZiBfXzM4NkJTRF9fCi0jZGVmaW5lIEJQU181N0sKLSNlbHNlCi0j aWZkZWYgX19GcmVlQlNEX18KLSNkZWZpbmUgQlBTXzU3SwotI2Vsc2UKLSNpZmRlZiBfX05ldEJT RF9fCi0jZGVmaW5lIEJQU181N0sKLSNlbHNlCi0jaWZkZWYgTUFDCi0jZGVmaW5lIEJQU181N0sK LSNlbHNlCi0jaWZkZWYgUU5YCi0jZGVmaW5lIEJQU181N0sKLSNlbHNlCi0jaWZkZWYgQkVPU09S QkVCT1gKLSNkZWZpbmUgQlBTXzU3SwotI2Vsc2UKLSNpZmRlZiBJUklYNjIKLSNkZWZpbmUgQlBT XzU3SwotI2Vsc2UKLSNpZmRlZiBTQ09fT1NSNTA0Ci0jZGVmaW5lIEJQU181N0sKLSNlbHNlCi0j aWZkZWYgQlNESTIKLSNkZWZpbmUgQlBTXzU3SwotI2VuZGlmIC8qIEJTREkyICovCi0jZW5kaWYg LyogU0NPX09TUjUwNCAqLwotI2VuZGlmIC8qIElSSVg2MiAqLwotI2VuZGlmIC8qIEJFT1NPUkJF Qk9YICovCi0jZW5kaWYgLyogUU5YICovCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogX19O ZXRCU0RfXyAqLwotI2VuZGlmIC8qIF9fRnJlZUJTRF9fICovCi0jZW5kaWYgLyogX18zODZCU0Rf XyAqLwotI2VuZGlmIC8qIE5FWFQgKi8KLSNlbmRpZiAvKiBIUFVYICovCi0jZW5kaWYgLyogX19s aW51eF9fICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyog U09MQVJJUzI1ICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLSNlbmRpZiAvKiBOT0JfNTdLICovCi0K LSNpZm5kZWYgTk9CXzc2SwotI2lmZGVmIEJTREkyCi0jZGVmaW5lIEJQU183NksKLSNlbmRpZiAv KiBCU0RJMiAqLwotI2lmZGVmIFBsYW45Ci0jZGVmaW5lIEJQU183NksKLSNlbmRpZiAvKiBQbGFu OSAqLwotI2lmZGVmIFNPTEFSSVMyNQotI2RlZmluZSBCUFNfNzZLCi0jZW5kaWYgLyogU09MQVJJ UzI1ICovCi0jaWZkZWYgVk1TCi0jZGVmaW5lIEJQU183NksJCQkJLyogNzY4MDAgYnBzICovCi0j ZW5kaWYgLyogVk1TICovCi0jaWZkZWYgT1MyCi0jaWZkZWYgX18zMkJJVF9fCi0jZGVmaW5lIEJQ U183NksKLSNlbmRpZiAvKiBfXzMyQklUX18gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBR TlgKLSNkZWZpbmUgQlBTXzc2SwotI2VuZGlmIC8qIFFOWCAqLwotI2lmZGVmIElSSVg2MgotI2Rl ZmluZSBCUFNfNzZLCi0jZW5kaWYgLyogSVJJWDYyICovCi0jaWZkZWYgU0NPX09TUjUwNAotI2Rl ZmluZSBCUFNfNzZLCi0jZW5kaWYgLyogU0NPX09TUjUwNCAqLwotI2VuZGlmIC8qIE5PQl83Nksg Ki8KLQotI2lmbmRlZiBOT0JfMTE1SwotI2lmZGVmIEJTREkyCi0jZGVmaW5lIEJQU18xMTVLCi0j ZW5kaWYgLyogQlNESTIgKi8KLSNpZmRlZiBQbGFuOQotI2RlZmluZSBCUFNfMTE1SwotI2VuZGlm IC8qIFBsYW45ICovCi0jaWZkZWYgU09MQVJJUzI1Ci0jZGVmaW5lIEJQU18xMTVLCi0jZW5kaWYg LyogU09MQVJJUzI1ICovCi0jaWZkZWYgVk1TCi0jZGVmaW5lIEJQU18xMTVLCQkJLyogMTE1MjAw IGJwcyAqLwotI2Vsc2UKLSNpZmRlZiBRTlgKLSNkZWZpbmUgQlBTXzExNUsKLSNlbHNlCi0jaWZk ZWYgSFBVWAotI2RlZmluZSBCUFNfMTE1SwotI2Vsc2UKLSNpZmRlZiBfX2xpbnV4X18KLSNkZWZp bmUgQlBTXzExNUsKLSNlbHNlCi0jaWZkZWYgX18zODZCU0RfXwotI2RlZmluZSBCUFNfMTE1Swot I2Vsc2UKLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2RlZmluZSBCUFNfMTE1SwotI2Vsc2UKLSNpZmRl ZiBfX05ldEJTRF9fCi0jZGVmaW5lIEJQU18xMTVLCi0jZWxzZQotI2lmZGVmIE9TMgotI2lmZGVm IF9fMzJCSVRfXwotI2RlZmluZSBCUFNfMTE1SwotI2VuZGlmIC8qIF9fMzJCSVRfXyAqLwotI2Vs c2UKLSNpZmRlZiBCRU9TT1JCRUJPWAotI2RlZmluZSBCUFNfMTE1SwotI2Vsc2UKLSNpZmRlZiBJ UklYNjIKLSNkZWZpbmUgQlBTXzExNUsKLSNlbHNlCi0jaWZkZWYgU0NPX09TUjUwNAotI2RlZmlu ZSBCUFNfMTE1SwotI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8KLSNlbmRpZiAvKiBJUklYNjIgKi8K LSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIF9f TmV0QlNEX18gKi8KLSNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLwotI2VuZGlmIC8qIF9fMzg2QlNE X18gKi8KLSNlbmRpZiAvKiBfX2xpbnV4X18gKi8KLSNlbmRpZiAvKiBIUFVYICovCi0jZW5kaWYg LyogUU5YICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogTk9CXzExNUsgKi8KLQotI2lm bmRlZiBOT0JfMjMwSwkJCS8qIDIzMDQwMCBicHMgKi8KLSNpZmRlZiBCU0RJMgotI2RlZmluZSBC UFNfMjMwSwotI2Vsc2UKLSNpZmRlZiBTQ09fT1NSNTA0Ci0jZGVmaW5lIEJQU18yMzBLCi0jZWxz ZQotI2lmZGVmIF9fbGludXhfXwotI2RlZmluZSBCUFNfMjMwSwotI2Vsc2UKLSNpZmRlZiBTT0xB UklTMjUKLSNkZWZpbmUgQlBTXzIzMEsKLSNlbHNlCi0jaWZkZWYgT1MyCi0jaWZkZWYgX18zMkJJ VF9fCi0jZGVmaW5lIEJQU18yMzBLCi0jZW5kaWYgLyogX18zMkJJVF9fICovCi0jZWxzZQotI3Vu ZGVmIEJQU18yMzBLCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogU09MQVJJUzI1ICovCi0j ZW5kaWYgLyogX19saW51eF9fICovCi0jZW5kaWYgLyogU0NPX09TUjUwNCAqLwotI2VuZGlmIC8q IEJTREkyICovCi0jZW5kaWYgLyogTk9CXzIzMEsgKi8KLQotI2lmbmRlZiBOT0JfNDYwSwkJCS8q IDQ2MDgwMCBicHMgKi8KLSNpZmRlZiBTQ09fT1NSNTA0Ci0jZGVmaW5lIEJQU180NjBLCi0jZWxz ZQotI2lmZGVmIF9fbGludXhfXwotI2RlZmluZSBCUFNfNDYwSwotI2Vsc2UKLSNpZmRlZiBPUzIK LSNpZmRlZiBfXzMyQklUX18KLSNkZWZpbmUgQlBTXzQ2MEsKLSNlbmRpZiAvKiBfXzMyQklUX18g Ki8KLSNlbHNlCi0jdW5kZWYgQlBTXzQ2MEsKLSNlbmRpZiAvKiBfX2xpbnV4X18gKi8KLSNlbmRp ZiAvKiBTQ09fT1NSNTA0ICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9CXzQ2MEsg Ki8KLQotI2lmbmRlZiBOT0JfOTIxSwkJCS8qIDkyMTYwMCBicHMgKi8KLSNpZmRlZiBTQ09fT1NS NTA0Ci0jZGVmaW5lIEJQU185MjFLCi0jZW5kaWYgLyogU0NPX09TUjUwNCAqLwotI2VuZGlmIC8q IE5PQl85MjFLICovCi0KLSNpZmRlZiBCUFNfOTIxSwkJCQkvKiBNYXhpbXVtIHNwZWVkIGRlZmlu ZWQgKi8KLSNkZWZpbmUgTUFYX1NQRCA5MjE2MDBMCi0jZWxzZQotI2lmZGVmIEJQU180NjBLCi0j ZGVmaW5lIE1BWF9TUEQgNDYwODAwTAotI2Vsc2UKLSNpZmRlZiBCUFNfMjMwSwotI2RlZmluZSBN QVhfU1BEIDIzMDQwMEwKLSNlbHNlCi0jaWZkZWYgQlBTXzExNUsKLSNkZWZpbmUgTUFYX1NQRCAx MTUyMDBMCi0jZWxzZQotI2lmZGVmIEJQU183NksKLSNkZWZpbmUgTUFYX1NQRCA3NjgwMEwKLSNl bHNlCi0jaWZkZWYgQlBTXzU3SwotI2RlZmluZSBNQVhfU1BEIDU3NjAwTAotI2Vsc2UKLSNpZmRl ZiBCUFNfMzhLCi0jZGVmaW5lIE1BWF9TUEQgMzg0MDBMCi0jZWxzZQotI2lmZGVmIEJQU18yOEsK LSNkZWZpbmUgTUFYX1NQRCAyODgwMEwKLSNlbHNlCi0jaWZkZWYgQlBTXzE5SwotI2RlZmluZSBN QVhfU1BEIDE5MjAwTAotI2Vsc2UKLSNpZmRlZiBCUFNfMTRLCi0jZGVmaW5lIE1BWF9TUEQgMTQ0 MDBMCi0jZWxzZQotI2RlZmluZSBNQVhfU1BEIDk2MDBMCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlm Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYK LSNlbmRpZiAvKiBUVFNQRExJU1QgKi8KLQotI2lmbmRlZiBDT05HU1BECQkJCS8qIFN5c3RlbXMg dGhhdCBjYW4gY2FsbCBjb25nc3BkKCkgKi8KLSNpZmRlZiBVTklYCi0jZGVmaW5lIENPTkdTUEQK LSNlbmRpZiAvKiBVTklYICovCi0jaWZkZWYgVk1TCi0jZGVmaW5lIENPTkdTUEQKLSNlbmRpZiAv KiBWTVMgKi8KLSNpZmRlZiBTVFJBVFVTCi0jZGVmaW5lIENPTkdTUEQKLSNlbmRpZiAvKiBTVFJB VFVTICovCi0jZW5kaWYgLyogQ09OR1NQRCAqLwotCi0vKiBUeXBlcyBvZiBmbG93IGNvbnRyb2wg YXZhaWxhYmxlICovCi0KLSNkZWZpbmUgQ0tfWE9OWE9GRgkJCS8qIEV2ZXJ5Ym9keSBjYW4gZG8g dGhpcywgcmlnaHQ/ICovCi0KLSNpZmRlZiBBTUlHQQkJCQkvKiBDb21tb2RvcmUgQW1pZ2EgKi8K LSNkZWZpbmUgQ0tfUlRTQ1RTCQkJLyogaGFzIFJUUy9DVFMgKi8KLSNlbmRpZiAvKiBBTUlHQSAq LwotCi0jaWZkZWYgU1VONFM1CQkJCS8qIFN1bk9TIGluIFN5c3RlbSBWIGVudmlyb25tZW50ICov Ci0jZGVmaW5lIENLX1JUU0NUUwotI2Vsc2UJCQkJCS8qIFN1bk9TIDQuMC80LjEgaW4gQlNEIGVu dmlyb25tZW50ICovCi0jaWZkZWYgU1VOT1M0CQkJCS8qIFN1bk9TIDQuMCtsYXRlciBzdXBwb3J0 cyBSVFMvQ1RTICovCi0jaWZkZWYgU1VOT1M0MQkJCQkvKiBFYXN5IGluIDQuMSBhbmQgbGF0ZXIg Ki8KLSNkZWZpbmUgQ0tfUlRTQ1RTCi0jZWxzZQkJCQkJLyogSGFyZGVyIGluIDQuMCAqLwotI2lm bmRlZiBfX0dOVUNfXwkJCS8qIChzZWUgdHRoZmxvdygpIGluIGNrdXRpby5jKSAqLwotI2lmbmRl ZiBHTlVDCi0jZGVmaW5lIENLX1JUU0NUUwkJCS8qIE9ubHkgaWYgbm90IHVzaW5nIEdOVSBnY2Mg Ki8KLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwotI2VuZGlmIC8qIEdOVUMgKi8KLSNlbmRpZiAvKiBT VU5PUzQxICovCi0jZW5kaWYgLyogU1VOT1M0ICovCi0jZW5kaWYgLyogU1VONFM1ICovCi0KLSNp ZmRlZiBCU0Q0NAkJCQkvKiBBbmQgaW4gNC40IEJTRCwgaW5jbHVkaW5nIEJTREkgKi8KLSNkZWZp bmUgQ0tfUlRTQ1RTCi0jZW5kaWYgLyogQlNENDQgKi8KLQotI2lmZGVmIFRFUk1JT1gJCQkJLyog U3lzIFYgUjQgPHRlcm1pb3guaD4gKi8KLSNpZm5kZWYgQ0tfUlRTQ1RTCi0jZGVmaW5lIENLX1JU U0NUUwotI2VuZGlmIC8qIENLX1JUU0NUUyAqLwotI2lmbmRlZiBDS19EVFJDRAotI2RlZmluZSBD S19EVFJDRAotI2VuZGlmIC8qIENLX0RUUkNEICovCi0jZWxzZQotI2lmZGVmIFNURVJNSU9YCQkJ CS8qIFN5cyBWIFI0IDxzeXMvdGVybWlveC5oPiAqLwotI2lmbmRlZiBDS19SVFNDVFMKLSNkZWZp bmUgQ0tfUlRTQ1RTCi0jZW5kaWYgLyogQ0tfUlRTQ1RTICovCi0jaWZuZGVmIENLX0RUUkNECi0j ZGVmaW5lIENLX0RUUkNECi0jZW5kaWYgLyogQ0tfRFRSQ0QgKi8KLSNlbmRpZiAvKiBTVEVSTUlP WCAqLwotI2VuZGlmIC8qIFRFUk1JT1ggKi8KLQotI2lmZGVmIE9YT1MJCQkJLyogT2xpdmV0dGkg WC9PUyBSMiBzdHJ1Y3QgdGVybWlvcyAqLwotI2RlZmluZSBDS19SVFNDVFMJCQkvKiBEaXR0by4g Ki8KLSNkZWZpbmUgQ0tfRFRSQ0QKLSNlbmRpZiAvKiBPWE9TICovCi0KLSNpZmRlZiBBSVhSUwkJ CQkvKiBSUy82MDAwIHdpdGggQUlYIDMueCAqLwotI2RlZmluZSBDS19SVFNDVFMJCQkvKiBIYXMg aXRzIG93biBwZWN1bGlhciBtZXRob2QuLi4gKi8KLSNlbmRpZiAvKiBBSVhSUyAqLwotCi0jaWZk ZWYgX19saW51eF9fCQkJLyogTGludXggKi8KLSNkZWZpbmUgQ0tfUlRTQ1RTCi0jZW5kaWYgLyog X19saW51eF9fICovCi0vKgotICBIYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMgbm90IGRlZmluZWQg aW4gUE9TSVguMS4gIE5ldmVydGhlbGVzcywgYSBjZXJ0YWluCi0gIHN0eWxlIEFQSSBmb3IgaGFy ZHdhcmUgZmxvdyBjb250cm9sLCB1c2luZyB0Y3NldGF0dHIoKSBhbmQgdGhlIENSVFNDVFMKLSAg Yml0KHMpLCBzZWVtcyB0byBiZSBnYWluaW5nIGN1cnJlbmN5IG9uIFBPU0lYLWJhc2VkIFVOSVgg c3lzdGVtcy4gIFRoZQotICBmb2xsb3dpbmcgY29kZSBkZWZpbmVzIHRoZSBzeW1ib2wgUE9TSVhf Q1JUU0NUUyBmb3Igc3VjaCBzeXN0ZW1zLgotKi8KLSNpZmRlZiBDS19SVFNDVFMKLSNpZmRlZiBf X2JzZGlfXwkJCQkvKiBCU0RJLCBhLmsuYS4gQlNELzM4NiAqLwotI2RlZmluZSBQT1NJWF9DUlRT Q1RTCi0jZW5kaWYgLyogX19ic2RpX18gKi8KLSNpZmRlZiBfX2xpbnV4X18JCQkvKiBMaW51eCAq LwotI2RlZmluZSBQT1NJWF9DUlRTQ1RTCi0jZW5kaWYgLyogX19saW51eF9fICovCi0jaWZkZWYg X19OZXRCU0RfXwkJCS8qIE5ldEJTRCAqLwotI2RlZmluZSBQT1NJWF9DUlRTQ1RTCi0jZW5kaWYg LyogX19OZXRCU0RfXyAqLwotI2lmZGVmIF9fT3BlbkJTRF9fCi0jZGVmaW5lIFBPU0lYX0NSVFND VFMKLSNlbmRpZiAvKiBfX09wZW5CU0RfXyAqLwotI2lmZGVmIEJFT1NPUkJFQk9YCQkJLyogQmVC T1ggKi8KLSNkZWZpbmUgUE9TSVhfQ1JUU0NUUwotLyogQkVCT1ggZGVmaW5lcyBDUlRTRkwgYXMg KENUU0ZMT1cgJiBSVFNGTE9XKSAqLwotI2RlZmluZSBDUlRTQ1RTIENSVFNGTAotI2VuZGlmIC8q IEJFT1NPUkJFQk9YICovCi0jaWZkZWYgSVJJWDUyCQkJCS8qIElSSVggNS4yIGFuZCBsYXRlciAq LwotI2RlZmluZSBQT1NJWF9DUlRTQ1RTCi0jZGVmaW5lIENSVFNDVFMgQ05FV19SVFNDVFMJCS8q IFNlZSA8c3lzL3Rlcm1pb3MuaD4gKi8KLSNlbmRpZiAvKiBJUklYNTIgKi8KLSNlbmRpZiAvKiBD S19SVFNDVFMgKi8KLQotLyogSW1wbGVtZW50YXRpb25zIHRoYXQgaGF2ZSBpbXBsZW1lbnRlZCB0 aGUgdHRzZXRmbG93KCkgZnVuY3Rpb24uICovCi0KLSNpZm5kZWYgQ0tfVFRTRVRGTE9XCi0jaWZk ZWYgVU5JWAotI2RlZmluZSBDS19UVFNFVEZMT1cKLSNlbmRpZiAvKiBVTklYICovCi0jaWZkZWYg T1MyCi0jZGVmaW5lIENLX1RUU0VURkxPVwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENL X1RUU0VURkxPVyAqLwotCi0jaWZkZWYgQ0tfVFRTRVRGTE9XCi1fUFJPVE9UWVAoIGludCB0dHNl dGZsb3csIChpbnQpICk7Ci0jZW5kaWYgLyogQ0tfVFRTRVRGTE9XICovCi0vKgotIFN5c3RlbXMg d2hlcmUgd2UgY2FuIGV4cGFuZCB0aWxkZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGZpbGUgb3IgZGly ZWN0b3J5IG5hbWVzCi0qLwotI2lmZGVmIFBPU0lYCi0jaWZuZGVmIERUSUxERQotI2RlZmluZSBE VElMREUKLSNlbmRpZiAvKiBEVElMREUgKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwotI2lmZGVmIEJT RDQKLSNpZm5kZWYgRFRJTERFCi0jZGVmaW5lIERUSUxERQotI2VuZGlmIC8qIERUSUxERSAqLwot I2VuZGlmIC8qIEJTRDQgKi8KLSNpZmRlZiBBVFRTVgotI2lmbmRlZiBEVElMREUKLSNkZWZpbmUg RFRJTERFCi0jZW5kaWYgLyogRFRJTERFICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNpZmRlZiBP U0sKLSNpZm5kZWYgRFRJTERFCi0jZGVmaW5lIERUSUxERQotI2VuZGlmIC8qIERUSUxERSAqLwot I2VuZGlmIC8qIE9TSyAqLwotI2lmZGVmIEhQVVgJCQkJLyogSSBkb24ndCBrbm93IHdoeSB0aGlz IGlzICovCi0jaWZuZGVmIERUSUxERQkJCQkvKiBuZWNlc3NhcnksIHNpbmNlIC1ESFBVWCAqLwot I2RlZmluZSBEVElMREUJCQkJLyogYXV0b21hdGljYWxseSBkZWZpbmVzIEFUVFNWICovCi0jZW5k aWYgLyogRFRJTERFICovCQkJLyogKHNlZSBhYm92ZSkgLi4uICovCi0jZW5kaWYgLyogSFBVWCAq LwotCi0vKgotICBUaGlzIGlzIG1haW5seSBmb3IgdGhlIGJlbmVmaXQgb2YgY2t1ZmlvLmMgKFVO SVggYW5kIE9TLzIgZmlsZSBzdXBwb3J0KS4KLSAgU3lzdGVtcyB0aGF0IGhhdmUgYW4gYXRvbWlj IHJlbmFtZSgpIGZ1bmN0aW9uLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHVzZQotICBsaW5rKCkgYW5k IHVubGluaygpLgotKi8KLSNpZmRlZiBQT1NJWAotI2lmbmRlZiBSRU5BTUUKLSNkZWZpbmUgUkVO QU1FCi0jZW5kaWYgLyogUkVOQU1FICovCi0jZW5kaWYgLyogUE9TSVggKi8KLQotI2lmZGVmIE9T MgotI2lmbmRlZiBSRU5BTUUKLSNkZWZpbmUgUkVOQU1FCi0jZW5kaWYgLyogUkVOQU1FICovCi0j ZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBTVU5PUzQxCi0jaWZuZGVmIFJFTkFNRQotI2RlZmlu ZSBSRU5BTUUKLSNlbmRpZiAvKiBSRU5BTUUgKi8KLSNlbmRpZiAvKiBTVU5PUzQxICovCi0KLSNp ZmRlZiBTVlI0Ci0jaWZuZGVmIFJFTkFNRQotI2RlZmluZSBSRU5BTUUKLSNlbmRpZiAvKiBSRU5B TUUgKi8KLSNlbmRpZiAvKiBTVlI0ICovCi0KLSNpZmRlZiBBSVhSUwotI2lmbmRlZiBSRU5BTUUK LSNkZWZpbmUgUkVOQU1FCi0jZW5kaWYgLyogUkVOQU1FICovCi0jZW5kaWYgLyogQUlYUlMgKi8K LQotI2lmZGVmIEJTRDQ0Ci0jaWZuZGVmIFJFTkFNRQotI2RlZmluZSBSRU5BTUUKLSNlbmRpZiAv KiBSRU5BTUUgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotCi0jaWZkZWYgTk9SRU5BTUUJCQkJLyog QWxsb3cgZm9yIGNvbXBpbGUtdGltZSBvdmVycmlkZSAqLwotI2lmZGVmIFJFTkFNRQotI3VuZGVm IFJFTkFNRQotI2VuZGlmIC8qIFJFTkFNRSAqLwotI2VuZGlmIC8qIE5PUkVOQU1FICovCi0KLSNp ZmRlZiBTVFJBVFVTCQkJCS8qIFN0cmF0dXMgVk9TICovCi0jaWZuZGVmIFJFTkFNRQotI2RlZmlu ZSBSRU5BTUUKLSNlbmRpZiAvKiBSRU5BTUUgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0KLS8q IExpbmUgZGVsaW1pdGVyIGZvciB0ZXh0IGZpbGVzICovCi0KLS8qCi0gSWYgdGhlIHN5c3RlbSB1 c2VzIGEgc2luZ2xlIGNoYXJhY3RlciBmb3IgdGV4dCBmaWxlIGxpbmUgZGVsaW1pdGF0aW9uLAot IGRlZmluZSBOTENIQVIgdG8gdGhlIHZhbHVlIG9mIHRoYXQgY2hhcmFjdGVyLiAgRm9yIHRleHQg ZmlsZXMsIHRoYXQKLSBjaGFyYWN0ZXIgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gQ1JMRiB1cG9uIG91 dHB1dCwgYW5kIENSTEYgd2lsbCBiZSBjb252ZXJ0ZWQKLSB0byB0aGF0IGNoYXJhY3RlciBvbiBp bnB1dCBkdXJpbmcgdGV4dC1tb2RlIChkZWZhdWx0KSBwYWNrZXQgb3BlcmF0aW9ucy4KLSovCi0j aWZkZWYgTUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFjaW50b3NoICovCi0j ZGVmaW5lIE5MQ0hBUiAwMTUKLSNlbHNlCi0jaWZkZWYgT1NLCQkJCS8qIE9TLTkvNjhLICovCi0j ZGVmaW5lIE5MQ0hBUiAwMTUKLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBBbGwgVW5peC1saWtlIHN5c3RlbXMgKi8KLSNkZWZpbmUgTkxDSEFSIDAxMgotI2VuZGlm IC8qIE9TSyAqLwotI2VuZGlmIC8qIE1BQyAqLwotCi0vKgotIEF0IHRoaXMgcG9pbnQsIGlmIHRo ZXJlJ3MgYSBzeXN0ZW0gdGhhdCB1c2VzIG9yZGluYXJ5IENSTEYgbGluZQotIGRlbGltaXRhdGlv biBBTkQgdGhlIEMgY29tcGlsZXIgYWN0dWFsbHkgcmV0dXJucyBib3RoIHRoZSBDUiBhbmQKLSB0 aGUgTEYgd2hlbiBkb2luZyBpbnB1dCBmcm9tIGEgZmlsZSwgdGhlbiAjdW5kZWYgTkxDSEFSLgot Ki8KLSNpZmRlZiBPUzIJCQkJLyogT1MvMiAqLwotI3VuZGVmIE5MQ0hBUgotI2VuZGlmIC8qIE9T MiAqLwotCi0jaWZkZWYgR0VNRE9TCQkJCS8qIEF0YXJpIFNUICovCi0jdW5kZWYgTkxDSEFSCi0j ZW5kaWYgLyogR0VNRE9TICovCi0KLS8qCi0gIFZNUyBmaWxlIGZvcm1hdHMgYXJlIHNvIGNvbXBs aWNhdGVkIHdlIG5lZWQgdG8gZG8gYWxsIHRoZSBjb252ZXJzaW9uCi0gIHdvcmsgaW4gdGhlIENL VkZJTyBtb2R1bGUsIHNvIHdlIHRlbGwgdGhlIHJlc3Qgb2YgQy1LZXJtaXQgbm90IHRvIGZpZGRs ZQotICB3aXRoIHRoZSBieXRlcy4KLSovCi0KLSNpZmRlZiB2bXMKLSN1bmRlZiBOTENIQVIKLSNl bmRpZiAvKiB2bXMgKi8KLQotLyogVGhlIGRldmljZSBuYW1lIG9mIGEgam9iJ3MgY29udHJvbGxp bmcgdGVybWluYWwgKi8KLS8qIFNwZWNpYWwgZm9yIFZNUywgc2FtZSBmb3IgYWxsIFVuaXhlcyAo PyksIG5vdCB1c2VkIGJ5IE1hY2ludG9zaCAqLwotCi0jaWZkZWYgQkVPUwotI2RlZmluZSBDVFRO QU0gZGZ0dHkKLSNlbHNlCi0jaWZkZWYgdm1zCi0jZGVmaW5lIENUVE5BTSAiU1lTJElOUFVUOiIJ CS8qICg0IEphbiAyMDAyKSBXYXMgVFQ6ICovCi0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0j ZGVmaW5lIENUVE5BTSAiQG91dHB1dCIKLSNlbHNlCi0jaWZkZWYgT1NLCi1leHRlcm4gY2hhciBt eXR0eXN0cltdOwotI2RlZmluZSBDVFROQU0gbXl0dHlzdHIKLSNlbHNlCi0jaWZkZWYgT1MyCi0j ZGVmaW5lIENUVE5BTSAiY29uIgotI2Vsc2UKLSNpZmRlZiBVTklYCi0jZGVmaW5lIENUVE5BTSAi L2Rldi90dHkiCi0jZWxzZQotI2lmZGVmIEdFTURPUwotI2RlZmluZSBDVFROQU0gImF1eDoiCi0j ZWxzZQotI2lmZGVmIFNUUkFUVVMKLWV4dGVybiBjaGFyIG15dHR5c3RyW107Ci0jZGVmaW5lIENU VE5BTSBteXR0eXN0cgotI2Vsc2UgLyogQW55b25lIGVsc2UuLi4gKi8KLSNkZWZpbmUgQ1RUTkFN ICJzdGRvdXQiCQkJLyogVGhpcyBpcyBhIGtsdWRnZSB1c2VkIGJ5IE1hYyAqLwotI2VuZGlmIC8q IFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5k aWYgLyogT1MyICovCi0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8K LSNlbmRpZiAvKiB2bXMgKi8KLSNlbmRpZiAvKiBCRU9TICovCi0KLSNpZm5kZWYgSEFWRUNUVE5B TQotI2lmZGVmIFVOSVgKLSNkZWZpbmUgSEFWRUNUVE5BTQotI2Vsc2UKLSNpZmRlZiBWTVMKLSNk ZWZpbmUgSEFWRUNUVE5BTQotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNl bmRpZiAvKiBIQVZFQ1RUTkFNICovCi0KLSNpZm5kZWYgWkZDREFUCQkJCS8qIHpmY2RhdCgpIGZ1 bmN0aW9uIGF2YWlsYWJsZT8gKi8KLSNpZmRlZiBVTklYCi0jZGVmaW5lICBaRkNEQVQKLSNlbHNl Ci0jaWZkZWYgU1RSQVRVUwotI2RlZmluZSAgWkZDREFUCi0jZWxzZQotI2lmZGVmIEdFTURPUwot I2RlZmluZSAgWkZDREFUCi0jZWxzZQotI2lmZGVmIEFNSUdBCi0jZGVmaW5lICBaRkNEQVQKLSNl bHNlCi0jaWZkZWYgT1MyCi0jZGVmaW5lICBaRkNEQVQKLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVy YWwKLSNkZWZpbmUgIFpGQ0RBVAotI2Vsc2UKLSNpZmRlZiBWTVMKLSNkZWZpbmUgIFpGQ0RBVAot I2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogT1My ICovCi0jZW5kaWYgLyogQU1JR0EgKi8KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSNlbmRpZiAvKiBT VFJBVFVTICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIFpGQ0RBVCAqLwotCi0jaWZk ZWYgU1VOUzRTNQotI2RlZmluZSB0b2xvd2VyIF90b2xvd2VyCi0jZGVmaW5lIHRvdXBwZXIgX3Rv dXBwZXIKLSNlbmRpZiAvKiBTVU5TNFM1ICovCi0KLS8qIEVycm9yIG51bWJlciAqLwotCi0jaWZk ZWYgX0NSQVkKLSNpZmRlZiBfQ1JBWUNPTQkJCQkvKiBDcmF5IENvbXB1dGVyIENvcnAuICovCi1l eHRlcm4gaW50IGVycm5vOwotI2Vsc2UgLyogX0NSQVlDT00gKi8KLSNpbmNsdWRlIDxlcnJuby5o PgkJCS8qIENyYXkgUmVzZWFyY2ggVU5JQ09TIGRlZmluZXMgKi8KLQkJCQkJLyogZXJybm8gYXMg YSBmdW5jdGlvbi4gKi8KLSNlbmRpZiAvKiBfQ1JBWUNPTSAqLwkJCS8qIE9LIGZvciBVTklDT1Mg Ni4xIGFuZCA3LjAuICovCi0jZWxzZSAvKiBfQ1JBWSAqLwotI2lmZGVmIFNUUkFUVVMJCQkJLyog U3RyYXR1cyBWT1MgKi8KLSNpbmNsdWRlIDxlcnJuby5oPgotI2Vsc2UgLyogbm90IFNUUkFUVVMg Ki8KLSNpZm5kZWYgVk1TCi0jaWZuZGVmIE9TMgotI2lmZGVmIF9fR0xJQkNfXwotLyoKLSAgImds aWJjIHVzZXMgdGhyZWFkcywga2VybWl0IHVzZXMgZ2xpYmM7IGVycm5vIGFjY2VzcyBpcyBpbiBU aHJlYWQgTG9jYWwKLSAgU3RvcmFnZSAoVExTKSBmcm9tIGdsaWJjLTMuMi4yLiAgLi4uYSB0aHJl YWQgc3BlY2lmaWMgZXJybm8gaXMgYmVpbmcgcnVuIGluCi0gIHRocmVhZCBsb2NhbCBzdG9yYWdl IHJlbGF0aXZlIHRvIHRoZSAlZ3Mgc2VnbWVudCByZWdpc3Rlciwgc28gc29tZSBtZWFucyB0bwot ICByZXZlY3RvciBnZXRzL3B1dHMgbmVlZHMgdG8gYmUgZG9uZS4iIC0gSmVmZiBKb2huc29uLCBS ZWQgSGF0LCBGZWIgMjAwMy4KLSovCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNlbHNlCi0vKgotICBU aGUgZm9sbG93aW5nIGRlY2xhcmF0aW9uIHdvdWxkIGNhdXNlIHByb2JsZW1zIGZvciBWTVMgYW5k IE9TLzIsIGluIHdoaWNoCi0gIGVycm5vIGlzIGFuICJleHRlcm4gdm9sYXRpbGUgaW50IG5vc2hh cmUiLi4uICBOT1RFOiBieSBub3cgKDIwMDcpIHRoZQotICBmb2xsb3dpbmcgaXMgYW4gYW5hY2hy b25pc20gYW5kIHNob3VsZCBiZSB0aGUgZXhlY3B0aW9uIHJhdGhlciB0aGFuIHRoZQotICBydWxl LgotKi8KLWV4dGVybiBpbnQgZXJybm87Ci0jZW5kaWYgLyogX19HTElCQ19fICovCi0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlm IC8qIF9DUkFZICovCi0KLSNpZmRlZiBVTklYCQkJCS8qIENhdGNoLWFsbCBzbyB3ZSBjYW4gaGF2 ZSAqLwotI2lmbmRlZiBFU1JDSAkJCQkvKiBhY2Nlc3MgdG8gZXJyb3IgbW5lbW9uaWNzICovCi0j aW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBpbiBhbGwgbW9kdWxlcyAtIDIwMDcvMDgvMjUgKi8KLSNl bmRpZgkvKiBFU1JDSCAqLwotI2VuZGlmCS8qIFVOSVggKi8KLQotI2lmZGVmIHBkcDExCQkJCS8q IFRyeSB0byBtYWtlIHNvbWUgc3BhY2Ugb24gUERQLTExICovCi0jaWZuZGVmIE5PRElBTAotI2Rl ZmluZSBOT0RJQUwKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSNpZm5kZWYgTk9DVVJTRVMKLSNkZWZp bmUgTk9DVVJTRVMKLSNlbmRpZiAvKiBOT0NVUlNFUyAqLwotI2lmbmRlZiBOT0JJR0JVRgotI2Rl ZmluZSBOT0JJR0JVRgotI2VuZGlmIC8qIE5PQklHQlVGICovCi0jZW5kaWYgLyogcGRwMTEgKi8K LQotI2lmbmRlZiBOT0JJR0JVRgotI2lmbmRlZiBCSUdCVUZPSwkJCS8qIFBsYXRmb3JtcyB3aXRo IGxvdHMgb2YgbWVtb3J5ICovCi0KLSNpZmRlZiBRTlgJCQkJLyogUU5YICovCi0jaWZuZGVmIFFO WDE2CQkJCS8qIEJ1dCBub3QgMTYtYml0IHZlcnNpb25zICovCi0jZGVmaW5lIEJJR0JVRk9LCi0j ZW5kaWYgLyogUU5YMTYgKi8KLSNlbmRpZiAvKiBRTlggKi8KLQotI2lmZGVmIEJTRDQ0Ci0jZGVm aW5lIEJJR0JVRk9LCi0jZW5kaWYgLyogQlNENDQgKi8KLQotI2lmZGVmIFNUUkFUVVMJCQkJLyog U3RyYXR1cyBWT1MgKi8KLSNkZWZpbmUgQklHQlVGT0sKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0K LSNpZmRlZiBzcGFyYwkJCQkvKiBTUEFSQyBwcm9jZXNzb3JzICovCi0jZGVmaW5lIEJJR0JVRk9L Ci0jZW5kaWYgLyogc3BhcmMgKi8KLQotI2lmZGVmIG1pcHMJCQkJLyogTUlQUyBwcm9jZXNzb3Jz ICovCi0jZGVmaW5lIEJJR0JVRk9LCi0jZW5kaWYgLyogbWlwcyAqLwotCi0jaWZkZWYgSFBVWDkJ CQkJLyogSFAtVVggOS54ICovCi0jZGVmaW5lIEJJR0JVRk9LCi0jZW5kaWYgLyogSFBVWDkgKi8K LQotI2lmZGVmIEhQVVgxMAkJCQkvKiBIUC1VWCAxMC4wIFBBLVJJU0MgKi8KLSNkZWZpbmUgQklH QlVGT0sKLSNlbmRpZiAvKiBIUFVYMTAgKi8KLQotI2lmZGVmIE5FWFQJCQkJLyogTmVYVFNURVAg Ki8KLSNpZmRlZiBtYzY4MDAwCQkJCS8qIG9uIE5FWFQgcGxhdGZvcm1zLi4uICovCi0jZGVmaW5l IEJJR0JVRk9LCi0jZW5kaWYgLyogbWM2ODAwMCAqLwotI2VuZGlmIC8qIE5FWFQgKi8KLQotI2lm ZGVmIExJTlVYCQkJCS8qIExpbnV4IGluIDE5OTggc2hvdWxkIGJlIE9LICovCi0jaWZuZGVmIEJJ R0JVRk9LCi0jZGVmaW5lIEJJR0JVRk9LCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLSNlbmRpZiAv KiBMSU5VWCAqLwotCi0jaWZkZWYgT1MyCQkJCS8qIDMyLWJpdCBPUy8yIDIueCBhbmQgYWJvdmUg Ki8KLSNpZmRlZiBfXzMyQklUX18KLSNkZWZpbmUgQklHQlVGT0sKLSNlbmRpZiAvKiBfXzMyQklU X18gKi8KLSNpZmRlZiBOVAotI2RlZmluZSBCSUdCVUZPSwotI2VuZGlmIC8qIE5UICovCi0jZW5k aWYgLyogT1MyICovCi0KLSNpZmRlZiBQbGFuOQkJCQkvKiBQbGFuIDkgaXMgT0sgKi8KLSNkZWZp bmUgQklHQlVGT0sKLSNlbmRpZiAvKiBQbGFuOSAqLwotCi0jaWZkZWYgVk1TCQkJCS8qIEFueSBW TVMgaXMgT0sgKi8KLSNpZm5kZWYgQklHQlVGT0sKLSNkZWZpbmUgQklHQlVGT0sKLSNlbmRpZiAv KiBCSUdCVUZPSyAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi0jaWZkZWYgX19hbHBoYQkJCQkvKiBE RUMgNjQtYml0IEFscGhhLCBlLmcuIE9TRi8xICovCi0jaWZuZGVmIEJJR0JVRk9LCQkJLyogTWln aHQgYWxyZWFkeSBiZSBkZWZpbmVkIGZvciBWTVMgKi8KLSNkZWZpbmUgQklHQlVGT0sKLSNlbmRp ZiAvKiBCSUdCVUZPSyAqLwotI2VuZGlmIC8qIF9fYWxwaGEgKi8KLQotI2lmZGVmIHNnaQkJCQkv KiBTR0kgd2l0aCBJUklYIDQuMCBvciBsYXRlciAqLwotI2lmbmRlZiBCSUdCVUZPSwotI2RlZmlu ZSBCSUdCVUZPSwotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0jZW5kaWYgLyogc2dpICovCi0KLSNp ZmRlZiBBSVhSUwkJCQkvKiBBSVggb24gUklTQyAqLwotI2RlZmluZSBCSUdCVUZPSwotI2VuZGlm IC8qIEFJWFJTICovCi0KLSNpZmRlZiBDS19TQ09WNQkJCQkvKiBTQ08gT1NSNSAqLwotI2lmbmRl ZiBCSUdCVUZPSwotI2RlZmluZSBCSUdCVUZPSwotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0jZW5k aWYgLyogQ0tfU0NPVjUgKi8KLQotI2lmZGVmIFNPTEFSSVMJCQkJLyogU29sYXJpcyB4ODYgKi8K LSNpZm5kZWYgQklHQlVGT0sKLSNkZWZpbmUgQklHQlVGT0sKLSNlbmRpZiAvKiBCSUdCVUZPSyAq LwotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLQotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0jZW5kaWYg LyogTk9CSUdCVUYgKi8KLQotI2lmZGVmIENLX1NNQUxMCi0jaWZkZWYgQklHQlVGT0sKLSN1bmRl ZiBCSUdCVUZPSwotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0jZW5kaWYgLyogQ0tfU01BTEwgKi8K LQotLyogSWYgIm1lbW9yeSBpcyBubyBwcm9ibGVtIiB0aGVuIHRoaXMgaW1wcm92ZXMgcGVyZm9y bWFuY2UgKi8KLQotI2lmZGVmIERFQlVHCi0jaWZkZWYgQklHQlVGT0sKLSNpZm5kZWYgSUZERUJV RwotI2RlZmluZSBJRkRFQlVHCi0jZW5kaWYgLyogSUZERUJVRyAqLwotI2VuZGlmIC8qIEJJR0JV Rk9LICovCi0jZW5kaWYgLyogREVCVUcgKi8KLQotLyogRmlsZSBTeXN0ZW0gRGVmYXVsdHMgKi8K LQotI2lmbmRlZiBVSURCVUZMRU4JCQkvKiBMZW5ndGggb2YgVXNlciBJRCAqLwotI2lmZGVmIE9T MgotI2RlZmluZSBVSURCVUZMRU4gMjU2Ci0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBCSUdCVUZP SwotI2RlZmluZSBVSURCVUZMRU4gMjU2Ci0jZWxzZQotI2RlZmluZSBVSURCVUZMRU4gNjQKLSNl bmRpZiAvKiBCSUdCVUZPSyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFVJREJVRkxF TiAqLwotCi0jaWZkZWYgVU5JWAotI2lmZGVmIFBST1ZYMQotI2RlZmluZSBNQVhXTEQgNTAKLSNl bHNlCi0jaWZkZWYgcGRwMTEKLSNkZWZpbmUgTUFYV0xEIDUwCi0jZWxzZQotI2lmZGVmIEJJR0JV Rk9LCi0jZGVmaW5lIE1BWFdMRCAxMDI0MDAKLSNlbHNlCi0jZGVmaW5lIE1BWFdMRCAxMDI0Ci0j ZW5kaWYgLyogQklHQlVGT0sgKi8KLSNlbmRpZiAvKiBwZHAxMSAqLwotI2VuZGlmIC8qIFBST1ZY MSAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSNkZWZpbmUgTUFYV0xEIDEwMjQwMAkJCS8qIE1heGlt dW0gd2lsZGNhcmQgZmlsZW5hbWVzICovCi0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0jZGVm aW5lIE1BWFdMRCA1MDAKLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotI2RlZmluZSBNQVhXTEQgNTAw MAotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlm IC8qIFZNUyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmZGVmIFZNUwotI2RlZmluZSBEQkxL U0laIDUxMgotI2RlZmluZSBETFJFQ0wgNTEyCi0jZWxzZQotI2RlZmluZSBEQkxLU0laIDAKLSNk ZWZpbmUgRExSRUNMIDAKLSNlbmRpZiAvKiBWTVMgKi8KLQotLyogQ29tbXVuaWNhdGlvbiBkZXZp Y2UgLyBuZXR3b3JrIGhvc3QgbmFtZSBsZW5ndGggKi8KLQotI2lmZGVmIEJJR0JVRk9LCi0jZGVm aW5lIFRUTkFNTEVOIDUxMgotI2Vsc2UKLSNpZmRlZiBNQUMKLSNkZWZpbmUgVFROQU1MRU4gMjU2 Ci0jZWxzZQotI2lmbmRlZiBDS19TTUFMTAotI2RlZmluZSBUVE5BTUxFTiAxMjgKLSNlbHNlCi0j ZGVmaW5lIFRUTkFNTEVOIDgwCi0jZW5kaWYgLyogQ0tfU01BTEwgKi8KLSNlbmRpZiAvKiBNQUMg Ki8KLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotCi0vKiBQcm9ncmFtIHJldHVybiBjb2RlcyBmb3Ig REVDVVMgQyBhbmQgVU5JWCAoVk1TIHVzZXMgVU5JWCBjb2RlcykgKi8KLQotI2lmZGVmIGRlY3Vz Ci0jZGVmaW5lIEdPT0RfRVhJVCAgIElPX05PUk1BTAotI2RlZmluZSBCQURfRVhJVCAgICBJT19F UlJPUgotI2Vsc2UKLSNkZWZpbmUgR09PRF9FWElUICAgMAotI2RlZmluZSBCQURfRVhJVCAgICAx Ci0jZW5kaWYgLyogZGVjdXMgKi8KLQotLyogU3BlY2lhbCBoYWNrIGZvciBGb3J0dW5lLCB3aGlj aCBkb2Vzbid0IGhhdmUgPHN5cy9maWxlLmg+Li4uICovCi0KLSNpZmRlZiBGVDE4Ci0jZGVmaW5l IEZSRUFEIDB4MDEKLSNkZWZpbmUgRldSSVRFIDB4MTAKLSNlbmRpZiAvKiBGVDE4ICovCi0KLS8q IFNwZWNpYWwgaGFjayBmb3IgT1MtOS82OGsgKi8KLSNpZmRlZiBPU0sKLSNpZm5kZWYgX1VDQwot I2RlZmluZSBTSUdBTFJNIDMwCQkJLyogTWF5IGFsd2F5cyBjYW5jZWwgSS9PICovCi0jZW5kaWYg LyogX1VDQyAqLwotI2RlZmluZSBTSUdBUkIJMTIzNAkJCS8qIEFyYml0cmFyeSBmb3IgSS9PICov Ci1TSUdUWVAgKCpzaWduYWwoKSkoKTsKLSNlbmRpZiAvKiBPU0sgKi8KLQotI2lmZGVmIE1JTklY Ci0jaWZkZWYgcHV0Y2hhcgotI3VuZGVmIHB1dGNoYXIKLSNlbmRpZiAvKiBwdXRjaGFyICovCi0j ZGVmaW5lIHB1dGNoYXIoYykgKHB1dGMoYyxzdGRvdXQpIT1FT0YpJiZmZmx1c2goc3Rkb3V0KQot I2VuZGlmIC8qIE1JTklYICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbAkJCS8qIERhdGEgR2VuZXJh bCBBT1MvVlMgKi8KLSNpZmRlZiBwdXRjaGFyCi0jdW5kZWYgcHV0Y2hhcgotI2VuZGlmIC8qIHB1 dGNoYXIgKi8KLSNkZWZpbmUgcHV0Y2hhcihjKSBjb25vYyhjKQotI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCi0KLS8qIEVzY2FwZS9xdW90ZSBjaGFyYWN0ZXIgdXNlZCBieSB0aGUgY29tbWFuZCBw YXJzZXIgKi8KLQotI2RlZmluZSBDTURRICdcXCcKLQotLyogU3ltYm9scyBmb3IgUlMtMjMyIG1v ZGVtIHNpZ25hbHMgKi8KLQotI2RlZmluZSBLTV9GRyAgICAxCQkJLyogRnJhbWUgZ3JvdW5kICov Ci0jZGVmaW5lIEtNX1RYRCAgIDIJCQkvKiBUcmFuc21pdCAqLwotI2RlZmluZSBLTV9SWEQgICAz CQkJLyogUmVjZWl2ZSAqLwotI2RlZmluZSBLTV9SVFMgICA0CQkJLyogUmVxdWVzdCB0byBTZW5k ICovCi0jZGVmaW5lIEtNX0NUUyAgIDUJCQkvKiBDbGVhciB0byBTZW5kICovCi0jZGVmaW5lIEtN X0RTUiAgIDYJCQkvKiBEYXRhIFNldCBSZWFkeSAqLwotI2RlZmluZSBLTV9TRyAgICA3CQkJLyog U2lnbmFsIGdyb3VuZCAqLwotI2RlZmluZSBLTV9EQ0QgICA4CQkJLyogQ2FycmllciBEZXRlY3Qg Ki8KLSNkZWZpbmUgS01fRFRSICAyMAkJCS8qIERhdGEgVGVybWluYWwgUmVhZHkgKi8KLSNkZWZp bmUgS01fUkkgICAyMgkJCS8qIFJpbmcgSW5kaWNhdGlvbiAqLwotCi0vKiBCaXQgbWFzayB2YWx1 ZXMgZm9yIG1vZGVtIHNpZ25hbHMgKi8KLQotI2RlZmluZSBCTV9DVFMgICAwMDAxCQkJLyogQ2xl YXIgdG8gc2VuZCAgICAgICAoRnJvbSBEQ0UpICovCi0jZGVmaW5lIEJNX0RTUiAgIDAwMDIJCQkv KiBEYXRhc2V0IHJlYWR5ICAgICAgIChGcm9tIERDRSkgKi8KLSNkZWZpbmUgQk1fRENEICAgMDAw NAkJCS8qIENhcnJpZXIgICAgICAgICAgICAgKEZyb20gRENFKSAqLwotI2RlZmluZSBCTV9STkcg ICAwMDEwCQkJLyogUmluZyBJbmRpY2F0b3IgICAgICAoRnJvbSBEQ0UpICovCi0jZGVmaW5lIEJN X0RUUiAgIDAwMjAJCQkvKiBEYXRhIFRlcm1pbmFsIFJlYWR5IChGcm9tIERURSkgKi8KLSNkZWZp bmUgQk1fUlRTICAgMDA0MAkJCS8qIFJlcXVlc3QgdG8gU2VuZCAgICAgKEZyb20gRFRFKSAqLwot Ci0vKiBDb2RlcyBmb3IgZnVsbCBkdXBsZXggZmxvdyBjb250cm9sICovCi0KLSNkZWZpbmUgRkxP X05PTkUgMAkJCS8qIE5vbmUgKi8KLSNkZWZpbmUgRkxPX1hPTlggMQkJCS8qIFhvbi9Yb2ZmIChz b2Z0KSAqLwotI2RlZmluZSBGTE9fUlRTQyAyCQkJLyogUlRTL0NUUyAoaGFyZCkgKi8KLSNkZWZp bmUgRkxPX0RUUkMgMwkJCS8qIERUUi9DRCAoaGFyZCkgKi8KLSNkZWZpbmUgRkxPX0VUWEEgNAkJ CS8qIEVUWC9BQ0sgKHNvZnQpICovCi0jZGVmaW5lIEZMT19TVFJHIDUJCQkvKiBTdHJpbmctYmFz ZWQgKHNvZnQpICovCi0jZGVmaW5lIEZMT19ESUFMIDYJCQkvKiBESUFMaW5nIGtsdWRnZSAqLwot I2RlZmluZSBGTE9fRElBWCA3CQkJLyogQ2FuY2VsIGRpYWxpbmcga2x1ZGdlICovCi0jZGVmaW5l IEZMT19EVFJUIDgJCQkvKiBEVFIvQ1RTIChoYXJkKSAqLwotI2RlZmluZSBGTE9fS0VFUCA5CQkJ LyogS2VlcCwgaS5lLiBkb24ndCB0b3VjaCBvciBjaGFuZ2UgKi8KLSNkZWZpbmUgRkxPX0FVVE8g MTAJCQkvKiBGaWd1cmUgb3V0IGF1dG9tYXRpY2FsbHkgKi8KLQotLyogVHlwZXMgb2YgY29ubmVj dGlvbnMgKi8KLQotI2RlZmluZSBDWFRfUkVNT1RFICAwCQkJLyogUmVtb3RlIG1vZGUgLSBubyBj b25uZWN0aW9uICovCi0jZGVmaW5lIENYVF9ESVJFQ1QgIDEJCQkvKiBEaXJlY3Qgc2VyaWFsIGNv bm5lY3Rpb24gKi8KLSNkZWZpbmUgQ1hUX01PREVNICAgMgkJCS8qIE1vZGVtIGRpYWxvdXQgKi8K LSNkZWZpbmUgQ1hUX1RDUElQICAgMwkJCS8qIFRDUC9JUCAtIFRlbG5ldCwgUmxvZ2luLCBldGMg Ki8KLSNkZWZpbmUgQ1hUX1gyNSAgICAgNAkJCS8qIFguMjUgcGVlci10by1wZWVyICovCi0jZGVm aW5lIENYVF9ERUNORVQgIDUJCQkvKiBERUNuZXQgKENURVJNLCBldGMpICovCi0jZGVmaW5lIENY VF9MQVQgICAgIDYJCQkvKiBMQVQgKi8KLSNkZWZpbmUgQ1hUX05FVEJJT1MgNwkJCS8qIE5FVEJJ T1MgKi8KLSNkZWZpbmUgQ1hUX05QSVBFICAgOAkJCS8qIE5hbWVkIFBpcGUgKi8KLSNkZWZpbmUg Q1hUX1BJUEUgICAgOQkJCS8qIFBpcGUsIENvbW1hbmQsIFBUWSwgRExMLCBldGMgKi8KLSNkZWZp bmUgQ1hUX1NTSCAgICAgMTAgICAgICAgICAgICAgICAgICAvKiBTU0ggKi8KLSNkZWZpbmUgQ1hU X01BWCAgICAgMTAJCQkvKiBIaWdoZXN0IGNvbm5lY3Rpb24gdHlwZSAqLwotCi0vKiBBdXRvZG93 bmxvYWQgRGV0ZWN0aW9uIE9wdGlvbnMgKi8KLQotI2RlZmluZSBBRExfUEFDSyAwCQkJLyogQXV0 by1Eb3dubG9hZCBkZXRlY3QgcGFja2V0ICovCi0jZGVmaW5lIEFETF9TVFIgIDEJCQkvKiBBdXRv LURvd25sb2FkIGRldGVjdCBzdHJpbmcgKi8KLQotLyogQW5kIGZpbmFsbHkuLi4gKi8KLQotI2lm ZGVmIENPTU1FTlQJCQkJLyogTWFrZSBzdXJlIHRoaXMgaXMgTk9UIGRlZmluZWQhICovCi0jdW5k ZWYgQ09NTUVOVAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotLyogenN0ciB6YXR0ciBmaWxpbmZv IHdlcmUgaGVyZSAobW92ZWQgdG8gdG9wIGZvciBERUNDIDUgSnVuIDIwMDApICovCi0KLSNpZm5k ZWYgWkZOUUZQCQkJCS8qIFZlcnNpb25zIHRoYXQgaGF2ZSB6Zm5xZnAoKSAqLwotI2lmZGVmIFVO SVgKLSNkZWZpbmUgWkZOUUZQCi0jZWxzZQotI2lmZGVmIFZNUwotI2RlZmluZSBaRk5RRlAKLSNl bHNlCi0jaWZkZWYgT1MyCi0jZGVmaW5lIFpGTlFGUAotI2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJh bAotI2RlZmluZSBaRk5RRlAKLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotI2RlZmluZSBaRk5RRlAK LSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi1zdHJ1Y3QgemZu ZnAgewotICAgaW50IGxlbjsJCQkJLyogTGVuZ3RoIG9mIGZ1bGwgcGF0aG5hbWUgKi8KLSAgIGNo YXIgKiBmcGF0aDsJCQkvKiBQb2ludGVyIHRvIGZ1bGwgcGF0aG5hbWUgKi8KLSAgIGNoYXIgKiBm bmFtZTsJCQkvKiBQb2ludGVyIHRvIG5hbWUgcGFydCAqLwotfTsKLSNlbmRpZiAvKiBaRk5RRlAg Ki8KLQotLyogU3lzdGVtcyB0aGF0IHN1cHBvcnQgRklMRSBUWVBFIExBQkVMRUQgKi8KLQotI2lm ZGVmIFZNUwotI2RlZmluZSBDS19MQUJFTEVECi0jZWxzZQotI2lmZGVmIE9TMgotI2lmZGVmIF9f MzJCSVRfXwotI2lmbmRlZiBOVAotI2RlZmluZSBDS19MQUJFTEVECi0jZW5kaWYgLyogTlQgKi8K LSNlbmRpZiAvKiBfXzMyQklUX18gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMg Ki8KLQotLyogTEFCRUxFRCBGSUxFIG9wdGlvbnMgYml0bWFzayAqLwotCi0jaWZkZWYgVk1TCQkJ CS8qIEZvciBWTVMgKi8KLSNkZWZpbmUgTEJMX05BTSAgMQkJCS8qIElnbm9yZSBpbmNvbWluZyBu YW1lIGlmIHNldCAqLwotI2RlZmluZSBMQkxfUFRIICAyCQkJLyogVXNlIGNvbXBsZXRlIHBhdGgg aWYgc2V0ICovCi0jZGVmaW5lIExCTF9BQ0wgIDQJCQkvKiBQcmVzZXJ2ZSBBQ0xzIGlmIHNldCAq LwotI2RlZmluZSBMQkxfQkNLICA4CQkJLyogUHJlc2VydmUgYmFja3VwIGRhdGUgaWYgc2V0ICov Ci0jZGVmaW5lIExCTF9PV04gMTYJCQkvKiBQcmVzZXJ2ZSBvd25lcnNoaXAgaWYgc2V0ICovCi0K LSNlbHNlCi0KLSNpZmRlZiBPUzIJCQkJLyogRGl0dG8gZm9yIE9TLzIgKi8KLSNkZWZpbmUgTEJM X05PUiAgMHgwMDAwCQkJLyogTm9ybWFsIGZpbGUgKi8KLSNkZWZpbmUgTEJMX0FSQyAgMHgwMDIw CQkJLyogQXJjaGl2ZSAqLwotI2RlZmluZSBMQkxfRElSICAweDAwMTAJCQkvKiBEaXJlY3Rvcnkg Ki8KLSNkZWZpbmUgTEJMX0hJRCAgMHgwMDAyCQkJLyogSGlkZGVuIGZpbGUgKi8KLSNkZWZpbmUg TEJMX1JPICAgMHgwMDAxCQkJLyogUmVhZCBvbmx5IGZpbGUgKi8KLSNkZWZpbmUgTEJMX1NZUyAg MHgwMDA0CQkJLyogU3lzdGVtIGZpbGUgKi8KLSNkZWZpbmUgTEJMX0VYVCAgMHgwMDQwCQkJLyog RXh0ZW5kZWQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotLyoKLSAg RGF0YSB0eXBlcy4gIEZpcnN0IHRoZSBoZWFkZXIgZmlsZSBmb3IgZGF0YSB0eXBlcyBzbyB3ZSBj YW4gcGljayB1cCB0aGUKLSAgdHlwZXMgdXNlZCBmb3IgcGlkcywgdWlkcywgYW5kIGdpZHMuICBP dmVycmlkZSB0aGlzIHNlY3Rpb24gYnkgcHV0dGluZwotICAtRENLVFlQX0g9eHh4IG9uIHRoZSBj b21tYW5kIGxpbmUgdG8gc3BlY2lmeSB0aGUgaGVhZGVyIGZpbGUgd2hlcmUgeW91cgotICBzeXN0 ZW0gZGVmaW5lcyB0aGVzZSB0eXBlcy4KLSovCi0jaWZuZGVmIFNUUkFUVVMKLSNpZmRlZiBfX0FM UEhBCi0jaWZkZWYgTVVMVElORVQKLSNkZWZpbmUgQ0tfVEdWX0FYUAotI2VuZGlmIC8qIE1VTFRJ TkVUICovCi0jZW5kaWYgLyogX19BTFBIQSAqLwotCi0jaWZkZWYgQ0tfVEdWX0FYUAkJCS8qIEFs cGhhLCBWTVMsIE11bHRpTmV0ICovCi0vKgotICBTdGFydGluZyBpbiBERUNDIDUuMCwgPHN0ZGxp Yi5oPiBubyBsb25nZXIgaW5jbHVkZXMgPHR5cGVzLmg+LgotICBCdXQgYmVmb3JlIHRoYXQgYW4g ZWxhYm9yYXRlIHdvcmthcm91bmQgaXMgcmVxdWlyZWQsIHdoaWNoIHJlc3VsdHMgaW4KLSAgaW5j bHVkaW5nIDx0eXBlcy5oPiBzb21ldGltZXMgYnV0IG5vdCBvdGhlcnMsIGV2aWRlbnRseSBkZXBl bmRpbmcgb24gd2hldGhlcgotICA8dHlwZXMuaD4gcHJvdGVjdHMgaXRzZWxmIGFnYWluc3QgbXVs dGlwbGUgaW5jbHVzaW9uLCB3aGljaCBpbiB0dXJuIHByb2JhYmx5Ci0gIGRpZmZlcmVudGlhdGVz IGJldHdlZW4gREVDQyA8dHlwZXMuaD4gYW5kIFRHViA8dHlwZXMuaD4uICBVbmZvcnR1bmF0ZWx5 IEkKLSAgZG9uJ3QgcmVtZW1iZXIgdGhlIGRldGFpbHMuICAoZmRjLCAyNSBPY3QgOTYpCi0qLwot I2lmZGVmIENPTU1FTlQKLS8qCi0gIFByZXZpb3VzbHkgdGhlIHRlc3QgaGVyZSB3YXMgZm9yIERF QyB2ZXJzaW9uIHByaW9yIHRvIDQuMCwgYnV0IHNpbmNlIHRoZQotICB0ZXN0IGludm9sdmVkIGFu ICIjaWYiIHN0YXRlbWVudCwgaXQgd2FzIG5vdCBwb3J0YWJsZSBhbmQgYnJva2Ugc29tZSBub24t Vk1TCi0gIGJ1aWxkcy4gIEluIGFueSBjYXNlLCBjb25kaXRpb24gd2FzIG5ldmVyIHNhdGlzZmll ZCwgc28gdGhlIHJlc3VsdCBvZgotICBjb21tZW50aW5nIHRoaXMgc2VjdGlvbiBvdXQgaXMgdGhl IHNhbWUgYXMgdGhlIHByZXZpb3VzICIjaWYiIGNvbmRpdGlvbi4KLSovCi0jaWZuZGVmIF9fVFlQ RVNfTE9BREVECi0jZGVmaW5lIF9fVFlQRVNfTE9BREVECQkJLyogV29yayBhcm91bmQgYnVnIGlu IC5oIGZpbGVzICovCi0jZW5kaWYgLyogX19UWVBFU19MT0FERUQgKi8KLSNlbmRpZiAvKiBDT01N RU5UICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZfRE9UX0gKLSNpZm5kZWYg TVVMVElORVQKLSNpbmNsdWRlIDxpZi5oPgkJCQkvKiBOZWVkZWQgdG8gcHV0IHVwIHVfaW50IHR5 cGVkZWYgKi8KLSNlbmRpZiAvKiBNVUxUSU5FVCAqLwotI2Vsc2UgLyogSUZfRE9UX0ggKi8KLSNp ZmRlZiBORUVEVUlOVAotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ7Ci0jZW5kaWYgLyogTkVF RFVJTlQgKi8KLSNlbmRpZiAvKiBJRl9ET1RfSCAqLwotI2Vsc2UJCQkJCS8qICFDS19UR1ZfQVhQ ICovCi0jaWZkZWYgT1NLCQkJCS8qIE9TLTkgKi8KLSNpbmNsdWRlIDx0eXBlcy5oPgotI2Vsc2UJ CQkJCS8qIEdlbmVyYWwgY2FzZSwgbm90IE9TLTkgKi8KLSNpZm5kZWYgQ0tUWVBfSAotI2lmbmRl ZiBWTVMKLSNpZm5kZWYgTUFDCi0jaWZuZGVmIEFNSUdBCi0jZGVmaW5lIENLVFlQX0ggPHN5cy90 eXBlcy5oPgotI2VuZGlmIC8qIEFNSUdBICovCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyog Vk1TICovCi0jZW5kaWYgLyogQ0tUWVBfSCAqLwotCi0jaWZkZWYgR0VNRE9TCi0jdW5kZWYgQ0tU WVBfSAotI2luY2x1ZGUgPHR5cGVzLmg+Ci0jZW5kaWYgLyogR0VNRE9TICovCi0KLSNpZmRlZiBP UzIKLSN1bmRlZiBDS1RZUF9ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYgLyogT1My ICovCi0KLSNpZmRlZiBDS1RZUF9ICQkJCS8qIEluY2x1ZGUgaXQuICovCi0jaWZkZWYgQ09IRVJF TlQJCQkJLyogRXhjZXB0IGZvciBDT0hFUkVOVCAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2lu Y2x1ZGUgPHN5cy90eXBlcy5oPgotI2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJhbAkJCS8qIEFPUy9W UyAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2Vsc2UgIC8qIEFsbCBvdGhlcnMgKi8KLSNp ZmRlZiBfX2JzZGlfXwkJCQkvKiBCU0RJICovCi0jaWZkZWYgUE9TSVgKLSN1bmRlZiBfUE9TSVhf U09VUkNFCi0jZW5kaWYgLyogUE9TSVggKi8KLSNlbmRpZiAvKiBfX2JzZGlfXyAqLwotI2luY2x1 ZGUgQ0tUWVBfSAotI2lmZGVmIF9fYnNkaV9fCi0jaWZkZWYgUE9TSVgKLSNkZWZpbmUgX1BPU0lY X1NPVVJDRQotI2VuZGlmIC8qIFBPU0lYICovCi0jZW5kaWYgLyogX19ic2RpX18gKi8KLSNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0jZW5kaWYgLyogQ0tU WVBfSCAqLwotCi0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogQ0tfVEdWX0FYUCAqLwotI2Vu ZGlmIC8qIFNUUkFUVVMgKi8JCQkvKiBFbmQgb2YgdHlwZXMuaCBzZWN0aW9uICovCi0KLS8qCi0g IEZpbGUgbGVuZ3RocyBhbmQgb2Zmc2V0cy4gIFRoaXMgc2VjdGlvbiBpcyBleHBlY3RlZCB0byBn cm93IGFzIHdlCi0gIHN1cHBvcnQgbG9uZyBmaWxlcyBvbiAzMi1iaXQgcGxhdGZvcm1zLiAgV2Ug d2FudCB0aGlzIGRhdGEgdHlwZSB0byBiZQotICBzaWduZWQgYmVjYXVzZSBzbyBtYW55IGZ1bmN0 aW9ucyByZXR1cm4gZWl0aGVyIGEgZmlsZSBzaXplIG9yIGEgbmVnYXRpdmUKLSAgdmFsdWUgdG8g aW5kaWNhdGUgYW4gZXJyb3IuCi0qLwotI2lmbmRlZiBDS19PRkZfVAotI2lmZGVmIE9TMgotI2lm ZGVmIE5UCi0jZGVmaW5lIENLX09GRl9UIF9faW50NjQKLSNlbHNlCi0jZGVmaW5lIENLX09GRl9U IGxvbmcKLSNlbmRpZiAgLyogTlQgKi8KLSNlbmRpZgkvKiBPUzIgKi8KLSNlbmRpZgkvKiBDS19P RkZfVCAqLwotCi0vKiBGcmVlQlNEIGFuZCBPcGVuQlNEIHNldCBvZmZfdCB0byB0aGUgYXBwcm9w cmlhdGUgc2l6ZSB1bmNvbmRpdGlvbmFsbHkgKi8KLQotI2lmbmRlZiBDS19PRkZfVAotI2lmZGVm IF9fRnJlZUJTRF9fCi0jZGVmaW5lIENLX09GRl9UIG9mZl90Ci0jZWxzZQotI2lmZGVmIF9fT3Bl bkJTRF9fCi0jZGVmaW5lIENLX09GRl9UIG9mZl90Ci0jZW5kaWYJLyogX19PcGVuQlNEX18gKi8K LSNlbmRpZgkvKiBfX0ZyZWVCU0RfXyAqLwotI2VuZGlmCS8qIENLX09GRl9UICovCi0KLS8qIDMy LWJpdCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGxvbmcgZmlsZXMgdGhydSAidHJhbnNpdGlvbmFs IGludGVyZmFjZSIgKi8KLS8qIFRoZXNlIGluY2x1ZGUgTGludXgsIFNvbGFyaXMsIE5ldEJTRC4u LiAqLwotCi0jaWZkZWYgQUlYUlMKLSNpZmRlZiBfTEFSR0VfRklMRVMKLSNpZm5kZWYgQ0tfT0ZG X1QKLSNkZWZpbmUgQ0tfT0ZGX1Qgb2ZmX3QKLSNlbmRpZgkvKiBDS19PRkZfVCAqLwotI2VuZGlm CS8qIF9MQVJHRV9GSUxFUyAqLwotI2VuZGlmCS8qIEFJWFJTICovCi0KLSNpZmRlZiBfTEFSR0VG SUxFX1NPVVJDRQotI2lmbmRlZiBDS19PRkZfVAotI2RlZmluZSBDS19PRkZfVCBvZmZfdAotI2Vu ZGlmCS8qIENLX09GRl9UICovCi0jaWZkZWYgSVJJWAotI2RlZmluZSBDS0ZTRUVLKGEsYixjKSBm c2VlazY0KGEsYixjKQotI2RlZmluZSBDS0ZURUxMKGEpIGZ0ZWxsNjQoYSkKLSNlbHNlIC8qIElS SVggKi8KLSNkZWZpbmUgQ0tGU0VFSyhhLGIsYykgZnNlZWtvKGEsYixjKQotI2RlZmluZSBDS0ZU RUxMKGEpIGZ0ZWxsbyhhKQotI2VuZGlmCS8qIElSSVggKi8KLSNlbHNlICAvKiBOb3QgIF9MQVJH RUZJTEVfU09VUkNFICovCi0jZGVmaW5lIENLRlNFRUsoYSxiLGMpIGZzZWVrKGEsYixjKQotI2Rl ZmluZSBDS0ZURUxMKGEpIGZ0ZWxsKGEpCi0vKiBTZWUgYmVsb3cgdGhlIG5leHQgc2VjdGlvbiBm b3IgdGhlIGNhdGNoLWFsbCBjYXNlICovCi0jZW5kaWYJLyogX0xBUkdFRklMRV9TT1VSQ0UgKi8K LQotLyogMzItYml0IG9yIDY0LWJpdCBwbGF0Zm9ybXMgKi8KLQotLyogQ0tfNjRCSVQgaXMgYSBj b21waWxlLXRpbWUgc3ltYm9sIGluZGljYXRpbmcgYSB0cnVlIDY0LWJpdCBidWlsZCAqLwotLyog bWVhbmluZyB0aGF0IGxvbmdzIGFuZCBwb2ludGVycyBhcmUgNjQgYml0cyAqLwotCi0jaWZuZGVm IFZNUwkJCQkvKiBWTVMgQWxwaGEgYW5kIElBNjQgYXJlIDMyLWJpdCEgKi8KLSNpZm5kZWYgQ0tf NjRCSVQKLSNpZmRlZiBfTFA2NAkJCQkvKiBTb2xhcmlzICovCi0jZGVmaW5lIENLXzY0QklUCi0j ZWxzZQotI2lmZGVmIF9fTFA2NF9fCQkJCS8qIE1hY09TIFggMTAuNCAob3IgX0xQNjQsX19wcGM2 NF9fKSAqLwotI2RlZmluZSBDS182NEJJVAotI2Vsc2UKLSNpZmRlZiBfX2FyY2g2NF9fCQkJLyog Z2NjIGFscGhhLCBzcGFyYyAqLwotI2RlZmluZSBDS182NEJJVAotI2Vsc2UKLSNpZmRlZiBfX2Fs cGhhCQkJCS8qIEFscGhhIGRlY2MgKG9yIF9fQUxQSEEpICovCi0jZGVmaW5lIENLXzY0QklUCi0j ZWxzZQotI2lmZGVmIF9fYW1kNjQJCQkJLyogQU1EIHg4Nl82NCAob3IgX194ODZfNjQpICovCi0j ZGVmaW5lIENLXzY0QklUCi0jZWxzZQotI2lmZGVmIF9faWE2NAkJCQkvKiBJbnRlbCBJQTY0ICov Ci0jaWZuZGVmIEhQVVgKLSNkZWZpbmUgQ0tfNjRCSVQKLSNlbmRpZgkvKiBIUFVYICovCi0jZW5k aWYJLyogX19pYTY0ICovCi0jZW5kaWYJLyogX19hbWQ2NCAqLwotI2VuZGlmCS8qIF9fYWxwaGEg Ki8KLSNlbmRpZgkvKiBfX2FyY2g2NF9fICovCi0jZW5kaWYJLyogX19MUDY0X18gKi8KLSNlbmRp ZgkvKiBfTFA2NCAqLwotI2VuZGlmCS8qIENLXzY0QklUICovCi0jZW5kaWYJLyogVk1TICovCi0K LSNpZm5kZWYgQ0tfT0ZGX1QKLSNpZmRlZiBDS182NEJJVAotI2RlZmluZSBDS19PRkZfVCBvZmZf dAkJCS8qIFRoaXMgaGFzIHRvIGJlIHNpZ25lZCAqLwotI2Vsc2UgIC8qIENLXzY0QklUICovCi0j ZGVmaW5lIENLX09GRl9UIGxvbmcJCQkvKiBTaWduZWQgKi8KLSNlbmRpZgkvKiBDS182NEJJVCAq LwotI2VuZGlmCS8qIENLX09GRl9UICovCi0KLSNpZm5kZWYgVExPRwotI2RlZmluZSB0bG9nKGEs YixjLGQpCi0jZWxzZQotI2lmbmRlZiBDS0NNQUkKLS8qIERlYnVnZ2luZyBpbmNsdWRlZC4gIERl Y2xhcmUgZGVidWcgbG9nIGZsYWcgaW4gbWFpbiBwcm9ncmFtIG9ubHkuICovCi1leHRlcm4gaW50 IHRyYWxvZywgdGxvZ2ZtdDsKLSNlbmRpZiAvKiBDS0NNQUkgKi8KLV9QUk9UT1RZUChWT0lEIGRv dGxvZywoaW50LCBjaGFyICosIGNoYXIgKiwgQ0tfT0ZGX1QpKTsKLSNkZWZpbmUgdGxvZyhhLGIs YyxkKSBpZiAodHJhbG9nICYmIHRsb2dmbXQpIGRvdGxvZyhhLGIsYywoQ0tfT0ZGX1QpZCkKLV9Q Uk9UT1RZUChWT0lEIGRveGxvZywoaW50LCBjaGFyICosIENLX09GRl9ULCBpbnQsIGludCwgY2hh ciAqKSk7Ci0jZW5kaWYgLyogVExPRyAqLwotCi0jaWZuZGVmIERFQlVHCi0vKiBDb21waWxlIGFs bCB0aGUgZGVidWcoKSBzdGF0ZW1lbnRzIGF3YXkuICBTYXZlcyBhIGxvdCBvZiBzcGFjZSBhbmQg dGltZS4gKi8KLSNkZWZpbmUgZGVidWcoYSxiLGMsZCkKLSNkZWZpbmUgY2toZXhkdW1wKGEsYixj KQotLyogTm93IGRlZmluZSB0aGUgZGVidWcoKSBtYWNyby4gKi8KLSNlbHNlIC8qIERFQlVHICov Ci1fUFJPVE9UWVAoaW50IGRvZGVidWcsKGludCxjaGFyICosY2hhciAqLENLX09GRl9UKSk7Ci1f UFJPVE9UWVAoaW50IGRvaGV4ZHVtcCwoQ0hBUiAqLENIQVIgKixpbnQpKTsKLSNpZmRlZiBJRkRF QlVHCi0vKiBVc2UgdGhpcyBmb3JtIHRvIGF2b2lkIGZ1bmN0aW9uIGNhbGxzOiAqLwotI2lmZGVm IENPTU1FTlQKLSNkZWZpbmUgZGVidWcoYSxiLGMsZCkgaWYgKGRlYmxvZykgZG9kZWJ1ZyhhLGIs KGNoYXIgKikoYyksKENLX09GRl9UKShkKSkKLSNkZWZpbmUgY2toZXhkdW1wKGEsYixjKSBpZiAo ZGVibG9nKSBkb2hleGR1bXAoKENIQVIgKikoYSksKENIQVIgKikoYiksYykKLSNlbHNlCi0jaWZk ZWYgQ0tfQU5TSUMKLSNkZWZpbmUgZGVidWcoYSxiLGMsZCkgXAotKCh2b2lkKShkZWJsb2c/ZG9k ZWJ1ZyhhLGIsKGNoYXIgKikoYyksKENLX09GRl9UKShkKSk6MCkpCi0jZGVmaW5lIGNraGV4ZHVt cChhLGIsYykgXAotKCh2b2lkKShkZWJsb2c/ZG9oZXhkdW1wKChDSEFSICopKGEpLChDSEFSICop KGIpLGMpOjApKQotI2Vsc2UKLSNkZWZpbmUgZGVidWcoYSxiLGMsZCkgKGRlYmxvZz9kb2RlYnVn KGEsYiwoY2hhciAqKShjKSwoQ0tfT0ZGX1QpKGQpKTowKQotI2RlZmluZSBja2hleGR1bXAoYSxi LGMpIChkZWJsb2c/ZG9oZXhkdW1wKChDSEFSICopKGEpLChDSEFSICopKGIpLGMpOjApCi0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZWxzZSAvKiBJRkRFQlVH ICovCi0vKiBVc2UgdGhpcyBmb3JtIHRvIHNhdmUgc3BhY2U6ICovCi0jZGVmaW5lIGRlYnVnKGEs YixjLGQpIGRvZGVidWcoYSxiLChjaGFyICopKGMpLChDS19PRkZfVCkoZCkpCi0jZGVmaW5lIGNr aGV4ZHVtcChhLGIsYykgZG9oZXhkdW1wKChDSEFSICopKGEpLChDSEFSICopKGIpLGMpCi0jZW5k aWYgLyogSUZERUJVRyAqLwotI2VuZGlmIC8qIERFQlVHICovCi0KLQotLyogU3RydWN0dXJlIGRl ZmluaXRpb25zIGZvciBLZXJtaXQgZmlsZSBhdHRyaWJ1dGVzICovCi0vKiBBbGwgc3RyaW5ncyBj b21lIGFzIHBvaW50ZXIgYW5kIGxlbmd0aCBjb21iaW5hdGlvbnMgKi8KLS8qIEVtcHR5IHN0cmlu ZyAob3IgZm9yIG51bWVyaWMgdmFyaWFibGVzLCAtMSkgPSB1bnVzZWQgYXR0cmlidXRlLiAqLwot Ci1zdHJ1Y3QgenN0ciB7ICAgICAgICAgICAgIC8qIHN0cmluZyBmb3JtYXQgKi8KLSAgICBpbnQg bGVuOwkgICAgICAgICAgLyogbGVuZ3RoICovCi0gICAgY2hhciAqdmFsOyAgICAgICAgICAgIC8q IHZhbHVlICovCi19OwotCi1zdHJ1Y3QgemF0dHIgeyAgICAgICAgICAgIC8qIEtlcm1pdCBGaWxl IEF0dHJpYnV0ZSBzdHJ1Y3R1cmUgKi8KLSAgICBDS19PRkZfVCBsZW5ndGhrOwkgIC8qICghKSBm aWxlIGxlbmd0aCBpbiBLICovCi0gICAgc3RydWN0IHpzdHIgdHlwZTsgICAgIC8qICgiKSBmaWxl IHR5cGUgKHRleHQgb3IgYmluYXJ5KSAqLwotICAgIHN0cnVjdCB6c3RyIGRhdGU7ICAgICAvKiAo IykgZmlsZSBjcmVhdGlvbiBkYXRlIHl5eXltbWRkWyBoaDptbVs6c3NdXSAqLwotICAgIHN0cnVj dCB6c3RyIGNyZWF0b3I7ICAvKiAoJCkgZmlsZSBjcmVhdG9yIGlkICovCi0gICAgc3RydWN0IHpz dHIgYWNjb3VudDsgIC8qICglKSBmaWxlIGFjY291bnQgKi8KLSAgICBzdHJ1Y3QgenN0ciBhcmVh OyAgICAgLyogKCYpIGFyZWEgKGUuZy4gZGlyZWN0b3J5KSBmb3IgZmlsZSAqLwotICAgIHN0cnVj dCB6c3RyIHBhc3N3b3JkOyAvKiAoJykgcGFzc3dvcmQgZm9yIGFyZWEgKi8KLSAgICBsb25nIGJs a3NpemU7ICAgICAgICAgLyogKCgpIGZpbGUgYmxvY2tzaXplICovCi0gICAgc3RydWN0IHpzdHIg eGFjY2VzczsgIC8qICgpKSBmaWxlIGFjY2VzczogbmV3LCBzdXBlcnNlZGUsIGFwcGVuZCwgd2Fy biAqLwotICAgIHN0cnVjdCB6c3RyIGVuY29kaW5nOyAvKiAoKikgZW5jb2RpbmcgKHRyYW5zZmVy IHN5bnRheCkgKi8KLSAgICBzdHJ1Y3QgenN0ciBkaXNwOyAgICAgLyogKCspIGRpc3Bvc2l0aW9u IChtYWlsLCBtZXNzYWdlLCBwcmludCwgZXRjKSAqLwotICAgIHN0cnVjdCB6c3RyIGxwcm90ZWN0 OyAvKiAoLCkgcHJvdGVjdGlvbiAobG9jYWwgc3ludGF4KSAqLwotICAgIHN0cnVjdCB6c3RyIGdw cm90ZWN0OyAvKiAoLSkgcHJvdGVjdGlvbiAoZ2VuZXJpYyBzeW50YXgpICovCi0gICAgc3RydWN0 IHpzdHIgc3lzdGVtaWQ7IC8qICguKSBJRCBmb3Igc3lzdGVtIG9mIG9yaWdpbiAqLwotICAgIHN0 cnVjdCB6c3RyIHJlY2ZtOyAgICAvKiAoLykgcmVjb3JkIGZvcm1hdCAqLwotICAgIHN0cnVjdCB6 c3RyIHN5c3BhcmFtOyAvKiAoMCkgc3lzdGVtLWRlcGVuZGVudCBwYXJhbWV0ZXIgc3RyaW5nICov Ci0gICAgQ0tfT0ZGX1QgbGVuZ3RoOyAgICAgIC8qICgxKSBleGFjdCBsZW5ndGggb24gc3lzdGVt IG9mIG9yaWdpbiAqLwotICAgIHN0cnVjdCB6c3RyIGNoYXJzZXQ7ICAvKiAoMikgdHJhbnNmZXIg c3ludGF4IGNoYXJhY3RlciBzZXQgKi8KLSNpZmRlZiBPUzIKLSAgICBzdHJ1Y3QgenN0ciBsb25n bmFtZTsgLyogT1MvMiBsb25nbmFtZSBpZiBhcHBsaWNhYmxlICovCi0jZW5kaWYgLyogT1MyICov Ci0gICAgc3RydWN0IHpzdHIgcmVwbHk7ICAgIC8qIFRoaXMgZ29lcyBsYXN0LCB1c2VkIGZvciBh dHRyaWJ1dGUgcmVwbHkgKi8KLX07Ci0KLS8qIEtlcm1pdCBmaWxlIGluZm9ybWF0aW9uIHN0cnVj dHVyZSAqLwotCi1zdHJ1Y3QgZmlsaW5mbyB7Ci0gIGludCBiczsJCQkJLyogQmxvY2tzaXplICov Ci0gIGludCBjczsJCQkJLyogQ2hhcmFjdGVyIHNldCAqLwotICBsb25nIHJsOwkJCQkvKiBSZWNv cmQgbGVuZ3RoICovCi0gIGludCBvcmc7CQkJCS8qIE9yZ2FuaXphdGlvbiAqLwotICBpbnQgZm10 OwkJCQkvKiBSZWNvcmQgZm9ybWF0ICovCi0gIGludCBjYzsJCQkJLyogQ2FycmlhZ2UgY29udHJv bCAqLwotICBpbnQgdHlwOwkJCQkvKiBUeXBlICh0ZXh0L2JpbmFyeSkgKi8KLSAgaW50IGRzcDsJ CQkJLyogRGlzcG9zaXRpb24gKi8KLSAgY2hhciAqb3Nfc3BlY2lmaWM7CQkJLyogT1Mtc3BlY2lm aWMgYXR0cmlidXRlcyAqLwotI2lmZGVmIE9TMgotICB1bnNpZ25lZCBsb25nIGludCBsYmxvcHRz OwkJLyogTEFCRUxFRCBGSUxFIG9wdGlvbnMgYml0bWFzayAqLwotI2Vsc2UKLSAgaW50IGxibG9w dHM7Ci0jZW5kaWYgLyogT1MyICovCi19OwotCi0KLS8qCi0gIERhdGEgdHlwZSBmb3IgcGlkcy4g IElmIHlvdXIgc3lzdGVtIHVzZXMgYSBkaWZmZXJlbnQgdHlwZSwgcHV0IHNvbWV0aGluZwotICBs aWtlIC1EUElEX1Q9cGlkX3Qgb24gY29tbWFuZCBsaW5lLCBvciBvdmVycmlkZSBoZXJlLgotKi8K LSNpZm5kZWYgUElEX1QKLSNkZWZpbmUgUElEX1QgaW50Ci0jZW5kaWYgLyogUElEX1QgKi8KLS8q Ci0gIERhdGEgdHlwZXMgZm9yIHVpZHMgYW5kIGdpZHMuICBTYW1lIGRlYWwgYXMgZm9yIHBpZHMu Ci0gIFdvdWxkbid0IGJlIG5pY2UgaWYgdGhlcmUgd2FzIGEgcHJlcHJvY2Vzc29yIHRlc3QgdG8g ZmluZCBvdXQgaWYgYQotICB0eXBlZGVmIGV4aXN0ZWQ/Ci0qLwotI2lmZGVmIFZNUwotLyogTm90 IHVzZWQgaW4gVk1TIHNvIHdobyBjYXJlcyAqLwotI2RlZmluZSBVSURfVCBpbnQKLSNkZWZpbmUg R0lEX1QgaW50Ci0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBQT1NJWAotLyogT3Igd291bGQg aXQgYmUgYmV0dGVyIChvciB3b3JzZT8pIHRvIHVzZSBfUE9TSVhfU09VUkNFIGhlcmU/ICovCi0j aWZuZGVmIFVJRF9UCi0jZGVmaW5lIFVJRF9UIHVpZF90Ci0jZW5kaWYgLyogVUlEX1QgKi8KLSNp Zm5kZWYgR0lEX1QKLSNkZWZpbmUgR0lEX1QgZ2lkX3QKLSNlbmRpZiAvKiBHSURfVCAqLwotI2Vs c2UgLyogTm90IFBPU0lYICovCi0jaWZkZWYgU1ZSNAotLyogU1ZSNCBhbmQgbGF0ZXIgaGF2ZSB1 aWRfdCBhbmQgZ2lkX3QuICovCi0vKiBTVlIzIGFuZCBlYXJsaWVyIHVzZSBpbnQsIG9yIHVuc2ln bmVkIHNob3J0LCBvci4uLi4gKi8KLSNpZm5kZWYgVUlEX1QKLSNkZWZpbmUgVUlEX1QgdWlkX3QK LSNlbmRpZiAvKiBVSURfVCAqLwotI2lmbmRlZiBHSURfVAotI2RlZmluZSBHSURfVCBnaWRfdAot I2VuZGlmIC8qIEdJRF9UICovCi0jZWxzZSAvKiBOb3QgU1ZSNCAqLwotI2lmZGVmIEJTRDQzCi0j aWZuZGVmIFVJRF9UCi0jZGVmaW5lIFVJRF9UIHVpZF90Ci0jZW5kaWYgLyogVUlEX1QgKi8KLSNp Zm5kZWYgR0lEX1QKLSNkZWZpbmUgR0lEX1QgZ2lkX3QKLSNlbmRpZiAvKiBHSURfVCAqLwotI2Vs c2UgLyogTm90IEJTRDQzICovCi0vKiBEZWZhdWx0IHRoZXNlIHRvIGludCBmb3Igb2xkZXIgVU5J WCB2ZXJzaW9ucyAqLwotI2lmbmRlZiBVSURfVAotI2RlZmluZSBVSURfVCBpbnQKLSNlbmRpZiAv KiBVSURfVCAqLwotI2lmbmRlZiBHSURfVAotI2RlZmluZSBHSURfVCBpbnQKLSNlbmRpZiAvKiBH SURfVCAqLwotI2VuZGlmIC8qIEJTRDQzICovCi0jZW5kaWYgLyogU1ZSNCAgKi8KLSNlbmRpZiAv KiBQT1NJWCAqLwotCi0vKgotICBnZXRwd3VpZCgpIGFyZyB0eXBlLCB3aGljaCBpcyBub3QgbmVj ZXNzYXJpbHkgdGhlIHNhbWUgYXMgVUlEX1QsCi0gIGUuZy4gaW4gU0NPIFVOSVggU1ZSMywgaXQn cyBpbnQuCi0qLwotI2lmbmRlZiBQV0lEX1QKLSNkZWZpbmUgUFdJRF9UIFVJRF9UCi0jZW5kaWYg LyogUFdJRF9UICovCi0KLSNpZmRlZiBDS19SRURJUgotI2lmZGVmIE5FWFQKLSNkZWZpbmUgTUFD SFdBSVQKLSNlbHNlCi0jaWZkZWYgTUFDSAotI2RlZmluZSBNQUNIV0FJVAotI2VuZGlmIC8qIE1B Q0ggKi8KLSNlbmRpZiAvKiBORVhUICovCi0KLSNpZmRlZiBNQUNIV0FJVAkJCQkvKiBXQUlUX1Qg YXJndW1lbnQgZm9yIHdhaXQoKSAqLwotI2luY2x1ZGUgPHN5cy93YWl0Lmg+Ci0jZGVmaW5lIENL X1dBSVRfSAotdHlwZWRlZiB1bmlvbiB3YWl0IFdBSVRfVDsKLSNlbHNlCi0jaWZkZWYgUE9TSVgK LSNpZmRlZiBPU0YKLS8qIE9TRiB3YWl0LmggZGVmaW5lcyBCU0Qgd2FpdCBpZiBfQlNEIGlzIGRl ZmluZWQgc28gIGhpZGUgX0JTRCBmcm9tIHdhaXQuaCAqLwotI2lmZGVmIF9CU0QKLSNkZWZpbmUg Q0tfT1NGX0JTRAotI3VuZGVmICBfQlNECi0jZW5kaWYgLyogX0JTRCAqLwotI2VuZGlmIC8qIE9T RiAqLwotI2luY2x1ZGUgPHN5cy93YWl0Lmg+Ci0jZGVmaW5lIENLX1dBSVRfSAotI2lmbmRlZiBX QUlUX1QKLXR5cGVkZWYgaW50IFdBSVRfVDsKLSNlbmRpZiAvKiBXQUlUX1QgKi8KLSNpZmRlZiBD S19PU0ZfQlNECQkJLyogT1NGLzE6IFJlc3RvcmUgIF9CU0QgZGVmaW5pdGlvbiAqLwotI2RlZmlu ZSBfQlNECi0jdW5kZWYgQ0tfT1NGX0JTRAotI2VuZGlmIC8qIENLX09TRl9CU0QgKi8KLSNlbHNl IC8qICFQT1NJWCAqLwotdHlwZWRlZiBpbnQgV0FJVF9UOwotI2VuZGlmIC8qIFBPU0lYICovCi0j ZW5kaWYgLyogTUFDSFdBSVQgKi8KLSNlbHNlCi10eXBlZGVmIGludCBXQUlUX1Q7Ci0jZW5kaWYg LyogQ0tfUkVESVIgKi8KLQotLyogQXNzb3J0ZWQgb3RoZXIgYmxhaF90J3MgaGFuZGxlZCBoZXJl Li4uICovCi0KLSNpZm5kZWYgU0laRV9UCi0jZGVmaW5lIFNJWkVfVCBzaXplX3QKLSNlbmRpZiAv KiBTSVpFX1QgKi8KLQotLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgb2Ygc3lzdGVtLWRlcGVuZGVu dCBmdW5jdGlvbnMgY2FsbGFibGUgZnJvbSBhbGwgKi8KLS8qIEMtS2VybWl0IG1vZHVsZXMuICov Ci0KLS8qIEZpbGUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBzeXN0ZW0tZGVwZW5kZW50IGZpbGUg aS9vIG1vZHVsZSAqLwotCi0jaWZuZGVmIENLVkZJT19DCi0vKiBGb3Igc29tZSByZWFzb24sIHRo aXMgZG9lcyBub3QgYWdyZWUgd2l0aCBERUMgQyAqLwotX1BST1RPVFlQKCBpbnQgemtzZWxmLCAo dm9pZCkgKTsKLSNlbmRpZiAvKiBDS1ZGSU9fQyAqLwotX1BST1RPVFlQKCBpbnQgem9wZW5pLCAo aW50LCBjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCB6b3Blbm8sIChpbnQsIGNoYXIgKiwgc3Ry dWN0IHphdHRyICosIHN0cnVjdCBmaWxpbmZvICopICk7Ci1fUFJPVE9UWVAoIGludCB6Y2xvc2Us IChpbnQpICk7Ci0jaWZuZGVmIE1BQwotX1BST1RPVFlQKCBpbnQgemNoaW4sIChpbnQsIGludCAq KSApOwotI2VuZGlmIC8qIE1BQyAqLwotX1BST1RPVFlQKCBpbnQgenhpbiwgKGludCwgY2hhciAq LCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCB6c2lubCwgKGludCwgY2hhciAqLCBpbnQpICk7Ci1f UFJPVE9UWVAoIGludCB6aW5maWxsLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHpzb3V0LCAo aW50LCBjaGFyKikgKTsKLV9QUk9UT1RZUCggaW50IHpzb3V0bCwgKGludCwgY2hhciopICk7Ci1f UFJPVE9UWVAoIGludCB6c291dHgsIChpbnQsIGNoYXIqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGlu dCB6Y2hvdXQsIChpbnQsIGNoYXIpICk7Ci1fUFJPVE9UWVAoIGludCB6b3V0ZHVtcCwgKHZvaWQp ICk7Ci1fUFJPVE9UWVAoIGludCB6c3lzY21kLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQg enNoY21kLCAoY2hhciAqKSApOwotI2lmZGVmIFVOSVgKLV9QUk9UT1RZUCggaW50IHpzZXRmaWws IChpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IHpjaGtwaWQsICh1bnNpZ25lZCBsb25nKSAp OwotI2VuZGlmCS8qIFVOSVggKi8KLSNpZmRlZiBDS0VYRUMKLV9QUk9UT1RZUCggVk9JRCB6X2V4 ZWMsIChjaGFyICosIGNoYXIgKiosIGludCkgKTsKLSNlbmRpZiAvKiBDS0VYRUMgKi8KLV9QUk9U T1RZUCggaW50IGNoa2ZuLCAoaW50KSApOwotX1BST1RPVFlQKCBDS19PRkZfVCB6Y2hraSwgKGNo YXIgKikgKTsKLSNpZmRlZiBWTVNPUlVOSVgKLV9QUk9UT1RZUCggQ0tfT0ZGX1QgemdldGZzLCAo Y2hhciAqKSApOwotI2Vsc2UKLSNpZmRlZiBPUzIKLV9QUk9UT1RZUCggQ0tfT0ZGX1QgemdldGZz LCAoY2hhciAqKSApOwotI2Vsc2UKLSNkZWZpbmUgemdldGZzKGEpIHpjaGtpKGEpCi0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogVk1TT1JVTklYICovCi1fUFJPVE9UWVAoIGludCBpc3dpbGQs IChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBpc2RpciwgKGNoYXIgKikgKTsKLV9QUk9UT1RZ UCggaW50IHpjaGtvLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgemRlbGV0LCAoY2hhciAq KSApOwotX1BST1RPVFlQKCBWT0lEIHpydG9sLCAoY2hhciAqLGNoYXIgKikgKTsKLV9QUk9UT1RZ UCggVk9JRCB6bHRvciwgKGNoYXIgKixjaGFyICopICk7Ci1fUFJPVE9UWVAoIFZPSUQgenN0cmlw LCAoY2hhciAqLGNoYXIgKiopICk7Ci0jaWZkZWYgVk1TCi1fUFJPVE9UWVAoIGNoYXIgKiB6cmVs bmFtZSwgKGNoYXIgKiwgY2hhciAqKSApOwotI2VuZGlmIC8qIFZNUyAqLwotX1BST1RPVFlQKCBp bnQgemNoZGlyLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBjaGFyICogemhvbWUsICh2b2lkKSAp OwotX1BST1RPVFlQKCBjaGFyICogemd0ZGlyLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHp4 Y21kLCAoaW50LCBjaGFyICopICk7Ci0jaWZuZGVmIE1BQwotX1BST1RPVFlQKCBpbnQgemNsb3Nm LCAoaW50KSApOwotI2VuZGlmIC8qIE1BQyAqLwotI2lmZGVmIE5aWFBBTkQKLV9QUk9UT1RZUCgg aW50IG56eHBhbmQsIChjaGFyICosIGludCkgKTsKLSNlbHNlIC8qIE5aWFBBTkQgKi8KLV9QUk9U T1RZUCggaW50IHp4cGFuZCwgKGNoYXIgKikgKTsKLSNlbmRpZiAvKiBOWlhQQU5EICovCi1fUFJP VE9UWVAoIGludCB6bmV4dCwgKGNoYXIgKikgKTsKLSNpZmRlZiBaWFJFV0lORAotX1BST1RPVFlQ KCBpbnQgenhyZXdpbmQsICh2b2lkKSApOwotI2VuZGlmIC8qIFpYUkVXSU5EICovCi1fUFJPVE9U WVAoIGludCB6Y2hrc3BhLCAoY2hhciAqLCBDS19PRkZfVCkgKTsKLV9QUk9UT1RZUCggVk9JRCB6 bmV3biwgKGNoYXIgKiwgY2hhciAqKikgKTsKLV9QUk9UT1RZUCggaW50IHpyZW5hbWUsIChjaGFy ICosIGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IHpjb3B5LCAoY2hhciAqLCBjaGFyICopICk7 Ci1fUFJPVE9UWVAoIGludCB6c2F0dHIsIChzdHJ1Y3QgemF0dHIgKikgKTsKLV9QUk9UT1RZUCgg aW50IHpmcmVlLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBjaGFyICogemZjZGF0LCAoY2hhciAq KSApOwotX1BST1RPVFlQKCBpbnQgenN0aW1lLCAoY2hhciAqLCBzdHJ1Y3QgemF0dHIgKiwgaW50 KSApOwotI2lmZGVmIENLX1BFUk1TCi1fUFJPVE9UWVAoIGNoYXIgKiB6Z3Blcm0sIChjaGFyICop ICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiB6aXBlcm0sIChjaGFyICopICk7Ci0jZW5kaWYgLyogQ0tf UEVSTVMgKi8KLV9QUk9UT1RZUCggaW50IHptYWlsLCAoY2hhciAqLCBjaGFyICopICk7Ci1fUFJP VE9UWVAoIGludCB6cHJpbnQsIChjaGFyICosIGNoYXIgKikgKTsKLV9QUk9UT1RZUCggY2hhciAq IHRpbGRlX2V4cGFuZCwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IHpta2RpciwgKGNoYXIg KikgKSA7Ci1fUFJPVE9UWVAoIGludCB6ZnNlZWssIChDS19PRkZfVCkgKSA7Ci0jaWZkZWYgWkZO UUZQCi1fUFJPVE9UWVAoIHN0cnVjdCB6Zm5mcCAqIHpmbnFmcCwgKGNoYXIgKiwgaW50LCBjaGFy ICogKSApIDsKLSNlbHNlCi0jZGVmaW5lIHpmbnFmcChhLGIsYykgY2tzdHJuY3B5KGMsYSxiKQot I2VuZGlmIC8qIFpGTlFGUCAqLwotX1BST1RPVFlQKCBpbnQgenZ1c2VyLCAoY2hhciAqKSApIDsK LV9QUk9UT1RZUCggaW50IHp2cGFzcywgKGNoYXIgKikgKSA7Ci1fUFJPVE9UWVAoIFZPSUQgenZs b2dvdXQsICh2b2lkKSApIDsKLSNpZmRlZiBPUzIKLV9QUk9UT1RZUCggaW50IG9zMnNldGxvbmdu YW1lLCAoIGNoYXIgKiBmbiwgY2hhciAqIGxuICkgKSA7Ci1fUFJPVE9UWVAoIGludCBvczJnZXRs b25nbmFtZSwgKCBjaGFyICogZm4sIGNoYXIgKiogbG4gKSApIDsKLV9QUk9UT1RZUCggaW50IG9z MnJleHgsICggY2hhciAqLCBjaGFyICosIGludCApICkgOwotX1BST1RPVFlQKCBpbnQgb3MycmV4 eGZpbGUsICggY2hhciAqLCBjaGFyICosIGNoYXIgKiwgaW50KSApIDsKLV9QUk9UT1RZUCggaW50 IG9zMmdldGVhcywgKGNoYXIgKikgKSA7Ci1fUFJPVE9UWVAoIGludCBvczJzZXRlYXMsIChjaGFy ICopICkgOwotX1BST1RPVFlQKCBjaGFyICogZ2V0X29zMl92ZXJzLCAodm9pZCkgKSA7Ci1fUFJP VE9UWVAoIGludCBkb19sYWJlbF9zZW5kLCAoY2hhciAqKSApIDsKLV9QUk9UT1RZUCggaW50IGRv X2xhYmVsX3JlY3YsICh2b2lkKSApIDsKLSNpZmRlZiBPUzJNT1VTRQotX1BST1RPVFlQKCB1bnNp Z25lZCBsb25nIG9zMl9tb3VzZW9uLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggdW5zaWduZWQgbG9u ZyBvczJfbW91c2VoaWRlLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggdW5zaWduZWQgbG9uZyBvczJf bW91c2VzaG93LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggdW5zaWduZWQgbG9uZyBvczJfbW91c2Vv ZmYsICh2b2lkKSApOwotX1BST1RPVFlQKCB2b2lkIG9zMl9tb3VzZWV2dCwgKHZvaWQgKikgKTsK LV9QUk9UT1RZUCggaW50IG1vdXNlYnV0dG9uY291bnQsICh2b2lkKSk7Ci0jZW5kaWYgLyogT1My TU9VU0UgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotLyogRnVuY3Rpb25zIGZyb20gc3lzdGVtLWRl cGVuZGVudCB0ZXJtaW5hbCBpL28gbW9kdWxlICovCi0KLV9QUk9UT1RZUCggaW50IHR0b3Blbiwg KGNoYXIgKiwgaW50ICosIGludCwgaW50KSApOyAgLyogdHR5IGZ1bmN0aW9ucyAqLwotI2lmbmRl ZiBNQUMKLV9QUk9UT1RZUCggaW50IHR0Y2xvcywgKGludCkgKTsKLSNlbmRpZiAvKiBNQUMgKi8K LV9QUk9UT1RZUCggaW50IHR0aGFuZywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCB0dHJlcywg KHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCB0dHBrdCwgKGxvbmcsIGludCwgaW50KSApOwotI2lm bmRlZiBNQUMKLV9QUk9UT1RZUCggaW50IHR0dnQsIChsb25nLCBpbnQpICk7Ci0jZW5kaWYgLyog TUFDICovCi1fUFJPVE9UWVAoIGludCB0dHNzcGQsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGxvbmcg dHRnc3BkLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHR0Zmx1aSwgKHZvaWQpICk7Ci1fUFJP VE9UWVAoIGludCB0dGZsdW8sICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgdHRwdXNoYmFjaywg KENIQVIgKiwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgdHRwZWVrLCAodm9pZCkgKTsKLV9QUk9U T1RZUCggaW50IHR0Z3dzaXosICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgdHRjaGssICh2b2lk KSApOwotX1BST1RPVFlQKCBpbnQgdHR4aW4sIChpbnQsIENIQVIgKikgKTsKLV9QUk9UT1RZUCgg aW50IHR0eG91dCwgKENIQVIgKiwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgdHRvbCwgKENIQVIg KiwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgdHRvYywgKGNoYXIpICk7Ci1fUFJPVE9UWVAoIGlu dCB0dGluYywgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IHR0c2NhcnIsIChpbnQpICk7Ci1fUFJP VE9UWVAoIGludCB0dGdtZG0sICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgdHRzbmRiLCAodm9p ZCkgKTsKLV9QUk9UT1RZUCggaW50IHR0c25kbGIsICh2b2lkKSApOwotI2lmZGVmIFVOSVgKLV9Q Uk9UT1RZUCggY2hhciAqIHR0Z2xja2RpciwgKHZvaWQpICk7Ci0jZW5kaWYgLyogVU5JWCAqLwot I2lmZGVmIFBBUlNFTlNFCi0jaWZkZWYgVU5JWAotX1BST1RPVFlQKCBpbnQgdHRpbmwsIChDSEFS ICosIGludCwgaW50LCBDSEFSLCBDSEFSLCBpbnQpICk7Ci0jZWxzZQotI2lmZGVmIFZNUwotX1BS T1RPVFlQKCBpbnQgdHRpbmwsIChDSEFSICosIGludCwgaW50LCBDSEFSLCBDSEFSLCBpbnQpICk7 Ci0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLV9QUk9UT1RZUCggaW50IHR0aW5sLCAoQ0hBUiAqLCBp bnQsIGludCwgQ0hBUiwgQ0hBUiwgaW50KSApOwotI2Vsc2UKLSNpZmRlZiBPUzIKLV9QUk9UT1RZ UCggaW50IHR0aW5sLCAoQ0hBUiAqLCBpbnQsIGludCwgQ0hBUiwgQ0hBUiwgaW50KSApOwotI2Vs c2UKLSNpZmRlZiBPU0sKLV9QUk9UT1RZUCggaW50IHR0aW5sLCAoQ0hBUiAqLCBpbnQsIGludCwg Q0hBUiwgQ0hBUiwgaW50KSApOwotI2Vsc2UKLV9QUk9UT1RZUCggaW50IHR0aW5sLCAoQ0hBUiAq LCBpbnQsIGludCwgQ0hBUiwgQ0hBUikgKTsKLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBP UzIgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyog VU5JWCAqLwotI2Vsc2UgLyogISBQQVJTRU5TRSAqLwotX1BST1RPVFlQKCBpbnQgdHRpbmwsIChD SEFSICosIGludCwgaW50LCBDSEFSKSApOwotI2VuZGlmIC8qIFBBUlNFTlNFICovCi0KLS8qIFhZ Wk1PREVNIHN1cHBvcnQgKi8KLQotLyoKLSAgQ0tfWFlaIGVuYWJsZXMgdGhlIHZhcmlvdXMgY29t bWFuZHMgYW5kIGRhdGEgc3RydWN0dXJlcy4KLSAgWFlaX0lOVEVSTkFMIG1lYW5zIHRoZXNlIHBy b3RvY29scyBhcmUgYnVpbHQtaW47IGlmIG5vdCBkZWZpbmVkLAotICB0aGVuIHRoZXkgYXJlIGV4 dGVybmFsLiAgWFlaX0RMTCBpcyB1c2VkIHRvIGluZGljYXRlIGEgc2VwYXJhdGUKLSAgbG9hZGFi bGUgbGlicmFyeSBjb250YWluaW5nIHRoZSBYWVptb2RlbSBwcm90b2NvbCBjb2RlLgotKi8KLSNp ZmRlZiBwZHAxMQkJCQkvKiBObyByb29tIGZvciB0aGlzIGluIFBEUC0xMSAqLwotI2RlZmluZSBO T0NLWFlaCi0jZW5kaWYgLyogcGRwMTEgKi8KLQotI2lmbmRlZiBOT0NLWFlaCQkJCS8qIEFsdGVy bmF0aXZlIHByb3RvY29scyAqLwotI2lmbmRlZiBDS19YWVoKLSNpZmRlZiBVTklYCi0jZGVmaW5l IENLX1hZWgotI2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUgQ0tfWFlaCi0jaWZuZGVmIE5PWFla RExMCi0jZGVmaW5lIFhZWl9JTlRFUk5BTAkJCS8qIEludGVybmFsIGFuZCBETEwgKi8KLSNkZWZp bmUgWFlaX0RMTAotI2VuZGlmIC8qIE5PWFlaRExMICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5k aWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIENLX1hZWiAqLwotI2VuZGlmIC8qIE5PQ0tYWVogKi8K LQotI2lmZGVmIFhZWl9JTlRFUk5BTAkJCS8qIFRoaXMgZW5zdXJlcyB0aGF0IFhZWl9JTlRFUk5B TCAqLwotI2lmbmRlZiBDS19YWVoJCQkJLyogaXMgZGVmaW5lZCBvbmx5IGlmIENLX1hZWiBpcyB0 b28gKi8KLSN1bmRlZiBYWVpfSU5URVJOQUwKLSNlbmRpZiAvKiBDS19YWVogKi8KLSNlbmRpZiAv KiBYWVpfSU5URVJOQUwgKi8KLSNpZmRlZiBYWVpfRExMCQkJCS8qIFRoaXMgZW5zdXJlcyBYWVpf RExMIGlzIGRlZmluZWQgKi8KLSNpZm5kZWYgWFlaX0lOVEVSTkFMCQkJLyogb25seSBpZiBYWVpf SU5URVJOQUwgaXMgdG9vICovCi0jdW5kZWYgWFlaX0RMTAotI2VuZGlmIC8qIFhZWl9JTlRFUk5B TCAqLwotI2VuZGlmIC8qIFhZWl9ETEwgKi8KLQotLyogQ29uc29sZSBmdW5jdGlvbnMgKi8KLQot X1BST1RPVFlQKCBpbnQgY29uZ20sICh2b2lkKSApOwotI2lmZGVmIENPTU1FTlQKLV9QUk9UT1RZ UCggVk9JRCBjb25pbnQsIChTSUdUWVAgKCopKGludCwgaW50KSwgU0lHVFlQICgqKShpbnQsIGlu dCkpICk7Ci0jZWxzZQotX1BST1RPVFlQKCBWT0lEIGNvbmludCwgKFNJR1RZUCAoKikoaW50KSwg U0lHVFlQICgqKShpbnQpKSApOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLV9QUk9UT1RZUCggVk9J RCBjb25ub2ksICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgY29uY2IsIChjaGFyKSApOwotI2lm ZGVmIENPTkdTUEQKLV9QUk9UT1RZUCggbG9uZyBjb25nc3BkLCAodm9pZCkgKTsKLSNlbmRpZiAv KiBDT05HU1BEICovCi1fUFJPVE9UWVAoIGludCBjb25iaW4sIChjaGFyKSApOwotX1BST1RPVFlQ KCBpbnQgY29ucmVzLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGNvbm9jLCAoY2hhcikgKTsK LV9QUk9UT1RZUCggaW50IGNvbnhvLCAoaW50LCBjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBj b25vbCwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IGNvbm9sYSwgKGNoYXIgKltdKSApOwot X1BST1RPVFlQKCBpbnQgY29ub2xsLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgY29uY2hr LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGNvbmluYywgKGludCkgKTsKLV9QUk9UT1RZUCgg Y2hhciAqIGNvbmtiZywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBwc3VzcGVuZCwgKGludCkg KTsKLV9QUk9UT1RZUCggaW50IHByaXZfaW5pLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHBy aXZfb24sICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgcHJpdl9vZmYsICh2b2lkKSApOwotX1BS T1RPVFlQKCBpbnQgcHJpdl9jYW4sICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgcHJpdl9jaGss ICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgcHJpdl9vcG4sIChjaGFyICosIGludCkgKTsKLQot X1BST1RPVFlQKCBpbnQgc3lzaW5pdCwgKHZvaWQpICk7CS8qIE1pc2MgS2VybWl0IGZ1bmN0aW9u cyAqLwotX1BST1RPVFlQKCBpbnQgc3lzY2xlYW51cCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGlu dCBtc2xlZXAsIChpbnQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgcnRpbWVyLCAodm9pZCkgKTsKLV9Q Uk9UT1RZUCggaW50IGd0aW1lciwgKHZvaWQpICk7Ci0jaWZkZWYgR0ZUSU1FUgotX1BST1RPVFlQ KCBWT0lEIHJmdGltZXIsICh2b2lkKSApOwotX1BST1RPVFlQKCBDS0ZMT0FUIGdmdGltZXIsICh2 b2lkKSApOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLV9QUk9UT1RZUCggVk9JRCB0dGltb2ZmLCAo dm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCB6dGltZSwgKGNoYXIgKiopICk7Ci1fUFJPVE9UWVAo IGludCBwYXJjaGssIChDSEFSICosIENIQVIsIGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCBkb2V4 aXQsIChpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IGFza21vcmUsICh2b2lkKSApOwotX1BS T1RPVFlQKCBWT0lEIGZhdGFsLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBWT0lEIGZhdGFsMiwg KGNoYXIgKiwgY2hhciAqKSApOwotI2lmZGVmIFZNUwotX1BST1RPVFlQKCBpbnQgY2tfY2FuY2lv LCAodm9pZCkgKTsKLSNlbmRpZiAvKiBWTVMgKi8KLQotLyogS2V5IG1hcHBpbmcgc3VwcG9ydCAq LwotCi0jaWZkZWYgTk9JQ1AKLSNpZm5kZWYgTk9TRVRLRVkKLSNkZWZpbmUgTk9TRVRLRVkKLSNl bmRpZiAvKiBOT1NFVEtFWSAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZmRlZiBNQUMKLSNp Zm5kZWYgTk9TRVRLRVkKLSNkZWZpbmUgTk9TRVRLRVkKLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwot I2VuZGlmIC8qIE1BQyAqLwotCi1fUFJPVE9UWVAoIGludCBjb25na3MsIChpbnQpICk7Ci0jaWZk ZWYgT1MyCi0vKiBPUzIgcmVxdWlyZXMgdGhlc2UgZGVmaW5pdGlvbnMgZXZlbiBpZiBTRVQgS0VZ IGlzIG5vdCBiZWluZyBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgS01TSVpFIDg5MTYKLXR5cGVkZWYg VUxPTkcgS0VZOwotdHlwZWRlZiBDSEFSICpNQUNSTzsKLWV4dGVybiBpbnQgd2lkZXJlc3VsdDsK LSNlbHNlIC8qIE5vdCBPUzIgKi8KLSNpZm5kZWYgTk9TRVRLRVkKLS8qCi0gIENhdGNoLWFsbCBm b3Igc3lzdGVtcyB3aGVyZSB3ZSBkb24ndCBrbm93IGhvdyB0byByZWFkIGtleWJvYXJkIHNjYW4K LSAgY29kZXMgPiAyNTUuCi0qLwotI2RlZmluZSBLTVNJWkUgMjU2Ci0vKiBOb3RlOiBDSEFSIChp LmUuIHVuc2lnbmVkIGNoYXIpIGlzIHZlcnkgaW1wb3J0YW50IGhlcmUuICovCi10eXBlZGVmIENI QVIgS0VZOwotdHlwZWRlZiBDSEFSICogTUFDUk87Ci0jZGVmaW5lIGNvbmdrcyBjb25pbmMKLSNl bmRpZiAvKiBOT1NFVEtFWSAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIE9TMgotI2lm bmRlZiBOT0tWRVJCUwkJCS8qIE5vIFxLdmVyYnMgdW5sZXNzLi4uICovCi0jZGVmaW5lIE5PS1ZF UkJTCi0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBO T0tWRVJCUwotI2lmZGVmIE9TMgotLyoKLSAgTm90ZTogdGhpcyB2YWx1ZSBjaG9zZW4gdG8gYmUg YmlnZ2VyIHRoYW4gUEMgQklPUyBrZXkgbW9kaWZpZXIgYml0cywKLSAgYnV0IHN0aWxsIGZpdCBp biAxNiBiaXRzIHdpdGhvdXQgYWZmZWN0aW5nIHNpZ24uCi0KLSAgQXMgb2YgSzk1IDEuMS41LCB0 aGlzIG5vIGxvbmdlciBmaXRzIGluIDE2IGJpdHMsIGdvb2QgdGhpbmcgd2UgYXJlIDMyIGJpdC4K LSovCi0jZGVmaW5lIEZfTUFDUk8gMHgyMDAwICAgICAgICAgIC8qIEJpdCBpbmRpY2F0aW5nIGEg bWFjcm8gaW5kaWNlICovCi0jZGVmaW5lIElTX01BQ1JPKHgpICh4ICYgRl9NQUNSTykKLSNkZWZp bmUgRl9LVkVSQiAweDQwMDAJCQkvKiBCaXQgaW5kaWNhdGluZyBhIGtleWJvYXJkIHZlcmIgKi8K LSNkZWZpbmUgSVNfS1ZFUkIoeCkgKHggJiBGX0tWRVJCKQkvKiBUZXN0IHRoaXMgYml0ICovCi0j ZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLQotI2RlZmluZSBGX0VTQyAg IDB4ODAwMAkJLyogQml0IGluZGljYXRpbmcgRVNDIGNoYXIgY29tYmluYXRpb24gKi8KLSNkZWZp bmUgSVNfRVNDKHgpICh4ICYgRl9FU0MpCi0jZGVmaW5lIEZfQ1NJICAgMHgxMDAwMAkJLyogQml0 IGluZGljYXRpbmcgQ1NJIGNoYXIgY29tYmluYXRpb24gKi8KLSNkZWZpbmUgSVNfQ1NJKHgpICh4 ICYgRl9DU0kpCi0KLSNpZmRlZiBOT1NQTAkJCQkvKiBUaGlzIG1pZ2h0IGJlIG92ZXJraWxsLi4g Ki8KLSNpZm5kZWYgTk9LVkVSQlMJCQkvKiBOb3QgYWxsIFxLdmVyYnMgcmVxdWlyZSAqLwotI2Rl ZmluZSBOT0tWRVJCUwkJCS8qIHRoZSBzY3JpcHQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuICovCi0j ZW5kaWYgLyogTk9LVkVSQlMgKi8KLSNpZm5kZWYgTk9UQUtFQVJHUwotI2RlZmluZSBOT1RBS0VB UkdTCi0jZW5kaWYgLyogTk9UQUtFQVJHUyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLS8qCi0g IEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHN5c3RlbSBhbmQgbGlicmFyeSBmdW5jdGlvbnMuCi0q LwotI2lmZGVmIF9QT1NJWF9TT1VSQ0UKLSNpZm5kZWYgVk1TCi0jaWZuZGVmIE1BQwotI2RlZmlu ZSBDS19BTlNJTElCUwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlm IC8qIF9QT1NJWF9TT1VSQ0UgKi8KLQotI2lmZGVmIE5FWFQKLSNkZWZpbmUgQ0tfQU5TSUxJQlMK LSNlbmRpZiAvKiBORVhUICovCi0KLSNpZmRlZiBTVlI0Ci0jZGVmaW5lIENLX0FOU0lMSUJTCi0j ZW5kaWYgLyogU1ZSNCAqLwotCi0jaWZkZWYgU1RSQVRVUwkJCQkvKiBTdHJhdHVzIFZPUyB1c2Vz IEFOU0kgbGlicmFyaWVzICovCi0jZGVmaW5lIENLX0FOU0lMSUJTCi0jZW5kaWYgLyogU1RSQVRV UyAqLwotCi0jaWZkZWYgT1MyCi0jZGVmaW5lIENLX0FOU0lMSUJTCi0jaWZuZGVmIE5PQ1VSU0VT Ci0jZGVmaW5lIE1ZQ1VSU0VTCi0jZW5kaWYgLyogTk9DVVJTRVMgKi8KLSNkZWZpbmUgQ0tfUlRT Q1RTCi0jaWZkZWYgX19JQk1DX18KLSNkZWZpbmUgU19JRk1UIDB4RjAwMAotI2RlZmluZSB0aW1l em9uZSBfdGltZXpvbmUKLSNlbmRpZiAvKiBfX0lCTUNfXyAqLwotI2luY2x1ZGUgPGZjbnRsLmg+ Ci0jaW5jbHVkZSA8aW8uaD4KLSNpZmRlZiBfX0VNWF9fCi0jaWZuZGVmIF9fMzJCSVRfXwotI2Rl ZmluZSBfXzMyQklUX18KLSNlbmRpZiAvKiBfXzMyQklUX18gKi8KLSNpbmNsdWRlIDxzeXMvdGlt ZWIuaD4KLSNlbHNlIC8qIF9fRU1YX18gKi8KLSNpbmNsdWRlIDxkaXJlY3QuaD4KLSN1bmRlZiBT SUdBTFJNCi0jaWZuZGVmIFNJR1VTUjEKLSNkZWZpbmUgU0lHVVNSMSA3Ci0jZW5kaWYgLyogU0lH VVNSMSAqLwotI2RlZmluZSBTSUdBTFJNIFNJR1VTUjEKLV9QUk9UT1RZUCggdW5zaWduZWQgYWxh cm0sICh1bnNpZ25lZCkgKTsKLV9QUk9UT1RZUCggdW5zaWduZWQgc2xlZXAsICh1bnNpZ25lZCkg KTsKLSNlbmRpZiAvKiBfX0VNWF9fICovCi1fUFJPVE9UWVAoIHVuc2lnbmVkIGxvbmcgemRza3Nw YWNlLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgemNoZHNrLCAoaW50KSApOwotX1BST1RPVFlQ KCBpbnQgY29uaW5jcmF3LCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgdHRpc2NvbSwgKGludCBm KSApOwotX1BST1RPVFlQKCBpbnQgSXNGaWxlTmFtZVZhbGlkLCAoY2hhciAqKSApOwotX1BST1RP VFlQKCB2b2lkIENoYW5nZU5hbWVGb3JGQVQsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGNoYXIg KkdldExvYWRQYXRoLCAodm9pZCkgKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotLyogRnVsbHNjcmVl biBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgaXRlbXMuLi4gKi8KLQotI2lmbmRlZiBOT0NVUlNFUwot I2lmZGVmIENLX05DVVJTRVMJCQkvKiBDS19OQ1VSU0VTIGltcGxpZXMgQ0tfQ1VSU0VTICovCi0j aWZuZGVmIENLX0NVUlNFUwotI2RlZmluZSBDS19DVVJTRVMKLSNlbmRpZiAvKiBDS19DVVJTRVMg Ki8KLSNlbmRpZiAvKiBDS19OQ1VSU0VTICovCi0KLSNpZmRlZiBNWUNVUlNFUwkJCQkvKiBNWUNV UlNFUyBpbXBsaWVzIENLX0NVUlNFUyAqLwotI2lmbmRlZiBDS19DVVJTRVMKLSNkZWZpbmUgQ0tf Q1VSU0VTCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0jZW5kaWYgLyogTVlDVVJTRVMgKi8KLSNl bmRpZiAvKiBOT0NVUlNFUyAqLwotCi0jaWZkZWYgTk9DVVJTRVMKLSNpZmRlZiBDS19DVVJTRVMK LSN1bmRlZiBDS19DVVJTRVMKLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLSNpZm5kZWYgTk9ESVNQ TEFZCi0jZGVmaW5lIE5PRElTUExBWQotI2VuZGlmIC8qIE5PRElTUExBWSAqLwotI2VuZGlmIC8q IE5PQ1VSU0VTICovCi0KLSNpZmRlZiBDS19DVVJTRVMKLS8qCi0gIFRoZSBDS19XUkVGUkVTSCBz eW1ib2wgaXMgZGVmaW5lZCBpZiB0aGUgY3Vyc2VzIGxpYnJhcnkgcHJvdmlkZXMKLSAgY2xlYXJv aygpIGFuZCB3cmVmcmVzaCgpIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHVzZWQgaW4gcmVwYWludGlu ZwotICB0aGUgc2NyZWVuLgotKi8KLSNpZmRlZiBOT1dSRUZSRVNICQkJLyogT3ZlcnJpZGUgQ0tf V1JFRlJFU0ggKi8KLQotI2lmZGVmIENLX1dSRUZSRVNICQkJLyogSWYgdGhpcyBpcyBkZWZpbmVk LCAqLwotI3VuZGVmIENLX1dSRUZSRVNICQkJLyogdW5kZWZpbmUgaXQuICovCi0jZW5kaWYgLyog Q0tfV1JFRlJFU0ggKi8KLQotI2Vsc2UgLyogIU5PV1JFRlJFU0ggKi8JCQkvKiBObyBvdmVycmlk ZS4uLiAqLwotCi0jaWZuZGVmIENLX1dSRUZSRVNICQkJLyogSWYgQ0tfV1JFRlJFU0ggbm90IGRl ZmluZWQgKi8KLS8qCi0gIEF1dG9tYXRpY2FsbHkgZGVmaW5lIGl0IGZvciBzeXN0ZW1zIGtub3du IHRvIGhhdmUgaXQgLi4uCi0qLwotI2lmZGVmIFZNUwkJCQkvKiBERUMgKE9wZW4pVk1TIGhhcyBp dCAqLwotI2RlZmluZSBDS19XUkVGUkVTSAotI2Vsc2UKLSNpZmRlZiB1bHRyaXgJCQkJLyogREVD IFVMVFJJWCBoYXMgaXQgKi8KLSNlbHNlCi0jaWZkZWYgU1ZSMwkJCQkvKiBTeXN0ZW0gViBoYXMg aXQgKi8KLSNkZWZpbmUgQ0tfV1JFRlJFU0gKLSNlbHNlCi0jaWZkZWYgQlNENDQJCQkJLyogNC40 IEJTRCBoYXMgaXQgKi8KLSNkZWZpbmUgQ0tfV1JFRlJFU0gKLSNlbHNlCi0jaWZkZWYgTkVYVAkJ CQkvKiBEZWZpbmUgaXQgZm9yIE5lWFRTVEVQICovCi0jZGVmaW5lIENLX1dSRUZSRVNICi0jZWxz ZQotI2lmZGVmIFNVTk9TNAkJCQkvKiBTdW5PUyA0LnguLi4gKi8KLSNkZWZpbmUgQ0tfV1JFRlJF U0gKLSNlbHNlCi0jaWZkZWYgU09MQVJJUzI1CQkJLyogU29sYXJpcyAyLjUgYW5kIGxhdGVyICov Ci0jZGVmaW5lIENLX1dSRUZSRVNICi0jZWxzZQotI2lmZGVmIEFJWFJTCQkJCS8qIFJTLzYwMDAg QUlYIC4uLiAqLwotI2RlZmluZSBDS19XUkVGUkVTSAotI2Vsc2UKLSNpZmRlZiBSVEFJWAkJCQkv KiBSVCBQQyBBSVggLi4uICovCi0jZGVmaW5lIENLX1dSRUZSRVNICi0jZWxzZQotI2lmZGVmIE9T RgkJCQkvKiBERUMgT1NGLzEgLi4uICovCi0jZGVmaW5lIENLX1dSRUZSRVNICi0KLS8qIEFkZCBt b3JlIGhlcmUsIG9yIGp1c3QgZGVmaW5lIENLX1dSRUZSRVNIIG9uIHRoZSBDQyBjb21tYW5kIGxp bmUuLi4gKi8KLQotI2VuZGlmIC8qIE9TRiAqLwotI2VuZGlmIC8qIFJUQUlYICovCi0jZW5kaWYg LyogQUlYUlMgKi8KLSNlbmRpZiAvKiBTT0xBUklTMjUgKi8KLSNlbmRpZiAvKiBTVU5PUzQgKi8K LSNlbmRpZiAvKiBORVhUICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBTVlIzICov Ci0jZW5kaWYgLyogdWx0cml4ICovCi0jZW5kaWYgLyogVk1TICovCi0KLSNlbHNlIC8qIENLX1dS RUZSRVNIIGlzIGRlZmluZWQgKi8KLQotLyogVGhpcyBpcyB3aXRoaW4gYW4gaWZkZWYgQ0tfQ1VS U0VTIGJsb2NrLiAgVGhlIGZvbGxvd2luZyBpcyBub3QgbmVlZGVkICovCi0KLSNpZm5kZWYgQ0tf Q1VSU0VTCQkJLyogQ0tfV1JFRlJFU0ggaW1wbGllcyBDS19DVVJTRVMgKi8KLSNkZWZpbmUgQ0tf Q1VSU0VTCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0KLSNlbmRpZiAvKiBDS19XUkVGUkVTSCAq LwotI2VuZGlmIC8qIE5PV1JFRlJFU0ggKi8KLQotI2lmbmRlZiBUUk1CVUZMCi0jaWZkZWYgQklH QlVGT0sKLSNkZWZpbmUgVFJNQlVGTCAxNjM4NAotI2Vsc2UKLSNpZmRlZiBEWU5BTUlDCi0jZGVm aW5lIFRSTUJVRkwgODE5MgotI2Vsc2UKLSNkZWZpbmUgVFJNQlVGTCAxMDI0Ci0jZW5kaWYgLyog QklHQlVGT0sgKi8KLSNlbmRpZiAvKiBEWU5BTUlDICovCi0jZW5kaWYgLyogVFJNQlVGTCAqLwot I2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi0vKgotICBXaGV0aGVyIHRvIHVzZSBja21hdGNoKCkg aW4gYWxsIGl0cyBnbG9yeSBmb3IgQy1TaGVsbC1saWtlIHBhdHRlcm5zLgotICBJZiBDS1JFR0VY IGlzIE5PVCBkZWZpbmVkLCBhbGwgYnV0ICogYW5kID8gbWF0Y2hpbmcgYXJlIHJlbW92ZWQgZnJv bQotICBja21hdGNoKCkuICBOT1RFOiBEZWZpbmluZyBDS1JFR0VYIGRvZXMgbm90IG5lY2Vzc2Fy aWx5IG1lYW4gdGhhdCBja21hdGNoKCkKLSAgcmVnZXhlcyBhcmUgdXNlZCBmb3IgZmlsZW5hbWUg bWF0Y2hpbmcuICBUaGF0IGRlcGVuZHMgb24gd2hldGhlciB6eHBhbmQoKQotICBpbiBjaz9maW8u YyBjYWxscyBja21hdGNoKCkuICBOT1RFIDI6IFJFR0VYIGlzIGEgbWlzbm9tZXIgLS0gdGhlc2Ug YXJlIG5vdAotICByZWd1bGFyIGV4cHJlc3Npb25zIGluIHRoZSBjb21wdXRlci1zY2llbmNlIHNl bnNlIChpbiB3aGljaCwgZS5nLiAiYSpiIgotICBtYXRjaGVzIDAgb3IgbW9yZSAnYScgY2hhcmFj dGVycyBmb2xsb3dlZCBieSAnYicpIGJ1dCBwYXR0ZXJucyAoaW4gd2hpY2gKLSAgImEqYiIgbWF0 Y2hlcyAnYScgZm9sbG93ZWQgYnkgMCBvciBtb3JlIG5vbi1iIGNoYXJhY3RlcnMsIGZvbGxvd2Vk IGJ5IGIpLgotKi8KLSNpZm5kZWYgTk9DS1JFR0VYCi0jaWZuZGVmIENLUkVHRVgKLSNkZWZpbmUg Q0tSRUdFWAotI2VuZGlmIC8qIENLUkVHRVggKi8KLSNlbmRpZiAvKiBOT0NLUkVHRVggKi8KLQot LyogTGVhcm5lZC1zY3JpcHQgZmVhdHVyZSAqLwotCi0jaWZuZGVmIE5PTEVBUk4KLSNpZmRlZiBO T1NQTAotI2RlZmluZSBOT0xFQVJOCi0jZWxzZQotI2lmZGVmIE5PTE9DQUwKLSNkZWZpbmUgTk9M RUFSTgotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotI2VuZGlmIC8q IE5PTEVBUk4gKi8KLQotI2lmZGVmIE5PTEVBUk4KLSNpZmRlZiBDS0xFQVJOCi0jdW5kZWYgQ0tM RUFSTgotI2VuZGlmIC8qIENLTEVBUk4gKi8KLSNlbHNlICAvKiAhTk9MRUFSTiAqLwotI2lmbmRl ZiBDS0xFQVJOCi0jaWZkZWYgT1MyT1JVTklYCi0vKiBJbiBVTklYIHRoaXMgY2FuIHdvcmsgb25s eSB3aXRoIGNrdWNucy5jIGJ1aWxkcyAqLwotI2RlZmluZSBDS0xFQVJOCi0jZWxzZQotI2lmZGVm IFZNUwotI2RlZmluZSBDS0xFQVJOCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyT1JV TklYICovCi0jZW5kaWYgLyogQ0tMRUFSTiAqLwotI2VuZGlmIC8qIE5PTEVBUk4gKi8KLQotI2lm ZGVmIENLTEVBUk4KLSNpZm5kZWYgTEVBUk5CVUZTSVoKLSNkZWZpbmUgTEVBUk5CVUZTSVogMTI4 Ci0jZW5kaWYgLyogTEVBUk5CVUZTSVogKi8KLSNlbmRpZiAvKiBDS0xFQVJOICovCi0KLSNpZm5k ZWYgSUtTRE9OTFkKLSNpZm5kZWYgQ0tUSURMRQkJCQkvKiBQc2V1ZG8ta2VlcGFsaXZlIGluIENP Tk5FQ1QgKi8KLSNpZmRlZiBPUzIJCQkJLyogSW4gSzk1ICovCi0jZGVmaW5lIENLVElETEUKLSNl bHNlCi0jaWZkZWYgVU5JWAkJCQkvKiBJbiBVTklYIGJ1dCBvbmx5IGNrdWNucyB2ZXJzaW9ucyAq LwotI2lmbmRlZiBOT0xFQVJOCi0jaWZuZGVmIE5PU0VMRUNUCi0jZGVmaW5lIENLVElETEUKLSNl bmRpZiAvKiBOT1NFTEVDVCAqLwotI2VuZGlmIC8qIE5PTEVBUk4gKi8KLSNlbmRpZiAvKiBVTklY ICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ0tUSURMRSAqLwotI2VuZGlmIC8qIElL U0RPTkxZICovCi0KLSNpZmRlZiBDS19BTlNJTElCUwotLyoKLSAgU3RyaW5nIGxpYnJhcnkgZnVu Y3Rpb25zLgotICBGb3IgQU5TSSBDLCBnZXQgcHJvdG90eXBlcyBmcm9tIDxzdHJpbmcuaD4uCi0g IE90aGVyd2lzZSwgc2tpcCB0aGUgcHJvdG90eXBlcy4KLSovCi0jaW5jbHVkZSA8c3RyaW5nLmg+ Ci0KLS8qCi0gIFByb3RvdHlwZXMgZm9yIG90aGVyIGNvbW1vbmx5IHVzZWQgbGlicmFyeSBmdW5j dGlvbnMsIHN1Y2ggYXMKLSAgbWFsbG9jLCBmcmVlLCBnZXRlbnYsIGF0b2wsIGF0b2ksIGFuZCBl eGl0LiAgT3RoZXJ3aXNlLCBubyBwcm90b3R5cGVzLgotKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4K LSNpZmRlZiBESUFCIC8qIERJQUIgRFM5MCAqLwotLyogI2luY2x1ZGUgPGNvbW1vbkMuaD4gICov Ci0jaW5jbHVkZSA8c3lzL3dhaXQuaD4KLSNkZWZpbmUgQ0tfV0FJVF9ICi0jaWZkZWYgQ09NTUVO VAotZXh0ZXJuIHZvaWQgZXhpdChpbnQgc3RhdHVzKTsKLWV4dGVybiB2b2lkIF9leGl0KGludCBz dGF0dXMpOwotZXh0ZXJuIGludCB1bmFtZShzdHJ1Y3QgdXRzbmFtZSAqbmFtZSk7Ci0jZW5kaWYg LyogQ09NTUVOVCAqLwotZXh0ZXJuIGludCBjaG1vZChjaGFyICpwYXRoLCBpbnQgbW9kZSk7Ci1l eHRlcm4gaW50IGlvY3RsKGludCBmaWxkZXMsIGludCByZXF1ZXN0LCAuLi4pOwotZXh0ZXJuIGlu dCByZGNoayhpbnQgdHR5ZmQpOwotZXh0ZXJuIGludCBuYXAoaW50IG0pOwotI2lmZGVmIENPTU1F TlQKLWV4dGVybiBpbnQgZ2V0cHBpZCh2b2lkKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi1leHRl cm4gaW50IF9maWxidWYoRklMRSAqc3RyZWFtKTsKLWV4dGVybiBpbnQgX2Zsc2J1ZihjaGFyIGMs RklMRSAqc3RyZWFtKTsKLSNlbmRpZiAvKiBESUFCICovCi0KLS8qCi0gIFByb3RvdHlwZXMgZm9y IFVOSVggZnVuY3Rpb25zIGxpa2UgYWNjZXNzLCBhbGFybSwgY2hkaXIsIHNsZWVwLCBmb3JrLAot ICBhbmQgcGF1c2UuICBPdGhlcndpc2UsIG5vIHByb3RvdHlwZXMuCi0qLwotI2lmZGVmIFZNUwot I2luY2x1ZGUgPHNpZ25hbC5oPiAgLyogU01TOiBzbGVlcCgpIGZvciBvbGQgKFY0LjAtMDAwKSBE RUMgQy4gKi8KLSNpbmNsdWRlIDx1bml4aW8uaD4KLSNpbmNsdWRlIDx1bml4bGliLmg+IC8qIFNN UzogZ2V0cGlkKCkgZm9yIG9sZCAoVjQuMC0wMDApIERFQyBDLiAqLwotI2VuZGlmIC8qIFZNUyAq LwotCi0jaWZkZWYgTkVYVAotI2lmbmRlZiBORVhUMzMKLSNpbmNsdWRlIDxsaWJjLmg+Ci0jZW5k aWYgLyogTkVYVDMzICovCi0jZWxzZSAgLyogTm9UIE5lWFQgKi8KLSNpZm5kZWYgQU1JR0EKLSNp Zm5kZWYgT1MyCi0jaWZkZWYgU1RSQVRVUwotI2luY2x1ZGUgPGNfdXRpbGl0aWVzLmg+Ci0jZWxz ZSAvKiAhU1RSQVRVUyAqLwotI2lmbmRlZiBPU0tYWEMKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNl bmRpZiAvKiBPU0tYWEMgKi8KLSNpZmRlZiBIQVZFX0NSWVBUX0gKLSNpbmNsdWRlIDxjcnlwdC5o PgotI2VuZGlmIC8qIEhBVkVfQ1JZUFRfSCAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBBTUlHQSAqLwotI2VuZGlmIC8qIE5FWFQgKi8KLQotI2Vs c2UgLyogTm90IEFOU0kgbGlicy4uLiAqLwotCi0jaWZkZWYgTUFDCi0jaW5jbHVkZSA8U3RyaW5n Lmg+Ci0jaW5jbHVkZSA8U3RkTGliLmg+Ci0jZW5kaWYgLyogTUFDICovCi0KLSNpZmRlZiBIUFVY Ci0jaWZuZGVmIEhQVVhQUkU2NQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmIC8qIEhQVVhQ UkU2NSAqLwotI2VuZGlmIC8qIEhQVVggKi8KLQotI2lmZGVmIFNVTk9TNDEKLSNpbmNsdWRlIDx1 bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbHNlCi0jaWZuZGVmIE1BQwotLyoKLSAg SXQgaXMgZXNzZW50aWFsIHRoYXQgdGhlc2UgYXJlIGRlY2xhcmVkIGNvcnJlY3RseSEKLSAgV2hp Y2ggaXMgbm90IGFsd2F5cyBlYXN5LiAgVGFrZSBtYWxsb2MoKSBmb3IgaW5zdGFuY2UgLi4uCi0q LwotI2lmZGVmIFBZUkFNSUQKLSNpZmRlZiBTVlI0Ci0jaWZkZWYgX19TVERDX18KLSNkZWZpbmUg U0laRV9UX01BTExPQwotI2VuZGlmIC8qIF9fU1REQ19fICovCi0jZW5kaWYgLyogU1ZSNCAqLwot I2VuZGlmIC8qIFBZUkFNSUQgKi8KLS8qCi0gIE1heWJlIHNvbWUgb3RoZXIgZW52aXJvbm1lbnRz IG5lZWQgdGhlIHNhbWUgdHJlYXRtZW50IGZvciBtYWxsb2MuCi0gIElmIHNvLCBkZWZpbmUgU0la RV9UX01BTExPQyBmb3IgdGhlbSBoZXJlIG9yIGluIGNvbXBpbGVyIENGTEFHUy4KLSovCi0jaWZk ZWYgU0laRV9UX01BTExPQwotX1BST1RPVFlQKCB2b2lkICogbWFsbG9jLCAoc2l6ZV90KSApOwot I2Vsc2UKLV9QUk9UT1RZUCggY2hhciAqIG1hbGxvYywgKHVuc2lnbmVkIGludCkgKTsKLSNlbmRp ZiAvKiBTSVpFX1RfTUFMTE9DICovCi0KLV9QUk9UT1RZUCggY2hhciAqIGdldGVudiwgKGNoYXIg KikgKTsKLV9QUk9UT1RZUCggbG9uZyBhdG9sLCAoY2hhciAqKSApOwotI2VuZGlmIC8qICFNQUMg Ki8KLSNlbmRpZiAvKiBTVU5PUzQxICovCi0jZW5kaWYgLyogQ0tfQU5TSUxJQlMgKi8KLQotLyoK LSAgPHN5cy9wYXJhbS5oPiBnZW5lcmFsbHkgcGlja3MgdXAgTlVMTCwgTUFYUEFUSExFTiwgYW5k IE1BWE5BTUxFTgotICBhbmQgc2VlbXMgdG8gcHJlc2VudCBvbiBhbGwgVW5peGVzIGdvaW5nIGJh Y2sgYXQgbGVhc3QgdG8gU0NPIFhlbml4Ci0gIHdpdGggdGhlIGV4Y2VwdGlvbihzKSBub3RlZC4K LSovCi0jaWZuZGVmIE5PX1BBUkFNX0gJCQkvKiAyMDAxLTExLTAzICovCi0jaWZuZGVmIFVOSVgJ CQkJLyogTm9uLVVuaXhlcyBkb24ndCBoYXZlIGl0ICovCi0jZGVmaW5lIE5PX1BBUkFNX0gKLSNl bHNlCi0jaWZkZWYgVFJTMTYJCQkJLyogVGFuZHkgWGVuaXggZG9lc24ndCBoYXZlIGl0ICovCi0j ZGVmaW5lIE5PX1BBUkFNX0gKLSNlbmRpZiAvKiBUUlMxNiAqLwotI2VuZGlmIC8qIFVOSVggKi8K LSNlbmRpZiAvKiBOT19QQVJBTV9IICovCi0KLSNpZm5kZWYgTk9fUEFSQU1fSAotI2lmbmRlZiBJ TkNMX1BBUkFNX0gKLSNkZWZpbmUgSU5DTF9QQVJBTV9ICi0jZW5kaWYgLyogSU5DTF9QQVJBTV9I ICovCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYgLyogTk9fUEFSQU1fSCAqLwotCi0j aWZuZGVmIE5VTEwJCQkJLyogSW4gY2FzZSBOVUxMIGlzIHN0aWxsIG5vdCBkZWZpbmVkICovCi0j ZGVmaW5lIE5VTEwgMEwKLS8qIG9yICNkZWZpbmUgTlVMTCAwICovCi0vKiBvciAjZGVmaW5lIE5V TEwgKChjaGFyICopIDApICovCi0vKiBvciAjZGVmaW5lIE5VTEwgKCh2b2lkICopIDApICovCi0j ZW5kaWYgLyogTlVMTCAqLwotCi0vKiBNYWNybyB0byBkaWZmZXJlbnRpYXRlICIiIGZyb20gTlVM TCAodG8gYXZvaWQgY29tcGFyaXNvbnMgd2l0aCBsaXRlcmFscykgKi8KLQotI2lmbmRlZiBpc2Vt cHR5c3RyaW5nCi0jZGVmaW5lIGlzZW1wdHlzdHJpbmcocykgKChzPygqcz8wOjEpOjApKQotI2Vu ZGlmCS8qIGlzZW1wdHlzdHJpbmcgKi8KLQotLyogTWF4aW11bSBsZW5ndGggZm9yIGEgZnVsbHkg cXVhbGlmaWVkIGZpbGVuYW1lLCBub3QgY291bnRpbmcgXDAgYXQgZW5kLiAqLwotLyoKLSAgVGhp cyBpcyBhIHJvdWdoIGN1dCwgYW5kIGVycnMgb24gdGhlIHNpZGUgb2YgYmVpbmcgdG9vIGJpZy4g IFdlIGRvbid0Ci0gIHdhbnQgdG8gcHVsbCBpbiBodW5kcmVkcyBvZiBoZWFkZXIgZmlsZXMgbG9v a2luZyBmb3IgbWFueSBhbmQgdmFyaWVkCi0gIHN5bWJvbHMsIGZvciBmZWFyIG9mIGludHJvZHVj aW5nIHVubmVjZXNzYXJ5IGNvbmZsaWN0cy4KLSovCi0jaWZuZGVmIENLTUFYUEFUSAotI2lmZGVm IFZNUwkJCQkvKiBWTVMgbWF5IGhhdmUgYmFkIChzbWFsbCwgT0RTMikgKi8KLSNkZWZpbmUgQ0tN QVhQQVRIIE5BTVhfQ19NQVhSU1MJCS8qIFBBVEhfTUFYLCBzbyB1c2UgTkFNWF9DX01BWFJTUy4g Ki8KLSNlbHNlIC8qIGRlZiBWTVMgKi8KLSNpZmRlZiBNQVhQQVRITEVOCQkJLyogKGl0IHByb2Jh Ymx5IGlzbid0KSAqLwotI2RlZmluZSBDS01BWFBBVEggTUFYUEFUSExFTgotI2Vsc2UKLSNpZmRl ZiBQQVRIX01BWAkJCQkvKiBQT1NJWCAqLwotI2RlZmluZSBDS01BWFBBVEggUEFUSF9NQVgKLSNl bHNlIC8qIGRlZiBQQVRIX01BWCAqLwotI2lmZGVmIE1BQwotI2RlZmluZSBDS01BWFBBVEggNjMK LSNlbHNlIC8qIGRlZiBNQUMgKi8KLSNpZmRlZiBwZHAxMQotI2RlZmluZSBDS01BWFBBVEggMjU1 Ci0jZWxzZSAvKiBkZWYgcGRwMTEgKi8KLSNpZmRlZiBVTklYCQkJCS8qIEV2ZW4gdGhvdWdoIHNv bWUgYXJlIHdheSBsZXNzLi4uICovCi0jZGVmaW5lIENLTUFYUEFUSCAxMDI0Ci0jZWxzZSAvKiBk ZWYgVU5JWCAqLwotI2lmZGVmIFNUUkFUVVMKLSNkZWZpbmUgQ0tNQVhQQVRIIDI1NgkJCS8qID09 ICRNWFBMIGZyb20gUEFSVS5IICovCi0jZWxzZSAvKiBkZWYgU1RSQVRVUyAqLwotI2lmZGVmIGRh dGFnZW5lcmFsCi0jZGVmaW5lIENLTUFYUEFUSCAyNTYJCQkvKiA9PSAkTVhQTCBmcm9tIFBBUlUu SCAqLwotI2Vsc2UgLyogZGVmIGRhdGFnZW5lcmFsICovCi0jZGVmaW5lIENLTUFYUEFUSCAyNTUK LSNlbmRpZiAvKiBkZWYgU1RSQVRVUyBbZWxzZV0gKi8KLSNlbmRpZiAvKiBkZWYgZGF0YWdlbmVy YWwgW2Vsc2VdICovCi0jZW5kaWYgLyogZGVmIFVOSVggW2Vsc2VdICovCi0jZW5kaWYgLyogZGVm IHBkcDExIFtlbHNlXSAqLwotI2VuZGlmIC8qIGRlZiBNQUMgW2Vsc2VdICovCi0jZW5kaWYgLyog ZGVmIFBBVEhfTUFYIFtlbHNlXSAqLwotI2VuZGlmIC8qIGRlZiBNQVhQQVRITEVOIFtlbHNlXSAq LwotI2VuZGlmIC8qIGRlZiBWTVMgW2Vsc2VdICovCi0jZW5kaWYgLyogbmRlZiBDS01BWFBBVEgg Ki8KLQotLyogTWF4aW11bSBsZW5ndGggZm9yIHRoZSBuYW1lIG9mIGEgdHR5IGRldmljZSAqLwot Ci0jaWZuZGVmIERFVk5BTUxFTgotI2RlZmluZSBERVZOQU1MRU4gQ0tNQVhQQVRICi0jZW5kaWYg LyogREVWTkFNTEVOICovCi0KLS8qIERpcmVjdG9yeSAocGF0aCBzZWdtZW50KSBzZXBhcmF0b3Ig Ki8KLS8qIE5vdCBmdWxseSBnZW5lcmFsIC0gVHJpY2t5IGZvciBWTVMsIEFtaWdhLCAuLi4gKi8K LQotI2lmbmRlZiBESVJTRVAKLSNpZmRlZiBVTklYCi0jZGVmaW5lIERJUlNFUCAnLycKLSNkZWZp bmUgSVNESVJTRVAoYykgKChjKT09Jy8nKQotI2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUgRElS U0VQICcvJwotI2RlZmluZSBJU0RJUlNFUChjKSAoKGMpPT0nLyd8fChjKT09J1xcJykKLSNlbHNl Ci0jaWZkZWYgZGF0YWdlbmVyYWwKLSNkZWZpbmUgRElSU0VQICc6JwotI2RlZmluZSBJU0RJUlNF UChjKSAoKChjKT09JzonKXx8KChjKT09J14nKXx8KChjKT09Jz0nKSkKLSNlbHNlCi0jaWZkZWYg U1RSQVRVUwotI2RlZmluZSBESVJTRVAgJz4nCi0jZGVmaW5lIElTRElSU0VQKGMpICgoYyk9PSc+ JykKLSNlbHNlCi0jaWZkZWYgVk1TCi0jZGVmaW5lIERJUlNFUCAnXScJCQkvKiAobm90IHJlYWxs eSkgKi8KLSNkZWZpbmUgSVNESVJTRVAoYykgKChjKT09J10nfHwoYyk9PSc6JykKLSNlbHNlCi0j aWZkZWYgTUFDCi0jZGVmaW5lIERJUlNFUCAnOicKLSNkZWZpbmUgSVNESVJTRVAoYykgKChjKT09 JzonKQotI2Vsc2UKLSNpZmRlZiBBTUlHQQotI2RlZmluZSBESVJTRVAgJy8nCi0jZGVmaW5lIElT RElSU0VQKGMpICgoYyk9PScvJ3x8KGMpPT0nOicpCi0jZWxzZQotI2lmZGVmIEdFTURPUwotI2Rl ZmluZSBESVJTRVAgJ1xcJwotI2RlZmluZSBJU0RJUlNFUChjKSAoKGMpPT0nXFwnfHwoYyk9PSc6 JykKLSNlbHNlCi0jZGVmaW5lIERJUlNFUCAnLycKLSNkZWZpbmUgSVNESVJTRVAoYykgKChjKT09 Jy8nKQotI2VuZGlmIC8qIEdFTURPUyAqLwotI2VuZGlmIC8qIEFNSUdBICovCi0jZW5kaWYgLyog TUFDICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2Vu ZGlmIC8qIERJUlNFUCAqLwotCi0vKiBGSUxFIHBhY2thZ2UgcGFyYW1ldGVycyAqLwotCi0jaWZk ZWYgcGRwMTEKLSNkZWZpbmUgTk9DSEFOTkVMSU8KLSNlbHNlCi0KLSNpZm5kZWYgQ0tNQVhPUEVO Ci0jaWZkZWYgUU5YCi0jZGVmaW5lIENLTUFYT1BFTiAzOTAKLSNlbHNlCi0jaWZkZWYgVk1TCi0j ZGVmaW5lIENLTUFYT1BFTiA2NAotI2Vsc2UKLSNpZmRlZiBPUEVOX01BWAotI2RlZmluZSBDS01B WE9QRU4gT1BFTl9NQVgKLSNlbHNlCi0jaWZkZWYgRk9QRU5fTUFYCi0jZGVmaW5lIENLTUFYT1BF TiBGT1BFTl9NQVgKLSNlbHNlCi0jZGVmaW5lIENLTUFYT1BFTiA2NAotI2VuZGlmIC8qIEZPUEVO X01BWCAqLwotI2VuZGlmIC8qIE9QRU5fTUFYICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYg LyogUU5YICovCi0jZW5kaWYgLyogQ0tNQVhPUEVOICovCi0KLS8qIE1heGltdW0gY2hhbm5lbHMg Zm9yIEZPUEVOID0gQ0tNQVhPUEVOIG1pbnVzIGxvZ3MsIHN0ZGlvLCBldGMgKi8KLQotI2lmbmRl ZiBaX01JTkNIQU4KLSNkZWZpbmUgWl9NSU5DSEFOIDE2Ci0jZW5kaWYgLyogWl9NSU5DSEFOICov Ci0KLSNpZm5kZWYgWl9NQVhDSEFOCi0jZGVmaW5lIFpfTUFYQ0hBTiAoQ0tNQVhPUEVOLVpORklM Uy01KQotI2VuZGlmIC8qIFpfTUFYQ0hBTiAqLwotI2VuZGlmIC8qIHBkcDExICovCi0KLS8qIE5l dy1mb3JtYXQgbnpsdG9yKCkgYW5kIG56cnRvbCgpIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBwYXRo bmFtZXMgKi8KLQotI2lmbmRlZiBOWkxUT1IKLSNpZmRlZiBVTklYCi0jZGVmaW5lIE5aTFRPUgot I2Vsc2UKLSNpZmRlZiBWTVMKLSNkZWZpbmUgTlpMVE9SCi0jZWxzZQotI2lmZGVmIE9TMgotI2Rl ZmluZSBOWkxUT1IKLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotI2RlZmluZSBOWkxUT1IKLSNlbmRp ZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5k aWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIE5aTFRPUiAqLwotCi0jaWZkZWYgTlpMVE9SCi1fUFJP VE9UWVAoIFZPSUQgbnpsdG9yLCAoY2hhciAqLCBjaGFyICosIGludCwgaW50LCBpbnQpICk7Ci1f UFJPVE9UWVAoIFZPSUQgbnpydG9sLCAoY2hhciAqLCBjaGFyICosIGludCwgaW50LCBpbnQpICk7 Ci0jZW5kaWYgLyogTlpMVE9SICovCi0KLS8qIEltcGxlbWVudGF0aW9ucyB3aXRoIGEgenJtZGly KCkgZnVuY3Rpb24gKi8KLQotI2lmbmRlZiBaUk1ESVIKLSNpZmRlZiBPUzIKLSNkZWZpbmUgWlJN RElSCi0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBVTklYCi0jZGVmaW5lIFpSTURJUgotI2Vsc2UK LSNpZmRlZiBWTVMKLSNkZWZpbmUgWlJNRElSCi0jZWxzZSAvKiBWTVMgKi8KLSNpZmRlZiBTVFJB VFVTCi0jZGVmaW5lIFpSTURJUgotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBWTVMg Ki8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogWlJNRElS ICovCi0KLSNpZmRlZiBaUk1ESVIKLV9QUk9UT1RZUCggaW50IHpybWRpciwgKGNoYXIgKikgKTsK LSNlbmRpZiAvKiBaUk1ESVIgKi8KLQotI2lmbmRlZiBGSUxFQ0FTRQotI2lmZGVmIFVOSVhPUk9T SwotI2RlZmluZSBGSUxFQ0FTRSAxCi0jZWxzZQotI2RlZmluZSBGSUxFQ0FTRSAwCi0jZW5kaWYg LyogVU5JWE9ST1NLICovCi0jaWZuZGVmIENLQ01BSQotZXh0ZXJuIGludCBmaWxlY2FzZTsKLSNl bmRpZiAvKiBDS0NNQUkgKi8KLSNlbmRpZiAvKiBGSUxFQ0FTRSAqLwotCi0vKiBGdW5ueSBuYW1l cyBmb3IgbGlicmFyeSBmdW5jdGlvbnMgZGVwYXJ0bWVudC4uLiAqLwotCi0jaWZkZWYgWklMT0cK LSNkZWZpbmUgc2V0am1wIHNldHJldAotI2RlZmluZSBsb25nam1wIGxvbmdyZXQKLSNkZWZpbmUg am1wX2J1ZiByZXRfYnVmCi0jZGVmaW5lIGdldGN3ZCBjdXJkaXIKLSNlbmRpZiAvKiBaSUxPRyAq LwotCi0jaWZkZWYgU1RSQVRVUwotLyogVGhlIEMtcnVudGltZSBjb25mbGljdHMgd2l0aCB0aGlu Z3Mgd2UgZG8gaW4gU3RyYXR1cyBWT1MgY2tsdGlvLmMgLi4uICovCi0jZGVmaW5lIHByaW50ZiB2 b3NwcnRmCi1fUFJPVE9UWVAoIGludCB2b3NwcnRmLCAoY2hhciAqZm10LCAuLi4pICk7Ci0jZGVm aW5lIHBlcnJvcih0eHQpIHByaW50ZigiJXNcbiIsIHR4dCkKLS8qIGNoYXJfdmFyeWluZyBpcyBh IHN0cmluZyB0eXBlIGZyb20gUEwvSSB0aGF0IFZPUyB1c2VzIGV4dGVuc2l2ZWx5ICovCi0jZGVm aW5lIENWIGNoYXJfdmFyeWluZwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLQotI2lmZGVmIE5UCi1l eHRlcm4gaW50IE9TVmVyOwotI2RlZmluZSBpc1dpbjk1KCkgKE9TVmVyPT1WRVJfUExBVEZPUk1f V0lOMzJfV0lORE9XUykKLSNlbHNlCi0jZGVmaW5lIGlzV2luOTUoKSAoMCkKLSNlbmRpZiAvKiBO VCAqLwotCi0jaWZuZGVmIEJQUklOVAotI2lmZGVmIE9TMgotI2RlZmluZSBCUFJJTlQKLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBCUFJJTlQgKi8KLQotI2lmbmRlZiBTRVNMSU1JVAotI2lm ZGVmIE9TMgotI2RlZmluZSBTRVNMSU1JVAotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFNF U0xJTUlUICovCi0KLSNpZm5kZWYgTk9URVJNCi0jaWZuZGVmIFBDVEVSTQotI2lmZGVmIE5UCi0j ZGVmaW5lIFBDVEVSTQotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogUENURVJNICovCi0jZW5k aWYgLyogTk9URVJNICovCi0KLSNpZmRlZiBCRU9TT1JCRUJPWAotI2RlZmluZSBxdWVyeSBja3F1 ZXJ5Ci0jZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KLQotI2lmbmRlZiBQVFlPUlBJUEUJCQkvKiBO RVRDTUQgYW5kL29yIE5FVFBUWSBkZWZpbmVkICovCi0jaWZkZWYgTkVUQ01ECi0jZGVmaW5lIFBU WU9SUElQRQotI2Vsc2UKLSNpZmRlZiBORVRQVFkKLSNkZWZpbmUgUFRZT1JQSVBFCi0jZW5kaWYg LyogTkVUUFRZICovCi0jZW5kaWYgLyogTkVUQ01EICovCi0jZW5kaWYgLyogUFRZT1JQSVBFICov Ci0KLS8qIG1rdGVtcCgpIGFuZCBta3N0ZW1wKCkgKi8KLQotI2lmbmRlZiBOT01LVEVNUAotI2lm bmRlZiBNS1RFTVAKLSNpZmRlZiBPUzJPUlVOSVgKLSNkZWZpbmUgTUtURU1QCi0jZW5kaWYgLyog T1MyT1JVTklYICovCi0jZW5kaWYgLyogTUtURU1QICovCi0KLSNpZmRlZiBNS1RFTVAKLSNpZm5k ZWYgTk9NS1NURU1QCi0jaWZuZGVmIE1LU1RFTVAKLSNpZmRlZiBCU0Q0NAotI2RlZmluZSBNS1NU RU1QCi0jZWxzZQotI2lmZGVmIF9fbGludXhfXwotI2RlZmluZSBNS1NURU1QCi0jZW5kaWYgLyog X19saW51eF9fICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBNS1NURU1QICovCi0j ZW5kaWYgLyogTk9NS1NURU1QICovCi0jZW5kaWYgLyogTUtURU1QICovCi0jZW5kaWYgLyogTk9N S1RFTVAgKi8KLQotLyogUGxhdGZvcm1zIHRoYXQgaGF2ZSBtZW1jcHkoKSAtLSBvbmx5IGFmdGVy IGFsbCBoZWFkZXJzIGluY2x1ZGVkICovCi0KLSNpZm5kZWYgVVNFX01FTUNQWQotI2lmZGVmIFZN UwotI2RlZmluZSBVU0VfTUVNQ1BZCi0jZWxzZQotI2lmZGVmIE5FWFQKLSNkZWZpbmUgVVNFX01F TUNQWQotI2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUgVVNFX01FTUNQWQotI2Vsc2UKLSNpZmRl ZiBfX2xpbnV4X18KLSNkZWZpbmUgVVNFX01FTUNQWQotI2Vsc2UKLSNpZmRlZiBTT0xBUklTCi0j ZGVmaW5lIFVTRV9NRU1DUFkKLSNlbHNlCi0jaWZkZWYgU1VOT1M0Ci0jZGVmaW5lIFVTRV9NRU1D UFkKLSNlbHNlCi0jaWZkZWYgQUlYUlMKLSNkZWZpbmUgVVNFX01FTUNQWQotI2Vsc2UKLSNpZmRl ZiBIUFVYCi0jZGVmaW5lIFVTRV9NRU1DUFkKLSNlbHNlCi0jaWZkZWYgUE9TSVgKLSNkZWZpbmUg VVNFX01FTUNQWQotI2Vsc2UKLSNpZmRlZiBTVlI0Ci0jZGVmaW5lIFVTRV9NRU1DUFkKLSNlbHNl Ci0jaWZkZWYgT1NGCi0jZGVmaW5lIFVTRV9NRU1DUFkKLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVy YWwKLSNkZWZpbmUgVVNFX01FTUNQWQotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0jZGVmaW5lIFVT RV9NRU1DUFkKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8K LSNlbmRpZiAvKiBPU0YgKi8KLSNlbmRpZiAvKiBTVlI0ICovCi0jZW5kaWYgLyogUE9TSVggKi8K LSNlbmRpZiAvKiBIUFVYICovCi0jZW5kaWYgLyogQUlYUlMgKi8KLSNlbmRpZiAvKiBTVU5PUzQg Ki8KLSNlbmRpZiAvKiBTT0xBUklTICovCi0jZW5kaWYgLyogX19saW51eF9fICovCi0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogTkVYVCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8q IFVTRV9NRU1DUFkgKi8KLQotI2lmbmRlZiBVU0VfTUVNQ1BZCi0jZGVmaW5lIG1lbWNweShhLGIs YykgY2ttZW1jcHkoKGEpLChiKSwoYykpCi0jZWxzZQotI2lmZGVmIENLX1NDTzMyVjQKLS8qIEJl Y2F1c2UgdGhlIHByb3RvdHlwZSBpc24ndCBwaWNrZWQgdXAgaW4gdGhlIG5vcm1hbCBoZWFkZXIg ZmlsZXMgKi8KLV9QUk9UT1RZUCggdm9pZCAqbWVtY3B5LCAodm9pZCAqLCBjb25zdCB2b2lkICos IHNpemVfdCkpOwotI2VuZGlmIC8qIENLX1NDTzMyVjQgKi8KLSNlbmRpZiAvKiBVU0VfTUVNQ1BZ ICovCi0KLS8qIFVzZXIgYXV0aGVudGljYXRpb24gZm9yIElLUyAtLSBTbyBmYXIgSzk1IGFuZCBV TklYIG9ubHkgKi8KLQotI2lmZGVmIE5PSUNQCi0jaWZuZGVmIE5PTE9HSU4KLSNkZWZpbmUgTk9M T0dJTgotI2VuZGlmIC8qIE5PTE9HSU4gKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZuZGVm IE5PTE9HSU4KLSNpZmRlZiBPUzJPUlVOSVgKLSNpZm5kZWYgQ0tfTE9HSU4KLSNkZWZpbmUgQ0tf TE9HSU4KLSNpZm5kZWYgTk9TSEFET1cKLSNpZmRlZiBDS19TQ09WNQotI2RlZmluZSBDS19TSEFE T1cKLSNlbmRpZiAvKiBDS19TQ09WNSAqLwotI2VuZGlmIC8qIE5PU0hBRE9XICovCi0jZW5kaWYg LyogQ0tfTE9HSU4gKi8KLSNpZmRlZiBOVAotI2RlZmluZSBOVENSRUFURVRPS0VOCi0jZW5kaWYg LyogTlQgKi8KLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSNlbHNlIC8qIE5PTE9HSU4gKi8KLSNp ZmRlZiBDS19MT0dJTgotI3VuZGVmIENLX0xPR0lOCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNl bmRpZiAvKiBOT0xPR0lOICovCi0KLSNpZmRlZiBPUzIKLSNkZWZpbmUgQ0tTUElOTkVSCi0jZW5k aWYgLyogT1MyICovCi0KLSNpZmRlZiBDS19MT0dJTgkJCQkvKiBUZWxuZXQgcHJvdG9jb2wgcmVx dWlyZWQgKi8KLSNpZm5kZWYgVE5DT0RFCQkJCS8qIGZvciBsb2dpbiB0byBJS1NELiAqLwotI2Rl ZmluZSBUTkNPREUKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwot Ci0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSNpZmRlZiBOT1NFTkRVSUQKLSN1bmRlZiBOT1NF TkRVSUQKLSNlbmRpZiAvKiBOT1NFTkRVSUQgKi8KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElP TiAqLwotCi0jaWZkZWYgVE5DT0RFCQkJCS8qIFNob3VsZCBURUxORVQgc2VuZCB1c2VyIElEPyAq LwotI2lmbmRlZiBOT1NFTkRVSUQKLSNpZm5kZWYgQ0tTRU5EVUlECi0jZGVmaW5lIENLU0VORFVJ RAotI2VuZGlmIC8qIENLU0VORFVJRCAqLwotI2VuZGlmIC8qIE5PU0VORFVJRCAqLwotI2VuZGlm IC8qIFROQ09ERSAqLwotCi0vKiBVTklYIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgZ2V0dXNl cnNoZWxsKCkgKi8KLQotI2lmZGVmIFVOSVgKLSNpZm5kZWYgTk9HRVRVU0VSU0hFTEwKLSNpZmRl ZiBJUklYCi0jZGVmaW5lIE5PR0VUVVNFUlNIRUxMCi0jZWxzZQotI2lmZGVmIFBUWAotI2RlZmlu ZSBOT0dFVFVTRVJTSEVMTAotI2Vsc2UKLSNpZmRlZiBBSVhSUwotI2RlZmluZSBOT0dFVFVTRVJT SEVMTAotI2Vsc2UKLSNpZmRlZiBTSU5JWAotI2RlZmluZSBOT0dFVFVTRVJTSEVMTAotI2Vsc2UK LSNpZmRlZiBVTklYV0FSRQotI2RlZmluZSBOT0dFVFVTRVJTSEVMTAotI2Vsc2UKLSNpZmRlZiBD T0hFUkVOVAotI2RlZmluZSBOT0dFVFVTRVJTSEVMTAotI2VuZGlmIC8qIENPSEVSRU5UICovCi0j ZW5kaWYgLyogVU5JWFdBUkUgKi8KLSNlbmRpZiAvKiBTSU5JWCAqLwotI2VuZGlmIC8qIEFJWFJT ICovCi0jZW5kaWYgLyogUFRYICovCi0jZW5kaWYgLyogSVJJWCAqLwotI2VuZGlmIC8qIE5PR0VU VVNFUlNIRUxMICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRl ZiBOVAotI2lmbmRlZiBOT1NZU0xPRwotI2lmbmRlZiBDS1NZU0xPRwotI2RlZmluZSBDS1NZU0xP RwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jZW5kaWYgLyogTk9TWVNMT0cgKi8KLSNlbmRpZiAv KiBOVCAqLwotI2lmZGVmIFVOSVgKLSNpZm5kZWYgTk9TWVNMT0cKLSNpZm5kZWYgQ0tTWVNMT0cK LSNkZWZpbmUgQ0tTWVNMT0cKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotI2VuZGlmIC8qIE5PU1lT TE9HICovCi0jaWZuZGVmIE5PV1RNUAotI2lmbmRlZiBDS1dUTVAKLSNkZWZpbmUgQ0tXVE1QCi0j ZW5kaWYgLyogQ0tXVE1QICovCi0jZW5kaWYgLyogTk9XVE1QICovCi0jaWZuZGVmIE5PR0VUVVNF UlNIRUxMCi0jaWZuZGVmIEdFVFVTRVJTSEVMTAotI2RlZmluZSBHRVRVU0VSU0hFTEwKLSNlbmRp ZiAvKiBHRVRVU0VSU0hFTEwgKi8KLSNlbmRpZiAvKiBOT0dFVFVTRVJTSEVMTCAqLwotI2VuZGlm IC8qIFVOSVggKi8KLV9QUk9UT1RZUCggaW50IGNreGxvZ2luLCAoQ0hBUiAqLCBDSEFSICosIENI QVIgKiwgaW50KSk7Ci1fUFJPVE9UWVAoIGludCBja3hsb2dvdXQsIChWT0lEKSk7Ci0jZW5kaWYg LyogQ0tfTE9HSU4gKi8KLQotI2lmbmRlZiBOT1pMT0NBTFRJTUUJCQkvKiB6bG9jYWx0aW1lKCkg YXZhaWxhYmxlLiAqLwotI2lmZGVmIE9TMk9SVU5JWAotI2RlZmluZSBaTE9DQUxUSU1FCi1fUFJP VE9UWVAoIGNoYXIgKiB6bG9jYWx0aW1lLCAoY2hhciAqKSApOwotI2VuZGlmIC8qIE9TMk9SVU5J WCAqLwotI2VuZGlmIC8qIE5PWkxPQ0FMVElNRSAqLwotCi0jaWZkZWYgQ0tTWVNMT0cJCQkJLyog U3lzbG9nZ2luZyBsZXZlbHMgKi8KLSNkZWZpbmUgU1lTTEdfTk8gMAkJCS8qIE5vIGxvZ2dpbmcg Ki8KLSNkZWZpbmUgU1lTTEdfTEkgMQkJCS8qIExvZ2luL291dCAqLwotI2RlZmluZSBTWVNMR19E SSAyCQkJLyogRGlhbGluZyBvdXQgKi8KLSNkZWZpbmUgU1lTTEdfQUMgMwkJCS8qIE1ha2luZyBh bnkga2luZCBvZiBjb25uZWN0aW9uICovCi0jZGVmaW5lIFNZU0xHX1BSIDQgICAgICAgICAgICAg ICAgICAgICAgLyogUHJvdG9jb2wgT3BlcmF0aW9ucyAqLwotI2RlZmluZSBTWVNMR19GQyA1CQkJ LyogRmlsZSBjcmVhdGlvbiAqLwotI2RlZmluZSBTWVNMR19GQSA2CQkJLyogRmlsZSByZWFkaW5n ICovCi0jZGVmaW5lIFNZU0xHX0NNIDcJCQkvKiBUb3AtbGV2ZWwgY29tbWFuZHMgKi8KLSNkZWZp bmUgU1lTTEdfQ1ggOAkJCS8qIEFsbCBjb21tYW5kcyAqLwotI2RlZmluZSBTWVNMR19EQiA5CQkJ LyogRGVidWcgKi8KLSNkZWZpbmUgU1lTTEdNQVggOQkJCS8qIEhpZ2hlc3QgbGV2ZWwgKi8KLSNk ZWZpbmUgU1lTTEdfREYgU1lTTEdfRkEJCS8qIERlZmF1bHQgbGV2ZWwgKi8KLS8qIExvZ2dpbmcg ZnVuY3Rpb24gKi8KLV9QUk9UT1RZUChWT0lEIGNrc3lzbG9nLChpbnQsIGludCwgY2hhciAqLCBj aGFyICosIGNoYXIgKikpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jaWZuZGVmIENLQ01BSQot ZXh0ZXJuIGludCBja3hsb2dnaW5nLCBja3hzeXNsb2csIGlrZGJvcGVuOwotI2VuZGlmIC8qIENL Q01BSSAqLwotCi0jaWZuZGVmIENLX0tFWVRBQgotI2RlZmluZSBDS19LRVlUQUIKLS8qIEtleXdv cmQgVGFibGUgVGVtcGxhdGUgKi8KLQotLyogTm90ZTogZm9ybWVybHkgZGVmaW5lZCBpbiBja3Vj bWQuaCBidXQgbm93IG1vcmUgd2lkZWx5IHVzZWQgKi8KLQotc3RydWN0IGtleXRhYiB7CQkJCS8q IEtleXdvcmQgdGFibGUgKi8KLSAgICBjaGFyICprd2Q7CQkJCS8qIFBvaW50ZXIgdG8ga2V5d29y ZCBzdHJpbmcgKi8KLSAgICBpbnQga3d2YWw7CQkJCS8qIEFzc29jaWF0ZWQgdmFsdWUgKi8KLSAg ICBpbnQgZmxnczsJCQkJLyogRmxhZ3MgKGFzIGRlZmluZWQgYWJvdmUpICovCi19OwotI2VuZGlm IC8qIENLX0tFWVRBQiAqLwotCi0jaWZkZWYgVU5JWAotX1BST1RPVFlQKCBpbnQgaXNhbGluaywg KGNoYXIgKikpOwotI2VuZGlmCS8qIFVOSVggKi8KLQotI2lmZGVmIE5FVFBUWQotX1BST1RPVFlQ KCBpbnQgZG9fcHR5LCAoaW50ICosIGNoYXIgKiwgaW50KSk7Ci1fUFJPVE9UWVAoIFZPSUQgZW5k X3B0eSwgKHZvaWQpKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLQotI2lmZGVmIENLUk9PVAotX1BS T1RPVFlQKCBpbnQgenNldHJvb3QsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiB6Z2V0 cm9vdCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCB6aW5yb290LCAoY2hhciAqKSApOwotI2Vu ZGlmIC8qIENLUk9PVCAqLwotCi0vKiBMb2NhbCBFY2hvIEJ1ZmZlciBwcm90b3R5cGVzICovCi1f UFJPVE9UWVAoIFZPSUQgbGVfaW5pdCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgbGVfY2xl YW4sICh2b2lkKSk7Ci1fUFJPVE9UWVAoIGludCBsZV9pbmJ1ZiwgKHZvaWQpKTsKLV9QUk9UT1RZ UCggaW50IGxlX3B1dHN0ciwgKENIQVIgKikpOwotX1BST1RPVFlQKCBpbnQgbGVfcHV0cywgKENI QVIgKiwgaW50KSk7Ci1fUFJPVE9UWVAoIGludCBsZV9wdXRjaGFyLCAoQ0hBUikpOwotX1BST1RP VFlQKCBpbnQgbGVfZ2V0Y2hhciwgKENIQVIgKikpOwotCi0vKiAjaWZuZGVmIE5PSFRUUCAqLwot I2lmbmRlZiBOT0NNREFURTJUTQotI2lmbmRlZiBDTURBVEUyVE0KLSNpZmRlZiBPUzJPUlVOSVgK LSNkZWZpbmUgQ01EQVRFMlRNCi0jZW5kaWYgLyogT1MyT1JVTklYICovCi0jaWZkZWYgVk1TCi0j ZGVmaW5lIENNREFURTJUTQotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIENNREFURTJUTSAq LwotI2VuZGlmIC8qIE5PQ01EQVRFMlRNICovCi0KLSNpZmRlZiBDTURBVEUyVE0KLV9QUk9UT1RZ UCggc3RydWN0IHRtICogY21kYXRlMnRtLCAoY2hhciAqLGludCkpOwotI2VuZGlmIC8qIENNREFU RTJUTSAqLwotLyogI2VuZGlmICovIC8qIE5PSFRUUCAqLwotCi0jaWZuZGVmIE5PU0VUVElNRQkJ CS8qIFRoaXMgd291bGQgYmUgc2V0IGluIENGTEFHUyAqLwotI2lmZGVmIFNWUjRPUlBPU0lYCQkJ LyogRGVmaW5lZCBpbiBJRUVFIDEwMDMuMS0xOTk2ICovCi0jaWZuZGVmIFVUSU1FSAkJCQkvKiBh bmQgaW4gU1ZJRCBmb3IgU1ZSNCAqLwotI2RlZmluZSBVVElNRUgKLSNlbmRpZiAvKiBVVElNRUgg Ki8KLSNlbHNlICAvKiBTVlI0T1JQT1NJWCAqLwotI2lmZGVmIE9TRgkJCQkvKiBWZXJpZmllZCBi eSBMdWNhcyBIYXJ0ICovCi0jaWZuZGVmIFVUSU1FSAotI2RlZmluZSBVVElNRUgKLSNlbmRpZiAv KiBVVElNRUggKi8KLSNlbHNlICAvKiBPU0YgKi8KLSNpZmRlZiBTVU5PUzQxCQkJCS8qIFZlcmlm aWVkIGJ5IEx1Y2FzIEhhcnQgKi8KLSNpZm5kZWYgVVRJTUVICi0jZGVmaW5lIFVUSU1FSAotI2Vu ZGlmIC8qIFVUSU1FSCAqLwotI2Vsc2UgIC8qIFNVTk9TNDEgKi8KLSNpZmRlZiBPUzIKLSNpZm5k ZWYgU1lTVVRJTUVICi0jZGVmaW5lIFNZU1VUSU1FSAotI2VuZGlmIC8qIFNZU1VUSU1FSCAqLwot I2Vsc2UgLyogT1MyICovCi0jaWZkZWYgVk1TCi0jaWZuZGVmIFVUSU1FSAotI2RlZmluZSBVVElN RUgKLSNlbmRpZiAvKiBVVElNRUggKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbmRpZiAvKiBTVU5PUzQxICovCi0jZW5kaWYgLyogT1NGICovCi0jZW5kaWYgLyogU1ZS NE9SUE9TSVggKi8KLSNlbmRpZiAvKiBOT1NFVFRJTUUgKi8KLQotI2lmZGVmIE5FV0ZUUAotX1BS T1RPVFlQKCBpbnQgZnRwaXNjb25uZWN0ZWQsICh2b2lkKSk7Ci1fUFJPVE9UWVAoIGludCBmdHBp c2xvZ2dlZGluLCAodm9pZCkpOwotX1BST1RPVFlQKCBpbnQgZnRwaXNzZWN1cmUsICh2b2lkKSk7 Ci0jZW5kaWYgLyogTkVXRlRQICovCi0KLV9QUk9UT1RZUCggaW50IHJlYWRwYXNzLCAoY2hhciAq LCBjaGFyICosIGludCkpOwotX1BST1RPVFlQKCBpbnQgcmVhZHRleHQsIChjaGFyICosIGNoYXIg KiwgaW50KSk7Ci0KLSNpZmRlZiBPUzIKLV9QUk9UT1RZUChpbnQgY2tfYXV0aF9sb2FkZGxsLCAo Vk9JRCkpOwotX1BST1RPVFlQKGludCBja19hdXRoX3VubG9hZGRsbCwgKFZPSUQpKTsKLSNlbmRp ZiAvKiBPUzIgKi8KLQotI2lmZGVmIE5UCi1fUFJPVE9UWVAoRFdPUkQgY2tHZXRMb25nUGF0aG5h bWUsKExQQ1NUUiBscEZpbGVOYW1lLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTFBTVFIgbHBCdWZmZXIsIERXT1JEIGNjaEJ1ZmZlcikpOwotI2VuZGlmIC8qIE5UICovCi0K LQotI2luY2x1ZGUgImNrY2xpYi5oIgotCi0vKiBFbmQgb2YgY2tjZGViLmggKi8KLSNlbmRpZiAv KiBDS0NERUJfSCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2tjZm4yLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAy L2NrY2ZuMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmEwNTA3Li4wMDAwMDAw Ci0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjZm4yLmMKKysr IC9kZXYvbnVsbApAQCAtMSwzMzUwICswLDAgQEAKLS8qICBDIEsgQyBGIE4gMiAgLS0gIFN5c3Rl bS1pbmRlcGVuZGVudCBLZXJtaXQgcHJvdG9jb2wgc3VwcG9ydCBmdW5jdGlvbnMuLi4gKi8KLQot LyogIC4uLlBhcnQgMiAoY29udGludWVkIGZyb20gY2tjZm5zLmMpICAqLwotCi0vKgotICBBdXRo b3I6IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAotICBDb2x1bWJpYSBVbml2ZXJz aXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCi0KLSAgQ29w eXJpZ2h0IChDKSAxOTg1LCAyMDExLAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNp dHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNl ZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4 dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4K LSovCi0vKgotIE5vdGUgLS0gaWYgeW91IGNoYW5nZSB0aGlzIGZpbGUsIHBsZWFzZSBhbWVuZCB0 aGUgdmVyc2lvbiBudW1iZXIgYW5kIGRhdGUgYXQKLSB0aGUgdG9wIG9mIGNrY2Zucy5jIGFjY29y ZGluZ2x5LgotKi8KLQotI2luY2x1ZGUgImNrY3N5bS5oIgkJCS8qIENvbXBpbGF0aW9uIG9wdGlv bnMgKi8KLSNpbmNsdWRlICJja2NkZWIuaCIJCQkvKiBEZWJ1Z2dpbmcgYW5kIG90aGVyIHN5bWJv bHMgKi8KLSNpbmNsdWRlICJja2Nhc2MuaCIJCQkvKiBBU0NJSSBzeW1ib2xzICovCi0jaW5jbHVk ZSAiY2tja2VyLmgiCQkJLyogS2VybWl0IHN5bWJvbHMgKi8KLSNpbmNsdWRlICJja2N4bGEuaCIJ CQkvKiBUcmFuc2xhdGlvbiAqLwotI2luY2x1ZGUgImNrY25ldC5oIgkJCS8qIElLUyBhbmQgVk1T ICNkZWZpbmUgVENQU09DS0VUICovCi0jaWZkZWYgVENQU09DS0VUCQkJLyogRm9yIFRFTE5FVCBi dXNpbmVzcyBpbiBzcGFjaygpICovCi1leHRlcm4gaW50IHRuX25sbSwgdHRucHJvdG8sIHRuX2Jf bmxtOwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi1leHRlcm4gaW50IHBhcml0eSwgbmV0d29y aywgbG9jYWwsIGludGVycnVwdGVkLCBmYXRhbGlvLCB3YXNjbG9zZWQ7Ci0KLWludCBrc3RhcnRh Y3RpdmUgPSAwOwkJCS8qIEZsYWcgZm9yIGtzdGFydCgpIGluIGEgcGFja2V0ICovCi0KLXN0YXRp YyBDSEFSIHBfdGJsW10gPSB7CQkJLyogRXZlbiBwYXJpdHkgdGFibGUgZm9yIGRvcGFyKCkuICov Ci0gICAgKENIQVIpICdcMDAwJywJCQkvKiBBTlNJIEMgY2FzdHMgJ1xvb28nIGNvbnN0YW50cyAg Ki8KLSAgICAoQ0hBUikgJ1wyMDEnLAkJCS8qIHRvIHNpZ25lZCBjaGFyLCBzbyB3ZSBoYXZlIHRv ICAqLwotICAgIChDSEFSKSAnXDIwMicsCQkJLyogY2FzdCBiYWNrIHRvIHVuc2lnbmVkIGNoYXIu Li4gICovCi0gICAgKENIQVIpICdcMDAzJywKLSAgICAoQ0hBUikgJ1wyMDQnLAotICAgIChDSEFS KSAnXDAwNScsCi0gICAgKENIQVIpICdcMDA2JywKLSAgICAoQ0hBUikgJ1wyMDcnLAotICAgIChD SEFSKSAnXDIxMCcsCi0gICAgKENIQVIpICdcMDExJywKLSAgICAoQ0hBUikgJ1wwMTInLAotICAg IChDSEFSKSAnXDIxMycsCi0gICAgKENIQVIpICdcMDE0JywKLSAgICAoQ0hBUikgJ1wyMTUnLAot ICAgIChDSEFSKSAnXDIxNicsCi0gICAgKENIQVIpICdcMDE3JywKLSAgICAoQ0hBUikgJ1wyMjAn LAotICAgIChDSEFSKSAnXDAyMScsCi0gICAgKENIQVIpICdcMDIyJywKLSAgICAoQ0hBUikgJ1wy MjMnLAotICAgIChDSEFSKSAnXDAyNCcsCi0gICAgKENIQVIpICdcMjI1JywKLSAgICAoQ0hBUikg J1wyMjYnLAotICAgIChDSEFSKSAnXDAyNycsCi0gICAgKENIQVIpICdcMDMwJywKLSAgICAoQ0hB UikgJ1wyMzEnLAotICAgIChDSEFSKSAnXDIzMicsCi0gICAgKENIQVIpICdcMDMzJywKLSAgICAo Q0hBUikgJ1wyMzQnLAotICAgIChDSEFSKSAnXDAzNScsCi0gICAgKENIQVIpICdcMDM2JywKLSAg ICAoQ0hBUikgJ1wyMzcnLAotICAgIChDSEFSKSAnXDI0MCcsCi0gICAgKENIQVIpICdcMDQxJywK LSAgICAoQ0hBUikgJ1wwNDInLAotICAgIChDSEFSKSAnXDI0MycsCi0gICAgKENIQVIpICdcMDQ0 JywKLSAgICAoQ0hBUikgJ1wyNDUnLAotICAgIChDSEFSKSAnXDI0NicsCi0gICAgKENIQVIpICdc MDQ3JywKLSAgICAoQ0hBUikgJ1wwNTAnLAotICAgIChDSEFSKSAnXDI1MScsCi0gICAgKENIQVIp ICdcMjUyJywKLSAgICAoQ0hBUikgJ1wwNTMnLAotICAgIChDSEFSKSAnXDI1NCcsCi0gICAgKENI QVIpICdcMDU1JywKLSAgICAoQ0hBUikgJ1wwNTYnLAotICAgIChDSEFSKSAnXDI1NycsCi0gICAg KENIQVIpICdcMDYwJywKLSAgICAoQ0hBUikgJ1wyNjEnLAotICAgIChDSEFSKSAnXDI2MicsCi0g ICAgKENIQVIpICdcMDYzJywKLSAgICAoQ0hBUikgJ1wyNjQnLAotICAgIChDSEFSKSAnXDA2NScs Ci0gICAgKENIQVIpICdcMDY2JywKLSAgICAoQ0hBUikgJ1wyNjcnLAotICAgIChDSEFSKSAnXDI3 MCcsCi0gICAgKENIQVIpICdcMDcxJywKLSAgICAoQ0hBUikgJ1wwNzInLAotICAgIChDSEFSKSAn XDI3MycsCi0gICAgKENIQVIpICdcMDc0JywKLSAgICAoQ0hBUikgJ1wyNzUnLAotICAgIChDSEFS KSAnXDI3NicsCi0gICAgKENIQVIpICdcMDc3JywKLSAgICAoQ0hBUikgJ1wzMDAnLAotICAgIChD SEFSKSAnXDEwMScsCi0gICAgKENIQVIpICdcMTAyJywKLSAgICAoQ0hBUikgJ1wzMDMnLAotICAg IChDSEFSKSAnXDEwNCcsCi0gICAgKENIQVIpICdcMzA1JywKLSAgICAoQ0hBUikgJ1wzMDYnLAot ICAgIChDSEFSKSAnXDEwNycsCi0gICAgKENIQVIpICdcMTEwJywKLSAgICAoQ0hBUikgJ1wzMTEn LAotICAgIChDSEFSKSAnXDMxMicsCi0gICAgKENIQVIpICdcMTEzJywKLSAgICAoQ0hBUikgJ1wz MTQnLAotICAgIChDSEFSKSAnXDExNScsCi0gICAgKENIQVIpICdcMTE2JywKLSAgICAoQ0hBUikg J1wzMTcnLAotICAgIChDSEFSKSAnXDEyMCcsCi0gICAgKENIQVIpICdcMzIxJywKLSAgICAoQ0hB UikgJ1wzMjInLAotICAgIChDSEFSKSAnXDEyMycsCi0gICAgKENIQVIpICdcMzI0JywKLSAgICAo Q0hBUikgJ1wxMjUnLAotICAgIChDSEFSKSAnXDEyNicsCi0gICAgKENIQVIpICdcMzI3JywKLSAg ICAoQ0hBUikgJ1wzMzAnLAotICAgIChDSEFSKSAnXDEzMScsCi0gICAgKENIQVIpICdcMTMyJywK LSAgICAoQ0hBUikgJ1wzMzMnLAotICAgIChDSEFSKSAnXDEzNCcsCi0gICAgKENIQVIpICdcMzM1 JywKLSAgICAoQ0hBUikgJ1wzMzYnLAotICAgIChDSEFSKSAnXDEzNycsCi0gICAgKENIQVIpICdc MTQwJywKLSAgICAoQ0hBUikgJ1wzNDEnLAotICAgIChDSEFSKSAnXDM0MicsCi0gICAgKENIQVIp ICdcMTQzJywKLSAgICAoQ0hBUikgJ1wzNDQnLAotICAgIChDSEFSKSAnXDE0NScsCi0gICAgKENI QVIpICdcMTQ2JywKLSAgICAoQ0hBUikgJ1wzNDcnLAotICAgIChDSEFSKSAnXDM1MCcsCi0gICAg KENIQVIpICdcMTUxJywKLSAgICAoQ0hBUikgJ1wxNTInLAotICAgIChDSEFSKSAnXDM1MycsCi0g ICAgKENIQVIpICdcMTU0JywKLSAgICAoQ0hBUikgJ1wzNTUnLAotICAgIChDSEFSKSAnXDM1Nics Ci0gICAgKENIQVIpICdcMTU3JywKLSAgICAoQ0hBUikgJ1wzNjAnLAotICAgIChDSEFSKSAnXDE2 MScsCi0gICAgKENIQVIpICdcMTYyJywKLSAgICAoQ0hBUikgJ1wzNjMnLAotICAgIChDSEFSKSAn XDE2NCcsCi0gICAgKENIQVIpICdcMzY1JywKLSAgICAoQ0hBUikgJ1wzNjYnLAotICAgIChDSEFS KSAnXDE2NycsCi0gICAgKENIQVIpICdcMTcwJywKLSAgICAoQ0hBUikgJ1wzNzEnLAotICAgIChD SEFSKSAnXDM3MicsCi0gICAgKENIQVIpICdcMTczJywKLSAgICAoQ0hBUikgJ1wzNzQnLAotICAg IChDSEFSKSAnXDE3NScsCi0gICAgKENIQVIpICdcMTc2JywKLSAgICAoQ0hBUikgJ1wzNzcnCi19 OwotCi0vKiAgRCBPIFAgQSBSICAtLSAgQWRkIGFuIGFwcHJvcHJpYXRlIHBhcml0eSBiaXQgdG8g YSBjaGFyYWN0ZXIgICovCi0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwotZG9wYXIocmVnaXN0ZXIg Q0hBUiBjaCkKLSNlbHNlCi1kb3BhcihjaCkgcmVnaXN0ZXIgQ0hBUiBjaDsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotICAgIHsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgYTsKLSAgICBpZiAo IXBhcml0eQotI2lmZGVmIFRDUFNPQ0tFVAotICAgICAgICB8fCAobmV0d29yayAmJiAodHRucHJv dG8gPT0gTlBfVEVMTkVUKSAmJiAoVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpKSkKLSNpZm5kZWYg Tk9YRkVSCi0JfHwgKCFsb2NhbCAmJiBzc3RlbG5ldCkJCS8qIFRFTE5FVCBCSU5BUlkgTU9ERSAq LwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotICAgICAgICAp IHJldHVybigoQ0hBUikgKGNoICYgMjU1KSk7IGVsc2UgYSA9IGNoICYgMTI3OwotICAgIHN3aXRj aCAocGFyaXR5KSB7Ci0JY2FzZSAnZSc6ICByZXR1cm4ocF90YmxbYV0pOwkgICAgICAgICAgICAg LyogRXZlbiAqLwotCWNhc2UgJ20nOiAgcmV0dXJuKChDSEFSKSAoYSB8IDEyOCkpOyAgICAgICAg IC8qIE1hcmsgKi8KLQljYXNlICdvJzogIHJldHVybigoQ0hBUikgKHBfdGJsW2FdIF4gMTI4KSk7 ICAvKiBPZGQgKi8KLQljYXNlICdzJzogIHJldHVybigoQ0hBUikgYSk7CSAgICAgICAgICAgICAv KiBTcGFjZSAqLwotCWRlZmF1bHQ6ICAgcmV0dXJuKChDSEFSKSBhKTsgICAgICAgICAgICAgICAg IC8qIFNvbWV0aGluZyBpbGxlZ2FsICovCi0gICAgfQotfQotCi0jaWZuZGVmIE5PWEZFUgkJCQkv KiBSZXN0IG9mIHRoaXMgZmlsZS4uLiAqLwotCi0jZGVmaW5lIE5FV0RQTAkJCQkvKiBOZXcgZHlu YW1pYyBwYWNrZXQgbGVuZ3RoIG1ldGhvZCAqLwotCi0jaWZkZWYgVk1TCi1leHRlcm4gaW50IGJh dGNoOwotI2Vsc2UKLWV4dGVybiBpbnQgYmFja2dyZDsKLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lm ZGVmIERZTkFNSUMKLWV4dGVybiBzdHJ1Y3QgcGt0aW5mbyAqc19wa3Q7CQkvKiBhcnJheSBvZiBw a3RpbmZvIHN0cnVjdHVyZXMgKi8KLWV4dGVybiBzdHJ1Y3QgcGt0aW5mbyAqcl9wa3Q7CQkvKiBh cnJheSBvZiBwa3RpbmZvIHN0cnVjdHVyZXMgKi8KLSNlbHNlCi1leHRlcm4gc3RydWN0IHBrdGlu Zm8gc19wa3RbXTsJCS8qIGFycmF5IG9mIHBrdGluZm8gc3RydWN0dXJlcyAqLwotZXh0ZXJuIHN0 cnVjdCBwa3RpbmZvIHJfcGt0W107CQkvKiBhcnJheSBvZiBwa3RpbmZvIHN0cnVjdHVyZXMgKi8K LSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLWV4dGVybiBpbnQgc3NlcXRibFtdLCByc2VxdGJsW10s IHNidWZ1c2VbXSwgc2Fja3RibFtdLCB3c2xvdHMsIHdpbmxvLCB3c2xvdG4sCi0gIHNidWZudW0s IHJidWZudW0sIHBrdHBhdXMsIHJlbGlhYmxlOwotCi0jaWZkZWYgU1RSRUFNSU5HCi1zdGF0aWMg aW50IGRvbnRzZW5kID0gMDsKLWV4dGVybiBpbnQgc3RyZWFtaW5nOwotI2VuZGlmIC8qIFNUUkVB TUlORyAqLwotCi1leHRlcm4gaW50IHR0cHJ0eTsJCQkvKiBmcm9tIGNrKnRpby5jICovCi1leHRl cm4gaW50IGF1dG9wYXI7Ci0KLWV4dGVybiBpbnQgc3BzaXosIHNwbWF4LCBycHNpeiwgdGltaW50 LCB0aW1lZiwgbnBhZCwgYmVzdGxlbiwgbWF4c2VuZDsKLWV4dGVybiBpbnQgcnB0LCBycHRxLCBy cHRmbGcsIGNhcGFzLCBzcHNpemYsIGVuX2ZpbiwgdHNlY3MsIGZsb3c7Ci1leHRlcm4gaW50IHBr dG51bSwgc25kdHlwLCByY3Z0eXAsIGJjdHIsIGJjdHUsIGJjdGYsIGJjdGwsIHJzbiwgcmxuLCBt YXh0cnk7Ci1leHRlcm4gaW50IHNpemUsIG9zaXplLCBtYXhzaXplLCBzcGt0bCwgcnBrdGwsIG5m aWxzLCBzdGRvdWYsIGZzZWNzOwotZXh0ZXJuIGludCB0dXJuLCB0dXJuY2gsIGRpc3BsYSwgcGt0 bG9nLCBzZXNsb2csIHhmbGcsIG15cGFkbjsKLWV4dGVybiBpbnQgaGNmbGcsIHNlcnZlciwgY3hz ZWVuLCBjenNlZW4sIGRpc2NhcmQsIHNsb3N0YXJ0OwotZXh0ZXJuIGludCBuYWtzdGF0ZSwgcXVp ZXQsIHN1Y2Nlc3MsIHhpdHN0YSwgd2hhdCwgZmlsZXN0YXR1czsKLWV4dGVybiBpbnQgc3BhY2tl dHMsIHJwYWNrZXRzLCB0aW1lb3V0cywgcmV0cmFucywgY3J1bmNoZWQsIHVycHNpejsKLWV4dGVy biBpbnQgY2FycmllciwgZmRpc3BsYSwgc3J2aWRsOwotCi0jaWZkZWYgR0ZUSU1FUgotZXh0ZXJu IENLRkxPQVQgZnB0c2VjcywgZnBmc2VjcywgZnB4ZnNlY3M7Ci0jZW5kaWYgLyogR0ZUSU1FUiAq LwotCi1leHRlcm4gbG9uZyBmaWxjbnQsIGZpbHJlaiwgc3BlZWQsIGZpbGNwcywgdGZjcHM7Ci1l eHRlcm4gQ0tfT0ZGX1QgZmZjLCBmbGNpLCBmbGNvLCB0bGNpLCB0bGNvLCB0ZmM7Ci0KLWV4dGVy biBjaGFyICpjbWFyZywgZmlsbmFtW107Ci0KLWV4dGVybiBDSEFSIHBhZGNoLCBteXBhZGMsIGVv bCwgc2VvbCwgY3RscSwgc3N0YXRlOwotZXh0ZXJuIENIQVIgKnJlY3BrdCwgKmRhdGEsIG15aW5p dFtdOwotZXh0ZXJuIENIQVIgKnNydnB0ciwgc3RjaHIsIG15c3RjaCwgKnJkYXRhcDsKLWV4dGVy biBDSEFSIHBhZGJ1ZltdOwotZXh0ZXJuIENIQVIgKiBlcGt0bXNnOwotZXh0ZXJuIGludCBlcGt0 cmN2ZCwgZXBrdHNlbnQ7Ci0KLSNpZmRlZiBPUzIJCQkJLyogQVVUT0RPV05MT0FEIHBhcmFtZXRl cnMgKi8KLWV4dGVybiBpbnQgYWRsX2ttb2RlLCBhZGxfem1vZGU7CS8qIE1hdGNoIFBhY2tldCB0 byBzaWduYWwgZG93bmxvYWQgKi8KLWV4dGVybiBjaGFyICogYWRsX2tzdHI7CQkJLyogS0VSTUlU IERvd25sb2FkIFN0cmluZyAqLwotZXh0ZXJuIGNoYXIgKiBhZGxfenN0cjsJCQkvKiBaTU9ERU0g RG93bmxvYWQgU3RyaW5nICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBDS19BVVRPREwK LUNIQVIga3NidWZbOTZdID0geyBOVUwsIE5VTCB9OwkJLyogQXV0b2Rvd25sb2FkICJLZXJtaXQg U3RhcnQiIGJ1ZiAqLwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotCi1pbnQgbnVtZXJycyA9IDA7 CQkJLyogTnVtYmVyIG9mIHBhY2tldCBlcnJvcnMgc28gZmFyICovCi1pbnQgcmN2dGltbyA9IDA7 CQkJLyogVGltZW91dCBmb3IgcmVjZWl2aW5nIGEgcGFja2V0ICovCi1pbnQgaWRsZXRtbyA9IDA7 CQkJLyogRmxhZyBmb3IgaWRsZSB0aW1lb3V0ICovCi0KLWxvbmcgZmlsY3BzID0gMEw7CQkJLyog Q1BTIG1vc3QgcmVjZW50IGZpbGUgdHJhbnNmZXJyZWQgKi8KLWxvbmcgdGZjcHMgID0gMEw7CQkJ LyogQ1BTIG1vc3QgcmVjZW50IHRyYW5zYWN0aW9uICovCi1sb25nIHhmc2VjcyA9IDBMOwkJCS8q IEVsYXBzZWQgdGltZSBmb3IgbW9zdCByZWNlbnQgZmlsZSAqLwotI2lmZGVmIEdGVElNRVIKLUNL RkxPQVQgZnB4ZnNlY3MgPSAwLjA7CQkJLyogRGl0dG8sIGJ1dCBmbG9hdGluZyBwb2ludCAqLwot I2VuZGlmIC8qIEdGVElNRVIgKi8KLQotI2lmZGVmIENLX1RJTUVSUwotaW50IHJydHRibFs2NF0s IHNydHRibFs2NF07CQkvKiBQYWNrZXQgdGltZXN0YW1wIHRhYmxlcyAqLwotZXh0ZXJuIGludCBy dHRmbGc7Ci0jZGVmaW5lIFJUVF9TQ0FMRSAxMDAwCi1sb25nCi0gIHJ0dHNhbXBsZXMsCQkJCS8q IFJvdW5kIHRyaXAgdGltZSBzYW1wbGVzICovCi0gIHJ0dGRlbGF5LAkJCQkvKiBSVFQgZGVsYXkg Ki8KLSAgcGt0aW50dmwsCQkJCS8qIEludGVycGFja2V0IGFycml2YWwgdGltZSAqLwotICBydHR2 YXJpYW5jZSwJCQkJLyogUlRUIHZhcmlhbmNlICovCi0gIHJ0dHN0ZGRldjsJCQkJLyogUlRUIHN0 YW5kYXJkIGRldmlhdGlvbiAqLwotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotCi0vKiBDUkMgZ2Vu ZXJhdGlvbiB0YWJsZXMgKi8KLQotbG9uZyBjcmN0YVsxNl0gPSB7IDBMLCAwMTAyMDFMLCAwMjA0 MDJMLCAwMzA2MDNMLCAwNDEwMDRMLAotICAwNTEyMDVMLCAwNjE0MDZMLCAwNzE2MDdMLCAwMTAy MDEwTCwgMDExMjIxMUwsIDAxMjI0MTJMLCAwMTMyNjEzTCwgMDE0MzAxNEwsCi0gIDAxNTMyMTVM LCAwMTYzNDE2TCwgMDE3MzYxN0wKLX07Ci0KLWxvbmcgY3JjdGJbMTZdID0geyAwTCwgMDEwNjEx TCwgMDIxNDIyTCwgMDMxMjMzTCwgMDQzMDQ0TCwKLSAgMDUzNjU1TCwgMDYyNDY2TCwgMDcyMjc3 TCwgMDEwNjExMEwsIDAxMTY3MDFMLCAwMTI3NTMyTCwgMDEzNzMyM0wsIDAxNDUxNTRMLAotICAw MTU1NzQ1TCwgMDE2NDU3NkwsIDAxNzQzNjdMCi19OwotCi0jaWZkZWYgQ0tfVElNRVJTCi0vKgot ICBSb3VuZC10cmlwIHRpbWVyIGNhbGN1bGF0aW9ucyBhZGFwdGVkIGZyb20gVGltIEtpZW50emxl J3MgYXJ0aWNsZSwKLSAgIkltcHJvdmluZyBLZXJtaXQgUGVyZm9ybWFuY2UiLCBEciBEb2JiJ3Mg Sm91cm5hbCwgRmVicnVhcnkgMTk5Ni4KLSovCi0KLQotLyogIFIgVCBUIEkgTiBJIFQgIC0tICBJ bml0aWFsaXplIHRpbWVycyBhdCBzdGFydCBvZiB0cmFuc2FjdGlvbiAgKi8KLQotVk9JRAotcnR0 aW5pdCgpIHsJCQkJLyogSW5pdGlhbGl6ZSByb3VuZC10cmlwIHRpbWluZyAqLwotICAgIGludCBp OwotCi0gICAgaWYgKHRpbWludCA9PSAwKQotICAgICAgcmV0dXJuOwotCi0gICAgcnR0c2FtcGxl cyAgPSAwTDsJCQkvKiBTYW1wbGVzIChwYWNrZXRzKSAqLwotICAgIHJ0dHZhcmlhbmNlID0gMEw7 CQkJLyogVmFyaWFuY2UgaW4gZGVsYXkgKi8KLSAgICBydHRkZWxheSAgICA9IChsb25nKSB0aW1p bnQgKiBSVFRfU0NBTEU7IC8qIERlbGF5ICovCi0gICAgcGt0aW50dmwgICAgPSAobG9uZykgdGlt aW50ICogUlRUX1NDQUxFOyAvKiBEZWxheSAqLwotICAgIHJ0dHN0ZGRldiAgID0gKGxvbmcpIHRp bWludCAqIFJUVF9TQ0FMRTsgLyogU3RhbmRhcmQgZGV2aWF0aW9uIG9mIGRlbGF5ICovCi0KLSAg ICAvKiBUYWJsZXMgb2YgdGltZXN0YW1wcyBpbmRleGVkIGJ5IHBhY2tldCBzZXF1ZW5jZSBudW1i ZXIgKi8KLQotICAgIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JcnJ0dGJsW2ldID0gLTE7 CQkJLyogVGltZSBlYWNoIHBhY2tldCB3YXMgcmVjZWl2ZWQgKi8KLQlzcnR0YmxbaV0gPSAtMTsJ CQkvKiBUaW1lIGVhY2ggcGFja2V0IHdhcyBzZW50ICovCi0gICAgfQotICAgIHJjdnRpbW8gPSB0 aW1pbnQ7CQkJLyogSW5pdGlhbCB0aW1lb3V0IGlzIHdoYXQgdXNlciBzYWlkICovCi19Ci0KLS8q ICBHIEUgVCBSIFQgVCAgLS0gIEdldCBwYWNrZXQgcm91bmQgdHJpcCB0aW1lICAqLwotLyoKLSAg Q2FsbCB3aXRoIG5ha3N0YXRlID09IDAgaWYgZmlsZSBzZW5kZXIsIG5vbnplcm8gaWYgcmVjZWl2 ZXIsCi0gIGFuZCBuID09IHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIHBhY2tldCB3ZSBq dXN0IHJlY2VpdmVkLgotCi0gIFJldHVybnM6Ci0gIC0xIG9uIGZhaWx1cmUgd2l0aCByY3Z0aW1v IHNldCB0byB0aW1pbnQgKHdoYXQgdGhlIHVzZXIgc2FpZCksIG9yOgotICAgMCBvbiBzdWNjZXNz IHdpdGggcmN2dGltbyBzZXQgdG8gZHluYW1pY2FsbHkgY2FsY3VsYXRlZCB2YWx1ZToKLSAgICAg MSA8PSByY3Z0aW1vIDw9IHRpbWludCAqIDMuCi0qLwotaW50Ci1nZXRydHQobmFrc3RhdGUsIG4p IGludCBuYWtzdGF0ZSwgbjsgewotICAgIGV4dGVybiBpbnQgbWludGltZSwgbWF4dGltZTsKLSAg ICBzdGF0aWMgaW50IHByZXZ6ID0gMCwgcHJldnIgPSAwOwotICAgIGludCB4LCB5LCB5eSwgeiA9 IDAsIHp6ID0gMDsJLyogSG93IGxvbmcgZGlkIGl0IHRha2UgdG8gZ2V0IGhlcmU/ICovCi0KLSAg ICByY3Z0aW1vID0gdGltaW50OwkJCS8qIERlZmF1bHQgdGltZW91dCBpcyB3aGF0IHVzZXIgc2Fp ZCAqLwotCi0gICAgaWYgKHRpbWludCA9PSAwKQkJCS8qIFdlJ3JlIG5vdCB0aW1pbmcgb3V0LiAq LwotICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKCFydHRmbGcpCQkJLyogTm90IHN1cHBvc2Vk IHRvIGJlIGRvaW5nIHRoaXM/ICovCi0gICAgICByZXR1cm4oLTEpOwkJCS8qICBTbyBkb24ndCAq LwotCi0gICAgaWYgKCFSVFRfU0NBTEUpCQkJLyogUGFyYW5vaWEuLi4gKi8KLSAgICAgIHJldHVy bigtMSk7Ci0KLSAgICAvKiBydGltZXIoKSAocmVzZXQgdGltZXIpIGlzIG5vdCBjYWxsZWQgdW50 aWwgMXN0IGRhdGEgcGFja2V0ICovCi0jaWZkZWYgR0ZUSU1FUgotICAgIC8qIHJmdGltZXIoKTsg Ki8KLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgLyogUyAoRiBbIEEgXSBEKiBaKSogQiAqLwot Ci0gICAgLyogTk9URTogd2UgY2FsY3VsYXRlIGJvdGggdGhlIHJvdW5kLXRyaXAgdGltZSBBTkQg dGhlIHBhY2tldCAqLwotICAgIC8qIGFycml2YWwgcmF0ZS4gIFdlIGRvbid0IHVzZSB0aGUgUlRU IGZvciBhbnl0aGluZywgd2UganVzdCBkaXNwbGF5IGl0LiAqLwotICAgIC8qIFRpbWVvdXRzIGFy ZSBiYXNlZCBvbiB0aGUgcGFja2V0IGFycml2YWwgcmF0ZS4gKi8KLQotICAgIGlmIChzcGFja2V0 cyA+IDMpIHsJCQkvKiBEb24ndCBzdGFydCB0aWxsIDR0aCBwYWNrZXQgKi8KLQlpZiAobmFrc3Rh dGUpIHsJCQkvKiBGaWxlIHJlY2VpdmVyICovCi0JICAgIHggPSBycnR0Ymxbbl07CQkgICAgIC8q IFRpbWUgd2hlbiBJIGdvdCBwYWNrZXQgbiAqLwotCSAgICB5ID0gcnJ0dGJsW24gPiAwID8gbiAt IDEgOiA2M107ICAvKiBUaW1lIHdoZW4gSSBnb3QgcGFja2V0IG4tMSAqLwotCSAgICB5eSA9IHNy dHRibFtuID4gMCA/IG4gLSAxIDogNjNdOyAvKiBUaW1lIHdoZW4gSSBzZW50IEFDSyhuLTEpICov Ci0JICAgIGlmICh4ID4gLTEgJiYgeSA+IC0xKSB7CS8qIEJlIGNhcmVmdWwgKi8KLQkJeiA9IHgg LSB5OwkJLyogUGFja2V0IHJhdGUgKi8KLQkJenogPSB4IC0geXk7CQkvKiBSb3VuZCB0cmlwIHRp bWUgKi8KLQkJeisrOwkJCS8qIFNvIHNlbmRlciAmIHJlY2VpdmVyIGRpZmZlciAqLwotCQlkZWJ1 ZyhGMTAxLCJSVFQgUkVDViIsIiIseik7Ci0JICAgIH0gZWxzZSB7CQkJLyogVGhpcyBzaG91bGRu J3QgaGFwcGVuICovCi0JCWRlYnVnKEYxMDEsIlJUVCBSRUNWIEVSUk9SIHNwYWNrZXRzIiwiIixz cGFja2V0cyk7Ci0JCWRlYnVnKEYxMDEsIlJUVCBSRUNWIEVSUk9SIHNlcXVlbmNlIiwiIixuKTsK LQkJcmV0dXJuKC0xKTsKLQkgICAgfQotCX0gZWxzZSB7CQkJLyogRmlsZSBzZW5kZXIgKi8KLQkg ICAgeCA9IHJydHRibFtuXTsJCS8qIFRpbWUgd2hlbiBJIGdvdCBBQ0sobikgKi8KLQkgICAgeSA9 IHJydHRibFtuID4gMCA/IG4gLSAxIDogNjNdOyAvKiBUaW1lIHdoZW4gSSBnb3QgcGFja2V0IG4t MSAqLwotCSAgICB5eSA9IHNydHRibFtuXTsJCS8qIFRpbWUgd2hlbiBJIHNlbnQgbiAqLwotCSAg ICBpZiAoeCA+IC0xICYmIHkgPiAtMSkgewotCQl6ID0geCAtIHk7CQkvKiBQYWNrZXQgcmF0ZSAq LwotCQl6eiA9IHggLSB5eTsJCS8qIFJvdW5kIHRyaXAgdGltZSAqLwotCQlkZWJ1ZyhGMTAxLCJS VFQgU0VORCIsIiIseik7Ci0JICAgIH0gZWxzZSB7Ci0JCWRlYnVnKEYxMDAsIlJUVCBTRU5EIEVS Uk9SIiwiIiwwKTsKLQkJcmV0dXJuKC0xKTsKLQkgICAgfQotCX0KLQlpZiAoeiA8IDEpCQkJLyog Rm9yIGZhc3QgY29ubmVjdGlvbnMgKi8KLQkgIHogPSBSVFRfU0NBTEUgLyAyOwkJLyogQ29udmVy dCB0byBzY2FsZS4uLiAqLwotCWVsc2UKLQkgIHogKj0gUlRUX1NDQUxFOwotCWRlYnVnKEYxMDEs IlJUVCB6IHNjYWxlZCIsIiIseik7Ci0KLQlpZiAoenogPCAxKQkJCS8qIEZvciBmYXN0IGNvbm5l Y3Rpb25zICovCi0JICB6eiA9IFJUVF9TQ0FMRSAvIDI7CQkvKiBDb252ZXJ0IHRvIHNjYWxlLi4u ICovCi0JZWxzZQotCSAgenogKj0gUlRUX1NDQUxFOwotCi0JcnR0ZGVsYXkgPSB6ejsJCQkvKiBS b3VuZCB0cmlwIHRpbWUgb2YgdGhpcyBwYWNrZXQgKi8KLSNpZmRlZiBDT01NRU5UCi0vKgotICBU aGlzIHdhcyB1c2VkIGluIEMtS2VybWl0IDcuMCAoYW5kIDYuMD8pIGJ1dCBub3Qgb25seSBpcyBp dCBvdmVya2lsbCwKLSAgaXQgYWxzbyBjYW4gcHJvZHVjZSByaWRpY3Vsb3VzbHkgbG9uZyB0aW1l b3V0cyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuCi0gIFJlcGxhY2VkIGluIDguMCBieSBhIGZh ciBzaW1wbGVyIGFuZCBtb3JlIGFnZ3Jlc3NpdmUgc3RyYXRlZ3kuCi0qLwotCWlmIChydHRzYW1w bGVzKysgPT0gMEwpIHsJLyogRmlyc3Qgc2FtcGxlICovCi0JICAgIHBrdGludHZsID0gejsKLQl9 IGVsc2UgewkJCS8qIFN1YnNlcXVlbnQgc2FtcGxlcyAqLwotCSAgICBsb25nIG9sZGF2ZyA9IHBr dGludHZsOwotCSAgICBsb25nIHJ0dGRpZmZzcTsKLQotCSAgICBpZiAocnR0c2FtcGxlcyA+IDMw KQkvKiBVc2UgcmVhbCBhdmVyYWdlIGZvciBmaXJzdCAzMCAqLwotCSAgICAgIHJ0dHNhbXBsZXMg PSAzMDsJCS8qICB0aGVuIGRlY2F5aW5nIGF2ZXJhZ2UuICovCi0KLQkgICAgLyogQXZlcmFnZSBk ZWxheSwgZGlmZmVyZW5jZSBzcXVhcmVkLCB2YXJpYW5jZSwgc3RkIGRldmlhdGlvbiAqLwotCi0J ICAgIHBrdGludHZsICs9ICh6IC0gcGt0aW50dmwpIC8gcnR0c2FtcGxlczsKLQkgICAgcnR0ZGlm ZnNxID0gKHogLSBvbGRhdmcpICogKHogLSBvbGRhdmcpOwotCSAgICBydHR2YXJpYW5jZSArPSAo cnR0ZGlmZnNxIC0gcnR0dmFyaWFuY2UpIC8gcnR0c2FtcGxlczsKLQkgICAgZGVidWcoRjEwMSwi UlRUIHN0ZGRldjEiLCIiLHJ0dHN0ZGRldik7Ci0JICAgIGlmIChydHRzdGRkZXYgPCAxTCkJCS8q IEl0IGNhbiBiZSB6ZXJvLCBpbiB3aGljaCBjYXNlICovCi0JICAgICAgcnR0c3RkZGV2ID0gUlRU X1NDQUxFIC8gMzsgLyogc2V0IGl0IHRvIHNvbWV0aGluZyBzbWFsbC4uLiAqLwotCSAgICBydHRz dGRkZXYgPSAocnR0c3RkZGV2ICsgcnR0dmFyaWFuY2UgLyBydHRzdGRkZXYpIC8gMjsKLQl9Ci0J ZGVidWcoRjEwMSwiUlRUIHN0ZGRldjIiLCIiLHJ0dHN0ZGRldik7Ci0JZGVidWcoRjEwMSwiUlRU IGRlbGF5ICAiLCIiLHBrdGludHZsKTsKLQlyY3Z0aW1vID0gKHBrdGludHZsICsgKDNMICogcnR0 c3RkZGV2KSkgLyBSVFRfU0NBTEUgKyAxOwotCWlmIChycGFja2V0cyA8IDMyKQkJLyogQWxsb3cg Zm9yIHNsb3cgc3RhcnQgKi8KLQkgIHJjdnRpbW8gKz0gcmN2dGltbyArIDI7Ci0JZWxzZSBpZiAo cnBhY2tldHMgPCA2NCkKLQkgIHJjdnRpbW8gKz0gcmN2dGltbyAvIDIgKyAxOwotICAgICAgICAv KiBPbiBhIHJlbGlhYmxlIGxpbmssIGRvbid0IHRyeSB0b28gaGFyZCB0byB0aW1lIG91dC4gKi8K LQkvKiBFc3BlY2lhbGx5IG9uIGZhc3QgbG9jYWwgbmV0d29yayBjb25uZWN0aW9ucy4gKi8KLSAg ICAgICAgaWYgKHNlcnZlciAmJiB3aGF0ID09IFdfTk9USElORykgLyogU2VydmVyIGNvbW1hbmQg d2FpdCAqLwotCSAgcmN2dGltbyA9IHJjdnRpbW87CQkvKiA9PSBzcnZ0aW0gKi8KLSAgICAgICAg ZWxzZSBpZiAocmVsaWFibGUgPT0gU0VUX09OICYmIHJjdnRpbW8gPiAwKSAvKiBSZWxpYWJsZSAq LwotCSAgcmN2dGltbyA9IHJjdnRpbW8gKzE1OwkvKiBhbmQgbm90IHNlcnZlciBjb21tYW5kIHdh aXQgKi8KLSAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgcmVs aWFibGUgb3Igc2VydmVyIGNtZCB3YWl0ICovCi0JICByY3Z0aW1vID0gcmN2dGltbzsKLQlpZiAo cmN2dGltbyA8IG1pbnRpbWUpCQkvKiBMb3dlciBib3VuZCAqLwotCSAgcmN2dGltbyA9IG1pbnRp bWU7Ci0JaWYgKG1heHRpbWUgPiAwKSB7CQkvKiBVc2VyIHNwZWNpZmllZCBhbiB1cHBlciBib3Vu ZCAqLwotCSAgICBpZiAocmN2dGltbyA+IG1heHRpbWUpCi0JICAgICAgcmN2dGltbyA9IG1heHRp bWU7Ci0JfSBlbHNlIGlmIChtYXh0aW1lID09IDApIHsJLyogVXNlciBkaWRuJ3Qgc3BlY2lmeSAq LwotCSAgICBpZiAocmN2dGltbyA+IHRpbWludCAqIDYpCi0JICAgICAgcmN2dGltbyA9IHRpbWlu dCAqIDY7Ci0JfQotI2Vsc2UgIC8qIENPTU1FTlQgKi8KLSNpZmRlZiBDS0ZMT0FUCi0JewotCSAg ICBDS0ZMT0FUIHg7Ci0JICAgIHggPSAoQ0tGTE9BVCkocHJldnogKyB6ICsgeikgLyAzLjA7Ci0J ICAgIHJjdnRpbW8gPSAoaW50KSgoKChDS0ZMT0FUKXggKiAyLjY2KSAvIFJUVF9TQ0FMRSkgKyAw LjUpOwotCSAgICBkZWJ1ZyhGMTAxLCJSVFQgcmN2dGltbyAoZmxvYXQpIiwiIixyY3Z0aW1vKTsK LQl9Ci0jZWxzZQotCXJjdnRpbW8gPSAocHJldnogKyB6ICsgeikgLyBSVFRfU0NBTEU7Ci0JZGVi dWcoRjEwMSwiUlRUIHJjdnRpbW8gKGludCkiLCIiLHJjdnRpbW8pOwotI2VuZGlmIC8qIENLRkxP QVQgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLQl6eiA9IChydHRkZWxheSArIDUwMCkgLyAx MDAwOwotCWlmIChyY3Z0aW1vID4gKHp6ICogMykpCi0JICByY3Z0aW1vID0genogKiAzOwotCi0J aWYgKHJjdnRpbW8gPCAxKQotCSAgcmN2dGltbyA9IDE7Ci0JaWYgKG1pbnRpbWUgPiAwKSB7Ci0J ICAgIGlmIChyY3Z0aW1vIDwgbWludGltZSkJLyogTG93ZXIgYm91bmQgKi8KLQkgICAgICByY3Z0 aW1vID0gbWludGltZTsKLQl9Ci0JaWYgKG1heHRpbWUgPiAwKSB7CQkvKiBVcHBlciBib3VuZCAq LwotCSAgICBpZiAocmN2dGltbyA+IG1heHRpbWUpCi0JICAgICAgcmN2dGltbyA9IG1heHRpbWU7 Ci0JfQotCWlmIChyY3Z0aW1vID09IChwcmV2ciAtIDEpKQotCSAgcmN2dGltbysrOwotCi0JZGVi dWcoRjEwMSwiUlRUIGZpbmFsIHJjdnRpbW8iLCIiLHJjdnRpbW8pOwotICAgIH0KLSAgICBwcmV2 eiA9IHo7Ci0gICAgcHJldnIgPSByY3Z0aW1vOwotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAv KiBDS19USU1FUlMgKi8KLQotLyogIEkgTiBQIFUgVCAgLS0gIEF0dGVtcHQgdG8gcmVhZCBwYWNr ZXQgbnVtYmVyICdwa3RudW0nLiAgKi8KLQotLyoKLSBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0 IGZlZWRzIGlucHV0IHRvIEtlcm1pdCdzIGZpbml0ZSBzdGF0ZSBtYWNoaW5lLAotIGluIHRoZSBm b3JtIG9mIGEgY2hhcmFjdGVyIGluIHRoZSByYW5nZSAzMi0xMjYsIG5vcm1hbGx5IGEgcGFja2V0 IHR5cGUKLSAodXBwZXJjYXNlIGxldHRlcikgb3IgcHNldWRvLXBhY2tldC10eXBlIChsb3dlcmNh c2UgbGV0dGVyKS4KLQotIElmIGEgc3BlY2lhbCBzdGFydCBzdGF0ZSBpcyBpbiBlZmZlY3QsIHRo YXQgc3RhdGUgaXMgcmV0dXJuZWQgYXMgaWYgaXQgd2VyZQotIHRoZSB0eXBlIG9mIGFuIGluY29t aW5nIHBhY2tldC4KLSovCi1pbnQKLWlucHV0KCkgewotICAgIGludCB0eXBlID0gMCwgYWNrdHlw ZTsJCS8qIFJlY2VpdmVkIHBhY2tldCB0eXBlICovCi0gICAgaW50IHgsIHksIGs7CQkJLyogV29y a2VycyAqLwotICAgIGludCB6LCBwaSwgbmY7CQkJLyogV29ya2VyLCBwYWNrZXQgaW5kZXgsIE5B SyBmbGFnICovCi0gICAgaW50IG5hazJhY2sgPSAwOwotCi0gICAgZGVidWcoRjAwMCwiaW5wdXQg c3N0YXRlIiwiIixzc3RhdGUpOwotICAgIGRlYnVnKEYxMDEsImlucHV0IG5ha3N0YXRlIiwiIixu YWtzdGF0ZSk7Ci0gICAgZGVidWcoRjAwMCwiaW5wdXQgc25kdHlwIiwiIixzbmR0eXApOwotICAg IGRlYnVnKEYxMDEsImlucHV0IHhpdHN0YSIsIiIseGl0c3RhKTsKLSAgICBkZWJ1ZyhGMTAxLCJp bnB1dCB3aGF0IiwiIix3aGF0KTsKLQotICAgIHdoaWxlICgxKSB7CQkJCS8qIEJpZyBsb29wLi4u ICovCi0vKgotICBJdCBpcyB0dGNoaygpJ3MgcmVzcG9uc2liaWxpdHkgdG8gdGVsbCB1cyBpZiB0 aGUgY29ubmVjdGlvbiBpcyBicm9rZW4sCi0gIGFuZCB0byBkbyBzbyBpbnN0YW50bHkgYW5kIG5v bmRlc3RydWN0aXZlbHkgLS0gbm8gYmxvY2tpbmcsIGV0YywgdGhhdCB3b3VsZAotICBzbG93IGRv d24gZmlsZSB0cmFuc2Zlci4KLSovCi0JaWYgKHR0Y2hrKCkgPCAwKSB7Ci0JICAgIGRlYnVnKEYx MDAsImlucHV0IENPTk5FQ1RJT04gQlJPS0VOIiwiIiwwKTsKLQkgICAgZmF0YWxpbyA9IDE7Ci0J ICAgIHJldHVybigncScpOwotCX0KLQlpZiAoc3N0YXRlICE9IDApIHsJCS8qIElmIGEgc3RhcnQg c3RhdGUgaXMgaW4gZWZmZWN0LCAqLwotCSAgICB0eXBlID0gc3N0YXRlOwkJLyogcmV0dXJuIGl0 IGxpa2UgYSBwYWNrZXQgdHlwZSwgKi8KLQkgICAgc3N0YXRlID0gMDsJCQkvKiBhbmQgdGhlbiBu dWxsaWZ5IGl0LiAqLwotCSAgICBudW1lcnJzID0gMDsJCS8qIChQV1ApIG5vIGVycm9ycyBzbyBm YXIgKi8KLQkgICAgcmV0dXJuKHR5cGUpOwotCX0KLQlpZiAobmFrc3RhdGUpIHsJCQkvKiBUaGlz IHNlY3Rpb24gZm9yIGZpbGUgcmVjZWl2ZXIuICovCi0JICAgIGlmICh3c2xvdHMgPiAxKSB7CQkv KiBJZiB3ZSdyZSBkb2luZyB3aW5kb3dzLCAqLwotCQl4ID0gcnNlcXRibFt3aW5sb107CS8qIHNl ZSBpZiBkZXNpcmVkIHBhY2tldCBhbHJlYWR5IGluLiAqLwotCQlkZWJ1ZyhGMTAxLCJpbnB1dCB3 aW5sbyIsIiIsd2lubG8pOwotCQlkZWJ1ZyhGMTAxLCJpbnB1dCByc2VxdGJsW3dpbmxvXSIsIiIs cnNlcXRibFt3aW5sb10pOwotCQlpZiAoeCA+IC0xKSB7CQkvKiBBbHJlYWR5IHRoZXJlPyAqLwot CQkgICAgaWYgKHJfcGt0W3hdLnBrX3NlcSA9PSB3aW5sbykgeyAvKiAoZG91YmxlIGNoZWNrKSAq LwotCQkJcnNuID0gd2lubG87CSAgICAgICAgICAgIC8qIFllcywgcmV0dXJuIGl0cyBpbmZvICov Ci0JCQlkZWJ1ZyhGMTAxLCJpbnB1dCByZXR1cm4gcHJlLXN0YXNoZWQgcGFja2V0IiwiIixyc24p OwotCQkJZHVtcHJidWYoKTsKLQkJCXJkYXRhcCA9IHJfcGt0W3hdLnBrX2FkcjsgICAvKiBsaWtl IHJwYWNrIHdvdWxkIGRvLiAqLwotCQkJcmxuID0gKGludClzdHJsZW4oKGNoYXIgKikgcmRhdGFw KTsKLQkJCXR5cGUgPSByX3BrdFt4XS5wa190eXA7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJfQot CSAgICB9Ci0JICAgIHR5cGUgPSBycGFjaygpOwkgICAgICAgIC8qIFRyeSB0byByZWFkIGEgcGFj a2V0LiAqLwotCSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBycGFjayIsIiIsdHlwZSk7Ci0KLQkgICAg d2hpbGUgKHR5cGUgPT0gJ2UnKSB7CS8qIEhhbmRsZSBlY2hvZXMgKi8KLQkJZGVidWcoRjEwMSwi aW5wdXQgZWNobyBkaXNjYXJkZWQiLCIiLHR5cGUpOwotCQl0eXBlID0gcnBhY2soKTsKLQkgICAg fQotI2lmZGVmIERFQlVHCi0JICAgIGlmIChkZWJsb2cpIHsKLQkJaWYgKHR5cGUgPT0gJ0QnKQot CQkgIGRlYnVnKEYwMTEsImlucHV0IHR5cGUgRD0iLChjaGFyICopcmRhdGFwLDM5KTsKLQkJZWxz ZQotCQkgIGRlYnVnKEYwMDAsImlucHV0IHR5cGUiLChjaGFyICopcmRhdGFwLHR5cGUpOwotCSAg ICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZm5kZWYgT0xEQ0hLSU5UCi0JICAgIGlmICh0eXBl ID09ICd6JykgewotCQllcGt0cmN2ZCA9IDE7Ci0JCWVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNl bGxlZC4iKTsKLQkJdHlwZSA9ICdFJzsKLQkJYnJlYWs7Ci0JICAgIH0KLSNlbmRpZiAvKiBPTERD SEtJTlQgKi8KLQkgICAgaWYgKHR5cGUgPCAtMSkgewotCQljaGFyICogczsKLQkJcyA9ICh0eXBl ID09IC0yKSA/Ci0JCSAgIkZBSUxFRCAtIEludGVycnVwdGVkIiA6Ci0JCSAgICAiRkFJTEVEIC0g Q29ubmVjdGlvbiBsb3N0IjsKLQotCQl4eHNjcmVlbihTQ1JfUFQsJ3EnLDBMLHMpOwotCQlkb2xv Z2VuZCgpOwotCQlyZXR1cm4oJ3EnKTsJCS8qIEN0cmwtQyBvciBjb25uZWN0aW9uIGxvc3QgKi8K LQkgICAgfQotCSAgICBpZiAodHlwZSA8IDApIHsJCS8qIFJlY2VpdmUgd2luZG93IGZ1bGwgKi8K LQkJLyogQW5vdGhlciB0aGluZyB0byBkbyBoZXJlIHdvdWxkIGJlIHRvIGRlbGV0ZSAqLwotCQkv KiB0aGUgaGlnaGVzdCBwYWNrZXQgYW5kIE5BSyB3aW5sby4gIEJ1dCB0aGF0ICovCi0JCS8qIHNo b3VsZG4ndCBiZSBuZWNlc3Nhcnkgc2luY2UgdGhlIG90aGVyIEtlcm1pdCAqLwotCQkvKiBzaG91 bGQgbm90IGhhdmUgc2VudCBhIHBhY2tldCBvdXRzaWRlIHRoZSB3aW5kb3cuICovCi0jaWZkZWYg Q09NTUVOVAotICAgICAgICAgICAgICAgIGNoYXIgZm9vWzI1Nl07Ci0gICAgICAgICAgICAgICAg Y2ttYWt4bXNnKGZvbywyNTYsIlJlY2VpdmUgd2luZG93IGZ1bGwgKHJwYWNrKTogd3Nsb3RzPSIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYSh3c2xvdHMpLCIgd2lubG89Iixja2l0 b2Eod2lubG8pLCIgcGt0bnVtPSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShw a3RudW0pLCBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0JCWVycnBrdCgoQ0hBUiAq KWZvbyk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCxmb28sIiIsMCk7Ci0jZWxzZQotCQll cnJwa3QoKENIQVIgKikiUmVjZWl2ZSB3aW5kb3cgZnVsbCIpOwotCQlkZWJ1ZyhGMTAxLCJycGFj ayByZWNlaXZlIHdpbmRvdyBmdWxsIiwiIiwwKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCIgd3Nsb3RzIiwiIix3c2xvdHMpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIiB3aW5s byIsIiIsd2lubG8pOwotCQlkZWJ1ZyhGMTAxLCIgcGt0bnVtIiwiIixwa3RudW0pOwotI2VuZGlm Ci0JCWR1bXByYnVmKCk7Ci0JCXR5cGUgPSAnRSc7Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIGR1 bXByYnVmKCk7Ci0KLSNpZmRlZiBPTERDSEtJTlQKLQkgICAgaWYgKGNoa2ludCgpIDwgMCkgewkJ LyogQ2hlY2sgZm9yIGNvbnNvbGUgaW50ZXJydXB0cy4gKi8KLQkJZXJycGt0KChDSEFSICopIlVz ZXIgY2FuY2VsbGVkLiIpOyAvKiAob2xkIHdheSkgKi8KLQkJdHlwZSA9ICdFJzsKLQkJYnJlYWs7 Ci0JICAgIH0KLSNlbmRpZiAvKiBPTERDSEtJTlQgKi8KLQotI2lmZGVmIFNUUkVBTUlORwotCSAg ICBpZiAoc3RyZWFtaW5nKSB7CQkvKiBTdHJlYW1pbmcgKi8KLQkJaWYgKHR5cGUgPT0gJ1EnIHx8 IHR5cGUgPT0gJ1QnKSB7IC8qIEVycm9ycyBhcmUgZmF0YWwuICovCi0JCSAgICBjcnVuY2hlZCsr OwkJLyogRm9yIHN0YXRpc3RpY3MgKi8KLQkJICAgIGVycnBrdCgoQ0hBUiAqKSJUcmFuc21pc3Np b24gZXJyb3Igb24gcmVsaWFibGUgbGluay4iKTsKLQkJICAgIHR5cGUgPSAnRSc7Ci0JCX0KLQkg ICAgfQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCSAgICBpZiAodHlwZSA9PSAnRScpIHsKLQkJ ZGVidWcoRjEwMSwiaW5wdXQgZ290IEUsIG5ha3N0YXRlIiwiIixuYWtzdGF0ZSk7Ci0JCWJyZWFr OwkJCS8qIEVycm9yIHBhY2tldCAqLwotCSAgICB9Ci0JICAgIGlmICh0eXBlID09ICdRJykgewkJ LyogQ3J1bmNoZWQgcGFja2V0LiAqLwotCQljcnVuY2hlZCsrOwotCQludW1lcnJzKys7Ci0vKgot ICBQYWNrZXQgYXJyaXZlZCBkYW1hZ2VkLiAgSXQgd2FzIG1vc3QgbGlrZWx5IHRoZSBwYWNrZXQg d2Ugd2VyZSBleHBlY3RpbmcKLSAgbmV4dCwgc28gd2Ugc2VuZCBhIE5BSyBmb3IgdGhhdCBwYWNr ZXQuICBQcmlvciB0byA1QSgxODkpLCB3ZSBhbHdheXMKLSAgTkFLJ2Qgd2lubG8gaGVyZSwgYnV0 IHRoYXQgd2FzIGJhZCBiZWNhdXNlIGlmIHR3byAob3IgbW9yZSkgZGlmZmVyZW50Ci0gIHBhY2tl dHMgd2VyZSBkYW1hZ2VkLCB3ZSB3b3VsZCBrZWVwIE5BS2luZyB0aGUgZmlyc3Qgb25lIGFuZCBu ZXZlciBOQUsgdGhlCi0gIG90aGVyIG9uZXMsIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBhIGxlbmd0 aHkgc2VyaWVzIG9mIHRpbWVvdXRzLiAgTm93IHdlCi0gIE5BSyB0aGUgb2xkZXN0IGFzLXlldC11 bk5BSydkIG1pc3NpbmcgcGFja2V0LgotKi8KLSNpZmRlZiBDS19USU1FUlMKLQkJcmN2dGltbysr OwkJLyogU3RyZXRjaCB0aGUgdGltZW91dCBhIGxpdHRsZSAqLwotI2VuZGlmIC8qIENLX1RJTUVS UyAqLwotCQl6ID0gKHdpbmxvICsgd3Nsb3RzKSAlIDY0OyAgLyogU2VhcmNoIGZyb20gd2lubG8g dG8geiAqLwotCQlkZWJ1ZyhGMTAxLCJaWlogY3J1bmNoZWQgeiIsIiIseik7Ci0JCW5mID0gMDsJ CQkgICAgLyogTkFLIGZsYWcgbm90IHNldCB5ZXQgKi8KLQkJZm9yICh4ID0gd2lubG87IHggIT0g ejsgeCA9ICh4ICsgMSkgJSA2NCkgewotCQkgICAgZGVidWcoRjEwMSwiWlpaIHgiLCIiLHgpOwot CQkgICAgaWYgKHJzZXF0YmxbeF0gPiAtMSkgLyogSGF2ZSBJIHJlY2VpdmVkIHBhY2tldCB4PyAq LwotCQkgICAgICBjb250aW51ZTsJCSAvKiBZZXMsIGdvIG9uLiAqLwotCQkgICAgZGVidWcoRjEw MSwiWlpaIHggbm90IHJlY2QgeWV0IiwiIix4KTsKLQkJICAgIHBpID0gc3NlcXRibFt4XTsJIC8q IE5vLCBoYXZlIEkgTkFLJ2QgaXQgeWV0PyAqLwotCQkgICAgaWYgKHBpIDwgMCB8fCBzX3BrdFtw aV0ucGtfcnRyID09IDApIHsKLQkJCWRlYnVnKEYxMDEsIlpaWiB4IG5vdCBOQUsnZCB5ZXQiLCIi LHgpOwotCQkJbmFjayh4KTsJIC8qIE5vLCBOQUsgaXQgbm93LiAqLwotCQkJbmYgPSAxOwkJIC8q IEZsYWcgdGhhdCBJIGRpZC4gKi8KLQkJCWJyZWFrOwotCQkgICAgfQotCQl9Ci0JCWlmICghbmYp IHsJCS8qIElmIHdlIGRpZG4ndCBOQUsgYW55dGhpbmcgYWJvdmUsICovCi0JCSAgICBkZWJ1ZyhG MTAxLCJaWlogTkFLaW5nIHdpbmxvIiwiIix3aW5sbyk7Ci0JCSAgICBpZiAobmFjayh3aW5sbykg PCAwKSB7IC8qIHdlIGhhdmUgdG8gTkFLIHdpbmxvIChhZ2FpbikgKi8KLQkJCWVycnBrdCgoQ0hB UiAqKSJUb28gbWFueSByZXRyaWVzLiIpOyAvKiBUb28gbWFueSAqLwotCQkJdHlwZSA9ICdFJzsK LQkJCWJyZWFrOwotCQkgICAgfQotCQl9Ci0JCWNvbnRpbnVlOwotCSAgICB9Ci0KLQkgICAgaWYg KHR5cGUgPT0gJ1QnKSB7CQkvKiBUaW1lb3V0ICovCi0jaWZuZGVmIE9TMgotCQkvKiBLOTUgZG9l cyB0aGlzIGl0cyBvd24gd2F5ICovCi0JCWlmIChzZXJ2ZXIgJiYgc3J2aWRsKSB7Ci0JCSAgICBp ZGxldG1vID0gMTsKLQkJICAgIGRlYnVnKEYxMDEsIlNFUlZFUiBJRExFIFRJTUVPVVQiLCIiLHNy dmlkbCk7Ci0JCSAgICByZXR1cm4oJ3EnKTsKLQkJfQotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVm IENLX1RJTUVSUwotCQlyY3Z0aW1vKys7CQkvKiBTdHJldGNoIHRoZSB0aW1lb3V0IGEgbGl0dGxl ICovCi0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0JCXRpbWVvdXRzKys7Ci0JCWRlYnVnKEYxMDEs ImlucHV0IHJlY2VpdmUtc3RhdGUgdGltZW91dCwgd2lubG8iLCIiLHdpbmxvKTsKLQkJLyogTkFL IG9ubHkgdGhlIHBhY2tldCBhdCB3aW5kb3ctbG93ICovCi0JCWRlYnVnKEYxMDEsImlucHV0IHNl bmRpbmcgTkFLIGZvciB3aW5sbyIsIiIsd2lubG8pOwotCQl4ID0gdHRjaGsoKTsKLQkJaWYgKHgg PiAwKQkJLyogRG9uJ3QgZ2l2ZSB1cCBpZiB0aGVyZSBpcyBzdGlsbCAqLwotCQkgIGNvbnRpbnVl OwkJLyogc29tZXRoaW5nIHRvIHJlYWQuICovCi0JCWVsc2UgaWYgKHggPCAwKSB7Ci0JCSAgICBk b2xvZ2VuZCgpOwotCQkgICAgZmF0YWxpbyA9IDE7Ci0JCSAgICByZXR1cm4oJ3EnKTsJLyogQ29u bmVjdGlvbiBMb3N0ICovCi0JCX0KLQkJaWYgKG5hY2sod2lubG8pIDwgMCkgewotCQkgICAgZGVi dWcoRjEwMSwiaW5wdXQgc2VudCB0b28gbWFueSBuYWtzIiwiIix3aW5sbyk7Ci0JCSAgICBlcnJw a3QoKENIQVIgKikiVG9vIG1hbnkgcmV0cmllcy4iKTsKLQkJICAgIHR5cGUgPSAnRSc7Ci0JCSAg ICBicmVhazsKLQkJfSBlbHNlIGNvbnRpbnVlOwotCSAgICB9Ci0JICAgIGlmIChyc24gPT0gd2lu bG8pIHsJCS8qIEdvdCB0aGUgcGFja2V0IHdlIHdhbnQsIGRvbmUuICovCi0jaWZkZWYgQ0tfVElN RVJTCi0JCWlmIChydHRmbGcgJiYgdGltaW50KQkvKiBEeW5hbWljIHJvdW5kIHRyaXAgdGltZXJz PyAqLwotCQkgIGdldHJ0dChuYWtzdGF0ZSwgcnNuKTsgLyogeWVzLCBkbyBpdC4gKi8KLSAgICAg ICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgLyogSkhEIDIwMTAwMjA4ICovCi0g ICAgICAgICAgICAgICAgICByY3Z0aW1vID0gdGltaW50OyAgICAgIC8qIEpIRCAyMDEwMDIwOCAq LwotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotCQlkZWJ1ZyhGMTAxLCJpbnB1dCByc249d2lubG8i LCIiLHJzbik7Ci0JCWJyZWFrOwotCSAgICB9Ci0KLQkgICAgLyogR290IGEgcGFja2V0IG91dCBv ZiBvcmRlci4gKi8KLQotCSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBvdXQgb2Ygc2VxdWVuY2UsIHJz biIsIiIscnNuKTsKLQkgICAgayA9IHJzZXF0YmxbcnNuXTsJCS8qIEdldCB3aW5kb3cgc2xvdCBv ZiB0aGlzIHBhY2tldC4gKi8KLQkgICAgZGVidWcoRjEwMSwiaW5wdXQgcnNlcXRibFtyc25dIiwi IixrKTsKLQkgICAgaWYgKGsgPCAwKSB7Ci0JCWRlYnVnKEYxMDEsImlucHV0IHJlY3YgY2FuJ3Qg ZmluZCBpbmRleCBmb3IgcmN2ZCBwa3QiLCIiLHJzbik7Ci0JCS8qIFdhcyAiSW50ZXJuYWwgZXJy b3IgMjEiICovCi0JCS8qIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gICovCi0JCWVycnBrdCgoQ0hB UiAqKSJTbGlkaW5nIHdpbmRvd3MgcHJvdG9jb2wgZXJyb3IuIik7Ci0JCXR5cGUgPSAnRSc7Ci0J CWJyZWFrOwotCSAgICB9Ci0JICAgIHkgPSBjaGt3aW4ocnNuLHdpbmxvLHdzbG90cyk7IC8qIFNl ZSB3aGF0IHdpbmRvdyBpdCdzIGluLiAqLwotCSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCByZWN2IGNo a3dpbiIsIiIseSk7Ci0JICAgIGlmICh5ID09IDEpIHsJCS8qIEZyb20gcHJldmlvdXMgd2luZG93 LiAqLwotI2lmZGVmIFNUUkVBTUlORwotCQlpZiAoIXN0cmVhbWluZykJCS8qIE5PIFJFU0VORCBJ RiBTVFJFQU1JTkchICovCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0JCSAgcmVzZW5kKHJzbik7 CQkvKiBSZXNlbmQgdGhlIEFDSyAobWlnaHQgaGF2ZSBkYXRhKSAqLwotCQlmcmVlcnBrdChyc24p OwkJLyogR2V0IHJpZCBvZiByZWNlaXZlZCBwYWNrZXQgKi8KLQkJY29udGludWU7CQkvKiBCYWNr IHRvIHdhaXQgZm9yIGFub3RoZXIgcGFja2V0ICovCi0JICAgIH0gZWxzZSB7CQkJLyogSW4gdGhp cyB3aW5kb3cgb3Igb3V0IG9mIHJhbmdlICovCi0JCWlmICh5IDwgMCkJCS8qIElmIG91dCBvZiBy YW5nZSBlbnRpcmVseSwgKi8KLQkJICBmcmVlcnBrdChyc24pOwkvKiByZWxlYXNlIGl0cyBidWZm ZXIgKi8KLQotI2lmZGVmIFNUUkVBTUlORwotCQlpZiAoc3RyZWFtaW5nKSB7CS8qIFN0cmVhbWlu ZyAodGhpcyBzaG91bGRuJ3QgaGFwcGVuKSAqLwotCQkgICAgZXJycGt0KChDSEFSICopIlNlcXVl bmNlIGVycm9yIG9uIHJlbGlhYmxlIGxpbmsuIik7Ci0JCSAgICB0eXBlID0gJ0UnOwotCQkgICAg YnJlYWs7Ci0JCX0KLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQotLyogSWYgb3VyIHJlY2VpdmUg d2luZG93IGlzIGZ1bGwsIE5BSyB3aW5kb3ctbG93ICovCi0KLQkJaWYgKHJidWZudW0gPCAxKSB7 CS8qIFJlY2VpdmUgd2luZG93IGZ1bGw/ICovCi0JCSAgICBpZiAobmFjayh3aW5sbykgPCAwKSB7 ICAgIC8qIE5vIGNob2ljZSwgbXVzdCBOQUsgd2lubG8uICovCi0JCQllcnJwa3QoKENIQVIgKiki VG9vIG1hbnkgcmV0cmllcy4iKTsgLyogVG9vIG1hbnkgKi8KLQkJCXR5cGUgPSAnRSc7Ci0JCQli cmVhazsKLQkJICAgIH0gZWxzZSBjb250aW51ZTsKLQkJfQotLyoKLSAgUmVjZWl2ZSB3aW5kb3cg bm90IGZ1bGwuICBUaGlzIGlzIGEgcGFja2V0IGluIHRoZSBjdXJyZW50IHdpbmRvdyBidXQgaXQg aXMKLSAgbm90IHRoZSBkZXNpcmVkIHBhY2tldCBhdCB3aW5sby4gIFNvIHRoZXJlZm9yZSB0aGVy ZSBhcmUgZ2FwcyBiZWZvcmUgdGhpcwotICBwYWNrZXQuICBTbyB3ZSBmaW5kIHRoZSAibG93ZXN0 IiB1bk5BSydkIG1pc3NpbmcgcGFja2V0LCBpZiBhbnksIGJldHdlZW4KLSAgd2lubG8gYW5kIHRo aXMgb25lLCBhbmQgTkFLIGl0LiAgSWYgdGhlcmUgYXJlIG5vIGFzLXlldC11bk5BSydkIG1pc3Np bmcKLSAgcGFja2V0cyBpbiB0aGUgd2luZG93LCB0aGVuIHdlIHNlbmQgbm90aGluZyBhbmQgZ28g d2FpdCBmb3IgYW5vdGhlciBwYWNrZXQuCi0gIEluIHRoZW9yeSwgdGhpcyBjb3VsZCByZXN1bHQg aW4gYSB0aW1lb3V0LCBidXQgaW4gcHJhY3RpY2UgaXQgaXMgbGlrZWx5IHRoYXQKLSAgdGhlIGFs cmVhZHktTkFLJ2QgbWlzc2luZyBwYWNrZXRzIGFyZSBhbHJlYWR5IG9uIHRoZWlyIHdheS4gIE5v dGUsIHdlIGRvIG5vdAotICBOQUsgYWhlYWQgb2Ygb3Vyc2VsdmVzLCBhcyB0aGF0IG9ubHkgY3Jl YXRlcyB1bm5lY2Vzc2FyeSByZXRyYW5zbWlzc2lvbnMuCi0qLwotCQlmb3IgKHggPSB3aW5sbzsg eCAhPSByc247IHggPSAoeCArIDEpICUgNjQpIHsKLQkJICAgIGlmIChyc2VxdGJsW3hdID4gLTEp IC8qIEhhdmUgSSByZWNlaXZlZCBwYWNrZXQgeD8gKi8KLQkJICAgICAgY29udGludWU7CQkgLyog WWVzLCBjaGVjayBuZXh0IHNlcXVlbmNlIG51bWJlci4gKi8KLQkJICAgIHBpID0gc3NlcXRibFt4 XTsJIC8qIE5vLCBoYXZlIEkgTkFLJ2QgaXQgeWV0PyAqLwotCQkgICAgaWYgKHBpIDwgMCB8fCBz X3BrdFtwaV0ucGtfcnRyID09IDApIHsKLQkJCW5hY2soeCk7CSAvKiBObywgTkFLIGl0IG5vdy4g Ki8KLQkJCWJyZWFrOwotCQkgICAgfQotCQl9Ci0JICAgIH0KLS8qISEhKi8KLQl9IGVsc2UgewkJ CS8qIE90aGVyd2lzZSBmaWxlIHNlbmRlci4uLiAqLwotCi0jaWZkZWYgU1RSRUFNSU5HCi0JICAg IGlmIChzdHJlYW1pbmcgJiYgc25kdHlwID09ICdEJykgewotCQlkZWJ1ZyhGMTAxLCJTVFJFQU1J TkcgaW5wdXQgc3RyZWFtaW5nIiwiIixzdHJlYW1pbmcpOwotCQlkZWJ1ZyhGMDAwLCJTVFJFQU1J TkcgaW5wdXQgc25kdHlwIiwiIixzbmR0eXApOwotCQlyc24gPSB3aW5sbzsKLQkJdHlwZSA9ICdZ JzsJCS8qIFByZXRlbmQgd2UgZ290IGFuIEFDSyAqLwotCSAgICB9Ci0jZW5kaWYgLyogU1RSRUFN SU5HICovCi0JICAgIGlmICghbmFrMmFjaykgewkJLyogTkFLKG4rMSkgPSBBQ0sobikgKi8KLQkJ aWYgKHdzbG90cyA+IDEpIHsJLyogUGFja2V0IGF0IHdpbmxvIGFscmVhZHkgQUNLJ2Q/ICovCi0J CSAgICBpZiAoc2Fja3RibFt3aW5sb10pIHsgLyogSWYgc28sICAqLwotCQkJc2Fja3RibFt3aW5s b10gPSAwOyAvKiBUdXJuIG9mZiB0aGUgQUNLJ2QgZmxhZyAqLwotCQkJd2lubG8gPSAod2lubG8g KyAxKSAlIDY0OyAvKiBSb3RhdGUgdGhlIHdpbmRvdyAqLwotCQkJdHlwZSA9ICdZJzsJLyogQW5k IHJldHVybiBBQ0sgKi8KLQkJCWRlYnVnKEYxMDEsCi0JCQkgICAgICAiaW5wdXQgc2VuZCByZXR1 cm5pbmcgcHJlLXN0YXNoZWQgQUNLIiwiIiwKLQkJCSAgICAgIHdpbmxvLTEpOwotCQkJYnJlYWs7 Ci0JCSAgICB9Ci0JCX0KLSNpZmRlZiBTVFJFQU1JTkcKLQkJaWYgKCEoc3RyZWFtaW5nICYmIHNu ZHR5cCA9PSAnRCcpKSB7IC8qIE5vdCBzdHJlYW1pbmcgfCBkYXRhICovCi0JCSAgICB0eXBlID0g cnBhY2soKTsJLyogVHJ5IHRvIHJlYWQgYW4gYWNrbm93bGVkZ2VtZW50ICovCi0JCX0gZWxzZSB7 CQkvKiBTdHJlYW1pbmcgYW5kIGluIERhdGEgcGhhc2UgKi8KLQkJICAgIHR5cGUgPSAnWSc7CQkv KiBBc3N1bWUgYWxsIGlzIG5vcm1hbCAqLwotCQkgICAgaWYgKGNoa2ludCgpIDwgMCkJLyogQ2hl Y2sgZm9yIGNvbnNvbGUgaW50ZXJydXB0cy4gKi8KLQkJICAgICAgdHlwZSA9ICd6JzsKLQkJICAg IGVsc2UgaWYgKHR0Y2hrKCkgPiA0ICsgYmN0dSkgLyogQ2hlY2sgZm9yIHJldHVybiB0cmFmZmlj ICovCi0JCSAgICAgIHR5cGUgPSBycGFjaygpOwotCQkgICAgZGVidWcoRjAwMCwiaW5wdXQgc3Ry ZWFtaW5nIHR5cGUiLCIiLHR5cGUpOwotCQl9Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0JCWRl YnVnKEYxMTEsImlucHV0IHNlbmQiLChjaGFyICopIHJkYXRhcCwoaW50KSB0eXBlKTsKLQkJd2hp bGUgKHR5cGUgPT0gJ2UnKSB7CS8qIEhhbmRsZSBlY2hvZXMgKi8KLQkJICAgIGRlYnVnKEYwMDAs ImVjaG8gZGlzY2FyZGVkIiwiIix0eXBlKTsKLQkJICAgIHR5cGUgPSBycGFjaygpOwotCQl9Ci0j aWZuZGVmIE9MRENIS0lOVAotCQlpZiAodHlwZSA9PSAneicpIHsKLQkJICAgIGVwa3RyY3ZkID0g MTsKLQkJICAgIGVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNlbGxlZC4iKTsKLQkJICAgIHR5cGUg PSAnRSc7Ci0JCSAgICBicmVhazsKLQkJfQotI2VuZGlmIC8qIE9MRENIS0lOVCAqLwotCQlpZiAo dHlwZSA8IC0xKSB7Ci0JCSAgICB4eHNjcmVlbihTQ1JfUFQsJ3EnLDBMLAotCQkJICAgKChjaGFy ICopKCh0eXBlID09IC0yKSA/Ci0JCQkgICAiSW50ZXJydXB0ZWQiIDoKLQkJCSAgICJDb25uZWN0 aW9uIGxvc3QiKSkKLQkJCSAgICk7Ci0JCSAgICBpZiAodHlwZSAhPSAtMikKLQkJICAgICAgZG9s b2dlbmQoKTsKLQkJICAgIHJldHVybigncScpOwkvKiBDdHJsLUMgb3IgY29ubmVjdGlvbiBsb3N0 ICovCi0JCX0KLQkJaWYgKHR5cGUgPT0gLTEpIHsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAg ICAgICAgICAgIGNoYXIgZm9vWzI1Nl07Ci0gICAgICAgICAgICAgICAgICAgIGNrbWFreG1zZyhm b28sMjU2LAotCQkJICAgICAgIlJlY2VpdmUgd2luZG93IGZ1bGwgKGVycm9yIDE4KTogd3Nsb3Rz PSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2l0b2Eod3Nsb3RzKSwKLQkJCSAg ICAgICIgd2lubG89Iixja2l0b2Eod2lubG8pLCIgcGt0bnVtPSIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBja2l0b2EocGt0bnVtKSwgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwpOwotCQkgICAgZXJycGt0KChDSEFSICopZm9vKTsKLSAgICAgICAgICAgICAgICAgICAgZGVi dWcoRjEwMCxmb28sIiIsMCk7Ci0jZWxzZQotCQkgICAgZXJycGt0KChDSEFSICopIlJlY2VpdmUg d2luZG93IGZ1bGwiKTsgLyogd2FzICJpbnRlcm5hbCAqLwotICAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCIgd3Nsb3RzIiwiIix3c2xvdHMpOyAvKiBlcnJvciAxOCIgKi8KLSAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiIHdpbmxvIiwiIix3aW5sbyk7Ci0JCSAgICBkZWJ1ZyhG MTAxLCIgcGt0bnVtIiwiIixwa3RudW0pOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJICAgIGR1 bXByYnVmKCk7Ci0JCSAgICB0eXBlID0gJ0UnOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkJZHVtcHJi dWYoKTsJCS8qIERlYnVnZ2luZyAqLwotCi0jaWZkZWYgT0xEQ0hLSU5UCi0JCWlmIChjaGtpbnQo KSA8IDApIHsJLyogQ2hlY2sgZm9yIGNvbnNvbGUgaW50ZXJydXB0cy4gKi8KLQkJICAgIGVycnBr dCgoQ0hBUiAqKSJVc2VyIGNhbmNlbGxlZC4iKTsKLQkJICAgIHJldHVybih0eXBlID0gJ0UnKTsK LQkJfQotI2VuZGlmIC8qIE9MRENIS0lOVCAqLwotCi0JCS8qIEdvdCBhIHBhY2tldCAqLwotCi0j aWZkZWYgU1RSRUFNSU5HCi0JCWlmIChzdHJlYW1pbmcpIHsJCS8qIFN0cmVhbWluZyAqLwotCQkg ICAgaWYgKHR5cGUgPT0gJ1EnIHx8IHR5cGUgPT0gJ1QnKSB7IC8qIEVycm9ycyBhcmUgZmF0YWwu ICovCi0JCQljcnVuY2hlZCsrOwkvKiBGb3Igc3RhdGlzdGljcyAqLwotCQkJZXJycGt0KChDSEFS ICopIlRyYW5zbWlzc2lvbiBlcnJvciBvbiByZWxpYWJsZSBsaW5rLiIpOwotCQkJdHlwZSA9ICdF JzsKLQkJICAgIH0KLQkJfQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCQlpZiAodHlwZSA9PSAn RScpIHsKLQkJICAgIGRlYnVnKEYxMDEsImlucHV0IHNlbmQgZ290IEUsIG5ha3N0YXRlIiwiIixu YWtzdGF0ZSk7Ci0JCSAgICBicmVhazsJCS8qIEVycm9yIHBhY2tldCAqLwotCQl9Ci0JCWlmICh0 eXBlID09ICdRJykgewkvKiBDcnVuY2hlZCBwYWNrZXQgKi8KLQkJICAgIGNydW5jaGVkKys7CQkv KiBGb3Igc3RhdGlzdGljcyAqLwotCQkgICAgbnVtZXJycysrOwkJLyogRm9yIHBhY2tldCByZXNp emluZyAqLwotCQkgICAgeCA9IHJlc2VuZCh3aW5sbyk7CS8qIFJlc2VuZCB3aW5kb3ctbG93ICov Ci0JCSAgICBpZiAoeCA8IDApIHsKLQkJCXR5cGUgPSAnRSc7Ci0JCQllcnJwa3QoKENIQVIgKiki VG9vIG1hbnkgcmV0cmllcyIpOwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCSAgICBjb250aW51ZTsK LQkJfQotCQlpZiAodHlwZSA9PSAnVCcpIHsJLyogVGltZW91dCB3YWl0aW5nIGZvciBBQ0tzLiAq LwotCQkgICAgdGltZW91dHMrKzsJCS8qIENvdW50IGl0ICovCi0JCSAgICBudW1lcnJzKys7CQkv KiBDb3VudCBhbiBlcnJvciB0b28gKi8KLQkJICAgIGRlYnVnKEYxMDEsImlucHV0IHNlbmQgc3Rh dGUgdGltZW91dCwgd2lubG8iLCIiLHdpbmxvKTsKLQotCQkgICAgLyogUmV0cmFuc21pdCB0aGUg b2xkZXN0IHVuLUFDSydkIHBhY2tldC4gKi8KLQotCQkgICAgZGVidWcoRjEwMSwiaW5wdXQgc2Vu ZCByZXNlbmRpbmcgd2lubG8iLCIiLHdpbmxvKTsKLQkJICAgIGlmIChyZXNlbmQod2lubG8pIDwg MCkgeyAvKiBDaGVjayByZXRyaWVzICovCi0JCQlkZWJ1ZyhGMTAxLCJpbnB1dCBzZW5kIHRvbyBt YW55IHJlc2VuZHMiLCIiLG1heHRyeSk7Ci0JCQllcnJwa3QoKENIQVIgKikiVG9vIG1hbnkgcmV0 cmllcyIpOwotCQkJcmV0dXJuKHR5cGUgPSAnRScpOwotCQkgICAgfQotI2lmZGVmIE5FV0RQTAot CQkgICAgLyogUmVkdWNlIHByZXZhaWxpbmcgcGFja2V0IGxlbmd0aCAqLwotCQkgICAgeCA9IHNz ZXF0Ymxbd2lubG9dOwkvKiBHZXQgbGVuZ3RoIG9mIHBhY2tldCB3ZSB3YW50IEFDS2QgKi8KLQkJ ICAgIGlmICh4ID4gLTEpIHsJLyogT25seSBpZiB3ZSBoYXZlIGEgdmFsaWQgaW5kZXggKi8KLQkJ CWlmIChzX3BrdFt4XS5wa190eXAgPT0gJ0QnKSB7IC8qIG9ubHkgZm9yIEQgcGFja2V0cyAqLwot CQkJICAgIHNwc2l6ID0gKHNfcGt0W3hdLnBrX2xlbiArIDgpID4+IDE7IC8qIGhhbHZlIGl0ICov Ci0JCQkgICAgaWYgKHNwc2l6IDwgMjApIHNwc2l6ID0gMjA7IC8qIHdpdGhpbiByZWFzb24gKi8K LQkJCSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBUIGN1dCBwYWNrZXQgbGVuZ3RoIiwiIixzcHNpeik7 Ci0JCQl9Ci0JCSAgICB9Ci0jZW5kaWYgLyogTkVXRFBMICovCi0JCSAgICBjb250aW51ZTsKLQkJ fQotCSAgICB9Ci0JICAgIC8qIEdvdCBhbiBhY3R1YWwgbm9ybWFsIHBhY2tldCAqLwotCi0JICAg IG5hazJhY2sgPSAwOwkJLyogVW5zZXQgdGhpcyBmbGFnLiAqLwotCSAgICB5ID0gY2hrd2luKHJz bix3aW5sbyx3c2xvdHMpOyAvKiBJcyBpdCBpbiB0aGUgd2luZG93PyAqLwotCSAgICBkZWJ1ZyhG MTAxLCJpbnB1dCBzZW5kIHJzbiIsIiIscnNuKTsKLQkgICAgZGVidWcoRjEwMSwiaW5wdXQgc2Vu ZCB3aW5sbyIsIiIsd2lubG8pOwotCSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBzZW5kIGNoa3dpbiIs IiIseSk7Ci0KLQkgICAgaWYgKHR5cGUgPT0gJ1knKSB7CQkvKiBHb3QgYW4gQUNLICovCi0JCWlm ICh5ID09IDApIHsJCS8qIEluIGN1cnJlbnQgd2luZG93ICovCi0JCSAgICBpZiAoc3BhY2tldHMg PCA0KQkvKiBFcnJvciBjb3VudGVyIGRvZXNuJ3QgY291bnQgKi8KLQkJICAgICAgbnVtZXJycyA9 IDA7CS8qIHVudGlsIGRhdGEgcGhhc2UuICovCi0JCSAgICBzYWNrdGJsW3Jzbl0rKzsJLyogTWFy ayB0aGUgcGFja2V0IGFzIEFDSydkICovCi0JCSAgICB4ID0gc3NlcXRibFtyc25dOwkvKiBHZXQg QUNLJ2QgcGFja2V0J3MgYnVmZmVyIGluZGV4ICovCi0JCSAgICBkZWJ1ZyhGMTAxLCJiZXN0bGVu IGFjayB4IiwiIix4KTsKLSNpZmRlZiBORVdEUEwKLQkJICAgIGlmICh4ID4gLTEpIHsKLQkJCWFj a3R5cGUgPSBzX3BrdFt4XS5wa190eXA7IC8qIEdldCB0eXBlICovCi0JCQlkZWJ1ZyhGMDAwLCJi ZXN0bGVuIGFjayB0eXBlIiwiIixhY2t0eXBlKTsKLQotCQkJaWYgKGFja3R5cGUgPT0gJ0QnKSB7 IC8qIEFkanVzdCBkYXRhIHBhY2tldCBsZW5ndGggKi8KLQkJCSAgICBpZiAoc3BzaXogPiBiZXN0 bGVuKSB7Ci0JCQkJYmVzdGxlbiA9IHNwc2l6OwotCQkJCWRlYnVnKEYxMDEsImJlc3RsZW4gQiIs IiIsYmVzdGxlbik7Ci0JCQkgICAgfQotI2lmZGVmIERFQlVHCi0JCQkgICAgaWYgKGRlYmxvZykg ewotCQkJCWRlYnVnKEYxMDEsImJlc3RsZW4gcmV0cnkiLCIiLHNfcGt0W3hdLnBrX3J0cik7Ci0J CQkJZGVidWcoRjEwMSwiYmVzdGxlbiBsZW4iLCIiLHNfcGt0W3hdLnBrX2xlbik7Ci0JCQkJZGVi dWcoRjEwMSwiYmVzdGxlbiBzcGFja2V0cyIsIiIsc3BhY2tldHMpOwotCQkJICAgIH0KLSNlbmRp ZiAvKiBERUJVRyAqLwotCQkJICAgIC8qIFNldCBuZXcgYmVzdCBsZW5ndGggKi8KLQkJCSAgICBp ZiAoc19wa3RbeF0ucGtfcnRyID09IDAgJiYKLQkJCQlzX3BrdFt4XS5wa19sZW4gKyA4ID4gYmVz dGxlbikgewotCQkJCWJlc3RsZW4gPSBzX3BrdFt4XS5wa19sZW4gKyA4OwotCQkJCWlmIChiZXN0 bGVuID4gc3BtYXgpCi0JCQkJICBiZXN0bGVuID0gc3BtYXg7Ci0JCQkJZGVidWcoRjEwMSwiYmVz dGxlbiBBIiwiIixiZXN0bGVuKTsKLQkJCSAgICB9Ci0jaWZkZWYgREVCVUcKLQkJCSAgICBpZiAo ZGVibG9nKSB7Ci0JCQkJZGVidWcoRjEwMSwiYmVzdGxlbiB3c2xvdHMiLCIiLHdzbG90cyk7Ci0J CQkJZGVidWcoRjEwMSwiYmVzdGxlbiBtYXhzZW5kIiwiIixtYXhzZW5kKTsKLQkJCSAgICB9Ci0j ZW5kaWYgLyogREVCVUcgKi8KLQkJCSAgICAvKiBTbG93IHN0YXJ0ICovCi0JCQkgICAgaWYgKHNs b3N0YXJ0ICYmCi0JCQkJKG1heHNlbmQgPD0gc3BtYXgpICYmCi0JCQkJKHJwYWNrZXRzIDwgMTEp ICYmCi0JCQkJKG51bWVycnMgPT0gMCkpIHsKLQkJCQlzcHNpeiA9IHNwc2l6IDw8IDE7Ci0JCQkJ ZGVidWcoRjEwMSwiYmVzdGxlbiBzcHNpeiBBIiwiIixzcHNpeik7Ci0KLQkJCSAgICAvKiBDcmVl cCB1cCB0byBiZXN0IGxlbmd0aCAqLwotCQkJICAgIH0gZWxzZSBpZiAoKHNwYWNrZXRzID4gNSkg JiYKLQkJCQkgICAgICAgKHNwc2l6IDwgYmVzdGxlbiAtIDgpKSB7Ci0JCQkJc3BzaXogKz0gKGJl c3RsZW4gLSBzcHNpeikgLyAzOwotCQkJCWRlYnVnKEYxMDEsImJlc3RsZW4gc3BzaXogQiIsIiIs c3BzaXopOwotCi0JCQkgICAgLyogUHVzaCB0aGUgZW52ZWxvcGUgKi8KLQkJCSAgICB9IGVsc2Ug aWYgKChzcGFja2V0cyAlICh3c2xvdHMgKyAxKSA9PSAwKSAmJgotCQkJCSAgICAgICAoc3BhY2tl dHMgPiA2KSAmJgotCQkJCSAgICAgICAoYmVzdGxlbiA8IHNwbWF4IC0gOCkgJiYKLQkJCQkgICAg ICAgKHNwc2l6IDwgc3BtYXgpKSB7Ci0JCQkJc3BzaXogKz0gKHNwbWF4IC0gYmVzdGxlbikgLyAz OwotCQkJCWRlYnVnKEYxMDEsImJlc3RsZW4gc3BzaXogQyIsIiIsc3BzaXopOwotCQkJICAgIH0K LQkJCSAgICAvKiBCdXQgbm90IHRvbyBmYXIgKi8KLQkJCSAgICBpZiAoc3BzaXogPiBzcG1heCkg ewotCQkJCXNwc2l6ID0gc3BtYXg7Ci0JCQkJZGVidWcoRjEwMSwiYmVzdGxlbiBzcHNpeiBEIiwi IixzcHNpeik7Ci0JCQkgICAgfQotCQkJfQotCQkgICAgfQotI2VuZGlmIC8qIE5FV0RQTCAqLwot Ci0jaWZkZWYgQ0tfVElNRVJTCi0JCSAgICBpZiAocnR0ZmxnICYmIHRpbWludCkgLyogSWYgZG9p bmcgZHluYW1pYyB0aW1lcnMgKi8KLQkJICAgICAgZ2V0cnR0KG5ha3N0YXRlLCByc24pOyAvKiBj YWxsIHJvdXRpbmUgdG8gc2V0IGl0LiAqLwotCQkgICAgZWxzZSAgICAgICAgICAgICAgICAgICAg IC8qIEpIRCAyMDEwMDIwOCAqLwotCQkgICAgICByY3Z0aW1vID0gdGltaW50OwkgICAgIC8qIEpI RCAyMDEwMDIwOCAqLwotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotLyoKLSAgTk9URTogVGhlIGZv bGxvd2luZyBzdGF0ZW1lbnQgZnJlZXMgdGhlIGJ1ZmZlciBvZiB0aGUgQUNLIHdlIGp1c3QgZ290 LgotICBCdXQgdGhlIHVwcGVyIGxheWVycyBzdGlsbCBuZWVkIHRoZSBkYXRhLCBsaWtlIGlmIGl0 J3MgdGhlIEFDSyB0byBhbiBJLAotICBTLCBGLCBELCBaLCBvciBqdXN0IGFib3V0IGFueSBraW5k IG9mIHBhY2tldC4gIFNvIGZvciBub3csIGZyZWVyYnVmKCkKLSAgZGVhbGxvY2F0ZXMgdGhlIGJ1 ZmZlciwgYnV0IGRvZXMgbm90IGVyYXNlIHRoZSBkYXRhIG9yIGRlc3Ryb3kgdGhlIHBvaW50ZXIK LSAgdG8gaXQuICBUaGVyZSdzIG5vIG90aGVyIHNpbmdsZSBwbGFjZSB3aGVyZSB0aGVzZSByZWNl aXZlIGJ1ZmZlcnMgY2FuIGJlCi0gIGNvcnJlY3RseSBmcmVlZCAoPykgLi4uCi0qLwotCQkgICAg ZnJlZXJwa3QocnNuKTsJLyogRnJlZSB0aGUgQUNLJ3MgYnVmZmVyICovCi0JCSAgICBmcmVlc2J1 Zihyc24pOwkvKiAqKiogRnJlZSB0aGUgc2VudCBwYWNrZXQncyBidWZmZXIgKi8KLQkJICAgIGlm IChyc24gPT0gd2lubG8pIHsJLyogR290IHRoZSBvbmUgd2Ugd2FudCAqLwotCQkJc2Fja3RibFt3 aW5sb10gPSAwOwotCQkJd2lubG8gPSAod2lubG8gKyAxKSAlIDY0OwotCQkJZGVidWcoRjEwMSwi aW5wdXQgc2VuZCByb3RhdGVkIHNlbmQgd2luZG93IiwiIix3aW5sbyk7Ci0JCQlicmVhazsJCS8q IFJldHVybiB0aGUgQUNLICovCi0JCSAgICB9IGVsc2UgewotCQkJZGVidWcoRjEwMSwiaW5wdXQg c2VuZCBtYXJrIHBrdCIsIiIscnNuKTsKLQkJCWNvbnRpbnVlOwkvKiBPdGhlcndpc2UgZ28gcmVh ZCBhbm90aGVyIHBhY2tldCAqLwotCQkgICAgfQotCQl9IGVsc2UgaWYgKHkgPT0gMSAmJiB3c2xv dHMgPCAyKSB7IC8qICgxOTApIEFDSyBmb3IgcHJldmlvdXMgKi8KLQkJICAgIG51bWVycnMrKzsJ CS8qID09IE5BSyBmb3IgY3VycmVudCwgY291bnQgZXJyb3IgKi8KLQkJICAgIGRlYnVnKEYxMDEs ImlucHV0IHNlbmQgQUNLIGZvciBwcmV2aW91cyIsIiIscnNuKTsKLQkJICAgIGZyZWVycGt0KHJz bik7CS8qIEZyZWUgTkFLJ3MgYnVmZmVyICovCi0JCSAgICB4ID0gcmVzZW5kKHdpbmxvKTsJLyog UmVzZW5kIGN1cnJlbnQgcGFja2V0ICovCi0JCSAgICBpZiAoeCA8IDApIHsKLQkJCXR5cGUgPSAn RSc7Ci0JCQllcnJwa3QoKENIQVIgKikiVG9vIG1hbnkgcmV0cmllcyIpOwotCQkJYnJlYWs7Ci0J CSAgICB9IGVsc2UgY29udGludWU7CS8qIFJlc2VuZCBvaywgZ28gcmVhZCBhbm90aGVyIHBhY2tl dCAqLwotCQl9IGVsc2UgewkJLyogT3RoZXIgY2FzZXMsIGp1c3QgaWdub3JlICovCi0JCSAgICBk ZWJ1ZyhGMTAxLCJpbnB1dCBzZW5kIEFDSyBvdXQgb2Ygd2luZG93IiwiIixyc24pOwotCQkgICAg ZnJlZXJwa3QocnNuKTsKLQkJICAgIGNvbnRpbnVlOwotCQl9Ci0JICAgIH0KLQkgICAgaWYgKHR5 cGUgPT0gJ04nKSB7CQkvKiBOQUsgKi8KLQkJbnVtZXJycysrOwkJLyogQ291bnQgYW4gZXJyb3Ig Ki8KLSNpZmRlZiBTVFJFQU1JTkcKLQkJaWYgKHN0cmVhbWluZykgewkJLyogU3RyZWFtaW5nICov Ci0JCSAgICBlcnJwa3QoKENIQVIgKikiTkFLIHJlY2VpdmVkIG9uIHJlbGlhYmxlIGxpbmsuIik7 Ci0JCSAgICB0eXBlID0gJ0UnOwotCQkgICAgYnJlYWs7Ci0JCX0KLSNlbmRpZiAvKiBTVFJFQU1J TkcgKi8KLQotCQlkZWJ1ZyhGMTAxLCJpbnB1dCBzZW5kIE5BSyIsIiIscnNuKTsKLSNpZmRlZiBO RVdEUEwKLQkJLyogUmVkdWNlIHByZXZhaWxpbmcgcGFja2V0IGxlbmd0aCAqLwotCQl4ID0gc3Nl cXRibFtyc25dOwkvKiBMZW5ndGggb2YgcGFja2V0IHRoYXQgd2FzIE5BSydkICovCi0JCWlmICh4 ID4gLTEpIHsJCS8qIElmIGl0J3MgYSBEYXRhIHBhY2tldCB3ZSd2ZSBzZW50ICovCi0JCSAgICBp ZiAoc19wa3RbeF0ucGtfdHlwID09ICdEJykgewotCQkJc3BzaXogPSAoc19wa3RbeF0ucGtfbGVu ICsgOCkgPj4gMTsgLyogSGFsdmUgbGVuZ3RoICovCi0jaWZkZWYgQ09NTUVOVAotCQkJLyogVGhp cyBtaWdodCBiZSBhIGdvb2QgaWRlYSAtLSBoYXZlbid0IHRyaWVkIGl0IC4uLiAqLwotCQkJaWYg KGJlc3RsZW4gPiAwICYmIHNwc2l6ID4gYmVzdGxlbikKLQkJCSAgc3BzaXogPSBiZXN0bGVuOwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJCWlmIChzcHNpeiA8IDIwKSBzcHNpeiA9IDIwOwotCQkJ ZGVidWcoRjEwMSwiaW5wdXQgTiBjdXQgcGFja2V0IGxlbmd0aCIsIiIsc3BzaXopOwotCQkgICAg fQotCQl9Ci0jZW5kaWYgLyogTkVXRFBMICovCi0JCWZyZWVycGt0KHJzbik7CQkvKiBGcmVlIGJ1 ZmZlciB3aGVyZSBOQUsgbGllcy4gKi8KLQkJaWYgKHkgPT0gMCkgewkJLyogSW4gY3VycmVudCB3 aW5kb3cgKi8KLQkJICAgIGRlYnVnKEYxMDAsIiBpbiB3aW5kb3ciLCIiLDApOwotCQkgICAgayA9 IHNzZXF0YmxbcnNuXTsJLyogR2V0IHBvaW50ZXIgdG8gTkFLJ2QgcGFja2V0LiAqLwotCQkgICAg aWYgKGsgPCAwIHx8IChrID4gLTEgJiYgc19wa3Rba10ucGtfdHlwID09ICcgJykpIHsKLQkJCXgg PSByZXNlbmQod2lubG8pOyAvKiBQYWNrZXQgd2UgaGF2ZW4ndCBzZW50IHlldC4gKi8KLQkJICAg IH0gZWxzZSB7Ci0JCQl4ID0gcmVzZW5kKHJzbik7IC8qIFJlc2VuZCByZXF1ZXN0ZWQgcGFja2V0 LiAqLwotCQkgICAgfQotCQkgICAgaWYgKHggPCAwKSB7CS8qIFJlc2VuZCBlcnJvciBpcyBmYXRh bC4gICovCi0JCQl0eXBlID0gJ0UnOwotCQkJZXJycGt0KChDSEFSICopIlRvbyBtYW55IHJldHJp ZXMiKTsKLQkJCWJyZWFrOwotCQkgICAgfSBlbHNlIGNvbnRpbnVlOwkvKiBSZXNlbmQgb2ssIGdv IHJlYWQgYW5vdGhlciBwYWNrZXQgKi8KLQkJfSBlbHNlIGlmICgocnNuID09IChwa3RudW0gKyAx KSAlIDY0KSkgeyAvKiBOQUsgZm9yIG5leHQgcGt0ICovCi0JCSAgICBpZiAod3Nsb3RzID4gMSkg ewotCQkJZGVidWcoIEYxMDEsIk5BSyBmb3IgbmV4dCBwYWNrZXQsIHdpbmRvd2luZyIsIiIscnNu KTsKLQkJCXggPSByZXNlbmQod2lubG8pOyAvKiBSZXNlbmQgd2luZG93LWxvdyAqLwotCQkJaWYg KHggPCAwKSB7Ci0JCQkgICAgdHlwZSA9ICdFJzsKLQkJCSAgICBlcnJwa3QoKENIQVIgKikiVG9v IG1hbnkgcmV0cmllcyIpOwotCQkJICAgIGJyZWFrOwotCQkJfQotCQkJY29udGludWU7CS8qIEdv IGJhY2sgYW5kIHJlYWQgYW5vdGhlciBwa3QgKi8KLQkJICAgIH0KLQkJICAgIGRlYnVnKEYxMDEs Ik5BSyBmb3IgbmV4dCBwYWNrZXQsIG5vIHdpbmRvd2luZyIsIiIscnNuKTsKLQkJICAgIHggPSAo cnNuID09IDApID8gNjMgOiByc24gLSAxOwotCQkgICAgaWYgKHggPT0gMCAmJiAoc25kdHlwID09 ICdTJyB8fCBzbmR0eXAgPT0gJ0knKSkgewotCQkJcmVzZW5kKDApOwkvKiBBQ0sgZm9yIFMgb3Ig SSBwYWNrZXQgbWlzc2luZyAqLwotCQkJY29udGludWU7CS8qIHNvIHJlc2VuZCB0aGUgUyBvciBJ ICovCi0JCSAgICB9Ci0JCSAgICByc24gPSB4OwkJLyogRWxzZSwgdHJlYXQgTkFLKG4rMSkgYXMg QUNLKG4pICovCi0JCSAgICBuYWsyYWNrID0gMTsJLyogR28gYmFjayBhbmQgcHJvY2VzcyB0aGUg QUNLICovCi0JCSAgICBjb250aW51ZTsKLQkJfSBlbHNlIGlmICh5ID4gMCkgewkvKiBOQUsgZm9y IHBrdCB3ZSBjYW4ndCByZXNlbmQgKi8KLQkJICAgIGRlYnVnKEYxMDEsIiBOQUsgb3V0IG9mIHdp bmRvdyIsIiIscnNuKTsgLyogYmFkLi4uICovCi0JCSAgICB0eXBlID0gJ0UnOwotCQkgICAgZXJy cGt0KChDSEFSICopIk5BSyBvdXQgb2Ygd2luZG93Iik7Ci0JCSAgICBicmVhazsKLQkJfSBlbHNl IGNvbnRpbnVlOwkvKiBJZ25vcmUgb3RoZXIgTkFLcyAqLwotCSAgICB9CQkJCS8qIEVuZCBvZiBm aWxlLXNlbmRlciBOQUsgaGFuZGxlciAqLwotCi0gICAgICAgICAgICBpZiAocnNuID09IHdpbmxv KSB7CQkvKiBOb3QgQUNLLCBOQUssIHRpbWVvdXQsIGV0Yy4gKi8KLQkJZGVidWcoRjAwMCwiaW5w dXQgc2VuZCB1bmV4cGVjdGVkIHR5cGUiLCIiLHR5cGUpOwotCQlicmVhazsKLQkgICAgfQotCX0J CQkJLyogRW5kIG9mIGZpbGUtc2VuZGVyIHNlY3Rpb24gKi8KLSAgICB9CQkJCQkvKiBFbmQgb2Yg aW5wdXQoKSB3aGlsZSgpIGxvb3AgKi8KLS8qCi0gIFdoZW4gdGhlIHdpbmRvdyBzaXplIGlzIDEg YW5kIHdlIGhhdmUgdGhlIHBhY2tldCB3ZSB3YW50LCB0aGVyZSBjYW4gbm90Ci0gIHBvc3NpYmx5 IGJlIGFueXRoaW5nIHdhaXRpbmcgZm9yIHVzIG9uIHRoZSBjb25uZWN0aW9uIHRoYXQgaXMgdXNl ZnVsIHRvIHVzLgotICBIb3dldmVyLCB0aGVyZSBtaWdodCBiZSByZWR1bmRhbnQgY29waWVzIG9m IGEgcGFja2V0IHdlIGFscmVhZHkgZ290LCB3aGljaAotICB3b3VsZCBjYXVzZSBuZWVkbGVzcyBj eWNsZXMgb2YgcmVwZWF0ZWQgcGFja2V0cy4gIFRoZXJlZm9yZSB3ZSBmbHVzaCB0aGUKLSAgY29t bXVuaWNhdGlvbnMgaW5wdXQgYnVmZmVyIG5vdyB0byB0cnkgdG8gZ2V0IHJpZCBvZiB1bmRlc2ly ZWQgYW5kIHVubmVlZGVkCi0gIHBhY2tldHMgdGhhdCB3ZSBoYXZlIG5vdCByZWFkIHlldC4KLQot ICBBY3R1YWxseSwgdGhlIGZpcnN0IHNlbnRlbmNlIGFib3ZlIGlzIG5vdCBlbnRpcmVseSB0cnVl OiB0aGVyZSBjb3VsZCBiZSBhbgotICBFcnJvciBwYWNrZXQgd2FpdGluZyB0byBiZSByZWFkLiAg Rmx1c2hpbmcgYW4gRSBwYWNrZXQgaXMgYmFkIGJlY2F1c2UgaXQKLSAgd2lsbCBub3QgYmUgcmVz ZW50LCBhbmQgd2UnbGwgZ28gaW50byBhIGN5Y2xlIG9mIHRpbWluZyBvdXQgYW5kCi0gIHJldHJh bnNtaXR0aW5nIHVwIHRvIHRoZSByZXRyeSBsaW1pdC4gIC0gZmRjIDIwMDcvMDMvMDIKLSovCi0g ICAgaWYgKHdzbG90biA9PSAxCQkJLyogKG5vdCB3c2xvdHMhKSAqLwotI2lmZGVmIFNUUkVBTUlO RwotCSYmICFzdHJlYW1pbmcJCQkvKiBCdXQgbm90IHdoZW4gc3RyZWFtaW5nICovCi0jZW5kaWYg LyogU1RSRUFNSU5HICovCi0JKSB7Ci0JZGVidWcoRjEwMCwiaW5wdXQgYWJvdXQgdG8gZmx1c2gi LCIiLDApOwotCXR0Zmx1aSgpOwkJLyogR290IHdoYXQgd2Ugd2FudCwgY2xlYXIgaW5wdXQgYnVm ZmVyLiAqLwotICAgIH0KLSNpZm5kZWYgTkVXRFBMCi0gICAgaWYgKCFuYWtzdGF0ZSkJCQkvKiBX aGVuIHNlbmRpbmcgKi8KLSAgICAgIHJjYWxjcHN6KCk7CQkJLyogcmVjYWxjdWxhdGUgc2l6ZSBl dmVyeSBwYWNrZXQgKi8KLSNlbmRpZiAvKiBORVdEUEwgKi8KLSAgICBpZiAodHlwZSA9PSAnRScp Ci0gICAgICB4aXRzdGEgfD0gKHdoYXQgPyB3aGF0IDogMSk7CS8qIFJlbWVtYmVyIHdoYXQgZmFp bGVkLiAqLwotICAgIGRlYnVnKEYxMDEsImlucHV0IHdpbmxvIiwiIix3aW5sbyk7Ci0gICAgZGVi dWcoRjEwMSwiaW5wdXQgcnNuIiwiIixyc24pOwotICAgIGRlYnVnKEYwMDAsImlucHV0IHJldHVy bmluZyB0eXBlIiwiIix0eXBlKTsKLSAgICByZXR1cm4ocmN2dHlwID0gdHlwZSk7CQkvKiBTdWNj ZXNzLCByZXR1cm4gcGFja2V0IHR5cGUuICovCi19Ci0KLSNpZmRlZiBQQVJTRU5TRQotLyogIFAg QSBSIEMgSCBLICAtLSAgQ2hlY2sgaWYgS2VybWl0IHBhY2tldCBoYXMgcGFyaXR5ICAqLwotCi0v KgotICBDYWxsIHdpdGggcyA9IHBvaW50ZXIgdG8gcGFja2V0LCBzdGFydCA9IHBhY2tldCBzdGFy dCBjaGFyYWN0ZXIsIG4gPSBsZW5ndGguCi0gIFJldHVybnMgMCBpZiBwYWNrZXQgaGFzIG5vIHBh cml0eSwgLTEgb24gZXJyb3IsIG9yLCBpZiBwYWNrZXQgaGFzIHBhcml0eToKLSAgICAnZScgZm9y IGV2ZW4sICdvJyBmb3Igb2RkLCAnbScgZm9yIG1hcmsuICBTcGFjZSBwYXJpdHkgY2Fubm90IGJl IHNlbnNlZC4KLSAgU28gYSByZXR1cm4gdmFsdWUgb2YgMCByZWFsbHkgbWVhbnMgZWl0aGVyIHNw YWNlIG9yIG5vbmUuCi0gIFJldHVybnMgLTIgaWYgcGFyaXR5IGhhcyBhbHJlYWR5IGJlZW4gY2hl Y2tlZCBkdXJpbmcgdGhpcyBwcm90b2NvbCBvcGVyYXRpb24uCi0qLwotaW50Ci0jaWZkZWYgQ0tf QU5TSUMKLXBhcmNoayhDSEFSICpzLCBDSEFSIHN0YXJ0LCBpbnQgbikKLSNlbHNlCi1wYXJjaGso cyxzdGFydCxuKSBDSEFSICpzLCBzdGFydDsgaW50IG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LS8qIHBhcmNoayAqLyB7Ci0gICAgQ0hBUiBzMCwgczEsIHMyLCBzMzsKLQotICAgIGRlYnVnKEYx MDEsInBhcmNoayBuIiwiIixuKTsKLSAgICBkZWJ1ZyhGMTAxLCJwYXJjaGsgc3RhcnQiLCIiLHN0 YXJ0KTsKLQotICAgIHMwID0gc1swXSAmIDB4N2Y7CQkJLyogTWFyayBmaWVsZCAodXN1YWxseSBD dHJsLUEpICovCi0KLSAgICBpZiAoczAgIT0gc3RhcnQgfHwgbiA8IDUpIHJldHVybigtMSk7IC8q IE5vdCBhIHZhbGlkIHBhY2tldCAqLwotCi0vKiBMb29rIGF0IHBhY2tldCBjb250cm9sIGZpZWxk cywgd2hpY2ggbmV2ZXIgaGF2ZSA4dGggYml0IHNldCAqLwotLyogRmlyc3QgY2hlY2sgZm9yIG5v IHBhcml0eSwgbW9zdCBjb21tb24gY2FzZS4gKi8KLQotICAgIGlmICgoKHNbMF0gfCBzWzFdIHwg c1syXSB8IHNbM10pICYgMHg4MCkgPT0gMCkKLSAgICAgIHJldHVybigwKTsJCQkvKiBObyBwYXJp dHkgb3Igc3BhY2UgcGFyaXR5ICovCi0KLS8qIENoZWNrIGZvciBtYXJrIHBhcml0eSAqLwotCi0g ICAgaWYgKCgoc1swXSAmIHNbMV0gJiBzWzJdICYgc1szXSkgJiAweDgwKSA9PSAweDgwKQotICAg ICAgcmV0dXJuKCdtJyk7CQkJLyogTWFyayBwYXJpdHkgKi8KLQotLyogUGFja2V0IGhhcyBzb21l IGtpbmQgb2YgcGFyaXR5ICovCi0vKiBNYWtlIDctYml0IGNvcGllcyBvZiBjb250cm9sIGZpZWxk cyAqLwotCi0gICAgczEgPSBzWzFdICYgMHg3ZjsJCQkvKiBMRU4gKi8KLSAgICBzMiA9IHNbMl0g JiAweDdmOwkJCS8qIFNFUSAqLwotICAgIHMzID0gc1szXSAmIDB4N2Y7CQkJLyogVFlQRSAqLwot Ci0vKiBDaGVjayBmb3IgZXZlbiBwYXJpdHkgKi8KLQotICAgIGlmICgoc1swXSA9PSBwX3RibFtz MF0pICYmCi0gICAgICAgIChzWzFdID09IHBfdGJsW3MxXSkgJiYKLSAgICAgICAgKHNbMl0gPT0g cF90YmxbczJdKSAmJgotCShzWzNdID09IHBfdGJsW3MzXSkpCi0gICAgICByZXR1cm4oJ2UnKTsK LQotLyogQ2hlY2sgZm9yIG9kZCBwYXJpdHkgKi8KLQotICAgIGlmICgoc1swXSAhPSBwX3RibFtz MF0pICYmCi0gICAgICAgIChzWzFdICE9IHBfdGJsW3MxXSkgJiYKLSAgICAgICAgKHNbMl0gIT0g cF90YmxbczJdKSAmJgotCShzWzNdICE9IHBfdGJsW3MzXSkpCi0gICAgICByZXR1cm4oJ28nKTsK LQotLyogT3RoZXJ3aXNlIGl0J3MgcHJvYmFibHkgbGluZSBub2lzZS4gIExldCBjaGVja3N1bSBj YWxjdWxhdGlvbiBjYXRjaCBpdC4gKi8KLQotICAgIHJldHVybigtMSk7Ci19Ci0jZW5kaWYgLyog UEFSU0VOU0UgKi8KLQwKLS8qCi0gIENoZWNrIHRvIG1ha2Ugc3VyZSB0aW1lb3V0IGludGVydmFs cyBhcmUgbG9uZyBlbm91Z2ggdG8gYWxsb3cgbWF4aW11bQotICBsZW5ndGggcGFja2V0cyB0byBn ZXQgdGhyb3VnaCBiZWZvcmUgdGhlIHRpbWVyIGdvZXMgb2ZmLiAgSWYgbm90LCB0aGUKLSAgdGlt ZW91dCBpbnRlcnZhbCBpcyBhZGp1c3RlZCB1cHdhcmRzLgotCi0gIFRoaXMgcm91dGluZSBpcyBj YWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHRyYW5zYWN0aW9uLCBiZWZvcmUgd2UKLSAga25v dyBhbnl0aGluZyBhYm91dCB0aGUgZGVsYXkgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBsaW5lLiAg SXQgd29ya3MKLSAgb25seSBmb3Igc2VyaWFsIGNvbW11bmljYXRpb24gZGV2aWNlczsgaXQgdHJ1 c3RzIHRoZSBzcGVlZCByZXBvcnRlZCBieQotICB0aGUgb3BlcmF0aW5nIHN5c3RlbS4KLQotICBD YWxsIHdpdGggYSB0aW1vdXQgaW50ZXJ2YWwuICBSZXR1cm5zIGl0LCBhZGp1c3RlZCBpZiBuZWNl c3NhcnkuCi0qLwotaW50Ci1jaGt0aW1vKHRpbW8sZmxhZykgaW50IHRpbW8sIGZsYWc7IHsKLSAg ICBsb25nIGNwcywgejsgaW50IHgsIHk7Ci0jaWZkZWYgU1RSRUFNSU5HCi0gICAgZGVidWcoRjEw MSwiY2hrdGltbyBzdHJlYW1pbmciLCIiLHN0cmVhbWluZyk7Ci0gICAgaWYgKHN0cmVhbWluZykK LSAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQotICAgIGRlYnVnKEYx MDEsImNoa3RpbW8gdGltbyIsIiIsdGltbyk7IC8qIFRpbWVvdXQgYmVmb3JlIGFkanVzdG1lbnQg Ki8KLSAgICBkZWJ1ZyhGMTAxLCJjaGt0aW1vIGZsYWciLCIiLGZsYWcpOwotCi0gICAgaWYgKGZs YWcpCQkJCS8qIERvbid0IGNoYW5nZSB0aW1lb3V0IGlmIHVzZXIgKi8KLSAgICAgIHJldHVybih0 aW1vKTsJCQkvKiBnYXZlIFNFVCBTRU5EIFRJTUVPVVQgY29tbWFuZC4gKi8KLSAgICBkZWJ1ZyhG MTAxLCJjaGt0aW1vIHNwbWF4IiwiIixzcG1heCk7Ci0gICAgZGVidWcoRjEwMSwiY2hrdGltbyB1 cnBzaXoiLCIiLHVycHNpeik7Ci0KLSAgICBpZiAoIW5ldHdvcmspIHsJCQkvKiBPbiBzZXJpYWwg Y29ubmVjdGlvbnMuLi4gKi8KLQlzcGVlZCA9IHR0Z3NwZCgpOwkJLyogR2V0IGN1cnJlbnQgc3Bl ZWQuICovCi0JaWYgKHNwZWVkID4gMEwpIHsKLQkgICAgY3BzID0gc3BlZWQgLyAxMEw7CQkvKiBD b252ZXJ0IHRvIGNoYXJzIHBlciBzZWNvbmQgKi8KLQkgICAgaWYgKGNwcyA+IDBMKSB7Ci0JCWxv bmcgcGxlbjsJCS8qIE1heGltdW0gb2Ygc2VuZCBhbmQgcmN2IHBrdCBzaXplICovCi0JCXogPSBj cHMgKiAobG9uZykgdGltbzsJLyogQ2hhcnMgcGVyIHRpbWVvdXQgaW50ZXJ2YWwgKi8KLQkJeiAt PSB6IC8gMTBMOwkJLyogTGVzcyAxMCBwZXJjZW50ICovCi0JCXBsZW4gPSBzcG1heDsKLQkJaWYg KHVycHNpeiA+IHNwbWF4KSBwbGVuID0gdXJwc2l6OwotCQlkZWJ1ZyhGMTAxLCJjaGt0aW1vIHBs ZW4iLCIiLHBsZW4pOwotCQlpZiAoeiA8IHBsZW4pIHsJCS8qIENvbXBhcmUgd2l0aCBwYWNrZXQg c2l6ZSAqLwotCQkgICAgeCA9IChpbnQpICgobG9uZykgcGxlbiAvIGNwcyk7IC8qIEFkanVzdCBp ZiBuZWNlc3NhcnkgKi8KLQkJICAgIHkgPSB4IC8gMTA7CQkvKiBBZGQgMTAgcGVyY2VudCBmb3Ig c2FmZXR5ICovCi0JCSAgICBpZiAoeSA8IDIpIHkgPSAyOwkvKiBPciAyIHNlY29uZHMsIHdoaWNo ZXZlciBpcyBtb3JlICovCi0JCSAgICB4ICs9IHk7Ci0JCSAgICBpZiAoeCA+IHRpbW8pCS8qIElm IHRoaXMgaXMgZ3JlYXRlciB0aGFuIGN1cnJlbnQgKi8KLQkJICAgICAgdGltbyA9IHg7CQkvKiB0 aW1lb3V0LCBjaGFuZ2UgdGhlIHRpbWVvdXQgKi8KLQkJICAgIGRlYnVnKEYxMDEsImNoa3RpbW8g bmV3IHRpbW8iLCIiLHRpbW8pOwotCQl9Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIHJldHVybih0 aW1vKTsKLX0KLQwKLS8qICBTIFAgQSBDIEsgIC0tICBDb25zdHJ1Y3QgYW5kIHNlbmQgYSBwYWNr ZXQgICovCi0KLS8qCi0gIHNwYWNrKCkgc2VuZHMgYSBwYWNrZXQgb2YgdGhlIGdpdmVuIHR5cGUs IHNlcXVlbmNlIG51bWJlciBuLCB3aXRoIGxlbiBkYXRhCi0gIGNoYXJhY3RlcnMgcG9pbnRlZCB0 byBieSBkLCBpbiBlaXRoZXIgYSByZWd1bGFyIG9yIGV4dGVuZGVkLSBsZW5ndGggcGFja2V0LAot ICBkZXBlbmRpbmcgb24gbGVuLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5 IHNlbnQsIG9yIGVsc2UgLTEKLSAgdXBvbiBmYWlsdXJlLiAgVXNlcyBnbG9iYWwgbnBhZCwgcGFk Y2gsIG15c3RjaCwgYmN0dSwgZGF0YS4gIExlYXZlcyBwYWNrZXQKLSAgZnVsbHkgYnVpbHQgYW5k IG51bGwtdGVybWluYXRlZCBmb3IgbGF0ZXIgcmV0cmFuc21pc3Npb24gYnkgcmVzZW5kKCkuCi0g IFVwZGF0ZXMgZ2xvYmFsIHNuZHBrdGwgKHNlbmQtcGFja2V0IGxlbmd0aCkuCi0KLSAgTk9URTog VGhlIGdsb2JhbCBwb2ludGVyICJkYXRhIiBpcyBhc3N1bWVkIHRvIHBvaW50IGludG8gdGhlIDd0 aCBwb3NpdGlvbgotICBvZiBhIGNoYXJhY3RlciBhcnJheSAocHJlc3VtYWJseSBpbiBwYWNrZXQg YnVmZmVyIGZvciB0aGUgY3VycmVudCBwYWNrZXQpLgotICBJdCB3YXMgdXNlZCBieSBnZXRwa3Qo KSB0byBidWlsZCB0aGUgcGFja2V0IGRhdGEgZmllbGQuICBzcGFjaygpIGZpbGxzIGluCi0gIHRo ZSBoZWFkZXIgdG8gdGhlIGxlZnQgb2YgdGhlIGRhdGEgcG9pbnRlciAodGhlIGRhdGEgcG9pbnRl ciBpcyBkZWZpbmVkCi0gIGluIGdldHNidWYoKSBpbiBja2NmbjMuYykuICBJZiB0aGUgYWRkcmVz cyAiZCIgaXMgdGhlIHNhbWUgYXMgImRhdGEiLCB0aGVuCi0gIHRoZSBwYWNrZXQncyBkYXRhIGZp ZWxkIGhhcyBiZWVuIGJ1aWx0ICJpbiBwbGFjZSIgYW5kIG5lZWQgbm90IGJlIGNvcGllZC4KLSov Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotc3BhY2soY2hhciBwa3R0eXAsIGludCBuLCBpbnQgbGVu LCBDSEFSICpkKQotI2Vsc2UKLXNwYWNrKHBrdHR5cCxuLGxlbixkKSBjaGFyIHBrdHR5cDsgaW50 IG4sIGxlbjsgQ0hBUiAqZDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogc3BhY2sgKi8gewot ICAgIHJlZ2lzdGVyIGludCBpOwotICAgIGludCBpeCwgaiwgaywgeCwgbHAsIGxvbmdwa3QsIGNv cHksIGxvZ2xlbjsKLQotI2lmZGVmIEdGVElNRVIKLSAgICBDS0ZMT0FUIHQxID0gMC4wLCB0MiA9 IDAuMDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSAgICByZWdpc3RlciBDSEFSICpjcCwgKm15 ZGF0YTsKLSAgICB1bnNpZ25lZCBjcmM7Ci0KLSAgICBjb3B5ID0gKGQgIT0gZGF0YSk7CQkJLyog RmxhZyB3aGV0aGVyIGRhdGEgbXVzdCBiZSBjb3BpZWQgICovCi0KLSNpZmRlZiBERUJVRwotICAg IGlmIChkZWJsb2cpIHsJCQkvKiBTYXZlIGxvdHMgb2YgZnVuY3Rpb24gY2FsbHMhICovCi0JZGVi dWcoRjEwMSwic3BhY2sgbiIsIiIsbik7Ci0jaWZkZWYgQ09NTUVOVAotCWlmIChwa3R0eXAgIT0g J0QnKSB7CQkvKiBEYXRhIHBhY2tldHMgd291bGQgYmUgdG9vIGxvbmcgKi8KLQkgICAgZGVidWco RjExMSwic3BhY2sgZGF0YSIsZGF0YSxkYXRhKTsKLQkgICAgZGVidWcoRjExMSwic3BhY2sgZCIs ZCxkKTsKLQl9Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCWRlYnVnKEYxMDEsInNwYWNrIGxlbiIs IiIsbGVuKTsKLQlkZWJ1ZyhGMTAxLCJzcGFjayBjb3B5IiwiIixjb3B5KTsKLSAgICB9Ci0jZW5k aWYgLyogREVCVUcgKi8KLQotICAgIGxvbmdwa3QgPSAobGVuICsgYmN0bCArIDIpID4gOTQ7CS8q IERlY2lkZSB3aGV0aGVyIGl0J3MgYSBsb25nIHBhY2tldCAqLwotICAgIG15ZGF0YSA9IGRhdGEg LSA3ICsgKGxvbmdwa3QgPyAwIDogMyk7IC8qIFN0YXJ0aW5nIHBvc2l0aW9uIG9mIGhlYWRlciAq LwotICAgIGsgPSBzc2VxdGJsW25dOwkJCS8qIFBhY2tldCBzdHJ1Y3R1cmUgaW5mbyBmb3IgcGt0 IG4gKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7CQkJ LyogU2F2ZSAyIG1vcmUgZnVuY3Rpb24gY2FsbHMuLi4gKi8KLQlkZWJ1ZyhGMTAxLCJzcGFjayBt eWRhdGEiLCIiLG15ZGF0YSk7Ci0JZGVidWcoRjEwMSwic3BhY2sgc3NlcXRibFtuXSIsIiIsayk7 Ci0JaWYgKGsgPCAwKSB7Ci0jaWZkZWYgU1RSRUFNSU5HCi0JICAgIGlmICghc3RyZWFtaW5nKQot I2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCSAgICAgIGRlYnVnKEYxMDEsInNwYWNrIHNlbmRpbmcg cGFja2V0IG91dCBvZiB3aW5kb3ciLCIiLG4pOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogREVCVUcg Ki8KLSNlbmRpZgkvKiBDT01NRU5UICovCi0gICAgaWYgKGsgPiAtMSkgewotCXNfcGt0W2tdLnBr X2FkciA9IG15ZGF0YTsJLyogUmVtZW1iZXIgYWRkcmVzcyBvZiBwYWNrZXQuICovCi0Jc19wa3Rb a10ucGtfc2VxID0gbjsJCS8qIFJlY29yZCBzZXF1ZW5jZSBudW1iZXIgKi8KLQlzX3BrdFtrXS5w a190eXAgPSBwa3R0eXA7CS8qIFJlY29yZCBwYWNrZXQgdHlwZSAqLwotICAgIH0KLSAgICBzcGt0 bCA9IDA7CQkJCS8qIEluaXRpYWxpemUgbGVuZ3RoIG9mIHRoaXMgcGFja2V0ICovCi0gICAgaSA9 IDA7CQkJCS8qIGFuZCBwb3NpdGlvbiBpbiBwYWNrZXQuICovCi0KLS8qIE5vdyBmaWxsIHRoZSBw YWNrZXQgKi8KLQotICAgIG15ZGF0YVtpKytdID0gbXlzdGNoOwkJLyogTUFSSyAqLwotICAgIGxw ID0gaSsrOwkJCQkvKiBQb3NpdGlvbiBvZiBMRU4sIGZpbGwgaW4gbGF0ZXIgKi8KLQotICAgIG15 ZGF0YVtpKytdID0gdG9jaGFyKG4pOwkJLyogU0VRIGZpZWxkICovCi0gICAgbXlkYXRhW2krK10g PSBwa3R0eXA7CQkvKiBUWVBFIGZpZWxkICovCi0gICAgaiA9IGxlbiArIGJjdGw7CQkJLyogTGVu Z3RoIG9mIGRhdGEgKyBibG9jayBjaGVjayAqLwotICAgIGlmIChsb25ncGt0KSB7CQkJLyogTG9u ZyBwYWNrZXQ/ICovCi0JaW50IHg7CQkJCS8qIFllcywgd29yayBhcm91bmQgU0NPIFhlbml4LzI4 NiAqLwotI2lmZGVmIENLVFVOSU5HCi0JdW5zaWduZWQgaW50IGNoazsKLSNlbmRpZiAvKiBDS1RV TklORyAqLwotCXggPSBqIC8gOTU7CQkJLyogY29tcGlsZXIgYnVnLi4uICovCi0gICAgICAgIG15 ZGF0YVtscF0gPSB0b2NoYXIoMCk7CQkvKiBTZXQgTEVOIHRvIHplcm8gKi8KLSAgICAgICAgbXlk YXRhW2krK10gPSB0b2NoYXIoeCk7CS8qIEV4dGVuZGVkIGxlbmd0aCwgaGlnaCBieXRlICovCi0g ICAgICAgIG15ZGF0YVtpKytdID0gdG9jaGFyKGogJSA5NSk7CS8qIEV4dGVuZGVkIGxlbmd0aCwg bG93IGJ5dGUgKi8KLSNpZmRlZiBDS1RVTklORwotICAgICAgICAvKiBIZWFkZXIgY2hlY2tzdW0g LSBza2lwIHRoZSBmdW5jdGlvbiBjYWxscyBhbmQgbG9vcHMgKi8KLQkgIGNoayA9ICh1bnNpZ25l ZCkgbXlkYXRhW2xwXSAgICsKLQkgICAgICAgICh1bnNpZ25lZCkgbXlkYXRhW2xwKzFdICsKLQkg ICAgICAgICh1bnNpZ25lZCkgbXlkYXRhW2xwKzJdICsKLQkJKHVuc2lnbmVkKSBteWRhdGFbbHAr M10gKwotCQkodW5zaWduZWQpIG15ZGF0YVtscCs0XSA7Ci0JbXlkYXRhW2krK10gPSB0b2NoYXIo KENIQVIpICgoKChjaGsgJiAwMzAwKSA+PiA2KSArIGNoaykgJiAwNzcpKTsKLSNlbHNlCi0gICAg ICAgIG15ZGF0YVtpXSA9ICdcMCc7CQkvKiBUZXJtaW5hdGUgZm9yIGhlYWRlciBjaGVja3N1bSAq LwotICAgICAgICBteWRhdGFbaSsrXSA9IHRvY2hhcihjaGsxKG15ZGF0YStscCw1KSk7Ci0jZW5k aWYgLyogQ0tUVU5JTkcgKi8KLSAgICB9IGVsc2UgbXlkYXRhW2xwXSA9IHRvY2hhcihqKzIpOwkv KiBOb3JtYWwgTEVOICovCi0vKgotICBXaGVuIHNlbmRpbmcgYSBmaWxlLCB0aGUgZGF0YSBpcyBh bHJlYWR5IGluIHRoZSByaWdodCBwbGFjZS4gIElmIGl0IHdlcmVuJ3QsCi0gIGl0IG1pZ2h0IG1h a2Ugc2Vuc2UgdG8gb3B0aW1pemUgdGhpcyBzZWN0aW9uIGJ5IHVzaW5nIG1lbWNweSBvciBiY29w eQotICAobmVpdGhlciBvZiB3aGljaCBhcmUgcG9ydGFibGUpLCBidXQgb25seSBpZiBvdXIgcGFj a2V0cyB3ZXJlIHJhdGhlciBsb25nLgotICBXaGVuIHJlY2VpdmluZywgd2UncmUgb25seSBzZW5k aW5nIEFDS3Mgc28gaXQgZG9lc24ndCBtYXR0ZXIuICBTbyBjb3VudCB0aGUKLSAgZm9sbG93aW5n IGxvb3AgYXMgYSBzbGVlcGluZyBkb2cuCi0qLwotICAgIGlmIChjb3B5KQkJCQkvKiBEYXRhIGZp ZWxkIGJ1aWx0IGluIHBsYWNlPyAqLwotICAgICAgZm9yICggOyBsZW4tLTsgaSsrKSBteWRhdGFb aV0gPSAqZCsrOyAvKiBObywgbXVzdCBjb3B5LiAqLwotICAgIGVsc2UJCQkJLyogT3RoZXJ3aXNl LCAqLwotICAgICAgaSArPSBsZW47CQkJCS8qIEp1c3Qgc2tpcCBwYXN0IGRhdGEgZmllbGQuICov Ci0gICAgbXlkYXRhW2ldID0gJ1wwJzsJCQkvKiBOdWxsLXRlcm1pbmF0ZSBmb3IgY2hlY2tzdW0g Y2FsYy4gKi8KLQotICAgIHN3aXRjaCAoYmN0dSkgewkJCS8qIEJsb2NrIGNoZWNrICovCi0gICAg ICAgIGNhc2UgMToJCQkJLyogMSA9IDYtYml0IGNoa3N1bSAqLwotCSAgICBpeCA9IGkgLSBscDsJ CS8qIEF2b2lkICJvcmRlciBvZiBvcGVyYXRpb24iIGVycm9yICovCi0JICAgIG15ZGF0YVtpKytd ID0gdG9jaGFyKGNoazEobXlkYXRhK2xwLGl4KSk7Ci0JICAgIGJyZWFrOwotCWNhc2UgMjoJCQkJ LyogMiA9IDEyLWJpdCBjaGtzdW0gKi8KLQkgICAgaiA9IGNoazIobXlkYXRhK2xwLGktbHApOwot CSAgICBteWRhdGFbaSsrXSA9ICh1bnNpZ25lZCl0b2NoYXIoKGogPj4gNikgJiAwNzcpOwotICAg CSAgICBteWRhdGFbaSsrXSA9ICh1bnNpZ25lZCl0b2NoYXIoaiAmIDA3Nyk7Ci0JICAgIGJyZWFr OwotICAgICAgICBjYXNlIDM6CQkJCS8qIDMgPSAxNi1iaXQgQ1JDICovCi0JICAgIGNyYyA9IGNo azMobXlkYXRhK2xwLGktbHApOwotCSAgICBteWRhdGFbaSsrXSA9ICh1bnNpZ25lZCl0b2NoYXIo KChjcmMgJiAwMTcwMDAwKSkgPj4gMTIpOwotCSAgICBteWRhdGFbaSsrXSA9ICh1bnNpZ25lZCl0 b2NoYXIoKGNyYyA+PiA2KSAmIDA3Nyk7Ci0JICAgIG15ZGF0YVtpKytdID0gKHVuc2lnbmVkKXRv Y2hhcihjcmMgJiAwNzcpOwotCSAgICBicmVhazsKLQljYXNlIDQ6CQkJCS8qIDIgPSAxMi1iaXQg Y2hrc3VtLCBibGFuay1mcmVlICovCi0JICAgIGogPSBjaGsyKG15ZGF0YStscCxpLWxwKTsKLQkg ICAgbXlkYXRhW2krK10gPQotCSAgICAgICh1bnNpZ25lZCkodG9jaGFyKCh1bnNpZ25lZCkoKChq ID4+IDYpICYgMDc3KSArIDEpKSk7Ci0gICAJICAgIG15ZGF0YVtpKytdID0gKHVuc2lnbmVkKSh0 b2NoYXIoKHVuc2lnbmVkKSgoaiAmIDA3NykgKyAxKSkpOwotCSAgICBicmVhazsKLSAgICB9Ci0g ICAgbG9nbGVuID0gaTsKLSAgICBteWRhdGFbaSsrXSA9IHNlb2w7CQkJLyogRW5kIG9mIGxpbmUg KHBhY2tldCB0ZXJtaW5hdG9yKSAqLwotI2lmZGVmIFRDUFNPQ0tFVAotLyoKLSAgSWYgVEVMTkVU IGNvbm5lY3Rpb24gYW5kIHBhY2tldCB0ZXJtaW5hdG9yIGlzIGNhcnJpYWdlIHJldHVybiwKLSAg d2UgbXVzdCBzdHVmZiBlaXRoZXIgTEYgb3IgTlVMLCBhY2NvcmRpbmcgdG8gU0VUIFRFTE5FVCBO RVdMSU5FLU1PREUKLSAgKHRuX25sbSksIHRvIG1lZXQgdGhlIFRFTE5FVCBOVlQgc3BlY2lmaWNh dGlvbiwgdW5sZXNzIHVzZXIgc2FpZCBSQVcuCi0KLSAgSWYgTkVXTElORS1NT0RFIGlzIHNldCB0 byBMRiBpbnN0ZWFkIG9mIENSLCB3ZSBzdGlsbCBzZW5kIENSLU5VTAotICBvbiBhIE5WVCBjb25u ZWN0aW9uIGFuZCBDUiBvbiBhIGJpbmFyeSBjb25uZWN0aW9uLgotKi8KLSAgICBpZiAoCi0jaWZk ZWYgU1RSRUFNSU5HCi0JIWRvbnRzZW5kICYmCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0JKChu ZXR3b3JrICYmIHR0bnByb3RvID09IE5QX1RFTE5FVCkgfHwgKCFsb2NhbCAmJiBzc3RlbG5ldCkp Ci0JJiYgc2VvbCA9PSBDUikgewotICAgICAgICBzd2l0Y2ggKFRFTE9QVF9NRShURUxPUFRfQklO QVJZKSA/IHRuX2JfbmxtIDogdG5fbmxtKSB7Ci0JICBjYXNlIFROTF9DUjoJCQkvKiBOVlQgb3Ig QklOQVJZICovCi0JICAgIGJyZWFrOwotCSAgY2FzZSBUTkxfQ1JOVUw6Ci0JICAgIG15ZGF0YVtp KytdID0gTlVMOwotCSAgICBicmVhazsKLQkgIGNhc2UgVE5MX0NSTEY6Ci0JICAgIG15ZGF0YVtp KytdID0gTEY7Ci0JICAgIGJyZWFrOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogVENQU09DS0VUICov Ci0gICAgbXlkYXRhW2ldID0gJ1wwJzsJCQkvKiBUZXJtaW5hdGUgc3RyaW5nICovCi0gICAgaWYg KAotI2lmZGVmIFNUUkVBTUlORwotCSFkb250c2VuZCAmJgotI2VuZGlmIC8qIFNUUkVBTUlORyAq LwotCXBrdGxvZwotCSkJCQkJLyogU2F2ZSBhIGZ1bmN0aW9uIGNhbGwhICovCi0gICAgICBsb2dw a3QoJ3MnLG4sbXlkYXRhLGxvZ2xlbik7CS8qIExvZyB0aGUgcGFja2V0ICovCi0KLSAgICAvKiAo UFdQKSBhZGQgdGhlIHBhcml0eSBxdWlja2x5IGF0IHRoZSBlbmQgKi8KLSAgICBpZiAocGFyaXR5 KSB7Ci0Jc3dpdGNoIChwYXJpdHkpIHsKLQkgIGNhc2UgJ2UnOgkJCS8qIEV2ZW4gKi8KLQkgICAg Zm9yIChjcCA9ICZteWRhdGFbaS0xXTsgY3AgPj0gbXlkYXRhOyBjcC0tKQotCSAgICAgICpjcCA9 IHBfdGJsWypjcF07Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAnbSc6CQkJLyogTWFyayAqLwotCSAg ICBmb3IgKGNwID0gJm15ZGF0YVtpLTFdOyBjcCA+PSBteWRhdGE7IGNwLS0pCi0JICAgICAgKmNw IHw9IDEyODsKLQkgICAgYnJlYWs7Ci0JICBjYXNlICdvJzoJCQkvKiBPZGQgKi8KLQkgICAgZm9y IChjcCA9ICZteWRhdGFbaS0xXTsgY3AgPj0gbXlkYXRhOyBjcC0tKQotCSAgICAgICpjcCA9IHBf dGJsWypjcF0gXiAxMjg7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAncyc6CQkJLyogU3BhY2UgKi8K LQkgICAgZm9yIChjcCA9ICZteWRhdGFbaS0xXTsgY3AgPj0gbXlkYXRhOyBjcC0tKQotCSAgICAg ICpjcCAmPSAxMjc7Ci0JICAgIGJyZWFrOwotCX0KLSAgICB9Ci0gICAgaWYgKHBrdHBhdXMpIG1z bGVlcChwa3RwYXVzKTsJLyogUGF1c2UgaWYgcmVxdWVzdGVkICovCi0gICAgeCA9IDA7Ci0KLSAg ICBpZiAobnBhZCkgewotI2lmZGVmIFNUUkVBTUlORwotCWlmIChkb250c2VuZCkKLQkgIHggPSAw OwotCWVsc2UKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQkgIHggPSB0dG9sKHBhZGJ1ZixucGFk KTsJLyogU2VuZCBhbnkgcGFkZGluZyAqLwotICAgIH0KLSAgICBpZiAoeCA+IC0xKSB7Ci0jaWZk ZWYgQ0tfVElNRVJTCi0JaWYgKHRpbWludCA+IDApIHsKLQkgICAgaWYgKHBrdHR5cCA9PSAnTicp Ci0JICAgICAgc3J0dGJsW24gPiAwID8gbi0xIDogNjNdID0gZ3RpbWVyKCk7Ci0JICAgIGVsc2UK LQkgICAgICBzcnR0Ymxbbl0gPSBndGltZXIoKTsKLQl9Ci0jZW5kaWYgLyogQ0tfVElNRVJTICov Ci0Jc3BrdGwgPSBpOwkJCS8qIFJlbWVtYmVyIHBhY2tldCBsZW5ndGggKi8KLQlpZiAoayA+IC0x KQotCSAgc19wa3Rba10ucGtfbGVuID0gc3BrdGw7CS8qIGFsc28gaW4gcGFja2V0IGluZm8gc3Ry dWN0dXJlICovCi0KLSNpZmRlZiBERUJVRwotI2lmZGVmIEdGVElNRVIKLS8qCi0gIFRoaXMgY29k ZSBzaG93cyAoaW4gdGhlIGRlYnVnIGxvZykgaG93IGxvbmcgaXQgdGFrZXMgd3JpdGUoKSB0byBl eGVjdXRlLgotICBTb21ldGltZXMgb24gYSBjb25nZXN0ZWQgVENQIGNvbm5lY3Rpb24sIGl0IGNh biBzdXJwcmlzZSB5b3UgLS0gOTAgc2Vjb25kcwotICBvciBtb3JlLi4uCi0qLwotCWlmICgKLSNp ZmRlZiBTVFJFQU1JTkcKLQkgICAgIWRvbnRzZW5kICYmCi0jZW5kaWYgLyogU1RSRUFNSU5HICov Ci0JICAgIGRlYmxvZwotCSAgICApCi0JICB0MSA9IGdmdGltZXIoKTsKLSNlbmRpZiAvKiBHRlRJ TUVSICovCi0jZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIFNUUkVBTUlORwotCWlmIChkb250 c2VuZCkgewotCSAgICBkZWJ1ZyhGMDAwLCJTVFJFQU1JTkcgc3BhY2sgc2tpcHBpbmciLCIiLHBr dHR5cCk7Ci0JICAgIHggPSAwOwotCX0gZWxzZQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCXgg PSB0dG9sKG15ZGF0YSxzcGt0bCk7CQkvKiBTZW5kIHRoZSBwYWNrZXQgKi8KLSAgICB9Ci0jaWZk ZWYgU1RSRUFNSU5HCi0gICAgaWYgKCFkb250c2VuZCkgewotI2VuZGlmIC8qIFNUUkVBTUlORyAq LwotCWRlYnVnKEYxMDEsInNwYWNrIHNwa3RsIiwiIixzcGt0bCk7Ci0JZGVidWcoRjEwMSwic3Bh Y2sgdHRvbCByZXR1cm5zIiwiIix4KTsKLQlpZiAoeCA8IDApIHsJCQkvKiBGYWlsZWQuICovCi0J ICAgIGlmIChsb2NhbCAmJiB4IDwgLTEpIHsKLQkJeHhzY3JlZW4oU0NSX1NULFNUX0VSUiwwTCwi RkFJTEVEOiBDb25uZWN0aW9uIGxvc3QiKTsKLQkJLyogV2UgY2FuJ3Qgc2VuZCBhbiBFIHBhY2tl dCBiZWNhdXNlIHRoZSBjb25uZWN0aW9uIGlzIGxvc3QuICovCi0JCWVwa3RzZW50ID0gMTsJCS8q IFNvIHByZXRlbmQgd2Ugc2VudCBvbmUuICovCi0JCWZhdGFsaW8gPSAxOwkJLyogUmVtZW1iZXIg d2UgZ290IGEgZmF0YWwgaS9vIGVycm9yICovCi0JCWRvbG9nZW5kKCk7Ci0JCWNrc3RybmNweSgo Y2hhciAqKWVwa3Rtc2csIkNvbm5lY3Rpb24gbG9zdCIsUEtUTVNHTEVOKTsKLQkgICAgfQotCSAg ICByZXR1cm4oeCk7Ci0JfQotCWlmIChzcGt0bCA+IG1heHNlbmQpCQkvKiBLZWVwIHRyYWNrIG9m IGxvbmdlc3QgcGFja2V0IHNlbnQgKi8KLQkgIG1heHNlbmQgPSBzcGt0bDsKLSNpZmRlZiBERUJV RwotI2lmZGVmIEdGVElNRVIKLQlpZiAoZGVibG9nKSAgewkJCS8qIExvZyBlbGFwc2VkIHRpbWUg Zm9yIHdyaXRlKCkgKi8KLQkgICAgdDIgPSBnZnRpbWVyKCk7Ci0JICAgIGRlYnVnKEYxMDEsInNw YWNrIHR0b2wgbXNlYyIsIiIsKGxvbmcpKCh0Mi10MSkqMTAwMC4wKSk7Ci0JfQotI2VuZGlmIC8q IEdGVElNRVIgKi8KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIFNUUkVBTUlORwotICAgIH0K LSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQotICAgIHNuZHR5cCA9IHBrdHR5cDsJCQkvKiBSZW1l bWJlciBwYWNrZXQgdHlwZSBmb3IgZWNob3MgKi8KLSNpZmRlZiBTVFJFQU1JTkcKLSAgICBpZiAo IWRvbnRzZW5kKSB7CQkJLyogSWYgcmVhbGx5IHNlbnQsICovCi0Jc3BhY2tldHMrKzsJCQkvKiBj b3VudCBpdC4gKi8KLQlmbGNvICs9IHNwa3RsOwkJCS8qIENvdW50IHRoZSBjaGFyYWN0ZXJzICov Ci0JdGxjbyArPSBzcGt0bDsJCQkvKiBmb3Igc3RhdGlzdGljcy4uLiAqLwotI2lmZGVmIERFQlVH Ci0JaWYgKGRlYmxvZykgewkJCS8qIFNhdmUgdHdvIGZ1bmN0aW9uIGNhbGxzISAqLwotCSAgICBk dW1wc2J1ZigpOwkJCS8qIER1bXAgc2VuZCBidWZmZXJzIHRvIGRlYnVnIGxvZyAqLwotCSAgICBk ZWJ1ZyhGMTExLCJzcGFjayBjYWxsaW5nIHNjcmVlbiwgbXlkYXRhPSIsbXlkYXRhLG4pOwotCX0K LSNlbmRpZiAvKiBERUJVRyAqLwotICAgIH0KLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSAgICBp ZiAobG9jYWwpIHsKLQlpbnQgeCA9IDA7Ci0JaWYgKGZkaXNwbGEgIT0gWFlGRF9OKSB4ID0gMTsK LQlpZiAoKGZkaXNwbGEgPT0gWFlGRF9CKSAmJiAocGt0dHlwID09ICdEJyB8fCBwa3R0eXAgPT0g J1knKSkgeCA9IDA7Ci0JaWYgKHgpCi0JICB4eHNjcmVlbihTQ1JfUFQscGt0dHlwLChsb25nKW4s KGNoYXIgKilteWRhdGEpOyAvKiBVcGRhdGUgc2NyZWVuICovCi0gICAgfQotICAgIHJldHVybihz cGt0bCk7CQkJLyogUmV0dXJuIGxlbmd0aCAqLwotfQotCi0vKiAgQyBIIEsgMSAgLS0gIENvbXB1 dGUgYSB0eXBlLTEgS2VybWl0IDYtYml0IGNoZWNrc3VtLiAgKi8KLQotaW50Ci1jaGsxKHBrdCxs ZW4pIHJlZ2lzdGVyIENIQVIgKnBrdDsgcmVnaXN0ZXIgaW50IGxlbjsgewotICAgIHJlZ2lzdGVy IHVuc2lnbmVkIGludCBjaGs7Ci0jaWZkZWYgQ0tUVU5JTkcKLSNpZmRlZiBDT01NRU5UCi0gICAg cmVnaXN0ZXIgdW5zaWduZWQgaW50IG07CQkvKiBBdm9pZCBmdW5jdGlvbiBjYWxsICovCi0gICAg bSA9IChwYXJpdHkpID8gMDE3NyA6IDAzNzc7Ci0gICAgZm9yIChjaGsgPSAwOyBsZW4tLSA+IDA7 IHBrdCsrKQotICAgICAgY2hrICs9ICpwa3QgJiBtOwotI2Vsc2UKLSAgICBjaGsgPSAwOwotICAg IHdoaWxlIChsZW4tLSA+IDApIGNoayArPSAodW5zaWduZWQpICpwa3QrKzsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0jZWxzZQotICAgIGNoayA9IGNoazIocGt0LGxlbik7Ci0jZW5kaWYgLyogQ0tU VU5JTkcgKi8KLSAgICBjaGsgPSAoKChjaGsgJiAwMzAwKSA+PiA2KSArIGNoaykgJiAwNzc7Ci0g ICAgZGVidWcoRjEwMSwiY2hrMSIsIiIsY2hrKTsKLSAgICByZXR1cm4oKGludCkgY2hrKTsKLX0K LQotLyogIEMgSCBLIDIgIC0tICBDb21wdXRlIHRoZSBudW1lcmljIHN1bSBvZiBhbGwgdGhlIGJ5 dGVzIGluIHRoZSBwYWNrZXQuICAqLwotCi11bnNpZ25lZCBpbnQKLWNoazIocGt0LGxlbikgcmVn aXN0ZXIgQ0hBUiAqcGt0OyByZWdpc3RlciBpbnQgbGVuOyB7Ci0gICAgcmVnaXN0ZXIgbG9uZyBj aGs7Ci0jaWZkZWYgQ09NTUVOVAotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBtOwotICAgIG0g PSAocGFyaXR5KSA/IDAxNzcgOiAwMzc3OwotICAgIGZvciAoY2hrID0gMDsgbGVuLS0gPiAwOyBw a3QrKykKLSAgICAgIGNoayArPSAqcGt0ICYgbTsKLSNlbHNlCi0gICAgLyogUGFyaXR5IGhhcyBh bHJlYWR5IGJlZW4gc3RyaXBwZWQgKi8KLSAgICBjaGsgPSAwTDsKLSAgICB3aGlsZSAobGVuLS0g PiAwKSBjaGsgKz0gKHVuc2lnbmVkKSAqcGt0Kys7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAg IGRlYnVnKEYxMDEsImNoazIiLCIiLCh1bnNpZ25lZCBpbnQpIChjaGsgJiAwNzc3NykpOwotICAg IHJldHVybigodW5zaWduZWQgaW50KSAoY2hrICYgMDc3NzcpKTsKLX0KLQotLyogIEMgSCBLIDMg IC0tICBDb21wdXRlIGEgdHlwZS0zIEtlcm1pdCBibG9jayBjaGVjay4gICovCi0vKgotIENhbGN1 bGF0ZSB0aGUgMTYtYml0IENSQy1DQ0lUVCBvZiBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgdXNp bmcgYSBsb29rdXAKLSB0YWJsZS4gIEFzc3VtZXMgdGhlIGFyZ3VtZW50IHN0cmluZyBjb250YWlu cyBubyBlbWJlZGRlZCBudWxscy4KLSovCi0jaWZkZWYgQ09NTUVOVAotdW5zaWduZWQgaW50Ci1j aGszKHBrdCxwYXJpdHksbGVuKSByZWdpc3RlciBDSEFSICpwa3Q7IGludCBwYXJpdHk7IHJlZ2lz dGVyIGludCBsZW47IHsKLSAgICByZWdpc3RlciBsb25nIGMsIGNyYzsKLSAgICByZWdpc3RlciB1 bnNpZ25lZCBpbnQgbTsKLSAgICBtID0gKHBhcml0eSkgPyAwMTc3IDogMDM3NzsKLSAgICBmb3Ig KGNyYyA9IDA7IGxlbi0tID4gMDsgcGt0KyspIHsKLQljID0gY3JjIF4gKGxvbmcpKCpwa3QgJiBt KTsKLQljcmMgPSAoY3JjID4+IDgpIF4gKGNyY3RhWyhjICYgMHhGMCkgPj4gNF0gXiBjcmN0Yltj ICYgMHgwRl0pOwotICAgIH0KLSAgICByZXR1cm4oKHVuc2lnbmVkIGludCkgKGNyYyAmIDB4RkZG RikpOwotfQotI2Vsc2UKLXVuc2lnbmVkIGludAotY2hrMyhwa3QsbGVuKSByZWdpc3RlciBDSEFS ICpwa3Q7IHJlZ2lzdGVyIGludCBsZW47IHsKLSAgICByZWdpc3RlciBsb25nIGMsIGNyYzsKLSAg ICBmb3IgKGNyYyA9IDA7IGxlbi0tID4gMDsgcGt0KyspIHsKLQljID0gY3JjIF4gKGxvbmcpKCpw a3QpOwotCWNyYyA9IChjcmMgPj4gOCkgXiAoY3JjdGFbKGMgJiAweEYwKSA+PiA0XSBeIGNyY3Ri W2MgJiAweDBGXSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsImNoazMiLCIiLCh1bnNpZ25lZCBp bnQpIChjcmMgJiAweEZGRkYpKTsKLSAgICByZXR1cm4oKHVuc2lnbmVkIGludCkgKGNyYyAmIDB4 RkZGRikpOwotfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotLyogIE4gWCBUIFAgSyBUICAtLSAg TmV4dCBQYWNrZXQgICovCi0vKgotICBHZXQgcGFja2V0IG51bWJlciBvZiBuZXh0IHBhY2tldCB0 byBzZW5kIGFuZCBhbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgaXQuCi0gIFJldHVybnM6Ci0gICAgMCBv biBzdWNjZXNzLCB3aXRoIGdsb2JhbCBwa3RudW0gc2V0IHRvIHRoZSBwYWNrZXQgbnVtYmVyOwot ICAgLTEgb24gZmFpbHVyZSB0byBhbGxvY2F0ZSBidWZmZXIgKGZhdGFsKTsKLSAgIC0yIGlmIHJl c3VsdGluZyBwYWNrZXQgbnVtYmVyIGlzIG91dHNpZGUgdGhlIGN1cnJlbnQgd2luZG93LgotKi8K LWludAotbnh0cGt0KCkgewkJCQkvKiBDYWxsZWQgYnkgZmlsZSBzZW5kZXIgKi8KLSAgICBpbnQg aiwgbiwgeDsKLQotICAgIGRlYnVnKEYxMDEsIm54dHBrdCBwa3RudW0iLCIiLHBrdG51bSk7Ci0g ICAgZGVidWcoRjEwMSwibnh0cGt0IHdpbmxvICIsIiIsd2lubG8pOwotICAgIG4gPSAocGt0bnVt ICsgMSkgJSA2NDsJCS8qIEluY3JlbWVudCBwYWNrZXQgbnVtYmVyIG1vZCA2NCAqLwotICAgIGRl YnVnKEYxMDEsIm54dHBrdCBuIiwiIixuKTsKLSNpZmRlZiBTVFJFQU1JTkcKLSAgICBpZiAoIXN0 cmVhbWluZykgewotCXggPSBjaGt3aW4obix3aW5sbyx3c2xvdHMpOwkvKiBEb24ndCBleGNlZWQg d2luZG93IGJvdW5kYXJ5ICovCi0JZGVidWcoRjEwMSwibnh0cGt0IGNoa3dpbiIsIiIseCk7Ci0J aWYgKHgpCi0JICByZXR1cm4oLTIpOwotCWogPSBnZXRzYnVmKG4pOwkJCS8qIEdldCBhIGJ1ZmZl ciBmb3IgcGFja2V0IG4gKi8KLQlpZiAoaiA8IDApIHsKLQkgICAgZGVidWcoRjEwMSwibnh0cGt0 IGdldHNidWYgZmFpbHVyZSIsIiIsaik7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotICAgIH0KLSNl bmRpZiAvKiBTVFJFQU1JTkcgKi8KLSAgICBwa3RudW0gPSBuOwotICAgIHJldHVybigwKTsKLX0K LQotLyogRnVuY3Rpb25zIGZvciBzZW5kaW5nIEFDS3MgYW5kIE5BS3MgKi8KLQotLyogTm90ZSwg d2Ugc2hvdWxkIG9ubHkgQUNLIHRoZSBwYWNrZXQgYXQgd2luZG93LWxvdyAod2lubG8pICovCi0v KiBIb3dldmVyLCBpZiBhbiBvbGQgcGFja2V0IGFycml2ZXMgYWdhaW4gKGUuZy4gYmVjYXVzZSB0 aGUgQUNLIHdlIHNlbnQgKi8KLS8qIGVhcmxpZXIgd2FzIGxvc3QpLCB3ZSBBQ0sgaXQgYWdhaW4u ICovCi0KLWludAotYWNrKCkgewkJCQkJLyogQWNrbm93bGVkZ2UgdGhlIGN1cnJlbnQgcGFja2V0 LiAqLwotICAgIHJldHVybihhY2tucyh3aW5sbywoQ0hBUiAqKSIiKSk7Ci19Ci0KLSNpZmRlZiBT VFJFQU1JTkcKLWludAotZmFzdGFjaygpIHsJCQkJLyogQWNrbm93bGVkZ2UgcGFja2V0IG4gKi8K LSAgICBpbnQgaiwgaywgbiwgeDsKLSAgICBuID0gd2lubG87Ci0KLSAgICBrID0gcnNlcXRibFtu XTsJCQkvKiBGaXJzdCBmaW5kIHJlY2VpdmVkIHBhY2tldCBuLiAqLwotICAgIGRlYnVnKEYxMDEs IlNUUkVBTUlORyBmYXN0YWNrIGsiLCIiLGspOwotICAgIGZyZWVzYnVmKG4pOwkJCS8qIEZyZWUg Y3VycmVudCBzZW5kLWJ1ZmZlciwgaWYgYW55ICovCi0gICAgaWYgKChqID0gZ2V0c2J1ZihuKSkg PCAwKSB7Ci0JLyogVGhpcyBjYW4gaGFwcGVuIGlmIHdlIGhhdmUgdG8gcmUtQUNLIGFuIG9sZCBw YWNrZXQgdGhhdCBoYXMgKi8KLSAgICAgICAgLyogYWxyZWFkeSBsZWZ0IHRoZSB3aW5kb3cuICBJ dCBkb2VzIG5vIGhhcm0uICovCi0JZGVidWcoRjEwMSwiU1RSRUFNSU5HIGZhc3RhY2sgY2FuJ3Qg Z2V0c2J1ZiIsIiIsbik7Ci0gICAgfQotICAgIGRvbnRzZW5kID0gMTsKLSAgICB4ID0gc3BhY2so J1knLG4sMCwoQ0hBUiAqKSIiKTsJLyogTm93IHNlbmQgaXQgKGJ1dCBub3QgcmVhbGx5KSAqLwot ICAgIGRvbnRzZW5kID0gMDsKLSAgICBpZiAoeCA8IDApIHJldHVybih4KTsKLSAgICBkZWJ1ZyhG MTAxLCJTVFJFQU1JTkcgZmFzdGFjayB4IiwiIix4KTsKLSAgICBpZiAoayA+IC0xKQotICAgICAg ZnJlZXJidWYoayk7CQkJLyogZG9uJ3QgbmVlZCBpdCBhbnkgbW9yZSAqLwotICAgIGlmIChqID4g LTEpCi0gICAgICBmcmVlc2J1ZihqKTsJCQkvKiBhbmQgZG9uJ3QgbmVlZCB0byBrZWVwIEFDSyBl aXRoZXIgKi8KLSAgICB3aW5sbyA9ICh3aW5sbyArIDEpICUgNjQ7Ci0gICAgcmV0dXJuKDApOwot fQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCi1pbnQKLWFja25zKG4scykgaW50IG47IENIQVIg KnM7IHsJCS8qIEFja25vd2xlZGdlIHBhY2tldCBuICovCi0gICAgaW50IGosIGssIHg7Ci0gICAg ZGVidWcoRjExMSwiYWNrbnMiLHMsbik7Ci0KLSAgICBrID0gcnNlcXRibFtuXTsJCQkvKiBGaXJz dCBmaW5kIHJlY2VpdmVkIHBhY2tldCBuLiAqLwotICAgIGRlYnVnKEYxMDEsImFja25zIGsiLCIi LGspOwotICAgIGZyZWVzYnVmKG4pOwkJCS8qIEZyZWUgY3VycmVudCBzZW5kLWJ1ZmZlciwgaWYg YW55ICovCi0gICAgaWYgKChqID0gZ2V0c2J1ZihuKSkgPCAwKSB7Ci0JLyogVGhpcyBjYW4gaGFw cGVuIGlmIHdlIGhhdmUgdG8gcmUtQUNLIGFuIG9sZCBwYWNrZXQgdGhhdCBoYXMgKi8KLSAgICAg ICAgLyogYWxyZWFkeSBsZWZ0IHRoZSB3aW5kb3cuICBJdCBkb2VzIG5vIGhhcm0uICovCi0JZGVi dWcoRjEwMSwiYWNrbnMgY2FuJ3QgZ2V0c2J1ZiIsIiIsbik7Ci0gICAgfQotICAgIHggPSBzcGFj aygnWScsbiwoaW50KXN0cmxlbigoY2hhciAqKXMpLHMpOyAvKiBOb3cgc2VuZCBpdC4gKi8KLSAg ICBpZiAoeCA8IDApIHJldHVybih4KTsKLSAgICBkZWJ1ZyhGMTAxLCJhY2tucyB3aW5sbyIsIiIs d2lubG8pOwotICAgIGRlYnVnKEYxMDEsImFja25zIG4iLCIiLG4pOwotICAgIGlmIChuID09IHdp bmxvKSB7CQkJLyogSWYgd2UncmUgYWNraW5nIHdpbmxvICovCi0JaWYgKGsgPiAtMSkKLQkgIGZy ZWVyYnVmKGspOwkJCS8qIGRvbid0IG5lZWQgaXQgYW55IG1vcmUgKi8KLQlpZiAoaiA+IC0xKQot CSAgZnJlZXNidWYoaik7CQkJLyogYW5kIGRvbid0IG5lZWQgdG8ga2VlcCBBQ0sgZWl0aGVyICov Ci0Jd2lubG8gPSAod2lubG8gKyAxKSAlIDY0OwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0K LWludAotYWNrbihuKSBpbnQgbjsgewkJCS8qIFNlbmQgQUNLIGZvciBwYWNrZXQgbnVtYmVyIG4g Ki8KLSAgICByZXR1cm4oYWNrbnMobiwoQ0hBUiAqKSIiKSk7Ci19Ci0KLWludAotYWNrMShzKSBD SEFSICpzOyB7CQkJLyogU2VuZCBhbiBBQ0sgd2l0aCBkYXRhLiAqLwotICAgIGlmICghcykgcyA9 IChDSEFSICopIiI7Ci0gICAgZGVidWcoRjExMCwiYWNrMSIsKGNoYXIgKilzLDApOwotICAgIHJl dHVybihhY2tucyh3aW5sbyxzKSk7Ci19Ci0KLS8qIE4gQSBDIEsgIC0tICAgU2VuZCBhIE5lZ2F0 aXZlIEFDS25vd2xlZGdtZW50LiAqLwotLyoKLSBDYWxsIHdpdGggdGhlIHBhY2tldCBudW1iZXIs IG4sIHRvIGJlIE5BSydkLgotIFJldHVybnMgLTEgaWYgdGhhdCBwYWNrZXQgaGFzIGJlZW4gTkFL J2QgdG9vIG1hbnkgdGltZXMsIG90aGVyd2lzZSAwLgotIEJ0dywgaXQgaXMgbm90IHJpZ2h0IHRv IHJldHVybiAwIHVuZGVyIGVycm9yIGNvbmRpdGlvbnMuICBUaGlzIGlzCi0gZG9uZSBiZWNhdXNl IHRoZSAtMSBjb2RlIGlzIHVzZWQgZm9yIGNhbmNlbGxpbmcgdGhlIGZpbGUgdHJhbnNmZXIuCi0g TW9yZSB3b3JrIGlzIG5lZWRlZCBoZXJlLgotKi8KLWludAotbmFjayhuKSBpbnQgbjsgewotICAg IGludCBpLCB4OwotCi0gICAgaWYgKG4gPCAwIHx8IG4gPiA2MykgewotCWRlYnVnKEYxMDEsIm5h Y2sgYmFkIHBrdCBudW0iLCIiLG4pOwotCXJldHVybigwKTsKLSAgICB9IGVsc2UgZGVidWcoRjEw MSwibmFjayIsIiIsbik7Ci0gICAgaWYgKChpID0gc3NlcXRibFtuXSkgPCAwKSB7CQkvKiBJZiBu ZWNlc3NhcnkgKi8KLQlpZiAoZ2V0c2J1ZihuKSA8IDApIHsJCS8qIGdldCBhIGJ1ZmZlciBmb3Ig dGhpcyBOQUsgKi8KLQkgICAgZGVidWcoRjEwMSwibmFjayBjYW4ndCBnZXRzYnVmIiwiIixuKTsK LQkgICAgcmV0dXJuKDApOwotCX0gZWxzZSBpID0gc3NlcXRibFtuXTsJCS8qIE5ldyBzbG90IG51 bWJlciAqLwotICAgIH0KLSAgICBpZiAobWF4dHJ5ID4gMCAmJiBzX3BrdFtpXS5wa19ydHIrKyA+ IG1heHRyeSkgLyogSG93IG1hbnk/ICovCi0gICAgICByZXR1cm4oLTEpOwkJCS8qIFRvbyBtYW55 Li4uICovCi0KLS8qIE5vdGUsIGRvbid0IGZyZWUgdGhpcyBidWZmZXIuICBFdmVudHVhbGx5IGFu IEFDSyB3aWxsIGNvbWUsIGFuZCB0aGF0ICovCi0vKiB3aWxsIHNldCBpdCBmcmVlLiAgSWYgbm90 LCB3ZWxsLCBpdCdzIGJhY2sgdG8gZ3JvdW5kIHplcm8gYW55d2F5Li4uICAqLwotCi0gICAgeCA9 IHNwYWNrKCdOJyxuLDAsKENIQVIgKikgIiIpOwkvKiBOQUtzIG5ldmVyIGhhdmUgZGF0YS4gKi8K LSAgICByZXR1cm4oeCk7Ci19Ci0KLSNpZm5kZWYgTkVXRFBMCQkJCS8qIFRoaXMgcm91dGluZSBu byBsb25nZXIgdXNlZCAqLwotLyoKLSAqIChQV1ApIHJlY2FsY3VsYXRlIHRoZSBvcHRpbWFsIHBh Y2tldCBsZW5ndGggaW4gdGhlIGZhY2Ugb2YgZXJyb3JzLgotICogVGhpcyBpcyBhIG1vZGlmaWVk IHZlcnNpb24gb2YgdGhlIGFsZ29yaXRobSBieSBKb2huIENoYW5kbGVyIGluIEtlcm1pdC8zNzAs Ci0gKiBzZWUgIkR5bmFtaWMgUGFja2V0IFNpemUgQ29udHJvbCIsIEtlcm1pdCBOZXdzLCBWMiAj MSwgSnVuZSAxOTg4LgotICoKLSAqIFRoaXMgaW1wbGVtZW50YXRpb24gbWluaW1pemVzIHRoZSB0 b3RhbCBvdmVyaGVhZCBlcXVhdGlvbiwgd2hpY2ggaXMKLSAqCi0gKiAgIFRvdGFsIGNoYXJzID0g ZmlsZV9jaGFycyArIChoZWFkZXJfbGVuICogbnVtX3BhY2tzKQotICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgKyAoZXJyb3JzICogKGhlYWRlcl9sZW4gKyBwYWNrZXRfbGVuKSkKLSAqCi0g KiBEaWZmZXJlbnRpYXRlIHdpdGggcmVzcGVjdCB0byBudW1iZXIgb2YgY2hhcnMsIHNvbHZlIGZv ciBwYWNrZXRfbGVuLCBnZXQ6Ci0gKgotICogICBwYWNrZXRfbGVuID0gc3FydCAoZmlsZV9jaGFy cyAqIGhlYWRlcl9sZW4gLyBlcnJvcnMpCi0gKi8KLQotLyoKLSAoRkRDKSBOZXcgc3VwZXItc2lt cGxlIGFsZ29yaXRobS4gIElmIHRoZXJlIHdhcyBhbiBlcnJvciBpbiB0aGUgbW9zdCByZWNlbnQK LSBwYWNrZXQgZXhjaGFuZ2UsIGN1dCB0aGUgc2VuZC1wYWNrZXQgc2l6ZSBpbiBoYWxmLCBkb3du IHRvIGEgbWluaW11bSBvZiAyMC4KLSBJZiB0aGVyZSB3YXMgbm8gZXJyb3IsIGluY3JlYXNlIHRo ZSBzaXplIGJ5IDUvNCwgdXAgdG8gdGhlIG1heGltdW0gbmVnb3RpYXRlZAotIGxlbmd0aC4gIFNl ZW1zIHRvIGJlIG11Y2ggbW9yZSByZXNwb25zaXZlIHRoYW4gcHJldmlvdXMgYWxnb3JpdGhtLCB3 aGljaCB0b29rCi0gZm9yZXZlciB0byByZWNvdmVyIHRoZSBvcmlnaW5hbCBwYWNrZXQgbGVuZ3Ro LCBhbmQgaXQgYWxzbyB3ZW50IGNyYXp5IHVuZGVyCi0gY2VydGFpbiBjb25kaXRpb25zLgotCi0g SGVyZSdzIGFub3RoZXIgaWRlYSBmb3IgcGFja2V0IGxlbmd0aCByZXNpemluZyB0aGF0IGtlZXBz IGEgaGlzdG9yeSBvZiB0aGUKLSBsYXN0IG4gcGFja2V0cy4gIFB1c2ggYSAxIGludG8gdGhlIGxl ZnQgZW5kIG9mIGFuIG4tYml0IHNoaWZ0IHJlZ2lzdGVyIGlmIHRoZQotIGN1cnJlbnQgcGFja2V0 IGlzIGdvb2QsIG90aGVyd2lzZSBwdXNoIGEgemVyby4gIFRoZSBjdXJyZW50IG4tYml0IHZhbHVl LCB3LCBvZgotIHRoaXMgcmVnaXN0ZXIgaXMgYSB3ZWlnaHRlZCBzdW0gb2YgdGhlIG5vaXNlIGhp dHMgZm9yIHRoZSBsYXN0IG4gcGFja2V0cywgd2l0aAotIHRoZSBtb3N0IHJlY2VudCB3ZWlnaGlu ZyB0aGUgbW9zdC4gIFRoZSBjdXJyZW50IHBhY2tldCBsZW5ndGggaXMgc29tZSBmdW5jdGlvbgot IG9mIHcgYW5kIHRoZSBuZWdvdGlhdGVkIHBhY2tldCBsZW5ndGgsIGxpa2U6Ci0KLSAgICgyXm4g LSB3KSAvICgyXm4pICogKG5lZ290aWF0ZWQgbGVuZ3RoKQotCi0gSWYgdGhlIHByZXNlbnQgcmVz aXppbmcgbWV0aG9kIGNhdXNlcyBwcm9ibGVtcywgdGhpbmsgYWJvdXQgdGhpcyBvbmUgYSBsaXR0 bGUKLSBtb3JlLgotKi8KLVZPSUQKLXJjYWxjcHN6KCkgewotCi0jaWZkZWYgQ09NTUVOVAotLyog T2xkIHdheSAqLwotICAgIHJlZ2lzdGVyIGxvbmcgeCwgcTsKLSAgICBpZiAobnVtZXJycyA9PSAw KSByZXR1cm47CQkvKiBib3VuZHMgY2hlY2sganVzdCBpbiBjYXNlICovCi0KLSAgICAvKiBvdmVy aGVhZCBvbiBhIGRhdGEgcGFja2V0IGlzIG5wYWQrNStiY3RyLCBwbHVzIDMgaWYgZXh0ZW5kZWQg cGFja2V0ICovCi0gICAgLyogYW4gQUNLIGlzIDUrYmN0ciAqLwotCi0gICAgLyogZmlyc3Qgc2V0 IHggPSBwZXIgcGFja2V0IG92ZXJoZWFkICovCi0gICAgaWYgKHdzbG90cyA+IDEpCQkJLyogU2xp ZGluZyB3aW5kb3dzICovCi0gICAgICB4ID0gKGxvbmcpIChucGFkKzUrYmN0cik7CQkvKiBwYWNr ZXQgb25seSwgZG9uJ3QgY291bnQgYWNrICovCi0gICAgZWxzZQkJCQkvKiBTdG9wLW4td2FpdCAq LwotICAgICAgeCA9IChsb25nKSAobnBhZCs1KzMrYmN0cis1K2JjdHIpOyAvKiBjb3VudCBwYWNr ZXQgYW5kIGFjay4gKi8KLQotICAgIC8qIHRoZW4gc2V0IHggPSBwYWNrZXQgbGVuZ3RoICoqIDIg Ki8KLSAgICB4ID0geCAqICggZmZjIC8gKENLX09GRl9UKSBudW1lcnJzKTsgLyogY2FyZWZ1bCBv ZiBvdmVyZmxvdyAqLwotCi0gICAgLyogY2FsY3VsYXRlIHRoZSBsb25nIGludGVnZXIgc3FydCh4 KSBxdWlja2x5ICovCi0gICAgcSA9IDUwMDsKLSAgICBxID0gKHEgKyB4L3EpID4+IDE7Ci0gICAg cSA9IChxICsgeC9xKSA+PiAxOwotICAgIHEgPSAocSArIHgvcSkgPj4gMTsKLSAgICBxID0gKHEg KyB4L3EpID4+IDE7CQkvKiBzaG91bGQgY29udmVyZ2UgaW4gYWJvdXQgNCBzdGVwcyAqLwotICAg IGlmICgocSA+IDk0KSAmJiAocSA8IDEzMCkpCS8qIGJyZWFrLWV2ZW4gcG9pbnQgZm9yIGxvbmcg cGFja2V0cyAqLwotICAgICAgcSA9IDk0OwotICAgIGlmIChxID4gc3BtYXgpIHEgPSBzcG1heDsJ LyogbWF4aW11bSBib3VuZHMgKi8KLSAgICBpZiAocSA8IDEwKSBxID0gMTA7CQkvKiBtaW5pbXVt IGJvdW5kcyAqLwotICAgIHNwc2l6ID0gcTsJCQkvKiBzZXQgbmV3IHNlbmQgcGFja2V0IHNpemUg Ki8KLSAgICBkZWJ1ZyhGMTAxLCJyY2FsY3BzaXoiLCIiLHEpOwotI2Vsc2UKLS8qIE5ldyB3YXkg Ki8KLSAgICBkZWJ1ZyhGMTAxLCJyY2FsY3BzaXogbnVtZXJycyIsIiIsbnVtZXJycyk7Ci0gICAg ZGVidWcoRjEwMSwicmNhbGNwc2l6IHNwc2l6IiwiIixzcHNpeik7Ci0gICAgaWYgKHNwYWNrZXRz IDwgMykgewotCW51bWVycnMgPSAwOwotCXJldHVybjsKLSAgICB9Ci0gICAgaWYgKG51bWVycnMp Ci0gICAgICBzcHNpeiA9IHNwc2l6IC8gMjsKLSAgICBlbHNlCi0gICAgICBzcHNpeiA9IChzcHNp eiAvIDQpICogNTsKLSAgICBpZiAoc3BzaXogPCAyMCkgc3BzaXogPSAyMDsKLSAgICBpZiAoc3Bz aXogPiBzcG1heCkgc3BzaXogPSBzcG1heDsKLSAgICBkZWJ1ZyhGMTAxLCJyY2FsY3BzaXogbmV3 IHNwc2l6IiwiIixzcHNpeik7Ci0gICAgbnVtZXJycyA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotfQotI2VuZGlmIC8qIE5FV0RQTCAqLwotCi0vKiAgUiBFIFMgRSBOIEQgIC0tICBSZXRyYW5z bWl0IHBhY2tldCBuLiAgKi8KLQotLyoKLSAgUmV0dXJucyAwIG9yIHBvc2l0aXZlIG9uIHN1Y2Nl c3MgKHRoZSBudW1iZXIgb2YgcmV0cmllcyBmb3IgcGFja2V0IG4pLgotICBPbiBmYWlsdXJlLCBy ZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyLCBhbmQgYW4gZXJyb3IgbWVzc2FnZSBpcyBwbGFjZWQK LSAgaW4gcmVjcGt0LgotKi8KLWludAotcmVzZW5kKG4pIGludCBuOyB7CQkJLyogU2VuZCBwYWNr ZXQgbiBhZ2Fpbi4gKi8KLSAgICBpbnQgaiwgaywgeDsKLSNpZmRlZiBHRlRJTUVSCi0gICAgQ0tG TE9BVCB0MSA9IDAuMCwgdDIgPSAwLjA7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0gICAgZGVi dWcoRjEwMSwicmVzZW5kIHNlcSIsIiIsbik7Ci0KLSAgICBrID0gY2hrd2luKG4sd2lubG8sd3Ns b3RzKTsJCS8qIFNlZSBpZiBwYWNrZXQgaW4gY3VycmVudCB3aW5kb3cgKi8KLSAgICBqID0gLTE7 CQkJCS8qIEFzc3VtZSBpdCdzIGxvc3QgKi8KLSAgICBpZiAoayA9PSAwKSBqID0gc3NlcXRibFtu XTsJCS8qIFNlZSBpZiB3ZSBzdGlsbCBoYXZlIGEgY29weSBvZiBpdCAqLwotICAgIGlmIChrICE9 IDAgfHwgaiA8IDApIHsJCS8qIElmIG5vdC4uLi4gKi8KLQlpZiAobmFrc3RhdGUgJiYgayA9PSAx KSB7Ci0vKgotICBQYWNrZXQgbiBpcyBpbiB0aGUgcHJldmlvdXMgd2luZG93IGFuZCB3ZSBhcmUg dGhlIGZpbGUgcmVjZWl2ZXIuCi0gIFdlIGFscmVhZHkgc2VudCB0aGUgQUNLIGFuZCBkZWFsbG9j YXRlZCBpdHMgYnVmZmVyIHNvIHdlIGNhbid0IGp1c3QKLSAgcmV0cmFuc21pdCB0aGUgQUNLLiAg UmF0aGVyIHRoYW4gZ2l2ZSB1cCwgd2UgdHJ5IHNvbWUgdHJpY2tzLi4uCi0qLwotCSAgICBpZiAo biA9PSAwICYmIHNwYWNrZXRzIDwgNjMgJiYgbXlpbml0WzBdKSB7IC8qIEFDSyB0byBTZW5kLUlu aXQgKi8KLS8qCi0gIElmIHRoZSBwYWNrZXQgbnVtYmVyIGlzIDAsIGFuZCB3ZSdyZSBhdCB0aGUg YmVnaW5uaW5nIG9mIGEgcHJvdG9jb2wKLSAgb3BlcmF0aW9uIChzcGFja2V0cyA8IDYzKSwgdGhl biB3ZSBoYXZlIHRvIHJlc2VuZCB0aGUgQUNLIHRvIGFuIEkgb3IgUwotICBwYWNrZXQsIGNvbXBs ZXRlIHdpdGggcGFyYW1ldGVycyBpbiB0aGUgZGF0YSBmaWVsZC4gIFNvIHdlIHRha2UgYSBjaGFu Y2UgYW5kCi0gIHNlbmQgYSBjb3B5IG9mIHRoZSBwYXJhbWV0ZXJzIGluIGFuIEFDSyBwYWNrZXQg d2l0aCBibG9jayBjaGVjayB0eXBlIDEuCi0gIChPciAzIGlmIFNFVCBCTE9DSyA1LikKLSovCi0J CWlmIChiY3RmKSB7CQkvKiBGb3JjZSBUeXBlIDMgb24gYWxsIHBhY2tldHM/ICovCi0JCSAgIHgg PSBzcGFjaygnWScsMCwoaW50KXN0cmxlbigoY2hhciAqKW15aW5pdCksKENIQVIgKilteWluaXQp OwotCQkgICAgaWYgKHggPCAwKSByZXR1cm4oeCk7Ci0JCSAgICBsb2dwa3QoJyMnLG4sKENIQVIg KikiPHJlY29uc3RydWN0ZWQ+IiwwKTsgLyogTG9nIGl0ICovCi0JCX0gZWxzZSB7CQkvKiBSZWd1 bGFyIEtlcm1pdCBwcm90b2NvbCAqLwotCQkgICAgaW50IGJjdGxzYXY7CS8qIFRlbXBvcmFyeSBz dG9yYWdlICovCi0JCSAgICBpbnQgYmN0dXNhdjsKLQkJICAgIGJjdGxzYXYgPSBiY3RsOwkvKiBT YXZlIGN1cnJlbnQgYmxvY2sgY2hlY2sgbGVuZ3RoICovCi0JCSAgICBiY3R1c2F2ID0gYmN0dTsJ LyogYW5kIHR5cGUgKi8KLQkJICAgIGJjdHUgPSBiY3RsID0gMTsJLyogU2V0IGJsb2NrIGNoZWNr IHRvIDEgKi8KLQkJICAgeCA9IHNwYWNrKCdZJywwLChpbnQpc3RybGVuKChjaGFyICopbXlpbml0 KSwoQ0hBUiAqKW15aW5pdCk7Ci0JCSAgICBpZiAoeCA8IDApIHJldHVybih4KTsKLQkJICAgIGxv Z3BrdCgnIycsbiwoQ0hBUiAqKSI8cmVjb25zdHJ1Y3RlZD4iLDApOyAvKiBMb2cgaXQgKi8KLQkJ ICAgIGJjdHUgPSBiY3R1c2F2OwkvKiBSZXN0b3JlIGJsb2NrIGNoZWNrIHR5cGUgKi8KLQkJICAg IGJjdGwgPSBiY3Rsc2F2OwkvKiBhbmQgbGVuZ3RoICovCi0JCX0KLQkgICAgfSBlbHNlIHsJCQkv KiBOb3QgdGhlIGZpcnN0IHBhY2tldCAqLwotLyoKLSAgSXQncyBub3QgdGhlIGZpcnN0IHBhY2tl dCBvZiB0aGUgcHJvdG9jb2wgb3BlcmF0aW9uLiAgSXQncyBzb21lIG90aGVyIHBhY2tldAotICB0 aGF0IHdlIGhhdmUgYWxyZWFkeSBBQ0snZCBhbmQgZm9yZ290dGVuIGFib3V0LiAgU28gd2UgdGFr ZSBhIGNoYW5jZSBhbmQKLSAgc2VuZCBhbiBlbXB0eSBBQ0sgdXNpbmcgdGhlIGN1cnJlbnQgYmxv Y2stY2hlY2sgdHlwZS4gIFVzdWFsbHkgdGhpcyB3aWxsCi0gIHdvcmsgb3V0IE9LIChsaWtlIHdo ZW4gYWNraW5nIERhdGEgcGFja2V0cyksIGFuZCBubyBncmVhdCBoYXJtIHdpbGwgYmUgZG9uZQot ICBpZiBpdCB3YXMgc29tZSBvdGhlciBraW5kIG9mIHBhY2tldCAoRiwgZXRjKS4gIElmIHdlIGFy ZSByZXF1ZXN0aW5nIGFuCi0gIGludGVycnVwdGlvbiBvZiB0aGUgZmlsZSB0cmFuc2ZlciwgdGhl IGZsYWdzIGFyZSBzdGlsbCBzZXQsIHNvIHdlJ2xsIGNhdGNoCi0gIHVwIG9uIHRoZSBuZXh0IHBh Y2tldC4KLSovCi0JCXggPSBzcGFjaygnWScsbiwwLChDSEFSICopICIiKTsKLQkJaWYgKHggPCAw KSByZXR1cm4oeCk7Ci0JICAgIH0KLQkgICAgcmV0cmFucysrOwotCSAgICB4eHNjcmVlbihTQ1Jf UFQsJyUnLChsb25nKXBrdG51bSwiUmV0cmFuc21pc3Npb24iKTsKLQkgICAgcmV0dXJuKDApOwot CX0gZWxzZSB7Ci0vKgotICBQYWNrZXQgbnVtYmVyIGlzIG5vdCBpbiBjdXJyZW50IG9yIHByZXZp b3VzIHdpbmRvdy4gIFdlIHNlZW0gdG8gaGl0IHRoaXMKLSAgY29kZSBvY2Nhc2lvbmFsbHkgYXQg dGhlIGJlZ2lubmluZyBvZiBhIHRyYW5zYWN0aW9uLCBmb3IgYXBwYXJlbnRseSBubyBnb29kCi0g IHJlYXNvbi4gIExldCdzIGp1c3QgbG9nIGl0IGZvciBkZWJ1Z2dpbmcsIHNlbmQgbm90aGluZywg YW5kIHRyeSB0byBwcm9jZWVkCi0gIHdpdGggdGhlIHByb3RvY29sIHJhdGhlciB0aGFuIGtpbGxp bmcgaXQuCi0qLwotCSAgICBkZWJ1ZyhGMTAxLCJyZXNlbmQgUEtUIE5PVCBJTiBXSU5ET1ciLCIi LG4pOwotCSAgICBkZWJ1ZyhGMTAxLCJyZXNlbmQgayIsIiIsayk7Ci0JICAgIHJldHVybigwKTsK LQl9Ci0gICAgfQotCi0vKiBPSywgaXQncyBpbiB0aGUgd2luZG93IGFuZCBpdCdzIG5vdCBsb3N0 LiAqLwotCi0gICAgZGVidWcoRjEwMSwicmVzZW5kIHBrdGluZm8gaW5kZXgiLCIiLGspOwotCi0g ICAgaWYgKG1heHRyeSA+IDAgJiYgc19wa3Rbal0ucGtfcnRyKysgPiBtYXh0cnkpIHsgLyogT3Zl ciByZXRyeSBsaW1pdCAqLwotCXhpdHN0YSB8PSB3aGF0OwotCXJldHVybigtMSk7Ci0gICAgfQot ICAgIGRlYnVnKEYxMDEsInJlc2VuZCByZXRyeSIsIiIsc19wa3Rbal0ucGtfcnRyKTsgLyogT0sg c28gZmFyICovCi0gICAgZHVtcHNidWYoKTsJCQkJLyogKGRlYnVnZ2luZykgKi8KLSAgICBpZiAo c19wa3Rbal0ucGtfdHlwID09ICcgJykgewkvKiBJbmNvbXBsZXRlbHkgZm9ybWVkIHBhY2tldCAq LwotCWlmIChuYWtzdGF0ZSkgewkJCS8qIChUaGlzIHNob3VsZG4ndCBoYXBwZW4gYW55IG1vcmUp ICovCi0JICAgIG5hY2sobik7Ci0JICAgIHJldHJhbnMrKzsKLQkgICAgeHhzY3JlZW4oU0NSX1BU LCclJywobG9uZylwa3RudW0sIihyZXNlbmQpIik7Ci0JICAgIHJldHVybihzX3BrdFtqXS5wa19y dHIpOwotCX0gZWxzZSB7CQkJLyogTm8gcGFja2V0IHRvIHJlc2VuZCEgKi8KLSNpZmRlZiBDT01N RU5UCi0vKgotICBUaGlzIGhhcHBlbmVkIChvbmNlKSB3aGlsZSBzZW5kaW5nIGEgZmlsZSB3aXRo IDIgd2luZG93IHNsb3RzIGFuZCB0eXBpbmcKLSAgWCB0byB0aGUgc2VuZGVyIHRvIGNhbmNlbCB0 aGUgZmlsZS4gIEJ1dCBzaW5jZSB3ZSdyZSBjYW5jZWxsaW5nIGFueXdheSwKLSAgdGhlcmUncyBu byBuZWVkIHRvIGdpdmUgYSBzY2FyeSBtZXNzYWdlLgotKi8KLQkgICAgc3ByaW50ZigoY2hhciAq KWVwa3Rtc2csCi0JCSAgICAicmVzZW5kIGxvZ2ljIGVycm9yOiBOUFMsIG49JWQsIGo9JWQuIixu LGopOwotCSAgICByZXR1cm4oLTIpOwotI2Vsc2UKLS8qIEp1c3QgaWdub3JlIGl0LiAqLwotCSAg ICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCX0KLSAgICB9Ci0jaWZkZWYgREVC VUcKLSNpZmRlZiBHRlRJTUVSCi0gICAgaWYgKGRlYmxvZykgdDEgPSBnZnRpbWVyKCk7Ci0jZW5k aWYgLyogR0ZUSU1FUiAqLwotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICAvKiBFdmVyeXRoaW5n IG9rLCBzZW5kIHRoZSBwYWNrZXQgKi8KLSNpZmRlZiBDS19USU1FUlMKLSAgICBpZiAodGltaW50 ID4gMCkKLSAgICAgIHNydHRibFtuXSA9IGd0aW1lcigpOwkJLyogVXBkYXRlIHRoZSB0aW1lciAq LwotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotICAgIHggPSB0dG9sKHNfcGt0W2pdLnBrX2Fkcixz X3BrdFtqXS5wa19sZW4pOwotCi0jaWZkZWYgREVCVUcKLSNpZmRlZiBHRlRJTUVSCi0gICAgaWYg KGRlYmxvZykgIHsKLQl0MiA9IGdmdGltZXIoKTsKLQlkZWJ1ZyhGMTAxLCJyZXNlbmQgdHRvbCBt c2VjIiwiIiwobG9uZykoKHQyLXQxKSoxMDAwLjApKTsKLSAgICB9Ci0jZW5kaWYgLyogR0ZUSU1F UiAqLwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgZGVidWcoRjEwMSwicmVzZW5kIHR0b2wgcmV0 dXJucyIsIiIseCk7Ci0KLSAgICByZXRyYW5zKys7CQkJCS8qIENvdW50IGEgcmV0cmFuc21pc3Np b24gKi8KLSAgICB4eHNjcmVlbihTQ1JfUFQsJyUnLChsb25nKXBrdG51bSwiKHJlc2VuZCkiKTsg LyogVGVsbCB1c2VyIGFib3V0IHJlc2VuZCAqLwotICAgIGxvZ3BrdCgnUycsbixzX3BrdFtqXS5w a19hZHIsIHNfcGt0W2pdLnBrX2xlbik7IC8qIExvZyB0aGUgcmVzZW50IHBhY2tldCAqLwotICAg IHJldHVybihzX3BrdFtqXS5wa19ydHIpOwkJLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgcmV0cmll cy4gKi8KLX0KLQotLyogIEUgUiBSIFAgSyBUICAtLSAgU2VuZCBhbiBFcnJvciBQYWNrZXQgICov Ci0KLWludAotZXJycGt0KHJlYXNvbikgQ0hBUiAqcmVhc29uOyB7CQkvKiAuLi5jb250YWluaW5n IHRoZSByZWFzb24gZ2l2ZW4gKi8KLSAgICBleHRlcm4gaW50IHJ0aW1vLCBzdGF0ZSwganVzdG9u ZTsKLSAgICBpbnQgeCwgeTsKLSAgICBjenNlZW4gPSAxOwkJCQkvKiBBbHNvIGNhbmNlbHMgYmF0 Y2ggKi8KLSAgICBzdGF0ZSA9IDA7CQkJCS8qIFJlc2V0IHByb3RvY29sIHN0YXRlICovCi0gICAg ZGVidWcoRjExMCwiZXJycGt0IixyZWFzb24sMCk7Ci0gICAgdGxvZyhGMTEwLCJQcm90b2NvbCBF cnJvcjoiLChjaGFyICopcmVhc29uLDBMKTsKLSAgICB4eHNjcmVlbihTQ1JfRU0sMCwwTCxyZWFz b24pOwotICAgIGVuY3N0cihyZWFzb24pOwotICAgIHggPSBzcGFjaygnRScscGt0bnVtLHNpemUs ZGF0YSk7Ci0gICAgY2tzdHJuY3B5KChjaGFyICopZXBrdG1zZywoY2hhciAqKXJlYXNvbixQS1RN U0dMRU4pOwotICAgIHkgPSBxdWlldDsgcXVpZXQgPSAxOyBlcGt0c2VudCA9IDE7CS8qIENsb3Nl IGZpbGVzIHNpbGVudGx5LiAqLwotICAgIGNsc2lmKCk7IGNsc29mKDEpOwotICAgIHF1aWV0ID0g eTsKLS8qCi0gIEkganVzdCBzZW50IGFuIEUtcGFja2V0LiAgSSdtIGluIGxvY2FsIG1vZGUsIEkg d2FzIHJlY2VpdmluZyBhIGZpbGUsCi0gIEknbSBub3QgYSBzZXJ2ZXIsIGFuZCBzbGlkaW5nIHdp bmRvd3MgYXJlIGluIHVzZS4gIFRoZXJlZm9yZSwgdGhlcmUgYXJlCi0gIGxpa2VseSB0byBiZSBh IGJ1bmNoIG9mIHBhY2tldHMgYWxyZWFkeSAiaW4gdGhlIHBpcGUiIG9uIHRoZWlyIHdheSB0byBt ZQotICBieSB0aGUgdGltZSB0aGUgcmVtb3RlIHNlbmRlciBnZXRzIHRoZSBFLXBhY2tldC4gIFNv IHRoZSBuZXh0IHRpbWUgSQotICBDT05ORUNUIG9yIHRyeSB0byBzdGFydCBhbm90aGVyIHByb3Rv Y29sIG9wZXJhdGlvbiwgSSBhbSBsaWtlbHkgdG8gYmVjb21lCi0gIHRlcnJpYmx5IGNvbmZ1c2Vk IGJ5IHRvcnJlbnRzIG9mIGluY29taW5nIG1hdGVyaWFsLiAgVG8gcHJldmVudCB0aGlzLAotICB0 aGUgZm9sbG93aW5nIGNvZGUgc29ha3MgdXAgcGFja2V0cyBmcm9tIHRoZSBjb25uZWN0aW9uIHVu dGlsIHRoZXJlIGlzIGFuCi0gIGVycm9yIG9yIHRpbWVvdXQsIHdpdGhvdXQgd2FzdGluZyB0b28g bXVjaCB0aW1lIHdhaXRpbmcuCi0KLSAgRXhhY3RseSB0aGUgc2FtZSBwcm9ibGVtIG9jY3VycyB3 aGVuIEkgYW0gaW4gcmVtb3RlIG1vZGUgb3IgaWYgSSBhbQotICBpbiBzZXJ2ZXIgbW9kZSB3aXRo IHRoZSBqdXN0b25lIGZsYWcgc2V0LiAgSW4gcmVtb3RlIG1vZGUgbm90IG9ubHkKLSAgZG9lcyB0 aGUgcGFja2V0IGRhdGEgcG90ZW50aWFsbHkgZ2V0IGVjaG8nZCBiYWNrIHRvIHRoZSBzZW5kZXIg d2hpY2gKLSAgaXMgY29uZnVzaW5nIHRvIHRoZSB1c2VyIGluIENPTk5FQ1QgbW9kZSwgYnV0IGl0 IGFsc28gbWF5IHJlc3VsdCBpbiB0aGUKLSAgaG9zdCBwZXJmb3JtaW5nIGJpemFycmUgYWN0aW9u cyBzdWNoIGFzIHN1c3BlbmRpbmcgdGhlIHByb2Nlc3MgaWYgXlogaXMKLSAgdW5wcmVmaXhlZCwg ZXRjLgotCi0gIEZ1cnRoZXJtb3JlLCB0aG91c2FuZHMgb2YgcGFja2V0cyBieXRlcyBpbiB0aGUg ZGF0YSBzdHJlYW0gcHJldmVudCB0aGUKLSAgY2xpZW50IGZyb20gYmVpbmcgYWJsZSB0byBwcm9j ZXNzIFRlbG5ldCBLZXJtaXQgT3B0aW9uIG5lZ290aWF0aW9ucwotICBwcm9wZXJseS4KLSovCi0j aWZkZWYgU1RSRUFNSU5HCi0gICAgLyogQmVjYXVzZSBzdHJlYW1pbmcgc2V0cyB0aGUgdGltZW91 dCB0byAwLi4uICovCi0gICAgaWYgKHN0cmVhbWluZykgewotCXRpbWludCA9IHJjdnRpbW8gPSBy dGltbzsKLQlzdHJlYW1pbmcgPSAwOwotICAgIH0KLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSAg ICBpZiAod2hhdCAmIFdfUkVDViAmJgotICAgICAgICAoIXNlcnZlciB8fCAoc2VydmVyICYmIGp1 c3RvbmUpKSAmJgotICAgICAgICAod3Nsb3RzID4gMQotI2lmZGVmIFNUUkVBTUlORwotCSB8fCBz dHJlYW1pbmcKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQkgKSkgewotI2lmZGVmIEdGVElNRVIK LQlDS0ZMT0FUIG9sZHNlYywgc2VjID0gKENLRkxPQVQpIDAuMDsKLSNlbHNlCi0JaW50IG9sZHNl Yywgc2VjID0gMDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0JZGVidWcoRjEwMSwiZXJycGt0IGRy YWluaW5nIiwiIix3c2xvdHMpOwotCXh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsIkRyYWluaW5n IGluY29taW5nIHBhY2tldHMsIHdhaXQuLi4iKTsKLQl3aGlsZSAoeCA+IC0xKSB7CQkvKiBEb24n dCBib3RoZXIgaWYgbm8gY29ubmVjdGlvbiAqLwotCSAgICBvbGRzZWMgPSBzZWM7Ci0jaWZkZWYg R0ZUSU1FUgotCSAgICBzZWMgPSBnZnRpbWVyKCk7Ci0JICAgIGlmIChvbGRzZWMgIT0gKENLRkxP QVQpIDAuMCkKLQkgICAgICB0aW1pbnQgPSByY3Z0aW1vID0gKGludCkgKHNlYyAtIG9sZHNlYyAr IDAuNSk7Ci0jZWxzZQotCSAgICBzZWMgPSBndGltZXIoKTsKLQkgICAgaWYgKG9sZHNlYyAhPSAw KQotCSAgICAgIHRpbWludCA9IHJjdnRpbW8gPSBzZWMgLSBvbGRzZWMgKyAxOwotI2VuZGlmIC8q IEdGVElNRVIgKi8KLQkgICAgaWYgKHRpbWludCA8IDEpCi0JICAgICAgdGltaW50ID0gcmN2dGlt byA9IDE7Ci0JICAgIG1zbGVlcCg1MCk7CQkJLyogQWxsb3cgYSBiaXQgb2Ygc2xvcCAqLwotCSAg ICB4ID0gcnBhY2soKTsJCS8qIFJlYWQgYSBwYWNrZXQgKi8KLQkgICAgaWYgKHggPT0gJ1QnIHx8 IHggPT0gJ3onKQkvKiBUaW1lZCBvdXQgbWVhbnMgd2UncmUgZG9uZSAqLwotCSAgICAgIGJyZWFr OwotCSAgICB4eHNjcmVlbihTQ1JfUFQseCxyc24sIiIpOwkvKiBMZXQgdXNlciBrbm93ICovCi0J fQotCXh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsIkRyYWluIGNvbXBsZXRlLiIpOwotICAgIH0K LSAgICBpZiAoKHggPSAod2hhdCAmIFdfS0VSTUlUKSkpCi0gICAgICB4aXRzdGEgfD0geDsJCQkv KiBSZW1lbWJlciB3aGF0IGZhaWxlZC4gKi8KLSAgICBzdWNjZXNzID0gMDsKLSAgICByZXR1cm4o eSk7Ci19Ci0KLS8qIHNjbWQoKSAgLS0gIFNlbmQgYSBwYWNrZXQgb2YgdGhlIGdpdmVuIHR5cGUg Ki8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXNjbWQoY2hhciB0LCBDSEFSICpkYXQpCi0jZWxz ZQotc2NtZCh0LGRhdCkgY2hhciB0OyBDSEFSICpkYXQ7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LS8qIHNjbWQgKi8gewotICAgIGludCB4OwotICAgIGV4dGVybiBjaGFyICogc3JpbXNnOwotICAg IGRlYnVnKEYwMDAsInNjbWQiLGRhdCx0KTsKLSAgICBpZiAoZW5jc3RyKGRhdCkgPCAwKSB7CQkv KiBFbmNvZGUgdGhlIGNvbW1hbmQgc3RyaW5nICovCi0Jc3JpbXNnID0gIlN0cmluZyB0b28gbG9u ZyI7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgeCA9IHNwYWNrKHQscGt0bnVtLHNpemUsZGF0 YSk7Ci0gICAgZGVidWcoRjEwMSwic2NtZCBzcGFjayIsIiIseCk7Ci0gICAgcmV0dXJuKHgpOwot fQotCi0vKiBDb21wb3NlIGFuZCBTZW5kIEdFVCBwYWNrZXQgKi8KLQotc3RydWN0IG9wa3RwYXJt IHsJCQkvKiBPLVBhY2tldCBpdGVtIGxpc3QgKi8KLSAgICBDSEFSICogb3BrdGl0ZW07Ci0gICAg c3RydWN0IG9wa3RwYXJtICogb3BrdG5leHQ7Ci19OwotCi1zdHJ1Y3Qgb3BrdHBhcm0gKiBvcGt0 aGVhZCA9IE5VTEw7CS8qIExpbmtlZCBsaXN0IG9mIE8tcGFja2V0IGZpZWxkcyAqLwotaW50IG9w a3RjbnQgPSAwOwkJCS8qIE8tUGFja2V0IGNvdW50ZXIgKi8KLWNoYXIgKiBzcmltc2cgPSBOVUxM OwkJCS8qIEdFVC1QYWNrZXQgZXJyb3IgbWVzc2FnZSAqLwotCi0vKiBTIE8gUCBLIFQgIC0tICBT ZW5kIE8tUGFja2V0ICovCi0vKgotICBTZW5kcyBvbmUgTy1QYWNrZXQgZWFjaCB0aW1lIGNhbGxl ZCwgdXNpbmcgZmlyc3QtZml0IG1ldGhvZCBvZiBmaWxsaW5nCi0gIHRoZSBwYWNrZXQgZnJvbSBs aW5rZWQgbGlzdCBvZiBwYXJhbWV0ZXJzIHBvaW50ZWQgdG8gYnkgb3BrdGhlYWQuCi0gIFRvIGJl IGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGxpc3QgaXMgZW1wdHkgb3IgdGhlcmUgaXMgYW4gZXJy b3IuCi0gIFJldHVybnM6Ci0gICAtMSBvbiBmYWlsdXJlLgotICAgIDAgb24gc3VjY2VzcyBhbmQg bm8gbW9yZSBmaWVsZHMgbGVmdCB0byBzZW5kLgotICAgIDEgb24gc3VjY2VzcyBidXQgd2l0aCBt b3JlIGZpZWxkcyBsZWZ0IHRvIGJlIHNlbnQuCi0qLwotCi1pbnQKLXNvcGt0KCkgewotICAgIGlu dCBuID0gMDsJCQkJLyogRmllbGQgbnVtYmVyIGluIHRoaXMgcGFja2V0ICovCi0gICAgaW50IHJj ID0gMDsJCQkJLyogUmV0dXJuIGNvZGUgKi8KLSAgICBpbnQgbGVuID0gMDsJCQkvKiBEYXRhIGZp ZWxkIGxlbmd0aCAqLwotICAgIGNoYXIgYyA9IE5VTDsKLSAgICBzdHJ1Y3Qgb3BrdHBhcm0gKiBv ID0gTlVMTDsKLSAgICBzdHJ1Y3Qgb3BrdHBhcm0gKiB0ID0gTlVMTDsKLSAgICBzdHJ1Y3Qgb3Br dHBhcm0gKiBwcmV2ID0gTlVMTDsKLSAgICBDSEFSICogZHNhdmUgPSBkYXRhOwotICAgIGludCB4 LCBzc2F2ZSA9IHNwc2l6OwotCi0gICAgc3JpbXNnID0gTlVMTDsJCQkvKiBFcnJvciBtZXNzYWdl ICovCi0gICAgbyA9IG9wa3RoZWFkOwkJCS8qIFBvaW50IHRvIGhlYWQgb2YgbGlzdCAqLwotICAg IGlmICghbykgewkJCQkvKiBPb3BzLCBubyBsaXN0Li4uICovCi0Jc3JpbXNnID0gIkdFVCBQYWNr ZXQgSW50ZXJuYWwgRXJyb3IgMSI7Ci0JZGVidWcoRjEwMCwic29wa3QgTlVMTCBsaXN0IiwiIiww KTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICB3aGlsZSAobykgewkJCQkvKiBHbyB0aHJ1IGxp bmtlZCBsaXN0Li4uICovCi0JYyA9ICooby0+b3BrdGl0ZW0pOwkJLyogUGFyYW1ldGVyIGNvZGUg Ki8KLQlkZWJ1ZyhGMDAwLCJzb3BrdCIsby0+b3BrdGl0ZW0sYyk7Ci0JeCA9IGVuY3N0cigoQ0hB UiAqKW8tPm9wa3RpdGVtKTsKLQlkZWJ1ZyhGMTExLCJzb3BrdCBlbmNzdHIiLGRzYXZlLHgpOwot CWlmICh4IDwgMCkgewkJCS8qIEVuY29kZSB0aGlzIGl0ZW0gKi8KLQkgICAgaWYgKG4gPT0gMCkg ewkJLyogRmFpbHVyZSwgZmlyc3QgZmllbGQgaW4gcGFja2V0ICovCi0JCWRlYnVnKEYxMDAsInNv cGt0IG92ZXJmbG93IiwiIiwwKTsKLQkJc3BzaXogPSBzc2F2ZTsJCS8qIFJlc3RvcmUgdGhlc2Ug Ki8KLQkJZGF0YSA9IGRzYXZlOwotCQlvID0gb3BrdGhlYWQ7CQkvKiBGcmVlIGxpbmtlZCBsaXN0 ICovCi0JCXdoaWxlIChvKSB7Ci0JCSAgICBpZiAoby0+b3BrdGl0ZW0pIGZyZWUoby0+b3BrdGl0 ZW0pOwotCQkgICAgdCA9IG8tPm9wa3RuZXh0OwotCQkgICAgZnJlZSgoY2hhciAqKW8pOwotCQkg ICAgbyA9IHQ7Ci0JCX0KLQkJb3BrdGhlYWQgPSBOVUxMOwotCQlzcmltc2cgPSAiR0VUIFBhY2tl dCBUb28gTG9uZyBmb3IgU2VydmVyIjsKLQkJcmV0dXJuKC0xKTsJCS8qIEZhaWwgKi8KLQkgICAg fSBlbHNlIHsJCQkvKiBOb3QgZmlyc3QgZmllbGQgaW4gcGFja2V0ICovCi0JCWRlYnVnKEYxMTAs InNvcGt0IGxlZnRvdmVyIixvLT5vcGt0aXRlbSwwKTsKLQkJcHJldiA9IG87CQkvKiBNYWtlIHRo aXMgb25lIHRoZSBuZXcgcHJldmlvdXMgKi8KLQkJbyA9IG8tPm9wa3RuZXh0OwkvKiBHZXQgbmV4 dCAqLwotCQljID0gTlVMOwkJLyogU28gd2Uga25vdyB3ZSdyZSBub3QgZG9uZSAqLwotCQkqZGF0 YSA9IE5VTDsJCS8qIEVyYXNlIGFueSBwYXJ0aWFsIGVuY29kaW5nICovCi0JCWNvbnRpbnVlOwkJ LyogV2UgY2FuIHRyeSB0aGlzIG9uZSBhZ2FpbiBsYXRlciAqLwotCSAgICB9Ci0JfQotCW4rKzsJ CQkJLyogRW5jb2Rpbmcgd2FzIHN1Y2Nlc3NmdWwgKi8KLQlkZWJ1ZyhGMTExLCJzb3BrdCBmaWVs ZCIsZGF0YSx4KTsKLQlsZW4gKz0geDsJCQkvKiBUb3RhbCBkYXRhIGZpZWxkIGxlbmd0aCAqLwot CWRhdGEgKz0geDsJCQkvKiBTZXQgdXAgZm9yIG5leHQgZmllbGQuLi4gKi8KLQlzcHNpeiAtPSB4 OwotCWZyZWUoby0+b3BrdGl0ZW0pOwkJLyogRnJlZSBpdGVtIGp1c3QgZW5jb2RlZCAqLwotCWlm IChvID09IG9wa3RoZWFkKSB7CQkvKiBJZiBoZWFkICovCi0JICAgIG9wa3RoZWFkID0gby0+b3Br dG5leHQ7CS8qIE1vdmUgaGVhZCB0byBuZXh0ICovCi0JICAgIGZyZWUoKGNoYXIgKilvKTsJCS8q IEZyZWUgdGhpcyBsaXN0IG5vZGUgKi8KLQkgICAgbyA9IG9wa3RoZWFkOwotCX0gZWxzZSB7CQkJ LyogSWYgbm90IGhlYWQgKi8KLQkgICAgbyA9IG8tPm9wa3RuZXh0OwkJLyogR2V0IG5leHQgKi8K LQkgICAgcHJldi0+b3BrdG5leHQgPSBvOwkJLyogTGluayBwcmV2aW91cyB0byBuZXh0ICovCi0J fQotCWlmIChjID09ICdAJykJCQkvKiBMb29wIGV4aXQgKi8KLQkgIGJyZWFrOwotCWlmICghbyAm JiAhb3BrdGhlYWQpIHsJCS8qIFNldCB1cCBFbmQgT2YgUGFyYW1ldGVycyBGaWVsZCAqLwotCSAg ICBvID0gKHN0cnVjdCBvcGt0cGFybSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG9wa3RwYXJtKSk7 Ci0JICAgIGlmIChvKSB7Ci0JCW9wa3RoZWFkID0gbzsKLQkJaWYgKCEoby0+b3BrdGl0ZW0gPSAo Q0hBUiAqKW1hbGxvYygzKSkpIHsKLQkJICAgIGZyZWUoKGNoYXIgKilvKTsKLQkJICAgIHNyaW1z ZyA9ICJHRVQgUGFja2V0IEludGVybmFsIEVycm9yIDgiOwotCQkgICAgcmV0dXJuKC0xKTsKLQkJ fQotCQlja3N0cm5jcHkoKGNoYXIgKikoby0+b3BrdGl0ZW0pLCAiQCAiLCAzKTsKLQkJZGVidWco RjExMSwic29wa3Qgby0+b3BrdGl0ZW0iLG8tPm9wa3RpdGVtLAotCQkgICAgICBzdHJsZW4oKGNo YXIgKikoby0+b3BrdGl0ZW0pKSk7Ci0JCW8tPm9wa3RuZXh0ID0gTlVMTDsKLQkgICAgfQotCX0K LSAgICB9Ci0gICAgZGF0YSA9IGRzYXZlOwkJCS8qIFJlc3RvcmUgZ2xvYmFscyAqLwotICAgIHNw c2l6ID0gc3NhdmU7Ci0gICAgZGVidWcoRjExMCwic29wa3QgZGF0YSIsZGF0YSwwKTsKLSAgICBk ZWJ1ZyhGMTAxLCJzb3BrdCBvcGt0Y250IiwiIixvcGt0Y250KTsKLSAgICBpZiAob3BrdGNudCsr ID4gMCkgewotCWlmIChueHRwa3QoKSA8IDApIHsJCS8qIEdldCBuZXh0IHBhY2tldCBudW1iZXIg YW5kIGJ1ZmZlciAqLwotCSAgICBzcmltc2cgPSAiR0VUIFBhY2tldCBJbnRlcm5hbCBFcnJvciA5 IjsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInNvcGt0IHBr dG51bSIsIiIscGt0bnVtKTsKLSAgICByYyA9IHNwYWNrKChjaGFyKSdPJyxwa3RudW0sbGVuLGRh dGEpOyAvKiBTZW5kIE8tUGFja2V0ICovCi0gICAgZGVidWcoRjEwMSwic29wa3Qgc3BhY2siLCIi LHJjKTsKLSAgICBpZiAocmMgPCAwKQkJCQkvKiBGYWlsZWQgKi8KLSAgICAgIHNyaW1zZyA9ICJT ZW5kIFBhY2tldCBGYWlsdXJlIjsJLyogU2V0IG1lc3NhZ2UgKi8KLSAgICBlbHNlCQkJCS8qIFN1 Y2NlZWRlZCAqLwotICAgICAgcmMgPSAoYyA9PSAnQCcpID8gMCA6IDE7CQkvKiAxID0gY29tZSBi YWNrIGZvciBtb3JlLCAwID0gZG9uZSAqLwotICAgIGRlYnVnKEYxMDEsInNvcGt0IHJjIiwiIixy Yyk7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotLyogUyBSIEkgTiBJIFQgIC0tICBTZW5kIEdFVCBw YWNrZXQgICovCi0vKgotICBTZW5kcyB0aGUgYXBwcm9wcmlhdGUgR0VULUNsYXNzIHBhY2tldC4K LSAgUmV0dXJuczoKLSAgLTEgb24gZXJyb3IKLSAgIDAgaWYgcGFja2V0IHNlbnQgc3VjY2Vzc2Z1 bGx5IGFuZCB3ZSBjYW4gbW92ZSBvbiB0byB0aGUgbmV4dCBzdGF0ZQotICAgMSBpZiBhbiBPLXBh Y2tldCB3YXMgc2VudCBPSyBidXQgbW9yZSBPIHBhY2tldHMgc3RpbGwgbmVlZCB0byBiZSBzZW50 LgotKi8KLWludAotc3Jpbml0KHJlZ2V0LCByZXRyaWV2ZSwgb3BrdCkgaW50IHJlZ2V0LCByZXRy aWV2ZSwgb3BrdDsgewotICAgIGludCB4ID0gMCwgbGVmdCA9IDA7Ci0gICAgZXh0ZXJuIGludCBv b3B0cywgb21vZGU7Ci0gICAgQ0hBUiAqIHAgPSBOVUxMOwotI2lmZGVmIFJFQ1VSU0lWRQotICAg IGV4dGVybiBpbnQgcmVjdXJzaXZlOwotICAgIGRlYnVnKEYxMDEsInNyaW5pdCByZWN1cnNpdmUi LCIiLHJlY3Vyc2l2ZSk7Ci0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0gICAgZGVidWcoRjEwMSwi c3Jpbml0IHJlZ2V0IiwiIixyZWdldCk7Ci0gICAgZGVidWcoRjEwMSwic3Jpbml0IHJldHJpZXZl IiwiIixyZXRyaWV2ZSk7Ci0gICAgZGVidWcoRjEwMSwic3Jpbml0IG9wa3QiLCIiLG9wa3QpOwot ICAgIGRlYnVnKEYxMDEsInNyaW5pdCBvb3B0cyIsIiIsb29wdHMpOwotICAgIGRlYnVnKEYxMDEs InNyaW5pdCBvbW9kZSIsIiIsb21vZGUpOwotICAgIGRlYnVnKEYxMTAsInNyaW5pdCBjbWFyZyIs Y21hcmcsMCk7Ci0gICAgc3JpbXNnID0gTlVMTDsKLQotICAgIG9wa3RjbnQgPSAwOwotICAgIGlm ICghY21hcmcpIGNtYXJnID0gIiI7Ci0gICAgaWYgKCEqY21hcmcpIHsKLQlzcmltc2cgPSAiR0VU IHdpdGggbm8gZmlsZW5hbWUiOwotCWRlYnVnKEYxMDAsInNyaW5pdCBudWxsIGNtYXJnIiwiIiww KTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAob3BrdCkgewkJCQkvKiBFeHRlbmRlZCBH RVQgaXMgdG90YWxseSBkaWZmZXJlbnQgKi8KLQljaGFyIGJ1ZlsxNl07Ci0Jc3RydWN0IG9wa3Rw YXJtICogbyA9IE5VTEw7Ci0Jc3RydWN0IG9wa3RwYXJtICogcHJldiA9IE5VTEw7Ci0KLSAgICAg ICAgYnVmWzBdID0gTlVMOwotCi0JLyogQnVpbGQgTy1QYWNrZXQgZmllbGRzIGFuZCBzZW5kIChw ZXJoYXBzIGZpcnN0KSBPLVBhY2tldCAqLwotCi0JaWYgKG9vcHRzID4gLTEpIHsJCS8qIFdyaXRl IE9wdGlvbiBmbGFncyAqLwotCSAgICBvID0gKHN0cnVjdCBvcGt0cGFybSAqKW1hbGxvYyhzaXpl b2Yoc3RydWN0IG9wa3RwYXJtKSk7Ci0JICAgIGlmICghbykgewotCQlzcmltc2cgPSAiR0VUIFBh Y2tldCBJbnRlcm5hbCBFcnJvciAyIjsKLQkJZGVidWcoRjEwMCwic3Jpbml0IG1hbGxvYyBmYWls IE8xIiwiIiwwKTsKLQkJcmV0dXJuKC0xKTsKLQkgICAgfQotCSAgICBzcHJpbnRmKGJ1ZiwiT3gl ZCIsb29wdHMpOwkvKiBzYWZlICovCi0JICAgIHggPSAoaW50KSBzdHJsZW4oYnVmKzIpOwotCSAg ICBidWZbMV0gPSB0b2NoYXIoeCk7Ci0JICAgIG8tPm9wa3RpdGVtID0gKENIQVIgKiltYWxsb2Mo eCArIDMpOwotCSAgICBpZiAoIW8tPm9wa3RpdGVtKSB7Ci0JCXNyaW1zZyA9ICJHRVQgUGFja2V0 IEludGVybmFsIEVycm9yIDMiOwotCQlkZWJ1ZyhGMTAwLCJzcmluaXQgbWFsbG9jIGZhaWwgTzIi LCIiLDApOwotCQlyZXR1cm4oLTEpOwotCSAgICB9Ci0JICAgIGNrc3RybmNweSgoY2hhciAqKShv LT5vcGt0aXRlbSksYnVmLHgrMyk7Ci0JICAgIG8tPm9wa3RuZXh0ID0gTlVMTDsKLQkgICAgaWYg KCFvcGt0aGVhZCkKLQkgICAgICBvcGt0aGVhZCA9IG87Ci0JICAgIHByZXYgPSBvOwotCX0KLQlp ZiAob21vZGUgPiAtMSkgewkJLyogSWYgWGZlciBNb2RlIHNwZWNpZmllZCwgd3JpdGUgaXQgKi8K LQkgICAgbyA9IChzdHJ1Y3Qgb3BrdHBhcm0gKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBvcGt0cGFy bSkpOwotCSAgICBpZiAoIW8pIHsKLQkJc3JpbXNnID0gIkdFVCBQYWNrZXQgSW50ZXJuYWwgRXJy b3IgNCI7Ci0JCWRlYnVnKEYxMDAsInNyaW5pdCBtYWxsb2MgZmFpbCBNMSIsIiIsMCk7Ci0JCXJl dHVybigtMSk7Ci0JICAgIH0KLQkgICAgc3ByaW50ZihidWYsIk14JWQiLG9tb2RlKTsJLyogc2Fm ZSAqLwotCSAgICB4ID0gKGludCkgc3RybGVuKGJ1ZisyKTsKLQkgICAgYnVmWzFdID0gdG9jaGFy KHgpOwotCSAgICBvLT5vcGt0aXRlbSA9IChDSEFSICopbWFsbG9jKHggKyAzKTsKLQkgICAgaWYg KCFvLT5vcGt0aXRlbSkgewotCQlzcmltc2cgPSAiR0VUIFBhY2tldCBJbnRlcm5hbCBFcnJvciA1 IjsKLQkJZGVidWcoRjEwMCwic3Jpbml0IG1hbGxvYyBmYWlsIE8yIiwiIiwwKTsKLQkJcmV0dXJu KC0xKTsKLQkgICAgfQotCSAgICBja3N0cm5jcHkoKGNoYXIgKikoby0+b3BrdGl0ZW0pLGJ1Zix4 KzMpOwotCSAgICBvLT5vcGt0bmV4dCA9IE5VTEw7Ci0JICAgIGlmICghb3BrdGhlYWQpCi0JICAg ICAgb3BrdGhlYWQgPSBvOwotCSAgICBlbHNlCi0JICAgICAgcHJldi0+b3BrdG5leHQgPSBvOwot CSAgICBwcmV2ID0gbzsKLQl9Ci0KLQkvKiBTYW1lIGRlYWwgZm9yIG9uYW1lIGFuZCBvcGF0aCBl dmVudHVhbGx5IGJ1dCBub3QgbmVlZGVkIG5vdy4uLiAqLwotCi0JeCA9IHN0cmxlbihjbWFyZyk7 CQkvKiBOb3cgZG8gZmlsZW5hbWUgKi8KLQlpZiAoeCA+IHNwc2l6IC0gNCkgewotCSAgICBzcmlt c2cgPSAiR0VUIFBhY2tldCBUb28gTG9uZyBmb3IgU2VydmVyIjsKLQkgICAgcmV0dXJuKC0xKTsK LQl9Ci0JbyA9IChzdHJ1Y3Qgb3BrdHBhcm0gKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBvcGt0cGFy bSkpOwotCWlmICghbykgewotCSAgICBzcmltc2cgPSAiR0VUIFBhY2tldCBJbnRlcm5hbCBFcnJv ciA2IjsKLQkgICAgZGVidWcoRjEwMCwic3Jpbml0IG1hbGxvYyBmYWlsIEYxIiwiIiwwKTsKLQkg ICAgcmV0dXJuKC0xKTsKLQl9Ci0JbGVmdCA9IHggKyA2OwotCW8tPm9wa3RpdGVtID0gKENIQVIg KiltYWxsb2MobGVmdCArIDEpOwotCWlmICghby0+b3BrdGl0ZW0pIHsKLQkgICAgc3JpbXNnID0g IkdFVCBQYWNrZXQgSW50ZXJuYWwgRXJyb3IgNyI7Ci0JICAgIGRlYnVnKEYxMDAsInNyaW5pdCBt YWxsb2MgZmFpbCBGMiIsIiIsMCk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotCXAgPSBvLT5vcGt0 aXRlbTsKLQkqcCsrID0gJ0YnOwotCWxlZnQtLTsKLQlpZiAoeCA+IDk0KSB7CQkJLyogVG9vIGxv bmcgZm9yIG5vcm1hbCBsZW5ndGggKi8KLQkgICAgKnArKyA9IFNZTjsJCQkvKiBFc2NhcGUgbGVu Z3RoIHdpdGggQ3RybC1WICovCi0JICAgICpwKysgPSB0b2NoYXIoeCAvIDk1KTsKLQkgICAgKnAr KyA9IHRvY2hhcih4ICUgOTUpOwotCSAgICBsZWZ0IC09IDM7Ci0JfSBlbHNlIHsJCQkvKiBOb3Jt YWwgZW5jb2RpbmcgZm9yIDk0IG9yIGxlc3MgKi8KLQkgICAgKnArKyA9IHRvY2hhcih4KTsKLQkg ICAgbGVmdC0tOwotCX0KLQlja3N0cm5jcHkoKGNoYXIgKilwLGNtYXJnLGxlZnQpOyAvKiBDb3B5 IHRoZSBmaWxlbmFtZSAqLwotCW8tPm9wa3RuZXh0ID0gTlVMTDsKLQlpZiAoIW9wa3RoZWFkKQot CSAgb3BrdGhlYWQgPSBvOwotCWVsc2UKLQkgIHByZXYtPm9wa3RuZXh0ID0gbzsKLQlwcmV2ID0g bzsKLQotCS8qIEVuZCBvZiBQYXJhbWV0ZXJzICovCi0KLQlwcmV2LT5vcGt0bmV4dCA9IE5VTEw7 CQkvKiBFbmQgb2YgbGlzdC4gKi8KLQlyZXR1cm4oc29wa3QoKSk7Ci0gICAgfQotCi0gICAgLyog Tm90IEV4dGVuZGVkIEdFVCAqLwotCi0gICAgaWYgKGVuY3N0cigoQ0hBUiAqKWNtYXJnKSA8IDAp IHsJLyogRW5jb2RlIHRoZSBmaWxlbmFtZS4gKi8KLQlzcmltc2cgPSAiR0VUIFBhY2tldCBUb28g TG9uZyBmb3IgU2VydmVyIjsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAocmV0cmlldmUp IHsJCQkvKiBTZW5kIHRoZSBwYWNrZXQuICovCi0jaWZkZWYgUkVDVVJTSVZFCi0JaWYgKHJlY3Vy c2l2ZSkKLQkgIHggPSBzcGFjaygoY2hhciknVycscGt0bnVtLHNpemUsZGF0YSk7IC8qIEdFVCAv REVMRVRFIC9SRUNVUlNJVkUgKi8KLQllbHNlCi0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0JICB4 ID0gc3BhY2soKGNoYXIpJ0gnLHBrdG51bSxzaXplLGRhdGEpOyAvKiBHRVQgL0RFTEVURSAqLwot ICAgIH0KLSNpZmRlZiBSRUNVUlNJVkUKLSAgICBlbHNlIGlmIChyZWN1cnNpdmUpCi0gICAgICB4 ID0gc3BhY2soKGNoYXIpJ1YnLHBrdG51bSxzaXplLGRhdGEpOyAvKiBHRVQgL1JFQ1VSU0lWRSAq LwotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgIGVsc2UKLSAgICAgIHggPSBzcGFjaygoY2hh cikocmVnZXQgPyAnSicgOiAnUicpLHBrdG51bSxzaXplLGRhdGEpOyAvKiBHRVQgKi8KLSAgICBp ZiAoeCA8IDApCi0gICAgICBzcmltc2cgPSAiU2VuZCBQYWNrZXQgRmFpbHVyZSI7Ci0gICAgcmV0 dXJuKHggPCAwID8geCA6IDApOwotfQotCi0KLS8qICBLIFMgVCBBIFIgVCAgLS0gIENoZWNrcyBm b3IgYSBLZXJtaXQgcGFja2V0IHdoaWxlIGluIHRlcm1pbmFsIG1vZGUuICAqLwotCi0vKiAgKG9y IGNvbW1hbmQgbW9kZS4uLikgICovCi0KLSNpZmRlZiBDS19BVVRPREwKLWludAotI2lmZGVmIENL X0FOU0lDCi1rc3RhcnQoQ0hBUiBjaCkKLSNlbHNlCi1rc3RhcnQoY2gpIENIQVIgY2g7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLS8qIGtzdGFydCAqLyB7Ci0gICAgc3RhdGljIENIQVIgKiBwID0g TlVMTDsKLQotI2lmZGVmIE9TMgotICAgIHN0YXRpYyBDSEFSICogcGsgPSBOVUxMOwotI2VuZGlm IC8qIE9TMiAqLwotICAgIGNoICY9IDAxNzc7CQkJCS8qIFN0cmlwIDh0aCBiaXQgKi8KLQotICAg IC8qIEJlY2F1c2Ugd2UncmUgaW4gY29va2VkIG1vZGUgYXQgdGhlIGNvbW1hbmQgcHJvbXB0Li4u ICovCi0KLSAgICBpZiAoY2ggPT0gTEYpIHsKLQlkZWJ1ZyhGMTEwLCJrc3RhcnQiLCJjaCA9PSBM RiIsMCk7Ci0JaWYgKCh3aGF0ID09IFdfQ09NTUFORCB8fCB3aGF0ID09IFdfSU5JVCB8fCB3aGF0 ID09IFdfTk9USElORykpIHsKLQkgICAgaWYgKGVvbCA9PSBDUikgewotCQljaCA9IGVvbDsKLQkJ ZGVidWcoRjExMCwia3N0YXJ0IiwiY2ggPSBDUiIsMCk7Ci0JICAgIH0KLQl9Ci0gICAgfQotCi0j aWZkZWYgT1MyCi0gICAgaWYgKGFkbF9rbW9kZSA9PSBBRExfU1RSKSB7Ci0JaWYgKCFjaCkKLQkg IHJldHVybigwKTsKLQlpZiAoIXBrKQotCSAgcGsgPSBhZGxfa3N0cjsKLQotCWlmIChjaCA9PSAq cGspIHsKLQkgICAgcGsrKzsKLQkgICAgaWYgKCpwayA9PSAnXDAnKSB7Ci0JCXBrID0gYWRsX2tz dHI7Ci0JCWRlYnVnKEYxMDAsICJrc3RhcnQgS2VybWl0IFN0YXJ0IFN0cmluZyIsIiIsMCk7Ci0J CXJldHVybihQUk9UT19LICsgMSk7Ci0JICAgIH0KLQl9IGVsc2UKLQkgIHBrID0gYWRsX2tzdHI7 Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKGNoID09IHN0Y2hyKSB7CQkJLyog U3RhcnQgb2YgcGFja2V0ICovCi0Ja3N0YXJ0YWN0aXZlID0gMTsKLQlwID0ga3NidWY7Ci0JKnAg PSBjaDsKLQlkZWJ1ZyhGMTAxLCJrc3RhcnQgU09QIiwiIixjaCk7Ci0gICAgfSBlbHNlIGlmIChj aCA9PSBlb2wpIHsJCS8qIEVuZCBvZiBwYWNrZXQgKi8KLQlrc3RhcnRhY3RpdmUgPSAwOwotCWlm IChwKSB7Ci0JICAgIGRlYnVnKEYxMDEsImtzdGFydCBFT0wiLCIiLGNoKTsKLQkgICAgcCsrOwot CSAgICBpZiAocCAtIGtzYnVmIDwgOTQgKSB7Ci0JCWludCByYyA9IDA7Ci0JCSpwKysgPSBjaDsK LQkJKnAgPSBOVUw7Ci0JCXJjID0gY2hrc3BrdCgoY2hhciAqKWtzYnVmKTsKLQkJZGVidWcoRjEx MSwia3N0YXJ0IEVPUCBjaGtzcGt0Iiwga3NidWYsIHJjKTsKLQkJcCA9IE5VTEw7Ci0JCWlmICgh cmMpIHJldHVybigwKTsKLQkJaWYgKHJjID09IDIpIHJjID0gLTE7Ci0JCWRlYnVnKEYxMTEsImtz dGFydCBrc2J1ZiIsa3NidWYscmMpOwotCQlyZXR1cm4ocmMpOwotCSAgICB9IGVsc2UgewotCQlk ZWJ1ZyhGMTEwLCJrc3RhcnQiLCJwIC0ga3NidWYgPj0gOTQiLDApOwotCQlwID0gTlVMTDsKLQkg ICAgfQotCX0KLSAgICB9IGVsc2UgaWYgKHApIHsKLQlpZiAoY2ggPCBTUCkKLQkgIGtzdGFydGFj dGl2ZSA9IDA7Ci0JcCsrOwotCWlmIChwIC0ga3NidWYgPCA5NCkgewotCSAgICAqcCA9IGNoOwot CX0gZWxzZSB7Ci0JICAgIHAgPSBOVUxMOwotCSAgICBkZWJ1ZyhGMTEwLCJrc3RhcnQiLCJwIC0g a3NidWYgPj0gOTQiLDApOwotCX0KLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0jaWZkZWYg Q0tfWFlaCi0KLS8qICBaIFMgVCBBIFIgVCAgLS0gIENoZWNrcyBmb3IgYSBaTU9ERU0gcGFja2V0 IHdoaWxlIGluIHRlcm1pbmFsIG1vZGUuICAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotenN0 YXJ0KENIQVIgY2gpCi0jZWxzZQotenN0YXJ0KGNoKSBDSEFSIGNoOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi0vKiB6c3RhcnQgKi8gewotICAgIHN0YXRpYyBDSEFSICogbWF0Y2hzdHIgPSAoQ0hB UiAqKSAiXDAzMEIwMCI7Ci0gICAgLyogInJ6XHIqKlwwMzBCMDAwMDAwMDAwMDAwMDBcclwwMzNK XDAyMSI7ICovCi0gICAgc3RhdGljIENIQVIgKiBwID0gTlVMTDsKLSAgICBleHRlcm4gaW50IGlu c2VydmVyOwotCi0gICAgaWYgKGluc2VydmVyKQotICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYg KCFjaCkKLSAgICAgIHJldHVybigwKTsKLSAgICBpZiAoIXApIHsKLSNpZmRlZiBPUzIKLQlwID0g YWRsX3ptb2RlID09IEFETF9QQUNLID8gbWF0Y2hzdHIgOiBhZGxfenN0cjsKLSNlbHNlCi0JcCA9 IG1hdGNoc3RyOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLSAgICBpZiAoY2ggPT0gKnApIHsK LQlwKys7Ci0JaWYgKCpwID09ICdcMCcpIHsKLSNpZmRlZiBPUzIKLQkgICAgaWYgKGFkbF96bW9k ZSA9PSBBRExfUEFDSykgewotCQlwID0gbWF0Y2hzdHI7Ci0JCWRlYnVnKEYxMDAsICJ6c3RhcnQg Wm1vZGVtIFNPUCIsIiIsMCk7Ci0JICAgIH0gZWxzZSB7Ci0JCXAgPSBhZGxfenN0cjsKLQkJZGVi dWcoRjEwMCwgInpzdGFydCBabW9kZW0gU3RhcnQgU3RyaW5nIiwiIiwwKTsKLQkgICAgfQotI2Vs c2UKLQkgICAgcCA9IG1hdGNoc3RyOwotCSAgICBkZWJ1ZyhGMTAwLCAienN0YXJ0IFptb2RlbSBT T1AiLCIiLDApOwotI2VuZGlmIC8qIE9TMiAqLwotCSAgICByZXR1cm4oUFJPVE9fWiArIDEpOwot CX0KLSAgICB9IGVsc2UgewotI2lmZGVmIE9TMgotCXAgPSBhZGxfem1vZGUgPT0gQURMX1BBQ0sg PyBtYXRjaHN0ciA6IGFkbF96c3RyOwotI2Vsc2UKLQlwID0gbWF0Y2hzdHI7Ci0jZW5kaWYgLyog T1MyICovCi0gICAgfQotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBDS19YWVogKi8KLQot I2lmbmRlZiBOT0lDUAotI2lmZGVmIENLX0FQQwotLyogIEEgVSBUIE8gRCBPIFcgTiAgKi8KLQot I2lmZGVmIENLX0FOU0lDCi1WT0lECi1hdXRvZG93bihpbnQgY2gpCi0jZWxzZQotVk9JRAotYXV0 b2Rvd24oY2gpIGludCBjaDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogYXV0b2Rvd24gKi8g ewotCi0vKiBUaGUgS2VybWl0IGFuZCBabW9kZW0gQXV0by1kb3dubG9hZCBjYWxscyBnbyBoZXJl ICovCi0KLSAgICBleHRlcm4gaW50IGp1c3RvbmU7CQkJLyogRnJvbSBwcm90b2NvbCBtb2R1bGUg Ki8KLSAgICBleHRlcm4gaW50IGRlYnNlcywgcHJvdG9jb2wsIGFwY2FjdGl2ZSwgYXV0b2RsLCBp bmF1dG9kbDsKLSNpZmRlZiBEQ01EQlVGCi0gICAgZXh0ZXJuIGNoYXIgKmFwY2J1ZjsKLSNlbHNl Ci0gICAgZXh0ZXJuIGNoYXIgYXBjYnVmW107Ci0jZW5kaWYgLyogRENNREJVRiAqLwotI2lmZGVm IE9TMgotICAgIGV4dGVybiBpbnQgYXBjbGVuZ3RoLCB0ZXJtX2lvOwotI2VuZGlmIC8qIE9TMiAq LwotICAgIGludCBrID0gMDsKLQotICAgIGlmICgoYXV0b2RsIHx8IGluYXV0b2RsCi0jaWZkZWYg SUtTX09QVElPTgotCSB8fCBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0 Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotCSApICYmICFkZWJzZXMpIHsKLSNpZmRlZiBDS19Y WVoKLSNpZmRlZiBYWVpfSU5URVJOQUwKLQlleHRlcm4gaW50IHBfYXZhaWw7Ci0jZWxzZQotCWlu dCBwX2F2YWlsID0gMTsKLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KLQlpZiAocF9hdmFpbCAm JiB6c3RhcnQoKENIQVIpIGNoKSkgewotCSAgICBkZWJ1ZyhGMTAwLCAiWm1vZGVtIGRvd25sb2Fk IiwiIiwwKTsKLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9URVJNCi0gICAgICAgICAgICBhcGNfY29t bWFuZChBUENfTE9DQUwsInJlY2VpdmUgL3Byb3RvY29sOnptb2RlbSIpOwotI2VuZGlmIC8qIE5P VEVSTSAqLwotI2Vsc2UgLyogT1MyICovCi0gICAgICAgICAgICBja3N0cm5jcHkoYXBjYnVmLCJy ZWNlaXZlIC9wcm90b2NvbDp6bW9kZW0iLEFQQ0JVRkxFTik7Ci0JICAgIGFwY2FjdGl2ZSA9IEFQ Q19MT0NBTDsKLSNlbmRpZiAvKiBPUzIgKi8KLQkgICAgcmV0dXJuOwotCX0KLSNlbmRpZiAvKiBD S19YWVogKi8KLQotCS8qIEZpcnN0IHRyeS4uLiAqLwotCWsgPSBrc3RhcnQoKENIQVIpIGNoKTsK LQlpZiAoCi0jaWZkZWYgTk9TRVJWRVIKLQkgICAgayA+IDAKLSNlbHNlIC8qIE5PU0VSVkVSICov Ci0JICAgIGsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCSAgICApIHsJCQkJLyogV2Ugc2F3IGEg dmFsaWQgUyBvciBJIHBhY2tldCAqLwotCSAgICBpZiAoayA8IDApIHsJCS8qIFN0dWZmIFJFQ0VJ VkUgaW50byBBUEMgYnVmZmVyICovCi0JCWp1c3RvbmUgPSAxOwotCQlzd2l0Y2ggKHByb3RvY29s KSB7Ci0jaWZkZWYgQ0tfWFlaCi0JCSAgY2FzZSBQUk9UT19HOgotCQkgICAgY2tzdHJuY3B5KGFw Y2J1ZiwKLQkJCSAgICAgICJzZXQgcHJvdG8ga2VybWl0LCBzZXJ2ZXIsIHNldCBwcm90b2NvbCBn IiwKLQkJCSAgICAgIEFQQ0JVRkxFTgotCQkJICAgICAgKTsKLQkJICAgIGJyZWFrOwotCQkgIGNh c2UgUFJPVE9fWDoKLQkJICAgIGNrc3RybmNweShhcGNidWYsCi0JCQkgICAgICAic2V0IHByb3Rv IGtlcm1pdCxzZXJ2ZXIsc2V0IHByb3RvIHhtb2RlbSIsCi0JCQkgICAgICBBUENCVUZMRU4KLQkJ CSAgICAgICk7Ci0JCSAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgUFJPVE9fWEM6 Ci0JCSAgICBja3N0cm5jcHkoYXBjYnVmLAotCQkJICAgInNldCBwcm90byBrZXJtaXQsc2VydmVy LHNldCBwcm90byB4bW9kZW0tY3JjIiwKLQkJCSAgICAgIEFQQ0JVRkxFTgotCQkJICAgICAgKTsK LSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJICBjYXNlIFBST1RPX1k6Ci0JCSAgICBj a3N0cm5jcHkoYXBjYnVmLAotCQkJICAgICAgInNldCBwcm90byBrZXJtaXQsc2VydmVyLCBzZXQg cHJvdG9jb2wgeSIsCi0JCQkgICAgICBBUENCVUZMRU4KLQkJCSAgICAgICk7Ci0JCSAgICBicmVh azsKLQkJICBjYXNlIFBST1RPX1o6Ci0JCSAgICBja3N0cm5jcHkoYXBjYnVmLAotCQkJICAgICAg InNldCBwcm90byBrZXJtaXQsc2VydmVyLHNldCBwcm90byB6bW9kZW0iLAotCQkJICAgICAgQVBD QlVGTEVOCi0JCQkgICAgICApOwotCQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0J CSAgY2FzZSBQUk9UT19LOgotCQkgICAgY2tzdHJuY3B5KGFwY2J1Ziwic2VydmVyIixBUENCVUZM RU4pOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkgICAgfSBlbHNlIHsKLQkJanVzdG9uZSA9IDA7Ci0g ICAgICAgICAgICAgICAgY2tzdHJuY3B5KGFwY2J1ZiwicmVjZWl2ZSAvcHJvdG9jb2w6a2VybWl0 IixBUENCVUZMRU4pOwotCSAgICB9Ci0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PVEVSTQotICAgICAg ICAgICAgYXBjX2NvbW1hbmQoQVBDX0xPQ0FMLGFwY2J1Zik7Ci0jZW5kaWYgLyogTk9URVJNICov Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgICAgIGNrc3RybmNweShhcGNidWYsInJlY2VpdmUg L3Byb3RvY29sOnptb2RlbSIsQVBDQlVGTEVOKTsKLQkgICAgYXBjYWN0aXZlID0gQVBDX0xPQ0FM OwotI2VuZGlmIC8qIE9TMiAqLwotCSAgICByZXR1cm47Ci0JfQotICAgIH0KLX0KLSNlbmRpZiAv KiBDS19BUEMgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0vKiAgQyBIIEsgUyBQIEsgVCAgLS0g IENoZWNrIGlmIGJ1ZiBjb250YWlucyBhIHZhbGlkIFMgb3IgSSBwYWNrZXQgICovCi0KLWludAot Y2hrc3BrdChwYWNrZXQpIGNoYXIgKnBhY2tldDsgewotICAgIGludCBpOwotICAgIGludCBidWZs ZW47Ci0gICAgaW50IGxlbiA9IC0xOwotICAgIENIQVIgY2hrOwotICAgIGNoYXIgdHlwZSA9IDA7 Ci0gICAgY2hhciAqcyA9IE5VTEw7Ci0gICAgY2hhciAqYnVmID0gTlVMTDsKLSAgICBjaGFyIHRt cGJ1ZlsxMDBdOwkJCS8qIExvbmdlc3QgUy9JIHBhY2tldCBpcyBhYm91dCAzMCAqLwotCi0gICAg aWYgKCFwYWNrZXQpIHJldHVybigwKTsKLSAgICBidWZsZW4gPSBja3N0cm5jcHkodG1wYnVmLHBh Y2tldCwxMDApOyAvKiBNYWtlIGEgcG9rZWFibGUgY29weSAqLwotICAgIGlmIChidWZsZW4gPCA1 KSByZXR1cm4oMCk7CQkvKiBUb28gc2hvcnQgKi8KLSAgICBpZiAoYnVmbGVuID4gMTAwKSByZXR1 cm4oMCk7IAkvKiBUb28gbG9uZyB0byBiZSBhbiBTIG9yIEkgcGFja2V0ICovCi0gICAgcyA9IGJ1 ZiA9IHRtcGJ1ZjsJCQkvKiBQb2ludCB0byBiZWdpbm5pbmcgb2YgY29weSAqLwotCi0gICAgaWYg KCpzKysgIT0gc3RjaHIpIHJldHVybigwKTsJLyogU09IICovCi0gICAgbGVuID0geHVuY2hhcigq cysrKTsJCS8qIExlbmd0aCAqLwotICAgIGlmIChsZW4gPCAwKSByZXR1cm4oMCk7Ci0gICAgaWYg KCpzKysgIT0gU1ApIHJldHVybigwKTsJCS8qIFNlcXVlbmNlIG51bWJlciAqLwotICAgIHR5cGUg PSAqcysrOwkJCS8qIFR5cGUgKi8KLSAgICBpZiAodHlwZSAhPSAnUycgJiYgdHlwZSAhPSAnSScp Ci0gICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKGJ1ZmxlbiA8IGxlbiArIDIpIHJldHVybigwKTsK LSAgICBzICs9IChsZW4gLSAzKTsJCQkvKiBQb3NpdGlvbiBvZiBjaGVja3N1bSAqLwotICAgIGNo ayA9IChDSEFSKSAoKnMpOwkJCS8qIENoZWNrc3VtICovCi0gICAgKnMgPSBOVUw7CQkJICAgLyog VGVtcG9yYXJpbHkgbnVsbC10ZXJtaW5hdGUgZGF0YSBmaWVsZCAqLwotICAgIGlmICh4dW5jaGFy KGNoaykgIT0gY2hrMSgoQ0hBUiAqKShidWYrMSksYnVmbGVuLTIpKSB7IC8qIENoZWNrIGl0ICov Ci0JLyoKLQkgIEluIEMtS2VybWl0IDkuMCBhbmQgbGF0ZXIsIGFuIFMgb3IgSSBwYWNrZXQgY2Fu IGhhdmUgYSAKLQkgIFR5cGUgMyBCbG9jayBjaGVjayAoImhlbHAgc2V0IGJsb2NrLWNoZWNrIiBm b3IgZGV0YWlscykuCi0JKi8KLQl1bnNpZ25lZCBjcmM7CQkJLyogRmFpbGVkLi4uIFRyeSBUeXBl IDMgYmxvY2sgY2hlY2sgKi8KLQkqcyA9IGNoazsJCQkvKiBSZXBsYWNlIGxhc3QgYnl0ZSAqLwot CXMgLT0gMjsJCQkJLyogQmFjayB1cCB0d28gYnl0ZXMgKi8KLQljcmMgPSAoeHVuY2hhcihzWzBd KSA8PCAxMikJLyogQ29udmVydCAzIGJ5dGVzIHRvIG51bWVyaWMgQ1JDICovCi0JICAgIHwgKHh1 bmNoYXIoc1sxXSkgPDwgNikKLQkgICAgfCAoeHVuY2hhcihzWzJdKSk7Ci0JY2hrID0gKENIQVIp KCpzKTsJCS8qIENvcHkgMXN0IGJ5dGUgb2YgMy1ieXRlIENSQyAqLwotCSpzID0gTlVMOwkJCS8q IE51bGwtdGVybWluYXRlIGRhdGEgZmllbGQgKi8KLQlpZiAoY3JjICE9IGNoazMoKENIQVIgKiko YnVmKzEpLHN0cmxlbihidWYrMSkpKQotCSAgcmV0dXJuKDApOwotICAgIH0KLSAgICByZXR1cm4o dHlwZSA9PSAnUycgPyAxIDogMik7Ci19Ci0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0KLS8qIFIg UCBBIEMgSyAgLS0gIFJlYWQgYSBQYWNrZXQgKi8KLQotLyoKLSAgcnBhY2sgcmVhZHMgYSBwYWNr ZXQgYW5kIHJldHVybnMgdGhlIHBhY2tldCB0eXBlLCBvciBlbHNlIFEgaWYgdGhlCi0gIHBhY2tl dCB3YXMgaW52YWxpZCwgb3IgVCBpZiBhIHRpbWVvdXQgb2NjdXJyZWQuICBVcG9uIHN1Y2Nlc3Nm dWwgcmV0dXJuLAotICBzZXRzIHRoZSB2YWx1ZXMgb2YgZ2xvYmFsIHJzbiAocmVjZWl2ZWQgc2Vx dWVuY2UgbnVtYmVyKSwgIHJsbiAocmVjZWl2ZWQKLSAgZGF0YSBsZW5ndGgpLCBhbmQgcmRhdGFw IChwb2ludGVyIHRvIG51bGwtdGVybWluYXRlZCBkYXRhIGZpZWxkKSwgYW5kCi0gIHJldHVybnMg dGhlIHBhY2tldCB0eXBlLiAgTk9URTogVGhpcyBpcyBhbiBpbm5lci1sb29wIGZ1bmN0aW9uIHNv IG11c3QgYmUKLSAgZWZmaWNpZW50LiAgUHJvdGVjdCBmdW5jdGlvbiBjYWxscyBieSBpZi10ZXN0 cyB3aGVyZSBwb3NzaWJsZSwgZS5nLgotICAiaWYgKHBrdGxvZykgbG9ncGt0KC4uLik7Ii4KLSov Ci1pbnQKLXJwYWNrKCkgewotICAgIHJlZ2lzdGVyIGludCBpLCBqLCB4LCBscDsJCS8qIExvY2Fs IHZhcmlhYmxlcyAqLwotI2lmZGVmIENLVFVOSU5HCi0gICAgdW5zaWduZWQgaW50IGNoazsKLSNl bmRpZiAvKiBDS1RVTklORyAqLwotICAgIGludCBrLCB0eXBlLCBjaGtsZW47Ci0gICAgdW5zaWdu ZWQgY3JjOwotICAgIENIQVIgcGJjWzVdOwkJCS8qIFBhY2tldCBibG9jayBjaGVjayAqLwotICAg IENIQVIgKnNvaHA7CQkJCS8qIFBvaW50ZXIgdG8gU09IICovCi0gICAgQ0hBUiBlOwkJCQkvKiBQ YWNrZXQgZW5kIGNoYXJhY3RlciAqLwotCi0jaWZkZWYgR0ZUSU1FUgotICAgIENLRkxPQVQgdDEg PSAwLjAsIHQyID0gMC4wOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotICAgIGRlYnVnKEYxMDEs InJwYWNrIHBrdG51bSIsIiIscGt0bnVtKTsKLQotI2lmbmRlZiBPTERDSEtJTlQKLSAgICBpZiAo Y2hraW50KCkgPCAwKQkJCS8qIENoZWNrIGZvciBjb25zb2xlIGludGVycnVwdHMuICovCi0gICAg ICByZXR1cm4oJ3onKTsKLSNlbmRpZiAvKiBPTERDSEtJTlQgKi8KLQotICAgIGsgPSBnZXRyYnVm KCk7CQkJLyogR2V0IGEgbmV3IHBhY2tldCBpbnB1dCBidWZmZXIuICovCi0gICAgZGVidWcoRjEw MSwicnBhY2sgZ2V0cmJ1ZiIsIiIsayk7Ci0gICAgaWYgKGsgPCAwKSB7CQkJLyogUmV0dXJuIGxp a2UgdGhpcyBpZiBub25lIGZyZWUuICovCi0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgcmVjcGt0 ID0gcl9wa3Rba10uYmZfYWRyOwotICAgICpyZWNwa3QgPSAnXDAnOwkJCS8qIENsZWFyIHJlY2Vp dmUgYnVmZmVyLiAqLwotICAgIHNvaHAgPSByZWNwa3Q7CQkJLyogSW5pdGlhbGl6ZSBwb2ludGVy cyB0byBpdC4gKi8KLSAgICByZGF0YXAgPSByZWNwa3Q7Ci0gICAgcnNuID0gcmxuID0gLTE7CQkJ LyogSW4gY2FzZSBvZiBmYWlsdXJlLiAqLwotICAgIGUgPSAodHVybikgPyB0dXJuY2ggOiBlb2w7 CQkvKiBVc2UgYW55IGhhbmRzaGFrZSBjaGFyIGZvciBlb2wgKi8KLQotLyogVHJ5IHRvIGdldCBh ICJsaW5lIi4gKi8KLQotI2lmZGVmIENLX0FVVE9ETAotICAgIGRlYnVnKEYxMTAsInJwYWNrIGtz YnVmIixrc2J1ZiwwKTsKLSAgICBpZiAoa3NidWZbMF0pIHsJCQkvKiBLZXJtaXQgcGFja2V0IGFs cmVhZHkgKi8KLQlpbnQgeDsJCQkJLyogY29sbGVjdGVkIGZvciB1cyBpbiBDT05ORUNUIG1vZGUg Ki8KLQlDSEFSICpzMSA9IHJlY3BrdCwgKnMyID0ga3NidWY7Ci0JaiA9IDA7Ci0Jd2hpbGUgKCpz MikgewkJCS8qIENvcHkgYW5kIGdldCBsZW5ndGggKi8KLQkgICAgKnMxKysgPSAqczIrKzsJCS8q IE5vIHBvaW50IG9wdGltaXppbmcgdGhpcyBzaW5jZSAqLwotCSAgICBqKys7CQkJLyogaXQncyBu ZXZlciBtb3JlIHRoYW4gfjIwIGNoYXJzICovCi0JfQotCSpzMSA9IE5VTDsKLSNpZmRlZiBQQVJT RU5TRQotCXggPSBwYXJjaGsocmVjcGt0LCBzdGNociwgaik7CS8qIENoZWNrIHBhcml0eSAqLwot CWRlYnVnKEYwMDAsImF1dG9kb3dubG9hZCBwYXJpdHkiLCIiLHBhcml0eSk7Ci0JZGVidWcoRjAw MCwiYXV0b2Rvd25sb2FkIHBhcmNoayIsIiIseCk7Ci0JaWYgKHggPiAwICYmIHBhcml0eSAhPSB4 KSB7Ci0JICAgIGF1dG9wYXIgPSAxOwotCSAgICBwYXJpdHkgPSB4OwotCX0KLSNlbmRpZiAvKiBQ QVJTRU5TRSAqLwotCWtzYnVmWzBdID0gTlVMOwkJCS8qIERvbid0IGRvIHRoaXMgbmV4dCB0aW1l ISAqLwotCi0gICAgfSBlbHNlIHsJCQkJLyogTm9ybWFsbHkgZ28gcmVhZCBhIHBhY2tldCAqLwot I2VuZGlmIC8qIENLX0FVVE9ETCAqLwotCi0jaWZkZWYgREVCVUcKLQlpZiAoZGVibG9nKSB7Ci0J ICAgIGRlYnVnKEYxMDEsInJwYWNrIHRpbWludCIsIiIsdGltaW50KTsKLQkgICAgZGVidWcoRjEw MSwicnBhY2sgcmN2dGltbyIsIiIscmN2dGltbyk7Ci0jaWZkZWYgU1RSRUFNSU5HCi0JICAgIGRl YnVnKEYxMDEsInJwYWNrIHN0cmVhbWluZyIsIiIsc3RyZWFtaW5nKTsKLSNlbmRpZiAvKiBTVFJF QU1JTkcgKi8KLSNpZmRlZiBHRlRJTUVSCi0JICAgIC8qIE1lYXN1cmUgaG93IGxvbmcgaXQgdGFr ZXMgdG8gcmVhZCBhIHBhY2tldCAqLwotCSAgICB0MSA9IGdmdGltZXIoKTsKLSNlbmRpZiAvKiBH RlRJTUVSICovCi0JfQotI2VuZGlmIC8qIERFQlVHICovCi0KLS8qIEpVU1QgSU4gQ0FTRSAob3Ro ZXJ3aXNlIHRoaXMgY291bGQgY2xvYmJlciBzdHJlYW1pbmcpICovCi0KLQlpZiAoKHRpbWludCA9 PSAwCi0jaWZkZWYgU1RSRUFNSU5HCi0JICAgICB8fCBzdHJlYW1pbmcKLSNlbmRpZiAvKiBTVFJF QU1JTkcgKi8KLQkgICAgICkgJiYgKHJjdnRpbW8gIT0gMCkpIHsKLQkgICAgZGVidWcoRjEwMSwi cnBhY2sgdGltaW50IDAgfHwgc3RyZWFtaW5nIGJ1dCByY3Z0aW1vIiwiIixyY3Z0aW1vKTsKLQkg ICAgcmN2dGltbyA9IDA7Ci0JfQotCi0jaWZkZWYgUEFSU0VOU0UKLSNpZmRlZiBVTklYCi0vKgot ICBTbyBmYXIgdGhlIGZpbmFsIHR1cm4gYXJndW1lbnQgaXMgb25seSBmb3IgY2tbdXZkbF10aW8u Yy4gIFNob3VsZCBiZSBhZGRlZAotICB0byB0aGUgb3RoZXJzIHRvby4gICh0dXJuID09IGhhbmRz aGFrZSBjaGFyYWN0ZXIuKQotKi8KLQlqID0gdHRpbmwocmVjcGt0LHJfcGt0W2tdLmJmX2xlbiAt IDEscmN2dGltbyxlLHN0Y2hyLHR1cm4pOwotI2Vsc2UKLSNpZmRlZiBWTVMKLQlqID0gdHRpbmwo cmVjcGt0LHJfcGt0W2tdLmJmX2xlbiAtIDEscmN2dGltbyxlLHN0Y2hyLHR1cm4pOwotI2Vsc2UK LSNpZmRlZiBkYXRhZ2VuZXJhbAotCWogPSB0dGlubChyZWNwa3Qscl9wa3Rba10uYmZfbGVuIC0g MSxyY3Z0aW1vLGUsc3RjaHIsdHVybik7Ci0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLQlqID0gdHRp bmwocmVjcGt0LHJfcGt0W2tdLmJmX2xlbiAtIDEscmN2dGltbyxlLHN0Y2hyLHR1cm4pOwotI2Vs c2UKLSNpZmRlZiBPUzIKLQlqID0gdHRpbmwocmVjcGt0LHJfcGt0W2tdLmJmX2xlbiAtIDEscmN2 dGltbyxlLHN0Y2hyLHR1cm4pOwotI2Vsc2UKLSNpZmRlZiBPU0sKLQlqID0gdHRpbmwocmVjcGt0 LHJfcGt0W2tdLmJmX2xlbiAtIDEscmN2dGltbyxlLHN0Y2hyLHR1cm4pOwotI2Vsc2UKLQlqID0g dHRpbmwocmVjcGt0LHJfcGt0W2tdLmJmX2xlbiAtIDEscmN2dGltbyxlLHN0Y2hyKTsKLSNlbmRp ZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5k aWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYICov Ci0JaWYgKHBhcml0eSAhPSAwICYmIHBhcml0eSAhPSAncycgJiYgdHRwcnR5ICE9IDApIHsKLQkg ICAgaWYgKHBhcml0eSAhPSB0dHBydHkpIGF1dG9wYXIgPSAxOwotCSAgICBwYXJpdHkgPSB0dHBy dHk7Ci0JfQotI2Vsc2UgLyogIVBBUlNFTlNFICovCi0JaiA9IHR0aW5sKHJlY3BrdCxyX3BrdFtr XS5iZl9sZW4gLSAxLHJjdnRpbW8sZSk7Ci0jZW5kaWYgLyogUEFSU0VOU0UgKi8KLQotI2lmZGVm IERFQlVHCi0JaWYgKGRlYmxvZykgIHsKLQkgICAgZGVidWcoRjEwMSwicnBhY2sgdHRpbmwgbGVu IiwiIixqKTsKLSNpZmRlZiBHRlRJTUVSCi0JICAgIHQyID0gZ2Z0aW1lcigpOwotCSAgICBkZWJ1 ZyhGMTAxLCJycGFjayB0dGlubCBtc2VjIiwiIiwobG9uZykoKHQyLXQxKSoxMDAwLjApKTsKLSNl bmRpZiAvKiBHRlRJTUVSICovCi0JfQotI2VuZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiBTVFJF QU1JTkcKLSAgICBpZiAoc3RyZWFtaW5nICYmIHNuZHR5cCA9PSAnRCcgJiYgaiA9PSAwKQotICAg ICAgICByZXR1cm4oJ1knKTsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQotCWlmIChqIDwgMCkg ewotCSAgICAvKiAtMSA9PSB0aW1lb3V0LCAtMiA9PSBeQywgLTMgPT0gY29ubmVjdGlvbiBsb3N0 IG9yIGZhdGFsIGkvbyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJycGFjazogdHRpbmwgZmFpbHMiLCIi LGopOyAvKiBPdGhlcndpc2UsICovCi0JICAgIGZyZWVyYnVmKGspOwkJLyogRnJlZSB0aGlzIGJ1 ZmZlciAqLwotCSAgICBpZiAoaiA8IC0xKSB7CQkvKiBCYWlsIG91dCBpZiBeQ15DIHR5cGVkLiAq LwotCQlpZiAoaiA9PSAtMikgewotCQkgICAgaW50ZXJydXB0ZWQgPSAxOwotCQkgICAgZGVidWco RjEwMSwicnBhY2sgXkMgc2VydmVyIiwiIixzZXJ2ZXIpOwotCQkgICAgZGVidWcoRjEwMSwicnBh Y2sgXkMgZW5fZmluIiwiIixlbl9maW4pOwotCQl9IGVsc2UgaWYgKGogPT0gLTMpIHsKLQkJICAg IGZhdGFsaW8gPSAxOwotCQkgICAgZGVidWcoRjEwMSwicnBhY2sgZmF0YWxpbyIsIiIsZW5fZmlu KTsKLQkJfQotCQlyZXR1cm4oaik7Ci0JICAgIH0KLQkgICAgaWYgKG5ha3N0YXRlKQkJLyogaiA9 PSAtMSBpcyBhIHJlYWQgdGltZW91dCAqLwotCSAgICAgIHh4c2NyZWVuKFNDUl9QVCwnVCcsKGxv bmcpd2lubG8sIiIpOwotCSAgICBlbHNlCi0JICAgICAgeHhzY3JlZW4oU0NSX1BULCdUJywobG9u Zylwa3RudW0sIiIpOwotCSAgICBsb2dwa3QoJ3InLC0xLChDSEFSICopIjx0aW1lb3V0PiIsMCk7 Ci0JICAgIGlmIChmbG93ID09IDEpIHR0b2MoWE9OKTsJLyogSW4gY2FzZSBvZiBYb2ZmIGJsb2Nr YWdlLiAqLwotCSAgICByZXR1cm4oJ1QnKTsKLQl9Ci0jaWZkZWYgQ0tfQVVUT0RMCi0gICAgfQot I2VuZGlmIC8qIENLX0FVVE9ETCAqLwotCi0gICAgcnBrdGwgPSBqOwotICAgIHRsY2kgKz0gajsJ CQkJLyogQWxsIE9LLCBDb3VudCB0aGUgY2hhcmFjdGVycy4gKi8KLSAgICBmbGNpICs9IGo7Ci0K LS8qIEZpbmQgc3RhcnQgb2YgcGFja2V0ICovCi0KLSNpZm5kZWYgUEFSU0VOU0UKLSAgICBmb3Ig KGkgPSAwOyAocmVjcGt0W2ldICE9IHN0Y2hyKSAmJiAoaSA8IGopOyBpKyspCi0gICAgICBzb2hw Kys7CQkJCS8qIEZpbmQgbWFyayAqLwotICAgIGlmIChpKysgPj0gaikgewkJCS8qIERpZG4ndCBm aW5kIGl0LiAqLwotCWxvZ3BrdCgncicsLTEsIjx0aW1lb3V0PiIsMCk7Ci0JZnJlZXJidWYoayk7 Ci0JcmV0dXJuKCdUJyk7Ci0gICAgfQotI2Vsc2UKLSAgICBpID0gMTsJCQkJLyogdHRpbmwgZG9l cyB0aGlzIGZvciB1cyAqLwotI2VuZGlmIC8qIFBBUlNFTlNFICovCi0KLSAgICBycGFja2V0cysr OwkJCQkvKiBDb3VudCByZWNlaXZlZCBwYWNrZXQuICovCi0gICAgbHAgPSBpOwkJCQkvKiBSZW1l bWJlciBMRU4gcG9zaXRpb24uICovCi0gICAgaWYgKChqID0geHVuY2hhcihyZWNwa3RbaSsrXSkp ID09IDApIHsgLyogR2V0IHBhY2tldCBsZW5ndGguICAqLwotICAgICAgICBpZiAoKGogPSBscCs1 KSA+IE1BWFJQKSB7CS8qIExvbmcgcGFja2V0ICovCi0JICAgIHJldHVybignUScpOwkJLyogVG9v IGxvbmcgKi8KLQl9Ci0KLSNpZmRlZiBDS1RVTklORwotCS8qIFNhdmUgc29tZSBmdW5jdGlvbi1j YWxsIGFuZCBsb29wIG92ZXJoZWFkLi4uICovCi0jaWZkZWYgQ09NTUVOVAotCS8qIHR0aW5sKCkg YWxyZWFkeSByZW1vdmVkIHBhcml0eSAqLwotCWlmIChwYXJpdHkpCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotCSAgY2hrID0gKHVuc2lnbmVkKSAoKHVuc2lnbmVkKSByZWNwa3RbaS0xXSArCi0JCQkg ICAgKHVuc2lnbmVkKSByZWNwa3RbaV0gICArCi0JCQkgICAgKHVuc2lnbmVkKSByZWNwa3RbaSsx XSArCi0JCQkgICAgKHVuc2lnbmVkKSByZWNwa3RbaSsyXSArCi0JCQkgICAgKHVuc2lnbmVkKSBy ZWNwa3RbaSszXQotCQkJICAgICk7Ci0jaWZkZWYgQ09NTUVOVAotCWVsc2UKLQkgIGNoayA9ICh1 bnNpZ25lZCkgKCh1bnNpZ25lZCkgKHJlY3BrdFtpLTFdICYgMDc3KSArCi0JCQkgICAgKHVuc2ln bmVkKSAocmVjcGt0W2ldICAgJiAwNzcpICsKLQkJCSAgICAodW5zaWduZWQpIChyZWNwa3RbaSsx XSAmIDA3NykgKwotCQkJICAgICh1bnNpZ25lZCkgKHJlY3BrdFtpKzJdICYgMDc3KSArCi0JCQkg ICAgKHVuc2lnbmVkKSAocmVjcGt0W2krM10gJiAwNzcpCi0JCQkgICAgKTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0JaWYgKHh1bmNoYXIocmVjcGt0W2pdKSAhPSAoKCgoY2hrICYgMDMwMCkgPj4g NikgKyBjaGspICYgMDc3KSkKLSNlbHNlCi0JeCA9IHJlY3BrdFtqXTsJCQkvKiBIZWFkZXIgY2hl Y2tzdW0uICovCi0JcmVjcGt0W2pdID0gJ1wwJzsJCS8qIENhbGN1bGF0ZSAmIGNvbXBhcmUuICov Ci0JaWYgKHh1bmNoYXIoeCkgIT0gY2hrMShyZWNwa3QrbHAsNSkpCi0jZW5kaWYgLyogQ0tUVU5J TkcgKi8KLQkgIHsKLQkgICAgICBmcmVlcmJ1ZihrKTsKLQkgICAgICBsb2dwa3QoJ3InLC0xLChD SEFSICopIjxjcnVuY2hlZDpoZHI+IiwwKTsKLQkgICAgICB4eHNjcmVlbihTQ1JfUFQsJyUnLChs b25nKXBrdG51bSwiQmFkIHBhY2tldCBoZWFkZXIiKTsKLQkgICAgICByZXR1cm4oJ1EnKTsKLQkg IH0KLSNpZm5kZWYgQ0tUVU5JTkcKLQlyZWNwa3Rbal0gPSB4OwkJCS8qIENoZWNrc3VtIG9rLCBw dXQgaXQgYmFjay4gKi8KLSNlbmRpZiAvKiBDS1RVTklORyAqLwotCXJsbiA9IHh1bmNoYXIocmVj cGt0W2otMl0pICogOTUgKyB4dW5jaGFyKHJlY3BrdFtqLTFdKSAtIGJjdGw7Ci0JaiA9IDM7CQkJ CS8qIERhdGEgb2Zmc2V0LiAqLwotICAgIH0gZWxzZSBpZiAoaiA8IDMpIHsKLQlkZWJ1ZyhGMTAx LCJycGFjayBwYWNrZXQgbGVuZ3RoIGxlc3MgdGhhbiAzIiwiIixqKTsKLQlmcmVlcmJ1ZihrKTsK LQlsb2dwa3QoJ3InLC0xLChDSEFSICopIjxjcnVuY2hlZDpsZW4+IiwwKTsKLQl4eHNjcmVlbihT Q1JfUFQsJyUnLChsb25nKXBrdG51bSwiQmFkIHBhY2tldCBsZW5ndGgiKTsKLQlyZXR1cm4oJ1En KTsKLSAgICB9IGVsc2UgewotCXJsbiA9IGogLSBiY3RsIC0gMjsJCS8qIFJlZ3VsYXIgcGFja2V0 ICovCi0JaiA9IDA7CQkJCS8qIE5vIGV4dGVuZGVkIGhlYWRlciAqLwotICAgIH0KLSAgICByc24g PSB4dW5jaGFyKHJlY3BrdFtpKytdKTsJCS8qIFNlcXVlbmNlIG51bWJlciAqLwotICAgIGlmIChw a3Rsb2cpCQkJCS8qIFNhdmUgYSBmdW5jdGlvbiBjYWxsISAqLwotICAgICAgbG9ncGt0KCdyJyxy c24sc29ocCxybG4rYmN0bCtqKzQpOwotICAgIGlmIChyc24gPCAwIHx8IHJzbiA+IDYzKSB7Ci0J ZGVidWcoRjEwMSwicnBhY2sgYmFkIHNlcXVlbmNlIG51bWJlciIsIiIscnNuKTsKLQlmcmVlcmJ1 ZihrKTsKLQlpZiAocGt0bG9nKQotCSAgbG9ncGt0KCdyJyxyc24sKENIQVIgKikiPGNydW5jaGVk OnNlcT4iLDApOwotCXh4c2NyZWVuKFNDUl9QVCwnJScsKGxvbmcpcGt0bnVtLCJCYWQgc2VxdWVu Y2UgbnVtYmVyIik7Ci0JcmV0dXJuKCdRJyk7Ci0gICAgfQotLyoKLSAgSWYgdGhpcyBwYWNrZXQg aGFzIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHBhY2tldCBqdXN0IHNlbnQsIGFzc3VtZSBpdCBpcwot ICBhbiBlY2hvIGFuZCBpZ25vcmUgaXQuICBEb24ndCBldmVuIGJvdGhlciB3aXRoIHRoZSBibG9j ayBjaGVjayBjYWxjdWxhdGlvbjoKLSAgZXZlbiBpZiB0aGUgcGFja2V0IGlzIGNvcnJ1cHRlZCwg d2UgZG9uJ3Qgd2FudCB0byBOQUsgYW4gZWNob2VkIHBhY2tldC4KLSAgTm9yIG11c3Qgd2UgTkFL IGFuIEFDSyBvciBOQUsuCi0qLwotICAgIHR5cGUgPSByZWNwa3RbaSsrXTsJCQkvKiBHZXQgcGFj a2V0J3MgVFlQRSBmaWVsZCAqLwotICAgIGlmICh0eXBlID09IHNuZHR5cCB8fCAobmFrc3RhdGUg JiYgKHR5cGUgPT0gJ04nIC8qIHx8IHR5cGUgPT0gJ1knICovICkpKSB7Ci0JZGVidWcoRjAwMCwi cnBhY2sgZWNobyIsIiIsdHlwZSk7IC8qIElmIGl0J3MgYW4gZWNobyAqLwotCWZyZWVyYnVmKGsp OwkJCS8qIEZyZWUgdGhpcyBidWZmZXIgKi8KLQlsb2dwa3QoJyMnLHJzbiwoQ0hBUiAqKSI8ZWNo bzppZ25vcmVkPiIsMCk7Ci0JcmV0dXJuKCdlJyk7CQkJLyogUmV0dXJuIHNwZWNpYWwgKGxvd2Vy Y2FzZSkgY29kZSAqLwotICAgIH0KLS8qCi0gIFNlcGFyYXRlIHRoZSBkYXRhIGZyb20gdGhlIGJs b2NrIGNoZWNrLCBhY2NvdW50aW5nIGZvciB0aGUgY2FzZSB3aGVyZQotICBhIHBhY2tldCB3YXMg cmV0cmFuc21pdHRlZCBhZnRlciB0aGUgYmxvY2sgY2hlY2sgc3dpdGNoZWQuICBUaGUgIlR5cGUg MwotICBGb3JjZWQiIGJ1c2luZXNzIGlzIG5ldyB0byBDLUtlcm1pdCA5LjAuCi0qLwotICAgIGlm IChiY3RmKSB7IAkJCS8qIFR5cGUgMyBmb3JjZWQgb24gYWxsIHBhY2tldHMgKi8KLQliY3RsID0g Y2hrbGVuID0gMzsKLSAgICB9IGVsc2UgaWYgKCh0eXBlID09ICdJJyB8fCB0eXBlID09ICdTJykp IHsgLyogT3RoZXJ3aXNlLi4uICovCi0JaWYgKHJlY3BrdFsxMV0gPT0gJzUnKSB7CS8qIFNlbmRl ciBpcyBmb3JjaW5nIFR5cGUgMyAqLwotCSAgICBiY3RmID0gMTsJCQkvKiBTbyB3ZSB3aWxsIHRv byAqLwotCSAgICBiY3RsID0gY2hrbGVuID0gMzsKLQkgICAgZGVidWcoRjEwMCwiUkVDT0dOSVpF IEJMT0NLIENIRUNLIFRZUEUgNSIsIiIsMCk7Ci0JfSBlbHNlIHsJCQkvKiBOb3JtYWwgY2FzZSAq LwotCSAgICAvKiBJICYgUyBwYWNrZXRzIGFsd2F5cyBoYXZlIHR5cGUgMSAqLwotCSAgICBjaGts ZW4gPSAxOwotCSAgICBybG4gPSBybG4gKyBiY3RsIC0gMTsKLQl9Ci0gICAgfSBlbHNlIGlmICh0 eXBlID09ICdOJykgewkJLyogQSBOQUsgcGFja2V0IG5ldmVyIGhhcyBkYXRhICovCi0JY2hrbGVu ID0geHVuY2hhcihyZWNwa3RbbHBdKSAtIDI7Ci0JaWYgKGNoa2xlbiA8IDEgfHwgY2hrbGVuID4g MykgewkvKiBKSEQgMTMgQXByIDIwMTAgKi8KLQkgICAgZGVidWcoRjEwMSwicnBhY2sgYmFkIG5h ayBjaGtsZW4iLCIiLGNoa2xlbik7Ci0JICAgIGZyZWVyYnVmKGspOwotCSAgICBsb2dwa3QoJ3In LC0xLChDSEFSICopIjxjcnVuY2hlZDpjaGtsZW4+IiwwKTsKLQkgICAgeHhzY3JlZW4oU0NSX1BU LCclJywobG9uZylwa3RudW0sIihiYWQgbmFrKSIpOwotCSAgICByZXR1cm4oJ1EnKTsKLQl9Ci0J cmxuID0gcmxuICsgYmN0bCAtIGNoa2xlbjsKLSAgICB9IGVsc2UgY2hrbGVuID0gYmN0bDsKLSNp ZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsJCQkvKiBTYXZlIDIgZnVuY3Rpb24gY2FsbHMg Ki8KLQlkZWJ1ZyhGMTAxLCJycGFjayBiY3RsIiwiIixiY3RsKTsKLQlkZWJ1ZyhGMTAxLCJycGFj ayBjaGtsZW4iLCIiLGNoa2xlbik7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgaSAr PSBqOwkJCQkvKiBCdWZmZXIgaW5kZXggb2YgREFUQSBmaWVsZCAqLwotICAgIHJkYXRhcCA9IHJl Y3BrdCtpOwkJCS8qIFBvaW50ZXIgdG8gREFUQSBmaWVsZCAqLwotICAgIGlmICgoaiA9IHJsbiAr IGkpID4gcl9wa3Rba10uYmZfbGVuKSB7IC8qIE1ha2Ugc3VyZSBpdCBmaXRzICovCi0JZGVidWco RjEwMSwicGFja2V0IHRvbyBsb25nIiwiIixqKTsKLQlmcmVlcmJ1ZihrKTsKLQlsb2dwa3QoJ3In LHJzbiwoQ0hBUiAqKSI8b3ZlcmZsb3c+IiwwKTsKLQlyZXR1cm4oJ1EnKTsKLSAgICB9Ci0gICAg Zm9yICh4ID0gMDsgeCA8IGNoa2xlbjsgeCsrKQkvKiBDb3B5IHRoZSBibG9jayBjaGVjayAqLwot ICAgICAgcGJjW3hdID0gcmVjcGt0W2oreF07CQkvKiAzIGJ5dGVzIGF0IG1vc3QuICovCi0gICAg cGJjW3hdID0gJ1wwJzsJCQkvKiBOdWxsLXRlcm1pbmF0ZSBibG9jayBjaGVjayBzdHJpbmcgKi8K LSAgICByZWNwa3Rbal0gPSAnXDAnOwkJCS8qIGFuZCB0aGUgcGFja2V0IERhdGEgZmllbGQuICov Ci0KLSAgICBpZiAoY2hrbGVuID09IDIgJiYgYmN0dSA9PSA0KSB7CS8qIEFkanVzdCBmb3IgQmxh bmstRnJlZS0yICovCi0JY2hrbGVuID0gNDsJCQkvKiAoY2hrbGVuIGlzIG5vdyBhIG1pc25vbWVy Li4uKSAqLwotCWRlYnVnKEYxMDAsInJwYWNrIGJsb2NrIGNoZWNrIEIiLCIiLDApOwotICAgIH0K LSAgICBzd2l0Y2ggKGNoa2xlbikgewkJCS8qIENoZWNrIHRoZSBibG9jayBjaGVjayAqLwotICAg ICAgY2FzZSAxOgkJCQkvKiBUeXBlIDEsIDYtYml0IGNoZWNrc3VtICovCi0JaWYgKHh1bmNoYXIo KnBiYykgIT0gY2hrMShyZWNwa3QrbHAsai1scCkpIHsKLSNpZmRlZiBERUJVRwotCSAgICBpZiAo ZGVibG9nKSB7Ci0JCWRlYnVnKEYxMTAsImNoZWNrZWQgY2hhcnMiLHJlY3BrdCtscCwwKTsKLQkJ ZGVidWcoRjEwMSwiYmxvY2sgY2hlY2sgKDEpIiwiIiwoaW50KSB4dW5jaGFyKCpwYmMpKTsKLQkJ ZGVidWcoRjEwMSwic2hvdWxkIGJlICgxKSIsIiIsY2hrMShyZWNwa3QrbHAsai1scCkpOwotCSAg ICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkgICAgZnJlZXJidWYoayk7Ci0JICAgIGxvZ3BrdCgn cicsLTEsKENIQVIgKikiPGNydW5jaGVkOmNoazE+IiwwKTsKLQkgICAgeHhzY3JlZW4oU0NSX1BU LCclJywobG9uZylwa3RudW0sIkNoZWNrc3VtIGVycm9yIik7Ci0JICAgIHJldHVybignUScpOwot CX0KLQlicmVhazsKLSAgICAgIGNhc2UgMjoJCQkJLyogVHlwZSAyLCAxMi1iaXQgY2hlY2tzdW0g Ki8KLQl4ID0geHVuY2hhcigqcGJjKSA8PCA2IHwgeHVuY2hhcihwYmNbMV0pOwotCWlmICh4ICE9 IGNoazIocmVjcGt0K2xwLGotbHApKSB7IC8qIE5vIG1hdGNoICovCi0JICAgIGlmICh0eXBlID09 ICdFJykgewkJLyogQWxsb3cgRSBwYWNrZXRzIHRvIGhhdmUgdHlwZSAxICovCi0JCXJlY3BrdFtq KytdID0gcGJjWzBdOwotCQlyZWNwa3Rbal0gPSAnXDAnOwotCQlpZiAoeHVuY2hhcihwYmNbMV0p ID09IGNoazEocmVjcGt0K2xwLGotbHApKQotCQkgIGJyZWFrOwotCQllbHNlCi0JCSAgcmVjcGt0 Wy0tal0gPSAnXDAnOwotCSAgICB9Ci0jaWZkZWYgREVCVUcKLQkgICAgaWYgKGRlYmxvZykgewot CQlkZWJ1ZyhGMTEwLCJjaGVja2VkIGNoYXJzIixyZWNwa3QrbHAsMCk7Ci0JCWRlYnVnKEYxMDEs ImJsb2NrIGNoZWNrICgyKSIsIiIsIHgpOwotCQlkZWJ1ZyhGMTAxLCJzaG91bGQgYmUgKDIpIiwi IiwgKGludCkgY2hrMihyZWNwa3QrbHAsai1scCkpOwotCSAgICB9Ci0jZW5kaWYgLyogREVCVUcg Ki8KLQkgICAgZnJlZXJidWYoayk7Ci0JICAgIGxvZ3BrdCgncicsLTEsKENIQVIgKikiPGNydW5j aGVkOmNoazI+IiwwKTsKLQkgICAgeHhzY3JlZW4oU0NSX1BULCclJywobG9uZylwa3RudW0sIkNo ZWNrc3VtIGVycm9yIik7Ci0JICAgIHJldHVybignUScpOwotCX0KLQlicmVhazsKLSAgICAgIGNh c2UgMzoJCQkJLyogVHlwZSAzLCAxNi1iaXQgQ1JDICovCi0JY3JjID0gKHh1bmNoYXIocGJjWzBd KSA8PCAxMikKLQkgICAgfCAoeHVuY2hhcihwYmNbMV0pIDw8IDYpCi0JICAgIHwgKHh1bmNoYXIo cGJjWzJdKSk7Ci0JaWYgKGNyYyAhPSBjaGszKHJlY3BrdCtscCxqLWxwKSkgewotCSAgICBpZiAo dHlwZSA9PSAnRScpIHsJCS8qIEFsbG93IEUgcGFja2V0cyB0byBoYXZlIHR5cGUgMSAqLwotCQly ZWNwa3RbaisrXSA9IHBiY1swXTsKLQkJcmVjcGt0W2orK10gPSBwYmNbMV07Ci0JCXJlY3BrdFtq XSA9ICdcMCc7Ci0JCWlmICh4dW5jaGFyKHBiY1syXSkgPT0gY2hrMShyZWNwa3QrbHAsai1scCkp Ci0JCSAgYnJlYWs7Ci0JCWVsc2UgeyBqIC09MjsgcmVjcGt0W2pdID0gJ1wwJzsgfQotCSAgICB9 Ci0jaWZkZWYgREVCVUcKLQkgICAgaWYgKGRlYmxvZykgewotCQlkZWJ1ZyhGMTEwLCJjaGVja2Vk IGNoYXJzIixyZWNwa3QrbHAsMCk7Ci0JCWRlYnVnKEYxMDEsImJsb2NrIGNoZWNrICgzKSIsIiIs Y3JjKTsKLQkJZGVidWcoRjEwMSwic2hvdWxkIGJlICgzKSIsIiIsKGludCkgY2hrMyhyZWNwa3Qr bHAsai1scCkpOwotCSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkgICAgZnJlZXJidWYoayk7 Ci0JICAgIGxvZ3BrdCgncicsLTEsKENIQVIgKikiPGNydW5jaGVkOmNoazM+IiwwKTsKLQkgICAg eHhzY3JlZW4oU0NSX1BULCclJywobG9uZylwa3RudW0sIkNSQyBlcnJvciIpOwotCSAgICByZXR1 cm4oJ1EnKTsKLQl9Ci0JYnJlYWs7Ci0gICAgICBjYXNlIDQ6CQkJCS8qIFR5cGUgNCA9IFR5cGUg Miwgbm8gYmxhbmtzLiAqLwotCXggPSAodW5zaWduZWQpKCh4dW5jaGFyKCpwYmMpIC0gMSkgPDwg NikgfAotCSAgKHVuc2lnbmVkKSh4dW5jaGFyKHBiY1sxXSkgLSAxKTsKLQlpZiAoeCAhPSBjaGsy KHJlY3BrdCtscCxqLWxwKSkgewotCSAgICBpZiAodHlwZSA9PSAnRScpIHsJLyogQWxsb3cgRSBw YWNrZXRzIHRvIGhhdmUgdHlwZSAxICovCi0JCXJlY3BrdFtqKytdID0gcGJjWzBdOwotCQlyZWNw a3Rbal0gPSAnXDAnOwotCQlpZiAoeHVuY2hhcihwYmNbMV0pID09IGNoazEocmVjcGt0K2xwLGot bHApKQotCQkgIGJyZWFrOwotCQllbHNlCi0JCSAgcmVjcGt0Wy0tal0gPSAnXDAnOwotCSAgICB9 Ci0JICAgIGRlYnVnKEYxMDEsImJhZCB0eXBlIEIgYmxvY2sgY2hlY2siLCIiLHgpOwotCSAgICBm cmVlcmJ1ZihrKTsKLQkgICAgbG9ncGt0KCdyJywtMSwoQ0hBUiAqKSI8Y3J1bmNoZWQ6Y2hrYj4i LDApOwotCSAgICB4eHNjcmVlbihTQ1JfUFQsJyUnLChsb25nKXBrdG51bSwiQ2hlY2tzdW0gZXJy b3IiKTsKLQkgICAgcmV0dXJuKCdRJyk7Ci0JfQotCWJyZWFrOwotICAgICAgZGVmYXVsdDoJCQkv KiBTaG91bGRuJ3QgaGFwcGVuLi4uICovCi0JZnJlZXJidWYoayk7Ci0JbG9ncGt0KCdyJywtMSwo Q0hBUiAqKSI8Y3J1bmNoZWQ6Y2hreD4iLDApOwotCXh4c2NyZWVuKFNDUl9QVCwnJScsKGxvbmcp cGt0bnVtLCIoY3J1bmNoZWQpIik7Ci0JcmV0dXJuKCdRJyk7Ci0gICAgfQotICAgIGRlYnVnKEYx MDEsInJwYWNrIGJsb2NrIGNoZWNrIE9LIiwiIixyc24pOwotCi0vKiBOb3cgd2UgY2FuIGJlbGll dmUgdGhlIHNlcXVlbmNlIG51bWJlciwgYW5kIG90aGVyIGZpZWxkcy4gKi8KLS8qIEhlcmUgd2Ug dmlvbGF0ZSBzdHJpY3QgcHJpbmNpcGxlcyBvZiBsYXllcmluZywgZXRjLCBhbmQgbG9vayBhdCB0 aGUgICovCi0vKiBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyLiAgSWYgdGhlcmUncyBhbHJlYWR5IGEg cGFja2V0IHdpdGggdGhlIHNhbWUgICAqLwotLyogbnVtYmVyIGluIHRoZSB3aW5kb3csIHdlIHJl bW92ZSB0aGlzIG9uZSBzbyB0aGF0IHRoZSB3aW5kb3cgd2lsbCBub3QgKi8KLS8qIGZpbGwgdXAu ICovCi0KLSAgICBpZiAoKHggPSByc2VxdGJsW3Jzbl0pICE9IC0xKSB7CS8qIEFscmVhZHkgYSBw YWNrZXQgd2l0aCB0aGlzIG51bWJlciAqLwotCXJldHJhbnMrKzsJCQkvKiBDb3VudCBpdCBmb3Ig c3RhdGlzdGljcyAqLwotCWRlYnVnKEYxMDEsInJwYWNrIGdvdCBkdXAiLCIiLHJzbik7Ci0JbG9n cGt0KCdyJyxyc24sKENIQVIgKikiPGR1cGxpY2F0ZT4iLDApOwotCWZyZWVyYnVmKHgpOwkJCS8q IEZyZWUgb2xkIGJ1ZmZlciwga2VlcCBuZXcgcGFja2V0LiAqLwotCXJfcGt0W2tdLnBrX3J0cisr OwkJLyogQ291bnQgdGhpcyBhcyBhIHJldHJhbnNtaXNzaW9uLiAqLwotICAgIH0KLQotLyogTmV3 IHBhY2tldCwgbm90IHNlZW4gYmVmb3JlLCBlbnRlciBpdCBpbnRvIHRoZSByZWNlaXZlIHdpbmRv dy4gKi8KLQotI2lmZGVmIENLX1RJTUVSUwotICAgIGlmICh0aW1pbnQgPiAwKQotICAgICAgcnJ0 dGJsW3Jzbl0gPSBndGltZXIoKTsJCS8qIFRpbWVzdGFtcCAqLwotI2VuZGlmIC8qIENLX1RJTUVS UyAqLwotCi0gICAgcnNlcXRibFtyc25dID0gazsJCQkvKiBNYWtlIGJhY2sgcG9pbnRlciAqLwot ICAgIHJfcGt0W2tdLnBrX3NlcSA9IHJzbjsJCS8qIFJlY29yZCBpbiBwYWNrZXQgaW5mbyBzdHJ1 Y3R1cmUgKi8KLSAgICByX3BrdFtrXS5wa190eXAgPSB0eXBlOwkJLyogU2VxdWVuY2UsIHR5cGUs Li4uICovCi0gICAgcl9wa3Rba10ucGtfYWRyID0gcmRhdGFwOwkJLyogcG9pbnRlciB0byBkYXRh IGJ1ZmZlciAqLwotICAgIGlmIChsb2NhbCkgewkJCS8qIFNhdmUgYSBmdW5jdGlvbiBjYWxsISAq LwotCWludCB4ID0gMDsKLQlpZiAoZmRpc3BsYSAhPSBYWUZEX04pIHggPSAxOwotCWlmIChmZGlz cGxhID09IFhZRkRfQiAmJiAodHlwZSA9PSAnRCcgfHwgc25kdHlwID09ICdEJykpIHggPSAwOwot CWlmICh4KQkJCQkvKiBVcGRhdGUgc2NyZWVuICovCi0JICB4eHNjcmVlbihTQ1JfUFQsKGNoYXIp dHlwZSwobG9uZylyc24sKGNoYXIgKilzb2hwKTsKLSAgICB9Ci0gICAgcmV0dXJuKHR5cGUpOwkJ CS8qIFJldHVybiBwYWNrZXQgdHlwZSAqLwotfQotCi0vKiAgTCBPIEcgUCBLIFQgIC0tICBMb2cg cGFja2V0IG51bWJlciBuLCBwb2ludGVkIHRvIGJ5IHMuICAqLwotCi0vKiBjID0gJ3MnIChzZW5k KSBvciAncicgKHJlY2VpdmUpICovCi0KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotbG9ncGt0KGNo YXIgYyxpbnQgbiwgQ0hBUiAqcywgaW50IGxlbikKLSNlbHNlCi1sb2dwa3QoYyxuLHMsbGVuKSBj aGFyIGM7IGludCBuOyBDSEFSICpzOyBpbnQgbGVuOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0v KiBsb2dwa3QgKi8gewotICAgIGNoYXIgcGxvZ1syMF07Ci0gICAgaWYgKCFzKSBzID0gKENIQVIg KikiIjsKLSAgICBpZiAocGt0bG9nKSBpZiAoY2hrZm4oWlBGSUxFKSA+IDApIHsKLQlpZiAobiA8 IDApCQkJLyogQ29uc3RydWN0IGVudHJ5IGhlYWRlciAqLwotCSAgc3ByaW50ZihwbG9nLCIlYy14 eC0lMDJkLSIsYywoZ3RpbWVyKCklNjApKTsgLyogc2FmZSAqLwotCWVsc2UKLQkgIHNwcmludGYo cGxvZywiJWMtJTAyZC0lMDJkLSIsYyxuLChndGltZXIoKSU2MCkpOyAvKiBzYWZlICovCi0JaWYg KHpzb3V0eChaUEZJTEUscGxvZywoaW50KXN0cmxlbihwbG9nKSkgPCAwKSB7Ci0JICAgIHBrdGxv ZyA9IDA7Ci0JICAgIHJldHVybjsKLQl9IGVsc2UgewotCSAgICBpZiAobGVuID09IDApCi0JICAg ICAgbGVuID0gc3RybGVuKChjaGFyICopcyk7Ci0JICAgIGlmIChsZW4gPiAwKSB7Ci0JCWNoYXIg KiBwOwkJLyogTWFrZSBTT1AgcHJpbnRhYmxlICovCi0JCWludCB4OwkJCS8qIHNvIHdlIGNhbiBs b29rIGF0IGxvZ3Mgd2l0aG91dCAqLwotCQlwID0gZGJjaHIoKnMpOwkJLyogdHJpZ2dlcmluZyBh dXRvZG93bmxvYWQuICovCi0JCXggPSBzdHJsZW4oZGJjaHIoKnMpKTsKLQkJaWYgKCpzIDwgMzIg fHwgKCpzID4gMTI3ICYmICpzIDwgMTYwKSkgewotCQkgICAgaWYgKHpzb3V0eChaUEZJTEUscCx4 KSA8IDApIHsKLQkJCXBrdGxvZyA9IDA7Ci0JCQlyZXR1cm47Ci0JCSAgICB9IGVsc2UgewotCQkJ bGVuLS07Ci0JCQlzKys7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotCSAgICBpZiAoenNvdXR4KFpQ RklMRSwoY2hhciAqKXMsbGVuKSA8IDApIHsKLQkJcGt0bG9nID0gMDsKLQkJcmV0dXJuOwotCSAg ICB9IGVsc2UgaWYgKHpzb3V0eChaUEZJTEUsCi0jaWZkZWYgVU5JWAotCQkJICAgICAgIlxuIiwg MQotI2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJhbAotCQkJICAgICAgIlxuIiwgMQotI2Vsc2UKLSNp ZmRlZiBPU0sKLQkJCSAgICAgICJcciIsIDEKLSNlbHNlCi0jaWZkZWYgTUFDCi0JCQkgICAgICAi XHIiLCAxCi0jZWxzZQotCQkJICAgICAgIlwwMTVcMDEyIiwgMgotI2VuZGlmIC8qIE1BQyAqLwot I2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogVU5J WCAqLwotCQkJICAgICAgKSA8IDApIHsKLQkJcGt0bG9nID0gMDsKLQkgICAgfQotCX0KLSAgICB9 Ci19Ci0KLS8qICBUIFMgVCBBIFQgUyAgLS0gIFJlY29yZCBzdGF0aXN0aWNzIGluIHRyYW5zYWN0 aW9uIGxvZyAgKi8KLQotVk9JRAotdHN0YXRzKCkgewotICAgIGNoYXIgKnRwID0gTlVMTDsKLSNp ZmRlZiBHRlRJTUVSCi0gICAgQ0tGTE9BVCB4eDsJCQkJLyogRWxhcHNlZCB0aW1lIGRpdmlzb3Ig Ki8KLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0c3RhdHMgeGZzZWNz IiwiIix4ZnNlY3MpOwotICAgIGRlYnVnKEYxMDEsInRzdGF0cyBmaWxjbnQiLCIiLGZpbGNudCk7 Ci0gICAgaWYgKGZpbGNudCA9PSAxKSB7CQkJLyogR2V0IHRpbWluZyBmb3Igc3RhdGlzdGljcyAq LwotCXRzZWNzID0geGZzZWNzOwkJCS8qIFNpbmdsZSBmaWxlLCB3ZSBhbHJlYWR5IGhhdmUgaXQg Ki8KLSNpZmRlZiBHRlRJTUVSCi0JZGVidWcoRjEwMSwidHN0YXRzIGZweGZzZWNzIiwiIiwoaW50 KWZweGZzZWNzKTsKLQlmcHRzZWNzID0gZnB4ZnNlY3M7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwot ICAgIH0gZWxzZSB7CQkJCS8qIE11bHRpcGxlIGZpbGVzICovCi0JdHNlY3MgPSBndGltZXIoKTsJ CS8qIEdldCBjdXJyZW50IHRpbWUgKi8KLSNpZmRlZiBHRlRJTUVSCi0JZnB0c2VjcyA9IGdmdGlt ZXIoKTsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgfQotI2lmZGVmIEdGVElNRVIKLSAgICBp ZiAoZnB0c2VjcyA8PSBHRk1JTlRJTUUpCQkvKiBDYWxjdWxhdGUgQ1BTICovCi0gICAgICBmcHRz ZWNzID0gKENLRkxPQVQpIEdGTUlOVElNRTsKLSAgICBkZWJ1ZyhGMTAxLCJ0c3RhdHMgZnB0c2Vj cyIsIiIsKGludClmcHRzZWNzKTsKLSAgICB4eCA9IChDS0ZMT0FUKSB0ZmMgLyBmcHRzZWNzOwot ICAgIGlmIChzaXplb2YobG9uZykgPD0gNCkgewkJLyogZG9lc24ndCBhY2NvdW50IGZvciAxNi1i aXQgbG9uZ3MgKi8KLQlpZiAoeHggID4gMjE0NzQ4MzY0Ny4wKQotCSAgdGZjcHMgPSAyMTQ3NDgz NjQ3TDsJICAgICAgICAvKiAzMSBiaXRzICovCi0JZWxzZQotCSAgdGZjcHMgPSAobG9uZykgeHg7 Ci0gICAgfSBlbHNlCi0gICAgICB0ZmNwcyA9IChsb25nKSB4eDsKLSNlbHNlCi0gICAgaWYgKHRz ZWNzIDwgMkwpCi0gICAgICB0c2VjcyA9IDFMOwotICAgIGRlYnVnKEYxMDEsInRzdGF0cyB0c2Vj cyIsIiIsdHNlY3MpOwotICAgIHRmY3BzID0gdGZjIC8gdHNlY3M7Ci0jZW5kaWYgLyogR0ZUSU1F UiAqLwotCi0gICAgenRpbWUoJnRwKTsJCQkJLyogR2V0IHRpbWUgc3RhbXAgKi8KLSAgICB0bG9n KEYxMDAsIiIsIiIsMEwpOwkJLyogTGVhdmUgYSBibGFuayBsaW5lICovCi0gICAgdGxvZyhGMTEw LCJUcmFuc2FjdGlvbiBjb21wbGV0ZSIsdHAsMEwpOyAgLyogUmVjb3JkIGl0ICovCi0KLSAgICBp ZiAoZmlsY250IDwgMSkgcmV0dXJuOwkJLyogSWYgbm8gZmlsZXMsIGRvbmUuICovCi0KLS8qIElm IG11bHRpcGxlIGZpbGVzLCByZWNvcmQgY2hhcmFjdGVyIHRvdGFscyBmb3IgYWxsIGZpbGVzICov Ci0KLSAgICBpZiAoZmlsY250ID4gMSkgewotCXRsb2coRjEwMSwiIGZpbGVzIHRyYW5zZmVycmVk ICAgICAgICIsIiIsZmlsY250IC0gZmlscmVqKTsKLQl0bG9nKEYxMDEsIiB0b3RhbCBmaWxlIGNo YXJhY3RlcnMgICAiLCIiLHRmYyk7Ci0JdGxvZyhGMTAxLCIgY29tbXVuaWNhdGlvbiBsaW5lIGlu ICAgIiwiIix0bGNpKTsKLQl0bG9nKEYxMDEsIiBjb21tdW5pY2F0aW9uIGxpbmUgb3V0ICAiLCIi LHRsY28pOwotICAgIH0KLQotLyogUmVjb3JkIHRpbWluZyBpbmZvIGZvciBvbmUgb3IgbW9yZSBm aWxlcyAqLwotCi0jaWZkZWYgR0ZUSU1FUgotICAgIGlmIChmaWxjbnQgLSBmaWxyZWogPT0gMSkg ewotCXRsb2coRjEwMSwiIGVsYXBzZWQgdGltZSAoc2Vjb25kcykgICIsIiIsKGxvbmcpIGZweGZz ZWNzKTsKLQl0bG9nKEYxMDEsIiBlZmZlY3RpdmUgZGF0YSByYXRlICAgICAiLCIiLGZpbGNwcyk7 Ci0gICAgfSBlbHNlIHsKLQl0bG9nKEYxMDEsIiBlbGFwc2VkIHRpbWUgKHNlY29uZHMpICAiLCIi LChsb25nKSBmcHRzZWNzKTsKLQl0bG9nKEYxMDEsIiBlZmZlY3RpdmUgZGF0YSByYXRlICAgICAi LCIiLChsb25nKSB4eCk7Ci0gICAgfQotI2Vsc2UKLSAgICB0bG9nKEYxMDEsIiBlbGFwc2VkIHRp bWUgKHNlY29uZHMpICAiLCIiLHRzZWNzKTsKLSAgICBpZiAodHNlY3MgPiAwKQotICAgICAgdGxv ZyhGMTAxLCIgZWZmZWN0aXZlIGRhdGEgcmF0ZSAgICAgIiwiIiwodGZjIC8gdHNlY3MpKTsKLSNl bmRpZiAvKiBHRlRJTUVSICovCi0KLSAgICB0bG9nKEYxMDAsIiIsIiIsMEwpOwkJLyogTGVhdmUg YSBibGFuayBsaW5lICovCi19Ci0KLS8qICBGIFMgVCBBIFQgUyAgLS0gIFJlY29yZCBmaWxlIHN0 YXRpc3RpY3MgaW4gdHJhbnNhY3Rpb24gbG9nICAqLwotCi1WT0lECi1mY3BzKCkgewotI2lmZGVm IEdGVElNRVIKLSAgICBkb3VibGUgeHg7Ci0gICAgZnB4ZnNlY3MgPSBnZnRpbWVyKCkgLSBmcGZz ZWNzOwotICAgIGlmIChmcHhmc2VjcyA8PSBHRk1JTlRJTUUpCi0gICAgICBmcHhmc2VjcyA9IChD S0ZMT0FUKSBHRk1JTlRJTUU7Ci0gICAgeHggPSAoQ0tGTE9BVCkgZmZjIC8gZnB4ZnNlY3M7Ci0g ICAgaWYgKHNpemVvZihsb25nKSA8PSA0KSB7Ci0JaWYgKHh4ICA+IDIxNDc0ODM2NDcuMCkKLQkg IHRmY3BzID0gMjE0NzQ4MzY0N0w7CQkvKiAzMSBiaXRzICovCi0JZWxzZQotCSAgZmlsY3BzID0g KGxvbmcpIHh4OwotICAgIH0gZWxzZQotICAgICAgZmlsY3BzID0gKGxvbmcpIHh4OwotICAgIGlm IChzaXplb2YoaW50KSA+PSA0KQotICAgICAgeGZzZWNzID0gKGludCkgZnB4ZnNlY3M7Ci0gICAg ZWxzZSBpZiAoZnB4ZnNlY3MgPCAzMjc2OC4wKQotICAgICAgeGZzZWNzID0gKGludCkgZnB4ZnNl Y3M7Ci0gICAgZWxzZQotICAgICAgeGZzZWNzID0gMzI3Njc7Ci0jZWxzZSAvKiBHRlRJTUVSICov Ci0gICAgeGZzZWNzID0gZ3RpbWVyKCkgLSBmc2VjczsKLSAgICBpZiAoeGZzZWNzIDwgMUwpIHhm c2VjcyA9IDFMOwotICAgIGZpbGNwcyA9IGZmYyAvIHhmc2VjczsKLSNlbmRpZiAvKiBHRlRJTUVS ICovCi19Ci0KLVZPSUQKLWZzdGF0cygpIHsKLSAgICB0ZmMgKz0gZmZjOwotI2lmZGVmIERFQlVH Ci0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDEsImZzdGF0cyB0ZmMiLCIiLHRmYyk7Ci0J ZGVidWcoRjEwMSwiZnN0YXRzIHdoYXQiLCIiLHdoYXQpOwotCWRlYnVnKEYxMTAsImZzdGF0cyBl cGt0bXNnIixlcGt0bXNnLDApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIFRM T0cKLSAgICBpZiAoIWRpc2NhcmQgJiYgIWN4c2VlbiAmJiAhY3pzZWVuICYmIHdoYXQgIT0gV19O T1RISU5HICYmICEqZXBrdG1zZykKLSAgICAgIHRsb2coRjEwMSwiIGNvbXBsZXRlLCBzaXplIiwi IixmZmMpOwotI2VuZGlmIC8qIFRMT0cgKi8KLX0KLQotI2VuZGlmIC8qIE5PWEZFUiAqLwoKZGlm ZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjZm4zLmMg Yi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2ZuMy5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDU4YTU2Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjZm4zLmMKKysrIC9kZXYvbnVsbApAQCAtMSwy NjA2ICswLDAgQEAKLS8qICBDIEsgQyBGIE4gMyAgLS0gIFBhY2tldCBidWZmZXIgbWFuYWdlbWVu dCBmb3IgQy1LZXJtaXQgICovCi0KLS8qIChwbHVzIGFzc29ydGVkIGZ1bmN0aW9ucyB0YWNrZWQg b24gYXQgdGhlIGVuZCkgKi8KLQotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNAY29s dW1iaWEuZWR1PiwKLSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBT eXN0ZW1zLCBOZXcgWW9yayBDaXR5LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMCwKLSAg ICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3Jr LgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhU IGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBm b3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0qLwotLyoKLSBOb3RlIC0tIGlmIHlvdSBj aGFuZ2UgdGhpcyBmaWxlLCBwbGVhc2UgYW1lbmQgdGhlIHZlcnNpb24gbnVtYmVyIGFuZCBkYXRl IGF0Ci0gdGhlIHRvcCBvZiBja2NmbnMuYyBhY2NvcmRpbmdseS4KLSovCi0KLSNpbmNsdWRlICJj a2NzeW0uaCIKLSNpbmNsdWRlICJja2NkZWIuaCIKLSNpbmNsdWRlICJja2Nhc2MuaCIKLSNpbmNs dWRlICJja2NrZXIuaCIKLSNpbmNsdWRlICJja2N4bGEuaCIKLQotLyogIEMgSyBNIEsgRCBJIFIg IC0tICBDcmVhdGUgYSBkaXJlY3RvcnkgICovCi0vKgotICBDYWxsIHdpdGg6Ci0gICAgaW50IGZj ICAgID0gMCB0byBjcmVhdGUsIG5vbnplcm8gdG8gcmVtb3ZlLCBhIGRpcmVjdG9yeS4KLSAgICBj aGFyICogcyAgPSBwb2ludGVyIHRvIG5hbWUgb2YgZGlyZWN0b3J5IHRvIGNyZWF0ZSBvciByZW1v dmUuCi0gICAgY2hhciAqKiByID0gYWRkcmVzcyBvZiBwb2ludGVyIHRvIHJldHVybiBuYW1lIG9y IG1lc3NhZ2UuCi0gICAgaW50IG0gICAgID0gMSB0byBwcmludCBlcnJvciBtZXNzYWdlcywgMCB0 byBiZSBzaWxlbnQuCi0gICAgaW50IGN2dCAgID0gMSBtZWFucyBjb252ZXJ0IHMgZnJvbSBzdGFu ZGFyZCBmb3JtYXQgdG8gbG9jYWwgZm9ybWF0OwotICAgICAgICAgICAgICAgIDAgbWVhbnMgdXNl IHMgYXMgaXMuCi0gIFJldHVybnM6Ci0gICAgMCBvbiBzdWNjZXNzIChkaXJlY3Rvcnkgd2FzIGNy ZWF0ZWQgb3IgcmVtb3ZlZCkuCi0gICAtMSB3aGVuIGF0dGVtcHQgdG8gY3JlYXRlIHRoZSBkaXJl Y3RvcnkgZmFpbGVkLgotICAgLTIgb24gaW50ZXJuYWwgZXJyb3IgKGUuZy4gbm8gY29kZSBmb3Ig Y3JlYXRpbmcgZGlyZWN0b3JpZXMpLgotICBPbiBzdWNjZXNzLCB0aGUgbmFtZSBpcyBwb2ludGVk IHRvIGJ5IHAuCi0gIE9uIGZhaWx1cmUsIHRoZSByZWFzb24gaXMgcG9pbnRlZCB0byBieSBwLgot Ki8KLSNpZmRlZiBDS19NS0RJUgotc3RhdGljIGNoYXIgY2tta2RidWZbQ0tNQVhQQVRIKzFdOwot I2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJhbAotc3RhdGljIGNoYXIgY2tta2RidWZbQ0tNQVhQQVRI KzFdOwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogQ0tfTUtESVIgKi8KLQot I2lmZGVmIENLX01LRElSCi1pbnQKLWNrbWtkaXIoZmMscyxyLG0sY3Z0KSBpbnQgZmM7IGNoYXIg KiBzOyBjaGFyICoqIHI7IGludCBtOyBpbnQgY3Z0OyB7Ci0gICAgaW50IHgsIHJjID0gLTI7Ci0g ICAgY2hhciB0bXBidWZbQ0tNQVhQQVRIKzFdOwotICAgIGNoYXIgYnVmMltDS01BWFBBVEgrMV07 Ci0gICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgZGVidWcoRjExMCwiY2tta2RpciAxIGZjIixzLGZj KTsKLSAgICBpZiAoISpzKSB7Ci0JY2ttYWttc2coY2tta2RidWYsCi0JCSBDS01BWFBBVEgrMSwK LQkJIChmYyA9PSAwKSA/ICJta2RpciIgOiAicm1kaXIiLAotCQkgIjogbm8gbmFtZSBnaXZlbiIs Ci0JCSBOVUxMLAotCQkgTlVMTAotCQkgKTsKLQkqciA9IGNrbWtkYnVmOwotCXJldHVybigtMik7 Ci0gICAgfQotI2lmZGVmIGRhdGFnZW5lcmFsCi0vKiBDb21lIGJhY2sgYW5kIG1ha2UgdGhpcyBu aWNlciBsYXRlciBpZiBhbnlib2R5IG5vdGljZXMgKi8KLSAgICBpZiAoZmMgPT0gMCkgewkJCS8q IG1rZGlyICovCi0JcmMgPSBjcmVhdGVkaXIocywwKTsKLSAgICB9IGVsc2UgewkJCQkvKiBybWRp ciAqLwotCS8qIEFPUy9WUyBybWRpcigpIGlzIGEgbm8tb3AuICovCi0JY2ttYWttc2codG1wYnVm LENLTUFYUEFUSCsxLCJkZWxldGUgIixzLE5VTEwsTlVMTCk7Ci0JZGVidWcoRjExMCwiY2tta2Rp ciAyIix0bXBidWYsMCk7Ci0JcmMgPSBzeXN0ZW0odG1wYnVmKTsKLSAgICB9Ci0gICAgKnIgPSBO VUxMOwotI2Vsc2UgLyogbm90IGRhdGFnZW5lcmFsICovCi0KLS8qIEZpcnN0IG1ha2Ugc3VyZSB0 aGUgbmFtZSBoYXMgYW4gYWNjZXB0YWJsZSBkaXJlY3RvcnktbmFtZSBmb3JtYXQgKi8KLQotI2lm ZGVmIFZNUwotICAgIHsKLQljaGFyICpwID0gczsKLQlpbnQgbGIgPSAwLCByYiA9IDAsIHNsID0g MDsKLQl3aGlsZSAoKnApIHsKLQkgICAgaWYgICAgICAoKnAgPT0gJ1snIHx8ICpwID09ICc8Jykg bGIrKzsgICAvKiBDb3VudCBicmFja2V0cyAqLwotCSAgICBlbHNlIGlmICgqcCA9PSAnXScgfHwg KnAgPT0gJz4nKSByYisrOwotCSAgICBlbHNlIGlmICgqcCA9PSAnLycpIAkgICAgIHNsKys7CS8q IGFuZCBzbGFzaGVzICovCi0JICAgIHArKzsKLQl9Ci0JaWYgKGxiICE9IDEgJiYgcmIgIT0gMSAm JiBzbCA9PSAwICYmIHAgPiBzICYmICoocC0xKSAhPSAnOicpIHsKLQkgICAgLyogUHJvYmFibHkg anVzdCBhIHdvcmQgLSBjb252ZXJ0IHRvIFZNUyBmb3JtYXQgKi8KLQkgICAgY2ttYWttc2coYnVm MiwKLQkJICAgICBDS01BWFBBVEgrMSwKLQkJICAgICAiWyIsCi0JCSAgICAgKCpzID09ICcuJykg PyAiIiA6ICIuIiwKLQkJICAgICBzLAotCQkgICAgICJdIgotCQkgICAgICk7Ci0JICAgIHMgPSBi dWYyOwotCX0gZWxzZSBpZiAobGIgPT0gMCAmJiByYiA9PSAwICYmIHNsICE9IDAgJiYgcCA+IHMg JiYgKihwLTEpICE9ICc6JykgewotCSAgICBpbnQgZmxhZyA9IDA7Ci0JICAgIC8qIFNlZW1zIHRv IGJlIGluIFVOSVggZm9ybWF0ICovCi0JICAgIHggPSBzdHJsZW4ocyk7Ci0JICAgIGlmICh4ID4g MCAmJiBzW3gtMV0gIT0gJy8nKQotCSAgICAgIGZsYWcgPSAxOwotCSAgICBja21ha21zZyhidWYy LENLTUFYUEFUSCsxLHMsZmxhZyA/ICIvIiA6ICIiLE5VTEwsTlVMTCk7Ci0JICAgIHMgPSBidWYy OwotCX0KLQlpZiAocyA9PSBidWYyKSB7Ci0JICAgIGNrc3RybmNweSh0bXBidWYscyxDS01BWFBB VEgrMSk7Ci0JICAgIHMgPSB0bXBidWY7Ci0JfQotCWRlYnVnKEYxMTAsImNrbWtkaXIgMitWTVMi LHMsMCk7Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBVTklYT1JPU0sKLSNpZmRlZiBEVElMREUKLSAg ICBzID0gdGlsZGVfZXhwYW5kKHMpOwotI2VuZGlmIC8qIERUSUxERSAqLwotICAgIGNrc3RybmNw eSh0bXBidWYscyxDS01BWFBBVEgrMSk7Ci0gICAgcyA9IHRtcGJ1ZjsKLSAgICB4ID0gc3RybGVu KHMpOwotICAgIGlmICh4ID4gMCAmJiBzW3gtMV0gIT0gJy8nKSB7CS8qIE11c3QgZW5kIGluICIv IiBmb3Igem1rZGlyKCkgKi8KLQlzW3hdID0gJy8nOwotCXNbeCsxXSA9IE5VTDsKLQlkZWJ1ZyhG MTEwLCJja21rZGlyIDIrVU5JWE9ST1NLIixzLDApOwotICAgIH0KLSNlbHNlIC8qIFVOSVhPUk9T SyAqLwotI2lmZGVmIE9TMgotICAgIGNrc3RybmNweSh0bXBidWYscyxDS01BWFBBVEgrMSk7Ci0g ICAgcyA9IHRtcGJ1ZjsKLSAgICB4ID0gc3RybGVuKHMpOwotICAgIGlmIChmYyA9PSAwICYmIHgg PiAwICYmIHNbeC0xXSAhPSAnLycpIHsgLyogTXVzdCBlbmQgaW4gIi8iIGZvciB6bWtkaXIoKSAq LwotCXNbeF0gPSAnLyc7Ci0Jc1t4KzFdID0gTlVMOwotCWRlYnVnKEYxMTAsImNrbWtkaXIgMitP UzIiLHMsMCk7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFVOSVhPUk9TSyAq LwotI2VuZGlmIC8qIFZNUyAqLwotI2lmZGVmIE5aTFRPUgotICAgIC8qIFNlcnZlciBpcyBjYWxs aW5nIHVzLCBzbyBjb252ZXJ0IHRvIGxvY2FsIGZvcm1hdCBpZiBuZWNlc3NhcnkgKi8KLSAgICBp ZiAoY3Z0KSB7Ci0JbnpydG9sKHMsKGNoYXIgKilidWYyLDEsUEFUSF9BQlMsQ0tNQVhQQVRIKTsK LQlzID0gYnVmMjsKLQlkZWJ1ZyhGMTEwLCJja21rZGlyIDMiLHMsMCk7Ci0gICAgfQotI2VuZGlm IC8qIE5aTFRPUiAqLwotICAgIGRlYnVnKEYxMTAsImNrbWtkaXIgNCIscywwKTsKLSAgICBpZiAo ZmMgPT0gMCkgewkJCS8qIE1ha2luZyAqLwotI2lmZGVmIENLX01LRElSCi0JcmMgPSB6bWtkaXIo cyk7Ci0jZWxzZQotI2lmZGVmIE5UCi0JcmMgPSBfbWtkaXIocyk7Ci0jZWxzZQotCXJjID0gbWtk aXIocywwNzc3KTsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIENLX01LRElSICovCi0gICAg fSBlbHNlIHsJCQkJLyogUmVtb3ZpbmcgKi8KLSNpZmRlZiBaUk1ESVIKLQlyYyA9IHpybWRpcihz KTsKLSNlbHNlCi0jaWZkZWYgTlQKLQlyYyA9IF9ybWRpcihzKTsKLSNlbHNlCi0jaWZkZWYgT1NL Ci0JcmMgPSAtMjsKLSNlbHNlCi0JcmMgPSBybWRpcihzKTsKLSNlbmRpZiAvKiBPU0sgKi8KLSNl bmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIFpSTURJUiAqLwotICAgIH0KLSNlbmRpZiAvKiBkYXRh Z2VuZXJhbCAqLwotICAgIGRlYnVnKEYxMDEsImNrbWtkaXIgcmMiLCIiLHJjKTsKLSAgICBpZiAo cmMgPT0gLTIpIHsKLQlja21ha21zZyhja21rZGJ1ZiwKLQkJIENLTUFYUEFUSCwKLQkJICJEaXJl Y3RvcnkgIiwKLQkJIChmYyA9PSAwKSA/ICJjcmVhdGlvbiIgOiAicmVtb3ZhbCIsCi0JCSAibm90 IGltcGxlbWVudGVkIGluIHRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdCIsCi0JCSBOVUxMCi0JCSAp OwotCSpyID0gY2tta2RidWY7Ci0JaWYgKG0pIHByaW50ZigiJXNcbiIsKnIpOwotICAgIH0gZWxz ZSBpZiAocmMgPCAwKSB7Ci0JaWYgKG0pIHBlcnJvcihzKTsKLQlja21ha21zZyhja21rZGJ1ZixD S01BWFBBVEgscywiOiAiLGNrX2VycnN0cigpLE5VTEwpOwotCSpyID0gY2tta2RidWY7Ci0gICAg fSBlbHNlIGlmIChmYyA9PSAwICYmIHpmbnFmcChzLENLTUFYUEFUSCxja21rZGJ1ZikpIHsKLQkq ciA9IGNrbWtkYnVmOwotICAgIH0gZWxzZSBpZiAoZmMgIT0gMCkgewotCWNrbWFrbXNnKGNrbWtk YnVmLENLTUFYUEFUSCxzLCI6IHJlbW92ZWQiLE5VTEwsTlVMTCk7Ci0JKnIgPSBja21rZGJ1ZjsK LSAgICB9Ci0gICAgcmV0dXJuKHJjKTsKLX0KLSNlbmRpZiAvKiBDS19NS0RJUiAqLwotCi0jaWZu ZGVmIE5PWEZFUgkJCQkvKiBSZXN0IG9mIHRoaXMgZmlsZS4uLiAqLwotCi0jaWZuZGVmIE5PRElT UE8KLSNpZmRlZiBwZHAxMQotI2RlZmluZSBOT0RJU1BPCi0jZW5kaWYgLyogcGRwZDExICovCi0j ZW5kaWYgLyogTk9ESVNQTyAqLwotCi1leHRlcm4gaW50IHBpcGVzZW5kOwotI2lmZGVmIFBJUEVT RU5ECi1leHRlcm4gY2hhciAqKiBzbmRmaWx0ZXI7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQot ZXh0ZXJuIGludCB1bmtjcywgd21heCwgd2N1ciwgZGlzY2FyZCwgYmN0dSwgYmN0bCwgbG9jYWws IGZkaXNwbGEsIHdoYXQsCi0gICAgc2VuZG1vZGUsIG9wbmVyciwgZGVzdCwgZXBrdHJjdmQsIGVw a3RzZW50LCBmaWxlc3RhdHVzLCBlb2ZtZXRob2QsIGRpc3BvcywKLSAgICBmbmNudiwgZm5ycGF0 aDsKLQotZXh0ZXJuIGNoYXIgKiBvZm4yOwotZXh0ZXJuIGNoYXIgKiByZnNwZWMsICogc2ZzcGVj LCAqIHByZnNwZWMsICogcHNmc3BlYywgKiBycmZzcGVjLCAqIHBycmZzcGVjOwotZXh0ZXJuIGNo YXIgb2ZuMVtdOwotZXh0ZXJuIGludCBvZm4xeDsKLWV4dGVybiBjaGFyICogb2ZwZXJtczsKLQot I2lmZGVmIFZNUwotZXh0ZXJuIGludCBiYXRjaDsKLSNlbHNlCi1leHRlcm4gaW50IGJhY2tncmQ7 Ci0jZW5kaWYgLyogVk1TICovCi0KLWV4dGVybiBpbnQgeGZsZywgcmVtZmlsZSwgcmVtYXBwZDsK LWV4dGVybiBDSEFSICpkYXRhOwotZXh0ZXJuIGNoYXIgZmlsbmFtW107Ci0jaWZuZGVmIE5PRlJJ TExTCi1leHRlcm4gaW50IHJwcmludGYsIHJtYWlsZjsJCS8qIFJFTU9URSBNQUlMLCBQUklOVCAq LwotY2hhciBvcHRidWZbT1BUQlVGTEVOXTsJCQkvKiBPcHRpb25zIGZvciBNQUlMIG9yIFJFTU9U RSBQUklOVCAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi1leHRlcm4gaW50IHdzbG90czsKLWV4 dGVybiBpbnQgZmJsa3NpeiwgZnJlY2wsIGZvcmcsIGZyZWNmbSwgZm5jYWN0LCBmbmNzYXYsIGZj Y3RybCwgbGZfb3B0czsKLWV4dGVybiBDSEFSICogc3J2Y21kOwotZXh0ZXJuIGludCBzcnZjbWRs ZW47Ci0KLWV4dGVybiBpbnQgYmluYXJ5LCBzcHNpejsKLWV4dGVybiBpbnQgcGt0bnVtLCBjeHNl ZW4sIGN6c2VlbiwgbmZpbHMsIHN0ZGluZjsKLWV4dGVybiBpbnQgbWVtc3RyLCBzdGRvdWYsIGtl ZXAsIHNuZHNyYywgaGNmbGc7Ci1leHRlcm4gaW50IHNlcnZlciwgZW5fY3dkLCBlbl9tYWksIGVu X3ByaTsKLQotLyogQXR0cmlidXRlcyBpbi9vdXQgZW5hYmxlZCBmbGFncyAqLwotCi1leHRlcm4g aW50Ci0gIGF0ZW5jaSwgYXRlbmNvLCBhdGRhdGksIGF0ZGF0bywgYXRsZW5pLCBhdGxlbm8sIGF0 YmxraSwgYXRibGtvLAotICBhdHR5cGksIGF0dHlwbywgYXRzaWRpLCBhdHNpZG8sIGF0c3lzaSwg YXRzeXNvLCBhdGRpc2ksIGF0ZGlzbzsKLQotI2lmZGVmIENLX1BFUk1TCi1leHRlcm4gaW50IGF0 bHByaSwgYXRscHJvLCBhdGdwcmksIGF0Z3BybzsKLSNlbmRpZiAvKiBDS19QRVJNUyAqLwotCi0j aWZkZWYgU1RSQVRVUwotZXh0ZXJuIGludCBhdGZybWksIGF0ZnJtbywgYXRjcmVpLCBhdGNyZW8s IGF0YWN0aSwgYXRhY3RvOwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLQotI2lmZGVmIGRhdGFnZW5l cmFsCi1leHRlcm4gaW50IHF1aWV0OwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0KLWV4dGVy biBsb25nIGZpbGNudDsKLWV4dGVybiBDS19PRkZfVCBmc2l6ZSwgZmZjLCB0ZmMsIHNlbmRzdGFy dCwgY2FsaWJyYXRlOwotQ0tfT0ZGX1QgcnNfbGVuOwotCi0jaWZuZGVmIE5PQ1NFVFMKLV9QUk9U T1RZUCAoVk9JRCBzZXR4bGF0ZSwgKHZvaWQpKTsKLWV4dGVybiBpbnQgdGNoYXJzZXQsIGZjaGFy c2V0OwotZXh0ZXJuIGludCBudGNzZXRzLCB4bGF0eXBlLCB4ZnJ4bGE7Ci1leHRlcm4gc3RydWN0 IGNzaW5mbyB0Y3NpbmZvW10sIGZjc2luZm9bXTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLS8q IFZhcmlhYmxlcyBnbG9iYWwgdG8gS2VybWl0IHRoYXQgYXJlIGRlZmluZWQgaW4gdGhpcyBtb2R1 bGUgKi8KLQotI2lmZGVmIENLWFhDSEFSCQkJCS8qIERPVUJMRSAvIElHTk9SRSBjaGFyIHRhYmxl ICovCi1pbnQgZGJsZmxhZyA9IDA7Ci1pbnQgaWduZmxhZyA9IDA7Ci1zaG9ydCBkYmx0WzI1Nl0g PSB7Ci0gICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLAotICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKLSAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCi0gICAgMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAot ICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwKLSAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCi0gICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAotICAgIDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAotfTsKLSNl bmRpZiAvKiBDS1hYQ0hBUiAqLwotCi1pbnQgd2lubG87CQkJCS8qIHBhY2tldCBudW1iZXIgYXQg bG93IHdpbmRvdyBlZGdlICAqLwotCi1pbnQgc2J1Zm51bTsJCQkJLyogbnVtYmVyIG9mIGZyZWUg YnVmZmVycyAqLwotaW50IGR1bTAwMSA9IDEyMzQ7CQkJLyogcHJvdGVjdGlvbi4uLiAqLwotaW50 IHNidWZ1c2VbTUFYV1NdOwkJCS8qIGJ1ZmZlciBpbi11c2UgZmxhZyAqLwotaW50IGR1bTAwMyA9 IDExMTE7Ci1pbnQgcmJ1Zm51bTsJCQkJLyogbnVtYmVyIG9mIGZyZWUgYnVmZmVycyAqLwotaW50 IGR1bTAwMiA9IDQzMjE7CQkJLyogbW9yZSBwcm90ZWN0aW9uICovCi1pbnQgcmJ1ZnVzZVtNQVhX U107CQkJLyogYnVmZmVyIGluLXVzZSBmbGFnICovCi1pbnQgc3NlcXRibFs2NF07CQkJLyogc2Vx dWVuY2UgIyB0byBidWZmZXIgIyB0YWJsZSAqLwotaW50IHJzZXF0YmxbNjRdOwkJCS8qIHNlcXVl bmNlICMgdG8gYnVmZmVyICMgdGFibGUgKi8KLWludCBzYWNrdGJsWzY0XTsJCQkvKiBzZXF1ZW5j ZSAjIGFjayB0YWJsZSAqLwotCi1pbnQgb19pc29wZW4gPSAwLCBpX2lzb3BlbiA9IDA7CQkvKiBJ bnB1dCAmIG91dHB1dCBmaWxlcyBhcmUgb3BlbiAqLwotCi0jaWZkZWYgRFlOQU1JQwotc3RydWN0 IHBrdGluZm8gKnNfcGt0ID0gTlVMTDsJCS8qIGFycmF5IG9mIHBrdGluZm8gc3RydWN0dXJlcyAq Lwotc3RydWN0IHBrdGluZm8gKnJfcGt0ID0gTlVMTDsJCS8qIGFycmF5IG9mIHBrdGluZm8gc3Ry dWN0dXJlcyAqLwotI2Vsc2UKLXN0cnVjdCBwa3RpbmZvIHNfcGt0W01BWFdTXTsJCS8qIGFycmF5 IG9mIHBrdGluZm8gc3RydWN0dXJlcyAqLwotc3RydWN0IHBrdGluZm8gcl9wa3RbTUFYV1NdOwkJ LyogYXJyYXkgb2YgcGt0aW5mbyBzdHJ1Y3R1cmVzICovCi0jZW5kaWYgLyogRFlOQU1JQyAqLwot Ci0jaWZkZWYgREVCVUcKLWNoYXIgeGJ1ZlsyMDBdOwkJCQkvKiBGb3IgZGVidWcgbG9nZ2luZyAq LwotI2VuZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiBEWU5BTUlDCi1DSEFSICpiaWdzYnVmID0g TlVMTCwgKmJpZ3JidWYgPSBOVUxMOwotI2Vsc2UKLWNoYXIgYmlnc2J0WzhdOwkJCQkvKiBQcm90 ZWN0aW9uIChzaG91bGRuJ3QgbmVlZCB0aGlzKS4gKi8KLQkJCQkJLyogQlVUIERPTidUIFJFTU9W RSBJVCEgKi8KLUNIQVIgYmlnc2J1ZltTQlNJWiArIDVdOwkJLyogU2VuZC1wYWNrZXQgYnVmZmVy IGFyZWEgKi8KLWNoYXIgYmlncmJ0WzhdOwkJCQkvKiBTYWZldHkgcGFkZGluZyAqLwotQ0hBUiBi aWdyYnVmW1JCU0laICsgNV07CQkvKiBSZWNlaXZlLXBhY2tldCBhcmVhICovCi0jZW5kaWYKLWlu dCBiaWdzYnNpeiA9IFNCU0laOwkJCS8qIFNpemVzIG9mIGJpZyBzZW5kICYgcmN2IGJ1ZmZlcnMu ICovCi1pbnQgYmlncmJzaXogPSBSQlNJWjsKLQotI2lmZGVmIFZNUwotaW50IHpjaGtwYXRoKGNo YXIgKnMpOwotI2VuZGlmIC8qIFZNUyAqLwotCi0vKiBGVU5DVElPTlMgKi8KLQotVk9JRAotZG9m YXN0KCkgewotICAgIGxvbmcgbWF4YnVmc2l6ID0gUkJTSVo7CQkvKiBDb25maWd1cmF0aW9uIHBh cmFtZXRlcnMgKi8KLSAgICBpbnQgbWF4cGt0c2l6ID0gTUFYU1A7Ci0gICAgZXh0ZXJuIGludCBz cHNpemYsCQkJLyogRm9yIGJ1ZyBpbiBJUklYIFRlbG5ldCBzZXJ2ZXIgKi8KLSAgICAgIHJwc2l6 LCB1cnBzaXosIHNwc2l6ciwgc3BtYXgsIHdzbG90cjsKLSAgICBleHRlcm4gc3RydWN0IGNrX3Ag cHRhYltdOwotCi0gICAgaWYgKG1heHBrdHNpeiA8IDQwKQkJCS8qIExvbmcgcGFja2V0IGxlbmd0 aCAqLwotICAgICAgbWF4cGt0c2l6ID0gNDA7Ci0gICAgZWxzZSBpZiAobWF4cGt0c2l6ID4gNDAw MCkKLSAgICAgIG1heHBrdHNpeiA9IDQwMDA7Ci0gICAgd3Nsb3RyID0gbWF4YnVmc2l6IC8gbWF4 cGt0c2l6OwotICAgIGlmICh3c2xvdHIgPiBNQVhXUykJCQkvKiBXaW5kb3cgc2xvdHMgKi8KLSAg ICAgIHdzbG90ciA9IE1BWFdTOwotICAgIGlmICh3c2xvdHIgPiAzMCkKLSAgICAgIHdzbG90ciA9 IDMwOwotICAgIGVsc2UgaWYgKHdzbG90ciA8IDEpCi0gICAgICB3c2xvdHIgPSAxOwotICAgIHVy cHNpeiA9IGFkanBrbChtYXhwa3RzaXosd3Nsb3RyLG1heGJ1ZnNpeik7Ci0gICAgcHRhYltQUk9U T19LXS5ycGt0bGVuID0gdXJwc2l6OwotICAgIHJwc2l6ID0gKHVycHNpeiA+IDk0KSA/IDk0IDog dXJwc2l6OyAvKiBNYXggbm9uLWxvbmcgcGFja2V0IGxlbmd0aCAqLwotICAgIGRlYnVnKEYxMTEs ImRvZmFzdCIsInVwcnNpeiIsdXJwc2l6KTsKLSNpZmRlZiBJUklYCi0jaWZuZGVmIElSSVg2NQot ICAgIC8qIElSSVggVGVsbmV0IHNlcnZlciBjaG9wcyBvZmYgd3JpdGVzIGxvbmdlciB0aGFuIDRL ICovCi0gICAgc3BzaXogPSBzcG1heCA9IHNwc2l6ciA9IHVycHNpejsKLSAgICBkZWJ1ZyhGMTAx LCJkb2FyZyBRIElSSVggc3BzaXoiLCIiLHNwc2l6KTsKLSAgICBzcHNpemYgPSAxOwotI2VuZGlm IC8qIElSSVg2NSAqLwotI2VuZGlmIC8qIElSSVggKi8KLSNpZmRlZiBDS19TUEVFRAotICAgIHNl dHByZWZpeChQWF9DQVUpOwkJCS8qIENhdXRpb3VzIHVucHJlZml4aW5nICovCi0jZW5kaWYgLyog Q0tfU1BFRUQgKi8KLX0KLQotCi0vKiBGb3Igc2FuaXR5LCB1c2UgImkiIGZvciBidWZmZXIgc2xv dHMsICJuIiBmb3IgcGFja2V0IG51bWJlcnMuICovCi0KLS8qIEkgTiBJIEIgVSBGIFMgKi8KLQot LyoKLSAgQWxsb2NhdGVzIHRoZSBiaWcgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzLgotICBDYWxs IHdpdGggc2l6ZSBmb3IgYmlnIHNlbmQgYnVmZmVyIChzKSBhbmQgcmVjZWl2ZSBidWZmZXIgKHIp LgotICBUaGVzZSBzaXplcyBjYW4gYmUgZGlmZmVyZW50LgotICBBdHRlbXB0cyB0byBhbGxvY2F0 ZSBidWZmZXJzIG9mIHRoZSByZXF1ZXN0ZWQgc2l6ZSwgYnV0IGlmIGl0IGNhbid0LAotICBpdCB3 aWxsIGFsbG9jYXRlIHNtYWxsZXIgb25lcy4KLSAgU2V0cyBnbG9iYWwgdmFyaWFibGVzIGJpZ3Ni c2l6IGFuZCBiaWdyYnNpeiB0byB0aGUgYWN0dWFsIHNpemVzLAotICBhbmQgYmlnc2J1ZiBhbmQg YmlncmJ1ZiBwb2ludGluZyB0byB0aGUgYWN0dWFsIGJ1ZmZlcnMuCi0gIERlc2lnbmVkIHRvIGJl IGNhbGxlZCBtb3JlIHRoYW4gb25jZS4KLSAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZh aWx1cmUuCi0qLwotCi1DSEFSICpiaWdidWZwID0gTlVMTDsKLQotaW50Ci1pbmlidWZzKHMscikg aW50IHMsIHI7IHsKLSNpZmRlZiBEWU5BTUlDCi0gICAgdW5zaWduZWQKLSAgICAgIGludCBzaXpl OwotI2lmZGVmIE9TMgotICAgIHVuc2lnbmVkCQkvKiBEb24ndCB5b3Ugd2lzaCBldmVyeWJvZHkg aGFkIHVuc2lnbmVkIGxvbmcuLi4gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgIGxvbmcgejsK LSAgICBpbnQgeDsKLQotICAgIGRlYnVnKEYxMDEsImluaWJ1ZnMgcyIsIiIscyk7Ci0gICAgZGVi dWcoRjEwMSwiaW5pYnVmcyByIiwiIixyKTsKLQotICAgIGlmIChzIDwgODAgfHwgciA8IDgwKSBy ZXR1cm4oLTEpOwkvKiBWYWxpZGF0ZSBhcmd1bWVudHMuICovCi0KLSAgICBpZiAoIXNfcGt0KSB7 CQkJLyogQWxsb2NhdGUgcGFja2V0IGluZm8gc3RydWN0dXJlcyAqLwotCWlmICghKHNfcGt0ID0g KHN0cnVjdCBwa3RpbmZvICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHBrdGluZm8pKk1BWFdTKSkp Ci0JICBmYXRhbCgiaW5pX3BrdHM6IG5vIG1lbW9yeSBmb3Igc19wa3QiKTsKLSAgICB9Ci0gICAg Zm9yICh4ID0gMDsgeCA8IE1BWFdTOyB4KyspCi0gICAgICBzX3BrdFt4XS5wa19hZHIgPSBOVUxM OwkJLyogSW5pdGlhbGl6ZSBhZGRyZXNzZXMgKi8KLQotICAgIGlmICghcl9wa3QpIHsKLQlpZiAo IShyX3BrdCA9IChzdHJ1Y3QgcGt0aW5mbyAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwa3RpbmZv KSpNQVhXUykpKQotCSAgZmF0YWwoImluaV9wa3RzOiBubyBtZW1vcnkgZm9yIHNfcGt0Iik7Ci0g ICAgfQotICAgIGZvciAoeCA9IDA7IHggPCBNQVhXUzsgeCsrKQotICAgICAgcl9wa3RbeF0ucGtf YWRyID0gTlVMTDsJCS8qIEluaXRpYWxpemUgYWRkcmVzc2VzICovCi0KLSAgICBpZiAoIXNydmNt ZCkgewkJCS8qIEFsbG9jYXRlIHNydmNtZCBidWZmZXIgKi8KLQlzcnZjbWQgPSAoQ0hBUiAqKSBt YWxsb2MociArIDEwMCk7Ci0JaWYgKCFzcnZjbWQpIHJldHVybigtMSk7Ci0Jc3J2Y21kbGVuID0g ciArIDk5OwotCSpzcnZjbWQgPSBOVUw7Ci0gICAgfQotICAgIGlmIChiaWdidWZwKSB7CQkJLyog RnJlZSBwcmV2aW91cyBidWZmZXJzLCBpZiBhbnkuICovCi0JZnJlZShiaWdidWZwKTsKLQliaWdi dWZwID0gTlVMTDsKLSAgICB9Ci0gICAgc2l6ZSA9IHMgKyByICsgNDA7CQkJLyogQ29tYmluZWQg cmVxdWVzdGVkIHNpemUgKyBwYWRkaW5nICovCi0gICAgeiAgPSAodW5zaWduZWQpIHMgKyAodW5z aWduZWQpIHIgKyA0MDsKLSAgICBkZWJ1ZyhGMTAxLCJpbmlidWZzIHNpemUgMSIsIiIsc2l6ZSk7 Ci0gICAgZGVidWcoRjEwMSwiaW5pYnVmcyBzaXplIHoiLCIiLHopOwotICAgIGlmICgobG9uZykg c2l6ZSAhPSB6KSB7Ci0JZGVidWcoRjEwMCwiaW5pYnVmcyBvdmVyZmxvdyIsIiIsMCk7Ci0Jc2l6 ZSA9IDY1NTM1OwotICAgIH0KLQotICAgIC8qIFRyeSB0byBnZXQgdGhlIHNwYWNlLiAgSWYgbWFs bG9jIGZhaWxzLCB0cnkgdG8gZ2V0IGEgbGl0dGxlIGxlc3MuICovCi0gICAgLyogKE9idmlvdXNs eSwgdGhpcyBhbGdvcml0aG0gY2FuIGJlIHJlZmluZWQuKSAqLwotCi0gICAgd2hpbGUgKCEoYmln YnVmcCA9IChDSEFSICopIG1hbGxvYyhzaXplKSkpIHsKLQlkZWJ1ZyhGMTAxLCJpbmlidWZzIGJp Z2J1ZiBtYWxsb2MgZmFpbGVkIiwiIixzaXplKTsKLQlzaXplID0gKHNpemUgKiAyKSAvIDM7CQkv KiBGYWlsZWQsIGN1dCBzaXplIGJ5IDEvMy4gKi8KLQlpZiAoc2l6ZSA8IDIwMCkJCQkvKiBUcnkg YWdhaW4gdW50aWwgdG9vIHNtYWxsLiAqLwotCSAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVi dWcoRjEwMSwiaW5pYnVmcyBzaXplIDIiLCIiLHNpemUpOyAvKiBPSywgd2UgZ290IHNvbWUgc3Bh Y2UuICovCi0KLS8qCi0gIE5vdyBkaXZpZGUgdGhlIGFsbG9jYXRlZCBzcGFjZSBiZXR3ZWVuIHRo ZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgaW4gdGhlCi0gIHJlcXVlc3RlZCBwcm9wb3J0aW9u LiAgVGhlIG5hdHVyYWwgZm9ybXVsYSB3b3VsZCBiZSAocyAvIChzICsgcikpICogc2l6ZQotICAo Zm9yIHRoZSBzZW5kIGJ1ZmZlciksIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayB3aXRoIGludGVnZXIg YXJpdGhtZXRpYyBhbmQgd2UKLSAgY2FuJ3QgdXNlIGZsb2F0aW5nIHBvaW50IGJlY2F1c2Ugc29t ZSBtYWNoaW5lcyBkb24ndCBoYXZlIGl0LiAgVGhpcyBjYW4gYmUKLSAgcmVhcnJhbmdlZCBhcyAo cyAqIHNpemUpIC8gKHMgKyByKS4gIEJ1dCAocyAqIHNpemUpIGNhbiBiZSBWRVJZIGxhcmdlLCB0 b28KLSAgbGFyZ2UgZm9yIDMyIGJpdHMuICBTbyBsZXQncyBkbyBpdCB0aGlzIHdheS4gIFRoaXMg YXJpdGhtZXRpYyB3b3JrcyBmb3IKLSAgYnVmZmVyIHNpemVzIHVwIHRvIGFib3V0IDUsMDAwLDAw MC4KLSovCi0jZGVmaW5lIEZBQ1RPUiAyMEwKLSAgICB6ID0gKCAobG9uZykgcyAqIEZBQ1RPUiAp IC8gKCAobG9uZykgcyArIChsb25nKSByICk7Ci0gICAgeCA9ICggeiAqICggKGxvbmcpIHNpemUg LyBGQUNUT1IgKSApOwotICAgIGlmICh4IDwgMCkgcmV0dXJuKC0xKTsJCS8qIENhdGNoIG92ZXJm bG93ICovCi0KLSAgICBiaWdzYnNpeiA9IHggLSA1OwkJCS8qIFNpemUgb2Ygc2VuZCBidWZmZXIg Ki8KLSAgICBiaWdzYnVmID0gYmlnYnVmcDsJCQkvKiBBZGRyZXNzIG9mIHNlbmQgYnVmZmVyICov Ci0gICAgZGVidWcoRjEwMSwiaW5pYnVmcyBiaWdzYnNpeiIsIiIsYmlnc2JzaXopOwotCi0gICAg YmlncmJzaXogPSBzaXplIC0geCAtIDU7CQkvKiBTaXplIG9mIHJlY2VpdmUgYnVmZmVyICovCi0g ICAgYmlncmJ1ZiA9IGJpZ2J1ZnAgKyB4OwkJLyogQWRkcmVzc3Mgb2YgcmVjZWl2ZSBidWZmZXIg Ki8KLSAgICBkZWJ1ZyhGMTAxLCJpbmlidWZzIGJpZ3Jic2l6IiwiIixiaWdyYnNpeik7Ci0KLSAg ICByZXR1cm4oMCk7CQkJCS8qIFN1Y2Nlc3MgKi8KLSNlbHNlCQkJCQkvKiBObyBkeW5hbWljIGFs bG9jYXRpb24gKi8KLSAgICBiaWdzYnNpeiA9IFNCU0laOwkJCS8qIEp1c3QgdXNlIHRoZSBzeW1i b2xzICovCi0gICAgYmlncmJzaXogPSBSQlNJWjsJCQkvKiAuLi4gKi8KLSAgICByZXR1cm4oMCk7 CQkJCS8qIFN1Y2Nlc3MuICovCi0jZW5kaWYgLyogRFlOQU1JQyAqLwotfQotCi0KLS8qIE0gQSBL IEUgQiBVIEYgIC0tICBNYWtlcyBhbmQgY2xlYXJzIGEgbmV3IGJ1ZmZlcnMuICAqLwotCi0vKiBD YWxsIHdpdGg6ICovCi0vKiAgc2xvdHM6ICBudW1iZXIgb2YgYnVmZmVyIHNsb3RzIHRvIG1ha2Us IDEgdG8gMzIgKi8KLS8qICBidWZzaXo6IHNpemUgb2YgdGhlIGJpZyBidWZmZXIgKi8KLS8qICBi dWY6ICAgIGFkZHJlc3Mgb2YgdGhlIGJpZyBidWZmZXIgKi8KLS8qICB4eDogICAgIHBvaW50ZXIg dG8gYXJyYXkgb2YgcGt0aW5mbyBzdHJ1Y3R1cmVzIGZvciB0aGVzZSBidWZmZXJzICovCi0KLS8q IFN1YmRpdmlkZXMgdGhlIGJpZyBidWZmZXIgaW50byAic2xvdHMiIGJ1ZmZlcnMuICovCi0KLS8q IFJldHVybnM6ICovCi0vKiAgLTEgaWYgdG9vIG1hbnkgb3IgdG9vIGZldyBzbG90cyByZXF1ZXN0 ZWQsICAgICAqLwotLyogIC0yIGlmIHNsb3RzIHdvdWxkIGJlIHRvbyBzbWFsbC4gICAgICAqLwot LyogICBuIChwb3NpdGl2ZSkgb24gc3VjY2VzcyA9IHNpemUgb2Ygb25lIGJ1ZmZlci4gKi8KLS8q ICAgd2l0aCBwa3RpbmZvIHN0cnVjdHVyZSBpbml0aWFsaXplZCBmb3IgdGhpcyBzZXQgb2YgYnVm ZmVycy4gKi8KLQotaW50Ci1tYWtlYnVmKHNsb3RzLGJ1ZnNpeixidWYseHgpCi0vKiBtYWtlYnVm ICovIGludCBzbG90cywgYnVmc2l6OyBDSEFSIGJ1ZltdOyBzdHJ1Y3QgcGt0aW5mbyAqeHg7IHsK LQotICAgIENIQVIgKmE7Ci0gICAgaW50IGksIHNpemU7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJtYWtl YnVmIiwiIixzbG90cyk7Ci0gICAgZGVidWcoRjEwMSwibWFrZWJ1ZiBidWZzaXoiLCIiLGJ1ZnNp eik7Ci0gICAgZGVidWcoRjEwMSwibWFrZWJ1ZiBNQVhXUyIsIiIsTUFYV1MpOwotCi0gICAgaWYg KHNsb3RzID4gTUFYV1MgfHwgc2xvdHMgPCAxKSByZXR1cm4oLTEpOwotICAgIGlmIChidWZzaXog PCBzbG90cyAqIDEwICkgcmV0dXJuKC0yKTsKLQotICAgIHNpemUgPSBidWZzaXogLyBzbG90czsJ CS8qIERpdmlkZSB1cCB0aGUgYmlnIGJ1ZmZlci4gKi8KLSAgICBhID0gYnVmOwkJCQkvKiBBZGRy ZXNzIG9mIGZpcnN0IHBpZWNlLiAqLwotCi0gICAgZm9yIChpID0gMDsgaSA8IHNsb3RzOyBpKysp IHsKLQlzdHJ1Y3QgcGt0aW5mbyAqeCA9ICZ4eFtpXTsKLQl4LT5iZl9hZHIgPSBhOwkJCS8qIEFk ZHJlc3Mgb2YgdGhpcyBidWZmZXIgKi8KLQl4LT5iZl9sZW4gPSBzaXplOwkJLyogTGVuZ3RoIG9m IHRoaXMgYnVmZmVyICovCi0JeC0+cGtfbGVuID0gMDsJCQkvKiBMZW5ndGggb2YgZGF0YSBmaWVs ZCAqLwotICAgICAgICB4LT5wa190eXAgPSAnICc7CQkvKiBwYWNrZXQgdHlwZSAqLwotCXgtPnBr X3NlcSA9IC0xOwkJCS8qIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgKi8KLSAgICAgICAgeC0+cGtf cnRyID0gMDsJCQkvKiByZXRyYW5zbWlzc2lvbnMgKi8KLQkqYSA9ICdcMCc7CQkJLyogQ2xlYXIg dGhlIGJ1ZmZlciAqLwotCWEgKz0gc2l6ZTsJCQkvKiBQb3NpdGlvbiB0byBuZXh0IGJ1ZmZlciBz bG90ICovCi0gICAgfQotICAgIHJldHVybihzaXplKTsKLX0KLQotLyogIE0gQSBLIFMgQiBVIEYg IC0tICBNYWtlcyB0aGUgc2VuZC1wYWNrZXQgYnVmZmVyICAqLwotCi1pbnQKLW1rc2J1ZihzbG90 cykgaW50IHNsb3RzOyB7Ci0gICAgaW50IGksIHg7Ci0gICAgc2J1Zm51bSA9IDA7Ci0gICAgaWYg KCh4ID0gbWFrZWJ1ZihzbG90cyxiaWdzYnNpeixiaWdzYnVmLHNfcGt0KSkgPCAwKSB7Ci0JZGVi dWcoRjEwMSwibWtzYnVmIG1ha2VidWYgcmV0dXJuIiwiIix4KTsKLQlyZXR1cm4oeCk7Ci0gICAg fQotICAgIGRlYnVnKEYxMDEsIm1rc2J1ZiBtYWtlYnVmIHJldHVybiIsIiIseCk7Ci0gICAgZm9y IChpID0gMDsgaSA8IDY0OyBpKyspIHsJCS8qIEluaXRpYWxpemUgc2VxdWVuY2UtbnVtYmVyLSAq LwotCXNzZXF0YmxbaV0gPSAtMTsJCS8qIHRvLWJ1ZmZlci1udW1iZXIgdGFibGUuICovCi0gICAg ICAgIHNhY2t0YmxbaV0gPSAwOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgTUFYV1M7IGkr KykKLSAgICAgIHNidWZ1c2VbaV0gPSAwOwkJCS8qIE1hcmsgZWFjaCBidWZmZXIgYXMgZnJlZSAq LwotICAgIHNidWZudW0gPSBzbG90czsKLSAgICB3Y3VyID0gMDsKLSAgICByZXR1cm4oeCk7Ci19 Ci0KLS8qICBNIEEgSyBSIEIgVSBGICAtLSAgTWFrZXMgdGhlIHJlY2VpdmUtcGFja2V0IGJ1ZmZl ciAgKi8KLQotaW50Ci1ta3JidWYoc2xvdHMpIGludCBzbG90czsgewotICAgIGludCBpLCB4Owot ICAgIHJidWZudW0gPSAwOwotICAgIGlmICgoeCA9IG1ha2VidWYoc2xvdHMsYmlncmJzaXosYmln cmJ1ZixyX3BrdCkpIDwgMCkgewotCWRlYnVnKEYxMDEsIm1rcmJ1ZiBtYWtlYnVmIHJldHVybiIs IiIseCk7Ci0JcmV0dXJuKHgpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJta3JidWYgbWFrZWJ1 ZiByZXR1cm4iLCIiLHgpOwotICAgIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CQkvKiBJbml0 aWFsaXplIHNlcXVlbmNlLW51bWJlci0gKi8KLQlyc2VxdGJsW2ldID0gLTE7CQkvKiB0by1idWZm ZXItbnVtYmVyIHRhYmxlLiAqLwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgTUFYV1M7IGkr KykKLSAgICAgIHJidWZ1c2VbaV0gPSAwOwkJCS8qIE1hcmsgZWFjaCBidWZmZXIgYXMgZnJlZSAq LwotICAgIHJidWZudW0gPSBzbG90czsKLSAgICB3Y3VyID0gMDsKLSAgICByZXR1cm4oeCk7Ci19 Ci0KLS8qICBXIEkgTiBEIE8gVyAgLS0gIFJlc2l6ZSB0aGUgd2luZG93IHRvIG4gICovCi0KLWlu dAotd2luZG93KG4pIGludCBuOyB7Ci0gICAgZGVidWcoRjEwMSwid2luZG93IiwiIixuKTsKLSAg ICBpZiAobiA8IDEgfHwgbiA+IE1BWFdTKSByZXR1cm4oLTEpOwotICAgIGlmIChta3NidWYobikg PCAwKSByZXR1cm4oLTEpOwotICAgIGlmIChta3JidWYobikgPCAwKSByZXR1cm4oLTEpOwotICAg IHdzbG90cyA9IG47Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSBkdW1wc2J1ZigpOwot ICAgIGlmIChkZWJsb2cpIGR1bXByYnVmKCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByZXR1 cm4oMCk7Ci19Ci0KLS8qICBHIEUgVCBTIEIgVSBGICAtLSAgQWxsb2NhdGUgYSBzZW5kLWJ1ZmZl ci4gICovCi0KLS8qICBDYWxsIHdpdGggcGFja2V0IHNlcXVlbmNlIG51bWJlciB0byBhbGxvY2F0 ZSBidWZmZXIgZm9yLiAqLwotLyogIFJldHVybnM6ICovCi0vKiAgIC00IGlmIGFyZ3VtZW50IGlz IGludmFsaWQgKG5lZ2F0aXZlLCBvciBncmVhdGVyIHRoYW4gNjMpICovCi0vKiAgIC0zIGlmIGJ1 ZmZlcnMgd2VyZSB0aG91Z2h0IHRvIGJlIGF2YWlsYWJsZSBidXQgcmVhbGx5IHdlcmVuJ3QgKGJ1 ZyEpICovCi0vKiAgIC0yIGlmIHRoZSBudW1iZXIgb2YgZnJlZSBidWZmZXJzIGlzIG5lZ2F0aXZl IChidWchKSAqLwotLyogICAtMSBpZiBubyBmcmVlIGJ1ZmZlcnMuICovCi0vKiAgIDAgb3IgcG9z aXRpdmUsIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIsIHdpdGggYnVmZmVyIGFsbG9jYXRlZCBmb3Ig aXQuICovCi0KLWludAotZ2V0c2J1ZihuKSBpbnQgbjsgewkJCS8qIEFsbG9jYXRlIGEgc2VuZC1i dWZmZXIgKi8KLSAgICBpbnQgaTsKLSAgICBDSEFSICogcCA9IE5VTEw7Ci0gICAgaWYgKG4gPCAw IHx8IG4gPiA2MykgewotCWRlYnVnKEYxMDEsImdldHNidWYgYmFkIGFyZyIsIiIsbik7Ci0JcmV0 dXJuKC00KTsJLyogQmFkIGFyZ3VtZW50ICovCi0gICAgfQotICAgIGRlYnVnKEYxMDEsImdldHNi dWYgcGFja2V0IiwiIixuKTsKLSAgICAvKiBkZWJ1ZyhGMTAxLCJnZXRzYnVmLCBzYnVmbnVtIiwi IixzYnVmbnVtKTsgKi8KLSAgICBpZiAoc2J1Zm51bSA9PSAwKSByZXR1cm4oLTEpOwkvKiBObyBm cmVlIGJ1ZmZlcnMuICovCi0gICAgaWYgKHNidWZudW0gPCAwKSByZXR1cm4oLTIpOwkvKiBTaG91 bGRuJ3QgaGFwcGVuLiAqLwotICAgIGZvciAoaSA9IDA7IGkgPCB3c2xvdHM7IGkrKykJLyogRmlu ZCB0aGUgZmlyc3Qgb25lIG5vdCBpbiB1c2UuICovCi0gICAgICBpZiAoc2J1ZnVzZVtpXSA9PSAw KSB7CQkvKiBHb3Qgb25lPyAqLwotCSAgc2J1ZnVzZVtpXSA9IDE7CQkvKiBNYXJrIGl0IGFzIGlu IHVzZS4gKi8KLQkgIHNidWZudW0tLTsJCQkvKiBPbmUgbGVzcyBmcmVlIGJ1ZmZlci4gKi8KLQkg ICpzX3BrdFtpXS5iZl9hZHIgPSAnXDAnOwkvKiBaZXJvIHRoZSBidWZmZXIgZGF0YSBmaWVsZCAq LwotCSAgc19wa3RbaV0ucGtfc2VxID0gbjsJCS8qIFB1dCBpbiB0aGUgc2VxdWVuY2UgbnVtYmVy ICovCi0gICAgICAgICAgc3NlcXRibFtuXSA9IGk7CQkvKiBCYWNrIHBvaW50ZXIgZnJvbSBzZXF1 ZW5jZSBudW1iZXIgKi8KLSAgICAgICAgICBzYWNrdGJsW25dID0gMDsJCS8qIEFDSyBmbGFnICov Ci0JICBzX3BrdFtpXS5wa19sZW4gPSAwOwkJLyogRGF0YSBmaWVsZCBsZW5ndGggbm93IHplcm8u ICovCi0JICBzX3BrdFtpXS5wa190eXAgPSAnICc7CS8qIEJsYW5rIHRoZSBwYWNrZXQgdHlwZSB0 b28uICovCi0JICBzX3BrdFtpXS5wa19ydHIgPSAwOwkJLyogWmVybyB0aGUgcmV0cmFuc21pc3Np b24gY291bnQgKi8KLQkgIHAgPSBzX3BrdFtpXS5iZl9hZHIgKyA3OwkvKiBTZXQgZ2xvYmFsICJk YXRhIiBhZGRyZXNzLiAqLwotCSAgZGVidWcoRjEwMSwiZ2V0c2J1ZiBwIiwiIiwwKTsKLQkgIGRh dGEgPSBwOwotCSAgaWYgKCFkYXRhKSB7Ci0JICAgICAgZGVidWcoRjEwMCwiZ2V0c2J1ZiBkYXRh ID09IE5VTEwiLCIiLDApOwotICAgICAgICAgICAgICByZXR1cm4oLTMpOwotICAgICAgICAgIH0K LQkgIGlmICgod2hhdCAmIChXX1NFTkR8V19SRU1PKSkgJiYgKCsrd2N1ciA+IHdtYXgpKQotCSAg ICB3bWF4ID0gd2N1cjsJCS8qIEZvciBzdGF0aXN0aWNzLiAqLwotCSAgLyogZGVidWcoRjEwMSwi Z2V0c2J1ZiB3Y3VyIiwiIix3Y3VyKTsgKi8KLQkgIHJldHVybihuKTsJCQkvKiBSZXR1cm4gaXRz IGluZGV4LiAqLwotICAgICAgfQotICAgIHNidWZudW0gPSAwOwkJCS8qIERpZG4ndCBmaW5kIG9u ZS4gKi8KLSAgICByZXR1cm4oLTMpOwkJCQkvKiBTaG91bGRuJ3QgaGFwcGVuISAqLwotfQotCi1p bnQKLWdldHJidWYoKSB7CQkJCS8qIEFsbG9jYXRlIGEgcmVjZWl2ZSBidWZmZXIgKi8KLSAgICBp bnQgaTsKLSNpZmRlZiBDT01NRU5UCi0gICAgLyogVGhpcyBjb2RlIGlzIHByZXR0eSBzdGFibGUg Ynkgbm93Li4uICovCi0gICAgLyogTG9va3MgbGlrZSB3ZSBtaWdodCBuZWVkIHRoaXMgYWZ0ZXIg YWxsICovCi0gICAgZGVidWcoRjEwMSwiZ2V0cmJ1ZiByYnVmbnVtIiwiIixyYnVmbnVtKTsKLSAg ICBkZWJ1ZyhGMTAxLCJnZXRyYnVmIHdzbG90cyIsIiIsd3Nsb3RzKTsKLSAgICBkZWJ1ZyhGMTAx LCJnZXRyYnVmIGR1bTAwMiIsIiIsZHVtMDAyKTsKLSAgICBkZWJ1ZyhGMTAxLCJnZXRyYnVmIGR1 bTAwMyIsIiIsZHVtMDAzKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgaWYgKHJidWZudW0g PT0gMCkgcmV0dXJuKC0xKTsJLyogTm8gZnJlZSBidWZmZXJzLiAqLwotICAgIGlmIChyYnVmbnVt IDwgMCkgcmV0dXJuKC0yKTsJLyogU2hvdWxkbid0IGhhcHBlbi4gKi8KLSAgICBmb3IgKGkgPSAw OyBpIDwgd3Nsb3RzOyBpKyspCS8qIEZpbmQgdGhlIGZpcnN0IG9uZSBub3QgaW4gdXNlLiAqLwot ICAgICAgaWYgKHJidWZ1c2VbaV0gPT0gMCkgewkJLyogR290IG9uZT8gKi8KLQkgIHJidWZ1c2Vb aV0gPSAxOwkJLyogTWFyayBpdCBhcyBpbiB1c2UuICovCi0JICAqcl9wa3RbaV0uYmZfYWRyID0g J1wwJzsJLyogWmVybyB0aGUgYnVmZmVyIGRhdGEgZmllbGQgKi8KLQkgIHJidWZudW0tLTsJCQkv KiBPbmUgbGVzcyBmcmVlIGJ1ZmZlci4gKi8KLQkgIGRlYnVnKEYxMDEsImdldHJidWYgbmV3IHJi dWZudW0iLCIiLHJidWZudW0pOwotCSAgaWYgKCh3aGF0ICYgV19SRUNWKSAmJiAoKyt3Y3VyID4g d21heCkpCi0JICAgIHdtYXggPSB3Y3VyOwkJLyogRm9yIHN0YXRpc3RpY3MuICovCi0JICAvKiBk ZWJ1ZyhGMTAxLCJnZXRyYnVmIHdjdXIiLCIiLHdjdXIpOyAqLwotCSAgcmV0dXJuKGkpOwkJCS8q IFJldHVybiBpdHMgaW5kZXguICovCi0gICAgICB9Ci0gICAgLyogZGVidWcoRjEwMSwiZ2V0cmJ1 ZiBmb3VsdXAiLCIiLGkpOyAqLwotICAgIHJidWZudW0gPSAwOwkJCS8qIERpZG4ndCBmaW5kIG9u ZS4gKi8KLSAgICByZXR1cm4oLTMpOwkJCQkvKiBTaG91bGRuJ3QgaGFwcGVuISAqLwotfQotCi0v KiAgRiBSIEUgRSBTIEIgVSBGICAtLSAgRnJlZSBzZW5kLWJ1ZmZlciBmb3IgZ2l2ZW4gcGFja2V0 IHNlcXVlbmNlIG51bWJlciAqLwotCi0vKiAgUmV0dXJuczogICovCi0vKiAgIDEgdXBvbiBzdWNj ZXNzICAqLwotLyogIC0xIGlmIHNwZWNpZmllZCBidWZmZXIgZG9lcyBub3QgZXhpc3QgKi8KLQot aW50Ci1mcmVlc2J1ZihuKSBpbnQgbjsgewkJCS8qIFJlbGVhc2Ugc2VuZC1idWZmZXIgZm9yIHBh Y2tldCBuLiAqLwotICAgIGludCBpOwotCi0gICAgZGVidWcoRjEwMSwiZnJlZXNidWYiLCIiLG4p OwotICAgIGlmIChuIDwgMCB8fCBuID4gNjMpCQkvKiBObyBzdWNoIHBhY2tldC4gKi8KLSAgICAg IHJldHVybigtMSk7Ci0gICAgaSA9IHNzZXF0Ymxbbl07CQkJLyogR2V0IHRoZSB3aW5kb3cgc2xv dCBudW1iZXIuICovCi0gICAgaWYgKGkgPiAtMSAmJiBpIDw9IHdzbG90cykgewotCXNzZXF0Ymxb bl0gPSAtMTsJCS8qIElmIHZhbGlkLCByZW1vdmUgZnJvbSBzZXF0YmwgKi8KLSAJc2J1Zm51bSsr OwkJCS8qIGFuZCBjb3VudCBvbmUgbW9yZSBmcmVlIGJ1ZmZlciAqLwotCXNidWZ1c2VbaV0gPSAw OwkJCS8qIGFuZCBtYXJrIGl0IGFzIGZyZWUsICovCi0JaWYgKHdoYXQgJiAoV19TRU5EfFdfUkVN TykpCS8qIGRlY3JlbWVudCBhY3RpdmUgc2xvdHMgKi8KLQkgIHdjdXItLTsJCQkvKiBmb3Igc3Rh dGlzdGljcyBhbmQgZGlzcGxheS4gKi8KLSAgICB9IGVsc2UgewotCWRlYnVnKEYxMDEsIiBzc2Vx dGJsW25dIiwiIixzc2VxdGJsW25dKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLQotLyogVGhlIGZv bGxvd2luZyBpcyBkb25lIG9ubHkgc28gZHVtcGVkIGJ1ZmZlcnMgd2lsbCBsb29rIHJpZ2h0LiAq LwotCi0gICAgaWYgKDEpIHsKLQkqc19wa3RbaV0uYmZfYWRyID0gJ1wwJzsJLyogWmVybyB0aGUg YnVmZmVyIGRhdGEgZmllbGQgKi8KLQlzX3BrdFtpXS5wa19zZXEgPSAtMTsJCS8qIEludmFsaWRh dGUgdGhlIHNlcXVlbmNlIG51bWJlciAqLwotCXNfcGt0W2ldLnBrX2xlbiA9IDA7CQkvKiBEYXRh IGZpZWxkIGxlbmd0aCBub3cgemVyby4gKi8KLQlzX3BrdFtpXS5wa190eXAgPSAnICc7CQkvKiBC bGFuayB0aGUgcGFja2V0IHR5cGUgdG9vLiAqLwotCXNfcGt0W2ldLnBrX3J0ciA9IDA7CQkvKiBB bmQgdGhlIHJldHJpZXMgZmllbGQuICovCi0gICAgfQotICAgIHJldHVybigxKTsKLX0KLQotaW50 Ci1mcmVlcmJ1ZihpKSBpbnQgaTsgewkJCS8qIFJlbGVhc2UgcmVjZWl2ZS1idWZmZXIgc2xvdCAi aSIuICovCi0gICAgaW50IG47Ci0KLS8qIE5PVEUgISEgQ3VycmVudGx5LCB0aGlzIGZ1bmN0aW9u IGZyZWVzIHRoZSBpbmRpY2F0ZWQgYnVmZmVyLCBidXQgKi8KLS8qIGRvZXMgTk9UIGVyYXNlIHRo ZSBkYXRhLiAgVGhlIHByb2dyYW0gY291bnRzIG9uIHRoaXMuICBXaWxsIGZpbmQgYSAqLwotLyog YmV0dGVyIHdheSBsYXRlci4uLi4gKi8KLQotICAgIC8qIGRlYnVnKEYxMDEsImZyZWVyYnVmLCBz bG90IiwiIixpKTsgKi8KLSAgICBpZiAoaSA8IDAgfHwgaSA+PSB3c2xvdHMpIHsJCS8qIE5vIHN1 Y2ggc2xvdC4gKi8KLQlkZWJ1ZyhGMTAxLCJmcmVlcmJ1ZiBubyBzdWNoIHNsb3QiLCIiLGkpOwot CXJldHVybigtMSk7Ci0gICAgfQotICAgIG4gPSByX3BrdFtpXS5wa19zZXE7CQkvKiBHZXQgdGhl IHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgKi8KLSAgICBkZWJ1ZyhGMTAxLCJmcmVlcmJ1ZiBwYWNr ZXQiLCIiLG4pOwotICAgIGlmIChuID4gLTEgJiYgbiA8IDY0KQkJLyogSWYgdmFsaWQsIHJlbW92 ZSBmcm9tIHNlcXRibCAqLwotICAgICAgcnNlcXRibFtuXSA9IC0xOwotICAgIGlmIChyYnVmdXNl W2ldICE9IDApIHsJCS8qIElmIHJlYWxseSBhbGxvY2F0ZWQsICovCi0JcmJ1ZnVzZVtpXSA9IDA7 CQkJLyogbWFyayBpdCBhcyBmcmVlLCAqLwotCXJidWZudW0rKzsJCQkvKiBhbmQgY291bnQgb25l IG1vcmUgZnJlZSBidWZmZXIuICovCi0JaWYgKHdoYXQgJiBXX1JFQ1YpCQkvKiBLZWVwIHRyYWNr IG9mIGN1cnJlbnQgc2xvdHMgKi8KLQkgIHdjdXItLTsJCQkvKiAgZm9yIHN0YXRpc3RpY3MgYW5k IGRpc3BsYXkgKi8KLQlkZWJ1ZyhGMTAxLCJmcmVlcmJ1ZiByYnVmbnVtIiwiIixyYnVmbnVtKTsK LSAgICB9Ci0KLS8qIFRoZSBmb2xsb3dpbmcgaXMgZG9uZSBvbmx5IHNvIGR1bXBlZCBidWZmZXJz IHdpbGwgbG9vayByaWdodC4gKi8KLQotICAgIGlmICgxKSB7Ci0gICAgIC8qICpyX3BrdFtpXS5i Zl9hZHIgPSAnXDAnOyAqLwkvKiBaZXJvIHRoZSBidWZmZXIgZGF0YSBmaWVsZCAqLwotCXJfcGt0 W2ldLnBrX3NlcSA9IC0xOwkJLyogQW5kIGZyb20gcGFja2V0IGxpc3QgKi8KLQlyX3BrdFtpXS5w a19sZW4gPSAwOwkJLyogRGF0YSBmaWVsZCBsZW5ndGggbm93IHplcm8uICovCi0Jcl9wa3RbaV0u cGtfdHlwID0gJyAnOwkJLyogQmxhbmsgdGhlIHBhY2tldCB0eXBlIHRvby4gKi8KLQlyX3BrdFtp XS5wa19ydHIgPSAwOwkJLyogQW5kIHRoZSByZXRyaWVzIGZpZWxkLiAqLwotICAgIH0KLSAgICBy ZXR1cm4oMSk7Ci19Ci0KLS8qIFRoaXMgaXMgbGlrZSBmcmVlcmJ1ZiwgZXhjZXB0IGl0J3MgY2Fs bGVkIHdpdGggYSBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyICovCi0vKiByYXRoZXIgdGhhbiBhIHBh Y2tldCBidWZmZXIgaW5kZXguICovCi0KLVZPSUQKLWZyZWVycGt0KHNlcSkgaW50IHNlcTsgewot ICAgIGludCBrOwotICAgIGRlYnVnKEYxMDEsImZyZWVycGt0IHNlcSIsIiIsc2VxKTsKLSAgICBr ID0gcnNlcXRibFtzZXFdOwotICAgIC8qIGRlYnVnKEYxMDEsImZyZWVycGt0IGsiLCIiLGspOyAq LwotICAgIGlmIChrID4gLTEpIHsKLQlrID0gZnJlZXJidWYoayk7Ci0JLyogZGVidWcoRjEwMSwi ZnJlZXJwa3QgZnJlZXJidWYiLCIiLGspOyAqLwotICAgIH0KLX0KLQotCi0vKiAgQyBIIEsgVyBJ IE4gIC0tICBDaGVjayBpZiBwYWNrZXQgbiBpcyBpbiB3aW5kb3cuICovCi0KLS8qICBSZXR1cm5z OiAqLwotLyogICAgMCBpZiBpdCBpcyBpbiB0aGUgY3VycmVudCB3aW5kb3csICAqLwotLyogICAr MSBpZiBpdCB3b3VsZCBoYXZlIGJlZW4gaW4gcHJldmlvdXMgd2luZG93IChlLmcuIGlmIGFjayB3 YXMgbG9zdCksICovCi0vKiAgIC0xIGlmIGl0IGlzIG91dHNpZGUgYW55IHdpbmRvdyAocHJvdG9j b2wgZXJyb3IpLCAgICovCi0vKiAgIC0yIGlmIGVpdGhlciBvZiB0aGUgYXJndW1lbnQgcGFja2V0 IG51bWJlcnMgaXMgb3V0IG9mIHJhbmdlLiAgKi8KLQotLyogQ2FsbCB3aXRoIHBhY2tldCBudW1i ZXIgdG8gY2hlY2sgKG4pLCBsb3dlc3QgcGFja2V0IG51bWJlciBpbiB3aW5kb3cgKi8KLS8qIChi b3R0b20pLCBhbmQgbnVtYmVyIG9mIHNsb3RzIGluIHdpbmRvdyAoc2xvdHMpLiAgKi8KLQotaW50 Ci1jaGt3aW4obixib3R0b20sc2xvdHMpIGludCBuLCBib3R0b20sIHNsb3RzOyB7Ci0gICAgaW50 IHRvcCwgcHJldjsKLQotICAgIGRlYnVnKEYxMDEsImNoa3dpbiBwYWNrZXQiLCIiLG4pOwotICAg IGRlYnVnKEYxMDEsImNoa3dpbiB3aW5sbyIsIiIsYm90dG9tKTsKLSAgICBkZWJ1ZyhGMTAxLCJj aGt3aW4gc2xvdHMiLCIiLHNsb3RzKTsKLQotLyogRmlyc3QgZG8gdGhlIGVhc3kgYW5kIGNvbW1v biBjYXNlcywgd2hlcmUgdGhlIHdpbmRvd3MgYXJlIG5vdCBzcGxpdC4gKi8KLQotICAgIGlmIChu IDwgMCB8fCBuID4gNjMgfHwgYm90dG9tIDwgMCB8fCBib3R0b20gPiA2MykKLSAgICAgIHJldHVy bigtMik7Ci0KLSAgICBpZiAobiA9PSBib3R0b20pIHJldHVybigwKTsJCS8qIEluIGEgcGVyZmVj dCB3b3JsZC4uLiAqLwotCi0gICAgdG9wID0gYm90dG9tICsgc2xvdHM7CQkvKiBDYWxjdWxhdGUg d2luZG93IHRvcC4gKi8KLSAgICBpZiAodG9wIDwgNjQgJiYgbiA8IHRvcCAmJiBuID49IGJvdHRv bSkKLSAgICAgIHJldHVybigwKTsJCQkvKiBJbiBjdXJyZW50IHdpbmRvdy4gKi8KLQotICAgIHBy ZXYgPSBib3R0b20gLSBzbG90czsJCS8qIEJvdHRvbSBvZiBwcmV2aW91cyB3aW5kb3cuICovCi0g ICAgaWYgKHByZXYgPiAtMSAmJiBuIDwgYm90dG9tICYmIG4gPiBwcmV2KQotICAgICAgcmV0dXJu KDEpOwkJCS8qIEluIHByZXZpb3VzLiAqLwotCi0vKiBOb3cgY29uc2lkZXIgdGhlIGNhc2Ugd2hl cmUgdGhlIGN1cnJlbnQgd2luZG93IGlzIHNwbGl0LiAqLwotCi0gICAgaWYgKHRvcCA+IDYzKSB7 CQkJLyogV3JhcGFyb3VuZC4uLiAqLwotCXRvcCAtPSA2NDsJCQkvKiBHZXQgbW9kdWxvLTY0IHNl cXVlbmNlIG51bWJlciAqLwotCWlmIChuIDwgdG9wIHx8IG4gPj0gYm90dG9tKSB7Ci0JICAgIHJl dHVybigwKTsJCQkvKiBJbiBjdXJyZW50IHdpbmRvdy4gKi8KLQl9IGVsc2UgewkJCS8qIE5vdCBp biBjdXJyZW50IHdpbmRvdy4gKi8KLQkgICAgaWYgKG4gPCBib3R0b20gJiYgbiA+PSBwcmV2KSAv KiBQcmV2aW91cyB3aW5kb3cgY2FuJ3QgYmUgc3BsaXQuICovCi0JICAgICAgcmV0dXJuKDEpOwkJ LyogSW4gcHJldmlvdXMgd2luZG93LiAqLwotCSAgICBlbHNlCi0JICAgICAgcmV0dXJuKC0xKTsJ CS8qIE5vdCBpbiBwcmV2aW91cyB3aW5kb3cuICovCi0JfQotICAgIH0KLQotLyogTm93IHRoZSBj YXNlIHdoZXJlIGN1cnJlbnQgd2luZG93IG5vdCBzcGxpdCwgYnV0IHByZXZpb3VzIHdpbmRvdyBp cy4gKi8KLQotICAgIGlmIChwcmV2IDwgMCkgewkJCS8qIElzIHByZXZpb3VzIHdpbmRvdyBzcGxp dD8gKi8KLQlwcmV2ICs9IDY0OwkJCS8qIFllcy4gKi8KLQlpZiAobiA8IGJvdHRvbSB8fCBuID49 IHByZXYpCi0JICByZXR1cm4oMSk7CQkJLyogSW4gcHJldmlvdXMgd2luZG93LiAqLwotICAgIH0g ZWxzZSB7CQkJCS8qIFByZXZpb3VzIHdpbmRvdyBub3Qgc3BsaXQuICovCi0JaWYgKG4gPCBib3R0 b20gJiYgbiA+PSBwcmV2KQotCSAgcmV0dXJuKDEpOwkJCS8qIEluIHByZXZpb3VzIHdpbmRvdy4g Ki8KLSAgICB9Ci0KLS8qIEl0J3Mgbm90IGluIHRoZSBjdXJyZW50IHdpbmRvdywgYW5kIG5vdCBp biB0aGUgcHJldmlvdXMgd2luZG93Li4uICovCi0KLSAgICByZXR1cm4oLTEpOwkJCQkvKiBTbyBp dCdzIG5vdCBpbiBhbnkgd2luZG93LiAqLwotfQotCi1pbnQKLWR1bXBzYnVmKCkgewkJCQkvKiBE dW1wIHNlbmQtYnVmZmVycyAqLwotI2lmZGVmIERFQlVHCi0gICAgaW50IGosIHgsIHo7CQkJLyog dG8gZGVidWcgbG9nLiAqLwotCi0gICAgaWYgKCEgZGVibG9nKSByZXR1cm4oMCk7Ci0gICAgeCA9 IHpzb3V0bChaREZJTEUsIlNFTkQgQlVGRkVSUzoiKTsKLSAgICBpZiAoeCA8IDApIHsKLQlkZWJs b2cgPSAwOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgeD16c291dGwoWkRGSUxFLCJidWZmZXIg aW51c2UgYWRkcmVzcyBsZW5ndGggZGF0YSB0eXBlIHNlcSBmbGFnIHJldHJpZXMiKTsKLSAgICBp ZiAoeCA8IDApIHsKLQlkZWJsb2cgPSAwOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgZm9yIChq ID0gMDsgaiA8IHdzbG90czsgaisrKSB7Ci0JaWYgKCFzYnVmdXNlW2pdKQotCSAgY29udGludWU7 Ci0JeiA9ICgodW5zaWduZWQgbG9uZykoc19wa3Rbal0uYmZfYWRyKSkgJiAweGZmZmY7Ci0KLQlz cHJpbnRmKHhidWYsCQkJLyogc2FmZSAoMjAwKSAqLwotCQkiJTRkJTZkJTEwZCU1ZCU2ZCU0YyU1 ZCU2ZFxuIiwKLQkJaiwKLQkJc2J1ZnVzZVtqXSwKLQkJLyogQXZvaWQgd2FybmluZ3Mgd2hlbiBh ZGRyZXNzZXMgYXJlIGJpZ2dlciB0aGFuIGludHMgKi8KLQkJeiwKLQkJc19wa3Rbal0uYmZfbGVu LAotCQlzX3BrdFtqXS5wa19sZW4sCi0JCXNfcGt0W2pdLnBrX3R5cCwKLQkJc19wa3Rbal0ucGtf c2VxLAotCQlzX3BrdFtqXS5wa19ydHIKLQkJKTsKLQlpZiAoenNvdXQoWkRGSUxFLHhidWYpIDwg MCkgIHsKLQkgICAgZGVibG9nID0gMDsKLQkgICAgcmV0dXJuKDApOwotCX0KLQlpZiAoc19wa3Rb al0ucGtfYWRyKSB7Ci0JICAgIHggPSAoaW50KXN0cmxlbigoY2hhciAqKSBzX3BrdFtqXS5wa19h ZHIpOwotCSAgICBpZiAoeCkKLQkgICAgICBzcHJpbnRmKHhidWYsCQkvKiBzYWZlIChjaGVja2Vk KSAqLwotCQkgICAgICAiWyUuNzJzJXNdXG4iLHNfcGt0W2pdLnBrX2FkciwgeCA+IDcyID8gIi4u LiIgOiAiIik7Ci0JICAgIGVsc2UKLQkgICAgICBzcHJpbnRmKHhidWYsIlsoZW1wdHkgc3RyaW5n KV1cbiIpOyAvKiBzYWZlICgyMDApICovCi0JfSBlbHNlIHsKLQkgICAgc3ByaW50Zih4YnVmLCJb KG51bGwgcG9pbnRlcildXG4iKTsJLyogc2FmZSAoMjAwKSAqLwotCX0KLQlpZiAoenNvdXQoWkRG SUxFLHhidWYpIDwgMCkgewotCSAgICBkZWJsb2cgPSAwOwotCSAgICByZXR1cm4oMCk7Ci0JfQot ICAgIH0KLSAgICBzcHJpbnRmKHhidWYsImZyZWU6ICVkLCB3aW5sbzogJWRcbiIsIHNidWZudW0s IHdpbmxvKTsgLyogc2FmZSAoMjAwKSAqLwotICAgIGlmICh6c291dChaREZJTEUseGJ1ZikgPCAw KSB7Ci0JZGVibG9nID0gMDsKLQlyZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICov Ci0gICAgcmV0dXJuKDApOwotfQotaW50Ci1kdW1wcmJ1ZigpIHsJCQkJLyogRHVtcCByZWNlaXZl LWJ1ZmZlcnMgKi8KLSNpZmRlZiBERUJVRwotICAgIGludCBqLCB4LCB6OwotICAgIGlmICghIGRl YmxvZykgcmV0dXJuKDApOwotICAgIGlmICh6c291dGwoWkRGSUxFLCJSRUNFSVZFIEJVRkZFUlM6 IikgPCAwKSB7Ci0JZGVibG9nID0gMDsKLQlyZXR1cm4oMCk7Ci0gICAgfQotICAgIHg9enNvdXRs KFpERklMRSwiYnVmZmVyIGludXNlIGFkZHJlc3MgbGVuZ3RoIGRhdGEgdHlwZSBzZXEgZmxhZyBy ZXRyaWVzIik7Ci0gICAgaWYgKHggPCAwKSB7Ci0JZGVibG9nID0gMDsKLQlyZXR1cm4oMCk7Ci0g ICAgfQotICAgIGZvciAoIGogPSAwOyBqIDwgd3Nsb3RzOyBqKysgKSB7Ci0JaWYgKCFyYnVmdXNl W2pdKQotCSAgY29udGludWU7Ci0JeiA9ICgodW5zaWduZWQgbG9uZykocl9wa3Rbal0uYmZfYWRy KSkgJiAweGZmZmY7Ci0Jc3ByaW50Zih4YnVmLAkJCS8qIDIwMCwgc2FmZSAqLwotCQkiJTRkJTZk JTEwZCU1ZCU2ZCU0YyU1ZCU2ZFxuIiwKLQkJaiwKLQkJcmJ1ZnVzZVtqXSwKLQkJLyogQXZvaWQg d2FybmluZ3Mgd2hlbiBhZGRyZXNzZXMgYXJlIGJpZ2dlciB0aGFuIGludHMgKi8KLQkJeiwKLQkJ cl9wa3Rbal0uYmZfbGVuLAotCQlyX3BrdFtqXS5wa19sZW4sCi0JCXJfcGt0W2pdLnBrX3R5cCwK LQkJcl9wa3Rbal0ucGtfc2VxLAotCQlyX3BrdFtqXS5wa19ydHIKLQkJKTsKLQlpZiAoenNvdXQo WkRGSUxFLHhidWYpIDwgMCkgewotCSAgICBkZWJsb2cgPSAwOwotCSAgICByZXR1cm4oMCk7Ci0J fQotCXggPSAoaW50KXN0cmxlbigoY2hhciAqKXJfcGt0W2pdLmJmX2Fkcik7Ci0Jc3ByaW50Zih4 YnVmLAkJCS8qIHNhZmUgKGNoZWNrZWQpICovCi0JCSJbJS43MnMlc11cbiIscl9wa3Rbal0uYmZf YWRyLCB4ID4gNzIgPyAiLi4uIiA6ICIiKTsKLQlpZiAoenNvdXQoWkRGSUxFLHhidWYpIDwgMCkg IHsKLQkgICAgZGVibG9nID0gMDsKLQkgICAgcmV0dXJuKDApOwotCX0KLSAgICB9Ci0gICAgc3By aW50Zih4YnVmLCJmcmVlOiAlZCwgd2lubG86ICVkXG4iLCByYnVmbnVtLCB3aW5sbyk7IC8qIHNh ZmUgKDIwMCkgKi8KLSAgICBpZiAoenNvdXQoWkRGSUxFLHhidWYpIDwgMCkgIHsKLQlkZWJsb2cg PSAwOwotCXJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByZXR1cm4o MCk7Ci19Ci0KLS8qICBTIEEgVCBUIFIgIC0tICBTZW5kIGFuIEF0dHJpYnV0ZSBQYWNrZXQgICov Ci0KLS8qCi0gIFNlbmRzIGF0dHJpYnV0ZSBwYWNrZXQocykgZm9yIHRoZSBjdXJyZW50IGZpbGUu ICBJZiB0aGUgaW5mbyB3aWxsIG5vdAotICBmaXQgaW50byBvbmUgcGFja2V0LCBpdCBjYW4gYmUg Y2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgYWxsIHRoZSBmaWVsZHMKLSAgdGhhdCB3aWxsIGZpdCBh cmUgc2VudC4KLQotICBDYWxsIHdpdGg6Ci0gICAgeHAgPT0gMCBpZiB3ZSdyZSBzZW5kaW5nIGEg cmVhbCBmaWxlIChGIHBhY2tldCksIG9yOgotICAgIHhwICE9IDAgZm9yIHNjcmVlbiBkYXRhIChY IHBhY2tldCkuCi0gIEFuZDoKLSAgICBmbGFnID09IDEgZm9yIGZpcnN0IEEgcGFja2V0Ci0gICAg ZmxhZyA9PSAwIGZvciBzdWJzZXF1ZW50IEEgcGFja2V0cy4KLSAgUmV0dXJuczoKLSAgICAxIG9y IGdyZWF0ZXIgaWYgYW4gQSBwYWNrZXQgd2FzIHNlbnQsIG9yOgotICAgIDAgaWYgYW4gUy1wYWNr ZXQgd2FzIG5vdCBzZW50IGJlY2F1c2UgdGhlcmUgd2FzIG5vIGRhdGEgdG8gc2VuZCBvcgotICAg ICAgdGhlcmUgd2FzIG5vIGRhdGEgbGVmdCB0aGF0IHdhcyBzaG9ydCBlbm91Z2ggdG8gc2VuZCwg b3I6Ci0gICAtMSBvbiBhbnkga2luZCBvZiBlcnJvci4KLSovCi0KLS8qIChkb24ndCkgI2RlZmlu ZSBUU09GT1JNQVQgKi8KLS8qIHdoaWNoIHdhcyBvbmx5IGZvciBtYWtpbmcgQy1LZXJtaXQgc2Vu ZCBUU08tS2VybWl0LWxpa2UgQSBwYWNrZXRzICovCi0vKiB0byB0cnkgdG8gdHJhY2sgZG93biBh IHByb2JsZW0gc29tZWJvZHkgcmVwb3J0ZWQuLi4gKi8KLQotaW50Ci1zYXR0cih4cCwgZmxhZykg aW50IHhwLCBmbGFnOyB7CQkvKiBTZW5kIEF0dHJpYnV0ZXMgKi8KLQotICAgIHN0YXRpYyBpbnQg bWF4OwkJCS8qIE1heGltdW0gbGVuZ3RoIGZvciBBdHRyaWJ1dGVzICovCi0gICAgc3RhdGljIHNo b3J0IGRvbmVbOTVdOwkJLyogRmllbGQtY29tcGxldGUgYXJyYXkgKi8KLSAgICBzdGF0aWMgc3Ry dWN0IHphdHRyIHg7CQkvKiBGaWxlIGF0dHJpYnV0ZSBzdHJ1Y3QgKi8KLSAgICBzdGF0aWMgY2hh ciB4ZGF0ZVsyNF07Ci0KLSAgICBleHRlcm4gY2hhciAqIGNrc3lzaWQ7Ci0KLSAgICAvKiBTb21l IGV4dHJhIGZsYWdzIGFyZSB1c2VkIGJlY2F1c2UgdGhlICJkb25lIiBhcnJheSBpcyBzcGFyc2Ug Ki8KLQotICAgIGludCBpLCBqLCByYywgYWxuLCBsZWZ0ID0gMCwgbnVtc2V0ID0gMCwgeGJpbiA9 IDA7IC8qIFdvcmtlcnMgKi8KLSAgICBpbnQgbm90YWZpbGUgPSAwOwotICAgIGNoYXIgKnRwLCBj OwotCi0gICAgbm90YWZpbGUgPSBzbmRhcnJheSB8fCBwaXBlc2VuZCB8fAotI2lmZGVmIFBJUEVT RU5ECi0gICAgICBzbmRmaWx0ZXIgfHwKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCWNhbGlicmF0 ZTsKLQotICAgIGRlYnVnKEYxMDEsInNhdHRyIGZsYWciLCIiLGZsYWcpOwotICAgIGlmICghZmxh ZykJCQkJLyogTm8gbW9yZSBhdHRyaWJ1dGVzIHRvIHNlbmQgKi8KLSAgICAgIGlmIChkb25lW3h1 bmNoYXIoJ0AnKV0pCi0JcmV0dXJuKDApOwotCi0gICAgLyogSW5pdGlhbGl6ZSBBdHRyaWJ1dGUg bWVjaGFuaXNtICovCi0KLSAgICBpZiAoZmxhZykgewkJCQkvKiBGaXJzdCB0aW1lIGhlcmUgZm9y IHRoaXMgZmlsZT8gKi8KLQlpbml0YXR0cigmeCk7CQkJLyogQmxhbmsgb3V0IGFsbCB0aGUgZmll bGRzLiAqLwotCWZvciAoaiA9IDA7IGogPCA5NTsgaisrKQkvKiBJbml0IGFycmF5IG9mIGNvbXBs ZXRlZCBmaWVsZHMgKi8KLQkgIGRvbmVbal0gPSAwOwotCW1heCA9IG1heGRhdGEoKTsJCS8qIEdl dCBtYXhpbXVtIGRhdGEgZmllbGQgbGVuZ3RoICovCi0JaWYgKG5vdGFmaWxlIHx8IHhwID09IDEp IHsJLyogSXMgaXQgbm90IGEgcmVhbCBmaWxlPyAqLwotCSAgICBleHRlcm4gY2hhciAqIHp6bmRh dGUoKTsKLQkgICAgY2hhciAqIHA7Ci0JICAgIGludCBpOwotI2lmZGVmIENBTElCUkFURQotCSAg ICBpZiAoY2FsaWJyYXRlKSB7CQkvKiBDYWxpYnJhdGlvbiBydW4uLi4gKi8KLQkJeC5sZW5ndGhr ID0gY2FsaWJyYXRlIC8gMTAyNEw7IC8qIFdlIGtub3cgdGhlIGxlbmd0aCAqLwotCQl4Lmxlbmd0 aCA9IGNhbGlicmF0ZTsKLQkgICAgfQotI2VuZGlmIC8qIENBTElCUkFURSAqLwotCSAgICB4LnN5 c3RlbWlkLnZhbCA9IGNrc3lzaWQ7CS8qIFN5c3RlbSBJRCAqLwotCSAgICB4LnN5c3RlbWlkLmxl biA9IChpbnQpc3RybGVuKGNrc3lzaWQpOwotCSAgICBja3N0cm5jcHkoeGRhdGUsenpuZGF0ZSgp LDI0KTsKLQkgICAgeGRhdGVbOF0gPSBTUDsKLQkgICAgenRpbWUoJnApOwotCSAgICBmb3IgKGkg PSAxMTsgaSA8IDE5OyBpKyspCS8qIGNvcHkgaGg6bW06c3MgKi8KLQkgICAgICB4ZGF0ZVtpIC0g Ml0gPSBwW2ldOwkvKiB0byB4ZGF0ZSAqLwotCSAgICB4ZGF0ZVsxN10gPSBOVUw7CQkvKiB0ZXJt aW5hdGUgKi8KLQkgICAgeC5kYXRlLnZhbCA9IHhkYXRlOwotCSAgICB4LmRhdGUubGVuID0gMTc7 Ci0JICAgIGRlYnVnKEYxMTEsInNhdHRyIG5vdGFmaWxlIGRhdGUiLHguZGF0ZS52YWwseC5kYXRl Lmxlbik7Ci0JfSBlbHNlIHsJCQkvKiBSZWFsIGZpbGUgKi8KLQkgICAgcmMgPSB6c2F0dHIoJngp OwkJLyogR2V0IGF0dHJpYnV0ZXMgZm9yIHRoaXMgZmlsZSAgKi8KLQkgICAgZGVidWcoRjEwMSwi c2F0dHIgenNhdHRyIiwiIixyYyk7Ci0JICAgIGlmIChyYyA8IDApCQkJLyogQ2FuJ3QgZ2V0ICdl bSBzbyBkb24ndCBzZW5kICdlbSAqLwotCSAgICAgIHJldHVybigwKTsKLQkgICAgZGVidWcoRjEw MSwic2F0dHIgaW5pdCBtYXgiLCIiLG1heCk7Ci0JfQotICAgIH0KLSAgICBpZiAobnh0cGt0KCkg PCAwKQkJCS8qIEdvdCAnZW0sIGdldCBuZXh0IHBhY2tldCBudW1iZXIgKi8KLSAgICAgIHJldHVy bigtMSk7CQkJLyogQmFkIG5ld3MgaWYgd2UgY2FuJ3QgKi8KLQotICAgIGkgPSAwOwkJCQkvKiBJ bml0IGRhdGEgZmllbGQgY2hhcmFjdGVyIG51bWJlciAqLwotCi0gICAgLyogRG8gZWFjaCBhdHRy aWJ1dGUgdXNpbmcgZmlyc3QtZml0IG1ldGhvZCwgbWFya2luZyBhcyB3ZSBnbyAqLwotICAgIC8q IFRoaXMgaXMgcmF0aGVyIGxvbmcgYW5kIHJlcGl0aXRpb3VzIC0gY291bGQgYmUgZG9uZSBtb3Jl IGNsZXZlcmx5ICovCi0KLSAgICBpZiAoYXRzaWRvICYmICFkb25lW3h1bmNoYXIoYyA9ICcuJyld KSB7IC8qIFN5c3RlbSB0eXBlICovCi0JaWYgKG1heCAtIGkgPj0geC5zeXN0ZW1pZC5sZW4gKyAy KSB7IC8qIEVub3VnaCBzcGFjZSA/ICovCi0JICAgIGRhdGFbaSsrXSA9IGM7CQkgICAgIC8qIFll cywgYWRkIHBhcmFtZXRlciAqLwotCSAgICBkYXRhW2krK10gPSB0b2NoYXIoeC5zeXN0ZW1pZC5s ZW4pOwkgLyogQWRkIGxlbmd0aCAqLwotCSAgICBmb3IgKGogPSAwOyBqIDwgeC5zeXN0ZW1pZC5s ZW47IGorKykgLyogQWRkIGRhdGEgKi8KLQkgICAgICBkYXRhW2krK10gPSB4LnN5c3RlbWlkLnZh bFtqXTsKLQkgICAgbnVtc2V0Kys7CQkJLyogQ291bnQgdGhhdCB3ZSBkaWQgYXQgbGVhc3Qgb25l ICovCi0JICAgIGRvbmVbeHVuY2hhcihjKV0gPSAxOwkvKiBNYXJrIHRoaXMgYXR0cmlidXRlIGFz IGRvbmUgKi8KLQl9IGVsc2UJCQkJLyogTm8gKi8KLQkgIGxlZnQrKzsJCQkvKiBzbyBtYXJrIHRo aXMgb25lIGxlZnQgdG8gZG8gKi8KLSAgICB9Ci0jaWZkZWYgU1RSQVRVUwotICAgIGlmIChhdGNy ZW8gJiYgIWRvbmVbeHVuY2hhcihjID0gJyQnKV0pIHsgLyogQ3JlYXRvciAqLwotCWlmIChtYXgg LSBpID49IHguY3JlYXRvci5sZW4gKyAyKSB7IC8qIEVub3VnaCBzcGFjZSA/ICovCi0JICAgIGRh dGFbaSsrXSA9IGM7Ci0JICAgIGRhdGFbaSsrXSA9IHRvY2hhcih4LmNyZWF0b3IubGVuKTsKLQkg ICAgZm9yIChqID0gMDsgaiA8IHguY3JlYXRvci5sZW47IGorKykKLQkgICAgICBkYXRhW2krK10g PSB4LmNyZWF0b3IudmFsW2pdOwotCSAgICBudW1zZXQrKzsKLQkgICAgZG9uZVt4dW5jaGFyKGMp XSA9IDE7Ci0JfSBlbHNlCi0JICBsZWZ0Kys7Ci0gICAgfQotICAgIGlmIChhdGFjdG8gJiYgIWRv bmVbeHVuY2hhcihjID0gJyUnKV0pIHsgLyogRmlsZSBhY2NvdW50ICovCi0JaWYgKG1heCAtIGkg Pj0geC5hY2NvdW50LmxlbiArIDIpIHsKLQkgICAgZGF0YVtpKytdID0gYzsKLQkgICAgZGF0YVtp KytdID0gdG9jaGFyKHguYWNjb3VudC5sZW4pOwotCSAgICBmb3IgKGogPSAwOyBqIDwgeC5hY2Nv dW50LmxlbjsgaisrKQotCSAgICAgIGRhdGFbaSsrXSA9IHguYWNjb3VudC52YWxbal07Ci0JICAg IG51bXNldCsrOwotCSAgICBkb25lW3h1bmNoYXIoYyldID0gMTsKLQl9IGVsc2UKLQkgIGxlZnQr KzsKLSAgICB9Ci0gICAgaWYgKGF0ZnJtbyAmJiAhZG9uZVt4dW5jaGFyKGMgPSAnLycpXSkgeyAv KiBQYWNrZXQgZGF0YSBmb3JtYXQgKi8KLQlpZiAobWF4IC0gaSA+PSB4LnJlY2ZtLmxlbiArIDIp IHsKLQkgICAgZGF0YVtpKytdID0gYzsKLQkgICAgZGF0YVtpKytdID0gdG9jaGFyKHgucmVjZm0u bGVuKTsgLyogIENvcHkgZnJvbSBhdHRyIHN0cnVjdHVyZSAqLwotCSAgICBmb3IgKGogPSAwOyBq IDwgeC5yZWNmbS5sZW47IGorKykKLQkgICAgICBkYXRhW2krK10gPSB4LnJlY2ZtLnZhbFtqXTsK LQkgICAgbnVtc2V0Kys7Ci0JICAgIGRvbmVbeHVuY2hhcihjKV0gPSAxOwotCX0gZWxzZQotCSAg bGVmdCsrOwotICAgIH0KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0KLSAgICB4YmluID0JCQkJLyog SXMgdGhlIHRyYW5zZmVyIGluIGJpbmFyeSBtb2RlPyAqLwotI2lmZGVmIFZNUwotICAgICAgYmlu YXJ5ID09IFhZRlRfSSB8fCBiaW5hcnkgPT0gWFlGVF9MIHx8IC8qIElNQUdFIG9yIExBQkVMRUQg Ki8KLQkhc3RybmNtcCh4LnJlY2ZtLnZhbCwiRiIsMSkJLyogb3IgUkVDRk09Rnh4eHh4eCAqLwot I2Vsc2UKLSAgICAgIGJpbmFyeQkJCQkvKiBVc2VyIHNhaWQgU0VUIEZJTEUgVFlQRSBCSU5BUlkg ICovCi0jZW5kaWYgLyogVk1TICovCi0JOwotCi0gICAgaWYgKGF0dHlwbyAmJiAhZG9uZVt4dW5j aGFyKGMgPSAnIicpXSkgeyAvKiBGaWxlIHR5cGUgKi8KLQlpZiAobWF4IC0gaSA+PSA1KSB7CQkv KiBNYXggbGVuZ3RoIGZvciB0aGlzIGZpZWxkICovCi0JICAgIGRhdGFbaSsrXSA9IGM7Ci0JICAg IGlmICh4YmluKSB7CQkJLyogQmluYXJ5ICovCi0JCWRhdGFbaSsrXSA9IHRvY2hhcigyKTsJLyog IFR3byBjaGFyYWN0ZXJzICovCi0JCWRhdGFbaSsrXSA9ICdCJzsJLyogIEIgZm9yIEJpbmFyeSAq LwotCQlkYXRhW2krK10gPSAnOCc7CS8qICA4LWJpdCBieXRlcyAobm90ZSBhc3N1bXB0aW9uLi4u KSAqLwotI2lmZGVmIENLX0xBQkVMRUQKLQkJaWYgKGJpbmFyeSAhPSBYWUZUX0wKLSNpZmRlZiBW TVMKLQkJICAgICYmIGJpbmFyeSAhPSBYWUZUX0kKLSNlbmRpZiAvKiBWTVMgKi8KLQkJICAgICkK LQkJICBiaW5hcnkgPSBYWUZUX0I7Ci0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotCSAgICB9IGVs c2UgewkJCS8qIFRleHQgKi8KLSNpZmRlZiBUU09GT1JNQVQKLQkJZGF0YVtpKytdID0gdG9jaGFy KDEpOwkvKiAgT25lIGNoYXJhY3RlciAqLwotCQlkYXRhW2krK10gPSAnQSc7CS8qICBBID0gKGV4 dGVuZGVkKSBBU0NJSSB3aXRoIENSTEZzICovCi0jZWxzZQotCQlkYXRhW2krK10gPSB0b2NoYXIo Myk7CS8qICBUaHJlZSBjaGFyYWN0ZXJzICovCi0JCWRhdGFbaSsrXSA9ICdBJzsJLyogIEEgPSAo ZXh0ZW5kZWQpIEFTQ0lJIHdpdGggQ1JMRnMgKi8KLQkJZGF0YVtpKytdID0gJ00nOwkvKiAgTSBm b3IgY2FycmlhZ2UgcmV0dXJuICovCi0JCWRhdGFbaSsrXSA9ICdKJzsJLyogIEogZm9yIGxpbmVm ZWVkICovCi0jZW5kaWYgLyogVFNPRk9STUFUICovCi0KLSNpZmRlZiBWTVMKLQkJYmluYXJ5ID0g WFlGVF9UOwkvKiBXZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIHRleHQgKi8KLSNlbmRpZiAvKiBW TVMgKi8KLQkgICAgfQotCSAgICBudW1zZXQrKzsKLQkgICAgZG9uZVt4dW5jaGFyKGMpXSA9IDE7 Ci0JfSBlbHNlCi0JICBsZWZ0Kys7Ci0gICAgfQotCi0jaWZkZWYgVFNPRk9STUFUCi0gICAgaWYg KGF0dHlwbyAmJiAheGJpbiAmJiAhZG9uZVt4dW5jaGFyKGMgPSAnLycpXSkgeyAvKiBSZWNvcmQg Zm9ybWF0ICovCi0JaWYgKG1heCAtIGkgPj0gNSkgewotCSAgICBkYXRhW2krK10gPSBjOwotCSAg ICBkYXRhW2krK10gPSB0b2NoYXIoMyk7CS8qICBUaHJlZSBjaGFyYWN0ZXJzICovCi0JICAgIGRh dGFbaSsrXSA9ICdBJzsJCS8qICBBID0gdmFyaWFibGUgd2l0aCBDUkxGcyAqLwotCSAgICBkYXRh W2krK10gPSAnTSc7CQkvKiAgTSBmb3IgY2FycmlhZ2UgcmV0dXJuICovCi0JICAgIGRhdGFbaSsr XSA9ICdKJzsJCS8qICBKIGZvciBsaW5lZmVlZCAqLwotCX0KLSAgICB9Ci0jZW5kaWYgLyogVFNP Rk9STUFUICovCi0KLSAgICBpZiAoYXR0eXBvICYmICF4YmluICYmICFkb25lW3h1bmNoYXIoYyA9 ICcqJyldKSB7IC8qIFRleHQgZW5jb2RpbmcgKi8KLSNpZmRlZiBOT0NTRVRTCi0JaWYgKG1heCAt IGkgPj0gMykgewotCSAgICBkYXRhW2krK10gPSBjOwotCSAgICBkYXRhW2krK10gPSB0b2NoYXIo MSk7CS8qIExlbmd0aCBvZiB2YWx1ZSBpcyAxICovCi0JICAgIGRhdGFbaSsrXSA9ICdBJzsJCS8q IEEgZm9yIEFTQ0lJICovCi0JICAgIG51bXNldCsrOwotCSAgICBkb25lW3h1bmNoYXIoYyldID0g MTsKLQl9IGVsc2UKLQkgIGxlZnQrKzsKLSNlbHNlCi0JaWYgKHRjaGFyc2V0ID09IFRDX1RSQU5T UCB8fCAheGZyeGxhKSB7CS8qIFRyYW5zZmVyIGNoYXJhY3RlciBzZXQgKi8KLQkgICAgaWYgKG1h eCAtIGkgPj0gMykgewotCQlkYXRhW2krK10gPSBjOwkJLyogRW5jb2RpbmcgKi8KLQkJZGF0YVtp KytdID0gdG9jaGFyKDEpOwkvKiBMZW5ndGggb2YgdmFsdWUgaXMgMSAqLwotCQlkYXRhW2krK10g PSAnQSc7CS8qIEEgZm9yIEFTQ0lJIChpLmUuIHRleHQpICovCi0JCW51bXNldCsrOwotCQlkb25l W3h1bmNoYXIoYyldID0gMTsKLQkgICAgfSBlbHNlCi0JICAgICAgbGVmdCsrOwotCX0gZWxzZSB7 Ci0JICAgIHRwID0gdGNzaW5mb1t0Y2hhcnNldF0uZGVzaWduYXRvcjsKLQkgICAgaWYgKCF0cCkg dHAgPSAiIjsKLQkgICAgYWxuID0gc3RybGVuKHRwKTsKLQkgICAgaWYgKGFsbiA+IDApIHsKLQkJ aWYgKG1heCAtIGkgPj0gYWxuICsgMikgewotCQkgICAgZGF0YVtpKytdID0gYzsJLyogRW5jb2Rp bmcgKi8KLQkJICAgIGRhdGFbaSsrXSA9IHRvY2hhcihhbG4rMSk7IC8qIExlbmd0aCBvZiBkZXNp Z25hdG9yLiAqLwotCQkgICAgZGF0YVtpKytdID0gJ0MnOyAvKiBUZXh0IGluIHNwZWNpZmllZCBj aGFyc2V0LiAqLwotCQkgICAgZm9yIChqID0gMDsgaiA8IGFsbjsgaisrKSAvKiBDb3B5IGRlc2ln bmF0b3IgKi8KLQkJICAgICAgZGF0YVtpKytdID0gKnRwKys7IC8qICBFeGFtcGxlOiAqJkk2LzEw MCAqLwotCQkgICAgbnVtc2V0Kys7Ci0JCSAgICBkb25lW3h1bmNoYXIoYyldID0gMTsKLQkJfSBl bHNlCi0JCSAgbGVmdCsrOwotCSAgICB9IGVsc2UKLQkgICAgICBkb25lW3h1bmNoYXIoYyldID0g MTsKLQl9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIH0KLSAgICBpZiAoYXRkYXRvICYmICFk b25lW3h1bmNoYXIoYyA9ICcjJyldICYmIC8qIENyZWF0aW9uIGRhdGUsIGlmIGFueSAqLwotCShh bG4gPSB4LmRhdGUubGVuKSA+IDApIHsKLQlpZiAobWF4IC0gaSA+PSBhbG4gKyAyKSB7Ci0JICAg IGRhdGFbaSsrXSA9IGM7Ci0JICAgIGRhdGFbaSsrXSA9IHRvY2hhcihhbG4pOwotCSAgICBmb3Ig KGogPSAwOyBqIDwgYWxuOyBqKyspCi0JICAgICAgZGF0YVtpKytdID0geC5kYXRlLnZhbFtqXTsK LQkgICAgbnVtc2V0Kys7Ci0JICAgIGRvbmVbeHVuY2hhcihjKV0gPSAxOwotCX0gZWxzZQotCSAg bGVmdCsrOwotICAgIH0KLSAgICAvKiBGaWxlIGxlbmd0aCBpbiBLICovCi0gICAgaWYgKGF0bGVu byAmJiAhZG9uZVt4dW5jaGFyKGMgPSAnIScpXSAmJiB4Lmxlbmd0aGsgPiAoQ0tfT0ZGX1QpLTEp IHsKLSNpZmRlZiBDT01NRU5UCi0Jc3ByaW50ZigoY2hhciAqKSAmZGF0YVtpKzJdLCIlbGQiLHgu bGVuZ3Roayk7IC8qIHNhZmUgKi8KLSNlbHNlCi0JY2tzdHJuY3B5KChjaGFyICopJmRhdGFbaSsy XSxja2ZzdG9hKHgubGVuZ3RoayksMzIpOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQlhbG4gPSAo aW50KXN0cmxlbigoY2hhciAqKShkYXRhK2krMikpOwotCWlmIChtYXggLSBpID49IGFsbiArIDIp IHsKLQkgICAgZGF0YVtpXSA9IGM7Ci0JICAgIGRhdGFbaSsxXSA9IHRvY2hhcihhbG4pOwotCSAg ICBpICs9IGFsbiArIDI7Ci0JICAgIG51bXNldCsrOwotCSAgICBkb25lW3h1bmNoYXIoYyldID0g MTsKLQl9IGVsc2UgewotCSAgICBkYXRhW2ldID0gTlVMOwotCSAgICBsZWZ0Kys7Ci0JfQotICAg IH0KLSAgICAvKiBGaWxlIGxlbmd0aCBpbiBieXRlcyAqLwotICAgIGlmIChhdGxlbm8gJiYgIWRv bmVbeHVuY2hhcihjID0gJzEnKV0gJiYgeC5sZW5ndGggPiAoQ0tfT0ZGX1QpLTEpIHsKLSNpZmRl ZiBDT01NRU5UCi0Jc3ByaW50ZigoY2hhciAqKSAmZGF0YVtpKzJdLCIlbGQiLHgubGVuZ3RoKTsg Lyogc2FmZSAqLwotI2Vsc2UKLQlja3N0cm5jcHkoKGNoYXIgKikmZGF0YVtpKzJdLGNrZnN0b2Eo eC5sZW5ndGgpLDMyKTsKLSNlbmRpZgkvKiBDT01NRU5UICovCi0JYWxuID0gKGludClzdHJsZW4o KGNoYXIgKikoZGF0YStpKzIpKTsKLQlpZiAobWF4IC0gaSA+PSBhbG4gKyAyKSB7Ci0JICAgIGRh dGFbaV0gPSBjOwotCSAgICBkYXRhW2krMV0gPSB0b2NoYXIoYWxuKTsKLQkgICAgaSArPSBhbG4g KyAyOwotCSAgICBudW1zZXQrKzsKLQkgICAgZG9uZVt4dW5jaGFyKGMpXSA9IDE7Ci0JfSBlbHNl IHsKLQkgICAgZGF0YVtpXSA9IE5VTDsKLQkgICAgbGVmdCsrOwotCX0KLSAgICB9Ci0jaWZkZWYg Q0tfUEVSTVMKLSAgICBpZiAoYXRscHJvICYmICFkb25lW3h1bmNoYXIoYyA9ICcsJyldICYmIC8q IExvY2FsIHByb3RlY3Rpb24gKi8KLQkoYWxuID0geC5scHJvdGVjdC5sZW4pID4gMCAmJiAhbm90 YWZpbGUgJiYgeHAgPT0gMCkgewotCWlmIChtYXggLSBpID49IGFsbiArIDIpIHsKLQkgICAgZGF0 YVtpKytdID0gYzsKLQkgICAgZGF0YVtpKytdID0gdG9jaGFyKGFsbik7Ci0JICAgIGZvciAoaiA9 IDA7IGogPCBhbG47IGorKykKLQkgICAgICBkYXRhW2krK10gPSB4Lmxwcm90ZWN0LnZhbFtqXTsK LQkgICAgbnVtc2V0Kys7Ci0JICAgIGRvbmVbeHVuY2hhcihjKV0gPSAxOwotCX0gZWxzZQotCSAg bGVmdCsrOwotICAgIH0KLSAgICBpZiAoYXRncHJvICYmICFkb25lW3h1bmNoYXIoYyA9ICctJyld ICYmIC8qIEdlbmVyaWMgcHJvdGVjdGlvbiAqLwotCShhbG4gPSB4Lmdwcm90ZWN0LmxlbikgPiAw ICYmICFub3RhZmlsZSAmJiB4cCA9PSAwKSB7Ci0JaWYgKG1heCAtIGkgPj0gYWxuICsgMikgewot CSAgICBkYXRhW2krK10gPSBjOwotCSAgICBkYXRhW2krK10gPSB0b2NoYXIoYWxuKTsKLQkgICAg Zm9yIChqID0gMDsgaiA8IGFsbjsgaisrKQotCSAgICAgIGRhdGFbaSsrXSA9IHguZ3Byb3RlY3Qu dmFsW2pdOwotCSAgICBudW1zZXQrKzsKLQkgICAgZG9uZVt4dW5jaGFyKGMpXSA9IDE7Ci0JfSBl bHNlCi0JICBsZWZ0Kys7Ci0gICAgfQotI2VuZGlmIC8qIENLX1BFUk1TICovCi0gICAgaWYgKGF0 YmxrbyAmJiBmYmxrc2l6ICYmICFkb25lW3h1bmNoYXIoYyA9ICcoJyldICYmCi0JIW5vdGFmaWxl ICYmIHhwID09IDApIHsJLyogQmxvY2tzaXplICovCi0Jc3ByaW50ZigoY2hhciAqKSAmZGF0YVtp KzJdLCIlZCIsZmJsa3Npeik7IC8qIHNhZmUgKi8KLQlhbG4gPSAoaW50KXN0cmxlbigoY2hhciAq KShkYXRhK2krMikpOwotCWlmIChtYXggLSBpID49IGFsbiArIDIpIHsKLQkgICAgZGF0YVtpXSA9 IGM7Ci0JICAgIGRhdGFbaSsxXSA9IHRvY2hhcihhbG4pOwotCSAgICBpICs9IGFsbiArIDI7Ci0J ICAgIG51bXNldCsrOwotCSAgICBkb25lW3h1bmNoYXIoYyldID0gMTsKLQl9IGVsc2UgewotCSAg ICBkYXRhW2ldID0gTlVMOwotCSAgICBsZWZ0Kys7Ci0JfQotICAgIH0KLSNpZm5kZWYgTk9GUklM TFMKLSAgICBpZiAoKHJwcmludGYgfHwgcm1haWxmKSAmJiBhdGRpc28gJiYgLyogTUFJTCwgb3Ig UkVNT1RFIFBSSU5UPyAgKi8KLQkhZG9uZVt4dW5jaGFyKGMgPSAnKycpXSkgewotCWFsbiA9IChp bnQpIHN0cmxlbihvcHRidWYpICsgMTsJLyogT3B0aW9ucywgaWYgYW55ICovCi0JaWYgKG1heCAt IGkgPj0gYWxuICsgMikgewotCSAgICBkYXRhW2krK10gPSBjOwkJLyogRGlzcG9zaXRpb24gKi8K LQkgICAgZGF0YVtpKytdID0gdG9jaGFyKGFsbik7CS8qIE9wdGlvbnMsIGlmIGFueSAqLwotCSAg ICBpZiAocnByaW50ZikKLQkgICAgICBkYXRhW2krK10gPSAnUCc7CQkvKiBQIGZvciBQcmludCAq LwotCSAgICBlbHNlCi0JICAgICAgZGF0YVtpKytdID0gJ00nOwkJLyogTSBmb3IgTWFpbCAqLwot CSAgICBmb3IgKGogPSAwOyBvcHRidWZbal07IGorKykJLyogQ29weSBhbnkgb3B0aW9ucyAqLwot CSAgICAgIGRhdGFbaSsrXSA9IG9wdGJ1ZltqXTsKLQkgICAgbnVtc2V0Kys7Ci0JICAgIGRvbmVb eHVuY2hhcihjKV0gPSAxOwotCX0gZWxzZSB7Ci0JICAgIGRhdGFbaV0gPSBOVUw7Ci0JICAgIGxl ZnQrKzsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIE5PRlJJTExTICovCi0jaWZkZWYgQ0tfUkVTRU5E Ci0gICAgaWYgKHNlbmRtb2RlID09IFNNX1JFU0VORCAmJiAhZG9uZVt4dW5jaGFyKGMgPSAnKycp XSkgewotCWlmIChtYXggLSBpID49IDMpIHsKLQkgICAgZGF0YVtpKytdID0gYzsJCS8qIERpc3Bv c2l0aW9uICovCi0JICAgIGRhdGFbaSsrXSA9IHRvY2hhcigxKTsKLQkgICAgZGF0YVtpKytdID0g J1InOwkJLyogaXMgUkVTRU5EICovCi0JICAgIG51bXNldCsrOwotCSAgICBkb25lW3h1bmNoYXIo YyldID0gMTsKLQl9IGVsc2UKLQkgIGxlZnQrKzsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfUkVTRU5E ICovCi0KLSAgICAvKiBFbmQgb2YgQXR0cmlidXRlcyAtLSB0byBiZSBzZW50IG9ubHkgYWZ0ZXIg c2VuZGluZyBhbGwgb3RoZXJzICovCi0KLSAgICBkZWJ1ZyhGMTExLCJzYXR0ciIsIkAiLGkpOwot ICAgIGRlYnVnKEYxMDEsInNhdHRyIG51bXNldCIsIiIsbnVtc2V0KTsKLSAgICBkZWJ1ZyhGMTAx LCJzYXR0ciBsZWZ0IiwiIixsZWZ0KTsKLQotICAgIGlmICgobGVmdCA9PSAwIHx8IG51bXNldCA9 PSAwKSAmJiAhZG9uZVt4dW5jaGFyKGMgPSAnQCcpXSkgewotCWlmIChtYXggLSBpID49IDMpIHsK LQkgICAgZGF0YVtpKytdID0gYzsJCS8qIEVuZCBvZiBBdHRyaWJ1dGVzICovCi0JICAgIGRhdGFb aSsrXSA9IFNQOwkJLyogTGVuZ3RoIDAgKi8KLQkgICAgZGF0YVtpXSA9IE5VTDsJCS8qIE1ha2Ug c3VyZSBpdCdzIG51bGwtdGVybWluYXRlZCAqLwotCSAgICBudW1zZXQrKzsKLQkgICAgZG9uZVt4 dW5jaGFyKGMpXSA9IDE7Ci0JfQotICAgIH0KLQotICAgIC8qIEZpbmlzaGVkIC0gc2VuZCB0aGUg cGFja2V0IG9mZiBpZiB3ZSBoYXZlIGFueXRoaW5nIGluIGl0ICovCi0KLSAgICBpZiAobnVtc2V0 KSB7Ci0JZGF0YVtpXSA9IE5VTDsJCQkvKiBUZXJtaW5hdGUgbGFzdCBnb29kIGZpZWxkICovCi0J ZGVidWcoRjExMSwic2F0dHIgc2VuZGluZyIsZGF0YSxsZWZ0KTsKLQlhbG4gPSAoaW50KXN0cmxl bigoY2hhciAqKWRhdGEpOyAvKiBHZXQgb3ZlcmFsbCBsZW5ndGggb2YgYXR0cmlidXRlcyAqLwot CXJldHVybihzcGFjaygnQScscGt0bnVtLGFsbixkYXRhKSk7IC8qIFNlbmQgaXQgKi8KLSAgICB9 IGVsc2UKLSAgICAgIHJldHVybigwKTsKLX0KLQotc3RhdGljIGNoYXIgKnJlZnVzZWQgPSAiIjsK LQotc3RhdGljIGNoYXIgKnJlYXNvbltdID0gewotICAgICJzaXplIiwgInR5cGUiLCAiZGF0ZSIs ICJjcmVhdG9yIiwgImFjY291bnQiLCAiYXJlYSIsICJwYXNzd29yZCIsCi0gICAgImJsb2Nrc2l6 ZSIsICJhY2Nlc3MiLCAiZW5jb2RpbmciLCAiZGlzcG9zaXRpb24iLCAicHJvdGVjdGlvbiIsCi0g ICAgInByb3RlY3Rpb24iLCAib3JpZ2luIiwgImZvcm1hdCIsCi0gICAgInN5cy1kZXBlbmRlbnQi LAkJCS8qIDAgKi8KLSAgICAic2l6ZSIsCQkJCS8qIDEgKi8KLSAgICAiMiIsCQkJCS8qIDIgKi8K LSAgICAiMyIsCQkJCS8qIDMgKi8KLSAgICAiNCIsCQkJCS8qIDQgKi8KLSAgICAiNSIsCQkJCS8q IDUgKi8KLSAgICAiNiIsCQkJCS8qIDYgKi8KLSAgICAiNyIsCQkJCS8qIDcgKi8KLSAgICAiOCIs CQkJCS8qIDggKi8KLSAgICAiOSIsCQkJCS8qIDkgKi8KLSAgICAiOiIsCQkJCS8qIDogKi8KLSAg ICAiOyIsCQkJCS8qIDsgKi8KLSAgICAiPCIsCQkJCS8qIDwgKi8KLSAgICAiPSIsCQkJCS8qID0g Ki8KLSAgICAiPiIsCQkJCS8qID4gKi8KLSAgICAibmFtZSIsCQkJCS8qID8gKi8KLSAgICAiQCIK LX07Ci1zdGF0aWMgaW50IG5yZWFzb24gPSBzaXplb2YocmVhc29uKSAvIHNpemVvZihjaGFyICop OwotaW50IHJlamVjdGlvbiA9IC0xOwotCi1jaGFyICoKLWdldHJlYXNvbihzKSBjaGFyICpzOyB7 CQkJLyogRGVjb2RlIGF0dHJpYnV0ZSByZWZ1c2FsIHJlYXNvbiAqLwotICAgIGNoYXIgYywgKnA7 Ci0gICAgaWYgKHJlamVjdGlvbiA9PSAxKQkJCS8qIEtsdWRnZSBmb3IgU0VUIEZJTCBDT0xMIERJ U0NBUkQgKi8KLSAgICAgIHJldHVybigibmFtZSIpOwkJCS8qIHdoZW4gb3RoZXIgS2VybWl0IGRv ZXNuJ3QuLi4gKi8KLSAgICBwID0gczsKLSAgICBpZiAoKnArKyAhPSAnTicpIHJldHVybigiIik7 CS8qIFNob3VsZCBzdGFydCB3aXRoIE4gKi8KLSAgICBlbHNlIGlmICgoYyA9ICpwKSA+IFNQKSB7 CQkvKiBnZXQgcmVhc29uLCAqLwotCXJlamVjdGlvbiA9IGM7CQkJLyogcmVtZW1iZXIgaXQsICov Ci0JYyAtPSAnISc7CQkJLyogZ2V0IG9mZnNldCAqLwotCXAgPSAoKHVuc2lnbmVkIGludCkgKChD SEFSKSBjKSA8PSAodW5zaWduZWQgaW50KSBucmVhc29uKSA/Ci0JICByZWFzb25bY10gOgotCSAg ICAidW5rbm93biI7Ci0gICAgfQotICAgIHJldHVybihwKTsKLX0KLQotaW50Ci1yc2F0dHIocykg Q0hBUiAqczsgewkJCS8qIFJlYWQgcmVzcG9uc2UgdG8gYXR0cmlidXRlIHBhY2tldCAqLwotICAg IGRlYnVnKEYxMTEsInJzYXR0ciIscywqcyk7Ci0gICAgaWYgKCpzID09ICdOJykgewkJCS8qIElm IGl0J3MgJ04nIGZvbGxvd2VkIGJ5IGFueXRoaW5nLCAqLwotCXJlZnVzZWQgPSBnZXRyZWFzb24o KGNoYXIgKilzKTsJLyogdGhleSBhcmUgcmVmdXNpbmcsIGdldCByZWFzb24uICovCi0JZGVidWco RjExMCwicnNhdHRyIHJlZnVzZWQiLHJlZnVzZWQsMCk7Ci0JdGxvZyhGMTEwLCIgcmVmdXNlZDoi LHJlZnVzZWQsMEwpOwotCXJldHVybigtMSk7Ci0gICAgfQotI2lmZGVmIENLX1JFU0VORAotICAg IGlmIChzZW5kbW9kZSA9PSBTTV9SRVNFTkQgJiYgKnMgPT0gJzEnKSB7IC8qIFJFU0VORCBsZW5n dGggKi8KLQlpbnQgbjsgQ0tfT0ZGX1QgejsgQ0hBUiAqcDsKLQlwID0gcyArIDE7Ci0JbiA9IHh1 bmNoYXIoKnArKyk7Ci0JZGVidWcoRjEwMSwicnNhdHRyIFJFU0VORCBuIiwiIixuKTsKLQl6ID0g KENLX09GRl9UKTA7Ci0Jd2hpbGUgKG4tLSA+IDApCQkJLyogV2UgYXNzdW1lIHRoZSBmb3JtYXQg aXMgZ29vZC4gKi8KLQkgIHogPSAoQ0tfT0ZGX1QpMTAgKiB6ICsgKENLX09GRl9UKSgqcCsrIC0g JzAnKTsKLQlkZWJ1ZyhGMTAxLCJyc2F0dHIgUkVTRU5EIHoiLCIiLHopOwotCWlmICh6ID4gKENL X09GRl9UKTApIHNlbmRzdGFydCA9IHo7Ci0JZGVidWcoRjEwMSwicnNhdHRyIFJFU0VORCBzZW5k c3RhcnQiLCIiLHNlbmRzdGFydCk7Ci0JaWYgKHNlbmRzdGFydCA+IChDS19PRkZfVCkwKQotCSAg aWYgKHpmc2VlayhzZW5kc3RhcnQpIDwgMCkJLyogSW5wdXQgZmlsZSBpcyBhbHJlYWR5IG9wZW4u ICovCi0JICAgIHJldHVybigwKTsKLSNpZmRlZiBDS19DVVJTRVMKLQlpZiAoZmRpc3BsYSA9PSBY WUZEX0MpCi0JICB4eHNjcmVlbihTQ1JfRlMsMCxmc2l6ZSwiIik7CS8qIFJlZnJlc2ggZmlsZSB0 cmFuc2ZlciBkaXNwbGF5ICovCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0gICAgfQotI2VuZGlm IC8qIENLX1JFU0VORCAqLwotICAgIHJlZnVzZWQgPSAiIjsKLSAgICByZXR1cm4oMCk7Ci19Ci0K LS8qCi0gIEdldCBhdHRyaWJ1dGVzIGZyb20gaW5jb21pbmcgQSBwYWNrZXQuICBSZXR1cm5zOgot ICAgMCBvbiBzdWNjZXNzLCBmaWxlIGlzIHRvIGJlIGFjY2VwdGVkCi0gIC0xIG9uIGZhaWx1cmUs IGZpbGUgaXMgdG8gYmUgcmVmdXNlZAotKi8KLWludAotZ2F0dHIocywgeXkpIENIQVIgKnM7IHN0 cnVjdCB6YXR0ciAqeXk7IHsgLyogUmVhZCBpbmNvbWluZyBhdHRyaWJ1dGUgcGFja2V0ICovCi0g ICAgY2hhciBjLCBkOwotICAgIGNoYXIgKmZmOwotICAgIGludCBhbG4sIGksIG92ZXJmbG93ID0g MDsKLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgZXh0ZXJuIGludCByX2NzZXQsIGF4Y3NldFtdOwot I2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2RlZmluZSBBQlVGTCA0MAkJCS8qIFRlbXBvcmFyeSBi dWZmZXIgZm9yIGNvbnZlcnNpb25zICovCi0gICAgY2hhciBhYnVmW0FCVUZMKzFdOwotI2RlZmlu ZSBSRkJVRkwgMTAJCQkvKiBSZWNvcmQtZm9ybWF0IGJ1ZmZlciAqLwotICAgIHN0YXRpYyBjaGFy IHJmYnVmW1JGQlVGTCsxXTsKLSNkZWZpbmUgRlRCVUZMIDEwCQkJLyogRmlsZSB0eXBlIGJ1ZmZl ciAqLwotICAgIHN0YXRpYyBjaGFyIGZ0YnVmW0ZUQlVGTCsxXTsKLSNkZWZpbmUgRFRCVUZMIDQw CQkJLyogRmlsZSBjcmVhdGlvbiBkYXRlICovCi0gICAgc3RhdGljIGNoYXIgZHRidWZbRFRCVUZM KzFdOwotI2RlZmluZSBUU0JVRkwgMTAJCQkvKiBUcmFuc2ZlciBzeW50YXggKi8KLSAgICBzdGF0 aWMgY2hhciB0c2J1ZltUU0JVRkwrMV07Ci0jZGVmaW5lIElEQlVGTCAxMAkJCS8qIFN5c3RlbSBJ RCAqLwotICAgIHN0YXRpYyBjaGFyIGlkYnVmW0lEQlVGTCsxXTsKLSNpZm5kZWYgRFlOQU1JQwot I2RlZmluZSBEU0JVRkwgMTAwCQkJLyogRGlzcG9zaXRpb24gKi8KLSAgICBzdGF0aWMgY2hhciBk c2J1ZltEU0JVRkwrMV07Ci0jZGVmaW5lIFNQQlVGTCA1MTIJCQkvKiBTeXN0ZW0tZGVwZW5kZW50 IHBhcmFtZXRlcnMgKi8KLSAgICBzdGF0aWMgY2hhciBzcGJ1ZltTUEJVRkwrMV07Ci0jZWxzZQot I2RlZmluZSBEU0JVRkwgMTAwCQkJLyogRGlzcG9zaXRpb24gKi8KLSAgICBzdGF0aWMgY2hhciAq ZHNidWYgPSBOVUxMOwotI2RlZmluZSBTUEJVRkwgNTEyCQkJLyogU3lzdGVtLWRlcGVuZGVudCBw YXJhbWV0ZXJzICovCi0gICAgc3RhdGljIGNoYXIgKnNwYnVmID0gTlVMTDsKLSNlbmRpZiAvKiBE WU5BTUlDICovCi0jZGVmaW5lIFJQQlVGTCAyMAkJCS8qIEF0dHJpYnV0ZSByZXBseSAqLwotICAg IHN0YXRpYyBjaGFyIHJwYnVmW1JQQlVGTCsxXTsKLQotI2lmZGVmIENLX1BFUk1TCi0gICAgc3Rh dGljIGNoYXIgbHBybWJ1ZltDS19QRVJNTEVOKzFdOwotICAgIHN0YXRpYyBjaGFyIGdwcm1idWZb Ml07Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLQotICAgIGNoYXIgKnJwOwkJCQkvKiBQb2ludGVy IHRvIHJlcGx5IGJ1ZmZlciAqLwotICAgIGludCByZXRjb2RlOwkJCS8qIFJldHVybiBjb2RlICov Ci0KLSAgICBkID0gU1A7CQkJCS8qIEluaXRpYWxpemUgZGlzcG9zaXRpb24gKi8KLSAgICBmZiA9 IGZpbG5hbTsJCQkvKiBGaWxlbmFtZSByZXR1cm5lZCBieSByY3ZmaWwgKi8KLSAgICBpZiAoZm5j YWN0ID09IFhZRlhfUiAmJiBvZm4xeCAmJiBvZm4xWzBdKSAvKiBCdXQgd2F0Y2ggb3V0IGZvciBG Qz1SRU5BTUUgKi8KLSAgICAgIGZmID0gb2ZuMTsJCQkvKiBiZWNhdXNlIHdlIGhhdmVuJ3QgcmVu YW1lZCBpdCB5ZXQgKi8KLQotLyogRmlsbCBpbiB0aGUgYXR0cmlidXRlcyB3ZSBoYXZlIHJlY2Vp dmVkICovCi0KLSAgICBycCA9IHJwYnVmOwkJCQkvKiBJbml0aWFsaXplIHJlcGx5IGJ1ZmZlciAq LwotICAgICpycCsrID0gJ04nOwkJCS8qIGZvciBuZWdhdGl2ZSByZXBseS4gKi8KLSAgICAqcnAg PSBOVUw7Ci0gICAgcmV0Y29kZSA9IDA7CQkJLyogSW5pdGlhbGl6ZSByZXR1cm4gY29kZS4gKi8K LQotICAgIGlmIChkZXN0ID09IERFU1RfUCkgewkJLyogU0VUIERFU1RJTkFUSU9OIFBSSU5URVIg Ki8KLSNpZmRlZiBEWU5BTUlDCi0JaWYgKCFkc2J1ZikKLQkgIGlmICgoZHNidWYgPSBtYWxsb2Mo RFNCVUZMKzEpKSA9PSBOVUxMKQotCSAgICBmYXRhbCgiZ3RhdHRyOiBubyBtZW1vcnkgZm9yIGRz YnVmIik7Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotCWRzYnVmWzBdID0gJ1AnOwotCWRzYnVmWzFd ID0gJ1wwJzsKLQl5eS0+ZGlzcC52YWwgPSBkc2J1ZjsKLQl5eS0+ZGlzcC5sZW4gPSAxOwotICAg IH0KLSAgICB3aGlsZSAoYyA9ICpzKyspIHsJCQkvKiBHZXQgYXR0cmlidXRlIHRhZyAqLwotCWFs biA9IHh1bmNoYXIoKnMrKyk7CQkvKiBMZW5ndGggb2YgYXR0cmlidXRlIHN0cmluZyAqLwotCXN3 aXRjaCAoYykgewotI2lmZGVmIENPTU1FTlQJCQkJLyogVGhpcyBjYXNlIGNvbWJpbmVkIHdpdGgg JzEnIGJlbG93ICovCi0JICBjYXNlICchJzoJCQkvKiBGaWxlIGxlbmd0aCBpbiBLICovCi0JICAg IGZvciAoaSA9IDA7IChpIDwgYWxuKSAmJiAoaSA8IEFCVUZMKTsgaSsrKSAvKiBDb3B5IGl0ICov Ci0JICAgICAgYWJ1ZltpXSA9ICpzKys7Ci0JICAgIGFidWZbaV0gPSAnXDAnOwkJLyogVGVybWlu YXRlIHdpdGggbnVsbCAqLwotCSAgICBpZiAoaSA8IGFsbikgcyArPSAoYWxuIC0gaSk7IC8qIElm IGZpZWxkIHdhcyB0b28gbG9uZyBmb3IgYnVmZmVyICovCi0JICAgIHl5LT5sZW5ndGhrID0gY2th dG9mcyhhYnVmKTsgLyogQ29udmVydCB0byBudW1iZXIgKi8KLQkgICAgYnJlYWs7Ci0jZW5kaWYJ LyogQ09NTUVOVCAqLwotCi0JICBjYXNlICcvJzoJCQkvKiBSZWNvcmQgZm9ybWF0ICovCi0JICAg IHJmYnVmWzFdID0gTlVMOwotCSAgICByZmJ1ZlsyXSA9IE5VTDsKLQkgICAgZm9yIChpID0gMDsg KGkgPCBhbG4pICYmIChpIDwgUkZCVUZMKTsgaSsrKSAvKiBDb3B5IGl0ICovCi0JICAgICAgcmZi dWZbaV0gPSAqcysrOwotCSAgICByZmJ1ZltpXSA9IE5VTDsJCS8qIFRlcm1pbmF0ZSB3aXRoIG51 bGwgKi8KLQkgICAgeXktPnJlY2ZtLnZhbCA9IHJmYnVmOwkvKiBQb2ludGVyIHRvIHN0cmluZyAq LwotCSAgICB5eS0+cmVjZm0ubGVuID0gaTsJCS8qIExlbmd0aCBvZiBzdHJpbmcgKi8KLQkgICAg aWYgKChyZmJ1ZlswXSAhPSAnQScpIHx8Ci0JCShyZmJ1ZlsxXSAmJiByZmJ1ZlsxXSAhPSAnTScp IHx8Ci0JCShyZmJ1ZlsyXSAmJiByZmJ1ZlsyXSAhPSAnSicpKSB7Ci0JCWRlYnVnKEYxMTAsImdh dHRyIGJhZCByZWNmbSIscmZidWYsMCk7Ci0JCSpycCsrID0gYzsKLQkJcmV0Y29kZSA9IC0xOwot CSAgICB9Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICciJzoJCQkvKiBGaWxlIHR5cGUgKHRleHQs IGJpbmFyeSwgLi4uKSAqLwotCSAgICBmb3IgKGkgPSAwOyAoaSA8IGFsbikgJiYgKGkgPCBGVEJV RkwpOyBpKyspCi0JICAgICAgZnRidWZbaV0gPSAqcysrOwkJLyogQ29weSBpdCBpbnRvIGEgc3Rh dGljIHN0cmluZyAqLwotCSAgICBmdGJ1ZltpXSA9ICdcMCc7Ci0JICAgIGlmIChpIDwgYWxuKSBz ICs9IChhbG4gLSBpKTsKLQkgICAgLyogVFlQRSBhdHRyaWJ1dGUgaXMgZW5hYmxlZD8gKi8KLQkg ICAgaWYgKGF0dHlwaSkgewotCQl5eS0+dHlwZS52YWwgPSBmdGJ1ZjsJLyogUG9pbnRlciB0byBz dHJpbmcgKi8KLQkJeXktPnR5cGUubGVuID0gaTsJLyogTGVuZ3RoIG9mIHN0cmluZyAqLwotCQlk ZWJ1ZyhGMTExLCJnYXR0ciBmaWxlIHR5cGUiLCBmdGJ1ZiwgaSk7Ci0JCWRlYnVnKEYxMDEsImdh dHRyIGJpbmFyeSAxIiwiIixiaW5hcnkpOwotCQkvKiBVbmtub3duIHR5cGU/ICovCi0JCWlmICgo KmZ0YnVmICE9ICdBJyAmJiAqZnRidWYgIT0gJ0InICYmICpmdGJ1ZiAhPSAnSScpCi0jaWZkZWYg Q0tfTEFCRUxFRAotLyogLi4uIE9yIG91ciBGSUxFIFRZUEUgaXMgTEFCRUxFRCBhbmQgdGhlIGlu Y29taW5nIGZpbGUgaXMgdGV4dC4uLiAqLwotCQkgICAgfHwgKGJpbmFyeSA9PSBYWUZUX0wgJiYg KmZ0YnVmID09ICdBJyAmJiAheGZsZykKLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0JCSAgICAp IHsKLQkJICAgIHJldGNvZGUgPSAtMTsJLyogUmVqZWN0IHRoZSBmaWxlICovCi0JCSAgICAqcnAr KyA9IGM7Ci0JCSAgICBpZiAoIW9wbmVycikgdGxvZyhGMTAwLCIgcmVmdXNlZDogdHlwZSIsIiIs MCk7Ci0JCSAgICBicmVhazsKLQkJfQotLyoKLSAgVGhlIGZvbGxvd2luZyBjb2RlIG1vdmVkIGhl cmUgZnJvbSBvcGVuYSgpIHNvIHdlIHNldCBiaW5hcnkgbW9kZQotICBhcyBzb29uIGFzIHJlcXVl c3RlZCBieSB0aGUgYXR0cmlidXRlIHBhY2tldC4gIFRoYXQgd2F5IHdoZW4gdGhlIGZpcnN0Ci0g IGRhdGEgcGFja2V0IGNvbWVzLCB0aGUgbW9kZSBvZiB0cmFuc2ZlciBjYW4gYmUgZGlzcGxheWVk IGNvcnJlY3RseQotICBiZWZvcmUgb3BlbmEoKSBpcyBjYWxsZWQuCi0qLwotCQlpZiAoeXktPnR5 cGUudmFsWzBdID09ICdBJykgeyAvKiBDaGVjayByZWNlaXZlZCBhdHRyaWJ1dGVzLiAqLwotI2lm ZGVmIFZNUwotCQkgICAgaWYgKGJpbmFyeSAhPSBYWUZUX0kpIC8qIFZNUyBJTUFHRSBvdmVycmlk ZXMgdGhpcyAqLwotI2VuZGlmIC8qIFZNUyAqLwotCQkgICAgICBiaW5hcnkgPSBYWUZUX1Q7CS8q IFNldCBjdXJyZW50IHR5cGUgdG8gVGV4dC4gKi8KLQkJICAgIGRlYnVnKEYxMDEsImdhdHRyIGJp bmFyeSAyIiwiIixiaW5hcnkpOwotCQl9IGVsc2UgaWYgKHl5LT50eXBlLnZhbFswXSA9PSAnQicp IHsKLSNpZmRlZiBDS19MQUJFTEVECi0JCSAgICBpZiAoYmluYXJ5ICE9IFhZRlRfTAotI2lmZGVm IFZNUwotCQkJJiYgYmluYXJ5ICE9IFhZRlRfVSAvKiBWTVMgc3BlY2lhbCBjYXNlICovCi0jZW5k aWYgLyogVk1TICovCi0JCQkpCi0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotI2lmZGVmIE1BQwot CQkgICAgaWYgKGJpbmFyeSAhPSBYWUZUX00pIC8qIElmIG5vdCBNYWNCaW5hcnkuLi4gKi8KLSNl bmRpZiAvKiBNQUMgKi8KLQkJICAgICAgYmluYXJ5ID0gWFlGVF9COwotCQkgICAgZGVidWcoRjEw MSwiZ2F0dHIgYmluYXJ5IDMiLCIiLGJpbmFyeSk7Ci0JCX0KLQkgICAgfQotCSAgICBicmVhazsK LQotCSAgY2FzZSAnIyc6CQkJLyogRmlsZSBjcmVhdGlvbiBkYXRlICovCi0JICAgIGZvciAoaSA9 IDA7IChpIDwgYWxuKSAmJiAoaSA8IERUQlVGTCk7IGkrKykKLQkgICAgICBkdGJ1ZltpXSA9ICpz Kys7CQkvKiBDb3B5IGl0IGludG8gYSBzdGF0aWMgc3RyaW5nICovCi0JICAgIGlmIChpIDwgYWxu KSBzICs9IChhbG4gLSBpKTsKLQkgICAgZHRidWZbaV0gPSAnXDAnOwotCSAgICBpZiAoYXRkYXRp ICYmICF4ZmxnKSB7CS8qIFJlYWwgZmlsZSBhbmQgZGF0ZXMgZW5hYmxlZCAqLwotCQl5eS0+ZGF0 ZS52YWwgPSBkdGJ1ZjsJLyogUG9pbnRlciB0byBzdHJpbmcgKi8KLQkJeXktPmRhdGUubGVuID0g aTsJLyogTGVuZ3RoIG9mIHN0cmluZyAqLwotCQlpZiAoZm5jYWN0ID09IFhZRlhfVSkgewkvKiBS ZWNlaXZpbmcgaW4gdXBkYXRlIG1vZGU/ICovCi0JCSAgICBpZiAoenN0aW1lKGZmLHl5LDEpID4g MCkgeyAvKiBDb21wYXJlIGRhdGVzICovCi0JCQkqcnArKyA9IGM7CS8qIERpc2NhcmQgaWYgb2xk ZXIsIHJlYXNvbiA9IGRhdGUuICovCi0JCQlpZiAoIW9wbmVycikgdGxvZyhGMTAwLCIgcmVmdXNl ZDogZGF0ZSIsIiIsMCk7Ci0JCQlyZXRjb2RlID0gLTE7CS8qIFJlamVjdGlvbiBub3RpY2UuICov Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotCSAgICBicmVhazsKLQotCSAgY2FzZSAnKCc6CQkJLyog RmlsZSBCbG9jayBTaXplICovCi0JICAgIGZvciAoaSA9IDA7IChpIDwgYWxuKSAmJiAoaSA8IEFC VUZMKTsgaSsrKSAvKiBDb3B5IGl0ICovCi0JICAgICAgYWJ1ZltpXSA9ICpzKys7Ci0JICAgIGFi dWZbaV0gPSAnXDAnOwkJLyogVGVybWluYXRlIHdpdGggbnVsbCAqLwotCSAgICBpZiAoaSA8IGFs bikgcyArPSAoYWxuIC0gaSk7Ci0JICAgIGlmIChhdGJsa2kpCi0JICAgICAgeXktPmJsa3NpemUg PSBhdG9sKGFidWYpOyAvKiBDb252ZXJ0IHRvIG51bWJlciAqLwotCSAgICBicmVhazsKLQotCSAg Y2FzZSAnKic6CQkJLyogRW5jb2RpbmcgKHRyYW5zZmVyIHN5bnRheCkgKi8KLQkgICAgZm9yIChp ID0gMDsgKGkgPCBhbG4pICYmIChpIDwgVFNCVUZMKTsgaSsrKQotCSAgICAgIHRzYnVmW2ldID0g KnMrKzsJCS8qIENvcHkgaXQgaW50byBhIHN0YXRpYyBzdHJpbmcgKi8KLQkgICAgaWYgKGkgPCBh bG4pIHMgKz0gKGFsbiAtIGkpOwotCSAgICB0c2J1ZltpXSA9ICdcMCc7Ci0jaWZuZGVmIE5PQ1NF VFMKLQkgICAgeGxhdHlwZSA9IFhMQV9OT05FOwkJLyogQXNzdW1lIG5vIHRyYW5zbGF0aW9uICov Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCSAgICBpZiAoYXRlbmNpKSB7Ci0JCWNoYXIgKiBzczsK LQkJeXktPmVuY29kaW5nLnZhbCA9IHRzYnVmOyAvKiBQb2ludGVyIHRvIHN0cmluZyAqLwotCQl5 eS0+ZW5jb2RpbmcubGVuID0gaTsJLyogTGVuZ3RoIG9mIHN0cmluZyAqLwotCQlkZWJ1ZyhGMTAx LCJnYXR0ciBlbmNvZGluZyIsdHNidWYsaSk7Ci0JCXNzID0gdHNidWYrMTsKLQkJc3dpdGNoICgq dHNidWYpIHsKLSNpZm5kZWYgTk9DU0VUUwotCQkgIGNhc2UgJ0EnOgkJICAvKiBOb3JtYWwsIG5v dGhpbmcgc3BlY2lhbCAqLwotCQkgICAgdGNoYXJzZXQgPSBUQ19UUkFOU1A7IC8qIFRyYW5zcGFy ZW50IGNoYXJzIHVudHJhbnNsYXRlZCAqLwotCQkgICAgZGVidWcoRjExMCwiZ2F0dHIgc2V0cyB0 Y2hhcnNldCBUQ19UUkFOU1AiLCJBIiwwKTsKLQkJICAgIGJyZWFrOwotCQkgIGNhc2UgJ0MnOgkJ ICAvKiBTcGVjaWZpZWQgY2hhcmFjdGVyIHNldCAqLwotCQkgICAgaWYgKCF4ZnJ4bGEpIHsJICAv KiBCdXQgdHJhbnNsYXRpb24gZGlzYWJsZWQgKi8KLQkJCXRjaGFyc2V0ID0gVENfVFJBTlNQOwot CQkJZGVidWcoRjExMCwiZ2F0dHIgc2V0cyB0Y2hhcnNldCBUQ19UUkFOU1AiLCJDIiwwKTsKLQkJ CWJyZWFrOwotCQkgICAgfQotI2lmZGVmIFVOSUNPREUKLQkJICAgIGlmICghc3RyY21wKCJJMTk2 IixzcykpIC8qIFRyZWF0IEkxOTYgKFVURi04IG5vIGxldmVsKSAqLwotCQkgICAgICBzcyA9ICJJ MTkwIjsJICAgIC8qIGFzIEkxOTAgKFVURi04IExldmVsIDEpICovCi0jZW5kaWYgLyogVU5JQ09E RSAqLwotCQkgICAgaWYgKCFzdHJjbXAoIkk2LzIwNCIsc3MpKSAvKiBUcmVhdCAiTGF0aW4tMSAr IEV1cm8iICovCi0JCSAgICAgIHNzID0gIkk2LzEwMCI7CSAgICAgIC8qIGFzIEk2LzEwMCAocmVn dWxhciBMYXRpbi0xKSAqLwotCQkgICAgZm9yIChpID0gMDsgaSA8IG50Y3NldHM7IGkrKykgewot CQkJaWYgKCFzdHJjbXAodGNzaW5mb1tpXS5kZXNpZ25hdG9yLHNzKSkKLQkJCSAgYnJlYWs7Ci0J CSAgICB9Ci0JCSAgICBkZWJ1ZyhGMTAxLCJnYXR0ciB4ZmVyIGNoYXJzZXQgbG9va3VwIiwiIixp KTsKLQkJICAgIGlmIChpID09IG50Y3NldHMpIHsJLyogSWYgdW5rbm93biBjaGFyYWN0ZXIgc2V0 LCAqLwotCQkJZGVidWcoRjExMCwiZ2F0dHI6IHhmZXIgY2hhcnNldCB1bmtub3duIixzcywwKTsK LQkJCWlmICghdW5rY3MpIHsJLyogYW5kIFNFVCBVTktOT1dOIERJU0NBUkQsICovCi0JCQkgICAg cmV0Y29kZSA9IC0xOyAvKiByZWplY3QgdGhlIGZpbGUuICovCi0JCQkgICAgKnJwKysgPSBjOwot CQkJICAgIGlmICghb3BuZXJyKQotCQkJICAgICAgdGxvZyhGMTAwLCIgcmVmdXNlZDogY2hhcmFj dGVyIHNldCIsIiIsMCk7Ci0JCQl9Ci0JCSAgICB9IGVsc2UgewotCQkJdGNoYXJzZXQgPSB0Y3Np bmZvW2ldLmNvZGU7IC8qIGl0J3Mga25vd24sIHVzZSBpdCAqLwotCQkJZGVidWcoRjEwMSwiZ2F0 dHIgc3dpdGNoIHRjaGFyc2V0IiwiIix0Y2hhcnNldCk7Ci0JCQlkZWJ1ZyhGMTAxLCJnYXR0ciBm Y2hhcnNldCIsIiIsZmNoYXJzZXQpOwotCQkJaWYgKHJfY3NldCA9PSBYTU9ERV9BKSB7IC8qIEF1 dG9tYXRpYyBzd2l0Y2hpbmc/ICovCi0JCQkgICAgaWYgKHRjaGFyc2V0ID4gLTEgJiYgdGNoYXJz ZXQgPD0gTUFYVENTRVRTKSB7Ci0JCQkJaW50IHg7Ci0JCQkJeCA9IGF4Y3NldFt0Y2hhcnNldF07 Ci0JCQkJaWYgKHggPiAwICYmIHggPD0gTUFYRkNTRVRTKSB7Ci0JCQkJICAgIGZjaGFyc2V0ID0g eDsKLQkJCQkgICAgZGVidWcoRjEwMSwiZ2F0dHIgc3dpdGNoIGZjaGFyc2V0IiwiIix4KTsKLQkJ CQl9Ci0JCQkgICAgfQotCQkJfQotCQkJLyogU2V0IHVwIHRyYW5zbGF0aW9uIHR5cGUgYW5kIGZ1 bmN0aW9uICovCi0JCQlzZXR4bGF0eXBlKHRjaGFyc2V0LGZjaGFyc2V0KTsKLQkJICAgIH0KLQkJ YnJlYWs7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCSAgICAgIGRlZmF1bHQ6CQkJLyogU29tZXRo aW5nIGVsc2UuICovCi0JCWRlYnVnKEYxMTAsImdhdHRyIHVuayBlbmNvZGluZyBhdHRyaWJ1dGUi LHRzYnVmLDApOwotCQlpZiAoIXVua2NzKSB7CQkvKiBJZiBTRVQgVU5LIERJU0MgKi8KLQkJICAg IHJldGNvZGUgPSAtMTsKLQkJICAgICpycCsrID0gYzsKLQkJICAgIGlmICghb3BuZXJyKSB0bG9n KEYxMDAsIiByZWZ1c2VkOiBlbmNvZGluZyIsIiIsMCk7Ci0JCX0KLQkJYnJlYWs7Ci0JCX0KLQkg ICAgfQotCSAgICBicmVhazsKLQotCSAgY2FzZSAnKyc6CQkJLyogRGlzcG9zaXRpb24gKi8KLSNp ZmRlZiBEWU5BTUlDCi0JICAgIGlmICghZHNidWYpCi0JICAgICAgaWYgKChkc2J1ZiA9IG1hbGxv YyhEU0JVRkwrMSkpID09IE5VTEwpCi0JCWZhdGFsKCJndGF0dHI6IG5vIG1lbW9yeSBmb3IgZHNi dWYiKTsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0JICAgIGZvciAoaSA9IDA7IChpIDwgYWxuKSAm JiAoaSA8IERTQlVGTCk7IGkrKykKLQkgICAgICBkc2J1ZltpXSA9ICpzKys7CQkvKiBDb3B5IGl0 IGludG8gYSBzZXBhcmF0ZSBzdHJpbmcgKi8KLQkgICAgZHNidWZbaV0gPSAnXDAnOwotCSAgICBp ZiAoaSA8IGFsbikgcyArPSAoYWxuIC0gaSk7Ci0JICAgIHJzX2xlbiA9IChDS19PRkZfVCkwOwot CSAgICBpZiAoYXRkaXNpKSB7CQkvKiBXZSBhcmUgZG9pbmcgdGhpcyBhdHRyaWJ1dGUgKi8KLQkJ LyogQ29weSBpdCBpbnRvIHRoZSBhdHRyaWJ1dGUgc3RydWN0dXJlICovCi0JCXl5LT5kaXNwLnZh bCA9IGRzYnVmOwkvKiBQb2ludGVyIHRvIHN0cmluZyAqLwotCQl5eS0+ZGlzcC5sZW4gPSBpOwkv KiBMZW5ndGggb2Ygc3RyaW5nICovCi0JCWQgPSAqZHNidWY7Ci0jaWZuZGVmIE5PRElTUE8KLS8q Ci0gIERlZmluZSBOT0RJU1BPIHRvIGRpc2FibGUgcmVjZWlwdCBvZiBtYWlsIG9yIHByaW50IGZp bGVzIGFuZCBvZiBSRVNFTkQuCi0qLwotCQlpZiAoCi0jaWZuZGVmIGRhdGFnZW5lcmFsCQkJLyog TUFJTCBzdXBwb3J0ZWQgb25seSBmb3IgKi8KLSNpZm5kZWYgT1MyCQkJCS8qIFVOSVgsIFZNUywg YW5kIE9TLTkgKi8KLSNpZm5kZWYgTUFDCi0jaWZuZGVmIEdFTURPUwotI2lmbmRlZiBBTUlHQQot CQkgICAgZCAhPSAnTScgJiYJCS8qIE1BSUwgKi8KLSNlbmRpZiAvKiBBTUlHQSAqLwotI2VuZGlm IC8qIEdFTURPUyAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIE9TLzIgKi8KLSNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2lmZGVmIENLX1JFU0VORAotCQkgICAgZCAhPSAnUicgJiYJ CS8qIFJFU0VORCAqLwotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotCQkgICAgZCAhPSAnUCcpIHsJ CS8qIFBSSU5UICovCi0JCSAgICByZXRjb2RlID0gLTE7CS8qIFVua25vd24vdW5zdXBwb3J0ZWQg ZGlzcG9zaXRpb24gKi8KLQkJICAgICpycCsrID0gYzsKLQkJICAgIGlmICghb3BuZXJyKSB0bG9n KEYxMDEsIiByZWZ1c2VkOiBiYWQgZGlzcG9zaXRpb24iLCIiLGQpOwotCQl9Ci0JCWRpc3BvcyA9 IGQ7Ci0JCWRlYnVnKEYwMDAsImdhdHRyIGRpc3BvcyIsIiIsZGlzcG9zKTsKLQkJc3dpdGNoIChk KSB7Ci0jaWZuZGVmIE5PRlJJTExTCi0JCSAgY2FzZSAnTSc6Ci0JCSAgICBpZiAoIWVuX21haSkg ewotCQkJcmV0Y29kZSA9IC0xOwotCQkJKnJwKysgPSBjOwotCQkJaWYgKCFvcG5lcnIpIHRsb2co RjEwMCwiIHJlZnVzZWQ6IG1haWwgZGlzYWJsZWQiLCIiLDApOwotCQkJZGlzcG9zID0gMDsKLQkJ ICAgIH0KLQkJICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0JCSAgY2FzZSAnUCc6 Ci0JCSAgICBpZiAoIWVuX3ByaSkgewotCQkJcmV0Y29kZSA9IC0xOwotCQkJKnJwKysgPSBjOwot CQkJaWYgKCFvcG5lcnIpCi0JCQkgIHRsb2coRjEwMCwiIHJlZnVzZWQ6IHByaW50IGRpc2FibGVk IiwiIiwwKTsKLQkJCWRpc3BvcyA9IDA7Ci0JCSAgICB9Ci0JCSAgICBicmVhazsKLQotCQkgIGNh c2UgJ1InOgotCQkgICAgZGlzcG9zID0gMDsKLSNpZmRlZiBDS19SRVNFTkQKLQkJICAgIHJzX2xl biA9IHpnZXRmcyhmZik7IC8qIEdldCBsZW5ndGggb2YgZmlsZSAqLwotCQkgICAgZGVidWcoRjEx MSwiZ2F0dHIgUkVTRU5EIixmZixyc19sZW4pOwotI2lmZGVmIFZNUwotCQkgICAgcnNfbGVuICY9 IChsb25nKSAtNTEyOyAvKiBFbnN1cmUgYmxvY2sgYm91bmRhcnkgaWYgVk1TICovCi0JCSAgICBy c19sZW4gLT0gNTEyOwkgIC8qIEluIGNhc2UgbGFzdCBibG9jayBub3QgY29tcGxldGUgKi8KLQkJ ICAgIGRlYnVnKEYxMTEsImdhdHRyIHJzX2xlbiIsZmYscnNfbGVuKTsKLSNlbmRpZiAvKiBWTVMg Ki8KLSNpZmRlZiBDT01NRU5UCi0JCSAgICBpZiAocnNfbGVuIDwgMEwpCS8qIExvY2FsIGZpbGUg ZG9lc24ndCBleGlzdCAqLwotCQkgICAgICByc19sZW4gPSAwTDsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0vKgotICBBbm90aGVyIHBvc3NpYmlsaXR5IGhlcmUgKG9yIGxhdGVyLCByZWFsbHkpIHdv dWxkIGJlIHRvIGNoZWNrIGlmIHRoZSB0d28KLSAgZmlsZSBsZW5ndGhzIGFyZSB0aGUgc2FtZSwg YW5kIGlmIHNvLCBrZWVwIHRoZSBwcmV2YWlsaW5nIGNvbGxpc2lvbiBhY3Rpb24KLSAgYXMgaXMg KG5vdGU6IHJzX2xlbiA9PSBsZW5ndGggb2YgZXhpc3RpbmcgZmlsZTsgeXktPmxlbmd0aCA9PSBm c2l6ZSA9PQotICBsZW5ndGggb2YgaW5jb21pbmcgZmlsZSkuICBUaGlzIGNvdWxkIGJlIGNvbXBs aWNhdGVkLCB0aG91Z2gsIHNpbmNlCi0gIChhKSB3ZSBtaWdodCBub3QgaGF2ZSByZWNlaXZlZCB0 aGUgbGVuZ3RoIGF0dHJpYnV0ZSB5ZXQsIGFuZCBpbiBmYWN0IGl0Ci0gIG1pZ2h0IGV2ZW4gYmUg aW4gYSBzdWJzZXF1ZW50IEEtcGFja2V0LCB5ZXQgKGIpIHdlIGhhdmUgdG8gYWNjZXB0IG9yIHJl amVjdAotICB0aGUgUmVjb3ZlciBhdHRyaWJ1dGUgbm93LiAgU28gYmV0dGVyIHRvIGxlYXZlIGFz LWlzLiAgQW55d2F5LCBpdCdzIHByb2JhYmx5Ci0gIG1vcmUgdXNlZnVsIHRoaXMgd2F5LgotKi8K LQkJICAgIGlmIChyc19sZW4gPiAoQ0tfT0ZGX1QpMCkgewotCQkJZm5jc2F2ID0gZm5jYWN0OyAv KiBTYXZlIGNvbGxpc2lvbiBhY3Rpb24gKi8KLQkJCWZuY2FjdCA9IFhZRlhfQTsgLyogU3dpdGNo IHRvIEFQUEVORCAqLwotCQkgICAgfQotI2Vsc2UKLQkJICAgIHJldGNvZGUgPSAtMTsJLyogVGhp cyBzaG91bGRuJ3QgaGFwcGVuICovCi0JCSAgICAqcnArKyA9IGM7CQkvKiAnY2F1c2UgaXQgd2Fz bid0IG5lZ290aWF0ZWQuICovCi0JCSAgICBpZiAoIW9wbmVycikgdGxvZyhGMTAwLCIgcmVmdXNl ZDogcmVzZW5kIiwiIiwwKTsKLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8KLQkJfQotI2Vsc2UgIC8q IE5PRElTUE8gKi8KLQkJcmV0Y29kZSA9IC0xOwotCQkqcnArKyA9IGM7Ci0JCWlmICghb3BuZXJy KSB0bG9nKEYxMDAsIiByZWZ1c2VkOiBOT0RJU1BPIiwiIiwwKTsKLSNlbmRpZiAvKiBOT0RJU1BP ICovCi0JICAgIH0KLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJy4nOgkJCS8qIFNlbmRlcidzIHN5 c3RlbSBJRCAqLwotCSAgICBmb3IgKGkgPSAwOyAoaSA8IGFsbikgJiYgKGkgPCBJREJVRkwpOyBp KyspCi0JICAgICAgaWRidWZbaV0gPSAqcysrOwkJLyogQ29weSBpdCBpbnRvIGEgc3RhdGljIHN0 cmluZyAqLwotCSAgICBpZGJ1ZltpXSA9ICdcMCc7Ci0JICAgIGlmIChpIDwgYWxuKSBzICs9IChh bG4gLSBpKTsKLQkgICAgaWYgKGF0c2lkaSkgewotCQl5eS0+c3lzdGVtaWQudmFsID0gaWRidWY7 IC8qIFBvaW50ZXIgdG8gc3RyaW5nICovCi0JCXl5LT5zeXN0ZW1pZC5sZW4gPSBpOwkvKiBMZW5n dGggb2Ygc3RyaW5nICovCi0JICAgIH0KLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJzAnOgkJCS8q IFN5c3RlbS1kZXBlbmRlbnQgcGFyYW1ldGVycyAqLwotI2lmZGVmIERZTkFNSUMKLQkgICAgaWYg KCFzcGJ1ZiAmJiAhKHNwYnVmID0gbWFsbG9jKFNQQlVGTCkpKQotCQlmYXRhbCgiZ2F0dHI6IG5v IG1lbW9yeSBmb3Igc3BidWYiKTsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0JICAgIGZvciAoaSA9 IDA7IChpIDwgYWxuKSAmJiAoaSA8IFNQQlVGTCk7IGkrKykKLQkgICAgICBzcGJ1ZltpXSA9ICpz Kys7CQkvKiBDb3B5IGl0IGludG8gYSBzdGF0aWMgc3RyaW5nICovCi0JICAgIHNwYnVmW2ldID0g J1wwJzsKLQkgICAgaWYgKGkgPCBhbG4pIHMgKz0gKGFsbiAtIGkpOwotCSAgICBpZiAoYXRzeXNp KSB7Ci0JCXl5LT5zeXNwYXJhbS52YWwgPSBzcGJ1ZjsgLyogUG9pbnRlciB0byBzdHJpbmcgKi8K LQkJeXktPnN5c3BhcmFtLmxlbiA9IGk7CS8qIExlbmd0aCBvZiBzdHJpbmcgKi8KLQkgICAgfQot CSAgICBicmVhazsKLQotCSAgY2FzZSAnISc6CQkJLyogRmlsZSBsZW5ndGggaW4gSyAqLwotCSAg Y2FzZSAnMSc6IHsJCQkvKiBGaWxlIGxlbmd0aCBpbiBieXRlcyAqLwotCSAgICAgIGNoYXIgKiBs MjsKLQkgICAgICBDS19PRkZfVCB4bGVuOwotCSAgICAgIGZvciAoaSA9IDA7IChpIDwgYWxuKSAm JiAoaSA8IEFCVUZMKTsgaSsrKSAvKiBDb3B5IGl0ICovCi0JCWFidWZbaV0gPSAqcysrOwotCSAg ICAgIGFidWZbaV0gPSAnXDAnOwkJLyogVGVybWluYXRlIHdpdGggbnVsbCAqLwotCSAgICAgIGlm IChpIDwgYWxuKSBzICs9IChhbG4gLSBpKTsKLQkgICAgICBpZiAocmRpZ2l0cyhhYnVmKSkgewkv KiBNYWtlIHN1cmUgc3RyaW5nIGlzIGFsbCBkaWdpdHMgKi8KLQkJICB4bGVuID0gY2thdG9mcyhh YnVmKTsJLyogQ29udmVydCB0byBudW1iZXIgKi8KLQkJICBsMiA9IGNrZnN0b2EoeGxlbik7CS8q IENvbnZlcnQgbnVtYmVyIGJhY2sgdG8gc3RyaW5nICovCi0JCSAgaWYgKGMgPT0gJzEnKQotCQkg ICAgZGVidWcoRjExMSwiZ2F0dHIgbGVuZ3RoIixhYnVmLHhsZW4pOwotCQkgIGVsc2UKLQkJICAg IGRlYnVnKEYxMTEsImdhdHRyIGxlbmd0aGsiLGFidWYseGxlbik7Ci0JCSAgaWYgKGNrc3RyY21w KGFidWYsbDIsLTEsMSkpIHsgLyogVGhpcyBpcyBob3cgd2UgY2hlY2suLi4gKi8KLQkJICAgICAg eGxlbiA9IChDS19PRkZfVCktMjsgLyogLTIgPSB1bmssIHBvc3NpYmx5IHRvbyBsb25nICovCi0J CSAgICAgIG92ZXJmbG93Kys7Ci0JCSAgICAgIGRlYnVnKEYxMTEsImdhdHRyIG92ZXJmbG93IiwK LQkJCSAgICAoYyA9PSAnMScpID8gImxlbmd0aCIgOiAibGVuZ3RoayIsCi0JCQkgICAgeGxlbik7 Ci0JCSAgfQotCQkgIGlmIChjID09ICcxJykgewotCQkgICAgICB5eS0+bGVuZ3RoID0geGxlbjsK LQkJICAgICAgZGVidWcoRjEwMSwiZ2F0dHIgbGVuZ3RoIiwiIix4bGVuKTsKLQkJICB9IGVsc2Ug ewotCQkgICAgICB5eS0+bGVuZ3RoayA9IHhsZW47Ci0JCSAgICAgIGRlYnVnKEYxMDEsImdhdHRy IGxlbmd0aGsiLCIiLHhsZW4pOwotCQkgIH0KLQkgICAgICB9Ci0JICAgICAgLyogSWYgdGhlIGxl bmd0aCBmaWVsZCBpcyBub3QgbnVtZXJpYyBhY2NlcHQgdGhlIGZpbGUgKi8KLQkgICAgICAvKiBh bnl3YXkgYnV0IHdpdGggYW4gdW5rbm93biBsZW5ndGggKi8KLQkgICAgICBicmVhazsKLQkgIH0K LQotI2lmZGVmIENLX1BFUk1TCi0JICBjYXNlICcsJzoJCQkvKiBTeXN0ZW0tZGVwZW5kZW50IHBy b3RlY3Rpb24gY29kZSAqLwotCSAgICBmb3IgKGkgPSAwOyAoaSA8IGFsbikgJiYgKGkgPCBDS19Q RVJNTEVOKTsgaSsrKQotCSAgICAgIGxwcm1idWZbaV0gPSAqcysrOwkvKiBKdXN0IGNvcHkgaXQg LSBkZWNvZGUgbGF0ZXIgKi8KLQkgICAgbHBybWJ1ZltpXSA9ICdcMCc7CQkvKiBUZXJtaW5hdGUg d2l0aCBudWxsICovCi0JICAgIGlmIChpIDwgYWxuKSBzICs9IChhbG4gLSBpKTsKLQkgICAgaWYg KGF0bHByaSkgewotCQl5eS0+bHByb3RlY3QudmFsID0gKGNoYXIgKilscHJtYnVmOwotCQl5eS0+ bHByb3RlY3QubGVuID0gaTsKLQkgICAgfSBlbHNlCi0JICAgICAgbHBybWJ1ZlswXSA9IE5VTDsK LQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJy0nOgkJCS8qIEdlbmVyaWMgIndvcmxkIiBwcm90ZWN0 aW9uIGNvZGUgKi8KLQkgICAgZ3BybWJ1ZlswXSA9IE5VTDsJCS8qIEp1c3QgMSBieXRlIGJ5IGRl ZmluaXRpb24gKi8KLQkgICAgZm9yIChpID0gMDsgaSA8IGFsbjsgaSsrKQkvKiBCdXQgYWxsb3cg Zm9yIG1vcmUuLi4gKi8KLQkgICAgICBpZiAoaSA9PSAwKSBncHJtYnVmWzBdID0gKnMrKzsKLQkg ICAgZ3BybWJ1ZlsxXSA9IE5VTDsKLQkgICAgaWYgKGF0Z3ByaSkgewotCQl5eS0+Z3Byb3RlY3Qu dmFsID0gKGNoYXIgKilncHJtYnVmOwotCQl5eS0+Z3Byb3RlY3QubGVuID0gZ3BybWJ1ZlswXSA/ IDEgOiAwOwotCSAgICB9IGVsc2UKLQkgICAgICBncHJtYnVmWzBdID0gTlVMOwotCSAgICBicmVh azsKLSNlbmRpZiAvKiBDS19QRVJNUyAqLwotCi0JICBkZWZhdWx0OgkJCS8qIFVua25vd24gYXR0 cmlidXRlICovCi0JICAgIHMgKz0gYWxuOwkJCS8qIEp1c3Qgc2tpcCBwYXN0IGl0ICovCi0JICAg IGJyZWFrOwotCX0KLSAgICB9Ci0KLSAgICAvKiBDaGVjayBzcGFjZSBub3csIGJlY2F1c2Ugd2Ug YWxzbyBuZWVkIHRvIGtub3cgdGhlIGZpbGUgdHlwZSAqLwotICAgIC8qIGluIGNhc2UgemNoa3Nw YSgpIGRpZmZlcmVudGlhdGVzIHRleHQgYW5kIGJpbmFyeSAoVk1TIHZlcnNpb24gZG9lcykgKi8K LQotICAgIGlmIChhdGxlbmkgJiYgIWNhbGlicmF0ZSkgewkJLyogTGVuZ3RoIGF0dHJpYnV0ZSBl bmFibGVkPyAqLwotCWlmICh5eS0+bGVuZ3RoID4gKENLX09GRl9UKS0xKSB7IC8qIExlbmd0aC1p bi1ieXRlcyBhdHRyaWJ1dGUgcmVjJ2Q/ICovCi0JICAgIGlmICghemNoa3NwYShmZiwoeXktPmxl bmd0aCkpKSB7IC8qIENoZWNrIHNwYWNlICovCi0JCXJldGNvZGUgPSAtMTsJCSAgICAgLyogTm90 IGVudWYgKi8KLQkJKnJwKysgPSAnMSc7Ci0JCWlmICghb3BuZXJyKSB0bG9nKEYxMDAsIiByZWZ1 c2VkOiBsZW5ndGggYnl0ZXMiLCIiLDApOwotCSAgICB9Ci0JfSBlbHNlIGlmICh5eS0+bGVuZ3Ro ayA+IChDS19PRkZfVCktMSkgeyAvKiBMZW5ndGggaW4gSyByZWNlaXZlZD8gKi8KLQkgICAgbG9u ZyB4bGVuOwotCSAgICB4bGVuID0geXktPmxlbmd0aGsgKiAxMDI0OwotCSAgICBpZiAoIXpjaGtz cGEoZmYseGxlbikpIHsKLQkJcmV0Y29kZSA9IC0xOwkJLyogQ2hlY2sgc3BhY2UgKi8KLQkJKnJw KysgPSAnISc7Ci0JCWlmICghb3BuZXJyKSB0bG9nKEYxMDAsIiByZWZ1c2VkOiBsZW5ndGggSyIs IiIsMCk7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIGlmIChyZXRjb2RlID4gLTFMKSB7CQkvKiBS ZW1lbWJlciB0aGUgZmlsZSBzaXplICovCi0JaWYgKHl5LT5sZW5ndGggPiAoQ0tfT0ZGX1QpLTEp IHsKLQkgICAgZnNpemUgPSB5eS0+bGVuZ3RoOwotCX0gZWxzZSBpZiAoeXktPmxlbmd0aGsgPiAo Q0tfT0ZGX1QpLTEgJiYgIW92ZXJmbG93KSB7Ci0JICAgIGZzaXplID0geXktPmxlbmd0aGsgKiAx MDI0TDsKLQl9IGVsc2UgZnNpemUgPSB5eS0+bGVuZ3RoOwkvKiAoZS5nLiAtMkwpICovCi0gICAg fQotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0jaWZkZWYgQ09NTUVOVAotCXNw cmludGYoYWJ1ZiwiJWxkIixmc2l6ZSk7CS8qIHNhZmUgKi8KLSNlbHNlCi0JY2tzdHJuY3B5KGFi dWYsY2tmc3RvYShmc2l6ZSksQUJVRkwpOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLWRlYnVnKEYx MTAsImdhdHRyIGZzaXplIixhYnVmLDApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0g ICAgaWYgKHJldGNvZGUgPT0gMCkgcnAgPSBycGJ1ZjsJLyogTnVsbCByZXBseSBzdHJpbmcgaWYg YWNjZXB0ZWQgKi8KLSAgICAqcnAgPSAnXDAnOwkJCQkvKiBFbmQgb2YgcmVwbHkgc3RyaW5nICov Ci0KLSNpZmRlZiBDS19SRVNFTkQKLSAgICBpZiAoZCA9PSAnUicpIHsJCQkvKiBSZWNlaXZpbmcg YSBSRVNFTkQ/ICovCi0JZGVidWcoRjEwMSwiZ2F0dHIgUkVTRU5EIiwiIixyZXRjb2RlKTsKLQkv KiBXZSBpZ25vcmUgcmV0Y29kZXMgYmVjYXVzZSB0aGlzIG92ZXJyaWRlcyAqLwotCWlmIChiaW5h cnkgIT0gWFlGVF9CKSB7CQkvKiBSZWplY3QgaWYgbm90IGJpbmFyeSAqLwotCSAgICByZXRjb2Rl ID0gLTE7CQkvKiBpbiBjYXNlIHR5cGUgZmllbGQgY2FtZSAqLwotCSAgICBja3N0cm5jcHkocnBi dWYsIk4rIixSUEJVRkwpOyAvKiBhZnRlciB0aGUgZGlzcG9zaXRpb24gZmllbGQgKi8KLQkgICAg ZGVidWcoRjExMSwiZ2F0dHIgUkVTRU5EIG5vdCBiaW5hcnkiLHJwYnVmLGJpbmFyeSk7Ci0JfSBl bHNlIHsJCQkvKiBCaW5hcnkgbW9kZSAqLwotCSAgICByZXRjb2RlID0gMDsJCS8qIEFjY2VwdCB0 aGUgZmlsZSAqLwotCSAgICBkaXNjYXJkID0gMDsJCS8qIElmIFNFVCBGSUxFIENPTExJU0lPTiBE SVNDQVJEICovCi0jaWZkZWYgQ09NTUVOVAotCSAgICBzcHJpbnRmKHJwYnVmKzIsIiVsZCIscnNf bGVuKTsgLyogUmVwbHkgd2l0aCBsZW5ndGggb2YgZmlsZSAqLwotI2Vsc2UKLQkgICAgY2tzdHJu Y3B5KHJwYnVmKzIsY2tmc3RvYShyc19sZW4pLFJQQlVGTC0yKTsKLSNlbmRpZgkvKiBDT01NRU5U ICovCi0JICAgIHJwYnVmWzBdID0gJzEnOwkJLyogJzEnIG1lYW5zIExlbmd0aCBpbiBCeXRlcyAq LwotCSAgICBycGJ1ZlsxXSA9IHRvY2hhcigoaW50KXN0cmxlbihycGJ1ZisyKSk7IC8qIExlbmd0 aCBvZiBsZW5ndGggKi8KLQkgICAgZGVidWcoRjExMSwiZ2F0dHIgUkVTRU5EIE9LIixycGJ1Zixy ZXRjb2RlKTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotICAgIGlmIChyZXRj b2RlID09IDAgJiYgZGlzY2FyZCAhPSAwKSB7CS8qIERvIHdlIHN0aWxsIGhhdmUgYSBkaXNjYXJk IGZsYWc/ICovCi0JY2tzdHJuY3B5KHJwYnVmLCJOPyIsUlBCVUZMKTsJLyogWWVzLCBtdXN0IGJl IGZpbGVuYW1lIGNvbGxpc2lvbiAqLwotCXJldGNvZGUgPSAtMTsJCQkvKiAiPyIgPSBuYW1lIChy ZXBseS1vbmx5IGNvZGUpICovCi0gICAgfQotICAgIHl5LT5yZXBseS52YWwgPSBycGJ1ZjsJCS8q IEFkZCBpdCB0byBhdHRyaWJ1dGUgc3RydWN0dXJlICovCi0gICAgeXktPnJlcGx5LmxlbiA9IChp bnQpc3RybGVuKHJwYnVmKTsKLSAgICBpZiAocmV0Y29kZSA8IDApIHsJCQkvKiBJZiB3ZSBhcmUg cmVqZWN0aW5nICovCi0JZGlzY2FyZCA9IDE7CQkJLyogcmVtZW1iZXIgdG8gZGlzY2FyZCB0aGUg ZmlsZSAqLwotCXJlamVjdGlvbiA9IHJwYnVmWzFdOwkJLyogYW5kIHVzZSB0aGUgZmlyc3QgcmVh c29uIGdpdmVuLiAqLwotCWlmIChmbmNzYXYgIT0gLTEpIHsKLQkgICAgZm5jYWN0ID0gZm5jc2F2 OwotCSAgICBmbmNzYXYgPSAtMTsKLQl9Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsImdhdHRyIHJl dHVybiIscnBidWYscmV0Y29kZSk7Ci0gICAgcmV0dXJuKHJldGNvZGUpOwotfQotCi0vKiAgSSBO IEkgVCBBIFQgVCBSICAtLSAgSW5pdGlhbGl6ZSBmaWxlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgICov Ci0KLWludAotaW5pdGF0dHIoeXkpIHN0cnVjdCB6YXR0ciAqeXk7IHsKLSAgICB5eS0+bGVuZ3Ro ayA9IHl5LT5sZW5ndGggPSAoQ0tfT0ZGX1QpLTE7Ci0gICAgeXktPnR5cGUudmFsID0gIiI7Ci0g ICAgeXktPnR5cGUubGVuID0gMDsKLSAgICB5eS0+ZGF0ZS52YWwgPSAiIjsKLSAgICB5eS0+ZGF0 ZS5sZW4gPSAwOwotICAgIHl5LT5lbmNvZGluZy52YWwgPSAiIjsKLSAgICB5eS0+ZW5jb2Rpbmcu bGVuID0gMDsKLSAgICB5eS0+ZGlzcC52YWwgPSAiIjsKLSAgICB5eS0+ZGlzcC5sZW4gPSAwOwot ICAgIHl5LT5zeXN0ZW1pZC52YWwgPSAiIjsKLSAgICB5eS0+c3lzdGVtaWQubGVuID0gMDsKLSAg ICB5eS0+c3lzcGFyYW0udmFsID0gIiI7Ci0gICAgeXktPnN5c3BhcmFtLmxlbiA9IDA7Ci0gICAg eXktPmNyZWF0b3IudmFsID0gIiI7Ci0gICAgeXktPmNyZWF0b3IubGVuID0gMDsKLSAgICB5eS0+ YWNjb3VudC52YWwgPSAiIjsKLSAgICB5eS0+YWNjb3VudC5sZW4gPSAwOwotICAgIHl5LT5hcmVh LnZhbCA9ICIiOwotICAgIHl5LT5hcmVhLmxlbiA9IDA7Ci0gICAgeXktPnBhc3N3b3JkLnZhbCA9 ICIiOwotICAgIHl5LT5wYXNzd29yZC5sZW4gPSAwOwotICAgIHl5LT5ibGtzaXplID0gLTFMOwot ICAgIHl5LT54YWNjZXNzLnZhbCA9ICIiOwotICAgIHl5LT54YWNjZXNzLmxlbiA9IDA7Ci0jaWZk ZWYgQ0tfUEVSTVMKLSAgICBpZiAoIW9mcGVybXMpIG9mcGVybXMgPSAiIjsKLSAgICBkZWJ1ZyhG MTEwLCJpbml0YXR0ciBvZnBlcm1zIixvZnBlcm1zLDApOwotICAgIHl5LT5scHJvdGVjdC52YWwg PSBvZnBlcm1zOwotICAgIHl5LT5scHJvdGVjdC5sZW4gPSAwIC0gc3RybGVuKG9mcGVybXMpOyAv KiA8LS0gTk9URSEgKi8KLSAgICAvKgotICAgICAgQSBuZWdhdGl2ZSBsZW5ndGggaW5kaWNhdGVz IHRoYXQgd2UgaGF2ZSBhIHBlcm1pc3Npb25zIHN0cmluZyBidXQgaXQgaGFzCi0gICAgICBiZWVu IGluaGVyaXRlZCBmcm9tIGEgcHJldmlvdXNseSBleGlzdGluZyBmaWxlIHJhdGhlciB0aGFuIHBp Y2tlZCB1cAotICAgICAgZnJvbSBhbiBpbmNvbWluZyBBLXBhY2tldC4KLSAgICAqLwotI2Vsc2UK LSAgICB5eS0+bHByb3RlY3QudmFsID0gIiI7Ci0gICAgeXktPmxwcm90ZWN0LmxlbiA9IDA7Ci0j ZW5kaWYgLyogQ0tfUEVSTVMgKi8KLSAgICB5eS0+Z3Byb3RlY3QudmFsID0gIiI7Ci0gICAgeXkt Pmdwcm90ZWN0LmxlbiA9IDA7Ci0gICAgeXktPnJlY2ZtLnZhbCA9ICIiOwotICAgIHl5LT5yZWNm bS5sZW4gPSAwOwotICAgIHl5LT5yZXBseS52YWwgPSAiIjsKLSAgICB5eS0+cmVwbHkubGVuID0g MDsKLSNpZmRlZiBPUzIKLSAgICB5eS0+bG9uZ25hbWUubGVuID0gMCA7Ci0gICAgeXktPmxvbmdu YW1lLnZhbCA9ICIiIDsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8q ICBBIEQgRSBCIFUgLS0gV3JpdGUgYXR0cmlidXRlIHBhY2tldCBpbmZvIHRvIGRlYnVnIGxvZyAg Ki8KLQotaW50Ci1hZGVidShmLHp6KSBjaGFyICpmOyBzdHJ1Y3QgemF0dHIgKnp6OyB7Ci0jaWZk ZWYgREVCVUcKLSAgICBpZiAoZGVibG9nID09IDApIHJldHVybigwKTsKLSAgICBkZWJ1ZyhGMTEw LCJBdHRyaWJ1dGVzIGZvciBpbmNvbWluZyBmaWxlICIsZiwwKTsKLSAgICBkZWJ1ZyhGMTAxLCIg bGVuZ3RoIGluIEsiLCIiLChpbnQpIHp6LT5sZW5ndGhrKTsKLSAgICBkZWJ1ZyhGMTExLCIgZmls ZSB0eXBlIix6ei0+dHlwZS52YWwsenotPnR5cGUubGVuKTsKLSAgICBkZWJ1ZyhGMTExLCIgY3Jl YXRpb24gZGF0ZSIsenotPmRhdGUudmFsLHp6LT5kYXRlLmxlbik7Ci0gICAgZGVidWcoRjExMSwi IGNyZWF0b3IiLHp6LT5jcmVhdG9yLnZhbCx6ei0+Y3JlYXRvci5sZW4pOwotICAgIGRlYnVnKEYx MTEsIiBhY2NvdW50Iix6ei0+YWNjb3VudC52YWwsenotPmFjY291bnQubGVuKTsKLSAgICBkZWJ1 ZyhGMTExLCIgYXJlYSIsenotPmFyZWEudmFsLHp6LT5hcmVhLmxlbik7Ci0gICAgZGVidWcoRjEx MSwiIHBhc3N3b3JkIix6ei0+cGFzc3dvcmQudmFsLHp6LT5wYXNzd29yZC5sZW4pOwotICAgIGRl YnVnKEYxMDEsIiBibGtzaXplIiwiIiwoaW50KSB6ei0+Ymxrc2l6ZSk7Ci0gICAgZGVidWcoRjEx MSwiIGFjY2VzcyIsenotPnhhY2Nlc3MudmFsLHp6LT54YWNjZXNzLmxlbik7Ci0gICAgZGVidWco RjExMSwiIGVuY29kaW5nIix6ei0+ZW5jb2RpbmcudmFsLHp6LT5lbmNvZGluZy5sZW4pOwotICAg IGRlYnVnKEYxMTEsIiBkaXNwb3NpdGlvbiIsenotPmRpc3AudmFsLHp6LT5kaXNwLmxlbik7Ci0g ICAgZGVidWcoRjExMSwiIGxwcm90ZWN0aW9uIix6ei0+bHByb3RlY3QudmFsLHp6LT5scHJvdGVj dC5sZW4pOwotICAgIGRlYnVnKEYxMTEsIiBncHJvdGVjdGlvbiIsenotPmdwcm90ZWN0LnZhbCx6 ei0+Z3Byb3RlY3QubGVuKTsKLSAgICBkZWJ1ZyhGMTExLCIgc3lzdGVtaWQiLHp6LT5zeXN0ZW1p ZC52YWwsenotPnN5c3RlbWlkLmxlbik7Ci0gICAgZGVidWcoRjExMSwiIHJlY2ZtIix6ei0+cmVj Zm0udmFsLHp6LT5yZWNmbS5sZW4pOwotICAgIGRlYnVnKEYxMTEsIiBzeXNwYXJhbSIsenotPnN5 c3BhcmFtLnZhbCx6ei0+c3lzcGFyYW0ubGVuKTsKLSAgICBkZWJ1ZyhGMTAxLCIgbGVuZ3RoIiwi IiwoaW50KSB6ei0+bGVuZ3RoKTsKLSAgICBkZWJ1ZyhGMTEwLCIgcmVwbHkiLHp6LT5yZXBseS52 YWwsMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qICBPIFAg RSBOIEEgLS0gT3BlbiBhIGZpbGUsIHdpdGggYXR0cmlidXRlcy4gICovCi0vKgotICBUaGlzIGZ1 bmN0aW9uIHRyaWVzIHRvIG9wZW4gYSBuZXcgZmlsZSB0byBwdXQgdGhlIGFycml2aW5nIGRhdGEg aW4uICBUaGUKLSAgZmlsZW5hbWUgaXMgdGhlIG9uZSBpbiB0aGUgc3J2Y21kIGJ1ZmZlci4gIEZp bGUgY29sbGlzaW9uIGFjdGlvbnMgYXJlOgotICBPVkVSV1JJVEUgKHRoZSBleGlzdGluZyBmaWxl IGlzIG92ZXJ3cml0dGVuKSwgUkVOQU1FICh0aGUgbmV3IGZpbGUgaXMKLSAgcmVuYW1lZCksIEJB Q0tVUCAodGhlIGV4aXN0aW5nIGZpbGUgaXMgcmVuYW1lZCksIERJU0NBUkQgKHRoZSBuZXcgZmls ZSBpcwotICByZWZ1c2VkKSwgVVBEQVRFICh0aGUgaW5jb21pbmcgZmlsZSByZXBsYWNlcyB0aGUg ZXhpc3RpbmcgZmlsZSBvbmx5IGlmIHRoZQotICBpbmNvbWluZyBmaWxlIGhhcyBhIG5ld2VyIGNy ZWF0aW9uIGRhdGUpLgotCi0gIFJldHVybnMgMCBvbiBmYWlsdXJlLCBub256ZXJvIG9uIHN1Y2Nl c3MuCi0qLwotZXh0ZXJuIGNoYXIgKnJmX2VycjsKLQotaW50Ci1vcGVuYShmLHp6KSBjaGFyICpm OyBzdHJ1Y3QgemF0dHIgKnp6OyB7Ci0gICAgaW50IHgsIGRpc3BvcyA9IDA7Ci0gICAgc3RhdGlj IHN0cnVjdCBmaWxpbmZvIGZjYjsJCS8qIE11c3QgYmUgc3RhdGljISAqLwotCi0gICAgZGVidWco RjExMCwib3BlbmEgZiIsZiwwKTsKLSAgICBkZWJ1ZyhGMTAxLCJvcGVuYSBkaXNjYXJkIiwiIixk aXNjYXJkKTsKLQotICAgIGFkZWJ1KGYsenopOwkJCS8qIFdyaXRlIGF0dHJpYnV0ZXMgdG8gZGVi dWcgbG9nICovCi0KLSAgICBmZmMgPSAoQ0tfT0ZGX1QpMDsJCQkvKiBJbml0IGZpbGUtY2hhcmFj dGVyIGNvdW50ZXIgKi8KLQotI2lmZGVmIFBJUEVTRU5ECi0gICAgaWYgKHBpcGVzZW5kKQkJCS8q IFJlY2VpdmluZyB0byBhIHBpcGUgLSBlYXN5LiAqLwotICAgICAgcmV0dXJuKG9wZW5vKGYsenos JmZjYikpOwkJLyogSnVzdCBvcGVuIHRoZSBwaXBlLiAqLwotI2VuZGlmIC8qIFBJUEVTRU5EICov Ci0KLSAgICAvKiBSZWNlaXZpbmcgdG8gYSBmaWxlIC0gc2V0IHVwIGZpbGUgY29udHJvbCBzdHJ1 Y3R1cmUgKi8KLQotICAgIGZjYi5icyA9IGZibGtzaXo7CQkJLyogQmxvY2tzaXplICovCi0jaWZu ZGVmIE5PQ1NFVFMKLSAgICBmY2IuY3MgPSBmY2hhcnNldDsJCQkvKiBDaGFyYWN0ZXIgc2V0ICov Ci0jZWxzZQotICAgIGZjYi5jcyA9IDA7CQkJCS8qIENoYXJhY3RlciBzZXQgKi8KLSNlbmRpZiAv KiBOT0NTRVRTICovCi0gICAgZmNiLnJsID0gZnJlY2w7CQkJLyogUmVjb3JkIExlbmd0aCAqLwot ICAgIGZjYi5mbXQgPSBmcmVjZm07CQkJLyogUmVjb3JkIEZvcm1hdCAqLwotICAgIGZjYi5vcmcg PSBmb3JnOwkJCS8qIE9yZ2FuaXphdGlvbiAqLwotICAgIGZjYi5jYyA9IGZjY3RybDsJCQkvKiBD YXJyaWFnZSBjb250cm9sICovCi0gICAgZmNiLnR5cCA9IGJpbmFyeTsJCQkvKiBUeXBlICovCi0g ICAgZGVidWcoRjEwMSwib3BlbmEgeGZsZyIsIiIseGZsZyk7Ci0gICAgZGVidWcoRjEwMSwib3Bl bmEgcmVtZmlsZSIsIiIscmVtZmlsZSk7Ci0gICAgZGVidWcoRjEwMSwib3BlbmEgcmVtYXBwZCIs IiIscmVtYXBwZCk7Ci0gICAgaWYgKHhmbGcgJiYgcmVtZmlsZSAmJiByZW1hcHBkKQkvKiBSRU1P VEUgb3V0cHV0IHJlZGlyZWN0ZWQgd2l0aCA+PiAqLwotICAgICAgZmNiLmRzcCA9IFhZRlpfQTsK LSAgICBlbHNlCi0gICAgICBmY2IuZHNwID0gKGZuY2FjdCA9PSBYWUZYX0EpID8gWFlGWl9BIDog WFlGWl9OOyAvKiBEaXNwb3NpdGlvbiAqLwotICAgIGRlYnVnKEYxMDEsIm9wZW5hIGRpc3AiLCIi LGZjYi5kc3ApOwotICAgIGZjYi5vc19zcGVjaWZpYyA9ICIiOwkJLyogT1Mtc3BlY2lmaWMgaW5m byAqLwotI2lmZGVmIENLX0xBQkVMRUQKLSAgICBmY2IubGJsb3B0cyA9IGxmX29wdHM7CQkvKiBM YWJlbGVkIGZpbGUgb3B0aW9ucyAqLwotI2Vsc2UKLSAgICBmY2IubGJsb3B0cyA9IDA7Ci0jZW5k aWYgLyogQ0tfTEFCRUxFRCAqLwotCi0gICAgaWYgKHp6LT5kaXNwLmxlbiA+IDApIHsJCS8qIElu Y29taW5nIGZpbGUgaGFzIGEgZGlzcG9zaXRpb24/ICovCi0JZGVidWcoRjExMSwib3BlbiBkaXNw b3NpdGlvbiIsenotPmRpc3AudmFsLHp6LT5kaXNwLmxlbik7Ci0JZGlzcG9zID0gKGludCkgKCoo enotPmRpc3AudmFsKSk7Ci0gICAgfQotICAgIGlmICghZGlzcG9zICYmIHhmbGcgJiYgcmVtZmls ZSAmJiByZW1hcHBkKSAvKiBSRU1PVEUgcmVkaXJlY3QgYXBwZW5kID8gKi8KLSAgICAgIGRpc3Bv cyA9IGZjYi5kc3A7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJvcGVuYSBkaXNwb3MiLCIiLGRpc3Bvcyk7 Ci0KLSAgICBpZiAoIWRpc3BvcykgewkJCSAgICAgICAgIC8qIE5vIHNwZWNpYWwgZGlzcG9zaXRp b24/ICovCi0JaWYgKGZuY2FjdCA9PSBYWUZYX0IgJiYgb2ZuMXggJiYgb2ZuMikgeyAvKiBGaWxl IGNvbGxpc2lvbiA9IEJBQ0tVUD8gKi8KLQkgICAgaWYgKHpyZW5hbWUob2ZuMSxvZm4yKSA8IDAp IHsgICAgICAgIC8qIFJlbmFtZSBleGlzdGluZyBmaWxlLiAqLwotCQlkZWJ1ZyhGMTEwLCJvcGVu YSByZW5hbWUgZmFpbHMiLG9mbjEsMCk7Ci0JCXJmX2VyciA9ICJDYW4ndCBjcmVhdGUgYmFja3Vw IGZpbGUiOwotCQlyZXR1cm4oMCk7Ci0JICAgIH0gZWxzZSBkZWJ1ZyhGMTEwLCJvcGVuYSByZW5h bWUgb2siLG9mbjIsMCk7Ci0JfQotICAgIH0gZWxzZSBpZiAoZGlzcG9zID09ICdSJykgewkJLyog UmVjZWl2aW5nIGEgUkVTRU5EICovCi0JZGVidWcoRjEwMSwib3BlbmEgcmVtb3RlIGxlbiIsIiIs enotPmxlbmd0aCk7Ci0JZGVidWcoRjEwMSwib3BlbmEgbG9jYWwgbGVuIiwiIixyc19sZW4pOwot I2lmZGVmIENPTU1FTlQKLSAgICAgICAgaWYgKGZuY2FjdCA9PSBYWUZYX1IpCQkvKiBhbmQgZmls ZSBjb2xsaXNpb24gPSBSRU5BTUUgKi8KLQkgIGlmIChvZm4xeCkKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0JaWYgKG9mbjFbMF0pCi0JICBmID0gb2ZuMTsJCQkvKiB1c2Ugb3JpZ2luYWwgbmFtZS4g Ki8KLSAgICAgICAgaWYgKGZuY2FjdCA9PSBYWUZYX1IpCQkvKiBpZiBmaWxlIGNvbGxpc2lvbiBp cyBSRU5BTUUgKi8KLSAgICAgICAgICBja3N0cm5jcHkoZmlsbmFtLG9mbjEsQ0tNQVhQQVRIKzEp OyAvKiByZXN0b3JlIHRoZSByZWFsIG5hbWUgKi8KLSAgICAgICAgeHhzY3JlZW4oU0NSX0FOLDAs MEwsZik7CS8qIHVwZGF0ZSBuYW1lIG9uIHNjcmVlbiAqLwotCWlmICh6ei0+bGVuZ3RoID09IHJz X2xlbikJLyogTG9jYWwgYW5kIHJlbW90ZSBsZW5ndGhzIGVxdWFsPyAqLwotCSAgcmV0dXJuKC0x Nyk7CQkJLyogU2VjcmV0IGNvZGUgKi8KLSAgICB9Ci0gICAgZGVidWcoRjExMSwib3BlbmEgW2Zp bGVdPW1vZGU6ICIsZixmY2IuZHNwKTsKLSAgICBpZiAoeCA9IG9wZW5vKGYsenosJmZjYikpIHsJ CS8qIFRyeSB0byBvcGVuIHRoZSBmaWxlLiAqLwotI2lmZGVmIHBkcDExCi0JdGxvZyhGMTEwLCIg bG9jYWwgbmFtZToiLGYsMEwpOwkvKiBPSywgb3BlbiwgcmVjb3JkIGxvY2FsIG5hbWUuICovCi0J bWFrZXN0cigmcHJmc3BlYyxmKTsJCS8qIE5ldyBwcmVsaW1pbmFyeSBuYW1lICovCi0jZWxzZQot I2lmbmRlZiBaRk5RRlAKLQl0bG9nKEYxMTAsIiBsb2NhbCBuYW1lOiIsZiwwTCk7Ci0JbWFrZXN0 cigmcHJmc3BlYyxmKTsKLSNlbHNlCi0JewkJCQkvKiBMb2cgZnVsbCBsb2NhbCBwYXRobmFtZSAq LwotCSAgICBjaGFyICpwID0gTlVMTCwgKnEgPSBmOwotCSAgICBpZiAoKHAgPSBtYWxsb2MoQ0tN QVhQQVRIKzEpKSkKLQkgICAgICBpZiAoemZucWZwKGZpbG5hbSwgQ0tNQVhQQVRILCBwKSkKLQkJ cSA9IHA7Ci0JICAgIHRsb2coRjExMCwiIGxvY2FsIG5hbWU6IixxLDBMKTsKLQkgICAgbWFrZXN0 cigmcHJmc3BlYyxxKTsKLQkgICAgaWYgKHApIGZyZWUocCk7Ci0JfQotI2VuZGlmIC8qIFpGTlFG UCAqLwotI2VuZGlmIC8qIHBkcDExICovCi0KLQlpZiAoYmluYXJ5KSB7CQkJLyogTG9nIGZpbGUg bW9kZSBpbiB0cmFuc2FjdGlvbiBsb2cgKi8KLQkgICAgdGxvZyhGMTAxLCIgbW9kZTogYmluYXJ5 IiwiIiwobG9uZykgYmluYXJ5KTsKLQl9IGVsc2UgewkJCS8qIElmIHRleHQgbW9kZSwgY2hlY2sg Y2hhcmFjdGVyIHNldCAqLwotCSAgICB0bG9nKEYxMDAsIiBtb2RlOiB0ZXh0IiwiIiwwTCk7Ci0j aWZuZGVmIE5PQ1NFVFMKLQkgICAgaWYgKHhmcnhsYSkgewotCQlpZiAoZmNoYXJzZXQgPiAtMSAm JiBmY2hhcnNldCA8PSBNQVhGQ1NFVFMpCi0JCSAgdGxvZyhGMTEwLCIgZmlsZSBjaGFyYWN0ZXIt c2V0OiIsZmNzaW5mb1tmY2hhcnNldF0ubmFtZSwwTCk7Ci0JCWlmICh0Y2hhcnNldCA+IC0xICYm IHRjaGFyc2V0IDw9IE1BWFRDU0VUUykKLQkJICB0bG9nKEYxMTAsIiB4ZmVyIGNoYXJhY3Rlci1z ZXQ6Iix0Y3NpbmZvW3RjaGFyc2V0XS5uYW1lLDBMKTsKLQkgICAgfSBlbHNlIHsKLQkJICB0bG9n KEYxMTAsIiBjaGFyYWN0ZXItc2V0OiIsInRyYW5zcGFyZW50IiwwTCk7Ci0JICAgIH0KLSNlbmRp ZiAvKiBOT0NTRVRTICovCi0JICAgIGRlYnVnKEYxMTEsIm9wZW5hIGNoYXJzZXQiLHp6LT5lbmNv ZGluZy52YWwsenotPmVuY29kaW5nLmxlbik7Ci0JfQotCWRlYnVnKEYxMDEsIm9wZW5hIGJpbmFy eSIsIiIsYmluYXJ5KTsKLQotI2lmZGVmIENPTU1FTlQKLQlpZiAoZnNpemUgPj0gMCkKLSNlbmRp ZiAvKiBDT01NRU5UICovCi0JICB4eHNjcmVlbihTQ1JfRlMsMCxmc2l6ZSwiIik7Ci0KLSNpZmRl ZiBkYXRhZ2VuZXJhbAotLyoKLSAgTmVlZCB0byB0dXJuIG9uIG11bHRpLXRhc2tpbmcgY29uc29s ZSBpbnRlcnJ1cHQgdGFzayBoZXJlLCBzaW5jZSBtdWx0aXBsZQotICBmaWxlcyBtYXkgYmUgcmVj ZWl2ZWQgKGh1aD8pIC4uLgotKi8KLSAgICAgICAgaWYgKChsb2NhbCkgJiYgKCFxdWlldCkpICAg ICAgICAvKiBPbmx5IGRvIHRoaXMgaWYgbG9jYWwgJiBub3QgcXVpZXQgKi8KLQkgIGNvbnN0YV9t dCgpOwkJCS8qIFN0YXJ0IHRoZSBhc3luYyByZWFkIHRhc2sgKi8KLSNlbmRpZiAvKiBkYXRhZ2Vu ZXJhbCAqLwotCi0gICAgfSBlbHNlIHsJCQkJLyogRGlkIG5vdCBvcGVuIGZpbGUgT0suICovCi0K LQlyZl9lcnIgPSBja19lcnJzdHIoKTsJCS8qIEdldCBzeXN0ZW0gZXJyb3IgbWVzc2FnZSAqLwot CWlmICgqcmZfZXJyKQotCSAgeHhzY3JlZW4oU0NSX0VNLDAsMGwscmZfZXJyKTsKLQllbHNlCi0J ICB4eHNjcmVlbihTQ1JfRU0sMCwwbCwiQ2FuJ3Qgb3BlbiBvdXRwdXQgZmlsZSIpOwotICAgICAg ICB0bG9nKEYxMTAsIkZhaWx1cmUgdG8gb3BlbiIsZiwwTCk7Ci0gICAgICAgIHRsb2coRjExMCwi RXJyb3I6IixyZl9lcnIsMEwpOwotCWRlYnVnKEYxMTAsIm9wZW5hIGVycm9yIixyZl9lcnIsMCk7 Ci0gICAgfQotICAgIHJldHVybih4KTsJCQkJLyogUGFzcyBvbiByZXR1cm4gY29kZSBmcm9tIG9w ZW5vICovCi19Ci0KLS8qICBPIFAgRSBOIEMgIC0tICBPcGVuIGEgY29tbWFuZCAoaW4gcGxhY2Ug b2YgYSBmaWxlKSBmb3Igb3V0cHV0ICovCi0KLWludAotb3BlbmMobixzKSBpbnQgbjsgY2hhciAq IHM7IHsKLSAgICBpbnQgeDsKLSNpZm5kZWYgTk9QVVNICi0gICAgeCA9IHp4Y21kKG4scyk7Ci0j ZWxzZQotICAgIHggPSAwOwotI2VuZGlmIC8qIE5PUFVTSCAqLwotICAgIGRlYnVnKEYxMTEsIm9w ZW5jIHp4Y21kIixzLHgpOwotICAgIG9faXNvcGVuID0gKHggPiAwKSA/IDEgOiAwOwotICAgIHJl dHVybih4KTsKLX0KLQotLyogIEMgQSBOIE4gRSBEICAtLSAgQ2hlY2sgaWYgY3VycmVudCBmaWxl IHRyYW5zZmVyIGNhbmNlbGxlZCAqLwotCi1pbnQKLWNhbm5lZChidWYpIENIQVIgKmJ1Zjsgewot ICAgIGV4dGVybiBpbnQgaW50ZXJydXB0ZWQ7Ci0gICAgaWYgKCpidWYgPT0gJ1gnKSBjeHNlZW4g PSAxOwotICAgIGlmICgqYnVmID09ICdaJykgY3pzZWVuID0gMTsKLSAgICBpZiAoY3pzZWVuIHx8 IGN4c2VlbikKLSAgICAgIGludGVycnVwdGVkID0gMTsKLSAgICBkZWJ1ZyhGMTAxLCJjYW5uZWQ6 IGN4c2VlbiIsIiIsY3hzZWVuKTsKLSAgICBkZWJ1ZyhGMTAxLCIgY3pzZWVuIiwiIixjenNlZW4p OwotICAgIHJldHVybigoY3pzZWVuIHx8IGN4c2VlbikgPyAxIDogMCk7Ci19Ci0KLQotLyogIE8g UCBFIE4gSSAgLS0gIE9wZW4gYW4gZXhpc3RpbmcgZmlsZSBmb3IgaW5wdXQgICovCi0KLWludAot b3BlbmkobmFtZSkgY2hhciAqbmFtZTsgewotI2lmbmRlZiBOT1NFUlZFUgotICAgIGV4dGVybiBp bnQgZnJvbWdldHBhdGg7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSAgICBpbnQgeCwgZmlsbm87 Ci0gICAgY2hhciAqbmFtZTI7Ci0gICAgZXh0ZXJuIENIQVIgKmVwa3Rtc2c7Ci0KLSAgICBlcGt0 bXNnWzBdID0gTlVMOwkJCS8qIEluaXRpYWxpemUgZXJyb3IgbWVzc2FnZSAqLwotICAgIGlmICht ZW1zdHIgfHwgc25kYXJyYXkpIHsJCS8qIEp1c3QgcmV0dXJuIGlmICJmaWxlIiBpcyBtZW1vcnku ICovCi0JaV9pc29wZW4gPSAxOwotCXJldHVybigxKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwi b3BlbmkgbmFtZSIsbmFtZSwwKTsKLSAgICBkZWJ1ZyhGMTAxLCJvcGVuaSBzbmRzcmMiLCIiLHNu ZHNyYyk7Ci0KLSAgICBmaWxubyA9IChzbmRzcmMgPT0gMCkgPyBaU1RESU8gOiBaSUZJTEU7ICAg IC8qIC4uLiAqLwotICAgIGRlYnVnKEYxMDEsIm9wZW5pIGZpbGUgbnVtYmVyIiwiIixmaWxubyk7 Ci0KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICAvKiBJZiBJJ20gYSBzZXJ2ZXIgYW5kIENXRCBpcyBk aXNhYmxlZCBhbmQgbmFtZSBpcyBub3QgZnJvbSBHRVQtUEFUSC4uLiAqLwotCi0gICAgaWYgKHNl cnZlciAmJiAhZW5fY3dkICYmICFmcm9tZ2V0cGF0aCkgewotCXpzdHJpcChuYW1lLCZuYW1lMik7 Ci0JaWYgKAkJCQkvKiAuLi4gY2hlY2sgaWYgcGF0aG5hbWUgaW5jbHVkZWQuICovCi0jaWZkZWYg Vk1TCi0JICAgIHpjaGtwYXRoKG5hbWUpCi0jZWxzZQotCSAgICBzdHJjbXAobmFtZSxuYW1lMikK LSNlbmRpZiAvKiBWTVMgKi8KLQkgICAgKSB7Ci0JICAgIHRsb2coRjExMCxuYW1lLCJhY2Nlc3Mg ZGVuaWVkIiwwTCk7Ci0JICAgIGRlYnVnKEYxMTAsIm9wZW5pIENEIGRpc2FibGVkIixuYW1lLDAp OwotCSAgICBja3N0cm5jcHkoKGNoYXIgKillcGt0bXNnLCJBY2Nlc3MgZGVuaWVkIixQS1RNU0dM RU4pOwotCSAgICByZXR1cm4oMCk7Ci0JfSBlbHNlIG5hbWUgPSBuYW1lMjsKLSAgICB9Ci0jZW5k aWYgLyogTk9TRVJWRVIgKi8KLQotI2lmZGVmIFBJUEVTRU5ECi0gICAgZGVidWcoRjEwMSwib3Bl bmkgcGlwZXNlbmQiLCIiLHBpcGVzZW5kKTsKLSAgICBpZiAocGlwZXNlbmQpIHsKLQlpbnQgeDsK LSNpZm5kZWYgTk9QVVNICi0JeCA9IHp4Y21kKFpJRklMRSxuYW1lKTsKLSNlbHNlCi0JeCA9IDA7 Ci0jZW5kaWYgLyogTk9QVVNIICovCi0JaV9pc29wZW4gPSAoeCA+IDApID8gMSA6IDA7Ci0JaWYg KCFpX2lzb3BlbikKLQkgIGNrc3RybmNweSgoY2hhciAqKWVwa3Rtc2csIkNvbW1hbmQgb3IgcGlw ZSBmYWlsdXJlIixQS1RNU0dMRU4pOwotCWRlYnVnKEYxMTEsIm9wZW5pIHBpcGVzZW5kIHp4Y21k IixuYW1lLHgpOwotCXJldHVybihpX2lzb3Blbik7Ci0gICAgfQotI2VuZGlmIC8qIFBJUEVTRU5E ICovCi0KLSNpZmRlZiBDQUxJQlJBVEUKLSAgICBpZiAoY2FsaWJyYXRlKSB7Ci0JaV9pc29wZW4g PSAxOwotICAgIAlyZXR1cm4oMSk7Ci0gICAgfQotI2VuZGlmIC8qIENBTElCUkFURSAqLwotCi0g ICAgeCA9IHpvcGVuaShmaWxubyxuYW1lKTsJCS8qIE90aGVyd2lzZSwgdHJ5IHRvIG9wZW4gaXQu ICovCi0gICAgZGVidWcoRjExMSwib3Blbmkgem9wZW5pIDEiLG5hbWUseCk7Ci0gICAgaWYgKHgp IHsKLQlpX2lzb3BlbiA9IDE7Ci0gICAgCXJldHVybigxKTsKLSAgICB9IGVsc2UgewkJCQkvKiBJ ZiBub3QgZm91bmQsICovCi0JY2hhciB4bmFtZVtDS01BWFBBVEhdOwkJLyogY29udmVydCB0aGUg bmFtZSAqLwotI2lmZGVmIE5aTFRPUgotCW56cnRvbChuYW1lLHhuYW1lLGZuY252LGZucnBhdGgs Q0tNQVhQQVRIKTsKLSNlbHNlCi0JenJ0b2wobmFtZSx4bmFtZSk7CQkvKiB0byBsb2NhbCBmb3Jt IGFuZCB0aGVuICovCi0jZW5kaWYgLyogIE5aTFRPUiAqLwotCXggPSB6b3BlbmkoZmlsbm8seG5h bWUpOwkvKiB0cnkgb3BlbmluZyBpdCBhZ2Fpbi4gKi8KLQlkZWJ1ZyhGMTExLCJvcGVuaSB6b3Bl bmkgMiIseG5hbWUseCk7Ci0JaWYgKHgpIHsKLQkgICAgaV9pc29wZW4gPSAxOwotCSAgICByZXR1 cm4oMSk7CQkJLyogSXQgd29ya2VkLiAqLwotICAgICAgICB9IGVsc2UgewotCSAgICBjaGFyICog czsKLQkgICAgcyA9IGNrX2VycnN0cigpOwotCSAgICBpZiAocykgaWYgKCFzKSBzID0gTlVMTDsK LQkgICAgaWYgKCFzKSBzID0gIkNhbid0IG9wZW4gZmlsZSI7Ci0JICAgIGNrc3RybmNweSgoY2hh ciAqKWVwa3Rtc2cscyxQS1RNU0dMRU4pOwotCSAgICB0bG9nKEYxMTAseG5hbWUscywwTCk7Ci0J ICAgIGRlYnVnKEYxMTAsIm9wZW5pIGZhaWxlZCIseG5hbWUsMCk7Ci0JICAgIGRlYnVnKEYxMTAs Im9wZW5pIG1lc3NhZ2UiLHMsMCk7Ci0JICAgIGlfaXNvcGVuID0gMDsKLQkgICAgcmV0dXJuKDAp OwotICAgICAgICB9Ci0gICAgfQotfQotCi0vKiAgTyBQIEUgTiBPICAtLSAgT3BlbiBhIG5ldyBm aWxlIGZvciBvdXRwdXQuICAqLwotCi1pbnQKLW9wZW5vKG5hbWUsenosZmNiKSBjaGFyICpuYW1l OyBzdHJ1Y3QgemF0dHIgKnp6OyBzdHJ1Y3QgZmlsaW5mbyAqZmNiOyB7Ci0gICAgY2hhciAqbmFt ZTI7Ci0jaWZkZWYgRFRJTERFCi0gICAgY2hhciAqZGlycDsKLSNlbmRpZiAvKiBEVElMREUgKi8K LQotICAgIGludCBjaGFubmVsLCB4OwotCi0gICAgaWYgKHN0ZG91ZikgewkJCQkvKiBSZWNlaXZp bmcgdG8gc3Rkb3V0PyAqLwotCXggPSB6b3Blbm8oWlNURElPLCIiLHp6LE5VTEwpOwotCW9faXNv cGVuID0gKHggPiAwKTsKLQlkZWJ1ZyhGMTAxLCJvcGVubyBzdGRvdWYgem9wZW5vIiwiIix4KTsK LQlyZXR1cm4oeCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsIm9wZW5vOiBuYW1lIixuYW1lLDAp OwotCi0gICAgaWYgKGN4c2VlbiB8fCBjenNlZW4gfHwgZGlzY2FyZCkgewkvKiBJZiBpbnRlcnJ1 cHRlZCwgZ2V0IG91dCBiZWZvcmUgKi8KLQlkZWJ1ZyhGMTAwLCIgb3BlbiBjYW5jZWxsZWQiLCIi LDApOyAvKiBkZXN0cm95aW5nIGV4aXN0aW5nIGZpbGUuICovCi0JcmV0dXJuKDEpOwkJCS8qIFBy ZXRlbmQgdG8gc3VjY2VlZC4gKi8KLSAgICB9Ci0gICAgY2hhbm5lbCA9IFpPRklMRTsJCQkvKiBT RVQgREVTVElOQVRJT04gRElTSyBvciBQUklOVEVSICovCi0KLSNpZmRlZiBQSVBFU0VORAotICAg IGRlYnVnKEYxMDEsIm9wZW5vIHBpcGVzZW5kIiwiIixwaXBlc2VuZCk7Ci0gICAgaWYgKHBpcGVz ZW5kKSB7Ci0JaW50IHg7Ci0jaWZuZGVmIE5PUFVTSAotCXggPSB6eGNtZChaT0ZJTEUsKGNoYXIg KilzcnZjbWQpOwotI2Vsc2UKLQl4ID0gMDsKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQlvX2lzb3Bl biA9IHggPiAwOwotCWRlYnVnKEYxMDEsIm9wZW5vIHp4Y21kIiwiIix4KTsKLQlyZXR1cm4oeCk7 Ci0gICAgfQotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLSAgICBpZiAoZGVzdCA9PSBERVNUX1Mp IHsJCS8qIFNFVCBERVNUIFNDUkVFTi4uLiAqLwotCWNoYW5uZWwgPSBaQ1RFUk07Ci0JZmNiID0g TlVMTDsKLSAgICB9Ci0jaWZkZWYgRFRJTERFCi0gICAgaWYgKCpuYW1lID09ICd+JykgewotCWRp cnAgPSB0aWxkZV9leHBhbmQobmFtZSk7Ci0JaWYgKCpkaXJwKSBja3N0cm5jcHkobmFtZSxkaXJw LENLTUFYUEFUSCsxKTsKLSAgICB9Ci0jZW5kaWYgLyogRFRJTERFICovCi0gICAgaWYgKHNlcnZl ciAmJiAhZW5fY3dkKSB7CQkvKiBJZiBydW5uaW5nIGFzIHNlcnZlciAqLwotCXpzdHJpcChuYW1l LCZuYW1lMik7CQkvKiBhbmQgQ1dEIGlzIGRpc2FibGVkLCAqLwotCWlmIChzdHJjbXAobmFtZSxu YW1lMikpIHsJLyogY2hlY2sgaWYgcGF0aG5hbWUgd2FzIGluY2x1ZGVkLiAqLwotCSAgICB0bG9n KEYxMTAsbmFtZSwiYXV0aG9yaXphdGlvbiBmYWlsdXJlIiwwTCk7Ci0JICAgIGRlYnVnKEYxMTAs Im9wZW5vIENEIGRpc2FibGVkIixuYW1lLDApOwotCSAgICByZXR1cm4oMCk7Ci0JfSBlbHNlIG5h bWUgPSBuYW1lMjsKLSAgICB9Ci0gICAgaWYgKHpvcGVubyhjaGFubmVsLG5hbWUsenosZmNiKSA8 PSAwKSB7IC8qIFRyeSB0byBvcGVuIHRoZSBmaWxlICovCi0Jb19pc29wZW4gPSAwOwotCWRlYnVn KEYxMTAsIm9wZW5vIGZhaWxlZCIsbmFtZSwwKTsKLQkvKiB0bG9nKEYxMTAsIkZhaWx1cmUgdG8g b3BlbiIsbmFtZSwwTCk7ICovCi0JcmV0dXJuKDApOwotICAgIH0gZWxzZSB7Ci0Jb19pc29wZW4g PSAxOwotCWRlYnVnKEYxMTAsIm9wZW5vIG9rLCBuYW1lIixuYW1lLDApOwotCXJldHVybigxKTsK LSAgICB9Ci19Ci0KLS8qICBPIFAgRSBOIFQgIC0tICBPcGVuIHRoZSB0ZXJtaW5hbCBmb3Igb3V0 cHV0LCBpbiBwbGFjZSBvZiBhIGZpbGUgICovCi0KLWludAotb3BlbnQoenopIHN0cnVjdCB6YXR0 ciAqeno7IHsKLSAgICBpbnQgeDsKLSAgICBmZmMgPSB0ZmMgPSAoQ0tfT0ZGX1QpMDsKLSAgICB4 ID0gem9wZW5vKFpDVEVSTSwiIix6eixOVUxMKTsKLSAgICBkZWJ1ZyhGMTAxLCJvcGVudCB6b3Bl bm8iLCIiLHgpOwotICAgIGlmICh4ID49IDApIHsKLQlvX2lzb3BlbiA9IDE7Ci0JYmluYXJ5ID0g WFlGVF9UOwotICAgIH0gZWxzZQotICAgICAgcmV0dXJuKDApOwotICAgIHJldHVybih4KTsKLX0K LQotLyogIE8gUCBFIE4gWCAgLS0gIE9wZW4gbm90aGluZyAoaW5jb21pbmcgZmlsZSB0byBiZSBh Y2NlcHRlZCBidXQgaWdub3JlZCkgICovCi0KLWludAotY2tvcGVueCh6eikgc3RydWN0IHphdHRy ICp6ejsgewotICAgIGZmYyA9IHRmYyA9IChDS19PRkZfVCkwOwkJLyogUmVzZXQgY291bnRlcnMg Ki8KLSAgICBvX2lzb3BlbiA9IDE7Ci0gICAgZGVidWcoRjEwMSwiY2tvcGVueCBmc2l6ZSIsIiIs ZnNpemUpOwotICAgIHh4c2NyZWVuKFNDUl9GUywwLGZzaXplLCIiKTsJLyogTGV0IHNjcmVlbiBk aXNwbGF5IGtub3cgdGhlIHNpemUgKi8KLSAgICByZXR1cm4oMSk7Ci19Ci0KLS8qICBDIEwgUyBJ IEYgIC0tICBDbG9zZSB0aGUgY3VycmVudCBpbnB1dCBmaWxlLiAqLwotCi1pbnQKLWNsc2lmKCkg ewotICAgIGV4dGVybiBpbnQgeGZlcnN0YXQsIHN1Y2Nlc3M7Ci0gICAgaW50IHggPSAwOwotCi0g ICAgZmNwcygpOwkJCS8qIENhbGN1bGF0ZSBDUFMgcXVpY2tseSAqLwotCi0jaWZkZWYgZGF0YWdl bmVyYWwKLSAgICBpZiAoKGxvY2FsKSAmJiAoIXF1aWV0KSkgICAgLyogT25seSBkbyB0aGlzIGlm IGxvY2FsICYgbm90IHF1aWV0ICovCi0gICAgICBpZiAobmZpbHMgPCAxKQkJLyogTW9yZSBmaWxl cyB0byBzZW5kIC4uLiBsZWF2ZSBpdCBvbiEgKi8KLQljb25ub2lfbXQoKTsKLSNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLwotCi0gICAgZGVidWcoRjEwMSwiY2xzaWYgaV9pc29wZW4iLCIiLGlfaXNv cGVuKTsKLSAgICBpZiAoaV9pc29wZW4pIHsJCQkvKiBJZiBpbnB1dCBmaWxlIGlzIG9wZW4uLi4g Ki8KLQlpZiAobWVtc3RyKSB7CQkJLyogSWYgaW5wdXQgd2FzIG1lbW9yeSBzdHJpbmcsICovCi0J ICAgIG1lbXN0ciA9IDA7CQkJLyogaW5kaWNhdGUgbm8gbW9yZS4gKi8KLQl9IGVsc2UgewotCSAg ICB4ID0gemNsb3NlKFpJRklMRSk7CQkvKiBlbHNlIGNsb3NlIGlucHV0IGZpbGUuICovCi0JfQot I2lmZGVmIERFQlVHCi0JaWYgKGRlYmxvZykgewotCSAgICBkZWJ1ZyhGMTAxLCJjbHNpZiB6Y2xv c2UiLCIiLHgpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbHNpZiBzdWNjZXNzIiwiIixzdWNjZXNzKTsK LQkgICAgZGVidWcoRjEwMSwiY2xzaWYgeGZlcnN0YXQiLCIiLHhmZXJzdGF0KTsKLQkgICAgZGVi dWcoRjEwMSwiY2xzaWYgZnNpemUiLCIiLGZzaXplKTsKLQkgICAgZGVidWcoRjEwMSwiY2xzaWYg ZmZjIiwiIixmZmMpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbHNpZiBjeHNlZW4iLCIiLGN4c2Vlbik7 Ci0JICAgIGRlYnVnKEYxMDEsImNsc2lmIGN6c2VlbiIsIiIsY3pzZWVuKTsKLQkgICAgZGVidWco RjEwMSwiY2xzaWYgZGlzY2FyZCIsIiIsY3pzZWVuKTsKLQl9Ci0jZW5kaWYgLyogREVCVUcgKi8K LQlpZiAoKGN4c2VlbiB8fCBjenNlZW4pICYmICFlcGt0c2VudCkgeyAvKiBJZiBpbnRlcnJ1cHRl ZCAqLwotCSAgICB4eHNjcmVlbihTQ1JfU1QsU1RfSU5ULDBsLCIiKTsgLyogc2F5IHNvICovCi0j aWZkZWYgVExPRwotCSAgICBpZiAodHJhbG9nICYmICF0bG9nZm10KQotCSAgICAgIGRveGxvZyh3 aGF0LHBzZnNwZWMsZnNpemUsYmluYXJ5LDEsIkludGVycnVwdGVkIik7Ci0jZW5kaWYgLyogVExP RyAqLwotCX0gZWxzZSBpZiAoZGlzY2FyZCAmJiAhZXBrdHNlbnQpIHsgLyogSWYgSSdtIHJlZnVz aW5nICovCi0JICAgIHh4c2NyZWVuKFNDUl9TVCxTVF9SRUZVLDBsLHJlZnVzZWQpOyAvKiBzYXkg d2h5ICovCi0jaWZkZWYgVExPRwotCSAgICBpZiAodHJhbG9nICYmICF0bG9nZm10KSB7Ci0JCWNo YXIgYnVmWzEyOF07Ci0JCWNrbWFrbXNnKGJ1ZiwxMjgsIlJlZnVzZWQ6ICIscmVmdXNlZCxOVUxM LE5VTEwpOwotCQlkb3hsb2cod2hhdCxwc2ZzcGVjLGZzaXplLGJpbmFyeSwxLGJ1Zik7Ci0JICAg IH0KLSNlbmRpZiAvKiBUTE9HICovCi0JfSBlbHNlIGlmICghZXBrdHJjdmQgJiYgIWVwa3RzZW50 ICYmICFjeHNlZW4gJiYgIWN6c2VlbikgewotCSAgICBDS19PRkZfVCB6ejsKLQkgICAgenogPSBm ZmM7Ci0jaWZkZWYgQ0tfUkVTRU5ECi0JICAgIGlmIChzZW5kbW9kZSA9PSBTTV9SRVNFTkQgfHwg c2VuZG1vZGUgPT0gU01fUFNFTkQpCi0JICAgICAgenogKz0gc2VuZHN0YXJ0OwotI2VuZGlmIC8q IENLX1JFU0VORCAqLwotCSAgICBkZWJ1ZyhGMTAxLCJjbHNpZiBmc3RhdHMiLCIiLHp6KTsKLQkg ICAgZnN0YXRzKCk7CQkJLyogVXBkYXRlIHN0YXRpc3RpY3MgKi8KLQkgICAgaWYgKAkJCS8qIFdh cyB0aGUgd2hvbGUgZmlsZSBzZW50PyAqLwotI2lmZGVmIFZNUwotCQkwCQkJLyogTm90IGEgcmVs aWFibGUgY2hlY2sgaW4gVk1TICovCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLQkJMAkJCS8qIFBy b2JhYmx5IG5vdCBmb3IgVk9TIGVpdGhlciAqLwotI2Vsc2UKLQkJenogPCBmc2l6ZQotI2lmZGVm IENLX0NUUkxaCi0JCSYmICgoZW9mbWV0aG9kICE9IFhZRU9GX1ogJiYgIWJpbmFyeSkgfHwgYmlu YXJ5KQotI2VuZGlmIC8qIENLX0NUUkxaICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlm IC8qIFZNUyAqLwotCQkpIHsKLQkJeHhzY3JlZW4oU0NSX1NULFNUX0lOVCwwbCwiIik7Ci0jaWZk ZWYgVExPRwotCQlpZiAodHJhbG9nICYmICF0bG9nZm10KQotCQkgIGRveGxvZyh3aGF0LHBzZnNw ZWMsZnNpemUsYmluYXJ5LDEsIkluY29tcGxldGUiKTsKLSNlbmRpZiAvKiBUTE9HICovCi0JICAg IH0gZWxzZSB7Ci0jaWZkZWYgQ09NTUVOVAotCQkvKiBOb3QgeWV0IC0tIHdlIGRvbid0IGhhdmUg Y29uZmlybWF0aW9uIGZyb20gdGhlIHJlY2VpdmVyICovCi0JCXh4c2NyZWVuKFNDUl9TVCxTVF9P SywwbCwiIik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmZGVmIFRMT0cKLQkJaWYgKHRyYWxv ZyAmJiAhdGxvZ2ZtdCkKLQkJICBkb3hsb2cod2hhdCxwc2ZzcGVjLGZzaXplLGJpbmFyeSwwLCIi KTsKLSNlbmRpZiAvKiBUTE9HICovCi0JICAgIH0KLQl9Ci0gICAgfQotICAgIGlfaXNvcGVuID0g MDsKLSAgICBoY2ZsZyA9IDA7CQkJCS8qIFJlc2V0IGZsYWdzICovCi0gICAgc2VuZHN0YXJ0ID0g KENLX09GRl9UKTA7CQkvKiBEb24ndCBkbyB0aGlzIGFnYWluISAqLwotI2lmZGVmIENPTU1FTlQK LS8qCi0gIFRoaXMgcHJldmVudHMgYSBzdWJzZXF1ZW50IGNhbGwgdG8gY2xzb2YoKSBmcm9tIGRl bGV0aW5nIHRoZSBmaWxlCi0gIHdoZW4gZ2l2ZW4gdGhlIGRpc2NhcmQgZmxhZy4KLSovCi0gICAg KmZpbG5hbSA9ICdcMCc7CQkJLyogYW5kIGN1cnJlbnQgZmlsZSBuYW1lICovCi0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgIHJldHVybih4KTsKLX0KLQotCi0vKiAgQyBMIFMgTyBGICAtLSAgQ2xv c2UgYW4gb3V0cHV0IGZpbGUuICAqLwotCi0vKiAgQ2FsbCB3aXRoIGRpc3AgIT0gMCBpZiBmaWxl IGlzIHRvIGJlIGRpc2NhcmRlZC4gICovCi0vKiAgUmV0dXJucyAtMSB1cG9uIGZhaWx1cmUgdG8g Y2xvc2UsIDAgb3IgZ3JlYXRlciBvbiBzdWNjZXNzLiAqLwotCi1pbnQKLWNsc29mKGRpc3ApIGlu dCBkaXNwOyB7Ci0gICAgaW50IHggPSAwOwotICAgIGV4dGVybiBpbnQgc3VjY2VzczsKLQotICAg IGZjcHMoKTsJCQkJLyogQ2FsY3VsYXRlIENQUyBxdWlja2x5ICovCi0KLSAgICBkZWJ1ZyhGMTAx LCJjbHNvZiBkaXNwIiwiIixkaXNwKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbHNvZiBjeHNlZW4iLCIi LGN4c2Vlbik7Ci0gICAgZGVidWcoRjEwMSwiY2xzb2Ygc3VjY2VzcyIsIiIsc3VjY2Vzcyk7Ci0K LSAgICBkZWJ1ZyhGMTAxLCJjbHNvZiBvX2lzb3BlbiIsIiIsb19pc29wZW4pOwotICAgIGlmIChm bmNzYXYgIT0gLTEpIHsJCQkvKiBTYXZlZCBmaWxlIGNvbGxpc2lvbiBhY3Rpb24uLi4gKi8KLQlm bmNhY3QgPSBmbmNzYXY7CQkvKiBSZXN0b3JlIGl0LiAqLwotCWZuY3NhdiA9IC0xOwkJCS8qIFVu c2F2ZSBpdC4gKi8KLSAgICB9Ci0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICBpZiAoKGxvY2FsKSAm JiAoIXF1aWV0KSkJCS8qIE9ubHkgZG8gdGhpcyBpZiBsb2NhbCAmIG5vdCBxdWlldCAqLwotICAg ICAgY29ubm9pX210KCk7Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSAgICBpZiAob19pc29w ZW4gJiYgIWNhbGlicmF0ZSkgewotCWlmICgoeCA9IHpjbG9zZShaT0ZJTEUpKSA8IDApIHsgLyog VHJ5IHRvIGNsb3NlIHRoZSBmaWxlICovCi0JICAgIHRsb2coRjEwMCwiRmFpbHVyZSB0byBjbG9z ZSIsZmlsbmFtLDBMKTsKLQkgICAgeHhzY3JlZW4oU0NSX1NULFNUX0VSUiwwbCwiQ2FuJ3QgY2xv c2UgZmlsZSIpOwotI2lmZGVmIFRMT0cKLQkgICAgaWYgKHRyYWxvZyAmJiAhdGxvZ2ZtdCkKLQkg ICAgICBkb3hsb2cod2hhdCxwcmZzcGVjLGZzaXplLGJpbmFyeSwxLCJDYW4ndCBjbG9zZSBmaWxl Iik7Ci0jZW5kaWYgLyogVExPRyAqLwotCX0gZWxzZSBpZiAoZGlzcCkgewkJLyogSW50ZXJydXB0 ZWQgb3IgcmVmdXNlZCAqLwotCSAgICBpZiAoa2VlcCA9PSAwIHx8CQkvKiBJZiBub3Qga2VlcGlu ZyBpbmNvbXBsZXRlIGZpbGVzICovCi0JCShrZWVwID09IFNFVF9BVVRPICYmIGJpbmFyeSA9PSBY WUZUX1QpCi0JCSkgewotCQlpZiAoKmZpbG5hbSAmJiAod2hhdCAmIFdfUkVDVikpIC8qIEFORCB3 ZSdyZSByZWNlaXZpbmcgKi8KLQkJICB6ZGVsZXQoZmlsbmFtKTsJLyogT05MWSBUSEVOLCBkZWxl dGUgaXQgKi8KLQkJaWYgKHdoYXQgJiBXX0tFUk1JVCkgewotCQkgICAgZGVidWcoRjEwMCwiY2xz b2YgaW5jb21wbGV0ZSBkaXNjYXJkZWQiLCIiLDApOwotCQkgICAgdGxvZyhGMTAwLCIgaW5jb21w bGV0ZTogZGlzY2FyZGVkIiwiIiwwTCk7Ci0JCSAgICBpZiAoIWVwa3RyY3ZkICYmICFlcGt0c2Vu dCkgewotCQkJeHhzY3JlZW4oU0NSX1NULFNUX0RJU0MsMGwsIiIpOwotI2lmZGVmIFRMT0cKLQkJ CWlmICh0cmFsb2cgJiYgIXRsb2dmbXQpCi0JCQkgIGRveGxvZyh3aGF0LHByZnNwZWMsZnNpemUs YmluYXJ5LDEsIkRpc2NhcmRlZCIpOwotI2VuZGlmIC8qIFRMT0cgKi8KLQkJICAgIH0KLQkJfQot CSAgICB9IGVsc2UgewkJCS8qIEtlZXAgaW5jb21wbGV0ZSBjb3B5ICovCi0JCWRlYnVnKEYxMDAs ImNsc29mIGZzdGF0cyAxIiwiIiwwKTsKLQkJZnN0YXRzKCk7Ci0JCWlmICghZGlzY2FyZCkgewkg LyogVW5sZXNzIGRpc2NhcmRpbmcgZm9yIG90aGVyIHJlYXNvbi4uLiAqLwotCQkgICAgaWYgKHdo YXQgJiBXX0tFUk1JVCkgewotCQkJZGVidWcoRjEwMCwiY2xvc2YgaW5jb21wbGV0ZSBrZXB0Iiwi IiwwKTsKLQkJCXRsb2coRjEwMCwiIGluY29tcGxldGU6IGtlcHQiLCIiLDBMKTsKLQkJICAgIH0K LQkJfQotCQlpZiAod2hhdCAmIFdfS0VSTUlUKSB7Ci0JCSAgICBpZiAoIWVwa3RyY3ZkICYmICFl cGt0c2VudCkgewotCQkJeHhzY3JlZW4oU0NSX1NULFNUX0lOQywwbCwiIik7Ci0jaWZkZWYgVExP RwotCQkJaWYgKHRyYWxvZyAmJiAhdGxvZ2ZtdCkKLQkJCSAgZG94bG9nKHdoYXQscHJmc3BlYyxm c2l6ZSxiaW5hcnksMSwiSW5jb21wbGV0ZSIpOwotI2VuZGlmIC8qIFRMT0cgKi8KLQkJICAgIH0K LQkJfQotCSAgICB9Ci0JfQotICAgIH0KLSAgICBpZiAob19pc29wZW4gJiYgeCA+IC0xICYmICFk aXNwKSB7Ci0JZGVidWcoRjExMCwiY2xzb2YgT0siLHJmc3BlYywwKTsKLQltYWtlc3RyKCZyZnNw ZWMscHJmc3BlYyk7Ci0JbWFrZXN0cigmcnJmc3BlYyxwcnJmc3BlYyk7Ci0JZnN0YXRzKCk7Ci0J aWYgKCFlcGt0cmN2ZCAmJiAhZXBrdHNlbnQgJiYgIWN4c2VlbiAmJiAhY3pzZWVuKSB7Ci0JICAg IHh4c2NyZWVuKFNDUl9TVCxTVF9PSywwTCwiIik7Ci0jaWZkZWYgVExPRwotCSAgICBpZiAodHJh bG9nICYmICF0bG9nZm10KQotCSAgICAgIGRveGxvZyh3aGF0LHJmc3BlYyxmc2l6ZSxiaW5hcnks MCwiIik7Ci0jZW5kaWYgLyogVExPRyAqLwotCX0KLSAgICB9Ci0gICAgcnNfbGVuID0gKENLX09G Rl9UKTA7Ci0gICAgb19pc29wZW4gPSAwOwkJCS8qIFRoZSBmaWxlIGlzIG5vdCBvcGVuIGFueSBt b3JlLiAqLwotICAgIGN4c2VlbiA9IDA7CQkJCS8qIFJlc2V0IHBlci1maWxlIGludGVycnVwdGlv biBmbGFnICovCi0gICAgcmV0dXJuKHgpOwkJCQkvKiBTZW5kIGJhY2sgemNsb3NlKCkgcmV0dXJu IGNvZGUuICovCi19Ci0KLSNpZmRlZiBTVU5PUzRTNQotdG9sb3dlcihjKSBjaGFyIGM7IHsgcmV0 dXJuKChjKS0nQScrJ2EnKTsgfQotdG91cHBlcihjKSBjaGFyIGM7IHsgcmV0dXJuKChjKS0nYScr J0EnKTsgfQotI2VuZGlmIC8qIFNVTk9TNFM1ICovCi0jZW5kaWYgLyogTk9YRkVSICovCgpkaWZm IC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NmbnMuYyBi L2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjZm5zLmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMmJkODYuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NmbnMuYworKysgL2Rldi9udWxsCkBAIC0xLDcx NjUgKzAsMCBAQAotY2hhciAqZm5zdiA9ICJDLUtlcm1pdCBmdW5jdGlvbnMsIDkuMC4yMzMsIDMg SnVuIDIwMTEiOwotCi1jaGFyICpubVtdID0gIHsgIkRpc2FibGVkIiwgIkxvY2FsIG9ubHkiLCAi UmVtb3RlIG9ubHkiLCAiRW5hYmxlZCIgfTsKLQotLyogIEMgSyBDIEYgTiBTICAtLSAgU3lzdGVt LWluZGVwZW5kZW50IEtlcm1pdCBwcm90b2NvbCBzdXBwb3J0IGZ1bmN0aW9ucy4gICovCi0KLS8q ICAuLi5QYXJ0IDEgKG90aGVycyBtb3ZlZCB0byBja2NmbjIsMyB0byBtYWtlIHRoaXMgbW9kdWxl IHNtYWxsZXIpICovCi0KLS8qCi0gIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlh LmVkdT4sCi0gIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVt cywgTmV3IFlvcmsgQ2l0eS4KLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCi0gICAgVHJ1 c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAg ICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxl IG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRp c2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotKi8KLS8qCi0gU3lzdGVtLWRlcGVuZGVudCBwcmlt aXRpdmVzIGRlZmluZWQgaW46Ci0KLSAgIGNrP3Rpby5jIC0tIHRlcm1pbmFsIChjb21tdW5pY2F0 aW9ucykgaS9vCi0gICBjeD9maW8uYyAtLSBmaWxlIGkvbywgZGlyZWN0b3J5IHN0cnVjdHVyZQot Ki8KLSNpbmNsdWRlICJja2NzeW0uaCIJCQkvKiBOZWVkZWQgZm9yIFN0cmF0dXMgVk9TICovCi0j aW5jbHVkZSAiY2tjYXNjLmgiCQkJLyogQVNDSUkgc3ltYm9scyAqLwotI2luY2x1ZGUgImNrY2Rl Yi5oIgkJCS8qIERlYnVnIGZvcm1hdHMsIHR5cGVkZWZzLCBldGMuICovCi0jaW5jbHVkZSAiY2tj a2VyLmgiCQkJLyogU3ltYm9sIGRlZmluaXRpb25zIGZvciBLZXJtaXQgKi8KLSNpbmNsdWRlICJj a2N4bGEuaCIJCQkvKiBDaGFyYWN0ZXIgc2V0IHN5bWJvbHMgKi8KLSNpbmNsdWRlICJja2NuZXQu aCIgICAgICAgICAgICAgICAgICAgICAvKiBWTVMgZGVmaW5pdGlvbiBvZiBUQ1BTT0NLRVQgKi8K LSNpZmRlZiBPUzIKLSNpZmRlZiBPUzJPTkxZCi0jaW5jbHVkZSA8b3MyLmg+Ci0jZW5kaWYgLyog T1MyT05MWSAqLwotI2luY2x1ZGUgImNrb2Nvbi5oIgotI2VuZGlmIC8qIE9TMiAqLwotCi1pbnQg ZG9jcmMgID0gMDsJCQkJLyogQWNjdW11bGF0ZSBDUkMgZm9yIFx2KGNyYzE2KSAqLwotbG9uZyBj cmMxNiA9IDBMOwkJCS8qIEZpbGUgQ1JDID0gXHYoY3JjMTYpICovCi1pbnQgZ25mZXJyb3IgPSAw OwkJCS8qIGduZmlsZSgpIGZhaWx1cmUgcmVhc29uICovCi0KLWV4dGVybiBDSEFSIGZlb2w7Ci1l eHRlcm4gaW50IGJ5dGVvcmRlciwgeGZsZywgd2hhdCwgZm1hc2ssIGN4c2VlbiwgY3pzZWVuLCBu c2NhbmZpbGUsIHN5c2luZGV4OwotZXh0ZXJuIGludCB4Y21kc3JjLCBkaXNwb3MsIG1hdGNoZmlm bzsKLWV4dGVybiBpbnQgaW5zZXJ2ZXI7Ci0KLWV4dGVybiBpbnQgbm9saW5rczsKLSNpZmRlZiBW TVNPUlVOSVgKLWV4dGVybiBpbnQgemdmc19kaXI7Ci0jaWZkZWYgQ0tTWU1MSU5LCi1leHRlcm4g aW50IHpnZnNfbGluazsKLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLSNlbmRpZiAvKiBWTVNPUlVO SVggKi8KLQotI2lmbmRlZiBOT1hGRVIKLQotI2lmbmRlZiBOT0lDUAotI2lmbmRlZiBOT1NQTAot ZXh0ZXJuIGNoYXIgKiBjbGNtZHM7Ci1leHRlcm4gaW50IGhhdmV1cmw7Ci0jaWZkZWYgQ0tfQVBD Ci1leHRlcm4gaW50IGFwY2FjdGl2ZSwgYWRsX2FzazsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLSNl bmRpZiAvKiBOT1NQTCAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0KLWV4dGVybiBpbnQgcmVtZmls ZTsKLQotLyogKG1vdmUgdGhlc2UgcHJvdG90eXBlcyB0byB0aGUgYXBwcm9wcmlhdGUgLmggZmls ZXMuLi4pICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBOb3QgdXNlZCAqLwotI2lmZGVmIFZNUwot X1BST1RPVFlQKCBpbnQgZ2V0dm51bSwgKGNoYXIgKikgKTsKLSNlbmRpZiAvKiBWTVMgKi8KLSNl bmRpZiAvKiBDT01NRU5UICovCi0KLV9QUk9UT1RZUCggc3RhdGljIGludCBiZ2V0cGt0LCAoaW50 KSApOwotI2lmbmRlZiBOT0NTRVRTCi1fUFJPVE9UWVAoIGludCBsb29rdXAsIChzdHJ1Y3Qga2V5 dGFiW10sIGNoYXIgKiwgaW50LCBpbnQgKikgKTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jaWZu ZGVmIE5PU1BMCi1fUFJPVE9UWVAoIGludCB6enN0cmluZywgKGNoYXIgKiwgY2hhciAqKiwgaW50 ICopICk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIE9TMgotI2luY2x1ZGUgPGlvLmg+ Ci0jaWZkZWYgT1MyT05MWQotI2luY2x1ZGUgPG9zMi5oPgotI2VuZGlmIC8qIE9TMk9OTFkgKi8K LSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIFZNUwotI2luY2x1ZGUgPGVycm5vLmg+Ci0jZW5k aWYgLyogVk1TICovCi0KLS8qIEV4dGVybmFscyBmcm9tIGNrY21haS5jICovCi0KLWV4dGVybiBp bnQgc3J2Y2Rtc2csIHNydmlkbCwgaWRsZXRtbzsKLWV4dGVybiBjaGFyICogY2Rtc2dmaWxlW107 Ci1leHRlcm4gaW50IHNwc2l6LCBzcG1heCwgcnBzaXosIHRpbWludCwgc3J2dGltLCBydGltbywg bnBhZCwgZWJxLCBlYnFmbGcsCi0gcnB0LCBycHRxLCBycHRmbGcsIGNhcGFzLCBrZWVwLCBmbmNh Y3QsIHBrdHRpbSwgYXV0b3Bhciwgc3BzaXpyLCB4aXRzdGE7Ci1leHRlcm4gaW50IHBrdG51bSwg YmN0ciwgYmN0dSwgYmN0ZiwgYmN0bCwgY2xmaWxzLCBzYnVmbnVtLCBwcm90b2NvbCwKLSBzaXpl LCBvc2l6ZSwgc3BrdGwsIG5maWxzLCBja3dhcm4sIHRpbWVmLCBzcHNpemYsIHNuZHR5cCwgcmN2 dHlwLCBzdWNjZXNzOwotZXh0ZXJuIGludCBwYXJpdHksIHR1cm4sIG5ldHdvcmssIHdoYXRydSwg ZnNlY3MsIGp1c3RvbmUsIHNsb3N0YXJ0LAotIGNrZGVsYXksIGRpc3BsYSwgbXlwYWRuLCBtb3Zp bmcsIHJlY3Vyc2l2ZSwgbmV0dHlwZTsKLWV4dGVybiBsb25nIGZpbGNudDsKLWV4dGVybiBDS19P RkZfVAotIHRmYywgZnNpemUsIHNlbmRzdGFydCwgcnNfbGVuLCBmbGNpLCBmbGNvLCB0bGNpLCB0 bGNvLCBjYWxpYnJhdGU7Ci1leHRlcm4gbG9uZyBmaWxyZWosIG9sZGNwcywgY3BzLCBwZWFrY3Bz LCBjY3UsIGNjcCwgZmlsZXN0YXR1czsKLWV4dGVybiBpbnQgZmJsa3NpeiwgZnJlY2wsIGZyZWNm bSwgZm9yZywgZmNjdHJsLCBmZGlzcGxhLCBza2lwYnVwOwotZXh0ZXJuIGludCBzcGFja2V0cywg cnBhY2tldHMsIHRpbWVvdXRzLCByZXRyYW5zLCBjcnVuY2hlZCwgd21heCwgd2N1cjsKLWV4dGVy biBpbnQgaGNmbGcsIGJpbmFyeSwgZm5jbnYsIGJfc2F2ZSwgZl9zYXZlLCBzZXJ2ZXI7Ci1leHRl cm4gaW50IG5ha3N0YXRlLCBkaXNjYXJkLCByZWplY3Rpb24sIGxvY2FsLCB4ZmVybW9kZSwgaW50 ZXJydXB0ZWQ7Ci1leHRlcm4gaW50IHJxLCBycWYsIHNxLCB3c2xvdHMsIHdzbG90biwgd3Nsb3Ry LCB3aW5sbywgdXJwc2l6LCBybG47Ci1leHRlcm4gaW50IGZuc3BhdGgsIGZucnBhdGgsIGVvZm1l dGhvZCwgZGlyYWN0aXZlLCB3aGF0cnUyLCB3ZWFyZWFsaWtlOwotZXh0ZXJuIGludCBhdGNhcHIs IGF0Y2FwYiwgYXRjYXB1OwotZXh0ZXJuIGludCBscGNhcHIsIGxwY2FwYiwgbHBjYXB1OwotZXh0 ZXJuIGludCBzd2NhcHIsIHN3Y2FwYiwgc3djYXB1OwotZXh0ZXJuIGludCBsc2NhcHIsIGxzY2Fw YiwgbHNjYXB1OwotZXh0ZXJuIGludCByc2NhcHIsIHJzY2FwYiwgcnNjYXB1OwotZXh0ZXJuIGlu dCBycHRlbmEsIHJwdG1pbjsKLWV4dGVybiBpbnQgc3NlcXRibFtdOwotZXh0ZXJuIGludCBudW1l cnJzLCBuenhvcHRzOwotZXh0ZXJuIGxvbmcgcnB0bjsKLWV4dGVybiBpbnQgbWF4dHJ5OwotZXh0 ZXJuIGludCBzdGRvdWY7Ci1leHRlcm4gaW50IHNlbmRtb2RlOwotZXh0ZXJuIGludCBjYXJyaWVy LCB0dHBydHk7Ci1leHRlcm4gaW50IGdfZm5ycGF0aDsKLSNpZmRlZiBUQ1BTT0NLRVQKLWV4dGVy biBpbnQgdHRucHJvdG87Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLSNpZm5kZWYgTk9TUEwK LWV4dGVybiBpbnQgc25keGluLCBzbmR4aGksIHNuZHhsbzsKLSNlbmRpZiAvKiBOT1NQTCAqLwot Ci1leHRlcm4gaW50IGdfYmluYXJ5LCBnX2ZuY252OwotCi0jaWZkZWYgR0ZUSU1FUgotZXh0ZXJu IENLRkxPQVQgZnBmc2VjczsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSNpZmRlZiBPUzIKLWV4 dGVybiBzdHJ1Y3QgemF0dHIgaWF0dHI7Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBQSVBF U0VORAotZXh0ZXJuIGludCB1c2VwaXBlczsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotZXh0ZXJu IGludCBwaXBlc2VuZDsKLQotI2lmZGVmIFNUUkVBTUlORwotZXh0ZXJuIGludCBzdHJlYW1ycSwg c3RyZWFtaW5nLCBzdHJlYW1lZCwgc3RyZWFtb2s7Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi1l eHRlcm4gaW50IHJlbGlhYmxlLCBjbGVhcnJxLCBjbGVhcmVkLCB1cmNsZWFyOwotCi1leHRlcm4g aW50Ci0gIGF0ZW5jaSwgYXRlbmNvLCBhdGRhdGksIGF0ZGF0bywgYXRsZW5pLCBhdGxlbm8sIGF0 YmxraSwgYXRibGtvLAotICBhdHR5cGksIGF0dHlwbywgYXRzaWRpLCBhdHNpZG8sIGF0c3lzaSwg YXRzeXNvLCBhdGRpc2ksIGF0ZGlzbzsKLQotZXh0ZXJuIGludCBiaWdzYnNpeiwgYmlncmJzaXo7 Ci1leHRlcm4gY2hhciAqdmVyc2lvOwotZXh0ZXJuIGNoYXIgKmZpbGVmaWxlOwotZXh0ZXJuIGNo YXIgd2hvYXJldVtdLCAqIGNrc3lzaWQ7Ci0KLSNpZm5kZWYgTk9TRVJWRVIKLWV4dGVybiBpbnQg bmdldHBhdGg7Ci1leHRlcm4gY2hhciAqIGdldHBhdGhbXTsKLWV4dGVybiBpbnQgZnJvbWdldHBh dGg7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQotI2lmZGVmIENLX0xPR0lOCi1leHRlcm4gaW50 IGlzZ3Vlc3Q7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotZXh0ZXJuIGludCBzcnZjbWRsZW47 Ci1leHRlcm4gQ0hBUiAqc3J2Y21kLCAqIGVwa3Rtc2c7Ci1leHRlcm4gQ0hBUiBwYWRjaCwgbXlw YWRjLCBlb2wsIHNlb2wsIGN0bHEsIG15Y3RscSwgc3N0YXRlLCBteXJwdHE7Ci1leHRlcm4gQ0hB UiAqZGF0YSwgcGFkYnVmW10sIHN0Y2hyLCBteXN0Y2g7Ci1leHRlcm4gQ0hBUiAqc3J2cHRyOwot ZXh0ZXJuIENIQVIgKnJkYXRhcDsKLWV4dGVybiBjaGFyICpjbWFyZywgKmNtYXJnMiwgKipjbWxp c3QsIGZpbG5hbVtdLCBvZmlsbmFtW107Ci1leHRlcm4gY2hhciAqcmZzcGVjLCAqcHJmc3BlYywg KnJyZnNwZWMsICpwcnJmc3BlYywgKnNmc3BlYywgKnBzZnNwZWMsICpyZnNwZWM7Ci1leHRlcm4g Y2hhciBmc3BlY1tdOwotZXh0ZXJuIGludCBmc3BlY2xlbjsKLQotI2lmbmRlZiBOT01TRU5ECi1l eHRlcm4gc3RydWN0IGZpbGVsaXN0ICogZmlsZWhlYWQsICogZmlsZW5leHQ7Ci1leHRlcm4gaW50 IGFkZGxpc3Q7Ci0jZW5kaWYgLyogTk9NU0VORCAqLwotCi1fUFJPVE9UWVAoIGludCBsc2xvb2ss ICh1bnNpZ25lZCBpbnQgYikgKTsgLyogTG9ja2luZyBTaGlmdCBMb29rYWhlYWQgKi8KLV9QUk9U T1RZUCggaW50IHN6ZW9mLCAoQ0hBUiAqcykgKTsKLV9QUk9UT1RZUCggVk9JRCBmbmxpc3QsICh2 b2lkKSApOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi1leHRlcm4gQ0tfT0ZGX1QgZmZjOwotCi0v KiBDaGFyYWN0ZXIgc2V0IFRyYW5zbGF0aW9uICovCi0KLSNpZm5kZWYgTk9DU0VUUwotZXh0ZXJu IGludCB0Y2hhcnNldCwgZmNoYXJzZXQsIGRjc2V0NywgZGNzZXQ4OwotZXh0ZXJuIGludCBmY3Nf c2F2ZSwgdGNzX3NhdmU7Ci1leHRlcm4gaW50IG50Y3NldHMsIHhsYXR5cGUsIGNzZXF0YWJbXTsK LWV4dGVybiBzdHJ1Y3QgY3NpbmZvIHRjc2luZm9bXSwgZmNzaW5mb1tdOwotZXh0ZXJuIGludCBy X2NzZXQsIHNfY3NldCwgYWZjc2V0W107Ci0jaWZkZWYgVU5JQ09ERQotZXh0ZXJuIGludCB1Y3Nv cmRlciwgZmlsZW9yZGVyOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotX1BST1RPVFlQKCBDSEFS IGlkZW50LCAoQ0hBUikgKTsJLyogSWRlbnRpdHkgdHJhbnNsYXRpb24gZnVuY3Rpb24gKi8KLQot LyogQXJyYXlzIG9mIGFuZCBwb2ludGVycyB0byBjaGFyYWN0ZXIgdHJhbnNsYXRpb24gZnVuY3Rp b25zICovCi0KLSNpZmRlZiBDS19BTlNJQwotZXh0ZXJuIENIQVIgKCpyeCkoQ0hBUik7IC8qIFBv aW50ZXIgdG8gaW5wdXQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uIGZ1bmN0aW9uICovCi1leHRlcm4g Q0hBUiAoKnN4KShDSEFSKTsgLyogUG9pbnRlciB0byBvdXRwdXQgY2hhcmFjdGVyIHRyYW5zbGF0 aW9uIGZ1bmN0aW9uICovCi1leHRlcm4gQ0hBUiAoKnhsc1tNQVhUQ1NFVFMrMV1bTUFYRkNTRVRT KzFdKShDSEFSKTsgLyogQnl0ZS10by1CeXRlIFNlbmQgKi8KLWV4dGVybiBDSEFSICgqeGxyW01B WFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKENIQVIpOyAvKiBCeXRlLXRvLUJ5dGUgUmVjdiAqLwot I2lmZGVmIFVOSUNPREUKLWV4dGVybiBpbnQgKCp4dXQpKFVTSE9SVCk7CS8qIFRyYW5zbGF0aW9u IGZ1bmN0aW9uIFVDUyB0byBUQ1MgKi8KLWV4dGVybiBpbnQgKCp4dWYpKFVTSE9SVCk7CS8qIFRy YW5zbGF0aW9uIGZ1bmN0aW9uIFVDUyB0byBGQ1MgKi8KLWV4dGVybiBVU0hPUlQgKCp4dHUpKENI QVIpOwkvKiBUcmFuc2xhdGlvbiBmdW5jdGlvbiBUQ1MgdG8gVUNTICovCi1leHRlcm4gVVNIT1JU ICgqeGZ1KShDSEFSKTsJLyogVHJhbnNsYXRpb24gZnVuY3Rpb24gRkNTIHRvIFVDUyAqLwotI2Vu ZGlmIC8qIFVOSUNPREUgKi8KLQotI2Vsc2UgLyogVGhlIHNhbWUgZGVjbGFyYXRpb25zIGFnYWlu IGZvciBub24tQU5TSSBjb21pbGVycy4uLiAqLwotCi1leHRlcm4gQ0hBUiAoKnJ4KSgpOwotZXh0 ZXJuIENIQVIgKCpzeCkoKTsKLWV4dGVybiBDSEFSICgqeGxzW01BWFRDU0VUUysxXVtNQVhGQ1NF VFMrMV0pKCk7Ci1leHRlcm4gQ0hBUiAoKnhscltNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKSgp OwotI2lmZGVmIFVOSUNPREUKLWV4dGVybiBpbnQgKCp4dXQpKCk7Ci1leHRlcm4gaW50ICgqeHVm KSgpOwotZXh0ZXJuIFVTSE9SVCAoKnh0dSkoKTsKLWV4dGVybiBVU0hPUlQgKCp4ZnUpKCk7Ci0j ZW5kaWYgLyogVU5JQ09ERSAqLwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0jZW5kaWYgLyogTk9D U0VUUyAqLwotCi0vKiAoUFdQKSBleHRlcm5hbCBkZWYuIG9mIHRoaW5ncyB1c2VkIGluIGJ1ZmZl cmVkIGZpbGUgaW5wdXQgYW5kIG91dHB1dCAqLwotCi0jaWZkZWYgRFlOQU1JQwotZXh0ZXJuIGNo YXIgKnppbmJ1ZmZlciwgKnpvdXRidWZmZXI7Ci0jZWxzZQotZXh0ZXJuIGNoYXIgemluYnVmZmVy W10sIHpvdXRidWZmZXJbXTsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi1leHRlcm4gY2hhciAqemlu cHRyLCAqem91dHB0cjsKLWV4dGVybiBpbnQgemluY250LCB6b3V0Y250LCB6b2J1ZnNpemUsIHhm cnhsYTsKLQotZXh0ZXJuIGxvbmcgY3JjdGFbXSwgY3JjdGJbXTsJCS8qIENSQy0xNiBnZW5lcmF0 aW9uIHRhYmxlcyAqLwotZXh0ZXJuIGludCByc2VxdGJsW107CQkJLyogUmVjJ2QtcGFja2V0IHNl cXVlbmNlICMgdGFibGUgKi8KLQotI2lmbmRlZiBOT1hGRVIKLQotLyogQ3JpdGVyaWEgdXNlZCBi eSBnbmZpbGUoKS4uLiAqLwotCi1jaGFyIHNuZGFmdGVyWzE5XSAgID0geyBOVUwsIE5VTCB9Owot Y2hhciBzbmRiZWZvcmVbMTldICA9IHsgTlVMLCBOVUwgfTsKLWNoYXIgc25kbmFmdGVyWzE5XSAg PSB7IE5VTCwgTlVMIH07Ci1jaGFyIHNuZG5iZWZvcmVbMTldID0geyBOVUwsIE5VTCB9OwotY2hh ciAqc25kZXhjZXB0W05TTkRFWENFUFRdICA9IHsgTlVMTCwgTlVMTCB9OwotY2hhciAqcmN2ZXhj ZXB0W05TTkRFWENFUFRdICA9IHsgTlVMTCwgTlVMTCB9OwotQ0tfT0ZGX1Qgc25kc21hbGxlciA9 IChDS19PRkZfVCktMTsKLUNLX09GRl9UIHNuZGxhcmdlciAgPSAoQ0tfT0ZGX1QpLTE7Ci0KLS8q IFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlIGJ1dCBzaGFyZWQgYnkgb3RoZXIgbW9k dWxlcy4gKi8KLQotaW50IHhmcmJlbCA9IDE7Ci1jaGFyICogb2ZwZXJtcyA9ICIiOwkJCS8qIE91 dHB1dCBmaWxlIHBlcm1pc3Npb25zICovCi1pbnQgYXV0b3BhdGggPSAwOwkJCS8qIFNFVCBSRUNF SVZFIFBBVEhOQU1FUyBBVVRPIGZsYWcgKi8KLQotI2lmZGVmIENBTElCUkFURQotI2RlZmluZSBD QUxfTyAzCi0jZGVmaW5lIENBTF9NIDI1MwotCi1pbnQgY2FsX2ogPSAwOwotCi1DSEFSCi1jYWxf YVtdID0gewotIDE2LCA0NSwgOTgsICAzLCA1MiwgNDEsIDE0LCAgNywgNzYsMTY1LDEyMiwgMTEs MTA0LCA3NywxNjYsIDE1LAotMTYwLCA5MywgMTgsIDE5LDExMiwgODUsIDU0LCAyMywyMzIsMjEz LCA5MCwgMjcsIDEyLCA4MSwxMjYsIDMxLAotICA0LDIwNSwgMzQsIDM1LDE0NCwgNzMsMTEwLCAz OSwgMjgsMTMzLDIxOCwgNDMsMTU2LCA2NSwxMDIsIDQ3LAotIDg0LCA2MSwgNTAsIDUxLDIwOCwx MTcsIDg2LCA1NSwgIDgsMjQ1LCA3NCwgNTksIDQ0LDEyNSwyMjIsIDYzLAotIDgwLCAgMSwxNjIs IDY3LDExNiwxMDUsMjA2LCA3MSwxMjAsICA5LDI1MCwgNzUsIDg4LCA5NywgIDYsIDc5LAotMTAw LDIyMSwgODIsIDgzLCAzNiwgODksIDk0LCA4NywgNDAsIDIxLDEwNiwgOTEsMjM2LDE0NSwxNTAs IDk1LAotMjI4LCAzMywxMzAsIDk5LDE0OCwxMzcsMTk4LDEwMywxMDgsMTY5LCA0MiwxMDcsMTg0 LDEyOSwgNzgsMTExLAotICAwLCA0OSwxMTQsMTE1LCAzMiwxMjEsMjU0LDExOSwxNzIsIDU3LDEz OCwxMjMsMTUyLDE3NywgMjIsMTI3LAotMjQwLDE5MywgIDIsMTMxLDE3NiwgIDUsIDM4LDEzNSwy MDQsMjI5LCAxMCwxMzksMjAwLDE2MSwxNzQsMTQzLAotMTI4LCAxNywxNDYsMTQ3LCA2OCwxNTMs IDMwLDE1MSwgNzIsMjE3LDE3MCwxNTUsIDI0LDIwOSwgNjIsMTU5LAotIDY0LDIyNSwxOTQsMTYz LDI0NCwyMDEsIDcwLDE2NywyMTYsMTk3LDIzNCwxNzEsMTg4LDEwOSwyMzAsMTc1LAotMjEyLDEx MywxNzgsMTc5LDEzMiwxODUsMTkwLDE4MywxMzYsMjQ5LDIwMiwxODcsIDkyLDI0MSwxMTgsMTkx LAotIDQ4LDIzNywgNjYsMTk1LCA5NiwyMzMsMTQyLDE5OSwyNDgsIDM3LCA1OCwyMDMsIDYwLCAx MywxMzQsMjA3LAotIDIwLCAyOSwyMTAsMjExLDE2NCwxNDksMTgyLDIxNSwyMjAsIDI1LCAyNiwy MTksMTI0LDE1NywyNDYsMjIzLAotMTgwLDE0MSwyMjYsMjI3LDE5MiwxMDEsMjM4LDIzMSwgNTYs IDY5LDE1NCwyMzUsMjUyLDE3MywgNDYsMjM5LAotMjI0LDI1MywyNDIsMjQzLDE5NiwgNTMsMjE0 LDI0NywxNjgsMTgxLDE4NiwyNTEsMTQwLDE4OSwxNTgsMjU1Ci19OwotI2VuZGlmIC8qIENBTElC UkFURSAqLwotCi1jaGFyICogcmZfZXJyID0gIkVycm9yIHJlY2VpdmluZyBmaWxlIjsJLyogcmN2 ZmlsKCkgZXJyb3IgbWVzc2FnZSAqLwotCi0jaWZkZWYgQ0tfU1BFRUQKLXNob3J0IGN0bHBbMjU2 XSA9IHsJCS8qIENvbnRyb2wtUHJlZml4IHRhYmxlICovCi0gIDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwgLyogQzAgICovCi0g IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwgLyogRzAgICovCi0gIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKLSAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLCAvKiBERUwgKi8KLSAgMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLCAvKiBDMSAgKi8KLSAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLCAvKiBHMSAgKi8KLSAgMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAotICAwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEg IC8qIDI1NSAqLwotfTsKLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotCi1pbnQgc25kc3JjOwkJLyog RmxhZyBmb3Igd2hlcmUgdG8gZ2V0IG5hbWVzIG9mIGZpbGVzIHRvIHNlbmQ6ICovCi0JCQkJCS8q IC0xOiB6bmV4dCgpIGZ1bmN0aW9uICovCi0JCQkJCS8qICAwOiBzdGRpbiAqLwotCQkJCQkvKiA+ MDogbGlzdCBpbiBjbWxpc3Qgb3Igb3RoZXIgbGlzdCAqLwotCQkJCQkvKiAtOTogY2FsaWJyYXRl ICovCi0KLWludCAgbWVtc3RyOwkJCQkvKiBGbGFnIGZvciBpbnB1dCBmcm9tIG1lbW9yeSBzdHJp bmcgKi8KLWludCAgZnVuY3N0cjsJCQkJLyogRmxhZyBmb3IgaW5wdXQgZnJvbSBmdW5jdGlvbiAq LwotaW50ICBiZXN0bGVuID0gMDsKLWludCAgbWF4c2VuZCA9IDA7Ci0KLWludCBnbmZfYmluYXJ5 ID0gMDsJCQkvKiBQcmV2YWlsaW5nIHhmZXIgbW9kZSBmb3IgZ25maWxlICovCi0KLSNpZmRlZiBw ZHAxMQotI2RlZmluZSBNWUlOSVRMRU4gMzIKLSNlbHNlCi0jZGVmaW5lIE1ZSU5JVExFTiAxMDAK LSNlbmRpZiAvKiBwZHAxMSAqLwotQ0hBUiBteWluaXRbTVlJTklUTEVOXTsJCQkvKiBDb3B5IG9m IG15IFNlbmQtSW5pdCBkYXRhICovCi0KLS8qIFZhcmlhYmxlcyBsb2NhbCB0byB0aGlzIG1vZHVs ZSAqLwotCi0jaWZkZWYgVExPRwotI2lmbmRlZiBYWVpfSU5URVJOQUwKLXN0YXRpYwotI2VuZGlm IC8qIFhZWl9JTlRFUk5BTCAqLwotY2hhciAqZm5jbmFtW10gPSB7Ci0gICJyZW5hbWUiLCAicmVw bGFjZSIsICJiYWNrdXAiLCAiYXBwZW5kIiwgImRpc2NhcmQiLCAiYXNrIiwKLSAgInVwZGF0ZSIs ICJkYXRlcy1kaWZmZXIiLCAiIgotfTsKLSNlbmRpZiAvKiBUTE9HICovCi0KLXN0YXRpYyBjaGFy ICptZW1wdHI7CQkJLyogUG9pbnRlciBmb3IgbWVtb3J5IHN0cmluZ3MgKi8KLQotI2lmZGVmIFZN UwotZXh0ZXJuIGludCBiYXRjaDsKLSNlbHNlCi1leHRlcm4gaW50IGJhY2tncmQ7Ci0jZW5kaWYg LyogVk1TICovCi0KLSNpZmRlZiBDS19DVFJMWgotc3RhdGljIGludCBsYXN0Y2hhciA9IDA7Ci0j ZW5kaWYgLyogQ0tfQ1RSTFogKi8KLQotI2lmZGVmIENLX0FOU0lDCi1zdGF0aWMgaW50ICgqZnVu Y3B0cikodm9pZCk7CQkvKiBQb2ludGVyIGZvciBmdW5jdGlvbiBzdHJpbmdzICovCi0jZWxzZQot c3RhdGljIGludCAoKmZ1bmNwdHIpKCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLQotI2lmZGVm IHBkcDExCi0jZGVmaW5lIENNRFNUUkwgNTAKLXN0YXRpYyBjaGFyIGNtZHN0cls1MF07CQkJLyog U3lzdGVtIGNvbW1hbmQgc3RyaW5nLiAqLwotI2Vsc2UKLSNpZmRlZiBCSUdCVUZPSwotI2RlZmlu ZSBDTURTVFJMIDEwMjQKLSNlbHNlCi0jZGVmaW5lIENNRFNUUkwgMjU2Ci0jZW5kaWYgLyogQklH QlVGT0sgKi8KLXN0YXRpYyBjaGFyIGNtZHN0cltDTURTVFJMKzFdOwotI2VuZGlmIC8qIHBkcDEx ICovCi0KLXN0YXRpYyBpbnQgZHJhaW47CQkJLyogRm9yIGRyYWluaW5nIHN0YWNrZWQtdXAgQUNL cy4gKi8KLQotc3RhdGljIGludCBmaXJzdDsJCQkvKiBGbGFnIGZvciBmaXJzdCBjaGFyIGZyb20g aW5wdXQgKi8KLXN0YXRpYyBDSEFSIHQ7CQkJCS8qIEN1cnJlbnQgY2hhcmFjdGVyICovCi0jaWZk ZWYgQ09NTUVOVAotc3RhdGljIENIQVIgbmV4dDsJCQkvKiBOZXh0IGNoYXJhY3RlciAqLwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQotc3RhdGljIGludCBlYnFzZW50ID0gMDsJCQkvKiA4dGgtYml0 IHByZWZpeCBiaWQgdGhhdCBJIHNlbnQgKi8KLXN0YXRpYyBpbnQgbHNzdGF0ZSA9IDA7CQkJLyog TG9ja2luZyBzaGlmdCBzdGF0ZSAqLwotc3RhdGljIGludCBsc3F1b3RlID0gMDsJCQkvKiBMb2Nr aW5nIHNoaWZ0IHF1b3RlICovCi0KLWV4dGVybiBpbnQgcXVpZXQ7Ci0KLS8qICBFIE4gQyBTIFQg UiAgLS0gIEVuY29kZSBhIHN0cmluZyBmcm9tIG1lbW9yeS4gKi8KLQotLyoKLSAgQ2FsbCB0aGlz IGluc3RlYWQgb2YgZ2V0cGt0KCkgaWYgc291cmNlIGlzIGEgc3RyaW5nLCByYXRoZXIgdGhhbiBh IGZpbGUuCi0gIE5vdGU6IENoYXJhY3RlciBzZXQgdHJhbnNsYXRpb24gaXMgbmV2ZXIgZG9uZSBp biB0aGlzIGNhc2UuCi0qLwotCi0jaWZkZWYgQ09NTUVOVAotI2RlZmluZSBFTkNCVUZMIDIwMAot I2lmbmRlZiBwZHAxMQotQ0hBUiBlbmNidWZbRU5DQlVGTF07Ci0jZWxzZQotLyogVGhpcyBpcyBn cm9zcywgYnV0IHRoZSBwZHAxMSByb290IHNlZ21lbnQgaXMgb3V0IG9mIHNwYWNlICovCi0vKiBX aWxsIGFsbG9jYXRlIGl0IGluIGNrdXVzci5jLiAqLwotZXh0ZXJuIENIQVIgZW5jYnVmW107Ci0j ZW5kaWYgLyogcGRwMTEgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLS8qCi0gIEVuY29kZSBw YWNrZXQgZGF0YSBmcm9tIGEgc3RyaW5nIGluIG1lbW9yeSByYXRoZXIgdGhhbiBmcm9tIGEgZmls ZS4KLSAgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBlbmNvZGVkIHN0cmluZyBvbiBzdWNjZXNz LCAtMSBpZiB0aGUgc3RyaW5nCi0gIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWx5IGVuY29kZWQgaW50 byB0aGUgY3VycmVudGx5IG5lZ290aWF0ZWQgZGF0YQotICBmaWVsZCBsZW5ndGguCi0qLwotaW50 Ci0jaWZkZWYgQ0tfQU5TSUMKLWVuY3N0cihDSEFSICpzKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8K LWVuY3N0cihzKSBDSEFSKiBzOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0vKgotICBSZWNv ZGVkIDMwIEp1bCA5NCB0byB1c2UgdGhlIHJlZ3VsYXIgZGF0YSBidWZmZXIgYW5kIHRoZSBuZWdv dGlhdGVkCi0gIG1heGltdW0gcGFja2V0IHNpemUuICBQcmV2aW91c2x5IHdlIHdlcmUgbGltaXRl ZCB0byB0aGUgbGVuZ3RoIG9mIGVuY2J1ZltdLgotICBBbHNvLCB0byByZXR1cm4gYSBmYWlsdXJl IGNvZGUgaWYgdGhlIGVudGlyZSBlbmNvZGVkIHN0cmluZyB3b3VsZCBub3QgZml0LgotICBNb2Rp ZmllZCAxNCBKdWwgOTggdG8gcmV0dXJuIGxlbmd0aCBvZiBlbmNvZGVkIHN0cmluZy4KLSovCi0g ICAgaW50IG0sIHJjLCBzbGVuOyBjaGFyICpwOwotICAgIGlmICghZGF0YSkgewkJCS8qIFdhdGNo IG91dCBmb3IgbnVsbCBwb2ludGVycy4gKi8KLQlkZWJ1ZyhGMTAwLCJTRVJJT1VTIEVSUk9SOiBl bmNzdHIgZGF0YSA9PSBOVUxMIiwiIiwwKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAo IXMpIHMgPSAoQ0hBUiAqKSIiOwkJLyogRGl0dG8uICovCi0gICAgc2xlbiA9IHN0cmxlbigoY2hh ciAqKXMpOwkJLyogTGVuZ3RoIG9mIHNvdXJjZSBzdHJpbmcuICovCi0gICAgZGVidWcoRjExMSwi ZW5jc3RyIixzLHNsZW4pOwotICAgIHJjID0gMDsJCQkJLyogUmV0dXJuIGNvZGUuICovCi0gICAg bSA9IG1lbXN0cjsgcCA9IG1lbXB0cjsJCS8qIFNhdmUgdGhlc2UuICovCi0gICAgbWVtcHRyID0g KGNoYXIgKilzOwkJCS8qIFBvaW50IHRvIHRoZSBzdHJpbmcuICovCi0gICAgLyogZGVidWcoRjEw MSwiZW5jc3RyIG1lbXB0ciAxIiwiIixtZW1wdHIpOyAqLwotICAgIG1lbXN0ciA9IDE7CQkJCS8q IEZsYWcgbWVtb3J5IHN0cmluZyBhcyBzb3VyY2UuICovCi0gICAgZmlyc3QgPSAxOwkJCQkvKiBJ bml0aWFsaXplIGNoYXJhY3RlciBsb29rYWhlYWQuICovCi0gICAgKmRhdGEgPSBOVUw7CQkJLyog SW4gY2FzZSBzIGlzIGVtcHR5ICovCi0gICAgZGVidWcoRjEwMSwiZW5jc3RyIHNwc2l6IiwiIixz cHNpeik7Ci0gICAgcmMgPSBnZXRwa3Qoc3BzaXosMCk7CQkvKiBGaWxsIGEgcGFja2V0IGZyb20g dGhlIHN0cmluZy4gKi8KLSAgICBkZWJ1ZyhGMTAxLCJlbmNzdHIgZ2V0cGt0IHJjIiwiIixyYyk7 Ci0gICAgaWYgKHJjID4gLTEgJiYgbWVtcHRyIDwgKGNoYXIgKikocyArIHNsZW4pKSB7IC8qIE1l YW5zIHdlIGRpZG4ndCBlbmNvZGUgKi8KLQlyYyA9IC0xOwkJCS8qIHRoZSB3aG9sZSBzdHJpbmcu ICovCi0JZGVidWcoRjEwMSwiZW5jc3RyIHN0cmluZyB0b28gYmlnIiwiIixzaXplKTsKLSAgICB9 Ci0gICAgZGVidWcoRjEwMSwiZW5jc3RyIGdldHBrdCByYyIsIiIscmMpOwotICAgIG1lbXN0ciA9 IG07CQkJCS8qIFJlc3RvcmUgbWVtb3J5IHN0cmluZyBmbGFnICovCi0gICAgbWVtcHRyID0gcDsJ CQkJLyogYW5kIHBvaW50ZXIgKi8KLSAgICBmaXJzdCA9IDE7CQkJCS8qIFB1dCB0aGlzIGJhY2sg YXMgd2UgZm91bmQgaXQuICovCi0gICAgcmV0dXJuKHJjKTsKLX0KLQotLyogIE91dHB1dCBmdW5j dGlvbnMgcGFzc2VkIHRvICdkZWNvZGUnOiAgKi8KLQotaW50CQkJICAgICAgIC8qICBQdXQgY2hh cmFjdGVyIGluIHNlcnZlciBjb21tYW5kIGJ1ZmZlciAgKi8KLSNpZmRlZiBDS19BTlNJQwotcHV0 c3J2KGNoYXIgYykKLSNlbHNlCi1wdXRzcnYoYykgcmVnaXN0ZXIgY2hhciBjOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi0vKiBwdXRzcnYgKi8gewotICAgICpzcnZwdHIrKyA9IGM7Ci0gICAgKnNy dnB0ciA9ICdcMCc7CQkvKiBNYWtlIHN1cmUgYnVmZmVyIGlzIG51bGwtdGVybWluYXRlZCAqLwot ICAgIHJldHVybigwKTsKLX0KLQotaW50CQkJCQkvKiAgT3V0cHV0IGNoYXJhY3RlciB0byBjb25z b2xlLiAgKi8KLSNpZmRlZiBDS19BTlNJQwotcHV0dHJtKGNoYXIgYykKLSNlbHNlCi1wdXR0cm0o YykgcmVnaXN0ZXIgY2hhciBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBwdXR0cm0gKi8g ewotICAgIGV4dGVybiBpbnQgcmNkYWN0aXZlOwotI2lmbmRlZiBOT1NQTAotICAgIGV4dGVybiBj aGFyICogcWJ1ZnA7CQkvKiBJZiBSRU1PVEUgUVVFUlkgYWN0aXZlLCAqLwotICAgIGV4dGVybiBp bnQgcXVlcnksIHFidWZuOwkJLyogYWxzbyBzdG9yZSByZXNwb25zZSBpbiAqLwotICAgIGlmIChx dWVyeSAmJiBxYnVmbisrIDwgMTAyNCkgewkvKiBxdWVyeSBidWZmZXIuICovCi0JKnFidWZwKysg PSBjOwotCSpxYnVmcCA9IE5VTDsKLSAgICB9Ci0gICAgaWYgKCFxdWVyeSB8fCAheGNtZHNyYykK LSNlbmRpZiAvKiBOT1NQTCAqLwotLyoKLSAgVGhpcyByb3V0aW5lIGlzIHVzZWQgKGFtb25nIG90 aGVyIHRoaW5ncykgZm9yIHByaW50aW5nIHRoZSBzZXJ2ZXIncyBhbnN3ZXIKLSAgdG8gYSBSRU1P VEUgY29tbWFuZC4gIEJ1dCBSRU1PVEUgQ0QgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGlzbid0IHJl YWxseSAKLSAgYXNraW5nIGZvciBhbiBhbnN3ZXIgZnJvbSB0aGUgc2VydmVyLiAgVGh1cyBzb21l IHBlb3BsZSB3YW50IHRvIHN1cHByZXNzCi0gIHRoZSBjb25maXJtYXRpb24gbWVzc2FnZSAoZS5n LiB3aGVuIHRoZSBzZXJ2ZXIgc2VuZHMgYmFjayB0aGUgYWN0dWFsIHBhdGgKLSAgb2YgdGhlIGRp cmVjdG9yeSBDRCdkIHRvKSwgYW5kIGV4cGVjdCB0byBiZSBhYmxlIHRvIGRvIHRoaXMgd2l0aCBT RVQgUVVJRVQKLSAgT04uICBCdXQgdGhleSB3b3VsZCBub3Qgd2FudCBTRVQgUVVJRVQgT04gdG8g c3VwcHJlc3MgdGhlIG90aGVyIHNlcnZlcgotICByZXBsaWVzLCB3aGljaCBhcmUgcG9pbnRsZXNz IHdpdGhvdXQgdGhlaXIgYW5zd2Vycy4gIFRodXMgdGhlICJyY2RhY3RpdmUiCi0gIGZsYWcgKFJF TU9URSBDRCBjb21tYW5kIGlzIGFjdGl2ZSkuICBUaHUgT2N0IDEwIDE2OjM4OjIxIDIwMDIKLSov Ci0gICAgICBpZiAoIShxdWlldCAmJiByY2RhY3RpdmUpKQkvKiBncm9zcywgeXVrICovCi0JY29u b2MoYyk7Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi1pbnQJCQkJ CS8qICBPdXRwdXQgY2hhciB0byBmaWxlLiAqLwotI2lmZGVmIENLX0FOU0lDCi1wdXRtZmlsKGNo YXIgYykJCQkJLyogSnVzdCBsaWtlIHB1dGZpbCBidXQgdG8gWk1GSUxFICovCi0jZWxzZQkJCQkJ LyogcmF0aGVyIHRoYW4gWk9GSUxFLi4uICovCi1wdXRtZmlsKGMpIHJlZ2lzdGVyIGNoYXIgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogcHV0bWZpbCAqLyB7Ci0gICAgZGVidWcoRjAwMCwi cHV0ZmlsIiwiIixjKTsKLSAgICBpZiAoemNob3V0KFpNRklMRSwgKGNoYXIpIChjICYgZm1hc2sp KSA8IDApIHsKLQljenNlZW4gPSAxOwotCWRlYnVnKEYxMDEsInB1dGZpbCB6Y2hvdXQgd3JpdGUg ZXJyb3IsIHNldHRpbmcgY3pzZWVuIiwiIiwxKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBy ZXR1cm4oMCk7Ci19Ci0KLWludAkJCQkJLyogIE91dHB1dCBjaGFyIHRvIG5vd2hlcmUuICovCi0j aWZkZWYgQ0tfQU5TSUMKLXB1dG5vd2hlcmUoY2hhciBjKQotI2Vsc2UKLXB1dG5vd2hlcmUoYykg cmVnaXN0ZXIgY2hhciBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBwdXRub3doZXJlICov IHsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLQotaW50CQkJCQkvKiAgT3V0cHV0IGNoYXIgdG8gZmls ZS4gKi8KLSNpZmRlZiBDS19BTlNJQwotcHV0ZmlsKGNoYXIgYykKLSNlbHNlCi1wdXRmaWwoYykg cmVnaXN0ZXIgY2hhciBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBwdXRmaWwgKi8gewot ICAgIGRlYnVnKEYwMDAsInB1dGZpbCIsIiIsYyk7Ci0gICAgaWYgKHpjaG91dChaT0ZJTEUsIChj aGFyKSAoYyAmIGZtYXNrKSkgPCAwKSB7Ci0JY3pzZWVuID0gMTsgICAJCQkvKiBJZiB3cml0ZSBl cnJvci4uLiAqLwotCWRlYnVnKEYxMDEsInB1dGZpbCB6Y2hvdXQgd3JpdGUgZXJyb3IsIHNldHRp bmcgY3pzZWVuIiwiIiwxKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19 Ci0KLS8qCi0gIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaXMgYSB3cmFwcGVyIGZvciBwdXRmaWwo KS4gIFRoZSBvbmx5IHJlYXNvbiBmb3IgaXRzCi0gIGV4aXN0ZW5jZSBpcyB0byBiZSBwYXNzZWQg YXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGRlY29kZSgpLCB3aGljaCB0cmVhdHMKLSAgcHV0Zmls KCkgaXRzZWxmIHNwZWNpYWxseSAtLSBieXBhc3NpbmcgaXQgYW5kIHVzaW5nIGFuIGludGVybmFs IG1hY3JvCi0gIGluc3RlYWQgdG8gc3BlZWQgdGhpbmdzIHVwLiAgVXNlIHpwdXRmaWwoKSBpbnN0 ZWFkIG9mIHB1dGZpbCgpIGluIGNhc2VzIHdoZXJlCi0gIHdlIGRvIG5vdCB3YW50IHRoaXMgdG8g aGFwcGVuLCBlLmcuIHdoZW4gd2UgbmVlZCB0byBzZW5kIG91dHB1dCB0byB0aGUgZmlsZQotICB3 aXRoIGEgbWl4dHVyZSBvZiB6Y2hvdXQoKSBhbmQgenNvdXQoKS96c291dGwoKSBjYWxscyAoYXMg aXMgdGhlIGNhc2Ugd2l0aAotICBpbmNvbWluZyBzaG9ydC1mb3JtIFJFTU9URSBjb21tYW5kIHJl cGxpZXMgcmVkaXJlY3RlZCB0byBhIGZpbGUpLCB3aGljaCB3b3VsZAotICBvdGhlcndpc2UgcmVz dWx0IGluIGRhdGEgd3JpdHRlbiB0byB0aGUgZmlsZSBvdXQgb2Ygb3JkZXIuCi0qLwotaW50Ci0j aWZkZWYgQ0tfQU5TSUMKLXpwdXRmaWwoY2hhciBjKQotI2Vsc2UKLXpwdXRmaWwoYykgcmVnaXN0 ZXIgY2hhciBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB6cHV0ZmlsICovIHsKLSAgICBy ZXR1cm4ocHV0ZmlsKGMpKTsKLX0KLQotI2lmbmRlZiBOT1hGRVIKLQotLyogRCBFIEMgTyBEIEUg IC0tICBLZXJtaXQgcGFja2V0IGRlY29kaW5nIHByb2NlZHVyZSAqLwotCi0vKgotIENhbGwgd2l0 aCBzdHJpbmcgdG8gYmUgZGVjb2RlZCBhbmQgYW4gb3V0cHV0IGZ1bmN0aW9uLgotIFJldHVybnMg MCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlIChlLmcuIGRpc2sgZnVsbCkuCi0KLSBUaGlzIGlz IHRoZSAiaW5uZXIgbG9vcCIgd2hlbiByZWNlaXZpbmcgZmlsZXMsIGFuZCBtdXN0IGJlIGNvZGVk IGFzCi0gZWZmaWNpZW50bHkgYXMgcG9zc2libGUuICBOb3RlIHNvbWUgcG90ZW50aWFsIHByb2Js ZW1zOiAgaWYgYSBwYWNrZXQKLSBpcyBiYWRseSBmb3JtZWQsIGhhdmluZyBhIHByZWZpeGVkIHNl cXVlbmNlIGVuZGluZyBwcmVtYXR1cmVseSwgdGhpcwotIGZ1bmN0aW9uLCBhcyBjb2RlZCwgY291 bGQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIHBhY2tldC4gIFRoaXMgaGFzCi0gbmV2ZXIgaGFw cGVuZWQsIHRodXMgdGhlIGFkZGl0aW9uYWwgKHRpbWUtY29uc3VtaW5nKSB0ZXN0cyBoYXZlIG5v dAotIGJlZW4gYWRkZWQuCi0qLwotCi1zdGF0aWMgQ0hBUiAqeGRidWY7CS8qIEdsb2JhbCB2ZXJz aW9uIG9mIGRlY29kZSgpJ3MgYnVmZmVyIHBvaW50ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGZvciB1c2UgYnkgdHJhbnNsYXRpb24gZnVuY3Rpb25zLiAqLwotCi0vKiBGdW5jdGlv biBmb3IgcHVzaGluZyBhIGNoYXJhY3RlciBvbnRvIGRlY29kZSgpJ3MgaW5wdXQgc3RyZWFtLiAq LwotCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLXpkc3R1ZmYoQ0hBUiBjKQotI2Vsc2UKLXpkc3R1 ZmYoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB6ZHN0dWZmICovIHsKLSAg ICB4ZGJ1Zi0tOwkJCQkvKiBCYWNrIHVwIHRoZSBwb2ludGVyLiAqLwotICAgICp4ZGJ1ZiA9IGM7 CQkJCS8qIFN0dWZmIHRoZSBjaGFyYWN0ZXIuICovCi19Ci0KLSNpZmRlZiBDS1RVTklORwotLyoK LSAgVHJpbW1lZC1kb3duIHBhY2tldCBkZWNvZGVyIGZvciBiaW5hcnktbW9kZSBuby1wYXJpdHkg dHJhbnNmZXJzLgotICBkZWNvZGUoKSBpcyB0aGUgZnVsbCB2ZXJzaW9uLgotKi8KLWludAotI2lm ZGVmIENLX0FOU0lDCi1iZGVjb2RlKENIQVIgKmJ1ZiwgaW50ICgqZm4pKGNoYXIpKQotI2Vsc2UK LWJkZWNvZGUoYnVmLGZuKSByZWdpc3RlciBDSEFSICpidWY7IHJlZ2lzdGVyIGludCAoKmZuKSgp OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBiZGVjb2RlICovIHsKLSAgICByZWdpc3RlciB1 bnNpZ25lZCBpbnQgYSwgYTc7CS8qIFZhcmlvdXMgY29waWVzIG9mIGN1cnJlbnQgY2hhciAqLwot ICAgIGludCBjY3BmbGc7CQkJCS8qIEZvciBDdHJsLXVucHJlZml4aW5nIHN0YXRzICovCi0gICAg aW50IHQ7CQkJCS8qIEludCB2ZXJzaW9uIG9mIGNoYXJhY3RlciAqLwotICAgIGludCBsZW47Ci0g ICAgbG9uZyB6OwkJCQkvKiBGb3IgQ1JDIGNhbGN1bGF0aW9uICovCi0gICAgQ0hBUiBjOwkJCQkv KiBDdXJyZW50IGNoYXJhY3RlciAqLwotCi0gICAgaWYgKCFiaW5hcnkgfHwgcGFyaXR5IHx8IGZu ICE9IHB1dGZpbCkgLyogSlVTVCBJTiBDQVNFICovCi0gICAgICByZXR1cm4oZGVjb2RlKGJ1Zixm biwxKSk7Ci0gICAgZGVidWcoRjEwMCwiQkRFQ09ERSIsIiIsMCk7Ci0KLSAgICB4ZGJ1ZiA9IGJ1 ZjsJCQkvKiBHbG9iYWwgY29weSBvZiBzb3VyY2UgcG9pbnRlci4gKi8KLQotICAgIGxlbiA9IHJs bjsJCQkJLyogTnVtYmVyIG9mIGJ5dGVzIGluIGRhdGEgZmllbGQgKi8KLSAgICB3aGlsZSAobGVu ID4gMCkgewotICAgICAgICBhID0gKnhkYnVmKysgJiAweGZmOwkJLyogR2V0IG5leHQgY2hhcmFj dGVyICovCi0JbGVuLS07Ci0JcnB0ID0gMDsJCQkvKiBJbml0aWFsaXplIHJlcGVhdCBjb3VudC4g Ki8KLQlpZiAoYSA9PSBycHRxICYmIHJwdGZsZykgewkvKiBHb3QgYSByZXBlYXQgcHJlZml4PyAq LwotCSAgICBycHQgPSB4dW5jaGFyKCp4ZGJ1ZisrICYgMHhGRik7IC8qIFllcywgZ2V0IHRoZSBy ZXBlYXQgY291bnQsICovCi0JICAgIHJwdG4gKz0gcnB0OwotCSAgICBhID0gKnhkYnVmKysgJiAw eEZGOwkvKiBhbmQgZ2V0IHRoZSBwcmVmaXhlZCBjaGFyYWN0ZXIuICovCi0JICAgIGxlbiAtPSAy OwotCX0KLQljY3BmbGcgPSAwOwkJCS8qIENvbnRyb2wgcHJlZml4IGZsYWcuICovCi0JaWYgKGEg PT0gY3RscSkgewkJLyogSWYgY29udHJvbCBwcmVmaXgsICovCi0JICAgIGEgID0gKnhkYnVmKysg JiAweEZGOwkvKiBnZXQgaXRzIG9wZXJhbmQgKi8KLQkgICAgbGVuLS07Ci0JICAgIGE3ID0gYSAm IDB4N0Y7CQkvKiBhbmQgaXRzIGxvdyA3IGJpdHMuICovCi0JICAgIGlmICgoYTcgPj0gMDEwMCAm JiBhNyA8PSAwMTM3KSB8fCBhNyA9PSAnPycpIHsgLyogQ29udHJvbGxpZnkgKi8KLQkJYSA9IGN0 bChhKTsJCS8qIGlmIGluIGNvbnRyb2wgcmFuZ2UuICovCi0JCWE3ID0gYSAmIDB4N0Y7Ci0JCWNj cGZsZyA9IDE7CQkvKiBOb3RlIHRoYXQgd2UgZGlkIHRoaXMgKi8KLQkJY2NwKys7CQkJLyogQ291 bnQgZm9yIHN0YXRzICovCi0JICAgIH0KLQl9IGVsc2UgYTcgPSBhICYgMHg3ZjsJCS8qIE5vdCBj b250cm9sIHF1b3RlICovCi0JaWYgKGE3IDwgMzIgfHwgYTcgPT0gMTI3KQkvKiBBIGJhcmUgY29u dHJvbCBjaGFyYWN0ZXI/ICovCi0JICBpZiAoIWNjcGZsZykgY2N1Kys7CQkvKiBDb3VudCBpdCAq LwotCWlmICghcnB0KSBycHQgPSAxOwotCWZvciAoOyBycHQgPiAwOyBycHQtLSkgewkvKiBPdXRw dXQgdGhlIGNoYXIgUlBUIHRpbWVzICovCi0jaWZkZWYgQ0FMSUJSQVRFCi0JICAgIGlmIChjYWxp YnJhdGUpIHsKLQkJZmZjKys7Ci0JCWNvbnRpbnVlOwotCSAgICB9Ci0jZW5kaWYgLyogQ0FMSUJS QVRFICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICBpZiAoeGZsZyAmJiAhcmVtZmlsZSkgewkJ LyogV3JpdGUgdG8gdmlydHVhbCBzY3JlZW4gKi8KLSAgICAgICAgICAgICAgICBjaGFyIF9hOwot ICAgICAgICAgICAgICAgIF9hID0gYSAmIGZtYXNrOwotICAgICAgICAgICAgICAgIHQgPSBjb25v YyhfYSk7Ci0gICAgICAgICAgICAgICAgaWYgKHQgPCAxKQotICAgICAgICAgICAgICAgICAgICB0 ID0gLTE7Ci0gICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBPUzIgKi8KLQkgICAgICB0ID0g em1jaG91dChhICYgZm1hc2spOwkvKiB6bWNob3V0IGlzIGEgbWFjcm8gKi8KLQkgICAgaWYgKHQg PCAwKSB7Ci0JCWRlYnVnKEYxMDEsImJkZWNvZGUgd3JpdGUgZXJyb3IgLSBlcnJubyIsIiIsZXJy bm8pOwotCQlyZXR1cm4oLTEpOwotCSAgICB9Ci0JICAgIGZmYysrOwkJCS8qIENvdW50IHRoZSBj aGFyYWN0ZXIgKi8KLQkgICAgaWYgKGRvY3JjICYmICFyZW1maWxlKSB7CS8qIFVwZGF0ZSBmaWxl IENSQyAqLwotCQljID0gYTsJCQkvKiBGb3JjZSBjb252ZXJzaW9uIHRvIHVuc2lnbmVkIGNoYXIg Ki8KLQkJeiA9IGNyYzE2IF4gKGxvbmcpYzsKLQkJY3JjMTYgPSAoY3JjMTYgPj4gOCkgXgotCQkg IChjcmN0YVsoeiAmIDB4RjApID4+IDRdIF4gY3JjdGJbeiAmIDB4MEZdKTsKLQkgICAgfQotCX0K LSNpZmRlZiBDS19DVFJMWgotCWxhc3RjaGFyID0gYTsKLSNlbmRpZiAvKiBDS19DVFJMWiAqLwot ICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogQ0tUVU5JTkcgKi8KLSNlbmRpZiAv KiBOT1hGRVIgKi8KLQotLyogIFAgTiBCIFkgVCBFICAtLSAgT3V0cHV0IG5leHQgYnl0ZSB0byBm aWxlIG9yIG90aGVyIGRlc3RpbmF0aW9uICAqLwotCi1zdGF0aWMgQ0tfT0ZGX1Qgb2ZmYyA9IDBM OwotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXBuYnl0ZShDSEFSIGMsIGludCAoKmZu KShjaGFyKSkKLSNlbHNlCi1wbmJ5dGUoYyxmbikgQ0hBUiBjOyBpbnQgKCpmbikoKTsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotLyogcG5ieXRlICovIHsKLSAgICBpbnQgcmM7Ci0gICAgbG9uZyB6 OwotCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PWEZFUgotICAgIGlmICh4ZmxnICYmICFyZW1maWxl KSB7CQkvKiBXcml0ZSB0byB2aXJ0dWFsIHNjcmVlbiAqLwotCWNoYXIgX2E7Ci0JX2EgPSBjICYg Zm1hc2s7Ci0JcmMgPSBjb25vYyhfYSk7Ci0JaWYgKHJjIDwgMSkKLQkgIHJldHVybigtMSk7Ci0g ICAgfSBlbHNlCi0jZW5kaWYgLyogTk9YRkVSICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgewot CWlmIChmbiA9PSBwdXRmaWwpIHsJCS8qIEV4ZWN1dGUgb3V0cHV0IGZ1bmN0aW9uICovCi0JICAg IHJjID0gem1jaG91dChjKTsJCS8qIHRvLWZpbGUgbWFjcm8gKGZhc3QpICovCi0JfSBlbHNlIGlm ICghZm4pIHsKLQkgICAgcmMgPSBwdXRjaGFyKGMpOwkJLyogdG8tc2NyZWVuIG1hY3JvIChmYXN0 KSAqLwotICAgICAgICB9IGVsc2UgewotCSAgICByYyA9ICgqZm4pKGMpOwkJLyogZnVuY3Rpb24g Y2FsbCAobm90IGFzIGZhc3QpICovCi0JfQotCWlmIChyYyA8IDApCi0JICByZXR1cm4ocmMpOwot ICAgIH0KLS8qCi0gIEJvdGggeGduYnl0ZSgpIGFuZCB4cG5ieXRlKCkgaW5jcmVtZW50IGZmYyAo dGhlIGZpbGUgYnl0ZSBjb3VudGVyKS4KLSAgRHVyaW5nIGZpbGUgdHJhbnNmZXIsIG9ubHkgb25l IG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBjYWxsZWQuICBIb3dldmVyLAotICB0aGUgVFJBTlNMQVRF IGNvbW1hbmQgaXMgbGlrZWx5IHRvIGNhbGwgdGhlbSBib3RoLiAgb2ZmYywgdGhlcmVmb3JlLAot ICBjb250YWlucyB0aGUgb3V0cHV0IGJ5dGUgY291bnQsIG5lY2Vzc2FyeSBmb3IgaGFuZGxpbmcg dGhlIFVDUy0yIEJPTS4KLSAgTk9URTogSXQgbWlnaHQgYmUgc2FmZSB0byBqdXN0IHRlc3QgZm9y IFdfU0VORCwgRlRQIG9yIG5vdC4KLSovCi0gICAgaWYgKCh3aGF0ICYgKFdfRlRQfFdfU0VORCkp ICE9IChXX0ZUUHxXX1NFTkQpKSB7Ci0Jb2ZmYysrOwkJCQkvKiBDb3VudCB0aGUgYnl0ZSAqLwot CWZmYysrOwkJCQkvKiBDb3VudCB0aGUgYnl0ZSAqLwotICAgIH0KLSNpZm5kZWYgTk9YRkVSCi0g ICAgaWYgKGRvY3JjICYmICF4ZmxnICYmICFyZW1maWxlKSB7CS8qIFVwZGF0ZSBmaWxlIENSQyAq LwotCXogPSBjcmMxNiBeIChsb25nKWM7Ci0JY3JjMTYgPSAoY3JjMTYgPj4gOCkgXgotCSAgKGNy Y3RhWyh6ICYgMHhGMCkgPj4gNF0gXiBjcmN0Ylt6ICYgMHgwRl0pOwotICAgIH0KLSNlbmRpZiAv KiBOT1hGRVIgKi8KLSAgICByZXR1cm4oMSk7Ci19Ci0KLS8qCi0gIFggUCBOIEIgWSBUIEUgIC0t ICBUcmFuc2xhdGUgYW5kIHB1dCBuZXh0IGJ5dGUgdG8gZmlsZS4KLQotICBPbmx5IGZvciBVbmlj b2RlLiAgQ2FsbCB3aXRoIG5leHQgdW50cmFuc2xhdGVkIGJ5dGUgZnJvbSBpbmNvbWluZwotICBi eXRlIHN0cmVhbSwgd2hpY2ggY2FuIGJlIGluIGFueSBUcmFuc2ZlciBDaGFyYWN0ZXIgU2V0OiBV Q1MtMiwgVVRGLTgsCi0gIExhdGluLTEsIExhdGluLUhlYnJldywgZXRjLiAgVHJhbnNsYXRlcyB0 byB0aGUgZmlsZSBjaGFyYWN0ZXIgc2V0IGFuZAotICB3cml0ZXMgYnl0ZXMgdG8gdGhlIG91dHB1 dCBmaWxlLiAgQ2FsbCB3aXRoIGNoYXJhY3RlciB0byB0cmFuc2xhdGUKLSAgYXMgYW4gaW50LCBw bHVzIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0ICh0byB0cmFuc2xhdGUgZnJvbSkgYW5kIHRo ZQotICBmaWxlIGNoYXJhY3RlciBzZXQgKHRvIHRyYW5zbGF0ZSB0byksIG9yIC0xLDAsMCB0byBy ZXNldCB0aGUgVUNTLTIgYnl0ZQotICBudW1iZXIgKHdoaWNoIHNob3VsZCBiZSBkb25lIGF0IHRo ZSBiZWdpbm5pbmcgb2YgYSBmaWxlKS4gIElmIHRoZSB0cmFuc2ZlcgotICAoc291cmNlKSBjaGFy YWN0ZXItc2V0IGlzIFVDUy0yLCBieXRlcyBNVVNUIGFycml2ZSBpbiBCaWctRW5kaWFuIG9yZGVy LgotICBSZXR1cm5zOgotICAgLTE6IE9uIGVycm9yCi0gICAgMDogTm90aGluZyB0byB3cml0ZSAo bWlkLXNlcXVlbmNlKQotICAgPjA6IE51bWJlciBvZiBieXRlcyB3cml0dGVuLgotKi8KLSNpZmRl ZiBLQU5KSQotc3RhdGljIGludCBqc3RhdGUgPSAwLCBqeCA9IDA7CQkvKiBGb3Igb3V0cHV0dGlu ZyBKSVMtNyAqLwotc3RhdGljIGNoYXIgamJ1ZlsxNl0gPSB7IE5VTCwgTlVMIH07Ci0jZW5kaWYg LyogS0FOSkkgKi8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXhwbmJ5dGUoaW50IGEsIGludCB0 Y3MsIGludCBmY3MsIGludCAoKmZuKShjaGFyKSkKLSNlbHNlCi14cG5ieXRlKGEsdGNzLGZjcyxm bikgaW50IGEsIHRjcywgZmNzOyBpbnQgKCpmbikoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot LyogeHBuYnl0ZSAqLyB7Ci0jaWZkZWYgVU5JQ09ERQotICAgIGV4dGVybiBpbnQgdWNzYm9tOwkJ CS8qIEJ5dGUgb3JkZXIgKi8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgLyogQ0hBUiBjOyAq LwkJCS8qIFVuc2lnbmVkIGNoYXIgd29ya2VyICovCi0gICAgc3RhdGljIHVuaW9uIGNrX3Nob3J0 IHVjLCBldSwgc2o7CS8qIFVDUy0yLCBFVUMsIGFuZCBTaGlmdC1KSVMgd29ya2VycyAqLwotICAg IFVTSE9SVCBjaDsJCQkJLyogZGl0dG8uLi4gKi8KLSAgICBVU0hPUlQgKiB1cyA9IE5VTEw7CQkJ LyogZGl0dG8uLi4gKi8KLSAgICBpbnQgYzcsIHJjLCBoYXZldWMgPSAwOwkJLyogUmV0dXJuIGNv ZGUgYW5kIFVDUy0yIGZsYWcgKi8KLSAgICBpbnQgdXRmZXJyb3IgPSAwOwkJCS8qIFVURi04IGVy cm9yICovCi0gICAgc3RhdGljIGludCBibiA9IDA7CQkJLyogVUNTLTIgYnl0ZSBudW1iZXIgKi8K LSAgICBpbnQgc3dhcHBpbmcgPSAwOwkJCS8qIFN3YXBwaW5nIFVDUyBieXRlcyB0byBvdXRwdXQ/ ICovCi0JCQkJCS8qIHN3YXBwaW5nIG11c3QgYmUgMCBvciAxICovCi0gICAgaWYgKGEgPT0gLTEg JiYgKHRjcyB8IGZjcykgPT0gMCkgewkvKiBSZXNldCBpbiBjYXNlIHByZXZpb3VzIHJ1biAqLwot CWJuID0gMDsJCQkJLyogbGVmdCBibiBhdCAxLi4uICovCi0Jb2ZmYyA9IChDS19PRkZfVCkwOwot CWRlYnVnKEYxMDEsInhwbmJ5dGUgUkVTRVQiLCIiLGJuKTsKLQlyZXR1cm4oMCk7Ci0gICAgfQot ICAgIGRlYnVnKEYwMDEsInhwbmJ5dGUgYSIsIiIsYSk7Ci0KLSNpZmRlZiBVTklDT0RFCi0KLS8q Ci0gIGJ5dGVvcmRlciA9IGhhcmR3YXJlIGJ5dGUgb3JkZXIgb2YgdGhpcyBtYWNoaW5lLgotICB1 Y3NvcmRlciAgPSBvdmVycmlkZSBieSBTRVQgRklMRSBVQ1MgQllURS1PUkRFUiBjb21tYW5kLgot ICBmaWxlb3JkZXIgPSBieXRlIG9yZGVyIG9mIFVDUy0yIGlucHV0IGZpbGUgZGV0ZWN0ZWQgZnJv bSBCT00uCi0gIHN3YXBwaW5nIGFwcGxpZXMgb25seSB3aGVuIG91dHB1dCBjaGFyc2V0IGlzIFVD Uy0yLgotKi8KLSAgICBpZiAodWNzb3JkZXIgIT0gMSAmJiB1Y3NvcmRlciAhPSAwKQkvKiBBbHNv IGp1c3QgaW4gY2FzZS4uLiAqLwotICAgICAgdWNzb3JkZXIgPSBieXRlb3JkZXI7Ci0gICAgaWYg KChieXRlb3JkZXIgJiYgIXVjc29yZGVyKSB8fCAoIWJ5dGVvcmRlciAmJiBmaWxlb3JkZXIpKQot ICAgICAgc3dhcHBpbmcgPSAxOwkJCS8qIFN3YXBwaW5nIGJ5dGVzIHRvIG91dHB1dCAqLwotCi0j aWZkZWYgQ09NTUVOVAotICAgIGRlYnVnKEYxMDEsInhwbmJ5dGUgdWNzb3JkZXIiLCIiLHVjc29y ZGVyKTsKLSAgICBkZWJ1ZyhGMTAxLCJ4cG5ieXRlIHN3YXBwaW5nIiwiIixzd2FwcGluZyk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgaWYgKHRjcyA9PSBUQ19VVEY4KSB7CQkvKiAnYScg aXMgZnJvbSBhIFVURi04IHN0cmVhbSAqLwotCWNoID0gYTsKLQlpZiAoZmNzID09IFRDX1VURjgp CQkvKiBPdXRwdXQgaXMgVVRGLTggdG9vICovCi0JICByZXR1cm4ocG5ieXRlKGNoLGZuKSk7CS8q IHNvIGp1c3QgY29weS4gKi8KLQlyYyA9IHV0ZjhfdG9fdWNzMihjaCwmdXMpOwkvKiBPdGhlcndp c2UgY29udmVydCB0byBVQ1MtMiAqLwotCWlmIChyYyA9PSAwKSB7CQkJLyogRG9uZSB3aXRoIHRo aXMgc2VxdWVuY2UgKi8KLQkgICAgdWMueF9zaG9ydCA9ICp1czsJCS8qIFdlIGhhdmUgYSBVbmlj b2RlICovCi0JICAgIGhhdmV1YyA9IDE7Ci0JfSBlbHNlIGlmIChyYyA8IDApIHsJCS8qIEVycm9y ICovCi0JICAgIGRlYnVnKEYxMDEsInhwbmJ5dGUgVVRGLTggY29udmVyc2lvbiBlcnJvciIsIiIs cmMpOwotCSAgICBoYXZldWMgPSAxOwkJCS8qIFJlcGxhY2UgYnkgVStGRkZEICovCi0JICAgIHVj Lnhfc2hvcnQgPSAqdXM7Ci0JICAgIHV0ZmVycm9yID0gMTsKLQl9IGVsc2UJCQkJLyogU2VxdWVu Y2UgaW5jb21wbGV0ZSAqLwotCSAgcmV0dXJuKDApOwotICAgIH0gZWxzZSBpZiAodGNzID09IFRD X1VDUzIpIHsJLyogJ2EnIGlzIFVDUy0yICovCi0JLyogSGVyZSB3ZSBoYXZlIGluY29taW5nIFVD Uy0yIGluIGd1YXJhbnRlZWQgQmlnIEVuZGlhbiBvcmRlciAqLwotCS8qIHNvIHdlIG11c3QgZXhj aGFuZ2UgYnl0ZXMgaWYgbG9jYWwgbWFjaGluZSBpcyBMaXR0bGUgRW5kaWFuLiAqLwotCXN3aXRj aCAoYm4pIHsJCQkvKiBXaGljaCBieXRlPyAqLwotCSAgY2FzZSAwOgkJCS8qIEhpZ2guLi4gKi8K LQkgICAgdWMueF9jaGFyW2J5dGVvcmRlcl0gPSAodW5zaWduZWQpYSAmIDB4ZmY7Ci0JICAgIGJu Kys7Ci0JICAgIHJldHVybigwKTsJCQkvKiBXYWl0IGZvciBuZXh0ICovCi0JICBjYXNlIDE6CQkJ LyogTG93Li4uICovCi0JICAgIHVjLnhfY2hhclsxLWJ5dGVvcmRlcl0gPSAodW5zaWduZWQpYSAm IDB4ZmY7Ci0JICAgIGJuID0gMDsJCQkvKiBEb25lIHdpdGggc2VxdWVuY2UgKi8KLQkgICAgaGF2 ZXVjID0gMTsJCQkvKiBIYXZlIGEgVW5pY29kZSAqLwotCX0KLSAgICB9IGVsc2UKLSNlbmRpZiAv KiBVTklDT0RFICovCi0KLSNpZmRlZiBLQU5KSQkJCQkvKiBXaGV0aGVyIFVOSUNPREUgaXMgZGVm aW5lZCBvciBub3QgKi8KLSAgICAgIGlmICh0Y3MgPT0gVENfSkVVQykgewkJLyogSW5jb21pbmcg SmFwYW5lc2UgRVVDICovCi0JaW50IGJhZCA9IDA7Ci0Jc3RhdGljIGludCBrYW5qaSA9IDA7CQkv KiBGbGFncyBzZXQgaW4gY2FzZSAwIGZvciBjYXNlIDEgKi8KLQlzdGF0aWMgaW50IGthbmEgPSAw OwotCXN3aXRjaCAoYm4pIHsJCQkvKiBCeXRlIG51bWJlciAqLwotCSAgY2FzZSAwOgkJCS8qIEJ5 dGUgMCAqLwotCSAgICBldS54X3Nob3J0ID0gMDsKLQkgICAgaWYgKChhICYgMHg4MCkgPT0gMCkg ewotCQlzai54X3Nob3J0ID0gKHVuc2lnbmVkKWEgJiAweGZmOyAvKiBTaW5nbGUgYnl0ZSAqLwot CQlrYW5qaSA9IGthbmEgPSAwOwotCSAgICB9IGVsc2UgewkJCS8qIERvdWJsZSBieXRlICovCi0J CWM3ID0gYSAmIDB4N2Y7Ci0JCWlmIChjNyA+IDB4MjAgJiYgYzcgPCAweDdmKSB7IC8qIEthbmpp ICovCi0JCSAgICBldS54X2NoYXJbYnl0ZW9yZGVyXSA9IChDSEFSKSBhOyAgLyogU3RvcmUgZmly c3QgYnl0ZSAqLwotCQkgICAgYm4rKzsJCSAgICAgIC8qIFNldCB1cCBmb3Igc2Vjb25kIGJ5dGUg Ki8KLQkJICAgIGthbmppID0gMTsKLQkJICAgIGthbmEgPSAwOwotCQkgICAgcmV0dXJuKDApOwot CQl9IGVsc2UgaWYgKGEgPT0gMHg4ZSkgewkvKiBTUzIgLS0gS2F0YWthbmEgcHJlZml4ICovCi0J CSAgICBldS54X2NoYXJbYnl0ZW9yZGVyXSA9IChDSEFSKSBhOyAvKiBTYXZlIGl0ICovCi0JCSAg ICBibisrOwotCQkgICAga2FuYSA9IDE7Ci0JCSAgICBrYW5qaSA9IDA7Ci0JCSAgICByZXR1cm4o MCk7Ci0JCX0gZWxzZSB7Ci0JCSAgICBiYWQrKzsKLQkJfQotCSAgICB9Ci0JICAgIGJyZWFrOwot CSAgY2FzZSAxOgkJCS8qIEJ5dGUgMSAqLwotCSAgICBibiA9IDA7Ci0JICAgIGlmIChrYW5qaSkg ewotCQlldS54X2NoYXJbMS1ieXRlb3JkZXJdID0gKENIQVIpIGE7Ci0JCXNqLnhfc2hvcnQgPSBl dV90b19zaihldS54X3Nob3J0KTsKLQkJYnJlYWs7Ci0JICAgIH0gZWxzZSBpZiAoa2FuYSkgewot CQlzai54X3Nob3J0ID0gKENIQVIpIChhIHwgMHg4MCk7Ci0JCWJyZWFrOwotCSAgICB9IGVsc2Ug ewkJCS8qIChzaG91bGRuJ3QgaGFwcGVuKSAqLwotCQliYWQrKzsKLQkgICAgfQotCX0KLQkvKiBD b21lIGhlcmUgd2l0aCBvbmUgU2hpZnQtSklTIGNoYXJhY3RlciAqLwotCi0jaWZkZWYgVU5JQ09E RQotCWlmIChiYWQpIHsKLQkgICAgdWMueF9zaG9ydCA9IDB4ZmZmZDsKLQl9IGVsc2UgewotCSAg ICB1Yy54X3Nob3J0ID0gc2pfdG9fdW4oc2oueF9zaG9ydCk7IC8qIENvbnZlcnQgdG8gVW5pY29k ZSAqLwotCX0KLQloYXZldWMgPSAxOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICB9IGVsc2UK LSNlbmRpZiAvKiBLQU5KSSAqLwotCi0jaWZkZWYgVU5JQ09ERQotCXVjLnhfc2hvcnQgPSAodW5z aWduZWQpYSAmIDB4ZmY7IC8qIExhdGluLTEgb3Igd2hhdGV2ZXIuLi4gKi8KLQotICAgIC8qIENv bWUgaGVyZSB3aXRoIHVjID0gdGhlIGNoYXJhY3RlciB0byBiZSB0cmFuc2xhdGVkLiAqLwotICAg IC8qIElmIChoYXZldWMpIGl0J3MgVUNTLTIgaW4gbmF0aXZlIG9yZGVyLCBvdGhlcndpc2UgaXQn cyBhIGJ5dGUuICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ4cG5ieXRlIGhhdmV1YyIsIiIsaGF2ZXVj KTsKLQotICAgIGlmIChoYXZldWMpIHsJCQkvKiBJZiB3ZSBoYXZlIGEgVW5pY29kZS4uLiAqLwot CWRlYnVnKEYwMDEsInhwbmJ5dGUgdWMueF9zaG9ydCIsIltBXSIsdWMueF9zaG9ydCk7Ci0JZGVi dWcoRjEwMSwieHBuYnl0ZSBmZW9sIiwiIixmZW9sKTsKLQlpZiAod2hhdCAmIFdfWEZFUikgewkJ LyogSWYgdHJhbnNmZXJyaW5nIGEgZmlsZSAqLwotCSAgICBpZiAoZmVvbCAmJiB1Yy54X3Nob3J0 ID09IENSKSB7IC8qIGhhbmRsZSBlb2wgY29udmVyc2lvbi4gKi8KLQkJcmV0dXJuKDApOwotCSAg ICB9IGVsc2UgaWYgKGZlb2wgJiYgdWMueF9zaG9ydCA9PSBMRikgewotCQl1Yy54X3Nob3J0ID0g ZmVvbDsKLQkgICAgfQotCX0KLQlkZWJ1ZyhGMDAxLCJ4cG5ieXRlIHVjLnhfc2hvcnQiLCJbQl0i LHVjLnhfc2hvcnQpOwotCWlmIChmY3MgPT0gRkNfVUNTMikgewkJLyogQW5kIEZDUyBpcyBVQ1Mt MiAqLwotCSAgICAvKiBXcml0ZSBvdXQgdGhlIGJ5dGVzIGluIHRoZSBhcHByb3ByaWF0ZSBieXRl IG9yZGVyICovCi0JICAgIGludCBjb3VudCA9IDA7Ci0jaWZuZGVmIElLU0RPTkxZCi0jaWZkZWYg T1MyCi0gICAgICAgICAgICBleHRlcm4gaW50IGs5NXN0ZG91dCx3aGVyZXhbXSx3aGVyZXlbXTsK LQkJCWV4dGVybiB1bnNpZ25lZCBjaGFyIGNvbG9yY21kOwotICAgICAgICAgICAgdW5pb24gewot ICAgICAgICAgICAgICAgIFVTSE9SVCB1Y3MyOwotICAgICAgICAgICAgICAgIFVDSEFSICBieXRl c1syXTsKLSAgICAgICAgICAgIH0gb3V0cHV0OwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8q IElLU0RPTkxZICovCi0JICAgIGlmICghb2ZmYyAmJiB1Y3Nib20pIHsJLyogQmVnaW5uaW5nIG9m IGZpbGU/ICovCi0KLSNpZm5kZWYgSUtTRE9OTFkKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAg ICBpZiAoZm4gPT0gTlVMTCAmJiAhazk1c3Rkb3V0ICYmICFpbnNlcnZlcikgewotCQkgICAgb2Zm YysrOwotI2lmZGVmIENPTU1FTlQKLQkJICAgIC8qIERvbid0IHByaW50IHRoZSBCT00gdG8gdGhl IGRpc3BsYXkgKi8KLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmJ5dGVzWzBdID0gKCF1Y3Nv cmRlciA/IDB4ZmYgOiAweGZlKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmJ5dGVzWzFd ID0gKCF1Y3NvcmRlciA/IDB4ZmUgOiAweGZmKTsKLQotICAgICAgICAgICAgICAgICAgICBWc2Ny bldydFVDUzJTdHJBdHQoVkNNRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZvdXRwdXQudWNzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZXlbVkNNRF0s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZXhbVkNNRF0sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29sb3JjbWQKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICAgICAgICAgIH0gZWxzZSAKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBJS1NE T05MWSAqLwotICAgICAgICAgICAgICAgIHsKLQkJICAgIGlmICgocmMgPSBwbmJ5dGUoKHVjc29y ZGVyID8gMHhmZiA6IDB4ZmUpLGZuKSkgPCAwKQotCQkgICAgICByZXR1cm4ocmMpOwkvKiBCT00g Ki8KLQkJICAgIGlmICgocmMgPSBwbmJ5dGUoKHVjc29yZGVyID8gMHhmZSA6IDB4ZmYpLGZuKSkg PCAwKQotCQkgICAgICByZXR1cm4ocmMpOwotCQl9Ci0JCWNvdW50ICs9IDI7Ci0JICAgIH0KLQkg ICAgaWYgKHV0ZmVycm9yKSB7Ci0jaWZuZGVmIElLU0RPTkxZCi0jaWZkZWYgT1MyCi0gICAgICAg ICAgICAgICAgaWYgKGZuID09IE5VTEwgJiYgIWs5NXN0ZG91dCAmJiAhaW5zZXJ2ZXIpIHsKLSAg ICAgICAgICAgICAgICAgICAgb2ZmYysrOwotICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYnl0 ZXNbMF0gPSAoIXVjc29yZGVyID8gMHhmZCA6IDB4ZmYpOwotICAgICAgICAgICAgICAgICAgICBv dXRwdXQuYnl0ZXNbMV0gPSAoIXVjc29yZGVyID8gMHhmZiA6IDB4ZmQpOwotCi0gICAgICAgICAg ICAgICAgICAgIFZzY3JuV3J0VUNTMlN0ckF0dChWQ01ELAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJm91dHB1dC51Y3MyLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdoZXJleVtWQ01EXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo ZXJleFtWQ01EXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb2xv cmNtZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgICB9IGVsc2UgCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogSUtTRE9OTFkgKi8K LQkJewotCQkgICAgaWYgKChyYyA9IHBuYnl0ZSgodWNzb3JkZXIgPyAweGZkIDogMHhmZiksZm4p KSA8IDApCi0JCSAgICAgIHJldHVybihyYyk7Ci0JCSAgICBpZiAoKHJjID0gcG5ieXRlKCh1Y3Nv cmRlciA/IDB4ZmYgOiAweGZkKSxmbikpIDwgMCkKLQkJICAgICAgcmV0dXJuKHJjKTsKLQkJfQot CQljb3VudCArPSAyOwotCSAgICB9Ci0jaWZuZGVmIElLU0RPTkxZCi0jaWZkZWYgT1MyCi0gICAg ICAgICAgICBpZiAoZm4gPT0gTlVMTCAmJiAhazk1c3Rkb3V0ICYmICFpbnNlcnZlcikgewotICAg ICAgICAgICAgICAgIG9mZmMrKzsKLSAgICAgICAgICAgICAgICBvdXRwdXQuYnl0ZXNbMF0gPSB1 Yy54X2NoYXJbc3dhcHBpbmddOwotICAgICAgICAgICAgICAgIG91dHB1dC5ieXRlc1sxXSA9IHVj LnhfY2hhclsxLXN3YXBwaW5nXTsKLQotICAgICAgICAgICAgICAgIFZzY3JuV3J0VUNTMlN0ckF0 dChWQ01ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHV0LnVjczIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdoZXJleVtWQ01EXSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd2hlcmV4W1ZDTURdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmY29sb3JjbWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICAgIH0gZWxzZSAKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBJS1NET05MWSAq LwotICAgICAgICAgICAgewotCQlpZiAoKHJjID0gcG5ieXRlKHVjLnhfY2hhcltzd2FwcGluZ10s Zm4pKSA8IDApCi0JCSAgcmV0dXJuKHJjKTsKLQkJaWYgKChyYyA9IHBuYnl0ZSh1Yy54X2NoYXJb MS1zd2FwcGluZ10sZm4pKSA8IDApCi0JCSAgcmV0dXJuKHJjKTsKLQkgICAgfQotCSAgICBjb3Vu dCArPSAyOwotCSAgICByZXR1cm4oY291bnQpOwotCX0gZWxzZSBpZiAoZmNzID09IEZDX1VURjgp IHsJLyogQ29udmVydCB0byBVVEYtOCAqLwotCSAgICBDSEFSICogYnVmID0gTlVMTDsKLQkgICAg aW50IGksIGNvdW50OwotCSAgICBpZiAodXRmZXJyb3IpIHsKLQkJaWYgKChyYyA9IHBuYnl0ZSgo dWNzb3JkZXIgPyAweGJkIDogMHhmZiksZm4pKSA8IDApCi0JCSAgcmV0dXJuKHJjKTsKLQkJaWYg KChyYyA9IHBuYnl0ZSgodWNzb3JkZXIgPyAweGZmIDogMHhiZCksZm4pKSA8IDApCi0JCSAgcmV0 dXJuKHJjKTsKLQkgICAgfQotCSAgICBpZiAoKGNvdW50ID0gdWNzMl90b191dGY4KHVjLnhfc2hv cnQsJmJ1ZikpIDwgMSkKLQkgICAgICByZXR1cm4oLTEpOwotCSAgICBkZWJ1ZyhGMDExLCJ4cG5i eXRlIGJ1ZiIsYnVmLGNvdW50KTsKLQkgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0J ICAgICAgaWYgKChyYyA9IHBuYnl0ZShidWZbaV0sZm4pKSA8IDApCi0JCXJldHVybihyYyk7Ci0J ICAgIGlmICh1dGZlcnJvcikKLQkgICAgICBjb3VudCArPSAyOwotCSAgICByZXR1cm4oY291bnQp OwotCX0gZWxzZSB7CQkJLyogVHJhbnNsYXRlIFVDUy0yIHRvIGJ5dGUgKi8KLQkgICAgaWYgKHVj Lnhfc2hvcnQgPT0gMHgyMDI4IHx8IHVjLnhfc2hvcnQgPT0gMHgyMDI5KSB7Ci0JCWlmICh1dGZl cnJvcikKLQkJICBwbmJ5dGUoVU5LLGZuKTsKLQkJaWYgKGZlb2wpCi0JCSAgcmV0dXJuKHBuYnl0 ZSgoQ0hBUilmZW9sLGZuKSk7Ci0JCWlmICgocmMgPSBwbmJ5dGUoKENIQVIpQ1IsZm4pKSA8IDAp Ci0JCSAgcmV0dXJuKHJjKTsKLQkJaWYgKChyYyA9IHBuYnl0ZSgoQ0hBUilMRixmbikpIDwgMCkK LQkJICByZXR1cm4ocmMpOwotCQllbHNlCi0JCSAgcmV0dXJuKHV0ZmVycm9yID8gMyA6IDIpOwot CSAgICB9IGVsc2UgaWYgKHh1ZikgewkJLyogVUNTLXRvLUZDUyBmdW5jdGlvbiAqLwotCQlpbnQg eCA9IDA7Ci0JCWlmICh1dGZlcnJvcikKLQkJICBwbmJ5dGUoVU5LLGZuKTsKLQkJaWYgKChyYyA9 ICgqeHVmKSh1Yy54X3Nob3J0KSkgPCAwKSAvKiBUaGVzZSBjYW4gZmFpbC4uLiAqLwotCQkgIGNo ID0gVU5LOwotCQllbHNlCi0JCSAgY2ggPSAodW5zaWduZWQpKCh1bnNpZ25lZClyYyAmIDB4ZmZm Zik7Ci0JCXggPSBwbmJ5dGUoY2gsZm4pOwotCQlpZiAoeCA8IDApCi0JCSAgcmV0dXJuKHgpOwot CQllbHNlIGlmICh1dGZlcnJvcikKLQkJICB4Kys7Ci0JCXJldHVybih4KTsKLSNpZmRlZiBLQU5K SQotCi0vKiAgQWxzbyBzZWUgdGhlIG5vbi1Vbmljb2RlIEthbmppIHNlY3Rpb24gZnVydGhlciBk b3duIGluIHRoaXMgZnVuY3Rpb24uICovCi0KLQkgICAgfSBlbHNlIGlmIChmY3NpbmZvW2Zjc10u YWxwaGFiZXQgPT0gQUxfSkFQQU4pIHsKLQotCQkvKiBUcmFuc2xhdGUgVUNTLTIgdG8gSmFwYW5l c2Ugc2V0ICovCi0JCWRlYnVnKEYwMDEsInhwbmJ5dGUgdWMiLCIiLHVjLnhfc2hvcnQpOwotCQlz ai54X3Nob3J0ID0gdW5fdG9fc2oodWMueF9zaG9ydCk7IC8qIEZpcnN0IHRvIFNoaWZ0LUpJUyAq LwotCQlkZWJ1ZyhGMDAxLCJ4cG5ieXRlIHNqIiwiIixzai54X3Nob3J0KTsKLQotCQlzd2l0Y2gg KGZjcykgewkJLyogRmlsZSBjaGFyYWN0ZXIgc2V0ICovCi0JCSAgY2FzZSBGQ19TSEpJUzoJLyog U2hpZnQtSklTIC0tIGp1c3Qgb3V0cHV0IGl0ICovCi0JCSAgICBpZiAoc2oueF9jaGFyW2J5dGVv cmRlcl0pIC8qIEJ1dCBub3QgaGlnaCBieXRlIGlmIHplcm8gKi8KLQkJICAgICAgaWYgKChyYyA9 IHBuYnl0ZSgoQ0hBUilzai54X2NoYXJbYnl0ZW9yZGVyXSxmbikpIDwgMCkKLQkJCXJldHVybihy Yyk7Ci0JCSAgICBpZiAoKHJjID0gcG5ieXRlKChDSEFSKXNqLnhfY2hhclsxLWJ5dGVvcmRlcl0s Zm4pKSA8IDApCi0JCSAgICAgIHJldHVybihyYyk7Ci0JCSAgICByZXR1cm4oMik7Ci0JCSAgY2Fz ZSBGQ19KRVVDOgkJLyogRVVDLUpQICovCi0JCSAgICBldS54X3Nob3J0ID0gc2pfdG9fZXUoc2ou eF9zaG9ydCk7IC8qIFNoaWZ0LUpJUyB0byBFVUMgKi8KLQkJICAgIGRlYnVnKEYwMDEsInhwbmJ5 dGUgZXUiLCIiLGV1Lnhfc2hvcnQpOwotCQkgICAgaWYgKGV1Lnhfc2hvcnQgPT0gMHhmZmZmKSB7 IC8qIEJhZCAqLwotCQkJaWYgKChyYyA9IHBuYnl0ZShVTkssZm4pKSA8IDApCi0JCQkgIHJldHVy bihyYyk7Ci0JCQlyZXR1cm4oMSk7Ci0JCSAgICB9IGVsc2UgewkJLyogR29vZCAqLwotCQkJaW50 IGNvdW50ID0gMDsJLyogV3JpdGUgaGlnaCBieXRlIGlmIG5vdCB6ZXJvICovCi0JCQlpZiAoZXUu eF9jaGFyW2J5dGVvcmRlcl0pIHsKLQkJCSAgICBpZiAoKHJjPXBuYnl0ZSgoQ0hBUilldS54X2No YXJbYnl0ZW9yZGVyXSxmbikpIDwgMCkKLQkJCSAgICAgIHJldHVybihyYyk7Ci0JCQkgICAgY291 bnQrKzsKLQkJCX0KLQkJCS8qIEFsd2F5cyB3cml0ZSBsb3cgYnl0ZSAqLwotCQkJaWYgKChyYyA9 IHBuYnl0ZSgoQ0hBUilldS54X2NoYXJbMS1ieXRlb3JkZXJdLGZuKSkgPCAwKQotCQkJICByZXR1 cm4ocmMpOwotCQkJY291bnQrKzsKLQkJCXJldHVybihjb3VudCk7Ci0JCSAgICB9Ci0JCSAgICBi cmVhazsKLQotCQkgIGNhc2UgRkNfSklTNzoJCS8qIEpJUy03ICovCi0JCSAgY2FzZSBGQ19KREVD OgkJLyogREVDIEthbmppICovCi0JCSAgICBldS54X3Nob3J0ID0gc2pfdG9fZXUoc2oueF9zaG9y dCk7IC8qIFNoaWZ0LUpJUyB0byBFVUMgKi8KLQkJICAgIGlmIChldS54X3Nob3J0ID09IDB4ZmZm ZikgeyAvKiBCYWQgKi8KLQkJCWRlYnVnKEYwMDEsInhwbmJ5dGUgYmFkIGV1IiwiIixldS54X3No b3J0KTsKLQkJCWlmICgocmMgPSBwbmJ5dGUoVU5LLGZuKSkgPCAwKQotCQkJICByZXR1cm4ocmMp OwotCQkJcmV0dXJuKDEpOwotCQkgICAgfSBlbHNlIHsJCS8qIEdvb2QgKi8KLQkJCWludCBpOwot CQkJLyogVXNlIGFub3RoZXIgbmFtZSAtICdhJyBoaWRlcyBwYXJhbWV0ZXIgKi8KLQkJCS8qIEl0 J3MgT0sgYXMgaXMgYnV0IGNhdXNlcyBjb21waWxlciB3YXJuaW5ncyAqLwotCQkJY2hhciBhID0g ZXUueF9jaGFyWzEtYnl0ZW9yZGVyXTsgLyogTG93IGJ5dGUgKi8KLQkJCWRlYnVnKEYwMDEsInhw bmJ5dGUgZXUiLCIiLGV1Lnhfc2hvcnQpOwotCQkJaWYgKGV1LnhfY2hhcltieXRlb3JkZXJdID09 IDApIHsgLyogUm9tYW4gKi8KLQkJCSAgICBzd2l0Y2ggKGpzdGF0ZSkgewotCQkJICAgICAgY2Fz ZSAxOgkvKiBDdXJyZW50IHN0YXRlIGlzIEthdGFrYW5hICovCi0JCQkJamJ1ZlswXSA9IDB4MGY7 CS8qIFNJICovCi0JCQkJamJ1ZlsxXSA9IGE7Ci0JCQkJanggPSAyOwotCQkJCWJyZWFrOwotCQkJ ICAgICAgY2FzZSAyOgkvKiBDdXJyZW50IHN0YXRlIGlzIEthbmppICovCi0JCQkJamJ1ZlswXSA9 IDB4MWI7CS8qIEVTQyAqLwotCQkJCWpidWZbMV0gPSAweDI4OwkvKiAoICovCi0JCQkJamJ1Zlsy XSA9IDB4NGE7CS8qIEogKi8KLQkJCQlqYnVmWzNdID0gYTsKLQkJCQlqeCA9IDQ7Ci0JCQkJYnJl YWs7Ci0JCQkgICAgICBkZWZhdWx0OgkvKiBDdXJyZW50IHN0YXRlIGlzIFJvbWFuICovCi0JCQkJ amJ1ZlswXSA9IGE7Ci0JCQkJanggPSAxOwotCQkJCWJyZWFrOwotCQkJICAgIH0KLQkJCSAgICBq c3RhdGUgPSAwOwkvKiBOZXcgc3RhdGUgaXMgUm9tYW4gKi8KLQkJCX0gZWxzZSBpZiAoZXUueF9j aGFyW2J5dGVvcmRlcl0gPT0gMHg4ZSkgeyAvKiBLYW5hICovCi0JCQkgICAganggPSAwOwotCQkJ ICAgIHN3aXRjaCAoanN0YXRlKSB7Ci0JCQkgICAgICBjYXNlIDI6CQkgICAvKiBmcm9tIEthbmpp ICovCi0JCQkJamJ1ZltqeCsrXSA9IDB4MWI7IC8qIEVTQyAqLwotCQkJCWpidWZbangrK10gPSAw eDI4OyAvKiAoICovCi0JCQkJamJ1ZltqeCsrXSA9IDB4NGE7IC8qIEogKi8KLQkJCSAgICAgIGNh c2UgMDoJCSAgIC8qIGZyb20gUm9tYW4gKi8KLQkJCQlqYnVmW2p4KytdID0gMHgwZTsgLyogU08g Ki8KLQkJCSAgICAgIGRlZmF1bHQ6CQkgICAvKiBTdGF0ZSBpcyBhbHJlYWR5IEthbmEqLwotCQkJ CWpidWZbangrK10gPSAoYSAmIDB4N2YpOyAvKiBhbmQgdGhlIGNoYXIgKi8KLQkJCQlicmVhazsK LQkJCSAgICB9Ci0JCQkgICAganN0YXRlID0gMTsJLyogTmV3IHN0YXRlIGlzIEthdGFrYW5hICov Ci0JCQl9IGVsc2UgewkvKiBLYW5qaSAqLwotCQkJICAgIGp4ID0gMDsKLQkJCSAgICBzd2l0Y2gg KGpzdGF0ZSkgewotCQkJICAgICAgY2FzZSAxOgkvKiBDdXJyZW50IHN0YXRlIGlzIEthdGFrYW5h ICovCi0JCQkJamJ1ZltqeCsrXSA9IDB4MGY7IC8qIFNJICAqLwotCQkJICAgICAgY2FzZSAwOgkv KiBDdXJyZW50IHN0YXRlIGlzIFJvbWFuICovCi0JCQkJamJ1ZltqeCsrXSA9IDB4MWI7IC8qIEVT QyAqLwotCQkJCWpidWZbangrK10gPSAweDI0OyAvKiAkICAgKi8KLQkJCQlqYnVmW2p4KytdID0g MHg0MjsgLyogQiAgICovCi0JCQkgICAgICBkZWZhdWx0OgkvKiBDdXJyZW50IHN0YXRlIGlzIGFs cmVhZHkgS2FuamkgKi8KLQkJCQlqYnVmW2p4KytdID0gZXUueF9jaGFyW2J5dGVvcmRlcl0gJiAw eDdmOwotCQkJCWpidWZbangrK10gPSBldS54X2NoYXJbMS1ieXRlb3JkZXJdICYgMHg3ZjsKLQkJ CQlicmVhazsKLQkJCSAgICB9Ci0JCQkgICAganN0YXRlID0gMjsJLyogU2V0IHN0YXRlIHRvIEth bmppICovCi0JCQl9Ci0JCQlmb3IgKGkgPSAwOyBpIDwgang7IGkrKykgLyogT3V0cHV0IHRoZSBy ZXN1bHQgKi8KLQkJCSAgaWYgKChyYyA9IHBuYnl0ZShqYnVmW2ldLGZuKSkgPCAwKQotCQkJICAg IHJldHVybihyYyk7Ci0JCQlyZXR1cm4oangpOwkvKiBSZXR1cm4gaXRzIGxlbmd0aCAqLwotCQkg ICAgfQotCQl9Ci0jZW5kaWYgLyogS0FOSkkgKi8KLQkgICAgfSBlbHNlIHsJCQkvKiBObyB0cmFu c2xhdGlvbiBmdW5jdGlvbiAqLwotCQlpbnQgY291bnQgPSAwOwotCQlpZiAodXRmZXJyb3IpIHsK LQkJICAgIGlmICgocmMgPSBwbmJ5dGUoKHVjc29yZGVyID8gMHhmZCA6IDB4ZmYpLGZuKSkgPCAw KQotCQkgICAgICByZXR1cm4ocmMpOwotCQkgICAgaWYgKChyYyA9IHBuYnl0ZSgodWNzb3JkZXIg PyAweGZmIDogMHhmZCksZm4pKSA8IDApCi0JCSAgICAgIHJldHVybihyYyk7Ci0JCSAgICBjb3Vu dCArPSAyOwotCQl9Ci0JCWlmICgocmMgPSBwbmJ5dGUodWMueF9jaGFyW3N3YXBwaW5nXSxmbikp IDwgMCkKLQkJICByZXR1cm4ocmMpOwotCQlpZiAoKHJjID0gcG5ieXRlKHVjLnhfY2hhclsxLXN3 YXBwaW5nXSxmbikpIDwgMCkKLQkJICByZXR1cm4ocmMpOwotCQljb3VudCArPSAyOwotCQlyZXR1 cm4oY291bnQpOwotCSAgICB9Ci0JfQotICAgIH0gZWxzZSB7CQkJCS8qIEJ5dGUgdG8gVW5pY29k ZSAqLwotCWlmICh4dHUpIHsJCQkvKiBUQ1MtdG8tVUNTIGZ1bmN0aW9uICovCi0JICAgIGlmICgo KHRjc2luZm9bdGNzXS5zaXplID4gMTI4KSAmJiAodWMueF9zaG9ydCAmIDB4ODApKSB8fAotCQl0 Y3NpbmZvW3Rjc10uc2l6ZSA8PSAxMjgpCi0JICAgICAgdWMueF9zaG9ydCA9ICgqeHR1KSh1Yy54 X3Nob3J0KTsKLQl9Ci0JaWYgKGZjcyA9PSBGQ19VQ1MyKSB7CQkvKiBBbmQgRkNTIGlzIFVDUy0y ICovCi0JICAgIC8qIFdyaXRlIG91dCB0aGUgYnl0ZXMgaW4gdGhlIGFwcHJvcHJpYXRlIGJ5dGUg b3JkZXIgKi8KLQkgICAgaWYgKCFvZmZjICYmIHVjc2JvbSkgewkvKiBCZWdpbm5pbmcgb2YgZmls ZT8gKi8KLQkJaWYgKChyYyA9IHBuYnl0ZSgodWNzb3JkZXIgPyAweGZmIDogMHhmZSksZm4pKSA8 IDApIC8qIEJPTSAqLwotCQkgIHJldHVybihyYyk7Ci0JCWlmICgocmMgPSBwbmJ5dGUoKHVjc29y ZGVyID8gMHhmZSA6IDB4ZmYpLGZuKSkgPCAwKQotCQkgIHJldHVybihyYyk7Ci0JICAgIH0KLQkg ICAgaWYgKChyYyA9IHBuYnl0ZSh1Yy54X2NoYXJbc3dhcHBpbmddLGZuKSkgPCAwKQotCSAgICAg IHJldHVybihyYyk7Ci0JICAgIGlmICgocmMgPSBwbmJ5dGUodWMueF9jaGFyWzEtc3dhcHBpbmdd LGZuKSkgPCAwKQotCSAgICAgIHJldHVybihyYyk7Ci0JICAgIHJldHVybigyKTsKLQl9IGVsc2Ug aWYgKGZjcyA9PSBGQ19VVEY4KSB7CS8qIENvbnZlcnQgdG8gVVRGLTggKi8KLQkgICAgQ0hBUiAq IGJ1ZiA9IE5VTEw7Ci0JICAgIGludCBpLCBjb3VudDsKLQkgICAgaWYgKChjb3VudCA9IHVjczJf dG9fdXRmOCh1Yy54X3Nob3J0LCZidWYpKSA8IDEpCi0JICAgICAgcmV0dXJuKC0xKTsKLQkgICAg Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JICAgICAgaWYgKChyYyA9IHBuYnl0ZShidWZb aV0sZm4pKSA8IDApCi0JCXJldHVybihyYyk7Ci0JICAgIHJldHVybihjb3VudCk7Ci0JfSBlbHNl IHsKLQkgICAgZGVidWcoRjEwMCwieHBuYnl0ZSBpbXBvc3NpYmxlIGNvbWJpbmF0aW9uIiwiIiww KTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBLQU5KSQotLyoK LSAgVGhpcyBhbG1vc3QsIGJ1dCBub3QgcXVpdGUsIGR1cGxpY2F0ZXMgdGhlIEthbmppIHNlY3Rp b24gYWJvdmUuCi0gIFRoZXJlIGlzIG5vIGRvdWJ0IGEgd2F5IHRvIGNvbWJpbmUgdGhlIHNlY3Rp b25zIG1vcmUgZWxlZ2FudGx5LAotICBidXQgcHJvYmFibHkgb25seSBhdCB0aGUgZXhwZW5zZSBv ZiBhZGRpdGlvbmFsIGV4ZWN1dGlvbiBvdmVyaGVhZC4KLSAgQXMgbWF0dGVycyBzdGFuZCwgYmUg Y2FyZWZ1bCB0byByZWZsZWN0IGFueSBjaGFuZ2VzIGluIHRoaXMgc2VjdGlvbgotICB0byB0aGUg b3RoZXIgS2Fuamkgc2VjdGlvbiBhYm92ZS4KLSovCi0gICAgaWYgKHRjcyA9PSBUQ19KRVVDKSB7 CQkvKiBJbmNvbWluZyBKYXBhbmVzZSBFVUMgKi8KLQlpbnQgY291bnQgPSAwOwotCXN3aXRjaCAo ZmNzKSB7CQkJLyogRmlsZSBjaGFyYWN0ZXIgc2V0ICovCi0JICBjYXNlIEZDX1NISklTOgkJLyog U2hpZnQtSklTIC0tIGp1c3Qgb3V0cHV0IGl0ICovCi0JICAgIGlmIChzai54X2NoYXJbYnl0ZW9y ZGVyXSkJLyogQnV0IG5vdCBoaWdoIGJ5dGUgaWYgemVybyAqLwotCSAgICAgIGlmICgocmMgPSBw bmJ5dGUoKENIQVIpc2oueF9jaGFyW2J5dGVvcmRlcl0sZm4pKSA8IDApCi0JCXJldHVybihyYyk7 Ci0JICAgIGNvdW50Kys7Ci0JICAgIGlmICgocmMgPSBwbmJ5dGUoKENIQVIpc2oueF9jaGFyWzEt Ynl0ZW9yZGVyXSxmbikpIDwgMCkKLQkgICAgICByZXR1cm4ocmMpOwotCSAgICBjb3VudCsrOwot CSAgICByZXR1cm4oY291bnQpOwotCSAgY2FzZSBGQ19KRVVDOgkJCS8qIEVVQy1KUCAqLwotCSAg ICBldS54X3Nob3J0ID0gc2pfdG9fZXUoc2oueF9zaG9ydCk7IC8qIFNoaWZ0LUpJUyB0byBFVUMg Ki8KLQkgICAgZGVidWcoRjAwMSwieHBuYnl0ZSBGQ19KRVVDIGV1IiwiIixldS54X3Nob3J0KTsK LQkgICAgaWYgKGV1Lnhfc2hvcnQgPT0gMHhmZmZmKSB7IC8qIEJhZCAqLwotCQlpZiAoKHJjID0g cG5ieXRlKFVOSyxmbikpIDwgMCkKLQkJICByZXR1cm4ocmMpOwotCQlyZXR1cm4oMSk7Ci0JICAg IH0gZWxzZSB7CQkJLyogR29vZCAqLwotCQlpbnQgY291bnQgPSAwOwkJLyogV3JpdGUgaGlnaCBi eXRlIGlmIG5vdCB6ZXJvICovCi0JCWlmIChldS54X2NoYXJbYnl0ZW9yZGVyXSkgewotCQkgICAg aWYgKChyYyA9IHBuYnl0ZSgoQ0hBUilldS54X2NoYXJbYnl0ZW9yZGVyXSxmbikpIDwgMCkKLQkJ ICAgICAgcmV0dXJuKHJjKTsKLQkJICAgIGNvdW50Kys7Ci0JCX0KLQkJLyogQWx3YXlzIHdyaXRl IGxvdyBieXRlICovCi0JCWlmICgocmMgPSBwbmJ5dGUoKENIQVIpZXUueF9jaGFyWzEtYnl0ZW9y ZGVyXSxmbikpIDwgMCkKLQkJICByZXR1cm4ocmMpOwotCQljb3VudCsrOwotCQlyZXR1cm4oY291 bnQpOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlIEZDX0pJUzc6CQkJLyogSklTLTcg Ki8KLQkgIGNhc2UgRkNfSkRFQzoJCQkvKiBERUMgS2FuamkgKi8KLQkgICAgZXUueF9zaG9ydCA9 IHNqX3RvX2V1KHNqLnhfc2hvcnQpOyAvKiBTaGlmdC1KSVMgdG8gRVVDICovCi0JICAgIGlmIChl dS54X3Nob3J0ID09IDB4ZmZmZikgeyAvKiBCYWQgKi8KLQkJZGVidWcoRjAwMSwieHBuYnl0ZSBG Q19KSVM3IGJhZCBldSIsIiIsZXUueF9zaG9ydCk7Ci0JCWlmICgocmMgPSBwbmJ5dGUoVU5LLGZu KSkgPCAwKQotCQkgIHJldHVybihyYyk7Ci0JCXJldHVybigxKTsKLQkgICAgfSBlbHNlIHsJCQkv KiBHb29kICovCi0JCWludCBpOwotCQljaGFyIGEgPSBldS54X2NoYXJbMS1ieXRlb3JkZXJdOyAv KiBMb3cgYnl0ZSAqLwotCQlkZWJ1ZyhGMDAxLCJ4cG5ieXRlIEZDX0pJUzcgZXUiLCIiLGV1Lnhf c2hvcnQpOwotCQlpZiAoZXUueF9jaGFyW2J5dGVvcmRlcl0gPT0gMCkgeyAvKiBSb21hbiAqLwot CQkgICAgc3dpdGNoIChqc3RhdGUpIHsKLQkJICAgICAgY2FzZSAxOgkJLyogQ3VycmVudCBzdGF0 ZSBpcyBLYXRha2FuYSAqLwotCQkJamJ1ZlswXSA9IDB4MGY7CS8qIFNJICovCi0JCQlqYnVmWzFd ID0gYTsKLQkJCWp4ID0gMjsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIDI6CQkvKiBDdXJyZW50 IHN0YXRlIGlzIEthbmppICovCi0JCQlqYnVmWzBdID0gMHgxYjsJLyogRVNDICovCi0JCQlqYnVm WzFdID0gMHgyODsJLyogKCAqLwotCQkJamJ1ZlsyXSA9IDB4NGE7CS8qIEogKi8KLQkJCWpidWZb M10gPSBhOwotCQkJanggPSA0OwotCQkJYnJlYWs7Ci0JCSAgICAgIGRlZmF1bHQ6CQkvKiBDdXJy ZW50IHN0YXRlIGlzIFJvbWFuICovCi0JCQlqYnVmWzBdID0gYTsKLQkJCWp4ID0gMTsKLQkJCWJy ZWFrOwotCQkgICAgfQotCQkgICAganN0YXRlID0gMDsJCS8qIE5ldyBzdGF0ZSBpcyBSb21hbiAq LwotCQl9IGVsc2UgaWYgKGV1LnhfY2hhcltieXRlb3JkZXJdID09IDB4OGUpIHsgLyogS2FuYSAq LwotCQkgICAganggPSAwOwotCQkgICAgc3dpdGNoIChqc3RhdGUpIHsKLQkJICAgICAgY2FzZSAy OgkJICAgLyogZnJvbSBLYW5qaSAqLwotCQkJamJ1ZltqeCsrXSA9IDB4MWI7IC8qIEVTQyAqLwot CQkJamJ1ZltqeCsrXSA9IDB4Mjg7IC8qICggKi8KLQkJCWpidWZbangrK10gPSAweDRhOyAvKiBK ICovCi0JCSAgICAgIGNhc2UgMDoJCSAgIC8qIGZyb20gUm9tYW4gKi8KLQkJCWpidWZbangrK10g PSAweDBlOyAvKiBTTyAqLwotCQkgICAgICBkZWZhdWx0OgkJICAgLyogU3RhdGUgaXMgYWxyZWFk eSBLYW5hKi8KLQkJCWpidWZbangrK10gPSAoYSAmIDB4N2YpOyAvKiBhbmQgdGhlIGNoYXIgKi8K LQkJCWJyZWFrOwotCQkgICAgfQotCQkgICAganN0YXRlID0gMTsJCS8qIE5ldyBzdGF0ZSBpcyBL YXRha2FuYSAqLwotCQl9IGVsc2UgewkJLyogS2FuamkgKi8KLQkJICAgIGp4ID0gMDsKLQkJICAg IHN3aXRjaCAoanN0YXRlKSB7Ci0JCSAgICAgIGNhc2UgMToJCS8qIEN1cnJlbnQgc3RhdGUgaXMg S2F0YWthbmEgKi8KLQkJCWpidWZbangrK10gPSAweDBmOyAvKiBTSSAgKi8KLQkJICAgICAgY2Fz ZSAwOgkJLyogQ3VycmVudCBzdGF0ZSBpcyBSb21hbiAqLwotCQkJamJ1ZltqeCsrXSA9IDB4MWI7 IC8qIEVTQyAqLwotCQkJamJ1ZltqeCsrXSA9IDB4MjQ7IC8qICQgICAqLwotCQkJamJ1ZltqeCsr XSA9IDB4NDI7IC8qIEIgICAqLwotCQkgICAgICBkZWZhdWx0OgkJLyogQ3VycmVudCBzdGF0ZSBp cyBhbHJlYWR5IEthbmppICovCi0JCQlqYnVmW2p4KytdID0gZXUueF9jaGFyW2J5dGVvcmRlcl0g JiAweDdmOwotCQkJamJ1ZltqeCsrXSA9IGV1LnhfY2hhclsxLWJ5dGVvcmRlcl0gJiAweDdmOwot CQkJYnJlYWs7Ci0JCSAgICB9Ci0JCSAgICBqc3RhdGUgPSAyOwkJLyogU2V0IHN0YXRlIHRvIEth bmppICovCi0JCX0KLQkJZm9yIChpID0gMDsgaSA8IGp4OyBpKyspIC8qIE91dHB1dCB0aGUgcmVz dWx0ICovCi0JCSAgaWYgKChyYyA9IHBuYnl0ZShqYnVmW2ldLGZuKSkgPCAwKQotCQkgICAgcmV0 dXJuKHJjKTsKLQkJcmV0dXJuKGp4KTsJCS8qIFJldHVybiBpdHMgbGVuZ3RoICovCi0JICAgIH0K LQkgIGRlZmF1bHQ6Ci0JICAgIGlmIChzai54X3Nob3J0IDwgMHg4MCkKLQkgICAgICByZXR1cm4o c2oueF9zaG9ydCk7Ci0JICAgIGVsc2UKLQkgICAgICByZXR1cm4oJz8nKTsKLQl9Ci0gICAgfQot I2VuZGlmIC8qIEtBTkpJICovCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotICAgIGRlYnVnKEYxMDAs InhwbmJ5dGUgQkFEIEZBTExUSFJVIiwiIiwwKTsKLSAgICByZXR1cm4oLTEpOwotfQotCi0jaWZu ZGVmIE5PWEZFUgotCi0vKiAgRCBFIEMgTyBEIEUgIC0tICBLZXJtaXQgRGF0YS1wYWNrZXQgZGVj b2RlciAgKi8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWRlY29kZShDSEFSICpidWYsIGludCAo KmZuKShjaGFyKSwgaW50IHhsYXRlKQotI2Vsc2UKLWRlY29kZShidWYsZm4seGxhdGUpIHJlZ2lz dGVyIENIQVIgKmJ1ZjsgcmVnaXN0ZXIgaW50ICgqZm4pKCk7IGludCB4bGF0ZTsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotLyogZGVjb2RlICovIHsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQg YSwgYTcsIGE4LCBiODsgLyogVmFyaW91cyBjb3BpZXMgb2YgY3VycmVudCBjaGFyICovCi0gICAg aW50IHQ7CQkJCS8qIEludCB2ZXJzaW9uIG9mIGNoYXJhY3RlciAqLwotICAgIGludCBzc2ZsZzsJ CQkJLyogQ2hhcmFjdGVyIHdhcyBzaW5nbGUtc2hpZnRlZCAqLwotICAgIGludCBjY3BmbGc7CQkJ CS8qIEZvciBDdHJsLXVucHJlZml4aW5nIHN0YXRzICovCi0gICAgaW50IGxlbjsKLSAgICBsb25n IHo7Ci0gICAgQ0hBUiBjOwotLyoKLSAgQ2F0Y2ggdGhlIGNhc2UgaW4gd2hpY2ggd2UgYXJlIGFz a2VkIHRvIGRlY29kZSBpbnRvIGEgZmlsZSB0aGF0IGlzIG5vdCBvcGVuLAotICBmb3IgZXhhbXBs ZSwgaWYgdGhlIHVzZXIgaW50ZXJydXB0ZWQgdGhlIHRyYW5zZmVyLCBidXQgdGhlIG90aGVyIEtl cm1pdAotICBrZWVwcyBzZW5kaW5nLgotKi8KLSAgICBpZiAoKGN4c2VlbiB8fCBjenNlZW4gfHwg ZGlzY2FyZCkgJiYgKGZuID09IHB1dGZpbCkpCi0gICAgICByZXR1cm4oMCk7Ci0KLSNpZmRlZiBD T01NRU5UCi0jaWZkZWYgQ0tUVU5JTkcKLSAgICBpZiAoYmluYXJ5ICYmICFwYXJpdHkpCi0gICAg ICByZXR1cm4oYmRlY29kZShidWYsZm4pKTsKLSNlbmRpZiAvKiBDS1RVTklORyAqLwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSAgICBkZWJ1ZyhGMTAwLCJERUNPREUiLCIiLDApOwotCi0gICAgeGRi dWYgPSBidWY7CQkJLyogTWFrZSBnbG9iYWwgY29weSBvZiBwb2ludGVyLiAqLwotICAgIHJwdCA9 IDA7CQkJCS8qIEluaXRpYWxpemUgcmVwZWF0IGNvdW50LiAqLwotCi0gICAgbGVuID0gcmxuOwkJ CQkvKiBOdW1iZXIgb2YgYnl0ZXMgaW4gZGF0YSBmaWVsZCAqLwotICAgIHdoaWxlIChsZW4gPiAw KSB7CQkJLyogTG9vcCBmb3IgZWFjaCBieXRlICovCi0gICAgICAgIGEgPSAqeGRidWYrKyAmIDB4 ZmY7CQkvKiBHZXQgbmV4dCBjaGFyYWN0ZXIgKi8KLQlsZW4tLTsKLQlpZiAoYSA9PSBycHRxICYm IHJwdGZsZykgewkvKiBHb3QgYSByZXBlYXQgcHJlZml4PyAqLwotCSAgICBycHQgPSB4dW5jaGFy KCp4ZGJ1ZisrICYgMHhGRik7IC8qIFllcywgZ2V0IHRoZSByZXBlYXQgY291bnQsICovCi0JICAg IHJwdG4gKz0gcnB0OwotCSAgICBhID0gKnhkYnVmKysgJiAweEZGOwkvKiBhbmQgZ2V0IHRoZSBw cmVmaXhlZCBjaGFyYWN0ZXIuICovCi0JICAgIGxlbiAtPSAyOwotCX0KLQliOCA9IGxzc3RhdGUg PyAwMjAwIDogMDsJLyogOHRoLWJpdCB2YWx1ZSBmcm9tIFNISUZULVNUQVRFICovCi0JaWYgKGVi cWZsZyAmJiBhID09IGVicSkgewkvKiBIYXZlIDh0aC1iaXQgcHJlZml4PyAqLwotCSAgICBiOCBe PSAwMjAwOwkJCS8qIFllcywgaW52ZXJ0IHRoZSA4dGggYml0J3MgdmFsdWUsICovCi0JICAgIHNz ZmxnID0gMTsJCQkvKiByZW1lbWJlciB3ZSBkaWQgdGhpcywgKi8KLQkgICAgYSA9ICp4ZGJ1Zisr ICYgMHhGRjsJLyogYW5kIGdldCB0aGUgcHJlZml4ZWQgY2hhcmFjdGVyLiAqLwotCSAgICBsZW4t LTsKLQl9IGVsc2Ugc3NmbGcgPSAwOwotCWNjcGZsZyA9IDA7Ci0JaWYgKGEgPT0gY3RscSkgewkJ LyogSWYgY29udHJvbCBwcmVmaXgsICovCi0JICAgIGEgID0gKnhkYnVmKysgJiAweEZGOwkvKiBn ZXQgaXRzIG9wZXJhbmQgKi8KLQkgICAgbGVuLS07Ci0JICAgIGE3ID0gYSAmIDB4N0Y7CQkvKiBh bmQgaXRzIGxvdyA3IGJpdHMuICovCi0JICAgIGlmICgoYTcgPj0gMDEwMCAmJiBhNyA8PSAwMTM3 KSB8fCBhNyA9PSAnPycpIHsgLyogQ29udHJvbGxpZnkgKi8KLQkJYSA9IGN0bChhKTsJCS8qIGlm IGluIGNvbnRyb2wgcmFuZ2UuICovCi0JCWE3ID0gYSAmIDB4N0Y7Ci0JCWNjcGZsZyA9IDE7CQkv KiBOb3RlIHRoYXQgd2UgZGlkIHRoaXMgKi8KLQkJY2NwKys7CQkJLyogQ291bnQgZm9yIHN0YXRz ICovCi0JICAgIH0KLQl9IGVsc2UgYTcgPSBhICYgMHg3ZjsJCS8qIE5vdCBjb250cm9sIHF1b3Rl ICovCi0JaWYgKGE3IDwgMzIgfHwgYTcgPT0gMTI3KSB7CS8qIENvbnRyb2wgY2hhcmFjdGVyPyAq LwotCSAgICBpZiAoIWNjcGZsZykgY2N1Kys7CQkvKiBBIGJhcmUgb25lLCBjb3VudCBpdCAqLwot CSAgICBpZiAobHNjYXB1KSB7CQkvKiBJZiBkb2luZyBsb2NraW5nIHNoaWZ0cy4uLiAqLwotCQlp ZiAobHNzdGF0ZSkJCS8qIElmIFNISUZURUQgKi8KLQkJICBhOCA9IChhICYgfmI4KSAmIDB4RkY7 IC8qIEludmVydCBtZWFuaW5nIG9mIDh0aCBiaXQgKi8KLQkJZWxzZQkJCS8qIG90aGVyd2lzZSAq LwotCQkgIGE4ID0gYSB8IGI4OwkJLyogT1IgaW4gOHRoIGJpdCAqLwotCQkvKiBJZiB3ZSdyZSBu b3QgaW4gYSBxdW90ZWQgc2VxdWVuY2UgKi8KLQkJaWYgKCFsc3F1b3RlICYmICghbHNzdGF0ZSB8 fCAhc3NmbGcpKSB7Ci0JCSAgICBpZiAoYTggPT0gRExFKSB7CS8qIENoZWNrIGZvciBETEUgcXVv dGUgKi8KLQkJCWxzcXVvdGUgPSAxOwkvKiBwcmVmaXhlZCBieSBzaW5nbGUgc2hpZnQhICovCi0J CQljb250aW51ZTsKLQkJICAgIH0gZWxzZSBpZiAoYTggPT0gU08pIHsgLyogQ2hlY2sgZm9yIFNo aWZ0LU91dCAqLwotCQkJbHNzdGF0ZSA9IDE7CS8qIFNISUZULVNUQVRFID0gU0hJRlRFRCAqLwot CQkJY29udGludWU7Ci0JCSAgICB9IGVsc2UgaWYgKGE4ID09IFNJKSB7IC8qIG9yIFNoaWZ0LUlu ICovCi0JCQlsc3N0YXRlID0gMDsJLyogU0hJRlQtU1RBVEUgPSBVTlNISUZURUQgKi8KLQkJCWNv bnRpbnVlOwotCQkgICAgfQotCQl9IGVsc2UgbHNxdW90ZSA9IDA7Ci0JICAgIH0KLQl9Ci0JYSB8 PSBiODsJCQkvKiBPUiBpbiB0aGUgOHRoIGJpdCAqLwotCWlmIChycHQgPT0gMCkgcnB0ID0gMTsJ CS8qIElmIG5vIHJlcGVhdHMsIHRoZW4gb25lICovCi0jaWZuZGVmIE5PQ1NFVFMKLQlpZiAoIWJp bmFyeSkgewkJCS8qIElmIGluIHRleHQgbW9kZSwgKi8KLQkgICAgaWYgKHRjaGFyc2V0ICE9IFRD X1VDUzIpIHsKLQkJaWYgKGZlb2wgJiYgYSA9PSBDUikJLyogQ29udmVydCBDUkxGIHRvIG5ld2xp bmUgY2hhciAqLwotCQkgIGNvbnRpbnVlOwotCQlpZiAoZmVvbCAmJiBhID09IExGKQotCQkgIGEg PSBmZW9sOwotCSAgICB9Ci0JICAgIGlmICh4bGF0eXBlID09IFhMQV9CWVRFKQkvKiBCeXRlLWZv ci1ieXRlIC0gZG8gaXQgbm93ICovCi0JICAgICAgaWYgKHhsYXRlICYmIHJ4KSBhID0gKCpyeCko KENIQVIpIGEpOwotICAgIAl9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCS8qIChQV1ApIERlY29k aW5nIHNwZWVkdXAgdmlhIGJ1ZmZlcmVkIG91dHB1dCBhbmQgYSBtYWNyby4uLiAqLwotCWlmIChm biA9PSBwdXRmaWwpIHsKLQkgICAgZm9yICg7IHJwdCA+IDA7IHJwdC0tKSB7CS8qIE91dHB1dCB0 aGUgY2hhciBSUFQgdGltZXMgKi8KLSNpZmRlZiBDQUxJQlJBVEUKLQkJaWYgKGNhbGlicmF0ZSkg ewotCQkgICAgZmZjKys7Ci0JCSAgICBjb250aW51ZTsKLQkJfQotI2VuZGlmIC8qIENBTElCUkFU RSAqLwotCi0vKiBOb3RlOiBUaGUgVW5pY29kZSBhbmQgS2Fuamkgc2VjdGlvbnMgY2FuIHByb2Jh Ymx5IGJlIGNvbWJpbmVkIG5vdzsgKi8KLS8qIHRoZSBVbmljb2RlIG1ldGhvZCAoeHBuYnl0ZSgp KSBjb3ZlcnMgS2FuamkgdG9vLiAqLwotCi0jaWZkZWYgVU5JQ09ERQotCQlpZiAoIWJpbmFyeSAm JiB4bGF0eXBlID09IFhMQV9VTklDT0RFKQotCQkgIHQgPSB4cG5ieXRlKCh1bnNpZ25lZCkoKHVu c2lnbmVkKWEgJiAweGZmKSwKLQkJCSAgICAgIHRjaGFyc2V0LAotCQkJICAgICAgZmNoYXJzZXQs Ci0JCQkgICAgICBmbgotCQkJICAgICAgKTsKLQkJZWxzZQotI2VuZGlmIC8qIFVOSUNPREUgKi8K LSNpZmRlZiBLQU5KSQotCQlpZiAoIWJpbmFyeSAmJiB0Y2hhcnNldCA9PSBUQ19KRVVDICYmCi0J CSAgICBmY2hhcnNldCAhPSBGQ19KRVVDKSB7IC8qIFRyYW5zbGF0aW5nIGZyb20gSi1FVUMgKi8K LQkJICAgIGlmICghZmZjKSB4a2FuamYoKTsKLQkJICAgIGlmICh4a2FuamkoYSxmbikgPCAwKSAg LyogdG8gc29tZXRoaW5nIGVsc2U/ICovCi0JCSAgICAgIHJldHVybigtMSk7Ci0JCSAgICBlbHNl IHQgPSAxOwotCQl9IGVsc2UKLSNlbmRpZiAvKiBLQU5KSSAqLwotCQl7Ci0jaWZkZWYgT1MyCi0J CSAgICAgIGlmICh4ZmxnICYmICFyZW1maWxlKSB7IC8qIFdyaXRlIHRvIHZpcnR1YWwgc2NyZWVu ICovCi0JCQkgIGNoYXIgX2E7Ci0JCQkgIF9hID0gYSAmIGZtYXNrOwotCQkJICB0ID0gY29ub2Mo X2EpOwotCQkJICBpZiAodCA8IDEpCi0JCQkgICAgdCA9IC0xOwotCQkgICAgICB9IGVsc2UKLSNl bmRpZiAvKiBPUzIgKi8KLQkJCXQgPSB6bWNob3V0KGEgJiBmbWFzayk7IC8qIHptY2hvdXQgaXMg YSBtYWNybyAqLwotCQl9Ci0JCWlmICh0IDwgMCkgewotCQkgICAgZGVidWcoRjEwMSwiZGVjb2Rl IHdyaXRlIGVycm5vIiwiIixlcnJubyk7Ci0JCSAgICByZXR1cm4oLTEpOwotCQl9Ci0jaWZkZWYg VU5JQ09ERQotCQlpZiAoeGxhdHlwZSAhPSBYTEFfVU5JQ09ERSB8fCBiaW5hcnkpIHsKLQkJICAg IGZmYysrOwkJLyogQ291bnQgdGhlIGNoYXJhY3RlciAqLwotCQkgICAgaWYgKGRvY3JjICYmICF4 ZmxnICYmICFyZW1maWxlKSB7IC8qIFVwZGF0ZSBmaWxlIENSQyAqLwotCQkJYyA9IGE7CQkvKiBG b3JjZSBjb252ZXJzaW9uIHRvIHVuc2lnbmVkIGNoYXIgKi8KLQkJCXogPSBjcmMxNiBeIChsb25n KWM7Ci0JCQljcmMxNiA9IChjcmMxNiA+PiA4KSBeCi0JCQkgIChjcmN0YVsoeiAmIDB4RjApID4+ IDRdIF4gY3JjdGJbeiAmIDB4MEZdKTsKLQkJICAgIH0KLQkJfQotI2VuZGlmIC8qIFVOSUNPREUg Ki8KLQkgICAgfQotCX0gZWxzZSB7CQkJLyogT3V0cHV0IHRvIHNvbWV0aGluZyBlbHNlLiAqLwot CSAgICBhICY9IGZtYXNrOwkJCS8qIEFwcGx5IGZpbGUgbWFzayAqLwotCSAgICBmb3IgKDsgcnB0 ID4gMDsgcnB0LS0pIHsJLyogT3V0cHV0IHRoZSBjaGFyIFJQVCB0aW1lcyAqLwotI2lmZGVmIENB TElCUkFURQotCQlpZiAoY2FsaWJyYXRlKSB7Ci0JCSAgICBmZmMrKzsKLQkJICAgIGNvbnRpbnVl OwotCQl9Ci0jZW5kaWYgLyogQ0FMSUJSQVRFICovCi0JCWlmICgoKmZuKSgoY2hhcikgYSkgPCAw KSByZXR1cm4oLTEpOyAvKiBTZW5kIHRvIG91dHB1dCBmdW5jLiAqLwotCSAgICB9Ci0JfQotI2lm ZGVmIENLX0NUUkxaCi0JbGFzdGNoYXIgPSBhOwotI2VuZGlmIC8qIENLX0NUUkxaICovCi0gICAg fQotICAgIHJldHVybigwKTsKLX0KLQotLyogIEcgRSBUIFAgSyBUIC0tIEZpbGwgYSBwYWNrZXQg ZGF0YSBmaWVsZCAgKi8KLQotLyoKLSAgR2V0cyBjaGFyYWN0ZXJzIGZyb20gdGhlIGN1cnJlbnQg c291cmNlIC0tIGZpbGUgb3IgbWVtb3J5IHN0cmluZy4KLSAgRW5jb2RlcyB0aGUgZGF0YSBpbnRv IHRoZSBwYWNrZXQsIGZpbGxpbmcgdGhlIHBhY2tldCBvcHRpbWFsbHkuCi0gIFNldCBmaXJzdCA9 IDEgd2hlbiBjYWxsaW5nIGZvciB0aGUgZmlyc3QgdGltZSBvbiBhIGdpdmVuIGlucHV0IHN0cmVh bQotICAoc3RyaW5nIG9yIGZpbGUpLgotCi0gIENhbGwgd2l0aDoKLSAgICBidWZtYXggLS0gY3Vy cmVudCBzZW5kLXBhY2tldCBzaXplCi0gICAgeGxhdGUgIC0tIGZsYWc6IDAgdG8gc2tpcCBjaGFy YWN0ZXItc2V0IHRyYW5zbGF0aW9uLCAxIHRvIHRyYW5zbGF0ZQotCi0gIFVzZXMgZ2xvYmFsIHZh cmlhYmxlczoKLSAgICB0ICAgICAtLSBjdXJyZW50IGNoYXJhY3Rlci4KLSAgICBmaXJzdCAtLSBm bGFnOiAxIHRvIHN0YXJ0IHVwLCAwIGZvciBpbnB1dCBpbiBwcm9ncmVzcywgLTEgZm9yIEVPRi4K LSAgICBuZXh0ICAtLSBuZXh0IGNoYXJhY3RlciAobm90IHVzZWQgYW55IG1vcmUpLgotICAgIGRh dGEgIC0tIHBvaW50ZXIgdG8gdGhlIHBhY2tldCBkYXRhIGJ1ZmZlci4KLSAgICBzaXplICAtLSBu dW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgZGF0YSBidWZmZXIuCi0gICAgbWVtc3RyIC0gZmxh ZyB0aGF0IGlucHV0IGlzIGNvbWluZyBmcm9tIGEgbWVtb3J5IHN0cmluZyBpbnN0ZWFkIG9mIGEg ZmlsZS4KLSAgICBtZW1wdHIgLSBwb2ludGVyIHRvIHN0cmluZyBpbiBtZW1vcnkuCi0gICAgKCpz eCkoKSAgY2hhcmFjdGVyIHNldCB0cmFuc2xhdGlvbiBmdW5jdGlvbgotCi0gIFJldHVybnM6Ci0g ICAgVGhlIHNpemUgYXMgdmFsdWUgb2YgdGhlIGZ1bmN0aW9uLCBhbmQgYWxzbyBzZXRzIGdsb2Jh bCAic2l6ZSIsCi0gICAgYW5kIGZpbGxzIChhbmQgbnVsbC10ZXJtaW5hdGVzKSB0aGUgZ2xvYmFs IGRhdGEgYXJyYXkuCi0gICAgUmV0dXJuczoKLSAgICAgIDAgb24gRU9GLgotICAgICAtMSBvbiBm YXRhbCAoaW50ZXJuYWwpIGVycm9yLgotICAgICAtMyBvbiB0aW1lb3V0IChlLmcuIHdoZW4gcmVh ZGluZyBkYXRhIGZyb20gYSBwaXBlKS4KLQotICBSZXdyaXR0ZW4gYnkgUGF1bCBXLiBQbGFjZXdh eSAoUFdQKSBvZiBPaGlvIFN0YXRlIFVuaXZlcnNpdHksIE1hcmNoIDE5ODkuCi0gIEluY29ycG9y YXRlcyBvbGQgZ2V0Y2h4KCkgYW5kIGVuY29kZSgpIGlubGluZSB0byByZWR1Y2UgZnVuY3Rpb24g Y2FsbHMsCi0gIHVzZXMgYnVmZmVyZWQgaW5wdXQgZm9yIG11Y2gtaW1wcm92ZWQgZWZmaWNpZW5j eSwgYW5kIGNsZWFycyB1cCBzb21lCi0gIGNvbmZ1c2lvbiB3aXRoIGxpbmUgdGVybWluYXRpb24g KENSTEYgdnMgTEYgdnMgQ1IpLgotCi0gIFJld3JpdHRlbiBhZ2FpbiBieSBGcmFuayBkYSBDcnV6 IHRvIGluY29ycG9yYXRlIGxvY2tpbmcgc2hpZnQgbWVjaGFuaXNtLAotICBNYXkgMTk5MS4gIEFu ZCBhZ2FpbiBpbiAxOTk4IGZvciBlZmZpY2llbmN5LCBldGMsIHdpdGggYSBzZXBhcmF0ZQotICBi Z2V0cGt0KCkgc3BsaXQgb3V0IGZvciBiaW5hcnktbW9kZSBuby1wYXJpdHkgdHJhbnNmZXJzLgot Ki8KLQotLyoKLSAgTm90ZTogU2VwYXJhdGUgS2Fuamkgc3VwcG9ydCBkYXRlcyBmcm9tIGNpcmNh IDE5OTEgYW5kIG5vdyAoMTk5OSkgY2FuIG1vc3QKLSAgbGlrZWx5IGJlIGNvbWJpbmVkIHdpdGgg dGhlIHRoZSBVbmljb2RlIHN1cHBvcnQ6IHRoZSB4Z25ieXRlKCkveHBuYnl0ZSgpCi0gIG1lY2hh bmlzbSB3b3JrcyBmb3IgYm90aCBVbmljb2RlIGFuZCBLYW5qaS4KLSovCi0jaWZkZWYgS0FOSkkK LWludAota2dldGYoCi0jaWZkZWYgQ0tfQU5TSUMKLSAgICAgIFZPSUQKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotICAgICAgKSB7Ci0gICAgaWYgKGZ1bmNzdHIpCi0gICAgICByZXR1cm4oKCpmdW5j cHRyKSgpKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oem1pbmNoYXIoKSk7Ci19Ci0KLWludAot a2dldG0oCi0jaWZkZWYgQ0tfQU5TSUMKLSAgICAgIFZPSUQKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotICAgICAgKSB7Ci0gICAgaW50IHg7Ci0gICAgaWYgKCh4ID0gKm1lbXB0cisrKSkgcmV0dXJu KHgpOwotICAgIGVsc2UgcmV0dXJuKC0xKTsKLX0KLSNlbmRpZiAvKiBLQU5KSSAqLwotCi0vKgot ICBMb29rYWhlYWQgZnVuY3Rpb24gdG8gZGVjaWRlIHdoZXRoZXIgbG9ja2luZyBzaGlmdCBpcyB3 b3J0aCBpdC4gIExvb2tzIGF0Ci0gIHRoZSBuZXh0IGZvdXIgaW5wdXQgY2hhcmFjdGVycyB0byBz ZWUgaWYgYWxsIG9mIHRoZWlyIDh0aCBiaXRzIG1hdGNoIHRoZQotICBhcmd1bWVudC4gIENhbGwg d2l0aCAwIG9yIDAyMDAuICBSZXR1cm5zIDEgb24gbWF0Y2gsIDAgaWYgdGhleSBkb24ndCBtYXRj aC4KLSAgSWYgd2UgZG9uJ3QgaGFwcGVuIHRvIGhhdmUgYXQgbGVhc3QgNCBtb3JlIGNoYXJhY3Rl cnMgd2FpdGluZyBpbiB0aGUgaW5wdXQKLSAgYnVmZmVyLCByZXR1cm5zIDEuICBOb3RlIHRoYXQg emlucHRyIHBvaW50cyB0d28gY2hhcmFjdGVycyBhaGVhZCBvZiB0aGUKLSAgY3VycmVudCBjaGFy YWN0ZXIgYmVjYXVzZSBvZiByZXBlYXQtY291bnQgbG9va2FoZWFkLgotKi8KLWludAotbHNsb29r KGIpIHVuc2lnbmVkIGludCBiOyB7CQkvKiBMb2NraW5nIFNoaWZ0IExvb2thaGVhZCAqLwotICAg IGludCBpOwotICAgIGlmICh6aW5jbnQgPCAzKQkJCS8qIElmIG5vdCBlbm91Z2ggY2hhcnMgaW4g YnVmZmVyLCAqLwotICAgICAgcmV0dXJuKDEpOwkJCS8qIGZvcmNlIHNoaWZ0LXN0YXRlIHN3aXRj aC4gKi8KLSAgICBiICY9IDAyMDA7CQkJCS8qIEZvcmNlIGFyZ3VtZW50IHRvIHByb3BlciBmb3Jt LiAqLwotICAgIGZvciAoaSA9IC0xOyBpIDwgMzsgaSsrKQkJLyogTG9vayBhdCBuZXh0IDUgY2hh cmFjdGVycyB0byAqLwotICAgICAgaWYgKCgoKih6aW5wdHIraSkpICYgMDIwMCkgIT0gYikJLyog c2VlIGlmIGFsbCB0aGVpciA4dGggYml0cyBtYXRjaC4gICovCi0JcmV0dXJuKDApOwkJCS8qIFRo ZXkgZG9uJ3QuICovCi0gICAgcmV0dXJuKDEpOwkJCQkvKiBUaGV5IGRvLiAqLwotfQotCi0vKiBS b3V0aW5lIHRvIGNvbXB1dGUgbWF4aW11bSBkYXRhIGxlbmd0aCBmb3IgcGFja2V0IHRvIGJlIGZp bGxlZCAqLwotCi1pbnQKLW1heGRhdGEoKSB7CQkJCS8qIEdldCBtYXhpbXVtIGRhdGEgbGVuZ3Ro ICovCi0gICAgaW50IG4sIGxlbjsKLSAgICBkZWJ1ZyhGMTAxLCJtYXhkYXRhIHNwc2l6IDEiLCIi LHNwc2l6KTsKLSAgICBpZiAoc3BzaXogPCAwKQkJCS8qIEhvdyBjb3VsZCB0aGlzIGhhcHBlbj8g Ki8KLSAgICAgIHNwc2l6ID0gRFNQU0laOwotICAgIGRlYnVnKEYxMDEsIm1heGRhdGEgc3BzaXog MiIsIiIsc3BzaXopOwotICAgIG4gPSBzcHNpeiAtIDU7CQkJLyogU3BhY2UgZm9yIERhdGEgYW5k IENoZWNrc3VtICovCi0gICAgaWYgKG4gPiA5MiAmJiBuIDwgOTYpIG4gPSA5MjsJLyogIlNob3J0 IiBMb25nIHBhY2tldHMgZG9uJ3QgcGF5ICovCi0gICAgaWYgKG4gPiA5MiAmJiBscGNhcHUgPT0g MCkJCS8qIElmIGxvbmcgcGFja2V0cyBuZWVkZWQsICovCi0gICAgICBuID0gOTI7CQkJCS8qIG1h a2Ugc3VyZSB0aGV5J3ZlIGJlZW4gbmVnb3RpYXRlZCAqLwotICAgIGxlbiA9IG4gLSBiY3RsOwkJ CS8qIFNwYWNlIGZvciBkYXRhICovCi0gICAgaWYgKG4gPiA5MikgbGVuIC09IDM7CQkvKiBMb25n IHBhY2tldCBuZWVkcyBoZWFkZXIgY2hrc3VtICovCi0gICAgZGVidWcoRjEwMSwibWF4ZGF0YSBs ZW4gMSIsIiIsbGVuKTsKLSAgICBpZiAobGVuIDwgMCkgbGVuID0gMTA7Ci0gICAgZGVidWcoRjEw MSwibWF4ZGF0YSBsZW4gMiIsIiIsbGVuKTsKLSAgICByZXR1cm4obGVuKTsKLX0KLQotc3RhdGlj IENIQVIgbGVmdG92ZXJbOV0gPSB7ICdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcs J1wwJywnXDAnIH07Ci1zdGF0aWMgaW50IG5sZWZ0ID0gMDsKLQotI2lmZGVmIENLVFVOSU5HCi0v KgotICBXaGVuIENLVFVOSU5HIGlzIGRlZmluZWQgd2UgdXNlIHRoaXMgc3BlY2lhbCB0cmltbWVk LWRvd24gdmVyc2lvbiBvZiBnZXRwa3QKLSAgdG8gc3BlZWQgdXAgYmluYXJ5LW1vZGUgbm8tcGFy aXR5IHRyYW5zZmVycy4gIFdoZW4gQ0tUVU5JTkcgaXMgbm90IGRlZmluZWQsCi0gIG9yIGZvciB0 ZXh0LW1vZGUgb3IgcGFyaXR5IHRyYW5zZmVycywgd2UgdXNlIHRoZSByZWd1bGFyIGdldHBrdCgp IGZ1bmN0aW9uLgotICBDYWxsIGp1c3QgbGlrZSBnZXRwa3QoKSBidXQgdGVzdCBmaXJzdCBmb3Ig dHJhbnNmZXIgbW9kZSBhbmQgcGFyaXR5LiAgTk9URToKLSAgVGhpcyByb3V0aW5lIGlzIG9ubHkg dG8gYmUgY2FsbGVkIHdoZW4gc2VuZGluZyBhIHJlYWwgZmlsZSAtLSBub3QgZm9yCi0gIGZpbGVu YW1lcywgc2VydmVyIHJlc3BvbnNlcywgZXRjLCBiZWNhdXNlIGl0IG9ubHkgcmVhZHMgZnJvbSB0 aGUgaW5wdXQgZmlsZS4KLSAgU2VlIGdldHBrdCgpIGZvciBtb3JlIGRldGFpbGVkIGNvbW1lbnRh cnkuCi0qLwotc3RhdGljIGludAotYmdldHBrdChidWZtYXgpIGludCBidWZtYXg7IHsKLSAgICBy ZWdpc3RlciBDSEFSIHJ0ID0gdCwgcm5leHQ7Ci0gICAgcmVnaXN0ZXIgQ0hBUiAqZHAsICpvZHAs ICpwMSwgKnAyOwotICAgIHJlZ2lzdGVyIGludCB4ID0gMCwgYTc7Ci0KLSAgICBDSEFSIHh4cmMs IHh4Y3E7CQkJLyogUGllY2VzIG9mIHByZWZpeGVkIHNlcXVlbmNlICovCi0KLSAgICBsb25nIHo7 CQkJCS8qIEEgbG9uZyB3b3JrZXIgKGZvciBDUkMpICovCi0KLSAgICBpZiAoIWJpbmFyeSB8fCBw YXJpdHkgfHwgbWVtc3RyKQkvKiBKVVNUIElOIENBU0UgY2FsbGVyIGRpZG4ndCB0ZXN0ICovCi0g ICAgICByZXR1cm4oZ2V0cGt0KGJ1Zm1heCwhYmluYXJ5KSk7Ci0KLSAgICBpZiAoIWRhdGEpIHsK LQlkZWJ1ZyhGMTAwLCJTRVJJT1VTIEVSUk9SOiBiZ2V0cGt0IGRhdGEgPT0gTlVMTCIsIiIsMCk7 Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZHAgPSBkYXRhOwkJCQkvKiBQb2ludCB0byBwYWNr ZXQgZGF0YSBidWZmZXIgKi8KLSAgICBzaXplID0gMDsJCQkJLyogQW5kIGluaXRpYWxpemUgaXRz IHNpemUgKi8KLSAgICBidWZtYXggPSBtYXhkYXRhKCk7CQkJLyogR2V0IG1heGltdW0gZGF0YSBs ZW5ndGggKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykKLSAgICAgIGRlYnVnKEYx MDEsImJnZXRwa3QgYnVmbWF4IiwiIixidWZtYXgpOwotI2VuZGlmIC8qIERFQlVHICovCi0KLSAg ICBpZiAoZmlyc3QgPT0gMSkgewkJCS8qIElmIGZpcnN0IGNoYXJhY3RlciBvZiB0aGlzIGZpbGUu LiAqLwotCWZmYyA9IChDS19PRkZfVCkwOwkJLyogcmVzZXQgZmlsZSBjaGFyYWN0ZXIgY291bnRl ciAqLwotI2lmZGVmIENPTU1FTlQKLS8qIE1vdmVkIHRvIGJlbG93ICovCi0JZmlyc3QgPSAwOwkJ CS8qIE5leHQgY2hhcmFjdGVyIHdvbid0IGJlIGZpcnN0ICovCi0jZW5kaWYgLyogQ09NTUVOVCAq LwotCSpsZWZ0b3ZlciA9ICdcMCc7CQkvKiBEaXNjYXJkIGFueSBpbnRlcnJ1cHRlZCBsZWZ0b3Zl cnMgKi8KLQlubGVmdCA9IDA7Ci0KLQkvKiBHZXQgZmlyc3QgY2hhcmFjdGVyIG9mIGZpbGUgaW50 byBydCwgd2F0Y2hpbmcgb3V0IGZvciBudWxsIGZpbGUgKi8KLQotI2lmZGVmIENBTElCUkFURQot CWlmIChjYWxpYnJhdGUpIHsKLSNpZmRlZiBOT1JBTkRPTQotCSAgICBydCA9IDE3OwotI2Vsc2UK LQkgICAgcnQgPSBjYWxfYVtyYW5kKCkgJiAweGZmXTsKLSNlbmRpZiAvKiBOT1JBTkRPTSAqLwot CSAgICBmaXJzdCA9IDA7Ci0JfSBlbHNlCi0jZW5kaWYgLyogQ0FMSUJSQVRFICovCi0KLQlpZiAo KHggPSB6bWluY2hhcigpKSA8IDApIHsJLyogRU9GIG9yIGVycm9yICovCi0JICAgIGlmICh4ID09 IC0zKSB7CQkvKiBUaW1lb3V0LiAqLwotCQlzaXplID0gKGRwIC0gZGF0YSk7Ci0JCWRlYnVnKEYx MDEsImJnZXRwa3QgdGltZW91dCBzaXplIiwiIixzaXplKTsKLQkJcmV0dXJuKChzaXplID09IDAp ID8geCA6IHNpemUpOwotCSAgICB9Ci0JICAgIGZpcnN0ID0gLTE7Ci0JICAgIHNpemUgPSAwOwot CSAgICBpZiAoeCA9PSAtMikgewkJLyogRXJyb3IgKi8KLQkJZGVidWcoRjEwMCwiYmdldHBrdDog aW5wdXQgZXJyb3IiLCIiLDApOwotCQljeHNlZW4gPSAxOwkJLyogSW50ZXJydXB0IHRoZSBmaWxl IHRyYW5zZmVyICovCi0JICAgIH0gZWxzZSB7Ci0JCWRlYnVnKEYxMDAsImJnZXRwa3QgZW1wdHkg ZmlsZSIsIiIsMCk7Ci0JICAgIH0KLQkgICAgcmV0dXJuKDApOwotCX0KLQlmaXJzdCA9IDA7CQkJ LyogTmV4dCBjaGFyIHdpbGwgbm90IGJlIHRoZSBmaXJzdCAqLwotCWZmYysrOwkJCQkvKiBDb3Vu dCBhIGZpbGUgY2hhcmFjdGVyICovCi0JcnQgPSAoQ0hBUikgeDsJCQkvKiBDb252ZXJ0IGludCB0 byBjaGFyICovCi0JaWYgKGRvY3JjICYmICh3aGF0ICYgV19TRU5EKSkgewkvKiBBY2N1bXVsYXRl IGZpbGUgY3JjICovCi0JICAgIHogPSBjcmMxNiBeIChsb25nKXJ0OwotCSAgICBjcmMxNiA9IChj cmMxNiA+PiA4KSBeCi0JICAgICAgKGNyY3RhWyh6ICYgMHhGMCkgPj4gNF0gXiBjcmN0Ylt6ICYg MHgwRl0pOwotCX0KLQlydCAmPSBmbWFzazsJCQkvKiBBcHBseSBTRVQgRklMRSBCWVRFU0laRSBt YXNrICovCi0KLSAgICB9IGVsc2UgaWYgKGZpcnN0ID09IC0xICYmIG5sZWZ0ID09IDApIHsgLyog RU9GIGZyb20gbGFzdCB0aW1lICovCi0KLSAgICAgICAgcmV0dXJuKHNpemUgPSAwKTsKLSAgICB9 Ci0vKgotICBIZXJlIHdlIGhhbmRsZSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBlbmNvZGVkIGZvciB0 aGUgbGFzdCBwYWNrZXQgYnV0Ci0gIGRpZCBub3QgZml0LCBhbmQgc28gd2VyZSBzYXZlZCBpbiB0 aGUgImxlZnRvdmVyIiBhcnJheS4KLSovCi0gICAgaWYgKG5sZWZ0KSB7Ci0JZm9yIChwMSA9IGxl ZnRvdmVyOyBubGVmdCA+IDA7IG5sZWZ0LS0pIC8qIENvcHkgbGVmdG92ZXJzICovCi0JICAqZHAr KyA9ICpwMSsrOwotCSpsZWZ0b3ZlciA9ICdcMCc7CQkvKiBEZWxldGUgbGVmdG92ZXJzICovCi0J bmxlZnQgPSAwOwotICAgIH0KLSAgICBpZiAoZmlyc3QgPT0gLTEpCQkJLyogSGFuZGxlIEVPRiAq LwotICAgICAgcmV0dXJuKHNpemUgPSAoZHAgLSBkYXRhKSk7Ci0KLS8qIE5vdyBmaWxsIHVwIHRo ZSByZXN0IG9mIHRoZSBwYWNrZXQuICovCi0KLSAgICBycHQgPSAwOwkJCQkvKiBJbml0aWFsaXpl IGNoYXJhY3RlciByZXBlYXQgY291bnQgKi8KLQotICAgIHdoaWxlIChmaXJzdCA+IC0xKSB7CQkv KiBVbnRpbCBFT0YuLi4gKi8KLSNpZmRlZiBDQUxJQlJBVEUKLQlpZiAoY2FsaWJyYXRlKSB7CQkv KiBXZSBnZW5lcmF0ZSBvdXIgb3duICJmaWxlIiAqLwotCSAgICBpZiAoZmZjID49IGNhbGlicmF0 ZSkgewkvKiBFT0YgKi8KLQkJZmlyc3QgPSAtMTsKLQkJZmZjLS07Ci0JICAgIH0gZWxzZSB7CQkJ LyogR2VuZXJhdGUgbmV4dCBjaGFyYWN0ZXIgKi8KLQkJaWYgKGNhbF9qID4gQ0FMX00gKiBmZmMp Ci0JCSAgY2FsX2ogPSBjYWxfYVtmZmMgJiAweGZmXTsKLQkJeCA9ICh1bnNpZ25lZCljYWxfYVso Y2FsX2ogJiAweGZmKV07Ci0JCWlmICh4ID09IHJ0KSB4IF49IDI7Ci0JICAgIH0KLQkgICAgZmZj Kys7Ci0JICAgIGNhbF9qICs9ICh1bnNpZ25lZCBpbnQpKGZmYyArIENBTF9PKTsKLQl9IGVsc2UK LSNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KLQlpZiAoKHggPSB6bWluY2hhcigpKSA8IDApIHsJLyog Q2hlY2sgZm9yIEVPRiAqLwotCSAgICBpZiAoeCA9PSAtMykgewkJLyogVGltZW91dC4gKi8KLQkJ dCA9IHJ0OwotCQlzaXplID0gKGRwLWRhdGEpOwotCQlkZWJ1ZyhGMTAxLCJiZ2V0cGt0IHRpbWVv dXQgc2l6ZSIsIiIsc2l6ZSk7Ci0JCXJldHVybigoc2l6ZSA9PSAwKSA/IHggOiBzaXplKTsKLQkg ICAgfQotCSAgICBmaXJzdCA9IC0xOwkJCS8qIEZsYWcgZW9mIGZvciBuZXh0IHRpbWUuICovCi0J ICAgIGlmICh4ID09IC0yKSBjeHNlZW4gPSAxOwkvKiBJZiBlcnJvciwgY2FuY2VsIHRoaXMgZmls ZS4gKi8KLQl9IGVsc2UgewotCSAgICBmZmMrKzsJCQkvKiBDb3VudCB0aGUgY2hhcmFjdGVyICov Ci0JICAgIGlmIChkb2NyYyAmJiAod2hhdCAmIFdfU0VORCkpIHsgLyogQWNjdW11bGF0ZSBmaWxl IGNyYyAqLwotCQl6ID0gY3JjMTYgXiAobG9uZykoKENIQVIpeCAmIDB4ZmYpOwotCQljcmMxNiA9 IChjcmMxNiA+PiA4KSBeCi0JCSAgKGNyY3RhWyh6ICYgMHhGMCkgPj4gNF0gXiBjcmN0Ylt6ICYg MHgwRl0pOwotCSAgICB9Ci0JfQotCXJuZXh0ID0gKENIQVIpICh4ICYgZm1hc2spOwkvKiBBcHBs eSBmaWxlIG1hc2sgKi8KLS8qCi0gIEF0IHRoaXMgcG9pbnQsIHRoZSBjaGFyYWN0ZXIgd2UganVz dCByZWFkIGlzIGluIHJuZXh0LAotICBhbmQgdGhlIGNoYXJhY3RlciB3ZSBhcmUgYWJvdXQgdG8g ZW5jb2RlIGludG8gdGhlIHBhY2tldCBpcyBpbiBydC4KLSovCi0Jb2RwID0gZHA7CQkJLyogUmVt ZW1iZXIgd2hlcmUgd2Ugc3RhcnRlZC4gKi8KLQl4eHJjID0geHhjcSA9IE5VTDsJCS8qIENsZWFy IHRoZXNlLiAqLwotLyoKLSAgTm93IGVuY29kZSB0aGUgY2hhcmFjdGVyIGFjY29yZGluZyB0byB0 aGUgb3B0aW9ucyB0aGF0IGFyZSBpbiBlZmZlY3Q6Ci0gICAgY3RscFtdOiB3aGV0aGVyIHRoaXMg Y29udHJvbCBjaGFyYWN0ZXIgbmVlZHMgcHJlZml4aW5nLgotICAgIHJwdGZsZzogcmVwZWF0IGNv dW50cyBlbmFibGVkLgotICAgIE90aGVyIG9wdGlvbnMgZG9uJ3QgYXBwbHkgaW4gdGhpcyByb3V0 aW5lLgotKi8KLQlpZiAocnB0ZmxnICYmIChydCA9PSBybmV4dCkgJiYgKGZpcnN0ID09IDApKSB7 IC8qIEdvdCBhIHJ1bi4uLiAqLwotCSAgICBpZiAoKytycHQgPCA5NCkgewkJLyogQmVsb3cgbWF4 LCBqdXN0IGNvdW50ICovCi0JCWNvbnRpbnVlOwkJLyogZ28gYmFjayBhbmQgZ2V0IGFub3RoZXIg Ki8KLQkgICAgfSBlbHNlIGlmIChycHQgPT0gOTQpIHsJLyogUmVhY2hlZCBtYXgsIG11c3QgZHVt cCAqLwotCQl4eHJjID0gKENIQVIpIHRvY2hhcihycHQpOyAvKiBQdXQgdGhlIHJlcGVhdCBjb3Vu dCBoZXJlICovCi0JCXJwdG4gKz0gcnB0OwkJLyogQWNjdW11bGF0ZSBpdCBmb3Igc3RhdGlzdGlj cyAqLwotCQlycHQgPSAwOwkJLyogQW5kIHJlc2V0IGl0ICovCi0JICAgIH0KLQl9IGVsc2UgaWYg KHJwdCA+IDApIHsJCS8qIEVuZCBvZiBydW4gKi8KLQkgICAgeHhyYyA9IChDSEFSKXRvY2hhcigr K3JwdCk7IC8qIFRoZSBjb3VudCAqLwotCSAgICBycHRuICs9IHJwdDsJCS8qIEZvciBzdGF0cyAq LwotCSAgICBycHQgPSAwOwkJCS8qIFJlc2V0IHJlcGVhdCBjb3VudCAqLwotCX0KLQlhNyA9IHJ0 ICYgMDE3NzsJCQkvKiBHZXQgbG93IDcgYml0cyBvZiBjaGFyYWN0ZXIgKi8KLQlpZiAoCi0jaWZk ZWYgQ0tfU1BFRUQKLQkgICAgY3RscFsodW5zaWduZWQpKHJ0ICYgMHhmZildCS8qIExvcCBvZmYg YW55ICJzaWduIiBleHRlbnNpb24gKi8KLSNlbHNlCi0JICAgIChhNyA8IFNQKSB8fCAoYTcgPT0g REVMKQotI2VuZGlmIC8qIENLX1NQRUVEICovCi0JICAgICkgewkJCQkvKiBEbyBjb250cm9sIHBy ZWZpeGluZyBpZiBuZWNlc3NhcnkgKi8KLQkgICAgeHhjcSA9IG15Y3RscTsJCS8qIFRoZSBwcmVm aXggKi8KLQkgICAgY2NwKys7CQkJLyogQ291bnQgaXQgKi8KLQkgICAgcnQgPSAoQ0hBUikgY3Rs KHJ0KTsJLyogVW5jb250cm9sbGlmeSB0aGUgY2hhcmFjdGVyICovCi0JfQotI2lmZGVmIENLX1NQ RUVECi0JZWxzZSBpZiAoKGE3IDwgU1ApIHx8IChhNyA9PSBERUwpKSAvKiBDb3VudCBhbiB1bnBy ZWZpeGVkIG9uZSAqLwotCSAgY2N1Kys7Ci0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLQotCWlmIChh NyA9PSBteWN0bHEpCQkvKiBBbHdheXMgcHJlZml4IHRoZSBjb250cm9sIHByZWZpeCAqLwotCSAg eHhjcSA9IG15Y3RscTsKLQotCWlmICgocnB0ZmxnKSAmJiAoYTcgPT0gcnB0cSkpCS8qIElmIGl0 J3MgdGhlIHJlcGVhdCBwcmVmaXgsICovCi0JICB4eGNxID0gbXljdGxxOwkJLyogcHJlZml4IGl0 IGlmIGRvaW5nIHJlcGVhdCBjb3VudHMgKi8KLQotLyogTm93IGNvbnN0cnVjdCB0aGUgcHJlZml4 ZWQgc2VxdWVuY2UgKi8KLQotCWlmICh4eHJjKSB7CQkJLyogUmVwZWF0IGNvdW50ICovCi0jaWZk ZWYgQ09NTUVOVAotCSAgICBpZiAoeHhyYyA9PSAoQ0hBUikgJyInICYmICF4eGNxKSB7IC8qIDIg aW4gYSByb3cgJiBub3QgcHJlZml4ZWQgKi8KLQkJKmRwKysgPSBydDsJCS8qIFNvIGp1c3QgZG8g dGhpcyAqLwotCSAgICB9IGVsc2UgewkJCS8qIE1vcmUgdGhhbiB0d28gb3IgcHJlZml4ZWQgKi8K LQkJKmRwKysgPSAoQ0hBUikgcnB0cTsgKmRwKysgPSB4eHJjOyAvKiBFbWl0IHJlcGVhdCBzZXF1 ZW5jZSAqLwotCSAgICB9Ci0jZWxzZQkJCQkJLyogQ0hFQ0sgVEhJUyAqLwotCSAgICBpZiAoeHhy YyA9PSAoQ0hBUikgJyInICYmICF4eGNxKSB7IC8qIDIgaW4gYSByb3cgJiBub3QgcHJlZml4ZWQg Ki8KLSAgICAgICAgICAgICAgICBpZiAoZHAgPT0gZGF0YSkgewotICAgICAgICAgICAgICAgICAg ICAqZHArKyA9IHJ0OwkJLyogU28ganVzdCBkbyB0aGlzICovCi0gICAgICAgICAgICAgICAgfSBl bHNlIGlmICgqKGRwLTEpID09IHJ0KSB7Ci0gICAgICAgICAgICAgICAgICAgICpkcCsrID0gKENI QVIpIHJwdHE7Ci0JCSAgICAqZHArKyA9IHh4cmM7CS8qIEVtaXQgcmVwZWF0IHNlcXVlbmNlICov Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgKmRwKysgPSBy dDsJCS8qIFNvIGp1c3QgZG8gdGhpcyAqLwotICAgICAgICAgICAgICAgIH0KLQkgICAgfSBlbHNl IHsJCQkvKiBNb3JlIHRoYW4gdHdvIG9yIHByZWZpeGVkICovCi0JCSpkcCsrID0gKENIQVIpIHJw dHE7Ci0JCSpkcCsrID0geHhyYzsJCS8qIEVtaXQgcmVwZWF0IHNlcXVlbmNlICovCi0JICAgIH0K LSNlbmRpZiAvKiBDT01NRU5UICovCi0JfQotCWlmICh4eGNxKSB7ICpkcCsrID0gbXljdGxxOyB9 CS8qIENvbnRyb2wgcHJlZml4ICovCi0JKmRwKysgPSBydDsJCQkvKiBGaW5hbGx5LCB0aGUgY2hh cmFjdGVyIGl0c2VsZiAqLwotCXJ0ID0gcm5leHQ7CQkJLyogTmV4dCBjaGFyYWN0ZXIgaXMgbm93 IGN1cnJlbnQuICovCi0KLS8qIERvbmUgZW5jb2RpbmcgdGhlIGNoYXJhY3Rlci4gIE5vdyB0YWtl IGNhcmUgb2YgcGFja2V0IGJ1ZmZlciBvdmVyZmxvdy4gKi8KLQotCXNpemUgPSBkcCAtIGRhdGE7 CQkvKiBIb3cgbWFueSBieXRlcyB3ZSBwdXQgaW4gYnVmZmVyLiAqLwotCWlmIChzaXplID49IGJ1 Zm1heCkgewkJLyogSWYgdG9vIGJpZywgc2F2ZSBzb21lIGZvciBuZXh0LiAqLwotCSAgICAqZHAg PSAnXDAnOwkJCS8qIE1hcmsgdGhlIGVuZC4gKi8KLQkgICAgaWYgKHNpemUgPiBidWZtYXgpIHsJ LyogaWYgcGFja2V0IGlzIG92ZXJmdWxsICovCi0JCS8qIENvcHkgdGhlIHBhcnQgdGhhdCBkb2Vz bid0IGZpdCBpbnRvIHRoZSBsZWZ0b3ZlciBidWZmZXIsICovCi0JCS8qIHRha2luZyBjYXJlIG5v dCB0byBzcGxpdCBhIHByZWZpeGVkIHNlcXVlbmNlLiAqLwotCQlpbnQgaTsKLQkJbmxlZnQgPSBk cCAtIG9kcDsKLQkJcDEgPSBsZWZ0b3ZlcjsKLQkJcDIgPSBvZHA7Ci0JCWZvciAoaSA9IDA7IGkg PCBubGVmdDsgaSsrKQotCQkgICpwMSsrID0gKnAyKys7Ci0JCXNpemUgPSBvZHAgLSBkYXRhOwkv KiBSZXR1cm4gdHJ1bmNhdGVkIHBhY2tldC4gKi8KLQkJKm9kcCA9ICdcMCc7CQkvKiBNYXJrIHRo ZSBuZXcgZW5kICovCi0JICAgIH0KLQkgICAgdCA9IHJ0OwkJCS8qIFNhdmUgZm9yIG5leHQgdGlt ZSAqLwotCSAgICByZXR1cm4oc2l6ZSk7Ci0JfQotICAgIH0JCQkJCS8qIE90aGVyd2lzZSwga2Vl cCBmaWxsaW5nLiAqLwotICAgIHNpemUgPSBkcCAtIGRhdGE7CQkJLyogRW5kIG9mIGZpbGUgKi8K LSAgICAqZHAgPSAnXDAnOwkJCQkvKiBNYXJrIHRoZSBlbmQgb2YgdGhlIGRhdGEuICovCi0gICAg cmV0dXJuKHNpemUpOwkJICAgICAvKiBSZXR1cm4gcGFydGlhbGx5IGZpbGxlZCBsYXN0IHBhY2tl dC4gKi8KLX0KLSNlbmRpZiAvKiBDS1RVTklORyAqLwotCi1WT0lECi1kb2ZpbGNyYyhjKSBpbnQg YzsgewkJCS8qIEFjY3VtdWxhdGUgZmlsZSBjcmMgKi8KLSAgICBsb25nIHo7Ci0gICAgeiA9IGNy YzE2IF4gKGxvbmcpYzsKLSAgICBjcmMxNiA9IChjcmMxNiA+PiA4KSBeCi0gICAgICAoY3JjdGFb KHogJiAweEYwKSA+PiA0XSBeIGNyY3RiW3ogJiAweDBGXSk7Ci19Ci0KLS8qIEZvciBTRU5EaW5n IGZyb20gYW4gYXJyYXkuLi4gKi8KLQotaW50Ci1hZ25ieXRlKCkgewkJCQkvKiBHZXQgbmV4dCBi eXRlIGZyb20gYXJyYXkgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICBjaGFyIGM7Ci0gICAgc3RhdGlj IGludCBzYXZlID0gMDsJCS8qIEZvciBDUkxGICovCi0gICAgc3RhdGljIGNoYXIgKiogYXAgPSBO VUxMOwkJLyogQXJyYXkgcG9pbnRlciAqLwotICAgIHN0YXRpYyBjaGFyICogcCA9IE5VTEw7CQkv KiBDaGFyYWN0ZXIgcG9pbnRlciAqLwotICAgIHN0YXRpYyBpbnQgaSA9IDAsIG4gPSAwOwkJLyog QXJyYXkgaW5kZXggYW5kIGxpbWl0ICovCi0gICAgZXh0ZXJuIGludCBhX2RpbVtdOwkJCS8qIEFy cmF5IGRpbWVuc2lvbiAqLwotCi0gICAgaWYgKCFhcCkgewkJCQkvKiBGaXJzdCB0aW1lIHRocnUg Ki8KLQlhcCA9IHNuZGFycmF5OwkJCS8qIFNldCB1cCBhcnJheSBwb2ludGVycyAqLwotCWlmICgh YXAgfHwgKGkgPSBzbmR4bG8pID4gYV9kaW1bc25keGluXSkgewotCSAgICBzbmRhcnJheSA9IE5V TEw7Ci0JICAgIGFwID0gTlVMTDsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0JcCA9IGFwW2ldOwkJ CS8qIFBvaW50IHRvIGZpcnN0IGVsZW1lbnQgaW4gcmFuZ2UgKi8KLQluID0gc25keGhpOwkJCS8q IEluZGV4IG9mIGxhc3QgZWxlbWVudCBpbiByYW5nZSAqLwotCWlmIChzbmR4aGkgPiBhX2RpbVtz bmR4aW5dKQkvKiBBZGp1c3QgaWYgbmVjZXNzYXJ5ICovCi0JICBuID0gYV9kaW1bc25keGluXTsK LSAgICB9Ci0gICAgaWYgKHNhdmUpIHsJCQkJLyogSWYgYW55dGhpbmcgc2F2ZWQgKi8KLQljID0g c2F2ZTsJCQkvKiB1bnNhdmUgaXQgKi8KLQlzYXZlID0gMDsJCQkvKiBhbmQgcmV0dXJuIGl0ICov Ci0JcmV0dXJuKGMgJiAweGZmKTsKLSAgICB9Ci0gICAgaWYgKGkgPiBuKSB7CQkJLyogTm8gbW9y ZSBlbGVtZW50cyAqLwotCXNuZGFycmF5ID0gTlVMTDsKLQlhcCA9IE5VTEw7Ci0JcmV0dXJuKC0x KTsKLSAgICB9Ci0gICAgaWYgKCFwKQkJCQkvKiBTb3VyY2UgcG9pbnRlciBpcyBOVUxMICovCi0g ICAgICBjID0gTlVMOwkJCQkvKiB0aGlzIG1lYW5zIGFuIGVtcHR5IGxpbmUgKi8KLSAgICBlbHNl CQkJCS8qIFNvdXJjZSBwb2ludGVyIG5vdCBOVUxMICovCi0gICAgICBjID0gKnArKzsJCQkJLyog TmV4dCBjaGFyICovCi0gICAgaWYgKCFjKSB7CQkJCS8qIENoYXIgaXMgZW1wdHk/ICovCi0JaWYg KCFiaW5hcnkpIHsJCQkvKiBUZXh0OiBlbmQgb2YgbGluZS4gKi8KLQkgICAgaWYgKGZlb2wpIHsJ CQkvKiBTdXBwbHkgTkwgKi8KLQkJYyA9IGZlb2w7Ci0JICAgIH0gZWxzZSB7CQkJLyogb3IgQ1JM RiAqLwotCQlzYXZlID0gTEY7Ci0JCWMgPSBDUjsKLQkgICAgfQotCSAgICBwID0gYXBbKytpXTsK LQkgICAgcmV0dXJuKGMgJiAweGZmKTsKLQl9Ci0Jd2hpbGUgKGkrKyA8IG4pIHsJCS8qIEJpbmFy eSAtIGdldCBuZXh0IGVsZW1lbnQgKi8KLQkgICAgcCA9IGFwW2ldOwotCSAgICBpZiAoIXApCQkJ LyogRW1wdHkgbGluZT8gKi8KLQkgICAgICBjb250aW51ZTsJCQkvKiBJZ25vcmUgaXQgYW5kIGdl dCBhbm90aGVyICovCi0JICAgIGMgPSAqcCsrOwkJCS8qIEdldCBuZXh0IGNoYXIgKi8KLQkgICAg aWYgKCFjKQkJCS8qIEVtdHB5IGNoYXI/ICovCi0JICAgICAgY29udGludWU7CQkJLyogSWdub3Jl IGl0IGFuZCBnZXQgYW5vdGhlciAqLwotCSAgICByZXR1cm4oYyAmIDB4ZmYpOwkJLyogTm90IGVt cHR5IC0gcmV0dXJuIGl0ICovCi0JfQotCXNuZGFycmF5ID0gTlVMTDsKLQlhcCA9IE5VTEw7Ci0J cmV0dXJuKC0xKTsJCQkvKiBEb25lICovCi0gICAgfQotICAgIHJldHVybihjICYgMHhmZik7CQkJ LyogQ2hhciBpcyBub3QgZW1wdHkgKi8KLSNlbHNlCi0gICAgc25kYXJyYXkgPSBOVUxMOwotICAg IHJldHVybigtMSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLX0KLSNlbmRpZiAvKiBOT1hGRVIgKi8K LQotI2lmbmRlZiBOT0NTRVRTCi1zdGF0aWMgQ0hBUiB4bGFidWZbMzJdID0geyAwLCAwLCAwLCAw LCAwLCAwLCAwLCAwIH07Ci1zdGF0aWMgaW50IHhsYWNvdW50ID0gMDsKLXN0YXRpYyBpbnQgeGxh cHRyID0gMDsKLS8qIHN0YXRpYyBVU0hPUlQgbGFzdHVjczIgPSAwOyAqLwotCi0vKgotICBYIEcg TiBCIFkgVCBFIC0tICBHZXQgbmV4dCB0cmFuc2xhdGVkIGJ5dGUgZnJvbSB0aGUgaW5wdXQgZmls ZS4KLQotICBSZXR1cm5zIHRoZSBuZXh0IGJ5dGUgdGhhdCBpcyB0byBiZSBwdXQgaW50byB0aGUg cGFja2V0LCBhbHJlYWR5IHRyYW5zbGF0ZWQuCi0gIFRoaXMgaXNvbGF0ZXMgZ2V0cGt0KCkgZnJv bSBoYXZpbmcgdG8ga25vdyBhbnl0aGluZyBhYm91dCB0cmFuc2xhdGlvbiwKLSAgc2luZ2xlLSB2 cyBtdWx0aWJ5dGUgY2hhcmFjdGVyIHNldHMsIG9uZS10by1tYW55IHZzIG1hbnktdG8tb25lLCBl dGMsIGJ1dCBpdAotICBoYXMgcmF0aGVyIGhpZ2ggb3ZlcmhlYWQsIHNvIGRvbid0IGNhbGwgaXQg dW5sZXNzIHlvdSBrbm93IHRyYW5zbGF0aW9uIGlzCi0gIG5lZWRlZCB0byBvciBmcm9tIFVuaWNv ZGUsIEphcGFuZXNlLCBvciBvdGhlciBtdWx0aWJ5dGUgY2hhcmFjdGVyIHNldC4KLQotICBDYWxs IHdpdGg6Ci0gICAgZmNzOiAgRmlsZSBjaGFyYWN0ZXIgc2V0IChzb3VyY2UsIGZpbGUgd2UgYXJl IHJlYWRpbmcgZnJvbSkKLSAgICB0Y3M6ICBUYXJnZXQgY2hhcmFjdGVyIHNldCAodXNlIGFuIEZD X3h4eCBjb2RlLCBub3QgYSBUQ194eHggY29kZSkKLSAgUmV0dXJuczoKLSAgICA+PSAwOiBBIHRy YW5zbGF0ZWQgYnl0ZSBzdWl0YWJsZSBmb3Igd3JpdGluZy4KLSAgICA8ICAwOiBGYXRhbCBlcnJv ciAoc3VjaCBhcyBFT0Ygb24gaW5wdXQgc291cmNlKS4KLSAgQXMgb2YgU2F0IFNlcCAgNyAxODoz Nzo0MSAyMDAyOiAgCi0gICAgV2hlbiB0aGUgb3V0cHV0IGNoYXJhY3Rlci1zZXQgaXMgVUNTLTIs IGJ5dGVzIGFyZSBBTFdBWVMgcmV0dXJuZWQgaW4KLSAgICBiaWctZW5kaWFuIG9yZGVyIChwcmV2 aW91c2x5IHRoZXkgY291bGQgYWxzbyBiZSByZXR1cm5lZCBpbiBMRSBvcmRlcgotICAgIHVuZGVy IGNlcnRhaW4gY29uZGl0aW9ucywgd2hpY2ggd2FzIGp1c3Qgd2F5IHRvbyBjb25mdXNpbmcpLgot Ki8KLWludAotI2lmZGVmIENLX0FOU0lDCi14Z25ieXRlKGludCB0Y3MsIGludCBmY3MsIGludCAo KmZuKSh2b2lkKSkKLSNlbHNlIC8qIENLX0FOU0lDICovCi14Z25ieXRlKHRjcyxmY3MsZm4pIGlu dCB0Y3MsIGZjcywgKCpmbikoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogeGduYnl0ZSAq LyB7Ci0gICAgX1BST1RPVFlQKCBpbnQgKCp4eCksIChVU0hPUlQpICkgPSBOVUxMOwotICAgIGlu dCBoYXZldWMgPSAwOwkJCS8qIEZsYWcgZm9yIGhhdmUgVW5pY29kZSBjaGFyYWN0ZXIgKi8KLSNp ZmRlZiBLQU5KSQotICAgIGludCBoYXZlc2ogPSAwOwkJCS8qIEhhdmUgU2hpZnQtSklTIGNoYXJh Y3RlciAqLwotICAgIGludCBoYXZlZXUgPSAwOwkJCS8qIEhhdmUgRVVDLUpQIGNoYXJhY3RlciAq LwotI2VuZGlmIC8qIEtBTkpJICovCi0gICAgaW50IHJjID0gLTEsIHggPSAwLCBmbGFnID0gMDsK LSAgICBpbnQgdXRmZXJyb3IgPSAwOwotICAgIGludCBlb2xmbGFnID0gMDsKLSAgICB1bnNpZ25l ZCBpbnQgeGMsIHRoaXNjaGFyOwotICAgIHN0YXRpYyBpbnQgc3dhcHBpbmcgPSAwOwotICAgIENI QVIgcnQ7Ci0gICAgLyogVVNIT1JUIGNoOyAqLwotI2lmZGVmIFVOSUNPREUKLSAgICB1bmlvbiBj a19zaG9ydCB1YzsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0jaWZkZWYgS0FOSkkKLSAgICB1bmlv biBja19zaG9ydCBzaiwgZXU7CQkvKiBTaGlmdC1KSVMgY2hhcmFjdGVyICovCi0jZW5kaWYgLyog S0FOSkkgKi8KLQotI2lmZGVmIEtBTkpJCi0gICAgc2oueF9zaG9ydCA9IDA7Ci0jZW5kaWYgLyog S0FOSkkgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyAmJiAhZmZjKSB7Ci0JZGVi dWcoRjEwMSwieGduYnl0ZSBpbml0aWFsIHN3YXAiLCIiLHN3YXBwaW5nKTsKLSAgICB9Ci0jZW5k aWYgLyogREVCVUcgKi8KLQotICAgIGlmICh4bGFjb3VudC0tID4gMCkgewkJLyogV2UgYWxyZWFk eSBoYXZlIHNvbWUgKi8KLQl4ID0geGxhYnVmW3hsYXB0cisrXTsKLQlkZWJ1ZyhGMDAxLCJ4Z25i eXRlIGZyb20gYnVmIiwiIix4KTsKLQlyZXR1cm4oeCk7Ci0gICAgfQotICAgIGlmICh4bGF0eXBl ICE9IFhMQV9OT05FKSB7CQkvKiBOb3Qgbm90IHRyYW5zbGF0aW5nLi4uICovCi0JaGF2ZXVjID0g MDsKLSNpZmRlZiBVTklDT0RFCi0JaWYgKGZjcyA9PSBGQ19VQ1MyKSB7CQkvKiBVQ1MtMjogUmVh ZCB0d28gYnl0ZXMgKi8KLQkgICAgaWYgKCFmZmMpCQkJLyogQmVnaW5uaW5nIG9mIGZpbGU/ICov Ci0JICAgICAgc3dhcHBpbmcgPSAwOwkJLyogUmVzZXQgYnl0ZS1zd2FwcGluZyBmbGFnICovCi0J ICAgIHVjLnhfc2hvcnQgPSAwOwotCSAgYm9tc2tpcDoKLQkgICAgeCA9IGZuID8gKCpmbikoKSA6 IHptaW5jaGFyKCk7IC8qIEdldCBmaXJzdCBieXRlICovCi0JICAgIGRlYnVnKEYwMDEsInptaW5j aGFyIHN3YXBwaW5nIiwiIixzd2FwcGluZyk7Ci0JICAgIGRlYnVnKEYwMDEsInptaW5jaGFyIEMw IiwiIix4KTsKLQkgICAgZmxhZyA9IDE7CQkJLyogUmVtZW1iZXIgd2UgY2FsbGVkIHptaW5jaGFy KCkgKi8KLQkgICAgaWYgKHggPiAtMSkgewkJLyogRGlkbid0IGZhaWwgKi8KLQkJZmZjKys7CQkJ LyogQ291bnQgYSBmaWxlIGJ5dGUgKi8KLQkJdWMueF9jaGFyW3N3YXBwaW5nXSA9IHggJiAweGZm OwotI2lmbmRlZiBOT1hGRVIKLQkJaWYgKGRvY3JjICYmICh3aGF0ICYgV19TRU5EKSkKLQkJICBk b2ZpbGNyYyh4KTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQkJeCA9IGZuID8gKCpmbikoKSA6IHpt aW5jaGFyKCk7IC8qIEdldCBzZWNvbmQgYnl0ZSAqLwotCQlpZiAoeCA+IC0xKSB7CQkvKiBJZiBk aWRuJ3QgZmFpbCAqLwotCQkgICAgZGVidWcoRjAwMSwiem1pbmNoYXIgQzEiLCIiLHgpOwotCQkg ICAgZmZjKys7CQkvKiBjb3VudCBhbm90aGVyIGZpbGUgYnl0ZSAqLwotCQkgICAgdWMueF9jaGFy WzEtc3dhcHBpbmddID0geCAmIDB4ZmY7Ci0JCSAgICBoYXZldWMgPSAxOwkJLyogQW5kIHJlbWVt YmVyIHdlIGhhdmUgVW5pY29kZSAqLwotI2lmbmRlZiBOT1hGRVIKLQkJICAgIGlmIChkb2NyYyAm JiAod2hhdCAmIFdfU0VORCkpCi0JCSAgICAgIGRvZmlsY3JjKHgpOwotI2VuZGlmIC8qIE5PWEZF UiAqLwotCQkgICAgaWYgKGZmYyA9PSAoQ0tfT0ZGX1QpMikgeyAvKiBTZWNvbmQgY2hhciBvZiBm aWxlICovCi0JCQlkZWJ1ZyhGMDAxLCJ4Z25ieXRlIDFzdCBVQ1MyIiwiIix1Yy54X3Nob3J0KTsK LQkJCWRlYnVnKEYxMTEsInhnbmJ5dGUgZmlsZW9yZGVyIiwiQSIsZmlsZW9yZGVyKTsKLQkJCWlm IChmaWxlb3JkZXIgPCAwKSAvKiBCeXRlIG9yZGVyIG9mIHRoaXMgZmlsZSAqLwotCQkJICBmaWxl b3JkZXIgPSB1Y3NvcmRlcjsJLyogRGVmYXVsdCBpcyB1Y3NvcmRlciAqLwotCQkJaWYgKGZpbGVv cmRlciA+IDEpCi0JCQkgIGZpbGVvcmRlciA9IDE7Ci0JCQlkZWJ1ZyhGMTExLCJ4Z25ieXRlIGZp bGVvcmRlciIsIkIiLGZpbGVvcmRlcik7Ci0JCQlpZiAodWMueF9zaG9ydCA9PSAoVVNIT1JUKTB4 ZmVmZikgewotCQkJICAgIHN3YXBwaW5nID0gMDsKLQkJCSAgICBkZWJ1ZyhGMTAxLAotCQkJCSAg InhnbmJ5dGUgVUNTMiBnb29kYm9tIHN3YXAiLCIiLHN3YXBwaW5nKTsKLQkJCSAgICBmaWxlb3Jk ZXIgPSBieXRlb3JkZXI7IC8qIE5vdGU6IE5PVCAwICovCi0JCQkgICAgZ290byBib21za2lwOwot CQkJfSBlbHNlIGlmICh1Yy54X3Nob3J0ID09IChVU0hPUlQpMHhmZmZlKSB7Ci0JCQkgICAgc3dh cHBpbmcgPSAxOwotCQkJICAgIGRlYnVnKEYxMDEsCi0JCQkJICAieGduYnl0ZSBVQ1MyIGJhZGJv bSBzd2FwIiwiIixzd2FwcGluZyk7Ci0JCQkgICAgZmlsZW9yZGVyID0gKDEgLSBieXRlb3JkZXIp OyAvKiBOb3RlOiBOT1QgMSAqLwotCQkJICAgIGdvdG8gYm9tc2tpcDsKLQkJCX0gZWxzZSBpZiAo KGJ5dGVvcmRlciAmJiAhZmlsZW9yZGVyKSB8fCAvKiBObyBCT00gKi8KLQkJCQkgICAoIWJ5dGVv cmRlciAmJiBmaWxlb3JkZXIgPiAwKSkgewotCQkJICAgIC8qIGZpbGVvcmRlciBtaWdodCBoYXZl IGJlZW4gc2V0IGJ5IHNjYW5maWxlKCkgKi8KLQkJCSAgICBDSEFSIGM7Ci0JCQkgICAgYyA9IHVj LnhfY2hhclswXTsKLQkJCSAgICB1Yy54X2NoYXJbMF0gPSB1Yy54X2NoYXJbMV07Ci0JCQkgICAg dWMueF9jaGFyWzFdID0gYzsKLQkJCSAgICBzd2FwcGluZyA9IDE7Ci0JCQkgICAgZGVidWcoRjEx MSwieGduYnl0ZSBVQ1MyIG5vQk9NIHN3YXAiLCJBIixzd2FwcGluZyk7Ci0JCQl9IGVsc2Ugewot CQkJICAgIHN3YXBwaW5nID0gMDsKLQkJCSAgICBkZWJ1ZyhGMTExLCJ4Z25ieXRlIFVDUzIgbm9C T00gc3dhcCIsIkIiLHN3YXBwaW5nKTsKLQkJCX0KLQkJCWRlYnVnKEYxMTEsInhnbmJ5dGUgZmls ZW9yZGVyIiwiQyIsZmlsZW9yZGVyKTsKLQkJICAgIH0KLQkJfSBlbHNlCi0JCSAgcmV0dXJuKHgp OwotCSAgICB9IGVsc2UKLQkgICAgICByZXR1cm4oeCk7Ci0JICAgIGRlYnVnKEYwMDEsInhnbmJ5 dGUgVUNTMiIsIiIsdWMueF9zaG9ydCk7Ci0KLQl9IGVsc2UgaWYgKGZjcyA9PSBGQ19VVEY4KSB7 CS8qIEZpbGUgaXMgVVRGLTggKi8KLQkgICAgQ0hBUiBjaCA9IDA7CQkvKiBEYXRhIHR5cGVzIG5l ZWRlZCBmb3IgQVBJLi4uICovCi0JICAgIFVTSE9SVCAqIHVzID0gTlVMTDsKLQkgICAgdWMueF9z aG9ydCA9IDA7Ci0JICAgIGZsYWcgPSAxOwkJCS8qIFdlICh3aWxsKSBoYXZlIGNhbGxlZCB6bWlu Y2hhcigpICovCi0JICAgIC8qIFJlYWQgc291cmNlIGJ5dGVzICovCi0JICAgIHdoaWxlICgoeCA9 IGZuID8gKCpmbikoKSA6IHptaW5jaGFyKCkpID4gLTEpIHsKLQkJZmZjKys7CQkJLyogR290IGEg Ynl0ZSAtIGNvdW50IGl0ICovCi0jaWZuZGVmIE5PWEZFUgotCQlpZiAoZG9jcmMgJiYgKHdoYXQg JiBXX1NFTkQpKQotCQkgIGRvZmlsY3JjKHgpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCQljaCA9 IHg7Ci0JCXJjID0gdXRmOF90b191Y3MyKGNoLCZ1cyk7IC8qIENvbnZlcnQgdG8gVUNTLTIgKi8K LQkJaWYgKHJjID09IDApIHsJCS8qIERvbmUgKi8KLQkJICAgIHVjLnhfc2hvcnQgPSAqdXM7Ci0J CSAgICBoYXZldWMgPSAxOwotCQkgICAgYnJlYWs7Ci0JCX0gZWxzZSBpZiAocmMgPCAwKSB7CS8q IEVycm9yICovCi0JCSAgICB1dGZlcnJvciA9IDE7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJ4Z25ieXRl IFVURi04IGlucHV0IGVycm9yIiwiIixyYyk7Ci0JCSAgICBoYXZldWMgPSAxOwotCQkgICAgdWMu eF9zaG9ydCA9ICp1czsKLQkJICAgIGJyZWFrOwotCQl9Ci0JICAgIH0KLQkgICAgaWYgKHggPCAw KQotCSAgICAgIHJldHVybih4KTsKLQkgICAgZGVidWcoRjAwMSwieGduYnl0ZSBVVEY4LT5VQ1My IiwiIix1Yy54X3Nob3J0KTsKLQl9Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0jaWZkZWYgS0FO SkkKLSNpZmRlZiBVTklDT0RFCi0JZWxzZQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQkgIGlmIChm Y3NpbmZvW2Zjc10uYWxwaGFiZXQgPT0gQUxfSkFQQU4pIHsgLyogSmFwYW5lc2Ugc291cmNlIGZp bGUgKi8KLQkgICAgaW50IGM3LCB4LCB5OwotCSAgICBpZiAoZmNzID09IEZDX0pJUzcpIHsJLyog SWYgZmlsZSBjaGFyc2V0IGlzIEpJUy03ICovCi0JCWlmICghZmZjKQkJLyogSWYgZmlyc3QgYnl0 ZSBvZiBmaWxlICovCi0JCSAgajdpbml0KCk7CQkvKiBJbml0aWFsaXplIEpJUy03IHBhcnNlciAq LwotCQl4ID0gZ2V0ajcoKTsJCS8qIEdldCBhIEpJUy03IGJ5dGUgKi8KLQkgICAgfSBlbHNlCQkJ LyogT3RoZXJ3aXNlICovCi0JICAgICAgeCA9IGZuID8gKCpmbikoKSA6IHptaW5jaGFyKCk7IC8q IEp1c3QgZ2V0IGJ5dGUgKi8KLQkgICAgaWYgKHggPCAwKSB7CQkvKiBQcm9wb2dhdGUgRU9GIG9y IGVycm9yICovCi0JCWRlYnVnKEYxMDAsIlhHTkJZVEUgRU9GIiwiIiwwKTsKLQkJcmV0dXJuKHgp OwotCSAgICB9Ci0JICAgIGRlYnVnKEYwMDEsIlhHTkJZVEUgeCIsIiIseCk7Ci0JICAgIGZmYysr OwkJCS8qIENvdW50ICovCi0jaWZuZGVmIE5PWEZFUgotCSAgICBpZiAoZG9jcmMgJiYgKHdoYXQg JiBXX1NFTkQpKSBkb2ZpbGNyYyh4KTsgLyogRG8gQ1JDICovCi0jZW5kaWYgLyogTk9YRkVSICov Ci0JICAgIHN3aXRjaCAoZmNzKSB7CQkvKiBXaGF0IG5leHQgZGVwZW5kcyBvbiBjaGFyc2V0ICov Ci0JICAgICAgY2FzZSBGQ19TSEpJUzoJCS8qIFNoaWZ0LUpJUyAqLwotCQlpZiAoKHggPD0gMHg4 MCkgfHwJLyogQW55IDctYml0IGNoYXIuLi4gKi8KLQkJICAgICh4ID49IDB4YTAgJiYgeCA8PSAw eGRmKSkgeyAvKiBvciBoYWxmd2lkdGggS2F0YWthbmEgKi8KLQkJICAgIHNqLnhfc2hvcnQgPSAo VVNIT1JUKSB4OyAgICAvKiB3ZSByZWFkIG9uZSBieXRlLiAqLwotCQl9IGVsc2UgewkJLyogQW55 dGhpbmcgZWxzZSAqLwotCQkgICAgaWYgKCh5ID0gZm4gPyAoKmZuKSgpIDogem1pbmNoYXIoKSkg PCAwKSAvKiBnZXQgYW5vdGhlciAqLwotCQkgICAgICByZXR1cm4oeSk7Ci0jaWZuZGVmIE5PWEZF UgotCQkgICAgaWYgKGRvY3JjICYmICh3aGF0ICYgV19TRU5EKSkgZG9maWxjcmMoeSk7Ci0jZW5k aWYgLyogTk9YRkVSICovCi0JCSAgICBmZmMrKzsKLQkJICAgIHNqLnhfY2hhcltieXRlb3JkZXJd ID0gKENIQVIpIHg7Ci0JCSAgICBzai54X2NoYXJbMS1ieXRlb3JkZXJdID0gKENIQVIpIHk7Ci0J CX0KLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIEZDX0pJUzc6CQkvKiBKSVMtNyAqLwotCSAgICAg IGNhc2UgRkNfSkRFQzoJCS8qIERFQyBLYW5qaSAqLwotCSAgICAgIGNhc2UgRkNfSkVVQzoJCS8q IEVVQy1KUCAqLwotCQlpZiAoKHggJiAweDgwKSA9PSAwKSB7CS8qIENvbnZlcnQgdG8gU2hpZnQt SklTICovCi0JCSAgICBzai54X3Nob3J0ID0gKFVTSE9SVCkgeDsgLyogQzAgb3IgRzA6IG9uZSBi eXRlICovCi0JCSAgICBldS54X3Nob3J0ID0gKFVTSE9SVCkgeDsKLQkJICAgIGhhdmVldSA9IDE7 Ci0JCX0gZWxzZSB7Ci0JCSAgICBjNyA9IHggJiAweDdmOwotCQkgICAgaWYgKGM3ID4gMHgyMCAm JiBjNyA8IDB4N2YpIHsgLyogS2Fuamk6IHR3byBieXRlcyAqLwotCQkJaWYgKCh5ID0gKGZjcyA9 PSBGQ19KRVVDKSA/Ci0JCQkgICAgIChmbiA/ICgqZm4pKCkgOiB6bWluY2hhcigpKSA6Ci0JCQkg ICAgIGdldGo3KCkJLyogXl5eICovCi0JCQkgICAgICkgPCAwKQotCQkJICByZXR1cm4oeSk7Ci0J CQlmZmMrKzsKLSNpZm5kZWYgTk9YRkVSCi0JCQlpZiAoZG9jcmMgJiYgKHdoYXQgJiBXX1NFTkQp KSBkb2ZpbGNyYyh5KTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQkJCWV1LnhfY2hhcltieXRlb3Jk ZXJdID0gKENIQVIpIHg7Ci0JCQlldS54X2NoYXJbMS1ieXRlb3JkZXJdID0gKENIQVIpIHk7Ci0J CQlzai54X3Nob3J0ID0gZXVfdG9fc2ooZXUueF9zaG9ydCk7Ci0JCQloYXZlZXUgPSAxOwotCQkg ICAgfSBlbHNlIGlmICh4ID09IDB4OGUpIHsgLyogU1MyIEthdGFrYW5hIHByZWZpeDogMiBieXRl cyAqLwotCQkJaWYgKCh5ID0gKGZjcyA9PSBGQ19KSVM3KSA/Ci0JCQkgICAgIGdldGo3KCkgOgkv KiBeXl4gKi8KLQkJCSAgICAgKGZuID8gKCpmbikoKSA6IHptaW5jaGFyKCkpCi0JCQkgICAgICkg PCAwKQotCQkJICByZXR1cm4oeSk7Ci0JCQlmZmMrKzsKLSNpZm5kZWYgTk9YRkVSCi0JCQlpZiAo ZG9jcmMgJiYgKHdoYXQgJiBXX1NFTkQpKSBkb2ZpbGNyYyh5KTsKLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQkJCXNqLnhfc2hvcnQgPSB5IHwgMHg4MDsKLQkJCWRlYnVnKEYwMDEsIlhHTkJZVEUgS0FO QSBTSiIsIiIsc2oueF9zaG9ydCk7Ci0JCSAgICB9IGVsc2UgewotCQkJLyogU29tZXRoaW5nIHRo YXQgdHJhbnNsYXRlcyB0byBVK0ZGRkQgKi8KLQkJCXNqLnhfc2hvcnQgPSBVTktTSklTOwotCQkg ICAgfQotCQl9Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIGhhdmVzaiA9IDE7CQkJLyogSGF2ZSBT aGlmdC1KSVMgKi8KLSNpZmRlZiBVTklDT0RFCi0JICAgIHVjLnhfc2hvcnQgPSBzal90b191bihz ai54X3Nob3J0KTsgLyogVHJhbnNsYXRlIHRvIFVDUy0yICovCi0JICAgIGhhdmV1YyA9IDE7CQkJ LyogSGF2ZSBVbmljb2RlICovCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotCSAgICBmbGFnID0gMTsJ CQkvKiBIYXZlIGEgY2hhciAqLwotCX0KLSNlbmRpZiAvKiBLQU5KSSAqLwotICAgIH0KLSAgICBp ZiAoIWZsYWcpIHsJCQkvKiBJZiBubyBjaGFyYWN0ZXIgd2FzIHJlYWQgeWV0Li4uICovCi0JaWYg KCh4ID0gKGZuID8gKCpmbikoKSA6IHptaW5jaGFyKCkpKSA+IC0xKQkvKiByZWFkIG9uZSBub3cg Ki8KLQkgIGZmYysrOwotCWRlYnVnKEYxMDEsInhnbmJ5dGUgem1pbmNoYXIgMSIsIiIseCk7Ci0J aWYgKHggPCAwKQotCSAgcmV0dXJuKHgpOwotCWhhdmV1YyA9IDA7Ci0gICAgfQotI2lmZGVmIFVO SUNPREUKLSAgICBpZiAoaGF2ZXVjKSB7Ci0JdGhpc2NoYXIgPSB1Yy54X3Nob3J0OwotCS8qIGxh c3R1Y3MyID0gdWMueF9zaG9ydDsgKi8KLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBVTklDT0RFICov Ci0gICAgICB0aGlzY2hhciA9IHg7Ci0gICAgZGVidWcoRjAwMSwieGduYnl0ZSB0aGlzY2hhciIs aGF2ZXVjID8gIltVTklDT0RFXSIgOiAiW290aGVyXSIsdGhpc2NoYXIpOwotCi0jaWZkZWYgQ0tf Q1RSTFoJCQkJLyogU0VUIEVPRiBDVFJMWiAqLwotICAgIGlmIChlb2ZtZXRob2QgPT0gWFlFT0Zf WiAmJiAhYmluYXJ5ICYmIHRoaXNjaGFyID09IDI2KSB7Ci0JZGVidWcoRjEwMCwieGduYnl0ZSBF T0Ygb24gQ3RybC1aIDEiLCIiLDApOwotCXJldHVybigtMSk7Ci0gICAgfQotI2VuZGlmIC8qIENL X0NUUkxaICovCi0KLSNpZmRlZiBVTklDT0RFCi0gICAgaWYgKCFoYXZldWMpCQkJLyogSWYgbm90 IFVuaWNvZGUuLi4gKi8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgICB4ICY9IGZtYXNrOwkJ CS8qIEFwcGx5IFNFVCBGSUxFIEJZVEVTSVpFIG1hc2sgKi8KLQotICAgIHN3aXRjaCAoeGxhdHlw ZSkgewkJCS8qIFRyYW5zbGF0aW9uIHR5cGUuLi4gKi8KLSNpZmRlZiBVTklDT0RFCi0gICAgICBj YXNlIFhMQV9VTklDT0RFOiB7CQkvKiBVbmljb2RlIGlzIGludm9sdmVkICovCi0JICB4YyA9IDA7 Ci0vKgotICBIZXJlIHdlIG11c3QgY2hvb3NlIHRoZSBhcHByb3ByaWF0ZSB0cmFuc2xhdGlvbiBm dW5jdGlvbi4gIElmIHdlIGFyZSBiZWluZwotICBjYWxsZWQgYnkgZ2V0cGt0KCkgKGkuZS4gd2hl biB0cmFuc2ZlcnJpbmcgYSBmaWxlKSwgd2UgYXJlIHRyYW5zbGF0aW5nIGZyb20KLSAgVW5pY29k ZSB0byB0aGUgVHJhbnNmZXIgQ2hhcmFjdGVyIFNldCBhbmQgdGhlcmVmb3JlIG11c3QgdXNlIHRo ZSBmdW5jdGlvbgotICBwb2ludGVkIHRvIGJ5IHh1dC4gIE90aGVyd2lzZSwgZS5nLiBkdXJpbmcg VFJBTlNMQVRFLCBDT05ORUNULCBUUkFOU01JVCwgZXRjLAotICB3ZSBhcmUgdHJhbnNsYXRpbmcg ZnJvbSBVbmljb2RlIHRvIHRoZSBGaWxlIENoYXJhY3RlciBTZXQgYW5kIHNvIG11c3QgY2FsbAot ICB0aGUgZnVuY3Rpb24gcG9pbnRlZCB0byBieSB4dWYuICBUaGVyZSBtaWdodCBiZSBhIGNsZWFu ZXIgd2F5IHRvIHNldCB0aGlzCi0gIHVwIGJ1dCBJIGRvbid0IHRoaW5rIHNvLiAgRm9yIGV4YW1w bGUsIHNldHhsYXR5cGUoKSBtaWdodCBoYXZlIGJlZW4gY2FsbGVkCi0gIHRvbyBzb29uIGFuZCBz byBtaWdodCBub3QgaGF2ZSBrbm93biB3aGV0aGVyIGl0IHdhcyBhIGZpbGUgdHJhbnNmZXIgb3Ig YQotICBsb2NhbCBvcGVyYXRpb24uCi0qLwotLyoKLSAgKE1hbnkgeWVhcnMgbGF0ZXIuLi4pIElu IHRlc3RpbmcgdGhpcyBjb2RlIEkgbm90aWNlZCB0aGF0IFRSQU5TTEFURSdpbmcKLSAgUnVzc2lh biB0ZXh0IGZyb20gVVRGLTggdG8gSVNPIExhdGluL0N5cmlsbGljIHByb2R1Y2VkIGFsbCBxdWVz dGlvbiBtYXJrcy4KLSAgUmVyZWFkaW5nIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGggaXQgc2VlbXMg dG8gbWUgd2UgYXJlIChJIGFtKSBvdmVybG9hZGluZwotICB0aGlzIGZ1bmN0aW9uIHdpdGggcmVz cG9uc2liaWxpdGVzLCBzYXRpc2Z5aW5nIHRoZSBuZWVkcyBvZiBmaWxlIHRyYW5zZmVyCi0gIChs b2NhbCBmaWxlIGNoYXJzZXQgLT4gdHJhbnNmZXIgY2hhcnNldCBmb3Igb3V0Ym91bmQgcGFja2V0 KSBhbmQgbG9jYWwgZmlsZQotICBjb252ZXJzaW9uLiAgSW4gdGhlIGNhc2Ugb2YgVFJBTlNMQVRF LCB3ZSBjYWxsICh4Z25ieXRlKCksIHhwbmJ5dGUoKSkgaW4gYQotICBsb29wLCBleHBlY3Rpbmcg dGhlIHhnbmJ5dGUoKSB3aWxsIGZlZWQgVUNTMiB0byB4cG5ieXRlKCkuICBCdXQgdGhlCi0gIGZv bGxvd2luZyBjb2RlIGRvZXMgd2hhdCB4cG5ieXRlKCkgaXMgZ29pbmcgdG8gZG8sIHJldHVybmlu ZyAoaW4gdGhpcyBjYXNlKQotICBhbiBJU08gTGF0aW4vQ3lyaWxsaWMgYnl0ZSBzdHJlYW0sIHdo aWNoIHhwbmJ5dGUoKSBiZWxpZXZlcyB0byBiZSBVQ1MyLCBhbmQKLSAgY29tZXMgdXAgd2l0aCBu b25zZW5zZS4gIE5vdCB3YW50aW5nIHRvIHJpcCB0aGUgd2hvbGUgdGhpbmcgYXBhcnQgYW5kIHN0 YXJ0Ci0gIG92ZXIsIEkgbWFkZSB0aGUgZm9sbG93aW5nIGNoYW5nZSB0aGF0IHNob3VsZCBkbyBu byBoYXJtLCB1cG9uIG9ic2VydmluZwotICB0aGF0IGlmIHRoZSBpbnB1dCBjaGFyYWN0ZXIgc2V0 IGlzIFVURi04IG9yIFVDUy0yLCB0aGVuIHdoZW4gd2UgZ2V0IGhlcmUgaXQKLSAgaGFzIGFscmVh ZHkgYmVlbiBjb252ZXJ0ZWQgdG8gVUNTMiwgc28gaWYgd2UgYXJlIG5vdCB0cmFuc2ZlcnJpbmcg YSBmaWxlLCB3ZQotICBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGVsc2UgZXhjZXB0IHB1dCB0 aGUgYnl0ZXMgaW4gdGhlIHJpZ2h0IHBsYWNlIHRvIGJlCi0gIHJldHVybmVkLCB3aGljaCBpcyBk b25lIGZ1cnRoZXIgYWxvbmcuCi0qLwotI2lmZGVmIENPTU1FTlQKLQkgIC8qIFByZXZpb3VzIGNv ZGUgKi8KLQkgIHh4ID0gKHdoYXQgJiBXX1NFTkQpID8geHV0IDogeHVmOwotI2Vsc2UKLQkgIC8q IE5ldyBjb2RlIDIwMTEtMDYtMDMgKi8KLQkgIGlmICh3aGF0ICYgV19TRU5EKSB7Ci0JICAgICAg eHggPSB4dXQ7Ci0JICB9IGVsc2UgewotCSAgICAgIGlmIChmY3MgPT0gRkNfVUNTMiB8fCBmY3Mg PT0gRkNfVVRGOCkKLQkJeHggPSBOVUxMOwotCSAgICAgIGVsc2UKLQkJeHggPSB4dWY7Ci0JICB9 Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCi0JICBlb2xmbGFnID0gMDsKLQkgIGlmIChoYXZldWMp IHsJCQkvKiBGaWxlIGlzIFVuaWNvZGUgKi8KLQkgICAgICAvKiBTZWUgVW5pY29kZSBUUjEzLCAi Q29udmVydGluZyB0byBPdGhlciBDaGFyYWN0ZXIgU2V0cyIgKi8KLQkgICAgICBpZiAodWMueF9z aG9ydCA9PSAweDIwMjggfHwgLyogTGluZSBTZXBhcmF0b3I/ICovCi0JCSAgdWMueF9zaG9ydCA9 PSAweDIwMjkgfHwgLyogUGFyYWdyYXBoIFNlcGFyYXRvciAqLwotCQkgIChmZW9sICYmICh1Yy54 X3Nob3J0ID09IChVU0hPUlQpZmVvbCkpCi0JCSAgKSB7Ci0JCSAgZGVidWcoRjAwMSwieGduYnl0 ZSB1YyBlb2wiLCIiLHVjLnhfc2hvcnQpOwotCQkgIHJjID0gMDsKLQkJICBlb2xmbGFnID0gMTsJ CS8qIERvbid0IHRyYW5zbGF0ZSBhbmQgaGFuZGxlIGxhdGVyICovCi0JICAgICAgfQotCSAgICAg IGlmICh4eCAmJiAhZW9sZmxhZykgewkvKiBVQ1MtdG8tVENTIGZ1bmN0aW9uIChVQ1MtPmJ5dGUp ICovCi0JCSAgcmMgPSAoKnh4KSh1Yy54X3Nob3J0KTsgLyogVGhlc2UgY2FuIGZhaWwuLi4gKi8K LQkJICBkZWJ1ZyhGMTAxLCJ4Z25ieXRlIHh4IHJjIiwiIixyYyk7Ci0JCSAgaWYgKHJjIDwgMCkJ CS8qIElmIGl0IGNhbid0IGJlIHRyYW5zbGF0ZWQgKi8KLQkJICAgIHVjLnhfc2hvcnQgPSBVTks7 CS8qIFB1dCB1bmtub3duLWNoYXJhY3RlciBzeW1ib2wgKi8KLQkJICBlbHNlCi0JCSAgICB1Yy54 X3Nob3J0ID0gKHVuc2lnbmVkKSgodW5zaWduZWQpcmMgJiAweGZmZmYpOwotCQkgIGRlYnVnKEYx MDEsInhnbmJ5dGUgeHggdWMiLCIiLHVjLnhfc2hvcnQpOwotCSAgICAgIH0KLSNpZmRlZiBLQU5K SQotCSAgICAgIGlmICh0Y3MgPT0gRkNfSkVVQykgewkvKiBUcmFuc2xhdGluZyB0byBFVUMtSlAg Ki8KLQkJICBVU0hPUlQgc2ogPSAwOwotCQkgIHVuaW9uIGNrX3Nob3J0IGV1OwotCQkgIGRlYnVn KEYwMDEsInhnbmJ5dGUgVUNTLT5FVUMgVUNTIiwiIix1Yy54X3Nob3J0KTsKLQkJICBpZiAoIWhh dmVzaikJCS8qIElmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBpdCAqLwotCQkgICAgc2ogPSB1bl90 b19zaih1Yy54X3Nob3J0KTsgLyogY29udmVydCB0byBTaGlmdC1KSVMgKi8KLQkJICBldS54X3No b3J0ID0gc2pfdG9fZXUoc2opOwotCQkgIGRlYnVnKEYwMDEsInhnbmJ5dGUgVUNTLT5FVUMgRVVD IiwiIixldS54X3Nob3J0KTsKLQkJICB4bGFwdHIgPSAwOwotCQkgIHhsYWNvdW50ID0gMDsKLQkJ ICBpZiAoZW9sZmxhZykgewotCQkgICAgICBpZiAod2hhdCAmIFdfU0VORCkgewotCQkJICB4bGFi dWZbeGxhY291bnQrK10gPSBMRjsKLQkJCSAgcmV0dXJuKENSKTsKLQkJICAgICAgfSBlbHNlIHsK LQkJCSAgcmV0dXJuKGZlb2wpOwotCQkgICAgICB9Ci0JCSAgfQotCQkgIGlmIChldS54X2NoYXJb Ynl0ZW9yZGVyXSkgewkvKiBUd28gYnl0ZXMgKi8KLQkJICAgICAgcmMgPSBldS54X2NoYXJbYnl0 ZW9yZGVyXTsKLQkJICAgICAgeGxhYnVmW3hsYWNvdW50KytdID0gZXUueF9jaGFyWzEtYnl0ZW9y ZGVyXTsKLQkJICAgICAgZGVidWcoRjAwMSwieGduYnl0ZSBVQ1MtPkVVQyB4bGFidWZbMF0iLCIi LHhsYWJ1ZlswXSk7Ci0JCSAgfSBlbHNlIHsJCS8qIE9uZSBieXRlICovCi0JCSAgICAgIHJjID0g ZXUueF9jaGFyWzEtYnl0ZW9yZGVyXTsKLQkJICB9Ci0JCSAgZGVidWcoRjEwMSwieGduYnl0ZSBV Q1MtPkVVQyB4bGFjb3VudCIsIiIseGxhY291bnQpOwotCQkgIGRlYnVnKEYwMDEsInhnbmJ5dGUg VUNTLT5FVUMgcmMiLCIiLHJjKTsKLQkJICByZXR1cm4ocmMpOwotCSAgICAgIH0gZWxzZQotI2Vu ZGlmIC8qIEtBTkpJICovCi0JICAgICAgaWYgKHRjcyAhPSBGQ19VQ1MyICYmIHRjcyAhPSBGQ19V VEY4KSB7Ci0JCSAgaWYgKHVjLnhfc2hvcnQgJiAweGZmMDApIHsJLyogRGVjb2RpbmcgZXJyb3Ig Ki8KLQkJICAgICAgZGVidWcoRjAwMSwieGduYnl0ZSBkZWNvZGluZyBlcnJvciIsIiIsdWMueF9z aG9ydCk7Ci0JCSAgICAgIHJldHVybigtMik7Ci0JCSAgfSBlbHNlCi0JCSAgICByZXR1cm4oKHVu c2lnbmVkIGludCkodWMueF9zaG9ydCAmIDB4ZmYpKTsKLQkgICAgICB9Ci0JICAgICAgeGMgPSB1 Yy54X3Nob3J0OwotCi0JICB9IGVsc2UgewkJCS8qIEZpbGUgaXMgbm90IFVuaWNvZGUgKi8KLQkg ICAgICBVU0hPUlQgY2g7Ci0JICAgICAgLyogVHJhbnNsYXRlIGZyb20gc2luZ2xlIEZDUyBieXRl IHRvIFVDUy0yICovCi0vKgotICBUaGlzIGlzIGEgYml0IG5vbm9idmlvdXMuLi4gIFRoZSBibGFo X3UoKSAoQmxhaC10by1Vbmljb2RlKSByb3V0aW5lcyBhcmUKLSAgY2FsbGVkIG9ubHkgd2l0aCBw aWVjZXMgb2YgY2hhcmFjdGVyIHNldHMsIGluIHRoZSBJU08gMjAyMiBzZW5zZS4gIFNvLAotICBm b3IgZXhhbXBsZSwgaWYgY2ggaXMgYSBMYXRpbi0xIGNoYXJhY3Rlciwgd2UgY2FsbCB0aGUgdHJh bnNsYXRpb24KLSAgcm91dGluZSBvbmx5IGlmIGl0IGlzIGluIHRoZSByaWdodCBoYWxmOyBpZiBp dCdzIGluIHRoZSBsZWZ0IGhhbGYsIGl0Ci0gIGlzbid0IHRyYW5zbGF0ZWQsIGFuZCBpbiBmYWN0 IHdpbGwgZ2l2ZSB0aGUgd3JvbmcgcmVzdWx0IGlmIHNlbnQgdG8gdGhlCi0gIHRyYW5zbGF0aW9u IGZ1bmN0aW9uLiAgVGhhdCdzIGJlY2F1c2UgdGhvc2UgZnVuY3Rpb25zIHdlcmUgZGVzaWduZWQg Zm9yCi0gIHVzZSB3aXRoIHRoZSBJU08gMjAyMiBHMC4uRzMgc2V0cywgbm90IGZvciBmaWxlIHRy YW5zZmVyLiAgT24gdGhlIG90aGVyCi0gIGhhbmQsIGlmIGl0J3MgYSA3LWJpdCBjaGFyYWN0ZXIg c2V0LCB3ZSAqZG8qIGNhbGwgdGhlIHRyYW5zbGF0aW9uCi0gIGZ1bmN0aW9uLiAgKFRvIHB1dCBp dCBhbm90aGVyIHdheSwgdGhlIGxlZnQgaGFsZiBvZiBhbnkgOC1iaXQgY2hhcmFjdGVyCi0gIHNl dCBpcyBBU0NJSSBhbmQgdGhlcmVmb3JlIGRvZXNuJ3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkIGJ1 dCA3LWJpdCBzZXRzCi0gIHN1Y2ggYXMgSVNPIDY0NiBHZXJtYW4gZG8gbmVlZCB0cmFuc2xhdGlv bikuCi0qLwotCSAgICAgIGNoID0gKHVuc2lnbmVkKSh0aGlzY2hhciAmIDB4ZmYpOwotCSAgICAg IGlmICgoKGZjc2luZm9bZmNzXS5zaXplID4gMTI4KSAmJiAoY2ggJiAweDgwKSkgfHwKLQkJICBm Y3NpbmZvW2Zjc10uc2l6ZSA8PSAxMjgpIHsKLQkJICBpZiAoeGZ1KSB7CQkgLyogRkNTLXRvLVVD UyBmdW5jdGlvbiAqLwotCQkgICAgICBjaCA9ICgqeGZ1KShjaCk7Ci0JCSAgfQotCSAgICAgIH0K LQkgICAgICB4YyA9IGNoOwotCSAgfQotCSAgLyogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGEgVUNT LTIgY2hhcmFjdGVyIGluIG5hdGl2ZSBmb3JtYXQgKi8KLQkgIC8qIChCaWcgRW5kaWFuIG9yIExp dHRsZSBFbmRpYW4pIGluIHhjLCB3aGljaCBpcyBhbiB1bnNpZ25lZCBpbnQuICovCi0KLQkgIGRl YnVnKEYwMDEsInhnbmJ5dGUgeGMiLCIiLHhjKTsKLQotCSAgaWYgKHRjcyA9PSBGQ19VVEY4KSB7 CQkvKiBOb3cgY29udmVydCB0byBVVEYtOCAqLwotCSAgICAgIFVTSE9SVCBjOwkJCS8qIE5PVEU6 IHRoaXMgaXMgRkNfVVRGOCBvbiBwdXJwb3NlISAqLwotCSAgICAgIENIQVIgKiBidWYgPSBOVUxM OwotCSAgICAgIGludCBpLCBrID0gMCwgeDsKLQotCSAgICAgIHhsYXB0ciA9IDA7Ci0JICAgICAg aWYgKHV0ZmVycm9yKSB7Ci0JCSAgeGxhYnVmW2srK10gPSAweGZmOwotCQkgIHhsYWJ1ZltrKytd ID0gMHhiZDsKLQkgICAgICB9Ci0JICAgICAgaWYgKGVvbGZsYWcpIHsJCS8qIFdlIGRldGVjdGVk IEVPTCBpbiBzb3VyY2UgZmlsZSAqLwotCQkgIGlmICh3aGF0ICYgV19TRU5EKSB7CS8qIENvbnZl cnQgdG8gQ1JMRiAqLwotCQkgICAgICB4bGFidWZbaysrXSA9IExGOwotCQkgICAgICB4bGFjb3Vu dCA9IGs7Ci0JCSAgICAgIHJldHVybigodW5zaWduZWQgaW50KUNSKTsKLSNpZmRlZiBDT01NRU5U Ci0JCSAgfSBlbHNlIHsJCS8qIE9yIHRvIGxvY2FsIGxpbmUtZW5kICovCi0JCSAgICAgIHhsYWNv dW50ID0gazsKLQkJICAgICAgcmV0dXJuKCh1bnNpZ25lZCBpbnQpZmVvbCk7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotCQkgIH0KLQkgICAgICB9Ci0JICAgICAgYyA9IHhjOwotCSAgICAgIGlmICgo eCA9IHVjczJfdG9fdXRmOChjLCZidWYpKSA8IDEpIHsKLQkJICBkZWJ1ZyhGMTAxLCJ4Z25ieXRl IHVjczJfdG9fdXRmOCBlcnJvciIsIiIsYyk7Ci0JCSAgcmV0dXJuKC0yKTsKLQkgICAgICB9Ci0J ICAgICAgZGVidWcoRjEwMSwieGduYnl0ZSBVVEY4IGJ1ZlswXSIsIiIsYnVmWzBdKTsKLQkgICAg ICBmb3IgKGkgPSAxOyBpIDwgeDsgaSsrKSB7Ci0JCSAgeGxhYnVmW2sraS0xXSA9IGJ1ZltpXTsK LQkJICBkZWJ1ZyhGMTExLCJ4Z25ieXRlIFVURjggeGxhYnVmIixja2l0b2EoaS0xKSxidWZbaV0p OwotCSAgICAgIH0KLQkgICAgICB4bGFwdHIgPSAwOwotCSAgICAgIHhsYWNvdW50ID0geCAtIDE7 Ci0JICAgICAgZGVidWcoRjEwMSwieGduYnl0ZSBVVEY4IHhsYWNvdW50IiwiIix4bGFjb3VudCk7 Ci0JICAgICAgcmV0dXJuKCh1bnNpZ25lZCBpbnQpYnVmWzBdKTsKLQkgIH0gZWxzZSB7CQkJLyog T3Iga2VlcCBpdCBhcyBVQ1MtMiAqLwotCSAgICAgIGludCBrID0gMDsKLQkgICAgICBDSEFSIGM7 Ci0JICAgICAgeGxhcHRyID0gMDsKLQkgICAgICBpZiAodXRmZXJyb3IpIHsKLQkJICB4bGFidWZb aysrXSA9IDB4ZmY7Ci0JCSAgeGxhYnVmW2srK10gPSAweGZkOwotCQkgIGRlYnVnKEYxMDEsInhn bmJ5dGUgZXJyb3IiLCIiLGspOwotCSAgICAgIH0KLQkgICAgICBpZiAoZW9sZmxhZykgewkJLyog V2UgZGV0ZWN0ZWQgRU9MIGluIHNvdXJjZSBmaWxlICovCi0JCSAgaWYgKHdoYXQgJiBXX1NFTkQp IHsJLyogQ29udmVydCB0byBDUkxGICovCi0JCSAgICAgIHhsYWJ1ZltrKytdID0gQ1I7Ci0JCSAg ICAgIHhsYWJ1ZltrKytdID0gTlVMOwotCQkgICAgICB4bGFidWZbaysrXSA9IExGOwotCQkgICAg ICB4bGFjb3VudCA9IGs7Ci0JCSAgICAgIGRlYnVnKEYxMDEsInhnbmJ5dGUgc2VuZCBDUkxGIiwi IixrKTsKLQkJICAgICAgcmV0dXJuKDApOwkvKiBSZXR1cm4gTlVMICovCi0JCSAgfSBlbHNlIHsJ CS8qIE9yIHRvIGxvY2FsIGxpbmUtZW5kICovCi0jaWZkZWYgQ09NTUVOVAotCQkgICAgICAvKiBU aGlzIGJ5cGFzc2VzIGJ5dGUgc3dhcHBpbmcgdGhhdCB3ZSBtaWdodCBuZWVkICovCi0JCSAgICAg IHhsYWJ1ZltrKytdID0gKENIQVIpZmVvbDsKLQkJICAgICAgeGxhY291bnQgPSBrOwotCQkgICAg ICBkZWJ1ZyhGMTAxLCJ4Z25ieXRlIHNlbmQgZmVvbCIsIiIsayk7Ci0JCSAgICAgIHJldHVybigw KTsJLyogUmV0dXJuIE5VTCAqLwotI2Vsc2UKLQkJICAgICAgeGMgPSAoQ0hBUilmZW9sOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQkJICB9Ci0JICAgICAgfQotCSAgICAgIC8qIEluIHdoaWNoIG9y ZGVyIHNob3VsZCB3ZSByZXR1cm4gdGhlIGJ5dGVzPyAqLwotI2lmZGVmIENPTU1FTlQKLQkgICAg ICBpZiAoICh3aGF0ICYgV19TRU5EKSB8fCAod2hhdCAmIFdfRlRQKSB8fCAoZmlsZW9yZGVyID09 IDApKSB7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQkgIC8qIEFMV0FZUyBSRVRVUk4gSU4gQklH IEVORElBTiBPUkRFUi4uLiA3IFNlcCAyMDAyICAgKi8KLQkJICAvKiB4Z25ieXRlKCkgaXMgYWxt b3N0IGFsd2F5cyB1c2VkIHRvIGZlZWQgeHBuYnl0ZSgpICovCi0JCSAgLyogd2hpY2ggcmVxdWly ZXMgYnl0ZXMgaW4gQkUgb3JkZXIuIEluIGNhc2VzIHdoZXJlICAqLwotCQkgIC8qIHhnbmJ5dGUg aXMgdXNlZCBpbiBpc29sYXRpb24sIHRoZSBjYWxsZXIgY2FuIHN3YXAgKi8KLQkJICAvKiBieXRl cyBpdHNlbGYgYWZ0ZXJ3YXJkcy4gKi8KLQkJICB4bGFidWZbaysrXSA9ICh4YyA+PiA4KSAmIDB4 ZmY7IC8qIEJpZyBFbmRpYW4gKi8KLQkJICB4bGFidWZbaysrXSA9IHhjICYgMHhmZjsKLQkJICBk ZWJ1ZyhGMDAxLCJ4Z25ieXRlLT5VQ1MyQkUiLAotCQkJY2tpdG94KChpbnQpeGxhYnVmWzBdKSx4 bGFidWZbMV0pOwotI2lmZGVmIENPTU1FTlQKLQkgICAgICB9IGVsc2UgewkJCS8qIExpdHRsZSBF bmRpYW4gKi8KLQkJICB4bGFidWZbaysrXSA9IHhjICYgMHhmZjsKLQkJICB4bGFidWZbaysrXSA9 ICh4YyA+PiA4KSAmIDB4ZmY7Ci0JCSAgZGVidWcoRjAwMSwieGduYnl0ZS0+VUNTMkxFIiwKLQkJ CWNraXRveCgoaW50KXhsYWJ1ZlswXSkseGxhYnVmWzFdKTsKLQkgICAgICB9Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotCSAgICAgIGMgPSB4bGFidWZbMF07Ci0JICAgICAgeGxhcHRyID0gMTsKLQkg ICAgICB4bGFjb3VudCA9IGstMTsKLQkgICAgICBkZWJ1ZyhGMTAxLCJ4Z25ieXRlIGMiLCIiLGMp OwotCSAgICAgIGRlYnVnKEYxMDEsInhnbmJ5dGUgeGxhcHRyIiwiIix4bGFwdHIpOwotCSAgICAg IGRlYnVnKEYwMTEsInhnbmJ5dGUgeGxhYnVmIix4bGFidWYseGxhY291bnQpOwotCSAgICAgIHJl dHVybigodW5zaWduZWQgaW50KWMpOwotCSAgfQotICAgICAgfQotI2VuZGlmIC8qIFVOSUNPREUg Ki8KLSAgICAgIGNhc2UgWExBX05PTkU6Ci0JcmV0dXJuKChmbiA/ICgqZm4pKCkgOiB6bWluY2hh cigpKSk7Ci0gICAgICBjYXNlIFhMQV9CWVRFOgkJCS8qIEJ5dGUtZm9yLUJ5dGUgdHJhbnNsYXRp b24gKi8KLQlydCA9IHg7Ci0JaWYgKHN4KQotCSAgcnQgPSAoKnN4KShydCk7Ci0jaWZkZWYgVU5J Q09ERQotCWlmICh1dGZlcnJvcikgewotCSAgICB4bGFwdHIgPSAwOwotCSAgICB4bGFjb3VudCA9 IDE7Ci0JICAgIHhsYWJ1ZlswXSA9IHJ0OwotCSAgICByZXR1cm4oVU5LKTsKLQl9IGVsc2UKLSNl bmRpZiAvKiBVTklDT0RFICovCi0JICByZXR1cm4oKHVuc2lnbmVkIGludClydCk7Ci0KLSNpZmRl ZiBLQU5KSQotICAgICAgY2FzZSBYTEFfSkFQQU46CQkJLyogQ29tZSBoZXJlIHdpdGggU2hpZnQt SklTICovCi0JaWYgKHRjcyA9PSBGQ19KRVVDKSB7CQkvKiBJdCBiZXR0ZXIgYmUuLi4gKi8KLQkg ICAgeGxhcHRyID0gMDsKLQkgICAgeGxhY291bnQgPSAwOwotCSAgICBpZiAoIWhhdmVzaikgewot CQlwcmludGYoIkJBRCBCQURcbiIpOwotCQlyZXR1cm4oLTIpOwotCSAgICB9Ci0JICAgIGlmICgh aGF2ZWV1KQkJLyogV2UgbWlnaHQgYWxyZWFkeSBoYXZlIEVVQyB0b28gKi8KLQkgICAgICBldS54 X3Nob3J0ID0gc2pfdG9fZXUoc2oueF9zaG9ydCk7Ci0JICAgIGlmIChldS54X2NoYXJbYnl0ZW9y ZGVyXSkgewotCQl4bGFidWZbeGxhY291bnQrK10gPSBldS54X2NoYXJbMS1ieXRlb3JkZXJdOwot CQlyZXR1cm4oZXUueF9jaGFyW2J5dGVvcmRlcl0pOwotCSAgICB9IGVsc2UgewotCQlyZXR1cm4o ZXUueF9jaGFyWzEtYnl0ZW9yZGVyXSk7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JfQotI2VuZGlm IC8qIEtBTkpJICovCi0KLSAgICAgIGRlZmF1bHQ6Ci0JZGVidWcoRjEwMSwieGduYnl0ZSBiYWQg eGxhdHlwZSIsIiIseGxhdHlwZSk7Ci0JcmV0dXJuKC0yKTsKLSAgICB9Ci0jaWZkZWYgQ09NTUVO VAotLyogICAgCi0gIElmIHRoZXJlIGlzIGEgcmV0dXJuKCkgc3RhdGVtZW50IGhlcmUsIHNvbWUg Y29tcGlsZXJzIGNvbXBsYWluCi0gIGFib3V0ICJzdGF0ZW1lbnQgbm90IHJlYWNoZWQiLiAgSWYg dGhlcmUgaXMgbm8gcmV0dXJuKCkgc3RhdGVtZW50LAotICBvdGhlciBjb21waWxlcnMgY29tcGxh aW4gdGhhdCAiTm9uLXZvaWQgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIHZhbHVlIi4KLSAgVGhl cmUgaXMgbm8gcGF0aCB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gdGhhdCBmYWxscyB0aHJvdWdoIHRv IGhlcmUuCi0qLwotICAgIGRlYnVnKEYxMDAsInhnbmJ5dGUgc3dpdGNoIGZhaWx1cmUiLCIiLDAp OwotICAgIHJldHVybigtMik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotfQotI2VuZGlmIC8qIE5P Q1NFVFMgKi8KLQotI2lmbmRlZiBOT1hGRVIKLQotLyogIEcgRSBUIFAgSyBUICAtLSAgRmlsbCBh IHBhY2tldCBkYXRhIGZpZWxkIGZyb20gdGhlIGluZGljYXRlZCBzb3VyY2UuICAqLwotCi0vKgot ICBQYXJhbWV0ZXJzOgotICAgIGJ1Zm1heDogTWF4aW11bSBsZW5ndGggb2YgZW50aXJlIHBhY2tl dC4KLSAgICB4bGF0ZTogIEZsYWcgZm9yIHdoZXRoZXIgdG8gdHJhbnNsYXRlIGNoYXJzZXRzIHdo ZW4gaW4gdGV4dCBtb2RlLgotICBSZXR1cm5zOiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRl biB0byBwYWNrZXQgZGF0YSBmaWVsZCwgMCBvciBtb3JlLAotICAgICAgICAgICAgT3IgLTEgb24g ZmFpbHVyZSAoaW50ZXJuYWwgZXJyb3IpLAotICAgICAgICAgICAgb3IgLTMgb24gdGltZW91dCAo ZS5nLiB3aGVuIHJlYWRpbmcgZnJvbSBhIHBpcGUpLgotCi0gIFRoaXMgaXMgdGhlIGZ1bGwgdmVy c2lvbiBhbGxvd2luZyBmb3IgcGFyaXR5IGFuZCB0ZXh0LW1vZGUgY29udmVyc2lvbnM7Ci0gIGku ZS4gaXQgd29ya3MgaW4gYWxsIGNhc2VzLiAgIEFsc28gc2VlIGJnZXRwa3QoKSwgYSBzcGVjaWFs IGxlYW4vbWVhbi9mYXN0Ci0gIHBhY2tldCBlbmNvZGVyIHRoYXQgd29ya3Mgb25seSBmb3IgYmlu YXJ5LW1vZGUgbm8tcGFyaXR5IHRyYW5zZmVycy4KLSovCi1zdGF0aWMgaW50IHVmbGFnID0gMDsK LQotaW50Ci1nZXRwa3QoYnVmbWF4LHhsYXRlKSBpbnQgYnVmbWF4LCB4bGF0ZTsgeyAvKiBGaWxs IG9uZSBwYWNrZXQgYnVmZmVyICovCi0gICAgcmVnaXN0ZXIgQ0hBUiBydCA9IHQsIHJuZXh0ID0g TlVMOwkgIC8qIFJlZ2lzdGVyIHNoYWRvd3Mgb2YgdGhlIGdsb2JhbHMgKi8KLSAgICByZWdpc3Rl ciBDSEFSICpkcCwgKm9kcCwgKm9kcDIsICpwMSwgKnAyOyAvKiBwb2ludGVycy4uLiAqLwotICAg IHJlZ2lzdGVyIGludCB4OwkJCS8qIExvb3AgaW5kZXguICovCi0gICAgcmVnaXN0ZXIgaW50IGE3 OwkJCS8qIExvdyA3IGJpdHMgb2YgY2hhcmFjdGVyICovCi0KLSAgICBDSEFSIHh4bHMsIHh4ZGws IHh4cmMsIHh4c3MsIHh4Y3E7CS8qIFBpZWNlcyBvZiBwcmVmaXhlZCBzZXF1ZW5jZSAqLwotCi0g ICAgaWYgKGJpbmFyeSkgeGxhdGUgPSAwOwkJLyogV2UgZG9uJ3QgdHJhbnNsYXRlIGlmIGJpbmFy eSAqLwotCi0gICAgaWYgKCFkYXRhKSB7Ci0JZGVidWcoRjEwMCwiU0VSSU9VUyBFUlJPUjogZ2V0 cGt0IGRhdGEgPT0gTlVMTCIsIiIsMCk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZHAgPSBk YXRhOwkJCQkvKiBQb2ludCB0byBwYWNrZXQgZGF0YSBidWZmZXIgKi8KLSAgICBzaXplID0gMDsJ CQkJLyogQW5kIGluaXRpYWxpemUgaXRzIHNpemUgKi8KLS8qCi0gIEFzc3VtZSBidWZtYXggaXMg dGhlIHJlY2VpdmVyJ3MgdG90YWwgcmVjZWl2ZS1wYWNrZXQgYnVmZmVyIGxlbmd0aC4KLSAgT3Vy IHdob2xlIHBhY2tldCBoYXMgdG8gZml0IGludG8gaXQsIHNvIHdlIGFkanVzdCB0aGUgZGF0YSBm aWVsZCBsZW5ndGguCi0gIFdlIGFsc28gZGVjaWRlIG9wdGltYWxseSB3aGV0aGVyIGl0IGlzIGJl dHRlciB0byB1c2UgYSBzaG9ydC1mb3JtYXQgb3IKLSAgbG9uZy1mb3JtYXQgcGFja2V0IHdoZW4g d2UncmUgbmVhciB0aGUgYm9yZGVybGluZS4KLSovCi0gICAgYnVmbWF4ID0gbWF4ZGF0YSgpOwkJ CS8qIEdldCBtYXhpbXVtIGRhdGEgbGVuZ3RoICovCi0KLSAgICBpZiAoZmlyc3QgPT0gMSkgewkJ CS8qIElmIGZpcnN0IGNoYXJhY3RlciBvZiB0aGlzIGZpbGUuLiAqLwotI2lmZGVmIFVOSUNPREUK LQkvKiBTcGVjaWFsIGVuZC1vZi1saW5lIGhhbmRsaW5nIGZvciBVbmljb2RlICovCi0JaWYgKHRj aGFyc2V0ID09IFRDX1VDUzIgfHwgdGNoYXJzZXQgPT0gVENfVVRGOCkKLQkgIHVmbGFnID0gMTsK LSNlbmRpZiAvKiBVTklDT0RFICovCi0JZGVidWcoRjEwMSwiZ2V0cGt0IGZpcnN0IHVmbGFnIiwi Iix1ZmxhZyk7Ci0JZGVidWcoRjEwMSwiZ2V0cGt0IGZpcnN0IHJ0IiwiIixydCk7Ci0JaWYgKCFt ZW1zdHIgJiYgIWZ1bmNzdHIpCS8qIGFuZCByZWFsIGZpbGUuLi4gKi8KLQkgIGZmYyA9IChDS19P RkZfVCkwOwkJLyogcmVzZXQgZmlsZSBjaGFyYWN0ZXIgY291bnRlciAqLwotI2lmZGVmIENPTU1F TlQKLQkvKiBNb3ZlZCB0byBiZWxvdy4uLiAqLwotCWZpcnN0ID0gMDsJCQkvKiBOZXh0IGNoYXJh Y3RlciB3b24ndCBiZSBmaXJzdCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkqbGVmdG92ZXIg PSAnXDAnOwkJLyogRGlzY2FyZCBhbnkgaW50ZXJydXB0ZWQgbGVmdG92ZXJzICovCi0JbmxlZnQg PSAwOwotI2lmbmRlZiBOT0NTRVRTCi0Jc2V0eGxhdHlwZSh0Y2hhcnNldCxmY2hhcnNldCk7CS8q IFNldCB1cCBjaGFyc2V0IHRyYW5zbGF0aW9ucyAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQot CS8qIEdldCBmaXJzdCBjaGFyYWN0ZXIgb2YgZmlsZSBpbnRvIHJ0LCB3YXRjaGluZyBvdXQgZm9y IG51bGwgZmlsZSAqLwotCi0jaWZkZWYgQ0FMSUJSQVRFCi0JaWYgKGNhbGlicmF0ZSAmJiAhbWVt c3RyKSB7Ci0jaWZkZWYgTk9SQU5ET00KLQkgICAgeCA9IHJ0ID0gNTM7Ci0jZWxzZQotCSAgICB4 ID0gcnQgPSBjYWxfYVtyYW5kKCkgJiAweGZmXTsKLSNlbmRpZiAvKiBOT1JBTkRPTSAqLwotCSAg ICBmaXJzdCA9IDA7Ci0JICAgIGZmYysrOwotCX0gZWxzZQotI2VuZGlmIC8qIENBTElCUkFURSAq LwotI2lmZGVmIEtBTkpJCi0JaWYgKHhsYXRlICYmIHRjaGFyc2V0ID09IFRDX0pFVUMpIHsgLyog S2FuamkgdGV4dCAqLwotCSAgICB4ID0gemthbmpmKCk7Ci0JICAgIGlmICgoeCA9IHprYW5qaSht ZW1zdHIgPyBrZ2V0bSA6IGtnZXRmKSkgPCAwKSB7Ci0JICAgICAgICBmaXJzdCA9IC0xOwotCSAg ICAgICAgc2l6ZSA9IDA7Ci0JICAgICAgICBpZiAoeCA9PSAtMikgewotCSAgICAgICAgICAgIGRl YnVnKEYxMDAsImdldHBrdCB6a2Fuamk6IGlucHV0IGVycm9yIiwiIiwwKTsKLQkgICAgICAgICAg ICBjeHNlZW4gPSAxOwotCSAgICAgICAgfSBlbHNlIGRlYnVnKEYxMDAsImdldHBrdCB6a2Fuamk6 IGVtcHR5IHN0cmluZy9maWxlIiwiIiwwKTsKLQkgICAgICAgIHJldHVybigwKTsKLQkgICAgfQot CSAgICBydCA9IHg7Ci0JICAgIGZpcnN0ID0gMDsKLQkgICAgaWYgKCFtZW1zdHIpIHsKLQkJZmZj Kys7Ci0JCWlmIChkb2NyYyAmJiAod2hhdCAmIFdfU0VORCkpIC8qIEFjY3VtdWxhdGUgZmlsZSBj cmMgKi8KLQkJICBkb2ZpbGNyYygoaW50KXJ0KTsKLQkgICAgfQotCX0gZWxzZSB7CQkJLyogTm90 IEthbmppIHRleHQgKi8KLSNlbmRpZiAvKiBLQU5KSSAqLwotCSAgICBpZiAobWVtc3RyKSB7CQkv KiBSZWFkaW5nIGRhdGEgZnJvbSBtZW1vcnkgc3RyaW5nICovCi0JCS8qIFRoaXMgd2lsbCBub3Qg YmUgVW5pY29kZSAqLwotCQlpZiAoKHJ0ID0gKm1lbXB0cisrKSA9PSAnXDAnKSB7IC8qIGVuZCBv ZiBzdHJpbmcgPT0+IEVPRiAqLwotCQkgICAgZmlyc3QgPSAtMTsKLQkJICAgIHNpemUgPSAwOwot CQkgICAgZGVidWcoRjEwMCwiZ2V0cGt0OiBlbXB0eSBzdHJpbmciLCIiLDApOwotCQkgICAgcmV0 dXJuKDApOwotCQl9Ci0JCWZpcnN0ID0gMDsKLQkgICAgfSBlbHNlIGlmIChmdW5jc3RyKSB7CS8q IFJlYWRpbmcgZGF0YSBmcm9tIGEgZnVuY3Rpb24gKi8KLQkJLyogVGhpcyB3aWxsIG5vdCBiZSBV bmljb2RlICovCi0JCWlmICgoeCA9ICgqZnVuY3B0cikoKSkgPCAwKSB7IC8qIEVuZCBvZiBpbnB1 dCAgKi8KLQkJICAgIGZpcnN0ID0gLTE7Ci0JCSAgICBzaXplID0gMDsJCS8qIEVtcHR5ICovCi0J CSAgICByZXR1cm4oMCk7Ci0JCX0KLQkJZmZjKys7CQkJLyogQ291bnQgYSBmaWxlIGNoYXJhY3Rl ciAqLwotCQlydCA9IChDSEFSKSB4OwkJLyogQ29udmVydCBpbnQgdG8gY2hhciAqLwotCQlmaXJz dCA9IDA7Ci0JCWRlYnVnKEYwMDAsImdldHBrdCBmdW5jc3RyIiwiIixydCk7Ci0KLQkgICAgfSBl bHNlIHsJCQkvKiBSZWFkaW5nIGRhdGEgZnJvbSBhIGZpbGUgKi8KLSNpZm5kZWYgTk9DU0VUUwot CQlpZiAoeGxhdGUgJiYgIWJpbmFyeSkgewkvKiBDb3VsZCBiZSBVbmljb2RlICovCi0JCSAgICBp ZiAoeGxhdHlwZSA9PSBYTEFfVU5JQ09ERSkgewotCQkJLyogR2V0IG5leHQgdHJhbnNsYXRlZCBi eXRlICovCi0JCQl4ID0geGduYnl0ZShjc2VxdGFiW3RjaGFyc2V0XSxmY2hhcnNldCxOVUxMKTsK LQkJCWRlYnVnKEYxMDEsImdldHBrdCB4Z25ieXRlIiwiIix4KTsKLQkJICAgIH0gZWxzZSB7CQkv KiBOb3QgVW5pY29kZSAqLwotCQkJeCA9IHptaW5jaGFyKCk7CS8qIEdldCBuZXh0IGJ5dGUsIHRy YW5zbGF0ZSBiZWxvdyAqLwotCQkJZGVidWcoRjEwMSwiZ2V0cGt0IHptaW5jaGFyIEEiLCIiLHgp OwotCQkgICAgfQotCQl9IGVsc2UgewkJLyogSnVzdCBnZXQgbmV4dCBieXRlICovCi0jZW5kaWYg LyogTk9DU0VUUyAqLwotCQkgICAgeCA9IHptaW5jaGFyKCk7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJn ZXRwa3Qgem1pbmNoYXIgQiIsIiIseCk7Ci0jaWZuZGVmIE5PQ1NFVFMKLQkJfQotI2VuZGlmIC8q IE5PQ1NFVFMgKi8KLQkJaWYgKHggPCAwKSB7CQkvKiBFbmQgb2YgZmlsZSBvciBpbnB1dCBlcnJv ciAqLwotCQkgICAgaWYgKHggPT0gLTMpIHsJLyogVGltZW91dC4gKi8KLQkJCXNpemUgPSAoZHAt ZGF0YSk7Ci0JCQlkZWJ1ZyhGMTAxLCJnZXRwa3QgdGltZW91dCBzaXplIiwiIixzaXplKTsKLQkJ CXJldHVybigoc2l6ZSA9PSAwKSA/IHggOiBzaXplKTsKLQkJICAgIH0KLQkJICAgIGZpcnN0ID0g LTE7Ci0JCSAgICBzaXplID0gMDsKLQkJICAgIGlmICh4ID09IC0yKSB7CS8qIEVycm9yICovCi0J CQlkZWJ1ZyhGMTAwLCJnZXRwa3Q6IGlucHV0IGVycm9yIiwiIiwwKTsKLQkJCWN4c2VlbiA9IDE7 CS8qIEludGVycnVwdCB0aGUgZmlsZSB0cmFuc2ZlciAqLwotCQkgICAgfSBlbHNlIHsKLQkJCWRl YnVnKEYxMDAsImdldHBrdCBlbXB0eSBmaWxlIiwiIiwwKTsKLQkJICAgIH0KLQkJICAgIHJldHVy bigwKTsKLQkJfQotCQlmaXJzdCA9IDA7CQkvKiBOZXh0IGNoYXJhY3RlciB3b24ndCBiZSBmaXJz dCAqLwotCQlydCA9IChDSEFSKSB4OwkJLyogQ29udmVydCBpbnQgdG8gY2hhciAqLwotI2lmbmRl ZiBOT0NTRVRTCi0JCWlmICh4bGF0eXBlICE9IFhMQV9VTklDT0RFIHx8IGJpbmFyeSkgewotCQkg ICAgZmZjKys7Ci0JCSAgICBpZiAoc3gpCi0JCSAgICAgIHJ0ID0gKCpzeCkocnQpOwotCQkgICAg aWYgKGRvY3JjICYmICh3aGF0ICYgV19TRU5EKSkKLQkJICAgICAgZG9maWxjcmMoeCk7Ci0JCX0K LSNlbmRpZiAvKiBOT0NTRVRTICovCi0jaWZkZWYgREVCVUcKLQkJaWYgKGRlYmxvZykKLQkJICBk ZWJ1ZyhGMTAxLCJnZXRwa3QgMXN0IGNoYXIiLCIiLHJ0KTsKLSNlbmRpZiAvKiBERUJVRyAqLwot CQlpZiAoLyogIWhhdmV1YyAmJiAqLyBkb2NyYyAmJiAod2hhdCAmIFdfU0VORCkpIC8qIEZpbGUg Q1JDICovCi0JCSAgZG9maWxjcmMoeCk7Ci0JICAgIH0KLSNpZmRlZiBLQU5KSQotCX0KLSNlbmRp ZiAvKiBLQU5KSSAqLwotCS8qIFBXUDogaGFuZGxpbmcgb2YgZmVvbCBpcyBkb25lIGxhdGVyIChp biB0aGUgd2hpbGUgbG9vcCkuLi4gKi8KLQotICAgIH0gZWxzZSBpZiAoKGZpcnN0ID09IC0xKSAm JiAobmxlZnQgPT0gMCkpIHsgLyogRU9GIGZyb20gbGFzdCB0aW1lICovCi0jaWZkZWYgREVCVUcK LQlpZiAoZGVibG9nKSB7Ci0JICAgIGRlYnVnKEYxMDEsImdldHBrdCBlb2YgY3JjMTYiLCIiLGNy YzE2KTsKLQkgICAgZGVidWcoRjEwMSwiZ2V0cGt0IGVvZiBmZmMiLCIiLGZmYyk7Ci0JfQotI2Vu ZGlmIC8qIERFQlVHICovCi0gICAgICAgIHJldHVybihzaXplID0gMCk7Ci0gICAgfQotLyoKLSAg SGVyZSB3ZSBoYW5kbGUgY2hhcmFjdGVycyB0aGF0IHdlcmUgZW5jb2RlZCBmb3IgdGhlIGxhc3Qg cGFja2V0IGJ1dAotICBkaWQgbm90IGZpdCwgYW5kIHNvIHdlcmUgc2F2ZWQgaW4gdGhlICJsZWZ0 b3ZlciIgYXJyYXkuCi0qLwotICAgIGRlYnVnKEYxMDEsImdldHBrdCBubGVmdCIsIiIsbmxlZnQp OwotICAgIGlmIChubGVmdCkgewotCWZvciAocDEgPSBsZWZ0b3ZlcjsgbmxlZnQgPiAwOyBubGVm dC0tKSAvKiBDb3B5IGxlZnRvdmVycyAqLwotCSAgKmRwKysgPSAqcDErKzsKLQkqbGVmdG92ZXIg PSAnXDAnOwkJCS8qIERlbGV0ZSBsZWZ0b3ZlcnMgKi8KLQlubGVmdCA9IDA7Ci0gICAgfQotICAg IGlmIChmaXJzdCA9PSAtMSkJCQkvKiBIYW5kbGUgRU9GICovCi0gICAgICByZXR1cm4oc2l6ZSA9 IChkcCAtIGRhdGEpKTsKLQotLyogTm93IGZpbGwgdXAgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldC4g Ki8KLQotICAgIHJwdCA9IDA7CQkJCS8qIEluaXRpYWxpemUgY2hhcmFjdGVyIHJlcGVhdCBjb3Vu dCAqLwotCi0gICAgd2hpbGUgKGZpcnN0ID4gLTEpIHsJCS8qIFVudGlsIEVPRi4uLiAqLwotI2lm ZGVmIENBTElCUkFURQotCWlmIChjYWxpYnJhdGUgJiYgIW1lbXN0cikgewkvKiBXZSBnZW5lcmF0 ZSBvdXIgb3duICJmaWxlIiAqLwotCSAgICBpZiAoZmZjID49IGNhbGlicmF0ZSkgewkvKiBFT0Yg Ki8KLQkJZmlyc3QgPSAtMTsKLQkJZmZjLS07Ci0JICAgIH0gZWxzZSB7CQkJLyogR2VuZXJhdGUg bmV4dCBjaGFyYWN0ZXIgKi8KLQkJaWYgKGNhbF9qID4gQ0FMX00gKiBmZmMpCi0JCSAgY2FsX2og PSBjYWxfYVtmZmMgJiAweGZmXTsKLQkJeCA9ICh1bnNpZ25lZCljYWxfYVsoY2FsX2ogJiAweGZm KV07Ci0JCWlmICh4ID09IHJ0KSB4IF49IDI7Ci0JICAgIH0KLQkgICAgY2FsX2ogKz0gKHVuc2ln bmVkIGludCkoZmZjICsgQ0FMX08pOwotCSAgICBmZmMrKzsKLQl9IGVsc2UKLSNlbmRpZiAvKiBD QUxJQlJBVEUgKi8KLSNpZmRlZiBLQU5KSQotCSAgaWYgKHhsYXRlICYmIHRjaGFyc2V0ID09IFRD X0pFVUMpIHsKLQkgICAgICBpZiAoKHggPSB6a2FuamkobWVtc3RyID8ga2dldG0gOiBrZ2V0Zikp IDwgMCkgewotCQkgIGZpcnN0ID0gLTE7Ci0JCSAgaWYgKHggPT0gLTIpIGN4c2VlbiA9IDE7Ci0J ICAgICAgfSBlbHNlIGlmICghbWVtc3RyKSBmZmMrKzsKLQkgICAgICBybmV4dCA9IChDSEFSKSAo eCAmIGZtYXNrKTsKLQkgIH0gZWxzZSB7Ci0jZW5kaWYgLyogS0FOSkkgKi8KLQkgICAgaWYgKG1l bXN0cikgewkJLyogR2V0IG5leHQgY2hhciBmcm9tIG1lbW9yeSBzdHJpbmcgKi8KLQkJaWYgKCh4 ID0gKm1lbXB0cisrKSA9PSAnXDAnKSAvKiBFbmQgb2Ygc3RyaW5nIG1lYW5zIEVPRiAqLwotCQkg IGZpcnN0ID0gLTE7CQkvKiBGbGFnIEVPRiBmb3IgbmV4dCB0aW1lLiAqLwotCQlybmV4dCA9IChD SEFSKSAoeCAmIGZtYXNrKTsgLyogQXBwbHkgZmlsZSBtYXNrICovCi0JICAgIH0gZWxzZSBpZiAo ZnVuY3N0cikgewkvKiBHZXQgbmV4dCBjaGFyIGZyb20gZnVuY3Rpb24gKi8KLQkJaWYgKCh4ID0g KCpmdW5jcHRyKSgpKSA8IDApIC8qIEVuZCBvZiBzdHJpbmcgbWVhbnMgRU9GICovCi0JCSAgZmly c3QgPSAtMTsJCS8qIEZsYWcgRU9GIGZvciBuZXh0IHRpbWUuICovCi0JCXJuZXh0ID0gKENIQVIp ICh4ICYgZm1hc2spOyAvKiBBcHBseSBmaWxlIG1hc2sgKi8KLQkgICAgfSBlbHNlIHsJCQkvKiBG cm9tIGZpbGUuLi4gKi8KLSNpZm5kZWYgTk9DU0VUUwotCQlpZiAoeGxhdGUgJiYgIWJpbmFyeSkg ewkvKiBDb3VsZCBiZSBVbmljb2RlICovCi0JCSAgICBpZiAoeGxhdHlwZSA9PSBYTEFfVU5JQ09E RSkgewotCQkJLyogR2V0IG5leHQgdHJhbnNsYXRlZCBieXRlICovCi0JCQl4ID0geGduYnl0ZShj c2VxdGFiW3RjaGFyc2V0XSxmY2hhcnNldCxOVUxMKTsKLQkJICAgIH0gZWxzZSB7CQkvKiBOb3Qg VW5pY29kZSAqLwotCQkJeCA9IHptaW5jaGFyKCk7IC8qIEdldCBuZXh0IGJ5dGUsIHRyYW5zbGF0 ZSBiZWxvdyAqLwotCQkJLyogZGVidWcoRjEwMSwieGduYnl0ZSBCIHptaW5jaGFyIiwiIix4KTsg Ki8KLQkJICAgIH0KLQkJfSBlbHNlIHsJCS8qIEp1c3QgZ2V0IG5leHQgYnl0ZSAqLwotI2VuZGlm IC8qIE5PQ1NFVFMgKi8KLQkJICAgIHggPSB6bWluY2hhcigpOwotCQkgICAgLyogZGVidWcoRjEw MSwieGduYnl0ZSBDIHptaW5jaGFyIiwiIix4KTsgKi8KLSNpZm5kZWYgTk9DU0VUUwotCQl9Ci0j ZW5kaWYgLyogTk9DU0VUUyAqLwotCQlpZiAoeCA8IDApIHsJCS8qIENoZWNrIGZvciBFT0YgKi8K LQkJICAgIGlmICh4ID09IC0zKSB7CS8qIFRpbWVvdXQgcmVhZGluZyBmcm9tIHBpcGUgKi8KLQkJ CXQgPSBydDsKLQkJCXNpemUgPSAoZHAtZGF0YSk7Ci0JCQlkZWJ1ZyhGMTAxLCJnZXRwa3QgdGlt ZW91dCBzaXplIiwiIixzaXplKTsKLQkJCXJldHVybigoc2l6ZSA9PSAwKSA/IHggOiBzaXplKTsK LQkJICAgIH0KLQkJICAgIGZpcnN0ID0gLTE7CQkvKiBGbGFnIGVvZiBmb3IgbmV4dCB0aW1lLiAq LwotCQkgICAgaWYgKHggPT0gLTIpIGN4c2VlbiA9IDE7IC8qIElmIGVycm9yLCBjYW5jZWwgdGhp cyBmaWxlLiAqLwotCQl9Ci0JCXJuZXh0ID0gKENIQVIpICh4ICYgZm1hc2spOyAvKiBBcHBseSBm aWxlIG1hc2sgKi8KLSNpZm5kZWYgTk9DU0VUUwotCQlpZiAoeGxhdHlwZSAhPSBYTEFfVU5JQ09E RSkgewotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQkJICAgIGZmYysrOwotI2lmbmRlZiBOT0NTRVRT Ci0JCSAgICBpZiAoc3gpCi0JCSAgICAgIHJ0ID0gKCpzeCkocnQpOwotI2VuZGlmIC8qIE5PQ1NF VFMgKi8KLQkJICAgIGlmIChkb2NyYyAmJiAod2hhdCAmIFdfU0VORCkpCi0JCSAgICAgIGRvZmls Y3JjKHgpOwotCi0jaWZuZGVmIE5PQ1NFVFMKLQkJfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQkg ICAgfQotI2lmZGVmIEtBTkpJCi0JfQotI2VuZGlmIC8qIEtBTkpJICovCi0vKgotICBBdCB0aGlz IHBvaW50LCB0aGUgY2hhcmFjdGVyIHdlIGp1c3QgcmVhZCBpcyBpbiBybmV4dCwKLSAgYW5kIHRo ZSBjaGFyYWN0ZXIgd2UgYXJlIGFib3V0IHRvIGVuY29kZSBpbnRvIHRoZSBwYWNrZXQgaXMgaW4g cnQuCi0qLwotCW9kcCA9IGRwOwkJCS8qIFJlbWVtYmVyIHdoZXJlIHdlIHN0YXJ0ZWQuICovCi0g CXh4bHMgPSB4eGRsID0geHhyYyA9IHh4c3MgPSB4eGNxID0gTlVMOwkvKiBDbGVhciB0aGVzZS4g Ki8KLS8qCi0gIE5vdyBlbmNvZGUgdGhlIGNoYXJhY3RlciBhY2NvcmRpbmcgdG8gdGhlIG9wdGlv bnMgdGhhdCBhcmUgaW4gZWZmZWN0OgotICAgIGN0bHBbXTogd2hldGhlciB0aGlzIGNvbnRyb2wg Y2hhcmFjdGVyIG5lZWRzIHByZWZpeGluZy4KLSAgICBiaW5hcnk6IHRleHQgb3IgYmluYXJ5IG1v ZGUuCi0gICAgcnB0ZmxnOiByZXBlYXQgY291bnRzIGVuYWJsZWQuCi0gICAgZWJxZmxnOiA4dGgt Yml0IHByZWZpeGluZyBlbmFibGVkLgotICAgIGxzY2FwdTogbG9ja2luZyBzaGlmdHMgZW5hYmxl ZC4KLSovCi0JaWYgKHJwdGZsZykgewkJCS8qIFJlcGVhdCBwcm9jZXNzaW5nIGlzIG9uPyAqLwot CSAgICBpZiAoIXVmbGFnICYmCi0JCS8qCi0JCSAqIElmIHRoZSBuZXh0IGNoYXIgaXMgcmVhbGx5 IENSTEYsIHRoZW4gd2UgY2Fubm90Ci0JCSAqIGJlIGRvaW5nIGEgcmVwZWF0ICh1bmxlc3MgQ1Is Q1IsTEYgd2hpY2ggYmVjb21lcwotCQkgKiAifiA8bi0xPiBDUiBDUiBMRiIsIHdoaWNoIGlzIE9L IGJ1dCBub3QgbW9zdCBlZmZpY2llbnQpLgotCQkgKiBJIGp1c3QgcGxhaW4gZG9uJ3Qgd29ycnkg YWJvdXQgdGhpcyBjYXNlLiAgVGhlIGFjdHVhbAotCQkgKiBjb252ZXJzaW9uIGZyb20gTkwgdG8g Q1JMRiBpcyBkb25lIGFmdGVyIHRoZSBycHRmbGcgaWYuLi4KLQkJICovCi0JCSghZmVvbCB8fCBi aW5hcnkgfHwgKGZlb2wgJiYgKHJuZXh0ICE9IGZlb2wpKSkgJiYKLQkJKHJ0ID09IHJuZXh0KSAm JiAoZmlyc3QgPT0gMCkpIHsgLyogR290IGEgcnVuLi4uICovCi0JCWlmICgrK3JwdCA8IDk0KSB7 CS8qIEJlbG93IG1heCwganVzdCBjb3VudCAqLwotCQkgICAgY29udGludWU7CQkvKiBnbyBiYWNr IGFuZCBnZXQgYW5vdGhlciAqLwotCQl9IGVsc2UgaWYgKHJwdCA9PSA5NCkgewkvKiBSZWFjaGVk IG1heCwgbXVzdCBkdW1wICovCi0JCSAgICB4eHJjID0gKENIQVIpIHRvY2hhcihycHQpOyAvKiBQ dXQgdGhlIHJlcGVhdCBjb3VudCBoZXJlICovCi0JCSAgICBycHRuICs9IHJwdDsJLyogQWNjdW11 bGF0ZSBpdCBmb3Igc3RhdGlzdGljcyAqLwotCQkgICAgcnB0ID0gMDsJCS8qIEFuZCByZXNldCBp dCAqLwotCQl9Ci0JICAgIH0gZWxzZSBpZiAocnB0ID4gMSkgewkvKiBNb3JlIHRoYW4gdHdvICov Ci0JCXh4cmMgPSAoQ0hBUikgdG9jaGFyKCsrcnB0KTsgLyogYW5kIGNvdW50LiAqLwotCQlycHRu ICs9IHJwdDsKLQkJcnB0ID0gMDsJCS8qIFJlc2V0IHJlcGVhdCBjb3VudGVyLiAqLwotCSAgICB9 Ci0JICAgIC8qCi0JICAgICAgSWYgKHJwdCA9PSAxKSB3ZSBtdXN0IGVuY29kZSBleGFjdGx5IHR3 byBjaGFyYWN0ZXJzLgotCSAgICAgIFRoaXMgaXMgZG9uZSBsYXRlciwgYWZ0ZXIgdGhlIGZpcnN0 IGNoYXJhY3RlciBpcyBlbmNvZGVkLgotCSAgICAqLwotCX0KLQkvKiBJZiBpdCdzIHRoZSBuZXds aW5lIGNoYXJhY3Rlci4uLiAqLwotCWlmICghdWZsYWcgJiYgIWJpbmFyeSAmJiBmZW9sICYmIChy dCA9PSBmZW9sKSkgewotCSAgICBpZiAobHNjYXB1ICYmIGxzc3RhdGUpIHsJLyogSWYgU0hJRlQt U1RBVEUgaXMgU0hJRlRFRCAqLwotCQlpZiAoZWJxZmxnKSB7CQkvKiBJZiBzaW5nbGUgc2hpZnRz IGVuYWJsZWQsICovCi0JCSAgICAqZHArKyA9IChDSEFSKSBlYnE7CS8qIGluc2VydCBhIHNpbmds ZSBzaGlmdC4gKi8KLQkJfSBlbHNlIHsJCS8qIE90aGVyd2lzZSBtdXN0IHNoaWZ0IGluLiAqLwot CQkgICAgKmRwKysgPSBteWN0bHE7CS8qIEluc2VydCBzaGlmdC1vdXQgY29kZSAqLwotCQkgICAg KmRwKysgPSAnTyc7Ci0JCSAgICBsc3N0YXRlID0gMDsJLyogQ2hhbmdlIHNoaWZ0IHN0YXRlICov Ci0JCX0KLQkgICAgfQotI2lmZGVmIENLX1NQRUVECi0JICAgIGlmIChjdGxwW0NSXSkgewotCQkq ZHArKyA9IG15Y3RscTsJCS8qIEluc2VydCBjYXJyaWFnZSByZXR1cm4gZGlyZWN0bHkgKi8KLQkJ KmRwKysgPSAnTSc7Ci0JCWNjcCsrOwotCSAgICB9IGVsc2UgewotCQkqZHArKyA9IENSOwkJLyog UGVyaGFwcyBsaXRlcmFsbHkgKi8KLQkJY2N1Kys7Ci0JICAgIH0KLSNlbHNlIC8qICFDS19TUEVF RCAqLwotCSAgICAqZHArKyA9IG15Y3RscTsJCS8qIEluc2VydCBjYXJyaWFnZSByZXR1cm4gZGly ZWN0bHkgKi8KLQkgICAgKmRwKysgPSAnTSc7Ci0JICAgIGNjcCsrOwotI2VuZGlmIC8qIENLX1NQ RUVEICovCi0JICAgIHJ0ID0gTEY7CQkJLyogTm93IG1ha2UgbmV4dCBjaGFyIGJlIGxpbmVmZWVk LiAqLwotCX0KLS8qCi0gIE5vdyBoYW5kbGUgdGhlIDh0aCBiaXQgb2YgdGhlIGZpbGUgY2hhcmFj dGVyLiAgSWYgd2UgaGF2ZSBhbiA4LWJpdAotICBjb25uZWN0aW9uLCB3ZSBwcmVzZXJ2ZSB0aGUg OHRoIGJpdC4gIElmIHdlIGhhdmUgYSA3LWJpdCBjb25uZWN0aW9uLAotICB3ZSBlbXBsb3kgZWl0 aGVyIHNpbmdsZSBvciBsb2NraW5nIHNoaWZ0cyAoaWYgdGhleSBhcmUgZW5hYmxlZCkuCi0qLwot CWE3ID0gcnQgJiAwMTc3OwkJCS8qIEdldCBsb3cgNyBiaXRzIG9mIGNoYXJhY3RlciAqLwotCWlm IChydCAmIDAyMDApIHsJCS8qIDgtYml0IGNoYXJhY3Rlcj8gKi8KLQkgICAgaWYgKGxzY2FwdSkg ewkJLyogTG9ja2luZyBzaGlmdHMgZW5hYmxlZD8gKi8KLQkJaWYgKCFsc3N0YXRlKSB7CQkvKiBO b3QgY3VycmVudGx5IHNoaWZ0ZWQ/ICovCi0JCSAgICB4ID0gbHNsb29rKDAyMDApOwkvKiBMb29r IGFoZWFkICovCi0JCSAgICBpZiAoeCAhPSAwIHx8IGVicWZsZyA9PSAwKSB7IC8qIExvY2tpbmcg c2hpZnQgZGVjaXNpb24gKi8KLQkJCXh4bHMgPSAnTic7CSAgIC8qIE5lZWQgbG9ja2luZyBzaGlm dC1vdXQgKi8KLQkJCWxzc3RhdGUgPSAxOwkgICAvKiBhbmQgY2hhbmdlIHRvIHNoaWZ0ZWQgc3Rh dGUgKi8KLQkJICAgIH0gZWxzZSBpZiAoZWJxZmxnKSB7ICAgLyogTm90IHdvcnRoIGl0ICovCi0J CQl4eHNzID0gKENIQVIpIGVicTsgLyogVXNlIHNpbmdsZSBzaGlmdCAqLwotCQkgICAgfQotCQl9 Ci0JCXJ0ID0gKENIQVIpIGE3OwkJLyogUmVwbGFjZSBjaGFyYWN0ZXIgYnkgNy1iaXQgdmFsdWUg Ki8KLQkgICAgfSBlbHNlIGlmIChlYnFmbGcpIHsJLyogOHRoIGJpdCBwcmVmaXhpbmcgaXMgb24/ ICovCi0JCXh4c3MgPSAoQ0hBUikgZWJxOwkvKiBJbnNlcnQgc2luZ2xlIHNoaWZ0ICovCi0JCXJ0 ID0gKENIQVIpIGE3OwkJLyogUmVwbGFjZSBjaGFyYWN0ZXIgYnkgNy1iaXQgdmFsdWUgKi8KLQkg ICAgfQotLyoKLSAgSW4gY2FzZSB3ZSBoYXZlIGEgNy1iaXQgY29ubmVjdGlvbiBhbmQgdGhpcyBp cyBhbiA4LWJpdCBjaGFyYWN0ZXIsIEFORAotICBuZWl0aGVyIGxvY2tpbmcgc2hpZnRzIG5vciBz aW5nbGUgc2hpZnRzIGFyZSBlbmFibGVkLCB0aGVuIHRoZSBjaGFyYWN0ZXIncwotICA4dGggYml0 IHdpbGwgYmUgZGVzdHJveWVkIGluIHRyYW5zbWlzc2lvbiwgYW5kIGEgYmxvY2sgY2hlY2sgZXJy b3Igd2lsbAotICBvY2N1ci4KLSovCi0JfSBlbHNlIGlmIChsc2NhcHUpIHsJCS8qIDctYml0IGNo YXJhY3RlciAqLwotCi0JICAgIGlmIChsc3N0YXRlKSB7CQkvKiBDb21lcyB3aGlsZSBzaGlmdGVk IG91dD8gKi8KLQkJeCA9IGxzbG9vaygwKTsJCS8qIFllcywgbG9vayBhaGVhZCAqLwotCQlpZiAo eCB8fCBlYnFmbGcgPT0gMCkgewkvKiBUaW1lIHRvIHNoaWZ0IGluLiAqLwotCQkgICAgeHhscyA9 ICdPJzsJCS8qIFNldCBzaGlmdC1pbiBjb2RlICovCi0JCSAgICBsc3N0YXRlID0gMDsJLyogRXhp dCBzaGlmdGVkIHN0YXRlICovCi0JCX0gZWxzZSBpZiAoZWJxZmxnKSB7CS8qIE5vdCB3b3J0aCBp dCwgc3RheSBzaGlmdGVkIG91dCAqLwotCQkgICAgeHhzcyA9IChDSEFSKSBlYnE7CS8qIEluc2Vy dCBzaW5nbGUgc2hpZnQgKi8KLQkJfQotCSAgICB9Ci0JfQotCS8qIElmIGRhdGEgY2hhcmFjdGVy IGlzIHNpZ25pZmljYW50IHRvIGxvY2tpbmcgc2hpZnQgcHJvdG9jb2wuLi4gKi8KLQlpZiAobHNj YXB1ICYmIChhNyA9PSBTTyB8fCBhNyA9PSBTSSB8fCBhNyA9PSBETEUpKQotCSAgeHhkbCA9ICdQ JzsJCQkvKiBJbnNlcnQgZGF0YWxpbmsgZXNjYXBlICovCi0KLQlpZiAoCi0jaWZkZWYgQ0tfU1BF RUQKLQkgICAgLyoKLQkgICAgICBUaHdhcnQgWUVUIEFOT1RIRVIgdW53YW50ZWQsIHVubmVlZGVk LCBhbmQgdW5sb3ZlZCBzaWduCi0JICAgICAgZXh0ZW5zaW9uLiAgVGhpcyBvbmUgd2FzIHBhcnRp Y3VsYXJseSBuYXN0eSBiZWNhdXNlIGl0IHByZXZlbnRlZAotCSAgICAgIDI1NSAoVGVsbmV0IElB QykgZnJvbSBiZWluZyBwcmVmaXhlZCBvbiBzb21lIHBsYXRmb3JtcyAtLSBlLmcuCi0JICAgICAg Vk1TIHdpdGggVkFYIEMgLS0gYnV0IG5vdCBvdGhlcnMsIHRodXMgY2F1c2luZyBmaWxlIHRyYW5z ZmVycyB0bwotCSAgICAgIGZhaWwgb24gVGVsbmV0IGNvbm5lY3Rpb25zIGJ5IHNlbmRpbmcgYmFy ZSBJQUNzLiAgTm90IHRvIG1lbnRpb24KLQkgICAgICB0aGUgc3RyYXkgbWVtb3J5IHJlZmVyZW5j ZS4gIFNpZ25lZCBjaGFycyBhcmUgYSBCQUQgaWRlYS4KLQkgICAgKi8KLQkgICAgY3RscFsodW5z aWduZWQpKHJ0ICYgMHhmZildCS8qIExvcCBvZmYgYW55ICJzaWduIiBleHRlbnNpb24gKi8KLSNl bHNlCi0JICAgIChhNyA8IFNQKSB8fCAoYTcgPT0gREVMKQotI2VuZGlmIC8qIENLX1NQRUVEICov Ci0JICAgICkgewkJCQkvKiBEbyBjb250cm9sIHByZWZpeGluZyBpZiBuZWNlc3NhcnkgKi8KLQkg ICAgeHhjcSA9IG15Y3RscTsJCS8qIFRoZSBwcmVmaXggKi8KLQkgICAgY2NwKys7CQkJLyogQ291 bnQgaXQgKi8KLQkgICAgcnQgPSAoQ0hBUikgY3RsKHJ0KTsJLyogVW5jb250cm9sbGlmeSB0aGUg Y2hhcmFjdGVyICovCi0JfQotI2lmZGVmIENLX1NQRUVECi0JZWxzZSBpZiAoKGE3IDwgU1ApIHx8 IChhNyA9PSBERUwpKSAvKiBDb3VudCBhbiB1bnByZWZpeGVkIG9uZSAqLwotCSAgY2N1Kys7Ci0j ZW5kaWYgLyogQ0tfU1BFRUQgKi8KLQotCWlmIChhNyA9PSBteWN0bHEpCQkvKiBBbHdheXMgcHJl Zml4IHRoZSBjb250cm9sIHByZWZpeCAqLwotCSAgeHhjcSA9IG15Y3RscTsKLQotCWlmICgocnB0 ZmxnKSAmJiAoYTcgPT0gcnB0cSkpCS8qIElmIGl0J3MgdGhlIHJlcGVhdCBwcmVmaXgsICovCi0J ICB4eGNxID0gbXljdGxxOwkJLyogcHJlZml4IGl0IGlmIGRvaW5nIHJlcGVhdCBjb3VudHMgKi8K LQotCWlmICgoZWJxZmxnKSAmJiAoYTcgPT0gZWJxKSkJLyogUHJlZml4IHRoZSA4dGgtYml0IHBy ZWZpeCAqLwotCSAgeHhjcSA9IG15Y3RscTsJCS8qIGlmIGRvaW5nIDh0aC1iaXQgcHJlZml4ZXMg Ki8KLQotLyogTm93IGNvbnN0cnVjdCB0aGUgZW50aXJlIHNlcXVlbmNlICovCi0KLQlpZiAoeHhs cykgeyAqZHArKyA9IG15Y3RscTsgKmRwKysgPSB4eGxzOyB9IC8qIExvY2tpbmcgc2hpZnQgKi8K LQlvZHAyID0gZHA7CQkJCSAgICAvKiAoU2F2ZSB0aGlzIHBsYWNlKSAqLwotCWlmICh4eGRsKSB7 ICpkcCsrID0gbXljdGxxOyAqZHArKyA9IHh4ZGw7IH0gLyogRGF0YWxpbmsgZXNjYXBlICovCi0J aWYgKHh4cmMpIHsgKmRwKysgPSAoQ0hBUikgcnB0cTsgKmRwKysgPSB4eHJjOyB9IC8qIFJlcGVh dCBjb3VudCAqLwotCWlmICh4eHNzKSB7ICpkcCsrID0gKENIQVIpIGVicTsgfSAgICAgICAgICAg LyogU2luZ2xlIHNoaWZ0ICovCi0JaWYgKHh4Y3EpIHsgKmRwKysgPSBteWN0bHE7IH0JICAgIAkg ICAgLyogQ29udHJvbCBwcmVmaXggKi8KLQkqZHArKyA9IHJ0OwkJCS8qIEZpbmFsbHksIHRoZSBj aGFyYWN0ZXIgaXRzZWxmICovCi0KLQlpZiAocnB0ID09IDEpIHsJCQkvKiBFeGFjdGx5IHR3byBj b3BpZXM/ICovCi0JICAgIHJwdCA9IDA7Ci0JICAgIHAyID0gZHA7CQkJLyogU2F2ZSBwbGFjZSB0 ZW1wb3JhcmlseSAqLwotCSAgICBmb3IgKHAxID0gb2RwMjsgcDEgPCBwMjsgcDErKykgLyogQ29w eSB0aGUgb2xkIGNoYXJzIG92ZXIgYWdhaW4gKi8KLQkgICAgICAqZHArKyA9ICpwMTsKLQkgICAg aWYgKChwMi1kYXRhKSA8PSBidWZtYXgpIG9kcCA9IHAyOyAvKiBDaGVjayBwYWNrZXQgYm91bmRz ICovCi0JICAgIGlmICgocDItZGF0YSkgPCBidWZtYXgpIG9kcCA9IHAyOyAvKiBDaGVjayBwYWNr ZXQgYm91bmRzICovCi0JfQotCXJ0ID0gcm5leHQ7CQkJLyogTmV4dCBjaGFyYWN0ZXIgaXMgbm93 IGN1cnJlbnQuICovCi0KLS8qIERvbmUgZW5jb2RpbmcgdGhlIGNoYXJhY3Rlci4gIE5vdyB0YWtl IGNhcmUgb2YgcGFja2V0IGJ1ZmZlciBvdmVyZmxvdy4gKi8KLQotCWlmICgoZHAtZGF0YSkgPj0g YnVmbWF4KSB7CS8qIElmIHRvbyBiaWcsIHNhdmUgc29tZSBmb3IgbmV4dC4gKi8KLQotCSAgICBk ZWJ1ZyhGMDAwLCJnZXRwa3QgRU9QIiwiIixydCk7Ci0KLQkgICAgc2l6ZSA9IChkcC1kYXRhKTsJ CS8qIENhbGN1bGF0ZSB0aGUgc2l6ZS4gKi8KLQkgICAgKmRwID0gJ1wwJzsJCQkvKiBNYXJrIHRo ZSBlbmQuICovCi0JICAgIGlmIChtZW1zdHIpIHsJCS8qIE5vIGxlZnRvdmVycyBmb3IgbWVtb3J5 IHN0cmluZ3MgKi8KLQkJaWYgKHJ0KQkJCS8qIENoYXIgd2UgZGlkbid0IGVuY29kZSB5ZXQgKi8K LQkJICBtZW1wdHItLTsJCS8qIChmb3IgZW5jc3RyKCkpICovCi0JCXJldHVybihzaXplKTsKLQkg ICAgfQotCSAgICBpZiAoKGRwLWRhdGEpID4gYnVmbWF4KSB7CS8qIGlmIHBhY2tldCBpcyBvdmVy ZnVsbCAqLwotCQkvKiBjb3B5IHRoZSBwYXJ0IHRoYXQgZG9lc24ndCBmaXQgaW50byB0aGUgbGVm dG92ZXIgYnVmZmVyLCAqLwotCQkvKiB0YWtpbmcgY2FyZSBub3QgdG8gc3BsaXQgYSBwcmVmaXhl ZCBzZXF1ZW5jZS4gKi8KLQkJaW50IGk7Ci0JCW5sZWZ0ID0gZHAgLSBvZHA7Ci0JCWZvciAoaSA9 IDAsIHAxID0gbGVmdG92ZXIsIHAyID0gb2RwOyBpIDwgbmxlZnQ7IGkrKykgewotCQkgICAgKnAx KysgPSAqcDIrKzsKLQkJICAgIGlmIChtZW1zdHIpIG1lbXB0ci0tOyAvKiAoZm9yIGVuY3N0cikg Ki8KLQkJfQotCQlkZWJ1ZyhGMTExLCJnZXRwa3QgbGVmdG92ZXIiLGxlZnRvdmVyLHNpemUpOwot CQlkZWJ1ZyhGMTAxLCJnZXRwa3Qgb3NpemUiLCIiLChvZHAtZGF0YSkpOwotCQlzaXplID0gKG9k cC1kYXRhKTsJLyogUmV0dXJuIHRydW5jYXRlZCBwYWNrZXQuICovCi0JCSpvZHAgPSAnXDAnOwkJ LyogTWFyayB0aGUgbmV3IGVuZCAqLwotCSAgICB9Ci0JICAgIHQgPSBydDsJCQkvKiBTYXZlIGZv ciBuZXh0IHRpbWUgKi8KLQkgICAgcmV0dXJuKHNpemUpOwotCX0KLSAgICB9CQkJCQkvKiBPdGhl cndpc2UsIGtlZXAgZmlsbGluZy4gKi8KLSAgICBzaXplID0gKGRwLWRhdGEpOwkJCS8qIEVuZCBv ZiBmaWxlICovCi0gICAgKmRwID0gJ1wwJzsJCQkJLyogTWFyayB0aGUgZW5kIG9mIHRoZSBkYXRh LiAqLwotICAgIGRlYnVnKEYxMTEsImdldHBrdCBlb2YvZW90IixkYXRhLHNpemUpOyAvKiBGZWxs IHRocnUgYmVmb3JlIHBhY2tldCBmdWxsLCAqLwotICAgIHJldHVybihzaXplKTsJCSAgICAgLyog cmV0dXJuIHBhcnRpYWxseSBmaWxsZWQgbGFzdCBwYWNrZXQuICovCi19Ci0KLS8qICBUIEkgTiBJ IFQgIC0tICBJbml0aWFsaXplIGEgdHJhbnNhY3Rpb24gICovCi0KLWludCBlcGt0cmN2ZCA9IDAs IGVwa3RzZW50ID0gMDsKLQotLyoKLSAgQ2FsbCB3aXRoIDEgdG8gcmVzZXQgZXZlcnl0aGluZyBi ZWZvcmUgUy9JL1kgbmVnb3RpYXRpb24sIG9yIDAgdG8KLSAgcmVzZXQgb25seSB0aGUgdGhpbmdz IHRoYXQgYXJlIG5vdCBzZXQgaW4gdGhlIFMvSS9ZIG5lZ290aWF0aW9uLgotICBSZXR1cm5zIC0x IG9uIGZhaWx1cmUgKGUuZy4gdG8gY3JlYXRlIHBhY2tldCBidWZmZXJzKSwgMCBvbiBzdWNjZXNz LgotKi8KLWludAotdGluaXQoZmxhZykgaW50IGZsYWc7IHsKLSAgICBpbnQgeDsKLSNpZmRlZiBD S19USU1FUlMKLSAgICBleHRlcm4gaW50IHJ0dGZsZzsKLSNlbmRpZiAvKiBDS19USU1FUlMgKi8K LSAgICBleHRlcm4gaW50IHJjdnRpbW87Ci0gICAgZXh0ZXJuIGludCBmYXRhbGlvOwotCi0gICAg ZGVidWcoRjEwMSwidGluaXQgZmxhZyIsIiIsZmxhZyk7Ci0KLSAgICAqZXBrdG1zZyA9IE5VTDsK LSAgICBlcGt0cmN2ZCA9IDA7Ci0gICAgZXBrdHNlbnQgPSAwOwotICAgIG9mcGVybXMgPSAiIjsK LSAgICBkaXJhY3RpdmUgPSAwOwkJCS8qIERJUiAvIFJFTU9URSBESVIgbm90IGFjdGl2ZSAqLwot ICAgIGludGVycnVwdGVkID0gMDsJCQkvKiBOb3QgaW50ZXJydXB0ZWQgKi8KLSAgICBmYXRhbGlv ID0gMDsJCQkvKiBObyBmYXRhbCBpL28gZXJyb3IgKi8KLSAgICBpZiAoc2VydmVyKSB7Ci0JbW92 aW5nICA9IDA7Ci0JcGlwZXNlbmQgPSAwOyAvKiBUaGlzIHRha2VzIGNhcmUgb2YgbXVsdGlwbGUg R0VUcyBzZW50IHRvIGEgc2VydmVyLiAqLwotICAgIH0KLSAgICBiZXN0bGVuID0gMDsJCQkvKiBG b3IgcGFja2V0IGxlbmd0aCBvcHRpbWl6YXRpb24gKi8KLSAgICBtYXhzZW5kID0gMDsJCQkvKiBC aWdnZXN0IGRhdGEgZmllbGQgd2UgY2FuIHNlbmQgKi8KLSNpZmRlZiBTVFJFQU1JTkcKLSAgICBz dHJlYW1vayA9IDA7CQkJLyogU3RyZWFtaW5nIG5lZ290aWF0ZWQgKi8KLSAgICBzdHJlYW1pbmcg PSAwOwkJCS8qIFN0cmVhbWluZyBiZWluZyBkb25lIG5vdyAqLwotI2VuZGlmIC8qIFNUUkVBTUlO RyAqLwotCi0gICAgYmluYXJ5ID0gYl9zYXZlOwkJCS8qIC4uLiAqLwotICAgIGduZl9iaW5hcnkg PSBiaW5hcnk7CQkvKiBQZXItZmlsZSB0cmFuc2ZlciBtb2RlICovCi0gICAgcmV0cmFucyA9IDA7 CQkJLyogUGFja2V0IHJldHJhbnNtaXNzaW9uIGNvdW50ICovCi0gICAgc25kdHlwID0gMDsJCQkJ LyogTm8gcHJldmlvdXMgcGFja2V0ICovCi0gICAgeGZsZyA9IDA7CQkJCS8qIFJlc2V0IHgtcGFj a2V0IGZsYWcgKi8KLSAgICBtZW1zdHIgPSAwOwkJCQkvKiBSZXNldCBtZW1vcnktc3RyaW5nIGZs YWcgKi8KLSAgICBtZW1wdHIgPSBOVUxMOwkJCS8qICBhbmQgYnVmZmVyIHBvaW50ZXIgKi8KLSAg ICBmdW5jc3RyID0gMDsJCQkvKiBSZXNldCAicmVhZCBmcm9tIGZ1bmN0aW9uIiBmbGFnICovCi0g ICAgZnVuY3B0ciA9IE5VTEw7CQkJLyogIGFuZCBmdW5jdGlvbiBwb2ludGVyICovCi0gICAgYXV0 b3BhciA9IDA7CQkJLyogQXV0b21hdGljIHBhcml0eSBkZXRlY3Rpb24gZmxhZyAqLwotCi0gICAg LyogVGhpcyBzdHVmZiBpcyBvbmx5IGZvciBCRUZPUkUgUy9JL1kgbmVnb3RpYXRpb24sIG5vdCBh ZnRlciAqLwotCi0gICAgaWYgKGZsYWcpIHsKLQlpZiAoYmN0ZikgewkJICAgICAgLyogRm9yY2Ug QmxvY2sgQ2hlY2sgMyBvbiBhbGwgcGFja2V0cyAqLwotCSAgICBiY3R1ID0gYmN0bCA9IDM7CQkv KiBTZXQgYmxvY2sgY2hlY2sgdHlwZSB0byAzICovCi0JfSBlbHNlIHsKLQkgICAgYmN0dSA9IGJj dGwgPSAxOwkJLyogUmVzZXQgYmxvY2sgY2hlY2sgdHlwZSB0byAxICovCi0JfQotCW15aW5pdFsw XSA9ICdcMCc7CQkvKiBIYXZlbid0IHNlbnQgaW5pdCBzdHJpbmcgeWV0ICovCi0JcnFmID0gLTE7 CQkJLyogUmVzZXQgOHRoLWJpdC1xdW90ZSByZXF1ZXN0IGZsYWcgKi8KLQllYnEgPSBNWUVCUTsJ CQkvKiBSZXNldCA4dGgtYml0IHF1b3Rpbmcgc3R1ZmYgKi8KLQllYnFmbGcgPSAwOwkJCS8qIDh0 aCBiaXQgcXVvdGluZyBub3QgZW5hYmxlZCAqLwotCWVicXNlbnQgPSAwOwkJCS8qIE5vIDh0aC1i aXQgcHJlZml4IGJpZCBzZW50IHlldCAqLwotCXNxID0gJ1knOwkJCS8qIDh0aC1iaXQgcHJlZml4 IGJpZCBJIHVzdWFsbHkgc2VuZCAqLwotCXNwc2l6ID0gc3BzaXpyOwkJCS8qIEluaXRpYWwgc2Vu ZC1wYWNrZXQgc2l6ZSAqLwotCWRlYnVnKEYxMDEsInRpbml0IHNwc2l6IiwiIixzcHNpeik7Ci0J d3Nsb3RzID0gMTsJCQkvKiBPbmUgd2luZG93IHNsb3QgKi8KLQl3c2xvdG4gPSAxOwkJCS8qIE5v IHdpbmRvdyBuZWdvdGlhdGVkIHlldCAqLwotCWp1c3RvbmUgPSAwOwkJCS8qIChzaG91bGQgdGhp cyBiZSB6ZXJvJ2QgaGVyZT8pICovCi0Jd2hvYXJldVswXSA9IE5VTDsJCS8qIFBhcnRuZXIncyBz eXN0ZW0gdHlwZSAqLwotCXN5c2luZGV4ID0gLTE7Ci0Jd2VhcmVhbGlrZSA9IDA7Ci0Jd2hhdCA9 IFdfSU5JVDsJCQkvKiBEb2luZyBub3RoaW5nIHNvIGZhci4uLiAqLwotICAgIH0KLSAgICBmbmNu diA9IGZfc2F2ZTsJCQkvKiBCYWNrIHRvIHdoYXQgdXNlciBsYXN0IHNhaWQgKi8KLSAgICBwa3Ru dW0gPSAwOwkJCQkvKiBJbml0aWFsIHBhY2tldCBudW1iZXIgdG8gc2VuZCAqLwotICAgIGN4c2Vl biA9IGN6c2VlbiA9IGRpc2NhcmQgPSAwOwkvKiBSZXNldCBpbnRlcnJ1cHQgZmxhZ3MgKi8KLSAg ICAqZmlsbmFtID0gJ1wwJzsJCQkvKiBDbGVhciBmaWxlIG5hbWUgKi8KLSAgICBzcGt0bCA9IDA7 CQkJCS8qIEFuZCBpdHMgbGVuZ3RoICovCi0gICAgbmFrc3RhdGUgPSAwOwkJCS8qIEFzc3VtZSB3 ZSdyZSBub3QgaW4gYSBOQUsgc3RhdGUgKi8KLSAgICBudW1lcnJzID0gMDsJCQkvKiBUcmFuc21p c3Npb24gZXJyb3IgY291bnRlciAqLwotICAgIGlkbGV0bW8gPSAwOwkJCS8qIE5vIGlkbGUgdGlt ZW91dCB5ZXQgKi8KLSAgICBpZiAoc2VydmVyKSB7IAkJCS8qIElmIGFjdGluZyBhcyBzZXJ2ZXIs ICovCi0JaWYgKHNydmlkbCA+IDApCQkJLyogSWYgYW4gaWRsZSB0aW1lb3V0IGlzIGdpdmVuICov Ci0JICB0aW1pbnQgPSBzcnZpZGw7Ci0JZWxzZQotCSAgdGltaW50ID0gc3J2dGltOwkJLyogdXNl IHNlcnZlciB0aW1lb3V0IGludGVydmFsLiAqLwotICAgIH0gZWxzZSB7CQkJCS8qIE90aGVyd2lz ZSAqLwotCXRpbWludCA9IGNoa3RpbW8ocnRpbW8sdGltZWYpOwkvKiBhbmQgdXNlIGxvY2FsIHRp bWVvdXQgdmFsdWUgKi8KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwidGluaXQgdGltaW50IiwiIix0 aW1pbnQpOwotCi0jaWZkZWYgQ0tfVElNRVJTCi0gICAgaWYgKHJ0dGZsZyAmJiB0aW1pbnQgPiAw KQkJLyogVXNpbmcgcm91bmQtdHJpcCB0aW1lcnM/ICovCi0gICAgICBydHRpbml0KCk7Ci0gICAg ZWxzZQotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotICAgICAgcmN2dGltbyA9IHRpbWludDsKLQot ICAgIHdpbmxvID0gMDsJCQkJLyogUGFja2V0IDAgaXMgYXQgd2luZG93LWxvdyAqLwotICAgIGRl YnVnKEYxMDEsInRpbml0IHdpbmxvIiwiIix3aW5sbyk7Ci0gICAgeCA9IG1rc2J1ZigxKTsJCQkv KiBNYWtlIGEgMS1zbG90IHNlbmQtcGFja2V0IGJ1ZmZlciAqLwotICAgIGlmICh4IDwgMCkgcmV0 dXJuKHgpOwotICAgIHggPSBnZXRzYnVmKDApOwkJCS8qIEFsbG9jYXRlIGZpcnN0IHNlbmQtYnVm ZmVyLiAqLwotICAgIGRlYnVnKEYxMDEsInRpbml0IGdldHNidWYiLCIiLHgpOwotICAgIGlmICh4 IDwgMCkgcmV0dXJuKHgpOwotICAgIGR1bXBzYnVmKCk7Ci0gICAgeCA9IG1rcmJ1Zih3c2xvdHMp OwkJCS8qICYgYSAxLXNsb3QgcmVjZWl2ZS1wYWNrZXQgYnVmZmVyLiAqLwotICAgIGlmICh4IDwg MCkgcmV0dXJuKHgpOwotICAgIGxzc3RhdGUgPSAwOwkJCS8qIEluaXRpYWxpemUgbG9ja2luZyBz aGlmdCBzdGF0ZSAqLwotICAgIGlmIChhdXRvcGF0aCkgewkJCS8qIFNFVCBSRUNFSVZFIFBBVEhO QU1FUyBBVVRPIGZpeHVwICovCi0JZm5ycGF0aCA9IFBBVEhfQVVUTzsKLQlhdXRvcGF0aCA9IDA7 Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0KLQotVk9JRAotcGt0aW5pdCgpIHsJCQkJLyogSW5p dGlhbGl6ZSBwYWNrZXQgc2VxdWVuY2UgKi8KLSAgICBwa3RudW0gPSAwOwkJCQkvKiBudW1iZXIg JiB3aW5kb3cgbG93LiAqLwotICAgIHdpbmxvID0gMDsKLSAgICBkZWJ1ZyhGMTAxLCJwa3Rpbml0 IHdpbmxvIiwiIix3aW5sbyk7Ci19Ci0KLS8qICBSIEkgTiBJIFQgIC0tICBSZXNwb25kIHRvIFMg b3IgSSBwYWNrZXQgICovCi0KLVZPSUQKLXJpbml0KGQpIENIQVIgKmQ7IHsKLSAgICBjaGFyICp0 cCA9IE5VTEw7Ci0gICAgenRpbWUoJnRwKTsKLSAgICB0bG9nKEYxMTAsIlRyYW5zYWN0aW9uIGJl Z2lucyIsdHAsMEwpOyAvKiBNYWtlIHRyYW5zYWN0aW9uIGxvZyBlbnRyeSAqLwotICAgIHRsb2co RjExMCwiR2xvYmFsIGZpbGUgbW9kZToiLCBiaW5hcnkgPyAiYmluYXJ5IiA6ICJ0ZXh0IiwgMEwp OwotICAgIHRsb2coRjExMCwiQ29sbGlzaW9uIGFjdGlvbjoiLCBmbmNuYW1bZm5jYWN0XSwwKTsK LSAgICB0bG9nKEYxMDAsIiIsIiIsMCk7Ci0gICAgZGVidWcoRjEwMSwicmluaXQgZm5jYWN0Iiwi IixmbmNhY3QpOwotICAgIGZpbGNudCA9IGZpbHJlaiA9IDA7CQkvKiBJbml0IGZpbGUgY291bnRl cnMgKi8KLSAgICBzcGFyKGQpOwotICAgIGFjazEocnBhcigpKTsKLSNpZmRlZiBkYXRhZ2VuZXJh bAotICAgIGlmICgobG9jYWwpICYmICghcXVpZXQpKSAgICAgICAgICAgIC8qIE9ubHkgZG8gdGhp cyBpZiBsb2NhbCAmIG5vdCBxdWlldCAqLwotICAgICAgICBjb25zdGFfbXQoKTsgICAgICAgICAg ICAgICAgICAgIC8qIFN0YXJ0IHRoZSBhc3luY2ggcmVhZCB0YXNrICovCi0jZW5kaWYgLyogZGF0 YWdlbmVyYWwgKi8KLX0KLQotCi0vKiAgUiBFIFMgRSBUIEMgIC0tICBSZXNldCBwZXItdHJhbnNh Y3Rpb24gY2hhcmFjdGVyIGNvdW50ZXJzICovCi0KLVZPSUQKLXJlc2V0YygpIHsKLSAgICBycHRu ID0gMDsJCQkJLyogUmVwZWF0IGNvdW50cyAqLwotICAgIGZzZWNzID0gZmxjaSA9IGZsY28gPSAo Q0tfT0ZGX1QpMDsJLyogRmlsZSBjaGFycyBpbiBhbmQgb3V0ICovCi0jaWZkZWYgR0ZUSU1FUgot ICAgIGZwZnNlY3MgPSAwLjA7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgIHRmYyA9IHRsY2kg PSB0bGNvID0gKENLX09GRl9UKTA7CS8qIFRvdGFsIGZpbGUsIGxpbmUgY2hhcnMgaW4gJiBvdXQg Ki8KLSAgICBjY3UgPSBjY3AgPSAwTDsJCQkvKiBDb250cm9sLWNoYXIgc3RhdGlzdGljcyAqLwot I2lmZGVmIENPTU1FTlQKLSAgICBmc2l6ZSA9IChDS19PRkZfVCktMTsJCS8qIEZpbGUgc2l6ZSAq LwotI2Vsc2UKLSAgICBpZiAoISh3aGF0ICYgV19TRU5EKSkKLSAgICAgIGZzaXplID0gKENLX09G Rl9UKS0xOwotICAgIGRlYnVnKEYxMDEsInJlc2V0YyBmc2l6ZSIsIiIsZnNpemUpOwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSAgICB0aW1lb3V0cyA9IHJldHJhbnMgPSAwOwkJLyogVGltZW91dHMs IHJldHJhbnNtaXNzaW9ucyAqLwotICAgIHNwYWNrZXRzID0gcnBhY2tldHMgPSAwOwkJLyogUGFj a2V0IGNvdW50cyBvdXQgJiBpbiAqLwotICAgIGNydW5jaGVkID0gMDsJCQkvKiBDcnVuY2hlZCBw YWNrZXRzICovCi0gICAgd2N1ciA9IDA7CQkJCS8qIEN1cnJlbnQgd2luZG93IHNpemUgKi8KLSAg ICB3bWF4ID0gMDsJCQkJLyogTWF4aW11bSB3aW5kb3cgc2l6ZSB1c2VkICovCi0gICAgcGVha2Nw cyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVhayBjaGFycyBwZXIgc2Vjb25kICov Ci19Ci0KLS8qICBTIEkgTiBJIFQgIC0tICBHZXQgJiB2ZXJpZnkgZmlyc3QgZmlsZSBuYW1lLCB0 aGVuIHNlbmQgU2VuZC1Jbml0IHBhY2tldCAqLwotLyoKLSBSZXR1cm5zOgotICAgMSBpZiBzZW5k IG9wZXJhdGlvbiBiZWdpbnMgc3VjY2Vzc2Z1bGx5Ci0gICAwIGlmIHNlbmQgb3BlcmF0aW9uIGZh aWxzCi0qLwotI2lmZGVmIERZTkFNSUMKLWNoYXIgKmNtYXJnYnVmID0gTlVMTDsKLSNlbHNlCi1j aGFyIGNtYXJnYnVmW0NLTUFYUEFUSCsxXTsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi1jaGFyICpj bWFyZ3BbMl07Ci0KLVZPSUQKLWZubGlzdCgpIHsKLSAgICBpZiAoIWNhbGlicmF0ZSkKLSAgICAg IHNuZHNyYyA9IChuZmlscyA8IDApID8gLTEgOiBuZmlsczsgLyogU291cmNlIGZvciBmaWxlbmFt ZXMgKi8KLSNpZmRlZiBEWU5BTUlDCi0gICAgaWYgKCFjbWFyZ2J1ZiAmJiAhKGNtYXJnYnVmID0g bWFsbG9jKENLTUFYUEFUSCsxKSkpCi0gICAgICBmYXRhbCgiZm5saXN0OiBubyBtZW1vcnkgZm9y IGNtYXJnYnVmIik7Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotICAgIGNtYXJnYnVmWzBdID0gTlVM OwkJCS8qIEluaXRpYWxpemUgbmFtZSBidWZmZXIgKi8KLQotICAgIGRlYnVnKEYxMDEsImZubGlz dCBuZmlscyIsIiIsbmZpbHMpOwotICAgIGRlYnVnKEYxMTAsImZubGlzdCBjbWFyZyIsY21hcmcs MCk7Ci0gICAgZGVidWcoRjExMCwiZm5saXN0IGNtYXJnMiIsY21hcmcyLDApOwotICAgIGlmICgh Y21hcmcyKSBjbWFyZzIgPSAiIjsKLSAgICBpZiAobmZpbHMgPT0gMCkgewkJCS8qIFNlbmRpbmcg ZnJvbSBzdGRpbiBvciBtZW1vcnkuICovCi0JaWYgKChjbWFyZzIgIT0gTlVMTCkgJiYgKCpjbWFy ZzIpKSB7Ci0JICAgIGNtYXJnID0gY21hcmcyOwkJLyogSWYgRiBwYWNrZXQsICJhcy1uYW1lIiBp cyB1c2VkICovCi0JICAgIGNtYXJnMiA9ICIiOwkJLyogaWYgcHJvdmlkZWQgKi8KLQl9IGVsc2UK LQkgIGNtYXJnID0gInN0ZGluIjsJCS8qIG90aGVyd2lzZSBqdXN0IHVzZSAic3RkaW4iICovCi0J Y2tzdHJuY3B5KGNtYXJnYnVmLGNtYXJnLENLTUFYUEFUSCsxKTsKLQljbWFyZ3BbMF0gPSBjbWFy Z2J1ZjsKLQljbWFyZ3BbMV0gPSAiIjsKLQljbWxpc3QgPSBjbWFyZ3A7Ci0JbmZpbHMgPSAxOwot ICAgIH0KLX0KLQotaW50Ci1zaW5pdCgpIHsKLSAgICBpbnQgeDsJCQkJLyogV29ya2VyIGludCAq LwotICAgIGNoYXIgKnRwLCAqeHAsICptOwkJCS8qIFdvcmtlciBzdHJpbmcgcG9pbnRlcnMgKi8K LQotICAgIGZpbGNudCA9IGZpbHJlaiA9IDA7CQkvKiBJbml0aWFsaXplIGZpbGUgY291bnRlcnMg Ki8KLQotICAgIGZubGlzdCgpOwotCi0gICAgeHAgPSAiIjsKLSAgICBpZiAobmZpbHMgPCAwKSB7 Ci0jaWZkZWYgUElQRVNFTkQKLQlpZiAodXNlcGlwZXMgJiYgcHJvdG9jb2wgPT0gUFJPVE9fSyAm JiAqY21hcmcgPT0gJyEnKSB7Ci0JICAgIHBpcGVzZW5kID0gMTsKLQkgICAgY21hcmcrKzsKLQl9 Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQl4cCA9IGNtYXJnOwotICAgIH0gZWxzZSB7Ci0jaWZu ZGVmIE5PTVNFTkQKLQlpZiAoYWRkbGlzdCkKLQkgIHhwID0gZmlsZWhlYWQtPmZsX25hbWU7Ci0J ZWxzZQotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQkgIGlmIChmaWxlZmlsZSkKLQkgICAgeHAgPSBm aWxlZmlsZTsKLQkgIGVsc2UgaWYgKGNhbGlicmF0ZSkKLQkgICAgeHAgPSAiQ2FsaWJyYXRpb24i OwotCSAgZWxzZQotCSAgICB4cCA9ICpjbWxpc3Q7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsInNp bml0IHhwIix4cCwwKTsKLSAgICB4ID0gZ25maWxlKCk7CQkJLyogR2V0IGZpcnN0IGZpbGVuYW1l LiAqLwotICAgIGRlYnVnKEYxMTEsInNpbml0IGduZmlsZSIsY2tpdG9hKGduZmVycm9yKSx4KTsK LSAgICBpZiAoeCA9PSAwKSB4ID0gZ25mZXJyb3I7CQkvKiBJZiBub25lLCBnZXQgZXJyb3IgcmVh c29uICovCi0gICAgbSA9IE5VTEw7CQkJCS8qIEVycm9yIG1lc3NhZ2UgcG9pbnRlciAqLwotICAg IGRlYnVnKEYxMDEsInNpbml0IGduZmlsIiwiIix4KTsKLSAgICBzd2l0Y2ggKHgpIHsKLSAgICAg IGNhc2UgLTY6IG0gPSAiTm8gZmlsZXMgbWVldCBzZWxlY3Rpb24gY3JpdGVyaWEiOyBicmVhazsK LSAgICAgIGNhc2UgLTU6IG0gPSAiVG9vIG1hbnkgZmlsZXMgbWF0Y2ggd2lsZGNhcmQiOyBicmVh azsKLSAgICAgIGNhc2UgLTQ6IG0gPSAiQ2FuY2VsbGVkIjsgYnJlYWs7Ci0gICAgICBjYXNlIC0z OiBtID0gIlJlYWQgYWNjZXNzIGRlbmllZCI7IGJyZWFrOwotICAgICAgY2FzZSAtMjogbSA9ICJG aWxlIGlzIG5vdCByZWFkYWJsZSI7IGJyZWFrOwotI2lmZGVmIENPTU1FTlQKLSAgICAgIGNhc2Ug LTE6IG0gPSBpc3dpbGQoZmlsbmFtKSA/ICJObyBmaWxlcyBtYXRjaCIgOiAiRmlsZSBub3QgZm91 bmQiOwotCWJyZWFrOwotICAgICAgY2FzZSAgMDogbSA9ICJObyBmaWxlc3BlYyBnaXZlbiEiOyBi cmVhazsKLSNlbHNlCi0gICAgICBjYXNlICAwOgotICAgICAgY2FzZSAtMTogbSA9IGlzd2lsZChm aWxuYW0pID8gIk5vIGZpbGVzIG1hdGNoIiA6ICJGaWxlIG5vdCBmb3VuZCI7Ci0JYnJlYWs7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgZGVmYXVsdDoKLQlicmVhazsKLSAgICB9Ci0gICAg ZGVidWcoRjEwMSwic2luaXQgbmZpbHMiLCIiLG5maWxzKTsKLSAgICBkZWJ1ZyhGMTEwLCJzaW5p dCBmaWxuYW0iLGZpbG5hbSwwKTsKLSAgICBpZiAoeCA8IDEpIHsJCQkvKiBEaWRuJ3QgZ2V0IGEg ZmlsZS4gKi8KLQlkZWJ1ZyhGMTExLCJzaW5pdCBtc2ciLG0seCk7Ci0JaWYgKHNlcnZlcikgewkJ CS8qIERvaW5nIEdFVCBjb21tYW5kICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKW0pOwkJLyogc28g c2VuZCBFcnJvciBwYWNrZXQuICovCi0JfSBlbHNlIGlmICghbG9jYWwpIHsgCQkvKiBEb2luZyBT RU5EIGNvbW1hbmQgKi8KLQkgICAgaW50ZXJydXB0ZWQgPSAxOwkJLyogKFRvIHN1cHByZXNzIGhp bnQpICovCi0JICAgIHByaW50ZigiPyVzXHJcbiIsbSk7Ci0JfSBlbHNlIHsKLQkgICAgeHhzY3Jl ZW4oU0NSX0VNLDAsMGwsbSk7CS8qIHNvIHByaW50IG1lc3NhZ2UuICovCi0JfQotCXRsb2coRjEx MCx4cCxtLDBMKTsJCS8qIE1ha2UgdHJhbnNhY3Rpb24gbG9nIGVudHJ5LiAqLwotCWZyZWVyYnVm KHJzZXF0YmxbMF0pOwkJLyogRnJlZSB0aGUgYnVmZmVyIHRoZSBHRVQgY2FtZSBpbi4gKi8KLQly ZXR1cm4oMCk7CQkJLyogUmV0dXJuIGZhaWx1cmUgY29kZSAqLwotICAgIH0KLSAgICBpZiAoIWxv Y2FsICYmICFzZXJ2ZXIgJiYgY2tkZWxheSA+IDApIC8qIE9TLTkgc2xlZXAoMCkgPT0gaW5maW5p dGUgKi8KLSAgICAgIHNsZWVwKGNrZGVsYXkpOwkJCS8qIERlbGF5IGlmIHJlcXVlc3RlZCAqLwot I2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgaWYgKChsb2NhbCkgJiYgKCFxdWlldCkpICAgICAgICAg ICAgLyogT25seSBkbyB0aGlzIGlmIGxvY2FsICYgbm90IHF1aWV0ICovCi0gICAgICBjb25zdGFf bXQoKTsJCQkvKiBTdGFydCB0aGUgYXN5bmMgcmVhZCB0YXNrICovCi0jZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KLSAgICBmcmVlcmJ1Zihyc2VxdGJsWzBdKTsJCS8qIEZyZWUgdGhlIGJ1ZmZlciB0 aGUgR0VUIGNhbWUgaW4uICovCi0gICAgc2lwa3QoJ1MnKTsJCQkJLyogU2VuZCB0aGUgU2VuZC1J bml0IHBhY2tldC4gKi8KLSAgICB6dGltZSgmdHApOwkJCQkvKiBHZXQgY3VycmVudCBkYXRlL3Rp bWUgKi8KLSAgICB0bG9nKEYxMTAsIlRyYW5zYWN0aW9uIGJlZ2lucyIsdHAsMEwpOyAvKiBNYWtl IHRyYW5zYWN0aW9uIGxvZyBlbnRyeSAqLwotICAgIHRsb2coRjExMCwiR2xvYmFsIGZpbGUgbW9k ZToiLCBiaW5hcnkgPyAiYmluYXJ5IiA6ICJ0ZXh0IiwgMEwpOwotICAgIHRsb2coRjEwMCwiIiwi IiwwKTsKLSAgICBkZWJ1ZyhGMTExLCJzaW5pdCBvayIsZmlsbmFtLDApOwotICAgIHJldHVybigx KTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXNpcGt0KGNoYXIgYykJCQkJLyogU2VuZCBT IG9yIEkgcGFja2V0LiAqLwotI2Vsc2UKLXNpcGt0KGMpIGNoYXIgYzsKLSNlbmRpZgotLyogc2lw a3QgKi8gewotICAgIENIQVIgKnJwOyBpbnQgaywgeDsKLSAgICBleHRlcm4gaW50IHNlbmRpcGt0 czsKLSAgICBkZWJ1ZyhGMTAxLCJzaXBrdCBwa3RudW0iLCIiLHBrdG51bSk7IC8qIChiZXR0ZXIg YmUgMC4uLikgKi8KLSAgICB0dGZsdWkoKTsJCQkJLyogRmx1c2ggcGVuZGluZyBpbnB1dC4gKi8K LSAgICAvKgotICAgICAgSWYgdGhpcyBpcyBhbiBJIHBhY2tldCBhbmQgU0VUIFNFTkQgSS1QQUNL RVRTIGlzIE9GRiwgZG9uJ3Qgc2VuZCBpdDsKLSAgICAgIHNldCBzc3RhdGUgdG8gJ1knIHdoaWNo IG1ha2VzIHRoZSBuZXh0IGlucHV0KCkgY2FsbCByZXR1cm4gJ1knIGFzIGlmIHdlCi0gICAgICBo YWQgcmVjZWl2ZWQgYW4gQUNLIHRvIHRoZSBJIHBhY2tldCB3ZSBkaWRuJ3Qgc2VuZC4gIFRoaXMg aXMgdG8gd29yawotICAgICAgYXJvdW5kIGJ1Z2d5IEtlcm1pdCBzZXJ2ZXJzIHRoYXQgY2FuJ3Qg aGFuZGxlIEkgcGFja2V0cy4KLSAgICAqLwotICAgIGlmICgoc2VuZGlwa3RzID09IDApICYmIChj ID09ICdJJykpIHsgLyogSSBwYWNrZXQgYnV0IGRvbid0IHNlbmQgSSBwa3RzPyAqLwotCXNzdGF0 ZSA9ICdZJzsJCQkgIC8qIFlpa2VzISAqLwotCXJldHVybigwKTsJCQkgIC8qIChzZWUgaW5wdXQo KS4uKSovCi0gICAgfQotICAgIGsgPSBzc2VxdGJsW3BrdG51bV07CQkvKiBGaW5kIHNsb3QgZm9y IHRoaXMgcGFja2V0ICovCi0gICAgaWYgKGsgPCAwKSB7CQkJLyogTm8gc2xvdD8gKi8KLQlrID0g Z2V0c2J1Zih3aW5sbyA9IHBrdG51bSk7CS8qIE1ha2Ugb25lLiAqLwotCWRlYnVnKEYxMDEsInNp cGt0IGdldHNidWYiLCIiLGspOwotICAgIH0KLSAgICBycCA9IHJwYXIoKTsJCQkvKiBHZXQgcHJv dG9jb2wgcGFyYW1ldGVycy4gKi8KLSAgICBpZiAoIXJwKSBycCA9IChDSEFSICopIiI7Ci0gICAg eCA9IHNwYWNrKGMscGt0bnVtLChpbnQpc3RybGVuKChjaGFyICopcnApLHJwKTsgLyogU2VuZCB0 aGVtLiAqLwotICAgIHJldHVybih4KTsKLX0KLQotLyogIFggUyBJIE4gSSBUICAtLSAgUmV0cmFu c21pdCBTLXBhY2tldCAgKi8KLS8qCi0gIEZvciB1c2UgaW4gdGhlIEdFVC1TRU5EIHNlcXVlbmNl LCB3aGVuIHdlIHN0YXJ0IHRvIHNlbmQsIGJ1dCByZWNlaXZlIGFub3RoZXIKLSAgY29weSBvZiB0 aGUgR0VUIGNvbW1hbmQgYmVjYXVzZSB0aGUgcmVjZWl2ZXIgZGlkbid0IGdldCBvdXIgUyBwYWNr ZXQuCi0gIFRoaXMgcmV0cmFuc21pdHMgdGhlIFMgcGFja2V0IGFuZCBmcmVlcyB0aGUgcmVjZWl2 ZSBidWZmZXIgZm9yIHRoZSBBQ0suCi0gIFRoaXMgc3BlY2lhbCBjYXNlIGlzIG5lY2Vzc2FyeSBi ZWNhdXNlIHBhY2tldCBudW1iZXIgemVybyBpcyBiZWluZyByZS11c2VkLgotKi8KLVZPSUQKLXhz aW5pdCgpIHsKLSAgICBpbnQgazsKLSAgICBrID0gcnNlcXRibFswXTsKLSAgICBkZWJ1ZyhGMTAx LCJ4c2luaXQgayIsIiIsayk7Ci0gICAgaWYgKGsgPiAtMSkKLSAgICBmcmVlcmJ1ZihrKTsKLSAg ICByZXNlbmQoMCk7Ci19Ci0KLS8qICBSIEMgViBGIEkgTCAtLSBSZWNlaXZlIGEgZmlsZSAgKi8K LQotLyoKLSAgSW5jb21pbmcgZmlsZW5hbWUgaXMgaW4gZGF0YSBmaWVsZCBvZiBGIHBhY2tldC4K LSAgVGhpcyBmdW5jdGlvbiBkZWNvZGVzIGl0IGludG8gdGhlIHNydmNtZCBidWZmZXIsIHN1YnN0 aXR1dGluZyBhbgotICBhbHRlcm5hdGUgImFzLW5hbWUiLCBpZiBvbmUgd2FzIGdpdmVuLgotICBU aGVuIGl0IGRvZXMgYW55IHJlcXVlc3RlZCB0cmFuc2Zvcm1hdGlvbnMgKGxpa2UgY29udmVydGlu ZyB0bwotICBsb3dlcmNhc2UpLCBhbmQgZmluYWxseSBpZiBhIGZpbGUgb2YgdGhlIHNhbWUgbmFt ZSBhbHJlYWR5IGV4aXN0cywKLSAgdGFrZXMgdGhlIGRlc2lyZWQgY29sbGlzaW9uIGFjdGlvbi4K LSAgUmV0dXJuczoKLSAgICAxIG9uIHN1Y2Nlc3MuCi0gICAgMCBvbiBmYWlsdXJlLgotKi8KLWNo YXIgb2ZuMVtDS01BWFBBVEgrNF07CQkJLyogQnVmZmVyIGZvciBvdXRwdXQgZmlsZSBuYW1lICov Ci1jaGFyICogb2ZuMjsJCQkJLyogUG9pbnRlciB0byBiYWNrdXAgZmlsZSBuYW1lICovCi1pbnQg b2ZuMXg7CQkJCS8qIEZsYWcgb3V0cHV0IGZpbGUgYWxyZWFkeSBleGlzdHMgKi8KLUNLX09GRl9U IG9mbjFsZW4gPSAoQ0tfT0ZGX1QpMDsKLWludCBvcG5lcnI7CQkJCS8qIEZsYWcgZm9yIG9wZW4g ZXJyb3IgKi8KLQotaW50CQkJCQkvKiBSZXR1cm5zIHN1Y2Nlc3MgPyAxIDogMCAqLwotcmN2Zmls KG4pIGNoYXIgKm47IHsKLSAgICBleHRlcm4gaW50IGVuX2N3ZDsKLSAgICBpbnQgaSwgc2tpcHRo aXM7Ci0gICAgY2hhciAqIG4yOwotICAgIGNoYXIgKiBkaXNwbzsKLSNpZmRlZiBPUzJPTkxZCi0g ICAgY2hhciAqenMsICpsb25nbmFtZSwgKm5ld2xvbmduYW1lLCAqcG47IC8qIE9TLzIgbG9uZyBu YW1lIGl0ZW1zICovCi0jZW5kaWYgLyogT1MyT05MWSAqLwotI2lmZGVmIERUSUxERQotICAgIGNo YXIgKmRpcnA7Ci0jZW5kaWYgLyogRFRJTERFICovCi0gICAgaW50IGRpcmZsZywgeCwgeTsKLSNp ZmRlZiBQSVBFU0VORAotICAgIGV4dGVybiBjaGFyICogcmN2ZmlsdGVyOwotI2VuZGlmIC8qIFBJ UEVTRU5EICovCi0jaWZkZWYgQ0FMSUJSQVRFCi0gICAgZXh0ZXJuIGludCBkZXN0OwotICAgIENL X09GRl9UIGNzYXZlOwotICAgIGNzYXZlID0gY2FsaWJyYXRlOwkJCS8qIFNvIHdlIGNhbiBkZWNv ZGUgZmlsZW5hbWUgKi8KLSAgICBjYWxpYnJhdGUgPSAoQ0tfT0ZGX1QpMDsKLSNlbmRpZiAvKiBD QUxJQlJBVEUgKi8KLQotICAgIG9mcGVybXMgPSAiIjsJCQkvKiBSZXNldCBvbGQtZmlsZSBwZXJt aXNzaW9ucyAqLwotICAgIG9wbmVyciA9IDA7CQkJCS8qIE5vIG9wZW4gZXJyb3IgKHlldCkgKi8K LSAgICBvZm4yID0gTlVMTDsJCQkvKiBObyBuZXcgbmFtZSAoeWV0KSAqLwotICAgIGxzc3RhdGUg PSAwOwkJCS8qIENhbmNlbCBsb2NraW5nLXNoaWZ0IHN0YXRlICovCi0gICAgc3J2cHRyID0gc3J2 Y21kOwkJCS8qIERlY29kZSBmaWxlIG5hbWUgZnJvbSBwYWNrZXQuICovCi0KLSNpZmRlZiBVTklD T0RFCi0gICAgeHBuYnl0ZSgtMSwwLDAsTlVMTCk7CQkvKiBSZXNldCBVQ1MtMiBieXRlIGNvdW50 ZXIuICovCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0gICAgZGVidWcoRjExMCwicmN2ZmlsIHJk YXRhcCIscmRhdGFwLDApOwotICAgIGRlY29kZShyZGF0YXAscHV0c3J2LDApOwkJLyogRG9uJ3Qg eGxhdGUgY2hhcnNldHMuICovCi0jaWZkZWYgQ0FMSUJSQVRFCi0gICAgY2FsaWJyYXRlID0gY3Nh dmU7Ci0gICAgaWYgKGRlc3QgPT0gREVTVF9OKSB7Ci0JY2FsaWJyYXRlID0gMTsKLQljbWFyZzIg PSAiQ0FMSUJSQVRFIjsKLSAgICB9Ci0jZW5kaWYgLyogQ0FMSUJSQVRFICovCi0gICAgaWYgKCpz cnZjbWQgPT0gJ1wwJykJCS8qIFdhdGNoIG91dCBmb3IgbnVsbCBGIHBhY2tldC4gKi8KLSAgICAg IGNrc3RybmNweSgoY2hhciAqKXNydmNtZCwiTk9OQU1FIixzcnZjbWRsZW4pOwotICAgIG1ha2Vz dHIoJnBycmZzcGVjLChjaGFyICopc3J2Y21kKTsJLyogTmV3IHByZWxpbWluYXJ5IGZpbGVuYW1l ICovCi0jaWZkZWYgRFRJTERFCi0gICAgaWYgKCpzcnZjbWQgPT0gJ34nKSB7Ci0JZGlycCA9IHRp bGRlX2V4cGFuZCgoY2hhciAqKXNydmNtZCk7IC8qIEV4cGFuZCB0aWxkZSwgaWYgYW55LiAqLwot CWlmICgqZGlycCAhPSAnXDAnKQotCSAgY2tzdHJuY3B5KChjaGFyICopc3J2Y21kLGRpcnAsc3J2 Y21kbGVuKTsKLSAgICB9Ci0jZWxzZQotI2lmZGVmIE9TMgotICAgIGlmIChpc2FscGhhKCpzcnZj bWQpICYmIHNydmNtZFsxXSA9PSAnOicgJiYgc3J2Y21kWzJdID09ICdcMCcpCi0gICAgICBja3N0 cm5jYXQoKGNoYXIgKilzcnZjbWQsIk5PTkFNRSIsc3J2Y21kbGVuKTsKLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbmRpZiAvKiBEVElMREUgKi8KLQotI2lmbmRlZiBOT0lDUAotI2lmbmRlZiBOT1NQTAot LyogRmlsZSBkaWFsb2cgd2hlbiBkb3dubG9hZGluZy4uLiAgKi8KLSAgICBpZiAoCi0jaWZkZWYg Q0tfQVBDCi0JKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwgJiYgYWRsX2FzaykgfHwgLyogQXV0b2Rv d25sb2FkIHdpdGggQVNLICovCi0jZW5kaWYgLyogQ0tfQVBDICovCi0JKGNsY21kcyAmJiBoYXZl dXJsKQkJLyogT3IgImtlcm1pdDoiIG9yICJpa3NkOiIgVVJMICovCi0JKSB7Ci0JaW50IHg7Ci0J Y2hhciBmbmJ1ZltDS01BWFBBVEgrMV07CS8qIFJlc3VsdCBidWZmZXIgKi8KLQljaGFyICogcHJl ZmFjZTsKLQotCWlmIChjbGNtZHMgJiYgaGF2ZXVybCkKLQkgIHByZWZhY2UgPSAiXHJcbkluY29t aW5nIGZpbGUgZnJvbSBLZXJtaXQgc2VydmVyLi4uXHJcblwKLVBsZWFzZSBjb25maXJtIG91dHB1 dCBmaWxlIHNwZWNpZmljYXRpb24gb3Igc3VwcGx5IGFuIGFsdGVybmF0aXZlOiI7Ci0JZWxzZQot CSAgcHJlZmFjZSA9ICJcclxuSW5jb21pbmcgZmlsZSBmcm9tIHJlbW90ZSBLZXJtaXQuLi5cclxu XAotUGxlYXNlIGNvbmZpcm0gb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbiBvciBzdXBwbHkgYW4g YWx0ZXJuYXRpdmU6IjsKLQotCXggPSB1cV9maWxlKHByZWZhY2UsCQkvKiBQcmVmYWNlICovCi0J CSAgICBOVUxMLAkJLyogUHJvbXB0IChsZXQgdXFfZmlsZSgpIGJ1aWx0IGl0KSAqLwotCQkgICAg MywJCQkvKiBPdXRwdXQgZmlsZSAqLwotCQkgICAgTlVMTCwJCS8qIEhlbHAgdGV4dCAqLwotCQkg ICAgKGNoYXIgKilzcnZjbWQsCS8qIERlZmF1bHQgKi8KLQkJICAgIGZuYnVmLAkJLyogUmVzdWx0 IGJ1ZmZlciAqLwotCQkgICAgQ0tNQVhQQVRIKzEJCS8qIFNpemUgb2YgcmVzdWx0IGJ1ZmZlciAq LwotCQkgICAgKTsKLQlpZiAoeCA8IDEpIHsJCQkvKiBSZWZ1c2VkICovCi0JICAgIHJmX2VyciA9 ICJSZWZ1c2VkIGJ5IHVzZXIiOwotCSAgICByZXR1cm4oMCk7Ci0JfQotCWNrc3RybmNweSgoY2hh ciAqKXNydmNtZCxmbmJ1ZixDS01BWFBBVEgrMSk7Ci0JaWYgKGlzYWJzb2x1dGUoKGNoYXIgKilz cnZjbWQpKSB7IC8qIFVzZXIgZ2F2ZSBhbiBhYnNvbHV0ZSBwYXRoICovCi0JICAgIGdfZm5ycGF0 aCA9IGZucnBhdGg7CS8qIFNhdmUgY3VycmVudCBSRUNFSVZFIFBBVEhOQU1FUyAqLwotCSAgICBm bnJwYXRoID0gUEFUSF9BQlM7CQkvKiBzd2l0Y2ggdG8gQUJTT0xVVEUgKi8KLQl9Ci0gICAgfQot I2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQotICAgIGlmICghRU5BQkxF RChlbl9jd2QpKSB7CQkvKiBDRCBpcyBkaXNhYmxlZCAqLwotCXpzdHJpcCgoY2hhciAqKShzcnZj bWQrMiksJm4yKTsgLyogYW5kIHRoZXkgaW5jbHVkZWQgYSBwYXRobmFtZSwgKi8KLQlpZiAoc3Ry Y21wKChjaGFyICopKHNydmNtZCsyKSxuMikpIHsgLyogc28gcmVmdXNlLiAqLwotCSAgICByZl9l cnIgPSAiQWNjZXNzIGRlbmllZCI7Ci0JICAgIHJldHVybigwKTsKLQl9Ci0gICAgfQotI2lmZGVm IENPTU1FTlQKLSAgICAvKiBXcm9uZyBwbGFjZSBmb3IgdGhpcyAtLSBoYW5kbGUgY21hcmcyIGZp cnN0IC0tIHNlZSBiZWxvdy4uLiAgKi8KLQotICAgIGlmICh6Y2hrbygoY2hhciAqKXNydmNtZCkg PCAwKSB7CS8qIFByZWNoZWNrIGZvciB3cml0ZSBhY2Nlc3MgKi8KLQlkZWJ1ZyhGMTEwLCJyY3Zm aWwgYWNjZXNzIGRlbmllZCIsc3J2Y21kLDApOwotCXJmX2VyciA9ICJXcml0ZSBhY2Nlc3MgZGVu aWVkIjsKLQlkaXNjYXJkID0gb3BuZXJyID0gMTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotICAgIHh4 c2NyZWVuKFNDUl9GTiwwLDBsLChjaGFyICopc3J2Y21kKTsgLyogUHV0IGl0IG9uIHNjcmVlbiBp ZiBsb2NhbCAqLwotICAgIGRlYnVnKEYxMTAsInJjdmZpbCBzcnZjbWQgMSIsc3J2Y21kLDApOwot ICAgIHRsb2coRjExMCwiUmVjZWl2aW5nIiwoY2hhciAqKXNydmNtZCwwTCk7IC8qIFRyYW5zYWN0 aW9uIGxvZyBlbnRyeSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIHNraXB0aGlzID0g MDsJCQkvKiBUaGlzIGZpbGUgaW4gb3VyIGV4Y2VwdGlvbiBsaXN0PyAqLwotICAgIGZvciAoaSA9 IDA7IGkgPCBOU05ERVhDRVBUOyBpKyspIHsKLQlpZiAoIXJjdmV4Y2VwdFtpXSkgewotCSAgICBi cmVhazsKLQl9Ci0JaWYgKGNrbWF0Y2gocmN2ZXhjZXB0W2ldLChjaGFyICopc3J2Y21kLGZpbGVj YXNlLDEpKSB7Ci0JICAgIHNraXB0aGlzID0gMTsKLQkgICAgYnJlYWs7Ci0JfQotICAgIH0KLQot I2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyAmJiBza2lwdGhpcykgewotCWRlYnVnKEYxMTEs InJjdmZpbCByY3ZleGNlcHQiLHJjdmV4Y2VwdFtpXSxpKTsKLQlkZWJ1ZyhGMTEwLCJyY3ZmaWwg c2tpcHBpbmciLHNydmNtZCwwKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotICAgIGlm IChza2lwdGhpcykgewkJCS8qIFNraXBwaW5nIHRoaXMgZmlsZSAqLwotCWRpc2NhcmQgPSAxOwot CXJlamVjdGlvbiA9IDE7Ci0JcmZfZXJyID0gIkV4Y2VwdGlvbiBsaXN0IjsKLQlkZWJ1ZyhGMTAx LCJyY3ZmaWwgZGlzY2FyZCIsIiIsZGlzY2FyZCk7Ci0JdGxvZyhGMTAwLCIgcmVmdXNlZDogZXhj ZXB0aW9uIGxpc3QiLCIiLDApOwotCXJldHVybigxKTsKLSAgICB9Ci0KLSAgICAvKiBGaWxlIGlz IG5vdCBpbiBleGNlcHRpb24gbGlzdCAqLwotCi0gICAgaWYgKCFjbWFyZzIpCQkJLyogTm8gY29y ZSBkdW1wcyBwbGVhc2UgKi8KLSAgICAgIGNtYXJnMiA9ICIiOwotICAgIGRlYnVnKEYxMTAsInJj dmZpbCBjbWFyZzIiLGNtYXJnMiwwKTsKLQotICAgIGlmICgqY21hcmcyKSB7CQkJLyogQ2hlY2sg Zm9yIGFsdGVybmF0ZSBuYW1lICovCi0jaWZuZGVmIE5PU1BMCi0JaW50IHk7IGNoYXIgKnM7CQkJ LyogUGFzcyBpdCB0aHJ1IHRoZSBldmFsdWF0b3IgKi8KLQlleHRlcm4gaW50IGNtZF9xdW90aW5n OwotCWlmIChjbWRfcXVvdGluZykgewotCSAgICB5ID0gTUFYUlA7Ci0JICAgIGNrc3RybmNweShv Zm4xLChjaGFyICopc3J2Y21kLENLTUFYUEFUSCsxKTsgLyogZm9yIFx2KGZpbGVuYW1lKSAqLwot CSAgICBzID0gKGNoYXIgKilzcnZjbWQ7Ci0JICAgIHp6c3RyaW5nKGNtYXJnMiwmcywmeSk7Ci0J fSBlbHNlCi0JICAqc3J2Y21kID0gTlVMOwotCWlmICghKnNydmNtZCkJCQkvKiBJZiB3ZSBnb3Qg c29tZXRoaW5nICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQkgIGNrc3RybmNweSgoY2hhciAqKXNy dmNtZCxjbWFyZzIsc3J2Y21kbGVuKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwicmN2ZmlsIHNy dmNtZCAyIixzcnZjbWQsMCk7Ci0KLSNpZmRlZiBQSVBFU0VORAotICAgIC8qIElmIGl0IHN0YXJ0 cyB3aXRoICJiYW5nIiwgaXQncyBhIHBpcGUsIG5vdCBhIGZpbGUuICovCi0gICAgaWYgKHVzZXBp cGVzICYmIHByb3RvY29sID09IFBST1RPX0sgJiYgKnNydmNtZCA9PSAnIScgJiYgIXJjdmZpbHRl cikgewotCUNIQVIgKnM7Ci0JcyA9IHNydmNtZCsxOwkJCS8qIHNydmNtZFtdIGlzIG5vdCBhIHBv aW50ZXIuICovCi0Jd2hpbGUgKCpzKSB7CQkJLyogU28gd2UgaGF2ZSB0byBzbGlkZSB0aGUgY29u dGVudHMgKi8KLQkgICAgKihzLTEpID0gKnM7CQkvKiBvdmVyIDEgc3BhY2UgdG8gdGhlIGxlZnQu ICovCi0JICAgIHMrKzsKLQl9Ci0JKihzLTEpID0gTlVMOwotCXBpcGVzZW5kID0gMTsKLSAgICB9 Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFRoaXMgaXMg Y29tbWVudGVkIG91dCBiZWNhdXNlIHdlIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSBuYW1lIHdl IGFyZQotICB1c2luZyB3YXMgc3BlY2lmaWVkIGJ5IHRoZSBsb2NhbCB1c2VyIGFzIGFuIG92ZXJy aWRlLCBvciBjYW1lIGZyb20gdGhlCi0gIGluY29taW5nIHBhY2tldC4gIEluIHRoZSBmb3JtZXIg Y2FzZSwgd2UgZG9uJ3QgZG8gc3R1ZmYgdG8gaXQgKGxpa2UKLSAgc3RyaXAgdGhlIHBhdGhuYW1l KSB0aGF0IHdlIG1pZ2h0IGRvIHRvIGl0IGluIHRoZSBsYXR0ZXIuCi0qLwotICAgIGNtYXJnMiA9 ICIiOwkJCS8qIERvbmUgd2l0aCBhbHRlcm5hdGUgbmFtZSAqLwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLQotICAgIGlmICgoaW50KXN0cmxlbigoY2hhciAqKXNydmNtZCkgPiBDS01BWFBBVEgpIC8q IFdhdGNoIG91dCBmb3Igb3ZlcmZsb3cgKi8KLSAgICAgICooc3J2Y21kICsgQ0tNQVhQQVRIIC0g MSkgPSBOVUw7Ci0KLSAgICAvKiBBdCB0aGlzIHBvaW50LCBzcnZjbWRbXSBjb250YWlucyB0aGUg aW5jb21pbmcgZmlsZW5hbWUgb3IgYXMtbmFtZS4gKi8KLSAgICAvKiBTbyBOT1cgd2UgY2hlY2sg Zm9yIHdyaXRlIGFjY2Vzcy4gKi8KLQotICAgIGlmICh6Y2hrbygoY2hhciAqKXNydmNtZCkgPCAw KSB7CS8qIFByZWNoZWNrIGZvciB3cml0ZSBhY2Nlc3MgKi8KLQlkZWJ1ZyhGMTEwLCJyY3ZmaWwg YWNjZXNzIGRlbmllZCIsc3J2Y21kLDApOwotCXJmX2VyciA9ICJXcml0ZSBhY2Nlc3MgZGVuaWVk IjsKLQlkaXNjYXJkID0gb3BuZXJyID0gMTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotICAgIHh4c2Ny ZWVuKFNDUl9GTiwwLDBsLChjaGFyICopc3J2Y21kKTsgLyogUHV0IGl0IG9uIHNjcmVlbiBpZiBs b2NhbCAqLwotICAgIGRlYnVnKEYxMTAsInJjdmZpbCBzcnZjbWQgMSIsc3J2Y21kLDApOwotICAg IHRsb2coRjExMCwiUmVjZWl2aW5nIiwoY2hhciAqKXNydmNtZCwwTCk7IC8qIFRyYW5zYWN0aW9u IGxvZyBlbnRyeSAqLwotCi0jaWZkZWYgQ0tfTEFCRUxFRAotI2lmZGVmIFZNUwotLyoKLSAgSWYg d2UgaGF2ZSBhbiBhcy1uYW1lLCB0aGlzIG92ZXJyaWRlcyB0aGUgaW50ZXJuYWwgbmFtZSBpZiB3 ZSBhcmUgZG9pbmcKLSAgYSBsYWJlbGVkLW1vZGUgdHJhbnNmZXIuCi0qLwotICAgIGlmICgqY21h cmcyKSB7Ci0JZXh0ZXJuIGludCBsZl9vcHRzOwotCWxmX29wdHMgJj0gfkxCTF9OQU07Ci0gICAg fQotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLQotICAgIGRlYnVn KEYxMTEsInJjdmZpbCBwaXBlc2VuZCIsc3J2Y21kLHBpcGVzZW5kKTsKLQotI2lmZGVmIFBJUEVT RU5ECi0gICAgLyogU2tpcCBhbGwgdGhlIGZpbGVuYW1lIG1hbmlwdWxhdGlvbiBhbmQgY29sbGlz aW9uIGFjdGlvbnMgKi8KLSAgICBpZiAocGlwZXNlbmQpIHsKLQlkaXJmbGcgPSAwOwotCW9mbjFb MF0gPSAnISc7Ci0JY2tzdHJuY3B5KCZvZm4xWzFdLChjaGFyICopc3J2Y21kLENLTUFYUEFUSCsx KTsKLQlja3N0cm5jcHkobixvZm4xLENLTUFYUEFUSCsxKTsKLQlja3N0cm5jcHkoZnNwZWMsb2Zu MSxDS01BWFBBVEgrMSk7Ci0JbWFrZXN0cigmcHJmc3BlYyxmc3BlYyk7CS8qIE5ldyBwcmVsaW1p bmFyeSBmaWxlbmFtZSAqLwotCWRlYnVnKEYxMTAsInJjdmZpbCBwaXBlc2VuZCIsb2ZuMSwwKTsK LQlnb3RvIHJjdmZpbHg7Ci0gICAgfQotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0vKgotICBUaGlz IGlzIHRvIGF2b2lkIHBhc3NpbmcgZW1haWwgc3ViamVjdHMgdGhyb3VnaCBuenJ0b2woKS4KLSAg V2UgaGF2ZW4ndCB5ZXQgcmVjZWl2ZWQgdGhlIEEgcGFja2V0IHNvIHdlIGRvbid0IHlldCBrbm93 IGl0J3MgZS1tYWlsLAotICBzbyBpbiBmYWN0IHdlIGdvIGFoZWFkIGFuZCBjb252ZXJ0IGl0IGFu eXdheSwgYnV0IGxhdGVyIHdlIGdldCB0aGUKLSAgb3JpZ2luYWwgYmFjayBmcm9tIG9maWxuYW1b XS4KLSovICAKLSAgICBkaXNwb3MgPSAwOwotICAgIGNrc3RybmNweShvZmlsbmFtLChjaGFyICop c3J2Y21kLENLTUFYUEFUSCsxKTsKLQotI2lmZGVmIE5aTFRPUgotICAgIGlmICgqY21hcmcyKQot ICAgICAgY2tzdHJuY3B5KChjaGFyICopb2ZuMSwoY2hhciAqKXNydmNtZCxDS01BWFBBVEgrMSk7 Ci0gICAgZWxzZQotICAgICAgbnpydG9sKChjaGFyICopc3J2Y21kLAkJLyogRmlsZW5hbWUgZnJv bSBwYWNrZXQgKi8KLQkgICAgIChjaGFyICopb2ZuMSwJCS8qIFdoZXJlIHRvIHB1dCByZXN1bHQg Ki8KLQkgICAgIGZuY252LAkJCS8qIEZpbGVuYW1lIGNvbnZlcnNpb24gKi8KLQkgICAgIGZucnBh dGgsCQkJLyogUGF0aG5hbWUgaGFuZGxpbmcgKi8KLQkgICAgIENLTUFYUEFUSAkJCS8qIFNpemUg b2YgcmVzdWx0IGJ1ZmZlciAqLwotCSAgICAgKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMSwicmN2 ZmlsIGZucnBhdGgiLCIiLGZucnBhdGgpOyAvKiBIYW5kbGUgcGF0aG5hbWVzICovCi0gICAgaWYg KGZucnBhdGggPT0gUEFUSF9PRkYgJiYgISpjbWFyZzIpIHsgLyogUkVDRUlWRSBQQVRITkFNRVMg T0ZGPyAqLwotCWNoYXIgKnQ7CQkJLyogWWVzLiAqLwotCXpzdHJpcCgoY2hhciAqKXNydmNtZCwm dCk7CS8qIElmIHRoZXJlIGlzIGEgcGF0aG5hbWUsIHN0cmlwIGl0ICovCi0JZGVidWcoRjExMCwi cmN2ZmlsIFBBVEhfT0ZGIHpzdHJpcCIsdCwwKTsKLQlpZiAoIXQpCQkJCS8qIEJlIHN1cmUgd2Ug ZGlkbid0IHN0cmlwIHRvbyBtdWNoICovCi0JICBzcHJpbnRmKG9mbjEsIkZJTEUlMDJsZCIsZmls Y250KTsKLQllbHNlIGlmICgqdCA9PSAnXDAnKQotCSAgc3ByaW50ZihvZm4xLCJGSUxFJTAybGQi LGZpbGNudCk7Ci0JZWxzZQotCSAgY2tzdHJuY3B5KG9mbjEsdCxDS01BWFBBVEgrMSk7Ci0JY2tz dHJuY3B5KChjaGFyICopc3J2Y21kLG9mbjEsc3J2Y21kbGVuKTsgLyogTm93IGNvcHkgaXQgYmFj ay4gKi8KLSAgICB9Ci0vKgotICBTRVQgUkVDRUlWRSBQQVRITkFNRVMgUkVMQVRJVkUuLi4KLSAg VGhlIGZvbGxvd2luZyBkb2Vzbid0IGJlbG9uZyBoZXJlIGJ1dCBkb2luZyBpdCByaWdodCB3b3Vs ZCByZXF1aXJlCi0gIGRlZmluaW5nIGFuZCBpbXBsZW1lbnRpbmcgYSBuZXcgZmlsZSByb3V0aW5l IGZvciBhbGwgY2s/ZmlvLmMgbW9kdWxlcy4KLSAgU28gZm9yIG5vdy4uLgotKi8KLSNpZmRlZiBV TklYT1JPU0sKLSAgICBlbHNlIGlmIChmbnJwYXRoID09IFBBVEhfUkVMICYmICEqY21hcmcyKSB7 Ci0JaWYgKGlzYWJzb2x1dGUoKGNoYXIgKilzcnZjbWQpKSB7Ci0JICAgIG9mbjFbMF0gPSAnLic7 Ci0JICAgIGNrc3RybmNweSgmb2YxblsxXSwoY2hhciAqKXNydmNtZCxDS01BWFBBVEgrMSk7Ci0J ICAgIGNrc3RybmNweSgoY2hhciAqKXNydmNtZCxvZm4xLHNydmNtZGxlbik7Ci0JICAgIGRlYnVn KEYxMTAsInJjdmZpbCBQQVRIX1JFTCIsb2ZuMSwwKTsKLQl9Ci0gICAgfQotI2Vsc2UKLSNpZmRl ZiBPUzIKLSAgICBlbHNlIGlmIChmbnJwYXRoID09IFBBVEhfUkVMICYmICEqY21hcmcyKSB7Ci0J aWYgKGlzYWJzb2x1dGUoKGNoYXIgKilzcnZjbWQpKSB7Ci0JICAgIGNoYXIgKnAgPSAoY2hhciAq KXNydmNtZDsKLQkgICAgaWYgKGlzYWxwaGEoKnApICYmICoocCsxKSA9PSAnOicpCi0JICAgICAg cCArPSAyOwotCSAgICBpZiAoKnAgPT0gJ1xcJyB8fCAqcCA9PSAnLycpCi0JICAgICAgcCsrOwot CSAgICBja3N0cm5jcHkob2ZuMSxwLENLTUFYUEFUSCsxKTsKLQkgICAgY2tzdHJuY3B5KChjaGFy ICopc3J2Y21kLG9mbjEsc3J2Y21kbGVuKTsKLQkgICAgZGVidWcoRjExMCwicmN2ZmlsIE9TMiBQ QVRIX1JFTCIsb2ZuMSwwKTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8q IFVOSVhPUk9TSyAqLwotCi0gICAgLyogTm93IHNydmNtZCBjb250YWlucyBpbmNvbWluZyBmaWxl bmFtZSB3aXRoIHBhdGggcG9zc2libHkgc3RyaXBwZWQgKi8KLQotICAgIGlmIChmbmNudikJCQkJ LyogRklMRSBOQU1FUyBDT05WRVJURUQ/ICovCi0gICAgICB6cnRvbCgoY2hhciAqKXNydmNtZCwo Y2hhciAqKW9mbjEpOyAvKiBZZXMsIGNvbnZlcnQgdG8gbG9jYWwgZm9ybSAqLwotICAgIGVsc2UK LSAgICAgIGNrc3RybmNweShvZm4xLChjaGFyICopc3J2Y21kLENLTUFYUEFUSCsxKTsgLyogTm8s IGNvcHkgbGl0ZXJhbGx5LiAqLwotI2VuZGlmIC8qIE5aTFRPUiAqLwotCi0jaWZkZWYgUElQRVNF TkQKLSAgICBpZiAocmN2ZmlsdGVyKSB7Ci0JY2hhciAqIHAgPSBOVUxMLCAqIHE7Ci0JaW50IG5u ID0gTUFYUlA7Ci0JcGlwZXNlbmQgPSAxOwotCWRlYnVnKEYxMTAsInJjdmZpbCByY3ZmaWx0ZXIg IixyY3ZmaWx0ZXIsMCk7Ci0jaWZuZGVmIE5PU1BMCi0JaWYgKChwID0gKGNoYXIgKikgbWFsbG9j KG5uICsgMSkpKSB7Ci0JICAgIHEgPSBwOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIC8q IFdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQgc3J2Y21kIGFuZCBwbGFjZWQgaXQgaW50byBvZm4x ICovCi0gICAgICAgICAgICBja3N0cm5jcHkob2ZuMSwoY2hhciAqKXNydmNtZCxDS01BWFBBVEgr MSk7IC8qIEZvciBcdihmaWxlbmFtZSkgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgIGRl YnVnKEYxMTAsInJjdmZpbGUgcGlwZXNlbmQgZmlsdGVyIixyY3ZmaWx0ZXIsMCk7Ci0JICAgIHp6 c3RyaW5nKHJjdmZpbHRlciwmcCwmbm4pOwotCSAgICBkZWJ1ZyhGMTExLCJyY3ZmaWwgcGlwZW5h bWUiLHEsbm4pOwotCSAgICBpZiAobm4gPD0gMCkgewotCQlwcmludGYoCi0JCSAgICAgICAiP1Nv cnJ5LCByZWNlaXZlIGZpbHRlciArIGZpbGVuYW1lIHRvbyBsb25nLCAlZCBtYXguXG4iLAotCQkg ICAgICAgQ0tNQVhQQVRICi0JCSAgICAgICApOwotCQlyZl9lcnIgPSAiTmFtZSB0b28gbG9uZyI7 Ci0JCWZyZWUocSk7Ci0JCXJldHVybigwKTsKLQkgICAgfQotCSAgICBja3N0cm5jcHkoKGNoYXIg KilzcnZjbWQscSxNQVhSUCk7Ci0JICAgIGZyZWUocSk7Ci0JfQotI2VuZGlmIC8qIE5PU1BMICov Ci0gICAgfQotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLSAgICAvKiBOb3cgdGhlIGluY29taW5n IGZpbGVuYW1lLCBwb3NzaWJseSBjb252ZXJ0ZWQsIGlzIGluIG9mbjFbXS4gKi8KLQotI2lmZGVm IE9TMgotICAgIC8qIERvbid0IHJlZnVzZSB0aGUgZmlsZSBqdXN0IGJlY2F1c2UgdGhlIG5hbWUg aXMgaWxsZWdhbC4gKi8KLSAgICBpZiAoIUlzRmlsZU5hbWVWYWxpZChvZm4xKSkgewkvKiBOYW1l IGlzIE9LIGZvciBPUy8yPyAqLwotI2lmZGVmIE9TMk9OTFkKLQljaGFyICp6cyA9IE5VTEw7Ci0J enN0cmlwKG9mbjEsICZ6cyk7CQkvKiBOb3QgdmFsaWQsIHN0cmlwIHVuY29uZGl0aW9uYWxseSAq LwotCWlmICh6cykgewotCSAgICBpZiAoaWF0dHIubG9uZ25hbWUubGVuICYmCS8qIEZyZWUgcHJl dmlvdXMgbG9uZ25hbWUsIGlmIGFueSAqLwotCQlpYXR0ci5sb25nbmFtZS52YWwpCi0JICAgICAg ZnJlZShpYXR0ci5sb25nbmFtZS52YWwpOwotCSAgICBpYXR0ci5sb25nbmFtZS5sZW4gPSBzdHJs ZW4oenMpOyAvKiBTdG9yZSBpbiBhdHRyaWJ1dGUgc3RydWN0dXJlICovCi0JICAgIGlhdHRyLmxv bmduYW1lLnZhbCA9IChjaGFyICopIG1hbGxvYyhpYXR0ci5sb25nbmFtZS5sZW4gKyAxKTsKLQkg ICAgaWYgKGlhdHRyLmxvbmduYW1lLnZhbCkJLyogUmVtZW1iZXIgdGhpcyAoaWxsZWdhbCkgbmFt ZSAqLwotCSAgICAgIHN0cmNweShpYXR0ci5sb25nbmFtZS52YWwsIHpzKTsgLyogc2FmZSAqLwot CX0KLSNlbmRpZiAvKiBPUzJPTkxZICovCi0JZGVidWcoRjExMCwicmN2ZmlsOiBpbnZhbGlkIGZp bGUgbmFtZSIsb2ZuMSwwKTsKLQlDaGFuZ2VOYW1lRm9yRkFUKG9mbjEpOwkvKiBDaGFuZ2UgdG8g YW4gYWNjZXB0YWJsZSBuYW1lICovCi0JZGVidWcoRjExMCwicmN2ZmlsOiBGQVQgZmlsZSBuYW1l IixvZm4xLDApOwotCi0gICAgfSBlbHNlIHsJCQkJLyogTmFtZSBpcyBPSy4gKi8KLQotCWRlYnVn KEYxMTAsInJjdmZpbDogdmFsaWQgZmlsZSBuYW1lIixvZm4xLDApOwotI2lmZGVmIE9TMk9OTFkK LQlpZiAoaWF0dHIubG9uZ25hbWUubGVuICYmCi0JICAgICBpYXR0ci5sb25nbmFtZS52YWwpCS8q IEZyZWUgcHJldmlvdXMgbG9uZ25hbWUsIGlmIGFueSAqLwotCSAgZnJlZShpYXR0ci5sb25nbmFt ZS52YWwpOwotCWlhdHRyLmxvbmduYW1lLmxlbiA9IDA7Ci0JaWF0dHIubG9uZ25hbWUudmFsID0g TlVMTDsJLyogVGhpcyBmaWxlIGRvZXNuJ3QgbmVlZCBhIGxvbmduYW1lICovCi0jZW5kaWYgLyog T1MyT05MWSAqLwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBkZWJ1ZyhGMTEwLCJyY3Zm aWwgYXMiLG9mbjEsMCk7Ci0KLS8qIEZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb24gc2VjdGlvbi4g Ki8KLQotICAgIGRpcmZsZyA9CQkJCS8qIElzIGl0IGEgZGlyZWN0b3J5IG5hbWU/ICovCi0jaWZk ZWYgQ0tfVE1QRElSCi0gICAgICAgIGlzZGlyKG9mbjEpCi0jZWxzZQotCTAKLSNlbmRpZiAvKiBD S19UTVBESVIgKi8KLQkgIDsKLSAgICBkZWJ1ZyhGMTAxLCJyY3ZmaWwgZGlyZmxnIiwiIixkaXJm bGcpOwotICAgIG9mbjFsZW4gPSB6Y2hraShvZm4xKTsJCS8qIEZpbGUgYWxyZWFkeSBleGlzdHM/ ICovCi0gICAgZGVidWcoRjExMSwicmN2ZmlsIG9mbjFsZW4iLG9mbjEsb2ZuMWxlbik7Ci0gICAg b2ZuMXggPSAob2ZuMWxlbiAhPSAoQ0tfT0ZGX1QpLTEpOwotCi0gICAgaWYgKCAoCi0jaWZkZWYg VU5JWAotCXN0cmNtcChvZm4xLCIvZGV2L251bGwiKSAmJgkvKiBJdCdzIG5vdCB0aGUgbnVsbCBk ZXZpY2U/ICovCi0jZWxzZQotI2lmZGVmIE9TSwotCXN0cmNtcChvZm4xLCIvbmlsIikgJiYKLSNl bmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBVTklYICovCi0JIXN0ZG91ZiApICYmCQkJLyogTm90 IGNvcHlpbmcgdG8gc3RhbmRhcmQgb3V0cHV0PyAqLwotCW9mbjF4IHx8CQkJLyogRmlsZSBvZiBz YW1lIG5hbWUgZXhpc3RzPyAqLwotCWRpcmZsZyApIHsJCQkvKiBPciBmaWxlIGlzIGEgZGlyZWN0 b3J5PyAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJyY3ZmaWwgZXhpc3RzIixvZm4xLGZuY2FjdCk7 Ci0jaWZkZWYgQ0tfUEVSTVMKLQlvZnBlcm1zID0gemdwZXJtKChjaGFyICopb2ZuMSk7CS8qIEdl dCBvbGQgZmlsZSdzIHBlcm1pc3Npb25zICovCi0JZGVidWcoRjExMCwicmN2ZmlsIHBlcm1zIixv ZnBlcm1zLDApOwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0KLQlkZWJ1ZyhGMTAxLCJyY3ZmaWwg Zm5jYWN0IiwiIixmbmNhY3QpOwotCXN3aXRjaCAoZm5jYWN0KSB7CQkvKiBZZXMsIGRvIHdoYXQg dXNlciBzYWlkLiAqLwotCSAgY2FzZSBYWUZYX0E6CQkJLyogQXBwZW5kICovCi0JICAgIG9mcGVy bXMgPSAiIjsKLQkgICAgZGVidWcoRjEwMCwicmN2ZmlsIGFwcGVuZCIsIiIsMCk7Ci0JICAgIGlm IChkaXJmbGcpIHsKLQkJcmZfZXJyID0gIkNhbid0IGFwcGVuZCB0byBhIGRpcmVjdG9yeSI7Ci0J CXRsb2coRjEwMCwiIGVycm9yIC0gY2FuJ3QgYXBwZW5kIHRvIGRpcmVjdG9yeSIsIiIsMCk7Ci0J CWRpc2NhcmQgPSBvcG5lcnIgPSAxOwotCQlyZXR1cm4oMCk7Ci0JICAgIH0KLQkgICAgdGxvZyhG MTEwLCIgYXBwZW5kaW5nIHRvIixvZm4xLDApOwotCSAgICBicmVhazsKLSNpZmRlZiBDT01NRU5U Ci0JICBjYXNlIFhZRlhfUToJCQkvKiBRdWVyeSAoQXNrKSAqLwotCSAgICBicmVhazsJCQkvKiBu b3QgaW1wbGVtZW50ZWQgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICBjYXNlIFhZRlhfQjoJ CQkvKiBCYWNrdXAgKHJlbmFtZSBvbGQgZmlsZSkgKi8KLQkgICAgaWYgKGRpcmZsZykgewotCQly Zl9lcnIgPSAiQ2FuJ3QgcmVuYW1lIGV4aXN0aW5nIGRpcmVjdG9yeSI7Ci0JCXRsb2coRjEwMCwi IGVycm9yIC0gY2FuJ3QgcmVuYW1lIGRpcmVjdG9yeSIsIiIsMCk7Ci0JCWRpc2NhcmQgPSBvcG5l cnIgPSAxOwotCQlyZXR1cm4oMCk7Ci0JICAgIH0KLQkgICAgem5ld24ob2ZuMSwmb2ZuMik7CQkv KiBHZXQgbmV3IHVuaXF1ZSBuYW1lICovCi0JICAgIHRsb2coRjExMCwiIGJhY2t1cDoiLG9mbjIs MCk7Ci0JICAgIGRlYnVnKEYxMTAsInJjdmZpbCBiYWNrdXAgb2ZuMSIsb2ZuMSwwKTsKLQkgICAg ZGVidWcoRjExMCwicmN2ZmlsIGJhY2t1cCBvZm4yIixvZm4yLDApOwotI2lmZGVmIENLX0xBQkVM RUQKLSNpZmRlZiBPUzJPTkxZCi0vKgotICBJbiBjYXNlIHRoaXMgaXMgYSBGQVQgZmlsZSBzeXN0 ZW0sIHdlIGNhbid0IGNoYW5nZSBvbmx5IHRoZSBGQVQgbmFtZSwgd2UKLSAgYWxzbyBoYXZlIHRv IGNoYW5nZSB0aGUgbG9uZ25hbWUgZnJvbSB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlcyBibG9jay4K LSAgT3RoZXJ3aXNlLCB3ZSdsbCBoYXZlIG1hbnkgZmlsZXMgd2l0aCB0aGUgc2FtZSBsb25nbmFt ZSBhbmQgaWYgd2UgY29weSB0aGVtCi0gIHRvIGFuIEhQRlMgdm9sdW1lLCBvbmx5IG9uZSB3aWxs IHN1cnZpdmUuCi0qLwotCSAgICBpZiAob3MyZ2V0bG9uZ25hbWUob2ZuMSwgJmxvbmduYW1lKSA+ IC0xKSB7Ci0JCWlmIChzdHJsZW4obG9uZ25hbWUpKSB7Ci0JCSAgICBjaGFyIHRtcFsxMF07Ci0J CSAgICBleHRlcm4gaW50IGNrX3puZXduOwotCQkgICAgc3ByaW50Zih0bXAsIi5+JWR+Iixja196 bmV3bik7Ci0JCSAgICBuZXdsb25nbmFtZSA9Ci0JCSAgICAgIChjaGFyICopIG1hbGxvYyhzdHJs ZW4obG9uZ25hbWUpICsgc3RybGVuKHRtcCkgKyAxKTsKLQkJICAgIGlmIChuZXdsb25nbmFtZSkg ewotCQkJc3RyY3B5KG5ld2xvbmduYW1lLCBsb25nbmFtZSk7IC8qIHNhZmUgKHByZWNoZWNrZWQp ICovCi0JCQlzdHJjYXQobmV3bG9uZ25hbWUsIHRtcCk7IC8qIHNhZmUgKHByZWNoZWNrZWQpICov Ci0JCQlvczJzZXRsb25nbmFtZShvZm4xLCBuZXdsb25nbmFtZSk7Ci0JCQlmcmVlKG5ld2xvbmdu YW1lKTsKLQkJCW5ld2xvbmduYW1lID0gTlVMTDsKLQkJICAgIH0KLQkJfQotCSAgICB9IGVsc2Ug ZGVidWcoRjEwMCwicmN2ZmlsIG9zMmdldGxvbmduYW1lIGZhaWxlZCIsIiIsMCk7Ci0jZW5kaWYg LyogT1MyT05MWSAqLwotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLQotI2lmZGVmIENPTU1FTlQK LQkgICAgLyogRG8gdGhpcyBsYXRlciwgaW4gb3BlbmEoKS4uLiAqLwotCSAgICBpZiAoenJlbmFt ZShvZm4xLG9mbjIpIDwgMCkgewotCQlyZl9lcnIgPSAiQ2FuJ3QgdHJhbnNmb3JtIGZpbGVuYW1l IjsKLQkJZGVidWcoRjExMCwicmN2ZmlsIHJlbmFtZSBmYWlscyIsb2ZuMSwwKTsKLQkJZGlzY2Fy ZCA9IG9wbmVyciA9IDE7Ci0JCXJldHVybigwKTsKLQkgICAgfQotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgWFlGWF9EOgkJCS8qIERpc2NhcmQgKHJlZnVzZSBu ZXcgZmlsZSkgKi8KLQkgICAgb2ZwZXJtcyA9ICIiOwotCSAgICBkaXNjYXJkID0gMTsKLQkgICAg cmVqZWN0aW9uID0gMTsJCS8qIEhvcnJpYmxlIGhhY2s6IHJlYXNvbiA9IG5hbWUgKi8KLQkgICAg ZGVidWcoRjEwMSwicmN2ZmlsIGRpc2NhcmQiLCIiLGRpc2NhcmQpOwotCSAgICB0bG9nKEYxMDAs IiByZWZ1c2VkOiBuYW1lIiwiIiwwKTsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgWFlGWF9SOgkJ CS8qIFJlbmFtZSBpbmNvbWluZyBmaWxlICovCi0JICAgIHpuZXduKG9mbjEsJm9mbjIpOwkJLyog TWFrZSBuZXcgbmFtZSBmb3IgaXQgKi8KLSNpZmRlZiBPUzJPTkxZCi0JICAgIGlmIChpYXR0ci5s b25nbmFtZS5sZW4pIHsKLQkJY2hhciB0bXBbMTBdOwotCQlleHRlcm4gaW50IGNrX3puZXduOwot CQlzcHJpbnRmKHRtcCwiLn4lZH4iLGNrX3puZXduKTsKLQkJbmV3bG9uZ25hbWUgPQotCQkgIChj aGFyICopIG1hbGxvYyhpYXR0ci5sb25nbmFtZS5sZW4gKyBzdHJsZW4odG1wKSArIDEpOwotCQlp ZiAobmV3bG9uZ25hbWUpIHsKLQkJICAgIHN0cmNweShuZXdsb25nbmFtZSwgaWF0dHIubG9uZ25h bWUudmFsKTsgLyogc2FmZSAqLwotCQkgICAgc3RyY2F0KG5ld2xvbmduYW1lLCB0bXApOyAvKiBz YWZlICovCi0JCSAgICBkZWJ1ZyhGMTEwLAotCQkJICAiUmVuYW1lIEluY29taW5nOiBuZXdsb25n bmFtZSIsbmV3bG9uZ25hbWUsMCk7Ci0JCSAgICBpZiAoaWF0dHIubG9uZ25hbWUubGVuICYmCi0J CQlpYXR0ci5sb25nbmFtZS52YWwpCi0JCSAgICAgIGZyZWUoaWF0dHIubG9uZ25hbWUudmFsKTsK LQkJICAgIGlhdHRyLmxvbmduYW1lLmxlbiA9IHN0cmxlbihuZXdsb25nbmFtZSk7Ci0JCSAgICBp YXR0ci5sb25nbmFtZS52YWwgPSBuZXdsb25nbmFtZTsKLQkJICAgIC8qIGZyZWUobmV3bG9uZ25h bWUpIGhlcmUgPyAqLwotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBPUzJPTkxZICovCi0JICAgIGJy ZWFrOwotCSAgY2FzZSBYWUZYX1g6CQkJLyogUmVwbGFjZSBvbGQgZmlsZSAqLwotCSAgICBkZWJ1 ZyhGMTAwLCJyY3ZmaWwgb3ZlcndyaXRlIiwiIiwwKTsKLQkgICAgaWYgKGRpcmZsZykgewotCQly Zl9lcnIgPSAiQ2FuJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGRpcmVjdG9yeSI7Ci0JCXRsb2coRjEw MCwiIGVycm9yIC0gY2FuJ3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSIsIiIsMCk7Ci0JCWRpc2NhcmQg PSBvcG5lcnIgPSAxOwotI2lmZGVmIENPTU1FTlQKLQkJcmV0dXJuKDApOwotI2Vsc2UKLQkJYnJl YWs7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICB9Ci0JICAgIHRsb2coRjExMCwib3Zlcndy aXRpbmciLG9mbjEsMCk7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBYWUZYX1U6CQkJLyogUmVmdXNl IGlmIG9sZGVyICovCi0JICAgIGRlYnVnKEYxMTAsInJjdmZpbCB1cGRhdGUiLG9mbjEsMCk7Ci0J ICAgIGlmIChkaXJmbGcpIHsKLQkJcmZfZXJyID0gIkZpbGUgaGFzIHNhbWUgbmFtZSBhcyBleGlz dGluZyBkaXJlY3RvcnkiOwotCQl0bG9nKEYxMTAsIiBlcnJvciAtIGRpcmVjdG9yeSBleGlzdHM6 IixvZm4xLDApOwotCQlkaXNjYXJkID0gb3BuZXJyID0gMTsKLSNpZmRlZiBDT01NRU5UCi0JCS8q IERvbid0IHNlbmQgYW4gZXJyb3IgcGFja2V0LCBqdXN0IHJlZnVzZSB0aGUgZmlsZSAqLwotCQly ZXR1cm4oMCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICB9Ci0JICAgIGJyZWFrOwkJCS8q IE5vdCBoZXJlLCB3ZSBkb24ndCBoYXZlICovCi0JCQkJCS8qIHRoZSBhdHRyaWJ1dGUgcGFja2V0 IHlldC4gKi8KLQkgIGRlZmF1bHQ6Ci0JICAgIG9mcGVybXMgPSAiIjsKLQkgICAgZGVidWcoRjEw MSwicmN2ZmlsIGJhZCBjb2xsaXNpb24gYWN0aW9uIiwiIixmbmNhY3QpOwotCSAgICBicmVhazsK LQl9Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsInJjdmZpbCBvZm4xIixvZm4xLDApOwotICAgIGRl YnVnKEYxMTAsInJjdmZpbCBvZm4yIixvZm4yLDApOwotICAgIGRlYnVnKEYxMTAsInJjdmZpbCBv ZnBlcm1zIixvZnBlcm1zLDApOwotICAgIGlmIChmbmNhY3QgPT0gWFlGWF9SICYmIG9mbjF4ICYm IG9mbjIpIHsgLyogUmVuYW1pbmcgaW5jb21pbmcgZmlsZT8gKi8KLQl4eHNjcmVlbihTQ1JfQU4s MCwwbCxvZm4yKTsJLyogRGlzcGxheSByZW5hbWVkIG5hbWUgKi8KLQlja3N0cm5jcHkobiwgb2Zu MiwgQ0tNQVhQQVRIKzEpOyAvKiBSZXR1cm4gaXQgKi8KLSAgICB9IGVsc2UgewkJCQkvKiBObyAq LwotCXh4c2NyZWVuKFNDUl9BTiwwLDBsLG9mbjEpOwkvKiBEaXNwbGF5IHJlZ3VsYXIgbmFtZSAq LwotCWNrc3RybmNweShuLCBvZm4xLCBDS01BWFBBVEgrMSk7IC8qIGFuZCByZXR1cm4gaXQuICov Ci0gICAgfQotCi0jaWZkZWYgQ0tfTUtESVIKLS8qICBDcmVhdGUgZGlyZWN0b3J5KHMpIGlmIG5l Y2Vzc2FyeS4gICovCi0gICAgaWYgKCFkaXNjYXJkICYmIGZucnBhdGggIT0gUEFUSF9PRkYpIHsg LyogUkVDRUlWRSBQQVRIQU1FUyBPTj8gKi8KLQlpbnQgeDsKLQlkZWJ1ZyhGMTEwLCJyY3ZmaWwg Y2FsbGluZyB6bWtkaXIiLG9mbjEsMCk7IC8qIFllcyAqLwotCWlmICgoeCA9IHpta2RpcihvZm4x KSkgPCAwKSB7Ci0JICAgIGRlYnVnKEYxMDAsInpta2RpciBmYWlscyIsIiIsMCk7Ci0JICAgIHRs b2coRjExMCwiIGVycm9yIC0gZGlyZWN0b3J5IGNyZWF0aW9uIGZhaWx1cmU6IixvZm4xLDApOwot CSAgICByZl9lcnIgPSAiRGlyZWN0b3J5IGNyZWF0aW9uIGZhaWx1cmUuIjsKLQkgICAgZGlzY2Fy ZCA9IDE7Ci0JICAgIHJldHVybigwKTsKLQl9Ci0jaWZkZWYgVExPRwotCWVsc2UgaWYgKHggPiAw KQotCSAgdGxvZyhGMTEwLCIgcGF0aCBjcmVhdGVkOiIsb2ZuMSwwKTsKLSNlbmRpZiAvKiBUTE9H ICovCi0gICAgfQotI2Vsc2UKLSAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWwgQ0tfTUtESVIgbm90IGRl ZmluZWQiLG9mbjEsMCk7Ci0jZW5kaWYgLyogQ0tfTUtESVIgKi8KLQotICAgIGlmIChjYWxpYnJh dGUpCi0gICAgICBja3N0cm5jcHkoZnNwZWMsb2ZuMSxDS01BWFBBVEgrMSk7Ci0gICAgZWxzZQot ICAgICAgemZucWZwKG9mbjEsZnNwZWNsZW4sZnNwZWMpOwotICAgIGRlYnVnKEYxMTAsInJjdmZp bCBmc3BlYyIsZnNwZWMsMCk7Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogU2VlIGNvbW1lbnRz IHdpdGggVk1TIHpmbnFmcCgpLi4uICovCi0jaWZkZWYgVk1TCi0gICAgLyogemZucWZwKCkgZG9l cyBub3QgcmV0dXJuIHRoZSB2ZXJzaW9uIG51bWJlciAqLwotICAgIGlmICghY2FsaWJyYXRlKSB7 Ci0JaW50IHgsIHY7Ci0JeCA9IHN0cmxlbihvZm4xKTsKLQlpZiAoeCA+IDApIHsKLQkgICAgaWYg KG9mbjFbeC0xXSA9PSAnOycpIHsKLQkJdiA9IGdldHZudW0ob2ZuMSk7Ci0JCWNrc3RybmNweSgm b2ZuMVt4XSxja2l0b2EodiksQ0tNQVhQQVRILXgpOwotCSAgICB9Ci0JfQotICAgIH0KLSNlbmRp ZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgZnNwZWNbZnNwZWNsZW5dID0g TlVMOwotICAgIG1ha2VzdHIoJnByZnNwZWMsZnNwZWMpOwkJLyogTmV3IHByZWxpbWluYXJ5IGZp bGVuYW1lICovCi0KLSNpZmRlZiBQSVBFU0VORAotICByY3ZmaWx4OgotI2VuZGlmIC8qIFBJUEVT RU5EICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWx4OiBuIixuLDApOwotICAgIGRlYnVnKEYx MTAsInJjdmZpbHg6IG9mbjEiLG9mbjEsMCk7Ci0gICAgZmZjID0gKENLX09GRl9UKTA7CQkJLyog SW5pdCBwZXItZmlsZSBjb3VudGVycyAqLwotICAgIGNwcyA9IG9sZGNwcyA9IDBMOwotICAgIHJz X2xlbiA9IChDS19PRkZfVCkwOwotICAgIHJlamVjdGlvbiA9IC0xOwotICAgIGZzZWNzID0gZ3Rp bWVyKCk7CQkJLyogVGltZSB0aGlzIGZpbGUgc3RhcnRlZCAqLwotI2lmZGVmIEdGVElNRVIKLSAg ICBmcGZzZWNzID0gZ2Z0aW1lcigpOwotICAgIGRlYnVnKEYxMDEsInJjdmZpbCBmcGZzZWNzIiwi IixmcGZzZWNzKTsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgZmlsY250Kys7Ci0gICAgaW50 bXNnKGZpbGNudCk7Ci0gICAgcmV0dXJuKDEpOwkJCQkvKiBTdWNjZXNzZnVsIHJldHVybiAqLwot fQotCi0KLS8qICBSIEUgTyBGICAtLSAgUmVjZWl2ZSBFbmQgT2YgRmlsZSBwYWNrZXQgZm9yIGlu Y29taW5nIGZpbGUgKi8KLQotLyoKLSAgQ2xvc2VzIHRoZSByZWNlaXZlZCBmaWxlLgotICBSZXR1 cm5zOgotICAgIDAgb24gc3VjY2Vzcy4KLSAgIC0xIGlmIGZpbGUgY291bGQgbm90IGJlIGNsb3Nl ZC4KLSAgICAyIGlmIGRpc3Bvc2l0aW9uIHdhcyBtYWlsLCBtYWlsIHdhcyBzZW50LCBidXQgdGVt cCBmaWxlIG5vdCBkZWxldGVkLgotICAgIDMgaWYgZGlzcG9zaXRpb24gd2FzIHByaW50LCBmaWxl IHdhcyBwcmludGVkLCBidXQgbm90IGRlbGV0ZWQuCi0gICAtMiBpZiBkaXNwb3NpdGlvbiB3YXMg bWFpbCBhbmQgbWFpbCBjb3VsZCBub3QgYmUgc2VudAotICAgLTMgaWYgZGlzcG9zaXRpb24gd2Fz IHByaW50IGFuZCBmaWxlIGNvdWxkIG5vdCBiZSBwcmludGVkCi0gICAtNCBpZiBNT1ZFLVRPOiBm YWlsZWQKLSAgIC01IGlmIFJFTkFNRS1UTzogZmFpbGVkCi0qLwotaW50Ci1yZW9mKGYseXkpIGNo YXIgKmY7IHN0cnVjdCB6YXR0ciAqeXk7IHsKLSAgICBleHRlcm4gY2hhciAqIHJjdl9tb3ZlLCAq IHJjdl9yZW5hbWU7Ci0gICAgZXh0ZXJuIGludCBvX2lzb3BlbjsKLSAgICBpbnQgcmMgPSAwOwkJ CQkvKiBSZXR1cm4gY29kZSAqLwotICAgIGNoYXIgKnA7Ci0gICAgY2hhciBjOwotCi0gICAgZGVi dWcoRjExMSwicmVvZiBmbmNhY3QiLGYsZm5jYWN0KTsKLSAgICBkZWJ1ZyhGMTAxLCJyZW9mIGRp c2NhcmQiLCIiLGRpc2NhcmQpOwotICAgIHN1Y2Nlc3MgPSAxOwkJCS8qIEFzc3VtZSBzdGF0dXMg aXMgT0sgKi8KLSAgICBsc3N0YXRlID0gMDsJCQkvKiBDYW5jZWwgbG9ja2luZy1zaGlmdCBzdGF0 ZSAqLwotICAgIGlmIChkaXNjYXJkKSB7CQkJLyogSGFuZGxlIGF0dHJpYnV0ZSByZWZ1c2Fscywg ZXRjLiAqLwotCWRlYnVnKEYxMDEsInJlb2YgZGlzY2FyZGluZyIsIiIsMCk7Ci0Jc3VjY2VzcyA9 IDA7CQkJLyogU3RhdHVzID0gZmFpbGVkLiAqLwotCWlmIChyZWplY3Rpb24gPT0gJyMnIHx8CQkv KiBVbmxlc3MgcmVqZWN0aW9uIHJlYXNvbiBpcyAqLwotCSAgICByZWplY3Rpb24gPT0gIDEgIHx8 CQkvKiBkYXRlIG9yIG5hbWUgKFNFVCBGSUxFIENPTExJU0lPTiAqLwotCSAgICByZWplY3Rpb24g PT0gJz8nKQkJLyogVVBEQVRFIG9yIERJU0NBUkQpICovCi0JICBzdWNjZXNzID0gMTsKLQlkZWJ1 ZyhGMTAxLCJyZW9mIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwotCWZpbHJlaisrOwkJCS8qIENvdW50 IHRoaXMgcmVqZWN0aW9uLiAqLwotCWRpc2NhcmQgPSAwOwkJCS8qIFdlIG5ldmVyIG9wZW5lZCB0 aGUgZmlsZSwgKi8KLQlyZXR1cm4oMCk7CQkJLyogc28gd2UgZG9uJ3QgY2xvc2UgaXQuICovCi0g ICAgfQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDEsInJlb2Yg Y3hzZWVuIiwiIixjeHNlZW4pOwotCWRlYnVnKEYxMDEsInJlb2YgY3pzZWVuIiwiIixjenNlZW4p OwotCWRlYnVnKEYxMTAsInJlb2YgcmRhdGFwIixyZGF0YXAsMCk7Ci0gICAgfQotI2VuZGlmIC8q IERFQlVHICovCi0KLSAgICBpZiAoY3hzZWVuID09IDApCQkJLyogR290IGNhbmNlbCBkaXJlY3Rp dmU/ICovCi0gICAgICBjeHNlZW4gPSAoKnJkYXRhcCA9PSAnRCcpOwotICAgIGlmIChjeHNlZW4g fHwgY3pzZWVuKQkJLyogKGZvciBoaW50cykgKi8KLSAgICAgIGludGVycnVwdGVkID0gMTsKLSAg ICBzdWNjZXNzID0gKGN4c2VlbiB8fCBjenNlZW4pID8gMCA6IDE7IC8qIFNldCBTVUNDRVNTIGZs YWcgYXBwcm9wcmlhdGVseSAqLwotICAgIGlmICghc3VjY2VzcykJCQkgIC8qICJVbmNvdW50IiB0 aGlzIGZpbGUgKi8KLSAgICAgIGZpbHJlaisrOwotICAgIGRlYnVnKEYxMDEsInJlb2Ygb19pc29w ZW4iLCIiLG9faXNvcGVuKTsKLQotICAgIGlmIChvX2lzb3BlbikgewkJCS8qIElmIGFuIG91dHB1 dCBmaWxlIHdhcyBvcGVuLi4uICovCi0KLSNpZmRlZiBDS19DVFJMWgotCWlmIChzdWNjZXNzKSB7 Ci0JICAgIGRlYnVnKEYxMDEsInJlb2YgbGFzdGNoYXIiLCIiLGxhc3RjaGFyKTsKLQkgICAgaWYg KCFiaW5hcnkgJiYgZW9mbWV0aG9kID09IFhZRU9GX1ogJiYgbGFzdGNoYXIgIT0gMjYgJiYKLQkJ KCF4ZmxnIHx8ICh4ZmxnICYmIHJlbWZpbGUpKSkKLQkgICAgICBwbmJ5dGUoKGNoYXIpMjYscHV0 ZmlsKTsKLQl9Ci0jZW5kaWYgLyogQ0tfQ1RSTFogKi8KLQotCXJjID0gY2xzb2YoY3hzZWVuIHx8 IGN6c2Vlbik7CS8qIENsb3NlIHRoZSBmaWxlIChyZXNldHMgY3hzZWVuKSAqLwotCWRlYnVnKEYx MDEsInJlb2YgY2xvc2YiLCIiLHJjKTsKLQlpZiAocmMgPCAwKSB7CQkJLyogSWYgZmFpbHVyZSB0 byBjbG9zZSwgRkFJTCAqLwotCSAgICBpZiAoc3VjY2VzcykgZmlscmVqKys7Ci0JICAgIHN1Y2Nl c3MgPSAwOwotCX0KLQlpZiAoIWNhbGlicmF0ZSkgewotCSAgICAvKiBTZXQgZmlsZSBtb2RpZmlj YXRpb24gZGF0ZSBhbmQvb3IgcGVybWlzc2lvbnMgKi8KLQkgICAgaWYgKHN1Y2Nlc3MpCi0JICAg ICAgenN0aW1lKGYseXksMCk7Ci0jaWZkZWYgT1MyT05MWQotI2lmZGVmIENLX0xBQkVMRUQKLQkg ICAgaWYgKHN1Y2Nlc3MgJiYgeXktPmxvbmduYW1lLmxlbikKLQkgICAgICBvczJzZXRsb25nbmFt ZShmLCB5eS0+bG9uZ25hbWUudmFsKTsKLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0jZW5kaWYg LyogT1MyT05MWSAqLwotCX0KLQlpZiAoc3VjY2VzcyA9PSAwKSB7CQkvKiBBbmQgcHJvZ3JhbSBy ZXR1cm4gY29kZSAqLwotCSAgICB4aXRzdGEgfD0gV19SRUNWOwotCX0gZWxzZSBpZiAoc3VjY2Vz cyA9PSAxKSB7CS8qIEZpbGUgcmVjJ2Qgc3VjY2Vzc2Z1bGx5ICovCi0JICAgIG1ha2VzdHIoJnJy ZnNwZWMscHJyZnNwZWMpOwkvKiBSZWNvcmQgaXQgZm9yIHdoZXJlbXNnICovCi0JICAgIG1ha2Vz dHIoJnJmc3BlYyxwcmZzcGVjKTsKLQl9Ci0KLS8qIEhhbmRsZSBkaXNwb3NpdGlvbnMgZnJvbSBh dHRyaWJ1dGUgcGFja2V0Li4uICovCi0KLQljID0gTlVMOwotI2lmbmRlZiBOT0ZSSUxMUwotCWlm ICghY2FsaWJyYXRlICYmIHl5LT5kaXNwLmxlbiAhPSAwKSB7Ci0JICAgIHAgPSB5eS0+ZGlzcC52 YWw7Ci0JICAgIGMgPSAqcCsrOwotI2lmbmRlZiBVTklYCi0vKgotICBTZWUgY2tjcHJvLncuICBJ biBVTklYIHdlIGRvbid0IHVzZSB0ZW1wIGZpbGVzIGFueSBtb3JlIC0tIHdlIHBpcGUgdGhlCi0g IHN0dWZmIHJpZ2h0IGludG8gbWFpbCBvciBscHIuCi0qLwotCSAgICBpZiAoYyA9PSAnTScpIHsJ CS8qIE1haWwgdG8gdXNlci4gKi8KLQkJcmMgPSB6bWFpbChwLGZpbG5hbSk7CS8qIERvIHRoZSBz eXN0ZW0ncyBtYWlsIGNvbW1hbmQgKi8KLQkJaWYgKHJjIDwgMCkgc3VjY2VzcyA9IDA7CS8qIFJl bWVtYmVyIHN0YXR1cyAqLwotCQl0bG9nKEYxMTAsIm1haWxlZCIsZmlsbmFtLDBMKTsKLQkJdGxv ZyhGMTEwLCIgdG8iLHAsMEwpOwotCQl6ZGVsZXQoZmlsbmFtKTsJCS8qIERlbGV0ZSB0aGUgZmls ZSAqLwotCSAgICB9IGVsc2UgaWYgKGMgPT0gJ1AnKSB7CS8qIFByaW50IHRoZSBmaWxlLiAqLwot CQlyYyA9IHpwcmludChwLGZpbG5hbSk7CS8qIERvIHRoZSBzeXN0ZW0ncyBwcmludCBjb21tYW5k ICovCi0JCWlmIChyYyA8IDApIHN1Y2Nlc3MgPSAwOyAvKiBSZW1lbWJlciBzdGF0dXMgKi8KLQkJ dGxvZyhGMTEwLCJwcmludGVkIixmaWxuYW0sMEwpOwotCQl0bG9nKEYxMTAsIiB3aXRoIG9wdGlv bnMiLHAsMEwpOwotI2lmbmRlZiBWTVMKLSNpZm5kZWYgU1RSQVRVUwotCQkvKiBzcG9vbGVyIGRl bGV0ZXMgZmlsZSBhZnRlciBwcmludCBjb21wbGV0ZSBpbiBWT1MgJiBWTVMgKi8KLQkJaWYgKHpk ZWxldChmaWxuYW0pICYmIHJjID09IDApIHJjID0gMzsgLyogRGVsZXRlIHRoZSBmaWxlICovCi0j ZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIFZNUyAqLwotCSAgICB9Ci0jZW5kaWYgLyog VU5JWCAqLwotCX0KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0JaWYgKHN1Y2Nlc3MgJiYKLQkg ICAgIXBpcGVzZW5kICYmCi0JICAgICFjYWxpYnJhdGUgJiYgYyAhPSAnTScgJiYgYyAhPSAnUCcp IHsKLQkgICAgaWYgKHJjdl9tb3ZlKSB7CQkvKiBJZiAvTU9WRS1UTyB3YXMgZ2l2ZW4uLi4gKi8K LQkJY2hhciAqIHAgPSByY3ZfbW92ZTsKLSNpZmRlZiBDT01NRU5UCi0vKiBObyBuZWVkIGZvciB0 aGlzIC0gaXQncyBhIGRpcmVjdG9yeSBuYW1lICovCi0JCWNoYXIgdG1wYnVmW0NLTUFYUEFUSCsx XTsKLQkJZXh0ZXJuIGludCBjbWRfcXVvdGluZzsJLyogZm9yIFx2KGZpbGVuYW1lKSAqLwotCQlp ZiAoY21kX3F1b3RpbmcpIHsJLyogQnV0IG9ubHkgaWYgY21kX3F1b3RpbmcgaXMgb24gKi8KLQkJ ICAgIGludCBuOwotCQkgICAgbiA9IENLTUFYUEFUSDsKLQkJICAgIHAgPSB0bXBidWY7Ci0JCSAg ICBkZWJ1ZyhGMTExLCJyZW9mIC9tb3ZlLXRvIixyY3ZfbW92ZSwwKTsKLQkJICAgIHp6c3RyaW5n KHJjdl9tb3ZlLCZwLCZuKTsKLQkJICAgIHAgPSB0bXBidWY7Ci0JCX0KLSNlbmRpZiAvKiBDT01N RU5UICovCi0vKgotICBIZXJlIHdlIGNvdWxkIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGlmIGl0IGRp ZG4ndCBleGlzdCAoYW5kIGl0IHdhcyByZWxhdGl2ZSkKLSAgYnV0IHRoZXJlIHdvdWxkIGhhdmUg dG8gYmUgYSB1c2VyLXNldHRhYmxlIG9wdGlvbiB0byBzYXkgd2hldGhlciB0byBkbyB0aGlzLgot Ki8KLQkJcmMgPSB6cmVuYW1lKGZpbG5hbSxwKTsKLQkJZGVidWcoRjExMSwicmVvZiBNT1ZFIHpy ZW5hbWUiLHJjdl9tb3ZlLHJjKTsKLQkJaWYgKHJjID4gLTEpIHsKLQkJICAgIHRsb2coRjExMCwi IG1vdmluZyByZWNlaXZlZCBmaWxlIHRvIixyY3ZfbW92ZSwwKTsKLQkJfSBlbHNlIHsKLQkJICAg IHJjID0gLTQ7Ci0JCSAgICB0bG9nKEYxMTAsIiBGQUlMRUQgdG8gbW92ZSByZWNlaXZlZCBmaWxl IHRvIixyY3ZfbW92ZSwwKTsKLQkJfQotCSAgICB9IGVsc2UgaWYgKHJjdl9yZW5hbWUpIHsJLyog T3IgL1JFTkFNRS1UTzogKi8KLQkJY2hhciAqcyA9IHJjdl9yZW5hbWU7CS8qIFRoaXMgaXMgdGhl IHJlbmFtaW5nIHN0cmluZyAqLwotI2lmbmRlZiBOT1NQTAotCQljaGFyIHRtcG5hbVtDS01BWFBB VEgrMTZdOwotCQlleHRlcm4gaW50IGNtZF9xdW90aW5nOwkvKiBmb3IgXHYoZmlsZW5hbWUpICov Ci0JCWlmIChjbWRfcXVvdGluZykgewkvKiBCdXQgb25seSBpZiBjbWRfcXVvdGluZyBpcyBvbiAq LwotCQkgICAgaW50IG47CQkvKiBQYXNzIGl0IHRocnUgdGhlIGV2YWx1YXRvciAqLwotCQkgICAg biA9IENLTUFYUEFUSDsKLQkJICAgIHMgPSAoY2hhciAqKXRtcG5hbTsKLQkJICAgIHp6c3RyaW5n KHJjdl9yZW5hbWUsJnMsJm4pOwotCQkgICAgcyA9IChjaGFyICopdG1wbmFtOwotCQl9Ci0jZW5k aWYgLyogTk9TUEwgKi8KLQkJaWYgKHMpIGlmICgqcykgewotCQkgICAgcmMgPSB6cmVuYW1lKGZp bG5hbSxzKTsKLQkJICAgIGRlYnVnKEYxMTEsInJlb2YgUkVOQU1FIHpyZW5hbWUiLHMscmMpOwot CQkgICAgaWYgKHJjID4gLTEpIHsKLQkJCXRsb2coRjExMCwiIHJlbmFtaW5nIHJlY2VpdmVkIGZp bGUgdG8iLHMsMCk7Ci0JCSAgICB9IGVsc2UgewotCQkJcmMgPSAtNTsKLQkJCXRsb2coRjExMCwi IEZBSUxFRCB0byByZW5hbWUgcmVjZWl2ZWQgZmlsZSB0byIscywwKTsKLQkJICAgIH0KLQkJfQot CSAgICB9Ci0JfQotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJyZW9mIHN1Y2Nlc3MiLCIiLHN1Y2Nl c3MpOwotICAgIGRlYnVnKEYxMDEsInJlb2YgcmV0dXJucyIsIiIscmMpOwotCi0gICAgZmlsbmFt WzBdID0gTlVMOwkJCS8qIEVyYXNlIHRoZSBmaWxlbmFtZSAqLwotICAgIHJldHVybihyYyk7Ci19 Ci0KLS8qICBSIEUgTyBUICAtLSAgUmVjZWl2ZSBFbmQgT2YgVHJhbnNhY3Rpb24gICovCi0KLVZP SUQKLXJlb3QoKSB7Ci0gICAgY3hzZWVuID0gY3pzZWVuID0gZGlzY2FyZCA9IDA7CS8qIFJlc2V0 IGludGVycnVwdGlvbiBmbGFncyAqLwotICAgIHRzdGF0cygpOwkJCQkvKiBGaW5hbGl6ZSB0cmFu c2ZlciBzdGF0aXN0aWNzICovCi19Ci0KLS8qICBTIEYgSSBMIEUgLS0gU2VuZCBGaWxlIGhlYWRl ciBvciB0ZVh0IGhlYWRlciBwYWNrZXQgICovCi0KLS8qCi0gIENhbGwgd2l0aCB4IG5vbnplcm8g Zm9yIFggcGFja2V0LCB6ZXJvIGZvciBGIHBhY2tldC4KLSAgSWYgWCA9PSAwLCBmaWxlbmFtZSB0 byBzZW5kIGlzIGluIGZpbG5hbVtdLCBhbmQgaWYgY21hcmcyIGlzIG5vdCBudWxsCi0gIG9yIGVt cHR5LCB0aGUgZmlsZSBzaG91bGQgYmUgc2VudCB1bmRlciB0aGlzIG5hbWUgcmF0aGVyIHRoYW4g ZmlsbmFtW10uCi0gIElmIHNuZGZpbHRlciBub3QgTlVMTCwgaXQgaXMgdGhlIG5hbWUgb2YgYSBz ZW5kIGZpbHRlci4KLSAgUmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZS4KLSovCi1p bnQKLXNmaWxlKHgpIGludCB4OyB7Ci0jaWZkZWYgcGRwMTEKLSNkZWZpbmUgUEtUTkwgNjQKLSNl bHNlCi0jZGVmaW5lIFBLVE5MIDI1NgotI2VuZGlmIC8qIHBkcDExICovCi0gICAgY2hhciBwa3Ru YW1bUEtUTkwrMV07CQkvKiBMb2NhbCBjb3B5IG9mIG5hbWUgKi8KLSAgICBjaGFyICpzOwotICAg IGludCByYzsKLSAgICBpbnQgbm90YWZpbGUgPSAwOwotICAgIGV4dGVybiBpbnQgZmlsZXBlZWs7 Ci0jaWZkZWYgUElQRVNFTkQKLSAgICBleHRlcm4gY2hhciAqIHNuZGZpbHRlcjsKLQotICAgIGlm IChzbmRmaWx0ZXIpIHsKLQlwaXBlc2VuZCA9IDE7Ci0JZGVidWcoRjExMCwic2ZpbGUgc2VuZCBm aWx0ZXIgIixzbmRmaWx0ZXIsMCk7Ci0gICAgfQotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLSAg ICBub3RhZmlsZSA9IGNhbGlicmF0ZSB8fCBzbmRhcnJheSB8fCBwaXBlc2VuZCB8fCB4OwotICAg IGRlYnVnKEYxMDEsInNmaWxlIHgiLCIiLHgpOwotICAgIGRlYnVnKEYxMDEsInNmaWxlIG5vdGFm aWxlIiwiIixub3RhZmlsZSk7Ci0KLSNpZm5kZWYgTk9DU0VUUwotICAgIGlmICh0Y3Nfc2F2ZSA+ IC0xKSB7ICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBzZXRzICovCi0gICAgICAgIHRjaGFy c2V0ID0gdGNzX3NhdmU7Ci0gICAgICAgIHRjc19zYXZlID0gLTE7Ci0JZGVidWcoRjEwMSwic2Zp bGUgcmVzdG9yZWQgdGNoYXJzZXQiLCIiLHRjaGFyc2V0KTsKLSAgICB9Ci0gICAgaWYgKGZjc19z YXZlID4gLTEpIHsKLSAgICAgICAgZmNoYXJzZXQgPSBmY3Nfc2F2ZTsKLSAgICAgICAgZmNzX3Nh dmUgPSAtMTsKLQlkZWJ1ZyhGMTAxLCJzZmlsZSByZXN0b3JlZCBmY2hhcnNldCIsIiIsZmNoYXJz ZXQpOwotICAgIH0KLSAgICBzZXR4bGF0eXBlKHRjaGFyc2V0LGZjaGFyc2V0KTsgICAgICAvKiBU cmFuc2xhdGlvbiB0eXBlICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0gICAgLyogY21hcmcy IG9yIGZpbG5hbSAod2l0aCB0aGF0IHByZWNlZGVuY2UpIGhhdmUgdGhlIGZpbGUncyBuYW1lICov Ci0KLSAgICBsc3N0YXRlID0gMDsJCQkvKiBDYW5jZWwgbG9ja2luZy1zaGlmdCBzdGF0ZSAqLwot I2lmZGVmIENPTU1FTlQKLSAgICAvKiBEbyB0aGlzIGFmdGVyIG1ha2luZyBzdXJlIHdlIGNhbiBv cGVuIHRoZSBmaWxlICovCi0gICAgaWYgKG54dHBrdCgpIDwgMCkgcmV0dXJuKDApOwkvKiBCdW1w IHBhY2tldCBudW1iZXIsIGdldCBidWZmZXIgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg cGt0bmFtWzBdID0gTlVMOwkJCS8qIEJ1ZmZlciBmb3IgbmFtZSB3ZSB3aWxsIHNlbmQgKi8KLSAg ICBpZiAoeCA9PSAwKSB7CQkJLyogRi1QYWNrZXQgc2V0dXAgKi8KLQlpZiAoIWNtYXJnMikgY21h cmcyID0gIiI7Ci0jaWZkZWYgREVCVUcKLQlpZiAoZGVibG9nKSB7Ci0JICAgIC8qIGRlYnVnKEYx MTEsInNmaWxlIGNtYXJnMiIsY21hcmcyLGNtYXJnMik7ICovCi0JICAgIGRlYnVnKEYxMDEsInNm aWxlIGJpbmFyeSAxIiwiIixiaW5hcnkpOwotCSAgICBkZWJ1ZyhGMTAxLCJzZmlsZSB3ZWFyZWFs aWtlIiwiIix3ZWFyZWFsaWtlKTsKLQkgICAgZGVidWcoRjEwMSwic2ZpbGUgeGZlcm1vZGUiLCIi LHhmZXJtb2RlKTsKLQkgICAgZGVidWcoRjEwMSwic2ZpbGUgZmlsZXBlZWsiLCIiLGZpbGVwZWVr KTsKLSNpZm5kZWYgTk9DU0VUUwotCSAgICBkZWJ1ZyhGMTAxLCJzZmlsZSBzX2NzZXQiLCIiLHNf Y3NldCk7Ci0JICAgIGRlYnVnKEYxMDEsInNmaWxlIHRjaGFyc2V0IiwiIix0Y2hhcnNldCk7Ci0J ICAgIGRlYnVnKEYxMDEsInNmaWxlIHhmcnhsYSIsIiIseGZyeGxhKTsKLSNlbmRpZiAvKiBOT0NT RVRTICovCi0JfQotI2VuZGlmIC8qIERFQlVHICovCi0JaWYgKHhmZXJtb2RlID09IFhNT0RFX0EJ CS8qIFRSQU5TRkVSIE1PREUgQVVUT01BVElDICovCi0jaWZuZGVmIE5PTVNFTkQKLQkgICAgJiYg IWFkZGxpc3QJCQkvKiBBbmQgbm90IHdvcmtpbmcgZnJvbSBhIFNFTkQtTElTVCAqLwotI2VuZGlm IC8qIE5PTVNFTkQgKi8KLQkgICAgKSB7Ci0JICAgIC8qIE90aGVyIEtlcm1pdCBpcyBvbiBhIGxp a2Ugc3lzdGVtIGFuZCBubyBjaGFyc2V0IHRyYW5zbGF0aW9uICovCi0JICAgIGlmICh3ZWFyZWFs aWtlCi0jaWZuZGVmIE5PQ1NFVFMKLQkJJiYgKHRjaGFyc2V0ID09IFRDX1RSQU5TUCB8fCB4ZnJ4 bGEgPT0gMCkKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0JCSkgewotI2lmZGVmIFZNUwotCQlpZiAo YmluYXJ5ICE9IFhZRlRfSSkKLSNlbmRpZiAvKiBWTVMgKi8KLSNpZmRlZiBDS19MQUJFTEVECi0J CSAgaWYgKGJpbmFyeSAhPSBYWUZUX0wpCi0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotCQkgICAg YmluYXJ5ID0gWFlGVF9COwkvKiBTZW5kIGFsbCBmaWxlcyBpbiBiaW5hcnkgbW9kZSAqLwotCSAg ICB9Ci0KLQkgICAgLyogT3RoZXJ3aXNlIHNlbGVjdCB0cmFuc2ZlciBtb2RlIGJhc2VkIG9uIGZp bGUgaW5mbyAqLwotCi0JICAgIGVsc2UgaWYgKCFub3RhZmlsZQkJLyogYnV0IG5vdCBpZiBzZW5k aW5nIGZyb20gcGlwZSAqLwotI2lmZGVmIENLX0xBQkVMRUQKLQkJICAgICAmJiBiaW5hcnkgIT0g WFlGVF9MIC8qIGFuZCBub3QgaWYgRklMRSBUWVBFIExBQkVMRUQgKi8KLSNlbmRpZiAvKiBDS19M QUJFTEVEICovCi0jaWZkZWYgVk1TCi0JCSAgICAgJiYgYmluYXJ5ICE9IFhZRlRfSSAvKiBvciBG SUxFIFRZUEUgSU1BR0UgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQkJICAgICApIHsKLSNpZmRlZiBV TklDT0RFCi0JCWZpbGVvcmRlciA9IC0xOwkJLyogRmlsZSBieXRlIG9yZGVyICovCi0jZW5kaWYg LyogVU5JQ09ERSAqLwotCQlpZiAoZmlsZXBlZWsgJiYgIW5vdGFmaWxlKSB7IC8qIFJlYWwgZmls ZSwgRklMRSBTQ0FOIGlzIE9OICovCi0JCSAgICBpbnQgaywgeDsKLQkJICAgIGsgPSBzY2FuZmls ZShmaWxuYW0sJngsbnNjYW5maWxlKTsgLyogU2NhbiB0aGUgZmlsZSAqLwotCQkgICAgZGVidWco RjEwMSwic2ZpbGUgc2NhbmZpbGUiLCIiLGspOwotCQkgICAgc3dpdGNoIChrKSB7Ci0JCSAgICAg IGNhc2UgRlRfVEVYVDoJLyogVW5zcGVjaWZpZWQgdGV4dCAqLwotCQkJZGVidWcoRjEwMCwic2Zp bGUgc2NhbmZpbGUgdGV4dCIsIiIsMCk7Ci0JCQliaW5hcnkgPSBYWUZUX1Q7IC8qIFNFVCBGSUxF IFRZUEUgVEVYVCAqLwotCQkJYnJlYWs7Ci0jaWZuZGVmIE5PQ1NFVFMKLQkJICAgICAgY2FzZSBG VF83QklUOgkJLyogNy1iaXQgdGV4dCAqLwotCQkJYmluYXJ5ID0gWFlGVF9UOwkvKiBTRVQgRklM RSBUWVBFIFRFWFQgKi8KLQkJCS8qIElmIFNFTkQgQ0hBUlNFVC1TRUxFQ1RJT04gQVVUTyAgKi8K LQkJCS8qIGFuZCBTRVQgVFJBTlNGRVIgVFJBTlNMQVRJT04gaXMgT04gKi8KLQkJCWRlYnVnKEYx MDAsInNmaWxlIHNjYW5maWxlIHRleHQ3IiwiIiwwKTsKLQkJCWlmIChzX2NzZXQgPT0gWE1PREVf QSAmJiB4ZnJ4bGEpIHsKLQkJCSAgICBpZiAoZmNzaW5mb1tmY2hhcnNldF0uc2l6ZSAhPSAxMjgp IHsKLQkJCQlmY3Nfc2F2ZSA9IGZjaGFyc2V0OyAvKiBDdXJyZW50IEZDUyBub3QgN2JpdCAqLwot CQkJCWZjaGFyc2V0ID0gZGNzZXQ3OyAgIC8qIFVzZSBkZWZhdWx0IDdiaXQgc2V0ICovCi0JCQkJ ZGVidWcoRjEwMSwic2ZpbGUgc2NhbmZpbGUgNyBmY2hhcnNldCIsCi0JCQkJICAgICAgIiIsZmNo YXJzZXQpOwotCQkJICAgIH0KLQkJCSAgICAvKiBBbmQgYWxzbyBzd2l0Y2ggdG8gYXBwcm9wcmlh dGUgVENTICovCi0JCQkgICAgaWYgKGFmY3NldFtmY2hhcnNldF0gPiAtMSAmJgotCQkJCWFmY3Nl dFtmY2hhcnNldF0gPD0gTUFYVENTRVRTKSB7Ci0JCQkJdGNzX3NhdmUgPSB0Y2hhcnNldDsKLQkJ CQl0Y2hhcnNldCA9IGFmY3NldFtmY2hhcnNldF07Ci0JCQkJZGVidWcoRjEwMSwic2ZpbGUgc2Nh bmZpbGUgNyB0Y2hhcnNldCIsIiIsCi0JCQkJICAgICAgdGNoYXJzZXQpOwotCQkJICAgIH0KLQkJ CSAgICBzZXR4bGF0eXBlKHRjaGFyc2V0LGZjaGFyc2V0KTsKLQkJCX0KLQkJCWJyZWFrOwotCi0J CSAgICAgIGNhc2UgRlRfOEJJVDoJLyogOC1iaXQgdGV4dCAqLwotCQkJYmluYXJ5ID0gWFlGVF9U OyAvKiBTRVQgRklMRSBUWVBFIFRFWFQgKi8KLQkJCS8qIElmIFNFTkQgQ0hBUlNFVC1TRUxFQyBB VVRPICAqLwotCQkJLyogYW5kIFNFVCBUUkFOU0ZFUiBUUkFOU0xBVElPTiBpcyBPTiAqLwotCQkJ ZGVidWcoRjEwMCwic2ZpbGUgc2NhbmZpbGUgdGV4dDgiLCIiLDApOwotCQkJaWYgKHNfY3NldCA9 PSBYTU9ERV9BICYmIHhmcnhsYSkgewotCQkJICAgIGlmIChmY3NpbmZvW2ZjaGFyc2V0XS5zaXpl ICE9IDI1NikgewotCQkJCWZjc19zYXZlID0gZmNoYXJzZXQ7IC8qIEN1cnJlbnQgRkNTIG5vdCA4 Yml0ICovCi0JCQkJZmNoYXJzZXQgPSBkY3NldDg7IC8qIFVzZSBkZWZhdWx0IDhiaXQgc2V0ICov Ci0JCQkJZGVidWcoRjEwMSwic2ZpbGUgc2NhbmZpbGUgOCBmY2hhcnNldCIsCi0JCQkJICAgICAg IiIsZmNoYXJzZXQpOwotCQkJICAgIH0KLQkJCSAgICAvKiBTd2l0Y2ggdG8gY29ycmVzcG9uZGlu ZyB0cmFuc2ZlciBjaGFyc2V0ICovCi0JCQkgICAgaWYgKGFmY3NldFtmY2hhcnNldF0gPiAtMSAm JgotCQkJCWFmY3NldFtmY2hhcnNldF0gPD0gTUFYVENTRVRTKSB7Ci0JCQkJdGNzX3NhdmUgPSB0 Y2hhcnNldDsKLQkJCQl0Y2hhcnNldCA9IGFmY3NldFtmY2hhcnNldF07Ci0JCQkJZGVidWcoRjEw MSwic2ZpbGUgc2NhbmZpbGUgOCB0Y2hhcnNldCIsIiIsCi0JCQkJICAgICAgdGNoYXJzZXQpOwot CQkJICAgIH0KLQkJCSAgICBzZXR4bGF0eXBlKHRjaGFyc2V0LGZjaGFyc2V0KTsKLQkJCX0KLQkJ CWJyZWFrOwotI2lmZGVmIFVOSUNPREUKLQkJICAgICAgY2FzZSBGVF9VVEY4OgkvKiBVVEYtOCB0 ZXh0ICovCi0JCSAgICAgIGNhc2UgRlRfVUNTMjoJLyogVUNTLTIgdGV4dCAqLwotCQkJZGVidWco RjEwMSwic2ZpbGUgc2NhbmZpbGUgVW5pY29kZSIsIiIsayk7Ci0JCQliaW5hcnkgPSBYWUZUX1Q7 Ci0JCQkvKiBJZiBTRU5EIENIQVJTRVQtU0VMRUMgQVVUTyAgKi8KLQkJCS8qIGFuZCBTRVQgVFJB TlNGRVIgVFJBTlNMQVRJT04gaXMgT04gKi8KLQkJCWlmIChzX2NzZXQgPT0gWE1PREVfQSAmJiB4 ZnJ4bGEpIHsKLQkJCSAgICBmY3Nfc2F2ZSA9IGZjaGFyc2V0OwotCQkJICAgIHRjc19zYXZlID0g dGNoYXJzZXQ7Ci0JCQkgICAgZmNoYXJzZXQgPSAoayA9PSBGVF9VQ1MyKSA/IEZDX1VDUzIgOiBG Q19VVEY4OwotCQkJICAgIGlmIChrID09IEZUX1VDUzIgJiYgeCA+IC0xKQotCQkJICAgICAgZmls ZW9yZGVyID0geDsKLQkJCX0KLQkJCS8qIFN3aXRjaCB0byBhc3NvY2lhdGVkIHRyYW5zZmVyIGNo YXJzZXQgaWYgYW55ICovCi0JCQlpZiAoYWZjc2V0W2ZjaGFyc2V0XSA+IC0xICYmCi0JCQkgICAg YWZjc2V0W2ZjaGFyc2V0XSA8PSBNQVhUQ1NFVFMpCi0JCQkgIHRjaGFyc2V0ID0gYWZjc2V0W2Zj aGFyc2V0XTsKLQkJCWlmICh0Y2hhcnNldCA9PSBUQ19UUkFOU1ApIC8qIElmIG5vbmUgKi8KLQkJ CSAgdGNoYXJzZXQgPSBUQ19VVEY4OyAgICAgIC8qIHVzZSBVVEYtOCAqLwotCQkJc2V0eGxhdHlw ZSh0Y2hhcnNldCxmY2hhcnNldCk7Ci0JCQlkZWJ1ZyhGMTAxLCJzZmlsZSBVbmljb2RlIHRjaGFy c2V0IiwiIix0Y2hhcnNldCk7Ci0JCQlicmVhazsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0jZW5k aWYgLyogTk9DU0VUUyAqLwotCQkgICAgICBjYXNlIEZUX0JJTjoKLQkJCWRlYnVnKEYxMDEsInNm aWxlIHNjYW5maWxlIGJpbmFyeSIsIiIsayk7Ci0JCQliaW5hcnkgPSBYWUZUX0I7Ci0JCQlicmVh azsKLQkJICAgIC8qIERlZmF1bHQ6IERvbid0IGNoYW5nZSBhbnl0aGluZyAqLwotCQkgICAgfQot CQl9Ci0JICAgIH0KLQkgICAgZGVidWcoRjEwMSwic2ZpbGUgYmluYXJ5IDIiLCIiLGJpbmFyeSk7 Ci0JICAgIGRlYnVnKEYxMDEsInNmaWxlIHNlbmRtb2RlIiwiIixzZW5kbW9kZSk7Ci0JfQotICAg IAlpZiAoKmNtYXJnMikgewkJCS8qIElmIHdlIGhhdmUgYSBzZW5kLWFzIG5hbWUuLi4gKi8KLQkg ICAgaW50IHk7IGNoYXIgKnM7Ci0jaWZuZGVmIE5PU1BMCQkJCS8qIGFuZCBhIHNjcmlwdCBwcm9n cmFtbWluZyBsYW5ndWFnZSAqLwotCSAgICBleHRlcm4gaW50IGNtZF9xdW90aW5nOwotCSAgICBp ZiAoY21kX3F1b3RpbmcpIHsJCS8qIGFuZCBpdCdzIG5vdCB0dXJuZWQgb2ZmICovCi0JCXkgPSBQ S1ROTDsJCS8qIHBhc3MgYXMtbmFtZSB0aHJ1IHRoZSBldmFsdWF0b3IgKi8KLQkJcyA9IHBrdG5h bTsKLQkJenpzdHJpbmcoY21hcmcyLCZzLCZ5KTsKLSNpZmRlZiBDT01NRU5UCi0vKiBUaGlzIHJ1 aW5zIG1hY3JvcyBsaWtlIEJTRU5EICovCi0JCWlmICghcGt0bmFtWzBdKQkJLyogYW5kIG1ha2Ug c3VyZSByZXN1bHQgaXMgbm90IGVtcHR5ICovCi0JCSAgc3ByaW50Zihwa3RuYW0sIkZJTEUlMDJs ZCIsZmlsY250KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgIH0gZWxzZQotI2VuZGlmIC8q IE5PU1BMICovCi0JICAgICAgY2tzdHJuY3B5KHBrdG5hbSxjbWFyZzIsUEtUTkwpOyAvKiBjb3B5 IGl0IGxpdGVyYWxseSwgKi8KLQotCSAgICBkZWJ1ZyhGMTEwLCJzZmlsZSBwa3RuYW0iLHBrdG5h bSwwKTsKLSNpZmRlZiBDT01NRU5UCi0vKiBXZSBkb24ndCBkbyB0aGlzIGFueSBtb3JlIGJlY2F1 c2Ugbm93IHdlIGhhdmUgZmlsZW5hbWUgdGVtcGxhdGVzICovCi0JICAgIGNtYXJnMiA9ICIiOwkJ LyogYW5kIGJsYW5rIGl0IG91dCBmb3IgbmV4dCB0aW1lLiAqLwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLSAgICAJfQotCWlmICghKnBrdG5hbSkgewkJCS8qIE5vIGFzLW5hbWUuLi4gKi8KLSNpZmRl ZiBOWkxUT1IKLQkgICAgaW50IHhmbmNudiwgeHBhdGg7Ci0JICAgIGRlYnVnKEYxMDEsInNmaWxl IGZuc3BhdGgiLCIiLGZuc3BhdGgpOwotCSAgICBkZWJ1ZyhGMTAxLCJzZmlsZSBmbmNudiIsIiIs Zm5jbnYpOwotCSAgICB4Zm5jbnYgPSBmbmNudjsKLQkgICAgeHBhdGggPSBmbnNwYXRoOwotCSAg ICBpZiAobm90YWZpbGUpIHsJCS8qIElmIG5vdCBhbiBhY3R1YWwgZmlsZSAqLwotCQl4Zm5jbnYg PSAwOwkJLyogRG9uJ3QgY29udmVydCBuYW1lICovCi0JCXhwYXRoID0gUEFUSF9PRkY7CS8qIExl YXZlIHBhdGggb2ZmICovCi0JICAgIH0gZWxzZSBpZiAoeGZuY252ICYmCi0JCSAgICAgICAoIXN0 cmNtcCh3aG9hcmV1LCJVMSIpIHx8ICFzdHJjbXAod2hvYXJldSwiVU4iKSkKLQkJICAgICAgICkg ewotCQkvKiBMZXNzLXN0cmljdCBjb252ZXJzaW9uIGlmIHBhcnRuZXIgaXMgVU5JWCBvciBXaW4z MiAqLwotCQl4Zm5jbnYgPSAtMTsKLQkgICAgfQotCSAgICBkZWJ1ZyhGMTAxLCJzZmlsZSB4cGF0 aCIsIiIseHBhdGgpOwotCSAgICBkZWJ1ZyhGMTAxLCJzZmlsZSB4Zm5jbnYiLCIiLHhmbmNudik7 Ci0JICAgIG56bHRvcihmaWxuYW0scGt0bmFtLHhmbmNudix4cGF0aCxQS1ROTCk7Ci0KLSNlbHNl ICAvKiBOb3QgTlpMVE9SICovCi0KLQkgICAgZGVidWcoRjEwMSwic2ZpbGUgZm5zcGF0aCIsIiIs Zm5zcGF0aCk7Ci0JICAgIGlmIChmbnNwYXRoID09IFBBVEhfT0ZGCS8qIFN0cmlwcGluZyBwYXRo IG5hbWVzPyAqLwotCQkmJiAoIW5vdGFmaWxlKQkJLyogKG9mIGFjdHVhbCBmaWxlcykgKi8KLQkJ KSB7Ci0JCWNoYXIgKnQ7CQkvKiBZZXMuICovCi0JCXpzdHJpcChmaWxuYW0sJnQpOwkvKiBTdHJp cCBvZmYgdGhlIHBhdGguICovCi0JCWRlYnVnKEYxMTAsInNmaWxlIHpzdHJpcCIsdCwwKTsKLQkJ aWYgKCF0KSB0ID0gIlVOS05PV04iOwkvKiBCZSBjYXV0aW91cy4uLiAqLwotCQllbHNlIGlmICgq dCA9PSAnXDAnKQotCQkgIHQgPSAiVU5LTk9XTiI7Ci0JCWNrc3RybmNweShwa3RuYW0sdCxQS1RO TCk7IC8qIENvcHkgc3RyaXBwZWQgbmFtZSBsaXRlcmFsbHkuICovCi0JICAgIH0gZWxzZSBpZiAo Zm5zcGF0aCA9PSBQQVRIX0FCUyAmJiAhbm90YWZpbGUpIHsKLQkJLyogQ29udmVydGluZyB0byBh YnNvbHV0ZSBmb3JtICovCi0JCXpmbnFmcChmaWxuYW0sUEtUTkwscGt0bmFtKTsKLQkgICAgfSBl bHNlCi0JCWNrc3RybmNweShwa3RuYW0sZmlsbmFtLFBLVE5MKTsKLQotCSAgICAvKiBwa3RuYW1b XSBoYXMgdGhlIHBhY2tldCBuYW1lLCBmaWxuYW1bXSBoYXMgdGhlIG9yaWdpbmFsIG5hbWUuICov Ci0JICAgIC8qIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGNvbnZlcnQgcGt0bmFtIGlmIEZJTEUgTkFN RVMgQ09OVkVSVEVELiAgKi8KLQotCSAgICBkZWJ1ZyhGMTAxLCJzZmlsZSBmbmNudiIsIiIsZm5j bnYpOwotCSAgICBpZiAoZm5jbnYgJiYgIW5vdGFmaWxlKSB7CS8qIElmIGNvbnZlcnRpbmcgbmFt ZXMgb2YgZmlsZXMgKi8KLQkJemx0b3IocGt0bmFtLChjaGFyICopc3J2Y21kKTsgLyogY29udmVy dCBpdCB0byBjb21tb24gZm9ybSwgKi8KLQkJY2tzdHJuY3B5KHBrdG5hbSwoY2hhciAqKXNydmNt ZCxQS1ROTCk7Ci0JCSpzcnZjbWQgPSBOVUw7Ci0JICAgIH0KLSNlbmRpZiAvKiBOWkxUT1IgKi8K LSAgICAJfQotCWlmICghKnBrdG5hbSkJCQkvKiBGYWlsc2FmZS4uLiAqLwotCSAgc3ByaW50Zihw a3RuYW0sIkZJTEUlMDJsZCIsZmlsY250KTsKLQlkZWJ1ZyhGMTEwLCJzZmlsZSBmaWxuYW0gMSIs ZmlsbmFtLDApOwotCWRlYnVnKEYxMTAsInNmaWxlIHBrdG5hbSAxIixwa3RuYW0sMCk7Ci0jaWZk ZWYgUElQRVNFTkQKLS8qIElmIHdlIGhhdmUgYSBzZW5kIGZpbHRlciwgc3Vic3RpdHV0ZSB0aGUg Y3VycmVudCBmaWxlbmFtZSBpbnRvIGl0ICovCi0KLQlpZiAoc25kZmlsdGVyKSB7Ci0JICAgIGNo YXIgKiBwID0gTlVMTCwgKiBxOwotCSAgICBpbnQgbiA9IENLTUFYUEFUSDsKLSNpZm5kZWYgTk9T UEwKLQkgICAgaWYgKChwID0gKGNoYXIgKikgbWFsbG9jKG4gKyAxKSkpIHsKLQkJcSA9IHA7Ci0J CWRlYnVnKEYxMTAsInNmaWxlIHBpcGVzZW5kIGZpbHRlciIsc25kZmlsdGVyLDApOwotCQl6enN0 cmluZyhzbmRmaWx0ZXIsJnAsJm4pOwotCQlkZWJ1ZyhGMTExLCJzZmlsZSBwaXBlbmFtZSIscSxu KTsKLQkJaWYgKG4gPD0gMCkgewotCQkgICAgcHJpbnRmKAotCQkJICAiP1NvcnJ5LCBzZW5kIGZp bHRlciArIGZpbGVuYW1lIHRvbyBsb25nLCAlZCBtYXguXG4iLAotCQkJICAgQ0tNQVhQQVRICi0J CQkgICApOwotCQkgICAgZnJlZShxKTsKLQkJICAgIHJldHVybigwKTsKLQkJfQotCQlja3N0cm5j cHkoZmlsbmFtLHEsQ0tNQVhQQVRIKzEpOwotCQlmcmVlKHEpOwotCSAgICB9Ci0jZW5kaWYgLyog Tk9TUEwgKi8KLQl9Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotICAgIAlkZWJ1ZyhGMTEwLCJz ZmlsZSBmaWxuYW0gMiIsZmlsbmFtLDApOyAvKiBMb2cgZGVidWdnaW5nIGluZm8gKi8KLSAgICAJ ZGVidWcoRjExMCwic2ZpbGUgcGt0bmFtIDIiLHBrdG5hbSwwKTsKLSAgICAJaWYgKG9wZW5pKGZp bG5hbSkgPT0gMCkgCS8qIFRyeSB0byBvcGVuIHRoZSBpbnB1dCBmaWxlICovCi0JICByZXR1cm4o MCk7Ci0KLSNpZmRlZiBDS19SRVNFTkQKLS8qCi0gIFRoZSBmb2xsb3dpbmcgY2hlY2sgaXMgZG9u ZSBhZnRlciBvcGVuaSgpIGlzIGNhbGxlZCwgc2luY2Ugb3BlbmkoKSBpdHNlbGYKLSAgY2FuIGNo YW5nZSB0aGUgdHJhbnNmZXIgbW9kZSAoYXMgaW4gVk1TKS4KLSovCi0gICAgICAgIGlmICgoYmlu YXJ5ID09IFhZRlRfVAotI2lmZGVmIFZNUwotCSAgICAgfHwgYmluYXJ5ID09IFhZRlRfTAotI2Vu ZGlmIC8qIFZNUyAqLwotCSAgICAgKSAmJiBzZW5kbW9kZSA9PSBTTV9SRVNFTkQpIHsKLSAgICAg ICAgICAgIC8qIFRyeWluZyB0byBSRVNFTkQvUkVHRVQgYSBmaWxlIGZpcnN0IHNlbnQgaW4gVEVY VCBtb2RlLiAqLwotCSAgICBkZWJ1ZyhGMTExLCJzZmlsZSBlcnJvciAtIFJlY292ZXIgdnMgVGV4 dCIsZmlsbmFtLGJpbmFyeSk7Ci0gICAgICAgICAgICAvKiBTZXQgYXBwcm9wcmlhdGUgZXJyb3Ig bWVzc2FnZXMgYW5kIG1ha2UgbG9nIGVudHJpZXMgaGVyZSAqLwotI2lmZGVmIFZNUwotCSAgICBp ZiAoYmluYXJ5ID09IFhZRlRfTCkKLQkgICAgICBja21ha21zZygoY2hhciAqKWVwa3Rtc2csCi0J CSAgICAgICBQS1RNU0dMRU4sCi0JCSAgICAgICAiUmVjb3ZlcnkgYXR0ZW1wdGVkIGluIExBQkVM RUQgbW9kZTogIiwKLQkJICAgICAgIGZpbG5hbSwKLQkJICAgICAgIE5VTEwsCi0JCSAgICAgICBO VUxMCi0JCSAgICAgICApOwotCSAgICBlbHNlCi0jZW5kaWYgLyogVk1TICovCi0JICAgICAgY2tt YWttc2coKGNoYXIgKillcGt0bXNnLAotCQkgICAgICAgUEtUTVNHTEVOLAotCQkgICAgICAgIlJl Y292ZXJ5IGF0dGVtcHRlZCBpbiBURVhUIG1vZGU6ICIsCi0JCSAgICAgICBmaWxuYW0sCi0JCSAg ICAgICBOVUxMLAotCQkgICAgICAgTlVMTAotCQkgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVy bigwKTsKLSAgICAgICAgfQotCWlmIChzZW5kbW9kZSA9PSBTTV9QU0VORCkJLyogUFNFTkRpbmc/ ICovCi0JICBpZiAoc2VuZHN0YXJ0ID4gKENLX09GRl9UKTApCS8qIFN0YXJ0aW5nIHBvc2l0aW9u ICovCi0JICAgIGlmICh6ZnNlZWsoc2VuZHN0YXJ0KSA8IDApCS8qIHNlZWsgdG8gaXQuLi4gKi8K LQkgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0gICAgCXMgPSBwa3Ru YW07CQkJLyogTmFtZSBmb3IgcGFja2V0IGRhdGEgZmllbGQgKi8KLSNpZmRlZiBPUzIKLQkvKiBO ZXZlciBzZW5kIGEgZGlzayBsZXR0ZXIuICovCi0JaWYgKGlzYWxwaGEoKnMpICYmICgqKHMrMSkg PT0gJzonKSkKLQkgIHMgKz0gMjsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIH0gZWxzZSB7CQkJ CS8qIFgtcGFja2V0IHNldHVwLCBub3QgRi1wYWNrZXQuICovCi0JYmluYXJ5ID0gWFlGVF9UOwkJ LyogVGV4dCBhbHdheXMgKi8KLSAgICAJZGVidWcoRjExMCwic2ZpbGUgWCBwYWNrZXQiLGNtZHN0 ciwwKTsgLyogTG9nIGRlYnVnZ2luZyBpbmZvICovCi0gICAgCXMgPSBjbWRzdHI7CQkJLyogTmFt ZSBmb3IgZGF0YSBmaWVsZCAqLwotICAgIH0KLQotICAgIC8qIE5vdyBzIHBvaW50cyB0byB0aGUg c3RyaW5nIHRoYXQgZ29lcyBpbiB0aGUgcGFja2V0IGRhdGEgZmllbGQuICovCi0KLSAgICBkZWJ1 ZyhGMTAxLCJzZmlsZSBiaW5hcnkiLCIiLGJpbmFyeSk7IC8qIExvZyBkZWJ1Z2dpbmcgaW5mbyAq LwotICAgIGVuY3N0cigoQ0hBUiAqKXMpOwkJCS8qIEVuY29kZSB0aGUgbmFtZS4gKi8KLQkJCQkJ LyogU2VuZCB0aGUgRiBvciBYIHBhY2tldCAqLwotICAgIC8qIElmIHRoZSBlbmNvZGVkIHN0cmlu ZyBkaWQgbm90IGZpdCBpbnRvIHRoZSBwYWNrZXQsIGl0IHdhcyB0cnVuY2F0ZWQuICovCi0KLSAg ICBpZiAobnh0cGt0KCkgPCAwKSByZXR1cm4oMCk7CS8qIEJ1bXAgcGFja2V0IG51bWJlciwgZ2V0 IGJ1ZmZlciAqLwotCi0gICAgcmMgPSBzcGFjaygoY2hhcikgKHggPyAnWCcgOiAnRicpLCBwa3Ru dW0sIHNpemUsIGRhdGEpOwotICAgIGlmIChyYyA8IDApCi0gICAgICByZXR1cm4ocmMpOwotCi0j aWZuZGVmIE5PQ1NFVFMKLSAgICBzZXR4bGF0eXBlKHRjaGFyc2V0LGZjaGFyc2V0KTsJLyogU2V0 IHVwIGNoYXJzZXQgdHJhbnNsYXRpb25zICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0gICAg aWYgKHggPT0gMCkgewkJCS8qIERpc3BsYXkgZm9yIEYgcGFja2V0ICovCi0gICAgCWlmIChkaXNw bGEpIHsJCQkvKiBTY3JlZW4gKi8KLQkgICAgeHhzY3JlZW4oU0NSX0ZOLCdGJywobG9uZylwa3Ru dW0sZmlsbmFtKTsKLQkgICAgeHhzY3JlZW4oU0NSX0FOLDAsMEwscGt0bmFtKTsKLQkgICAgeHhz Y3JlZW4oU0NSX0ZTLDAsY2FsaWJyYXRlID8gY2FsaWJyYXRlIDogZnNpemUsIiIpOwotICAgIAl9 Ci0jaWZkZWYgcGRwMTEKLSAgICAJdGxvZyhGMTEwLCJTZW5kaW5nIixmaWxuYW0sMEwpOyAvKiBU cmFuc2FjdGlvbiBsb2cgZW50cnkgKi8KLQltYWtlc3RyKCZwc2ZzcGVjLGZpbG5hbSk7CS8qIE5l dyBmaWxlbmFtZSAqLwotI2Vsc2UKLSNpZm5kZWYgWkZOUUZQCi0gICAgCXRsb2coRjExMCwiU2Vu ZGluZyIsZmlsbmFtLDBMKTsKLQltYWtlc3RyKCZwc2ZzcGVjLGZpbG5hbSk7CS8qIE5ldyBmaWxl bmFtZSAqLwotI2Vsc2UKLQlpZiAobm90YWZpbGUpIHsJCQkvKiBJZiBub3QgYSBmaWxlIGxvZyBz aW1wbGUgbmFtZSAqLwotCSAgICB0bG9nKEYxMTAsIlNlbmRpbmciLCBmaWxuYW0sIDBMKTsKLQl9 IGVsc2UgewkJCS8qIExvZyBmdWxseSBxdWFsaWZpZWQgZmlsZW5hbWUgKi8KLSNpZmRlZiBDT01N RU5UCi0JICAgIC8qIFRoaXMgc2VjdGlvbiBnZW5lcmF0ZXMgYmFkIGNvZGUgaW4gU0NPIDMuMnY1 LjAuNSdzIGNjICovCi0JICAgIGNoYXIgKnAgPSBOVUxMLCAqcSA9IGZpbG5hbTsKLQkgICAgZGVi dWcoRjEwMSwic2ZpbGUgQ0tNQVhQQVRIIiwiIixDS01BWFBBVEgpOwotCSAgICBpZiAoKHAgPSBt YWxsb2MoQ0tNQVhQQVRIKzEpKSkgewotCQlkZWJ1ZyhGMTExLCJzZmlsZSBjYWxsaW5nIHpmbnFm cCIsZmlsbmFtLHN0cmxlbihmaWxuYW0pKTsKLQkJaWYgKHpmbnFmcChmaWxuYW0sIENLTUFYUEFU SCwgcCkpIHsKLQkJICAgIGRlYnVnKEYxMTEsInNmaWxlIHpmbnFmcCBvayIscCxzdHJsZW4ocCkp OwotCQkgICAgcSA9IHA7Ci0JCX0KLQkgICAgfQotI2Vsc2UKLQkgICAgY2hhciB0bXBidWZbQ0tN QVhQQVRIKzFdOwotCSAgICBjaGFyICpwID0gdG1wYnVmLCAqcSA9IGZpbG5hbTsKLQkgICAgaWYg KHpmbnFmcChmaWxuYW0sIENLTUFYUEFUSCwgcCkpCi0JICAgICAgcSA9IHA7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotCSAgICBkZWJ1ZyhGMTExLCJzZmlsZSBxIixxLHN0cmxlbihxKSk7Ci0JICAg IHRsb2coRjExMCwiU2VuZGluZyIscSwwTCk7Ci0JICAgIG1ha2VzdHIoJnBzZnNwZWMscSk7CS8q IE5ldyBwcmVsaW1pbmFyeSBmaWxlbmFtZSAqLwotI2lmZGVmIENPTU1FTlQKLQkgICAgaWYgKHAp IGZyZWUocCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCX0KLSNlbmRpZiAvKiBaRk5RRlAgKi8K LSNlbmRpZiAvKiBwZHAxMSAqLwotICAgIAl0bG9nKEYxMTAsIiBhcyIscGt0bmFtLDBMKTsKLQlp ZiAoYmluYXJ5KSB7CQkJLyogTG9nIGZpbGUgbW9kZSBpbiB0cmFuc2FjdGlvbiBsb2cgKi8KLQkg ICAgdGxvZyhGMTAxLCIgbW9kZTogYmluYXJ5IiwiIiwobG9uZykgYmluYXJ5KTsKLQl9IGVsc2Ug ewkJCS8qIElmIHRleHQgbW9kZSwgY2hlY2sgY2hhcmFjdGVyIHNldCAqLwotCSAgICB0bG9nKEYx MDAsIiBtb2RlOiB0ZXh0IiwiIiwwTCk7Ci0jaWZuZGVmIE5PQ1NFVFMKLQkgICAgaWYgKHRjaGFy c2V0ID09IFRDX1RSQU5TUCB8fCB4ZnJ4bGEgPT0gMCkgewotCQl0bG9nKEYxMTAsIiBjaGFyYWN0 ZXIgc2V0IiwidHJhbnNwYXJlbnQiLDBMKTsKLQkgICAgfSBlbHNlIHsKLQkJdGxvZyhGMTEwLCIg eGZlciBjaGFyYWN0ZXIgc2V0Iix0Y3NpbmZvW3RjaGFyc2V0XS5uYW1lLDBMKTsKLQkJdGxvZyhG MTEwLCIgZmlsZSBjaGFyYWN0ZXIgc2V0IixmY3NpbmZvW2ZjaGFyc2V0XS5uYW1lLDBMKTsKLQkg ICAgfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQl9Ci0gICAgfSBlbHNlIHsJCQkJLyogRGlzcGxh eSBmb3IgWC1wYWNrZXQgKi8KLQotICAgIAl4eHNjcmVlbihTQ1JfWEQsJ1gnLChsb25nKXBrdG51 bSxjbWRzdHIpOyAvKiBTY3JlZW4gKi8KLSAgICAJdGxvZyhGMTEwLCJTZW5kaW5nIGZyb206Iixj bWRzdHIsMEwpOwkvKiBUcmFuc2FjdGlvbiBsb2cgKi8KLSAgICB9Ci0gICAgaW50bXNnKCsrZmls Y250KTsJCQkvKiBDb3VudCBmaWxlLCBnaXZlIGludGVycnVwdCBtc2cgKi8KLSAgICBmaXJzdCA9 IDE7CQkJCS8qIEluaXQgZmlsZSBjaGFyYWN0ZXIgbG9va2FoZWFkLiAqLwotICAgIGZmYyA9IChD S19PRkZfVCkwOwkJCS8qIEluaXQgZmlsZSBjaGFyYWN0ZXIgY291bnRlci4gKi8KLSAgICBjcHMg PSBvbGRjcHMgPSAwTDsJCQkvKiBJbml0IGNwcyBzdGF0aXN0aWNzICovCi0gICAgcmVqZWN0aW9u ID0gLTE7Ci0gICAgZnNlY3MgPSBndGltZXIoKTsJCQkvKiBUaW1lIHRoaXMgZmlsZSBzdGFydGVk ICovCi0jaWZkZWYgR0ZUSU1FUgotICAgIGZwZnNlY3MgPSBnZnRpbWVyKCk7Ci0gICAgZGVidWco RjEwMSwiU0ZJTEUgZnBmc2VjcyIsIiIsZnBmc2Vjcyk7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwot ICAgIGRlYnVnKEYxMDEsIlNGSUxFIGZzZWNzIiwiIixmc2Vjcyk7Ci0gICAgcmV0dXJuKDEpOwot fQotCi0vKiAgUyBEIEEgVCBBIC0tIFNlbmQgYSBkYXRhIHBhY2tldCAqLwotCi0vKgotICBSZXR1 cm5zIC0xIGlmIG5vIGRhdGEgdG8gc2VuZCAoZW5kIG9mIGZpbGUpLCAtMiBpZiBjb25uZWN0aW9u IGlzIGJyb2tlbi4KLSAgSWYgdGhlcmUgaXMgZGF0YSwgYSBkYXRhIHBhY2tldCBpcyBzZW50LCBh bmQgc2RhdGEoKSByZXR1cm5zIDEuCi0KLSAgSW4gdGhlIHN0cmVhbWluZyBjYXNlLCB0aGUgd2lu ZG93IGlzIHJlZ2FyZGVkIGFzIGluZmluaXRlIGFuZCB3ZSBrZWVwCi0gIHNlbmRpbmcgZGF0YSBw YWNrZXRzIHVudGlsIEVPRiBvciB0aGVyZSBhcHBlYXJzIHRvIGJlIGEgS2VybWl0IHBhY2tldCBv biB0aGUKLSAgcmV2ZXJzZSBjaGFubmVsLiAgV2hlbiBub3Qgc3RyZWFtaW5nIGFuZCB0aGUgd2lu ZG93IHNpemUgaXMgZ3JlYXRlciB0aGFuIDEsCi0gIHdlIGtlZXAgc2VuZGluZyBkYXRhIHBhY2tl dHMgdW50aWwgd2luZG93IGlzIGZ1bGwgb3IgY2hhcmFjdGVycyBzdGFydCB0bwotICBhcHBlYXIg ZnJvbSB0aGUgb3RoZXIgS2VybWl0LgotCi0gIEluIHRoZSB3aW5kb3dpbmcgb3Igc3RyZWFtaW5n IGNhc2UsIHdoZW4gdGhlcmUgaXMgbm8gbW9yZSBkYXRhIGxlZnQgdG8gc2VuZAotICAob3Igd2hl biBzZW5kaW5nIGhhcyBiZWVuIGludGVycnVwdGVkKSwgc2RhdGEoKSBkb2VzIG5vdGhpbmcgYW5k IHJldHVybnMgMAotICBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkIHVudGlsIHRoZSBhY2tub3dsZWRn ZW1lbnQgc2VxdWVuY2UgbnVtYmVyIGNhdGNoZXMgdXAKLSAgdG8gdGhlIGxhc3QgZGF0YSBwYWNr ZXQgdGhhdCB3YXMgc2VudC4KLSovCi1pbnQKLXNkYXRhKCkgewotICAgIGludCBpLCB4LCBsZW47 Ci0gICAgY2hhciAqIHM7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJzZGF0YSBlbnRyeSwgZmlyc3QiLCIi LGZpcnN0KTsKLSAgICBkZWJ1ZyhGMTAxLCJzZGF0YSBkcmFpbiIsIiIsZHJhaW4pOwotLyoKLSAg VGhlICJkcmFpbiIgZmxhZyBpcyB1c2VkIHdpdGggd2luZG93IHNpemUgPiAxLiAgSXQgbWVhbnMg d2UgaGF2ZSBzZW50Ci0gIG91ciBsYXN0IGRhdGEgcGFja2V0LiAgSWYgY2FsbGVkIGFuZCBkcmFp biBpcyBub3QgemVybywgdGhlbiB3ZSByZXR1cm4KLSAgMCBhcyBpZiB3ZSBoYWQgc2VudCBhbiBl bXB0eSBkYXRhIHBhY2tldCwgdW50aWwgYWxsIGRhdGEgcGFja2V0cyBoYXZlCi0gIGJlZW4gQUNL J2QsIHRoZW4gdGhlbiB3ZSBjYW4gZmluYWxseSByZXR1cm4gLTEgaW5kaWNhdGluZyBFT0YsIHNv IHRoYXQKLSAgdGhlIHByb3RvY29sIGNhbiBzd2l0Y2ggdG8gc2VvZiBzdGF0ZS4gIFRoaXMgaXMg YSBrbHVkZ2UsIGJ1dCBhdCBsZWFzdAotICBpdCdzIGxvY2FsaXplZC4uLgotKi8KLSAgICBpZiAo Zmlyc3QgPT0gMSkgZHJhaW4gPSAwOwkJLyogU3RhcnQgb2YgZmlsZSwgaW5pdCBkcmFpbiBmbGFn LiAqLwotCi0gICAgaWYgKGRyYWluKSB7CQkJLyogSWYgZHJhaW5pbmcuLi4gKi8KLQlkZWJ1ZyhG MTAxLCJzZGF0YSBkcmFpbmluZywgd2lubG8iLCIiLHdpbmxvKTsKLQlpZiAod2lubG8gPT0gcGt0 bnVtKQkJLyogSWYgYWxsIGRhdGEgcGFja2V0cyBhcmUgQUNLJ2QgKi8KLQkgIHJldHVybigtMSk7 CQkJLyogcmV0dXJuIEVPRiBpbmRpY2F0aW9uICovCi0JZWxzZQkJCQkvKiBvdGhlcndpc2UgKi8K LQkgIHJldHVybigwKTsJCQkvKiBwcmV0ZW5kIHdlIHNlbnQgYSBkYXRhIHBhY2tldC4gKi8KLSAg ICB9Ci0gICAgZGVidWcoRjEwMSwic2RhdGEgc2J1Zm51bSIsIiIsc2J1Zm51bSk7Ci0gICAgZm9y IChpID0gc2J1Zm51bTsKLQkgaSA+IDAKLSNpZmRlZiBTVFJFQU1JTkcKLQkgfHwgc3RyZWFtaW5n Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0JIDsKLQkgaS0tKSB7Ci0JaWYgKGkgPCAwKQotCSAg YnJlYWs7Ci0gICAgICAgIGRlYnVnKEYxMDEsInNkYXRhIGNvdW50ZG93biIsIiIsaSk7Ci0jaWZk ZWYgU1RSRUFNSU5HCi0JaWYgKHN0cmVhbWluZykgewotCSAgICBwa3RudW0gPSAocGt0bnVtICsg MSkgJSA2NDsKLQkgICAgd2lubG8gPSBwa3RudW07Ci0JICAgIGRlYnVnKEYxMDEsInNkYXRhIHN0 cmVhbWluZyBwa3RudW0iLCIiLHBrdG51bSk7Ci0JfSBlbHNlIHsKLSNlbmRpZiAvKiBTVFJFQU1J TkcgKi8KLQkgICAgeCA9IG54dHBrdCgpOwkJLyogR2V0IG5leHQgcGt0IG51bWJlciBhbmQgYnVm ZmVyICovCi0JICAgIGRlYnVnKEYxMDEsInNkYXRhIG54dHBrdCBwa3RudW0iLCIiLHBrdG51bSk7 Ci0JICAgIGlmICh4IDwgMCkgcmV0dXJuKDApOwotI2lmZGVmIFNUUkVBTUlORwotCX0KLSNlbmRp ZiAvKiBTVFJFQU1JTkcgKi8KLQlkZWJ1ZyhGMTAxLCJzZGF0YSBwYWNrZXQiLCIiLHBrdG51bSk7 Ci0JaWYgKGNoa2ludCgpIDwgMCkJCS8qIEVzcGVjaWFsbHkgaW1wb3J0YW50IGlmIHN0cmVhbWlu ZyAqLwotCSAgcmV0dXJuKC05KTsKLQlpZiAoY3hzZWVuIHx8IGN6c2VlbikgewkJLyogSWYgaW50 ZXJydXB0ZWQsIGRvbmUuICovCi0JICAgIGlmICh3c2xvdHMgPiAxKSB7Ci0JCWRyYWluID0gMTsK LQkJZGVidWcoRjEwMCwic2RhdGEgY3gvenNlZW4gd2luZG93aW5nIiwiIiwwKTsKLQkJcmV0dXJu KDApOwotCSAgICB9IGVsc2UgewotCQlkZWJ1ZyhGMTAwLCJzZGF0YSBjeC96c2VlbiBub253aW5k b3dpbmciLCIiLDApOwotCQlyZXR1cm4oLTEpOwotCSAgICB9Ci0JfQotI2lmZGVmIERFQlVHCi0J aWYgKGRlYmxvZykgewotCSAgICBkZWJ1ZyhGMTAxLCJzZGF0YSBzcHNpeiIsIiIsc3BzaXopOwot CSAgICBkZWJ1ZyhGMTAxLCJzZGF0YSBiaW5hcnkiLCIiLGJpbmFyeSk7Ci0JICAgIGRlYnVnKEYx MDEsInNkYXRhIHBhcml0eSIsIiIscGFyaXR5KTsKLQl9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNp ZmRlZiBDS1RVTklORwotCWlmIChiaW5hcnkgJiYgIXBhcml0eSAmJiAhbWVtc3RyICYmICFmdW5j c3RyKQotCSAgbGVuID0gYmdldHBrdChzcHNpeik7Ci0JZWxzZQotCSAgbGVuID0gZ2V0cGt0KHNw c2l6LDEpOwotI2Vsc2UKLQlsZW4gPSBnZXRwa3Qoc3BzaXosMSk7Ci0jZW5kaWYgLyogQ0tUVU5J TkcgKi8KLQlzID0gKGNoYXIgKilkYXRhOwotCWlmIChsZW4gPT0gLTMpIHsJCS8qIFRpbWVkIG91 dCAoZS5nLnJlYWRpbmcgZnJvbSBwaXBlKSAqLwotCSAgICBzID0gIiI7CQkJLyogU2VuZCBhbiBl bXB0eSBkYXRhIHBhY2tldC4gKi8KLQkgICAgbGVuID0gMDsKLQl9IGVsc2UgaWYgKGxlbiA9PSAw KSB7CQkvKiBEb25lIGlmIG5vIGRhdGEuICovCi0JICAgIGlmIChwa3RudW0gPT0gd2lubG8pCi0J ICAgICAgcmV0dXJuKC0xKTsKLQkgICAgZHJhaW4gPSAxOwkJCS8qIEJ1dCBjYW4ndCByZXR1cm4g LTEgdW50aWwgYWxsICovCi0JICAgIGRlYnVnKEYxMDEsInNkYXRhIGVvZiwgZHJhaW4iLCIiLGRy YWluKTsKLQkgICAgcmV0dXJuKDApOwkJCS8qIEFDS3MgYXJlIGRyYWluZWQuICovCi0JfQotCWRl YnVnKEYxMDEsInNkYXRhIHBrdG51bSIsIiIscGt0bnVtKTsKLQlkZWJ1ZyhGMTAxLCJzZGF0YSBs ZW4iLCIiLGxlbik7Ci0JZGVidWcoRjAxMSwic2RhdGEgZGF0YSIsZGF0YSw1Mik7Ci0KLQl4ID0g c3BhY2soJ0QnLHBrdG51bSxsZW4sKENIQVIgKilzKTsgLyogU2VuZCB0aGUgZGF0YSBwYWNrZXQu ICovCi0JZGVidWcoRjEwMSwic2RhdGEgc3BhY2siLCIiLHgpOwotCWlmICh4IDwgMCkgewkJCS8q IEVycm9yICovCi0JICAgIHR0Y2hrKCk7CQkJLyogU2VlIGlmIGNvbm5lY3Rpb24gaXMgc3RpbGwg dGhlcmUgKi8KLQkgICAgcmV0dXJuKC0yKTsKLQl9Ci0jaWZkZWYgU1RSRUFNSU5HCi0JaWYgKHN0 cmVhbWluZykJCQkvKiBXaGF0IGFuIEFDSyB3b3VsZCBkby4gKi8KLQkgIHdpbmxvID0gcGt0bnVt OwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCXggPSB0dGNoaygpOwkJCS8qIFBlZWsgYXQgaW5w dXQgYnVmZmVyLiAqLwotCWRlYnVnKEYxMDEsInNkYXRhIHR0Y2hrIiwiIix4KTsJLyogQUNLcyB3 YWl0aW5nLCBtYXliZT8gICovCi0JaWYgKHggPCAwKQkJCS8qIE9yIGNvbm5lY3Rpb24gYnJva2Vu PyAqLwotCSAgcmV0dXJuKC0yKTsKLS8qCi0gIEhlcmUgd2UgY2hlY2sgdG8gc2VlIGlmIGFueSBB Q0tzIG9yIE5BS3MgaGF2ZSBhcnJpdmVkLCBpbiB3aGljaCBjYXNlIHdlCi0gIGJyZWFrIG91dCBv ZiB0aGUgRC1wYWNrZXQtc2VuZGluZyBsb29wIGFuZCByZXR1cm4gdG8gdGhlIHN0YXRlIHN3aXRj aGVyCi0gIHRvIHByb2Nlc3MgdGhlbS4gIFRoaXMgaXMgd2hhdCBtYWtlcyBvdXIgd2luZG93cyBz bGlkZSBpbnN0ZWFkIG9mIGx1cmNoLgotKi8KLQlpZiAoCi0jaWZkZWYgR0VNRE9TCi0vKgotICBJ biB0aGUgQXRhcmkgU1QgdmVyc2lvbiwgdHRjaGsoKSBjYW4gb25seSByZXR1cm4gMCBvciAxLiAg QnV0IG5vdGU6IHggd2lsbAotICBwcm9iYWJseSBhbHdheXMgYmUgPiAwLCBzaW5jZSB0aGUgYXMt eWV0LXVucmVhZCBwYWNrZXQgdGVybWluYXRvciBmcm9tIHRoZQotICBsYXN0IHBhY2tldCBpcyBw cm9iYWJseSBzdGlsbCBpbiB0aGUgYnVmZmVyLCBzbyBzbGlkaW5nIHdpbmRvd3Mgd2lsbAotICBw cm9iYWJseSBuZXZlciBoYXBwZW4gd2hlbiB0aGUgQXRhcmkgU1QgaXMgdGhlIGZpbGUgc2VuZGVy LiAgVGhlIGFsdGVybmF0aXZlCi0gIGlzIHRvIHNheSAiaWYgKDApIiwgaW4gd2hpY2ggY2FzZSB0 aGUgU1Qgd2lsbCBhbHdheXMgc2VuZCBhIHdpbmRvdyBmdWxsIG9mCi0gIHBhY2tldHMgYmVmb3Jl IHJlYWRpbmcgYW55IEFDS3Mgb3IgTkFLcy4KLSovCi0JICAgIHggPiAwCi0KLSNlbHNlIC8qICFH RU1ET1MgKi8KLS8qCi0gIEluIG1vc3Qgb3RoZXIgdmVyc2lvbnMsIHR0Y2hrKCkgcmV0dXJucyB0 aGUgYWN0dWFsIGNvdW50LgotICBJdCBjYW4ndCBiZSBhIEtlcm1pdCBwYWNrZXQgaWYgaXQncyBs ZXNzIHRoYW4gZml2ZSBieXRlcyBsb25nLgotKi8KLQkgICAgeCA+IDQgKyBiY3R1Ci0KLSNlbmRp ZiAvKiBHRU1ET1MgKi8KLQkgICAgKQotCSAgcmV0dXJuKDEpOwkJCS8qIFllcywgc3RvcCBzZW5k aW5nIGRhdGEgcGFja2V0cyAqLwotICAgIH0JCQkJCS8qIGFuZCBnbyB0cnkgdG8gcmVhZCB0aGUg QUNLcy4gKi8KLSAgICByZXR1cm4oMSk7Ci19Ci0KLQotLyogIFMgRSBPIEYgLS0gU2VuZCBhbiBF bmQtT2YtRmlsZSBwYWNrZXQgKi8KLQotLyogIENhbGwgd2l0aCBhIHN0cmluZyBwb2ludGVyIHRv IGNoYXJhY3RlciB0byBwdXQgaW4gdGhlIGRhdGEgZmllbGQsICovCi0vKiAgb3IgZWxzZSBhIG51 bGwgcG9pbnRlciBvciAiIiBmb3Igbm8gZGF0YS4gICovCi0KLS8qCi0gIFRoZXJlIGFyZSB0d28g InNlbmQtZW9mIiBmdW5jdGlvbnMuICBzZW9mKCkgaXMgdXNlZCB0byBzZW5kIHRoZSBub3JtYWwg ZW9mCi0gIHBhY2tldCBhdCB0aGUgZW5kIG9mIGEgZmlsZSdzIGRhdGEgKGV2ZW4gaWYgdGhlIGZp bGUgaGFzIG5vIGRhdGEpLCBvciB3aGVuCi0gIGEgZmlsZSB0cmFuc2ZlciBpcyBpbnRlcnJ1cHRl ZC4gIHN4ZW9mKCkgaXMgdXNlZCB0byBzZW5kIGFuIEVPRiBwYWNrZXQgdGhhdAotICBvY2N1cnMg YmVjYXVzZSBvZiBhdHRyaWJ1dGUgcmVmdXNhbCBvciBpbnRlcnJ1cHRpb24gcHJpb3IgdG8gZW50 ZXJpbmcgZGF0YQotICBzdGF0ZS4gIFRoZSBkaWZmZXJlbmNlIGlzIHB1cmVseSBhIG1hdHRlciBv ZiBidWZmZXIgYWxsb2NhdGlvbiBhbmQgcGFja2V0Ci0gIHNlcXVlbmNlIG51bWJlciBtYW5hZ2Vt ZW50LiAgQm90aCBmdW5jdGlvbnMgYWN0IGFzICJmcm9udCBlbmRzIiB0byB0aGUKLSAgY29tbW9u IHNlbmQtZW9mIGZ1bmN0aW9uLCBzemVvZigpLgotKi8KLQotLyogQ29kZSBjb21tb24gdG8gYm90 aCBzZW9mKCkgYW5kIHN4ZW9mKCkgKi8KLQotaW50Ci1zemVvZihzKSBDSEFSICpzOyB7Ci0gICAg aW50IHg7Ci0gICAgbHNzdGF0ZSA9IDA7CQkJLyogQ2FuY2VsIGxvY2tpbmctc2hpZnQgc3RhdGUg Ki8KLSAgICBpZiAoIXMpIHMgPSAoQ0hBUiAqKSIiOwotICAgIGRlYnVnKEYxMTEsInN6ZW9mIixz LHBrdG51bSk7Ci0gICAgaWYgKCpzKSB7Ci0JeCA9IHNwYWNrKCdaJyxwa3RudW0sMSxzKTsKLQl4 aXRzdGEgfD0gV19TRU5EOwotI2lmZGVmIENPTU1FTlQKLQl0bG9nKEYxMDAsIiAqKiogaW50ZXJy dXB0ZWQsIHNlbmRpbmcgZGlzY2FyZCByZXF1ZXN0IiwiIiwwTCk7Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotCWZpbHJlaisrOwotICAgIH0gZWxzZSB7Ci0JeCA9IHNwYWNrKCdaJyxwa3RudW0sMCwo Q0hBUiAqKSIiKTsKLSAgICB9Ci0gICAgaWYgKHggPCAwKQotICAgICAgcmV0dXJuKHgpOwotCi0j aWZkZWYgQ09NTUVOVAotICAgIC8qIE5vLCB0b28gc29vbiAqLwotICAgIGRpc2NhcmQgPSAwOwkJ CS8qIFR1cm4gb2ZmIHBlci1maWxlIGRpc2NhcmQgZmxhZyAqLwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLQotLyogSWYgd2Ugd2VyZSBzZW5kaW5nIGZyb20gYSBwaXBlLCB3ZSdyZSBub3QgYW55IG1v cmUuLi4gKi8KLSAgICBwaXBlc2VuZCA9IDA7Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLXNl b2YoeCkgaW50IHg7IHsKLSAgICBjaGFyICogczsKLS8qCi0gIGNrY3Byby53LCBiZWZvcmUgY2Fs bGluZyBzZW9mKCksIHNldHMgd2luZG93IHNpemUgYmFjayB0byAxIGFuZCB0aGVuIGNhbGxzCi0g IHdpbmRvdygpLCB3aGljaCBjbGVhcnMgb3V0IHRoZSBvbGQgYnVmZmVycy4gIFRoaXMgaXMgT0sg YmVjYXVzZSB0aGUgZmluYWwKLSAgZGF0YSBwYWNrZXQgZm9yIHRoZSBmaWxlIGhhcyBiZWVuIEFD SydkLiAgSG93ZXZlciwgc2RhdGEoKSBoYXMgYWxyZWFkeQotICBjYWxsZWQgbnh0cGt0KCksIHdo aWNoIHNldCB0aGUgbmV3IHZhbHVlIG9mIHBrdG51bSB3aGljaCBzZW9mKCkgd2lsbCB1c2UuCi0g IFNvIGFsbCB3ZSBuZWVkIHRvIGRvIGhlcmUgaXMgaXMgYWxsb2NhdGUgYSBuZXcgc2VuZC1idWZm ZXIuCi0qLwotICAgIHMgPSB4ID8gIkQiIDogIiI7Ci0gICAgZGVidWcoRjExMSwic2VvZiIscyxw a3RudW0pOwotICAgIGlmIChnZXRzYnVmKHBrdG51bSkgPCAwKSB7CS8qIEdldCBhIGJ1ZmZlciBm b3IgcGFja2V0IG4gKi8KLQlkZWJ1ZyhGMTAxLCJzZW9mIGNhbid0IGdldCBzLWJ1ZmZlciIsIiIs cGt0bnVtKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICByZXR1cm4oc3plb2YoKENIQVIgKilz KSk7Ci19Ci0KLS8qCi0gIFZlcnNpb24gb2Ygc2VvZigpIHRvIGJlIGNhbGxlZCB3aGVuIHNkYXRh KCkgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUuICBUaGUKLSAgZGlmZmVyZW5jZSBpcyB0aGF0 IHRoaXMgdmVyc2lvbiBjYWxscyBueHRwa3QoKSB0byBhbGxvY2F0ZSBhIHNlbmQtYnVmZmVyIGFu ZAotICBnZXQgdGhlIG5leHQgcGFja2V0IG51bWJlci4KLSovCi1pbnQKLXN4ZW9mKHgpIGludCB4 OyB7Ci0gICAgY2hhciAqIHM7Ci0gICAgcyA9IHggPyAiRCIgOiAiIjsKLSAgICBpZiAobnh0cGt0 KCkgPCAwKQkJCS8qIEdldCBuZXh0IHBrdCBudW1iZXIgYW5kIGJ1ZmZlciAqLwotICAgICAgZGVi dWcoRjEwMSwic3hlb2Ygbnh0cGt0IGZhaWxzIiwiIixwa3RudW0pOwotICAgIGVsc2UKLSAgICAg IGRlYnVnKEYxMDEsInN4ZW9mIHBhY2tldCIsIiIscGt0bnVtKTsKLSAgICByZXR1cm4oc3plb2Yo KENIQVIgKilzKSk7Ci19Ci0KLS8qICBTIEUgTyBUIC0tIFNlbmQgYW4gRW5kLU9mLVRyYW5zYWN0 aW9uIHBhY2tldCAqLwotCi1pbnQKLXNlb3QoKSB7Ci0gICAgaW50IHg7Ci0gICAgeCA9IG54dHBr dCgpOwotICAgIGRlYnVnKEYxMDEsInNlb3Qgbnh0cGt0IiwiIix4KTsKLSAgICBpZiAoeCA8IDAp IHJldHVybigtMSk7CQkvKiBCdW1wIHBhY2tldCBudW1iZXIsIGdldCBidWZmZXIgKi8KLSAgICB4 ID0gc3BhY2soJ0InLHBrdG51bSwwLChDSEFSICopIiIpOwkvKiBTZW5kIHRoZSBFT1QgcGFja2V0 ICovCi0gICAgaWYgKHggPCAwKQotICAgICAgcmV0dXJuKHgpOwotICAgIGN4c2VlbiA9IGN6c2Vl biA9IGRpc2NhcmQgPSAwOwkvKiBSZXNldCBpbnRlcnJ1cHRpb24gZmxhZ3MgKi8KLSAgICB0c3Rh dHMoKTsJCQkJLyogTG9nIHRpbWluZyBpbmZvICovCi0gICAgcmV0dXJuKDApOwotfQotCi0KLS8q ICAgUiBQIEEgUiAtLSBGaWxsIHRoZSBkYXRhIGFycmF5IHdpdGggbXkgc2VuZC1pbml0IHBhcmFt ZXRlcnMgICovCi0KLWludCBxOGZsYWcgPSAwOwotCi1DSEFSIGRhZGFbMzJdOwkJCQkvKiBVc2Ug dGhpcyBpbnN0ZWFkIG9mIGRhdGFbXS4gKi8KLQkJCQkJLyogVG8gYXZvaWQgc29tZSBraW5kIG9m IHdpZXJkICovCi0JCQkJCS8qIGFkZHJlc3NpbmcgZm91bHVwIGluIHNwYWNrKCkuLi4gKi8KLQkJ CQkJLyogKHdoaWNoIG1pZ2h0IGJlIGZpeGVkIG5vdy4uLikgKi8KLQotQ0hBUiAqCi1ycGFyKCkg ewotICAgIGNoYXIgKnA7Ci0gICAgaW50IGksIHgsIG1heDsKLSAgICBleHRlcm4gaW50IHNwcm1s ZW47Ci0KLSAgICBtYXggPSBtYXhkYXRhKCk7CQkJLyogQmlnZ2VzdCBkYXRhIGZpZWxkIEkgY2Fu IHNlbmQgKi8KLSAgICBkZWJ1ZyhGMTAxLCAicnBhciBtYXggMSIsIiIsbWF4KTsKLSAgICBkZWJ1 ZyhGMTAxLCAicnBhciBzcHJtbGVuIiwiIixzcHJtbGVuKTsKLSAgICBpZiAoc3BybWxlbiA+IDEg JiYgc3BybWxlbiA8IG1heCkJLyogVXNlciBvdmVycmlkZSAqLwotICAgICAgbWF4ID0gc3BybWxl bjsKLSAgICBkZWJ1ZyhGMTAxLCAicnBhciBtYXggMiIsIiIsbWF4KTsKLQotICAgIGlmIChycHNp eiA+IE1BWFBBQ0spCQkvKiBCaWdnZXN0IG5vcm1hbCBwYWNrZXQgSSB3YW50LiAqLwotICAgICAg ZGFkYVswXSA9IChjaGFyKSB0b2NoYXIoTUFYUEFDSyk7CS8qIElmID4gOTQsIHVzZSA5NCwgYnV0 IHNwZWNpZnkgKi8KLSAgICBlbHNlCQkJCS8qIGV4dGVuZGVkIHBhY2tldCBsZW5ndGggYmVsb3cu Li4gKi8KLSAgICAgIGRhZGFbMF0gPSAoY2hhcikgdG9jaGFyKHJwc2l6KTsJLyogZWxzZSB1c2Ug d2hhdCB0aGUgdXNlciBzYWlkLiAqLwotICAgIGRhZGFbMV0gPSAoY2hhcikgdG9jaGFyKGNoa3Rp bW8ocGt0dGltLDApKTsgLyogV2hlbiB0byB0aW1lIG1lIG91dCAqLwotICAgIGRhZGFbMl0gPSAo Y2hhcikgdG9jaGFyKG15cGFkbik7CS8qIEhvdyBtdWNoIHBhZGRpbmcgSSBuZWVkIChub25lKSAq LwotICAgIGRhZGFbM10gPSAoY2hhcikgY3RsKG15cGFkYyk7CS8qIFBhZGRpbmcgY2hhcmFjdGVy IEkgd2FudCAqLwotICAgIGRhZGFbNF0gPSAoY2hhcikgdG9jaGFyKGVvbCk7CS8qIEVuZC1PZi1M aW5lIGNoYXJhY3RlciBJIHdhbnQgKi8KLSAgICBkYWRhWzVdID0gbXljdGxxOwkJCS8qIENvbnRy b2wtUXVvdGUgY2hhcmFjdGVyIEkgc2VuZCAqLwotCi0gICAgaWYgKG1heCA8IDYpIHsgZGFkYVs2 XSA9IE5VTDsgcnFmID0gMDsgZWJxID0gc3EgPSBOVUw7IHJldHVybihkYWRhKTsgfQotCi0gICAg c3dpdGNoIChycWYpIHsJCQkvKiA4dGgtYml0IHByZWZpeCAoc2luZ2xlLXNoaWZ0KSAqLwotICAg ICAgY2FzZSAtMToJCQkJLyogSSdtIG9wZW5pbmcgdGhlIGJpZHMgKi8KLSAgICAgIGNhc2UgIDE6 CQkJCS8qIE90aGVyIEtlcm1pdCBhbHJlYWR5IGJpZCAnWScgKi8KLQlpZiAocGFyaXR5KSBlYnEg PSBzcSA9IE1ZRUJROwkvKiBTbyBJIHJlcGx5IHdpdGggJyYnIGlmIHBhcml0eSAqLwotCWJyZWFr OwkJCQkvKiAgb3RoZXJ3aXNlIHdpdGggJ1knLiAqLwotICAgICAgY2FzZSAgMjoJCQkJLyogT3Ro ZXIgS2VybWl0IHNlbnQgYSB2YWxpZCBwcmVmaXggKi8KLQlpZiAocThmbGFnKQotCSAgc3EgPSBl YnE7CQkJLyogRmFsbCB0aHJvdWdoIG9uIHB1cnBvc2UgKi8KLSAgICAgIGNhc2UgIDA6CQkJCS8q IE90aGVyIEtlcm1pdCBiaWQgbm90aGluZyAqLwotCWJyZWFrOwkJCQkvKiBTbyBJIHJlcGx5IHdp dGggJ1knLiAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMDAwLCJycGFyIDhicSBzcSIsIiIsc3EpOwot ICAgIGRlYnVnKEYwMDAsInJwYXIgOGJxIGVicSIsIiIsZWJxKTsKLSAgICBpZiAobHNjYXB1ID09 IDIpCQkJLyogTE9DS0lORy1TSElGVCBGT1JDRUQgKi8KLSAgICAgIGRhZGFbNl0gPSAnTic7CQkJ LyogcmVxdWlyZXMgbm8gc2luZ2xlLXNoaWZ0ICovCi0gICAgZWxzZQkJCQkvKiBvdGhlcndpc2Ug c2VuZCBwcmVmaXggb3IgJ1knICovCi0gICAgICBkYWRhWzZdID0gKGNoYXIpIHNxOwotICAgIGVi cXNlbnQgPSBkYWRhWzZdOwkJCS8qIEFuZCByZW1lbWJlciB3aGF0IEkgcmVhbGx5IHNlbnQgKi8K LQotICAgIGlmIChtYXggPCA3KSB7IGRhZGFbN10gPSBOVUw7IGJjdHIgPSAxOyByZXR1cm4oZGFk YSk7IH0KLQotICAgIGRhZGFbN10gPSAoY2hhcikgKGJjdHIgPT0gNCkgPyAnQicgOiBiY3RyICsg JzAnOyAvKiBCbG9jayBjaGVjayB0eXBlICovCi0KLSAgICBpZiAobWF4IDwgOCkgeyBkYWRhWzhd ID0gTlVMOyBycHRmbGcgPSAwOyByZXR1cm4oZGFkYSk7IH0KLQotICAgIGlmIChycHRlbmEpIHsK LQlpZiAocnB0ZmxnKQkJCS8qIFJ1biBsZW5ndGggZW5jb2RpbmcgKi8KLQkgIGRhZGFbOF0gPSAo Y2hhcikgcnB0cTsJLyogSWYgcmVjZWl2aW5nLCBhZ3JlZSAqLwotCWVsc2UJCQkJLyogYnkgcmVw bHlpbmcgd2l0aCBzYW1lIGNoYXJhY3Rlci4gKi8KLQkgIGRhZGFbOF0gPSAoY2hhcikgKHJwdHEg PSBteXJwdHEpOyAvKiBXaGVuIHNlbmRpbmcgdXNlIHRoaXMuICovCi0gICAgfSBlbHNlIGRhZGFb OF0gPSBTUDsJCS8qIE5vdCBlbmFibGVkLCBwdXQgYSBzcGFjZSBoZXJlLiAqLwotCi0gICAgLyog Q0FQQVMgbWFzayAqLwotCi0gICAgaWYgKG1heCA8IDkpIHsKLQlkYWRhWzldID0gTlVMOwotCWF0 Y2FwciA9IDA7Ci0JbHBjYXByID0gMDsKLQlzd2NhcHIgPSAwOwotCXJzY2FwciA9IDA7Ci0JcmV0 dXJuKGRhZGEpOwotICAgIH0KLSAgICBkYWRhWzldID0gKGNoYXIpIHRvY2hhcigobHNjYXByID8g bHNjYXBiIDogMCkgfCAvKiBMb2NraW5nIHNoaWZ0cyAqLwotCQkgICAgIChhdGNhcHIgPyBhdGNh cGIgOiAwKSB8IC8qIEF0dHJpYnV0ZSBwYWNrZXRzICovCi0JCSAgICAgKGxwY2FwciA/IGxwY2Fw YiA6IDApIHwgLyogTG9uZyBwYWNrZXRzICovCi0JCSAgICAgKHN3Y2FwciA/IHN3Y2FwYiA6IDAp IHwgLyogU2xpZGluZyB3aW5kb3dzICovCi0JCSAgICAgKHJzY2FwciA/IHJzY2FwYiA6IDApKTsg LyogUkVTRU5EICovCi0gICAgaWYgKG1heCA8IDEwKSB7IHdzbG90ciA9IDE7IHJldHVybihkYWRh KTsgfQotICAgIGRhZGFbMTBdID0gKGNoYXIpIHRvY2hhcihzd2NhcHIgPyB3c2xvdHIgOiAxKTsg LyogQ0FQQVMrMSA9IFdpbmRvdyBzaXplICovCi0KLSAgICBpZiAobWF4IDwgMTIpIHsgcnBzaXog PSA4MDsgcmV0dXJuKGRhZGEpOyB9Ci0gICAgaWYgKHVycHNpeiA+IDk0KQotICAgICAgcnBzaXog PSB1cnBzaXogLSAxOwkJLyogTG9uZyBwYWNrZXRzIC4uLiAqLwotICAgIGRhZGFbMTFdID0gKGNo YXIpIHRvY2hhcihycHNpeiAvIDk1KTsgLyogTG9uZyBwYWNrZXQgc2l6ZSwgYmlnIHBhcnQgKi8K LSAgICBkYWRhWzEyXSA9IChjaGFyKSB0b2NoYXIocnBzaXogJSA5NSk7IC8qIExvbmcgcGFja2V0 IHNpemUsIGxpdHRsZSBwYXJ0ICovCi0KLSAgICBpZiAobWF4IDwgMTYpIHJldHVybihkYWRhKTsK LSAgICBkYWRhWzEzXSA9ICcwJzsJCQkvKiBDQVBBUys0ID0gV09OVCBDSEtQTlQgKi8KLSAgICBk YWRhWzE0XSA9ICdfJzsJCQkvKiBDQVBBUys1ID0gQ0hLSU5UIChyZXNlcnZlZCkgKi8KLSAgICBk YWRhWzE1XSA9ICdfJzsJCQkvKiBDQVBBUys2ID0gQ0hLSU5UIChyZXNlcnZlZCkgKi8KLSAgICBk YWRhWzE2XSA9ICdfJzsJCQkvKiBDQVBBUys3ID0gQ0hLSU5UIChyZXNlcnZlZCkgKi8KLSAgICBp ZiAobWF4IDwgMTcpIHJldHVybihkYWRhKTsKLSNpZm5kZWYgV0hBVEFNSQotICAgIGRhZGFbMTdd ID0gJyAnOwotI2Vsc2UKLSAgICB4ID0gMDsKLSAgICBpZiAoc2VydmVyKSB4IHw9IFdNSV9TRVJW RTsJCS8qIFdoZXRoZXIgSSBhbSBhIHNlcnZlciAqLwotICAgIGlmIChiaW5hcnkpIHggfD0gV01J X0ZNT0RFOwkJLyogTXkgZmlsZSB0cmFuc2ZlciBtb2RlIGlzIC4uLiAqLwotICAgIGlmIChmbmNu dikgIHggfD0gV01JX0ZOQU1FOwkJLyogTXkgZmlsZW5hbWUgY29udmVyc2lvbiBpcyAuLi4gKi8K LSNpZmRlZiBTVFJFQU1JTkcKLSAgICBpZiAoc3RyZWFtcnEgPT0gU0VUX09OKQotICAgICAgeCB8 PSBXTUlfU1RSRUFNOwotICAgIGVsc2UgaWYgKHN0cmVhbXJxID09IFNFVF9BVVRPICYmIHJlbGlh YmxlID09IFNFVF9PTikKLSAgICAgIHggfD0gV01JX1NUUkVBTTsKLSAgICAvKgotICAgICAgQWx3 YXlzIG9mZmVyIHRvIHN0cmVhbSB3aGVuIGluIHJlbW90ZSBtb2RlIGFuZCBTVFJFQU1JTkcgaXMg QVVUTwotICAgICAgYW5kIFJFTElBQkxFIGlzIG5vdCBPRkYgKGkuZS4gaXMgT04gb3IgQVVUTyku Ci0gICAgKi8KLSAgICBlbHNlIGlmICghbG9jYWwgJiYgc3RyZWFtcnEgPT0gU0VUX0FVVE8gJiYg cmVsaWFibGUgIT0gU0VUX09GRikKLSAgICAgIHggfD0gV01JX1NUUkVBTTsKLSNlbmRpZiAvKiBT VFJFQU1JTkcgKi8KLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBpZiAoY2xlYXJycSA9PSBTRVRfT04p Ci0gICAgICB4IHw9IFdNSV9DTEVBUjsKLSAgICBlbHNlIGlmIChjbGVhcnJxID09IFNFVF9BVVRP ICYmCS8qIFNFVCBDTEVBUi1DSEFOTkVMIEFVVE8gKi8KLQkgICAgICgobmV0d29yayAmJiBuZXR0 eXBlID09IE5FVF9UQ1BCIC8qIFRDUC9JUCAqLwotI2lmZGVmIFJMT0dDT0RFCi0gICAgICAgICAg ICAgICAgJiYgdHRucHJvdG8gIT0gTlBfUkxPR0lOLyogUmxvZ2luIGlzIG5vdCBjbGVhciAqLwot ICAgICAgICAgICAgICAgICYmICEodHRucHJvdG8gPj0gTlBfSzRMT0dJTiAmJiB0dG5wcm90byA8 PSBOUF9FSzVMT0dJTikKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotCSAgICAgICApCi0jaWZkZWYg U1NIQlVJTFRJTgotICAgICAgICAgICAgICB8fCAobmV0d29yayAmJiBuZXR0eXBlID09IE5FVF9T U0gpCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVmIElLU0QKLQkgICAgICB8fCBpbnNl cnZlcgkJLyogV2UgYXJlIElLU0QgKi8KLSNlbmRpZiAvKiBJS1NEICovCi0JICAgICAgKSkKLSAg ICAgIHggfD0gV01JX0NMRUFSOwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotICAgIHggfD0gV01J X0ZMQUc7Ci0gICAgZGFkYVsxN10gPSAoY2hhcikgdG9jaGFyKHgpOwotI2VuZGlmIC8qIFdIQVRB TUkgKi8KLSAgICBpID0gMTg7CQkJCS8qIFBvc2l0aW9uIG9mIG5leHQgZmllbGQgKi8KLSAgICBw ID0gY2tzeXNpZDsJCQkvKiBXSE9BTUkgKG15IHN5c3RlbSBJRCkgKi8KLSAgICB4ID0gc3RybGVu KHApOwotICAgIGlmIChtYXggLSBpIDwgeCArIDEpIHJldHVybihkYWRhKTsKLSAgICBpZiAoeCA+ IDApIHsKLQlkYWRhW2krK10gPSAoY2hhcikgdG9jaGFyKHgpOwotCXdoaWxlICgqcCkKLQkgIGRh ZGFbaSsrXSA9ICpwKys7Ci0gICAgfQotCi0gICAgaWYgKG1heCA8IGkrMSkgcmV0dXJuKGRhZGEp OwotI2lmbmRlZiBXSEFUQU1JCQkJCS8qIFdIQVRBTUkyICovCi0gICAgZGFkYVtpKytdID0gJyAn OwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAxLCJycGFyIHhmZXJtb2RlIiwiIix4ZmVybW9kZSk7Ci0g ICAgeCA9IFdNSTJfRkxBRzsJCQkvKiBJcy1WYWxpZCBmbGFnICovCi0gICAgaWYgKHhmZXJtb2Rl ICE9IFhNT0RFX0EpCQkvKiBJZiBUUkFOU0ZFUiBNT0RFIGlzIE1BTlVBTCAqLwotICAgICAgeCB8 PSBXTUkyX1hNT0RFOwkJCS8qIHNldCB0aGUgWEZFUk1PREUgYml0ICovCi0gICAgaWYgKHJlY3Vy c2l2ZSA+IDApCQkJLyogSWYgdGhpcyBpcyBhIHJlY3Vyc2l2ZSB0cmFuc2ZlciAqLwotICAgICAg eCB8PSBXTUkyX1JFQ1U7CQkJLyogc2V0IHRoZSBSRUNVUlNJVkUgYml0ICovCi0gICAgZGFkYVtp KytdID0gdG9jaGFyKHgpOwotICAgIGRlYnVnKEYxMDEsInJwYXIgd2hhdGFtaTIiLCIiLHgpOwot I2VuZGlmIC8qIFdIQVRBTUkgKi8KLQotICAgIGRhZGFbaV0gPSAnXDAnOwkJCS8qIFRlcm1pbmF0 ZSB0aGUgaW5pdCBzdHJpbmcgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewot CWRlYnVnKEYxMTAsInJwYXIiLGRhZGEsMCk7Ci0JcmRlYnUoZGFkYSwoaW50KXN0cmxlbigoY2hh ciAqKWRhZGEpKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBja3N0cm5jcHkoKGNo YXIgKilteWluaXQsKGNoYXIgKilkYWRhLE1ZSU5JVExFTik7Ci0gICAgcmV0dXJuKGRhZGEpOwkJ CS8qIFJldHVybiBwb2ludGVyIHRvIHN0cmluZy4gKi8KLX0KLQotaW50Ci1zcGFyKHMpIENIQVIg KnM7IHsJCQkvKiBTZXQgcGFyYW1ldGVycyAqLwotICAgIGludCB4LCB5LCBscHNpeiwgYmlnZ2Vz dDsKLSAgICBleHRlcm4gaW50IHJwcm1sZW4sIGxhc3RzcG1heDsKLSAgICBleHRlcm4gc3RydWN0 IHN5c2RhdGEgc3lzaWRsaXN0W107Ci0KLSAgICB3aGF0cnUgPSAwOwotICAgIHdob2FyZXVbMF0g PSBOVUw7Ci0jaWZkZWYgU1RSRUFNSU5HCi0gICAgc3RyZWFtb2sgPSAwOwotICAgIHN0cmVhbWlu ZyA9IDA7Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0gICAgYmlnZ2VzdCA9IHJsbjsKLQotICAg IGRlYnVnKEYxMDEsICJzcGFyIGJpZ2dlc3QgMSIsIiIsYmlnZ2VzdCk7Ci0gICAgZGVidWcoRjEw MSwgInNwYXIgcnBybWxlbiIsIiIscnBybWxlbik7Ci0gICAgaWYgKHJwcm1sZW4gPiAxICYmIHJw cm1sZW4gPCBiaWdnZXN0KQotICAgICAgYmlnZ2VzdCA9IHJwcm1sZW47Ci0gICAgZGVidWcoRjEw MSwgInJwYXIgYmlnZ2VzdCAyIiwiIixiaWdnZXN0KTsKLSAgICBkZWJ1ZyhGMTEwLCJzcGFyIHBh Y2tldCIscywwKTsKLQotICAgIHMtLTsJCQkJLyogTGluZSB1cCB3aXRoIGZpZWxkIG51bWJlcnMu ICovCi0KLS8qIExpbWl0IG9uIHNpemUgb2Ygb3V0Ym91bmQgcGFja2V0cyAqLwotICAgIHggPSAo YmlnZ2VzdCA+PSAxKSA/IHh1bmNoYXIoc1sxXSkgOiA4MDsKLSAgICBscHNpeiA9IHNwc2l6cjsJ CQkvKiBSZW1lbWJlciB3aGF0IHRoZXkgU0VULiAqLwotICAgIGlmIChzcHNpemYpIHsJCQkvKiBT RVQtY29tbWFuZCBvdmVycmlkZT8gKi8KLQlpZiAoeCA8IHNwc2l6cikgc3BzaXogPSB4OwkvKiBJ Z25vcmUgTEVOIHVubGVzcyBzbWFsbGVyICovCi0gICAgfSBlbHNlIHsJCQkJLyogb3RoZXJ3aXNl ICovCi0Jc3BzaXogPSAoeCA8IDEwKSA/IDgwIDogeDsJLyogYmVsaWV2ZSB0aGVtIGlmIHJlYXNv bmFibGUgKi8KLSAgICB9Ci0gICAgc3BtYXggPSBzcHNpejsJCQkvKiBSZW1lbWJlciBtYXhpbXVt IHNpemUgKi8KLQotLyogVGltZW91dCBvbiBpbmJvdW5kIHBhY2tldHMgKi8KLSAgICBpZiAodGlt ZWYpIHsKLQl0aW1pbnQgPSBydGltbzsJCQkvKiBTRVQgU0VORCBUSU1FT1VUIHZhbHVlIG92ZXJy aWRlcyAqLwotICAgIH0gZWxzZSB7CQkJCS8qIE90aGVyd2lzZSB1c2UgcmVxdWVzdGVkIHZhbHVl LCAqLwotCXggPSAoYmlnZ2VzdCA+PSAyKSA/IHh1bmNoYXIoc1syXSkgOiBydGltbzsgLyogaWYg aXQgaXMgbGVnYWwuICovCi0JdGltaW50ID0gKHggPCAwKSA/IHJ0aW1vIDogeDsKLSAgICB9Ci0g ICAgdGltaW50ID0gY2hrdGltbyh0aW1pbnQsdGltZWYpOwkvKiBBZGp1c3QgaWYgbmVjZXNzYXJ5 ICovCi0KLS8qIE91dGJvdW5kIFBhZGRpbmcgKi8KLSAgICBucGFkID0gMDsgcGFkY2ggPSAnXDAn OwotICAgIGlmIChiaWdnZXN0ID49IDMpIHsKLQlucGFkID0geHVuY2hhcihzWzNdKTsKLQlpZiAo YmlnZ2VzdCA+PSA0KSBwYWRjaCA9IChDSEFSKSBjdGwoc1s0XSk7IGVsc2UgcGFkY2ggPSAwOwot ICAgIH0KLSAgICBpZiAobnBhZCkgewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBucGFkOyBp KyspIHBhZGJ1ZltpXSA9IGRvcGFyKHBhZGNoKTsKLSAgICB9Ci0KLS8qIE91dGJvdW5kIFBhY2tl dCBUZXJtaW5hdG9yICovCi0gICAgc2VvbCA9IChDSEFSKSAoYmlnZ2VzdCA+PSA1KSA/IHh1bmNo YXIoc1s1XSkgOiBDUjsKLSAgICBpZiAoKHNlb2wgPCAxKSB8fCAoc2VvbCA+IDMxKSkgc2VvbCA9 IENSOwotCi0vKiBDb250cm9sIHByZWZpeCB0aGF0IHRoZSBvdGhlciBLZXJtaXQgaXMgc2VuZGlu ZyAqLwotICAgIHggPSAoYmlnZ2VzdCA+PSA2KSA/IHNbNl0gOiAnIyc7Ci0gICAgY3RscSA9IChD SEFSKSAoKCh4ID4gMzIgJiYgeCA8IDYzKSB8fCAoeCA+IDk1ICYmIHggPCAxMjcpKSA/IHggOiAn IycpOwotCi0vKiA4dGgtYml0IHByZWZpeCAqLwotLyoKLSAgTk9URTogTWF5YmUgdGhpcyBjb3Vs ZCBiZSBzaW1wbGlmaWVkIHVzaW5nIHJjdnR5cC4KLSAgSWYgcmN2dHlwID09ICdZJyB0aGVuIHdl J3JlIHJlYWRpbmcgdGhlIEFDSywKLSAgb3RoZXJ3aXNlIHdlJ3JlIHJlYWRpbmcgdGhlIG90aGVy IEtlcm1pdCdzIGluaXRpYWwgYmlkLgotICBCdXQgaGlzIGhvcnJlbmRvdXMgY29kZSBoYXMgYmVl biB3b3JraW5nIE9LIGZvciB5ZWFycywgc28uLi4KLSovCi0gICAgcnEgPSAoYmlnZ2VzdCA+PSA3 KSA/IHNbN10gOiAwOwotICAgIGlmIChycSA9PSAnWScpIHJxZiA9IDE7Ci0gICAgICBlbHNlIGlm ICgocnEgPiAzMiAmJiBycSA8IDYzKSB8fCAocnEgPiA5NSAmJiBycSA8IDEyNykpIHJxZiA9IDI7 Ci0gICAgICAgIGVsc2UgcnFmID0gMDsKLSAgICBkZWJ1ZyhGMDAwLCJzcGFyIDhicSBycSIsIiIs cnEpOwotICAgIGRlYnVnKEYwMDAsInNwYXIgOGJxIHNxIiwiIixzcSk7Ci0gICAgZGVidWcoRjAw MCwic3BhciA4YnEgZWJxIiwiIixlYnEpOwotICAgIGRlYnVnKEYxMDEsInNwYXIgOGJxIHJxZiIs IiIscnFmKTsKLSAgICBzd2l0Y2ggKHJxZikgewotICAgICAgY2FzZSAwOgkJCQkvKiBGaWVsZCBp cyBtaXNzaW5nIGZyb20gcGFja2V0LiAqLwotCWVicWZsZyA9IDA7CQkJLyogU28gbm8gOHRoLWJp dCBwcmVmaXhpbmcuICovCi0JYnJlYWs7Ci0gICAgICBjYXNlIDE6CQkJCS8qIE90aGVyIEtlcm1p dCBzZW50ICdZJyA9IFdpbGwgRG8uICovCi0JLyoKLSAgICAgICAgICBXaGVuIEkgYW0gdGhlIGZp bGUgcmVjZWl2ZXIsIGVicXNlbnQgaXMgMCBiZWNhdXNlIEkgZGlkbid0IHNlbmQgYQotICAgICAg ICAgIG5lZ290aWF0aW9uIHlldC4gIElmIG15IHBhcml0eSBpcyBzZXQgdG8gYW55dGhpbmcgb3Ro ZXIgdGhhbiBOT05FLAotICAgICAgICAgIGVpdGhlciBiZWNhdXNlIG15IHVzZXIgU0VUIFBBUklU WSBvciBiZWNhdXNlIEkgZGV0ZWN0ZWQgcGFyaXR5IGJpdHMKLSAgICAgICAgICBvbiB0aGlzIHBh Y2tldCwgSSByZXBseSB3aXRoICcmJywgb3RoZXJ3aXNlICdZJy4KLQotCSAgV2hlbiBJIGFtIHRo ZSBmaWxlIHNlbmRlciwgZWJxc2VudCBpcyB3aGF0IEkganVzdCBzZW50IGluIHJwYXIoKSwKLSAg ICAgICAgICB3aGljaCBjYW4gYmUgJ1knLCAnTicsIG9yICcmJy4gIElmIEkgc2VudCAnJicsIHRo ZW4gdGhpcyAnWScgbWVhbnMKLSAgICAgICAgICB0aGUgb3RoZXIgS2VybWl0IGFncmVlcyB0byBk byA4dGgtYml0IHByZWZpeGluZy4KLQotICAgICAgICAgIElmIEkgc2VudCAnWScgb3IgJ04nLCBi dXQgdGhlbiBkZXRlY3RlZCBwYXJpdHkgb24gdGhlIEFDSyBwYWNrZXQKLSAgICAgICAgICB0aGF0 IGNhbWUgYmFjaywgdGhlbiBpdCdzIHRvbyBsYXRlOiB0aGVyZSBpcyBubyBsb25nZXIgYW55IHdh eSBmb3IKLSAgICAgICAgICBtZSB0byB0ZWxsIHRoZSBvdGhlciBLZXJtaXQgdGhhdCBJIHdhbnQg dG8gZG8gOHRoLWJpdCBwcmVmaXhpbmcsIHNvCi0gICAgICAgICAgSSBtdXN0IG5vdCBkbyBpdCwg YW5kIGluIHRoYXQgY2FzZSwgaWYgdGhlcmUgaXMgYW55IDgtYml0IGRhdGEgaW4KLSAgICAgICAg ICB0aGUgZmlsZSB0byBiZSB0cmFuc2ZlcnJlZCwgdGhlIHRyYW5zZmVyIHdpbGwgZmFpbCBiZWNh dXNlIG9mIGJsb2NrCi0gICAgICAgICAgY2hlY2sgZXJyb3JzLgotCi0gICAgICAgICAgVGhlIGZv bGxvd2luZyBjbGF1c2UgY292ZXJzIGFsbCBvZiB0aGVzZSBzaXR1YXRpb25zOgotCSovCi0JaWYg KHBhcml0eSAmJiAoZWJxc2VudCA9PSAwIHx8IGVicXNlbnQgPT0gJyYnKSkgewotCSAgICBlYnFm bGcgPSAxOwotCSAgICBlYnEgPSBNWUVCUTsKLQl9Ci0JYnJlYWs7Ci0gICAgICBjYXNlIDI6CQkJ CS8qIE90aGVyIEtlcm1pdCBzZW50IGEgdmFsaWQgcHJlZml4ICovCi0JZWJxZmxnID0gKGVicSA9 PSBzcSB8fCBzcSA9PSAnWScpOwotCWlmIChlYnFmbGcpIHsKLQkgICAgZWJxID0gcnE7Ci0JICAg IGRlYnVnKEYxMDEsInNwYXIgc2V0dGluZyBwYXJpdHkgdG8gc3BhY2UiLCIiLGVicSk7Ci0JICAg IGlmICghcGFyaXR5KSBwYXJpdHkgPSB0dHBydHkgPSAncyc7Ci0JfQotICAgIH0KLSAgICBpZiAo bHNjYXB1ID09IDIpIHsgICAgIC8qIEJ1dCBubyBzaW5nbGUtc2hpZnRzIGlmIExPQ0tJTkctU0hJ RlQgRk9SQ0VEICovCi0JZWJxZmxnID0gMDsKLQllYnEgPSAnTic7Ci0gICAgfQotCi0vKiBCbG9j ayBjaGVjayAqLwotICAgIHggPSAxOwotICAgIGlmIChiaWdnZXN0ID49IDgpIHsKLQlpZiAoc1s4 XSA9PSAnQicpIHggPSA0OwotCWVsc2UgeCA9IHNbOF0gLSAnMCc7Ci0JaWYgKCh4IDwgMSkgfHwg KHggPiA1KSkgeCA9IDE7CS8qICI1IiAyMDExMDYwNSAqLwotICAgIH0KLSAgICBiY3RyID0geDsK LQotLyogUmVwZWF0IHByZWZpeCAqLwotCi0gICAgcnB0ZmxnID0gMDsJCQkJLyogQXNzdW1lIG5v IHJlcGVhdC1jb3VudHMgKi8KLSAgICBpZiAoYmlnZ2VzdCA+PSA5KSB7CQkJLyogSXMgdGhlcmUg YSByZXBlYXQtY291bnQgZmllbGQ/ICovCi0JY2hhciB0OwkJCQkvKiBZZXMuICovCi0JdCA9IHNb OV07CQkJLyogR2V0IGl0cyBjb250ZW50cy4gKi8KLS8qCi0gIElmIEknbSBzZW5kaW5nIGZpbGVz LCB0aGVuIEknbSByZWFkaW5nIHRoZXNlIHBhcmFtZXRlcnMgZnJvbSBhbiBBQ0ssIGFuZCBzbwot ICB0aGlzIGNoYXJhY3RlciBtdXN0IGFncmVlIHdpdGggd2hhdCBJIHNlbnQuCi0qLwotCWlmIChy cHRlbmEpIHsJCQkvKiBJZiBlbmFibGVkIC4uLiAqLwotCSAgICBpZiAoKGNoYXIpIHJjdnR5cCA9 PSAnWScpIHsJLyogU2VuZGluZyBmaWxlcywgcmVhZGluZyBBQ0suICovCi0JCWlmICh0ID09IG15 cnB0cSkgcnB0ZmxnID0gMTsKLQkgICAgfSBlbHNlIHsJCQkvKiBJJ20gcmVjZWl2aW5nIGZpbGVz ICovCi0JCWlmICgodCA+IDMyICYmIHQgPCA2MykgfHwgKHQgPiA5NSAmJiB0IDwgMTI3KSkgewot CQkgICAgcnB0ZmxnID0gMTsKLQkJICAgIHJwdHEgPSB0OwotCQl9Ci0JICAgIH0KLQl9IGVsc2Ug cnB0ZmxnID0gMDsKLSAgICB9Ci0KLS8qIENhcGFiaWxpdGllcyAqLwotCi0gICAgYXRjYXB1ID0g bHBjYXB1ID0gc3djYXB1ID0gcnNjYXB1ID0gMDsgLyogQXNzdW1lIG5vbmUgb2YgdGhlc2UuICov Ci0gICAgaWYgKGxzY2FwdSAhPSAyKSBsc2NhcHUgPSAwOwkvKiBBc3N1bWUgbm8gTFMgdW5sZXNz IGZvcmNlZC4gKi8KLSAgICB5ID0gMTE7CQkJCS8qIFBvc2l0aW9uIG9mIG5leHQgZmllbGQsIGlm IGFueSAqLwotICAgIGlmIChiaWdnZXN0ID49IDEwKSB7Ci0gICAgICAgIHggPSB4dW5jaGFyKHNb MTBdKTsKLQlkZWJ1ZyhGMTAxLCJzcGFyIGNhcGFzIiwiIix4KTsKLSAgICAgICAgYXRjYXB1ID0g KHggJiBhdGNhcGIpICYmIGF0Y2FwcjsgLyogQXR0cmlidXRlcyAqLwotCWxwY2FwdSA9ICh4ICYg bHBjYXBiKSAmJiBscGNhcHI7IC8qIExvbmcgcGFja2V0cyAqLwotCXN3Y2FwdSA9ICh4ICYgc3dj YXBiKSAmJiBzd2NhcHI7IC8qIFNsaWRpbmcgd2luZG93cyAqLwotCXJzY2FwdSA9ICh4ICYgcnNj YXBiKSAmJiByc2NhcHI7IC8qIFJFU0VORCAqLwotCWRlYnVnKEYxMDEsInNwYXIgbHNjYXB1Iiwi Iixsc2NhcHUpOwotCWRlYnVnKEYxMDEsInNwYXIgbHNjYXByIiwiIixsc2NhcHIpOwotCWRlYnVn KEYxMDEsInNwYXIgZWJxZmxnIiwiIixlYnFmbGcpOwotCWlmIChsc2NhcHUgIT0gMikgbHNjYXB1 ID0gKCh4ICYgbHNjYXBiKSAmJiBsc2NhcHIgJiYgZWJxZmxnKSA/IDEgOiAwOwotCWRlYnVnKEYx MDEsInNwYXIgc3djYXByIiwiIixzd2NhcHIpOwotCWRlYnVnKEYxMDEsInNwYXIgc3djYXB1Iiwi Iixzd2NhcHUpOwotCWRlYnVnKEYxMDEsInNwYXIgbHNjYXB1IiwiIixsc2NhcHUpOwotCWZvciAo eSA9IDEwOyAoeHVuY2hhcihzW3ldKSAmIDEpICYmIChiaWdnZXN0ID49IHkpOyB5KyspOwotCWRl YnVnKEYxMDEsInNwYXIgeSIsIiIseSk7Ci0gICAgfQotCi0vKiBMb25nIFBhY2tldHMgKi8KLSAg ICBkZWJ1ZyhGMTAxLCJzcGFyIGxwY2FwdSIsIiIsbHBjYXB1KTsKLSAgICBpZiAobHBjYXB1KSB7 Ci0gICAgICAgIGlmIChiaWdnZXN0ID4geSsxKSB7Ci0JICAgIHggPSB4dW5jaGFyKHNbeSsyXSkg KiA5NSArIHh1bmNoYXIoc1t5KzNdKTsKLQkgICAgZGVidWcoRjEwMSwic3BhciBscCBsZW4iLCIi LHgpOwotCSAgICBpZiAoc3BzaXpmKSB7CQkvKiBJZiBvdmVycmlkaW5nIG5lZ290aWF0aW9ucyAq LwotCQlzcHNpeiA9ICh4IDwgbHBzaXopID8geCA6IGxwc2l6OyAvKiBkbyB0aGlzLCAqLwotCSAg ICB9IGVsc2UgewkJCSAgICAgICAgIC8qIG90aGVyd2lzZSAqLwotCQlzcHNpeiA9ICh4ID4gTUFY U1ApID8gTUFYU1AgOiB4OyAvKiBkbyB0aGlzLiAqLwotCSAgICB9Ci0JICAgIGlmIChzcHNpeiA8 IDEwKSBzcHNpeiA9IDgwOwkvKiBCZSBkZWZlbnNpdmUuLi4gKi8KLQl9Ci0gICAgfQotICAgIC8q IChQV1ApIHNhdmUgY3VycmVudCBzZW5kIHBhY2tldCBzaXplIGZvciBvcHRpbWFsIHBhY2tldCBz aXplIGNhbGNzICovCi0gICAgc3BtYXggPSBzcHNpejsJCQkvKiBNYXhpbXVtIG5lZ290aWF0ZWQg bGVuZ3RoICovCi0gICAgbGFzdHNwbWF4ID0gc3BzaXo7CQkJLyogRm9yIHN0YXRzICovCi0gICAg aWYgKHNsb3N0YXJ0ICYmIHNwc2l6ID4gNDk5KQkvKiBTbG93IHN0YXJ0IGxlbmd0aCAqLwotICAg ICAgc3BzaXogPSAyNDQ7Ci0gICAgZGVidWcoRjEwMSwic3BhciBzbG93LXN0YXJ0IHNwc2l6Iiwi IixzcHNpeik7Ci0gICAgZGVidWcoRjEwMSwic3BhciBscCBzcG1heCIsIiIsc3BtYXgpOwotICAg IHRpbWludCA9IGNoa3RpbW8odGltaW50LHRpbWVmKTsJLyogUmVjYWxjdWxhdGUgdGhlIHBhY2tl dCB0aW1lb3V0ICovCi0KLS8qIFNsaWRpbmcgV2luZG93cy4uLiAqLwotCi0gICAgaWYgKHN3Y2Fw cikgewkJCS8qIE9ubHkgaWYgcmVxdWVzdGVkLi4uICovCi0gICAgICAgIGlmIChiaWdnZXN0ID4g eSkgewkJLyogU2VlIHdoYXQgb3RoZXIgS2VybWl0IHNheXMgKi8KLQkgICAgeCA9IHh1bmNoYXIo c1t5KzFdKTsKLQkgICAgZGVidWcoRjEwMSwic3BhciB3aW5kb3ciLCIiLHgpOwotCSAgICB3c2xv dG4gPSAoeCA+IE1BWFdTKSA/IE1BWFdTIDogeDsKLS8qCi0gIHdzbG90biA9IG5lZ290aWF0ZWQg c2l6ZSAoZnJvbSBvdGhlciBLZXJtaXQncyBTIG9yIEkgcGFja2V0KS4KLSAgd3Nsb3RyID0gcmVx dWVzdGVkIHdpbmRvdyBzaXplIChmcm9tIHRoaXMgS2VybWl0J3MgU0VUIFdJTkRPVyBjb21tYW5k KS4KLSovCi0JICAgIGlmICh3c2xvdG4gPiB3c2xvdHIpCS8qIFVzZSB0aGUgc21hbGxlciBvZiB0 aGUgdHdvICovCi0JICAgICAgd3Nsb3RuID0gd3Nsb3RyOwotCSAgICBpZiAod3Nsb3RuIDwgMSkJ CS8qIFdhdGNoIG91dCBmb3IgYmFkIG5lZ290aWF0aW9uICovCi0JICAgICAgd3Nsb3RuID0gMTsK LQkgICAgaWYgKHdzbG90biA+IDEpIHsKLQkJc3djYXB1ID0gMTsJCS8qIFdlIGRvIHdpbmRvd3Mu Li4gKi8KLQkJaWYgKHdzbG90biA+IG1heHRyeSkJLyogUmV0cnkgbGltaXQgbXVzdCBiZSBncmVh dGVyICovCi0JCSAgbWF4dHJ5ID0gd3Nsb3RuICsgMTsJLyogdGhhbiB3aW5kb3cgc2l6ZS4gKi8K LQkgICAgfQotCSAgICBkZWJ1ZyhGMTAxLCJzcGFyIHdpbmRvdyBhZnRlciBhZGp1c3RtZW50Iiwi Iix4KTsKLQl9IGVsc2UgewkJCS8qIE5vIHdpbmRvdyBzaXplIHNwZWNpZmllZC4gKi8KLQkgICAg d3Nsb3RuID0gMTsJCQkvKiBXZSBkb24ndCBkbyB3aW5kb3dzLi4uICovCi0JICAgIGRlYnVnKEYx MDEsInNwYXIgd2luZG93IiwiIix4KTsKLQkgICAgc3djYXB1ID0gMDsKLQkgICAgZGVidWcoRjEw MSwic3BhciBubyB3aW5kb3dzIiwiIix3c2xvdG4pOwotCX0KLSAgICB9Ci0KLS8qIE5vdyByZWNh bGN1bGF0ZSBwYWNrZXQgbGVuZ3RoIGJhc2VkIG9uIG51bWJlciBvZiB3aW5kb3dzLiAgICovCi0v KiBUaGUgbm9nb3RpYXRlZCBudW1iZXIgb2Ygd2luZG93IHNsb3RzIHdpbGwgYmUgYWxsb2NhdGVk LCAgICAqLwotLyogYW5kIHRoZSBtYXhpbXVtIHBhY2tldCBsZW5ndGggd2lsbCBiZSByZWR1Y2Vk IGlmIG5lY2Vzc2FyeSwgKi8KLS8qIHNvIHRoYXQgYSB3aW5kb3dmdWwgb2YgcGFja2V0cyBjYW4g Zml0IGluIHRoZSBiaWcgYnVmZmVyLiAgICovCi0KLSAgICBpZiAod3Nsb3RuID4gMSkgewkJCS8q IFNocmluayB0byBmaXQuLi4gKi8KLQl4ID0gYWRqcGtsKHNwbWF4LHdzbG90bixiaWdzYnNpeik7 Ci0JaWYgKHggPCBzcG1heCkgewotCSAgICBzcG1heCA9IHg7Ci0JICAgIGxhc3RzcG1heCA9IHNw c2l6OwotCSAgICBpZiAoc2xvc3RhcnQgJiYgc3BzaXogPiA0OTkpIHNwc2l6ID0gMjQ0OyAvKiBT bG93IHN0YXJ0IGFnYWluICovCi0JICAgIGRlYnVnKEYxMDEsInNwYXIgc2VuZGluZywgcmVkZWZp bmUgc3BtYXgiLCIiLHNwbWF4KTsKLQl9Ci0gICAgfQotI2lmZGVmIFdIQVRBTUkKLSAgICBkZWJ1 ZyhGMTAxLCJzcGFyIGJpZ2dlc3QiLCIiLGJpZ2dlc3QpOwotICAgIGlmIChiaWdnZXN0ID4geSs3 KSB7CQkvKiBHZXQgV0hBVEFNSSBpbmZvIGlmIGFueSAqLwotCXdoYXRydSA9IHh1bmNoYXIoc1t5 KzhdKTsKLQlkZWJ1ZyhGMTAxLCJzcGFyIHdoYXRydSIsIiIsd2hhdHJ1KTsKLSAgICB9Ci0gICAg aWYgKHdoYXRydSAmIFdNSV9GTEFHKSB7CQkvKiBPbmx5IHZhbGlkIGlmIHRoaXMgYml0IGlzIHNl dCAqLwotI2lmZGVmIFNUUkVBTUlORwotCWlmICh3aGF0cnUgJiBXTUlfU1RSRUFNKSB7Ci0JICAg IGlmIChzdHJlYW1ycSA9PSBTRVRfT04gfHwKLQkJKHN0cmVhbXJxID09IFNFVF9BVVRPICYmCi0J CSAocmVsaWFibGUgPT0gU0VUX09OIHx8IChyZWxpYWJsZSA9PSBTRVRfQVVUTyAmJiAhbG9jYWwp Ci0jaWZkZWYgVE5fQ09NUE9SVAotICAgICAgICAgICAgICAgICAgJiYgIWlzdG5jb21wb3J0KCkK LSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0jaWZkZWYgSUtTRAotICAgICAgICAgICAgICAgICAg IHx8IGluc2VydmVyCi0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAgICAgICAgICAgICkpKSB7 Ci0JCXN0cmVhbW9rID0gMTsJCS8qIFN0cmVhbWluZyBuZWdvdGlhdGVkICovCi0JCXNsb3N0YXJ0 ID0gMDsJCS8qIFVuZG8gc2xvdy1zdGFydCBtYWNoaW5hdGlvbnMgKi8KLQkJc3BzaXogPSBsYXN0 c3BtYXg7Ci0JICAgIH0KLQl9Ci0Jc3RyZWFtZWQgPSBzdHJlYW1vazsKLQlkZWJ1ZyhGMTAxLCJz cGFyIHN0cmVhbW9rIiwiIixzdHJlYW1vayk7Ci0JZGVidWcoRjEwMSwic3BhciBjbGVhcnJxIiwi IixjbGVhcnJxKTsKLQlpZiAoY2xlYXJycSA9PSBTRVRfT04gfHwKLSAgICAgICAgICAgICAoY2xl YXJycSA9PSBTRVRfQVVUTyAmJgotICAgICAgICAgICAgICAgKChuZXR3b3JrICYmIG5ldHR5cGUg PT0gTkVUX1RDUEIKLSNpZmRlZiBSTE9HQ09ERQotICAgICAgICAgICAgICAgICYmIHR0bnByb3Rv ICE9IE5QX1JMT0dJTi8qIFJsb2dpbiBpcyBub3QgY2xlYXIgKi8KLSAgICAgICAgICAgICAgICAm JiAhKHR0bnByb3RvID49IE5QX0s0TE9HSU4gJiYgdHRucHJvdG8gPD0gTlBfRUs1TE9HSU4pCi0j ZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgICAgICAgICAg JiYgIWlzdG5jb21wb3J0KCkKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0gICAgICAgICAgICAg ICAgICApCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAgICAgICAgICAgICB8fCAobmV0d29yayAm JiBuZXR0eXBlID09IE5FVF9TU0gpCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVmIElL U0QKLSAgICAgICAgICAgICAgICAgfHwgaW5zZXJ2ZXIKLSNlbmRpZiAvKiBJS1NEICovCi0gICAg ICAgICAgICAgICAgICkpKQotICAgICAgICAgIHVyY2xlYXIgPSAod2hhdHJ1ICYgV01JX0NMRUFS KTsKLQlkZWJ1ZyhGMTAxLCJzcGFyIHVyY2xlYXIiLCIiLHVyY2xlYXIpOwotI2lmZGVmIENLX1NQ RUVECi0JaWYgKHVyY2xlYXIpCi0JICBzZXRwcmVmaXgoUFhfTk9OKTsKLSNlbmRpZiAvKiBDS19T UEVFRCAqLwotCWNsZWFyZWQgPSB1cmNsZWFyOwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotICAg IH0KLSNlbmRpZiAvKiBXSEFUQU1JICovCi0KLSAgICBpZiAoYmlnZ2VzdCA+IHkrOCkgewkJLyog R2V0IFdIT0FSRVlPVSBpbmZvIGlmIGFueSAqLwotCWludCB4LCB6OwotCXggPSB4dW5jaGFyKHNb eSs5XSk7CQkvKiBMZW5ndGggb2YgaXQgKi8KLQl6ID0geTsKLQl5ICs9ICg5ICsgeCk7Ci0JZGVi dWcoRjEwMSwic3BhciBzeXNpbmRleCB4IiwiIix4KTsKLQlkZWJ1ZyhGMTAxLCJzcGFyIHN5c2lu ZGV4IHkiLCIiLHkpOwotCWRlYnVnKEYxMDEsInNwYXIgc3lzaW5kZXggYmlnZ2VzdCIsIiIsYmln Z2VzdCk7Ci0KLQlpZiAoeCA+IDAgJiYgeCA8IDE2ICYmIGJpZ2dlc3QgPj0geSkgewotCSAgICBz dHJuY3B5KHdob2FyZXUsKGNoYXIgKilzK3orMTAseCk7IC8qIE90aGVyIEtlcm1pdCdzIHN5c3Rl bSBJRCAqLwotCSAgICBkZWJ1ZyhGMTExLCJzcGFyIHdob2FyZXlvdSIsd2hvYXJldSx3aG9hcmV1 WzBdKTsKLQkgICAgaWYgKHdob2FyZXVbMF0pIHsJCS8qIEdvdCBvbmU/ICovCi0JCXN5c2luZGV4 ID0gZ2V0c3lzaXgoKGNoYXIgKil3aG9hcmV1KTsKLQkJZGVidWcoRjEwMSwic3BhciBzeXNpbmRl eCIsd2hvYXJldSxzeXNpbmRleCk7Ci0JICAgIH0KLQl9Ci0gICAgfSBlbHNlCi0gICAgICBnb3Rv IHhzcGFyOwotCi0jaWZkZWYgV0hBVEFNSQotICAgIHkrKzsJCQkJLyogQWR2YW5jZSBwb2ludGVy ICovCi0gICAgaWYgKGJpZ2dlc3QgPj0geSkgewotCXdoYXRydTIgPSB4dW5jaGFyKHNbeV0pOwkv KiBOZXh0IGZpZWxkIGlzIFdIQVRBTUkyICovCi0JZGVidWcoRjEwMSwic3BhciB3aGF0cnUyIiwi Iix3aGF0cnUyKTsKLQlpZiAod2hhdHJ1MiAmIFdNSTJfRkxBRykgewkvKiBWYWxpZCBvbmx5IGlm IHRoaXMgYml0IGlzIHNldCAqLwotCSAgICBpZiAoc2VydmVyKSB7CQkvKiBTZXJ2ZXIgb2JleXMg Y2xpZW50J3MgeGZlciBtb2RlICovCi0JCXhmZXJtb2RlID0gKHdoYXRydTIgJiBXTUkyX1hNT0RF KSA/IFhNT0RFX00gOiBYTU9ERV9BOwotCQlkZWJ1ZyhGMTAxLCJzcGFyIHdoYXRydTIgeGZlcm1v ZGUiLCIiLHhmZXJtb2RlKTsKLQkgICAgfQotCSAgICBpZiAod2hhdHJ1MiAmIFdNSTJfUkVDVSkg ewkvKiBSRUNVUlNJVkUgdHJhbnNmZXIgKi8KLQkJaWYgKGZucnBhdGggPT0gUEFUSF9BVVRPKSB7 IC8qIElmIFJFQyBQQVRIIEFVVE8gKi8KLQkJICAgIGZucnBhdGggPSBQQVRIX1JFTDsJLyogU2V0 IGl0IHRvIFJFTEFUSVZFICovCi0JCSAgICBhdXRvcGF0aCA9IDE7CS8qIGFuZCByZW1lbWJlciB3 ZSBkaWQgdGhpcyAqLwotCQl9Ci0JICAgIH0KLQl9Ci0gICAgfQotI2VuZGlmIC8qIFdIQVRBTUkg Ki8KLQotICB4c3BhcjoKLSAgICBpZiAoc3lzaW5kZXggPiAtMSkgewotCWNoYXIgKiBwOwotCXAg PSBzeXNpZGxpc3Rbc3lzaW5kZXhdLnNpZF9uYW1lOwotCXRsb2coRjExMCwiUmVtb3RlIHN5c3Rl bSB0eXBlOiAiLHAsMEwpOwotCWlmIChzeXNpbmRleCA+IDApIHsJCS8qIElmIHBhcnRuZXQncyBz eXN0ZW0gdHlwZSBrbm93biAqLwotCSAgICB3aG9hcmV3ZSgpOwkJCS8qIHNlZSBpZiB3ZSBhcmUg YSBtYXRjaC4gKi8KLSNpZmRlZiBDS19TUEVFRAotLyogTmV2ZXIgdW5wcmVmaXggWE9OIGFuZCBY T0ZGIHdoZW4gc2VuZGluZyB0byBWTVMgKi8KLQkgICAgZGVidWcoRjExMSwicHJvdG8gd2hvYXJl dSIsd2hvYXJldSxzeXNpbmRleCk7Ci0JICAgIGlmICghc3RyY21wKChjaGFyICopd2hvYXJldSwi RDciKSkgewotCQlkZWJ1ZyhGMTExLCJwcm90byBzcGVjaWFsIFZNUyBwcmVmaXhpbmciLCIiLDAp OwotCQljdGxwW1hPTl0gPSBjdGxwW1hPRkZdID0gMTsKLQkJY3RscFtYT04rMTI4XSA9IGN0bHBb WE9GRisxMjhdID0gMTsKLQkJY3RscFszXSA9IDE7CQkvKiBDdHJsLUMgbWlnaHQgYmUgZGFuZ2Vy b3VzIHRvbyAqLwotCQljdGxwWzE0XSA9IGN0bHBbMTVdID0gMTsgLyogQW5kIFNPL1NJICovCi0J CWN0bHBbMjRdID0gY3RscFsyNV0gPSAxOyAvKiBBbmQgXlgvXlkgKi8KLQkJY3RscFsxNDFdID0g MTsJCS8qIEFuZCBDUisxMjggKi8KLQkgICAgfQotI2VuZGlmIC8qIENLX1NQRUVEICovCi0JfQot ICAgIH0KLQotLyogUmVjb3JkIHBhcmFtZXRlcnMgaW4gZGVidWcgbG9nICovCi0jaWZkZWYgREVC VUcKLSAgICBpZiAoZGVibG9nKSBzZGVidShiaWdnZXN0KTsKLSNlbmRpZiAvKiBERUJVRyAqLwot ICAgIG51bWVycnMgPSAwOwkJCS8qIFN0YXJ0IGNvdW50aW5nIGVycm9ycyBoZXJlLiAqLwotICAg IHJldHVybigwKTsKLX0KLQotLyogIEcgTiBGIEkgTCBFICAtLSAgR2V0IG5hbWUgb2YgbmV4dCBm aWxlIHRvIHNlbmQgICovCi0vKgotICBFeHBlY3RzIGdsb2JhbCBzbmRzcmMgdG8gYmU6Ci0gICAt OTogaWYgd2UgYXJlIGdlbmVyYXRpbmcgYSBmaWxlIGludGVybmFsbHkgZm9yIGNhbGlicmF0aW9u LgotICAgLTE6IG5leHQgZmlsZW5hbWUgdG8gYmUgb2J0YWluZWQgYnkgY2FsbGluZyB6bmV4dCgp LgotICAgIDA6IG5vIG5leHQgZmlsZSBuYW1lCi0gICAgMTogKG9yIGdyZWF0ZXIpIG5leHQgZmls ZW5hbWUgdG8gYmUgb2J0YWluZWQgZnJvbSAqKmNtbGlzdCwKLSAgICAgICBvciBpZiBhZGRsaXN0 ICE9IDAsIGZyb20gdGhlICJmaWxlaGVhZCIgbGlua2VkIGxpc3QsCi0gICAgICAgb3IgaWYgZmls ZWZpbGUgcG9pbnRlciBub3QgbnVsbCBmcm9tIHRoYXQgZmlsZSAod2hpY2ggaXMgYWxyZWFkeSBv cGVuKS4KLSAgUmV0dXJuczoKLSAgICAxLCB3aXRoIG5hbWUgb2YgbmV4dCBmaWxlIGluIGZpbG5h bS4KLSAgICAwLCBubyBtb3JlIGZpbGVzLCB3aXRoIGZpbG5hbSBzZXQgdG8gZW1wdHkgc3RyaW5n LgotICAgLTEsIGZpbGUgbm90IGZvdW5kCi0gICAtMiwgZmlsZSBpcyBub3QgcmVhZGFibGUgKGJ1 dCB0aGVuIHdlIGp1c3Qgc2tpcCB0byB0aGUgbmV4dCBvbmUgaWYgYW55KQotICAgLTMsIHJlYWQg YWNjZXNzIGRlbmllZAotICAgLTQsIGNhbmNlbGxlZAotICAgLTUsIHRvbyBtYW55IGZpbGVzIG1h dGNoIHdpbGRjYXJkCi0gICAtNiwgbm8gZmlsZXMgc2VsZWN0ZWQKLSAgTk9URToKLSAgICBJZiBn bmZpbGUoKSByZXR1cm5zIDAsIHRoZW4gdGhlIGdsb2JhbCB2YXJpYWJsZSBnbmZlcnJvciBzaG91 bGQgYmUgY2hlY2tlZAotICAgIHRvIGZpbmQgb3V0IHRoZSBtb3N0IHJlY2VudCBnbmZpbGUoKSBl cnJvciwgYW5kIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlCi0gICAgcmV0dXJuIGNvZGUgKGZvciBy ZWFzb25zIHRvIGhhcmQgdG8gZXhwbGFpbikuCi0qLwotaW50Ci1nbmZpbGUoKSB7Ci0gICAgaW50 IGkgPSAwLCB4ID0gMDsKLSAgICBDS19PRkZfVCBmaWxlc2l6ZSA9IDA7Ci0gICAgaW50IGRvZGly c3RvbyA9IDA7Ci0gICAgaW50IHJldGNvZGUgPSAwOwotCi0gICAgY2hhciBmdWxsbmFtZVtDS01B WFBBVEgrMV07Ci0KLSAgICBkb2RpcnN0b28gPSAoKHdoYXQgJiAoV19GVFB8V19TRU5EKSkgPT0g KFdfRlRQfFdfU0VORCkpICYmIHJlY3Vyc2l2ZTsKLQotICAgIGRlYnVnKEYxMDEsImduZmlsZSBz bmRzcmMiLCIiLHNuZHNyYyk7Ci0gICAgZGVidWcoRjEwMSwiZ25maWxlIGZpbGNudCIsIiIsZmls Y250KTsKLSAgICBkZWJ1ZyhGMTAxLCJnbmZpbGUgd2hhdCIsIiIsd2hhdCk7Ci0gICAgZGVidWco RjEwMSwiZ25maWxlIHJlY3Vyc2l2ZSIsIiIscmVjdXJzaXZlKTsKLSAgICBkZWJ1ZyhGMTAxLCJn bmZpbGUgZG9kaXJzdG9vIiwiIixkb2RpcnN0b28pOwotICAgIGduZmVycm9yID0gMDsKLSAgICBm c2l6ZSA9IChDS19PRkZfVCktMTsJCS8qIEluaXRpYWxpemUgZmlsZSBzaXplICovCi0gICAgZnVs bG5hbWVbMF0gPSBOVUw7Ci0KLSNpZmRlZiBWTVMKLSAgICAvKiAKLSAgICAgIEluIFZNUywgem9w ZW5pKCkgc2V0cyBiaW5hcnkgMC8xIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgZmlsZQotICAgICAg YXR0cmlidXRlcy4gIERvbid0IHVuZG8gaXQgaGVyZS4KLSAgICAqLwotICAgIGRlYnVnKEYxMDEs ImduZmlsZSBWTVMgYmluYXJ5IiwiIixiaW5hcnkpOwotI2Vsc2UgIC8qIFZNUyAqLwotICAgIGlm ICghKHdoYXQgJiBXX1JFTU8pICYmICh4ZmVybW9kZSA9PSBYTU9ERV9BKQotI2lmbmRlZiBOT01T RU5ECi0JJiYgIWFkZGxpc3QKLSNlbmRpZiAvKiBOT01TRU5EICovCi0JKSB7Ci0JZXh0ZXJuIGlu dCBzdGRpbmY7Ci0JaWYgKCFzdGRpbmYpCQkJLyogTm90IGlmIHNlbmRpbmcgZnJvbSBzdGRpbiAq LwotI2lmZGVmIFdIQVRBTUkKLQkgIC8qIFdlIGRvbid0IGRvIHRoaXMgaW4gc2VydmVyIG1vZGUg YmVjYXVzZSBpdCB1bmRvZXMgV0hBVEFNSSAqLwotCSAgaWYgKCFzZXJ2ZXIgfHwgKHNlcnZlciAm JiAoKHdoYXRydSAmIFdNSV9GTEFHKSA9PSAwKSkpCi0jZW5kaWYgLyogV0hBVEFNSSAqLwotCSAg ICBiaW5hcnkgPSBnbmZfYmluYXJ5OwkvKiBSZXN0b3JlIHByZXZhaWxpbmcgdHJhbnNmZXIgbW9k ZSAqLwotCWRlYnVnKEYxMDEsImduZmlsZSBiaW5hcnkgPSBnbmZfYmluYXJ5IiwiIixnbmZfYmlu YXJ5KTsKLSAgICB9Ci0jZW5kaWYJLyogVk1TICovCi0KLSNpZmRlZiBQSVBFU0VORAotICAgIGRl YnVnKEYxMDEsImduZmlsZSBwaXBlc2VuZCIsIiIscGlwZXNlbmQpOwotICAgIGlmIChwaXBlc2Vu ZCkgewkJCS8qIEZpcnN0IG9uZSAqLwotCWlmIChmaWxjbnQgPT0gMCkgewotCSAgICBja3N0cm5j cHkoZmlsbmFtLGNtYXJnLENLTUFYUEFUSCsxKTsKLQkgICAgcmV0dXJuKDEpOwotCX0gZWxzZSB7 CQkJLyogVGhlcmUncyBvbmx5IG9uZS4uLiAqLwotCSAgICAqZmlsbmFtID0gTlVMOwotCSAgICBw aXBlc2VuZCA9IDA7Ci0JICAgIHJldHVybigwKTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIFBJUEVT RU5EICovCi0KLSNpZmRlZiBDQUxJQlJBVEUKLSAgICBpZiAoc25kc3JjID09IC05KSB7Ci0JZGVi dWcoRjEwMCwiZ25maWxlIGNhbGlicmF0ZSIsIiIsMCk7Ci0JY2tzdHJuY3B5KGZpbG5hbSwiQ0FM SUJSQVRJT04iLENLTUFYUEFUSCk7Ci0JbmZpbHMgPSAwOwotCWNhbF9qID0gMDsKLQlmc2l6ZSA9 IGNhbGlicmF0ZTsKLQlzbmRzcmMgPSAwOwkJCS8qIEZvciBuZXh0IHRpbWUgKi8KLQluZmlscyA9 IDA7Ci0JcmV0dXJuKDEpOwotICAgIH0KLSNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KLQotI2lmbmRl ZiBOT1NQTAotICAgIGlmIChzbmRhcnJheSkgewkJCS8qIFNlbmRpbmcgZnJvbSBhbiBhcnJheSAq LwotCWV4dGVybiBjaGFyIHNuZHhuYW1bXTsJCS8qIFBzZXVkbyBmaWxlbmFtZSAqLwotCWRlYnVn KEYxMDAsImduZmlsZSBhcnJheSIsIiIsMCk7Ci0JbmZpbHMgPSAwOwotCWZzaXplID0gKENLX09G Rl9UKS0xOwkJLyogU2l6ZSB1bmtub3duICovCi0Jc25kc3JjID0gMDsKLQlja3N0cm5jcHkoZmls bmFtLHNuZHhuYW0sQ0tNQVhQQVRIKTsKLQlyZXR1cm4oMSk7Ci0gICAgfQotI2VuZGlmIC8qIE5P U1BMICovCi0KLSAgICBpZiAoc25kc3JjID09IDApIHsJCQkvKiBJdCdzIG5vdCByZWFsbHkgYSBm aWxlICovCi0JaWYgKG5maWxzID4gMCkgewkJLyogSXQncyBhIHBpcGUsIG9yIHN0ZGluICovCi0J ICAgIGNrc3RybmNweShmaWxuYW0sKmNtbGlzdCxDS01BWFBBVEgrMSk7IC8qIENvcHkgaXRzICJu YW1lIiAqLwotCSAgICBuZmlscyA9IDA7CQkJLyogVGhlcmUgaXMgbm8gbmV4dCBmaWxlICovCi0J ICAgIHJldHVybigxKTsJCQkvKiBPSyB0aGlzIHRpbWUgKi8KLQl9IGVsc2UgcmV0dXJuKDApOwkJ LyogYnV0IG5vdCBuZXh0IHRpbWUgKi8KLSAgICB9Ci0KLS8qIElmIGZpbGUgZ3JvdXAgaW50ZXJy dXB0aW9uIChDLVopIG9jY3VycmVkLCBmYWlsLiAgKi8KLQotICAgIGlmIChjenNlZW4pIHsKLQl0 bG9nKEYxMDAsIlRyYW5zYWN0aW9uIGNhbmNlbGxlZCIsIiIsMEwpOwotICAgICAgICBkZWJ1ZyhG MTAwLCJnbmZpbGUgY3pzZWVuIiwiIiwwKTsKLQlyZXR1cm4oLTQpOwotICAgIH0KLQotLyogTG9v cCB0aHJvdWdoIGZpbGUgbGlzdCB0aWxsIHdlIGZpbmQgYSByZWFkYWJsZSwgc2VuZGFibGUgZmls ZSAqLwotCi0gICAgZmlsZXNpemUgPSAoQ0tfT0ZGX1QpLTE7CQkvKiBMb29wIGV4aXQgKGZpbGUg c2l6ZSkgdmFyaWFibGUgKi8KLSAgICB3aGlsZSAoZmlsZXNpemUgPCAwKSB7CQkvKiBLZWVwIHRy eWluZyB0aWxsIHdlIGdldCBvbmUuLi4gKi8KLQlyZXRjb2RlID0gMDsKLQlpZiAoc25kc3JjID4g MCkgewkJLyogRmlsZSBsaXN0IGluIGNtbGlzdCBvciBmaWxlICovCi0JICAgIGlmIChmaWxlZmls ZSkgewkJLyogUmVhZGluZyBsaXN0IGZyb20gZmlsZS4uLiAqLwotCQlpZiAoenNpbmwoWk1GSUxF LGZpbG5hbSxDS01BWFBBVEgpIDwgMCkgeyAvKiBSZWFkIGEgbGluZSAqLwotCQkgICAgemNsb3Nl KFpNRklMRSk7CSAgICAgICAgICAgICAgICAgIC8qIEZhaWxlZCAqLwotCQkgICAgZGVidWcoRjEx MCwiZ25maWxlIGZpbGVmaWxlIEVPRiIsZmlsZWZpbGUsMCk7Ci0JCSAgICBtYWtlc3RyKCZmaWxl ZmlsZSxOVUxMKTsKLQkJICAgIHJldHVybigwKTsKLQkJfQotCQlkZWJ1ZyhGMTEwLCJnbmZpbGUg ZmlsZWZpbGUgZmlsbmFtIixmaWxuYW0sMCk7Ci0JICAgIH0KLQkgICAgZGVidWcoRjEwMSwiZ25m aWxlIG5maWxzIiwiIixuZmlscyk7Ci0JICAgIGlmIChuZmlscy0tID4gMCB8fCBmaWxlZmlsZSkg eyAvKiBTdGlsbCBzb21lIGxlZnQ/ICovCi0jaWZuZGVmIE5PTVNFTkQKLQkJaWYgKGFkZGxpc3Qp IHsKLQkJICAgIGlmIChmaWxlbmV4dCAmJiBmaWxlbmV4dC0+ZmxfbmFtZSkgewotCQkJY2tzdHJu Y3B5KGZpbG5hbSxmaWxlbmV4dC0+ZmxfbmFtZSxDS01BWFBBVEgrMSk7Ci0JCQljbWFyZzIgPQot CQkJICBmaWxlbmV4dC0+ZmxfYWxpYXMgPwotCQkJICAgIGZpbGVuZXh0LT5mbF9hbGlhcyA6Ci0J CQkgICAgICAiIjsKLQkJCWJpbmFyeSA9IGZpbGVuZXh0LT5mbF9tb2RlOwotCQkgICAgfSBlbHNl IHsKLQkJCXByaW50ZigiP0ludGVybmFsIGVycm9yIGV4cGFuZGluZyBBREQgbGlzdFxuIik7Ci0J CQlyZXR1cm4oLTUpOwotCQkgICAgfQotCQkgICAgZmlsZW5leHQgPSBmaWxlbmV4dC0+ZmxfbmV4 dDsKLQkJICAgIGRlYnVnKEYxMTEsImduZmlsZSBhZGRsaXN0IGZpbG5hbSIsZmlsbmFtLG5maWxz KTsKLQkJfSBlbHNlIGlmIChzbmRzcmMgPiAwICYmICFmaWxlZmlsZSkgewotI2VuZGlmIC8qIE5P TVNFTkQgKi8KLQkJICAgIGNrc3RybmNweShmaWxuYW0sKmNtbGlzdCsrLENLTUFYUEFUSCsxKTsK LQkJICAgIGRlYnVnKEYxMTEsImduZmlsZSBjbWxpc3QgZmlsbmFtIixmaWxuYW0sbmZpbHMpOwot I2lmbmRlZiBOT01TRU5ECi0JCX0KLSNlbmRpZiAvKiBOT01TRU5EICovCi0JCWkgPSAwOwotI2lm bmRlZiBOT1NFUlZFUgotCQlkZWJ1ZyhGMTAxLCJnbmZpbGUgbmdldHBhdGgiLCIiLG5nZXRwYXRo KTsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotbmV4dGlucGF0aDoKLSNpZm5kZWYgTk9TRVJWRVIK LQkJZnJvbWdldHBhdGggPSAwOwotCQlpZiAoc2VydmVyICYmICFpc2Fic29sdXRlKGZpbG5hbSkg JiYgKG5nZXRwYXRoID4gaSkpIHsKLQkJICAgIGNrc3RybmNweShmdWxsbmFtZSxnZXRwYXRoW2ld LENLTUFYUEFUSCsxKTsKLQkJICAgIGNrc3RybmNhdChmdWxsbmFtZSxmaWxuYW0sQ0tNQVhQQVRI KTsKLQkJICAgIGRlYnVnKEYxMTEsImduZmlsZSBnZXRwYXRoIixmdWxsbmFtZSxpKTsKLQkJICAg IGZyb21nZXRwYXRoID0gMTsKLQkJICAgIGkrKzsKLQkJfSBlbHNlIHsKLQkJICAgIGkgPSBuZ2V0 cGF0aCArIDE7Ci0jZWxzZQotCQkgICAgaSA9IDE7CQkvKiA/ICovCi0jZW5kaWYgLyogTk9TRVJW RVIgKi8KLQkJICAgIGNrc3RybmNweShmdWxsbmFtZSxmaWxuYW0sQ0tNQVhQQVRIKzEpOwotCQkg ICAgZGVidWcoRjExMCwiZ25maWxlIGFic29sdXRlIixmdWxsbmFtZSwwKTsKLSNpZm5kZWYgTk9T RVJWRVIKLQkJfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0JCWlmIChpc3dpbGQoZnVsbG5hbWUp Ci0jaWZkZWYgUkVDVVJTSVZFCi0JCSAgICB8fCByZWN1cnNpdmUgPiAwIHx8ICFzdHJjbXAoZnVs bG5hbWUsIi4iKQotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotCQkgICAgKSB7CS8qIEl0IGxvb2tz IHdpbGQuLi4gKi8KLQkJICAgIC8qIEZpcnN0IGNoZWNrIGlmIGEgZmlsZSB3aXRoIHRoaXMgbmFt ZSBleGlzdHMgKi8KLQkJICAgIGRlYnVnKEYxMTAsImduZmlsZSB3aWxkIixmdWxsbmFtZSwwKTsK LQkJICAgIGlmICh6Y2hraShmdWxsbmFtZSkgPj0gMCkgewotCQkJLyoKLQkJCSAgIEhlcmUgd2Ug aGF2ZSBhIGZpbGUgd2hvc2UgbmFtZSBhY3R1YWxseQotCQkJICAgY29udGFpbnMgd2lsZGNhcmQg Y2hhcmFjdGVycy4KLQkJCSovCi0JCQlnb3RvIGdvdG5hbTsKLQkJICAgIH0KLSNpZmRlZiBDT01N RU5UCi0JCSAgICBuenhvcHRzID0gWlhfRklMT05MWTsgLyogKHdhcyAwOiAyNSBKdWwgMjAwMSBm ZGMpICovCi0jZWxzZQotCQkgICAgbnp4b3B0cyA9IHJlY3Vyc2l2ZSA/IDAgOiBaWF9GSUxPTkxZ OyAvKiAzMCBKdWwgMjAwMSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJICAgIGlmIChub2xp bmtzKSBuenhvcHRzIHw9IFpYX05PTElOS1M7CS8qICgyNiBKdWwgMjAwMSBmZGMpICovCi0jaWZk ZWYgVU5JWE9ST1NLCi0JCSAgICBpZiAobWF0Y2hkb3QpIG56eG9wdHMgfD0gWlhfTUFUQ0hET1Q7 Ci0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0JCSAgICBpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9 IFpYX1JFQ1VSU0U7Ci0JCSAgICB4ID0gbnp4cGFuZChmdWxsbmFtZSxuenhvcHRzKTsgLyogRXhw YW5kIHdpbGRjYXJkcyAqLwotCQkgICAgZGVidWcoRjEwMSwiZ25maWxlIG56eHBhbmQiLCIiLHgp OwotCQkgICAgaWYgKHggPT0gMSkgewotCQkJaW50IHh4OwotCQkJeHggPSB6bmV4dChmdWxsbmFt ZSk7Ci0JCQlkZWJ1ZyhGMTExLCJnbmZpbGUgem5leHQgQSIsZnVsbG5hbWUseHgpOwotCQkJZ290 byBnb3RuYW07Ci0JCSAgICB9Ci0JCSAgICBpZiAoeCA9PSAwKSB7CS8qIE5vbmUgbWF0Y2ggKi8K LSNpZm5kZWYgTk9TRVJWRVIKLQkJCWlmIChzZXJ2ZXIgJiYgbmdldHBhdGggPiBpKQotCQkJICBn b3RvIG5leHRpbnBhdGg7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQkJCXJldGNvZGUgPSAtMTsK LQkJCWRlYnVnKEYxMDEsImduZmlsZSBnbmZlcnJvciBBIiwiIixnbmZlcnJvcik7Ci0JCQlnbmZl cnJvciA9IC0xOwotCQkJY29udGludWU7Ci0JCSAgICB9Ci0JCSAgICBpZiAoeCA8IDApIHsJLyog VG9vIG1hbnkgdG8gZXhwYW5kICovCi0JCQlkZWJ1ZyhGMTAxLCJnbmZpbGUgZ25mZXJyb3IgQiIs IiIsZ25mZXJyb3IpOwotCQkJZ25mZXJyb3IgPSAtNTsKLQkJCXJldHVybigtNSk7Ci0JCSAgICB9 Ci0JCSAgICBzbmRzcmMgPSAtMTsJLyogQ2hhbmdlIHNlbmQtc291cmNlIHRvIHpuZXh0KCkgKi8K LQkJfQotCSAgICB9IGVsc2UgewkJCS8qIFdlJ3JlIG91dCBvZiBmaWxlcy4gKi8KLQkJZGVidWco RjExMSwiZ25maWxlIGRvbmUiLGNraXRvYShnbmZlcnJvciksbmZpbHMpOwotCQkqZmlsbmFtID0g J1wwJzsKLQkJcmV0dXJuKDApOwotCSAgICB9Ci0JfQotCi0vKiBPdGhlcndpc2UsIHN0ZXAgdG8g bmV4dCBlbGVtZW50IG9mIGludGVybmFsIHdpbGRjYXJkIGV4cGFuc2lvbiBsaXN0LiAqLwotCi0J aWYgKHNuZHNyYyA9PSAtMSkgewotCSAgICBpbnQgeHggPSAwOwotCSAgICB3aGlsZSAoMSkgewot CQlkZWJ1ZyhGMTExLCJnbmZpbGUgem5leHQgWCIsZmlsbmFtLHh4KTsKLQkJeHggPSB6bmV4dChm aWxuYW0pOwotCQlkZWJ1ZyhGMTExLCJnbmZpbGUgem5leHQgQiIsZmlsbmFtLHh4KTsKLQkJaWYg KCFmaWxuYW1bMF0pCi0JCSAgYnJlYWs7Ci0JCWlmIChkb2RpcnN0b28pIHsKLQkJICAgIGRlYnVn KEYxMTEsImduZmlsZSBGVFAgTVBVVCAvUkVDVVJTSVZFIixmaWxuYW0seHgpOwotCQkgICAgYnJl YWs7Ci0JCX0KLQkJaWYgKCFpc2RpcihmaWxuYW0pKQotCQkgIGJyZWFrOwotCSAgICB9Ci0JICAg IGRlYnVnKEYxMTEsImduZmlsZSB6bmV4dCBDIixmaWxuYW0seCk7Ci0JICAgIGlmICghZmlsbmFt WzBdKSB7CQkvKiBJZiBubyBtb3JlLCAqLwotCQlzbmRzcmMgPSAxOwkJLyogZ28gYmFjayB0byBw cmV2aW91cyBsaXN0ICovCi0JCWRlYnVnKEYxMDEsImduZmlsZSBzZXR0aW5nIHNuZHNyYyBiYWNr IiwiIixzbmRzcmMpOwotCQljb250aW51ZTsKLQkgICAgfSBlbHNlCi0JICAgICAgY2tzdHJuY3B5 KGZ1bGxuYW1lLGZpbG5hbSxDS01BWFBBVEgrMSk7Ci0JfQotCi0vKiBHZXQgaGVyZSB3aXRoIGEg ZmlsZW5hbWUuICovCi0KLWdvdG5hbToKLQlkZWJ1ZyhGMTEwLCJnbmZpbGUgZnVsbG5hbWUiLGZ1 bGxuYW1lLDApOwotCWlmIChmdWxsbmFtZVswXSkgewotI2lmZGVmIERUSUxERQotCSAgICBjaGFy ICogZGlycCA9ICIiOwotCSAgICBpZiAoZnVsbG5hbWVbMF0gPT0gJ34nKSB7Ci0JCWRpcnAgPSB0 aWxkZV9leHBhbmQoKGNoYXIgKilmdWxsbmFtZSk7Ci0JCWlmICgqZGlycCkgY2tzdHJuY3B5KGZ1 bGxuYW1lLGRpcnAsQ0tNQVhQQVRIKzEpOwotCSAgICB9Ci0jZW5kaWYgLyogRFRJTERFICovCi0J ICAgIGZpbGVzaXplID0gemNoa2koZnVsbG5hbWUpOwkvKiBDaGVjayBpZiBmaWxlIHJlYWRhYmxl ICovCi0JICAgIGRlYnVnKEYxMTEsImduZmlsZSB6Y2hraSIsZnVsbG5hbWUsZmlsZXNpemUpOwot CSAgICByZXRjb2RlID0gZmlsZXNpemU7CQkvKiBQb3NzaWJsZSByZXR1cm4gY29kZSAqLwotCSAg ICBpZiAoZmlsZXNpemUgPT0gKENLX09GRl9UKS0yICYmIGRvZGlyc3RvbykgewotCQlmaWxlc2l6 ZSA9IDA7Ci0JICAgIH0KLQkgICAgaWYgKGZpbGVzaXplIDwgMCkgewotCQlnbmZlcnJvciA9IChp bnQpZmlsZXNpemU7Ci0JCWRlYnVnKEYxMDEsImduZmlsZSBnbmZlcnJvciBDIiwiIixnbmZlcnJv cik7Ci0JICAgIH0KLQkgICAgaWYgKGZpbGVzaXplID09IChDS19PRkZfVCktMSkgeyAvKiBJZiBu b3QgZm91bmQgKi8KLQkJZGVidWcoRjEwMCwiZ25maWxlIC0xIiwiIiwwKTsKLSNpZm5kZWYgTk9T RVJWRVIKLQkJaWYgKHNlcnZlciAmJiBuZ2V0cGF0aCA+IGkpCi0JCSAgZ290byBuZXh0aW5wYXRo OwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0JCWRlYnVnKEYxMTAsImduZmlsZSBza2lwcGluZzoi LGZ1bGxuYW1lLDApOwotCQl0bG9nKEYxMTAsZnVsbG5hbWUsIjogb3BlbiBmYWlsdXJlIC0gc2tp cHBlZCIsMCk7Ci0JCXh4c2NyZWVuKFNDUl9GTiwwLDBsLGZ1bGxuYW1lKTsKLQkJeHhzY3JlZW4o U0NSX1NULFNUX1NLSVAsU0tQX0FDQyxmdWxsbmFtZSk7Ci0jaWZkZWYgVExPRwotCQlpZiAodHJh bG9nICYmICF0bG9nZm10KQotCQkgIGRveGxvZyh3aGF0LGZ1bGxuYW1lLGZzaXplLGJpbmFyeSwx LCJTa2lwcGVkIik7Ci0jZW5kaWYgLyogVExPRyAqLwotCQljb250aW51ZTsKLQkgICAgfSBlbHNl IGlmIChmaWxlc2l6ZSA8IDApIHsKLQkJaWYgKGZpbGVzaXplID09IChDS19PRkZfVCktMykgeyAv KiBFeGlzdHMgYnV0IG5vdCByZWFkYWJsZSAqLwotCQkgICAgZGVidWcoRjEwMCwiZ25maWxlIC0z IiwiIiwwKTsKLQkJICAgIGZpbHJlaisrOwkJLyogQ291bnQgdGhpcyBvbmUgYXMgbm90IHNlbnQg Ki8KLQkJICAgIHRsb2coRjExMCwiUmVhZCBhY2Nlc3MgZGVuaWVkIixmdWxsbmFtZSwwKTsgLyog TG9nIHRoaXMgKi8KLQkJICAgIHh4c2NyZWVuKFNDUl9GTiwwLDBsLGZ1bGxuYW1lKTsKLQkJICAg IHh4c2NyZWVuKFNDUl9TVCxTVF9TS0lQLFNLUF9BQ0MsZnVsbG5hbWUpOyAvKiBEaXNwbGF5IGl0 ICovCi0jaWZkZWYgVExPRwotCQkgICAgaWYgKHRyYWxvZyAmJiAhdGxvZ2ZtdCkKLQkJICAgICAg ZG94bG9nKHdoYXQsZnVsbG5hbWUsZnNpemUsYmluYXJ5LDEsIlNraXBwZWQiKTsKLSNlbmRpZiAv KiBUTE9HICovCi0JCX0KLQkJY29udGludWU7Ci0JICAgIH0gZWxzZSB7Ci0JCWludCB4eDsKLQkJ ZnNpemUgPSBmaWxlc2l6ZTsKLS8qICsrKyAqLwotICAgIGRlYnVnKEYxMTEsImduZmlsZSBzbmRz bWFsbGVyIixja2ZzdG9hKHNuZHNtYWxsZXIpLHNuZHNtYWxsZXIpOwotICAgIGRlYnVnKEYxMTEs ImduZmlsZSBzbmRsYXJnZXIiLGNrZnN0b2Eoc25kbGFyZ2VyKSxzbmRsYXJnZXIpOwotICAgIGRl YnVnKEYxMTEsImduZmlsZSAoQ0tfT0ZGX1QpLTEiLGNrZnN0b2EoKENLX09GRl9UKS0xKSwoQ0tf T0ZGX1QpLTEpOwotCi0JCXh4ID0gZmlsZXNlbGVjdChmdWxsbmFtZSwKLQkJCQlzbmRhZnRlciwg c25kYmVmb3JlLAotCQkJCXNuZG5hZnRlcixzbmRuYmVmb3JlLAotCQkJCXNuZHNtYWxsZXIsc25k bGFyZ2VyLAotCQkJCXNraXBidXAsCi0JCQkJTlNOREVYQ0VQVCxzbmRleGNlcHQpOwotCQlkZWJ1 ZyhGMTExLCJnbmZpbGUgZmlsZXNlbGVjdCIsZnVsbG5hbWUseHgpOwotCQlpZiAoIXh4KSB7Ci0J CSAgICBmaWxlc2l6ZSA9IChDS19PRkZfVCktMTsKLQkJICAgIGduZmVycm9yID0gLTY7Ci0JCSAg ICBkZWJ1ZyhGMTAxLCJnbmZpbGUgZ25mZXJyb3IgRCIsIiIsZ25mZXJyb3IpOwotCQkgICAgY29u dGludWU7Ci0JCX0KLQkJY2tzdHJuY3B5KGZpbG5hbSxmdWxsbmFtZSxDS01BWFBBVEgrMSk7Ci0J CXJldHVybigxKTsKLQkgICAgfQotI2lmZGVmIENPTU1FTlQKLQkvKiBUaGlzIGNhbid0IGJlIHJp Z2h0ISAqLwotCX0gZWxzZSB7CQkJLyogc25kc3JjIGlzIDAuLi4gKi8KLQkgICAgaWYgKCFmaWxl c2VsZWN0KGZ1bGxuYW1lLAotCQkJICAgIHNuZGFmdGVyLCBzbmRiZWZvcmUsCi0JCQkgICAgc25k bmFmdGVyLHNuZG5iZWZvcmUsCi0JCQkgICAgc25kc21hbGxlcixzbmRsYXJnZXIsCi0JCQkgICAg c2tpcGJ1cCwKLQkJCSAgICBOU05ERVhDRVBULHNuZGV4Y2VwdCkpIHsKLQkJZ25mZXJyb3IgPSAt NjsKLQkJZGVidWcoRjExMSwiZ25maWxlIGZpbGVzZWxlY3QiLGZ1bGxuYW1lLGduZmVycm9yKTsK LQkJZmlsZXNpemUgPSAoQ0tfT0ZGX1QpLTE7Ci0JCWNvbnRpbnVlOwotCSAgICB9Ci0JICAgIGNr c3RybmNweShmaWxuYW0sZnVsbG5hbWUsQ0tNQVhQQVRIKzEpOwotCSAgICByZXR1cm4oMSk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiZ25maWxlIHJl c3VsdCIsIiIscmV0Y29kZSk7Ci0gICAgKmZpbG5hbSA9ICdcMCc7Ci0gICAgcmV0dXJuKDApOwot fQotCi0vKgotICBUaGUgZm9sbG93aW5nIGJ1bmNoIG9mIHJvdXRpbmVzIGZlZWQgaW50ZXJuYWxs eSBnZW5lcmF0ZWQgZGF0YSB0byB0aGUgc2VydmVyCi0gIHRvIHNlbmQgdG8gdGhlIGNsaWVudCBp biByZXNwb25zZSB0byBSRU1PVEUgY29tbWFuZHMgbGlrZSBESVJFQ1RPUlksIERFTEVURSwKLSAg YW5kIHNvIG9uLiAgV2UgaGF2ZSB0byB3cml0ZSB0aGVzZSBsaW5lcyBpbiB0aGUgZm9ybWF0IGFw cHJvcHJpYXRlIHRvIG91cgotICBwbGF0Zm9ybSwgc28gdGhleSBjYW4gYmUgY29udmVydGVkIHRv IGdlbmVyaWMgKENSTEYpIHRleHQgZm9ybWF0IGJ5IHRoZQotICBwYWNrZXRpemVyLgotKi8KLSNp ZmRlZiBVTklYCi1jaGFyICogZW5kbGluZSA9ICJcMTIiOwotI2Vsc2UKLSNpZmRlZiBkYXRhZ2Vu ZXJhbAotY2hhciAqIGVuZGxpbmUgPSAiXDEyIjsKLSNlbHNlCi0jaWZkZWYgTUFDCi1jaGFyICog ZW5kbGluZSA9ICJcMTUiOwotI2Vsc2UKLSNpZmRlZiBPU0sKLWNoYXIgKiBlbmRsaW5lID0gIlwx NSI7Ci0jZWxzZQotY2hhciAqIGVuZGxpbmUgPSAiXDE1XDEyIjsKLSNlbmRpZiAvKiBPU0sgKi8K LSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFVO SVggKi8KLQotI2lmZGVmIE1BQwotI2RlZmluZSBGTkNCVUZMIDI1NgotI2Vsc2UKLSNpZmRlZiBD S1NZTUxJTksKLSNkZWZpbmUgRk5DQlVGTCAoQ0tNQVhQQVRIICsgQ0tNQVhQQVRIICsgNjQpCi0j ZWxzZQotI2RlZmluZSBGTkNCVUZMIChDS01BWFBBVEggKyA2NCkKLSNlbmRpZiAvKiBDS1NZTUxJ TksgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQotLyogTkI6IFRoZSBtaW5pbXVtIEZOQ0JVRkwgaXMg MjU1ICovCi0KLXN0YXRpYyBDSEFSIGZ1bmNidWZbRk5DQlVGTF07Ci1zdGF0aWMgaW50ICBmdW5j bnh0ID0gIDA7Ci1zdGF0aWMgaW50ICBmdW5jbGVuID0gIDA7Ci1zdGF0aWMgaW50ICBueHBuZCAg ID0gLTE7Ci1zdGF0aWMgbG9uZyBuZGlycyAgID0gIDA7Ci1zdGF0aWMgbG9uZyBuZmlsZXMgID0g IDA7Ci1zdGF0aWMgQ0tfT0ZGX1QgbmJ5dGVzICA9ICAwOwotCi1pbnQKLXNuZHN0cmluZyhwKSBj aGFyICogcDsgewotI2lmbmRlZiBOT1NFUlZFUgotICAgIG5maWxzID0gMDsJCQkJLyogTm8gZmls ZXMsIG5vIGxpc3RzLiAqLwotICAgIHhmbGcgPSAxOwkJCQkvKiBGbGFnIHdlIG11c3Qgc2VuZCBY IHBhY2tldC4gKi8KLSAgICBja3N0cm5jcHkoY21kc3RyLHZlcnNpbyxDTURTVFJMKTsJLyogRGF0 YSBmb3IgWCBwYWNrZXQuICovCi0gICAgZmlyc3QgPSAxOwkJCQkvKiBJbml0IGdldGNoeCBsb29r YWhlYWQgKi8KLSAgICBtZW1zdHIgPSAxOwkJCQkvKiBKdXN0IHNldCB0aGUgZmxhZy4gKi8KLSAg ICBtZW1wdHIgPSBwOwkJCQkvKiBBbmQgdGhlIHBvaW50ZXIuICovCi0gICAgYmluYXJ5ID0gWFlG VF9UOwkJCS8qIFRleHQgbW9kZSBmb3IgdGhpcy4gKi8KLSAgICByZXR1cm4oc2luaXQoKSk7Ci0j ZWxzZQotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotCi0vKiAgUyBO IEQgSCBMIFAgIC0tICBSb3V0aW5lIHRvIHNlbmQgYnVpbHRpbiBoZWxwICAqLwotCi1zdGF0aWMg aW50IHNydmhscG51bSA9IDA7Ci0KLSNpZmRlZiBJS1NECi1zdGF0aWMgY2hhciAqbm14W10gPSAg eyAiRGlzYWJsZWQiLCAiRGlzYWJsZWQiLCAiRW5hYmxlZCIsICJFbmFibGVkIiB9OwotI2VuZGlm IC8qIElLU0QgKi8KLQotc3RhdGljIGNoYXIgKgoteG5tKHgpIGludCB4OyB7Ci0jaWZkZWYgSUtT RAotICAgIGlmIChpbnNlcnZlcikKLSAgICAgIHJldHVybihubXhbeF0pOwotICAgIGVsc2UKLSNl bmRpZiAvKiBJS1NEICovCi0gICAgICByZXR1cm4obm1beF0pOwotfQotCi1zdGF0aWMgaW50Ci1u eHRobHAoCi0jaWZkZWYgQ0tfQU5TSUMKLSAgICAgICB2b2lkCi0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLSAgICAgICApIHsKLSAgICBpbnQgeCA9IDA7Ci0gICAgZXh0ZXJuIGludAotICAgICAgZW5f Y3B5LCBlbl9jd2QsIGVuX2RlbCwgZW5fZGlyLCBlbl9maW4sIGVuX2dldCwgZW5fYnllLCBlbl9t YWksCi0gICAgICBlbl9wcmksIGVuX2hvcywgZW5fcmVuLCBlbl9zZW4sIGVuX3NwYSwgZW5fc2V0 LCBlbl90eXAsIGVuX3dobywKLSAgICAgIC8qIGVuX3JldCwgKi8gZW5fbWtkLCBlbl9ybWQsIGVu X2FzZywgZW5fcXVlLCBlbl94aXQsIHhfbG9naW4sIHhfbG9nZ2VkLAotICAgICAgeGZpbmlzaDsK LSAgICBleHRlcm4gY2hhciAqIGNreHN5czsKLQotICAgIGlmIChmdW5jbnh0IDwgZnVuY2xlbikK LSAgICAgIHJldHVybiAoZnVuY2J1ZltmdW5jbnh0KytdKTsKLQotICAgIHN3aXRjaCAoc3J2aGxw bnVtKyspIHsKLSAgICAgIGNhc2UgMDoKLQl4ID0gY2tzdHJuY3B5KChjaGFyICopZnVuY2J1ZiwK LQkJICAgICAgIkNsaWVudCBDb21tYW5kICAgICBTdGF0dXMgICAgICAgIERlc2NyaXB0aW9uXG4i LAotCQkgICAgICBGTkNCVUZMCi0JCSAgICAgICk7Ci0JaWYgKHhfbG9naW4gJiYgIXhfbG9nZ2Vk KSB7Ci0JICAgIHggKz0gY2tzdHJuY2F0KChjaGFyICopZnVuY2J1ZiwKLQkJCSAgICIgUkVNT1RF IExPR0lOICAgICAgIHJlcXVpcmVkXG4iLAotCQkJICAgRk5DQlVGTAotCQkJICAgKTsKLQl9Ci0J aWYgKEZOQ0JVRkwgLSB4ID4gNzQpCi0Jc3ByaW50ZigoY2hhciAqKShmdW5jYnVmK3gpLCIgR0VU ICAgICAgICAgICAgICAgICUtMTRzJXNcbiIsCi0JCXhubShlbl9nZXQpLAotCQkiVHJhbnNmZXIg ZmlsZShzKSBmcm9tIHNlcnZlciB0byBjbGllbnQuIgotCQkpOwotCWJyZWFrOwotCi0vKiBOT1RF OiBUaGUgbWluaW11bSBmdW5jYnVmW10gc2l6ZSBpcyAyNTU7IGFsbCBvZiB0aGUgZm9sbG93aW5n IGFyZSBzYWZlLiAqLwotCi0gICAgICBjYXNlIDE6Ci0Jc3ByaW50ZigoY2hhciAqKWZ1bmNidWYs IiBTRU5EICAgICAgICAgICAgICAgJS0xNHMlc1xuIiwKLQkJeG5tKGVuX3NlbiksCi0JCSJUcmFu c2ZlciBmaWxlKHMpIGZyb20gY2xpZW50IHRvIHNlcnZlci4iCi0JCSk7Ci0JYnJlYWs7Ci0KLSAg ICAgIGNhc2UgMjoKLQlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIE1BSUwgICAgICAgICAgICAg ICAlLTE0cyVzXG4iLAotCQl4bm0oaW5zZXJ2ZXIgPyAwIDogZW5fbWFpKSwKLQkJIlNlbmQgZmls ZShzKSBhcyBlLW1haWwuIgotCQkpOwotCWJyZWFrOwotCi0gICAgICBjYXNlIDM6Ci0jaWZuZGVm IE5PU1BMCi0Jc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBSRU1PVEUgQVNTSUdOICAgICAgJS0x NHMlc1xuIiwKLQkJeG5tKGVuX2FzZyksCi0JCSJBc3NpZ24gdmFsdWUgdG8gc2VydmVyIHZhcmlh YmxlIG9yIG1hY3JvLiIKLQkJKTsKLSNlbHNlCi0Jc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBS RU1PVEUgQVNTSUdOICAgICAgbm90IGNvbmZpZ3VyZWRcbiIpOwotI2VuZGlmIC8qIE5PU1BMICov Ci0KLQlicmVhazsKLSAgICAgIGNhc2UgNDoKLQlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJF TU9URSBDRCAgICAgICAgICAlLTE0cyVzXG4iLAotCQl4bm0oZW5fY3dkKSwKLQkJIkNoYW5nZSBz ZXJ2ZXIncyBkaXJlY3RvcnkuIgotCQkpOwotCWJyZWFrOwotCi0gICAgICBjYXNlIDU6Ci0jaWZk ZWYgWkNPUFkKLQlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJFTU9URSBDT1BZICAgICAgICAl LTE0cyVzXG4iLAotCQl4bm0oZW5fY3B5KSwKLQkJIkNvcHkgYSBmaWxlIG9uIHRoZSBzZXJ2ZXIu IgotCQkpOwotI2Vsc2UKLQlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJFTU9URSBDT1BZICAg ICAgICBub3QgY29uZmlndXJlZFxuIik7Ci0jZW5kaWYgLyogWkNPUFkgKi8KLQotCWJyZWFrOwot ICAgICAgY2FzZSA2OgotCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgUkVNT1RFIERFTEVURSAg ICAgICUtMTRzJXNcbiIsCi0JCXhubShlbl9kZWwpLAotCQkiRGVsZXRlIGEgZmlsZSBvbiB0aGUg c2VydmVyLiIKLQkJKTsKLQlicmVhazsKLQotICAgICAgY2FzZSA3OgotCXNwcmludGYoKGNoYXIg KilmdW5jYnVmLCIgUkVNT1RFIERJUkVDVE9SWSAgICUtMTRzJXNcbiIsCi0JCXhubShlbl9kaXIp LAotCQkiTGlzdCBmaWxlcyBvbiB0aGUgc2VydmVyLiIKLQkJKTsKLQlicmVhazsKLQotICAgICAg Y2FzZSA4OgotCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgUkVNT1RFIEVYSVQgICAgICAgICUt MTRzJXNcbiIsCi0JCXhubShlbl94aXQpLAotCQkiRXhpdCBmcm9tIEtlcm1pdCBzZXJ2ZXIgcHJv Z3JhbS4iCi0JCSk7Ci0JYnJlYWs7Ci0KLSAgICAgIGNhc2UgOToKLQlzcHJpbnRmKChjaGFyICop ZnVuY2J1ZiwiIFJFTU9URSBIT1NUICAgICAgICAlLTE0cyVzXG4iLAotCQl4bm0oaW5zZXJ2ZXIg PyAwIDogZW5faG9zKSwKLSNpZmRlZiBkYXRhZ2VuZXJhbAotCQkiRXhlY3V0ZSBhIENMSSBjb21t YW5kIG9uIHRoZSBzZXJ2ZXIuIgotI2Vsc2UKLSNpZmRlZiBWTVMKLQkJIkV4ZWN1dGUgYSBEQ0wg Y29tbWFuZCBvbiB0aGUgc2VydmVyLiIKLSNlbHNlCi0JCSJFeGVjdXRlIGEgc2hlbGwgY29tbWFu ZCBvbiB0aGUgc2VydmVyLiIKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLwotCQkpOwotCWJyZWFrOwotCi0gICAgICBjYXNlIDEwOgotCXNwcmludGYoKGNoYXIgKilm dW5jYnVmLCIgUkVNT1RFIFBSSU5UICAgICAgICUtMTRzJXNcbiIsCi0JCXhubShpbnNlcnZlciA/ IDAgOiBlbl9wcmkpLAotCQkiU2VuZCBhIGZpbGUgdG8gdGhlIHNlcnZlciBmb3IgcHJpbnRpbmcu IgotCQkpOwotCWJyZWFrOwotCi0gICAgICBjYXNlIDExOgotI2lmbmRlZiBOT1NQTAotCXNwcmlu dGYoKGNoYXIgKilmdW5jYnVmLCIgUkVNT1RFIFFVRVJZICAgICAgICUtMTRzJXNcbiIsCi0JCXhu bShlbl9xdWUpLAotCQkiR2V0IHZhbHVlIG9mIHNlcnZlciB2YXJpYWJsZSBvciBtYWNyby4iCi0J CSk7Ci0KLSNlbHNlCi0Jc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBSRU1PVEUgUVVFUlkgICAg ICAgbm90IGNvbmZpZ3VyZWRcbiIpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLQlicmVhazsKLSAg ICAgIGNhc2UgMTI6Ci0Jc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBSRU1PVEUgTUtESVIgICAg ICAgJS0xNHMlc1xuIiwKLQkJeG5tKGVuX21rZCksCi0JCSJDcmVhdGUgYSBkaXJlY3Rvcnkgb24g dGhlIHNlcnZlci4iCi0JCSk7Ci0JYnJlYWs7Ci0KLSAgICAgIGNhc2UgMTM6Ci0Jc3ByaW50Zigo Y2hhciAqKWZ1bmNidWYsIiBSRU1PVEUgUk1ESVIgICAgICAgJS0xNHMlc1xuIiwKLQkJeG5tKGVu X3JtZCksCi0JCSJSZW1vdmUgYSBkaXJlY3Rvcnkgb24gdGhlIHNlcnZlci4iCi0JCSk7Ci0JYnJl YWs7Ci0KLSAgICAgIGNhc2UgMTQ6Ci0Jc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBSRU1PVEUg UkVOQU1FICAgICAgJS0xNHMlc1xuIiwKLQkJeG5tKGVuX3JlbiksCi0JCSJSZW5hbWUgYSBmaWxl IG9uIHRoZSBzZXJ2ZXIuIgotCQkpOwotCWJyZWFrOwotCi0gICAgICBjYXNlIDE1OgotCXNwcmlu dGYoKGNoYXIgKilmdW5jYnVmLCIgUkVNT1RFIFNFVCAgICAgICAgICUtMTRzJXNcbiIsCi0JCXhu bShlbl9zZXQpLAotCQkiU2V0IGEgcGFyYW1ldGVyIG9uIHRoZSBzZXJ2ZXIiCi0JCSk7Ci0JYnJl YWs7Ci0KLSAgICAgIGNhc2UgMTY6Ci0Jc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBSRU1PVEUg U1BBQ0UgICAgICAgJS0xNHMlc1xuIiwKLQkJeG5tKGVuX3NwYSksCi0JCSJJbnF1aXJlIGFib3V0 IGRpc2sgc3BhY2Ugb24gdGhlIHNlcnZlci4iCi0JCSk7Ci0JYnJlYWs7Ci0KLSAgICAgIGNhc2Ug MTc6Ci0Jc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBSRU1PVEUgVFlQRSAgICAgICAgJS0xNHMl c1xuIiwKLQkJeG5tKGVuX3R5cCksCi0JCSJEaXNwbGF5IGEgc2VydmVyIGZpbGUgb24geW91ciBz Y3JlZW4uIgotCQkpOwotCWJyZWFrOwotCi0gICAgICBjYXNlIDE4OgotCXNwcmludGYoKGNoYXIg KilmdW5jYnVmLCIgUkVNT1RFIFdITyAgICAgICAgICUtMTRzJXNcbiIsCi0JCXhubShpbnNlcnZl ciA/IDAgOiBlbl93aG8pLAotCQkiTGlzdCB3aG8gaXMgbG9nZ2VkIGluIHRvIHRoZSBzZXJ2ZXIu IgotCQkpOwotCWJyZWFrOwotCi0gICAgICBjYXNlIDE5OgotCXNwcmludGYoKGNoYXIgKilmdW5j YnVmLCIgRklOSVNIICAgICAgICAgICAgICUtMTRzJXNcbiIsCi0JCXhubShlbl9maW4pLAotCQl4 ZmluaXNoID8KLQkJIkV4aXQgZnJvbSBLZXJtaXQgc2VydmVyIHByb2dyYW0uIiA6Ci0JCSJSZXR1 cm4gdGhlIHNlcnZlciB0byBpdHMgY29tbWFuZCBwcm9tcHQuIgotCQkpOwotCWJyZWFrOwotCi0g ICAgICBjYXNlIDIwOgotCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgQllFICAgICAgICAgICAg ICAgICUtMTRzJXNcblxuIiwKLQkJeG5tKGVuX2J5ZSksCi0JCSJMb2cgdGhlIHNlcnZlciBvdXQg YW5kIGRpc2Nvbm5lY3QuIgotCQkpOwotCWJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotCXJldHVy bigtMSk7Ci0gICAgfQotICAgIGZ1bmNueHQgPSAwOwotICAgIGZ1bmNsZW4gPSBzdHJsZW4oKGNo YXIgKilmdW5jYnVmKTsKLSAgICByZXR1cm4oZnVuY2J1ZltmdW5jbnh0KytdKTsKLX0KLQotaW50 Ci1zbmRobHAoKSB7Ci0jaWZuZGVmIE5PU0VSVkVSCi0gICAgZXh0ZXJuIGNoYXIgKiBja3hzeXM7 Ci0KLSAgICBmaXJzdCA9IDE7CQkJCS8qIEluaXQgZ2V0Y2h4IGxvb2thaGVhZCAqLwotICAgIG5m aWxzID0gMDsJCQkJLyogTm8gZmlsZXMsIG5vIGxpc3RzLiAqLwotICAgIHhmbGcgPSAxOwkJCQkv KiBGbGFnIHdlIG11c3Qgc2VuZCBYIHBhY2tldC4gKi8KLSAgICBja3N0cm5jcHkoY21kc3RyLCJS RU1PVEUgSEVMUCIsQ01EU1RSTCk7IC8qIERhdGEgZm9yIFggcGFja2V0LiAqLwotICAgIHNwcmlu dGYoKGNoYXIgKilmdW5jYnVmLCAiQy1LZXJtaXQgJXMsJXNcblxuIiwgdmVyc2lvLCBja3hzeXMp OwotICAgIGZ1bmNsZW4gPSBzdHJsZW4oKGNoYXIgKilmdW5jYnVmKTsKLSNpZmRlZiBJS1NECi0g ICAgaWYgKGluc2VydmVyKSB7Ci0Jc3ByaW50ZigoY2hhciAqKShmdW5jYnVmK2Z1bmNsZW4pLAot CQkiSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgKEVYUEVSSU1FTlRBTClcblxuIik7Ci0JZnVuY2xl biA9IHN0cmxlbigoY2hhciAqKWZ1bmNidWYpOwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0g ICAgZnVuY254dCA9IDA7Ci0gICAgZnVuY3B0ciA9IG54dGhscDsKLSAgICBmdW5jc3RyID0gMTsK LSAgICBzcnZobHBudW0gPSAwOwotICAgIGJpbmFyeSA9IFhZRlRfVDsJCQkvKiBUZXh0IG1vZGUg Zm9yIHRoaXMuICovCi0gICAgcmV0dXJuKHNpbml0KCkpOwotI2Vsc2UKLSAgICByZXR1cm4oMCk7 Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLQotLyoKLSAgIFJldHVybnMgdGhlIG5leHQgYXZh aWxhYmxlIGNoYXJhY3RlciwKLSAgLTEgaWYgbm8gbW9yZSBkYXRhLgotKi8KLXN0YXRpYyBpbnQK LW54dHR5cGUoCi0jaWZkZWYgQ0tfQU5TSUMKLSAgICAgICB2b2lkCi0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLQkpIHsKLSAgICBpbnQgYzsKLSAgICBpZiAoemNoaW4oWklGSUxFLCZjKSA8IDApIHsK LSAgICAgICAgemNsb3NlKFpJRklMRSk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfSBlbHNl IHsKLQlyZXR1cm4oKHVuc2lnbmVkKWMpOwotICAgIH0KLX0KLQotLyogIFMgTiBEIFQgWSBQIC0t IFRZUEUgYSBmaWxlIHRvIHJlbW90ZSBjbGllbnQgKi8KLQotaW50Ci1zbmR0eXBlKGZpbGUpIGNo YXIgKiBmaWxlOyB7Ci0jaWZuZGVmIE5PU0VSVkVSCi0gICAgY2hhciBuYW1lW0NLTUFYUEFUSCsx XTsKLQotI2lmZGVmIE9TMgotICAgIGNoYXIgKiBwID0gTlVMTDsKLQotICAgIGlmICgqZmlsZSkg ewotICAgICAgICBja3N0cm5jcHkobmFtZSwgZmlsZSwgQ0tNQVhQQVRIKzEpOwotICAgICAgICAv KiBjaGFuZ2UgLyB0byBcLiAqLwotICAgICAgICBwID0gbmFtZTsKLSAgICAgICAgd2hpbGUgKCpw KSB7CQkJLyogQ2hhbmdlIHRoZW0gYmFjayB0byBcICovCi0gICAgICAgICAgICBpZiAoKnAgPT0g Jy8nKSAqcCA9ICdcXCc7Ci0gICAgICAgICAgICBwKys7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UK LSAgICAgIHJldHVybigwKTsKLSNlbHNlCi0gICAgY2tzdHJuY3B5KG5hbWUsIGZpbGUsIENLTUFY UEFUSCsxKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGZ1bmNueHQgPSAwOwotICAgIGZ1bmNs ZW4gPSBzdHJsZW4oKGNoYXIgKilmdW5jYnVmKTsKLSAgICBpZiAoemNoa2kobmFtZSkgPT0gLTIp IHsKLSAgICAgICAgLyogRm91bmQgYSBkaXJlY3RvcnkgKi8KLSAgICAgICAgcmV0dXJuKDApOwot ICAgIH0KLSAgICBpZiAoIXpvcGVuaShaSUZJTEUsbmFtZSkpCi0gICAgICByZXR1cm4oMCk7Ci0K LSAgICBuZmlscyA9IDA7CQkJCS8qIE5vIGZpbGVzLCBubyBsaXN0cy4gKi8KLSAgICB4ZmxnID0g MTsJCQkJLyogRmxhZyB3ZSBtdXN0IHNlbmQgWCBwYWNrZXQuICovCi0gICAgY2tzdHJuY3B5KGNt ZHN0ciwidHlwZSIsQ01EU1RSTCk7CS8qIERhdGEgZm9yIFggcGFja2V0LiAqLwotICAgIGZpcnN0 ID0gMTsJCQkJLyogSW5pdCBnZXRjaHggbG9va2FoZWFkICovCi0gICAgZnVuY3N0ciA9IDE7CQkJ LyogSnVzdCBzZXQgdGhlIGZsYWcuICovCi0gICAgZnVuY3B0ciA9IG54dHR5cGU7CQkJLyogQW5k IHRoZSBwb2ludGVyLiAqLwotICAgIGJpbmFyeSA9IFhZRlRfVDsJCQkvKiBUZXh0IG1vZGUgZm9y IHRoaXMgKi8KLSAgICByZXR1cm4oc2luaXQoKSk7Ci0jZWxzZQotICAgIHJldHVybigwKTsKLSNl bmRpZiAvKiBOT1NFUlZFUiAqLwotfQotCi0vKgotICAgTiBYIFQgRCBJIFIgIC0tICBQcm92aWRl IGRhdGEgZm9yIHNlbmRkaXIoKQotCi0gICBSZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSBjaGFy YWN0ZXIgb3IgLTEgaWYgbm8gbW9yZSBkYXRhLgotKi8KLSNpZm5kZWYgTk9JQ1AKLS8qIERpcmVj dG9yeSBsaXN0aW5nIHBhcmFtZXRlcnMgc2V0IGJ5IHRoZSB1c2VyIGludGVyZmFjZSwgaWYgYW55 LiAqLwotZXh0ZXJuIGludCBkaXJfaGVhZCwgZGlyX2RvdHMsIGRpcl9iYWNrOwotI2VuZGlmIC8q IE5PSUNQICovCi1zdGF0aWMgaW50IHNkX2hkZywgc2RfYmtwLCBzZF9kb3Q7CS8qIExvY2FsIGxp c3RpbmcgcGFyYW1ldGVycyAqLwotCi1zdGF0aWMgaW50Ci1ueHRkaXIoCi0jaWZkZWYgQ0tfQU5T SUMKLSAgICAgICB2b2lkCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSAgICAgICApIHsKLSAgICBj aGFyIG5hbWVbQ0tNQVhQQVRIKzFdLCBkYnVmWzI0XSwgKnAgPSBOVUxMOwotICAgIGNoYXIgKmRz dHIgPSBOVUxMLCAqIGxuayA9ICIiOwotICAgIENIQVIgYywgKiBsaW5lYnVmID0gZnVuY2J1ZjsK LSNpZmRlZiBPU0sKLSAgICAvKiBXb3JrIGFyb3VuZCBidWdzIGluIE9TSyBjb21waWxlciAqLwot ICAgIGNoYXIgKmRpcnRhZyA9ICJkaXJlY3RvcmllcyI7Ci0gICAgY2hhciAqZmlsZXRhZyA9ICJm aWxlcyI7Ci0gICAgY2hhciAqYnl0ZXRhZyA9ICJieXRlcyI7Ci0jZW5kaWYgLyogT1NLICovCi0g ICAgQ0tfT0ZGX1QgbGVuID0gMDsKLSAgICBpbnQgeCwgaXRzYWRpciA9IDAsIGdvdG9uZSA9IDA7 Ci0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAxLCJueHRkaXIg ZnVuY254dCIsIiIsZnVuY254dCk7Ci0JZGVidWcoRjEwMSwibnh0ZGlyIGZ1bmNsZW4iLCIiLGZ1 bmNsZW4pOwotCWRlYnVnKEYxMTAsIm54dGRpciBmdW5jYnVmIixmdW5jYnVmK2Z1bmNueHQsMCk7 Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgaWYgKGZ1bmNueHQgPCBmdW5jbGVuKSB7 CQkvKiBSZXR1cm4gbmV4dCBjaGFyYWN0ZXIgZnJvbSBidWZmZXIgKi8KLQljID0gZnVuY2J1Zltm dW5jbnh0KytdOwotCWRlYnVnKEYwMDAsIm54dGRpciByZXR1cm4gMSIsIiIsKHVuc2lnbmVkKShj ICYgMHhmZikpOwotCXJldHVybigodW5zaWduZWQpKGMgJiAweGZmKSk7Ci0gICAgfQotICAgIHdo aWxlIChueHBuZCA+IDApIHsJCQkvKiBCdWZmZXIgbmVlZHMgcmVmaWxsICovCi0gICAgICAgIG54 cG5kLS07Ci0Jem5leHQobmFtZSk7CQkJLyogR2V0IG5leHQgZmlsZW5hbWUgKi8KLSAgICAgICAg aWYgKCFuYW1lWzBdKSB7CQkJLyogTm9uZSBsZWZ0IC0gZG9uZSAqLwotICAgICAgICAgICAgbnhw bmQgPSAwOwotICAgICAgICAgICAgcmV0dXJuKG54dGRpcigpKTsKLSAgICAgICAgfQotCWlmIChz ZF9ia3ApIHsJCQkvKiBTaG93aW5nIGJhY2t1cCBmaWxlcz8gKi8KLQkgICAgZ290b25lID0gMTsJ CQkvKiBZZXMsIG5vIG5lZWQgdG8gY2hlY2suICovCi0JICAgIGJyZWFrOwotCX0KLQl4ID0gY2tt YXRjaCgJCQkvKiBObyAtIHNlZSBpZiB0aGlzIGlzIG9uZSAqLwotI2lmZGVmIENLUkVHRVgKLQkJ ICAgICIqLn5bMC05XSp+IgkvKiBOb3QgcGVyZmVjdCBidXQgY2xvc2UgZW5vdWdoLiAqLwotI2Vs c2UKLQkJICAgICIqLn4qfiIJCS8qIExlc3MgY2xvc2UuICovCi0jZW5kaWYgLyogQ0tSRUdFWCAq LwotCQkgICAgLG5hbWUsZmlsZWNhc2UsMSk7Ci0JZGVidWcoRjExMSwibnh0ZGlyIGNrbWF0Y2gi LG5hbWUseCk7Ci0JaWYgKHgpIHsKLQkgICAgY29udGludWU7CQkJLyogSXQncyBhIGJhY2t1cCBm aWxlIC0gc2tpcCBpdCAqLwotCX0gZWxzZSB7Ci0JICAgIGdvdG9uZSA9IDE7CQkJLyogSXQncyBu b3QsIGJyZWFrIGZyb20gbG9vcC4gKi8KLQkgICAgYnJlYWs7Ci0JfQotICAgIH0KLSAgICBpZiAo Z290b25lKSB7Ci0gICAgICAgIGxlbiA9IHpnZXRmcyhuYW1lKTsJCS8qIEdldCBmaWxlIHNpemUg Ki8KLQlkZWJ1ZyhGMTExLCJueHRkaXIgemdldGZzIixuYW1lLGxlbik7Ci0jaWZkZWYgVk1TT1JV TklYCi0JaXRzYWRpciA9IHpnZnNfZGlyOwkJLyogU2VlIGlmIGl0J3MgYSBkaXJlY3RvcnkgKi8K LSNlbHNlCi0JaXRzYWRpciA9IChsZW4gPT0gLTIgfHwgaXNkaXIobmFtZSkpOwotI2VuZGlmIC8q IFZNU09SVU5JWCAqLwotICAgICAgICBkc3RyID0gemZjZGF0KG5hbWUpOwotCWRlYnVnKEYxMTEs Im54dGRpciB6Y2ZkYXQiLGRzdHIsMCk7Ci0JaWYgKCFkc3RyKQotCSAgZHN0ciA9ICIwMDAwLTAw LTAwIDAwOjAwOjAwIjsKLQlpZiAoISpkc3RyKSB7Ci0JICBkc3RyID0gIjAwMDAtMDAtMDAgMDA6 MDA6MDAiOwotCX0gZWxzZSB7Ci0JICAgIGRidWZbMF0gPSBkc3RyWzBdOwotCSAgICBkYnVmWzFd ID0gZHN0clsxXTsKLQkgICAgZGJ1ZlsyXSA9IGRzdHJbMl07Ci0JICAgIGRidWZbM10gPSBkc3Ry WzNdOwotCSAgICBkYnVmWzRdID0gJy0nOwotCSAgICBkYnVmWzVdID0gZHN0cls0XTsKLQkgICAg ZGJ1Zls2XSA9IGRzdHJbNV07Ci0JICAgIGRidWZbN10gPSAnLSc7Ci0JICAgIGRidWZbOF0gPSBk c3RyWzZdOwotCSAgICBkYnVmWzldID0gZHN0cls3XTsKLQkgICAgc3RyY3B5KGRidWYrMTAsZHN0 cis4KTsKLQkgICAgZHN0ciA9IGRidWY7Ci0JfQotI2lmZGVmIENLX1BFUk1TCi0jaWZkZWYgVk1T T1JVTklYCi0JcCA9IHppcGVybShuYW1lKTsJCS8qIEdldCBwZXJtaXNzaW9ucyAqLwotI2Vsc2UK LQlwID0gemdwZXJtKG5hbWUpOwotI2VuZGlmIC8qIFZNU09SVU5JWCAqLwotI2Vsc2UKLQlwID0g TlVMTDsKLSNlbmRpZiAvKiBDS19QRVJNUyAqLwotCWRlYnVnKEYxMTAsImRvbXlkaXIgcGVybXMi LHAsMCk7Ci0KLSNpZmRlZiBWTVMKLQkvKiBNYWtlIG5hbWUgcmVsYXRpdmUgKi8KLQlja3N0cm5j cHkobmFtZSx6cmVsbmFtZShuYW1lLHpndGRpcigpKSxDS01BWFBBVEgrMSk7Ci0jZW5kaWYgLyog Vk1TICovCi0KLQlpZiAoaXRzYWRpcikgewotCSAgICBuZGlycysrOwotCX0gZWxzZSB7Ci0JICAg IG5maWxlcysrOwotCSAgICBuYnl0ZXMgKz0gbGVuOwotCX0KLQlsbmsgPSAiIjsKLSNpZmRlZiBV TklYCi0jaWZkZWYgQ0tTWU1MSU5LCi0JaWYgKHpnZnNfbGluaykgewotCSAgICBleHRlcm4gY2hh ciBsaW5rbmFtZVtdOwotCSAgICBsbmsgPSBsaW5rbmFtZTsKLQl9Ci0JZGVidWcoRjExMSwibnh0 ZGlyIGxpbmtuYW1lIixsbmssemdmc19saW5rKTsKLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLSNl bmRpZiAvKiBVTklYICovCi0KLS8qCi0gIFRoZSBmb2xsb3dpbmcgc3ByaW50ZidzIGFyZSBzYWZl OyBsaW5lYnVmIGlzIGEgcG9pbnRlciB0byBmdW5jYnVmLAotICB3aGljaCBpcyA2NCBieXRlcyBs YXJnZXIgdGhhbiBDS01BWFBBVEggKG9yIGRvdWJsZSBDS01BWFBBVEggd2hlbgotICBzeW1saW5r cyBhcmUgcG9zc2libGUpLiAgNjQgYWxsb3dzIGZvciB0aGUgZml4ZWQtZmllbGQgcG9ydGlvbnMg b2YKLSAgdGhlIGZpbGUgbGlzdGluZyBsaW5lOiBwZXJtaXNzaW9ucywgc2l6ZSwgYW5kIGRhdGUu ICBDS01BWFBBVEggYWxsb3dzCi0gIGZvciB0aGUgbG9uZ2VzdCBwb3NzaWJsZSBwYXRobmFtZS4K LSovCi0JaWYgKGl0c2FkaXIgJiYgbGVuIDwgMCkgewkvKiBEaXJlY3RvcnkgKi8KLSNpZmRlZiBW TVMKLQkgICAgc3ByaW50ZigoY2hhciAqKWxpbmVidWYsCi0JCSAgICAiJS0yMnMlLTEwcyAgJXMg ICVzXG4iLHAsIjxESVI+Iixkc3RyLG5hbWUpOwotI2Vsc2UKLQkgICAgaWYgKHApCi0JICAgICAg c3ByaW50ZigoY2hhciAqKWxpbmVidWYsCi0JCSAgICAgICIlMTBzJS0xMHMgICVzICAlc1xuIixw LCI8RElSPiIsZHN0cixuYW1lKTsKLQkgICAgZWxzZQotCSAgICAgIHNwcmludGYoKGNoYXIgKils aW5lYnVmLAotCQkgICAgICAiJS0xMHMgICVzICAlc1xuIiwgIjxESVI+IiwgZHN0ciwgbmFtZSk7 Ci0jZW5kaWYgLyogVk1TICovCi0JfSBlbHNlIHsJCQkvKiBSZWd1bGFyIGZpbGUgKi8KLSNpZmRl ZiBWTVMKLQkgICAgc3ByaW50ZigoY2hhciAqKWxpbmVidWYsCi0JCSAgICAiJS0yMnMlMTBzICAl cyAgJXNcbiIsIHAsIGNrZnN0b2EobGVuKSwgZHN0ciwgbmFtZSk7Ci0jZWxzZQotCSAgICBpZiAo cCkKLQkgICAgICBzcHJpbnRmKChjaGFyICopbGluZWJ1ZiwKLQkJICAgICAgIiUxMHMlMTBzICAl cyAgJXMlcyVzXG4iLAotCQkgICAgICBwLCBja2ZzdG9hKGxlbiksIGRzdHIsIG5hbWUsCi0JCSAg ICAgICpsbmsgPyAiIC0+ICIgOiAiIiwKLQkJICAgICAgbG5rCi0JCSAgICAgICk7Ci0JICAgIGVs c2UKLQkgICAgICBzcHJpbnRmKChjaGFyICopbGluZWJ1ZiwKLQkJICAgICAgIiUxMHMgICVzICAl cyVzJXNcbiIsCi0JCSAgICAgIGNrZnN0b2EobGVuKSwgZHN0ciwgbmFtZSwKLQkJICAgICAgKmxu ayA/ICIgLT4gIiA6ICIiLAotCQkgICAgICBsbmsKLQkJICAgICAgKTsKLSNlbmRpZiAvKiBWTVMg Ki8KLQl9Ci0gICAgICAgIGZ1bmNueHQgPSAwOwotICAgICAgICBmdW5jbGVuID0gc3RybGVuKChj aGFyICopZnVuY2J1Zik7Ci0gICAgfSBlbHNlIGlmIChzZF9oZGcgJiYgbnhwbmQgPT0gMCkgewkv KiBEb25lLCBzZW5kIHN1bW1hcnkgKi8KLQljaGFyICpibGFua2xpbmUgPSAiIjsJCS8qIEF0IGJl Z2lubmluZyBvZiBzdW1tYXJ5ICovCi0vKgotICBUaGUgaWRlYSBpcyB0byBwcmV2ZW50IChhKSB1 bm5lY2Vzc2FyeSBtdWx0aXBsZSBibGFua2xpbmVzLCBhbmQgKGIpCi0gIHByb21wdC1zdG9tcGlu Zy4gIFByZXZlbnRpbmcgKGIpIGlzIHByYWN0aWNhbGx5IGltcG9zc2libGUsIGJlY2F1c2UgaXQK LSAgZGVwZW5kcyBvbiB0aGUgY2xpZW50IHNvIGZvciBub3cgYWx3YXlzIGluY2x1ZGUgdGhhdCBm aW5hbCBDUkxGLgotKi8KLQlpZiAoIW5kaXJzIHx8ICFuYnl0ZXMgfHwgIW5maWxlcykKLQkgIGJs YW5rbGluZSA9IGVuZGxpbmU7Ci0jaWZkZWYgT1NLCi0vKiBXb3JrYXJvdW5kIGJ1Z3MgaW4gT1Mt OSBjb21waWxlci4uLiAqLwotICAgICAgICBpZiAobmRpcnMgPT0gMSkKLSAgICAgICAgICAgZGly dGFnID0gImRpcmVjdG9yeSI7Ci0gICAgICAgIGlmIChuZmlsZXMgPT0gMSkKLSAgICAgICAgICAg ZmlsZXRhZyA9ICJmaWxlIjsKLSAgICAgICAgaWYgKG5ieXRlcyA9PSAoQ0tfT0ZGX1QpMSkKLSAg ICAgICAgICAgYnl0ZXRhZyA9ICJieXRlIjsKLSAgICAgICAgc3ByaW50ZigoY2hhciAqKWZ1bmNi dWYsCi0JCSIlc1N1bW1hcnk6ICVsZCAlcywgJWxkICVzLCAlcyAlcyVzIiwKLQkJYmxhbmtsaW5l LAotCQluZGlycywKLQkJZGlydGFnLAotCQluZmlsZXMsCi0JCWZpbGV0YWcsCi0JCWNrZnN0b2Eo bmJ5dGVzKSwKLQkJYnl0ZXRhZywKLQkJZW5kbGluZSk7Ci0jZWxzZQotICAgICAgICBzcHJpbnRm KChjaGFyICopZnVuY2J1ZiwKLQkJIiVzU3VtbWFyeTogJWxkIGRpcmVjdG9yJXMsICVsZCBmaWxl JXMsICVzIGJ5dGUlcyVzIiwKLQkJYmxhbmtsaW5lLAotCQluZGlycywKLQkJKG5kaXJzID09IDEp ID8gInkiIDogImllcyIsCi0JCW5maWxlcywKLQkJKG5maWxlcyA9PSAxKSA/ICIiIDogInMiLAot CQlja2ZzdG9hKG5ieXRlcyksCi0JCShuYnl0ZXMgPT0gKENLX09GRl9UKTEpID8gIiIgOiAicyIs Ci0JCWVuZGxpbmUKLQkJKTsKLSNlbmRpZiAvKiBPU0sgKi8KLSAgICAgICAgbnhwbmQtLTsKLSAg ICAgICAgZnVuY254dCA9IDA7Ci0gICAgICAgIGZ1bmNsZW4gPSBzdHJsZW4oKGNoYXIgKilmdW5j YnVmKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmdW5jYnVmWzBdID0gJ1wwJzsKLSAgICAgICAg ZnVuY254dCA9IDA7Ci0gICAgICAgIGZ1bmNsZW4gPSAwOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAx LCJueHRkaXIgZnVuY2xlbiIsIiIsZnVuY2xlbik7Ci0KLSAgICBpZiAoZnVuY254dCA8IGZ1bmNs ZW4pIHsJCS8qIElmIHdlIGhhdmUgZGF0YSB0byBzZW5kLi4uICovCi0JYyA9IGZ1bmNidWZbZnVu Y254dCsrXTsKLQlkZWJ1ZyhGMDAwLCJueHRkaXIgcmV0dXJuIDIiLCIiLCh1bnNpZ25lZCkoYyAm IDB4ZmYpKTsKLQlyZXR1cm4oKHVuc2lnbmVkKShjICYgMHhmZikpOwotICAgIH0gZWxzZQotICAg ICAgcmV0dXJuKC0xKTsJCQkvKiBOb3RoaW5nIGxlZnQsIGRvbmUuICovCi19Ci0KLS8qICBTIE4g RCBEIEkgUiAtLSBzZW5kIGRpcmVjdG9yeSBsaXN0aW5nICAqLwotCi1pbnQKLXNuZGRpcihzcGVj KSBjaGFyICogc3BlYzsgewotI2lmbmRlZiBOT1NFUlZFUgotICAgIGNoYXIgKiBwID0gTlVMTCwg bmFtZVtDS01BWFBBVEgrMV07Ci0gICAgaW50IHQgPSAwLCByYyA9IDA7Ci0gICAgY2hhciBmbmJ1 ZltDS01BWFBBVEgrMV07Ci0KLSAgICBkZWJ1ZyhGMTExLCJzbmRkaXIgbWF0Y2hkb3QiLHNwZWMs bWF0Y2hkb3QpOwotCi0jaWZuZGVmIE5PSUNQCi0gICAgZGVidWcoRjExMSwic25kZGlyIGRpcl9k b3RzIixzcGVjLGRpcl9kb3RzKTsKLSAgICBzZF9oZGcgPSBkaXJfaGVhZCA+IDA7CQkvKiBJbXBv cnQgbGlzdGluZyBwYXJhbWV0ZXJzIGlmIGFueSAqLwotICAgIHNkX2JrcCA9IGRpcl9iYWNrID4g MDsKLSAgICBpZiAoZGlyX2RvdHMgPiAtMSkKLSAgICAgIHNkX2RvdCA9IGRpcl9kb3RzOwotICAg IGVsc2UKLSAgICAgIHNkX2RvdCA9IG1hdGNoZG90OwotI2Vsc2UKLSAgICBzZF9oZGcgPSAxOwkJ CQkvKiBPciB1c2UgaGFyZHdpcmVkIGRlZmF1bHRzICovCi0gICAgc2RfYmtwID0gMTsKLSAgICBz ZF9kb3QgPSBtYXRjaGRvdDsKLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0gICAgaWYgKCFzcGVjKSBz cGVjID0gIiI7Ci0gICAgZGVidWcoRjExMSwic25kZGlyIHNkX2RvdCIsc3BlYyxzZF9kb3QpOwot ICAgIGlmICgqc3BlYykgewotI2lmZGVmIENPTU1FTlQKLQl6Zm5xZnAoc3BlYyxDS01BWFBBVEgs bmFtZSk7Ci0JZGVidWcoRjExMCwic25kZGlyIHpmbnFmcCIsbmFtZSwwKTsKLSNlbHNlCi0JY2tz dHJuY3B5KG5hbWUsc3BlYyxDS01BWFBBVEgrMSk7Ci0JZGVidWcoRjExMCwic25kZGlyIG5hbWUi LG5hbWUsMCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0gZWxzZSB7Ci0jaWZkZWYgT1My Ci0Jc3RyY3B5KG5hbWUsICIqIik7Ci0jZWxzZQotI2lmZGVmIFVOSVhPUk9TSwotCXN0cmNweShu YW1lLCAiLi8qIik7Ci0jZWxzZQotI2lmZGVmIFZNUwotCXN0cmNweShuYW1lLCAiKi4qIik7Ci0j ZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0Jc3RyY3B5KG5hbWUsICIrIik7Ci0jZWxzZQotCWRl YnVnKEYxMDEsInNuZGRpciBxdWl0IChubyBmaWxlc3BlYykiLCIiLDApOwotCXJldHVybigwKTsK LSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVO SVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0gICAgZGVidWcoRjExMCwic25kZGlyIG5h bWUgMSIsbmFtZSwwKTsKLSAgICBuZGlycyA9IDBMOwotICAgIG5maWxlcyA9IDBMOwotICAgIG5i eXRlcyA9IChDS19PRkZfVCkwOwotCi0gICAgaWYgKHpmbnFmcChuYW1lLENLTUFYUEFUSCxmbmJ1 ZikpCi0KLSAgICBkZWJ1ZyhGMTEwLCJzbmRkaXIgbmFtZSAyIixuYW1lLDApOwotICAgIHAgPSBu YW1lICsgc3RybGVuKG5hbWUpOwkJLyogTW92ZSBpdCB0byBlbmQgb2YgbGlzdCAqLwotCi0gICAg Lyogc3ByaW50ZiBzYWZlIGJlY2F1c2UgZnVuY2J1ZiBzaXplID49IG1heCBwYXRoIGxlbiArIDY0 ICovCi0KLSAgICBpZiAoc2RfaGRnKSB7Ci0Jc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIkxpc3Rp bmcgZmlsZXM6ICVzJXMlcyIsZm5idWYsZW5kbGluZSxlbmRsaW5lKTsKLQlmdW5jbnh0ID0gMDsK LQlmdW5jbGVuID0gc3RybGVuKChjaGFyICopZnVuY2J1Zik7Ci0gICAgfQotICAgIGRpcmFjdGl2 ZSA9IDE7Ci0KLSNpZmRlZiBPUzIKLSAgICBpZiAoemNoa2kobmFtZSkgPT0gLTIpIHsJCS8qIEZv dW5kIGEgZGlyZWN0b3J5ICovCi0gICAgICAgIHAtLTsKLSAgICAgICAgaWYgKCpwID09ICdcXCcg fHwgKnAgPT0gJy8nKQotICAgICAgICAgIGNrc3RybmNhdChuYW1lLCAiKiIsIENLTUFYUEFUSCk7 Ci0gICAgICAgIGVsc2UgaWYgKCpwID09ICc6JykKLSAgICAgICAgICBja3N0cm5jYXQobmFtZSwg Ii4iLCBDS01BWFBBVEgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY2tzdHJuY2F0KG5hbWUs ICJcXCoiLCBDS01BWFBBVEgpOwotCWRlYnVnKEYxMTAsInNuZGRpciBkaXJlY3RvcnkiLG5hbWUs MCk7Ci0gICAgfQotI2Vsc2UKLSAgICBpZiAoIWlzd2lsZChuYW1lKSAmJiBpc2RpcihuYW1lKSkg ewotCWNoYXIgKiBzID0gbmFtZTsKLQlwLS07Ci0jaWZkZWYgVU5JWE9ST1NLCi0JaWYgKCpwID09 ICcvJykJCQkvKiBTbyBhcHBlbmQgd2lsZGNhcmQgdG8gaXQgKi8KLQkgIGNrc3RybmNhdChzLCAi KiIsIENLTUFYUEFUSCk7Ci0JZWxzZQotCSAgY2tzdHJuY2F0KHMsICIvKiIsIENLTUFYUEFUSCk7 Ci0jZWxzZQotI2lmZGVmIFZNUwotCWlmICgqcCA9PSAnXScgfHwgKnAgPT0gJz4nIHx8ICpwID09 ICc6JykKLQkgIGNrc3RybmNhdChzLCAiKi4qIiwgQ0tNQVhQQVRIKTsKLSNlbHNlCi0jaWZkZWYg ZGF0YWdlbmVyYWwKLQlpZiAoKnAgPT0gJzonKQotCSAgY2tzdHJuY2F0KHMsICIrIiwgQ0tNQVhQ QVRIKTsKLQllbHNlCi0JICBja3N0cm5jYXQocywgIjorIiwgQ0tNQVhQQVRIKTsKLSNlbHNlCi0j aWZkZWYgVk9TCi0JaWYgKCpwID09ICc+JykKLQkgIGNrc3RybmNhdChzLCAiKiIsIENLTUFYUEFU SCk7Ci0JZWxzZQotCSAgY2tzdHJuY2F0KHMsICI+KiIsIENLTUFYUEFUSCk7Ci0jZW5kaWYgLyog Vk9TICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRp ZiAvKiBVTklYT1JPU0sgKi8KLQlkZWJ1ZyhGMTEwLCJzbmRkaXIgZGlyZWN0b3J5IixuYW1lLDAp OwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIG56eG9wdHMgPSAwOwotI2lmZGVmIFVO SVgKLSAgICB7Ci0JZXh0ZXJuIGNoYXIgKiogbXRjaHM7Ci0JZGVidWcoRjExMSwic25kZGlyIHNk X2RvdCIsc3BlYyxzZF9kb3QpOwotCWlmIChzZF9kb3QgPiAwKQotCSAgbnp4b3B0cyB8PSBaWF9N QVRDSERPVDsKLQlpZiAocmVjdXJzaXZlKQotCSAgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOwotCWRl YnVnKEYxMTEsInNuZGRpciBuenhvcHRzIixzcGVjLG56eG9wdHMpOwotCW54cG5kID0gbnp4cGFu ZChuYW1lLG56eG9wdHMpOwkvKiBHZXQgdGhlIGFycmF5IG9mIG5hbWVzICovCi0Jc2hfc29ydCht dGNocyxOVUxMLG54cG5kLDAsMCwxKTsgLyogU29ydCB0aGUgYXJyYXkgKi8KLSAgICB9Ci0jZWxz ZQotICAgIGlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKLSAgICBueHBuZCA9 IG56eHBhbmQobmFtZSxuenhvcHRzKTsKLSNlbmRpZiAvKiBVTklYICovCi0KLSAgICBkZWJ1ZyhG MTAxLCJzbmRkaXIgbnp4cGFuZCBueHBuZCIsIiIsbnhwbmQpOwotICAgIGlmIChueHBuZCA8IDEp Ci0gICAgICByZXR1cm4oLTEpOwotICAgIG5maWxzID0gMDsJCQkJLyogTm8gZmlsZXMsIG5vIGxp c3RzLiAqLwotICAgIHhmbGcgPSAxOwkJCQkvKiBGbGFnIHdlIG11c3Qgc2VuZCBYIHBhY2tldC4g Ki8KLSAgICBpZiAoKGludClzdHJsZW4obmFtZSkgPCBDTURTVFJMIC0gMTEpIC8qIERhdGEgZm9y IFggcGFja2V0LiAqLwotICAgICAgc3ByaW50ZihjbWRzdHIsIkRJUkVDVE9SWSAlcyIsbmFtZSk7 IC8qIHNhZmUgKi8KLSAgICBlbHNlCi0gICAgICBja3N0cm5jcHkoY21kc3RyLCJESVJFQ1RPUlki LENNRFNUUkwpOwotICAgIGZpcnN0ID0gMTsJCQkJLyogSW5pdCBnZXRjaHggbG9va2FoZWFkICov Ci0gICAgZnVuY3N0ciA9IDE7CQkJLyogSnVzdCBzZXQgdGhlIGZsYWcuICovCi0gICAgZnVuY3B0 ciA9IG54dGRpcjsJCQkvKiBBbmQgdGhlIHBvaW50ZXIuICovCi0gICAgYmluYXJ5ID0gWFlGVF9U OwkJCS8qIFRleHQgbW9kZSBmb3IgdGhpcyAqLwotICAgIHJjID0gc2luaXQoKTsJCQkvKiAyNiBB dWcgMjAwNSAqLwotICAgIGRlYnVnKEYxMTEsInNuZGRpciIsInNpbml0KCkiLHJjKTsKLSAgICBy ZXR1cm4ocmMpOwotI2Vsc2UKLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8K LX0KLQotLyogIE4gWCBUIEQgRSBMIC0tIHByb3ZpZGUgZGF0YSBmb3IgZGVsZXRlICAgKi8KLQot LyogIFJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIGNoYXJhY3RlciBvciAtMSBpZiBubyBtb3Jl IGRhdGEgICovCi0KLXN0YXRpYyBpbnQKLW54dGRlbCgKLSNpZmRlZiBDS19BTlNJQwotICAgICAg IHZvaWQKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotICAgICAgICkgewotICAgIGNoYXIgbmFtZVsy NTddLCAqcCA9IE5VTEw7Ci0gICAgaW50IGxlbiA9IDA7Ci0KLSAgICBpZiAoZnVuY254dCA8IGZ1 bmNsZW4pCi0gICAgICByZXR1cm4gKCh1bnNpZ25lZClmdW5jYnVmW2Z1bmNueHQrK10pOwotCi0g ICAgaWYgKG54cG5kID4gMCkgewotICAgICAgICBueHBuZC0tOwotCXpuZXh0KG5hbWUpOwotICAg ICAgICBpZiAoIW5hbWVbMF0pIHsKLSAgICAgICAgICAgIG54cG5kID0gMDsKLSAgICAgICAgICAg IHJldHVybihueHRkZWwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuID0gemNoa2kobmFtZSk7 Ci0KLSAgICAgICAgLyogRmluZCBqdXN0IHRoZSBuYW1lIG9mIHRoZSBmaWxlICovCi0KLSAgICAg ICAgZm9yIChwID0gbmFtZSArIHN0cmxlbihuYW1lKTsgcCAhPSBuYW1lICYmICpwICE9ICcvJyA7 IHAtLSkgOwotICAgICAgICBpZiAoKnAgPT0gJy8nKSBwKys7Ci0KLQkvKiBzcHJpbnRmJ3Mgc2Fm ZSBiZWNhdXNlIHNpemUgb2YgZnVuY2J1ZiA+PSA2NCArIG1heHBhdGhsZW4gKi8KLQotICAgICAg ICBpZiAobGVuID4gLTFMKSB7Ci0JICAgIGlmICh6ZGVsZXQobmFtZSkpIHsKLQkJc3ByaW50Zigo Y2hhciAqKWZ1bmNidWYsIiAlMTBzOiAlcyVzIiwic2tpcHBpbmciLHAsZW5kbGluZSk7Ci0JICAg IH0gZWxzZSB7Ci0JCW5maWxlcysrOwotCQluYnl0ZXMgKz0gbGVuOwotCQlzcHJpbnRmKChjaGFy ICopZnVuY2J1ZiwiICUxMHM6ICVzJXMiLCJkZWxldGVkIixwLGVuZGxpbmUpOwotCSAgICB9Ci0g ICAgICAgIH0gZWxzZQotCSAgc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBkaXJlY3Rvcnk6ICVz JXMiLCBwLCBlbmRsaW5lKTsKLSAgICAgICAgZnVuY254dCA9IDA7Ci0gICAgICAgIGZ1bmNsZW4g PSBzdHJsZW4oKGNoYXIgKilmdW5jYnVmKTsKLSAgICB9IGVsc2UKLQotICAgIC8qIElmIGRvbmUg cHJvY2Vzc2luZyB0aGUgZXhwYW5kZWQgZW50cmllcyBzZW5kIGEgc3VtbWFyeSBzdGF0ZW1lbnQg Ki8KLQotICAgICAgaWYgKG54cG5kID09IDApIHsKLQkgIHNwcmludGYoKGNoYXIgKilmdW5jYnVm LAotCQkgICIlcyVsZCBmaWxlJXMgZGVsZXRlZCwgJXMgYnl0ZSVzIGZyZWVkJXMiLAotCQkgIGVu ZGxpbmUsCi0JCSAgbmZpbGVzLAotCQkgIChuZmlsZXMgPT0gMSkgPyAiIiA6ICJzIiwKLQkJICBj a2ZzdG9hKG5ieXRlcyksCi0JCSAgKG5ieXRlcyA9PSAoQ0tfT0ZGX1QpMSkgPyAiIiA6ICJzIiwK LQkJICBlbmRsaW5lCi0JCSAgKTsKLQkgIG54cG5kLS07Ci0JICBmdW5jbnh0ID0gMDsKLQkgIGZ1 bmNsZW4gPSBzdHJsZW4oKGNoYXIgKilmdW5jYnVmKTsKLSAgICAgIH0gZWxzZSB7Ci0JICBmdW5j YnVmWzBdID0gJ1wwJzsKLQkgIGZ1bmNueHQgPSAwOwotCSAgZnVuY2xlbiA9IDA7Ci0gICAgICB9 Ci0KLSAgICAvKiBJZiB3ZSBoYXZlIGRhdGEgdG8gc2VuZCAqLwotCi0gICAgaWYgKGZ1bmNueHQg PCBmdW5jbGVuKQotICAgICAgcmV0dXJuICgodW5zaWduZWQpZnVuY2J1ZltmdW5jbnh0KytdKTsg LyogUmV0dXJuIGEgY2hhcmFjdGVyICovCi0gICAgZWxzZQotICAgICAgcmV0dXJuKC0xKTsJCQkv KiBObyBtb3JlIGlucHV0ICovCi19Ci0KLS8qICBTIE4gRCBEIEUgTCAgLS0gIFNlbmQgZGVsZXRl IG1lc3NhZ2UgICovCi0KLWludAotc25kZGVsKHNwZWMpIGNoYXIgKiBzcGVjOyB7Ci0jaWZuZGVm IE5PU0VSVkVSCi0gICAgY2hhciBuYW1lW0NLTUFYUEFUSCsxXTsKLSNpZmRlZiBPUzIKLSAgICBj aGFyICogcCA9IE5VTEw7Ci0jZW5kaWYgLyogI2lmZGVmIE9TMiAqLwotCi0gICAgaWYgKCEqc3Bl YykKLSAgICAgIHJldHVybigwKTsKLQotICAgIGNrc3RybmNweShuYW1lLCBzcGVjLCBDS01BWFBB VEgrMSk7Ci0KLSNpZmRlZiBPUzIKLSAgICAvKiBjaGFuZ2UgLyB0byBcLiAqLwotICAgIHAgPSBu YW1lOwotICAgIHdoaWxlICgqcCkgewkJCS8qIENoYW5nZSB0aGVtIGJhY2sgdG8gXCAqLwotICAg ICAgICBpZiAoKnAgPT0gJy8nKSAqcCA9ICdcXCc7Ci0gICAgICAgIHArKzsKLSAgICB9Ci0jZW5k aWYgLyogT1MyICovCi0KLSAgICBuZmlsZXMgPSAwTDsKLSAgICBuYnl0ZXMgPSAoQ0tfT0ZGX1Qp MDsKLSAgICBzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiRGVsZXRpbmcgXCIlc1wiJXMiLG5hbWUs ZW5kbGluZSk7Ci0gICAgZnVuY254dCA9IDA7Ci0gICAgZnVuY2xlbiA9IHN0cmxlbigoY2hhciAq KWZ1bmNidWYpOwotCi0gICAgbnp4b3B0cyA9IFpYX0ZJTE9OTFk7CQkvKiBGaWxlcyBvbmx5ICov Ci0jaWZkZWYgVU5JWE9ST1NLCi0gICAgaWYgKG1hdGNoZG90KSBuenhvcHRzIHw9IFpYX01BVENI RE9UOwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBSZWN1 cnNpdmUgZGVsZXRpbmcgbm90IHN1cHBvcnRlZCB5ZXQgKi8KLSAgICBpZiAocmVjdXJzaXZlKSBu enhvcHRzIHw9IFpYX1JFQ1VSU0U7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIG54cG5kID0g bnp4cGFuZChuYW1lLG56eG9wdHMpOwotICAgIGlmIChueHBuZCA8IDEpCi0gICAgICByZXR1cm4o LTEpOwotICAgIG5maWxzID0gMDsJCQkJLyogTm8gZmlsZXMsIG5vIGxpc3RzLiAqLwotICAgIHhm bGcgPSAxOwkJCQkvKiBGbGFnIHdlIG11c3Qgc2VuZCBYIHBhY2tldC4gKi8KLSAgICBja3N0cm5j cHkoY21kc3RyLCJSRU1PVEUgREVMRVRFIixDTURTVFJMKTsgLyogRGF0YSBmb3IgWCBwYWNrZXQu ICovCi0gICAgZmlyc3QgPSAxOwkJCQkvKiBJbml0IGdldGNoeCBsb29rYWhlYWQgKi8KLSAgICBm dW5jc3RyID0gMTsJCQkvKiBKdXN0IHNldCB0aGUgZmxhZy4gKi8KLSAgICBmdW5jcHRyID0gbnh0 ZGVsOwkJCS8qIEFuZCB0aGUgcG9pbnRlci4gKi8KLSAgICBiaW5hcnkgPSBYWUZUX1Q7CQkJLyog VXNlIHRleHQgbW9kZSBmb3IgdGhpcywgKi8KLSAgICByZXR1cm4oc2luaXQoKSk7Ci0jZWxzZQot ICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotCi0jaWZkZWYgT1MyCi0v KiAgUyBOIEQgUyBQIEEgQyBFIC0tIHNlbmQgZGlzayBzcGFjZSBtZXNzYWdlICAqLwotaW50Ci1z bmRzcGFjZShkcml2ZSkgaW50IGRyaXZlOyB7Ci0jaWZuZGVmIE5PU0VSVkVSCi0gICAgc3RhdGlj IGNoYXIgc3BjdGV4dFs2NF07Ci0gICAgdW5zaWduZWQgbG9uZyBzcGFjZTsKLQotICAgIGlmIChk cml2ZSkgewotCXNwYWNlID0gemRza3NwYWNlKGRyaXZlIC0gJ0EnICsgMSk7Ci0JaWYgKHNwYWNl ID4gMCAmJiBzcGFjZSA8IDEwMjQpCi0JICBzcHJpbnRmKHNwY3RleHQsCi0JCSAgIiBEcml2ZSAl YzogdW5rbm93biVzIiwKLQkJICBkcml2ZSwKLQkJICBlbmRsaW5lCi0JCSAgKTsKLQllbHNlCi0J ICBzcHJpbnRmKHNwY3RleHQsCi0JCSAgIiBEcml2ZSAlYzogJWxkSyBmcmVlJXMiLAotCQkgIGRy aXZlLAotCQkgIHNwYWNlIC8gMTAyNEwsCi0JCSAgZW5kbGluZQotCQkgICk7Ci0gICAgfSBlbHNl IHsKLQlzcGFjZSA9IHpkc2tzcGFjZSgwKTsKLQlpZiAoc3BhY2UgPiAwICYmIHNwYWNlIDwgMTAy NCkKLQkgIHNwcmludGYoc3BjdGV4dCwgIiBGcmVlIHNwYWNlOiB1bmtub3duJXMiLCBlbmRsaW5l KTsKLQllbHNlCi0JICBzcHJpbnRmKHNwY3RleHQsICIgRnJlZSBzcGFjZTogJWxkSyVzIiwgc3Bh Y2UgLyAxMDI0TCwgZW5kbGluZSk7Ci0gICAgfQotICAgIG5maWxzID0gMDsJCQkJLyogTm8gZmls ZXMsIG5vIGxpc3RzLiAqLwotICAgIHhmbGcgPSAxOwkJCQkvKiBGbGFnIHdlIG11c3Qgc2VuZCBY IHBhY2tldC4gKi8KLSAgICBja3N0cm5jcHkoY21kc3RyLCJmcmVlIHNwYWNlIixDTURTVFJMKTsg LyogRGF0YSBmb3IgWCBwYWNrZXQuICovCi0gICAgZmlyc3QgPSAxOwkJCQkvKiBJbml0IGdldGNo eCBsb29rYWhlYWQgKi8KLSAgICBtZW1zdHIgPSAxOwkJCQkvKiBKdXN0IHNldCB0aGUgZmxhZy4g Ki8KLSAgICBtZW1wdHIgPSBzcGN0ZXh0OwkJCS8qIEFuZCB0aGUgcG9pbnRlci4gKi8KLSAgICBi aW5hcnkgPSBYWUZUX1Q7CQkJLyogVGV4dCBtb2RlIGZvciB0aGlzLiAqLwotICAgIHJldHVybihz aW5pdCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19 Ci0KLS8qICBTIE4gRCBXIEggTyAtLSBzZW5kIHdobyBtZXNzYWdlICAqLwotaW50Ci1zbmR3aG8o d2hvKSBjaGFyICogd2hvOyB7Ci0jaWZuZGVmIE5PU0VSVkVSCi0gICAgbmZpbHMgPSAwOwkJCQkv KiBObyBmaWxlcywgbm8gbGlzdHMuICovCi0gICAgeGZsZyA9IDE7CQkJCS8qIEZsYWcgd2UgbXVz dCBzZW5kIFggcGFja2V0LiAqLwotICAgIGNrc3RybmNweShjbWRzdHIsIndobyIsQ01EU1RSTCk7 CS8qIERhdGEgZm9yIFggcGFja2V0LiAqLwotICAgIGZpcnN0ID0gMTsJCQkJLyogSW5pdCBnZXRj aHggbG9va2FoZWFkICovCi0gICAgbWVtc3RyID0gMTsJCQkJLyogSnVzdCBzZXQgdGhlIGZsYWcu ICovCi0jaWZkZWYgTlQKLSAgICBtZW1wdHIgPSAiXDE1XDEySzk1IFNFUlZFUlwxNVwxMiI7CS8q IEFuZCB0aGUgcG9pbnRlci4gKi8KLSNlbHNlCi0gICAgbWVtcHRyID0gIlwxNVwxMksvMiBTRVJW RVJcMTVcMTIiOwotI2VuZGlmIC8qIE5UICovCi0gICAgYmluYXJ5ID0gWFlGVF9UOwkJCS8qIFVz ZSB0ZXh0IG1vZGUgKi8KLSAgICByZXR1cm4oc2luaXQoKSk7Ci0jZWxzZQotICAgIHJldHVybigw KTsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotI2VuZGlmIC8qIE9TMiAqLwotCi0vKiAgQyBX IEQgIC0tICBDaGFuZ2Ugc2VydmVyJ3Mgd29ya2luZyBkaXJlY3RvcnkgICovCi0KLS8qCi0gU3Ry aW5nIHBhc3NlZCBoYXMgZmlyc3QgYnl0ZSBhcyBsZW5ndGggb2YgZGlyZWN0b3J5IG5hbWUsIHJl c3Qgb2Ygc3RyaW5nCi0gaXMgbmFtZS4gIFJldHVybnM6Ci0gIDAgb24gZmFpbHVyZS4KLSAgMSBv biBzdWNjZXNzIGFmdGVyIHNlbmRpbmcgc2hvcnQtZm9ybSByZXNwb25zZSAoQUNLIHdpdGggbmFt ZSkuCi0gIDIgb24gc3VjY2VzcyBpZiBhIENEIE1lc3NhZ2UgZmlsZSBpcyB0byBiZSBzZW50Lgot Ki8KLWludAotY3dkKHZkaXIpIGNoYXIgKnZkaXI7IHsKLSAgICBjaGFyICpjZGQsICpkaXJwOwot Ci0gICAgdmRpclt4dW5jaGFyKCp2ZGlyKSArIDFdID0gJ1wwJzsJLyogVGVybWluYXRlIHN0cmlu ZyB3aXRoIGEgbnVsbCAqLwotICAgIGRpcnAgPSB2ZGlyKzE7Ci0gICAgdGxvZyhGMTEwLCJEaXJl Y3RvcnkgcmVxdWVzdGVkOiAiLGRpcnAsMEwpOwotICAgIGlmICh6Y2hkaXIoZGlycCkpIHsJCQkv KiBUcnkgdG8gY2hhbmdlICovCi0JY2RkID0gemd0ZGlyKCk7CQkJLyogR2V0IG5ldyB3b3JraW5n IGRpcmVjdG9yeS4gKi8KLQlkZWJ1ZyhGMTEwLCJjd2QiLGNkZCwwKTsKLQlpZiAoc3J2Y2Rtc2cp IHsJCQkvKiBTZW5kIG9yaWVudGF0aW9uIGZpbGU/ICovCi0JICAgIGludCBpOwotCSAgICBmb3Ig KGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWlmICh6Y2hraShjZG1zZ2ZpbGVbaV0pID4gLTEpIHsK LQkJICAgIHh4c2NyZWVuKFNDUl9DRCwwLDBsLGNkZCk7Ci0JCSAgICB0bG9nKEYxMTAsIkNoYW5n ZWQgZGlyZWN0b3J5IHRvIixjZGQsMEwpOwotCQkgICAgcmV0dXJuKDIpOwotCQl9Ci0JICAgIH0K LQl9Ci0JZW5jc3RyKChDSEFSICopY2RkKTsJCS8qIFNlbmQgc2hvcnQtZm9ybSByZXBseSAqLwot CWFjazEoZGF0YSk7CQkJLyogY29udGFpbmluZyBkaXJlY3RvcnkgbmFtZS4gKi8KLQl4eHNjcmVl bihTQ1JfQ0QsMCwwbCxjZGQpOwotCXRsb2coRjExMCwiQ2hhbmdlZCBkaXJlY3RvcnkgdG8iLGNk ZCwwTCk7Ci0JcmV0dXJuKDEpOwotICAgIH0gZWxzZSB7Ci0JZGVidWcoRjExMCwiY3dkIGZhaWxl ZCIsZGlycCwwKTsKLQl0bG9nKEYxMTAsIkZhaWxlZCB0byBjaGFuZ2UgZGlyZWN0b3J5IHRvIixk aXJwLDBMKTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotfQotCi0KLS8qICBTIFkgUyBDIE0gRCAgLS0g IERvIGEgc3lzdGVtIGNvbW1hbmQgICovCi0KLS8qICBDb21tYW5kIHN0cmluZyBpcyBmb3JtZWQg YnkgY29uY2F0ZW5hdGluZyB0aGUgdHdvIGFyZ3VtZW50cy4gICovCi0KLWludAotc3lzY21kKHBy ZWZpeCxzdWZmaXgpIGNoYXIgKnByZWZpeCwgKnN1ZmZpeDsgewotICAgIGV4dGVybiBpbnQgaV9p c29wZW47Ci0jaWZuZGVmIE5PUFVTSAotICAgIGNoYXIgKmNwOwotCi0gICAgaV9pc29wZW4gPSAw OwotICAgIGlmICghcHJlZml4KQotICAgICAgcmV0dXJuKDApOwotICAgIGlmICghKnByZWZpeCkK LSAgICAgIHJldHVybigwKTsKLSAgICBmb3IgKGNwID0gY21kc3RyOyAqcHJlZml4ICE9ICdcMCc7 ICgqY3ArKyA9ICpwcmVmaXgrKykpOwotICAgIHdoaWxlICgoKmNwKysgPSAqc3VmZml4KyspKQot I2lmZGVmIE9TMgotICAgICAgICAvKiBUaGlzIHRha2VzIGF3YXkgbW9yZSB0aGFuIHdlIGdhaW4g aW4gY29udmVuaWVuY2UKLSAgICAgICAgaWYgKCooY3AtMSkgPT0gJy8nKSAqKGNwLTEpID0gJ1xc JyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgOwkJCQkJLyogQ29weSBzdWZmaXggKi8KLQot ICAgIGRlYnVnKEYxMTAsInN5c2NtZCIsY21kc3RyLDApOwotCi0gICAgaWYgKHp4Y21kKFpJRklM RSxjbWRzdHIpID4gMCkgewotICAgIAlkZWJ1ZyhGMTEwLCJzeXNjbWQgenhjbWQgb2siLGNtZHN0 ciwwKTsKLQluZmlscyA9IHNuZHNyYyA9IDA7CQkvKiBGbGFnIHRoYXQgaW5wdXQgaXMgZnJvbSBz dGRpbiAqLwotICAgIAl4ZmxnID0gaGNmbGcgPSAxOwkJLyogQW5kIHNwZWNpYWwgZmxhZ3MgZm9y IHBpcGUgKi8KLQliaW5hcnkgPSBYWUZUX1Q7CQkvKiBHbyB0byB0ZXh0IG1vZGUgKi8KLQlpX2lz b3BlbiA9IDE7Ci0gICAgCXJldHVybiAoc2luaXQoKSk7CQkvKiBTZW5kIFMgcGFja2V0ICovCi0g ICAgfSBlbHNlIHsKLSAgICAJZGVidWcoRjEwMCwic3lzY21kIHp4Y21kIGZhaWxlZCIsY21kc3Ry LDApOwotCWlfaXNvcGVuID0gMDsKLSAgICAJcmV0dXJuKDApOwotICAgIH0KLSNlbHNlCi0gICAg ZGVidWcoRjEwMCwic3lzY21kIHp4Y21kIE5PUFVTSCIsY21kc3RyLDApOwotICAgIGlfaXNvcGVu ID0gMDsKLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTk9QVVNIICovCi19Ci0KLS8qICBSIEUg TSBTIEUgVCAgLS0gIFJlbW90ZSBTZXQgICovCi0vKiAgQ2FsbGVkIGJ5IHNlcnZlciB0byBzZXQg dmFyaWFibGVzIGFzIGNvbW1hbmRlZCBpbiBSRU1PVEUgU0VUIHBhY2tldHMuICAqLwotLyogIFJl dHVybnMgMSBvbiBzdWNjZXNzLCAwIG9uIGZhaWx1cmUuICAqLwotCi1pbnQKLXJlbXNldChzKSBj aGFyICpzOyB7Ci0gICAgZXh0ZXJuIGludCBjX3NhdmUsIGVuX2RlbDsKLSAgICBpbnQgbGVuLCBp LCB4LCB5OwotICAgIGNoYXIgKnA7Ci0KLSAgICBsZW4gPSB4dW5jaGFyKCpzKyspOwkJLyogTGVu Z3RoIG9mIGZpcnN0IGZpZWxkICovCi0gICAgcCA9IHMgKyBsZW47CQkJLyogUG9pbnRlciB0byBz ZWNvbmQgbGVuZ3RoIGZpZWxkICovCi0gICAgKnArKyA9ICdcMCc7CQkJLyogWmVybyBvdXQgc2Vj b25kIGxlbmd0aCBmaWVsZCAqLwotICAgIHggPSBhdG9pKHMpOwkJCS8qIFZhbHVlIG9mIGZpcnN0 IGZpZWxkICovCi0gICAgZGVidWcoRjExMSwicmVtc2V0IixzLHgpOwotICAgIGRlYnVnKEYxMTAs InJlbXNldCIscCwwKTsKLSAgICBzd2l0Y2ggKHgpIHsJCQkvKiBEbyB0aGUgcmlnaHQgdGhpbmcg Ki8KLSAgICAgIGNhc2UgMTMyOgkJCQkvKiBBdHRyaWJ1dGVzIChhbGwsIGluKSAqLwotCWF0Y2Fw ciA9IGF0b2kocCk7Ci0JcmV0dXJuKDEpOwotICAgICAgY2FzZSAxMzM6CQkJCS8qIEZpbGUgbGVu Z3RoIGF0dHJpYnV0ZXMgKi8KLSAgICAgIGNhc2UgMjMzOgkJCQkvKiBJTi9PVVQgY29tYmluZWQg Ki8KLSAgICAgIGNhc2UgMTQ4OgkJCQkvKiBCb3RoIGtpbmRzIG9mIGxlbmd0aHMgKi8KLSAgICAg IGNhc2UgMjQ4OgotCWF0bGVuaSA9IGF0bGVubyA9IGF0b2kocCk7Ci0JcmV0dXJuKDEpOwotICAg ICAgY2FzZSAxMzQ6CQkJCS8qIEZpbGUgVHlwZSAodGV4dC9iaW5hcnkpICovCi0gICAgICBjYXNl IDIzNDoKLQlhdHR5cGkgPSBhdHR5cG8gPSBhdG9pKHApOwotCXJldHVybigxKTsKLSAgICAgIGNh c2UgMTM1OgkJCQkvKiBGaWxlIGNyZWF0aW9uIGRhdGUgKi8KLSAgICAgIGNhc2UgMjM1OgotCWF0 ZGF0aSA9IGF0ZGF0byA9IGF0b2kocCk7Ci0JcmV0dXJuKDEpOwotICAgICAgY2FzZSAxMzk6CQkJ CS8qIEZpbGUgQmxvY2tzaXplICovCi0gICAgICBjYXNlIDIzOToKLQlhdGJsa2kgPSBhdGJsa28g PSBhdG9pKHApOwotCXJldHVybigxKTsKLSAgICAgIGNhc2UgMTQxOgkJCQkvKiBFbmNvZGluZyAv IENoYXJhY3RlciBTZXQgKi8KLSAgICAgIGNhc2UgMjQxOgotCWF0ZW5jaSA9IGF0ZW5jbyA9IGF0 b2kocCk7Ci0JcmV0dXJuKDEpOwotICAgICAgY2FzZSAxNDI6CQkJCS8qIERpc3Bvc2l0aW9uICov Ci0gICAgICBjYXNlIDI0MjoKLQlhdGRpc2kgPSBhdGRpc28gPSBhdG9pKHApOwotCXJldHVybigx KTsKLSAgICAgIGNhc2UgMTQ1OgkJCQkvKiBTeXN0ZW0gSUQgKi8KLSAgICAgIGNhc2UgMjQ1Ogot CWF0c2lkaSA9IGF0c2lkbyA9IGF0b2kocCk7Ci0JcmV0dXJuKDEpOwotICAgICAgY2FzZSAxNDc6 CQkJCS8qIFN5c3RlbS1EZXBlbmRlbnQgSW5mbyAqLwotICAgICAgY2FzZSAyNDc6Ci0JYXRzeXNp ID0gYXRzeXNvID0gYXRvaShwKTsKLQlyZXR1cm4oMSk7Ci0gICAgICBjYXNlIDIzMjoJCQkJLyog QXR0cmlidXRlcyAoYWxsLCBvdXQpICovCi0JYXRjYXByID0gYXRvaShwKTsKLQlyZXR1cm4oMSk7 Ci0gICAgICBjYXNlIDMwMDoJCQkJLyogRmlsZSB0eXBlICh0ZXh0LCBiaW5hcnkpICovCi0JYmlu YXJ5ID0gYXRvaShwKTsKLQliX3NhdmUgPSBiaW5hcnk7Ci0jaWZuZGVmIE5PSUNQCi0JZ19iaW5h cnkgPSAtMTsKLSNlbmRpZiAvKiBOT0lDUCAqLwotCXJldHVybigxKTsKLSAgICAgIGNhc2UgMzAx OgkJCQkvKiBGaWxlIG5hbWUgY29udmVyc2lvbiAqLwotCWZuY252ID0gMSAtIGF0b2kocCk7CQkv KiAob29wcykgKi8KLQlmX3NhdmUgPSBmbmNudjsKLSNpZm5kZWYgTk9JQ1AKLQlnX2ZuY252ID0g LTE7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLQlyZXR1cm4oMSk7Ci0gICAgICBjYXNlIDMwMjoJCQkJ LyogRmlsZSBuYW1lIGNvbGxpc2lvbiAqLwotI2lmZGVmIElLU0QKLSNpZmRlZiBDS19MT0dJTgot CWlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KQkvKiBNYXkgbm90IGJlIGNoYW5nZWQgYnkgZ3Vlc3Qg Ki8KLQkgIHJldHVybigwKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0Qg Ki8KLQl4ID0gYXRvaShwKTsKLQlpZiAoIUVOQUJMRUQoZW5fZGVsKSAmJiAoeCA9PSBYWUZYX1gg fHwgeCA9PSBYWUZYX1UpKQotCSAgcmV0dXJuKDApOwotCWlmICh4ID09IFhZRlhfUikgY2t3YXJu ID0gMTsJLyogUmVuYW1lICovCi0JaWYgKHggPT0gWFlGWF9YKSBja3dhcm4gPSAwOwkvKiBSZXBs YWNlICovCi0JZm5jYWN0ID0geDsKLQlyZXR1cm4oMSk7Ci0gICAgICBjYXNlIDMxMDoJCQkJLyog SW5jb21wbGV0ZSBGaWxlIERpc3Bvc2l0aW9uICovCi0Ja2VlcCA9IGF0b2kocCk7CQkJLyogS2Vl cCwgRGlzY2FyZCwgQXV0byAqLwotCXJldHVybigxKTsKLSAgICAgIGNhc2UgMzExOgkJCQkvKiBC bG9ja3NpemUgKi8KLQlmYmxrc2l6ID0gYXRvaShwKTsKLQlyZXR1cm4oMSk7Ci0gICAgICBjYXNl IDMxMjoJCQkJLyogUmVjb3JkIExlbmd0aCAqLwotCWZyZWNsID0gYXRvaShwKTsKLQlyZXR1cm4o MSk7Ci0gICAgICBjYXNlIDMxMzoJCQkJLyogUmVjb3JkIGZvcm1hdCAqLwotCWZyZWNmbSA9IGF0 b2kocCk7Ci0JcmV0dXJuKDEpOwotICAgICAgY2FzZSAzMTQ6CQkJCS8qIEZpbGUgb3JnYW5pemF0 aW9uICovCi0JZm9yZyA9IGF0b2kocCk7Ci0JcmV0dXJuKDEpOwotICAgICAgY2FzZSAzMTU6CQkJ CS8qIEZpbGUgY2FycmlhZ2UgY29udHJvbCAqLwotCWZjY3RybCA9IGF0b2kocCk7Ci0JcmV0dXJu KDEpOwotICAgICAgY2FzZSAzMzA6CQkJCS8qIE1hdGNoIGRvdGZpbGVzICovCi0jaWZuZGVmIE5P SUNQCi0JZGlyX2RvdHMgPSAtMTsJCQkvKiBUaGlzIHVuZG9lcyBESVIgL0RPVCBvcHRpb24gKi8K LSNlbmRpZiAvKiBOT0lDUCAqLwotCW1hdGNoZG90ID0gYXRvaShwKTsKLQlyZXR1cm4oMSk7Ci0g ICAgICBjYXNlIDMzMToJCQkJLyogTWF0Y2ggRklGT3MgKi8KLQltYXRjaGZpZm8gPSBhdG9pKHAp OwotCXJldHVybigxKTsKLSAgICAgIGNhc2UgNDAwOgkJCQkvKiBCbG9jayBjaGVjayAqLwotCXkg PSBhdG9pKHApOwotCWlmICh5IDwgNSAmJiB5ID4gMCkgewotCSAgICBiY3RyID0geTsKLQkgICAg Y19zYXZlID0gLTE7Ci0JICAgIHJldHVybigxKTsKLQl9IGVsc2UgaWYgKCpwID09ICdCJykgewot CSAgICBiY3RyID0gNDsKLQkgICAgY19zYXZlID0gLTE7Ci0JICAgIHJldHVybigxKTsKLQl9IGVs c2UgaWYgKCpwID09ICc1JykgewotCSAgICBiY3RyID0gMzsKLQkgICAgY19zYXZlID0gLTE7Ci0J ICAgIHJldHVybigxKTsKLQl9Ci0JcmV0dXJuKDApOwotICAgICAgY2FzZSA0MDE6CQkJCS8qIFJl Y2VpdmUgcGFja2V0LWxlbmd0aCAqLwotCXJwc2l6ID0gdXJwc2l6ID0gYXRvaShwKTsKLQlpZiAo dXJwc2l6ID4gTUFYUlApIHVycHNpeiA9IE1BWFJQOyAvKiBNYXggbG9uZy1wYWNrZXQgbGVuZ3Ro ICovCi0JaWYgKHJwc2l6ID4gOTQpIHJwc2l6ID0gOTQ7CSAgICAvKiBNYXggc2hvcnQtcGFja2V0 IGxlbmd0aCAqLwotCXVycHNpeiA9IGFkanBrbCh1cnBzaXosd3Nsb3RzLGJpZ3Jic2l6KTsKLQly ZXR1cm4oMSk7Ci0gICAgICBjYXNlIDQwMjoJCQkJLyogUmVjZWl2ZSB0aW1lb3V0ICovCi0JeSA9 IGF0b2kocCk7CQkJLyogQ2xpZW50IGlzIHRlbGxpbmcgdXMgKi8KLQlpZiAoeSA+IC0xICYmIHkg PCA5OTkpIHsJLyogdGhlIHRpbWVvdXQgdGhhdCBpdCB3YW50cyAqLwotCSAgICBwa3R0aW0gPSBj aGt0aW1vKHksdGltZWYpOwkvKiB1cyB0byB0ZWxsIGl0IHRvIHVzZS4gKi8KLQkgICAgcmV0dXJu KDEpOwotCX0gZWxzZSByZXR1cm4oMCk7Ci0gICAgICBjYXNlIDQwMzoJCQkJLyogUmV0cnkgbGlt aXQgKi8KLQl5ID0gYXRvaShwKTsKLQlpZiAoeSA+IC0xICYmIHkgPCA5NSkgewotCSAgICBtYXh0 cnkgPSB5OwotCSAgICByZXR1cm4oMSk7Ci0JfSBlbHNlIHJldHVybigwKTsKLSAgICAgIGNhc2Ug NDA0OgkJCQkvKiBTZXJ2ZXIgdGltZW91dCAqLwotCXkgPSBhdG9pKHApOwotCWlmICh5IDwgMCkg cmV0dXJuKDApOwotCXNydnRpbSA9IHk7Ci0JcmV0dXJuKDEpOwotCi0jaWZuZGVmIE5PQ1NFVFMK LSAgICAgIGNhc2UgNDA1OiB7CQkJCS8qIFRyYW5zZmVyIGNoYXJhY3RlciBzZXQgKi8KLQkgIGV4 dGVybiBpbnQgc19jc2V0LCBheGNzZXRbXTsKLQkgIGludCBpOwotCSAgZm9yIChpID0gMDsgaSA8 IG50Y3NldHM7IGkrKykgewotCSAgICAgIGlmICghc3RyY21wKHRjc2luZm9baV0uZGVzaWduYXRv cixwKSkgYnJlYWs7Ci0JICB9Ci0JICBkZWJ1ZyhGMTAxLCJyZW1zZXQgdGNoYXJzZXQgbG9va3Vw IiwiIixpKTsKLQkgIGlmIChpID09IG50Y3NldHMpIHJldHVybigwKTsKLQkgIHRjaGFyc2V0ID0g dGNzaW5mb1tpXS5jb2RlOwkvKiBJZiBrbm93biwgdXNlIGl0ICovCi0JICBkZWJ1ZyhGMTAxLCJy ZW1zZXQgdGNoYXJzZXQiLCIiLHRjaGFyc2V0KTsKLQkgIGlmIChzX2NzZXQgPT0gWE1PREVfQSkK LQkgICAgaWYgKGF4Y3NldFt0Y2hhcnNldF0gPiAtMSAmJiBheGNzZXRbdGNoYXJzZXRdID4gTUFY RkNTRVRTKQotCSAgICAgIGZjaGFyc2V0ID0gYXhjc2V0W3RjaGFyc2V0XTsgLyogQXV0by1waWNr IGZpbGUgY2hhcnNldCAqLwotCSAgZGVidWcoRjEwMSwicmVtc2V0IHRjaGFyc2V0IGZjaGFyc2V0 IiwiIixmY2hhcnNldCk7Ci0JICBzZXR4bGF0eXBlKHRjaGFyc2V0LGZjaGFyc2V0KTsgLyogU2V0 IHVwIGNoYXJzZXQgdHJhbnNsYXRpb25zICovCi0JICBkZWJ1ZyhGMTAxLCJyZW1zZXQgeGxhdHlw ZSIsIiIseGxhdHlwZSk7Ci0JICBkZWJ1ZyhGMTAxLCJyZW1zZXQgdGNoYXJzZXQgYWZ0ZXIgc2V0 eGxhdHlwZSIsIiIsdGNoYXJzZXQpOwotCSAgdGNzX3NhdmUgPSAtMTsKLQkgIHJldHVybigxKTsK LSAgICAgIH0KLSAgICAgIGNhc2UgMzIwOiB7CQkJLyogRmlsZSBjaGFyYWN0ZXIgc2V0ICovCi0J ICBleHRlcm4gc3RydWN0IGtleXRhYiBmY3N0YWJbXTsKLQkgIGV4dGVybiBpbnQgbmZpbGMsIHNf Y3NldCwgcl9jc2V0OwotCSAgeCA9IGxvb2t1cChmY3N0YWIscCxuZmlsYywmeSk7Ci0JICBkZWJ1 ZyhGMTExLCJSU0VUIEZJTEUgQ0hBUiBuYW1lIixwLHgpOwotCSAgaWYgKHggPCAwKQotCSAgICBy ZXR1cm4oMCk7Ci0JICBzX2NzZXQgPSBYTU9ERV9NOwkJLyogTm8gYXV0b21hdGljIGNoYXJzZXQg c3dpdGNoaW5nICovCi0JICByX2NzZXQgPSBYTU9ERV9NOwotCSAgZmNoYXJzZXQgPSB4OwkJCS8q IFNldCBmaWxlIGNoYXJzZXQgKi8KLQkgIHNldHhsYXR5cGUodGNoYXJzZXQsZmNoYXJzZXQpOyAv KiBhbmQgdHJhbnNsYXRpb24gdHlwZSAqLwotCSAgZmNzX3NhdmUgPSAtMTsKLQkgIHJldHVybigx KTsKLSAgICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSAgICAgIGNhc2UgNDA2OgkJCQkv KiBXaW5kb3cgc2xvdHMgKi8KLQl5ID0gYXRvaShwKTsKLQlpZiAoeSA9PSAwKSB5ID0gMTsKLQlp ZiAoeSA8IDEgfHwgeSA+IE1BWFdTKSByZXR1cm4oMCk7Ci0Jd3Nsb3RyID0geTsKLQlzd2NhcHIg PSAxOwotCXVycHNpeiA9IGFkanBrbCh1cnBzaXosd3Nsb3RyLGJpZ3Jic2l6KTsKLQlyZXR1cm4o MSk7Ci0KLSAgICAgIGNhc2UgNDEwOgkJCQkvKiBUcmFuc2ZlciBtb2RlICovCi0JeSA9IGF0b2ko cCk7CQkJLyogMCA9IGF1dG9tYXRpYywgbm9uemVybyA9IG1hbnVhbCAqLwotCWlmICh5ICE9IDAp IHkgPSAxOwotCXhmZXJtb2RlID0geTsKLQlkZWJ1ZyhGMTAxLCJSRU1PVEUgU0VUIHhmZXJtb2Rl IiwiIix4ZmVybW9kZSk7Ci0JcmV0dXJuKDEpOwotCi0gICAgICBjYXNlIDQyMDoJCQkJLyogU0VS VkVSIENELU1FU1NBR0UgeyBPTiwgT0ZGIH0gKi8KLQl5ID0gYXRvaShwKTsJCQkvKiAwID0gYXV0 b21hdGljLCBub256ZXJvID0gbWFudWFsICovCi0Jc3J2Y2Rtc2cgPSB5OwotCXJldHVybigxKTsK LQotICAgICAgZGVmYXVsdDoJCQkJLyogQW55dGhpbmcgZWxzZS4uLiAqLwotCXJldHVybigwKTsK LSAgICB9Ci19Ci0KLS8qIEFkanVzdCBwYWNrZXQgbGVuZ3RoIGJhc2VkIG9uIG51bWJlciBvZiB3 aW5kb3cgc2xvdHMgYW5kIGJ1ZmZlciBzaXplICovCi0KLWludAotYWRqcGtsKHBrdGxlbixzbG90 cyxidWZzaXopIGludCBwa3RsZW4sIHNsb3RzLCBidWZzaXo7IHsKLSAgICBpZiAocHJvdG9jb2wg IT0gUFJPVE9fSykgcmV0dXJuKHBrdGxlbik7Ci0gICAgZGVidWcoRjEwMSwiYWRqcGtsIGxlbiIs IiIscGt0bGVuKTsKLSAgICBkZWJ1ZyhGMTAxLCJhZGpwa2wgc2xvdHMiLCIiLHNsb3RzKTsKLSAg ICBkZWJ1ZyhGMTAxLCJhZGpwa2wgYnVmc2l6IiwiIixidWZzaXopOwotICAgIGlmICgoKHBrdGxl biArIDYpICogc2xvdHMpID4gYnVmc2l6KQotICAgICAgcGt0bGVuID0gKGJ1ZnNpeiAvIHNsb3Rz KSAtIDY7Ci0gICAgZGVidWcoRjEwMSwiYWRqcGtsIG5ldyBsZW4iLCIiLHBrdGxlbik7Ci0gICAg cmV0dXJuKHBrdGxlbik7Ci19Ci0KLS8qIFNldCB0cmFuc2ZlciBtb2RlIGFuZCBmaWxlIG5hbWlu ZyBiYXNlZCBvbiBjb21wYXJpc29uIG9mIHN5c3RlbSB0eXBlcyAqLwotCi0KLVZPSUQKLXdob2Fy ZXdlKCkgewotI2lmbmRlZiBOT0lDUAotICAgIGV4dGVybiBpbnQgZ194ZmVybW9kZTsKLSNlbmRp ZiAvKiBOT0lDUCAqLwotCi0gICAgd2VhcmVhbGlrZSA9IDA7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJ3 aG9hcmV3ZSB4ZmVybW9kZSIsIiIseGZlcm1vZGUpOwotI2lmbmRlZiBOT0lDUAotICAgIGRlYnVn KEYxMDEsIndob2FyZXdlIGdfeGZlcm1vZGUiLCIiLGdfeGZlcm1vZGUpOwotI2VuZGlmIC8qIE5P SUNQICovCi0gICAgaWYgKHdob2FyZXVbMF0pIHsJCQkvKiBJZiB3ZSBrbm93IHBhcnRuZXIncyBz eXN0ZW0gdHlwZSAqLwotCWNoYXIgKiBwID0gKGNoYXIgKil3aG9hcmV1OwotCWRlYnVnKEYxMTAs Indob2FyZXdlIHJlbW90ZSBzeXNpZCIsd2hvYXJldSwwKTsKLQlpZiAoIXN0cmNtcChwLGNrc3lz aWQpKQkJLyogT3RoZXIgc3lzdGVtIHNhbWUgYXMgdXMgKi8KLQkgIHdlYXJlYWxpa2UgPSAxOwot Ci0jaWZkZWYgVU5JWAotCWVsc2UgaWYgKCFzdHJjbXAocCwiTDMiKSkJLyogVU5JWCBpcyBzb3J0 IG9mIGxpa2UgQW1pZ2FET1MgKi8KLQkgIHdlYXJlYWxpa2UgPSAxOwkJLyogKHNhbWUgZGlyZWN0 b3J5IHNlcGFyYXRvcikgKi8KLQllbHNlIGlmICghc3RyY21wKHAsIk4zIikpCS8qIFVOSVggbGlr ZSBBZWdpcyAqLwotCSAgd2VhcmVhbGlrZSA9IDE7Ci0jZWxzZQotI2lmZGVmIEFNSUdBCi0vKiBM aWtlIFVOSVgsIGJ1dCBjYXNlIGRpc3RpbmN0aW9ucyBhcmUgaWdub3JlZCBhbmQgY2FuIGJlZ2lu IHdpdGggZGV2aWNlOi4gKi8KLQllbHNlIGlmICghc3RyY21wKHAsIlUxIikpCS8qIEFtaWdhIGlz IHNvcnQgb2YgbGlrZSBVTklYICovCi0JICB3ZWFyZWFsaWtlID0gMTsKLQllbHNlIGlmICghc3Ry Y21wKHAsIk4zIikpCS8qIEFtaWdhIGlzIHNvcnQgb2YgbGlrZSBBZWdpcyAqLwotCSAgd2VhcmVh bGlrZSA9IDE7Ci0jZWxzZQotI2lmZGVmIE9TMgkJCQkvKiAoSW5jbHVkZXMgV2luZG93cyA5NS9O VCkgKi8KLQotCS8qIERPUywgR0VNRE9TLCBXaW5kb3dzIDMueCwgV2luZG93cyA5NSwgV2luZG93 cyBOVCAqLwotCS8qIEFsbCAidGhlIHNhbWUiIGZvciBGQVQgcGFydGl0aW9ucyBidXQgYWxsIGJl dHMgb2ZmIG90aGVyd2lzZSAqLwotCS8qIHNvIHRoaXMgcGFydCBuZWVkcyBzb21lIHJlZmluZW1l bnQgLi4uICAqLwotCi0JZWxzZSBpZiAoIXN0cmNtcChwLCJVOCIpKQkvKiBNUy1ET1MgKi8KLQkg IHdlYXJlYWxpa2UgPSAxOwotCWVsc2UgaWYgKCFzdHJjbXAocCwiVU8iKSkJLyogT1MvMiAqLwot CSAgd2VhcmVhbGlrZSA9IDE7Ci0JZWxzZSBpZiAoIXN0cmNtcChwLCJVTiIpKQkvKiBXaW5kb3dz IE5UIG9yIDk1ICovCi0JICB3ZWFyZWFsaWtlID0gMTsKLQllbHNlIGlmICghc3RyY21wKHAsIksy IikpCS8qIEdFTURPUyAqLwotCSAgd2VhcmVhbGlrZSA9IDE7Ci0jZWxzZQotI2lmZGVmIEdFTURP UwotCWVsc2UgaWYgKCFzdHJjbXAocCwiVTgiKSkKLQkgIHdlYXJlYWxpa2UgPSAxOwotCWVsc2Ug aWYgKCFzdHJjbXAocCwiVU8iKSkKLQkgIHdlYXJlYWxpa2UgPSAxOwotCWVsc2UgaWYgKCFzdHJj bXAocCwiVU4iKSkKLQkgIHdlYXJlYWxpa2UgPSAxOwotCWVsc2UgaWYgKCFzdHJjbXAocCwiSzIi KSkKLQkgIHdlYXJlYWxpa2UgPSAxOwotI2VuZGlmIC8qIEdFTURPUyAqLwotI2VuZGlmIC8qIE9T MiAqLwotI2VuZGlmIC8qIEFNSUdBICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0JLyogR2V0IGhl cmUgd2l0aCB3ZWFyZWFsaWtlID09IDEgaWYgc3lzdGVtIHR5cGVzIG1hdGNoICovCi0KLQlkZWJ1 ZyhGMTAxLCJ3aG9hcmV3ZSB3ZWFyZWFsaWtlIiwiIix3ZWFyZWFsaWtlKTsKLQlpZiAoIXdlYXJl YWxpa2UpCQkvKiBOb3QgYWxpa2UgKi8KLQkgIHJldHVybjsKLQotCWZuY252ID0gWFlGTl9MOwkJ CS8qIEFsaWtlLCBzbyBsaXRlcmFsIGZpbGVuYW1lcyAqLwotCWRlYnVnKEYxMDEsIndob2FyZXdl IHNldHRpbmcgZm5jbnYiLCIiLGZuY252KTsKLQotCWlmICh4ZmVybW9kZSA9PSBYTU9ERV9BKSB7 CS8qIEN1cnJlbnQgeGZlciBtb2RlIGlzIGF1dG8gKi8KLSNpZmRlZiBWTVMKLQkgICAgYmluYXJ5 ID0gWFlGVF9MOwkJLyogRm9yIFZNUy10by1WTVMsIHVzZSBsYWJlbGVkICovCi0jZWxzZQotI2lm ZGVmIE9TMgotCSAgICAvKiBPUy8yIGJ1dCBub3QgV2luZG93cyAqLwotCSAgICBpZiAoIXN0cmNt cChja3N5c2lkLCJVTyIpICYmICFzdHJjbXAoKGNoYXIgKil3aG9hcmV1LCJVTyIpKQotCSAgICAg IGJpbmFyeSA9IFhZRlRfTDsJCS8qIEZvciBPUy8yLXRvLU9TLzIsIHVzZSBsYWJlbGVkICovCi0j ZWxzZQotCSAgICBiaW5hcnkgPSBYWUZUX0I7CQkvKiBGb3IgYWxsIG90aGVycyB1c2UgYmluYXJ5 ICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVk1TICovCi0JICAgIGduZl9iaW5hcnkg PSBiaW5hcnk7CS8qIFByZXZhaWxpbmcgdHlwZSBmb3IgZ25maWxlKCkgKi8KLQkgICAgZGVidWco RjEwMSwid2hvYXJld2Ugc2V0dGluZyBiaW5hcnkiLCIiLGJpbmFyeSk7Ci0JfQotICAgIH0KLX0K LSNlbmRpZiAvKiBOT1hGRVIgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrY2Z0cC5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja2NmdHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZjNzk0MC4u MDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2Z0 cC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc2NTQgKzAsMCBAQAotI2RlZmluZSBGVFBfVElNRU9V VAotCi0vKiAgQyBLIEMgRiBUIFAgIC0tICBGVFAgQ2xpZW50IGZvciBDLUtlcm1pdCAgKi8KLQot Y2hhciAqY2tmdHB2ID0gIkZUUCBDbGllbnQsIDkuMC4yNjAsIDE0IEp1bCAyMDExIjsKLQotLyoK LSAgQXV0aG9yczoKLSAgICBKZWZmcmV5IEUgQWx0bWFuIDxqYWx0bWFuQHNlY3VyZS1lbmRwb2lu dHMuY29tPgotICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5Ci0gICAg RnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCi0gICAgICBUaGUgS2VybWl0IFByb2pl Y3QsIENvbHVtYmlhIFVuaXZlcnNpdHkuCi0KLSAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDExLAot ICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlv cmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5U WFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxl IGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLQotICBQb3J0aW9ucyBvZiBjb25kaXRp b25hbGx5IGluY2x1ZGVkIGNvZGUgQ29weXJpZ2h0IFJlZ2VudHMgb2YgdGhlCi0gICAgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhIGFuZCBUaGUgU3RhbmZvcmQgU1JQIEF1dGhlbnRpY2F0aW9uIFBy b2plY3Q7Ci0gICAgc2VlIG5vdGljZXMgYmVsb3cuCi0qLwotCi0vKgotICBQZW5kaW5nLi4uCi0K LSAgLiBJbXBsZW1lbnQgcmVjdXJzaXZlIE5MU1QgZG93bmxvYWRzIGJ5IHRyeWluZyB0byBDRCB0 byBlYWNoIGZpbGVuYW1lLgotICAgIElmIGl0IHdvcmtzLCBpdCdzIGEgZGlyZWN0b3J5OyBpZiBu b3QsIGl0J3MgYSBmaWxlIC0tIEdFVCBpdC4gIEJ1dAotICAgIHRoYXQgd29uJ3Qgd29yayB3aXRo IHNlcnZlcnMgbGlrZSB3dS1mdHBkIHRoYXQgZG9uJ3Qgc2VuZCBkaXJlY3RvcnkgCi0gICAgbmFt ZXMuICBSZWN1cnNpb24gd2l0aCBNTFNEIGlzIGRvbmUuCi0KLSAgLiBNYWtlIHN5c2xvZyBlbnRy aWVzIGZvciBzZXNzaW9uPyAgRmlsZXM/Ci0KLSAgLiBNZXNzYWdlcyBhcmUgcHJpbnRlZCB0byBz dGRvdXQgYW5kIHN0ZGVyciBpbiByYW5kb20gZmFzaGlvbi4gIFdlIHNob3VsZAotICAgIGVpdGhl ciBwcmludCBldmVyeXRoaW5nIHRvIHN0ZG91dCwgb3IgZWxzZSBiZSBzeXN0ZW1hdGljIGFib3V0 IHdoZW4KLSAgICB0byB1c2Ugc3RkZXJyLgotCi0gIC4gSW1wbGVtZW50IG1haWwgKE1BSUwsIE1M RkwsIE1TT00sIGV0YykgaWYgYW55IHNlcnZlcnMgc3VwcG9ydCBpdC4KLQotICAuIEFkYXB0IHRv IFZNUy4gIEJpZyBqb2IgYmVjYXVzZSBvZiBpdHMgcmVjb3JkLW9yaWVudGVkIGZpbGUgc3lzdGVt LgotICAgIFJNUyBwcm9ncmFtbWVyIHJlcXVpcmVkLiAgVGhlcmUgYXJlIHByb2JhYmx5IGFsc28g c29tZSBWTVMgVENQL0lQCi0gICAgcHJvZHVjdC1zcGVjaWZpYyB3cmlua2xlcywgZS5nLiBhdHRy aWJ1dGUgcHJlc2VydmF0aW9uIGluIFZNUy10by1WTVMKLSAgICB0cmFuc2ZlcnMgdXNpbmcgc3Bl Y2lhbCBvcHRpb25zIGZvciBNdWx0aW5ldCBvciBvdGhlciBGVFAgc2VydmVycwotICAgIChmaW5k IG91dCBhYm91dCBTVFJVIFZNUykuCi0qLwotCi0vKgotICBRdWljayBGVFAgY29tbWFuZCByZWZl cmVuY2U6Ci0KLSAgUkZDNzY1ICgxOTgwKSBhbmQgZWFybGllcjoKLSAgICBNT0RFICBTKHRyZWFt KSwgQihsb2NrKSwgQyhvbXByZXNzZWQpCi0gICAgU1RSVSAgRihJTEUpLCBSKEVDT1JEKSwgUChB R0UpCi0gICAgVFlQRSAgQShTQ0lJKSA8Zm9ybWF0PiwgIEUoQkNESUMpIDxmb3JtYXQ+LCBJKE1B R0UpLCBMKE9DQUwpIDxieXRlc2l6ZT4KLSAgICBQT1JUICAtIFBvcnQKLSAgICBQQVNWICAtIFBh c3NpdmUgbW9kZQotICAgIFVTRVIgIC0gVXNlcgotICAgIFBBU1MgIC0gUGFzc3dvcmQKLSAgICBB Q0NUICAtIEFjY291bnQKLSAgICBDV0QgICAtIENoYW5nZSBXb3JraW5nIERpcmVjdG9yeQotICAg IFJFSU4gIC0gTG9nb3V0IGJ1dCBub3QgZGlzY29ubmVjdAotICAgIFFVSVQgIC0gQnllCi0gICAg UkVUUiAgLSBSZXRyZWl2ZQotICAgIFNUT1IgIC0gU3RvcmUKLSAgICBBUFBFICAtIEFwcGVuZAot ICAgIEFMTE8gIC0gQWxsb2NhdGUKLSAgICBSRVNUICAtIFJlc3RhcnQKLSAgICBSTkZSICAtIFJl bmFtZSBmcm9tCi0gICAgUk5UTyAgLSBSZW5hbWUgdG8KLSAgICBBQk9SICAtIENhbmNlbAotICAg IERFTEUgIC0gRGVsZXRlCi0gICAgTElTVCAgLSBEaXJlY3RvcnkKLSAgICBOTFNUICAtIE5hbWUg TGlzdAotICAgIFNJVEUgIC0gU2l0ZSBwYXJhbWV0ZXJzIG9yIGNvbW1hbmRzCi0gICAgU1RBVCAg LSBTdGF0dXMKLSAgICBIRUxQICAtIEhlbHAKLSAgICBOT09QICAtIE5vb3AKLQotICBSRkM5NTkg KDE5ODUpOgotICAgIENEVVAgIC0gQ2hhbmdlIHRvIFBhcmVudCBEaXJlY3RvcnkKLSAgICBTTU5U ICAtIFN0cnVjdHVyZSBNb3VudAotICAgIFNUT1UgIC0gU3RvcmUgVW5pcXVlCi0gICAgUk1EICAg LSBSZW1vdmUgRGlyZWN0b3J5Ci0gICAgTUtEICAgLSBNYWtlIERpcmVjdG9yeQotICAgIFBXRCAg IC0gUHJpbnQgRGlyZWN0b3J5Ci0gICAgU1lTVCAgLSBTeXN0ZW0KLQotICBSRkMyMzg5ICgxOTk4 KToKLSAgICBGRUFUICAtIExpc3QgRmVhdHVyZXMgKGRvbmUpCi0gICAgT1BUUyAgLSBTZW5kIG9w dGlvbnMgKGRvbmUpCi0KLSAgUkZDMjY0MCAoMTk5OSk6Ci0gICAgTEFORyAgLSBTcGVjaWZ5IGxh bmd1YWdlIGZvciBtZXNzYWdlcyAobm90IGRvbmUpCi0KLSAgUGVuZGluZyAoSW50ZXJuZXQgRHJh ZnRzKToKLSAgICBTSVpFICAtIEZpbGUgc2l6ZSAoZG9uZSkKLSAgICBNRFRNICAtIEZpbGUgbW9k aWZpY2F0aW9uIGRhdGUtdGltZSAoZG9uZSkKLSAgICBNTFNUICAtIEZpbGUgbmFtZSBhbmQgYXR0 cmlidXRlIGxpc3QgKHNpbmdsZSBmaWxlKSAobm90IGRvbmUpCi0gICAgTUxTRCAgLSBGaWxlIGxp c3Qgd2l0aCBhdHRyaWJ1dGVzIChtdWx0aXBsZSBmaWxlcykgKGRvbmUpCi0gICAgTUFJTCwgTUxG TCwgTVNPTSAtIG1haWwgZGVsaXZlcnkgKG5vdCBkb25lKQotCi0gIEFscGhhYmV0aWNhbCBzeW50 YXggbGlzdDoKLSAgICBBQk9SIDxDUkxGPgotICAgIEFDQ1QgPFNQPiA8YWNjb3VudC1pbmZvcm1h dGlvbj4gPENSTEY+Ci0gICAgQUxMTyA8U1A+IDxkZWNpbWFsLWludGVnZXI+IFs8U1A+IFIgPFNQ PiA8ZGVjaW1hbC1pbnRlZ2VyPl0gPENSTEY+Ci0gICAgQVBQRSA8U1A+IDxwYXRobmFtZT4gPENS TEY+Ci0gICAgQ0RVUCA8Q1JMRj4KLSAgICBDV0QgIDxTUD4gPHBhdGhuYW1lPiA8Q1JMRj4KLSAg ICBERUxFIDxTUD4gPHBhdGhuYW1lPiA8Q1JMRj4KLSAgICBGRUFUIDxDUkxGPgotICAgIEhFTFAg WzxTUD4gPHN0cmluZz5dIDxDUkxGPgotICAgIExBTkcgWzxTUD4gPGxhbmd1YWdlLXRhZz4gXSA8 Q1JMRj4KLSAgICBMSVNUIFs8U1A+IDxwYXRobmFtZT5dIDxDUkxGPgotICAgIE1LRCAgPFNQPiA8 cGF0aG5hbWU+IDxDUkxGPgotICAgIE1MU0QgWzxTUD4gPHBhdGhuYW1lPl0gPENSTEY+Ci0gICAg TUxTVCBbPFNQPiA8cGF0aG5hbWU+XSA8Q1JMRj4KLSAgICBNT0RFIDxTUD4gPG1vZGUtY29kZT4g PENSTEY+Ci0gICAgTkxTVCBbPFNQPiA8cGF0aG5hbWUtb3Itd2lsZGNhcmQ+XSA8Q1JMRj4KLSAg ICBOT09QIDxDUkxGPgotICAgIE9QVFMgPFNQPiA8Y29tbWFuZG5hbWU+IFsgPFNQPiA8Y29tbWFu ZC1vcHRpb25zPiBdIDxDUkxGPgotICAgIFBBU1MgPFNQPiA8cGFzc3dvcmQ+IDxDUkxGPgotICAg IFBBU1YgPENSTEY+Ci0gICAgUE9SVCA8U1A+IDxob3N0LXBvcnQ+IDxDUkxGPgotICAgIFBXRCAg PENSTEY+Ci0gICAgUVVJVCA8Q1JMRj4KLSAgICBSRUlOIDxDUkxGPgotICAgIFJFU1QgPFNQPiA8 bWFya2VyPiA8Q1JMRj4KLSAgICBSRVRSIDxTUD4gPHBhdGhuYW1lPiA8Q1JMRj4KLSAgICBSTUQg IDxTUD4gPHBhdGhuYW1lPiA8Q1JMRj4KLSAgICBSTkZSIDxTUD4gPHBhdGhuYW1lPiA8Q1JMRj4K LSAgICBSTlRPIDxTUD4gPHBhdGhuYW1lPiA8Q1JMRj4KLSAgICBTSVRFIDxTUD4gPHN0cmluZz4g PENSTEY+Ci0gICAgU0laRSA8U1A+IDxwYXRobmFtZT4gPENSTEY+Ci0gICAgU01OVCA8U1A+IDxw YXRobmFtZT4gPENSTEY+Ci0gICAgU1RBVCBbPFNQPiA8cGF0aG5hbWU+XSA8Q1JMRj4KLSAgICBT VE9SIDxTUD4gPHBhdGhuYW1lPiA8Q1JMRj4KLSAgICBTVE9VIDxDUkxGPgotICAgIFNUUlUgPFNQ PiA8c3RydWN0dXJlLWNvZGU+IDxDUkxGPgotICAgIFNZU1QgPENSTEY+Ci0gICAgVFlQRSA8U1A+ IDx0eXBlLWNvZGU+IDxDUkxGPgotICAgIFVTRVIgPFNQPiA8dXNlcm5hbWU+IDxDUkxGPgotKi8K LSNpbmNsdWRlICJja2NzeW0uaCIgICAgICAgICAgICAgICAgICAgICAvKiBTdGFuZGFyZCBpbmNs dWRlcyAqLwotI2luY2x1ZGUgImNrY2RlYi5oIgotCi0jaWZuZGVmIE5PRlRQICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTk9GVFAgID0gbm8gRlRQICovCi0jaWZuZGVmIFNZU0ZUUCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU1lTRlRQID0gdXNlIGV4dGVybmFsIGZ0cCBjbGllbnQg Ki8KLSNpZmRlZiBUQ1BTT0NLRVQgICAgICAgICAgICAgICAgICAgICAgICAvKiBCdWlsZCBvbmx5 IGlmIFRDUC9JUCBpbmNsdWRlZCAqLwotI2RlZmluZSBDS0NGVFBfQwotCi0vKiBOb3RlOiBtdWNo IG9mIHRoZSBmb2xsb3dpbmcgZHVwbGljYXRlcyB3aGF0IHdhcyBkb25lIGluIGNrY2RlYi5oICov Ci0vKiBidXQgbGV0J3Mgbm90IG1lc3Mgd2l0aCBpdCB1bmxlc3MgaXQgY2F1c2VzIHRyb3VibGUu ICovCi0KLSNpZmRlZiBDS19BTlNJQwotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2Vsc2UgLyogQ0tf QU5TSUMgKi8KLSNpbmNsdWRlIDx2YXJhcmdzLmg+Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNp bmNsdWRlIDxzaWduYWwuaD4KLSNpZmRlZiBPUzIKLSNpZmRlZiBPUzJPTkxZCi0jaW5jbHVkZSA8 b3MyLmg+Ci0jZW5kaWYgLyogT1MyT05MWSAqLwotI2luY2x1ZGUgImNrb3dpbi5oIgotI2luY2x1 ZGUgImNrb2Nvbi5oIgotI2VuZGlmIC8qIE9TMiAqLwotI2lmbmRlZiBaSUxPRwotI2lmZGVmIE5U Ci0jaW5jbHVkZSA8c2V0am1wZXguaD4KLSNpZmRlZiBOVFNJRwotZXh0ZXJuIGludCBUbHNJbmRl eDsKLSNlbmRpZiAvKiBOVFNJRyAqLwotI2Vsc2UgLyogTlQgKi8KLSNpbmNsdWRlIDxzZXRqbXAu aD4KLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UKLSNpbmNsdWRlIDxzZXRyZXQuaD4KLSNlbmRpZiAv KiBaSUxPRyAqLwotI2luY2x1ZGUgImNrY3NpZy5oIgotI2lmZGVmIFZNUwotLyogMjAxMC0wMy0w OSBTTVMuICBWQVggQyBuZWVkcyBoZWxwIHRvIGZpbmQgInN5cyIuICBJdCdzIGVhc2llciBub3Qg dG8gdHJ5LiAqLwotI2luY2x1ZGUgPHN0YXQuaD4KLSNlbHNlIC8qIGRlZiBWTVMgKi8KLSNpbmNs dWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmIC8qIGRlZiBWTVMgW2Vsc2VdICovCi0jaW5jbHVkZSA8 Y3R5cGUuaD4KLQotI2lmbmRlZiBIUFVYUFJFNjUKLSNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVy cm9yIG51bWJlciBzeW1ib2xzICovCi0jZWxzZQotI2lmbmRlZiBFUlJOT19JTkNMVURFRAotI2lu Y2x1ZGUgPGVycm5vLmg+CQkJLyogRXJyb3IgbnVtYmVyIHN5bWJvbHMgKi8KLSNlbmRpZgkvKiBF UlJOT19JTkNMVURFRCAqLwotI2VuZGlmCS8qIEhQVVhQUkU2NSAqLwotCi0jaWZuZGVmIE5PVElN RUgKLSNpbmNsdWRlIDx0aW1lLmg+Ci0jZW5kaWYgLyogTk9USU1FSCAqLwotI2lmbmRlZiBFUElQ RQotI2RlZmluZSBFUElQRSAzMiAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJyb2tlbiBwaXBl IGVycm9yICovCi0jZW5kaWYgLyogRVBJUEUgKi8KLQotLyogS2VybWl0IGluY2x1ZGVzICovCi0K LSNpbmNsdWRlICJja2Nhc2MuaCIKLSNpbmNsdWRlICJja2NrZXIuaCIKLSNpbmNsdWRlICJja3Vj bWQuaCIKLSNpbmNsdWRlICJja3V1c3IuaCIKLSNpbmNsdWRlICJja2NuZXQuaCIgICAgICAgICAg ICAgICAgICAgICAvKiBJbmNsdWRlcyBja2N0ZWwuaCAqLwotI2luY2x1ZGUgImNrY3RlbC5oIiAg ICAgICAgICAgICAgICAgICAgIC8qICh0aGVuIHdoeSBpbmNsdWRlIGl0IGFnYWluPykgKi8KLSNp bmNsdWRlICJja2N4bGEuaCIKLQotI2lmZGVmIENLX1NTTAotI2luY2x1ZGUgImNrdWF0aC5oIgkJ CS8qIFNNUyAyMDA3LzAyLzE1ICovCi0jZW5kaWYgLyogZGVmIENLX1NTTCAqLwotCi0vKgotICBI b3cgdG8gZ2V0IHRoZSBzdHJ1Y3QgdGltZXZhbCBkZWZpbml0aW9uIHNvIHdlIGNhbiBjYWxsIHNl bGVjdCgpLiAgVGhlCi0gIHh4VElNRUggc3ltYm9scyBhcmUgZGVmaW5lZCBpbiBja2NkZWIuaCwg b3ZlcnJpZGRlbiBpbiB2YXJpb3VzIG1ha2VmaWxlCi0gIHRhcmdldHMuICBUaGUgcHJvYmxlbSBp czogbWF5YmUgd2UgaGF2ZSBhbHJlYWR5IGluY2x1ZGVkIHNvbWUgaGVhZGVyIGZpbGUKLSAgdGhh dCBkZWZpbmVkIHN0cnVjdCB0aW1ldmFsLCBhbmQgbWF5YmUgd2UgZGlkbid0LiAgSWYgd2UgZGlk LCB3ZSBkb24ndCB3YW50Ci0gIHRvIGluY2x1ZGUgYW5vdGhlciBoZWFkZXIgZmlsZSB0aGF0IGRl ZmluZXMgaXQgYWdhaW4gb3IgdGhlIGNvbXBpbGF0aW9uIHdpbGwKLSAgZmFpbC4gIElmIHdlIGRp ZG4ndCwgd2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBoZWFkZXIgZmlsZSB3aGVyZSBpdCdzIGRlZmlu ZWQuCi0gIEJ1dCBpbiBzb21lIGNhc2VzIGV2ZW4gdGhhdCB3b24ndCB3b3JrIGJlY2F1c2Ugb2Yg c3RyaWN0IFBPU0lYIGNvbnN0cmFpbnRzCi0gIG9yIHNvbWVzdWNoLCBvciBiZWNhdXNlIHRoaXMg aW50cm9kdWNlcyBvdGhlciBjb25mbGljdHMgKGUuZy4gc3RydWN0IHRtCi0gIG11bHRpcGx5IGRl ZmluZWQpLCBpbiB3aGljaCBjYXNlIHdlIGhhdmUgdG8gZGVmaW5lIGl0IG91cnNlbHZlcywgYnV0 IHRoaXMKLSAgY2FuIHdvcmsgb25seSBpZiB3ZSBkaWRuJ3QgYWxyZWFkeSBlbmNvdW50ZXIgYSBk ZWZpbml0aW9uLgotKi8KLSNpZm5kZWYgRENMVElNRVZBTAotI2lmZGVmIFNWNjhSM1Y2Ci0jZGVm aW5lIERDTFRJTUVWQUwKLSNlbHNlCi0jaWZkZWYgU0NPMjM0Ci0jZGVmaW5lIERDTFRJTUVWQUwK LSNlbmRpZiAvKiBTQ08yMzQgKi8KLSNlbmRpZiAvKiBTVjY4UjNWNiAqLwotI2VuZGlmIC8qIERD TFRJTUVWQUwgKi8KLQotI2lmZGVmIERDTFRJTUVWQUwKLS8qIEFsc28gbWF5YmUgaW4gc29tZSBw bGFjZXMgdGhlIGVsZW1lbnRzIG11c3QgYmUgdW5zaWduZWQuLi4gKi8KLXN0cnVjdCB0aW1ldmFs IHsKLSAgICBsb25nIHR2X3NlYzsKLSAgICBsb25nIHR2X3VzZWM7Ci19OwotI2lmZGVmIENPTU1F TlQKLS8qIEN1cnJlbnRseSB3ZSBkb24ndCB1c2UgdGhpcy4uLiAqLwotc3RydWN0IHRpbWV6b25l IHsKLSAgICBpbnQgdHpfbWludXRlc3dlc3Q7Ci0gICAgaW50IHR6X2RzdHRpbWU7Ci19OwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSNlbHNlICAvKiAhRENMVElNRVZBTCAqLwotI2lmbmRlZiBOT1NZ U1RJTUVICi0jaWZkZWYgU1lTVElNRUgKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmIC8q IFNZU1RJTUVIICovCi0jZW5kaWYgLyogTk9TWVNUSU1FSCAqLwotI2lmbmRlZiBOT1NZU1RJTUVC SAotI2lmZGVmIFNZU1RJTUVCSAotI2luY2x1ZGUgPHN5cy90aW1lYi5oPgotI2VuZGlmIC8qIFNZ U1RJTUVCSCAqLwotI2VuZGlmIC8qIE5PU1lTVElNRUJIICovCi0jZW5kaWYgLyogRENMVElNRVZB TCAqLwotCi0vKiAyMDEwLTAzLTA5IFNNUy4gIFZBWCBDIG5lZWRzIGhlbHAgdG8gZmluZCAic3lz Ii4gIEl0J3MgZWFzaWVyIG5vdCB0byB0cnkuICovCi0jaWZkZWYgVk1TCi0jaW5jbHVkZSA8dHlw ZXMuaD4KLSNlbHNlIC8qIGRlZiBWTVMgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRp ZiAvKiBkZWYgVk1TIFtlbHNlXSAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3Ry aW5nLmg+Ci0jaWZkZWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlm IC8qIEhBVkVfU1RETElCX0ggKi8KLQotI2lmbmRlZiBOT1NFVFRJTUUKLSNpZmRlZiBDT01NRU5U Ci0vKiBUaGlzIHNlY3Rpb24gbW92ZWQgdG8gY2tjZGViLmggKi8KLSNpZmRlZiBQT1NJWAotI2Rl ZmluZSBVVElNRUgKLSNlbHNlCi0jaWZkZWYgSFBVWDkKLSNkZWZpbmUgVVRJTUVICi0jZWxzZQot I2lmZGVmIE9TMgotI2RlZmluZSBTWVNVVElNRUgKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAv KiBIUFVYOSAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0j aWZkZWYgVk1TCQkJCS8qIFNNUyAyMDA3LzAyLzE1ICovCi0jaW5jbHVkZSAiY2t2cnRsLmgiCQkJ LyogZm9yIHV0aW1lKCkgKi8KLSNlbHNlICAvKiBkZWYgVk1TICovCi0jaWZkZWYgU1lTVVRJTUVI Ci0jaW5jbHVkZSA8c3lzL3V0aW1lLmg+Ci0jZWxzZQotI2lmZGVmIFVUSU1FSAotI2luY2x1ZGUg PHV0aW1lLmg+Ci0jZGVmaW5lIFNZU1VUSU1FSAotI2VuZGlmIC8qIFVUSU1FSCAqLwotI2VuZGlm IC8qIFNZU1VUSU1FSCAqLwotI2VuZGlmIC8qIGRlZiBWTVMgKi8KLSNlbmRpZiAvKiBOT1NFVFRJ TUUgKi8KLQotI2lmbmRlZiBTQ09fT1NSNTA0Ci0jaWZkZWYgU0VMRUNUX0gKLSNpbmNsdWRlIDxz eXMvc2VsZWN0Lmg+Ci0jZW5kaWYgLyogU0VMRUNUX0ggKi8KLSNlbmRpZiAvKiBTQ09fT1NSNTA0 ICovCi0KLSNpZm5kZWYgSU5BRERSX05PTkUJCQkvKiAyMDEwLTAzLTI5ICovCi0jZGVmaW5lIElO QUREUl9OT05FIC0xCi0jZW5kaWYJLyogSU5BRERSX05PTkUgKi8KLQotLyogc2VsZWN0KCkgZGlh bGVjdHMuLi4gKi8KLQotI2lmZGVmIFVOSVgKLSNkZWZpbmUgQlNEU0VMRUNUICAgICAgICAgICAg ICAgICAgICAgICAvKiBCU0Qgc2VsZWN0KCkgc3ludGF4L3NlbWFudGljcyAqLwotI2lmbmRlZiBG RF9TRVRTSVpFCi0jZGVmaW5lIEZEX1NFVFNJWkUgMTI4Ci0jZW5kaWYJLyogRkRfU0VUU0laRSAq LwotI2lmZGVmIEhQVVg2CQkJCS8qIEZvciBIUC1VWCA2LjUgY2lyY2EgMTk4OSAqLwotdHlwZWRl ZiBsb25nIGZkX21hc2s7Ci0jZGVmaW5lIE5GREJJVFMgKHNpemVvZihmZF9tYXNrKSAqIE5CQlkp IC8qIGJpdHMgcGVyIG1hc2sgKi8KLSNpZm5kZWYgaG93bWFueQotI2RlZmluZSBob3dtYW55KHgs IHkpICAgKCgoeCkrKCh5KS0xKSkvKHkpKQotI2VuZGlmCS8qIGhvd21hbnkgKi8KLSNkZWZpbmUg RkRfU0VUKG4sIHApICAgICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSB8PSAoMSA8PCAoKG4p ICUgTkZEQklUUykpKQotI2RlZmluZSBGRF9DTFIobiwgcCkgICAgKChwKS0+ZmRzX2JpdHNbKG4p L05GREJJVFNdICY9IH4oMSA8PCAoKG4pICUgTkZEQklUUykpKQotI2RlZmluZSBGRF9JU1NFVChu LCBwKSAgKChwKS0+ZmRzX2JpdHNbKG4pL05GREJJVFNdICYgKDEgPDwgKChuKSAlIE5GREJJVFMp KSkKLSNkZWZpbmUgRkRfQ09QWShmLCB0KSAgIGJjb3B5KGYsIHQsIHNpemVvZigqKGYpKSkKLSNk ZWZpbmUgRkRfWkVSTyhwKSAgICAgIGJ6ZXJvKHAsIHNpemVvZigqKHApKSkKLSNlbmRpZgkvKiBI UFVYNiAqLwotCi0jZWxzZQotI2lmZGVmIE9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE9TLzIgb3IgV2luMzIgKi8KLSNpZmRlZiBOVAotI2RlZmluZSBCU0RTRUxFQ1QKLSNlbHNl IC8qIE5UICovCi0jZGVmaW5lIElCTVNFTEVDVAotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyog T1MyICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZkZWYgVk1TCi0jZGVmaW5lIEJTRFNFTEVD VAkJCS8qIFNNUyAyMDA3LzAyLzE1ICovCi0jZW5kaWYgLyogZGVmIFZNUyAqLwotCi0vKiBPdGhl ciBzZWxlY3QoKSBwZWN1bGlhcml0aWVzICovCi0KLSNpZmRlZiBIUFVYCi0jaWZuZGVmIEhQVVgx MCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSFAtVVggOS54eCBhbmQgZWFybGllciAqLwot I2lmbmRlZiBIUFVYMTEwMAotLyogVGhlIHRocmVlIGludGVyaW9yIGFyZ3MgdG8gc2VsZWN0KCkg YXJlIChpbnQgKikgcmF0aGVyIHRoYW4gKGZkX3NldCAqKSAqLwotI2lmbmRlZiBJTlRTRUxFQ1QK LSNkZWZpbmUgSU5UU0VMRUNUCi0jZW5kaWYgLyogSU5UU0VMRUNUICovCi0jZW5kaWYgLyogSFBV WDExMDAgKi8KLSNlbmRpZiAvKiBIUFVYMTAgKi8KLSNlbmRpZiAvKiBIUFVYICovCi0KLSNpZmRl ZiBDS19TT0NLUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTT0NLUyBJbnRlcm5ldCByZWxh eSBwYWNrYWdlICovCi0jaWZkZWYgQ0tfU09DS1M1ICAgICAgICAgICAgICAgICAgICAgICAgLyog U09DS1MgNSAqLwotI2RlZmluZSBhY2NlcHQgIFNPQ0tTYWNjZXB0Ci0jZGVmaW5lIGJpbmQgICAg U09DS1NiaW5kCi0jZGVmaW5lIGNvbm5lY3QgU09DS1Njb25uZWN0Ci0jZGVmaW5lIGdldHNvY2tu YW1lIFNPQ0tTZ2V0c29ja25hbWUKLSNkZWZpbmUgbGlzdGVuIFNPQ0tTbGlzdGVuCi0jZWxzZSAg LyogTm90IFNPQ0tTIDUgKi8KLSNkZWZpbmUgYWNjZXB0ICBSYWNjZXB0Ci0jZGVmaW5lIGJpbmQg ICAgUmJpbmQKLSNkZWZpbmUgY29ubmVjdCBSY29ubmVjdAotI2RlZmluZSBnZXRzb2NrbmFtZSBS Z2V0c29ja25hbWUKLSNkZWZpbmUgbGlzdGVuIFJsaXN0ZW4KLSNlbmRpZiAvKiBDS19TT0NLUzUg Ki8KLSNlbmRpZiAvKiBDS19TT0NLUyAqLwotCi0jaWZuZGVmIE5PSFRUUAotZXh0ZXJuIGNoYXIg KiB0Y3BfaHR0cF9wcm94eTsgICAgICAgICAgIC8qIE5hbWVbOnBvcnRdIG9mIGh0dHAgcHJveHkg c2VydmVyICovCi1leHRlcm4gaW50ICAgIHRjcF9odHRwX3Byb3h5X2Vycm5vOwotZXh0ZXJuIGNo YXIgKiB0Y3BfaHR0cF9wcm94eV91c2VyOwotZXh0ZXJuIGNoYXIgKiB0Y3BfaHR0cF9wcm94eV9w d2Q7Ci1leHRlcm4gY2hhciAqIHRjcF9odHRwX3Byb3h5X2FnZW50OwotI2RlZmluZSBIVFRQQ1BZ TCAxMDI0Ci1zdGF0aWMgY2hhciBwcm94eWhvc3RbSFRUUENQWUxdOwotI2VuZGlmIC8qIE5PSFRU UCAqLwotaW50IHNzbF9mdHBfcHJveHkgPSAwOyAgICAgICAgICAgICAgICAgIC8qIEZUUCBvdmVy IFNTTC9UTFMgUHJveHkgU2VydmVyICovCi0KLS8qIEZlYXR1cmUgc2VsZWN0aW9uICovCi0KLSNp Zm5kZWYgVVNFX1NIVVRET1dOCi0vKgotICBXZSBkb24ndCB1c2Ugc2h1dGRvd24oKSBiZWNhdXNl IChhKSB3ZSBhbHdheXMgY2FsbCBpdCBqdXN0IGJlZm9yZSBjbG9zZSgpCi0gIHNvIGl0J3MgcmVk dW5kYW50IGFuZCB1bm5lY2Vzc2FyeSwgYW5kIChiKSBpdCBpbnRyb2R1Y2VzIGEgbG9uZyBwYXVz ZSBvbgotICBzb21lIHBsYXRmb3JtcyBsaWtlIFNWLzY4IFIzLgotKi8KLS8qICNkZWZpbmUgVVNF X1NIVVRET1dOICovCi0jZW5kaWYgLyogVVNFX1NIVVRET1dOICovCi0KLSNpZm5kZWYgTk9SRVNF TkQKLSNpZm5kZWYgTk9SRVNUQVJUICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0YXJ0IC8g cmVjb3ZlciAqLwotI2lmbmRlZiBGVFBfUkVTVEFSVAotI2RlZmluZSBGVFBfUkVTVEFSVAotI2Vu ZGlmIC8qIEZUUF9SRVNUQVJUICovCi0jZW5kaWYgLyogTk9SRVNUQVJUICovCi0jZW5kaWYgLyog Tk9SRVNFTkQgKi8KLQotI2lmbmRlZiBOT1VQREFURSAgICAgICAgICAgICAgICAgICAgICAgIC8q IFVwZGF0ZSBtb2RlICovCi0jaWZuZGVmIERPVVBEQVRFCi0jZGVmaW5lIERPVVBEQVRFCi0jZW5k aWYgLyogRE9VUERBVEUgKi8KLSNlbmRpZiAvKiBOT1VQREFURSAqLwotCi0jaWZuZGVmIFVOSUNP REUgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5pY29kZSByZXF1aXJlZCAqLwotI2lmbmRl ZiBOT0NTRVRTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBjaGFyc2V0IHRyYW5zbGF0 aW9uICovCi0jZGVmaW5lIE5PQ1NFVFMKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jZW5kaWYgLyog VU5JQ09ERSAqLwotCi0jaWZuZGVmIE9TMgotI2lmbmRlZiBIQVZFX01TRUNTICAgICAgICAgICAg ICAgICAgICAgIC8qIE1pbGxpc2Vjb25kIHRpbWVyICovCi0jaWZkZWYgVU5JWAotI2lmZGVmIEdG VElNRVIKLSNkZWZpbmUgSEFWRV9NU0VDUwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSNlbmRpZiAv KiBVTklYICovCi0jZW5kaWYgLyogSEFWRV9NU0VDUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0j aWZkZWYgUElQRVNFTkQgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFVUIGZyb20gcGlwZSAq LwotI2lmbmRlZiBQVVRQSVBFCi0jZGVmaW5lIFBVVFBJUEUKLSNlbmRpZiAvKiBQVVRQSVBFICov Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotI2lmbmRlZiBOT1NQTCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFBVVCBmcm9tIGFycmF5ICovCi0jaWZuZGVmIFBVVEFSUkFZCi0jZGVmaW5l IFBVVEFSUkFZCi0jZW5kaWYgLyogUFVUQVJSQVkgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0v KiBTZWN1cml0eS4uLiAqLwotCi0jaWZkZWYgQ0tfU1JQCi0jZGVmaW5lIEZUUF9TUlAKLSNlbmRp ZiAvKiBDS19TUlAgKi8KLQotI2lmZGVmIENLX0tFUkJFUk9TCi0jaWZkZWYgS1JCNAotLyoKLSAg VGhlcmUgaXMgYSBjb25mbGljdCBiZXR3ZWVuIHRoZSBLZXkgU2NoZWR1bGUgZm9ybWF0cyB1c2Vk IGludGVybmFsbHkKLSAgd2l0aGluIHRoZSBzdGFuZGFsb25lIE1JVCBLUkI0IGxpYnJhcnkgYW5k IHRoYXQgdXNlZCBieSBFcmljIFlvdW5nCi0gIGluIE9wZW5TU0wgYW5kIGhpcyBzdGFuZGFsb25l IERFUyBsaWJyYXJ5LiAgVGhlcmVmb3JlLCBLUkI0IEZUUCBBVVRICi0gIGNhbm5vdCBiZSBzdXBw b3J0ZWQgd2hlbiBlaXRoZXIgb2YgdGhvc2UgdHdvIHBhY2thZ2VzIGFyZSB1c2VkLgotKi8KLSNp ZmRlZiBLUkI1MjQKLSNkZWZpbmUgRlRQX0tSQjQKLSNlbHNlIC8qIEtSQjUyNCAqLwotI2lmbmRl ZiBDS19TU0wKLSNpZm5kZWYgTElCREVTCi0jZGVmaW5lIEZUUF9LUkI0Ci0jZW5kaWYgLyogTElC REVTICovCi0jZW5kaWYgLyogQ0tfU1NMICovCi0jZW5kaWYgLyogS1JCNTI0ICovCi0jZW5kaWYg LyogS1JCNCAqLwotI2lmZGVmIEtSQjUKLSNpZm5kZWYgSEVJTURBTAotI2lmbmRlZiBOT0ZUUF9H U1NBUEkJCQkvKiAyOTkgKi8KLSNkZWZpbmUgRlRQX0dTU0FQSQotI2VuZGlmCS8qIE5PRlRQX0dT U0FQSSAqLwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYg LyogQ0tfS0VSQkVST1MgKi8KLQotLyogRlRQX1NFQ1VSSVRZIGlzIGRlZmluZWQgaWYgYW55IG9m IHRoZSBhYm92ZSBpcyBzZWxlY3RlZCAqLwotI2lmbmRlZiBGVFBfU0VDVVJJVFkKLSNpZmRlZiBG VFBfR1NTQVBJCi0jZGVmaW5lIEZUUF9TRUNVUklUWQotI2Vsc2UKLSNpZmRlZiBGVFBfS1JCNAot I2RlZmluZSBGVFBfU0VDVVJJVFkKLSNlbHNlCi0jaWZkZWYgRlRQX1NSUAotI2RlZmluZSBGVFBf U0VDVVJJVFkKLSNlbHNlCi0jaWZkZWYgQ0tfU1NMCi0jZGVmaW5lIEZUUF9TRUNVUklUWQotI2Vu ZGlmIC8qIENLX1NTTCAqLwotI2VuZGlmIC8qIEZUUF9TUlAgKi8KLSNlbmRpZiAvKiBGVFBfS1JC NCAqLwotI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KLSNlbmRpZiAvKiBGVFBfU0VDVVJJVFkgKi8K LQotI2lmZGVmIENLX0RFUwotI2lmZGVmIENLX1NTTAotI2lmbmRlZiBMSUJERVMKLSNkZWZpbmUg TElCREVTCi0jZW5kaWYgLyogTElCREVTICovCi0jZW5kaWYgLyogQ0tfU1NMICovCi0jZW5kaWYg LyogQ0tfREVTICovCi0KLSNpZmRlZiBDUllQVF9ETEwKLSNpZm5kZWYgTElCREVTCi0jZGVmaW5l IExJQkRFUwotI2VuZGlmIC8qIExJQkRFUyAqLwotI2VuZGlmIC8qIENSWVBUX0RMTCAqLwotCi0j aWZkZWYgRlRQX0tSQjQKLSNkZWZpbmUgZGVzX2NibG9jayBCbG9jawotI2RlZmluZSBkZXNfa2V5 X3NjaGVkdWxlIFNjaGVkdWxlCi0jaWZkZWYgS1JCNTI0Ci0jaWZkZWYgTlQKLSNkZWZpbmUgX1dJ TkRPV1MKLSNlbmRpZiAvKiBOVCAqLwotI2luY2x1ZGUgImtlcmJlcm9zSVYva3JiLmgiCi0jZWxz ZSAvKiBLUkI1MjQgKi8KLSNpZmRlZiBTT0xBUklTCi0jaWZuZGVmIHN1bgotLyogRm9yIHNvbWUg cmVhc29uIGxvc3QgaW4gaGlzdG9yeSB0aGUgTWFrZWZpbGUgU29sYXJpcyB0YXJnZXRzIGhhdmUg LVVzdW4gKi8KLSNkZWZpbmUgc3VuCi0jZW5kaWYgLyogc3VuICovCi0jZW5kaWYgLyogU09MQVJJ UyAqLwotI2luY2x1ZGUgImtyYi5oIgotI2RlZmluZSBrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5IGty Yl9nZXRfZXJyX3RleHQKLSNlbmRpZiAvKiBLUkI1MjQgKi8KLSNlbmRpZiAvKiBGVFBfS1JCNCAq LwotCi0jaWZkZWYgQ0tfU1NMCi0jaWZkZWYgRlRQX0tSQjQKLSNpZm5kZWYgSEVBREVSX0RFU19I Ci0jZGVmaW5lIEhFQURFUl9ERVNfSAotI2VuZGlmIC8qIEhFQURFUl9ERVNfSCAqLwotI2VuZGlm IC8qIEZUUF9LUkI0ICovCi0jaW5jbHVkZSAiY2tfc3NsLmgiCi0jZW5kaWYgLyogQ0tfU1NMICov Ci0KLSNpZmRlZiBGVFBfU1JQCi0jaWZkZWYgSEFWRV9QV0RfSAotI2luY2x1ZGUgInB3ZC5oIgot I2VuZGlmIC8qIEhBVkVfUFdEX0ggKi8KLSNpbmNsdWRlICJ0X3B3ZC5oIgotI2luY2x1ZGUgInRf Y2xpZW50LmgiCi0jaW5jbHVkZSAia3J5cHRvLmgiCi0jZW5kaWYgLyogRlRQX1NSUCAqLwotCi0j aWZkZWYgRlRQX0dTU0FQSQotI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGkuaD4KLS8qCi0gIE5lZWQg dG8gaW5jbHVkZSB0aGUga3JiNSBmaWxlLCBiZWNhdXNlIHdlJ3JlIGRvaW5nIG1hbnVhbCBmYWxs YmFjawotICBmcm9tIHRoZSB2MiBtZWNoIHRvIHRoZSB2MSBtZWNoLiAgT25jZSB0aGVyZSdzIHJl YWwgbmVnb3RpYXRpb24sCi0gIHdlIGNhbiBiZSBnZW5lcmljIGFnYWluLgotKi8KLSNpbmNsdWRl IDxnc3NhcGkvZ3NzYXBpX2dlbmVyaWMuaD4KLSNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpX2tyYjUu aD4KLXN0YXRpYyBnc3NfY3R4X2lkX3QgZ2NvbnRleHQ7Ci0KLSNpZmRlZiBNQUNPU1gKLS8qKiBl eHBvcnRlZCBjb25zdGFudHMgZGVmaW5lZCBpbiBnc3NhcGlfa3JiNXssX254fS5oICoqLwotCi0v KiB0aGVzZSBhcmUgYm9ndXMsIGJ1dCB3aWxsIGNvbXBpbGUgKi8KLQotLyoKLSAqIFRoZSBPSUQg b2YgdGhlIGRyYWZ0IGtyYjUgbWVjaGFuaXNtLCBhc3NpZ25lZCBieSBJRVRGLCBpczoKLSAqICAg ICAgaXNvKDEpIG9yZygzKSBkb2QoNSkgaW50ZXJuZXQoMSkgc2VjdXJpdHkoNSkKLSAqICAgICAg a2VyYmVyb3N2NSgyKSA9IDEuMy41LjEuNS4yCi0gKiBUaGUgT0lEIG9mIHRoZSBrcmI1X25hbWUg dHlwZSBpczoKLSAqICAgICAgaXNvKDEpIG1lbWJlci1ib2R5KDIpIFVTKDg0MCkgbWl0KDExMzU1 NCkgaW5mb3N5cygxKSBnc3NhcGkoMikKLSAqICAgICAga3JiNSgyKSBrcmI1X25hbWUoMSkgPSAx LjIuODQwLjExMzU1NC4xLjIuMi4xCi0gKiBUaGUgT0lEIG9mIHRoZSBrcmI1X3ByaW5jaXBhbCB0 eXBlIGlzOgotICogICAgICBpc28oMSkgbWVtYmVyLWJvZHkoMikgVVMoODQwKSBtaXQoMTEzNTU0 KSBpbmZvc3lzKDEpIGdzc2FwaSgyKQotICogICAgICBrcmI1KDIpIGtyYjVfcHJpbmNpcGFsKDIp ID0gMS4yLjg0MC4xMTM1NTQuMS4yLjIuMgotICogVGhlIE9JRCBvZiB0aGUgcHJvcG9zZWQgc3Rh bmRhcmQga3JiNSBtZWNoYW5pc20gaXM6Ci0gKiAgICAgIGlzbygxKSBtZW1iZXItYm9keSgyKSBV Uyg4NDApIG1pdCgxMTM1NTQpIGluZm9zeXMoMSkgZ3NzYXBpKDIpCi0gKiAgICAgIGtyYjUoMikg PSAxLjIuODQwLjExMzU1NC4xLjIuMgotICogVGhlIE9JRCBvZiB0aGUgcHJvcG9zZWQgc3RhbmRh cmQga3JiNSB2MiBtZWNoYW5pc20gaXM6Ci0gKiAgICAgIGlzbygxKSBtZW1iZXItYm9keSgyKSBV Uyg4NDApIG1pdCgxMTM1NTQpIGluZm9zeXMoMSkgZ3NzYXBpKDIpCi0gKiAgICAgIGtyYjV2Migz KSA9IDEuMi44NDAuMTEzNTU0LjEuMi4zCi0gKgotICovCi0KLS8qCi0gKiBFbmNvZGluZyBydWxl czogVGhlIGZpcnN0IHR3byB2YWx1ZXMgYXJlIGVuY29kZWQgaW4gb25lIGJ5dGUgYXMgNDAKLSAq ICogdmFsdWUxICsgdmFsdWUyLiAgU3Vic2VxdWVudCB2YWx1ZXMgYXJlIGVuY29kZWQgYmFzZSAx MjgsIG1vc3QKLSAqIHNpZ25pZmljYW50IGRpZ2l0IGZpcnN0LCB3aXRoIHRoZSBoaWdoIGJpdCAo XDIwMCkgc2V0IG9uIGFsbCBvY3RldHMKLSAqIGV4Y2VwdCB0aGUgbGFzdCBpbiBlYWNoIHZhbHVl J3MgZW5jb2RpbmcuCi0gKi8KLQotc3RhdGljIENPTlNUIGdzc19PSURfZGVzYwotY2tfa3JiNV9n c3Nfb2lkX2FycmF5W10gPSB7Ci0gICAvKiB0aGlzIGlzIHRoZSBvZmZpY2lhbCwgcmZjLXNwZWNp ZmllZCBPSUQgKi8KLSAgIHs5LCAiXDA1MlwyMDZcMTEwXDIwNlwzNjdcMDIyXDAwMVwwMDJcMDAy In0sCi0gICAvKiB0aGlzIGlzIHRoZSB1bm9mZmljaWFsLCB3cm9uZyBPSUQgKi8KLSAgIHs1LCAi XDA1M1wwMDVcMDAxXDAwNVwwMDIifSwKLSAgIC8qIHRoaXMgaXMgdGhlIHYyIGFzc2lnbmVkIE9J RCAqLwotICAgezksICJcMDUyXDIwNlwxMTBcMjA2XDM2N1wwMjJcMDAxXDAwMlwwMDMifSwKLSAg IC8qIHRoZXNlIHR3byBhcmUgbmFtZSB0eXBlIE9JRCdzICovCi0gICB7MTAsICJcMDUyXDIwNlwx MTBcMjA2XDM2N1wwMjJcMDAxXDAwMlwwMDJcMDAxIn0sCi0gICB7MTAsICJcMDUyXDIwNlwxMTBc MjA2XDM2N1wwMjJcMDAxXDAwMlwwMDJcMDAyIn0sCi0gICB7IDAsIDAgfQotfTsKLQotc3RhdGlj Ci1DT05TVCBnc3NfT0lEX2Rlc2MgKiBDT05TVCBnc3NfbWVjaF9rcmI1X3YyID0gY2tfa3JiNV9n c3Nfb2lkX2FycmF5KzI7Ci0KLSNpZmRlZiBNQUNPU1gxMDMKLXN0YXRpYwotQ09OU1QgZ3NzX09J RF9kZXNjICogQ09OU1QgZ3NzX21lY2hfa3JiNSA9IGNrX2tyYjVfZ3NzX29pZF9hcnJheSswOwot I2VuZGlmIC8qIE1BQ09TWDEwMyAqLwotCi0jaWZuZGVmIE1BQ09TWAotc3RhdGljCi1DT05TVCBn c3NfT0lEX2Rlc2MgKiBDT05TVCBnc3NfbWVjaF9rcmI1ID0gY2tfa3JiNV9nc3Nfb2lkX2FycmF5 KzA7Ci1zdGF0aWMKLUNPTlNUIGdzc19PSURfZGVzYyAqIENPTlNUIGdzc19tZWNoX2tyYjVfb2xk ID0gY2tfa3JiNV9nc3Nfb2lkX2FycmF5KzE7Ci1zdGF0aWMKLUNPTlNUIGdzc19PSURfZGVzYyAq IENPTlNUIGdzc19udF9rcmI1X25hbWUgPSBja19rcmI1X2dzc19vaWRfYXJyYXkrMzsKLXN0YXRp YwotQ09OU1QgZ3NzX09JRF9kZXNjICogQ09OU1QgZ3NzX250X2tyYjVfcHJpbmNpcGFsID0gY2tf a3JiNV9nc3Nfb2lkX2FycmF5KzQ7Ci0jZW5kaWYJLyogTUFDT1NYICovCi0KLS8qCi0gKiBTZWUg a3JiNS9nc3NhcGlfa3JiNS5jIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0aG0gZm9y Ci0gKiBlbmNvZGluZyBhbiBvYmplY3QgaWRlbnRpZmllci4KLSAqLwotCi0vKgotICogVGhlIE9J RCBvZiB1c2VyX25hbWUgaXM6Ci0gKiAgICAgIGlzbygxKSBtZW1iZXItYm9keSgyKSBVUyg4NDAp IG1pdCgxMTM1NTQpIGluZm9zeXMoMSkgZ3NzYXBpKDIpCi0gKiAgICAgIGdlbmVyaWMoMSkgdXNl cl9uYW1lKDEpID0gMS4yLjg0MC4xMTM1NTQuMS4yLjEuMQotICogbWFjaGluZV91aWRfbmFtZToK LSAqICAgICAgaXNvKDEpIG1lbWJlci1ib2R5KDIpIFVTKDg0MCkgbWl0KDExMzU1NCkgaW5mb3N5 cygxKSBnc3NhcGkoMikKLSAqICAgICAgZ2VuZXJpYygxKSBtYWNoaW5lX3VpZF9uYW1lKDIpID0g MS4yLjg0MC4xMTM1NTQuMS4yLjEuMgotICogc3RyaW5nX3VpZF9uYW1lOgotICogICAgICBpc28o MSkgbWVtYmVyLWJvZHkoMikgVVMoODQwKSBtaXQoMTEzNTU0KSBpbmZvc3lzKDEpIGdzc2FwaSgy KQotICogICAgICBnZW5lcmljKDEpIHN0cmluZ191aWRfbmFtZSgzKSA9IDEuMi44NDAuMTEzNTU0 LjEuMi4xLjMKLSAqIHNlcnZpY2VfbmFtZToKLSAqICAgICAgaXNvKDEpIG1lbWJlci1ib2R5KDIp IFVTKDg0MCkgbWl0KDExMzU1NCkgaW5mb3N5cygxKSBnc3NhcGkoMikKLSAqICAgICAgZ2VuZXJp YygxKSBzZXJ2aWNlX25hbWUoNCkgPSAxLjIuODQwLjExMzU1NC4xLjIuMS40Ci0gKiBleHBvcnRl ZF9uYW1lOgotICogICAgICAxKGlzbyksIDMob3JnKSwgNihkb2QpLCAxKGludGVybmV0KSwgNShz ZWN1cml0eSksIDYobmFtZXR5cGVzKSwKLSAqICAgICAgICAgIDQoZ3NzLWFwaS1leHBvcnRlZC1u YW1lKQotICogaG9zdF9iYXNlZF9zZXJ2aWNlX25hbWUgKHYyKToKLSAqICAgICAgaXNvICgxKSBv cmcgKDMpLCBkb2QgKDYpLCBpbnRlcm5ldCAoMSksIHNlY3VyaXR5ICg1KSwgbmFtZXR5cGVzKDYp LAotICogICAgICBnc3MtaG9zdC1iYXNlZC1zZXJ2aWNlcygyKQotICovCi0KLXN0YXRpYyBnc3Nf T0lEX2Rlc2MgY2tfb2lkc1tdID0gewotICAgezEwLCAiXDA1MlwyMDZcMTEwXDIwNlwzNjdcMDIy XDAwMVwwMDJcMDAxXDAwMSJ9LAotICAgezEwLCAiXDA1MlwyMDZcMTEwXDIwNlwzNjdcMDIyXDAw MVwwMDJcMDAxXDAwMiJ9LAotICAgezEwLCAiXDA1MlwyMDZcMTEwXDIwNlwzNjdcMDIyXDAwMVww MDJcMDAxXDAwMyJ9LAotICAgezEwLCAiXDA1MlwyMDZcMTEwXDIwNlwzNjdcMDIyXDAwMVwwMDJc MDAxXDAwNCJ9LAotICAgeyA2LCAiXDA1M1wwMDZcMDAxXDAwNVwwMDZcMDA0In0sCi0gICB7IDYs ICJcMDUzXDAwNlwwMDFcMDA1XDAwNlwwMDIifSwKLX07Ci0KLXN0YXRpYyBnc3NfT0lEIGNrX2dz c19udF91c2VyX25hbWUgPSBja19vaWRzKzA7Ci1zdGF0aWMgZ3NzX09JRCBja19nc3NfbnRfbWFj aGluZV91aWRfbmFtZSA9IGNrX29pZHMrMTsKLXN0YXRpYyBnc3NfT0lEIGNrX2dzc19udF9zdHJp bmdfdWlkX25hbWUgPSBja19vaWRzKzI7Ci1zdGF0aWMgZ3NzX09JRCBja19nc3NfbnRfc2Vydmlj ZV9uYW1lID0gY2tfb2lkcyszOwotc3RhdGljIGdzc19PSUQgY2tfZ3NzX250X2V4cG9ydGVkX25h bWUgPSBja19vaWRzKzQ7Ci1zdGF0aWMgZ3NzX09JRCBja19nc3NfbnRfc2VydmljZV9uYW1lX3Yy ID0gY2tfb2lkcys1OwotI2VuZGlmIC8qIE1BQ09TWCAqLwotI2VuZGlmIC8qIEZUUF9HU1NBUEkg Ki8KLQotI2lmZGVmIE9TMgotI2lmZGVmIEZUUF9TUlAKLSNkZWZpbmUgTUFQX0tSWVBUTwotI2lm ZGVmIFNSUERMTAotI2RlZmluZSBNQVBfU1JQCi0jZW5kaWYgLyogU1JQRExMICovCi0jZW5kaWYg LyogRlRQX1NSUCAqLwotI2lmZGVmIEZUUF9LUkI0Ci0jZGVmaW5lIE1BUF9LUkI0Ci0jaWZkZWYg Q0tfRU5DUllQVElPTgotI2RlZmluZSBNQVBfREVTCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LwotI2VuZGlmIC8qIEZUUF9LUkI0ICovCi0jaWZkZWYgRlRQX0dTU0FQSQotI2RlZmluZSBNQVBf R1NTQVBJCi0jZGVmaW5lIEdTU19PSURTCi0jZW5kaWYgLyogRlRQX0dTU0FQSSAqLwotI2luY2x1 ZGUgImNrb2F0aC5oIgotCi1leHRlcm4gaW50IGs5NXN0ZG91dCwgd2hlcmV4W10sIHdoZXJleVtd OwotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgY29sb3JjbWQ7Ci0jZW5kaWYgLyogT1MyICovCi0KLSNp ZmRlZiBGVFBfS1JCNAotc3RhdGljIGNoYXIgZnRwX3JlYWxtW1JFQUxNX1NaICsgMV07Ci1zdGF0 aWMgS1RFWFRfU1QgZnRwX3RrdDsKLSNpZmRlZiBPUzIKLXN0YXRpYyBMRUFTSF9DUkVERU5USUFM UyBmdHBfY3JlZDsKLSNlbHNlIC8qIE9TMiAqLwotc3RhdGljIENSRURFTlRJQUxTIGZ0cF9jcmVk OwotI2VuZGlmIC8qIE9TMiAqLwotc3RhdGljIE1TR19EQVQgZnRwX21zZ19kYXRhOwotc3RhdGlj IGRlc19rZXlfc2NoZWR1bGUgZnRwX3NjaGVkOwotc3RhdGljIGludCBmb29bNF0gPSB7OTksOTks OTksOTl9OwotI2VuZGlmIC8qIEZUUF9LUkI0ICovCi0KLS8qIGdldHJlcGx5KCkgZnVuY3Rpb24g Y29kZXMgKi8KLQotI2RlZmluZSBHUkZfQVVUSCAxCQkJLyogUmVwbHkgdG8gQVVUSCBjb21tYW5k ICovCi0jZGVmaW5lIEdSRl9GRUFUIDIJCQkvKiBSZXBseSB0byBGRUFUIGNvbW1hbmQgKi8KLQot LyogT3BlcmF0aW9uYWwgZGVmaW5pdGlvbnMgKi8KLQotI2RlZmluZSBERUZfVkJNIDAgICAgICAg ICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgdmVyYm9zZSBtb2RlICovCi0vKiAjZGVmaW5lIFNF VFZCTSAqLyAgICAgICAgICAgICAgICAgICAgLyogKHNlZSBnZXRyZXBseSkgKi8KLQotI2RlZmlu ZSBVUkxfT05FRklMRSAgICAgICAgICAgICAgICAgICAgIC8qIEdFVCwgbm90IE1HRVQsIGZvciBG VFAgVVJMICovCi0KLSNkZWZpbmUgRlRQX0JVRlNJWiAxMDI0MCAgICAgICAgICAgICAgICAvKiBN YXggc2l6ZSBmb3IgRlRQIGNtZHMgJiByZXBsaWVzICovCi0jZGVmaW5lIFNSVk5BTUxFTiAzMiAg ICAgICAgICAgICAgICAgICAgLyogTWF4IGxlbmd0aCBmb3Igc2VydmVyIHR5cGUgbmFtZSAqLwot I2RlZmluZSBQV0RTSVogMjU2Ci0jZGVmaW5lIFBBU1NCVUZTSVogMjU2Ci0jZGVmaW5lIFBST01Q VFNJWiAyNTYKLQotI2lmbmRlZiBNR0VUTUFYICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1h eCBvcGVyYW5kcyBmb3IgTUdFVCBjb21tYW5kICovCi0jZGVmaW5lIE1HRVRNQVggMTAwMAotI2Vu ZGlmIC8qIE1HRVRNQVggKi8KLQotI2lmZGVmIEZUUF9TUlAKLSNkZWZpbmUgRlVER0VfRkFDVE9S IDEwMAotI2VuZGlmIC8qIEZUUF9TUlAgKi8KLQotLyoKLSAgQW1vdW50IG9mIGdyb3d0aCBmcm9t IGNsZWFydGV4dCB0byBjaXBoZXJ0ZXh0LiAga3JiX21rX3ByaXYgYWRkcyB0aGlzCi0gIG51bWJl ciBieXRlcy4gIE11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCBhdXRoIHR5cGUuCi0gIEdTU0FQSSBh cHBlYXJzIHRvIGFkZCA1MiBieXRlcywgYnV0IEknbSBub3Qgc3VyZSBpdCBpcyBhIGNvbnN0YW50 LS1oYXJ0bWFucwotICAzREVTIHJlcXVpcmVzIDU2IGJ5dGVzLiAgTGV0cyB1c2UgOTYganVzdCB0 byBiZSBzdXJlLgotKi8KLSNpZmRlZiBGVFBfR1NTQVBJCi0jaWZuZGVmIEZVREdFX0ZBQ1RPUgot I2RlZmluZSBGVURHRV9GQUNUT1IgOTYKLSNlbmRpZiAvKiBGVURHRV9GQUNUT1IgKi8KLSNlbmRp ZiAvKiBGVFBfR1NTQVBJICovCi0KLSNpZmRlZiBGVFBfS1JCNAotI2lmbmRlZiBGVURHRV9GQUNU T1IKLSNkZWZpbmUgRlVER0VfRkFDVE9SIDMyCi0jZW5kaWYgLyogRlVER0VfRkFDVE9SICovCi0j ZW5kaWYgLyogRlRQX0tSQjQgKi8KLQotI2lmbmRlZiBGVURHRV9GQUNUT1IgICAgICAgICAgICAg ICAgICAgIC8qIEluIGNhc2Ugbm8gYXV0aCB0eXBlcyBkZWZpbmUgaXQgKi8KLSNkZWZpbmUgRlVE R0VfRkFDVE9SIDAKLSNlbmRpZiAvKiBGVURHRV9GQUNUT1IgKi8KLQotI2lmbmRlZiBNQVhIT1NU TkFNRUxFTgotI2RlZmluZSBNQVhIT1NUTkFNRUxFTiA2NAotI2VuZGlmIC8qIE1BWEhPU1ROQU1F TEVOICovCi0jZGVmaW5lIE1BWF9ETlNfTkFNRUxFTiAoMTUqKE1BWEhPU1ROQU1FTEVOICsgMSkr MSkKLQotLyogRmFzY2lzdCBjb21waWxlciB0b2FkeWluZyAqLwotCi0jaWZuZGVmIFNFTkRBUkcy VFlQRQotI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1pZ2h0IGJl IG5lZWRlZCBoZXJlIGFuZCB0aGVyZSAqLwotI2RlZmluZSBTRU5EQVJHMlRZUEUgY29uc3QgY2hh ciAqCi0jZWxzZQotI2RlZmluZSBTRU5EQVJHMlRZUEUgY2hhciAqCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotI2VuZGlmIC8qIFNFTkRBUkcyVFlQRSAqLwotCi0vKiBDb21tb24gdGV4dCBtZXNzYWdl cyAqLwotCi1zdGF0aWMgY2hhciAqbm9jeCA9ICI/Tm8gRlRQIGNvbnRyb2wgY29ubmVjdGlvblxu IjsKLQotc3RhdGljIGNoYXIgKmZuY25hbVtdID0gewotICAicmVuYW1lIiwgIm92ZXJ3cml0ZSIs ICJiYWNrdXAiLCAiYXBwZW5kIiwgImRpc2NhcmQiLCAiYXNrIiwgInVwZGF0ZSIsCi0gICJkYXRl cy1kaWZmZXIiLCAiIgotfTsKLQotLyogTWFjcm8gZGVmaW5pdGlvbnMgKi8KLQotLyogVXNlZCB0 byBzcGVlZCB1cCB0ZXh0LW1vZGUgUFVUcyAqLwotI2RlZmluZSB6em91dChmZCxjKSBcCi0oKGZk PDApPygtMSk6KChub3V0Pj11Y2J1ZnNpeik/KHp6c2VuZChmZCxjKSk6KHVjYnVmW25vdXQrK109 YykpKQotCi0jZGVmaW5lIENIRUNLQ09OTigpIGlmKCFjb25uZWN0ZWQpe3ByaW50Zihub2N4KTty ZXR1cm4oLTkpO30KLQotLyogRXh0ZXJuYWxzICovCi0KLSNpZmRlZiBDS19VUkwKLWV4dGVybiBz dHJ1Y3QgdXJsZGF0YSBnX3VybDsKLSNlbmRpZiAvKiBDS19VUkwgKi8KLQotI2lmZGVmIERZTkFN SUMKLWV4dGVybiBjaGFyICp6aW5idWZmZXIsICp6b3V0YnVmZmVyOyAgICAvKiBSZWd1bGFyIEtl cm1pdCBmaWxlIGkvbyAqLwotI2Vsc2UKLWV4dGVybiBjaGFyIHppbmJ1ZmZlcltdLCB6b3V0YnVm ZmVyW107Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotZXh0ZXJuIGNoYXIgKnppbnB0ciwgKnpvdXRw dHI7Ci1leHRlcm4gaW50IHppbmNudCwgem91dGNudCwgem9idWZzaXplLCBmbmNhY3Q7Ci0KLSNp ZmRlZiBDS19UTVBESVIKLWV4dGVybiBpbnQgZl90bXBkaXI7ICAgICAgICAgICAgICAgICAgICAv KiBEaXJlY3RvcnkgY2hhbmdlZCB0ZW1wb3JhcmlseSAqLwotZXh0ZXJuIGNoYXIgc2F2ZGlyW107 ICAgICAgICAgICAgICAgICAgIC8qIEZvciBzYXZpbmcgY3VycmVudCBkaXJlY3RvcnkgKi8KLWV4 dGVybiBjaGFyICogZGxkaXI7Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0KLWV4dGVybiBjaGFy ICogcmZzcGVjLCAqIHNmc3BlYywgKiBzcmZzcGVjLCAqIHJyZnNwZWM7IC8qIEZvciBXSEVSRSBj b21tYW5kICovCi0KLWV4dGVybiB4eF9zdHJwIHh4c3RyaW5nOwotZXh0ZXJuIHN0cnVjdCBrZXl0 YWIgb25vZmZbXSwgdHh0YmluW10sIHJwYXRodGFiW107Ci1leHRlcm4gaW50IG5ycGF0aHRhYiwg eGZpbGV0eXBlLCBwYXR0ZXJucywgZ25mZXJyb3IsIG1vdmluZywgd2hhdCwgcGt0bnVtOwotZXh0 ZXJuIGludCBzdWNjZXNzLCBuZmlscywgc25kc3JjLCBxdWlldCwgbm9wdXNoLCByZWN1cnNpdmUs IGluc2VydmVyLCBiaW5hcnk7Ci1leHRlcm4gaW50IGZpbGVwZWVrLCBuc2NhbmZpbGUsIGZzZWNz LCB4ZmVyc3RhdCwgeGZlcm1vZGUsIGxhc3R4ZmVyLCB0c2VjczsKLWV4dGVybiBpbnQgYmFja2dy ZCwgc3BhY2tldHMsIHJwYWNrZXRzLCBzcGt0bCwgcnBrdGwsIHhhc2ttb3JlLCBjbWRfcm93czsK LWV4dGVybiBpbnQgbm9saW5rcywgbXNnZmxnLCBrZWVwOwotZXh0ZXJuIENLX09GRl9UIGZzaXpl LCBmZmMsIHRmYywgc2VuZHN0YXJ0LCBzbmRzbWFsbGVyLCBzbmRsYXJnZXIsIHJzX2xlbjsKLWV4 dGVybiBsb25nIGZpbGNudCwgeGZzZWNzLCB0ZmNwcywgY3BzLCBvbGRjcHM7Ci0KLSNpZmRlZiBG VFBfVElNRU9VVAotaW50IGZ0cF90aW1lZF9vdXQgPSAwOwotbG9uZyBmdHBfdGltZW91dCA9IDA7 Ci0jZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KLQotI2lmZGVmIEdGVElNRVIKLWV4dGVybiBDS0ZM T0FUIGZwdHNlY3MsIGZwZnNlY3MsIGZweGZzZWNzOwotI2Vsc2UKLWV4dGVybiBsb25nIHhmc2Vj czsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLWV4dGVybiBjaGFyIGZpbG5hbVtdLCAqIGZpbGVm aWxlLCBteWhvc3RbXTsKLWV4dGVybiBjaGFyICogc25kX21vdmUsICogcmN2X21vdmUsICogc25k X3JlbmFtZSwgKiByY3ZfcmVuYW1lOwotZXh0ZXJuIGludCBnX3NraXBidXAsIHNraXBidXAsIHNl bmRtb2RlOwotZXh0ZXJuIGludCBnX2Rpc3BsYSwgZmRpc3BsYSwgZGlzcGxhOwotCi0jaWZkZWYg TE9DVVMKLWV4dGVybiBpbnQgbG9jdXMsIGF1dG9sb2N1czsKLSNlbmRpZiAvKiBMT0NVUyAqLwot Ci0jaWZuZGVmIE5PQ1NFVFMKLWV4dGVybiBpbnQgbmZpbGMsIGRjc2V0NywgZGNzZXQ4LCBmaWxl b3JkZXI7Ci1leHRlcm4gc3RydWN0IGNzaW5mbyBmY3NpbmZvW107Ci1leHRlcm4gc3RydWN0IGtl eXRhYiBmY3N0YWJbXTsKLWV4dGVybiBpbnQgZmNoYXJzZXQ7Ci0jZW5kaWYgLyogTk9DU0VUUyAq LwotCi1leHRlcm4gY2hhciBzbmRiZWZvcmVbXSwgc25kYWZ0ZXJbXSwgKnNuZGV4Y2VwdFtdOyAv KiBTZWxlY3Rpb24gY3JpdGVyaWEgKi8KLWV4dGVybiBjaGFyIHNuZG5iZWZvcmVbXSwgc25kbmFm dGVyW10sICpyY3ZleGNlcHRbXTsKLWV4dGVybiBDSEFSIGZlb2w7Ci0KLWV4dGVybiBjaGFyICog cmVtZGVzdDsKLWV4dGVybiBpbnQgcmVtZmlsZSwgcmVtYXBwZCwgcmVtcGlwZTsKLQotI2lmbmRl ZiBOT1NQTAotZXh0ZXJuIGludCBjbWRfcXVvdGluZzsKLSNpZmRlZiBQVVRBUlJBWQotZXh0ZXJu IGludCBzbmR4bG8sIHNuZHhoaSwgc25keGluOwotZXh0ZXJuIGNoYXIgc25keG5hbVtdOwotZXh0 ZXJuIGNoYXIgKiphX3B0cltdOyAgICAgICAgICAgICAgICAgIC8qIEFycmF5IHBvaW50ZXJzICov Ci1leHRlcm4gaW50IGFfZGltW107ICAgICAgICAgICAgICAgICAgICAgLyogQXJyYXkgZGltZW5z aW9ucyAqLwotI2VuZGlmIC8qIFBVVEFSUkFZICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lm bmRlZiBOT01TRU5EICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1QVVQgYW5kIEFERCBTRU5E LUxJU1QgbGlzdHMgKi8KLWV4dGVybiBjaGFyICptc2ZpbGVzW107Ci1leHRlcm4gaW50IGZpbGVz aW5saXN0OwotZXh0ZXJuIHN0cnVjdCBmaWxlbGlzdCAqIGZpbGVoZWFkOwotZXh0ZXJuIHN0cnVj dCBmaWxlbGlzdCAqIGZpbGV0YWlsOwotZXh0ZXJuIHN0cnVjdCBmaWxlbGlzdCAqIGZpbGVuZXh0 OwotZXh0ZXJuIGludCBhZGRsaXN0OwotZXh0ZXJuIGNoYXIgZnNwZWNbXTsgICAgICAgICAgICAg ICAgICAgIC8qIE1vc3QgcmVjZW50IGZpbGVzcGVjICovCi1leHRlcm4gaW50IGZzcGVjbGVuOyAg ICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIGZzcGVjW10gYnVmZmVyICovCi0jZW5kaWYg LyogTk9NU0VORCAqLwotCi1leHRlcm4gaW50IHBpcGVzZW5kOwotI2lmZGVmIFBJUEVTRU5ECi1l eHRlcm4gY2hhciAqIHNuZGZpbHRlciwgKiByY3ZmaWx0ZXI7Ci0jZW5kaWYgLyogUElQRVNFTkQg Ki8KLQotI2lmZGVmIENLUk9PVAotZXh0ZXJuIGludCBja3Jvb3RlcnI7Ci0jZW5kaWYgLyogQ0tS T09UICovCi0KLSNpZmRlZiBLUkI0Ci1leHRlcm4gaW50IGtyYjRfYXV0b2dldDsKLV9QUk9UT1RZ UChjaGFyICogY2tfa3JiNF9yZWFsbW9maG9zdCwoY2hhciAqKSk7Ci0jZW5kaWYgLyogS1JCNCAq LwotCi0jaWZkZWYgS1JCNQotZXh0ZXJuIGludCBrcmI1X2F1dG9nZXQ7Ci1leHRlcm4gaW50IGty YjVfZF9ub19hZGRyZXNzZXM7Ci1fUFJPVE9UWVAoY2hhciAqIGNrX2tyYjVfcmVhbG1vZmhvc3Qs KGNoYXIgKikpOwotI2VuZGlmIC8qIEtSQjUgKi8KLQotI2lmZGVmIERDTURCVUYKLWV4dGVybiBj aGFyICphdG1idWY7ICAgICAgICAgICAgICAgICAgICAvKiBBdG9tIGJ1ZmZlciAobWFsbG9jJ2Qp ICovCi1leHRlcm4gY2hhciAqY21kYnVmOyAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBi dWZmZXIgKG1hbGxvYydkKSAqLwotZXh0ZXJuIGNoYXIgKmxpbmU7ICAgICAgICAgICAgICAgICAg ICAgIC8qIEJpZyBzdHJpbmcgYnVmZmVyICMxICovCi1leHRlcm4gY2hhciAqdG1wYnVmOyAgICAg ICAgICAgICAgICAgICAgLyogQmlnIHN0cmluZyBidWZmZXIgIzIgKi8KLSNlbHNlCi1leHRlcm4g Y2hhciBhdG1idWZbXTsgICAgICAgICAgICAgICAgICAgLyogVGhlIHNhbWUsIGJ1dCBzdGF0aWMg Ki8KLWV4dGVybiBjaGFyIGNtZGJ1ZltdOwotZXh0ZXJuIGNoYXIgbGluZVtdOwotZXh0ZXJuIGNo YXIgdG1wYnVmW107Ci0jZW5kaWYgLyogRENNREJVRiAqLwotCi1leHRlcm4gY2hhciAqIGNtYXJn LCAqIGNtYXJnMiwgKiogY21saXN0OyAvKiBGb3Igc2V0dGluZyB1cCBmaWxlIGxpc3RzICovCi0K LS8qIFB1YmxpYyB2YXJpYWJsZXMgZGVjbGFyZWQgaGVyZSAqLwotCi0jaWZkZWYgTk9YRkVSCi1p bnQgZnRwZ2V0ICA9ICAxOyAgICAgICAgICAgICAgICAgICAgICAgLyogR0VUL1BVVC9SRU1PVEUg b3JpZW50YXRpb24gRlRQICovCi0jZWxzZQotaW50IGZ0cGdldCAgPSAgMjsgICAgICAgICAgICAg ICAgICAgICAgIC8qIEdFVC9QVVQvUkVNT1RFIG9yaWVudGF0aW9uIEFVVE8gKi8KLSNlbmRpZiAv KiBOT1hGRVIgKi8KLWludCBmdHBjb2RlID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBM YXN0IEZUUCByZXNwb25zZSBjb2RlICovCi1pbnQgZnRwX2NtZGxpbiA9IDA7ICAgICAgICAgICAg ICAgICAgICAgLyogRlRQIGludm9rZWQgZnJvbSBjb21tYW5kIGxpbmUgKi8KLWludCBmdHBfZmFp ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGVFAgZmFpbHVyZSBjb3VudCAqLwotaW50 IGZ0cF9kZWIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUUCBkZWJ1Z2dpbmcgKi8K LWludCBmdHBfZGlzID0gLTE7CQkJLyogRlRQIGRpc3BsYXkgc3R5bGUgKi8KLWludCBmdHBfbG9n ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGVFAgQXV0by1sb2dpbiAqLwotaW50IHNh dl9sb2cgPSAtMTsKLWludCBmdHBfYWN0aW9uID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBG VFAgYWN0aW9uIGZyb20gY29tbWFuZCBsaW5lICovCi1pbnQgZnRwX2RhdGVzID0gMTsgICAgICAg ICAgICAgICAgICAgICAgLyogU2V0IGZpbGUgZGF0ZXMgZnJvbSBzZXJ2ZXIgKi8KLWludCBmdHBf eGZlcm1vZGUgPSBYTU9ERV9BOwkJLyogRlRQLXNwZWNpZmljIHRyYW5zZmVyIG1vZGUgKi8KLQot Y2hhciBmdHBfcmVwbHlfc3RyW0ZUUF9CVUZTSVpdID0gIiI7ICAgIC8qIExhc3QgbGluZSBvZiBw cmV2aW91cyByZXBseSAqLwotY2hhciBmdHBfc3J2dHlwW1NSVk5BTUxFTl0gPSB7IE5VTCwgTlVM IH07IC8qIFNlcnZlcidzIHN5c3RlbSB0eXBlICovCi1jaGFyIGZ0cF91c2VyX2hvc3RbTUFYX0RO U19OQU1FTEVOXT0gIiI7IC8qIEZUUCBob3N0bmFtZSBzcGVjaWZpZWQgYnkgdXNlciAqLwotY2hh ciAqIGZ0cF9ob3N0ID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIEZUUCBob3N0bmFtZSAqLwot Y2hhciAqIGZ0cF9sb2duYW1lID0gTlVMTDsgICAgICAgICAgICAgIC8qIEZUUCB1c2VybmFtZSAq LwotY2hhciAqIGZ0cF9yZGlyID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIFJlbW90ZSBkaXJl Y3RvcnkgZnJvbSBjbWRsaW5lICovCi1jaGFyICogZnRwX2FwdyA9IE5VTEw7CQkJLyogQW5vbnlt b3VzIHBhc3N3b3JkICovCi0KLS8qIERlZmluaXRpb25zIGFuZCB0eXBlZGVmcyBuZWVkZWQgZm9y IHByb3RvdHlwZXMgKi8KLQotI2RlZmluZSBzaWdfdCBteV9zaWdfdAotI2RlZmluZSBzaWd0eXBl IFNJR1RZUAotdHlwZWRlZiBzaWd0eXBlICgqc2lnX3QpKCk7Ci0KLS8qIFN0YXRpYyBnbG9iYWwg dmFyaWFibGVzICovCi0KLXN0YXRpYyBjaGFyIGZ0cHNuZGJ1ZltGVFBfQlVGU0laKzY0XTsKLQot c3RhdGljIGNoYXIgKiBmdHNfc3RvID0gTlVMTDsKLQotc3RhdGljIGludCBmdHBzbmRyZXQgPSAw Owotc3RhdGljIHN0cnVjdCBfZnRwc25kIHsKLSAgICBzaWdfdCBvbGRpbnRyLCBvbGRpbnRwOwot ICAgIGludCAgICAgICAgICAgIHJlcGx5OwotICAgIGludCAgICAgICAgICAgIGluY3MsCi0gICAg ICAgICAgICAgICAgICAgb3V0Y3M7Ci0gICAgY2hhciAqICAgICAgICAgY21kLCAqIGxvY2FsLCAq IHJlbW90ZTsKLSAgICBpbnQgICAgICAgICAgICBieXRlczsKLSAgICBpbnQgICAgICAgICAgICBy ZXN0YXJ0OwotICAgIGludCAgICAgICAgICAgIHhsYXRlOwotICAgIGNoYXIgKiAgICAgICAgIGxt b2RlOwotfSBmdHBzbmQ7Ci0KLS8qCi0gIFRoaXMgaXMganVzdCBhIGZpcnN0IHN0YWIgLS0gdGhl c2Ugc3RyaW5ncyBzaG91bGQgbWF0Y2ggaG93IHRoZQotICBjb3JyZXNwb25kaW5nIEZUUCBzZXJ2 ZXJzIGlkZW50aWZ5IHRoZW1zZWx2ZXMuCi0qLwotI2lmZGVmIFVOSVgKLXN0YXRpYyBjaGFyICog bXlvc3R5cGUgPSAiVU5JWCI7Ci0jZWxzZQotI2lmZGVmIFZNUwotLyogbm90IHlldC4uLiAqLwot c3RhdGljIGNoYXIgKiBteW9zdHlwZSA9ICJWTVMiOwotI2Vsc2UKLSNpZmRlZiBPUzIKLSNpZmRl ZiBOVAotc3RhdGljIGNoYXIgKiBteW9zdHlwZSA9ICJXSU4zMiI7Ci0jZWxzZQotc3RhdGljIGNo YXIgKiBteW9zdHlwZSA9ICJPUy8yIjsKLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UKLXN0YXRpYyBj aGFyICogbXlvc3R5cGUgPSAiVU5TVVBQT1JURUQiOwotI2VuZGlmIC8qIE9TMiAgKi8KLSNlbmRp ZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLXN0YXRpYyBpbnQgbm9pbml0ID0gMDsg ICAgICAgICAgICAgICAgICAvKiBEb24ndCBzZW5kIFJFU1QsIFNUUlUsIE1PREUgKi8KLXN0YXRp YyBpbnQgYWxpa2UgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBDbGllbnQvc2VydmVyIGxpa2Ug cGxhdGZvcm1zICovCi1zdGF0aWMgaW50IGxvY2FsID0gMTsgICAgICAgICAgICAgICAgICAgLyog U2hhZG93cyBLZXJtaXQgZ2xvYmFsICdsb2NhbCcgKi8KLXN0YXRpYyBpbnQgZG91dCA9IC0xOyAg ICAgICAgICAgICAgICAgICAvKiBEYXRhIGNvbm5lY3Rpb24gZmlsZSBkZXNjcmlwdG9yICovCi1z dGF0aWMgaW50IGRweWFjdGl2ZSA9IDA7ICAgICAgICAgICAgICAgLyogRGF0YSB0cmFuc2ZlciBp cyBhY3RpdmUgKi8KLXN0YXRpYyBpbnQgZ2xvYmFsZGluID0gLTE7ICAgICAgICAgICAgICAvKiBE YXRhIGNvbm5lY3Rpb24gZi5kLiAqLwotc3RhdGljIGludCBvdXQyc2NyZWVuID0gMDsgICAgICAg ICAgICAgIC8qIEdFVCBvdXRwdXQgaXMgdG8gc2NyZWVuICovCi1zdGF0aWMgaW50IGZvcmNldHlw ZSA9IDA7ICAgICAgICAgICAgICAgLyogRm9yY2UgdGV4dCBvciBiaW5hcnkgbW9kZSAqLwotc3Rh dGljIGludCBjYW5jZWxmaWxlID0gMDsgICAgICAgICAgICAgIC8qIEZpbGUgY2FuY2VsZWQgKi8K LXN0YXRpYyBpbnQgY2FuY2VsZ3JvdXAgPSAwOyAgICAgICAgICAgICAvKiBHcm91cCBjYW5jZWxl ZCAqLwotc3RhdGljIGludCBhbm9ueW1vdXMgPSAwOyAgICAgICAgICAgICAgIC8qIExvZ2dpbmcg aW4gYXMgYW5vbnltb3VzICovCi1zdGF0aWMgaW50IGxvZ2dlZGluID0gMDsgICAgICAgICAgICAg ICAgLyogTG9nZ2VkIGluIChvciBub3QpICovCi1zdGF0aWMgaW50IHB1dGVycm9yID0gMDsgICAg ICAgICAgICAgICAgLyogV2hhdCB0byBkbyBvbiBQVVQgZXJyb3IgKi8KLXN0YXRpYyBpbnQgZ2V0 ZXJyb3IgPSAwOyAgICAgICAgICAgICAgICAvKiBXaGF0IHRvIGRvIG9uIEdFVCBlcnJvciAqLwot c3RhdGljIGludCByZnJjID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIHJlbW90ZV9maWxlcygp IHJldHVybiBjb2RlICovCi1zdGF0aWMgaW50IG9rcmVzdGFydCA9IDA7ICAgICAgICAgICAgICAg LyogU2VydmVyIHVuZGVyc3RhbmRzIFJFU1QgKi8KLXN0YXRpYyBpbnQgcHJpbnRsaW5lcyA9IDA7 ICAgICAgICAgICAgICAvKiBnZXRyZXBseSgpc2hvdWxkIHByaW50IGRhdGEgbGluZXMgKi8KLXN0 YXRpYyBpbnQgaGF2ZXVybCA9IDA7ICAgICAgICAgICAgICAgICAvKiBJbnZva2VkIGJ5IGNvbW1h bmQtbGluZSBGVFAgVVJMICovCi1zdGF0aWMgaW50IG1kdG1vayA9IDE7CQkJLyogU2VydmVyIHN1 cHBvcnRzIE1EVE0gKi8KLXN0YXRpYyBpbnQgc2l6ZW9rID0gMTsKLXN0YXRpYyBpbnQgZmVhdG9r ID0gMTsKLXN0YXRpYyBpbnQgbWxzdG9rID0gMTsKLXN0YXRpYyBpbnQgc3RvdWFyZyA9IDE7Ci1z dGF0aWMgaW50IHR5cGVzZW50ID0gMDsKLXN0YXRpYyBpbnQgaGF2ZXNpZ2ludCA9IDA7Ci1zdGF0 aWMgbG9uZyBoYXZldHlwZSA9ICAwOwotc3RhdGljIENLX09GRl9UIGhhdmVzaXplID0gKENLX09G Rl9UKS0xOwotc3RhdGljIGNoYXIgKiBoYXZlbWR0bSA9IE5VTEw7Ci1zdGF0aWMgaW50IG1nZXRt ZXRob2QgPSAwOwkJLyogTkxTVCBvciBNTFNEICovCi1zdGF0aWMgaW50IG1nZXRmb3JjZWQgPSAw OwotCi1zdGF0aWMgaW50IGksIC8qIGosIGssICovIHgsIHksIHo7ICAgICAgLyogVm9sYXRpbGUg dGVtcG9yYXJpZXMgKi8KLXN0YXRpYyBpbnQgYzAsIGMxOyAgICAgICAgICAgICAgICAgICAgICAv KiBUZW1wIHZhcmlhYmxlcyBmb3IgY2hhcmFjdGVycyAqLwotCi1zdGF0aWMgY2hhciBwdXRwYXRo W0NLTUFYUEFUSCsxXSA9IHsgTlVMLCBOVUwgfTsKLXN0YXRpYyBjaGFyIGFzbmFtYnVmW0NLTUFY UEFUSCsxXSA9IHsgTlVMLCBOVUwgfTsKLQotI2RlZmluZSBSRk5CVUZTSVogNDA5NgkJCS8qIFJl bW90ZSBmaWxlbmFtZSBidWZmZXIgc2l6ZSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IG1heGJ1 ZiA9IDAsIGFjdHVhbGJ1ZiA9IDA7Ci1zdGF0aWMgQ0hBUiAqdWNidWYgPSBOVUxMOwotc3RhdGlj IGludCB1Y2J1ZnNpeiA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG5vdXQgPSAwOyAgICAgICAg ICAgLyogTnVtYmVyIG9mIGNoYXJzIGluIHVjYnVmICovCi0KLXN0YXRpYyBqbXBfYnVmIHJlY3Zj YW5jZWw7Ci1zdGF0aWMgam1wX2J1ZiBzZW5kY2FuY2VsOwotc3RhdGljIGptcF9idWYgcHRjYW5j ZWw7Ci1zdGF0aWMgam1wX2J1ZiBqY2FuY2VsOwotc3RhdGljIGludCBwdGFiZmxnID0gMDsKLQot LyogUHJvdGVjdGlvbiBsZXZlbCBzeW1ib2xzICovCi0KLSNkZWZpbmUgRlBMX0NMUiAxICAgICAg ICAgICAgICAgICAgICAgICAvKiBDbGVhciAqLwotI2RlZmluZSBGUExfU0FGIDIgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNhZmUgKi8KLSNkZWZpbmUgRlBMX1BSViAzICAgICAgICAgICAgICAg ICAgICAgICAvKiBQcml2YXRlICovCi0jZGVmaW5lIEZQTF9DT04gNCAgICAgICAgICAgICAgICAg ICAgICAgLyogQ29uZmlkZW50aWFsICovCi0KLS8qIFN5bWJvbHMgZm9yIGZpbGUgdHlwZXMgcmV0 dXJuZWQgYnkgTUxTVC9NTFNEICovCi0KLSNkZWZpbmUgRlRZUF9GSUxFIDEJCQkvKiBSZWd1bGFy IGZpbGUgKi8KLSNkZWZpbmUgRlRZUF9ESVIgIDIJCQkvKiBEaXJlY3RvcnkgKi8KLSNkZWZpbmUg RlRZUF9DRElSIDMJCQkvKiBDdXJyZW50IGRpcmVjdG9yeSAqLwotI2RlZmluZSBGVFlQX1BESVIg NAkJCS8qIFBhcmVudCBkaXJlY3RvcnkgKi8KLQotLyogRmlsZSB0eXBlIHN5bWJvbHMga2V5ZWQg dG8gdGhlIGZpbGUtdHlwZSBzeW1ib2xzIGZyb20gY2tja2VyLmggKi8KLQotI2RlZmluZSBGVFRf QVNDIFhZRlRfVCAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJICh0ZXh0KSAqLwotI2RlZmluZSBG VFRfQklOIFhZRlRfQiAgICAgICAgICAgICAgICAgIC8qIEJpbmFyeSAoaW1hZ2UpICovCi0jZGVm aW5lIEZUVF9URU4gWFlGVF9YICAgICAgICAgICAgICAgICAgLyogVEVORVggKFRPUFMtMjApICov Ci0KLS8qIFNlcnZlciBmZWF0dXJlIHRhYmxlIC0gc2Z0dGFiWzBdID4gMCBtZWFucyBzZXJ2ZXIg c3VwcG9ydHMgRkVBVCBhbmQgT1BUUyAqLwotCi1zdGF0aWMgaW50IHNmdHRhYlsxNl0gPSB7IDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfTsKLQotI2RlZmluZSBTRlRfQVVUSCAgMQkJ CS8qIEZUUCBzZXJ2ZXIgZmVhdHVyZSBjb2RlcyAqLwotI2RlZmluZSBTRlRfTEFORyAgMgotI2Rl ZmluZSBTRlRfTURUTSAgMwotI2RlZmluZSBTRlRfTUxTVCAgNAotI2RlZmluZSBTRlRfUEJTWiAg NQotI2RlZmluZSBTRlRfUFJPVCAgNgotI2RlZmluZSBTRlRfUkVTVCAgNwotI2RlZmluZSBTRlRf U0laRSAgOAotI2RlZmluZSBTRlRfVFZGUyAgOQotI2RlZmluZSBTRlRfVVRGOCAxMAotCi0jZGVm aW5lIENOVl9BVVRPICAyCQkJLyogRlRQIGZpbGVuYW1lIGNvbnZlcnNpb24gKi8KLSNkZWZpbmUg Q05WX0NOViAgIDEKLSNkZWZpbmUgQ05WX0xJVCAgIDAKLQotLyogU0VUIEZUUCB2YWx1ZXMgKi8K LQotc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBGVFAgdmFs dWVzLi4uICovCi0gIGZ0cF9hdXQgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0 by1hdXRoZW50aWNhdGlvbiAqLwotI2lmZGVmIEZUUF9TRUNVUklUWQotICBmdHBfY3J5ID0gMSwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG8tZW5jcnlwdGlvbiAqLwotICBmdHBfY2Z3 ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENyZWRlbnRpYWwgZm9yd2FyZGluZyAq LwotI2VuZGlmIC8qIEZUUF9TRUNVUklUWSAqLwotICBmdHBfY3BsID0gRlBMX0NMUiwgICAgICAg ICAgICAgICAgICAgIC8qIENvbW1hbmQgcHJvdGVjdGlvbiBsZXZlbCAqLwotICBmdHBfZHBsID0g RlBMX0NMUiwgICAgICAgICAgICAgICAgICAgIC8qIERhdGEgcHJvdGVjdGlvbiBsZXZlbCAqLwot I2lmZGVmIEZUUF9QUk9YWQotICBmdHBfcHJ4ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFVzZSBwcm94eSAqLwotI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwotICBzYXZfcHN2ID0gLTEs ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBzYXZpbmcgcGFzc2l2ZSBtb2RlICovCi0g IGZ0cF9wc3YgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFzc2l2ZSBtb2RlICov Ci0gIGZ0cF9zcGMgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBwb3J0IGNv bW1hbmRzICovCi0gIGZ0cF90eXAgPSBGVFRfQVNDLCAgICAgICAgICAgICAgICAgICAgLyogVHlw ZSAqLwotICBnZXRfYXV0byA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG9tYXRp YyB0eXBlIHN3aXRjaGluZyBmb3IgR0VUICovCi0gIHRlbmV4ID0gMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogVHlwZSBpcyBUZW5leCAqLwotICBmdHBfdXNuID0gMCwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFVuaXF1ZSBzZXJ2ZXIgbmFtZXMgKi8KLSAgZnRwX3BybSA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJtaXNzaW9ucyAqLwotICBmdHBfY252ID0g Q05WX0FVVE8sCQkJLyogRmlsZW5hbWUgY29udmVyc2lvbiAoMiA9IGF1dG8pICovCi0gIGZ0cF92 Ym0gPSBERUZfVkJNLCAgICAgICAgICAgICAgICAgICAgLyogVmVyYm9zZSBtb2RlICovCi0gIGZ0 cF92YnggPSBERUZfVkJNLCAgICAgICAgICAgICAgICAgICAgLyogU3RpY2t5IHZlcnNpb24gb2Yg c2FtZSAqLwotICBmdHBfZXJyID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9y IGFjdGlvbiAqLwotICBmdHBfZm5jID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZp bGVuYW1lIGNvbGxpc2lvbiBhY3Rpb24gKi8KLQotI2lmZGVmIENLX1NTTAotc3RhdGljIGludCBm dHBfYnVnX3VzZV9zc2xfdjIgPSAwOyAgICAgIC8qIHVzZSBTU0x2MiBmb3IgQVVUSCBTU0wgKi8K LSNlbmRpZiAvKiBDS19TU0wgKi8KLQotc3RhdGljIGludAotI2lmZGVmIE5PQ1NFVFMKLSAgZnRw X2NzciA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1vdGUgKHNlcnZlcikgY2hh cmFjdGVyIHNldCAqLwotI2Vsc2UKLSAgZnRwX2NzciA9IEZDX1VURjgsCi0jZW5kaWYgLyogTk9D U0VUUyAqLwotICBmdHBfeGxhID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJh Y3Rlci1zZXQgdHJhbnNsYXRpb24gb24vb2ZmICovCi1pbnQKLSAgZnRwX2NzeCA9IC0xLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBSZW1vdGUgY2hhcnNldCBjdXJyZW50bHkgaW4gdXNlICov Ci0gIGZ0cF9jc2wgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9jYWwgY2hhcnNl dCBjdXJyZW50bHkgaW4gdXNlICovCi0KLXN0YXRpYyBpbnQgZ19mdHBfdHlwID0gRlRUX0FTQzsg ICAgICAgICAvKiBGb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgZnRwX3R5cCAqLwotCi1jaGFyICog ZnRwX25tbCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgLyogL05BTUVMSVNUICovCi1jaGFyICog ZnRwX3RtcCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IHN0cmluZyAqLwot c3RhdGljIGNoYXIgKiBmdHBfYWNjID0gTlVMTDsgICAgICAgICAgIC8qIEFjY291bnQgc3RyaW5n ICovCi1zdGF0aWMgY2hhciAqIGF1dGhfdHlwZSA9IE5VTEw7ICAgICAgICAgLyogQXV0aGVudGlj YXRpb24gdHlwZSAqLwotc3RhdGljIGNoYXIgKiBzcnZfcmVuYW0gPSBOVUxMOyAgICAgICAgIC8q IFNlcnZlci1yZW5hbWUgc3RyaW5nICovCi1GSUxFICogZnBfbm1sID0gTlVMTDsgICAgICAgICAg ICAgICAgICAgLyogTmFtZWxpc3QgZmlsZSBwb2ludGVyICovCi0KLXN0YXRpYyBpbnQgY3NvY2tl dCA9IC0xOyAgICAgICAgICAgICAgICAvKiBDb250cm9sIHNvY2tldCAqLwotc3RhdGljIGludCBj b25uZWN0ZWQgPSAwOyAgICAgICAgICAgICAgIC8qIENvbm5lY3RlZCB0byBGVFAgc2VydmVyICov Ci0vKiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZnRwX3BvcnQgPSAwOyAqLyAvKiBGVFAgcG9ydCAq LyAKLS8qIHN0YXRpYyBpbnQgZnRwX3BvcnQgPSAwOyAqLwkJLyogU01TIDIwMDcvMDIvMTUgKi8K LXN0YXRpYyBpbnQgZnRwX3BvcnQgPSAwOwkJLyogZmRjIDIwMDcvMDgvMzAgKi8KLSNpZmRlZiBG VFBIT1NUCi1zdGF0aWMgaW50IGhvc3RjbWQgPSAwOyAgICAgICAgICAgICAgICAgLyogSGFzIEhP U1QgY29tbWFuZCBiZWVuIHNlbnQgKi8KLSNlbmRpZiAvKiBGVFBIT1NUICovCi1zdGF0aWMgaW50 IGZvcm0sIG1vZGUsIHN0cnUsIGJ5dGVzaXplLCBjdXJ0eXBlID0gRlRUX0FTQzsKLXN0YXRpYyBj aGFyIGJ5dGVuYW1lWzhdOwotCi0vKiBGb3IgcGFyc2luZyByZXBsaWVzIHRvIEZUUCBzZXJ2ZXIg Y29tbWFuZCAqLwotc3RhdGljIGNoYXIgKnJlcGx5X3BhcnNlLCByZXBseV9idWZbRlRQX0JVRlNJ Wl0sICpyZXBseV9wdHI7Ci0KLSNpZmRlZiBGVFBfUFJPWFkKLXN0YXRpYyBpbnQgcHJveHksIHVu aXhfcHJveHkKLSNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KLQotc3RhdGljIGNoYXIgcGFzdls2NF07 ICAgICAgICAgICAgICAgICAgIC8qIFBhc3NpdmUtbW9kZSBwb3J0ICovCi1zdGF0aWMgaW50IHBh c3NpdmVtb2RlID0gMDsKLXN0YXRpYyBpbnQgc2VuZHBvcnQgPSAwOwotc3RhdGljIGludCBzZXJ2 ZXJ0eXBlID0gMDsgICAgICAgICAgICAgIC8qIEZUUCBzZXJ2ZXIncyBPUyB0eXBlICovCi0KLXN0 YXRpYyBpbnQgdGVzdGluZyA9IDA7Ci1zdGF0aWMgY2hhciBmdHBjbWRidWZbRlRQX0JVRlNJWl07 Ci0KLS8qIE1hY3JvIGRlZmluaXRpb25zICovCi0KLSNkZWZpbmUgVUMoYikgY2tpdG9hKCgoaW50 KWIpJjB4ZmYpCi0jZGVmaW5lIG56KHgpICgoeCkgPT0gMCA/IDEgOiAoeCkpCi0KLS8qIENvbW1h bmQgdGFibGVzIGFuZCBkZWZpbml0aW9ucyAqLwotCi0jZGVmaW5lIEZUUF9BQ0MgIDEgICAgICAg ICAgICAgICAgICAgICAgLyogRlRQIGNvbW1hbmQga2V5d29yZCBjb2RlcyAqLwotI2RlZmluZSBG VFBfQVBQICAyCi0jZGVmaW5lIEZUUF9DV0QgIDMKLSNkZWZpbmUgRlRQX0NITSAgNAotI2RlZmlu ZSBGVFBfQ0xTICA1Ci0jZGVmaW5lIEZUUF9ERUwgIDYKLSNkZWZpbmUgRlRQX0RJUiAgNwotI2Rl ZmluZSBGVFBfR0VUICA4Ci0jZGVmaW5lIEZUUF9JREwgIDkKLSNkZWZpbmUgRlRQX01ERSAxMAot I2RlZmluZSBGVFBfTURJIDExCi0jZGVmaW5lIEZUUF9NR0UgMTIKLSNkZWZpbmUgRlRQX01LRCAx MwotI2RlZmluZSBGVFBfTU9EIDE0Ci0jZGVmaW5lIEZUUF9NUFUgMTUKLSNkZWZpbmUgRlRQX09Q TiAxNgotI2RlZmluZSBGVFBfUFVUIDE3Ci0jZGVmaW5lIEZUUF9QV0QgMTgKLSNkZWZpbmUgRlRQ X1JHRSAxOQotI2RlZmluZSBGVFBfUkVOIDIwCi0jZGVmaW5lIEZUUF9SRVMgMjEKLSNkZWZpbmUg RlRQX0hMUCAyMgotI2RlZmluZSBGVFBfUk1EIDIzCi0jZGVmaW5lIEZUUF9TVEEgMjQKLSNkZWZp bmUgRlRQX1NJVCAyNQotI2RlZmluZSBGVFBfU0laIDI2Ci0jZGVmaW5lIEZUUF9TWVMgMjcKLSNk ZWZpbmUgRlRQX1VNQSAyOAotI2RlZmluZSBGVFBfR1VQIDI5Ci0jZGVmaW5lIEZUUF9VU1IgMzAK LSNkZWZpbmUgRlRQX1FVTyAzMQotI2RlZmluZSBGVFBfVFlQIDMyCi0jZGVmaW5lIEZUUF9GRUEg MzMKLSNkZWZpbmUgRlRQX09QVCAzNAotI2RlZmluZSBGVFBfQ0hLIDM1Ci0jZGVmaW5lIEZUUF9W REkgMzYKLSNkZWZpbmUgRlRQX0VOQSAzNwotI2RlZmluZSBGVFBfRElTIDM4Ci0jZGVmaW5lIEZU UF9SRVAgMzkKLQotc3RydWN0IGtleXRhYiBncHJ0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIEdF VC1QVVQtUkVNT1RFIGtleXdvcmRzICovCi0gICAgeyAiYXV0byIsICAgIDIsIDAgfSwKLSAgICB7 ICJmdHAiLCAgICAgMSwgMCB9LAotICAgIHsgImtlcm1pdCIsICAwLCAwICB9Ci19OwotCi1zdGF0 aWMgc3RydWN0IGtleXRhYiBxb3JwW10gPSB7ICAgICAgICAgLyogUVVJVCBvciBQUk9DRUVEIGtl eXdvcmRzICovCi0gICAgeyAicHJvY2VlZCIsIDAsIDAgfSwgICAgICAgICAgICAgICAgLyogMCA9 IHByb2NlZWQgKi8KLSAgICB7ICJxdWl0IiwgICAgMSwgMCB9ICAgICAgICAgICAgICAgICAvKiAx ID0gcXVpdCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZnRwY21kdGFiW10gPSB7ICAg IC8qIEZUUCBjb21tYW5kIHRhYmxlICovCi0gICAgeyAiYWNjb3VudCIsICAgRlRQX0FDQywgMCB9 LAotICAgIHsgImFwcGVuZCIsICAgIEZUUF9BUFAsIDAgfSwKLSAgICB7ICJieWUiLCAgICAgICBG VFBfQ0xTLCAwIH0sCi0gICAgeyAiY2QiLCAgICAgICAgRlRQX0NXRCwgMCB9LAotICAgIHsgImNk dXAiLCAgICAgIEZUUF9HVVAsIDAgfSwKLSAgICB7ICJjaGVjayIsICAgICBGVFBfQ0hLLCAwIH0s Ci0gICAgeyAiY2htb2QiLCAgICAgRlRQX0NITSwgMCB9LAotICAgIHsgImNsb3NlIiwgICAgIEZU UF9DTFMsIDAgfSwKLSAgICB7ICJjd2QiLCAgICAgICBGVFBfQ1dELCBDTV9JTlYgfSwKLSAgICB7 ICJkZWxldGUiLCAgICBGVFBfTURFLCAwIH0sCi0gICAgeyAiZGlyZWN0b3J5IiwgRlRQX0RJUiwg MCB9LAotICAgIHsgImRpc2FibGUiLCAgIEZUUF9ESVMsIDAgfSwKLSAgICB7ICJlbmFibGUiLCAg ICBGVFBfRU5BLCAwIH0sCi0gICAgeyAiZmVhdHVyZXMiLCAgRlRQX0ZFQSwgMCB9LAotICAgIHsg ImdldCIsICAgICAgIEZUUF9HRVQsIDAgfSwKLSAgICB7ICJoZWxwIiwgICAgICBGVFBfSExQLCAw IH0sCi0gICAgeyAiaWRsZSIsICAgICAgRlRQX0lETCwgMCB9LAotICAgIHsgImxvZ2luIiwgICAg IEZUUF9VU1IsIENNX0lOViB9LAotICAgIHsgIm1kZWxldGUiLCAgIEZUUF9NREUsIENNX0lOViB9 LAotICAgIHsgIm1nZXQiLCAgICAgIEZUUF9NR0UsIDAgfSwKLSAgICB7ICJta2RpciIsICAgICBG VFBfTUtELCAwIH0sCi0gICAgeyAibW9kdGltZSIsICAgRlRQX01PRCwgMCB9LAotICAgIHsgIm1w dXQiLCAgICAgIEZUUF9NUFUsIDAgfSwKLSAgICB7ICJvcGVuIiwgICAgICBGVFBfT1BOLCAwIH0s Ci0gICAgeyAib3B0IiwgICAgICAgRlRQX09QVCwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgIm9w dHMiLCAgICAgIEZUUF9PUFQsIENNX0lOViB9LAotICAgIHsgIm9wdGlvbnMiLCAgIEZUUF9PUFQs IDAgfSwKLSAgICB7ICJwdXQiLCAgICAgICBGVFBfUFVULCAwIH0sCi0gICAgeyAicHdkIiwgICAg ICAgRlRQX1BXRCwgMCB9LAotICAgIHsgInF1aXQiLCAgICAgIEZUUF9DTFMsIENNX0lOViB9LAot ICAgIHsgInF1b3RlIiwgICAgIEZUUF9RVU8sIDAgfSwKLSAgICB7ICJyZWdldCIsICAgICBGVFBf UkdFLCAwIH0sCi0gICAgeyAicmVuYW1lIiwgICAgRlRQX1JFTiwgMCB9LAotICAgIHsgInJlcHV0 IiwgICAgIEZUUF9SRVAsIDAgfSwKLSAgICB7ICJyZXNlbmQiLCAgICBGVFBfUkVQLCBDTV9JTlYg fSwKLSAgICB7ICJyZXNldCIsICAgICBGVFBfUkVTLCAwIH0sCi0gICAgeyAicm1kaXIiLCAgICAg RlRQX1JNRCwgMCB9LAotICAgIHsgInNlbmQiLCAgICAgIEZUUF9QVVQsIENNX0lOViB9LAotICAg IHsgInNpdGUiLCAgICAgIEZUUF9TSVQsIDAgfSwKLSAgICB7ICJzaXplIiwgICAgICBGVFBfU0la LCAwIH0sCi0gICAgeyAic3RhdHVzIiwgICAgRlRQX1NUQSwgMCB9LAotICAgIHsgInN5c3RlbSIs ICAgIEZUUF9TWVMsIDAgfSwKLSAgICB7ICJ0eXBlIiwgICAgICBGVFBfVFlQLCAwIH0sCi0gICAg eyAidW1hc2siLCAgICAgRlRQX1VNQSwgMCB9LAotICAgIHsgInVwIiwgICAgICAgIEZUUF9HVVAs IENNX0lOViB9LAotICAgIHsgInVzZXIiLCAgICAgIEZUUF9VU1IsIDAgfSwKLSAgICB7ICJ2ZGly ZWN0b3J5IixGVFBfVkRJLCAwIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBu ZnRwY21kID0gKHNpemVvZihmdHBjbWR0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7 Ci0KLSNkZWZpbmUgT1BOX0FOTyAxCQkJLyogRlRQIE9QRU4gc3dpdGNoIGNvZGVzICovCi0jZGVm aW5lIE9QTl9QU1cgMgotI2RlZmluZSBPUE5fVVNSIDMKLSNkZWZpbmUgT1BOX0FDQyA0Ci0jZGVm aW5lIE9QTl9BQ1QgNQotI2RlZmluZSBPUE5fUFNWIDYKLSNkZWZpbmUgT1BOX1RMUyA3Ci0jZGVm aW5lIE9QTl9OSU4gOAotI2RlZmluZSBPUE5fTk9MIDkKLQotI2lmZGVmIEZUUF9TRUNVUklUWQot I2lmZGVmIENLX1NTTAotI2RlZmluZSBVU0VUTFNUQUIKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRs c3RhYltdID0geyAgICAgICAvKiBGVFAgU1NML1RMUyBzd2l0Y2hlcyAqLwotICAgIHsgIi9zc2wi LCAgICAgICBPUE5fVExTLCAwICAgIH0sCi0gICAgeyAiL3RscyIsICAgICAgIE9QTl9UTFMsIDAg ICAgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG50bHN0YWIgPSAoc2l6ZW9m KHRsc3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLSNlbmRpZiAvKiBDS19TU0wg Ki8KLSNlbmRpZiAvKiBGVFBfU0VDVVJJVFkgKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZnRw c3dpdGFiW10gPSB7ICAgIC8qIEZUUCBjb21tYW5kIHN3aXRjaGVzICovCi0gICAgeyAiL2FjY291 bnQiLCAgIE9QTl9BQ0MsIENNX0FSRyB9LAotICAgIHsgIi9hY3RpdmUiLCAgICBPUE5fQUNULCAw ICAgICAgfSwKLSAgICB7ICIvYW5vbnltb3VzIiwgT1BOX0FOTywgMCAgICAgIH0sCi0gICAgeyAi L25vaW5pdCIsICAgIE9QTl9OSU4sIDAgICAgICB9LAotICAgIHsgIi9ub2xvZ2luIiwgICBPUE5f Tk9MLCAwICAgICAgfSwKLSAgICB7ICIvcGFzc2l2ZSIsICAgT1BOX1BTViwgMCAgICAgIH0sCi0g ICAgeyAiL3Bhc3N3b3JkIiwgIE9QTl9QU1csIENNX0FSRyB9LAotICAgIHsgIi91c2VyIiwgICAg ICBPUE5fVVNSLCBDTV9BUkcgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5m dHBzd2kgPSAoc2l6ZW9mKGZ0cHN3aXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsK LQotLyogRlRQIHsgRU5BQkxFLCBESVNBQkxFIH0gaXRlbXMgKi8KLQotI2RlZmluZSBFTkFfRkVB VCAxCi0jZGVmaW5lIEVOQV9NRFRNIDIKLSNkZWZpbmUgRU5BX01MU1QgMwotI2RlZmluZSBFTkFf U0laRSA0Ci0jZGVmaW5lIEVOQV9BVVRIIDUKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZnRwZW5h dGFiW10gPSB7Ci0gICAgeyAiQVVUSCIsICBFTkFfQVVUSCwgMCB9LAotICAgIHsgIkZFQVQiLCAg RU5BX0ZFQVQsIDAgfSwKLSAgICB7ICJNRFRNIiwgIEVOQV9NRFRNLCAwIH0sCi0gICAgeyAiTUwi LCAgICBFTkFfTUxTVCwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgIk1MUyIsICAgRU5BX01MU1Qs IENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJNTFNEIiwgIEVOQV9NTFNULCBDTV9JTlYgfSwKLSAg ICB7ICJNTFNUIiwgIEVOQV9NTFNULCAwIH0sCi0gICAgeyAiU0laRSIsICBFTkFfU0laRSwgMCB9 LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmZ0cGVuYSA9IChzaXplb2YoZnRw ZW5hdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi0vKiBTRVQgRlRQIGNvbW1h bmQga2V5d29yZCBpbmRpY2VzICovCi0KLSNkZWZpbmUgRlRTX0FVVCAgMSAgICAgICAgICAgICAg ICAgICAgICAvKiBBdXRvYXV0aGVudGljYXRpb24gKi8KLSNkZWZpbmUgRlRTX0NSWSAgMiAgICAg ICAgICAgICAgICAgICAgICAvKiBFbmNyeXB0aW9uICovCi0jZGVmaW5lIEZUU19MT0cgIDMgICAg ICAgICAgICAgICAgICAgICAgLyogQXV0b2xvZ2luICovCi0jZGVmaW5lIEZUU19DUEwgIDQgICAg ICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBwcm90ZWN0aW9uIGxldmVsICovCi0jZGVmaW5l IEZUU19DRlcgIDUgICAgICAgICAgICAgICAgICAgICAgLyogQ3JlZGVudGlhbHMgZm9yd2FyZGlu ZyAqLwotI2RlZmluZSBGVFNfRFBMICA2ICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGEgcHJv dGVjdGlvbiBsZXZlbCAqLwotI2RlZmluZSBGVFNfREJHICA3ICAgICAgICAgICAgICAgICAgICAg IC8qIERlYnVnZ2luZyAqLwotI2RlZmluZSBGVFNfUFNWICA4ICAgICAgICAgICAgICAgICAgICAg IC8qIFBhc3NpdmUgbW9kZSAqLwotI2RlZmluZSBGVFNfU1BDICA5ICAgICAgICAgICAgICAgICAg ICAgIC8qIFNlbmQgcG9ydCBjb21tYW5kcyAqLwotI2RlZmluZSBGVFNfVFlQIDEwICAgICAgICAg ICAgICAgICAgICAgIC8qIChmaWxlKSBUeXBlICovCi0jZGVmaW5lIEZUU19VU04gMTEgICAgICAg ICAgICAgICAgICAgICAgLyogVW5pcXVlIHNlcnZlciBuYW1lcyAoZm9yIGZpbGVzKSAqLwotI2Rl ZmluZSBGVFNfVkJNIDEyICAgICAgICAgICAgICAgICAgICAgIC8qIFZlcmJvc2UgbW9kZSAqLwot I2RlZmluZSBGVFNfQVRQIDEzICAgICAgICAgICAgICAgICAgICAgIC8qIEF1dGhlbnRpY2F0aW9u IHR5cGUgKi8KLSNkZWZpbmUgRlRTX0NOViAxNCAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxl bmFtZSBjb252ZXJzaW9uICovCi0jZGVmaW5lIEZUU19UU1QgMTUgICAgICAgICAgICAgICAgICAg ICAgLyogVGVzdCAocHJvZ3Jlc3MpIG1lc3NhZ2VzICovCi0jZGVmaW5lIEZUU19QUk0gMTYgICAg ICAgICAgICAgICAgICAgICAgLyogKGZpbGUpIFBlcm1pc3Npb25zICovCi0jZGVmaW5lIEZUU19Y TEEgMTcgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcnNldCB0cmFuc2xhdGlvbiAqLwotI2Rl ZmluZSBGVFNfQ1NSIDE4ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBjaGFyc2V0ICov Ci0jZGVmaW5lIEZUU19FUlIgMTkgICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgYWN0aW9u ICovCi0jZGVmaW5lIEZUU19GTkMgMjAgICAgICAgICAgICAgICAgICAgICAgLyogQ29sbGlzaW9u ICovCi0jZGVmaW5lIEZUU19TUlAgMjEgICAgICAgICAgICAgICAgICAgICAgLyogU1JQIG9wdGlv bnMgKi8KLSNkZWZpbmUgRlRTX0dGVCAyMiAgICAgICAgICAgICAgICAgICAgICAvKiBHRVQgYXV0 b21hdGljIGZpbGUtdHlwZSBzd2l0Y2hpbmcgKi8KLSNkZWZpbmUgRlRTX0RBVCAyMyAgICAgICAg ICAgICAgICAgICAgICAvKiBTZXQgZmlsZSBkYXRlcyAqLwotI2RlZmluZSBGVFNfU1RPIDI0CQkJ LyogU2VydmVyIHRpbWUgb2Zmc2V0ICovCi0jZGVmaW5lIEZUU19BUFcgMjUJCQkvKiBBbm9ueW1v dXMgcGFzc3dvcmQgKi8KLSNkZWZpbmUgRlRTX0RJUyAyNgkJCS8qIEZpbGUtdHJhbnNmZXIgZGlz cGxheSBzdHlsZSAqLwotI2RlZmluZSBGVFNfQlVHIDI3ICAgICAgICAgICAgICAgICAgICAgIC8q IEJ1ZyhzKSAqLwotI2RlZmluZSBGVFNfVE1PIDI4CQkJLyogVGltZW91dCAqLwotCi0vKiBGVFAg QlVHUyAqLwotCi0jZGVmaW5lIEZUQl9TVjIgIDEgICAgICAgICAgICAgICAgICAgICAgLyogdXNl IFNTTHYyICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZ0cGJ1Z3RhYltdID0gewotICAgIHsg InVzZS1zc2wtdjIiLCAgICAgRlRCX1NWMiwgICAgICAgIDAgfQotfTsKLXN0YXRpYyBpbnQgbmZ0 cGJ1ZyA9IChzaXplb2YoZnRwYnVndGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLS8q IEZUUCBQVVQgb3B0aW9ucyAobXV0dWFsbHkgZXhjbHVzaXZlLCBub3QgYSBiaXRtYXNrKSAqLwot Ci0jZGVmaW5lIFBVVF9VUEQgMSAgICAgICAgICAgICAgICAgICAgICAgLyogVXBkYXRlICovCi0j ZGVmaW5lIFBVVF9SRVMgMiAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdGFydCAqLwotI2Rl ZmluZSBQVVRfU0lNIDQgICAgICAgICAgICAgICAgICAgICAgIC8qIFNpbXVsYXRpb24gKi8KLSNk ZWZpbmUgUFVUX0RJRiA4CQkJLyogRGF0ZXMgRGlmZmVyICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5 dGFiIGZ0cGNvbHh0YWJbXSA9IHsgLyogU0VUIEZUUCBDT0xMSVNJT04gb3B0aW9ucyAqLwotI2lm bmRlZiBNQUMKLSAgICB7ICJhcHBlbmQiLCAgICBYWUZYX0EsIDAgfSwgICAgICAgICAvKiBhcHBl bmQgdG8gb2xkIGZpbGUgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAg eyAiYXNrIiwgICAgICAgWFlGWF9RLCAwIH0sICAgICAgICAgLyogYXNrIHdoYXQgdG8gZG8gKG5v dCBpbXBsZW1lbnRlZCkgKi8KLSNlbmRpZgotICAgIHsgImJhY2t1cCIsICAgIFhZRlhfQiwgMCB9 LCAgICAgICAgIC8qIHJlbmFtZSBvbGQgZmlsZSAqLwotI2lmbmRlZiBNQUMKLSAgICB7ICJkYXRl cy1kaWZmZXIiLCBYWUZYX00sIDAgfSwJLyogYWNjZXB0IGlmIGRhdGVzIGRpZmZlciAqLwotICAg IHsgImRpc2NhcmQiLCAgIFhZRlhfRCwgMCB9LCAgICAgICAgIC8qIGRvbid0IGFjY2VwdCBuZXcg ZmlsZSAqLwotICAgIHsgIm5vLXN1cGVyc2VkZSIsIFhZRlhfRCwgQ01fSU5WIH0sIC8qIGRpdHRv IChNU0sgY29tcGF0aWJpbGl0eSkgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSAgICB7ICJvdmVyd3Jp dGUiLCBYWUZYX1gsIDAgfSwgICAgICAgICAvKiBvdmVyd3JpdGUgdGhlIG9sZCBmaWxlICovCi0g ICAgeyAicmVuYW1lIiwgICAgWFlGWF9SLCAwIH0sICAgICAgICAgLyogcmVuYW1lIHRoZSBpbmNv bWluZyBmaWxlICovCi0jaWZuZGVmIE1BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog VGhpcyBjcmFzaGVzIE1hYyBLZXJtaXQuICovCi0gICAgeyAidXBkYXRlIiwgICAgWFlGWF9VLCAw IH0sICAgICAgICAgLyogcmVwbGFjZSBpZiBuZXdlciAqLwotI2VuZGlmIC8qIE1BQyAqLwotICAg IHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmZ0cGNvbHggPSAoc2l6ZW9mKGZ0cGNvbHh0 YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLQotI2lmZGVmIEZUUF9TRUNVUklU WQotLyogRlRQIGF1dGhlbnRpY2F0aW9uIG9wdGlvbnMgKi8KLQotI2RlZmluZSBGVEFfQVVUTyAw ICAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG8gKi8KLSNkZWZpbmUgRlRBX1NSUCAgMSAgICAg ICAgICAgICAgICAgICAgICAvKiBTUlAgKi8KLSNkZWZpbmUgRlRBX0dLNSAgMiAgICAgICAgICAg ICAgICAgICAgICAvKiBLZXJiZXJvcyA1ICovCi0jZGVmaW5lIEZUQV9LNCAgIDMgICAgICAgICAg ICAgICAgICAgICAgLyogS2VyYmVyb3MgNCAqLwotI2RlZmluZSBGVEFfU1NMICA0ICAgICAgICAg ICAgICAgICAgICAgIC8qIFNTTCAqLwotI2RlZmluZSBGVEFfVExTICA1ICAgICAgICAgICAgICAg ICAgICAgIC8qIFRMUyAqLwotCi0vKiBGVFAgYXV0aGVudGljYXRpb24gdHlwZXMgKi8KLQotI2Rl ZmluZSBGVFBBVFlQUyA4Ci1zdGF0aWMgaW50IGZ0cF9hdXRoX3R5cGVbRlRQQVRZUFNdID0gewot I2lmZGVmIEZUUF9HU1NBUEkKLSAgICBGVEFfR0s1LCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBHU1NBUEkgS2VyYmVyb3MgNSAqLwotI2VuZGlmIC8qIEZUUF9HSzUgKi8KLSNpZmRlZiBG VFBfU1JQCi0gICAgRlRBX1NSUCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU1JQICov Ci0jZW5kaWYgLyogRlRQX1NSUCAqLwotI2lmZGVmIEZUUF9LUkI0Ci0gICAgRlRBX0s0LCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNCAqLwotI2VuZGlmIC8qIEZUUF9L UkI0ICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgRlRBX1RMUywgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVExTICovCi0gICAgRlRBX1NTTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU1NMICovCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgMAotfTsKLQotc3RhdGljIHN0cnVj dCBrZXl0YWIgZnRwYXV0aFtdID0geyAgICAgIC8qIFNFVCBGVFAgQVVUSFRZUEUgY21kIHRhYmxl ICovCi0gICAgeyAiYXV0b21hdGljIiwgRlRBX0FVVE8sICBDTV9JTlYgfSwKLSNpZmRlZiBGVFBf R1NTQVBJCi0gICAgeyAiZ3NzYXBpLWtyYjUiLCBGVEFfR0s1LCAwIH0sCi0jZW5kaWYgLyogRlRQ X0dTU0FQSSAqLwotI2lmZGVmIEZUUF9LUkI0Ci0gICAgeyAiazQiLCAgICAgICBGVEFfSzQsICAg ICBDTV9JTlYgfSwKLSNlbmRpZiAvKiBGVFBfS1JCNCAqLwotI2lmZGVmIEZUUF9HU1NBUEkKLSAg ICB7ICJrNSIsICAgICAgICBGVEFfR0s1LCAgIENNX0lOViB9LAotI2VuZGlmIC8qIEZUUF9HU1NB UEkgKi8KLSNpZmRlZiBGVFBfS1JCNAotICAgIHsgImtlcmJlcm9zNCIsIEZUQV9LNCwgICAgMCB9 LAotI2VuZGlmIC8qIEZUUF9LUkI0ICovCi0jaWZkZWYgRlRQX0dTU0FQSQotICAgIHsgImtlcmJl cm9zNSIsIEZUQV9HSzUsICAgQ01fSU5WIH0sCi0jZW5kaWYgLyogRlRQX0dTU0FQSSAqLwotI2lm ZGVmIEZUUF9LUkI0Ci0gICAgeyAia2VyYmVyb3NfaXYiLEZUQV9LNCwgICBDTV9JTlYgfSwKLSNl bmRpZiAvKiBGVFBfS1JCNCAqLwotI2lmZGVmIEZUUF9HU1NBUEkKLSAgICB7ICJrZXJiZXJvc192 IiwgRlRBX0dLNSwgIENNX0lOViB9LAotI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KLSNpZmRlZiBG VFBfS1JCNAotICAgIHsgImtyYjQiLCAgICAgRlRBX0s0LCAgICAgQ01fSU5WIH0sCi0jZW5kaWYg LyogRlRQX0tSQjQgKi8KLSNpZmRlZiBGVFBfR1NTQVBJCi0gICAgeyAia3JiNSIsICAgICBGVEFf R0s1LCAgICBDTV9JTlYgfSwKLSNlbmRpZiAvKiBGVFBfR1NTQVBJICovCi0jaWZkZWYgRlRQX1NS UAotICAgIHsgInNycCIsICAgICAgRlRBX1NSUCwgICAgIDAgfSwKLSNlbmRpZiAvKiBGVFBfU1JQ ICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgeyAic3NsIiwgICAgICBGVEFfU1NMLCAgICAgMCB9LAot ICAgIHsgInRscyIsICAgICAgRlRBX1RMUywgICAgIDAgfSwKLSNlbmRpZiAvKiBDS19TU0wgKi8K LSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5mdHBhdXRoID0gKHNpemVvZihmdHBh dXRoKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi0jaWZkZWYgRlRQX1NSUAotI2Rl ZmluZSBTUlBfQ0lQSEVSIDEKLSNkZWZpbmUgU1JQX0hBU0ggICAyCi1zdGF0aWMgc3RydWN0IGtl eXRhYiBmdHBzcnBbXSA9IHsgICAgICAvKiBTRVQgRlRQIFNSUCBjb21tYW5kIHRhYmxlICovCi0g ICAgeyAiY2lwaGVyIiwgICBTUlBfQ0lQSEVSLCAgICAgMCB9LAotICAgIHsgImhhc2giLCAgICAg U1JQX0hBU0gsICAgICAgIDAgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5m dHBzcnAgPSAoc2l6ZW9mKGZ0cHNycCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLSNl bmRpZiAvKiBGVFBfU1JQICovCi0jZW5kaWYgLyogRlRQX1NFQ1VSSVRZICovCi0KLXN0YXRpYyBz dHJ1Y3Qga2V5dGFiIGZ0cHNldFtdID0geyAgICAgICAvKiBTRVQgRlRQIGNvbW1tYW5kIHRhYmxl ICovCi0gICAgeyAiYW5vbnltb3VzLXBhc3N3b3JkIiwgICAgICAgRlRTX0FQVywgMCB9LAotI2lm ZGVmIEZUUF9TRUNVUklUWQotICAgIHsgImF1dGh0eXBlIiwgICAgICAgICAgICAgICAgIEZUU19B VFAsIDAgfSwKLSAgICB7ICJhdXRvYXV0aGVudGljYXRpb24iLCAgICAgICBGVFNfQVVULCAwIH0s Ci0gICAgeyAiYXV0b2VuY3J5cHRpb24iLCAgICAgICAgICAgRlRTX0NSWSwgMCB9LAotI2VuZGlm IC8qIEZUUF9TRUNVUklUWSAqLwotICAgIHsgImF1dG9sb2dpbiIsICAgICAgICAgICAgICAgIEZU U19MT0csIDAgfSwKLSAgICB7ICJidWciLCAgICAgICAgICAgICAgICAgICAgICBGVFNfQlVHLCAw IH0sCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICB7ICJjaGFyYWN0ZXItc2V0LXRyYW5zbGF0aW9uIixG VFNfWExBLCAwIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIHsgImNvbGxpc2lvbiIsICAg ICAgICAgICAgICAgIEZUU19GTkMsIDAgfSwKLSNpZmRlZiBGVFBfU0VDVVJJVFkKLSAgICB7ICJj b21tYW5kLXByb3RlY3Rpb24tbGV2ZWwiLCBGVFNfQ1BMLCAwIH0sCi0gICAgeyAiY3BsIiwgICAg ICAgICAgICAgICAgICAgICAgRlRTX0NQTCwgQ01fSU5WIH0sCi0gICAgeyAiY3JlZGVudGlhbC1m b3J3YXJkaW5nIiwgICAgRlRTX0NGVywgMCB9LAotICAgIHsgImRhIiwgICAgICAgICAgICAgICAg ICAgICAgIEZUU19EQVQsIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJkYXRhLXByb3RlY3Rpb24t bGV2ZWwiLCAgICBGVFNfRFBMLCAwIH0sCi0jZW5kaWYgLyogRlRQX1NFQ1VSSVRZICovCi0gICAg eyAiZGF0ZXMiLCAgICAgICAgICAgICAgICAgICAgRlRTX0RBVCwgMCB9LAotICAgIHsgImRlYnVn IiwgICAgICAgICAgICAgICAgICAgIEZUU19EQkcsIDAgfSwKLSAgICB7ICJkaXNwbGF5IiwgICAg ICAgICAgICAgICAgICBGVFNfRElTLCAwIH0sCi0jaWZkZWYgRlRQX1NFQ1VSSVRZCi0gICAgeyAi ZHBsIiwgICAgICAgICAgICAgICAgICAgICAgRlRTX0RQTCwgQ01fSU5WIH0sCi0jZW5kaWYgLyog RlRQX1NFQ1VSSVRZICovCi0gICAgeyAiZXJyb3ItYWN0aW9uIiwgICAgICAgICAgICAgRlRTX0VS UiwgMCB9LAotICAgIHsgImZpbGVuYW1lcyIsICAgICAgICAgICAgICAgIEZUU19DTlYsIDAgfSwK LSAgICB7ICJnZXQtZmlsZXR5cGUtc3dpdGNoaW5nIiwgICBGVFNfR0ZULCAwIH0sCi0gICAgeyAi cGFzc2l2ZS1tb2RlIiwgICAgICAgICAgICAgRlRTX1BTViwgMCB9LAotICAgIHsgInBhc3YiLCAg ICAgICAgICAgICAgICAgICAgIEZUU19QU1YsIENNX0lOViB9LAotICAgIHsgInBlcm1pc3Npb25z IiwgICAgICAgICAgICAgIEZUU19QUk0sIDAgfSwKLSAgICB7ICJwcm9ncmVzcy1tZXNzYWdlcyIs ICAgICAgICBGVFNfVFNULCAwIH0sCi0gICAgeyAic2VuZC1wb3J0LWNvbW1hbmRzIiwgICAgICAg RlRTX1NQQywgMCB9LAotI2lmbmRlZiBOT0NTRVRTCi0gICAgeyAic2VydmVyLWNoYXJhY3Rlci1z ZXQiLCAgICAgRlRTX0NTUiwgMCB9LAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICB7ICJzZXJ2 ZXItdGltZS1vZmZzZXQiLCAgICAgICBGVFNfU1RPLCAwIH0sCi0jaWZkZWYgRlRQX1NSUAotICAg IHsgInNycCIsICAgICAgICAgICAgICAgICAgICAgIEZUU19TUlAsIDAgfSwKLSNlbHNlCi0gICAg eyAic3JwIiwgICAgICAgICAgICAgICAgICAgICAgRlRTX1NSUCwgQ01fSU5WIH0sCi0jZW5kaWYg LyogRlRQX1NSUCAqLwotI2lmZGVmIEZUUF9USU1FT1VUCi0gICAgeyAidGltZW91dCIsICAgICAg ICAgICAgICAgICAgRlRTX1RNTywgMCB9LAotI2VuZGlmCS8qIEZUUF9USU1FT1VUICovCi0gICAg eyAidHlwZSIsICAgICAgICAgICAgICAgICAgICAgRlRTX1RZUCwgMCB9LAotICAgIHsgInVuaXF1 ZS1zZXJ2ZXItbmFtZXMiLCAgICAgIEZUU19VU04sIDAgfSwKLSAgICB7ICJ2ZXJib3NlLW1vZGUi LCAgICAgICAgICAgICBGVFNfVkJNLCAwIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGlj IGludCBuZnRwc2V0ID0gKHNpemVvZihmdHBzZXQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAt IDE7Ci0KLS8qCi0gIEdFVCBhbmQgUFVUIHN3aXRjaGVzIGFyZSBhcHByb3hpbWF0ZWx5IHRoZSBz YW1lIGFzIEtlcm1pdCBHRVQgYW5kIFNFTkQsCi0gIGFuZCB1c2UgdGhlIHNhbWUgU05EX3h4eCBk ZWZpbml0aW9ucywgYnV0IGhpamFjayBhIGNvdXBsZSBmb3IgRlRQIHVzZS4KLSAgRG9uJ3QganVz dCBtYWtlIHVwIG5ldyBvbmVzLCBzaW5jZSB0aGUgbnVtYmVyIG9mIFNORF94eHggb3B0aW9ucyBt dXN0IGJlCi0gIGtub3duIGluIGFkdmFuY2UgZm9yIHRoZSBzd2l0Y2gtcGFyc2luZyBhcnJheXMu Ci0qLwotI2RlZmluZSBTTkRfVVNOIFNORF9QUk8gICAgICAgICAgICAgICAgIC8qIC9VTklRVUUg aW5zdGVhZCBvZiAvUFJPVE9DT0wgKi8KLSNkZWZpbmUgU05EX1BSTSBTTkRfUElQICAgICAgICAg ICAgICAgICAvKiAvUEVSTUlTU0lPTlMgaW5zdGVhZCBvZiAvUElQRVMgKi8KLSNkZWZpbmUgU05E X1RFTiBTTkRfQ0FMICAgICAgICAgICAgICAgICAvKiAvVEVORVggaW5zdGVhZCBvZiAvQ0FMSUJS QVRFICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHB1dHN3aVtdID0geyAgICAgICAvKiBGVFAg UFVUIHN3aXRjaCB0YWJsZSAqLwotICAgIHsgIi9hZnRlciIsICAgICAgICAgICAgICAgIFNORF9B RlQsIENNX0FSRyB9LAotI2lmZGVmIFBVVEFSUkFZCi0gICAgeyAiL2FycmF5IiwgICAgICAgICAg ICAgICAgU05EX0FSUiwgQ01fQVJHIH0sCi0jZW5kaWYgLyogUFVUQVJSQVkgKi8KLSAgICB7ICIv YXMiLCAgICAgICAgICAgICAgICAgICBTTkRfQVNOLCBDTV9BUkd8Q01fSU5WfENNX0FCUiB9LAot ICAgIHsgIi9hcy1uYW1lIiwgICAgICAgICAgICAgIFNORF9BU04sIENNX0FSRyB9LAotICAgIHsg Ii9hc2NpaSIsICAgICAgICAgICAgICAgIFNORF9UWFQsIENNX0lOViB9LAotICAgIHsgIi9iIiwg ICAgICAgICAgICAgICAgICAgIFNORF9CSU4sIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICIvYmVm b3JlIiwgICAgICAgICAgICAgICBTTkRfQkVGLCBDTV9BUkcgfSwKLSAgICB7ICIvYmluYXJ5Iiwg ICAgICAgICAgICAgICBTTkRfQklOLCAwIH0sCi0jaWZkZWYgUFVUUElQRQotICAgIHsgIi9jb21t YW5kIiwgICAgICAgICAgICAgIFNORF9DTUQsIENNX1BTSCB9LAotI2VuZGlmIC8qIFBVVFBJUEUg Ki8KLSNpZmRlZiBDT01NRU5UCi0vKiBUaGlzIHdvcmtzIGJ1dCBpdCdzIGRhbmdlcm91cyAqLwot I2lmZGVmIERPVVBEQVRFCi0gICAgeyAiL2RhdGVzLWRpZmZlciIsICAgICAgICAgU05EX0RJRiwg Q01fSU5WIH0sCi0jZW5kaWYgLyogRE9VUERBVEUgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0g ICAgeyAiL2RlbGV0ZSIsICAgICAgICAgICAgICAgU05EX0RFTCwgMCB9LAotI2lmZGVmIFVOSVhP Uk9TSwotICAgIHsgIi9kb3RmaWxlcyIsICAgICAgICAgICAgIFNORF9ET1QsIDAgfSwKLSNlbmRp ZiAvKiBVTklYT1JPU0sgKi8KLSAgICB7ICIvZXJyb3ItYWN0aW9uIiwgICAgICAgICBTTkRfRVJS LCBDTV9BUkcgfSwKLSAgICB7ICIvZXhjZXB0IiwgICAgICAgICAgICAgICBTTkRfRVhDLCBDTV9B UkcgfSwKLSAgICB7ICIvZmlsZW5hbWVzIiwgICAgICAgICAgICBTTkRfTkFNLCBDTV9BUkcgfSwK LSNpZmRlZiBQSVBFU0VORAotI2lmbmRlZiBOT1NQTAotICAgIHsgIi9maWx0ZXIiLCAgICAgICAg ICAgICAgIFNORF9GTFQsIENNX0FSR3xDTV9QU0ggfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2Vu ZGlmIC8qIFBJUEVTRU5EICovCi0jaWZkZWYgQ0tTWU1MSU5LCi0gICAgeyAiL2ZvbGxvd2xpbmtz IiwgICAgICAgICAgU05EX0xOSywgMCB9LAotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotI2lmZGVm IFZNUwotICAgIHsgIi9pbWFnZSIsICAgICAgICAgICAgICAgIFNORF9JTUcsIDAgfSwKLSNlbHNl Ci0gICAgeyAiL2ltYWdlIiwgICAgICAgICAgICAgICAgU05EX0JJTiwgQ01fSU5WIH0sCi0jZW5k aWYgLyogVk1TICovCi0gICAgeyAiL2xhcmdlci10aGFuIiwgICAgICAgICAgU05EX0xBUiwgQ01f QVJHIH0sCi0gICAgeyAiL2xpc3RmaWxlIiwgICAgICAgICAgICAgU05EX0ZJTCwgQ01fQVJHIH0s Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICB7ICIvbG9jYWwtY2hhcmFjdGVyLXNldCIsICBTTkRfQ1NM LCBDTV9BUkcgfSwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jaWZkZWYgQ0tfVE1QRElSCi0gICAg eyAiL21vdmUtdG8iLCAgICAgICAgICAgICAgU05EX01PViwgQ01fQVJHIH0sCi0jZW5kaWYgLyog Q0tfVE1QRElSICovCi0gICAgeyAiL25vYmFja3VwZmlsZXMiLCAgICAgICAgU05EX05PQiwgMCB9 LAotI2lmZGVmIFVOSVhPUk9TSwotICAgIHsgIi9ub2RvdGZpbGVzIiwgICAgICAgICAgIFNORF9O T0QsIDAgfSwKLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSNpZmRlZiBDS1NZTUxJTksKLSAgICB7 ICIvbm9mb2xsb3dsaW5rcyIsICAgICAgICBTTkRfTkxLLCAwIH0sCi0jZW5kaWYgLyogQ0tTWU1M SU5LICovCi0KLSAgICB7ICIvbm90LWFmdGVyIiwgICAgICAgICAgICBTTkRfTkFGLCBDTV9BUkcg fSwKLSAgICB7ICIvbm90LWJlZm9yZSIsICAgICAgICAgICBTTkRfTkJFLCBDTV9BUkcgfSwKLSNp ZmRlZiBVTklYCi0gICAgeyAiL3Blcm1pc3Npb25zIiwgICAgICAgICAgU05EX1BSTSwgQ01fQVJH IH0sCi0jZWxzZQotICAgIHsgIi9wZXJtaXNzaW9ucyIsICAgICAgICAgIFNORF9QUk0sIENNX0FS R3xDTV9JTlYgfSwKLSNlbmRpZiAvKiBVTklYICovCi0gICAgeyAiL3F1aWV0IiwgICAgICAgICAg ICAgICAgU05EX1NISCwgMCB9LAotI2lmZGVmIEZUUF9SRVNUQVJUCi0gICAgeyAiL3JlY292ZXIi LCAgICAgICAgICAgICAgU05EX1JFUywgMCB9LAotI2VuZGlmIC8qIEZUUF9SRVNUQVJUICovCi0j aWZkZWYgUkVDVVJTSVZFCi0gICAgeyAiL3JlY3Vyc2l2ZSIsICAgICAgICAgICAgU05EX1JFQywg MCB9LAotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgIHsgIi9yZW5hbWUtdG8iLCAgICAgICAg ICAgIFNORF9SRU4sIENNX0FSRyB9LAotI2lmZGVmIEZUUF9SRVNUQVJUCi0gICAgeyAiL3Jlc3Rh cnQiLCAgICAgICAgICAgICAgU05EX1JFUywgQ01fSU5WIH0sCi0jZW5kaWYgLyogRlRQX1JFU1RB UlQgKi8KLSNpZm5kZWYgTk9DU0VUUwotICAgIHsgIi9zZXJ2ZXItY2hhcmFjdGVyLXNldCIsIFNO RF9DU1IsIENNX0FSRyB9LAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICB7ICIvc2VydmVyLXJl bmFtZS10byIsICAgICBTTkRfU1JOLCBDTV9BUkcgfSwKLSAgICB7ICIvc2ltdWxhdGUiLCAgICAg ICAgICAgICBTTkRfU0lNLCAwIH0sCi0gICAgeyAiL3NpbmNlIiwgICAgICAgICAgICAgICAgU05E X0FGVCwgQ01fSU5WfENNX0FSRyB9LAotICAgIHsgIi9zbWFsbGVyLXRoYW4iLCAgICAgICAgIFNO RF9TTUEsIENNX0FSRyB9LAotI2lmZGVmIENPTU1FTlQKLSAgICB7ICIvc3RhcnRpbmctYXQiLCAg ICAgICAgICBTTkRfU1RBLCBDTV9BUkcgfSwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYg UkVDVVJTSVZFCi0gICAgeyAiL3N1YmRpcmVjdG9yaWVzIiwgICAgICAgU05EX1JFQywgQ01fSU5W IH0sCi0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0gICAgeyAiL3RlbmV4IiwgICAgICAgICAgICAg ICAgU05EX1RFTiwgMCB9LAotICAgIHsgIi90ZXh0IiwgICAgICAgICAgICAgICAgIFNORF9UWFQs IDAgfSwKLSNpZm5kZWYgTk9DU0VUUwotICAgIHsgIi90cmFuc3BhcmVudCIsICAgICAgICAgIFNO RF9YUEEsIDAgfSwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgeyAiL3R5cGUiLCAgICAgICAg ICAgICAgICAgU05EX1RZUCwgQ01fQVJHIH0sCi0jaWZkZWYgRE9VUERBVEUKLSAgICB7ICIvdXBk YXRlIiwgICAgICAgICAgICAgICBTTkRfVVBELCAwIH0sCi0jZW5kaWYgLyogRE9VUERBVEUgKi8K LSAgICB7ICIvdW5pcXVlLXNlcnZlci1uYW1lcyIsICBTTkRfVVNOLCAwIH0sCi0gICAgeyAiIiwg MCwgMCB9Ci19Owotc3RhdGljIGludCBucHV0c3dpID0gKHNpemVvZihwdXRzd2kpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGdldHN3aVtdID0g eyAgICAgICAvKiBGVFAgW01dR0VUIHN3aXRjaCB0YWJsZSAqLwotICAgIHsgIi9hZnRlciIsICAg ICAgICAgICAgICAgIFNORF9BRlQsIENNX0lOViB9LAotICAgIHsgIi9hcyIsICAgICAgICAgICAg ICAgICAgIFNORF9BU04sIENNX0FSR3xDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiL2FzLW5hbWUi LCAgICAgICAgICAgICAgU05EX0FTTiwgQ01fQVJHIH0sCi0gICAgeyAiL2FzY2lpIiwgICAgICAg ICAgICAgICAgU05EX1RYVCwgQ01fSU5WIH0sCi0gICAgeyAiL2JlZm9yZSIsICAgICAgICAgICAg ICAgU05EX0JFRiwgQ01fSU5WIH0sCi0gICAgeyAiL2JpbmFyeSIsICAgICAgICAgICAgICAgU05E X0JJTiwgMCB9LAotICAgIHsgIi9jb2xsaXNpb24iLCAgICAgICAgICAgIFNORF9DT0wsIENNX0FS RyB9LAotI2lmZGVmIFBVVFBJUEUKLSAgICB7ICIvY29tbWFuZCIsICAgICAgICAgICAgICBTTkRf Q01ELCBDTV9QU0ggfSwKLSNlbmRpZiAvKiBQVVRQSVBFICovCi0gICAgeyAiL2RlbGV0ZSIsICAg ICAgICAgICAgICAgU05EX0RFTCwgMCB9LAotICAgIHsgIi9lcnJvci1hY3Rpb24iLCAgICAgICAg IFNORF9FUlIsIENNX0FSRyB9LAotICAgIHsgIi9leGNlcHQiLCAgICAgICAgICAgICAgIFNORF9F WEMsIENNX0FSRyB9LAotICAgIHsgIi9maWxlbmFtZXMiLCAgICAgICAgICAgIFNORF9OQU0sIENN X0FSRyB9LAotI2lmZGVmIFBJUEVTRU5ECi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiL2ZpbHRlciIs ICAgICAgICAgICAgICAgU05EX0ZMVCwgQ01fQVJHfENNX1BTSCB9LAotI2VuZGlmIC8qIE5PU1BM ICovCi0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSNpZmRlZiBWTVMKLSAgICB7ICIvaW1hZ2UiLCAg ICAgICAgICAgICAgICBTTkRfSU1HLCAwIH0sCi0jZWxzZQotICAgIHsgIi9pbWFnZSIsICAgICAg ICAgICAgICAgIFNORF9CSU4sIENNX0lOViB9LAotI2VuZGlmIC8qIFZNUyAqLwotICAgIHsgIi9s YXJnZXItdGhhbiIsICAgICAgICAgIFNORF9MQVIsIENNX0FSRyB9LAotICAgIHsgIi9saXN0Zmls ZSIsICAgICAgICAgICAgIFNORF9GSUwsIENNX0FSRyB9LAotI2lmbmRlZiBOT0NTRVRTCi0gICAg eyAiL2xvY2FsLWNoYXJhY3Rlci1zZXQiLCAgU05EX0NTTCwgQ01fQVJHIH0sCi0jZW5kaWYgLyog Tk9DU0VUUyAqLwotICAgIHsgIi9tYXRjaCIsICAgICAgICAgICAgICAgIFNORF9QQVQsIENNX0FS RyB9LAotICAgIHsgIi9tbCIsICAgICAgICAgICAgICAgICAgIFNORF9NTFMsIENNX0lOVnxDTV9B QlIgfSwKLSAgICB7ICIvbWxzIiwgICAgICAgICAgICAgICAgICBTTkRfTUxTLCBDTV9JTlZ8Q01f QUJSIH0sCi0gICAgeyAiL21sc2QiLCAgICAgICAgICAgICAgICAgU05EX01MUywgMCB9LAotICAg IHsgIi9tbHN0IiwgICAgICAgICAgICAgICAgIFNORF9NTFMsIENNX0lOViB9LAotI2lmZGVmIENL X1RNUERJUgotICAgIHsgIi9tb3ZlLXRvIiwgICAgICAgICAgICAgIFNORF9NT1YsIENNX0FSRyB9 LAotI2VuZGlmIC8qIENLX1RNUERJUiAqLwotICAgIHsgIi9uYW1lbGlzdCIsICAgICAgICAgICAg IFNORF9OTUwsIENNX0FSRyB9LAotICAgIHsgIi9ubHN0IiwgICAgICAgICAgICAgICAgIFNORF9O TFMsIDAgfSwKLSAgICB7ICIvbm9iYWNrdXBmaWxlcyIsICAgICAgICBTTkRfTk9CLCAwIH0sCi0g ICAgeyAiL25vZG90ZmlsZXMiLCAgICAgICAgICAgU05EX05PRCwgMCB9LAotI2lmZGVmIERPVVBE QVRFCi0gICAgeyAiL2RhdGVzLWRpZmZlciIsICAgICAgICAgU05EX0RJRiwgQ01fSU5WIH0sCi0j ZW5kaWYgLyogRE9VUERBVEUgKi8KLSAgICB7ICIvbm90LWFmdGVyIiwgICAgICAgICAgICBTTkRf TkFGLCBDTV9JTlYgfSwKLSAgICB7ICIvbm90LWJlZm9yZSIsICAgICAgICAgICBTTkRfTkJFLCBD TV9JTlYgfSwKLSAgICB7ICIvcGVybWlzc2lvbnMiLCAgICAgICAgICBTTkRfUFJNLCBDTV9JTlYg fSwKLSAgICB7ICIvcXVpZXQiLCAgICAgICAgICAgICAgICBTTkRfU0hILCAwIH0sCi0jaWZkZWYg RlRQX1JFU1RBUlQKLSAgICB7ICIvcmVjb3ZlciIsICAgICAgICAgICAgICBTTkRfUkVTLCAwIH0s Ci0jZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8KLSNpZmRlZiBSRUNVUlNJVkUKLSAgICB7ICIvcmVj dXJzaXZlIiwgICAgICAgICAgICBTTkRfUkVDLCAwIH0sCi0jZW5kaWYgLyogUkVDVVJTSVZFICov Ci0gICAgeyAiL3JlbmFtZS10byIsICAgICAgICAgICAgU05EX1JFTiwgQ01fQVJHIH0sCi0jaWZk ZWYgRlRQX1JFU1RBUlQKLSAgICB7ICIvcmVzdGFydCIsICAgICAgICAgICAgICBTTkRfUkVTLCBD TV9JTlYgfSwKLSNlbmRpZiAvKiBGVFBfUkVTVEFSVCAqLwotI2lmbmRlZiBOT0NTRVRTCi0gICAg eyAiL3NlcnZlci1jaGFyYWN0ZXItc2V0IiwgU05EX0NTUiwgQ01fQVJHIH0sCi0jZW5kaWYgLyog Tk9DU0VUUyAqLwotICAgIHsgIi9zZXJ2ZXItcmVuYW1lLXRvIiwgICAgIFNORF9TUk4sIENNX0FS RyB9LAotICAgIHsgIi9zbWFsbGVyLXRoYW4iLCAgICAgICAgIFNORF9TTUEsIENNX0FSRyB9LAot I2lmZGVmIFJFQ1VSU0lWRQotICAgIHsgIi9zdWJkaXJlY3RvcmllcyIsICAgICAgIFNORF9SRUMs IENNX0lOViB9LAotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgIHsgIi90ZXh0IiwgICAgICAg ICAgICAgICAgIFNORF9UWFQsIDAgfSwKLSAgICB7ICIvdGVuZXgiLCAgICAgICAgICAgICAgICBT TkRfVEVOLCAwIH0sCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICB7ICIvdHJhbnNwYXJlbnQiLCAgICAg ICAgICBTTkRfWFBBLCAwIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIHsgIi90by1zY3Jl ZW4iLCAgICAgICAgICAgIFNORF9NQUksIDAgfSwKLSNpZmRlZiBET1VQREFURQotICAgIHsgIi91 cGRhdGUiLCAgICAgICAgICAgICAgIFNORF9VUEQsIENNX0lOViB9LAotI2VuZGlmIC8qIERPVVBE QVRFICovCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuZ2V0c3dpID0gKHNpemVv ZihnZXRzd2kpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0YXRpYyBzdHJ1Y3Qg a2V5dGFiIGRlbHN3aVtdID0geyAgICAgICAvKiBGVFAgW01dREVMRVRFIHN3aXRjaCB0YWJsZSAq LwotICAgIHsgIi9lcnJvci1hY3Rpb24iLCAgICAgICAgIFNORF9FUlIsIENNX0FSRyB9LAotICAg IHsgIi9leGNlcHQiLCAgICAgICAgICAgICAgIFNORF9FWEMsIENNX0FSRyB9LAotICAgIHsgIi9m aWxlbmFtZXMiLCAgICAgICAgICAgIFNORF9OQU0sIENNX0FSRyB9LAotICAgIHsgIi9sYXJnZXIt dGhhbiIsICAgICAgICAgIFNORF9MQVIsIENNX0FSRyB9LAotICAgIHsgIi9ub2JhY2t1cGZpbGVz IiwgICAgICAgIFNORF9OT0IsIDAgfSwKLSNpZmRlZiBVTklYT1JPU0sKLSAgICB7ICIvbm9kb3Rm aWxlcyIsICAgICAgICAgICBTTkRfTk9ELCAwIH0sCi0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0g ICAgeyAiL3F1aWV0IiwgICAgICAgICAgICAgICAgU05EX1NISCwgMCB9LAotI2lmZGVmIFJFQ1VS U0lWRQotICAgIHsgIi9yZWN1cnNpdmUiLCAgICAgICAgICAgIFNORF9SRUMsIDAgfSwKLSNlbmRp ZiAvKiBSRUNVUlNJVkUgKi8KLSAgICB7ICIvc21hbGxlci10aGFuIiwgICAgICAgICBTTkRfU01B LCBDTV9BUkcgfSwKLSNpZmRlZiBSRUNVUlNJVkUKLSAgICB7ICIvc3ViZGlyZWN0b3JpZXMiLCAg ICAgICBTTkRfUkVDLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSAgICB7ICIi LCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5kZWxzd2kgPSAoc2l6ZW9mKGRlbHN3aSkgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZm50YWJbXSA9 IHsgICAgICAgIC8qIEZpbGVuYW1lIGNvbnZlcnNpb24ga2V5d29yZCB0YWJsZSAqLwotICAgIHsg ImF1dG9tYXRpYyIsICAgIDIsIENOVl9BVVRPIH0sCi0gICAgeyAiY29udmVydGVkIiwgICAgMSwg Q05WX0NOViAgfSwKLSAgICB7ICJsaXRlcmFsIiwgICAgICAwLCBDTlZfTElUICB9Ci19Owotc3Rh dGljIGludCBuZm50YWIgPSAoc2l6ZW9mKGZudGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7 Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZ0cHR5cFtdID0geyAgICAgICAvKiBTRVQgRlRQIFRZ UEUgdGFibGUgKi8KLSAgICB7ICJhc2NpaSIsICAgICAgICBGVFRfQVNDLCAwIH0sCi0gICAgeyAi YmluYXJ5IiwgICAgICAgRlRUX0JJTiwgMCB9LAotICAgIHsgInRlbmV4IiwgICAgICAgIEZUVF9U RU4sIDAgfSwKLSAgICB7ICJ0ZXh0IiwgICAgICAgICBGVFRfQVNDLCBDTV9JTlYgfSwKLSAgICB7 ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5mdHB0eXAgPSAoc2l6ZW9mKGZ0cHR5cCkgLyBz aXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotI2lmZGVmIEZUUF9TRUNVUklUWQotc3RhdGlj IHN0cnVjdCBrZXl0YWIgZnRwcHJvW10gPSB7ICAgICAgIC8qIFNFVCBGVFAgUFJPVEVDVElPTi1M RVZFTCB0YWJsZSAqLwotICAgIHsgImNsZWFyIiwgICAgICAgIEZQTF9DTFIsIDAgfSwKLSAgICB7 ICJjb25maWRlbnRpYWwiLCBGUExfQ09OLCAwIH0sCi0gICAgeyAicHJpdmF0ZSIsICAgICAgRlBM X1BSViwgMCB9LAotICAgIHsgInNhZmUiLCAgICAgICAgIEZQTF9TQUYsIDAgfSwKLSAgICB7ICIi LCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5mdHBwcm8gPSAoc2l6ZW9mKGZ0cHBybykgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLSNlbmRpZiAvKiBGVFBfU0VDVVJJVFkgKi8KLQotLyog RGVmaW5pdGlvbnMgZm9yIEZUUCBmcm9tIFJGQzc2NS4gKi8KLQotLyogUmVwbHkgY29kZXMgKi8K LQotI2RlZmluZSBSRVBMWV9QUkVMSU0gICAgMSAgICAgICAgICAgICAgIC8qIFBvc2l0aXZlIHBy ZWxpbWluYXJ5ICovCi0jZGVmaW5lIFJFUExZX0NPTVBMRVRFICAyICAgICAgICAgICAgICAgLyog UG9zaXRpdmUgY29tcGxldGlvbiAqLwotI2RlZmluZSBSRVBMWV9DT05USU5VRSAgMyAgICAgICAg ICAgICAgIC8qIFBvc2l0aXZlIGludGVybWVkaWF0ZSAqLwotI2RlZmluZSBSRVBMWV9UUkFOU0lF TlQgNCAgICAgICAgICAgICAgIC8qIFRyYW5zaWVudCBuZWdhdGl2ZSBjb21wbGV0aW9uICovCi0j ZGVmaW5lIFJFUExZX0VSUk9SICAgICA1ICAgICAgICAgICAgICAgLyogUGVybWFuZW50IG5lZ2F0 aXZlIGNvbXBsZXRpb24gKi8KLSNkZWZpbmUgUkVQTFlfU0VDVVJFICAgIDYgICAgICAgICAgICAg ICAvKiBTZWN1cml0eSBlbmNvZGVkIG1lc3NhZ2UgKi8KLQotLyogRm9ybSBjb2RlcyBhbmQgbmFt ZXMgKi8KLQotI2RlZmluZSBGT1JNX04gMSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbi1w cmludCAqLwotI2RlZmluZSBGT1JNX1QgMiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbG5l dCBmb3JtYXQgZWZmZWN0b3JzICovCi0jZGVmaW5lIEZPUk1fQyAzICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ2FycmlhZ2UgY29udHJvbCAoQVNBKSAqLwotCi0vKiBTdHJ1Y3R1cmUgY29kZXMg YW5kIG5hbWVzICovCi0KLSNkZWZpbmUgU1RSVV9GIDEgICAgICAgICAgICAgICAgICAgICAgICAv KiBGaWxlIChubyByZWNvcmQgc3RydWN0dXJlKSAqLwotI2RlZmluZSBTVFJVX1IgMiAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJlY29yZCBzdHJ1Y3R1cmUgKi8KLSNkZWZpbmUgU1RSVV9QIDMg ICAgICAgICAgICAgICAgICAgICAgICAvKiBQYWdlIHN0cnVjdHVyZSAqLwotCi0vKiBNb2RlIHR5 cGVzIGFuZCBuYW1lcyAqLwotCi0jZGVmaW5lIE1PREVfUyAxICAgICAgICAgICAgICAgICAgICAg ICAgLyogU3RyZWFtICovCi0jZGVmaW5lIE1PREVfQiAyICAgICAgICAgICAgICAgICAgICAgICAg LyogQmxvY2sgKi8KLSNkZWZpbmUgTU9ERV9DIDMgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b21wcmVzc2VkICovCi0KLS8qIFByb3RlY3Rpb24gbGV2ZWxzIGFuZCBuYW1lcyAqLwotCi0jZGVm aW5lIFBST1RfQyAxICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgKi8KLSNkZWZpbmUg UFJPVF9TIDIgICAgICAgICAgICAgICAgICAgICAgICAvKiBTYWZlICovCi0jZGVmaW5lIFBST1Rf UCAzICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJpdmF0ZSAqLwotI2RlZmluZSBQUk9UX0Ug NCAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbmZpZGVudGlhbCAqLwotCi0jaWZkZWYgQ09N TUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IHVzZWQgKi8KLSNpZmRlZiBGVFBf TkFNRVMKLWNoYXIgKnN0cnVuYW1lc1tdICA9ICB7IjAiLCAiRmlsZSIsICAgICAiUmVjb3JkIiwg IlBhZ2UiIH07Ci1jaGFyICpmb3JtbmFtZXNbXSAgPSAgeyIwIiwgIk5vbnByaW50IiwgIlRlbG5l dCIsICJDYXJyaWFnZS1jb250cm9sIiB9OwotY2hhciAqbW9kZW5hbWVzW10gID0gIHsiMCIsICJT dHJlYW0iLCAgICJCbG9jayIsICAiQ29tcHJlc3NlZCIgfTsKLWNoYXIgKmxldmVsbmFtZXNbXSA9 ICB7IjAiLCAiQ2xlYXIiLCAgICAiU2FmZSIsICAgIlByaXZhdGUiLCAgIkNvbmZpZGVudGlhbCIg fTsKLSNlbmRpZiAvKiBGVFBfTkFNRVMgKi8KLQotLyogUmVjb3JkIFRva2VucyAqLwotCi0jZGVm aW5lIFJFQ19FU0MgJ1wzNzcnICAgICAgICAgICAgICAgICAgLyogUmVjb3JkLW1vZGUgRXNjYXBl ICovCi0jZGVmaW5lIFJFQ19FT1IgJ1wwMDEnICAgICAgICAgICAgICAgICAgLyogUmVjb3JkLW1v ZGUgRW5kLW9mLVJlY29yZCAqLwotI2RlZmluZSBSRUNfRU9GICdcMDAyJyAgICAgICAgICAgICAg ICAgIC8qIFJlY29yZC1tb2RlIEVuZC1vZi1GaWxlICovCi0KLS8qIEJsb2NrIEhlYWRlciAqLwot Ci0jZGVmaW5lIEJMS19FT1IgICAgICAgICAgIDB4ODAgICAgICAgICAgLyogQmxvY2sgaXMgRW5k LW9mLVJlY29yZCAqLwotI2RlZmluZSBCTEtfRU9GICAgICAgICAgICAweDQwICAgICAgICAgIC8q IEJsb2NrIGlzIEVuZC1vZi1GaWxlICovCi0jZGVmaW5lIEJMS19SRVBMWV9FUlJPUlMgIDB4MjAg ICAgICAgICAgLyogQmxvY2sgbWlnaHQgaGF2ZSBlcnJvcnMgKi8KLSNkZWZpbmUgQkxLX1JFU1RB UlQgICAgICAgMHgxMCAgICAgICAgICAvKiBCbG9jayBpcyBSZXN0YXJ0IE1hcmtlciAqLwotI2Rl ZmluZSBCTEtfQllURUNPVU5UIDIgICAgICAgICAgICAgICAgIC8qIEJ5dGVzIGluIHRoaXMgYmxv Y2sgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNkZWZpbmUgUkFESVhfRU5DT0RFIDAgICAg ICAgICAgICAgICAgICAvKiByYWRpeF9lbmNvZGUoKSBmdW5jdGlvbiBjb2RlcyAqLwotI2RlZmlu ZSBSQURJWF9ERUNPREUgMQotCi0vKgotICBUaGUgZGVmYXVsdCBzZXRwYnN6KCkgdmFsdWUgaW4g dGhlIFVuaXggRlRQIGNsaWVudCBpcyAxPDwyMCAoMU1CKS4gIFRoaXMKLSAgcmVzdWx0cyBpbiBh IHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gZHVlIHRvIHRoZSBpbmNyZWFzZWQgbnVt YmVyCi0gIG9mIHBhZ2UgZmF1bHRzIGFuZCB0aGUgaW5hYmlsaXR5IHRvIG92ZXJsYXAgZW5jcnlw dC9kZWNyeXB0LCBmaWxlIGkvbywgYW5kCi0gIG5ldHdvcmsgaS9vLiAgU28gaW5zdGVhZCB3ZSBz ZXQgdGhlIHZhbHVlIHRvIDE8PDEzICg4SyksIGFib3V0IGhhbGYgdGhlIHNpemUKLSAgb2YgdGhl IHR5cGljYWwgVENQIHdpbmRvdy4gIE1heWJlIHdlIHNob3VsZCBhZGQgYSBjb21tYW5kIHRvIGFs bG93IHRoZSB2YWx1ZQotICB0byBiZSBjaGFuZ2VkLgotKi8KLSNkZWZpbmUgREVGQVVMVF9QQlNa IDE8PDEzCi0KLS8qIFByb3RvdHlwZXMgKi8KLQotX1BST1RPVFlQKGludCByZW10eHQsIChjaGFy ICoqKSApOwotX1BST1RPVFlQKGNoYXIgKiBnc2tyZWFzb24sIChpbnQpICk7Ci1fUFJPVE9UWVAo c3RhdGljIGludCBmdHBjbG9zZSwodm9pZCkpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgenpzZW5k LCAoaW50LCBDSEFSKSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCBnZXRyZXBseSwoaW50LGludCxp bnQsaW50LGludCkpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgcmFkaXhfZW5jb2RlLChDSEFSW10s IENIQVJbXSwgaW50LCBpbnQgKiwgaW50KSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCBzZXRwYnN6 LCh1bnNpZ25lZCBpbnQpKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IHJlY3ZyZXF1ZXN0LChjaGFy ICosY2hhciAqLGNoYXIgKixjaGFyICosCi0gIGludCxpbnQsY2hhciAqLGludCxpbnQsaW50KSk7 Ci1fUFJPVE9UWVAoc3RhdGljIGludCBmdHBjbWQsKGNoYXIgKixjaGFyICosaW50LGludCxpbnQp KTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IGZ0c19jcGwsKGludCkpOwotX1BST1RPVFlQKHN0YXRp YyBpbnQgZnRzX2RwbCwoaW50KSk7Ci0jaWZkZWYgRlRQX1NFQ1VSSVRZCi1fUFJPVE9UWVAoc3Rh dGljIGludCBmdHBfYXV0aCwgKHZvaWQpKTsKLSNlbmRpZiAvKiBGVFBfU0VDVVJJVFkgKi8KLV9Q Uk9UT1RZUChzdGF0aWMgaW50IGZ0cF91c2VyLCAoY2hhciAqLCBjaGFyICosIGNoYXIgKikpOwot X1BST1RPVFlQKHN0YXRpYyBpbnQgZnRwX2xvZ2luLCAoY2hhciAqKSk7Ci1fUFJPVE9UWVAoc3Rh dGljIGludCBmdHBfcmVzZXQsICh2b2lkKSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCBmdHBfcmVu YW1lLCAoY2hhciAqLCBjaGFyICopKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IGZ0cF91bWFzaywg KGNoYXIgKikpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgc2VjdXJlX2ZsdXNoLCAoaW50KSk7Ci0j aWZkZWYgQ09NTUVOVAotX1BST1RPVFlQKHN0YXRpYyBpbnQgc2VjdXJlX3B1dGMsIChjaGFyLCBp bnQpKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi1fUFJPVE9UWVAoc3RhdGljIGludCBzZWN1cmVf d3JpdGUsIChpbnQsIENIQVIgKiwgdW5zaWduZWQgaW50KSk7Ci1fUFJPVE9UWVAoc3RhdGljIGlu dCBzY29tbWFuZCwgKGNoYXIgKikpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgc2VjdXJlX3B1dGJ1 ZiwgKGludCwgQ0hBUiAqLCB1bnNpZ25lZCBpbnQpKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IHNl Y3VyZV9nZXRjLCAoaW50LCBpbnQpKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IHNlY3VyZV9nZXRi eXRlLCAoaW50LCBpbnQpKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IHNlY3VyZV9yZWFkLCAoaW50 LCBjaGFyICosIGludCkpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgaW5pdGNvbm4sICh2b2lkKSk7 Ci1fUFJPVE9UWVAoc3RhdGljIGludCBkYXRhY29ubiwgKGNoYXIgKikpOwotX1BST1RPVFlQKHN0 YXRpYyBpbnQgc2V0cHJvdGJ1ZiwodW5zaWduZWQgaW50KSk7Ci1fUFJPVE9UWVAoc3RhdGljIGlu dCBzZW5kcmVxdWVzdCwgKGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGludCxpbnQsaW50LGludCkp OwotCi1fUFJPVE9UWVAoc3RhdGljIGNoYXIgKiByYWRpeF9lcnJvciwoaW50KSk7Ci1fUFJPVE9U WVAoc3RhdGljIGNoYXIgKiBmdHBfaG9va3VwLChjaGFyICosIGludCwgaW50KSk7Ci1fUFJPVE9U WVAoc3RhdGljIENIQVIgKiByZW1vdGVfZmlsZXMsIChpbnQsIENIQVIgKiwgQ0hBUiAqLCBpbnQp KTsKLQotX1BST1RPVFlQKHN0YXRpYyBWT0lEIG1sc3Jlc2V0LCAodm9pZCkpOwotX1BST1RPVFlQ KHN0YXRpYyBWT0lEIHNlY3VyZV9lcnJvciwgKGNoYXIgKmZtdCwgLi4uKSk7Ci1fUFJPVE9UWVAo c3RhdGljIFZPSUQgbG9zdHBlZXIsICh2b2lkKSk7Ci1fUFJPVE9UWVAoc3RhdGljIFZPSUQgY2Fu Y2VsX3JlbW90ZSwgKGludCkpOwotX1BST1RPVFlQKHN0YXRpYyBWT0lEIGNoYW5nZXR5cGUsIChp bnQsIGludCkpOwotCi1fUFJPVE9UWVAoc3RhdGljIHNpZ3R5cGUgY21kY2FuY2VsLCAoaW50KSk7 Ci0KLSNpZmRlZiBGVFBfU1JQCi1fUFJPVE9UWVAoc3RhdGljIGludCBzcnBfcmVzZXQsICgpKTsK LV9QUk9UT1RZUChzdGF0aWMgaW50IHNycF9mdHBfYXV0aCwgKGNoYXIgKixjaGFyICosY2hhciAq KSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCBzcnBfcHV0LCAoQ0hBUiAqLCBDSEFSICoqLCBpbnQs IGludCAqKSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCBzcnBfZ2V0LCAoQ0hBUiAqKiwgQ0hBUiAq KiwgaW50ICosIGludCAqKSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCBzcnBfZW5jb2RlLCAoaW50 LCBDSEFSICosIENIQVIgKiwgdW5zaWduZWQgaW50KSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCBz cnBfZGVjb2RlLCAoaW50LCBDSEFSICosIENIQVIgKiwgdW5zaWduZWQgaW50KSk7Ci1fUFJPVE9U WVAoc3RhdGljIGludCBzcnBfc2VsY2lwaGVyLCAoY2hhciAqKSk7Ci1fUFJPVE9UWVAoc3RhdGlj IGludCBzcnBfc2VsaGFzaCwgKGNoYXIgKikpOwotI2VuZGlmIC8qIEZUUF9TUlAgKi8KLQotI2lm ZGVmIEZUUF9HU1NBUEkKLV9QUk9UT1RZUChzdGF0aWMgdm9pZCB1c2VyX2dzc19lcnJvciwoT01f dWludDMyLCBPTV91aW50MzIsY2hhciAqKSk7Ci0jZW5kaWYgLyogRlRQX0dTU0FQSSAqLwotCi0v KiAgRCBPIEYgVCBQIEEgUiBHICAtLSAgRG8gYW4gRlRQIGNvbW1hbmQtbGluZSBhcmd1bWVudC4g ICovCi0KLSNpZmRlZiBGVFBfU0VDVVJJVFkKLSNpZm5kZWYgTk9JQ1AKLSNkZWZpbmUgRlRfTk9H U1MgICAxCi0jZGVmaW5lIEZUX05PSzQgICAgMgotI2RlZmluZSBGVF9OT1NSUCAgIDMKLSNkZWZp bmUgRlRfTk9TU0wgICA0Ci0jZGVmaW5lIEZUX05PVExTICAgNQotI2RlZmluZSBGVF9DRVJURkkg IDYKLSNkZWZpbmUgRlRfT0tDRVJUICA3Ci0jZGVmaW5lIEZUX0RFQlVHICAgOAotI2RlZmluZSBG VF9LRVkgICAgIDkKLSNkZWZpbmUgRlRfU0VDVVJFIDEwCi0jZGVmaW5lIEZUX1ZFUklGWSAxMQot Ci1zdGF0aWMgc3RydWN0IGtleXRhYiBmdHB6dGFiW10gPSB7Ci0gICAgeyAiIWdzcyIsICAgIEZU X05PR1NTLCAgMCB9LAotICAgIHsgIiFrcmI0IiwgICBGVF9OT0s0LCAgIDAgfSwKLSAgICB7ICIh c3JwIiwgICAgRlRfTk9TUlAsICAwIH0sCi0gICAgeyAiIXNzbCIsICAgIEZUX05PU1NMLCAgMCB9 LAotICAgIHsgIiF0bHMiLCAgICBGVF9OT1RMUywgIDAgfSwKLSAgICB7ICJjZXJ0IiwgICAgRlRf Q0VSVEZJLCBDTV9BUkcgfSwKLSAgICB7ICJjZXJ0c29rIiwgRlRfT0tDRVJULCAwIH0sCi0gICAg eyAiZGVidWciLCAgIEZUX0RFQlVHLCAgMCB9LAotICAgIHsgImtleSIsICAgICBGVF9LRVksICAg IENNX0FSRyB9LAotICAgIHsgIm5vZ3NzIiwgICBGVF9OT0dTUywgIDAgfSwKLSAgICB7ICJub2ty YjQiLCAgRlRfTk9LNCwgICAwIH0sCi0gICAgeyAibm9zcnAiLCAgIEZUX05PU1JQLCAgMCB9LAot ICAgIHsgIm5vc3NsIiwgICBGVF9OT1NTTCwgIDAgfSwKLSAgICB7ICJub3RscyIsICAgRlRfTk9U TFMsICAwIH0sCi0jaWZkZWYgQ09NTUVOVAotICAgIHsgInNlY3VyZSIsICBGVF9TRUNVUkUsIDAg fSwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgeyAidmVyaWZ5IiwgIEZUX1ZFUklGWSwgQ01f QVJHIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuZnRwenRhYiA9IHNpemVv ZihmdHB6dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7Ci0KLS8qCi0gIFRoZSBmb2xs b3dpbmcgY2lwaGVyIGFuZCBoYXNoIHRhYmxlcyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aAotICBk eW5hbWljbHkgY3JlYXRlZCB2ZXJzaW9ucyBiYXNlZCB1cG9uIHRoZSBsaW5rZWQgbGlicmFyeS4K LSovCi0jZGVmaW5lIFNSUF9CTE9XRklTSF9FQ0IgICAgMQotI2RlZmluZSBTUlBfQkxPV0ZJU0hf Q0JDICAgIDIKLSNkZWZpbmUgU1JQX0JMT1dGSVNIX0NGQjY0ICAzCi0jZGVmaW5lIFNSUF9CTE9X RklTSF9PRkI2NCAgNAotI2RlZmluZSBTUlBfQ0FTVDVfRUNCICAgICAgIDUKLSNkZWZpbmUgU1JQ X0NBU1Q1X0NCQyAgICAgICA2Ci0jZGVmaW5lIFNSUF9DQVNUNV9DRkI2NCAgICAgNwotI2RlZmlu ZSBTUlBfQ0FTVDVfT0ZCNjQgICAgIDgKLSNkZWZpbmUgU1JQX0RFU19FQ0IgICAgICAgICA5Ci0j ZGVmaW5lIFNSUF9ERVNfQ0JDICAgICAgICAxMAotI2RlZmluZSBTUlBfREVTX0NGQjY0ICAgICAg MTEKLSNkZWZpbmUgU1JQX0RFU19PRkI2NCAgICAgIDEyCi0jZGVmaW5lIFNSUF9ERVMzX0VDQiAg ICAgICAxMwotI2RlZmluZSBTUlBfREVTM19DQkMgICAgICAgMTQKLSNkZWZpbmUgU1JQX0RFUzNf Q0ZCNjQgICAgIDE1Ci0jZGVmaW5lIFNSUF9ERVMzX09GQjY0ICAgICAxNgotCi1zdGF0aWMgc3Ry dWN0IGtleXRhYiBjaXBoZXJ0YWJbXSA9IHsKLSAgICB7ICJibG93ZmlzaF9lY2IiLCAgIFNSUF9C TE9XRklTSF9FQ0IsICAgMCB9LAotICAgIHsgImJsb3dmaXNoX2NiYyIsICAgU1JQX0JMT1dGSVNI X0NCQywgICAwIH0sCi0gICAgeyAiYmxvd2Zpc2hfY2ZiNjQiLCBTUlBfQkxPV0ZJU0hfQ0ZCNjQs IDAgfSwKLSAgICB7ICJibG93ZmlzaF9vZmI2NCIsIFNSUF9CTE9XRklTSF9PRkI2NCwgMCB9LAot ICAgIHsgImNhc3Q1X2VjYiIsICAgICAgU1JQX0NBU1Q1X0VDQiwgICAgICAwIH0sCi0gICAgeyAi Y2FzdDVfY2JjIiwgICAgICBTUlBfQ0FTVDVfQ0JDLCAgICAgIDAgfSwKLSAgICB7ICJjYXN0NV9j ZmI2NCIsICAgIFNSUF9DQVNUNV9DRkI2NCwgICAgMCB9LAotICAgIHsgImNhc3Q1X29mYjY0Iiwg ICAgU1JQX0NBU1Q1X09GQjY0LCAgICAwIH0sCi0gICAgeyAiZGVzX2VjYiIsICAgICAgICBTUlBf REVTX0VDQiwgICAgICAgIDAgfSwKLSAgICB7ICJkZXNfY2JjIiwgICAgICAgIFNSUF9ERVNfQ0JD LCAgICAgICAgMCB9LAotICAgIHsgImRlc19jZmI2NCIsICAgICAgU1JQX0RFU19DRkI2NCwgICAg ICAwIH0sCi0gICAgeyAiZGVzX29mYjY0IiwgICAgICBTUlBfREVTX09GQjY0LCAgICAgIDAgfSwK LSAgICB7ICJkZXMzX2VjYiIsICAgICAgIFNSUF9ERVMzX0VDQiwgICAgICAgMCB9LAotICAgIHsg ImRlczNfY2JjIiwgICAgICAgU1JQX0RFUzNfQ0JDLCAgICAgICAwIH0sCi0gICAgeyAiZGVzM19j ZmI2NCIsICAgICBTUlBfREVTM19DRkI2NCwgICAgIDAgfSwKLSAgICB7ICJkZXMzX29mYjY0Iiwg ICAgIFNSUF9ERVMzX09GQjY0LCAgICAgMCB9LAotICAgIHsgIm5vbmUiLCAgICAgICAgICAgMCwg MCB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmNpcGhlcnRhYiA9IHNpemVv ZihjaXBoZXJ0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKLQotI2RlZmluZSBTUlBf TUQ1ICAxCi0jZGVmaW5lIFNSUF9TSEEgIDIKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGhhc2h0YWJb XSA9IHsKLSAgICB7ICJtZDUiLCAgICAgICAgICAgICAgU1JQX01ENSwgICAgICAgIDAgfSwKLSAg ICB7ICJub25lIiwgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIDAgfSwKLSAgICB7ICJzaGEi LCAgICAgICAgICAgICAgU1JQX1NIQSwgICAgICAgIDAgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07 Ci1zdGF0aWMgaW50IG5oYXNodGFiID0gc2l6ZW9mKGhhc2h0YWIpIC8gc2l6ZW9mKHN0cnVjdCBr ZXl0YWIpIC0gMTsKLSNlbmRpZiAvKiBOT0lDUCAqLwotI2VuZGlmIC8qIEZUUF9TRUNVUklUWSAq LwotCi1zdGF0aWMgY2hhciAqCi1zdHJ2YWwoczEsczIpIGNoYXIgKiBzMSwgKiBzMjsgewotICAg IGlmICghczEpIHMxID0gIiI7Ci0gICAgaWYgKCFzMikgczIgPSAiIjsKLSAgICByZXR1cm4oKnMx ID8gczEgOiAoKnMyID8gczIgOiAiKG5vbmUpIikpOwotfQotCi0jaWZuZGVmIE5PQ1NFVFMKLXN0 YXRpYyBjaGFyICogcmZucHRyID0gTlVMTDsKLXN0YXRpYyBpbnQgcmZubGVuID0gMDsKLXN0YXRp YyBjaGFyIHJmbmJ1ZltSRk5CVUZTSVpdOyAgICAgICAgICAvKiBSZW1vdGUgZmlsZW5hbWUgdHJh bnNsYXRlIGJ1ZmZlciAqLwotc3RhdGljIGNoYXIgKiB4Z25icCA9IE5VTEw7Ci0KLXN0YXRpYyBp bnQKLXN0cmdldGMoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIZWxwZXIgZnVu Y3Rpb24gZm9yIHhnbmJ5dGUoKSAqLwotICAgIGludCBjOwotICAgIGlmICgheGduYnApCi0gICAg ICByZXR1cm4oLTEpOwotICAgIGlmICghKnhnbmJwKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBj ID0gKHVuc2lnbmVkKSAqeGduYnArKzsKLSAgICByZXR1cm4oKCh1bnNpZ25lZCkgYykgJiAweGZm KTsKLX0KLQotc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhlbHBl ciBmdW5jdGlvbiBmb3IgeHBuYnl0ZSgpICovCi0jaWZkZWYgQ0tfQU5TSUMKLXN0cnB1dGMoY2hh ciBjKQotI2Vsc2UKLXN0cnB1dGMoYykgY2hhciBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17 Ci0gICAgcmZubGVuID0gcmZucHRyIC0gcmZuYnVmOwotICAgIGlmIChyZm5sZW4gPj0gKFJGTkJV RlNJWiAtIDEpKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICAqcmZucHRyKysgPSBjOwotICAgICpy Zm5wdHIgPSBOVUw7Ci0gICAgcmV0dXJuKDApOwotfQotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tf QU5TSUMKLXhwcmludGMoY2hhciBjKQotI2Vsc2UKLXhwcmludGMoYykgY2hhciBjOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17Ci0gICAgcHJpbnRmKCIlYyIsYyk7Ci0gICAgcmV0dXJuKDApOwot fQotCi1zdGF0aWMgVk9JRAotYnl0c3dhcChjMCxjMSkgaW50ICogYzAsICogYzE7IHsKLSAgICBp bnQgdDsKLSAgICB0ID0gKmMwOwotICAgICpjMCA9ICpjMTsKLSAgICAqYzEgPSB0OwotfQotI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lmZGVmIENLTE9HRElBTAotY2hhciBmdHBsb2didWZbQ1hM T0dCVUZMXSA9IHsgTlVMLCBOVUwgfTsgLyogQ29ubmVjdGlvbiBMb2cgKi8KLWludCBmdHBsb2dh Y3RpdmUgPSAwOwotbG9uZyBmdHBsb2dwcmV2ID0gMEw7Ci0KLVZPSUQKLWZ0cGxvZ2VuZCgpIHsK LSAgICBleHRlcm4gaW50IGRpYWxvZzsKLSAgICBleHRlcm4gY2hhciBkaWFmaWxbXTsKLSAgICBs b25nIGQxLCBkMiwgdDEsIHQyOwotICAgIGNoYXIgYnVmWzMyXSwgKiBwOwotCi0gICAgZGVidWco RjExMSwiZnRwIGN4IGxvZyBhY3RpdmUiLGNraXRvYShkaWFsb2cpLGZ0cGxvZ2FjdGl2ZSk7Ci0g ICAgZGVidWcoRjExMCwiZnRwIGN4IGxvZyBidWYiLGZ0cGxvZ2J1ZiwwKTsKLQotICAgIGlmICgh ZnRwbG9nYWN0aXZlIHx8ICFmdHBsb2didWZbMF0pIC8qIE5vIGFjdGl2ZSByZWNvcmQgKi8KLSAg ICAgIHJldHVybjsKLQotICAgIGZ0cGxvZ2FjdGl2ZSA9IDA7ICAgICAgICAgICAgICAgICAgIC8q IFJlY29yZCBpcyBub3QgYWN0aXZlICovCi0KLSAgICBkMSA9IG1qZCgoY2hhciAqKWZ0cGxvZ2J1 Zik7ICAgICAgICAvKiBHZXQgc3RhcnQgZGF0ZSBvZiB0aGlzIHNlc3Npb24gKi8KLSAgICBja3N0 cm5jcHkoYnVmLGNrZGF0ZSgpLDMxKTsgICAgICAgICAvKiBHZXQgY3VycmVudCBkYXRlICovCi0g ICAgZDIgPSBtamQoYnVmKTsgICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCB0aGVtIHRv IG1qZHMgKi8KLSAgICBwID0gZnRwbG9nYnVmOyAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQg c3RhcnQgdGltZSAqLwotICAgIHBbMTFdID0gTlVMOwotICAgIHBbMTRdID0gTlVMOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgdG8gc2Vjb25kcyAqLwotICAgIHQxID0gYXRvbChw KzkpICogMzYwMEwgKyBhdG9sKHArMTIpICogNjBMICsgYXRvbChwKzE1KTsKLSAgICBwWzExXSA9 ICc6JzsKLSAgICBwWzE0XSA9ICc6JzsKLSAgICBwID0gYnVmOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBHZXQgZW5kIHRpbWUgKi8KLSAgICBwWzExXSA9IE5VTDsKLSAgICBwWzE0XSA9 IE5VTDsKLSAgICB0MiA9IGF0b2wocCs5KSAqIDM2MDBMICsgYXRvbChwKzEyKSAqIDYwTCArIGF0 b2wocCsxNSk7Ci0gICAgdDIgPSAoKGQyIC0gZDEpICogODY0MDBMKSArICh0MiAtIHQxKTsgLyog Q29tcHV0ZSBlbGFwc2VkIHRpbWUgKi8KLSAgICBpZiAodDIgPiAtMUwpIHsKLSAgICAgICAgZnRw bG9ncHJldiA9IHQyOwotICAgICAgICBwID0gaGhtbXNzKHQyKTsKLSAgICAgICAgY2tzdHJuY2F0 KGZ0cGxvZ2J1ZiwiRT0iLENYTE9HQlVGTCk7IC8qIEFwcGVuZCB0byBsb2cgcmVjb3JkICovCi0g ICAgICAgIGNrc3RybmNhdChmdHBsb2didWYscCxDWExPR0JVRkwpOwotICAgIH0gZWxzZQotICAg ICAgZnRwbG9ncHJldiA9IDBMOwotICAgIGRlYnVnKEYxMDEsImZ0cCBjeCBsb2cgZGlhbG9nIiwi IixkaWFsb2cpOwotICAgIGlmIChkaWFsb2cpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElm IGxvZ2dpbmcgKi8KLSAgICAgICAgaW50IHg7Ci0gICAgICAgIHggPSBkaWFvcG4oZGlhZmlsLDEs MSk7ICAgICAgICAgLyogT3BlbiBsb2cgaW4gYXBwZW5kIG1vZGUgKi8KLSAgICAgICAgaWYgKHgg PiAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgY3ggbG9nIG9wZW4iLCIiLHgpOwot ICAgICAgICAgICAgeCA9IHpzb3V0bChaRElGSUwsZnRwbG9nYnVmKTsgLyogV3JpdGUgdGhlIHJl Y29yZCAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGN4IGxvZyB3cml0ZSIsIiIseCk7 Ci0gICAgICAgICAgICB4ID0gemNsb3NlKFpESUZJTCk7ICAgICAgICAgLyogQ2xvc2UgdGhlIGxv ZyAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGN4IGxvZyBjbG9zZSIsIiIseCk7Ci0g ICAgICAgIH0KLSAgICB9Ci19Ci0KLVZPSUQKLWRvbG9nZnRwKCkgewotICAgIGZ0cGxvZ2VuZCgp OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXZpb3VzIHNlc3Npb24gbm90IGNsb3NlZCBv dXQ/ICovCi0gICAgZnRwbG9ncHJldiA9IDBMOwotICAgIGZ0cGxvZ2FjdGl2ZSA9IDE7ICAgICAg ICAgICAgICAgICAgIC8qIFJlY29yZCBpcyBhY3RpdmUgKi8KLQotICAgIGNrbWFreG1zZyhmdHBs b2didWYsQ1hMT0dCVUZMLAotICAgICAgICAgICAgICBja2RhdGUoKSwiICIsc3RydmFsKGZ0cF9s b2duYW1lLE5VTEwpLCIgIixja2dldHBpZCgpLAotICAgICAgICAgICAgICAiIFQ9RlRQIE49Iiwg c3RydmFsKGZ0cF9ob3N0LE5VTEwpLCIgSD0iLG15aG9zdCwKLSAgICAgICAgICAgICAgIiBQPSIs IGNraXRvYShmdHBfcG9ydCksIiAiKTsgLyogU01TIDIwMDcvMDIvMTUgKi8KLSAgICBkZWJ1ZyhG MTEwLCJmdHAgY3ggbG9nIGJlZ2luIixmdHBsb2didWYsMCk7Ci19Ci0jZW5kaWYgLyogQ0tMT0dE SUFMICovCi0KLXN0YXRpYyBjaGFyICogZHVtbXlbMl0gPSB7IE5VTEwsIE5VTEwgfTsKLQotc3Rh dGljIHN0cnVjdCBrZXl0YWIgbW9kZXRhYltdID0gewotICAgIHsgImFjdGl2ZSIsICAwLCAwIH0s Ci0gICAgeyAicGFzc2l2ZSIsIDEsIDAgfQotfTsKLQotI2lmbmRlZiBOT0NNREwKLWludCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxsZWQgZnJvbSBja3V1c3kuYyAq LwotI2lmZGVmIENLX0FOU0lDCi1kb2Z0cGFyZyhjaGFyIGMpCi0jZWxzZQotZG9mdHBhcmcoYykg Y2hhciBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBkb2Z0cGFyZyAqLyB7Ci0gICAgaW50 IHgsIHo7Ci0gICAgY2hhciAqeHA7Ci0gICAgZXh0ZXJuIGNoYXIgKip4YXJndiwgKnhhcmcwOwot ICAgIGV4dGVybiBpbnQgeGFyZ2MsIHN0YXlmbGcsIGhhdmVmdHB1aWQ7Ci0gICAgZXh0ZXJuIGNo YXIgdWlkYnVmW107Ci0KLSAgICB4cCA9ICp4YXJndisxOyAgICAgICAgICAgICAgICAgICAgICAv KiBQb2ludGVyIGZvciBidW5kbGVkIGFyZ3MgKi8KLSAgICB3aGlsZSAoYykgewotICAgICAgICBp ZiAoY2tzdHJjaHIoIk11RFBrY0h6bSIsYykpIHsgIC8qIE9wdGlvbnMgdGhhdCB0YWtlIGFyZ3Vt ZW50cyAqLwotICAgICAgICAgICAgaWYgKCooeHArMSkpIHsKLSAgICAgICAgICAgICAgICBmYXRh bCgiP0ludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIHhhcmd2KyssIHhhcmdjLS07Ci0gICAgICAgICAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoq eGFyZ3YgPT0gJy0nKSkgewotICAgICAgICAgICAgICAgIGZhdGFsKCI/UmVxdWlyZWQgYXJndW1l bnQgbWlzc2luZyIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAo YykgeyAgICAgICAgICAgICAgICAgICAgLyogQmlnIHN3aXRjaCBvbiBhcmcgKi8KLSAgICAgICAg ICBjYXNlICdoJzogICAgICAgICAgICAgICAgICAgICAvKiBoZWxwICovCi0gICAgICAgICAgIHBy aW50ZigiQy1LZXJtaXQncyBGVFAgY2xpZW50IGNvbW1hbmQtbGluZSBwZXJzb25hbGl0eS4gIFVz YWdlOlxuIik7Ci0gICAgICAgICAgICBwcmludGYoIiAgJXMgWyBvcHRpb25zIF0gaG9zdCBbIHBv cnQgXSBbLXBnIGZpbGVzIF1cblxuIix4YXJnMCk7Ci0gICAgICAgICAgICBwcmludGYoIk9wdGlv bnM6XG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICAtaCAgICAgICAgICAgPSBoZWxwICh0aGlz IG1lc3NhZ2UpXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICAtbSBtb2RlICAgICAgPSBcInBh c3NpdmVcIiAoZGVmYXVsdCkgb3IgXCJhY3RpdmVcIlxuIik7Ci0gICAgICAgICAgICBwcmludGYo IiAgLXUgbmFtZSAgICAgID0gdXNlcm5hbWUgZm9yIGF1dG9sb2dpbiAob3IgLU0pXG4iKTsKLSAg ICAgICAgICAgIHByaW50ZigiICAtUCBwYXNzd29yZCAgPSBwYXNzd29yZCBmb3IgYXV0b2xvZ2lu IChSSVNLWSlcbiIpOwotICAgICAgICAgICAgcHJpbnRmKCIgIC1BICAgICAgICAgICA9IGF1dG9s b2dpbiBhbm9ueW1vdXNseVxuIik7Ci0gICAgICAgICAgICBwcmludGYoIiAgLUQgZGlyZWN0b3J5 ID0gY2QgYWZ0ZXIgYXV0b2xvZ2luXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICAtYiAgICAg ICAgICAgPSBmb3JjZSBiaW5hcnkgbW9kZVxuIik7Ci0gICAgICAgICAgICBwcmludGYoIiAgLWEg ICAgICAgICAgID0gZm9yY2UgdGV4dCAoXCJhc2NpaVwiKSBtb2RlIChvciAtVClcbiIpOwotICAg ICAgICAgICAgcHJpbnRmKCIgIC1kICAgICAgICAgICA9IGRlYnVnIChkb3VibGUgdG8gYWRkIHRp bWVzdGFtcHMpXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICAtbiAgICAgICAgICAgPSBubyBh dXRvbG9naW5cbiIpOwotICAgICAgICAgICAgcHJpbnRmKCIgIC12ICAgICAgICAgICA9IHZlcmJv c2UgKGRlZmF1bHQpXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICAtcSAgICAgICAgICAgPSBx dWlldFxuIik7Ci0gICAgICAgICAgICBwcmludGYoIiAgLVMgICAgICAgICAgID0gU3RheSAoaXNz dWUgY29tbWFuZCBwcm9tcHQgd2hlbiBkb25lKVxuIik7Ci0gICAgICAgICAgICBwcmludGYoIiAg LVkgICAgICAgICAgID0gZG8gbm90IGV4ZWN1dGUgS2VybWl0IGluaXQgZmlsZVxuIik7Ci0gICAg ICAgICAgICBwcmludGYoIiAgLXAgZmlsZXMgICAgID0gZmlsZXMgdG8gcHV0IGFmdGVyIGF1dG9s b2dpbiAob3IgLXMpXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICAtZyBmaWxlcyAgICAgPSBm aWxlcyB0byBnZXQgYWZ0ZXIgYXV0b2xvZ2luXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICAt UiAgICAgICAgICAgPSByZWN1cnNpdmUgKGZvciB1c2Ugd2l0aCAtcClcbiIpOwotCi0jaWZkZWYg RlRQX1NFQ1VSSVRZCi0gICAgICAgICAgICBwcmludGYoIlxuU2VjdXJpdHkgb3B0aW9uczpcbiIp OwotICAgICAgICAgICAgcHJpbnRmKCIgIC1rIHJlYWxtICAgICA9IEtlcmJlcm9zIDQgcmVhbG1c biIpOwotICAgICAgICAgICAgcHJpbnRmKCIgIC1mICAgICAgICAgICA9IEtlcmJvcm9zIDUgY3Jl ZGVudGlhbHMgZm9yd2FyZGluZ1xuIik7Ci0gICAgICAgICAgICBwcmludGYoIiAgLXggICAgICAg ICAgID0gYXV0b2VuY3J5cHRpb24gbW9kZVxuIik7Ci0gICAgICAgICAgICBwcmludGYoIiAgLWMg Y2lwaGVyICAgID0gU1JQIGNpcGhlciB0eXBlXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICAt SCBoYXNoICAgICAgPSBTUlAgZW5jcnlwdGlvbiBoYXNoXG4iKTsKLSAgICAgICAgICAgIHByaW50 ZigiICAteiBvcHRpb24gICAgPSBTZWN1cml0eSBvcHRpb25zXG4iKTsKLSNlbmRpZiAvKiBGVFBf U0VDVVJJVFkgKi8KLQotICAgICAgICAgICAgcHJpbnRmKCJcbi1wIG9yIC1nLCBpZiBnaXZlbiwg c2hvdWxkIGJlIGxhc3QuICBFeGFtcGxlOlxuIik7Ci0gICAgICAgICAgICBwcmludGYoIiAgZnRw IC1BIGtlcm1pdC5jb2x1bWJpYS5lZHUgLUQga2VybWl0IC1hZyBURVNURklMRVxuIik7Ci0KLSAg ICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQsLTEpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg ICAgICAgICBjYXNlICdSJzogICAgICAgICAgICAgICAgICAgICAvKiBSZWN1cnNpdmUgKi8KLSAg ICAgICAgICAgIHJlY3Vyc2l2ZSA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg IGNhc2UgJ2QnOiAgICAgICAgICAgICAgICAgICAgIC8qIERlYnVnICovCi0jaWZkZWYgREVCVUcK LSAgICAgICAgICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgICAgICAgICBleHRlcm4gaW50IGRl YnRpbTsKLSAgICAgICAgICAgICAgICBkZWJ0aW0gPSAxOwotICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICBkZWJsb2cgPSBkZWJvcG4oImRlYnVnLmxvZyIsMCk7Ci0gICAgICAg ICAgICAgICAgZGVib2sgPSAxOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0g ICAgICAgICAgICAvKiBmYWxsIHRocnUgb24gcHVycG9zZSAqLwotCi0gICAgICAgICAgY2FzZSAn dCc6ICAgICAgICAgICAgICAgICAgICAgLyogVHJhY2UgKi8KLSAgICAgICAgICAgIGZ0cF9kZWIr KzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAnbic6ICAgICAgICAgICAg ICAgICAgICAgLyogTm8gYXV0b2xvZ2luICovCi0gICAgICAgICAgICBmdHBfbG9nID0gMDsKLSAg ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAnaSc6ICAgICAgICAgICAgICAgICAg ICAgLyogTm8gcHJvbXB0ICovCi0gICAgICAgICAgY2FzZSAndic6ICAgICAgICAgICAgICAgICAg ICAgLyogVmVyYm9zZSAqLwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg IC8qIChpZ25vcmVkKSAqLwotCi0gICAgICAgICAgY2FzZSAncSc6ICAgICAgICAgICAgICAgICAg ICAgLyogUXVpZXQgKi8KLSAgICAgICAgICAgIHF1aWV0ID0gMTsKLSAgICAgICAgICAgIGJyZWFr OwotCi0gICAgICAgICAgY2FzZSAnUyc6ICAgICAgICAgICAgICAgICAgICAgLyogU3RheSAqLwot ICAgICAgICAgICAgc3RheWZsZyA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg IGNhc2UgJ00nOgotICAgICAgICAgIGNhc2UgJ3UnOiAgICAgICAgICAgICAgICAgICAgIC8qIE15 IFVzZXIgTmFtZSAqLwotICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKCp4YXJndikgPiA2Mykg ewotICAgICAgICAgICAgICAgIGZhdGFsKCJ1c2VybmFtZSB0b28gbG9uZyIpOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgY2tzdHJuY3B5KHVpZGJ1ZiwqeGFyZ3YsVUlEQlVGTEVOKTsKLSAg ICAgICAgICAgIGhhdmVmdHB1aWQgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg ICBjYXNlICdBJzoKLSAgICAgICAgICAgIGNrc3RybmNweSh1aWRidWYsImFub255bW91cyIsVUlE QlVGTEVOKTsKLSAgICAgICAgICAgIGhhdmVmdHB1aWQgPSAxOwotICAgICAgICAgICAgYnJlYWs7 Ci0KLSAgICAgICAgICBjYXNlICdUJzogICAgICAgICAgICAgICAgICAgICAvKiBUZXh0ICovCi0g ICAgICAgICAgY2FzZSAnYSc6ICAgICAgICAgICAgICAgICAgICAgLyogImFzY2lpIiAqLwotICAg ICAgICAgIGNhc2UgJ2InOiAgICAgICAgICAgICAgICAgICAgIC8qIEJpbmFyeSAqLwotICAgICAg ICAgICAgYmluYXJ5ID0gKGMgPT0gJ2InKSA/IEZUVF9CSU4gOiBGVFRfQVNDOwotICAgICAgICAg ICAgZnRwX3hmZXJtb2RlID0gWE1PREVfTTsKLSAgICAgICAgICAgIGZpbGVwZWVrID0gMDsKLSAg ICAgICAgICAgIHBhdHRlcm5zID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg Y2FzZSAnZyc6ICAgICAgICAgICAgICAgICAgICAgLyogR2V0ICovCi0gICAgICAgICAgY2FzZSAn cCc6ICAgICAgICAgICAgICAgICAgICAgLyogUHV0ICovCi0gICAgICAgICAgY2FzZSAncyc6IHsg ICAgICAgICAgICAgICAgICAgLyogU2VuZCAoPSBQdXQpICovCi0gICAgICAgICAgICAgIGludCBo YXZlZmlsZXMsIHJjOwotICAgICAgICAgICAgICBpZiAoZnRwX2FjdGlvbikgewotICAgICAgICAg ICAgICAgICAgZmF0YWwoIk9ubHkgb25lIEZUUCBhY3Rpb24gYXQgYSB0aW1lIHBsZWFzZSIpOwot ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmICgqKHhwKzEpKSB7Ci0gICAgICAgICAg ICAgICAgICBmYXRhbCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyBhZnRlciAtcyIpOwotICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIG5maWxzID0gMDsgICAgICAgICAgICAgICAgLyog SW5pdGlhbGl6ZSBmaWxlIGNvdW50ZXIgKi8KLSAgICAgICAgICAgICAgaGF2ZWZpbGVzID0gMDsg ICAgICAgICAgICAvKiBBc3N1bWUgbm90aGluZyB0byBzZW5kICAqLwotICAgICAgICAgICAgICBj bWxpc3QgPSB4YXJndiArIDE7ICAgICAgIC8qIFJlbWVtYmVyIHRoaXMgcG9pbnRlciAqLwotCi0g ICAgICAgICAgICAgIHdoaWxlICgrK3hhcmd2LCAtLXhhcmdjID4gMCkgeyAvKiBUcmF2ZXJzZSB0 aGUgbGlzdCAqLwotICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ2cnKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgaGF2ZWZpbGVzKys7Ci0gICAgICAgICAgICAgICAgICAgICAgbmZpbHMrKzsK LSAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgIH0KLSNp ZmRlZiBSRUNVUlNJVkUKLSAgICAgICAgICAgICAgICAgIGlmICghc3RyY21wKCp4YXJndiwiLiIp KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgaGF2ZWZpbGVzID0gMTsKLSAgICAgICAgICAgICAg ICAgICAgICBuZmlscysrOwotICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IDE7Ci0g ICAgICAgICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSAgICAgICAg ICAgICAgICAgICAgaWYgKChyYyA9IHpjaGtpKCp4YXJndikpID4gLTEgfHwgKHJjID09IC0yKSkg ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgIChyYyAhPSAtMikKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgaGF2ZWZpbGVzID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5maWxz Kys7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXN3aWxkKCp4YXJndikgJiYgbnp4 cGFuZCgqeGFyZ3YsMCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXZlZmlsZXMg PSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgbmZpbHMrKzsKLSAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHhhcmdjKyssIHhhcmd2LS07ICAg ICAgICAgLyogQWRqdXN0IGFyZ3YvYXJnYyAqLwotICAgICAgICAgICAgICBpZiAoIWhhdmVmaWxl cykgewotICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ2cnKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgZmF0YWwoIk5vIGZpbGVzIHRvIHB1dCIpOwotICAgICAgICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiTm8gZmlsZXMgdG8gZ2V0Iik7Ci0gICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZnRwX2FjdGlv biA9IGM7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNl ICdEJzogICAgICAgICAgICAgICAgICAgICAvKiBEaXJlY3RvcnkgKi8KLSAgICAgICAgICAgIG1h a2VzdHIoJmZ0cF9yZGlyLCp4YXJndik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg IGNhc2UgJ20nOiAgICAgICAgICAgICAgICAgICAgIC8qIE1vZGUgKEFjdGl2ZS9QYXNzaXZlICov Ci0gICAgICAgICAgICBmdHBfcHN2ID0gbG9va3VwKG1vZGV0YWIsKnhhcmd2LDIsTlVMTCk7Ci0g ICAgICAgICAgICBpZiAoZnRwX3BzdiA8IDApIGZhdGFsKCJJbnZhbGlkIG1vZGUiKTsKLSAgICAg ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAnUCc6Ci0gICAgICAgICAgICBtYWtlc3Ry KCZmdHBfdG1wLCp4YXJndik7ICAgLyogWW91LUtub3ctV2hhdCAqLwotICAgICAgICAgICAgYnJl YWs7Ci0KLSAgICAgICAgICBjYXNlICdZJzogICAgICAgICAgICAgICAgICAgICAvKiBObyBpbml0 aWFsaXphdGlvbiBmaWxlICovCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAg ICAgLyogKGFscmVhZHkgZG9uZSBpbiBwcmVzY2FuKSAqLwotCi0jaWZkZWYgQ0tfVVJMCi0gICAg ICAgICAgY2FzZSAnVSc6IHsgICAgICAgICAgICAgICAgICAgLyogVVJMICovCi0gICAgICAgICAg ICAgIC8qIFRoZXNlIGFyZSBzZXQgYnkgdXJscGFyc2UoKSAtIGFueSBub3Qgc2V0IGFyZSBOVUxM ICovCi0gICAgICAgICAgICAgIGlmIChnX3VybC5ob3MpIHsKLS8qCi0gIEtlcm1pdCBoYXMgYWNj ZXB0ZWQgaG9zdDpwb3J0IG5vdGF0aW9uIHNpbmNlIG1hbnkgeWVhcnMgYmVmb3JlIFVSTHMgd2Vy ZQotICBpbnZlbnRlZC4gIFVuZm9ydHVuYXRlbHksIFVSTHMgY29uZmxpY3Qgd2l0aCB0aGlzIG5v dGF0aW9uLiAgVGh1cyAiZnRwCi0gIGhvc3Q6NDQ5IiBsb29rcyBsaWtlIGEgVVJMIGFuZCByZXN1 bHRzIGluIHNlcnZpY2UgPSBob3N0IGFuZCBob3N0ID0gNDQ5LgotICBIZXJlIHdlIHRyeSB0byBj YXRjaCB0aGlzIHNpdHVhdGlvbiB0cmFuc3BhcmVudGx5IHRvIHRoZSB1c2VyLgotKi8KLSAgICAg ICAgICAgICAgICAgIGlmIChja3N0cmNtcChnX3VybC5zdmMsImZ0cCIsLTEsMCkKLSNpZmRlZiBD S19TU0wKLSAgICAgICAgICAgICAgICAgICAgICAgJiYgY2tzdHJjbXAoZ191cmwuc3ZjLCJmdHBz IiwtMSwwKQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICAgICAgICAgICApIHsK LSAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdfdXJsLnVzciAmJgotICAgICAgICAgICAgICAg ICAgICAgICAgICAhZ191cmwucHN3ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICFnX3Vy bC5wb3IgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIWdfdXJsLnB0aCkgewotICAgICAg ICAgICAgICAgICAgICAgICAgICBnX3VybC5wb3IgPSBnX3VybC5ob3M7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgIGdfdXJsLmhvcyA9IGdfdXJsLnN2YzsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgZ191cmwuc3ZjID0gImZ0cCI7Ci0gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwiTm9u LUZUUCBVUkw6IHNlcnZpY2U9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z191cmwuc3ZjLCIgaG9zdD0iLGdfdXJsLmhvcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg IGZhdGFsKHRtcGJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgbWFrZXN0cigmZnRwX2hvc3QsZ191cmwuaG9zKTsKLSAg ICAgICAgICAgICAgICAgIGlmIChnX3VybC51c3IpIHsKLSAgICAgICAgICAgICAgICAgICAgICBo YXZlZnRwdWlkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodWlkYnVmLGdf dXJsLnVzcixVSURCVUZMRU4pOwotICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmZ0cF9s b2duYW1lLHVpZGJ1Zik7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBp ZiAoZ191cmwucHN3KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmZnRwX3RtcCxn X3VybC5wc3cpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgaWYgKGdf dXJsLnB0aCkgewotICAgICAgICAgICAgICAgICAgICAgIGlmICghZ191cmwudXNyKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIGhhdmVmdHB1aWQgPSAxOwotICAgICAgICAgICAgICAgICAg ICAgICAgICBja3N0cm5jcHkodWlkYnVmLCJhbm9ueW1vdXMiLFVJREJVRkxFTik7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmZ0cF9sb2duYW1lLHVpZGJ1Zik7Ci0gICAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIGlmIChmdHBfYWN0aW9uKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJPbmx5IG9uZSBGVFAgYWN0aW9uIGF0 IGEgdGltZSBwbGVhc2UiKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgICAgaWYgKCFzdGF5ZmxnKQotICAgICAgICAgICAgICAgICAgICAgICAgcXVpZXQgPSAx OwotICAgICAgICAgICAgICAgICAgICAgIG5maWxzID0gMTsKLSAgICAgICAgICAgICAgICAgICAg ICBkdW1teVswXSA9IGdfdXJsLnB0aDsKLSAgICAgICAgICAgICAgICAgICAgICBjbWxpc3QgPSBk dW1teTsKLSAgICAgICAgICAgICAgICAgICAgICBmdHBfYWN0aW9uID0gJ2cnOwotICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgeHAgPSBOVUxMOwotICAgICAgICAgICAgICAg ICAgaGF2ZXVybCA9IDE7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgfQotI2VuZGlmIC8qIENLX1VSTCAqLwotCi0jaWZkZWYgRlRQX1NFQ1VSSVRZCi0g ICAgICAgICAgY2FzZSAnayc6IHsgICAgICAgICAgICAgICAgICAgLyogSzQgUmVhbG0gKi8KLSNp ZmRlZiBGVFBfS1JCNAotICAgICAgICAgICAgICBja3N0cm5jcHkoZnRwX3JlYWxtLCp4YXJndiwg UkVBTE1fU1opOwotI2VuZGlmIC8qIEZUUF9LUkI0ICovCi0gICAgICAgICAgICAgIGlmIChmdHBf ZGViKSBwcmludGYoIks0IFJlYWxtID0gWyVzXVxuIiwqeGFyZ3YpOwotICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAnZic6IHsKLSNpZmRlZiBGVFBfR1NT QVBJCi0gICAgICAgICAgICAgIGZ0cF9jZncgPSAxOwotICAgICAgICAgICAgICBpZiAoZnRwX2Rl YikgcHJpbnRmKCJLNSBDcmVkZW50aWFscyBGb3J3YXJkaW5nXG4iKTsKLSNlbHNlIC8qIEZUUF9H U1NBUEkgKi8KLSAgICAgICAgICAgICAgcHJpbnRmKCJLNSBDcmVkZW50aWFscyBGb3J3YXJkaW5n IG5vdCBzdXBwb3J0ZWRcbiIpOwotI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KLSAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgJ3gnOiB7Ci0gICAgICAgICAg ICAgIGZ0cF9jcnkgPSAxOwotICAgICAgICAgICAgICBpZiAoZnRwX2RlYikgcHJpbnRmKCJBdXRv ZW5jcnlwdGlvblxuIik7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAg ICAgICBjYXNlICdjJzogeyAgICAgICAgICAgICAgICAgICAvKiBDaXBoZXIgKi8KLSNpZmRlZiBG VFBfU1JQCi0gICAgICAgICAgICAgIGlmICghc3JwX3NlbGNpcGhlcigqeGFyZ3YpKSB7Ci0gICAg ICAgICAgICAgICAgICBpZiAoZnRwX2RlYikgcHJpbnRmKCJTUlAgY2lwaGVyIHR5cGU6IFwiJXNc IlxuIiwqeGFyZ3YpOwotICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBwcmlu dGYoIj9JbnZhbGlkIFNSUCBjaXBoZXIgdHlwZTogXCIlc1wiXG4iLCp4YXJndik7Ci0jZWxzZSAv KiBGVFBfU1JQICovCi0gICAgICAgICAgICAgIHByaW50ZigiP1NSUCBub3Qgc3VwcG9ydGVkXG4i KTsKLSNlbmRpZiAvKiBGVFBfU1JQICovCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg IH0KLSAgICAgICAgICBjYXNlICdIJzogewotI2lmZGVmIEZUUF9TUlAKLSAgICAgICAgICAgICAg aWYgKCFzcnBfc2VsaGFzaCgqeGFyZ3YpKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoZnRwX2Rl YikgcHJpbnRmKCJTUlAgaGFzaCB0eXBlOiBcIiVzXCJcbiIsKnhhcmd2KTsKLSAgICAgICAgICAg ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/SW52YWxpZCBTUlAgaGFzaCB0eXBl OiBcIiVzXCJcbiIsKnhhcmd2KTsKLSNlbHNlIC8qIEZUUF9TUlAgKi8KLSAgICAgICAgICAgICAg cHJpbnRmKCI/U1JQIG5vdCBzdXBwb3J0ZWRcbiIpOwotI2VuZGlmIC8qIEZUUF9TUlAgKi8KLSAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgJ3onOiB7Ci0g ICAgICAgICAgICAgIC8qICp4YXJndiBjb250YWlucyBhIHZhbHVlIG9mIHRoZSBmb3JtIHRhZz12 YWx1ZSAqLwotICAgICAgICAgICAgICAvKiB3ZSBuZWVkIHRvIGxvb2t1cCB0aGUgdGFnIGFuZCBz YXZlIHRoZSB2YWx1ZSAgKi8KLSAgICAgICAgICAgICAgY2hhciAqIHAgPSBOVUxMLCAqIHEgPSBO VUxMOwotICAgICAgICAgICAgICBtYWtlc3RyKCZwLCp4YXJndik7Ci0gICAgICAgICAgICAgIHkg PSBja2luZGV4KCI9IixwLDAsMCwxKTsKLSAgICAgICAgICAgICAgaWYgKHkgPiAwKQotICAgICAg ICAgICAgICAgIHBbeS0xXSA9ICdcMCc7Ci0gICAgICAgICAgICAgIHggPSBsb29rdXAoZnRwenRh YixwLG5mdHB6dGFiLCZ6KTsKLSAgICAgICAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAgICAg ICAgICAgICBwcmludGYoIj9JbnZhbGlkIHNlY3VyaXR5IG9wdGlvbjogXCIlc1wiXG4iLHApOwot ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9kZWIpCi0J CSAgICBwcmludGYoIlNlY3VyaXR5IG9wdGlvbjogXCIlcyIscCk7Ci0gICAgICAgICAgICAgICAg ICBpZiAoZnRwenRhYlt6XS5mbGdzICYgQ01fQVJHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg aWYgKHkgPD0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCI/TWlzc2luZyByZXF1 aXJlZCB2YWx1ZSIpOwotICAgICAgICAgICAgICAgICAgICAgIHEgPSAmcFt5XTsKLSAgICAgICAg ICAgICAgICAgICAgICBpZiAoISpxKQotICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoIj9N aXNzaW5nIHJlcXVpcmVkIHZhbHVlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9k ZWIpCi0JCQlwcmludGYoIj0lc1wiIixxKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgIHN3aXRjaCAoZnRwenRhYlt6XS5rd3ZhbCkgeyAvKiAteiBvcHRpb25zIHcvYXJn cyAqLwotICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX05PR1NTOgotI2lmZGVmIEZUUF9HU1NB UEkKLSAgICAgICAgICAgICAgICAgICAgICBmb3IgKHogPSAwOyB6IDwgRlRQQVRZUFMgJiYgZnRw X2F1dGhfdHlwZVt6XTsgeisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdHBf YXV0aF90eXBlW3pdID09IEZUQV9HSzUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZvciAoeSA9IHo7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPCAoRlRQ QVRZUFMtMSkgJiYgZnRwX2F1dGhfdHlwZVt5XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeSsrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2F1dGhfdHlwZVt5XSA9IGZ0cF9hdXRoX3R5 cGVbeSsxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbRlRQ QVRZUFMtMV0gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYg LyogRlRQX0dTU0FQSSAqLwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgICAgICBjYXNlIEZUX05PSzQ6Ci0jaWZkZWYgRlRQX0tSQjQKLSAgICAgICAgICAgICAg ICAgICAgICBmb3IgKHogPSAwOyB6IDwgRlRQQVRZUFMgJiYgZnRwX2F1dGhfdHlwZVt6XTsgeisr KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdHBfYXV0aF90eXBlW3pdID09IEZU QV9LNCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh5ID0gejsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA8IChGVFBBVFlQUy0xKSAmJiBmdHBfYXV0 aF90eXBlW3ldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5KysKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmdHBfYXV0aF90eXBlW3ldID0gZnRwX2F1dGhfdHlwZVt5KzFdOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnRwX2F1dGhfdHlwZVtGVFBBVFlQUy0xXSA9IDA7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBGVFBfS1JCNCAqLwotICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX05P U1JQOgotI2lmZGVmIEZUUF9TUlAKLSAgICAgICAgICAgICAgICAgICAgICBmb3IgKHogPSAwOyB6 IDwgRlRQQVRZUFMgJiYgZnRwX2F1dGhfdHlwZVt6XTsgeisrKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChmdHBfYXV0aF90eXBlW3pdID09IEZUQV9TUlApIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IHo7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHkgPCAoRlRQQVRZUFMtMSkgJiYgZnRwX2F1dGhfdHlwZVt5XTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeSsrCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2F1dGhfdHlw ZVt5XSA9IGZ0cF9hdXRoX3R5cGVbeSsxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZ0cF9hdXRoX3R5cGVbRlRQQVRZUFMtMV0gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgICB9Ci0jZW5kaWYgLyogRlRQX1NSUCAqLwotICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX05PU1NMOgotI2lmZGVmIENLX1NTTAot ICAgICAgICAgICAgICAgICAgICAgIGZvciAoeiA9IDA7IHogPCBGVFBBVFlQUyAmJiBmdHBfYXV0 aF90eXBlW3pdOyB6KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9hdXRo X3R5cGVbel0gPT0gRlRBX1NTTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y ICh5ID0gejsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA8IChGVFBBVFlQ Uy0xKSAmJiBmdHBfYXV0aF90eXBlW3ldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB5KysKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW3ldID0gZnRwX2F1dGhfdHlwZVt5 KzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2F1dGhfdHlwZVtGVFBBVFlQ Uy0xXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBD S19TU0wgKi8KLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg ICAgY2FzZSBGVF9OT1RMUzoKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAgICAgICAgICBm b3IgKHogPSAwOyB6IDwgRlRQQVRZUFMgJiYgZnRwX2F1dGhfdHlwZVt6XTsgeisrKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChmdHBfYXV0aF90eXBlW3pdID09IEZUQV9UTFMpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IHo7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHkgPCAoRlRQQVRZUFMtMSkgJiYgZnRwX2F1dGhfdHlwZVt5 XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSsrCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnRwX2F1dGhfdHlwZVt5XSA9IGZ0cF9hdXRoX3R5cGVbeSsxXTsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbRlRQQVRZUFMtMV0gPSAwOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfQ0VSVEZJOgotI2lm ZGVmIENLX1NTTAotICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9yc2FfY2VydF9m aWxlLHEpOwotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX09LQ0VSVDoKLSNpZmRlZiBDS19TU0wKLSAg ICAgICAgICAgICAgICAgICAgICBzc2xfY2VydHNva19mbGFnID0gMTsKLSNlbmRpZiAvKiBDS19T U0wgKi8KLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg Y2FzZSBGVF9ERUJVRzoKLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgICAgICAgICAgIGlmIChk ZWJsb2cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBkZWJ0aW07Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnRpbSA9IDE7Ci0gICAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVibG9nID0gZGVib3BuKCJk ZWJ1Zy5sb2ciLDApOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAq LwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl IEZUX0tFWToKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZz c2xfcnNhX2tleV9maWxlLHEpOwotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX1NFQ1VSRToKLSAgICAg ICAgICAgICAgICAgICAgICAvKiBubyBlcXVpdmFsZW50ICovCi0gICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfVkVSSUZZOgotI2lmZGVmIENL X1NTTAotICAgICAgICAgICAgICAgICAgICAgIGlmICghcmRpZ2l0cyhxKSkKLSAgICAgICAgICAg ICAgICAgICAgICAgIHByaW50ZigiP0JhZCBudW1iZXI6ICVzXG4iLHEpOwotICAgICAgICAgICAg ICAgICAgICAgIHNzbF92ZXJpZnlfZmxhZyA9IGF0b2kocSk7Ci0jZW5kaWYgLyogQ0tfU1NMICov Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKGZ0cF9kZWIpIHByaW50ZigiXCJcbiIpOwot ICAgICAgICAgICAgICBmcmVlKHApOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9 Ci0jZW5kaWYgLyogRlRQX1NFQ1VSSVRZICovCi0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg ICAgICAgZmF0YWwyKCp4YXJndiwKLSAgICAgICAgICAgICAgICAgICAidW5rbm93biBjb21tYW5k LWxpbmUgb3B0aW9uLCB0eXBlIFwiZnRwIC1oXCIgZm9yIGhlbHAiCi0gICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXhwKSBicmVhazsKLSAgICAgICAgYyA9ICor K3hwOyAgICAgICAgICAgICAgICAgICAgICAvKiBTZWUgaWYgb3B0aW9ucyBhcmUgYnVuZGxlZCAq LwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogTk9DTURMICovCi0KLWludAot ZnRwaXNjb25uZWN0ZWQoKSB7Ci0gICAgcmV0dXJuKGNvbm5lY3RlZCk7Ci19Ci0KLWludAotZnRw aXNsb2dnZWRpbigpIHsKLSAgICByZXR1cm4oY29ubmVjdGVkID8gbG9nZ2VkaW4gOiAwKTsKLX0K LQotaW50Ci1mdHBpc3NlY3VyZSgpIHsKLSAgICByZXR1cm4oKGZ0cF9kcGwgPT0gRlBMX0NMUiAm JiAhc3NsX2Z0cF9wcm94eSkgPyAwIDogMSk7Ci19Ci0KLXN0YXRpYyBWT0lECi1mdHNjcmVlbihu LCBjLCB6LCBzKSBpbnQgbjsgY2hhciBjOyBDS19PRkZfVCB6OyBjaGFyICogczsgewotICAgIGlm IChkaXNwbGEgJiYgZmRpc3BsYSAmJiAhYmFja2dyZCAmJiAhcXVpZXQgJiYgIW91dDJzY3JlZW4p IHsKLSAgICAgICAgaWYgKCFkcHlhY3RpdmUpIHsKLSAgICAgICAgICAgIGNrc2NyZWVuKFNDUl9Q VCwnUycsKENLX09GRl9UKTAsIiIpOwotICAgICAgICAgICAgZHB5YWN0aXZlID0gMTsKLSAgICAg ICAgfQotICAgICAgICBja3NjcmVlbihuLGMseixzKTsKLSAgICB9Ci19Ci0KLSNpZm5kZWYgT1My Ci0vKiAgZyBtIHMgdCBpIG0gZSByICAtLSAgTWlsbGlzZWNvbmQgdGltZXIgKi8KLQotbG9uZwot Z21zdGltZXIoKSB7Ci0jaWZkZWYgSEFWRV9NU0VDUwotICAgIC8qIEZvciB0aG9zZSB2ZXJzaW9u cyBvZiB6dGltZSgpIHRoYXQgYWxzbyBzZXQgZ2xvYmFsIHp0bXNlYy4gKi8KLSAgICBjaGFyICpw ID0gTlVMTDsKLSAgICBsb25nIHo7Ci0gICAgenRpbWUoJnApOwotICAgIGlmICghcCkgcmV0dXJu KDBMKTsKLSAgICBpZiAoISpwKSByZXR1cm4oMEwpOwotICAgIHogPSBhdG9sKHArMTEpICogMzYw MEwgKyBhdG9sKHArMTQpICogNjBMICsgYXRvbChwKzE3KTsKLSAgICByZXR1cm4oeiAqIDEwMDAg KyB6dG1zZWMpOwotI2Vsc2UKLSAgICByZXR1cm4oKGxvbmcpdGltZShOVUxMKSAqIDEwMDBMKTsK LSNlbmRpZiAvKiBIQVZFX01TRUNTICovCi19Ci0jZW5kaWYgLyogT1MyICovCi0KLS8qICBkIG8g cyBlIHQgZiB0IHAgIC0tICBUaGUgU0VUIEZUUCBjb21tYW5kICAqLwotCi1pbnQKLWRvc2V0ZnRw KCkgewotICAgIGludCBjeDsKLSAgICBpZiAoKGN4ID0gY21rZXkoZnRwc2V0LG5mdHBzZXQsIiIs IiIseHhzdHJpbmcpKSA8IDApIC8qIFNldCB3aGF0PyAqLwotICAgICAgcmV0dXJuKGN4KTsKLSAg ICBzd2l0Y2ggKGN4KSB7Ci0KLSAgICAgIGNhc2UgRlRTX0ZOQzogICAgICAgICAgICAgICAgICAg ICAvKiBGaWxlbmFtZSBjb2xsaXNpb24gYWN0aW9uICovCi0gICAgICAgIGlmICgoeCA9IGNta2V5 KGZ0cGNvbHh0YWIsbmZ0cGNvbHgsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0 dXJuKHgpOwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJu KHkpOwotICAgICAgICBmdHBfZm5jID0geDsKLSAgICAgICAgcmV0dXJuKDEpOwotCi0gICAgICBj YXNlIEZUU19DTlY6ICAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgY29udmVyc2lvbiAq LwotICAgICAgICBpZiAoKHggPSBjbWtleShmbnRhYixuZm50YWIsIiIsImF1dG9tYXRpYyIseHhz dHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBmdHBfY252ID0geDsKLSAg ICAgICAgcmV0dXJuKDEpOwotCi0gICAgICBjYXNlIEZUU19EQkc6ICAgICAgICAgICAgICAgICAg ICAgLyogRGVidWcgbWVzc2FnZXMgKi8KLSAgICAgICAgcmV0dXJuKHNldG9uKCZmdHBfZGViKSk7 Ci0KLSAgICAgIGNhc2UgRlRTX0xPRzogICAgICAgICAgICAgICAgICAgICAvKiBBdXRvLWxvZ2lu ICovCi0gICAgICAgIHJldHVybihzZXRvbigmZnRwX2xvZykpOwotCi0gICAgICBjYXNlIEZUU19Q U1Y6ICAgICAgICAgICAgICAgICAgICAgLyogUGFzc2l2ZSBtb2RlICovCi0JcmV0dXJuKGRvc2V0 ZnRwcHN2KCkpOwotCi0gICAgICBjYXNlIEZUU19TUEM6ICAgICAgICAgICAgICAgICAgICAgLyog U2VuZCBwb3J0IGNvbW1hbmRzICovCi0gICAgICAgIHggPSBzZXRvbigmZnRwX3NwYyk7Ci0gICAg ICAgIGlmICh4ID4gMCkgc2VuZHBvcnQgPSBmdHBfc3BjOwotICAgICAgICByZXR1cm4oeCk7Ci0K LSAgICAgIGNhc2UgRlRTX1RZUDogICAgICAgICAgICAgICAgICAgICAvKiBUeXBlICovCi0gICAg ICAgIGlmICgoeCA9IGNta2V5KGZ0cHR5cCxuZnRwdHlwLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQot ICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeSk7Ci0JZnRwX3R5cCA9IHg7Ci0JZ19mdHBfdHlwID0geDsKLQl0ZW5leCA9IChmdHBfdHlw ID09IEZUVF9URU4pOwotICAgICAgICByZXR1cm4oMSk7Ci0KLSAgICAgIGNhc2UgRlRTX1VTTjog ICAgICAgICAgICAgICAgICAgICAvKiBVbmlxdWUgc2VydmVyIG5hbWVzICovCi0gICAgICAgIHJl dHVybihzZXRvbigmZnRwX3VzbikpOwotCi0gICAgICBjYXNlIEZUU19WQk06ICAgICAgICAgICAg ICAgICAgICAgLyogVmVyYm9zZSBtb2RlICovCi0gICAgICAgIGlmICgoeCA9IHNldG9uKCZmdHBf dmJtKSkgPCAwKSAgLyogUGVyLWNvbW1hbmQgY29weSAqLwotICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgZnRwX3ZieCA9IGZ0cF92Ym07ICAgICAgICAgICAgICAvKiBHbG9iYWwgc3RpY2t5 IGNvcHkgKi8KLSAgICAgICAgcmV0dXJuKHgpOwotCi0gICAgICBjYXNlIEZUU19UU1Q6ICAgICAg ICAgICAgICAgICAgICAgLyogImlmICh0ZXN0aW5nKSIgbWVzc2FnZXMgKi8KLSAgICAgICAgcmV0 dXJuKHNldG9uKCZ0ZXN0aW5nKSk7Ci0KLSAgICAgIGNhc2UgRlRTX1BSTTogICAgICAgICAgICAg ICAgICAgICAvKiBTZW5kIHBlcm1pc3Npb25zICovCi0gICAgICAgIHJldHVybihzZXRvbmF1dCgm ZnRwX3BybSkpOwotCi0gICAgICBjYXNlIEZUU19BVVQ6ICAgICAgICAgICAgICAgICAgICAgLyog QXV0by1hdXRoZW50aWNhdGlvbiAqLwotICAgICAgICByZXR1cm4oc2V0b24oJmZ0cF9hdXQpKTsK LQotICAgICAgY2FzZSBGVFNfRVJSOiAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIGFjdGlv biAqLwotICAgICAgICBpZiAoKHggPSBjbWtleShxb3JwLDIsIiIsIiIseHhzdHJpbmcpKSA8IDAp Ci0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0g ICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBmdHBfZXJyID0geDsKLSAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgICBjYXNlIEZUU19YTEE6ICAg ICAgICAgICAgICAgICAgICAgLyogVHJhbnNsYXRpb24gKi8KLSAgICAgICAgcmV0dXJuKHNldG9u KCZmdHBfeGxhKSk7Ci0KLSAgICAgIGNhc2UgRlRTX0NTUjogICAgICAgICAgICAgICAgICAgICAv KiBTZXJ2ZXIgY2hhcnNldCAqLwotICAgICAgICBpZiAoKHggPSBjbWtleShmY3N0YWIsbmZpbGMs ImNoYXJhY3Rlci1zZXQiLCJ1dGY4Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4o eCk7Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7 Ci0gICAgICAgIGZ0cF9jc3IgPSB4OwotICAgICAgICBmdHBfeGxhID0gMTsgICAgICAgICAgICAg ICAgICAgIC8qIEFsc28gZW5hYmxlIHRyYW5zbGF0aW9uICovCi0gICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0gICAgICBjYXNlIEZUU19HRlQ6Ci0g ICAgICAgIHJldHVybihzZXRvbigmZ2V0X2F1dG8pKTsgICAgICAgLyogR0VULWZpbGV0eXBlLXN3 aXRjaGluZyAqLwotCi0gICAgICBjYXNlIEZUU19EQVQ6Ci0gICAgICAgIHJldHVybihzZXRvbigm ZnRwX2RhdGVzKSk7ICAgICAgLyogU2V0IGZpbGUgZGF0ZXMgKi8KLQotI2lmZGVmIEZUUF9USU1F T1VUCi0gICAgICBjYXNlIEZUU19UTU86CQkJLyogVGltZW91dCAqLwotICAgICAgICBpZiAoKHgg PSBjbW51bSgiTnVtYmVyIG9mIHNlY29uZHMiLCIwIiwxMCwmeix4eHN0cmluZykpIDwgMCkKLSAg ICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAg ICAgICByZXR1cm4oeSk7Ci0JZnRwX3RpbWVvdXQgPSB6OwotCXJldHVybihzdWNjZXNzID0gMSk7 Ci0jZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KLQotICAgICAgY2FzZSBGVFNfU1RPOiB7CQkJLyog U2VydmVyIHRpbWUgb2Zmc2V0ICovCi0JICBjaGFyICogcywgKiBwID0gTlVMTDsKLQkgIGxvbmcg azsKLQkgIGlmICgoeCA9IGNtZmxkKCJbKy1daGhbOm1tWzpzc11dIiwiKzAiLCZzLHh4c3RyaW5n KSkgPCAwKQotCSAgICByZXR1cm4oeCk7Ci0JICBpZiAoIXN0cmNtcChzLCIrMCIpKSB7Ci0JICAg ICAgcyA9IE5VTEw7Ci0JICB9IGVsc2UgaWYgKCh4ID0gZGVsdGEyc2VjKHMsJmspKSA8IDApIHsg LyogQ2hlY2sgZm9ybWF0ICovCi0JICAgICAgcHJpbnRmKCI/SW52YWxpZCB0aW1lIG9mZnNldFxu Iik7Ci0JICAgICAgcmV0dXJuKC05KTsKLQkgIH0KLQkgIG1ha2VzdHIoJnAscyk7CQkvKiBNYWtl IGEgc2FmZSBjb3B5IHRoZSBzdHJpbmcgKi8KLQkgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgewkv KiBHZXQgY29uZmlybWF0aW9uICovCi0JICAgICAgaWYgKHApCi0JCW1ha2VzdHIoJnAsTlVMTCk7 Ci0JICAgICAgcmV0dXJuKHgpOwotCSAgfQotCSAgZnRzX3N0byA9IHA7CQkJLyogQ29uZmlybWVk IC0gc2V0IHRoZSBzdHJpbmcuICovCi0JICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQot ICAgICAgY2FzZSBGVFNfQVBXOiB7Ci0JICBjaGFyICogczsKLQkgIGlmICgoeCA9IGNtdHh0KCJU ZXh0IiwgIiIsICZzLCB4eHN0cmluZykpIDwgMCkKLQkgICAgcmV0dXJuKHgpOwotCSAgbWFrZXN0 cigmZnRwX2FwdywgKnMgPyBzIDogTlVMTCk7Ci0JICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAg ICAgfQotCi0gICAgICBjYXNlIEZUU19CVUc6IHsKLSAgICAgICAgICBpZiAoKHggPSBjbWtleShm dHBidWd0YWIsbmZ0cGJ1ZywiIiwiIix4eHN0cmluZykpIDwgMCkgCi0JICAgIHJldHVybih4KTsK LSAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICBjYXNlIEZU Ql9TVjI6Ci0JICAgIHJldHVybiBzZXRvbigmZnRwX2J1Z191c2Vfc3NsX3YyKTsKLSNlbmRpZiAv KiBDS19TU0wgKi8KLSAgICAgICAgICBkZWZhdWx0OgotCSAgICByZXR1cm4oLTIpOwotICAgICAg ICAgIH0KLSAgICAgIH0KLQotI2lmZGVmIEZUUF9TRUNVUklUWQotICAgICAgY2FzZSBGVFNfQ1JZ OiAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG8tZW5jcnlwdGlvbiAqLwotICAgICAgICByZXR1 cm4oc2V0b24oJmZ0cF9jcnkpKTsKLQotICAgICAgY2FzZSBGVFNfQ0ZXOiAgICAgICAgICAgICAg ICAgICAgIC8qIENyZWRlbnRpYWwtZm9yd2FyZGluZyAqLwotICAgICAgICByZXR1cm4oc2V0b24o JmZ0cF9jZncpKTsKLQotICAgICAgY2FzZSBGVFNfQ1BMOiAgICAgICAgICAgICAgICAgICAgIC8q IENvbW1hbmQgcHJvdGVjdGlvbiBsZXZlbCAqLwotICAgICAgICBpZiAoKHggPSBjbWtleShmdHBw cm8sbmZ0cHBybywiIiwiIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgc3VjY2VzcyA9IGZ0c19jcGwo eCk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzKTsKLQotICAgICAgY2FzZSBGVFNfRFBMOiAgICAg ICAgICAgICAgICAgICAgIC8qIERhdGEgcHJvdGVjdGlvbiBsZXZlbCAqLwotICAgICAgICBpZiAo KHggPSBjbWtleShmdHBwcm8sbmZ0cHBybywiIiwiIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHgp OwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICBz dWNjZXNzID0gZnRzX2RwbCh4KTsKLSAgICAgICAgICByZXR1cm4oc3VjY2Vzcyk7Ci0KLSAgICAg IGNhc2UgRlRTX0FUUDogeyAgICAgICAgICAgICAgICAgICAvKiBGVFAgQXV0aCBUeXBlICovCi0g ICAgICAgICAgaW50IGksIGosIGF0eXBlc1s4XTsKLQotICAgICAgICAgIGZvciAoaSA9IDA7IGkg PCA4OyBpKyspIHsKLSAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoZnRwYXV0aCxuZnRwYXV0 aCwiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgPT0gMCkgPyAiYXV0b21hdGlj IiA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkgewot ICAgICAgICAgICAgICAgICAgaWYgKHkgPT0gLTMpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgIGlmIChpID4gMCAmJiAoeSA9PSBGVEFfQVVUTykpIHsKLSAgICAgICAgICAgICAgICAg IHByaW50ZigiP0Nob2ljZSBtYXkgb25seSBiZSB1c2VkIGluIGZpcnN0IHBvc2l0aW9uLlxyXG4i KTsKLSAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgewotICAgICAgICAgICAgICAgICAgaWYg KGF0eXBlc1tqXSA9PSB5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcclxuP0No b2ljZSBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICAg IHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgYXR5cGVzW2ldID0geTsKLSAgICAgICAgICAgICAgaWYgKHkgPT0gRlRBX0FVVE8p IHsKLSAgICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChpIDwgOCkKLSAgICAgICAg ICAgIGF0eXBlc1tpXSA9IDA7Ci0gICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQotICAg ICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAgIGlmIChhdHlwZXNbMF0gPT0gRlRBX0FVVE8p IHsKLSAgICAgICAgICAgICAgaSA9IDA7Ci0jaWZkZWYgRlRQX0dTU0FQSQotICAgICAgICAgICAg ICBmdHBfYXV0aF90eXBlW2krK10gPSBGVEFfR0s1OwotI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8K LSNpZmRlZiBGVFBfU1JQCi0gICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbaSsrXSA9IEZUQV9T UlA7Ci0jZW5kaWYgLyogRlRQX1NSUCAqLwotI2lmZGVmIEZUUF9LUkI0Ci0gICAgICAgICAgICAg IGZ0cF9hdXRoX3R5cGVbaSsrXSA9IEZUQV9LNDsKLSNlbmRpZiAvKiBGVFBfS1JCNCAqLwotI2lm ZGVmIENLX1NTTAotICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW2krK10gPSBGVEFfVExTOwot ICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW2krK10gPSBGVEFfU1NMOwotI2VuZGlmIC8qIENL X1NTTCAqLwotICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW2ldID0gMDsKLSAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotICAgICAgICAg ICAgICAgIGZ0cF9hdXRoX3R5cGVbaV0gPSBhdHlwZXNbaV07Ci0gICAgICAgICAgfQotICAgICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgRlRTX1NSUDoK LSNpZmRlZiBGVFBfU1JQCi0gICAgICAgIGlmICgoeCA9IGNta2V5KGZ0cHNycCxuZnRwc3JwLCIi LCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgc3dpdGNo ICh4KSB7Ci0gICAgICAgICAgY2FzZSBTUlBfQ0lQSEVSOgotICAgICAgICAgICAgaWYgKCh4ID0g Y21rZXkoY2lwaGVydGFiLG5jaXBoZXJ0YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAg ICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAg ICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAgICAgc3VjY2VzcyA9ICFzcnBfc2VsY2lw aGVyKGNpcGhlcnRhYlt4XS5rd2QpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotICAg ICAgICAgIGNhc2UgU1JQX0hBU0g6Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWtleShoYXNodGFi LG5oYXNodGFiLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVy bih6KTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAhc3JwX3NlbGhhc2goaGFzaHRhYlt4XS5rd2Qp OwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICBkZWZhdWx0Ogot ICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4o eik7Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0jZWxzZSAvKiBGVFBfU1JQ ICovCi0gICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeik7 Ci0gICAgICAgIHJldHVybigtMik7Ci0jZW5kaWYgLyogRlRQX1NSUCAqLwotI2VuZGlmIC8qIEZU UF9TRUNVUklUWSAqLwotCi0gICAgICBjYXNlIEZUU19ESVM6Ci0JZG94ZGlzKDIpOwkJCS8qIDIg PT0gZnRwICovCi0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGRlZmF1bHQ6 Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotfQotCi1pbnQKLWZ0cGJ5ZSgpIHsKLSAgICBp bnQgeDsKLSAgICBpZiAoIWNvbm5lY3RlZCkKLSAgICAgIHJldHVybigxKTsKLSAgICBpZiAodGVz dGluZykKLSAgICAgIHByaW50ZigiIGZ0cCBjbG9zaW5nICVzLi4uXG4iLGZ0cF9ob3N0KTsKLSAg ICB4ID0gZnRwY2xvc2UoKTsKLSAgICByZXR1cm4oKHggPiAtMSkgPyAxIDogMCk7Ci19Ci0KLS8q ICBvIHAgZSBuIGYgdCBwICAtLSAgUGFyc2UgRlRQIGhvc3RuYW1lICYgcG9ydCBhbmQgb3BlbiAq LwotCi1zdGF0aWMgaW50Ci1vcGVuZnRwKHMsb3BuX3RscykgY2hhciAqIHM7IGludCBvcG5fdGxz OyB7Ci0gICAgY2hhciBjLCAqIHAsICogaG9zdG5hbWUgPSBOVUxMLCAqaG9zdHNhdmUgPSBOVUxM LCAqIHNlcnZpY2UgPSBOVUxMOwotICAgIGludCBpLCBuLCBoYXZlaG9zdCA9IDAsIGdldHZhbCA9 IDAsIHJjID0gLTksIG9wbl9wc3YgPSAtMSwgbm9sb2dpbiA9IDA7Ci0gICAgaW50IGhhdmV1c2Vy ID0gMDsKLSAgICBzdHJ1Y3QgRkRCIHN3LCBmbCwgY207Ci0gICAgZXh0ZXJuIGludCBubmV0ZGly OyAgICAgICAgICAgICAgICAgLyogTmV0d29yayBzZXJ2aWNlcyBkaXJlY3RvcnkgKi8KLSAgICBl eHRlcm4gaW50IG5oY291bnQ7ICAgICAgICAgICAgICAgICAvKiBMb29rdXAgcmVzdWx0ICovCi0g ICAgZXh0ZXJuIGNoYXIgKm5oX3BbXTsgICAgICAgICAgICAgICAgLyogTmV0d29yayBkaXJlY3Rv cnkgZW50cnkgcG9pbnRlcnMgKi8KLSAgICBleHRlcm4gY2hhciAqbmhfcDJbXTsgICAgICAgICAg ICAgICAvKiBOZXR3b3JrIGRpcmVjdG9yeSBlbnRyeSBuZXR0eXBlICovCi0KLSAgICBpZiAoIXMp IHJldHVybigtMik7Ci0gICAgaWYgKCEqcykgcmV0dXJuKC0yKTsKLQotICAgIG1ha2VzdHIoJmhv c3RuYW1lLHMpOwotICAgIGhvc3RzYXZlID0gaG9zdG5hbWU7Ci0gICAgbWFrZXN0cigmZnRwX2xv Z25hbWUsTlVMTCk7Ci0gICAgYW5vbnltb3VzID0gMDsKLSAgICBub2luaXQgPSAwOwotCi0gICAg ZGVidWcoRjExMCwiZnRwIG9wZW4iLGhvc3RuYW1lLDApOwotCi0gICAgaWYgKHNhdl9wc3YgPiAt MSkgeyAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBwcmV2YWlsaW5nIGFjdGl2ZS9wYXNzaXZl ICovCi0gICAgICAgIGZ0cF9wc3YgPSBzYXZfcHN2OyAgICAgICAgICAgICAgLyogc2VsZWN0aW9u IGluIGNhc2UgaXQgd2FzICovCi0gICAgICAgIHNhdl9wc3YgPSAtMTsgICAgICAgICAgICAgICAg ICAgLyogdGVtcG9yYXJpbHkgb3ZlcnJpZGVuIGJ5IGEgc3dpdGNoICovCi0gICAgfQotICAgIGlm IChzYXZfbG9nID4gLTEpIHsgICAgICAgICAgICAgICAgIC8qIERpdHRvIGZvciBhdXRvbG9naW4g Ki8KLSAgICAgICAgZnRwX2xvZyA9IHNhdl9sb2c7Ci0gICAgICAgIHNhdl9sb2cgPSAtMTsKLSAg ICB9Ci0gICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3dpdGNoZXMg Ki8KLSAgICAgICAgICAgX0NNS0VZLAotICAgICAgICAgICAiU2VydmljZSBuYW1lIG9yIHBvcnQ7 XG4gb3Igc3dpdGNoIiwKLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgbmZ0cHN3aSwgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLSAgICAgICAgICAgNCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogbm9uZSAq LwotICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3Npbmcg ZnVuY3Rpb24gKi8KLSAgICAgICAgICAgZnRwc3dpdGFiLCAgICAgICAgICAgICAgICAgICAvKiBL ZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICZmbCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAgICAgICApOwotICAgIGNtZmRiaSgmZmws ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEEgaG9zdCBuYW1lIG9yIGFkZHJlc3MgKi8KLSAg ICAgICAgICAgX0NNRkxELCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAg ICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhlbHAgKi8KLSAgICAgICAgICAg InhZekJvbyIsICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAg ICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEg MSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51 bWVyaWMgZGF0YSAyICovCi0gICAgICAgICAgIHh4c3RyaW5nLAotICAgICAgICAgICBOVUxMLAot ICAgICAgICAgICAmY20KLSAgICAgICAgICAgKTsKLSAgICBjbWZkYmkoJmNtLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDb21tYW5kIGNvbmZpcm1hdGlvbiAqLwotICAgICAgICAgICBfQ01D Rk0sCi0gICAgICAgICAgICIiLAotICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIiIsCi0gICAg ICAgICAgIDAsCi0gICAgICAgICAgIDAsCi0gICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgIE5V TEwsCi0gICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgKTsKLQotICAgIGZvciAobiA9IDA7OyBu KyspIHsKLSAgICAgICAgcmMgPSBjbWZkYigmc3cpOyAgICAgICAgICAgICAgICAvKiBQYXJzZSBh IHNlcnZpY2UgbmFtZSBvciBhIHN3aXRjaCAqLwotICAgICAgICBpZiAocmMgPCAwKQotICAgICAg ICAgIGdvdG8geG9wZW5mdHA7Ci0KLSAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUNG TSkgeyAvKiBEb25lPyAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAo Y21yZXN1bHQuZmNvZGUgPT0gX0NNRkxEKSB7ICAvKiBQb3J0ICovCi0gICAgICAgICAgICBpZiAo Y2tzdHJjbXAoInhZekJvbyIsY21yZXN1bHQuc3Jlc3VsdCwtMSwxKSkKLSAgICAgICAgICAgICAg bWFrZXN0cigmc2VydmljZSxjbXJlc3VsdC5zcmVzdWx0KTsKLSAgICAgICAgICAgIGVsc2UKLSAg ICAgICAgICAgICAgbWFrZXN0cigmc2VydmljZSxvcG5fdGxzPyJmdHBzIjoiZnRwIik7Ci0gICAg ICAgIH0gZWxzZSBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNS0VZKSB7IC8qIEhhdmUgYSBzd2l0 Y2ggKi8KLSAgICAgICAgICAgIGMgPSBjbWdicmsoKTsgICAgICAgICAgICAgICAvKiBnZXQgYnJl YWsgY2hhcmFjdGVyICovCi0gICAgICAgICAgICBnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAn PScpOwotICAgICAgICAgICAgcmMgPSAtOTsKLSAgICAgICAgICAgIGlmIChnZXR2YWwgJiYgIShj bXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhp cyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcbiIpOwotICAgICAgICAgICAgICAgIGdv dG8geG9wZW5mdHA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWdldHZhbCAmJiAo Y21yZXN1bHQua2ZsYWdzICYgQ01fQVJHKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1Ro aXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgICAgICBnb3Rv IHhvcGVuZnRwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5u cmVzdWx0KSB7IC8qIFN3aXRjaCAqLwotICAgICAgICAgICAgICBjYXNlIE9QTl9BTk86ICAgICAg ICAgICAgIC8qIC9BTk9OWU1PVVMgKi8KLSAgICAgICAgICAgICAgICBhbm9ueW1vdXMrKzsKLQkJ bm9sb2dpbiA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug T1BOX05JTjogICAgICAgICAgICAgLyogL05PSU5JVCAqLwotICAgICAgICAgICAgICAgIG5vaW5p dCsrOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIE9QTl9OT0w6 ICAgICAgICAgICAgIC8qIC9OT0xPR0lOICovCi0gICAgICAgICAgICAgICAgbm9sb2dpbisrOwot CQlhbm9ueW1vdXMgPSAwOwotCQltYWtlc3RyKCZmdHBfbG9nbmFtZSxOVUxMKTsKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBPUE5fUFNXOiAgICAgICAgICAgICAv KiAvUEFTU1dPUkQgKi8KLSAgICAgICAgICAgICAgICBpZiAoIWFub255bW91cykgICAgICAgICAv KiBEb24ndCBsb2cgcmVhbCBwYXNzd29yZHMgKi8KLSAgICAgICAgICAgICAgICAgIGRlYm9rID0g MDsKLSAgICAgICAgICAgICAgICByYyA9IGNtZmxkKCJQYXNzd29yZCBmb3IgRlRQIHNlcnZlciIs IiIsJnAseHhzdHJpbmcpOwotICAgICAgICAgICAgICAgIGlmIChyYyA9PSAtMykgewotICAgICAg ICAgICAgICAgICAgICBtYWtlc3RyKCZmdHBfdG1wLE5VTEwpOwotICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAocmMgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8geG9wZW5mdHA7Ci0g ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmZnRw X3RtcCxicnN0cmlwKHApKTsKLQkJICAgIG5vbG9naW4gPSAwOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBPUE5fVVNSOiAgICAg ICAgICAgICAvKiAvVVNFUiAqLwotICAgICAgICAgICAgICAgIHJjID0gY21mbGQoIlVzZXJuYW1l IGZvciBGVFAgc2VydmVyIiwiIiwmcCx4eHN0cmluZyk7Ci0gICAgICAgICAgICAgICAgaWYgKHJj ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmZ0cF9sb2duYW1lLE5VTEwp OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmMgPCAwKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGdvdG8geG9wZW5mdHA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJICAgIG5vbG9n aW4gPSAwOwotICAgICAgICAgICAgICAgICAgICBhbm9ueW1vdXMgPSAwOwotCQkgICAgaGF2ZXVz ZXIgPSAxOwotICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZmdHBfbG9nbmFtZSxicnN0cmlw KHApKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgIGNhc2UgT1BOX0FDQzoKLSAgICAgICAgICAgICAgICByYyA9IGNtZmxkKCJBY2NvdW50 IGZvciBGVFAgc2VydmVyIiwiIiwmcCx4eHN0cmluZyk7Ci0gICAgICAgICAgICAgICAgaWYgKHJj ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmZ0cF9hY2MsTlVMTCk7Ci0g ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyYyA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAg Z290byB4b3BlbmZ0cDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg ICAgICBtYWtlc3RyKCZmdHBfYWNjLGJyc3RyaXAocCkpOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBPUE5fQUNUOgotICAgICAg ICAgICAgICAgIG9wbl9wc3YgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICBjYXNlIE9QTl9QU1Y6Ci0gICAgICAgICAgICAgICAgb3BuX3BzdiA9IDE7Ci0gICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgT1BOX1RMUzoKLSAgICAgICAgICAg ICAgICBvcG5fdGxzID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotICAgICAgICBpZiAobiA9PSAwKSB7ICAgICAgICAgICAgICAgICAgIC8qIEFmdGVyIGZpcnN0 IHRpbWUgdGhyb3VnaCAqLwotICAgICAgICAgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAg IC8qIGFjY2VwdCBvbmx5IHN3aXRjaGVzICovCi0gICAgICAgICAgICAgICAgICAgX0NNS0VZLAot ICAgICAgICAgICAgICAgICAgICJcbkNhcnJpYWdlIHJldHVybiB0byBjb25maXJtIHRvIGNvbW1h bmQsIG9yIHN3aXRjaCIsCi0gICAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAg ICAgIiIsCi0gICAgICAgICAgICAgICAgICAgbmZ0cHN3aSwKLSAgICAgICAgICAgICAgICAgICA0 LAotICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nLAotICAgICAgICAgICAgICAgICAgIGZ0cHN3 aXRhYiwKLSAgICAgICAgICAgICAgICAgICAmY20KLSAgICAgICAgICAgICAgICAgICApOwotICAg ICAgICB9Ci0gICAgfQotI2lmZGVmIENPTU1FTlQKLSAgICBkZWJ1ZyhGMTAwLCJmdHAgb3BlbmZ0 cCB3aGlsZSBleGl0IiwiIiwwKTsKLSAgICByYyA9IGNtY2ZtKCk7Ci0gICAgZGVidWcoRjEwMSwi ZnRwIG9wZW5mdHAgY21jZm0gcmMiLCIiLHJjKTsKLSAgICBpZiAocmMgPCAwKQotICAgICAgZ290 byB4b3BlbmZ0cDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICBpZiAob3BuX3BzdiA+IC0x KSB7ICAgICAgICAgICAgICAgICAvKiAvUEFTU0lWRSBvciAvQUNUSVZFIHN3aXRjaCBnaXZlbiAq LwotICAgICAgICBzYXZfcHN2ID0gZnRwX3BzdjsKLSAgICAgICAgZnRwX3BzdiA9IG9wbl9wc3Y7 Ci0gICAgfQotICAgIGlmIChub2xvZ2luIHx8IGhhdmV1c2VyKSB7CQkvKiAvTk9MT0dJTiBvciAv VVNFUiBzd2l0Y2ggZ2l2ZW4gKi8KLQlzYXZfbG9nID0gZnRwX2xvZzsKLQlmdHBfbG9nID0gaGF2 ZXVzZXIgPyAxIDogMDsKLSAgICB9Ci0gICAgaWYgKCpob3N0bmFtZSA9PSAnPScpIHsgICAgICAg ICAgICAgLyogQnlwYXNzIGRpcmVjdG9yeSBsb29rdXAgKi8KLSAgICAgICAgaG9zdG5hbWUrKzsg ICAgICAgICAgICAgICAgICAgICAvKiBpZiBob3N0bmFtZSBzdGFydHMgd2l0aCAnPScgKi8KLSAg ICAgICAgaGF2ZWhvc3QrKzsKLSAgICB9IGVsc2UgaWYgKGlzZGlnaXQoKmhvc3RuYW1lKSkgeyAg ICAvKiBvciBpZiBpdCBzdGFydHMgd2l0aCBhIGRpZ2l0ICovCi0gICAgICAgIGhhdmVob3N0Kys7 Ci0gICAgfQotICAgIGlmICghc2VydmljZSkKLSAgICAgIG1ha2VzdHIoJnNlcnZpY2Usb3BuX3Rs cz8iZnRwcyI6ImZ0cCIpOwotCi0jaWZuZGVmIE5PRElBTAotICAgIGlmICghaGF2ZWhvc3QgJiYg bm5ldGRpciA+IDApIHsgICAgIC8qIElmIHRoZXJlIGlzIGEgbmV0d29ya3MgZGlyZWN0b3J5ICov Ci0gICAgICAgIGx1bmV0KGhvc3RuYW1lKTsgICAgICAgICAgICAgICAgLyogTG9vayB1cCB0aGUg bmFtZSAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgb3BlbmZ0cCBsdW5ldCIsaG9zdG5hbWUs bmhjb3VudCk7Ci0gICAgICAgIGlmIChuaGNvdW50ID09IDApIHsKLSAgICAgICAgICAgIGlmICh0 ZXN0aW5nKQotICAgICAgICAgICAgICBwcmludGYoIiBmdHAgb3BlbiB0cnlpbmcgXCIlcyAlc1wi Li4uXG4iLGhvc3RuYW1lLHNlcnZpY2UpOwotICAgICAgICAgICAgc3VjY2VzcyA9IGZ0cG9wZW4o aG9zdG5hbWUsc2VydmljZSxvcG5fdGxzKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBv cGVuZnRwIEEgZnRwb3BlbiBzdWNjZXNzIiwiIixzdWNjZXNzKTsKLSAgICAgICAgICAgIHJjID0g c3VjY2VzczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludCBmb3VuZCA9IDA7Ci0g ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmhjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAg ICAgaWYgKG5oX3AyW2ldKSAgICAgICAgICAgLyogSWYgbmV0d29yayB0eXBlIHNwZWNpZmllZCAq LwotICAgICAgICAgICAgICAgICAgaWYgKGNrc3RyY21wKG5oX3AyW2ldLCJ0Y3AvaXAiLHN0cmxl bihuaF9wMltpXSksMCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg ICAgICAgIGZvdW5kKys7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigmaG9zdG5hbWUsbmhfcFtp XSk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwb3BlbiBsdW5ldCBzdWJzdGl0dXRp b24iLGhvc3RuYW1lLGkpOwotICAgICAgICAgICAgICAgIGlmICh0ZXN0aW5nKQotICAgICAgICAg ICAgICAgICAgcHJpbnRmKCIgZnRwIG9wZW4gdHJ5aW5nIFwiJXMgJXNcIi4uLlxuIixob3N0bmFt ZSxzZXJ2aWNlKTsKLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gZnRwb3Blbihob3N0bmFtZSxz ZXJ2aWNlLG9wbl90bHMpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBvcGVuZnRw IEIgZnRwb3BlbiBzdWNjZXNzIiwiIixzdWNjZXNzKTsKLSAgICAgICAgICAgICAgICByYyA9IHN1 Y2Nlc3M7Ci0gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZm91bmQpIHsgICAgICAgICAg ICAgICAvKiBFLmcuIGlmIG5vIG5ldHdvcmsgdHlwZXMgbWF0Y2ggKi8KLSAgICAgICAgICAgICAg ICBpZiAodGVzdGluZykKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiIGZ0cCBvcGVuIHRyeWlu ZyBcIiVzICVzXCIuLi5cbiIsaG9zdG5hbWUsc2VydmljZSk7Ci0gICAgICAgICAgICAgICAgc3Vj Y2VzcyA9IGZ0cG9wZW4oaG9zdG5hbWUsc2VydmljZSxvcG5fdGxzKTsKLSAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJmdHAgb3BlbmZ0cCBDIGZ0cG9wZW4gc3VjY2VzcyIsIiIsc3VjY2Vzcyk7 Ci0gICAgICAgICAgICAgICAgcmMgPSBzdWNjZXNzOwotICAgICAgICAgICAgfQotICAgICAgICB9 Ci0gICAgfSBlbHNlIHsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSAgICAgICAgaWYgKHRlc3Rpbmcp Ci0gICAgICAgICAgcHJpbnRmKCIgZnRwIG9wZW4gdHJ5aW5nIFwiJXMgJXNcIi4uLlxuIixob3N0 bmFtZSxzZXJ2aWNlKTsKLSAgICAgICAgc3VjY2VzcyA9IGZ0cG9wZW4oaG9zdG5hbWUsc2Vydmlj ZSxvcG5fdGxzKTsKLSAgICAgICAgZGVidWcoRjExMSwiZnRwIG9wZW5mdHAgRCBmdHBvcGVuIHN1 Y2Nlc3MiLGhvc3RuYW1lLHN1Y2Nlc3MpOwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgb3BlbmZ0 cCBEIGZ0cG9wZW4gY29ubmVjdGVkIixob3N0bmFtZSxjb25uZWN0ZWQpOwotICAgICAgICByYyA9 IHN1Y2Nlc3M7Ci0jaWZuZGVmIE5PRElBTAotICAgIH0KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQot ICB4b3BlbmZ0cDoKLSAgICBkZWJ1ZyhGMTAxLCJmdHAgb3BlbmZ0cCB4b3BlbmZ0cCByYyIsIiIs cmMpOwotICAgIGlmIChob3N0c2F2ZSkgZnJlZShob3N0c2F2ZSk7Ci0gICAgaWYgKHNlcnZpY2Up IGZyZWUoc2VydmljZSk7Ci0gICAgaWYgKHJjIDwgMCAmJiBmdHBfbG9nbmFtZSkgewotICAgICAg ICBmcmVlKGZ0cF9sb2duYW1lKTsKLSAgICAgICAgZnRwX2xvZ25hbWUgPSBOVUxMOwotICAgIH0K LSAgICBpZiAoZnRwX3RtcCkgewotICAgICAgICBmcmVlKGZ0cF90bXApOwotICAgICAgICBmdHBf dG1wID0gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotVk9JRAkJCQkJLyogMTIg QXVnIDIwMDcgKi8KLWRvZnRwZ2xvYmFsdHlwZSh4KSBpbnQgeDsgewotICAgIGZ0cF94ZmVybW9k ZSA9IFhNT0RFX007CQkvKiBTZXQgbWFudWFsIEZUUCB0cmFuc2ZlciBtb2RlICovCi0gICAgZnRw X3R5cCA9IHg7CQkJLyogVXNlZCBieSB0b3AtbGV2ZWwgQklOQVJZIGFuZCAqLwotICAgIGdfZnRw X3R5cCA9IHg7CQkJLyogQVNDSUkgY29tbWFuZHMuICovCi0gICAgZ2V0X2F1dG8gPSAwOwotICAg IGZvcmNldHlwZSA9IDE7Ci19Ci0KLWludAotZG9mdHBhY2N0KCkgewotICAgIGludCB4OwotICAg IGNoYXIgKiBzOwotICAgIGlmICgoeCA9IGNtdHh0KCJSZW1vdGUgYWNjb3VudCIsICIiLCAmcywg eHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgQ0hFQ0tDT05OKCk7Ci0gICAg bWFrZXN0cigmZnRwX2FjYyxicnN0cmlwKHMpKTsKLSAgICBpZiAodGVzdGluZykKLSAgICAgIHBy aW50ZigiIGZ0cCBhY2NvdW50OiBcIiVzXCJcbiIsZnRwX2FjYyk7Ci0gICAgc3VjY2VzcyA9IChm dHBjbWQoIkFDQ1QiLGZ0cF9hY2MsLTEsLTEsZnRwX3ZibSkgPT0gUkVQTFlfQ09NUExFVEUpOwot ICAgIHJldHVybihzdWNjZXNzKTsKLX0KLQotaW50Ci1kb2Z0cHVzcigpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTG9nIGluIGFzIFVTRVIgKi8KLSAgICBleHRlcm4gY2hhciB1aWRi dWZbXTsKLSAgICBleHRlcm4gY2hhciBwd2J1ZltdOwotICAgIGV4dGVybiBpbnQgIHB3ZmxnLCBw d2NyeXB0OwotICAgIGludCB4OwotICAgIGNoYXIgKnMsICogYWNjdCA9ICIiOwotCi0gICAgZGVi b2sgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgbG9nICovCi0KLSAgICBp ZiAoKHggPSBjbWZsZCgiUmVtb3RlIHVzZXJuYW1lIG9yIElEIix1aWRidWYsJnMseHhzdHJpbmcp KSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgY2tzdHJuY3B5KGxpbmUsYnJzdHJpcChzKSxM SU5CVUZTSVopOyAvKiBicnN0cmlwOiAxNSBKYW4gMjAwMyAqLwotICAgIGlmICgoeCA9IGNtZmxk KCJSZW1vdGUgcGFzc3dvcmQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgIGlmICh4 ID09IC0zKSB7IC8qIG5vIGlucHV0ICovCi0gICAgICAgICAgICBpZiAoIHB3YnVmWzBdICYmIHB3 ZmxnICkgewotICAgICAgICAgICAgICAgIGNrc3RybmNweSh0bXBidWYsKGNoYXIgKilwd2J1ZixU TVBCVUZTSVopOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgIGlmICggcHdjcnlwdCApCi0g ICAgICAgICAgICAgICAgICAgIGNrX2VuY3J5cHQoKGNoYXIgKil0bXBidWYpOwotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0 dXJuKHgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2tzdHJuY3B5KHRtcGJ1 ZixicnN0cmlwKHMpLFRNUEJVRlNJWik7Ci0gICAgfQotICAgIGlmICgoeCA9IGNtdHh0KCJSZW1v dGUgYWNjb3VudFxuIG9yIEVudGVyIG9yIENSIHRvIGNvbmZpcm0gdGhlIGNvbW1hbmQiLAotICAg ICAgICAgICAgICAgICAgICIiLCAmcywgeHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oeCk7 Ci0gICAgQ0hFQ0tDT05OKCk7Ci0gICAgaWYgKCpzKSB7Ci0gICAgICAgIHggPSBzdHJsZW4odG1w YnVmKTsKLSAgICAgICAgaWYgKHggPiAwKSB7Ci0gICAgICAgICAgICBhY2N0ID0gJnRtcGJ1Zlt4 KzJdOwotICAgICAgICAgICAgY2tzdHJuY3B5KGFjY3QsYnJzdHJpcChzKSxUTVBCVUZTSVogLSB4 IC0gMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRlc3RpbmcpCi0gICAgICBwcmludGYo IiBmdHAgdXNlciBcIiVzXCIgcGFzc3dvcmQgXCIlc1wiLi4uXG4iLGxpbmUsdG1wYnVmKTsKLSAg ICBzdWNjZXNzID0gZnRwX3VzZXIobGluZSx0bXBidWYsYWNjdCk7Ci0jaWZkZWYgQ0tMT0dESUFM Ci0gICAgZG9sb2dmdHAoKTsKLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLSAgICByZXR1cm4oc3Vj Y2Vzcyk7Ci19Ci0KLS8qIERPICh2YXJpb3VzIEZUUCBjb21tYW5kcykuLi4gKi8KLQotaW50Ci1k b2Z0cHR5cCh0eXBlKSBpbnQgdHlwZTsgeyAgICAgICAgICAgICAgLyogVFlQRSAqLwotICAgIENI RUNLQ09OTigpOwotICAgIGZ0cF90eXAgPSB0eXBlOwotICAgIGNoYW5nZXR5cGUoZnRwX3R5cCxm dHBfdmJtKTsKLSAgICBkZWJ1ZyhGMTAxLCJkb2Z0cHR5cCBjaGFuZ2VkIHR5cGUiLCIiLHR5cGUp OwotICAgIHJldHVybigxKTsKLX0KLQotc3RhdGljIGludAotZG9mdHB4bWtkKHMsdmJtKSBjaGFy ICogczsgaW50IHZibTsgeyAgIC8qIE1LRElSIGFjdGlvbiAqLwotICAgIGludCBsY3MgPSAtMSwg cmNzID0gLTE7Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICBpZiAoZnRwX3hsYSkgewotICAgICAgICBs Y3MgPSBmdHBfY3NsOwotICAgICAgICBpZiAobGNzIDwgMCkgbGNzID0gZmNoYXJzZXQ7Ci0gICAg ICAgIHJjcyA9IGZ0cF9jc3g7Ci0gICAgICAgIGlmIChyY3MgPCAwKSByY3MgPSBmdHBfY3NyOwot ICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgZGVidWcoRjExMCwiZnRwIGRvZnRwbWtk IixzLDApOwotICAgIGlmIChmdHBjbWQoIk1LRCIscyxsY3MscmNzLHZibSkgPT0gUkVQTFlfQ09N UExFVEUpCi0gICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIGlmIChmdHBjb2RlID09IDUw MCB8fCBmdHBjb2RlID09IDUwMikgewotICAgICAgICBpZiAoIXF1aWV0KQotICAgICAgICAgIHBy aW50ZigiTUtEIGNvbW1hbmQgbm90IHJlY29nbml6ZWQsIHRyeWluZyBYTUtEXG4iKTsKLSAgICAg ICAgaWYgKGZ0cGNtZCgiWE1LRCIscyxsY3MscmNzLHZibSkgPT0gUkVQTFlfQ09NUExFVEUpCi0g ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3Mg PSAwKTsKLX0KLQotc3RhdGljIGludAotZG9mdHBta2QoKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE1LRElSIHBhcnNlICovCi0gICAgaW50IHg7Ci0gICAgY2hhciAqIHM7Ci0gICAg aWYgKCh4ID0gY210eHQoIlJlbW90ZSBkaXJlY3RvcnkgbmFtZSIsICIiLCAmcywgeHhzdHJpbmcp KSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgQ0hFQ0tDT05OKCk7Ci0gICAgY2tzdHJuY3B5 KGxpbmUscyxMSU5CVUZTSVopOwotICAgIGlmICh0ZXN0aW5nKQotICAgICAgcHJpbnRmKCIgZnRw IG1rZGlyIFwiJXNcIi4uLlxuIixsaW5lKTsKLSAgICByZXR1cm4oc3VjY2VzcyA9IGRvZnRweG1r ZChsaW5lLC0xKSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWRvZnRwcm1kKCkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSTURJUiAqLwotICAgIGludCB4LCBsY3MgPSAtMSwgcmNzID0gLTE7 Ci0gICAgY2hhciAqIHM7Ci0gICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSBkaXJlY3RvcnkiLCAi IiwgJnMsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotICAgIENIRUNLQ09OTigp OwotICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICBpZiAodGVzdGluZykKLSAg ICAgIHByaW50ZigiIGZ0cCBybWRpciBcIiVzXCIuLi5cbiIsbGluZSk7Ci0jaWZuZGVmIE5PQ1NF VFMKLSAgICBpZiAoZnRwX3hsYSkgewotICAgICAgICBsY3MgPSBmdHBfY3NsOwotICAgICAgICBp ZiAobGNzIDwgMCkgbGNzID0gZmNoYXJzZXQ7Ci0gICAgICAgIHJjcyA9IGZ0cF9jc3g7Ci0gICAg ICAgIGlmIChyY3MgPCAwKSByY3MgPSBmdHBfY3NyOwotICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRT ICovCi0gICAgaWYgKGZ0cGNtZCgiUk1EIixsaW5lLGxjcyxyY3MsZnRwX3ZibSkgPT0gUkVQTFlf Q09NUExFVEUpCi0gICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIGlmIChmdHBjb2RlID09 IDUwMCB8fCBmdHBjb2RlID09IDUwMikgewotICAgICAgICBpZiAoIXF1aWV0KQotICAgICAgICAg IHByaW50ZigiUk1EIGNvbW1hbmQgbm90IHJlY29nbml6ZWQsIHRyeWluZyBYTUtEXG4iKTsKLSAg ICAgICAgc3VjY2VzcyA9IChmdHBjbWQoIlhSTUQiLGxpbmUsbGNzLHJjcyxmdHBfdmJtKSA9PSBS RVBMWV9DT01QTEVURSk7Ci0gICAgfSBlbHNlCi0gICAgICBzdWNjZXNzID0gMDsKLSAgICByZXR1 cm4oc3VjY2Vzcyk7Ci19Ci0KLXN0YXRpYyBpbnQKLWRvZnRwcmVuKCkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSRU5BTUUgKi8KLSAgICBpbnQgeDsKLSAgICBjaGFyICogczsKLSAg ICBpZiAoKHggPSBjbWZsZCgiUmVtb3RlIGZpbGVuYW1lIiwiIiwmcyx4eHN0cmluZykpIDwgMCkK LSAgICAgIHJldHVybih4KTsKLSAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAg aWYgKCh4ID0gY21mbGQoIk5ldyBuYW1lIGZvciByZW1vdGUgZmlsZSIsIiIsJnMseHhzdHJpbmcp KSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJ Wik7Ci0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotICAgIENI RUNLQ09OTigpOwotICAgIGlmICh0ZXN0aW5nKQotICAgICAgcHJpbnRmKCIgZnRwIHJlbmFtZSBc IiVzXCIgKHRvKSBcIiVzXCIuLi5cbiIsbGluZSx0bXBidWYpOwotICAgIHN1Y2Nlc3MgPSBmdHBf cmVuYW1lKGxpbmUsdG1wYnVmKTsKLSAgICByZXR1cm4oc3VjY2Vzcyk7Ci19Ci0KLWludAotZG9m dHByZXMoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFU0VUIChsb2cgb3V0IHdp dGhvdXQgY2xvc2UpICovCi0gICAgaW50IHg7Ci0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQot ICAgICAgcmV0dXJuKHgpOwotICAgIENIRUNLQ09OTigpOwotICAgIGlmICh0ZXN0aW5nKQotICAg ICAgcHJpbnRmKCIgZnRwIHJlc2V0Li4uXG4iKTsKLSAgICByZXR1cm4oc3VjY2VzcyA9IGZ0cF9y ZXNldCgpKTsKLX0KLQotc3RhdGljIGludAotZG9mdHB4aGxwKCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEhFTFAgKi8KLSAgICBpbnQgeDsKLSAgICBjaGFyICogczsKLSAgICBpZiAo KHggPSBjbXR4dCgiQ29tbWFuZCBuYW1lIiwgIiIsICZzLCB4eHN0cmluZykpIDwgMCkKLSAgICAg IHJldHVybih4KTsKLSAgICBDSEVDS0NPTk4oKTsKLSAgICBja3N0cm5jcHkobGluZSxzLExJTkJV RlNJWik7Ci0gICAgaWYgKHRlc3RpbmcpCi0gICAgICBwcmludGYoIiBmdHAgaGVscCBcIiVzXCIu Li5cbiIsbGluZSk7Ci0gICAgLyogTm8gbmVlZCB0byB0cmFuc2xhdGUgLS0gYWxsIEZUUCBjb21t YW5kcyBhcmUgQVNDSUkgKi8KLSAgICByZXR1cm4oc3VjY2VzcyA9IChmdHBjbWQoIkhFTFAiLGxp bmUsMCwwLDEpID09IFJFUExZX0NPTVBMRVRFKSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWRvZnRwZGly KGN4KSBpbnQgY3g7IHsgICAgICAgICAgICAgICAgICAvKiBbVl1ESVJFQ1RPUlkgKi8KLSAgICBp bnQgeCwgbGNzID0gMCwgcmNzID0gMCwgeGxhdGUgPSAwOwotICAgIGNoYXIgKiBwLCAqIHMsICog bSA9ICIiOwotICAgIGlmIChjeCA9PSBGVFBfVkRJKSB7Ci0gICAgICAgIHN3aXRjaCAoc2VydmVy dHlwZSkgewotICAgICAgICAgIGNhc2UgU1lTX1ZNUzoKLSAgICAgICAgICBjYXNlIFNZU19ET1M6 Ci0gICAgICAgICAgY2FzZSBTWVNfVE9QUzEwOgotICAgICAgICAgIGNhc2UgU1lTX1RPUFMyMDoK LSAgICAgICAgICAgIG0gPSAiKi4qIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRl ZmF1bHQ6Ci0gICAgICAgICAgICBtID0gIioiOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgo eCA9IGNtdHh0KCJSZW1vdGUgZmlsZXNwZWMiLG0sJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICBy ZXR1cm4oeCk7Ci0gICAgaWYgKCh4ID0gcmVtdHh0KCZzKSkgPCAwKQotICAgICAgcmV0dXJuKHgp OwotI2lmZGVmIE5PQ1NFVFMKLSAgICB4bGF0ZSA9IDA7Ci0jZWxzZQotICAgIHhsYXRlID0gZnRw X3hsYTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgbGluZVswXSA9IE5VTDsKLSAgICBja3N0 cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgcyA9IGxpbmU7Ci0gICAgQ0hFQ0tDT05OKCk7 Ci0KLSNpZm5kZWYgTk9DU0VUUwotICAgIGlmICh4bGF0ZSkgeyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNFVCBGVFAgQ0hBUkFDVEVSLVNFVC1UUkFOU0xBVElPTiAqLwotICAgICAgICBsY3Mg PSBmdHBfY3NsOyAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGNoYXJzZXQgKi8KLSAgICAgICAg aWYgKGxjcyA8IDApIGxjcyA9IGZjaGFyc2V0OwotICAgICAgICBpZiAobGNzIDwgMCkgeGxhdGUg PSAwOwotICAgIH0KLSAgICBpZiAoeGxhdGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBT dGlsbCBPTj8gKi8KLSAgICAgICAgcmNzID0gZnRwX2NzeDsgICAgICAgICAgICAgICAgICAvKiBS ZW1vdGUgKFNlcnZlcikgY2hhcnNldCAqLwotICAgICAgICBpZiAocmNzIDwgMCkgcmNzID0gZnRw X2NzcjsKLSAgICAgICAgaWYgKHJjcyA8IDApIHhsYXRlID0gMDsKLSAgICB9Ci0jZW5kaWYgLyog Tk9DU0VUUyAqLwotCi0gICAgaWYgKHRlc3RpbmcpIHsKLSAgICAgICAgcCA9IHM7Ci0gICAgICAg IGlmICghcCkgcCA9ICIiOwotICAgICAgICBpZiAoKnApCi0gICAgICAgICAgcHJpbnRmKCJEaXJl Y3Rvcnkgb2YgZmlsZXMgJXMgYXQgJXM6XG4iLCBsaW5lLCBmdHBfaG9zdCk7Ci0gICAgICAgIGVs c2UKLSAgICAgICAgICBwcmludGYoIkRpcmVjdG9yeSBvZiBmaWxlcyBhdCAlczpcbiIsIGZ0cF9o b3N0KTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwiZG9mdHBkaXIiLHMsY3gpOwotCi0gICAgaWYg KGN4ID09IEZUUF9ESVIpIHsKLSAgICAgICAgLyogVHJhbnNsYXRpb24gb2YgbGluZVtdIGlzIGRv bmUgaW5zaWRlIHJlY3ZyZXF1ZXN0KCkgKi8KLSAgICAgICAgLyogd2hlbiBpdCBjYWxscyBmdHBj bWQoKS4gKi8KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPQotICAgICAgICAgIChyZWN2cmVxdWVz dCgiTElTVCIsIi0iLHMsIndiIiwwLDAsTlVMTCx4bGF0ZSxsY3MscmNzKSA9PSAwKSk7Ci0gICAg fQotICAgIHN1Y2Nlc3MgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZESVIgLSBvbmUg ZmlsZSBhdCBhIHRpbWUuLi4gKi8KLSAgICBwID0gKGNoYXIgKilyZW1vdGVfZmlsZXMoMSwoQ0hB UiAqKXMsTlVMTCwwKTsgLyogR2V0IHRoZSBmaWxlIGxpc3QgKi8KLSAgICBjYW5jZWxncm91cCA9 IDA7Ci0gICAgaWYgKCFmdHBfdmJtICYmICFxdWlldCkKLSAgICAgIHByaW50bGluZXMgPSAxOwot ICAgIHdoaWxlIChwICYmICFjYW5jZWxmaWxlICYmICFjYW5jZWxncm91cCkgeyAvKiBTVEFUIG9u ZSBmaWxlICovCi0gICAgICAgIGlmIChmdHBjbWQoIlNUQVQiLHAsbGNzLHJjcyxmdHBfdmJtKSA8 IDApIHsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIH0KLSAgICAgICAgcCA9IChjaGFyICopcmVtb3RlX2ZpbGVzKDAsTlVMTCxOVUxMLDApOyAv KiBHZXQgbmV4dCBmaWxlICovCi0gICAgICAgIGRlYnVnKEYxMTAsImZ0cCB2ZGlyIGZpbGUiLHMs MCk7Ci0gICAgfQotICAgIHJldHVybihzdWNjZXNzKTsKLX0KLQotc3RhdGljIGludAotZG9mdHBw d2QoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBXRCAqLwotICAgIGludCB4LCBs Y3MgPSAtMSwgcmNzID0gLTE7Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICBpZiAoZnRwX3hsYSkgewot ICAgICAgICBsY3MgPSBmdHBfY3NsOwotICAgICAgICBpZiAobGNzIDwgMCkgbGNzID0gZmNoYXJz ZXQ7Ci0gICAgICAgIHJjcyA9IGZ0cF9jc3g7Ci0gICAgICAgIGlmIChyY3MgPCAwKSByY3MgPSBm dHBfY3NyOwotICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotICAgIENIRUNLQ09OTigpOwotICAgIGlmIChmdHBj bWQoIlBXRCIsTlVMTCxsY3MscmNzLDEpID09IFJFUExZX0NPTVBMRVRFKSB7Ci0gICAgICAgIHN1 Y2Nlc3MgPSAxOwotICAgIH0gZWxzZSBpZiAoZnRwY29kZSA9PSA1MDAgfHwgZnRwY29kZSA9PSA1 MDIpIHsKLSAgICAgICAgaWYgKGZ0cF9kZWIpCi0gICAgICAgICAgcHJpbnRmKCJQV0QgY29tbWFu ZCBub3QgcmVjb2duaXplZCwgdHJ5aW5nIFhQV0RcbiIpOwotICAgICAgICBzdWNjZXNzID0gKGZ0 cGNtZCgiWFBXRCIsTlVMTCxsY3MscmNzLDEpID09IFJFUExZX0NPTVBMRVRFKTsKLSAgICB9Ci0g ICAgcmV0dXJuKHN1Y2Nlc3MpOwotfQotCi1zdGF0aWMgaW50Ci1kb2Z0cGN3ZChzLHZibSkgY2hh ciAqIHM7IGludCB2Ym07IHsgICAgLyogQ0QgKENXRCkgKi8KLSAgICBpbnQgbGNzID0gLTEsIHJj cyA9IC0xOwotI2lmbmRlZiBOT0NTRVRTCi0gICAgaWYgKGZ0cF94bGEpIHsKLSAgICAgICAgbGNz ID0gZnRwX2NzbDsKLSAgICAgICAgaWYgKGxjcyA8IDApIGxjcyA9IGZjaGFyc2V0OwotICAgICAg ICByY3MgPSBmdHBfY3N4OwotICAgICAgICBpZiAocmNzIDwgMCkgcmNzID0gZnRwX2NzcjsKLSAg ICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0gICAgZGVidWcoRjExMCwiZnRwIGRvZnRwY3dk IixzLDApOwotICAgIGlmIChmdHBjbWQoIkNXRCIscyxsY3MscmNzLHZibSkgPT0gUkVQTFlfQ09N UExFVEUpCi0gICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIGlmIChmdHBjb2RlID09IDUw MCB8fCBmdHBjb2RlID09IDUwMikgewotICAgICAgICBpZiAoIXF1aWV0KQotICAgICAgICAgIHBy aW50ZigiQ1dEIGNvbW1hbmQgbm90IHJlY29nbml6ZWQsIHRyeWluZyBYQ1dEXG4iKTsKLSAgICAg ICAgaWYgKGZ0cGNtZCgiWENXRCIscyxsY3MscmNzLHZibSkgPT0gUkVQTFlfQ09NUExFVEUpCi0g ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3Mg PSAwKTsKLX0KLQotc3RhdGljIGludAotZG9mdHBjZHVwKCkgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIENEVVAgKi8KLSAgICBkZWJ1ZyhGMTAwLCJmdHAgZG9mdHBjZHVwIiwiIiwwKTsK LSAgICBpZiAoZnRwY21kKCJDRFVQIixOVUxMLDAsMCwxKSA9PSBSRVBMWV9DT01QTEVURSkKLSAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgaWYgKGZ0cGNvZGUgPT0gNTAwIHx8IGZ0cGNv ZGUgPT0gNTAyKSB7Ci0gICAgICAgIGlmICghcXVpZXQpCi0gICAgICAgICAgcHJpbnRmKCJDRFVQ IGNvbW1hbmQgbm90IHJlY29nbml6ZWQsIHRyeWluZyBYQ1VQXG4iKTsKLSAgICAgICAgaWYgKGZ0 cGNtZCgiWENVUCIsTlVMTCwwLDAsMSkgPT0gUkVQTFlfQ09NUExFVEUpCi0gICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLX0KLQot LyogcyB5IG4gYyBkIGkgciAgLS0gIFN5bmNocm9uaXplcyBjbGllbnQgJiBzZXJ2ZXIgZGlyZWN0 b3JpZXMgKi8KLQotLyoKLSAgQ2FsbCB3aXRoOgotICAgIGxvY2FsID0gcG9pbnRlciB0byBwYXRo bmFtZSBvZiBsb2NhbCBmaWxlIHRvIGJlIHNlbnQuCi0gICAgc2ltICAgPSAxIGZvciBzaW11bGF0 aW9uLCAwIGZvciByZWFsIHVwbG9hZGluZy4KLSAgUmV0dXJucyAwIG9uIGZhaWx1cmUsIDEgb24g c3VjY2Vzcy4KLQotICBUaGUgJ2xvY2FsJyBhcmd1bWVudCBpcyByZWxhdGl2ZSB0byB0aGUgaW5p dGlhbCBkaXJlY3Rvcnkgb2YgdGhlIE1QVVQsCi0gIGkuZS4gdGhlIHJvb3Qgb2YgdGhlIHRyZWUg YmVpbmcgdXBsb2FkZWQuICBJZiB0aGUgZGlyZWN0b3J5IG9mIHRoZQotICBhcmd1bWVudCBmaWxl IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIHByZXZpb3VzIGZpbGUKLSAg KHdoaWNoIGlzIHN0b3JlZCBpbiBnbG9iYWwgcHV0cGF0aFtdKSwgdGhpcyByb3V0aW5lIGRvZXMg dGhlIGFwcHJvcHJpYXRlCi0gIENXRHMsIENEVVBzLCBhbmQvb3IgTUtESVJzIHRvIHBvc2l0aW9u IHRoZSBGVFAgc2VydmVyIGluIHRoZSBzYW1lIHBsYWNlLgotKi8KLXN0YXRpYyBpbnQgY2RsZXZl bCA9IDAsIGNkc2ltbHZsID0gMDsJLyogVHJlZS1sZXZlbCB0cmFja2VycyAqLwotCi1zdGF0aWMg aW50Ci1zeW5jZGlyKGxvY2FsLHNpbSkgY2hhciAqIGxvY2FsOyBpbnQgc2ltOyB7Ci0gICAgY2hh ciBidWZbQ0tNQVhQQVRIKzFdOwotICAgIGNoYXIgdG1wW0NLTUFYUEFUSCsxXTsKLSAgICBjaGFy IG1zZ2J1ZltDS01BWFBBVEgrNjRdOwotICAgIGNoYXIgYywgKiBwID0gbG9jYWwsICogcyA9IGJ1 ZiwgKiBxID0gYnVmLCAqIHBzZXAsICogc3NlcDsKLSAgICBpbnQgaSwgayA9IDAsIGRvbmUgPSAw LCBpdHNhZGlyID0gMCwgc2F2ZXE7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJmdHAgc3luY2RpciBsb2Nh bCAobmV3KSIsbG9jYWwsMCk7Ci0gICAgZGVidWcoRjExMCwiZnRwIHN5bmNkaXIgcHV0cGF0aCAo b2xkKSIscHV0cGF0aCwwKTsKLQotICAgIGl0c2FkaXIgPSBpc2Rpcihsb2NhbCk7CQkvKiBJcyB0 aGUgbG9jYWwgZmlsZSBhIGRpcmVjdG9yeT8gKi8KLSAgICBzYXZlcSA9IHF1aWV0OwotCi0gICAg d2hpbGUgKCgqcyA9ICpwKSkgeyAgICAgICAgICAgICAgICAgLyogQ29weSB0aGUgYXJndW1lbnQg ZmlsZW5hbWUgKi8KLSAgICAgICAgaWYgKCsrayA9PSBDS01BWFBBVEgpICAgICAgICAgICAvKiBz byB3ZSBjYW4gcG9rZSBpdC4gKi8KLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBpZiAo KnMgPT0gJy8nKSAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gcmlnaHRtb3N0IGRpcnNl cCAqLwotICAgICAgICAgIHEgPSBzOwotICAgICAgICBzKys7Ci0gICAgICAgIHArKzsKLSAgICB9 Ci0gICAgaWYgKCFpdHNhZGlyKQkJCS8qIElmIGl0J3MgYSByZWd1bGFyIGZpbGUgKi8KLSAgICAg ICpxID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBrZWVwIGp1c3QgdGhlIHBhdGgg cGFydCAqLwotCi0gICAgZGVidWcoRjExMCwiZnRwIHN5bmNkaXIgYnVmIixidWYsMCk7Ci0gICAg aWYgKCFzdHJjbXAoYnVmLHB1dHBhdGgpKSB7ICAgICAgICAgLyogU2FtZSBwYXRoIGFzIHByZXZp b3VzIGZpbGU/ICovCi0gICAgICAgIGlmIChpdHNhZGlyKSB7ICAgICAgICAgICAgICAgICAgLyog VGhpcyBmaWxlIGlzIGEgZGlyZWN0b3J5PyAqLwotICAgICAgICAgICAgaWYgKGRvZnRwY3dkKGxv Y2FsLDApKSB7ICAgIC8qIFRyeSB0byBDRCB0byBpdCAqLwotICAgICAgICAgICAgICAgIGRvZnRw Y2R1cCgpOyAgICAgICAgICAgIC8qIFdvcmtlZCAtIENEIGJhY2sgdXAgKi8KLSAgICAgICAgICAg IH0gZWxzZSBpZiAoc2ltKSB7ICAgICAgICAgICAvKiBTaW11bGF0aW5nLi4uICovCi0gICAgICAg ICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBy aW50ZigiV09VTEQgQ1JFQVRFIERJUkVDVE9SWSAlc1xuIixsb2NhbCk7Ci0gICAgICAgICAgICAg ICAgfSBlbHNlIGlmIChmZGlzcGxhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKG1z Z2J1ZixDS01BWFBBVEgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXT1VMRCBDUkVB VEUgRElSRUNUT1JZIixsb2NhbCxOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgICAgICBmdHNj cmVlbihTQ1JfU1QsU1RfTVNHLChDS19PRkZfVCkwLG1zZ2J1Zik7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIC8qIFNlZSBub3RlIGFib3ZlICovCi0gICAgICAgICAgICAgICAg cmV0dXJuKDApOwotICAgICAgICAgICAgfSBlbHNlIGlmICghZG9mdHB4bWtkKGxvY2FsLDApKSB7 IC8qIENhbid0IENEIC0gdHJ5IHRvIGNyZWF0ZSAqLwotICAgICAgICAgICAgICAgIHJldHVybigw KTsKLSAgICAgICAgICAgIH0gZWxzZSB7CQkJLyogUmVtb3RlIGRpcmVjdG9yeSBjcmVhdGVkIE9L ICovCi0gICAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0gICAgICAgICAg ICAgICAgICAgIHByaW50ZigiQ1JFQVRFRCBESVJFQ1RPUlkgJXNcbiIsbG9jYWwpOwotICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoZmRpc3BsYSkgewotICAgICAgICAgICAgICAgICAgICBja21h a21zZyhtc2didWYsQ0tNQVhQQVRIKzY0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi Q1JFQVRFRCBESVJFQ1RPUlkgIixsb2NhbCxOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgICAg ICBmdHNjcmVlbihTQ1JfU1QsU1RfTVNHLChDS19PRkZfVCkwLG1zZ2J1Zik7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMTAsImZ0 cCBzeW5jZGlyIG5vIGNoYW5nZSIsYnVmLDApOwotICAgICAgICByZXR1cm4oMSk7ICAgICAgICAg ICAgICAgICAgICAgIC8qIFllcywgZG9uZS4gKi8KLSAgICB9Ci0gICAgY2tzdHJuY3B5KHRtcCxi dWYsQ0tNQVhQQVRIKzEpOyAgICAgLyogTWFrZSBhIHNhZmUgKHByZS1wb2tlZCkgY29weSAqLwot ICAgIGRlYnVnKEYxMTAsImZ0cCBzeW5jZGlyIG5ldyBwYXRoIixidWYsMCk7IC8qIGZvciBsYXRl ciAoc2VlIGVuZCkgKi8KLQotICAgIHAgPSBidWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE5ldyAqLwotICAgIHMgPSBwdXRwYXRoOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9s ZCAqLwotCi0gICAgZGVidWcoRjExMCwiZnRwIHN5bmNkaXIgQSAob2xkKSBzIixzLDApOyAvKiBQ cmV2aW91cyAqLwotICAgIGRlYnVnKEYxMTAsImZ0cCBzeW5jZGlyIEEgKG5ldykgcCIscCwwKTsg LyogTmV3ICovCi0KLSAgICBwc2VwID0gYnVmOwotICAgIHNzZXAgPSBwdXRwYXRoOwotICAgIHdo aWxlICgqcCAhPSBOVUwgJiYgKnMgIT0gTlVMICYmICpwID09ICpzKSB7Ci0JaWYgKCpwID09ICcv JykgeyBwc2VwID0gcCsxOyBzc2VwID0gcysxOyB9Ci0JcCsrLHMrKzsKLSAgICB9Ci0gICAgLyoK LSAgICAgIHBzZXAgYW5kIHNzZXAgcG9pbnQgdG8gdGhlIGZpcnN0IHBhdGggc2VnbWVudCB0aGF0 IGRpZmZlcnMuCi0gICAgICBXZSBoYXZlIHRvIGRvIGFzIG1hbnkgQ0RVUHMgYXMgdGhlcmUgYXJl IHBhdGggc2VnbWVudHMgaW4gc3NlcC4KLSAgICAgIHRoZW4gd2UgaGF2ZSB0byBkbyBhcyBtYW55 IE1LRHMgYW5kIENXRHMgYXMgdGhlcmUgYXJlIHNlZ21lbnRzIGluIHBzZXAuCi0gICAgKi8KLSAg ICBzID0gc3NlcDsKLSAgICBwID0gcHNlcDsKLQotICAgIGRlYnVnKEYxMTAsImZ0cCBzeW5jZGly IEIgKG9sZCkgcyIscywwKTsgLyogUHJldmlvdXMgKi8KLSAgICBkZWJ1ZyhGMTEwLCJmdHAgc3lu Y2RpciBCIChuZXcpIHAiLHAsMCk7IC8qIE5ldyAqLwotCi0gICAgLyogcCBhbmQgcyBub3cgcG9p bnQgdG8gdGhlIGxlZnRtb3N0IHNwb3Qgd2hlcmUgdGhlIHBhdGhzIGRpZmZlciAqLwotCi0gICAg aWYgKCpzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2UgaGF2ZSB0byBiYWNrIHVw ICovCi0gICAgICAgIGsgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSG93IG1hbnkg bGV2ZWxzIGNvdW50aW5nIHRoaXMgb25lICovCi0gICAgICAgIHdoaWxlICgoYyA9ICpzKyspKSB7 ICAgICAgICAgICAgLyogQ291bnQgZGlyc2VwcyByZW1haW5pbmcgaW4gcHJldiAqLwotICAgICAg ICAgICAgaWYgKGMgPT0gJy8nICYmICpzKQotICAgICAgICAgICAgICBrKys7Ci0gICAgICAgIH0K LQlkZWJ1ZyhGMTAxLCJmdHAgc3luY2RpciBsZXZlbHMgdXAiLCIiLGspOwotCi0gICAgICAgIGZv ciAoaSA9IDE7IGkgPD0gazsgaSsrKSB7ICAgICAgIC8qIERvIHRoYXQgbWFueSBDRFVQcyAqLwot ICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIHN5bmNkaXIgQ0RVUCBBIixwLGkpOwotCSAgICBp ZiAoZmRpc3BsYSA9PSBYWUZEX0IpCi0JICAgICAgcHJpbnRmKCIgQ0RVUFxuIik7Ci0gICAgICAg ICAgICBpZiAoc2ltICYmIGNkc2ltbHZsKSB7Ci0gICAgICAgICAgICAgICAgY2RzaW1sdmwtLTsK LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFkb2Z0cGNkdXAoKSkg ewotICAgICAgICAgICAgICAgICAgICBxdWlldCA9IHNhdmVxOwotICAgICAgICAgICAgICAgICAg ICByZXR1cm4oMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg ICAgY2RsZXZlbC0tOwotICAgICAgICB9Ci0gICAgICAgIGlmICghKnApICAgICAgICAgICAgICAg ICAgICAgICAgLyogSWYgd2UgZG9uJ3QgaGF2ZSB0byBnbyBkb3duICovCi0gICAgICAgICAgZ290 byB4Y3dkOyAgICAgICAgICAgICAgICAgICAgLyogd2UncmUgZG9uZS4gKi8KLSAgICB9Ci0jaWZk ZWYgQ09NTUVOVAotICAgIHdoaWxlIChwID4gYnVmICYmICpwICYmICpwICE9ICcvJykgIC8qIElm IGluIG1pZGRsZSBvZiBzZWdtZW50ICovCi0gICAgICBwLS07ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogYmFjayB1cCB0byBiZWdpbm5pbmcgKi8KLSAgICBpZiAoKnAgPT0gJy8nKSAg ICAgICAgICAgICAgICAgICAgICAvKiBhbmQgdGVybWluYXRlIHRoZXJlICovCi0gICAgICBwKys7 Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCi0gICAgZGVidWcoRjExMCwiZnRwIHN5bmNkaXIgTkVX IFBBVEgiLHAsMCk7Ci0KLSAgICBzID0gcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQb2ludCB0byBzdGFydCBvZiBuZXcgZG93biBwYXRoLiAqLwotICAgIHdoaWxlICgxKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIExvb3AgdGhyb3VnaCBjaGFyYWN0ZXJzLiAqLwotICAg ICAgICBpZiAoKnMgPT0gJy8nIHx8ICEqcykgeyAgICAgICAgIC8qIEhhdmUgYSBzZWdtZW50LiAq LwotICAgICAgICAgICAgaWYgKCEqcykgICAgICAgICAgICAgICAgICAgIC8qIElmIGVuZCBvZiBz dHJpbmcsICovCi0gICAgICAgICAgICAgIGRvbmUrKzsgICAgICAgICAgICAgICAgICAgLyogYWZ0 ZXIgdGhpcyBzZWdtZW50IHdlJ3JlIGRvbmUuICovCi0gICAgICAgICAgICBlbHNlCi0gICAgICAg ICAgICAgICpzID0gTlVMOyAgICAgICAgICAgICAgICAgLyogTlVMIG91dCB0aGUgc2VwYXJhdG9y LiAqLwotICAgICAgICAgICAgaWYgKCpwKSB7ICAgICAgICAgICAgICAgICAgIC8qIElmIHNlZ21l bnQgaXMgbm90IGVtcHR5ICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHN5bmNk aXIgZG93biBzZWdtZW50IixwLDApOwotICAgICAgICAgICAgICAgIGlmICghZG9mdHBjd2QocCww KSkgeyAgIC8qIFRyeSB0byBDRCB0byBpdCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoc2lt KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBXT1VMRCBDUkVBVEUgRElSRUNUT1JZ ICVzXG4iLGxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmRpc3Bs YSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKG1zZ2J1ZixDS01BWFBB VEgsCi0JCQkJICAgICAiV09VTEQgQ1JFQVRFIERJUkVDVE9SWSIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbG9jYWwsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfTVNHLChDS19PRkZfVCkwLG1zZ2J1Zik7Ci0g ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjZHNpbWx2 bCsrOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCFkb2Z0cHhta2QocCwwKSkgeyAvKiBDYW4ndCBDRCAtIHRyeSB0byBjcmVhdGUgKi8K LQkJCSAgICBkZWJ1ZyhGMTEwLCJmdHAgc3luY2RpciBta2RpciBmYWlsZWQiLHAsMCk7IAotLyoK LSAgU3VwcG9zZSB3ZSBhcmUgZXhlY3V0aW5nIFNFTkQgL1JFQ1VSU0lWRS4gIExvY2FsbHkgd2Ug aGF2ZSBhIGRpcmVjdG9yeQotICBGT08gYnV0IHRoZSByZW1vdGUgaGFzIGEgcmVndWxhciBmaWxl IHdpdGggdGhlIHNhbWUgbmFtZS4gIFdlIGNhbid0IENECi0gIHRvIGl0LCBjYW4ndCBNS0RJUiBp dCBlaXRoZXIuICBUaGVyZSdzIG5vIHdheSBvdXQgYnV0IHRvIGZhaWwgYW5kIGxldAotICB0aGUg dXNlciBoYW5kbGUgdGhlIHByb2JsZW0uCi0qLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHF1aWV0ID0gc2F2ZXE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwot ICAgICAgICAgICAgICAgICAgICAgICAgfQotCQkJZGVidWcoRjExMCwiZnRwIHN5bmNkaXIgbWtk aXIgT0siLHAsMCk7IAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlG RF9CKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgQ1JFQVRFRCBESVJF Q1RPUlkgJXNcbiIscCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZkaXNw bGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhtc2didWYsQ0tNQVhQ QVRILAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDUkVBVEVEIERJUkVD VE9SWSAiLHAsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHNjcmVl bihTQ1JfU1QsU1RfTVNHLChDS19PRkZfVCkwLG1zZ2J1Zik7Ci0gICAgICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRvZnRwY3dkKHAsMCkpIHsgLyog VHJ5IGFnYWluIHRvIENEICovCi0JCQkgICAgZGVidWcoRjExMCwiZnRwIHN5bmNkaXIgQ0QgZmFp bGVkIixwLDApOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWlldCA9IHNhdmVxOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikg cHJpbnRmKCIgQ1dEICVzXG4iLHApOwotCQkJZGVidWcoRjExMCwiZnRwIHN5bmNkaXIgQ0QgT0si LHAsMCk7IAotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGNkbGV2ZWwrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkb25l KSAgICAgICAgICAgICAgICAgICAvKiBRdWl0IGlmIG5vIG5leHQgc2VnbWVudCAqLwotICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHAgPSBzKzE7ICAgICAgICAgICAgICAgICAgICAv KiBQb2ludCB0byBuZXh0IHNlZ21lbnQgKi8KLSAgICAgICAgfQotICAgICAgICBzKys7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIG5leHQgc291cmNlIGNoYXIgKi8KLSAg ICB9Ci0KLSAgeGN3ZDoKLSAgICBja3N0cm5jcHkocHV0cGF0aCx0bXAsQ0tNQVhQQVRIKzEpOyAv KiBBbGwgT0sgLSBtYWtlIHRoaXMgdGhlIG5ldyBwYXRoICovCi0gICAgcXVpZXQgPSBzYXZlcTsK LSAgICByZXR1cm4oMSk7Ci19Ci0KLSNpZmRlZiBET1VQREFURQotI2lmZGVmIERFQlVHCi1zdGF0 aWMgVk9JRAotZGJ0aW1lKHMseHgpIGNoYXIgKiBzOyBzdHJ1Y3QgdG0gKiB4eDsgeyAvKiBXcml0 ZSBzdHJ1Y3QgdG0gdG8gZGVidWcgbG9nICovCi0gICAgaWYgKGRlYmxvZykgewotICAgICAgICBk ZWJ1ZyhGMTExLCJmdHAgeWVhciAiLHMseHgtPnRtX3llYXIpOwotICAgICAgICBkZWJ1ZyhGMTEx LCJmdHAgbW9udGgiLHMseHgtPnRtX21vbik7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBkYXkg ICIscyx4eC0+dG1fbWRheSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBob3VyICIscyx4eC0+ dG1faG91cik7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBtaW4gICIscyx4eC0+dG1fbWluKTsK LSAgICAgICAgZGVidWcoRjExMSwiZnRwIHNlYyAgIixzLHh4LT50bV9zZWMpOwotICAgIH0KLX0K LSNlbmRpZiAvKiBERUJVRyAqLwotCi0vKiAgdCBtIGMgbyBtIHAgYSByIGUgIC0tICBDb21wYXJl IHR3byBzdHJ1Y3QgdG0ncyAqLwotCi0vKiAgTGlrZSBzdHJjbXAoKSBidXQgZm9yIHN0cnVjdCB0 bSdzICAqLwotLyogIFJldHVybnMgLTEgaWYgeHggPCB5eSwgMCBpZiB0aGV5IGFyZSBlcXVhbCwg MSBpZiB4eCA+IHl5ICovCi0KLXN0YXRpYyBpbnQKLXRtY29tcGFyZSh4eCx5eSkgc3RydWN0IHRt ICogeHgsICogeXk7IHsKLQotICAgIGlmICh4eC0+dG1feWVhciA8IHl5LT50bV95ZWFyKSAgICAg IC8qIEZpcnN0IHllYXIgbGVzcyB0aGFuIHNlY29uZCAqLwotICAgICAgcmV0dXJuKC0xKTsKLSAg ICBpZiAoeHgtPnRtX3llYXIgPiB5eS0+dG1feWVhcikgICAgICAvKiBGaXJzdCB5ZWFyIGdyZWF0 ZXIgdGhhbiBzZWNvbmQgKi8KLSAgICAgIHJldHVybigxKTsKLQotICAgIC8qIFllYXJzIGFyZSBl cXVhbCBzbyBjb21wYXJlIG1vbnRocyAqLwotCi0gICAgaWYgKHh4LT50bV9tb24gIDwgeXktPnRt X21vbikgICAgICAgLyogQW5kIHNvIG9uLi4uICovCi0gICAgICByZXR1cm4oLTEpOwotICAgIGlm ICh4eC0+dG1fbW9uICA+IHl5LT50bV9tb24pCi0gICAgICByZXR1cm4oMSk7Ci0KLSAgICBpZiAo eHgtPnRtX21kYXkgPCB5eS0+dG1fbWRheSkKLSAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKHh4 LT50bV9tZGF5ID4geXktPnRtX21kYXkpCi0gICAgICByZXR1cm4oMSk7Ci0KLSAgICBpZiAoeHgt PnRtX2hvdXIgPCB5eS0+dG1faG91cikKLSAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKHh4LT50 bV9ob3VyID4geXktPnRtX2hvdXIpCi0gICAgICByZXR1cm4oMSk7Ci0KLSAgICBpZiAoeHgtPnRt X21pbiAgPCB5eS0+dG1fbWluKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBpZiAoeHgtPnRtX21p biAgPiB5eS0+dG1fbWluKQotICAgICAgcmV0dXJuKDEpOwotCi0gICAgaWYgKHh4LT50bV9zZWMg IDwgeXktPnRtX3NlYykKLSAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKHh4LT50bV9zZWMgID4g eXktPnRtX3NlYykKLSAgICAgIHJldHVybigxKTsKLQotICAgIHJldHVybigwKTsKLX0KLSNlbmRp ZiAvKiBET1VQREFURSAqLwotCi0jaWZuZGVmIEhBVkVfVElNRUdNICAgICAgICAgICAgIC8qIEZv ciBwbGF0Zm9ybXMgdGhhdCBkbyBub3QgaGF2ZSB0aW1lZ20oKSAqLwotc3RhdGljIENPTlNUIGlu dCBNT05USERBWVNbXSA9IHsgLyogTnVtYmVyIG9mIGRheXMgaW4gZWFjaCBtb250aC4gKi8KLSAg ICAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxCi19OwotCi0v KiBNYWNybyBmb3Igd2hldGhlciBhIGdpdmVuIHllYXIgaXMgYSBsZWFwIHllYXIuICovCi0jZGVm aW5lIElTTEVBUCh5ZWFyKSBcCi0oKCh5ZWFyKSAlIDQpID09IDAgJiYgKCgoeWVhcikgJSAxMDAp ICE9IDAgfHwgKCh5ZWFyKSAlIDQwMCkgPT0gMCkpCi0jZW5kaWYgLyogSEFWRV9USU1FR00gKi8K LQotLyogIG0gayB1IHQgaSBtIGUgIC0tICBMaWtlIG1rdGltZSgpIGJ1dCBhcmd1bWVudCBpcyBh bHJlYWR5IFVUQyAqLwotCi1zdGF0aWMgdGltZV90Ci0jaWZkZWYgQ0tfQU5TSUMKLW1rdXRpbWUo c3RydWN0IHRtICogdG0pCi0jZWxzZQotbWt1dGltZSh0bSkgc3RydWN0IHRtICogdG07Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLS8qIG1rdXRpbWUgKi8gewotI2lmZGVmIEhBVkVfVElNRUdNCi0g ICAgcmV0dXJuKHRpbWVnbSh0bSkpOyAgICAgICAgICAgICAgICAgLyogSGF2ZSBzeXN0ZW0gc2Vy dmljZSwgdXNlIGl0LiAqLwotI2Vsc2UKLS8qCi0gIENvbnRyaWJ1dGVkIGJ5IFJ1c3MgQWxsYmVy eSAocnJhQHN0YW5mb3JkLmVkdSksIHVzZWQgYnkgcGVybWlzc2lvbi4KLSAgR2l2ZW4gYSBzdHJ1 Y3QgdG0gcmVwcmVzZW50aW5nIGEgY2FsZW5kYXIgdGltZSBpbiBVVEMsIGNvbnZlcnQgaXQgdG8K LSAgc2Vjb25kcyBzaW5jZSBlcG9jaC4gIFJldHVybnMgKHRpbWVfdCkgLTEgaWYgdGhlIHRpbWUg aXMgbm90Ci0gIGNvbnZlcnRhYmxlLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3Qg Y2Fub25pY2FsaXplIHRoZSBwcm92aWRlZAotICBzdHJ1Y3QgdG0sIG5vciBkb2VzIGl0IGFsbG93 IG91dC1vZi1yYW5nZSB2YWx1ZXMgb3IgeWVhcnMgYmVmb3JlIDE5NzAuCi0gIFJlc3VsdCBzaG91 bGQgYmUgaWRlbnRpY2FsIHdpdGggdGltZWdtKCkuCi0qLwotICAgIHRpbWVfdCByZXN1bHQgPSAw OwotICAgIGludCBpOwotICAgIC8qCi0gICAgICBXZSBkbyBhbGxvdyBzb21lIGlsbC1mb3JtZWQg ZGF0ZXMsIGJ1dCB3ZSBkb24ndCBkbyBhbnl0aGluZyBzcGVjaWFsCi0gICAgICB3aXRoIHRoZW0g YW5kIG91ciBjYWxsZXJzIHJlYWxseSBzaG91bGRuJ3QgcGFzcyB0aGVtIHRvIHVzLiAgRG8KLSAg ICAgIGV4cGxpY2l0bHkgZGlzYWxsb3cgdGhlIG9uZXMgdGhhdCB3b3VsZCBjYXVzZSBpbnZhbGlk IGFycmF5IGFjY2Vzc2VzCi0gICAgICBvciBvdGhlciBhbGdvcml0aG0gcHJvYmxlbXMuCi0gICAg Ki8KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgZGVidWcoRjEwMSwi bWt1dGltZSB0bV9tb24iLCIiLHRtLT50bV9tb24pOwotICAgICAgICBkZWJ1ZyhGMTAxLCJta3V0 aW1lIHRtX3llYXIiLCIiLHRtLT50bV95ZWFyKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8K LSAgICBpZiAodG0tPnRtX21vbiA8IDAgfHwgdG0tPnRtX21vbiA+IDExIHx8IHRtLT50bV95ZWFy IDwgNzApCi0gICAgICByZXR1cm4oKHRpbWVfdCkgLTEpOwotCi0gICAgLyogQ29udmVydCB0byB0 aW1lX3QuICovCi0gICAgZm9yIChpID0gMTk3MDsgaSA8IHRtLT50bV95ZWFyICsgMTkwMDsgaSsr KQotICAgICAgcmVzdWx0ICs9IDM2NSArIElTTEVBUChpKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwg dG0tPnRtX21vbjsgaSsrKQotICAgICAgcmVzdWx0ICs9IE1PTlRIREFZU1tpXTsKLSAgICBpZiAo dG0tPnRtX21vbiA+IDEgJiYgSVNMRUFQKHRtLT50bV95ZWFyICsgMTkwMCkpCi0gICAgICByZXN1 bHQrKzsKLSAgICByZXN1bHQgPSAyNCAqIChyZXN1bHQgKyB0bS0+dG1fbWRheSAtIDEpICsgdG0t PnRtX2hvdXI7Ci0gICAgcmVzdWx0ID0gNjAgKiByZXN1bHQgKyB0bS0+dG1fbWluOwotICAgIHJl c3VsdCA9IDYwICogcmVzdWx0ICsgdG0tPnRtX3NlYzsKLSAgICBkZWJ1ZyhGMTAxLCJta3V0aW1l IHJlc3VsdCIsIiIscmVzdWx0KTsKLSAgICByZXR1cm4ocmVzdWx0KTsKLSNlbmRpZiAvKiBIQVZF X1RJTUVHTSAqLwotfQotCi0KLS8qCi0gIHMgZSB0IG0gbyBkIHQgaSBtIGUgIC0tICBTZXQgZmls ZSBtb2RpZmljYXRpb24gdGltZS4KLQotICBmID0gY2hhciAqIGZpbGVuYW1lOwotICB0ID0gdGlt ZV90IGRhdGUvdGltZSB0byBzZXQgKFNlY3Mgc2luY2UgMTk3MDAxMDEgMDowMDowMCBVVEMsIE5P VCBsb2NhbCkKLQotICBVTklYLXNwZWNpZmljOyBpc29sYXRlcyBtYWlubGluZSBjb2RlIGZyb20g aGlkZW91cyAjaWZkZWZzLgotICBSZXR1cm5zOgotICAgIDAgb24gc3VjY2VzcywKLSAgIC0xIG9u IGVycm9yLgotCi0qLwotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1zZXRtb2R0aW1lKGNo YXIgKiBmLCB0aW1lX3QgdCkKLSNlbHNlCi1zZXRtb2R0aW1lKGYsdCkgY2hhciAqIGY7IHRpbWVf dCB0OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBzZXRtb2R0aW1lICovIHsKLSNpZmRlZiBO VAotICAgIHN0cnVjdCBfc3RhdCBzYjsKLSNlbHNlIC8qIE5UICovCi0gICAgc3RydWN0IHN0YXQg c2I7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICBpbnQgeCwgcmMgPSAwOwotI2lmZGVmIEJTRDQ0Ci0g ICAgc3RydWN0IHRpbWV2YWwgdHBbMl07Ci0jZWxzZSAgLyogZGVmIEJTRDQ0ICovCi0jaWZkZWYg VjcKLSAgICBzdHJ1Y3QgdXRpbWJ1ZiB7Ci0gICAgICAgIHRpbWVfdCB0aW1lcFsyXTsKLSAgICB9 IHRwOwotI2Vsc2UgIC8qIGRlZiBWNyAqLwotI2lmZGVmIFNZU1VUSU1FSAotI2lmZGVmIE5UCi0g ICAgc3RydWN0IF91dGltYnVmIHRwOwotI2Vsc2UgLyogTlQgKi8KLSAgICBzdHJ1Y3QgdXRpbWJ1 ZiB0cDsKLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UgLyogZGVmIFNZU1VUSU1FSCAqLwotI2lmZGVm IFZNUwotICAgIHN0cnVjdCB1dGltYnVmIHRwOwotI2RlZmluZSBTWVNVVElNRUggICAgICAgICAg ICAgICAvKiBPdXIgdXRpbWJ1ZiBtYXRjaGVzIHRoaXMgb25lLiAqLwotI2Vsc2UgLyogZGVmIFZN UyAqLwotICAgIHN0cnVjdCB1dGltYnVmIHsKLSAgICAgICAgdGltZV90IGF0aW1lOwotICAgICAg ICB0aW1lX3QgbXRpbWU7Ci0gICAgfSB0cDsKLSNlbmRpZiAvKiBkZWYgVk1TIFtlbHNlXSAqLwot I2VuZGlmIC8qIGRlZiBTWVNVVElNRUggW2Vsc2VdICovCi0jZW5kaWYgLyogZGVmIFY3IFtlbHNl XSAqLwotI2VuZGlmIC8qIGRlZiBCU0Q0NCBbZWxzZV0gKi8KLQotICAgIGlmIChzdGF0KGYsJnNi KSA8IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwic2V0bW9kdGltZSBzdGF0IGZhaWx1cmUiLGYs ZXJybm8pOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSNpZmRlZiBCU0Q0NAotICAgIHRw WzBdLnR2X3NlYyA9IHNiLnN0X2F0aW1lOyAgICAgICAgIC8qIEFjY2VzcyB0aW1lIGZpcnN0ICov Ci0gICAgdHBbMV0udHZfc2VjID0gdDsgICAgICAgICAgICAgICAgICAgLyogVXBkYXRlIHRpbWUg c2Vjb25kICovCi0gICAgZGVidWcoRjExMSwic2V0bW9kdGltZSBCU0Q0NCIsZix0KTsKLSNlbHNl Ci0jaWZkZWYgVjcKLSAgICB0cC50aW1lcFswXSA9IHQ7ICAgICAgICAgICAgICAgICAgICAvKiBT ZXQgbW9kaWYuIHRpbWUgdG8gY3JlYXRpb24gZGF0ZSAqLwotICAgIHRwLnRpbWVwWzFdID0gc2Iu c3RfYXRpbWU7ICAgICAgICAgIC8qIERvbid0IGNoYW5nZSB0aGUgYWNjZXNzIHRpbWUgKi8KLSAg ICBkZWJ1ZyhGMTExLCJzZXRtb2R0aW1lIFY3IixmLHQpOwotI2Vsc2UKLSNpZmRlZiBTWVNVVElN RUgKLSAgICB0cC5tb2R0aW1lID0gdDsgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgbW9kaWYu IHRpbWUgdG8gY3JlYXRpb24gZGF0ZSAqLwotICAgIHRwLmFjdGltZSA9IHNiLnN0X2F0aW1lOyAg ICAgICAgICAgIC8qIERvbid0IGNoYW5nZSB0aGUgYWNjZXNzIHRpbWUgKi8KLSAgICBkZWJ1ZyhG MTExLCJzZXRtb2R0aW1lIFNZU1VUSU1FSCIsZix0KTsKLSNlbHNlCi0gICAgdHAubXRpbWUgPSB0 OyAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IG1vZGlmLiB0aW1lIHRvIGNyZWF0aW9uIGRh dGUgKi8KLSAgICB0cC5hdGltZSA9IHNiLnN0X2F0aW1lOyAgICAgICAgICAgICAvKiBEb24ndCBj aGFuZ2UgdGhlIGFjY2VzcyB0aW1lICovCi0gICAgZGVidWcoRjExMSwic2V0bW9kdGltZSAob3Ro ZXIpIixmLHQpOwotI2VuZGlmIC8qIFNZU1VUSU1FSCAqLwotI2VuZGlmIC8qIFY3ICovCi0jZW5k aWYgLyogQlNENDQgKi8KLQotICAgIC8qIFRyeSB0byBzZXQgdGhlIGZpbGUgZGF0ZSAqLwotCi0j aWZkZWYgQlNENDQKLSAgICB4ID0gdXRpbWVzKGYsdHApOwotICAgIGRlYnVnKEYxMTEsInNldG1v ZHRpbWUgdXRpbWVzKCkiLCJCU0Q0NCIseCk7Ci0jZWxzZQotI2lmZGVmIElSSVg2NQotICAgIHsK LSAgICAgIC8qCi0gICAgICAgIFRoZSBmb2xsb3dpbmcgcHJvZHVjZXMgdGhlIG5vbnNlbnNpY2Fs IHdhcm5pbmc6Ci0gICAgICAgIEFyZ3VtZW50ICBvZiB0eXBlICJjb25zdCBzdHJ1Y3QgdXRpbWJ1 ZiAqIiBpcyBpbmNvbXBhdGlibGUgd2l0aAotICAgICAgICBwYXJhbWV0ZXIgb2YgdHlwZSAiY29u c3Qgc3RydWN0IHV0aW1idWYgKiIuICBJZiB5b3UgY2FuIG1ha2UgaXQKLSAgICAgICAgZ28gYXdh eSwgYmUgbXkgZ3Vlc3QuCi0gICAgICAqLwotICAgICAgICBjb25zdCBzdHJ1Y3QgdXRpbWJ1ZiAq IHQyID0gJnRwOwotICAgICAgICB4ID0gdXRpbWUoZix0Mik7Ci0gICAgfQotI2Vsc2UKLSAgICB4 ID0gdXRpbWUoZiwmdHApOwotICAgIGRlYnVnKEYxMTEsInNldG1vZHRpbWUgdXRpbWUoKSIsIm90 aGVyIix4KTsKLSNlbmRpZiAvKiBJUklYNjUgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotICAgIGlm ICh4KQotICAgICAgcmMgPSAtMTsKLQotICAgIGRlYnVnKEYxMDEsInNldG1vZHRpbWUgcmVzdWx0 IiwiIixyYyk7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotCi0vKgotICBjIGggayBtIG8gZCB0IGkg bSBlICAtLSAgQ2hlY2svU2V0IGZpbGUgbW9kaWZpY2F0aW9uIHRpbWUuCi0KLSAgZmMgPSBmdW5j dGlvbiBjb2RlOgotICAgIDAgPSBDaGVjazsgcmV0dXJuczoKLSAgICAgIC0xIG9uIGVycm9yLAot ICAgICAgIDAgaWYgbG9jYWwgb2xkZXIgdGhhbiByZW1vdGUsCi0gICAgICAgMSBpZiBtb2R0aW1l cyBhcmUgZXF1YWwsCi0gICAgICAgMiBpZiBsb2NhbCBuZXdlciB0aGFuIHJlbW90ZS4KLSAgICAx ID0gU2V0IChsb2NhbCBmaWxlJ3MgbW9kdGltZSBmcm9tIHJlbW90ZSdzKTsgcmV0dXJuczoKLSAg ICAgIC0xIG9uIGVycm9yLAotICAgICAgIDAgb24gc3VjY2Vzcy4KLSovCi1zdGF0aWMgaW50Ci1j aGttb2R0aW1lKGxvY2FsLHJlbW90ZSxmYykgY2hhciAqIGxvY2FsLCAqIHJlbW90ZTsgaW50IGZj OyB7Ci0jaWZkZWYgTlQKLSAgICBzdHJ1Y3QgX3N0YXQgc3RhdGJ1ZjsKLSNlbHNlIC8qIE5UICov Ci0gICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKLSNlbmRpZiAvKiBOVCAqLwotICAgIHN0cnVjdCB0 bSAqIHRtbG9jYWwgPSBOVUxMOwotICAgIHN0cnVjdCB0bSB0bXJlbW90ZTsKLSAgICBpbnQgcmMg PSAwLCBoYXZlZGF0ZSA9IDAsIGxjcyA9IC0xLCByY3MgPSAtMSwgZmxhZyA9IDA7Ci0gICAgY2hh ciAqIHMsIHRpbWVidWZbNjRdOwotCi0gICAgZGVidWcoRjExMSwiY2hrbW9kdGltZSIsbG9jYWws bWR0bW9rKTsKLSAgICBpZiAoIW1kdG1vaykJCQkvKiBTZXJ2ZXIgc3VwcG9ydHMgTURUTT8gKi8K LSAgICAgIHJldHVybigtMSk7CQkJLyogTm8gZG9uJ3QgYm90aGVyLiAqLwotCi0jaWZuZGVmIE5P Q1NFVFMKLSAgICBpZiAoZnRwX3hsYSkgewotICAgICAgICBsY3MgPSBmdHBfY3NsOwotICAgICAg ICBpZiAobGNzIDwgMCkgbGNzID0gZmNoYXJzZXQ7Ci0gICAgICAgIHJjcyA9IGZ0cF9jc3g7Ci0g ICAgICAgIGlmIChyY3MgPCAwKSByY3MgPSBmdHBfY3NyOwotICAgIH0KLSNlbmRpZiAvKiBOT0NT RVRTICovCi0KLSAgICBpZiAoZmMgPT0gMCkgewotICAgICAgICByYyA9IHN0YXQobG9jYWwsJnN0 YXRidWYpOwotICAgICAgICBpZiAocmMgPT0gMCkgeyAgICAgICAgICAgICAgICAgIC8qIEdldCBs b2NhbCBmaWxlJ3MgbW9kIHRpbWUgKi8KLQkgICAgLyogQ29udmVydCB0byBzdHJ1Y3QgdG0gKi8K LSAgICAgICAgICAgIHRtbG9jYWwgPSBnbXRpbWUoKHRpbWVfdCAqKSZzdGF0YnVmLnN0X210aW1l KTsKLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgaWYgKHRtbG9jYWwpIHsKLSAgICAgICAgICAg ICAgICBkYnRpbWUobG9jYWwsdG1sb2NhbCk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogREVC VUcgKi8KLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBHZXQgcmVtb3RlIGZpbGUncyBtb2QgdGlt ZSBhcyB5eXl5bW1kZGhobW1zcyAqLwotCi0gICAgaWYgKGhhdmVtZHRtKSB7CQkJLyogQWxyZWFk eSBnb3QgaXQgZnJvbSBNTFNEPyAqLwotCXMgPSBoYXZlbWR0bTsKLQlmbGFnKys7Ci0gICAgfSBl bHNlIGlmIChmdHBjbWQoIk1EVE0iLHJlbW90ZSxsY3MscmNzLDApID09IFJFUExZX0NPTVBMRVRF KSB7Ci0gICAgICAgIGNoYXIgYzsKLSAgICAgICAgYnplcm8oKGNoYXIgKikmdG1yZW1vdGUsIHNp emVvZihzdHJ1Y3QgdG0pKTsKLSAgICAgICAgcyA9IGZ0cF9yZXBseV9zdHI7Ci0gICAgICAgIHdo aWxlICgoYyA9ICpzKyspKSB7ICAgICAgICAgICAgLyogU2tpcCBwYXN0IHJlc3BvbnNlIGNvZGUg Ki8KLSAgICAgICAgICAgIGlmIChjID09IFNQKSB7Ci0gICAgICAgICAgICAgICAgZmxhZysrOwot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot ICAgIGlmIChmbGFnKSB7Ci0JZGVidWcoRjExMSwiZnRwIGNoa21vZHRpbWUgc3RyaW5nIixzLGZs YWcpOwotCWlmIChmdHNfc3RvKSB7CQkJLyogVXNlciBnYXZlIHNlcnZlciB0aW1lIG9mZnNldD8g Ki8KLQkgICAgY2hhciAqIHA7Ci0JICAgIGRlYnVnKEYxMTAsImZ0cCBjaGttb2R0aW1lIG9mZnNl dCIsZnRzX3N0bywwKTsKLQkgICAgY2ttYWttc2codGltZWJ1Ziw2NCxzLCIgIixmdHNfc3RvLE5V TEwpOyAvKiBCdWlsZCBkZWx0YSB0aW1lICovCi0JICAgIGlmICgocCA9IGNtY3Z0ZGF0ZSh0aW1l YnVmLDEpKSkgeyAvKiBBcHBseSBkZWx0YSB0aW1lICovCi0JCWNrc3RybmNweSh0aW1lYnVmLHAs NjQpOyAgICAgIC8qIENvbnZlcnQgdG8gTURUTSBmb3JtYXQgKi8KLQkJdGltZWJ1Zls4XSAgPSB0 aW1lYnVmWzldOyAgLyogaCAqLwotCQl0aW1lYnVmWzldICA9IHRpbWVidWZbMTBdOyAvKiBoICov Ci0JCXRpbWVidWZbMTBdID0gdGltZWJ1ZlsxMl07IC8qIG0gKi8KLQkJdGltZWJ1ZlsxMV0gPSB0 aW1lYnVmWzEzXTsgLyogbSAqLwotCQl0aW1lYnVmWzEyXSA9IHRpbWVidWZbMTJdOyAvKiBzICov Ci0JCXRpbWVidWZbMTNdID0gdGltZWJ1ZlsxM107IC8qIHMgKi8KLQkJdGltZWJ1ZlsxNF0gPSBO VUw7Ci0JCXMgPSB0aW1lYnVmOwotCQlkZWJ1ZyhGMTEwLCJmdHAgY2hrbW9kdGltZSBhZGp1c3Qi LHMsMCk7Ci0JICAgIH0KLQl9Ci0gICAgICAgIGlmIChmbGFnKSB7ICAgICAgICAgICAgICAgICAg ICAgLyogQ29udmVydCB0byBzdHJ1Y3QgdG0gKi8KLSAgICAgICAgICAgIGNoYXIgKiBwYXQ7Ci0g ICAgICAgICAgICBpbnQgeTJrYnVnID0gMDsgICAgICAgICAgICAgLyogU2VlbiBpbiBLZXJiZXJv cyA0IEZUUCBzZXJ2ZXJzICovCi0gICAgICAgICAgICBpZiAoIWNrc3RyY21wKHMsIjE5MSIsMyww KSkgewotICAgICAgICAgICAgICAgIHBhdCA9ICIlMDVkJTAyZCUwMmQlMDJkJTAyZCUwMmQiOwot ICAgICAgICAgICAgICAgIHkya2J1ZysrOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0 cCBjaGttb2R0aW1lIFkySyBCVUcgZGV0ZWN0ZWQiLHMsMCk7Ci0gICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgIHBhdCA9ICIlMDRkJTAyZCUwMmQlMDJkJTAyZCUwMmQiOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNzY2FuZihzLCAgICAgICAgICAgICAgIC8qIFBh cnNlIGludG8gc3RydWN0IHRtICovCi0gICAgICAgICAgICAgICAgICAgICAgIHBhdCwKLSAgICAg ICAgICAgICAgICAgICAgICAgJih0bXJlbW90ZS50bV95ZWFyKSwKLSAgICAgICAgICAgICAgICAg ICAgICAgJih0bXJlbW90ZS50bV9tb24pLAotICAgICAgICAgICAgICAgICAgICAgICAmKHRtcmVt b3RlLnRtX21kYXkpLAotICAgICAgICAgICAgICAgICAgICAgICAmKHRtcmVtb3RlLnRtX2hvdXIp LAotICAgICAgICAgICAgICAgICAgICAgICAmKHRtcmVtb3RlLnRtX21pbiksCi0gICAgICAgICAg ICAgICAgICAgICAgICYodG1yZW1vdGUudG1fc2VjKQotICAgICAgICAgICAgICAgICAgICAgICAp ID09IDYpIHsKLSAgICAgICAgICAgICAgICB0bXJlbW90ZS50bV95ZWFyIC09ICh5MmtidWcgPyAx OTAwMCA6IDE5MDApOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBjaGttb2R0aW1l IHllYXIiLCIiLHRtcmVtb3RlLnRtX3llYXIpOwotICAgICAgICAgICAgICAgIHRtcmVtb3RlLnRt X21vbi0tOwotCi0jaWZkZWYgREVCVUcKLQkJZGVidWcoRjEwMCwiU0VSVkVSIFRJTUUgRk9MTE9X UzoiLCIiLDApOwotICAgICAgICAgICAgICAgIGRidGltZShyZW1vdGUsJnRtcmVtb3RlKTsKLSNl bmRpZiAvKiBERUJVRyAqLwotCi0gICAgICAgICAgICAgICAgaWYgKGhhdmVkYXRlID4gLTEpCi0J CSAgaGF2ZWRhdGUgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsJ CQkJLyogRmFpbGVkICovCi0JZGVidWcoRjEwMSwiZnRwIGNoa21vZHRpbWUgZnRwY29kZSIsIiIs ZnRwY29kZSk7Ci0JaWYgKGZ0cGNvZGUgPT0gNTAwIHx8CQkvKiBDb21tYW5kIHVucmVjb2duaXpl ZCAqLwotCSAgICBmdHBjb2RlID09IDUwMiB8fAkJLyogQ29tbWFuZCBub3QgaW1wbGVtZW50ZWQg Ki8KLQkgICAgZnRwY29kZSA9PSAyMDIpCQkvKiBDb21tYW5kIHN1cGVyZmx1b3VzICovCi0JICBt ZHRtb2sgPSAwOwkJCS8qIERvbid0IGFzayB0aGlzIHNlcnZlciBhZ2FpbiAqLwotCXJldHVybigt MSk7Ci0gICAgfQotICAgIGlmIChmYyA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIENv bXBhcmUgKi8KLSAgICAgICAgaWYgKGhhdmVkYXRlID09IDEpIHsJCS8qIE9ubHkgaWYgd2UgaGF2 ZSBib3RoIGZpbGUgZGF0ZXMgKi8KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgIENvbXBh cmUgd2l0aCBsb2NhbCBmaWxlJ3MgdGltZS4gIFdlIGRvbid0IHVzZQotICAgICAgICAgICAgICBj bG9jayB0aW1lICh0aW1lX3QpIGhlcmUgaW4gY2FzZSBvZiBzaWduZWQvdW5zaWduZWQKLSAgICAg ICAgICAgICAgY29uZnVzaW9uLCBldGMuCi0gICAgICAgICAgICAqLwotCSAgICBpbnQgeHg7Ci0j aWZkZWYgQ09NTUVOVAotI2lmZGVmIERFQlVHCSAgICAKLQkgICAgaWYgKGRlYmxvZykgewotCQlk YnRpbWUoIkxPQ0FMIix0bWxvY2FsKTsKLQkJZGJ0aW1lKCJSRU1PVCIsJnRtcmVtb3RlKTsKLQkg ICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICB4eCA9 IHRtY29tcGFyZSh0bWxvY2FsLCZ0bXJlbW90ZSk7Ci0JICAgIGRlYnVnKEYxMDEsImNoa21vZHRp bWUgdG1jb21wYXJlIiwiIix4eCk7Ci0gICAgICAgICAgICByZXR1cm4oeHggKyAxKTsKLSAgICAg ICAgfQotICAgIH0gZWxzZSBpZiAoZnRwX2RhdGVzKSB7ICAgICAgICAgICAgIC8qIFNldCAqLwot ICAgICAgICAvKgotICAgICAgICAgIEhlcmUgd2UgbXVzdCBjb252ZXJ0IHN0cnVjdCB0bSB0byB0 aW1lX3QKLSAgICAgICAgICB3aXRob3V0IGFwcGx5aW5nIHRpbWV6b25lIGNvbnZlcnNpb24sIGZv ciB3aGljaAotICAgICAgICAgIHRoZXJlIGlzIG5vIHBvcnRhYmxlIEFQSS4gIFRoZSBtZXRob2Qg aXMgaGlkZGVuCi0gICAgICAgICAgaW4gbWt1dGltZSgpLCBkZWZpbmVkIGFib3ZlLgotICAgICAg ICAqLwotICAgICAgICB0aW1lX3QgdXRjOwotICAgICAgICB1dGMgPSBta3V0aW1lKCZ0bXJlbW90 ZSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBjaGttb2R0aW1lIG1rdXRpbWUiLHJlbW90ZSx1 dGMpOwotICAgICAgICBpZiAodXRjICE9ICh0aW1lX3QpLTEpCi0gICAgICAgICAgcmV0dXJuKHNl dG1vZHRpbWUobG9jYWwsdXRjKSk7Ci0gICAgfQotICAgIHJldHVybigtMSk7Ci19Ci0KLS8qIGdl dGZpbGUoKSByZXR1cm5zOiAtMSBvbiBlcnJvciwgMCBpZiBmaWxlIHJlY2VpdmVkLCAxIGlmIGZp bGUgc2tpcHBlZCAqLwotCi1zdGF0aWMgaW50Ci1nZXRmaWxlKHJlbW90ZSxsb2NhbCxyZWNvdmVy LGFwcGVuZCxwaXBlbmFtZSx4bGF0ZSxmY3MscmNzKQotICAgIGNoYXIgKiBsb2NhbCwgKiByZW1v dGUsICogcGlwZW5hbWU7IGludCByZWNvdmVyLCBhcHBlbmQsIHhsYXRlLCBmY3MsIHJjczsKLS8q IGdldGZpbGUgKi8gewotICAgIGludCByYyA9IC0xOwotICAgIFVMT05HIHQwLCB0MTsKLQotI2lm ZGVmIEdGVElNRVIKLSAgICBDS0ZMT0FUIHNlYzsKLSNlbHNlCi0gICAgaW50IHNlYyA9IDA7Ci0j ZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgIGNoYXIgZnVsbG5hbWVbQ0tNQVhQQVRIKzFdOwotCi0g ICAgZGVidWcoRjExMCwiZnRwIGdldGZpbGUgcmVtb3RlIEEiLHJlbW90ZSwwKTsKLSAgICBkZWJ1 ZyhGMTEwLCJmdHAgZ2V0ZmlsZSBsb2NhbCBBIixsb2NhbCwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJm dHAgZ2V0ZmlsZSBwaXBlbmFtZSIscGlwZW5hbWUsMCk7Ci0gICAgaWYgKCFyZW1vdGUpIHJlbW90 ZSA9ICIiOwotCi0jaWZkZWYgUEFUVEVSTlMKLSAgICAvKiBBdXRvbWF0aWMgdHlwZSBzd2l0Y2hp bmc/ICovCi0gICAgaWYgKGZ0cF94ZmVybW9kZSA9PSBYTU9ERV9BICYmIHBhdHRlcm5zICYmIGdl dF9hdXRvICYmICFmb3JjZXR5cGUpIHsKLSAgICAgICAgaW50IHg7Ci0gICAgICAgIHggPSBtYXRj aG5hbWUocmVtb3RlLDAsc2VydmVydHlwZSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXRm aWxlIG1hdGNobmFtZSIscmVtb3RlLHgpOwotICAgICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAg ICBjYXNlIDA6IGZ0cF90eXAgPSBGVFRfQVNDOyBicmVhazsKLSAgICAgICAgICBjYXNlIDE6IGZ0 cF90eXAgPSB0ZW5leCA/IEZUVF9URU4gOiBGVFRfQklOOyBicmVhazsKLSAgICAgICAgICBkZWZh dWx0OiBpZiAoZ19mdHBfdHlwID4gLTEpIGZ0cF90eXAgPSBnX2Z0cF90eXA7Ci0gICAgICAgIH0K LSAgICAgICAgY2hhbmdldHlwZShmdHBfdHlwLGZ0cF92Ym0pOwotICAgICAgICBiaW5hcnkgPSBm dHBfdHlwOyAgICAgICAgICAgICAgIC8qIEZvciBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgKi8KLSAg ICB9Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgZnRwX2Nz eCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIGZpbGUtdHJhbnNmZXIgZGlzcGxh eSAqLwotICAgIGZ0cF9jc2wgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIC4uLiAqLwot Ci0gICAgaWYgKHJjcyA+IC0xKSAgICAgICAgICAgICAgICAgICAgICAgLyogLTEgbWVhbnMgbm8g dHJhbnNsYXRpb24gKi8KLSAgICAgIGlmIChmdHBfdHlwID09IEZUVF9BU0MpICAgICAgICAgICAv KiBGaWxlIHR5cGUgaXMgImFzY2lpIj8gKi8KLSAgICAgICAgaWYgKGZjcyA8IDApICAgICAgICAg ICAgICAgICAgICAvKiBGaWxlIGNoYXJzZXQgbm90IGZvcmNlZD8gKi8KLSAgICAgICAgICBmY3Mg PSBmY2hhcnNldDsgICAgICAgICAgICAgICAvKiB1c2UgcHJldmFpbGluZyBGSUxFIENIQVJBQ1RF Ui1TRVQgKi8KLSAgICBpZiAoZmNzID4gLTEgJiYgcmNzID4gLTEpIHsgICAgICAgICAvKiBTZXQg dXAgdHJhbnNsYXRpb24gZnVuY3Rpb25zICovCi0gICAgICAgIGRlYnVnKEYxMTAsImZ0cCBnZXRm aWxlIiwiaW5pdHhsYXRlIiwwKTsKLSAgICAgICAgaW5pdHhsYXRlKHJjcyxmY3MpOyAgICAgICAg ICAgICAvKiBOQjogb3Bwb3NpdGUgb3JkZXIgb2YgUFVUICovCi0gICAgICAgIGZ0cF9jc3ggPSBy Y3M7Ci0gICAgICAgIGZ0cF9jc2wgPSBmY3M7Ci0gICAgfSBlbHNlCi0gICAgICB4bGF0ZSA9IDA7 Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0gICAgaWYgKCFsb2NhbCkgbG9jYWwgPSAiIjsKLSAg ICBpZiAoIXBpcGVuYW1lICYmICEqbG9jYWwpCi0gICAgICBsb2NhbCA9IHJlbW90ZTsKLQotICAg IG91dDJzY3JlZW4gPSAhc3RyY21wKGxvY2FsLCItIik7Ci0KLSAgICBmdWxsbmFtZVswXSA9IE5V TDsKLSAgICBpZiAocGlwZW5hbWUpIHsKLSAgICAgICAgY2tzdHJuY3B5KGZ1bGxuYW1lLHBpcGVu YW1lLENLTUFYUEFUSCsxKTsKLSAgICB9IGVsc2UgewotICAgICAgICB6Zm5xZnAobG9jYWwsQ0tN QVhQQVRILGZ1bGxuYW1lKTsKLSAgICAgICAgaWYgKCFmdWxsbmFtZVswXSkKLSAgICAgICAgICBj a3N0cm5jcHkoZnVsbG5hbWUsbG9jYWwsQ0tNQVhQQVRIKzEpOwotICAgIH0KLSAgICBpZiAoIW91 dDJzY3JlZW4gJiYgZGlzcGxhICYmIGZkaXNwbGEpIHsgLyogU2NyZWVuICovCi0gICAgICAgIGZ0 c2NyZWVuKFNDUl9GTiwnRicsKENLX09GRl9UKXBrdG51bSxyZW1vdGUpOwotICAgICAgICBmdHNj cmVlbihTQ1JfQU4sMCwoQ0tfT0ZGX1QpMCxmdWxsbmFtZSk7Ci0gICAgICAgIGZ0c2NyZWVuKFND Ul9GUywwLGZzaXplLCIiKTsKLSAgICB9Ci0gICAgdGxvZyhGMTEwLGZ0cF90eXAgPyAiZnRwIGdl dCBCSU5BUlk6IiA6ICJmdHAgZ2V0IFRFWFQ6IiwgcmVtb3RlLCAwKTsKLSAgICB0bG9nKEYxMTAs IiBhcyIsZnVsbG5hbWUsMCk7Ci0gICAgZGVidWcoRjExMSwiZnRwIGdldGZpbGUgc2l6ZSIscmVt b3RlLGZzaXplKTsKLSAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0ZmlsZSBsb2NhbCIsbG9jYWwsb3V0 MnNjcmVlbik7Ci0KLSAgICBja3N0cm5jcHkoZmlsbmFtLCBwaXBlbmFtZSA/IHJlbW90ZSA6IGxv Y2FsLCBDS01BWFBBVEgpOwotCi0gICAgdDAgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAg ICAgLyogU3RhcnQgdGltZSAqLwotICAgIGRlYnVnKEYxMTEsImZ0cCBnZXRmaWxlIHQwIixyZW1v dGUsdDApOyAvKiBeXl4gKi8KLSAgICByYyA9IHJlY3ZyZXF1ZXN0KCJSRVRSIiwKLSAgICAgICAg ICAgICAgICAgICAgIGxvY2FsLAotICAgICAgICAgICAgICAgICAgICAgcmVtb3RlLAotICAgICAg ICAgICAgICAgICAgICAgYXBwZW5kID8gImFiIiA6ICJ3YiIsCi0gICAgICAgICAgICAgICAgICAg ICAwLAotICAgICAgICAgICAgICAgICAgICAgcmVjb3ZlciwKLSAgICAgICAgICAgICAgICAgICAg IHBpcGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgeGxhdGUsCi0gICAgICAgICAgICAgICAg ICAgICBmY3MsCi0gICAgICAgICAgICAgICAgICAgICByY3MKLSAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgdDEgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgLyogRW5kIHRpbWUg Ki8KLSAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0ZmlsZSB0MSIscmVtb3RlLHQxKTsKLSAgICBkZWJ1 ZyhGMTExLCJmdHAgZ2V0ZmlsZSBzZWMiLHJlbW90ZSwodDEtdDApLzEwMDApOwotI2lmZGVmIEdG VElNRVIKLSAgICBzZWMgPSAoQ0tGTE9BVCkoKENLRkxPQVQpKHQxIC0gdDApIC8gMTAwMC4wKTsg LyogU3RhdHMgKi8KLSAgICBmcHhmc2VjcyA9IHNlYzsgICAgICAgICAgICAgICAgICAgICAvKiAo Zm9yIGRveGxvZygpKSAqLwotI2Vsc2UKLSAgICBzZWMgPSAodDEgLSB0MCkgLyAxMDAwOwotICAg IHhmc2VjcyA9IChpbnQpc2VjOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotI2lmZGVmIEZUUF9U SU1FT1VUCi0gICAgaWYgKGZ0cF90aW1lZF9vdXQpCi0gICAgICByYyA9IC00OwotI2VuZGlmCS8q IEZUUF9USU1FT1VUICovCi0KLSAgICBkZWJ1ZyhGMTExLCJmdHAgcmVjdnJlcXVlc3QgcmMiLHJl bW90ZSxyYyk7Ci0gICAgaWYgKGNhbmNlbGZpbGUgfHwgY2FuY2VsZ3JvdXApIHsKLSAgICAgICAg ZGVidWcoRjExMSwiZnRwIGdldCBjYW5jZWxlZCIsY2tpdG9hKGNhbmNlbGZpbGUpLGNhbmNlbGdy b3VwKTsKLSAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX0lOVCwoQ0tfT0ZGX1QpMCwiIik7Ci0g ICAgfSBlbHNlIGlmIChyYyA+IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwiZnRwIGdldCBza2lw cGVkIixja2l0b2EoY2FuY2VsZmlsZSksY2FuY2VsZ3JvdXApOwotICAgICAgICBmdHNjcmVlbihT Q1JfU1QsU1RfU0tJUCwoQ0tfT0ZGX1QpMCxjbWFyZyk7Ci0gICAgfSBlbHNlIGlmIChyYyA8IDAp IHsKLSAgICAgICAgc3dpdGNoIChmdHBjb2RlKSB7Ci0gICAgICAgICAgY2FzZSAtNDogICAgICAg ICAgICAgICAgICAgICAgLyogTmV0d29yayBlcnJvciAqLwotICAgICAgICAgIGNhc2UgLTI6ICAg ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgZXJyb3IgKi8KLSAgICAgICAgICAgIGZ0c2NyZWVu KFNDUl9TVCxTVF9NU0csKENLX09GRl9UKTAsY2tfZXJyc3RyKCkpOwotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgY2FzZSAtMzoKLSAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9N U0csKENLX09GRl9UKTAsCi0JCSAgICAgIkZhaWx1cmUgdG8gbWFrZSBkYXRhIGNvbm5lY3Rpb24i KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgLTE6CQkJLyogKHNob3VsZCBi ZSBjb3ZlcmVkIGFib3ZlKSAqLwotICAgICAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX0lOVCwo Q0tfT0ZGX1QpMCwiIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0Ogot ICAgICAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX01TRywoQ0tfT0ZGX1QpMCwmZnRwX3JlcGx5 X3N0cls0XSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBUdWRvIGJlbSAqLwotICAgICAgICBmdHNjcmVlbihTQ1JfUFQsJ1onLChDS19PRkZf VCkwLCIiKTsKLSAgICAgICAgaWYgKHJjID09IDApIHsKLSAgICAgICAgICAgIGZ0c2NyZWVuKFND Ul9TVCxTVF9PSywoQ0tfT0ZGX1QpMCwiIik7IC8qIEZvciBzY3JlZW4gKi8KLSAgICAgICAgICAg IG1ha2VzdHIoJnJyZnNwZWMscmVtb3RlKTsgICAgIC8qIEZvciBXSEVSRSBjb21tYW5kICovCi0g ICAgICAgICAgICBtYWtlc3RyKCZyZnNwZWMsZnVsbG5hbWUpOwotICAgICAgICB9Ci0gICAgfQot ICAgIGlmIChyYyA+IC0xKSB7Ci0JaWYgKGZ0cF9kYXRlcykJCQkvKiBJZiBGVFAgREFURVMgT04u Li4gKi8KLQkgIGlmICghcGlwZW5hbWUgJiYgIW91dDJzY3JlZW4pCS8qIGFuZCBpdCdzIGEgcmVh bCBmaWxlICovCi0JICAgIGlmIChyYyA8IDEgJiYgcmMgIT0gLTMpCS8qIGFuZCBpdCB3YXNuJ3Qg c2tpcHBlZCAqLwotCSAgICAgIGlmIChjb25uZWN0ZWQpCQkvKiBhbmQgd2Ugc3RpbGwgaGF2ZSBh IGNvbm5lY3Rpb24gKi8KLQkJaWYgKHpjaGtpKGxvY2FsKSA+IC0xKSB7IC8qIGFuZCB0aGUgZmls ZSB3YXNuJ3QgZGlzY2FyZGVkICovCi0JCSAgICBjaGttb2R0aW1lKGxvY2FsLHJlbW90ZSwxKTsg Lyogc2V0IGxvY2FsIGZpbGUgZGF0ZSAqLwotCQkgICAgZGVidWcoRjExMCwiZnRwIGdldCBzZXQg ZGF0ZSIsbG9jYWwsMCk7Ci0JCX0KLQlmaWxjbnQrKzsJCQkvKiBVc2VkIGJ5IFx2KGZpbGVudW0p ICovCi0gICAgfQotI2lmZGVmIFRMT0cKLSAgICBpZiAodHJhbG9nKSB7Ci0gICAgICAgIGlmIChy YyA+IDApIHsKLSAgICAgICAgICAgIHRsb2coRjEwMCwiIHJlY292ZXJ5IHNraXBwZWQiLCIiLDAp OwotICAgICAgICB9IGVsc2UgaWYgKHJjID09IDApIHsKLSAgICAgICAgICAgIHRsb2coRjEwMSwi IGNvbXBsZXRlLCBzaXplIiwgIiIsIGZzaXplKTsKLSAgICAgICAgfSBlbHNlIGlmIChjYW5jZWxm aWxlKSB7Ci0gICAgICAgICAgICB0bG9nKEYxMDAsIiBjYW5jZWxlZCBieSB1c2VyIiwiIiwwKTsK LSNpZmRlZiBGVFBfVElNRU9VVAotICAgICAgICB9IGVsc2UgaWYgKGZ0cF90aW1lZF9vdXQpIHsK LSAgICAgICAgICAgIHRsb2coRjEwMCwiIHRpbWVkIG91dCIsIiIsMCk7Ci0jZW5kaWYJLyogRlRQ X1RJTUVPVVQgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRsb2coRjExMCwiIGZh aWxlZDoiLGZ0cF9yZXBseV9zdHIsMCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF0bG9nZm10 KQotICAgICAgICAgIGRveGxvZyh3aGF0LGxvY2FsLGZzaXplLGZ0cF90eXAscmMsIiIpOwotICAg IH0KLSNlbmRpZiAvKiBUTE9HICovCi0gICAgcmV0dXJuKHJjKTsKLX0KLQotLyogcHV0ZmlsZSgp IHJldHVybnM6IC0xIG9uIGVycm9yLCA+MCBpZiBmaWxlIG5vdCBzZWxlY3RlZCwgMCBvbiBzdWNj ZXNzLiAqLwotLyogUG9zaXRpdmUgcmV0dXJuIHZhbHVlIGlzIFNraXAgUmVhc29uLCBTS1BfeHh4 LCBmcm9tIGNrY2tlci5oLiAqLwotCi1zdGF0aWMgaW50Ci1wdXRmaWxlKGN4LAotICAgIGxvY2Fs LHJlbW90ZSxmb3JjZSxtb3ZpbmcsbXZ0byxybnRvLHNydnJuLHhfY252LHhfdXNuLHhmdCxwcm0s ZmNzLHJjcyxmbGcpCi0gICAgY2hhciAqIGxvY2FsLCAqIHJlbW90ZSwgKiBtdnRvLCAqcm50bywg KnNydnJuOwotICAgIGludCBjeCwgZm9yY2UsIG1vdmluZywgeF9jbnYsIHhfdXNuLCB4ZnQsIGZj cywgcmNzLCBmbGcsIHBybTsKLQotLyogcHV0ZmlsZSAqLyB7Ci0KLSAgICBjaGFyIGFzbmFtZVtD S01BWFBBVEgrMV07Ci0gICAgY2hhciBmdWxsbmFtZVtDS01BWFBBVEgrMV07Ci0gICAgaW50IGsg PSAtMSwgeCA9IDAsIHkgPSAwLCBvID0gLTEsIHJjID0gMCwgbmMgPSAwOwotICAgIGludCB4bGF0 ZSA9IDAsIHJlc3RhcnQgPSAwLCBtdCA9IC0xOwotICAgIGNoYXIgKiBzID0gTlVMTCwgKiBjbWQg PSBOVUxMOwotICAgIFVMT05HIHQwID0gMCwgdDEgPSAwOwkJLyogVGltZXMgZm9yIHN0YXRzICov Ci0gICAgaW50IG9mY3MgPSAwLCBvcmNzID0gMDsKLQotI2lmZGVmIEdGVElNRVIKLSAgICBDS0ZM T0FUIHNlYyA9IDAuMDsKLSNlbHNlCi0gICAgaW50IHNlYyA9IDA7Ci0jZW5kaWYgLyogR0ZUSU1F UiAqLwotICAgIGRlYnVnKEYxMTEsImZ0cCBwdXRmaWxlIGZsZyIsbG9jYWwsZmxnKTsKLSAgICBk ZWJ1ZyhGMTEwLCJmdHAgcHV0ZmlsZSBzcnZfcmVuYW0iLHNydnJuLDApOwotICAgIGRlYnVnKEYx MDEsImZ0cCBwdXRmaWxlIGZjcyIsIiIsZmNzKTsKLSAgICBkZWJ1ZyhGMTAxLCJmdHAgcHV0Zmls ZSByY3MiLCIiLHJjcyk7Ci0KLSAgICBvZmNzID0gZmNzOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTYXZlIGNoYXJzZXQgYXJncyAqLwotICAgIG9yY3MgPSByY3M7Ci0KLSAgICBzZW5kc3Rh cnQgPSAoQ0tfT0ZGX1QpMDsKLSAgICByZXN0YXJ0ID0gZmxnICYgUFVUX1JFUzsKLSAgICBpZiAo IXJlbW90ZSkKLSAgICAgIHJlbW90ZSA9ICIiOwotCi0gICAgLyogRlRQIHByb3RvY29sIGNvbW1h bmQgdG8gc2VuZCB0byBzZXJ2ZXIgKi8KLSAgICBjbWQgPSAoY3ggPT0gRlRQX0FQUCkgPyAiQVBQ RSIgOiAoeF91c24gPyAiU1RPVSIgOiAiU1RPUiIpOwotCi0gICAgaWYgKHhfY252ID09IFNFVF9B VVRPKSB7ICAgICAgICAgICAgLyogTmFtZSBjb252ZXJzaW9uIGlzIGF1dG8gKi8KLSAgICAgICAg aWYgKGFsaWtlKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJZiBzZXJ2ZXIgJiBjbGllbnQgYXJl IGFsaWtlICovCi0gICAgICAgICAgICBuYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogbm8g Y29udmVyc2lvbiAqLwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8q IElmIHRoZXkgYXJlIGRpZmZlcmVudCAqLwotICAgICAgICAgICAgaWYgKHNlcnZlcnR5cGUgPT0g U1lTX1VOSVggfHwgc2VydmVydHlwZSA9PSBTWVNfV0lOMzIpCi0gICAgICAgICAgICAgIG5jID0g LTE7ICAgICAgICAgICAgICAgICAgLyogb25seSBtaW5pbWFsIGNvbnZlcnNpb25zIG5lZWRlZCAq LwotICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSAq LwotICAgICAgICAgICAgICBuYyA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIGZ1bGwgY29udmVy c2lvbiAqLwotICAgICAgICB9Ci0gICAgfSBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTm90IGF1dG8gLSBkbyB3aGF0IHVzZXIgc2FpZCAqLwotICAgICAgbmMgPSB4X2NudjsK LQotICAgIC8qIElmIFRyYW5zZmVyIE1vZGUgaXMgQXV0b21hdGljLCBkZXRlcm1pbmUgZmlsZSB0 eXBlICovCi0gICAgaWYgKGZ0cF94ZmVybW9kZSA9PSBYTU9ERV9BICYmIGZpbGVwZWVrICYmICFw aXBlc2VuZCkgewotICAgICAgICBpZiAoaXNkaXIobG9jYWwpKSB7ICAgICAgICAgICAgIC8qIElm IGl0J3MgYSBkaXJlY3RvcnkgKi8KLSAgICAgICAgICAgIGsgPSBGVF9CSU47ICAgICAgICAgICAg ICAgICAvKiBza2lwIHRoZSBmaWxlIHNjYW4gKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIGRlYnVnKEYxMTAsIkZUUCBQVVQgY2FsbGluZyBzY2FuZmlsZSIsbG9jYWwsMCk7Ci0gICAg ICAgICAgICBrID0gc2NhbmZpbGUobG9jYWwsJm8sbnNjYW5maWxlKTsgLyogU2NhbiB0aGUgZmls ZSAqLwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMTEsIkZUUCBQVVQgc2NhbmZpbGUiLGxv Y2FsLGspOwotICAgICAgICBpZiAoayA+IC0xICYmICFmb3JjZXR5cGUpIHsKLSAgICAgICAgICAg IGZ0cF90eXAgPSAoayA9PSBGVF9CSU4pID8gMSA6IDA7Ci0gICAgICAgICAgICBpZiAoeGZ0ID4g LTEgJiYgZnRwX3R5cCAhPSB4ZnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoZmxnICYgUFVUX1NJ TSkKLSAgICAgICAgICAgICAgICAgIHRsb2coRjExMCwiZnRwIHB1dCBTS0lQIChUeXBlKToiLCBs b2NhbCwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKFNLUF9UWVApOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKGZ0cF90eXAgPT0gMSAmJiB0ZW5leCkgIC8qIFVzZXIgc2FpZCBU RU5FWD8gKi8KLSAgICAgICAgICAgICAgZnRwX3R5cCA9IEZUVF9URU47Ci0gICAgICAgIH0KLSAg ICB9Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICBmdHBfY3N4ID0gLTE7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBGb3IgZmlsZS10cmFuc2ZlciBkaXNwbGF5ICovCi0gICAgZnRwX2NzbCA9IC0xOyAg ICAgICAgICAgICAgICAgICAgICAgLyogLi4uICovCi0KLSAgICBpZiAocmNzID4gLTEpIHsgICAg ICAgICAgICAgICAgICAgICAvKiAtMSBtZWFucyBubyB0cmFuc2xhdGlvbiAqLwotICAgICAgICBp ZiAoZnRwX3R5cCA9PSAwKSB7ICAgICAgICAgICAgIC8qIEZpbGUgdHlwZSBpcyAiYXNjaWkiPyAq LwotICAgICAgICAgICAgaWYgKGZjcyA8IDApIHsgICAgICAgICAgICAgIC8qIEZpbGUgY2hhcnNl dCBub3QgZm9yY2VkPyAqLwotICAgICAgICAgICAgICAgIGlmIChrIDwgMCkgeyAgICAgICAgICAg IC8qIElmIHdlIGRpZG4ndCBzY2FuICovCi0gICAgICAgICAgICAgICAgICAgIGZjcyA9IGZjaGFy c2V0OyAgICAgLyogdXNlIHByZXZhaWxpbmcgRklMRSBDSEFSQUNURVItU0VUICovCi0gICAgICAg ICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogSWYgd2UgZGlkIHNjYW4sIHVzZSBz Y2FuIHJlc3VsdCAqLwotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGspIHsKLSAgICAgICAg ICAgICAgICAgICAgICBjYXNlIEZUX1RFWFQ6ICAgICAvKiBVbmtub3duIHRleHQgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgIGZjcyA9IGZjaGFyc2V0OwotICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBGVF83QklUOiAgICAgLyogNy1i aXQgdGV4dCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZmNzID0gZGNzZXQ3OwotICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBGVF84 QklUOiAgICAgLyogOC1iaXQgdGV4dCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZmNzID0g ZGNzZXQ4OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICAgICAgY2FzZSBGVF9VVEY4OiAgICAgLyogVVRGLTggKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgIGZjcyA9IEZDX1VURjg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICAgICAgICBjYXNlIEZUX1VDUzI6ICAgICAvKiBVQ1MtMiAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgZmNzID0gRkNfVUNTMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm IChvID4gLTEpICAgICAvKiBJbnB1dCBmaWxlIGJ5dGUgb3JkZXIgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgZmlsZW9yZGVyID0gbzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAg ICByY3MgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZmNzID4gLTEgJiYgcmNzID4g LTEpIHsgICAgICAgICAvKiBTZXQgdXAgdHJhbnNsYXRpb24gZnVuY3Rpb25zICovCi0gICAgICAg IGRlYnVnKEYxMTAsImZ0cCBwdXRmaWxlIiwiaW5pdHhsYXRlIiwwKTsKLSAgICAgICAgaW5pdHhs YXRlKGZjcyxyY3MpOwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0ZmlsZSByY3MiLGZjc2lu Zm9bcmNzXS5rZXl3b3JkLHJjcyk7Ci0gICAgICAgIHhsYXRlID0gMTsKLSAgICAgICAgZnRwX2Nz eCA9IHJjczsKLSAgICAgICAgZnRwX2NzbCA9IGZjczsKLSAgICB9Ci0jZW5kaWYgLyogTk9DU0VU UyAqLwotCi0gICAgYmluYXJ5ID0gZnRwX3R5cDsgICAgICAgICAgICAgICAgICAgLyogRm9yIGZp bGUtdHJhbnNmZXIgZGlzcGxheSAqLwotICAgIGFzbmFtZVswXSA9IE5VTDsKLQotICAgIGlmIChy ZWN1cnNpdmUpIHsgICAgICAgICAgICAgICAgICAgIC8qIElmIHNlbmRpbmcgcmVjdXJzaXZlbHks ICovCi0gICAgICAgIGlmICghc3luY2Rpcihsb2NhbCxmbGcgJiBQVVRfU0lNKSkgLyogc3luY2hy b25pemUgZGlyZWN0b3JpZXMuICovCi0gICAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAg ICAgICAgLyogRG9uJ3QgUFVUIGlmIGl0IGZhaWxzLiAqLwotICAgICAgICBlbHNlIGlmIChpc2Rp cihsb2NhbCkpICAgICAgICAgIC8qIEl0J3MgYSBkaXJlY3RvcnkgKi8KLSAgICAgICAgICByZXR1 cm4oMCk7ICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBzZW5kIGl0ISAqLwotICAgIH0KLSAg ICBpZiAoKnJlbW90ZSkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBhbiBhcy1uYW1lIHRl bXBsYXRlIHdhcyBnaXZlbiAqLwotI2lmbmRlZiBOT1NQTAotICAgICAgICBpZiAoY21kX3F1b3Rp bmcpIHsgICAgICAgICAgICAgIC8qIGFuZCBDT01NQU5EIFFVT1RJTkcgaXMgT04gKi8KLSAgICAg ICAgICAgIHkgPSBDS01BWFBBVEg7ICAgICAgICAgICAgICAvKiBldmFsdWF0ZSBpdCBmb3IgdGhp cyBmaWxlICovCi0gICAgICAgICAgICBzID0gYXNuYW1lOwotICAgICAgICAgICAgenpzdHJpbmco cmVtb3RlLCZzLCZ5KTsKLSAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAg ICAgICBja3N0cm5jcHkoYXNuYW1lLHJlbW90ZSxDS01BWFBBVEgpOyAgIC8qIChvciB0YWtlIGl0 IGxpdGVyYWxseSkgKi8KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE5vIGFzLW5hbWUgKi8KLSAgICAgICAgbnpsdG9yKGxvY2FsLGFzbmFtZSxuYyww LENLTUFYUEFUSCk7ICAgIC8qIHVzZSBsb2NhbCBuYW1lIHN0cmlwIHBhdGggKi8KLSAgICAgICAg ZGVidWcoRjExMCwiRlRQIFBVVCBuemx0b3IiLGFzbmFtZSwwKTsKLSAgICB9Ci0gICAgLyogUHJl bGltaW5hcnkgbWVzc2FnZXMgYW5kIGxvZyBlbnRyaWVzICovCi0KLSAgICBmdWxsbmFtZVswXSA9 IE5VTDsKLSAgICB6Zm5xZnAobG9jYWwsQ0tNQVhQQVRILGZ1bGxuYW1lKTsKLSAgICBpZiAoIWZ1 bGxuYW1lWzBdKSBja3N0cm5jcHkoZnVsbG5hbWUsbG9jYWwsQ0tNQVhQQVRIKzEpOwotICAgIGZ1 bGxuYW1lW0NLTUFYUEFUSF0gPSBOVUw7Ci0KLSAgICBpZiAoZGlzcGxhICYmIGZkaXNwbGEpIHsg ICAgICAgICAgICAvKiBTY3JlZW4gKi8KLSAgICAgICAgZnRzY3JlZW4oU0NSX0ZOLCdGJywoQ0tf T0ZGX1QpcGt0bnVtLGxvY2FsKTsKLSAgICAgICAgZnRzY3JlZW4oU0NSX0FOLDAsKENLX09GRl9U KTAsYXNuYW1lKTsKLSAgICAgICAgZnRzY3JlZW4oU0NSX0ZTLDAsZnNpemUsIiIpOwotICAgIH0K LSNpZmRlZiBET1VQREFURQotICAgIGlmIChmbGcgJiAoUFVUX1VQRHxQVVRfRElGKSkgewkvKiBE YXRlLWNoZWNraW5nIG1vZGVzLi4uICovCi0gICAgICAgIG10ID0gY2hrbW9kdGltZShmdWxsbmFt ZSxhc25hbWUsMCk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBwdXRmaWxlIGNoa21vZHRpbWUi LGFzbmFtZSxtdCk7Ci0gICAgICAgIGlmIChtdCA9PSAwICYmICgoZmxnICYgUFVUX0RJRikgPT0g MCkpIHsgLyogTG9jYWwgaXMgb2xkZXIgKi8KLSAgICAgICAgICAgIHRsb2coRjExMCwiZnRwIHB1 dCAvdXBkYXRlIFNLSVAgKE9sZGVyIG1vZHRpbWUpOiAiLGZ1bGxuYW1lLDApOwotCSAgICAvKiBT a2lwIHRoaXMgb25lICovCi0gICAgICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfU0tJUCwoQ0tf T0ZGX1QpU0tQX0RBVCxmdWxsbmFtZSk7Ci0gICAgICAgICAgICBmaWxjbnQrKzsKLSAgICAgICAg ICAgIHJldHVybihTS1BfREFUKTsKLSAgICAgICAgfSBlbHNlIGlmIChtdCA9PSAxKSB7ICAgICAg ICAgICAvKiBUaW1lcyBhcmUgZXF1YWwgKi8KLSAgICAgICAgICAgIHRsb2coRjExMCwiZnRwIHB1 dCAvdXBkYXRlIFNLSVAgKEVxdWFsIG1vZHRpbWUpOiAiLGZ1bGxuYW1lLDApOwotICAgICAgICAg ICAgZnRzY3JlZW4oU0NSX1NULFNUX1NLSVAsKENLX09GRl9UKVNLUF9FUVUsZnVsbG5hbWUpOyAv KiBTa2lwIGl0ICovCi0gICAgICAgICAgICBmaWxjbnQrKzsKLSAgICAgICAgICAgIHJldHVybihT S1BfREFUKTsKLSAgICAgICAgfQotCS8qIExvY2FsIGZpbGUgaXMgbmV3ZXIgKi8KLSAgICAgICAg dGxvZyhGMTEwLGZ0cF90eXAgPyAiZnRwIHB1dCAvdXBkYXRlIEJJTkFSWToiIDoKLSAgICAgICAg ICAgICAiZnRwIHB1dCAvdXBkYXRlIFRFWFQ6IiwgZnVsbG5hbWUsIDApOwotICAgIH0gZWxzZSBp ZiAoZmxnICYgUFVUX1JFUykgewotICAgICAgICB0bG9nKEYxMTAsZnRwX3R5cCA/ICJmdHAgcHV0 IC9yZWNvdmVyIEJJTkFSWToiIDoKLSAgICAgICAgICAgICAiZnRwIHB1dCAvcmVjb3ZlciBURVhU OiIsIGZ1bGxuYW1lLCAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICB0bG9nKEYxMTAsZnRwX3R5 cCA/ICJmdHAgcHV0IEJJTkFSWToiIDogImZ0cCBwdXQgVEVYVDoiLCBmdWxsbmFtZSwgMCk7Ci0g ICAgfQotI2Vsc2UKLSAgICB0bG9nKEYxMTAsZnRwX3R5cCA/ICJmdHAgcHV0IEJJTkFSWToiIDog ImZ0cCBwdXQgVEVYVDoiLCBmdWxsbmFtZSwgMCk7Ci0jZW5kaWYgLyogRE9VUERBVEUgKi8KLSAg ICB0bG9nKEYxMTAsIiBhcyIsYXNuYW1lLDApOwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICBpZiAo eGxhdGUpIHsKLSAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dGZpbGUgZmNzIixmY3NpbmZvW2Zj c10ua2V5d29yZCxmY3MpOwotICAgICAgICB0bG9nKEYxMTAsIiBmaWxlIGNoYXJhY3RlciBzZXQ6 IixmY3NpbmZvW2Zjc10ua2V5d29yZCwwKTsKLSAgICAgICAgdGxvZyhGMTEwLCIgc2VydmVyIGNo YXJhY3RlciBzZXQ6IixmY3NpbmZvW3Jjc10ua2V5d29yZCwwKTsKLSAgICB9IGVsc2UgaWYgKCFm dHBfdHlwKSB7Ci0gICAgICAgIHRsb2coRjExMCwiIGNoYXJhY3RlciBzZXRzOiIsIm5vIGNvbnZl cnNpb24iLDApOwotICAgICAgICBmY3MgPSBvZmNzOyAgICAgICAgICAgICAgICAgICAgIC8qIEJp bmFyeSBmaWxlIGJ1dCB3ZSBzdGlsbCBtdXN0ICovCi0gICAgICAgIHJjcyA9IG9yY3M7ICAgICAg ICAgICAgICAgICAgICAgLyogdHJhbnNsYXRlIGl0cyBuYW1lICovCi0gICAgfQotI2VuZGlmIC8q IE5PQ1NFVFMgKi8KLQotICAgIC8qIFBVVCBUSEUgRklMRSAqLwotCi0gICAgdDAgPSBnbXN0aW1l cigpOyAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgdGltZSAqLwotICAgIGlmIChmbGcgJiBQ VVRfU0lNKSB7ICAgICAgICAgICAgICAgIC8qIHJjID4gMCBpcyBhIHNraXAgcmVhc29uIGNvZGUg Ki8KLSAgICAgICAgaWYgKGZsZyAmIChQVVRfVVBEfFBVVF9ESUYpKSB7CS8qIChzZWUgU0tQX3h4 eCBpbiBja2NrZXIuaCkgKi8KLSAgICAgICAgICAgIHJjID0gKG10IDwgMCkgPyAgICAgICAgICAg ICAvKiBVcGRhdGUgbW9kZS4uLiAqLwotICAgICAgICAgICAgICBTS1BfWE5YIDogICAgICAgICAg ICAgICAgIC8qIFJlbW90ZSBmaWxlIGRvZXNuJ3QgZXhpc3QgKi8KLSAgICAgICAgICAgICAgICBT S1BfWFVQOyAgICAgICAgICAgICAgICAvKiBSZW1vdGUgZmlsZSBpcyBvbGRlciAqLwotICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgcmMgPSBTS1BfU0lNOyAgICAgICAgICAgICAgIC8qICJX b3VsZCBiZSBzZW50IiwgcGVyaW9kLiAqLwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg ICAgcmMgPSBzZW5kcmVxdWVzdChjbWQsbG9jYWwsYXNuYW1lLHhsYXRlLGZjcyxyY3MscmVzdGFy dCk7Ci0gICAgfQotICAgIHQxID0gZ21zdGltZXIoKTsgICAgICAgICAgICAgICAgICAgIC8qIEVu ZCB0aW1lICovCi0gICAgZmlsY250Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmls ZSBudW1iZXIgKi8KLQotI2lmZGVmIEdGVElNRVIKLSAgICBzZWMgPSAoQ0tGTE9BVCkoKENLRkxP QVQpKHQxIC0gdDApIC8gMTAwMC4wKTsgLyogU3RhdHMgKi8KLSAgICBmcHhmc2VjcyA9IHNlYzsg ICAgICAgICAgICAgICAgICAgICAvKiAoZm9yIGRveGxvZygpKSAqLwotI2Vsc2UKLSAgICBzZWMg PSAodDEgLSB0MCkgLyAxMDAwOwotICAgIHhmc2VjcyA9IChpbnQpc2VjOwotI2VuZGlmIC8qIEdG VElNRVIgKi8KLQotICAgIGRlYnVnKEYxMTEsImZ0cCBzZW5kcmVxdWVzdCByYyIsbG9jYWwscmMp OwotCi0gICAgaWYgKGNhbmNlbGZpbGUgfHwgY2FuY2VsZ3JvdXApIHsKLSAgICAgICAgZGVidWco RjExMSwiZnRwIHB1dCBjYW5jZWxlZCIsY2tpdG9hKGNhbmNlbGZpbGUpLGNhbmNlbGdyb3VwKTsK LSAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX0lOVCwoQ0tfT0ZGX1QpMCwiIik7Ci0gICAgfSBl bHNlIGlmIChyYyA+IDApIHsKLSAgICAgICAgZGVidWcoRjEwMSwiZnRwIHB1dCBza2lwcGVkIixs b2NhbCxyYyk7Ci0gICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9TS0lQLChDS19PRkZfVClyYyxm dWxsbmFtZSk7Ci0gICAgfSBlbHNlIGlmIChyYyA8IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwi ZnRwIHB1dCBlcnJvciIsbG9jYWwsZnRwY29kZSk7Ci0gICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxT VF9NU0csKENLX09GRl9UKTAsJmZ0cF9yZXBseV9zdHJbNF0pOwotICAgIH0gZWxzZSB7Ci0gICAg ICAgIGRlYnVnKEYxMTEsImZ0cCBwdXQgbm90IGNhbmNlbGVkIixja2l0b2EoZGlzcGxhKSxmZGlz cGxhKTsKLSAgICAgICAgZnRzY3JlZW4oU0NSX1BULCdaJywoQ0tfT0ZGX1QpMCwiIik7Ci0gICAg ICAgIGRlYnVnKEYxMTEsImZ0cCBwdXQgU1RfT0siLGxvY2FsLHJjKTsKLSAgICAgICAgZnRzY3Jl ZW4oU0NSX1NULFNUX09LLChDS19PRkZfVCkwLCIiKTsKLSAgICAgICAgZGVidWcoRjExMCwiZnRw IHB1dCBvbGQgc2ZzcGVjIixzZnNwZWMsMCk7Ci0gICAgICAgIG1ha2VzdHIoJnNmc3BlYyxmdWxs bmFtZSk7ICAgICAgLyogRm9yIFdIRVJFIGNvbW1hbmQgKi8KLSAgICAgICAgZGVidWcoRjExMCwi ZnRwIHB1dCBuZXcgc2ZzcGVjIixzZnNwZWMsMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImZ0cCBw dXQgb2xkIHNyZnNwZWMiLHNyZnNwZWMsMCk7Ci0gICAgICAgIG1ha2VzdHIoJnNyZnNwZWMsYXNu YW1lKTsKLSAgICAgICAgZGVidWcoRjExMCwiZnRwIHB1dCBuZXcgc3Jmc3BlYyIsc3Jmc3BlYyww KTsKLSAgICB9Ci0KLSAgICAvKiBGaW5hbCBsb2cgZW50cmllcyAqLwotCi0jaWZkZWYgVExPRwot ICAgIGlmICh0cmFsb2cpIHsKLSAgICAgICAgaWYgKHJjID4gMCkgewotICAgICAgICAgICAgaWYg KHJjID09IFNLUF9YTlgpCi0gICAgICAgICAgICAgIHRsb2coRjEwMCwiIC9zaW11bGF0ZTogV09V TEQgQkUgU0VOVDoiLCJubyByZW1vdGUgZmlsZSIsMCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChy YyA9PSBTS1BfWFVQKQotICAgICAgICAgICAgICB0bG9nKEYxMDAsIiAvc2ltdWxhdGU6IFdPVUxE IEJFIFNFTlQ6IiwicmVtb3RlIGZpbGUgb2xkZXIiLDApOwotICAgICAgICAgICAgZWxzZSBpZiAo cmMgPT0gU0tQX1NJTSkKLSAgICAgICAgICAgICAgdGxvZyhGMTAwLCIgL3NpbXVsYXRlOiBXT1VM RCBCRSBTRU5UIiwiIiwwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgdGxvZyhG MTEwLCIgc2tpcHBlZDoiLGdza3JlYXNvbihyYyksMCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocmMg PT0gMCkgewotICAgICAgICAgICAgdGxvZyhGMTAxLCIgY29tcGxldGUsIHNpemUiLCAiIiwgZnNp emUpOwotICAgICAgICB9IGVsc2UgaWYgKGNhbmNlbGZpbGUpIHsKLSAgICAgICAgICAgIHRsb2co RjEwMCwiIGNhbmNlbGVkIGJ5IHVzZXIiLCIiLDApOwotICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgdGxvZyhGMTEwLCIgZmFpbGVkOiIsZnRwX3JlcGx5X3N0ciwwKTsKLSAgICAgICAgfQot ICAgICAgICBpZiAoIXRsb2dmbXQpCi0gICAgICAgICAgZG94bG9nKHdoYXQsbG9jYWwsZnNpemUs ZnRwX3R5cCxyYywiIik7Ci0gICAgfQotI2VuZGlmIC8qIFRMT0cgKi8KLQotICAgIGlmIChyYyA8 IDApICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBVVCBkaWQgbm90IHN1Y2NlZWQgKi8KLSAg ICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzbyBkb25lLiAqLwotCi0g ICAgaWYgKGZsZyAmIFBVVF9TSU0pICAgICAgICAgICAgICAgICAgLyogU2ltdWxhdGluZywgc2tp cCB0aGUgcmVzdC4gKi8KLSAgICAgIHJldHVybihTS1BfU0lNKTsKLQotI2lmZGVmIFVOSVgKLSAg ICAvKiBTZXQgcGVybWlzc2lvbnMgdG9vPyAqLwotCi0gICAgaWYgKHBybSkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ2hhbmdlIHBlcm1pc3Npb25zPyAqLwotICAgICAgICBzID0gemdw ZXJtKGxvY2FsKTsgICAgICAgICAgICAgIC8qIEdldCBwZXJtcyBvZiBsb2NhbCBmaWxlICovCi0g ICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAgICB4ID0gc3RybGVuKHMpOwotICAgICAgICBp ZiAoeCA+IDMpIHMgKz0gKHggLSAzKTsKLSAgICAgICAgaWYgKHJkaWdpdHMocykpIHsKLSAgICAg ICAgICAgIGNrbWFrbXNnKGZ0cGNtZGJ1ZixGVFBfQlVGU0laLHMsIiAiLGFzbmFtZSxOVUxMKTsK LSAgICAgICAgICAgIHggPQotICAgICAgICAgICAgICBmdHBjbWQoIlNJVEUgQ0hNT0QiLGZ0cGNt ZGJ1ZixmY3MscmNzLGZ0cF92Ym0pID09IFJFUExZX0NPTVBMRVRFOwotICAgICAgICAgICAgdGxv ZyhGMTEwLCB4ID8gIiBjaG1vZCIgOiAiIGNobW9kIGZhaWxlZCIsCi0gICAgICAgICAgICAgICAg IHMsCi0gICAgICAgICAgICAgICAgIDAKLSAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg IGlmICgheCkKLSAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgIH0KLSNl bmRpZiAvKiBVTklYICovCi0KLSAgICAvKiBEaXNwb3NpdGlvbiBvZiBzb3VyY2UgZmlsZSAqLwot Ci0gICAgaWYgKG1vdmluZykgewotICAgICAgICB4ID0gemRlbGV0KGxvY2FsKTsKLSAgICAgICAg dGxvZyhGMTEwLCAoeCA+IC0xKSA/Ci0gICAgICAgICAgICAgIiBkZWxldGVkIiA6ICIgZmFpbGVk IHRvIGRlbGV0ZSIsCi0gICAgICAgICAgICAgbG9jYWwsCi0gICAgICAgICAgICAgMAotICAgICAg ICAgICAgICk7Ci0gICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAg IH0gZWxzZSBpZiAobXZ0bykgewotICAgICAgICB4ID0genJlbmFtZShsb2NhbCxtdnRvKTsKLSAg ICAgICAgdGxvZyhGMTEwLCAoeCA+IC0xKSA/Ci0gICAgICAgICAgICAgIiBtb3ZlZCBzb3VyY2Ug dG8iIDogIiBmYWlsZWQgdG8gbW92ZSBzb3VyY2UgdG8iLAotICAgICAgICAgICAgIG12dG8sCi0g ICAgICAgICAgICAgMAotICAgICAgICAgICAgICk7Ci0gICAgICAgIGlmICh4IDwgMCkKLSAgICAg ICAgICByZXR1cm4oLTEpOwotICAgICAgICAvKiBmdHNjcmVlbihTQ1JfU1QsU1RfTVNHLChDS19P RkZfVCkwLG12dG8pOyAqLwotCi0gICAgfSBlbHNlIGlmIChybnRvKSB7Ci0gICAgICAgIGNoYXIg KiBzID0gcm50bzsKLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgaW50IHk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBQYXNzIGl0IHRocnUgdGhlIGV2YWx1YXRvciAqLwotICAgICAgICBleHRl cm4gaW50IGNtZF9xdW90aW5nOyAgICAgICAgIC8qIGZvciBcdihmaWxlbmFtZSkgKi8KLSAgICAg ICAgaWYgKGNtZF9xdW90aW5nKSB7ICAgICAgICAgICAgICAvKiBCdXQgb25seSBpZiBjbWRfcXVv dGluZyBpcyBvbiAqLwotICAgICAgICAgICAgeSA9IENLTUFYUEFUSDsKLSAgICAgICAgICAgIHMg PSAoY2hhciAqKWFzbmFtZTsKLSAgICAgICAgICAgIHp6c3RyaW5nKHJudG8sJnMsJnkpOwotICAg ICAgICAgICAgcyA9IChjaGFyICopYXNuYW1lOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwg Ki8KLSAgICAgICAgaWYgKHMpIGlmICgqcykgewotICAgICAgICAgICAgaW50IHg7Ci0gICAgICAg ICAgICB4ID0genJlbmFtZShsb2NhbCxzKTsKLSAgICAgICAgICAgIHRsb2coRjExMCwgKHggPiAt MSkgPwotICAgICAgICAgICAgICAgICAiIHJlbmFtZWQgc291cmNlIGZpbGUgdG8iIDoKLSAgICAg ICAgICAgICAgICAgIiBmYWlsZWQgdG8gcmVuYW1lIHNvdXJjZSBmaWxlIHRvIiwKLSAgICAgICAg ICAgICAgICAgcywKLSAgICAgICAgICAgICAgICAgMAotICAgICAgICAgICAgICAgICApOwotICAg ICAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAg ICAgLyogZnRzY3JlZW4oU0NSX1NULFNUX01TRywoQ0tfT0ZGX1QpMCxzKTsgKi8KLSAgICAgICAg fQotICAgIH0KLQotICAgIC8qIERpc3Bvc2l0aW9uIG9mIGRlc3RpbmF0aW9uIGZpbGUgKi8KLQot ICAgIGlmIChzcnZybikgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIC9TRVJWRVItUkVOQU1F OiAqLwotICAgICAgICBjaGFyICogcyA9IHNydnJuOwotI2lmbmRlZiBOT1NQTAotICAgICAgICBp bnQgeTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhc3MgaXQgdGhydSB0aGUgZXZhbHVh dG9yICovCi0gICAgICAgIGV4dGVybiBpbnQgY21kX3F1b3Rpbmc7IC8qIGZvciBcdihmaWxlbmFt ZSkgKi8KLSAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dGZpbGUgc3J2cm4iLHMsMSk7Ci0KLSAg ICAgICAgaWYgKGNtZF9xdW90aW5nKSB7ICAgICAgICAgICAgICAvKiBCdXQgb25seSBpZiBjbWRf cXVvdGluZyBpcyBvbiAqLwotICAgICAgICAgICAgeSA9IENLTUFYUEFUSDsKLSAgICAgICAgICAg IHMgPSAoY2hhciAqKWZ1bGxuYW1lOyAgICAgICAvKiBXZSBjYW4gcmVjeWNsZSB0aGlzIGJ1ZmZl ciBub3cgKi8KLSAgICAgICAgICAgIHp6c3RyaW5nKHNydnJuLCZzLCZ5KTsKLSAgICAgICAgICAg IHMgPSAoY2hhciAqKWZ1bGxuYW1lOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAg ICAgICAgZGVidWcoRjExMSwiZnRwIHB1dGZpbGUgc3J2cm4iLHMsMik7Ci0gICAgICAgIGlmIChz KSBpZiAoKnMpIHsKLSAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgeCA9IGZ0cF9yZW5h bWUoYXNuYW1lLHMpOwotICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dGZpbGUgZnRwX3Jl bmFtZSIsYXNuYW1lLHgpOwotICAgICAgICAgICAgdGxvZyhGMTEwLCAoeCA+IDApID8KLSAgICAg ICAgICAgICAgICAgIiByZW5hbWVkIGRlc3RpbmF0aW9uIGZpbGUgdG8iIDoKLSAgICAgICAgICAg ICAgICAgIiBmYWlsZWQgdG8gcmVuYW1lIGRlc3RpbmF0aW9uIGZpbGUgdG8iLAotICAgICAgICAg ICAgICAgICBzLAotICAgICAgICAgICAgICAgICAwCi0gICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgICBpZiAoeCA8IDEpCi0gICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0K LSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKiB4eG91dCBtdXN0IG9ubHkgYmUgdXNlZCBm b3IgQVNDSUkgdHJhbnNmZXJzICovCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXh4b3V0 KGNoYXIgYykKLSNlbHNlCi14eG91dChjKSBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsKLSNpZm5kZWYgT1MyCi0jaWZuZGVmIFZNUwotI2lmbmRlZiBNQUMKLSNpZm5kZWYgT1NLCi0g ICAgLyogRm9yIFVuaXgsIERHLCBTdHJhdHVzLCBBbWlnYSwgR2VtZG9zLCBvdGhlciAqLwotICAg IGlmIChjID09ICdcMDEyJykgewotCWlmICh6em91dChkb3V0LChDSEFSKSdcMDE1JykgPCAwKQot CSAgcmV0dXJuKC0xKTsKLQlmdHBzbmQuYnl0ZXMrKzsKLSAgICB9Ci0jZWxzZSAvKiBPU0sgKi8K LSAgICBpZiAoYyA9PSAnXDAxNScpIHsKLQljID0gJ1wwMTInOwotCWlmICh6em91dChkb3V0LChD SEFSKSdcMDE1JykgPCAwKQotCSAgcmV0dXJuKC0xKTsKLQlmdHBzbmQuYnl0ZXMrKzsKLSAgICB9 Ci0jZW5kaWYgLyogT1NLICovCi0jZWxzZSAvKiBNQUMgKi8KLSAgICBpZiAoYyA9PSAnXDAxNScp IHsKLQljID0gJ1wwMTInOwotCWlmICh6em91dChkb3V0LChDSEFSKSdcMDE1JykgPCAwKQotCSAg cmV0dXJuKC0xKTsKLQlmdHBzbmQuYnl0ZXMrKzsKLSAgICB9Ci0jZW5kaWYgLyogTUFDICovCi0j ZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgaWYgKHp6b3V0KGRvdXQsKENI QVIpYykgPCAwKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBmdHBzbmQuYnl0ZXMrKzsKLSAgICBy ZXR1cm4oMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotc2Nybm91dChjaGFy IGMpCi0jZWxzZQotc2Nybm91dChjKSBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSAgICByZXR1cm4ocHV0Y2hhcihjKSk7Ci19Ci0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJ QwotcGlwZW91dChjaGFyIGMpCi0jZWxzZQotcGlwZW91dChjKSBjaGFyIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsKLSAgICByZXR1cm4oem1jaG91dChjKSk7Ci19Ci0KLXN0YXRpYyBpbnQK LWlzcGF0aHNlcChjKSBpbnQgYzsgewotICAgIHN3aXRjaCAoc2VydmVydHlwZSkgewotICAgICAg Y2FzZSBTWVNfVk1TOgotICAgICAgY2FzZSBTWVNfVE9QUzEwOgotICAgICAgY2FzZSBTWVNfVE9Q UzIwOgotICAgICAgICByZXR1cm4oKChjID09ICddJykgfHwgKGMgPT0gJz4nKSB8fCAoYyA9PSAn OicpKSA/IDEgOiAwKTsKLSAgICAgIGNhc2UgU1lTX09TMjoKLSAgICAgIGNhc2UgU1lTX1dJTjMy OgotICAgICAgY2FzZSBTWVNfRE9TOgotICAgICAgICByZXR1cm4oKChjID09ICdcXCcpIHx8IChj ID09ICcvJykgfHwgKGMgPT0gJzonKSkgPyAxIDogMCk7Ci0gICAgICBjYXNlIFNZU19WT1M6Ci0g ICAgICAgIHJldHVybigoYyA9PSAnPicpID8gMSA6IDApOwotICAgICAgZGVmYXVsdDoKLSAgICAg ICAgcmV0dXJuKChjID09ICcvJykgPyAxIDogMCk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50Ci1p c2NhbmNlbGVkKCkgewotI2lmZGVmIENLX0NVUlNFUwotICAgIGV4dGVybiBpbnQgY2tfcmVwYWlu dCgpOwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotICAgIGludCB4LCByYyA9IDA7Ci0gICAgY2hh ciBjID0gMDsKLSAgICBpZiAoY2FuY2VsZmlsZSkKLSAgICAgIHJldHVybigxKTsKLSAgICB4ID0g Y29uY2hrKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBBbnkgY2hhcnMgd2FpdGluZyBhdCBj b25zb2xlPyAqLwotICAgIGlmICh4LS0gPiAwKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIFll cy4uLiAgKi8KLSAgICAgICAgYyA9IGNvbmluYyg1KTsgICAgICAgICAgICAgICAgICAvKiBHZXQg b25lICovCi0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgIGNhc2UgMDMyOiAgICAgICAg ICAgICAgICAgICAgIC8qIEN0cmwtWCBvciBYICovCi0gICAgICAgICAgY2FzZSAneic6Ci0gICAg ICAgICAgY2FzZSAnWic6IGNhbmNlbGdyb3VwKys7ICAgICAgLyogZmFsbCB0aHJ1IG9uIHB1cnBv c2UgKi8KLSAgICAgICAgICBjYXNlIDAzMDogICAgICAgICAgICAgICAgICAgICAvKiBDdHJsLVog b3IgWiAqLwotICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgIGNhc2UgJ1gnOiBjYW5jZWxm aWxlKys7IHJjKys7IGJyZWFrOwotI2lmZGVmIENLX0NVUlNFUwotICAgICAgICAgIGNhc2UgJ0wn OgotICAgICAgICAgIGNhc2UgJ2wnOgotICAgICAgICAgIGNhc2UgMDE0OiAgICAgICAgICAgICAg ICAgICAgIC8qIEN0cmwtTCBvciBMIG9yIEN0cmwtVyAqLwotICAgICAgICAgIGNhc2UgMDI3Ogot ICAgICAgICAgICAgY2tfcmVwYWludCgpOyAgICAgICAgICAgICAgIC8qIFJlZnJlc2ggc2NyZWVu ICovCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgd2hpbGUg KHgtLSA+IDApICAgICAgICAgICAgICAgICAgICAgLyogU29hayB1cCBhbnkgcmVzdCAqLwotICAg ICAgYyA9IGNvbmluYygxKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi0jaWZkZWYgRlRQX1RJTUVP VVQKLS8qIGZjID0gMCBmb3IgcmVhZDsgMSBmb3Igd3JpdGUgKi8KLXN0YXRpYyBpbnQKLWNoZWNr X2RhdGFfY29ubmVjdGlvbihmZCxmYykgaW50IGZkLCBmYzsgewotICAgIGludCB4OwotICAgIHN0 cnVjdCB0aW1ldmFsIHR2OwotICAgIGZkX3NldCBpbiwgb3V0LCBlcnI7Ci0KLSAgICBpZiAoZnRw X3RpbWVvdXQgPCAxTCkKLSAgICAgIHJldHVybigwKTsKLQotICAgIEZEX1pFUk8oJmluKTsKLSAg ICBGRF9aRVJPKCZvdXQpOwotICAgIEZEX1pFUk8oJmVycik7Ci0gICAgRkRfU0VUKGZkLGZjID8g Jm91dCA6ICZpbik7Ci0gICAgdHYudHZfc2VjID0gZnRwX3RpbWVvdXQ7CQkvKiBUaW1lIGxpbWl0 ICovCi0gICAgdHYudHZfdXNlYyA9IDBMOwotCi0jaWZkZWYgSU5UU0VMRUNUCi0gICAgeCA9IHNl bGVjdChGRF9TRVRTSVpFLChpbnQgKikmaW4sKGludCAqKSZvdXQsKGludCAqKSZlcnIsJnR2KTsK LSNlbHNlCi0gICAgeCA9IHNlbGVjdChGRF9TRVRTSVpFLCZpbiwmb3V0LCZlcnIsJnR2KTsKLSNl bmRpZiAvKiBJTlRTRUxFQ1QgKi8KLQotICAgIGlmICh4ID09IDApIHsKLSNpZmRlZiBFV09VTERC TE9DSwotCWVycm5vID0gRVdPVUxEQkxPQ0s7Ci0jZWxzZQotI2lmZGVmIEVBR0FJTgotCWVycm5v ID0gRUFHQUlOOwotI2Vsc2UKLQllcnJubyA9IDExOwotI2VuZGlmCS8qIEVBR0FJTiAqLwotI2Vu ZGlmCS8qIEVXT1VMREJMT0NLICovCi0JZGVidWcoRjEwMCwiZnRwIGNoZWNrX2RhdGFfY29ubmVj dGlvbiBUSU1PVVQiLCIiLDApOwotCXJldHVybigtMyk7Ci0gICAgfQotICAgIHJldHVybigwKTsK LX0KLSNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLwotCi0vKiB6enNlbmQgLSB1c2VkIGJ5IGJ1ZmZl cmVkIG91dHB1dCBtYWNyb3MuICovCi0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotenpz ZW5kKGludCBmZCwgQ0hBUiBjKQotI2Vsc2UKLXp6c2VuZChmZCxjKSBpbnQgZmQ7IENIQVIgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGludCByYzsKLQotICAgIGRlYnVnKEYxMDEs Inp6c2VuZCB1Y2J1ZnNpeiIsIiIsdWNidWZzaXopOwotICAgIGRlYnVnKEYxMDEsInp6c2VuZCBu b3V0IiwiIixub3V0KTsKLSAgICBkZWJ1ZyhGMTExLCJ6enNlbmQiLCJzZWN1cmU/IixmdHBpc3Nl Y3VyZSgpKTsKLQotICAgIGlmIChpc2NhbmNlbGVkKCkpICAgICAgICAgICAgICAgICAgIC8qIENo ZWNrIGZvciBjYW5jZWxsYXRpb24gKi8KLSAgICAgIHJldHVybigtOSk7Ci0KLSNpZmRlZiBGVFBf VElNRU9VVCAgICAKLSAgICBmdHBfdGltZWRfb3V0ID0gMDsKLSAgICBpZiAoY2hlY2tfZGF0YV9j b25uZWN0aW9uKGZkLDEpIDwgMCkgewotCWZ0cF90aW1lZF9vdXQgPSAxOwotCXJldHVybigtMyk7 Ci0gICAgfQotI2VuZGlmCS8qIEZUUF9USU1FT1VUICovCi0KLSAgICByYyA9ICghZnRwaXNzZWN1 cmUoKSkgPwotICAgICAgc2VuZChmZCwgKFNFTkRBUkcyVFlQRSl1Y2J1Ziwgbm91dCwgMCkgOgot ICAgICAgICBzZWN1cmVfcHV0YnVmKGZkLCB1Y2J1Ziwgbm91dCk7Ci0gICAgdWNidWZbbm91dF0g PSBOVUw7Ci0gICAgbm91dCA9IDA7Ci0gICAgdWNidWZbbm91dCsrXSA9IGM7Ci0gICAgc3BhY2tl dHMrKzsKLSAgICBwa3RudW0rKzsKLSAgICBpZiAocmMgPiAtMSAmJiBmZGlzcGxhICE9IFhZRkRf QikgewotICAgICAgICBzcGt0bCA9IG5vdXQ7Ci0gICAgICAgIGZ0c2NyZWVuKFNDUl9QVCwnRCcs KENLX09GRl9UKXNwYWNrZXRzLE5VTEwpOwotICAgIH0KLSAgICByZXR1cm4ocmMpOwotfQotCi0v KiBjIG0gZCBsIGkgbiBwIHUgdCAgLS0gIENvbW1hbmQtbGluZSBQVVQgKi8KLQotaW50Ci1jbWRs aW5wdXQoc3RheSkgaW50IHN0YXk7IHsKLSAgICBpbnQgeCwgcmMgPSAwLCBkb25lID0gMCwgZ29v ZCA9IDAsIHN0YXR1cyA9IDA7Ci0gICAgVUxPTkcgdDAsIHQxOyAgICAgICAgICAgICAgICAgICAg ICAgLyogVGltZXMgZm9yIHN0YXRzICovCi0jaWZkZWYgR0ZUSU1FUgotICAgIENLRkxPQVQgc2Vj OwotI2Vsc2UKLSAgICBpbnQgc2VjID0gMDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSAgICBp ZiAocXVpZXQpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiAtcSByZWFsbHkgbWVhbnMgcXVp ZXQgKi8KLSAgICAgICAgZGlzcGxhID0gMDsKLSAgICAgICAgZmRpc3BsYSA9IDA7Ci0gICAgfSBl bHNlIHsKLSAgICAgICAgZGlzcGxhID0gMTsKLSAgICAgICAgZmRpc3BsYSA9IFhZRkRfQjsKLSAg ICB9Ci0gICAgdGVzdGluZyA9IDA7Ci0gICAgb3V0MnNjcmVlbiA9IDA7Ci0gICAgZHB5YWN0aXZl ID0gMDsKLSAgICB3aGF0ID0gV19GVFB8V19TRU5EOwotCi0jaWZuZGVmIE5PU1BMCi0gICAgY21k X3F1b3RpbmcgPSAwOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgc25kc3JjID0gbmZpbHM7Ci0K LSAgICB0MCA9IGdtc3RpbWVyKCk7ICAgICAgICAgICAgICAgICAgICAvKiBSZWNvcmQgc3RhcnRp bmcgdGltZSAqLwotCi0gICAgd2hpbGUgKCFkb25lICYmICFjYW5jZWxncm91cCkgeyAgICAgLyog TG9vcCBmb3IgYWxsIGZpbGVzICovCi0KLSAgICAgICAgY2FuY2VsZmlsZSA9IDA7Ci0gICAgICAg IHggPSBnbmZpbGUoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IG5leHQgZmlsZSBmcm9tIGxp c3QocykgKi8KLSAgICAgICAgaWYgKHggPT0gMCkgICAgICAgICAgICAgICAgICAgICAvKiAoc2Vl IGduZmlsZSgpIGNvbW1lbnRzLi4uKSAqLwotICAgICAgICAgIHggPSBnbmZlcnJvcjsKLQotICAg ICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAg ICAvKiBGaWxlIHRvIHNlbmQgKi8KLSAgICAgICAgICAgIHJjID0gcHV0ZmlsZShGVFBfUFVULCAg ICAgICAvKiBGdW5jdGlvbiAoUFVULCBBUFBFTkQpICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgZmlsbmFtLCAgICAgICAgLyogTG9jYWwgZmlsZSB0byBzZW5kICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAgZmlsbmFtLCAgICAgICAgLyogUmVtb3RlIG5hbWUgZm9yIGZpbGUgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgICBmb3JjZXR5cGUsICAgICAvKiBUZXh0L2JpbmFyeSBtb2Rl IGZvcmNlZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgIC8qIE5v dCBtb3ZpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAvKiBO byBtb3ZlLXRvICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgLyog Tm8gcmVuYW1lLXRvICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAg LyogTm8gc2VydmVyLXJlbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9jbnYs ICAgICAgIC8qIEZpbGVuYW1lIGNvbnZlcnNpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAg ICAwLCAgICAgICAgICAgICAvKiBVbmlxdWUtc2VydmVyLW5hbWVzICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAgLTEsICAgICAgICAgICAgLyogQWxsIGZpbGUgdHlwZXMgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAvKiBObyBwZXJtaXNzaW9ucyAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgIC0xLCAgICAgICAgICAgIC8qIE5vIGNoYXJhY3RlciBzZXRz ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgLTEsICAgICAgICAgICAgLyogTm8gY2hhcmFj dGVyIHNldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAvKiBO byB1cGRhdGUgb3IgcmVzdGFydCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgICBpZiAocmMgPiAtMSkgewotICAgICAgICAgICAgICAgIGdvb2QrKzsKLSAgICAgICAg ICAgICAgICBzdGF0dXMgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNhbmNl bGZpbGUpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAvKiBPciBi cmVhaz8gKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyYyA8IDApIHsKLSAgICAg ICAgICAgICAgICBmdHBfZmFpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51 ZTsgICAgICAgICAgICAgICAgICAgLyogT3IgYnJlYWs/ICovCi0KLSAgICAgICAgICBjYXNlIDA6 ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBtb3JlIGZpbGVzLCBkb25lICovCi0gICAgICAg ICAgICBkb25lKys7Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgIGNhc2UgLTI6 Ci0gICAgICAgICAgY2FzZSAtMToKLSAgICAgICAgICAgIHByaW50ZigiPyVzOiBmaWxlIG5vdCBm b3VuZCAtIFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAgICBwdXRlcnJvciA/ICJGYXRhbCIg OiAiV2FybmluZyIsCi0gICAgICAgICAgICAgICAgICAgZmlsbmFtCi0gICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAvKiBvciBicmVh az8gKi8KLSAgICAgICAgICBjYXNlIC0zOgotICAgICAgICAgICAgcHJpbnRmKCI/V2FybmluZyBh Y2Nlc3MgZGVuaWVkIC0gXCIlc1wiXG4iLCBmaWxuYW0pOwotICAgICAgICAgICAgY29udGludWU7 ICAgICAgICAgICAgICAgICAgIC8qIG9yIGJyZWFrPyAqLwotICAgICAgICAgIGNhc2UgLTU6Ci0g ICAgICAgICAgICBwcmludGYoIj9Ub28gbWFueSBmaWxlcyBtYXRjaFxuIik7Ci0gICAgICAgICAg ICBkb25lKys7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIC02OgotICAgICAg ICAgICAgaWYgKGdvb2QgPCAxKQotICAgICAgICAgICAgICBwcmludGYoIj9ObyBmaWxlcyBzZWxl Y3RlZFxuIik7Ci0gICAgICAgICAgICBkb25lKys7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcHJpbnRmKCI/Z2V0bmV4dGZpbGUoKSAtIHVua25v d24gZmFpbHVyZVxuIik7Ci0gICAgICAgICAgICBkb25lKys7Ci0gICAgICAgIH0KLSAgICB9Ci0g ICAgaWYgKHN0YXR1cyA+IDApIHsKLSAgICAgICAgaWYgKGNhbmNlbGdyb3VwKQotICAgICAgICAg IHN0YXR1cyA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKGNhbmNlbGZpbGUgJiYgZ29vZCA8IDEpCi0g ICAgICAgICAgc3RhdHVzID0gMDsKLSAgICB9Ci0gICAgc3VjY2VzcyA9IHN0YXR1czsKLSAgICB4 ID0gc3VjY2VzczsKLSAgICBpZiAoeCA+IC0xKSB7Ci0gICAgICAgIGxhc3R4ZmVyID0gV19GVFB8 V19TRU5EOwotICAgICAgICB4ZmVyc3RhdCA9IHN1Y2Nlc3M7Ci0gICAgfQotICAgIHQxID0gZ21z dGltZXIoKTsgICAgICAgICAgICAgICAgICAgIC8qIEVuZCB0aW1lICovCi0jaWZkZWYgR0ZUSU1F UgotICAgIHNlYyA9IChDS0ZMT0FUKSgoQ0tGTE9BVCkodDEgLSB0MCkgLyAxMDAwLjApOyAvKiBT dGF0cyAqLwotICAgIGlmICghc2VjKSBzZWMgPSAwLjAwMTsKLSAgICBmcHRzZWNzID0gc2VjOwot I2Vsc2UKLSAgICBzZWMgPSAodDEgLSB0MCkgLyAxMDAwOwotICAgIGlmICghc2VjKSBzZWMgPSAx OwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICB0ZmNwcyA9IChsb25nKSAodGZjIC8gc2VjKTsK LSAgICB0c2VjcyA9IChpbnQpc2VjOwotICAgIGxhc3R4ZmVyID0gV19GVFB8V19TRU5EOwotICAg IHhmZXJzdGF0ID0gc3VjY2VzczsKLSAgICBpZiAoZHB5YWN0aXZlKQotICAgICAgZnRzY3JlZW4o c3RhdHVzID4gMCA/IFNDUl9UQyA6IFNDUl9DVywgMCwgKENLX09GRl9UKTAsICIiKTsKLSAgICBp ZiAoIXN0YXkpCi0gICAgICBkb2V4aXQoc3VjY2VzcyA/IEdPT0RfRVhJVCA6IEJBRF9FWElULCAt MSk7Ci0gICAgcmV0dXJuKHN1Y2Nlc3MpOwotfQotCi0KLS8qICBkIG8gZiB0IHAgcCB1IHQgIC0t ICBQYXJzZSBhbmQgZXhlY3V0ZSBQVVQsIE1QVVQsIGFuZCBBUFBFTkQgICovCi0KLWludAotI2lm ZGVmIENLX0FOU0lDCi1kb2Z0cHB1dChpbnQgY3gsIGludCB3aG8pICAgICAgICAgICAgICAgLyog d2hvID09IDEgZm9yIGZ0cCwgMCBmb3Iga2VybWl0ICovCi0jZWxzZQotZG9mdHBwdXQoY3gsd2hv KSBpbnQgY3gsIHdobzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHN0cnVjdCBGREIg c2YsIGZsLCBzdywgY207Ci0gICAgaW50IG4sIHJjLCBjb25maXJtZWQgPSAwLCB3aWxkID0gMCwg Z2V0dmFsID0gMCwgbXB1dCA9IDAsIGRvbmUgPSAwOwotICAgIGludCB4X2NudiA9IDAsIHhfdXNu ID0gMCwgeF9wcm0gPSAwLCBwdXRmbGFncyA9IDAsIHN0YXR1cyA9IDAsIGdvb2QgPSAwOwotICAg IGNoYXIgKiBzLCAqIHMyOwotCi0gICAgaW50IHhfY3NsLCB4X2NzciA9IC0xOyAgICAgICAgICAg ICAgLyogTG9jYWwgYW5kIHJlbW90ZSBjaGFyc2V0cyAqLwotICAgIGludCB4X3hsYSA9IDA7Ci0g ICAgaW50IHhfcmVjdXJzZSA9IDA7Ci0gICAgY2hhciBjLCAqIHA7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogV29ya2VycyAqLwotI2lmZGVmIFBVVEFSUkFZCi0gICAgaW50IHJhbmdlWzJdOyAg ICAgICAgICAgICAgICAgICAgICAgLyogQXJyYXkgcmFuZ2UgKi8KLSAgICBjaGFyICoqIGFwID0g TlVMTDsgICAgICAgICAgICAgICAgICAvKiBBcnJheSBwb2ludGVyICovCi0gICAgaW50IGFycmF5 eCA9IC0xOyAgICAgICAgICAgICAgICAgICAgLyogQXJyYXkgaW5kZXggKi8KLSNlbmRpZiAvKiBQ VVRBUlJBWSAqLwotICAgIFVMT05HIHQwID0gMEwsIHQxID0gMEw7ICAgICAgICAgICAgIC8qIFRp bWVzIGZvciBzdGF0cyAqLwotI2lmZGVmIEdGVElNRVIKLSAgICBDS0ZMT0FUIHNlYzsKLSNlbHNl Ci0gICAgaW50IHNlYyA9IDA7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0gICAgc3RydWN0IHN0 cmluZ2ludCBwdltTTkRfTUFYKzFdOyAgICAvKiBUZW1wb3JhcnkgYXJyYXkgZm9yIHN3aXRjaCB2 YWx1ZXMgKi8KLSAgICBzdWNjZXNzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1 bWUgZmFpbHVyZSAqLwotICAgIGZvcmNldHlwZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8q IE5vIC9URVhUIG9yIC9CSU5BUlkgZ2l2ZW4geWV0ICovCi0gICAgb3V0MnNjcmVlbiA9IDA7ICAg ICAgICAgICAgICAgICAgICAgLyogTm90IG91dHB1dHRpbmcgZmlsZSB0byBzY3JlZW4gKi8KLSAg ICBwdXRmbGFncyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQVVQgb3B0aW9ucyAqLwot ICAgIHhfY252ID0gZnRwX2NudjsgICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lIGNvbnZl cnNpb24gKi8KLSAgICB4X3VzbiA9IGZ0cF91c247ICAgICAgICAgICAgICAgICAgICAvKiBVbmlx dWUgc2VydmVyIG5hbWVzICovCi0gICAgeF9wcm0gPSBmdHBfcHJtOyAgICAgICAgICAgICAgICAg ICAgLyogUGVybWlzc2lvbnMgKi8KLSAgICBpZiAoeF9wcm0gPT0gU0VUX0FVVE8pICAgICAgICAg ICAgICAvKiBQZXJtaXNzaW9ucyBBVVRPICovCi0gICAgICB4X3BybSA9IGFsaWtlOwotCi0jaWZu ZGVmIE5PQ1NFVFMKLSAgICB4X2NzciA9IGZ0cF9jc3I7ICAgICAgICAgICAgICAgICAgICAvKiBJ bmhlcml0IGdsb2JhbCBzZXJ2ZXIgY2hhcnNldCAqLwotICAgIHhfY3NsID0gZnRwX2NzbDsKLSAg ICBpZiAoeF9jc2wgPCAwKQotICAgICAgeF9jc2wgPSBmY2hhcnNldDsKLSAgICB4X3hsYSA9IGZ0 cF94bGE7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0gICAgbWFrZXN0cigmZmlsZWZpbGUsTlVM TCk7ICAgICAgICAgICAgLyogTm8gZmlsZW5hbWUgbGlzdCBmaWxlIHlldC4gKi8KLSAgICBtYWtl c3RyKCZzcnZfcmVuYW0sTlVMTCk7CQkvKiBDbGVhciAvU0VSVkVSLVJFTkFNRTogKi8KLSAgICBt YWtlc3RyKCZzbmRfcmVuYW1lLE5VTEwpOwkJLyogIFBVVCAvUkVOQU1FICovCi0gICAgbWFrZXN0 cigmc25kX21vdmUsTlVMTCk7CQkvKiAgUFVUIC9NT1ZFICovCi0gICAgcHV0cGF0aFswXSA9IE5V TDsgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBmb3Igc3luY2RpcigpLiAqLwotICAg IHB1dGVycm9yID0gZnRwX2VycjsgICAgICAgICAgICAgICAgIC8qIEluaGVyaXQgZ2xvYmFsIGVy cm9yIGFjdGlvbi4gKi8KLSAgICB3aGF0ID0gV19TRU5EfFdfRlRQOyAgICAgICAgICAgICAgICAv KiBXaGF0IHdlJ3JlIGRvaW5nIChzZW5kaW5nIHcvRlRQKSAqLwotICAgIGFzbmFtYnVmWzBdID0g TlVMOyAgICAgICAgICAgICAgICAgIC8qIENsZWFyIGFzLW5hbWUgYnVmZmVyICovCi0KLSAgICBp ZiAoZ19mdHBfdHlwID4gLTEpIHsgICAgICAgICAgICAgICAvKiBSZXN0b3JlIFRZUEUgaWYgc2F2 ZWQgKi8KLSAgICAgICAgZnRwX3R5cCA9IGdfZnRwX3R5cDsKLSAgICAgICAgLyogZ19mdHBfdHlw ID0gLTE7ICovCi0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPD0gU05EX01BWDsgaSsrKSB7ICAg IC8qIEluaXRpYWxpemUgc3dpdGNoIHZhbHVlcyAqLwotICAgICAgICBwdltpXS5zdmFsID0gTlVM TDsgICAgICAgICAgICAgIC8qIHRvIG51bGwgcG9pbnRlcnMgKi8KLSAgICAgICAgcHZbaV0uaXZh bCA9IC0xOyAgICAgICAgICAgICAgICAvKiBhbmQgLTEgaW50IHZhbHVlcyAqLwotICAgICAgICBw dltpXS53dmFsID0gKENLX09GRl9UKS0xOwkvKiBhbmQgLTEgd2lkZSB2YWx1ZXMgKi8KLSAgICB9 Ci0gICAgaWYgKHdobyA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbGVkIHdpdGgg dW5wcmVmaXhlZCBjb21tYW5kICovCi0gICAgICAgIHN3aXRjaCAoY3gpIHsKLSAgICAgICAgICBj YXNlIFhYUlNFTjogIHB2W1NORF9SRVNdLml2YWwgPSAxOyBicmVhazsKLSAgICAgICAgICBjYXNl IFhYQ1NFTjogIHB2W1NORF9DTURdLml2YWwgPSAxOyBicmVhazsKLSAgICAgICAgICBjYXNlIFhY TU9WRTogIHB2W1NORF9ERUxdLml2YWwgPSAxOyBicmVhazsKLSAgICAgICAgICBjYXNlIFhYTU1P VkU6IHB2W1NORF9ERUxdLml2YWwgPSAxOyAvKiBmYWxsIHRocnUgKi8KLSAgICAgICAgICBjYXNl IFhYTVNFOiAgIG1wdXQrKzsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotCWlmIChj eCA9PSBGVFBfUkVQKQotCSAgcHZbU05EX1JFU10uaXZhbCA9IDE7Ci0gICAgICAgIGlmIChjeCA9 PSBGVFBfTVBVKQotICAgICAgICAgIG1wdXQrKzsKLSAgICB9Ci0gICAgY21mZGJpKCZzdywgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLwot ICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAg ICAgICAgICJGaWxlbmFtZSwgb3Igc3dpdGNoIiwgICAgICAgLyogaGxwbXNnICovCi0gICAgICAg ICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAg ICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0g ICAgICAgICAgIG5wdXRzd2ksICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBk YXRhIDE6IHRibCBzaXplICovCi0gICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotICAgICAgICAgICB4eHN0 cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAg ICAgICAgcHV0c3dpLCAgICAgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCi0g ICAgICAgICAgICZzZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0 IEZEQiAqLwotICAgICAgICAgICApOwotICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDNyZCBGREIgLSBsb2NhbCBmaWxlc3BlYyAqLwotICAgICAgICAgICBfQ01GTEQs ICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLSAgICAgICAg ICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAq LwotICAgICAgICAgICB4eHN0cmluZywKLSAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgJmNt Ci0gICAgICAgICAgICk7Ci0gICAgY21mZGJpKCZjbSwgICAgICAgICAgICAgICAgICAgICAgICAg LyogNHRoIEZEQiAtIENvbmZpcm1hdGlvbiAqLwotICAgICAgICAgICBfQ01DRk0sICAgICAgICAg ICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLSAgICAgICAgICAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotICAgICAg ICAgICBOVUxMLAotICAgICAgICAgICBOVUxMLAotICAgICAgICAgICBOVUxMCi0gICAgICAgICAg ICk7Ci0KLSAgYWdhaW46Ci0gICAgY21mZGJpKCZzZiwgICAgICAgICAgICAgICAgICAgICAgICAg LyogMm5kIEZEQiAtIGZpbGUgdG8gc2VuZCAqLwotICAgICAgICAgICBfQ01JRkksICAgICAgICAg ICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIC8qIDAgPSBwYXJzZSBmaWxl cywgMSA9IHBhcnNlIGZpbGVzIG9yIGRpcnMsIDIgPSBza2lwIHN5bWxpbmtzICovCi0gICAgICAg ICAgIG5vbGlua3MgfCB4X3JlY3Vyc2UsICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEg Ki8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXJmbGcgMCBt ZWFucyAibm90IGRpcnMgb25seSIgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsCi0gICAgICAgICAg IE5VTEwsCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICBtcHV0ID8gJmNtIDogJmZsCi0jZWxz ZQotCSAgICZmbAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgKTsKLQotICAgIHdo aWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIHplcm8gb3IgbW9yZSBz d2l0Y2hlcyAqLwotICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAgICAgIC8qIFBh cnNlIHNvbWV0aGluZyAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcHV0IGNtZmRiIEEiLCIi LHgpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcHV0IGZjb2RlIEEiLCIiLGNtcmVzdWx0LmZj b2RlKTsKLSAgICAgICAgaWYgKHggPCAwKSAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciAq LwotICAgICAgICAgIGdvdG8geHB1dHg7ICAgICAgICAgICAgICAgICAgIC8qIG9yIHJlcGFyc2Ug bmVlZGVkICovCi0gICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpICAgLyogQnJl YWsgb3V0IG9mIGxvb3AgaWYgbm90IGEgc3dpdGNoICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIGMgPSBjbWdicmsoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IGJyZWFrIGNoYXJhY3Rl ciAqLwotICAgICAgICBnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpOyAvKiB0byBzZWUg aG93IHRoZXkgZW5kZWQgdGhlIHN3aXRjaCAqLwotICAgICAgICBpZiAoZ2V0dmFsICYmICEoY21y ZXN1bHQua2ZsYWdzICYgQ01fQVJHKSkgewotICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0 Y2ggZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcbiIpOwotICAgICAgICAgICAgeCA9IC05OwotICAg ICAgICAgICAgZ290byB4cHV0eDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWdldHZhbCAmJiAo Y21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRj aCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAg ICAgICBnb3RvIHhwdXR4OwotICAgICAgICB9Ci0gICAgICAgIG4gPSBjbXJlc3VsdC5ucmVzdWx0 OyAgICAgICAgICAgLyogTnVtZXJpYyByZXN1bHQgPSBzd2l0Y2ggdmFsdWUgKi8KLSAgICAgICAg ZGVidWcoRjEwMSwiZnRwIHB1dCBzd2l0Y2giLCIiLG4pOwotCi0gICAgICAgIHN3aXRjaCAobikg eyAgICAgICAgICAgICAgICAgICAgLyogUHJvY2VzcyB0aGUgc3dpdGNoICovCi0gICAgICAgICAg Y2FzZSBTTkRfQUZUOiAgICAgICAgICAgICAgICAgLyogU2VuZCAvQUZURVI6ZGF0ZS10aW1lICov Ci0gICAgICAgICAgY2FzZSBTTkRfQkVGOiAgICAgICAgICAgICAgICAgLyogU2VuZCAvQkVGT1JF OmRhdGUtdGltZSAqLwotICAgICAgICAgIGNhc2UgU05EX05BRjogICAgICAgICAgICAgICAgIC8q IFNlbmQgL05PVC1BRlRFUjpkYXRlLXRpbWUgKi8KLSAgICAgICAgICBjYXNlIFNORF9OQkU6ICAg ICAgICAgICAgICAgICAvKiBTZW5kIC9OT1QtQkVGT1JFOmRhdGUtdGltZSAqLwotICAgICAgICAg ICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgaWYgKCh4ID0gY21kYXRlKCJGaWxl IGRhdGUtdGltZSIsIiIsJnMsMCx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgIGlm ICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0RhdGUtdGltZSByZXF1 aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgZ290byB4cHV0eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IHB2W25dLml2YWwgPSAxOwotICAgICAgICAgICAgbWFrZXN0cigmKHB2W25dLnN2YWwpLHMpOwot ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNORF9BU046ICAgICAgICAgICAg ICAgICAvKiAvQVMtTkFNRTogKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBwdXQgL2Fz LW5hbWUgZ2V0dmFsIiwiIixnZXR2YWwpOwotICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFr OwotICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIk5hbWUgdG8gc2VuZCB1bmRlciIsIiIsJnMs TlVMTCkpIDwgMCkgewotICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAg ICAgICAgICAgIHByaW50ZigiP25hbWUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgICAg ICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCksYnJzdHJp cChzKSk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgcHV0IC9hcy1uYW1lIDEiLHB2W25d LnN2YWwsMCk7Ci0gICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkgcHZbbl0uaXZhbCA9IDE7Ci0g ICAgICAgICAgICBicmVhazsKLQotI2lmZGVmIFBVVEFSUkFZCi0gICAgICAgICAgY2FzZSBTTkRf QVJSOiAgICAgICAgICAgICAgICAgLyogL0FSUkFZICovCi0gICAgICAgICAgICBpZiAoIWdldHZh bCkgYnJlYWs7Ci0gICAgICAgICAgICBhcCA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAoKHggPSBj bWZsZCgiQXJyYXkgbmFtZSAoYSBzaW5nbGUgbGV0dGVyIHdpbGwgZG8pIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAp KSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykKLQkJICBicmVhazsKLQkJZWxz ZQotCQkgIHJldHVybih4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoeCA9IGFy cmF5Ym91bmRzKHMsJihyYW5nZVswXSksJihyYW5nZVsxXSkpKSA8IDApIHsKLSAgICAgICAgICAg ICAgICBwcmludGYoIj9CYWQgYXJyYXk6ICVzXG4iLHMpOwotICAgICAgICAgICAgICAgIHJldHVy bigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIShhcCA9IGFfcHRyW3hdKSkg ewotICAgICAgICAgICAgICAgIHByaW50ZigiP05vIHN1Y2ggYXJyYXk6ICVzXG4iLHMpOwotICAg ICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdltu XS5pdmFsID0gMTsKLSAgICAgICAgICAgIHB2W1NORF9DTURdLml2YWwgPSAwOyAgICAgICAvKiBV bmRvIGFueSBjb25mbGljdGluZyBvbmVzLi4uICovCi0gICAgICAgICAgICBwdltTTkRfUkVTXS5p dmFsID0gMDsKLSAgICAgICAgICAgIHB2W1NORF9GSUxdLml2YWwgPSAwOwotICAgICAgICAgICAg YXJyYXl4ID0geDsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFBVVEFSUkFZICovCi0K LSAgICAgICAgICBjYXNlIFNORF9CSU46ICAgICAgICAgICAgICAgICAvKiAvQklOQVJZICovCi0g ICAgICAgICAgY2FzZSBTTkRfVFhUOiAgICAgICAgICAgICAgICAgLyogL1RFWFQgb3IgL0FTQ0lJ ICovCi0gICAgICAgICAgY2FzZSBTTkRfVEVOOiAgICAgICAgICAgICAgICAgLyogL1RFTkVYICov Ci0gICAgICAgICAgICBwdltTTkRfQklOXS5pdmFsID0gMDsKLSAgICAgICAgICAgIHB2W1NORF9U WFRdLml2YWwgPSAwOwotICAgICAgICAgICAgcHZbU05EX1RFTl0uaXZhbCA9IDA7Ci0gICAgICAg ICAgICBwdltuXS5pdmFsID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWZkZWYgUFVUUElQ RQotICAgICAgICAgIGNhc2UgU05EX0NNRDogICAgICAgICAgICAgICAgIC8qIFRoZXNlIHRha2Ug bm8gYXJncyAqLwotICAgICAgICAgICAgaWYgKG5vcHVzaCkgewotICAgICAgICAgICAgICAgIHBy aW50ZigiP1NvcnJ5LCBzeXN0ZW0gY29tbWFuZCBhY2Nlc3MgaXMgZGlzYWJsZWRcbiIpOwotICAg ICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICBnb3RvIHhwdXR4OwotICAgICAg ICAgICAgfQotI2lmZGVmIFBJUEVTRU5ECi0gICAgICAgICAgICBlbHNlIGlmIChzbmRmaWx0ZXIp IHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgbm8gUFVUIC9DT01NQU5EIHdoZW4g U0VORCBGSUxURVIgc2VsZWN0ZWRcbiIpOwotICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAg ICAgICAgICAgICBnb3RvIHhwdXR4OwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIFBJUEVTRU5E ICovCi0gICAgICAgICAgICBzdy5obHBtc2cgPSAiQ29tbWFuZCwgb3Igc3dpdGNoIjsgLyogQ2hh bmdlIGhlbHAgbWVzc2FnZSAqLwotICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7ICAgICAgICAg ICAgIC8qIEp1c3Qgc2V0IHRoZSBmbGFnICovCi0gICAgICAgICAgICBwdltTTkRfQVJSXS5pdmFs ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFBVVFBJUEUgKi8KLQotI2lmZGVm IENLU1lNTElOSwotICAgICAgICAgIGNhc2UgU05EX0xOSzoKLSAgICAgICAgICAgIG5vbGlua3Mg PSAwOwotICAgICAgICAgICAgZ290byBhZ2FpbjsJCQkvKiBCZWNhdXNlIENNSUZJIHBhcmFtcyBj aGFuZ2VkLi4uICovCi0gICAgICAgICAgY2FzZSBTTkRfTkxLOgotICAgICAgICAgICAgbm9saW5r cyA9IDI7Ci0gICAgICAgICAgICBnb3RvIGFnYWluOwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwot Ci0jaWZkZWYgRlRQX1JFU1RBUlQKLSAgICAgICAgICBjYXNlIFNORF9SRVM6ICAgICAgICAgICAg ICAgICAvKiAvUkVDT1ZFUiAocmVzZW5kKSAqLwotICAgICAgICAgICAgcHZbU05EX0FSUl0uaXZh bCA9IDA7ICAgICAgIC8qIGZhbGwgdGhydSBvbiBwdXJwb3NlLi4uICovCi0jZW5kaWYgLyogRlRQ X1JFU1RBUlQgKi8KLQotICAgICAgICAgIGNhc2UgU05EX05PQjoKLSAgICAgICAgICBjYXNlIFNO RF9ERUw6ICAgICAgICAgICAgICAgICAvKiAvREVMRVRFICovCi0gICAgICAgICAgY2FzZSBTTkRf U0hIOiAgICAgICAgICAgICAgICAgLyogL1FVSUVUICovCi0gICAgICAgICAgY2FzZSBTTkRfVVBE OiAgICAgICAgICAgICAgICAgLyogL1VQREFURSAqLwotICAgICAgICAgIGNhc2UgU05EX1NJTTog ICAgICAgICAgICAgICAgIC8qIC9VUERBVEUgKi8KLSAgICAgICAgICBjYXNlIFNORF9VU046ICAg ICAgICAgICAgICAgICAvKiAvVU5JUVVFICovCi0gICAgICAgICAgICBwdltuXS5pdmFsID0gMTsg ICAgICAgICAgICAgLyogSnVzdCBzZXQgdGhlIGZsYWcgKi8KLSAgICAgICAgICAgIGJyZWFrOwot Ci0gICAgICAgICAgY2FzZSBTTkRfUkVDOiAgICAgICAgICAgICAgICAgLyogL1JFQ1VSU0lWRSAq LwotICAgICAgICAgICAgcmVjdXJzaXZlID0gMjsgICAgICAgICAgICAgIC8qIE11c3QgYmUgc2V0 IGJlZm9yZSBjbWlmaSgpICovCi0gICAgICAgICAgICB4X3JlY3Vyc2UgPSAxOwotICAgICAgICAg ICAgZ290byBhZ2FpbjsJCQkvKiBCZWNhdXNlIENNSUZJIHBhcmFtcyBjaGFuZ2VkLi4uICovCi0g ICAgICAgICAgICBicmVhazsKLQotI2lmZGVmIFVOSVhPUk9TSwotICAgICAgICAgIGNhc2UgU05E X0RPVDogICAgICAgICAgICAgICAgIC8qIC9ET1RGSUxFUyAqLwotICAgICAgICAgICAgbWF0Y2hk b3QgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBTTkRfTk9EOiAgICAg ICAgICAgICAgICAgLyogL05PRE9URklMRVMgKi8KLSAgICAgICAgICAgIG1hdGNoZG90ID0gMDsK LSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotCi0gICAgICAgICAg Y2FzZSBTTkRfRVJSOiAgICAgICAgICAgICAgICAgLyogL0VSUk9SLUFDVElPTiAqLwotICAgICAg ICAgICAgaWYgKCh4ID0gY21rZXkocW9ycCwyLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAg ICAgICAgICBnb3RvIHhwdXR4OwotICAgICAgICAgICAgcHZbbl0uaXZhbCA9IHg7Ci0gICAgICAg ICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU05EX0VYQzogICAgICAgICAgICAgICAgIC8q IEV4Y2x1ZGVzICovCi0gICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAg ICBpZiAoKHggPSBjbWZsZCgiUGF0dGVybiIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLSAgICAg ICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9Q YXR0ZXJuIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBnb3RvIHhwdXR4OwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgaWYgKHMpIGlmICghKnMpIHMgPSBOVUxMOwotICAgICAgICAgICAgbWFrZXN0 cigmKHB2W25dLnN2YWwpLHMpOwotICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwpCi0gICAgICAg ICAgICAgIHB2W25dLml2YWwgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBj YXNlIFNORF9QUk06ICAgICAgICAgICAgICAgICAvKiAvUEVSTUlTU0lPTlMgKi8KLSAgICAgICAg ICAgIGlmICghZ2V0dmFsKQotICAgICAgICAgICAgICB4ID0gMTsKLSAgICAgICAgICAgIGVsc2Ug aWYgKCh4ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAg ICAgICBnb3RvIHhwdXR4OwotICAgICAgICAgICAgcHZbU05EX1BSTV0uaXZhbCA9IHg7Ci0gICAg ICAgICAgICBicmVhazsKLQotI2lmZGVmIFBJUEVTRU5ECi0gICAgICAgICAgY2FzZSBTTkRfRkxU OiAgICAgICAgICAgICAgICAgLyogL0ZJTFRFUiAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwi ZnRwIHB1dCAvZmlsdGVyIGdldHZhbCIsIiIsZ2V0dmFsKTsKLSAgICAgICAgICAgIGlmICghZ2V0 dmFsKSBicmVhazsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJGaWx0ZXIgcHJvZ3JhbSB0 byBzZW5kIHRocm91Z2giLCIiLCZzLE5VTEwpKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAo eCA9PSAtMykKLSAgICAgICAgICAgICAgICAgIHMgPSAiIjsKLSAgICAgICAgICAgICAgICBlbHNl Ci0gICAgICAgICAgICAgICAgICBnb3RvIHhwdXR4OwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgaWYgKCpzKSBzID0gYnJzdHJpcChzKTsKLSAgICAgICAgICAgIHkgPSBzdHJsZW4ocyk7Ci0g ICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgeTsgeCsrKSB7ICAgLyogTWFrZSBzdXJlIHRoZXkg aW5jbHVkZWQgIlx2KC4uLikiICovCi0gICAgICAgICAgICAgICAgaWYgKHNbeF0gIT0gJ1xcJykg Y29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHNbeCsxXSA9PSAndicpIGJyZWFrOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHggPT0geSkgewotICAgICAgICAgICAgICAgIHBy aW50ZigKLSAgICAgICAgICAgICAgICAiP0ZpbHRlciBtdXN0IGNvbnRhaW4gYSByZXBsYWNlbWVu dCB2YXJpYWJsZSBmb3IgZmlsZW5hbWUuXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocykgaWYgKCEqcykgcyA9IE5VTEw7Ci0gICAgICAg ICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCkscyk7Ci0gICAgICAgICAgICBpZiAocHZbbl0uc3Zh bCkKLSAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSNl bmRpZiAvKiBQSVBFU0VORCAqLwotCi0gICAgICAgICAgY2FzZSBTTkRfTkFNOiAgICAgICAgICAg ICAgICAgLyogL0ZJTEVOQU1FUyAqLwotICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwot ICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkoZm50YWIsbmZudGFiLCIiLCJhdXRvbWF0aWMiLHh4 c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICBnb3RvIHhwdXR4OwotICAgICAgICAgICAgZGVi dWcoRjEwMSwiZnRwIHB1dCAvZmlsZW5hbWVzIiwiIix4KTsKLSAgICAgICAgICAgIHB2W25dLml2 YWwgPSB4OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNORF9TTUE6ICAg ICAgICAgICAgICAgICAvKiBTbWFsbGVyIC8gbGFyZ2VyIHRoYW4gKi8KLSAgICAgICAgICBjYXNl IFNORF9MQVI6IHsKLQkgICAgICBDS19PRkZfVCB5OwotCSAgICAgIGlmICghZ2V0dmFsKSBicmVh azsKLQkgICAgICBpZiAoKHggPSBjbW51bXcoIlNpemUgaW4gYnl0ZXMiLCIwIiwxMCwmeSx4eHN0 cmluZykpIDwgMCkKLQkJZ290byB4cHV0eDsKLQkgICAgICBwdltuXS53dmFsID0geTsKLQkgICAg ICBicmVhazsKLQkgIH0KLSAgICAgICAgICBjYXNlIFNORF9GSUw6ICAgICAgICAgICAgICAgICAv KiBOYW1lIG9mIGZpbGUgY29udGFpbmluZyBmaWxlbmFtZXMgKi8KLSAgICAgICAgICAgIGlmICgh Z2V0dmFsKSBicmVhazsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtaWZpKCJOYW1lIG9mIGZpbGUg Y29udGFpbmluZyBsaXN0IG9mIGZpbGVuYW1lcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIiIsJnMsJnkseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoeCA9 PSAtMykgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9GaWxlbmFtZSByZXF1aXJlZFxu Iik7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgZ290byB4cHV0eDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoeSAmJiBpc3dp bGQocykpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9XaWxkY2FyZHMgbm90IGFsbG93ZWRc biIpOwotICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICBnb3RvIHhwdXR4 OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHMpIGlmICghKnMpIHMgPSBOVUxMOwot ICAgICAgICAgICAgbWFrZXN0cigmKHB2W25dLnN2YWwpLHMpOwotICAgICAgICAgICAgaWYgKHB2 W25dLnN2YWwpIHsKLSAgICAgICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKLSAgICAgICAgICAg ICAgICBwdltTTkRfQVJSXS5pdmFsID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAgICAgcHZbbl0uaXZhbCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtcHV0 ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTTkRfTU9WOiAgICAg ICAgICAgICAgICAgLyogTU9WRSBhZnRlciAqLwotICAgICAgICAgIGNhc2UgU05EX1JFTjogICAg ICAgICAgICAgICAgIC8qIFJFTkFNRSBhZnRlciAqLwotICAgICAgICAgIGNhc2UgU05EX1NSTjog eyAgICAgICAgICAgICAgIC8qIFNFUlZFUi1SRU5BTUUgYWZ0ZXIgKi8KLSAgICAgICAgICAgICAg Y2hhciAqIG0gPSAiIjsKLSAgICAgICAgICAgICAgc3dpdGNoIChuKSB7Ci0gICAgICAgICAgICAg ICAgY2FzZSBTTkRfTU9WOgotICAgICAgICAgICAgICAgICAgbSA9ICJkZXZpY2UgYW5kL29yIGRp cmVjdG9yeSBmb3Igc291cmNlIGZpbGUgYWZ0ZXIgc2VuZGluZyI7Ci0gICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFNORF9SRU46Ci0gICAgICAgICAgICAgICAg ICBtID0gIm5ldyBuYW1lIGZvciBzb3VyY2UgZmlsZSBhZnRlciBzZW5kaW5nIjsKLSAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU05EX1NSTjoKLSAgICAgICAg ICAgICAgICAgIG0gPSAibmV3IG5hbWUgZm9yIGRlc3RpbmF0aW9uIGZpbGUgYWZ0ZXIgc2VuZGlu ZyI7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKG0s ICIiLCAmcywgbiA9PSBTTkRfTU9WID8geHhzdHJpbmcgOiBOVUxMKSkgPCAwKSB7Ci0gICAgICAg ICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi JXNcbiIsIG4gPT0gU05EX01PViA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI/RGVz dGluYXRpb24gcmVxdWlyZWQiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj9OZXcg bmFtZSByZXF1aXJlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICBnb3RvIHhwdXR4OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmIChzKSBp ZiAoISpzKSBzID0gTlVMTDsKLSAgICAgICAgICAgICAgbWFrZXN0cigmKHB2W25dLnN2YWwpLHMg PyBicnN0cmlwKHMpIDogTlVMTCk7Ci0gICAgICAgICAgICAgIHB2W25dLml2YWwgPSAocHZbbl0u c3ZhbCkgPyAxIDogMDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAg ICAgIGNhc2UgU05EX1NUQTogICAgICAgICAgICAgICAgIC8qIFN0YXJ0aW5nIHBvc2l0aW9uICg9 IFBTRU5EKSAqLwotICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAg aWYgKCh4ID0gY21udW0oIjAtYmFzZWQgcG9zaXRpb24iLCIwIiwxMCwmeSx4eHN0cmluZykpIDwg MCkKLSAgICAgICAgICAgICAgZ290byB4cHV0eDsKLSAgICAgICAgICAgIHB2W25dLml2YWwgPSB5 OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNORF9UWVA6ICAgICAgICAg ICAgICAgICAvKiAvVFlQRSAqLwotICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotICAg ICAgICAgICAgaWYgKCh4ID0gY21rZXkodHh0YmluLDMsIiIsImFsbCIseHhzdHJpbmcpKSA8IDAp Ci0gICAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgICAgICBwdltuXS5pdmFsID0gKHgg PT0gMikgPyAtMSA6IHg7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmbmRlZiBOT0NTRVRTCi0g ICAgICAgICAgY2FzZSBTTkRfQ1NMOiAgICAgICAgICAgICAgICAgLyogTG9jYWwgY2hhcmFjdGVy IHNldCAqLwotICAgICAgICAgIGNhc2UgU05EX0NTUjogICAgICAgICAgICAgICAgIC8qIFJlbW90 ZSAoc2VydmVyKSBjaGFyc2V0ICovCi0gICAgICAgICAgICBpZiAoKHggPSBjbWtleShmY3N0YWIs bmZpbGMsIiIsIiIseHhzdHJpbmcpKSA8IDApIHsKLQkJcmV0dXJuKCh4ID09IC0zKSA/IC0yIDog eCk7Ci0gICAgICAgICAgICB9Ci0JICAgIGlmIChuID09IFNORF9DU0wpCi0gICAgICAgICAgICAg IHhfY3NsID0geDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgeF9jc3IgPSB4Owot ICAgICAgICAgICAgeF94bGEgPSAxOyAgICAgICAgICAgICAgICAgIC8qIE92ZXJyaWRlcyBnbG9i YWwgT0ZGIHNldHRpbmcgKi8KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBT TkRfWFBBOiAgICAgICAgICAgICAgICAgLyogVHJhbnNwYXJlbnQgKi8KLSAgICAgICAgICAgIHhf eGxhID0gMDsKLSAgICAgICAgICAgIHhfY3NyID0gLTE7Ci0gICAgICAgICAgICB4X2NzbCA9IC0x OwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICAgICB9Ci0g ICAgfQotI2lmZGVmIFBJUEVTRU5ECi0gICAgaWYgKHB2W1NORF9SRVNdLml2YWwgPiAwKSB7IC8q IC9SRUNPVkVSICovCi0gICAgICAgIGlmIChzbmRmaWx0ZXIgfHwgcHZbU05EX0ZMVF0uaXZhbCA+ IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBubyAvUkVDT1ZFUiBvciAvU1RBUlQg aWYgU0VORCBGSUxURVIgc2VsZWN0ZWRcbiIpOwotICAgICAgICAgICAgeCA9IC05OwotICAgICAg ICAgICAgZ290byB4cHV0eDsKLSAgICAgICAgfQotCWlmIChzZnR0YWJbMF0gPiAwICYmIHNmdHRh YltTRlRfUkVTVF0gPT0gMCkKLQkgIHByaW50ZigiV0FSTklORzogU2VydmVyIHNheXMgaXQgZG9l c24ndCBzdXBwb3J0IFJFU1QuXG4iKTsKLSAgICB9Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQot ICAgIGNtYXJnID0gIiI7Ci0gICAgY21hcmcyID0gYXNuYW1idWY7Ci0gICAgbGluZVswXSA9IE5V TDsKLSAgICBzID0gbGluZTsKLSAgICB3aWxkID0gMDsKLQotICAgIHN3aXRjaCAoY21yZXN1bHQu ZmNvZGUpIHsgICAgICAgICAgIC8qIEhvdyBkaWQgd2UgZ2V0IG91dCBvZiBzd2l0Y2ggbG9vcCAq LwotICAgICAgY2FzZSBfQ01JRkk6ICAgICAgICAgICAgICAgICAgICAgIC8qIElucHV0IGZpbGVu YW1lICovCi0gICAgICAgIGlmIChwdltTTkRfRklMXS5pdmFsID4gMCkgewotICAgICAgICAgICAg cHJpbnRmKCI/WW91IG1heSBub3QgZ2l2ZSBhIFBVVCBmaWxlc3BlYyBhbmQgYSAvTElTVEZJTEVc biIpOwotICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgZ290byB4cHV0eDsKLSAgICAg ICAgfQotICAgICAgICBja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7 IC8qIE5hbWUgKi8KLSAgICAgICAgaWYgKHB2W1NORF9BUlJdLml2YWwgPiAwKQotICAgICAgICAg IGNrc3RybmNweShhc25hbWJ1ZixsaW5lLENLTUFYUEFUSCk7Ci0gICAgICAgIGVsc2UKLSAgICAg ICAgICB3aWxkID0gY21yZXN1bHQubnJlc3VsdDsgICAgICAvKiBXaWxkIGZsYWcgKi8KLSAgICAg ICAgZGVidWcoRjExMSwiZnRwIHB1dCB3aWxkIixsaW5lLHdpbGQpOwotICAgICAgICBpZiAoIXdp bGQgJiYgIXJlY3Vyc2l2ZSAmJiAhbXB1dCkKLSAgICAgICAgICBub2xpbmtzID0gMDsKLSAgICAg ICAgYnJlYWs7Ci0gICAgICBjYXNlIF9DTUZMRDogICAgICAgICAgICAgICAgICAgICAgLyogRmll bGQgKi8KLSAgICAgICAgLyogT25seSBhbGxvd2VkIHdpdGggL0NPTU1BTkQgYW5kIC9BUlJBWSAq LwotICAgICAgICBpZiAocHZbU05EX0ZJTF0uaXZhbCA+IDApIHsKLSAgICAgICAgICAgIHByaW50 ZigiP1lvdSBtYXkgbm90IGdpdmUgYSBQVVQgZmlsZXNwZWMgYW5kIGEgL0xJU1RGSUxFXG4iKTsK LSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgIH0K LQkvKiBGb3IgTVBVVCBpdCdzIE9LIHRvIGhhdmUgZmlsZXNwZWNzIHRoYXQgZG9uJ3QgbWF0Y2gg YW55IGZpbGVzICovCi0JaWYgKG1wdXQpCi0JICBicmVhazsKLSAgICAgICAgaWYgKHB2W1NORF9D TURdLml2YWwgPCAxICYmIHB2W1NORF9BUlJdLml2YWwgPCAxKSB7Ci0jaWZkZWYgQ0tST09UCi0g ICAgICAgICAgICBpZiAoY2tyb290ZXJyKQotICAgICAgICAgICAgICBwcmludGYoIj9PZmYgbGlt aXRzOiAlc1xuIixjbXJlc3VsdC5zcmVzdWx0KTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAv KiBDS1JPT1QgKi8KLSAgICAgICAgICAgICAgcHJpbnRmKCI/JXMgLSBcIiVzXCJcbiIsCi0gICAg ICAgICAgICAgICAgICAgaXN3aWxkKGNtcmVzdWx0LnNyZXN1bHQpID8KLSAgICAgICAgICAgICAg ICAgICAiTm8gZmlsZXMgbWF0Y2giIDogIkZpbGUgbm90IGZvdW5kIiwKLSAgICAgICAgICAgICAg ICAgICBjbXJlc3VsdC5zcmVzdWx0Ci0gICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg IHggPSAtOTsKLSAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgIH0KLSAgICAgICAgY2tz dHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOwotICAgICAgICBpZiAocHZb U05EX0FSUl0uaXZhbCA+IDApCi0gICAgICAgICAgY2tzdHJuY3B5KGFzbmFtYnVmLGxpbmUsQ0tN QVhQQVRIKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIF9DTUNGTTogICAgICAgICAgICAg ICAgICAgICAgLyogQ29uZmlybWF0aW9uICovCi0gICAgICAgIGNvbmZpcm1lZCA9IDE7Ci0gICAg ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBm dW5jdGlvbiBjb2RlOiAlZFxuIixjbXJlc3VsdC5mY29kZSk7Ci0gICAgICAgIHggPSAtOTsKLSAg ICAgICAgZ290byB4cHV0eDsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwiZnRwIHB1dCBzdHJpbmci LHMsMCk7Ci0gICAgZGVidWcoRjEwMSwiZnRwIHB1dCBjb25maXJtZWQiLCIiLGNvbmZpcm1lZCk7 Ci0KLSAgICAvKiBTYXZlIGFuZCBjaGFuZ2UgcHJvdG9jb2wgYW5kIHRyYW5zZmVyIG1vZGUgKi8K LSAgICAvKiBHbG9iYWwgdmFsdWVzIGFyZSByZXN0b3JlZCBpbiBtYWluIHBhcnNlIGxvb3AgKi8K LQotICAgIGdfZGlzcGxhID0gZmRpc3BsYTsKLSAgICBpZiAoZnRwX2RpcyA+IC0xKQotICAgICAg ZmRpc3BsYSA9IGZ0cF9kaXM7Ci0gICAgZ19za2lwYnVwID0gc2tpcGJ1cDsKLQotICAgIGlmIChw dltTTkRfTk9CXS5pdmFsID4gLTEpIHsgICAgICAgIC8qIC9OT0JBQ0tVUCAoc2tpcCBiYWNrdXAg ZmlsZSkgKi8KLSAgICAgICAgZ19za2lwYnVwID0gc2tpcGJ1cDsKLSAgICAgICAgc2tpcGJ1cCA9 IDE7Ci0gICAgfQotICAgIGlmIChwdltTTkRfVFlQXS5pdmFsID4gLTEpIHsgICAgICAgIC8qIC9U WVBFICovCi0gICAgICAgIHhmaWxldHlwZSA9IHB2W1NORF9UWVBdLml2YWw7Ci0gICAgICAgIGlm ICh4ZmlsZXR5cGUgPT0gMikKLSAgICAgICAgICB4ZmlsZXR5cGUgPSAtMTsKLSAgICB9Ci0gICAg aWYgKHB2W1NORF9CSU5dLml2YWwgPiAwKSB7ICAgICAgICAgLyogL0JJTkFSWSByZWFsbHkgbWVh bnMgYmluYXJ5Li4uICovCi0gICAgICAgIGZvcmNldHlwZSA9IDE7ICAgICAgICAgICAgICAgICAg LyogU28gc2tpcCBmaWxlIHNjYW4gKi8KLSAgICAgICAgZnRwX3R5cCA9IEZUVF9CSU47ICAgICAg ICAgICAgICAvKiBTZXQgYmluYXJ5ICovCi0gICAgfSBlbHNlIGlmIChwdltTTkRfVFhUXS5pdmFs ID4gMCkgeyAgLyogU2ltaWxhcmx5IGZvciAvVEVYVC4uLiAqLwotICAgICAgICBmb3JjZXR5cGUg PSAxOwotICAgICAgICBmdHBfdHlwID0gRlRUX0FTQzsKLSAgICB9IGVsc2UgaWYgKHB2W1NORF9U RU5dLml2YWwgPiAwKSB7ICAvKiBhbmQgL1RFTkVYKi8KLSAgICAgICAgZm9yY2V0eXBlID0gMTsK LSAgICAgICAgZnRwX3R5cCA9IEZUVF9URU47Ci0gICAgfSBlbHNlIGlmIChmdHBfY21kbGluICYm IGZ0cF94ZmVybW9kZSA9PSBYTU9ERV9NKSB7Ci0gICAgICAgIGZvcmNldHlwZSA9IDE7Ci0gICAg ICAgIGZ0cF90eXAgPSBiaW5hcnk7Ci0gICAgICAgIGdfZnRwX3R5cCA9IGJpbmFyeTsKLSAgICB9 Ci0KLSNpZmRlZiBQSVBFU0VORAotICAgIGlmIChwdltTTkRfQ01EXS5pdmFsID4gMCkgeyAgICAg ICAgIC8qIC9DT01NQU5EIC0gc3RyaXAgYW55IGJyYWNlcyAqLwotICAgICAgICBkZWJ1ZyhGMTEw LCJQVVQgL0NPTU1BTkQgYmVmb3JlIHN0cmlwcGluZyIscywwKTsKLSAgICAgICAgcyA9IGJyc3Ry aXAocyk7Ci0gICAgICAgIGRlYnVnKEYxMTAsIlBVVCAvQ09NTUFORCBhZnRlciBzdHJpcHBpbmci LHMsMCk7Ci0gICAgICAgIGlmICghKnMpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBh IGNvbW1hbmQgdG8gc2VuZCBmcm9tIGlzIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgIHggPSAt OTsKLSAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgIH0KLSAgICAgICAgY21hcmcgPSBz OwotICAgIH0KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCi0vKiBTZXQgdXAgL01PVkUgYW5kIC9S RU5BTUUgKi8KLQotICAgIGlmIChwdltTTkRfREVMXS5pdmFsID4gMCAmJgotICAgICAgICAocHZb U05EX01PVl0uaXZhbCA+IDAgfHwgcHZbU05EX1JFTl0uaXZhbCA+IDApKSB7Ci0gICAgICAgIHBy aW50ZigiP1NvcnJ5LCAvREVMRVRFIGNvbmZsaWN0cyB3aXRoIC9NT1ZFIG9yIC9SRU5BTUVcbiIp OwotICAgICAgICB4ID0gLTk7Ci0gICAgICAgIGdvdG8geHB1dHg7Ci0gICAgfQotI2lmZGVmIENL X1RNUERJUgotICAgIGlmIChwdltTTkRfTU9WXS5pdmFsID4gMCkgewotICAgICAgICBpbnQgbGVu OwotICAgICAgICBjaGFyICogcCA9IHB2W1NORF9NT1ZdLnN2YWw7Ci0gICAgICAgIGxlbiA9IHN0 cmxlbihwKTsKLSAgICAgICAgaWYgKCFpc2RpcihwKSkgeyAgICAgICAgICAgICAgICAvKiBDaGVj ayBkaXJlY3RvcnkgKi8KLSNpZmRlZiBDS19NS0RJUgotICAgICAgICAgICAgY2hhciAqIHMgPSBO VUxMOwotICAgICAgICAgICAgcyA9IChjaGFyICopbWFsbG9jKGxlbiArIDQpOwotICAgICAgICAg ICAgaWYgKHMpIHsKLSAgICAgICAgICAgICAgICBzdHJjcHkocyxwKTsgICAgICAgICAgICAvKiBz YWZlICovCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICAgICAgICAgICAgICBpZiAoc1tsZW4tMV0g IT0gJzonKSB7IHNbbGVuKytdID0gJzonOyBzW2xlbl0gPSBOVUw7IH0KLSNlbHNlCi0gICAgICAg ICAgICAgICAgaWYgKHNbbGVuLTFdICE9ICcvJykgeyBzW2xlbisrXSA9ICcvJzsgc1tsZW5dID0g TlVMOyB9Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSAgICAgICAgICAgICAgICBzW2xlbisr XSA9ICdYJzsKLSAgICAgICAgICAgICAgICBzW2xlbl0gPSBOVUw7Ci0jaWZkZWYgTk9NS0RJUgot ICAgICAgICAgICAgICAgIHggPSAtMTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgeCA9IHpta2Rp cihzKTsKLSNlbmRpZiAvKiBOT01LRElSICovCi0gICAgICAgICAgICAgICAgZnJlZShzKTsKLSAg ICAgICAgICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/ Q2FuJ3QgY3JlYXRlIFwiJXNcIlxuIixwKTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IC05Owot ICAgICAgICAgICAgICAgICAgICBnb3RvIHhwdXR4OwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBwcmludGYoIj9EaXJlY3RvcnkgXCIlc1wiIG5v dCBmb3VuZFxuIixwKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdvdG8geHB1 dHg7Ci0jZW5kaWYgLyogQ0tfTUtESVIgKi8KLSAgICAgICAgfQotICAgICAgICBtYWtlc3RyKCZz bmRfbW92ZSxwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0KLSAgICBpZiAocHZb U05EX1JFTl0uaXZhbCA+IDApIHsgICAgICAgICAvKiAvUkVOQU1FICovCi0gICAgICAgIGNoYXIg KiBwID0gcHZbU05EX1JFTl0uc3ZhbDsKLSAgICAgICAgaWYgKCFwKSBwID0gIiI7Ci0gICAgICAg IGlmICghKnApIHsKLSAgICAgICAgICAgIHByaW50ZigiP05ldyBuYW1lIHJlcXVpcmVkIGZvciAv UkVOQU1FXG4iKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdvdG8geHB1dHg7 Ci0gICAgICAgIH0KLSAgICAgICAgcCA9IGJyc3RyaXAocCk7Ci0jaWZuZGVmIE5PU1BMCi0gICAg LyogSWYgbmFtZSBnaXZlbiBpcyB3aWxkLCByZW5hbWUgc3RyaW5nIG11c3QgY29udGFpbiB2YXJp YWJsZXMgKi8KLSAgICAgICAgaWYgKHdpbGQpIHsKLSAgICAgICAgICAgIGNoYXIgKiBzID0gdG1w YnVmOwotICAgICAgICAgICAgeCA9IFRNUEJVRlNJWjsKLSAgICAgICAgICAgIHp6c3RyaW5nKHAs JnMsJngpOwotICAgICAgICAgICAgaWYgKCFzdHJjbXAodG1wYnVmLHApKSB7Ci0gICAgICAgICAg ICAgICAgcHJpbnRmKAotICAgICI/L1JFTkFNRSBmb3IgZmlsZSBncm91cCBtdXN0IGNvbnRhaW4g dmFyaWFibGVzIHN1Y2ggYXMgXFx2KGZpbGVuYW1lKVxuIgotICAgICAgICAgICAgICAgICAgICAg ICApOwotICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICBnb3RvIHhwdXR4 OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAg bWFrZXN0cigmc25kX3JlbmFtZSxwKTsKLSAgICAgICAgZGVidWcoRjExMCwiRlRQIHNuZF9yZW5h bWUiLHNuZF9yZW5hbWUsMCk7Ci0gICAgfQotICAgIGlmIChwdltTTkRfU1JOXS5pdmFsID4gMCkg eyAgICAgICAgIC8qIC9TRVJWRVItUkVOQU1FICovCi0gICAgICAgIGNoYXIgKiBwID0gcHZbU05E X1NSTl0uc3ZhbDsKLSAgICAgICAgaWYgKCFwKSBwID0gIiI7Ci0gICAgICAgIGlmICghKnApIHsK LSAgICAgICAgICAgIHByaW50ZigiP05ldyBuYW1lIHJlcXVpcmVkIGZvciAvU0VSVkVSLVJFTkFN RVxuIik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICBnb3RvIHhwdXR4OwotICAg ICAgICB9Ci0gICAgICAgIHAgPSBicnN0cmlwKHApOwotI2lmbmRlZiBOT1NQTAotICAgICAgICBp ZiAod2lsZCkgewotICAgICAgICAgICAgY2hhciAqIHMgPSB0bXBidWY7Ci0gICAgICAgICAgICB4 ID0gVE1QQlVGU0laOwotICAgICAgICAgICAgenpzdHJpbmcocCwmcywmeCk7Ci0gICAgICAgICAg ICBpZiAoIXN0cmNtcCh0bXBidWYscCkpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoCi0iPy9T RVJWRVItUkVOQU1FIGZvciBmaWxlIGdyb3VwIG11c3QgY29udGFpbiB2YXJpYWJsZXMgc3VjaCBh cyBcXHYoZmlsZW5hbWUpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICBtYWtlc3RyKCZzcnZfcmVu YW0scCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImZ0cCBwdXQgc3J2X3JlbmFtIixzcnZfcmVuYW0s MCk7Ci0gICAgfQotICAgIGlmICghY29uZmlybWVkKSB7ICAgICAgICAgICAgICAgICAgIC8qIENS IG5vdCB0eXBlZCB5ZXQsIGdldCBtb3JlIGZpZWxkcyAqLwotICAgICAgICBjaGFyICogbHA7Ci0g ICAgICAgIGlmIChtcHV0KSB7ICAgICAgICAgICAgICAgICAgICAgLyogTVBVVCBvciBNTU9WRSAq LwotICAgICAgICAgICAgbmZpbHMgPSAwOyAgICAgICAgICAgICAgICAgIC8qIFdlIGFscmVhZHkg aGF2ZSB0aGUgZmlyc3Qgb25lICovCi0jaWZuZGVmIE5PTVNFTkQKLQkgICAgaWYgKGNtcmVzdWx0 LmZjb2RlID09IF9DTUlGSSkgewotCQkvKiBGaXJzdCBmaWxlc3BlYyBpcyB2YWxpZCAqLwotCQlt c2ZpbGVzW25maWxzKytdID0gbGluZTsgICAgLyogU3RvcmUgcG9pbnRlciAqLwotCQlscCA9IGxp bmUgKyAoaW50KXN0cmxlbihsaW5lKSArIDE7IC8qIFBvaW50IHBhc3QgaXQgKi8KLQkJZGVidWco RjExMSwiZnRwIHB1dCBtcHV0Iixtc2ZpbGVzW25maWxzLTFdLG5maWxzLTEpOwotCSAgICB9IGVs c2UgewotCQkvKiBGaXJzdCBmaWxlc3BlYyBtYXRjaGVzIG5vIGZpbGVzICovCi0JCWRlYnVnKEYx MTAsImZ0cCBwdXQgbXB1dCBza2lwcGluZyBmaXJzdCBmaWxlc3BlYyIsCi0JCSAgICAgIGNtcmVz dWx0LnNyZXN1bHQsCi0JCSAgICAgIDAKLQkJICAgICAgKTsKLQkJbHAgPSBsaW5lOwotCSAgICB9 Ci0JICAgIC8qIFBhcnNlIGEgZmlsZXNwZWMsIGEgImZpZWxkIiwgb3IgY29uZmlybWF0aW9uICov Ci0KLQkgICAgY21mZGJpKCZzZiwJCQkvKiAxc3QgRkRCIC0gZmlsZSB0byBzZW5kICovCi0JCSAg IF9DTUlGSSwJCS8qIGZjb2RlICovCi0JCSAgICIiLAkJCS8qIGhscG1zZyAqLwotCQkgICAiIiwJ CQkvKiBkZWZhdWx0ICovCi0JCSAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0JCSAg IG5vbGlua3MgfCB4X3JlY3Vyc2UsCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0JCSAgIDAs CQkJLyogZGlyZmxnIDAgbWVhbnMgIm5vdCBkaXJzIG9ubHkiICovCi0JCSAgIHh4c3RyaW5nLAot CQkgICBOVUxMLAotCQkgICAmZmwKLQkJICAgKTsKLQkgICAgY21mZGJpKCZmbCwJCQkvKiAybmQg RkRCIC0gbG9jYWwgZmlsZXNwZWMgKi8KLQkJICAgX0NNRkxELAkJLyogZmNvZGUgKi8KLQkJICAg IiIsCQkJLyogaGxwbXNnICovCi0JCSAgICIiLAkJCS8qIGRlZmF1bHQgKi8KLQkJICAgIiIsCQkJ LyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkJICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEg MSAqLwotCQkgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0JCSAgIHh4c3RyaW5n LAotCQkgICBOVUxMLAotCQkgICAmY20KLQkJICAgKTsKLQkgICAgY21mZGJpKCZjbSwJCQkvKiAz cmQgRkRCIC0gQ29uZmlybWF0aW9uICovCi0JCSAgIF9DTUNGTSwJCS8qIGZjb2RlICovCi0JCSAg ICIiLAotCQkgICAiIiwKLQkJICAgIiIsCi0JCSAgIDAsCi0JCSAgIDAsCi0JCSAgIE5VTEwsCi0J CSAgIE5VTEwsCi0JCSAgIE5VTEwKLQkJICAgKTsKLQotICAgICAgICAgICAgd2hpbGUgKCFjb25m aXJtZWQpIHsJLyogR2V0IG1vcmUgZmlsZW5hbWVzICovCi0JCXggPSBjbWZkYigmc2YpOwkJLyog UGFyc2Ugc29tZXRoaW5nICovCi0JCWRlYnVnKEYxMDEsImZ0cCBwdXQgY21mZGIgQiIsIiIseCk7 Ci0JCWRlYnVnKEYxMDEsImZ0cCBwdXQgZmNvZGUgQiIsIiIsY21yZXN1bHQuZmNvZGUpOwotCQlp ZiAoeCA8IDApCQkvKiBFcnJvciAqLwotCQkgIGdvdG8geHB1dHg7CQkvKiBvciByZXBhcnNlIG5l ZWRlZCAqLwotCQlzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7Ci0JCSAgY2FzZSBfQ01DRk06CQkv KiBFbmQgb2YgY29tbWFuZCAqLwotCQkgICAgY29uZmlybWVkKys7Ci0JCSAgICBpZiAobmZpbHMg PCAxKSB7Ci0JCQlkZWJ1ZyhGMTAwLCJmdHAgcHV0IG1wdXQgbm8gZmlsZXMgbWF0Y2giLCIiLDAp OwotCQkJcHJpbnRmKCI/Tm8gZmlsZXMgbWF0Y2ggTVBVVCBsaXN0XG4iKTsKLQkJCXggPSAtOTsK LQkJCWdvdG8geHB1dHg7Ci0JCSAgICB9Ci0JCSAgICBicmVhazsKLQkJICBjYXNlIF9DTUZMRDoJ CS8qIE5vIG1hdGNoICovCi0JCSAgICBkZWJ1ZyhGMTEwLCJmdHAgcHV0IG1wdXQgc2tpcHBpbmci LGNtcmVzdWx0LnNyZXN1bHQsMCk7Ci0JCSAgICBjb250aW51ZTsKLQkJICBjYXNlIF9DTUlGSToJ CS8qIEdvb2QgbWF0Y2ggKi8KLQkJICAgIHMgPSBjbXJlc3VsdC5zcmVzdWx0OwotCQkgICAgbXNm aWxlc1tuZmlscysrXSA9IGxwOyAvKiBHb3Qgb25lLCBjb3VudCwgcG9pbnQgdG8gaXQsICovCi0J CSAgICBwID0gbHA7CQkgICAvKiByZW1lbWJlciBwb2ludGVyLCAqLwotCQkgICAgd2hpbGUgKCgq bHArKyA9ICpzKyspKSAvKiBhbmQgY29weSBpdCBpbnRvIGJ1ZmZlciAqLwotCQkgICAgICBpZiAo bHAgPiAobGluZSArIExJTkJVRlNJWikpIHsgLyogQXZvaWQgbWVtb3J5IGxlYWsgKi8KLQkJCSAg cHJpbnRmKCI/TVBVVCBsaXN0IHRvbyBsb25nXG4iKTsKLQkJCSAgbGluZVswXSA9IE5VTDsKLQkJ CSAgeCA9IC05OwotCQkJICBnb3RvIHhwdXR4OwotCQkgICAgICB9Ci0JCSAgICBkZWJ1ZyhGMTEx LCJmdHAgcHV0IG1wdXQgYWRkaW5nIixtc2ZpbGVzW25maWxzLTFdLG5maWxzLTEpOwotCQkgICAg aWYgKG5maWxzID09IDEpCS8qIFRha2UgY2FyZSBvZiBcdihmaWxlc3BlYykgKi8KLQkJICAgICAg ZnNwZWNbMF0gPSBOVUw7Ci0jaWZkZWYgWkZOUUZQCi0JCSAgICB6Zm5xZnAocCxUTVBCVUZTSVos dG1wYnVmKTsKLQkJICAgIHAgPSB0bXBidWY7Ci0jZW5kaWYgLyogWkZOUUZQICovCi0JCSAgICBp ZiAoKChpbnQpc3RybGVuKGZzcGVjKSArIChpbnQpc3RybGVuKHApICsgMSkgPCBmc3BlY2xlbikg ewotCQkJc3RyY2F0KGZzcGVjLHApOyAgICAvKiBzYWZlICovCi0JCQlzdHJjYXQoZnNwZWMsIiAi KTsgIC8qIHNhZmUgKi8KLQkJICAgIH0gZWxzZSB7Ci0jaWZkZWYgQ09NTUVOVAotCQkJcHJpbnRm KCJXQVJOSU5HIC0gXFx2KGZpbGVzcGVjKSBidWZmZXIgb3ZlcmZsb3dcbiIpOwotI2Vsc2UKLQkJ CWRlYnVnKEYxMDEsImRveHB1dCBmaWxlc3BlYyBidWZmZXIgb3ZlcmZsb3ciLCIiLDApOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQkJICAgIH0KLQkJfQotCSAgICB9Ci0jZW5kaWYgLyogTk9NU0VO RCAqLwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlZ3VsYXIg UFVUICovCi0gICAgICAgICAgICBuZmlscyA9IC0xOwotICAgICAgICAgICAgaWYgKCh4ID0gY210 eHQod2lsZCA/Ci0iXG5PcHRpb25hbCBhcy1uYW1lIHRlbXBsYXRlIGNvbnRhaW5pbmcgcmVwbGFj ZW1lbnQgdmFyaWFibGVzIFwKLWxpa2UgXFx2KGZpbGVuYW1lKSIgOgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIk9wdGlvbmFsIG5hbWUgdG8gc2VuZCBpdCB3aXRoIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICIiLCZwLE5VTEwpKSA8IDApCi0gICAgICAgICAgICAgIGdvdG8geHB1 dHg7Ci0KLSAgICAgICAgICAgIGlmIChwKSBpZiAoISpwKSBwID0gTlVMTDsKLSAgICAgICAgICAg IHAgPSBicnN0cmlwKHApOwotCi0gICAgICAgICAgICBpZiAocCAmJiAqcCkgewotICAgICAgICAg ICAgICAgIG1ha2VzdHIoJihwdltTTkRfQVNOXS5zdmFsKSxwKTsKLSAgICAgICAgICAgICAgICBp ZiAocHZbU05EX0FTTl0uc3ZhbCkKLSAgICAgICAgICAgICAgICAgIHB2W1NORF9BU05dLml2YWwg PSAxOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBwdXQgL2FzLW5hbWUgMiIscHZb U05EX0FTTl0uc3ZhbCwwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAv KiBTZXQgY21hcmcyIGZyb20gYXMtbmFtZSwgaG93ZXZlciB3ZSBnb3QgaXQuICovCi0KLSAgICBD SEVDS0NPTk4oKTsKLSAgICBpZiAocHZbU05EX0FTTl0uaXZhbCA+IDAgJiYgcHZbU05EX0FTTl0u c3ZhbCAmJiAhYXNuYW1idWZbMF0pIHsKLSAgICAgICAgY2hhciAqIHA7Ci0gICAgICAgIHAgPSBi cnN0cmlwKHB2W1NORF9BU05dLnN2YWwpOwotICAgICAgICBja3N0cm5jcHkoYXNuYW1idWYscCxD S01BWFBBVEgrMSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImZ0cCBwdXQgYXNuYW1idWYiLGFz bmFtYnVmLDApOwotCi0gICAgaWYgKHB2W1NORF9GSUxdLml2YWwgPiAwKSB7Ci0gICAgICAgIGlm IChjb25maXJtZWQpIHsKLSAgICAgICAgICAgIGlmICh6b3BlbmkoWk1GSUxFLHB2W1NORF9GSUxd LnN2YWwpIDwgMSkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBwdXQgY2FuJ3Qg b3BlbiIscHZbU05EX0ZJTF0uc3ZhbCwwKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9GYWls dXJlIHRvIG9wZW4gJXNcbiIscHZbU05EX0ZJTF0uc3ZhbCk7Ci0gICAgICAgICAgICAgICAgeCA9 IC05OwotICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBtYWtlc3RyKCZmaWxlZmlsZSxwdltTTkRfRklMXS5zdmFsKTsgLyogT3BlbiwgcmVtZW1i ZXIgbmFtZSAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIFBVVCAvTElTVEZJTEUgb3Bl bmVkIixmaWxlZmlsZSwwKTsKLSAgICAgICAgICAgIHdpbGQgPSAxOwotICAgICAgICB9Ci0gICAg fQotICAgIGlmIChjb25maXJtZWQgJiYgIWxpbmVbMF0gJiYgIWZpbGVmaWxlKSB7Ci0jaWZuZGVm IE5PTVNFTkQKLSAgICAgICAgaWYgKGZpbGVoZWFkKSB7ICAgICAgICAgICAgICAgICAvKiBPSyBp ZiB3ZSBoYXZlIGEgU0VORC1MSVNUICovCi0gICAgICAgICAgICBuZmlscyA9IGZpbGVzaW5saXN0 OwotICAgICAgICAgICAgc25kc3JjID0gbmZpbHM7ICAgICAgICAgICAgIC8qIExpa2UgTVNFTkQg Ki8KLSAgICAgICAgICAgIGFkZGxpc3QgPSAxOyAgICAgICAgICAgICAgICAvKiBCdXQgdXNpbmcg YSBkaWZmZXJlbnQgbGlzdC4uLiAqLwotICAgICAgICAgICAgZmlsZW5leHQgPSBmaWxlaGVhZDsK LSAgICAgICAgICAgIGdvdG8gZG9wdXQ7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT01TRU5EICov Ci0gICAgICAgIHByaW50ZigiP0ZpbGVuYW1lIHJlcXVpcmVkIGJ1dCBub3QgZ2l2ZW5cbiIpOwot ICAgICAgICB4ID0gLTk7Ci0gICAgICAgIGdvdG8geHB1dHg7Ci0gICAgfQotI2lmbmRlZiBOT01T RU5ECi0gICAgYWRkbGlzdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgdXNl IFNFTkQtTElTVC4gKi8KLSNlbmRpZiAvKiBOT01TRU5EICovCi0KLSAgICBpZiAobXB1dCkgeyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBNUFVUIChyYXRoZXIgdGhhbiBQVVQpICovCi0jaWZu ZGVmIE5PTVNFTkQKLSAgICAgICAgY21saXN0ID0gbXNmaWxlczsgICAgICAgICAgICAgICAvKiBM aXN0IG9mIGZpbGVzcGVjcyAqLwotICAgICAgICBzbmRzcmMgPSBuZmlsczsgICAgICAgICAgICAg ICAgIC8qIHJhdGhlciBmaWxlc3BlYyBhbmQgYXMtbmFtZSAqLwotI2VuZGlmIC8qIE5PTVNFTkQg Ki8KLSAgICAgICAgcGlwZXNlbmQgPSAwOwotICAgIH0gZWxzZSBpZiAoZmlsZWZpbGUpIHsgICAg ICAgICAgICAgIC8qIEZpbGUgY29udGFpbnMgbGlzdCBvZiBmaWxlbmFtZXMgKi8KLSAgICAgICAg cyA9ICIiOwotICAgICAgICBjbWFyZyA9ICIiOwotICAgICAgICBsaW5lWzBdID0gTlVMOwotICAg ICAgICBuZmlscyA9IDE7Ci0gICAgICAgIHNuZHNyYyA9IDE7Ci0KLSAgICB9IGVsc2UgaWYgKHB2 W1NORF9BUlJdLml2YWwgPCAxICYmIHB2W1NORF9DTURdLml2YWwgPCAxKSB7Ci0KLSAgICAgICAg LyogTm90IE1TRU5ELCBNTU9WRSwgL0xJU1QsIG9yIC9BUlJBWSAqLwotICAgICAgICBuZmlscyA9 IHNuZHNyYyA9IC0xOwotICAgICAgICBpZiAoIXdpbGQpIHsKLSAgICAgICAgICAgIGlmICh6Y2hr aShzKSA8IDApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9SZWFkIGFjY2VzcyBkZW5pZWQg LSBcIiVzXCJcbiIsIHMpOwotICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAg ICBnb3RvIHhwdXR4OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzICE9 IGxpbmUpICAgICAgICAgICAgICAgICAgLyogV2UgbWlnaHQgYWxyZWFkeSBoYXZlIGRvbmUgdGhp cy4gKi8KLSAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7ICAvKiBDb3B5IG9m IHN0cmluZyBqdXN0IHBhcnNlZC4gKi8KLSNpZmRlZiBERUJVRwotICAgICAgICBlbHNlCi0gICAg ICAgICAgZGVidWcoRjExMCwiZG94cHV0IGxpbmU9cyIsbGluZSwwKTsKLSNlbmRpZiAvKiBERUJV RyAqLwotICAgICAgICBjbWFyZyA9IGxpbmU7ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdG8g c2VuZCAqLwotICAgIH0KLSNpZm5kZWYgTk9NU0VORAotICAgIHpmbnFmcChjbWFyZyxmc3BlY2xl bixmc3BlYyk7ICAgICAgIC8qIEdldCBmdWxsIG5hbWUgKi8KLSNlbmRpZiAvKiBOT01TRU5EICov Ci0KLSAgICBpZiAoIW1wdXQpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgYWxsIGJ1 dCBNUFVULi4uICovCi0jaWZkZWYgUElQRVNFTkQKLSAgICAgICAgaWYgKHB2W1NORF9DTURdLml2 YWwgPiAwKSAgICAgICAvKiAvQ09NTUFORCBzZXRzIHBpcGVzZW5kIGZsYWcgKi8KLSAgICAgICAg ICBwaXBlc2VuZCA9IDE7Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0cCBwdXQgL0NPTU1BTkQgcGlw ZXNlbmQiLCIiLHBpcGVzZW5kKTsKLSAgICAgICAgaWYgKHBpcGVzZW5kICYmIGZpbGVmaWxlKSB7 Ci0gICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIHN3aXRjaCBjb21iaW5hdGlvblxuIik7Ci0g ICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICBnb3RvIHhwdXR4OwotICAgICAgICB9Ci0j ZW5kaWYgLyogUElQRVNFTkQgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgIC8qIElmIGFzLW5hbWUg Z2l2ZW4gYW5kIGZpbGVzcGVjIGlzIHdpbGQsIGFzLW5hbWUgbXVzdCBjb250YWluIHZhcmlhYmxl cyAqLwotICAgICAgICBpZiAoKHdpbGQgfHwgbXB1dCkgJiYgYXNuYW1idWZbMF0pIHsKLSAgICAg ICAgICAgIGNoYXIgKiBzID0gdG1wYnVmOwotICAgICAgICAgICAgeCA9IFRNUEJVRlNJWjsKLSAg ICAgICAgICAgIHp6c3RyaW5nKGFzbmFtYnVmLCZzLCZ4KTsKLSAgICAgICAgICAgIGlmICghc3Ry Y21wKHRtcGJ1Zixhc25hbWJ1ZikpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoCi0gICAgIj9B cy1uYW1lIGZvciBmaWxlIGdyb3VwIG11c3QgY29udGFpbiB2YXJpYWJsZXMgc3VjaCBhcyBcXHYo ZmlsZW5hbWUpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAg eCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIH0KLQotICBkb3B1dDoKLQotICAgIGlmIChw dltTTkRfU0hIXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIFNFTkQgL1FVSUVULi4uICovCi0gICAg ICAgIGZkaXNwbGEgPSAwOwotICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcHV0IGRpc3BsYXkiLCIi LGZkaXNwbGEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRpc3BsYSA9IDE7Ci0gICAgICAgIGlm IChmdHBfZGViKQotCSAgZmRpc3BsYSA9IFhZRkRfQjsKLSAgICB9Ci0KLSNpZmRlZiBQVVRBUlJB WSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRU5EIC9BUlJBWS4uLiAqLwotICAgIGlmIChw dltTTkRfQVJSXS5pdmFsID4gMCkgewotICAgICAgICBpZiAoIWFwKSB7IHggPSAtMjsgZ290byB4 cHV0eDsgfSAvKiAoc2hvdWxkbid0IGhhcHBlbikgKi8KLSAgICAgICAgaWYgKHJhbmdlWzBdID09 IC0xKSAgICAgICAgICAgICAvKiBJZiBsb3cgZW5kIG9mIHJhbmdlIG5vdCBzcGVjaWZpZWQgKi8K LSAgICAgICAgICByYW5nZVswXSA9IDE7ICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0IHRvIDEg Ki8KLSAgICAgICAgaWYgKHJhbmdlWzFdID09IC0xKSAgICAgICAgICAgICAvKiBJZiBoaWdoIG5v dCBzcGVjaWZpZWQgKi8KLSAgICAgICAgICByYW5nZVsxXSA9IGFfZGltW2FycmF5eF07ICAgICAv KiBkZWZhdWx0IHRvIHNpemUgb2YgYXJyYXkgKi8KLSAgICAgICAgaWYgKChyYW5nZVswXSA8IDAp IHx8ICAgICAgICAgICAvKiBDaGVjayByYW5nZSAqLwotICAgICAgICAgICAgKHJhbmdlWzBdID4g YV9kaW1bYXJyYXl4XSkgfHwKLSAgICAgICAgICAgIChyYW5nZVsxXSA8IHJhbmdlWzBdKSB8fAot ICAgICAgICAgICAgKHJhbmdlWzFdID4gYV9kaW1bYXJyYXl4XSkpIHsKLSAgICAgICAgICAgIHBy aW50ZigiP0JhZCBhcnJheSByYW5nZSAtIFslZDolZF1cbiIscmFuZ2VbMF0scmFuZ2VbMV0pOwot ICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgZ290byB4cHV0eDsKLSAgICAgICAgfQot ICAgICAgICBzbmRhcnJheSA9IGFwOyAgICAgICAgICAgICAgICAgIC8qIEFycmF5IHBvaW50ZXIg Ki8KLSAgICAgICAgc25keGluID0gYXJyYXl4OyAgICAgICAgICAgICAgICAvKiBBcnJheSBpbmRl eCAqLwotICAgICAgICBzbmR4bG8gPSByYW5nZVswXTsgICAgICAgICAgICAgIC8qIEFycmF5IHJh bmdlICovCi0gICAgICAgIHNuZHhoaSA9IHJhbmdlWzFdOwotICAgICAgICBzbmR4bmFtWzddID0g KGNoYXIpKChzbmR4aW4gPT0gMSkgPyA2NCA6IHNuZHhpbiArIEFSUkFZQkFTRSk7Ci0gICAgICAg IGlmICghYXNuYW1idWZbMF0pCi0gICAgICAgICAgY2tzdHJuY3B5KGFzbmFtYnVmLHNuZHhuYW0s Q0tNQVhQQVRIKTsKLSAgICAgICAgY21hcmcgPSAiIjsKLSAgICB9Ci0jZW5kaWYgLyogUFVUQVJS QVkgKi8KLQotICAgIG1vdmluZyA9IDA7Ci0KLSAgICBpZiAocHZbU05EX0FSUl0uaXZhbCA8IDEp IHsgICAgICAgICAvKiBGaWxlIHNlbGVjdGlvbiAmIGRpc3Bvc2l0aW9uLi4uICovCi0gICAgICAg IGlmIChwdltTTkRfREVMXS5pdmFsID4gMCkgICAgICAgLyogL0RFTEVURSB3YXMgc3BlY2lmaWVk ICovCi0gICAgICAgICAgbW92aW5nID0gMTsKLSAgICAgICAgaWYgKHB2W1NORF9BRlRdLml2YWwg PiAwKSAgICAgICAvKiBDb3B5IFNFTkQgY3JpdGVyaWEgKi8KLSAgICAgICAgICBja3N0cm5jcHko c25kYWZ0ZXIscHZbU05EX0FGVF0uc3ZhbCwxOSk7Ci0gICAgICAgIGlmIChwdltTTkRfQkVGXS5p dmFsID4gMCkKLSAgICAgICAgICBja3N0cm5jcHkoc25kYmVmb3JlLHB2W1NORF9CRUZdLnN2YWws MTkpOwotICAgICAgICBpZiAocHZbU05EX05BRl0uaXZhbCA+IDApCi0gICAgICAgICAgY2tzdHJu Y3B5KHNuZG5hZnRlcixwdltTTkRfTkFGXS5zdmFsLDE5KTsKLSAgICAgICAgaWYgKHB2W1NORF9O QkVdLml2YWwgPiAwKQotICAgICAgICAgIGNrc3RybmNweShzbmRuYmVmb3JlLHB2W1NORF9OQkVd LnN2YWwsMTkpOwotICAgICAgICBpZiAocHZbU05EX0VYQ10uaXZhbCA+IDApCi0gICAgICAgICAg bWFrZWxpc3QocHZbU05EX0VYQ10uc3ZhbCxzbmRleGNlcHQsTlNOREVYQ0VQVCk7Ci0gICAgICAg IGlmIChwdltTTkRfU01BXS5pdmFsID4gLTEpCi0gICAgICAgICAgc25kc21hbGxlciA9IHB2W1NO RF9TTUFdLnd2YWw7Ci0gICAgICAgIGlmIChwdltTTkRfTEFSXS5pdmFsID4gLTEpCi0gICAgICAg ICAgc25kbGFyZ2VyID0gcHZbU05EX0xBUl0ud3ZhbDsKLSAgICAgICAgaWYgKHB2W1NORF9OQU1d Lml2YWwgPiAtMSkKLSAgICAgICAgICB4X2NudiA9IHB2W1NORF9OQU1dLml2YWw7Ci0gICAgICAg IGlmIChwdltTTkRfVVNOXS5pdmFsID4gLTEpCi0gICAgICAgICAgeF91c24gPSBwdltTTkRfVVNO XS5pdmFsOwotICAgICAgICBpZiAocHZbU05EX0VSUl0uaXZhbCA+IC0xKQotICAgICAgICAgIHB1 dGVycm9yID0gcHZbU05EX0VSUl0uaXZhbDsKLQotI2lmZGVmIERPVVBEQVRFCi0gICAgICAgIGlm IChwdltTTkRfVVBEXS5pdmFsID4gMCkgewotICAgICAgICAgICAgaWYgKHhfdXNuKSB7Ci0gICAg ICAgICAgICAgICAgcHJpbnRmKCI/Q29uZmxpY3Rpbmcgc3dpdGNoZXM6IC9VUERBVEUgL1VOSVFV RVxuIik7Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8geHB1 dHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXRmbGFncyB8PSBQVVRfVVBEOwotCSAg ICBmdHBfZGF0ZXMgfD0gMjsKLSAgICAgICAgfQotI2lmZGVmIENPTU1FTlQKLQkvKiBUaGlzIHdv cmtzIGJ1dCBpdCdzIHVzZWxlc3MsIG1heWJlIGRhbmdlcm91cyAqLwotICAgICAgICBpZiAocHZb U05EX0RJRl0uaXZhbCA+IDApIHsKLSAgICAgICAgICAgIGlmICh4X3VzbikgewotICAgICAgICAg ICAgICAgIHByaW50ZigiP0NvbmZsaWN0aW5nIHN3aXRjaGVzOiAvREFURVMtRElGRkVSIC9VTklR VUVcbiIpOwotICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICBnb3RvIHhw dXR4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHV0ZmxhZ3MgfD0gUFVUX0RJRjsKLQkg ICAgZnRwX2RhdGVzIHw9IDI7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5k aWYgLyogRE9VUERBVEUgKi8KLQotICAgICAgICBpZiAocHZbU05EX1NJTV0uaXZhbCA+IDApCi0g ICAgICAgICAgcHV0ZmxhZ3MgfD0gUFVUX1NJTTsKLQotICAgICAgICBpZiAocHZbU05EX1BSTV0u aXZhbCA+IC0xKSB7Ci0jaWZkZWYgVU5JWAotICAgICAgICAgICAgaWYgKHhfdXNuKSB7Ci0gICAg ICAgICAgICAgICAgcHJpbnRmKCI/Q29uZmxpY3Rpbmcgc3dpdGNoZXM6IC9QRVJNSVNTSU9OUyAv VU5JUVVFXG4iKTsKLSAgICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290 byB4cHV0eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHhfcHJtID0gcHZbU05EX1BSTV0u aXZhbDsKLSNlbHNlIC8qIFVOSVggKi8KLSAgICAgICAgICAgIHByaW50ZigiPy9QRVJNSVNTSU9O UyBzd2l0Y2ggaXMgbm90IHN1cHBvcnRlZFxuIik7Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgICAg ICB9Ci0jaWZkZWYgRlRQX1JFU1RBUlQKLSAgICAgICAgaWYgKHB2W1NORF9SRVNdLml2YWwgPiAw KSB7Ci0JICAgIGlmICghc2l6ZW9rKSB7Ci0JCXByaW50ZigiP1BVVCAvUkVTVEFSVCBjYW4ndCBi ZSB1c2VkIGJlY2F1c2UgU0laRSBkaXNhYmxlZC5cbiIpOwotICAgICAgICAgICAgICAgIHggPSAt OTsKLSAgICAgICAgICAgICAgICBnb3RvIHhwdXR4OwotCSAgICB9Ci0gICAgICAgICAgICBpZiAo eF91c24gfHwgcHV0ZmxhZ3MpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9Db25mbGljdGlu ZyBzd2l0Y2hlczogL1JFQ09WRVIgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHhfdXNu ICYmIHB1dGZsYWdzID8gIi9VTklRVUUgL1VQREFURSIgOgotICAgICAgICAgICAgICAgICAgICAg ICAoeF91c24gPyAiL1VOSVFVRSIgOiAiL1VQREFURSIpCi0gICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7 Ci0gICAgICAgICAgICB9Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgICAgICAgIGlmICh4X3hsYSAm JgotICAgICAgICAgICAgICAgICh4X2NzbCA9PSBGQ19VQ1MyIHx8Ci0gICAgICAgICAgICAgICAg IHhfY3NsID09IEZDX1VURjggfHwKLSAgICAgICAgICAgICAgICAgeF9jc3IgPT0gRkNfVUNTMiB8 fAotICAgICAgICAgICAgICAgICB4X2NzciA9PSBGQ19VVEY4KSkgewotICAgICAgICAgICAgICAg IHByaW50ZigiPy9SRUNPVkVSIGNhbiBub3QgYmUgdXNlZCB3aXRoIFVuaWNvZGUgdHJhbnNsYXRp b25cbiIpOwotICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICBnb3RvIHhw dXR4OwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICAgICAgICAgIHB1 dGZsYWdzID0gUFVUX1JFUzsKLSAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9SRVNUQVJUICovCi0g ICAgfQotICAgIGRlYnVnKEYxMDEsImZ0cCBQVVQgcmVzdGFydCIsIiIscHV0ZmxhZ3MgJiBQVVRf UkVTKTsKLSAgICBkZWJ1ZyhGMTAxLCJmdHAgUFVUIHVwZGF0ZSIsIiIscHV0ZmxhZ3MgJiBQVVRf VVBEKTsKLQotI2lmZGVmIFBJUEVTRU5ECi0gICAgaWYgKHB2W1NORF9GTFRdLml2YWwgPiAwKSB7 ICAgICAgICAgLyogSGF2ZSBTRU5EIEZJTFRFUj8gKi8KLSAgICAgICAgaWYgKCFwdltTTkRfRkxU XS5zdmFsKSB7Ci0gICAgICAgICAgICBzbmRmaWx0ZXIgPSBOVUxMOwotICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgc25kZmlsdGVyID0gKGNoYXIgKikgbWFsbG9jKChpbnQpIHN0cmxlbihw dltTTkRfRkxUXS5zdmFsKSArIDEpOwotICAgICAgICAgICAgaWYgKHNuZGZpbHRlcikgc3RyY3B5 KHNuZGZpbHRlcixwdltTTkRfRkxUXS5zdmFsKTsgLyogc2FmZSAqLwotICAgICAgICB9Ci0gICAg ICAgIGRlYnVnKEYxMTAsImZ0cCBwdXQgL0ZJTFRFUiIsIHNuZGZpbHRlciwgMCk7Ci0gICAgfQot ICAgIGlmIChzbmRmaWx0ZXIgfHwgcGlwZXNlbmQpICAgICAgICAgIC8qIE5vIC9VUERBVEUgb3Ig L1JFU1RBUlQgKi8KLSAgICAgIGlmIChwdXRmbGFncykgICAgICAgICAgICAgICAgICAgICAvKiB3 aXRoIHBpcGVzIG9yIGZpbHRlcnMgKi8KLSAgICAgICAgcHV0ZmxhZ3MgPSAwOwotI2VuZGlmIC8q IFBJUEVTRU5EICovCi0KLSAgICB0ZmMgPSAoQ0tfT0ZGX1QpMDsJCQkvKiBJbml0aWFsaXplIHN0 YXRzIGFuZCBjb3VudGVycyAqLwotICAgIGZpbGNudCA9IDA7Ci0gICAgcGt0bnVtID0gMDsKLSAg ICBzcGFja2V0cyA9IDBMOwotCi0gICAgaWYgKHdpbGQpICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogKGlzIHRoaXMgbmVjZXNzYXJ5PykgKi8KLSAgICAgIGN4ID0gRlRQX01QVTsKLQotICAg IHQwID0gZ21zdGltZXIoKTsgICAgICAgICAgICAgICAgICAgIC8qIFJlY29yZCBzdGFydGluZyB0 aW1lICovCi0KLSAgICBkb25lID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb29w IGNvbnRyb2wgKi8KLSAgICBjYW5jZWxncm91cCA9IDA7Ci0KLSAgICBjZGxldmVsID0gMDsKLSAg ICBjZHNpbWx2bCA9IDA7Ci0gICAgd2hpbGUgKCFkb25lICYmICFjYW5jZWxncm91cCkgeyAgICAg LyogTG9vcCBmb3IgYWxsIGZpbGVzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogb3IgdW50aWwgY2FuY2VsZWQuICovCi0jaWZkZWYgRlRQX1BST1hZCi0gICAg ICAgIC8qCi0gICAgICAgICAgIElmIHdlIGFyZSB1c2luZyBhIHByb3h5LCB3ZSBkb24ndCB1c2Ug dGhlIGxvY2FsIGZpbGUgbGlzdDsKLSAgICAgICAgICAgaW5zdGVhZCB3ZSB1c2UgdGhlIGxpc3Qg b24gdGhlIHJlbW90ZSBtYWNoaW5lIHdoaWNoIHdlIHdhbnQKLSAgICAgICAgICAgc2VudCB0byBz b21lb25lIGVsc2UsIGFuZCB3ZSB1c2UgcmVtZ2xvYigpIHRvIGdldCB0aGUgbmFtZXMuCi0gICAg ICAgICAgIEJ1dCBpbiB0aGF0IGNhc2Ugd2Ugc2hvdWxkbid0IGV2ZW4gYmUgZXhlY3V0aW5nIHRo aXMgcm91dGluZTsKLSAgICAgICAgICAgc2VlIGZ0cF9tcHV0KCkuCi0gICAgICAgICovCi0jZW5k aWYgLyogRlRQX1BST1hZICovCi0KLSAgICAgICAgY2FuY2VsZmlsZSA9IDA7Ci0gICAgICAgIHgg PSBnbmZpbGUoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IG5leHQgZmlsZSBmcm9tIGxpc3Qo cykgKi8KLQotICAgICAgICBpZiAoeCA9PSAwKSAgICAgICAgICAgICAgICAgICAgIC8qIChzZWUg Z25maWxlKCkgY29tbWVudHMuLi4pICovCi0gICAgICAgICAgeCA9IGduZmVycm9yOwotICAgICAg ICBkZWJ1ZyhGMTExLCJGVFAgUFVUIGduZmlsZSIsZmlsbmFtLHgpOwotICAgICAgICBkZWJ1ZyhG MTExLCJGVFAgUFVUIGJpbmFyeSIsZmlsbmFtLGJpbmFyeSk7Ci0KLSAgICAgICAgc3dpdGNoICh4 KSB7Ci0gICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0byBz ZW5kICovCi0gICAgICAgICAgICBzMiA9IGFzbmFtYnVmOwotI2lmbmRlZiBOT1NQTAotICAgICAg ICAgICAgaWYgKGFzbmFtYnVmWzBdKSB7ICAgICAgICAgIC8qIEFzLW5hbWUgKi8KLSAgICAgICAg ICAgICAgICBpbnQgbjsgY2hhciAqcDsgICAgICAgICAvKiB0byBiZSBldmFsdWF0ZWQuLi4gKi8K LSAgICAgICAgICAgICAgICBuID0gVE1QQlVGU0laOwotICAgICAgICAgICAgICAgIHAgPSB0bXBi dWY7Ci0gICAgICAgICAgICAgICAgenpzdHJpbmcoYXNuYW1idWYsJnAsJm4pOwotICAgICAgICAg ICAgICAgIHMyID0gdG1wYnVmOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBwdXQg YXNuYW1lIixzMiwwKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAg ICAgICAgcmMgPSBwdXRmaWxlKGN4LCAgICAgICAgICAgIC8qIEZ1bmN0aW9uIChQVVQsIEFQUEVO RCkgKi8KLSAgICAgICAgICAgICAgICAgICAgZmlsbmFtLCBzMiwgICAgICAgICAvKiBOYW1lIHRv IHNlbmQsIGFzLW5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgZm9yY2V0eXBlLCBtb3Zpbmcs ICAvKiBQYXJhbWV0ZXJzIGZyb20gc3dpdGNoZXMuLi4gKi8KLSAgICAgICAgICAgICAgICAgICAg c25kX21vdmUsIHNuZF9yZW5hbWUsIHNydl9yZW5hbSwKLSAgICAgICAgICAgICAgICAgICAgeF9j bnYsIHhfdXNuLCB4ZmlsZXR5cGUsIHhfcHJtLAotI2lmbmRlZiBOT0NTRVRTCi0gICAgICAgICAg ICAgICAgICAgIHhfY3NsLCAoIXhfeGxhID8gLTEgOiB4X2NzciksCi0jZWxzZQotICAgICAgICAg ICAgICAgICAgICAtMSwgLTEsCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICAgICAgICAgICAg ICAgICBwdXRmbGFncwotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgZGVidWco RjExMSwiZnRwIHB1dCBwdXRmaWxlIHJjIixmaWxuYW0scmMpOwotICAgICAgICAgICAgZGVidWco RjExMSwiZnRwIHB1dCBwdXRmaWxlIGNhbmNlbGZpbGUiLGZpbG5hbSxjYW5jZWxmaWxlKTsKLSAg ICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBwdXQgcHV0ZmlsZSBjYW5jZWxncm91cCIsZmlsbmFt LGNhbmNlbGdyb3VwKTsKLSAgICAgICAgICAgIGlmIChyYyA+IC0xKSB7Ci0gICAgICAgICAgICAg ICAgZ29vZCsrOwotICAgICAgICAgICAgICAgIHN0YXR1cyA9IDE7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBpZiAoY2FuY2VsZmlsZSkKLSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg ICAgICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgICAgICAgICAgZnRwX2ZhaSsrOwotICAgICAg ICAgICAgICAgIGlmIChwdXRlcnJvcikgewotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAw OwotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9GYXRhbCB1cGxvYWQgZXJyb3I6ICVzXG4i LGZpbG5hbSk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUrKzsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICBjYXNlIDA6 ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBtb3JlIGZpbGVzLCBkb25lICovCi0gICAgICAg ICAgICBkb25lKys7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICBjYXNlIC0xOgot ICAgICAgICAgICAgcHJpbnRmKCI/JXM6IGZpbGUgbm90IGZvdW5kIC0gXCIlc1wiXG4iLAotICAg ICAgICAgICAgICAgICAgIHB1dGVycm9yID8gIkZhdGFsIiA6ICJXYXJuaW5nIiwKLSAgICAgICAg ICAgICAgICAgICBmaWxuYW0KLSAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgaWYg KHB1dGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gMDsKLSAgICAgICAgICAgICAg ICBkb25lKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBjb250aW51ZTsKLSAgICAgICAgICBjYXNlIC0yOgotICAgICAgICAgICAgaWYgKHB1dGVy cm9yKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/RmF0YWw6IGZpbGUgbm90IGZvdW5kIC0g XCIlc1wiXG4iLCBmaWxuYW0pOwotICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7Ci0gICAgICAg ICAgICAgICAgZG9uZSsrOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgIC8qIE5vdCByZWFkYWJsZSwg a2VlcCBnb2luZyAqLwotICAgICAgICAgIGNhc2UgLTM6Ci0gICAgICAgICAgICBpZiAocHV0ZXJy b3IpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9GYXRhbDogUmVhZCBhY2Nlc3MgZGVuaWVk IC0gXCIlc1wiXG4iLCBmaWxuYW0pOwotICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7Ci0gICAg ICAgICAgICAgICAgZG9uZSsrOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgcHJpbnRmKCI/V2FybmluZyBhY2Nlc3MgZGVuaWVkIC0gXCIlc1wiXG4i LCBmaWxuYW0pOwotICAgICAgICAgICAgY29udGludWU7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAg ICAgIGNhc2UgLTQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIENhbmNlbGVkICovCi0gICAgICAg ICAgICBkb25lKys7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0g ICAgICAgICAgY2FzZSAtNToKLSAgICAgICAgICAgIHByaW50ZigiP1RvbyBtYW55IGZpbGVzIG1h dGNoXG4iKTsKLSAgICAgICAgICAgIGRvbmUrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgIGNhc2UgLTY6Ci0gICAgICAgICAgICBpZiAoZ29vZCA8IDEpCi0gICAgICAgICAgICAgIHBy aW50ZigiP05vIGZpbGVzIHNlbGVjdGVkXG4iKTsKLSAgICAgICAgICAgIGRvbmUrKzsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmludGYoIj9n ZXRuZXh0ZmlsZSgpIC0gdW5rbm93biBmYWlsdXJlXG4iKTsKLSAgICAgICAgICAgIGRvbmUrKzsK LSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY2RsZXZlbCA+IDApIHsKLSAgICAgICAgd2hpbGUg KGNkbGV2ZWwtLSkgewotICAgICAgICAgICAgaWYgKGNkc2ltbHZsKSB7Ci0gICAgICAgICAgICAg ICAgY2RzaW1sdmwtLTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRvZnRwY2R1cCgpKQotICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoc3RhdHVzID4gMCkg ewotICAgICAgICBpZiAoY2FuY2VsZ3JvdXApCi0gICAgICAgICAgc3RhdHVzID0gMDsKLSAgICAg ICAgZWxzZSBpZiAoY2FuY2VsZmlsZSAmJiBnb29kIDwgMSkKLSAgICAgICAgICBzdGF0dXMgPSAw OwotICAgIH0KLSAgICBzdWNjZXNzID0gc3RhdHVzOwotICAgIHggPSBzdWNjZXNzOwotCi0gIHhw dXR4OgotICAgIGlmICh4ID4gLTEpIHsKLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgIHQxID0gZ21z dGltZXIoKTsgICAgICAgICAgICAgICAgLyogRW5kIHRpbWUgKi8KLSAgICAgICAgc2VjID0gKENL RkxPQVQpKChDS0ZMT0FUKSh0MSAtIHQwKSAvIDEwMDAuMCk7IC8qIFN0YXRzICovCi0gICAgICAg IGlmICghc2VjKSBzZWMgPSAwLjAwMTsKLSAgICAgICAgZnB0c2VjcyA9IHNlYzsKLSNlbHNlCi0g ICAgICAgIHNlYyA9ICh0MSAtIHQwKSAvIDEwMDA7Ci0gICAgICAgIGlmICghc2VjKSBzZWMgPSAx OwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICAgICAgdGZjcHMgPSAobG9uZykgKHRmYyAvIHNl Yyk7Ci0gICAgICAgIHRzZWNzID0gKGludClzZWM7Ci0gICAgICAgIGxhc3R4ZmVyID0gV19GVFB8 V19TRU5EOwotICAgICAgICB4ZmVyc3RhdCA9IHN1Y2Nlc3M7Ci0gICAgICAgIGlmIChkcHlhY3Rp dmUpCi0JICBmdHNjcmVlbihzdGF0dXMgPiAwID8gU0NSX1RDIDogU0NSX0NXLCAwLCAoQ0tfT0ZG X1QpMCwgIiIpOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDw9IFNORF9NQVg7IGkrKykgeyAg ICAvKiBGcmVlIG1hbGxvYydkIG1lbW9yeSAqLwotICAgICAgICBpZiAocHZbaV0uc3ZhbCkKLSAg ICAgICAgICBmcmVlKHB2W2ldLnN2YWwpOwotICAgIH0KLSAgICBmdHJlc2V0KCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBVbmRvIHN3aXRjaCBlZmZlY3RzICovCi0gICAgZHB5YWN0aXZl ID0gMDsKLSAgICByZXR1cm4oeCk7Ci19Ci0KLQotc3RhdGljIGNoYXIgKiogbWdldGxpc3QgPSBO VUxMOyAgICAgICAgIC8qIEZvciBNR0VUICovCi1zdGF0aWMgaW50IG1nZXRuID0gMCwgbWdldHgg PSAwOwotc3RhdGljIGNoYXIgeHRtcGJ1Zls0MDk2XTsKLQotLyoKLSAgYyBtIGQgbCBpIG4gZyBl IHQKLQotICBHZXQgZmlsZXMgc3BlY2lmaWVkIGJ5IC1nIGNvbW1hbmQtbGluZSBvcHRpb24uCi0g IEZpbGUgbGlzdCBpcyBzZXQgdXAgaW4gY21saXN0W10gYnkgY2t1dXN5LmM7IG5maWxzIGlzIGxl bmd0aCBvZiBsaXN0LgotKi8KLWludAotY21kbGluZ2V0KHN0YXkpIGludCBzdGF5OyB7Ci0gICAg aW50IGksIHgsIHJjID0gMCwgZG9uZSA9IDAsIGdvb2QgPSAwLCBzdGF0dXMgPSAwLCBhcHBlbmQg PSAwOwotICAgIGludCBsY3MgPSAtMSwgcmNzID0gLTEsIHhsYXRlID0gMDsKLSAgICBpbnQgZmly c3QgPSAxOwotICAgIGludCBtZ2V0ID0gMTsKLSAgICBpbnQgbmM7Ci0gICAgY2hhciAqIHMsICog czIsICogczM7Ci0gICAgVUxPTkcgdDAsIHQxOyAgICAgICAgICAgICAgICAgICAgICAgLyogVGlt ZXMgZm9yIHN0YXRzICovCi0jaWZkZWYgR0ZUSU1FUgotICAgIENLRkxPQVQgc2VjOwotI2Vsc2UK LSAgICBpbnQgc2VjID0gMDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSAgICBpZiAocXVpZXQp IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiAtcSByZWFsbHkgbWVhbnMgcXVpZXQgKi8KLSAg ICAgICAgZGlzcGxhID0gMDsKLSAgICAgICAgZmRpc3BsYSA9IDA7Ci0gICAgfSBlbHNlIHsKLSAg ICAgICAgZGlzcGxhID0gMTsKLSAgICAgICAgZmRpc3BsYSA9IFhZRkRfQjsKLSAgICB9Ci0gICAg dGVzdGluZyA9IDA7Ci0gICAgZHB5YWN0aXZlID0gMDsKLSAgICBvdXQyc2NyZWVuID0gMDsKLSAg ICB3aGF0ID0gV19GVFB8V19SRUNWOwotICAgIG1nZXRtZXRob2QgPSAwOwotICAgIG1nZXRmb3Jj ZWQgPSAwOwotCi0gICAgaGF2ZXR5cGUgPSAwOwotICAgIGhhdmVzaXplID0gKENLX09GRl9UKS0x OwotICAgIG1ha2VzdHIoJmhhdmVtZHRtLE5VTEwpOwotCi0gICAgaWYgKGZ0cF9mbmMgPCAwKQot ICAgICAgZnRwX2ZuYyA9IGZuY2FjdDsKLQotI2lmbmRlZiBOT1NQTAotICAgIGNtZF9xdW90aW5n ID0gMDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIGRlYnVnKEYxMDEsImZ0cCBjbWRsaW5nZXQg bmZpbHMiLCIiLG5maWxzKTsKLQotICAgIGlmIChmdHBfY252ID09IENOVl9BVVRPKSB7ICAgICAg ICAgIC8qIE5hbWUgY29udmVyc2lvbiBpcyBhdXRvICovCi0gICAgICAgIGlmIChhbGlrZSkgeyAg ICAgICAgICAgICAgICAgICAgLyogSWYgc2VydmVyICYgY2xpZW50IGFyZSBhbGlrZSAqLwotICAg ICAgICAgICAgbmMgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNvbnZlcnNpb24gKi8K LSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGV5IGFyZSBk aWZmZXJlbnQgKi8KLSAgICAgICAgICAgIGlmIChzZXJ2ZXJ0eXBlID09IFNZU19VTklYIHx8IHNl cnZlcnR5cGUgPT0gU1lTX1dJTjMyKQotICAgICAgICAgICAgICBuYyA9IC0xOyAgICAgICAgICAg ICAgICAgIC8qIG9ubHkgbWluaW1hbCBjb252ZXJzaW9ucyBuZWVkZWQgKi8KLSAgICAgICAgICAg IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndpc2UgKi8KLSAgICAgICAgICAg ICAgbmMgPSAxOyAgICAgICAgICAgICAgICAgICAvKiBmdWxsIGNvbnZlcnNpb24gKi8KLSAgICAg ICAgfQotICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBhdXRv IC0gZG8gd2hhdCB1c2VyIHNhaWQgKi8KLSAgICAgIG5jID0gZnRwX2NudjsKLQotICAgIGlmIChu ZmlscyA8IDEpCi0gICAgICBkb2V4aXQoQkFEX0VYSVQsLTEpOwotCi0gICAgdDAgPSBnbXN0aW1l cigpOyAgICAgICAgICAgICAgICAgICAgLyogU3RhcnRpbmcgdGltZSBmb3IgdGhpcyBiYXRjaCAq LwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICBpZiAoeGxhdGUpIHsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTRVQgRlRQIENIQVJBQ1RFUi1TRVQtVFJBTlNMQVRJT04gKi8KLSAgICAgICAgbGNz ID0gZnRwX2NzbDsgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBjaGFyc2V0ICovCi0gICAgICAg IGlmIChsY3MgPCAwKSBsY3MgPSBmY2hhcnNldDsKLSAgICAgICAgaWYgKGxjcyA8IDApIHhsYXRl ID0gMDsKLSAgICB9Ci0gICAgaWYgKHhsYXRlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyog U3RpbGwgT04/ICovCi0gICAgICAgIHJjcyA9IGZ0cF9jc3g7ICAgICAgICAgICAgICAgICAgLyog UmVtb3RlIChTZXJ2ZXIpIGNoYXJzZXQgKi8KLSAgICAgICAgaWYgKHJjcyA8IDApIHJjcyA9IGZ0 cF9jc3I7Ci0gICAgICAgIGlmIChyY3MgPCAwKSB4bGF0ZSA9IDA7Ci0gICAgfQotI2VuZGlmIC8q IE5PQ1NFVFMgKi8KLSAgICAvKgotICAgICAgSWYgd2UgaGF2ZSBvbmx5IG9uZSBmaWxlIGFuZCBp dCBpcyBhIGRpcmVjdG9yeSwgdGhlbiB3ZSBhc2sgZm9yIGEKLSAgICAgIGxpc3Rpbmcgb2YgaXRz IGNvbnRlbnRzLCByYXRoZXIgdGhhbiByZXRyaWV2aW5nIHRoZSBkaXJlY3RvcnkgZmlsZQotICAg ICAgaXRzZWxmLiAgVGhpcyBpcyB3aGF0IChlLmcuKSBOZXRzY2FwZSBkb2VzLgotICAgICovCi0g ICAgaWYgKG5maWxzID09IDEpIHsKLSAgICAgICAgaWYgKGRvZnRwY3dkKChjaGFyICopY21saXN0 W21nZXR4XSwtMSkpIHsKLSAgICAgICAgICAgIC8qIElmIHdlIGNhbiBDRCB0byBpdCwgaXQgbXVz dCBiZSBhIGRpcmVjdG9yeSAqLwotICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZSkgewotICAgICAg ICAgICAgICAgIGNtbGlzdFttZ2V0eF0gPSAiKiI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgIHN0YXR1cyA9Ci0gICAgICAgICAgICAgICAgICAocmVjdnJlcXVlc3QoIkxJ U1QiLCItIiwiIiwid2IiLDAsMCxOVUxMLHhsYXRlLGxjcyxyY3MpPT0wKTsKLSAgICAgICAgICAg ICAgICBkb25lID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLS8qCi0gIFRo ZSBmb2xsb3dpbmcgaXMgdG8gd29yayBhcm91bmQgVU5JWCBzZXJ2ZXJzIHdoaWNoLCB3aGVuIGdp dmVuIGEgY29tbWFuZAotICBsaWtlICJOTFNUIHBhdGgvYmxhaCIgKG5vdCB3aWxkKSByZXR1cm5z IHRoZSBiYXNlbmFtZSB3aXRob3V0IHRoZSBwYXRoLgotKi8KLSAgICBpZiAoIWRvbmUgJiYgc2Vy dmVydHlwZSA9PSBTWVNfVU5JWCAmJiBuZmlscyA9PSAxKSB7Ci0gICAgICAgIG1nZXQgPSBpc3dp bGQoY21saXN0W21nZXR4XSk7Ci0gICAgfQotICAgIGlmICghbWdldCAmJiAhZG9uZSkgeyAgICAg ICAgICAgICAgIC8qIEludm9rZWQgYnkgY29tbWFuZC1saW5lIEZUUCBVUkwgKi8KLSAgICAgICAg aWYgKGZ0cF9kZWIpCi0gICAgICAgICAgcHJpbnRmKCJET0lORyBHRVQuLi5cbiIpOwotICAgICAg ICBkb25lKys7Ci0gICAgICAgIGNhbmNlbGZpbGUgPSAwOyAgICAgICAgICAgICAgICAgLyogVGhp cyBmaWxlIG5vdCBjYW5jZWxlZCB5ZXQgKi8KLSAgICAgICAgcyA9IGNtbGlzdFttZ2V0eF07Ci0g ICAgICAgIHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbCByZXR1cm4g Y29kZSAqLwotCWZzaXplID0gKENLX09GRl9UKS0xOwotCWlmIChzaXplb2spIHsKLQkgICAgeCA9 IGZ0cGNtZCgiU0laRSIscyxsY3MscmNzLGZ0cF92Ym0pOyAvKiBHZXQgcmVtb3RlIGZpbGUncyBz aXplICovCi0JICAgIGlmICh4ID09IFJFUExZX0NPTVBMRVRFKQotCSAgICAgIGZzaXplID0gY2th dG9mcygmZnRwX3JlcGx5X3N0cls0XSk7Ci0JfQotICAgICAgICBja3N0cm5jcHkoZmlsbmFtLHMs Q0tNQVhQQVRIKTsgIC8qIEZvciBcdihmaWxlbmFtZSkgKi8KLSAgICAgICAgZGVidWcoRjExMSwi ZnRwIGNtZGxpbmdldCBmaWxuYW0iLGZpbG5hbSxmc2l6ZSk7Ci0KLSAgICAgICAgbnpydG9sKHMs dG1wYnVmLG5jLDAsQ0tNQVhQQVRIKTsgLyogU3RyaXAgcGF0aCBhbmQgbWF5YmUgY29udmVydCAq LwotICAgICAgICBzMiA9IHRtcGJ1ZjsKLQotICAgICAgICAvKiBJZiBsb2NhbCBmaWxlIGFscmVh ZHkgZXhpc3RzLCB0YWtlIGNvbGxpc2lvbiBhY3Rpb24gKi8KLQotICAgICAgICBpZiAoemNoa2ko czIpID4gLTEpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoZnRwX2ZuYykgewotICAgICAgICAgICAg ICBjYXNlIFhZRlhfQTogICAgICAgICAgICAgIC8qIEFwcGVuZCAqLwotICAgICAgICAgICAgICAg IGFwcGVuZCA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug WFlGWF9SOiAgICAgICAgICAgICAgLyogUmVuYW1lICovCi0gICAgICAgICAgICAgIGNhc2UgWFlG WF9COiB7ICAgICAgICAgICAgLyogQmFja3VwICovCi0gICAgICAgICAgICAgICAgICBjaGFyICog cCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICBpbnQgeCA9IC0xOwotICAgICAgICAgICAgICAg ICAgem5ld24oczIsJnApOyAgICAgICAgIC8qIE1ha2UgdW5pcXVlIG5hbWUgKi8KLSAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBjbWRsaW5nZXQgem5ld24iLHAsMCk7Ci0gICAgICAg ICAgICAgICAgICBpZiAoZnRwX2ZuYyA9PSBYWUZYX0IpIHsgLyogQmFja3VwIGV4aXN0aW5nIGZp bGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICB4ID0genJlbmFtZShzMixwKTsKLSAgICAgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgY21kbGluZ2V0IGJhY2t1cCB6cmVuYW1lIixw LHgpOwotICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgIC8qIFJlbmFtZSBp bmNvbWluZyBmaWxlICovCi0gICAgICAgICAgICAgICAgICAgICAgeCA9IGNrc3RybmNweSh0bXBi dWYscCxDS01BWFBBVEgrMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgczIgPSB0bXBidWY7Ci0g ICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIGNtZGxpbmdldCByZW5hbWUgaW5j b21pbmciLHAseCk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBpZiAo eCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9CYWNrdXAvUmVuYW1lIGZh aWxlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgIGNhc2UgWFlGWF9EOiAgICAgICAgICAgICAgLyogRGlzY2FyZCAq LwotICAgICAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9GTiwnRicsKENLX09GRl9UKTAscyk7Ci0g ICAgICAgICAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX1NLSVAsKENLX09GRl9UKVNLUF9OQU0s cyk7Ci0gICAgICAgICAgICAgICAgdGxvZyhGMTAwLCIgcmVmdXNlZDogbmFtZSIsIiIsMCk7Ci0g ICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIGNtZGxpbmdldCBza2lwIG5hbWUiLHMyLDAp OwotICAgICAgICAgICAgICAgIGdvdG8geGNsZ2V0OwotCi0gICAgICAgICAgICAgIGNhc2UgWFlG WF9YOiAgICAgICAgICAgICAgLyogT3ZlcndyaXRlICovCi0gICAgICAgICAgICAgIGNhc2UgWFlG WF9VOiAgICAgICAgICAgICAgLyogVXBkYXRlIChhbHJlYWR5IGhhbmRsZWQgYWJvdmUpICovCi0J ICAgICAgY2FzZSBYWUZYX006CQkvKiBkaXR0byAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJjID0gZ2V0ZmlsZShzLCAgICAgICAg ICAgICAgICAgLyogUmVtb3RlIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgIHMyLCAgICAg ICAgICAgICAgICAvKiBMb2NhbCBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAwLCAgICAg ICAgICAgICAgICAgLyogUmVjb3Zlci9SZXN0YXJ0ICovCi0gICAgICAgICAgICAgICAgICAgICBh cHBlbmQsICAgICAgICAgICAgLyogQXBwZW5kICovCi0gICAgICAgICAgICAgICAgICAgICBOVUxM LCAgICAgICAgICAgICAgLyogUGlwZW5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgIDAsICAg ICAgICAgICAgICAgICAvKiBUcmFuc2xhdGUgY2hhcnNldHMgKi8KLSAgICAgICAgICAgICAgICAg ICAgIC0xLCAgICAgICAgICAgICAgICAvKiBGaWxlIGNoYXJzZXQgKG5vbmUpICovCi0gICAgICAg ICAgICAgICAgICAgICAtMSAgICAgICAgICAgICAgICAgLyogU2VydmVyIGNoYXJzZXQgKG5vbmUp ICovCi0gICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgY21k bGluZ2V0IHJjIixzLHJjKTsKLSAgICAgICAgZGVidWcoRjExMSwiZnRwIGNtZGxpbmdldCBjYW5j ZWxmaWxlIixzLGNhbmNlbGZpbGUpOwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgY21kbGluZ2V0 IGNhbmNlbGdyb3VwIixzLGNhbmNlbGdyb3VwKTsKLQotICAgICAgICBpZiAocmMgPCAwICYmIGhh dmV1cmwgJiYgc1swXSA9PSAnLycpIC8qIFVSTCBmYWlsZWQgLSB0cnkgYWdhaW4gKi8KLSAgICAg ICAgICAgIHJjID0gZ2V0ZmlsZSgmc1sxXSwgICAgICAgICAvKiBSZW1vdGUgbmFtZSB3aXRob3V0 IGxlYWRpbmcgJy8nICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgczIsICAgICAgICAgICAg LyogTG9jYWwgbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAg IC8qIFJlY292ZXIvUmVzdGFydCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCwg ICAgICAgIC8qIEFwcGVuZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAg ICAgIC8qIFBpcGVuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAg ICAgLyogVHJhbnNsYXRlIGNoYXJzZXRzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgLTEs ICAgICAgICAgICAgLyogRmlsZSBjaGFyc2V0IChub25lKSAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgIC0xICAgICAgICAgICAgIC8qIFNlcnZlciBjaGFyc2V0IChub25lKSAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIGlmIChyYyA+IC0xKSB7Ci0gICAgICAgICAg ICBnb29kKys7Ci0gICAgICAgICAgICBzdGF0dXMgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGlm IChjYW5jZWxmaWxlKQotICAgICAgICAgIGdvdG8geGNsZ2V0OwotICAgICAgICBpZiAocmMgPCAw KSB7Ci0gICAgICAgICAgICBmdHBfZmFpKys7Ci0jaWZkZWYgRlRQX1RJTUVPVVQKLQkgICAgaWYg KGZ0cF90aW1lZF9vdXQpCi0JICAgICAgc3RhdHVzID0gMDsKLSNlbmRpZgkvKiBGVFBfVElNRU9V VCAqLwotICAgICAgICAgICAgaWYgKGdldGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgc3RhdHVz ID0gMDsKLSAgICAgICAgICAgICAgICBkb25lKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSAgICB9Ci0gICAgaWYgKGZ0cF9kZWIgJiYgIWRvbmUpCi0gICAgICBwcmludGYoIkRPSU5HIE1H RVQuLi5cbiIpOwotICAgIHdoaWxlICghZG9uZSAmJiAhY2FuY2VsZ3JvdXApIHsKLSAgICAgICAg Y2FuY2VsZmlsZSA9IDA7ICAgICAgICAgICAgICAgICAvKiBUaGlzIGZpbGUgbm90IGNhbmNlbGVk IHlldCAqLwotICAgICAgICBzID0gKGNoYXIgKilyZW1vdGVfZmlsZXMoZmlyc3QsKENIQVIgKilj bWxpc3RbbWdldHhdLE5VTEwsMCk7Ci0gICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAgICBp ZiAoISpzKSB7Ci0gICAgICAgICAgICBmaXJzdCA9IDE7Ci0gICAgICAgICAgICBtZ2V0eCsrOwot ICAgICAgICAgICAgaWYgKG1nZXR4IDwgbmZpbHMpCi0gICAgICAgICAgICAgIHMgPSAoY2hhciAq KXJlbW90ZV9maWxlcyhmaXJzdCwoQ0hBUiAqKWNtbGlzdFttZ2V0eF0sTlVMTCwwKTsKLSAgICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcyA9IE5VTEw7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTExLCJmdHAgY21kbGluZ2V0IHJlbW90ZV9maWxlcyBCIixzLDApOwotICAgICAgICAgICAgaWYg KCFzKSB7Ci0gICAgICAgICAgICAgICAgZG9uZSA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLyoKLSAgICAgICAgICBUaGUgc2Vt YW50aWNzIG9mIE5MU1QgYXJlIGlsbC1kZWZpbmVkLiAgU3VwcG9zZSB3ZSBoYXZlIGp1c3Qgc2Vu dAotICAgICAgICAgIE5MU1QgL3BhdGgvW2Etel0qLiAgTW9zdCBzZXJ2ZXJzIHNlbmQgYmFjayBu YW1lcyBsaWtlIC9wYXRoL2ZvbywKLSAgICAgICAgICAvcGF0aC9iYXIsIGV0Yy4gIEJ1dCBzb21l IHNlbmQgYmFjayBvbmx5IGZvbyBhbmQgYmFyLCBhbmQgc3Vic2VxdWVudAotICAgICAgICAgIFJF VFIgY29tbWFuZHMgYmFzZWQgb24gdGhlIHBhdGhsZXNzIG5hbWVzIGFyZSBub3QgZ29pbmcgdG8g d29yay4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKHNlcnZlcnR5cGUgPT0gU1lTX1VOSVggJiYg IWNrc3RyY2hyKHMsJy8nKSkgewotICAgICAgICAgICAgaWYgKChzMyA9IGNrc3RycmNocihjbWxp c3RbbWdldHhdLCcvJykpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGxlbiwgbGVmdCA9IDQwOTY7 Ci0gICAgICAgICAgICAgICAgY2hhciAqIHRtcCA9IHh0bXBidWY7Ci0gICAgICAgICAgICAgICAg bGVuID0gczMgLSBjbWxpc3RbbWdldHhdICsgMTsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHko dG1wLGNtbGlzdFttZ2V0eF0sbGVmdCk7Ci0gICAgICAgICAgICAgICAgdG1wICs9IGxlbjsKLSAg ICAgICAgICAgICAgICBsZWZ0IC09IGxlbjsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkodG1w LHMsbGVmdCk7Ci0gICAgICAgICAgICAgICAgcyA9IHh0bXBidWY7Ci0JCWRlYnVnKEYxMTEsImZ0 cCBjbWRsaW5nZXQgcmVtb3RlX2ZpbGVzIFgiLHMsMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICAgICAgZmlyc3QgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgZmlyc3Qg YW55IG1vcmUgKi8KLQotCWRlYnVnKEYxMTEsImZ0cCBjbWRsaW5nZXQgaGF2ZXR5cGUiLHMsaGF2 ZXR5cGUpOwotCWlmIChoYXZldHlwZSA+IDAgJiYgaGF2ZXR5cGUgIT0gRlRZUF9GSUxFKSB7IC8q IFNlcnZlciBzYXlzIG5vdCBmaWxlICovCi0JICAgIGRlYnVnKEYxMTAsImZ0cCBjbWRsaW5nZXQg bm90LWEtZmlsZSIscywwKTsKLQkgICAgY29udGludWU7Ci0JfQotICAgICAgICByYyA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgcmV0dXJuIGNvZGUgKi8KLQlpZiAoaGF2 ZXNpemUgPiAoQ0tfT0ZGX1QpLTEpIHsJLyogQWxyZWFkeSBoYXZlIGZpbGUgc2l6ZT8gKi8KLQkg ICAgZnNpemUgPSBoYXZlc2l6ZTsKLQl9IGVsc2UgewkJCS8qIE5vIC0gbXVzdCBhc2sgc2VydmVy ICovCi0JICAgIC8qCi0JICAgICAgUHJpb3IgdG8gc2VuZGluZyB0aGUgTkxTVCBjb21tYW5kIHdl IG5lY2Vzc2FyaWx5IHB1dCB0aGUKLQkgICAgICBzZXJ2ZXIgaW50byBBU0NJSSBtb2RlLiAgV2Ug bXVzdCBub3cgcHV0IGl0IGJhY2sgaW50byB0aGUKLQkgICAgICB0aGUgcmVxdWVzdGVkIG1vZGUg c28gdGhlIHVwY29taW5nIFNJWkUgY29tbWFuZCByZXR1cm5zCi0JICAgICAgcmlnaHQga2luZCBv ZiBzaXplOyB0aGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvcgotCSAgICAgIEdFVCAvUkVD T1ZFUjsgb3RoZXJ3aXNlIHRoZSBzZXJ2ZXIgcmV0dXJucyB0aGUgIkFTQ0lJIiBzaXplCi0JICAg ICAgb2YgdGhlIGZpbGUsIHJhdGhlciB0aGFuIGl0cyB0cnVlIHNpemUuCi0JICAgICovCi0JICAg IGNoYW5nZXR5cGUoZnRwX3R5cCwwKTsJLyogQ2hhbmdlIHRvIHJlcXVlc3RlZCB0eXBlICovCi0J ICAgIGZzaXplID0gKENLX09GRl9UKS0xOwotCSAgICBpZiAoc2l6ZW9rKSB7Ci0JCXggPSBmdHBj bWQoIlNJWkUiLHMsbGNzLHJjcyxmdHBfdmJtKTsKLQkJaWYgKHggPT0gUkVQTFlfQ09NUExFVEUp Ci0JCSAgZnNpemUgPSBja2F0b2ZzKCZmdHBfcmVwbHlfc3RyWzRdKTsKLQkgICAgfQotCX0KLSAg ICAgICAgY2tzdHJuY3B5KGZpbG5hbSxzLENLTUFYUEFUSCk7ICAvKiBGb3IgXHYoZmlsZW5hbWUp ICovCi0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBjbWRsaW5nZXQgZmlsbmFtIixmaWxuYW0sZnNp emUpOwotCi0gICAgICAgIG56cnRvbChzLHRtcGJ1ZixuYywwLENLTUFYUEFUSCk7IC8qIFN0cmlw IHBhdGggYW5kIG1heWJlIGNvbnZlcnQgKi8KLSAgICAgICAgczIgPSB0bXBidWY7Ci0KLSAgICAg ICAgLyogSWYgbG9jYWwgZmlsZSBhbHJlYWR5IGV4aXN0cywgdGFrZSBjb2xsaXNpb24gYWN0aW9u ICovCi0KLSAgICAgICAgaWYgKHpjaGtpKHMyKSA+IC0xKSB7Ci0gICAgICAgICAgICBzd2l0Y2gg KGZ0cF9mbmMpIHsKLSAgICAgICAgICAgICAgY2FzZSBYWUZYX0E6ICAgICAgICAgICAgICAvKiBB cHBlbmQgKi8KLSAgICAgICAgICAgICAgICBhcHBlbmQgPSAxOwotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICBjYXNlIFhZRlhfUjogICAgICAgICAgICAgIC8qIFJlbmFtZSAq LwotICAgICAgICAgICAgICBjYXNlIFhZRlhfQjogeyAgICAgICAgICAgIC8qIEJhY2t1cCAqLwot ICAgICAgICAgICAgICAgICAgY2hhciAqIHAgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgaW50 IHggPSAtMTsKLSAgICAgICAgICAgICAgICAgIHpuZXduKHMyLCZwKTsgICAgICAgICAvKiBNYWtl IHVuaXF1ZSBuYW1lICovCi0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgY21kbGlu Z2V0IHpuZXduIixwLDApOwotICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9mbmMgPT0gWFlGWF9C KSB7IC8qIEJhY2t1cCBleGlzdGluZyBmaWxlICovCi0gICAgICAgICAgICAgICAgICAgICAgeCA9 IHpyZW5hbWUoczIscCk7Ci0gICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIGNt ZGxpbmdldCBiYWNrdXAgenJlbmFtZSIscCx4KTsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAvKiBSZW5hbWUgaW5jb21pbmcgZmlsZSAqLwotICAgICAgICAgICAgICAg ICAgICAgIHggPSBja3N0cm5jcHkodG1wYnVmLHAsQ0tNQVhQQVRIKzEpOwotICAgICAgICAgICAg ICAgICAgICAgIHMyID0gdG1wYnVmOwotICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEs ImZ0cCBjbWRsaW5nZXQgcmVuYW1lIGluY29taW5nIixwLHgpOwotICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCI/QmFja3VwL1JlbmFtZSBmYWlsZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXNlIFhZRlhfRDog ICAgICAvKiBEaXNjYXJkICovCi0gICAgICAgICAgICAgICAgZnRzY3JlZW4oU0NSX0ZOLCdGJywo Q0tfT0ZGX1QpMCxzKTsKLSAgICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfU0tJUCwo Q0tfT0ZGX1QpU0tQX05BTSxzKTsKLSAgICAgICAgICAgICAgICB0bG9nKEYxMDAsIiByZWZ1c2Vk OiBuYW1lIiwiIiwwKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgY21kbGluZ2V0 IHNraXAgbmFtZSIsczIsMCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg ICAgIGNhc2UgWFlGWF9YOiAgICAgICAgICAgICAgLyogT3ZlcndyaXRlICovCi0gICAgICAgICAg ICAgIGNhc2UgWFlGWF9VOiAgICAgICAgICAgICAgLyogVXBkYXRlIChhbHJlYWR5IGhhbmRsZWQg YWJvdmUpICovCi0gICAgICAgICAgICAgIGNhc2UgWFlGWF9NOiAgICAgICAgICAgICAgLyogZGl0 dG8gKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF5eXiBBREQgQ0hBUlNF VCBTVFVGRiBIRVJFIF5eXiAqLwotICAgICAgICByYyA9IGdldGZpbGUocywgICAgICAgICAgICAg ICAgIC8qIFJlbW90ZSBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICBzMiwgICAgICAgICAg ICAgICAgLyogTG9jYWwgbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAg ICAgICAgIC8qIFJlY292ZXIvUmVzdGFydCAqLwotICAgICAgICAgICAgICAgICAgICAgYXBwZW5k LCAgICAgICAgICAgIC8qIEFwcGVuZCAqLwotICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAg ICAgICAgICAgIC8qIFBpcGVuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAg ICAgICAgICAgLyogVHJhbnNsYXRlIGNoYXJzZXRzICovCi0gICAgICAgICAgICAgICAgICAgICAt MSwgICAgICAgICAgICAgICAgLyogRmlsZSBjaGFyc2V0IChub25lKSAqLwotICAgICAgICAgICAg ICAgICAgICAgLTEgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBjaGFyc2V0IChub25lKSAqLwot ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgZGVidWcoRjExMSwiZnRwIGNtZGxpbmdl dCByYyIscyxyYyk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBjbWRsaW5nZXQgY2FuY2VsZmls ZSIscyxjYW5jZWxmaWxlKTsKLSAgICAgICAgZGVidWcoRjExMSwiZnRwIGNtZGxpbmdldCBjYW5j ZWxncm91cCIscyxjYW5jZWxncm91cCk7Ci0KLSAgICAgICAgaWYgKHJjID4gLTEpIHsKLSAgICAg ICAgICAgIGdvb2QrKzsKLSAgICAgICAgICAgIHN0YXR1cyA9IDE7Ci0gICAgICAgIH0KLSAgICAg ICAgaWYgKGNhbmNlbGZpbGUpCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChyYyA8 IDApIHsKLSAgICAgICAgICAgIGZ0cF9mYWkrKzsKLSNpZmRlZiBGVFBfVElNRU9VVAotCSAgICBp ZiAoZnRwX3RpbWVkX291dCkKLQkgICAgICBzdGF0dXMgPSAwOwotI2VuZGlmCS8qIEZUUF9USU1F T1VUICovCi0gICAgICAgICAgICBpZiAoZ2V0ZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBzdGF0 dXMgPSAwOwotICAgICAgICAgICAgICAgIGRvbmUrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotICAgIH0KLQotICB4Y2xnZXQ6Ci0gICAgaWYgKGNhbmNlbGdyb3VwKQotICAgICAgbWxzcmVz ZXQoKTsKLSAgICBpZiAoc3RhdHVzID4gMCkgewotICAgICAgICBpZiAoY2FuY2VsZ3JvdXApCi0g ICAgICAgICAgc3RhdHVzID0gMDsKLSAgICAgICAgZWxzZSBpZiAoY2FuY2VsZmlsZSAmJiBnb29k IDwgMSkKLSAgICAgICAgICBzdGF0dXMgPSAwOwotICAgIH0KLSAgICBzdWNjZXNzID0gc3RhdHVz OwotCi0jaWZkZWYgR0ZUSU1FUgotICAgIHQxID0gZ21zdGltZXIoKTsgICAgICAgICAgICAgICAg ICAgIC8qIEVuZCB0aW1lICovCi0gICAgc2VjID0gKENLRkxPQVQpKChDS0ZMT0FUKSh0MSAtIHQw KSAvIDEwMDAuMCk7IC8qIFN0YXRzICovCi0gICAgaWYgKCFzZWMpIHNlYyA9IDAuMDAxOwotICAg IGZwdHNlY3MgPSBzZWM7Ci0jZWxzZQotICAgIHNlYyA9ICh0MSAtIHQwKSAvIDEwMDA7Ci0gICAg aWYgKCFzZWMpIHNlYyA9IDE7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0gICAgdGZjcHMgPSAo bG9uZykgKHRmYyAvIHNlYyk7Ci0gICAgdHNlY3MgPSAoaW50KXNlYzsKLSAgICBsYXN0eGZlciA9 IFdfRlRQfFdfUkVDVjsKLSAgICB4ZmVyc3RhdCA9IHN1Y2Nlc3M7Ci0gICAgaWYgKGRweWFjdGl2 ZSkKLSAgICAgIGZ0c2NyZWVuKHN0YXR1cyA+IDAgPyBTQ1JfVEMgOiBTQ1JfQ1csIDAsIChDS19P RkZfVCkwLCAiIik7Ci0gICAgaWYgKCFzdGF5KQotICAgICAgZG9leGl0KHN1Y2Nlc3MgPyBHT09E X0VYSVQgOiBCQURfRVhJVCwgLTEpOwotICAgIHJldHVybihzdWNjZXNzKTsKLX0KLQotLyogIGQg byBmIHQgcCBnIGUgdCAgLS0gIFBhcnNlIGFuZCBleGVjdXRlIEdFVCwgTUdFVCwgTURFTEVURSwg Li4uICAqLwotCi0vKgotICBOb3RlOiBpZiB3ZSB3YW50ZWQgdG8gaW1wbGVtZW50IC9BRlRFUjos IC9CRUZPUkU6LCBldGMsIHdlIGNvdWxkIHVzZQotICB6c3RyZGF0KCkgdG8gY29udmVydCB0byBV VEMtYmFzZWQgdGltZV90LiAgQnV0IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmcm9tCi0gIHRoZSB1 c2VyLWludGVyZmFjZSBwZXJzcGVjdGl2ZSwgc2luY2UgdGhlIHNlcnZlcidzIGRpcmVjdG9yeSBs aXN0aW5ncyBzaG93Ci0gIGl0cyBvd24gbG9jYWwgdGltZXMgYW5kIHNpbmNlIHdlIGRvbid0IGtu b3cgd2hhdCB0aW1lem9uZSBpdCdzIGluLCB0aGVyZSdzCi0gIG5vIHdheSB0byByZWNvbmNpbGUg b3VyIGxvY2FsIHRpbWVzIHdpdGggdGhlIHNlcnZlcidzLgotKi8KLWludAotZG9mdHBnZXQoY3gs d2hvKSBpbnQgY3gsIHdobzsgeyAgICAgICAgIC8qIHdobyA9PSAxIGZvciBmdHAsIDAgZm9yIGtl cm1pdCAqLwotICAgIHN0cnVjdCBGREIgZmwsIHN3LCBjbTsKLSAgICBpbnQgaSwgbiwgcmMsIGdl dHZhbCA9IDAsIG1nZXQgPSAwLCBkb25lID0gMCwgcGlwZXNhdmUgPSAwOwotICAgIGludCB4X2Nu diA9IDAsIHhfcHJtID0gMCwgcmVzdGFydCA9IDAsIHN0YXR1cyA9IDAsIGdvb2QgPSAwOwotICAg IGludCB4X2ZuYyA9IDAsIGZpcnN0ID0gMCwgc2tpcHRoaXMgPSAwLCBhcHBlbmQgPSAwLCBzZWxl Y3RlZCA9IDA7Ci0gICAgaW50IHJlbmFtaW5nID0gMCwgbWRlbCA9IDAsIGxpc3RmaWxlID0gMCwg dXBkYXRpbmcgPSAwLCBnZXRvbmUgPSAwOwotICAgIGludCBtb3ZpbmcgPSAwLCBkZWxldGluZyA9 IDAsIHRvc2NyZWVuID0gMCwgaGFzcGF0aCA9IDA7Ci0gICAgaW50IGdvdHNpemUgPSAwOwotICAg IGludCBtYXRjaGRvdCA9IDA7Ci0gICAgQ0tfT0ZGX1QgZ2V0bGFyZ2VyID0gKENLX09GRl9UKS0x OwotICAgIENLX09GRl9UIGdldHNtYWxsZXIgPSAoQ0tfT0ZGX1QpLTE7Ci0gICAgY2hhciAqIG1z ZywgKiBzLCAqIHMyLCAqIG5hbSwgKiBwaXBlbmFtZSA9IE5VTEwsICogcG4gPSBOVUxMOwotICAg IGNoYXIgKiBzcmMgPSAiIiwgKiBsb2NhbCA9ICIiOwotICAgIGNoYXIgKiBwYXQgPSAiIjsKLQot ICAgIGludCB4X2NzbCA9IC0xLCB4X2NzciA9IC0xOyAgICAgICAgIC8qIExvY2FsIGFuZCByZW1v dGUgY2hhcnNldHMgKi8KLSAgICBpbnQgeF94bGEgPSAwOwotICAgIGNoYXIgYzsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlciBjaGFyICovCi0gICAgVUxPTkcgdDAgPSAwTCwg dDE7ICAgICAgICAgICAgICAgICAgLyogVGltZXMgZm9yIHN0YXRzICovCi0jaWZkZWYgR0ZUSU1F UgotICAgIENLRkxPQVQgc2VjOwotI2Vsc2UKLSAgICBpbnQgc2VjID0gMDsKLSNlbmRpZiAvKiBH RlRJTUVSICovCi0KLSAgICBzdHJ1Y3Qgc3RyaW5naW50IHB2W1NORF9NQVgrMV07ICAgIC8qIFRl bXBvcmFyeSBhcnJheSBmb3Igc3dpdGNoIHZhbHVlcyAqLwotCi0gICAgc3VjY2VzcyA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIGZhaWx1cmUgKi8KLSAgICBmb3JjZXR5cGUg PSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBObyAvVEVYVCBvciAvQklOQVJZIGdpdmVuIHll dCAqLwotICAgIHJlc3RhcnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHJlc3Rh cnQgeWV0ICovCi0gICAgb3V0MnNjcmVlbiA9IDA7CQkJLyogTm8gVE8tU0NSRUVOIHN3aXRjaCBn aXZlbiB5ZXQgKi8KLSAgICBtZ2V0bWV0aG9kID0gMDsJCQkvKiBObyBOTFNUIG9yIE1MU0Qgc3dp dGNoIHlldCAqLwotICAgIG1nZXRmb3JjZWQgPSAwOwotCi0gICAgZ19kaXNwbGEgPSBmZGlzcGxh OwotICAgIGlmIChmdHBfZGlzID4gLTEpCi0gICAgICBmZGlzcGxhID0gZnRwX2RpczsKLQotICAg IHhfY252ID0gZnRwX2NudjsgICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lIGNvbnZlcnNp b24gKi8KLSAgICBpZiAoeF9jbnYgPT0gQ05WX0FVVE8pIHsJCS8qIE5hbWUgY29udmVyc2lvbiBp cyBhdXRvICovCi0gICAgICAgIGlmIChhbGlrZSkgeyAgICAgICAgICAgICAgICAgICAgLyogSWYg c2VydmVyICYgY2xpZW50IGFyZSBhbGlrZSAqLwotICAgICAgICAgICAgeF9jbnYgPSAwOwkJCS8q IG5vIGNvbnZlcnNpb24gKi8KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBJZiB0aGV5IGFyZSBkaWZmZXJlbnQgKi8KLSAgICAgICAgICAgIGlmIChzZXJ2ZXJ0eXBl ID09IFNZU19VTklYIHx8IHNlcnZlcnR5cGUgPT0gU1lTX1dJTjMyKQotICAgICAgICAgICAgICB4 X2NudiA9IC0xOwkJLyogb25seSBtaW5pbWFsIGNvbnZlcnNpb25zIG5lZWRlZCAqLwotICAgICAg ICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSAqLwotICAgICAg ICAgICAgICB4X2NudiA9IDE7CQkvKiBmdWxsIGNvbnZlcnNpb24gKi8KLSAgICAgICAgfQotICAg IH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBhdXRvIC0gZG8gd2hh dCB1c2VyIHNhaWQgKi8KLSAgICAgIHhfY252ID0gZnRwX2NudjsKLQotICAgIHhfcHJtID0gZnRw X3BybTsgICAgICAgICAgICAgICAgICAgIC8qIFBlcm1pc3Npb25zICovCi0gICAgaWYgKHhfcHJt ID09IFNFVF9BVVRPKSAgICAgICAgICAgICAgLyogUGVybWlzc2lvbnMgQVVUTyAqLwotICAgICAg eF9wcm0gPSBhbGlrZTsKLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgeF9jc3IgPSBmdHBfY3NyOyAg ICAgICAgICAgICAgICAgICAgLyogSW5oZXJpdCBnbG9iYWwgc2VydmVyIGNoYXJzZXQgKi8KLSAg ICB4X2NzbCA9IGZ0cF9jc2w7ICAgICAgICAgICAgICAgICAgICAvKiBJbmhlcml0IGdsb2JhbCBs b2NhbCBjaGFyc2V0ICovCi0gICAgaWYgKHhfY3NsIDwgMCkgICAgICAgICAgICAgICAgICAgICAg LyogSWYgbm9uZSwgdXNlIGN1cnJlbnQgKi8KLSAgICAgIHhfY3NsID0gZmNoYXJzZXQ7ICAgICAg ICAgICAgICAgICAvKiBmaWxlIGNoYXJhY3Rlci1zZXQuICovCi0gICAgeF94bGEgPSBmdHBfeGxh OyAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNsYXRpb24gT24vT2ZmICovCi0jZW5kaWYgLyog Tk9DU0VUUyAqLwotCi0gICAgZ2V0ZXJyb3IgPSBmdHBfZXJyOyAgICAgICAgICAgICAgICAgLyog SW5oZXJpdCBnbG9iYWwgZXJyb3IgYWN0aW9uLiAqLwotICAgIGFzbmFtYnVmWzBdID0gTlVMOyAg ICAgICAgICAgICAgICAgIC8qIE5vIGFzLW5hbWUgeWV0LiAqLwotICAgIHBpcGVzYXZlID0gcGlw ZXNlbmQ7Ci0gICAgcGlwZXNlbmQgPSAwOwotCi0gICAgaGF2ZXR5cGUgPSAwOwotICAgIGhhdmVz aXplID0gKENLX09GRl9UKS0xOwotICAgIG1ha2VzdHIoJmhhdmVtZHRtLE5VTEwpOwotCi0gICAg aWYgKGdfZnRwX3R5cCA+IC0xKSB7ICAgICAgICAgICAgICAgLyogUmVzdG9yZSBUWVBFIGlmIHNh dmVkICovCi0gICAgICAgIGZ0cF90eXAgPSBnX2Z0cF90eXA7Ci0gICAgICAgIC8qIGdfZnRwX3R5 cCA9IC0xOyAqLwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDw9IFNORF9NQVg7IGkrKykgeyAg ICAvKiBJbml0aWFsaXplIHN3aXRjaCB2YWx1ZXMgKi8KLSAgICAgICAgcHZbaV0uc3ZhbCA9IE5V TEw7ICAgICAgICAgICAgICAvKiB0byBudWxsIHBvaW50ZXJzICovCi0gICAgICAgIHB2W2ldLml2 YWwgPSAtMTsgICAgICAgICAgICAgICAgLyogYW5kIC0xIGludCB2YWx1ZXMgKi8KLSAgICAgICAg cHZbaV0ud3ZhbCA9IChDS19PRkZfVCktMTsJLyogYW5kIC0xIHdpZGUgdmFsdWVzICovCi0gICAg fQotICAgIHpjbG9zZShaTUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIEluIGNhc2UgaXQg d2FzIGxlZnQgb3BlbiAqLwotCi0gICAgeF9mbmMgPSBmdHBfZm5jID4gLTEgPyBmdHBfZm5jIDog Zm5jYWN0OyAvKiBGaWxlbmFtZSBjb2xsaXNpb24gYWN0aW9uICovCi0KLSAgICBpZiAoZnBfbm1s KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCAvTkFNRUxJU1QgKi8KLSAgICAgICAg aWYgKGZwX25tbCAhPSBzdGRvdXQpCi0gICAgICAgICAgZmNsb3NlKGZwX25tbCk7Ci0gICAgICAg IGZwX25tbCA9IE5VTEw7Ci0gICAgfQotICAgIG1ha2VzdHIoJmZ0cF9ubWwsTlVMTCk7Ci0KLSAg ICAvKiBJbml0aWFsaXplIGxpc3Qgb2YgcmVtb3RlIGZpbGVzcGVjcyAqLwotCi0gICAgaWYgKCFt Z2V0bGlzdCkgewotICAgICAgICBtZ2V0bGlzdCA9IChjaGFyICoqKW1hbGxvYyhNR0VUTUFYICog c2l6ZW9mKGNoYXIgKikpOwotICAgICAgICBpZiAoIW1nZXRsaXN0KSB7Ci0gICAgICAgICAgICBw cmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIC0gTUdFVCBsaXN0XG4iKTsKLSAgICAg ICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IE1H RVRNQVg7IGkrKykKLSAgICAgICAgICBtZ2V0bGlzdFtpXSA9IE5VTEw7Ci0gICAgfQotICAgIG1n ZXRuID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBtZ2V0IGFyZ3Vt ZW50cyAqLwotICAgIG1nZXR4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJl bnQgYXJnICovCi0KLSAgICBpZiAod2hvID09IDApIHsgICAgICAgICAgICAgICAgICAgICAvKiBD YWxsZWQgd2l0aCB1bnByZWZpeGVkIGNvbW1hbmQgKi8KLSAgICAgICAgaWYgKGN4ID09IFhYR0VU IHx8IGN4ID09IFhYUkVHRVQgfHwgY3ggPT0gWFhSRVRSKQotICAgICAgICAgIGdldG9uZSsrOwot ICAgICAgICBzd2l0Y2ggKGN4KSB7Ci0gICAgICAgICAgY2FzZSBYWFJFR0VUOiBwdltTTkRfUkVT XS5pdmFsID0gMTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBYWFJFVFI6ICBwdltTTkRfREVMXS5p dmFsID0gMTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBYWEdFVDoKLSAgICAgICAgICBjYXNlIFhY TUdFVDogIG1nZXQrKzsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBGVFAgY29tbWFuZCAqLwotICAgICAgICBpZiAoY3ggPT0gRlRQ X0dFVCB8fCBjeCA9PSBGVFBfUkdFKQotICAgICAgICAgIGdldG9uZSsrOwotICAgICAgICBzd2l0 Y2ggKGN4KSB7Ci0gICAgICAgICAgY2FzZSBGVFBfREVMOiAgICAgICAgICAgICAgICAgLyogKGZh bGwgdGhydSBvbiBwdXJwb3NlKSAqLwotICAgICAgICAgIGNhc2UgRlRQX01ERTogbWRlbCsrOyAg ICAgICAgIC8qIChkaXR0bykgKi8KLSAgICAgICAgICBjYXNlIEZUUF9HRVQ6ICAgICAgICAgICAg ICAgICAvKiAoZGl0dG8pICovCi0gICAgICAgICAgY2FzZSBGVFBfTUdFOiBtZ2V0Kys7IGJyZWFr OwotICAgICAgICAgIGNhc2UgRlRQX1JHRTogcHZbU05EX1JFU10uaXZhbCA9IDE7IGJyZWFrOwot ICAgICAgICB9Ci0gICAgfQotICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KLSAgICAgICAgICAgX0NNS0VZLCAg ICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAiUmVtb3RlIGZpbGVu YW1lO1xuIG9yIHN3aXRjaCIsIC8qIGhscG1zZyAqLwotICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICBtZGVsID8g bmRlbHN3aSA6IG5nZXRzd2ksICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAq LwotICAgICAgICAgICA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVy aWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAg ICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgIG1kZWwgPyBkZWxz d2kgOiBnZXRzd2ksICAgICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAmZmwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAg ICAgKTsKLSAgICBjbWZkYmkoJmZsLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAybmQgRkRC IC0gcmVtb3RlIGZpbGVuYW1lICovCi0gICAgICAgICAgIF9DTUZMRCwgICAgICAgICAgICAgICAg ICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0gICAgICAgICAgIHh4 c3RyaW5nLAotICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAmY20KLSAgICAgICAgICAgKTsK LSAgICBjbWZkYmkoJmNtLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzcmQgRkRCIC0gQ29u ZmlybWF0aW9uICovCi0gICAgICAgICAgIF9DTUNGTSwgICAgICAgICAgICAgICAgICAgICAgLyog ZmNvZGUgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBobHBt c2cgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0 ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3Ry aW5nIGRhdGEgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBh ZGR0bCBudW1lcmljIGRhdGEgMSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0gICAgICAgICAgIE5VTEwsCi0gICAg ICAgICAgIE5VTEwsCi0gICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgKTsKLQotICAgIHdoaWxl ICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIDAgb3IgbW9yZSBzd2l0Y2hl cyAqLwotICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAgICAgIC8qIFBhcnNlIHNv bWV0aGluZyAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgZ2V0IGNtZmRiIiwiIix4KTsKLSAg ICAgICAgaWYgKHggPCAwKSAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciAqLwotICAgICAg ICAgIGdvdG8geGdldHg7ICAgICAgICAgICAgICAgICAgIC8qIG9yIHJlcGFyc2UgbmVlZGVkICov Ci0gICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpICAgLyogQnJlYWsgb3V0IG9m IGxvb3AgaWYgbm90IGEgc3dpdGNoICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGMgPSBj bWdicmsoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IGJyZWFrIGNoYXJhY3RlciAqLwotICAg ICAgICBnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpOyAvKiB0byBzZWUgaG93IHRoZXkg ZW5kZWQgdGhlIHN3aXRjaCAqLwotICAgICAgICBpZiAoZ2V0dmFsICYmICEoY21yZXN1bHQua2Zs YWdzICYgQ01fQVJHKSkgewotICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBu b3QgdGFrZSBhcmd1bWVudHNcbiIpOwotICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAg Z290byB4Z2V0eDsKLSAgICAgICAgfQotICAgICAgICBuID0gY21yZXN1bHQubnJlc3VsdDsgICAg ICAgICAgIC8qIE51bWVyaWMgcmVzdWx0ID0gc3dpdGNoIHZhbHVlICovCi0gICAgICAgIGRlYnVn KEYxMDEsImZ0cCBnZXQgc3dpdGNoIiwiIixuKTsKLQotICAgICAgICBpZiAoIWdldHZhbCAmJiAo Y21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRj aCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAg ICAgICBnb3RvIHhnZXR4OwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAobikgeyAgICAgICAg ICAgICAgICAgICAgLyogUHJvY2VzcyB0aGUgc3dpdGNoICovCi0gICAgICAgICAgY2FzZSBTTkRf QVNOOiAgICAgICAgICAgICAgICAgLyogL0FTLU5BTUU6ICovCi0gICAgICAgICAgICBkZWJ1ZyhG MTAxLCJmdHAgZ2V0IC9hcy1uYW1lIGdldHZhbCIsIiIsZ2V0dmFsKTsKLSAgICAgICAgICAgIGlm ICghZ2V0dmFsKSBicmVhazsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJOYW1lIHRvIHN0 b3JlIGl0IHVuZGVyIiwiIiwmcyxOVUxMKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHgg PT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/bmFtZSByZXF1aXJlZFxuIik7 Ci0gICAgICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMgPSBicnN0 cmlwKHMpOwotICAgICAgICAgICAgaWYgKCEqcykgcyA9IE5VTEw7Ci0gICAgICAgICAgICBtYWtl c3RyKCYocHZbbl0uc3ZhbCkscyk7Ci0gICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKLSAgICAg ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTTkRfQklOOiAgICAgICAgICAgICAgICAg LyogL0JJTkFSWSAqLwotICAgICAgICAgIGNhc2UgU05EX1RYVDogICAgICAgICAgICAgICAgIC8q IC9URVhUIG9yIC9BU0NJSSAqLwotICAgICAgICAgIGNhc2UgU05EX1RFTjogICAgICAgICAgICAg ICAgIC8qIC9URU5FWCAqLwotICAgICAgICAgICAgcHZbU05EX0JJTl0uaXZhbCA9IDA7Ci0gICAg ICAgICAgICBwdltTTkRfVFhUXS5pdmFsID0gMDsKLSAgICAgICAgICAgIHB2W1NORF9URU5dLml2 YWwgPSAwOwotICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7Ci0gICAgICAgICAgICBicmVhazsK LQotI2lmZGVmIFBVVFBJUEUKLSAgICAgICAgICBjYXNlIFNORF9DTUQ6ICAgICAgICAgICAgICAg ICAvKiBUaGVzZSB0YWtlIG5vIGFyZ3MgKi8KLSAgICAgICAgICAgIGlmIChub3B1c2gpIHsKLSAg ICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgc3lzdGVtIGNvbW1hbmQgYWNjZXNzIGlzIGRp c2FibGVkXG4iKTsKLSAgICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290 byB4Z2V0eDsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBQSVBFU0VORAotICAgICAgICAgICAgZWxz ZSBpZiAocmN2ZmlsdGVyKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIG5vIFBV VCAvQ09NTUFORCB3aGVuIFNFTkQgRklMVEVSIHNlbGVjdGVkXG4iKTsKLSAgICAgICAgICAgICAg ICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgICAgIH0KLSNl bmRpZiAvKiBQSVBFU0VORCAqLwotICAgICAgICAgICAgc3cuaGxwbXNnID0gIkNvbW1hbmQsIG9y IHN3aXRjaCI7IC8qIENoYW5nZSBoZWxwIG1lc3NhZ2UgKi8KLSAgICAgICAgICAgIHB2W25dLml2 YWwgPSAxOyAgICAgICAgICAgICAvKiBKdXN0IHNldCB0aGUgZmxhZyAqLwotICAgICAgICAgICAg cHZbU05EX0FSUl0uaXZhbCA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBQVVRQ SVBFICovCi0KLSAgICAgICAgICBjYXNlIFNORF9TSEg6ICAgICAgICAgICAgICAgICAvKiAvUVVJ RVQgKi8KLSAgICAgICAgICBjYXNlIFNORF9SRVM6ICAgICAgICAgICAgICAgICAvKiAvUkVDT1ZF UiAocmVnZXQpICovCi0gICAgICAgICAgY2FzZSBTTkRfTk9COiAgICAgICAgICAgICAgICAgLyog L05PQkFDS1VQRklMRVMgKi8KLSAgICAgICAgICBjYXNlIFNORF9ERUw6ICAgICAgICAgICAgICAg ICAvKiAvREVMRVRFICovCi0gICAgICAgICAgY2FzZSBTTkRfVVBEOiAgICAgICAgICAgICAgICAg LyogL1VQREFURSAqLwotICAgICAgICAgIGNhc2UgU05EX1VTTjogICAgICAgICAgICAgICAgIC8q IC9VTklRVUUgKi8KLSAgICAgICAgICBjYXNlIFNORF9OT0Q6ICAgICAgICAgICAgICAgICAvKiAv Tk9ET1RGSUxFUyAqLwotICAgICAgICAgIGNhc2UgU05EX1JFQzogICAgICAgICAgICAgICAgIC8q IC9SRUNPVkVSICovCi0gICAgICAgICAgY2FzZSBTTkRfTUFJOiAgICAgICAgICAgICAgICAgLyog L1RPLVNDUkVFTiAqLwotICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7ICAgICAgICAgICAgIC8q IEp1c3Qgc2V0IHRoZSBmbGFnICovCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNh c2UgU05EX0RJRjogICAgICAgICAgICAgICAgIC8qIC9EQVRFUy1ESUZGRVIgKi8KLQkgICAgcHZb U05EX0NPTF0uaXZhbCA9IFhZRlhfTTsJLyogTm93IGl0J3MgYSBjb2xsaXNpb24gb3B0aW9uICov Ci0JICAgIHB2W25dLml2YWwgPSAxOwotCSAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU05E X0NPTDogICAgICAgICAgICAgICAgIC8qIC9DT0xMSVNJT046ICovCi0gICAgICAgICAgICBpZiAo KHggPSBjbWtleShmdHBjb2x4dGFiLG5mdHBjb2x4LCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgICAgICBnb3RvIHhnZXR4OwotCSAgICBpZiAoeCA9PSBYWUZYX00pCi0JICAgICAgcHZb U05EX0RJRl0uaXZhbCA9IDE7CS8qIChwaGFzZSB0aGlzIG91dCkgKi8KLQkgICAgcHZbbl0uaXZh bCA9IHg7CQkvKiB0aGlzIHNob3VsZCBiZSBzdWZmaWNpZW50ICovCi0gICAgICAgICAgICBicmVh azsKLQotICAgICAgICAgIGNhc2UgU05EX0VSUjogICAgICAgICAgICAgICAgIC8qIC9FUlJPUi1B Q1RJT04gKi8KLSAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHFvcnAsMiwiIiwiIix4eHN0cmlu ZykpIDwgMCkKLSAgICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgICAgIHB2W25dLml2 YWwgPSB4OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNORF9FWEM6ICAg ICAgICAgICAgICAgICAvKiBFeGNlcHRpb24gbGlzdCAqLwotICAgICAgICAgICAgaWYgKCFnZXR2 YWwpIGJyZWFrOwotICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlBhdHRlcm4iLCIiLCZzLHh4 c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCI/UGF0dGVybiByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAg ICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ290byB4 Z2V0eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzKSBpZiAoISpzKSBzID0gTlVM TDsKLSAgICAgICAgICAgIG1ha2VzdHIoJihwdltuXS5zdmFsKSxzKTsKLSAgICAgICAgICAgIGlm IChwdltuXS5zdmFsKQotICAgICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKLSAgICAgICAgICAg IGJyZWFrOwotCi0jaWZkZWYgUElQRVNFTkQKLSAgICAgICAgICBjYXNlIFNORF9GTFQ6Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgZ2V0IC9maWx0ZXIgZ2V0dmFsIiwiIixnZXR2YWwpOwot ICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgaWYgKCh4ID0gY21m bGQoIkZpbHRlciBwcm9ncmFtIHRvIHNlbmQgdGhyb3VnaCIsIiIsJnMsTlVMTCkpIDwgMCkgewot ICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKQotICAgICAgICAgICAgICAgICAgcyA9ICIiOwot ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKLSAgICAgICAgICAgIGlmIChw dltTTkRfTUFJXS5pdmFsIDwgMSkgewotICAgICAgICAgICAgICAgIHkgPSBzdHJsZW4ocyk7Ci0g ICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIHRoZXkgaW5jbHVkZWQgIlx2KC4uLikiICovCi0g ICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IHk7IHgrKykgewotICAgICAgICAgICAgICAg ICAgICBpZiAoc1t4XSAhPSAnXFwnKSBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYg KHNbeCsxXSA9PSAndicpIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICBpZiAoeCA9PSB5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigKLSAgICAgICAgICAg ICAgICAiP0ZpbHRlciBtdXN0IGNvbnRhaW4gYSByZXBsYWNlbWVudCB2YXJpYWJsZSBmb3IgZmls ZW5hbWUuXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAg ICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCpzKSB7Ci0gICAgICAgICAg ICAgICAgcHZbbl0uaXZhbCA9IDE7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigmKHB2W25dLnN2 YWwpLHMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdltuXS5pdmFs ID0gMDsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCksTlVMTCk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCi0g ICAgICAgICAgY2FzZSBTTkRfTkFNOgotICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwot ICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkoZm50YWIsbmZudGFiLCIiLCJhdXRvbWF0aWMiLHh4 c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICAgICAgZGVi dWcoRjEwMSwiZnRwIGdldCAvZmlsZW5hbWVzIiwiIix4KTsKLSAgICAgICAgICAgIHB2W25dLml2 YWwgPSB4OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNORF9TTUE6ICAg ICAgICAgICAgICAgICAvKiBTbWFsbGVyIC8gbGFyZ2VyIHRoYW4gKi8KLSAgICAgICAgICBjYXNl IFNORF9MQVI6IHsKLQkgICAgICBDS19PRkZfVCB5OwotCSAgICAgIGlmICghZ2V0dmFsKSBicmVh azsKLQkgICAgICBpZiAoKHggPSBjbW51bXcoIlNpemUgaW4gYnl0ZXMiLCIwIiwxMCwmeSx4eHN0 cmluZykpIDwgMCkKLQkJZ290byB4Z2V0eDsKLQkgICAgICBwdltuXS53dmFsID0geTsKLQkgICAg ICBicmVhazsKLQkgIH0KLSAgICAgICAgICBjYXNlIFNORF9GSUw6ICAgICAgICAgICAgICAgICAv KiBOYW1lIG9mIGZpbGUgY29udGFpbmluZyBmaWxuYW1lcyAqLwotICAgICAgICAgICAgaWYgKCFn ZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgaWYgKCh4ID0gY21pZmkoIk5hbWUgb2YgZmlsZSBj b250YWluaW5nIGxpc3Qgb2YgZmlsZW5hbWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiIiwmcywmeSx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgIGlmICh4ID09 IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0ZpbGVuYW1lIHJlcXVpcmVkXG4i KTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICAgICAgfSBlbHNlIGlmICh5ICYmIGlzd2ls ZChzKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZCBC QkJcbiIpOwotICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICBnb3RvIHhn ZXR4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHMpIGlmICghKnMpIHMgPSBOVUxM OwotICAgICAgICAgICAgbWFrZXN0cigmKHB2W25dLnN2YWwpLHMpOwotICAgICAgICAgICAgaWYg KHB2W25dLnN2YWwpCi0gICAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOwotICAgICAgICAgICAg YnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNORF9NT1Y6ICAgICAgICAgICAgICAgICAvKiBNT1ZF IGFmdGVyICovCi0gICAgICAgICAgY2FzZSBTTkRfUkVOOiAgICAgICAgICAgICAgICAgLyogUkVO QU1FIGFmdGVyICovCi0gICAgICAgICAgY2FzZSBTTkRfU1JOOiB7ICAgICAgICAgICAgICAgLyog U0VSVkVSLVJFTkFNRSAqLwotICAgICAgICAgICAgICBjaGFyICogbSA9ICIiOwotICAgICAgICAg ICAgICBzd2l0Y2ggKG4pIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNORF9NT1Y6Ci0gICAgICAg ICAgICAgICAgICBtID0KLSAgICAgICAgICAgICAgICAgICAiRGV2aWNlIGFuZC9vciBkaXJlY3Rv cnkgZm9yIGluY29taW5nIGZpbGUgYWZ0ZXIgcmVjZXB0aW9uIjsKLSAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU05EX1JFTjoKLSAgICAgICAgICAgICAgICAg IG0gPSAiTmV3IG5hbWUgZm9yIGluY29taW5nIGZpbGUgYWZ0ZXIgcmVjZXB0aW9uIjsKLSAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU05EX1NSTjoKLSAgICAg ICAgICAgICAgICAgIG0gPSAiTmV3IG5hbWUgZm9yIHNvdXJjZSBmaWxlIG9uIHNlcnZlciBhZnRl ciByZWNlcHRpb24iOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgICBpZiAoKHgg PSBjbWZsZChtLCAiIiwgJnMsIG4gPT0gU05EX01PViA/IHh4c3RyaW5nIDogTlVMTCkpIDwgMCkg ewotICAgICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIiVzXG4iLCBuID09IFNORF9NT1YgPwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiP0Rlc3RpbmF0aW9uIHJlcXVpcmVkIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICI/TmV3IG5hbWUgcmVxdWlyZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICBtYWtlc3RyKCYocHZbbl0uc3ZhbCksKnMgPyBicnN0cmlwKHMpIDogTlVMTCk7Ci0gICAgICAg ICAgICAgIHB2W25dLml2YWwgPSAocHZbbl0uc3ZhbCkgPyAxIDogMDsKLSAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgfQotI2lmbmRlZiBOT0NTRVRTCi0gICAgICAgICAgY2FzZSBTTkRf Q1NMOiAgICAgICAgICAgICAgICAgLyogTG9jYWwgY2hhcmFjdGVyIHNldCAqLwotICAgICAgICAg IGNhc2UgU05EX0NTUjogICAgICAgICAgICAgICAgIC8qIFJlbW90ZSAoc2VydmVyKSBjaGFyc2V0 ICovCi0gICAgICAgICAgICBpZiAoKHggPSBjbWtleShmY3N0YWIsbmZpbGMsIiIsIiIseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybigoeCA9PSAtMykgPyAtMiA6IHgpOwotICAg ICAgICAgICAgaWYgKG4gPT0gU05EX0NTTCkKLSAgICAgICAgICAgICAgeF9jc2wgPSB4OwotICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB4X2NzciA9IHg7Ci0gICAgICAgICAgICB4X3hs YSA9IDE7ICAgICAgICAgICAgICAgICAgLyogT3ZlcnJpZGVzIGdsb2JhbCBPRkYgc2V0dGluZyAq LwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNORF9YUEE6ICAgICAgICAg ICAgICAgICAvKiBUcmFuc3BhcmVudCAqLwotICAgICAgICAgICAgeF94bGEgPSAgMDsKLSAgICAg ICAgICAgIHhfY3NyID0gLTE7Ci0gICAgICAgICAgICB4X2NzbCA9IC0xOwotICAgICAgICAgICAg YnJlYWs7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0gICAgICAgICAgY2FzZSBTTkRfTk1MOgot ICAgICAgICAgICAgaWYgKCh4ID0gY21vZmkoIkxvY2FsIGZpbGVuYW1lIiwiLSIsJnMseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgICAgICBtYWtlc3Ry KCZmdHBfbm1sLHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLQkgIGNhc2UgU05EX1BBVDoJCQkv KiAvUEFUVEVSTjogKi8KLQkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotCSAgICBpZiAoKHggPSBj bWZsZCgiUGF0dGVybiIsIioiLCAmcywgeHhzdHJpbmcpKSA8IDApCi0JICAgICAgZ290byB4Z2V0 eDsKLQkgICAgbWFrZXN0cigmKHB2W25dLnN2YWwpLCpzID8gYnJzdHJpcChzKSA6IE5VTEwpOwot CSAgICBwdltuXS5pdmFsID0gKHB2W25dLnN2YWwpID8gMSA6IDA7Ci0JICAgIGJyZWFrOwotCi0J ICBjYXNlIFNORF9OTFM6CQkJLyogL05MU1QgKi8KLSAgICAgICAgICAgIHB2W25dLml2YWwgPSAx OwkJLyogVXNlIE5MU1QgKi8KLQkgICAgcHZbU05EX01MU10uaXZhbCA9IDA7CS8qIERvbid0IHVz ZSBNTFNEICovCi0JICAgIGJyZWFrOwotCi0JICBjYXNlIFNORF9NTFM6CQkJLyogL01MU0QgKi8K LSAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOwkJLyogVXNlIE1MU0QgKi8KLQkgICAgcHZbU05E X05MU10uaXZhbCA9IDA7CS8qIERvbid0IHVzZSBOTFNUICovCi0JICAgIGJyZWFrOwotCi0gICAg ICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgLyogL0FGVEVSLCAvUEVSTUlTU0lP TlMsIGV0Yy4uLiAqLwotICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIFwiJXNcIiB3b3JrcyBv bmx5IHdpdGggW01dUFVUXG4iLGF0bWJ1Zik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAg ICAgICBnb3RvIHhnZXR4OwotICAgICAgICB9Ci0gICAgfQotICAgIGxpbmVbMF0gPSBOVUw7Ci0g ICAgY21hcmcgPSBsaW5lOwotICAgIGNtYXJnMiA9IGFzbmFtYnVmOwotICAgIHMgPSBsaW5lOwot LyoKLSAgRm9yIEdFVCwgd2Ugd2FudCB0byBwYXJzZSBhbiBvcHRpb25hbCBhcy1uYW1lLCBsaWtl IHdpdGggUFVULgotICBGb3IgTUdFVCwgd2UgbXVzdCBwYXJzZSBhIGxpc3Qgb2YgbmFtZXMsIGFu ZCB0aGVuIHNlbmQgTkxTVCBvciBNTFNECi0gIGNvbW1hbmRzIGZvciBlYWNoIG5hbWUgc2VwYXJh dGVseS4KLSovCi0gICAgc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgeyAgICAgICAgICAgLyogSG93 IGRpZCB3ZSBnZXQgb3V0IG9mIHN3aXRjaCBsb29wICovCi0gICAgICBjYXNlIF9DTUZMRDogICAg ICAgICAgICAgICAgICAgICAgLyogRmllbGQgKi8KLSAgICAgICAgaWYgKCFnZXRvbmUpIHsKLSAg ICAgICAgICAgIHMgPSBicnN0cmlwKGNtcmVzdWx0LnNyZXN1bHQpOwotICAgICAgICAgICAgbWFr ZXN0cigmKG1nZXRsaXN0W21nZXRuKytdKSxzKTsKLSAgICAgICAgICAgIHdoaWxlICgoeCA9IGNt ZmxkKCJSZW1vdGUgZmlsZW5hbWUiLCIiLCZzLHh4c3RyaW5nKSkgIT0gLTMpIHsKLSAgICAgICAg ICAgICAgICBpZiAoeCA8IDApCi0gICAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAg ICAgICAgICAgIG1ha2VzdHIoJihtZ2V0bGlzdFttZ2V0bisrXSksYnJzdHJpcChzKSk7Ci0gICAg ICAgICAgICAgICAgaWYgKG1nZXRuID49IE1HRVRNQVgpIHsKLSAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCI/VG9vIG1hbnkgaXRlbXMgaW4gTUdFVCBsaXN0XG4iKTsKLSAgICAgICAgICAgICAg ICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgIGdvdG8geGdldHg7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzID0gYnJzdHJpcChjbXJlc3VsdC5zcmVz dWx0KTsKLSAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAg ICAgIGlmICgoeCA9IGNtZmxkKCJOYW1lIHRvIHN0b3JlIGl0IHVuZGVyIiwiIiwmcyx4eHN0cmlu ZykpIDwgMCkKLSAgICAgICAgICAgICAgaWYgKHggIT0gLTMpCi0gICAgICAgICAgICAgICAgZ290 byB4Z2V0eDsKLSAgICAgICAgICAgIHMgPSBicnN0cmlwKHMpOwotICAgICAgICAgICAgY2tzdHJu Y3B5KGFzbmFtYnVmLHMsQ0tNQVhQQVRIKzEpOwotICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKQotICAgICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICB9Ci0gICAgICAgIGJy ZWFrOwotICAgICAgY2FzZSBfQ01DRk06ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbmZpcm1h dGlvbiAqLwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByaW50Zigi P1VuZXhwZWN0ZWQgZnVuY3Rpb24gY29kZTogJWRcbiIsY21yZXN1bHQuZmNvZGUpOwotICAgICAg ICB4ID0gLTk7Ci0gICAgICAgIGdvdG8geGdldHg7Ci0gICAgfQotICAgIGlmIChwdltTTkRfUkVD XS5pdmFsID4gMCkgICAgICAgICAgIC8qIC9SRUNVUlNJVkUgKi8KLSAgICAgIHJlY3Vyc2l2ZSA9 IDI7Ci0KLSAgICBpZiAocHZbU05EX0JJTl0uaXZhbCA+IDApIHsgICAgICAgICAvKiAvQklOQVJZ IHJlYWxseSBtZWFucyBiaW5hcnkuLi4gKi8KLSAgICAgICAgZm9yY2V0eXBlID0gMTsgICAgICAg ICAgICAgICAgICAvKiBTbyBza2lwIHRoZSBuYW1lLXBhdHRlcm4gbWF0Y2ggKi8KLSAgICAgICAg ZnRwX3R5cCA9IFhZRlRfQjsgICAgICAgICAgICAgICAvKiBTZXQgYmluYXJ5ICovCi0gICAgfSBl bHNlIGlmIChwdltTTkRfVFhUXS5pdmFsID4gMCkgeyAgLyogU2ltaWxhcmx5IGZvciAvVEVYVC4u LiAqLwotICAgICAgICBmb3JjZXR5cGUgPSAxOwotICAgICAgICBmdHBfdHlwID0gWFlGVF9UOwot ICAgIH0gZWxzZSBpZiAocHZbU05EX1RFTl0uaXZhbCA+IDApIHsgIC8qIGFuZCAvVEVORVgqLwot ICAgICAgICBmb3JjZXR5cGUgPSAxOwotICAgICAgICBmdHBfdHlwID0gRlRUX1RFTjsKLSAgICB9 IGVsc2UgaWYgKGZ0cF9jbWRsaW4gJiYgZnRwX3hmZXJtb2RlID09IFhNT0RFX00pIHsKLSAgICAg ICAgZm9yY2V0eXBlID0gMTsKLSAgICAgICAgZnRwX3R5cCA9IGJpbmFyeTsKLSAgICAgICAgZ19m dHBfdHlwID0gYmluYXJ5OwotICAgIH0KLSAgICBpZiAocHZbU05EX0FTTl0uaXZhbCA+IDAgJiYg cHZbU05EX0FTTl0uc3ZhbCAmJiAhYXNuYW1idWZbMF0pIHsKLSAgICAgICAgY2hhciAqIHA7Ci0g ICAgICAgIHAgPSBicnN0cmlwKHB2W1NORF9BU05dLnN2YWwpOyAgLyogQXMtbmFtZSAqLwotICAg ICAgICBja3N0cm5jcHkoYXNuYW1idWYscCxDS01BWFBBVEgrMSk7Ci0gICAgfQotICAgIGRlYnVn KEYxMTAsImZ0cCBnZXQgYXNuYW1idWYiLGFzbmFtYnVmLDApOwotCi0jaWZkZWYgUElQRVNFTkQK LSAgICBpZiAocHZbU05EX0NNRF0uaXZhbCA+IDApIHsgICAgICAgICAvKiAvQ09NTUFORCAtIHN0 cmlwIGFueSBicmFjZXMgKi8KLSAgICAgICAgY2hhciAqIHA7Ci0gICAgICAgIHAgPSBhc25hbWJ1 ZjsKLSAgICAgICAgZGVidWcoRjExMCwiR0VUIC9DT01NQU5EIGJlZm9yZSBzdHJpcHBpbmciLHAs MCk7Ci0gICAgICAgIHAgPSBicnN0cmlwKHApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJHRVQgL0NP TU1BTkQgYWZ0ZXIgc3RyaXBwaW5nIixwLDApOwotICAgICAgICBpZiAoISpwKSB7Ci0gICAgICAg ICAgICBwcmludGYoIj9Tb3JyeSwgYSBjb21tYW5kIHRvIHdyaXRlIHRvIGlzIHJlcXVpcmVkXG4i KTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAg IH0KLSAgICAgICAgcGlwZW5hbWUgPSBwOwotICAgICAgICBwaXBlc2VuZCA9IDE7Ci0gICAgfQot I2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLS8qIFNldCB1cCAvTU9WRSBhbmQgL1JFTkFNRSAqLwot Ci0jaWZkZWYgQ09NTUVOVAotICAgIC8qIENvbmZsaWN0IGV4aXN0cyBvbmx5IGZvciBQVVQgLSBy ZW1vdmVkIDEzIE1hciAyMDA2IC0gZmRjICovCi0gICAgaWYgKHB2W1NORF9ERUxdLml2YWwgPiAw ICYmCi0gICAgICAgIChwdltTTkRfTU9WXS5pdmFsID4gMCB8fCBwdltTTkRfUkVOXS5pdmFsID4g MCkpIHsKLSAgICAgICAgcHJpbnRmKCI/U29ycnksIC9ERUxFVEUgY29uZmxpY3RzIHdpdGggL01P VkUgb3IgL1JFTkFNRVxuIik7Ci0gICAgICAgIHggPSAtOTsKLSAgICAgICAgZ290byB4Z2V0eDsK LSAgICB9Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotI2lmZGVmIENLX1RNUERJUgotICAgIGlmIChw dltTTkRfTU9WXS5pdmFsID4gMCAmJiBwdltTTkRfTU9WXS5zdmFsKSB7Ci0gICAgICAgIGludCBs ZW47Ci0gICAgICAgIGNoYXIgKiBwID0gcHZbU05EX01PVl0uc3ZhbDsKLSAgICAgICAgbGVuID0g c3RybGVuKHApOwotICAgICAgICBpZiAoIWlzZGlyKHApKSB7ICAgICAgICAgICAgICAgIC8qIENo ZWNrIGRpcmVjdG9yeSAqLwotI2lmZGVmIENLX01LRElSCi0gICAgICAgICAgICBjaGFyICogcyA9 IE5VTEw7Ci0gICAgICAgICAgICBzID0gKGNoYXIgKiltYWxsb2MobGVuICsgNCk7Ci0gICAgICAg ICAgICBpZiAocykgewotICAgICAgICAgICAgICAgIHN0cmNweShzLHApOyAgICAgICAgICAgIC8q IHNhZmUgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgICAgICAgICAgICAgIGlmIChzW2xlbi0x XSAhPSAnOicpIHsgc1tsZW4rK10gPSAnOic7IHNbbGVuXSA9IE5VTDsgfQotI2Vsc2UKLSAgICAg ICAgICAgICAgICBpZiAoc1tsZW4tMV0gIT0gJy8nKSB7IHNbbGVuKytdID0gJy8nOyBzW2xlbl0g PSBOVUw7IH0KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotICAgICAgICAgICAgICAgIHNbbGVu KytdID0gJ1gnOwotICAgICAgICAgICAgICAgIHNbbGVuXSA9IE5VTDsKLSNpZmRlZiBOT01LRElS Ci0gICAgICAgICAgICAgICAgeCA9IC0xOwotI2Vsc2UKLSAgICAgICAgICAgICAgICB4ID0gem1r ZGlyKHMpOwotI2VuZGlmIC8qIE5PTUtESVIgKi8KLSAgICAgICAgICAgICAgICBmcmVlKHMpOwot ICAgICAgICAgICAgICAgIGlmICh4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYo Ij9DYW4ndCBjcmVhdGUgXCIlc1wiXG4iLHApOwotICAgICAgICAgICAgICAgICAgICB4ID0gLTk7 Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgIHByaW50ZigiP0RpcmVjdG9yeSBcIiVzXCIg bm90IGZvdW5kXG4iLHApOwotICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgZ290byB4 Z2V0eDsKLSNlbmRpZiAvKiBDS19NS0RJUiAqLwotICAgICAgICB9Ci0gICAgICAgIG1ha2VzdHIo JnJjdl9tb3ZlLHApOwotICAgICAgICBtb3ZpbmcgPSAxOwotICAgIH0KLSNlbmRpZiAvKiBDS19U TVBESVIgKi8KLQotICAgIGlmIChwdltTTkRfUkVOXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIC9S RU5BTUUgKi8KLSAgICAgICAgY2hhciAqIHAgPSBwdltTTkRfUkVOXS5zdmFsOwotICAgICAgICBp ZiAoIXApIHAgPSAiIjsKLSAgICAgICAgaWYgKCEqcCkgewotICAgICAgICAgICAgcHJpbnRmKCI/ TmV3IG5hbWUgcmVxdWlyZWQgZm9yIC9SRU5BTUVcbiIpOwotICAgICAgICAgICAgeCA9IC05Owot ICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgfQotICAgICAgICBwID0gYnJzdHJpcChw KTsKLSNpZm5kZWYgTk9TUEwKLSAgICAvKiBJZiBuYW1lIGdpdmVuIGlzIHdpbGQsIHJlbmFtZSBz dHJpbmcgbXVzdCBjb250YWluIHZhcmlhYmxlcyAqLwotICAgICAgICBpZiAobWdldCAmJiAhZ2V0 b25lKSB7Ci0gICAgICAgICAgICBjaGFyICogcyA9IHRtcGJ1ZjsKLSAgICAgICAgICAgIHggPSBU TVBCVUZTSVo7Ci0gICAgICAgICAgICB6enN0cmluZyhwLCZzLCZ4KTsKLSAgICAgICAgICAgIGlm ICghc3RyY21wKHRtcGJ1ZixwKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigKLSAgICAiPy9S RU5BTUUgZm9yIGZpbGUgZ3JvdXAgbXVzdCBjb250YWluIHZhcmlhYmxlcyBzdWNoIGFzIFxcdihm aWxlbmFtZSlcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICB4 ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgIHJlbmFtaW5nID0gMTsKLSAgICAgICAg bWFrZXN0cigmcmN2X3JlbmFtZSxwKTsKLSAgICAgICAgZGVidWcoRjExMCwiRlRQIHJjdl9yZW5h bWUiLHJjdl9yZW5hbWUsMCk7Ci0gICAgfQotICAgIGlmICghY21hcmdbMF0gJiYgbWdldG4gPT0g MCAmJiBnZXRvbmUgJiYgcHZbU05EX0ZJTF0uaXZhbCA8IDEpIHsKLSAgICAgICAgcHJpbnRmKCI/ RmlsZW5hbWUgcmVxdWlyZWQgYnV0IG5vdCBnaXZlblxuIik7Ci0gICAgICAgIHggPSAtOTsKLSAg ICAgICAgZ290byB4Z2V0eDsKLSAgICB9IGVsc2UgaWYgKChjbWFyZ1swXSB8fCBtZ2V0biA+IDAp ICYmIHB2W1NORF9GSUxdLml2YWwgPiAwKSB7Ci0gICAgICAgIHByaW50ZigiP1lvdSBjYW4ndCBn aXZlIGJvdGggL0xJU1RGSUxFIGFuZCBhIHJlbW90ZSBmaWxlbmFtZVxuIik7Ci0gICAgICAgIHgg PSAtOTsKLSAgICAgICAgZ290byB4Z2V0eDsKLSAgICB9Ci0gICAgQ0hFQ0tDT05OKCk7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgY29ubmVjdGlvbiAqLwotCi0gICAgaWYgKHB2W1NO RF9DT0xdLml2YWwgPiAtMSkKLSAgICAgIHhfZm5jID0gcHZbU05EX0NPTF0uaXZhbDsKLQotI2lm bmRlZiBOT1NQTAotICAgIC8qIElmIGFzLW5hbWUgZ2l2ZW4gZm9yIE1HRVQsIGFzLW5hbWUgbXVz dCBjb250YWluIHZhcmlhYmxlcyAqLwotICAgIGlmIChtZ2V0ICYmICFnZXRvbmUgJiYgYXNuYW1i dWZbMF0gJiYgeF9mbmMgIT0gWFlGWF9BKSB7Ci0gICAgICAgIGNoYXIgKiBzID0gdG1wYnVmOwot ICAgICAgICB4ID0gVE1QQlVGU0laOwotICAgICAgICB6enN0cmluZyhhc25hbWJ1ZiwmcywmeCk7 Ci0gICAgICAgIGlmICghc3RyY21wKHRtcGJ1Zixhc25hbWJ1ZikpIHsKLSAgICAgICAgICAgIHBy aW50ZigKLSAgICAiP0FzLW5hbWUgZm9yIE1HRVQgbXVzdCBjb250YWluIHZhcmlhYmxlcyBzdWNo IGFzIFxcdihmaWxlbmFtZSlcbiIKLSAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg eCA9IC05OwotICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRp ZiAvKiBOT1NQTCAqLwotCi0vKiBkb2dldDogKi8KLQotICAgIGlmIChwdltTTkRfU0hIXS5pdmFs ID4gMCB8fCBmdHBfbm1sKSB7IC8qIEdFVCAvUVVJRVQuLi4gKi8KLSAgICAgICAgZmRpc3BsYSA9 IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGlzcGxhID0gMTsKLSAgICAgICAgaWYgKG1kZWwg fHwgZnRwX2RlYikKLQkgIGZkaXNwbGEgPSBYWUZEX0I7Ci0gICAgfQotICAgIGRlbGV0aW5nID0g MDsKLSAgICBpZiAocHZbU05EX0RFTF0uaXZhbCA+IDApICAgICAgICAgICAvKiAvREVMRVRFIHdh cyBzcGVjaWZpZWQgKi8KLSAgICAgIGRlbGV0aW5nID0gMTsKLSAgICBpZiAocHZbU05EX0VYQ10u aXZhbCA+IDApCi0gICAgICBtYWtlbGlzdChwdltTTkRfRVhDXS5zdmFsLHJjdmV4Y2VwdCxOU05E RVhDRVBUKTsKLSAgICBpZiAocHZbU05EX1NNQV0ud3ZhbCA+IC0xKQotICAgICAgZ2V0c21hbGxl ciA9IHB2W1NORF9TTUFdLnd2YWw7Ci0gICAgaWYgKHB2W1NORF9MQVJdLnd2YWwgPiAtMSkKLSAg ICAgIGdldGxhcmdlciA9IHB2W1NORF9MQVJdLnd2YWw7Ci0gICAgaWYgKHB2W1NORF9OQU1dLml2 YWwgPiAtMSkKLSAgICAgIHhfY252ID0gcHZbU05EX05BTV0uaXZhbDsKLSAgICBpZiAocHZbU05E X0VSUl0uaXZhbCA+IC0xKQotICAgICAgZ2V0ZXJyb3IgPSBwdltTTkRfRVJSXS5pdmFsOwotICAg IGlmIChwdltTTkRfTUFJXS5pdmFsID4gLTEpCi0gICAgICB0b3NjcmVlbiA9IDE7Ci0KLSAgICBp ZiAocHZbU05EX05MU10uaXZhbCA+IDApIHsJCS8qIEZvcmNlIE5MU1Qgb3IgTUxTRD8gKi8KLQlt Z2V0bWV0aG9kID0gU05EX05MUzsKLQltZ2V0Zm9yY2VkID0gMTsKLSAgICB9IGVsc2UgaWYgKHB2 W1NORF9NTFNdLml2YWwgPiAwKSB7Ci0JbWdldG1ldGhvZCA9IFNORF9NTFM7Ci0JbWdldGZvcmNl ZCA9IDE7Ci0gICAgfQotCi0jaWZkZWYgRlRQX1JFU1RBUlQKLSAgICBpZiAocHZbU05EX1JFU10u aXZhbCA+IDApIHsKLSAgICAgICAgaWYgKCFmdHBfdHlwKSB7Ci0gICAgICAgICAgICBwcmludGYo Ij9Tb3JyeSwgR0VUIC9SRUNPVkVSIHJlcXVpcmVzIGJpbmFyeSBtb2RlXG4iKTsKLSAgICAgICAg ICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdvdG8geGdldHg7Ci0jaWZkZWYgQ09NTUVOVAotICAg ICAgICAvKiBOb3QgdHJ1ZSAtIHRoZSBmYWN0IHRoYXQgdGhlIGluaXRpYWwgUkVTVCBmYWlscyBk b2VzIG5vdCBtZWFuICovCi0gICAgICAgIC8qIGl0IHdpbGwgZmFpbCBoZXJlLiAgKi8KLSAgICAg ICAgfSBlbHNlIGlmICghb2tyZXN0YXJ0KSB7Ci0gICAgICAgICAgICBwcmludGYoIldBUk5JTkc6 IFNlcnZlciBtaWdodCBub3Qgc3VwcG9ydCByZXN0YXJ0Li4uXG4iKTsKLSNlbmRpZiAvKiBDT01N RU5UICovCi0gICAgICAgIH0KLSAgICAgICAgcmVzdGFydCA9IDE7Ci0gICAgfQotI2VuZGlmIC8q IEZUUF9SRVNUQVJUICovCi0KLSNpZmRlZiBQSVBFU0VORAotICAgIGlmIChwdltTTkRfRkxUXS5p dmFsID4gMCkgeyAgICAgICAgIC8qIEhhdmUgU0VORCBGSUxURVI/ICovCi0gICAgICAgIGlmIChw aXBlc2VuZCkgewotICAgICAgICAgICAgcHJpbnRmKCI/U3dpdGNoIGNvbmZsaWN0OiAvRklMVEVS IGFuZCAvQ09NTUFORFxuIik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICBnb3Rv IHhnZXR4OwotICAgICAgICB9Ci0gICAgICAgIG1ha2VzdHIoJnJjdmZpbHRlcixwdltTTkRfRkxU XS5zdmFsKTsKLSAgICAgICAgZGVidWcoRjExMCwiZnRwIGdldCAvRklMVEVSIiwgcmN2ZmlsdGVy LCAwKTsKLSAgICB9Ci0gICAgaWYgKHJjdmZpbHRlciB8fCBwaXBlc2VuZCkgeyAgICAgICAgLyog L1JFU1RBUlQgKi8KLSNpZmRlZiBGVFBfUkVTVEFSVAotICAgICAgICBpZiAocmVzdGFydCkgeyAg ICAgICAgICAgICAgICAgIC8qIHdpdGggcGlwZXMgb3IgZmlsdGVycyAqLwotICAgICAgICAgICAg cHJpbnRmKCI/U3dpdGNoIGNvbmZsaWN0OiAvRklMVEVSIG9yIC9DT01NQU5EIGFuZCAvUkVDT1ZF UlxuIik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICBnb3RvIHhnZXR4OwotICAg ICAgICB9Ci0jZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8KLSAgICAgICAgaWYgKHB2W1NORF9VUERd Lml2YWwgPiAwIHx8IHhfZm5jID09IFhZRlhfTSB8fCB4X2ZuYyA9PSBYWUZYX1UpIHsKLSAgICAg ICAgICAgIHByaW50ZigKLQkJIj9Td2l0Y2ggY29uZmxpY3Q6IC9GSUxURVIgb3IgL0NPTU1BTkQg YW5kIERhdGUgQ2hlY2tpbmdcbiIpOwotICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAg Z290byB4Z2V0eDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCi0g ICAgdGZjID0gKENLX09GRl9UKTA7CQkJLyogSW5pdGlhbGl6ZSBzdGF0cyBhbmQgY291bnRlcnMg Ki8KLSAgICBmaWxjbnQgPSAwOwotICAgIHBrdG51bSA9IDA7Ci0gICAgcnBhY2tldHMgPSAwTDsK LQotICAgIGlmIChwdltTTkRfRklMXS5pdmFsID4gMCkgewotICAgICAgICBpZiAoem9wZW5pKFpN RklMRSxwdltTTkRfRklMXS5zdmFsKSA8IDEpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0 cCBnZXQgY2FuJ3Qgb3BlbiBsaXN0ZmlsZSIscHZbU05EX0ZJTF0uc3ZhbCxlcnJubyk7Ci0gICAg ICAgICAgICBwcmludGYoIj9GYWlsdXJlIHRvIG9wZW4gbGlzdGZpbGUgLSBcIiVzXCJcbiIscHZb U05EX0ZJTF0uc3ZhbCk7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICBnb3RvIHhn ZXR4OwotICAgICAgICB9Ci0gICAgICAgIGlmICh6c2lubChaTUZJTEUsdG1wYnVmLENLTUFYUEFU SCkgPCAwKSB7IC8qIFJlYWQgYSBsaW5lICovCi0gICAgICAgICAgICB6Y2xvc2UoWk1GSUxFKTsg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZhaWxlZCAqLwotICAgICAgICAgICAgZGVidWcoRjEx MCwiZnRwIGdldCBsaXN0ZmlsZSBFT0YiLHB2W1NORF9GSUxdLnN2YWwsMCk7Ci0gICAgICAgICAg ICBwcmludGYoIj9FbXB0eSBsaXN0ZmlsZSAtIFwiJXNcIlxuIixwdltTTkRfRklMXS5zdmFsKTsK LSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgIH0K LSAgICAgICAgbGlzdGZpbGUgPSAxOwotICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgZ2V0IGxpc3Rm aWxlIGZpcnN0Iix0bXBidWYsMCk7Ci0gICAgICAgIG1ha2VzdHIoJihtZ2V0bGlzdFswXSksdG1w YnVmKTsKLSAgICB9Ci0gICAgdDAgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgLyog UmVjb3JkIHN0YXJ0aW5nIHRpbWUgKi8KLQotICAgIHVwZGF0aW5nID0gMDsJCQkvKiBDaGVja2lu ZyBkYXRlcz8gKi8KLSAgICBpZiAocHZbU05EX1VQRF0uaXZhbCA+IDAgfHwgKCFtZGVsICYmIHhf Zm5jID09IFhZRlhfVSkpCi0gICAgICB1cGRhdGluZyA9IDE7Ci0gICAgaWYgKHB2W1NORF9ESUZd Lml2YWwgPiAwIHx8IHhfZm5jID09IFhZRlhfTSkKLSAgICAgIHVwZGF0aW5nID0gMjsKLSAgICBp ZiAodXBkYXRpbmcpCQkJLyogVGhlc2Ugc3dpdGNoZXMgZm9yY2UgRlRQIERBVEVTIE9OICovCi0g ICAgICBmdHBfZGF0ZXMgfD0gMjsKLQotICAgIHdoYXQgPSBtZGVsID8gV19GVFB8V19GVF9ERUxF IDogV19SRUNWfFdfRlRQOyAvKiBXaGF0IHdlJ3JlIGRvaW5nICovCi0KLSAgICBjYW5jZWxncm91 cCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBHcm91cCBub3QgY2FuY2VsZWQgeWV0ICovCi0g ICAgaWYgKCEoZnRwX3hmZXJtb2RlID09IFhNT0RFX0EgJiYgcGF0dGVybnMgJiYgZ2V0X2F1dG8g JiYgIWZvcmNldHlwZSkpCi0gICAgICBjaGFuZ2V0eXBlKGZ0cF90eXAsMCk7CQkvKiBDaGFuZ2Ug dG8gcmVxdWVzdGVkIHR5cGUgKi8KLSAgICBiaW5hcnkgPSBmdHBfdHlwOyAgICAgICAgICAgICAg ICAgICAvKiBGb3IgZmlsZS10cmFuc2ZlciBkaXNwbGF5ICovCi0gICAgZmlyc3QgPSAxOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRm9yIE1HRVQgbGlzdCAqLwotICAgIGRvbmUgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvb3AgY29udHJvbCAqLwotCi0jaWZkZWYgQ0tf VE1QRElSCi0gICAgaWYgKGRsZGlyICYmICFmX3RtcGRpcikgeyAgICAgICAgICAgLyogSWYgdGhl eSBoYXZlIGEgZG93bmxvYWQgZGlyZWN0b3J5ICovCi0gICAgICAgIGlmICgocyA9IHpndGRpcigp KSkgeyAgICAgICAgICAgLyogR2V0IGN1cnJlbnQgZGlyZWN0b3J5ICovCi0gICAgICAgICAgICBp ZiAoemNoZGlyKGRsZGlyKSkgeyAgICAgICAgLyogQ2hhbmdlIHRvIGRvd25sb2FkIGRpcmVjdG9y eSAqLwotICAgICAgICAgICAgICAgIGNrc3RybmNweShzYXZkaXIscyxUTVBESVJMRU4pOwotICAg ICAgICAgICAgICAgIGZfdG1wZGlyID0gMTsgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoYXQgd2Ug ZGlkIHRoaXMgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBD S19UTVBESVIgKi8KLQotICAgIGlmIChmdHBfbm1sKSB7ICAgICAgICAgICAgICAgICAgICAgIC8q IC9OQU1FTElTVCAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgR0VUIGZ0cF9ubWwiLGZ0cF9u bWwsMCk7Ci0gICAgICAgIGlmIChmdHBfbm1sWzBdID09ICctJyAmJiBmdHBfbm1sWzFdID09IDAp Ci0gICAgICAgICAgZnBfbm1sID0gc3Rkb3V0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgZnBf bm1sID0gZm9wZW4oZnRwX25tbCwgIndiIik7Ci0gICAgICAgIGlmICghZnBfbm1sKSB7Ci0gICAg ICAgICAgICBwcmludGYoIj8lczogJXNcbiIsZnRwX25tbCxja19lcnJzdHIoKSk7Ci0gICAgICAg ICAgICBnb3RvIHhnZXR4OwotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlICghZG9uZSAmJiAh Y2FuY2VsZ3JvdXApIHsgICAgIC8qIExvb3AgZm9yIGFsbCBmaWxlcyAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9yIHVudGlsIGNhbmNlbGVkLiAqLwotI2lm ZGVmIEZUUF9QUk9YWQotICAgICAgICAvKiBkbyBzb21ldGhpbmcgaGVyZSBpZiBwcm94eSAqLwot I2VuZGlmIC8qIEZUUF9QUk9YWSAqLwotCi0gICAgICAgIHJzX2xlbiA9IChDS19PRkZfVCkwOwkJ LyogUkVHRVQgcG9zaXRpb24gKi8KLSAgICAgICAgY2FuY2VsZmlsZSA9IDA7ICAgICAgICAgICAg ICAgICAvKiBUaGlzIGZpbGUgbm90IGNhbmNlbGVkIHlldCAqLwotICAgICAgICBoYXNwYXRoID0g MDsgICAgICAgICAgICAgICAgICAgIC8qIFJlY2FsY3VsYXRlIHRoaXMgZWFjaCB0aW1lIHRocnUg Ki8KLQotICAgICAgICBpZiAoZ2V0b25lKSB7ICAgICAgICAgICAgICAgICAgIC8qIEdFVCAqLwot ICAgICAgICAgICAgY2hhciAqIHA7Ci0gICAgICAgICAgICBzID0gbGluZTsKLSAgICAgICAgICAg IHNyYyA9IGxpbmU7ICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgbmFtZSAqLwotICAgICAgICAg ICAgZG9uZSA9IDE7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IGZpbGUiLHMsMCk7 Ci0gICAgICAgIH0gZWxzZSBpZiAobWdldCkgeyAgICAgICAgICAgICAgLyogTUdFVCAqLwotICAg ICAgICAgICAgc3JjID0gbWdldGxpc3RbbWdldHhdOwotICAgICAgICAgICAgZGVidWcoRjExMSwi ZnRwIG1nZXQgcmVtb3RlX2ZpbGVzIEEiLHNyYyxmaXJzdCk7Ci0gICAgICAgICAgICBzID0gKGNo YXIgKilyZW1vdGVfZmlsZXMoZmlyc3QsCi0JCQkJICAgICAoQ0hBUiAqKW1nZXRsaXN0W21nZXR4 XSwKLQkJCQkgICAgIChDSEFSICopcHZbU05EX1BBVF0uc3ZhbCwKLQkJCQkgICAgIDAKLQkJCQkg ICAgICk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgbWdldCByZW1vdGVfZmlsZXMgQiIs cywwKTsKLSAgICAgICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAgICAgICAgaWYgKCEqcykg ewotICAgICAgICAgICAgICAgIGZpcnN0ID0gMTsKLSAgICAgICAgICAgICAgICBpZiAobGlzdGZp bGUpIHsJCS8qIE5hbWVzIGZyb20gbGlzdGZpbGUgKi8KLSAgICAgICAgICAgICAgICAgIGFnYWlu OgotICAgICAgICAgICAgICAgICAgICB0bXBidWZbMF0gPSBOVUw7Ci0gICAgICAgICAgICAgICAg ICAgIHdoaWxlICghdG1wYnVmWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoenNp bmwoWk1GSUxFLHRtcGJ1ZixDS01BWFBBVEgpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHpjbG9zZShaTUZJTEUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMTAsImZ0cCBnZXQgbGlzdGZpbGUgRU9GIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwdltTTkRfRklMXS5zdmFsLDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1ha2VzdHIoJihtZ2V0bGlzdFswXSksTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IDE7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpCi0g ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgbWFr ZXN0cigmKG1nZXRsaXN0WzBdKSx0bXBidWYpOwotCQkgICAgZGVidWcoRjExMCwiZnRwIGdldCBs aXN0ZmlsZSBuZXh0Iix0bXBidWYsMCk7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSAoY2hhciAq KXJlbW90ZV9maWxlcyhmaXJzdCwKLQkJCQkJICAgICAoQ0hBUiAqKW1nZXRsaXN0WzBdLAotCQkJ CQkgICAgIChDSEFSICopcHZbU05EX1BBVF0uc3ZhbCwKLQkJCQkJICAgICAwCi0JCQkJCSAgICAg KTsKLQkJICAgIGRlYnVnKEYxMTAsImZ0cCBtZ2V0IHJlbW90ZV9maWxlcyBDIixzLDApOwotICAg ICAgICAgICAgICAgICAgICBpZiAoIXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0c2Ny ZWVuKFNDUl9GTiwnRicsKENLX09GRl9UKTAscyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm dHNjcmVlbihTQ1JfU1QsU1RfTVNHLChDS19PRkZfVCkwLCJGaWxlIG5vdCBmb3VuZCIpOwotICAg ICAgICAgICAgICAgICAgICAgICAgdGxvZyhGMTEwLCJmdHAgZ2V0IGZpbGUgbm90IGZvdW5kOiIs cywwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYWdhaW47Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewkJLyogTmFtZXMgZnJvbSBjb21tYW5k IGxpbmUgKi8KLSAgICAgICAgICAgICAgICAgICAgbWdldHgrKzsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKG1nZXR4IDwgbWdldG4pCi0JCSAgICAgIHMgPSAoY2hhciAqKXJlbW90ZV9maWxlcyhm aXJzdCwKLQkJCQkJICAgICAgIChDSEFSICopbWdldGxpc3RbbWdldHhdLAotCQkJCQkgICAgICAg KENIQVIgKilwdltTTkRfUEFUXS5zdmFsLAotCQkJCQkgICAgICAgMAotCQkJCQkgICAgICAgKTsK LSAgICAgICAgICAgICAgICAgICAgZWxzZQotCQkgICAgICBzID0gTlVMTDsKLQkJICAgIGlmICgh cykgbWdldHgrKzsKLQkJICAgIGRlYnVnKEYxMTEsImZ0cCBtZ2V0IHJlbW90ZV9maWxlcyBEIixz LG1nZXR4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFzKSB7Ci0J CSAgICBpZiAoIWZpcnN0IHx8IG1nZXR4ID49IG1nZXRuKSB7Ci0JCQlkb25lID0gMTsKLQkJCWJy ZWFrOwotCQkgICAgfSBlbHNlIGlmIChnZXRlcnJvcikgewotCQkJc3RhdHVzID0gMDsKLQkJCWRv bmUgPSAxOwotCQkJYnJlYWs7Ci0JCSAgICB9IGVsc2UgewotCQkJY29udGludWU7Ci0JCSAgICB9 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0JZGVidWcoRjEx MSwiZnRwIG1nZXQgcmVtb3RlX2ZpbGVzIEUiLHMsMCk7Ci0gICAgICAgIC8qCi0gICAgICAgICAg VGhlIHNlbWFudGljcyBvZiBOTFNUIGFyZSBpbGwtZGVmaW5lZC4gIFN1cHBvc2Ugd2UgaGF2ZSBq dXN0IHNlbnQKLSAgICAgICAgICBOTFNUIC9wYXRoL1thLXpdKi4gIE1vc3Qgc2VydmVycyBzZW5k IGJhY2sgbmFtZXMgbGlrZSAvcGF0aC9mb28sCi0gICAgICAgICAgL3BhdGgvYmFyLCBldGMuICBC dXQgc29tZSBzZW5kIGJhY2sgb25seSBmb28gYW5kIGJhciwgYW5kIHN1YnNlcXVlbnQKLSAgICAg ICAgICBSRVRSIGNvbW1hbmRzIGJhc2VkIG9uIHRoZSBwYXRobGVzcyBuYW1lcyBhcmUgbm90IGdv aW5nIHRvIHdvcmsuCi0gICAgICAgICovCi0gICAgICAgIGlmIChzZXJ2ZXJ0eXBlID09IFNZU19V TklYICYmICFja3N0cmNocihzLCcvJykpIHsKLSAgICAgICAgICAgIGNoYXIgKiBzMzsKLSAgICAg ICAgICAgIGlmICgoczMgPSBja3N0cnJjaHIobWdldGxpc3RbbWdldHhdLCcvJykpKSB7Ci0gICAg ICAgICAgICAgICAgaW50IGxlbiwgbGVmdCA9IDQwOTY7Ci0gICAgICAgICAgICAgICAgY2hhciAq IHRtcCA9IHh0bXBidWY7Ci0gICAgICAgICAgICAgICAgbGVuID0gczMgLSBtZ2V0bGlzdFttZ2V0 eF0gKyAxOwotICAgICAgICAgICAgICAgIGNrc3RybmNweSh0bXAsbWdldGxpc3RbbWdldHhdLGxl ZnQpOwotICAgICAgICAgICAgICAgIHRtcCArPSBsZW47Ci0gICAgICAgICAgICAgICAgbGVmdCAt PSBsZW47Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcCxzLGxlZnQpOwotICAgICAgICAg ICAgICAgIHMgPSB4dG1wYnVmOwotCQlkZWJ1ZyhGMTExLCJmdHAgbWdldCByZW1vdGVfZmlsZXMg RiIscywwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmaXJzdCA9IDA7Ci0g ICAgICAgIHNraXB0aGlzID0gMDsgICAgICAgICAgICAgICAgICAgLyogRmlsZSBzZWxlY3Rpb24u Li4gKi8KLSAgICAgICAgbXNnID0gIiI7Ci0gICAgICAgIG5hbSA9IHM7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogRmlsZW5hbWUgKHdpdGhvdXQgcGF0aCkgKi8KLSAgICAgICAgcmMgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsIHJldHVybiBjb2RlICovCi0gICAgICAg IHMyID0gIiI7Ci0KLSAgICAgICAgaWYgKCFnZXRvbmUgJiYgIXNraXB0aGlzKSB7ICAgICAvKiBG b3IgTUdFVCBhbmQgTURFTEVURS4uLiAqLwotICAgICAgICAgICAgY2hhciBjLCAqIHAgPSBzOwot ICAgICAgICAgICAgaW50IHNydnBhdGggPSAwOwotICAgICAgICAgICAgaW50IHVzcnBhdGggPSAw OwotICAgICAgICAgICAgaW50IGksIGsgPSAwOwotCi0JICAgIGRlYnVnKEYxMTEsImZ0cCBtZ2V0 IGhhdmV0eXBlIixzLGhhdmV0eXBlKTsKLQkgICAgaWYgKGhhdmV0eXBlID4gMCAmJiBoYXZldHlw ZSAhPSBGVFlQX0ZJTEUpIHsKLQkJLyogU2VydmVyIHNheXMgaXQncyBub3QgZmlsZS4uLiAqLwot CQlkZWJ1ZyhGMTEwLCJmdHAgbWdldCBub3QtYS1maWxlIixzLDApOwotCQljb250aW51ZTsKLQkg ICAgfQotLyoKLSAgRXhwbGFuYXRpb246IFNvbWUgZnRwIHNlcnZlcnMgKHN1Y2ggYXMgd3UtZnRw ZCkgcmV0dXJuIGEgcmVjdXJzaXZlIGxpc3QuCi0gIEJ1dCBpZiB0aGUgY2xpZW50IGRpZCBub3Qg YXNrIGZvciBhIHJlY3Vyc2l2ZSBsaXN0LCB3ZSBoYXZlIHRvIGlnbm9yZSBhbnkKLSAgc2VydmVy IGZpbGVzIHRoYXQgaW5jbHVkZSBhIHBhdGhuYW1lIHRoYXQgZXh0ZW5kcyBiZXlvbmQgYW55IHBh dGggdGhhdAotICB3YXMgaW5jbHVkZWQgaW4gdGhlIHVzZXIncyByZXF1ZXN0LgotCi0gIFVzZXIn cyBmaWxlc3BlYyBpcyBibGFoIG9yIHBhdGgvYmxhaCAob3Igb3RoZXIgbm9uLVVOSVggc3ludGF4 KS4gIFdlIG5lZWQgdG8KLSAgZ2V0IHRoZSB1c2VyJ3MgcGF0aCBzZWdtZW50LiAgVGhlbiwgZm9y IGVhY2ggaW5jb21pbmcgZmlsZSwgaWYgaXQgYmVnaW5zCi0gIHdpdGggdGhlIHNhbWUgcGF0aCBz ZWdtZW50LCB3ZSBtdXN0IHN0cmlwIGl0IChwb2ludCBwYXN0IGl0KS4KLSovCi0gICAgICAgICAg ICBzcmMgPSBtZ2V0bGlzdFttZ2V0eF07ICAgICAgLyogSW4gY2FzZSBpdCBtb3ZlZCEgKi8KLQkg ICAgaWYgKHNyYykgewotCQlmb3IgKGkgPSAwOyBzcmNbaV07IGkrKykgeyAvKiBGaW5kIHJpZ2h0 bW9zdCBwYXRoIHNlcGFyYXRvciAqLwotCQkgICAgaWYgKGlzcGF0aHNlcChzcmNbaV0pKSAvKiBp biB1c2VyJ3MgcGF0aG5hbWUgKi8KLQkJICAgICAgayA9IGkgKyAxOwotCQl9Ci0JICAgIH0gZWxz ZSB7Ci0JCXNyYyA9ICIiOwotCSAgICB9Ci0gICAgICAgICAgICB1c3JwYXRoID0gazsgICAgICAg ICAgICAgICAgLyogVXNlciBwYXRoIHNlZ21lbnQgbGVuZ3RoICovCi0gICAgICAgICAgICBkZWJ1 ZyhGMTExLCJmdHAgZ2V0IHVzcnBhdGgiLHNyYyx1c3JwYXRoKTsKLQotICAgICAgICAgICAgcCA9 IHM7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBmaWxlbmFtZSAqLwotICAgICAgICAg ICAgd2hpbGUgKChjID0gKnArKykpIHsgICAgICAgIC8qIExvb2sgZm9yIHBhdGggaW4gc2VydmVy IGZpbGVuYW1lICovCi0gICAgICAgICAgICAgICAgaWYgKGlzcGF0aHNlcChjKSkgewotCQkgICAg LyogaGFzcGF0aCsrOyAqLwotICAgICAgICAgICAgICAgICAgICBuYW0gPSBwOyAgICAgICAgICAg IC8qIFBhdGhsZXNzIG5hbWUgKGZvciBja21hdGNoKSAqLwotICAgICAgICAgICAgICAgICAgICBz cnZwYXRoID0gcCAtIHM7ICAgIC8qIFNlcnZlciBwYXRoIHNlZ21lbnQgbGVuZ3RoICovCi0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVidWcoRjExMSwiZnRw IGdldCBzcnZwYXRoIixzLHNydnBhdGgpOwotCi0JICAgIGlmICh1c3JwYXRoID09IDApIHsKLS8q Ci0gIEhlcmUgd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyIHNhaWQgIm1nZXQgZm9v IiB3aGVyZSBmb28gaXMgYQotICBkaXJlY3RvcnkgbmFtZSwgYW5kIHRoZSBzZXJ2ZXIgaXMgc2Vu ZGluZyBiYWNrIG5hbWVzIGxpa2UgImZvby9maWxlMSIsCi0gICJmb28vZmlsZTIiLCBldGMuICBU aGlzIGlzIGEgbmFzdHkgdHJpY2sgYnV0IGl0J3MgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlCi0gIHVz ZXIgY2FuJ3QgY29tcGVuc2F0ZSBieSB0eXBpbmcgIm1nZXQgZm9vLyIgYmVjYXVzZSB0aGVuIHRo ZSBzZXJ2ZXIgaXMKLSAgbGlrZWx5IHRvIHNlbmQgYmFjayAiZm9vLy9maWxlMSwgZm9vLy9maWxl MiIgZXRjLCBhbmQgd2Ugc3RpbGwgd29uJ3QKLSAgZ2V0IGEgbWF0Y2guLi4KLSovCi0JCWludCBz cmNsZW4gPSAwLCBzcnZsZW4gPSAwOwotCQlpZiAoc3JjKSBzcmNsZW4gPSBzdHJsZW4oc3JjKTsK LQkJaWYgKHMpIHNydmxlbiA9IHN0cmxlbihzKTsKLQkJaWYgKHNyYyAmJiAoc3J2bGVuID4gc3Jj bGVuKSkgewotCQkgICAgaWYgKCFzdHJuY21wKHNyYyxzLHNyY2xlbikgJiYgaXNwYXRoc2VwKHNb c3JjbGVuXSkpIHsKLQkJCWNoYXIgKiB0bXBzcmMgPSBOVUxMOwotCQkJdG1wc3JjID0gKGNoYXIg KiltYWxsb2Moc3JjbGVuICsgMik7Ci0JCQlzdHJuY3B5KHRtcHNyYyxzcmMsc3JjbGVuKTsKLQkJ CXRtcHNyY1tzcmNsZW5dID0gc1tzcmNsZW5dOwotCQkJdG1wc3JjW3NyY2xlbisxXSA9IE5VTDsK LQkJCWZyZWUobWdldGxpc3RbbWdldHhdKTsKLQkJCW1nZXRsaXN0W21nZXR4XSA9IHRtcHNyYzsK LQkJCXRtcHNyYyA9IE5VTEw7Ci0JCQlzcmMgPSBtZ2V0bGlzdFttZ2V0eF07Ci0JCQl1c3JwYXRo ID0gc3JjbGVuKzE7Ci0JCSAgICB9CQkJICAgICAgCi0JCX0KLQkgICAgfQotLyoKLSAgSWYgYXMt bmFtZSBub3QgZ2l2ZW4gYW5kIHNlcnZlciBmaWxlbmFtZSBpbmNsdWRlcyBwYXRoIHRoYXQgbWF0 Y2hlcwotICB0aGUgcGF0aG5hbWUgZnJvbSB0aGUgdXNlcidzIGZpbGUgc3BlY2lmaWNhdGlvbiwg d2UgbXVzdCB0cmltIHRoZSBjb21tb24KLSAgcGF0aCBwcmVmaXggZnJvbSB0aGUgc2VydmVyJ3Mg bmFtZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgbG9jYWwgbmFtZS4KLSovCi0gICAgICAgICAgICBp ZiAoc3JjICYmCQkJLyogV2VkIFNlcCAyNSAxNzoyNzo0OCAyMDAyICovCi0JCSFhc25hbWJ1Zlsw XSAmJgotCQkhcmVjdXJzaXZlICYmCQkvKiBUaHUgU2VwIDE5IDE2OjExOjU5IDIwMDIgKi8KLQkJ KHNydnBhdGggPiAwKSAmJgotCQkhc3RybmNtcChzcmMscyx1c3JwYXRoKSkgewotICAgICAgICAg ICAgICAgIHMyID0gcyArIHVzcnBhdGg7ICAgICAgIC8qIExvY2FsIG5hbWUgc2tpcHMgcGFzdCBy ZW1vdGUgcGF0aCAqLwotICAgICAgICAgICAgfQotI2lmZGVmIENPTU1FTlQKLQkgICAgLyogVGhp cyBkb2Vzbid0IHdvcmsgaWYgdGhlIHBhdGggcHJlZml4IGNvbnRhaW5zIHdpbGRjYXJkcyEgKi8K LQkgICAgaGFzcGF0aCA9IChzcnZwYXRoID4gdXNycGF0aCk7Ci0jZWxzZQotCSAgICB7CQkJCS8q IENvdW50IHBhdGggc2VnbWVudHMgaW5zdGVhZCAqLwotCQlpbnQgeDEgPSAwLCB4MiA9IDA7Ci0J CWNoYXIgKnA7Ci0JCWZvciAocCA9IHM7ICpwOyBwKyspCi0JCSAgaWYgKGlzcGF0aHNlcCgqcCkp IHgxKys7Ci0JCWZvciAocCA9IHNyYzsgKnA7IHArKykgewotCQkgICAgaWYgKGlzcGF0aHNlcCgq cCkpIHgyKys7Ci0JCX0KLQkJaGFzcGF0aCA9IHJlY3Vyc2l2ZSA/IHgxIHx8IHgyIDogeDEgPiB4 MjsKLQkJZGVidWcoRjExMSwiZnRwIGdldCBzZXJ2ZXIgcGF0aCBzZWdtZW50cyIscyx4MSk7Ci0J CWRlYnVnKEYxMTEsImZ0cCBnZXQgdXNlciAgIHBhdGggc2VnbWVudHMiLHNyYyx4Mik7Ci0JICAg IH0KLQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBn ZXQgaGFzcGF0aCIscyt1c3JwYXRoLGhhc3BhdGgpOwotCi0gICAgICAgICAgICBpZiAoaGFzcGF0 aCkgeyAgICAgICAgICAgICAgLyogU2VydmVyIGZpbGUgaGFzIHBhdGggc2VnbWVudHM/ICovCi0g ICAgICAgICAgICAgICAgaWYgKCFyZWN1cnNpdmUpIHsgICAgICAgLyogW01dR0VUIC9SRUNVUlNJ VkU/ICovCi0vKgotICBXZSBkaWQgbm90IGFzayBmb3IgYSByZWN1cnNpdmUgbGlzdGluZywgYnV0 IHRoZSBzZXJ2ZXIgaXMgc2VuZGluZyB1cyBvbmUKLSAgYW55d2F5IChhcyB3dS1mdHBkIGlzIHdv bnQgdG8gZG8pLiAgV2UgZ2V0IGhlcmUgaWYgdGhlIGN1cnJlbnQgZmlsZW5hbWUKLSAgaW5jbHVk ZXMgYSBwYXRoIHNlZ21lbnQgYmV5b25kIGFueSBwYXRoIHNlZ21lbnQgd2UgYXNrZWQgZm9yIGlu IG91cgotICBub24tcmVjdXJzaXZlIFtNXUdFVCBjb21tYW5kLiAgV2UgTVVTVCBza2lwIHRoaXMg ZmlsZS4KLSovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgc2tpcHBp bmcgYmVjYXVzZSBvZiBwYXRoIixzLDApOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoZ2V0 b25lICYmICFza2lwdGhpcykgeyAvKiBHRVQgKG5vdCBNR0VUKSAqLwotICAgICAgICAgICAgY2hh ciAqIHAgPSBuYW07Ci0JICAgIHdoaWxlICgoYyA9ICpwKyspKSB7CS8qIEhhbmRsZSBwYXRoIGlu IGxvY2FsIG5hbWUgKi8KLQkJaWYgKGlzcGF0aHNlcChjKSkgewotCQkgICAgaWYgKHJlY3Vyc2l2 ZSkgewkvKiBJZiByZWN1cnNpdmUsIGtlZXAgaXQgKi8KLQkJCWhhc3BhdGggPSAxOwotCQkJYnJl YWs7Ci0JCSAgICB9IGVsc2UgewkJLyogT3RoZXJ3aXNlIGxvc2UgaXQuICovCi0JCSAgICAgIG5h bSA9IHA7Ci0JCSAgICB9Ci0JCX0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMyID0gbmFt OwotICAgICAgICB9Ci0gICAgICAgIGlmICghKm5hbSkgICAgICAgICAgICAgICAgICAgICAgLyog TmFtZSB3aXRob3V0IHBhdGggKi8KLSAgICAgICAgICBuYW0gPSBzOwotCi0gICAgICAgIGlmICgh c2tpcHRoaXMgJiYgcHZbU05EX05PRF0uaXZhbCA+IDApIHsgLyogL05PRE9URklMRVMgKi8KLSAg ICAgICAgICAgIGlmIChuYW1bMF0gPT0gJy4nKQotCSAgICAgIGNvbnRpbnVlOwotICAgICAgICB9 Ci0gICAgICAgIGlmICghc2tpcHRoaXMgJiYgcmN2ZXhjZXB0WzBdKSB7IC8qIC9FWENFUFQ6IGxp c3QgKi8KLQkgICAgaW50IHh4OwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5TTkRFWENF UFQ7IGkrKykgewotICAgICAgICAgICAgICAgIGlmICghcmN2ZXhjZXB0W2ldKSB7Ci0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQkJeHggPSBja21hdGNoKHJj dmV4Y2VwdFtpXSwgbmFtLCBzZXJ2ZXJ0eXBlID09IFNZU19VTklYLCAxKTsKLQkJZGVidWcoRjEx MSwiZnRwIG1nZXQgL2V4Y2VwdCBtYXRjaCIscmN2ZXhjZXB0W2ldLHh4KTsKLSAgICAgICAgICAg ICAgICBpZiAoeHgpIHsKLSAgICAgICAgICAgICAgICAgICAgdGxvZyhGMTAwLCIgcmVmdXNlZDog ZXhjZXB0aW9uIGxpc3QiLCIiLDApOwotCQkgICAgbXNnID0gIlJlZnVzZWQ6IEV4Y2VwdGlvbiBM aXN0IjsKLSAgICAgICAgICAgICAgICAgICAgc2tpcHRoaXMrKzsKLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g ICAgICAgIGlmICghc2tpcHRoaXMgJiYgcHZbU05EX05PQl0uaXZhbCA+IDApIHsgLyogL05PQkFD S1VQRklMRVMgKi8KLSAgICAgICAgICAgIGlmIChja21hdGNoKAotI2lmZGVmIENLUkVHRVgKLSAg ICAgICAgICAgICAgICAgICAgICAgICIqLn5bMC05XSp+IgotI2Vsc2UKLSAgICAgICAgICAgICAg ICAgICAgICAgICIqLn4qfiIKLSNlbmRpZiAvKiBDS1JFR0VYICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAsbmFtLDAsMSkgPiAwKQotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg fQotICAgICAgICBpZiAoIXhfeGxhKSB7ICAgICAgICAgICAgICAgICAgIC8qIElmIHRyYW5zbGF0 aW9uIGlzIG9mZiAqLwotICAgICAgICAgICAgeF9jc2wgPSAtMjsgICAgICAgICAgICAgICAgIC8q IHVuc2V0IHRoZSBjaGFyc2V0cyAqLwotICAgICAgICAgICAgeF9jc3IgPSAtMjsKLSAgICAgICAg fQotICAgICAgICBja3N0cm5jcHkoZmlsbmFtLHMsQ0tNQVhQQVRIKTsgIC8qIEZvciBcdihmaWxl bmFtZSkgKi8KLSAgICAgICAgaWYgKCEqczIpICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2Nh bCBuYW1lICovCi0gICAgICAgICAgczIgPSBhc25hbWJ1ZjsgICAgICAgICAgICAgICAgLyogQXMt bmFtZSAqLwotCi0JaWYgKCEqczIpCQkJLyogU2F0IE5vdiAxNiAxOToxOTozOSAyMDAyICovCi0J ICBzMiA9IHJlY3Vyc2l2ZSA/IHMgOiBuYW07CS8qIEZyaSBKYW4gMTAgMTM6MTU6MTkgMjAwMyAq LwotCi0gICAgICAgIGRlYnVnKEYxMTAsImZ0cCBnZXQgZmlsbmFtICAiLHMsMCk7Ci0gICAgICAg IGRlYnVnKEYxMTAsImZ0cCBnZXQgYXNuYW1lIEEiLHMyLDApOwotCi0gICAgICAgIC8qIFJlY2Vp dmluZyB0byByZWFsIGZpbGUgKi8KLSAgICAgICAgaWYgKCFwaXBlc2VuZCAmJgotI2lmZGVmIFBJ UEVTRU5ECi0gICAgICAgICAgICAhcmN2ZmlsdGVyICYmCi0jZW5kaWYgLyogUElQRVNFTkQgKi8K LSAgICAgICAgICAgICF0b3NjcmVlbikgewotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgLyog RG8gdGhpcyBoZXJlIHNvIHdlIGNhbiBkZWNpZGUgd2hldGhlciB0byBza2lwICovCi0gICAgICAg ICAgICBpZiAoY21kX3F1b3RpbmcgJiYgIXNraXB0aGlzICYmIGFzbmFtYnVmWzBdKSB7Ci0gICAg ICAgICAgICAgICAgaW50IG47IGNoYXIgKnA7Ci0gICAgICAgICAgICAgICAgbiA9IFRNUEJVRlNJ WjsKLSAgICAgICAgICAgICAgICBwID0gdG1wYnVmOwotICAgICAgICAgICAgICAgIHp6c3RyaW5n KGFzbmFtYnVmLCZwLCZuKTsKLSAgICAgICAgICAgICAgICBzMiA9IHRtcGJ1ZjsKLSAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IGFzbmFtZSBCIixzMix1cGRhdGluZyk7Ci0gICAg ICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotCSAgICBsb2NhbCA9ICpzMiA/IHMyIDog czsKLQotCSAgICBpZiAoIXNraXB0aGlzICYmIHhfZm5jID09IFhZRlhfRCkgeyAvKiBGaWxlIENv bGxpc2lvbiA9IERpc2NhcmQgKi8KLQkJQ0tfT0ZGX1QgeDsKLQkJeCA9IHpjaGtpKGxvY2FsKTsK LQkJZGVidWcoRjExMSwiZnRwIGdldCBESVNDQVJEIHpjaGtpIixsb2NhbCx4KTsKLQkJaWYgKHgg PiAtMSkgewotCQkgICAgc2tpcHRoaXMrKzsKLQkJICAgIGRlYnVnKEYxMTAsImZ0cCBnZXQgc2tp cCBuYW1lIixsb2NhbCwwKTsKLQkJICAgIHRsb2coRjEwMCwiIHJlZnVzZWQ6IG5hbWUiLCIiLDAp OwotCQkgICAgbXNnID0gIlJlZnVzZWQ6IE5hbWUiOwotCQl9Ci0JICAgIH0KLQotI2lmZGVmIERP VVBEQVRFCi0gICAgICAgICAgICBpZiAoIXNraXB0aGlzICYmIHVwZGF0aW5nKSB7IC8qIElmIHVw ZGF0aW5nIGFuZCBub3QgeWV0IHNraXBwaW5nICovCi0gICAgICAgICAgICAgICAgaWYgKHpjaGtp KGxvY2FsKSA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBjaGttb2R0aW1lKGxvY2Fs LHMsMCk7Ci0jaWZkZWYgREVCVUcKLQkJICAgIGlmIChkZWJsb2cpIHsKLQkJCWlmICh1cGRhdGlu ZyA9PSAyKQotCQkJICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IC9kYXRlcy1kaWZmIGNoa21vZHRpbWUi LGxvY2FsLHgpOwotCQkJZWxzZQotCQkJICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IC91cGRhdGUgY2hr bW9kdGltZSIsbG9jYWwseCk7Ci0JCSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkJICAgIGlm ICgodXBkYXRpbmcgPT0gMSAmJiB4ID4gMCkgfHwgIC8qIC9VUERBVEUgKi8KLQkJCSh1cGRhdGlu ZyA9PSAyICYmIHggPT0gMSkpIHsgLyogL0RBVEVTLURJRkZFUiAqLwotCQkJc2tpcHRoaXMrKzsK LQkJCXRsb2coRjEwMCwiIHJlZnVzZWQ6IGRhdGUiLCIiLDApOwotCQkJbXNnID0gIlJlZnVzZWQ6 IERhdGUiOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIGdldCBza2lw IGRhdGUiLGxvY2FsLDApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgfQotI2VuZGlmIC8qIERPVVBEQVRFICovCi0gICAgICAgIH0KLSAgICAg ICAgLyogSW5pdGlhbGl6ZSBmaWxlIHNpemUgdG8gLTEgaW4gY2FzZSBzZXJ2ZXIgZG9lc24ndCB1 bmRlcnN0YW5kICovCi0gICAgICAgIC8qIFNJWkUgY29tbWFuZCwgc28geHhzY3JlZW4oKSB3aWxs IGtub3cgd2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSAqLwotCi0gICAgICAgIGZzaXplID0gKENLX09G Rl9UKS0xOwotCi0JLyogQXNrIGZvciBzaXplIG5vdyBvbmx5IGlmIHdlIG5lZWQgaXQgZm9yIHNl bGVjdGlvbiAqLwotCS8qIGJlY2F1c2UgaWYgeW91J3JlIGdvaW5nIHRocnUgYSBsaXN0IDEwMCww MDAgZmlsZXMgdG8gc2VsZWN0ICovCi0JLyogYSBzbWFsbCBzdWJzZXQsIDEwMCwwMDAgU0laRSBj b21tYW5kcyBjYW4gdGFrZSBob3Vycy4uLiAqLwotCi0JZ290c2l6ZSA9IDA7Ci0gICAgICAgIGlm ICghbWRlbCAmJiAhc2tpcHRoaXMgJiYgICAgICAgIC8qIERvbid0IG5lZWQgc2l6ZSBmb3IgREVM RS4uLiAqLwotCSAgICAoZ2V0c21hbGxlciA+PSAoQ0tfT0ZGX1QpMCAgfHwgZ2V0bGFyZ2VyID49 IChDS19PRkZfVCkwKSkgewotCSAgICBpZiAoaGF2ZXNpemUgPj0gKENLX09GRl9UKTApIHsgLyog QWxyZWFkeSBoYXZlIGZpbGUgc2l6ZT8gKi8KLQkJZnNpemUgPSBoYXZlc2l6ZTsKLQkJZ290c2l6 ZSA9IDE7Ci0JICAgIH0gZWxzZSB7CQkJLyogTm8gLSBtdXN0IGFzayBzZXJ2ZXIgKi8KLQkJLyoK LQkJICBQcmlvciB0byBzZW5kaW5nIHRoZSBOTFNUIGNvbW1hbmQgd2UgbmVjZXNzYXJpbHkgcHV0 IHRoZQotCQkgIHNlcnZlciBpbnRvIEFTQ0lJIG1vZGUuICBXZSBtdXN0IG5vdyBwdXQgaXQgYmFj ayBpbnRvIHRoZQotCQkgIHRoZSByZXF1ZXN0ZWQgbW9kZSBzbyB0aGUgdXBjb21pbmcgU0laRSBj b21tYW5kIHJldHVybnMKLQkJICByaWdodCBraW5kIG9mIHNpemU7IHRoaXMgaXMgZXNwZWNpYWxs eSBpbXBvcnRhbnQgZm9yCi0JCSAgR0VUIC9SRUNPVkVSOyBvdGhlcndpc2UgdGhlIHNlcnZlciBy ZXR1cm5zIHRoZSAiQVNDSUkiIHNpemUKLQkJICBvZiB0aGUgZmlsZSwgcmF0aGVyIHRoYW4gaXRz IHRydWUgc2l6ZS4KLQkJKi8KLQkJY2hhbmdldHlwZShmdHBfdHlwLDApOwkvKiBDaGFuZ2UgdG8g cmVxdWVzdGVkIHR5cGUgKi8KLQkJZnNpemUgPSAoQ0tfT0ZGX1QpLTE7Ci0JCWlmIChzaXplb2sp IHsKLQkJICAgIHggPSBmdHBjbWQoIlNJWkUiLHMseF9jc2wseF9jc3IsZnRwX3ZibSk7Ci0JCSAg ICBpZiAoeCA9PSBSRVBMWV9DT01QTEVURSkgewotCQkJZnNpemUgPSBja2F0b2ZzKCZmdHBfcmVw bHlfc3RyWzRdKTsKLQkJCWdvdHNpemUgPSAxOwotCQkgICAgfQotCQl9Ci0JICAgIH0KLSAgICAg ICAgICAgIGlmIChnb3RzaXplKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldHNtYWxsZXIgPj0g KENLX09GRl9UKTAgJiYgZnNpemUgPj0gZ2V0c21hbGxlcikKLSAgICAgICAgICAgICAgICAgIHNr aXB0aGlzKys7Ci0gICAgICAgICAgICAgICAgaWYgKGdldGxhcmdlciA+PSAoQ0tfT0ZGX1QpMCAm JiBmc2l6ZSA8PSBnZXRsYXJnZXIpCi0gICAgICAgICAgICAgICAgICBza2lwdGhpcysrOwotICAg ICAgICAgICAgICAgIGlmIChza2lwdGhpcykgewotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTExLCJmdHAgZ2V0IHNraXAgc2l6ZSIscyxmc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRs b2coRjEwMCwiIHJlZnVzZWQ6IHNpemUiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICBtc2cg PSAiUmVmdXNlZDogU2l6ZSI7Ci0gICAgICAgICAgICAgICAgfQotI2lmZGVmIENPTU1FTlQKLSAg ICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0b25lKSB7Ci0gICAgICAgICAgICAgICAgLyogU0laRSBj YW4gZmFpbCBmb3IgbWFueSByZWFzb25zLiAgRG9lcyB0aGUgZmlsZSBleGlzdD8gKi8KLSAgICAg ICAgICAgICAgICB4ID0gZnRwY21kKCJOTFNUIixzLHhfY3NsLHhfY3NyLGZ0cF92Ym0pOwotICAg ICAgICAgICAgICAgIGlmICh4ICE9IFJFUExZX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAg ICAgIHByaW50ZigiPj4+IEZJTEUgTk9UIEZPVU5EOiAlc1xuIixzKTsKLSAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoc2tpcHRoaXMpIHsgICAgICAgICAg ICAgICAgIC8qIFNraXBwaW5nIHRoaXMgZmlsZT8gKi8KLSAgICAgICAgICAgIGZ0c2NyZWVuKFND Ul9GTiwnRicsKENLX09GRl9UKTAscyk7Ci0gICAgICAgICAgICBpZiAobXNnKQotICAgICAgICAg ICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfRVJSLChDS19PRkZfVCkwLG1zZyk7Ci0gICAgICAgICAg ICBlbHNlCi0gICAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9TS0lQLChDS19PRkZfVCkw LHMpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZwX25t bCkgeyAgICAgICAgICAgICAgICAgICAvKiAvTkFNRUxJU1Qgb25seSAtIG5vIHRyYW5zZmVyICov Ci0gICAgICAgICAgICBmcHJpbnRmKGZwX25tbCwiJXNcbiIscyk7Ci0gICAgICAgICAgICBjb250 aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVjdXJzaXZlICYmIGhhc3BhdGggJiYgIXBp cGVzZW5kCi0jaWZkZWYgUElQRVNFTkQKLSAgICAgICAgICAgICYmICFyY3ZmaWx0ZXIKLSNlbmRp ZiAvKiBQSVBFU0VORCAqLwotICAgICAgICAgICAgKSB7Ci0JICAgIGludCB4OwotCi0jaWZkZWYg Tk9NS0RJUgotCSAgICB4ID0gLTE7Ci0jZWxzZQotICAgICAgICAgICAgeCA9IHpta2RpcihzKTsJ CS8qIFRyeSB0byBtYWtlIHRoZSBkaXJlY3RvcnkgKi8KLSNlbmRpZiAvKiBOT01LRElSICovCi0K LSAgICAgICAgICAgIGlmICh4IDwgMCkgewotICAgICAgICAgICAgICAgIHJjID0gLTE7ICAgICAg ICAgICAgICAgIC8qIEZhaWx1cmUgaXMgZmF0YWwgKi8KLSAgICAgICAgICAgICAgICBpZiAoZ2V0 ZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMDsKLSAgICAgICAgICAgICAg ICAgICAgZnRzY3JlZW4oU0NSX0VNLDAsKENLX09GRl9UKTAsCi0JCQkgICAgICJEaXJlY3Rvcnkg Y3JlYXRpb24gZmFpbHVyZSIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBOb3Qgc2tp cHBpbmcgKi8KLQotCXNlbGVjdGVkKys7CQkJLyogQ291bnQgdGhpcyBmaWxlIGFzIHNlbGVjdGVk ICovCi0gICAgICAgIHBuID0gTlVMTDsKLQotCWlmICghZ290c2l6ZSAmJiAhbWRlbCkgewkvKiBE aWRuJ3QgZ2V0IHNpemUgeWV0ICovCi0JICAgIGlmIChoYXZlc2l6ZSA+IChDS19PRkZfVCktMSkg eyAvKiBBbHJlYWR5IGhhdmUgZmlsZSBzaXplPyAqLwotCQlmc2l6ZSA9IGhhdmVzaXplOwotCQln b3RzaXplID0gMTsKLQkgICAgfSBlbHNlIHsJCQkvKiBObyAtIG11c3QgYXNrIHNlcnZlciAqLwot CQlmc2l6ZSA9IChDS19PRkZfVCktMTsKLQkJaWYgKHNpemVvaykgewotCQkgICAgeCA9IGZ0cGNt ZCgiU0laRSIscyx4X2NzbCx4X2NzcixmdHBfdmJtKTsKLQkJICAgIGlmICh4ID09IFJFUExZX0NP TVBMRVRFKSB7Ci0JCQlmc2l6ZSA9IGNrYXRvZnMoJmZ0cF9yZXBseV9zdHJbNF0pOwotCQkJZ290 c2l6ZSA9IDE7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotCX0KLSAgICAgICAgaWYgKG1kZWwpIHsg ICAgICAgICAgICAgICAgICAgICAvKiBbTV1ERUxFVEUgKi8KLSAgICAgICAgICAgIGlmIChkaXNw bGEgJiYgIWZ0cF92Ym0pCi0gICAgICAgICAgICAgIHByaW50ZigiICVzLi4uIixzKTsKLSAgICAg ICAgICAgIHJjID0KLSAgICAgICAgICAgICAoZnRwY21kKCJERUxFIixzLHhfY3NsLHhfY3NyLGZ0 cF92Ym0pID09IFJFUExZX0NPTVBMRVRFKSA/IDEgOiAtMTsKLSAgICAgICAgICAgIGlmIChyYyA+ IC0xKSB7Ci0gICAgICAgICAgICAgICAgdGxvZyhGMTEwLCJmdHAgbWRlbGV0ZSIscywwKTsKLSAg ICAgICAgICAgICAgICBpZiAoZGlzcGxhICYmICFmdHBfdmJtKQotICAgICAgICAgICAgICAgICAg cHJpbnRmKCJPS1xuIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRs b2coRjExMCwiZnRwIG1kZWxldGUgZmFpbGVkOiIscywwKTsKLSAgICAgICAgICAgICAgICBpZiAo ZGlzcGxhKQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWRcbiIpOwotICAgICAgICAg ICAgfQotI2lmbmRlZiBOT1NQTAotI2lmZGVmIFBJUEVTRU5ECi0gICAgICAgIH0gZWxzZSBpZiAo cmN2ZmlsdGVyKSB7ICAgICAgICAgLyogW01dR0VUIHdpdGggZmlsdGVyICovCi0gICAgICAgICAg ICBpbnQgbjsgY2hhciAqIHA7Ci0gICAgICAgICAgICBuID0gQ0tNQVhQQVRIOwotICAgICAgICAg ICAgcCA9IHRtcGJ1ZjsgICAgICAgICAgICAgICAgIC8qIFNhZmUgLSBubyBhc25hbWUgd2l0aCBm aWx0ZXIgKi8KLSAgICAgICAgICAgIHp6c3RyaW5nKHJjdmZpbHRlciwmcCwmbik7Ci0gICAgICAg ICAgICBpZiAobiA+IC0xKQotICAgICAgICAgICAgICBwbiA9IHRtcGJ1ZjsKLSAgICAgICAgICAg IGRlYnVnKEYxMTEsImZ0cCBnZXQgcmN2ZmlsdGVyIixwbixuKTsKLSNlbmRpZiAvKiBQSVBFU0VO RCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgICBpZiAodG9zY3JlZW4pIHMyID0g Ii0iOwotICAgICAgICB9IGVsc2UgaWYgKHBpcGVzZW5kKSB7ICAgICAgICAgIC8qIFtNXUdFVCAv Q09NTUFORCAqLwotICAgICAgICAgICAgaW50IG47IGNoYXIgKiBwOwotICAgICAgICAgICAgbiA9 IENLTUFYUEFUSDsKLSAgICAgICAgICAgIHAgPSB0bXBidWY7ICAgICAgICAgICAgICAgICAvKiBT YWZlIC0gbm8gYXNuYW1lIHdpdGggZmlsdGVyICovCi0gICAgICAgICAgICB6enN0cmluZyhwaXBl bmFtZSwmcCwmbik7Ci0gICAgICAgICAgICBpZiAobiA+IC0xKQotICAgICAgICAgICAgICBwbiA9 IHRtcGJ1ZjsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgcGlwZW5hbWUiLHBpcGVu YW1lLG4pOwotICAgICAgICAgICAgaWYgKHRvc2NyZWVuKSBzMiA9ICItIjsKLSAgICAgICAgfSBl bHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBbTV1HRVQgd2l0aCBubyBwaXBlcyBvciBm aWx0ZXJzICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHMyIEEiLHMyLHhfY252 KTsKLSAgICAgICAgICAgIGlmICh0b3NjcmVlbikgewotICAgICAgICAgICAgICAgIHMyID0gIi0i OyAgICAgICAgICAgICAgIC8qIChob2tleSBjb252ZW50aW9uIGZvciBzdGRvdXQpICovCi0gICAg ICAgICAgICB9IGVsc2UgaWYgKCEqczIpIHsgICAgICAgICAgLyogTm8gYXNuYW1lPyAqLwotICAg ICAgICAgICAgICAgIGlmICh4X2NudikgeyAgICAgICAgICAgIC8qIElmIGNvbnZlcnRpbmcgKi8K LSAgICAgICAgICAgICAgICAgICAgbnpydG9sKHMsdG1wYnVmLHhfY252LDEsQ0tNQVhQQVRIKTsg LyogY29udmVydCAqLwotICAgICAgICAgICAgICAgICAgICBzMiA9IHRtcGJ1ZjsKLSAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIGdldCBuenJ0b2wiLHMyLDApOwotICAgICAgICAg ICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSAqLwotICAgICAgICAg ICAgICAgICAgczIgPSBzOyAgICAgICAgICAgICAgIC8qIHVzZSBpbmNvbWluZyBmaWxlJ3MgbmFt ZSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIGdldCBzMiBC IixzMiwwKTsKLQotICAgICAgICAgICAgLyogSWYgbG9jYWwgZmlsZSBhbHJlYWR5IGV4aXN0cywg dGFrZSBjb2xsaXNpb24gYWN0aW9uICovCi0KLSAgICAgICAgICAgIGlmICghcGlwZXNlbmQgJiYK LSNpZmRlZiBQSVBFU0VORAotICAgICAgICAgICAgICAgICFyY3ZmaWx0ZXIgJiYKLSNlbmRpZiAv KiBQSVBFU0VORCAqLwotICAgICAgICAgICAgICAgICF0b3NjcmVlbikgewotCQlDS19PRkZfVCB4 OwotICAgICAgICAgICAgICAgIHggPSB6Y2hraShzMik7Ci0gICAgICAgICAgICAgICAgZGVidWco RjExMSwiZnRwIGdldCB6Y2hraSIsczIseCk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwi ZnRwIGdldCB4X2ZuYyIsczIseF9mbmMpOwotCi0gICAgICAgICAgICAgICAgaWYgKHggPiAoQ0tf T0ZGX1QpLTEgJiYgIXJlc3RhcnQpIHsKLQkJICAgIGludCB4ID0gLTE7Ci0JCSAgICBjaGFyICog bmV3bmFtZSA9IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh4X2ZuYykgewot ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlGWF9BOiAgICAgIC8qIEFwcGVuZCAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgYXBwZW5kID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlGWF9SOiAgICAgIC8qIFJlbmFt ZSAqLwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlGWF9COgkvKiBCYWNrdXAgKi8KLQkJ CXpuZXduKHMyLCZuZXduYW1lKTsgLyogTWFrZSB1bmlxdWUgbmFtZSAqLwotCQkJZGVidWcoRjEx MCwiZnRwIGdldCB6bmV3biIsbmV3bmFtZSwwKTsKLQkJCWlmICh4X2ZuYyA9PSBYWUZYX0IpIHsg LyogQmFja3VwIGV4aXN0aW5nIGZpbGUgKi8KLQkJCSAgICB4ID0genJlbmFtZShzMixuZXduYW1l KTsKLQkJCSAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IGJhY2t1cCB6cmVuYW1lIixuZXduYW1lLHgp OwotCQkJfSBlbHNlIHsgICAgICAvKiBSZW5hbWUgaW5jb21pbmcgZmlsZSAqLwotCQkJICAgIHgg PSBja3N0cm5jcHkodG1wYnVmLG5ld25hbWUsQ0tNQVhQQVRIKzEpOwotCQkJICAgIHMyID0gdG1w YnVmOwotCQkJICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgcmVuYW1lIGluY29taW5nIixuZXduYW1l LHgpOwotCQkJfQotCQkJaWYgKHggPCAwKSB7Ci0JCQkgICAgZnRzY3JlZW4oU0NSX0VNLDAsKENL X09GRl9UKTAsCi0JCQkJICAgICAiQmFja3VwL1JlbmFtZSBmYWlsZWQiKTsKLQkJCSAgICB4ID0g MDsKLQkJCSAgICBnb3RvIHhnZXR4OwotCQkJfQotCQkJYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICAgICAgY2FzZSBYWUZYX0Q6ICAgICAgLyogRGlzY2FyZCAoYWxyZWFkeSBoYW5kbGVkIGFib3Zl KSAqLwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlGWF9VOiAgICAgIC8qIFVwZGF0ZSAo ZGl0dG8pICovCi0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWUZYX006ICAgICAgLyogVXBk YXRlIChkaXR0bykgKi8KLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhZRlhfWDogICAgICAv KiBPdmVyd3JpdGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9 Ci0gICAgICAgIGlmICghbWRlbCkgewotI2lmZGVmIFBJUEVTRU5ECi0gICAgICAgICAgICBkZWJ1 ZyhGMTExLCJmdHAgZ2V0IHBuIixwbixyY3ZmaWx0ZXIgPyAxIDogMCk7Ci0jZW5kaWYgLyogUElQ RVNFTkQgKi8KLSAgICAgICAgICAgIGlmIChwaXBlc2VuZCAmJiAhdG9zY3JlZW4pCi0gICAgICAg ICAgICAgIHMyID0gTlVMTDsKLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgaWYgKGRlYmxvZykg ewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXQgeF94bGEiLCIiLHhfeGxhKTsK LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgZ2V0IHhfY3NsIiwiIix4X2NzbCk7Ci0g ICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGdldCB4X2NzciIsIiIseF9jc3IpOwotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXQgYXBwZW5kIiwiIixhcHBlbmQpOwotICAg ICAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICAgICAgICAgIHJjID0gZ2V0Zmls ZShzLHMyLHJlc3RhcnQsYXBwZW5kLHBuLHhfeGxhLHhfY3NsLHhfY3NyKTsKLQotI2lmZGVmIERF QlVHCi0gICAgICAgICAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEx MSwiZnRwIGdldCByYyIscyxyYyk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIGdl dCBmdHBfdGltZWRfb3V0IixzLGZ0cF90aW1lZF9vdXQpOwotICAgICAgICAgICAgICAgIGRlYnVn KEYxMTEsImZ0cCBnZXQgY2FuY2VsZmlsZSIscyxjYW5jZWxmaWxlKTsKLSAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IGNhbmNlbGdyb3VwIixzLGNhbmNlbGdyb3VwKTsKLSAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHJlbmFtaW5nIixzLHJlbmFtaW5nKTsKLSAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IG1vdmluZyIscyxtb3ZpbmcpOwotICAg ICAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgIH0KLSAgICAgICAgaWYgKHJj ID4gLTEpIHsKLSAgICAgICAgICAgIGdvb2QrKzsKLSAgICAgICAgICAgIHN0YXR1cyA9IDE7Ci0g ICAgICAgICAgICBpZiAoIWNhbmNlbGZpbGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGVsZXRp bmcpIHsgICAgICAgICAvKiBHRVQgL0RFTEVURSAoc291cmNlIGZpbGUpICovCi0gICAgICAgICAg ICAgICAgICAgIHJjID0KLSAgICAgICAgICAgICAgICAgICAgICAoZnRwY21kKCJERUxFIixzLHhf Y3NsLHhfY3NyLGZ0cF92Ym0pID09IFJFUExZX0NPTVBMRVRFKQotICAgICAgICAgICAgICAgICAg ICAgICAgPyAxIDogLTE7Ci0gICAgICAgICAgICAgICAgICAgIHRsb2coRjExMCwgKHJjID4gLTEp ID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAiIGRlbGV0ZWQiIDogIiBmYWlsZWQgdG8gZGVs ZXRlIiwgcywgMCk7Ci0gICAgICAgICAgICAgICAgfQotCQlpZiAocmVuYW1pbmcgJiYgcmN2X3Jl bmFtZSAmJiAhdG9zY3JlZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciAqcDsgICAgICAg ICAgICAvKiBSZW5hbWUgZG93bmxvYWRlZCBmaWxlICovCi0jaWZuZGVmIE5PU1BMCi0gICAgICAg ICAgICAgICAgICAgIGNoYXIgdG1wYnVmW0NLTUFYUEFUSCsxXTsKLSAgICAgICAgICAgICAgICAg ICAgaW50IG47Ci0gICAgICAgICAgICAgICAgICAgIG4gPSBDS01BWFBBVEg7Ci0gICAgICAgICAg ICAgICAgICAgIHAgPSB0bXBidWY7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0 cCBnZXQgL3JlbmFtZSIscmN2X3JlbmFtZSwwKTsKLSAgICAgICAgICAgICAgICAgICAgenpzdHJp bmcocmN2X3JlbmFtZSwmcCwmbik7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0 cCBnZXQgL3JlbmFtZSIscmN2X3JlbmFtZSwwKTsKLSAgICAgICAgICAgICAgICAgICAgcCA9IHRt cGJ1ZjsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHAgPSByY3ZfcmVuYW1lOwotI2VuZGlm IC8qIE5PU1BMICovCi0gICAgICAgICAgICAgICAgICAgIHJjID0gKHpyZW5hbWUoczIscCkgPCAw KSA/IC0xIDogMTsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZG9mdHBnZXQgL1JF TkFNRSB6cmVuYW1lIixwLHJjKTsKLSAgICAgICAgICAgICAgICAgICAgdGxvZyhGMTEwLCAocmMg PiAtMSkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICIgcmVuYW1lZCB0byIgOgotICAgICAg ICAgICAgICAgICAgICAgICAgICIgZmFpbGVkIHRvIHJlbmFtZSB0byIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAwCi0gICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vdmluZyAmJiByY3Zf bW92ZSAmJiAhdG9zY3JlZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciAqcDsgICAgICAg ICAgICAvKiBNb3ZlIGRvd25sb2FkZWQgZmlsZSAqLwotI2lmbmRlZiBOT1NQTAotICAgICAgICAg ICAgICAgICAgICBjaGFyIHRtcGJ1ZltDS01BWFBBVEgrMV07Ci0gICAgICAgICAgICAgICAgICAg IGludCBuOwotICAgICAgICAgICAgICAgICAgICBuID0gVE1QQlVGU0laOwotICAgICAgICAgICAg ICAgICAgICBwID0gdG1wYnVmOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAg Z2V0IC9tb3ZlLXRvIixyY3ZfbW92ZSwwKTsKLSAgICAgICAgICAgICAgICAgICAgenpzdHJpbmco cmN2X21vdmUsJnAsJm4pOwotICAgICAgICAgICAgICAgICAgICBwID0gdG1wYnVmOwotI2Vsc2UK LSAgICAgICAgICAgICAgICAgICAgcCA9IHJjdl9tb3ZlOwotI2VuZGlmIC8qIE5PU1BMICovCi0g ICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgL21vdmUtdG8iLHAsMCk7Ci0g ICAgICAgICAgICAgICAgICAgIHJjID0gKHpyZW5hbWUoczIscCkgPCAwKSA/IC0xIDogMTsKLSAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZG9mdHBnZXQgL01PVkUgenJlbmFtZSIscCxy Yyk7Ci0gICAgICAgICAgICAgICAgICAgIHRsb2coRjExMCwgKHJjID4gLTEpID8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAiIG1vdmVkIHRvIiA6ICIgZmFpbGVkIHRvIG1vdmUgdG8iLCBwLCAw KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHB2W1NORF9TUk5dLml2 YWwgPiAwICYmIHB2W1NORF9TUk5dLnN2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciAq IHMgPSBwdltTTkRfU1JOXS5zdmFsOwotICAgICAgICAgICAgICAgICAgICBjaGFyICogc3J2cm4g PSBwdltTTkRfU1JOXS5zdmFsOwotICAgICAgICAgICAgICAgICAgICBjaGFyIHRtcGJ1ZltDS01B WFBBVEgrMV07Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICAgICAgICAgIGludCB5OyAgICAg ICAgICAgICAgLyogUGFzcyBpdCB0aHJ1IHRoZSBldmFsdWF0b3IgKi8KLSAgICAgICAgICAgICAg ICAgICAgZXh0ZXJuIGludCBjbWRfcXVvdGluZzsgLyogZm9yIFx2KGZpbGVuYW1lKSAqLwotICAg ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHNydl9yZW5hbSIscywxKTsKLQot ICAgICAgICAgICAgICAgICAgICBpZiAoY21kX3F1b3RpbmcpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHkgPSBDS01BWFBBVEg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzID0gKGNoYXIg Kil0bXBidWY7Ci0gICAgICAgICAgICAgICAgICAgICAgICB6enN0cmluZyhzcnZybiwmcywmeSk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBzID0gKGNoYXIgKil0bXBidWY7Ci0gICAgICAgICAg ICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJmdHAgZ2V0IHNydl9yZW5hbSIscywxKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg KHMpIGlmICgqcykgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgICAg ICAgICAgICAgICAgICB4ID0gZnRwX3JlbmFtZShzMixzKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgZnRwX3JlbmFtZSIsczIseCk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICB0bG9nKEYxMTAsICh4ID4gMCkgPwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiIHJlbmFtZWQgc291cmNlIGZpbGUgdG8iIDoKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIiBmYWlsZWQgdG8gcmVuYW1lIHNvdXJjZSBmaWxlIHRvIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgg PCAxKQotCQkJICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChjYW5jZWxmaWxl KQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgICAg ICBmdHBfZmFpKys7Ci0jaWZkZWYgRlRQX1RJTUVPVVQKLQkgICAgZGVidWcoRjEwMSwiZnRwIGdl dCBmdHBfdGltZWRfb3V0IiwiIixmdHBfdGltZWRfb3V0KTsKLQkgICAgaWYgKGZ0cF90aW1lZF9v dXQpIHsKLQkJc3RhdHVzID0gMDsKLSAgICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfRU0sMCwo Q0tfT0ZGX1QpMCwiR0VUIHRpbWVkIG91dCIpOwotCSAgICB9Ci0jZW5kaWYJLyogRlRQX1RJTUVP VVQgKi8KLSAgICAgICAgICAgIGlmIChnZXRlcnJvcikgewotICAgICAgICAgICAgICAgIHN0YXR1 cyA9IDA7Ci0gICAgICAgICAgICAgICAgZnRzY3JlZW4oU0NSX0VNLDAsKENLX09GRl9UKTAsIkZh dGFsIGRvd25sb2FkIGVycm9yIik7Ci0gICAgICAgICAgICAgICAgZG9uZSsrOwotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgfQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewot CWRlYnVnKEYxMDEsImZ0cCBnZXQgc3RhdHVzIiwiIixzdGF0dXMpOwotCWRlYnVnKEYxMDEsImZ0 cCBnZXQgY2FuY2VsZ3JvdXAiLCIiLGNhbmNlbGdyb3VwKTsKLQlkZWJ1ZyhGMTAxLCJmdHAgZ2V0 IGNhbmNlbGZpbGUiLCIiLGNhbmNlbGZpbGUpOwotCWRlYnVnKEYxMDEsImZ0cCBnZXQgc2VsZWN0 ZWQiLCIiLHNlbGVjdGVkKTsKLQlkZWJ1ZyhGMTAxLCJmdHAgZ2V0IGdvb2QiLCIiLGdvb2QpOwot ICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0gICAgaWYgKHNlbGVjdGVkID09IDApIHsJCS8q IE5vIGZpbGVzIG1ldCBzZWxlY3Rpb24gY3JpdGVyaWEgKi8KLQlzdGF0dXMgPSAxOwkJCS8qIHdo aWNoIGlzIGEga2luZCBvZiBzdWNjZXNzLiAqLwotICAgIH0gZWxzZSBpZiAoc3RhdHVzID4gMCkg ewkJLyogU29tZSBmaWxlcyB3ZXJlIHNlbGVjdGVkICovCi0gICAgICAgIGlmIChjYW5jZWxncm91 cCkJCS8qIGJ1dCBNR0VUIHdhcyBjYW5jZWxlZCAqLwotICAgICAgICAgIHN0YXR1cyA9IDA7CQkJ Lyogc28gTUdFVCBmYWlsZWQgKi8KLSAgICAgICAgZWxzZSBpZiAoY2FuY2VsZmlsZSAmJiBnb29k IDwgMSkgLyogSWYgZmlsZSB3YXMgY2FuY2VsZWQgKi8KLSAgICAgICAgICBzdGF0dXMgPSAwOwkJ CS8qIE1HRVQgZmFpbGVkIGlmIGl0IGdvdCBubyBmaWxlcyAqLwotICAgIH0KLSAgICBzdWNjZXNz ID0gc3RhdHVzOwotICAgIHggPSBzdWNjZXNzOwotICAgIGRlYnVnKEYxMDEsImZ0cCBnZXQgc3Vj Y2VzcyIsIiIsc3VjY2Vzcyk7Ci0KLSAgeGdldHg6Ci0gICAgcGlwZXNlbmQgPSBwaXBlc2F2ZTsg ICAgICAgICAgICAgICAgLyogUmVzdG9yZSBnbG9iYWwgcGlwZSBzZWxlY3Rpb24gKi8KLSAgICBp ZiAoZnBfbm1sKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSAvTkFNRUxJU1QgKi8K LSAgICAgICAgaWYgKGZwX25tbCAhPSBzdGRvdXQpCi0gICAgICAgICAgZmNsb3NlKGZwX25tbCk7 Ci0gICAgICAgIGZwX25tbCA9IE5VTEw7Ci0gICAgfQotICAgIGlmICgKLSNpZmRlZiBDT01NRU5U Ci0JeCA+IC0xCi0jZWxzZQotCXN1Y2Nlc3MKLSNlbmRpZgkvKiBDT01NRU5UICovCi0JKSB7CQkJ CS8qIERvd25sb2FkIHN1Y2Nlc3NmdWwgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgIHQxID0g Z21zdGltZXIoKTsgICAgICAgICAgICAgICAgLyogRW5kIHRpbWUgKi8KLSAgICAgICAgc2VjID0g KENLRkxPQVQpKChDS0ZMT0FUKSh0MSAtIHQwKSAvIDEwMDAuMCk7IC8qIFN0YXRzICovCi0gICAg ICAgIGlmICghc2VjKSBzZWMgPSAwLjAwMTsKLSAgICAgICAgZnB0c2VjcyA9IHNlYzsKLSNlbHNl Ci0gICAgICAgIHNlYyA9ICh0MSAtIHQwKSAvIDEwMDA7Ci0gICAgICAgIGlmICghc2VjKSBzZWMg PSAxOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICAgICAgdGZjcHMgPSAobG9uZykgKHRmYyAv IHNlYyk7Ci0gICAgICAgIHRzZWNzID0gKGludClzZWM7Ci0gICAgICAgIGxhc3R4ZmVyID0gV19G VFB8V19SRUNWOwotICAgICAgICB4ZmVyc3RhdCA9IHN1Y2Nlc3M7Ci0gICAgfQotICAgIGlmIChk cHlhY3RpdmUpCi0gICAgICBmdHNjcmVlbihzdWNjZXNzID4gMCA/IFNDUl9UQyA6IFNDUl9DVywg MCwgKENLX09GRl9UKTAsICIiKTsKLSNpZmRlZiBDS19UTVBESVIKLSAgICBpZiAoZl90bXBkaXIp IHsgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBjaGFuZ2VkIHRvIGRvd25sb2FkIGRpciAq LwotICAgICAgICB6Y2hkaXIoKGNoYXIgKikgc2F2ZGlyKTsgICAgICAgIC8qIEdvIGJhY2sgd2hl cmUgd2UgY2FtZSBmcm9tICovCi0gICAgICAgIGZfdG1wZGlyID0gMDsKLSAgICB9Ci0jZW5kaWYg LyogQ0tfVE1QRElSICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDw9IFNORF9NQVg7IGkrKykgeyAg ICAvKiBGcmVlIG1hbGxvYydkIG1lbW9yeSAqLwotICAgICAgICBpZiAocHZbaV0uc3ZhbCkKLSAg ICAgICAgICBmcmVlKHB2W2ldLnN2YWwpOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbWdl dG47IGkrKykgICAgICAgICAvKiBNR0VUIGxpc3QgdG9vICovCi0gICAgICBtYWtlc3RyKCYobWdl dGxpc3RbaV0pLE5VTEwpOwotCi0gICAgaWYgKGNhbmNlbGdyb3VwKQkJCS8qIENsZWFyIHRlbXAt ZmlsZSBzdGFjayAqLwotICAgICAgbWxzcmVzZXQoKTsKLQotICAgIGZ0cmVzZXQoKTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFVuZG8gc3dpdGNoIGVmZmVjdHMgKi8KLSAgICBkcHlhY3Rp dmUgPSAwOwotICAgIHJldHVybih4KTsKLX0KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZnRwcm10 W10gPSB7Ci0gICAgeyAiY2QiLCAgICAgICAgWFpDV0QsIDAgfSwKLSAgICB7ICJjZHVwIiwgICAg ICBYWkNEVSwgMCB9LAotICAgIHsgImN3ZCIsICAgICAgIFhaQ1dELCBDTV9JTlYgfSwKLSAgICB7 ICJkZWxldGUiLCAgICBYWkRFTCwgMCB9LAotICAgIHsgImRpcmVjdG9yeSIsIFhaRElSLCAwIH0s Ci0gICAgeyAiZXhpdCIsICAgICAgWFpYSVQsIDAgfSwKLSAgICB7ICJoZWxwIiwgICAgICBYWkhM UCwgMCB9LAotICAgIHsgImxvZ2luIiwgICAgIFhaTEdJLCAwIH0sCi0gICAgeyAibG9nb3V0Iiwg ICAgWFpMR08sIDAgfSwKLSAgICB7ICJta2RpciIsICAgICBYWk1LRCwgMCB9LAotICAgIHsgInB3 ZCIsICAgICAgIFhaUFdELCAwIH0sCi0gICAgeyAicmVuYW1lIiwgICAgWFpSRU4sIDAgfSwKLSAg ICB7ICJybWRpciIsICAgICBYWlJNRCwgMCB9LAotICAgIHsgInR5cGUiLCAgICAgIFhaVFlQLCAw IH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuZnRwcm10ID0gKHNpemVvZihm dHBybXQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLWludAotZG9mdHBzaXRlKCkg ewkJCQkvKiBTZW5kIGEgU0lURSBjb21tYW5kICovCi0gICAgaW50IHJlcGx5OwotICAgIGNoYXIg KiBzOwotICAgIGludCBsY3MgPSAtMSwgcmNzID0gLTE7Ci0gICAgaW50IHNhdmVfdmJtID0gZnRw X3ZibTsKLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgaWYgKGZ0cF94bGEpIHsKLSAgICAgICAgbGNz ID0gZnRwX2NzbDsKLSAgICAgICAgaWYgKGxjcyA8IDApIGxjcyA9IGZjaGFyc2V0OwotICAgICAg ICByY3MgPSBmdHBfY3N4OwotICAgICAgICBpZiAocmNzIDwgMCkgcmNzID0gZnRwX2NzcjsKLSAg ICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIGlmICgoeCA9IGNtdHh0KCJDb21tYW5kIiwg IiIsICZzLCB4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICBDSEVDS0NPTk4o KTsKLSAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgaWYgKHRlc3RpbmcpIHBy aW50ZigiIGZ0cCBzaXRlIFwiJXNcIi4uLlxuIixsaW5lKTsKLSAgICBpZiAoIWZ0cF92Ym0pCi0g ICAgICAgIGZ0cF92Ym0gPSAhY2tzdHJjbXAoIkhFTFAiLGxpbmUsNCwwKTsKLSAgICBpZiAoKHJl cGx5ID0gZnRwY21kKCJTSVRFIixsaW5lLGxjcyxyY3MsZnRwX3ZibSkpID09IFJFUExZX1BSRUxJ TSkgewotCWRvIHsKLQkgICAgcmVwbHkgPSBnZXRyZXBseSgwLGxjcyxyY3MsZnRwX3ZibSwwKTsK LQl9IHdoaWxlIChyZXBseSA9PSBSRVBMWV9QUkVMSU0pOwotICAgIH0KLSAgICBmdHBfdmJtID0g c2F2ZV92Ym07Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAocmVwbHkgPT0gUkVQTFlfQ09NUExFVEUp KTsKLX0KLQotCi1pbnQKLWRvc2V0ZnRwcHN2KCkgewkJCQkvKiBQYXNzaXZlIG1vZGUgKi8KLSAg ICB4ID0gc2V0b24oJmZ0cF9wc3YpOwotICAgIGlmICh4ID4gMCkgcGFzc2l2ZW1vZGUgPSBmdHBf cHN2OwotICAgIHJldHVybih4KTsKLX0KLQotLyogIGQgbyBmIHQgcCByIG0gdCAgLS0gIFBhcnNl IGFuZCBleGVjdXRlIFJFTU9URSBjb21tYW5kcyAgKi8KLQotaW50Ci1kb2Z0cHJtdChjeCx3aG8p IGludCBjeCwgd2hvOyB7ICAgICAgICAgLyogd2hvID09IDEgZm9yIGZ0cCwgMCBmb3Iga2VybWl0 ICovCi0gICAgLyogY3ggPT0gMCBtZWFucyBSRU1PVEUgKi8KLSAgICAvKiBjeCAhPSAwIGlzIGEg WFp4eHggdmFsdWUgKi8KLSAgICBjaGFyICogczsKLQotICAgIGlmICh3aG8gIT0gMCkKLSAgICAg IHJldHVybigwKTsKLQotICAgIGlmIChjeCA9PSAwKSB7Ci0gICAgICAgIGlmICgoeCA9IGNta2V5 KGZ0cHJtdCxuZnRwcm10LCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgY3ggPSB4OwotICAgIH0KLSAgICBzd2l0Y2ggKGN4KSB7Ci0gICAgICBjYXNl IFhaQ0RVOiAgICAgICAgICAgICAgICAgICAgICAgLyogQ0RVUCAqLwotICAgICAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgcmV0dXJuKGRvZnRwY2R1cCgpKTsK LQotICAgICAgY2FzZSBYWkNXRDogICAgICAgICAgICAgICAgICAgICAgIC8qIFJDRCAqLwotICAg ICAgICBpZiAoKHggPSBjbXR4dCgiUmVtb3RlIGRpcmVjdG9yeSIsICIiLCAmcywgeHhzdHJpbmcp KSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBja3N0cm5jcHkobGluZSxzLExJ TkJVRlNJWik7Ci0JcyA9IGJyc3RyaXAobGluZSk7Ci0gICAgICAgIHJldHVybihkb2Z0cGN3ZChz LDEpKTsKLSAgICAgIGNhc2UgWFpQV0Q6ICAgICAgICAgICAgICAgICAgICAgICAvKiBSUFdEICov Ci0gICAgICAgIHJldHVybihkb2Z0cHB3ZCgpKTsKLSAgICAgIGNhc2UgWFpERUw6ICAgICAgICAg ICAgICAgICAgICAgICAvKiBSREVMICovCi0gICAgICAgIHJldHVybihkb2Z0cGdldChGVFBfTURF LDEpKTsKLSAgICAgIGNhc2UgWFpESVI6ICAgICAgICAgICAgICAgICAgICAgICAvKiBSRElSICov Ci0gICAgICAgIHJldHVybihkb2Z0cGRpcihGVFBfRElSKSk7Ci0gICAgICBjYXNlIFhaSExQOiAg ICAgICAgICAgICAgICAgICAgICAgLyogUkhFTFAgKi8KLSAgICAgICAgcmV0dXJuKGRvZnRweGhs cCgpKTsKLSAgICAgIGNhc2UgWFpNS0Q6ICAgICAgICAgICAgICAgICAgICAgICAvKiBSTUtESVIg Ki8KLSAgICAgICAgcmV0dXJuKGRvZnRwbWtkKCkpOwotICAgICAgY2FzZSBYWlJFTjogICAgICAg ICAgICAgICAgICAgICAgIC8qIFJSRU5BTUUgKi8KLSAgICAgICAgcmV0dXJuKGRvZnRwcmVuKCkp OwotICAgICAgY2FzZSBYWlJNRDogICAgICAgICAgICAgICAgICAgICAgIC8qIFJSTURJUiAqLwot ICAgICAgICByZXR1cm4oZG9mdHBybWQoKSk7Ci0gICAgICBjYXNlIFhaTEdPOiAgICAgICAgICAg ICAgICAgICAgICAgLyogTE9HT1VUICovCi0gICAgICAgIHJldHVybihkb2Z0cHJlcygpKTsKLSAg ICAgIGNhc2UgWFpYSVQ6ICAgICAgICAgICAgICAgICAgICAgICAvKiBFWElUICovCi0gICAgICAg IHJldHVybihmdHBieWUoKSk7Ci0gICAgfQotICAgIHByaW50ZigiP05vdCB1c2FibGUgd2l0aCBG VFAgLSBcIiVzXCJcbiIsIGF0bWJ1Zik7Ci0gICAgcmV0dXJuKC05KTsKLX0KLQotaW50Ci1kb3hm dHAoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBwYXJzZXIgZm9y IGJ1aWx0LWluIEZUUCAqLwotICAgIGludCBjeCwgbjsKLSAgICBzdHJ1Y3QgRkRCIGt3LCBmbDsK LSAgICBjaGFyICogczsKLSAgICBpbnQgdXNldGxzID0gMDsKLSAgICBpbnQgbGNzID0gLTEsIHJj cyA9IC0xOwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICBpZiAoZnRwX3hsYSkgewotICAgICAgICBs Y3MgPSBmdHBfY3NsOwotICAgICAgICBpZiAobGNzIDwgMCkgbGNzID0gZmNoYXJzZXQ7Ci0gICAg ICAgIHJjcyA9IGZ0cF9jc3g7Ci0gICAgICAgIGlmIChyY3MgPCAwKSByY3MgPSBmdHBfY3NyOwot ICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSAgICBpZiAoaW5zZXJ2ZXIpICAgICAgICAg ICAgICAgICAgICAgICAvKiBGVFAgbm90IGFsbG93ZWQgaW4gSUtTRC4gKi8KLSAgICAgIHJldHVy bigtMik7Ci0KLSAgICBpZiAoZ19mdHBfdHlwID4gLTEpIHsgICAgICAgICAgICAgICAvKiBSZXN0 b3JlIFRZUEUgaWYgc2F2ZWQgKi8KLSAgICAgICAgZnRwX3R5cCA9IGdfZnRwX3R5cDsKLSAgICAg ICAgLyogZ19mdHBfdHlwID0gLTE7ICovCi0gICAgfQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFdl J2xsIHNldCB0aGUgY29sbGlzaW9uIGFjdGlvbiBsb2NhbGx5IGluIGRvZnRwZ2V0KCkgYmFzZWQg b24gd2hldGhlcgotICBmdHBfZm5jIHdhcyBldmVyIHNldCB0byBhIHZhbHVlLiAgaWYgbm90LCB3 ZSdsbCB1c2UgdGhlIGZuY2FjdCB2YWx1ZS4KLSovCi0gICAgaWYgKGZ0cF9mbmMgPCAwKSAgICAg ICAgICAgICAgICAgICAgLyogSW5oZXJpdCBnbG9iYWwgY29sbGlzaW9uIGFjdGlvbiAqLwotICAg ICAgZnRwX2ZuYyA9IGZuY2FjdDsgICAgICAgICAgICAgICAgIC8qIGlmIG5vbmUgc3BlY2lmaWVk IGZvciBGVFAgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAvKiBSZXN0b3JlIGdsb2Jh bCB2ZXJib3NlIG1vZGUgKi8KLSAgICBpZiAoZnRwX2RlYikKLSAgICAgIGZ0cF92Ym0gPSAxOwot ICAgIGVsc2UgaWYgKHF1aWV0KQotICAgICAgZnRwX3ZibSA9IDA7Ci0gICAgZWxzZQotICAgICAg ZnRwX3ZibSA9IGZ0cF92Yng7Ci0KLSAgICBmdHBfZGF0ZXMgJj0gMTsJCQkvKiBVbmRvIGFueSBw cmV2aW91cyAvVVBEQVRFIHN3aXRjaCAqLwotCi0gICAgZHB5YWN0aXZlID0gMDsgICAgICAgICAg ICAgICAgICAgICAgLyogUmVzZXQgZ2xvYmFsIHRyYW5zZmVyLWFjdGl2ZSBmbGFnICovCi0gICAg cHJpbnRsaW5lcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgcHJpbnRsaW5lcyAq LwotCi0gICAgaWYgKGZwX25tbCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgL05B TUVMSVNUICovCi0gICAgICAgIGlmIChmcF9ubWwgIT0gc3Rkb3V0KQotICAgICAgICAgIGZjbG9z ZShmcF9ubWwpOwotICAgICAgICBmcF9ubWwgPSBOVUxMOwotICAgIH0KLSAgICBtYWtlc3RyKCZm dHBfbm1sLE5VTEwpOwotCi0gICAgY21mZGJpKCZrdywgICAgICAgICAgICAgICAgICAgICAgICAg LyogRmlyc3QgRkRCIC0gY29tbWFuZHMgKi8KLSAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAg ICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAiSG9zdG5hbWU7IG9yIEZUUCBjb21t YW5kIiwgIC8qIGhlbHAgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgbmZ0cGNtZCwgICAgICAgICAgICAg ICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLSAgICAgICAgICAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogbm9u ZSAqLwotICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3Np bmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgZnRwY21kdGFiLCAgICAgICAgICAgICAgICAgICAv KiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICZmbCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAgICAgICApOwotICAgIGNtZmRiaSgm ZmwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEEgaG9zdCBuYW1lIG9yIGFkZHJlc3MgKi8K LSAgICAgICAgICAgX0NNRkxELCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAg ICAgICAgICAiSG9zdG5hbWUgb3IgYWRkcmVzcyIsICAgICAgIC8qIGhlbHAgKi8KLSAgICAgICAg ICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAg ICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAg ICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRh dGEgMSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRs IG51bWVyaWMgZGF0YSAyICovCi0gICAgICAgICAgIHh4c3RyaW5nLAotICAgICAgICAgICBOVUxM LAotICAgICAgICAgICBOVUxMCi0gICAgICAgICAgICk7Ci0gICAgeCA9IGNtZmRiKCZrdyk7ICAg ICAgICAgICAgICAgICAgICAgLyogUGFyc2UgYSBob3N0bmFtZSBvciBhIGtleXdvcmQgKi8KLSAg ICBpZiAoeCA9PSAtMykgewotICAgICAgICBwcmludGYoIj9mdHAgd2hhdD8gXCJoZWxwIGZ0cFwi IGZvciBoaW50c1xuIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGlmICh4IDwg MCkKLSAgICAgIHJldHVybih4KTsKLSAgICBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNRkxEKSB7 ICAgICAvKiBJZiBob3N0bmFtZSAqLwotICAgICAgICByZXR1cm4ob3BlbmZ0cChjbXJlc3VsdC5z cmVzdWx0LDApKTsgLyogZ28gb3BlbiB0aGUgY29ubmVjdGlvbiAqLwotICAgIH0gZWxzZSB7Ci0g ICAgICAgIGN4ID0gY21yZXN1bHQubnJlc3VsdDsKLSAgICB9Ci0gICAgc3dpdGNoIChjeCkgewot ICAgICAgY2FzZSBGVFBfQUNDOiAgICAgICAgICAgICAgICAgICAgIC8qIEFDQ09VTlQgKi8KLSAg ICAgICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSBhY2NvdW50IiwgIiIsICZzLCB4eHN0cmluZykp IDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIENIRUNLQ09OTigpOwotICAgICAg ICBtYWtlc3RyKCZmdHBfYWNjLHMpOwotICAgICAgICBpZiAodGVzdGluZykKLSAgICAgICAgICBw cmludGYoIiBmdHAgYWNjb3VudDogXCIlc1wiXG4iLGZ0cF9hY2MpOwotICAgICAgICBzdWNjZXNz ID0gKGZ0cGNtZCgiQUNDVCIsZnRwX2FjYywtMSwtMSxmdHBfdmJtKSA9PSBSRVBMWV9DT01QTEVU RSk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzKTsKLQotICAgICAgY2FzZSBGVFBfR1VQOiAgICAg ICAgICAgICAgICAgICAgIC8qIEdvIFVQICovCi0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOwotICAgICAgICBDSEVDS0NPTk4oKTsKLSAgICAgICAgaWYgKHRlc3Rpbmcp IHByaW50ZigiIGZ0cCBjZDogXCIodXApXCJcbiIpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IGRvZnRwY2R1cCgpKTsKLQotICAgICAgY2FzZSBGVFBfQ1dEOiAgICAgICAgICAgICAgICAgICAg IC8qIENEICovCi0gICAgICAgIGlmICgoeCA9IGNtdHh0KCJSZW1vdGUgZGlyZWN0b3J5IiwgIiIs ICZzLCB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIENIRUNL Q09OTigpOwotICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgICAgIGlm ICh0ZXN0aW5nKQotICAgICAgICAgIHByaW50ZigiIGZ0cCBjZDogXCIlc1wiXG4iLCBsaW5lKTsK LSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBkb2Z0cGN3ZChsaW5lLDEpKTsKLQotICAgICAgY2Fz ZSBGVFBfQ0hNOiAgICAgICAgICAgICAgICAgICAgIC8qIENITU9EICovCi0gICAgICAgIGlmICgo eCA9IGNtZmxkKCJQZXJtaXNzaW9ucyBvciBwcm90ZWN0aW9uIGNvZGUiLCIiLCZzLHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgY2tzdHJuY3B5KHRtcGJ1Zixz LFRNUEJVRlNJWik7Ci0gICAgICAgIGlmICgoeCA9IGNtdHh0KCJSZW1vdGUgZmlsZW5hbWUiLCAi IiwgJnMsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgQ0hF Q0tDT05OKCk7Ci0gICAgICAgIGNrbWFrbXNnKGZ0cGNtZGJ1ZixGVFBfQlVGU0laLHRtcGJ1Ziwi ICIscyxOVUxMKTsKLSAgICAgICAgaWYgKHRlc3RpbmcpCi0gICAgICAgICAgcHJpbnRmKCIgZnRw IGNobW9kOiAlc1xuIixmdHBjbWRidWYpOwotICAgICAgICBzdWNjZXNzID0KLSAgICAgICAgICAo ZnRwY21kKCJTSVRFIENITU9EIixmdHBjbWRidWYsbGNzLHJjcyxmdHBfdmJtKSA9PSBSRVBMWV9D T01QTEVURSk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzKTsKLQotICAgICAgY2FzZSBGVFBfQ0xT OiAgICAgICAgICAgICAgICAgICAgIC8qIENMT1NFIEZUUCBjb25uZWN0aW9uICovCi0gICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIENI RUNLQ09OTigpOwotICAgICAgICBpZiAodGVzdGluZykKLSAgICAgICAgICBwcmludGYoIiBmdHAg Y2xvc2luZy4uLlxuIik7Ci0gICAgICAgIGZ0cGNsb3NlKCk7Ci0gICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7Ci0KLSAgICAgIGNhc2UgRlRQX0RJUjogICAgICAgICAgICAgICAgICAgICAvKiBE SVJFQ1RPUlkgb2YgcmVtb3RlIGZpbGVzICovCi0gICAgICBjYXNlIEZUUF9WREk6Ci0gICAgICAg IHJldHVybihkb2Z0cGRpcihjeCkpOwotCi0gICAgICBjYXNlIEZUUF9HRVQ6ICAgICAgICAgICAg ICAgICAgICAgLyogR0VUIGEgcmVtb3RlIGZpbGUgKi8KLSAgICAgIGNhc2UgRlRQX1JHRTogICAg ICAgICAgICAgICAgICAgICAvKiBSRUdFVCAqLwotICAgICAgY2FzZSBGVFBfTUdFOiAgICAgICAg ICAgICAgICAgICAgIC8qIE1HRVQgKi8KLSAgICAgIGNhc2UgRlRQX01ERTogICAgICAgICAgICAg ICAgICAgICAvKiBNREVMRVRFICovCi0gICAgICAgIHJldHVybihkb2Z0cGdldChjeCwxKSk7Ci0K LSAgICAgIGNhc2UgRlRQX0lETDogICAgICAgICAgICAgICAgICAgICAvKiBJRExFICovCi0gICAg ICAgIGlmICgoeCA9IGNtbnVtKCJOdW1iZXIgb2Ygc2Vjb25kcyIsIi0xIiwxMCwmeix4eHN0cmlu ZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkp IDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIENIRUNLQ09OTigpOwotICAgICAg ICBpZiAoeiA8IDApICB7ICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgaWRsZSB0aW1lb3V0 ICovCi0gICAgICAgICAgICBpZiAodGVzdGluZykKLSAgICAgICAgICAgICAgcHJpbnRmKCIgZnRw IHF1ZXJ5IGlkbGUgdGltZW91dC4uLlxuIik7Ci0gICAgICAgICAgICBzdWNjZXNzID0gKGZ0cGNt ZCgiU0lURSBJRExFIixOVUxMLDAsMCwxKSA9PSBSRVBMWV9DT01QTEVURSk7Ci0gICAgICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGlkbGUgdGltZW91dCAqLwotICAg ICAgICAgICAgaWYgKHRlc3RpbmcpCi0gICAgICAgICAgICAgIHByaW50ZigiIGZ0cCBpZGxlIHRp bWVvdXQgc2V0OiAlZC4uLlxuIix6KTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPQotICAgICAgICAg ICAgICAoZnRwY21kKCJTSVRFIElETEUiLGNraXRvYSh6KSwwLDAsMSkgPT0gUkVQTFlfQ09NUExF VEUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybihzdWNjZXNzKTsKLQotICAgICAgY2FzZSBG VFBfTUtEOiAgICAgICAgICAgICAgICAgICAgIC8qIE1LRElSICovCi0gICAgICAgIHJldHVybihk b2Z0cG1rZCgpKTsKLQotICAgICAgY2FzZSBGVFBfTU9EOiAgICAgICAgICAgICAgICAgICAgIC8q IE1PRFRJTUUgKi8KLSAgICAgICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSBmaWxlbmFtZSIsICIi LCAmcywgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBDSEVD S0NPTk4oKTsKLSAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotICAgICAgICBp ZiAodGVzdGluZykKLSAgICAgICAgICBwcmludGYoIiBmdHAgbW9kdGltZSBcIiVzXCIuLi5cbiIs bGluZSk7Ci0gICAgICAgIHN1Y2Nlc3MgPSAwOwotICAgICAgICBpZiAoZnRwY21kKCJNRFRNIixs aW5lLGxjcyxyY3MsZnRwX3ZibSkgPT0gUkVQTFlfQ09NUExFVEUpIHsKLQkgICAgc3VjY2VzcyA9 IDE7Ci0JICAgIG1kdG1vayA9IDE7Ci0JICAgIGlmICghcXVpZXQpIHsKLQkJaW50IGZsYWcgPSAw OwotCQljaGFyIGMsICogczsKLQkJc3RydWN0IHRtIHRtcmVtb3RlOwotCi0JCWJ6ZXJvKChjaGFy ICopJnRtcmVtb3RlLCBzaXplb2Yoc3RydWN0IHRtKSk7Ci0JCXMgPSBmdHBfcmVwbHlfc3RyOwot CQl3aGlsZSAoKGMgPSAqcysrKSkgewotCQkgICAgaWYgKGMgPT0gU1ApIHsKLQkJCWZsYWcrKzsK LQkJCWJyZWFrOwotCQkgICAgfQotCQl9Ci0JCWlmIChmbGFnKSB7Ci0JCSAgICBpZiAoc3NjYW5m KHMsICIlMDRkJTAyZCUwMmQlMDJkJTAyZCUwMmQiLAotCQkJICAgICAgICZ0bXJlbW90ZS50bV95 ZWFyLAotCQkJICAgICAgICZ0bXJlbW90ZS50bV9tb24sCi0JCQkgICAgICAgJnRtcmVtb3RlLnRt X21kYXksCi0JCQkgICAgICAgJnRtcmVtb3RlLnRtX2hvdXIsCi0JCQkgICAgICAgJnRtcmVtb3Rl LnRtX21pbiwKLQkJCSAgICAgICAmdG1yZW1vdGUudG1fc2VjCi0JCQkgICAgICAgKSA9PSA2KSB7 Ci0JCQlwcmludGYoIiAlcyAlMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6JTAyZCBHTVRcbiIsCi0J CQkgICAgICAgbGluZSwKLQkJCSAgICAgICB0bXJlbW90ZS50bV95ZWFyLAotCQkJICAgICAgIHRt cmVtb3RlLnRtX21vbiwKLQkJCSAgICAgICB0bXJlbW90ZS50bV9tZGF5LAotCQkJICAgICAgIHRt cmVtb3RlLnRtX2hvdXIsCi0JCQkgICAgICAgdG1yZW1vdGUudG1fbWluLAotCQkJICAgICAgIHRt cmVtb3RlLnRtX3NlYwotCQkJICAgICAgICk7Ci0JCSAgICB9IGVsc2UgewotCQkJc3VjY2VzcyA9 IDA7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybihzdWNj ZXNzKTsKLQotICAgICAgY2FzZSBGVFBfT1BOOiAgICAgICAgICAgICAgICAgICAgIC8qIE9QRU4g Y29ubmVjdGlvbiAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgeCA9IGNtZmxkKCJJUCBob3N0 bmFtZSBvciBhZGRyZXNzIiwiIiwmcyx4eHN0cmluZyk7Ci0gICAgICAgIGlmICh4IDwgMCkgewot ICAgICAgICAgICAgc3VjY2VzcyA9IDA7Ci0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAg IH0KLSAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotICAgICAgICBzID0gbGlu ZTsKLSAgICAgICAgcmV0dXJuKG9wZW5mdHAocywwKSk7Ci0jZWxzZQotICAgICAgICB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9QRU4gY29ubmVjdGlvbiAqLwotICAgICAgICAg ICAgY2hhciBuYW1lW1RUTkFNTEVOKzFdLCAqcDsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgbmV0 d29yazsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyIHR0bmFtZVtdOwotICAgICAgICAgICAgaWYg KG5ldHdvcmspICAgICAgICAgICAgICAgIC8qIElmIHdlIGhhdmUgYSBjdXJyZW50IGNvbm5lY3Rp b24gKi8KLSAgICAgICAgICAgICAgY2tzdHJuY3B5KG5hbWUsdHRuYW1lLExJTkJVRlNJWik7IC8q IGdldCB0aGUgaG9zdCBuYW1lICovCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICpu YW1lID0gJ1wwJzsgICAgICAgICAgICAgLyogYXMgZGVmYXVsdCBob3N0ICovCi0gICAgICAgICAg ICBmb3IgKHAgPSBuYW1lOyAqcDsgcCsrKSAgICAgLyogUmVtb3ZlICI6c2VydmljZSIgZnJvbSBl bmQuICovCi0gICAgICAgICAgICAgIGlmICgqcCA9PSAnOicpIHsgKnAgPSAnXDAnOyBicmVhazsg fQotI2lmbmRlZiBVU0VUTFNUQUIKLSAgICAgICAgICAgIHggPSBjbWZsZCgiSVAgaG9zdG5hbWUg b3IgYWRkcmVzcyIsbmFtZSwmcyx4eHN0cmluZyk7Ci0jZWxzZQotICAgICAgICAgICAgY21mZGJp KCZrdywgICAgICAgICAgICAgICAgIC8qIEZpcnN0IEZEQiAtIGNvbW1hbmRzICovCi0gICAgICAg ICAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAg ICAgICAgICAiSG9zdG5hbWUgb3Igc3dpdGNoIiwgLyogaGVscCAqLwotICAgICAgICAgICAgICAg ICAgICIiLCAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAg ICAiIiwgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAg ICAgICAgICAgIG50bHN0YWIsICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0 Ymwgc2l6ZSAqLwotICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgIC8qIGFk ZHRsIG51bWVyaWMgZGF0YSAyOiBub25lICovCi0gICAgICAgICAgICAgICAgICAgeHhzdHJpbmcs ICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAgICAg IHRsc3RhYiwgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgICAg ICAgICAmZmwgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAg ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAg ICAvKiBBIGhvc3QgbmFtZSBvciBhZGRyZXNzICovCi0gICAgICAgICAgICAgICAgICAgX0NNRkxE LCAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgICAgICAgICAiSG9zdG5hbWUg b3IgYWRkcmVzcyIsIC8qIGhlbHAgKi8KLSAgICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAwLCAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotICAgICAgICAgICAgICAg ICAgIDAsICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0gICAg ICAgICAgICAgICAgICAgeHhzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAg ICAgICAgICAgICAgICBOVUxMCi0gICAgICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAgICAg Zm9yIChuID0gMDs7IG4rKykgewotICAgICAgICAgICAgICAgIHggPSBjbWZkYigma3cpOyAgICAg ICAgIC8qIFBhcnNlIGEgaG9zdG5hbWUgb3IgYSBrZXl3b3JkICovCi0gICAgICAgICAgICAgICAg aWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiP2Z0cCBvcGVuIHdoYXQ/ IFwiaGVscCBmdHBcIiBmb3IgaGludHNcbiIpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKC05 KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHggPCAwKQotICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlID09 IF9DTUZMRCkgeyAvKiBIb3N0bmFtZSAqLwotICAgICAgICAgICAgICAgICAgICBzID0gY21yZXN1 bHQuc3Jlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg fSBlbHNlIGlmIChjbXJlc3VsdC5ucmVzdWx0ID09IE9QTl9UTFMpIHsKLSAgICAgICAgICAgICAg ICAgICAgdXNldGxzID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5k aWYgLyogVVNFVExTVEFCICovCi0gICAgICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgICAg ICAgICBzdWNjZXNzID0gMDsKLSAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgICAgICAg ICBzID0gbGluZTsKLSAgICAgICAgICAgIHJldHVybihvcGVuZnRwKHMsdXNldGxzKSk7Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgIGNhc2UgRlRQX1BVVDogICAgICAg ICAgICAgICAgICAgICAvKiBQVVQgKi8KLSAgICAgIGNhc2UgRlRQX01QVTogICAgICAgICAgICAg ICAgICAgICAvKiBNUFVUICovCi0gICAgICBjYXNlIEZUUF9BUFA6ICAgICAgICAgICAgICAgICAg ICAgLyogQVBQRU5EICovCi0gICAgICBjYXNlIEZUUF9SRVA6CQkJLyogUkVQVVQgKi8KLSAgICAg ICAgcmV0dXJuKGRvZnRwcHV0KGN4LDEpKTsKLQotICAgICAgY2FzZSBGVFBfUFdEOiAgICAgICAg ICAgICAgICAgICAgIC8qIFBXRCAqLwotICAgICAgICB4ID0gZG9mdHBwd2QoKTsKLSAgICAgICAg aWYgKHggPiAtMSkgc3VjY2VzcyA9IHg7Ci0gICAgICAgIHJldHVybih4KTsKLQotICAgICAgY2Fz ZSBGVFBfUkVOOiAgICAgICAgICAgICAgICAgICAgIC8qIFJFTkFNRSAqLwotICAgICAgICByZXR1 cm4oZG9mdHByZW4oKSk7Ci0KLSAgICAgIGNhc2UgRlRQX1JFUzogICAgICAgICAgICAgICAgICAg ICAvKiBSRVNFVCAqLwotICAgICAgICByZXR1cm4oZG9mdHByZXMoKSk7Ci0KLSAgICAgIGNhc2Ug RlRQX0hMUDogICAgICAgICAgICAgICAgICAgICAvKiAocmVtb3RlKSBIRUxQICovCi0gICAgICAg IHJldHVybihkb2Z0cHhobHAoKSk7Ci0KLSAgICAgIGNhc2UgRlRQX1JNRDogICAgICAgICAgICAg ICAgICAgICAvKiBSTURJUiAqLwotICAgICAgICByZXR1cm4oZG9mdHBybWQoKSk7Ci0KLSAgICAg IGNhc2UgRlRQX1NUQTogICAgICAgICAgICAgICAgICAgICAvKiBTVEFUVVMgKi8KLSAgICAgICAg aWYgKCh4ID0gY210eHQoIkNvbW1hbmQiLCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQotICAgICAg ICAgIHJldHVybih4KTsKLSAgICAgICAgQ0hFQ0tDT05OKCk7Ci0gICAgICAgIGNrc3RybmNweShs aW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAgaWYgKHRlc3RpbmcpIHByaW50ZigiIGZ0cCBzdGF0 dXMgXCIlc1wiLi4uXG4iLGxpbmUpOwotICAgICAgICBzdWNjZXNzID0gKGZ0cGNtZCgiU1RBVCIs bGluZSxsY3MscmNzLDEpID09IFJFUExZX0NPTVBMRVRFKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nl c3MpOwotCi0gICAgICBjYXNlIEZUUF9TSVQ6IHsgICAgICAgICAgICAgICAgICAgLyogU0lURSAq LwotCSAgcmV0dXJuKGRvZnRwc2l0ZSgpKTsKLSAgICAgIH0KLQotICAgICAgY2FzZSBGVFBfU0la OiAgICAgICAgICAgICAgICAgICAgIC8qIChhc2sgZm9yKSBTSVpFICovCi0gICAgICAgIGlmICgo eCA9IGNtdHh0KCJSZW1vdGUgZmlsZW5hbWUiLCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgIHJldHVybih4KTsKLSAgICAgICAgQ0hFQ0tDT05OKCk7Ci0gICAgICAgIGNrc3RybmNw eShsaW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAgaWYgKHRlc3RpbmcpCi0gICAgICAgICAgcHJp bnRmKCIgZnRwIHNpemUgXCIlc1wiLi4uXG4iLGxpbmUpOwotICAgICAgICBzdWNjZXNzID0gKGZ0 cGNtZCgiU0laRSIsbGluZSxsY3MscmNzLDEpID09IFJFUExZX0NPTVBMRVRFKTsKLQlpZiAoc3Vj Y2VzcykKLQkgIHNpemVvayA9IDE7Ci0gICAgICAgIHJldHVybihzdWNjZXNzKTsKLQotICAgICAg Y2FzZSBGVFBfU1lTOiAgICAgICAgICAgICAgICAgICAgIC8qIEFzayBmb3Igc2VydmVyJ3MgU1lT VEVNIHR5cGUgKi8KLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0g ICAgICAgIENIRUNLQ09OTigpOwotICAgICAgICBpZiAodGVzdGluZykKLSAgICAgICAgICBwcmlu dGYoIiBmdHAgc3lzdGVtLi4uXG4iKTsKLSAgICAgICAgc3VjY2VzcyA9IChmdHBjbWQoIlNZU1Qi LE5VTEwsMCwwLDEpID09IFJFUExZX0NPTVBMRVRFKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mp OwotCi0gICAgICBjYXNlIEZUUF9VTUE6ICAgICAgICAgICAgICAgICAgICAgLyogU2V0L3F1ZXJ5 IFVNQVNLICovCi0gICAgICAgIGlmICgoeCA9IGNtZmxkKCJVbWFzayB0byBzZXQgb3Igbm90aGlu ZyB0byBxdWVyeSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgaWYgKHggIT0gLTMp Ci0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBC VUZTSVopOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAg ICAgQ0hFQ0tDT05OKCk7Ci0gICAgICAgIGlmICh0ZXN0aW5nKSB7Ci0gICAgICAgICAgICBpZiAo dG1wYnVmWzBdKQotICAgICAgICAgICAgICBwcmludGYoIiBmdHAgdW1hc2sgXCIlc1wiLi4uXG4i LHRtcGJ1Zik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50ZigiIGZ0cCBx dWVyeSB1bWFzay4uLlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgc3VjY2VzcyA9IGZ0cF91bWFz ayh0bXBidWYpOwotICAgICAgICByZXR1cm4oc3VjY2Vzcyk7Ci0KLSAgICAgIGNhc2UgRlRQX1VT UjoKLSAgICAgICAgcmV0dXJuKGRvZnRwdXNyKCkpOwotCi0gICAgICBjYXNlIEZUUF9RVU86Ci0g ICAgICAgIGlmICgoeCA9IGNtdHh0KCJGVFAgcHJvdG9jb2wgY29tbWFuZCIsICIiLCAmcywgeHhz dHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBDSEVDS0NPTk4oKTsK LSAgICAgICAgc3VjY2VzcyA9IChmdHBjbWQocyxOVUxMLDAsMCxmdHBfdmJtKSA9PSBSRVBMWV9D T01QTEVURSk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzKTsKLQotICAgICAgY2FzZSBGVFBfVFlQ OiAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgKi8KLSAgICAgICAgaWYgKCh4ID0gY21rZXko ZnRwdHlwLG5mdHB0eXAsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgp OwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgQ0hF Q0tDT05OKCk7Ci0gICAgICAgIGZ0cF90eXAgPSB4OwotICAgICAgICBnX2Z0cF90eXAgPSB4Owot ICAgICAgICB0ZW5leCA9IChmdHBfdHlwID09IEZUVF9URU4pOwotICAgICAgICBjaGFuZ2V0eXBl KGZ0cF90eXAsZnRwX3ZibSk7Ci0gICAgICAgIHJldHVybigxKTsKLQotICAgICAgY2FzZSBGVFBf Q0hLOiAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGlmIHJlbW90ZSBmaWxlKHMpIGV4aXN0 KHMpICovCi0gICAgICAgIGlmICgoeCA9IGNtdHh0KCJyZW1vdGUgZmlsZW5hbWUiLCAiIiwgJnMs IHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgQ0hFQ0tDT05O KCk7Ci0gICAgICAgIHN1Y2Nlc3MgPSByZW1vdGVfZmlsZXMoMSwoQ0hBUiAqKXMsKENIQVIgKilz LDApID8gMSA6IDA7Ci0gICAgICAgIHJldHVybihzdWNjZXNzKTsKLQotICAgICAgY2FzZSBGVFBf RkVBOiAgICAgICAgICAgICAgICAgICAgIC8qIFJGQzIzODkgKi8KLSAgICAgICAgaWYgKCh5ID0g Y21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgQ0hFQ0tDT05OKCk7 Ci0Jc3VjY2VzcyA9IChmdHBjbWQoIkZFQVQiLE5VTEwsMCwwLDEpID09IFJFUExZX0NPTVBMRVRF KTsKLQlpZiAoc3VjY2VzcykgewotCSAgICBpZiAoc2Z0dGFiWzBdID4gMCkgewotCQlmdHBfYXV0 ID0gc2Z0dGFiW1NGVF9BVVRIXTsKLQkJc2l6ZW9rICA9IHNmdHRhYltTRlRfU0laRV07Ci0JCW1k dG1vayAgPSBzZnR0YWJbU0ZUX01EVE1dOwotCQltbHN0b2sgID0gc2Z0dGFiW1NGVF9NTFNUXTsK LQkgICAgfQotCX0KLQlyZXR1cm4oc3VjY2Vzcyk7Ci0KLSAgICAgIGNhc2UgRlRQX09QVDogICAg ICAgICAgICAgICAgICAgICAvKiBSRkMyMzg5ICovCi0gICAgICAgIC8qIFBlcmhhcHMgdGhpcyBz aG91bGQgYmUgYSBrZXl3b3JkIGxpc3QuLi4gKi8KLSAgICAgICAgaWYgKCh4ID0gY21mbGQoIkZU UCBjb21tYW5kIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgIENIRUNLQ09OTigpOwotICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7 Ci0gICAgICAgIGlmICgoeCA9IGNtdHh0KCJPcHRpb25zIGZvciB0aGlzIGNvbW1hbmQiLCAiIiwg JnMsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgc3VjY2Vz cyA9IChmdHBjbWQoIk9QVFMiLGxpbmUsbGNzLHJjcyxmdHBfdmJtKSA9PSBSRVBMWV9DT01QTEVU RSk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzKTsKLQotICAgICAgY2FzZSBGVFBfRU5BOgkJCS8q IEZUUCBFTkFCTEUgKi8KLSAgICAgIGNhc2UgRlRQX0RJUzoJCQkvKiBGVFAgRElTQUJMRSAqLwot ICAgICAgICBpZiAoKHggPSBjbWtleShmdHBlbmF0YWIsbmZ0cGVuYSwiIiwiIix4eHN0cmluZykp IDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHkpOwotCXN3aXRjaCAoeCkgewotCSAgY2FzZSBFTkFfQVVUSDoJCS8qIE9LIHRv IHVzZSBhdXRvYXV0aGVudGljYXRpb24gKi8KLQkgICAgZnRwX2F1dCA9IChjeCA9PSBGVFBfRU5B KSA/IDEgOiAwOwotCSAgICBzZnR0YWJbU0ZUX0FVVEhdID0gZnRwX2F1dDsKLQkgICAgYnJlYWs7 Ci0JICBjYXNlIEVOQV9GRUFUOgkJLyogT0sgdG8gc2VuZCBGRUFUIGNvbW1hbmQgKi8KLQkgICAg ZmVhdG9rID0gKGN4ID09IEZUUF9FTkEpID8gMSA6IDA7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBF TkFfTUxTVDoJCS8qIE9LIHRvIHVzZSBNTFNUL01MU0QgKi8KLQkgICAgbWxzdG9rID0gKGN4ID09 IEZUUF9FTkEpID8gMSA6IDA7Ci0JICAgIHNmdHRhYltTRlRfTUxTVF0gPSBtbHN0b2s7Ci0JICAg IGJyZWFrOwotCSAgY2FzZSBFTkFfTURUTToJCS8qIE9LIHRvIHVzZSBNRFRNICovCi0JICAgIG1k dG1vayA9IChjeCA9PSBGVFBfRU5BKSA/IDEgOiAwOwotCSAgICBzZnR0YWJbU0ZUX01EVE1dID0g bWR0bW9rOwotCSAgICBicmVhazsKLQkgIGNhc2UgRU5BX1NJWkU6CQkvKiBPSyB0byB1c2UgU0la RSAqLwotCSAgICBzaXplb2sgPSAoY3ggPT0gRlRQX0VOQSkgPyAxIDogMDsKLQkgICAgc2Z0dGFi W1NGVF9TSVpFXSA9IHNpemVvazsKLQkgICAgYnJlYWs7Ci0JfQotCXJldHVybihzdWNjZXNzID0g MSk7Ci0gICAgfQotICAgIHJldHVybigtMik7Ci19Ci0KLSNpZm5kZWYgTk9TSE9XCi1zdGF0aWMg Y2hhciAqCi1zaG9wbCh4KSBpbnQgeDsgewotICAgIHN3aXRjaCAoeCkgewotICAgICAgY2FzZSBG UExfQ0xSOiByZXR1cm4oImNsZWFyIik7Ci0gICAgICBjYXNlIEZQTF9QUlY6IHJldHVybigicHJp dmF0ZSIpOwotICAgICAgY2FzZSBGUExfU0FGOiByZXR1cm4oInNhZmUiKTsKLSAgICAgIGNhc2Ug MDogIHJldHVybigiKG5vdCBzZXQpIik7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4oIih1bmtub3du KSIpOwotICAgIH0KLX0KLQotaW50Ci1zaG9mdHAoYnJpZWYpIGludCBicmllZjsgewotICAgIGNo YXIgKiBzID0gIj8iOwotICAgIGludCBuLCB4OwotCi0gICAgaWYgKGdfZnRwX3R5cCA+IC0xKSB7 ICAgICAgICAgICAgICAgLyogUmVzdG9yZSBUWVBFIGlmIHNhdmVkICovCi0gICAgICAgIGZ0cF90 eXAgPSBnX2Z0cF90eXA7Ci0gICAgICAgIC8qIGdfZnRwX3R5cCA9IC0xOyAqLwotICAgIH0KLSAg ICBwcmludGYoIlxuIik7Ci0gICAgcHJpbnRmKCJGVFAgY29ubmVjdGlvbjogICAgICAgICAgICAg ICAgICVzXG4iLGNvbm5lY3RlZCA/Ci0gICAgICAgICAgIGZ0cF9ob3N0IDoKLSAgICAgICAgICAg Iihub25lKSIKLSAgICAgICAgICAgKTsKLSAgICBuID0gMjsKLSAgICBpZiAoY29ubmVjdGVkKSB7 Ci0gICAgICAgIG4rKzsKLSAgICAgICAgcHJpbnRmKCJGVFAgc2VydmVyIHR5cGU6ICAgICAgICAg ICAgICAgICVzXG4iLAotICAgICAgICAgICAgICAgZnRwX3NydnR5cFswXSA/IGZ0cF9zcnZ0eXAg OiAiKHVua25vd24pIik7Ci0gICAgfQotICAgIGlmIChsb2dnZWRpbikKLSAgICAgIHByaW50Zigi TG9nZ2VkIGluIGFzOiAgICAgICAgICAgICAgICAgICAlc1xuIiwKLSAgICAgICAgICAgICBzdHJ2 YWwoZnRwX2xvZ25hbWUsIih1bmtub3duKSIpKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIk5v dCBsb2dnZWQgaW5cbiIpOwotICAgIG4rKzsKLSAgICBpZiAoYnJpZWYpIHJldHVybigwKTsKLQot ICAgIHByaW50ZigiXG5TRVQgRlRQIHZhbHVlczpcblxuIik7Ci0gICAgbiArPSAzOwotCi0gICAg cHJpbnRmKCIgZnRwIGFub255bW91cy1wYXNzd29yZDogICAgICAgICVzXG4iLAotCSAgIGZ0cF9h cHcgPyBmdHBfYXB3IDogIihkZWZhdWx0KSIKLQkgICApOwotICAgIHByaW50ZigiIGZ0cCBhdXRv LWxvZ2luOiAgICAgICAgICAgICAgICAlc1xuIixzaG93b2ZmKGZ0cF9sb2cpKTsKLSAgICBwcmlu dGYoIiBmdHAgYXV0by1hdXRoZW50aWNhdGlvbjogICAgICAgJXNcbiIsc2hvd29mZihmdHBfYXV0 KSk7Ci0gICAgc3dpdGNoIChmdHBfdHlwKSB7Ci0gICAgICBjYXNlIEZUVF9BU0M6IHMgPSAidGV4 dCI7IGJyZWFrOwotICAgICAgY2FzZSBGVFRfQklOOiBzID0gImJpbmFyeSI7IGJyZWFrOwotICAg ICAgY2FzZSBGVFRfVEVOOiBzID0gInRlbmV4IjsgYnJlYWs7Ci0gICAgfQotI2lmZGVmIEZUUF9U SU1FT1VUCi0gICAgcHJpbnRmKCIgZnRwIHRpbWVvdXQ6ICAgICAgICAgICAgICAgICAgICVsZFxu IixmdHBfdGltZW91dCk7Ci0jZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KLSAgICBwcmludGYoIiBm dHAgdHlwZTogICAgICAgICAgICAgICAgICAgICAgJXNcbiIscyk7Ci0gICAgcHJpbnRmKCIgZnRw IGdldC1maWxldHlwZS1zd2l0Y2hpbmc6ICAgICVzXG4iLHNob3dvZmYoZ2V0X2F1dG8pKTsKLSAg ICBwcmludGYoIiBmdHAgZGF0ZXM6ICAgICAgICAgICAgICAgICAgICAgJXNcbiIsc2hvd29mZihm dHBfZGF0ZXMpKTsKLSAgICBwcmludGYoIiBmdHAgZXJyb3ItYWN0aW9uOiAgICAgICAgICAgICAg JXNcbiIsZnRwX2VyciA/ICJxdWl0IjoicHJvY2VlZCIpOwotICAgIHByaW50ZigiIGZ0cCBmaWxl bmFtZXM6ICAgICAgICAgICAgICAgICAlc1xuIiwKLSAgICAgICAgICAgZnRwX2NudiA9PSBDTlZf QVVUTyA/ICJhdXRvIiA6IChmdHBfY252ID8gImNvbnZlcnRlZCIgOiAibGl0ZXJhbCIpCi0gICAg ICAgICAgICk7Ci0gICAgcHJpbnRmKCIgZnRwIGRlYnVnICAgICAgICAgICAgICAgICAgICAgICVz XG4iLHNob3dvZmYoZnRwX2RlYikpOwotCi0gICAgcHJpbnRmKCIgZnRwIHBhc3NpdmUtbW9kZTog ICAgICAgICAgICAgICVzXG4iLHNob3dvZmYoZnRwX3BzdikpOwotICAgIHByaW50ZigiIGZ0cCBw ZXJtaXNzaW9uczogICAgICAgICAgICAgICAlc1xuIixzaG93b29hKGZ0cF9wcm0pKTsKLSAgICBw cmludGYoIiBmdHAgdmVyYm9zZS1tb2RlOiAgICAgICAgICAgICAgJXNcbiIsc2hvd29mZihmdHBf dmJ4KSk7Ci0gICAgcHJpbnRmKCIgZnRwIHNlbmQtcG9ydC1jb21tYW5kczogICAgICAgICVzXG4i LHNob3dvZmYoZnRwX3BzdikpOwotICAgIHByaW50ZigiIGZ0cCB1bmlxdWUtc2VydmVyLW5hbWVz OiAgICAgICAlc1xuIixzaG93b2ZmKGZ0cF91c24pKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgLyog U2VlIG5vdGUgaW4gZG94ZnRwKCkgKi8KLSAgICBpZiAoZnRwX2ZuYyA8IDApCi0gICAgICBmdHBf Zm5jID0gZm5jYWN0OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBwcmludGYoIiBmdHAgY29s bGlzaW9uOiAgICAgICAgICAgICAgICAgJXNcbiIsCi0JICAgZm5jbmFtW2Z0cF9mbmMgPiAtMSA/ IGZ0cF9mbmMgOiBmbmNhY3RdKTsKLSAgICBwcmludGYoIiBmdHAgc2VydmVyLXRpbWUtb2Zmc2V0 OiAgICAgICAgJXNcbiIsCi0JICAgZnRzX3N0byA/IGZ0c19zdG8gOiAiKG5vbmUpIik7Ci0gICAg biArPSAxNTsKLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgcHJpbnRmKCIgZnRwIGNoYXJhY3Rlci1z ZXQtdHJhbnNsYXRpb246ICVzXG4iLHNob3dvZmYoZnRwX3hsYSkpOwotICAgIGlmICgrKyBuID4g Y21kX3Jvd3MtMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuIDA7IGVsc2UgbiA9IDA7IH0KLQot ICAgIHByaW50ZigiIGZ0cCBzZXJ2ZXItY2hhcmFjdGVyLXNldDogICAgICAlc1xuIixmY3NpbmZv W2Z0cF9jc3JdLmtleXdvcmQpOwotICAgIGlmICgrKyBuID4gY21kX3Jvd3MtMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuIDA7IGVsc2UgbiA9IDA7IH0KLQotICAgIHByaW50ZigiIGZpbGUgY2hh cmFjdGVyLXNldDogICAgICAgICAgICAlc1xuIixmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkKTsK LSAgICBpZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybiAwOyBl bHNlIG4gPSAwOyB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0gICAgeCA9IGZ0cF9kaXM7Ci0g ICAgaWYgKHggPCAwKQotICAgICAgeCA9IGZkaXNwbGE7Ci0gICAgc3dpdGNoICh4KSB7Ci0gICAg ICBjYXNlIFhZRkRfTjogcyA9ICJub25lIjsgYnJlYWs7Ci0gICAgICBjYXNlIFhZRkRfUjogcyA9 ICJzZXJpYWwiOyBicmVhazsKLSAgICAgIGNhc2UgWFlGRF9DOiBzID0gImZ1bGxzY3JlZW4iOyBi cmVhazsKLSAgICAgIGNhc2UgWFlGRF9TOiBzID0gImNydCI7IGJyZWFrOwotICAgICAgY2FzZSBY WUZEX0I6IHMgPSAiYnJpZWYiOyBicmVhazsKLSAgICB9Ci0gICAgcHJpbnRmKCIgZnRwIGRpc3Bs YXk6ICAgICAgICAgICAgICAgICAgICVzXG4iLHMpOwotICAgIGlmICgrKyBuID4gY21kX3Jvd3Mt MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuIDA7IGVsc2UgbiA9IDA7IH0KLQotICAgIGlmICht bHN0b2sgfHwgZmVhdG9rIHx8IG1kdG1vayB8fCBzaXplb2sgfHwgZnRwX2F1dCkgewotCXByaW50 ZigiIGVuYWJsZWQ6ICAgICAgICAgICAgICAgICAgICAgICIpOwotCWlmIChmdHBfYXV0KSBwcmlu dGYoIiBBVVRIIik7Ci0JaWYgKGZlYXRvaykgIHByaW50ZigiIEZFQVQiKTsKLQlpZiAobWR0bW9r KSAgcHJpbnRmKCIgTURUTSIpOwotCWlmIChtbHN0b2spICBwcmludGYoIiBNTFNUIik7Ci0JaWYg KHNpemVvaykgIHByaW50ZigiIFNJWkUiKTsKLQlwcmludGYoIlxuIik7Ci0JaWYgKCsrIG4gPiBj bWRfcm93cy0zKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQotICAg IH0KLSAgICBpZiAoIW1sc3RvayB8fCAhZmVhdG9rIHx8ICFtZHRtb2sgfHwgIXNpemVvayB8fCAh ZnRwX2F1dCkgewotCXByaW50ZigiIGRpc2FibGVkOiAgICAgICAgICAgICAgICAgICAgICIpOwot CWlmICghZnRwX2F1dCkgcHJpbnRmKCIgQVVUSCIpOwotCWlmICghZmVhdG9rKSAgcHJpbnRmKCIg RkVBVCIpOwotCWlmICghbWR0bW9rKSAgcHJpbnRmKCIgTURUTSIpOwotCWlmICghbWxzdG9rKSAg cHJpbnRmKCIgTUxTVCIpOwotCWlmICghc2l6ZW9rKSAgcHJpbnRmKCIgU0laRSIpOwotCXByaW50 ZigiXG4iKTsKLQlpZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVy biAwOyBlbHNlIG4gPSAwOyB9Ci0gICAgfQotICAgIHN3aXRjaCAoZnRwZ2V0KSB7Ci0gICAgICBj YXNlIDA6IHMgPSAia2VybWl0IjsgYnJlYWs7Ci0gICAgICBjYXNlIDE6IHMgPSAiZnRwIjsgYnJl YWs7Ci0gICAgICBjYXNlIDI6IHMgPSAiYXV0byI7IGJyZWFrOwotICAgICAgZGVmYXVsdDogcyA9 ICI/IjsKLSAgICB9Ci0gICAgcHJpbnRmKCIgZ2V0LXB1dC1yZW1vdGU6ICAgICAgICAgICAgICAg ICVzXG4iLHMpOwotICAgIGlmICgrKyBuID4gY21kX3Jvd3MtMykgeyBpZiAoIWFza21vcmUoKSkg cmV0dXJuIDA7IGVsc2UgbiA9IDA7IH0KLQotICAgIHByaW50ZigiXG4iKTsKLSAgICBpZiAoKysg biA+IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybiAwOyBlbHNlIG4gPSAwOyB9 Ci0KLSNpZmRlZiBGVFBfU0VDVVJJVFkKLSAgICBwcmludGYoIkF2YWlsYWJsZSBzZWN1cml0eSBt ZXRob2RzOiAgICAiKTsKLSNpZmRlZiBGVFBfR1NTQVBJCi0gICAgcHJpbnRmKCJHU1NBUEkgIik7 Ci0jZW5kaWYgLyogRlRQX0dTU0FQSSAqLwotI2lmZGVmIEZUUF9LUkI0Ci0gICAgcHJpbnRmKCJL ZXJiZXJvczQgIik7Ci0jZW5kaWYgLyogRlRQX0tSQjQgKi8KLSNpZmRlZiBGVFBfU1JQCi0gICAg cHJpbnRmKCJTUlAgIik7Ci0jZW5kaWYgLyogRlRQX1NSUCAqLwotI2lmZGVmIEZUUF9TU0wKLSAg ICBwcmludGYoIlNTTCAiKTsKLSNlbmRpZiAvKiBGVFBfU1NMICovCi0KLSAgICBuKys7Ci0gICAg cHJpbnRmKCJcblxuIik7Ci0gICAgaWYgKCsrIG4gPiBjbWRfcm93cy0zKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQotICAgIHByaW50ZigiIGZ0cCBhdXRodHlwZTog ICAgICAgICAgICAgICAgICAlc1xuIixzdHJ2YWwoYXV0aF90eXBlLE5VTEwpKTsKLSAgICBpZiAo KysgbiA+IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybiAwOyBlbHNlIG4gPSAw OyB9Ci0gICAgcHJpbnRmKCIgZnRwIGF1dG8tZW5jcnlwdGlvbjogICAgICAgICAgICVzXG4iLHNo b3dvZmYoZnRwX2NyeSkpOwotICAgIGlmICgrKyBuID4gY21kX3Jvd3MtMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuIDA7IGVsc2UgbiA9IDA7IH0KLSAgICBwcmludGYoIiBmdHAgY3JlZGVudGlh bC1mb3J3YXJkaW5nOiAgICAgJXNcbiIsc2hvd29mZihmdHBfY2Z3KSk7Ci0gICAgaWYgKCsrIG4g PiBjbWRfcm93cy0zKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQot ICAgIHByaW50ZigiIGZ0cCBjb21tYW5kLXByb3RlY3Rpb24tbGV2ZWw6ICAlc1xuIixzaG9wbChm dHBfY3BsKSk7Ci0gICAgaWYgKCsrIG4gPiBjbWRfcm93cy0zKSB7IGlmICghYXNrbW9yZSgpKSBy ZXR1cm4gMDsgZWxzZSBuID0gMDsgfQotICAgIHByaW50ZigiIGZ0cCBkYXRhLXByb3RlY3Rpb24t bGV2ZWw6ICAgICAlc1xuIixzaG9wbChmdHBfZHBsKSk7Ci0gICAgaWYgKCsrIG4gPiBjbWRfcm93 cy0zKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQotICAgIHByaW50 ZigiIGZ0cCBzZWN1cmUgcHJveHk6ICAgICAgICAgICAgICAlc1xuIixzaG9wbChzc2xfZnRwX3By b3h5KSk7Ci0gICAgaWYgKCsrIG4gPiBjbWRfcm93cy0zKSB7IGlmICghYXNrbW9yZSgpKSByZXR1 cm4gMDsgZWxzZSBuID0gMDsgfQotI2Vsc2UKLSAgICBwcmludGYoIkF2YWlsYWJsZSBzZWN1cml0 eSBtZXRob2RzOiAgICAgKG5vbmUpXG4iKTsKLSAgICBpZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsg aWYgKCFhc2ttb3JlKCkpIHJldHVybiAwOyBlbHNlIG4gPSAwOyB9Ci0jZW5kaWYgLyogRlRQX1NF Q1VSSVRZICovCi0KLSAgICBpZiAobiA8PSBjbWRfcm93cyAtIDMpCi0gICAgICBwcmludGYoIlxu Iik7Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIE5PU0hPVyAqLwotCi0jaWZuZGVmIE5P SEVMUAotLyogRlRQIEhFTFAgdGV4dCBzdHJpbmdzICovCi0KLXN0YXRpYyBjaGFyICogZmhzX2Z0 cFtdID0gewotICAgICJTeW50YXg6IEZUUCBzdWJjb21tYW5kIFsgb3BlcmFuZHMgXSIsCi0gICAg IiAgTWFrZXMgYW4gRlRQIGNvbm5lY3Rpb24sIG9yIHNlbmRzIGEgY29tbWFuZCB0byB0aGUgRlRQ IHNlcnZlci4iLAotICAgICIgIFRvIHNlZSBhIGxpc3Qgb2YgYXZhaWxhYmxlIEZUUCBzdWJjb21t YW5kcywgdHlwZSBcImZ0cCA/XCIuIiwKLSAgICAiICBhbmQgdGhlbiB1c2UgSEVMUCBGVFAgeHh4 IHRvIGdldCBoZWxwIGFib3V0IHN1YmNvbW1hbmQgeHh4LiIsCi0gICAgIiAgQWxzbyBzZWUgSEVM UCBTRVQgRlRQLCBIRUxQIFNFVCBHRVQtUFVULVJFTU9URSwgYW5kIEhFTFAgRklSRVdBTEwuIiwK LSAgICAiIgotfTsKLQotc3RhdGljIGNoYXIgKiBmaHNfYWNjW10gPSB7ICAgICAgICAgICAgIC8q IEFDQ09VTlQgKi8KLSAgICAiU3ludGF4OiBGVFAgQUNDT1VOVCB0ZXh0IiwKLSAgICAiICBTZW5k cyBhbiBhY2NvdW50IGRlc2lnbmF0b3IgdG8gYW4gRlRQIHNlcnZlciB0aGF0IG5lZWRzIG9uZS4i LAotICAgICIgIE1vc3QgRlRQIHNlcnZlcnMgZG8gbm90IHVzZSBhY2NvdW50czsgc29tZSB1c2Ug dGhlbSBmb3Igb3RoZXIiLAotICAgICIgIG90aGVyIHB1cnBvc2VzLCBzdWNoIGFzIGRpc2stYWNj ZXNzIHBhc3N3b3Jkcy4iLAotICAgICIiCi19Owotc3RhdGljIGNoYXIgKiBmaHNfYXBwW10gPSB7 ICAgICAgICAgICAgIC8qIEFQUEVORCAqLwotICAgICJTeW50YXg6IEZUUCBBUFBFTkQgZmlsbmFt ZSIsCi0gICAgIiAgRXF1aXZhbGVudCB0byBbIEZUUCBdIFBVVCAvQVBQRU5ELiAgU2VlIEhFTFAg RlRQIFBVVC4iLAotICAgICIiCi19Owotc3RhdGljIGNoYXIgKiBmaHNfY2xzW10gPSB7ICAgICAg ICAgICAgIC8qIEJZRSwgQ0xPU0UgKi8KLSAgICAiU3ludGF4OiBbIEZUUCBdIEJZRSIsCi0gICAg IiAgTG9ncyBvdXQgZnJvbSB0aGUgRlRQIHNlcnZlciBhbmQgY2xvc2VzIHRoZSBGVFAgY29ubmVj dGlvbi4iLAotICAgICIgIEFsc28gc2VlIEhFTFAgU0VUIEdFVC1QVVQtUkVNT1RFLiAgU3lub255 bTogWyBGVFAgXSBDTE9TRS4iLAotICAgICIiCi19Owotc3RhdGljIGNoYXIgKiBmaHNfY3dkW10g PSB7ICAgICAgICAgICAgIC8qIENELCBDV0QgKi8KLSAgICAiU3ludGF4OiBbIEZUUCBdIENEIGRp cmVjdG9yeSIsCi0gICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBjaGFuZ2UgdG8gdGhlIGdp dmVuIGRpcmVjdG9yeS4iLAotICAgICIgIEFsc28gc2VlIEhFTFAgU0VUIEdFVC1QVVQtUkVNT1RF LiAgU3lub255bXM6IFsgRlRQIF0gQ1dELCBSQ0QsIFJDV0QuIiwKLSAgICAiIgotfTsKLXN0YXRp YyBjaGFyICogZmhzX2d1cFtdID0geyAgICAgICAgICAgICAvKiBDRFVQLCBVUCAqLwotICAgICJT eW50YXg6IEZUUCBDRFVQIiwKLSAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIGNoYW5nZSB0 byB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZiBpdHMgY3VycmVudCIsCi0gICAgIiAgZGlyZWN0b3J5 LiAgQWxzbyBzZWUgSEVMUCBTRVQgR0VULVBVVC1SRU1PVEUuICBTeW5vbnltOiBGVFAgVVAuIiwK LSAgICAiIgotfTsKLXN0YXRpYyBjaGFyICogZmhzX2NobVtdID0geyAgICAgICAgICAgICAvKiBD SE1PRCAqLwotICAgICJTeW50YXg6IEZUUCBDSE1PRCBmaWxlbmFtZSBwZXJtaXNzaW9ucyIsCi0g ICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBjaGFuZ2UgdGhlIHBlcm1pc3Npb25zLCBwcm90 ZWN0aW9uLCBvciBtb2RlIG9mIiwKLSAgICAiICB0aGUgZ2l2ZW4gZmlsZS4gIFRoZSBnaXZlbiBw ZXJtaXNzaW9ucyBtdXN0IGJlIGluIHRoZSBzeW50YXggb2YgdGhlIiwKLSAgICAiICB0aGUgc2Vy dmVyJ3MgZmlsZSBzeXN0ZW0sIGUuZy4gYW4gb2N0YWwgbnVtYmVyIGZvciBVTklYLiAgQWxzbyBz ZWUiLAotICAgICIgIEZUUCBQVVQgL1BFUk1JU1NJT05TIiwKLSAgICAiIgotfTsKLXN0YXRpYyBj aGFyICogZmhzX21kZVtdID0geyAgICAgICAgICAgICAvKiBERUxFVEUgKi8KLSAgICAiU3ludGF4 OiBGVFAgREVMRVRFIFsgc3dpdGNoZXMgXSBmaWxlc3BlYyIsCi0gICAgIiAgQXNrcyB0aGUgRlRQ IHNlcnZlciB0byBkZWxldGUgdGhlIGdpdmVuIGZpbGUgb3IgZmlsZXMuIiwKLSAgICAiICBTeW5v bnltOiBNREVMRVRFIChLZXJtaXQgbWFrZXMgbm8gZGlzdGluY3Rpb24gYmV0d2VlbiBzaW5nbGUg YW5kIiwKLSAgICAiICBtdWx0aXBsZSBmaWxlIGRlbGV0aW9uKS4gIE9wdGlvbmFsIHN3aXRjaGVz OiIsCi0gICAgIiAiLAotICAgICIgIC9FUlJPUi1BQ1RJT046e1BST0NFRUQsUVVJVH0iLAotICAg ICIgIC9FWENFUFQ6cGF0dGVybiIsCi0gICAgIiAgL0ZJTEVOQU1FUzp7QVVUTyxDT05WRVJURUQs TElURVJBTH0iLAotICAgICIgIC9MQVJHRVItVEhBTjpudW1iZXIiLAotI2lmZGVmIFVOSVhPUk9T SwotICAgICIgIC9OT0RPVEZJTEVTIiwKLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSAgICAiICAv UVVJRVQiLAotI2lmZGVmIFJFQ1VSU0lWRQotICAgICIgIC9SRUNVUlNJVkUgKGRlcGVuZHMgb24g c2VydmVyKSIsCi0gICAgIiAgL1NVQkRJUkVDVE9SSUVTIiwKLSNlbmRpZiAvKiBSRUNVUlNJVkUg Ki8KLSAgICAiICAvU01BTExFUi1USEFOOm51bWJlciIsCi0gICAgIiIKLX07Ci1zdGF0aWMgY2hh ciAqIGZoc19kaXJbXSA9IHsgICAgICAgICAgICAgLyogRElSRUNUT1JZICovCi0gICAgIlN5bnRh eDogRlRQIERJUkVDVE9SWSBbIGZpbGVzcGVjIF0iLAotICAgICIgIEFza3MgdGhlIHNlcnZlciB0 byBzZW5kIGEgZGlyZWN0b3J5IGxpc3Rpbmcgb2YgdGhlIGZpbGVzIHRoYXQgbWF0Y2giLAotICAg ICIgIHRoZSBnaXZlbiBmaWxlc3BlYywgb3IgaWYgbm9uZSBpcyBnaXZlbiwgYWxsIHRoZSBmaWxl cyBpbiBpdHMgY3VycmVudCIsCi0gICAgIiAgZGlyZWN0b3J5LiAgVGhlIGZpbGVzcGVjLCBpbmNs dWRpbmcgYW55IHdpbGRjYXJkcywgbXVzdCBiZSBpbiB0aGUiLAotICAgICIgIHN5bnRheCBvZiB0 aGUgc2VydmVyJ3MgZmlsZSBzeXN0ZW0uICBBbHNvIHNlZSBIRUxQIFNFVCBHRVQtUFVULVJFTU9U RS4iLAotICAgICIgIFN5bm9ueW06IFJESVJFQ1RPUlkuIiwKLSAgICAiIgotfTsKLXN0YXRpYyBj aGFyICogZmhzX3ZkaVtdID0geyAgICAgICAgICAgICAvKiBWRElSRUNUT1JZICovCi0gICAgIlN5 bnRheDogRlRQIFZESVJFQ1RPUlkgWyBmaWxlc3BlYyBdIiwKLSAgICAiICBBc2tzIHRoZSBzZXJ2 ZXIgdG8gc2VuZCBhIGRpcmVjdG9yeSBsaXN0aW5nIG9mIHRoZSBmaWxlcyB0aGF0IG1hdGNoIiwK LSAgICAiICB0aGUgZ2l2ZW4gZmlsZXNwZWMsIG9yIGlmIG5vbmUgaXMgZ2l2ZW4sIGFsbCB0aGUg ZmlsZXMgaW4gaXRzIGN1cnJlbnQiLAotICAgICIgIGRpcmVjdG9yeS4gIFZESVJFQ1RPUlkgaXMg bmVlZGVkIGZvciBnZXR0aW5nIHZlcmJvc2UgZGlyZWN0b3J5IiwKLSAgICAiICBsaXN0aW5ncyBm cm9tIGNlcnRhaW4gRlRQIHNlcnZlcnMsIHN1Y2ggYXMgb24gVE9QUy0yMC4gIFRyeSBpdCBpZiIs Ci0gICAgIiAgRlRQIERJUkVDVE9SWSBsaXN0cyBvbmx5IGZpbGVuYW1lcyB3aXRob3V0IGRldGFp bHMuIiwKLSAgICAiIgotfTsKLXN0YXRpYyBjaGFyICogZmhzX2ZlYVtdID0geyAgICAgICAgICAg ICAvKiBGRUFUVVJFUyAqLwotICAgICJTeW50YXg6IEZUUCBGRUFUVVJFUyIsCi0gICAgIiAgQXNr cyB0aGUgRlRQIHNlcnZlciB0byBsaXN0IGl0cyBzcGVjaWFsIGZlYXR1cmVzLiAgTW9zdCBGVFAg c2VydmVycyIsCi0gICAgIiAgZG8gbm90IHJlY29nbml6ZSB0aGlzIGNvbW1hbmQuIiwKLSAgICAi IgotfTsKLXN0YXRpYyBjaGFyICogZmhzX21nZVtdID0geyAgICAgICAgICAgICAvKiBNR0VUICov Ci0gICAgIlN5bnRheDogWyBGVFAgXSBNR0VUIFsgb3B0aW9ucyBdIGZpbGVzcGVjIFsgZmlsZXNw ZWMgWyBmaWxlc3BlYyAuLi4gXSBdIiwKLSAgICAiICBEb3dubG9hZCBhIHNpbmdsZSBmaWxlIG9y IG11bHRpcGxlIGZpbGVzLiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBzZW5kIiwKLSAgICAiICB0 aGUgZ2l2ZW4gZmlsZSBvciBmaWxlcy4gIEFsc28gc2VlIEZUUCBHRVQuICBPcHRpb25hbCBzd2l0 Y2hlczoiLAotICAgICIgIiwKLSAgICAiICAvQVMtTkFNRTp0ZXh0IiwKLSAgICAiICAgIE5hbWUg dW5kZXIgd2hpY2ggdG8gc3RvcmUgaW5jb21pbmcgZmlsZS4iLAotICAgICIgICAgUGF0dGVybiBy ZXF1aXJlZCBmb3IgZm9yIG11bHRpcGxlIGZpbGVzLiIsCi0gICAgIiAgL0JJTkFSWSIsICAgICAg ICAgICAgICAgICAgICAgICAgLyogL0lNQUdFICovCi0gICAgIiAgICBGb3JjZSBiaW5hcnkgbW9k ZS4gIFN5bm9ueW06IC9JTUFHRS4iLAotICAgICIgIC9DT0xMSVNJT046e0JBQ0tVUCxSRU5BTUUs VVBEQVRFLERJU0NBUkQsQVBQRU5ELE9WRVJXUklURX0iLAotICAgIiAgICBXaGF0IHRvIGRvIGlm IGFuIGluY29taW5nIGZpbGUgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgZmlsZS4i LAotCi0jaWZkZWYgUFVUUElQRQotICAgICIgIC9DT01NQU5EIiwKLSAgICAiICAgIFNwZWNpZmll cyB0aGF0IHRoZSBhcy1uYW1lIGlzIGEgY29tbWFuZCB0byB3aGljaCB0aGUgaW5jb21pbmcgZmls ZSIsCi0gICAgIiAgICBpcyB0byBiZSBwaXBlZCBhcyBzdGFuZGFyZCBpbnB1dC4iLAotI2VuZGlm IC8qIFBVVFBJUEUgKi8KLQotI2lmZGVmIERPVVBEQVRFCi0gICAgIiAgL0RBVEVTLURJRkZFUiIs Ci0gICAgIiAgICBEb3dubG9hZCBvbmx5IHRob3NlIGZpbGVzIHdob3NlIG1vZGlmaWNhdGlvbiBk YXRlLXRpbWVzIGRpZmZlciBmcm9tIiwKLSAgICAiICAgIHRob3NlIG9mIHRoZSBjb3JyZXNwb25k aW5nIGxvY2FsIGZpbGVzLCBvciB0aGF0IGRvIG5vdCBhbHJlYWR5IiwKLSAgICAiICAgIGV4aXN0 IG9uIHRoZSBsb2NhbCBjb21wdXRlci4iLAotI2VuZGlmIC8qIERPVVBEQVRFICovCi0KLSAgICAi ICAvREVMRVRFIiwKLSAgICAiICAgIFNwZWNpZmllcyB0aGF0IGVhY2ggZmlsZSBpcyB0byBiZSBk ZWxldGVkIGZyb20gdGhlIHNlcnZlciBhZnRlciwiLAotICAgICIgICAgYW5kIG9ubHkgaWYsIGl0 IGlzIHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkLiIsCi0gICAgIiAgL0VSUk9SLUFDVElPTjp7UFJP Q0VFRCxRVUlUfSIsCi0gICAgIiAgICBXaGVuIGRvd25sb2FkaW5nIGEgZ3JvdXAgb2YgZmlsZXMs IHdoYXQgdG8gZG8gdXBvbiBmYWlsdXJlIHRvIiwKLSAgICAiICAgIHRyYW5zZmVyIGEgZmlsZTog cXVpdCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IG9uZS4iLAotICAgICIgIC9FWENFUFQ6cGF0dGVy biIsCi0gICAgIiAgICBFeGNlcHRpb24gbGlzdDogZG9uJ3QgZG93bmxvYWQgYW55IGZpbGVzIHRo YXQgbWF0Y2ggdGhpcyBwYXR0ZXJuLiIsCi0gICAgIiAgICBTZWUgSEVMUCBXSUxEQ0FSRCBmb3Ig cGF0dGVybiBzeW50YXguIiwKLSAgICAiICAvRklMRU5BTUVTOntBVVRPTUFUSUMsQ09OVkVSVEVE LExJVEVSQUx9IiwKLSAgICAiICAgIFdoZXRoZXIgdG8gY29udmVydCBpbmNvbWluZyBmaWxlbmFt ZXMgdG8gbG9jYWwgc3ludGF4LiIsCi0jaWZkZWYgUElQRVNFTkQKLSNpZm5kZWYgTk9TUEwKLSAg ICAiICAvRklMVEVSOmNvbW1hbmQiLAotICAgICIgICAgUGFzcyBpbmNvbWluZyBmaWxlcyB0aHJv dWdoIHRoZSBnaXZlbiBjb21tYW5kLiIsCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRpZiAvKiBQ SVBFU0VORCAqLwotICAgICIgIC9MQVJHRVItVEhBTjpudW1iZXIiLAotICAgICIgICAgT25seSBk b3dubG9hZCBmaWxlcyB0aGF0IGFyZSBsYXJnZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5 dGVzLiIsCi0gICAgIiAgL0xJU1RGSUxFOmZpbGVuYW1lIiwKLSAgICAiICAgIE9idGFpbiB0aGUg bGlzdCBvZiBmaWxlcyB0byBkb3dubG9hZCBmcm9tIHRoZSBnaXZlbiBmaWxlLiIsCi0jaWZuZGVm IE5PQ1NFVFMKLSAgICAiICAvTE9DQUwtQ0hBUkFDVEVSLVNFVDpuYW1lIiwKLSAgICAiICAgIFdo ZW4gZG93bmxvYWRpbmcgaW4gdGV4dCBtb2RlIGFuZCBjaGFyYWN0ZXItc2V0IGNvbnZlcnNpb24g aXMiLAotICAgICIgICAgZGVzaXJlZCwgdGhpcyBzcGVjaWZpZXMgdGhlIHRhcmdldCBzZXQuIiwK LSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgIiAgL01BVENIOnBhdHRlcm4iLAotICAgICIgICAg U3BlY2lmaWVzIGEgcGF0dGVybiB0byBiZSB1c2VkIHRvIHNlbGVjdCBmaWxlbmFtZXMgbG9jYWxs eSBmcm9tIHRoZSIsCi0gICAgIiAgICBzZXJ2ZXIncyBsaXN0LiIsCi0gICAgIiAgL01MU0QiLAot ICAgICIgICAgRm9yY2VzIHNlbmRpbmcgb2YgTUxTRCAocmF0aGVyIHRoYW4gTkxTVCkgdG8gZ2V0 IHRoZSBmaWxlIGxpc3QuIiwKLSNpZmRlZiBDS19UTVBESVIKLSAgICAiICAvTU9WRS1UTzpkaXJl Y3RvcnkiLAotICAgICIgICAgRWFjaCBmaWxlIHRoYXQgaXMgZG93bmxvYWRlZCBpcyB0byBiZSBt b3ZlZCB0byB0aGUgZ2l2ZW4gbG9jYWwiLAotICAgICIgICAgZGlyZWN0b3J5IGltbWVkaWF0ZWx5 IGFmdGVyLCBhbmQgb25seSBpZiwgaXQgaGFzIGJlZW4gcmVjZWl2ZWQiLAotICAgICIgICAgc3Vj Y2Vzc2Z1bGx5LiIsCi0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0gICAgIiAgL05BTUVMSVNUOmZp bGVuYW1lIiwKLSAgICAiICAgIEluc3RlYWQgb2YgZG93bmxvYWRpbmcgdGhlIGZpbGVzLCBzdG9y ZXMgdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCIsCi0gICAgIiAgICB3b3VsZCBiZSBkb3dubG9hZGVk IGluIHRoZSBnaXZlbiBsb2NhbCBmaWxlLCBvbmUgZmlsZW5hbWUgcGVyIGxpbmUuIiwKLSAgICAi ICAvTkxTVCIsCi0gICAgIiAgICBGb3JjZXMgc2VuZGluZyBvZiBOTFNUIChyYXRoZXIgdGhhbiBN TFNEKSB0byBnZXQgdGhlIGZpbGUgbGlzdC4iLAotICAgICIgIC9OT0JBQ0tVUEZJTEVTIiwKLSAg ICAiICAgIERvbid0IGRvd25sb2FkIGFueSBmaWxlcyB3aG9zZSBuYW1lcyBlbmQgd2l0aCAufjxu dW1iZXI+fi4iLAotICAgICIgIC9OT0RPVEZJTEVTIiwKLSAgICAiICAgIERvbid0IGRvd25sb2Fk IGFueSBmaWxlcyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoIHBlcmlvZCAoLikuIiwKLSAgICAiICAv UVVJRVQiLAotICAgICIgICAgU3VwcHJlc3MgdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheS4iLAot I2lmZGVmIEZUUF9SRVNUQVJUCi0gICAgIiAgL1JFQ09WRVIiLCAgICAgICAgICAgICAgICAgICAg ICAgLyogL1JFU1RBUlQgKi8KLSAgICAiICAgIFJlc3VtZSBhIGRvd25sb2FkIHRoYXQgd2FzIHBy ZXZpb3VzbHkgaW50ZXJydXB0ZWQgZnJvbSB0aGUgcG9pbnQgb2YiLAotICAgICIgICAgZmFpbHVy ZS4gIFdvcmtzIG9ubHkgaW4gYmluYXJ5IG1vZGUuICBOb3Qgc3VwcG9ydGVkIGJ5IGFsbCBzZXJ2 ZXJzLiIsCi0gICAgIiAgICBTeW5vbnltOiAvUkVTVEFSVC4iLAotI2VuZGlmIC8qIEZUUF9SRVNU QVJUICovCi0jaWZkZWYgUkVDVVJTSVZFCi0gICAgIiAgL1JFQ1VSU0lWRSIsICAgICAgICAgICAg ICAgICAgICAgLyogL1NVQkRJUkVDVE9SSUVTICovCi0gICAgIiAgICBDcmVhdGUgc3ViZGlyZWN0 b3JpZXMgYXV0b21hdGljYWxseSBpZiB0aGUgc2VydmVyIHNlbmRzIGZpbGVzIiwKLSAgICAiICAg IHJlY3Vyc2l2ZWx5IGFuZCBpbmNsdWRlcyBwYXRobmFtZXMgKG1vc3QgZG9uJ3QpLiIsCi0jZW5k aWYgLyogUkVDVVJTSVZFICovCi0gICAgIiAgL1JFTkFNRS1UTzp0ZXh0IiwKLSAgICAiICAgIEVh Y2ggZmlsZSB0aGF0IGlzIGRvd25sb2FkZWQgaXMgdG8gYmUgcmVuYW1lZCBhcyBpbmRpY2F0ZWQg anVzdCwiLAotICAgICIgICAgYWZ0ZXIsIGFuZCBvbmx5IGlmLCBpdCBoYXMgYXJyaXZlZCBzdWNj ZXNzZnVsbHkuIiwKLSNpZm5kZWYgTk9DU0VUUwotICAgICIgIC9TRVJWRVItQ0hBUkFDVEVSLVNF VDpuYW1lIiwKLSAgICAiICAgIFdoZW4gZG93bmxvYWRpbmcgaW4gdGV4dCBtb2RlIGFuZCBjaGFy YWN0ZXItc2V0IGNvbnZlcnNpb24gaXMgZGVzaXJlZCIKLSwgICAiICAgIHRoaXMgc3BlY2lmaWVz IHRoZSBvcmlnaW5hbCBmaWxlJ3MgY2hhcmFjdGVyIHNldCBvbiB0aGUgc2VydmVyLiIsCi0jZW5k aWYgLyogTk9DU0VUUyAqLwotICAgICIgIC9TRVJWRVItUkVOQU1FOnRleHQiLAotICAgICIgICAg RWFjaCBzZXJ2ZXIgc291cmNlIGZpbGUgaXMgdG8gYmUgcmVuYW1lZCBvbiB0aGUgc2VydmVyIGFz IGluZGljYXRlZCIsCi0gICAgIiAgICBpbW1lZGlhdGVseSBhZnRlciwgYnV0IG9ubHkgaWYsIGl0 IGhhcyBhcnJpdmVkIHN1Y2Nlc3NmdWxseS4iLAotICAgICIgIC9TTUFMTEVSLVRIQU46bnVtYmVy IiwKLSAgICAiICAgIERvd25sb2FkIG9ubHkgdGhvc2UgZmlsZXMgc21hbGxlciB0aGFuIHRoZSBn aXZlbiBudW1iZXIgb2YgYnl0ZXMuIiwKLSAgICAiICAvVEVYVCIsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAvQVNDSUkgKi8KLSAgICAiICAgIEZvcmNlIHRleHQgbW9kZS4gIFN5bm9ueW06 IC9BU0NJSS4iLAotICAgICIgIC9URU5FWCIsCi0gICAgIiAgICBGb3JjZSBURU5FWCAoVE9QUy0y MCkgbW9kZSAoc2VlIEhFTFAgU0VUIEZUUCBUWVBFKS4iLAotI2lmbmRlZiBOT0NTRVRTCi0gICAg IiAgL1RSQU5TUEFSRU5UIiwKLSAgICAiICAgIFdoZW4gZG93bmxvYWRpbmcgaW4gdGV4dCBtb2Rl LCBkbyBub3QgY29udmVydCBjaHJhY3Rlci1zZXRzLiIsCi0jZW5kaWYgLyogTk9DU0VUUyAqLwot ICAgICIgIC9UTy1TQ1JFRU4iLAotICAgICIgICAgVGhlIGRvd25sb2FkZWQgZmlsZSBpcyB0byBi ZSBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbi4iLAotI2lmZGVmIERPVVBEQVRFCi0gICAgIiAgL1VQ REFURSIsCi0gICAgIiAgICBFcXVpdmFsZW50IHRvIC9DT0xMSVNJT046VVBEQVRFLiAgRG93bmxv YWQgb25seSB0aG9zZSBmaWxlcyB0aGF0IGFyZSIsCi0gICAgIiAgICBuZXdlciB0aGFuIHRoYW4g dGhlaXIgbG9jYWwgY291bnRlcnBhcnRzLCBvciB0aGF0IGRvIG5vdCBleGlzdCBvbiIsCi0gICAg IiAgICB0aGUgbG9jYWwgY29tcHV0ZXIuIiwKLSNlbmRpZiAvKiBET1VQREFURSAqLwotICAgICIi Ci19Owotc3RhdGljIGNoYXIgKiBmaHNfaGxwW10gPSB7ICAgICAgICAgICAgIC8qIEhFTFAgKi8K LSAgICAiU3ludGF4OiBGVFAgSEVMUCBbIGNvbW1hbmQgWyBzdWJjb21tYW5kLi4uIF0gXSIsCi0g ICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZlciBmb3IgaGVscCBhYm91dCB0aGUgZ2l2ZW4gY29tbWFu ZC4gIEZpcnN0IHVzZSIsCi0gICAgIiAgRlRQIEhFTFAgYnkgaXRzZWxmIHRvIGdldCBhIGxpc3Qg b2YgY29tbWFuZHMsIHRoZW4gdXNlIEhFTFAgRlRQIHh4eCIsCi0gICAgIiAgdG8gZ2V0IGhlbHAg Zm9yIGNvbW1hbmQgXCJ4eHhcIi4gIFN5bm9ueW1zOiBSRU1PVEUgSEVMUCwgUkhFTFAuIiwKLSAg ICAiIgotfTsKLXN0YXRpYyBjaGFyICogZmhzX2lkbFtdID0geyAgICAgICAgICAgICAvKiBJRExF ICovCi0gICAgIlN5bnRheDogRlRQIElETEUgWyBudW1iZXIgXSIsCi0gICAgIiAgSWYgZ2l2ZW4g d2l0aG91dCBhIG51bWJlciwgdGhpcyBhc2tzIHRoZSBGVFAgc2VydmVyIHRvIHRlbGwgaXRzIiwK LSAgICAiICBjdXJyZW50IGlkbGUtdGltZSBsaW1pdC4gIElmIGdpdmVuIHdpdGggYSBudW1iZXIs IGl0IGFza3MgdGhlIHNlcnZlciIsCi0gICAgIiAgdG8gY2hhbmdlIGl0cyBpZGxlLXRpbWUgbGlt aXQgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzLiIsCi0gICAgIiIKLX07Ci1zdGF0aWMg Y2hhciAqIGZoc191c3JbXSA9IHsgICAgICAgICAgICAgLyogVVNFUiwgTE9HSU4gKi8KLSAgICAi U3ludGF4OiBGVFAgVVNFUiB1c2VybmFtZSBbIHBhc3N3b3JkIFsgYWNjb3VudCBdIF0iLAotICAg ICIgIExvZyBpbiB0byB0aGUgRlRQIHNlcnZlci4gIFRvIGJlIHVzZWQgd2hlbiBjb25uZWN0ZWQg YnV0IG5vdCB5ZXQiLAotICAgICIgIGxvZ2dlZCBpbiwgZS5nLiB3aGVuIFNFVCBGVFAgQVVUT0xP R0lOIGlzIE9GRiBvciBhdXRvbG9naW4gZmFpbGVkLiIsCi0gICAgIiAgSWYgeW91IG9taXQgdGhl IHBhc3N3b3JkLCBhbmQgb25lIGlzIHJlcXVpcmVkIGJ5IHRoZSBzZXJ2ZXIsIHlvdSBhcmUiLAot ICAgICIgIHByb21wdGVkIGZvciBpdC4gIElmIHlvdSBvbWl0IHRoZSBhY2NvdW50LCBubyBhY2Nv dW50IGlzIHNlbnQuIiwKLSAgICAiICBTeW5vbnltOiBGVFAgTE9HSU4uIiwKLSAgICAiIgotfTsK LXN0YXRpYyBjaGFyICogZmhzX2dldFtdID0geyAgICAgICAgICAgICAvKiBHRVQgKi8KLSAgICAi U3ludGF4OiBbIEZUUCBdIEdFVCBbIG9wdGlvbnMgXSBmaWxlbmFtZSBbIGFzLW5hbWUgXSIsCi0g ICAgIiAgRG93bmxvYWQgYSBzaW5nbGUgZmlsZS4gIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gc2Vu ZCB0aGUgZ2l2ZW4gZmlsZS4iLAotICAgICIgIFRoZSBvcHRpb25hbCBhcy1uYW1lIGlzIHRoZSBu YW1lIHRvIHN0b3JlIGl0IHVuZGVyIHdoZW4gaXQgYXJyaXZlczsiLAotICAgICIgIGlmIG9taXR0 ZWQsIHRoZSBmaWxlIGlzIHN0b3JlZCB3aXRoIHRoZSBuYW1lIGl0IGFycml2ZWQgd2l0aCwgYXMi LAotICAgICIgIG1vZGlmaWVkIGFjY29yZGluZyB0byB0aGUgRlRQIEZJTEVOQU1FUyBzZXR0aW5n IG9yIC9GSUxFTkFNRVM6IHN3aXRjaCIsCi0gICAgIiAgdmFsdWUuICBBc2lkZSBmcm9tIHRoZSBm aWxlIGxpc3QgYW5kIGFzLW5hbWUsIHN5bnRheCBhbmQgb3B0aW9ucyBhcmUiLAotICAgICIgIHRo ZSBzYW1lIGFzIGZvciBGVFAgTUdFVCwgd2hpY2ggaXMgdXNlZCBmb3IgZG93bmxvYWRpbmcgbXVs dGlwbGUgZmlsZXMuIgotLCAgICIiCi19Owotc3RhdGljIGNoYXIgKiBmaHNfbWtkW10gPSB7ICAg ICAgICAgICAgIC8qIE1LRElSICovCi0gICAgIlN5bnRheDogRlRQIE1LRElSIGRpcmVjdG9yeSIs Ci0gICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBjcmVhdGUgYSBkaXJlY3Rvcnkgd2l0aCB0 aGUgZ2l2ZW4gbmFtZSwiLAotICAgICIgIHdoaWNoIG11c3QgYmUgaW4gdGhlIHN5bnRheCBvZiB0 aGUgc2VydmVyJ3MgZmlsZSBzeXN0ZW0uICBTeW5vbnltczoiLAotICAgICIgIFJFTU9URSBNS0RJ UiwgUk1LRElSLiIsCi0gICAgIiIKLX07Ci1zdGF0aWMgY2hhciAqIGZoc19tb2RbXSA9IHsgICAg ICAgICAgICAgLyogTU9EVElNRSAqLwotICAgICJTeW50YXg6IEZUUCBNT0RUSU1FIGZpbGVuYW1l IiwKLSAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIHNlbmQgdGhlIG1vZGlmaWNhdGlvbiB0 aW1lIG9mIHRoZSBnaXZlbiBmaWxlLCIsCi0gICAgIiAgdG8gYmUgZGlzcGxheWVkIG9uIHRoZSBz Y3JlZW4uICBUaGUgZGF0ZS10aW1lIGZvcm1hdCBpcyBhbGwgbnVtZXJpYzoiLAotICAgICIgIHl5 eXltbWRkaGhtbXNzeHh4Li4uICh3aGVyZSB4eHguLi4gaXMgMCBvciBtb3JlIGRpZ2l0cyBpbmRp Y2F0aW5nIiwKLSAgICAiICBmcmFjdGlvbnMgb2Ygc2Vjb25kcykuIiwKLSAgICAiIgotfTsKLXN0 YXRpYyBjaGFyICogZmhzX21wdVtdID0geyAgICAgICAgICAgICAvKiBNUFVUICovCi0gICAgIlN5 bnRheDogWyBGVFAgXSBNUFVUIFsgc3dpdGNoZXMgXSBmaWxlc3BlYyBbIGZpbGVzcGVjIFsgZmls ZXNwZWMgLi4uIF0gXSIsCi0gICAgIiAgVXBsb2FkcyBmaWxlcy4gIFNlbmRzIHRoZSBnaXZlbiBm aWxlIG9yIGZpbGVzIHRvIHRoZSBGVFAgc2VydmVyLiIsCi0gICAgIiAgQWxzbyBzZWUgRlRQIFBV VC4gIE9wdGlvbmFsIHN3aXRjaGVzIGFyZToiLAotICAgICIgIiwKLSAgICAiICAvQUZURVI6ZGF0 ZS10aW1lIiwKLSAgICAiICAgIFVwbG9hZHMgb25seSB0aG9zZSBmaWxlcyBuZXdlciB0aGFuIHRo ZSBnaXZlbiBkYXRlLXRpbWUuIiwKLSAgICAiICAgIEhFTFAgREFURSBmb3IgaW5mbyBhYm91dCBk YXRlLXRpbWUgZm9ybWF0cy4gIFN5bm9ueW06IC9TSU5DRS4iLAotI2lmZGVmIFBVVEFSUkFZCi0g ICAgIiAgL0FSUkFZOmFycmF5LWRlc2lnbmF0b3IiLAotICAgICIgICAgVGVsbHMgS2VybWl0IHRv IHVwbG9hZCB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIGFycmF5LCByYXRoZXIgdGhhbiIsCi0g ICAgIiAgICBhIGZpbGUuIiwKLSNlbmRpZiAvKiBQVVRBUlJBWSAqLwotICAgICIgIC9BUy1OQU1F OnRleHQiLAotICAgICIgICAgTmFtZSB1bmRlciB3aGljaCB0byBzZW5kIGZpbGVzLiIsCi0gICAg IiAgICBQYXR0ZXJuIHJlcXVpcmVkIGZvciBmb3IgbXVsdGlwbGUgZmlsZXMuIiwKLSAgICAiICAv QkVGT1JFOmRhdGUtdGltZSIsCi0gICAgIiAgICBVcGxvYWQgb25seSB0aG9zZSBmaWxlcyBvbGRl ciB0aGFuIHRoZSBnaXZlbiBkYXRlLXRpbWUuIiwKLSAgICAiICAvQklOQVJZIiwKLSAgICAiICAg IEZvcmNlIGJpbmFyeSBtb2RlLiAgU3lub255bTogL0lNQUdFLiIsCi0jaWZkZWYgUFVUUElQRQot ICAgICIgIC9DT01NQU5EIiwKLSAgICAiICAgIFNwZWNpZmllcyB0aGF0IHRoZSBmaWxlc3BlYyBp cyBhIGNvbW1hbmQgd2hvc2Ugc3RhbmRhcmQgb3V0cHV0IGlzIiwKLSAgICAiICAgIHRvIGJlIHNl bnQuIiwKLSNlbmRpZiAvKiBQVVRQSVBFICovCi0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgRE9V UERBVEUKLSAgICAiICAvREFURVMtRElGRkVSIiwKLSAgICAiICAgIFVwbG9hZCBvbmx5IHRob3Nl IGZpbGVzIHdob3NlIG1vZGlmaWNhdGlvbiBkYXRlLXRpbWVzIGRpZmZlciBmcm9tIiwKLSAgICAi ICAgIHRob3NlIG9uIHRoZSBzZXJ2ZXIsIG9yIHRoYXQgZG9uJ3QgZXhpc3Qgb24gdGhlIHNlcnZl ciBhdCBhbGwuIiwKLSNlbmRpZiAvKiBET1VQREFURSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LQotICAgICIgIC9ERUxFVEUiLAotICAgICIgICAgU3BlY2lmaWVzIHRoYXQgZWFjaCBzb3VyY2Ug ZmlsZSBpcyB0byBiZSBkZWxldGVkIGFmdGVyLCBhbmQgb25seSBpZiwiLAotICAgICIgICAgaXQg aXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkLiIsCi0gICAgIiAgL0RPVEZJTEVTIiwKLSAgICAiICAg IEluY2x1ZGUgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBwZXJpb2QgKC4pLiIsCi0gICAg IiAgL0VSUk9SLUFDVElPTjp7UFJPQ0VFRCxRVUlUfSIsCi0gICAgIiAgICBXaGVuIHVwbG9hZGlu ZyBhIGdyb3VwIG9mIGZpbGVzLCB3aGF0IHRvIGRvIHVwb24gZmFpbHVyZSB0byIsCi0gICAgIiAg ICB0cmFuc2ZlciBhIGZpbGU6IHF1aXQgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBvbmUuIiwKLSAg ICAiICAvRVhDRVBUOnBhdHRlcm4iLAotICAgICIgICAgRXhjZXB0aW9uIGxpc3Q6IGRvbid0IHVw bG9hZCBhbnkgZmlsZXMgdGhhdCBtYXRjaCB0aGlzIHBhdHRlcm4uIiwKLSAgICAiICAgIFNlZSBI RUxQIFdJTERDQVJEIGZvciBwYXR0ZXJuIHN5bnRheC4iLAotICAgICIgIC9GSUxFTkFNRVM6e0FV VE9NQVRJQyxDT05WRVJURUQsTElURVJBTH0iLAotICAgICIgICAgV2hldGhlciB0byBjb252ZXJ0 IG91dGJvdW5kIGZpbGVuYW1lcyB0byBjb21tb24gc3ludGF4LiIsCi0jaWZkZWYgUElQRVNFTkQK LSNpZm5kZWYgTk9TUEwKLSAgICAiICAvRklMVEVSOmNvbW1hbmQiLAotICAgICIgICAgUGFzcyBv dXRib3VuZCBmaWxlcyB0aHJvdWdoIHRoZSBnaXZlbiBjb21tYW5kLiIsCi0jZW5kaWYgLyogTk9T UEwgKi8KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotI2lmZGVmIENLU1lNTElOSwotICAgICIgIC9G T0xMT1dJTktTIiwKLSAgICAiICAgIFNlbmQgZmlsZXMgdGhhdCBhcmUgcG9pbnRlZCB0byBieSBz eW1ib2xpYyBsaW5rcy4iLAotICAgICIgIC9OT0ZPTExPV0lOS1MiLAotICAgICIgICAgU2tpcCBv dmVyIHN5bWJvbGljIGxpbmtzIChkZWZhdWx0KS4iLAotI2VuZGlmIC8qIENLU1lNTElOSyAqLwot ICAgICIgIC9MQVJHRVItVEhBTjpudW1iZXIiLAotICAgICIgICAgT25seSB1cGxvYWQgZmlsZXMg dGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcy4iLAotICAgICIg IC9MSVNURklMRTpmaWxlbmFtZSIsCi0gICAgIiAgICBPYnRhaW4gdGhlIGxpc3Qgb2YgZmlsZXMg dG8gdXBsb2FkIGZyb20gdGhlIGdpdmVuIGZpbGUuIiwKLSNpZm5kZWYgTk9DU0VUUwotICAgICIg IC9MT0NBTC1DSEFSQUNURVItU0VUOm5hbWUiLAotICAgICIgICAgV2hlbiB1cGxvYWRpbmcgaW4g dGV4dCBtb2RlIGFuZCBjaGFyYWN0ZXItc2V0IGNvbnZlcnNpb24gaXMiLAotICAgICIgICAgZGVz aXJlZCwgdGhpcyBzcGVjaWZpZXMgdGhlIHNvdXJjZS1maWxlIGNoYXJhY3RlciBzZXQuIiwKLSNl bmRpZiAvKiBOT0NTRVRTICovCi0jaWZkZWYgQ0tfVE1QRElSCi0gICAgIiAgL01PVkUtVE86ZGly ZWN0b3J5IiwKLSAgICAiICAgIEVhY2ggc291cmNlIGZpbGUgdGhhdCBpcyB1cGxvYWRlZCBpcyB0 byBiZSBtb3ZlZCB0byB0aGUgZ2l2ZW4gbG9jYWwiLAotICAgICIgICAgZGlyZWN0b3J5IHdoZW4s IGFuZCBvbmx5IGlmLCB0aGUgdHJhbnNmZXIgaXMgc3VjY2Vzc2Z1bC4iLAotI2VuZGlmIC8qIENL X1RNUERJUiAqLwotICAgICIgIC9OT0JBQ0tVUEZJTEVTIiwKLSAgICAiICAgIERvbid0IHVwbG9h ZCBhbnkgZmlsZXMgd2hvc2UgbmFtZXMgZW5kIHdpdGggLn48bnVtYmVyPn4uIiwKLSNpZmRlZiBV TklYT1JPU0sKLSAgICAiICAvTk9ET1RGSUxFUyIsCi0gICAgIiAgICBEb24ndCB1cGxvYWQgYW55 IGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggcGVyaW9kICguKS4iLAotI2VuZGlmIC8qIFVO SVhPUk9TSyAqLwotICAgICIgIC9OT1QtQUZURVI6ZGF0ZS10aW1lIiwKLSAgICAiICAgIFVwbG9h ZCBvbmx5IGZpbGVzIHRoYXQgYXJlIG5vdCBuZXdlciB0aGFuIHRoZSBnaXZlbiBkYXRlLXRpbWUi LAotICAgICIgIC9OT1QtQkVGT1JFOmRhdGUtdGltZSIsCi0gICAgIiAgICBVcGxvYWQgb25seSBm aWxlcyB0aGF0IGFyZSBub3Qgb2xkZXIgdGhhbiB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKLSNpZmRl ZiBVTklYCi0gICAgIiAgL1BFUk1JU1NJT05TIiwKLSAgICAiICAgIEFzayB0aGUgc2VydmVyIHRv IHNldCB0aGUgcGVybWlzc2lvbnMgb2YgZWFjaCBmaWxlIGl0IHJlY2VpdmVzIiwKLSAgICAiICAg IGFjY29yZGluZyB0byB0aGUgc291cmNlIGZpbGUncyBwZXJtaXNzaW9ucy4iLAotI2VuZGlmIC8q IFVOSVggKi8KLSAgICAiICAvUVVJRVQiLAotICAgICIgICAgU3VwcHJlc3MgdGhlIGZpbGUtdHJh bnNmZXIgZGlzcGxheS4iLAotI2lmZGVmIEZUUF9SRVNUQVJUCi0gICAgIiAgL1JFQ09WRVIiLAot ICAgICIgICAgUmVzdW1lIGFuIHVwbG9hZCB0aGF0IHdhcyBwcmV2aW91c2x5IGludGVycnVwdGVk IGZyb20gdGhlIHBvaW50IG9mIiwKLSAgICAiICAgIGZhaWx1cmUuICBTeW5vbnltOiAvUkVTVEFS VC4iLAotI2VuZGlmIC8qIEZUUF9SRVNUQVJUICovCi0jaWZkZWYgUkVDVVJTSVZFCi0gICAgIiAg L1JFQ1VSU0lWRSIsCi0gICAgIiAgICBTZW5kIGZpbGVzIGZyb20gdGhlIGdpdmVuIGRpcmVjdG9y eSBhbmQgYWxsIHRoZSBkaXJlY3RvcmllcyBiZW5lYXRoIiwKLSAgICAiICAgIGl0LiAgU3lub255 bTogL1NVQkRJUkVDVE9SSUVTLiIsCi0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0gICAgIiAgL1JF TkFNRS1UTzp0ZXh0IiwKLSAgICAiICAgIEVhY2ggc291cmNlIGZpbGUgdGhhdCBpcyB1cGxvYWRl ZCBpcyB0byBiZSByZW5hbWVkIG9uIHRoZSBsb2NhbCIsCi0gICAgIiAgICBsb2NhbCBjb21wdXRl ciBhcyBpbmRpY2F0ZWQgd2hlbiBhbmQgb25seSBpZiwgdGhlIHRyYW5zZmVyIGNvbXBsZXRlcyIs Ci0gICAgIiAgICBzdWNjZXNzZnVsbHkuIiwKLSNpZm5kZWYgTk9DU0VUUwotICAgICIgIC9TRVJW RVItQ0hBUkFDVEVSLVNFVDpuYW1lIiwKLSAgICAiICAgIFdoZW4gdXBsb2FkaW5nIGluIHRleHQg bW9kZSBhbmQgY2hhcmFjdGVyLXNldCBjb252ZXJzaW9uIGlzIGRlc2lyZWQsIiwKLSAgICAiICAg IHRoaXMgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXIgc2V0IHRvIHdoaWNoIHRoZSBmaWxlIHNob3Vs ZCBiZSIsCi0gICAgIiAgICBjb252ZXJ0ZWQgZm9yIHN0b3JhZ2Ugb24gdGhlIHNlcnZlci4iLAot I2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICAiICAvU0VSVkVSLVJFTkFNRTp0ZXh0IiwKLSAgICAi ICAgIEVhY2ggZmlsZSB0aGF0IGlzIHVwbG9hZGVkIGlzIHRvIGJlIHJlbmFtZWQgYXMgaW5kaWNh dGVkIG9uIHRoZSIsCi0gICAgIiAgICBzZXJ2ZXIgYWZ0ZXIsIGFuZCBvbmx5IGlmLCBpZiBhcnJp dmVzIHN1Y2Nlc3NmdWxseS4iLAotICAgICIgIC9TSU1VTEFURSIsCi0gICAgIiAgICBTaG93IHdo aWNoIGZpbGVzIHdvdWxkIGJlIHNlbnQgd2l0aG91dCBhY3R1YWxseSBzZW5kaW5nIHRoZW0uIiwK LSAgICAiICAvU01BTExFUi1USEFOOm51bWJlciIsCi0gICAgIiAgICBVcGxvYWQgb25seSB0aG9z ZSBmaWxlcyBzbWFsbGVyIHRoYW4gdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcy4iLAotICAgICIg IC9URVhUIiwKLSAgICAiICAgIEZvcmNlIHRleHQgbW9kZS4gIFN5bm9ueW06IC9BU0NJSS4iLAot ICAgICIgIC9URU5FWCIsCi0gICAgIiAgICBGb3JjZSBURU5FWCAoVE9QUy0yMCkgbW9kZSAoc2Vl IEhFTFAgU0VUIEZUUCBUWVBFKS4iLAotI2lmbmRlZiBOT0NTRVRTCi0gICAgIiAgL1RSQU5TUEFS RU5UIiwKLSAgICAiICAgIFdoZW4gdXBsb2FkaW5nIGluIHRleHQgbW9kZSwgZG8gbm90IGNvbnZl cnQgY2hyYWN0ZXItc2V0cy4iLAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICAiICAvVFlQRTp7 VEVYVCxCSU5BUll9IiwKLSAgICAiICAgIFVwbG9hZCBvbmx5IGZpbGVzIG9mIHRoZSBnaXZlbiB0 eXBlLiIsCi0jaWZkZWYgRE9VUERBVEUKLSAgICAiICAvVVBEQVRFIiwKLSAgICAiICAgIElmIGEg ZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGV4aXN0cyBvbiB0aGUgc2VydmVyLCB1cGxvYWQgb25seSBp ZiIsCi0gICAgIiAgICB0aGUgbG9jYWwgZmlsZSBpcyBuZXdlci4iLAotI2VuZGlmIC8qIERPVVBE QVRFICovCi0gICAgIiAgL1VOSVFVRS1TRVJWRVItTkFNRVMiLAotICAgICIgICAgQXNrIHRoZSBz ZXJ2ZXIgdG8gY29tcHV0ZSBuZXcgbmFtZXMgZm9yIGFueSBpbmNvbWluZyBmaWxlIHRoYXQgaGFz IiwKLSAgICAiICAgIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgZmlsZS4iLAotICAgICIi Ci19Owotc3RhdGljIGNoYXIgKiBmaHNfb3BuW10gPSB7ICAgICAgICAgICAgIC8qIE9QRU4gKi8K LSNpZmRlZiBDS19TU0wKLSAgICAiU3ludGF4OiBGVFAgWyBPUEVOIF0gWyB7IC9TU0wsIC9UTFMg fSBdIGhvc3RuYW1lIFsgcG9ydCBdIFsgc3dpdGNoZXMgXSIsCi0gICAgIiAgT3BlbnMgYSBjb25u ZWN0aW9uIHRvIHRoZSBGVFAgc2VydmVyIG9uIHRoZSBnaXZlbiBob3N0LiAgVGhlIGRlZmF1bHQi LAotICAgICIgIFRDUCBwb3J0IGlzIDIxICg5OTAgaWYgU1NML1RMUyBpcyB1c2VkKSwgYnV0IGEg ZGlmZmVyZW50IHBvcnQgbnVtYmVyIiwKLSAgICAiICBjYW4gYmUgc3VwcGxpZWQgaWYgbmVjZXNz YXJ5LiAgT3B0aW9uYWwgc3dpdGNoZXMgYXJlOiIsCi0jZWxzZSAvKiBDS19TU0wgKi8KLSAgICAi U3ludGF4OiBGVFAgWyBPUEVOIF0gaG9zdG5hbWUgWyBwb3J0IF0gWyBzd2l0Y2hlcyBdIiwKLSAg ICAiICBPcGVucyBhIGNvbm5lY3Rpb24gdG8gdGhlIEZUUCBzZXJ2ZXIgb24gdGhlIGdpdmVuIGhv c3QuICBUaGUgZGVmYXVsdCIsCi0gICAgIiAgVENQIHBvcnQgaXMgMjEsIGJ1dCBhIGRpZmZlcmVu dCBwb3J0IG51bWJlciBjYW4gYmUgc3VwcGxpZWQgaWYiLAotICAgICIgIG5lY2Vzc2FyeS4gIE9w dGlvbmFsIHN3aXRjaGVzIGFyZToiLAotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICIgIiwKLSAg ICAiICAvQU5PTllNT1VTIiwKLSAgICAiICAgIExvZ3MgeW91IGluIGFub255bW91c2x5LiIsCi0g ICAgIiAgL1VTRVI6dGV4dCIsCi0gICAgIiAgICBTdXBwbGllcyB0aGUgZ2l2ZW4gdGV4dCBhcyB5 b3VyIHVzZXJuYW1lLiIsCi0gICAgIiAgL1BBU1NXT1JEOnRleHQiLAotICAgICIgICAgU3VwcGxp ZXMgdGhlIGdpdmVuIHRleHQgYXMgeW91ciBwYXNzd29yZC4gIElmIHlvdSBpbmNsdWRlIGEgdXNl cm5hbWUiLAotICAgICIgICAgYnV0IG9taXQgdGhpcyBzd2l0Y2ggYW5kIHRoZSBzZXJ2ZXIgcmVx dWlyZXMgYSBwYXNzd29yZCwgeW91IGFyZSIsCi0gICAgIiAgICBwcm9tcHRlZCBmb3IgaXQuIiwK LSAgICAiICAvQUNDT1VOVDp0ZXh0IiwKLSAgICAiICAgIFN1cHBsaWVzIHRoZSBnaXZlbiB0ZXh0 IGFzIHlvdXIgYWNjb3VudCwgaWYgcmVxdWlyZWQgYnkgdGhlIHNlcnZlci4iLAotICAgICIgIC9B Q1RJVkUiLAotICAgICIgICAgRm9yY2VzIGFuIGFjdGl2ZSAocmF0aGVyIHRoYW4gcGFzc2l2ZSkg Y29ubmVjdGlvbi4iLAotICAgICIgIC9QQVNTSVZFIiwKLSAgICAiICAgIEZvcmNlcyBhIHBhc3Np dmUgKHJhdGhlciB0aGFuIGFjdGl2ZSkgY29ubmVjdGlvbi4iLAotICAgICIgIC9OT0lOSVQiLAot ICAgICIgICAgSW5oaWJpdHMgc2VuZGluZyBpbml0aWFsIFJFU1QsIFNUUlUsIGFuZCBNT0RFIGNv bW1hbmRzLCB3aGljaCBhcmUiLAotICAgICIgICAgd2VsbC1rbm93biBzdGFuZGFyZCBjb21tYW5k cywgYnV0IHRvIHdoaWNoIHNvbWUgc2VydmVycyByZWFjdCBiYWRseS4iLAotICAgICIgIC9OT0xP R0lOIiwKLSAgICAiICAgIEluaGliaXRzIGF1dG9sb2dpbiBmb3IgdGhpcyBjb25uZWN0aW9uIG9u bHkuIiwKLSAgICAiIgotfTsKLXN0YXRpYyBjaGFyICogZmhzX29wdFtdID0geyAgICAgICAgICAg ICAvKiBPUFRTLCBPUFRJT05TICovCi0gICAgIlN5bnRheDogRlRQIE9QVElPTlMiLAotICAgICIg IEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gbGlzdCBpdHMgY3VycmVudCBvcHRpb25zLiAgQWR2YW5j ZWQsIG5ldywiLAotICAgICIgIG5vdCBzdXBwb3J0ZWQgYnkgbW9zdCBGVFAgc2VydmVycy4iLAot ICAgICIiCi19Owotc3RhdGljIGNoYXIgKiBmaHNfcHV0W10gPSB7ICAgICAgICAgICAgIC8qIFBV VCwgU0VORCAqLwotICAgICJTeW50YXg6IFsgRlRQIF0gUFVUIFsgc3dpdGNoZXMgXSBmaWxlc3Bl YyBbIGFzLW5hbWUgXSIsCi0gICAgIiAgTGlrZSBGVFAgTVBVVCwgYnV0IG9ubHkgb25lIGZpbGVz cGVjIGlzIGFsbG93ZWQsIGFuZCBpZiBpdCBpcyBmb2xsb3dlZCIsCi0gICAgIiAgYnkgYW4gYWRk aXRpb25hbCBmaWVsZCwgdGhpcyBpcyBpbnRlcnByZXRlZCBhcyB0aGUgbmFtZSB1bmRlciB3aGlj aCIsCi0gICAgIiAgdG8gc2VuZCB0aGUgZmlsZSBvciBmaWxlcy4gIFNlZSBIRUxQIEZUUCBNUFVU LiIsCi0gICAgIiIKLX07Ci1zdGF0aWMgY2hhciAqIGZoc19yZXB1dFtdID0gewkJLyogUkVQVVQs IFJFU0VORCAqLwotICAgICJTeW50YXg6IFsgRlRQIF0gUkVQVVQgWyBzd2l0Y2hlcyBdIGZpbGVz cGVjIFsgYXMtbmFtZSBdIiwKLSAgICAiICBTeW5vbnltIGZvciBGVFAgUFVUIC9SRUNPVkVSLiAg UmVjb3ZlcnMgYW4gaW50ZXJydXB0ZWQgYmluYXJ5LW1vZGUiLAotICAgICIgIHVwbG9hZCBmcm9t IHRoZSBwb2ludCBvZiBmYWlsdXJlIGlmIHRoZSBGVFAgc2VydmVyIHN1cHBvcnRzIHJlY292ZXJ5 LiIsCi0gICAgIiAgU3lub255bTogWyBGVFAgXSBSRVNFTkQuICBGb3IgZGV0YWlscyBzZWUgSEVM UCBGVFAgTVBVVC4iLAotICAgICIiCi19Owotc3RhdGljIGNoYXIgKiBmaHNfcHdkW10gPSB7ICAg ICAgICAgICAgIC8qIFBXRCAqLwotICAgICJTeW50YXg6IEZUUCBQV0QiLAotICAgICIgIEFza3Mg dGhlIEZUUCBzZXJ2ZXIgdG8gcmV2ZWFsIGl0cyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiIs Ci0gICAgIiAgU3lub255bXM6IFJFTU9URSBQV0QsIFJQV0QuIiwKLSAgICAiIgotfTsKLXN0YXRp YyBjaGFyICogZmhzX3F1b1tdID0geyAgICAgICAgICAgICAvKiBRVU9URSAqLwotICAgICJTeW50 YXg6IEZUUCBRVU9URSB0ZXh0IiwKLSAgICAiICBTZW5kcyBhbiBGVFAgcHJvdG9jb2wgY29tbWFu ZCB0byB0aGUgRlRQIHNlcnZlci4gIFVzZSB0aGlzIGNvbW1hbmQiLAotICAgICIgIGZvciBzZW5k aW5nIGNvbW1hbmRzIHRoYXQgS2VybWl0IG1pZ2h0IG5vdCBzdXBwb3J0LiIsCi0gICAgIiIKLX07 Ci1zdGF0aWMgY2hhciAqIGZoc19yZ2VbXSA9IHsgICAgICAgICAgICAgLyogUkVHRVQgKi8KLSAg ICAiU3ludGF4OiBGVFAgUkVHRVQiLAotICAgICIgIFN5bm9ueW0gZm9yIEZUUCBHRVQgL1JFQ09W RVIuIiwKLSAgICAiIgotfTsKLXN0YXRpYyBjaGFyICogZmhzX3JlbltdID0geyAgICAgICAgICAg ICAvKiBSRU5BTUUgKi8KLSAgICAiU3ludGF4OiBGVFAgUkVOQU1FIG5hbWUxIG5hbWUxIiwKLSAg ICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3 aG9zZSBuYW1lIGlzIG5hbWUxIiwKLSAgICAiICBhbmQgd2hpY2ggcmVzaWRlcyBpbiB0aGUgRlRQ IHNlcnZlcidzIGZpbGUgc3lzdGVtLCB0byBuYW1lMi4gIFdvcmtzIiwKLSAgICAiICBvbmx5IGZv ciBzaW5nbGUgZmlsZXM7IHdpbGRjYXJkcyBhcmUgbm90IGFjY2VwdGVkLiIsCi0gICAgIiIKLX07 Ci1zdGF0aWMgY2hhciAqIGZoc19yZXNbXSA9IHsgICAgICAgICAgICAgLyogUkVTRVQgKi8KLSAg ICAiU3ludGF4OiBGVFAgUkVTRVQiLAotICAgICIgIEFza3MgdGhlIHNlcnZlciB0byBsb2cgb3V0 IHlvdXIgc2Vzc2lvbiwgdGVybWluYXRpbmcgeW91ciBhY2Nlc3MiLAotICAgICIgIHJpZ2h0cywg d2l0aG91dCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uLiIsCi0gICAgIiIKLX07Ci1zdGF0aWMgY2hh ciAqIGZoc19ybWRbXSA9IHsgICAgICAgICAgICAgLyogUk1ESVIgKi8KLSAgICAiU3ludGF4OiBG VFAgUk1ESVIgZGlyZWN0b3J5IiwKLSAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIHJlbW92 ZSB0aGUgZGlyZWN0b3J5IHdob3NlIG5hbWUgaXMgZ2l2ZW4uIiwKLSAgICAiICBUaGlzIHVzdWFs bHkgcmVxdWlyZXMgdGhlIGRpcmVjdG9yeSB0byBiZSBlbXB0eS4gIFN5bm9ueW1zOiBSRU1PVEUi LAotICAgICIgIFJNRElSLCBSUk1ESVIuIiwKLSAgICAiIgotfTsKLXN0YXRpYyBjaGFyICogZmhz X3NpdFtdID0geyAgICAgICAgICAgICAvKiBTSVRFICovCi0gICAgIlN5bnRheDogRlRQIFNJVEUg dGV4dCIsCi0gICAgIiAgU2VuZHMgYSBzaXRlLXNwZWNpZmljIGNvbW1hbmQgdG8gdGhlIEZUUCBz ZXJ2ZXIuIiwKLSAgICAiIgotfTsKLXN0YXRpYyBjaGFyICogZmhzX3NpeltdID0geyAgICAgICAg ICAgICAvKiBTSVpFICovCi0gICAgIlN5bnRheDogRlRQIFNJWkUgZmlsZW5hbWUiLAotICAgICIg IEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gc2VuZCBhIG51bWVyaWMgc3RyaW5nIHJlcHJlc2VudGlu ZyB0aGUgc2l6ZSIsCi0gICAgIiAgb2YgdGhlIGdpdmVuIGZpbGUuIiwKLSAgICAiIgotfTsKLXN0 YXRpYyBjaGFyICogZmhzX3N0YVtdID0geyAgICAgICAgICAgICAvKiBTVEFUVVMgKi8KLSAgICAi U3ludGF4OiBGVFAgU1RBVFVTIFsgZmlsZW5hbWUgXSIsCi0gICAgIiAgQXNrcyB0aGUgRlRQIHNl cnZlciB0byByZXBvcnQgaXRzIHN0YXR1cy4gIElmIGEgZmlsZW5hbWUgaXMgZ2l2ZW4sIiwKLSAg ICAiICB0aGUgRlRQIHNlcnZlciBzaG91bGQgcmVwb3J0IGRldGFpbHMgYWJvdXQgdGhlIGZpbGUu IiwKLSAgICAiIgotfTsKLXN0YXRpYyBjaGFyICogZmhzX3N5c1tdID0geyAgICAgICAgICAgICAv KiBTWVNURU0gKi8KLSAgICAiU3ludGF4OiBGVFAgU1lTVEVNIiwKLSAgICAiICBBc2tzIHRoZSBG VFAgc2VydmVyIHRvIHJlcG9ydCBpdHMgb3BlcmF0aW5nIHN5c3RlbSB0eXBlLiIsCi0gICAgIiIK LX07Ci1zdGF0aWMgY2hhciAqIGZoc190eXBbXSA9IHsgICAgICAgICAgICAgLyogVFlQRSAqLwot ICAgICJTeW50YXg6IEZUUCBUWVBFIHsgVEVYVCwgQklOQVJZLCBURU5FWCB9IiwKLSAgICAiICBQ dXRzIHRoZSBjbGllbnQgYW5kIHNlcnZlciBpbiB0aGUgaW5kaWNhdGVkIHRyYW5zZmVyIG1vZGUu IiwKLSAgICAiICBBU0NJSSBpcyBhIHN5bm9ueW0gZm9yIFRFWFQuICBURU5FWCBpcyB1c2VkIG9u bHkgZm9yIHVwbG9hZGluZyA4LWJpdCIsCi0gICAgIiAgYmluYXJ5IGZpbGVzIHRvIGEgMzYtYml0 IHBsYXRmb3JtcyBzdWNoIGFzIFRFTkVYIG9yIFRPUFMtMjAgYW5kL29yIiwKLSAgICAiICBkb3du bG9hZGluZyBmaWxlcyBmcm9tIFRFTkVYIG9yIFRPUFMtMjAgdGhhdCBoYXZlIGJlZW4gdXBsb2Fk ZWQgaW4iLAotICAgICIgIFRFTkVYIG1vZGUuIiwKLSAgICAiIgotfTsKLXN0YXRpYyBjaGFyICog ZmhzX3VtYVtdID0geyAgICAgICAgICAgICAvKiBVTUFTSyAqLwotICAgICJTeW50YXg6IEZUUCBV TUFTSyBudW1iZXIiLAotICAgICIgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gc2V0IGl0cyBmaWxl IGNyZWF0aW9uIG1vZGUgbWFzay4gIEFwcGxpZXMiLAotICAgICIgIG9ubHkgKG9yIG1haW5seSkg dG8gVU5JWC1iYXNlZCBGVFAgc2VydmVycy4iLAotICAgICIiCi19Owotc3RhdGljIGNoYXIgKiBm aHNfY2hrW10gPSB7ICAgICAgICAgICAgIC8qIENIRUNLICovCi0gICAgIlN5bnRheDogRlRQIENI RUNLIHJlbW90ZS1maWxlc3BlYyIsCi0gICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZlciBpZiB0aGUg Z2l2ZW4gZmlsZSBvciBmaWxlcyBleGlzdC4gIElmIHRoZSIsCi0gICAgIiAgcmVtb3RlLWZpbGVz cGVjIGNvbnRhaW5zIHdpbGRjYXJkcywgdGhpcyBjb21tYW5kIGZhaWxzIGlmIG5vIHNlcnZlciIs Ci0gICAgIiAgZmlsZXMgbWF0Y2gsIGFuZCBzdWNjZWVkcyBpZiBhdCBsZWFzdCBvbmUgZmlsZSBt YXRjaGVzLiAgSWYgdGhlIiwKLSAgICAiICByZW1vdGUtZmlsZXNwZWMgZG9lcyBub3QgY29udGFp biB3aWxkY2FyZHMsIHRoaXMgY29tbWFuZCBzdWNjZWVkcyBpZiIsCi0gICAgIiAgdGhlIGdpdmVu IGZpbGUgZXhpc3RzIGFuZCBmYWlscyBpZiBpdCBkb2VzIG5vdC4iLAotICAgICIiCi19Owotc3Rh dGljIGNoYXIgKiBmaHNfZW5hW10gPSB7CQkvKiBFTkFCTEUgKi8KLSAgICAiU3ludGF4OiBGVFAg RU5BQkxFIHsgQVVUSCwgRkVBVCwgTURUTSwgTUxTVCwgU0laRSB9IiwKLSAgICAiICBFbmFibGVz IHRoZSB1c2Ugb2YgdGhlIGdpdmVuIEZUUCBwcm90b2NvbCBjb21tYW5kIGluIGNhc2UgaXQgaGFz IGJlZW4iLAotICAgICIgIGRpc2FibGVkIChidXQgdGhpcyBpcyBubyBndWFyYW50ZWUgdGhhdCB0 aGUgRlRQIHNlcnZlciB1bmRlcnN0YW5kcyBpdCkuIgotLAotICAgICIgIFVzZSBTSE9XIEZUUCB0 byBzZWUgd2hpY2ggb2YgdGhlc2UgY29tbWFuZHMgaXMgZW5hYmxlZCBhbmQgZGlzYWJsZWQuIiwK LSAgICAiICBBbHNvIHNlZSBGVFAgRElTQUJMRS4iLAotICAgICIiCi19Owotc3RhdGljIGNoYXIg KiBmaHNfZGlzW10gPSB7CQkvKiBESVNBQkxFICovCi0gICAgIlN5bnRheDogRlRQIERJU0FCTEUg eyBBVVRILCBGRUFULCBNRFRNLCBNTFNULCBTSVpFIH0iLAotICAgICIgIERpc2FibGVzIHRoZSB1 c2Ugb2YgdGhlIGdpdmVuIEZUUCBwcm90b2NvbCBjb21tYW5kLiIsCi0gICAgIiAgQWxzbyBzZWUg RlRQIEVOQUJMRS4iLAotICAgICIiCi19OwotCi0jZW5kaWYgLyogTk9IRUxQICovCi0KLWludAot ZG9mdHBobHAoKSB7Ci0gICAgaW50IGN4OwotICAgIGlmICgoY3ggPSBjbWtleShmdHBjbWR0YWIs bmZ0cGNtZCwiIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgIGlmIChjeCAhPSAtMykKLSAgICAg ICAgcmV0dXJuKGN4KTsKLSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICByZXR1cm4o eCk7Ci0KLSNpZmRlZiBOT0hFTFAKLSAgICBwcmludGYoIlNvcnJ5LCBubyBoZWxwIGF2YWlsYWJs ZVxuIik7Ci0jZWxzZQotICAgIHN3aXRjaCAoY3gpIHsKLSAgICAgIGNhc2UgLTM6Ci0gICAgICAg IHJldHVybihobXNnYShmaHNfZnRwKSk7Ci0gICAgICBjYXNlIEZUUF9BQ0M6ICAgICAgICAgICAg ICAgICAgICAgLyogQUNDT1VOVCAqLwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX2FjYykpOwot ICAgICAgY2FzZSBGVFBfQVBQOiAgICAgICAgICAgICAgICAgICAgIC8qIEFQUEVORCAqLwotICAg ICAgICByZXR1cm4oaG1zZ2EoZmhzX2FwcCkpOwotICAgICAgY2FzZSBGVFBfQ0xTOiAgICAgICAg ICAgICAgICAgICAgIC8qIEJZRSwgQ0xPU0UgKi8KLSAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19j bHMpKTsKLSAgICAgIGNhc2UgRlRQX0NXRDogICAgICAgICAgICAgICAgICAgICAvKiBDRCwgQ1dE ICovCi0gICAgICAgIHJldHVybihobXNnYShmaHNfY3dkKSk7Ci0gICAgICBjYXNlIEZUUF9HVVA6 ICAgICAgICAgICAgICAgICAgICAgLyogQ0RVUCwgVVAgKi8KLSAgICAgICAgcmV0dXJuKGhtc2dh KGZoc19ndXApKTsKLSAgICAgIGNhc2UgRlRQX0NITTogICAgICAgICAgICAgICAgICAgICAvKiBD SE1PRCAqLwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX2NobSkpOwotICAgICAgY2FzZSBGVFBf TURFOiAgICAgICAgICAgICAgICAgICAgIC8qIERFTEVURSwgTURFTEVURSAqLwotICAgICAgICBy ZXR1cm4oaG1zZ2EoZmhzX21kZSkpOwotICAgICAgY2FzZSBGVFBfRElSOiAgICAgICAgICAgICAg ICAgICAgIC8qIERJUkVDVE9SWSAqLwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX2RpcikpOwot ICAgICAgY2FzZSBGVFBfVkRJOiAgICAgICAgICAgICAgICAgICAgIC8qIFZESVJFQ1RPUlkgKi8K LSAgICAgICAgcmV0dXJuKGhtc2dhKGZoc192ZGkpKTsKLSAgICAgIGNhc2UgRlRQX0ZFQTogICAg ICAgICAgICAgICAgICAgICAvKiBGRUFUVVJFUyAqLwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhz X2ZlYSkpOwotICAgICAgY2FzZSBGVFBfR0VUOiAgICAgICAgICAgICAgICAgICAgIC8qIEdFVCAq LwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX2dldCkpOwotICAgICAgY2FzZSBGVFBfSExQOiAg ICAgICAgICAgICAgICAgICAgIC8qIEhFTFAgKi8KLSAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19o bHApKTsKLSAgICAgIGNhc2UgRlRQX0lETDogICAgICAgICAgICAgICAgICAgICAvKiBJRExFICov Ci0gICAgICAgIHJldHVybihobXNnYShmaHNfaWRsKSk7Ci0gICAgICBjYXNlIEZUUF9VU1I6ICAg ICAgICAgICAgICAgICAgICAgLyogVVNFUiwgTE9HSU4gKi8KLSAgICAgICAgcmV0dXJuKGhtc2dh KGZoc191c3IpKTsKLSAgICAgIGNhc2UgRlRQX01HRTogICAgICAgICAgICAgICAgICAgICAvKiBN R0VUICovCi0gICAgICAgIHJldHVybihobXNnYShmaHNfbWdlKSk7Ci0gICAgICBjYXNlIEZUUF9N S0Q6ICAgICAgICAgICAgICAgICAgICAgLyogTUtESVIgKi8KLSAgICAgICAgcmV0dXJuKGhtc2dh KGZoc19ta2QpKTsKLSAgICAgIGNhc2UgRlRQX01PRDogICAgICAgICAgICAgICAgICAgICAvKiBN T0RUSU1FICovCi0gICAgICAgIHJldHVybihobXNnYShmaHNfbW9kKSk7Ci0gICAgICBjYXNlIEZU UF9NUFU6ICAgICAgICAgICAgICAgICAgICAgLyogTVBVVCAqLwotICAgICAgICByZXR1cm4oaG1z Z2EoZmhzX21wdSkpOwotICAgICAgY2FzZSBGVFBfT1BOOiAgICAgICAgICAgICAgICAgICAgIC8q IE9QRU4gKi8KLSAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19vcG4pKTsKLSAgICAgIGNhc2UgRlRQ X09QVDogICAgICAgICAgICAgICAgICAgICAvKiBPUFRTLCBPUFRJT05TICovCi0gICAgICAgIHJl dHVybihobXNnYShmaHNfb3B0KSk7Ci0gICAgICBjYXNlIEZUUF9QVVQ6ICAgICAgICAgICAgICAg ICAgICAgLyogUFVULCBTRU5EICovCi0gICAgICAgIHJldHVybihobXNnYShmaHNfcHV0KSk7Ci0g ICAgICBjYXNlIEZUUF9SRVA6ICAgICAgICAgICAgICAgICAgICAgLyogUkVQVVQsIFJFU0VORCAq LwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3JlcHV0KSk7Ci0gICAgICBjYXNlIEZUUF9QV0Q6 ICAgICAgICAgICAgICAgICAgICAgLyogUFdEICovCi0gICAgICAgIHJldHVybihobXNnYShmaHNf cHdkKSk7Ci0gICAgICBjYXNlIEZUUF9RVU86ICAgICAgICAgICAgICAgICAgICAgLyogUVVPVEUg Ki8KLSAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19xdW8pKTsKLSAgICAgIGNhc2UgRlRQX1JHRTog ICAgICAgICAgICAgICAgICAgICAvKiBSRUdFVCAqLwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhz X3JnZSkpOwotICAgICAgY2FzZSBGVFBfUkVOOiAgICAgICAgICAgICAgICAgICAgIC8qIFJFTkFN RSAqLwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3JlbikpOwotICAgICAgY2FzZSBGVFBfUkVT OiAgICAgICAgICAgICAgICAgICAgIC8qIFJFU0VUICovCi0gICAgICAgIHJldHVybihobXNnYShm aHNfcmVzKSk7Ci0gICAgICBjYXNlIEZUUF9STUQ6ICAgICAgICAgICAgICAgICAgICAgLyogUk1E SVIgKi8KLSAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19ybWQpKTsKLSAgICAgIGNhc2UgRlRQX1NJ VDogICAgICAgICAgICAgICAgICAgICAvKiBTSVRFICovCi0gICAgICAgIHJldHVybihobXNnYShm aHNfc2l0KSk7Ci0gICAgICBjYXNlIEZUUF9TSVo6ICAgICAgICAgICAgICAgICAgICAgLyogU0la RSAqLwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3NpeikpOwotICAgICAgY2FzZSBGVFBfU1RB OiAgICAgICAgICAgICAgICAgICAgIC8qIFNUQVRVUyAqLwotICAgICAgICByZXR1cm4oaG1zZ2Eo ZmhzX3N0YSkpOwotICAgICAgY2FzZSBGVFBfU1lTOiAgICAgICAgICAgICAgICAgICAgIC8qIFNZ U1RFTSAqLwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3N5cykpOwotICAgICAgY2FzZSBGVFBf VFlQOiAgICAgICAgICAgICAgICAgICAgIC8qIFRZUEUgKi8KLSAgICAgICAgcmV0dXJuKGhtc2dh KGZoc190eXApKTsKLSAgICAgIGNhc2UgRlRQX1VNQTogICAgICAgICAgICAgICAgICAgICAvKiBV TUFTSyAqLwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3VtYSkpOwotICAgICAgY2FzZSBGVFBf Q0hLOiAgICAgICAgICAgICAgICAgICAgIC8qIENIRUNLICovCi0gICAgICAgIHJldHVybihobXNn YShmaHNfY2hrKSk7Ci0gICAgICBjYXNlIEZUUF9FTkE6Ci0gICAgICAgIHJldHVybihobXNnYShm aHNfZW5hKSk7Ci0gICAgICBjYXNlIEZUUF9ESVM6Ci0gICAgICAgIHJldHVybihobXNnYShmaHNf ZGlzKSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBwcmludGYoIlNvcnJ5LCBoZWxwIGF2YWls YWJsZSBmb3IgdGhpcyBjb21tYW5kLlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRp ZiAvKiBOT0hFTFAgKi8KLSAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotfQotCi1pbnQKLWRvc2V0 ZnRwaGxwKCkgewotICAgIGludCBjeDsKLSAgICBpZiAoKGN4ID0gY21rZXkoZnRwc2V0LG5mdHBz ZXQsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICBpZiAoY3ggIT0gLTMpCi0gICAgICAgIHJl dHVybihjeCk7Ci0gICAgaWYgKGN4ICE9IC0zKQotICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixhdG1i dWYsVE1QQlVGU0laKTsKLSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICByZXR1cm4o eCk7Ci0KLSNpZmRlZiBOT0hFTFAKLSAgICBwcmludGYoIlNvcnJ5LCBubyBoZWxwIGF2YWlsYWJs ZVxuIik7Ci0jZWxzZQotICAgIHN3aXRjaCAoY3gpIHsKLSAgICAgIGNhc2UgLTM6Ci0gICAgICAg IHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgcGFyYW1ldGVyIHZhbHVlXG4iKTsKLSAgICAgICAg cHJpbnRmKCIgIFR5cGUgXCJoZWxwIHNldCBmdHAgP1wiIGZvciBhIGxpc3Qgb2YgcGFyYW1ldGVy cy5cbiIpOwotICAgICAgICBwcmludGYoIiAgVHlwZSBcImhlbHAgc2V0IGZ0cCB4eHhcIiBmb3Ig aW5mb3JtYXRpb24gYWJvdXQgc2V0dGluZ1xuIik7Ci0gICAgICAgIHByaW50ZigiICBwYXJhbWV0 ZXIgeHh4LiAgVHlwZSBcInNob3cgZnRwXCIgZm9yIGN1cnJlbnQgdmFsdWVzLlxuXG4iKTsKLSAg ICAgICAgcmV0dXJuKDApOwotCi0gICAgICBjYXNlIEZUU19CVUc6Ci0JcHJpbnRmKCJcblN5bnRh eDogU0VUIEZUUCBCVUcgPG5hbWU+IHtPTiwgT0ZGfVxuIik7Ci0JcHJpbnRmKAotCSAgICAiICBB Y3RpdmF0ZXMgYSB3b3JrYXJvdW5kIGZvciB0aGUgbmFtZWQgYnVnIGluIHRoZSBGVFAgc2VydmVy LlxuIik7Ci0JcHJpbnRmKCIgIFR5cGUgU0VUIEZUUCBCVUcgPyBmb3IgYSBsaXN0IG9mIG5hbWVz LlxuIik7Ci0JcHJpbnRmKCIgIEZvciBlYWNoIGJ1ZywgdGhlIGRlZmF1bHQgaXMgT0ZGXG5cbiIp OwotCXJldHVybigwKTsKLQotI2lmZGVmIEZUUF9TRUNVUklUWQotICAgICAgY2FzZSBGVFNfQVRQ OiAgICAgICAgICAgICAgICAgICAgIC8qICJhdXRodHlwZSIgKi8KLSAgICAgICAgcHJpbnRmKCJc blN5bnRheDogU0VUIEZUUCBBVVRIVFlQRSBsaXN0XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIFNw ZWNpZmllcyBhbiBvcmRlcmVkIGxpc3Qgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kcyB0byBiZVxu IgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcHJpbnRmKCIgIHdoZW4gRlRQIEFVVE9BVVRI RU5USUNBVElPTiBpcyBPTi4gIFRoZSBkZWZhdWx0IGxpc3QgaXM6XG4iKTsKLSAgICAgICAgcHJp bnRmKCIgIEdTU0FQSS1LUkI1LCBTUlAsIEtFUkJFUk9TX1Y0LCBUTFMsIFNTTC5cblxuIik7Ci0g ICAgICAgIHJldHVybigwKTsKLQotICAgICAgY2FzZSBGVFNfQVVUOiAgICAgICAgICAgICAgICAg ICAgIC8qICJhdXRvYXV0aGVudGljYXRpb24iICovCi0gICAgICAgIHByaW50ZigiXG5TeW50YXg6 U0VUIEZUUCBBVVRPQVVUSEVOVElDQVRJT04geyBPTiwgT0ZGIH1cbiIpOwotICAgICAgICBwcmlu dGYoIiAgVGVsbHMgd2hldGhlciBhdXRoZW50aWNhdGlvbiBzaG91bGQgYmUgbmVnb3RpYXRlZCBi eSB0aGVcbiIpOwotICAgICAgICBwcmludGYoIiAgRlRQIE9QRU4gY29tbWFuZC4gIERlZmF1bHQg aXMgT04uXG5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGVFNfQ1JZOiAgICAg ICAgICAgICAgICAgICAgIC8qICJhdXRvZW5jcnlwdGlvbiIgKi8KLSAgICAgICAgcHJpbnRmKCJc blNFVCBGVFAgQVVUT0VOQ1JZUFRJT04geyBPTiwgT0ZGIH1cbiIpOwotICAgICAgICBwcmludGYo IiAgVGVsbHMgd2hldGhlciBlbmNyeXB0aW9uIChwcml2YWN5KSBzaG91bGQgYmUgbmVnb3RpYXRl ZFxuIik7Ci0gICAgICAgIHByaW50ZigiICBieSB0aGUgRlRQIE9QRU4gY29tbWFuZC4gIERlZmF1 bHQgaXMgT04uXG5cbiIpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBGVFBfU0VDVVJJVFkg Ki8KLQotICAgICAgY2FzZSBGVFNfTE9HOiAgICAgICAgICAgICAgICAgICAgIC8qICJhdXRvbG9n aW4iICovCi0gICAgICAgIHByaW50ZigiXG5TRVQgRlRQIEFVVE9MT0dJTiB7IE9OLCBPRkYgfVxu Iik7Ci0gICAgICAgIHByaW50ZigiICBUZWxscyBLZXJtaXQgd2hldGhlciB0byB0cnkgdG8gbG9n IHlvdSBpbiBhdXRvbWF0aWNhbGx5XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIGFzIHBhcnQgb2Yg dGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy5cblxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBj YXNlIEZUU19ESVM6Ci0gICAgICAgIHByaW50ZigiXG5TRVQgRlRQIERJU1BMQVkgeyBCUklFRiwg RlVMTFNDUkVFTiwgQ1JULCAuLi4gfVxuIik7Ci0JcHJpbnRmKCIgIENob29zZXMgdGhlIGZpbGUt dHJhbnNmZXIgZGlzcGxheSBzdHlsZSBmb3IgRlRQLlxuIik7Ci0gICAgICAgIHByaW50ZigiICBM aWtlIFNFVCBUUkFOU0ZFUiBESVNQTEFZIGJ1dCBhcHBsaWVzIG9ubHkgdG8gRlRQLlxuXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0KLSNpZm5kZWYgTk9DU0VUUwotICAgICAgY2FzZSBGVFNfWExBOiAg ICAgICAgICAgICAgICAgICAgIC8qICJjaGFyYWN0ZXItc2V0LXRyYW5zbGF0aW9uIiAqLwotICAg ICAgICBwcmludGYoIlxuU0VUIEZUUCBDSEFSQUNURVItU0VULVRSQU5TTEFUSU9OIHsgT04sIE9G RiB9XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIFdoZXRoZXIgdG8gdHJhbnNsYXRlIGNoYXJhY3Rl ciBzZXRzIHdoZW4gdHJhbnNmZXJyaW5nXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIHRleHQgZmls ZXMgd2l0aCBGVFAuICBPRkYgYnkgZGVmYXVsdC5cblxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0j ZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICAgY2FzZSBGVFNfRk5DOiAgICAgICAgICAgICAgICAg ICAgIC8qICJjb2xsaXNpb24iICovCi0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgcHJp bnRmKAotIlN5bnRheDogU0VUIEZUUCBDT0xMSVNJT04geyBCQUNLVVAsUkVOQU1FLFVQREFURSxE SVNDQVJELEFQUEVORCxPVkVSV1JJVEUgfVxuIgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAg cHJpbnRmKCIgIFRlbGxzIHdoYXQgZG8gd2hlbiBhbiBpbmNvbWluZyBmaWxlIGhhcyB0aGUgc2Ft ZSBuYW1lIGFzXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIGFuIGV4aXN0aW5nIGZpbGUgd2hlbiBk b3dubG9hZGluZyB3aXRoIEZUUC5cblxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0jaWZkZWYgRlRQ X1NFQ1VSSVRZCi0gICAgICBjYXNlIEZUU19DUEw6ICAgICAgICAgICAgICAgICAgICAgLyogImNv bW1hbmQtcHJvdGVjdGlvbi1sZXZlbCIgKi8KLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAg ICBwcmludGYoCi0iU3ludGF4OiBTRVQgRlRQIENPTU1BTkQtUFJPVEVDVElPTi1MRVZFTCB7IENM RUFSLENPTkZJREVOVElBTCxQUklWQVRFLFNBRkUgfSIKLSAgICAgICAgICAgICAgICk7Ci0gICAg ICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgcHJpbnRmKAotIiAgVGVsbHMgd2hhdCBsZXZlbCBv ZiBwcm90ZWN0aW9uIGlzIGFwcGxpZWQgdG8gdGhlIEZUUCBjb21tYW5kIGNoYW5uZWwuXG5cbiIp OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRlRTX0NGVzogICAgICAgICAgICAgICAgICAg ICAvKiAiY3JlZGVudGlhbC1mb3J3YXJkaW5nIiAqLwotICAgICAgICBwcmludGYoIlxuU3ludGF4 OiBTRVQgRlRQIENSRURFTlRJQUwtRk9SV0FSRElORyB7IE9OLCBPRkYgfVxuIik7Ci0gICAgICAg IHByaW50ZigiICBUZWxscyB3aGV0aGVyIGVuZC11c2VyIGNyZWRlbnRpYWxzIGFyZSB0byBiZSBm b3J3YXJkZWRcbiIpOwotICAgICAgICBwcmludGYoIiAgdG8gdGhlIHNlcnZlciBpZiBzdXBwb3J0 ZWQgYnkgdGhlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZFxuIik7Ci0gICAgICAgIHByaW50ZigiICAo R1NTQVBJLUtSQjUgb25seSkuXG5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRlRT X0RQTDogICAgICAgICAgICAgICAgICAgICAvKiAiZGF0YS1wcm90ZWN0aW9uLWxldmVsIiAqLwot ICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIHByaW50ZigKLSJTeW50YXg6IFNFVCBGVFAg REFUQS1QUk9URUNUSU9OLUxFVkVMIHsgQ0xFQVIsQ09ORklERU5USUFMLFBSSVZBVEUsU0FGRSB9 IgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBwcmlu dGYoCi0iICBUZWxscyB3aGF0IGxldmVsIG9mIHByb3RlY3Rpb24gaXMgYXBwbGllZCB0byB0aGUg RlRQIGRhdGEgY2hhbm5lbC5cblxuIik7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIEZUUF9T RUNVUklUWSAqLwotCi0gICAgICBjYXNlIEZUU19EQkc6ICAgICAgICAgICAgICAgICAgICAgLyog ImRlYnVnIiAqLwotICAgICAgICBwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQIERFQlVHIHsgT04s IE9GRiB9XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIFdoZXRoZXIgdG8gcHJpbnQgRlRQIHByb3Rv Y29sIG1lc3NhZ2VzLlxuXG4iKTsKLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgICBjYXNlIEZU U19FUlI6ICAgICAgICAgICAgICAgICAgICAgLyogImVycm9yLWFjdGlvbiIgKi8KLSAgICAgICAg cHJpbnRmKCJcblN5bnRheDogU0VUIEZUUCBFUlJPUi1BQ1RJT04geyBRVUlULCBQUk9DRUVEIH1c biIpOwotICAgICAgICBwcmludGYoIiAgV2hhdCB0byBkbyB3aGVuIGFuIGVycm9yIG9jY3VycyB3 aGVuIHRyYW5zZmVycmluZyBhIGdyb3VwXG4iKQotICAgICAgICAgIDsKLSAgICAgICAgcHJpbnRm KCIgIG9mIGZpbGVzOiBxdWl0IGFuZCBmYWlsLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IGZpbGUu XG5cbiIpOwotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2UgRlRTX0NOVjogICAgICAg ICAgICAgICAgICAgICAvKiAiZmlsZW5hbWVzIiAqLwotICAgICAgICBwcmludGYoIlxuU3ludGF4 OiBTRVQgRlRQIEZJTEVOQU1FUyB7IEFVVE8sIENPTlZFUlRFRCwgTElURVJBTCB9XG4iKTsKLSAg ICAgICAgcHJpbnRmKCIgIFdoYXQgdG8gZG8gd2l0aCBmaWxlbmFtZXM6IGNvbnZlcnQgdGhlbSwg dGFrZSBhbmQgdXNlIHRoZW1cbiIKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHByaW50Zigi ICBsaXRlcmFsbHk7IG9yIGNob29zZSB3aGF0IHRvIGRvIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24g dGhlXG4iCi0gICAgICAgICAgICAgICApOwotICAgICAgICBwcmludGYoIiAgT1MgdHlwZSBvZiB0 aGUgc2VydmVyLiAgVGhlIGRlZmF1bHQgaXMgQVVUTy5cblxuIik7Ci0gICAgICAgIHJldHVybigw KTsKLQotICAgICAgY2FzZSBGVFNfUFNWOiAgICAgICAgICAgICAgICAgICAgIC8qICJwYXNzaXZl LW1vZGUiICovCi0gICAgICAgIHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgUEFTU0lWRS1NT0RF IHsgT04sIE9GRiB9XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIFdoZXRoZXIgdG8gdXNlIHBhc3Np dmUgbW9kZSwgd2hpY2ggaGVscHMgdG8gZ2V0IHRocm91Z2hcbiIpOwotICAgICAgICBwcmludGYo IiAgZmlyZXdhbGxzLiAgT04gYnkgZGVmYXVsdC5cblxuIik7Ci0gICAgICAgIHJldHVybigwKTsK LQotICAgICAgY2FzZSBGVFNfUFJNOiAgICAgICAgICAgICAgICAgICAgIC8qICJwZXJtaXNzaW9u cyIgKi8KLSAgICAgICAgcHJpbnRmKCJcblN5bnRheDogU0VUIEZUUCBQRVJNSVNTSU9OUyB7IEFV VE8sIE9OLCBPRkYgfVxuIik7Ci0gICAgICAgIHByaW50ZigiICBXaGV0aGVyIHRvIHRyeSB0byBz ZW5kIGZpbGUgcGVybWlzc2lvbnMgd2hlbiB1cGxvYWRpbmcuXG4iKTsKLSAgICAgICAgcHJpbnRm KCIgIE9GRiBieSBkZWZhdWx0LiAgQVVUTyBtZWFucyBvbmx5IGlmIGNsaWVudCBhbmQgc2VydmVy XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIGhhdmUgdGhlIHNhbWUgT1MgdHlwZS5cblxuIik7Ci0g ICAgICAgIHJldHVybigwKTsKLQotICAgICAgY2FzZSBGVFNfVFNUOiAgICAgICAgICAgICAgICAg ICAgIC8qICJwcm9ncmVzcy1tZXNzYWdlcyIgKi8KLSAgICAgICAgcHJpbnRmKCJcblN5bnRheDog U0VUIEZUUCBQUk9HUkVTUy1NRVNTQUdFUyB7IE9OLCBPRkYgfVxuIik7Ci0gICAgICAgIHByaW50 ZigiICBXaGV0aGVyIEtlcm1pdCBzaG91bGQgcHJpbnQgbG9jYWxseS1nZW5lcmF0ZWQgZmVlZGJh Y2tcbiIpOwotICAgICAgICBwcmludGYoIiAgbWVzc2FnZXMgZm9yIGVhY2ggbm9uLWZpbGUtdHJh bnNmZXIgY29tbWFuZC4iKTsKLSAgICAgICAgcHJpbnRmKCIgIE9OIGJ5IGRlZmF1bHQuXG5cbiIp OwotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2UgRlRTX1NQQzogICAgICAgICAgICAg ICAgICAgICAvKiAic2VuZC1wb3J0LWNvbW1hbmRzIiAqLwotICAgICAgICBwcmludGYoIlxuU3lu dGF4OiBTRVQgRlRQIFNFTkQtUE9SVC1DT01NQU5EUyB7IE9OLCBPRkYgfVxuIik7Ci0gICAgICAg IHByaW50ZigiICBXaGV0aGVyIEtlcm1pdCBzaG91bGQgc2VuZCBhIG5ldyBQT1JUIGNvbW1hbmQg Zm9yIGVhY2giKTsKLSAgICAgICAgcHJpbnRmKCIgIHRhc2suXG5cbiIpOwotICAgICAgICByZXR1 cm4oMCk7Ci0KLSNpZm5kZWYgTk9DU0VUUwotICAgICAgY2FzZSBGVFNfQ1NSOiAgICAgICAgICAg ICAgICAgICAgIC8qICJzZXJ2ZXItY2hhcmFjdGVyLXNldCIgKi8KLSAgICAgICAgcHJpbnRmKCJc blN5bnRheDogU0VUIEZUUCBTRVJWRVItQ0hBUkFDVEVSLVNFVCBuYW1lXG4iKTsKLSAgICAgICAg cHJpbnRmKCIgIFRoZSBuYW1lIG9mIHRoZSBjaGFyYWN0ZXIgc2V0IHVzZWQgZm9yIHRleHQgZmls ZXMgb24gdGhlXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIHNlcnZlci4gIEVudGVyIGEgbmFtZSBv ZiAnPycgZm9yIGEgbWVudS5cblxuIik7Ci0gICAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBO T0NTRVRTICovCi0KLSAgICAgIGNhc2UgRlRTX1NUTzoJCQkvKiAic2VydmVyLXRpbWUtb2Zmc2V0 ICovCi0JcHJpbnRmKAotIlxuU3ludGF4OiBTRVQgRlRQIFNFUlZFUi1USU1FLU9GRlNFVCAraGhb Om1tWzpzc11dIG9yIC1oaFs6bW1bOnNzXV1cbiIpOwotICAgICAgICBwcmludGYoCi0iICBTcGVj aWZpZXMgYW4gb2Zmc2V0IHRvIGFwcGx5IHRvIHRoZSBzZXJ2ZXIncyBmaWxlIHRpbWVzdGFtcHMu XG4iKTsKLSAgICAgICAgcHJpbnRmKAotIiAgVXNlIHRoaXMgdG8gY29ycmVjdCBmb3IgbWlzY29u ZmlndXJlZCBzZXJ2ZXIgdGltZSBvciB0aW1lem9uZS5cbiIpOwotICAgICAgICBwcmludGYoCi0i ICBGb3JtYXQ6IG11c3QgYmVnaW4gd2l0aCArIG9yIC0gc2lnbi4gIEhvdXJzIG11c3QgYmUgZ2l2 ZW47IG1pbnV0ZXNcbiIpOwotICAgICAgICBwcmludGYoCi0iICBhbmQgc2Vjb25kcyBhcmUgb3B0 aW9uYWw6ICs0ID0gKzQ6MDAgPSArNDowMDowMCAoYWRkIDQgaG91cnMpLlxuXG4iKTsKLSAgICAg ICAgcmV0dXJuKDApOwotCi0gICAgICBjYXNlIEZUU19UWVA6ICAgICAgICAgICAgICAgICAgICAg LyogInR5cGUiICovCi0gICAgICAgIHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgVFlQRSB7IFRF WFQsIEJJTkFSWSwgVEVORVggfVxuIik7Ci0gICAgICAgIHByaW50ZigiICBFc3RhYmxpc2hlcyB0 aGUgZGVmYXVsdCB0cmFuc2ZlciBtb2RlLlxuIik7Ci0gICAgICAgIHByaW50ZigiICBURU5FWCBp cyB1c2VkIGZvciB1cGxvYWRpbmcgOC1iaXQgYmluYXJ5IGZpbGVzIHRvIDM2LWJpdFxuIik7Ci0g ICAgICAgIHByaW50ZigiICBwbGF0Zm9ybXMgc3VjaCBhcyBURU5FWCBhbmQgVE9QUy0yMCBhbmQg Zm9yIGRvd25sb2FkaW5nXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIHRoZW0gYWdhaW4uICBBU0NJ SSBpcyBhIHN5bm9ueW0gZm9yIFRFWFQuICBOb3JtYWxseSBlYWNoXG4iKTsKLSAgICAgICAgcHJp bnRmKCIgIGZpbGUncyB0eXBlIGlzIGRldGVybWluZWQgYXV0b21hdGljYWxseSBmcm9tIGl0cyBj b250ZW50c1xuIgotCSAgICAgICApOwotICAgICAgICBwcmludGYoIiAgb3IgaXRzIG5hbWU7IFNF VCBGVFAgVFlQRSBkb2VzIG5vdCBwcmV2ZW50IHRoYXQsIGl0IG9ubHlcbiIpOwotICAgICAgICBw cmludGYoIiAgdGVsbHMgd2hpY2ggbW9kZSB0byB1c2Ugd2hlbiB0aGUgdHlwZSBjYW4ndCBiZSBk ZXRlcm1pbmVkXG4iCi0JICAgICAgICk7Ci0gICAgICAgIHByaW50ZigiICBhdXRvbWF0aWNhbGx5 LiAgVG8gY29tcGxldGVseSBkaXNhYmxlIGF1dG9tYXRpYyB0cmFuc2Zlci1cbiIKLQkgICAgICAg KTsKLSAgICAgICAgcHJpbnRmKCIgIG1vZGUgc3dpdGNoaW5nIGFuZCBmb3JjZSBlaXRoZXIgdGV4 dCBvciBiaW5hcnkgbW9kZSwgZ2l2ZVxuIgotCSAgICAgICApOwotICAgICAgICBwcmludGYoIiAg dGhlIHRvcC1sZXZlbCBjb21tYW5kIEFTQ0lJIG9yIEJJTkFSWSwgYXMgaW4gdHJhZGl0aW9uYWxc biIpOwotICAgICAgICBwcmludGYoIiAgRlRQIGNsaWVudHMuXG5cbiIpOwotICAgICAgICByZXR1 cm4oMCk7Ci0KLSNpZmRlZiBGVFBfVElNRU9VVAotICAgICAgY2FzZSBGVFNfVE1POgotICAgICAg IHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgVElNRU9VVCBudW1iZXItb2Ytc2Vjb25kc1xuIik7 Ci0gICAgICAgcHJpbnRmKCIgIEVzdGFibGlzaGVzIGEgdGltZW91dCBmb3IgRlRQIHRyYW5zZmVy cy5cbiIpOwotICAgICAgIHByaW50ZigiICBUaGUgdGltZW91dCBhcHBsaWVzIHBlciBuZXR3b3Jr IHJlYWQgb3Igd3JpdGUgb24gdGhlIGRhdGFcbiIpOwotICAgICAgIHByaW50ZigiICBjb25uZWN0 aW9uLCBub3QgdG8gdGhlIHdob2xlIHRyYW5zZmVyLiAgQnkgZGVmYXVsdCB0aGVcbiIpOwotICAg ICAgIHByaW50ZigiICB0aW1lb3V0IHZhbHVlIGlzIDAsIG1lYW5pbmcgbm8gdGltZW91dC4gIFVz ZSBhIHBvc2l0aXZlXG4iKTsKLSAgICAgICBwcmludGYoIiAgbnVtYmVyIHRvIGVzY2FwZSBncmFj ZWZ1bGx5IGZyb20gaHVuZyBkYXRhIGNvbm5lY3Rpb25zIG9yXG4iKTsKLSAgICAgICBwcmludGYo IiAgZGlyZWN0b3J5IGxpc3RpbmdzLlxuXG4iKTsKLSAgICAgICAgcmV0dXJuKDApOwotI2VuZGlm CS8qIEZUUF9USU1FT1VUICovCi0KLSNpZmRlZiBQQVRURVJOUwotICAgICAgY2FzZSBGVFNfR0ZU OgotICAgICAgICBwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQIEdFVC1GSUxFVFlQRS1TV0lUQ0hJ TkcgeyBPTiwgT0ZGIH1cbiIpOwotICAgICAgICBwcmludGYoIiAgVGVsbHMgd2hldGhlciBHRVQg YW5kIE1HRVQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgc3dpdGNoXG4iKTsKLSAgICAgICAgcHJpbnRm KCIgIHRoZSBhcHByb3ByaWF0ZSBmaWxlIHR5cGUsIFRFWFQsIEJJTkFSWSwgb3IgVEVORVgsIGJ5 XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIG1hdGNoaW5nIHRoZSBuYW1lIG9mIGVhY2ggaW5jb21p bmcgZmlsZSB3aXRoIGl0cyBsaXN0IG9mXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIEZJTEUgVEVY VC1QQVRURVJOUyBhbmQgRklMRSBCSU5BUlktUEFUVEVSTlMuICBPTiBieVxuIik7Ci0gICAgICAg IHByaW50ZigiICBkZWZhdWx0LiAgU0hPVyBQQVRURVJOUyBkaXNwbGF5cyB0aGUgY3VycmVudCBw YXR0ZXJuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIGxpc3QuICBIRUxQIFNFVCBGSUxFIHRvIHNl ZSBob3cgdG8gY2hhbmdlIGl0LlxuIik7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFBBVFRF Uk5TICovCi0KLSAgICAgIGNhc2UgRlRTX1VTTjogICAgICAgICAgICAgICAgICAgICAvKiAidW5p cXVlLXNlcnZlci1uYW1lcyIgKi8KLSAgICAgICAgcHJpbnRmKCJcblN5bnRheDogU0VUIEZUUCBV TklRVUUtU0VSVkVSLU5BTUVTIHsgT04sIE9GRiB9XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIFRl bGxzIHdoZXRoZXIgdG8gYXNrIHRoZSBzZXJ2ZXIgdG8gY3JlYXRlIHVuaXF1ZSBuYW1lc1xuIik7 Ci0gICAgICAgIHByaW50ZigiICBmb3IgYW55IHVwbG9hZGVkIGZpbGUgdGhhdCBoYXMgdGhlIHNh bWUgbmFtZSBhcyBhblxuIik7Ci0gICAgICAgIHByaW50ZigiICBleGlzdGluZyBmaWxlLiAgRGVm YXVsdCBpcyBPRkYuXG5cbiIpOwotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2UgRlRT X1ZCTTogICAgICAgICAgICAgICAgICAgICAvKiAidmVyYm9zZS1tb2RlIiAqLwotICAgICAgICBw cmludGYoIlxuU3ludGF4OiBTRVQgRlRQIFZFUkJPU0UtTU9ERSB7IE9OLCBPRkYgfVxuIik7Ci0g ICAgICAgIHByaW50ZigiICBXaGV0aGVyIHRvIGRpc3BsYXkgYWxsIHJlc3BvbnNlcyBmcm9tIHRo ZSBGVFAgc2VydmVyLlxuIik7Ci0gICAgICAgIHByaW50ZigiICBPRkYgYnkgZGVmYXVsdC5cblxu Iik7Ci0gICAgICAgIHJldHVybigwKTsKLQotICAgICAgY2FzZSBGVFNfREFUOgotICAgICAgICBw cmludGYoIlxuU3ludGF4OiBTRVQgRlRQIERBVEVTIHsgT04sIE9GRiB9XG4iKTsKLSAgICAgICAg cHJpbnRmKCIgIFdoZXRoZXIgdG8gc2V0IGRhdGUgb2YgaW5jb21pbmcgZmlsZXMgZnJvbSB0aGUg ZmlsZSBkYXRlXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIG9uIHRoZSBzZXJ2ZXIuICBPTiBieSBk ZWZhdWx0LiAgTm90ZTogdGhlcmUgaXMgbm8gd2F5IHRvXG4iKQotICAgICAgICAgIDsKLSAgICAg ICAgcHJpbnRmKCIgIHNldCB0aGUgZGF0ZSBvbiBmaWxlcyB1cGxvYWRlZCB0byB0aGUgc2VydmVy LiAgQWxzbyBub3RlXG4iKTsKLQlwcmludGYoIiAgdGhhdCBub3QgYWxsIHNlcnZlcnMgc3VwcG9y dCB0aGlzIGZlYXR1cmUuXG5cbiIpOwotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2Ug RlRTX0FQVzoKLQlwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQIEFOT05ZTU9VUy1QQVNTV09SRCBb IHRleHQgXVxuIik7Ci0JcHJpbnRmKCIgIFBhc3N3b3JkIHRvIHN1cHBseSBhdXRvbWF0aWNhbGx5 IG9uIGFub255bW91cyBGVFBcbiIpOwotCXByaW50ZigiICBjb25uZWN0aW9ucyBpbnN0ZWFkIG9m IHRoZSBkZWZhdWx0IHVzZXJAaG9zdC5cbiIpOwotCXByaW50ZigiICBPbWl0IG9wdGlvbmFsIHRl eHQgdG8gcmVzdG9yZSBkZWZhdWx0LlxuXG4iKTsKLQlyZXR1cm4oMCk7Ci0KLSAgICAgIGRlZmF1 bHQ6Ci0gICAgICAgIHByaW50ZigiU29ycnksIGhlbHAgbm90IGF2YWlsYWJsZSBmb3IgXCJzZXQg ZnRwICVzXCJcbiIsdG1wYnVmKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9IRUxQICovCi0gICAgcmV0 dXJuKDApOwotfQotCi0jaWZuZGVmIExfU0VUCi0jZGVmaW5lIExfU0VUIDAKLSNlbmRpZiAvKiBM X1NFVCAqLwotI2lmbmRlZiBMX0lOQ1IKLSNkZWZpbmUgTF9JTkNSIDEKLSNlbmRpZiAvKiBMX0lO Q1IgKi8KLQotI2lmZGVmIEZUUF9TUlAKLWNoYXIgc3JwX3VzZXJbQlVGU0laXTsgICAgICAgICAg ICAgICAgICAvKiB3aGVyZSBpcyBCVUZTSVogZGVmaW5lZD8gKi8KLWNoYXIgKnNycF9wYXNzOwot Y2hhciAqc3JwX2FjY3Q7Ci0jZW5kaWYgLyogRlRQX1NSUCAqLwotCi1zdGF0aWMgaW50IGtlcnJv cjsgICAgICAgICAgICAgICAgICAgICAgLyogTmVlZGVkIGZvciBhbGwgYXV0aCB0eXBlcyAqLwot Ci1zdGF0aWMgc3RydWN0ICAgc29ja2FkZHJfaW4gaGlzY3RsYWRkcjsKLXN0YXRpYyBzdHJ1Y3Qg ICBzb2NrYWRkcl9pbiBoaXNkYXRhYWRkcjsKLXN0YXRpYyBzdHJ1Y3QgICBzb2NrYWRkcl9pbiBk YXRhX2FkZHI7Ci1zdGF0aWMgaW50ICAgICAgZGF0YSA9IC0xOwotc3RhdGljIGludCAgICAgIHB0 ZmxhZyA9IDA7Ci1zdGF0aWMgc3RydWN0ICAgc29ja2FkZHJfaW4gbXljdGxhZGRyOwotCi0jaWZk ZWYgQ09NTUVOVAotI2lmbmRlZiBPUzIKLVVJRF9UIGdldHVpZCgpOwotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotCi1zdGF0aWMgaW50IGNwZW5kID0gMDsgICAgICAg ICAgICAgICAgICAgLyogTm8gcGVuZGluZyByZXBsaWVzICovCi0KLSNpZmRlZiBDS19TU0wKLWV4 dGVybiBTU0wgKnNzbF9mdHBfY29uOwotZXh0ZXJuIFNTTF9DVFggKnNzbF9mdHBfY3R4OwotZXh0 ZXJuIFNTTCAqc3NsX2Z0cF9kYXRhX2NvbjsKLWV4dGVybiBpbnQgc3NsX2Z0cF9hY3RpdmVfZmxh ZzsKLWV4dGVybiBpbnQgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnOwotI2VuZGlmIC8qIENLX1NT TCAqLwotCi0vKiAgZiB0IHAgYyBtIGQgIC0tICBTZW5kIGEgY29tbWFuZCB0byB0aGUgRlRQIHNl cnZlciAgKi8KLS8qCi0gIENhbGwgd2l0aDoKLSAgICBjaGFyICogY21kOiBUaGUgY29tbWFuZCB0 byBzZW5kLgotICAgIGNoYXIgKiBhcmc6IFRoZSBhcmd1bWVudCAoZS5nLiBhIGZpbGVuYW1lKS4K LSAgICBpbnQgbGNzOiBUaGUgbG9jYWwgY2hhcmFjdGVyIHNldCBpbmRleC4KLSAgICBpbnQgcmNz OiBUaGUgcmVtb3RlIChzZXJ2ZXIpIGNoYXJhY3RlciBzZXQgaW5kZXguCi0gICAgaW50IHZibTog VmVyYm9zZSBtb2RlOgotICAgICAgMCA9IGZvcmNlIHZlcmJvc2l0eSBvZmYKLSAgICAgPjAgPSBm b3JjZSB2ZXJib3NpdHkgb24KLQotICBJZiBhcmcgaXMgZ2l2ZW4gKG5vdCBOVUxMIG9yIGVtcHR5 KSBhbmQgbGNzICE9IHJjcyBhbmQgYm90aCBhcmUgPiAtMSwKLSAgYW5kIG5laXRoZXIgbGNzIG9y IHJjcyBpcyBVQ1MtMiwgdGhlIGFyZyBpcyB0cmFuc2xhdGVkIGZyb20gdGhlIGxvY2FsCi0gIGNo YXJhY3RlciBzZXQgdG8gdGhlIHJlbW90ZSBvbmUgYmVmb3JlIHNlbmRpbmcgdGhlIHJlc3VsdCB0 byB0aGUgc2VydmVyLgotCi0gICBSZXR1cm5zOgotICAgIDAgb24gZmFpbHVyZSB3aXRoIGZ0cGNv ZGUgPSAtMQotICAgID49IDAgb24gc3VjY2VzcyAoZ2V0cmVwbHkoKSByZXN1bHQpIHdpdGggZnRw Y29kZSA9IDAuCi0qLwotc3RhdGljIGNoYXIgeGNtZGJ1ZltSRk5CVUZTSVpdOwotCi1zdGF0aWMg aW50Ci1mdHBjbWQoY21kLGFyZyxsY3MscmNzLHZibSkgY2hhciAqIGNtZCwgKiBhcmc7IGludCBs Y3MsIHJjcywgdmJtOyB7Ci0gICAgY2hhciAqIHMgPSBOVUxMOwotICAgIGludCByID0gMCwgeCA9 IDAsIGZjID0gMCwgbGVuID0gMCwgY21kbGVuID0gMCwgcSA9IC0xOwotICAgIHNpZ190IG9sZGlu dHI7Ci0KLSAgICBpZiAoZnRwX2RlYikgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAq LwotICAgICAgdmJtID0gMTsKLSAgICBlbHNlIGlmIChxdWlldCB8fCBkcHlhY3RpdmUpICAgICAg ICAvKiBRVUlFVCBvciBGaWxlIFRyYW5zZmVyIEFjdGl2ZSAqLwotICAgICAgdmJtID0gMDsKLSAg ICBlbHNlIGlmICh2Ym0gPCAwKSAgICAgICAgICAgICAgICAgICAvKiBWRVJCT1NFICovCi0gICAg ICB2Ym0gPSBmdHBfdmJtOwotCi0gICAgY2FuY2VsZmlsZSA9IDA7Ci0gICAgaWYgKCFjbWQpIGNt ZCA9ICIiOwotICAgIGlmICghYXJnKSBhcmcgPSAiIjsKLSAgICBjbWRsZW4gPSAoaW50KXN0cmxl bihjbWQpOwotICAgIGxlbiA9IGNtZGxlbiArIChpbnQpc3RybGVuKGFyZykgKyAxOwotCi0gICAg aWYgKGZ0cF9kZWIgLyogJiYgIWRweWFjdGl2ZSAqLyApIHsKLSNpZmRlZiBGVFBfUFJPWFkKLSAg ICAgICAgaWYgKGZ0cF9wcngpIHByaW50ZigiJXMgIiwgZnRwX2hvc3QpOwotI2VuZGlmIC8qIEZU UF9QUk9YWSAqLwotICAgICAgICBwcmludGYoIi0tLT4gIik7Ci0gICAgICAgIGlmICghYW5vbnlt b3VzICYmIHN0cmNtcCgiUEFTUyIsY21kKSA9PSAwKQotICAgICAgICAgIHByaW50ZigiUEFTUyBY WFhYIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwcmludGYoIiVzICVzIixjbWQsYXJnKTsK LSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgIH0KLSAgICAvKiBiemVybyh4Y21kYnVmLFJGTkJV RlNJWik7ICovCi0gICAgY2ttYWttc2coeGNtZGJ1ZixSRk5CVUZTSVosIGNtZCwgKmFyZyA/ICIg IiA6ICIiLCBhcmcsIE5VTEwpOwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0g ICAgICAgIGRlYnVnKEYxMTAsImZ0cGNtZCBjbWQiLGNtZCwwKTsKLSAgICAgICAgZGVidWcoRjEx MCwiZnRwY21kIGFyZyIsYXJnLDApOwotICAgICAgICBkZWJ1ZyhGMTAxLCJmdHBjbWQgbGNzIiwi IixsY3MpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJmdHBjbWQgcmNzIiwiIixyY3MpOwotICAgIH0K LSNlbmRpZiAvKiBERUJVRyAqLwotCi0gICAgaWYgKGNzb2NrZXQgPT0gLTEpIHsKLSAgICAgICAg cGVycm9yKCJObyBjb250cm9sIGNvbm5lY3Rpb24gZm9yIGNvbW1hbmQiKTsKLSAgICAgICAgZnRw Y29kZSA9IC0xOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGhhdmVzaWdpbnQgPSAw OwotICAgIG9sZGludHIgPSBzaWduYWwoU0lHSU5ULCBjbWRjYW5jZWwpOwotCi0jaWZuZGVmIE5P Q1NFVFMKLSAgICBpZiAoKmFyZyAmJiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBhbiBh cmcgd2FzIGdpdmVuICovCi0gICAgICAgIGxjcyA+IC0xICYmICAgICAgICAgICAgICAgICAgICAg LyogYW5kIGEgbG9jYWwgY2hhcnNldCAqLwotICAgICAgICByY3MgPiAtMSAmJiAgICAgICAgICAg ICAgICAgICAgIC8qIGFuZCBhIHJlbW90ZSBjaGFyc2V0ICovCi0gICAgICAgIGxjcyAhPSByY3Mg JiYgICAgICAgICAgICAgICAgICAgLyogYW5kIHRoZSB0d28gYXJlIG5vdCB0aGUgc2FtZSAqLwot ICAgICAgICBsY3MgIT0gRkNfVUNTMiAmJiAgICAgICAgICAgICAgIC8qIGFuZCBuZWl0aGVyIG9u ZSBpcyBVQ1MtMiAqLwotICAgICAgICByY3MgIT0gRkNfVUNTMiAgICAgICAgICAgICAgICAgIC8q IC4uLiAqLwotICAgICAgICApIHsKLSAgICAgICAgaW5pdHhsYXRlKGxjcyxyY3MpOyAgICAgICAg ICAgICAvKiBUcmFuc2xhdGUgYXJnIGZyb20gbGNzIHRvIHJjcyAqLwotICAgICAgICB4Z25icCA9 IGFyZzsgICAgICAgICAgICAgICAgICAgIC8qIEdsb2JhbCBwb2ludGVyIHRvIGlucHV0IHN0cmlu ZyAqLwotICAgICAgICByZm5wdHIgPSByZm5idWY7ICAgICAgICAgICAgICAgIC8qIEdsb2JhbCBw b2ludGVyIHRvIG91dHB1dCBidWZmZXIgKi8KLQotICAgICAgICB3aGlsZSAoMSkgewotICAgICAg ICAgICAgaWYgKChjMCA9IHhnbmJ5dGUoRkNfVUNTMixsY3Msc3RyZ2V0YykpIDwgMCkgYnJlYWs7 Ci0gICAgICAgICAgICBpZiAoeHBuYnl0ZShjMCxUQ19VQ1MyLHJjcyxzdHJwdXRjKSA8IDApIGJy ZWFrOwotICAgICAgICB9Ci0gICAgICAgIC8qCi0gICAgICAgICAgV2UgaGF2ZSB0byBjb3B5IGhl cmUgaW5zdGVhZCBvZiB0cmFuc2xhdGluZyBkaXJlY3RseSBpbnRvCi0gICAgICAgICAgeGNtZGJ1 ZltdIHNvIHN0cnB1dGMoKSBjYW4gY2hlY2sgbGVuZ3RoLiAgQWx0ZXJuYXRpdmVseSB3ZSBjb3Vs ZAotICAgICAgICAgIHdyaXRlIHlldCBhbm90aGVyIHhwbmJ5dGUoKSBvdXRwdXQgZnVuY3Rpb24u Ci0gICAgICAgICovCi0gICAgICAgIGlmICgoaW50KXN0cmxlbihyZm5idWYpID4gKFJGTkJVRlNJ WiAtIChjbWRsZW4rMSkpKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9GVFAgY29tbWFuZCB0b28g bG9uZzogJXMgKyBhcmdcbiIsY21kKTsKLSAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKLSAgICAg ICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotICAgICAgICB4ID0gY2tzdHJuY3B5KCZ4Y21k YnVmW2NtZGxlbisxXSwgcmZuYnVmLCBSRk5CVUZTSVogLSAoY21kbGVuKzEpKTsKLSAgICB9Ci0j ZW5kaWYgLyogTk9DU0VUUyAqLwotCi0gICAgcyA9IHhjbWRidWY7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ29tbWFuZCB0byBzZW5kIHRvIHNlcnZlciAqLwotCi0jaWZkZWYgREVCVUcKLSAg ICBpZiAoZGVibG9nKSB7CQkJLyogTG9nIGl0ICovCi0JaWYgKCFhbm9ueW1vdXMgJiYgIWNrc3Ry Y21wKHMsIlBBU1MgIiw1LDApKSB7Ci0JICAgIC8qIEJ1dCBkb24ndCBsb2cgcGFzc3dvcmRzICov Ci0JICAgIGRlYnVnKEYxMTAsIkZUUCBTRU5UICIsIlBBU1MgWFhYWCIsMCk7Ci0JfSBlbHNlIHsK LQkgICAgZGVidWcoRjExMCwiRlRQIFNFTlQgIixzLDApOwotCX0KLSAgICB9Ci0jZW5kaWYgLyog REVCVUcgKi8KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgYWdhaW46Ci0jZW5kaWYgLyogQ0tf RU5DUllQVElPTiAqLwotICAgIGlmIChzY29tbWFuZChzKSA9PSAwKSB7ICAgICAgICAgICAgICAv KiBTZW5kIGl0LiAqLwotICAgICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50cik7Ci0gICAgICByZXR1 cm4oMCk7Ci0gICAgfQotICAgIGNwZW5kID0gMTsKLSAgICB4ID0gIXN0cmNtcChjbWQsIlFVSVQi KTsJCS8qIElzIGl0IHRoZSBRVUlUIGNvbW1hbmQ/ICovCi0gICAgaWYgKHgpCQkJCS8qIEluIGNh c2Ugd2UncmUgaW50ZXJydXB0ZWQgKi8KLSAgICAgIGNvbm5lY3RlZCA9IDA7CQkJLyogd2hpbGUg d2FpdGluZyBmb3IgdGhlIHJlcGx5Li4uICovCi0KLSAgICBmYyA9IDA7CQkJCS8qIEZ1bmN0aW9u IGNvZGUgZm9yIGdldHJlcGx5KCkgKi8KLSAgICBpZiAoIXN0cm5jbXAoY21kLCJBVVRIICIsNSkJ CS8qIE11c3QgcGFyc2UgQVVUSCByZXBseSAqLwotI2lmZGVmIEZUUEhPU1QKLQkmJiBzdHJuY21w KGNtZCwgIkhPU1QgIiw1KQotI2VuZGlmIC8qIEZUUEhPU1QgKi8KLQkpIHsKLQlmYyA9IEdSRl9B VVRIOwotICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGNtZCwiRkVBVCIsLTEsMCkpIHsgLyogTXVz dCBwYXJzZSBGRUFUIHJlcGx5ICovCi0JZmMgPSBHUkZfRkVBVDsJCQkvKiBCdXQgRkVBVCBub3Qg d2lkZWx5IHVuZGVyc3Rvb2QgKi8KLQlpZiAoIWZ0cF9kZWIpCQkJLyogU28gc3VwcHJlc3MgZXJy b3IgbWVzc2FnZXMgKi8KLQkgIHZibSA9IDk7Ci0gICAgfQotICAgIHIgPSBnZXRyZXBseSh4LAkJ CS8qIEV4cGVjdCBjb25uZWN0aW9uIHRvIGNsb3NlICovCi0JCSBsY3MscmNzLAkJLyogQ2hhcnNl dHMgKi8KLQkJIHZibSwJCQkvKiBWZXJib3NpdHkgKi8KLQkJIGZjCQkJLyogRnVuY3Rpb24gY29k ZSAqLwotCQkgKTsKLSAgICBpZiAocSA+IC0xKQotICAgICAgcXVpZXQgPSBxOwotCi0jaWZkZWYg Q0tfRU5DUllQVElPTgotICAgIGlmIChmdHBjb2RlID09IDUzMyAmJiBmdHBfY3BsID09IEZQTF9Q UlYpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAiRU5DIGNvbW1h bmQgbm90IHN1cHBvcnRlZCBhdCBzZXJ2ZXI7IHJldHJ5aW5nIHVuZGVyIE1JQy4uLlxuIik7Ci0g ICAgICAgIGZ0cF9jcGwgPSBGUExfU0FGOwotICAgICAgICBnb3RvIGFnYWluOwotICAgIH0KLSNl bmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ09NTUVOVAotICAgIGlmIChjYW5jZWxm aWxlICYmIG9sZGludHIgIT0gU0lHX0lHTikKLSAgICAgICgqb2xkaW50cikoU0lHSU5UKTsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0gICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50cik7Ci0gICAgcmV0 dXJuKHIpOwotfQotCi1zdGF0aWMgVk9JRAotbG9zdHBlZXIoKSB7Ci0gICAgZGVidWcoRjEwMCwi bG9zdHBlZXIiLCIiLDApOwotICAgIGlmIChjb25uZWN0ZWQpIHsKLSAgICAgICAgaWYgKGNzb2Nr ZXQgIT0gLTEpIHsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgIGlmIChzc2xfZnRwX2FjdGl2 ZV9mbGFnKSB7Ci0gICAgICAgICAgICAgICAgU1NMX3NodXRkb3duKHNzbF9mdHBfY29uKTsKLSAg ICAgICAgICAgICAgICBTU0xfZnJlZShzc2xfZnRwX2Nvbik7Ci0gICAgICAgICAgICAgICAgc3Ns X2Z0cF9wcm94eSA9IDA7Ci0gICAgICAgICAgICAgICAgc3NsX2Z0cF9hY3RpdmVfZmxhZyA9IDA7 Ci0gICAgICAgICAgICAgICAgc3NsX2Z0cF9jb24gPSBOVUxMOwotICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAgICBzb2NrZXRfY2xv c2UoY3NvY2tldCk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVTRV9TSFVURE9XTgot ICAgICAgICAgICAgc2h1dGRvd24oY3NvY2tldCwgMSsxKTsKLSNlbmRpZiAvKiBVU0VfU0hVVERP V04gKi8KLSAgICAgICAgICAgIGNsb3NlKGNzb2NrZXQpOwotI2VuZGlmIC8qIFRDUElQTElCICov Ci0gICAgICAgICAgICBjc29ja2V0ID0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRhdGEg IT0gLTEpIHsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgIGlmIChzc2xfZnRwX2RhdGFfYWN0 aXZlX2ZsYWcpIHsKLSAgICAgICAgICAgICAgICBTU0xfc2h1dGRvd24oc3NsX2Z0cF9kYXRhX2Nv bik7Ci0gICAgICAgICAgICAgICAgU1NMX2ZyZWUoc3NsX2Z0cF9kYXRhX2Nvbik7Ci0gICAgICAg ICAgICAgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnID0gMDsKLSAgICAgICAgICAgICAgICBz c2xfZnRwX2RhdGFfY29uID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19TU0wg Ki8KLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICAgICAgc29ja2V0X2Nsb3NlKGRhdGEpOwotI2Vs c2UgLyogVENQSVBMSUIgKi8KLSNpZmRlZiBVU0VfU0hVVERPV04KLSAgICAgICAgICAgIHNodXRk b3duKGRhdGEsIDErMSk7Ci0jZW5kaWYgLyogVVNFX1NIVVRET1dOICovCi0gICAgICAgICAgICBj bG9zZShkYXRhKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgZGF0YSA9IC0x OwotICAgICAgICAgICAgZ2xvYmFsZGluID0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgY29ubmVj dGVkID0gMDsKLSAgICAgICAgYW5vbnltb3VzID0gMDsKLSAgICAgICAgbG9nZ2VkaW4gPSAwOwot ICAgICAgICBhdXRoX3R5cGUgPSBOVUxMOwotICAgICAgICBmdHBfY3BsID0gZnRwX2RwbCA9IEZQ TF9DTFI7Ci0jaWZkZWYgQ0tMT0dESUFMCi0gICAgICAgIGZ0cGxvZ2VuZCgpOwotI2VuZGlmIC8q IENLTE9HRElBTCAqLwotCi0jaWZkZWYgTE9DVVMKLQlpZiAoYXV0b2xvY3VzKQkJCS8qIEF1b3Rv bWF0aWMgbG9jdXMgc3dpdGNoaW5nLi4uICovCi0JICBzZXRsb2N1cygxLDEpOwkJLyogU3dpdGNo IGxvY3VzIHRvIGxvY2FsLiAqLwotI2VuZGlmIC8qIExPQ1VTICovCi0jaWZkZWYgT1MyCi0gICAg ICAgIERpYWxlclNlbmQoT1BUX0tFUk1JVF9IQU5HVVAsIDApOwotI2VuZGlmIC8qIE9TMiAqLwot ICAgIH0KLSNpZmRlZiBGVFBfUFJPWFkKLSAgICBwc3dpdGNoKDEpOwotICAgIGlmIChjb25uZWN0 ZWQpIHsKLSAgICAgICAgaWYgKGNzb2NrZXQgIT0gLTEpIHsKLSNpZmRlZiBUQ1BJUExJQgotICAg ICAgICAgICAgc29ja2V0X2Nsb3NlKGNzb2NrZXQpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSNp ZmRlZiBVU0VfU0hVVERPV04KLSAgICAgICAgICAgIHNodXRkb3duKGNzb2NrZXQsIDErMSk7Ci0j ZW5kaWYgLyogVVNFX1NIVVRET1dOICovCi0gICAgICAgICAgICBjbG9zZShjc29ja2V0KTsKLSNl bmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgY3NvY2tldCA9IC0xOwotICAgICAgICB9 Ci0gICAgICAgIGNvbm5lY3RlZCA9IDA7Ci0gICAgICAgIGFub255bW91cyA9IDA7Ci0gICAgICAg IGxvZ2dlZGluID0gMDsKLSAgICAgICAgYXV0aF90eXBlID0gTlVMTDsKLSAgICAgICAgZnRwX2Nw bCA9IGZ0cF9kcGwgPSBGUExfQ0xSOwotICAgIH0KLSAgICBwcm94ZmxhZyA9IDA7Ci0gICAgcHN3 aXRjaCgwKTsKLSNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KLX0KLQotaW50Ci1mdHBpc29wZW4oKSB7 Ci0gICAgcmV0dXJuKGNvbm5lY3RlZCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWZ0cGNsb3NlKCkgewot ICAgIGV4dGVybiBpbnQgcXVpdHRpbmc7Ci0gICAgaWYgKCFjb25uZWN0ZWQpCi0gICAgICByZXR1 cm4oMCk7Ci0gICAgZnRwX3hmZXJtb2RlID0geGZlcm1vZGU7Ci0gICAgaWYgKCFmdHBfdmJtICYm ICFxdWlldCkKLSAgICAgIHByaW50bGluZXMgPSAxOwotICAgIGZ0cGNtZCgiUVVJVCIsTlVMTCww LDAsZnRwX3ZibSk7Ci0gICAgaWYgKGNzb2NrZXQpIHsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAg aWYgKHNzbF9mdHBfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgICAgIFNTTF9zaHV0ZG93bihzc2xf ZnRwX2Nvbik7Ci0gICAgICAgICAgICBTU0xfZnJlZShzc2xfZnRwX2Nvbik7Ci0gICAgICAgICAg ICBzc2xfZnRwX3Byb3h5ID0gMDsKLSAgICAgICAgICAgIHNzbF9mdHBfYWN0aXZlX2ZsYWcgPSAw OwotICAgICAgICAgICAgc3NsX2Z0cF9jb24gPSBOVUxMOwotICAgICAgICB9Ci0jZW5kaWYgLyog Q0tfU1NMICovCi0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgc29ja2V0X2Nsb3NlKGNzb2NrZXQp OwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSNpZmRlZiBVU0VfU0hVVERPV04KLSAgICAgICAgc2h1 dGRvd24oY3NvY2tldCwgMSsxKTsKLSNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KLSAgICAgICAg Y2xvc2UoY3NvY2tldCk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICB9Ci0gICAgY3NvY2tl dCA9IC0xOwotICAgIGNvbm5lY3RlZCA9IDA7Ci0gICAgYW5vbnltb3VzID0gMDsKLSAgICBsb2dn ZWRpbiA9IDA7Ci0gICAgbWR0bW9rID0gMTsKLSAgICBzaXplb2sgPSAxOwotICAgIGZlYXRvayA9 IDE7Ci0gICAgc3RvdWFyZyA9IDE7Ci0gICAgdHlwZXNlbnQgPSAwOwotICAgIGRhdGEgPSAtMTsK LSAgICBnbG9iYWxkaW4gPSAtMTsKLSNpZmRlZiBGVFBfUFJPWFkKLSAgICBpZiAoIXByb3h5KQot ICAgICAgbWFjbnVtID0gMDsKLSNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KLSAgICBhdXRoX3R5cGUg PSBOVUxMOwotICAgIGZ0cF9kcGwgPSBGUExfQ0xSOwotI2lmZGVmIENLTE9HRElBTAotICAgIGZ0 cGxvZ2VuZCgpOwotI2VuZGlmIC8qIENLTE9HRElBTCAqLwotI2lmZGVmIExPQ1VTCi0gICAgLyog VW5wcmVmaXhlZCBmaWxlIG1hbmFnZW1lbnQgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGxvY2FsbHkg Ki8KLSAgICBpZiAoYXV0b2xvY3VzICYmICFmdHBfY21kbGluICYmICFxdWl0dGluZykgewotICAg ICAgICBzZXRsb2N1cygxLDEpOwotICAgIH0KLSNlbmRpZiAvKiBMT0NVUyAqLwotI2lmZGVmIE9T MgotICAgIERpYWxlclNlbmQoT1BUX0tFUk1JVF9IQU5HVVAsIDApOwotI2VuZGlmIC8qIE9TMiAq LwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci1mdHBvcGVuKHJlbW90ZSwgc2VydmljZSwgdXNl X3RscykgY2hhciAqIHJlbW90ZSwgKiBzZXJ2aWNlOyBpbnQgdXNlX3RsczsgewotICAgIGNoYXIg KiBob3N0OwotCi0gICAgaWYgKGNvbm5lY3RlZCkgewotICAgICAgICBwcmludGYoIj9BbHJlYWR5 IGNvbm5lY3RlZCB0byAlcywgdXNlIEZUUCBDTE9TRSBmaXJzdC5cbiIsIGZ0cF9ob3N0KTsKLSAg ICAgICAgZnRwY29kZSA9IC0xOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2lmZGVmIEZU UEhPU1QKLSAgICBob3N0Y21kID0gMDsKLSNlbmRpZiAvKiBGVFBIT1NUICovCi0gICAgYWxpa2Ug PSAwOwotICAgIGZ0cF9zcnZ0eXBbMF0gPSBOVUw7Ci0gICAgaWYgKCFzZXJ2aWNlKSBzZXJ2aWNl ID0gIiI7Ci0gICAgaWYgKCEqc2VydmljZSkgc2VydmljZSA9IHVzZV90bHMgPyAiZnRwcyIgOiAi ZnRwIjsKLQotICAgIGlmICghaXNkaWdpdChzZXJ2aWNlWzBdKSkgewotICAgICAgICBzdHJ1Y3Qg c2VydmVudCAqZGVzdHNwOwotICAgICAgICBkZXN0c3AgPSBnZXRzZXJ2YnluYW1lKHNlcnZpY2Us ICJ0Y3AiKTsKLSAgICAgICAgaWYgKCFkZXN0c3ApIHsKLSAgICAgICAgICAgIGlmICghY2tzdHJj bXAoc2VydmljZSwiZnRwIiwtMSwwKSkgewotICAgICAgICAgICAgICAgIGZ0cF9wb3J0ID0gMjE7 Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChzZXJ2aWNlLCJmdHBzIiwtMSwwKSkg ewotICAgICAgICAgICAgICAgIGZ0cF9wb3J0ID0gOTkwOwotICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICBwcmludGYoIj9CYWQgcG9ydCBuYW1lIC0gXCIlc1wiXG4iLCBzZXJ2 aWNlKTsKLSAgICAgICAgICAgICAgICBmdHBjb2RlID0gLTE7Ci0gICAgICAgICAgICAgICAgcmV0 dXJuKDApOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZnRw X3BvcnQgPSBkZXN0c3AtPnNfcG9ydDsKLSAgICAgICAgICAgIGZ0cF9wb3J0ID0gbnRvaHMoKHVu c2lnbmVkIHNob3J0KWZ0cF9wb3J0KTsJLyogU01TIDIwMDcvMDIvMTUgKi8KLSAgICAgICAgfQot ICAgIH0gZWxzZQotICAgICAgICBmdHBfcG9ydCA9IGF0b2koc2VydmljZSk7Ci0gICAgaWYgKGZ0 cF9wb3J0IDw9IDApIHsKLSAgICAgICAgcHJpbnRmKCI/QmFkIHBvcnQgbmFtZSAtIFwiJXNcIlxu Iiwgc2VydmljZSk7Ci0gICAgICAgIGZ0cGNvZGUgPSAtMTsKLSAgICAgICAgcmV0dXJuKDApOwot ICAgIH0KLSAgICBob3N0ID0gZnRwX2hvb2t1cChyZW1vdGUsIGZ0cF9wb3J0LCB1c2VfdGxzKTsK LSAgICBpZiAoaG9zdCkgewotICAgICAgICBja3N0cm5jcHkoZnRwX3VzZXJfaG9zdCxyZW1vdGUs TUFYX0ROU19OQU1FTEVOKTsKLSAgICAgICAgY29ubmVjdGVkID0gMTsgICAgICAgICAgICAgICAg ICAvKiBTZXQgRlRQIGRlZmF1bHRzICovCi0gICAgICAgIGZ0cF9jcGwgPSBmdHBfZHBsID0gRlBM X0NMUjsKLSAgICAgICAgY3VydHlwZSA9IEZUVF9BU0M7ICAgICAgICAgICAgICAvKiBTZXJ2ZXIg dXNlcyBBU0NJSSBtb2RlICovCi0gICAgICAgIGZvcm0gPSBGT1JNX047Ci0gICAgICAgIG1vZGUg PSBNT0RFX1M7Ci0gICAgICAgIHN0cnUgPSBTVFJVX0Y7Ci0gICAgICAgIHN0cmNweShieXRlbmFt ZSwgIjgiKTsKLSAgICAgICAgYnl0ZXNpemUgPSA4OwotCi0jaWZkZWYgRlRQX1NFQ1VSSVRZCi0g ICAgICAgIGlmIChmdHBfYXV0KSB7Ci0gICAgICAgICAgICBpZiAoZnRwX2F1dGgoKSkgewotICAg ICAgICAgICAgICAgIGlmIChmdHBfY3J5IAotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAg ICAgJiYgY2tfY3J5cHRfaXNfaW5zdGFsbGVkKCkKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAg ICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXF1aWV0KQotICAgICAg ICAgICAgICAgICAgICAgIHByaW50ZigiRlRQIENvbW1hbmQgY2hhbm5lbCBpcyBQcml2YXRlIChl bmNyeXB0ZWQpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgZnRwX2NwbCA9IEZQTF9QUlY7Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChzZXRwYnN6KERFRkFVTFRfUEJTWikgPCAwKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAvKiBhIGZhaWx1cmUgaGVyZSBpcyBtb3N0IGxpa2VseSBjYXVz ZWQgYnkgYSBtaXh1cCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgLyogaW4gdGhlIHNlc3Np b24ga2V5IHVzZWQgYnkgY2xpZW50IGFuZCBzZXJ2ZXIgICAgKi8KLQkJCXByaW50ZigiP1Byb3Rl Y3Rpb24gYnVmZmVyIHNpemUgbmVnb3RpYXRpb24gZmFpbGVkXG4iKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICBpZiAoZnRwY21kKCJQUk9UIFAiLE5VTEwsMCwwLGZ0cF92Ym0pID09IFJFUExZX0NP TVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXF1aWV0KQotICAgICAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIkZUUCBEYXRhIGNoYW5uZWwgaXMgUHJpdmF0ZSAoZW5j cnlwdGVkKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdHBfZHBsID0gRlBMX1BSVjsK LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCI/VW5hYmxlIHRvIGVuYWJsZSBlbmNyeXB0aW9uIG9uIGRhdGEgY2hhbm5lbFxuIik7Ci0gICAg ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZnRwX2NwbCA9IEZQTF9T QUY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFj b25uZWN0ZWQpCi0JICAgICAgZ290byBmYWlsOwotICAgICAgICB9Ci0jZW5kaWYgLyogRlRQX1NF Q1VSSVRZICovCi0gICAgICAgIGlmIChmdHBfbG9nKQkJCS8qIF5eXiAqLwotICAgICAgICAgIGZ0 cF9sb2dpbihyZW1vdGUpOwotCi0gICAgICAgIGlmICghY29ubmVjdGVkKQotCSAgZ290byBmYWls OwotCi0JZnRwX3hmZXJtb2RlID0geGZlcm1vZGU7Ci0KLSNpZmRlZiBDS0xPR0RJQUwKLSAgICAg ICAgZG9sb2dmdHAoKTsKLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLSNpZmRlZiBPUzIKLSAgICAg ICAgRGlhbGVyU2VuZChPUFRfS0VSTUlUX0NPTk5FQ1QsIDApOwotI2VuZGlmIC8qIE9TMiAqLwot ICAgICAgICBwYXNzaXZlbW9kZSA9IGZ0cF9wc3Y7Ci0gICAgICAgIHNlbmRwb3J0ID0gZnRwX3Nw YzsKLQltZHRtb2sgPSAxOwotCXNpemVvayA9IDE7Ci0Jc3RvdWFyZyA9IDE7Ci0JdHlwZXNlbnQg PSAwOwotCi0gICAgICAgIGlmICh1Y2J1ZiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBhY3R1YWxi dWYgPSBERUZBVUxUX1BCU1o7Ci0gICAgICAgICAgICB3aGlsZSAoYWN0dWFsYnVmICYmICh1Y2J1 ZiA9IChDSEFSICopbWFsbG9jKGFjdHVhbGJ1ZikpID09IE5VTEwpCi0gICAgICAgICAgICAgIGFj dHVhbGJ1ZiA+Pj0gMjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1heGJ1ZikKLSAgICAgICAg ICB1Y2J1ZnNpeiA9IGFjdHVhbGJ1ZiAtIEZVREdFX0ZBQ1RPUjsKLQlkZWJ1ZyhGMTAxLCJmdHBv cGVuIHVjYnVmc2l6IiwiIix1Y2J1ZnNpeik7Ci0gICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0g IGZhaWw6Ci0gICAgcHJpbnRmKCI/Q2FuJ3QgRlRQIGNvbm5lY3QgdG8gJXM6JXNcbiIscmVtb3Rl LHNlcnZpY2UpOwotICAgIGZ0cGNvZGUgPSAtMTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZmRl ZiBDS19TU0wKLWludAotc3NsX2F1dGgoKSB7Ci0gICAgaW50IGk7Ci0gICAgY2hhciogcDsKLQot ICAgIGlmIChzc2xfZGVidWdfZmxhZykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwiU1NMIERF QlVHIEFDVElWRVxuIik7Ci0gICAgICAgIGZmbHVzaChzdGRlcnIpOwotICAgICAgICAvKiBmb3Ig dGhlIG1vbWVudCBJIHdhbnQgdGhlIG91dHB1dCBvbiBzY3JlZW4gKi8KLSAgICB9Ci0gICAgaWYg KHNzbF9mdHBfZGF0YV9jb24gIT0gTlVMTCkgewotICAgICAgICBTU0xfZnJlZShzc2xfZnRwX2Rh dGFfY29uKTsKLSAgICAgICAgc3NsX2Z0cF9kYXRhX2NvbiA9IE5VTEw7Ci0gICAgfQotICAgIGlm IChzc2xfZnRwX2NvbiAhPSBOVUxMKSB7Ci0gICAgICAgIFNTTF9mcmVlKHNzbF9mdHBfY29uKTsK LSAgICAgICAgc3NsX2Z0cF9jb249TlVMTDsKLSAgICB9Ci0gICAgaWYgKHNzbF9mdHBfY3R4ICE9 IE5VTEwpIHsKLSAgICAgICAgU1NMX0NUWF9mcmVlKHNzbF9mdHBfY3R4KTsKLSAgICAgICAgc3Ns X2Z0cF9jdHggPSBOVUxMOwotICAgIH0KLQotICAgIC8qIFRoZSBTU0xfT1BfRE9OVF9JTlNFUlRf RU1QVFlfRlJBR01FTlRTIAotICAgICAqIHdhcyBhZGRlZCB0byBPcGVuU1NMIDAuOS42ZSBhbmQg MC45LjcuICBJdCBkb2VzIG5vdCBleGlzdCBpbiBwcmV2aW91cwotICAgICAqIHZlcnNpb25zCi0g ICAgICovCi0jaWZuZGVmIFNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMKLSNkZWZp bmUgU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUyAwTAotI2VuZGlmCi0gICAgaWYg KGF1dGhfdHlwZSAmJiAhc3RyY21wKGF1dGhfdHlwZSwiVExTIikpIHsKLSAgICAgICAgc3NsX2Z0 cF9jdHg9U1NMX0NUWF9uZXcoU1NMdjNfY2xpZW50X21ldGhvZCgpKTsKLSAgICAgICAgaWYgKCFz c2xfZnRwX2N0eCkKLSAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIFNTTF9DVFhfc2V0X29w dGlvbnMoc3NsX2Z0cF9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX09QX1NJ TkdMRV9ESF9VU0V8U1NMX09QX0VQSEVNRVJBTF9SU0EKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNzbF9mdHBfY3R4ID0gU1NMX0NUWF9uZXco ZnRwX2J1Z191c2Vfc3NsX3YyID8gU1NMdjIzX2NsaWVudF9tZXRob2QoKSA6IAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNTTHYzX2NsaWVudF9tZXRob2QoKSk7Ci0gICAgICAg IGlmICghc3NsX2Z0cF9jdHgpCi0gICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICBTU0xfQ1RY X3NldF9vcHRpb25zKHNzbF9mdHBfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChm dHBfYnVnX3VzZV9zc2xfdjIgPyAwIDogU1NMX09QX05PX1NTTHYyKXwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTU0xfT1BfU0lOR0xFX0RIX1VTRXxTU0xfT1BfRVBIRU1FUkFMX1JTQQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgfQotICAgIFNTTF9DVFhfc2V0X2Rl ZmF1bHRfcGFzc3dkX2NiKHNzbF9mdHBfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChwZW1fcGFzc3dvcmRfY2IgKilzc2xfcGFzc3dkX2NhbGxiYWNrKTsKLSAgICBTU0xf Q1RYX3NldF9pbmZvX2NhbGxiYWNrKHNzbF9mdHBfY3R4LHNzbF9jbGllbnRfaW5mb19jYWxsYmFj ayk7Ci0gICAgU1NMX0NUWF9zZXRfc2Vzc2lvbl9jYWNoZV9tb2RlKHNzbF9mdHBfY3R4LFNTTF9T RVNTX0NBQ0hFX0NMSUVOVCk7Ci0KLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotICAgIC8qIFRoZSBk ZWZhdWx0cyBpbiB0aGUgU1NMIGNyeXB0byBsaWJyYXJ5IGFyZSBub3QgYXBwcm9wcmlhdGUgZm9y IE9TLzIgKi8KLSAgICB7Ci0gICAgICAgIGNoYXIgcGF0aFtDS01BWFBBVEhdOwotICAgICAgICBl eHRlcm4gY2hhciBleGVkaXJbXTsKLQotICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxl eGVkaXIsImNlcnRzIixOVUxMLE5VTEwpOwotICAgICAgICBpZiAoU1NMX0NUWF9sb2FkX3Zlcmlm eV9sb2NhdGlvbnMoc3NsX2Z0cF9jdHgsTlVMTCxwYXRoKSA9PSAwKSAgewotICAgICAgICAgICAg ZGVidWcoRjExMCwiZnRwIHNzbF9hdXRoIHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7Ci0g ICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/ VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWRpcjogJXNcclxuIixwYXRoKTsKLSAgICAgICAgfQotCi0g ICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILAotICAgICAgICAgICAgICAgICAoY2hhciAq KUdldEFwcERhdGEoMSksImtlcm1pdCA5NS9jZXJ0cyIsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYg KFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9mdHBfY3R4LE5VTEwscGF0aCkgPT0g MCkgIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBzc2xfYXV0aCB1bmFibGUgdG8gbG9h ZCBwYXRoIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAg ICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1kaXI6ICVzXHJcbiIscGF0 aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCwKLSAgICAg ICAgICAgICAgICAgKGNoYXIgKilHZXRBcHBEYXRhKDApLCJrZXJtaXQgOTUvY2VydHMiLE5VTEws TlVMTCk7Ci0gICAgICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfZnRw X2N0eCxOVUxMLHBhdGgpID09IDApICB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgc3Ns X2F1dGggdW5hYmxlIHRvIGxvYWQgcGF0aCIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xf ZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCB2ZXJp ZnktZGlyOiAlc1xyXG4iLHBhdGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2ttYWttc2cocGF0 aCxDS01BWFBBVEgsZXhlZGlyLCJjYV9jZXJ0cy5wZW0iLE5VTEwsTlVMTCk7Ci0gICAgICAgIGlm IChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfZnRwX2N0eCxwYXRoLE5VTEwpID09 IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBzc2xfYXV0aCB1bmFibGUgdG8gbG9h ZCBwYXRoIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAg ICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1maWxlOiAlc1xyXG4iLHBh dGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsKGNoYXIg KilHZXRBcHBEYXRhKDEpLAotCQkgImtlcm1pdCA5NS9jYV9jZXJ0cy5wZW0iLE5VTEwsTlVMTCk7 Ci0gICAgICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfZnRwX2N0eCxw YXRoLE5VTEwpID09IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBzc2xfYXV0aCB1 bmFibGUgdG8gbG9hZCBwYXRoIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19m bGFnKQotICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1maWxl OiAlc1xyXG4iLHBhdGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2ttYWttc2cocGF0aCxDS01B WFBBVEgsKGNoYXIgKilHZXRBcHBEYXRhKDApLAotCQkgImtlcm1pdCA5NS9jYV9jZXJ0cy5wZW0i LE5VTEwsTlVMTCk7Ci0gICAgICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhz c2xfZnRwX2N0eCxwYXRoLE5VTEwpID09IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0 cCBzc2xfYXV0aCB1bmFibGUgdG8gbG9hZCBwYXRoIixwYXRoLDApOwotICAgICAgICAgICAgaWYg KHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2Fk IHZlcmlmeS1maWxlOiAlc1xyXG4iLHBhdGgpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UgLyog TlQgKi8KLSAgICAvKiBUaGUgZGVmYXVsdHMgaW4gdGhlIFNTTCBjcnlwdG8gbGlicmFyeSBhcmUg bm90IGFwcHJvcHJpYXRlIGZvciBPUy8yICovCi0gICAgewotCi0gICAgICAgIGNoYXIgcGF0aFtD S01BWFBBVEhdOwotICAgICAgICBleHRlcm4gY2hhciBleGVkaXJbXTsKLQotICAgICAgICBja21h a21zZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNlcnRzIixOVUxMLE5VTEwpOwotICAgICAgICBp ZiAoU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2Z0cF9jdHgsTlVMTCxwYXRoKSA9 PSAwKSAgewotICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHNzbF9hdXRoIHVuYWJsZSB0byBs b2FkIHBhdGgiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAg ICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWRpcjogJXNcclxuIixw YXRoKTsKLSAgICAgICAgfQotICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxleGVkaXIs ImNhX2NlcnRzLnBlbSIsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJp ZnlfbG9jYXRpb25zKHNzbF9mdHBfY3R4LHBhdGgsTlVMTCkgPT0gMCkgewotICAgICAgICAgICAg ZGVidWcoRjExMCwiZnRwIHNzbF9hdXRoIHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7Ci0g ICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/ VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWZpbGU6ICVzXHJcbiIscGF0aCk7Ci0gICAgICAgIH0KLSAg ICB9Ci0jZW5kaWYgLyogTlQgKi8KLSNlbHNlIC8qIE9TMiAqLwotICAgIFNTTF9DVFhfc2V0X2Rl ZmF1bHRfdmVyaWZ5X3BhdGhzKHNzbF9mdHBfY3R4KTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAg IGlmIChzc2xfdmVyaWZ5X2ZpbGUgJiYKLSAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2Nh dGlvbnMoc3NsX2Z0cF9jdHgsc3NsX3ZlcmlmeV9maWxlLE5VTEwpID09IDApIHsKLSAgICAgICAg ZGVidWcoRjExMCwKLSAgICAgICAgICAgICAgImZ0cCBzc2wgYXV0aCB1bmFibGUgdG8gbG9hZCBz c2xfdmVyaWZ5X2ZpbGUiLAotICAgICAgICAgICAgICBzc2xfdmVyaWZ5X2ZpbGUsCi0gICAgICAg ICAgICAgIDAKLSAgICAgICAgICAgICAgKTsKLSAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQot ICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1maWxlOiAlc1xyXG4iLHNz bF92ZXJpZnlfZmlsZSk7Ci0gICAgfQotICAgIGlmIChzc2xfdmVyaWZ5X2RpciAmJgotICAgICAg ICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfZnRwX2N0eCxOVUxMLHNzbF92ZXJp ZnlfZGlyKSA9PSAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsCi0gICAgICAgICAgICAgICJmdHAg c3NsIGF1dGggdW5hYmxlIHRvIGxvYWQgc3NsX3ZlcmlmeV9kaXIiLAotICAgICAgICAgICAgICBz c2xfdmVyaWZ5X2RpciwKLSAgICAgICAgICAgICAgMAotICAgICAgICAgICAgICApOwotICAgICAg ICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQg dmVyaWZ5LWRpcjogJXNcclxuIixzc2xfdmVyaWZ5X2Rpcik7Ci0gICAgfQotCi0gICAgLyogc2V0 IHVwIHRoZSBuZXcgQ1JMIFN0b3JlICovCi0gICAgY3JsX3N0b3JlID0gKFg1MDlfU1RPUkUgKilY NTA5X1NUT1JFX25ldygpOwotICAgIGlmIChjcmxfc3RvcmUpIHsKLSNpZmRlZiBPUzIKLSAgICAg ICAgY2hhciBwYXRoW0NLTUFYUEFUSF07Ci0gICAgICAgIGV4dGVybiBjaGFyIGV4ZWRpcltdOwot Ci0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILGV4ZWRpciwiY3JscyIsTlVMTCxOVUxM KTsKLSAgICAgICAgaWYgKFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3JlLE5VTEws cGF0aCkgPT0gMCkgewotICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHNzbCBhdXRoIHVuYWJs ZSB0byBsb2FkIGRpciIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykK LSAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZGlyOiAlc1xyXG4i LHBhdGgpOwotICAgICAgICB9Ci0jaWZkZWYgTlQKLSAgICAgICAgY2ttYWttc2cocGF0aCxDS01B WFBBVEgsCi0JCSAoY2hhciAqKUdldEFwcERhdGEoMSksImtlcm1pdCA5NS9jcmxzIixOVUxMLE5V TEwpOwotICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUsTlVM TCxwYXRoKSA9PSAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgc3NsIGF1dGggdW5h YmxlIHRvIGxvYWQgZGlyIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFn KQotICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1kaXI6ICVzXHJc biIscGF0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsCi0J CSAoY2hhciAqKUdldEFwcERhdGEoMCksImtlcm1pdCA5NS9jcmxzIixOVUxMLE5VTEwpOwotICAg ICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUsTlVMTCxwYXRoKSA9 PSAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgc3NsIGF1dGggdW5hYmxlIHRvIGxv YWQgZGlyIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAg ICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1kaXI6ICVzXHJcbiIscGF0aCk7 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAKLSAgICAgICAgY2ttYWttc2co cGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjYV9jcmxzLnBlbSIsTlVMTCxOVUxMKTsKLSAgICAgICAg aWYgKFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3JlLHBhdGgsTlVMTCkgPT0gMCkg ewotICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHNzbCBhdXRoIHVuYWJsZSB0byBsb2FkIGZp bGUiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAg ICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgY3JsLWZpbGU6ICVzXHJcbiIscGF0aCk7Ci0g ICAgICAgIH0KLSNpZmRlZiBOVAotICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCwoY2hh ciAqKUdldEFwcERhdGEoMSksCi0JCSAia2VybWl0IDk1L2NhX2NybHMucGVtIixOVUxMLE5VTEwp OwotICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUscGF0aCxO VUxMKSA9PSAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgc3NsIGF1dGggdW5hYmxl IHRvIGxvYWQgZmlsZSIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykK LSAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZmlsZTogJXNcclxu IixwYXRoKTsKLSAgICAgICAgfQotICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCwoY2hh ciAqKUdldEFwcERhdGEoMCksCi0JCSAia2VybWl0IDk1L2NhX2NybHMucGVtIixOVUxMLE5VTEwp OwotICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUscGF0aCxO VUxMKSA9PSAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgc3NsIGF1dGggdW5hYmxl IHRvIGxvYWQgZmlsZSIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykK LSAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZmlsZTogJXNcclxu IixwYXRoKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogT1MyICovCi0K LSAgICAgICAgaWYgKHNzbF9jcmxfZmlsZSB8fCBzc2xfY3JsX2RpcikgewotICAgICAgICAgICAg aWYgKHNzbF9jcmxfZmlsZSAmJgotICAgICAgICAgICAgICAgIFg1MDlfU1RPUkVfbG9hZF9sb2Nh dGlvbnMoY3JsX3N0b3JlLHNzbF9jcmxfZmlsZSxOVUxMKSA9PSAwKSB7Ci0gICAgICAgICAgICAg ICAgZGVidWcoRjExMCwKLSAgICAgICAgICAgICAgICAgICAgICAiZnRwIHNzbCBhdXRoIHVuYWJs ZSB0byBsb2FkIHNzbF9jcmxfZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgc3NsX2NybF9m aWxlLAotICAgICAgICAgICAgICAgICAgICAgIDAKLSAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICAgIHBy aW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1maWxlOiAlc1xyXG4iLHNzbF9jcmxfZmlsZSk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3NsX2NybF9kaXIgJiYKLSAgICAgICAgICAg ICAgICBYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxOVUxMLHNzbF9jcmxfZGly KSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwKLSAgICAgICAgICAgICAgICAg ICAgICAiZnRwIHNzbCBhdXRoIHVuYWJsZSB0byBsb2FkIHNzbF9jcmxfZGlyIiwKLSAgICAgICAg ICAgICAgICAgICAgICBzc2xfY3JsX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAwCi0gICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcp Ci0gICAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZGlyOiAlc1xy XG4iLHNzbF9jcmxfZGlyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgIFg1MDlfU1RPUkVfc2V0X2RlZmF1bHRfcGF0aHMoY3JsX3N0b3JlKTsKLSAgICAgICAg fQotICAgIH0KLSAgICBTU0xfQ1RYX3NldF92ZXJpZnkoc3NsX2Z0cF9jdHgsc3NsX3ZlcmlmeV9m bGFnLAotICAgICAgICAgICAgICAgICAgICAgICBzc2xfY2xpZW50X3ZlcmlmeV9jYWxsYmFjayk7 Ci0gICAgc3NsX3ZlcmlmeV9kZXB0aCA9IC0xOwotICAgIHNzbF9mdHBfY29uPShTU0wgKilTU0xf bmV3KHNzbF9mdHBfY3R4KTsKLSAgICB0bHNfbG9hZF9jZXJ0cyhzc2xfZnRwX2N0eCxzc2xfZnRw X2NvbiwwKTsKLSAgICBTU0xfc2V0X2ZkKHNzbF9mdHBfY29uLGNzb2NrZXQpOwotICAgIFNTTF9z ZXRfdmVyaWZ5KHNzbF9mdHBfY29uLHNzbF92ZXJpZnlfZmxhZyxOVUxMKTsKLSAgICBpZiAoc3Ns X2NpcGhlcl9saXN0KSB7Ci0gICAgICAgIFNTTF9zZXRfY2lwaGVyX2xpc3Qoc3NsX2Z0cF9jb24s c3NsX2NpcGhlcl9saXN0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBjaGFyICogcDsKLSAgICAg ICAgaWYgKHAgPSBnZXRlbnYoIlNTTF9DSVBIRVIiKSkgewotICAgICAgICAgICAgU1NMX3NldF9j aXBoZXJfbGlzdChzc2xfZnRwX2NvbixwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg IFNTTF9zZXRfY2lwaGVyX2xpc3Qoc3NsX2Z0cF9jb24sREVGQVVMVF9DSVBIRVJfTElTVCk7Ci0g ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHNzbF9kZWJ1Z19mbGFnKSB7Ci0gICAgICAgIGZwcmlu dGYoc3RkZXJyLCI9PlNUQVJUIFNTTC9UTFMgY29ubmVjdCBvbiBDT01NQU5EXG4iKTsKLSAgICAg ICAgZmZsdXNoKHN0ZGVycik7Ci0gICAgfQotICAgIGlmIChTU0xfY29ubmVjdChzc2xfZnRwX2Nv bikgPD0gMCkgewotICAgICAgICBzdGF0aWMgY2hhciBlcnJidWZbMTAyNF07Ci0gICAgICAgIGNr bWFrbXNnKGVycmJ1ZiwxMDI0LCJmdHA6IFNTTC9UTFMgY29ubmVjdCBDT01NQU5EIGVycm9yOiAi LAotICAgICAgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSxOVUxM KSxOVUxMLE5VTEwpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwiJXNcbiIsIGVycmJ1Zik7Ci0g ICAgICAgIGZmbHVzaChzdGRlcnIpOwotICAgICAgICBzc2xfZnRwX2FjdGl2ZV9mbGFnPTA7Ci0g ICAgICAgIFNTTF9mcmVlKHNzbF9mdHBfY29uKTsKLSAgICAgICAgc3NsX2Z0cF9jb24gPSBOVUxM OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNzbF9mdHBfYWN0aXZlX2ZsYWcgPSAxOwotCi0gICAg ICAgIGlmICghc3NsX2NlcnRzb2tfZmxhZyAmJiAhdGxzX2lzX2tyYjUoMSkpIHsKLSAgICAgICAg ICAgIGNoYXIgKnN1YmplY3QgPSBzc2xfZ2V0X3N1YmplY3RfbmFtZShzc2xfZnRwX2Nvbik7Ci0K LSAgICAgICAgICAgIGlmICghc3ViamVjdCkgewotICAgICAgICAgICAgICAgIGlmIChzc2xfdmVy aWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSB7Ci0gICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9hdXRoIiwiW1NTTCAtIEZBSUxFRF0iLDApOwotICAg ICAgICAgICAgICAgICAgICByZXR1cm4oc3NsX2Z0cF9hY3RpdmVfZmxhZyA9IDApOwotICAgICAg ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1cV9vaygiV2Fybmlu ZzogU2VydmVyIGRpZG4ndCBwcm92aWRlIGEgY2VydGlmaWNhdGVcbiIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIkNvbnRpbnVlPyAoWS9OKSIsMyxOVUxMLDApIDw9IDApIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsICJzc2xfYXV0aCIsIltTU0wgLSBGQUlM RURdIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihzc2xfZnRwX2FjdGl2ZV9m bGFnID0gMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICB9IGVsc2UgaWYgKHNzbF9jaGVja19zZXJ2ZXJfbmFtZShzc2xfZnRwX2NvbiwgZnRw X3VzZXJfaG9zdCkpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfYXV0aCIsIltT U0wgLSBGQUlMRURdIiwwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oc3NsX2Z0cF9hY3RpdmVf ZmxhZyA9IDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMTAs InNzbF9hdXRoIiwiW1NTTCAtIE9LXSIsMCk7Ci0gICAgICAgIHNzbF9kaXNwbGF5X2Nvbm5lY3Rf ZGV0YWlscyhzc2xfZnRwX2NvbiwwLHNzbF92ZXJib3NlX2ZsYWcpOwotICAgIH0KLSAgICBpZiAo c3NsX2RlYnVnX2ZsYWcpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsIj0+RE9ORSBTU0wvVExT IGNvbm5lY3Qgb24gQ09NTUFORFxuIik7Ci0gICAgICAgIGZmbHVzaChzdGRlcnIpOwotICAgIH0K LSAgICByZXR1cm4oc3NsX2Z0cF9hY3RpdmVfZmxhZyk7Ci19Ci0jZW5kaWYgLyogQ0tfU1NMICov Ci0KLXN0YXRpYyBzaWd0eXBlCi1jbWRjYW5jZWwoc2lnKSBpbnQgc2lnOyB7Ci0jaWZkZWYgT1My Ci0gICAgLyogSW4gVW5peCB3ZSAiY2hhaW4iIHRvIHRyYXAoKSwgd2hpY2ggcHJpbnRzIHRoaXMg Ki8KLSAgICBwcmludGYoIl5DLi4uXG4iKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBkZWJ1ZyhG MTAwLCJmdHAgY21kY2FuY2VsIGNhdWdodCBTSUdJTlQgIiwiIiwwKTsKLSAgICBmZmx1c2goc3Rk b3V0KTsKLSAgICBzZWN1cmVfZ2V0YygwLDEpOwkJCS8qIEluaXRpYWxpemUgbmV0IGlucHV0IGJ1 ZmZlcnMgKi8KLSAgICBjYW5jZWxmaWxlKys7Ci0gICAgY2FuY2VsZ3JvdXArKzsKLSAgICBtbHNy ZXNldCgpOwotI2lmbmRlZiBPUzIKLSNpZmRlZiBGVFBfUFJPWFkKLSAgICBpZiAocHRmbGFnKSAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm94eS4uLiAqLwotICAgICAgbG9uZ2ptcChwdGNh bmNlbCwxKTsKLSNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KLSAgICBkZWJ1ZyhGMTAwLCJmdHAgY21k Y2FuY2VsIGNoYWluIHRvIHRyYXAoKS4uLiIsIiIsMCk7Ci0gICAgdHJhcChTSUdJTlQpOwotICAg IC8qIE5PVFJFQUNIRUQgKi8KLSAgICBkZWJ1ZyhGMTAwLCJmdHAgY21kY2FuY2VsIHJldHVybiBm cm9tIHRyYXAoKS4uLiIsIiIsMCk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAsImZ0cCBjbWRjYW5j ZWwgUG9zdEN0cmxDU2VtKCkuLi4iLCIiLDApOwotICAgIFBvc3RDdHJsQ1NlbSgpOwotI2VuZGlm IC8qIE9TMiAqLwotfQotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXNjb21tYW5kKGNo YXIgKiBzKSAgICAgICAgICAgICAgICAgICAgICAvKiBXYXMgc2VjdXJlX2NvbW1hbmQoKSAqLwot I2Vsc2UKLXNjb21tYW5kKHMpIGNoYXIgKiBzOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0g ICAgaW50IGxlbmd0aCA9IDAsIGxlbjI7Ci0gICAgY2hhciBpbltGVFBfQlVGU0laXSwgb3V0W0ZU UF9CVUZTSVpdOwotI2lmZGVmIENLX1NTTAotICAgIGlmIChzc2xfZnRwX2FjdGl2ZV9mbGFnKSB7 Ci0gICAgICAgIGludCBlcnJvciwgcmM7Ci0gICAgICAgIGxlbmd0aCA9IHN0cmxlbihzKSArIDI7 Ci0gICAgICAgIGxlbmd0aCA9IGNrbWFrbXNnKG91dCxGVFBfQlVGU0laLHMsIlxyXG4iLE5VTEws TlVMTCk7Ci0gICAgICAgIHJjID0gU1NMX3dyaXRlKHNzbF9mdHBfY29uLG91dCxsZW5ndGgpOwot ICAgICAgICBlcnJvciA9IFNTTF9nZXRfZXJyb3Ioc3NsX2Z0cF9jb24scmMpOwotICAgICAgICBz d2l0Y2ggKGVycm9yKSB7Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKLSAgICAgICAg ICAgIHJldHVybigxKTsKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotICAg ICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKLSAgICAgICAgICBjYXNlIFNTTF9FUlJP Ul9TWVNDQUxMOgotI2lmZGVmIE5UCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50 IGdsZSA9IEdldExhc3RFcnJvcigpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5UICovCi0g ICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKLSAgICAgICAgICBjYXNl IFNTTF9FUlJPUl9TU0w6Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46Ci0g ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGxvc3RwZWVyKCk7Ci0gICAgICAgIH0KLSAg ICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIGlmIChh dXRoX3R5cGUgJiYgZnRwX2NwbCAhPSBGUExfQ0xSKSB7Ci0jaWZkZWYgRlRQX1NSUAotICAgICAg ICBpZiAoY2tfc3JwX2lzX2luc3RhbGxlZCgpICYmIChzdHJjbXAoYXV0aF90eXBlLCJTUlAiKSA9 PSAwKSkKLSAgICAgICAgICBpZiAoKGxlbmd0aCA9IHNycF9lbmNvZGUoZnRwX2NwbCA9PSBGUExf UFJWLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0hBUiAqKXMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDSEFSICopb3V0LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4ocykpKSA8IDApIHsKLSAgICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICJTUlAgZmFpbGVkIHRvIGVuY29kZSBtZXNzYWdlXG4iKTsKLSAgICAg ICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBGVFBfU1JQICovCi0j aWZkZWYgRlRQX0tSQjQKLSAgICAgICAgaWYgKGNrX2tyYjRfaXNfaW5zdGFsbGVkKCkgJiYKLSAg ICAgICAgICAgIChzdHJjbXAoYXV0aF90eXBlLCAiS0VSQkVST1NfVjQiKSA9PSAwKSkgewotICAg ICAgICAgICAgaWYgKGZ0cF9jcGwgPT0gRlBMX1BSVikgewotICAgICAgICAgICAgICAgIGxlbmd0 aCA9Ci0gICAgICAgICAgICAgICAgICBrcmJfbWtfcHJpdigoQ0hBUiAqKXMsIChDSEFSICopb3V0 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHMpLCBmdHBfc2NoZWQsCi0j aWZkZWYgS1JCNTI0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBfY3JlZC5zZXNz aW9uLAotI2Vsc2UgLyogS1JCNTI0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm ZnRwX2NyZWQuc2Vzc2lvbiwKLSNlbmRpZiAvKiBLUkI1MjQgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZteWN0bGFkZHIsICZoaXNjdGxhZGRyKTsKLSAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0KLSAgICAgICAgICAgICAgICAgIGtyYl9ta19z YWZlKChDSEFSICopcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDSEFSICopb3V0 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHMpLAotI2lmZGVmIEtSQjUy NAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2NyZWQuc2Vzc2lvbiwKLSNlbHNl IC8qIEtSQjUyNCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ0cF9jcmVkLnNl c3Npb24sCi0jZW5kaWYgLyogS1JCNTI0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmbXljdGxhZGRyLCAmaGlzY3RsYWRkcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp ZiAobGVuZ3RoID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJrcmJf bWtfJXMgZmFpbGVkIGZvciBLRVJCRVJPU19WNFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAg IGZ0cF9jcGwgPT0gRlBMX1BSViA/ICJwcml2IiA6ICJzYWZlIik7Ci0gICAgICAgICAgICAgICAg cmV0dXJuKDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogRlRQX0tSQjQg Ki8KLSNpZmRlZiBGVFBfR1NTQVBJCi0gICAgICAgIC8qIFNjb21tYW5kIChiYXNlZCBvbiBsZXZl bCkgKi8KLSAgICAgICAgaWYgKGNrX2dzc2FwaV9pc19pbnN0YWxsZWQoKSAmJiAoc3RyY21wKGF1 dGhfdHlwZSwgIkdTU0FQSSIpID09IDApKSB7Ci0gICAgICAgICAgICBnc3NfYnVmZmVyX2Rlc2Mg aW5fYnVmLCBvdXRfYnVmOwotICAgICAgICAgICAgT01fdWludDMyIG1hal9zdGF0LCBtaW5fc3Rh dDsKLSAgICAgICAgICAgIGludCBjb25mX3N0YXRlOwotICAgICAgICAgICAgaW5fYnVmLnZhbHVl ID0gczsKLSAgICAgICAgICAgIGluX2J1Zi5sZW5ndGggPSBzdHJsZW4ocykgKyAxOwotICAgICAg ICAgICAgbWFqX3N0YXQgPSBnc3Nfc2VhbCgmbWluX3N0YXQsIGdjb250ZXh0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoZnRwX2NwbD09RlBMX1BSViksIC8qIHByaXZhdGUgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfUU9QX0RFRkFVTFQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbl9idWYsICZjb25mX3N0YXRlLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0X2J1Zik7Ci0gICAgICAgICAgICBpZiAobWFq X3N0YXQgIT0gR1NTX1NfQ09NUExFVEUpIHsgLyogR2VuZXJhbGx5IG5lZWQgdG8gZGVhbCAqLwot ICAgICAgICAgICAgICAgIHVzZXJfZ3NzX2Vycm9yKG1hal9zdGF0LCBtaW5fc3RhdCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoZnRwX2NwbD09RlBMX1BSVik/Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImdzc19zZWFsIEVOQyBkaWRuJ3QgY29tcGxldGUiOgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnc3Nfc2VhbCBNSUMgZGlkbid0IGNvbXBsZXRl Iik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKChmdHBfY3BsID09IEZQTF9QUlYpICYmICFjb25m X3N0YXRlKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJHU1NBUEkgZGlkbid0 IGVuY3J5cHQgbWVzc2FnZSIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg ICBpZiAoZnRwX2RlYikKLSAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic2VhbGVk ICglcykgJWQgYnl0ZXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9jcGw9PUZQ TF9QUlY/IkVOQyI6Ik1JQyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9idWYubGVu Z3RoKTsKLSAgICAgICAgICAgICAgICBtZW1jcHkob3V0LCBvdXRfYnVmLnZhbHVlLAotICAgICAg ICAgICAgICAgICAgICAgICBsZW5ndGg9b3V0X2J1Zi5sZW5ndGgpOwotICAgICAgICAgICAgICAg IGdzc19yZWxlYXNlX2J1ZmZlcigmbWluX3N0YXQsICZvdXRfYnVmKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KLSAgICAgICAgLyogT3RoZXIgYXV0 aCB0eXBlcyBnbyBoZXJlIC4uLiAqLwotCi0gICAgICAgIGxlbjIgPSBGVFBfQlVGU0laOwotICAg ICAgICBpZiAoKGtlcnJvciA9IHJhZGl4X2VuY29kZSgoQ0hBUiAqKW91dCwgKENIQVIgKilpbiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLCAmbGVuMiwgUkFESVhf RU5DT0RFKSkKLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIkNv dWxkbid0IGJhc2UgNjQgZW5jb2RlIGNvbW1hbmQgKCVzKVxuIiwKLSAgICAgICAgICAgICAgICAg ICAgcmFkaXhfZXJyb3Ioa2Vycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKGZ0cF9kZWIpCi0gICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzY29t bWFuZCglcylcbmVuY29kaW5nICVkIGJ5dGVzXG4iLCBzLCBsZW5ndGgpOwotICAgICAgICBsZW4y ID0gY2ttYWttc2cob3V0LAotCQkJRlRQX0JVRlNJWiwKLQkJCWZ0cF9jcGwgPT0gRlBMX1BSViA/ ICJFTkMgIiA6ICJNSUMgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluLAotCQkJIlxyXG4i LAotCQkJTlVMTAotCQkJKTsKLSAgICAgICAgc2VuZChjc29ja2V0LChTRU5EQVJHMlRZUEUpb3V0 LGxlbjIsMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciBvdXRbRlRQX0JVRlNJWl07Ci0g ICAgICAgIGludCBsZW4gPSBja21ha21zZyhvdXQsRlRQX0JVRlNJWixzLCJcclxuIixOVUxMLE5V TEwpOwotICAgICAgICBzZW5kKGNzb2NrZXQsKFNFTkRBUkcyVFlQRSlvdXQsbGVuLDApOwotICAg IH0KLSAgICByZXR1cm4oMSk7Ci19Ci0KLXN0YXRpYyBpbnQKLW15Z2V0YygpIHsKLSAgICBzdGF0 aWMgY2hhciBpbmJ1Zls0MDk2XTsKLSAgICBzdGF0aWMgaW50IGJwID0gMCwgZXAgPSAwOwotICAg IGludCByYzsKLQotICAgIGlmIChicCA9PSBlcCkgewotICAgICAgICBicCA9IGVwID0gMDsKLSNp ZmRlZiBDS19TU0wKLSAgICAgICAgaWYgKHNzbF9mdHBfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAg ICAgIGludCBlcnJvcjsKLSAgICAgICAgICAgIHJjID0gU1NMX3JlYWQoc3NsX2Z0cF9jb24saW5i dWYsNDA5Nik7Ci0gICAgICAgICAgICBlcnJvciA9IFNTTF9nZXRfZXJyb3Ioc3NsX2Z0cF9jb24s cmMpOwotICAgICAgICAgICAgc3dpdGNoIChlcnJvcikgewotICAgICAgICAgICAgICBjYXNlIFNT TF9FUlJPUl9OT05FOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl IFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5U X1JFQUQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgICBjYXNlIFNT TF9FUlJPUl9TWVNDQUxMOgotICAgICAgICAgICAgICAgIGlmIChyYyA9PSAwKSB7ICAgICAgICAg IC8qIEVPRiAqLwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9 IGVsc2UgewotI2lmZGVmIE5UCi0gICAgICAgICAgICAgICAgICAgIGludCBnbGUgPSBHZXRMYXN0 RXJyb3IoKTsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9M T09LVVA6Ci0gICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKLSAgICAgICAgICAgICAg Y2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotI2VuZGlm IC8qIENLX1NTTCAqLwotICAgICAgICAgIHJjID0gcmVjdihjc29ja2V0LChjaGFyICopaW5idWYs NDA5NiwwKTsKLSAgICAgICAgaWYgKHJjIDw9IDApCi0gICAgICAgICAgcmV0dXJuKEVPRik7Ci0g ICAgICAgIGVwID0gcmM7Ci0gICAgfQotICAgIHJldHVybihpbmJ1ZlticCsrXSk7Ci19Ci0KLS8q ICB4IGwgYSB0IGUgYyAgLS0gIFRyYW5zbGF0ZSBhIGNoYXJhY3RlciAgKi8KLS8qCi0gICAgQ2Fs bCB3aXRoOgotICAgICAgZmMgICAgPSBGdW5jdGlvbiBjb2RlOiAwID0gdHJhbnNsYXRlLCAxID0g aW5pdGlhbGl6ZS4KLSAgICAgIGMgICAgID0gQ2hhcmFjdGVyIChhcyBpbnQpLgotICAgICAgaW5j cyAgPSBJbmRleCBvZiBjaGFyc2V0IHRvIHRyYW5zbGF0ZSBmcm9tLgotICAgICAgb3V0Y3MgPSBJ bmRleCBvZiBjaGFyc2V0IHRvIHRyYW5zbGF0ZSB0by4KLQotICAgIFJldHVybnM6Ci0gICAgICAw OiBPSwotICAgICAtMTogRXJyb3IKLSovCi1zdGF0aWMgaW50Ci14bGF0ZWMoZmMsYyxpbmNzLG91 dGNzKSBpbnQgZmMsIGMsIGluY3MsIG91dGNzOyB7Ci0jaWZkZWYgTk9DU0VUUwotICAgIHJldHVy bihjKTsKLSNlbHNlCi0gICAgc3RhdGljIGNoYXIgYnVmWzEyOF07Ci0gICAgc3RhdGljIGludCBj eDsKLSAgICBpbnQgYzAsIGMxOwotCi0gICAgaWYgKGZjID09IDEpIHsgICAgICAgICAgICAgICAg ICAgICAgLyogSW5pdGlhbGl6ZSAqLwotICAgICAgICBjeCA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIENhdGNoLXVwIGJ1ZmZlciB3cml0ZSBpbmRleCAqLwotICAgICAgICB4Z25icCA9 IGJ1ZjsgICAgICAgICAgICAgICAgICAgIC8qIENhdGNoLXVwIGJ1ZmZlciByZWFkIHBvaW50ZXIg Ki8KLSAgICAgICAgYnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAgICAvKiBCdWZmZXIgaXMg ZW1wdHkgKi8KLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAoY3ggPj0gMTI3KSB7 ICAgICAgICAgICAgICAgICAgICAvKiBDYXRjaC11cCBidWZmZXIgZnVsbCAqLwotICAgICAgICBk ZWJ1ZyhGMTAwLCJ4bGF0ZWMgb3ZlcmZsb3ciLCIiLDApOyAvKiAoc2hvdWxkbid0IGhhcHBlbikg Ki8KLSAgICAgICAgcHJpbnRmKCI/VHJhbnNsYXRpb24gYnVmZmVyIG92ZXJmbG93XG4iKTsKLSAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgLyogQWRkIGNoYXIgdG8gYnVmZmVyLiAqLwot ICAgIC8qIFRoZSBidWZmZXIgd29uJ3QgZ3JvdyB1bmxlc3MgaW5jcyBpcyBhIG11bHRpYnl0ZSBz ZXQsIGUuZy4gVVRGLTguICovCi0KLSAgICBkZWJ1ZyhGMDAwLCJ4bGF0ZWMgYnVmIixja2l0b2Eo Y3gpLGMpOwotICAgIGJ1ZltjeCsrXSA9IGM7Ci0gICAgYnVmW2N4XSA9IE5VTDsKLQotICAgIHdo aWxlICgoYzAgPSB4Z25ieXRlKEZDX1VDUzIsaW5jcyxzdHJnZXRjKSkgPiAtMSkgewotICAgICAg ICBpZiAoeHBuYnl0ZShjMCxUQ19VQ1MyLG91dGNzLE5VTEwpIDwgMCkJLyogKE5VTEwgd2FzIHhw cmludGMpICovCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgLyogSWYgd2UncmUg Y2F1Z2h0IHVwLCByZWluaXRpYWxpemUgdGhlIGJ1ZmZlciAqLwotICAgIHJldHVybigoY3ggPT0g KHhnbmJwIC0gYnVmKSkgPyB4bGF0ZWMoMSwwLDAsMCkgOiAwKTsKLSNlbmRpZiAvKiBOT0NTRVRT ICovCi19Ci0KLQotLyogIHAgYSByIHMgZSBmIGUgYSB0ICAqLwotCi0vKiBOb3RlOiBmb3IgY29u dmVuaWVuY2Ugd2UgYWxpZ24ga2V5d29yZCB2YWx1ZXMgd2l0aCB0YWJsZSBpbmRpY2VzICovCi0v KiBJZiB5b3UgbmVlZCB0byBpbnNlcnQgYSBuZXcga2V5d29yZCwgYWRqdXN0IHRoZSBTRlRfeHh4 IGRlZmluaXRpb25zICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZlYXR0YWJbXSA9IHsKLSAg ICB7ICIkJCQkIiwgMCwgICAgICAgIDAgfSwJCS8qIER1bW15IGZvciBzZnR0YWJbMF0gKi8KLSAg ICB7ICJBVVRIIiwgU0ZUX0FVVEgsIDAgfSwKLSAgICB7ICJMQU5HIiwgU0ZUX0xBTkcsIDAgfSwK LSAgICB7ICJNRFRNIiwgU0ZUX01EVE0sIDAgfSwKLSAgICB7ICJNTFNUIiwgU0ZUX01MU1QsIDAg fSwKLSAgICB7ICJQQlNaIiwgU0ZUX1BCU1osIDAgfSwKLSAgICB7ICJQUk9UIiwgU0ZUX1BST1Qs IDAgfSwKLSAgICB7ICJSRVNUIiwgU0ZUX1JFU1QsIDAgfSwKLSAgICB7ICJTSVpFIiwgU0ZUX1NJ WkUsIDAgfSwKLSAgICB7ICJUVkZTIiwgU0ZUX1RWRlMsIDAgfSwKLSAgICB7ICJVVEY4IiwgU0ZU X1VURjgsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmZlYXR0YWIgPSAoc2l6ZW9mKGZlYXR0YWIpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotI2RlZmluZSBGQUNUX0NTRVQgIDEKLSNkZWZpbmUg RkFDVF9DUkVBICAyCi0jZGVmaW5lIEZBQ1RfTEFORyAgMwotI2RlZmluZSBGQUNUX01UWVAgIDQK LSNkZWZpbmUgRkFDVF9NRFRNICA1Ci0jZGVmaW5lIEZBQ1RfUEVSTSAgNgotI2RlZmluZSBGQUNU X1NJWkUgIDcKLSNkZWZpbmUgRkFDVF9UWVBFICA4Ci0jZGVmaW5lIEZBQ1RfVU5JUSAgOQotCi1z dGF0aWMgc3RydWN0IGtleXRhYiBmYWN0dGFiW10gPSB7Ci0gICAgeyAiQ0hBUlNFVCIsICAgIEZB Q1RfQ1NFVCwgMCB9LAotICAgIHsgIkNSRUFURSIsICAgICBGQUNUX0NSRUEsIDAgfSwKLSAgICB7 ICJMQU5HIiwgICAgICAgRkFDVF9MQU5HLCAwIH0sCi0gICAgeyAiTUVESUEtVFlQRSIsIEZBQ1Rf TVRZUCwgMCB9LAotICAgIHsgIk1PRElGWSIsICAgICBGQUNUX01EVE0sIDAgfSwKLSAgICB7ICJQ RVJNIiwgICAgICAgRkFDVF9QRVJNLCAwIH0sCi0gICAgeyAiU0laRSIsICAgICAgIEZBQ1RfU0la RSwgMCB9LAotICAgIHsgIlRZUEUiLCAgICAgICBGQUNUX1RZUEUsIDAgfSwKLSAgICB7ICJVTklR VUUiLCAgICAgRkFDVF9VTklRLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5mYWN0dGFiID0gKHNpemVv ZihmYWN0dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5 dGFiIGZ0eXB0YWJbXSA9IHsKLSAgICB7ICJDRElSIiwgRlRZUF9DRElSLCAwIH0sCi0gICAgeyAi RElSIiwgIEZUWVBfRElSLCAgMCB9LAotICAgIHsgIkZJTEUiLCBGVFlQX0ZJTEUsIDAgfSwKLSAg ICB7ICJQRElSIiwgRlRZUF9QRElSLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5mdHlwdGFiID0gKHNp emVvZihmdHlwdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0YXRpYyBWT0lECi1w YXJzZWZlYXQocykgY2hhciAqIHM7IHsJCS8qIFBhcnNlIGEgRkVBVFVSRSByZXNwb25zZSAqLwot ICAgIGNoYXIga3didWZbOF07Ci0gICAgaW50IGksIHg7Ci0gICAgaWYgKCFzKSByZXR1cm47Ci0g ICAgaWYgKCEqcykgcmV0dXJuOwotICAgIHdoaWxlICgqcyA8ICchJykKLSAgICAgIHMrKzsKLSAg ICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JaWYgKHNbaV0gPCAnIScpCi0JICBicmVhazsK LQlrd2J1ZltpXSA9IHNbaV07Ci0gICAgfQotICAgIGlmIChzW2ldICYmIHNbaV0gIT0gU1AgJiYg c1tpXSAhPSBDUiAmJiBzW2ldICE9IExGKQotICAgICAgcmV0dXJuOwotICAgIGt3YnVmW2ldID0g TlVMOwotICAgIC8qIHhsb29rdXAgcmVxdWlyZXMgYSBmdWxsIChidXQgY2FzZSBpbmRlcGVuZGVu dCkgbWF0Y2ggKi8KLSAgICBpID0geGxvb2t1cChmZWF0dGFiLGt3YnVmLG5mZWF0dGFiLCZ4KTsK LSAgICBkZWJ1ZyhGMTExLCJmdHAgcGFyc2VmZWF0IixzLGkpOwotICAgIGlmIChpIDwgMCB8fCBp ID4gMTUpCi0gICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKGkpIHsKLSAgICAgIGNhc2UgU0ZU X01EVE06CQkJLyogQ29udHJvbGxlZCBieSBFTkFCTEUvRElTQUJMRSAqLwotCXNmdHRhYltpXSA9 IG1kdG1vazsKLQlpZiAobWR0bW9rKSBzZnR0YWJbMF0rKzsKLQlicmVhazsKLSAgICAgIGNhc2Ug U0ZUX01MU1Q6CQkJLyogZGl0dG8gKi8KLQlzZnR0YWJbaV0gPSBtbHN0b2s7Ci0JaWYgKG1sc3Rv aykgc2Z0dGFiWzBdKys7Ci0JYnJlYWs7Ci0gICAgICBjYXNlIFNGVF9TSVpFOgkJCS8qIGRpdHRv ICovCi0Jc2Z0dGFiW2ldID0gc2l6ZW9rOwotCWlmIChzaXplb2spIHNmdHRhYlswXSsrOwotCWJy ZWFrOwotICAgICAgY2FzZSBTRlRfQVVUSDoJCQkvKiBkaXR0byAqLwotCXNmdHRhYltpXSA9IGZ0 cF9hdXQ7Ci0JaWYgKGZ0cF9hdXQpIHNmdHRhYlswXSsrOwotCWJyZWFrOwotICAgICAgZGVmYXVs dDoJCQkJLyogT3RoZXJzICovCi0Jc2Z0dGFiWzBdKys7Ci0Jc2Z0dGFiW2ldKys7Ci0gICAgfQot fQotCi1zdGF0aWMgY2hhciAqCi1wYXJzZWZhY3RzKHMpIGNoYXIgKiBzOyB7CQkvKiBQYXJzZSBN TFNbRFRdIEZpbGUgRmFjdHMgKi8KLSAgICBjaGFyICogcDsKLSAgICBpbnQgaSwgaiwgeDsKLSAg ICBpZiAoIXMpIHJldHVybihOVUxMKTsKLSAgICBpZiAoISpzKSByZXR1cm4oTlVMTCk7Ci0KLSAg ICAvKiBNYXliZSB3ZSBzaG91bGQgbWFrZSBhIGNvcHkgb2YgcyBzbyB3ZSBjYW4gcG9rZSBpdC4u LiAqLwotCi0gICAgd2hpbGUgKChwID0gY2tzdHJjaHIocywnPScpKSkgewotCSpwID0gTlVMOwkJ CS8qIHMgcG9pbnRzIHRvIGZhY3QgKi8KLQlpID0geGxvb2t1cChmYWN0dGFiLHMsbmZhY3R0YWIs JngpOyAKLQlkZWJ1ZyhGMTExLCJmdHAgcGFyc2VmYWN0IGZhY3QiLHMsaSk7Ci0JKnAgPSAnPSc7 Ci0JcyA9IHArMTsJCQkvKiBOb3cgcyBwb2ludHMgdG8gYXJnICovCi0JcCA9IGNrc3RyY2hyKHMs JzsnKTsKLSAgICAgICAgaWYgKCFwKQotCSAgcCA9IGNrc3RyY2hyKHMsU1ApOwotCWlmICghcCkg ewotCSAgICBkZWJ1ZyhGMTEwLCJmdHAgcGFyc2VmYWN0IGVuZC1vZi12YWwgc2VhcmNoIGZhaWwi LHMsMCk7Ci0JICAgIGJyZWFrOwotCX0KLQkqcCA9IE5VTDsKLQlkZWJ1ZyhGMTEwLCJmdHAgcGFy c2VmYWN0IHZhbHUiLHMsMCk7Ci0Jc3dpdGNoIChpKSB7Ci0JICBjYXNlIEZBQ1RfQ1NFVDoJCS8q IElnbm9yZSB0aGVzZSBmb3Igbm93ICovCi0JICBjYXNlIEZBQ1RfQ1JFQToKLQkgIGNhc2UgRkFD VF9MQU5HOgotCSAgY2FzZSBGQUNUX1BFUk06Ci0JICBjYXNlIEZBQ1RfTVRZUDoKLQkgIGNhc2Ug RkFDVF9VTklROgotCSAgICBicmVhazsKLQkgIGNhc2UgRkFDVF9NRFRNOgkJLyogTW9kdGltZSAq LwotCSAgICBtYWtlc3RyKCZoYXZlbWR0bSxzKTsKLQkgICAgZGVidWcoRjExMCwiZnRwIHBhcnNl ZmFjdCBtZHRtIixoYXZlbWR0bSwwKTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIEZBQ1RfU0laRToJ CS8qIFNpemUgKi8KLQkgICAgaGF2ZXNpemUgPSBja2F0b2ZzKHMpOwotCSAgICBkZWJ1ZyhGMTAx LCJmdHAgcGFyc2VmYWN0IHNpemUiLCIiLGhhdmVzaXplKTsKLQkgICAgYnJlYWs7Ci0JICBjYXNl IEZBQ1RfVFlQRToJCS8qIFR5cGUgKi8KLQkgICAgaiA9IHhsb29rdXAoZnR5cHRhYixzLG5mdHlw dGFiLE5VTEwpOwotCSAgICBkZWJ1ZyhGMTExLCJmdHAgcGFyc2VmYWN0IHR5cGUiLHMsaik7Ci0J ICAgIGhhdmV0eXBlID0gKGogPCAxKSA/IDAgOiBqOwotCSAgICBicmVhazsKLQl9Ci0JKnAgPSAn Oyc7Ci0JcyA9IHArMTsJCQkvKiBzIHBvaW50cyBuZXh0IGZhY3Qgb3IgbmFtZSAqLwotICAgIH0K LSAgICB3aGlsZSAoKnMgPT0gU1ApCQkJLyogU2tpcCBwYXN0IHNwYWNlcy4gKi8KLSAgICAgIHMr KzsKLSAgICBpZiAoISpzKQkJCQkvKiBNYWtlIHN1cmUgd2Ugc3RpbGwgaGF2ZSBhIG5hbWUgKi8K LSAgICAgIHMgPSBOVUxMOwotICAgIGRlYnVnKEYxMTAsImZ0cCBwYXJzZWZhY3QgbmFtZSIscyww KTsKLSAgICByZXR1cm4ocyk7Ci19Ci0KLS8qICBnIGUgdCByIGUgcCBsIHkgIC0tICAodG8gYW4g RlRQIGNvbW1hbmQgc2VudCB0byBzZXJ2ZXIpICAqLwotCi0vKiB2Ym0gPSAxICh2ZXJib3NlKTsg MCAocXVpZXQgZXhjZXB0IGZvciBlcnJvciBtZXNzYWdlcyk7IDkgKHN1cGVyIHF1aWV0KSAqLwot Ci1zdGF0aWMgaW50Ci1nZXRyZXBseShleHBlY3Rlb2YsbGNzLHJjcyx2Ym0sZmMpIGludCBleHBl Y3Rlb2YsIGxjcywgcmNzLCB2Ym0sIGZjOyB7Ci0gICAgLyogbGNzLCByY3MsIHZibSBwYXJhbWV0 ZXJzIGFzIGluIGZ0cGNtZCgpICovCi0gICAgcmVnaXN0ZXIgaW50IGksIGMsIG47Ci0gICAgcmVn aXN0ZXIgaW50IGRpZzsKLSAgICByZWdpc3RlciBjaGFyICpjcDsKLSAgICBpbnQgeGxhdGUgPSAw OwotICAgIGludCBjb3VudCA9IDA7Ci0gICAgaW50IGF1dGggPSAwOwotICAgIGludCBvcmlnaW5h bGNvZGUgPSAwLCBjb250aW51YXRpb24gPSAwOwotICAgIHNpZ190IG9sZGludHI7Ci0gICAgaW50 IHBmbGFnID0gMDsKLSAgICBjaGFyICpwdCA9IHBhc3Y7Ci0gICAgY2hhciBpYnVmW0ZUUF9CVUZT SVpdLCBvYnVmW0ZUUF9CVUZTSVpdOyAvKiAodGhlc2UgYXJlIHByZXR0eSBiaWcuLi4pICovCi0g ICAgaW50IHNhZmUgPSAwOwotICAgIGludCB4cXVpZXQgPSAwOwotCi0gICAgYXV0aCA9IChmYyA9 PSBHUkZfQVVUSCk7Ci0KLSNpZm5kZWYgTk9DU0VUUwotICAgIGRlYnVnKEYxMDEsImZ0cCBnZXRy ZXBseSBsY3MiLCIiLGxjcyk7Ci0gICAgZGVidWcoRjEwMSwiZnRwIGdldHJlcGx5IHJjcyIsIiIs cmNzKTsKLSAgICBpZiAobGNzID4gLTEgJiYgcmNzID4gLTEgJiYgbGNzICE9IHJjcykgewotICAg ICAgICB4bGF0ZSA9IDE7Ci0gICAgICAgIGluaXR4bGF0ZShyY3MsbGNzKTsKLSAgICAgICAgeGxh dGVjKDEsMCxyY3MsbGNzKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIGRlYnVn KEYxMDEsImZ0cCBnZXRyZXBseSBmYyIsIiIsZmMpOwotCi0gICAgaWYgKHF1aWV0KQotICAgICAg eHF1aWV0ID0gMTsKLSAgICBpZiAodmJtID09IDkpIHsKLSAgICAgICAgeHF1aWV0ID0gMTsKLSAg ICAgICAgdmJtID0gMDsKLSAgICB9Ci0gICAgaWYgKGZ0cF9kZWIpICAgICAgICAgICAgICAgICAg ICAgICAgLyogREVCVUcgKi8KLSAgICAgIHZibSA9IDE7Ci0gICAgZWxzZSBpZiAocXVpZXQgfHwg ZHB5YWN0aXZlKSAgICAgICAgLyogUVVJRVQgb3IgRmlsZSBUcmFuc2ZlciBBY3RpdmUgKi8KLSAg ICAgIHZibSA9IDA7Ci0gICAgZWxzZSBpZiAodmJtIDwgMCkgICAgICAgICAgICAgICAgICAgLyog VkVSQk9TRSAqLwotICAgICAgdmJtID0gZnRwX3ZibTsKLQotICAgIGlidWZbMF0gPSAnXDAnOwot ICAgIGlmIChyZXBseV9wYXJzZSkKLSAgICAgIHJlcGx5X3B0ciA9IHJlcGx5X2J1ZjsKLSAgICBo YXZlc2lnaW50ID0gMDsKLSAgICBvbGRpbnRyID0gc2lnbmFsKFNJR0lOVCwgY21kY2FuY2VsKTsK LSAgICBmb3IgKGNvdW50ID0gMDs7IGNvdW50KyspIHsKLSAgICAgICAgb2J1ZlswXSA9ICdcMCc7 Ci0gICAgICAgIGRpZyA9IG4gPSBmdHBjb2RlID0gaSA9IDA7Ci0gICAgICAgIGNwID0gZnRwX3Jl cGx5X3N0cjsKLSAgICAgICAgd2hpbGUgKChjID0gaWJ1ZlswXSA/IGlidWZbaSsrXSA6IG15Z2V0 YygpKSAhPSAnXG4nKSB7Ci0gICAgICAgICAgICBpZiAoYyA9PSBJQUMpIHsgICAgICAgICAgICAg LyogSGFuZGxlIHRlbG5ldCBjb21tYW5kcyAqLwotICAgICAgICAgICAgICAgIHN3aXRjaCAoYyA9 IG15Z2V0YygpKSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFdJTEw6Ci0gICAgICAgICAgICAg ICAgICBjYXNlIFdPTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGMgPSBteWdldGMoKTsKLSAgICAg ICAgICAgICAgICAgICAgb2J1ZlswXSA9IElBQzsKLSAgICAgICAgICAgICAgICAgICAgb2J1Zlsx XSA9IERPTlQ7Ci0gICAgICAgICAgICAgICAgICAgIG9idWZbMl0gPSBjOwotICAgICAgICAgICAg ICAgICAgICBvYnVmWzNdID0gTlVMOwotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgICAgICAg ICBpZiAoc3NsX2Z0cF9hY3RpdmVfZmxhZykgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGVycm9yLCByYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gU1NMX3dyaXRlKHNzbF9m dHBfY29uLG9idWYsMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IFNTTF9nZXRf ZXJyb3Ioc3NsX2Z0cF9jb24scmMpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChl cnJvcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuKDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TWVND QUxMOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYyA9PSAwKSB7IC8qIEVPRiAq LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgewotI2lmZGVmIE5UCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBnbGUgPSBHZXRMYXN0RXJyb3IoKTsKLSNlbmRpZiAvKiBOVCAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRf WDUwOV9MT09LVVA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NT TDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICAgICAgICAg IHNlbmQoY3NvY2tldCwoU0VOREFSRzJUWVBFKW9idWYsMywwKTsKLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIERPOgotICAgICAgICAgICAgICAgICAg Y2FzZSBET05UOgotICAgICAgICAgICAgICAgICAgICBjID0gbXlnZXRjKCk7Ci0gICAgICAgICAg ICAgICAgICAgIG9idWZbMF0gPSBJQUM7Ci0gICAgICAgICAgICAgICAgICAgIG9idWZbMV0gPSBX T05UOwotICAgICAgICAgICAgICAgICAgICBvYnVmWzJdID0gYzsKLSAgICAgICAgICAgICAgICAg ICAgb2J1ZlszXSA9IE5VTDsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAgICAgICAgaWYg KHNzbF9mdHBfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBlcnJv ciwgcmM7Ci0gICAgICAgICAgICAgICAgICAgICAgICByYyA9IFNTTF93cml0ZShzc2xfZnRwX2Nv bixvYnVmLDMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBTU0xfZ2V0X2Vycm9y KHNzbF9mdHBfY29uLHJjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZXJyb3Ip IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ln bmFsKFNJR0lOVCxvbGRpbnRyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy bigwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmMgPT0gMCkgeyAvKiBFT0YgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBOVAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgZ2xlID0gR2V0TGFzdEVycm9yKCk7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlf TE9PS1VQOgotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgotICAg ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICB9IGVsc2UKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICAgICAgICBzZW5k KGNzb2NrZXQsKFNFTkRBUkcyVFlQRSlvYnVmLDMsMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgZGlnKys7Ci0gICAgICAgICAgICBpZiAoYyA9PSBFT0YpIHsK LSAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZW9mKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNp Z25hbChTSUdJTlQsb2xkaW50cik7Ci0gICAgICAgICAgICAgICAgICAgIGZ0cGNvZGUgPSAyMjE7 Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXRyZXBseSBFT0YiLCIiLGZ0 cGNvZGUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIGxvc3RwZWVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCF4cXVp ZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9kZWIpCi0gICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCI0MjEgIik7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigKLSAgICAg ICAgICAgICAgICAgICAgICAiU2VydmljZSBub3QgYXZhaWxhYmxlLCBjb25uZWN0aW9uIGNsb3Nl ZCBieSBzZXJ2ZXJcbiIpOwotICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2lnbmFsKFNJR0lOVCxvbGRpbnRyKTsK LSAgICAgICAgICAgICAgICBmdHBjb2RlID0gNDIxOwotICAgICAgICAgICAgICAgIGRlYnVnKEYx MDEsImZ0cCBnZXRyZXBseSBFT0YiLCIiLGZ0cGNvZGUpOwotICAgICAgICAgICAgICAgIHJldHVy big0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuID09IDApIHsJCS8qIEZpcnN0 IGRpZ2l0ICovCi0JCW4gPSBjOwkJCS8qIFNhdmUgaXQgKi8KLQkgICAgfQotICAgICAgICAgICAg aWYgKGF1dGhfdHlwZSAmJgotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgICAgICFzc2xfZnRw X2FjdGl2ZV9mbGFnICYmCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgIWli dWZbMF0gJiYgKG4gPT0gJzYnIHx8IGNvbnRpbnVhdGlvbikpIHsKLSAgICAgICAgICAgICAgICBp ZiAoYyAhPSAnXHInICYmIGRpZyA+IDQpCi0gICAgICAgICAgICAgICAgICBvYnVmW2krK10gPSBj OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0aF90eXBlICYm Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAgICAgICAgICFzc2xfZnRwX2FjdGl2ZV9mbGFn ICYmCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgICAgICFpYnVmWzBdICYm IGRpZyA9PSAxICYmIHZibSkKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiVW5hdXRoZW50aWNh dGVkIHJlcGx5IHJlY2VpdmVkIGZyb20gc2VydmVyOlxuIik7Ci0gICAgICAgICAgICAgICAgaWYg KHJlcGx5X3BhcnNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICpyZXBseV9wdHIrKyA9IGM7Ci0g ICAgICAgICAgICAgICAgICAgICpyZXBseV9wdHIgPSBOVUw7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIGlmICgoIWRweWFjdGl2ZSB8fCBmdHBfZGViKSAmJiAvKiBEb24ndCBt ZXNzIHVwIHhmZXIgZGlzcGxheSAqLwotICAgICAgICAgICAgICAgICAgICBmdHBfY21kbGluIDwg MikgewotICAgICAgICAgICAgICAgICAgICBpZiAoKGMgIT0gJ1xyJykgJiYKLSAgICAgICAgICAg ICAgICAgICAgICAgIChmdHBfZGViIHx8ICgodmJtIHx8ICghYXV0aCAmJiBuID09ICc1JykpICYm Ci0gICAgICAgICAgICAgICAgICAgICAgICAoZGlnID4gNCB8fCAoIGRpZyA8PSA0ICYmICFpc2Rp Z2l0KGMpICYmIGZ0cGNvZGUgPT0gMAotICAgICAgICAgICAgICAgICAgICAgICAgKSkpKSkKLSAg ICAgICAgICAgICAgICAgICAgewotI2lmZGVmIEZUUF9QUk9YWQotICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGZ0cF9wcnggJiYgKGRpZyA9PSAxIHx8IChkaWcgPT0gNSAmJiB2Ym0gPT0gMCkp KQotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVzOiIsZnRwX2hvc3QpOwotI2Vu ZGlmIC8qIEZUUF9QUk9YWSAqLwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXhxdWll dCkgewotI2lmZGVmIE5PQ1NFVFMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo IiVjIixjKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhsYXRlKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhsYXRlYygwLGMscmNzLGxjcyk7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCIlYyIsYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg fQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGlmIChhdXRoX3R5cGUgJiYKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAgICAh c3NsX2Z0cF9hY3RpdmVfZmxhZyAmJgotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAg ICAgICFpYnVmWzBdICYmIG4gIT0gJzYnKQotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg ICAgICAgIGlmIChkaWcgPCA0ICYmIGlzZGlnaXQoYykpCi0gICAgICAgICAgICAgIGZ0cGNvZGUg PSBmdHBjb2RlICogMTAgKyAoYyAtICcwJyk7Ci0gICAgICAgICAgICBpZiAoIXBmbGFnICYmIGZ0 cGNvZGUgPT0gMjI3KQotICAgICAgICAgICAgICBwZmxhZyA9IDE7Ci0gICAgICAgICAgICBpZiAo ZGlnID4gNCAmJiBwZmxhZyA9PSAxICYmIGlzZGlnaXQoYykpCi0gICAgICAgICAgICAgIHBmbGFn ID0gMjsKLSAgICAgICAgICAgIGlmIChwZmxhZyA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgaWYg KGMgIT0gJ1xyJyAmJiBjICE9ICcpJykKLSAgICAgICAgICAgICAgICAgICpwdCsrID0gYzsKLSAg ICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgKnB0ID0gJ1wwJzsKLSAg ICAgICAgICAgICAgICAgICAgcGZsYWcgPSAzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGlmIChkaWcgPT0gNCAmJiBjID09ICctJyAmJiBuICE9ICc2Jykg ewotICAgICAgICAgICAgICAgIGlmIChjb250aW51YXRpb24pCi0gICAgICAgICAgICAgICAgICBm dHBjb2RlID0gMDsKLSAgICAgICAgICAgICAgICBjb250aW51YXRpb24rKzsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGlmIChjcCA8ICZmdHBfcmVwbHlfc3RyW0ZUUF9CVUZTSVogLSAxXSkg ewotICAgICAgICAgICAgICAgICpjcCsrID0gYzsKLSAgICAgICAgICAgICAgICAqY3AgPSBOVUw7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRlYmxvZyB8fAotI2lmZGVm IENPTU1FTlQKLS8qCi0gIFNvbWV0aW1lcyB3ZSBuZWVkIHRvIHByaW50IHRoZSBzZXJ2ZXIgcmVw bHkuICBwcmludGxpbmVzIGlzIG5vbnplcm8gZm9yIGFueQotICBjb21tYW5kIHdoZXJlIHRoZSBy ZXN1bHRzIGFyZSBzZW50IGJhY2sgb24gdGhlIGNvbnRyb2wgY29ubmVjdGlvbiByYXRoZXIKLSAg dGhhbiB0aGUgZGF0YSBjb25uZWN0aW9uLCBlLmcuIFNUQVQuICBJbiB0aGUgVE9QUy0yMCBjYXNl LCBlYWNoIGZpbGUgbGluZQotICBoYXMgZnRwY29kZSAyMTMuICBCdXQgaWYgeW91IGRvIHRoaXMg d2l0aCBhIFVOSVggc2VydmVyLCBpdCBzZW5kcyAiMjEzLVN0YXJ0Ci0gIFNUQVQiLCA8bGluZSB3 aXRoIGZ0cGNvZGUgPT0gMD4sICIyMTMtRW5kIiBvciBzb21lc3VjaC4gIFNvIHdoZW4gcHJpbnRs aW5lcwotICBpcyBub256ZXJvLCB3ZSB3YW50IHRoZSAyMTMgbGluZXMgZnJvbSBUT1BTLTIwIGFu ZCB3ZSBET04nVCB3YW50IHRoZSAyMTMKLSAgbGluZXMgZnJvbSBVTklYLiAgRnVydGhlciBleHBl cmltZW50YXRpb24gbmVlZGVkIHdpdGggb3RoZXIgc2VydmVycy4gIE9mCi0gIGNvdXJzZSBSRkM5 NTkgaXMgbXV0ZSBhcyB0byB0aGUgZm9ybWF0IG9mIHRoZSBzZXJ2ZXIgcmVwbHkuCi0KLSAgJ3By aW50bGluZXMnIGlzIGFsc28gdHJ1ZSBmb3IgUFdEIGFuZCBCWUUuCi0qLwotCSAgICAocHJpbnRs aW5lcyAmJiAoKGZ0cGNvZGUgPT0gMCkgfHwgKHNlcnZlcnR5cGUgPT0gU1lTX1RPUFMyMCkpKQot I2Vsc2UKLS8qIE5vLCB3ZSBjYW4ndCBiZSB0aGF0IGNsZXZlciAtLSBpdCBicmVha3Mgb3RoZXIg dGhpbmdzIGxpa2UgUlBXRC4uLiAqLwotICAgICAgICAgICAgKHByaW50bGluZXMgJiYKLSAgICAg ICAgICAgICAoZnRwY29kZSAhPSA2MzEgJiYgZnRwY29kZSAhPSA2MzIgJiYgZnRwY29kZSAhPSA2 MzMpKQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICkgewotICAgICAgICAgICAg Y2hhciAqIHEgPSBjcDsKLSAgICAgICAgICAgIGNoYXIgKnIgPSBmdHBfcmVwbHlfc3RyOwotICAg ICAgICAgICAgKnEtLSA9IE5VTDsgICAgICAgICAgICAgICAgIC8qIE5VTC10ZXJtaW5hdGUgKi8K LSAgICAgICAgICAgIHdoaWxlICgqcSA8ICchJyAmJiBxID4gcikgICAvKiBTdHJpcCBDUiwgZXRj ICovCi0gICAgICAgICAgICAgICpxLS0gPSBOVUw7Ci0gICAgICAgICAgICBpZiAoIWZ0cF9kZWIg JiYgcHJpbnRsaW5lcykgeyAvKiBJZiBwcmludGluZyAqLwotICAgICAgICAgICAgICAgIGlmIChm dHBjb2RlICE9IDApICAgICAgIC8qIHN0cmlwIGZ0cGNvZGUgaWYgYW55ICovCi0gICAgICAgICAg ICAgICAgICByICs9IDQ7Ci0jaWZkZWYgTk9DU0VUUwotICAgICAgICAgICAgICAgIHByaW50Zigi JXNcbiIscik7ICAgICAgIC8qIGFuZCBwcmludCAqLwotI2Vsc2UKLSAgICAgICAgICAgICAgICBp ZiAoIXhsYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIscik7Ci0gICAg ICAgICAgICAgICAgfSBlbHNlIHsJCS8qIFRyYW5zbGF0aW5nICovCi0gICAgICAgICAgICAgICAg ICAgIHhnbmJwID0gcjsJCS8qIFNldCB1cCBzdHJnZXRjKCkgKi8KLSAgICAgICAgICAgICAgICAg ICAgd2hpbGUgKChjMCA9IHhnbmJ5dGUoRkNfVUNTMixyY3Msc3RyZ2V0YykpID4gLTEpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmICh4cG5ieXRlKGMwLFRDX1VDUzIsbGNzLE5VTEwpIDwg MCkgewkvKiAoeHByaW50YykgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwo U0lHSU5ULG9sZGludHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAv KiBOT0NTRVRTICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQlkZWJ1ZyhGMTEwLCJGVFAg UkNWRCAiLGZ0cF9yZXBseV9zdHIsMCk7Ci0KLQlpZiAoZmMgPT0gR1JGX0ZFQVQpIHsJCS8qIFBh cnNpbmcgRkVBVCBjb21tYW5kIHJlc3BvbnNlPyAqLwotCSAgICBpZiAoY291bnQgPT0gMCAmJiBu ID09ICcyJykgewotCQlpbnQgaTsJCQkvKiAoUmUpLWluaXQgc2VydmVyIEZFQVR1cmUgdGFibGUg Ki8KLQkJZGVidWcoRjEwMCwiZnRwIGdldHJlcGx5IGNsZWFyaW5nIGZlYXR1cmUgdGFibGUiLCIi LDApOwotCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJICBzZnR0YWJbaV0gPSAwOwotCSAg ICB9IGVsc2UgewotCQlwYXJzZWZlYXQoKGNoYXIgKilmdHBfcmVwbHlfc3RyKTsKLQkgICAgfQot CX0KLSAgICAgICAgaWYgKGF1dGhfdHlwZSAmJgotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAg IXNzbF9mdHBfYWN0aXZlX2ZsYWcgJiYKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAg ICAhaWJ1ZlswXSAmJiBuICE9ICc2JykgewotICAgICAgICAgICAgc2lnbmFsKFNJR0lOVCxvbGRp bnRyKTsKLSAgICAgICAgICAgIHJldHVybihnZXRyZXBseShleHBlY3Rlb2YsbGNzLHJjcyx2Ym0s YXV0aCkpOwotICAgICAgICB9Ci0gICAgICAgIGlidWZbMF0gPSBvYnVmW2ldID0gJ1wwJzsKLSAg ICAgICAgaWYgKGZ0cGNvZGUgJiYgbiA9PSAnNicpCi0gICAgICAgICAgaWYgKGZ0cGNvZGUgIT0g NjMxICYmIGZ0cGNvZGUgIT0gNjMyICYmIGZ0cGNvZGUgIT0gNjMzKSB7Ci0gICAgICAgICAgICAg IHByaW50ZigiVW5rbm93biByZXBseTogJWQgJXNcbiIsIGZ0cGNvZGUsIG9idWYpOwotICAgICAg ICAgICAgICBuID0gJzUnOwotICAgICAgICAgIH0gZWxzZSBzYWZlID0gKGZ0cGNvZGUgPT0gNjMx KTsKLSAgICAgICAgaWYgKG9idWZbMF0gICAgICAgICAgICAgICAgICAgICAvKiBpZiB0aGVyZSBp cyBhIHN0cmluZyB0byBkZWNvZGUgKi8KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICYmICFz c2xfZnRwX2FjdGl2ZV9mbGFnICAgICAvKiBhbmQgbm90IFNTTC9UTFMgKi8KLSNlbmRpZiAvKiBD S19TU0wgKi8KLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgaWYgKCFhdXRoX3R5cGUpIHsK LSAgICAgICAgICAgICAgICBwcmludGYoIkNhbm5vdCBkZWNvZGUgcmVwbHk6XG4lZCAlc1xuIiwg ZnRwY29kZSwgb2J1Zik7Ci0gICAgICAgICAgICAgICAgbiA9ICc1JzsKLSAgICAgICAgICAgIH0K LSNpZm5kZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgZWxzZSBpZiAoZnRwY29kZSA9PSA2 MzIpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIkNhbm5vdCBkZWNyeXB0ICVkIHJlcGx5OiAl c1xuIiwgZnRwY29kZSwgb2J1Zik7Ci0gICAgICAgICAgICAgICAgbiA9ICc1JzsKLSAgICAgICAg ICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgTk9DT05GSURFTlRJQUwK LSAgICAgICAgICAgIGVsc2UgaWYgKGZ0cGNvZGUgPT0gNjMzKSB7Ci0gICAgICAgICAgICAgICAg cHJpbnRmKCJDYW5ub3QgZGVjcnlwdCAlZCByZXBseTogJXNcbiIsIGZ0cGNvZGUsIG9idWYpOwot ICAgICAgICAgICAgICAgIG4gPSAnNSc7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogTk9DT05G SURFTlRJQUwgKi8KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGludCBsZW4g PSBGVFBfQlVGU0laOwotICAgICAgICAgICAgICAgIGlmICgoa2Vycm9yID0gcmFkaXhfZW5jb2Rl KChDSEFSICopb2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoQ0hBUiAqKWlidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBRElYX0RFQ09ERSkp Ci0gICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIkNh bid0IGRlY29kZSBiYXNlIDY0IHJlcGx5ICVkICglcylcblwiJXNcIlxuIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZ0cGNvZGUsIHJhZGl4X2Vycm9yKGtlcnJvciksIG9idWYpOwotICAg ICAgICAgICAgICAgICAgICBuID0gJzUnOwotICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBGVFBf U1JQCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21wKGF1dGhfdHlwZSwgIlNSUCIpID09 IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IG91dGxlbjsKLSAgICAgICAgICAgICAgICAg ICAgb3V0bGVuID0gc3JwX2RlY29kZSghc2FmZSwgKENIQVIgKilpYnVmLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDSEFSICopIGlidWYsIGxlbik7Ci0gICAgICAg ICAgICAgICAgICAgIGlmIChvdXRsZW4gPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIldhcm5pbmc6ICVkIHJlcGx5ICVzIVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmdHBjb2RlLCBzYWZlID8gIm1vZGlmaWVkIiA6ICJnYXJibGVkIik7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBuID0gJzUnOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KCZpYnVmW291dGxlbl0sICJcclxuIixG VFBfQlVGU0laLW91dGxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnRwX2RlYikK LSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlYzoiLCBzYWZlID8gJ1MnIDogJ1An KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9TUlAgKi8KLSNpZmRlZiBGVFBf S1JCNAotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhdXRoX3R5cGUsICJLRVJCRVJP U19WNCIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmUpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGtlcnJvciA9IGtyYl9yZF9zYWZlKChDSEFSICopaWJ1ZiwgbGVuLAot I2lmZGVmIEtSQjUyNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnRwX2NyZWQuc2Vzc2lvbiwKLSNlbHNlIC8qIEtSQjUyNCAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ0cF9jcmVkLnNlc3Npb24sCi0jZW5kaWYg LyogS1JCNTI0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmaGlzY3RsYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZteWN0bGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZnRwX21zZ19kYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg ICAgICAgICAga2Vycm9yID0ga3JiX3JkX3ByaXYoKENIQVIgKilpYnVmLCBsZW4sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBfc2NoZWQsCi0jaWZkZWYg S1JCNTI0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBf Y3JlZC5zZXNzaW9uLAotI2Vsc2UgLyogS1JCNTI0ICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmZnRwX2NyZWQuc2Vzc2lvbiwKLSNlbmRpZiAvKiBLUkI1 MjQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoaXNj dGxhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm15 Y3RsYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZm dHBfbXNnX2RhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGtlcnJv ciAhPSBLU1VDQ0VTUykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlZCByZXBs eSAlcyEgKGtyYl9yZF8lczogJXMpXG4iLCBmdHBjb2RlLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNhZmUgPyAibW9kaWZpZWQiIDogImdhcmJsZWQiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNhZmUgPyAic2FmZSIgOiAicHJpdiIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAga3JiX2dldF9lcnJfdGV4dChrZXJyb3IpKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIG4gPSAnNSc7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZnRwX21z Z19kYXRhLmFwcF9sZW5ndGggPj0gRlRQX0JVRlNJWiAtIDMpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGtlcnJvciA9IEtGQUlMVVJFOwotICAgICAgICAgICAgICAgICAgICAgICAgbiA9ICc1 JzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigicmVwbHkgZGF0YSB0b28gbGFyZ2Ug Zm9yIGJ1ZmZlclxuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBpZiAoZnRwX2RlYikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCIlYzoiLCBzYWZlID8gJ1MnIDogJ1AnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1l bWNweShpYnVmLGZ0cF9tc2dfZGF0YS5hcHBfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmdHBfbXNnX2RhdGEuYXBwX2xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBja3N0cm5jcHkoJmlidWZbZnRwX21zZ19kYXRhLmFwcF9sZW5ndGhdLCAiXHJcbiIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRQX0JVRlNJWiAtIGZ0cF9tc2dfZGF0YS5h cHBfbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9LUkI0ICovCi0j aWZkZWYgRlRQX0dTU0FQSQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhdXRoX3R5 cGUsICJHU1NBUEkiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdzc19idWZmZXJfZGVz YyB4bWl0X2J1ZiwgbXNnX2J1ZjsKLSAgICAgICAgICAgICAgICAgICAgT01fdWludDMyIG1hal9z dGF0LCBtaW5fc3RhdDsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNvbmZfc3RhdGU7Ci0gICAg ICAgICAgICAgICAgICAgIHhtaXRfYnVmLnZhbHVlID0gaWJ1ZjsKLSAgICAgICAgICAgICAgICAg ICAgeG1pdF9idWYubGVuZ3RoID0gbGVuOwotICAgICAgICAgICAgICAgICAgICAvKiBkZWNyeXB0 L3ZlcmlmeSB0aGUgbWVzc2FnZSAqLwotICAgICAgICAgICAgICAgICAgICBjb25mX3N0YXRlID0g c2FmZTsKLSAgICAgICAgICAgICAgICAgICAgbWFqX3N0YXQgPSBnc3NfdW5zZWFsKCZtaW5fc3Rh dCwgZ2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm eG1pdF9idWYsICZtc2dfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmNvbmZfc3RhdGUsIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICBpZiAobWFqX3N0 YXQgIT0gR1NTX1NfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZ3Nz X2Vycm9yKG1hal9zdGF0LCBtaW5fc3RhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJmYWlsZWQgdW5zZWFsaW5nIHJlcGx5Iik7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBuID0gJzUnOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgICAgICAgICAgbWVtY3B5KGlidWYsIG1zZ19idWYudmFsdWUsIG1zZ19idWYubGVuZ3RoKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSgmaWJ1Zlttc2dfYnVmLmxlbmd0aF0s ICJcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVFBfQlVGU0laLW1z Z19idWYubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdzc19yZWxlYXNlX2J1ZmZl cigmbWluX3N0YXQsJm1zZ19idWYpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9k ZWIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJWM6Iiwgc2FmZSA/ICdTJyA6 ICdQJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBGVFBfR1NTQVBJICovCi0gICAg ICAgICAgICAgICAgLyogT3RoZXIgYXV0aCB0eXBlcyBnbyBoZXJlLi4uICovCi0gICAgICAgICAg ICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKCFkcHlhY3RpdmUgfHwgZnRwX2RlYikgJiYgZnRwX2Nt ZGxpbiA8IDIgJiYKLSAgICAgICAgICAgICAgICAgICAheHF1aWV0ICYmICh2Ym0gfHwgKCFhdXRo ICYmIChuID09ICc0JyB8fCBuID09ICc1JykpKSkgewotI2lmZGVmIE5PQ1NFVFMKLSAgICAgICAg ICAgIHByaW50ZigiJWMiLGMpOwotI2Vsc2UKLSAgICAgICAgICAgIGlmICh4bGF0ZSkgewotICAg ICAgICAgICAgICAgIHhsYXRlYygwLGMscmNzLGxjcyk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgIHByaW50ZigiJWMiLGMpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8q IE5PQ1NFVFMgKi8KLSAgICAgICAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKLSAgICAgICAgfQotICAg ICAgICBpZiAoY29udGludWF0aW9uICYmIGZ0cGNvZGUgIT0gb3JpZ2luYWxjb2RlKSB7Ci0gICAg ICAgICAgICBpZiAob3JpZ2luYWxjb2RlID09IDApCi0gICAgICAgICAgICAgIG9yaWdpbmFsY29k ZSA9IGZ0cGNvZGU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAq Y3AgPSAnXDAnOwotICAgICAgICBpZiAobiAhPSAnMScpCi0gICAgICAgICAgY3BlbmQgPSAwOwot ICAgICAgICBzaWduYWwoU0lHSU5ULG9sZGludHIpOwotICAgICAgICBpZiAoZnRwY29kZSA9PSA0 MjEgfHwgb3JpZ2luYWxjb2RlID09IDQyMSkgewotCSAgICBsb3N0cGVlcigpOwotCSAgICBpZiAo IXhxdWlldCAmJiAhZnRwX2RlYikKLQkgICAgICBwcmludGYoIiVzXG4iLHJlcGx5X2J1Zik7Ci0g ICAgICAgIH0KLSAgICAgICAgaWYgKChjYW5jZWxmaWxlICE9IDApICYmCi0jaWZuZGVmIFVMVFJJ WDMKLSAgICAgICAgICAgIC8qIFVsdHJpeCAzLjAgY2Mgb2JqZWN0cyB2aW9sZW50bHkgdG8gdGhp cyBjbGF1c2UgKi8KLSAgICAgICAgICAgIChvbGRpbnRyICE9IGNtZGNhbmNlbCkgJiYKLSNlbmRp ZiAvKiBVTFRSSVgzICovCi0gICAgICAgICAgICAob2xkaW50ciAhPSBTSUdfSUdOKSkgewotICAg ICAgICAgICAgaWYgKG9sZGludHIpCi0gICAgICAgICAgICAgICgqb2xkaW50cikoU0lHSU5UKTsK LSAgICAgICAgfQotICAgICAgICBpZiAocmVwbHlfcGFyc2UpIHsKLSAgICAgICAgICAgICpyZXBs eV9wdHIgPSAnXDAnOwotICAgICAgICAgICAgaWYgKChyZXBseV9wdHIgPSBja3N0cnN0cihyZXBs eV9idWYsIHJlcGx5X3BhcnNlKSkpIHsKLSAgICAgICAgICAgICAgICByZXBseV9wYXJzZSA9IHJl cGx5X3B0ciArIHN0cmxlbihyZXBseV9wYXJzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKChyZXBs eV9wdHIgPSBja3N0cnBicmsocmVwbHlfcGFyc2UsICIgXHIiKSkpCi0gICAgICAgICAgICAgICAg ICAqcmVwbHlfcHRyID0gJ1wwJzsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICBy ZXBseV9wYXJzZSA9IHJlcGx5X3B0cjsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoKmNwIDwg JyEnICYmIGNwID4gZnRwX3JlcGx5X3N0cikgLyogUmVtb3ZlIHRyYWlsaW5nIGp1bmsgKi8KLSAg ICAgICAgICAqY3AtLSA9IE5VTDsKLSAgICAgICAgZGVidWcoRjExMSwiZnRwIGdldHJlcGx5Iixm dHBfcmVwbHlfc3RyLG4gLSAnMCcpOwotICAgICAgICByZXR1cm4obiAtICcwJyk7Ci0gICAgfSAv KiBmb3IgKDs7KSAqLwotfQotCi0jaWZkZWYgQlNEU0VMRUNUCi1zdGF0aWMgaW50Ci0jaWZkZWYg Q0tfQU5TSUMKLWVtcHR5KGZkX3NldCAqIG1hc2ssIGludCBzZWMpCi0jZWxzZQotZW1wdHkobWFz aywgc2VjKSBmZF9zZXQgKiBtYXNrOyBpbnQgc2VjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17 Ci0gICAgc3RydWN0IHRpbWV2YWwgdDsKLSAgICB0LnR2X3NlYyA9IChsb25nKSBzZWM7Ci0gICAg dC50dl91c2VjID0gMEw7Ci0gICAgZGVidWcoRjEwMCwiZnRwIGVtcHR5IGNhbGxpbmcgc2VsZWN0 Li4uIiwiIiwwKTsKLSNpZmRlZiBJTlRTRUxFQ1QKLSAgICB4ID0gc2VsZWN0KDMyLCAoaW50ICop bWFzaywgTlVMTCwgTlVMTCwgJnQpOwotI2Vsc2UKLSAgICB4ID0gc2VsZWN0KDMyLCBtYXNrLCAo ZmRfc2V0ICopIDAsIChmZF9zZXQgKikgMCwgJnQpOwotI2VuZGlmIC8qIElOVFNFTEVDVCAqLwot ICAgIGRlYnVnKEYxMDEsImZ0cCBlbXB0eSBzZWxlY3QiLCIiLHgpOwotICAgIHJldHVybih4KTsK LX0KLSNlbHNlIC8qIEJTRFNFTEVDVCAqLwotI2lmZGVmIElCTVNFTEVDVAotc3RhdGljIGludAot ZW1wdHkobWFzaywgY250LCBzZWMpIGludCAqIG1hc2ssIHNlYzsKLSAgICAgICAgICAgICAgICAg ICAgICBpbnQgICBjbnQ7Ci17Ci0gICAgcmV0dXJuKHNlbGVjdChtYXNrLGNudCwwLDAsc2VjKjEw MDApKTsKLX0KLSNlbmRpZiAvKiBJQk1TRUxFQ1QgKi8KLSNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8K LQotc3RhdGljIHNpZ3R5cGUKLWNhbmNlbHNlbmQoc2lnKSBpbnQgc2lnOyB7Ci0gICAgaGF2ZXNp Z2ludCsrOwotICAgIGNhbmNlbGdyb3VwKys7Ci0gICAgY2FuY2VsZmlsZSA9IDA7Ci0gICAgcHJp bnRmKCIgQ2FuY2VsZWQuLi5cbiIpOwotICAgIHNlY3VyZV9nZXRjKDAsMSk7CQkJLyogSW5pdGlh bGl6ZSBuZXQgaW5wdXQgYnVmZmVycyAqLwotICAgIGRlYnVnKEYxMDAsImZ0cCBjYW5jZWxzZW5k IGNhdWdodCBTSUdJTlQgIiwiIiwwKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSNpZm5kZWYgT1My Ci0gICAgbG9uZ2ptcChzZW5kY2FuY2VsLCAxKTsKLSNlbHNlCi0gICAgUG9zdEN0cmxDU2VtKCk7 Ci0jZW5kaWYgLyogT1MyICovCi19Ci0KLXN0YXRpYyBWT0lECi0jaWZkZWYgQ0tfQU5TSUMKLXNl Y3VyZV9lcnJvcihjaGFyICpmbXQsIC4uLikKLSNlbHNlCi0vKiBWQVJBUkdTMSAqLwotc2VjdXJl X2Vycm9yKGZtdCwgcDEsIHAyLCBwMywgcDQsIHA1KQotICAgY2hhciAqZm10OyBpbnQgcDEsIHAy LCBwMywgcDQsIHA1OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0jaWZkZWYgQ0tfQU5TSUMK LSAgICB2YV9saXN0IGFwOwotCi0gICAgdmFfc3RhcnQoYXAsIGZtdCk7Ci0gICAgdmZwcmludGYo c3RkZXJyLCBmbXQsIGFwKTsKLSAgICB2YV9lbmQoYXApOwotI2Vsc2UKLSAgICBmcHJpbnRmKHN0 ZGVyciwgZm10LCBwMSwgcDIsIHAzLCBwNCwgcDUpOwotI2VuZGlmCi0gICAgZnByaW50ZihzdGRl cnIsICJcbiIpOwotfQotCi0vKgotICogSW50ZXJuYWwgZm9ybSBvZiBzZXR0eXBlOyBjaGFuZ2Vz IGN1cnJlbnQgdHlwZSBpbiB1c2Ugd2l0aCBzZXJ2ZXIKLSAqIHdpdGhvdXQgY2hhbmdpbmcgb3Vy IG5vdGlvbiBvZiB0aGUgdHlwZSBmb3IgZGF0YSB0cmFuc2ZlcnMuCi0gKiBVc2VkIHRvIGNoYW5n ZSB0byBhbmQgZnJvbSBhc2NpaSBmb3IgbGlzdGluZ3MuCi0gKi8KLXN0YXRpYyBWT0lECi1jaGFu Z2V0eXBlKG5ld3R5cGUsIHNob3cpIGludCBuZXd0eXBlLCBzaG93OyB7Ci0gICAgaW50IHJjOwot ICAgIGNoYXIgKiBzOwotCi0gICAgaWYgKChuZXd0eXBlID09IGN1cnR5cGUpICYmIHR5cGVzZW50 KyspCi0gICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChuZXd0eXBlKSB7Ci0gICAgICBjYXNlIEZU VF9BU0M6Ci0gICAgICAgIHMgPSAiQSI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGVFRf QklOOgotICAgICAgICBzID0gIkkiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRlRUX1RF TjoKLSAgICAgICAgcyA9ICJMIDgiOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0g ICAgICAgIHMgPSAiSSI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByYyA9IGZ0cGNtZCgi VFlQRSIscywtMSwtMSxzaG93KTsKLSAgICBpZiAocmMgPT0gUkVQTFlfQ09NUExFVEUpCi0gICAg ICBjdXJ0eXBlID0gbmV3dHlwZTsKLX0KLQotLyogUFVUIGEgZmlsZS4gIFJldHVybnMgLTEgb24g ZXJyb3IsIDAgb24gc3VjY2VzcywgMSBpZiBmaWxlIHNraXBwZWQgKi8KLQotc3RhdGljIFZPSUQK LSNpZmRlZiBDS19BTlNJQwotZG9mdHBzZW5kKHZvaWQgKiB0aHJlYWRpbmZvKQotI2Vsc2UKLWRv ZnRwc2VuZCh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKLSNlbmRpZgotewotI2lmZGVm IE5UU0lHCi0gICAgaWYgKHRocmVhZGluZm8pIHsgICAgICAgICAgICAgICAgICAgLyogVGhyZWFk IGxvY2FsIHN0b3JhZ2UuLi4gKi8KLSAgICAgICAgVGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFk aW5mbyk7Ci0gICAgICAgIGRlYnVnKEYxMDAsICJkb2Z0cHNlbmQgY2FsbGVkIHdpdGggdGhyZWFk aW5mbyBibG9jayIsIiIsIDApOwotICAgIH0gZWxzZSBkZWJ1ZyhGMTAwLCAiZG9mdHBzZW5kIC0g dGhyZWFkaW5mbyBpcyBOVUxMIiwgIiIsIDApOwotI2VuZGlmIC8qIE5UU0lHICovCi0jaWZkZWYg Q0tfTE9HSU4KLSNpZmRlZiBJS1NECi0jaWZkZWYgTlQKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAg ICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBJS1NEICovCi0jZW5k aWYgLyogQ0tfTE9HSU4gKi8KLQotICAgIGlmIChpbml0Y29ubigpKSB7Ci0jaWZuZGVmIE5PSFRU UAotICAgICAgICBpbnQgeSA9IC0xOwotICAgICAgICAvKiBkZWJ1ZyhGMTAxLCJkb2Z0cHNlbmQi LCJ0Y3BfaHR0cF9wcm94eSIsdGNwX2h0dHBfcHJveHkpOyAqLwotCi0gICAgICAgLyogIElmIHRo ZSBjb25uZWN0aW9uIGZhaWxlZCBhbmQgd2UgYXJlIHVzaW5nIGFuIEhUVFAgUHJveHkKLSAgICAg ICAgKiAgYW5kIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlIHdhcyBhbiBhdXRoZW50aWNhdGlv bgotICAgICAgICAqICBlcnJvciwgdGhlbiB3ZSBuZWVkIHRvIGdpdmUgdGhlIHVzZXIgdG8gYWJp bGl0eSB0bwotICAgICAgICAqICBlbnRlciBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwganVzdCBs aWtlIGEgYnJvd3Nlci4KLSAgICAgICAgKgotICAgICAgICAqICBJIHRyaWVkIHRvIGRvIGFsbCBv ZiB0aGlzIHdpdGhpbiB0aGUgbmV0b3BlbigpIGNhbGwKLSAgICAgICAgKiAgYnV0IGl0IGlzIG11 Y2ggdG9vIG11Y2ggd29yay4KLSAgICAgICAgKi8KLSAgICAgICAgd2hpbGUgKHkgIT0gMCAmJiB0 Y3BfaHR0cF9wcm94eSAhPSBOVUxMICkgewotCi0gICAgICAgICAgICBpZiAodGNwX2h0dHBfcHJv eHlfZXJybm8gPT0gNDAxIHx8Ci0gICAgICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X2Vycm5v ID09IDQwNyApIHsKLSAgICAgICAgICAgICAgICBjaGFyIHVpZFtVSURCVUZMRU5dOwotICAgICAg ICAgICAgICAgIGNoYXIgcHdkW1BXRFNJWl07Ci0gICAgICAgICAgICAgICAgc3RydWN0IHR4dGJv eCB0YlsyXTsKLSAgICAgICAgICAgICAgICBpbnQgb2s7Ci0KLSAgICAgICAgICAgICAgICB0Ylsw XS50X2J1ZiA9IHVpZDsKLSAgICAgICAgICAgICAgICB0YlswXS50X2xlbiA9IFVJREJVRkxFTjsK LSAgICAgICAgICAgICAgICB0YlswXS50X2xibCA9ICJQcm94eSBVc2VyaWQ6ICI7Ci0gICAgICAg ICAgICAgICAgdGJbMF0udF9kZmx0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICB0YlswXS50X2Vj aG8gPSAxOwotICAgICAgICAgICAgICAgIHRiWzFdLnRfYnVmID0gcHdkOwotICAgICAgICAgICAg ICAgIHRiWzFdLnRfbGVuID0gMjU2OwotICAgICAgICAgICAgICAgIHRiWzFdLnRfbGJsID0gIlBy b3h5IFBhc3NwaHJhc2U6ICI7Ci0gICAgICAgICAgICAgICAgdGJbMV0udF9kZmx0ID0gTlVMTDsK LSAgICAgICAgICAgICAgICB0YlsxXS50X2VjaG8gPSAyOwotCi0gICAgICAgICAgICAgICAgb2sg PSB1cV9tdHh0KCJQcm94eSBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUmVxdWlyZWRcbiIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAyLCB0Yik7Ci0gICAgICAgICAgICAgICAg aWYgKG9rICYmIHVpZFswXSkgewotICAgICAgICAgICAgICAgICAgICBjaGFyICogcHJveHlfdXNl ciwgKiBwcm94eV9wd2Q7Ci0KLSAgICAgICAgICAgICAgICAgICAgcHJveHlfdXNlciA9IHRjcF9o dHRwX3Byb3h5X3VzZXI7Ci0gICAgICAgICAgICAgICAgICAgIHByb3h5X3B3ZCAgPSB0Y3BfaHR0 cF9wcm94eV9wd2Q7Ci0KLSAgICAgICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJveHlfdXNlciA9 IHVpZDsKLSAgICAgICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJveHlfcHdkID0gcHdkOwotCi0g ICAgICAgICAgICAgICAgICAgIHkgPSBpbml0Y29ubigpOwotCi0gICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMDEsImRvZnRwc2VuZCIsImluaXRjb25uIix5KTsKLSAgICAgICAgICAgICAgICAg ICAgbWVtc2V0KHB3ZCwwLFBXRFNJWik7Ci0gICAgICAgICAgICAgICAgICAgIHRjcF9odHRwX3By b3h5X3VzZXIgPSBwcm94eV91c2VyOwotICAgICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94 eV9wd2QgPSBwcm94eV9wd2Q7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIHkgIT0gMCApIHsKLSNlbmRpZiAvKiBOT0hUVFAg Ki8KLSAgICAgICAgICAgIHNpZ25hbChTSUdJTlQsIGZ0cHNuZC5vbGRpbnRyKTsKLSNpZmRlZiBT SUdQSVBFCi0gICAgICAgICAgICBpZiAoZnRwc25kLm9sZGludHApCi0gICAgICAgICAgICAgIHNp Z25hbChTSUdQSVBFLCBmdHBzbmQub2xkaW50cCk7Ci0jZW5kaWYgLyogU0lHUElQRSAqLwotICAg ICAgICAgICAgZnRwY29kZSA9IC0xOwotICAgICAgICAgICAgemNsb3NlKFpJRklMRSk7Ci0gICAg ICAgICAgICBmdHBzbmRyZXQgPSAtMTsKLSNpZmRlZiBOVFNJRwotICAgICAgICAgICAgY2tUaHJl YWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgICAgIHJldHVy bjsKLSNpZm5kZWYgTk9IVFRQCi0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0hUVFAgKi8KLSAgICB9 Ci0gICAgZnRwc25kcmV0ID0gMDsKLSNpZmRlZiBOVFNJRwotICAgICBja1RocmVhZEVuZCh0aHJl YWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotfQotCi1zdGF0aWMgVk9JRAotI2lmZGVmIENL X0FOU0lDCi1mYWlsZnRwc2VuZCh2b2lkICogdGhyZWFkaW5mbykKLSNlbHNlCi1mYWlsZnRwc2Vu ZCh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotI2lmZGVmIE5UU0lHCi0gICAgaWYgKHRocmVhZGluZm8pIHsgICAgICAgICAgICAgICAgICAg LyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KLSAgICAgICAgVGxzU2V0VmFsdWUoVGxzSW5k ZXgsdGhyZWFkaW5mbyk7Ci0gICAgICAgIGRlYnVnKEYxMDAsICJkb2NtZGZpbGUgY2FsbGVkIHdp dGggdGhyZWFkaW5mbyBibG9jayIsIiIsIDApOwotICAgIH0gZWxzZSBkZWJ1ZyhGMTAwLCAiZG9j bWRmaWxlIC0gdGhyZWFkaW5mbyBpcyBOVUxMIiwgIiIsIDApOwotI2VuZGlmIC8qIE5UU0lHICov Ci0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBJS1NECi0jaWZkZWYgTlQKLSAgICBpZiAoaW5zZXJ2 ZXIpCi0gICAgICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBJS1NE ICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotICAgIHdoaWxlIChjcGVuZCkgewotICAgICAg ICBmdHBzbmQucmVwbHkgPSBnZXRyZXBseSgwLGZ0cHNuZC5pbmNzLGZ0cHNuZC5vdXRjcyxmdHBf dmJtLDApOwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgc2VuZHJlcXVlc3QgZ2V0cmVwbHkiLCJu dWxsIGNvbW1hbmQiLGZ0cHNuZC5yZXBseSk7Ci0gICAgfQotICAgIGlmIChkYXRhID49IDApIHsK LSNpZmRlZiBDS19TU0wKLSAgICAgICAgaWYgKHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZykgewot ICAgICAgICAgICAgU1NMX3NodXRkb3duKHNzbF9mdHBfZGF0YV9jb24pOwotICAgICAgICAgICAg U1NMX2ZyZWUoc3NsX2Z0cF9kYXRhX2Nvbik7Ci0gICAgICAgICAgICBzc2xfZnRwX2RhdGFfYWN0 aXZlX2ZsYWcgPSAwOwotICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2NvbiA9IE5VTEw7Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICBzb2Nr ZXRfY2xvc2UoZGF0YSk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVTRV9TSFVURE9X TgotICAgICAgICBzaHV0ZG93bihkYXRhLCAxKzEpOwotI2VuZGlmIC8qIFVTRV9TSFVURE9XTiAq LwotICAgICAgICBjbG9zZShkYXRhKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICBk YXRhID0gLTE7Ci0gICAgICAgIGdsb2JhbGRpbiA9IC0xOwotICAgIH0KLSAgICBpZiAoZnRwc25k Lm9sZGludHIpCi0gICAgICAgIHNpZ25hbChTSUdJTlQsZnRwc25kLm9sZGludHIpOwotI2lmZGVm IFNJR1BJUEUKLSAgICBpZiAoZnRwc25kLm9sZGludHApCi0gICAgICAgIHNpZ25hbChTSUdQSVBF LGZ0cHNuZC5vbGRpbnRwKTsKLSNlbmRpZiAvKiBTSUdQSVBFICovCi0gICAgZnRwY29kZSA9IC0x OwotI2lmbmRlZiBPUzIKLSAgICAvKiBURVNUIE1FIElOIEs5NSAqLwotICAgIGlmIChoYXZlc2ln aW50KSB7Ci0JaGF2ZXNpZ2ludCA9IDA7Ci0JZGVidWcoRjEwMCwiZnRwIGZhaWxmdHBzZW5kIGNo YWluIHRvIHRyYXAoKS4uLiIsIiIsMCk7Ci0JaWYgKGZ0cHNuZC5vbGRpbnRyICE9IFNJR19JR04p Ci0JICAoKmZ0cHNuZC5vbGRpbnRyKShTSUdJTlQpOwotCS8qIE5PVFJFQUNIRUQgKEkgaG9wZSEp ICovCi0JZGVidWcoRjEwMCwiZnRwIGZhaWxmdHBzZW5kIHJldHVybiBmcm9tIHRyYXAoKS4uLiIs IiIsMCk7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotfQotCi1zdGF0aWMgVk9JRAotI2lmZGVm IENLX0FOU0lDCi1mYWlsZnRwc2VuZDIodm9pZCAqIHRocmVhZGluZm8pCi0jZWxzZQotZmFpbGZ0 cHNlbmQyKHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17Ci0jaWZkZWYgTlRTSUcKLSAgICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAgICAg ICAgICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLwotICAgICAgICBUbHNTZXRWYWx1ZShU bHNJbmRleCx0aHJlYWRpbmZvKTsKLSAgICAgICAgZGVidWcoRjEwMCwgImRvY21kZmlsZSBjYWxs ZWQgd2l0aCB0aHJlYWRpbmZvIGJsb2NrIiwiIiwgMCk7Ci0gICAgfSBlbHNlIGRlYnVnKEYxMDAs ICJkb2NtZGZpbGUgLSB0aHJlYWRpbmZvIGlzIE5VTEwiLCAiIiwgMCk7Ci0jZW5kaWYgLyogTlRT SUcgKi8KLSNpZmRlZiBDS19MT0dJTgotI2lmZGVmIElLU0QKLSNpZmRlZiBOVAotICAgIGlmIChp bnNlcnZlcikKLSAgICAgIHNldG50Y3JlZHMoKTsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8q IElLU0QgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCi0gICAgZGVidWcoRjEwMSwiZnRwIHNl bmRyZXF1ZXN0IGNhbmNlbGVkIiwiIixmdHBzbmQuYnl0ZXMpOwotICAgIHRmYyArPSBmZmM7Ci0j aWZkZWYgR0ZUSU1FUgotICAgIGZwZnNlY3MgPSBnZnRpbWVyKCk7Ci0jZW5kaWYgLyogR0ZUSU1F UiAqLwotICAgIHpjbG9zZShaSUZJTEUpOwotI2lmZGVmIFBJUEVTRU5ECi0gICAgaWYgKHNuZGZp bHRlcikKLSAgICAgIHBpcGVzZW5kID0gMDsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotICAgIHNp Z25hbChTSUdJTlQsIGZ0cHNuZC5vbGRpbnRyKTsKLSNpZmRlZiBTSUdQSVBFCi0gICAgaWYgKGZ0 cHNuZC5vbGRpbnRwKQotICAgICAgc2lnbmFsKFNJR1BJUEUsIGZ0cHNuZC5vbGRpbnRwKTsKLSNl bmRpZiAvKiBTSUdQSVBFICovCi0gICAgaWYgKCFjcGVuZCkgewotICAgICAgICBmdHBjb2RlID0g LTE7Ci0gICAgICAgIGZ0cHNuZHJldCA9IC0xOwotI2lmZGVmIE5UU0lHCi0gICAgICAgIGNrVGhy ZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgICAgIHJldHVybjsK LSAgICB9Ci0gICAgaWYgKGRhdGEgPj0gMCkgewotI2lmZGVmIENLX1NTTAotICAgICAgICBpZiAo c3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnKSB7Ci0gICAgICAgICAgICBTU0xfc2h1dGRvd24oc3Ns X2Z0cF9kYXRhX2Nvbik7Ci0gICAgICAgICAgICBTU0xfZnJlZShzc2xfZnRwX2RhdGFfY29uKTsK LSAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZyA9IDA7Ci0gICAgICAgICAgICBz c2xfZnRwX2RhdGFfY29uID0gTlVMTDsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwot I2lmZGVmIFRDUElQTElCCi0gICAgICAgIHNvY2tldF9jbG9zZShkYXRhKTsKLSNlbHNlIC8qIFRD UElQTElCICovCi0jaWZkZWYgVVNFX1NIVVRET1dOCi0gICAgICAgIHNodXRkb3duKGRhdGEsIDEr MSk7Ci0jZW5kaWYgLyogVVNFX1NIVVRET1dOICovCi0gICAgICAgIGNsb3NlKGRhdGEpOwotI2Vu ZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgIGRhdGEgPSAtMTsKLSAgICAgICAgZ2xvYmFsZGlu ID0gLTE7Ci0gICAgfQotICAgIGlmIChkb3V0KSB7Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAg c29ja2V0X2Nsb3NlKGRvdXQpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSNpZmRlZiBVU0VfU0hV VERPV04KLSAgICAgICAgc2h1dGRvd24oZG91dCwgMSsxKTsKLSNlbmRpZiAvKiBVU0VfU0hVVERP V04gKi8KLSAgICAgICAgY2xvc2UoZG91dCk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICB9 Ci0gICAgZnRwc25kLnJlcGx5ID0gZ2V0cmVwbHkoMCxmdHBzbmQuaW5jcyxmdHBzbmQub3V0Y3Ms ZnRwX3ZibSwwKTsKLSAgICBmdHBjb2RlID0gLTE7Ci0gICAgZnRwc25kcmV0ID0gLTE7Ci0KLSNp Zm5kZWYgT1MyCi0gICAgLyogVEVTVCBNRSBJTiBLOTUgKi8KLSAgICBpZiAoaGF2ZXNpZ2ludCkg ewotCWhhdmVzaWdpbnQgPSAwOwotCWRlYnVnKEYxMDAsImZ0cCBmYWlsZnRwc2VuZDIgY2hhaW4g dG8gdHJhcCgpLi4uIiwiIiwwKTsKLQlpZiAoZnRwc25kLm9sZGludHIgIT0gU0lHX0lHTikKLQkg ICgqZnRwc25kLm9sZGludHIpKFNJR0lOVCk7Ci0JLyogTk9UUkVBQ0hFRCAoSSBob3BlISkgKi8K LQlkZWJ1ZyhGMTAwLCJmdHAgZmFpbGZ0cHNlbmQyIHJldHVybiBmcm9tIHRyYXAoKS4uLiIsIiIs MCk7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotfQotCi1zdGF0aWMgVk9JRAotI2lmZGVmIENL X0FOU0lDCi1kb2Z0cHNlbmQyKHZvaWQgKiB0aHJlYWRpbmZvKQotI2Vsc2UKLWRvZnRwc2VuZDIo dGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5kaWYKLXsKLSAgICByZWdpc3RlciBp bnQgYywgZCA9IDA7Ci0gICAgaW50IG4sIHQsIHgsIG5vdGFmaWxlLCB1bmlxdWUgPSAwOwotICAg IGNoYXIgKmJ1ZiwgKmJ1ZnA7Ci0gICAgCi0jaWZkZWYgTlRTSUcKLSAgICBpZiAodGhyZWFkaW5m bykgeyAgICAgICAgICAgICAgICAgICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLwotICAg ICAgICBUbHNTZXRWYWx1ZShUbHNJbmRleCx0aHJlYWRpbmZvKTsKLSAgICAgICAgZGVidWcoRjEw MCwgImRvZnRwc2VuZDIgY2FsbGVkIHdpdGggdGhyZWFkaW5mbyBibG9jayIsIiIsIDApOwotICAg IH0gZWxzZSBkZWJ1ZyhGMTAwLCAiZG9mdHBzZW5kMiAtIHRocmVhZGluZm8gaXMgTlVMTCIsICIi LCAwKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgSUtTRAot I2lmZGVmIE5UCi0gICAgaWYgKGluc2VydmVyKQotICAgICAgc2V0bnRjcmVkcygpOwotI2VuZGlm IC8qIE5UICovCi0jZW5kaWYgLyogSUtTRCAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0KLSAg ICBidWYgPSBmdHBzbmRidWY7CQkJLyogKG5vdCBvbiBzdGFjaykgKi8KLQotICAgIHVuaXF1ZSA9 IHN0cmNtcChmdHBzbmQuY21kLCJTVE9VIikgPyAwIDogMTsKLSAgICBub3RhZmlsZSA9IHNuZGFy cmF5IHx8IHBpcGVzZW5kOwotCi0jaWZkZWYgRlRQX1JFU1RBUlQKLSAgICBpZiAoZnRwc25kLnJl c3RhcnQgJiYgKChjdXJ0eXBlID09IEZUVF9CSU4pIHx8IChhbGlrZSA+IDApKSkgewotICAgICAg ICBjaGFyICogcDsKLSAgICAgICAgY2hhbmdldHlwZShGVFRfQklOLDApOyAgICAgICAgICAvKiBD aGFuZ2UgdG8gYmluYXJ5ICovCi0KLSAgICAgICAgLyogQXNrIGZvciByZW1vdGUgZmlsZSdzIHNp emUgKi8KLSAgICAgICAgeCA9IGZ0cGNtZCgiU0laRSIsZnRwc25kLnJlbW90ZSxmdHBzbmQuaW5j cyxmdHBzbmQub3V0Y3MsZnRwX3ZibSk7Ci0KLSAgICAgICAgaWYgKHggPT0gUkVQTFlfQ09NUExF VEUpIHsgICAgICAvKiBIYXZlIGZ0cHNuZC5yZXBseSAqLwotICAgICAgICAgICAgcCA9ICZmdHBf cmVwbHlfc3RyWzRdOyAgICAgIC8qIFBhcnNlIGl0ICovCi0gICAgICAgICAgICB3aGlsZSAoaXNk aWdpdCgqcCkpIHsKLSAgICAgICAgICAgICAgICBzZW5kc3RhcnQgPSBzZW5kc3RhcnQgKiAxMCAr IChpbnQpKCpwIC0gJzAnKTsKLSAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBpZiAoKnAgJiYgKnAgIT0gQ1IpIHsgICAgICAgLyogQmFkIG51bWJlciAqLwot ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImRvZnRwc2VuZDIgYmFkIHNpemUiLGZ0cF9yZXBs eV9zdHIsMCk7Ci0gICAgICAgICAgICAgICAgc2VuZHN0YXJ0ID0gKENLX09GRl9UKTA7Ci0gICAg ICAgICAgICB9IGVsc2UgaWYgKHNlbmRzdGFydCA+IGZzaXplKSB7IC8qIFJlbW90ZSBmaWxlIGJp Z2dlciB0aGFuIGxvY2FsICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZG9mdHBzZW5k MiBiaWcgc2l6ZSIsY2tmc3RvYShmc2l6ZSksc2VuZHN0YXJ0KTsKLSAgICAgICAgICAgICAgICBz ZW5kc3RhcnQgPSAoQ0tfT0ZGX1QpMDsKLSAgICAgICAgICAgIH0KLQkgICAgLyogTG9jYWwgaXMg bmV3ZXIgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvZnRwc2VuZDIgc2l6ZSIsZnRwc25k LnJlbW90ZSxzZW5kc3RhcnQpOwotICAgICAgICAgICAgaWYgKGNoa21vZHRpbWUoZnRwc25kLmxv Y2FsLGZ0cHNuZC5yZW1vdGUsMCkgPT0gMikgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs ImRvZnRwc2VuZDIgZGF0ZSBtaXNtYXRjaCIsZnRwX3JlcGx5X3N0ciwwKTsKLSAgICAgICAgICAg ICAgICBzZW5kc3RhcnQgPSAoQ0tfT0ZGX1QpMDsgLyogU2VuZCB0aGUgd2hvbGUgZmlsZSAqLwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNoYW5nZXR5cGUoZnRwX3R5cCwwKTsg ICAgICAgICAgLyogQ2hhbmdlIGJhY2sgdG8gYXBwcm9wcmlhdGUgdHlwZSAqLwotICAgICAgICBp ZiAoc2VuZHN0YXJ0ID4gKENLX09GRl9UKTApIHsJLyogU3RpbGwgcmVzdGFydGluZz8gKi8KLSAg ICAgICAgICAgIGlmIChzZW5kc3RhcnQgPT0gZnNpemUpIHsgICAvKiBTYW1lIHNpemUgLSBubyBu ZWVkIHRvIHNlbmQgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2Z0cHNlbmQyIC9y ZXN0YXJ0IFNLSVAiLAotCQkgICAgICBja2ZzdG9hKGZzaXplKSxzZW5kc3RhcnQpOwotICAgICAg ICAgICAgICAgIHpjbG9zZShaSUZJTEUpOwotICAgICAgICAgICAgICAgIGZ0cHNuZHJldCA9IFNL UF9SRVM7Ci0jaWZkZWYgTlRTSUcKLSAgICAgICAgICAgICAgICBja1RocmVhZEVuZCh0aHJlYWRp bmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGVycm5vID0gMDsgICAgICAgICAgICAgICAgICAvKiBSZXN0 YXJ0IG5lZWRlZCwgc2VlayB0byB0aGUgc3BvdCAqLwotICAgICAgICAgICAgaWYgKHpmc2Vlaygo bG9uZylzZW5kc3RhcnQpIDwgMCkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvZnRw c2VuZDIgemZzZWVrIGZhaWxzIiwKLQkJICAgICAgZnRwc25kLmxvY2FsLHNlbmRzdGFydCk7Ci0g ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGU0VFSzogJXM6ICVzXG4iLCBmdHBzbmQu bG9jYWwsIGNrX2VycnN0cigpKTsKLSAgICAgICAgICAgICAgICBzZW5kc3RhcnQgPSAwOwotICAg ICAgICAgICAgICAgIHpjbG9zZShaSUZJTEUpOwotICAgICAgICAgICAgICAgIGZ0cHNuZHJldCA9 IC0xOwotI2lmZGVmIE5UU0lHCi0gICAgICAgICAgICAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5m byk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg ICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgZGVidWcoRjExMSwiZG9mdHBzZW5k MiB6ZnNlZWsgb2siLGZ0cHNuZC5sb2NhbCxzZW5kc3RhcnQpOwotICAgICAgICAgICAgeCA9IGZ0 cGNtZCgiUkVTVCIsY2tsdG9hKHNlbmRzdGFydCksLTEsLTEsZnRwX3ZibSk7Ci0gICAgICAgICAg ICBpZiAoeCAhPSBSRVBMWV9DT05USU5VRSkgewotICAgICAgICAgICAgICAgIHNlbmRzdGFydCA9 IDA7Ci0gICAgICAgICAgICAgICAgemNsb3NlKFpJRklMRSk7Ci0gICAgICAgICAgICAgICAgZnRw c25kcmV0ID0gLTE7Ci0jaWZkZWYgTlRTSUcKLSAgICAgICAgICAgICAgICBja1RocmVhZEVuZCh0 aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgICAgICAgICAgICAgIHJldHVybjsK LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZnRwc25kLmNtZCA9ICJTVE9S IjsKLSAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBzZW5kbW9kZSA9IFNNX1JFU0VO RDsKLSAgICAgICAgICAgIGZ0cHNuZC5jbWQgPSAiQVBQRSI7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgICAgICAgLyogc2VuZHN0YXJ0ID0gKENLX09GRl9UKTA7ICovCi0gICAgICAgIH0K LSAgICB9Ci0jZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8KLQotICAgIGlmICh1bmlxdWUgJiYgIXN0 b3VhcmcpCQkvKiBJZiB3ZSBrbm93IFNUT1UgYWNjZXB0cyBubyBhcmcgKi8KLSAgICAgIGZ0cHNu ZC5yZW1vdGUgPSBOVUxMOwkJLyogZG9uJ3QgaW5jbHVkZSBvbmUuICovCi0KLSAgICB4ID0gZnRw Y21kKGZ0cHNuZC5jbWQsIGZ0cHNuZC5yZW1vdGUsIGZ0cHNuZC5pbmNzLCBmdHBzbmQub3V0Y3Ms IGZ0cF92Ym0pOwotICAgIGRlYnVnKEYxMTEsImRvZnRwc2VuZDIgZnRwY29kZSIsZnRwc25kLmNt ZCxmdHBjb2RlKTsKLSAgICBkZWJ1ZyhGMTAxLCJkb2Z0cHNlbmQyIGZ0cGNtZCIsIiIseCk7Ci0K LSAgICBpZiAoeCAhPSBSRVBMWV9QUkVMSU0gJiYgdW5pcXVlKSB7Ci0JLyoKLQkgIFJGQzk1OSBz YXlzIFNUT1UgZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudC4gIEJ1dCBldmVyeSBGVFAgc2VydmVy Ci0JICBJJ3ZlIGVuY291bnRlcmVkIGJ1dCBvbmUgYWNjZXB0cyB0aGUgYXJnIGFuZCBjb25zdHJ1 Y3RzIHRoZSB1bmlxdWUKLQkgIG5hbWUgZnJvbSBpdCwgd2hpY2ggaXMgYmV0dGVyIHRoYW4gbWFr aW5nIHVwIGEgdG90YWxseSByYW5kb20gbmFtZQotCSAgZm9yIHRoZSBmaWxlLCB3aGljaCBpcyB3 aGF0IFJGQzk1OSBjYWxscyBmb3IuICBFc3BlY2lhbGx5IGJlY2F1c2UKLQkgIHRoZXJlIGlzIG5v IHdheSBmb3IgdGhlIGNsaWVudCB0byBmaW5kIG91dCB0aGUgbmFtZSBjaG9zZW4gYnkgdGhlCi0J ICBzZXJ2ZXIuICBTbyB3ZSB0cnkgU1RPVSB3aXRoIHRoZSBhcmd1bWVudCBmaXJzdCwgd2hpY2gg d29ya3Mgd2l0aAotCSAgbW9zdCBzZXJ2ZXJzLCBhbmQgaWYgaXQgZmFpbHMgd2UgcmV0cnkgaXQg d2l0aG91dCB0aGUgYXJnLCBmb3IKLQkgIHRoZSBiZW5lZml0IG9mIHRoZSBvbmUgcGlja3kgc2Vy dmVyIHRoYXQgaXMgbm90ICJsaWJlcmFsIGluIHdoYXQKLQkgIGl0IGFjY2VwdHMiIFVOTEVTUyB0 aGUgZmlyc3QgU1RPVSBnb3QgYSA1MDIgY29kZSAoIm5vdCBpbXBsZW1lbnRlZCIpCi0JICB3aGlj aCBtZWFucyBTVE9VIGlzIG5vdCBhY2NlcHRlZCwgcGVyaW9kLgotCSovCi0JaWYgKCh4ID09IDUp ICYmIHN0b3VhcmcgJiYgKGZ0cGNvZGUgIT0gNTAyKSkgewotCSAgICB4ID0gZnRwY21kKGZ0cHNu ZC5jbWQsTlVMTCxmdHBzbmQuaW5jcyxmdHBzbmQub3V0Y3MsZnRwX3ZibSk7IAotCSAgICBpZiAo eCA9PSBSRVBMWV9QUkVMSU0pCS8qIElmIGFjY2VwdGVkICovCi0JICAgICAgc3RvdWFyZyA9IDA7 CQkvKiBmbGFnIG5vIFNUT1UgYXJnIGZvciB0aGlzIHNlcnZlciAqLwotCX0KLSAgICB9Ci0gICAg aWYgKHggIT0gUkVQTFlfUFJFTElNKSB7Ci0gICAgICAgIHNpZ25hbChTSUdJTlQsIGZ0cHNuZC5v bGRpbnRyKTsKLSNpZmRlZiBTSUdQSVBFCi0gICAgICAgIGlmIChmdHBzbmQub2xkaW50cCkKLSAg ICAgICAgICBzaWduYWwoU0lHUElQRSwgZnRwc25kLm9sZGludHApOwotI2VuZGlmIC8qIFNJR1BJ UEUgKi8KLQlkZWJ1ZyhGMTAxLCJkb2Z0cHNlbmQyIG5vdCBSRVBMWV9QUkVMSU0iLCIiLHgpOwot ICAgICAgICB6Y2xvc2UoWklGSUxFKTsKLSNpZmRlZiBQSVBFU0VORAotICAgICAgICBpZiAoc25k ZmlsdGVyKQotICAgICAgICAgIHBpcGVzZW5kID0gMDsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwot ICAgICAgICBmdHBzbmRyZXQgPSAtMTsKLSNpZmRlZiBOVFNJRwotICAgICAgICBja1RocmVhZEVu ZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgICAgICByZXR1cm47Ci0gICAg fQotICAgIGRlYnVnKEYxMDAsImRvZnRwc2VuZDIgZ2V0dGluZyBkYXRhIGNvbm5lY3Rpb24uLi4i LCIiLDApOwotICAgIGRvdXQgPSBkYXRhY29ubihmdHBzbmQubG1vZGUpOyAgICAgICAgICAgICAv KiBHZXQgZGF0YSBjb25uZWN0aW9uICovCi0gICAgZGVidWcoRjEwMSwiZG9mdHBzZW5kMiBkYXRh Y29ubiIsIiIsZG91dCk7Ci0gICAgaWYgKGRvdXQgPT0gLTEpIHsKLSAgICAgICAgZmFpbGZ0cHNl bmQyKHRocmVhZGluZm8pOwotI2lmZGVmIE5UU0lHCi0gICAgICAgIGNrVGhyZWFkRW5kKHRocmVh ZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg LyogSW5pdGlhbGl6ZSBwZXItZmlsZSBzdGF0cyAqLwotICAgIGZmYyA9IChDS19PRkZfVCkwOwkJ CS8qIENoYXJhY3RlciBjb3VudGVyICovCi0gICAgY3BzID0gb2xkY3BzID0gMEw7ICAgICAgICAg ICAgICAgICAgLyogVGhydXB1dCAqLwotICAgIG4gPSAwOwotI2lmZGVmIEdGVElNRVIKLSAgICBy ZnRpbWVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNldCBmLnAuIHRpbWVyICov Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0jaWZkZWYgU0lHUElQRQotICAgIGZ0cHNuZC5vbGRp bnRwID0gc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOwotI2VuZGlmIC8qIFNJR1BJUEUgKi8KLSAg ICBkZWJ1ZyhGMTAxLCJkb2Z0cHNlbmQyIGN1cnR5cGUiLCIiLGN1cnR5cGUpOwotICAgIHN3aXRj aCAoY3VydHlwZSkgewotICAgICAgY2FzZSBGVFRfQklOOiAgICAgICAgICAgICAgICAgICAgIC8q IEJpbmFyeSBtb2RlICovCi0gICAgICBjYXNlIEZUVF9URU46Ci0gICAgICAgIGVycm5vID0gZCA9 IDA7Ci0jaWZkZWYgVk1TCi0JLyoKLQkgIFRoaXMgaXMgYmVjYXVzZSBWTVMgenhpbigpIGlzIEMt TGlicmFyeSBmcmVhZCgpIAotICAgICAgICAgIGJ1dCB0aGUgZmlsZSB3YXMgb3BlbmVkIHdpdGgg em9wZW5pKCksIHdoaWNoIGlzIFJNUy4KLQkqLwotCXdoaWxlICgoKGMgPSB6bWluY2hhcigpKSA+ IC0xKSAmJiAhY2FuY2VsZmlsZSkgewotCSAgICBmZmMrKzsKLQkgICAgaWYgKHp6b3V0KGRvdXQs YykgPCAwKQotCSAgICAgIGJyZWFrOwotCX0KLSNlbHNlICAvKiBWTVMgKi8KLSAgICAgICAgd2hp bGUgKChuID0genhpbihaSUZJTEUsYnVmLEZUUF9CVUZTSVogLSAxKSkgPiAwICYmICFjYW5jZWxm aWxlKSB7Ci0gICAgICAgICAgICBmdHBzbmQuYnl0ZXMgKz0gbjsKLSAgICAgICAgICAgIGZmYyAr PSBuOwotICAgICAgICAgICAgZGVidWcoRjExMSwiZG9mdHBzZW5kMiB6eGluIixja2x0b2Eobiks ZmZjKTsKLSAgICAgICAgICAgIGNraGV4ZHVtcCgiZG9mdHBzZW5kMiB6eGluIixidWYsMTYpOwot I2lmZGVmIENLX1NTTAotICAgICAgICAgICAgaWYgKHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZykg ewotICAgICAgICAgICAgICAgIGZvciAoYnVmcCA9IGJ1ZjsgbiA+IDA7IG4gLT0gZCwgYnVmcCAr PSBkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoZCA9IFNTTF93cml0ZShzc2xfZnRwX2Rh dGFfY29uLCBidWZwLCBuKSkgPD0gMCkKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgICAgc3BhY2tldHMrKzsKLSAgICAgICAgICAgICAgICAgICAgcGt0bnVt Kys7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhICE9IFhZRkRfQikgewotICAgICAg ICAgICAgICAgICAgICAgICAgc3BrdGwgPSBkOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRz Y3JlZW4oU0NSX1BULCdEJywoQ0tfT0ZGX1Qpc3BhY2tldHMsTlVMTCk7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotI2VuZGlm IC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICAgIGZvciAoYnVmcCA9IGJ1ZjsgbiA+IDA7IG4g LT0gZCwgYnVmcCArPSBkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoKGQgPSBzZWN1cmVf d3JpdGUoZG91dCwgKENIQVIgKilidWZwLCBuKSkgPD0gMCkKLSAgICAgICAgICAgICAgICAgICAg ICAgIHx8IGlzY2FuY2VsZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICAgICAgc3BhY2tldHMrKzsKLSAgICAgICAgICAgICAgICAgICAgcGt0bnVtKys7 Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhICE9IFhZRkRfQikgewotICAgICAgICAg ICAgICAgICAgICAgICAgc3BrdGwgPSBkOwotICAgICAgICAgICAgICAgICAgICAgICAgZnRzY3Jl ZW4oU0NSX1BULCdEJywoQ0tfT0ZGX1Qpc3BhY2tldHMsTlVMTCk7Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICB9Ci0j ZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICBpZiAoZCA8PSAwKQotICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgfQotI2VuZGlmCS8qIFZNUyAqLwotCi0JZGVidWcoRjExMSwiZG9m dHBzZW5kMiBYWCB6eGluIixja2x0b2EobiksZmZjKTsKLSAgICAgICAgaWYgKG4gPCAwKQotICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAibG9jYWw6ICVzOiAlc1xuIiwgZnRwc25kLmxvY2FsLCBj a19lcnJzdHIoKSk7Ci0gICAgICAgIGlmIChkIDwgMCB8fCAoZCA9IHNlY3VyZV9mbHVzaChkb3V0 KSkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoZCA9PSAtMSAmJiBlcnJubyAmJiBlcnJubyAhPSBF UElQRSkKLSAgICAgICAgICAgICAgcGVycm9yKCJuZXRvdXQiKTsKLSAgICAgICAgICAgIGZ0cHNu ZC5ieXRlcyA9IC0xOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZU VF9BU0M6ICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBtb2RlICovCi0jaWZuZGVmIE5PQ1NF VFMKLSAgICAgICAgaWYgKGZ0cHNuZC54bGF0ZSkgeyAgICAgICAgICAgICAvKiBXaXRoIHRyYW5z bGF0aW9uICovCi0gICAgICAgICAgICBpbml0eGxhdGUoZnRwc25kLmluY3MsZnRwc25kLm91dGNz KTsKLSAgICAgICAgICAgIHdoaWxlICghY2FuY2VsZmlsZSkgewotICAgICAgICAgICAgICAgIGlm ICgoYzAgPSB4Z25ieXRlKEZDX1VDUzIsZnRwc25kLmluY3MsTlVMTCkpIDwgMCkgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgaWYgKCh4ID0geHBuYnl0ZShjMCxUQ19VQ1MyLGZ0cHNuZC5vdXRjcyx4 eG91dCkpIDwgMCkgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0jZW5k aWYgLyogTk9DU0VUUyAqLwotICAgICAgICAgICAgLyogVGV4dCBtb2RlLCBubyB0cmFuc2xhdGlv biAqLwotICAgICAgICAgICAgd2hpbGUgKCgoYyA9IHptaW5jaGFyKCkpID4gLTEpICYmICFjYW5j ZWxmaWxlKSB7Ci0gICAgICAgICAgICAgICAgZmZjKys7Ci0JCWlmICh4eG91dChjKSA8IDApCi0J CSAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkID0gMDsKLSNpZm5kZWYgTk9D U0VUUwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICAgICBpZiAoZG91dCA9 PSAtMSB8fCAoZCA9IHNlY3VyZV9mbHVzaChkb3V0KSkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAo ZCA9PSAtMSAmJiBlcnJubyAmJiBlcnJubyAhPSBFUElQRSkKLSAgICAgICAgICAgICAgcGVycm9y KCJuZXRvdXQiKTsKLSAgICAgICAgICAgIGZ0cHNuZC5ieXRlcyA9IC0xOwotICAgICAgICB9Ci0g ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB0ZmMgKz0gZmZjOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBUb3RhbCBmaWxlIGNoYXJzICovCi0jaWZkZWYgR0ZUSU1FUgotICAgIGZwZnNlY3Mg PSBnZnRpbWVyKCk7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgIHpjbG9zZShaSUZJTEUpOyAg ICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIGlucHV0IGZpbGUgKi8KLSNpZmRlZiBQSVBFU0VO RAotICAgIGlmIChzbmRmaWx0ZXIpICAgICAgICAgICAgICAgICAgICAgIC8qIFVuZG8gdGhpcyAo aXQncyBwZXIgZmlsZSkgKi8KLSAgICAgIHBpcGVzZW5kID0gMDsKLSNlbmRpZiAvKiBQSVBFU0VO RCAqLwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIGlmIChzc2xfZnRwX2RhdGFfYWN0aXZlX2Zs YWcpIHsKLSAgICAgICAgICAgIFNTTF9zaHV0ZG93bihzc2xfZnRwX2RhdGFfY29uKTsKLSAgICAg ICAgICAgIFNTTF9mcmVlKHNzbF9mdHBfZGF0YV9jb24pOwotICAgICAgICAgICAgc3NsX2Z0cF9k YXRhX2FjdGl2ZV9mbGFnID0gMDsKLSAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9jb24gPSBOVUxM OwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSNpZmRlZiBUQ1BJUExJQgotICAg IHNvY2tldF9jbG9zZShkb3V0KTsgICAgICAgICAgICAgICAgIC8qIENsb3NlIGRhdGEgY29ubmVj dGlvbiAqLwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSNpZmRlZiBVU0VfU0hVVERPV04KLSAgICBz aHV0ZG93bihkb3V0LCAxKzEpOwotI2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLwotICAgIGNsb3Nl KGRvdXQpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgZnRwc25kLnJlcGx5ID0gZ2V0cmVw bHkoMCxmdHBzbmQuaW5jcyxmdHBzbmQub3V0Y3MsZnRwX3ZibSwwKTsKLSAgICBzaWduYWwoU0lH SU5ULCBmdHBzbmQub2xkaW50cik7ICAgICAgICAgICAgLyogUHV0IGJhY2sgaW50ZXJydXB0cyAq LwotI2lmZGVmIFNJR1BJUEUKLSAgICBpZiAoZnRwc25kLm9sZGludHApCi0gICAgICBzaWduYWwo U0lHUElQRSwgZnRwc25kLm9sZGludHApOwotI2VuZGlmIC8qIFNJR1BJUEUgKi8KLSAgICBpZiAo ZnRwc25kLnJlcGx5ID09IFJFUExZX1RSQU5TSUVOVCB8fCBmdHBzbmQucmVwbHkgPT0gUkVQTFlf RVJST1IpIHsKLSAgICAgICAgZGVidWcoRjEwMSwiZG9mdHBzZW5kMiBmdHBzbmQucmVwbHkiLCIi LGZ0cHNuZC5yZXBseSk7Ci0gICAgICAgIGZ0cHNuZHJldCA9IC0xOwotI2lmZGVmIE5UU0lHCi0g ICAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAg ICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGNhbmNlbGZpbGUpIHsKLSAgICAgICAgZGVidWco RjEwMSwiZG9mdHBzZW5kMiBjYW5jZWxlZCIsIiIsZnRwc25kLmJ5dGVzKTsKLSAgICAgICAgZnRw c25kcmV0ID0gLTE7Ci0jaWZkZWYgTlRTSUcKLSAgICAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5m byk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBkZWJ1 ZyhGMTAxLCJkb2Z0cHNlbmQyIG9rIiwiIixmdHBzbmQuYnl0ZXMpOwotICAgIGZ0cHNuZHJldCA9 IDA7Ci0jaWZkZWYgTlRTSUcKLSAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYg LyogTlRTSUcgKi8KLX0KLQotc3RhdGljIGludAotc2VuZHJlcXVlc3QoY21kLCBsb2NhbCwgcmVt b3RlLCB4bGF0ZSwgaW5jcywgb3V0Y3MsIHJlc3RhcnQpCi0gICAgY2hhciAqY21kLCAqbG9jYWws ICpyZW1vdGU7IGludCB4bGF0ZSwgaW5jcywgb3V0Y3MsIHJlc3RhcnQ7Ci17Ci0gICAgaWYgKCFy ZW1vdGUpIHJlbW90ZSA9ICIiOyAgICAgICAgICAgLyogQ2hlY2sgYXJncyAqLwotICAgIGlmICgh KnJlbW90ZSkgcmVtb3RlID0gbG9jYWw7Ci0gICAgaWYgKCFsb2NhbCkgbG9jYWwgPSAiIjsKLSAg ICBpZiAoISpsb2NhbCkgcmV0dXJuKC0xKTsKLSAgICBpZiAoIWNtZCkgY21kID0gIiI7Ci0gICAg aWYgKCEqY21kKSBjbWQgPSAiU1RPUiI7Ci0KLSAgICBkZWJ1ZyhGMTExLCJmdHAgc2VuZHJlcXVl c3QgcmVzdGFydCIsbG9jYWwscmVzdGFydCk7Ci0KLSAgICBub3V0ID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBJbml0IG91dHB1dCBidWZmZXIgY291bnQgKi8KLSAgICBmdHBzbmQu Ynl0ZXMgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGlucHV0IGJ5dGUgY291bnQgKi8K LSAgICBkb3V0ID0gLTE7Ci0KLSNpZmRlZiBGVFBfUFJPWFkKLSAgICBpZiAocHJveHkpIHsKLSAg ICAgICAgcHJveHRyYW5zKGNtZCwgbG9jYWwsIHJlbW90ZSwgIXN0cmNtcChjbWQsIlNUT1UiKSk7 Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogRlRQX1BST1hZICovCi0KLSAg ICBjaGFuZ2V0eXBlKGZ0cF90eXAsMCk7ICAgICAgICAgICAgICAvKiBDaGFuZ2UgdHlwZSBmb3Ig dGhpcyBmaWxlICovCi0KLSAgICBmdHBzbmQub2xkaW50ciA9IE5VTEw7CQkvKiBTZXQgdXAgaW50 ZXJydXB0IGhhbmRsZXIgKi8KLSAgICBmdHBzbmQub2xkaW50cCA9IE5VTEw7Ci0gICAgZnRwc25k LnJlc3RhcnQgPSByZXN0YXJ0OwotICAgIGZ0cHNuZC54bGF0ZSA9IHhsYXRlOwotICAgIGZ0cHNu ZC5sbW9kZSA9ICJ3YiI7Ci0KLSNpZmRlZiBQSVBFU0VORCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBVc2UgS2VybWl0IEFQSSBmb3IgZmlsZSBpL28uLi4gKi8KLSAgICBpZiAoc25kZmlsdGVy KSB7Ci0gICAgICAgIGNoYXIgKiBwID0gTlVMTCwgKiBxOwotI2lmbmRlZiBOT1NQTAotICAgICAg ICBpbnQgbiA9IENLTUFYUEFUSDsKLSAgICAgICAgaWYgKGNtZF9xdW90aW5nICYmIChwID0gKGNo YXIgKikgbWFsbG9jKG4gKyAxKSkpIHsKLSAgICAgICAgICAgIHEgPSBwOwotICAgICAgICAgICAg ZGVidWcoRjExMCwic2VuZHJlcXVlc3QgcGlwZXNlbmQgZmlsdGVyIixzbmRmaWx0ZXIsMCk7Ci0g ICAgICAgICAgICB6enN0cmluZyhzbmRmaWx0ZXIsJnAsJm4pOwotICAgICAgICAgICAgZGVidWco RjExMSwic2VuZHJlcXVlc3QgcGlwZW5hbWUiLHEsbik7Ci0gICAgICAgICAgICBpZiAobiA8PSAw KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIHNlbmQgZmlsdGVyICsgZmlsZW5h bWUgdG9vIGxvbmcsICVkIG1heC5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIENLTUFYUEFU SAotICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIGZyZWUocSk7Ci0g ICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNr c3RybmNweShmaWxuYW0scSxDS01BWFBBVEgrMSk7Ci0gICAgICAgICAgICBmcmVlKHEpOwotICAg ICAgICAgICAgbG9jYWwgPSBmaWxuYW07Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwot ICAgIH0KLQotICAgIGlmIChzbmRmaWx0ZXIpICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHNl bmRpbmcgdGhydSBhIGZpbHRlciAqLwotICAgICAgcGlwZXNlbmQgPSAxOyAgICAgICAgICAgICAg ICAgICAgIC8qIHNldCB0aGlzIGZvciBvcGVuIGFuZCBpL28gKi8KLSNlbmRpZiAvKiBQSVBFU0VO RCAqLwotICAgIAotI2lmZGVmIFZNUwotICAgIGRlYnVnKEYxMDEsIlhYWCBiZWZvcmUgb3Blbmkg YmluYXJ5IiwiIixiaW5hcnkpOwotICAgIGRlYnVnKEYxMDEsIlhYWCBiZWZvcmUgb3BlbmkgZnRw X3R5cCIsIiIsZnRwX3R5cCk7Ci0jZW5kaWYJLyogVk1TICovCi0KLSAgICBpZiAob3BlbmkobG9j YWwpID09IDApCQkvKiBUcnkgdG8gb3BlbiB0aGUgaW5wdXQgZmlsZSAqLwotICAgICAgcmV0dXJu KC0xKTsKLQotI2lmZGVmIFZNUwotICAgIGRlYnVnKEYxMDEsIlhYWCBhZnRlciBvcGVuaSBiaW5h cnkiLCIiLGJpbmFyeSk7Ci0gICAgZGVidWcoRjEwMSwiWFhYIGFmdGVyIG9wZW5pIGZ0cF90eXAi LCIiLGZ0cF90eXApOwotICAgIGlmICghZm9yY2V0eXBlKSB7Ci0JaWYgKGJpbmFyeSAhPSBmdHBf dHlwKSB7CS8qIFZNUyB6b3BlbmkoKSBzZXRzIGJpbmFyeSAqLwotCSAgICBkZWJ1ZyhGMTAxLCJY WFggY2hhbmdpbmcgdHlwZSIsIiIsYmluYXJ5KTsKLQkgICAgZG9mdHB0eXAoYmluYXJ5KTsKLQkg ICAgZGVidWcoRjEwMSwiWFhYIGFmdGVyIGRvZnRwdHlwIiwiIixmdHBfdHlwKTsKLQotCSAgICAv KiAqKioqICovCi0JICAgIGlmIChkaXNwbGEgJiYgZmRpc3BsYSkgewkvKiBVcGRhdGUgZmlsZSB0 eXBlIGRpc3BsYXkgKi8KLQkJZnRzY3JlZW4oU0NSX0ZOLCdGJywoQ0tfT0ZGX1QpMCxsb2NhbCk7 Ci0JICAgIH0KLQl9Ci0gICAgfQotI2VuZGlmCS8qIFZNUyAqLwotICAgIGZ0cHNuZHJldCA9IDA7 Ci0gICAgZnRwc25kLmluY3MgPSBpbmNzOwotICAgIGZ0cHNuZC5vdXRjcyA9IG91dGNzOwotICAg IGZ0cHNuZC5jbWQgPSBjbWQ7Ci0gICAgZnRwc25kLmxvY2FsID0gbG9jYWw7Ci0gICAgZnRwc25k LnJlbW90ZSA9IHJlbW90ZTsKLSAgICBmdHBzbmQub2xkaW50ciA9IHNpZ25hbChTSUdJTlQsIGNh bmNlbHNlbmQpOwotICAgIGhhdmVzaWdpbnQgPSAwOwotCi0gICAgaWYgKGNjX2V4ZWN1dGUoY2tq YWRkcihzZW5kY2FuY2VsKSwgZG9mdHBzZW5kLCBmYWlsZnRwc2VuZCkgPCAwKQotICAgICAgcmV0 dXJuKC0xKTsKLSAgICBpZiAoZnRwc25kcmV0IDwgMCkKLSAgICAgIHJldHVybigtMSk7Ci0gICAg aWYgKGNjX2V4ZWN1dGUoY2tqYWRkcihzZW5kY2FuY2VsKSwgZG9mdHBzZW5kMiwgZmFpbGZ0cHNl bmQyKSA8IDApCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgcmV0dXJuKGZ0cHNuZHJldCk7Ci19 Ci0KLXN0YXRpYyBzaWd0eXBlCi1jYW5jZWxyZWN2KHNpZykgaW50IHNpZzsgewotICAgIGhhdmVz aWdpbnQrKzsKLSAgICBjYW5jZWxmaWxlID0gMDsKLSAgICBjYW5jZWxncm91cCsrOwotICAgIHNl Y3VyZV9nZXRjKDAsMSk7CQkJLyogSW5pdGlhbGl6ZSBuZXQgaW5wdXQgYnVmZmVycyAqLwotICAg IHByaW50ZigiIENhbmNlbGluZy4uLlxuIik7Ci0gICAgZGVidWcoRjEwMCwiZnRwIGNhbmNlbHJl Y3YgY2F1Z2h0IFNJR0lOVCIsIiIsMCk7Ci0gICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgaWYgKGZw X25tbCkgewotICAgICAgICBpZiAoZnBfbm1sICE9IHN0ZG91dCkKLSAgICAgICAgICBmY2xvc2Uo ZnBfbm1sKTsKLSAgICAgICAgZnBfbm1sID0gTlVMTDsKLSAgICB9Ci0jaWZuZGVmIE9TMgotICAg IGxvbmdqbXAocmVjdmNhbmNlbCwgMSk7Ci0jZWxzZQotICAgIFBvc3RDdHJsQ1NlbSgpOwotI2Vu ZGlmIC8qIE9TMiAqLwotfQotCi0vKiBBcmd1bWVudGxlc3MgZnJvbnQtZW5kIGZvciBzZWN1cmVf Z2V0YygpICovCi0KLXN0YXRpYyBpbnQKLW5ldGdldGMoKSB7Ci0gICAgcmV0dXJuKHNlY3VyZV9n ZXRjKGdsb2JhbGRpbiwwKSk7Ci19Ci0KLS8qIFJldHVybnMgLTEgb24gZmFpbHVyZSwgMCBvbiBz dWNjZXNzLCAxIGlmIGZpbGUgc2tpcHBlZCAqLwotCi0vKgotICBTZXRzIGZ0cGNvZGUgPCAwIG9u IGZhaWx1cmUgaWYgZmFpbHVyZSByZWFzb24gaXMgbm90IHNlcnZlciByZXBseSBjb2RlOgotICAg IC0xOiBpbnRlcnJ1cHRlZCBieSB1c2VyLgotICAgIC0yOiBlcnJvciBvcGVuaW5nIG9yIHdyaXRp bmcgb3V0cHV0IGZpbGUgKHJlYXNvbiBpbiBlcnJubykuCi0gICAgLTM6IGZhaWx1cmUgdG8gbWFr ZSBkYXRhIGNvbm5lY3Rpb24uCi0gICAgLTQ6IG5ldHdvcmsgcmVhZCBlcnJvciAocmVhc29uIGlu IGVycm5vKS4KLSovCi0KLXN0cnVjdCB4eF9mdHByZWN2IHsKLSAgICBpbnQgcmVwbHk7Ci0gICAg aW50IGZjczsKLSAgICBpbnQgcmNzOwotICAgIGludCByZWNvdmVyOwotICAgIGludCB4bGF0ZTsK LSAgICBpbnQgZGluOwotICAgIGludCBpc19yZXRyOwotICAgIHNpZ190IG9sZGludHIsIG9sZGlu dHA7Ci0gICAgY2hhciAqIGNtZDsKLSAgICBjaGFyICogbG9jYWw7Ci0gICAgY2hhciAqIHJlbW90 ZTsKLSAgICBjaGFyICogbG1vZGU7Ci0gICAgY2hhciAqIHBpcGVuYW1lOwotICAgIGludCAgICB0 Y3JmbGFnOwotICAgIENLX09GRl9UIGxvY2Fsc2l6ZTsKLX07Ci1zdGF0aWMgc3RydWN0IHh4X2Z0 cHJlY3YgZnRwcmVjdjsKLQotc3RhdGljIGludCBmdHByZWN2cmV0ID0gMDsKLQotc3RhdGljIFZP SUQKLSNpZmRlZiBDS19BTlNJQwotZmFpbGZ0cHJlY3YoVk9JRCAqIHRocmVhZGluZm8pCi0jZWxz ZQotZmFpbGZ0cHJlY3YodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsKLSNpZmRlZiBOVFNJRwotICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAg ICAgICAgICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0gICAgICAgIFRsc1Nl dFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pOwotICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9jbWRm aWxlIGNhbGxlZCB3aXRoIHRocmVhZGluZm8gYmxvY2siLCIiLCAwKTsKLSAgICB9IGVsc2UgZGVi dWcoRjEwMCwgImRvY21kZmlsZSAtIHRocmVhZGluZm8gaXMgTlVMTCIsICIiLCAwKTsKLSNlbmRp ZiAvKiBOVFNJRyAqLwotCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBJS1NECi0jaWZkZWYgTlQK LSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogTlQgKi8K LSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotICAgIHdoaWxlIChj cGVuZCkgewotICAgICAgICBmdHByZWN2LnJlcGx5ID0gZ2V0cmVwbHkoMCxmdHByZWN2LmZjcyxm dHByZWN2LnJjcyxmdHBfdmJtLDApOwotICAgIH0KLSAgICBpZiAoZGF0YSA+PSAwKSB7Ci0jaWZk ZWYgQ0tfU1NMCi0gICAgICAgIGlmIChzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcpIHsKLSAgICAg ICAgICAgIFNTTF9zaHV0ZG93bihzc2xfZnRwX2RhdGFfY29uKTsKLSAgICAgICAgICAgIFNTTF9m cmVlKHNzbF9mdHBfZGF0YV9jb24pOwotICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9m bGFnID0gMDsKLSAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9jb24gPSBOVUxMOwotICAgICAgICB9 Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgc29ja2V0X2Ns b3NlKGRhdGEpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSNpZmRlZiBVU0VfU0hVVERPV04KLSAg ICAgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKLSNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KLSAg ICAgICAgY2xvc2UoZGF0YSk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICAgICAgZGF0YSA9 IC0xOwotICAgICAgICBnbG9iYWxkaW4gPSAtMTsKLSAgICB9Ci0gICAgaWYgKGZ0cHJlY3Yub2xk aW50cikKLSAgICAgIHNpZ25hbChTSUdJTlQsIGZ0cHJlY3Yub2xkaW50cik7Ci0gICAgZnRwY29k ZSA9IC0xOwotICAgIGZ0cHJlY3ZyZXQgPSAtMTsKLQotI2lmbmRlZiBPUzIKLSAgICAvKiBURVNU IE1FIElOIEs5NSAqLwotICAgIGlmIChoYXZlc2lnaW50KSB7Ci0JaGF2ZXNpZ2ludCA9IDA7Ci0J ZGVidWcoRjEwMCwiZnRwIGZhaWxmdHByZWN2IGNoYWluIHRvIHRyYXAoKS4uLiIsIiIsMCk7Ci0J aWYgKGZ0cHJlY3Yub2xkaW50ciAhPSBTSUdfSUdOKQotCSAgKCpmdHByZWN2Lm9sZGludHIpKFNJ R0lOVCk7Ci0JLyogTk9UUkVBQ0hFRCAoSSBob3BlISkgKi8KLQlkZWJ1ZyhGMTAwLCJmdHAgZmFp bGZ0cHJlY3YgcmV0dXJuIGZyb20gdHJhcCgpLi4uIiwiIiwwKTsKLSAgICB9Ci0jZW5kaWYgLyog T1MyICovCi0gICAgcmV0dXJuOwotfQotCi1zdGF0aWMgVk9JRAotI2lmZGVmIENLX0FOU0lDCi1k b2Z0cHJlY3YoVk9JRCAqIHRocmVhZGluZm8pCi0jZWxzZQotZG9mdHByZWN2KHRocmVhZGluZm8p IFZPSUQgKiB0aHJlYWRpbmZvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0jaWZkZWYgTlRT SUcKLSAgICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAgICAgICAgICAvKiBUaHJlYWQgbG9j YWwgc3RvcmFnZS4uLiAqLwotICAgICAgICBUbHNTZXRWYWx1ZShUbHNJbmRleCx0aHJlYWRpbmZv KTsKLSAgICAgICAgZGVidWcoRjEwMCwgImRvY21kZmlsZSBjYWxsZWQgd2l0aCB0aHJlYWRpbmZv IGJsb2NrIiwiIiwgMCk7Ci0gICAgfSBlbHNlIGRlYnVnKEYxMDAsICJkb2NtZGZpbGUgLSB0aHJl YWRpbmZvIGlzIE5VTEwiLCAiIiwgMCk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSNpZmRlZiBDS19M T0dJTgotI2lmZGVmIElLU0QKLSNpZmRlZiBOVAotICAgIGlmIChpbnNlcnZlcikKLSAgICAgIHNl dG50Y3JlZHMoKTsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIElLU0QgKi8KLSNlbmRpZiAv KiBDS19MT0dJTiAqLwotCi0jaWZuZGVmIENPTU1FTlQKLSAgICBpZiAoIW91dDJzY3JlZW4gJiYg IWZ0cHJlY3YucGlwZW5hbWUpIHsKLQlpbnQgeDsKLQljaGFyICogbG9jYWw7Ci0JbG9jYWwgPSBm dHByZWN2LmxvY2FsOwotCXggPSB6Y2hrbyhsb2NhbCk7Ci0gICAgICAgIGlmICh4IDwgMCkgewot ICAgICAgICAgICAgaWYgKCghZHB5YWN0aXZlIHx8IGZ0cF9kZWIpKQotICAgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwKLQkJICAgICAgIlRlbXBvcmFyeSBmaWxlICVzOiAlc1xuIiwgZnRwcmVj di5sb2NhbCwgY2tfZXJyc3RyKCkpOwotICAgICAgICAgICAgc2lnbmFsKFNJR0lOVCwgZnRwcmVj di5vbGRpbnRyKTsKLSAgICAgICAgICAgIGZ0cGNvZGUgPSAtMjsKLSAgICAgICAgICAgIGZ0cHJl Y3ZyZXQgPSAtMTsKLSNpZmRlZiBOVFNJRwotICAgICAgICAgICAgY2tUaHJlYWRFbmQodGhyZWFk aW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg fQotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgY2hhbmdldHlwZSgoIWZ0cHJlY3Yu aXNfcmV0cikgPyBGVFRfQVNDIDogZnRwX3R5cCwgMCk7Ci0gICAgaWYgKGluaXRjb25uKCkpIHsg ICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZGF0YSBjb25uZWN0aW9uICovCi0g ICAgICAgIHNpZ25hbChTSUdJTlQsIGZ0cHJlY3Yub2xkaW50cik7Ci0gICAgICAgIGZ0cGNvZGUg PSAtMTsKLSAgICAgICAgZnRwcmVjdnJldCA9IC0zOwotI2lmZGVmIE5UU0lHCi0gICAgICAgIGNr VGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgICAgIHJldHVy bjsKLSAgICB9Ci0gICAgc2VjdXJlX2dldGMoMCwxKTsJCQkvKiBJbml0aWFsaXplIG5ldCBpbnB1 dCBidWZmZXJzICovCi0gICAgZnRwcmVjdnJldCA9IDA7Ci0KLSNpZmRlZiBOVFNJRwotICAgIGNr VGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi19Ci0KLXN0YXRpYyBW T0lECi0jaWZkZWYgQ0tfQU5TSUMKLWZhaWxmdHByZWN2MihWT0lEICogdGhyZWFkaW5mbykKLSNl bHNlCi1mYWlsZnRwcmVjdjIodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsKLSNpZmRlZiBOVFNJRwotICAgIGlmICh0aHJlYWRpbmZvKSB7ICAg ICAgICAgICAgICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0gICAgICAgIFRs c1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pOwotICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9j bWRmaWxlIGNhbGxlZCB3aXRoIHRocmVhZGluZm8gYmxvY2siLCIiLCAwKTsKLSAgICB9IGVsc2Ug ZGVidWcoRjEwMCwgImRvY21kZmlsZSAtIHRocmVhZGluZm8gaXMgTlVMTCIsICIiLCAwKTsKLSNl bmRpZiAvKiBOVFNJRyAqLwotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgSUtTRAotI2lmZGVmIE5U Ci0gICAgaWYgKGluc2VydmVyKQotICAgICAgc2V0bnRjcmVkcygpOwotI2VuZGlmIC8qIE5UICov Ci0jZW5kaWYgLyogSUtTRCAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0KLSAgICAvKiBDYW5j ZWwgdXNpbmcgUkZDOTU5IHJlY29tbWVuZGVkIElQLFNZTkMgc2VxdWVuY2UgICovCi0KLSAgICBk ZWJ1ZyhGMTAwLCJmdHAgcmVjdnJlcXVlc3QgQ0FOQ0VMIiwiIiwwKTsKLSNpZmRlZiBHRlRJTUVS Ci0gICAgZnBmc2VjcyA9IGdmdGltZXIoKTsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0jaWZkZWYg U0lHUElQRQotICAgIGlmIChmdHByZWN2Lm9sZGludHApCi0gICAgICBzaWduYWwoU0lHUElQRSwg ZnRwcmVjdi5vbGRpbnRyKTsKLSNlbmRpZiAvKiBTSUdQSVBFICovCi0gICAgc2lnbmFsKFNJR0lO VCwgU0lHX0lHTik7Ci0gICAgaWYgKCFjcGVuZCkgewotICAgICAgICBmdHBjb2RlID0gLTE7Ci0g ICAgICAgIHNpZ25hbChTSUdJTlQsIGZ0cHJlY3Yub2xkaW50cik7Ci0gICAgICAgIGZ0cHJlY3Zy ZXQgPSAtMTsKLSNpZmRlZiBOVFNJRwotICAgICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsK LSNlbmRpZiAvKiBOVFNJRyAqLwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhbmNlbF9y ZW1vdGUoZnRwcmVjdi5kaW4pOwotCi0jaWZkZWYgRlRQX1RJTUVPVVQKLSAgICBpZiAoZnRwX3Rp bWVkX291dCAmJiBvdXQyc2NyZWVuICYmICFxdWlldCkKLSAgICAgIHByaW50ZigiXG4/VGltZWQg b3V0LlxuIik7Ci0jZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KLQotICAgIGlmIChmdHBjb2RlID4g LTEpCi0gICAgICBmdHBjb2RlID0gLTE7Ci0gICAgaWYgKGRhdGEgPj0gMCkgewotI2lmZGVmIENL X1NTTAotICAgICAgICBpZiAoc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnKSB7Ci0gICAgICAgICAg ICBTU0xfc2h1dGRvd24oc3NsX2Z0cF9kYXRhX2Nvbik7Ci0gICAgICAgICAgICBTU0xfZnJlZShz c2xfZnRwX2RhdGFfY29uKTsKLSAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZyA9 IDA7Ci0gICAgICAgICAgICBzc2xfZnRwX2RhdGFfY29uID0gTlVMTDsKLSAgICAgICAgfQotI2Vu ZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgIHNvY2tldF9jbG9zZShk YXRhKTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0jaWZkZWYgVVNFX1NIVVRET1dOCi0gICAgICAg IHNodXRkb3duKGRhdGEsIDErMSk7Ci0jZW5kaWYgLyogVVNFX1NIVVRET1dOICovCi0gICAgICAg IGNsb3NlKGRhdGEpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgIGRhdGEgPSAtMTsK LSAgICAgICAgZ2xvYmFsZGluID0gLTE7Ci0gICAgfQotICAgIGlmICghb3V0MnNjcmVlbikgewot CWludCB4ID0gMDsKLQlkZWJ1ZyhGMTExLCJmdHAgZmFpbHJlY3YyIHpjbG9zZSIsZnRwcmVjdi5s b2NhbCxrZWVwKTsKLQl6Y2xvc2UoWk9GSUxFKTsKLQlzd2l0Y2ggKGtlZXApIHsJCQkvKiB3aGlj aCBpcy4uLiAqLwotCSAgY2FzZSBTRVRfQVVUTzoJCS8qIEFVVE8gKi8KLQkgICAgaWYgKGN1cnR5 cGUgPT0gRlRUX0FTQykJLyogRGVsZXRlIGZpbGUgaWYgVFlQRSBBLiAqLwotCSAgICAgIHggPSAx OwotCSAgICBicmVhazsKLQkgIGNhc2UgU0VUX09GRjoJCQkvKiBESVNDQVJEICovCi0JICAgIHgg PSAxOwkJCS8qIERlbGV0ZSBmaWxlLCBwZXJpb2QuICovCi0JICAgIGJyZWFrOwotCSAgZGVmYXVs dDoJCQkvKiBLRUVQICovCi0JICAgIGJyZWFrOwotCX0KLQlpZiAoeCkgewotCSAgICB4ID0gemRl bGV0KGZ0cHJlY3YubG9jYWwpOwotCSAgICBkZWJ1ZyhGMTExLCJmdHAgZmFpbHJlY3YyIGRlbGV0 ZSBpbmNvbXBsZXRlIixmdHByZWN2LmxvY2FsLHgpOwotCX0KLSAgICB9Ci0gICAgaWYgKGZ0cHJl Y3YuZGluKSB7Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgc29ja2V0X2Nsb3NlKGZ0cHJlY3Yu ZGluKTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0jaWZkZWYgVVNFX1NIVVRET1dOCi0gICAgICAg IHNodXRkb3duKGZ0cHJlY3YuZGluLCAxKzEpOwotI2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLwot ICAgICAgICBjbG9zZShmdHByZWN2LmRpbik7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICB9 Ci0gICAgc2lnbmFsKFNJR0lOVCwgZnRwcmVjdi5vbGRpbnRyKTsKLSAgICBmdHByZWN2cmV0ID0g LTE7Ci0KLSAgICBpZiAoaGF2ZXNpZ2ludCkgewotCWhhdmVzaWdpbnQgPSAwOwotCWRlYnVnKEYx MDAsIkZUUCBmYWlsZnRwcmVjdjIgY2hhaW4gdG8gdHJhcCgpLi4uIiwiIiwwKTsKLSNpZmRlZiBP UzIKLSAgICAgICAgZGVidWcoRjEwMCwiRlRQIGZhaWxmdHByZWN2MiBQb3N0Q3RybENTZW0oKS4u LiIsIiIsMCk7Ci0gICAgICAgIFBvc3RDdHJsQ1NlbSgpOwotI2Vsc2UgLyogT1MyICovCi0JaWYg KGZ0cHJlY3Yub2xkaW50ciAhPSBTSUdfSUdOKQotCSAgKCpmdHByZWN2Lm9sZGludHIpKFNJR0lO VCk7Ci0JLyogTk9UUkVBQ0hFRCAoSSBob3BlISkgKi8KLQlkZWJ1ZyhGMTAwLCJmdHAgZmFpbGZ0 cHJlY3YyIHJldHVybiBmcm9tIHRyYXAoKS4uLiIsIiIsMCk7Ci0jZW5kaWYgLyogT1MyICovCi0g ICAgfQotfQotCi1zdGF0aWMgVk9JRAotI2lmZGVmIENLX0FOU0lDCi1kb2Z0cHJlY3YyKFZPSUQg KiB0aHJlYWRpbmZvKQotI2Vsc2UKLWRvZnRwcmVjdjIodGhyZWFkaW5mbykgVk9JRCAqIHRocmVh ZGluZm87Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICByZWdpc3RlciBpbnQgYywgZDsK LSAgICBDS19PRkZfVCBieXRlcyA9IChDS19PRkZfVCkwOwotICAgIGludCBiYXJlX2xmcyA9IDA7 Ci0gICAgaW50IGJsa3NpemUgPSAwOwotICAgIFVMT05HIHN0YXJ0ID0gMEwsIHN0b3A7Ci0gICAg Y2hhciAqIHA7Ci0gICAgc3RhdGljIGNoYXIgKiByY3ZidWYgPSBOVUxMOwotICAgIHN0YXRpYyBp bnQgcmN2YnVmc2l6ID0gMDsKLSNpZmRlZiBDS19VUkwKLSAgICBjaGFyIG5ld25hbWVbQ0tNQVhQ QVRIKzFdOwkJLyogRm9yIGZpbGUgZGlhbG9nICovCi0jZW5kaWYgLyogQ0tfVVJMICovCi0gICAg ZXh0ZXJuIGludCBhZGxfYXNrOwotCi0jaWZkZWYgRlRQX1RJTUVPVVQKLSAgICBmdHBfdGltZWRf b3V0ID0gMDsKLSNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLwotCi0gICAgZnRwcmVjdi5kaW4gPSAt MTsKLSNpZmRlZiBOVFNJRwotICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAgICAgICAgICAgICAg IC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0gICAgICAgIFRsc1NldFZhbHVlKFRsc0lu ZGV4LHRocmVhZGluZm8pOwotICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9jbWRmaWxlIGNhbGxlZCB3 aXRoIHRocmVhZGluZm8gYmxvY2siLCIiLCAwKTsKLSAgICB9IGVsc2UgZGVidWcoRjEwMCwgImRv Y21kZmlsZSAtIHRocmVhZGluZm8gaXMgTlVMTCIsICIiLCAwKTsKLSNlbmRpZiAvKiBOVFNJRyAq LwotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgSUtTRAotI2lmZGVmIE5UCi0gICAgaWYgKGluc2Vy dmVyKQotICAgICAgc2V0bnRjcmVkcygpOwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogSUtT RCAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0KLSAgICBpZiAoZnRwcmVjdi5yZWNvdmVyKSB7 ICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYXRlIHJlY292ZXJ5ICovCi0gICAgICAgIHgg PSBmdHBjbWQoIlJFU1QiLGNrZnN0b2EoZnRwcmVjdi5sb2NhbHNpemUpLC0xLC0xLGZ0cF92Ym0p OwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcmVwbHkiLCJSRVNUIix4KTsKLSAgICAgICAgaWYg KHggPT0gUkVQTFlfQ09OVElOVUUpIHsKLSAgICAgICAgICAgIGZ0cHJlY3YubG1vZGUgPSAiYWIi OwotICAgICAgICAgICAgcnNfbGVuID0gZnRwcmVjdi5sb2NhbHNpemU7Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICBmdHByZWN2LnJlY292ZXIgPSAwOwotICAgICAgICB9Ci0gICAgfQot ICAgIC8qIElNUE9SVEFOVDogTm8gRlRQIGNvbW1hbmRzIGNhbiBjb21lIGJldHdlZW4gUkVTVCBh bmQgUkVUUiEgKi8KLQotICAgIGRlYnVnKEYxMTEsImZ0cCByZWN2cmVxdWVzdCByZWNvdmVyIEUi LGZ0cHJlY3YucmVtb3RlLGZ0cHJlY3YucmVjb3Zlcik7Ci0KLSAgICAvKiBTZW5kIHRoZSBjb21t YW5kIGFuZCBnZXQgcmVwbHkgKi8KLSAgICBkZWJ1ZyhGMTEwLCJmdHAgcmVjdnJlcXVlc3QgY21k IixmdHByZWN2LmNtZCwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJmdHAgcmVjdnJlcXVlc3QgcmVtb3Rl IixmdHByZWN2LnJlbW90ZSwwKTsKLQotICAgIGlmIChmdHBjbWQoZnRwcmVjdi5jbWQsZnRwcmVj di5yZW1vdGUsZnRwcmVjdi5mY3MsZnRwcmVjdi5yY3MsZnRwX3ZibSkKLQkhPSBSRVBMWV9QUkVM SU0pIHsKLSAgICAgICAgc2lnbmFsKFNJR0lOVCwgZnRwcmVjdi5vbGRpbnRyKTsgLyogQmFkIHJl cGx5LCBmYWlsLiAqLwotICAgICAgICBmdHByZWN2cmV0ID0gLTE7CQkvKiBmdHBjb2RlIGlzIHNl dCBieSBmdHBjbWQoKSAqLwotI2lmZGVmIE5UU0lHCi0gICAgICAgIGNrVGhyZWFkRW5kKHRocmVh ZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg ZnRwcmVjdi5kaW4gPSBkYXRhY29ubigiciIpOyAgICAgICAgLyogR29vZCByZXBseSwgb3BlbiBk YXRhIGNvbm5lY3Rpb24gKi8KLSAgICBnbG9iYWxkaW4gPSBmdHByZWN2LmRpbjsgICAgICAgICAg ICAvKiBHbG9iYWwgY29weSBvZiBmaWxlIGRlc2NyaXB0b3IgKi8KLSAgICBpZiAoZnRwcmVjdi5k aW4gPT0gLTEpIHsgICAgICAgICAgICAvKiBDaGVjayBmb3IgZmFpbHVyZSAqLwotICAgICAgICBm dHBjb2RlID0gLTM7ICAgICAgICAgICAgICAgICAgIC8qIENvZGUgZm9yIG5vIGRhdGEgY29ubmVj dGlvbiAqLwotICAgICAgICBmdHByZWN2cmV0ID0gLTE7Ci0jaWZkZWYgTlRTSUcKLSAgICAgICAg Y2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgcmV0 dXJuOwotICAgIH0KLSNpZmRlZiBDS19VUkwKLSAgICAvKiBJbiBLOTUgR1VJIHB1dCB1cCBhIGZp bGUgYm94ICovCi0gICAgaWYgKGhhdmV1cmwgJiYgZ191cmwucHRoICYmIGFkbF9hc2sJKSB7IC8q IERvd25sb2FkaW5nIGZyb20gYSBVUkwgKi8KLQlpbnQgeDsKLQljaGFyICogcHJlZmFjZSA9Ci0i XHJcbkluY29taW5nIGZpbGUgZnJvbSBGVFAgc2VydmVyLi4uXHJcblwKLVBsZWFzZSBjb25maXJt IG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24gb3Igc3VwcGx5IGFuIGFsdGVybmF0aXZlOiI7Ci0K LQl4ID0gdXFfZmlsZShwcmVmYWNlLAkJLyogSzk1IEdVSTogUHV0IHVwIGZpbGUgYm94LiAqLwot CQkgICAgTlVMTCwKLQkJICAgIDQsCi0JCSAgICBOVUxMLAotCQkgICAgZnRwcmVjdi5sb2NhbCA/ IGZ0cHJlY3YubG9jYWwgOiBmdHByZWN2LnJlbW90ZSwKLQkJICAgIG5ld25hbWUsCi0JCSAgICBD S01BWFBBVEgrMQotCQkgICAgKTsKLQlpZiAoeCA+IDApIHsKLQkgICAgZnRwcmVjdi5sb2NhbCA9 IG5ld25hbWU7CS8qIFN1YnN0aXR1dGUgdXNlcidzIGZpbGUgbmFtZSAqLwotCSAgICBpZiAoeCA9 PSAyKQkJCS8qIEFuZCBhcHBlbmQgaWYgdXNlciBzYWlkIHRvICovCi0JICAgICAgZnRwcmVjdi5s bW9kZSA9ICJhYiI7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBDS19VUkwgKi8KLSAgICB4ID0gMTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgZmlsZSBvcGVuIE9LPyAqLwot ICAgIGlmIChmdHByZWN2LnBpcGVuYW1lKSB7CQkvKiBDb21tYW5kICovCi0gICAgICAgIHggPSB6 eGNtZChaT0ZJTEUsZnRwcmVjdi5waXBlbmFtZSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBy ZWN2cmVxdWVzdCB6eGNtZCIsZnRwcmVjdi5waXBlbmFtZSx4KTsKLSAgICB9IGVsc2UgaWYgKCFv dXQyc2NyZWVuKSB7ICAgICAgICAgICAvKiBGaWxlICovCi0gICAgICAgIHN0cnVjdCBmaWxpbmZv IHh4OwotICAgICAgICB4eC5icyA9IDA7IHh4LmNzID0gMDsgeHgucmwgPSAwOyB4eC5vcmcgPSAw OyB4eC5jYyA9IDA7Ci0gICAgICAgIHh4LnR5cCA9IDA7IHh4Lm9zX3NwZWNpZmljID0gTlVMOyB4 eC5sYmxvcHRzID0gMDsKLQkvKiBBcHBlbmQgb3IgTmV3ICovCi0gICAgICAgIHh4LmRzcCA9ICFz dHJjbXAoZnRwcmVjdi5sbW9kZSwiYWIiKSA/IFhZRlpfQSA6IFhZRlpfTjsKLSAgICAgICAgeCA9 IHpvcGVubyhaT0ZJTEUsZnRwcmVjdi5sb2NhbCxOVUxMLCZ4eCk7Ci0gICAgICAgIGRlYnVnKEYx MTEsImZ0cCByZWN2cmVxdWVzdCB6b3Blbm8iLGZ0cHJlY3YubG9jYWwseCk7Ci0gICAgfQotICAg IGlmICh4IDwgMSkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZhaWx1cmUgdG8gb3BlbiBv dXRwdXQgZmlsZSAqLwotICAgICAgICBpZiAoKCFkcHlhY3RpdmUgfHwgZnRwX2RlYikpCi0gICAg ICAgICAgZnByaW50ZihzdGRlcnIsICJsb2NhbCgyKTogJXM6ICVzXG4iLCBmdHByZWN2LmxvY2Fs LCBja19lcnJzdHIoKSk7Ci0gICAgICAgIGZ0cHJlY3ZyZXQgPSAtMTsKLSNpZmRlZiBOVFNJRwot ICAgICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAg ICAgICByZXR1cm47Ci0gICAgfQotICAgIGJsa3NpemUgPSBGVFBfQlVGU0laOyAgICAgICAgICAg ICAgIC8qIEFsbG9jYXRlIGlucHV0IGJ1ZmZlciAqLwotCi0gICAgZGVidWcoRjEwMSwiZnRwIHJl Y3ZyZXF1ZXN0IGJsa3NpemUiLCIiLGJsa3NpemUpOwotICAgIGRlYnVnKEYxMDEsImZ0cCByZWN2 cmVxdWVzdCByY3ZidWZzaXoiLCIiLHJjdmJ1ZnNpeik7Ci0KLSAgICBpZiAocmN2YnVmc2l6IDwg Ymxrc2l6ZSkgeyAgICAgICAgICAvKiBpZiBuZWNlc3NhcnkgKi8KLSAgICAgICAgaWYgKHJjdmJ1 ZikgewotICAgICAgICAgICAgZnJlZShyY3ZidWYpOwotICAgICAgICAgICAgcmN2YnVmID0gTlVM TDsKLSAgICAgICAgfQotICAgICAgICByY3ZidWYgPSAoY2hhciAqKW1hbGxvYygodW5zaWduZWQp Ymxrc2l6ZSk7Ci0gICAgICAgIGlmICghcmN2YnVmKSB7Ci0JICAgIGRlYnVnKEYxMDAsImZ0cCBn ZXQgcmN2YnVmIG1hbGxvYyBmYWlsZWQiLCIiLDApOwotICAgICAgICAgICAgZnRwY29kZSA9IC0y OwotI2lmZGVmIEVOT01FTQotICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07Ci0jZW5kaWYgLyog RU5PTUVNICovCi0gICAgICAgICAgICBpZiAoKCFkcHlhY3RpdmUgfHwgZnRwX2RlYikpCi0gICAg ICAgICAgICAgIHBlcnJvcigibWFsbG9jIik7Ci0gICAgICAgICAgICByY3ZidWZzaXogPSAwOwot ICAgICAgICAgICAgZnRwcmVjdnJldCA9IC0xOwotI2lmZGVmIE5UU0lHCi0gICAgICAgICAgICBj a1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgICAgICAgICAg cmV0dXJuOwotICAgICAgICB9Ci0JZGVidWcoRjEwMSwiZnRwIGdldCByY3ZidWYgbWFsbG9jIG9r IiwiIixibGtzaXplKTsKLSAgICAgICAgcmN2YnVmc2l6ID0gYmxrc2l6ZTsKLSAgICB9Ci0gICAg ZGVidWcoRjExMSwiZnRwIGdldCByY3ZidWZzaXoiLGZ0cHJlY3YubG9jYWwscmN2YnVmc2l6KTsK LQotICAgIGZmYyA9IChDS19PRkZfVCkwOwkJCS8qIENoYXJhY3RlciBjb3VudGVyICovCi0gICAg Y3BzID0gb2xkY3BzID0gMEw7ICAgICAgICAgICAgICAgICAgLyogVGhydXB1dCAqLwotICAgIHN0 YXJ0ID0gZ21zdGltZXIoKTsgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IHRpbWUgKG1zZWNzKSAq LwotI2lmZGVmIEdGVElNRVIKLSAgICByZnRpbWVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTdGFydCB0aW1lIChmbG9hdCkgKi8KLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSAgICBk ZWJ1ZyhGMTExLCJmdHAgZ2V0IHR5cGUiLGZ0cHJlY3YubG9jYWwsY3VydHlwZSk7Ci0gICAgZGVi dWcoRjEwMSwiZnRwIHJlY3ZyZXF1ZXN0IGZ0cF9kcGwiLCIiLGZ0cF9kcGwpOwotICAgIHN3aXRj aCAoY3VydHlwZSkgewotICAgICAgY2FzZSBGVFRfQklOOiAgICAgICAgICAgICAgICAgICAgIC8q IEJpbmFyeSBtb2RlICovCi0gICAgICBjYXNlIEZUVF9URU46ICAgICAgICAgICAgICAgICAgICAg LyogVEVORVggbW9kZSAqLwotICAgICAgICBkID0gMDsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAg ICAgICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgICAgIGMgPSBzZWN1cmVfcmVhZChmdHByZWN2 LmRpbiwgcmN2YnVmLCByY3ZidWZzaXopOwotICAgICAgICAgICAgaWYgKGNhbmNlbGZpbGUpIHsK LSAgICAgICAgICAgICAgICBmYWlsZnRwcmVjdjIodGhyZWFkaW5mbyk7Ci0jaWZkZWYgTlRTSUcK LSAgICAgICAgICAgICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJ RyAqLwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGlmIChjIDwgMSkKLSAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgcHJpbnRmICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogKFdoYXQgaWYgaXQgaXNuJ3Q/KSAqLwotICAgICAgICAgICAg aWYgKG91dDJzY3JlZW4gJiYgIWZ0cHJlY3YucGlwZW5hbWUpIHsKLSAgICAgICAgICAgICAgICBp bnQgaTsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYzsgaSsrKQotICAgICAgICAg ICAgICAgICAgcHJpbnRmKCIlYyIscmN2YnVmW2ldKTsKLSAgICAgICAgICAgIH0gZWxzZQotI2Vu ZGlmIC8qIHByaW50ZiAqLwotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVnaXN0 ZXIgaW50IGk7Ci0gICAgICAgICAgICAgICAgaSA9IDA7Ci0gICAgICAgICAgICAgICAgZXJybm8g PSAwOwotICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgYykgewotICAgICAgICAgICAgICAgICAg ICBpZiAoem1jaG91dChyY3ZidWZbaSsrXSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBkID0gaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnl0 ZXMgKz0gYzsKLSAgICAgICAgICAgIGZmYyArPSBjOwotICAgICAgICB9Ci0jaWZkZWYgRlRQX1RJ TUVPVVQKLQlpZiAoYyA9PSAtMykgewotICAgICAgICAgICAgZGVidWcoRjEwMCwiZnRwIHJlY3Zy ZXF1ZXN0IHRpbWVvdXQiLCIiLDApOyAKLSAgICAgICAgICAgIGJ5dGVzID0gKENLX09GRl9UKS0x OwotCSAgICBmdHBfdGltZWRfb3V0ID0gMTsKLQkgICAgZnRwY29kZSA9IC0zOwotCX0gZWxzZQot I2VuZGlmCS8qIEZUUF9USU1FT1VUICovCi0gICAgICAgIGlmIChjIDwgMCkgewotICAgICAgICAg ICAgZGVidWcoRjExMSwiZnRwIHJlY3ZyZXF1ZXN0IGVycm5vIixja2l0b2EoYyksZXJybm8pOwot ICAgICAgICAgICAgaWYgKGMgPT0gLTEgJiYgZXJybm8gIT0gRVBJUEUpCi0gICAgICAgICAgICAg IGlmICgoIWRweWFjdGl2ZSB8fCBmdHBfZGViKSkKLSAgICAgICAgICAgICAgICBwZXJyb3IoIm5l dGluIik7Ci0gICAgICAgICAgICBieXRlcyA9IChDS19PRkZfVCktMTsKLSAgICAgICAgICAgIGZ0 cGNvZGUgPSAtNDsKLSAgICAgICAgfQotICAgICAgICBpZiAoZCA8IGMpIHsKLSAgICAgICAgICAg IGZ0cGNvZGUgPSAtMjsKLSAgICAgICAgICAgIGlmICgoIWRweWFjdGl2ZSB8fCBmdHBfZGViKSkg ewotICAgICAgICAgICAgICAgIGNoYXIgKiBwOwotICAgICAgICAgICAgICAgIHAgPSBmdHByZWN2 LmxvY2FsID8gZnRwcmVjdi5sb2NhbCA6IGZ0cHJlY3YucGlwZW5hbWU7Ci0gICAgICAgICAgICAg ICAgaWYgKGQgPCAwKQotICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0JCQkgICJs b2NhbCgzKTogJXM6ICVzXG4iLCBmdHByZWN2LmxvY2FsLCBja19lcnJzdHIoKSk7Ci0gICAgICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0JCQkgICIl czogc2hvcnQgd3JpdGVcbiIsIGZ0cHJlY3YubG9jYWwpOwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZUVF9BU0M6ICAgICAgICAgICAgICAg ICAgICAgLyogVGV4dCBtb2RlICovCi0JZGVidWcoRjEwMSwiZnRwIHJlY3ZyZXF1ZXN0IFRZUEUg QSB4bGF0ZSIsIiIsZnRwcmVjdi54bGF0ZSk7Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgICAgaWYg KGZ0cHJlY3YueGxhdGUpIHsKLSAgICAgICAgICAgIGludCB0OwotI2lmZGVmIENLX0FOU0lDCi0g ICAgICAgICAgICBpbnQgKCpmbikoY2hhcik7Ci0jZWxzZQotICAgICAgICAgICAgaW50ICgqZm4p KCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBy ZWN2cmVxdWVzdCAoZGF0YSkiLCJpbml0eGxhdGUiLDApOwotICAgICAgICAgICAgaW5pdHhsYXRl KGZ0cHJlY3YucmNzLGZ0cHJlY3YuZmNzKTsgICAgICAgICAvKiAoRnJvbSxUbykgKi8KLSAgICAg ICAgICAgIGlmIChmdHByZWN2LnBpcGVuYW1lKSB7Ci0gICAgICAgICAgICAgICAgZm4gPSBwaXBl b3V0OwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCByZWN2cmVxdWVzdCBBU0NJSSIs InBpcGVvdXQiLDApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmbiA9 IG91dDJzY3JlZW4gPyBzY3Jub3V0IDogcHV0ZmlsOwotICAgICAgICAgICAgICAgIGRlYnVnKEYx MTAsImZ0cCByZWN2cmVxdWVzdCBBU0NJSSIsCi0gICAgICAgICAgICAgICAgICAgICAgb3V0MnNj cmVlbiA/ICJzY3Jub3V0IiA6ICJwdXRmaWwiLDApOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgd2hpbGUgKDEpIHsKLQkJLyogR2V0IGJ5dGUgZnJvbSBuZXQgKi8KLSAgICAgICAgICAgICAg ICBjMCA9IHhnbmJ5dGUoRkNfVUNTMixmdHByZWN2LnJjcyxuZXRnZXRjKTsKLSAgICAgICAgICAg ICAgICBpZiAoY2FuY2VsZmlsZSkgewotICAgICAgICAgICAgICAgICAgICBmYWlsZnRwcmVjdjIo dGhyZWFkaW5mbyk7Ci0jaWZkZWYgTlRTSUcKLSAgICAgICAgICAgICAgICAgICAgY2tUaHJlYWRF bmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgICAgICAgICAgICAg cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYzAgPCAwKQot ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCS8qIFNlY29uZCBieXRlIGZyb20gbmV0ICovCi0g ICAgICAgICAgICAgICAgYzEgPSB4Z25ieXRlKEZDX1VDUzIsZnRwcmVjdi5yY3MsbmV0Z2V0Yyk7 Ci0gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGZpbGUpIHsKLSAgICAgICAgICAgICAgICAgICAg ZmFpbGZ0cHJlY3YyKHRocmVhZGluZm8pOwotI2lmZGVmIE5UU0lHCi0gICAgICAgICAgICAgICAg ICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgICAg ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg aWYgKGMxIDwgMCkKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIENPTU1FTlQKLQkJ LyogSzk1OiBDaGVjayB3aGV0aGVyIHdlIG5lZWQgdGhpcyAqLwotCQlpZiAoZmlsZW9yZGVyID4g MCkJLyogTGl0dGxlIEVuZGlhbiAqLwotCQkgIGJ5dHN3YXAoJmMwLCZjMSk7CS8qIHN3YXAgYnl0 ZXMqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAg IGlmICggb3V0MnNjcmVlbiAmJiAgICAgICAgICAgIC8qIHdlJ3JlIHRyYW5zbGF0aW5nIHRvIFVD Uy0yICovIAotICAgICAgICAgICAgICAgICAgICAgIWs5NXN0ZG91dCAmJiAhaW5zZXJ2ZXIpIC8q IGZvciB0aGUgcmVhbCBzY3JlZW4uLi4gKi8gICAgIAotICAgICAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICAgICAgdW5pb24gewotICAgICAgICAgICAgICAgICAgICAgICAgVVNIT1JUIHVj czI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUiAgYnl0ZXNbMl07Ci0gICAgICAgICAg ICAgICAgICAgIH0gb3V0cHV0OwotCi0gICAgICAgICAgICAgICAgICAgIG91dHB1dC5ieXRlc1sw XSA9IGMxOwotICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYnl0ZXNbMV0gPSBjMDsKLQotICAg ICAgICAgICAgICAgICAgICBWc2NybldydFVDUzJTdHJBdHQoVkNNRCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdXQudWNzMiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3aGVyZXlbVkNNRF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3aGVyZXhbVkNNRF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmY29sb3JjbWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0K LSAgICAgICAgICAgICAgICB9IGVsc2UgCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAg ICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSB4cG5ieXRlKGMwLFRDX1VDUzIsZnRw cmVjdi5mY3MsZm4pKSA8IDApIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSB4 cG5ieXRlKGMxLFRDX1VDUzIsZnRwcmVjdi5mY3MsZm4pKSA8IDApIGJyZWFrOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSNlbmRpZiAvKiBOT0NT RVRTICovCi0gICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgIGMgPSBzZWN1 cmVfZ2V0YyhmdHByZWN2LmRpbiwwKTsKLSAgICAgICAgICAgICAgICBpZiAoY2FuY2VsZmlsZQot I2lmZGVmIEZUUF9USU1FT1VUCi0JCSAgICB8fCBmdHBfdGltZWRfb3V0Ci0jZW5kaWYJLyogRlRQ X1RJTUVPVVQgKi8KLQkJICAgICkgewotICAgICAgICAgICAgICAgICAgICBmYWlsZnRwcmVjdjIo dGhyZWFkaW5mbyk7Ci0jaWZkZWYgTlRTSUcKLSAgICAgICAgICAgICAgICAgICAgY2tUaHJlYWRF bmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgICAgICAgICAgICAg cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwg YyA9PSBFT0YpCi0gICAgICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBVTklYCi0JCS8qIFJl Y29yZCBmb3JtYXQgY29udmVyc2lvbiBmb3IgVW5peCAqLwotCQkvKiBTS0lQIFRISVMgRk9SIFdJ TkRPV1MhICovCi0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJykKLSAgICAgICAgICAgICAg ICAgIGJhcmVfbGZzKys7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGMgPT0gJ1xyJykgewotICAg ICAgICAgICAgICAgICAgICBieXRlcysrOwotICAgICAgICAgICAgICAgICAgICBpZiAoKGMgPSBz ZWN1cmVfZ2V0YyhmdHByZWN2LmRpbiwwKSkgIT0gJ1xuJyB8fAotCQkJZnRwcmVjdi50Y3JmbGFn KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsZmlsZSkgewotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZhaWxmdHByZWN2Mih0aHJlYWRpbmZvKTsKLSNpZmRlZiBOVFNJ RwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwot I2VuZGlmIC8qIE5UU0lHICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMg PCAwIHx8IGMgPT0gRU9GKQotICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJyZWFrMjsK LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICdcMCcpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBieXRlcysrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g Y29udGluMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYyA8IDApCi0gICAgICAg ICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBVTlggKi8KLQotICAgICAgICAgICAgICAgIGlm IChvdXQyc2NyZWVuICYmICFmdHByZWN2LnBpcGVuYW1lKQotI2lmZGVmIHByaW50ZgotICAgICAg ICAgICAgICAgICAgcHJpbnRmKCIlYyIsKGNoYXIpYyk7Ci0jZWxzZQotICAgICAgICAgICAgICAg ICAgcHV0Y2hhcigoY2hhciljKTsKLSNlbmRpZiAvKiBwcmludGYgKi8KLSAgICAgICAgICAgICAg ICBlbHNlCi0gICAgICAgICAgICAgICAgICBpZiAoKGQgPSB6bWNob3V0KGMpKSA8IDApCi0gICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGJ5dGVzKys7Ci0gICAgICAg ICAgICAgICAgZmZjKys7Ci0gICAgICAgICAgICAgIGNvbnRpbjI6Ci0gICAgICAgICAgICAgICAg OwotICAgICAgICAgICAgfQotICAgICAgICAgIGJyZWFrMjoKLSAgICAgICAgICAgIGlmIChiYXJl X2xmcyAmJiAoIWRweWFjdGl2ZSB8fCBmdHBfZGViKSkgewotICAgICAgICAgICAgICAgIHByaW50 ZigiV0FSTklORyEgJWQgYmFyZSBsaW5lZmVlZHMgcmVjZWl2ZWQgaW4gQVNDSUkgbW9kZVxuIiwK LSAgICAgICAgICAgICAgICAgICAgICAgYmFyZV9sZnMpOwotICAgICAgICAgICAgICAgIHByaW50 ZigiRmlsZSBtaWdodCBub3QgaGF2ZSB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuXG4iKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmdHByZWN2LmRpbiA9PSAtMSkgewotICAgICAgICAg ICAgICAgIGJ5dGVzID0gKENLX09GRl9UKS0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg aWYgKGMgPT0gLTIpCi0gICAgICAgICAgICAgIGJ5dGVzID0gKENLX09GRl9UKS0xOwotICAgICAg ICAgICAgYnJlYWs7Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgICAgfQotI2VuZGlmIC8qIE5PQ1NF VFMgKi8KLSAgICB9Ci0gICAgaWYgKGZ0cHJlY3YucGlwZW5hbWUgfHwgIW91dDJzY3JlZW4pIHsK LQl6Y2xvc2UoWk9GSUxFKTsJCQkvKiBDbG9zZSB0aGUgZmlsZSAqLwotCWRlYnVnKEYxMTEsImRv ZnRwcmVjdjIgemNsb3NlIGZ0cGNvZGUiLGZ0cHJlY3YubG9jYWwsZnRwY29kZSk7Ci0JaWYgKGZ0 cGNvZGUgPCAwKSB7CQkvKiBJZiBkb3dubG9hZCBmYWlsZWQgKi8KLQkgICAgaW50IHggPSAwOwot CSAgICBzd2l0Y2ggKGtlZXApIHsJCS8qIHdoaWNoIGlzLi4uICovCi0JICAgICAgY2FzZSBTRVRf QVVUTzoJCS8qIEFVVE8gKi8KLQkJaWYgKGN1cnR5cGUgPT0gRlRUX0FTQykgLyogRGVsZXRlIGZp bGUgaWYgVFlQRSBBLiAqLwotCQkgIHggPSAxOwotCQlicmVhazsKLQkgICAgICBjYXNlIFNFVF9P RkY6CQkvKiBESVNDQVJEICovCi0JCXggPSAxOwkJCS8qIERlbGV0ZSBmaWxlLCBwZXJpb2QuICov Ci0JCWJyZWFrOwotCSAgICAgIGRlZmF1bHQ6CQkJLyogS0VFUCAqLwotCQlicmVhazsKLQkgICAg fQotCSAgICBpZiAoeCkgewotCQl4ID0gemRlbGV0KGZ0cHJlY3YubG9jYWwpOwotCQlkZWJ1ZyhG MTExLCJmdHAgZ2V0IGRlbGV0ZSBpbmNvbXBsZXRlIixmdHByZWN2LmxvY2FsLHgpOwotCSAgICB9 Ci0JfQotICAgIH0KLSAgICBzaWduYWwoU0lHSU5ULCBmdHByZWN2Lm9sZGludHIpOwotI2lmZGVm IFNJR1BJUEUKLSAgICBpZiAoZnRwcmVjdi5vbGRpbnRwKQotICAgICAgc2lnbmFsKFNJR1BJUEUs IGZ0cHJlY3Yub2xkaW50cCk7Ci0jZW5kaWYgLyogU0lHUElQRSAqLwotICAgIHN0b3AgPSBnbXN0 aW1lcigpOwotI2lmZGVmIEdGVElNRVIKLSAgICBmcGZzZWNzID0gZ2Z0aW1lcigpOwotI2VuZGlm IC8qIEdGVElNRVIgKi8KLSAgICB0ZmMgKz0gZmZjOwotCi0jaWZkZWYgVENQSVBMSUIKLSAgICBz b2NrZXRfY2xvc2UoZnRwcmVjdi5kaW4pOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSNpZmRlZiBV U0VfU0hVVERPV04KLSAgICBzaHV0ZG93bihmdHByZWN2LmRpbiwgMSsxKTsKLSNlbmRpZiAvKiBV U0VfU0hVVERPV04gKi8KLSAgICBjbG9zZShmdHByZWN2LmRpbik7Ci0jZW5kaWYgLyogVENQSVBM SUIgKi8KLSAgICBmdHByZWN2LnJlcGx5ID0gZ2V0cmVwbHkoMCxmdHByZWN2LmZjcyxmdHByZWN2 LnJjcyxmdHBfdmJtLDApOwotICAgIGZ0cHJlY3ZyZXQgPSAoKGZ0cGNvZGUgPCAwIHx8IGZ0cHJl Y3YucmVwbHkgPT0gUkVQTFlfVFJBTlNJRU5UIHx8IAotICAgICAgICAgICAgICAgICAgIGZ0cHJl Y3YucmVwbHkgPT0gUkVQTFlfRVJST1IpID8gLTEgOiAwKTsKLSNpZmRlZiBOVFNJRwotICAgICBj a1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotfQotCi1zdGF0aWMg aW50Ci1yZWN2cmVxdWVzdChjbWQsIGxvY2FsLCByZW1vdGUsIGxtb2RlLCBwcmludG5hbWVzLCBy ZWNvdmVyLCBwaXBlbmFtZSwKLSAgICAgICAgICAgIHhsYXRlLCBmY3MsIHJjcykKLSAgICBjaGFy ICpjbWQsICpsb2NhbCwgKnJlbW90ZSwgKmxtb2RlLCAqcGlwZW5hbWU7Ci0gICAgaW50IHByaW50 bmFtZXMsIHJlY292ZXIsIHhsYXRlLCBmY3MsIHJjczsKLXsKLSNpZmRlZiBOVAotICAgIHN0cnVj dCBfc3RhdCBzdGJ1ZjsKLSNlbHNlIC8qIE5UICovCi0gICAgc3RydWN0IHN0YXQgc3RidWY7Ci0j ZW5kaWYgLyogTlQgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAgICAg ICBkZWJ1ZyhGMTExLCJmdHAgcmVjdnJlcXVlc3QgY21kIixjbWQscmVjb3Zlcik7Ci0gICAgICAg IGRlYnVnKEYxMTAsImZ0cCByZWN2cmVxdWVzdCBsb2NhbCAiLGxvY2FsLDApOwotICAgICAgICBk ZWJ1ZyhGMTExLCJmdHAgcmVjdnJlcXVlc3QgcmVtb3RlIixyZW1vdGUsZnRwX3R5cCk7Ci0gICAg ICAgIGRlYnVnKEYxMTAsImZ0cCByZWN2cmVxdWVzdCBwaXBlbmFtZSAiLHBpcGVuYW1lLDApOwot ICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcmVjdnJlcXVlc3QgeGxhdGUiLCIiLHhsYXRlKTsKLSAg ICAgICAgZGVidWcoRjEwMSwiZnRwIHJlY3ZyZXF1ZXN0IGZjcyIsIiIsZmNzKTsKLSAgICAgICAg ZGVidWcoRjEwMSwiZnRwIHJlY3ZyZXF1ZXN0IHJjcyIsIiIscmNzKTsKLSAgICB9Ci0jZW5kaWYg LyogREVCVUcgKi8KLQotICAgIGZ0cHJlY3YubG9jYWxzaXplID0gKENLX09GRl9UKTA7Ci0KLSAg ICBpZiAocmVtZmlsZSkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBTZWUgcmVtY2ZtKCksIHJl bXR4dCgpICovCi0gICAgICAgIGlmIChyZW1waXBlKSB7Ci0gICAgICAgICAgICBwaXBlbmFtZSA9 IHJlbWRlc3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2NhbCA9IHJlbWRlc3Q7 Ci0gICAgICAgICAgICBpZiAocmVtYXBwZCkgbG1vZGUgPSAiYWIiOwotICAgICAgICB9Ci0gICAg fQotICAgIG91dDJzY3JlZW4gPSAwOwotICAgIGlmICghY21kKSBjbWQgPSAiIjsgICAgICAgICAg ICAgICAgIC8qIENvcmUgZHVtcCBwcmV2ZW50aW9uICovCi0gICAgaWYgKCFyZW1vdGUpIHJlbW90 ZSA9ICIiOwotICAgIGlmICghbG1vZGUpIGxtb2RlID0gIiI7Ci0KLSAgICBpZiAocGlwZW5hbWUp IHsgICAgICAgICAgICAgICAgICAgICAvKiBObyByZWNvdmVyeSBmb3IgcGlwZXMuICovCi0gICAg ICAgIHJlY292ZXIgPSAwOwotICAgICAgICBpZiAoIWxvY2FsKQotICAgICAgICAgIGxvY2FsID0g cGlwZW5hbWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFsb2NhbCkgICAgICAgICAgICAg ICAgICAgICAvKiBPdXRwdXQgdG8gc2NyZWVuPyAqLwotICAgICAgICAgIGxvY2FsID0gIi0iOwot ICAgICAgICBvdXQyc2NyZWVuID0gIXN0cmNtcChsb2NhbCwiLSIpOwotICAgIH0KLSAgICBkZWJ1 ZyhGMTAxLCJmdHAgcmVjdnJlcXVlc3Qgb3V0MnNjcmVlbiIsIiIsb3V0MnNjcmVlbik7Ci0KLSNp ZmRlZiBPUzIKLSAgICBpZiAoIGZ0cF94bGEgJiYgb3V0MnNjcmVlbiAmJiAhazk1c3Rkb3V0ICYm ICFpbnNlcnZlciApCi0gICAgICAgIGZjcyA9IEZDX1VDUzI7Ci0jZW5kaWYgLyogT1MyICovCi0K LSAgICBpZiAob3V0MnNjcmVlbikgICAgICAgICAgICAgICAgICAgICAvKiBObyByZWNvdmVyeSB0 byBzY3JlZW4gKi8KLSAgICAgIHJlY292ZXIgPSAwOwotICAgIGlmICghZnRwX3R5cCkgICAgICAg ICAgICAgICAgICAgICAgIC8qIE5vIHJlY292ZXJ5IGluIHRleHQgbW9kZSAqLwotICAgICAgcmVj b3ZlciA9IDA7Ci0gICAgZnRwcmVjdi5pc19yZXRyID0gKHN0cmNtcChjbWQsICJSRVRSIikgPT0g MCk7Ci0KLSAgICBpZiAoIWZ0cHJlY3YuaXNfcmV0cikgICAgICAgICAgICAgICAvKiBObyByZWNv dmVyeSBleGNlcHQgZm9yIFJFVFJpZXZlICovCi0gICAgICByZWNvdmVyID0gMDsKLQotI2lmZGVm IENPTU1FTlQKLSAgICBpZiAoIW91dDJzY3JlZW4gJiYgIXBpcGVuYW1lICYmIGZ0cHJlY3YuaXNf cmV0cikgeyAvKiBUbyByZWFsIGZpbGUgKi8KLSAgICAgICAgaWYgKHJlY3Vyc2l2ZSAmJiBja3N0 cmNocihsb2NhbCwnLycpKSB7Ci0JICAgIAotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENP TU1FTlQgKi8KLQotICAgIGZ0cHJlY3YubG9jYWxzaXplID0gKENLX09GRl9UKTA7CS8qIExvY2Fs IGZpbGUgc2l6ZSAqLwotICAgIHJzX2xlbiA9IChDS19PRkZfVCkwOwkJLyogUmVjb3ZlcnkgcG9p bnQgKi8KLQotICAgIGRlYnVnKEYxMDEsImZ0cCByZWN2cmVxdWVzdCByZWNvdmVyIiwiIixyZWNv dmVyKTsKLSAgICBpZiAocmVjb3ZlcikgeyAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNvdmVy aW5nLi4uICovCi0gICAgICAgIGlmIChzdGF0KGxvY2FsLCAmc3RidWYpIDwgMCkgeyAgLyogQ2Fu J3Qgc3RhdCBsb2NhbCBmaWxlICovCi0JICAgIGRlYnVnKEYxMDEsImZ0cCByZWN2cmVxdWVzdCBy ZWNvdmVyIHN0YXQgZmFpbGVkIiwiIixlcnJubyk7Ci0gICAgICAgICAgICByZWNvdmVyID0gMDsg ICAgICAgICAgICAgICAgLyogU28gY2FuY2VsIHJlY292ZXJ5ICovCi0gICAgICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogSGF2ZSBsb2NhbCBmaWxlIGluZm8gKi8KLSAgICAg ICAgICAgIGZ0cHJlY3YubG9jYWxzaXplID0gc3RidWYuc3Rfc2l6ZTsgIC8qIEdldCBzaXplICov Ci0JICAgIC8qIFJlbW90ZSBmaWxlIHNtYWxsZXIgdGhhbiBsb2NhbCAqLwotICAgICAgICAgICAg aWYgKGZzaXplIDwgZnRwcmVjdi5sb2NhbHNpemUpIHsKLQkJZGVidWcoRjEwMSwiZnRwIHJlY3Zy ZXF1ZXN0IHJlY292ZXIgcmVtb3RlIHNtYWxsZXIiLCIiLGZzaXplKTsKLSAgICAgICAgICAgICAg ICByZWNvdmVyID0gMDsgICAgICAgICAgICAvKiBSZWNvdmVyeSBjYW4ndCB3b3JrICovCi0gICAg ICAgICAgICB9IGVsc2UgaWYgKGZzaXplID09IGZ0cHJlY3YubG9jYWxzaXplKSB7IC8qIFNpemVz IGFyZSBlcXVhbCAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCByZWN2cmVxdWVz dCByZWNvdmVyIGVxdWFsIHNpemUiLAotCQkgICAgICByZW1vdGUsZnRwcmVjdi5sb2NhbHNpemUp OwotICAgICAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBDT01N RU5UCi0vKgotICBUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgdGhlIG9yaWdpbmFsIHBhcnRpYWwg ZmlsZSBuZXZlciBnb3QgaXRzIGRhdGUKLSAgc2V0LCBlaXRoZXIgYmVjYXVzZSBGVFAgREFURVMg d2FzIE9GRiwgb3IgYmVjYXVzZSB0aGUgcGFydGlhbCBmaWxlIHdhcwotICBkb3dubG9hZGVkIGJ5 IHNvbWUgb3RoZXIgcHJvZ3JhbSB0aGF0IGRvZXNuJ3Qgc2V0IGxvY2FsIGZpbGUgZGF0ZXMsIG9y Ci0gIGJlY2F1c2UgS2VybWl0IG9ubHkgc2V0cyB0aGUgZmlsZSdzIGRhdGUgd2hlbiB0aGUgZG93 bmxvYWQgd2FzIGNvbXBsZXRlCi0gIGFuZCBzdWNjZXNzZnVsLiAgSW4gYWxsIHRoZXNlIGNhc2Vz LCB0aGUgbG9jYWwgZmlsZSBoYXMgYSBsYXRlciB0aW1lCi0gIHRoYW4gdGhlIHJlbW90ZS4KLSov Ci0gICAgICAgICAgICBpZiAocmVjb3ZlcikgeyAgICAgICAgICAgICAgLyogUmVtb3RlIGlzIGJp Z2dlciAqLwotICAgICAgICAgICAgICAgIHggPSBjaGttb2R0aW1lKGxvY2FsLHJlbW90ZSwwKTsg LyogQ2hlY2sgZmlsZSBkYXRlcyAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBy ZWN2cmVxdWVzdCBjaGttb2R0aW1lIixyZW1vdGUseCk7Ci0gICAgICAgICAgICAgICAgaWYgKHgg IT0gMSkJCS8qIERhdGVzIG11c3QgYmUgZXF1YWwhICovCi0gICAgICAgICAgICAgICAgICByZWNv dmVyID0gMDsgICAgICAgICAgLyogSWYgbm90LCBnZXQgd2hvbGUgZmlsZSAqLwotICAgICAgICAg ICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTEx LCJmdHAgcmVjdnJlcXVlc3QgcmVjb3ZlciIscmVtb3RlLHJlY292ZXIpOwotICAgIH0KLQotI2lm ZGVmIEZUUF9QUk9YWQotICAgIGlmIChwcm94eSAmJiBmdHByZWN2LmlzX3JldHIpCi0gICAgICBy ZXR1cm4ocHJveHRyYW5zKGNtZCwgbG9jYWwgPyBsb2NhbCA6IHJlbW90ZSwgcmVtb3RlKSk7Ci0j ZW5kaWYgLyogRlRQX1BST1hZICovCi0KLSAgICBmdHByZWN2LnRjcmZsYWcgPSAoZmVvbCAhPSBD UikgJiYgZnRwcmVjdi5pc19yZXRyOwotCi0gICAgZnRwcmVjdi5yZXBseSA9IDA7Ci0gICAgZnRw cmVjdi5mY3MgPSBmY3M7Ci0gICAgZnRwcmVjdi5yY3MgPSByY3M7Ci0gICAgZnRwcmVjdi5yZWNv dmVyID0gcmVjb3ZlcjsKLSAgICBmdHByZWN2LnhsYXRlID0geGxhdGU7Ci0gICAgZnRwcmVjdi5j bWQgPSBjbWQ7Ci0gICAgZnRwcmVjdi5sb2NhbCA9IGxvY2FsOwotICAgIGZ0cHJlY3YucmVtb3Rl ID0gcmVtb3RlOwotICAgIGZ0cHJlY3YubG1vZGUgPSBsbW9kZTsKLSAgICBmdHByZWN2LnBpcGVu YW1lID0gcGlwZW5hbWU7Ci0gICAgZnRwcmVjdi5vbGRpbnRwID0gTlVMTDsKLSAgICBmdHBjb2Rl ID0gMDsKLQotICAgIGhhdmVzaWdpbnQgPSAwOwotICAgIGZ0cHJlY3Yub2xkaW50ciA9IHNpZ25h bChTSUdJTlQsIGNhbmNlbHJlY3YpOwotICAgIGlmIChjY19leGVjdXRlKGNramFkZHIocmVjdmNh bmNlbCksIGRvZnRwcmVjdiwgZmFpbGZ0cHJlY3YpIDwgMCkKLSAgICAgIHJldHVybiAtMTsKLQot I2lmZGVmIEZUUF9USU1FT1VUCi0gICAgZGVidWcoRjExMSwiZnRwIHJlY3ZyZXF1ZXN0IGZ0cHJl Y3ZyZXQiLHJlbW90ZSxmdHByZWN2cmV0KTsKLSAgICBkZWJ1ZyhGMTExLCJmdHAgcmVjdnJlcXVl c3QgZnRwX3RpbWVkX291dCIscmVtb3RlLGZ0cF90aW1lZF9vdXQpOwotICAgIGlmIChmdHBfdGlt ZWRfb3V0KQotICAgICAgZnRwcmVjdnJldCA9IC0xOwotI2VuZGlmCS8qIEZUUF9USU1FT1VUICov Ci0KLSAgICBpZiAoZnRwcmVjdnJldCA8IDApCi0gICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAo Y2NfZXhlY3V0ZShja2phZGRyKHJlY3ZjYW5jZWwpLCBkb2Z0cHJlY3YyLCBmYWlsZnRwcmVjdjIp IDwgMCkKLSAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gZnRwcmVjdnJldDsKLX0KLQotLyoK LSAqIE5lZWQgdG8gc3RhcnQgYSBsaXN0ZW4gb24gdGhlIGRhdGEgY2hhbm5lbCBiZWZvcmUgd2Ug c2VuZCB0aGUgY29tbWFuZCwKLSAqIG90aGVyd2lzZSB0aGUgc2VydmVyJ3MgY29ubmVjdCBtYXkg ZmFpbC4KLSAqLwotc3RhdGljIGludAotaW5pdGNvbm4oKSB7Ci0gICAgcmVnaXN0ZXIgY2hhciAq cCwgKmE7Ci0gICAgaW50IHJlc3VsdCwgdG1wbm8gPSAwOwotICAgIGludCBvbiA9IDE7Ci0gICAg R1NPQ0tOQU1FX1QgbGVuOwotCi0jaWZuZGVmIE5PX1BBU1NJVkVfTU9ERQotICAgIGludCBhMSxh MixhMyxhNCxwMSxwMjsKLQotICAgIGlmIChwYXNzaXZlbW9kZSkgewotICAgICAgICBkYXRhID0g c29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKLSAgICAgICAgZ2xvYmFsZGluID0gZGF0 YTsKLSAgICAgICAgaWYgKGRhdGEgPCAwKSB7Ci0gICAgICAgICAgICBwZXJyb3IoImZ0cDogc29j a2V0Iik7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChm dHBjbWQoIlBBU1YiLE5VTEwsMCwwLGZ0cF92Ym0pICE9IFJFUExZX0NPTVBMRVRFKSB7Ci0gICAg ICAgICAgICBwcmludGYoIlBhc3NpdmUgbW9kZSByZWZ1c2VkXG4iKTsKLSAgICAgICAgICAgIHBh c3NpdmVtb2RlID0gMDsKLSAgICAgICAgICAgIHJldHVybihpbml0Y29ubigpKTsKLSAgICAgICAg fQotLyoKLSAgTm93IHdlIGhhdmUgYSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIG9uZS1ieXRl IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLAotICBUaGUgZmlyc3QgZm91ciBhcmUgdGhlIGFuIElQ IGFkZHJlc3MuICBUaGUgZmlmdGggaXMgdGhlIE1TQiBvZiB0aGUgcG9ydAotICBudW1iZXIsIHRo ZSBzaXh0aCBpcyB0aGUgTFNCLiAgRnJvbSB0aGF0IHdlIGNhbiBtYWtlIGEgc29ja2FkZHJfaW4u Ci0qLwotICAgICAgICBpZiAoc3NjYW5mKHBhc3YsIiVkLCVkLCVkLCVkLCVkLCVkIiwmYTEsJmEy LCZhMywmYTQsJnAxLCZwMikgIT0gNikgewotICAgICAgICAgICAgcHJpbnRmKCJQYXNzaXZlIG1v ZGUgYWRkcmVzcyBzY2FuIGZhaWx1cmVcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICAgICAgfTsKLSNpZm5kZWYgTk9IVFRQCi0gICAgICAgIGlmICh0Y3BfaHR0cF9wcm94eSkgewot I2lmZGVmIE9TMgotICAgICAgICAgICAgY2hhciAqIGFnZW50ID0gIktlcm1pdCA5NSI7IC8qIERl ZmF1bHQgdXNlciBhZ2VudCAqLwotI2Vsc2UKLSAgICAgICAgICAgIGNoYXIgKiBhZ2VudCA9ICJD LUtlcm1pdCI7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICByZWdpc3RlciBzdHJ1Y3Qg aG9zdGVudCAqaHAgPSAwOwotICAgICAgICAgICAgc3RydWN0IHNlcnZlbnQgKmRlc3RzcDsKLSAg ICAgICAgICAgIGNoYXIgaG9zdFs1MTJdLCAqcCwgKnE7Ci0jaWZkZWYgSVBfVE9TCi0jaWZkZWYg SVBUT1NfVEhST1VHSFBVVAotICAgICAgICAgICAgaW50IHRvczsKLSNlbmRpZiAvKiBJUFRPU19U SFJPVUdIUFVUICovCi0jZW5kaWYgLyogSVBfVE9TICovCi0gICAgICAgICAgICBpbnQgczsKLSNp ZmRlZiBERUJVRwotICAgICAgICAgICAgZXh0ZXJuIGludCBkZWJ0aW07Ci0gICAgICAgICAgICBp bnQgeGRlYnRpbTsKLSAgICAgICAgICAgIHhkZWJ0aW0gPSBkZWJ0aW07Ci0gICAgICAgICAgICBk ZWJ0aW0gPSAxOwotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICAgICAgICAgIGNrbWFreG1zZyhw cm94eWhvc3QsSFRUUENQWUwsY2t1aXRvYShhMSksIi4iLGNrdWl0b2EoYTIpLAotICAgICAgICAg ICAgICAgICAgICAgICIuIixja3VpdG9hKGEzKSwiLiIsY2t1aXRvYShhNCksIjoiLGNrdWl0b2Eo KHAxPDw4KXxwMiksCi0gICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwKLSAgICAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgbWVtc2V0KChjaGFyICopJmhpc2N0bGFk ZHIsIDAsIHNpemVvZiAoaGlzY3RsYWRkcikpOwotICAgICAgICAgICAgZm9yIChwID0gdGNwX2h0 dHBfcHJveHksIHE9aG9zdDsgKnAgIT0gJ1wwJyAmJiAqcCAhPSAnOic7IHArKywgcSsrKQotICAg ICAgICAgICAgICAqcSA9ICpwOwotICAgICAgICAgICAgKnEgPSAnXDAnOwotCi0gICAgICAgICAg ICBoaXNjdGxhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihob3N0KTsKLSAgICAgICAg ICAgIGlmIChoaXNjdGxhZGRyLnNpbl9hZGRyLnNfYWRkciAhPSBJTkFERFJfTk9ORSkgLyogMjAx MC0wMy0yOSAqLwotCSAgICB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiaW5pdGNvbm4g QSIsaG9zdCwwKTsKLSAgICAgICAgICAgICAgICBoaXNjdGxhZGRyLnNpbl9mYW1pbHkgPSBBRl9J TkVUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJp bml0Y29ubiBCIixob3N0LDApOwotICAgICAgICAgICAgICAgIGhwID0gZ2V0aG9zdGJ5bmFtZSho b3N0KTsKLSNpZmRlZiBIQUREUkxJU1QKLSAgICAgICAgICAgICAgICBocCA9IGNrX2NvcHlob3N0 ZW50KGhwKTsgLyogbWFrZSBzYWZlIGNvcHkgdGhhdCB3b24ndCBjaGFuZ2UgKi8KLSNlbmRpZiAv KiBIQUREUkxJU1QgKi8KLSAgICAgICAgICAgICAgICBpZiAoaHAgPT0gTlVMTCkgewotICAgICAg ICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZ0cDogJXM6IFVua25vd24gaG9zdFxuIiwg aG9zdCk7Ci0gICAgICAgICAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKLSNpZmRlZiBERUJVRwot ICAgICAgICAgICAgICAgICAgICBkZWJ0aW0gPSB4ZGVidGltOwotI2VuZGlmIC8qIERFQlVHICov Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgaGlzY3RsYWRkci5zaW5fZmFtaWx5ID0gaHAtPmhfYWRkcnR5cGU7Ci0jaWZk ZWYgSEFERFJMSVNUCi0gICAgICAgICAgICAgICAgbWVtY3B5KChjaGFyICopJmhpc2N0bGFkZHIu c2luX2FkZHIsIGhwLT5oX2FkZHJfbGlzdFswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mKGhpc2N0bGFkZHIuc2luX2FkZHIpKTsKLSNlbHNlIC8qIEhBRERSTElTVCAqLwotICAgICAg ICAgICAgICAgIG1lbWNweSgoY2hhciAqKSZoaXNjdGxhZGRyLnNpbl9hZGRyLCBocC0+aF9hZGRy LAotICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaGlzY3RsYWRkci5zaW5fYWRkcikpOwot I2VuZGlmIC8qIEhBRERSTElTVCAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YSA9 IHNvY2tldChoaXNjdGxhZGRyLnNpbl9mYW1pbHksIFNPQ0tfU1RSRUFNLCAwKTsKLSAgICAgICAg ICAgIGRlYnVnKEYxMDEsImluaXRjb25uIHNvY2tldCIsIiIsZGF0YSk7Ci0gICAgICAgICAgICBp ZiAoZGF0YSA8IDApIHsKLSAgICAgICAgICAgICAgICBwZXJyb3IoImZ0cDogc29ja2V0Iik7Ci0g ICAgICAgICAgICAgICAgZnRwY29kZSA9IC0xOwotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICAg ICAgZGVidGltID0geGRlYnRpbTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgICAgICAgICAgICAg IHJldHVybigwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgqcCA9PSAnOicpCi0g ICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcCA9ICJo dHRwIjsKLQotICAgICAgICAgICAgZGVzdHNwID0gZ2V0c2VydmJ5bmFtZShwLCJ0Y3AiKTsKLSAg ICAgICAgICAgIGlmIChkZXN0c3ApCi0gICAgICAgICAgICAgIGhpc2N0bGFkZHIuc2luX3BvcnQg PSBkZXN0c3AtPnNfcG9ydDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHApCi0gICAgICAgICAgICAg IGhpc2N0bGFkZHIuc2luX3BvcnQgPSBodG9ucyhhdG9pKHApKTsKLSAgICAgICAgICAgIGVsc2UK LSAgICAgICAgICAgICAgaGlzY3RsYWRkci5zaW5fcG9ydCA9IGh0b25zKDgwKTsKLSAgICAgICAg ICAgIGVycm5vID0gMDsKLSNpZmRlZiBIQUREUkxJU1QKLSAgICAgICAgICAgIGRlYnVnKEYxMDAs ImluaXRjb25uIEhBRERSTElTVCIsIiIsMCk7Ci0gICAgICAgICAgICB3aGlsZQotI2Vsc2UKLSAg ICAgICAgICAgIGRlYnVnKEYxMDAsImluaXRjb25uIG5vIEhBRERSTElTVCIsIiIsMCk7Ci0gICAg ICAgICAgICBpZgotI2VuZGlmIC8qIEhBRERSTElTVCAqLwotICAgICAgICAgICAgICAoY29ubmVj dChkYXRhLCAoc3RydWN0IHNvY2thZGRyICopJmhpc2N0bGFkZHIsCi0gICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZiAoaGlzY3RsYWRkcikpIDwgMCkgewotICAgICAgICAgICAgICAgICAgZGVi dWcoRjEwMSwiaW5pdGNvbm4gY29ubmVjdCBmYWlsZWQiLCIiLGVycm5vKTsKLSNpZmRlZiBIQURE UkxJU1QKLSAgICAgICAgICAgICAgICAgIGlmIChocCAmJiBocC0+aF9hZGRyX2xpc3RbMV0pIHsK LSAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Vycm5vID0gZXJybm87Ci0KLSAgICAgICAgICAg ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJmdHA6IGNvbm5lY3QgdG8gYWRkcmVzcyAlczogIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGluZXRfbnRvYShoaXNjdGxhZGRyLnNpbl9hZGRyKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9IG9lcnJubzsKLSAg ICAgICAgICAgICAgICAgICAgICBwZXJyb3IoKGNoYXIgKikwKTsKLSAgICAgICAgICAgICAgICAg ICAgICBocC0+aF9hZGRyX2xpc3QrKzsKLSAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKGNo YXIgKikmaGlzY3RsYWRkci5zaW5fYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aHAtPmhfYWRkcl9saXN0WzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yo aGlzY3RsYWRkci5zaW5fYWRkcikpOwotICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3Rk b3V0LCAiVHJ5aW5nICVzLi4uXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5l dF9udG9hKGhpc2N0bGFkZHIuc2luX2FkZHIpKTsKLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICAg ICAgICAgICAgICAgIHNvY2tldF9jbG9zZShkYXRhKTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0g ICAgICAgICAgICAgICAgICAgICAgY2xvc2UoZGF0YSk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8K LSAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc29ja2V0KGhpc2N0bGFkZHIuc2luX2ZhbWls eSwgU09DS19TVFJFQU0sIDApOwotICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhIDwgMCkg ewotICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoImZ0cDogc29ja2V0Iik7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKLSNpZmRlZiBERUJVRwotICAgICAg ICAgICAgICAgICAgICAgICAgICBkZWJ0aW0gPSB4ZGVidGltOwotI2VuZGlmIC8qIERFQlVHICov Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg ICB9Ci0jZW5kaWYgLyogSEFERFJMSVNUICovCi0gICAgICAgICAgICAgICAgICBwZXJyb3IoImZ0 cDogY29ubmVjdCIpOwotICAgICAgICAgICAgICAgICAgZnRwY29kZSA9IC0xOwotICAgICAgICAg ICAgICAgICAgZ290byBiYWQ7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChodHRw X2Nvbm5lY3QoZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJv eHlfYWdlbnQgPwotCQkJICAgICAgIHRjcF9odHRwX3Byb3h5X2FnZW50IDoKLQkJCSAgICAgICAg IGFnZW50LAotCQkJICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bf aHR0cF9wcm94eV91c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9w cm94eV9wd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByb3h5aG9zdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp IDwgMCkgewotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKGRh dGEpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgICAgICBjbG9zZShkYXRhKTsK LSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgICAgIHBlcnJvcigiZnRwOiBjb25u ZWN0Iik7Ci0gICAgICAgICAgICAgICAgZnRwY29kZSA9IC0xOwotICAgICAgICAgICAgICAgIGdv dG8gYmFkOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBOT0hUVFAg Ki8KLSAgICAgICAgewotICAgICAgICAgICAgZGF0YV9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVU OwotICAgICAgICAgICAgZGF0YV9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKChhMTw8MjQp fChhMjw8MTYpfChhMzw8OCl8YTQpOwotICAgICAgICAgICAgZGF0YV9hZGRyLnNpbl9wb3J0ID0g aHRvbnMoKHAxPDw4KXxwMik7Ci0KLSAgICAgICAgICAgIGlmIChjb25uZWN0KGRhdGEsCi0gICAg ICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmRhdGFfYWRkciwKLSAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZihkYXRhX2FkZHIpKSA8IDAKLSAgICAgICAgICAgICAg ICApIHsKLSAgICAgICAgICAgICAgICBwZXJyb3IoImZ0cDogY29ubmVjdCIpOwotICAgICAgICAg ICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVi dWcoRjEwMCwiaW5pdGNvbm4gY29ubmVjdCBvayIsIiIsMCk7Ci0jaWZkZWYgSVBfVE9TCi0jaWZk ZWYgSVBUT1NfVEhST1VHSFBVVAotICAgICAgICBvbiA9IElQVE9TX1RIUk9VR0hQVVQ7Ci0gICAg ICAgIGlmIChzZXRzb2Nrb3B0KGRhdGEsIElQUFJPVE9fSVAsIElQX1RPUywgKGNoYXIgKikmb24s IHNpemVvZihpbnQpKSA8IDApCi0gICAgICAgICAgcGVycm9yKCJmdHA6IHNldHNvY2tvcHQgVE9T IChpZ25vcmVkKSIpOwotI2VuZGlmIC8qIElQVE9TX1RIUk9VR0hQVVQgKi8KLSNlbmRpZiAvKiBJ UF9UT1MgKi8KLSAgICAgICAgbWVtY3B5KCZoaXNkYXRhYWRkciwmZGF0YV9hZGRyLHNpemVvZihz dHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAv KiBOT19QQVNTSVZFX01PREUgKi8KLQotICBub3BvcnQ6Ci0gICAgbWVtY3B5KCZkYXRhX2FkZHIs Jm15Y3RsYWRkcixzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0gICAgaWYgKHNlbmRwb3J0 KQotICAgICAgZGF0YV9hZGRyLnNpbl9wb3J0ID0gMDsgICAvKiBsZXQgc3lzdGVtIHBpY2sgb25l ICovCi0gICAgaWYgKGRhdGEgIT0gLTEpIHsKLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICBzb2Nr ZXRfY2xvc2UoZGF0YSk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVTRV9TSFVURE9X TgotICAgICAgICBzaHV0ZG93bihkYXRhLCAxKzEpOwotI2VuZGlmIC8qIFVTRV9TSFVURE9XTiAq LwotICAgICAgICBjbG9zZShkYXRhKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgIH0KLSAg ICBkYXRhID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKLSAgICBnbG9iYWxkaW4g PSBkYXRhOwotICAgIGlmIChkYXRhIDwgMCkgewotICAgICAgICBwZXJyb3IoImZ0cDogc29ja2V0 Iik7Ci0gICAgICAgIGlmICh0bXBubykKLSAgICAgICAgICBzZW5kcG9ydCA9IDE7Ci0gICAgICAg IHJldHVybigtMSk7Ci0gICAgfQotICAgIGlmICghc2VuZHBvcnQpIHsKLSAgICAgICAgaWYgKHNl dHNvY2tvcHQoZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwKLSAgICAg ICAgICAgICAgICAgICAgICAgU09fUkVVU0VBRERSLAotICAgICAgICAgICAgICAgICAgICAgICAo Y2hhciAqKSZvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChvbikKLSAgICAgICAg ICAgICAgICAgICAgICAgKSA8IDAKLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgcGVycm9y KCJmdHA6IHNldHNvY2tvcHQgKHJldXNlIGFkZHJlc3MpIik7Ci0gICAgICAgICAgICBnb3RvIGJh ZDsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYmluZChkYXRhLCAoc3RydWN0IHNvY2thZGRy ICopJmRhdGFfYWRkciwgc2l6ZW9mIChkYXRhX2FkZHIpKSA8IDApIHsKLSAgICAgICAgcGVycm9y KCJmdHA6IGJpbmQiKTsKLSAgICAgICAgZ290byBiYWQ7Ci0gICAgfQotICAgIGxlbiA9IHNpemVv ZiAoZGF0YV9hZGRyKTsKLSAgICBpZiAoZ2V0c29ja25hbWUoZGF0YSwgKHN0cnVjdCBzb2NrYWRk ciAqKSZkYXRhX2FkZHIsICZsZW4pIDwgMCkgewotICAgICAgICBwZXJyb3IoImZ0cDogZ2V0c29j a25hbWUiKTsKLSAgICAgICAgZ290byBiYWQ7Ci0gICAgfQotICAgIGlmIChsaXN0ZW4oZGF0YSwg MSkgPCAwKSB7Ci0gICAgICAgIHBlcnJvcigiZnRwOiBsaXN0ZW4iKTsKLSAgICAgICAgZ290byBi YWQ7Ci0gICAgfQotICAgIGlmIChzZW5kcG9ydCkgewotICAgICAgICBhID0gKGNoYXIgKikmZGF0 YV9hZGRyLnNpbl9hZGRyOwotICAgICAgICBwID0gKGNoYXIgKikmZGF0YV9hZGRyLnNpbl9wb3J0 OwotICAgICAgICBja21ha3htc2coZnRwY21kYnVmLEZUUF9CVUZTSVosIlBPUlQgIiwKLSAgICAg ICAgICAgICAgICAgIFVDKGFbMF0pLCIsIixVQyhhWzFdKSwiLCIsIFVDKGFbMl0pLCIsIiwgVUMo YVszXSksIiwiLAotICAgICAgICAgICAgICAgICAgVUMocFswXSksIiwiLCBVQyhwWzFdKSk7Ci0g ICAgICAgIHJlc3VsdCA9IGZ0cGNtZChmdHBjbWRidWYsTlVMTCwwLDAsZnRwX3ZibSk7Ci0gICAg ICAgIGlmIChyZXN1bHQgPT0gUkVQTFlfRVJST1IgJiYgc2VuZHBvcnQpIHsKLSAgICAgICAgICAg IHNlbmRwb3J0ID0gMDsKLSAgICAgICAgICAgIHRtcG5vID0gMTsKLSAgICAgICAgICAgIGdvdG8g bm9wb3J0OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybihyZXN1bHQgIT0gUkVQTFlfQ09NUExF VEUpOwotICAgIH0KLSAgICBpZiAodG1wbm8pCi0gICAgICBzZW5kcG9ydCA9IDE7Ci0jaWZkZWYg SVBfVE9TCi0jaWZkZWYgSVBUT1NfVEhST1VHSFBVVAotICAgIG9uID0gSVBUT1NfVEhST1VHSFBV VDsKLSAgICBpZiAoc2V0c29ja29wdChkYXRhLCBJUFBST1RPX0lQLCBJUF9UT1MsIChjaGFyICop Jm9uLCBzaXplb2YoaW50KSkgPCAwKQotICAgICAgcGVycm9yKCJmdHA6IHNldHNvY2tvcHQgVE9T IChpZ25vcmVkKSIpOwotI2VuZGlmCi0jZW5kaWYKLSAgICByZXR1cm4oMCk7Ci0gIGJhZDoKLSNp ZmRlZiBUQ1BJUExJQgotICAgIHNvY2tldF9jbG9zZShkYXRhKTsKLSNlbHNlIC8qIFRDUElQTElC ICovCi0jaWZkZWYgVVNFX1NIVVRET1dOCi0gICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKLSNlbmRp ZiAvKiBVU0VfU0hVVERPV04gKi8KLSAgICBjbG9zZShkYXRhKTsKLSNlbmRpZiAvKiBUQ1BJUExJ QiAqLwotICAgIGRhdGEgPSAtMTsKLSAgICBnbG9iYWxkaW4gPSBkYXRhOwotICAgIGlmICh0bXBu bykKLSAgICAgIHNlbmRwb3J0ID0gMTsKLSAgICByZXR1cm4oLTEpOwotfQotCi0jaWZkZWYgQ0tf U1NMCi1zdGF0aWMgaW50Ci1zc2xfZGF0YWNvbm4oKSB7Ci0gICAgaWYgKHNzbF9mdHBfZGF0YV9j b24hPU5VTEwpIHsgICAgICAgLyogRG8gU1NMICovCi0gICAgICAgIFNTTF9mcmVlKHNzbF9mdHBf ZGF0YV9jb24pOwotICAgICAgICBzc2xfZnRwX2RhdGFfY29uPU5VTEw7Ci0gICAgfQotICAgIHNz bF9mdHBfZGF0YV9jb249KFNTTCAqKVNTTF9uZXcoc3NsX2Z0cF9jdHgpOwotCi0gICAgU1NMX3Nl dF9mZChzc2xfZnRwX2RhdGFfY29uLGRhdGEpOwotICAgIFNTTF9zZXRfdmVyaWZ5KHNzbF9mdHBf ZGF0YV9jb24sc3NsX3ZlcmlmeV9mbGFnLE5VTEwpOwotCi0gICAgU1NMX2NvcHlfc2Vzc2lvbl9p ZChzc2xfZnRwX2RhdGFfY29uLHNzbF9mdHBfY29uKTsKLQotICAgIGlmIChzc2xfZGVidWdfZmxh ZykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwiPT5TVEFSVCBTU0wgY29ubmVjdCBvbiBEQVRB XG4iKTsKLSAgICAgICAgZmZsdXNoKHN0ZGVycik7Ci0gICAgfQotICAgIGlmIChTU0xfY29ubmVj dChzc2xfZnRwX2RhdGFfY29uKSA8PSAwKSB7Ci0gICAgICAgIHN0YXRpYyBjaGFyIGVycmJ1Zlsx MDI0XTsKLSAgICAgICAgY2ttYWttc2coZXJyYnVmLDEwMjQsImZ0cDogU1NMX2Nvbm5lY3QgREFU QSBlcnJvcjogIiwKLSAgICAgICAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9l cnJvcigpLE5VTEwpLE5VTEwsTlVMTCk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCIlc1xuIiwg ZXJyYnVmKTsKLSAgICAgICAgZmZsdXNoKHN0ZGVycik7Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAg ICAgc29ja2V0X2Nsb3NlKGRhdGEpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSNpZmRlZiBVU0Vf U0hVVERPV04KLSAgICAgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKLSNlbmRpZiAvKiBVU0VfU0hV VERPV04gKi8KLSAgICAgICAgY2xvc2UoZGF0YSk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAg ICAgICAgZGF0YSA9IC0xOwotICAgICAgICBnbG9iYWxkaW4gPSBkYXRhOwotICAgICAgICByZXR1 cm4oLTEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZz0x OwotCi0gICAgICAgIGlmICghc3NsX2NlcnRzb2tfZmxhZyAmJiAhdGxzX2lzX2tyYjUoMikpIHsK LSAgICAgICAgICAgIGNoYXIgKnN1YmplY3QgPSBzc2xfZ2V0X3N1YmplY3RfbmFtZShzc2xfZnRw X2RhdGFfY29uKTsKLQotICAgICAgICAgICAgaWYgKCFzdWJqZWN0KSB7Ci0gICAgICAgICAgICAg ICAgaWYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQp IHsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZGF0YWNvbm4iLCJbU1NMIF8tIEZB SUxFRF0iLDApOwotCi0gICAgICAgICAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxh ZyA9IDA7Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgICAgICAgICAgICAgc29ja2V0X2Nsb3Nl KGRhdGEpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSNpZmRlZiBVU0VfU0hVVERPV04KLSAgICAg ICAgICAgICAgICAgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKLSNlbmRpZiAvKiBVU0VfU0hVVERP V04gKi8KLSAgICAgICAgICAgICAgICAgICAgY2xvc2UoZGF0YSk7Ci0jZW5kaWYgLyogVENQSVBM SUIgKi8KLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IC0xOwotICAgICAgICAgICAgICAgICAg ICBnbG9iYWxkaW4gPSBkYXRhOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAg ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghb3V0MnNjcmVl biAmJiBkaXNwbGEgJiYgZmRpc3BsYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZnRzY3Jl ZW4oU0NSX1RDLDAsKENLX09GRl9UKTAsIkRpc3BsYXkgY2FuY2VsZWQiKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGZkaXNwbGEgPSBYWUZEX0I7ICovCi0gICAgICAgICAgICAgICAgICAg IH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAodXFfb2soCi0gICAgICAgICAgIldhcm5pbmc6 IFNlcnZlciBkaWRuJ3QgcHJvdmlkZSBhIGNlcnRpZmljYXRlIG9uIGRhdGEgY29ubmVjdGlvblxu IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGludWUgd2l0aCBmaWxlIHRy YW5zZmVyPyAoWS9OKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLE5VTEwsMCkg PD0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwgImRhdGFjb25uIiwi W1NTTCAtIEZBSUxFRF0iLDApOwotICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2Z0cF9kYXRh X2FjdGl2ZV9mbGFnID0gMDsKLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICAgICAgICAgICAgICAg ICAgc29ja2V0X2Nsb3NlKGRhdGEpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSNpZmRlZiBVU0Vf U0hVVERPV04KLSAgICAgICAgICAgICAgICAgICAgICAgIHNodXRkb3duKGRhdGEsIDErMSk7Ci0j ZW5kaWYgLyogVVNFX1NIVVRET1dOICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZShk YXRhKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0 YSA9IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsZGluID0gZGF0YTsKLSAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlm ICghb3V0MnNjcmVlbiAmJiBkaXNwbGEgJiYgZmRpc3BsYSA9PSBYWUZEX0MpIHsKLSAgICAgICAg ICAgICAgICAgICAgZnRzY3JlZW4oU0NSX1RDLDAsKENLX09GRl9UKTAsIkRpc3BsYXkgY2FuY2Vs ZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgLyogZmRpc3BsYSA9IFhZRkRfQjsgKi8KLSAgICAg ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3NsX2NoZWNrX3NlcnZlcl9uYW1l KHNzbF9mdHBfZGF0YV9jb24sZnRwX3VzZXJfaG9zdCkpIHsKLSAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMCwiZGF0YWNvbm4iLCJbU1NMIC0gRkFJTEVEXSIsMCk7Ci0gICAgICAgICAgICAg ICAgICAgIHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZyA9IDA7Ci0jaWZkZWYgVENQSVBMSUIKLSAg ICAgICAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKGRhdGEpOwotI2Vsc2UgLyogVENQSVBMSUIg Ki8KLSNpZmRlZiBVU0VfU0hVVERPV04KLSAgICAgICAgICAgICAgICAgICAgc2h1dGRvd24oZGF0 YSwgMSsxKTsKLSNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KLSAgICAgICAgICAgICAgICAgICAg Y2xvc2UoZGF0YSk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgICAgICAgICAg ZGF0YSA9IC0xOwotICAgICAgICAgICAgICAgICAgICBnbG9iYWxkaW4gPSBkYXRhOwotICAgICAg ICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTEwLCJkYXRhY29ubiIsIltTU0wgLSBPS10i LDApOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgLyogVGhpcyBtZXNzZXMgdXAgdGhlIGZ1bGwg c2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSAqLwotICAgICAgICBzc2xfZGlzcGxheV9jb25u ZWN0X2RldGFpbHMoc3NsX2Z0cF9jb24sMCxzc2xfdmVyYm9zZV9mbGFnKTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0gICAgfQotICAgIGlmIChzc2xfZGVidWdfZmxhZykgewotICAgICAgICBmcHJp bnRmKHN0ZGVyciwiPT5ET05FIFNTTCBjb25uZWN0IG9uIERBVEFcbiIpOwotICAgICAgICBmZmx1 c2goc3RkZXJyKTsKLSAgICB9Ci0gICAgcmV0dXJuKGRhdGEpOwotfQotI2VuZGlmIC8qIENLX1NT TCAqLwotCi1zdGF0aWMgaW50Ci1kYXRhY29ubihsbW9kZSkgY2hhciAqbG1vZGU7IHsKLSAgICBp bnQgczsKLSNpZmRlZiBJUF9UT1MKLSAgICBpbnQgdG9zOwotI2VuZGlmIC8qIElQX1RPUyAqLwot I2lmZGVmIFVDWDUwCi0gICAgc3RhdGljIHVfaW50IGZyb21sZW47Ci0jZWxzZQotICAgIHN0YXRp YyBTT0NLT1BUX1QgZnJvbWxlbjsKLSNlbmRpZiAvKiBVQ1g1MCAqLwotCi0gICAgZnJvbWxlbiA9 IHNpemVvZihoaXNkYXRhYWRkcik7Ci0KLSNpZm5kZWYgTk9fUEFTU0lWRV9NT0RFCi0gICAgaWYg KHBhc3NpdmVtb2RlKSB7Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIHNzbF9mdHBfZGF0YV9hY3Rp dmVfZmxhZz0wOwotICAgICAgICBpZiAoc3NsX2Z0cF9hY3RpdmVfZmxhZyAmJgotICAgICAgICAg ICAgKHNzbF9mdHBfcHJveHkgfHwgZnRwX2RwbCA9PSBGUExfUFJWKSkKLSAgICAgICAgICByZXR1 cm4oc3NsX2RhdGFjb25uKCkpOwotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICByZXR1cm4o ZGF0YSk7Ci0gICAgfQotI2VuZGlmIC8qIE5PX1BBU1NJVkVfTU9ERSAqLwotCi0gICAgcyA9IGFj Y2VwdChkYXRhLCAoc3RydWN0IHNvY2thZGRyICopICZoaXNkYXRhYWRkciwgJmZyb21sZW4pOwot ICAgIGlmIChzIDwgMCkgewotICAgICAgICBwZXJyb3IoImZ0cDogYWNjZXB0Iik7Ci0jaWZkZWYg VENQSVBMSUIKLSAgICAgICAgc29ja2V0X2Nsb3NlKGRhdGEpOwotI2Vsc2UgLyogVENQSVBMSUIg Ki8KLSNpZmRlZiBVU0VfU0hVVERPV04KLSAgICAgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKLSNl bmRpZiAvKiBVU0VfU0hVVERPV04gKi8KLSAgICAgICAgY2xvc2UoZGF0YSk7Ci0jZW5kaWYgLyog VENQSVBMSUIgKi8KLSAgICAgICAgZGF0YSA9IC0xOwotICAgICAgICBnbG9iYWxkaW4gPSBkYXRh OwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSNpZmRlZiBUQ1BJUExJQgotICAgIHNvY2tl dF9jbG9zZShkYXRhKTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0jaWZkZWYgVVNFX1NIVVRET1dO Ci0gICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKLSNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KLSAg ICBjbG9zZShkYXRhKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgIGRhdGEgPSBzOwotICAg IGdsb2JhbGRpbiA9IGRhdGE7Ci0jaWZkZWYgSVBfVE9TCi0jaWZkZWYgSVBUT1NfVEhST1VHSFBV VAotICAgIHRvcyA9IElQVE9TX1RIUk9VR0hQVVQ7Ci0gICAgaWYgKHNldHNvY2tvcHQoZGF0YSwg SVBQUk9UT19JUCwgSVBfVE9TLCAoY2hhciAqKSZ0b3MsIHNpemVvZihpbnQpKSA8IDApCi0gICAg ICBwZXJyb3IoImZ0cDogc2V0c29ja29wdCBUT1MgKGlnbm9yZWQpIik7Ci0jZW5kaWYgLyogSVBU T1NfVEhST1VHSFBVVCAqLwotI2VuZGlmIC8qIElQX1RPUyAqLwotCi0jaWZkZWYgQ0tfU1NMCi0g ICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnPTA7Ci0gICAgaWYgKHNzbF9mdHBfYWN0aXZlX2Zs YWcgJiYKLSAgICAgICAgKHNzbF9mdHBfcHJveHkgfHwgZnRwX2RwbCA9PSBGUExfUFJWKSkKLSAg ICAgIHJldHVybihzc2xfZGF0YWNvbm4oKSk7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgcmV0 dXJuKGRhdGEpOwotfQotCi0jaWZkZWYgRlRQX1BST1hZCi1zdGF0aWMgc2lndHlwZQotcHNjYW5j ZWwoc2lnKSBpbnQgc2lnOyB7Ci0gICAgY2FuY2VsZmlsZSsrOwotfQotCi1zdGF0aWMgVk9JRAot cHN3aXRjaChmbGFnKSBpbnQgZmxhZzsgewotICAgIGV4dGVybiBpbnQgcHJveHk7Ci0gICAgc2ln X3Qgb2xkaW50cjsKLSAgICBzdGF0aWMgc3RydWN0IGNvbXZhcnMgewotICAgICAgICBpbnQgY29u bmVjdDsKLSAgICAgICAgY2hhciBuYW1lW01BWEhPU1ROQU1FTEVOXTsKLSAgICAgICAgc3RydWN0 IHNvY2thZGRyX2luIG1jdGw7Ci0gICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBoY3RsOwotICAg ICAgICBGSUxFICppbjsKLSAgICAgICAgRklMRSAqb3V0OwotICAgICAgICBpbnQgdHBlOwotICAg ICAgICBpbnQgY3VydHBlOwotICAgICAgICBpbnQgY3BuZDsKLSAgICAgICAgaW50IHN1bnFlOwot ICAgICAgICBpbnQgcnVucWU7Ci0gICAgICAgIGludCBtY3NlOwotICAgICAgICBpbnQgbnRmbGc7 Ci0gICAgICAgIGNoYXIgbnRpWzE3XTsKLSAgICAgICAgY2hhciBudG9bMTddOwotICAgICAgICBp bnQgbWFwZmxnOwotICAgICAgICBjaGFyIG1pW0NLTUFYUEFUSF07Ci0gICAgICAgIGNoYXIgbW9b Q0tNQVhQQVRIXTsKLSAgICAgICAgY2hhciAqYXV0aHR5cGU7Ci0gICAgICAgIGludCBjbHZsOwot ICAgICAgICBpbnQgZGx2bDsKLSNpZmRlZiBGVFBfS1JCNAotICAgICAgICBkZXNfY2Jsb2NrIHNl c3Npb247Ci0gICAgICAgIGRlc19rZXlfc2NoZWR1bGUgZnRwX3NjaGVkOwotI2VuZGlmIC8qIEZU UF9LUkI0ICovCi0jaWZkZWYgRlRQX0dTU0FQSQotICAgICAgICBnc3NfY3R4X2lkX3QgZ2NvbnRl eHQ7Ci0jZW5kaWYgLyogR1NTQVBJICovCi0gICAgfSBwcm94c3RydWN0LCB0bXBzdHJ1Y3Q7Ci0g ICAgc3RydWN0IGNvbXZhcnMgKmlwLCAqb3A7Ci0KLSAgICBjYW5jZWxmaWxlID0gMDsKLSAgICBv bGRpbnRyID0gc2lnbmFsKFNJR0lOVCwgcHNjYW5jZWwpOwotICAgIGlmIChmbGFnKSB7Ci0gICAg ICAgIGlmIChwcm94eSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlwID0gJnRtcHN0cnVj dDsKLSAgICAgICAgb3AgPSAmcHJveHN0cnVjdDsKLSAgICAgICAgcHJveHkrKzsKLSAgICB9IGVs c2UgewotICAgICAgICBpZiAoIXByb3h5KQotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaXAg PSAmcHJveHN0cnVjdDsKLSAgICAgICAgb3AgPSAmdG1wc3RydWN0OwotICAgICAgICBwcm94eSA9 IDA7Ci0gICAgfQotICAgIGlwLT5jb25uZWN0ID0gY29ubmVjdGVkOwotICAgIGNvbm5lY3RlZCA9 IG9wLT5jb25uZWN0OwotICAgIGlmIChmdHBfaG9zdCkgewotICAgICAgICBzdHJuY3B5KGlwLT5u YW1lLCBmdHBfaG9zdCwgTUFYSE9TVE5BTUVMRU4gLSAxKTsKLSAgICAgICAgaXAtPm5hbWVbTUFY SE9TVE5BTUVMRU4gLSAxXSA9ICdcMCc7Ci0gICAgICAgIGlwLT5uYW1lW3N0cmxlbihpcC0+bmFt ZSldID0gJ1wwJzsKLSAgICB9IGVsc2UKLSAgICAgIGlwLT5uYW1lWzBdID0gMDsKLSAgICBmdHBf aG9zdCA9IG9wLT5uYW1lOwotICAgIGlwLT5oY3RsID0gaGlzY3RsYWRkcjsKLSAgICBoaXNjdGxh ZGRyID0gb3AtPmhjdGw7Ci0gICAgaXAtPm1jdGwgPSBteWN0bGFkZHI7Ci0gICAgbXljdGxhZGRy ID0gb3AtPm1jdGw7Ci0gICAgaXAtPmluID0gY3NvY2tldDsKLSAgICBjc29ja2V0ID0gb3AtPmlu OwotICAgIGlwLT5vdXQgPSBjc29ja2V0OwotICAgIGNzb2NrZXQgPSBvcC0+b3V0OwotICAgIGlw LT50cGUgPSBmdHBfdHlwOwotICAgIGZ0cF90eXAgPSBvcC0+dHBlOwotICAgIGlwLT5jdXJ0cGUg PSBjdXJ0eXBlOwotICAgIGN1cnR5cGUgPSBvcC0+Y3VydHBlOwotICAgIGlwLT5jcG5kID0gY3Bl bmQ7Ci0gICAgY3BlbmQgPSBvcC0+Y3BuZDsKLSAgICBpcC0+c3VucWUgPSBmdHBfdXNuOwotICAg IGZ0cF91c24gPSBvcC0+c3VucWU7Ci0gICAgaXAtPm1jc2UgPSBtY2FzZTsKLSAgICBtY2FzZSA9 IG9wLT5tY3NlOwotICAgIGlwLT5udGZsZyA9IG50ZmxhZzsKLSAgICBudGZsYWcgPSBvcC0+bnRm bGc7Ci0gICAgc3RybmNweShpcC0+bnRpLCBudGluLCAxNik7Ci0gICAgKGlwLT5udGkpW3N0cmxl bihpcC0+bnRpKV0gPSAnXDAnOwotICAgIHN0cmNweShudGluLCBvcC0+bnRpKTsKLSAgICBzdHJu Y3B5KGlwLT5udG8sIG50b3V0LCAxNik7Ci0gICAgKGlwLT5udG8pW3N0cmxlbihpcC0+bnRvKV0g PSAnXDAnOwotICAgIHN0cmNweShudG91dCwgb3AtPm50byk7Ci0gICAgaXAtPm1hcGZsZyA9IG1h cGZsYWc7Ci0gICAgbWFwZmxhZyA9IG9wLT5tYXBmbGc7Ci0gICAgc3RybmNweShpcC0+bWksIG1h cGluLCBDS01BWFBBVEggLSAxKTsKLSAgICAoaXAtPm1pKVtzdHJsZW4oaXAtPm1pKV0gPSAnXDAn OwotICAgIHN0cmNweShtYXBpbiwgb3AtPm1pKTsKLSAgICBzdHJuY3B5KGlwLT5tbywgbWFwb3V0 LCBDS01BWFBBVEggLSAxKTsKLSAgICAoaXAtPm1vKVtzdHJsZW4oaXAtPm1vKV0gPSAnXDAnOwot ICAgIHN0cmNweShtYXBvdXQsIG9wLT5tbyk7Ci0gICAgaXAtPmF1dGh0eXBlID0gYXV0aF90eXBl OwotICAgIGF1dGhfdHlwZSA9IG9wLT5hdXRodHlwZTsKLSAgICBpcC0+Y2x2bCA9IGZ0cF9jcGw7 Ci0gICAgZnRwX2NwbCA9IG9wLT5jbHZsOwotICAgIGlwLT5kbHZsID0gZnRwX2RwbDsKLSAgICBm dHBfZHBsID0gb3AtPmRsdmw7Ci0gICAgaWYgKCFmdHBfY3BsKQotICAgICAgZnRwX2NwbCA9IEZQ TF9DTFI7Ci0gICAgaWYgKCFmdHBfZHBsKQotICAgICAgZnRwX2RwbCA9IEZQTF9DTFI7Ci0jaWZk ZWYgRlRQX0tSQjQKLSAgICBtZW1jcHkoaXAtPnNlc3Npb24sIGZ0cF9jcmVkLnNlc3Npb24sIHNp emVvZihmdHBfY3JlZC5zZXNzaW9uKSk7Ci0gICAgbWVtY3B5KGZ0cF9jcmVkLnNlc3Npb24sIG9w LT5zZXNzaW9uLCBzaXplb2YoZnRwX2NyZWQuc2Vzc2lvbikpOwotICAgIG1lbWNweShpcC0+c2No ZWR1bGUsIGZ0cF9zY2hlZCwgc2l6ZW9mKGZ0cF9zY2hlZCkpOwotICAgIG1lbWNweShmdHBfc2No ZWQsIG9wLT5zY2hlZHVsZSwgc2l6ZW9mKGZ0cF9zY2hlZCkpOwotI2VuZGlmIC8qIEZUUF9LUkI0 ICovCi0jaWZkZWYgRlRQX0dTU0FQSQotICAgIGlwLT5nY29udGV4dCA9IGdjb250ZXh0OwotICAg IGdjb250ZXh0ID0gb3AtPmdjb250ZXh0OwotI2VuZGlmIC8qIEdTU0FQSSAqLwotICAgIHNpZ25h bChTSUdJTlQsIG9sZGludHIpOwotICAgIGlmIChjYW5jZWxmaWxlKSB7Ci0gICAgICAgIGNhbmNl bGZpbGUgPSAwOwotICAgICAgICBkZWJ1ZyhGMTAxLCJwc3dpdGNoIGNhbmNlbGZpbGUgQiIsIiIs Y2FuY2VsZmlsZSk7Ci0gICAgICAgICgqb2xkaW50cikoU0lHSU5UKTsKLSAgICB9Ci19Ci0KLXN0 YXRpYyBzaWd0eXBlCi1jYW5jZWxwdChzaWcpIGludCBzaWc7IHsKLSAgICBwcmludGYoIlxuIik7 Ci0gICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgcHRhYmZsZysrOwotICAgIGNhbmNlbGZpbGUgPSAw OwotI2lmbmRlZiBPUzIKLSAgICBsb25nam1wKHB0Y2FuY2VsLCAxKTsKLSNlbHNlCi0gICAgUG9z dEN0cmxDU2VtKCk7Ci0jZW5kaWYgLyogT1MyICovCi19Ci0KLXZvaWQKLXByb3h0cmFucyhjbWQs IGxvY2FsLCByZW1vdGUsIHVuaXF1ZSkgY2hhciAqY21kLCAqbG9jYWwsICpyZW1vdGU7IGludCB1 bmlxdWU7IHsKLSAgICBzaWdfdCBvbGRpbnRyOwotICAgIGludCBzZWNuZGZsYWcgPSAwLCBwcm94 X3R5cGUsIG5mbmQ7Ci0gICAgY2hhciAqY21kMjsKLSNpZmRlZiBCU0RTRUxFQ1QKLSAgICBmZF9z ZXQgbWFzazsKLSNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KLSAgICBzaWd0eXBlIGNhbmNlbHB0KCk7 Ci0KLSAgICBpZiAoc3RyY21wKGNtZCwgIlJFVFIiKSkKLSAgICAgIGNtZDIgPSAiUkVUUiI7Ci0g ICAgZWxzZQotICAgICAgY21kMiA9IHVuaXF1ZSA/ICJTVE9VIiA6ICJTVE9SIjsKLSAgICBpZiAo KHByb3hfdHlwZSA9IHR5cGUpID09IDApIHsKLSAgICAgICAgaWYgKHNlcnZlcnR5cGUgPT0gU1lT X1VOSVggJiYgdW5peF9wcm94eSkKLSAgICAgICAgICBwcm94X3R5cGUgPSBGVFRfQklOOwotICAg ICAgICBlbHNlCi0gICAgICAgICAgcHJveF90eXBlID0gRlRUX0FTQzsKLSAgICB9Ci0gICAgaWYg KGN1cnR5cGUgIT0gcHJveF90eXBlKQotICAgICAgY2hhbmdldHlwZShwcm94X3R5cGUsIDEpOwot ICAgIGlmIChmdHBjbWQoIlBBU1YiLE5VTEwsMCwwLGZ0cF92Ym0pICE9IFJFUExZX0NPTVBMRVRF KSB7Ci0gICAgICAgIHByaW50ZigiUHJveHkgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcmQg cGFydHkgdHJhbnNmZXJzLlxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcHN3aXRj aCgwKTsKLSAgICBpZiAoIWNvbm5lY3RlZCkgewotICAgICAgICBwcmludGYoIk5vIHByaW1hcnkg Y29ubmVjdGlvblxuIik7Ci0gICAgICAgIHBzd2l0Y2goMSk7Ci0gICAgICAgIGZ0cGNvZGUgPSAt MTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoY3VydHlwZSAhPSBwcm94X3R5cGUp Ci0gICAgICBjaGFuZ2V0eXBlKHByb3hfdHlwZSwgMSk7Ci0KLSAgICBpZiAoZnRwY21kKCJQT1JU IixwYXN2LC0xLC0xLGZ0cF92Ym0pICE9IFJFUExZX0NPTVBMRVRFKSB7Ci0gICAgICAgIHBzd2l0 Y2goMSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvKiBSZXBsYWNlIHdpdGggY2Fs bHMgdG8gY2NfZXhlY3V0ZSgpICovCi0gICAgaWYgKHNldGptcChwdGNhbmNlbCkpCi0gICAgICBn b3RvIGNhbmNlbDsKLSAgICBvbGRpbnRyID0gc2lnbmFsKFNJR0lOVCwgY2FuY2VscHQpOwotICAg IGlmIChmdHBjbWQoY21kLHJlbW90ZSwtMSwtMSxmdHBfdmJtKSAhPSBQUkVMSU0pIHsKLSAgICAg ICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50cik7Ci0gICAgICAgIHBzd2l0Y2goMSk7Ci0gICAgICAg IHJldHVybjsKLSAgICB9Ci0gICAgc2xlZXAoMjAwMCk7Ci0gICAgcHN3aXRjaCgxKTsKLSAgICBz ZWNuZGZsYWcrKzsKLSAgICBpZiAoZnRwY21kKGNtZDIsbG9jYWwsLTEsLTEsZnRwX3ZibSkgIT0g UFJFTElNKQotICAgICAgZ290byBjYW5jZWw7Ci0gICAgcHRmbGFnKys7Ci0gICAgZ2V0cmVwbHko MCwtMSwtMSxmdHBfdmJtLDApOwotICAgIHBzd2l0Y2goMCk7Ci0gICAgZ2V0cmVwbHkoMCwtMSwt MSxmdHBfdmJtLDApOwotICAgIHNpZ25hbChTSUdJTlQsIG9sZGludHIpOwotICAgIHBzd2l0Y2go MSk7Ci0gICAgcHRmbGFnID0gMDsKLSAgICByZXR1cm47Ci0KLSAgY2FuY2VsOgotICAgIHNpZ25h bChTSUdJTlQsIFNJR19JR04pOwotICAgIHB0ZmxhZyA9IDA7Ci0gICAgaWYgKHN0cmNtcChjbWQs ICJSRVRSIikgJiYgIXByb3h5KQotICAgICAgcHN3aXRjaCgxKTsKLSAgICBlbHNlIGlmICghc3Ry Y21wKGNtZCwgIlJFVFIiKSAmJiBwcm94eSkKLSAgICAgIHBzd2l0Y2goMCk7Ci0gICAgaWYgKCFj cGVuZCAmJiAhc2VjbmRmbGFnKSB7ICAvKiBvbmx5IGhlcmUgaWYgY21kID0gIlNUT1IiIChwcm94 eT0xKSAqLwotICAgICAgICBpZiAoZnRwY21kKGNtZDIsbG9jYWwsLTEsLTEsZnRwX3ZibSkgIT0g UFJFTElNKSB7Ci0gICAgICAgICAgICBwc3dpdGNoKDApOwotICAgICAgICAgICAgaWYgKGNwZW5k KQotICAgICAgICAgICAgICBjYW5jZWxfcmVtb3RlKDApOwotICAgICAgICB9Ci0gICAgICAgIHBz d2l0Y2goMSk7Ci0gICAgICAgIGlmIChwdGFiZmxnKQotICAgICAgICAgIGZ0cGNvZGUgPSAtMTsK LSAgICAgICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9 Ci0gICAgaWYgKGNwZW5kKQotICAgICAgY2FuY2VsX3JlbW90ZSgwKTsKLSAgICBwc3dpdGNoKCFw cm94eSk7Ci0gICAgaWYgKCFjcGVuZCAmJiAhc2VjbmRmbGFnKSB7ICAvKiBvbmx5IGlmIGNtZCA9 ICJSRVRSIiAocHJveHk9MSkgKi8KLSAgICAgICAgaWYgKGZ0cGNtZChjbWQyLGxvY2FsLC0xLC0x LGZ0cF92Ym0pICE9IFBSRUxJTSkgewotICAgICAgICAgICAgcHN3aXRjaCgwKTsKLSAgICAgICAg ICAgIGlmIChjcGVuZCkKLSAgICAgICAgICAgICAgY2FuY2VsX3JlbW90ZSgwKTsKLSAgICAgICAg ICAgIHBzd2l0Y2goMSk7Ci0gICAgICAgICAgICBpZiAocHRhYmZsZykKLSAgICAgICAgICAgICAg ZnRwY29kZSA9IC0xOwotICAgICAgICAgICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50cik7Ci0gICAg ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGNwZW5kKQotICAgICAg Y2FuY2VsX3JlbW90ZSgwKTsKLSAgICBwc3dpdGNoKCFwcm94eSk7Ci0gICAgaWYgKGNwZW5kKSB7 Ci0jaWZkZWYgQlNEU0VMRUNUCi0gICAgICAgIEZEX1pFUk8oJm1hc2spOwotICAgICAgICBGRF9T RVQoY3NvY2tldCwgJm1hc2spOwotICAgICAgICBpZiAoKG5mbmQgPSBlbXB0eSgmbWFzaywgMTAp KSA8PSAwKSB7Ci0gICAgICAgICAgICBpZiAobmZuZCA8IDApIHsKLSAgICAgICAgICAgICAgICBw ZXJyb3IoImNhbmNlbCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHB0YWJmbGcp Ci0gICAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKLSAgICAgICAgICAgIGxvc3RwZWVyKCk7Ci0g ICAgICAgIH0KLSNlbHNlIC8qIEJTRFNFTEVDVCAqLwotI2lmZGVmIElCTVNFTEVDVAotICAgICAg ICBpZiAoKG5mbmQgPSBlbXB0eSgmY3NvY2tldCwgMSwgMTApKSA8PSAwKSB7Ci0gICAgICAgICAg ICBpZiAobmZuZCA8IDApIHsKLSAgICAgICAgICAgICAgICBwZXJyb3IoImNhbmNlbCIpOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHB0YWJmbGcpCi0gICAgICAgICAgICAgIGZ0cGNv ZGUgPSAtMTsKLSAgICAgICAgICAgIGxvc3RwZWVyKCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJ Qk1TRUxFQ1QgKi8KLSNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KLSAgICAgICAgZ2V0cmVwbHkoMCwt MSwtMSxmdHBfdmJtLDApOwotICAgICAgICBnZXRyZXBseSgwLC0xLC0xLGZ0cF92Ym0sMCk7Ci0g ICAgfQotICAgIGlmIChwcm94eSkKLSAgICAgIHBzd2l0Y2goMCk7Ci0gICAgcHN3aXRjaCgxKTsK LSAgICBpZiAocHRhYmZsZykKLSAgICAgIGZ0cGNvZGUgPSAtMTsKLSAgICBzaWduYWwoU0lHSU5U LCBvbGRpbnRyKTsKLX0KLSNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KLQotI2lmZGVmIEZUUF9TRUNV UklUWQotI2lmZGVmIEZUUF9HU1NBUEkKLQotI2lmZGVmIENPTU1FTlQKLS8qIGNrX2dzc19tZWNo X2tyYjUgaXMgbm90IGRlY2xhcmVkIGFueXdoZXJlICovCi1zdHJ1Y3QgewotICAgIENPTlNUIGdz c19PSURfZGVzYyAqIENPTlNUICogbWVjaF90eXBlOwotICAgIGNoYXIgKnNlcnZpY2VfbmFtZTsK LX0gZ3NzX3RyaWFsc1tdID0gewotICAgIHsgJmNrX2dzc19tZWNoX2tyYjUsICJmdHAiIH0sCi0g ICAgeyAmY2tfZ3NzX21lY2hfa3JiNSwgImhvc3QiIH0sCi19OwotI2Vsc2UKLS8qIFRoaXMgbWF0 Y2hlcyB3aGF0IGlzIGRlY2xhcmVkIGFib3ZlICovCi1zdHJ1Y3QgewotICAgIENPTlNUIGdzc19P SURfZGVzYyAqIENPTlNUICogbWVjaF90eXBlOwotICAgIGNoYXIgKnNlcnZpY2VfbmFtZTsKLX0g Z3NzX3RyaWFsc1tdID0gewotICAgIHsgJmdzc19tZWNoX2tyYjUsICJmdHAiIH0sCi0gICAgeyAm Z3NzX21lY2hfa3JiNSwgImhvc3QiIH0sCi19OwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQotCi1p bnQgbl9nc3NfdHJpYWxzID0gc2l6ZW9mKGdzc190cmlhbHMpL3NpemVvZihnc3NfdHJpYWxzWzBd KTsKLSNlbmRpZiAvKiBGVFBfR1NTQVBJICovCi0KLXN0YXRpYyBpbnQKLWZ0cF9hdXRoKCkgewot ICAgIGV4dGVybiBpbnQgc2V0c2FmZSgpOwotICAgIGludCBqID0gMCwgbjsKLSNpZmRlZiBGVFBf S1JCNAotICAgIGNoYXIgKnNlcnZpY2UsIGluc3RbSU5TVF9TWl07Ci0gICAgVUxPTkcgY2tzdW07 Ci0gICAgVUxPTkcgY2hlY2tzdW0gPSAoVUxPTkcpIGdldHBpZCgpOwotICAgIENIQVIgb3V0X2J1 ZltGVFBfQlVGU0laXTsKLSAgICBpbnQgaTsKLSNlbHNlIC8qIEZUUF9LUkI0ICovCi0jaWZkZWYg RlRQX0dTU0FQSQotICAgIENIQVIgb3V0X2J1ZltGVFBfQlVGU0laXTsKLSAgICBpbnQgaTsKLSNl bmRpZiAvKiBGVFBfR1NTQVBJICovCi0jZW5kaWYgLyogRlRQX0tSQjQgKi8KLQotICAgIGlmIChz c2xfZnRwX3Byb3h5KSAgICAgICAgICAgICAgICAgIC8qIERvIG5vdCBhbGxvdyBBVVRIIG92ZXIg U1NMIHByb3h5ICovCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIGlmIChhdXRoX3R5cGUpCi0g ICAgICByZXR1cm4oMSk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogYXV0aCBhbHJlYWR5IHN1 Y2NlZWRlZCAqLwotCi0gICAgLyogVHJ5IGVhY2ggYXV0aCB0eXBlIGFzIHNwZWNpZmllZCBieSB0 aGUgZW5kIHVzZXIgKi8KLSAgICBmb3IgKGogPSAwOyBqIDwgOCAmJiBmdHBfYXV0aF90eXBlW2pd ICE9IDA7IGorKykgewotI2lmZGVmIEZUUF9HU1NBUEkKLSAgICAgICAgaWYgKGZ0cF9hdXRoX3R5 cGVbal0gPT0gRlRBX0dLNSAmJiBja19nc3NhcGlfaXNfaW5zdGFsbGVkKCkpIHsKLSAgICAgICAg ICAgIG4gPSBmdHBjbWQoIkFVVEggR1NTQVBJIixOVUxMLDAsMCxmdHBfdmJtKTsKLSAgICAgICAg ICAgIGlmIChuID09IFJFUExZX0NPTlRJTlVFKSB7Ci0gICAgICAgICAgICAgICAgT01fdWludDMy IG1hal9zdGF0LCBtaW5fc3RhdDsKLSAgICAgICAgICAgICAgICBnc3NfbmFtZV90IHRhcmdldF9u YW1lOwotICAgICAgICAgICAgICAgIGdzc19idWZmZXJfZGVzYyBzZW5kX3RvaywgcmVjdl90b2ss ICp0b2tlbl9wdHI7Ci0gICAgICAgICAgICAgICAgY2hhciBzdGJ1ZltGVFBfQlVGU0laXTsKLSAg ICAgICAgICAgICAgICBpbnQgY29tY29kZSwgdHJpYWw7Ci0gICAgICAgICAgICAgICAgc3RydWN0 IGdzc19jaGFubmVsX2JpbmRpbmdzX3N0cnVjdCBjaGFuOwotICAgICAgICAgICAgICAgIGNoYXIg KiByZWFsbSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgY2hhciB0Z3RbMjU2XTsKLQotICAgICAg ICAgICAgICAgIGNoYW4uaW5pdGlhdG9yX2FkZHJ0eXBlID0gR1NTX0NfQUZfSU5FVDsgLyogT01f dWludDMyICAqLwotICAgICAgICAgICAgICAgIGNoYW4uaW5pdGlhdG9yX2FkZHJlc3MubGVuZ3Ro ID0gNDsKLSAgICAgICAgICAgICAgICBjaGFuLmluaXRpYXRvcl9hZGRyZXNzLnZhbHVlID0gJm15 Y3RsYWRkci5zaW5fYWRkci5zX2FkZHI7Ci0gICAgICAgICAgICAgICAgY2hhbi5hY2NlcHRvcl9h ZGRydHlwZSA9IEdTU19DX0FGX0lORVQ7IC8qIE9NX3VpbnQzMiAqLwotICAgICAgICAgICAgICAg IGNoYW4uYWNjZXB0b3JfYWRkcmVzcy5sZW5ndGggPSA0OwotICAgICAgICAgICAgICAgIGNoYW4u YWNjZXB0b3JfYWRkcmVzcy52YWx1ZSA9ICZoaXNjdGxhZGRyLnNpbl9hZGRyLnNfYWRkcjsKLSAg ICAgICAgICAgICAgICBjaGFuLmFwcGxpY2F0aW9uX2RhdGEubGVuZ3RoID0gMDsKLSAgICAgICAg ICAgICAgICBjaGFuLmFwcGxpY2F0aW9uX2RhdGEudmFsdWUgPSAwOwotCi0gICAgICAgICAgICAg ICAgaWYgKCFxdWlldCkKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiR1NTQVBJIGFjY2VwdGVk IGFzIGF1dGhlbnRpY2F0aW9uIHR5cGVcbiIpOwotCi0gICAgICAgICAgICAgICAgcmVhbG0gPSBj a19rcmI1X3JlYWxtb2Zob3N0KGZ0cF91c2VyX2hvc3QpOwotICAgICAgICAgICAgICAgIGlmIChy ZWFsbSkgewotICAgICAgICAgICAgICAgICAgICBja21ha21zZyh0Z3Qsc2l6ZW9mKHRndCksImty YnRndC8iLHJlYWxtLCJAIixyZWFsbSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs ImZ0cF9hdXRoKEdTU0FQSSkgVEdUIix0Z3QsMCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgg a3JiNV9hdXRvZ2V0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgISgoY2tfa3JiNV90a3Rf aXN2YWxpZChOVUxMLHRndCkgPiAwKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj a19rcmI1X2lzX3RndF92YWxpZCgpID4gMCkpICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNr X2tyYjVfYXV0b2dldF9UR1QocmVhbG0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg ICAgICAgIC8qIEJsb2IgZnJvbSBnc3MtY2xpZW50ICovCi0gICAgICAgICAgICAgICAgZm9yICh0 cmlhbCA9IDA7IHRyaWFsIDwgbl9nc3NfdHJpYWxzOyB0cmlhbCsrKSB7Ci0gICAgICAgICAgICAg ICAgICAgIC8qIGZ0cEBob3N0bmFtZSBmaXJzdCwgdGhlIGhvc3RAaG9zdG5hbWUgKi8KLSAgICAg ICAgICAgICAgICAgICAgLyogdGhlIFY1IEdTU0FQSSBiaW5kaW5nIGNhbm9uaWNhbGl6ZXMgdGhp cyBmb3IgdXMuLi4gKi8KLSAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coc3RidWYsRlRQX0JV RlNJWiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX3RyaWFsc1t0cmlhbF0uc2Vy dmljZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQCIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZ0cF91c2VyX2hvc3QsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKGZ0cF9kZWIpCi0gICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXV0aGVudGljYXRpbmcgdG8gPCVz Pi4uLlxuIiwgc3RidWYpOwotICAgICAgICAgICAgICAgICAgICBzZW5kX3Rvay52YWx1ZSA9IHN0 YnVmOwotICAgICAgICAgICAgICAgICAgICBzZW5kX3Rvay5sZW5ndGggPSBzdHJsZW4oc3RidWYp OwotICAgICAgICAgICAgICAgICAgICBtYWpfc3RhdCA9IGdzc19pbXBvcnRfbmFtZSgmbWluX3N0 YXQsICZzZW5kX3RvaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3NzX250X3NlcnZpY2VfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnRhcmdldF9uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYWpfc3Rh dCAhPSBHU1NfU19DT01QTEVURSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9nc3Nf ZXJyb3IobWFqX3N0YXQsIG1pbl9zdGF0LCAicGFyc2luZyBuYW1lIik7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBzZWN1cmVfZXJyb3IoIm5hbWUgcGFyc2VkIDwlcz5cbiIsIHN0YnVmKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgIHRva2VuX3B0ciA9IEdTU19DX05PX0JVRkZFUjsKLSAgICAgICAg ICAgICAgICAgICAgZ2NvbnRleHQgPSBHU1NfQ19OT19DT05URVhUOyAvKiBzdHJ1Y3R1cmUgY29w eSAqLwotCi0gICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IGlmIChmdHBfZGViKQotICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg ImNhbGxpbmcgZ3NzX2luaXRfc2VjX2NvbnRleHRcbiIpOwotICAgICAgICAgICAgICAgICAgICAg ICAgbWFqX3N0YXQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfaW5pdF9zZWNfY29u dGV4dCgmbWluX3N0YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdTU19DX05PX0NSRURFTlRJQUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZnY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChnc3NfT0lEKSAqCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX3RyaWFsc1t0cmlhbF0ubWVjaF90eXBl LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19N VVRVQUxfRkxBRyB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdTU19DX1JFUExBWV9GTEFHIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGZ0cF9jZncgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR1NTX0NfREVMRUdfRkxBRyA6IDApLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hhbm5lbCBiaW5kaW5ncyAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtyYjVfZF9ub19hZGRy ZXNzZXMgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHU1NfQ19OT19DSEFOTkVMX0JJTkRJTkdTIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmNoYW4pLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5fcHRyLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAvKiBpZ25vcmUgbWVjaCB0eXBlICov Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZW5kX3Rv aywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwg ICAgLyogaWdub3JlIHJldF9mbGFncyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7ICAgICAgIC8qIGlnbm9yZSB0aW1lX3JlYyAqLwotCi0gICAgICAgICAg ICAgICAgICAgICAgICBpZiAobWFqX3N0YXQgIT0gR1NTX1NfQ09NUExFVEUgJiYKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtYWpfc3RhdCAhPSBHU1NfU19DT05USU5VRV9ORUVERUQpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJpYWwgPT0gbl9nc3NfdHJpYWxzLTEp Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2dzc19lcnJvcihtYWpfc3RhdCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9zdGF0LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWxpemlu ZyBjb250ZXh0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfcmVsZWFzZV9uYW1lKCZtaW5fc3Rh dCwgJnRhcmdldF9uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXliZSB3 ZSBtaXNzZWQgb24gdGhlIHNlcnZpY2UgbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gb3V0ZXJfbG9vcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChzZW5kX3Rvay5sZW5ndGggIT0gMCkgewotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVw bHlfcGFyc2UgPSAiQURBVD0iOyAvKiBmb3IgZnRwY21kKCkgbGF0ZXIgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsZW4gPSBGVFBfQlVGU0laOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGtlcnJvciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpeF9lbmNv ZGUoc2VuZF90b2sudmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb3V0X2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzZW5kX3Rvay5sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS QURJWF9FTkNPREUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXJyb3IpICB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJCYXNlIDY0IGVuY29kaW5nIGZhaWxlZDogJXNcbiIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXhfZXJyb3Ioa2Vycm9y KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZ3NzX2NvbXBsZXRlX2xvb3A7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWNvZGUg PSBmdHBjbWQoIkFEQVQiLG91dF9idWYsLTEsLTEsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGNvbWNvZGUgIT0gUkVQTFlfQ09NUExFVEUKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgY29tY29kZSAhPSBSRVBMWV9DT05USU5VRSAvKiAoMzM1KSAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHRyaWFsID09IG5fZ3NzX3RyaWFscy0xKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkdTU0FQSSBBREFUIGZhaWxlZFxu Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3JjZSBvdXQgb2Yg bG9vcCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFqX3N0YXQgPSBH U1NfU19GQUlMVVJFOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQmFja29mZiB0byB0aGUgdjEgZ3NzYXBpIGlzIHN0aWxsIHBvc3NpYmxlLgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQgYSBuZXcgQVVUSCBjb21tYW5kLiAgSWYg dGhhdCBmYWlscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGUg dGhlIGxvb3AuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChmdHBjbWQoIkFVVEggR1NTQVBJIixOVUxMLDAsMCxm dHBfdmJtKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gUkVQTFlfQ09O VElOVUUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR1NTQVBJIEFEQVQgZmFpbGVk LCBBVVRIIHJlc3RhcnQgZmFpbGVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGZvcmNlIG91dCBvZiBsb29wICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYWpfc3RhdCA9IEdTU19TX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRl cl9sb29wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoIXJlcGx5X3BhcnNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5v IGF1dGhlbnRpY2F0aW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBzZXJ2ZXJcbiIpOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFqX3N0YXQgPT0gR1NTX1NfQ09NUExFVEUpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLi4uYnV0IG5vIG1vcmUg d2FzIG5lZWRlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGdzc19jb21wbGV0ZV9sb29wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9nc3NfZXJyb3Io bWFqX3N0YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtaW5fc3RhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJubyByZXBseSwgaHVoPyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIGdzc19jb21wbGV0ZV9sb29wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxlbiA9IEZUUF9CVUZTSVo7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg a2Vycm9yID0gcmFkaXhfZW5jb2RlKHJlcGx5X3BhcnNlLG91dF9idWYsaSwmbGVuLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQURJWF9ERUNPREUp OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXJyb3IpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIkJhc2UgNjQgZGVjb2RpbmcgZmFpbGVkOiAlc1xuIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpeF9lcnJvcihrZXJyb3Ip KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBnc3NfY29tcGxldGVfbG9v cDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBldmVyeXRoaW5nIHdvcmtlZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRva2VuX3B0ciA9ICZyZWN2X3RvazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZWN2X3Rvay52YWx1ZSA9IG91dF9idWY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVj dl90b2subGVuZ3RoID0gbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0IG91dCBvZiBsb29wIGNsZWFu ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19jb21wbGV0ZV9sb29wOgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRyaWFsID0gbl9nc3NfdHJpYWxzLTE7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5fc3RhdCwgJnNlbmRfdG9r KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfcmVsZWFzZV9uYW1lKCZtaW5fc3Rh dCwgJnRhcmdldF9uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dGVy X2xvb3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0g d2hpbGUgKG1hal9zdGF0ID09IEdTU19TX0NPTlRJTlVFX05FRURFRCk7Ci0KLSAgICAgICAgICAg ICAgICAgIG91dGVyX2xvb3A6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYWpfc3RhdCA9PSBH U1NfU19DT01QTEVURSkKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1hal9zdGF0ID09IEdTU19TX0NPTVBMRVRFKSB7 Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiR1NTQVBJIGF1dGhlbnRpY2F0aW9uIHN1Y2Nl ZWRlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5X3BhcnNlID0gTlVMTDsKLSAgICAg ICAgICAgICAgICAgICAgYXV0aF90eXBlID0gIkdTU0FQSSI7Ci0gICAgICAgICAgICAgICAgICAg IHJldHVybigxKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIkdTU0FQSSBhdXRoZW50aWNhdGlvbiBmYWlsZWRcbiIpOwotICAg ICAgICAgICAgICAgICAgICByZXBseV9wYXJzZSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoZnRwX2RlYikKLSAgICAg ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkdTU0FQSSByZWplY3RlZCBhcyBhbiBhdXRoZW50 aWNhdGlvbiB0eXBlXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoZnRwY29kZSA9PSA1MDAgfHwg ZnRwY29kZSA9PSA1MDIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KLSNpZmRlZiBGVFBfU1JQ Ci0gICAgICAgIGlmIChmdHBfYXV0aF90eXBlW2pdID09IEZUQV9TUlAgJiYgY2tfc3JwX2lzX2lu c3RhbGxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoc3JwX2Z0cF9hdXRoKGZ0cF91c2VyX2hvc3Qs TlVMTCxOVUxMKSkKLSAgICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICAgICAgZWxzZSBp ZiAoZnRwY29kZSA9PSA1MDAgfHwgZnRwY29kZSA9PSA1MDIpCi0gICAgICAgICAgICAgIHJldHVy bigwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9TUlAgKi8KLSNpZmRlZiBGVFBfS1JCNAot ICAgICAgICBpZiAoZnRwX2F1dGhfdHlwZVtqXSA9PSBGVEFfSzQgJiYgY2tfa3JiNF9pc19pbnN0 YWxsZWQoKSkgewotICAgICAgICAgICAgbiA9IGZ0cGNtZCgiQVVUSCBLRVJCRVJPU19WNCIsTlVM TCwwLDAsZnRwX3ZibSk7Ci0gICAgICAgICAgICBpZiAobiA9PSBSRVBMWV9DT05USU5VRSkgewot ICAgICAgICAgICAgICAgIGNoYXIgdGd0WzQqUkVBTE1fU1orMV07Ci0gICAgICAgICAgICAgICAg aW50IHJjOwotCi0gICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKLSAgICAgICAgICAgICAgICAg IHByaW50ZigiS0VSQkVST1NfVjQgYWNjZXB0ZWQgYXMgYXV0aGVudGljYXRpb24gdHlwZVxuIik7 Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KGluc3QsIChjaGFyICopIGtyYl9nZXRfcGhvc3Qo ZnRwX3VzZXJfaG9zdCksSU5TVF9TWik7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZ0cF9y ZWFsbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilja19rcmI0X3JlYWxtb2Zo b3N0KGZ0cF91c2VyX2hvc3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMTV9TWgot ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0gICAgICAgICAgICAgICAgY2ttYWttc2co dGd0LHNpemVvZih0Z3QpLCJrcmJ0Z3QuIixmdHBfcmVhbG0sIkAiLGZ0cF9yZWFsbSk7Ci0gICAg ICAgICAgICAgICAgcmMgPSBja19rcmI0X3RrdF9pc3ZhbGlkKHRndCk7Ci0KLSAgICAgICAgICAg ICAgICBpZiAocmMgPD0gMCAmJiBrcmI0X2F1dG9nZXQpCi0gICAgICAgICAgICAgICAgICBja19r cmI0X2F1dG9nZXRfVEdUKGZ0cF9yZWFsbSk7Ci0KLSAgICAgICAgICAgICAgICBzZXJ2aWNlID0g ImZ0cCI7Ci0gICAgICAgICAgICAgICAga2Vycm9yID0ga3JiX21rX3JlcSgmZnRwX3RrdCxzZXJ2 aWNlLGluc3QsZnRwX3JlYWxtLGNoZWNrc3VtKTsKLSAgICAgICAgICAgICAgICBpZiAoa2Vycm9y ID09IEtEQ19QUl9VTktOT1dOKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlcnZpY2UgPSAicmNt ZCI7Ci0gICAgICAgICAgICAgICAgICAgIGtlcnJvciA9IGtyYl9ta19yZXEoJmZ0cF90a3QsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZ0cF9yZWFsbSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaGVja3N1bQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChrZXJy b3IpCi0gICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIktlcmJlcm9zIFY0IGtyYl9t a19yZXEgZmFpbGVkOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAga3JiX2dldF9l cnJfdGV4dChrZXJyb3IpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWtlcnJvcikgewotICAgICAg ICAgICAgICAgICAgICBrZXJyb3IgPSBrcmJfZ2V0X2NyZWQoc2VydmljZSwgaW5zdCwgZnRwX3Jl YWxtLCZmdHBfY3JlZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrZXJyb3IpCi0gICAgICAg ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJLZXJiZXJvcyBWNCBrcmJfZ2V0X2NyZWQg ZmFpbGVkOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyYl9nZXRfZXJy X3RleHQoa2Vycm9yKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgh a2Vycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByYzsKLSAgICAgICAgICAgICAgICAg ICAgcmMgPSBkZXNfa2V5X3NjaGVkKGZ0cF9jcmVkLnNlc3Npb24sIGZ0cF9zY2hlZCk7Ci0gICAg ICAgICAgICAgICAgICAgIGlmIChyYyA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIj9JbnZhbGlkIERFUyBrZXkgc3BlY2lmaWVkIGluIGNyZWRlbnRpYWxzXHJcbiIpOwot ICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHBfYXV0aCIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIERFUyBLZXkgc3BlY2lmaWVkIGluIGNyZWRlbnRp YWxzIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggcmMgPT0gLTIgKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9XZWFrIERFUyBrZXkgc3BlY2lmaWVkIGlu IGNyZWRlbnRpYWxzXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwi ZnRwX2F1dGgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYWsgREVTIEtleSBz cGVjaWZpZWQgaW4gY3JlZGVudGlhbHMiLDApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKCByYyAhPSAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/REVTIEtl eSBTY2hlZHVsZSBub3Qgc2V0IGJ5IGNyZWRlbnRpYWxzXHJcbiIpOwotICAgICAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjExMCwiZnRwX2F1dGgiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIkRFUyBLZXkgU2NoZWR1bGUgbm90IHNldCBieSBjcmVkZW50aWFscyIsMCk7Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmVwbHlfcGFyc2UgPSAiQURB VD0iOwotICAgICAgICAgICAgICAgICAgICBpID0gRlRQX0JVRlNJWjsKLSAgICAgICAgICAgICAg ICAgICAga2Vycm9yID0gcmFkaXhfZW5jb2RlKGZ0cF90a3QuZGF0LCBvdXRfYnVmLCBmdHBfdGt0 Lmxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpLCBS QURJWF9FTkNPREUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoa2Vycm9yKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhc2UgNjQgZW5jb2RpbmcgZmFpbGVk OiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXhfZXJyb3Ioa2Vy cm9yKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGtyYjRfZXJyOwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID4gRlRQX0JVRlNJWiAtIDYp Ci0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QURBVCBkYXRhIHRvbyBsb25nXG4iKTsK LSAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cGNtZCgiQURBVCIsb3V0X2J1ZiwtMSwtMSwwKSAh PQotICAgICAgICAgICAgICAgICAgICAgICAgUkVQTFlfQ09NUExFVEUpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiS2VyYmVyb3MgVjQgYXV0aGVudGljYXRpb24g ZmFpbGVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8ga3JiNF9lcnI7Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXBseV9wYXJzZSkg ewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJObyBhdXRoZW50aWNhdGlvbiBkYXRhIHJlY2VpdmVkIGZyb20gc2Vy dmVyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8ga3JiNF9lcnI7Ci0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaSA9IHNpemVvZihvdXRfYnVmKTsK LSAgICAgICAgICAgICAgICAgICAga2Vycm9yID0KLSAgICAgICAgICAgICAgICAgICAgICByYWRp eF9lbmNvZGUocmVwbHlfcGFyc2UsIG91dF9idWYsIDAsICZpLCBSQURJWF9ERUNPREUpOwotICAg ICAgICAgICAgICAgICAgICBpZiAoa2Vycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIkJhc2UgNjQgZGVjb2RpbmcgZmFpbGVkOiAlc1xuIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXhfZXJyb3Ioa2Vycm9yKSk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIGtyYjRfZXJyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgIGtlcnJvciA9IGtyYl9yZF9zYWZlKG91dF9idWYsIGksCi0jaWZkZWYg S1JCNTI0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9jcmVk LnNlc3Npb24sCi0jZWxzZSAvKiBLUkI1MjQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmZ0cF9jcmVkLnNlc3Npb24sCi0jZW5kaWYgLyogS1JCNTI0ICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoaXNjdGxhZGRyLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXljdGxhZGRyLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRwX21zZ19kYXRhCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAg IGlmIChrZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi S2VyYmVyb3MgVjQga3JiX3JkX3NhZmUgZmFpbGVkOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAga3JiX2dldF9lcnJfdGV4dChrZXJyb3IpKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8ga3JiNF9lcnI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg ICAgICAgICAgICAgICAvKiBmZXRjaCB0aGUgKG1vZGlmaWVkKSBjaGVja3N1bSAqLwotICAgICAg ICAgICAgICAgICAgICBtZW1jcHkoJmNrc3VtLCBmdHBfbXNnX2RhdGEuYXBwX2RhdGEsIHNpemVv Zihja3N1bSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobnRvaGwoY2tzdW0pID09IGNoZWNr c3VtICsgMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF92Ym0pCi0gICAgICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiS2VyYmVyb3MgVjQgYXV0aGVudGljYXRpb24gc3Vj Y2VlZGVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5X3BhcnNlID0gTlVMTDsK LSAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfdHlwZSA9ICJLRVJCRVJPU19WNCI7Ci0gICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz ZQotICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIktlcmJlcm9zIFY0IG11dHVhbCBhdXRoZW50aWNhdGlvbiBmYWlsZWRc biIpOwotICAgICAgICAgICAgICAgICAga3JiNF9lcnI6Ci0gICAgICAgICAgICAgICAgICAgIHJl cGx5X3BhcnNlID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgIGlmIChmdHBfZGViKQotCQkgIGZwcmludGYoc3RkZXJyLAotICAg ICAgICAgICAgICAgICAgICAgICJLRVJCRVJPU19WNCByZWplY3RlZCBhcyBhbiBhdXRoZW50aWNh dGlvbiB0eXBlXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoZnRwY29kZSA9PSA1MDAgfHwgZnRw Y29kZSA9PSA1MDIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9LUkI0ICovCi0jaWZkZWYgQ0tfU1NMCi0gICAg ICAgIGlmIChmdHBfYXV0aF90eXBlW2pdID09IEZUQV9UTFMgJiYgY2tfc3NsZWF5X2lzX2luc3Rh bGxlZCgpKSB7Ci0jaWZkZWYgRlRQSE9TVAotICAgICAgICAgICAgaWYgKCFob3N0Y21kKSB7Ci0g ICAgICAgICAgICAgICAgZnRwY21kKCJIT1NUIixmdHBfdXNlcl9ob3N0LDAsMCwwKTsKLSAgICAg ICAgICAgICAgICBob3N0Y21kID0gMTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBGVFBIT1NU ICovCi0gICAgICAgICAgICBuID0gZnRwY21kKCJBVVRIIFRMUyIsTlVMTCwwLDAsZnRwX3ZibSk7 Ci0gICAgICAgICAgICBpZiAobiAhPSBSRVBMWV9DT01QTEVURSkKLSAgICAgICAgICAgICAgbiA9 IGZ0cGNtZCgiQVVUSCBUTFMtUCIsTlVMTCwwLDAsZnRwX3ZibSk7Ci0gICAgICAgICAgICBpZiAo biA9PSBSRVBMWV9DT01QTEVURSkgewotICAgICAgICAgICAgICAgIGlmICghcXVpZXQpCi0gICAg ICAgICAgICAgICAgICBwcmludGYoIlRMUyBhY2NlcHRlZCBhcyBhdXRoZW50aWNhdGlvbiB0eXBl XG4iKTsKLQotICAgICAgICAgICAgICAgIGF1dGhfdHlwZSA9ICJUTFMiOwotICAgICAgICAgICAg ICAgIHNzbF9hdXRoKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNzbF9mdHBfYWN0aXZlX2ZsYWcg KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZ0cF9kcGwgPSBGUExfQ0xSOwotICAgICAgICAgICAg ICAgICAgICBmdHBfY3BsID0gRlBMX1BSVjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDEp OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCJUTFMgYXV0aGVudGljYXRpb24gZmFpbGVkXG4iKTsKLSAgICAgICAgICAgICAgICAg ICAgYXV0aF90eXBlID0gTlVMTDsKLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICAgICAgICAgICAg ICBzb2NrZXRfY2xvc2UoY3NvY2tldCk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVT RV9TSFVURE9XTgotICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bihjc29ja2V0LCAxKzEpOwot I2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLwotICAgICAgICAgICAgICAgICAgICBjbG9zZShjc29j a2V0KTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgICAgICAgICBjc29ja2V0 ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmdHBfaG9va3VwKGZ0cF91c2VyX2hvc3Qs ZnRwX3BvcnQsMCkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp ZiAoZnRwX2RlYikKLQkJICBmcHJpbnRmKHN0ZGVyciwiVExTIHJlamVjdGVkIGFzIGFuIGF1dGhl bnRpY2F0aW9uIHR5cGVcbiIpOwotICAgICAgICAgICAgICAgIGlmIChmdHBjb2RlID09IDUwMCB8 fCBmdHBjb2RlID09IDUwMikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChmdHBfYXV0aF90eXBlW2pdID09IEZUQV9T U0wgJiYgY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpKSB7Ci0jaWZkZWYgRlRQSE9TVAotICAgICAg ICAgICAgaWYgKCFob3N0Y21kKSB7Ci0gICAgICAgICAgICAgICAgZnRwY21kKCJIT1NUIixmdHBf dXNlcl9ob3N0LDAsMCwwKTsKLSAgICAgICAgICAgICAgICBob3N0Y21kID0gMTsKLSAgICAgICAg ICAgIH0KLSNlbmRpZiAvKiBGVFBIT1NUICovCi0gICAgICAgICAgICBuID0gZnRwY21kKCJBVVRI IFNTTCIsTlVMTCwwLDAsZnRwX3ZibSk7Ci0gICAgICAgICAgICBpZiAobiA9PSBSRVBMWV9DT05U SU5VRSB8fCBuID09IFJFUExZX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFxdWll dCkKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiU1NMIGFjY2VwdGVkIGFzIGF1dGhlbnRpY2F0 aW9uIHR5cGVcbiIpOwotICAgICAgICAgICAgICAgIGF1dGhfdHlwZSA9ICJTU0wiOwotICAgICAg ICAgICAgICAgIHNzbF9hdXRoKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNzbF9mdHBfYWN0aXZl X2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgZnRwX2RwbCA9IEZQTF9QUlY7Ci0gICAgICAg ICAgICAgICAgICAgIGZ0cF9jcGwgPSBGUExfUFJWOwotICAgICAgICAgICAgICAgICAgICBzZXRw cm90YnVmKDE8PDIwKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJTU0wg YXV0aGVudGljYXRpb24gZmFpbGVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0aF90eXBl ID0gTlVMTDsKLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICAgICAgICAgICAgICBzb2NrZXRfY2xv c2UoY3NvY2tldCk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVTRV9TSFVURE9XTgot ICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bihjc29ja2V0LCAxKzEpOwotI2VuZGlmIC8qIFVT RV9TSFVURE9XTiAqLwotICAgICAgICAgICAgICAgICAgICBjbG9zZShjc29ja2V0KTsKLSNlbmRp ZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgICAgICAgICBjc29ja2V0ID0gLTE7Ci0gICAg ICAgICAgICAgICAgICAgIGlmIChmdHBfaG9va3VwKGZ0cF91c2VyX2hvc3QsZnRwX3BvcnQsMCkg PT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICAg ICAgfQotCSAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChmdHBfZGViKQotCQkgIGZw cmludGYoc3RkZXJyLCAiU1NMIHJlamVjdGVkIGFzIGFuIGF1dGhlbnRpY2F0aW9uIHR5cGVcbiIp OwotICAgICAgICAgICAgICAgIGlmIChmdHBjb2RlID09IDUwMCB8fCBmdHBjb2RlID09IDUwMikK LQkJICByZXR1cm4oMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19T U0wgKi8KLSAgICAgICAgLyogT3RoZXIgYXV0aCB0eXBlcyBnbyBoZXJlIC4uLiAqLwotICAgIH0g LyogZm9yIChqOzspICovCi0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIEZUUF9TRUNVUklU WSAqLwotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXNldHByb3RidWYodW5zaWduZWQg aW50IHNpemUpCi0jZWxzZQotc2V0cHJvdGJ1ZihzaXplKSB1bnNpZ25lZCBpbnQgc2l6ZTsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogc2V0cHJvdGJ1ZiAqLyB7Ci0gICAgaWYgKHVjYnVmKQot ICAgICAgZnJlZSh1Y2J1Zik7Ci0gICAgdWNidWYgPSBOVUxMOwotICAgIHVjYnVmc2l6ID0gMDsK LSAgICBhY3R1YWxidWYgPSBzaXplOwotICAgIHdoaWxlICgodWNidWYgPSAoQ0hBUiAqKW1hbGxv YyhhY3R1YWxidWYpKSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChhY3R1YWxidWYpCi0gICAgICAg ICAgYWN0dWFsYnVmIC89IDI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4oMCk7Ci0g ICAgfQotICAgIHVjYnVmc2l6ID0gYWN0dWFsYnVmIC0gRlVER0VfRkFDVE9SOwotICAgIGRlYnVn KEYxMDEsInNldHByb3RidWYgdWNidWZzaXoiLCIiLHVjYnVmc2l6KTsKLSAgICBpZiAodWNidWZz aXogPCAxMjgpIHsKLSAgICAgICAgcHJpbnRmKCJXQVJOSU5HOiB0aW55IHVjYnVmc2l6OiAlZFxu Iix1Y2J1ZnNpeik7Ci0gICAgfSBlbHNlIGlmICh1Y2J1ZnNpeiA8IDApIHsKLSAgICAgICAgcHJp bnRmKCJFUlJPUjogdWNidWYgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKLSAgICAgICAgcmV0dXJu KC0xKTsKLSAgICB9Ci0gICAgbWF4YnVmID0gYWN0dWFsYnVmOwotICAgIHJldHVybigxKTsKLX0K LQotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1zZXRwYnN6KHVuc2lnbmVkIGludCBzaXpl KQotI2Vsc2UKLXNldHBic3ooc2l6ZSkgdW5zaWduZWQgaW50IHNpemU7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLS8qIHNldHBic3ogKi8gewotICAgIGlmICghc2V0cHJvdGJ1ZihzaXplKSkgewot ICAgICAgICBwZXJyb3IoIj9FcnJvciB3aGlsZSB0cnlpbmcgdG8gbWFsbG9jIFBST1QgYnVmZmVy OiIpOwotI2lmZGVmIEZUUF9TUlAKLSAgICAgICAgc3JwX3Jlc2V0KCk7Ci0jZW5kaWYgLyogRlRQ X1NSUCAqLwotICAgICAgICBmdHBjbG9zZSgpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0K LSAgICByZXBseV9wYXJzZSA9ICJQQlNaPSI7Ci0gICAgY2ttYWttc2coZnRwY21kYnVmLEZUUF9C VUZTSVosIlBCU1ogIiwKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICBzc2xfZnRwX2FjdGl2 ZV9mbGFnID8gIjAiIDoKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICBja3VpdG9h KGFjdHVhbGJ1ZiksTlVMTCxOVUxMKTsKLSAgICBpZiAoZnRwY21kKGZ0cGNtZGJ1ZixOVUxMLDAs MCwwKSAhPSBSRVBMWV9DT01QTEVURSkgewotICAgICAgICBpZiAoY29ubmVjdGVkKSB7Ci0gICAg ICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbmVnb3RpYXRlIFBST1QgYnVmZmVyIHNpemUgd2l0 aCBGVFAgc2VydmVyXG4iKTsKLSAgICAgICAgICAgIGZ0cGNsb3NlKCk7Ci0gICAgICAgIH0KLSAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgaWYgKHJlcGx5X3BhcnNlKSB7Ci0gICAgICAg IGlmICgobWF4YnVmID0gKHVuc2lnbmVkIGludCkgYXRvbChyZXBseV9wYXJzZSkpID4gYWN0dWFs YnVmKQotICAgICAgICAgIG1heGJ1ZiA9IGFjdHVhbGJ1ZjsKLSAgICB9IGVsc2UKLSAgICAgIG1h eGJ1ZiA9IGFjdHVhbGJ1ZjsKLSAgICB1Y2J1ZnNpeiA9IG1heGJ1ZiAtIEZVREdFX0ZBQ1RPUjsK LSAgICBkZWJ1ZyhGMTAxLCJzZXRwYnN6IHVjYnVmc2l6IiwiIix1Y2J1ZnNpeik7ICAgIAotICAg IHJlcGx5X3BhcnNlID0gTlVMTDsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLXN0YXRpYyBWT0lECi1j YW5jZWxfcmVtb3RlKGRpbikgaW50IGRpbjsgewotICAgIENIQVIgYnVmW0ZUUF9CVUZTSVpdOwot ICAgIGludCB4LCBuZm5kOwotI2lmZGVmIEJTRFNFTEVDVAotICAgIGZkX3NldCBtYXNrOwotI2Vu ZGlmIC8qIEJTRFNFTEVDVCAqLwotI2lmZGVmIElCTVNFTEVDVAotICAgIGludCBmZHNbMl0sIGZk Y250ID0gMDsKLSNlbmRpZiAvKiBJQk1TRUxFQ1QgKi8KLSNpZmRlZiBERUJVRwotICAgIGV4dGVy biBpbnQgZGVidGltOwotICAgIGludCB4ZGVidGltOwotICAgIHhkZWJ0aW0gPSBkZWJ0aW07Ci0g ICAgZGVidGltID0gMTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIGRlYnVnKEYxMDAsImZ0cCBj YW5jZWxfcmVtb3RlIGVudHJ5IiwiIiwwKTsKLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoc3NsX2Z0 cF9hY3RpdmVfZmxhZykgewotICAgICAgICAvKgotICAgICAgICAgKiBTZW5kIFRlbG5ldCBJUCwg VGVsbmV0IERNIGJ1dCBkbyBzbyBpbmxpbmUgYW5kIHdpdGhpbiB0aGUKLSAgICAgICAgICogVExT IGNoYW5uZWwKLSAgICAgICAgICovCi0gICAgICAgIGludCBjb3VudCwgZXJyb3I7Ci0KLSAgICAg ICAgYnVmWzBdID0gSUFDOwotICAgICAgICBidWZbMV0gPSBUTl9JUDsKLSAgICAgICAgYnVmWzJd ID0gSUFDOwotICAgICAgICBidWZbM10gPSBUTl9ETTsKLSAgICAgICAgYnVmWzRdID0gTlVMOwot Ci0gICAgICAgIGNvdW50ID0gU1NMX3dyaXRlKHNzbF9mdHBfY29uLCBidWYsIDQpOwotICAgICAg ICBkZWJ1ZyhGMTExLCJmdHAgY2FuY2VsX3JlbW90ZSIsIlNTTF93cml0ZShJQUMgSVAgSUFDIERN KSIsY291bnQpOwotICAgICAgICBlcnJvciA9IFNTTF9nZXRfZXJyb3Ioc3NsX2Z0cF9jb24sY291 bnQpOwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgY2FuY2VsX3JlbW90ZSIsIlNTTF9nZXRfZXJy b3IoKSIsZXJyb3IpOwotICAgICAgICBzd2l0Y2ggKGVycm9yKSB7Ci0gICAgICAgICAgY2FzZSBT U0xfRVJST1JfTk9ORToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgU1NMX0VS Uk9SX1dBTlRfV1JJVEU6Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAg ICAgICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgIHsK LSAgICAgICAgICAgICAgICBpbnQgZ2xlID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgICAgICAgICB9 Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9P S1VQOgotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKLSAgICAgICAgICBjYXNlIFNTTF9F UlJPUl9aRVJPX1JFVFVSTjoKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbG9zdHBl ZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZQotI2VuZGlm IC8qIENLX1NTTCAqLwotICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogc2VuZCBJQUMgaW4g dXJnZW50IG1vZGUgaW5zdGVhZCBvZiBETSBiZWNhdXNlIDQuM0JTRCBwbGFjZXMgb29iIG1hcmsK LSAgICAgICAgICogYWZ0ZXIgdXJnZW50IGJ5dGUgcmF0aGVyIHRoYW4gYmVmb3JlIGFzIGlzIHBy b3RvY29sIG5vdy4KLSAgICAgICAgICovCi0gICAgICAgIGJ1ZlswXSA9IElBQzsKLSAgICAgICAg YnVmWzFdID0gVE5fSVA7Ci0gICAgICAgIGJ1ZlsyXSA9IElBQzsKLSAgICAgICAgYnVmWzNdID0g TlVMOwotICAgICAgICBpZiAoKHggPSBzZW5kKGNzb2NrZXQsIChTRU5EQVJHMlRZUEUpYnVmLCAz LCBNU0dfT09CKSkgIT0gMykKLSAgICAgICAgICBwZXJyb3IoImNhbmNlbCIpOwotICAgICAgICBk ZWJ1ZyhGMTAxLCJmdHAgY2FuY2VsX3JlbW90ZSBzZW5kIDEiLCIiLHgpOwotICAgICAgICBidWZb MF0gPSBUTl9ETTsKLSAgICAgICAgeCA9IHNlbmQoY3NvY2tldCwoU0VOREFSRzJUWVBFKWJ1Ziwx LDApOwotICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgY2FuY2VsX3JlbW90ZSBzZW5kIDIiLCIiLHgp OwotICAgIH0KLSAgICB4ID0gc2NvbW1hbmQoIkFCT1IiKTsKLSAgICBkZWJ1ZyhGMTAxLCJmdHAg Y2FuY2VsX3JlbW90ZSBzY29tbWFuZCIsIiIseCk7Ci0jaWZkZWYgQlNEU0VMRUNUCi0gICAgRkRf WkVSTygmbWFzayk7Ci0gICAgRkRfU0VUKGNzb2NrZXQsICZtYXNrKTsKLSAgICBpZiAoZGluKSB7 Ci0gICAgICAgIEZEX1NFVChkaW4sICZtYXNrKTsKLSAgICB9Ci0gICAgbmZuZCA9IGVtcHR5KCZt YXNrLCAxMCk7Ci0gICAgZGVidWcoRjEwMSwiZnRwIGNhbmNlbF9yZW1vdGUgZW1wdHkiLCIiLG5m bmQpOwotICAgIGlmICgobmZuZCkgPD0gMCkgewotICAgICAgICBpZiAobmZuZCA8IDApIHsKLSAg ICAgICAgICAgIHBlcnJvcigiY2FuY2VsIik7Ci0gICAgICAgIH0KLSNpZmRlZiBGVFBfUFJPWFkK LSAgICAgICAgaWYgKHB0YWJmbGcpCi0gICAgICAgICAgZnRwY29kZSA9IC0xOwotI2VuZGlmIC8q IEZUUF9QUk9YWSAqLwotICAgICAgICBsb3N0cGVlcigpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEw LCJmdHAgY2FuY2VsX3JlbW90ZSIsIkQiLDApOwotICAgIGlmIChkaW4gJiYgRkRfSVNTRVQoZGlu LCAmbWFzaykpIHsKLSAgICAgICAgLyogU2VjdXJpdHk6IE5vIHRocmVhdCBhc3NvY2lhdGVkIHdp dGggdGhpcyByZWFkLiAqLwotICAgICAgICAvKiBCdXQgeW91IGNhbid0IHNpbXBseSByZWFkIHRo ZSBUTFMgZGF0YSBzdHJlYW0gICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIGlmIChzc2xfZnRw X2RhdGFfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgICAgIGludCBjb3VudCwgZXJyb3I7Ci0gICAg ICAgICAgICB3aGlsZSAoKGNvdW50ID0gU1NMX3JlYWQoc3NsX2Z0cF9kYXRhX2NvbiwgYnVmLCBG VFBfQlVGU0laKSkgPiAwKQotICAgICAgICAgICAgICAgICAgICAvKiBMT09QICovIDsKLSAgICAg ICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdo aWxlIChyZWN2KGRpbiwgKFNFTkRBUkcyVFlQRSlidWYsIEZUUF9CVUZTSVosMCkgPiAwKQotICAg ICAgICAgICAgICAgIC8qIExPT1AgKi8gOwotICAgICAgICB9Ci0gICAgfQotICAgIGRlYnVnKEYx MTAsImZ0cCBjYW5jZWxfcmVtb3RlIiwiRSIsMCk7Ci0jZWxzZSAvKiBCU0RTRUxFQ1QgKi8KLSNp ZmRlZiBJQk1TRUxFQ1QKLSAgICBmZHNbMF0gPSBjc29ja2V0OwotICAgIGZkY250Kys7Ci0gICAg aWYgKGRpbikgewotICAgICAgICBmZHNbMV0gPSBkaW47Ci0gICAgICAgIGZkY250Kys7Ci0gICAg fQotICAgIG5mbmQgPSBlbXB0eShmZHMsIGZkY250LCAxMCk7Ci0gICAgZGVidWcoRjEwMSwiZnRw IGNhbmNlbF9yZW1vdGUgZW1wdHkiLCIiLG5mbmQpOwotICAgIGlmICgobmZuZCkgPD0gMCkgewot ICAgICAgICBpZiAobmZuZCA8IDApIHsKLSAgICAgICAgICAgIHBlcnJvcigiY2FuY2VsIik7Ci0g ICAgICAgIH0KLSNpZmRlZiBGVFBfUFJPWFkKLSAgICAgICAgaWYgKHB0YWJmbGcpCi0gICAgICAg ICAgZnRwY29kZSA9IC0xOwotI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwotICAgICAgICBsb3N0cGVl cigpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJmdHAgY2FuY2VsX3JlbW90ZSIsIkQiLDApOwot ICAgIGlmIChkaW4gJiYgc2VsZWN0KCZkaW4sIDEsMCwwLDEpICkgewotI2lmZGVmIENLX1NTTAot ICAgICAgICBpZiAoc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnKSB7Ci0gICAgICAgICAgICBpbnQg Y291bnQsIGVycm9yOwotICAgICAgICAgICAgd2hpbGUgKChjb3VudCA9IFNTTF9yZWFkKHNzbF9m dHBfZGF0YV9jb24sIGJ1ZiwgRlRQX0JVRlNJWikpID4gMCkKLSAgICAgICAgICAgICAgICAgICAg LyogTE9PUCAqLyA7Ci0gICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAg ICB7Ci0gICAgICAgICAgICB3aGlsZSAocmVjdihkaW4sIChTRU5EQVJHMlRZUEUpYnVmLCBGVFBf QlVGU0laLDApID4gMCkKLSAgICAgICAgICAgICAgICAvKiBMT09QICovIDsKLSAgICAgICAgfQot ICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJmdHAgY2FuY2VsX3JlbW90ZSIsIkUiLDApOwotI2Vsc2Ug LyogSUJNU0VMRUNUICovCi0gICAgU29tZSBmb3JtIG9mIHNlbGVjdCBpcyByZXF1aXJlZC4KLSNl bmRpZiAvKiBJQk1TRUxFQ1QgKi8KLSNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KLSAgICBpZiAoZ2V0 cmVwbHkoMCwtMSwtMSxmdHBfdmJtLDApID09IFJFUExZX0VSUk9SICYmIGZ0cGNvZGUgPT0gNTUy KSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsImZ0cCBjYW5jZWxfcmVtb3RlIiwiRiIsMCk7Ci0gICAg ICAgIC8qIDU1MiBuZWVkZWQgZm9yIE5JQyBzdHlsZSBjYW5jZWwgKi8KLSAgICAgICAgZ2V0cmVw bHkoMCwtMSwtMSxmdHBfdmJtLDApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgY2FuY2VsX3Jl bW90ZSIsIkciLDApOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJmdHAgY2FuY2VsX3JlbW90ZSIs IkgiLDApOwotICAgIGdldHJlcGx5KDAsLTEsLTEsZnRwX3ZibSwwKTsKLSAgICBkZWJ1ZyhGMTEw LCJmdHAgY2FuY2VsX3JlbW90ZSIsIkkiLDApOwotI2lmZGVmIERFQlVHCi0gICAgZGVidGltID0g eGRlYnRpbTsKLSNlbmRpZiAvKiBERUJVRyAqLwotfQotCi1zdGF0aWMgaW50Ci1mdHNfZHBsKHgp IGludCB4OyB7Ci0gICAgaWYgKCFhdXRoX3R5cGUKLSNpZmRlZiBPUzIKLSAgICAgICAgIHx8ICFj a19jcnlwdF9pc19pbnN0YWxsZWQoKQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgKSB7Ci0g ICAgICAgIHN3aXRjaCAoIHggKSB7Ci0gICAgICAgICAgY2FzZSBGUExfUFJWOgotICAgICAgICAg ICAgcHJpbnRmKCI/Q2Fubm90IHNldCBwcm90ZWN0aW9uIGxldmVsIHRvIFBSSVZBVEVcbiIpOwot ICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAgIGNhc2UgRlBMX1NBRjoKLSAgICAgICAg ICAgIHByaW50ZigiP0Nhbm5vdCBzZXQgcHJvdGVjdGlvbiBsZXZlbCB0byBTQUZFXG4iKTsKLSAg ICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotICAgICAgICBmdHBfZHBsID0geDsKLSAg ICAgICAgcmV0dXJuKDEpOwotICAgIH0KLQotI2lmZGVmIENLX1NTTAotICAgIGlmICh4ID09IEZQ TF9TQUYgJiYKLSAgICAgICAgKCFzdHJjbXAoYXV0aF90eXBlLCJTU0wiKSB8fCAhc3RyY21wKGF1 dGhfdHlwZSwiVExTIikpKSB7Ci0gICAgICAgIHByaW50ZigiQ2Fubm90IHNldCBwcm90ZWN0aW9u IGxldmVsIHRvIHNhZmVcbiIpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8q IENLX1NTTCAqLwotICAgIC8qIFN0YXJ0IHdpdGggYSBQQlNaIG9mIDEgbWVnICovCi0gICAgaWYg KHggIT0gRlBMX0NMUikgewotICAgICAgICBpZiAoc2V0cGJzeihERUZBVUxUX1BCU1opIDwgMCkK LSAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIHkgPSBmdHBjbWQoeCA9PSBGUExfQ0xS ID8gIlBST1QgQyIgOgotICAgICAgICAgICAgICAgKHggPT0gRlBMX1NBRiA/ICJQUk9UIFMiIDog IlBST1QgUCIpLCBOVUxMLCAwLCAwLGZ0cF92Ym0pOwotICAgIGlmICh5ID09IFJFUExZX0NPTVBM RVRFKSB7Ci0gICAgICAgIGZ0cF9kcGwgPSB4OwotICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQot ICAgIHJldHVybigwKTsKLX0KLQotc3RhdGljIGludAotZnRzX2NwbCh4KSBpbnQgeDsgewotICAg IGlmICghYXV0aF90eXBlIAotI2lmZGVmIE9TMgotICAgICAgICAgfHwgIWNrX2NyeXB0X2lzX2lu c3RhbGxlZCgpCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICApIHsKLSAgICAgICAgc3dpdGNo ICggeCApIHsKLSAgICAgICAgICBjYXNlIEZQTF9QUlY6Ci0gICAgICAgICAgICBwcmludGYoIj9D YW5ub3Qgc2V0IHByb3RlY3Rpb24gbGV2ZWwgdG8gUFJJVkFURVxuIik7Ci0gICAgICAgICAgICBy ZXR1cm4oMCk7Ci0gICAgICAgICAgY2FzZSBGUExfU0FGOgotICAgICAgICAgICAgcHJpbnRmKCI/ Q2Fubm90IHNldCBwcm90ZWN0aW9uIGxldmVsIHRvIFNBRkVcbiIpOwotICAgICAgICAgICAgcmV0 dXJuKDApOwotICAgICAgICB9Ci0gICAgICAgIGZ0cF9jcGwgPSB4OwotICAgICAgICByZXR1cm4o MSk7Ci0gICAgfQotICAgIGlmICh4ID09IEZQTF9DTFIpIHsKLSAgICAgICAgeSA9IGZ0cGNtZCgi Q0NDIixOVUxMLDAsMCxmdHBfdmJtKTsKLSAgICAgICAgaWYgKHkgPT0gUkVQTFlfQ09NUExFVEUp IHsKLSAgICAgICAgICAgIGZ0cF9jcGwgPSB4OwotICAgICAgICAgICAgcmV0dXJuKDEpOwotICAg ICAgICB9Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgZnRwX2NwbCA9IHg7Ci0gICAg cmV0dXJuKDEpOwotfQotCi0jaWZkZWYgRlRQX0dTU0FQSQotc3RhdGljIFZPSUQKLXVzZXJfZ3Nz X2Vycm9yKG1hal9zdGF0LCBtaW5fc3RhdCwgcykKLSAgICBPTV91aW50MzIgbWFqX3N0YXQsIG1p bl9zdGF0OwotICAgIGNoYXIgKnM7Ci17Ci0gICAgLyogYSBsb3Qgb2Ygd29yayBqdXN0IHRvIHJl cG9ydCB0aGUgZXJyb3IgKi8KLSAgICBPTV91aW50MzIgZ21hal9zdGF0LCBnbWluX3N0YXQsIG1z Z19jdHg7Ci0gICAgZ3NzX2J1ZmZlcl9kZXNjIG1zZzsKLSAgICBtc2dfY3R4ID0gMDsKLSAgICB3 aGlsZSAoIW1zZ19jdHgpIHsKLSAgICAgICAgZ21hal9zdGF0ID0gZ3NzX2Rpc3BsYXlfc3RhdHVz KCZnbWluX3N0YXQsIG1hal9zdGF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR1NTX0NfR1NTX0NPREUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHU1NfQ19OVUxMX09JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZtc2dfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1z ZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgaWYg KChnbWFqX3N0YXQgPT0gR1NTX1NfQ09NUExFVEUpfHwKLSAgICAgICAgICAgIChnbWFqX3N0YXQg PT0gR1NTX1NfQ09OVElOVUVfTkVFREVEKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ICJHU1NBUEkgZXJyb3IgbWFqb3I6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAoY2hhciop bXNnLnZhbHVlKTsKLSAgICAgICAgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmZ21pbl9zdGF0LCAm bXNnKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZ21hal9zdGF0ICE9IEdTU19TX0NPTlRJTlVF X05FRURFRCkKLSAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgbXNnX2N0eCA9IDA7Ci0gICAg d2hpbGUgKCFtc2dfY3R4KSB7Ci0gICAgICAgIGdtYWpfc3RhdCA9IGdzc19kaXNwbGF5X3N0YXR1 cygmZ21pbl9zdGF0LCBtaW5fc3RhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdTU19DX01FQ0hfQ09ERSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdTU19DX05VTExfT0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJm1zZ19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm bXNnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICBp ZiAoKGdtYWpfc3RhdCA9PSBHU1NfU19DT01QTEVURSl8fAotICAgICAgICAgICAgKGdtYWpfc3Rh dCA9PSBHU1NfU19DT05USU5VRV9ORUVERUQpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIkdTU0FQSSBlcnJvciBtaW5vcjogJXNcbiIsIChjaGFyKiltc2cudmFsdWUpOwotICAgICAg ICAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZnbWluX3N0YXQsICZtc2cpOwotICAgICAgICB9Ci0g ICAgICAgIGlmIChnbWFqX3N0YXQgIT0gR1NTX1NfQ09OVElOVUVfTkVFREVEKQotICAgICAgICAg IGJyZWFrOwotICAgIH0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIkdTU0FQSSBlcnJvcjogJXNcbiIs IHMpOwotfQotI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KLQotI2lmbmRlZiBOT01ISE9TVAotI2lm ZGVmIGRhdGFnZW5lcmFsCi0jZGVmaW5lIE5PTUhIT1NUCi0jZWxzZQotI2lmZGVmIEhQVVg1V0lO VENQCi0jZGVmaW5lIE5PTUhIT1NUCi0jZW5kaWYgLyogSFBVWDVXSU5UQ1AgKi8KLSNlbmRpZiAv KiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIE5PTUhIT1NUICovCi0KLSNpZmRlZiBJTkFERFJY Ci1zdGF0aWMgc3RydWN0IGluX2FkZHIgaW5hZGRyeDsKLSNlbmRpZiAvKiBJTkFERFJYICovCi0K LXN0YXRpYyBjaGFyICoKLWZ0cF9ob29rdXAoaG9zdCwgcG9ydCwgdGxzKSBjaGFyICogaG9zdDsg aW50IHBvcnQ7IGludCB0bHM7IHsKLSAgICByZWdpc3RlciBzdHJ1Y3QgaG9zdGVudCAqaHAgPSAw OwotI2lmZGVmIElQX1RPUwotI2lmZGVmIElQVE9TX1RIUk9VR0hQVVQKLSAgICBpbnQgdG9zOwot I2VuZGlmIC8qIElQVE9TX1RIUk9VR0hQVVQgKi8KLSNlbmRpZiAvKiBJUF9UT1MgKi8KLSAgICBp bnQgczsKLSAgICBHU09DS05BTUVfVCBsZW47Ci0gICAgc3RhdGljIGNoYXIgaG9zdG5hbWVidWZb TUFYSE9TVE5BTUVMRU5dOwotICAgIGNoYXIgaG9zdG5hbWVbTUFYSE9TVE5BTUVMRU5dIC8qICwg KnAsICpxICovIDsKLSAgICBpbnQgIGNwb3J0OwotI2lmZGVmIERFQlVHCi0gICAgZXh0ZXJuIGlu dCBkZWJ0aW07Ci0gICAgaW50IHhkZWJ0aW07Ci0gICAgeGRlYnRpbSA9IGRlYnRpbTsKLSAgICBk ZWJ0aW0gPSAxOwotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICBkZWJ1ZyhGMTExLCJmdHBfaG9v a3VwIixob3N0LHBvcnQpOwotCi0jaWZuZGVmIE5PSFRUUAotICAgIGlmICh0Y3BfaHR0cF9wcm94 eSkgewotICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqZGVzdHNwOwotICAgICAgICBjaGFyICpwLCAq cTsKLQotICAgICAgICBja21ha21zZyhwcm94eWhvc3QsSFRUUENQWUwsaG9zdCwiOiIsY2t1aXRv YShwb3J0KSxOVUxMKTsKLSAgICAgICAgZm9yIChwID0gdGNwX2h0dHBfcHJveHksIHEgPSBob3N0 bmFtZTsKLSAgICAgICAgICAgICAqcCAhPSAnXDAnICYmICpwICE9ICc6JzsKLSAgICAgICAgICAg ICBwKyssIHErKwotICAgICAgICAgICAgICkKLSAgICAgICAgICAqcSA9ICpwOwotICAgICAgICAq cSA9ICdcMCc7Ci0KLSAgICAgICAgaWYgKCpwID09ICc6JykKLSAgICAgICAgICBwKys7Ci0gICAg ICAgIGVsc2UKLSAgICAgICAgICBwID0gImh0dHAiOwotCi0gICAgICAgIGRlc3RzcCA9IGdldHNl cnZieW5hbWUocCwidGNwIik7Ci0gICAgICAgIGlmIChkZXN0c3ApCi0gICAgICAgICAgY3BvcnQg PSBudG9ocyhkZXN0c3AtPnNfcG9ydCk7Ci0gICAgICAgIGVsc2UgaWYgKHApIHsKLSAgICAgICAg ICBjcG9ydCA9IGF0b2kocCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIGNwb3J0ID0gODA7 Ci0gICAgfSBlbHNlCi0jZW5kaWYgLyogTk9IVFRQICovCi0gICAgewotICAgICAgICBja3N0cm5j cHkoaG9zdG5hbWUsaG9zdCxNQVhIT1NUTkFNRUxFTik7Ci0gICAgICAgIGNwb3J0ID0gcG9ydDsK LSAgICB9Ci0gICAgbWVtc2V0KChjaGFyICopJmhpc2N0bGFkZHIsIDAsIHNpemVvZiAoaGlzY3Rs YWRkcikpOwotICAgIGhpc2N0bGFkZHIuc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKGhvc3Qp OwotICAgIGlmIChoaXNjdGxhZGRyLnNpbl9hZGRyLnNfYWRkciAhPSBJTkFERFJfTk9ORSkgLyog MjAxMC0wMy0yOSAqLwotICAgIHsKLSAgICAgICAgZGVidWcoRjExMCwiZnRwIGhvb2t1cCBBIixo b3N0bmFtZSwwKTsKLSAgICAgICAgaGlzY3RsYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSAg ICAgICAgY2tzdHJuY3B5KGhvc3RuYW1lYnVmLCBob3N0bmFtZSwgTUFYSE9TVE5BTUVMRU4pOwot ICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsImZ0cCBob29rdXAgQiIsaG9zdG5hbWUs MCk7Ci0gICAgICAgIGhwID0gZ2V0aG9zdGJ5bmFtZShob3N0bmFtZSk7Ci0jaWZkZWYgSEFERFJM SVNUCi0gICAgICAgIGhwID0gY2tfY29weWhvc3RlbnQoaHApOyAgICAgICAgLyogbWFrZSBzYWZl IGNvcHkgdGhhdCB3b24ndCBjaGFuZ2UgKi8KLSNlbmRpZiAvKiBIQUREUkxJU1QgKi8KLSAgICAg ICAgaWYgKGhwID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZnRwOiAl czogVW5rbm93biBob3N0XG4iLCBob3N0KTsKLSAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKLSNp ZmRlZiBERUJVRwotICAgICAgICAgICAgZGVidGltID0geGRlYnRpbTsKLSNlbmRpZiAvKiBERUJV RyAqLwotICAgICAgICAgICAgcmV0dXJuKChjaGFyICopIDApOwotICAgICAgICB9Ci0gICAgICAg IGhpc2N0bGFkZHIuc2luX2ZhbWlseSA9IGhwLT5oX2FkZHJ0eXBlOwotI2lmZGVmIEhBRERSTElT VAotICAgICAgICBtZW1jcHkoKGNoYXIgKikmaGlzY3RsYWRkci5zaW5fYWRkciwgaHAtPmhfYWRk cl9saXN0WzBdLAotICAgICAgICAgICAgICAgc2l6ZW9mKGhpc2N0bGFkZHIuc2luX2FkZHIpKTsK LSNlbHNlIC8qIEhBRERSTElTVCAqLwotICAgICAgICBtZW1jcHkoKGNoYXIgKikmaGlzY3RsYWRk ci5zaW5fYWRkciwgaHAtPmhfYWRkciwKLSAgICAgICAgICAgICAgIHNpemVvZihoaXNjdGxhZGRy LnNpbl9hZGRyKSk7Ci0jZW5kaWYgLyogSEFERFJMSVNUICovCi0gICAgICAgIGNrc3RybmNweSho b3N0bmFtZWJ1ZiwgaHAtPmhfbmFtZSwgTUFYSE9TVE5BTUVMRU4pOwotICAgIH0KLSAgICBkZWJ1 ZyhGMTEwLCJmdHAgaG9va3VwIEMiLGhvc3RuYW1lYnVmLDApOwotICAgIGZ0cF9ob3N0ID0gaG9z dG5hbWVidWY7Ci0gICAgcyA9IHNvY2tldChoaXNjdGxhZGRyLnNpbl9mYW1pbHksIFNPQ0tfU1RS RUFNLCAwKTsKLSAgICBkZWJ1ZyhGMTAxLCJmdHAgaG9va3VwIHNvY2tldCIsIiIscyk7Ci0gICAg aWYgKHMgPCAwKSB7Ci0gICAgICAgIHBlcnJvcigiZnRwOiBzb2NrZXQiKTsKLSAgICAgICAgZnRw Y29kZSA9IC0xOwotI2lmZGVmIERFQlVHCi0gICAgICAgIGRlYnRpbSA9IHhkZWJ0aW07Ci0jZW5k aWYgLyogREVCVUcgKi8KLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBoaXNjdGxhZGRy LnNpbl9wb3J0ID0gaHRvbnMoY3BvcnQpOwotICAgIGVycm5vID0gMDsKLQotI2lmZGVmIENPTU1F TlQKLSAgcHJpbnRmKCJoaXNjdGxhZGRyPSVkXG4iLHNpemVvZihoaXNjdGxhZGRyKSk7Ci0gIHBy aW50ZigiaGlzY3RsYWRkci5zaW5fYWRkcj0lZFxuIixzaXplb2YoaGlzY3RsYWRkci5zaW5fYWRk cikpOwotICBwcmludGYoInNvY2thZGRyX2luPSVkXG4iLHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf aW4pKTsKLSAgcHJpbnRmKCJoaXNjdGxhZGRyLnNpbl9hZGRyLnNfYWRkcj0lZFxuIixzaXplb2Yo aGlzY3RsYWRkci5zaW5fYWRkci5zX2FkZHIpKTsKLSNlbmRpZgkvKiBDT01NRU5UICovCi0KLSNp ZmRlZiBIQUREUkxJU1QKLSAgICBkZWJ1ZyhGMTAwLCJmdHAgaG9va3VwIEhBRERSTElTVCIsIiIs MCk7Ci0gICAgd2hpbGUKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwiZnRwIGhvb2t1cCBubyBIQURE UkxJU1QiLCIiLDApOwotICAgIGlmCi0jZW5kaWYgLyogSEFERFJMSVNUICovCi0gICAgICAoY29u bmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopJmhpc2N0bGFkZHIsIHNpemVvZiAoaGlzY3RsYWRk cikpIDwgMCkgewotICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBob29rdXAgY29ubmVjdCBmYWls ZWQiLCIiLGVycm5vKTsKLSNpZmRlZiBIQUREUkxJU1QKLSAgICAgICAgICBpZiAoaHAgJiYgaHAt PmhfYWRkcl9saXN0WzFdKSB7Ci0gICAgICAgICAgICAgIGludCBvZXJybm8gPSBlcnJubzsKLQot ICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZ0cDogY29ubmVjdCB0byBhZGRyZXNzICVz OiAiLAotICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvYShoaXNjdGxhZGRyLnNpbl9hZGRy KSk7Ci0gICAgICAgICAgICAgIGVycm5vID0gb2Vycm5vOwotICAgICAgICAgICAgICBwZXJyb3Io KGNoYXIgKikgMCk7Ci0gICAgICAgICAgICAgIGhwLT5oX2FkZHJfbGlzdCsrOwotICAgICAgICAg ICAgICBtZW1jcHkoKGNoYXIgKikmaGlzY3RsYWRkci5zaW5fYWRkciwKLSAgICAgICAgICAgICAg ICAgICAgIGhwLT5oX2FkZHJfbGlzdFswXSwKLSAgICAgICAgICAgICAgICAgICAgIHNpemVvZiho aXNjdGxhZGRyLnNpbl9hZGRyKSk7Ci0gICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiVHJ5 aW5nICVzLi4uXG4iLAotICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvYShoaXNjdGxhZGRy LnNpbl9hZGRyKSk7Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgICAgICAgc29ja2V0X2Nsb3Nl KHMpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgICAgY2xvc2Uocyk7Ci0jZW5k aWYgLyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgICAgcyA9IHNvY2tldChoaXNjdGxhZGRyLnNp bl9mYW1pbHksIFNPQ0tfU1RSRUFNLCAwKTsKLSAgICAgICAgICAgICAgaWYgKHMgPCAwKSB7Ci0g ICAgICAgICAgICAgICAgICBwZXJyb3IoImZ0cDogc29ja2V0Iik7Ci0gICAgICAgICAgICAgICAg ICBmdHBjb2RlID0gLTE7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgICAgICAgIGRlYnRpbSA9 IHhkZWJ0aW07Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgICAgICAgICAgIHJldHVybigw KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9 Ci0jZW5kaWYgLyogSEFERFJMSVNUICovCi0gICAgICAgICAgcGVycm9yKCJmdHA6IGNvbm5lY3Qi KTsKLSAgICAgICAgICBmdHBjb2RlID0gLTE7Ci0gICAgICAgICAgZ290byBiYWQ7Ci0gICAgICB9 Ci0gICAgZGVidWcoRjEwMCwiZnRwIGhvb2t1cCBjb25uZWN0IG9rIiwiIiwwKTsKLQotICAgIGxl biA9IHNpemVvZiAobXljdGxhZGRyKTsKLSAgICBlcnJubyA9IDA7Ci0gICAgaWYgKGdldHNvY2tu YW1lKHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXljdGxhZGRyLCAmbGVuKSA8IDApIHsKLSAgICAg ICAgZGVidWcoRjEwMSwiZnRwIGhvb2t1cCBnZXRzb2NrbmFtZSBmYWlsZWQiLCIiLGVycm5vKTsK LSAgICAgICAgcGVycm9yKCJmdHA6IGdldHNvY2tuYW1lIik7Ci0gICAgICAgIGZ0cGNvZGUgPSAt MTsKLSAgICAgICAgZ290byBiYWQ7Ci0gICAgfQotICAgIGRlYnVnKEYxMDAsImZ0cCBob29rdXAg Z2V0c29ja25hbWUgb2siLCIiLDApOwotCi0jaWZuZGVmIE5PSFRUUAotICAgIGlmICh0Y3BfaHR0 cF9wcm94eSkgewotI2lmZGVmIE9TMgotICAgICAgICBjaGFyICogYWdlbnQgPSAiS2VybWl0IDk1 IjsgICAgIC8qIERlZmF1bHQgdXNlciBhZ2VudCAqLwotI2Vsc2UKLSAgICAgICAgY2hhciAqIGFn ZW50ID0gIkMtS2VybWl0IjsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgICAgICBpZiAoaHR0cF9j b25uZWN0KHMsYWdlbnQsTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9w cm94eV91c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X3B3ZCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHBy b3h5aG9zdAotICAgICAgICAgICAgICAgICAgICAgICAgICkgPCAwKSB7Ci0gICAgICAgICAgICBj aGFyICogZm9vID0gTlVMTDsKLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICAgICAgc29ja2V0X2Ns b3NlKHMpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgIGNsb3NlKHMpOwotI2Vu ZGlmIC8qIFRDUElQTElCICovCi0KLSAgICAgICAgICAgIHdoaWxlIChmb28gPT0gTlVMTCAmJiB0 Y3BfaHR0cF9wcm94eSAhPSBOVUxMICkgewotCi0gICAgICAgICAgICAgICAgaWYgKHRjcF9odHRw X3Byb3h5X2Vycm5vID09IDQwMSB8fAotICAgICAgICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJv eHlfZXJybm8gPT0gNDA3ICkgewotICAgICAgICAgICAgICAgICAgICBjaGFyIHVpZFtVSURCVUZM RU5dOwotICAgICAgICAgICAgICAgICAgICBjaGFyIHB3ZFtQV0RTSVpdOwotICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgdHh0Ym94IHRiWzJdOwotICAgICAgICAgICAgICAgICAgICBpbnQgb2s7 Ci0KLSAgICAgICAgICAgICAgICAgICAgdGJbMF0udF9idWYgPSB1aWQ7Ci0gICAgICAgICAgICAg ICAgICAgIHRiWzBdLnRfbGVuID0gVUlEQlVGTEVOOwotICAgICAgICAgICAgICAgICAgICB0Ylsw XS50X2xibCA9ICJQcm94eSBVc2VyaWQ6ICI7Ci0gICAgICAgICAgICAgICAgICAgIHRiWzBdLnRf ZGZsdCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIHRiWzBdLnRfZWNobyA9IDE7Ci0gICAg ICAgICAgICAgICAgICAgIHRiWzFdLnRfYnVmID0gcHdkOwotICAgICAgICAgICAgICAgICAgICB0 YlsxXS50X2xlbiA9IDI1NjsKLSAgICAgICAgICAgICAgICAgICAgdGJbMV0udF9sYmwgPSAiUHJv eHkgUGFzc3BocmFzZTogIjsKLSAgICAgICAgICAgICAgICAgICAgdGJbMV0udF9kZmx0ID0gTlVM TDsKLSAgICAgICAgICAgICAgICAgICAgdGJbMV0udF9lY2hvID0gMjsKLQotICAgICAgICAgICAg ICAgICAgICBvayA9IHVxX210eHQoIlByb3h5IFNlcnZlciBBdXRoZW50aWNhdGlvbiBSZXF1aXJl ZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAyLCB0Yik7Ci0K LSAgICAgICAgICAgICAgICAgICAgaWYgKG9rICYmIHVpZFswXSkgewotICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqIHByb3h5X3VzZXIsICogcHJveHlfcHdkOwotCi0gICAgICAgICAgICAg ICAgICAgICAgICBwcm94eV91c2VyID0gdGNwX2h0dHBfcHJveHlfdXNlcjsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHByb3h5X3B3ZCAgPSB0Y3BfaHR0cF9wcm94eV9wd2Q7Ci0KLSAgICAgICAg ICAgICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X3VzZXIgPSB1aWQ7Ci0gICAgICAgICAgICAg ICAgICAgICAgICB0Y3BfaHR0cF9wcm94eV9wd2QgPSBwd2Q7Ci0KLSAgICAgICAgICAgICAgICAg ICAgICAgIGZvbyA9IGZ0cF9ob29rdXAoaG9zdCwgcG9ydCwgMCk7Ci0KLSAgICAgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cF9ob29rdXAoKSIsZm9vLDApOwotICAgICAgICAgICAg ICAgICAgICAgICAgbWVtc2V0KHB3ZCwwLFBXRFNJWik7Ci0gICAgICAgICAgICAgICAgICAgICAg ICB0Y3BfaHR0cF9wcm94eV91c2VyID0gcHJveHlfdXNlcjsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHRjcF9odHRwX3Byb3h5X3B3ZCA9IHByb3h5X3B3ZDsKLSAgICAgICAgICAgICAgICAgICAg fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9 IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBpZiAoZm9vICE9IE5VTEwpCi0gICAgICAgICAgICAgIHJldHVybihmb28pOwotICAgICAg ICAgICAgcGVycm9yKCJmdHA6IGNvbm5lY3QiKTsKLSAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsK LSAgICAgICAgICAgIGdvdG8gYmFkOwotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNweShob3N0 bmFtZWJ1ZiwgcHJveHlob3N0LCBNQVhIT1NUTkFNRUxFTik7Ci0gICAgfQotI2VuZGlmIC8qIE5P SFRUUCAqLwotCi0gICAgY3NvY2tldCA9IHM7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAodGxz KSB7Ci0gICAgICAgIC8qIEZUUCBvdmVyIFNTTAotICAgICAgICAgKiBJZiB0aGUgY29ubmVjdGlv biBpcyBvdmVyIGFuIFNTTCBwcm94eSB0aGVuIHRoZQotICAgICAgICAgKiBhdXRoX3R5cGUgd2ls bCBiZSBOVUxMLiAgSG93ZXZlciwgSSdtIG5vdCBzdXJlCi0gICAgICAgICAqIHdoZXRoZXIgd2Ug c2hvdWxkIHByb3RlY3QgdGhlIGRhdGEgY2hhbm5lbCBpbgotICAgICAgICAgKiB0aGF0IGNhc2Ug b3Igbm90LgotICAgICAgICAgKi8KLQotICAgICAgICBkZWJ1ZyhGMTAwLCJmdHAgaG9va3VwIHVz ZV90bHMiLCIiLDApOwotICAgICAgICBpZiAoIXNzbF9hdXRoKCkpIHsKLSAgICAgICAgICAgIGRl YnVnKEYxMDAsImZ0cCBob29rdXAgc3NsX2F1dGggZmFpbGVkIiwiIiwwKTsKLSAgICAgICAgICAg IGF1dGhfdHlwZSA9IE5VTEw7Ci0gICAgICAgICAgICBmdHBjb2RlID0gLTE7Ci0gICAgICAgICAg ICBjc29ja2V0ID0gLTE7Ci0gICAgICAgICAgICBnb3RvIGJhZDsKLSAgICAgICAgfQotICAgICAg ICBzc2xfZnRwX3Byb3h5ID0gMTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSNpZmRl ZiBJUF9UT1MKLSNpZmRlZiBJUFRPU19MT1dERUxBWQotICAgIHRvcyA9IElQVE9TX0xPV0RFTEFZ OwotICAgIGlmIChzZXRzb2Nrb3B0KGNzb2NrZXQsIElQUFJPVE9fSVAsIElQX1RPUywgKGNoYXIg KikmdG9zLCBzaXplb2YoaW50KSkgPCAwKQotICAgICAgcGVycm9yKCJmdHA6IHNldHNvY2tvcHQg VE9TIChpZ25vcmVkKSIpOwotI2VuZGlmCi0jZW5kaWYKLSAgICBpZiAoIXF1aWV0KQotICAgICAg cHJpbnRmKCJDb25uZWN0ZWQgdG8gJXMuXG4iLCBob3N0KTsKLQotICAgIC8qIFJlYWQgZ3JlZXRp bmcgZnJvbSBzZXJ2ZXIgKi8KLSAgICBpZiAoZ2V0cmVwbHkoMCxmdHBfY3NsLGZ0cF9jc3IsZnRw X3ZibSwwKSA+IDIpIHsKLSAgICAgICAgZGVidWcoRjEwMCwiZnRwIGhvb2t1cCBiYWQgcmVwbHki LCIiLDApOwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgIHNvY2tldF9jbG9zZShjc29ja2V0KTsK LSNlbHNlIC8qIFRDUElQTElCICovCi0gICAgICAgIGNsb3NlKGNzb2NrZXQpOwotI2VuZGlmIC8q IFRDUElQTElCICovCi0gICAgICAgIGZ0cGNvZGUgPSAtMTsKLSAgICAgICAgZ290byBiYWQ7Ci0g ICAgfQotI2lmZGVmIFNPX09PQklOTElORQotICAgIHsKLSAgICAgICAgaW50IG9uID0gMTsKLSAg ICAgICAgZXJybm8gPSAwOwotICAgICAgICBpZiAoc2V0c29ja29wdChzLCBTT0xfU09DS0VULCBT T19PT0JJTkxJTkUsIChjaGFyICopJm9uLAotCQkgICAgICAgc2l6ZW9mKG9uKSkgPCAwKSB7Ci0g ICAgICAgICAgICBwZXJyb3IoImZ0cDogc2V0c29ja29wdCIpOwotICAgICAgICAgICAgZGVidWco RjEwMSwiZnRwIGhvb2t1cCBzZXRzb2Nrb3B0IGZhaWxlZCIsIiIsZXJybm8pOwotICAgICAgICB9 Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgZWxzZQotICAgICAgICAgIGRlYnVnKEYxMDAsImZ0cCBo b29rdXAgc2V0c29ja29wdCBvayIsIiIsMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICB9Ci0j ZW5kaWYgLyogU09fT09CSU5MSU5FICovCi0KLSNpZmRlZiBERUJVRwotICAgIGRlYnRpbSA9IHhk ZWJ0aW07Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByZXR1cm4oZnRwX2hvc3QpOwotCi0gIGJh ZDoKLSAgICBkZWJ1ZyhGMTAwLCJmdHAgaG9va3VwIGJhZCIsIiIsMCk7Ci0jaWZkZWYgVENQSVBM SUIKLSAgICBzb2NrZXRfY2xvc2Uocyk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAgIGNsb3Nl KHMpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ0aW0gPSB4 ZGVidGltOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgY3NvY2tldCA9IC0xOwotICAgIHJldHVy bigoY2hhciAqKTApOwotfQotCi1zdGF0aWMgVk9JRAotZnRwX2luaXQoKSB7Ci0gICAgaW50IGks IG47Ci0KLSAgICAvKiBUaGUgcHVycG9zZSBvZiB0aGUgaW5pdGlhbCBSRVNUIDAgaXMgbm90IGNs ZWFyLCBidXQgb3RoZXIgRlRQICovCi0gICAgLyogY2xpZW50cyBkbyBpdC4gIEluIGFueSBjYXNl LCBmYWlsdXJlIG9mIHRoaXMgY29tbWFuZCBpcyBub3QgYSAqLwotICAgIC8qIHJlbGlhYmxlIGlu ZGljYXRpb24gdGhhdCB0aGUgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgUmVzdGFydC4gKi8KLQot ICAgIG9rcmVzdGFydCA9IDA7Ci0gICAgaWYgKCFub2luaXQpIHsKLSAgICAgICAgbiA9IGZ0cGNt ZCgiUkVTVCAwIixOVUxMLDAsMCwwKTsKLSAgICAgICAgaWYgKG4gPT0gUkVQTFlfQ09NUExFVEUp Ci0gICAgICAgICAgb2tyZXN0YXJ0ID0gMTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIGVsc2Ug aWYgKGZ0cF9kZWIpCi0gICAgICAgICAgcHJpbnRmKCJXQVJOSU5HOiBVbmFibGUgdG8gcmVzdG9y ZSBmaWxlIHBvaW50ZXIuXG4iKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotICAgIG4g PSBmdHBjbWQoIlNZU1QiLE5VTEwsMCwwLDApOyAgICAgIC8qIEdldCBzZXJ2ZXIgc3lzdGVtIHR5 cGUgKi8KLSAgICBpZiAobiA9PSBSRVBMWV9DT01QTEVURSkgewotICAgICAgICByZWdpc3RlciBj aGFyICpjcCwgYyA9IE5VTDsKLSAgICAgICAgY3AgPSBja3N0cmNocihmdHBfcmVwbHlfc3RyKzQs JyAnKTsgLyogR2V0IGZpcnN0IHdvcmQgb2YgcmVwbHkgKi8KLSAgICAgICAgaWYgKGNwID09IE5V TEwpCi0gICAgICAgICAgY3AgPSBja3N0cmNocihmdHBfcmVwbHlfc3RyKzQsJ1xyJyk7Ci0gICAg ICAgIGlmIChjcCkgewotICAgICAgICAgICAgaWYgKGNwWy0xXSA9PSAnLicpCi0gICAgICAgICAg ICAgIGNwLS07Ci0gICAgICAgICAgICBjID0gKmNwOyAgICAgICAgICAgICAgICAgICAgLyogU2F2 ZSB0aGlzIGNoYXIgKi8KLSAgICAgICAgICAgICpjcCA9ICdcMCc7ICAgICAgICAgICAgICAgICAv KiBSZXBsYWNlIGl0IHdpdGggTlVMICovCi0gICAgICAgIH0KLSAgICAgICAgaWYgKCFxdWlldCkK LSAgICAgICAgICBwcmludGYoIlJlbW90ZSBzeXN0ZW0gdHlwZSBpcyAlcy5cbiIsZnRwX3JlcGx5 X3N0cis0KTsKLSAgICAgICAgY2tzdHJuY3B5KGZ0cF9zcnZ0eXAsZnRwX3JlcGx5X3N0cis0LFNS Vk5BTUxFTik7Ci0gICAgICAgIGlmIChjcCkgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHV0 IGJhY2sgc2F2ZWQgY2hhciAqLwotICAgICAgICAgICpjcCA9IGM7Ci0gICAgfQotICAgIGFsaWtl ID0gIWNrc3RyY21wKGZ0cF9zcnZ0eXAsbXlvc3R5cGUsLTEsMCk7Ci0KLSAgICBpZiAoIWNrc3Ry Y21wKGZ0cF9zcnZ0eXAsIlVOSVgiLC0xLDApKSBzZXJ2ZXJ0eXBlID0gU1lTX1VOSVg7Ci0gICAg ZWxzZSBpZiAoIWNrc3RyY21wKGZ0cF9zcnZ0eXAsIldJTjMyIiwtMSwwKSkgc2VydmVydHlwZSA9 IFNZU19XSU4zMjsKLSAgICBlbHNlIGlmICghY2tzdHJjbXAoZnRwX3NydnR5cCwiT1MvMiIsLTEs MCkpIHNlcnZlcnR5cGUgPSBTWVNfV0lOMzI7Ci0gICAgZWxzZSBpZiAoIWNrc3RyY21wKGZ0cF9z cnZ0eXAsIlZNUyIsLTEsMCkpIHNlcnZlcnR5cGUgPSBTWVNfVk1TOwotICAgIGVsc2UgaWYgKCFj a3N0cmNtcChmdHBfc3J2dHlwLCJET1MiLC0xLDApKSBzZXJ2ZXJ0eXBlID0gU1lTX0RPUzsKLSAg ICBlbHNlIGlmICghY2tzdHJjbXAoZnRwX3NydnR5cCwiVE9QUzIwIiwtMSwwKSkgc2VydmVydHlw ZSA9IFNZU19UT1BTMjA7Ci0gICAgZWxzZSBpZiAoIWNrc3RyY21wKGZ0cF9zcnZ0eXAsIlRPUFMx MCIsLTEsMCkpIHNlcnZlcnR5cGUgPSBTWVNfVE9QUzEwOwotCi0jaWZkZWYgRlRQX1BST1hZCi0g ICAgdW5peF9wcm94eSA9IDA7Ci0gICAgaWYgKHNlcnZlcnR5cGUgPT0gU1lTX1VOSVggJiYgcHJv eHkpIHVuaXhfcHJveHkgPSAxOwotI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwotCi0gICAgaWYgKGZ0 cF9jbWRsaW4gJiYgZnRwX3hmZXJtb2RlID09IFhNT0RFX00pCi0gICAgICBmdHBfdHlwID0gYmlu YXJ5OyAgICAgICAgICAgICAgICAgLyogVHlwZSBnaXZlbiBvbiBjb21tYW5kIGxpbmUgKi8KLSAg ICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2Ugc2V0IGl0 IGF1dG9tYXRpY2FsbHkgKi8KLSAgICAgIGZ0cF90eXAgPSBhbGlrZSA/IEZUVF9CSU4gOiBGVFRf QVNDOwotICAgIGNoYW5nZXR5cGUoZnRwX3R5cCwwKTsgICAgICAgICAgICAgIC8qIENoYW5nZSB0 byB0aGlzIHR5cGUgKi8KLSAgICBnX2Z0cF90eXAgPSBmdHBfdHlwOyAgICAgICAgICAgICAgICAv KiBNYWtlIGl0IHRoZSBnbG9iYWwgdHlwZSAqLwotICAgIGlmICghcXVpZXQpCi0gICAgICBwcmlu dGYoIkRlZmF1bHQgdHJhbnNmZXIgbW9kZSBpcyAlc1xuIiwKLSAgICAgICAgICAgICBmdHBfdHlw ID8gIkJJTkFSWSIgOiAiVEVYVCAoXCJBU0NJSVwiKSIKLSAgICAgICAgICAgICApOwotICAgIGZv ciAoaSA9IDA7IGkgPCAxNjsgaSsrKQkJLyogSW5pdCBzZXJ2ZXIgRkVBVHVyZSB0YWJsZSAqLwot ICAgICAgc2Z0dGFiW2ldID0gMDsKLSAgICBpZiAoIW5vaW5pdCkgewotICAgICAgICBuID0gZnRw Y21kKCJNT0RFIFMiLE5VTEwsMCwwLDApOyAvKiBXZSBhbHdheXMgc2VuZCBpbiBTdHJlYW0gbW9k ZSAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgaWYgKG4gIT0gUkVQTFlfQ09NUExFVEUpCi0g ICAgICAgICAgcHJpbnRmKCJXQVJOSU5HOiBTZXJ2ZXIgZG9lcyBub3QgYWNjZXB0IE1PREUgUyhU UkVBTSlcbiIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgbiA9IGZ0cGNtZCgiU1RS VSBGIixOVUxMLDAsMCwwKTsgLyogU1RSVSBGaWxlIChub3QgUmVjb3JkIG9yIFBhZ2UpICovCi0j aWZkZWYgQ09NTUVOVAotICAgICAgICBpZiAobiAhPSBSRVBMWV9DT01QTEVURSkKLSAgICAgICAg ICBwcmludGYoIldBUk5JTkc6IFNlcnZlciBkb2VzIG5vdCBhY2NlcHQgU1RSVSBGKElMRSlcbiIp OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQlpZiAoZmVhdG9rKSB7Ci0JICAgIG4gPSBmdHBjbWQo IkZFQVQiLE5VTEwsMCwwLDApOyAvKiBBc2sgc2VydmVyIGFib3V0IGZlYXR1cmVzICovCi0JICAg IGlmIChuID09IFJFUExZX0NPTVBMRVRFKSB7Ci0JCWRlYnVnKEYxMDEsImZ0cF9pbml0IEZFQVQi LCIiLHNmdHRhYlswXSk7Ci0JCWlmIChkZWJsb2cgfHwgZnRwX2RlYikgewotCQkgICAgaW50IGk7 Ci0JCSAgICBmb3IgKGkgPSAxOyBpIDwgMTYgJiYgaSA8IG5mZWF0dGFiOyBpKyspIHsKLQkJCWRl YnVnKEYxMTEsImZ0cF9pbml0IEZFQVQiLGZlYXR0YWJbaV0ua3dkLHNmdHRhYltpXSk7Ci0JCQlp ZiAoZnRwX2RlYikKLQkJCSAgcHJpbnRmKCIgIFNlcnZlciAlcyAlc1xuIiwKLQkJCQkgc2Z0dGFi W2ldID8gInN1cHBvcnRzIiA6ICJkb2VzIG5vdCBzdXBwb3J0IiwKLQkJCQkgZmVhdHRhYltpXS5r d2QKLQkJCQkgKTsKLQkJICAgIH0KLQkJICAgIC8qIERlYWwgd2l0aCBkaXNhYmxlZCBNTFNUIG9w dHMgaGVyZSBpZiBuZWNlc3NhcnkgKi8KLQkJICAgIC8qIEJ1dCB3aHkgd291bGQgaXQgYmU/ICov Ci0JCX0KLQkgICAgfQotCX0KLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQKLWZ0cF9sb2dpbihob3N0 KSBjaGFyICogaG9zdDsgeyAgICAgICAgICAvKiAoYWxzbyBjYWxsZWQgZnJvbSBja3V1c3kuYykg Ki8KLSAgICBzdGF0aWMgY2hhciBmdHBwYXNzW1BBU1NCVUZTSVpdPSIiOwotICAgIGNoYXIgdG1w W1BBU1NCVUZTSVpdOwotICAgIGNoYXIgKnVzZXIgPSBOVUxMLCAqcGFzcyA9IE5VTEwsICphY2N0 ID0gTlVMTDsKLSAgICBpbnQgbiwgYWZsYWcgPSAwOwotICAgIGV4dGVybiBjaGFyIHVpZGJ1Zltd OwotICAgIGV4dGVybiBjaGFyIHB3YnVmW107Ci0gICAgZXh0ZXJuIGludCAgcHdmbGcsIHB3Y3J5 cHQ7Ci0KLSAgICBkZWJ1ZyhGMTExLCJmdHBfbG9naW4iLGZ0cF9sb2duYW1lLGZ0cF9sb2cpOwot Ci0gICAgaWYgKCFja3N0cmNtcChmdHBfbG9nbmFtZSwiYW5vbnltb3VzIiwtMSwwKSkKLSAgICAg IGFub255bW91cyA9IDE7Ci0gICAgaWYgKCFja3N0cmNtcChmdHBfbG9nbmFtZSwiZnRwIiwtMSww KSkKLSAgICAgIGFub255bW91cyA9IDE7Ci0KLSNpZmRlZiBGVFBfU1JQCi0gICAgaWYgKGF1dGhf dHlwZSAmJiAhc3RyY21wKGF1dGhfdHlwZSwgIlNSUCIpKSB7Ci0gICAgICAgIHVzZXIgPSBzcnBf dXNlcjsKLSAgICAgICAgcGFzcyA9IHNycF9wYXNzOwotICAgICAgICBhY2N0ID0gc3JwX2FjY3Q7 Ci0gICAgfSBlbHNlCi0jZW5kaWYgLyogRlRQX1NSUCAqLwotICAgICAgaWYgKGFub255bW91cykg ewotICAgICAgICAgIHVzZXIgPSAiYW5vbnltb3VzIjsKLSAgICAgICAgICBpZiAoZnRwX3RtcCkg ewkJLyogVGhleSBnYXZlIGEgcGFzc3dvcmQgKi8KLSAgICAgICAgICAgICAgcGFzcyA9IGZ0cF90 bXA7Ci0gICAgICAgICAgfSBlbHNlIGlmIChmdHBfYXB3KSB7CQkvKiBTRVQgRlRQIEFOT05ZTU9V Uy1QQVNTV09SRCAqLwotCSAgICAgIHBhc3MgPSBmdHBfYXB3OwotCSAgfSBlbHNlIHsJCQkvKiBT dXBwbHkgdXNlckBob3N0ICovCi0JICAgICAgY2ttYWttc2codG1wLFBBU1NCVUZTSVosd2hvYW1p KCksIkAiLG15aG9zdCxOVUxMKTsKLQkgICAgICBwYXNzID0gdG1wOwotICAgICAgICAgIH0KLQkg IGRlYnVnKEYxMTAsImZ0cCBhbm9ueW1vdXMiLHBhc3MsMCk7Ci0gICAgICB9IGVsc2UgewotI2lm ZGVmIFVTRV9SVVNFUlBBU1MKLSAgICAgICAgICBpZiAocnVzZXJwYXNzKGhvc3QsICZ1c2VyLCAm cGFzcywgJmFjY3QpIDwgMCkgewotICAgICAgICAgICAgICBmdHBjb2RlID0gLTE7Ci0gICAgICAg ICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogVVNFX1JVU0VSUEFTUyAq LwotICAgICAgICAgIGlmIChmdHBfbG9nbmFtZSkgewotICAgICAgICAgICAgICB1c2VyID0gZnRw X2xvZ25hbWU7Ci0gICAgICAgICAgICAgIHBhc3MgPSBmdHBfdG1wOwotICAgICAgICAgIH0gZWxz ZSBpZiAodWlkYnVmWzBdICYmIChmdHBfdG1wIHx8IHB3YnVmWzBdICYmIHB3ZmxnKSkgewotICAg ICAgICAgICAgICB1c2VyID0gdWlkYnVmOwotICAgICAgICAgICAgICBpZiAoZnRwX3RtcCkgewot ICAgICAgICAgICAgICAgICAgcGFzcyA9IGZ0cF90bXA7Ci0gICAgICAgICAgICAgIH0gZWxzZSBp ZiAocHdidWZbMF0gJiYgcHdmbGcpIHsKLSAgICAgICAgICAgICAgICAgIGNrc3RybmNweShmdHBw YXNzLHB3YnVmLFBBU1NCVUZTSVopOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgaWYg KCBwd2NyeXB0ICkKLSAgICAgICAgICAgICAgICAgICAgICBja19lbmNyeXB0KChjaGFyICopZnRw cGFzcyk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICBwYXNzID0gZnRwcGFz czsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBhY2N0ID0gZnRwX2Fj YzsKLSAgICAgICAgICB3aGlsZSAodXNlciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgIGNoYXIg Km15bmFtZSwgcHJvbXB0W1BST01QVFNJWl07Ci0gICAgICAgICAgICAgIGludCBvazsKLQotICAg ICAgICAgICAgICBteW5hbWUgPSB3aG9hbWkoKTsKLSAgICAgICAgICAgICAgaWYgKG15bmFtZSkK LSAgICAgICAgICAgICAgICBja21ha3htc2cocHJvbXB0LFBST01QVFNJWiwiIE5hbWUgKCIsaG9z dCwiOiIsbXluYW1lLCIpOiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg ICAgICAgIGNrbWFrbXNnKHByb21wdCxQUk9NUFRTSVosIiBOYW1lICgiLGhvc3QsIik6ICIsTlVM TCk7Ci0gICAgICAgICAgICAgIHRtcFswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgIAotICAgICAg ICAgICAgICBvayA9IHVxX3R4dChOVUxMLHByb21wdCwxLE5VTEwsdG1wLFBBU1NCVUZTSVosTlVM TCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9VUV9USU1FT1VUKTsKLSAgICAg ICAgICAgICAgaWYgKCFvayB8fCAqdG1wID09ICdcMCcpCi0gICAgICAgICAgICAgICAgdXNlciA9 IG15bmFtZTsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXIgPSBicnN0 cmlwKHRtcCk7Ci0gICAgICAgICAgfQotICAgICAgfQotICAgIG4gPSBmdHBjbWQoIlVTRVIiLHVz ZXIsLTEsLTEsZnRwX3ZibSk7Ci0gICAgaWYgKG4gPT0gUkVQTFlfQ09NUExFVEUpIHsKLSAgICAg ICAgLyogZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gc2VuZCBhIGR1bW15IHBhc3N3b3JkICovCi0g ICAgICAgIGlmIChmdHBjbWQoIlBXRCIsTlVMTCwwLDAsMCkgIT0gUkVQTFlfQ09NUExFVEUpCi0g ICAgICAgICAgZnRwY21kKCJQQVNTIGR1bW15IixOVUxMLDAsMCwxKTsKLSAgICB9IGVsc2UgaWYg KG4gPT0gUkVQTFlfQ09OVElOVUUpIHsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgIGlu dCBvbGRmdHBfY3BsOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQotICAgICAgICBpZiAo cGFzcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpbnQgb2s7Ci0gICAgICAgICAgICBzZXRpbnQo KTsKLSAgICAgICAgICAgIG9rID0gdXFfdHh0KE5VTEwsIiBQYXNzd29yZDogIiwyLE5VTEwsZnRw cGFzcyxQQVNTQlVGU0laLE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1VR X1RJTUVPVVQpOwotICAgICAgICAgICAgaWYgKG9rKQotICAgICAgICAgICAgICAgIHBhc3MgPSBi cnN0cmlwKGZ0cHBhc3MpOwotICAgICAgICB9Ci0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAg ICAgIG9sZGZ0cF9jcGwgPSBmdHBfY3BsOwotICAgICAgICBmdHBfY3BsID0gRlBMX1BSVjsKLSNl bmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgIG4gPSBmdHBjbWQoIlBBU1MiLHBhc3Ms LTEsLTEsMSk7Ci0gICAgICAgIGlmICghYW5vbnltb3VzICYmIHBhc3MpIHsKLSAgICAgICAgICAg IGNoYXIgKiBwID0gcGFzczsKLSAgICAgICAgICAgIHdoaWxlICgqcCsrKSAqKHAtMSkgPSBOVUw7 Ci0gICAgICAgICAgICBtYWtlc3RyKCZmdHBfdG1wLE5VTEwpOwotICAgICAgICB9Ci0jaWZkZWYg Q0tfRU5DUllQVElPTgotICAgICAgICAvKiBsZXZlbCBtYXkgaGF2ZSBjaGFuZ2VkICovCi0gICAg ICAgIGlmIChmdHBfY3BsID09IEZQTF9QUlYpCi0gICAgICAgICAgZnRwX2NwbCA9IG9sZGZ0cF9j cGw7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgIH0KLSAgICBpZiAobiA9PSBSRVBM WV9DT05USU5VRSkgewotICAgICAgICBhZmxhZysrOwotICAgICAgICBpZiAoYWNjdCA9PSBOVUxM KSB7Ci0gICAgICAgICAgICBzdGF0aWMgY2hhciBmdHBhY2N0WzgwXTsKLSAgICAgICAgICAgIGlu dCBvazsKLSAgICAgICAgICAgIHNldGludCgpOwotICAgICAgICAgICAgb2sgPSB1cV90eHQoTlVM TCwiIEFjY291bnQ6ICIsMixOVUxMLGZ0cGFjY3QsODAsTlVMTCwKLSAgICAgICAgICAgICAgICAg ICAgICAgIERFRkFVTFRfVVFfVElNRU9VVCk7Ci0gICAgICAgICAgICBpZiAob2spCi0gICAgICAg ICAgICAgICAgYWNjdCA9IGJyc3RyaXAoZnRwYWNjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgbiA9 IGZ0cGNtZCgiQUNDVCIsYWNjdCwtMSwtMSxmdHBfdmJtKTsKLSAgICB9Ci0gICAgaWYgKG4gIT0g UkVQTFlfQ09NUExFVEUpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJGVFAgbG9naW4gZmFp bGVkLlxuIik7Ci0gICAgICAgIGlmIChoYXZldXJsKQotICAgICAgICAgIGRvZXhpdChCQURfRVhJ VCwtMSk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKCFhZmxhZyAmJiBhY2N0 ICE9IE5VTEwpIHsKLSAgICAgICAgZnRwY21kKCJBQ0NUIixhY2N0LC0xLC0xLGZ0cF92Ym0pOwot ICAgIH0KLSAgICBtYWtlc3RyKCZmdHBfbG9nbmFtZSx1c2VyKTsKLSAgICBsb2dnZWRpbiA9IDE7 Ci0jaWZkZWYgTE9DVVMKLSAgICAvKiBVbnByZWZpeGVkIGZpbGUgbWFuYWdlbWVudCBjb21tYW5k cyBnbyB0byBzZXJ2ZXIgKi8KLSAgICBpZiAoYXV0b2xvY3VzICYmICFmdHBfY21kbGluKSB7Ci0J c2V0bG9jdXMoMCwxKTsKLSAgICB9Ci0jZW5kaWYgLyogTE9DVVMgKi8KLSAgICBmdHBfaW5pdCgp OwotCi0gICAgaWYgKGFub255bW91cyAmJiAhcXVpZXQpIHsKLSAgICAgICAgcHJpbnRmKCIgTG9n Z2VkIGluIGFzIGFub255bW91cyAoJXMpXG4iLHBhc3MpOwotICAgICAgICBtZW1zZXQocGFzcywg MCwgc3RybGVuKHBhc3MpKTsKLSAgICB9Ci0gICAgaWYgKGZ0cF9yZGlyKSB7Ci0gICAgICAgIGlm IChkb2Z0cGN3ZChmdHBfcmRpciwtMSkgPCAxKQotICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwt MSk7Ci0gICAgfQotCi0jaWZkZWYgRlRQX1BST1hZCi0gICAgaWYgKHByb3h5KQotICAgICAgcmV0 dXJuKDEpOwotI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwotICAgIHJldHVybigxKTsKLX0KLQotc3Rh dGljIGludAotZnRwX3Jlc2V0KCkgewotICAgIGludCByYzsKLSNpZmRlZiBCU0RTRUxFQ1QKLSAg ICBpbnQgbmZuZCA9IDE7Ci0gICAgZmRfc2V0IG1hc2s7Ci0gICAgRkRfWkVSTygmbWFzayk7Ci0g ICAgd2hpbGUgKG5mbmQgPiAwKSB7Ci0gICAgICAgIEZEX1NFVChjc29ja2V0LCAmbWFzayk7Ci0g ICAgICAgIGlmICgobmZuZCA9IGVtcHR5KCZtYXNrLDApKSA8IDApIHsKLSAgICAgICAgICAgIHBl cnJvcigicmVzZXQiKTsKLSAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKLSAgICAgICAgICAgIGxv c3RwZWVyKCk7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmZu ZCkgewotICAgICAgICAgICAgZ2V0cmVwbHkoMCwtMSwtMSxmdHBfdmJtLDApOwotICAgICAgICB9 Ci0gICAgfQotI2Vsc2UgLyogQlNEU0VMRUNUICovCi0jaWZkZWYgSUJNU0VMRUNUCi0gICAgaW50 IG5mbmQgPSAxOwotICAgIHdoaWxlIChuZm5kID4gMCkgewotICAgICAgICBpZiAoKG5mbmQgPSBl bXB0eSgmY3NvY2tldCwxLDApKSA8IDApIHsKLSAgICAgICAgICAgIHBlcnJvcigicmVzZXQiKTsK LSAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKLSAgICAgICAgICAgIGxvc3RwZWVyKCk7Ci0gICAg ICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmZuZCkgewotICAgICAgICAg ICAgZ2V0cmVwbHkoMCwtMSwtMSxmdHBfdmJtLDApOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlm IC8qIElCTVNFTEVDVCAqLwotI2VuZGlmIC8qIEJTRFNFTEVDVCAqLwotICAgIHJjID0gKGZ0cGNt ZCgiUkVJTiIsTlVMTCwwLDAsZnRwX3ZibSkgPT0gUkVQTFlfQ09NUExFVEUpOwotICAgIGlmIChy YyA+IDApCi0gICAgICBsb2dnZWRpbiA9IDA7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotc3RhdGlj IGludAotZnRwX3JlbmFtZShmcm9tLCB0bykgY2hhciAqIGZyb20sICogdG87IHsKLSAgICBpbnQg bGNzID0gLTEsIHJjcyA9IC0xOwotI2lmbmRlZiBOT0NTRVRTCi0gICAgaWYgKGZ0cF94bGEpIHsK LSAgICAgICAgbGNzID0gZnRwX2NzbDsKLSAgICAgICAgaWYgKGxjcyA8IDApIGxjcyA9IGZjaGFy c2V0OwotICAgICAgICByY3MgPSBmdHBfY3N4OwotICAgICAgICBpZiAocmNzIDwgMCkgcmNzID0g ZnRwX2NzcjsKLSAgICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIGlmIChmdHBjbWQoIlJO RlIiLGZyb20sbGNzLHJjcyxmdHBfdmJtKSA9PSBSRVBMWV9DT05USU5VRSkgewotICAgICAgICBy ZXR1cm4oZnRwY21kKCJSTlRPIix0byxsY3MscmNzLGZ0cF92Ym0pID09IFJFUExZX0NPTVBMRVRF KTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmFp bHVyZSAqLwotfQotCi1zdGF0aWMgaW50Ci1mdHBfdW1hc2sobWFzaykgY2hhciAqIG1hc2s7IHsK LSAgICBpbnQgcmM7Ci0gICAgcmMgPSAoZnRwY21kKCJTSVRFIFVNQVNLIixtYXNrLC0xLC0xLDEp ID09IFJFUExZX0NPTVBMRVRFKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi1zdGF0aWMgaW50Ci1m dHBfdXNlcih1c2VyLHBhc3MsYWNjdCkgY2hhciAqIHVzZXIsICogcGFzcywgKiBhY2N0OyB7Ci0g ICAgaW50IG4gPSAwLCBhZmxhZyA9IDA7Ci0gICAgY2hhciBwd2RbUFdEU0laXTsKLQotICAgIGlm ICghYXV0aF90eXBlICYmIGZ0cF9hdXQpIHsKLSNpZmRlZiBGVFBfU1JQCi0gICAgICAgIGlmIChj a19zcnBfaXNfaW5zdGFsbGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChzcnBfZnRwX2F1dGgoIE5V TEwsIHVzZXIsIHBhc3MpKSB7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigmcGFzcyxzcnBfcGFz cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBGVFBfU1JQICovCi0gICAg fQotICAgIG4gPSBmdHBjbWQoIlVTRVIiLHVzZXIsLTEsLTEsZnRwX3ZibSk7Ci0gICAgaWYgKG4g PT0gUkVQTFlfQ09NUExFVEUpCi0gICAgICBuID0gZnRwY21kKCJQQVNTIGR1bW15IixOVUxMLDAs MCwxKTsKLSAgICBlbHNlIGlmIChuID09IFJFUExZX0NPTlRJTlVFKSB7Ci0jaWZkZWYgQ0tfRU5D UllQVElPTgotICAgICAgICBpbnQgb2xkZnRwX2NwbDsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCi0gICAgICAgIGlmIChwYXNzID09IE5VTEwgfHwgIXBhc3NbMF0pIHsKLSAgICAgICAgICAg IGludCBvazsKLSAgICAgICAgICAgIHB3ZFswXSA9ICdcMCc7Ci0gICAgICAgICAgICBzZXRpbnQo KTsKLSAgICAgICAgICAgIG9rID0gdXFfdHh0KE5VTEwsIiBQYXNzd29yZDogIiwyLE5VTEwscHdk LFBXRFNJWixOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9VUV9USU1FT1VU KTsKLSAgICAgICAgICAgIGlmIChvaykKLSAgICAgICAgICAgICAgICBwYXNzID0gYnJzdHJpcChw d2QpOwotICAgICAgICB9Ci0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgIGlmICgob2xk ZnRwX2NwbCA9IGZ0cF9jcGwpID09IFBST1RfUykKLSAgICAgICAgICBmdHBfY3BsID0gUFJPVF9Q OwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgbiA9IGZ0cGNtZCgiUEFTUyIs cGFzcywtMSwtMSwxKTsKLSAgICAgICAgbWVtc2V0KHBhc3MsIDAsIHN0cmxlbihwYXNzKSk7Ci0j aWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAvKiBsZXZlbCBtYXkgaGF2ZSBjaGFuZ2VkICov Ci0gICAgICAgIGlmIChmdHBfY3BsID09IFBST1RfUCkKLSAgICAgICAgICBmdHBfY3BsID0gb2xk ZnRwX2NwbDsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgfQotICAgIGlmIChuID09 IFJFUExZX0NPTlRJTlVFKSB7Ci0gICAgICAgIGlmIChhY2N0ID09IE5VTEwgfHwgIWFjY3RbMF0p IHsKLSAgICAgICAgICAgIGludCBvazsKLSAgICAgICAgICAgIHB3ZFswXSA9ICdcMCc7Ci0gICAg ICAgICAgICBzZXRpbnQoKTsKLSAgICAgICAgICAgIG9rID0gdXFfdHh0KE5VTEwsIiBBY2NvdW50 OiAiLDIsTlVMTCxwd2QsUFdEU0laLE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICBERUZB VUxUX1VRX1RJTUVPVVQpOwotICAgICAgICAgICAgaWYgKG9rKQotICAgICAgICAgICAgICAgIGFj Y3QgPSBwd2Q7Ci0gICAgICAgIH0KLSAgICAgICAgbiA9IGZ0cGNtZCgiQUNDVCIsYWNjdCwtMSwt MSxmdHBfdmJtKTsKLSAgICAgICAgYWZsYWcrKzsKLSAgICB9Ci0gICAgaWYgKG4gIT0gUkVQTFlf Q09NUExFVEUpIHsKLSAgICAgICAgcHJpbnRmKCJMb2dpbiBmYWlsZWQuXG4iKTsKLSAgICAgICAg cmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAoIWFmbGFnICYmIGFjY3QgIT0gTlVMTCAmJiBhY2N0 WzBdKSB7Ci0gICAgICAgIG4gPSBmdHBjbWQoIkFDQ1QiLGFjY3QsLTEsLTEsZnRwX3ZibSk7Ci0g ICAgfQotICAgIGlmIChuID09IFJFUExZX0NPTVBMRVRFKSB7Ci0gICAgICAgIG1ha2VzdHIoJmZ0 cF9sb2duYW1lLHVzZXIpOwotICAgICAgICBsb2dnZWRpbiA9IDE7Ci0gICAgICAgIGZ0cF9pbml0 KCk7Ci0gICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi1jaGFy ICoKLWZ0cF9hdXRodHlwZSgpIHsKLSAgICBpZiAoIWNvbm5lY3RlZCkKLSAgICAgIHJldHVybigi TlVMTCIpOwotICAgIHJldHVybihhdXRoX3R5cGUgPyBhdXRoX3R5cGUgOiAiTlVMTCIpOwotfQot Ci1jaGFyICoKLWZ0cF9jcGxfbW9kZSgpIHsKLSAgICBzd2l0Y2ggKGZ0cF9jcGwpIHsKLSAgICAg IGNhc2UgRlBMX0NMUjoKLSAgICAgICAgcmV0dXJuKCJjbGVhciIpOwotICAgICAgY2FzZSBGUExf U0FGOgotICAgICAgICByZXR1cm4oInNhZmUiKTsKLSAgICAgIGNhc2UgRlBMX1BSVjoKLSAgICAg ICAgcmV0dXJuKCJwcml2YXRlIik7Ci0gICAgICBjYXNlIEZQTF9DT046Ci0gICAgICAgIHJldHVy bigiY29uZmlkZW50aWFsIik7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4oIihlcnJv cikiKTsKLSAgICB9Ci19Ci0KLWNoYXIgKgotZnRwX2RwbF9tb2RlKCkgewotICAgIHN3aXRjaCAo ZnRwX2RwbCkgewotICAgICAgY2FzZSBGUExfQ0xSOgotICAgICAgICByZXR1cm4oImNsZWFyIik7 Ci0gICAgICBjYXNlIEZQTF9TQUY6Ci0gICAgICAgIHJldHVybigic2FmZSIpOwotICAgICAgY2Fz ZSBGUExfUFJWOgotICAgICAgICByZXR1cm4oInByaXZhdGUiKTsKLSAgICAgIGNhc2UgRlBMX0NP TjoKLSAgICAgICAgcmV0dXJuKCJjb25maWRlbnRpYWwiKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg ICAgIHJldHVybigiKGVycm9yKSIpOwotICAgIH0KLX0KLQotCi0vKiByZW1vdGVfZmlsZXMoKSAq LwotLyoKLSAgIFJldHVybnMgbmV4dCByZW1vdGUgZmlsZW5hbWUgb24gc3VjY2VzczsKLSAgIE5V TEwgb24gZXJyb3Igb3Igbm8gbW9yZSBmaWxlcyB3aXRoIGdsb2JhbCByZnJjIHNldCB0bzoKLSAg ICAgLTE6IEJhZCBhcmd1bWVudAotICAgICAtMjogU2VydmVyIGVycm9yIHJlc3BvbnNlIHRvIE5M U1QsIGUuZy4gZmlsZSBub3QgZm91bmQKLSAgICAgLTM6IE5vIG1vcmUgZmlsZXMKLSAgICAgLTk6 IEludGVybmFsIGVycm9yCi0qLwotI2RlZmluZSBGVFBOQU1CVUZMRU4gQ0tNQVhQQVRIKzEwMjQK LQotLyogQ2hlY2s6IGNrbWF4ZmlsZXMgQ0tNQVhPUEVOICovCi0KLSNkZWZpbmUgTUxTREVQVEgg MTI4CQkJLyogU3RhY2sgb2Ygb3BlbiB0ZW1wIGZpbGVzICovCi1zdGF0aWMgaW50IG1sc2RlcHRo ID0gMDsJCS8qIFRlbXAgZmlsZSBzdGFjayBkZXB0aCAqLwotc3RhdGljIEZJTEUgKiB0bXBmaWxw dHJbTUxTREVQVEgrMV0gPSB7IE5VTEwsIE5VTEwgfTsgLyogVGVtcCBmaWxlIHBvaW50ZXJzICov Ci1zdGF0aWMgY2hhciAqIHRtcGZpbG5hbVtNTFNERVBUSCsxXSA9IHsgTlVMTCwgTlVMTCB9OyAv KiBUZW1wIGZpbGUgbmFtZXMgKi8KLQotc3RhdGljIFZPSUQKLW1sc3Jlc2V0KCkgewkJCQkvKiBS ZXNldCBNR0VUIHRlbXAtZmlsZSBzdGFjayAqLwotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7 IGkgPD0gbWxzZGVwdGg7IGkrKykgewotCWlmICh0bXBmaWxwdHJbaV0pIHsKLQkgICAgZmNsb3Nl KHRtcGZpbHB0cltpXSk7Ci0JICAgIHRtcGZpbHB0cltpXSA9IE5VTEw7Ci0JICAgIGlmICh0bXBm aWxuYW1baV0pIHsKLSNpZmRlZiBPUzIKLQkJdW5saW5rKHRtcGZpbG5hbVtpXSk7Ci0jZW5kaWYg LyogT1MyICovCi0JCWZyZWUodG1wZmlsbmFtW2ldKTsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAg bWxzZGVwdGggPSAwOwotfQotCi1zdGF0aWMgQ0hBUiAqCi0jaWZkZWYgQ0tfQU5TSUMKLXJlbW90 ZV9maWxlcyhpbnQgbmV3X3F1ZXJ5LCBDSEFSICogYXJnLCBDSEFSICogcGF0dGVybiwgaW50IHBy b3h5X3N3aXRjaCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi1yZW1vdGVfZmlsZXMobmV3X3F1ZXJ5 LCBhcmcsIHBhdHRlcm4sIHByb3h5X3N3aXRjaCkKLSAgICBpbnQgbmV3X3F1ZXJ5OwotICAgIENI QVIgKiBhcmc7CQkJCS8qIFRoYXQgd2Ugc2VuZCB0byB0aGUgc2VydmVyICovCi0gICAgQ0hBUiAq IHBhdHRlcm47CQkJLyogVGhhdCB3ZSB1c2UgbG9jYWxseSAqLwotICAgIGludCBwcm94eV9zd2l0 Y2g7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHJlbW90ZV9maWxlcyAqLyB7Ci0gICAgc3Rh dGljIENIQVIgYnVmW0ZUUE5BTUJVRkxFTl07Ci0gICAgQ0hBUiAqY3AsICp3aGljaGFyZzsKLSAg ICBjaGFyICogY2R0byA9IE5VTEw7Ci0gICAgY2hhciAqIHA7Ci0gICAgaW50IGksIHgsIGZvcmNl ZCA9IDA7Ci0gICAgaW50IGxjcyA9IDAsIHJjcyA9IDAsIHhsYXRlID0gMDsKLQotICAgIGRlYnVn KEYxMDEsImZ0cCByZW1vdGVfZmlsZXMgbmV3X3F1ZXJ5IiwiIixuZXdfcXVlcnkpOwotICAgIGRl YnVnKEYxMTAsImZ0cCByZW1vdGVfZmlsZXMgYXJnIixhcmcsMCk7Ci0gICAgZGVidWcoRjExMCwi ZnRwIHJlbW90ZV9maWxlcyBwYXR0ZXJuIixwYXR0ZXJuLDApOwotCi0gICAgcmZyYyA9IC0xOwot ICAgIGlmIChwYXR0ZXJuKQkJCS8qIFRyZWF0IGVtcHR5IHBhdHRlcm4gc2FtZSBhcyBOVUxMICov Ci0gICAgICBpZiAoISpwYXR0ZXJuKQotCXBhdHRlcm4gPSBOVUxMOwotICAgIGlmIChhcmcpCQkJ CS8qIERpdHRvIGZvciBhcmcgKi8KLSAgICAgIGlmICghKmFyZykKLQlhcmcgPSBOVUxMOwotCi0g IGFnYWluOgotCi0gICAgaWYgKG5ld19xdWVyeSkgewotICAgICAgICBpZiAodG1wZmlscHRyW21s c2RlcHRoXSkgewotICAgICAgICAgICAgZmNsb3NlKHRtcGZpbHB0clttbHNkZXB0aF0pOwotICAg ICAgICAgICAgdG1wZmlscHRyW21sc2RlcHRoXSA9IE5VTEw7Ci0jaWZkZWYgT1MyCi0gICAgICAg ICAgICBpZiAoIWZ0cF9kZWIgJiYgIWRlYmxvZykKLSAgICAgICAgICAgICAgdW5saW5rKHRtcGZp bG5hbVttbHNkZXB0aF0pOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICB9Ci0gICAgfQotICAg IGlmICh0bXBmaWxwdHJbbWxzZGVwdGhdID09IE5VTEwpIHsKLSAgICAgICAgZXh0ZXJuIGNoYXIg KiB0ZW1wZGlyOwotICAgICAgICBjaGFyICogcDsKLSAgICAgICAgZGVidWcoRjExMCwiZnRwIHJl bW90ZV9maWxlcyB0ZW1wZGlyIix0ZW1wZGlyLDApOwotICAgICAgICBpZiAodGVtcGRpcikgewot ICAgICAgICAgICAgcCA9IHRlbXBkaXI7Ci0gICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgT1MyCi0j aWZkZWYgTlQKLSAgICAgICAgICAgIHAgPSBnZXRlbnYoIks5NVRNUCIpOwotI2Vsc2UKLSAgICAg ICAgICAgIHAgPSBnZXRlbnYoIksyVE1QIik7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAg IGlmICghcCkKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgcCA9IGdldGVudigiQ0tf VE1QIik7Ci0gICAgICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICAgIHAgPSBnZXRlbnYoIlRN UERJUiIpOwotICAgICAgICAgICAgaWYgKCFwKSBwID0gZ2V0ZW52KCJURU1QIik7Ci0gICAgICAg ICAgICBpZiAoIXApIHAgPSBnZXRlbnYoIlRNUCIpOwotI2lmZGVmIE9TMk9SVU5JWAotICAgICAg ICAgICAgaWYgKHApIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKHApOwotICAg ICAgICAgICAgICAgIGlmIChwW2xlbi0xXSAhPSAnLycKLSNpZmRlZiBPUzIKLSAgICAgICAgICAg ICAgICAgICAgJiYgcFtsZW4tMV0gIT0gJ1xcJwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAg ICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjaGFyIGZvb1tDS01B WFBBVEhdOwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoZm9vLHAsQ0tNQVhQQVRIKTsK LSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KGZvbywiLyIsQ0tNQVhQQVRIKTsKLSAgICAg ICAgICAgICAgICAgICAgcCA9IGZvbzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9 IGVsc2UKLSNlbHNlIC8qIE9TMk9SVU5JWCAqLwotICAgICAgICAgICAgaWYgKCFwKQotI2VuZGlm IC8qIE9TMk9SVU5JWCAqLwotI2lmZGVmIFVOSVggICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFN5c3RlbXMgdGhhdCBoYXZlIGEgc3RhbmRhcmQgKi8KLSAgICAgICAgICAgICAgICBwID0g Ii90bXAvIjsgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgZGlyZWN0b3J5Li4uICovCi0jZWxzZQot I2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgICAgICAgICBwID0gIjpUTVA6IjsKLSNlbHNlCi0gICAg ICAgICAgICBwID0gIiI7Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBVTklY ICovCi0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMCwiZnRwIHJlbW90ZV9maWxlcyBwIixw LDApOwotCi0JLyogR2V0IHRlbXAgZmlsZSAqLwotCi0JaWYgKCh0bXBmaWxuYW1bbWxzZGVwdGhd ID0gKGNoYXIgKiltYWxsb2MoQ0tNQVhQQVRIKzEpKSkgewotCSAgICBja21ha21zZygoY2hhciAq KXRtcGZpbG5hbVttbHNkZXB0aF0sCi0JCSAgICAgQ0tNQVhQQVRIKzEscCwiY2tYWFhYWFgiLE5V TEwsTlVMTCk7Ci0JfSBlbHNlIHsKLQkgICAgcHJpbnRmKCI/TWFsbG9jIGZhaWx1cmU6IHJlbW90 ZV9maWxlcygpXG4iKTsKLQkgICAgcmV0dXJuKE5VTEwpOwotCX0KLQotI2lmZGVmIE5UCi0Jewot CSAgICBjaGFyICogdG1wZmlsID0gbWt0ZW1wKChjaGFyICopdG1wZmlsbmFtW21sc2RlcHRoXSk7 Ci0JICAgIGlmICggdG1wZmlsICkKLQkJY2tzdHJuY3B5KHRtcGZpbG5hbVttbHNkZXB0aF0sdG1w ZmlsLENLTUFYUEFUSCsxKTsKLQl9Ci0jZWxzZSAvKiBOVCAqLwotI2lmZGVmIE1LVEVNUAotI2lm ZGVmIE1LU1RFTVAKLQl4ID0gbWtzdGVtcCgoY2hhciAqKXRtcGZpbG5hbVttbHNkZXB0aF0pOwot CWlmICh4ID4gLTEpIGNsb3NlKHgpOwkJLyogV2UganVzdCB3YW50IHRoZSBuYW1lLiAqLwotI2Vs c2UKLSAgICAgICAgbWt0ZW1wKChjaGFyICopdG1wZmlsbmFtW21sc2RlcHRoXSk7Ci0jZW5kaWYg LyogTUtTVEVNUCAqLwotICAgICAgICAvKiBpZiBubyBta3RtcG5hbSgpIHRoZSBuYW1lIHdpbGwg anVzdCBiZSAiY2tYWFhYWFgiLi4uICovCi0jZW5kaWYgLyogTUtURU1QICovCi0jZW5kaWYgLyog TlQgKi8KLQotCWRlYnVnKEYxMTEsImZ0cCByZW1vdGVfZmlsZXMgdG1wZmlsbmFtW21sc2RlcHRo XSIsCi0JICAgICAgdG1wZmlsbmFtW21sc2RlcHRoXSxtbHNkZXB0aCk7Ci0KLSNpZmRlZiBGVFBf UFJPWFkKLSAgICAgICAgaWYgKHByb3h5X3N3aXRjaCkgewotICAgICAgICAgICAgcHN3aXRjaCgh cHJveHkpOwotICAgICAgICB9Ci0jZW5kaWYgLyogRlRQX1BST1hZICovCi0KLSAgICAgICAgZGVi dWcoRjEwMSwiZnRwIHJlbW90ZV9maWxlcyBmdHBfeGxhIiwiIixmdHBfeGxhKTsKLSAgICAgICAg ZGVidWcoRjEwMSwiZnRwIHJlbW90ZV9maWxlcyBmdHBfY3NsIiwiIixmdHBfY3NsKTsKLSAgICAg ICAgZGVidWcoRjEwMSwiZnRwIHJlbW90ZV9maWxlcyBmdHBfY3NyIiwiIixmdHBfY3NyKTsKLQot I2lmbmRlZiBOT0NTRVRTCi0gICAgICAgIHhsYXRlID0gZnRwX3hsYTsgICAgICAgICAgICAgICAg LyogU0VUIEZUUCBDSEFSQUNURVItU0VULVRSQU5TTEFUSU9OICovCi0gICAgICAgIGlmICh4bGF0 ZSkgeyAgICAgICAgICAgICAgICAgICAgLyogT04/ICovCi0gICAgICAgICAgICBsY3MgPSBmdHBf Y3NsOyAgICAgICAgICAgICAgLyogTG9jYWwgY2hhcnNldCAqLwotICAgICAgICAgICAgaWYgKGxj cyA8IDApIGxjcyA9IGZjaGFyc2V0OwotICAgICAgICAgICAgaWYgKGxjcyA8IDApIHhsYXRlID0g MDsKLSAgICAgICAgfQotICAgICAgICBpZiAoeGxhdGUpIHsgICAgICAgICAgICAgICAgICAgIC8q IFN0aWxsIE9OPyAqLwotICAgICAgICAgICAgcmNzID0gZnRwX2NzeDsgICAgICAgICAgICAgIC8q IFJlbW90ZSAoU2VydmVyKSBjaGFyc2V0ICovCi0gICAgICAgICAgICBpZiAocmNzIDwgMCkgcmNz ID0gZnRwX2NzcjsKLSAgICAgICAgICAgIGlmIChyY3MgPCAwKSB4bGF0ZSA9IDA7Ci0gICAgICAg IH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLQlmb3JjZWQgPSBtZ2V0Zm9yY2VkOwkJLyogTUdF VCBtZXRob2QgZm9yY2VkPyAqLwotCWlmICghZm9yY2VkIHx8ICFtZ2V0bWV0aG9kKQkvKiBOb3Qg Zm9yY2VkLi4uICovCi0JICBtZ2V0bWV0aG9kID0gKHNmdHRhYlswXSAmJiBzZnR0YWJbU0ZUX01M U1RdKSA/IC8qIHNvIHBpY2sgb25lICovCi0JICAgICAgU05EX01MUyA6Ci0JICAgICAgU05EX05M UzsgCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgVXNl cidzIENvbW1hbmQ6ICAgICAgICAgICAgICAgICBSZXN1bHQ6Ci0gICAgbWdldCAvbmxzdCAgICAg ICAgICAgICAgICAgICAgIE5MU1QgKE5VTEwpCi0gICAgbWdldCAvbmxzdCBmb28gICAgICAgICAg ICAgICAgIE5MU1QgZm9vCi0gICAgbWdldCAvbmxzdCAqLnR4dCAgICAgICAgICAgICAgIE5MU1Qg Ki50eHQgCi0gICAgbWdldCAvbmxzdCAvbWF0Y2g6Ki50eHQgICAgICAgIE5MU1QgKE5VTEwpCi0g ICAgbWdldCAvbmxzdCAvbWF0Y2g6Ki50eHQgIGZvbyAgIE5MU1QgZm9vICAgCi0gICAgbWdldCAv bWxzZCAgICAgICAgICAgICAgICAgICAgIE1MU0QgKE5VTEwpCi0gICAgbWdldCAvbWxzZCBmb28g ICAgICAgICAgICAgICAgIE1MU0QgZm9vCi0gICAgbWdldCAvbWxzZCAqLnR4dCAgICAgICAgICAg ICAgIE1MU0QgKE5VTEwpCi0gICAgbWdldCAvbWxzZCAvbWF0Y2g6Ki50eHQgICAgICAgIE1MU0Qg KE5VTEwpCi0gICAgbWdldCAvbWxzZCAvbWF0Y2g6Ki50eHQgIGZvbyAgIE1MU0QgZm9vCi0qLwot CXggPSAtMTsKLQl3aGlsZSAoeCA8IDApIHsKLQkgICAgaWYgKHBhdHRlcm4pIHsJCS8qIERvbid0 IHNpbXBsaWZ5IHRoaXMhICovCi0JCXdoaWNoYXJnID0gYXJnOwotCSAgICB9IGVsc2UgaWYgKG1n ZXRtZXRob2QgPT0gU05EX01MUykgewotCQlpZiAoYXJnKQotCQkgIHdoaWNoYXJnID0gaXN3aWxk KChjaGFyICopYXJnKSA/IE5VTEwgOiBhcmc7Ci0JCWVsc2UKLQkJICB3aGljaGFyZyA9IE5VTEw7 Ci0JICAgIH0gZWxzZSB7Ci0JCXdoaWNoYXJnID0gYXJnOwotCSAgICB9Ci0JICAgIGRlYnVnKEYx MTAsImZ0cCByZW1vdGVfZmlsZXMgbWdldG1ldGhvZCIsCi0JCSAgbWdldG1ldGhvZCA9PSBTTkRf TUxTID8gIk1MU0QiIDogIk5MU1QiLCAwKTsKLQkgICAgZGVidWcoRjExMCwiZnRwIHJlbW90ZV9m aWxlcyB3aGljaGFyZyIsd2hpY2hhcmcsMCk7Ci0KLQkgICAgeCA9IHJlY3ZyZXF1ZXN0KChtZ2V0 bWV0aG9kID09IFNORF9NTFMpID8gIk1MU0QiIDogIk5MU1QiLAotCQkJICAgIChjaGFyICopdG1w ZmlsbmFtW21sc2RlcHRoXSwKLQkJCSAgICAoY2hhciAqKXdoaWNoYXJnLAotCQkJICAgICJ3YiIs Ci0JCQkgICAgMCwKLQkJCSAgICAwLAotCQkJICAgIE5VTEwsCi0JCQkgICAgeGxhdGUsCi0JCQkg ICAgbGNzLAotCQkJICAgIHJjcwotCQkJICAgICk7Ci0JICAgIGlmICh4IDwgMCkgewkJLyogQ2hv c2VuIG1ldGhvZCB3YXNuJ3QgYWNjZXB0ZWQgKi8KLQkJaWYgKGZvcmNlZCkgewotCQkgICAgaWYg KGZ0cGNvZGUgPiA1MDAgJiYgZnRwY29kZSA8IDUwNSAmJiAhcXVpZXQpCi0JCSAgICAgIHByaW50 ZigiPyVzOiBOb3Qgc3VwcG9ydGVkIGJ5IHNlcnZlclxuIiwKLQkJCSAgICAgbWdldG1ldGhvZCA9 PSBTTkRfTUxTID8gIk1MU0QiIDogIk5MU1QiCi0JCQkgICAgICk7Ci0JCSAgICByZnJjID0gLTI7 CQkvKiBGYWlsICovCi0JCSAgICByZXR1cm4oTlVMTCk7Ci0JCX0KLQkJLyogTm90IGZvcmNlZCAt IGlmIE1MU0QgZmFpbGVkLCB0cnkgTkxTVCAqLwotCQlpZiAobWdldG1ldGhvZCA9PSBTTkRfTUxT KSB7ICAvKiBTZXJ2ZXIgbGllZCBhYm91dCBNTFNUICovCi0JCSAgICBzZnR0YWJbU0ZUX01MU1Rd ID0gMDsgICAgIC8qIFNvIGRpc2FibGUgaXQgKi8KLQkJICAgIG1sc3RvayA9IDA7CQkgICAgICAv KiBhbmQgKi8KLQkJICAgIG1nZXRtZXRob2QgPSBTTkRfTkxTOyAgICAgLyogdHJ5IE5MU1QgKi8K LQkJICAgIGNvbnRpbnVlOwotCQl9Ci0JCXJmcmMgPSAtMjsKLQkJcmV0dXJuKE5VTEwpOwotCSAg ICB9Ci0JfQotI2lmZGVmIEZUUF9QUk9YWQotICAgICAgICBpZiAocHJveHlfc3dpdGNoKSB7Ci0g ICAgICAgICAgICBwc3dpdGNoKCFwcm94eSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBGVFBfUFJP WFkgKi8KLSAgICAgICAgdG1wZmlscHRyW21sc2RlcHRoXSA9IGZvcGVuKChjaGFyICopdG1wZmls bmFtW21sc2RlcHRoXSwgInIiKTsKLSNpZm5kZWYgT1MyCi0JaWYgKHRtcGZpbHB0clttbHNkZXB0 aF0pIHsKLQkgICAgaWYgKCFmdHBfZGViICYmICFkZWJsb2cpCi0JICAgICAgdW5saW5rKHRtcGZp bG5hbVttbHNkZXB0aF0pOwotCX0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgIG5vdGVtcDoKLSAg ICAgICAgaWYgKCF0bXBmaWxwdHJbbWxzZGVwdGhdKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEw LCJmdHAgcmVtb3RlX2ZpbGVzIG9wZW4gZmFpbCIsdG1wZmlsbmFtW21sc2RlcHRoXSwwKTsKLSAg ICAgICAgICAgIGlmICgoIWRweWFjdGl2ZSB8fCBmdHBfZGViKSkKLSAgICAgICAgICAgICAgcHJp bnRmKCI/Q2FuJ3QgZmluZCBsaXN0IG9mIHJlbW90ZSBmaWxlcywgb29wc1xuIik7Ci0gICAgICAg ICAgICByZnJjID0gLTk7Ci0gICAgICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgICAgIH0KLQlp ZiAoZnRwX2RlYikKLQkgIHByaW50ZigiTElTVEZJTEU6ICVzXG4iLHRtcGZpbG5hbVttbHNkZXB0 aF0pOwotICAgIH0KLSAgICBidWZbMF0gPSBOVUw7Ci0gICAgYnVmW0ZUUE5BTUJVRkxFTi0xXSA9 IE5VTDsKLSAgICBidWZbRlRQTkFNQlVGTEVOLTJdID0gTlVMOwotCi0gICAgLyogV2UgaGF2ZSB0 byByZWRvIGFsbCB0aGlzIGJlY2F1c2UgdGhlIGZpcnN0IHRpbWUgd2FzIG9ubHkgZm9yICovCi0g ICAgLyogZm9yIGdldHRpbmcgdGhlIGZpbGUgbGlzdCwgbm93IGl0J3MgZm9yIGdldHRpbmcgZWFj aCBmaWxlICovCi0KLSAgICBpZiAoYXJnICYmIG1nZXRtZXRob2QgPT0gU05EX01MUykgewkvKiBN TFNEICovCi0JaWYgKCFwYXR0ZXJuICYmIGlzd2lsZCgoY2hhciAqKWFyZykpIHsKLQkgICAgcGF0 dGVybiA9IGFyZzsJCS8qIFdpbGQgYXJnIGlzIHJlYWxseSBhIHBhdHRlcm4gKi8KLQkgICAgaWYg KHBhdHRlcm4pCi0JICAgICAgaWYgKCEqcGF0dGVybikKLQkJcGF0dGVybiA9IE5VTEw7Ci0JICAg IGFyZyA9IE5VTEw7CQkJLyogYW5kIG5vdCBhbiBhcmcgKi8KLQl9Ci0JaWYgKG5ld19xdWVyeSkg ewkJLyogSW5pdGlhbCBxdWVyeT8gKi8KLQkgICAgY2R0byA9IChjaGFyICopYXJnOwkJLyogKG5v bndpbGQpIGFyZyBnaXZlbj8gKi8KLQkgICAgaWYgKGNkdG8pCi0JICAgICAgaWYgKCEqY2R0bykK LQkJY2R0byA9IE5VTEw7Ci0JICAgIGlmIChjZHRvKQkJCS8qIElmIHNvLCB0aGVuIENEIHRvIGl0 ICovCi0JICAgICAgZG9mdHBjd2QoY2R0bywwKTsKLQl9Ci0gICAgfQotICAgIG5ld19xdWVyeSA9 IDA7Ci0KLSAgICBpZiAoZmdldHMoKGNoYXIgKilidWYsIEZUUE5BTUJVRkxFTiwgdG1wZmlscHRy W21sc2RlcHRoXSkgPT0gTlVMTCkgewotICAgICAgICBmY2xvc2UodG1wZmlscHRyW21sc2RlcHRo XSk7Ci0gICAgICAgIHRtcGZpbHB0clttbHNkZXB0aF0gPSBOVUxMOwotCi0jaWZkZWYgT1MyCi0g ICAgICAgIGlmICghZnRwX2RlYiAmJiAhZGVibG9nKQotICAgICAgICAgIHVubGluayh0bXBmaWxu YW1bbWxzZGVwdGhdKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgaWYgKGZ0cF9kZWIgJiYg IWRlYmxvZykgewotICAgICAgICAgICAgcHJpbnRmKCIoVGVtcG9yYXJ5IGZpbGUgJXMgTk9UIGRl bGV0ZWQpXG4iLAotCQkgICAoY2hhciAqKXRtcGZpbG5hbVttbHNkZXB0aF0pOwotICAgICAgICB9 Ci0JaWYgKG1sc2RlcHRoIDw9IDApIHsJCS8qIEVPRiBhdCBkZXB0aCAwICovCi0JICAgIHJmcmMg PSAtMzsJCQkvKiBtZWFucyB3ZSdyZSBkb25lICovCi0JICAgIHJldHVybihOVUxMKTsKLQl9Ci0J cHJpbnRmKCJQT1BQSU5HKCVkKS4uLlxuIixtbHNkZXB0aC0xKTsgCi0JaWYgKHRtcGZpbG5hbVtt bHNkZXB0aF0pIGZyZWUodG1wZmlsbmFtW21sc2RlcHRoXSk7Ci0JbWxzZGVwdGgtLTsKLQlkb2Z0 cGNkdXAoKTsKLQl6Y2hkaXIoIi4uIik7CQkJLyogPC0tIE5vdCBwb3J0YWJsZSAqLwotCWdvdG8g YWdhaW47Ci0gICAgfQotICAgIGlmIChidWZbRlRQTkFNQlVGTEVOLTFdKSB7Ci0JcHJpbnRmKCI/ QlVGRkVSIE9WRVJGTE9XIC0tIEZUUCBOTFNUIG9yIE1MU0Qgc3RyaW5nIGxvbmdlciB0aGFuICVk XG4iLAotCSAgICAgICBGVFBOQU1CVUZMRU4KLQkgICAgICAgKTsKLQlkZWJ1ZyhGMTAxLCJyZW1v dGVfZmlsZXMgYnVmZmVyIG92ZXJydW4iLCIiLEZUUE5BTUJVRkxFTik7Ci0JcmV0dXJuKE5VTEwp OwotICAgIH0KLSAgICAvKiBkZWJ1ZyhGMTEwLCJmdHAgcmVtb3RlX2ZpbGVzIGJ1ZiAxIixidWYs MCk7ICovCi0gICAgaWYgKChjcCA9IChDSEFSICopY2tzdHJjaHIoKGNoYXIgKilidWYsJ1xuJykp ICE9IE5VTEwpCi0gICAgICAqY3AgPSAnXDAnOwotICAgIGlmICgoY3AgPSAoQ0hBUiAqKWNrc3Ry Y2hyKChjaGFyICopYnVmLCdccicpKSAhPSBOVUxMKQotICAgICAgKmNwID0gJ1wwJzsKLSAgICBk ZWJ1ZyhGMTEwLCJmdHAgcmVtb3RlX2ZpbGVzIGJ1ZiIsYnVmLDApOwotICAgIHJmcmMgPSAwOwot Ci0gICAgaWYgKGZ0cF9kZWIpCi0gICAgICBwcmludGYoIlslc11cbiIsKGNoYXIgKilidWYpOwot Ci0gICAgaGF2ZXNpemUgPSAoQ0tfT0ZGX1QpLTE7CQkvKiBJbml0aWFsaXplIGZpbGUgZmFjdHMu Li4gKi8KLSAgICBoYXZldHlwZSA9IDA7Ci0gICAgbWFrZXN0cigmaGF2ZW1kdG0sTlVMTCk7Ci0g ICAgcCA9IChjaGFyICopYnVmOwotCi0gICAgaWYgKG1nZXRtZXRob2QgPT0gU05EX05MUykgewkv KiBOTFNULi4uICovCi0JaWYgKHBhdHRlcm4pIHsKLQkgICAgaWYgKCFja21hdGNoKChjaGFyICop cGF0dGVybixwLChzZXJ2ZXJ0eXBlID09IFNZU19VTklYKSwxKSkKLQkgICAgICBnb3RvIGFnYWlu OwotCX0KLSAgICB9IGVsc2UgewkJCQkvKiBNTFNELi4uICovCi0JcCA9IHBhcnNlZmFjdHMoKGNo YXIgKilidWYpOwotCXN3aXRjaCAoaGF2ZXR5cGUpIHsKLQkgIGNhc2UgRlRZUF9GSUxFOgkJLyog RmlsZTogR2V0IGl0IGlmIGl0IG1hdGNoZXMgKi8KLQkgICAgaWYgKHBhdHRlcm4pIHsKLQkJaWYg KCFja21hdGNoKChjaGFyICopcGF0dGVybixwLChzZXJ2ZXJ0eXBlID09IFNZU19VTklYKSwxKSkK LQkJICBnb3RvIGFnYWluOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBGVFlQX0NESVI6 CQkvKiBDdXJyZW50IGRpcmVjdG9yeSAqLwotCSAgY2FzZSBGVFlQX1BESVI6CQkvKiBQYXJlbnQg ZGlyZWN0b3J5ICovCi0JICAgIGdvdG8gYWdhaW47CQkJLyogU2tpcCAqLwotCSAgY2FzZSBGVFlQ X0RJUjoJCS8qIChTdWIpRGlyZWN0b3J5ICovCi0JICAgIGlmICghcmVjdXJzaXZlKQkJLyogSWYg bm90IC9SRUNVUlNJVkUgKi8KLQkgICAgICBnb3RvIGFnYWluOwkJLyogU2tpcCAqLwotCSAgICBp ZiAobWxzZGVwdGggPCBNTFNERVBUSCkgewotCQljaGFyICogcDIgPSBOVUxMOwotCQltbHNkZXB0 aCsrOwotCQlwcmludGYoIlJFQ1VSU0lORyBbJXNdKCVkKS4uLlxuIixwLG1sc2RlcHRoKTsgCi0J CWlmIChkb2Z0cGN3ZChwLDApID4gMCkgewotCQkgICAgaW50IHg7Ci0JCSAgICBpZiAoIWNrc3Ry Y2hyKHAsJy8nKSkgewotCQkJLyogem1rZGlyKCkgbmVlZHMgZGlyc2VwICovCi0JCQlpZiAoKHAy ID0gKGNoYXIgKiltYWxsb2MoKGludClzdHJsZW4ocCkgKyAyKSkpIHsKLQkJCSAgICBzdHJjcHko cDIscCk7CS8qIFNBRkUgKi8KLQkJCSAgICBzdHJjYXQocDIsIi8iKTsJLyogU0FGRSAqLwotCQkJ ICAgIHAgPSBwMjsKLQkJCX0KLQkJICAgIH0KLSNpZmRlZiBOT01LRElSCi0JCSAgICB4ID0gLTE7 Ci0jZWxzZQotCQkgICAgeCA9IHpta2RpcihwKTsKLSNlbmRpZiAvKiBOT01LRElSICovCi0JCSAg ICBpZiAoeCA+IC0xKSB7Ci0JCQl6Y2hkaXIocCk7Ci0JCQlwID0gKGNoYXIgKilyZW1vdGVfZmls ZXMoMSxhcmcscGF0dGVybiwwKTsKLQkJCWlmIChwMikgZnJlZShwMik7Ci0JCSAgICB9IGVsc2Ug ewotCQkJcHJpbnRmKCI/bWtkaXIgZmFpbGVkOiBbJXNdIERlcHRoPSVkXG4iLAotCQkJICAgICAg IHAsCi0JCQkgICAgICAgbWxzZGVwdGgKLQkJCSAgICAgICApOwotCQkJbWxzcmVzZXQoKTsKLQkJ CWlmIChwMikgZnJlZShwMik7Ci0JCQlyZXR1cm4oTlVMTCk7Ci0JCSAgICB9Ci0JCX0gZWxzZSB7 Ci0JCSAgICBwcmludGYoIj9DV0QgZmFpbGVkOiBbJXNdIERlcHRoPSVkXG4iLHAsbWxzZGVwdGgp OwotCQkgICAgbWxzcmVzZXQoKTsKLQkJICAgIHJldHVybihOVUxMKTsKLQkJfQotCSAgICB9IGVs c2UgewotCQlwcmludGYoIk1BWCBESVJFQ1RPUlkgU1RBQ0sgREVQVEggRVhDRUVERUQ6ICVkXG4i LAotCQkgICAgICAgbWxzZGVwdGgKLQkJICAgICAgICk7Ci0JCW1sc3Jlc2V0KCk7Ci0JCXJldHVy bihOVUxMKTsKLQkgICAgfQotCX0KLSAgICB9Ci0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJs b2cpIHsKLQlkZWJ1ZyhGMTAxLCJyZW1vdGVfZmlsZXMgaGF2ZXNpemUiLCIiLGhhdmVzaXplKTsK LQlkZWJ1ZyhGMTAxLCJyZW1vdGVfZmlsZXMgaGF2ZXR5cGUiLCIiLGhhdmV0eXBlKTsKLQlkZWJ1 ZyhGMTEwLCJyZW1vdGVfZmlsZXMgaGF2ZW1kdG0iLGhhdmVtZHRtLDApOwkKLQlkZWJ1ZyhGMTEw LCJyZW1vdGVfZmlsZXMgbmFtZSIscCwwKTsJCi0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0g ICAgcmV0dXJuKChDSEFSICopcCk7Ci19Ci0KLS8qIE4gTyBUICBQIE8gUiBUIEEgQiBMIEUgISEh ICovCi0KLSNpZiAoU0laRU9GX1NIT1JUID09IDQpCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGZ0 cF91aW50MzI7Ci10eXBlZGVmIHNob3J0IGZ0cF9pbnQzMjsKLSNlbHNlCi0jaWYgKFNJWkVPRl9J TlQgPT0gNCkKLXR5cGVkZWYgdW5zaWduZWQgaW50IGZ0cF91aW50MzI7Ci10eXBlZGVmIGludCBm dHBfaW50MzI7Ci0jZWxzZQotI2lmIChTSVpFT0ZfTE9ORyA9PSA0KQotdHlwZWRlZiBVTE9ORyBm dHBfdWludDMyOwotdHlwZWRlZiBsb25nIGZ0cF9pbnQzMjsKLSNlbmRpZgotI2VuZGlmCi0jZW5k aWYKLQotLyogUGVyaGFwcyB1c2UgdGhlc2UgaW4gZ2VuZXJhbCwgY2VydGFpbmx5IHVzZSB0aGVt IGZvciBHU1NBUEkgKi8KLQotI2lmbmRlZiBsb29waW5nX3dyaXRlCi0jZGVmaW5lIGZ0cF9pbnQz MiBpbnQKLSNkZWZpbmUgZnRwX3VpbnQzMiB1bnNpZ25lZCBpbnQKLXN0YXRpYyBpbnQKLWxvb3Bp bmdfd3JpdGUoZmQsIGJ1ZiwgbGVuKQotICAgIGludCBmZDsKLSAgICByZWdpc3RlciBDT05TVCBj aGFyICpidWY7Ci0gICAgaW50IGxlbjsKLXsKLSAgICBpbnQgY2M7Ci0gICAgcmVnaXN0ZXIgaW50 IHdybGVuID0gbGVuOwotICAgIGRvIHsKLSAgICAgICAgY2MgPSBzZW5kKGZkLCAoU0VOREFSRzJU WVBFKWJ1Ziwgd3JsZW4sIDApOwotICAgICAgICBpZiAoY2MgPCAwKSB7Ci0gICAgICAgICAgICBp ZiAoZXJybm8gPT0gRUlOVFIpCi0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg cmV0dXJuKGNjKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ1ZiArPSBjYzsKLSAg ICAgICAgICAgIHdybGVuIC09IGNjOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAod3JsZW4gPiAw KTsKLSAgICByZXR1cm4obGVuKTsKLX0KLSNlbmRpZgotI2lmbmRlZiBsb29waW5nX3JlYWQKLXN0 YXRpYyBpbnQKLWxvb3BpbmdfcmVhZChmZCwgYnVmLCBsZW4pCi0gICAgaW50IGZkOwotICAgIHJl Z2lzdGVyIGNoYXIgKmJ1ZjsKLSAgICByZWdpc3RlciBpbnQgbGVuOwotewotICAgIGludCBjYywg bGVuMiA9IDA7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGNjID0gcmVjdihmZCwgKGNoYXIgKilidWYs IGxlbiwwKTsKLSAgICAgICAgaWYgKGNjIDwgMCkgewotICAgICAgICAgICAgaWYgKGVycm5vID09 IEVJTlRSKQotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJldHVybihjYyk7 ICAgICAgICAgICAgICAgICAvKiBlcnJubyBpcyBhbHJlYWR5IHNldCAqLwotICAgICAgICB9IGVs c2UgaWYgKGNjID09IDApIHsKLSAgICAgICAgICAgIHJldHVybihsZW4yKTsKLSAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgIGJ1ZiArPSBjYzsKLSAgICAgICAgICAgIGxlbjIgKz0gY2M7Ci0g ICAgICAgICAgICBsZW4gLT0gY2M7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChsZW4gPiAwKTsK LSAgICByZXR1cm4obGVuMik7Ci19Ci0jZW5kaWYgLyogbG9vcGluZ19yZWFkICovCi0KLSNkZWZp bmUgRVJSIC0yCi0KLSNpZmRlZiBDT01NRU5UCi1zdGF0aWMKLXNlY3VyZV9wdXRieXRlKGZkLCBj KSBpbnQgZmQ7IENIQVIgYzsgewotICAgIGludCByZXQ7Ci0KLSAgICB1Y2J1Zltub3V0KytdID0g YzsKLSAgICBpZiAobm91dCA9PSAobWF4YnVmID8gbWF4YnVmIDogYWN0dWFsYnVmKSAtIEZVREdF X0ZBQ1RPUikgewotICAgICAgICBub3V0ID0gMDsKLSAgICAgICAgaWYgKCFmdHBpc3NlY3VyZSgp KQotICAgICAgICAgIHJldCA9IHNlbmQoZmQsIChTRU5EQVJHMlRZUEUpdWNidWYsCi0gICAgICAg ICAgICAgICAgICAgICAobWF4YnVmID8gbWF4YnVmIDogYWN0dWFsYnVmKSAtIEZVREdFX0ZBQ1RP UiwgMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXQgPSBzZWN1cmVfcHV0YnVmKGZkLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNidWYsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobWF4YnVmID8gbWF4YnVmIDogYWN0dWFsYnVmKSAtIEZVREdFX0ZBQ1RPUgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuKHJldD9yZXQ6 Yyk7Ci0gICAgfQotICAgIHJldHVybihjKTsKLX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLS8q IHJldHVybnM6Ci0gKiAgICAgICAwICBvbiBzdWNjZXNzCi0gKiAgICAgIC0xICBvbiBlcnJvciAo ZXJybm8gc2V0KQotICogICAgICAtMiAgb24gc2VjdXJpdHkgZXJyb3IKLSAqLwotc3RhdGljIGlu dAotc2VjdXJlX2ZsdXNoKGZkKSBpbnQgZmQ7IHsKLSAgICBpbnQgcmMgPSAwOwotICAgIGludCBs ZW4gPSAwOwotCi0gICAgaWYgKG5vdXQgPiAwKSB7Ci0gICAgICAgIGxlbiA9IG5vdXQ7Ci0gICAg ICAgIGlmICghZnRwaXNzZWN1cmUoKSkgewotICAgICAgICAgICAgcmMgPSBzZW5kKGZkLCAoU0VO REFSRzJUWVBFKXVjYnVmLCBub3V0LCAwKTsKLSAgICAgICAgICAgIG5vdXQgPSAwOwotICAgICAg ICAgICAgZ290byB4Zmx1c2g7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByYyA9IHNl Y3VyZV9wdXRidWYoZmQsIHVjYnVmLCBub3V0KTsKLSAgICAgICAgICAgIGlmIChyYykKLSAgICAg ICAgICAgICAgZ290byB4Zmx1c2g7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmMgPSAoIWZ0cGlz c2VjdXJlKCkpID8gMCA6IHNlY3VyZV9wdXRidWYoZmQsIChDSEFSICopIiIsIG5vdXQgPSAwKTsK LQotICB4Zmx1c2g6Ci0gICAgaWYgKHJjID4gLTEgJiYgbGVuID4gMCAmJiBmZGlzcGxhICE9IFhZ RkRfQikgewotCXNwYWNrZXRzKys7Ci0gICAgICAgIHNwa3RsID0gbGVuOwotICAgICAgICBmdHNj cmVlbihTQ1JfUFQsJ0QnLChDS19PRkZfVClzcGFja2V0cyxOVUxMKTsKLSAgICB9Ci0gICAgcmV0 dXJuKHJjKTsKLX0KLQotI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IChub3QgdXNlZCkgKi8KLS8qIHJldHVybnM6Ci0gKiAgICAgIGM+PTAgIG9uIHN1Y2Nlc3MKLSAq ICAgICAgLTEgICAgb24gZXJyb3IKLSAqICAgICAgLTIgICAgb24gc2VjdXJpdHkgZXJyb3IKLSAq Lwotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1zZWN1cmVfcHV0YyhjaGFyIGMsIGludCBm ZCkKLSNlbHNlCi1zZWN1cmVfcHV0YyhjLCBmZCkgY2hhciBjOyBpbnQgZmQ7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLS8qIHNlY3VyZV9wdXRjICovIHsKLSAgICByZXR1cm4oc2VjdXJlX3B1dGJ5 dGUoZmQsIChDSEFSKSBjKSk7Ci19Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKiByZXR1cm5z OgotICogICAgICBuYnl0ZSBvbiBzdWNjZXNzCi0gKiAgICAgIC0xICBvbiBlcnJvciAoZXJybm8g c2V0KQotICogICAgICAtMiAgb24gc2VjdXJpdHkgZXJyb3IKLSAqLwotc3RhdGljIGludAotI2lm ZGVmIENLX0FOU0lDCi1zZWN1cmVfd3JpdGUoaW50IGZkLCBDSEFSICogYnVmLCB1bnNpZ25lZCBp bnQgbmJ5dGUpCi0jZWxzZQotc2VjdXJlX3dyaXRlKGZkLCBidWYsIG5ieXRlKQotICAgIGludCBm ZDsKLSAgICBDSEFSICogYnVmOwotICAgIHVuc2lnbmVkIGludCBuYnl0ZTsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotewotICAgIGludCByZXQ7Ci0KLSNpZmRlZiBGVFBfVElNRU9VVCAgICAKLSAg ICBmdHBfdGltZWRfb3V0ID0gMDsKLSAgICBpZiAoY2hlY2tfZGF0YV9jb25uZWN0aW9uKGZkLDEp IDwgMCkgewotCWZ0cF90aW1lZF9vdXQgPSAxOwotCXJldHVybigtMyk7Ci0gICAgfQotI2VuZGlm CS8qIEZUUF9USU1FT1VUICovCi0KLSAgICBpZiAoIWZ0cGlzc2VjdXJlKCkpIHsKLSAgICAgICAg aWYgKG5vdXQgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKHJldCA9IHNlbmQoZmQsIChTRU5EQVJH MlRZUEUpdWNidWYsIG5vdXQsIDApKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybihyZXQpOwot ICAgICAgICAgICAgbm91dCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHNlbmQoZmQs KFNFTkRBUkcyVFlQRSlidWYsbmJ5dGUsMCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCB1 Y2J1ZmxlbiA9IChtYXhidWYgPyBtYXhidWYgOiBhY3R1YWxidWYpIC0gRlVER0VfRkFDVE9SOwot ICAgICAgICBpbnQgYnNlbnQgPSAwOwotCi0gICAgICAgIHdoaWxlIChic2VudCA8IG5ieXRlKSB7 Ci0gICAgICAgICAgICBpbnQgYjJjcCA9ICgobmJ5dGUgLSBic2VudCkgPiAodWNidWZsZW4gLSBu b3V0KSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAodWNidWZsZW4gLSBub3V0KSA6IChuYnl0 ZSAtIGJzZW50KSk7Ci0jaWZkZWYgREVCVUcKLQkgICAgaWYgKGRlYmxvZykgewotCQlkZWJ1ZyhG MTAxLCJzZWN1cmVfd3JpdGUgdWNidWZsZW4iLCIiLHVjYnVmbGVuKTsKLQkJZGVidWcoRjEwMSwi c2VjdXJlX3dyaXRlIHVjYnVmc2l6IiwiIix1Y2J1ZnNpeik7Ci0JCWRlYnVnKEYxMDEsInNlY3Vy ZV93cml0ZSBic2VudCIsIiIsYnNlbnQpOwotCQlkZWJ1ZyhGMTAxLCJzZWN1cmVfd3JpdGUgYjJj cCIsIiIsYjJjcCk7Ci0JICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgICAgICAgICAgbWVt Y3B5KCZ1Y2J1Zltub3V0XSwmYnVmW2JzZW50XSxiMmNwKTsKLSAgICAgICAgICAgIG5vdXQgKz0g YjJjcDsKLSAgICAgICAgICAgIGJzZW50ICs9IGIyY3A7Ci0KLSAgICAgICAgICAgIGlmIChub3V0 ID09IHVjYnVmbGVuKSB7Ci0gICAgICAgICAgICAgICAgbm91dCA9IDA7Ci0gICAgICAgICAgICAg ICAgcmV0ID0gc2VjdXJlX3B1dGJ1ZihmZCwgdWNidWYsIHVjYnVmbGVuKTsKLSAgICAgICAgICAg ICAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybihyZXQpOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybihic2VudCk7Ci0gICAgfQotfQotCi0v KiByZXR1cm5zOgotICogICAgICAgMCAgb24gc3VjY2VzcwotICogICAgICAtMSAgb24gZXJyb3Ig KGVycm5vIHNldCkKLSAqICAgICAgLTIgIG9uIHNlY3VyaXR5IGVycm9yCi0gKi8KLXN0YXRpYyBp bnQKLSNpZmRlZiBDS19BTlNJQwotc2VjdXJlX3B1dGJ1ZihpbnQgZmQsIENIQVIgKiBidWYsIHVu c2lnbmVkIGludCBuYnl0ZSkKLSNlbHNlCi1zZWN1cmVfcHV0YnVmKGZkLCBidWYsIG5ieXRlKSBp bnQgZmQ7IENIQVIgKiBidWY7IHVuc2lnbmVkIGludCBuYnl0ZTsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotewotICAgIHN0YXRpYyBjaGFyICpvdXRidWYgPSBOVUxMOyAgICAgICAgIC8qIG91dHB1 dCBjaXBoZXJ0ZXh0ICovCi0jaWZkZWYgRlRQX1NFQ1VSSVRZCi0gICAgc3RhdGljIHVuc2lnbmVk IGludCBidWZzaXplID0gMDsgICAgLyogc2l6ZSBvZiBvdXRidWYgKi8KLSNlbmRpZiAvKiBGVFBf U0VDVVJJVFkgKi8KLSAgICBmdHBfaW50MzIgbGVuZ3RoICAgPSAwOwotICAgIGZ0cF91aW50MzIg bmV0X2xlbiA9IDA7Ci0KLSAgICAvKiBPdGhlciBhdXRoIHR5cGVzIGdvIGhlcmUgLi4uICovCi0j aWZkZWYgQ0tfU1NMCi0gICAgaWYgKHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZykgewotICAgICAg ICBpbnQgY291bnQsIGVycm9yOwotCi0gICAgICAgIC8qIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2Vu ZCBhbiBlbXB0eSBidWZmZXIgd2hlbiB1c2luZyBTU0wvVExTICovCi0gICAgICAgIGlmICggbmJ5 dGUgPT0gMCApCi0JICByZXR1cm4oMCk7Ci0KLSAgICAgICAgY291bnQgPSBTU0xfd3JpdGUoc3Ns X2Z0cF9kYXRhX2NvbiwgYnVmLCBuYnl0ZSk7Ci0gICAgICAgIGVycm9yID0gU1NMX2dldF9lcnJv cihzc2xfZnRwX2RhdGFfY29uLGNvdW50KTsKLSAgICAgICAgc3dpdGNoIChlcnJvcikgewotICAg ICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAg ICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKLSAgICAgICAgICBjYXNlIFNTTF9FUlJP Ul9XQU5UX1JFQUQ6Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKLSNpZmRlZiBO VAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBnbGUgPSBHZXRMYXN0RXJyb3Io KTsKLQkJaWYgKGdsZSA9PSAwKQotCQkgIHJldHVybigwKTsKLQkJZGVidWcoRjExMSwic2VjdXJl X3B1dGJ1ZiIsIlNTTF9FUlJPUl9TWVNDQUxMIixnbGUpOwotICAgICAgICAgICAgfQotI2VuZGlm IC8qIE5UICovCi0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKLSAg ICAgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfWkVS T19SRVRVUk46Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFNTTF9zaHV0ZG93bihz c2xfZnRwX2RhdGFfY29uKTsKLSAgICAgICAgICAgIFNTTF9mcmVlKHNzbF9mdHBfZGF0YV9jb24p OwotICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnID0gMDsKLSAgICAgICAgICAg IHNzbF9mdHBfZGF0YV9jb24gPSBOVUxMOwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAgICBz b2NrZXRfY2xvc2UoZGF0YSk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVTRV9TSFVU RE9XTgotICAgICAgICAgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKLSNlbmRpZiAvKiBVU0VfU0hV VERPV04gKi8KLSAgICAgICAgICAgIGNsb3NlKGRhdGEpOwotI2VuZGlmIC8qIFRDUElQTElCICov Ci0gICAgICAgICAgICBkYXRhID0gLTE7Ci0gICAgICAgICAgICBnbG9iYWxkaW4gPSBkYXRhOwot ICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4oLTEpOwot ICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lmZGVmIEZUUF9TUlAKLSAgICBpZiAoY2tf c3JwX2lzX2luc3RhbGxlZCgpICYmIChzdHJjbXAoYXV0aF90eXBlLCAiU1JQIikgPT0gMCkpIHsK LSAgICAgICAgaWYgKGJ1ZnNpemUgPCBuYnl0ZSArIEZVREdFX0ZBQ1RPUikgewotICAgICAgICAg ICAgaWYgKG91dGJ1Zj8KLSAgICAgICAgICAgICAgICAob3V0YnVmID0gcmVhbGxvYyhvdXRidWYs ICh1bnNpZ25lZCkgKG5ieXRlICsgRlVER0VfRkFDVE9SKSkpOgotICAgICAgICAgICAgICAgIChv dXRidWYgPSBtYWxsb2MoKHVuc2lnbmVkKSAobmJ5dGUgKyBGVURHRV9GQUNUT1IpKSkpIHsKLSAg ICAgICAgICAgICAgICBidWZzaXplID0gbmJ5dGUgKyBGVURHRV9GQUNUT1I7Ci0gICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJ1ZnNpemUgPSAwOwotICAgICAgICAgICAgICAg IHNlY3VyZV9lcnJvcigiJXMgKGluIG1hbGxvYyBvZiBQUk9UIGJ1ZmZlcikiLCBja19lcnJzdHIo KSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKEVSUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKChsZW5ndGggPQotICAgICAgICAgICAgIHNycF9lbmNvZGUoZnRwX2Rw bCA9PSBGUExfUFJWLAotICAgICAgICAgICAgICAgICAgICAgICAgKENIQVIgKikgYnVmLAotICAg ICAgICAgICAgICAgICAgICAgICAgKENIQVIgKikgb3V0YnVmLAotICAgICAgICAgICAgICAgICAg ICAgICAgbmJ5dGUKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICApIDwg MCkgewotICAgICAgICAgICAgc2VjdXJlX2Vycm9yICgic3JwX2VuY29kZSBmYWlsZWQiKTsKLSAg ICAgICAgICAgIHJldHVybiBFUlI7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogRlRQX1NS UCAqLwotI2lmZGVmIEZUUF9LUkI0Ci0gICAgaWYgKGNrX2tyYjRfaXNfaW5zdGFsbGVkKCkgJiYg KHN0cmNtcChhdXRoX3R5cGUsICJLRVJCRVJPU19WNCIpID09IDApKSB7Ci0gICAgICAgIHN0cnVj dCBzb2NrYWRkcl9pbiBteWFkZHIsIGhpc2FkZHI7Ci0gICAgICAgIEdTT0NLTkFNRV9UIGxlbjsK LSAgICAgICAgbGVuID0gc2l6ZW9mKG15YWRkcik7Ci0gICAgICAgIGlmIChnZXRzb2NrbmFtZShm ZCwgKHN0cnVjdCBzb2NrYWRkciopJm15YWRkciwgJmxlbikgPCAwKSB7Ci0gICAgICAgICAgICBz ZWN1cmVfZXJyb3IoInNlY3VyZV9wdXRidWY6IGdldHNvY2tuYW1lIGZhaWxlZCIpOwotICAgICAg ICAgICAgcmV0dXJuKEVSUik7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuID0gc2l6ZW9mKGhpc2Fk ZHIpOwotICAgICAgICBpZiAoZ2V0cGVlcm5hbWUoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZoaXNh ZGRyLCAmbGVuKSA8IDApIHsKLSAgICAgICAgICAgIHNlY3VyZV9lcnJvcigic2VjdXJlX3B1dGJ1 ZjogZ2V0cGVlcm5hbWUgZmFpbGVkIik7Ci0gICAgICAgICAgICByZXR1cm4oRVJSKTsKLSAgICAg ICAgfQotICAgICAgICBpZiAoYnVmc2l6ZSA8IG5ieXRlICsgRlVER0VfRkFDVE9SKSB7Ci0gICAg ICAgICAgICBpZiAob3V0YnVmID8KLSAgICAgICAgICAgICAgICAob3V0YnVmID0gcmVhbGxvYyhv dXRidWYsICh1bnNpZ25lZCkgKG5ieXRlICsgRlVER0VfRkFDVE9SKSkpOgotICAgICAgICAgICAg ICAgICAob3V0YnVmID0gbWFsbG9jKCh1bnNpZ25lZCkgKG5ieXRlICsgRlVER0VfRkFDVE9SKSkp KSB7Ci0gICAgICAgICAgICAgICAgYnVmc2l6ZSA9IG5ieXRlICsgRlVER0VfRkFDVE9SOwotICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBidWZzaXplID0gMDsKLSAgICAgICAg ICAgICAgICBzZWN1cmVfZXJyb3IoIiVzIChpbiBtYWxsb2Mgb2YgUFJPVCBidWZmZXIpIiwgY2tf ZXJyc3RyKCkpOwotICAgICAgICAgICAgICAgIHJldHVybihFUlIpOwotICAgICAgICAgICAgfQot ICAgICAgICB9Ci0gICAgICAgIGlmIChmdHBfZHBsID09IEZQTF9QUlYpIHsKLSAgICAgICAgICAg IGxlbmd0aCA9IGtyYl9ta19wcml2KGJ1ZiwgKENIQVIgKikgb3V0YnVmLCBuYnl0ZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9zY2hlZCwKLSNpZmRlZiBLUkI1MjQKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9jcmVkLnNlc3Npb24sCi0jZWxzZSAv KiBLUkI1MjQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdHBfY3JlZC5z ZXNzaW9uLAotI2VuZGlmIC8qIEtSQjUyNCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJm15YWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoaXNhZGRy Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgbGVuZ3RoID0ga3JiX21rX3NhZmUoYnVmLCAoQ0hBUiAqKSBvdXRidWYsIG5i eXRlLAotI2lmZGVmIEtSQjUyNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRw X2NyZWQuc2Vzc2lvbiwKLSNlbHNlIC8qIEtSQjUyNCAqLwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmZ0cF9jcmVkLnNlc3Npb24sCi0jZW5kaWYgLyogS1JCNTI0ICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXlhZGRyLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmhpc2FkZHIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxlbmd0aCA9PSAtMSkgewotICAgICAgICAgICAg c2VjdXJlX2Vycm9yKCJrcmJfbWtfJXMgZmFpbGVkIGZvciBLRVJCRVJPU19WNCIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgZnRwX2RwbCA9PSBGUExfUFJWID8gInByaXYiIDogInNhZmUiKTsK LSAgICAgICAgICAgIHJldHVybihFUlIpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIEZU UF9LUkI0ICovCi0jaWZkZWYgRlRQX0dTU0FQSQotICAgIGlmIChja19nc3NhcGlfaXNfaW5zdGFs bGVkKCkgJiYgKHN0cmNtcChhdXRoX3R5cGUsICJHU1NBUEkiKSA9PSAwKSkgewotICAgICAgICBn c3NfYnVmZmVyX2Rlc2MgaW5fYnVmLCBvdXRfYnVmOwotICAgICAgICBPTV91aW50MzIgbWFqX3N0 YXQsIG1pbl9zdGF0OwotICAgICAgICBpbnQgY29uZl9zdGF0ZTsKLQotICAgICAgICBpbl9idWYu dmFsdWUgPSBidWY7Ci0gICAgICAgIGluX2J1Zi5sZW5ndGggPSBuYnl0ZTsKLSAgICAgICAgbWFq X3N0YXQgPSBnc3Nfc2VhbCgmbWluX3N0YXQsIGdjb250ZXh0LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChmdHBfZHBsID09IEZQTF9QUlYpLCAvKiBjb25maWRlbnRpYWwgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19RT1BfREVGQVVMVCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmaW5fYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25m X3N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRfYnVmCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgaWYgKG1hal9zdGF0ICE9IEdTU19TX0NPTVBM RVRFKSB7Ci0gICAgICAgICAgICAvKiBnZW5lcmFsbHkgbmVlZCB0byBkZWFsICovCi0gICAgICAg ICAgICAvKiBpZS4gc2hvdWxkIGxvb3AsIGJ1dCBmb3Igbm93IGp1c3QgZmFpbCAqLwotICAgICAg ICAgICAgdXNlcl9nc3NfZXJyb3IobWFqX3N0YXQsIG1pbl9zdGF0LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgZnRwX2RwbCA9PSBGUExfUFJWPwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkdTU0FQSSBzZWFsIGZhaWxlZCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAiR1NT QVBJIHNpZ24gZmFpbGVkIik7Ci0gICAgICAgICAgICByZXR1cm4oRVJSKTsKLSAgICAgICAgfQot ICAgICAgICBpZiAoYnVmc2l6ZSA8IG91dF9idWYubGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAo b3V0YnVmID8KLSAgICAgICAgICAgICAgICAob3V0YnVmID0gcmVhbGxvYyhvdXRidWYsICh1bnNp Z25lZCkgb3V0X2J1Zi5sZW5ndGgpKToKLSAgICAgICAgICAgICAgICAob3V0YnVmID0gbWFsbG9j KCh1bnNpZ25lZCkgb3V0X2J1Zi5sZW5ndGgpKSkgewotICAgICAgICAgICAgICAgIGJ1ZnNpemUg PSBvdXRfYnVmLmxlbmd0aDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg YnVmc2l6ZSA9IDA7Ci0gICAgICAgICAgICAgICAgc2VjdXJlX2Vycm9yKCIlcyAoaW4gbWFsbG9j IG9mIFBST1QgYnVmZmVyKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrX2VycnN0 cigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oRVJSKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgICAgICBtZW1jcHkob3V0YnVmLCBvdXRfYnVmLnZhbHVlLCBsZW5ndGg9b3V0X2J1 Zi5sZW5ndGgpOwotICAgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJm1pbl9zdGF0LCAmb3V0X2J1 Zik7Ci0gICAgfQotI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KLSAgICBuZXRfbGVuID0gaHRvbmwo KFVMT05HKSBsZW5ndGgpOwotICAgIGlmIChsb29waW5nX3dyaXRlKGZkLCAoY2hhciAqKSZuZXRf bGVuLCA0KSA9PSAtMSkKLSAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKGxvb3Bpbmdfd3JpdGUo ZmQsIG91dGJ1ZiwgbGVuZ3RoKSAhPSBsZW5ndGgpCi0gICAgICByZXR1cm4oLTEpOwotICAgIHJl dHVybigwKTsKLX0KLQotCi0vKiBmYyA9IDAgbWVhbnMgdG8gZ2V0IGEgYnl0ZTsgbm9uemVybyBt ZWFucyB0byBpbml0aWFsaXplIGJ1ZmZlciBwb2ludGVycyAqLwotCi1zdGF0aWMgaW50Ci1zZWN1 cmVfZ2V0Ynl0ZShmZCxmYykgaW50IGZkLGZjOyB7Ci0gICAgLyogbnVtYmVyIG9mIGNoYXJzIGlu IHVjYnVmLCBwb2ludGVyIGludG8gdWNidWYgKi8KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG5p biA9IDAsIGJ1ZnAgPSAwOwotICAgIGludCBrZXJyb3I7Ci0gICAgZnRwX3VpbnQzMiBsZW5ndGg7 Ci0KLSAgICBpZiAoZmMpIHsKLQluaW4gPSBidWZwID0gMDsKLQl1Y2J1ZlswXSA9IE5VTDsKLQly ZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmIChuaW4gPT0gMCkgewotICAgICAgICBpZiAoaXNjYW5j ZWxlZCgpKQotICAgICAgICAgIHJldHVybigtOSk7Ci0KLSNpZmRlZiBGVFBfVElNRU9VVAotCWlm IChjaGVja19kYXRhX2Nvbm5lY3Rpb24oZmQsMCkgPCAwKQotCSAgcmV0dXJuKC0zKTsKLSNlbmRp ZgkvKiBGVFBfVElNRU9VVCAqLwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIGlmIChzc2xfZnRw X2RhdGFfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgICAgIGludCBjb3VudCwgZXJyb3I7Ci0gICAg ICAgICAgICBjb3VudCA9IFNTTF9yZWFkKHNzbF9mdHBfZGF0YV9jb24sIHVjYnVmLCB1Y2J1ZnNp eik7Ci0gICAgICAgICAgICBlcnJvciA9IFNTTF9nZXRfZXJyb3Ioc3NsX2Z0cF9kYXRhX2Nvbixj b3VudCk7Ci0jaWZkZWYgREVCVUcKLQkgICAgaWYgKGVycm9yICE9IFNTTF9FUlJPUl9OT05FKQot CSAgICAgIGRlYnVnKEYxMDEsImZ0cCBzZWN1cmVfZ2V0Ynl0ZSBlcnJvciIsIiIsZXJyb3IpOwot CSAgICBpZiAoY291bnQgPT0gMCkKLQkgICAgICBkZWJ1ZyhGMTAxLCJmdHAgc2VjdXJlX2dldGJ5 dGUgY291bnQiLCIiLGNvdW50KTsKLSNlbmRpZgkvKiBERUJVRyAqLwotICAgICAgICAgICAgc3dp dGNoIChlcnJvcikgewotICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgotCQlpZiAo Y291bnQgPiAwKSB7Ci0JCSAgICBuaW4gPSBidWZwID0gY291bnQ7Ci0JCSAgICBycGFja2V0cysr OwotCQkgICAgcGt0bnVtKys7Ci0JCSAgICBpZiAoZmRpc3BsYSAhPSBYWUZEX0IpIHsKLQkJCXJw a3RsID0gY291bnQ7Ci0JCQlmdHNjcmVlbihTQ1JfUFQsJ0QnLChDS19PRkZfVClycGFja2V0cyxO VUxMKTsKLQkJICAgIH0KLQkJICAgIGJyZWFrOwotCQl9Ci0gICAgICAgICAgICAgIGNhc2UgU1NM X0VSUk9SX1dBTlRfV1JJVEU6Ci0gICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVB RDoKLSAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKLSNpZmRlZiBOVAotICAg ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGdsZSA9IEdldExhc3RFcnJv cigpOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgICBj YXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgotICAgICAgICAgICAgICBjYXNlIFNTTF9F UlJPUl9TU0w6Ci0gICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgotICAg ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG5pbiA9IGJ1ZnAgPSBjb3VudCA9 IDA7Ci0gICAgICAgICAgICAgICAgU1NMX3NodXRkb3duKHNzbF9mdHBfZGF0YV9jb24pOwotICAg ICAgICAgICAgICAgIFNTTF9mcmVlKHNzbF9mdHBfZGF0YV9jb24pOwotICAgICAgICAgICAgICAg IHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZyA9IDA7Ci0gICAgICAgICAgICAgICAgc3NsX2Z0cF9k YXRhX2NvbiA9IE5VTEw7Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgICAgICAgICBzb2NrZXRf Y2xvc2UoZGF0YSk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVTRV9TSFVURE9XTgot ICAgICAgICAgICAgICAgIHNodXRkb3duKGRhdGEsIDErMSk7Ci0jZW5kaWYgLyogVVNFX1NIVVRE T1dOICovCi0gICAgICAgICAgICAgICAgY2xvc2UoZGF0YSk7Ci0jZW5kaWYgLyogVENQSVBMSUIg Ki8KLSAgICAgICAgICAgICAgICBkYXRhID0gLTE7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsZGlu ID0gZGF0YTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgewotICAgICAgICAgICAgICBr ZXJyb3IgPSBsb29waW5nX3JlYWQoZmQsIChjaGFyICopJmxlbmd0aCwgc2l6ZW9mKGxlbmd0aCkp OwotICAgICAgICAgICAgICBpZiAoa2Vycm9yICE9IHNpemVvZihsZW5ndGgpKSB7Ci0gICAgICAg ICAgICAgICAgICBzZWN1cmVfZXJyb3IoIkNvdWxkbid0IHJlYWQgUFJPVCBidWZmZXIgbGVuZ3Ro OiAlZC8lcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2Vycm9yLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGtlcnJvciA9PSAtMSA/IGNrX2VycnN0cigpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAicHJlbWF0dXJlIEVPRiIKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKEVSUik7Ci0g ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZGVidWcoRjEwMSwic2VjdXJlX2dldGJ5dGUg bGVuZ3RoIiwiIixsZW5ndGgpOwotICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzZWN1cmVfZ2V0 Ynl0ZSBudG9obChsZW5ndGgpIiwiIixudG9obChsZW5ndGgpKTsKLQotICAgICAgICAgICAgICBs ZW5ndGggPSAoVUxPTkcpIG50b2hsKGxlbmd0aCk7Ci0gICAgICAgICAgICAgIGlmIChsZW5ndGgg PiBtYXhidWYpIHsKLSAgICAgICAgICAgICAgICAgIHNlY3VyZV9lcnJvcigiTGVuZ3RoICglZCkg b2YgUFJPVCBidWZmZXIgPiBQQlNaPSV1IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4YnVmCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybihFUlIp OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmICgoa2Vycm9yID0gbG9vcGluZ19y ZWFkKGZkLCB1Y2J1ZiwgbGVuZ3RoKSkgIT0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICBz ZWN1cmVfZXJyb3IoIkNvdWxkbid0IHJlYWQgJXUgYnl0ZSBQUk9UIGJ1ZmZlcjogJXMiLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBrZXJyb3IgPT0gLTEgPyBja19lcnJzdHIoKSA6ICJwcmVtYXR1cmUgRU9GIgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICByZXR1 cm4oRVJSKTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8qIE90aGVyIGF1dGgg dHlwZXMgZ28gaGVyZSAuLi4gKi8KLSNpZmRlZiBGVFBfU1JQCi0gICAgICAgICAgICAgIGlmIChz dHJjbXAoYXV0aF90eXBlLCAiU1JQIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgaWYgKChu aW4gPSBidWZwID0gc3JwX2RlY29kZSAoZnRwX2RwbCA9PSBGUExfUFJWLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENIQVIgKikgdWNidWYsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y2J1ZiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAg ICAgICAgICAgICApID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgc2VjdXJlX2Vycm9y ICgic3JwX2VuY29kZSBmYWlsZWQiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVS UjsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9T UlAgKi8KLSNpZmRlZiBGVFBfS1JCNAotICAgICAgICAgICAgICBpZiAoc3RyY21wKGF1dGhfdHlw ZSwgIktFUkJFUk9TX1Y0IikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2th ZGRyX2luIG15YWRkciwgaGlzYWRkcjsKLSAgICAgICAgICAgICAgICAgIEdTT0NLTkFNRV9UIGxl bjsKLSAgICAgICAgICAgICAgICAgIGxlbiA9IHNpemVvZihteWFkZHIpOwotICAgICAgICAgICAg ICAgICAgaWYgKGdldHNvY2tuYW1lKGZkLCAoc3RydWN0IHNvY2thZGRyKikmbXlhZGRyLCAmbGVu KSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICBzZWN1cmVfZXJyb3IoInNlY3VyZV9wdXRi dWY6IGdldHNvY2tuYW1lIGZhaWxlZCIpOwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybihF UlIpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgbGVuID0gc2l6ZW9m KGhpc2FkZHIpOwotICAgICAgICAgICAgICAgICAgaWYgKGdldHBlZXJuYW1lKGZkLCAoc3RydWN0 IHNvY2thZGRyKikmaGlzYWRkciwgJmxlbikgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg c2VjdXJlX2Vycm9yKCJzZWN1cmVfcHV0YnVmOiBnZXRwZWVybmFtZSBmYWlsZWQiKTsKLSAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oRVJSKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgIGlmIChmdHBfZHBsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAga2Vycm9y ID0ga3JiX3JkX3ByaXYodWNidWYsIGxlbmd0aCwgZnRwX3NjaGVkLAotI2lmZGVmIEtSQjUyNAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9jcmVkLnNlc3Np b24sCi0jZWxzZSAvKiBLUkI1MjQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmZnRwX2NyZWQuc2Vzc2lvbiwKLSNlbmRpZiAvKiBLUkI1MjQgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGlzYWRkciwgJm15YWRkciwg JmZ0cF9tc2dfZGF0YSk7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgICAgICAgIGtlcnJvciA9IGtyYl9yZF9zYWZlKHVjYnVmLCBsZW5ndGgsCi0jaWZkZWYgS1JC NTI0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2NyZWQu c2Vzc2lvbiwKLSNlbHNlIC8qIEtSQjUyNCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZmdHBfY3JlZC5zZXNzaW9uLAotI2VuZGlmIC8qIEtSQjUyNCAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoaXNhZGRyLCAmbXlh ZGRyLCAmZnRwX21zZ19kYXRhKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgIGlmIChrZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgICBzZWN1cmVfZXJyb3IoImty Yl9yZF8lcyBmYWlsZWQgZm9yIEtFUkJFUk9TX1Y0ICglcykiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmdHBfZHBsID09IEZQTF9QUlYgPyAicHJpdiIgOiAic2FmZSIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyYl9nZXRfZXJyX3RleHQoa2Vycm9y KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKEVSUik7Ci0gICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICBtZW1jcHkodWNidWYsZnRwX21zZ19kYXRhLmFwcF9kYXRh LGZ0cF9tc2dfZGF0YS5hcHBfbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgIG5pbiA9IGJ1ZnAg PSBmdHBfbXNnX2RhdGEuYXBwX2xlbmd0aDsKLSAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIEZU UF9LUkI0ICovCi0jaWZkZWYgRlRQX0dTU0FQSQotICAgICAgICAgICAgICBpZiAoc3RyY21wKGF1 dGhfdHlwZSwgIkdTU0FQSSIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgIGdzc19idWZmZXJf ZGVzYyB4bWl0X2J1ZiwgbXNnX2J1ZjsKLSAgICAgICAgICAgICAgICAgIE9NX3VpbnQzMiBtYWpf c3RhdCwgbWluX3N0YXQ7Ci0gICAgICAgICAgICAgICAgICBpbnQgY29uZl9zdGF0ZTsKLQotICAg ICAgICAgICAgICAgICAgeG1pdF9idWYudmFsdWUgPSB1Y2J1ZjsKLSAgICAgICAgICAgICAgICAg IHhtaXRfYnVmLmxlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgICAgICAgICAgIGNvbmZfc3RhdGUg PSAoZnRwX2RwbCA9PSBGUExfUFJWKTsKLSAgICAgICAgICAgICAgICAgIC8qIGRlY3J5cHQvdmVy aWZ5IHRoZSBtZXNzYWdlICovCi0gICAgICAgICAgICAgICAgICBtYWpfc3RhdCA9IGdzc191bnNl YWwoJm1pbl9zdGF0LCBnY29udGV4dCwgJnhtaXRfYnVmLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZtc2dfYnVmLCAmY29uZl9zdGF0ZSwgTlVMTCk7Ci0gICAgICAg ICAgICAgICAgICBpZiAobWFqX3N0YXQgIT0gR1NTX1NfQ09NUExFVEUpIHsKLSAgICAgICAgICAg ICAgICAgICAgICB1c2VyX2dzc19lcnJvcihtYWpfc3RhdCwgbWluX3N0YXQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ0cF9kcGwgPT0gRlBMX1BSVik/Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB1bnNlYWxpbmcgRU5DIG1lc3Nh Z2UiOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdW5zZWFs aW5nIE1JQyBtZXNzYWdlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUjsKLSAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIG1lbWNweSh1Y2J1ZiwgbXNnX2J1 Zi52YWx1ZSwgbmluID0gYnVmcCA9IG1zZ19idWYubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAg IGdzc19yZWxlYXNlX2J1ZmZlcigmbWluX3N0YXQsICZtc2dfYnVmKTsKLSAgICAgICAgICAgICAg fQotI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KLSAgICAgICAgICAgICAgLyogT3RoZXIgYXV0aCB0 eXBlcyBnbyBoZXJlIC4uLiAqLwotCi0gICAgICAgICAgICAgIC8qIFVwZGF0ZSBmaWxlIHRyYW5z ZmVyIGRpc3BsYXkgKi8KLSAgICAgICAgICAgICAgcnBhY2tldHMrKzsKLSAgICAgICAgICAgICAg cGt0bnVtKys7Ci0gICAgICAgICAgICAgIGlmIChmZGlzcGxhICE9IFhZRkRfQikgewotICAgICAg ICAgICAgICAgICAgcnBrdGwgPSBuaW47Ci0gICAgICAgICAgICAgICAgICBmdHNjcmVlbihTQ1Jf UFQsJ0QnLChDS19PRkZfVClycGFja2V0cyxOVUxMKTsKLSAgICAgICAgICAgICAgfQotICAgICAg ICAgIH0KLSAgICB9Ci0gICAgaWYgKG5pbiA9PSAwKQotICAgICAgcmV0dXJuKEVPRik7Ci0gICAg ZWxzZQotICAgICAgcmV0dXJuKHVjYnVmW2J1ZnAgLSBuaW4tLV0pOwotfQotCi0vKiBzZWN1cmVf Z2V0YyhmZCxmYykKLSAqIENhbGwgd2l0aDoKLSAqICAgZmQgPSBmaWxlIGRlc2NyaXB0b3IgZm9y IGNvbm5lY3Rpb24uCi0gKiAgIGZjID0gMCB0byBnZXQgYSBjaGFyYWN0ZXIsIGZjICE9IDAgdG8g aW5pdGlhbGl6ZSBidWZmZXIgcG9pbnRlcnMuCi0gKiBSZXR1cm5zOgotICogICBjPj0wIG9uIHN1 Y2Nlc3MgKGNoYXJhY3RlciB2YWx1ZSkKLSAqICAgLTEgICBvbiBFT0YKLSAqICAgLTIgICBvbiBz ZWN1cml0eSBlcnJvcgotICogICAtMyAgIG9uIHRpbWVvdXQgKGlmIGJ1aWx0IHdpdGggRlRQX1RJ TUVPVVQgZGVmaW5lZCkKLSAqLwotc3RhdGljIGludAotc2VjdXJlX2dldGMoZmQsZmMpIGludCBm ZCxmYzsgewkJLyogZmlsZSBkZXNjcmlwdG9yLCBmdW5jdGlvbiBjb2RlICovCi0KLSAgICBpZiAo IWZ0cGlzc2VjdXJlKCkpIHsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBuaW4gPSAwLCBi dWZwID0gMDsKLQlpZiAoZmMpIHsKLQkgICAgbmluID0gYnVmcCA9IDA7Ci0JICAgIHVjYnVmWzBd ID0gTlVMOwotCSAgICByZXR1cm4oMCk7Ci0JfQotICAgICAgICBpZiAobmluID09IDApIHsKLSAg ICAgICAgICAgIGlmIChpc2NhbmNlbGVkKCkpCi0gICAgICAgICAgICAgIHJldHVybigtOSk7Ci0K LSNpZmRlZiBGVFBfVElNRU9VVAotCSAgICBpZiAoY2hlY2tfZGF0YV9jb25uZWN0aW9uKGZkLDAp IDwgMCkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInNlY3VyZV9nZXRjIFRJTUVPVVQi LCIiLDApOwotICAgICAgICAgICAgICAgIG5pbiA9IGJ1ZnAgPSAwOwotCQlmdHBfdGltZWRfb3V0 ID0gMTsKLQkJcmV0dXJuKC0zKTsKLQkgICAgfQkJCi0jZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8K LQotICAgICAgICAgICAgbmluID0gYnVmcCA9IHJlY3YoZmQsKGNoYXIgKil1Y2J1ZixhY3R1YWxi dWYsMCk7Ci0gICAgICAgICAgICBpZiAoKG5pbiA9PSAwKSB8fCAobmluID09ICh1bnNpZ25lZCBp bnQpLTEpKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwic2VjdXJlX2dldGMgcmVjdiBl cnJubyIsY2tpdG9hKG5pbiksZXJybm8pOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInNl Y3VyZV9nZXRjIHJldHVybnMgRU9GIiwiIixFT0YpOwotICAgICAgICAgICAgICAgIG5pbiA9IGJ1 ZnAgPSAwOwotICAgICAgICAgICAgICAgIHJldHVybihFT0YpOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgZGVidWcoRjEwMSwiZnRwIHNlY3VyZV9nZXRjIHJlY3YiLCIiLG5pbik7Ci0gICAg ICAgICAgICBja2hleGR1bXAoImZ0cCBzZWN1cmVfZ2V0YyByZWN2Iix1Y2J1ZiwxNik7Ci0gICAg ICAgICAgICBycGFja2V0cysrOwotICAgICAgICAgICAgcGt0bnVtKys7Ci0gICAgICAgICAgICBp ZiAoZmRpc3BsYSAhPSBYWUZEX0IpIHsKLSAgICAgICAgICAgICAgICBycGt0bCA9IG5pbjsKLSAg ICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfUFQsJ0QnLChDS19PRkZfVClycGFja2V0cyxOVUxM KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4odWNidWZbYnVmcCAt IG5pbi0tXSk7Ci0gICAgfSBlbHNlCi0gICAgICByZXR1cm4oc2VjdXJlX2dldGJ5dGUoZmQsZmMp KTsKLX0KLQotLyogcmV0dXJuczoKLSAqICAgICBuPjAgIG9uIHN1Y2Nlc3MgKG4gPT0gIyBvZiBi eXRlcyByZWFkKQotICogICAgICAgMCAgb24gRU9GCi0gKiAgICAgIC0xICBvbiBlcnJvciAoZXJy bm8gc2V0KSwgb25seSBmb3IgRlBMX0NMUgotICogICAgICAtMiAgb24gc2VjdXJpdHkgZXJyb3IK LSAqLwotc3RhdGljIGludAotc2VjdXJlX3JlYWQoZmQsIGJ1ZiwgbmJ5dGUpIGludCBmZDsgY2hh ciAqYnVmOyBpbnQgbmJ5dGU7IHsKLSAgICBzdGF0aWMgaW50IGMgPSAwOwotICAgIGludCBpOwot Ci0gICAgZGVidWcoRjEwMSwic2VjdXJlX3JlYWQgYnl0ZXMgcmVxdWVzdGVkIiwiIixuYnl0ZSk7 Ci0gICAgaWYgKGMgPT0gRU9GKQotICAgICAgcmV0dXJuKGMgPSAwKTsKLSAgICBmb3IgKGkgPSAw OyBuYnl0ZSA+IDA7IG5ieXRlLS0pIHsKLSAgICAgICAgYyA9IHNlY3VyZV9nZXRjKGZkLDApOwot ICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICBjYXNlIC05OiAgICAgICAgICAgICAgICAg ICAgICAvKiBDYW5jZWxlZCBmcm9tIGtleWJvYXJkICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAx LCJmdHAgc2VjdXJlX3JlYWQgaW50ZXJydXB0ZWQiLCIiLGMpOwotICAgICAgICAgICAgcmV0dXJu KDApOwotICAgICAgICAgIGNhc2UgRVJSOgotICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIHNl Y3VyZV9yZWFkIGVycm9yIiwiIixjKTsKLSAgICAgICAgICAgIHJldHVybihjKTsKLSAgICAgICAg ICBjYXNlIEVPRjoKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBzZWN1cmVfcmVhZCBFT0Yi LCIiLGMpOwotICAgICAgICAgICAgaWYgKCFpKQotICAgICAgICAgICAgICBjID0gMDsKLSAgICAg ICAgICAgIHJldHVybihpKTsKLSNpZmRlZiBGVFBfVElNRU9VVAotICAgICAgICAgIGNhc2UgLTM6 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgc2VjdXJlX3JlYWQgdGltZW91dCIsIiIsYyk7 Ci0JICAgIHJldHVybihjKTsKLSNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLwotICAgICAgICAgIGRl ZmF1bHQ6Ci0gICAgICAgICAgICBidWZbaSsrXSA9IGM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg cmV0dXJuKGkpOwotfQotCi0jaWZkZWYgVVNFX1JVU0VSUEFTUwotLyogQkVHSU5fUlVTRVJQQVNT Ci0gKgotICogQ29weXJpZ2h0IChjKSAxOTg1IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2Yg Q2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMg c29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVu dDoKLSAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgVW5pdmVyc2l0eSBvZgotICogICAgICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNv bnRyaWJ1dG9ycy4KLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9y IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAg IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFT IElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICog T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQot ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBsaW50Ci1z dGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpcnVzZXJwYXNzLmMgNS4zIChCZXJrZWxleSkgMy8x LzkxIjsKLSNlbmRpZiAvKiBub3QgbGludCAqLwotCi0jaWZuZGVmIE1BWEhPU1ROQU1FTEVOCi0j ZGVmaW5lIE1BWEhPU1ROQU1FTEVOIDY0Ci0jZW5kaWYKLQotY2hhciAqIHJlbnZsb29rKCk7Ci1z dGF0aWMgRklMRSAqIGNmaWxlOwotCi0jZGVmaW5lIERFRkFVTFQgMQotI2RlZmluZSBMT0dJTiAg IDIKLSNkZWZpbmUgUEFTU1dEICAzCi0jZGVmaW5lIEFDQ09VTlQgNAotI2RlZmluZSBNQUNERUYg IDUKLSNkZWZpbmUgSUQgICAgICAxMAotI2RlZmluZSBNQUNIICAgIDExCi0KLXN0YXRpYyBjaGFy IHRva3ZhbFsxMDBdOwotCi1zdGF0aWMgc3RydWN0IHRva3RhYiB7Ci0gICAgY2hhciAqdG9rc3Ry OwotICAgIGludCB0dmFsOwotfSB0b2t0YWJbXT0gewotICAgICJkZWZhdWx0IiwgIERFRkFVTFQs Ci0gICAgImxvZ2luIiwgICAgTE9HSU4sCi0gICAgInBhc3N3b3JkIiwgUEFTU1dELAotICAgICJw YXNzd2QiLCAgIFBBU1NXRCwKLSAgICAiYWNjb3VudCIsICBBQ0NPVU5ULAotICAgICJtYWNoaW5l IiwgIE1BQ0gsCi0gICAgIm1hY2RlZiIsICAgTUFDREVGLAotICAgIDAsICAgICAgICAgIDAKLX07 Ci0KLXN0YXRpYyBpbnQKLXRva2VuKCkgewotICAgIGNoYXIgKmNwOwotICAgIGludCBjOwotICAg IHN0cnVjdCB0b2t0YWIgKnQ7Ci0KLSAgICBpZiAoZmVvZihjZmlsZSkpCi0gICAgICByZXR1cm4o MCk7Ci0gICAgd2hpbGUgKChjID0gZ2V0YyhjZmlsZSkpICE9IEVPRiAmJgotICAgICAgICAgICAo YyA9PSAnXG4nIHx8IGMgPT0gJ1x0JyB8fCBjID09ICcgJyB8fCBjID09ICcsJykpCi0gICAgICBj b250aW51ZTsKLSAgICBpZiAoYyA9PSBFT0YpCi0gICAgICByZXR1cm4oMCk7Ci0gICAgY3AgPSB0 b2t2YWw7Ci0gICAgaWYgKGMgPT0gJyInKSB7Ci0gICAgICAgIHdoaWxlICgoYyA9IGdldGMoY2Zp bGUpKSAhPSBFT0YgJiYgYyAhPSAnIicpIHsKLSAgICAgICAgICAgIGlmIChjID09ICdcXCcpCi0g ICAgICAgICAgICAgIGMgPSBnZXRjKGNmaWxlKTsKLSAgICAgICAgICAgICpjcCsrID0gYzsKLSAg ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgICpjcCsrID0gYzsKLSAgICAgICAgd2hpbGUg KChjID0gZ2V0YyhjZmlsZSkpICE9IEVPRgotICAgICAgICAgICAgICAgJiYgYyAhPSAnXG4nICYm IGMgIT0gJ1x0JyAmJiBjICE9ICcgJyAmJiBjICE9ICcsJykgewotICAgICAgICAgICAgaWYgKGMg PT0gJ1xcJykKLSAgICAgICAgICAgICAgYyA9IGdldGMoY2ZpbGUpOwotICAgICAgICAgICAgKmNw KysgPSBjOwotICAgICAgICB9Ci0gICAgfQotICAgICpjcCA9IDA7Ci0gICAgaWYgKHRva3ZhbFsw XSA9PSAwKQotICAgICAgcmV0dXJuKDApOwotICAgIGZvciAodCA9IHRva3RhYjsgdC0+dG9rc3Ry OyB0KyspCi0gICAgICBpZiAoIXN0cmNtcCh0LT50b2tzdHIsIHRva3ZhbCkpCi0gICAgICAgIHJl dHVybih0LT50dmFsKTsKLSAgICByZXR1cm4oSUQpOwotfQotCi1ydXNlcnBhc3MoaG9zdCwgYW5h bWUsIGFwYXNzLCBhYWNjdCkKLSAgICBjaGFyICpob3N0LCAqKmFuYW1lLCAqKmFwYXNzLCAqKmFh Y2N0OwotewotICAgIGNoYXIgKmhkaXIsIGJ1ZltGVFBfQlVGU0laXSwgKnRtcDsKLSAgICBjaGFy IG15bmFtZVtNQVhIT1NUTkFNRUxFTl0sICpteWRvbWFpbjsKLSAgICBpbnQgdCwgaSwgYywgdXNl ZGVmYXVsdCA9IDA7Ci0jaWZkZWYgTlQKLSAgICBzdHJ1Y3QgX3N0YXQgc3RiOwotI2Vsc2UgLyog TlQgKi8KLSAgICBzdHJ1Y3Qgc3RhdCBzdGI7Ci0jZW5kaWYgLyogTlQgKi8KLQotICAgIGhkaXIg PSBnZXRlbnYoIkhPTUUiKTsKLSAgICBpZiAoaGRpciA9PSBOVUxMKQotICAgICAgICBoZGlyID0g Ii4iOwotICAgIGNrbWFrbXNnKGJ1ZixGVFBfQlVGU0laLGhkaXIsIi8ubmV0cmMiLE5VTEwsTlVM TCk7Ci0gICAgY2ZpbGUgPSBmb3BlbihidWYsICJyIik7Ci0gICAgaWYgKGNmaWxlID09IE5VTEwp IHsKLSAgICAgICAgaWYgKGVycm5vICE9IEVOT0VOVCkKLSAgICAgICAgICBwZXJyb3IoYnVmKTsK LSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAoZ2V0aG9zdG5hbWUobXluYW1lLCBN QVhIT1NUTkFNRUxFTikgPCAwKQotICAgICAgbXluYW1lWzBdID0gJ1wwJzsKLSAgICBpZiAoKG15 ZG9tYWluID0gY2tzdHJjaHIobXluYW1lLCAnLicpKSA9PSBOVUxMKQotICAgICAgbXlkb21haW4g PSAiIjsKLQotICBuZXh0OgotICAgIHdoaWxlICgodCA9IHRva2VuKCkpKSBzd2l0Y2godCkgewot Ci0gICAgICBjYXNlIERFRkFVTFQ6Ci0gICAgICAgIHVzZWRlZmF1bHQgPSAxOwotICAgICAgICAv KiBGQUxMIFRIUk9VR0ggKi8KLQotICAgICAgY2FzZSBNQUNIOgotICAgICAgICBpZiAoIXVzZWRl ZmF1bHQpIHsKLSAgICAgICAgICAgIGlmICh0b2tlbigpICE9IElEKQotICAgICAgICAgICAgICBj b250aW51ZTsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBBbGxvdyBtYXRjaCBlaXRo ZXIgZm9yIHVzZXIncyBpbnB1dCBob3N0IG5hbWUKLSAgICAgICAgICAgICAqIG9yIG9mZmljaWFs IGhvc3RuYW1lLiAgQWxzbyBhbGxvdyBtYXRjaCBvZgotICAgICAgICAgICAgICogaW5jb21wbGV0 ZWx5LXNwZWNpZmllZCBob3N0IGluIGxvY2FsIGRvbWFpbi4KLSAgICAgICAgICAgICAqLwotICAg ICAgICAgICAgaWYgKGNrc3RyY21wKGhvc3QsIHRva3ZhbCwtMSwxKSA9PSAwKQotICAgICAgICAg ICAgICBnb3RvIG1hdGNoOwotICAgICAgICAgICAgaWYgKGNrc3RyY21wKGZ0cF9ob3N0LCB0b2t2 YWwsLTEsMCkgPT0gMCkKLSAgICAgICAgICAgICAgZ290byBtYXRjaDsKLSAgICAgICAgICAgIGlm ICgodG1wID0gY2tzdHJjaHIoZnRwX2hvc3QsICcuJykpICE9IE5VTEwgJiYKLSAgICAgICAgICAg ICAgICBja3N0cmNtcCh0bXAsIG15ZG9tYWluLC0xLDEpID09IDAgJiYKLSAgICAgICAgICAgICAg ICBja3N0cmNtcChmdHBfaG9zdCwgdG9rdmFsLCB0bXAtZnRwX2hvc3QsMCkgPT0gMCAmJgotICAg ICAgICAgICAgICAgIHRva3ZhbFt0bXAgLSBmdHBfaG9zdF0gPT0gJ1wwJykKLSAgICAgICAgICAg ICAgZ290byBtYXRjaDsKLSAgICAgICAgICAgIGlmICgodG1wID0gY2tzdHJjaHIoaG9zdCwgJy4n KSkgIT0gTlVMTCAmJgotICAgICAgICAgICAgICAgIGNrc3RyY21wKHRtcCwgbXlkb21haW4sLTEs MSkgPT0gMCAmJgotICAgICAgICAgICAgICAgIGNrc3RyY21wKGhvc3QsIHRva3ZhbCwgdG1wIC0g aG9zdCwgMCkgPT0gMCAmJgotICAgICAgICAgICAgICAgIHRva3ZhbFt0bXAgLSBob3N0XSA9PSAn XDAnKQotICAgICAgICAgICAgICBnb3RvIG1hdGNoOwotICAgICAgICAgICAgY29udGludWU7Ci0g ICAgICAgIH0KLQotICAgICAgbWF0Y2g6Ci0gICAgICAgIHdoaWxlICgodCA9IHRva2VuKCkpICYm IHQgIT0gTUFDSCAmJiB0ICE9IERFRkFVTFQpIHN3aXRjaCh0KSB7Ci0KLSAgICAgICAgICBjYXNl IExPR0lOOgotICAgICAgICAgICAgaWYgKHRva2VuKCkpCi0gICAgICAgICAgICAgIGlmICgqYW5h bWUgPT0gMCkgewotICAgICAgICAgICAgICAgICAgKmFuYW1lID0gbWFsbG9jKCh1bnNpZ25lZCkg c3RybGVuKHRva3ZhbCkgKyAxKTsKLSAgICAgICAgICAgICAgICAgIHN0cmNweSgqYW5hbWUsIHRv a3ZhbCk7ICAgICAgLyogc2FmZSAqLwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgICAgaWYgKHN0cmNtcCgqYW5hbWUsIHRva3ZhbCkpCi0gICAgICAgICAgICAgICAgICAg IGdvdG8gbmV4dDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgY2FzZSBQQVNTV0Q6Ci0gICAgICAgICAgICBpZiAoc3RyY21wKCphbmFtZSwgImFub255bW91 cyIpICYmCi0gICAgICAgICAgICAgICAgZnN0YXQoZmlsZW5vKGNmaWxlKSwgJnN0YikgPj0gMCAm JgotICAgICAgICAgICAgICAgIChzdGIuc3RfbW9kZSAmIDA3NykgIT0gMCkgewotICAgICAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgLSAubmV0cmMgZmlsZSBub3QgY29ycmVjdCBt b2RlLlxuIik7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJSZW1vdmUgcGFzc3dv cmQgb3IgY29ycmVjdCBtb2RlLlxuIik7Ci0gICAgICAgICAgICAgICAgZ290byBiYWQ7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodG9rZW4oKSAmJiAqYXBhc3MgPT0gMCkgewotICAg ICAgICAgICAgICAgICphcGFzcyA9IG1hbGxvYygodW5zaWduZWQpIHN0cmxlbih0b2t2YWwpICsg MSk7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KCphcGFzcywgdG9rdmFsKTsgICAgICAgICAgLyog c2FmZSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz ZSBBQ0NPVU5UOgotICAgICAgICAgICAgaWYgKGZzdGF0KGZpbGVubyhjZmlsZSksICZzdGIpID49 IDAKLSAgICAgICAgICAgICAgICAmJiAoc3RiLnN0X21vZGUgJiAwNzcpICE9IDApIHsKLSAgICAg ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIC0gLm5ldHJjIGZpbGUgbm90IGNvcnJl Y3QgbW9kZS5cbiIpOwotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUmVtb3ZlIGFj Y291bnQgb3IgY29ycmVjdCBtb2RlLlxuIik7Ci0gICAgICAgICAgICAgICAgZ290byBiYWQ7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodG9rZW4oKSAmJiAqYWFjY3QgPT0gMCkgewot ICAgICAgICAgICAgICAgICphYWNjdCA9IG1hbGxvYygodW5zaWduZWQpIHN0cmxlbih0b2t2YWwp ICsgMSk7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KCphYWNjdCwgdG9rdmFsKTsgICAgICAgICAg Lyogc2FmZSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg ICBkZWZhdWx0OgotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIC5uZXRyYyBr ZXl3b3JkICVzXG4iLCB0b2t2YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg ICAgICAgZ290byBkb25lOwotICAgIH0KLQotICBkb25lOgotICAgIGZjbG9zZShjZmlsZSk7Ci0g ICAgcmV0dXJuKDApOwotCi0gIGJhZDoKLSAgICBmY2xvc2UoY2ZpbGUpOwotICAgIHJldHVybigt MSk7Ci19Ci0jZW5kaWYgLyogVVNFX1JVU0VSUEFTUyAqLwotCi1zdGF0aWMgY2hhciAqcmFkaXhO ID0KLSAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4 eXowMTIzNDU2Nzg5Ky8iOwotCi1zdGF0aWMgY2hhciBwYWQgPSAnPSc7Ci0KLXN0YXRpYyBpbnQK LXJhZGl4X2VuY29kZShpbmJ1Ziwgb3V0YnVmLCBpbmxlbiwgb3V0bGVuLCBkZWNvZGUpCi0gICAg Q0hBUiBpbmJ1ZltdLCBvdXRidWZbXTsKLSAgICBpbnQgaW5sZW4sICpvdXRsZW4sIGRlY29kZTsK LXsKLSAgICBpbnQgaSwgaiwgRCA9IDA7Ci0gICAgY2hhciAqcDsKLSAgICBDSEFSIGMgPSBOVUw7 Ci0KLSAgICBpZiAoZGVjb2RlKSB7Ci0gICAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBpbmJ1Zltp XSAmJiBpbmJ1ZltpXSAhPSBwYWQ7IGkrKykgewotICAgICAgICAgICAgaWYgKChwID0gY2tzdHJj aHIocmFkaXhOLCBpbmJ1ZltpXSkpID09IE5VTEwpCi0gICAgICAgICAgICAgIHJldHVybigxKTsK LSAgICAgICAgICAgIEQgPSBwIC0gcmFkaXhOOwotICAgICAgICAgICAgc3dpdGNoIChpJjMpIHsK LSAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIG91dGJ1ZltqXSA9IEQ8PDI7 Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAg ICAgICAgICBvdXRidWZbaisrXSB8PSBEPj40OwotICAgICAgICAgICAgICAgIG91dGJ1ZltqXSA9 IChEJjE1KTw8NDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAy OgotICAgICAgICAgICAgICAgIG91dGJ1ZltqKytdIHw9IEQ+PjI7Ci0gICAgICAgICAgICAgICAg b3V0YnVmW2pdID0gKEQmMyk8PDY7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICBvdXRidWZbaisrXSB8PSBEOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKGogPT0gKm91dGxlbikKLSAgICAgICAgICAgICAgcmV0dXJu KDQpOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoaSYzKSB7Ci0gICAgICAgICAgY2FzZSAx OiByZXR1cm4oMyk7Ci0gICAgICAgICAgY2FzZSAyOiBpZiAoRCYxNSkgcmV0dXJuKDMpOwotICAg ICAgICAgICAgaWYgKHN0cmNtcCgoY2hhciAqKSZpbmJ1ZltpXSwgIj09IikpIHJldHVybigyKTsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMzogaWYgKEQmMykgcmV0dXJuKDMp OwotICAgICAgICAgICAgaWYgKHN0cmNtcCgoY2hhciAqKSZpbmJ1ZltpXSwgIj0iKSkgIHJldHVy bigyKTsKLSAgICAgICAgfQotICAgICAgICAqb3V0bGVuID0gajsKLSAgICB9IGVsc2UgewotICAg ICAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGlubGVuOyBpKyspIHsKLSAgICAgICAgICAgIHN3 aXRjaCAoaSUzKSB7Ci0gICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICBvdXRi dWZbaisrXSA9IHJhZGl4TltpbmJ1ZltpXT4+Ml07Ci0gICAgICAgICAgICAgICAgYyA9IChpbmJ1 ZltpXSYzKTw8NDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAx OgotICAgICAgICAgICAgICAgIG91dGJ1ZltqKytdID0gcmFkaXhOW2N8aW5idWZbaV0+PjRdOwot ICAgICAgICAgICAgICAgIGMgPSAoaW5idWZbaV0mMTUpPDwyOwotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgb3V0YnVmW2orK10g PSByYWRpeE5bY3xpbmJ1ZltpXT4+Nl07Ci0gICAgICAgICAgICAgICAgb3V0YnVmW2orK10gPSBy YWRpeE5baW5idWZbaV0mNjNdOwotICAgICAgICAgICAgICAgIGMgPSAwOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKGogPT0gKm91dGxlbikKLSAgICAgICAgICAgICAgcmV0dXJuKDQp OwotICAgICAgICB9Ci0gICAgICAgIGlmIChpJTMpIG91dGJ1ZltqKytdID0gcmFkaXhOW2NdOwot ICAgICAgICBzd2l0Y2ggKGklMykgewotICAgICAgICAgIGNhc2UgMTogb3V0YnVmW2orK10gPSBw YWQ7Ci0gICAgICAgICAgY2FzZSAyOiBvdXRidWZbaisrXSA9IHBhZDsKLSAgICAgICAgfQotICAg ICAgICBvdXRidWZbKm91dGxlbiA9IGpdID0gJ1wwJzsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwot fQotCi1zdGF0aWMgY2hhciAqCi1yYWRpeF9lcnJvcihlKSBpbnQgZTsKLXsKLSAgICBzd2l0Y2gg KGUpIHsKLSAgICAgIGNhc2UgMDogIHJldHVybigiU3VjY2VzcyIpOwotICAgICAgY2FzZSAxOiAg cmV0dXJuKCJCYWQgY2hhcmFjdGVyIGluIGVuY29kaW5nIik7Ci0gICAgICBjYXNlIDI6ICByZXR1 cm4oIkVuY29kaW5nIG5vdCBwcm9wZXJseSBwYWRkZWQiKTsKLSAgICAgIGNhc2UgMzogIHJldHVy bigiRGVjb2RlZCAjIG9mIGJpdHMgbm90IGEgbXVsdGlwbGUgb2YgOCIpOwotICAgICAgY2FzZSA0 OiAgcmV0dXJuKCJPdXRwdXQgYnVmZmVyIHRvbyBzbWFsbCIpOwotICAgICAgZGVmYXVsdDogcmV0 dXJuKCJVbmtub3duIGVycm9yIik7Ci0gICAgfQotfQotLyogRU5EX1JVU0VSUEFTUyAqLwotCi0j aWZkZWYgRlRQX1NSUAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gfCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKLSB8ICAgUGFja2FnZTogc3JwZnRwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfAotIHwgICBBdXRob3I6IEV1Z2VuZSBKaG9uZyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwKLSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoKLSAqIENvcHlyaWdo dCAoYykgMTk5Ny0xOTk5ICBUaGUgU3RhbmZvcmQgU1JQIEF1dGhlbnRpY2F0aW9uIFByb2plY3QK LSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi0gKiBhIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUK LSAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcKLSAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLSAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotICogcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvCi0gKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLSAqIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl LgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMtSVMiIEFORCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELAotICogRVhQUkVTUywgSU1QTElFRCBPUiBPVEhFUldJU0UsIElO Q0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWQotICogV0FSUkFOVFkgT0YgTUVSQ0hBTlRB QklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICoKLSAqIElOIE5P IEVWRU5UIFNIQUxMIFNUQU5GT1JEIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5U QUwsCi0gKiBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQsIE9S IEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKLSAqIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBE QVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgT1IgTk9UIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ TElUWSBPRiBEQU1BR0UsIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgQVJJU0lORyBP VVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9G IFRISVMgU09GVFdBUkUuCi0gKgotICogSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucyBhcHBseToKLSAqCi0gKiAxLiBBbnkgc29mdHdhcmUgdGhhdCBpbmNvcnBvcmF0ZXMgdGhl IFNSUCBhdXRoZW50aWNhdGlvbiB0ZWNobm9sb2d5Ci0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCB1c2VzIHRoZSAnU2Vj dXJlIFJlbW90ZSBQYXNzd29yZCcgY3J5cHRvZ3JhcGhpYwotICogICAgIGF1dGhlbnRpY2F0aW9u IHN5c3RlbSBkZXZlbG9wZWQgYnkgVG9tIFd1ICh0andAQ1MuU3RhbmZvcmQuRURVKS4iCi0gKgot ICogMi4gQW55IHNvZnR3YXJlIHRoYXQgaW5jb3Jwb3JhdGVzIGFsbCBvciBwYXJ0IG9mIHRoZSBT UlAgZGlzdHJpYnV0aW9uCi0gKiAgICBpdHNlbGYgbXVzdCBhbHNvIGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IFRvbSBXdSBhbmQgRXVnZW5lCi0gKiAgICAgSmhvbmcgZm9yIHRoZSBT UlAgRGlzdHJpYnV0aW9uIChodHRwOi8vc3JwLnN0YW5mb3JkLmVkdS9zcnAvKS4iCi0gKgotICog My4gUmVkaXN0cmlidXRpb25zIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBtdXN0IHJldGFpbiBh biBpbnRhY3QgY29weQotICogICAgb2YgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGFuZCBsaXN0IG9m IGNvbmRpdGlvbnMuCi0gKi8KLQotI2RlZmluZSBTUlBfUFJPVF9WRVJTSU9OICAgICAgICAxCi0K LSNpZmRlZiBDS19FTkNSWVBUSU9OCi0jZGVmaW5lIFNSUF9ERUZBVUxUX0NJUEhFUiAgICAgIENJ UEhFUl9JRF9DQVNUNV9DQkMKLSNlbHNlCi0jZGVmaW5lIFNSUF9ERUZBVUxUX0NJUEhFUiAgICAg IENJUEhFUl9JRF9OT05FCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotCi0jZGVmaW5lIFNS UF9ERUZBVUxUX0hBU0ggICAgICAgIEhBU0hfSURfU0hBCi0KLUNIQVIgc3JwX3ByZWZfY2lwaGVy ID0gQ0lQSEVSX0lEX0RFUzNfRUNCOwotQ0hBUiBzcnBfcHJlZl9oYXNoID0gSEFTSF9JRF9TSEE7 Ci0KLXN0YXRpYyBzdHJ1Y3QgdF9jbGllbnQgKnRjID0gTlVMTDsKLXN0YXRpYyBDSEFSICpza2V5 ID0gTlVMTDsKLXN0YXRpYyBrcnlwdG9fY29udGV4dCAqaW5jcnlwdCA9IE5VTEw7Ci1zdGF0aWMg a3J5cHRvX2NvbnRleHQgKm91dGNyeXB0ID0gTlVMTDsKLQotdHlwZWRlZiB1bnNpZ25lZCBpbnQg c3JwX3VpbnQzMjsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSB8IHNycF9zZWxjaXBoZXI6IHNlbGVjdCBjaXBoZXIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQK LXNycF9zZWxjaXBoZXIgKGNuYW1lKSBjaGFyICpjbmFtZTsgewotICAgIGNpcGhlcl9kZXNjICpj ZDsKLQotICAgIGlmICghKGNkID0gY2lwaGVyX2dldGRlc2NieW5hbWUgKGNuYW1lKSkpIHsKLSAg ICAgICAgaW50IGk7Ci0gICAgICAgIENIQVIgKmxpc3QgPSBjaXBoZXJfZ2V0bGlzdCAoKTsKLQot ICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJmdHA6IHN1cHBvcnRlZCBjaXBoZXJzOlxuXG4iKTsK LSAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmxlbiAobGlzdCk7IGkrKykKLSAgICAgICAgICBm cHJpbnRmIChzdGRlcnIsICIgICAgJXNcbiIsIChjaXBoZXJfZ2V0ZGVzY2J5aWQobGlzdFtpXSkp LT5uYW1lKTsKLSAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICAgICAgcmV0dXJu IC0xOwotICAgIH0KLSAgICBzcnBfcHJlZl9jaXBoZXIgPSBjZC0+aWQ7Ci0gICAgcmV0dXJuIDA7 Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rCi0gfCBzcnBfc2VsaGFzaDogc2VsZWN0IGhhc2ggICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfAotICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50Ci1zcnBfc2Vs aGFzaCAoaG5hbWUpIGNoYXIgKmhuYW1lOyB7Ci0gICAgaGFzaF9kZXNjICpoZDsKLQotICAgIGlm ICghKGhkID0gaGFzaF9nZXRkZXNjYnluYW1lIChobmFtZSkpKSB7Ci0gICAgICAgIGludCBpOwot ICAgICAgICBDSEFSICpsaXN0ID0gaGFzaF9nZXRsaXN0ICgpOwotCi0gICAgICAgIGZwcmludGYg KHN0ZGVyciwgImZ0cDogc3VwcG9ydGVkIGhhc2ggZnVuY3Rpb25zOlxuXG4iKTsKLSAgICAgICAg Zm9yIChpID0gMDsgaSA8IHN0cmxlbiAobGlzdCk7IGkrKykKLSAgICAgICAgICBmcHJpbnRmIChz dGRlcnIsICIgICAgJXNcbiIsIChoYXNoX2dldGRlc2NieWlkKGxpc3RbaV0pKS0+bmFtZSk7Ci0g ICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9 Ci0gICAgc3JwX3ByZWZfaGFzaCA9IGhkLT5pZDsKLSAgICByZXR1cm4gMDsKLX0KLQotLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKLSB8IHNycF91c2VycGFzczogZ2V0IHVzZXJuYW1lIGFuZCBwYXNzd29yZCAgICAgICAgICAg ICAgICAgICAgICB8Ci0gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQKLXNycF91c2VycGFzcyAoaG9zdCkg Y2hhciAqaG9zdDsgewotICAgIGNoYXIgdG1wW0JVRlNJWl0sIHByb21wdFtQUk9NUFRTSVpdOwot ICAgIGNoYXIgKnVzZXI7Ci0KLSAgICB1c2VyID0gTlVMTDsKLSNpZmRlZiBVU0VfUlVTRVJQQVNT Ci0gICAgcnVzZXJwYXNzIChob3N0LCAmdXNlciwgJnNycF9wYXNzLCAmc3JwX2FjY3QpOwotI2Vu ZGlmIC8qIFVTRV9SVVNFUlBBU1MgKi8KLQotICAgIHdoaWxlICh1c2VyID09IE5VTEwpICAgICB7 Ci0gICAgICAgIGNoYXIgKm15bmFtZTsKLSAgICAgICAgaW50IG9rOwotCi0gICAgICAgIG15bmFt ZSA9IHdob2FtaSgpOwotICAgICAgICBpZiAoIW15bmFtZSkgbXluYW1lID0gIiI7Ci0gICAgICAg IGlmIChteW5hbWVbMF0pCi0gICAgICAgICAgY2ttYWt4bXNnKHByb21wdCxQUk9NUFRTSVosIiBO YW1lICgiLGhvc3QsIjoiLG15bmFtZSwiKTogIiwKLSAgICAgICAgICAgICAgICAgICAgTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBj a21ha21zZyhwcm9tcHQsUFJPTVBUU0laLCIgTmFtZSAoIixob3N0LCIpOiAiLE5VTEwpOwotICAg ICAgICB0bXBbMF0gPSAnXDAnOwotICAgICAgICBvayA9IHVxX3R4dChOVUxMLHByb21wdCwxLE5V TEwsdG1wLEJVRlNJWixOVUxMLAotICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1VRX1RJTUVP VVQpOwotICAgICAgICBpZiAoIW9rIHx8ICp0bXAgPT0gJ1wwJykKLSAgICAgICAgICB1c2VyID0g bXluYW1lOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdXNlciA9IGJyc3RyaXAodG1wKTsKLSAg ICB9Ci0gICAgY2tzdHJuY3B5IChzcnBfdXNlciwgdXNlcixCVUZTSVopOwotICAgIHJldHVybigw KTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsKLSB8IHNycF9yZXNldDogcmVzZXQgc3JwIGluZm9ybWF0aW9uICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQKLXNycF9y ZXNldCAoKSB7Ci0gICAgaWYgKHRjKSB7IHRfY2xpZW50Y2xvc2UgKHRjKTsgdGMgPSBOVUxMOyB9 Ci0gICAgaWYgKGluY3J5cHQpIHsga3J5cHRvX2RlbGV0ZSAoaW5jcnlwdCk7IGluY3J5cHQgPSBO VUxMOyB9Ci0gICAgaWYgKG91dGNyeXB0KSB7IGtyeXB0b19kZWxldGUgKG91dGNyeXB0KTsgb3V0 Y3J5cHQgPSBOVUxMOyB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotIHwgc3JwX2Z0 cF9hdXRoOiBwZXJmb3JtIHNycCBhdXRoZW50aWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAg ICB8Ci0gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQKLXNycF9mdHBfYXV0aChob3N0LCB1c2VyLCBwYXNz KQotICAgIGNoYXIgKmhvc3Q7Ci0gICAgY2hhciAqdXNlcjsKLSAgICBjaGFyICpwYXNzOwotewot ICAgIHN0cnVjdCB0X251bSAqd3A7Ci0gICAgc3RydWN0IHRfbnVtIE47Ci0gICAgc3RydWN0IHRf bnVtIGc7Ci0gICAgc3RydWN0IHRfbnVtIHM7Ci0gICAgc3RydWN0IHRfbnVtIHlwOwotICAgIENI QVIgYnVmW0ZUUF9CVUZTSVpdOwotICAgIENIQVIgdG1wW0ZUUF9CVUZTSVpdOwotICAgIENIQVIg KmJwLCAqY3A7Ci0gICAgaW50IG4sIGUsIGNsZW4sIGJsZW4sIGxlbiwgaTsKLSAgICBDSEFSIGNp ZCA9IDA7Ci0gICAgQ0hBUiBoaWQgPSAwOwotCi0gICAgc3JwX3Bhc3MgPSBzcnBfYWNjdCA9IDA7 Ci0KLSAgICBuID0gZnRwY21kKCJBVVRIIFNSUCIsTlVMTCwwLDAsZnRwX3ZibSk7Ci0gICAgaWYg KG4gIT0gUkVQTFlfQ09OVElOVUUpIHsKLSAgICAgICAgaWYgKGZ0cF9kZWIpCi0gICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIlNSUCByZWplY3RlZCBhcyBhbiBhdXRoZW50aWNhdGlvbiB0eXBl XG4iKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNlbmQgcHJvdG9jb2wgdmVyc2lvbiAqLwotICAgICAgICBDSEFSIHZlcnNb NF07Ci0gICAgICAgIG1lbXNldCAodmVycywgMCwgNCk7Ci0gICAgICAgIHZlcnNbM10gPSBTUlBf UFJPVF9WRVJTSU9OOwotICAgICAgICBpZiAoIXF1aWV0KQotICAgICAgICAgIHByaW50ZiAoIlNS UCBhY2NlcHRlZCBhcyBhdXRoZW50aWNhdGlvbiB0eXBlLlxuIik7Ci0gICAgICAgIGJwID0gdG1w OyBibGVuID0gMDsKLSAgICAgICAgc3JwX3B1dCAodmVycywgJmJwLCA0LCAmYmxlbik7Ci0gICAg ICAgIGxlbiA9IEZUUF9CVUZTSVo7Ci0gICAgICAgIGlmIChlID0gcmFkaXhfZW5jb2RlICh0bXAs IGJ1ZiwgYmxlbiwgJmxlbiwgUkFESVhfRU5DT0RFKSkKLSAgICAgICAgICBnb3RvIGVuY29kZV9l cnJvcjsKLSAgICAgICAgcmVwbHlfcGFyc2UgPSAiQURBVD0iOwotICAgICAgICBuID0gZnRwY21k KCJBREFUIixidWYsLTEsLTEsMCk7Ci0gICAgfQotICAgIGlmIChuID09IFJFUExZX0NPTlRJTlVF KSB7ICAgICAgICAgIC8qIEdldCBwcm90b2NvbCB2ZXJzaW9uICovCi0gICAgICAgIGJwID0gYnVm OwotICAgICAgICBpZiAoIXJlcGx5X3BhcnNlKQotICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsK LSAgICAgICAgYmxlbiA9IEZUUF9CVUZTSVo7Ci0gICAgICAgIGlmIChlID0gcmFkaXhfZW5jb2Rl KHJlcGx5X3BhcnNlLCBicCwgMCwgJmJsZW4sIFJBRElYX0RFQ09ERSkpCi0gICAgICAgICAgZ290 byBkZWNvZGVfZXJyb3I7Ci0gICAgICAgIGlmIChzcnBfZ2V0ICgmYnAsICZjcCwgJmJsZW4sICZj bGVuKSAhPSA0KQotICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKLQotICAgICAgICBpZiAoaG9z dCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIEdldCB1c2VybmFtZS9wYXNzd29yZCBpZiBuZWVk ZWQgKi8KLSAgICAgICAgICAgIHNycF91c2VycGFzcyAoaG9zdCk7Ci0gICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICBja3N0cm5jcHkgKHNycF91c2VyLCB1c2VyLCBCVUZTSVopOwotICAgICAg ICAgICAgc3JwX3Bhc3MgPSBwYXNzOwotICAgICAgICB9Ci0gICAgICAgIGJwID0gdG1wOyBibGVu ID0gMDsgICAgICAgICAgICAgLyogU2VuZCB1c2VybmFtZSAqLwotICAgICAgICBzcnBfcHV0IChz cnBfdXNlciwgJmJwLCBzdHJsZW4gKHNycF91c2VyKSwgJmJsZW4pOwotICAgICAgICBsZW4gPSBG VFBfQlVGU0laOwotICAgICAgICBpZiAoZSA9IHJhZGl4X2VuY29kZSAodG1wLCBidWYsIGJsZW4s ICZsZW4sIFJBRElYX0VOQ09ERSkpCi0gICAgICAgICAgZ290byBlbmNvZGVfZXJyb3I7Ci0gICAg ICAgIHJlcGx5X3BhcnNlID0gIkFEQVQ9IjsKLSAgICAgICAgbiA9IGZ0cGNtZCgiQURBVCIsYnVm LC0xLC0xLDApOwotICAgIH0KLSAgICBpZiAobiA9PSBSRVBMWV9DT05USU5VRSkgeyAgICAgICAg ICAvKiBHZXQgTiwgZyBhbmQgcyAqLwotICAgICAgICBicCA9IGJ1ZjsKLSAgICAgICAgaWYgKCFy ZXBseV9wYXJzZSkKLSAgICAgICAgICBnb3RvIGRhdGFfZXJyb3I7Ci0gICAgICAgIGJsZW4gPSBG VFBfQlVGU0laOwotICAgICAgICBpZiAoZSA9IHJhZGl4X2VuY29kZSAocmVwbHlfcGFyc2UsIGJw LCAwLCAmYmxlbiwgUkFESVhfREVDT0RFKSkKLSAgICAgICAgICBnb3RvIGRlY29kZV9lcnJvcjsK LSAgICAgICAgaWYgKHNycF9nZXQgKCZicCwgJihOLmRhdGEpLCAmYmxlbiwgJihOLmxlbikpIDwg MCkKLSAgICAgICAgICBnb3RvIGRhdGFfZXJyb3I7Ci0gICAgICAgIGlmIChzcnBfZ2V0ICgmYnAs ICYoZy5kYXRhKSwgJmJsZW4sICYoZy5sZW4pKSA8IDApCi0gICAgICAgICAgZ290byBkYXRhX2Vy cm9yOwotICAgICAgICBpZiAoc3JwX2dldCAoJmJwLCAmKHMuZGF0YSksICZibGVuLCAmKHMubGVu KSkgPCAwKQotICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKLSAgICAgICAgaWYgKCh0YyA9IHRf Y2xpZW50b3BlbiAoc3JwX3VzZXIsICZOLCAmZywgJnMpKSA9PSBOVUxMKSB7Ci0gICAgICAgICAg ICBmcHJpbnRmIChzdGRlcnIsICJVbmFibGUgdG8gb3BlbiBTUlAgY2xpZW50IHN0cnVjdHVyZS5c biIpOwotICAgICAgICAgICAgZ290byBiYWQ7Ci0gICAgICAgIH0KLSAgICAgICAgd3AgPSB0X2Ns aWVudGdlbmV4cCAodGMpOyAgICAgICAvKiBTZW5kIHdwICovCi0gICAgICAgIGJwID0gdG1wOyBi bGVuID0gMDsKLSAgICAgICAgc3JwX3B1dCAod3AtPmRhdGEsICZicCwgd3AtPmxlbiwgJmJsZW4p OwotICAgICAgICBsZW4gPSBGVFBfQlVGU0laOwotICAgICAgICBpZiAoZSA9IHJhZGl4X2VuY29k ZSAodG1wLCBidWYsIGJsZW4sICZsZW4sIFJBRElYX0VOQ09ERSkpCi0gICAgICAgICAgZ290byBl bmNvZGVfZXJyb3I7Ci0gICAgICAgIHJlcGx5X3BhcnNlID0gIkFEQVQ9IjsKLSAgICAgICAgbiA9 IGZ0cGNtZCgiQURBVCIsYnVmLC0xLC0xLDApOwotICAgIH0KLSAgICBpZiAobiA9PSBSRVBMWV9D T05USU5VRSkgeyAgICAgICAgICAvKiBHZXQgeXAgKi8KLSAgICAgICAgYnAgPSBidWY7Ci0gICAg ICAgIGlmICghcmVwbHlfcGFyc2UpCi0gICAgICAgICAgZ290byBkYXRhX2Vycm9yOwotICAgICAg ICBibGVuID0gRlRQX0JVRlNJWjsKLSAgICAgICAgaWYgKGUgPSByYWRpeF9lbmNvZGUgKHJlcGx5 X3BhcnNlLCBicCwgMCwgJmJsZW4sIFJBRElYX0RFQ09ERSkpCi0gICAgICAgICAgZ290byBkZWNv ZGVfZXJyb3I7Ci0gICAgICAgIGlmIChzcnBfZ2V0ICgmYnAsICYoeXAuZGF0YSksICZibGVuLCAm KHlwLmxlbikpIDwgMCkKLSAgICAgICAgICBnb3RvIGRhdGFfZXJyb3I7Ci0gICAgICAgIGlmICgh c3JwX3Bhc3MpIHsKLSAgICAgICAgICAgIHN0YXRpYyBjaGFyIGZ0cHBhc3NbUEFTU0JVRlNJWl07 Ci0gICAgICAgICAgICBpbnQgb2s7Ci0gICAgICAgICAgICBzZXRpbnQoKTsKLSAgICAgICAgICAg IG9rID0gdXFfdHh0KE5VTEwsIiBTUlAgUGFzc3dvcmQ6ICIsMixOVUxMLGZ0cHBhc3MsUEFTU0JV RlNJWixOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9VUV9USU1FT1VUKTsK LSAgICAgICAgICAgIGlmIChvaykKLQkgICAgICBzcnBfcGFzcyA9IGJyc3RyaXAoZnRwcGFzcyk7 Ci0gICAgICAgIH0KLSAgICAgICAgdF9jbGllbnRwYXNzd2QgKHRjLCBzcnBfcGFzcyk7Ci0gICAg ICAgIG1lbXNldCAoc3JwX3Bhc3MsIDAsIHN0cmxlbiAoc3JwX3Bhc3MpKTsKLSAgICAgICAgc2tl eSA9IHRfY2xpZW50Z2V0a2V5ICh0YywgJnlwKTsgLyogU2VuZCByZXNwb25zZSAqLwotICAgICAg ICBicCA9IHRtcDsgYmxlbiA9IDA7Ci0gICAgICAgIHNycF9wdXQgKHRfY2xpZW50cmVzcG9uc2Ug KHRjKSwgJmJwLCAyMCwgJmJsZW4pOwotICAgICAgICBsZW4gPSBGVFBfQlVGU0laOwotICAgICAg ICBpZiAoZSA9IHJhZGl4X2VuY29kZSAodG1wLCBidWYsIGJsZW4sICZsZW4sIFJBRElYX0VOQ09E RSkpCi0gICAgICAgICAgZ290byBlbmNvZGVfZXJyb3I7Ci0gICAgICAgIHJlcGx5X3BhcnNlID0g IkFEQVQ9IjsKLSAgICAgICAgbiA9IGZ0cGNtZCgiQURBVCIsYnVmLC0xLC0xLDApOwotICAgIH0K LSAgICBpZiAobiA9PSBSRVBMWV9DT05USU5VRSkgeyAgICAgICAgICAvKiBHZXQgcmVzcG9uc2Ug Ki8KLSAgICAgICAgYnAgPSBidWY7Ci0gICAgICAgIGlmICghcmVwbHlfcGFyc2UpCi0gICAgICAg ICAgZ290byBkYXRhX2Vycm9yOwotICAgICAgICBibGVuID0gRlRQX0JVRlNJWjsKLSAgICAgICAg aWYgKGUgPSByYWRpeF9lbmNvZGUgKHJlcGx5X3BhcnNlLCBicCwgMCwgJmJsZW4sIFJBRElYX0RF Q09ERSkpCi0gICAgICAgICAgZ290byBlbmNvZGVfZXJyb3I7Ci0gICAgICAgIGlmIChzcnBfZ2V0 ICgmYnAsICZjcCwgJmJsZW4sICZjbGVuKSAhPSAyMCkKLSAgICAgICAgICBnb3RvIGRhdGFfZXJy b3I7Ci0gICAgICAgIGlmICh0X2NsaWVudHZlcmlmeSAodGMsIGNwKSkgewotICAgICAgICAgICAg ZnByaW50ZiAoc3RkZXJyLCAiV0FSTklORzogYmFkIHJlc3BvbnNlIHRvIGNsaWVudCBjaGFsbGVu Z2UuXG4iKTsKLSAgICAgICAgICAgIGdvdG8gYmFkOwotICAgICAgICB9Ci0gICAgICAgIGJwID0g dG1wOyBibGVuID0gMDsgICAgICAgICAgICAgLyogU2VuZCBub3RoaW5nICovCi0gICAgICAgIHNy cF9wdXQgKCJcMCIsICZicCwgMSwgJmJsZW4pOwotICAgICAgICBsZW4gPSBGVFBfQlVGU0laOwot ICAgICAgICBpZiAoZSA9IHJhZGl4X2VuY29kZSAodG1wLCBidWYsIGJsZW4sICZsZW4sIFJBRElY X0VOQ09ERSkpCi0gICAgICAgICAgZ290byBlbmNvZGVfZXJyb3I7Ci0gICAgICAgIHJlcGx5X3Bh cnNlID0gIkFEQVQ9IjsKLSAgICAgICAgbiA9IGZ0cGNtZCgiQURBVCIsYnVmLC0xLC0xLDApOwot ICAgIH0KLSAgICBpZiAobiA9PSBSRVBMWV9DT05USU5VRSkgeyAgICAgICAgICAvKiBHZXQgY2lw aGVyICYgaGFzaCBsaXN0cywgc2VxbnVtICovCi0gICAgICAgIENIQVIgc2VxbnVtWzRdOwotICAg ICAgICBDSEFSICpjbGlzdDsKLSAgICAgICAgQ0hBUiAqaGxpc3Q7Ci0gICAgICAgIENIQVIgKnAx OwotICAgICAgICBpbnQgY2xpc3RfbGVuLCBobGlzdF9sZW47Ci0gICAgICAgIGJwID0gYnVmOwot ICAgICAgICBpZiAoIXJlcGx5X3BhcnNlKQotICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKLSAg ICAgICAgYmxlbiA9IEZUUF9CVUZTSVo7Ci0gICAgICAgIGlmIChlID0gcmFkaXhfZW5jb2RlIChy ZXBseV9wYXJzZSwgYnAsIDAsICZibGVuLCBSQURJWF9ERUNPREUpKQotICAgICAgICAgIGdvdG8g ZW5jb2RlX2Vycm9yOwotICAgICAgICBpZiAoc3JwX2dldCAoJmJwLCAmY2xpc3QsICZibGVuLCAm Y2xpc3RfbGVuKSA8IDApCi0gICAgICAgICAgZ290byBkYXRhX2Vycm9yOwotICAgICAgICBpZiAo c3JwX2dldCAoJmJwLCAmaGxpc3QsICZibGVuLCAmaGxpc3RfbGVuKSA8IDApCi0gICAgICAgICAg Z290byBkYXRhX2Vycm9yOwotICAgICAgICBpZiAoc3JwX2dldCAoJmJwLCAmY3AsICZibGVuLCAm Y2xlbikgIT0gNCkKLSAgICAgICAgICBnb3RvIGRhdGFfZXJyb3I7Ci0gICAgICAgIG1lbWNweSAo c2VxbnVtLCBjcCwgNCk7Ci0gICAgICAgIGlmIChjaXBoZXJfc3VwcG9ydGVkIChjbGlzdCwgc3Jw X3ByZWZfY2lwaGVyKSkgLyogQ2hvb3NlIGNpcGhlciAqLwotICAgICAgICAgIGNpZCA9IHNycF9w cmVmX2NpcGhlcjsKLSAgICAgICAgaWYgKCFjaWQgJiYgY2lwaGVyX3N1cHBvcnRlZCAoY2xpc3Qs IFNSUF9ERUZBVUxUX0NJUEhFUikpCi0gICAgICAgICAgY2lkID0gU1JQX0RFRkFVTFRfQ0lQSEVS OwotICAgICAgICBpZiAoIWNpZCkgewotICAgICAgICAgICAgQ0hBUiAqbG9jbGlzdCA9IGNpcGhl cl9nZXRsaXN0ICgpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmxlbiAobG9jbGlz dCk7IGkrKykKLSAgICAgICAgICAgICAgaWYgKGNpcGhlcl9zdXBwb3J0ZWQgKGNsaXN0LCBsb2Ns aXN0W2ldKSkgewotICAgICAgICAgICAgICAgICAgY2lkID0gbG9jbGlzdFtpXTsKLSAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KCFjaWQpIHsKLSAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlVuYWJsZSB0byBhZ3JlZSBv biBjaXBoZXIuXG4iKTsKLSAgICAgICAgICAgIGdvdG8gYmFkOwotICAgICAgICB9Ci0gICAgICAg IC8qIENob29zZSBoYXNoICovCi0KLSAgICAgICAgaWYgKHNycF9wcmVmX2hhc2ggJiYgaGFzaF9z dXBwb3J0ZWQgKGhsaXN0LCBzcnBfcHJlZl9oYXNoKSkKLSAgICAgICAgICBoaWQgPSBzcnBfcHJl Zl9oYXNoOwotCi0gICAgICAgIGlmICghaGlkICYmIGhhc2hfc3VwcG9ydGVkIChobGlzdCwgU1JQ X0RFRkFVTFRfSEFTSCkpCi0gICAgICAgICAgaGlkID0gU1JQX0RFRkFVTFRfSEFTSDsKLQotICAg ICAgICBpZiAoIWhpZCkgewotICAgICAgICAgICAgQ0hBUiAqbG9jbGlzdCA9IGhhc2hfZ2V0bGlz dCAoKTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJsZW4gKGxvY2xpc3QpOyBpKysp Ci0gICAgICAgICAgICAgIGlmIChoYXNoX3N1cHBvcnRlZCAoaGxpc3QsIGxvY2xpc3RbaV0pKSB7 Ci0gICAgICAgICAgICAgICAgICBoaWQgPSBsb2NsaXN0W2ldOwotICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWhpZCkgewot ICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiVW5hYmxlIHRvIGFncmVlIG9uIGhhc2guXG4i KTsKLSAgICAgICAgICAgIGdvdG8gYmFkOwotICAgICAgICB9Ci0gICAgICAgIC8qIFNldCBpbmNy eXB0ICovCi0KLSAgICAgICAgaWYgKCEoaW5jcnlwdCA9IGtyeXB0b19uZXcgKGNpZCwgaGlkLCBz a2V5LCAyMCwgTlVMTCwgMCwgc2VxbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgS1JZUFRPX0RFQ09ERSkpKQotICAgICAgICAgIGdvdG8gYmFkOwotCi0gICAgICAgIC8q IEdlbmVyYXRlIHJhbmRvbSBudW1iZXIgZm9yIG91dGtleSBhbmQgb3V0c2VxbnVtICovCi0KLSAg ICAgICAgdF9yYW5kb20gKHNlcW51bSwgNCk7Ci0KLSAgICAgICAgLyogU2VuZCBjaWQsIGhpZCwg b3V0a2V5LCBvdXRzZXFudW0gKi8KLQotICAgICAgICBicCA9IHRtcDsgYmxlbiA9IDA7Ci0gICAg ICAgIHNycF9wdXQgKCZjaWQsICZicCwgMSwgJmJsZW4pOwotICAgICAgICBzcnBfcHV0ICgmaGlk LCAmYnAsIDEsICZibGVuKTsKLSAgICAgICAgc3JwX3B1dCAoc2VxbnVtLCAmYnAsIDQsICZibGVu KTsKLSAgICAgICAgbGVuID0gRlRQX0JVRlNJWjsKLSAgICAgICAgaWYgKGUgPSByYWRpeF9lbmNv ZGUgKHRtcCwgYnVmLCBibGVuLCAmbGVuLCBSQURJWF9FTkNPREUpKQotICAgICAgICAgIGdvdG8g ZW5jb2RlX2Vycm9yOwotICAgICAgICByZXBseV9wYXJzZSA9ICJBREFUPSI7Ci0gICAgICAgIG4g PSBmdHBjbWQoIkFEQVQiLGJ1ZiwtMSwtMSwwKTsKLQotICAgICAgICAvKiBTZXQgb3V0Y3J5cHQg Ki8KLQotICAgICAgICBpZiAoIShvdXRjcnlwdCA9IGtyeXB0b19uZXcgKGNpZCwgaGlkLCBza2V5 KzIwLCAyMCwgTlVMTCwgMCwgc2VxbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEtSWVBUT19FTkNPREUpKSkKLSAgICAgICAgICBnb3RvIGJhZDsKLQotICAgICAgICB0 X2NsaWVudGNsb3NlICh0Yyk7Ci0gICAgICAgIHRjID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKG4g IT0gUkVQTFlfQ09NUExFVEUpCi0gICAgICBnb3RvIGJhZDsKLQotICAgIGlmIChmdHBfdmJtKSB7 Ci0gICAgICAgIGlmIChmdHBfZGViKQotICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAg cHJpbnRmICgiU1JQIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZC5cbiIpOwotICAgICAgICBwcmlu dGYgKCJVc2luZyBjaXBoZXIgJXMgYW5kIGhhc2ggZnVuY3Rpb24gJXMuXG4iLAotICAgICAgICAg ICAgICAgIChjaXBoZXJfZ2V0ZGVzY2J5aWQoY2lkKSktPm5hbWUsCi0gICAgICAgICAgICAgICAg KGhhc2hfZ2V0ZGVzY2J5aWQoaGlkKSktPm5hbWUKLSAgICAgICAgICAgICAgICApOwotICAgIH0K LSAgICByZXBseV9wYXJzZSA9IE5VTEw7Ci0gICAgYXV0aF90eXBlID0gIlNSUCI7Ci0gICAgcmV0 dXJuKDEpOwotCi0gIGVuY29kZV9lcnJvcjoKLSAgICBmcHJpbnRmIChzdGRlcnIsICJCYXNlIDY0 IGVuY29kaW5nIGZhaWxlZDogJXMuXG4iLCByYWRpeF9lcnJvciAoZSkpOwotICAgIGdvdG8gYmFk OwotCi0gIGRlY29kZV9lcnJvcjoKLSAgICBmcHJpbnRmIChzdGRlcnIsICJCYXNlIDY0IGRlY29k aW5nIGZhaWxlZDogJXMuXG4iLCByYWRpeF9lcnJvciAoZSkpOwotICAgIGdvdG8gYmFkOwotCi0g IGRhdGFfZXJyb3I6Ci0gICAgZnByaW50ZiAoc3RkZXJyLCAiVW5hYmxlIHRvIHVubWFyc2hhbCBh dXRoZW50aWNhdGlvbiBkYXRhLlxuIik7Ci0gICAgZ290byBiYWQ7Ci0KLSAgYmFkOgotICAgIGZw cmludGYgKHN0ZGVyciwgIlNSUCBhdXRoZW50aWNhdGlvbiBmYWlsZWQsIHRyeWluZyByZWd1bGFy IGxvZ2luLlxuIik7Ci0gICAgcmVwbHlfcGFyc2UgPSBOVUxMOwotICAgIHJldHVybigwKTsKLX0K LQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKLSB8IHNycF9wdXQ6IHB1dCBpdGVtIHRvIHNlbmQgYnVmZmVyICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8Ci0gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQKLXNycF9wdXQgKGlu LCBvdXQsIGlubGVuLCBvdXRsZW4pCi0gICAgQ0hBUiAqaW47Ci0gICAgQ0hBUiAqKm91dDsKLSAg ICBpbnQgaW5sZW47Ci0gICAgaW50ICpvdXRsZW47Ci17Ci0gICAgc3JwX3VpbnQzMiBuZXRfbGVu OwotCi0gICAgbmV0X2xlbiA9IGh0b25sIChpbmxlbik7Ci0gICAgbWVtY3B5ICgqb3V0LCAmbmV0 X2xlbiwgNCk7Ci0KLSAgICAqb3V0ICs9IDQ7ICpvdXRsZW4gKz0gNDsKLQotICAgIG1lbWNweSAo Km91dCwgaW4sIGlubGVuKTsKLQotICAgICpvdXQgKz0gaW5sZW47ICpvdXRsZW4gKz0gaW5sZW47 Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotIHwgc3JwX2dldDogZ2V0IGl0ZW0gZnJv bSByZWNlaXZlIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgIHwKLSArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3Rh dGljIGludAotc3JwX2dldCAoaW4sIG91dCwgaW5sZW4sIG91dGxlbikKLSAgICBDSEFSICoqaW47 Ci0gICAgQ0hBUiAqKm91dDsKLSAgICBpbnQgKmlubGVuOwotICAgIGludCAqb3V0bGVuOwotewot ICAgIHNycF91aW50MzIgbmV0X2xlbjsKLQotICAgIGlmICgqaW5sZW4gPCA0KSByZXR1cm4gLTE7 Ci0KLSAgICBtZW1jcHkgKCZuZXRfbGVuLCAqaW4sIDQpOyAqaW5sZW4gLT0gNDsgKmluICs9IDQ7 Ci0gICAgKm91dGxlbiA9IG50b2hsIChuZXRfbGVuKTsKLQotICAgIGlmICgqaW5sZW4gPCAqb3V0 bGVuKSByZXR1cm4gLTE7Ci0KLSAgICAqb3V0ID0gKmluOyAqaW5sZW4gLT0gKm91dGxlbjsgKmlu ICs9ICpvdXRsZW47Ci0KLSAgICByZXR1cm4gKm91dGxlbjsKLX0KLQotLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSB8IHNy cF9lbmNvZGU6IGVuY29kZSBjb250cm9sIG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICAg ICB8Ci0gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQKLXNycF9lbmNvZGUgKHByaXZhdGUsIGluLCBvdXQs IGxlbikKLSAgICBpbnQgcHJpdmF0ZTsKLSAgICBDSEFSICppbjsKLSAgICBDSEFSICpvdXQ7Ci0g ICAgdW5zaWduZWQgbGVuOwotewotICAgIGlmIChwcml2YXRlKQotICAgICAgcmV0dXJuIGtyeXB0 b19tc2dfcHJpdiAob3V0Y3J5cHQsIGluLCBvdXQsIGxlbik7Ci0gICAgZWxzZQotICAgICAgcmV0 dXJuIGtyeXB0b19tc2dfc2FmZSAob3V0Y3J5cHQsIGluLCBvdXQsIGxlbik7Ci19Ci0KLS8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rCi0gfCBzcnBfZGVjb2RlOiBkZWNvZGUgY29udHJvbCBtZXNzYWdlICAgICAgICAgICAgICAg ICAgICAgICAgICAgfAotICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50Ci1zcnBfZGVjb2RlIChwcml2YXRl LCBpbiwgb3V0LCBsZW4pCi0gICAgaW50IHByaXZhdGU7Ci0gICAgQ0hBUiAqaW47Ci0gICAgQ0hB UiAqb3V0OwotICAgIHVuc2lnbmVkIGxlbjsKLXsKLSAgICBpZiAocHJpdmF0ZSkKLSAgICAgIHJl dHVybiBrcnlwdG9fbXNnX3ByaXYgKGluY3J5cHQsIGluLCBvdXQsIGxlbik7Ci0gICAgZWxzZQot ICAgICAgcmV0dXJuIGtyeXB0b19tc2dfc2FmZSAoaW5jcnlwdCwgaW4sIG91dCwgbGVuKTsKLX0K LQotI2VuZGlmIC8qIEZUUF9TUlAgKi8KLQotCi0KLSNpZmRlZiBOT1RfVVNFRAotLyoKLSAgVGhl IGZvbGxvd2luZyBjb2RlIGlzIGZyb20gdGhlIFVuaXggRlRQIGNsaWVudC4gIEJlIHN1cmUgdG8K LSAgbWFrZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGxvc3QuICBFc3BlY2lh bGx5Ci0gIHRoZSBQcm94eSBzdHVmZiBldmVuIHRob3VnaCB3ZSBoYXZlIG5vdCB5ZXQgaW1wbGVt ZW50ZWQgaXQuCi0qLwotCi0vKiBTZW5kIG11bHRpcGxlIGZpbGVzICAqLwotCi1zdGF0aWMgaW50 Ci1mdHBfbXB1dChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7IHsKLSAgICByZWdp c3RlciBpbnQgaTsKLSAgICBzaWdfdCBvbGRpbnRyOwotICAgIGludCBvaW50ZXI7Ci0gICAgY2hh ciAqdHA7Ci0gICAgc2lndHlwZSBtY2FuY2VsKCk7Ci0KLSAgICBpZiAoYXJnYyA8IDIgJiYgIWFu b3RoZXIoJmFyZ2MsICZhcmd2LCAibG9jYWwtZmlsZXMiKSkgewotICAgICAgICBwcmludGYoInVz YWdlOiAlcyBsb2NhbC1maWxlc1xuIiwgYXJndlswXSk7Ci0gICAgICAgIGZ0cGNvZGUgPSAtMTsK LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtbmFtZSA9IGFyZ3ZbMF07Ci0gICAgbWZsYWcg PSAxOwotICAgIG9sZGludHIgPSBzaWduYWwoU0lHSU5ULCBtY2FuY2VsKTsKLQotICAgIC8qIFJl cGxhY2Ugd2l0aCBjYWxscyB0byBjY19leGVjdXRlKCkgKi8KLSAgICBzZXRqbXAoamNhbmNlbCk7 Ci0jaWZkZWYgRlRQX1BST1hZCi0gICAgaWYgKHByb3h5KSB7Ci0gICAgICAgIGNoYXIgKmNwLCAq dHAyLCB0bXBidWZbQ0tNQVhQQVRIXTsKLQotICAgICAgICB3aGlsZSAoKGNwID0gcmVtZ2xvYihh cmd2LDApKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoKmNwID09IDApIHsKLSAgICAgICAg ICAgICAgICBtZmxhZyA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBpZiAobWZsYWcgJiYgY29uZmlybShhcmd2WzBdLCBjcCkpIHsKLSAg ICAgICAgICAgICAgICB0cCA9IGNwOwotICAgICAgICAgICAgICAgIGlmIChtY2FzZSkgewotICAg ICAgICAgICAgICAgICAgICB3aGlsZSAoKnRwICYmICFpc2xvd2VyKCp0cCkpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIHRwKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgICAgaWYgKCEqdHApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwID0gY3A7Ci0g ICAgICAgICAgICAgICAgICAgICAgICB0cDIgPSB0bXBidWY7Ci0gICAgICAgICAgICAgICAgICAg ICAgICB3aGlsZSAoKCp0cDIgPSAqdHApICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoaXN1cHBlcigqdHAyKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqdHAyID0gJ2EnICsgKnRwMiAtICdBJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHArKzsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0cDIrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0cCA9IHRtcGJ1ZjsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgaWYgKG50ZmxhZykgewotICAgICAgICAgICAgICAgICAgICB0 cCA9IGRvdHJhbnModHApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo bWFwZmxhZykgewotICAgICAgICAgICAgICAgICAgICB0cCA9IGRvbWFwKHRwKTsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2VuZHJlcXVlc3QoKHN1bmlxdWUpID8gIlNUT1Ui IDogIlNUT1IiLCBjcCwgdHAsIDAsIC0xLCAtMSwgMCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFt ZmxhZyAmJiBmcm9tYXR0eSkgewotICAgICAgICAgICAgICAgICAgICBvaW50ZXIgPSBpbnRlcmFj dGl2ZTsKLSAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUgPSAxOwotICAgICAgICAgICAg ICAgICAgICBpZiAoY29uZmlybSgiQ29udGludWUgd2l0aCIsIm1wdXQiKSkgewotICAgICAgICAg ICAgICAgICAgICAgICAgbWZsYWcrKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgICBpbnRlcmFjdGl2ZSA9IG9pbnRlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50cik7Ci0g ICAgICAgIG1mbGFnID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZiAvKiBGVFBf UFJPWFkgKi8KLSAgICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgIHJlZ2lz dGVyIGNoYXIgKipjcHAsICoqZ2FyZ3M7Ci0KLSAgICAgICAgaWYgKG1mbGFnICYmIGNvbmZpcm0o YXJndlswXSwgYXJndltpXSkpIHsKLSAgICAgICAgICAgIHRwID0gYXJndltpXTsKLSAgICAgICAg ICAgIHNlbmRyZXF1ZXN0KChmdHBfdXNuKSA/ICJTVE9VIiA6ICJTVE9SIiwgYXJndltpXSwgdHAs IDAsLTEsLTEsIDApOwotICAgICAgICAgICAgaWYgKCFtZmxhZyAmJiBmcm9tYXR0eSkgewotICAg ICAgICAgICAgICAgIG9pbnRlciA9IGludGVyYWN0aXZlOwotICAgICAgICAgICAgICAgIGludGVy YWN0aXZlID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgiQ29udGludWUgd2l0aCIs Im1wdXQiKSkgewotICAgICAgICAgICAgICAgICAgICBtZmxhZysrOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSA9IG9pbnRlcjsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBnYXJncyA9IGZ0cGdsb2Io YXJndltpXSk7Ci0gICAgICAgIGlmIChnbG9iZXJyICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHBy aW50ZigiJXNcbiIsIGdsb2JlcnIpOwotICAgICAgICAgICAgaWYgKGdhcmdzKSB7Ci0gICAgICAg ICAgICAgICAgYmxrZnJlZShnYXJncyk7Ci0gICAgICAgICAgICAgICAgZnJlZSgoY2hhciAqKWdh cmdzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g ICAgICAgIGZvciAoY3BwID0gZ2FyZ3M7IGNwcCAmJiAqY3BwICE9IE5VTEw7IGNwcCsrKSB7Ci0g ICAgICAgICAgICBpZiAobWZsYWcgJiYgY29uZmlybShhcmd2WzBdLCAqY3BwKSkgewotICAgICAg ICAgICAgICAgIHRwID0gKmNwcDsKLSAgICAgICAgICAgICAgICBzZW5kcmVxdWVzdCgoc3VuaXF1 ZSkgPyAiU1RPVSI6IlNUT1IiLCAqY3BwLCB0cCwgMCwgLTEsIC0xLCAwKTsKLSAgICAgICAgICAg ICAgICBpZiAoIW1mbGFnICYmIGZyb21hdHR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIG9pbnRl ciA9IGludGVyYWN0aXZlOwotICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSA9IDE7Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCJDb250aW51ZSB3aXRoIiwibXB1dCIpKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZmxhZysrOwotICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlID0gb2ludGVyOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZ2FyZ3MgIT0gTlVM TCkgewotICAgICAgICAgICAgYmxrZnJlZShnYXJncyk7Ci0gICAgICAgICAgICBmcmVlKChjaGFy ICopZ2FyZ3MpOwotICAgICAgICB9Ci0gICAgfQotICAgIHNpZ25hbChTSUdJTlQsIG9sZGludHIp OwotICAgIG1mbGFnID0gMDsKLX0KLQotLyogR2V0IG11bHRpcGxlIGZpbGVzICovCi0KLXN0YXRp YyBpbnQKLWZ0cF9tZ2V0KGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsgewotICAg IGludCByYyA9IC0xOwotICAgIHNpZ190IG9sZGludHI7Ci0gICAgaW50IG9pbnRlcjsKLSAgICBj aGFyICpjcCwgKnRwLCAqdHAyLCB0bXBidWZbQ0tNQVhQQVRIXTsKLSAgICBzaWd0eXBlIG1jYW5j ZWwoKTsKLQotICAgIGlmIChhcmdjIDwgMiAmJiAhYW5vdGhlcigmYXJnYywgJmFyZ3YsICJyZW1v dGUtZmlsZXMiKSkgewotICAgICAgICBwcmludGYoInVzYWdlOiAlcyByZW1vdGUtZmlsZXNcbiIs IGFyZ3ZbMF0pOwotICAgICAgICBmdHBjb2RlID0gLTE7Ci0gICAgICAgIHJldHVybigtMSk7Ci0g ICAgfQotICAgIG1uYW1lID0gYXJndlswXTsKLSAgICBtZmxhZyA9IDE7Ci0gICAgb2xkaW50ciA9 IHNpZ25hbChTSUdJTlQsbWNhbmNlbCk7Ci0gICAgLyogUmVwbGFjZSB3aXRoIGNhbGxzIHRvIGNj X2V4ZWN1dGUoKSAqLwotICAgIHNldGptcChqY2FuY2VsKTsKLSAgICB3aGlsZSAoKGNwID0gcmVt Z2xvYihhcmd2LHByb3h5KSkgIT0gTlVMTCkgewotICAgICAgICBpZiAoKmNwID09ICdcMCcpIHsK LSAgICAgICAgICAgIG1mbGFnID0gMDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9 Ci0gICAgICAgIGlmIChtZmxhZyAmJiBjb25maXJtKGFyZ3ZbMF0sIGNwKSkgewotICAgICAgICAg ICAgdHAgPSBjcDsKLSAgICAgICAgICAgIGlmIChtY2FzZSkgewotICAgICAgICAgICAgICAgIHdo aWxlICgqdHAgJiYgIWlzbG93ZXIoKnRwKSkgewotICAgICAgICAgICAgICAgICAgICB0cCsrOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoISp0cCkgewotICAgICAgICAg ICAgICAgICAgICB0cCA9IGNwOwotICAgICAgICAgICAgICAgICAgICB0cDIgPSB0bXBidWY7Ci0g ICAgICAgICAgICAgICAgICAgIHdoaWxlICgoKnRwMiA9ICp0cCkgIT0gMCkgewotICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKGlzdXBwZXIoKnRwMikpIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqdHAyID0gJ2EnICsgKnRwMiAtICdBJzsKLSAgICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRwKys7Ci0gICAgICAgICAgICAgICAgICAgICAg ICB0cDIrKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICB0cCA9IHRtcGJ1ZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJjID0g KHJlY3ZyZXF1ZXN0KCJSRVRSIiwgdHAsIGNwLCAid2IiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRwICE9IGNwIHx8ICFpbnRlcmFjdGl2ZSkgPT0gMCwwLE5VTEwsMCwwLDApOwot ICAgICAgICAgICAgaWYgKCFtZmxhZyAmJiBmcm9tYXR0eSkgewotICAgICAgICAgICAgICAgIG9p bnRlciA9IGludGVyYWN0aXZlOwotICAgICAgICAgICAgICAgIGludGVyYWN0aXZlID0gMTsKLSAg ICAgICAgICAgICAgICBpZiAoY29uZmlybSgiQ29udGludWUgd2l0aCIsIm1nZXQiKSkgewotICAg ICAgICAgICAgICAgICAgICBtZmxhZysrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBpbnRlcmFjdGl2ZSA9IG9pbnRlcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg IH0KLSAgICBzaWduYWwoU0lHSU5ULG9sZGludHIpOwotICAgIG1mbGFnID0gMDsKLSAgICByZXR1 cm4ocmMpOwotfQotCi0vKiBEZWxldGUgbXVsdGlwbGUgZmlsZXMgKi8KLQotc3RhdGljIGludAot bWRlbGV0ZShhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7IHsKLSAgICBzaWdfdCBv bGRpbnRyOwotICAgIGludCBvaW50ZXI7Ci0gICAgY2hhciAqY3A7Ci0gICAgc2lndHlwZSBtY2Fu Y2VsKCk7Ci0KLSAgICBpZiAoYXJnYyA8IDIgJiYgIWFub3RoZXIoJmFyZ2MsICZhcmd2LCAicmVt b3RlLWZpbGVzIikpIHsKLSAgICAgICAgcHJpbnRmKCJ1c2FnZTogJXMgcmVtb3RlLWZpbGVzXG4i LCBhcmd2WzBdKTsKLSAgICAgICAgZnRwY29kZSA9IC0xOwotICAgICAgICByZXR1cm4oLTEpOwot ICAgIH0KLSAgICBtbmFtZSA9IGFyZ3ZbMF07Ci0gICAgbWZsYWcgPSAxOwotICAgIG9sZGludHIg PSBzaWduYWwoU0lHSU5ULCBtY2FuY2VsKTsKLSAgICAvKiBSZXBsYWNlIHdpdGggY2FsbHMgdG8g Y2NfZXhlY3V0ZSgpICovCi0gICAgc2V0am1wKGpjYW5jZWwpOwotICAgIHdoaWxlICgoY3AgPSBy ZW1nbG9iKGFyZ3YsMCkpICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKCpjcCA9PSAnXDAnKSB7Ci0g ICAgICAgICAgICBtZmxhZyA9IDA7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot ICAgICAgICBpZiAobWZsYWcgJiYgY29uZmlybShhcmd2WzBdLCBjcCkpIHsKLSAgICAgICAgICAg IHJjID0gKGZ0cGNtZCgiREVMRSIsY3AsLTEsLTEsZnRwX3ZibSkgPT0gUkVQTFlfQ09NUExFVEUp OwotICAgICAgICAgICAgaWYgKCFtZmxhZyAmJiBmcm9tYXR0eSkgewotICAgICAgICAgICAgICAg IG9pbnRlciA9IGludGVyYWN0aXZlOwotICAgICAgICAgICAgICAgIGludGVyYWN0aXZlID0gMTsK LSAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgiQ29udGludWUgd2l0aCIsICJtZGVsZXRlIikp IHsKLSAgICAgICAgICAgICAgICAgICAgbWZsYWcrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgaW50ZXJhY3RpdmUgPSBvaW50ZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICB9Ci0gICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50cik7Ci0gICAgbWZsYWcgPSAwOwot ICAgIHJldHVybihyYyk7Ci19Ci0KLS8qIEdldCBhIGRpcmVjdG9yeSBsaXN0aW5nIG9mIG11bHRp cGxlIHJlbW90ZSBmaWxlcyAqLwotCi1zdGF0aWMgaW50Ci1tbHMoYXJnYywgYXJndikgaW50IGFy Z2M7IGNoYXIgKiphcmd2OyB7Ci0gICAgc2lnX3Qgb2xkaW50cjsKLSAgICBpbnQgb2ludGVyLCBp OwotICAgIGNoYXIgKmNtZCwgbW9kZVsxXSwgKmRlc3Q7Ci0gICAgc2lndHlwZSBtY2FuY2VsKCk7 Ci0gICAgaW50IHJjID0gLTE7Ci0KLSAgICBpZiAoYXJnYyA8IDIgJiYgIWFub3RoZXIoJmFyZ2Ms ICZhcmd2LCAicmVtb3RlLWZpbGVzIikpCi0gICAgICBnb3RvIHVzYWdlOwotICAgIGlmIChhcmdj IDwgMyAmJiAhYW5vdGhlcigmYXJnYywgJmFyZ3YsICJsb2NhbC1maWxlIikpIHsKLSAgICAgIHVz YWdlOgotICAgICAgICBwcmludGYoInVzYWdlOiAlcyByZW1vdGUtZmlsZXMgbG9jYWwtZmlsZVxu IiwgYXJndlswXSk7Ci0gICAgICAgIGZ0cGNvZGUgPSAtMTsKLSAgICAgICAgcmV0dXJuKC0xKTsK LSAgICB9Ci0gICAgZGVzdCA9IGFyZ3ZbYXJnYyAtIDFdOwotICAgIGFyZ3ZbYXJnYyAtIDFdID0g TlVMTDsKLSAgICBpZiAoc3RyY21wKGRlc3QsICItIikgJiYgKmRlc3QgIT0gJ3wnKQotICAgICAg aWYgKCFnbG9idWxpemUoJmRlc3QpIHx8Ci0gICAgICAgICAgIWNvbmZpcm0oIm91dHB1dCB0byBs b2NhbC1maWxlOiIsIGRlc3QpKSB7Ci0gICAgICAgICAgZnRwY29kZSA9IC0xOwotICAgICAgICAg IHJldHVybigtMSk7Ci0gICAgICB9Ci0gICAgY21kID0gYXJndlswXVsxXSA9PSAnbCcgPyAiTkxT VCIgOiAiTElTVCI7Ci0gICAgbW5hbWUgPSBhcmd2WzBdOwotICAgIG1mbGFnID0gMTsKLSAgICBv bGRpbnRyID0gc2lnbmFsKFNJR0lOVCwgbWNhbmNlbCk7Ci0gICAgLyogUmVwbGFjZSB3aXRoIGNh bGxzIHRvIGNjX2V4ZWN1dGUoKSAqLwotICAgIHNldGptcChqY2FuY2VsKTsKLSAgICBmb3IgKGkg PSAxOyBtZmxhZyAmJiBpIDwgYXJnYy0xOyArK2kpIHsKLSAgICAgICAgKm1vZGUgPSAoaSA9PSAx KSA/ICd3JyA6ICdhJzsKLSAgICAgICAgcmMgPSByZWN2cmVxdWVzdChjbWQsIGRlc3QsIGFyZ3Zb aV0sIG1vZGUsIDAsMCxOVUxMLDAsMCwwKTsKLSAgICAgICAgaWYgKCFtZmxhZyAmJiBmcm9tYXR0 eSkgewotICAgICAgICAgICAgb2ludGVyID0gaW50ZXJhY3RpdmU7Ci0gICAgICAgICAgICBpbnRl cmFjdGl2ZSA9IDE7Ci0gICAgICAgICAgICBpZiAoY29uZmlybSgiQ29udGludWUgd2l0aCIsIGFy Z3ZbMF0pKSB7Ci0gICAgICAgICAgICAgICAgbWZsYWcgKys7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBpbnRlcmFjdGl2ZSA9IG9pbnRlcjsKLSAgICAgICAgfQotICAgIH0KLSAgICBzaWdu YWwoU0lHSU5ULCBvbGRpbnRyKTsKLSAgICBtZmxhZyA9IDA7Ci0gICAgcmV0dXJuKHJjKTsKLX0K LQotc3RhdGljIGNoYXIgKgotcmVtZ2xvYihhcmd2LGRvc3dpdGNoKSBjaGFyICphcmd2W107IGlu dCBkb3N3aXRjaDsgewotICAgIGNoYXIgdGVtcFsxNl07Ci0gICAgc3RhdGljIGNoYXIgYnVmW0NL TUFYUEFUSF07Ci0gICAgc3RhdGljIEZJTEUgKmZ0ZW1wID0gTlVMTDsKLSAgICBzdGF0aWMgY2hh ciAqKmFyZ3M7Ci0gICAgaW50IG9sZGhhc2g7Ci0gICAgY2hhciAqY3AsICptb2RlOwotCi0gICAg aWYgKCFtZmxhZykgewotICAgICAgICBpZiAoIWRvZ2xvYikgewotICAgICAgICAgICAgYXJncyA9 IE5VTEw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoZnRlbXApIHsKLSAgICAg ICAgICAgICAgICAodm9pZCkgZmNsb3NlKGZ0ZW1wKTsKLSAgICAgICAgICAgICAgICBmdGVtcCA9 IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKE5VTEwpOwot ICAgIH0KLSAgICBpZiAoIWRvZ2xvYikgewotICAgICAgICBpZiAoYXJncyA9PSBOVUxMKQotICAg ICAgICAgIGFyZ3MgPSBhcmd2OwotICAgICAgICBpZiAoKGNwID0gKisrYXJncykgPT0gTlVMTCkK LSAgICAgICAgICBhcmdzID0gTlVMTDsKLSAgICAgICAgcmV0dXJuKGNwKTsKLSAgICB9Ci0gICAg aWYgKGZ0ZW1wID09IE5VTEwpIHsKLSAgICAgICAgKHZvaWQpIHN0cmNweSh0ZW1wLCBfUEFUSF9U TVApOwotI2lmZGVmIE1LVEVNUAotI2lmbmRlZiBNS1NURU1QCi0gICAgICAgICh2b2lkKSBta3Rl bXAodGVtcCk7Ci0jZW5kaWYgLyogTUtTVEVNUCAqLwotI2VuZGlmIC8qIE1LVEVNUCAqLwotICAg ICAgICB2ZXJib3NlID0gMDsKLSAgICAgICAgb2xkaGFzaCA9IGhhc2gsIGhhc2ggPSAwOwotI2lm ZGVmIEZUUF9QUk9YWQotICAgICAgICBpZiAoZG9zd2l0Y2gpIHsKLSAgICAgICAgICAgIHBzd2l0 Y2goIXByb3h5KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwotICAgICAgICBm b3IgKG1vZGUgPSAid2IiOyAqKythcmd2ICE9IE5VTEw7IG1vZGUgPSAiYWIiKQotICAgICAgICAg IHJlY3ZyZXF1ZXN0ICgiTkxTVCIsIHRlbXAsICphcmd2LCBtb2RlLCAwKTsKLSNpZmRlZiBGVFBf UFJPWFkKLSAgICAgICAgaWYgKGRvc3dpdGNoKSB7Ci0gICAgICAgICAgICBwc3dpdGNoKCFwcm94 eSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KLSAgICAgICAgaGFzaCA9IG9s ZGhhc2g7Ci0gICAgICAgIGZ0ZW1wID0gZm9wZW4odGVtcCwgInIiKTsKLSAgICAgICAgdW5saW5r KHRlbXApOwotICAgICAgICBpZiAoZnRlbXAgPT0gTlVMTCAmJiAoIWRweWFjdGl2ZSB8fCBmdHBf ZGViKSkgewotICAgICAgICAgICAgcHJpbnRmKCJDYW4ndCBmaW5kIGxpc3Qgb2YgcmVtb3RlIGZp bGVzLCBvb3BzXG4iKTsKLSAgICAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICAgICAgfQotICAg IH0KLSAgICBpZiAoZmdldHMoYnVmLCBDS01BWFBBVEgsIGZ0ZW1wKSA9PSBOVUxMKSB7Ci0gICAg ICAgIGZjbG9zZShmdGVtcCksIGZ0ZW1wID0gTlVMTDsKLSAgICAgICAgcmV0dXJuKE5VTEwpOwot ICAgIH0KLSAgICBpZiAoKGNwID0gY2tzdHJjaHIoYnVmLCdcbicpKSAhPSBOVUxMKQotICAgICAg KmNwID0gJ1wwJzsKLSAgICByZXR1cm4oYnVmKTsKLX0KLSNlbmRpZiAvKiBOT1RfVVNFRCAqLwot I2VuZGlmIC8qIFRDUFNPQ0tFVCAodG9wIG9mIGZpbGUpICovCi0jZW5kaWYgLyogU1lTRlRQICh0 b3Agb2YgZmlsZSkgKi8KLSNlbmRpZiAvKiBOT0ZUUCAodG9wIG9mIGZpbGUpICovCgpkaWZmIC0t Z2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NrZXIuaCBiL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tja2VyLmgKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDg5MGY2NjYuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NrZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MjUg KzAsMCBAQAotLyogY2tja2VyLmggLS0gU3ltYm9sIGFuZCBtYWNybyBkZWZpbml0aW9ucyBmb3Ig Qy1LZXJtaXQgKi8KLQotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEu ZWR1PiwKLSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1z LCBOZXcgWW9yayBDaXR5LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKLSAgICBUcnVz dGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAg IEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUg b3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlz Y2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0qLwotCi0jaWZuZGVmIENLQ0tFUl9ICi0jZGVmaW5l IENLQ0tFUl9ICi0KLSNkZWZpbmUgSV9BTV9LRVJNSVQgIDAJCQkvKiBQZXJzb25hbGl0aWVzICov Ci0jZGVmaW5lIElfQU1fVEVMTkVUICAxCi0jZGVmaW5lIElfQU1fUkxPR0lOICAyCi0jZGVmaW5l IElfQU1fSUtTRCAgICAzCi0jZGVmaW5lIElfQU1fRlRQICAgICA0Ci0jZGVmaW5lIElfQU1fSFRU UCAgICA1Ci0jZGVmaW5lIElfQU1fU1NIU1VCICA2Ci0jZGVmaW5lIElfQU1fU1NIICAgICA3Ci0K LSNpZm5kZWYgTk9TVFJFQU1JTkcKLSNpZm5kZWYgU1RSRUFNSU5HCi0jZGVmaW5lIFNUUkVBTUlO RwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotI2VuZGlmIC8qIE5PU1RSRUFNSU5HICovCi0vKgot ICBJZiBORVdERUZBVUxUUyBpcyBkZWZpbmVkIHRoZW46Ci0gICAtIFJFQ0VJVkUgUEFDS0VULUxF TkdUSCBpcyA0MDk1IHJhdGhlciB0aGFuIDkwCi0gICAtIFdJTkRPVyBpcyAzMCByYXRoZXIgdGhh biAxCi0gICAtIEJMT0NLLUNIRUNLIGlzIDMgcmF0aGVyIHRoYW4gMQotICAgLSBGSUxFIFRZUEUg aXMgQklOQVJZIHJhdGhlciB0aGFuIFRFWFQKLSovCi0jaWZkZWYgQklHQlVGT0sJCQkJLyogKHdh cyBPUzIpICovCi0jaWZuZGVmIE5FV0RFRkFVTFRTCi0jZGVmaW5lIE5FV0RFRkFVTFRTCi0jZW5k aWYgLyogTkVXREVGQVVMVFMgKi8KLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotCi0jaWZkZWYgTk9J Q1AJCQkJLyogTm8gSW50ZXJhY3RpdmUgQ29tbWFuZCBQYXJzZXIgKi8KLSNpZm5kZWYgTk9TUEwJ CQkJLyogaW1wbGllcy4uLiAqLwotI2RlZmluZSBOT1NQTAkJCQkvKiBObyBTY3JpcHQgUHJvZ3Jh bW1pbmcgTGFuZ3VhZ2UgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT0NTRVRTCQkJ CS8qIE5vIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gKi8KLSNkZWZpbmUgTk9DU0VUUwkJCQkv KiBiZWNhdXNlIHRoZSBvbmx5IHdheSB0byBzZXQgaXQgdXAgKi8KLSNlbmRpZiAvKiBOT0NTRVRT ICovCQkJLyogaXMgd2l0aCBpbnRlcmFjdGl2ZSBjb21tYW5kcyAqLwotI2VuZGlmIC8qIE5PSUNQ ICovCi0KLSNpZmRlZiBwZHAxMQkJCQkvKiBUaGVyZSBpcyBhIG1heGltdW0gbnVtYmVyIG9mICov Ci0jaWZuZGVmIE5PQ0tTUEVFRAkJCS8qIG9mIC1EJ3MgYWxsb3dlZCBvbiB0aGUgQ0MgKi8KLSNk ZWZpbmUgTk9DS1NQRUVECQkJLyogY29tbWFuZCBsaW5lLCBzbyBzb21lIG9mIHRoZW0gKi8KLSNl bmRpZiAvKiBOT0NLU1BFRUQgKi8JCQkvKiBoYXZlIHRvIGdvIGhlcmUuLi4gKi8KLSNpZm5kZWYg Tk9SRURJUkVDVAotI2RlZmluZSBOT1JFRElSRUNUCi0jZW5kaWYgLyogTk9SRURJUkVDVCAqLwot I2lmZGVmIFdIQVRBTUkKLSN1bmRlZiBXSEFUQU1JCi0jZW5kaWYgLyogV0hBVEFNSSAqLwotI2Vu ZGlmIC8qIHBkcDExICovCi0KLSNpZmRlZiBVSURCVUZMRU4KLSNkZWZpbmUgTE9HSU5MRU4gVUlE QlVGTEVOCi0jZWxzZQotI2RlZmluZSBMT0dJTkxFTiAzMgkJCS8qIExlbmd0aCBvZiBzZXJ2ZXIg bG9naW4gZmllbGQgKi8KLSNlbmRpZiAvKiBVSURCVUZMRU4gKi8KLQotLyogQmVsbCB2YWx1ZXMg Ki8KLQotI2RlZmluZSBYWUJfTk9ORSAgMAkJCS8qIE5vIGJlbGwgKi8KLSNkZWZpbmUgWFlCX0FV RCAgIDEJCQkvKiBBdWRpYmxlIGJlbGwgKi8KLSNkZWZpbmUgWFlCX1ZJUyAgIDIJCQkvKiBWaXNp YmxlIGJlbGwgKi8KLSNkZWZpbmUgWFlCX0JFRVAgIDAJCQkvKiBBdWRpYmxlIEJlZXAgKi8KLSNk ZWZpbmUgWFlCX1NZUyAgIDQJCQkvKiBBdWRpYmxlIFN5c3RlbSBTb3VuZHMgKi8KLQotLyogRmls ZSBzdGF0dXMgYml0cyAqLwotCi0jZGVmaW5lIEZTX09LICAgMQkJCS8qIEZpbGUgdHJhbnNmZXJy ZWQgT0sgKi8KLSNkZWZpbmUgRlNfUkVGVSAyCQkJLyogRmlsZSB3YXMgcmVmdXNlZCAqLwotI2Rl ZmluZSBGU19ESVNDIDQJCQkvKiBGaWxlIHdhcyBkaXNjYXJkZWQgKi8KLSNkZWZpbmUgRlNfSU5U UiA4CQkJLyogVHJhbnNmZXIgd2FzIGludGVycnVwdGVkIGJ5IHVzZXIgKi8KLSNkZWZpbmUgRlNf RVJSICAxNgkJCS8qIEZhdGFsIGVycm9yIGR1cmluZyB0cmFuc2ZlciAqLwotCi0vKiBDb250cm9s LWNoYXJhY3RlciAodW4pcHJlZml4aW5nIG9wdGlvbnMgKi8KLQotI2RlZmluZSBQWF9BTEwgIDAJ CQkvKiBQcmVmaXggYWxsIGNvbnRyb2wgY2hhcnMgKi8KLSNkZWZpbmUgUFhfQ0FVICAxCQkJLyog VW5wcmVmaXggY2F1dGlvdXNseSAqLwotI2RlZmluZSBQWF9XSUwgIDIJCQkvKiBVbnByZWZpeCB3 aXRoIHdpbGQgYWJhbmRvbiAqLwotI2RlZmluZSBQWF9OT04gIDMJCQkvKiBVbnByZWZpeCBhbGwg KD0gcHJlZml4IG5vbmUpICovCi0KLS8qIERlc3RpbmF0aW9uIGNvZGVzICovCi0KLSNkZWZpbmUg IERFU1RfRCAwCS8qICBESVNLICovCi0jZGVmaW5lICBERVNUX1MgMQkvKiAgU0NSRUVOICovCi0j ZGVmaW5lICBERVNUX1AgMgkvKiAgUFJJTlRFUiAqLwotI2RlZmluZSAgREVTVF9OIDMJLyogIE5P V0hFUkUgKGNhbGlicmF0aW9uIHJ1bikgKi8KLQotLyogRmlsZSB0cmFuc2ZlciBwcm90b2NvbHMg Ki8KLQotI2RlZmluZSAgUFJPVE9fSyAgICAwCS8qICAgS2VybWl0ICAgKi8KLSNpZmRlZiBDS19Y WVoKLSNkZWZpbmUgIFBST1RPX1ggICAgMQkvKiAgIFhNT0RFTSAgICAgKi8KLSNkZWZpbmUgIFBS T1RPX1hDICAgMgkvKiAgIFhNT0RFTS1DUkMgKi8KLSNkZWZpbmUgIFBST1RPX1kgICAgMwkvKiAg IFlNT0RFTSAgICAgKi8KLSNkZWZpbmUgIFBST1RPX0cgICAgNAkvKiAgIFlNT0RFTS1nICovCi0j ZGVmaW5lICBQUk9UT19aICAgIDUJLyogICBaTU9ERU0gICAqLwotI2RlZmluZSAgUFJPVE9fTyAg ICA2ICAgLyogICBPVEhFUiAgICAqLwotI2RlZmluZSAgTlBST1RPUyAgICA3ICAgLyogICBIb3cg bWFueSAqLwotI2Vsc2UKLSNkZWZpbmUgIE5QUk9UT1MgICAgMSAgIC8qICAgSG93IG1hbnkgKi8K LSNlbmRpZiAvKiBDS19YWVogKi8KLQotc3RydWN0IGNrX3AgewkJCQkvKiBDLUtlcm1pdCBQcm90 b2NvbCBpbmZvIHN0cnVjdHVyZSAqLwotICAgIGNoYXIgKiBwX25hbWU7CQkJLyogUHJvdG9jb2wg bmFtZSAqLwotICAgIGludCBycGt0bGVuOwkJCS8qIFBhY2tldCBsZW5ndGggLSByZWNlaXZlICov Ci0gICAgaW50IHNwa3RsZW47CQkJLyogUGFja2V0IGxlbmd0aCAtIHNlbmQgKi8KLSAgICBpbnQg c3BrdGZsZzsJCQkvKiAuLi4gKi8KLSAgICBpbnQgd2luc2l6ZTsJCQkvKiBXaW5kb3cgc2l6ZSAq LwotICAgIGludCBwcmVmaXg7CQkJCS8qIENvbnRyb2wtY2hhciBwcmVmaXhpbmcgb3B0aW9ucyAq LwotICAgIGludCBmbmNhOwkJCQkvKiBGaWxlbmFtZSBjb2xsaXNpb24gYWN0aW9uICovCi0gICAg aW50IGZuY247CQkJCS8qIEZpbGVuYW1lIGNvbnZlcnNpb24gKi8KLSAgICBpbnQgZm5zcDsJCQkJ LyogU2VuZCBmaWxlbmFtZSBwYXRoIHN0cmlwcGluZyAqLwotICAgIGludCBmbnJwOwkJCQkvKiBS ZWNlaXZlIGZpbGVuYW1lIHBhdGggc3RyaXBwaW5nICovCi0gICAgY2hhciAqIGhfYl9pbml0OwkJ LyogSG9zdCByZWNlaXZlIGluaXRpYXRpb24gc3RyaW5nIC0gdGV4dCAgICovCi0gICAgY2hhciAq IGhfdF9pbml0OwkJLyogSG9zdCByZWNlaXZlIGluaXRpYXRpb24gc3RyaW5nIC0gYmluYXJ5ICov Ci0gICAgY2hhciAqIGhfeF9pbml0OwkJLyogSG9zdCBzZXJ2ZXIgc3RyaW5nICovCi0gICAgY2hh ciAqIHBfYl9zY21kOwkJLyogU0VORCBjbWQgZm9yIGV4dGVybmFsIHByb3RvY29sIC0gdGV4dCAg ICovCi0gICAgY2hhciAqIHBfdF9zY21kOwkJLyogU0VORCBjbWQgZm9yIGV4dGVybmFsIHByb3Rv Y29sIC0gYmluYXJ5ICovCi0gICAgY2hhciAqIHBfYl9yY21kOwkJLyogUkVDViBjbWQgZm9yIGV4 dGVybmFsIHByb3RvY29sIC0gdGV4dCAgICovCi0gICAgY2hhciAqIHBfdF9yY21kOwkJLyogUkVD ViBjbWQgZm9yIGV4dGVybmFsIHByb3RvY29sIC0gYmluYXJ5ICovCi19OwotCi1zdHJ1Y3QgZmls ZWxpc3QgewkJCS8qIFNlbmQtZmlsZSBsaXN0IGVsZW1lbnQgKi8KLSAgICBjaGFyICogZmxfbmFt ZTsJCQkvKiBGaWxlbmFtZSAqLwotICAgIGludCBmbF9tb2RlOwkJCS8qIFRyYW5zZmVyIG1vZGUg Ki8KLSAgICBjaGFyICogZmxfYWxpYXM7CQkJLyogTmFtZSB0byBzZW5kIHRoZSBmaWxlIHVuZGVy ICovCi0gICAgc3RydWN0IGZpbGVsaXN0ICogZmxfbmV4dDsJCS8qIFBvaW50ZXIgdG8gbmV4dCBl bGVtZW50ICovCi19OwotCi0vKiBLZXJtaXQgc3lzdGVtIElEcyBhbmQgYXNzb2NpYXRlZCBwcm9w ZXJ0aWVzLi4uICovCi0KLXN0cnVjdCBzeXNkYXRhIHsKLSAgICBjaGFyICpzaWRfY29kZTsJLyog S2VybWl0IHN5c3RlbSBJRCBjb2RlICovCi0gICAgY2hhciAqc2lkX25hbWU7CS8qIERlc2NyaXB0 aXZlIG5hbWUgKi8KLSAgICBzaG9ydCBzaWRfdW5peGxpa2U7CS8qIFRyZWUtc3RydWN0dXJlZCBk aXJlY3Rvcnkgd2l0aCBzZXBhcmF0b3JzICovCi0gICAgY2hhciAgc2lkX2RpcnNlcDsJLyogRGly ZWN0b3J5IHNlcGFyYXRvciBjaGFyYWN0ZXIgaWYgdW5peGxpa2UgKi8KLSAgICBzaG9ydCBzaWRf ZGV2OwkvKiBDYW4gc3RhcnQgd2l0aCBkZXY6ICovCi0gICAgc2hvcnQgc2lkX2Nhc2U7CS8qIEJp dCBtYXBwZWQ6IDEgPSBjYXNlIG1hdHRlcnMsIDIgPSBjYXNlIHByZXNlcnZlZCAqLwotICAgIHNo b3J0IHNpZF9yZWNmbTsgICAgLyogVGV4dCByZWNvcmQgc2VwYXJhdG9yICovCi0vKgotICAgMCA9 IHVua25vd24gb3Igbm9uc3RyZWFtCi0gICAxID0gY3IKLSAgIDIgPSBsZgotICAgMyA9IGNybGYK LSovCi19OwotCi1zdHJ1Y3Qgc3NoX3BmIHsJCQkJLyogU1NIIHBvcnQgZm9yd2FyZGluZyAqLwot ICAgIGludCAgICBwMTsJCQkJLyogcG9ydCB0byBiZSBmb3J3YXJkZWQgKi8KLSAgICBjaGFyICog aG9zdDsJCQkvKiBob3N0ICovCi0gICAgaW50ICAgIHAyOwkJCQkvKiBwb3J0ICovCi19OwotCi0j ZGVmaW5lIFNFVF9PTiAgIDEJLyogR2VuZXJhbCB2YWx1ZXMgZm9yIHNldHRpbmdzIHRoYXQgY2Fu IGJlIE9OICovCi0jZGVmaW5lIFNFVF9PRkYgIDAJCQkvKiBPRkYsICovCi0jZGVmaW5lIFNFVF9B VVRPIDIJCQkvKiBvciBBVVRPICovCi0KLSNkZWZpbmUgUEFUSF9PRkYgMAkvKiBQYXRobmFtZXMg b2ZmICh0byBiZSBzdHJpcHBlZCkgKi8KLSNkZWZpbmUgUEFUSF9SRUwgMSAgICAgIC8qIFBhdGhu YW1lcyBvbiwgbGVmdCByZWxhdGl2ZSBpZiBwb3NzaWJsZSAqLwotI2RlZmluZSBQQVRIX0FCUyAy ICAgICAgLyogUGF0aG5hbWVzIGFic29sdXRlIGFsd2F5cyAqLwotI2RlZmluZSBQQVRIX0FVVE8g NAkvKiBQYXRobmFtZXMgaGFuZGxlZCBhdXRvbWF0aWNhbGx5ICovCi0KLS8qIEdFVCBPcHRpb25z ICovCi0KLSNkZWZpbmUgR09QVF9ERUwgMQkJCS8qIERlbGV0ZSBzb3VyY2UgZmlsZSAqLwotI2Rl ZmluZSBHT1BUX1JFQyAyCQkJLyogUmVjdXJzaXZlICovCi0jZGVmaW5lIEdPUFRfUkVTIDQJCQkv KiBSZWNvdmVyIChSZXNlbmQpICovCi0jZGVmaW5lIEdPUFRfQ01EIDgJCQkvKiBGaWxlbmFtZSBp cyBhIENvbW1hbmQgKi8KLQotLyogR0VUIFRyYW5zZmVyIE1vZGVzICovCi0KLSNkZWZpbmUgR01P RF9UWFQgMAkJCS8qIFRleHQgKi8KLSNkZWZpbmUgR01PRF9CSU4gMQkJCS8qIEJpbmFyeSAqLwot I2RlZmluZSBHTU9EX0FVVCAyCQkJLyogQXV0byAqLwotI2RlZmluZSBHTU9EX0xCTCAzCQkJLyog TGFiZWxlZCAqLwotCi0vKiBHRVQgRmlsZW5hbWUgT3B0aW9ucyAqLwotCi0jZGVmaW5lIEdOQU1f TElUIDAJCQkvKiBMaXRlcmFsICovCi0jZGVmaW5lIEdOQU1fQ05WIDEJCQkvKiBDb252ZXJ0ZWQg Ki8KLQotLyogR0VUIFBhdGhuYW1lIE9wdGlvbnMgKi8KLQotI2RlZmluZSBHUFRIX09GRiAwCQkJ LyogUGF0aG5hbWVzIE9mZiAqLwotI2RlZmluZSBHUFRIX1JFTCAxCQkJLyogUGF0aG5hbWVzIFJl bGF0aXZlICovCi0jZGVmaW5lIEdQVEhfQUJYIDIJCQkvKiBQYXRobmFtZXMgQWJzb2x1dGUgKi8K LQotI2lmbmRlZiBOT1NQTAotLyoKLSAgVGhlIElGIFJFTU9URS1PTkxZIGNvbW1hbmQgaXMgYXZh aWxhYmxlIG9ubHkgaW4gdmVyc2lvbnMKLSAgdGhhdCBhY3R1YWxseSBjYW4gYmUgdXNlZCBpbiBy ZW1vdGUgbW9kZSwgYW5kIG9ubHkgaWYgd2UgaGF2ZQotICBhbiBpbnRlcmFjdGl2ZSBjb21tYW5k IHBhcnNlci4KLSovCi0jZGVmaW5lIENLX0lGUk8KLSNpZmRlZiBNQUMKLSN1bmRlZiBDS19JRlJP Ci0jZWxzZQotI2lmZGVmIEdFTURPUwotI3VuZGVmIENLX0lGUk8KLSNlbmRpZiAvKiBHRU1ET1Mg Ki8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0vKiBTeXN0ZW1zIHdo b3NlIENPTk5FQ1QgbW9kdWxlcyBjYW4gZXhlY3V0ZSBBcHBsaWNhdGlvbiBQcm9ncmFtIENvbW1h bmRzICovCi0KLSNpZmRlZiBOT1NQTAkJCQkvKiBTY3JpcHQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ug Ki8KLSNpZmRlZiBDS19BUEMJCQkJLyogaXMgcmVxdWlyZWQgZm9yIEFQQy4gKi8KLSN1bmRlZiBD S19BUEMKLSNlbmRpZiAvKiBDS19BUEMgKi8KLSNpZm5kZWYgTk9BUEMKLSNkZWZpbmUgTk9BUEMK LSNlbmRpZiAvKiBOT0FQQyAqLwotI2lmbmRlZiBOT0FVVE9ETAotI2RlZmluZSBOT0FVVE9ETAot I2VuZGlmIC8qIE5PQVVUT0RMICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT0FQ QwkJCQkvKiBVbmxlc3MgdGhleSBzYWlkIE5PIEFQQyAqLwotI2lmbmRlZiBDS19BUEMJCQkJLyog QW5kIHRoZXkgZGlkbid0IGFscmVhZHkgZGVmaW5lIGl0ICovCi0jaWZkZWYgT1MyCQkJCS8qIE9T LzIgZ2V0cyBpdCAqLwotI2RlZmluZSBDS19BUEMKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBV TklYCQkJCS8qIFVOSVggZ2V0cyBpdCAqLwotI2RlZmluZSBDS19BUEMKLSNlbmRpZiAvKiBVTklY ICovCi0jaWZkZWYgVk1TCQkJCS8qIFZNUyB0b28gKi8KLSNkZWZpbmUgQ0tfQVBDCi0jZW5kaWYg LyogVk1TICovCi0jZW5kaWYgLyogQ0tfQVBDICovCi0jZW5kaWYgLyogTk9BUEMgKi8KLQotI2lm ZGVmIENLX0FQQwkJCQkvKiBBUEMgYnVmZmVyIGxlbmd0aCAqLwotI2lmbmRlZiBBUENCVUZMRU4J CQkvKiBTaG91bGQgYmUgbm8gYmlnZ2VyIHRoYW4gKi8KLSNpZmRlZiBOT1NQTAkJCQkvKiBjb21t YW5kIGJ1ZmZlciBsZW5ndGggKi8KLSNkZWZpbmUgQVBDQlVGTEVOIDYwOAkJCS8qIChzZWUgY2t1 Y21kLmgpIGJ1dCB3ZSBjYW4ndCAqLwotI2Vsc2UJCQkJCS8qIHJlZmVyZW5jZSBja3VjbWQuaCBz eW1ib2xzIGhlcmUgKi8KLSNkZWZpbmUgQVBDQlVGTEVOIDQwOTYKLSNlbmRpZiAvKiBOT1NQTCAq LwotI2VuZGlmIC8qIEFQQ0JVRkxFTiAqLwotI2RlZmluZSBBUENfT0ZGICAgMAkvKiBBUEMgT0ZG IChkaXNhYmxlZCkgKi8KLSNkZWZpbmUgQVBDX09OICAgIDEJLyogQVBDIE9OIChlbmFibGVkIGZv ciBub24tZGFuZ2Vyb3VzIGNvbW1hbmRzKSAqLwotI2RlZmluZSBBUENfVU5DSCAgMgkvKiBBUEMg VU5DSEVDS0VEIChlbmFibGVkIGZvciBBTEwgY29tbWFuZHMpIGJpdG1hc2sgKi8KLSNkZWZpbmUg QVBDX05PSU5QIDQgICAgIC8qIEFQQyAoZW5hYmxlZCB3aXRoIG5vIGlucHV0IGFsbG93ZWQgLSBi aXRtYXNrKSAqLwotI2RlZmluZSBBUENfSU5BQ1RJVkUgMAkvKiBBUEMgbm90IGluIHVzZSAqLwot I2RlZmluZSBBUENfUkVNT1RFICAgMQkvKiBBUEMgaW4gdXNlIGZyb20gUmVtb3RlICovCi0jZGVm aW5lIEFQQ19MT0NBTCAgICAyCS8qIEFQQyBiZWluZyB1c2VkIGZyb20gd2l0aGluIEtlcm1pdCAq LwotI2lmbmRlZiBOT0FVVE9ETAotI2lmbmRlZiBDS19BVVRPREwJLyogQXV0b2Rvd25sb2FkICov Ci0jaWZkZWYgT1MyCi0jZGVmaW5lIENLX0FVVE9ETAotI2Vsc2UKLSNpZmRlZiBVTklYCi0jZGVm aW5lIENLX0FVVE9ETAotI2Vsc2UKLSNpZmRlZiBWTVMKLSNkZWZpbmUgQ0tfQVVUT0RMCi0jZWxz ZQotI2lmZGVmIENLX0FVVE9ETAotI3VuZGVmIENLX0FVVE9ETAotI2VuZGlmIC8qIENLX0FVVE9E TCAgKi8KLSNlbmRpZiAvKiBOT0FVVE9ETCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8q IFVOSVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLQotI2Vs c2UgIC8qIENLX0FQQyBub3QgZGVmaW5lZCAqLwotCi0jaWZkZWYgTk9JQ1AKLSNpZmRlZiBVTklY Ci0jaWZuZGVmIENLX0FVVE9ETAotI2RlZmluZSBDS19BVVRPREwKLSNlbmRpZiAvKiBDS19BVVRP REwgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZWxzZSAgLyogTm90IE5PSUNQLi4uICovCi0jaWZk ZWYgQ0tfQVVUT0RMCi0jdW5kZWYgQ0tfQVVUT0RMCi0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0j ZW5kaWYgLyogTk9JQ1AgKi8KLSNlbmRpZiAvKiBDS19BUEMgKi8KLQotI2lmZGVmIE5PQVVUT0RM Ci0jaWZkZWYgQ0tfQVVUT0RMCi0jdW5kZWYgQ0tfQVVUT0RMCi0jZW5kaWYgLyogQ0tfQVVUT0RM ICovCi0jZW5kaWYgLyogTk9BVVRPREwgKi8KLQotLyogQ29kZXMgZm9yIHdoYXQgd2UgYXJlIGRv aW5nIG5vdyAtIGJpdCBtYXNrIHZhbHVlcyAqLwotCi0jZGVmaW5lIFdfTk9USElORyAgICAwCQkJ LyogTm90aGluZyAqLwotI2RlZmluZSBXX0lOSVQgICAgICAgMQkJCS8qIEluaXRpYWxpemluZyBw cm90b2NvbCAqLwotI2RlZmluZSBXX1NFTkQgICAgICAgMgkJCS8qIFNFTkRpbmcgb3IgTUFJTGlu ZyAqLwotI2RlZmluZSBXX1JFQ1YgICAgICAgNAkJCS8qIFJFQ0VJVkVpbmcgb3IgR0VUdGluZyAq LwotI2RlZmluZSBXX1JFTU8gICAgICAgOAkJCS8qIERvaW5nIGEgUkVNT1RFIGNvbW1hbmQgKi8K LSNkZWZpbmUgV19DT05ORUNUICAgMTYJCQkvKiBDT05ORUNUIG1vZGUgKi8KLSNkZWZpbmUgV19D T01NQU5EICAgMzIJCQkvKiBDb21tYW5kIG1vZGUgKi8KLSNkZWZpbmUgV19ESUFMSU5HICAgNjQJ CQkvKiBEaWFsaW5nIGEgbW9kZW0gKi8KLSNkZWZpbmUgV19GVFAgICAgICAxMjgJCQkvKiBGVFAg Ki8KLSNkZWZpbmUgV19GVF9ERUxFICAgNjQJCQkvKiBGVFAgTURFTEVURSAqLwotI2RlZmluZSBX X0tFUk1JVCAoV19JTklUfFdfU0VORHxXX1JFQ1Z8V19SRU1PKSAvKiBLZXJtaXQgcHJvdG9jb2wg Ki8KLSNkZWZpbmUgV19YRkVSIChXX0lOSVR8V19TRU5EfFdfUkVDVnxXX1JFTU98V19GVFApIC8q IEZpbGUgeGZlciBhbnkgcHJvdG9jb2wgKi8KLQotI2lmbmRlZiBOT1dIQVRBTUkKLSNpZm5kZWYg V0hBVEFNSQotI2RlZmluZSBXSEFUQU1JCi0jZW5kaWYgLyogV0hBVEFNSSAqLwotI2VuZGlmIC8q IE5PV0hBVEFNSSAqLwotCi0jaWZkZWYgV0hBVEFNSQkJCQkvKiBCaXQgbWFzayBwb3NpdGlvbnMg Zm9yIFdIQVRBTUkgKi8KLSNkZWZpbmUgV01JX1NFUlZFICAgMQkJCS8qIFNlcnZlciBtb2RlICov Ci0jZGVmaW5lIFdNSV9GTU9ERSAgIDIJCQkvKiBGaWxlIHRyYW5zZmVyIG1vZGUgKi8KLSNkZWZp bmUgV01JX0ZOQU1FICAgNAkJCS8qIEZpbGUgbmFtZSBjb252ZXJzaW9uICovCi0jZGVmaW5lIFdN SV9TVFJFQU0gIDgJCQkvKiBJIGhhdmUgYSByZWxpYWJsZSB0cmFuc3BvcnQgKi8KLSNkZWZpbmUg V01JX0NMRUFSICAxNgkJCS8qIEkgaGF2ZSBhIGNsZWFyIGNoYW5uZWwgKi8KLSNkZWZpbmUgV01J X0ZMQUcgICAzMgkJCS8qIEZsYWcgdGhhdCBXSEFUQU1JIGZpZWxkIGlzIHZhbGlkICovCi0vKiBX SEFUQU1JMiBiaXRzLi4uICovCi0jZGVmaW5lIFdNSTJfWE1PREUgIDEJCQkvKiBUcmFuc2ZlciBt b2RlIGF1dG8oMCkvbWFudWFsKDEpICovCi0jZGVmaW5lIFdNSTJfUkVDVSAgIDIJCQkvKiBUcmFu c2ZlciBpcyByZWN1cnNpdmUgKi8KLSNkZWZpbmUgV01JMl9GTEFHICAzMgkJCS8qIEZsYWcgdGhh dCBXSEFUQU1JMiBmaWVsZCBpcyB2YWxpZCAqLwotI2VuZGlmIC8qIFdIQVRBTUkgKi8KLQotLyog VGVybWluYWwgdHlwZXMgKi8KLSNkZWZpbmUgVlQxMDAgICAgIDAJCQkvKiBBbHNvIGZvciBWVDUy IG1vZGUgKi8KLSNkZWZpbmUgVEVLVFJPTklYIDEKLQotLyogTm9ybWFsIHBhY2tldCBhbmQgd2lu ZG93IHNpemUgKi8KLQotI2RlZmluZSBNQVhQQUNLIDk0CQkJLyogTWF4aW11bSB1bmV4dGVuZGVk IHBhY2tldCBzaXplICovCi0JCQkJCS8qIENhbid0IGJlIG1vcmUgdGhhbiA5NC4gKi8KLSNpZmRl ZiBwZHAxMQkJCQkvKiBNYXhpbXVtIHNsaWRpbmcgd2luZG93IHNsb3RzICovCi0jZGVmaW5lIE1B WFdTICA4Ci0jZWxzZQotI2RlZmluZSBNQVhXUyAzMgkJCS8qIENhbid0IGJlIG1vcmUgdGhhbiAz Mi4gKi8KLSNlbmRpZiAvKiBwZHAxMSAqLwotCi0vKiBNYXhpbXVtIGxvbmcgcGFja2V0IHNpemUg Zm9yIHNlbmRpbmcgcGFja2V0cyAqLwotLyogT3ZlcnJpZGUgdGhlc2UgZnJvbSBjYyBjb21tYW5k IGxpbmUgdmlhIC1ETUFYU1A9bm5uICovCi0KLSNpZmRlZiBJUklYCQkJCS8qIElyaXggNi40IGFu ZCBlYXJsaWVyIGhhcyAqLwotI2lmbmRlZiBNQVhTUAkJCQkvKiBUZWxuZXQgc2VydmVyIGJ1ZyAq LwotI2lmZGVmIElSSVg2NQotI2RlZmluZSBNQVhTUCA5MDI0Ci0jZWxzZQotI2RlZmluZSBNQVhT UCA0MDAwCi0jZW5kaWYgLyogSVJJWDY1ICovCi0jZW5kaWYgLyogTUFYU1AgKi8KLSNlbmRpZiAv KiBJUklYICovCi0KLSNpZmRlZiBEWU5BTUlDCi0jaWZuZGVmIE1BWFNQCi0jZGVmaW5lIE1BWFNQ IDkwMjQKLSNlbmRpZiAvKiBNQVhTUCAqLwotI2Vsc2UgIC8qIG5vdCBEWU5BTUlDICovCi0jaWZu ZGVmIE1BWFNQCi0jaWZkZWYgcGRwMTEKLSNkZWZpbmUgTUFYU1AgMTAyNAotI2Vsc2UKLSNkZWZp bmUgTUFYU1AgMjA0OAotI2VuZGlmIC8qIHBkcDExICovCi0jZW5kaWYgLyogTUFYU1AgKi8KLSNl bmRpZiAvKiBEWU5BTUlDICovCi0KLS8qIE1heGltdW0gbG9uZyBwYWNrZXQgc2l6ZSBmb3IgcmVj ZWl2aW5nIHBhY2tldHMgKi8KLS8qIE92ZXJyaWRlIHRoZXNlIGZyb20gY2MgY29tbWFuZCBsaW5l IHZpYSAtRE1BWFJQPW5ubiAqLwotCi0jaWZkZWYgRFlOQU1JQwotI2lmbmRlZiBNQVhSUAotI2Rl ZmluZSBNQVhSUCA5MDI0Ci0jZW5kaWYgLyogTUFYUlAgKi8KLSNlbHNlICAvKiBub3QgRFlOQU1J QyAqLwotI2lmbmRlZiBNQVhSUAotI2lmZGVmIHBkcDExCi0jZGVmaW5lIE1BWFJQIDEwMjQKLSNl bHNlCi0jZGVmaW5lIE1BWFJQIDIwNDgKLSNlbmRpZiAvKiBwZHAxMSAqLwotI2VuZGlmIC8qIE1B WFJQICovCi0jZW5kaWYgLyogRFlOQU1JQyAqLwotLyoKLSAgRGVmYXVsdCBzaXplcyBmb3Igd2lu ZG93ZWQgcGFja2V0IGJ1ZmZlcnMuCi0gIE92ZXJyaWRlIHRoZXNlIGZyb20gY2MgY29tbWFuZCBs aW5lIHZpYSAtRFNCU0laPW5ubiwgLURSQlNJWj1ubm4uCi0gIE9yIGp1c3QgLURCSUdCVUZPSy4K LSovCi0jaWZuZGVmIE1BWEdFVFBBVEgJCQkvKiBNYXhpbXVtIG51bWJlciBvZiBkaXJlY3Rvcmll cyAqLwotI2lmZGVmIEJJR0JVRk9LCQkJCS8qIGZvciBHRVQgcGF0aC4uLiAqLwotI2RlZmluZSBN QVhHRVRQQVRIIDEyOAotI2Vsc2UKLSNkZWZpbmUgTUFYR0VUUEFUSCAxNgotI2VuZGlmIC8qIEJJ R0JVRk9LICovCi0jZW5kaWYgLyogTUFYR0VUUEFUSCAqLwotCi0jaWZuZGVmIE5PU1BMCQkJCS8q IFF1ZXJ5IGJ1ZmZlciBsZW5ndGggKi8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgUUJVRkwgNDA5NQot I2Vsc2UKLSNpZmRlZiBCSUdCVUZPSwotI2RlZmluZSBRQlVGTCA0MDk1Ci0jZWxzZQotI2RlZmlu ZSBRQlVGTCAxMDIzCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNl bmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgRFlOQU1JQwotI2lmbmRlZiBTQlNJWgotI2lmZGVm IEJJR0JVRk9LCQkJCS8qIElmIGJpZyBidWZmZXJzIGFyZSBzYWZlLi4uICovCi0jZGVmaW5lIFNC U0laIDI5MDAwMAkJCS8qIEFsbG93IGZvciAxMCB4IDkwMjQgb3IgMjAgeCA0MDk2ICovCi0jZWxz ZQkJCQkJLyogT3RoZXJ3aXNlLi4uICovCi0jaWZkZWYgcGRwMTEKLSNkZWZpbmUgU0JTSVogMzAy MAotI2Vsc2UKLSNkZWZpbmUgU0JTSVogOTA1MAkJCS8qIEFsbG93IGZvciAzIHggMzAwMCwgZXRj LiAqLwotI2VuZGlmIC8qIHBkcDExICovCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLSNlbmRpZiAv KiBTQlNJWiAqLwotCi0jaWZuZGVmIFJCU0laCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgUkJT SVogMjkwMDAwCi0jZWxzZQotI2lmZGVmIHBkcDExCi0jZGVmaW5lIFJCU0laIDMwMjAKLSNlbHNl Ci0jZGVmaW5lIFJCU0laIDkwNTAKLSNlbmRpZiAvKiBwZHAxMSAqLwotI2VuZGlmIC8qIEJJR0JV Rk9LICovCi0jZW5kaWYgLyogUkJTSVogKi8KLSNlbHNlICAvKiBub3QgRFlOQU1JQyAqLwotI2lm ZGVmIHBkcDExCi0jZGVmaW5lIFNCU0laIDMwMjAKLSNkZWZpbmUgUkJTSVogMzAyMAotI2Vsc2UK LSNpZm5kZWYgU0JTSVoKLSNkZWZpbmUgU0JTSVogKE1BWFNQICogKE1BWFdTICsgMSkpCi0jZW5k aWYgLyogU0JTSVogKi8KLSNpZm5kZWYgUkJTSVoKLSNkZWZpbmUgUkJTSVogKE1BWFJQICogKE1B WFdTICsgMSkpCi0jZW5kaWYgLyogUkJTSVogKi8KLSNlbmRpZiAvKiBwZHAxMSAqLwotI2VuZGlm IC8qIERZTkFNSUMgKi8KLQotI2lmZGVmIEJJR0JVRk9LCi0jZGVmaW5lIFBLVE1TR0xFTiAxMDIz Ci0jZWxzZQotI2RlZmluZSBQS1RNU0dMRU4gODAKLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotCi0v KiBLZXJtaXQgcGFyYW1ldGVycyBhbmQgZGVmYXVsdHMgKi8KLQotI2RlZmluZSBDVExRCSAgICcj JwkJCS8qIENvbnRyb2wgY2hhciBwcmVmaXggSSB3aWxsIHVzZSAqLwotI2RlZmluZSBNWUVCUQkg ICAnJicJCQkvKiA4dGgtQml0IHByZWZpeCBjaGFyIEkgd2lsbCB1c2UgKi8KLSNkZWZpbmUgTVlS UFRRCSAgICd+JwkJCS8qIFJlcGVhdCBjb3VudCBwcmVmaXggSSB3aWxsIHVzZSAqLwotCi0jZGVm aW5lIE1BWFRSWQkgICAgMTAJCQkvKiBUaW1lcyB0byByZXRyeSBhIHBhY2tldCAqLwotI2RlZmlu ZSBNWVBBRE4JICAgIDAJCQkvKiBIb3cgbWFueSBwYWRkaW5nIGNoYXJzIEkgbmVlZCAqLwotI2Rl ZmluZSBNWVBBREMJICAgICdcMCcJCS8qIFdoaWNoIHBhZGRpbmcgY2hhcmFjdGVyIEkgbmVlZCAq LwotCi0jZGVmaW5lIERNWVRJTQkgICAgOAkJCS8qIEluaXRpYWwgdGltZW91dCBpbnRlcnZhbCB0 byB1c2UuICovCi0jZGVmaW5lIFVSVElNRQkgICAgMTUJCQkvKiBUaW1lb3V0IGludGVydmFsIHRv IHVzZSBvbiBtZS4gKi8KLSNkZWZpbmUgRFNSVlRJTSAgICAgMAkJCS8qIERlZmF1bHQgc2VydmVy IGNtZCB3YWl0IHRpbWVvdXQuICovCi0KLSNkZWZpbmUgREVGVFJOCSAgICAwCQkJLyogRGVmYXVs dCBsaW5lIHR1cm5hcm91bmQgaGFuZHNoYWtlICovCi0KLSNkZWZpbmUgTVlFT0wJICAgIENSCQkJ LyogSW5jb21pbmcgcGFja2V0IHRlcm1pbmF0b3IuICovCi0KLSNpZmRlZiBORVdERUZBVUxUUwot I2RlZmluZSBEUlBTSVoJICA0MDk1CQkJLyogRGVmYXVsdCBpbmNvbWluZyBwYWNrZXQgc2l6ZS4g Ki8KLSNkZWZpbmUgREZXU0laICAgICAgMzAJCQkvKiBEZWZhdWx0IHdpbmRvdyBzaXplICovCi0j ZGVmaW5lIERGQkNUICAgICAgICAzCQkJLyogRGVmYXVsdCBibG9jay1jaGVjayB0eXBlICovCi0j ZWxzZQotI2RlZmluZSBEUlBTSVoJICAgIDkwCQkJLyogRGVmYXVsdCBpbmNvbWluZyBwYWNrZXQg c2l6ZS4gKi8KLSNkZWZpbmUgREZXU0laICAgICAgIDEJCQkvKiBEZWZhdWx0IHdpbmRvdyBzaXpl ICovCi0jZGVmaW5lIERGQkNUICAgICAgICAzCQkJLyogRGVmYXVsdCBibG9jay1jaGVjayB0eXBl ICovCi0jZW5kaWYgLyogTkVXREVGQVVMVFMgKi8KLQotLyogVGhlIEhQLVVYIDUgYW5kIDYgVGVs bmV0IHNlcnZlcnMgY2FuIG9ubHkgc3dhbGxvdyA1MTMgYnl0ZXMgYXQgb25jZSAqLwotCi0jaWZk ZWYgSFBVWDUKLSNpZmRlZiBEUlBTSVoKLSN1bmRlZiBEUlBTSVoKLSNlbmRpZiAvKiBEUlBTSVog Ki8KLSNkZWZpbmUgRFJQU0laIDUwMAotI2Vsc2UKLSNpZmRlZiBIUFVYNgotI2lmZGVmIERSUFNJ WgotI3VuZGVmIERSUFNJWgotI2VuZGlmIC8qIERSUFNJWiAqLwotI2RlZmluZSBEUlBTSVogNTAw Ci0jZW5kaWYgLyogSFBVWDYgKi8KLSNlbmRpZiAvKiBIUFVYNSAqLwotCi0jZGVmaW5lIERTUFNJ WgkgICAgOTAJCQkvKiBEZWZhdWx0IG91dGJvdW5kIHBhY2tldCBzaXplLiAqLwotI2RlZmluZSBE REVMQVkgICAgICAxCQkJLyogRGVmYXVsdCBkZWxheS4gKi8KLSNkZWZpbmUgRFNQRUVECSAgICA5 NjAwCQkvKiBEZWZhdWx0IGxpbmUgc3BlZWQuICovCi0KLSNpZmRlZiBPUzIJCQkJLyogRGVmYXVs dCBDT05ORUNULW1vZGUgKi8KLSNkZWZpbmUgREZFU0MgMjkJCQkvKiBlc2NhcGUgY2hhcmFjdGVy ICovCi0jZWxzZQotI2lmZGVmIE5FWFQJCQkJLyogQ3RybC1dIGZvciBQQyBhbmQgTmVYVCAqLwot I2RlZmluZSBERkVTQyAyOQotI2Vsc2UKLSNpZmRlZiBHRU1ET1MJCQkJLyogQW5kIEF0YXJpIFNU ICovCi0jZGVmaW5lIERGRVNDIDI5Ci0jZWxzZQotI2RlZmluZSBERkVTQyAyOAkJCS8qIEN0cmwt YmFja3NsYXNoIGZvciBvdGhlcnMgKi8KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSNlbmRpZiAvKiBO RVhUICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBOT1BVU0gJCQkJLyogTk9QVVNIIGlt cGxpZXMgTk9KQyAqLwotI2lmbmRlZiBOT0pDCQkJCS8qIChubyBqb2IgY29udHJvbCkgKi8KLSNk ZWZpbmUgTk9KQwotI2VuZGlmIC8qIE5PSkMgKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lm ZGVmIFVOSVgJCQkJLyogRGVmYXVsdCBmb3IgU0VUIFNVU1BFTkQgKi8KLSNpZmRlZiBOT0pDCQkJ CS8qIFVOSVggYnV0IGpvYiBjb250cm9sIGRpc2FibGVkICovCi0jZGVmaW5lIERGU1VTUCAgICAg IDAKLSNlbHNlCQkJCQkvKiBVTklYLCBqb2IgY29udHJvbCBlbmFibGVkLiAqLwotI2RlZmluZSBE RlNVU1AgICAgICAxCi0jZW5kaWYgLyogTk9KQyAqLwotI2Vsc2UKLSNkZWZpbmUgREZTVVNQICAg ICAgMAotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmbmRlZiBERkNETVNHCi0jaWZkZWYgVU5JWE9S T1NLCi0jZGVmaW5lIERGQ0RNU0cgInt7Li8ucmVhZG1lfXtSRUFETUUuVFhUfXtSRUFELk1FfX0i Ci0jZWxzZQotI2RlZmluZSBERkNETVNHICJ7e1JFQURNRS5UWFR9e1JFQUQuTUV9fSIKLSNlbmRp ZiAvKiBVTklYT1JPU0sgKi8KLSNlbmRpZiAvKiBERkNETVNHICovCi0KLSNkZWZpbmUgTlNOREVY Q0VQVCA2NAkJLyogTWF4IHBhdHRlcm5zIGZvciAvRVhDRVBUOiBsaXN0ICovCi0KLS8qIEZpbGVz ICovCi0KLSNkZWZpbmUgWkNURVJNICAgICAgMAkgICAgCS8qIENvbnNvbGUgdGVybWluYWwgKi8K LSNkZWZpbmUgWlNURElPICAgICAgMQkJLyogU3RhbmRhcmQgaW5wdXQvb3V0cHV0ICovCi0jZGVm aW5lIFpJRklMRQkgICAgMgkJLyogQ3VycmVudCBpbnB1dCBmaWxlIChTRU5ELCBldGMpIChpbikg Ki8KLSNkZWZpbmUgWk9GSUxFICAgICAgMwkgICAgCS8qIEN1cnJlbnQgb3V0cHV0IGZpbGUgKFJF Q0VJVkUsIEdFVCkgKG91dCkgKi8KLSNkZWZpbmUgWkRGSUxFICAgICAgNAkgICAgCS8qIEN1cnJl bnQgZGVidWdnaW5nIGxvZyBmaWxlIChvdXQpICovCi0jZGVmaW5lIFpURklMRSAgICAgIDUJICAg IAkvKiBDdXJyZW50IHRyYW5zYWN0aW9uIGxvZyBmaWxlIChvdXQpICovCi0jZGVmaW5lIFpQRklM RSAgICAgIDYJICAgIAkvKiBDdXJyZW50IHBhY2tldCBsb2cgZmlsZSAob3V0KSAqLwotI2RlZmlu ZSBaU0ZJTEUgICAgICA3CQkvKiBDdXJyZW50IHNlc3Npb24gbG9nIGZpbGUgKG91dCkgKi8KLSNk ZWZpbmUgWlNZU0ZOCSAgICA4CQkvKiBJbnB1dC9PdXRwdXQgZnJvbSBhIHN5c3RlbSBmdW5jdGlv biAqLwotI2RlZmluZSBaUkZJTEUgICAgICA5ICAgICAgICAgICAvKiBMb2NhbCBmaWxlIGZvciBS RUFEIChpbikgKi8KLSNkZWZpbmUgWldGSUxFICAgICAxMCAgICAgICAgICAgLyogTG9jYWwgZmls ZSBmb3IgV1JJVEUgKG91dCkgKi8KLSNkZWZpbmUgWk1GSUxFICAgICAxMQkJLyogTWlzY2VsbGFu ZW91cyBmaWxlLCBlLmcuIGZvciBYTEFURSAqLwotI2RlZmluZSBaRElGSUwgICAgIDEyCQkvKiBE SUFMIGxvZyAqLwotI2RlZmluZSBaTkZJTFMgICAgIDEzCSAgICAJLyogSG93IG1hbnkgZGVmaW5l ZCBmaWxlIG51bWJlcnMgKi8KLQotI2lmZGVmIENLQ0hBTk5FTElPCi0KLS8qIEZpbGUgbW9kZXMg Ki8KLQotI2RlZmluZSBGTV9SRUEgICAgICAxCQkJLyogUmVhZCAqLwotI2RlZmluZSBGTV9XUkkg ICAgICAyCQkJLyogV3JpdGUgKi8KLSNkZWZpbmUgRk1fQVBQICAgICAgNAkJCS8qIEFwcGVuZCAq LwotI2RlZmluZSBGTV9SV0EgICAgICA3CQkJLyogUmVhZC9Xcml0ZS9BcHBlbmQgbWFzayAqLwot I2RlZmluZSBGTV9CSU4gICAgICA4CQkJLyogQmluYXJ5ICovCi0jZGVmaW5lIEZNX1JXQiAgICAg MTUJCQkvKiBSZWFkL1dyaXRlL0FwcGVuZC9CaW5hcnkgbWFzayAqLwotI2RlZmluZSBGTV9DTUQg ICAgIDE2CQkJLyogQ29tbWFuZCAqLwotI2RlZmluZSBGTV9FT0YgICAgIDY0CQkJLyogKHN0YXR1 cykgQXQgRU9GICovCi0KLS8qIEZpbGUgZXJyb3JzICovCi0KLSNkZWZpbmUgRlhfTkVSICAgICAg MAkJCS8qIE5vIGVycm9yICovCi0jZGVmaW5lIEZYX1NZUyAgICAgLTEJCQkvKiBTeXN0ZW0gZXJy b3IgKi8KLSNkZWZpbmUgRlhfRU9GICAgICAtMgkJCS8qIEVuZCBvZiBmaWxlICovCi0jZGVmaW5l IEZYX05PUCAgICAgLTMJCQkvKiBDaGFubmVsIG5vdCBvcGVuICovCi0jZGVmaW5lIEZYX0NITiAg ICAgLTQJCQkvKiBDaGFubmVsIG91dCBvZiByYW5nZSAqLwotI2RlZmluZSBGWF9STkcgICAgIC01 CQkJLyogQXJndW1lbnQgcmFuZ2UgZXJyb3IgKi8KLSNkZWZpbmUgRlhfRk5GICAgICAtNgkJCS8q IEZpbGUgbm90IGZvdW5kICovCi0jZGVmaW5lIEZYX0JGTiAgICAgLTcJCQkvKiBCYWQgb3IgbWlz c2luZyBmaWxlbmFtZSAqLwotI2RlZmluZSBGWF9OTUYgICAgIC04CQkJLyogTm8gbW9yZSBmaWxl cyAqLwotI2RlZmluZSBGWF9GT1AgICAgIC05CQkJLyogRm9yYmlkZGVuIG9wZXJhdGlvbiAqLwot I2RlZmluZSBGWF9BQ0MgICAgLTEwCQkJLyogQWNjZXNzIGRlbmllZCAqLwotI2RlZmluZSBGWF9C T00gICAgLTExCQkJLyogQmFkIGNvbWJpbmF0aW9uIG9mIG9wZW4gbW9kZXMgKi8KLSNkZWZpbmUg RlhfT0ZMICAgIC0xMgkJCS8qIEJ1ZmZlciBvdmVyZmxvdyAqLwotI2RlZmluZSBGWF9MTlUgICAg LTEzCQkJLyogQ3VycmVudCBsaW5lIG51bWJlciB1bmtub3duICovCi0jZGVmaW5lIEZYX1JPTyAg ICAtMTQJCQkvKiBTZXQgUm9vdCB2aW9sYXRpb24gKi8KLSNkZWZpbmUgRlhfTllJICAgIC05OQkJ CS8qIEZlYXR1cmUgbm90IGltcGxlbWVudGVkIHlldCAqLwotI2RlZmluZSBGWF9VTksgICAtOTk5 CQkJLyogVW5rbm93biBlcnJvciAqLwotCi1fUFJPVE9UWVAoIGludCB6X29wZW4sIChjaGFyICos IGludCkgKTsKLV9QUk9UT1RZUCggaW50IHpfY2xvc2UsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGlu dCB6X291dCwgKGludCwgY2hhciAqLCBpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IHpfaW4s IChpbnQsIGNoYXIgKiwgaW50LCBpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IHpfZmx1c2gs IChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCB6X3NlZWssIChpbnQsIENLX09GRl9UKSApOwotX1BS T1RPVFlQKCBpbnQgel9saW5lLCAoaW50LCBDS19PRkZfVCkgKTsKLV9QUk9UT1RZUCggaW50IHpf Z2V0bW9kZSwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IHpfZ2V0Zm51bSwgKGludCkgKTsKLV9Q Uk9UT1RZUCggQ0tfT0ZGX1Qgel9nZXRwb3MsIChpbnQpICk7Ci1fUFJPVE9UWVAoIENLX09GRl9U IHpfZ2V0bGluZSwgKGludCkgKTsKLV9QUk9UT1RZUCggQ0tfT0ZGX1Qgel9jb3VudCwgKGludCwg aW50KSApOwotX1BST1RPVFlQKCBjaGFyICogel9nZXRuYW1lLCAoaW50KSApOwotX1BST1RPVFlQ KCBjaGFyICogY2tmZXJyb3IsIChpbnQpICk7Ci0jZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KLQot X1BST1RPVFlQKCBpbnQgc2NhbmZpbGUsIChjaGFyICosIGludCAqLCBpbnQpICk7Ci1fUFJPVE9U WVAoIGludCBzY2Fuc3RyaW5nLCAoY2hhciAqKSApOwotCi0vKiAgQnVmZmVyZWQgZmlsZSBpL28g Li4uICAqLwotI2lmZGVmIE9TMgkJCQkvKiBLLTk1ICovCi0jZGVmaW5lIElOQlVGU0laRSAzMjc2 OAotI2RlZmluZSBPQlVGU0laRSAzMjc2OAotI2Vsc2UKLSNpZmRlZiBwZHAxMQotI2RlZmluZSBJ TkJVRlNJWkUgNTEyCi0jZGVmaW5lIE9CVUZTSVpFIDUxMgotI2Vsc2UKLS8qIEluIFZNUywgYWxs b3cgZm9yIGxvbmdlc3QgcG9zc2libGUgUk1TIHJlY29yZCAqLwotI2lmZGVmIFZNUwotI2RlZmlu ZSBJTkJVRlNJWkUgMzI3NjgJCQkvKiBGaWxlIGlucHV0IGJ1ZmZlciBzaXplICovCi0jZGVmaW5l IE9CVUZTSVpFIDMyNzY4CQkJLyogRmlsZSBvdXRwdXQgYnVmZmVyIHNpemUgKi8KLSNlbHNlICAv KiBOb3QgVk1TICovCi0jaWZkZWYgU1RSQVRVUwotI2lmZGVmIERZTkFNSUMKLSNkZWZpbmUgSU5C VUZTSVpFIDMyNzY3CQkJLyogRmlsZSBpbnB1dCBidWZmZXIgc2l6ZSAqLwotI2RlZmluZSBPQlVG U0laRSAzMjc2NwkJCS8qIEZpbGUgb3V0cHV0IGJ1ZmZlciBzaXplICovCi0jZWxzZSAvKiBTVFJB VFVTLCBub3QgRFlOQU1JQyAqLwotI2RlZmluZSBJTkJVRlNJWkUgNDA5NgkJCS8qIEZpbGUgaW5w dXQgYnVmZmVyIHNpemUgKi8KLSNkZWZpbmUgT0JVRlNJWkUgNDA5NgkJCS8qIEZpbGUgb3V0cHV0 IGJ1ZmZlciBzaXplICovCi0jZW5kaWYgLyogRFlOQU1JQyAqLwotI2Vsc2UgLyogbm90IFNUUkFU VVMgKi8KLSNpZmRlZiBCSUdCVUZPSwkJCQkvKiBTeXN0ZW1zIHdoZXJlIG1lbW9yeSBpcyAqLwot I2RlZmluZSBJTkJVRlNJWkUgMzI3NjgJCQkvKiBub3QgYSBwcm9ibGVtLi4uICovCi0jZGVmaW5l IE9CVUZTSVpFIDMyNzY4Ci0jZWxzZSAvKiBOb3QgQklHQlVGT0sgKi8KLSNkZWZpbmUgSU5CVUZT SVpFIDEwMjQKLSNkZWZpbmUgT0JVRlNJWkUgMTAyNAotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0j ZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIHBkcDExICov Ci0jZW5kaWYgLyogT1MyICovCi0KLS8qIEZpbGUtdHJhbnNmZXIgY2hhcmFjdGVyIGluL291dCBt YWNyb3MgZm9yIGJ1ZmZlcmVkIGkvbyAqLwotCi0vKiBHZXQgdGhlIG5leHQgZmlsZSBieXRlICov Ci0jaWZuZGVmIENLQ01BSQotI2lmbmRlZiBOT1hGRVIKLWV4dGVybiBjaGFyICoqIHNuZGFycmF5 OwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2VuZGlmIC8qIENLQ01BSSAqLwotI2lmZGVmIE5PU1BM Ci0jZGVmaW5lIHptaW5jaGFyKCkgKCgoLS16aW5jbnQpPj0wKSA/ICgoaW50KSgqemlucHRyKysp ICYgMDM3NykgOiB6aW5maWxsKCkpCi0jZWxzZQotI2lmZGVmIE5PWEZFUgotI2RlZmluZSB6bWlu Y2hhcigpICgoKC0temluY250KT49MCkgPyAoKGludCkoKnppbnB0cisrKSAmIDAzNzcpIDogemlu ZmlsbCgpKQotI2Vsc2UKLSNkZWZpbmUgem1pbmNoYXIoKSBcCi0oc25kYXJyYXk/YWduYnl0ZSgp OigoKC0temluY250KT49MCkgPyAoKGludCkoKnppbnB0cisrKSAmIDAzNzcpIDogemluZmlsbCgp KSkKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0vKiBTdHVmZiBh IGNoYXJhY3RlciBpbnRvIHRoZSBpbnB1dCBidWZmZXIgKi8KLSNkZWZpbmUgem1zdHVmZihjKSB6 aW5wdHItLSwgKnppbnB0ciA9IGMsIHppbmNudCsrCi0KLS8qIFB1dCBhIGNoYXJhY3RlciB0byBh IGZpbGUgKi8KLSNkZWZpbmUgem1jaG91dChjKSBcCi0oKCp6b3V0cHRyKys9KGNoYXIpKGMpKSwo KCgrK3pvdXRjbnQpPj16b2J1ZnNpemUpP3pvdXRkdW1wKCk6MCkpCi0KLS8qIFNjcmVlbiBmdW5j dGlvbnMgKi8KLQotI2RlZmluZSBYWUZEX04gMAkJCS8qIEZpbGUgdHJhbnNmZXIgZGlzcGxheTog Tm9uZSwgT2ZmICovCi0jZGVmaW5lIFhZRkRfUiAxCQkJLyogUmVndWxhciwgRG90cyAqLwotI2Rl ZmluZSBYWUZEX0MgMgkJCS8qIEN1cnNvci1wb3NpdGlvbmluZyAoZS5nLiBjdXJzZXMpICovCi0j ZGVmaW5lIFhZRkRfUyAzCQkJLyogQ1JUIFNjcmVlbiAqLwotI2RlZmluZSBYWUZEX0IgNAkJCS8q IEJyaWVmICovCi0jZGVmaW5lIFhZRkRfRyA1ICAgICAgICAgICAgICAgICAgICAgICAgLyogR1VJ ICovCi0KLSNpZmRlZiBOT0RJU1BMQVkKLSNkZWZpbmUgeHhzY3JlZW4oYSxiLGMsZCkKLSNkZWZp bmUgY2tzY3JlZW4oYSxiLGMsZCkKLSNlbHNlCi1fUFJPVE9UWVAoIFZPSUQgY2tzY3JlZW4sIChp bnQsIGNoYXIsIENLX09GRl9ULCBjaGFyICopICk7Ci0jaWZkZWYgVk1TCi0jZGVmaW5lIHh4c2Ny ZWVuKGEsYixjLGQpIFwKLWlmIChsb2NhbCAmJiBmZGlzcGxhICE9IFhZRkRfTikgXAotY2tzY3Jl ZW4oKGludClhLChjaGFyKWIsKENLX09GRl9UKWMsKGNoYXIgKilkKQotI2Vsc2UKLSNkZWZpbmUg eHhzY3JlZW4oYSxiLGMsZCkgXAotaWYgKGxvY2FsICYmICFiYWNrZ3JkICYmIGZkaXNwbGEgIT0g WFlGRF9OKSBcCi1ja3NjcmVlbigoaW50KWEsKGNoYXIpYiwoQ0tfT0ZGX1QpYywoY2hhciAqKWQp Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogTk9ESVNQTEFZICovCi0KLSNkZWZpbmUgU0NS X0ZOIDEgICAgCS8qIGZpbGVuYW1lICovCi0jZGVmaW5lIFNDUl9BTiAyICAgIAkvKiBhcy1uYW1l ICovCi0jZGVmaW5lIFNDUl9GUyAzIAkvKiBmaWxlLXNpemUgKi8KLSNkZWZpbmUgU0NSX1hEIDQg ICAgCS8qIHgtcGFja2V0IGRhdGEgKi8KLSNkZWZpbmUgU0NSX1NUIDUgICAgICAJLyogRmlsZSBz dGF0dXM6ICovCi0jZGVmaW5lICAgU1RfT0sgICAwICAgCS8qICBUcmFuc2ZlcnJlZCBPSyAqLwot I2RlZmluZSAgIFNUX0RJU0MgMSAJLyogIERpc2NhcmRlZCAqLwotI2RlZmluZSAgIFNUX0lOVCAg MiAgICAgLyogIEludGVycnVwdGVkICovCi0jZGVmaW5lICAgU1RfU0tJUCAzIAkvKiAgU2tpcHBl ZCAqLwotI2RlZmluZSAgIFNUX0VSUiAgNCAJLyogIEZhdGFsIEVycm9yICovCi0jZGVmaW5lICAg U1RfUkVGVSA1ICAgICAvKiAgUmVmdXNlZCAodXNlIEF0dHJpYnV0ZSBjb2RlcyBmb3IgcmVhc29u KSAqLwotI2RlZmluZSAgIFNUX0lOQyAgNgkvKiAgSW5jb21wbGV0ZWx5IHJlY2VpdmVkICovCi0j ZGVmaW5lICAgU1RfTVNHICA3CS8qICBJbmZvcm1hdGlvbmFsIG1lc3NhZ2UgKi8KLSNkZWZpbmUg ICBTVF9TSU0gIDgJLyogIFRyYW5zZmVyIHNpbXVsYXRlZCAoZS5nLiB3b3VsZCBiZSBzZW50KSAq LwotI2RlZmluZSBTQ1JfUE4gNiAgICAJLyogcGFja2V0IG51bWJlciAqLwotI2RlZmluZSBTQ1Jf UFQgNyAgICAJLyogcGFja2V0IHR5cGUgb3IgcHNldWRvdHlwZSAqLwotI2RlZmluZSBTQ1JfVEMg OCAgICAJLyogdHJhbnNhY3Rpb24gY29tcGxldGUgKi8KLSNkZWZpbmUgU0NSX0VNIDkgICAgCS8q IGVycm9yIG1lc3NhZ2UgKi8KLSNkZWZpbmUgU0NSX1dNIDEwICAgCS8qIHdhcm5pbmcgbWVzc2Fn ZSAqLwotI2RlZmluZSBTQ1JfVFUgMTEJLyogYXJiaXRyYXJ5IHVuZGVsaW1pdGVkIHRleHQgKi8K LSNkZWZpbmUgU0NSX1ROIDEyICAgCS8qIGFyYml0cmFyeSBuZXcgdGV4dCwgZGVsaW1pdGVkIGF0 IGJlZ2lubmluZyAqLwotI2RlZmluZSBTQ1JfVFogMTMgICAJLyogYXJiaXRyYXJ5IHRleHQsIGRl bGltaXRlZCBhdCBlbmQgKi8KLSNkZWZpbmUgU0NSX1FFIDE0CS8qIHF1YW50aXR5IGVxdWFscyAo ZS5nLiAiZm9vOiA3IikgKi8KLSNkZWZpbmUgU0NSX0NXIDE1CS8qIGNsb3NlIHNjcmVlbiB3aW5k b3cgKi8KLSNkZWZpbmUgU0NSX0NEIDE2ICAgICAgIC8qIGRpc3BsYXkgY3VycmVudCBkaXJlY3Rv cnkgKi8KLSNkZWZpbmUgU0NSX01TIDE3CS8qIG1lc3NhZ2UgZnJvbSBjbGllbnQgKi8KLQotLyog U2tpcCByZWFzb25zICovCi0KLSNkZWZpbmUgU0tQX0RBVCAxCQkJLyogRGF0ZS1UaW1lIChPbGRl cikgKi8KLSNkZWZpbmUgU0tQX0VRVSAyCQkJLyogRGF0ZS1UaW1lIChFcXVhbCkgKi8KLSNkZWZp bmUgU0tQX1RZUCAzCQkJLyogVHlwZSAqLwotI2RlZmluZSBTS1BfU0laIDQJCQkvKiBTaXplICov Ci0jZGVmaW5lIFNLUF9OQU0gNQkJCS8qIE5hbWUgY29sbGlzaW9uICovCi0jZGVmaW5lIFNLUF9F WEwgNgkJCS8qIEV4Y2VwdGlvbiBsaXN0ICovCi0jZGVmaW5lIFNLUF9ET1QgNwkJCS8qIERvdCBm aWxlICovCi0jZGVmaW5lIFNLUF9CS1UgOAkJCS8qIEJhY2t1cCBmaWxlICovCi0jZGVmaW5lIFNL UF9SRVMgOQkJCS8qIFJlY292ZXJ5IG5vdCBuZWVkZWQgKi8KLSNkZWZpbmUgU0tQX0FDQyAxMAkJ CS8qIEFjY2VzcyBkZW5pZWQgKi8KLSNkZWZpbmUgU0tQX05SRiAxMQkJCS8qIE5vdCBhIHJlZ3Vs YXIgZmlsZSAqLwotI2RlZmluZSBTS1BfU0lNIDEyCQkJLyogU2ltdWxhdGlvbiAoV09VTEQgQkUg U0VOVCkgKi8KLSNkZWZpbmUgU0tQX1hVUCAxMyAvKiBTaW11bGF0aW9uOiBXb3VsZCBiZSBzZW50 IGJlY2F1c2UgcmVtb3RlIGZpbGUgb2xkZXIgKi8KLSNkZWZpbmUgU0tQX1hOWCAxNCAvKiBTaW11 bGF0aW9uOiBkaXR0bywgYmVjYXVzZSByZW1vdGUgZmlsZSBkb2VzIG5vdCBleGlzdCAqLwotCi0v KiBNYWNyb3MgKi8KLQotI2lmbmRlZiBDS0NNQUkKLWV4dGVybiBpbnQgdGNwX2luY29taW5nOwkJ LyogVXNlZCBieSBFTkFCTEUgbWFjcm8gKi8KLSNlbmRpZiAvKiBDS0NNQUkgKi8KLQotI2lmbmRl ZiBUQ1BTT0NLRVQKLS8qCi0gIEVOQUJMRUQgdGVsbHMgd2hldGhlciBhIHNlcnZlci1zaWRlIHNl cnZpY2UgaXMgZW5hYmxlZC4KLSAgMCA9IGRpc2FibGVkLCAxID0gbG9jYWwsIDIgPSByZW1vdGUu Ci0gIEEgInNldCBob3N0ICoiIGNvbm5lY3Rpb24gaXMgdGVjaG5pY2FsbHkgbG9jYWwgYnV0IGxv Z2ljYWxseSByZW1vdGUKLSovCi0jZGVmaW5lIEVOQUJMRUQoeCkgKChsb2NhbCAmJiAoeCAmIDEp KSB8fCAoIWxvY2FsICYmICh4ICYgMikpKQotI2Vsc2UKLSNkZWZpbmUgRU5BQkxFRCh4KSAoKChs b2NhbCAmJiAhdGNwX2luY29taW5nKSAmJiAoeCAmIDEpKSB8fCBcCi0oKCFsb2NhbCB8fCB0Y3Bf aW5jb21pbmcpICYmICh4JjIpKSkKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotLyogVGhlc2Ug YXJlIGZyb20gdGhlIGJvb2sgKi8KLQotI2RlZmluZSB0b2NoYXIoY2gpICAoKChjaCkgKyBTUCAp ICYgMHhGRiApCS8qIE51bWJlciB0byBjaGFyYWN0ZXIgKi8KLSNkZWZpbmUgeHVuY2hhcihjaCkg KCgoY2gpIC0gU1AgKSAmIDB4RkYgKQkvKiBDaGFyYWN0ZXIgdG8gbnVtYmVyICovCi0jZGVmaW5l IGN0bChjaCkgICAgICgoKGNoKSBeIDY0ICkgJiAweEZGICkJLyogQ29udHJvbC9VbmNvbnRyb2wg dG9nZ2xlICovCi0jZGVmaW5lIHVucGFyKGNoKSAgICgoKGNoKSAmIDEyNykgJiAweEZGICkJLyog Q2xlYXIgcGFyaXR5IGJpdCAqLwotCi0jaWZuZGVmIE5PTE9DQUwJCQkJLyogQ09OTkVDVCByZXR1 cm4gc3RhdHVzIGNvZGVzICovCi0KLS8qIFVzZXJzIHdpbGwgc2VlIHRoZSBudW1iZXJzIHNvIHRo ZXkgY2FuJ3QgYmUgY2hhbmdlZCAqLwotLyogTnVtYmVycyA+PSAxMDAgaW5kaWNhdGUgY29ubmVj dGlvbiBsb3NzICovCi0KLSNkZWZpbmUgQ1NYX05PTkUgICAgICAgIDAJCS8qIE5vIENPTk5FQ1Qg eWV0IHNvIG5vIHN0YXR1cyAqLwotI2RlZmluZSBDU1hfRVNDQVBFICAgICAgMQkJLyogVXNlciBF c2NhcGVkIGJhY2sgKi8KLSNkZWZpbmUgQ1NYX1RSSUdHRVIgICAgIDIJCS8qIFRyaWdnZXIgd2Fz IGVuY291bnRlcmVkICovCi0jZGVmaW5lIENTWF9JS1NEICAgICAgICAzCQkvKiBJS1NEIGF1dG9z eW5jaHJvbml6YXRpb24gKi8KLSNkZWZpbmUgQ1NYX0FQQyAgICAgICAgIDQJCS8qIEFwcGxpY2F0 aW9uIFByb2dyYW0gQ29tbWFuZCAqLwotI2RlZmluZSBDU1hfSURMRSAgICAgICAgNQkJLyogSWRs ZSBsaW1pdCBleGNlZWRlZCAqLwotI2RlZmluZSBDU1hfVE5fRVJSICAgICAgNgkJLyogVGVsbmV0 IEVycm9yICovCi0jZGVmaW5lIENTWF9NQUNSTyAgICAgICA3ICAgICAgICAgICAgICAgLyogTWFj cm8gYm91bmQgdG8ga2V5c3Ryb2tlICovCi0jZGVmaW5lIENTWF9USU1FICAgICAgICA4ICAgICAg ICAgICAgICAgLyogVGltZSBMaW1pdCBleGNlZWRlZCAqLwotI2RlZmluZSBDU1hfSU5URVJOQUwg IDEwMAkJLyogSW50ZXJuYWwgZXJyb3IgKi8KLSNkZWZpbmUgQ1NYX0NBUlJJRVIgICAxMDEJCS8q IENhcnJpZXIgcmVxdWlyZWQgYnV0IG5vdCBkZXRlY3RlZCAqLwotI2RlZmluZSBDU1hfSU9FUlJP UiAgIDEwMgkJLyogSS9PIGVycm9yIG9uIGNvbm5lY3Rpb24gKi8KLSNkZWZpbmUgQ1NYX0hPU1RE SVNDICAxMDMJCS8qIERpc2Nvbm5lY3RlZCBieSBob3N0ICovCi0jZGVmaW5lIENTWF9VU0VSRElT QyAgMTA0CQkvKiBEaXNjb25uZWN0ZWQgYnkgdXNlciAqLwotI2RlZmluZSBDU1hfU0VTU0lPTiAg IDEwNQkJLyogU2Vzc2lvbiBMaW1pdCBleGNlZWRlZCAqLwotI2RlZmluZSBDU1hfVE5fUE9MICAg IDEwNgkJLyogUmVqZWN0ZWQgZHVlIHRvIFRlbG5ldCBQb2xpY3kgKi8KLSNkZWZpbmUgQ1NYX0tJ TExfU0lHICAxMDcgICAgICAgICAgICAgICAvKiBSZWNlaXZlZCBLaWxsIFNpZ25hbCAqLwotCi0v KiBTRVQgVEVSTUlOQUwgSURMRS1BQ1RJT04gdmFsdWVzICovCi0KLSNkZWZpbmUgSURMRV9SRVQg IDAJCQkvKiBSZXR1cm4gdG8gcHJvbXB0ICovCi0jZGVmaW5lIElETEVfRVhJVCAxCQkJLyogRXhp dCBmcm9tIEtlcm1pdCAqLwotI2RlZmluZSBJRExFX0hBTkcgMgkJCS8qIEhhbmd1cCB0aGUgY29u bmVjdGlvbiAqLwotI2RlZmluZSBJRExFX09VVCAgMwkJCS8qIE9VVFBVVCBhIHN0cmluZyAqLwot I2RlZmluZSBJRExFX1ROT1AgNAkJCS8qIFRFTE5FVCBOT1AgKi8KLSNkZWZpbmUgSURMRV9UQVlU IDUJCQkvKiBURUxORVQgQVlUICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0vKiBNb2RlbSBh bmQgZGlhbGluZyBkZWZpbml0aW9ucyAqLwotCi0jaWZuZGVmIE5PRElBTAotCi0vKiBNb2RlbSBj YXBhYmlsaXRpZXMgKGJpdCB2YWx1ZXMpICovCi0jZGVmaW5lIENLRF9BVCAgIDEJCQkvKiBIYXll cyBBVCBjb21tYW5kcyBhbmQgcmVzcG9uc2VzICovCi0jZGVmaW5lIENLRF9WMjUgIDIJCQkvKiBW LjI1YmlzIGNvbW1hbmRzIGFuZCByZXNwb25zZXMgKi8KLSNkZWZpbmUgQ0tEX1NCICAgNAkJCS8q IFNwZWVkIGJ1ZmZlcmluZyAqLwotI2RlZmluZSBDS0RfRUMgICA4CQkJLyogRXJyb3IgY29ycmVj dGlvbiAqLwotI2RlZmluZSBDS0RfREMgIDE2CQkJLyogRGF0YSBjb21wcmVzc2lvbiAqLwotI2Rl ZmluZSBDS0RfSFcgIDMyCQkJLyogSGFyZHdhcmUgZmxvdyBjb250cm9sICovCi0jZGVmaW5lIENL RF9TVyAgNjQJCQkvKiAoTG9jYWwpIHNvZnR3YXJlIGZsb3cgY29udHJvbCAqLwotI2RlZmluZSBD S0RfS1MgMTI4CQkJLyogS2VybWl0IHNwb29maW5nICovCi0jZGVmaW5lIENLRF9UQiAyNTYJCQkv KiBNYWRlIGJ5IFRlbGViaXQgKi8KLSNkZWZpbmUgQ0tEX0lEIDUxMgkJCS8qIEhhcyBDYWxsZXIg SUQgKi8KLQotLyogRElBTCBjb21tYW5kIHJlc3VsdCBjb2RlcyAqLwotI2RlZmluZSBESUFfVU5L ICAgLTEJCQkvKiBObyBESUFMIGNvbW1hbmQgZ2l2ZW4geWV0ICovCi0jZGVmaW5lIERJQV9PSyAg ICAgMAkJCS8qIERJQUwgc3VjY2VlZGVkICovCi0jZGVmaW5lIERJQV9OT01PICAgMQkJCS8qIE1v ZGVtIHR5cGUgbm90IHNwZWNpZmllZCAqLwotI2RlZmluZSBESUFfTk9MSSAgIDIJCQkvKiBDb21t dW5pY2F0aW9uIGxpbmUgbm90IHNwZWMnZCAqLwotI2RlZmluZSBESUFfT1BFTiAgIDMJCQkvKiBM aW5lIGNhbid0IGJlIG9wZW5lZCAqLwotI2RlZmluZSBESUFfTk9TUCAgIDQJCQkvKiBTcGVlZCBu b3Qgc3BlY2lmaWVkICovCi0jZGVmaW5lIERJQV9IQU5HICAgNQkJCS8qIEhhbmd1cCBmYWlsdXJl ICovCi0jZGVmaW5lIERJQV9JRSAgICAgNgkJCS8qIEludGVybmFsIGVycm9yIChtYWxsb2MsIGV0 YykgKi8KLSNkZWZpbmUgRElBX0lPICAgICA3CQkJLyogSS9PIGVycm9yICovCi0jZGVmaW5lIERJ QV9USU1PICAgOAkJCS8qIERpYWwgdGltZW91dCBleHBpcmVkICovCi0jZGVmaW5lIERJQV9JTlRS ICAgOQkJCS8qIERpYWxpbmcgaW50ZXJydXB0ZWQgYnkgdXNlciAqLwotI2RlZmluZSBESUFfTlJE WSAgMTAJCQkvKiBNb2RlbSBub3QgcmVhZHkgKi8KLSNkZWZpbmUgRElBX1BBUlQgIDExCQkJLyog UGFydGlhbCBkaWFsIGNvbW1hbmQgT0sgKi8KLSNkZWZpbmUgRElBX0RJUiAgIDEyCQkJLyogRGlh bGluZyBkaXJlY3RvcnkgZXJyb3IgKi8KLSNkZWZpbmUgRElBX0hVUCAgIDEzCQkJLyogTW9kZW0g d2FzIGh1bmcgdXAgT0sgKi8KLSNkZWZpbmUgRElBX05SU1AgIDE5CQkJLyogTm8gcmVzcG9uc2Ug ZnJvbSBtb2RlbSAqLwotI2RlZmluZSBESUFfRVJSICAgMjAJCQkvKiBNb2RlbSBjb21tYW5kIGVy cm9yICovCi0jZGVmaW5lIERJQV9OT0lOICAyMQkJCS8qIEZhaWx1cmUgdG8gaW5pdGlhbGl6ZSBt b2RlbSAqLwotI2RlZmluZSBESUFfQlVTWSAgMjIJCQkvKiBQaG9uZSBidXN5ICovCi0jZGVmaW5l IERJQV9OT0NBICAyMwkJCS8qIE5vIGNhcnJpZXIgKi8KLSNkZWZpbmUgRElBX05PRFQgIDI0CQkJ LyogTm8gZGlhbHRvbmUgKi8KLSNkZWZpbmUgRElBX1JJTkcgIDI1CQkJLyogUmluZywgaW5jb21p bmcgY2FsbCAqLwotI2RlZmluZSBESUFfTk9BTiAgMjYJCQkvKiBObyBhbnN3ZXIgKi8KLSNkZWZp bmUgRElBX0RJU0MgIDI3CQkJLyogRGlzY29ubmVjdGVkICovCi0jZGVmaW5lIERJQV9WT0lDICAy OAkJCS8qIEFuc3dlcmVkIGJ5IHZvaWNlICovCi0jZGVmaW5lIERJQV9OT0FDICAyOQkJCS8qIEFj Y2VzcyBkZW5pZWQsIGZvcmJpZGRlbiBjYWxsICovCi0jZGVmaW5lIERJQV9CTENLICAzMAkJCS8q IEJsYWNrbGlzdGVkICovCi0jZGVmaW5lIERJQV9ERUxBICAzMQkJCS8qIERlbGF5ZWQgKi8KLSNk ZWZpbmUgRElBX0ZBWCAgIDMyCQkJLyogRmF4ICovCi0jZGVmaW5lIERJQV9ESUdJICAzMyAgICAg ICAgICAgICAgICAgICAgLyogRGlnaXRhbCBMaW5lICovCi0jZGVmaW5lIERJQV9UQVBJICAzNAkJ CS8qIFRBUEkgZGlhbGluZyBmYWlsdXJlICovCi0jZGVmaW5lIERJQV9VRVJSICA5OAkJCS8qIFVu a25vd24gZXJyb3IgKi8KLSNkZWZpbmUgRElBX1VOU1AgIDk5CQkvKiBVbnNwZWNpZmllZCBmYWls dXJlIGRldGVjdGVkIGJ5IG1vZGVtICovCi0KLSNkZWZpbmUgTURNSU5GCXN0cnVjdCBtZG1pbmYK LQotTURNSU5GIHsJCQkvKiBTdHJ1Y3R1cmUgZm9yIG1vZGVtLXNwZWNpZmljIGluZm9ybWF0aW9u ICovCi0KLSAgICBjaGFyICogbmFtZTsJCS8qIERlc2NyaXB0aXZlIG5hbWUgKi8KLSAgICBjaGFy ICogcHVsc2U7CQkvKiBDb21tYW5kIHRvIGZvcmNlIHB1bHNlIGRpYWxpbmcgKi8KLSAgICBjaGFy ICogdG9uZTsJCS8qIENvbW1hbmQgdG8gZm9yY2UgdG9uZSBkaWFsaW5nICovCi0gICAgaW50ICAg IGRpYWxfdGltZTsJCS8qIFRpbWUgbW9kZW0gYWxsb3dzIGZvciBkaWFsaW5nIChzZWNzKSAqLwot ICAgIGNoYXIgKiBwYXVzZV9jaGFyczsJCS8qIENoYXJhY3RlcihzKSB0byB0ZWxsIG1vZGVtIHRv IHBhdXNlICovCi0gICAgaW50CSAgIHBhdXNlX3RpbWU7CQkvKiBUaW1lIGFzc29jaWF0ZWQgd2l0 aCBwYXVzZSBjaGFycyAoc2VjcykgKi8KLSAgICBjaGFyICogd2FrZV9zdHI7CQkvKiBTdHJpbmcg dG8gd2FrZXVwIG1vZGVtICYgcHV0IGluIGNtZCBtb2RlICovCi0gICAgaW50CSAgIHdha2VfcmF0 ZTsJCS8qIERlbGF5IGJldHdlZW4gd2FrZV9zdHIgY2hhcmFjdGVycyAobXNlY3MpICovCi0gICAg Y2hhciAqIHdha2VfcHJvbXB0OwkJLyogU3RyaW5nIHByb21wdCBhZnRlciB3YWtlX3N0ciAqLwot ICAgIGNoYXIgKiBkbW9kZV9zdHI7CQkvKiBTdHJpbmcgdG8gcHV0IG1vZGVtIGluIGRpYWxpbmcg bW9kZSAqLwotICAgIGNoYXIgKiBkbW9kZV9wcm9tcHQ7CS8qIFN0cmluZyBwcm9tcHQgZm9yIGRp YWxpbmcgbW9kZSAqLwotICAgIGNoYXIgKiBkaWFsX3N0cjsJCS8qIERpYWxpbmcgc3RyaW5nLCB3 aXRoICIlcyIgZm9yIG51bWJlciAqLwotICAgIGludCAgICBkaWFsX3JhdGU7CQkvKiBJbnRlcmNo YXIgZGVsYXkgdG8gbW9kZW0gKG1zZWMpICovCi0gICAgaW50ICAgIGVzY190aW1lOwkJLyogRXNj YXBlIHNlcXVlbmNlIGd1YXJkIHRpbWUgKG1zZWMpICovCi0gICAgaW50ICAgIGVzY19jaGFyOwkJ LyogRXNjYXBlIGNoYXJhY3RlciAqLwotICAgIGNoYXIgKiBodXBfc3RyOwkJLyogSGFuZ3VwIHN0 cmluZyAqLwotICAgIGNoYXIgKiBod2ZjX3N0cjsJCS8qIEhhcmR3YXJlIGZsb3cgY29udHJvbCBz dHJpbmcgKi8KLSAgICBjaGFyICogc3dmY19zdHI7CQkvKiBTb2Z0d2FyZSBmbG93IGNvbnRyb2wg c3RyaW5nICovCi0gICAgY2hhciAqIG5vZmNfc3RyOwkJLyogTm8gZmxvdyBjb250cm9sIHN0cmlu ZyAqLwotICAgIGNoYXIgKiBlY19vbl9zdHI7CQkvKiBFcnJvciBjb3JyZWN0aW9uIG9uIHN0cmlu ZyAqLwotICAgIGNoYXIgKiBlY19vZmZfc3RyOwkJLyogRXJyb3IgY29ycmVjdGlvbiBvZmYgc3Ry aW5nICovCi0gICAgY2hhciAqIGRjX29uX3N0cjsJCS8qIERhdGEgY29tcHJlc3Npb24gb24gc3Ry aW5nICovCi0gICAgY2hhciAqIGRjX29mZl9zdHI7CQkvKiBEYXRhIGNvbXByZXNzaW9uIG9mZiBz dHJpbmcgKi8KLSAgICBjaGFyICogYWFfb25fc3RyOwkJLyogQXV0b2Fuc3dlciBvbiBzdHJpbmcg Ki8KLSAgICBjaGFyICogYWFfb2ZmX3N0cjsJCS8qIEF1dG9hbnN3ZXIgb2ZmIHN0cmluZyAqLwot ICAgIGNoYXIgKiBzYl9vbl9zdHI7CQkvKiBTcGVlZCBidWZmZXJpbmcgb24gc3RyaW5nICovCi0g ICAgY2hhciAqIHNiX29mZl9zdHI7CQkvKiBTcGVlZCBidWZmZXJpbmcgb2ZmIHN0cmluZyAqLwot ICAgIGNoYXIgKiBzcF9vbl9zdHI7CQkvKiBTcGVha2VyIG9uIHN0cmluZyAqLwotICAgIGNoYXIg KiBzcF9vZmZfc3RyOwkJLyogU3BlYWtlciBvZmYgc3RyaW5nICovCi0gICAgY2hhciAqIHZvbDFf c3RyOwkJLyogVm9sdW1lIGxvdyBzdHJpbmcgKi8KLSAgICBjaGFyICogdm9sMl9zdHI7CQkvKiBW b2x1bWUgbWVkIHN0cmluZyAqLwotICAgIGNoYXIgKiB2b2wzX3N0cjsJCS8qIFZvbHVtZSBoaWdo IHN0cmluZyAqLwotICAgIGNoYXIgKiBpZ25vcmVkdDsJCS8qIElnbm9yZSBkaWFsdG9uZSBzdHJp bmcgKi8KLSAgICBjaGFyICogaW5pMjsJCS8qIExhc3QtbWludXRlIGluaXQgc3RyaW5nICovCi0g ICAgbG9uZyAgIG1heF9zcGVlZDsJCS8qIE1heGltdW0gaW50ZXJmYWNlIHNwZWVkICovCi0gICAg bG9uZyAgIGNhcGFzOwkJLyogQ2FwYWJpbGl0eSBiaXRzICovCi0gICAgLyogZnVuY3Rpb24gdG8g cmVhZCBtb2RlbSdzIHJlc3BvbnNlIHN0cmluZyB0byBhIG5vbi1kaWFsaW5nIGNvbW1hbmQgKi8K LSAgICBfUFJPVE9UWVAoIGludCAoKm9rX2ZuKSwgKGludCxpbnQpICk7Ci19OwotI2VuZGlmIC8q IE5PRElBTCAqLwotCi0vKiBTeW1ib2xzIGZvciBGaWxlIEF0dHJpYnV0ZXMgKi8KLQotI2RlZmlu ZSBBVF9YQUxMICAwCQkJLyogQWxsIG9mIHRoZW0gKi8KLSNkZWZpbmUgQVRfQUxMWSAgMQkJCS8q IEFsbCBvZiB0aGVtIG9uIChZZXMpICovCi0jZGVmaW5lIEFUX0FMTE4gIDIJCQkvKiBBbGwgb2Yg dGhlbSBvZmYgKG5vKSAqLwotI2RlZmluZSBBVF9MRU5LICAzCQkJLyogTGVuZ3RoIGluIEsgKi8K LSNkZWZpbmUgQVRfRlRZUCAgNAkJCS8qIEZpbGUgVHlwZSAqLwotI2RlZmluZSBBVF9EQVRFICA1 CQkJLyogQ3JlYXRpb24gZGF0ZSAqLwotI2RlZmluZSBBVF9DUkVBICA2CQkJLyogQ3JlYXRvciAq LwotI2RlZmluZSBBVF9BQ0NUICA3CQkJLyogQWNjb3VudCAqLwotI2RlZmluZSBBVF9BUkVBICA4 CQkJLyogQXJlYSAqLwotI2RlZmluZSBBVF9QU1dEICA5CQkJLyogUGFzc3dvcmQgZm9yIGFyZWEg Ki8KLSNkZWZpbmUgQVRfQkxLUyAxMAkJCS8qIEJsb2Nrc2l6ZSAqLwotI2RlZmluZSBBVF9BQ0NF IDExCQkJLyogQWNjZXNzICovCi0jZGVmaW5lIEFUX0VOQ08gMTIJCQkvKiBFbmNvZGluZyAqLwot I2RlZmluZSBBVF9ESVNQIDEzCQkJLyogRGlzcG9zaXRpb24gKi8KLSNkZWZpbmUgQVRfTFBSTyAx NAkJCS8qIExvY2FsIFByb3RlY3Rpb24gKi8KLSNkZWZpbmUgQVRfR1BSTyAxNQkJCS8qIEdlbmVy aWMgUHJvdGVjdGlvbiAqLwotI2RlZmluZSBBVF9TWVNJIDE2CQkJLyogU3lzdGVtIElEICovCi0j ZGVmaW5lIEFUX1JFQ0YgMTcJCQkvKiBSZWNvcmQgRm9ybWF0ICovCi0jZGVmaW5lIEFUX1NZU1Ag MTgJCQkvKiBTeXN0ZW0tRGVwZW5kZW50IFBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgQVRfTEVOQiAx OQkJCS8qIExlbmd0aCBpbiBCeXRlcyAqLwotI2RlZmluZSBBVF9FT0EgIDIwCQkJLyogRW5kIG9m IEF0dHJpYnV0ZXMgKi8KLQotLyogS2VybWl0IHBhY2tldCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUg Ki8KLQotc3RydWN0IHBrdGluZm8gewkJCS8qIFBhY2tldCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUg Ki8KLSAgICBDSEFSICpiZl9hZHI7CQkJLyogIGJ1ZmZlciBhZGRyZXNzICovCi0gICAgaW50ICAg YmZfbGVuOwkJCS8qICBidWZmZXIgbGVuZ3RoICovCi0gICAgQ0hBUiAqcGtfYWRyOwkJCS8qIFBh Y2tldCBhZGRyZXNzIHdpdGhpbiBidWZmZXIgKi8KLSAgICBpbnQgICBwa19sZW47CQkJLyogIGxl bmd0aCBvZiBkYXRhIHdpdGhpbiBidWZmZXIgKi8KLSAgICBpbnQgICBwa190eXA7CQkJLyogIHBh Y2tldCB0eXBlICovCi0gICAgaW50ICAgcGtfc2VxOwkJCS8qICBwYWNrZXQgc2VxdWVuY2UgbnVt YmVyICovCi0gICAgaW50ICAgcGtfcnRyOwkJCS8qICByZXRyYW5zbWlzc2lvbiBjb3VudCAqLwot fTsKLQotLyogU2VuZCBNb2RlcyAoaW5kaWNhdGluZyB3aGljaCB0eXBlIG9mIFNFTkQgY29tbWFu ZCB3YXMgdXNlZCkgKi8KLQotI2RlZmluZSBTTV9TRU5EICAgICAwCi0jZGVmaW5lIFNNX01TRU5E ICAgIDEKLSNkZWZpbmUgU01fUkVTRU5EICAgMgotI2RlZmluZSBTTV9QU0VORCAgICAzCi0jZGVm aW5lIFNNX01BSUwgICAgIDQKLSNkZWZpbmUgU01fUFJJTlQgICAgNQotCi0jZGVmaW5lIE9QVEJV RkxFTiAyNTYKLQotLyogRmlsZS1yZWxhdGVkIHN5bWJvbHMgYW5kIHN0cnVjdHVyZXMgKi8KLS8q IFVzZWQgYnkgU0VUIEZJTEUgY29tbWFuZCBidXQgYWxzbyBieSBwcm90b2NvbCBhbmQgaS9vIG1v ZHVsZXMgKi8KLQotI2RlZmluZSBYTU9ERV9BIDAJLyogVHJhbnNmZXIgbW9kZSBBdXRvbWF0aWMg Ki8KLSNkZWZpbmUgWE1PREVfTSAxCS8qIFRyYW5zZmVyIG1vZGUgTWFudWFsICAgICovCi0KLSNk ZWZpbmUgICBYWUZJTE4gMCAgCS8qICBOYW1pbmcgICovCi0jZGVmaW5lICAgICBYWUZOX0wgMAkv KiAgICBMaXRlcmFsICovCi0jZGVmaW5lICAgICBYWUZOX0MgMQkvKiAgICBDb252ZXJ0ZWQgKi8K LSNkZWZpbmUgICBYWUZJTFQgMSAgCS8qICBUeXBlICAgICovCi0jZGVmaW5lICAgICBYWUZUX1Qg MCAgICAvKiAgICBUZXh0ICAqLwotI2RlZmluZSAgICAgWFlGVF9CIDEgICAgLyogICAgQmluYXJ5 ICovCi0jZGVmaW5lICAgICBYWUZUX0kgMiAgICAvKiAgICBJbWFnZSBvciBCbG9jayAoVk1TKSAq LwotI2RlZmluZSAgICAgWFlGVF9MIDMJLyogICAgTGFiZWxlZCAodGFnZ2VkIGJpbmFyeSkgKFZN UyBvciBPUy8yKSAqLwotI2RlZmluZSAgICAgWFlGVF9VIDQgICAgLyogICAgQmluYXJ5IFVuZGVm aW5lZCAoVk1TKSAqLwotI2RlZmluZSAgICAgWFlGVF9NIDUJLyogICAgTWFjQmluYXJ5IChNYWNp bnRvc2gpICovCi0jZGVmaW5lICAgICBYWUZUX1ggNgkvKiAgICBURU5FWCAoRlRQIFRZUEUgTCA4 KSAqLwotI2RlZmluZSAgICAgWFlGVF9EIDk5ICAgLyogICAgRGVidWcgKGZvciBzZXNzaW9uIGxv Z3MpICovCi0jZGVmaW5lICAgWFlGSUxXIDIgICAgICAvKiAgV2FybmluZyAqLwotI2RlZmluZSAg IFhZRklMRCAzICAgICAgLyogIERpc3BsYXkgKi8KLSNkZWZpbmUgICBYWUZJTEMgNCAgICAgIC8q ICBDaGFyYWN0ZXIgc2V0ICovCi0jZGVmaW5lICAgWFlGSUxGIDUgICAgICAvKiAgUmVjb3JkIEZv cm1hdCAqLwotI2RlZmluZSAgICAgWFlGRl9TICAwICAgLyogICAgU3RyZWFtICovCi0jZGVmaW5l ICAgICBYWUZGX1YgIDEgICAvKiAgICBWYXJpYWJsZSAqLwotI2RlZmluZSAgICAgWFlGRl9WQiAy ICAgLyogICAgVmFyaWFibGUgd2l0aCBSQ1cncyAqLwotI2RlZmluZSAgICAgWFlGRl9GICAzICAg LyogICAgRml4ZWQgbGVuZ3RoICovCi0jZGVmaW5lICAgICBYWUZGX1UgIDQgICAvKiAgICBVbmRl ZmluZWQgKi8KLSNkZWZpbmUgICBYWUZJTFIgNiAgICAgIC8qICBSZWNvcmQgbGVuZ3RoICovCi0j ZGVmaW5lICAgWFlGSUxPIDcgICAgICAvKiAgT3JnYW5pemF0aW9uICovCi0jZGVmaW5lICAgICBY WUZPX1MgMCAgICAvKiAgICBTZXF1ZW50aWFsICovCi0jZGVmaW5lICAgICBYWUZPX0kgMSAgICAv KiAgICBJbmRleGVkICovCi0jZGVmaW5lICAgICBYWUZPX1IgMiAgICAvKiAgICBSZWxhdGl2ZSAq LwotI2RlZmluZSAgIFhZRklMUCA4ICAgICAgLyogIFByaW50ZXIgY2FycmlhZ2UgY29udHJvbCAq LwotI2RlZmluZSAgICAgWFlGUF9OIDAgICAgLyogICAgTmV3bGluZSAoaW1iZWRkZWQgY29udHJv bCBjaGFyYWN0ZXJzKSAqLwotI2RlZmluZSAgICAgWFlGUF9GIDEgICAgLyogICAgRk9SVFJBTiAo c3BhY2UsIDEsICssIGV0YywgaW4gY29sdW1uIDEgKi8KLSNkZWZpbmUgICAgIFhZRlBfUCAyICAg IC8qICAgIFNwZWNpYWwgcHJpbnRlciBjYXJyaWFnZSBjb250cm9scyAqLwotI2RlZmluZSAgICAg WFlGUF9YIDQgICAgLyogICAgTm9uZSAqLwotI2RlZmluZSAgIFhZRklMWCA5ICAgICAgLyogIENv bGxpc2lvbiBBY3Rpb24gKi8KLSNkZWZpbmUgICAgIFhZRlhfQSAzICAgIC8qICAgIEFwcGVuZCAq LwotI2RlZmluZSAgICAgWFlGWF9RIDUgICAgLyogICAgQXNrICovCi0jZGVmaW5lICAgICBYWUZY X0IgMiAgICAvKiAgICBCYWNrdXAgKi8KLSNkZWZpbmUgICAgIFhZRlhfRCA0ICAgIC8qICAgIERp c2NhcmQgKi8KLSNkZWZpbmUgICAgIFhZRlhfUiAwICAgIC8qICAgIFJlbmFtZSAqLwotI2RlZmlu ZSAgICAgWFlGWF9YIDEgICAgLyogICAgUmVwbGFjZSAqLwotI2RlZmluZSAgICAgWFlGWF9VIDYg ICAgLyogICAgVXBkYXRlICovCi0jZGVmaW5lICAgICBYWUZYX00gNyAgICAvKiAgICBNb2R0aW1l cyBkaWZmZXIgKi8KLSNkZWZpbmUgICBYWUZJTEIgMTAgICAgIC8qICBCbG9ja3NpemUgKi8KLSNk ZWZpbmUgICBYWUZJTFogMTEgICAgIC8qICBEaXNwb3NpdGlvbiAqLwotI2RlZmluZSAgICAgWFlG Wl9OIDAgICAgLyogICAgTmV3LCBDcmVhdGUgKi8KLSNkZWZpbmUgICAgIFhZRlpfQSAxICAgIC8q ICAgIE5ldywgYXBwZW5kIGlmIGZpbGUgZXhpc3RzLCBlbHNlIGNyZWF0ZSAqLwotI2RlZmluZSAg ICAgWFlGWl9PIDIgICAgLyogICAgT2xkLCBmaWxlIG11c3QgZXhpc3QgKi8KLSNkZWZpbmUgICBY WUZJTFMgMTIgICAgIC8qICBGaWxlIEJ5dGUgU2l6ZSAqLwotI2RlZmluZSAgIFhZRklMTCAxMyAg ICAgLyogIEZpbGUgTGFiZWwgKFZNUykgKi8KLSNkZWZpbmUgICBYWUZJTEkgMTQgICAgIC8qICBG aWxlIEluY29tcGxldGUgKi8KLSNkZWZpbmUgICBYWUZJTFEgMTUgICAgIC8qICBGaWxlIHBhdGgg YWN0aW9uIChzdHJpcCBvciBub3QpICovCi0jZGVmaW5lICAgWFlGSUxHIDE2ICAgICAvKiAgRmls ZSBkb3dubG9hZCBkaXJlY3RvcnkgKi8KLSNkZWZpbmUgICBYWUZJTEEgMTcgICAgIC8qICBMaW5l IHRlcm1pbmF0b3IgZm9yIGxvY2FsIHRleHQgZmlsZXMgKi8KLSNkZWZpbmUgICAgIFhZRkFfTCAw MTIgIC8qICAgIExGIChhcyBpbiBVTklYKSAqLwotI2RlZmluZSAgICAgWFlGQV9DIDAxNSAgLyog ICAgQ1IgKGFzIGluIE9TLTkgb3IgTWFjIE9TKSAqLwotI2RlZmluZSAgICAgWFlGQV8yIDAwMCAg LyogIENSTEYgLS0gTm90ZTogdGhpcyBtdXN0IGJlIGRlZmluZWQgYXMgMCAqLwotI2RlZmluZSAg IFhZRklMWSAxOCAgICAgLyogIERlc3RpbmF0aW9uICovCi0jZGVmaW5lICAgWFlGSUxWIDE5CS8q ICBFT0YgRGV0ZWN0aW9uIE1ldGhvZCAqLwotI2RlZmluZSAgICAgWFlFT0ZfTCAwICAgLyogICAg RmlsZSBsZW5ndGggKi8KLSNkZWZpbmUgICAgIFhZRU9GX1ogMSAgIC8qICAgIEN0cmwtWiBpbiBm aWxlICovCi0jZGVmaW5lICAgWFlGSUxIICAgMjAgICAvKiAgT1VUUFVUIHBhcmFtZXRlcnMgLSBi dWZmZXJlZCwgYmxvY2tpbmcsIGV0YyAqLwotI2RlZmluZSAgIFhZRklCUCAgIDIxCS8qICBCSU5B UlktUEFUVEVSTiAqLwotI2RlZmluZSAgIFhZRklUUCAgIDIyICAgLyogIFRFWFQtUEFUVEVSTiAq LwotI2RlZmluZSAgIFhZRklQQSAgIDIzICAgLyogIFBBVFRFUk5TIE9OL09GRiAqLwotI2RlZmlu ZSAgIFhZRklMVSAgIDI0ICAgLyogIFVDUyAuLi4gKi8KLSNkZWZpbmUgICBYWUZfUFJNICAyNSAg IC8qICBQRVJNSVNTSU9OUywgUFJPVEVDVElPTiAqLwotI2RlZmluZSAgIFhZRl9JTlNQIDI2ICAg LyogIElOU1BFQ1RJT04gKFNDQU4pICovCi0jZGVmaW5lICAgWFlGX0RGTFQgMjcgICAvKiAgREVG QVVMVCAoY2hhcmFjdGVyIHNldHMpICovCi0jZGVmaW5lICAgWFlGX1NTUEEgMjggICAvKiAgU1RS SU5HU1BBQ0UgKi8KLSNkZWZpbmUgICBYWUZfTFNJWiAyOSAgIC8qICBMSVNUU0laRSAqLwotCi0v KiBGaWxlIFR5cGUgKHJldHVybiBjb2RlKSBkZWZpbml0aW9ucyBhbmQgY29ycmVzcG9uZGluZyBu YW1lIHN0cmluZ3MgKi8KLQotI2RlZmluZSBGVF83QklUIDAJCQkvKiA3LWJpdCB0ZXh0ICovCi0j ZGVmaW5lIEZUXzhCSVQgMQkJCS8qIDgtYml0IHRleHQgKi8KLSNkZWZpbmUgRlRfVVRGOCAyCQkJ LyogVVRGOCAqLwotI2RlZmluZSBGVF9VQ1MyIDMJCQkvKiBVQ1MyICovCi0jZGVmaW5lIEZUX1RF WFQgNAkJCS8qIFVua25vd24gdGV4dCAqLwotI2RlZmluZSBGVF9CSU4gIDUJCQkvKiBCaW5hcnkg Ki8KLSNkZWZpbmUgU0NBTkZJTEVCVUYgNDkxNTIJCS8qIFNpemUgb2YgZmlsZSBzY2FuICg0OEsp ICovCi0KLS8qIENvbm5lY3Rpb24gY2xvc2VkIHJlYXNvbnMgKi8KLQotI2RlZmluZSBXQ19SRU1P ICAgMAkJCS8qIENsb3NlZCBieSByZW1vdGUgKi8KLSNkZWZpbmUgV0NfQ0xPUyAgIDEJCQkvKiBD bG9zZWQgZnJvbSBvdXIgZW5kICovCi0jZGVmaW5lIFdDX1RFTE9QVCAyCQkJLyogVGVsbmV0IG5l Z290aWF0aW9uIGZhaWx1cmUgKi8KLQotI2lmZGVmIEJJR0JVRk9LCi0jZGVmaW5lIEZUUEFUVEVS TlMgMjU2Ci0jZWxzZQotI2RlZmluZSBGVFBBVFRFUk5TIDY0Ci0jZW5kaWYgLyogQklHQlVGT0sg Ki8KLQotI2RlZmluZSBTWVNfVU5LICAgIDAJCQkvKiBTZWxlY3RlZCBzZXJ2ZXIgc3lzdGVtIHR5 cGVzICovCi0jZGVmaW5lIFNZU19VTklYICAgMQotI2RlZmluZSBTWVNfV0lOMzIgIDIKLSNkZWZp bmUgU1lTX1ZNUyAgICAzCi0jZGVmaW5lIFNZU19PUzIgICAgNAotI2RlZmluZSBTWVNfRE9TICAg IDUKLSNkZWZpbmUgU1lTX1RPUFMxMCA2Ci0jZGVmaW5lIFNZU19UT1BTMjAgNwotI2RlZmluZSBT WVNfVk9TICAgIDgKLSNkZWZpbmUgU1lTX0RHICAgICA5Ci0jZGVmaW5lIFNZU19PU0sgICAgMTAK LSNkZWZpbmUgU1lTX01BWCAgICAxMQotCi0jaWZkZWYgQ0tfU01BTEwKLSNkZWZpbmUgUFdCVUZM IDYzCi0jZWxzZQotI2RlZmluZSBQV0JVRkwgMjU1Ci0jZW5kaWYgLyogQ0tfU01BTEwgKi8KLQot I2lmZGVmIE9TMgotc3RydWN0IHR0X2luZm9fcmVjIHsJCQkvKiBUZXJtaW5hbCBlbXVsYXRpb24g aW5mbyAqLwotICAgIGNoYXIgICp4X25hbWU7Ci0gICAgY2hhciAqeF9hbGlhc2VzWzRdOwotICAg IGNoYXIgICp4X2lkOwotfTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotLyogQkVFUCBUWVBFUyAqLwot I2RlZmluZSBCUF9CRUwgIDAJCQkvKiBUZXJtaW5hbCBiZWxsICovCi0jZGVmaW5lIEJQX05PVEUg MQkJCS8qIEluZm8gKi8KLSNkZWZpbmUgQlBfV0FSTiAyCQkJLyogV2FybmluZyAqLwotI2RlZmlu ZSBCUF9GQUlMIDMJCQkvKiBFcnJvciAqLwotCi0jaWZuZGVmIE5PSUtTRAotI2lmZGVmIElLU0RC CQkJCS8qIElLU0QgRGF0YWJhc2UgZGVmaW5pdGlvbnMgKi8KLQotLyogRmllbGQgdmFsdWVzICov Ci0KLSNkZWZpbmUgREJGX0lOVVNFICAgIDEJCQkvKiBGbGFnIGJpdHMuLi4gSW4gdXNlICovCi0j ZGVmaW5lIERCRl9VU0VSICAgICAyCQkJLyogUmVhbCB1c2VyICh2ZXJzdXMgYW5vbnltb3VzKSAq LwotI2RlZmluZSBEQkZfTE9HR0VEICAgNAkJCS8qIExvZ2dlZCBpbiAodmVyc3VzIG5vdCkgKi8K LQotLyogRGF0YSBEZWZpbml0aW9ucy4uLiAqLwotCi0vKiBOdW1lcmljIGZpZWxkcywgaGV4LCBy aWdodCBqdXN0aWZpZWQsIDAtZmlsbGVkIG9uIGxlZnQgKi8KLQotI2RlZmluZSBkYl9GTEFHUyAg ICAgMAkJCS8qIEZpZWxkIDA6IEZsYWdzICovCi0jZGVmaW5lIERCX0ZMQUdTICAgICAwCQkJLyog T2Zmc2V0OiAwICovCi0jZGVmaW5lIGRCX0ZMQUdTICAgICA0CQkJLyogTGVuZ3RoOiA0IChoZXgg ZGlnaXRzKSAqLwotCi0jZGVmaW5lIGRiX0FUWVBFICAgICAxCQkJLyogRmllbGQgMTogQXV0aGVu dGljYXRpb24gdHlwZSAqLwotI2RlZmluZSBEQl9BVFlQRSAgICAgNAkJCS8qIDQgaGV4IGRpZ2l0 cyAqLwotI2RlZmluZSBkQl9BVFlQRSAgICAgNAotCi0jZGVmaW5lIGRiX0FNT0RFICAgICAyCQkJ LyogRmllbGQgMjogQXV0aGVudGljYXRpb24gbW9kZSAqLwotI2RlZmluZSBEQl9BTU9ERSAgICAg OAkJCS8qIDQgaGV4IGRpZ2l0cyAqLwotI2RlZmluZSBkQl9BTU9ERSAgICAgNAotCi0jZGVmaW5l IGRiX1NUQVRFICAgICAzCQkJLyogRmllbGQgMzogU3RhdGUgLSA0IGhleCBkaWdpdHMqLwotI2Rl ZmluZSBEQl9TVEFURSAgICAxMgkJCS8qIDQgaGV4IGRpZ2l0cyAqLwotI2RlZmluZSBkQl9TVEFU RSAgICAgNAotCi0jZGVmaW5lIGRiX01ZUElEICAgICA0CQkJLyogRmllbGQgNDogTXkgUElEICov Ci0jZGVmaW5lIERCX01ZUElEICAgIDE2CQkJLyogMTYgaGV4IGRpZ2l0cyBsZWZ0IHBhZGRlZCB3 aXRoIDAgKi8KLSNkZWZpbmUgZEJfTVlQSUQgICAgMTYKLQotI2RlZmluZSBkYl9TQUREUiAgICAg NQkJCS8qIEZpZWxkIDU6IFNlcnZlciAobXkpIElQIGFkZHJlc3MgKi8KLSNkZWZpbmUgREJfU0FE RFIgICAgMzIJCQkvKiAxNiBoZXggZGlnaXRzIGxlZnQgcGFkZGVkIHdpdGggMCAqLwotI2RlZmlu ZSBkQl9TQUREUiAgICAxNgotCi0jZGVmaW5lIGRiX0NBRERSICAgICA2CQkJLyogRmllbGQgNjog Q2xpZW50IElQIGFkZHJlc3MgKi8KLSNkZWZpbmUgREJfQ0FERFIgICAgNDgJCQkvKiAxNiBoZXgg ZGlnaXRzIGxlZnQgcGFkZGVkIHdpdGggMCAqLwotI2RlZmluZSBkQl9DQUREUiAgICAxNgotCi0v KiBEYXRlLXRpbWUgZmllbGRzICgxNyByaWdodC1hZGp1c3RlZCBpbiAxOCBmb3IgWTEwSyByZWFk aW5lc3MpICovCi0KLSNkZWZpbmUgZGJfU1RBUlQgICAgIDcJCQkvKiBGaWVsZCA3OiBTZXNzaW9u IHN0YXJ0IGRhdGUtdGltZSAqLwotI2RlZmluZSBEQl9TVEFSVCAgICA2NQkJCS8qIDY0IGlzIGxl YWRpbmcgc3BhY2UgZm9yIFkxMEsgKi8KLSNkZWZpbmUgZEJfU1RBUlQgICAgMTcKLQotI2RlZmlu ZSBkYl9MQVNUVSAgICAgOAkJCS8qIEZpZWxkIDg6IExhc3QgbGFzdHUgZGF0ZS10aW1lICovCi0j ZGVmaW5lIERCX0xBU1RVICAgIDgzCQkJLyogODIgaXMgbGVhZGluZyBzcGFjZSBmb3IgWTEwSyAq LwotI2RlZmluZSBkQl9MQVNUVSAgICAxNwotCi0jZGVmaW5lIGRiX1VMRU4gICAgICA5CQkJLyog RmllbGQgOTogTGVuZ3RoIG9mIFVzZXJuYW1lICovCi0jZGVmaW5lIERCX1VMRU4gICAgMTAwCQkJ LyogNCBoZXggZGlnaXRzICovCi0jZGVmaW5lIGRCX1VMRU4gICAgICA0Ci0KLSNkZWZpbmUgZGJf RExFTiAgICAgMTAJCQkvKiBGaWVsZCAxMDogTGVuZ3RoIG9mIERpcmVjdG9yeSAqLwotI2RlZmlu ZSBEQl9ETEVOICAgIDEwNAkJCS8qIDQgaGV4IGRpZ2l0cyAqLwotI2RlZmluZSBkQl9ETEVOICAg ICAgNAotCi0jZGVmaW5lIGRiX0lMRU4gICAgIDExCQkJLyogRmllbGQgMTE6IExlbmd0aCBvZiBJ bmZvICovCi0jZGVmaW5lIERCX0lMRU4gICAgMTA4CQkJLyogNCBoZXggZGlnaXRzICovCi0jZGVm aW5lIGRCX0lMRU4gICAgICA0Ci0KLSNkZWZpbmUgZGJfUEFEMSAgICAgMTIJCQkvKiBGaWVsZCAx MjogKFJlc2VydmVkKSAqLwotI2RlZmluZSBEQl9QQUQxICAgIDExMgkJCS8qIGZpbGxlZCB3aXRo IHNwYWNlcyAqLwotI2RlZmluZSBkQl9QQUQxICAgIDkxMgotCi0vKiBTdHJpbmcgZmllbGRzLCBh bGwgcmlnaHQtcGFkZGVkIHdpdGggYmxhbmtzICovCi0KLSNkZWZpbmUgZGJfVVNFUiAgICAgMTMJ CQkvKiBGaWVsZCAxMzogVXNlcm5hbWUgKi8KLSNkZWZpbmUgREJfVVNFUiAgIDEwMjQJCQkvKiBy aWdodC1wYWRkZWQgd2l0aCBzcGFjZXMgKi8KLSNkZWZpbmUgZEJfVVNFUiAgIDEwMjQKLQotI2Rl ZmluZSBkYl9ESVIgICAgICAxNAkJCS8qIEZpZWxkIDE0OiBDdXJyZW50IGRpcmVjdG9yeSAqLwot I2RlZmluZSBEQl9ESVIgICAgMjA0OAkJCS8qIHJpZ2h0LXBhZGRlZCB3aXRoIHNwYWNlcyAqLwot I2RlZmluZSBkQl9ESVIgICAgMTAyNAotCi0jZGVmaW5lIGRiX0lORk8gICAgIDE1CQkJLyogRmll bGQgMTU6IFN0YXRlLXNwZWNpZmljIGluZm8gKi8KLSNkZWZpbmUgREJfSU5GTyAgIDMwNzIJCQkv KiByaWdodC1wYWRkZWQgd2l0aCBzcGFjZXMgKi8KLSNkZWZpbmUgZEJfSU5GTyAgIDEwMjQKLQot I2RlZmluZSBEQl9SRUNMICAgNDA5NgkJCS8qIERhdGFiYXNlIHJlY29yZCBsZW5ndGggKi8KLQot LyogT2Zmc2V0LCBsZW5ndGgsIGFuZCB0eXBlIG9mIGVhY2ggZmllbGQgdGhydSBpdHMgZGJfWFhY IHN5bWJvbCAqLwotCi0jZGVmaW5lIERCVF9IRVggMQkJCS8qIEhleGFkZWNpbWFsIG51bWJlciAq LwotI2RlZmluZSBEQlRfU1RSIDIJCQkvKiBTdHJpbmcgKi8KLSNkZWZpbmUgREJUX0RBVCAzCQkJ LyogRGF0ZS1UaW1lIHl5eXltbWRkIGhoOm1tOnNzICovCi0jZGVmaW5lIERCVF9VTkQgOQkJCS8q IFVuZGVmaW5lZCBhbmQgYmxhbmsgKi8KLQotc3RydWN0IGlrc2RiZmxkIHsKLSAgICBpbnQgb2Zm OwkJCQkvKiBQb3NpdGlvbiAob2Zmc2V0KSAqLwotICAgIGludCBsZW47CQkJCS8qIExlbmd0aCAo Ynl0ZXMpICovCi0gICAgaW50IHR5cDsJCQkJLyogRGF0YSB0eXBlICovCi19OwotX1BST1RPVFlQ KGludCBkYmluaXQsICh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IGluaXRzbG90LCAoaW50KSk7Ci1f UFJPVE9UWVAoaW50IGdldHNsb3QsICh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IGZyZWVzbG90LCAo aW50KSk7Ci1fUFJPVE9UWVAoaW50IHVwZHNsb3QsIChpbnQpKTsKLV9QUk9UT1RZUChpbnQgc2xv dHN0YXRlLCAoaW50LCBjaGFyICosIGNoYXIgKiwgY2hhciAqKSk7Ci1fUFJPVE9UWVAoaW50IHNs b3RkaXIsIChjaGFyICosIGNoYXIgKikpOwotI2VuZGlmIC8qIElLU0RCICovCi0jZW5kaWYgLyog Tk9JS1NEICovCi0KLS8qIEFOU0kgZm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIHByb3RvY29sLXJl bGF0ZWQgZnVuY3Rpb25zLiAqLwotCi1fUFJPVE9UWVAoIGludCBpbnB1dCwgKHZvaWQpICk7Ci1f UFJPVE9UWVAoIGludCBpbmlidWZzLCAoaW50LCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBtYWtl YnVmLCAoaW50LCBpbnQsIENIQVIgW10sIHN0cnVjdCBwa3RpbmZvICopICk7Ci1fUFJPVE9UWVAo IGludCBta3NidWYsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBta3JidWYsIChpbnQpICk7Ci1f UFJPVE9UWVAoIGludCBzcGFjaywgKGNoYXIsIGludCwgaW50LCBDSEFSICopICk7Ci1fUFJPVE9U WVAoIFZPSUQgcHJvdG8sICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgcnBhY2ssICh2b2lkKSAp OwotX1BST1RPVFlQKCBpbnQgYWNrLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IG5hY2ssIChp bnQpICk7Ci1fUFJPVE9UWVAoIGludCBhY2tuLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgYWNr MSwgKENIQVIgKikgKTsKLV9QUk9UT1RZUCggaW50IGFja25zLCAoaW50LCBDSEFSICopICk7Ci0j aWZkZWYgU1RSRUFNSU5HCi1fUFJPVE9UWVAoIGludCBmYXN0YWNrLCAodm9pZCkgKTsKLSNlbmRp ZiAvKiBTVFJFQU1JTkcgKi8KLV9QUk9UT1RZUCggaW50IHJlc2VuZCwgKGludCkgKTsKLV9QUk9U T1RZUCggaW50IGVycnBrdCwgKENIQVIgKikgKTsKLV9QUk9UT1RZUCggVk9JRCBsb2dwa3QsIChj aGFyLCBpbnQsIENIQVIgKiwgaW50KSApOwotX1BST1RPVFlQKCBDSEFSIGRvcGFyLCAoQ0hBUikg KTsKLV9QUk9UT1RZUCggaW50IGNoazEsIChDSEFSICosIGludCkgKTsKLV9QUk9UT1RZUCggdW5z aWduZWQgaW50IGNoazIsIChDSEFSICosIGludCkgKTsKLV9QUk9UT1RZUCggdW5zaWduZWQgaW50 IGNoazMsIChDSEFSICosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IHNpcGt0LCAoY2hhcikgKTsK LV9QUk9UT1RZUCggaW50IHNvcGt0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHNpbml0LCAo dm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCByaW5pdCwgKENIQVIgKikgKTsKLV9QUk9UT1RZUCgg aW50IHNwYXIsIChDSEFSICopICk7Ci1fUFJPVE9UWVAoIGludCByY3ZmaWwsIChjaGFyICopICk7 Ci1fUFJPVE9UWVAoIENIQVIgKiBycGFyLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGduZmls ZSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBnZXRzYnVmLCAoaW50KSApOwotX1BST1RPVFlQ KCBpbnQgZ2V0cmJ1ZiwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBmcmVlc2J1ZiwgKGludCkg KTsKLV9QUk9UT1RZUCggaW50IGZyZWVyYnVmLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgZHVt cHNidWYsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgZHVtcHJidWYsICh2b2lkKSApOwotX1BS T1RPVFlQKCBWT0lEIGZyZWVycGt0LCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgY2hrd2luLCAo aW50LCBpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IHJzYXR0ciwgKENIQVIgKikgKTsKLV9Q Uk9UT1RZUCggY2hhciAqZ2V0cmVhc29uLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgc2Nt ZCwgKGNoYXIsIENIQVIgKikgKTsKLV9QUk9UT1RZUCggaW50IGVuY3N0ciwgKENIQVIgKikgKTsK LV9QUk9UT1RZUCggaW50IGRlY29kZSwgKENIQVIgKiwgaW50ICgqKShjaGFyKSwgaW50KSApOwot X1BST1RPVFlQKCBpbnQgYmRlY29kZSwgKENIQVIgKiwgaW50ICgqKShjaGFyKSkgKTsKLV9QUk9U T1RZUCggaW50IGZucGFyc2UsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBzeXNjbWQsIChj aGFyICosIGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IGN3ZCwgKGNoYXIgKikgKTsKLV9QUk9U T1RZUCggaW50IHJlbXNldCwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IGluaXRhdHRyLCAo c3RydWN0IHphdHRyICopICk7Ci1fUFJPVE9UWVAoIGludCBnYXR0ciwgKENIQVIgKiwgc3RydWN0 IHphdHRyICopICk7Ci1fUFJPVE9UWVAoIGludCBhZGVidSwgKGNoYXIgKiwgc3RydWN0IHphdHRy ICopICk7Ci1fUFJPVE9UWVAoIGludCBjYW5uZWQsIChDSEFSICopICk7Ci1fUFJPVE9UWVAoIGlu dCBvcGVudCwgKHN0cnVjdCB6YXR0ciAqKSApOwotX1BST1RPVFlQKCBpbnQgY2tvcGVueCwgKHN0 cnVjdCB6YXR0ciAqKSApOwotX1BST1RPVFlQKCBpbnQgb3BlbmEsIChjaGFyICosIHN0cnVjdCB6 YXR0ciAqKSApOwotX1BST1RPVFlQKCBpbnQgb3BlbmksIChjaGFyICopICk7Ci1fUFJPVE9UWVAo IGludCBvcGVubywgKGNoYXIgKiwgc3RydWN0IHphdHRyICosIHN0cnVjdCBmaWxpbmZvICopICk7 Ci1fUFJPVE9UWVAoIGludCBvcGVuYywgKGludCwgY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQg cmVvZiwgKGNoYXIgKiwgc3RydWN0IHphdHRyICopICk7Ci1fUFJPVE9UWVAoIFZPSUQgcmVvdCwg KHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBzZmlsZSwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50 IHNhdHRyLCAoaW50LCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBzZGF0YSwgKHZvaWQpICk7Ci1f UFJPVE9UWVAoIGludCBzZW9mLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgc3hlb2YsIChpbnQp ICk7Ci1fUFJPVE9UWVAoIGludCBzZW90LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHdpbmRv dywgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IGNsc2lmLCAodm9pZCkgKTsKLV9QUk9UT1RZUCgg aW50IGNsc29mLCAoaW50KSApOwotX1BST1RPVFlQKCBDSEFSIHNldGdlbiwgKGNoYXIsIGNoYXIg KiwgY2hhciAqLCBjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBnZXRwa3QsIChpbnQsIGludCkg KTsKLV9QUk9UT1RZUCggaW50IG1heGRhdGEsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgcHV0 c3J2LCAoY2hhcikgKTsKLV9QUk9UT1RZUCggaW50IHB1dHRybSwgKGNoYXIpICk7Ci1fUFJPVE9U WVAoIGludCBwdXRxdWUsIChjaGFyKSApOwotX1BST1RPVFlQKCBpbnQgcHV0ZmlsLCAoY2hhcikg KTsKLV9QUk9UT1RZUCggaW50IHB1dG1maWwsIChjaGFyKSApOwotX1BST1RPVFlQKCBpbnQgenB1 dGZpbCwgKGNoYXIpICk7Ci1fUFJPVE9UWVAoIFZPSUQgemRzdHVmZiwgKENIQVIpICk7Ci1fUFJP VE9UWVAoIGludCB0aW5pdCwgKGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCBwa3Rpbml0LCAodm9p ZCkgKTsKLV9QUk9UT1RZUCggVk9JRCByZXNldGMsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lE IHhzaW5pdCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBhZGpwa2wsIChpbnQsaW50LGludCkg KTsKLV9QUk9UT1RZUCggaW50IGNoa3RpbW8sIChpbnQsaW50KSApOwotX1BST1RPVFlQKCBpbnQg bnh0cGt0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCByY2FsY3BzeiwgKHZvaWQpICk7Ci1f UFJPVE9UWVAoIGludCBzcmluaXQsIChpbnQsIGludCwgaW50KSApOwotX1BST1RPVFlQKCBWT0lE IHRzdGF0cywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgZnN0YXRzLCAodm9pZCkgKTsKLV9Q Uk9UT1RZUCggVk9JRCBpbnRtc2csIChsb25nKSApOwotX1BST1RPVFlQKCBWT0lEIGVybXNnLCAo Y2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgY2hraW50LCAodm9pZCkgKTsKLV9QUk9UT1RZUCgg Vk9JRCBzZGVidSwgKGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCByZGVidSwgKENIQVIgKiwgaW50 KSApOwotX1BST1RPVFlQKCBjaGFyICogZGJjaHIsICggaW50ICkgKTsKLSNpZmRlZiBDT01NRU5U Ci1fUFJPVE9UWVAoIFNJR1RZUCBzdHB0cmFwLCAoaW50LCBpbnQpICk7Ci1fUFJPVE9UWVAoIFNJ R1RZUCB0cmFwLCAoaW50LCBpbnQpICk7Ci0jZWxzZQotX1BST1RPVFlQKCBTSUdUWVAgc3RwdHJh cCwgKGludCkgKTsKLV9QUk9UT1RZUCggU0lHVFlQIHRyYXAsIChpbnQpICk7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotX1BST1RPVFlQKCBjaGFyICogY2tfZXJyc3RyLCAodm9pZCkgKTsKLSNpZm5k ZWYgTk9YRkVSCi1fUFJPVE9UWVAoIGludCBhZ25ieXRlLCAodm9pZCkgKTsKLSNlbmRpZiAvKiBO T1hGRVIgKi8KLV9QUk9UT1RZUCggaW50IHhnbmJ5dGUsIChpbnQsIGludCwgaW50ICgqKSh2b2lk KSkgKTsKLV9QUk9UT1RZUCggaW50IHhwbmJ5dGUsIChpbnQsIGludCwgaW50LCBpbnQgKCopKGNo YXIpKSApOwotCi0vKiBVc2VyIGludGVyZmFjZSBmdW5jdGlvbnMgbmVlZGVkIGJ5IG1haW4gcHJv Z3JhbSwgZXRjLiAqLwotCi1fUFJPVE9UWVAoIGludCBkb2NvbmVjdCwgKGludCxpbnQpICk7Ci1f UFJPVE9UWVAoIFZPSUQgc2V0ZmxvdywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgcHJlc2Nh biwgKGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCBzZXRpbnQsICh2b2lkKSApOwotX1BST1RPVFlQ KCBWT0lEIGRvaW5pdCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgZG9mYXN0LCAodm9pZCkg KTsKLV9QUk9UT1RZUCggVk9JRCBjbWRpbmksICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgZG90 YWtlLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgY21kbGluLCAodm9pZCkgKTsKLSNpZmRl ZiBPUzIKLV9QUk9UT1RZUCggaW50IGNvbmVjdCwgKGludCkgKTsKLSNlbHNlIC8qIE9TMiAqLwot X1BST1RPVFlQKCBpbnQgY29uZWN0LCAodm9pZCkgKTsKLSNlbmRpZiAvKiBPUzIgKi8KLV9QUk9U T1RZUCggaW50IGNrY2dldGMsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBja2NwdXRjLCAoaW50 KSApOwotX1BST1RPVFlQIChpbnQgbWRtaHVwLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBo ZXJhbGQsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIGZpeGNtZCwgKHZvaWQpICk7Ci1fUFJP VE9UWVAoIGludCBkb2FyZywgKGNoYXIpICk7Ci1fUFJPVE9UWVAoIGludCBkb3hhcmcsIChjaGFy ICoqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgdXNhZ2UsICh2b2lkKSApOwotX1BST1RPVFlQ KCBWT0lEIGRvY2xlYW4sIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBzbmRobHAsICh2b2lkKSAp OwotX1BST1RPVFlQKCBpbnQgc25kc3RyaW5nLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBWT0lE IGNraG9zdCwgKGNoYXIgKiwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgZ2V0dGNzLCAoaW50LCBp bnQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgZ2V0ZGlhbGVudiwgKHZvaWQpICk7Ci1fUFJPVE9UWVAo IFZPSUQgc2V0cHJlZml4LCAoaW50KSApOwotX1BST1RPVFlQKFZPSUQgaW5pdHByb3RvLChpbnQs Y2hhciAqLGNoYXIgKixjaGFyICosY2hhciAqLGNoYXIgKixjaGFyKixjaGFyKikpOwotX1BST1RP VFlQKCBWT0lEIGluaXRwYXQsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIGluaXRjc2V0cywg KHZvaWQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBnZXRzeXNpZCwgKGNoYXIgKikgKTsKLV9QUk9U T1RZUCggaW50IGdldHN5c2l4LCAoY2hhciAqKSApOwotI2lmZGVmIENLX1RJTUVSUwotX1BST1RP VFlQKCBWT0lEIHJ0dGluaXQsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgZ2V0cnR0LCAoaW50 LCBpbnQpICk7Ci0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0KLV9QUk9UT1RZUCggaW50IGlzX2Ff dHR5LCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgc25kZGlyLCAoY2hhciAqKSApOwotX1BST1RP VFlQKCBpbnQgc25kZGVsLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgc25kdHlwZSwgKGNo YXIgKikgKTsKLV9QUk9UT1RZUCggaW50IGRvb3V0cHV0LCAoY2hhciAqLCBpbnQpICk7Ci1fUFJP VE9UWVAoIGludCBpc2Fic29sdXRlLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBWT0lEIHdob2Fy ZXdlLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGNrbWtkaXIsIChpbnQsIGNoYXIgKiwgY2hh ciAqKiwgaW50LCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBhdXRvZXhpdGNoaywgKENIQVIpICk7 Ci1fUFJPVE9UWVAoIFZPSUQgZmNwcywgKHZvaWQpICk7Ci0jaWZkZWYgT1MyCi1fUFJPVE9UWVAo IFZPSUQgbG9nY2hhciwgKHVuc2lnbmVkIHNob3J0KSApOwotI2Vsc2UgLyogT1MyICovCi1fUFJP VE9UWVAoIFZPSUQgbG9nY2hhciwgKGNoYXIpICk7Ci0jZW5kaWYgLyogT1MyICovCi1fUFJPVE9U WVAoIFZPSUQgbG9nc3RyLCAoY2hhciAqLCBpbnQpICk7Ci0KLV9QUk9UT1RZUCggVk9JRCBkb2xv Z2VuZCwgKHZvaWQpICk7Ci0jaWZkZWYgTk9MT0NBTAotI2RlZmluZSBkb2xvZ3Nob3coKQotI2Vs c2UKLV9QUk9UT1RZUCggbG9uZyBkb2xvZ3Nob3csIChpbnQpICk7Ci0jZW5kaWYgLyogTk9MT0NB TCAqLwotCi0jaWZkZWYgTk9ESVNQTEFZCi0jZGVmaW5lIGZ4ZGluaXQoYSkKLSNlbHNlCi1fUFJP VE9UWVAoIFZPSUQgZnhkaW5pdCwgKGludCkgKTsKLSNlbmRpZiAvKiBOT0RJU1BMQVkgKi8KLQot X1BST1RPVFlQKCBpbnQgZmlsZXNlbGVjdCwgKGNoYXIgKiwKLQkJCSAgICBjaGFyICosIGNoYXIg KiwgY2hhciAqLCBjaGFyICosCi0JCQkgICAgQ0tfT0ZGX1QsIENLX09GRl9ULAotCQkJICAgIGlu dCwgaW50LAotCQkJICAgIGNoYXIgKiopICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiB3aG9hbWksICh2 b2lkKSApOwotX1BST1RPVFlQKCBpbnQgc2hvZXNjLCAoaW50KSApOwotCi0jaWZkZWYgQ0tfQVBD Ci1fUFJPVE9UWVAoIGludCBjaGtzcGt0LCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQga3N0 YXJ0LCAoQ0hBUikgKTsKLV9QUk9UT1RZUCggVk9JRCBhdXRvZG93biwgKGludCkpOwotI2lmZGVm IENLX1hZWgotX1BST1RPVFlQKCBpbnQgenN0YXJ0LCAoQ0hBUikgKTsKLSNlbmRpZiAvKiBDS19Y WVogKi8KLSNpZmRlZiBPUzIKLV9QUk9UT1RZUCh2b2lkIGFwY19jb21tYW5kLCAoaW50LCBjaGFy KikpOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENLX0FQQyAqLwotCi0vKiBVc2VyIFF1 ZXJ5IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zICovCi0KLXN0cnVjdCB0eHRib3ggewot ICAgIGNoYXIgKiB0X2J1ZjsJCQkvKiBEZXN0aW5hdGlvbiBidWZmZXIgYWRkcmVzcyAqLwotICAg IGludCAgICB0X2xlbjsJCQkvKiBEZXN0aW5hdGlvbiBidWZmZXIgbGVuZ3RoICovCi0gICAgY2hh ciAqIHRfbGJsOwkJCS8qIExhYmVsIGZvciB0aGlzIGZpZWxkICovCi0gICAgY2hhciAqIHRfZGZs dDsJCQkvKiBEZWZhdWx0IHJlc3BvbnNlIGZvciB0aGlzIGZpZWxkICovCi0gICAgaW50ICAgIHRf ZWNobzsJCQkvKiAwID0gbm8sIDEgPSB5ZXMsIDIgPSBhc3Rlcmlza3MgKi8KLX07Ci0KLSNkZWZp bmUgREVGQVVMVF9VUV9USU1FT1VUICAwCi1fUFJPVE9UWVAoaW50IHVxX29rLCAoY2hhciAqLGNo YXIgKixpbnQsY2hhciAqKixpbnQpICk7Ci1fUFJPVE9UWVAoaW50IHVxX3R4dCwgKGNoYXIgKixj aGFyICosaW50LGNoYXIgKiosY2hhciAqLGludCxjaGFyICosaW50KSk7Ci1fUFJPVE9UWVAoaW50 IHVxX210eHQsIChjaGFyICosY2hhciAqKixpbnQsc3RydWN0IHR4dGJveFtdKSApOwotX1BST1RP VFlQKGludCB1cV9maWxlLCAoY2hhciAqLGNoYXIgKixpbnQsY2hhciAqKixjaGFyICosY2hhciAq LGludCkpOwotCi0jaWZkZWYgQ0tfVVJMCi1zdHJ1Y3QgdXJsb3B0IHsKLSAgICBjaGFyICogbmFt OwotICAgIGNoYXIgKiB2YWw7Ci19OwotI2RlZmluZSBNQVhfVVJMX09QVFMgICAgMTYKLXN0cnVj dCB1cmxkYXRhIHsKLSAgICBjaGFyICogc2F2OwkJCS8qIFRoZSBVUkwgaXRzZWxmICovCi0gICAg Y2hhciAqIHN2YzsJCQkvKiBTZXJ2aWNlICovCi0gICAgY2hhciAqIHVzcjsJCQkvKiBVc2VyICov Ci0gICAgY2hhciAqIHBzdzsJCQkvKiBQYXNzd29yZCAqLwotICAgIGNoYXIgKiBob3M7CQkJLyog SG9zdCAqLwotICAgIGNoYXIgKiBwb3I7CQkJLyogUG9ydCAqLwotICAgIGNoYXIgKiBwdGg7CQkJ LyogUGF0aCAqLwotICAgIGludCAgICBub3B0czsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2Yg b3B0aW9ucyAqLwotICAgIHN0cnVjdCB1cmxvcHQgb3B0W01BWF9VUkxfT1BUU107ICAgLyogb3B0 aW9ucyAqLwotfTsKLV9QUk9UT1RZUChpbnQgdXJscGFyc2UsIChjaGFyICosIHN0cnVjdCB1cmxk YXRhICopKTsKLSNlbmRpZiAvKiBDS19VUkwgKi8KLQotI2VuZGlmIC8qIENLQ0tFUl9IICovCi0K LS8qIEVuZCBvZiBja2NrZXIuaCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2tjbGliLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL2NrY2xpYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWI5ZjA2 Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tj bGliLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzE5ICswLDAgQEAKLWNoYXIgKiBja2xpYnYgPSAi Qy1LZXJtaXQgbGlicmFyeSwgOS4wLjA1MiwgMjkgSnVuIDIwMTEiOwotCi0jZGVmaW5lIENLQ0xJ Ql9DCi0KLS8qIEMgSyBDIEwgSSBCIC4gQyAgLS0gIEMtS2VybWl0IExpYnJhcnkgcm91dGluZXMu ICovCi0KLS8qCi0gIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCi0g IENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlv cmsgQ2l0eS4KLQotICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMTEsCi0gICAgVHJ1c3RlZXMgb2Yg Q29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmln aHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQot ICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIg YW5kIHBlcm1pc3Npb25zLgotKi8KLQotLyoKLSAgR2VuZXJhbC1wdXJwb3NlLCBzeXN0ZW0vcGxh dGZvcm0vY29tcGlsZXItaW5kZXBlbmRlbnQgcm91dGluZXMgZm9yIHVzZQotICBieSBhbGwgbW9k dWxlcy4gIE1hbnkgYXJlIHJlcGxhY2VtZW50cyBmb3IgY29tbW9ubHkgdXNlZCBDIGxpYnJhcnkK LSAgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBmb3VuZCBvbiBldmVyeSBwbGF0Zm9ybSwgYW5kL29y IHRoYXQgbGFjayBuZWVkZWQKLSAgZnVuY3Rpb25hbGl0eSAoZS5nLiBjYXNlbGVzcyBzdHJpbmcg c2VhcmNoL2NvbXBhcmUpIG9yIHNhZmV0eSBmZWF0dXJlcy4KLQotICAgIGNrc3RybmNweSgpICAt IFNpbWlsYXIgdG8gc3RybmNweSgpIGJ1dCBkaWZmZXJlbnQgKHNlZSBjb21tZW50cykuCi0gICAg Y2tzdHJuY2F0KCkgIC0gU2ltaWxhciB0byBzdHJuY2F0KCkgYnV0IGRpZmZlcmVudCAoc2VlIGNv bW1lbnRzKS4KLSAgICBjaGFydG9zdHIoKSAgLSBDb252ZXJ0cyBhIGNoYXIgdG8gYSBzdHJpbmcg KHNlbGYgb3IgY3RybCBjaGFyIG5hbWUpLgotICAgIGNrc3RyY2hyKCkgICAtIFBvcnRhYmxlIHN0 cmNocigpLgotICAgIGNrc3RycGJyaygpICAtIFBvcnRhYmxlIHN0cnBicmsoKS4KLSAgICBja2xv d2VyKCkgICAgLSBMb3dlcmNhc2UgYSBzdHJpbmcgKGluIHBsYWNlKS4KLSAgICBja3VwcGVyKCkg ICAgLSBVcHBlcmNhc2UgYSBzdHJpbmcgKGluIHBsYWNlKS4KLSAgICBja2luZGV4KCkgICAgLSBM ZWZ0IG9yIHJpZ2h0IGluZGV4LgotICAgIGNrc3Ryc3RyKCkgICAtIFBvcnRhYmxlIHN0cnN0cigp LgotICAgIGNraXRvYSgpICAgICAtIENvbnZlcnRzIGludCB0byBzdHJpbmcuCi0gICAgY2t1aXRv YSgpICAgIC0gQ29udmVydHMgdW5zaWduZWQgaW50IHRvIHN0cmluZy4KLSAgICBja2x0b2EoKSAg ICAgLSBDb252ZXJ0cyBsb25nIHRvIHN0cmluZy4KLSAgICBja3VsdG9hKCkgICAgLSBDb252ZXJ0 cyB1bnNpZ25lZCBsb25nIHRvIHN0cmluZy4KLSAgICBja2ZzdG9hKCkgICAgLSBDb252ZXJ0cyBv ZmZfdC10eXBlIGludGVnZXIgKGxvbmcgb3IgbG9uZyBsb25nKSB0byBzdHJpbmcuCi0gICAgY2th dG9mcygpICAgIC0gQ29udmVydHMgYSBudW1lcmljIHN0cmluZyB0byBhbiBvZmZfdC10eXBlIGlu dGVnZXIuCi0gICAgY2tjdG9hKCkgICAgIC0gQ29udmVydHMgY2hhciB0byBzdHJpbmcuCi0gICAg Y2ttYWttc2coKSAgIC0gQ29uc3RydWN0cyBhIG1lc3NhZ2UgZnJvbSA0IHNvdXJjZSBzdHJpbmdz LgotICAgIGNrbWFreG1zZygpICAtIENvbnN0cnVjdHMgYSBtZXNzYWdlIGZyb20gMTIgc291cmNl IHN0cmluZ3MuCi0gICAgY2ttYXRjaCgpICAgIC0gUGF0dGVybiBtYXRjaGluZy4KLSAgICBja21l bWNweSgpICAgLSBQb3J0YWJsZSBtZW1jcHkoKS4KLSAgICBja3JjaGFyKCkgICAgLSBSaWdodG1v c3QgY2hhcmFjdGVyIG9mIGEgc3RyaW5nLgotICAgIGNrc3RyY21wKCkgICAtIFBvc3NpYmx5IGNh c2VsZXNzIHN0cmluZyBjb21wYXJpc29uLgotICAgIGNrc3RycHJlKCkgICAtIENhc2VsZXNzIHN0 cmluZyBwcmVmaXggY29tcGFyaXNvbi4KLSAgICBzaF9zb3J0KCkgICAgLSBTb3J0cyBhbiBhcnJh eSBvZiBzdHJpbmdzLCBtYW55IG9wdGlvbnMuCi0gICAgYnJzdHJpcCgpICAgIC0gU3RyaXBzIGVu Y2xvc2luZyBicmFjZXMgKGFuZCBkb3VibGVxdW90ZXMpLgotICAgIG1ha2VsaXN0KCkgICAtIFNw bGl0cyAie3tpdGVtfXtpdGVtfS4uLn0iIGludG8gYW4gYXJyYXkuCi0gICAgbWFrZXN0cigpICAg IC0gQ2FyZWZ1bCBtYWxsb2MoKSBmcm9udCBlbmQuCi0gICAgeG1ha2VzdHIoKSAgIC0gZGl0dG8g KHNlZSBjb21tZW50cykuCi0gICAgY2tyYWRpeCgpICAgIC0gQ29udmVydCBudW1iZXIgcmFkaXgg KDItMzYpLgotICAgIGI4dG9iNjQoKSAgICAtIENvbnZlcnQgZGF0YSB0byBiYXNlIDY0LgotICAg IGI2NHRvYjgoKSAgICAtIENvbnZlcnQgYmFzZSA2NCB0byBkYXRhLgotICAgIGNoa251bSgpICAg ICAtIENoZWNrcyBpZiBzdHJpbmcgaXMgYSAocG9zc2libHkgc2lnbmVkKSBpbnRlZ2VyLgotICAg IHJkaWdpdHMoKSAgICAtIENoZWNrcyBpZiBzdHJpbmcgaXMgY29tcG9zZWQgb25seSBvZiBkZWNp bWFsIGRpZ2l0cy4KLSAgICBpc2Zsb2F0KCkgICAgLSBDaGVja3MgaWYgc3RyaW5nIGlzIGEgdmFs aWQgZmxvYXRpbmctcG9pbnQgbnVtYmVyLgotICAgIGNrcm91bmQoKSAgICAtIFJvdW5kcyBhIGZs b2F0aW5nLXBvaW50IG51bWJlciB0byBkZXNpcmVkIHByZWNpc2lvbi4KLSAgICBwYXJuYW0oKSAg ICAgLSBSZXR1cm5zIHBhcml0eSBuYW1lIHN0cmluZy4KLSAgICBoaG1tc3MoKSAgICAgLSBDb252 ZXJ0cyBzZWNvbmRzIHRvIGhoOm1tOnNzIHN0cmluZy4KLSAgICBsc2V0KCkgICAgICAgLSBXcml0 ZSBmaXhlZC1sZW5ndGggZmllbGQgbGVmdC1hZGp1c3RlZCBpbnRvIGEgcmVjb3JkLgotICAgIHJz ZXQoKSAgICAgICAtIFdyaXRlIGZpeGVkLWxlbmd0aCBmaWVsZCByaWdodC1hZGp1c3RlZCBpbnRv IGEgcmVjb3JkLgotICAgIHVsb25ndG9oZXgoKSAtIENvbnZlcnRzIGFuIHVuc2lnbmVkIGxvbmcg dG8gYSBoZXggc3RyaW5nLgotICAgIGhleHRvdWxvbmcoKSAtIENvbnZlcnRzIGEgaGV4IHN0cmlu ZyB0byBhbiB1bnNpZ25lZCBsb25nLgotICAgIGNrc3BsaXQoKSAgICAtIFNwbGl0cyBhIHN0cmlu ZyBpbnRvIGFuIGFycmF5IG9mIHdvcmRzLgotICAgIGlzcGF0dGVybigpICAtIFRlbGxzIGlmIGFy Z3VtZW50IHN0cmluZyBpcyBhIHBhdHRlcm4uCi0KLSAgUHJvdG90eXBlcyBhcmUgaW4gY2tjbGli LmguCi0KLSAgTm90ZTogVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBjb250YWluIGFueSBleHRlcm4g ZGVjbGFyYXRpb25zLgotKi8KLSNpbmNsdWRlICJja2NzeW0uaCIKLSNpbmNsdWRlICJja2NkZWIu aCIKLSNpbmNsdWRlICJja2Nhc2MuaCIKLQotLyogUHVibGljIHZhcmlhYmxlcyAqLwotCi1pbnQg ZGJscXVvID0gMTsgLyogTm9uemVybyBpZiBkb3VibGVxdW90ZXMgY2FuIGJlIHVzZWQgZm9yIGdy b3VwaW5nICovCi0KLWNoYXIgKgotY2NudGFiW10gPSB7CS8qIE5hbWVzIG9mIEFTQ0lJIChDMCkg Y29udHJvbCBjaGFyYWN0ZXJzIDAtMzEgKi8KLSAgICAiTlVMIiwgIlNPSCIsICJTVFgiLCAiRVRY IiwgIkVPVCIsICJFTlEiLCAiQUNLIiwgIkJFTCIsCi0gICAgIkJTIiwgICJIVCIsICAiTEYiLCAg IlZUIiwgICJGRiIsICAiQ1IiLCAgIlNPIiwgICJTSSIsCi0gICAgIkRMRSIsICJEQzEiLCAiREMy IiwgIkRDMyIsICJEQzQiLCAiTkFLIiwgIlNZTiIsICJFVEIiLAotICAgICJDQU4iLCAiRU0iLCAg IlNVQiIsICJFU0MiLCAiRlMiLCAgIkdTIiwgICJSUyIsICAiVVMiCi19OwotCi1jaGFyICoKLWMx dGFiW10gPSB7CS8qIE5hbWVzIG9mIElTTyA2NDI5IChDMSkgY29udHJvbCBjaGFyYWN0ZXJzIDAt MzIgKi8KLSAgICAiWFhYIiwgIlhYWCIsICJCUEgiLCAiTkJIIiwgIklORCIsICJORUwiLCAiU1NB IiwgIkVTQSIsCi0gICAgIkhUUyIsICJIVEoiLCAiVlRTIiwgIlBMRCIsICJQTFUiLCAiUkkiLCAg IlNTMiIsICJTUzMiLAotICAgICJEQ1MiLCAiUFUxIiwgIlBVMiIsICJTVFMiLCAiQ0NIIiwgIk1X IiwgICJTUEEiLCAiRVBBIiwKLSAgICAiU09TIiwgIlhYWCIsICJTQ0kiLCAiQ1NJIiwgIlNUIiwg ICJPU0MiLCAiUE0iLCAgIkFQQyIsICJOQlMiCi19OwotCi0jZGVmaW5lIFJYUkVTVUxUIDEyNwot c3RhdGljIGNoYXIgcnhkaWdpdHNbXSA9ICIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RV VldYWVoiOwotc3RhdGljIGNoYXIgcnhyZXN1bHRbUlhSRVNVTFQrMV07Ci0KLS8qICBDIEsgUyBU IFIgTiBDIFAgWSAqLwotCi0vKgotICBDb3BpZXMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW50 byBhIGJ1ZmZlciB3aG9zZSB0b3RhbCBsZW5ndGggaXMgZ2l2ZW4sCi0gIGVuc3VyaW5nIHRoYXQg dGhlIHJlc3VsdCBpcyBOVUwtdGVybWluYXRlZCBldmVuIGlmIGl0IGhhcyB0byBiZSB0cnVuY2F0 ZWQuCi0KLSAgQ2FsbCB3aXRoOgotICAgIGRlc3QgPSBwb2ludGVyIHRvIGRlc3RpbmF0aW9uIGJ1 ZmZlcgotICAgIHNyYyAgPSBwb2ludGVyIHRvIHNvdXJjZSBzdHJpbmcKLSAgICBsZW4gID0gbGVu Z3RoIG9mIGRlc3RpbmF0aW9uIGJ1ZmZlciAodGhlIGFjdHVhbCBsZW5ndGgsIG5vdCBvbmUgbGVz cykuCi0KLSAgUmV0dXJuczoKLSAgICBpbnQsIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLCAw IG9yIG1vcmUuCi0KLSAgTk9URTogVGhpcyBpcyBOT1QgYSByZXBsYWNlbWVudCBmb3Igc3RybmNw eSgpOgotICAgLiBzdHJuY3B5KCkgZG9lcyBub3QgcmVxdWlyZSBpdHMgc291cmNlIHN0cmluZyB0 byBiZSBOVUwtdGVybWluYXRlZC4KLSAgIC4gc3RybmNweSgpIGRvZXMgbm90IG5lY2Vzc2FyaWx5 IE5VTC10ZXJtaW5hdGUgaXRzIHJlc3VsdC4KLSAgIC4gc3RybmNweSgpIHJpZ2h0LXBhZHMgZGVz dCB3aXRoIE5VTHMgaWYgaXQgaXMgbG9uZ2VyIHRoYW4gc3JjLgotICAgLiBzdHJuY3B5KCkgdHJl YXRzIHRoZSBsZW5ndGggYXJndW1lbnQgYXMgdGhlIG51bWJlciBvZiBieXRlcyB0byBjb3B5Lgot ICAgLiBja3N0cm5jcHkoKSB0cmVhdHMgdGhlIGxlbmd0aCBhcmd1bWVudCBhcyB0aGUgc2l6ZSBv ZiB0aGUgZGVzdCBidWZmZXIuCi0gICAuIGNrc3RybmNweSgpIGRvZXNuJ3QgZHVtcCBjb3JlIGlm IGdpdmVuIE5VTEwgc3RyaW5nIHBvaW50ZXJzLgotICAgLiBja3N0cm5jcHkoKSByZXR1cm5zIGEg bnVtYmVyLgotCi0gIFVzZSBja3N0cm5jcHkoKSB3aGVuIHlvdSB3YW50IHRvOgotICAgLiBDb3B5 IGFuIGVudGlyZSBzdHJpbmcgaW50byBhIGJ1ZmZlciB3aXRob3V0IG92ZXJydW4uCi0gICAuIEdl dCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgYmFjay4KLQotICBVc2Ugc3RybmNweSgpIHdoZW4g eW91IHdhbnQgdG86Ci0gICAuIENvcHkgYSBwaWVjZSBvZiBhIHN0cmluZy4KLSovCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotY2tzdHJuY3B5KGNoYXIgKiBkZXN0LCBjb25zdCBjaGFyICogc3JjLCBp bnQgbGVuKQotI2Vsc2UKLWNrc3RybmNweShkZXN0LHNyYyxsZW4pIGNoYXIgKiBkZXN0LCAqIHNy YzsgaW50IGxlbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGludCBpOwotICAgIGlm IChsZW4gPCAxIHx8ICFzcmMgfHwgIWRlc3QpIHsJLyogTm90aGluZyBvciBub3doZXJlIHRvIGNv cHkgKi8KLQlpZiAoZGVzdCkgKmRlc3QgPSBOVUw7Ci0JcmV0dXJuKDApOwotICAgIH0KLSNpZm5k ZWYgTk9DS1NUUk5DUFkKLSAgICBmb3IgKGkgPSAwOyBzcmNbaV0gJiYgKGkgPCBsZW4tMSk7IGkr KykgLyogQXJncyBPSywgY29weSAqLwotICAgICAgZGVzdFtpXSA9IHNyY1tpXTsKLSAgICBkZXN0 W2ldID0gTlVMOwotI2Vsc2UKLSAgICBpID0gc3RybGVuKHNyYyk7Ci0gICAgaWYgKGkgPiBsZW4p IGkgPSBsZW47Ci0gICAgc3RybmNweShkZXN0LHNyYyxpKTsKLSAgICBkZXN0W2xlbl0gPSBOVUw7 Ci0jZW5kaWYgLyogTk9DS1NUUk5DUFkgKi8KLSAgICByZXR1cm4oaSk7Ci19Ci0KLS8qICBDIEsg UyBUIFIgTiBDIEEgVCAqLwotCi0vKgotICBBcHBlbmRzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5n IHRvIGEgYnVmZmVyIHdob3NlIHRvdGFsIGxlbmd0aCBpcyBnaXZlbiwKLSAgZW5zdXJpbmcgdGhh dCB0aGUgcmVzdWx0IGlzIE5VTC10ZXJtaW5hdGVkIGV2ZW4gaWYgaXQgaGFkIHRvIGJlIHRydW5j YXRlZC4KLQotICBDYWxsIHdpdGg6Ci0gICAgZGVzdCA9IHBvaW50ZXIgdG8gZGVzdGluYXRpb24g YnVmZmVyIGNvbnRhaW5pbmcgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nCi0gICAgc3JjICA9IHBv aW50ZXIgdG8gbnVsbC10ZXJtaW5hdGVkIHNvdXJjZSBzdHJpbmcKLSAgICBsZW4gID0gbGVuZ3Ro IG9mIGRlc3RpbmF0aW9uIGJ1ZmZlciAodGhlIGFjdHVhbCBsZW5ndGgsIG5vdCBvbmUgbGVzcyku Ci0KLSAgUmV0dXJuczoKLSAgICBpbnQsIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLCAwIG9y IG1vcmUuCi0qLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrc3RybmNhdChjaGFyICogZGVzdCwg Y29uc3QgY2hhciAqIHNyYywgaW50IGxlbikKLSNlbHNlCi1ja3N0cm5jYXQoZGVzdCxzcmMsbGVu KSBjaGFyICogZGVzdCwgKiBzcmM7IGludCBsZW47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSAgICByZWdpc3RlciBpbnQgaSwgajsKLSNpZmRlZiBOT0NLU1RSTkNQWQotICAgIHJlZ2lzdGVy IGNoYXIgKiBzMSwgKiBzMjsKLSNlbmRpZiAvKiBOT0NLU1RSTkNQWSAqLwotICAgIGlmIChsZW4g PCAxIHx8ICFzcmMgfHwgIWRlc3QpIHsJLyogTm90aGluZyBvciBub3doZXJlIHRvIGNvcHkgKi8K LQlpZiAoZGVzdCkgKmRlc3QgPSBOVUw7Ci0JcmV0dXJuKDApOwotICAgIH0KLSNpZm5kZWYgTk9D S1NUUk5DUFkKLSAgICAvKiBBcmdzIE9LLCBjb3B5ICovCi0gICAgZm9yIChpID0gMCwgaiA9IHN0 cmxlbihkZXN0KTsgc3JjW2ldICYmIChpIDwgbGVuLWotMSk7IGkrKykKLSAgICAgIGRlc3RbaStq XSA9IHNyY1tpXTsKLSAgICBkZXN0W2kral0gPSBOVUw7Ci0jZWxzZQotICAgIGogPSAwOwotICAg IHMxID0gZGVzdDsKLSAgICB3aGlsZSAoKnMxKyspIGorKzsJCQkvKiBqID0gc3RybGVuKGRlc3Qp OyAqLwotICAgIHMxLS07CQkJCS8qIChiYWNrIHVwIG92ZXIgTlVMKSAqLwotCi0gICAgaSA9IDA7 Ci0gICAgczIgPSAoY2hhciAqKXNyYzsKLSAgICB3aGlsZSAoKnMyKyspIGkrKzsJCQkvKiBpID0g c3RybGVuKHNyYyk7ICovCi0KLSAgICBpZiAoaSA+IChsZW4taikpCi0gICAgICBpID0gbGVuIC0g ajsKLSAgICBpZiAoaSA8PSAwKQotICAgICAgcmV0dXJuKDApOwotCi0jaWZkZWYgQ09NTUVOVAot ICAgIHN0cm5jcHkoJmRlc3Rbal0sc3JjLGkpOwotI2Vsc2UKLSAgICBqID0gaTsJCQkJLyogVGhp cyBzaG91bGQgYmUgYSBiaXQgZmFzdGVyLi4uICAgICovCi0gICAgczIgPSAoY2hhciAqKXNyYzsJ CSAgICAgICAvKiBkZXBlbmRzIG9uIHN0cmNweSBpbXBsZW1lbnRhdGlvbjsgKi8KLSAgICB3aGls ZSAoKCpzMSsrID0gKnMyKyspICYmIGotLSkJLyogYXQgbGVhc3QgaXQgc2hvdWxkbid0IGJlIHNs b3dlci4gICovCi0gICAgICA7Ci0gICAgZGVzdFtsZW4tMV0gPSBOVUw7CQkJLyogSW4gY2FzZSBv ZiBlYXJseSBleGl0LiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2VuZGlmIC8qIE5PQ0tT VFJOQ1BZICovCi0gICAgcmV0dXJuKGkpOwotfQotCi0vKiAgQyBLIE0gQSBLIE0gUyBHICAqLwot Ci0vKgotICAgQ29uc3RydWN0cyBhIG1lc3NhZ2UgZnJvbSB1cCB0byA0IHBpZWNlcyB3aXRoIGxl bmd0aCBjaGVja2luZy4KLSAgIFJlc3VsdCBpcyBhbHdheXMgTlVMIHRlcm1pbmF0ZWQuICBDYWxs IHdpdGg6Ci0gICAgIGJ1ZjogUG9pbnRlciB0byBidWZmZXIgZm9yIGNvbnN0cnVjdGluZyBtZXNz YWdlLgotICAgICBsZW46IExlbmd0aCBvZiBidWZmZXIuCi0gICAgIHMxLXM0OiBTdHJpbmcgcG9p bnRlcnMgKGNhbiBiZSBOVUxMKS4KLSAgIFJldHVybnM6Ci0gICAgIDA6IE5vdGhpbmcgd2FzIGNv cGllZC4KLSAgICAgbjogKHBvc2l0aXZlIG51bWJlcikgbiBieXRlcyBjb3BpZWQsIGFsbCBhcmdz IGNvcGllZCBzdWNjZXNzZnVsbHkuCi0gICAgLW46IG4gYnl0ZXMgd2VyZSBjb3BpZWQsIGRlc3Rp bmF0aW9uIGJ1ZmZlciBub3QgYmlnIGVub3VnaCBmb3IgYWxsLgotICAgQWxzbyBzZWU6Ci0gICAg IGNrbWFreG1zZygpIC0tIGFjY2VwdHMgMTIgc3RyaW5nIGFyZ3MuCi0gICAgIGNraXRvYSgpLCBj a2x0b2EoKSwgY2tjdG9hKCksIGNraXRveCgpLCBldGMuCi0gICAgIFVzZSBja21ha1t4XW1zZygp IHBsdXMgY2s/dG8/KCkgYXMgYSBzYWZlIHJlcGxhY2VtZW50IGZvciBzcHJpbnRmKCkuCi0qLwot aW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrbWFrbXNnKGNoYXIgKiBidWYsIGludCBsZW4sIGNoYXIg KnMxLCBjaGFyICpzMiwgY2hhciAqczMsIGNoYXIgKnM0KQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8K LWNrbWFrbXNnKGJ1ZixsZW4sczEsczIsczMsczQpIGNoYXIgKmJ1ZiwgKnMxLCAqczIsICpzMywg KnM0OyBpbnQgbGVuOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaW50IGksIG4gPSAw LCBtID0gMDsKLSAgICBjaGFyICpzOwotICAgIGNoYXIgKnAsICphWzRdOwotCi0gICAgaWYgKCFi dWYpIHJldHVybihuKTsJCS8qIE5vIGRlc3RpbmF0aW9uICovCi0gICAgaWYgKGxlbiA8IDEpIHJl dHVybihuKTsJCS8qIE5vIHNpemUgKi8KLQotICAgIHMgPSBidWY7CQkJCS8qIFBvaW50IHRvIGRl c3RpbmF0aW9uICovCi0gICAgYVswXSA9IHMxOyBhWzFdID0gczI7IGFbMl0gPSBzMzsgYVszXSA9 IHM0OwkvKiBBcnJheSBvZiBzb3VyY2Ugc3RyaW5ncyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCA0 OyBpKyspIHsJCS8qIExvb3AgdGhydSBhcnJheSAqLwotCXAgPSBhW2ldOwkJCS8qIFBvaW50IHRv IHRoaXMgZWxlbWVudCAqLwotCWlmIChwKSB7CQkJLyogSWYgcG9pbnRlciBub3QgbnVsbCAqLwot CSAgICBuID0gY2tzdHJuY3B5KHMscCxsZW4pOwkvKiBDb3B5IHNhZmVseSAqLwotCSAgICBtICs9 IG47CQkJLyogQWNjdW11bGF0ZSB0b3RhbCAqLwotCSAgICBpZiAocFtuXSkJCQkvKiBEaWRuJ3Qg Z2V0IHdob2xlIHRoaW5nPyAqLwotCSAgICAgIHJldHVybigtbSk7CQkvKiByZXR1cm4gaW5kaWNh dGluZyBidWZmZXIgZnVsbCAqLwotCSAgICBsZW4gLT0gbjsJCQkvKiBEZWR1Y3QgZnJvbSBzcGFj ZSBsZWZ0ICovCi0JICAgIHMgKz0gbjsJCQkvKiBPdGhlcndpc2UgYWR2YW5jZSBkZXN0IHBvaW50 ZXIgKi8KLQl9Ci0gICAgfQotICAgIHJldHVybihtKTsJCQkJLyogUmV0dXJuIHRvdGFsIGJ5dGVz IGNvcGllZCAqLwotfQotCi0KLS8qICBDIEsgTSBBIEsgWCBNIFMgRyAgKi8KLQotLyogIEV4YWN0 bHkgbGlrZSBja21ha21zZygpLCBidXQgYWNjZXB0cyAxMiBzdHJpbmcgYXJndW1lbnRzLiAqLwot Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2ttYWt4bXNnKGNoYXIgKiBidWYsIGludCBsZW4sCi0J ICBjaGFyICpzMSwgY2hhciAqczIsIGNoYXIgKnMzLCBjaGFyICAqczQsIGNoYXIgICpzNSwgY2hh ciAqczYsCi0JICBjaGFyICpzNywgY2hhciAqczgsIGNoYXIgKnM5LCBjaGFyICpzMTAsIGNoYXIg KnMxMSwgY2hhciAqczEyKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWNrbWFreG1zZyhidWYsbGVu LHMxLHMyLHMzLHM0LHM1LHM2LHM3LHM4LHM5LHMxMCxzMTEsczEyKQotICBjaGFyICpidWYsICpz MSwgKnMyLCAqczMsICpzNCwgKnM1LCAqczYsICpzNywgKnM4LCAqczksICpzMTAsICpzMTEsICpz MTI7Ci0gIGludCBsZW47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpbnQgaSwgbiA9 IDAsIG0gPSAwOwotICAgIGNoYXIgKnM7Ci0gICAgY2hhciAqcCwgKmFbMTJdOwotCi0KLSAgICBp ZiAoIWJ1ZikgcmV0dXJuKG4pOwkJLyogTm8gZGVzdGluYXRpb24gKi8KLSAgICBpZiAobGVuIDwg MSkgcmV0dXJuKG4pOwkJLyogTm8gc2l6ZSAqLwotCi0gICAgcyA9IGJ1ZjsJCQkJLyogUG9pbnQg dG8gZGVzdGluYXRpb24gKi8KLSAgICBhWzBdID0gczE7IGFbMV0gPSAgczI7IGFbMl0gID0gczM7 ICBhWzNdID0gczQ7IC8qIFNvdXJjZS1zdHJpbmcgYXJyYXkgKi8KLSAgICBhWzRdID0gczU7IGFb NV0gPSAgczY7IGFbNl0gID0gczc7ICBhWzddID0gczg7Ci0gICAgYVs4XSA9IHM5OyBhWzldID0g czEwOyBhWzEwXSA9IHMxMTsgYVsxMV0gPSBzMTI7Ci0gICAgZm9yIChpID0gMDsgaSA8IDEyOyBp KyspIHsJCS8qIExvb3AgdGhydSBhcnJheSAqLwotCXAgPSBhW2ldOwkJCS8qIFBvaW50IHRvIHRo aXMgZWxlbWVudCAqLwotCWlmIChwKSB7CQkJLyogSWYgcG9pbnRlciBub3QgbnVsbCAqLwotCSAg ICBuID0gY2tzdHJuY3B5KHMscCxsZW4pOwkvKiBDb3B5IHNhZmVseSAqLwotCSAgICBtICs9IG47 CQkJLyogQWNjdW11bGF0ZSB0b3RhbCAqLwotCSAgICBpZiAocFtuXSkJCQkvKiBEaWRuJ3QgZ2V0 IHdob2xlIHRoaW5nPyAqLwotCSAgICAgIHJldHVybigtbSk7CQkvKiByZXR1cm4gaW5kaWNhdGlu ZyBidWZmZXIgZnVsbCAqLwotCSAgICBsZW4gLT0gbjsJCQkvKiBEZWR1Y3QgZnJvbSBzcGFjZSBs ZWZ0ICovCi0JICAgIHMgKz0gbjsJCQkvKiBPdGhlcndpc2UgYWR2YW5jZSBkZXN0IHBvaW50ZXIg Ki8KLQl9Ci0gICAgfQotICAgIHJldHVybihtKTsJCQkJLyogUmV0dXJuIHRvdGFsIGJ5dGVzIGNv cGllZCAqLwotfQotCi0vKiAgQyBIIEEgUiBUIE8gUyBUIFIgICovCi0KLS8qICBDb252ZXJ0cyBh IGNoYXJhY3RlciB0byBhIHN0cmluZywgaW50ZXJwcmV0aW5nIGNvbnRyb2xzLiAgKi8KLQotY2hh ciAqCi1jaGFydG9zdHIoeCkgaW50IHg7IHsJCQkvKiBDYWxsIHdpdGggY2hhciB4ICovCi0gICAg c3RhdGljIGNoYXIgYnVmWzJdOwkJCS8qIFJldHVybnMgc3RyaW5nIHBvaW50ZXIuICovCi0gICAg aWYgKHggPCAzMikKLSAgICAgIHJldHVybihjY250YWJbeF0pOwotICAgIGlmICh4ID09IDEyNykK LSAgICAgIHJldHVybigiREVMIik7Ci0gICAgaWYgKHggPiAxMjcgJiYgeCA8IDE2MSkKLSAgICAg IHJldHVybihjMXRhYlt4IC0gMTI4XSk7Ci0gICAgaWYgKHggPT0gMHhBRCkKLSAgICAgIHJldHVy bigiU0hZIik7Ci0gICAgYnVmWzFdID0gTlVMOwotICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCkoeCAm IDB4ZmYpOwotICAgIHJldHVybigoY2hhciAqKWJ1Zik7Ci19Ci0KLS8qICBDIEsgUiBDIEggQSBS ICovCi0KLS8qICBSZXR1cm5zIHRoZSByaWdodG1vc3QgY2hhcmFjdGVyIG9mIHRoZSBnaXZlbiBu dWxsLXRlcm1pbmF0ZWQgc3RyaW5nICovCi0KLWludAotY2tyY2hhcihzKSBjaGFyICogczsgewot ICAgIHJlZ2lzdGVyIENIQVIgYyA9ICdcMCcsICpwOwotICAgIHAgPSAoQ0hBUiAqKXM7Ci0gICAg aWYgKCFwKSBwID0gKENIQVIgKikiIjsJCS8qIE51bGwgcG9pbnRlciA9PSBlbXB0eSBzdHJpbmcg Ki8KLSAgICBpZiAoISpwKSByZXR1cm4oMCk7Ci0gICAgd2hpbGUgKCpwKQkJCQkvKiBDcmF3bCB0 byBlbmQgb2Ygc3RyaW5nICovCi0gICAgICBjID0gKnArKzsKLSAgICByZXR1cm4oKHVuc2lnbmVk KShjICYgMHhmZikpOwkvKiBSZXR1cm4gZmluYWwgY2hhcmFjdGVyICovCi19Ci0KLS8qICBDIEsg UyBUIFIgQyBIIFIgICovCi0KLS8qICBSZXBsYWNlbWVudCBmb3Igc3RyY2hyKCksIHdoaWNoIGlz IG5vdCB1bml2ZXJzYWwuICAqLwotLyogIENhbGwgd2l0aDoKLSAgICAgcyA9IHBvaW50ZXIgdG8g c3RyaW5nIHRvIGxvb2sgaW4uCi0gICAgIGMgPSBjaGFyYWN0ZXIgdG8gbG9vayBmb3IuCi0gICAg UmV0dXJuczoKLSAgICAgTlVMTCBpZiBjIG5vdCBmb3VuZCBpbiBzIG9yIHVwb24gYW55IGtpbmQg b2YgZXJyb3IsIG9yOgotICAgICBwb2ludGVyIHRvIGZpcnN0IG9jY3VycmVuY2Ugb2YgYyBpbiBz LCBzZWFyY2hpbmcgZnJvbSBsZWZ0IHRvIHJpZ2h0LgotKi8KLWNoYXIgKgotI2lmZGVmIENLX0FO U0lDCi1ja3N0cmNocihjaGFyICogcywgY2hhciBjKQotI2Vsc2UKLWNrc3RyY2hyKHMsYykgY2hh ciAqcywgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogY2tzdHJjaHIgKi8gewotICAgIGlm ICghcykKLSAgICAgIHJldHVybihOVUxMKTsKLSAgICB3aGlsZSAoKnMgJiYgKnMgIT0gYykKLSAg ICAgIHMrKzsKLSAgICByZXR1cm4oKCpzID09IGMpID8gcyA6IE5VTEwpOwotfQotCi0vKiAgQyBL IFMgVCBSIFIgQyBIIFIgICovCi0KLS8qICBSZXBsYWNlbWVudCBmb3Igc3RycmNocigpLCB3aGlj aCBpcyBub3QgdW5pdmVyc2FsLiAgKi8KLS8qICBDYWxsIHdpdGg6Ci0gICAgIHMgPSBwb2ludGVy IHRvIHN0cmluZyB0byBsb29rIGluLgotICAgICBjID0gY2hhcmFjdGVyIHRvIGxvb2sgZm9yLgot ICAgIFJldHVybnM6Ci0gICAgIE5VTEwgaWYgYyBub3QgZm91bmQgaW4gcyBvciB1cG9uIGFueSBr aW5kIG9mIGVycm9yLCBvcjoKLSAgICAgcG9pbnRlciB0byBmaXJzdCBvY2N1cnJlbmNlIG9mIGMg aW4gcywgc2VhcmNoaW5nIGZyb20gcmlnaHQgdG8gbGVmdC4KLSovCi1jaGFyICoKLSNpZmRlZiBD S19BTlNJQwotY2tzdHJyY2hyKGNoYXIgKiBzLCBjaGFyIGMpCi0jZWxzZQotY2tzdHJyY2hyKHMs YykgY2hhciAqcywgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogY2tzdHJjaHIgKi8gewot ICAgIGNoYXIgKiBzMiA9IE5VTEw7Ci0gICAgaWYgKCFzKQotICAgICAgcmV0dXJuKE5VTEwpOwot ICAgIHdoaWxlICgqcykgewotCWlmICgqcyA9PSBjKQotCSAgczIgPSBzOwotCXMrKzsKLSAgICB9 Ci0gICAgcmV0dXJuKHMyKTsKLX0KLQotCi0vKiBDIEsgUyBUIFIgUCBCIFIgSyAgLS0gIFBvcnRh YmxlIHJlcGxhY2VtZW50IGZvciBzdHJwYnJrKCkgICovCi0KLS8qIFJldHVybnMgcG9pbnRlciB0 byBmaXJzdCBjaGFyIGluIHMxIHRoYXQgaXMgYWxzbyBpbiBzMiwgb3IgTlVMTCAqLwotCi1jaGFy ICoKLWNrc3RycGJyayhzMSwgczIpIGNoYXIgKiBzMSwgKiBzMjsgewotICAgIGNoYXIgYzEsIGMy LCAqIHMzOwotICAgIGlmICghczEgfHwgIXMyKSByZXR1cm4oTlVMTCk7Ci0gICAgaWYgKCEqczEg fHwgISpzMikgcmV0dXJuKE5VTEwpOwotICAgIHdoaWxlICgoYzEgPSAqczErKykpIHsKLQlzMyA9 IHMyOwotCXdoaWxlICgoYzIgPSAqczMrKykpIHsKLQkgICAgaWYgKGMyID09IGMxKQotCSAgICAg IHJldHVybihzMS0xKTsKLQl9Ci0gICAgfQotICAgIHJldHVybihOVUxMKTsKLX0KLQotLyogIEMg SyBMIE8gVyBFIFIgIC0tICBMb3dlcmNhc2UgYSBzdHJpbmcgSU4gUExBQ0UgKi8KLQotLyogUmV0 dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgKi8KLQotaW50Ci1ja2xvd2VyKHMpIGNoYXIg KnM7IHsKLSAgICBpbnQgbiA9IDA7Ci0gICAgaWYgKCFzKSByZXR1cm4oMCk7Ci0gICAgd2hpbGUg KCpzKSB7Ci0gICAgICAgIGlmIChpc3VwcGVyKCpzKSkgKnMgPSAoY2hhcikgdG9sb3dlcigqcyk7 Ci0gICAgICAgIHMrKywgbisrOwotICAgIH0KLSAgICByZXR1cm4obik7Ci19Ci0KLS8qICBDIEsg VSBQIFAgRSBSICAtLSAgVXBwZXJjYXNlIGEgc3RyaW5nIElOIFBMQUNFICovCi0KLS8qIFJldHVy bnMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nICovCi0KLWludAotY2t1cHBlcihzKSBjaGFyICpz OyB7Ci0gICAgaW50IG4gPSAwOwotICAgIGlmICghcykgcmV0dXJuKDApOwotICAgIHdoaWxlICgq cykgewotICAgICAgICBpZiAoaXNsb3dlcigqcykpICpzID0gKGNoYXIpIHRvdXBwZXIoKnMpOwot ICAgICAgICBzKyssIG4rKzsKLSAgICB9Ci0gICAgcmV0dXJuKG4pOwotfQotCi0vKiAgQyBLIEwg VCBPIEEgIC0tICBMb25nIHRvIHN0cmluZyAgLS0gIEZPUiBESVNDSVBMSU5FRCBVU0UgT05MWSAg Ki8KLQotI2RlZmluZSBOVU1CVUYgMTAyNAotc3RhdGljIGNoYXIgbnVtYnVmW05VTUJVRiszMl0g PSB7IE5VTCwgTlVMIH07Ci1zdGF0aWMgaW50IG51bWJwID0gMDsKLS8qCi0gIGNrbHRvYSgpIGFu ZCBja2l0b2EoKSBhcmUgbGlrZSBhdG9sKCkgYW5kIGF0b2koKSBpbiB0aGUgcmV2ZXJzZSBkaXJl Y3Rpb24sCi0gIHJldHVybmluZyBhIHBvaW50ZXIgdG8gdGhlIHN0cmluZyByZXByZXNlbnRhdGlv biBvZiB0aGUgZ2l2ZW4gbnVtYmVyIHdpdGhvdXQKLSAgdGhlIGNhbGxlciBoYXZpbmcgdG8gd29y cnkgYWJvdXQgYWxsb2NhdGluZyBvciBkZWZpbmluZyBhIGJ1ZmZlciBmaXJzdC4KLSAgVGhleSBt YW5hZ2UgdGhlaXIgb3duIGludGVybmFsIGJ1ZmZlciwgc28gc3VjY2Vzc2l2ZSBjYWxscyByZXR1 cm4gZGlmZmVyZW50Ci0gIHBvaW50ZXJzLiAgSG93ZXZlciwgdG8ga2VlcCBtZW1vcnkgY29uc3Vt cHRpb24gZnJvbSBncm93aW5nIHdpdGhvdXQgYm91bmQsCi0gIHRoZSBidWZmZXIgcmVjeWNsZXMg aXRzZWxmLiAgU28gYWZ0ZXIgc2V2ZXJhbCBodW5kcmVkIGNhbGxzIChkZXBlbmRpbmcgb24KLSAg dGhlIHNpemUgb2YgdGhlIG51bWJlcnMpLCBzb21lIG9mIHRoZSBlYXJsaWVyIHBvaW50ZXJzIG1p Z2h0IHdlbGwgZmluZAotICB0aGVtc2VsdmVzIHJlZmVyZW5jaW5nIHNvbWV0aGluZyBkaWZmZXJl bnQuICBNb3JhbDogWW91IGNhbid0IHdpbiBpbiBDLgotICBUaGVyZWZvcmUsIHRoZXNlIHJvdXRp bmVzIGFyZSBpbnRlbmRlZCBtYWlubHkgZm9yIGdlbmVyYXRpbmcgbnVtZXJpYyBzdHJpbmdzCi0g IGZvciBzaG9ydC10ZXJtIHVzZSwgZS5nLiBmb3IgcGFzc2luZyBudW1iZXJzIGluIHN0cmluZyBm b3JtIGFzIHBhcmFtZXRlcnMgdG8KLSAgZnVuY3Rpb25zLiAgRm9yIGxvbmctdGVybSB1c2UsIHRo ZSByZXN1bHQgbXVzdCBiZSBjb3BpZWQgdG8gYSBzYWZlIHBsYWNlLgotKi8KLWNoYXIgKgotI2lm ZGVmIENLX0FOU0lDCi1ja2x0b2EobG9uZyBuKQotI2Vsc2UKLWNrbHRvYShuKSBsb25nIG47Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGNrbHRvYSAqLyB7Ci0gICAgY2hhciBidWZbMzJdOwkJ CS8qIEludGVybmFsIHdvcmtpbmcgYnVmZmVyICovCi0gICAgY2hhciAqIHAsICogcywgKiBxOwot ICAgIGludCBrLCB4LCBsZW4gPSAwLCBzaWduID0gMDsKLSAgICBpZiAobiA8IDBMKSB7CQkJLyog U2lnbiAqLwotCW4gPSAwTCAtIG47Ci0Jc2lnbiA9IDE7Ci0gICAgfQotICAgIGJ1ZlszMV0gPSBO VUw7Ci0gICAgZm9yIChrID0gMzA7IGsgPiAwOyBrLS0pIHsJCS8qIENvbnZlcnQgbnVtYmVyIHRv IHN0cmluZyAqLwotCXggPSBuICUgMTBMOwotCWJ1ZltrXSA9IHggKyAnMCc7Ci0JbiA9IG4gLyAx MEw7Ci0JaWYgKCFuKQotCSAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChzaWduKSBidWZbLS1rXSA9 ICctJzsJCS8qIEFkZCBzaWduIGlmIG5lY2Vzc2FyeSAqLwotICAgIGxlbiA9IDMxIC0gazsKLSAg ICBpZiAobGVuICsgbnVtYnAgPiBOVU1CVUYpCi0gICAgICBudW1icCA9IDA7Ci0gICAgcCA9IG51 bWJ1ZiArIG51bWJwOwotICAgIHEgPSBwOwotICAgIHMgPSBidWYgKyBrOwotICAgIHdoaWxlICgo KnArKyA9ICpzKyspKSA7CQkvKiBDb3B5ICovCi0gICAgKnArKyA9IE5VTDsKLSAgICBudW1icCAr PSBsZW4rMTsKLSAgICByZXR1cm4ocSk7CQkJCS8qIFJldHVybiBwb2ludGVyICovCi19Ci0KLS8q ICBDIEsgVSBMIFQgTyBBICAtLSAgVW5zaWduZWQgbG9uZyB0byBzdHJpbmcgICovCi0KLWNoYXIg KgotI2lmZGVmIENLX0FOU0lDCi1ja3VsdG9hKHVuc2lnbmVkIGxvbmcgbikKLSNlbHNlCi1ja3Vs dG9hKG4pIHVuc2lnbmVkIGxvbmcgbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogY2t1bHRv YSAqLyB7Ci0gICAgY2hhciBidWZbMzJdOwkJCS8qIEludGVybmFsIHdvcmtpbmcgYnVmZmVyICov Ci0gICAgY2hhciAqIHAsICogcywgKiBxOwotICAgIGludCBrLCB4LCBsZW4gPSAwOwotICAgIGJ1 ZlszMV0gPSBOVUw7Ci0gICAgZm9yIChrID0gMzA7IGsgPiAwOyBrLS0pIHsJCS8qIENvbnZlcnQg bnVtYmVyIHRvIHN0cmluZyAqLwotCXggPSBuICUgMTBMOwotCWJ1ZltrXSA9IHggKyAnMCc7Ci0J biA9IG4gLyAxMEw7Ci0JaWYgKCFuKQotCSAgYnJlYWs7Ci0gICAgfQotICAgIGxlbiA9IDMxIC0g azsKLSAgICBpZiAobGVuICsgbnVtYnAgPiBOVU1CVUYpCi0gICAgICBudW1icCA9IDA7Ci0gICAg cCA9IG51bWJ1ZiArIG51bWJwOwotICAgIHEgPSBwOwotICAgIHMgPSBidWYgKyBrOwotICAgIHdo aWxlICgoKnArKyA9ICpzKyspKSA7CQkvKiBDb3B5ICovCi0gICAgbnVtYnAgKz0gbGVuKzE7Ci0g ICAgcmV0dXJuKHEpOwkJCQkvKiBSZXR1cm4gcG9pbnRlciAqLwotfQotCi1jaGFyICoKLSNpZmRl ZiBDS19BTlNJQwotY2tsdG94KGxvbmcgbikJCQkJLyogTG9uZyBpbnQgdG8gIjB4Li4iIGhleCBz dHJpbmcgKi8KLSNlbHNlCi1ja2x0b3gobikgbG9uZyBuOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0vKiBja2x0b3ggKi8gewotICAgIGNoYXIgYnVmWzMyXTsJCQkvKiBJbnRlcm5hbCB3b3JraW5n IGJ1ZmZlciAqLwotICAgIGNoYXIgKnAsICpxLCAqcywgKmJwID0gYnVmICsgMjsKLSAgICBpbnQg azsKLSAgICBidWZbMF0gPSAnMCc7Ci0gICAgYnVmWzFdID0gJ3gnOwotICAgIHNwcmludGYoYnAs ICIlbHgiLCBuKTsKLSAgICBrID0gc3RybGVuKGJwKTsKLSAgICBpZiAoayYxKSB7Ci0Jc3ByaW50 ZihicCwgIjAlbHgiLCBuKTsKLQlrKys7Ci0gICAgfQotICAgIGsgKz0gMjsJCQkJLyogIjB4IiAq LwotICAgIGlmIChudW1icCArIGsgPj0gTlVNQlVGKQotICAgICAgbnVtYnAgPSAwOwotICAgIHAg PSBudW1idWYgKyBudW1icDsKLSAgICBxID0gcDsKLSAgICBzID0gYnVmOwotICAgIHdoaWxlICgo KnArKyA9ICpzKyspKSA7CQkvKiBDb3B5ICovCi0gICAgKnArKyA9IE5VTDsKLSAgICBudW1icCAr PSBrKzE7Ci0gICAgcmV0dXJuKHEpOwkJCQkvKiBSZXR1cm4gcG9pbnRlciAqLwotfQotCi0KLS8q ICBDIEsgRiBTIFQgTyBBICAtLSAgRmlsZSBTaXplIChvciBvZmZzZXQpIHRvIHN0cmluZyAgKi8K LQotLyogVGhpcyBpcyBqdXN0IGxpa2UgY2tsdG9hKCkgZXhjZXB0IGZvciB0aGUgZGF0YSB0eXBl IG9mIHRoZSBhcmd1bWVudC4gKi8KLS8qIEl0J3MgbWFpbmx5IGZvciBwcmludGluZyBmaWxlIHNp emVzIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgdGhlaXIgZGF0YSAqLwotLyogdHlwZSwgc28gd2Ug ZG9uJ3QgaGF2ZSB0byBoYXJkd2FyZSAiJWxkIiBvciAiJWxsZCIgaW50byBwcmludGYoKXMuICov Ci0vKiBXb3JrcyBmb3IgMzIgb3IgNjQgYml0cywgYWNjb3JkaW5nIHRvIENLX09GRl9UIGRlZmlu aXRpb24uICovCi0KLWNoYXIgKgotI2lmZGVmIENLX0FOU0lDCi1ja2ZzdG9hKENLX09GRl9UIG4p Ci0jZWxzZQotY2tmc3RvYShuKSBDS19PRkZfVCBuOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0v KiBja2ZzdG9hICovIHsKLSAgICBjaGFyIGJ1ZlszMl07CQkJLyogSW50ZXJuYWwgd29ya2luZyBi dWZmZXIgKi8KLSAgICBjaGFyICogcCwgKiBzLCAqIHE7Ci0gICAgaW50IGssIHgsIGxlbiA9IDAs IHNpZ24gPSAwOwotCi0gICAgaWYgKG4gPCAoQ0tfT0ZGX1QpMCkgewkJLyogU2lnbiAqLwotCW4g PSAoQ0tfT0ZGX1QpMCAtIG47Ci0Jc2lnbiA9IDE7Ci0gICAgfQotICAgIGJ1ZlszMV0gPSBOVUw7 CQkJLyogMl42My0xIGlzIGFib3V0IDIwIGRlY2ltYWwgZGlnaXRzICovCi0gICAgZm9yIChrID0g MzA7IGsgPiAwOyBrLS0pIHsJCS8qIENvbnZlcnQgbnVtYmVyIHRvIHN0cmluZyAqLwotCXggPSBu ICUgKENLX09GRl9UKTEwOwotCWlmICh4IDwgMCkgewotCSAgICAvKiB4ICs9IDEwOyAqLwotCSAg ICBja3N0cm5jcHkoJmJ1ZlsyM10sIk9WRVJGTE9XIiwzMik7Ci0JICAgIHNpZ24gPSAwOwotCSAg ICBrID0gMjM7Ci0JICAgIGJyZWFrOwotCX0KLQlidWZba10gPSB4ICsgJzAnOwotCW4gPSBuIC8g KENLX09GRl9UKTEwOwotCWlmICghbikKLQkgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoc2lnbikg YnVmWy0ta10gPSAnLSc7CQkvKiBBZGQgc2lnbiBpZiBuZWNlc3NhcnkgKi8KLSAgICBsZW4gPSAz MSAtIGs7Ci0gICAgaWYgKGxlbiArIG51bWJwID4gTlVNQlVGKQotICAgICAgbnVtYnAgPSAwOwot ICAgIHAgPSBudW1idWYgKyBudW1icDsKLSAgICBxID0gcDsKLSAgICBzID0gYnVmICsgazsKLSAg ICB3aGlsZSAoKCpwKysgPSAqcysrKSkgOwkJLyogQ29weSAqLwotICAgICpwKysgPSBOVUw7Ci0g ICAgbnVtYnAgKz0gbGVuKzE7Ci0gICAgcmV0dXJuKHEpOwkJCQkvKiBSZXR1cm4gcG9pbnRlciAq LwotfQotCi0vKiAgQyBLIEEgVCBPIEYgUyAgLS0gIFN0cmluZyB0byBGaWxlIFNpemUgKG9yIG9m ZnNldCkgKi8KLQotLyogVGhpcyBpcyB0aGUgaW52ZXJzZSBvZiBja2ZzdG9hKCksIGEgcmVwbGFj ZW1lbnQgZm9yIGF0b2woKSB0aGF0IHdvcmtzICovCi0vKiBmb3IgZWl0aGVyIDMyLWJpdCBvciA2 NC1iaXQgYXJndW1lbnRzLCBhY2NvcmRpbmcgdG8gQ0tfT0ZGX1QgZGVmaW5pdGlvbi4gKi8KLS8q IExpa2UgYXRvbCgpLCB0aGVyZSBpcyBubyBlcnJvciBpbmRpY2F0aW9uLiAqLwotCi1DS19PRkZf VAotI2lmZGVmIENLX0FOU0lDCi1ja2F0b2ZzKGNoYXIgKiBzKQotI2Vsc2UKLWNrYXRvZnMocykg Y2hhciAqIHM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGNrYXRvZnMgKi8gewotICAgIENL X09GRl9UIHJlc3VsdCA9IChDS19PRkZfVCkwOwotICAgIGludCBtaW51cyA9IDA7Ci0gICAgd2hp bGUgKCpzICYmICgqcyA9PSBTUCB8fCAqcyA9PSBIVCkpIHMrKzsKLSAgICBpZiAoKnMgPT0gJysn KSBzKys7Ci0gICAgaWYgKCpzID09ICctJykgewotCW1pbnVzID0gMTsKLQlzKys7Ci0gICAgfQot ICAgIHdoaWxlIChpc2RpZ2l0KCpzKSkgewotCXJlc3VsdCA9IChyZXN1bHQgKiAoQ0tfT0ZGX1Qp MTApICsgKENLX09GRl9UKSgqcyAtICcwJyk7Ci0JcysrOwotICAgIH0KLSAgICByZXR1cm4obWlu dXMgPyAtcmVzdWx0IDogcmVzdWx0KTsKLX0KLQotLyogIEMgSyBJIFQgTyBBICAtLSAgSW50IHRv IHN0cmluZyAgLS0gRk9SIERJU0NJUExJTkVEIFVTRSBPTkxZICAqLwotCi1jaGFyICoKLWNraXRv YShuKSBpbnQgbjsgewkJCS8qIFNlZSBjb21tZW50cyB3aXRoIGNrbHRvYSgpLiAqLwotICAgIGxv bmcgbm47Ci0gICAgbm4gPSBuOwotICAgIHJldHVybihja2x0b2Eobm4pKTsKLX0KLQotCi1jaGFy ICoJCQkJCS8qIFVuc2lnbmVkIGludCB0byBzdHJpbmcgKi8KLWNrdWl0b2EobikgdW5zaWduZWQg aW50IG47IHsKLSAgICB1bnNpZ25lZCBsb25nIG5uOwotICAgIG5uID0gbjsKLSAgICByZXR1cm4o Y2t1bHRvYShubikpOwotfQotCi1jaGFyICoKLWNraXRveChuKSBpbnQgbjsgewkJCS8qIEludCB0 byBoZXggKi8KLSAgICBsb25nIG5uOwotICAgIG5uID0gbjsKLSAgICByZXR1cm4oY2tsdG94KG5u KSk7Ci19Ci0KLWNoYXIgKgotI2lmZGVmIENLX0FOU0lDCi1ja2N0b2EoY2hhciBjKQkJCQkvKiBD aGFyIHRvIHN0cmluZyAqLwotI2Vsc2UKLWNrY3RvYShjKSBjaGFyIGM7Ci0jZW5kaWYKLS8qIGNr Y3RvYSAqLyB7Ci0gICAgc3RhdGljIGNoYXIgYnVmWzMyXTsKLSAgICBzdGF0aWMgaW50IGN1cnJl bnQgPSAwOwotICAgIGlmIChjdXJyZW50ID49IDMwKQotICAgICAgY3VycmVudCA9IDA7Ci0gICAg YnVmW2N1cnJlbnQrK10gPSBjOwotICAgIGJ1ZltjdXJyZW50KytdID0gJ1wwJzsKLSAgICByZXR1 cm4oKGNoYXIgKikoYnVmICsgY3VycmVudCAtIDIpKTsKLX0KLQotY2hhciAqCi0jaWZkZWYgQ0tf QU5TSUMKLWNrY3RveChDSEFSIGMsIGludCBmbGFnKQkJLyogVW5zaWduZWQgY2hhciB0byBoZXgg Ki8KLSNlbHNlCi1ja2N0b3goYywgZmxhZykgQ0hBUiBjOyBpbnQgZmxhZzsKLSNlbmRpZgotLyog Y2tjdG94ICovIHsKLSAgICBzdGF0aWMgY2hhciBidWZbNDhdOwotICAgIHN0YXRpYyBpbnQgY3Vy cmVudCA9IDA7Ci0gICAgaW50IHg7Ci0gICAgY2hhciBoOwotICAgIGlmIChjdXJyZW50ID4gNDUp Ci0gICAgICBjdXJyZW50ID0gMDsKLSAgICB4ID0gKGMgPj4gNCkgJiAweDBmOwotICAgIGggPSBy eGRpZ2l0c1t4XTsKLSAgICBpZiAoIWZsYWcgJiYgaXN1cHBlcihyeGRpZ2l0c1t4XSkpCi0gICAg ICBoID0gdG9sb3dlcihyeGRpZ2l0c1t4XSk7Ci0gICAgYnVmW2N1cnJlbnQrK10gPSBoOwotICAg IHggPSBjICYgMHgwZjsKLSAgICBoID0gcnhkaWdpdHNbeF07Ci0gICAgaWYgKCFmbGFnICYmIGlz dXBwZXIocnhkaWdpdHNbeF0pKQotICAgICAgaCA9IHRvbG93ZXIocnhkaWdpdHNbeF0pOwotICAg IGJ1ZltjdXJyZW50KytdID0gaDsKLSAgICBidWZbY3VycmVudCsrXSA9ICdcMCc7Ci0gICAgcmV0 dXJuKChjaGFyICopKGJ1ZiArIGN1cnJlbnQgLSAzKSk7Ci19Ci0KLS8qICBDIEsgSSBOIEQgRSBY ICAtLSAgQy1LZXJtaXQncyBpbmRleCBmdW5jdGlvbiAgKi8KLS8qCi0gIFdlIGNhbid0IGRlcGVu ZCBvbiBDIGxpYnJhcmllcyB0byBoYXZlIG9uZSwgc28gaGVyZSBpcyBvdXIgb3duLgotICBDYWxs IHdpdGg6Ci0gICAgczEgLSBTdHJpbmcgdG8gbG9vayBmb3IuCi0gICAgczIgLSBTdHJpbmcgdG8g bG9vayBpbi4KLSAgICAgdCAtIE9mZnNldCBmcm9tIHJpZ2h0IG9yIGxlZnQgb2YgczIsIDAgYmFz ZWQ7IC0xIGZvciByaWdodG1vc3QgY2hhciBpbiBzMi4KLSAgICAgciAtIDAgZm9yIGxlZnQtdG8t cmlnaHQgc2VhcmNoLCBub24tMCBmb3IgcmlnaHQtdG8tbGVmdC4KLSAgaWNhc2UgIDAgZm9yIGNh c2UgaW5kZXBlbmRlbmNlLCBub24tMCBpZiBhbHBoYWJldGljIGNhc2UgbWF0dGVycy4KLSAgUmV0 dXJucyAwIGlmIHN0cmluZyBub3QgZm91bmQsIG90aGVyd2lzZSBhIDEtYmFzZWQgcmVzdWx0Lgot ICBBbHNvIHJldHVybnMgMCBvbiBhbnkga2luZCBvZiBlcnJvciwgZS5nLiBqdW5rIHBhcmFtZXRl cnMuCi0qLwotaW50Ci1ja2luZGV4KHMxLHMyLHQscixpY2FzZSkgY2hhciAqczEsICpzMjsgaW50 IHQsIHIsIGljYXNlOyB7Ci0gICAgaW50IGxlbjEgPSAwLCBsZW4yID0gMCwgaSwgaiwgeCwgb3Qg PSB0OyAvKiBvdCA9IG9yaWdpbmFsIHQgKi8KLSAgICBjaGFyICogczsKLQotICAgIGlmICghczEg fHwgIXMyKSByZXR1cm4oMCk7Ci0gICAgcyA9IHMxOwotICAgIHdoaWxlICgqcysrKSBsZW4xKys7 CQkvKiBsZW5ndGggb2Ygc3RyaW5nIHRvIGxvb2sgZm9yICovCi0gICAgcyA9IHMyOwotICAgIHdo aWxlICgqcysrKSBsZW4yKys7CQkvKiBsZW5ndGggb2Ygc3RyaW5nIHRvIGxvb2sgaW4gKi8KLSAg ICBzID0gczI7Ci0gICAgaWYgKHQgPCAwKSB0ID0gbGVuMiAtIDE7Ci0KLSAgICBqID0gbGVuMiAt IGxlbjE7CQkJLyogbGVuZ3RoIGRpZmZlcmVuY2UgKi8KLQotICAgIGlmIChqIDwgMCB8fCAociA9 PSAwICYmIHQgPiBqKSkJLyogc2VhcmNoIHN0cmluZyBpcyBsb25nZXIgKi8KLSAgICAgIHJldHVy bigwKTsKLSAgICBpZiAociA9PSAwKSB7CQkJLyogSW5kZXggKi8KLQlzID0gczIgKyB0OwkJCS8q IFBvaW50IHRvIGJlZ2lubmluZyBvZiB0YXJnZXQgKi8KLQlmb3IgKGkgPSAwOyBpIDw9IChqIC0g dCk7IGkrKykgeyAvKiBOb3cgY29tcGFyZSAqLwotCSAgICB4ID0gY2tzdHJjbXAoczEscysrLGxl bjEsaWNhc2UpOwotCSAgICBpZiAoIXgpCi0JICAgICAgcmV0dXJuKGkrMSt0KTsKLQl9Ci0gICAg fSBlbHNlIHsJCQkJLyogUmV2ZXJzZSBJbmRleCAqLwotICAgICAgICBpID0gbGVuMiAtIGxlbjE7 CQkvKiBXaGVyZSB0byBzdGFydCBsb29raW5nICovCi0gICAgICAgIGlmIChvdCA+IDApCQkJLyog RmlndXJlIGluIG9mZnNldCBpZiBhbnkgKi8KLQkgIGkgLT0gdDsKLQlmb3IgKGogPSBpOyBqID4g LTE7IGotLSkgewotCSAgICBpZiAoIWNrc3RyY21wKHMxLCZzMltqXSxsZW4xLGljYXNlKSkKLQkg ICAgICByZXR1cm4oaisxKTsKLQl9Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0KLQotLyogIEMg SyBTIFQgUiBTIFQgUiAgLS0gIFBvcnRhYmxlIHJlcGxhY2VtZW50IGZvciBzdHJzdHIoKSAgKi8K LQotLyogIFJldHVybnMgcG9pbnRlciB0byBmaXJzdCBvY2N1cnJlbmNlIG9mIHMxIGluIHMyLCBv ciBOVUxMICovCi0KLWNoYXIgKgotY2tzdHJzdHIoczEsIHMyKSBjaGFyICogczEsICogczI7IHsK LSAgICBpbnQgazsKLSAgICBrID0gY2tpbmRleChzMixzMSwwLDAsMSk7Ci0gICAgcmV0dXJuKChr IDwgMSkgPyBOVUxMIDogJnMxW2stMV0pOwotfQotCi0KLS8qICBCIFIgUyBUIFIgSSBQICAtLSAg U3RyaXAgZW5jbG9zaW5nIGJyYWNlcyBmcm9tIGFyZyBzdHJpbmcsIGluIHBsYWNlLiAqLwotLyoK LSAgQ2FsbCB3aXRoOgotICAgIFBvaW50ZXIgdG8gc3RyaW5nIHRoYXQgY2FuIGJlIHBva2VkLgot ICBSZXR1cm5zOgotICAgIFBvaW50ZXIgdG8gc3RyaW5nIHdpdGhvdXQgZW5jbG9zaW5nIGJyYWNl cy4KLSAgICBJZiBvcmlnaW5hbCBzdHJpbmcgd2FzIG5vdCBicmFjZWQsIHRoaXMgaXMgdGhlIGFy ZyBwb2ludGVyOwotICAgIG90aGVyd2lzZSBpdCBpcyAxICsgdGhlIGFyZyBwb2ludGVyLCB3aXRo IHRoZSBtYXRjaGluZyBjbG9zaW5nCi0gICAgYnJhY2UgemVybydkIG91dC4gIElmIHRoZSBzdHJp bmcgc3RhcnRzIHdpdGggYSBicmFjZSBidXQgZG9lcwotICAgIG5vdCBlbmQgd2l0aCBhIG1hdGNo aW5nIGJyYWNlLCB0aGUgb3JpZ2luYWwgcG9pbnRlciB0byB0aGUgb3JpZ2luYWwKLSAgICBzdHJp bmcgaXMgcmV0dXJuZWQuICBJZiB0aGUgYXJnIHBvaW50ZXIgaXMgTlVMTCwgYSBwb2ludGVyIHRv IGFuCi0gICAgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgotKi8KLSNpZmRlZiBDT01NRU5UCi0K LS8qIFRoaXMgaXMgdGhlIG9yaWdpbmFsIHZlcnNpb24sIGhhbmRsaW5nIG9ubHkgYnJhY2VzICov Ci0KLWNoYXIgKgotYnJzdHJpcChwKSBjaGFyICpwOyB7Ci0gICAgaWYgKCFwKSByZXR1cm4oIiIp OwotICAgIGlmICgqcCA9PSAneycpIHsKLQlpbnQgeDsKLQl4ID0gKGludClzdHJsZW4ocCkgLSAx OwotCWlmIChwW3hdID09ICd9JykgewotCSAgICBwW3hdID0gTlVMOwotCSAgICBwKys7Ci0JfQot ICAgIH0KLSAgICByZXR1cm4ocCk7Ci19Ci0KLSNlbHNlCi0vKiBOZXcgdmVyc2lvbiBoYW5kbGVz IGJyYWNlcyBhbmQgZG91YmxlcXVvdGVzICovCi0vKiBXQVJOSU5HOiB0aGlzIGZ1bmN0aW9uIHdy aXRlcyBpbnRvIGl0cyBhcmd1bWVudCwgaXQgYWx3YXlzIGhhcy4gKi8KLQotY2hhciAqCi1icnN0 cmlwKHApIGNoYXIgKnA7IHsKLSAgICBpZiAoIXApIHJldHVybigiIik7Ci0gICAgaWYgKCpwID09 ICd7JyB8fCAoKnAgPT0gJyInICYmIGRibHF1bykpIHsKLQlpbnQgeDsKLQl4ID0gKGludClzdHJs ZW4ocCkgLSAxOwotCWlmICh4ID4gMCkgewotCSAgICBpZiAoKCpwID09ICd7JyAmJiBwW3hdID09 ICd9JykgfHwKLQkJKCpwID09ICciJyAmJiBwW3hdID09ICciJykpIHsKLQkJaWYgKHggPiAwICYm IHBbeC0xXSAhPSBDTURRKSB7Ci0JCSAgICBwW3hdID0gTlVMOwotCQkgICAgcCsrOwotCQl9Ci0J ICAgIH0KLQl9Ci0gICAgfQotICAgIHJldHVybihwKTsKLX0KLSNlbmRpZiAvKiBDT01NRU5UICov Ci0KLSNpZmRlZiBDT01NRU5UCi0KLS8qIEV2ZW4gbmV3ZXIgZXhwZXJpbWVudGFsIHZlcnNpb24g LS0gYnJlYWtzIG1hbnkgdGhpbmdzICovCi0KLWNoYXIgKgotZm5zdHJpcChwKSBjaGFyICpwOyB7 Ci0gICAgaW50IGksIGosIGssIG4sIGxlbjsKLSAgICBleHRlcm4gaW50IGNtZF9xdW90aW5nOwkJ LyogQmFkIC0gbm8gZXh0ZXJucyBhbGxvd2VkISAqLwotCi0gICAgaWYgKCFwKQotICAgICAgcmV0 dXJuKCIiKTsKLQotICAgIGlmICgqcCA9PSAneycpIHsKLSAgICAgICAgbGVuID0gc3RybGVuKHAp OwotICAgICAgICBuID0gMDsKLQotICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKysgKSB7 Ci0gICAgICAgICAgICBpZiAocFtqXSA9PSAneycgJiYKLQkJKCFjbWRfcXVvdGluZyB8fCBqID09 IDAgfHwgcFtqLTFdICE9IENNRFEpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChuID0gMSwgaSA9 IGorMTsgaSA8IGxlbjsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICBpZiAocFtpXSA9PSAn eycgJiYgKCFjbWRfcXVvdGluZyB8fCBwW2ktMV0gIT0gQ01EUSkpCi0JCSAgICAgIG4rKzsKLSAg ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocFtpXSA9PSAnfScgJiYgKCFjbWRfcXVvdGluZyB8 fCBwW2ktMV0gIT0gQ01EUSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtLW4gPT0g MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IGo7IGsgPCBpIC0gMTsg aysrKQotCQkJICAgICAgcFtrXSA9IHBbaysxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmb3IgKDsgaSA8IGxlbjsgaSsrICkKLQkJCSAgICAgIHBbaS0xXSA9IHBbaSsxXTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBqID0gaSAtIDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICAgICAgaWYgKG4gPT0gMSkgeyAvKiBJbXBsaWVkIHJpZ2h0IGJyYWNlIGF0IGVuZCBvZiBmaWVs ZCAqLwotICAgICAgICAgICAgZm9yIChrID0gajsgayA8IGxlbjsgaysrKQotCSAgICAgIHBba10g PSBwW2srMV07Ci0gICAgICAgICAgICBsZW4gLT0gMTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBp ZiAoKnAgPT0gJyInKSB7Ci0gICAgICAgIGxlbiA9IHN0cmxlbihwKTsKLSAgICAgICAgbiA9IDA7 Ci0KLSAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7Ci0gICAgICAgICAgICBpZiAo cFtqXSA9PSAnIicgJiYKLQkJKCFjbWRfcXVvdGluZyB8fCBqID09IDAgfHwgcFtqLTFdICE9IENN RFEpKSB7Ci0gICAgICAgICAgICAgICAgbisrOwotCi0gICAgICAgICAgICAgICAgZm9yIChpID0g aiArIDE7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAocFtpXSA9PSAn IicgJiYgKCFjbWRfcXVvdGluZyB8fCBwW2ktMV0gIT0gQ01EUSkpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIG4tLTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gajsgayA8 IGkgLSAxOyBrKyspCi0JCQkgIHBba10gPSBwW2srMV07Ci0gICAgICAgICAgICAgICAgICAgICAg ICBmb3IgKDsgaSA8IGxlbjsgaSsrKQotCQkJICBwW2ktMV0gPSBwW2krMV07Ci0gICAgICAgICAg ICAgICAgICAgICAgICBsZW4gLT0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGogPSBpIC0g MTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgICAgICBpZiAobiA9PSAxKSB7IC8qIEltcGxpZWQgZG91YmxlIHF1 b3RlIGF0IGVuZCBvZiBmaWVsZCAqLwotICAgICAgICAgICAgZm9yIChrID0gajsgayA8IGxlbjsg aysrICkKLQkgICAgICBwW2tdID0gcFtrKzFdOwotICAgICAgICAgICAgbGVuIC09IDE7Ci0gICAg ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKHApOwotfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQot I2lmZGVmIENPTU1FTlQKLS8qCi0gIE5vdCB1c2VkIC0tIE5vdGU6IHRoZXNlIG5vdCBvbmx5IHdy aXRlIGludG8gdGhlaXIgYXJnLCBidXQgd3JpdGUgcGFzdAotICBwYXN0IHRoZSBlbmQuCi0qLwot Y2hhciAqCi1icmFjZShmbikgY2hhciAqZm47IHsKLSAgICBpbnQgc3BhY2VzID0gMDsKLSAgICBj aGFyICogcCwgY2gsIGNoMjsKLSAgICBmb3IgKHAgPSBmbjsgKnA7IHArKykgewotCWlmICgqcCA9 PSBTUCkgewotCSAgICBzcGFjZXMgPSAxOwotCSAgICBicmVhazsKLQl9Ci0gICAgfQotICAgIGlm IChzcGFjZXMpIHsKLSAgICAgICAgcCA9IGZuOwotICAgICAgICBjaCA9ICpwOwotICAgICAgICAq cCA9ICd7JzsKLSAgICAgICAgcCsrOwotCi0gICAgICAgIHdoaWxlICgqcCkgewotICAgICAgICAg ICAgY2gyID0gKnA7Ci0gICAgICAgICAgICAqcCA9IGNoOwotICAgICAgICAgICAgY2ggPSBjaDI7 Ci0gICAgICAgICAgICBwKys7Ci0gICAgICAgIH0KLSAgICAgICAgKnAgPSBjaDsKLSAgICAgICAg cCsrOwotICAgICAgICAqcCA9ICd9JzsKLSAgICAgICAgcCsrOwotICAgICAgICAqcCA9ICdcMCc7 Ci0gICAgfQotICAgIHJldHVybihmbik7Ci19Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKiBk IHEgdSBvIHQgZSAgLS0gIFB1dHMgZG91YmxlcXVvdGVzIGFyb3VuZCBhcmcgaW4gcGxhY2UuICov Ci0vKgotICAgQ2FsbCB3aXRoOgotICAgICBQb2ludGVyIHRvIGJ1ZmZlciBhbmQgaXRzIHRvdGFs IGxlbmd0aCBhbmQgZmxhZyA9IDAgdG8gdXNlCi0gICAgIGRvdWJsZXF1b3RlcywgMSB0byB1c2Ug YnJhY2VzLgotICAgUmV0dXJuczoKLSAgICAgTnVtYmVyOiBsZW5ndGggb2YgcmVzdWx0LgotKi8K LWludAotZHF1b3RlKGZuLCBsZW4sIGZsYWcpIGNoYXIgKmZuOyBpbnQgbGVuOyBpbnQgZmxhZzsg ewotICAgIGludCBzcGFjZXMgPSAwLCBrID0gMDsKLSAgICBjaGFyICogcCwgY2gsIGNoMjsKLSAg ICBpZiAoIWZuKQotICAgICAgcmV0dXJuKDApOwotCi0gICAgayA9IHN0cmxlbihmbik7Ci0gICAg Zm9yIChwID0gZm47ICpwOyBwKyspIHsKLQlpZiAoKnAgPT0gU1ApIHsKLSAgICAgICAgICAgIHNw YWNlcyA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo c3BhY2VzKSB7Ci0JaWYgKGsgKyAyID49IGxlbikKLQkgIHJldHVybihrKTsKLSAgICAgICAgcCA9 IGZuOwotICAgICAgICBjaCA9ICpwOwotICAgICAgICAqcCA9IGZsYWcgPyAneycgOiAnIic7Ci0g ICAgICAgIHArKzsKLQotICAgICAgICB3aGlsZSAoKnApIHsKLSAgICAgICAgICAgIGNoMiA9ICpw OwotICAgICAgICAgICAgKnAgPSBjaDsKLSAgICAgICAgICAgIGNoID0gY2gyOwotICAgICAgICAg ICAgcCsrOwotICAgICAgICB9Ci0gICAgICAgICpwID0gY2g7Ci0gICAgICAgIHArKzsKLSAgICAg ICAgKnAgPSBmbGFnID8gJ30nIDogJyInOwotICAgICAgICBwKys7Ci0gICAgICAgICpwID0gJ1ww JzsKLSAgICB9Ci0gICAgcmV0dXJuKGsrMik7Ci19Ci0KLQotLyogIFUgTiBUIEEgQiBJIEYgWSAg LS0tICBVbnRhYmlmeSBzMSBpbnRvIHMyLCBhc3N1bWluZyB0YWJzIGV2ZXJ5IDggc3BhY2UgKi8K LQotaW50Ci11bnRhYmlmeShzMSxzMixtYXgpIGNoYXIgKiBzMSwgKiBzMjsgaW50IG1heDsgewot ICAgIGludCBpLCBqLCBrLCB4LCB6OwotICAgIHggPSBzdHJsZW4oczEpOwotICAgIGZvciAoaSA9 IDAsIGsgPSAwOyBrIDwgeDsgaysrKSB7Ci0JaWYgKHMxW2tdICE9ICdcdCcpIHsKLQkgICAgaWYg KGkgPj0gbWF4LTEpIHsKLQkJczJbbWF4LTFdID0gJ1wwJzsKLQkJcmV0dXJuKC0xKTsKLQkgICAg fQotCSAgICBzMltpKytdID0gczFba107Ci0JICAgIGNvbnRpbnVlOwotCX0KLQl6ID0gOCAtIGkl ODsKLQlpZiAoeiA9PSAwKSB6ID0gODsKLQlmb3IgKGogPSAwOyBqIDwgeiAmJiBpIDwgbWF4OyBq KyspCi0JICBzMltpKytdID0gJyAnOwotICAgIH0KLSAgICBzMltpXSA9ICdcMCc7Ci0gICAgcmV0 dXJuKDApOwotfQotCi0KLS8qICBNIEEgSyBFIEwgSSBTIFQgIC0tLSAgQnJlYWtzIHt7czF9e3My fS4ue3NufX0gaW50byBhbiBhcnJheSBvZiBzdHJpbmdzICovCi0vKgotICBDYWxsIHdpdGg6Ci0g ICAgcyAgICA9IHBvaW50ZXIgdG8gc3RyaW5nIHRvIGJyZWFrIHVwLgotICAgIGxpc3QgPSBhcnJh eSBvZiBzdHJpbmcgcG9pbnRlcnMuCi0gICAgbGVuICA9IG51bWJlciBvZiBlbGVtZW50cyBpbiBh cnJheS4KLSAgTk9URTogVGhlIGFycmF5IG11c3QgYmUgcHJlaW5pdGlhbGl6ZWQgdG8gYWxsIE5V TEwgcG9pbnRlcnMuCi0gIElmIGFueSBhcnJheSBlbGVtZW50IGlzIG5vdCBOVUxMLCBpdCBpcyBh c3N1bWVkIHRvIGhhdmUgYmVlbiBtYWxsb2MnZAotICBhbmQgaXMgdGhlcmVmb3JlIGZyZWVkLiAg RG8gTk9UIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQKLSAgYXJyYXks IG9yIHdpdGggYW4gYXJyYXkgdGhhdCBoYXMgaGFkIGFueSBzdGF0aWMgZWxlbWVudHMgYXNzaWdu ZWQgdG8gaXQuCi0qLwotVk9JRAotbWFrZWxpc3QocyxsaXN0LGxlbikgY2hhciAqIHM7IGNoYXIg Kmxpc3RbXTsgaW50IGxlbjsgewotICAgIGludCBpLCBuLCBxLCBiYyA9IDA7Ci0gICAgY2hhciAq cCA9IE5VTEwsICpzMiA9IE5VTEw7Ci0gICAgZGVidWcoRjExMCwibWFrZWxpc3QgcyIscywwKTsK LSAgICBpZiAoIXMpIHsJCQkJLyogQ2hlY2sgZm9yIG51bGwgb3IgZW1wdHkgc3RyaW5nICovCi0J bGlzdFswXSA9IE5VTEw7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBuID0gc3RybGVuKHMpOwotICAg IGlmIChuID09IDApIHsKLQlsaXN0WzBdID0gTlVMTDsKLQlyZXR1cm47Ci0gICAgfQotICAgIGlm ICgoczIgPSAoY2hhciAqKW1hbGxvYyhuKzEpKSkgewkvKiBTYWZlIGNvcHkgZm9yIHBva2luZyAq LwotCXN0cmNweShzMixzKTsJCQkvKiAobm8gbmVlZCBmb3IgY2tzdHJuY3B5IGhlcmUpICovCi0J cyA9IHMyOwotICAgIH0KLSAgICBzID0gYnJzdHJpcChzKTsJCQkvKiBTdHJpcCBicmFjZXMgKi8K LSAgICBuID0gc3RybGVuKHMpOwkJCS8qIEdldCBsZW5ndGggKi8KLSAgICBpZiAoKnMgIT0gJ3sn KSB7CQkJLyogT3V0ZXIgYnJhY2VzIG9ubHkgKi8KLQlpZiAoKHAgPSAoY2hhciAqKW1hbGxvYyhu KzEpKSkgeyAvKiBTbyBqdXN0IG9uZSBwYXR0ZXJuICovCi0JICAgIHN0cmNweShwLHMpOwkJLyog KG5vIG5lZWQgZm9yIGNrc3RybmNweSBoZXJlKSAqLwotCSAgICBpZiAobGlzdFswXSkKLQkgICAg ICBmcmVlKGxpc3RbMF0pOwotCSAgICBsaXN0WzBdID0gcDsKLQl9Ci0JaWYgKHMyKSBmcmVlKHMy KTsKLQlyZXR1cm47Ci0gICAgfQotICAgIHEgPSAwOwkJCQkvKiBJbm5lciBvbmVzIHRvbyAqLwot ICAgIGkgPSAwOwkJCQkvKiBzbyBhIGxpc3Qgb2YgcGF0dGVybnMuICovCi0gICAgbiA9IDA7Ci0g ICAgd2hpbGUgKCpzICYmIGkgPCBsZW4pIHsKLQlpZiAoKnMgPT0gQ01EUSkgewkJLyogUXVvdGUu Li4gKi8KLQkgICAgcSA9IDE7Ci0JICAgIHMrKzsKLQkgICAgbisrOwotCSAgICBjb250aW51ZTsK LQl9Ci0JaWYgKCpzID09ICd7JyAmJiAhcSkgewkJLyogT3BlbmluZyBicmFjZSAqLwotCSAgICBp ZiAoYmMrKyA9PSAwKSB7CQkvKiBCZWdpbm5pbmcgb2YgYSBncm91cCAqLwotCQlwID0gKytzOwot CQluID0gMDsKLQkgICAgfSBlbHNlIHsJCQkvKiBJdCdzIGEgYnJhY2UgaW5zaWRlIHRoZSBncm91 cCAqLwotCQluKys7Ci0JCXMrKzsKLQkgICAgfQotCSAgICBjb250aW51ZTsKLQl9IGVsc2UgaWYg KCpzID09ICd9JyAmJiAhcSkgewkvKiBDbG9zaW5nIGJyYWNlICovCi0JICAgIGlmICgtLWJjID09 IDApIHsJCS8qIEVuZCBvZiBhIGdyb3VwICovCi0JCSpzKysgPSBOVUw7Ci0JCWRlYnVnKEYxMTEs Im1ha2VsaXN0IGVsZW1lbnQiLHAsaSk7Ci0JCWlmIChsaXN0W2ldKQotCQkgIGZyZWUobGlzdFtp XSk7Ci0JCWlmICgobGlzdFtpXSA9IChjaGFyICopbWFsbG9jKG4rMSkpKSB7Ci0JCSAgICBja3N0 cm5jcHkobGlzdFtpXSxwLG4rMSk7IC8qIE5vdGU6IG4rMSAqLwotCQkgICAgaSsrOwotCQl9Ci0J CXdoaWxlICgqcyA9PSBTUCkgcysrOwotCQlwID0gczsKLQkJbiA9IDA7Ci0JCWNvbnRpbnVlOwot CSAgICB9IGVsc2UgewkJCS8qIFdpdGhpbiBhIGdyb3VwICovCi0JCW4rKzsKLQkJcysrOwotCSAg ICB9Ci0JfSBlbHNlIHsJCQkvKiBSZWd1bGFyIGNoYXJhY3RlciAqLwotCSAgICBxID0gMDsKLQkg ICAgcysrOwotCSAgICBuKys7Ci0JfQotICAgIH0KLSAgICBpZiAoKnAgJiYgaSA8IGxlbikgewkJ LyogTGFzdCBvbmUgKi8KLQlpZiAobGlzdFtpXSkKLQkgIGZyZWUobGlzdFtpXSk7Ci0JaWYgKChs aXN0W2ldID0gKGNoYXIgKiltYWxsb2MobisxKSkpIHsKLQkgICAgY2tzdHJuY3B5KGxpc3RbaV0s cCxuKzEpOwotCSAgICBkZWJ1ZyhGMTExLCJtYWtlbGlzdCBsYXN0IGVsZW1lbnQiLHAsaSk7Ci0J fQotICAgIH0KLSAgICBpKys7CQkJCS8qIENsZWFyIG91dCB0aGUgcmVzdCBvZiB0aGUgbGlzdCAq LwotICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrKSB7Ci0JaWYgKGxpc3RbaV0pCi0JICBmcmVlIChs aXN0W2ldKTsKLQlsaXN0W2ldID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKHMyKSBmcmVlKHMyKTsK LX0KLQotLyoKLSAgIE0gQSBLIEUgUyBUIFIgIC0tICBDcmVhdGVzIGEgZHluYW1pY2FsbHkgYWxs b2NhdGVkIHN0cmluZy4KLQotICAgTWFrZXMgYSBuZXcgY29weSBvZiBzdHJpbmcgcyBhbmQgc2V0 cyBwb2ludGVyIHAgdG8gaXRzIGFkZHJlc3MuCi0gICBIYW5kbGVzIGRlZ2VuZXJhdGUgY2FzZXMs IGxpa2Ugd2hlbiBidWZmZXJzIG92ZXJsYXAgb3IgYXJlIHRoZSBzYW1lLAotICAgb25lIG9yIGJv dGggYXJndW1lbnRzIGFyZSBOVUxMLCBldGMuCi0KLSAgIFRoZSBzb3VyY2Ugc3RyaW5nIGlzIGFz c3VtZWQgdG8gYmUgTlVMLXRlcm1pbmF0ZWQuICBUaGVyZWZvcmUgaXQgY2FuIG5vdAotICAgYmUg YSBVQ1MtMiBzdHJpbmcgb3IgYXJiaXRyYXJ5IGJpbmFyeSBkYXRhLgotCi0gICBUaGUgdGFyZ2V0 IHBvaW50ZXIgbXVzdCBiZSBlaXRoZXIgTlVMTCBvciBlbHNlIGEgcG9pbnRlciB0byBhIHByZXZp b3VzbHkKLSAgIG1hbGxvYydlZCBidWZmZXIuICBJZiBub3QsIGV4cGVjdCBhIGNvcmUgZHVtcCBv ciBzZWdtZW50YXRpb24gZmF1bHQuCi0KLSAgIE5vdGU6IFRoZSBjYWxsZXIgY2FuIHRlbGwgd2hl dGhlciB0aGlzIHJvdXRpbmUgZmFpbGVkIGFzIGZvbGxvd3M6Ci0KLSAgICAgbWFsbG9jKCZwLHEp OwotICAgICBpZiAocSAmICFwKSB7IG1ha2VzdHIoKSBmYWlsZWQgfTsKLQotICAgUmVhbGx5IHRo aXMgcm91dGluZSBzaG91bGQgaGF2ZSByZXR1cm5lZCBhIGxlbmd0aCwgYnV0IHNpbmNlIGl0IGRv ZXNuJ3QKLSAgIHdlIHNldCB0aGUgZ2xvYmFsIHZhcmlhYmxlIG1ha2VzdHJsZW4gdG8gdGhlIGxl bmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZy4KLSovCi1pbnQgbWFrZXN0cmxlbiA9IDA7Ci0KLVZP SUQKLSNpZmRlZiBDS19BTlNJQwotbWFrZXN0cihjaGFyICoqcCwgY29uc3QgY2hhciAqcykKLSNl bHNlCi1tYWtlc3RyKHAscykgY2hhciAqKnAsICpzOwotI2VuZGlmCi0vKiBtYWtlc3RyICovIHsK LSAgICBpbnQgeCA9IDA7Ci0gICAgY2hhciAqcSA9IE5VTEw7Ci0jaWZkZWYgQ0tfQU5TSUMKLSAg ICByZWdpc3RlciBjb25zdCBjaGFyICogczI7Ci0jZWxzZQotICAgIHJlZ2lzdGVyIGNoYXIgKiBz MjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotICAgIHJlZ2lzdGVyIGNoYXIgKiBxMjsKLQotICAg IGlmICgqcCA9PSBzKQkJCS8qIFRoZSB0d28gcG9pbnRlcnMgYXJlIHRoZSBzYW1lLiAqLwotICAg ICAgcmV0dXJuOwkJCQkvKiBEb24ndCBkbyBhbnl0aGluZy4gKi8KLQotICAgIGlmICghcykgewkJ CQkvKiBOZXcgZGVmaW5pdGlvbiBpcyBudWxsPyAqLwotCWlmICgqcCkJCQkJLyogRnJlZSBvbGQg c3RvcmFnZS4gKi8KLQkgIGZyZWUoKnApOwotCSpwID0gTlVMTDsJCQkvKiBSZXR1cm4gbnVsbCBw b2ludGVyLiAqLwotCW1ha2VzdHJsZW4gPSAwOwotCXJldHVybjsKLSAgICB9Ci0gICAgczIgPSBz OwkJCQkvKiBNYXliZSBuZXcgc3RyaW5nIHdpbGwgZml0ICovCi0KLSNpZmRlZiBDT01NRU5UCi0v KgotICBUaGlzIGlzIGEgZmFpcmx5IGJpZyB3aW4sIGFsbG93aW5nIHVzIHRvIHNraXAgdGhlIG1h bGxvYygpIGFuZCBmcmVlIGlmIHRoZQotICBkZXN0aW5hdGlvbiBzdHJpbmcgYWxyZWFkeSBleGlz dHMgYW5kIGlzIG5vdCBzaG9ydGVyIHRoYW4gdGhlIHNvdXJjZSBzdHJpbmcuCi0gIEJ1dCBpdCBk b2Vzbid0IGFsbG93IGZvciBwb3NzaWJsZSBvdmVybGFwIG9mIHNvdXJjZSBhbmQgZGVzdGluYXRp b24uCi0qLwotICAgIGlmICgqcCkgewkJCQkvKiBpbnRvIG9sZCBzdG9yYWdlLi4uICovCi0JY2hh ciAqIHAyID0gKnA7Ci0JY2hhciBjOwotCXdoaWxlIChjID0gKnAyKSB7Ci0JICAgIGlmICghKCpw MisrID0gKnMyKyspKQotCSAgICAgIGJyZWFrOwotCSAgICB4Kys7Ci0JfQotCW1ha2VzdHJsZW4g PSB4OwotCWlmIChjKSByZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotLyog RGlkbid0IGZpdCAqLwotCi0gICAgeCA9IDA7Ci0gICAgd2hpbGUgKCpzMisrKSB4Kys7CQkJLyog R2V0IChyZXN0IG9mKSBsZW5ndGggb2Ygcy4gICovCi0KLSAgICBpZiAoeCA+PSAwKSB7CQkJLyog R2V0IGxlbmd0aCwgZXZlbiBvZiBlbXB0eSBzdHJpbmcuICovCi0JcSA9IG1hbGxvYyh4KzEpOwkJ LyogR2V0IGFuZCBwb2ludCB0byB0ZW1wIHN0b3JhZ2UuICovCi0JaWYgKHEpIHsKLQkgICAgbWFr ZXN0cmxlbiA9IHg7CQkvKiBSZW1lbWJlciBsZW5ndGggZm9yIHN0YXRzICovCi0JICAgIHMyID0g czsJCQkvKiBQb2ludCBiYWNrIHRvIGJlZ2lubmluZyBvZiBzb3VyY2UgKi8KLQkgICAgcTIgPSBx OwkJCS8qIENvcHkgZGVzdCBwb2ludGVyIHRvIGluY3JlbWVudC4uLiAqLwotCSAgICB3aGlsZSAo KCpxMisrID0gKnMyKyspKSA7CS8qIEluc3RlYWQgb2YgY2FsbGluZyBzdHJjcHkoKS4gKi8KLS8q Ci0gIE5vdGU6IEhQIGZsZXhlbGludCBzYXlzIHRoYXQgdGhlIGFib3ZlIGxvb3AgY2FuIHJlc3Vs dCBpbiBjcmVhdGlvbiAoKyspIGFuZAotICBhY2Nlc3MgKCopIG9mIG91dC1vZi1ib3VuZHMgcG9p bnRlcnMuICBJIHJlYWxseSBkb24ndCBzZWUgaXQuCi0qLwotCX0KLSNpZmRlZiBERUJVRwotCWVs c2UgewkJCQkvKiBUaGlzIHdvdWxkIGJlIGEgcmVhbGx5IGJhZCBlcnJvciAqLwotCSAgICBjaGFy IHRtcFsyNF07CQkvKiBTbyBnZXQgYSBnb29kIHJlY29yZCBvZiBpdC4gKi8KLQkgICAgaWYgKHgg PiAyMykgewotCQlja3N0cm5jcHkodG1wLHMsMjApOwotCQlzdHJjcHkodG1wKzIwLCIuLi4iKTsK LQkJdG1wWzIzXSA9IE5VTDsKLQkgICAgfSBlbHNlIHsKLQkJc3RyY3B5KHRtcCxzKTsJCS8qIFdl IGFscmVhZHkgY2hlY2tlZCB0aGUgbGVuZ3RoICovCi0JICAgIH0KLQkgICAgZGVidWcoRjExMCwi TUFLRVNUUiBNQUxMT0MgRkFJTFVSRSAiLHRtcCwwKTsKLQl9Ci0jZW5kaWYgLyogREVCVUcgKi8K LSAgICB9IGVsc2UKLSAgICAgIHEgPSBOVUxMOwkJCQkvKiBMZW5ndGggb2Ygc3RyaW5nIGlzIHpl cm8gKi8KLQotICAgIGlmICgqcCkJCQkJLyogTm93IGZyZWUgdGhlIG9yaWdpbmFsIHN0b3JhZ2Uu ICovCi0gICAgICBmcmVlKCpwKTsKLSAgICAqcCA9IHE7Ci19Ci0KLS8qICBYIE0gQSBLIEUgUyBU IFIgIC0tICBOb24tZGVzdHJ1Y3RpdmUgbWFrZXN0cigpIGlmIHMgaXMgTlVMTC4gICovCi0KLVZP SUQKLSNpZmRlZiBDS19BTlNJQwoteG1ha2VzdHIoY2hhciAqKnAsIGNvbnN0IGNoYXIgKnMpCi0j ZWxzZQoteG1ha2VzdHIocCxzKSBjaGFyICoqcCwgKnM7Ci0jZW5kaWYKLS8qIHhtYWtlc3RyICov IHsKLSAgICBpZiAocykgbWFrZXN0cihwLHMpOwotfQotCi0jaWZuZGVmIFVTRV9NRU1DUFkKLS8q IEMgSyBNIEUgTSBDIFAgWSAgLS0gIFBvcnRhYmxlIChidXQgc2xvdykgbWVtY3B5KCkgKi8KLQot LyogQ29waWVzIG4gYnl0ZXMgZnJvbSBzIHRvIHAsIGFsbG93aW5nIGZvciBvdmVybGFwLiAqLwot LyogRm9yIHVzZSB3aGVuIHJlYWwgbWVtY3B5KCkgbm90IGF2YWlsYWJsZS4gKi8KLQotVk9JRAot Y2ttZW1jcHkocCxzLG4pIGNoYXIgKnAsICpzOyBpbnQgbjsgewotICAgIGNoYXIgKiBxID0gTlVM TDsKLSAgICByZWdpc3RlciBpbnQgaTsKLSAgICBpbnQgeDsKLQotICAgIGlmICghcyB8fCAhcCB8 fCBuIDw9IDAgfHwgcCA9PSBzKQkvKiBWZXJpZnkgYXJncyAqLwotICAgICAgcmV0dXJuOwotICAg IHggPSBwIC0gczsJCQkJLyogQ2hlY2sgZm9yIG92ZXJsYXAgKi8KLSAgICBpZiAoeCA8IDApCi0g ICAgICB4ID0gMCAtIHg7Ci0gICAgaWYgKHggPCBuKSB7CQkJLyogVGhleSBvdmVybGFwICovCi0J cSA9IHA7Ci0JaWYgKCEocCA9IChjaGFyICopbWFsbG9jKG4pKSkJLyogU28gdXNlIGEgdGVtcG9y YXJ5IGJ1ZmZlciAqLwotCSAgcmV0dXJuOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsg aSsrKQkJLyogQ29weSBuIGJ5dGVzICovCi0gICAgICBwW2ldID0gc1tpXTsKLSAgICBpZiAocSkg ewkJCQkvKiBJZiB3ZSB1c2VkIGEgdGVtcG9yYXJ5IGJ1ZmZlciAqLwotCWZvciAoaSA9IDA7IGkg PCBuOyBpKyspCQkvKiBjb3B5IGZyb20gaXQgdG8gZGVzdGluYXRpb24gKi8KLQkgIHFbaV0gPSBw W2ldOwotCWlmIChwKSBmcmVlKHApOwkJCS8qIGFuZCBmcmVlIHRoZSB0ZW1wb3JhcnkgYnVmZmVy ICovCi0gICAgfQotfQotI2VuZGlmIC8qIFVTRV9NRU1DUFkgKi8KLQotCi0vKiAgQyBLIFMgVCBS IEMgTSBQICAtLSAgU3RyaW5nIGNvbXBhcmlzb24gd2l0aCBjYXNlLW1hdHRlcnMgc2VsZWN0aW9u ICovCi0vKgotICBDYWxsIHdpdGggcG9pbnRlcnMgdG8gdGhlIHR3byBzdHJpbmdzLCBzMSBhbmQg czIsIGEgbGVuZ3RoLCBuLAotICBhbmQgYyA9PSAwIGZvciBjYXNlbGVzcyBjb21wYXJpc29uLCBu b256ZXJvIGZvciBjYXNlIG1hdHRlcnMuCi0gIENhbGwgd2l0aCBuID09IC0xIHRvIGNvbXBhcmUg d2l0aG91dCBhIGxlbmd0aCBsaW1pdC4KLSAgQ29tcGFyZXMgdXAgdG8gbiBjaGFyYWN0ZXJzIG9m IHRoZSB0d28gc3RyaW5ncyBhbmQgcmV0dXJuczoKLSAgICAxIGlmIHMxID4gczIKLSAgICAwIGlm IHMxID0gczIKLSAgIC0xIGlmIHMxIDwgczIKLSAgTm90ZTogY2FzZSBoYW5kbGluZyBpcyBvbmx5 IGFzIGdvb2QgYXMgaXN1cHBlcigpIGFuZCB0b2xvd2VyKCkuCi0qLwotaW50Ci1ja3N0cmNtcChz MSxzMixuLGMpIGNoYXIgKnMxLCAqczI7IHJlZ2lzdGVyIGludCBuLCBjOyB7Ci0gICAgcmVnaXN0 ZXIgQ0hBUiB0MSwgdDI7Ci0gICAgaWYgKG4gPT0gMCkgcmV0dXJuKDApOwotICAgIGlmICghczEp IHMxID0gIiI7CQkJLyogV2F0Y2ggb3V0IGZvciBudWxsIHBvaW50ZXJzLiAqLwotICAgIGlmICgh czIpIHMyID0gIiI7Ci0gICAgaWYgKCEqczEpIHJldHVybigqczIgPyAtMSA6IDApOwotICAgIGlm ICghKnMyKSByZXR1cm4oMSk7Ci0gICAgd2hpbGUgKG4tLSkgewotCXQxID0gKENIQVIpICpzMSsr OwkJLyogR2V0IG5leHQgY2hhcmFjdGVyIGZyb20gZWFjaC4gKi8KLQl0MiA9IChDSEFSKSAqczIr KzsKLQlpZiAoIXQxKSByZXR1cm4odDIgPyAtMSA6IDApOwotCWlmICghdDIpIHJldHVybigxKTsK LQlpZiAoIWMpIHsJCQkvKiBJZiBjYXNlIGRvZXNuJ3QgbWF0dGVyICovCi0JICAgIGlmIChpc3Vw cGVyKHQxKSkgdDEgPSB0b2xvd2VyKHQxKTsgLyogQ29udmVydCBjYXNlLiAqLwotCSAgICBpZiAo aXN1cHBlcih0MikpIHQyID0gdG9sb3dlcih0Mik7Ci0JfQotCWlmICh0MSA8IHQyKSByZXR1cm4o LTEpOwkvKiBzMSA8IHMyICovCi0JaWYgKHQxID4gdDIpIHJldHVybigxKTsJCS8qIHMxID4gczIg Ki8KLSAgICB9Ci0gICAgcmV0dXJuKDApOwkJCQkvKiBUaGV5J3JlIGVxdWFsICovCi19Ci0KLS8q ICBDIEsgUyBUIFIgUCBSIEUgIC0tICBDYXNlbGVzcyBzdHJpbmcgcHJlZml4IGNvbXBhcmlzb24g ICovCi0KLS8qIFJldHVybnMgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGNoYXIgaW4gdGhlIDIgc3Ry aW5ncyB0aGF0IGRvZXNuJ3QgbWF0Y2ggKi8KLQotaW50Ci1ja3N0cnByZShzMSxzMikgY2hhciAq czEsICpzMjsgewotICAgIENIQVIgdDEsIHQyOwotICAgIGludCBuID0gMDsKLSAgICBpZiAoIXMx KSBzMSA9ICIiOwotICAgIGlmICghczIpIHMyID0gIiI7Ci0gICAgd2hpbGUgKDEpIHsKLQl0MSA9 IChDSEFSKSAqczErKzsKLQl0MiA9IChDSEFSKSAqczIrKzsKLQlpZiAoIXQxIHx8ICF0MikgcmV0 dXJuKG4pOwotCWlmIChpc3VwcGVyKHQxKSkgdDEgPSB0b2xvd2VyKHQxKTsKLQlpZiAoaXN1cHBl cih0MikpIHQyID0gdG9sb3dlcih0Mik7Ci0JaWYgKHQxICE9IHQyKQotCSAgcmV0dXJuKG4pOwot CW4rKzsKLSAgICB9Ci19Ci0KLSNkZWZpbmUgR0xPQkJJTkcKLQotLyogIEMgSyBNIEEgVCBDIEgg IC0tICBNYXRjaCBhIHN0cmluZyBhZ2FpbnN0IGEgcGF0dGVybiAgKi8KLS8qCi0gIENhbGwgd2l0 aDoKLSAgICBwYXR0ZXJuIHRvIGJlIG1hdGNoZWQuCi0gICAgc3RyaW5nIHRvIGxvb2sgZm9yIHRo ZSBwYXR0ZXJuIGluLgotICAgIGljYXNlIGlzIDEgaWYgY2FzZS1zZW5zaXRpdmUsIDAgb3RoZXJ3 aXNlLgotICAgIG9wdHMgaXMgYSBiaXRtYXNrOgotICAgICAgQml0IDAgKD0xKToKLQkxID0gTWF0 Y2ggc3RyaW5ncyBzdGFydGluZyB3aXRoICcuJwotCTAgPSBEb24ndCBtYXRjaCB0aGVtICh1c2Vk IHdpdGggVU5JWCBmaWxlbmFtZXMpLgotICAgICAgQml0IDEgKD0yKToKLQkxID0gRmlsZSBnbG9i YmluZyAoZGlyc2VwcyBhcmUgZmVuY2VzKTsKLQkwID0gRGlyc2VwcyBhcmUgbm90IGZlbmNlcy4K LSAgICAgIEJpdCAyICg9NCk6Ci0JMSA9IEFsbG93IF4gYW5kICQgYW5jaG9ycyBhdCBiZWdpbm5p bmcgYW5kIGVuZCBvZiBwYXR0ZXJuLgotCTAgPSBEb24ndCBhbGxvdyB0aGVtIChub3JtYWwgY2Fz ZSBmb3IgZmlsZW5hbWUgbWF0Y2hpbmcpLgotICAgICAgQml0IDMgKGFuZCBiZXlvbmQpOiBVbmRl ZmluZWQuCi0gIFdvcmtzIG9ubHkgd2l0aCBOVUwtdGVybWluYXRlZCBzdHJpbmdzLgotICBQYXR0 ZXJuIG1heSBjb250YWluIGFueSBudW1iZXIgb2YgPyBhbmQvb3IgKi4KLSAgSWYgQ0tSRUdFWCBp cyBkZWZpbmVkLCBhbHNvIFthYmNdLCBbYS16XSwgYW5kL29yIHtzdHJpbmcsc3RyaW5nLC4uLn0u Ci0gIChOb3RlOiBSRUdFWCBpcyBhIG1pc25vbWVyLCBzZWUgYmVsb3cuKQotCi0gIFJldHVybnM6 Ci0gICAgMCBpZiBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggcGF0dGVybiwKLSAgICA+PSAxLCB0aGUg MS1iYXNlZCBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nIHdoZXJlIHRoZSBtYXRjaCB3YXMgZm91bmQu Ci0KLSAgVG8gYmUgZG9uZToKLSAgICBGaW5kIGEgd2F5IHRvIGlkZW50aWZ5IHRoZSBwaWVjZSBv ZiB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlZCB0aGUgcGF0dGVybiwKLSAgICBhcyBpbiBTbm9ib2wg IkxJTkUgKFBBVCAuIFJFU1VMVCkiLiAgVGhpcyBpcyBub3cgcGFydGlhbGx5IGRvbmUgYnkKLSAg ICBzZXR0aW5nIG1hdGNocG9zIGFuZCBtYXRjaGVuZCAoZXhjZXB0IG1hdGNoZW5kIG5lZWRzIHNv bWUgdHVuaW5nKS4gIEJ1dAotICAgIHRoZXNlIGFyZSB1c2VsZXNzIHVubGVzcyBhIGNvcHkgb2Yg dGhlIHN0cmluZyBpcyBrZXB0LCBvciBhIGNvcHkgb2YgdGhlCi0gICAgbWF0Y2hpbmcgcGFydCBp cyBtYWRlLiAgQnV0IHRoYXQgd291bGQgYmUgdG9vIGNvc3RseSBpbiBwZXJmb3JtYW5jZSAtLQot ICAgIHRoaXMgcm91dGluZSBoYXMgdG8gYmUgZmFzdCBiZWNhdXNlIGl0J3MgdXNlZCBmb3Igd2ls ZGNhcmQgZXhwYW5zaW9uLgotCi0gIE5vdGU6Ci0gICAgUGF0dGVybnMgYXJlIG5vdCB0aGUgc2Ft ZSBhcyByZWd1bGFyIGV4cHJlc3Npb25zLCBpbiB3aGljaCAnKicgbWVhbnMKLSAgICAwIG9yIG1v cmUgcmVwZXRpdGlvbnMgb2YgdGhlIHByZWNlZGluZyBpdGVtLiAgRm9yIGV4YW1wbGUgImEqYiIg YXMgYQotICAgIHBhdHRlcm4gbWF0Y2hlcyBhbnkgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggJ2En IGFuZCBlbmRzIHdpdGggJ2InOyBhcyBhCi0gICAgcmVndWxhciBleHByZXNzaW9uIGl0IG1hdGNo ZXMgYW55IHN0cmluZyBvZiB6ZXJvIG9yIG1vcmUgYSdzIGZvbGxvd2VkIGJ5Ci0gICAgb25lIGIu ICBSZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBlc3BlY2lhbGx5IHVzZWZ1bCBpbiBtYXRjaGluZyBz dHJpbmdzIG9mCi0gICAgKHNheSkgZGlnaXRzLCBvciBsZXR0ZXJzLCBlLmcuICJbMC05XSoiIG1h dGNoZXMgYW55IHN0cmluZyBvZiBkaWdpdHMuCi0gICAgU28gZmFyLCBLZXJtaXQgZG9lc24ndCBk byB0aGlzLgotKi8KLXN0YXRpYyBjaGFyICogbXlwYXQgPSBOVUxMOwkJLyogRm9yIHJld3JpdGlu ZyBwYXR0ZXJuICovCi1zdGF0aWMgaW50IG1hdGNocG9zID0gMDsKLWludCBtYXRjaGVuZCA9IDA7 Ci1zdGF0aWMgaW50IG1hdGNoZGVwdGggPSAwOwotc3RhdGljIGludCBzdHJpbmdwb3MgPSAwOwot c3RhdGljIGNoYXIgKiBvc3RyaW5nID0gTlVMTDsKLQotI2RlZmluZSBNQVRDSFJFVFVSTih4LHkp IHsgcmM9eTsgd2hlcmU9eDsgZ290byB4Y2ttYXRjaDsgfQotc3RhdGljIGNoYXIgKiBsYXN0cGF0 ID0gTlVMTDsKLQotc3RhdGljIGludCB4eGZsYWcgPSAwOwkJCS8qIEdsb2JhbCBiYWlsb3V0IGZs YWcgZm9yIGNrbWF0Y2goKSAqLwotCi1pbnQKLWlzcGF0dGVybihzKSBjaGFyICogczsgewotICAg IGludCBxdW90ZSA9IDAsIHNiZmxhZyA9IDAsIHNiID0gMCwgY2JmbGFnID0gMCwgY2IgPSAwOwot ICAgIAotICAgIGNoYXIgYyA9IDA7Ci0gICAgaWYgKCpzID09ICdeJykgcmV0dXJuKDEpOwotICAg IHdoaWxlICgoYyA9ICpzKyspKSB7Ci0JaWYgKHF1b3RlKSB7Ci0JICAgIHF1b3RlID0gMDsKLQkg ICAgY29udGludWU7Ci0JfQotCWlmIChjID09ICdcXCcpIHsKLQkgICAgcXVvdGUgPSAxOwotCSAg ICBjb250aW51ZTsKLQl9Ci0JaWYgKGMgPT0gJyonKSByZXR1cm4oMSk7Ci0JaWYgKGMgPT0gJz8n KSByZXR1cm4oMSk7Ci0JLyogVW5xdW90ZWQgYnJhY2tldHMgb3IgYnJhY2VzIG11c3QgbWF0Y2gg Ki8KLQlpZiAoYyA9PSAnWycpIHsgc2JmbGFnKys7IHNiKys7IGNvbnRpbnVlOyB9Ci0JaWYgKGMg PT0gJ10nKSB7IHNiLS07IGNvbnRpbnVlOyB9Ci0JaWYgKGMgPT0gJ3snKSB7IGNiZmxhZysrOyBj YisrOyBjb250aW51ZTsgfQotCWlmIChjID09ICd9JykgeyBjYi0tOyBjb250aW51ZTsgfQotCWlm ICghKnMgJiYgYyA9PSAnJCcpIHJldHVybigxKTsKLSAgICB9Ci0gICAgcmV0dXJuKHNiZmxhZyB8 fCBjYmZsYWcpOwotfQotCi1pbnQKLWNrbWF0Y2gocGF0dGVybiwgc3RyaW5nLCBpY2FzZSwgb3B0 cykgY2hhciAqcGF0dGVybiwqc3RyaW5nOyBpbnQgaWNhc2UsIG9wdHM7IHsKLSAgICBpbnQgcSA9 IDAsIGkgPSAwLCBrID0gLTEsIHgsIGZsYWcgPSAwOwotICAgIGludCByYyA9IDA7CQkJCS8qIFJl dHVybiBjb2RlICovCi0gICAgaW50IGhhdmVzdGFyID0gMDsKLSAgICBpbnQgd2hlcmUgPSAtMTsK LSAgICBDSEFSIGNwOwkJCQkvKiBDdXJyZW50IGNoYXJhY3RlciBmcm9tIHBhdHRlcm4gKi8KLSAg ICBDSEFSIGNzOwkJCQkvKiBDdXJyZW50IGNoYXJhY3RlciBmcm9tIHN0cmluZyAqLwotICAgIGNo YXIgKiBwYXRzdGFydDsJCQkvKiBTdGFydCBvZiBwYXR0ZXJuICovCi0gICAgaW50IHBsZW4sIGRv dCwgZ2xvYmJpbmcsIHhzdGFyID0gMDsKLSAgICBpbnQgYnJvbmx5ID0gMDsJCQkvKiBXaG9sZSBw YXR0ZXJuIGlzIHthLGIsYywuLi59ICovCi0KLSAgICBkZWJ1ZyhGMTExLCJDS01BVENIIEVOVFJZ IHBhdCBvcHQiLHBhdHRlcm4sb3B0cyk7Ci0gICAgZGVidWcoRjExMSwiQ0tNQVRDSCBFTlRSWSBz dHIgZGVwIixzdHJpbmcsbWF0Y2hkZXB0aCk7Ci0gICAgLyogZGVidWcoRjEwMSwiQ0tNQVRDSCBF TlRSWSBpY2FzZSIsIiIsaWNhc2UpOyAqLwotCi0gICAgZ2xvYmJpbmcgPSBvcHRzICYgMjsKLQot ICAgIGlmICghc3RyaW5nKSBzdHJpbmcgPSAiIjsKLSAgICBpZiAoIXBhdHRlcm4pIHBhdHRlcm4g PSAiIjsKLQotICAgIGlmICghKnBhdHRlcm4pIHsJCQkvKiBFbXB0eSBwYXR0ZXJuIG1hdGNoZXMg YW55dGhpbmcgKi8KLQltYXRjaGRlcHRoKys7CQkJLyogKGl0IHdhc24ndCBpbmNyZW1lbnRlZCB5 ZXQpICovCi0JTUFUQ0hSRVRVUk4oMCwxKTsKLSAgICB9IGVsc2UgaWYgKCEqc3RyaW5nKSB7Ci0J TUFUQ0hSRVRVUk4oMCwwKTsKLSAgICB9Ci0gICAgcGF0c3RhcnQgPSBwYXR0ZXJuOwkJCS8qIFJl bWVtYmVyIGJlZ2lubmluZyBvZiBwYXR0ZXJuICovCi0KLSAgICBpZiAobWF0Y2hkZXB0aCA9PSAw KSB7CQkvKiBUb3AtbGV2ZWwgY2FsbD8gKi8KLQl4eGZsYWcgPSAwOwotCXN0cmluZ3BvcyA9IDA7 CQkJLyogUmVzZXQgaW5kaWNlcyBldGMuICovCi0JbWF0Y2hwb3MgPSAwOwotCW1hdGNoZW5kID0g MDsKLQlvc3RyaW5nID0gc3RyaW5nOwotCWxhc3RwYXQgPSBwYXR0ZXJuOwotCWlmICgqcGF0dGVy biA9PSAneycpCQkvKiBFbnRpcmUgcGF0dGVybiBpcyB7YSxiLmN9ICovCi0JICBicm9ubHkgPSAx OwkJCS8qIE1heWJlICovCi0JZG90ID0gKG9wdHMgJiAxKSB8fAkJLyogTWF0Y2ggbGVhZGluZyBk b3QgKGlmIGZpbGUpICovCi0JICAgICgob3B0cyAmIDIpID09IDApIHx8CS8qIGFsd2F5cyBpZiBu b3QgZmlsZSAqLwotCSAgICAocGF0dGVyblswXSA9PSAnLicpOwkvKiBvciBpZiBwYXR0ZXJuIHN0 YXJ0cyB3aXRoICcuJyAqLwotCi0JcGxlbiA9IHN0cmxlbihwYXR0ZXJuKTsJCS8qIExlbmd0aCBv ZiBwYXR0ZXJuICovCi0vKiBUaGlzIHdvdWxkIGJlIHVzZWQgaW4gY2FsY3VsYXRpbmcgbGVuZ3Ro IG9mIG1hdGNoaW5nIHNlZ21lbnQgKi8KLQlpZiAocGxlbiA+IDApCQkJLyogVXNlcidzIHBhdHRl cm4gZW5kcyB3aXRoICcqJyAqLwotCSAgaWYgKHBhdHRlcm5bcGxlbiAtIDFdID09ICcqJykKLQkg ICAgeHN0YXIgPSAxOwotCWlmIChwYXR0ZXJuWzBdID09ICcqJykgewkvKiBVc2VyJ3MgcGF0dGVy biBzdGFydHMgd2l0aCAnKicgKi8KLQkgICAgbWF0Y2hwb3MgPSAxOwotCSAgICBkZWJ1ZyhGMTEx LCJDS01BVENIIDEiLHN0cmluZywgbWF0Y2hwb3MpOwotCX0KLQlpZiAob3B0cyAmIDQpIHsJCQkv KiBeLi4kIGFsbG93ZWQgKHRvcCBsZXZlbCBvbmx5KSAqLwotCSAgICAvKiBSZXdyaXRlIHBhdHRl cm4gdG8gYWNjb3VudCBmb3IgXi4uJCBhbmNob3JpbmcuLi4gKi8KLQotCSAgICBpZiAobXlwYXQp IGZyZWUobXlwYXQpOwkvKiBHZXQgc3BhY2UgZm9yICIqcGF0dGVybioiICovCi0JICAgIG15cGF0 ID0gKGNoYXIgKiltYWxsb2MocGxlbiArIDQpOwotCSAgICBpZiAobXlwYXQpIHsJCS8qIEdvdCBz cGFjZT8gKi8KLQkJY2hhciAqIHMgPSBwYXR0ZXJuLCAqIHAgPSBteXBhdDsgLyogU2V0IHdvcmtp bmcgcG9pbnRlcnMgKi8KLQkJaWYgKCpzID09ICdeJykgewkvKiBGaXJzdCBzb3VyY2UgY2hhciBp cyBeICovCi0JCSAgICBzKys7CQkvKiBzbyBza2lwIHBhc3QgaXQgKi8KLQkJfSBlbHNlIGlmICgq cyAhPSAnKicpIHsJLyogb3RoZXJ3aXNlICovCi0JCSAgICAqcCsrID0gJyonOwkJLyogcHJlcGVu ZCAnKicgdG8gcGF0dGVybiAqLwotCQl9Ci0JCXdoaWxlICgqcykgewkJLyogQ29weSByZXN0IG9m IHBhdHRlcm4gKi8KLQkJICAgIGlmICghKihzKzEpKSB7CS8qIEZpbmFsIHBhdHRlcm4gY2hhcmFj dGVyPyAqLwotCQkJaWYgKCpzICE9ICckJykgeyAvKiBJZiBpdCdzIG5vdCAnJCcgKi8KLQkJCSAg ICAqcCsrID0gKnM7CS8qIENvcHkgaXQgaW50byB0aGUgcGF0dGVybiAqLwotCQkJICAgIGlmICgq cysrICE9ICcqJykgLyogQW5kIGlmIGl0J3MgYWxzbyBub3QgJyonICovCi0JCQkgICAgICAqcCsr ID0gJyonOyAvKiBhcHBlbmQgJyonLiAqLwotCQkJfQotCQkJYnJlYWs7CQkvKiBEb25lICovCi0J CSAgICB9IGVsc2UJCS8qIE5vdCBmaW5hbCBjaGFyYWN0ZXIgKi8KLQkJICAgICAgKnArKyA9ICpz Kys7CS8qIEp1c3QgY29weSBpdCAqLwotCQl9Ci0JCSpwID0gTlVMOwkJLyogVGVybWluYXRlIHRo ZSBuZXcgcGF0dGVybiAqLwotCQlwYXR0ZXJuID0gbXlwYXQ7CS8qIE1ha2UgdGhlIHN3aXRjaCAq LwotCSAgICB9Ci0JICAgIGRlYnVnKEYxMTAsIkNLTUFUQ0ggSU5JVCBwYXQiLHBhdHRlcm4sMCk7 Ci0JfQotICAgIH0KLSAgICBtYXRjaGRlcHRoKys7CQkJLyogTm93IGluY3JlbWVudCBjYWxsIGRl cHRoICovCi0KLSNpZmRlZiBVTklYCi0gICAgaWYgKCFkb3QpIHsJCQkJLyogRm9yIFVOSVggZmls ZSBnbG9iYmluZyAqLwotCWlmICgqc3RyaW5nID09ICcuJyAmJiAqcGF0dGVybiAhPSAnLicgJiYg IW1hdGNoZG90KSB7Ci0JICAgIGlmICgKLSNpZmRlZiBDS1JFR0VYCi0JCSpwYXR0ZXJuICE9ICd7 JyAmJiAqcGF0dGVybiAhPSAnWycKLSNlbHNlCi0JCTEKLSNlbmRpZiAvKiBDS1JFR0VYICovCi0J CSkgewotCQlkZWJ1ZyhGMTEwLCJja21hdGNoIHNraXAiLHN0cmluZywwKTsKLQkJTUFUQ0hSRVRV Uk4oMSwwKTsKLQkgICAgfQotCX0KLSAgICB9Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgIHdoaWxl ICgxKSB7Ci0JaysrOwotCWNwID0gKnBhdHRlcm47CQkJLyogQ2hhcmFjdGVyIGZyb20gcGF0dGVy biAqLwotCWNzID0gKnN0cmluZzsJCQkvKiBDaGFyYWN0ZXIgZnJvbSBzdHJpbmcgKi8KLQotI2lm ZGVmIENPTU1FTlQKLQlkZWJ1ZyhGMDAwLCJDS01BVENIIHBhdCBjcCIscGF0dGVybixjcCk7Ci0J ZGVidWcoRjAwMCwiQ0tNQVRDSCBzdHIgY3MiLHN0cmluZyxjcyk7Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotCi0JaWYgKCFjcykgewkJCS8qIEVuZCBvZiBzdHJpbmcgLSBkb25lLiAqLwotCSAgICB4 ID0gKCFjcCB8fCAoY3AgPT0gJyonICYmICEqKHBhdHRlcm4rMSkpKSA/IDEgOiAwOwotCSAgICBp ZiAoeCkgewotCQlpZiAoIW1hdGNocG9zKSB7Ci0JCSAgICBtYXRjaHBvcyA9IHN0cmluZ3BvczsK LQkJICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0ggQSIsc3RyaW5nLCBtYXRjaHBvcyk7Ci0JCX0KLQkJ bWF0Y2hlbmQgPSBzdHJpbmdwb3M7Ci0JCU1BVENIUkVUVVJOKDIsbWF0Y2hwb3MpOwotCSAgICB9 Ci0JICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0ggWkVSTyBkIixzdHJpbmcsIG1hdGNocG9zKTsKLQkg ICAgbWF0Y2hwb3MgPSAwOwotCSAgICBNQVRDSFJFVFVSTigxNixtYXRjaHBvcyk7Ci0JfQotICAg ICAgICBpZiAoIWljYXNlKSB7CQkJLyogSWYgaWdub3JpbmcgY2FzZSAqLwotCSAgICBpZiAoaXN1 cHBlcihjcCkpCQkvKiBjb252ZXJ0IGJvdGggdG8gbG93ZXJjYXNlLiAqLwotCSAgICAgIGNwID0g dG9sb3dlcihjcCk7Ci0JICAgIGlmIChpc3VwcGVyKGNzKSkKLQkgICAgICBjcyA9IHRvbG93ZXIo Y3MpOwotICAgICAgICB9Ci0JaWYgKHEpIHsJCQkvKiBUaGlzIGNoYXJhY3RlciB3YXMgcXVvdGVk ICovCi0JICAgIGRlYnVnKEYwMDAsIkNLTUFUQ0ggUVVPVEVEIixwYXR0ZXJuLGNwKTsKLQkgICAg cSA9IDA7CQkJLyogVHVybiBvZmYgcXVvdGUgZmxhZyAqLwotCi0JICAgIGlmIChjcyA9PSBjcCkg ewkJLyogQ29tcGFyZSBkaXJlY3RseSAqLwotCQlpZiAoIW1hdGNocG9zKSB7CS8qIE1hdGNoZXMg Ki8KLQkJICAgIG1hdGNocG9zID0gc3RyaW5ncG9zOwotCQkgICAgZGVidWcoRjExMSwiQ0tNQVRD SCBcXCBuZXcgbWF0Y2giLHN0cmluZywgbWF0Y2hwb3MpOwotCQl9Ci0JCXBhdHRlcm4rKzsKLQkg ICAgfSBlbHNlIHsJCQkvKiBEb2Vzbid0IG1hdGNoICovCi0JCXBhdHRlcm4gPSBsYXN0cGF0Owkv KiBCYWNrIHVwIHRoZSBwYXR0ZXJuICovCi0JCW1hdGNocG9zID0gMDsKLQkJZGVidWcoRjExMSwi Q0tNQVRDSCBcXCBubyBtYXRjaCIscGF0dGVybiwgbWF0Y2hwb3MpOwotCSAgICB9Ci0JICAgIHN0 cmluZysrOwotCSAgICBzdHJpbmdwb3MrKzsKLQkgICAgY29udGludWU7Ci0JfQotCWlmIChjcCA9 PSBDTURRICYmICFxKSB7CQkvKiBRdW90ZSBpbiBwYXR0ZXJuICovCi0JICAgIGRlYnVnKEYwMDAs IkNLTUFUQ0ggUVVPVEUiLHBhdHRlcm4sY3ApOwotCSAgICBxID0gMTsJCQkvKiBTZXQgZmxhZyAq LwotCSAgICBwYXR0ZXJuKys7CQkJLyogQWR2YW5jZSB0byBuZXh0IHBhdHRlcm4gY2hhcmFjdGVy ICovCi0JICAgIGNvbnRpbnVlOwkJCS8qIGFuZCBjb250aW51ZS4gKi8KLQl9Ci0JaWYgKGNzICYm IGNwID09ICc/JykgewkJLyogJz8nIG1hdGNoZXMgYW55IGNoYXIgKi8KLQkgICAgaWYgKCFtYXRj aHBvcykgewotCQltYXRjaHBvcyA9IHN0cmluZ3BvczsKLQkJZGVidWcoRjExMSwiQ0tNQVRDSCBE IixzdHJpbmcsIG1hdGNocG9zKTsKLQkgICAgfQotCSAgICBkZWJ1ZyhGMTEwLCJDS01BVENIID8g cGF0IixwYXR0ZXJuLDApOwotCSAgICBkZWJ1ZyhGMTEwLCJDS01BVENIID8gc3RyIixzdHJpbmcs MCk7Ci0JICAgIHBhdHRlcm4rKzsKLQkgICAgc3RyaW5nKys7Ci0JICAgIHN0cmluZ3BvcysrOwot CSAgICBjb250aW51ZTsKLSNpZmRlZiBDS1JFR0VYCi0JfSBlbHNlIGlmIChjcCA9PSAnWycpIHsJ CS8qIEhhdmUgYnJhY2tldCAqLwotCSAgICBpbnQgcSA9IDA7CQkJLyogTXkgb3duIHByaXZhdGUg cSAqLwotCSAgICBjaGFyICogcHNhdmUgPSBOVUxMOwkvKiBhbmQgYmFja3VwIHBvaW50ZXIgKi8K LQkgICAgQ0hBUiBjbGlzdFsyNTZdOwkJLyogQ2hhcmFjdGVyIGxpc3QgZnJvbSBicmFja2V0cyAq LwotCSAgICBDSEFSIGMsIGMxLCBjMjsKLQotCSAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKysp CS8qIG1lbXNldCgpIGV0YyBub3QgcG9ydGFibGUgKi8KLQkgICAgICBjbGlzdFtpXSA9IE5VTDsK LQkgICAgcHNhdmUgPSArK3BhdHRlcm47CQkvKiBXaGVyZSBwYXR0ZXJuIHN0YXJ0cyAqLwotCSAg ICBkZWJ1ZyhGMTExLCJDS01BVENIIFtdICIscGF0dGVybi0xLCBtYXRjaHBvcyk7Ci0JICAgIGZv ciAoZmxhZyA9IDA7ICFmbGFnOyBwYXR0ZXJuKyspIHsgLyogTG9vcCB0aHJ1IHBhdHRlcm4gKi8K LQkJYyA9IChDSEFSKSpwYXR0ZXJuOwkvKiBDdXJyZW50IGNoYXIgKi8KLQkJZGVidWcoRjAwMCwi Pj4+IHBhdHRlcm4gY2hhciIsIiIsYyk7Ci0JCWlmIChxKSB7CQkvKiBRdW90ZSB3aXRoaW4gYnJh Y2tldHMgKi8KLQkJICAgIHEgPSAwOwotCQkgICAgY2xpc3RbY10gPSAxOwotCQkgICAgY29udGlu dWU7Ci0JCX0KLQkJaWYgKCFpY2FzZSkJCS8qIENhc2UgY29udmVyc2lvbiAqLwotCQkgIGlmIChp c3VwcGVyKGMpKQotCQkgICAgYyA9IHRvbG93ZXIoYyk7Ci0JCXN3aXRjaCAoYykgewkJLyogSGFu ZGxlIHVucXVvdGVkIGNoYXJhY3RlciAqLwotCQkgIGNhc2UgTlVMOgkJLyogRW5kIG9mIHN0cmlu ZyAqLwotCQkgICAgTUFUQ0hSRVRVUk4oNCwwKTsJLyogTm8gbWF0Y2hpbmcgJ10nIHNvIGZhaWwg Ki8KLQkJICBjYXNlIENNRFE6CQkvKiBOZXh0IGNoYXIgaXMgcXVvdGVkICovCi0JCSAgICBxID0g MTsJCS8qIFNldCBmbGFnICovCi0JCSAgICBjb250aW51ZTsJCS8qIGFuZCBjb250aW51ZS4gKi8K LQkJICBjYXNlICctJzoJCS8qIEEgcmFuZ2UgaXMgc3BlY2lmaWVkICovCi0JCSAgICBjMSA9IChw YXR0ZXJuID4gcHNhdmUpID8gKENIQVIpKihwYXR0ZXJuLTEpIDogTlVMOwotCQkgICAgYzIgPSAo Q0hBUikqKHBhdHRlcm4rMSk7IC8qIElHTk9SRSBPVVQtT0YtQk9VTkRTIFdBUk5JTkcgKi8KLQkJ ICAgIGlmIChjMiA9PSAnXScpIGMyID0gTlVMOyAvKiAoaXQgY2FuJ3QgaGFwcGVuKSAqLwotCQkg ICAgaWYgKGMxID09IE5VTCkgYzEgPSBjMjsKLQkJICAgIGZvciAoYyA9IGMxOyBjIDw9IGMyOyBj KyspIHsKLQkJCWNsaXN0W2NdID0gMTsKLQkJCWlmICghaWNhc2UpIHsKLQkJCSAgICBpZiAoaXNs b3dlcihjKSkgewotCQkJCWNsaXN0W3RvdXBwZXIoYyldID0gMTsKLQkJCSAgICB9IGVsc2UgaWYg KGlzdXBwZXIoYykpIHsKLQkJCQljbGlzdFt0b2xvd2VyKGMpXSA9IDE7Ci0JCQkgICAgfQotCQkJ fQotCQkgICAgfQotCQkgICAgY29udGludWU7Ci0JCSAgY2FzZSAnXSc6CQkvKiBFbmQgb2YgYnJh Y2tldGVkIHNlcXVlbmNlICovCi0JCSAgICBmbGFnID0gMTsJCS8qIERvbmUgd2l0aCBGT1IgbG9v cCAqLwotCQkgICAgYnJlYWs7CQkvKiBDb21wYXJlIHdoYXQgd2UgaGF2ZSAqLwotCQkgIGRlZmF1 bHQ6CQkvKiBKdXN0IGEgY2hhciAqLwotCQkgICAgY2xpc3RbY10gPSAxOwkvKiBSZWNvcmQgaXQg Ki8KLQkJICAgIGlmICghaWNhc2UpIHsKLQkJCWlmIChpc2xvd2VyKGMpKSB7Ci0JCQkgICAgY2xp c3RbdG91cHBlcihjKV0gPSAxOwotCQkJfSBlbHNlIGlmIChpc3VwcGVyKGMpKSB7Ci0JCQkgICAg Y2xpc3RbdG9sb3dlcihjKV0gPSAxOwotCQkJfQotCQkgICAgfQotCQkgICAgY29udGludWU7Ci0J CX0KLQkgICAgfQotCSAgICBkZWJ1ZyhGMDAwLCI+Pj4gY3MiLCIiLGNzKTsKLQkgICAgZGVidWco RjEwMSwiPj4+IGNsaXN0W2NzXSIsIiIsY2xpc3RbY3NdKTsKLQkgICAgZGVidWcoRjAwMCwiPj4+ IHN0cmluZyIsc3RyaW5nLCpzdHJpbmcpOwotCi0JICAgIGlmICghY2xpc3RbKHVuc2lnbmVkKWNz XSkgewkvKiBObyBtYXRjaD8gKi8KLQkJaWYgKCEqc3RyaW5nKSB7CQkvKiBUaGlzIGNsYXVzZSAx NiBKdW4gMjAwNSAqLwotCQkgICAgTUFUQ0hSRVRVUk4oNSwwKTsJLyogTm9wZSwgZG9uZS4gKi8K LQkJfQotLyoKLSAgV2UgbmVlZCB0byBmYWlsIGhlcmUgaWYgdGhlIFtjbGlzdF0gaXMgbm90IGFs bG93ZWQgdG8gZmxvYXQuCi0gIFRoZSBbY2xpc3RdIGlzIG5vdCBhbGxvd2VkIHRvIGZsb2F0IGlm IGl0IGlzIG5vdCBwcmVjZWRlZAotICBieSBhbiBhc3RlcmlzaywgcmlnaHQ/ICAzMCBEZWMgMjAw NS4KLSovCi0JCWlmICghaGF2ZXN0YXIpIHsKLQkJICAgIE1BVENIUkVUVVJOKDUwMCwwKTsKLQkJ fQotCQlzdHJpbmcrKzsJCS8qIEZyb20gaGVyZSB0byBlbmQgYWRkZWQgMjAwNS82LzE1ICovCi0J CXN0cmluZ3BvcysrOwotCQlwYXR0ZXJuID0gbGFzdHBhdDsJLyogQmFjayB1cCBwYXR0ZXJuICov Ci0JCWsgPSBja21hdGNoKHBhdHRlcm4sc3RyaW5nLGljYXNlLG9wdHMpOwotCQlpZiAoeHhmbGFn KSBNQVRDSFJFVFVSTigwLDApOwotCQlpZiAoIW1hdGNocG9zICYmIGsgPiAwKQotCQkgIG1hdGNo cG9zID0gc3RyaW5ncG9zOwotCQlNQVRDSFJFVFVSTig1LCAoKnN0cmluZykgPyBtYXRjaHBvcyA6 IDApOwotCSAgICB9Ci0JICAgIGlmICghbWF0Y2hwb3MpIHsKLQkJbWF0Y2hwb3MgPSBzdHJpbmdw b3M7Ci0JCWRlYnVnKEYxMTEsIkNLTUFUQ0ggW10gbWF0Y2giLHN0cmluZywgbWF0Y2hwb3MpOwot CSAgICB9Ci0JICAgIHN0cmluZysrOwkJCS8qIFllcywgYWR2YW5jZSBzdHJpbmcgcG9pbnRlciAq LwotCSAgICBzdHJpbmdwb3MrKzsKLQkgICAgY29udGludWU7CQkJLyogYW5kIGdvIG9uLiAqLwot CX0gZWxzZSBpZiAoY3AgPT0gJ3snKSB7CQkvKiBCcmFjZXMgZW5jbG9zaW5nIGxpc3Qgb2Ygc3Ry aW5ncyAqLwotCSAgICBjaGFyICogcCwgKiBzLCAqIHMyLCAqIGJ1ZiA9IE5VTEw7Ci0JICAgIGlu dCBuLCBiYyA9IDA7Ci0JICAgIGludCBsZW4gPSAwOwotCSAgICBkZWJ1ZyhGMTExLCJDS01BVENI IHt9ICIsc3RyaW5nLCBtYXRjaHBvcyk7Ci0JICAgIGZvciAocCA9IHBhdHRlcm4rKzsgKnA7IHAr KykgewotCQlpZiAoKnAgPT0gJ3snKSBiYysrOwotCQlpZiAoKnAgPT0gJ30nKSBiYy0tOwotCQlp ZiAoYmMgPCAxKSBicmVhazsKLQkgICAgfQotCSAgICBpZiAoYmMgIT0gMCkgewkJLyogQnJhY2Vz IGRvbid0IG1hdGNoICovCi0JCU1BVENIUkVUVVJOKDYsMCk7CS8qIEZhaWwgKi8KLQkgICAgfSBl bHNlIHsJCQkvKiBCcmFjZXMgZG8gbWF0Y2ggKi8KLQkJaW50IHEgPSAwLCBkb25lID0gMDsKLQkJ bGVuID0gKnAgPyBzdHJsZW4ocCsxKSA6IDA7IC8qIExlbmd0aCBvZiByZXN0IG9mIHBhdHRlcm4g Ki8KLQkJaWYgKGxlbikKLQkJICBicm9ubHkgPSAwOwotCQlpZiAoYnJvbmx5ICYmIChtYXRjaGRl cHRoICE9IDEpKQotCQkgIGJyb25seSA9IDA7Ci0JCW4gPSBwIC0gcGF0dGVybjsJICAgIC8qIFNp emUgb2YgbGlzdCBpbiBicmFjZXMgKi8KLQkJaWYgKChidWYgPSAoY2hhciAqKW1hbGxvYyhuKzEp KSkgeyAvKiBDb3B5IHNvIHdlIGNhbiBwb2tlIGl0ICovCi0JCSAgICBjaGFyICogdHAgPSBOVUxM OwotCQkgICAgaW50IGssIHNvZmFyOwotCQkgICAgY2tzdHJuY3B5KGJ1ZixwYXR0ZXJuLG4rMSk7 Ci0JCSAgICBzb2ZhciA9IHN0cmluZyAtIG9zdHJpbmcgLSBtYXRjaHBvcyArIDE7Ci0JCSAgICBp ZiAoc29mYXIgPCAwKSBzb2ZhciA9IDA7Ci0JCSAgICBkZWJ1ZyhGMTExLCJDS01BVENIIC4uIHN0 cmluZyIsc3RyaW5nLHNvZmFyKTsKLQkJICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0ggLi4gb3N0cmlu ZyIsb3N0cmluZyxzb2Zhcik7Ci0JCSAgICBuID0gMDsKLQkJICAgIGZvciAocyA9IHMyID0gYnVm OyAxOyBzKyspIHsgLyogTG9vcCB0aHJvdWdoIHNlZ21lbnRzICovCi0JCQluKys7Ci0JCQlpZiAo cSkgewkvKiBUaGlzIGNoYXIgaXMgcXVvdGVkICovCi0JCQkgICAgcSA9IDA7Ci0JCQkgICAgaWYg KCEqcykKLQkJCSAgICAgIGRvbmUgPSAxOwotCQkJICAgIGNvbnRpbnVlOwotCQkJfQotCQkJaWYg KCpzID09IENNRFEgJiYgIXEpIHsJLyogUXVvdGUgbmV4dCBjaGFyICovCi0JCQkgICAgcSA9IDE7 Ci0JCQkgICAgY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoISpzIHx8ICpzID09ICcsJykgewkvKiBF bmQgb2YgdGhpcyBzZWdtZW50ICovCi0JCQkgICAgaW50IHRwbGVuID0gMDsKLQkJCSAgICBpZiAo ISpzKQkvKiBJZiBlbmQgb2YgYnVmZmVyICovCi0JCQkgICAgICBkb25lID0gMTsJLyogdGhlbiBl bmQgb2YgbGFzdCBzZWdtZW50ICovCi0JCQkgICAgKnMgPSBOVUw7CS8qIE92ZXJ3cml0ZSBjb21t YSB3aXRoIE5VTCAqLwotCQkJICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0gge30gc2VnbWVudCIsczIs ZG9uZSk7Ci0JCQkgICAgdHBsZW4gPSBuICsgbGVuICsgc29mYXIgKyAyOwotCQkJICAgIGlmICgh KnMyKSB7CS8qIEVtcHR5IHNlZ21lbnQsIG5vIGFkdmFuY2VtZW50ICovCi0JCQkJayA9IDA7Ci0J CQkgICAgfSBlbHNlIGlmICgodHAgPSAoY2hhciAqKW1hbGxvYyh0cGxlbikpKSB7Ci0JCQkJaW50 IHNhdnBvcywgb3B0czI7Ci0JCQkJY2hhciAqIHBwOwotCQkJCXBwID0gbWF0Y2hwb3MgPiAwID8K LQkJCQkgICAgJm9zdHJpbmdbbWF0Y2hwb3MtMV0gOgotCQkJCSAgICBvc3RyaW5nOwotCQkJCWlm IChicm9ubHkpIHsKLQkJCQkgICAgaWYgKG1hdGNocG9zID4gMCkKLQkJCQkgICAgICBja3N0cm5j cHkodHAscHAsc29mYXIrMSk7Ci0JCQkJICAgIGVsc2UKLQkJCQkgICAgICBja3N0cm5jcHkodHAs cHAsc29mYXIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJICAgIHRwWzBdID0gJyonOwotCQkJCSAgICB0 cFsxXSA9IE5VTDsKLQkJCQkgICAgaWYgKG1hdGNocG9zID4gMCkKLQkJCQkgICAgICBja3N0cm5j cHkoJnRwWzFdLHBwLHNvZmFyKzEpOwotCQkJCSAgICBlbHNlCi0JCQkJICAgICAgY2tzdHJuY3B5 KCZ0cFsxXSxwcCxzb2Zhcik7Ci0JCQkJfQotCQkJCWNrc3RybmNhdCh0cCxzMix0cGxlbik7IC8q IEN1cnJlbnQgc2VnbWVudCAqLwotCQkJCWNrc3RybmNhdCh0cCxwKzEsdHBsZW4pOyAvKiByZXN0 IG9mIHBhdHRlcm4gKi8KLQotCQkJCWRlYnVnKEYxMDEsIkNLTUFUQ0gge30gbWF0Y2hwb3MiLCIi LG1hdGNocG9zKTsKLQkJCQlzYXZwb3MgPSBtYXRjaHBvczsKLQkJCQltYXRjaHBvcyA9IDA7Ci0j aWZkZWYgREVCVUcKLQkJCQlpZiAoZGVibG9nKSB7Ci0JCQkJICAgIGRlYnVnKEYxMTEsIkNLTUFU Q0gge30gdHAiLHRwLG1hdGNocG9zKTsKLQkJCQkgICAgZGVidWcoRjExMSwiQ0tNQVRDSCB7fSBz dHJpbmciLAotCQkJCQkgIHN0cmluZyxtYXRjaHBvcyk7Ci0JCQkJICAgIGRlYnVnKEYxMTEsIkNL TUFUQ0gge30gb3N0cmluZyIsCi0JCQkJCSAgb3N0cmluZyxzYXZwb3MpOwotCQkJCX0KLSNlbmRp ZiAvKiBERUJVRyAqLwotCQkJCS8qIElmIHNlZ21lbnQgc3RhcnRzIHdpdGggZG90ICovCi0JCQkJ LyogdGhlbiBzZXQgbWF0Y2hkb3Qgb3B0aW9uLi4gKi8KLQkJCQlvcHRzMiA9IG9wdHM7Ci0JCQkJ aWYgKCpzMiA9PSAnLicpIG9wdHMyIHw9IDE7Ci0JCQkJZGVidWcoRjExMSwiQ0tNQVRDSCB7fSBy ZWN1cnNpbmciLHMyLG9wdHMyKTsKLQkJCQlrID0gY2ttYXRjaCh0cCwKLQkJCQkJICAgIChzdHJp bmcgPiBvc3RyaW5nKSA/Ci0JCQkJCSAgICAmb3N0cmluZ1tzYXZwb3MtMV0gOiBzdHJpbmcsCi0J CQkJCSAgICBpY2FzZSxvcHRzMik7Ci0jaWZkZWYgREVCVUcKLQkJCQlpZiAoZGVibG9nKSB7Ci0J CQkJICAgIGRlYnVnKEYxMDEsIkNLTUFUQ0gge30gayIsIiIsayk7Ci0JCQkJICAgIGRlYnVnKEYx MDEsIkNLTUFUQ0gge30gc2F2cG9zIiwiIixzYXZwb3MpOwotCQkJCX0KLSNlbmRpZiAvKiBERUJV RyAqLwotCQkJCWZyZWUodHApOwotCQkJCXRwID0gTlVMTDsKLQkJCQlpZiAoeHhmbGFnKSBNQVRD SFJFVFVSTigwLDApOwotCQkJCWlmIChrID09IDApIHsKLQkJCQkgICAgbWF0Y2hwb3MgPSBzYXZw b3M7Ci0JCQkJfQotCQkJCWlmIChrID4gMCkgeyAvKiBJZiBpdCBtYXRjaGVkIHdlJ3JlIGRvbmUg Ki8KLQkJCQkgICAgTUFUQ0hSRVRVUk4oNyxrKTsKLQkJCQl9Ci0JCQkgICAgfSBlbHNlIHsJLyog TWFsbG9jIGZhaWx1cmUgKi8KLQkJCQlNQVRDSFJFVFVSTigxNCwwKTsKLQkJCSAgICB9Ci0JCQkg ICAgaWYgKGspIHsJLyogU3VjY2Vzc2Z1bCBjb21wYXJpc29uICovCi0JCQkJaWYgKCFtYXRjaHBv cykgewotCQkJCSAgICBtYXRjaHBvcyA9IHN0cmluZ3BvczsKLQkJCQkgICAgZGVidWcoRjExMSwi Q0tNQVRDSCB7fSBtYXRjaCIsCi0JCQkJCSAgc3RyaW5nLCBtYXRjaHBvcyk7Ci0JCQkJfQotCQkJ CXN0cmluZyArPSBuLTE7IC8qIEFkdmFuY2UgcG9pbnRlcnMgKi8KLQkJCQlwYXR0ZXJuID0gcCsx OwotCQkJCWJyZWFrOwotCQkJICAgIH0KLQkJCSAgICBpZiAoZG9uZSkJLyogSWYgbm8gbW9yZSBz ZWdtZW50cyAqLwotCQkJICAgICAgYnJlYWs7CS8qIGJyZWFrIG91dCBvZiBzZWdtZW50IGxvb3Au ICovCi0JCQkgICAgczIgPSBzKzE7CS8qIE90aGVyd2lzZSwgb24gdG8gbmV4dCBzZWdtZW50ICov Ci0JCQkgICAgbiA9IDA7Ci0JCQl9Ci0JCSAgICB9Ci0JCSAgICBmcmVlKGJ1Zik7Ci0JCX0KLQkg ICAgfQotI2VuZGlmIC8qIENLUkVHRVggKi8KLQl9IGVsc2UgaWYgKGNwID09ICcqJykgewkJLyog UGF0dGVybiBjaGFyIGlzIGFzdGVyaXNrICovCi0JICAgIGNoYXIgKiBwc2F2ZTsKLQkgICAgY2hh ciAqIHAsICogcyA9IE5VTEw7CS8qIG1lYW5pbmcgbWF0Y2ggYW55dGhpbmcgKi8KLQkgICAgaW50 IGssIG4sIHEgPSAwOwotCSAgICBoYXZlc3RhcisrOwkJCS8qIFRoZSByZXN0IGNhbiBmbG9hdCAq LwotCSAgICB3aGlsZSAoKnBhdHRlcm4gPT0gJyonKQkvKiBDb2xsYXBzZSBzdWNjZXNzaXZlIGFz dGVyaXNrcyAqLwotCSAgICAgIHBhdHRlcm4rKzsKLQkgICAgcHNhdmUgPSBwYXR0ZXJuOwkJLyog Rmlyc3Qgbm9uLWFzdGVyaXNrIGFmdGVyIGFzdGVyaXNrICovCi0JICAgIGxhc3RwYXQgPSBwYXR0 ZXJuIC0gMTsJLyogRGl0dG8sIGdsb2JhbCAqLwotCSAgICBkZWJ1ZyhGMTExLCJDS01BVENIICog IixzdHJpbmcsbWF0Y2hwb3MpOwotCSAgICBmb3IgKG4gPSAwLCBwID0gcHNhdmU7ICpwOyBwKyss bisrKSB7IC8qIEZpbmQgbmV4dCBtZXRhIGNoYXIgKi8KLQkJaWYgKCFxKSB7Ci0JCSAgICBpZiAo KnAgPT0gJz8nIHx8ICpwID09ICcqJyB8fCAqcCA9PSBDTURRCi0jaWZkZWYgQ0tSRUdFWAotCQkJ fHwgKnAgPT0gJ1snIHx8ICpwID09ICd7JwotI2VuZGlmIC8qIENLUkVHRVggKi8KLQkJCSkKLQkJ ICAgICAgYnJlYWs7Ci0jaWZkZWYgR0xPQkJJTkcKLQkJICAgIGlmIChnbG9iYmluZwotI2lmZGVm IFVOSVhPUk9TSwotCQkJJiYgKnAgPT0gJy8nCi0jZWxzZQotI2lmZGVmIFZNUwotCQkJJiYgKCpw ID09ICcuJyB8fCAqcCA9PSAnXScgfHwKLQkJCSAgICAqcCA9PSAnPCcgfHwgKnAgPT0gJz4nIHx8 Ci0JCQkgICAgKnAgPT0gJzonIHx8ICpwID09ICc7JykKLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVy YWwKLQkJCSYmICpwID09ICc6JwotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0JCQkmJiAqcCA9PSAn PicKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRp ZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLQkJCSkKLQkJICAgICAgYnJlYWs7 Ci0jZW5kaWYgLyogR0xPQkJJTkcgKi8KLQkJfQotCSAgICB9Ci0JICAgIGRlYnVnKEYxMTEsIkNL TUFUQ0ggKiBuIHN0cmluZyIsc3RyaW5nLG4pOwotCSAgICBkZWJ1ZyhGMTExLCJDS01BVENIICog biBwYXR0cm4iLHBhdHRlcm4sbik7Ci0JICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0ggKiBuIHAiLHAs bik7Ci0JICAgIGlmIChuID4gMCkgewkJLyogTGl0ZXJhbCBzdHJpbmcgdG8gbWF0Y2ggICovCi0J CXMgPSAoY2hhciAqKW1hbGxvYyhuKzEpOwotCQlpZiAocykgewotCQkgICAgY2tzdHJuY3B5KHMs cHNhdmUsbisxKTsgLyogQ29weSBjdXogbm8gcG9raW5nIG9yaWdpbmFsICovCi0JCSAgICBpZiAo KnApIHsKLQkJCWsgPSBja2luZGV4KHMsc3RyaW5nLDAsMCxpY2FzZSk7IC8qIDEtYmFzZWQgaW5k ZXgoKSAqLwotCQkJZGVidWcoRjExMCwiQ0tNQVRDSCAqIEluZGV4KCkgc3RyaW5nIixzdHJpbmcs MCk7Ci0JCQlkZWJ1ZyhGMTEwLCJDS01BVENIICogSW5kZXgoKSBwYXR0cm4iLHMsMCk7Ci0JCQlk ZWJ1ZyhGMTAxLCJDS01BVENIICogSW5kZXgoKSByZXN1bHQiLCIiLGspOwotCQkgICAgfSBlbHNl IHsJCS8qIFN0cmluZyBpcyByaWdodC1hbmNob3JlZCAqLwotCQkJayA9IGNraW5kZXgocyxzdHJp bmcsLTEsMSxpY2FzZSk7IC8qIHJpbmRleCgpICovCi0JCQlkZWJ1ZyhGMTExLCJDS01BVENIICog UmluZGV4KCkiLHN0cmluZyxrKTsKLQkJCWRlYnVnKEYxMTAsIkNLTUFUQ0ggKiBSaW5kZXgoKSBw YXR0cm4iLHMsMCk7Ci0JCQlkZWJ1ZyhGMTAxLCJDS01BVENIICogUmluZGV4KCkgcmVzdWx0Iiwi IixrKTsKLQkJICAgIH0KLQkJICAgIGZyZWUocyk7Ci0JCSAgICBpZiAoayA8IDEpIHsKLQkJCU1B VENIUkVUVVJOKDgsMCk7Ci0JCSAgICB9Ci0JCSAgICBkZWJ1ZyhGMTExLCJDS01BVENIICogc3Ry aW5ncG9zIG1hdGNocG9zIiwKLQkJCSAgY2tpdG9hKHN0cmluZ3BvcyksIG1hdGNocG9zKTsKLQkJ ICAgIGlmICghbWF0Y2hwb3MpIHsKLQkJCW1hdGNocG9zID0gc3RyaW5nIC0gb3N0cmluZyArIGs7 Ci0JCQlkZWJ1ZyhGMTExLCJDS01BVENIICogbmV3IG1hdGNoICIsIHN0cmluZywgbWF0Y2hwb3Mp OwotCQkgICAgfQotCQkgICAgc3RyaW5nICs9IGsgKyBuIC0gMTsKLQkJICAgIHN0cmluZ3BvcyAr PSBrICsgbiAtIDE7Ci0JCSAgICBwYXR0ZXJuICs9IG47Ci0JCSAgICBkZWJ1ZyhGMTExLCJDS01B VENIICogbmV3IHN0cmluZyIsIHN0cmluZywgc3RyaW5ncG9zKTsKLQkJICAgIGRlYnVnKEYxMTAs IkNLTUFUQ0ggKiBuZXcgcGF0dHJuIiwgcGF0dGVybiwgMCk7Ci0JCSAgICBjb250aW51ZTsKLQkJ fQotCSAgICB9IGVsc2UgaWYgKCEqcCkgewkJLyogQXN0ZXJpc2sgYXQgZW5kIG1hdGNoZXMgdGhl IHJlc3QgKi8KLQkJaWYgKCFnbG9iYmluZykgewkvKiAoaWYgbm90IGZpbGVuYW1lIGdsb2JiaW5n KSAqLwotCQkgICAgaWYgKCFtYXRjaHBvcykgewotCQkJbWF0Y2hwb3MgPSBzdHJpbmdwb3M7Ci0J CQlkZWJ1ZyhGMTExLCJDS01BVENIICokICIsc3RyaW5nLCBtYXRjaHBvcyk7Ci0JCSAgICB9Ci0J CSAgICBtYXRjaGVuZCA9IHN0cmluZ3BvczsKLQkJICAgIE1BVENIUkVUVVJOKDksbWF0Y2hwb3Mp OwotCQl9Ci0jaWZkZWYgR0xPQkJJTkcKLQkJd2hpbGUgKCpzdHJpbmcpIHsKLQkJICAgIGlmIChn bG9iYmluZwkvKiBGaWxlc3BlYyBzbyBkb24ndCBjcm9zcyBmaWVsZHMgKi8KLSNpZmRlZiBPUzIK LQkJCSYmICpzdHJpbmcgPT0gJy8nIHx8ICpzdHJpbmcgPT0gJ1xcJyB8fAotCQkJKnN0cmluZyA9 PSAnOicKLSNlbHNlCi0jaWZkZWYgVU5JWE9ST1NLCi0JCQkmJiAqc3RyaW5nID09ICcvJwotI2Vs c2UKLSNpZmRlZiBWTVMKLQkJCSYmICgqc3RyaW5nID09ICcuJyB8fCAqc3RyaW5nID09ICddJyB8 fAotCQkJICAgICpzdHJpbmcgPT0gJzwnIHx8ICpzdHJpbmcgPT0gJz4nIHx8Ci0JCQkgICAgKnN0 cmluZyA9PSAnOicgfHwgKnN0cmluZyA9PSAnOycpCi0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFs Ci0JCQkmJiAqc3RyaW5nID09ICc6JwotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0JCQkmJiAqc3Ry aW5nID09ICc+JwotI2Vsc2UKLQkJCSYmICpzdHJpbmcgPT0gJy8nIC8qIChjYXRjaC1hbGwpICov Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYg LyogVk1TICovCi0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0jZW5kaWYgLyogT1MyICovCi0JCQkp IHsKLQkJCW1hdGNoZW5kID0gc3RyaW5ncG9zOwotCQkJTUFUQ0hSRVRVUk4oMTAsMCk7Ci0JCSAg ICB9Ci0JCSAgICBpZiAoIW1hdGNocG9zKSB7Ci0JCQltYXRjaHBvcyA9IHN0cmluZ3BvczsKLQkJ CWRlYnVnKEYxMTEsIkNLTUFUQ0ggKiQgbWF0Y2giLHN0cmluZywgbWF0Y2hwb3MpOwotCQkgICAg fQotCQkgICAgc3RyaW5nKys7Ci0JCSAgICBzdHJpbmdwb3MrKzsKLQkJfQotI2VuZGlmIC8qIEdM T0JCSU5HICovCi0JCWlmICghbWF0Y2hwb3MpIHsKLQkJICAgIG1hdGNocG9zID0gc3RyaW5ncG9z OwotCQkgICAgZGVidWcoRjExMSwiQ0tNQVRDSCAqKiBtYXRjaCIsc3RyaW5nLCBtYXRjaHBvcyk7 Ci0JCX0KLQkJbWF0Y2hlbmQgPSBzdHJpbmdwb3M7Ci0JCU1BVENIUkVUVVJOKDExLG1hdGNocG9z KTsKLQotCSAgICB9IGVsc2UgewkJCS8qIEEgbWV0YSBjaGFyIGZvbGxvd3MgYXN0ZXJpc2sgKi8K LQkJaWYgKCEqc3RyaW5nKQotCQkgIE1BVENIUkVUVVJOKDE3LCBtYXRjaHBvcyA9IDApOwotI2lm ZGVmIENPTU1FTlQKLQkJLyogVGhpcyBpcyBtb3JlIGVsZWdhbnQgYnV0IGl0IGRvZXNuJ3Qgd29y ay4gKi8KLQkJcC0tOwotCQlzdHJpbmcrKzsKLQkJc3RyaW5ncG9zKys7Ci0JCWsgPSBja21hdGNo KHAsc3RyaW5nLGljYXNlLG9wdHMpOwotI2Vsc2UKLQkJd2hpbGUgKCpzdHJpbmcgJiYgKChrID0g Y2ttYXRjaChwLHN0cmluZyxpY2FzZSxvcHRzKSkgPCAxKSkgewotCQkgICAgaWYgKHh4ZmxhZykg TUFUQ0hSRVRVUk4oMCwwKTsKLQkJICAgIHN0cmluZysrOwotCQkgICAgc3RyaW5ncG9zKys7Ci0J CX0KLQkJaWYgKCEqc3RyaW5nICYmIGsgPCAxKSB7Ci0vKgotICBEZWZpbml0ZWx5IG5vIG1hdGNo IHNvIHdlIHNldCBhIGdsb2JhbCBmbGFnIHRvIGluaWJpdCBmdXJ0aGVyIGJhY2tpbmcgdXAKLSAg YW5kIHJldHJ5aW5nIGJ5IHByZXZpb3VzIGluY2FybmF0aW9ucywgc2luY2UgdGhleSBkb24ndCBz ZWUgdGhhdCB0aGUgc3RyaW5nCi0gIGFuZC9vciBwYXR0ZXJuLCB3aGljaCBhcmUgb24gdGhlIHN0 YWNrLCBoYXZlIGJlZW4gZXhoYXVzdGVkIGF0IHRoaXMgbGV2ZWwuCi0qLwotCQkgICAgeHhmbGFn Kys7Ci0JCSAgICBkZWJ1ZyhGMTExLCJDS01BVENIIERFRklOSVRFTFkgTk8gTUFUQ0giLHAsayk7 Ci0JCSAgICBNQVRDSFJFVFVSTig5MSwwKTsKLQkJfQotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQkJ ZGVidWcoRjExMSwiQ0tNQVRDSCAqPG1ldGE+IGsiLHN0cmluZywgayk7Ci0JCWlmICghbWF0Y2hw b3MgJiYgayA+IDApIHsKLQkJICAgIG1hdGNocG9zID0gc3RyaW5ncG9zOwotCQkgICAgZGVidWco RjExMSwiQ0tNQVRDSCAqPG1ldGE+IG1hdGNocG9zIixzdHJpbmcsIG1hdGNocG9zKTsKLQkJfQot CQlNQVRDSFJFVFVSTigxMiwgKCpzdHJpbmcpID8gbWF0Y2hwb3MgOiAwKTsKLQkgICAgfQotCX0g ZWxzZSBpZiAoY3MgPT0gY3ApIHsKLQkgICAgcGF0dGVybisrOwotCSAgICBzdHJpbmcrKzsKLQkg ICAgc3RyaW5ncG9zKys7Ci0JICAgIGlmICghbWF0Y2hwb3MpIHsKLQkJbWF0Y2hwb3MgPSBzdHJp bmdwb3M7Ci0JCWRlYnVnKEYxMTEsIkNLTUFUQ0ggY3M9Y3AiLHN0cmluZywgbWF0Y2hwb3MpOwot CSAgICB9Ci0JICAgIGNvbnRpbnVlOwotCX0gZWxzZSB7Ci0JICAgIE1BVENIUkVUVVJOKDEzLDAp OwotCX0KLSAgICB9Ci0gIHhja21hdGNoOgotICAgIHsKLSNpZmRlZiBERUJVRwotCWNoYXIgbXNn YnVmWzI1Nl07Ci0jZW5kaWYgLyogREVCVUcgKi8KLQlpZiAobWF0Y2hkZXB0aCA+IDApCi0JICBt YXRjaGRlcHRoLS07Ci0JbWF0Y2hwb3MgPSByYzsKLSNpZmRlZiBERUJVRwotCWNrbWFreG1zZyht c2didWYsMjU2LAotCQkgICJDS01BVENIIFJFVFVSTlsiLAotCQkgIGNraXRvYSh3aGVyZSksCi0J CSAgIl0gbWF0Y2hwb3M9IiwKLQkJICBja2l0b2EobWF0Y2hwb3MpLAotCQkgICIgbWF0Y2hkZXB0 aD0iLAotCQkgIGNraXRvYShtYXRjaGRlcHRoKSwKLQkJICAiIHBhdD0iLHBhdHRlcm4sCi0JCSAg IiBzdHJpbmc9IixzdHJpbmcsTlVMTCxOVUxMCi0JCSAgKTsKLQlkZWJ1ZyhGMTEwLG1zZ2J1Zixz dHJpbmcsMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQlyZXR1cm4ocmMpOwotICAgIH0KLX0KLQot Ci0jaWZkZWYgQ0tGTE9BVAotLyogIEkgUyBGIEwgTyBBIFQgIC0tIFZlcmlmeSB0aGF0IGFyZyBy ZXByZXNlbnRzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyICovCi0KLS8qCi0gIFBvcnRhYmxlIHJl cGxhY2VtZW50IGZvciBhdG9mKCksIHN0cnRvZCgpLCBzY2FuZigpLCBldGMuCi0KLSAgQ2FsbCB3 aXRoOgotICAgIHMgPSBwb2ludGVyIHRvIHN0cmluZwotICAgIGZsYWcgPT0gMCBtZWFucyBlbnRp cmUgc3RyaW5nIG11c3QgYmUgYSAoZmxvYXRpbmctcG9pbnRpbmcpIG51bWJlci4KLSAgICBmbGFn ICE9IDAgbWVhbnMgdG8gdGVybWluYXRlIHNjYW4gb24gZmlyc3QgY2hhcmFjdGVyIHRoYXQgaXMg bm90IGxlZ2FsLgotCi0gIFJldHVybnM6Ci0gICAgMSBpZiByZXN1bHQgaXMgYSBsZWdhbCBudW1i ZXI7Ci0gICAgMiBpZiByZXN1bHQgaGFzIGEgZnJhY3Rpb25hbCBwYXJ0OwotICAgIDAgaWYgbm90 IG9yIGlmIHN0cmluZyBlbXB0eS4KLQotICBTaWRlIGVmZmVjdDoKLSAgICBTZXRzIGdsb2JhbCBm bG9hdHZhbCB0byBmbG9hdGluZy1wb2ludCB2YWx1ZSBpZiBzdWNjZXNzZnVsLgotCi0gIE51bWJl ciBuZWVkIG5vdCBjb250YWluIGEgZGVjaW1hbCBwb2ludCAtLSBpbnRlZ2VyIGlzIHN1YmNhc2Ug b2YgZmxvYXQuCi0gIFNjaWVudGlmaWMgbm90YXRpb24gbm90IHN1cHBvcnRlZC4KLSovCi1DS0ZM T0FUIGZsb2F0dmFsID0gMC4wOwkJCS8qIEZvciByZXR1cm5pbmcgdmFsdWUgKi8KLQotaW50Ci1p c2Zsb2F0KHMsZmxhZykgY2hhciAqczsgaW50IGZsYWc7IHsKLSAgICBpbnQgc3RhdGUgPSAwOwot ICAgIGludCBzaWduID0gMDsKLSAgICBjaGFyIGM7Ci0gICAgQ0tGTE9BVCBkID0gMC4wLCBmID0g MC4wOwotCi0gICAgaWYgKCFzKSByZXR1cm4oMCk7Ci0gICAgaWYgKCEqcykgcmV0dXJuKDApOwot Ci0gICAgd2hpbGUgKGlzc3BhY2UoKnMpKSBzKys7Ci0KLSAgICBpZiAoKnMgPT0gJy0nKSB7CQkJ LyogSGFuZGxlIG9wdGlvbmFsIHNpZ24gKi8KLQlzaWduID0gMTsKLQlzKys7Ci0gICAgfSBlbHNl IGlmICgqcyA9PSAnKycpCi0gICAgICBzKys7Ci0gICAgd2hpbGUgKChjID0gKnMrKykpIHsJCS8q IEhhbmRsZSBudW1lcmljIHBhcnQgKi8KLQlzd2l0Y2ggKHN0YXRlKSB7Ci0JICBjYXNlIDA6CQkJ LyogTWFudGlzc2EuLi4gKi8KLQkgICAgaWYgKGlzZGlnaXQoYykpIHsKLQkJZiA9IGYgKiAxMC4w ICsgKENLRkxPQVQpKGMgLSAnMCcpOwotCQljb250aW51ZTsKLQkgICAgfSBlbHNlIGlmIChjID09 ICcuJykgewotCQlzdGF0ZSA9IDE7Ci0JCWQgPSAxLjA7Ci0JCWNvbnRpbnVlOwotCSAgICB9Ci0J ICAgIGlmIChmbGFnKQkJCS8qIE5vdCBkaWdpdCBvciBwZXJpb2QgKi8KLQkgICAgICBnb3RvIGRv bmU7CQkvKiBicmVhayBpZiBmbGFnICE9IDAgKi8KLQkgICAgcmV0dXJuKDApOwkJCS8qIG90aGVy d2lzZSBmYWlsLiAqLwotCSAgY2FzZSAxOgkJCS8qIEZyYWN0aW9uLi4uICovCi0JICAgIGlmIChp c2RpZ2l0KGMpKSB7Ci0JCWQgKj0gMTAuMDsKLQkJZiArPSAoQ0tGTE9BVCkoYyAtICcwJykgLyBk OwotCQljb250aW51ZTsKLQkgICAgfQotCSAgZGVmYXVsdDoKLQkgICAgaWYgKGZsYWcpCQkJLyog SWxsZWdhbCBjaGFyYWN0ZXIgKi8KLQkgICAgICBnb3RvIGRvbmU7CQkvKiBCcmVhayAqLwotCSAg ICByZXR1cm4oMCk7CQkJLyogb3IgZmFpbCwgZGVwZW5kaW5nIG9uIGZsYWcgKi8KLQl9Ci0gICAg fQotICBkb25lOgotICAgIGlmIChzaWduKSBmID0gMC4wIC0gZjsJCS8qIEFwcGx5IHNpZ24gdG8g cmVzdWx0ICovCi0gICAgZmxvYXR2YWwgPSBmOwkJCS8qIFNldCByZXN1bHQgKi8KLSAgICByZXR1 cm4oZCA/IDIgOiAxKTsJCQkvKiBTdWNjZWVkICovCi19Ci0KLS8qCi0gIGMgayByIG8gdSBuIGQg IC0tICBSb3VuZHMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgb3IgYW4gaW50ZWdlci4KLQotICBm cG51bToKLSAgICBGbG9hdGluZy1wb2ludCBudW1iZXIgdG8gcm91bmQuCi0gIHBsYWNlczoKLSAg ICBQb3NpdGl2ZS4uLlRvIGhvdyBtYW55IGRlY2ltYWwgcGxhY2VzLgotICAgIFplcm8uLi4uLi4u Um91bmQgdG8gaW50ZWdlci4KLSAgICBOZWdhdGl2ZS4uLi0xID0gbmVhcmVzdCB0ZW4sIC0yID0g bmVhcmVzdCAxMDAsIC0zID0gbmVhcmVzdCB0aG91c2FuZCwgZXRjLgotICBvYnVmCi0gICAgT3V0 cHV0IGJ1ZmZlciBmb3Igc3RyaW5nIHJlc3VsdCBpZiBkZXNpcmVkLgotICBvYnVmbGVuICAgIAot ICAgIExlbmd0aCBvZiBvdXRwdXQgYnVmZmVyLgotICBSZXR1cm5zOgotICAgIFJlc3VsdCBhcyBD S0ZMT0FUICh3aGljaCBpcyBub3QgZ29pbmcgdG8gYmUgYXMgZXhhY3QgYXMgdGhlIHN0cmluZyBy ZXN1bHQpCi0gICAgQW5kIHRoZSBleGFjdCByZXN1bHQgaW4gdGhlIHN0cmluZyBvdXRwdXQgYnVm ZmVyLCBpZiBvbmUgd2FzIHNwZWNpZmllZC4KLSovCi1DS0ZMT0FUCi0jaWZkZWYgQ0tfQU5TSUMK LWNrcm91bmQoQ0tGTE9BVCBmcG51bSwgaW50IHBsYWNlcywgY2hhciAqb2J1ZiwgaW50IG9idWZs ZW4pCi0jZWxzZQotY2tyb3VuZChmcG51bSxwbGFjZXMsb2J1ZixvYnVmbGVuKQotIENLRkxPQVQg ZnBudW07IGludCBwbGFjZXMsIG9idWZsZW47IGNoYXIgKm9idWY7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLS8qIGNrcm91bmQgICovIHsKLSAgICBjaGFyICpzLCAqczIsICpkOwotICAgIGludCBp LCBwLCBsZW4sIHgsIG4sIGRpZ2l0czsKLSAgICBpbnQgY2FycnkgPSAwOwotICAgIGludCBtaW51 cyA9IDA7Ci0gICAgY2hhciBidWZbMjAwXTsKLSAgICBjaGFyICogbnVtYmVyOwotICAgIENLRkxP QVQgdmFsdWU7Ci0gICAgZXh0ZXJuIGludCBmcF9kaWdpdHM7Ci0KLSAgICBzcHJpbnRmKGJ1Ziwi JTIwMC4xMDBmIixmcG51bSk7CS8qIE1ha2Ugc3RyaW5nIHZlcnNpb24gdG8gd29yayB3aXRoICov Ci0gICAgbnVtYmVyID0gKGNoYXIgKikgYnVmOwkJLyogTWFrZSBwb2ludGVyIHRvIGl0ICovCi0K LSAgICBwID0gcGxhY2VzOwkJCQkvKiBQcmVjaXNpb24gKi8KLSAgICBkID0gKGNoYXIgKikwOwkJ CS8qIFBvaW50ZXIgdG8gZGVjaW1hbCBvciBzdHJpbmcgZW5kICovCi0KLSAgICBzID0gbnVtYmVy OwkJCQkvKiBGaXggbnVtYmVyLi4uICovCi0gICAgd2hpbGUgKCpzID09ICcgJyB8fCAqcyA9PSAn XDAxMScpIHMrKzsgLyogU3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlICovCi0gICAgaWYgKCpzID09 ICcrJykgcysrOwkJCSAgIC8qIFNraXAgbGVhZGluZyBwbHVzIHNpZ24qLwotICAgIG51bWJlciA9 IHM7CQkJCSAgIC8qIFN0YXJ0IG9mIG51bWJlciAqLwotICAgIGlmICgqcyA9PSAnLScpIHsgbWlu dXMrKzsgbnVtYmVyKys7IHMrKzsgfSAvKiBSZW1lbWJlciBpZiBuZWdhdGl2ZSAqLwotCi0gICAg cyA9IG51bWJlcjsJCQkJLyogRG9uJ3QgYWxsb3cgZmFsc2UgcHJlY2lzaW9uICovCi0gICAgbiA9 IDA7Ci0gICAgd2hpbGUgKCpzICYmICpzICE9ICcuJykgcysrLCBuKys7ICAgLyogRmluZCBkZWNp bWFsICovCi0KLSAgICBpZiAocCArIG4gPiBmcF9kaWdpdHMpCQkvKiBUb28gbWFueSBkaWdpdHMg Ki8KLSAgICAgIHAgPSBmcF9kaWdpdHMgLSBuOwkJLyogRG9uJ3QgYXNrIGZvciBib2d1cyBwcmVj aXNpb24gKi8KLSAgICBpZiAocCA8IDApIHAgPSAwOwkJCS8qIEJ1dCBkb24ndCBhc2sgZm9yIGxl c3MgdGhhbiB6ZXJvICovCi0gICAgaWYgKG4gPiBmcF9kaWdpdHMpCQkJLyogSW50ZWdlciBwYXJ0 IGhhcyB0b28gbWFueSBkaWdpdHMgKi8KLSAgICAgICpzID0gMDsJCQkJLyogYnV0IHdlIGNhbid0 IHRydW5jYXRlIGl0ICovCi0gICAgZWxzZQkJCQkvKiBNYWduaXR1ZGUgaXMgT0sgKi8KLSAgICAg IG51bWJlcltmcF9kaWdpdHMrMV0gPSAwOwkJLyogVHJ1bmNhdGUgZnJhY3Rpb25hbCBwYXJ0LiAq LwotCi0gICAgbGVuID0gKGludClzdHJsZW4obnVtYmVyKTsJCS8qIExlbmd0aCBvZiBub24tYm9n dXMgbnVtYmVyICovCi0gICAgZCA9IHM7CQkJCS8qIFBvaW50ZXIgdG8gZGVjaW1hbCBwb2ludCAq LwotICAgIGlmIChwID4gMCkgewkJCS8qIFJvdW5kaW5nIHRoZSBmcmFjdGlvbmFsIHBhcnQgKi8K LQlpZiAobiArIHAgPCBsZW4pIHsJCS8qIElmIGl0J3Mgbm90IGFscmVhZHkgc2hvcnRlciAqLwot CSAgICBpZiAoKnMgPT0gJy4nKSBzKys7CQkvKiBTa2lwIHBhc3QgZGVjaW1hbCAqLwotCSAgICBz ICs9IHA7CQkJLyogR28gdG8gZGVzaXJlZCBzcG90ICovCi0JICAgIGlmICgqcyA+ICc0JyAmJiAq cyA8PSAnOScpCS8qIENoZWNrIHZhbHVlIG9mIGRpZ2l0ICovCi0JICAgICAgY2FycnkgPSAxOwot CSAgICAqcyA9IDA7CQkJLyogQW5kIGVuZCB0aGUgc3RyaW5nICovIAotCSAgICBzLS07CQkJLyog UG9pbnQgdG8gbGFzdCBkaWdpdCAqLwotCX0KLSAgICB9IGVsc2UgaWYgKHAgPT0gMCkgewkJLyog Um91bmRpbmcgdG8gaW50ZWdlciAqLwotCWlmICgqcyA9PSAnLicpIHsKLQkgICAgKnMgPSAwOwkJ CS8qIGVyYXNlIHRoZSBkZWNpbWFsIHBvaW50ICovCi0JICAgIGlmICgqKHMrMSkpIHsJCS8qIGFu ZCB0aGVyZSBpcyBhIGZhY3Rpb25hbCBwYXJ0ICovCi0JCWlmICgqKHMrMSkgPiAnNCcgJiYgKihz KzEpIDw9ICc5JykgLyogQ2hlY2sgZm9yIGNhcnJ5ICovCi0JCSAgY2FycnkgPSAxOwotCSAgICB9 Ci0JICAgIHMtLTsJCQkvKiBQb2ludCB0byBsYXN0IGRpZ2l0ICovCi0JfQotICAgIH0gZWxzZSB7 CQkJCS8qIFJvdW5kaW5nIHRoZSBpbnRlZ2VyIHBhcnQgKi8KLQlpZiAocyArIHAgPiBudW1iZXIp IHsJCS8qIGFzIGluICJ0aGUgbmVhcmVzdCBodW5kcmVkIiAqLwotCSAgICBzICs9IHA7CQkJLyog R28gbGVmdCB0byBkZXNpcmVkIGRpZ2l0ICovCi0JICAgICpkID0gMDsJCQkvKiBEaXNjYXJkIGZy YWN0aW9uICovCi0JICAgIGNhcnJ5ID0gMDsKLQkgICAgaWYgKCpzID4gJzQnKQkJLyogQ2hlY2sg Zmlyc3QgZGlnaXQgb2YgZnJhY3Rpb24gKi8KLQkgICAgICBjYXJyeSA9IDE7CQkvKiBhbmQgc2V0 IGNhcnJ5IGZsYWcgKi8KLQkgICAgczIgPSBzOwotCSAgICB3aGlsZSAoczIgPCBkKQkJLyogRmls bCBpbiB0aGUgcmVzdCB3aXRoIHplcm9zICovCi0JICAgICAgKnMyKysgPSAnMCc7Ci0JICAgIHMt LTsJCQkvKiBQb2ludCB0byBsYXN0IGRpZ2l0ICovCi0JfQotICAgIH0KLSAgICBpZiAoY2Fycnkp IHsJCQkvKiBIYW5kbGUgY2FycnksIGlmIGFueSAqLwotICAgICAgICB3aGlsZSAocyA+PSBudW1i ZXIpIHsKLSAgICAgICAgICAgIGlmICgqcyA9PSAnLicpIHsJCS8qIFNraXAgYmFja3dhcmRzIG92 ZXIgZGVjaW1hbCAqLwotICAgICAgICAgICAgICAgIHMtLTsKLSAgICAgICAgICAgICAgICBjb250 aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpzICs9IDE7CQkJLyogQWRkIDEgdG8g Y3VycmVudCBkaWdpdCAqLwotICAgICAgICAgICAgY2FycnkgPSAwOwotICAgICAgICAgICAgaWYg KCpzIDw9ICc5JykgCQkvKiBJZiByZXN1bHQgaXMgOSBvciBsZXNzICovCi0JICAgICAgYnJlYWs7 CQkJLyogd2UncmUgZG9uZSAqLwotICAgICAgICAgICAgKnMgPSAnMCc7CQkJLyogT3RoZXJ3aXNl IHB1dCAwICovCi0gICAgICAgICAgICBjYXJyeSA9IDE7CQkJLyogY2FycnkgdGhlIDEgKi8KLSAg ICAgICAgICAgIHMtLTsJCQkvKiBhbmQgYmFjayB1cCB0byBuZXh0IGRpZ2l0ICovCi0JfQotICAg IH0KLSNpZmRlZiBfX2FscGhhCi0gICAgc3NjYW5mKG51bWJlciwiJWYiLCZ2YWx1ZSk7CQkvKiBD b252ZXJ0IGJhY2sgdG8gZmxvYXRpbmcgcG9pbnQgKi8KLSNlbHNlCi0gICAgc3NjYW5mKG51bWJl ciwiJWxmIiwmdmFsdWUpOyAgICAgICAgLyogQ29udmVydCBiYWNrIHRvIGZsb2F0aW5nIHBvaW50 ICovCi0jZW5kaWYKLSAgICBpZiAob2J1Zikgc3RybmNweShvYnVmLG51bWJlcixvYnVmbGVuKTsg LyogU2V0IHN0cmluZyByZXN1bHQgKi8KLSAgICByZXR1cm4odmFsdWUpOwkJCSAgICAvKiBSZXR1 cm4gZmxvYXRpbmctcG9pbnQgcmVzdWx0ICovCi19Ci0KLSNlbmRpZiAvKiBDS0ZMT0FUICovCi0K LS8qIFNvcnRpbmcgcm91dGluZXMuLi4gKi8KLQotLyogUyBIIF8gUyBPIFIgVCAgLS0gIFNoZWxs IHNvcnQgLS0gc29ydHMgc3RyaW5nIGFycmF5IHMgaW4gcGxhY2UuICovCi0KLS8qCi0gIEhpZ2hs eSBkZWZlbnNpdmUgYW5kIHJlbGF0aXZlbHkgcXVpY2suCi0gIFVzZXMgc2hlbGwgc29ydCBhbGdv cml0aG0uCi0KLSAgQXJnczoKLSAgIHMgPSBwb2ludGVyIHRvIGFycmF5IG9mIHN0cmluZ3MuCi0g ICBwID0gcG9pbnRlciB0byBhIHNlY29uZCBhcnJheSB0byBzb3J0IGluIHBhcmFsbGVsIHMsIG9y IE5VTEwgZm9yIG5vbmUuCi0gICBuID0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIHMuCi0gICBrID0g cG9zaXRpb24gb2Yga2V5LgotICAgciA9IGFzY2VuZGluZyBsZXhpY2FsIG9yZGVyIGlmIHplcm8s IHJldmVyc2UgbGV4aWNhbCBvcmRlciBpZiBub256ZXJvLgotICAgYyA9IDAgZm9yIGNhc2UgaW5k ZXBlbmRlbmNlLCAxIGZvciBjYXNlIG1hdHRlcnMsIDIgZm9yIG51bWVyaWMuCi0KLSAgSWYgayBp cyBwYXN0IHRoZSByaWdodCBlbmQgb2YgYSBzdHJpbmcsIHRoZSBzdHJpbmcgaXMgY29uc2lkZXJl ZCBlbXB0eQotICBmb3IgY29tcGFyaXNvbiBwdXJwb3Nlcy4KLQotICBIaW50OgotICAgVG8gc29y dCBhIHBpZWNlIG9mIGFuIGFycmF5LCBjYWxsIHdpdGggcyBwb2ludGluZyB0byB0aGUgZmlyc3Qg ZWxlbWVudAotICAgYW5kIG4gdGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzb3J0LgotCi0gIFJl dHVybiB2YWx1ZToKLSAgIE5vbmUuICBBbHdheXMgc3VjY2VlZHMsIHVubGVzcyBhbnkgb2Ygc1sw XS4uc1tuLTFdIGFyZSBiYWQgcG9pbnRlcnMsCi0gICBpbiB3aGljaCBjYXNlIG1lbW9yeSB2aW9s YXRpb25zIGFyZSBwb3NzaWJsZSwgYnV0IEMgb2ZmZXJzIG5vIGRlZmVuc2UKLSAgIGFnYWluc3Qg dGhpcywgc28gbm8gd2F5IHRvIGdyYWNlZnVsbHkgcmV0dXJuIGFuIGVycm9yIGNvZGUuCi0qLwot Vk9JRAotc2hfc29ydChzLHAsbixrLHIsYykgY2hhciAqKnMsICoqcDsgaW50IG4sIGssIHIsIGM7 IHsKLSAgICBpbnQgbSwgaSwgaiwgeDsKLSAgICBjaGFyICp0LCAqdDEsICp0MiwgKnUgPSBOVUxM OwotI2lmZGVmIENLRkxPQVQKLSAgICBDS0ZMT0FUIGYxLCBmMjsKLSNlbHNlCi0gICAgbG9uZyBu MSwgbjI7Ci0jZW5kaWYgLyogQ0tGTE9BVCAqLwotCi0gICAgaWYgKCFzKSByZXR1cm47CQkJLyog Tm90aGluZyB0byBzb3J0PyAqLwotICAgIGlmIChuIDwgMikgcmV0dXJuOwkJCS8qIE5vdCBlbm91 Z2ggZWxlbWVudHMgdG8gc29ydD8gKi8KLSAgICBpZiAoayA8IDApIGsgPSAwOwkJCS8qIEtleSAq LwotCi0gICAgbSA9IG47CQkJCS8qIEluaXRpYWwgZ3JvdXAgc2l6ZSBpcyB3aG9sZSBhcnJheSAq LwotICAgIHdoaWxlICgxKSB7Ci0JbSA9IG0gLyAyOwkJCS8qIERpdmlkZSBncm91cCBzaXplIGlu IGhhbGYgKi8KLQlpZiAobSA8IDEpCQkJLyogU21hbGwgYXMgY2FuIGJlLCBzbyBkb25lICovCi0J ICBicmVhazsKLQlmb3IgKGogPSAwOyBqIDwgbi1tOyBqKyspIHsJLyogU29ydCBlYWNoIGdyb3Vw ICovCi0JICAgIHQgPSB0MiA9IHNbaittXTsJCS8qIENvbXBhcmUgdGhpcyBvbmUuLi4gKi8KLQkg ICAgaWYgKCF0KQkJCS8qIEJ1dCBpZiBpdCdzIE5VTEwgKi8KLQkgICAgICB0MiA9ICIiOwkJCS8q IG1ha2UgaXQgdGhlIGVtcHR5IHN0cmluZyAqLwotCSAgICBpZiAocCkJCQkvKiBIYW5kbGUgcGFy YWxsZWwgYXJyYXksIGlmIGFueSAqLwotCSAgICAgIHUgPSBwW2orbV07Ci0JICAgIGlmIChrID4g MCAmJiAqdDIpIHsKLQkJaWYgKChpbnQpc3RybGVuKHQyKSA8IGspIC8qIElmIGtleSB0b28gYmln ICovCi0JCSAgdDIgPSAiIjsJCS8qIG1ha2Uga2V5IHRoZSBlbXB0eSBzdHJpbmcgKi8KLQkJZWxz ZQkJCS8qIEtleSBpcyBpbiBzdHJpbmcgKi8KLQkJICB0MiA9IHQgKyBrOwkJLyogc28gcG9pbnQg dG8ga2V5IHBvc2l0aW9uICovCi0JICAgIH0KLQkgICAgZm9yIChpID0gajsgaSA+PSAwOyBpIC09 IG0pIHsgLyogTG9vcCB0aHJ1IGNvbXBhcmFuZHMgc1tpLi5dKi8KLQkJdDEgPSBzW2ldOwotCQlp ZiAoIXQxKQkJLyogU2FtZSBkZWFsICovCi0JCSAgdDEgPSAiIjsKLQkJaWYgKGsgPiAwICYmICp0 MSkgewotCQkgICAgaWYgKChpbnQpc3RybGVuKHQxKSA8IGspCi0JCSAgICAgIHQxID0gIiI7Ci0J CSAgICBlbHNlCi0JCSAgICAgIHQxID0gc1tpXStrOwotCQl9Ci0JCWlmIChjID09IDIpIHsJCS8q IE51bWVyaWMgY29tcGFyaXNvbiAqLwotCQkgICAgeCA9IDA7Ci0jaWZkZWYgQ0tGTE9BVAotCQkg ICAgZjIgPSAwLjA7Ci0JCSAgICBmMSA9IDAuMDsKLQkJICAgIGlmIChpc2Zsb2F0KHQxLDEpKSB7 Ci0JCQlmMSA9IGZsb2F0dmFsOwotCQkJaWYgKGlzZmxvYXQodDIsMSkpCi0JCQkgIGYyID0gZmxv YXR2YWw7Ci0JCQllbHNlCi0JCQkgIGYxID0gMC4wOwotCQkgICAgfQotCQkgICAgaWYgKGYyIDwg ZjEpCi0JCSAgICAgIHggPSAxOwotCQkgICAgZWxzZQotCQkgICAgICB4ID0gLTE7Ci0jZWxzZQot CQkgICAgbjIgPSAwTDsKLQkJICAgIG4xID0gMEw7Ci0JCSAgICBpZiAocmRpZ2l0cyh0MSkpIHsK LQkJCW4xID0gYXRvbCh0MSk7Ci0JCQlpZiAocmRpZ2l0cyh0MikpCi0JCQkgIG4yID0gYXRvbCh0 Mik7Ci0JCQllbHNlCi0JCQkgIG4xID0gMEw7Ci0JCSAgICB9Ci0JCSAgICBpZiAobjIgPCBuMSkK LQkJICAgICAgeCA9IDE7Ci0JCSAgICBlbHNlCi0JCSAgICAgIHggPSAtMTsKLSNlbmRpZiAvKiBD S0ZMT0FUICovCi0JCX0gZWxzZSB7Ci0JCSAgICB4ID0gY2tzdHJjbXAodDEsdDIsLTEsYyk7IC8q IENvbXBhcmUgKi8KLQkJfQotCQlpZiAociA9PSAwICYmIHggPCAwKQotCQkgIGJyZWFrOwotCQlp ZiAociAhPSAwICYmIHggPiAwKQotCQkgIGJyZWFrOwotCQlzW2krbV0gPSBzW2ldOwotCQlpZiAo cCkgcFtpK21dID0gcFtpXTsKLQkgICAgfQotCSAgICBzW2krbV0gPSB0OwotCSAgICBpZiAocCkg cFtpK21dID0gdTsKLQl9Ci0gICAgfQotfQotCi0KLS8qIEMgSyBSIEEgRCBJIFggIC0tICBSYWRp eCBjb252ZXJ0ZXIgKi8KLS8qCi0gICBDYWxsIHdpdGg6Ci0gICAgIHM6ICAgYSBudW1iZXIgaW4g c3RyaW5nIGZvcm1hdC4KLSAgICAgaW46ICBpbnQsIHNwZWNpZnlpbmcgdGhlIHJhZGl4IG9mIHMs IDItMzYuCi0gICAgIG91dDogaW50LCBzcGVjaWZ5aW5nIHRoZSByYWRpeCB0byBjb252ZXJ0IHRv LCAyLTM2LgotICAgUmV0dXJuczoKLSAgICAgTlVMTCBvbiBlcnJvciAoaWxsZWdhbCByYWRpeCwg aWxsZWdhbCBudW1iZXIsIGV0Yy4pLgotICAgICAiLTEiIG9uIG92ZXJmbG93IChudW1iZXIgdG9v IGJpZyBmb3IgdW5zaWduZWQgbG9uZykuCi0gICAgIE90aGVyd2lzZTogUG9pbnRlciB0byByZXN1 bHQuCi0qLwotY2hhciAqCi1ja3JhZGl4KHMsaW4sb3V0KSBjaGFyICogczsgaW50IGluLCBvdXQ7 IHsKLSAgICBjaGFyIGMsICpyID0gcnhyZXN1bHQ7Ci0gICAgaW50IGQsIG1pbnVzID0gMDsKLSNp ZmRlZiBDT01NRU5UCi0gICAgdW5zaWduZWQgbG9uZyB6eiA9IDBMOwotICAgIGxvbmcgeiA9IDBM OwotI2Vsc2UKLSAgICAvKgotICAgICAgVG8gZ2V0IDY0IGJpdHMgb24gMzItYml0IGhhcmR3YXJl IHdlIHVzZSBvZmZfdCwgYnV0IHRoZXJlCi0gICAgICBpcyBubyB1bnNpZ25lZCB2ZXJzaW9uIG9m IG9mZl90LCBzbyB3ZSBsb3NlIHRoZSBhYmlsaXR5IHRvCi0gICAgICBkZXRlY3Qgb3ZlcmZsb3cu Ci0gICAgKi8KLSAgICBDS19PRkZfVCB6eiA9IChDS19PRkZfVCkwOwotICAgIENLX09GRl9UIHog PSAoQ0tfT0ZGX1QpMDsKLSNlbmRpZgkvKiBDT01NRU5UICovCi0KLSAgICBpZiAoaW4gPCAyIHx8 IGluID4gMzYpCQkvKiBWZXJpZnkgbGVnYWwgaW5wdXQgcmFkaXggKi8KLSAgICAgIHJldHVybihO VUxMKTsKLSAgICBpZiAob3V0IDwgMiB8fCBvdXQgPiAzNikJCS8qIGFuZCBvdXRwdXQgcmFkaXgu ICovCi0gICAgICByZXR1cm4oTlVMTCk7Ci0gICAgaWYgKCpzID09ICcrJykgewkJCS8qIEdldCBz aWduIGlmIGFueSAqLwotCXMrKzsKLSAgICB9IGVsc2UgaWYgKCpzID09ICctJykgewotCW1pbnVz Kys7Ci0JcysrOwotICAgIH0KLSAgICB3aGlsZSAoKnMgPT0gU1AgfHwgKnMgPT0gJzAnKQkvKiBU cmltIGxlYWRpbmcgYmxhbmtzIG9yIDAncyAqLwotICAgICAgcysrOwotLyoKLSAgRm9yIGRldGVj dGluZyBvdmVyZmxvdywgd2UgdXNlIGEgc2lnbmVkIGNvcHkgb2YgdGhlIHVuc2lnbmVkIGxvbmcK LSAgYWNjdW11bGF0b3IuICBJZiBpdCBnb2VzIG5lZ2F0aXZlLCB3ZSBrbm93IHdlJ2xsIG92ZXJm bG93IE5FWFQgdGltZQotICB0aHJvdWdoIHRoZSBsb29wLgotKi8KLSAgICBmb3IgKDsgKnM7ICBz KyspIHsJCQkvKiBDb252ZXJ0IGZyb20gaW5wdXQgcmFkaXggdG8gKi8KLQljID0gKnM7CQkJCS8q IHVuc2lnbmVkIGxvbmcgKi8KLQlpZiAoaXNsb3dlcihjKSkgYyA9IHRvdXBwZXIoYyk7Ci0JaWYg KGMgPj0gJzAnICYmIGMgPD0gJzknKQotCSAgZCA9IGMgLSAnMCc7Ci0JZWxzZSBpZiAoYyA+PSAn QScgJiYgYyA8PSAnWicpCi0JICBkID0gYyAtICdBJyArIDEwOwotCWVsc2UKLQkgIHJldHVybihO VUxMKTsKLQlpZiAoZCA+PSBpbikJCQkvKiBDaGVjayBmb3IgaWxsZWdhbCBkaWdpdCAqLwotCSAg cmV0dXJuKE5VTEwpOwotCXp6ID0genogKiBpbiArIGQ7Ci0JaWYgKHogPCAwTCkJCQkvKiBDbGV2 ZXIoPykgb3ZlcmZsb3cgZGV0ZWN0b3IgKi8KLQkgIHJldHVybigiLTEiKTsKLSAgICAgICAgeiA9 IHp6OwotICAgIH0KLSAgICBpZiAoIXp6KSByZXR1cm4oIjAiKTsKLSAgICByID0gJnJ4cmVzdWx0 W1JYUkVTVUxUXTsJCS8qIENvbnZlcnQgZnJvbSB1bnNpZ25lZCBsb25nICovCi0gICAgKnItLSA9 IE5VTDsJCQkJLyogdG8gb3V0cHV0IHJhZGl4LiAqLwotICAgIHdoaWxlICh6eiA+IDAgJiYgciA+ IHJ4cmVzdWx0KSB7Ci0JZCA9IHp6ICUgKHVuc2lnbmVkKW91dDsKLQkqci0tID0gcnhkaWdpdHNb ZF07Ci0JenogPSB6eiAvICh1bnNpZ25lZClvdXQ7Ci0gICAgfQotICAgIGlmIChtaW51cykgKnIt LSA9ICctJzsJCS8qIFJlcGxhY2Ugb3JpZ2luYWwgc2lnbiAqLwotICAgIHJldHVybigoY2hhciAq KShyKzEpKTsKLX0KLQotI2lmbmRlZiBOT0I2NAotLyogQmFzZS02NCBjb252ZXJzaW9uIHJvdXRp bmVzICovCi0KLXN0YXRpYyBjaGFyIGI2NFtdID0gewkJCS8qIEVuY29kaW5nIHZlY3RvciAqLwot I2lmZGVmIHBkcDExCi0gICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1u b3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIKLSNlbHNlCi0gICdBJywnQicsJ0MnLCdEJywnRScs J0YnLCdHJywnSCcsJ0knLCdKJywnSycsJ0wnLCdNJywnTicsJ08nLCdQJywnUScsJ1InLCdTJywK LSAgJ1QnLCdVJywnVicsJ1cnLCdYJywnWScsJ1onLCdhJywnYicsJ2MnLCdkJywnZScsJ2YnLCdn JywnaCcsJ2knLCdqJywnaycsJ2wnLAotICAnbScsJ24nLCdvJywncCcsJ3EnLCdyJywncycsJ3Qn LCd1JywndicsJ3cnLCd4JywneScsJ3onLCcwJywnMScsJzInLCczJywnNCcsCi0gICc1JywnNics JzcnLCc4JywnOScsJysnLCcvJywnPScsJ1wwJwotI2VuZGlmIC8qIHBkcDExICovCi19Owotc3Rh dGljIGludCBiNjR0YmxbXSA9IHsJCQkvKiBEZWNvZGluZyB2ZWN0b3IgKi8KLSAgICAtMiwgLTIs IC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwK LSAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwg LTIsIC0yLCAtMiwKLSAgICAtMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIDYyLCAtMSwgLTEsIC0xLCA2MywKLSAgICA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwg NTksIDYwLCA2MSwgLTEsIC0xLCAtMSwgLTIsIC0xLCAtMSwKLSAgICAtMSwgIDAsICAxLCAgMiwg IDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwKLSAgICAxNSwg MTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIC0xLCAtMSwgLTEsIC0xLCAt MSwKLSAgICAtMSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAz NywgMzgsIDM5LCA0MCwKLSAgICA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1 MCwgNTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwKLSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwKLSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAg ICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMQotfTsKLQotLyoKLSAgIEIgOCBUIE8gQiA2IDQgIC0tICBDb252ZXJ0cyA4LWJpdCBk YXRhIHRvIEJhc2U2NCBlbmNvZGluZy4KLQotICAgQ2FsbCB3aXRoOgotICAgICBzICAgPSBQb2lu dGVyIHRvIDgtYml0IGRhdGE7Ci0gICAgIG4gICA9IE51bWJlciBvZiBzb3VyY2UgYnl0ZXMgdG8g ZW5jb2RlIChTRUUgTk9URSkuCi0gICAgICAgICAgIElmIGl0J3MgYSBudWxsLXRlcm1pbmF0ZWQg c3RyaW5nLCB5b3UgY2FuIHVzZSAtMSBoZXJlLgotICAgICBvdXQgPSBBZGRyZXNzIG9mIG91dHB1 dCBidWZmZXIuCi0gICAgIGxlbiA9IExlbmd0aCBvZiBvdXRwdXQgYnVmZmVyIChzaG91bGQgPiA0 LzMgbG9uZ2VyIHRoYW4gaW5wdXQpLgotCi0gICBSZXR1cm5zOgotICAgICA+PSAwIGlmIE9LLCBu dW1iZXIgb2YgYnl0ZXMgcGxhY2VkIGluIG91dHB1dCBidWZmZXIsCi0gICAgICAgICAgd2l0aCB0 aGUgc3Vic2VxdWVudCBieXRlIHNldCB0byBOVUwgaWYgc3BhY2UgcGVybWl0cy4KLSAgICAgLTEg b24gZXJyb3IgKG91dHB1dCBidWZmZXIgc3BhY2UgZXhoYXVzdGVkKS4KLQotICAgTk9URToKLSAg ICAgSWYgdGhpcyBmdW5jdGlvbiBpcyB0byBiZSBjYWxsZWQgcmVwZWF0ZWRseSwgZS5nLiB0byBl bmNvZGUgYSBkYXRhCi0gICAgIHN0cmVhbSBhIGNodW5rIGF0IGEgdGltZSwgdGhlIHNvdXJjZSBs ZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMKLSAgICAgaW4gYWxsIGNhbGxzIGJ1dCB0aGUg ZmluYWwgb25lIHRvIGF2b2lkIHRoZSBnZW5lcmF0aW9uIG9mIGV4dHJhbmVvdXMKLSAgICAgcGFk IGNoYXJhY3RlcnMgdGhhdCB3b3VsZCB0aHJvdyB0aGUgZGVjb2RlciBvdXQgb2Ygc3luYy4gIFdo ZW4gZW5jb2RpbmcKLSAgICAgb25seSBhIHNpbmdsZSBzdHJpbmcsIHRoaXMgaXMgbm90IGEgY29u c2lkZXJhdGlvbi4gIE5vIGludGVybmFsIHN0YXRlCi0gICAgIGlzIGtlcHQsIHNvIHRoZXJlIGlz IG5vIHJlc2V0IGZ1bmN0aW9uLgotKi8KLWludAotYjh0b2I2NChzLG4sb3V0LGxlbikgY2hhciAq IHMsKiBvdXQ7IGludCBuLCBsZW47IHsKLSAgICBpbnQgYjMsIGI0LCBpLCB4ID0gMDsKLSAgICB1 bnNpZ25lZCBpbnQgdDsKLQotICAgIGlmIChuIDwgMCkgbiA9IHN0cmxlbihzKTsKLQotICAgIGZv ciAoaSA9IDA7IGkgPCBuOyBpICs9IDMseCArPSA0KSB7IC8qIExvb3AgdGhyb3VnaCBzb3VyY2Ug Ynl0ZXMgKi8KLQliMyA9IGI0ID0gMDsKLQl0ID0gKHVuc2lnbmVkKSgodW5zaWduZWQpKCh1bnNp Z25lZCBpbnQpc1tpXSAmIDB4ZmYpIDw8IDgpOwotCWlmIChuIC0gMSA+IGkpIHsJCS8qIERvIHdl IGhhdmUgYW5vdGhlciBhZnRlciB0aGlzPyAqLwotICAgICAgICAgICAgdCB8PSAodW5zaWduZWQp KHNbaSsxXSAmIDB4ZmYpOyAvKiBZZXMsIE9SIGl0IGluICovCi0gICAgICAgICAgICBiMyA9IDE7 CQkJLyogQW5kIHJlbWVtYmVyICovCi0gICAgICAgIH0KLSAgICAgICAgdCA8PD0gODsJCQkvKiBN b3ZlIG92ZXIgKi8KLSAgICAgICAgaWYgKG4gLSAyID4gaSkgewkJLyogQW5vdGhlciBvbmUgYWZ0 ZXIgdGhhdD8gKi8KLSAgICAgICAgICAgIHQgfD0gKHVuc2lnbmVkKShzW2krMl0gJiAweGZmKTsg LyogWWVzLCBPUiBpdCBpbiAqLwotICAgICAgICAgICAgYjQgPSAxOwkJCS8qIGFuZCByZW1lbWJl ciAqLwotICAgICAgICB9Ci0JaWYgKHggKyA0ID4gbGVuKQkJLyogQ2hlY2sgb3V0cHV0IHNwYWNl ICovCi0JICByZXR1cm4oLTEpOwotCW91dFt4KzNdID0gYjY0W2I0ID8gKHQgJiAweDNmKSA6IDY0 XTsgLyogNjQgPSBjb2RlIGZvciAnPScgKi8KLSAgICAgICAgdCA+Pj0gNjsKLSAgICAgICAgb3V0 W3grMl0gPSBiNjRbYjMgPyAodCAmIDB4M2YpIDogNjRdOwotICAgICAgICB0ID4+PSA2OwotICAg ICAgICBvdXRbeCsxXSA9IGI2NFt0ICYgMHgzZl07Ci0gICAgICAgIHQgPj49IDY7Ci0gICAgICAg IG91dFt4XSAgID0gYjY0W3QgJiAweDNmXTsKLSAgICB9Ci0gICAgaWYgKHggPCBsZW4pIG91dFt4 XSA9IE5VTDsJCS8qIE51bGwtdGVybWluYXRlIHRoZSBzdHJpbmcgKi8KLSAgICByZXR1cm4oeCk7 Ci19Ci0KLQotLyoKLSAgIEIgNiA0IFQgTyBCIDggIC0tICBDb252ZXJ0cyBCYXNlNjQgc3RyaW5n IHRvIDgtYml0IGRhdGEuCi0KLSAgIENhbGwgd2l0aDoKLSAgICAgcyAgID0gcG9pbnRlciB0byBC YXNlNjQgc3RyaW5nICh3aGl0ZXNwYWNlIGlnbm9yZWQpLgotICAgICBuICAgPSBsZW5ndGggb2Yg c3RyaW5nLCBvciAtMSBpZiBudWxsIHRlcm1pbmF0ZWQsIG9yIDAgdG8gcmVzZXQuCi0gICAgIG91 dCA9IGFkZHJlc3Mgb2Ygb3V0cHV0IGJ1ZmZlci4KLSAgICAgbGVuID0gbGVuZ3RoIG9mIG91dHB1 dCBidWZmZXIuCi0KLSAgIFJldHVybnM6Ci0gICAgID49IDAgaWYgT0ssIG51bWJlciBvZiBieXRl cyBwbGFjZWQgaW4gb3V0cHV0IGJ1ZmZlciwKLSAgICAgICAgICB3aXRoIHRoZSBzdWJzZXF1ZW50 IGJ5dGUgc2V0IHRvIE5VTCBpZiBzcGFjZSBwZXJtaXRzLgotICAgICA8ICAwIG9uIGVycm9yOgot ICAgICAgIC0xID0gb3V0cHV0IGJ1ZmZlciB0b28gc21hbGwgZm9yIGlucHV0LgotICAgICAgIC0y ID0gaW5wdXQgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLgotICAgICAgIC0zID0gaW50ZXJu YWwgY29kaW5nIGVycm9yLgotCi0gICBOT1RFOgotICAgICBDYW4gYmUgY2FsbGVkIHJlcGVhdGVk bHkgdG8gZGVjb2RlIGEgQmFzZTY0IHN0cmVhbSwgb25lIGNodW5rIGF0IGEKLSAgICAgdGltZS4g IEhvd2V2ZXIsIGlmIGl0IGlzIHRvIGJlIGNhbGxlZCBmb3IgbXVsdGlwbGUgc3RyZWFtcyBpbgot ICAgICBzdWNjZXNzaW9uLCBpdHMgaW50ZXJuYWwgc3RhdGUgbXVzdCBiZSByZXNldCBhdCB0aGUg YmVnaW5uaW5nIG9mCi0gICAgIHRoZSBuZXcgc3RyZWFtLgotKi8KLWludAotYjY0dG9iOChzLG4s b3V0LGxlbikgY2hhciAqIHMsKiBvdXQ7IGludCBuLCBsZW47IHsgLyogRGVjb2RlICovCi0gICAg c3RhdGljIGludCBiaXRzID0gMDsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IHIgPSAwOwotICAg IGludCBpLCBrID0gMCwgeCwgdDsKLSAgICB1bnNpZ25lZCBjaGFyIGM7Ci0KLSAgICBpZiAobiA9 PSAwKSB7CQkJLyogUmVzZXQgc3RhdGUgKi8KLQliaXRzID0gMDsKLQlyID0gMDsKLQlyZXR1cm4o MCk7Ci0gICAgfQotICAgIHggPSAobiA8IDApID8gc3RybGVuKHMpIDogbjsJLyogU291cmNlIGxl bmd0aCAqLwotCi0gICAgbiA9ICgoeCArIDMpIC8gNCkgKiAzOwkJLyogQ29tcHV0ZSBkZXN0aW5h dGlvbiBsZW5ndGggKi8KLSAgICBpZiAoeCA+IDAgJiYgc1t4LTFdID09ICc9Jykgbi0tOwkvKiBB Y2NvdW50IGZvciBwYWRkaW5nICovCi0gICAgaWYgKHggPiAxICYmIHNbeC0yXSA9PSAnPScpIG4t LTsKLSAgICBpZiAobiA+IGxlbikJCQkvKiBEZXN0aW5hdGlvbiBub3QgYmlnIGVub3VnaCAqLwot ICAgICAgcmV0dXJuKC0xKTsJCQkvKiBGYWlsICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDwgeDsg aSsrKSB7CQkvKiBMb29wIHRocnUgc291cmNlICovCi0JYyA9IChDSEFSKXNbaV07CQkJLyogTmV4 dCBjaGFyICovCi0gICAgICAgIHQgPSBiNjR0YmxbY107CQkJLyogQ29kZSBmb3IgdGhpcyBjaGFy ICovCi0JaWYgKHQgPT0gLTIpIHsJCQkvKiBXaGl0ZXNwYWNlIG9yIEN0cmwgKi8KLQkgICAgbi0t OwkJCS8qIElnbm9yZSAqLwotCSAgICBjb250aW51ZTsKLQl9IGVsc2UgaWYgKHQgPT0gLTEpIHsJ CS8qIElsbGVnYWwgY29kZSAqLwotCSAgICByZXR1cm4oLTIpOwkJCS8qIEZhaWwuICovCi0JfSBl bHNlIGlmICh0ID4gNjMgfHwgdCA8IDApCS8qIElsbGVnYWwgdmFsdWUgKi8KLQkgIHJldHVybigt Myk7CQkJLyogZmFpbC4gKi8KLQliaXRzICs9IDY7CQkJLyogQ291bnQgYml0cyAqLwotCXIgPDw9 IDY7CQkJLyogTWFrZSBzcGFjZSAqLwotCXIgfD0gKHVuc2lnbmVkKSB0OwkJLyogT1IgaW4gbmV3 IGNvZGUgKi8KLQlpZiAoYml0cyA+PSA4KSB7CQkvKiBIYXZlIGEgYnl0ZSB5ZXQ/ICovCi0JICAg IGJpdHMgLT0gODsJCQkvKiBPdXRwdXQgaXQgKi8KLQkgICAgYyA9ICh1bnNpZ25lZCkgKChyID4+ IGJpdHMpICYgMHhmZik7Ci0JICAgIG91dFtrKytdID0gYzsKLQl9Ci0gICAgfQotICAgIGlmIChr IDwgbGVuKSBvdXRba10gPSBOVUw7CQkvKiBOdWxsLXRlcm1pbmF0ZSBpbiBjYXNlIGl0J3MgKi8K LSAgICByZXR1cm4oayk7CQkJCS8qIGEgdGV4dCBzdHJpbmcgKi8KLX0KLSNlbmRpZiAvKiBOT0I2 NCAqLwotCi0vKiBDIEggSyBOIFUgTSAgLS0gIFNlZSBpZiBhcmd1bWVudCBzdHJpbmcgaXMgYW4g aW50ZWdlciAgKi8KLQotLyogUmV0dXJucyAxIGlmIE9LLCB6ZXJvIGlmIG5vdCBPSyAqLwotLyog SWYgT0ssIHN0cmluZyBzaG91bGQgYmUgYWNjZXB0YWJsZSB0byBhdG9pKCkgb3IgYXRvbCgpIG9y IGNrYXRvZnMoKSAqLwotLyogQWxsb3dzIGxlYWRpbmcgc3BhY2UsIHNpZ24gKi8KLQotaW50Ci1j aGtudW0ocykgY2hhciAqczsgewkJCS8qIENoZWNrIE51bWVyaWMgU3RyaW5nICovCi0gICAgaW50 IHggPSAwOwkJCQkvKiBGbGFnIGZvciBwYXN0IGxlYWRpbmcgc3BhY2UgKi8KLSAgICBpbnQgeSA9 IDA7CQkJCS8qIEZsYWcgZm9yIGRpZ2l0IHNlZW4gKi8KLSAgICBjaGFyIGM7Ci0gICAgZGVidWco RjExMCwiY2hrbnVtIixzLDApOwotICAgIGlmICghcykgcmV0dXJuKDApOwotICAgIGlmICghKnMp IHJldHVybigwKTsKLSAgICB3aGlsZSAoKGMgPSAqcysrKSkgewkJLyogRm9yIGVhY2ggY2hhcmFj dGVyIGluIHRoZSBzdHJpbmcgKi8KLQlzd2l0Y2ggKGMpIHsKLQkgIGNhc2UgU1A6CQkJLyogQWxs b3cgbGVhZGluZyBzcGFjZXMgKi8KLQkgIGNhc2UgSFQ6Ci0JICAgIGlmICh4ID09IDApIGNvbnRp bnVlOwotCSAgICBlbHNlIHJldHVybigwKTsKLQkgIGNhc2UgJysnOgkJCS8qIEFsbG93IGxlYWRp bmcgc2lnbiAqLwotCSAgY2FzZSAnLSc6Ci0JICAgIGlmICh4ID09IDApIHggPSAxOwotCSAgICBl bHNlIHJldHVybigwKTsKLQkgICAgYnJlYWs7Ci0JICBkZWZhdWx0OgkJCS8qIEFmdGVyIHRoYXQs IG9ubHkgZGVjaW1hbCBkaWdpdHMgKi8KLQkgICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7 Ci0JCXggPSB5ID0gMTsKLQkJY29udGludWU7Ci0JICAgIH0gZWxzZSByZXR1cm4oMCk7Ci0JfQot ICAgIH0KLSAgICByZXR1cm4oeSk7Ci19Ci0KLQotLyogIFIgRCBJIEcgSSBUIFMgIC0tIFZlcmlm eSB0aGF0IGFsbCBjaGFyYWN0ZXJzIGluIGFyZyBBUkUgRElHSVRTICAqLwotCi0vKiAgUmV0dXJu cyAxIGlmIHNvLCAwIGlmIG5vdCBvciBpZiBzdHJpbmcgaXMgZW1wdHkgKi8KLQotaW50Ci1yZGln aXRzKHMpIGNoYXIgKnM7IHsKLSAgICBpZiAoIXMpIHJldHVybigwKTsKLSAgICBkbyB7Ci0gICAg ICAgIGlmICghaXNkaWdpdCgqcykpIHJldHVybigwKTsKLSAgICAgICAgcysrOwotICAgIH0gd2hp bGUgKCpzKTsKLSAgICByZXR1cm4oMSk7Ci19Ci0KLS8qICBQIEEgUiBOIEEgTSAgLS0gIFJldHVy biBwYXJpdHkgbmFtZSAqLwotCi1jaGFyICoKLSNpZmRlZiBDS19BTlNJQwotcGFybmFtKGNoYXIg YykKLSNlbHNlCi1wYXJuYW0oYykgY2hhciBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBw YXJuYW0gKi8gewotICAgIHN3aXRjaCAoYykgewotCWNhc2UgJ2UnOiByZXR1cm4oImV2ZW4iKTsK LQljYXNlICdvJzogcmV0dXJuKCJvZGQiKTsKLQljYXNlICdtJzogcmV0dXJuKCJtYXJrIik7Ci0J Y2FzZSAncyc6IHJldHVybigic3BhY2UiKTsKLQljYXNlIDA6ICAgcmV0dXJuKCJub25lIik7Ci0J ZGVmYXVsdDogIHJldHVybigiaW52YWxpZCIpOwotICAgIH0KLX0KLQotY2hhciAqCQkJCQkvKiBD b252ZXJ0IHNlY29uZHMgdG8gaGg6bW06c3MgKi8KLSNpZmRlZiBDS19BTlNJQwotaGhtbXNzKGxv bmcgeCkKLSNlbHNlCi1oaG1tc3MoeCkgbG9uZyB4OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0v KiBoaG1tc3MoeCkgKi8gewotICAgIHN0YXRpYyBjaGFyIGJ1ZlsxMF07Ci0gICAgbG9uZyBzLCBo LCBtOwotICAgIGggPSB4IC8gMzYwMEw7CQkJLyogSG91cnMgKi8KLSAgICB4ID0geCAlIDM2MDBM OwotICAgIG0gPSB4IC8gNjBMOwkJCS8qIE1pbnV0ZXMgKi8KLSAgICBzID0geCAlIDYwTDsJCQkv KiBTZWNvbmRzICovCi0gICAgaWYgKHggPiAtMUwpCi0gICAgICBzcHJpbnRmKGJ1ZiwiJTAybGQ6 JTAybGQ6JTAybGQiLGgsbSxzKTsKLSAgICBlbHNlCi0gICAgICBidWZbMF0gPSBOVUw7Ci0gICAg cmV0dXJuKChjaGFyICopYnVmKTsKLX0KLQotLyogTCBTIEUgVCAgLS0gIFNldCBzIGludG8gcCwg cmlnaHQgcGFkZGluZyB0byBsZW5ndGggbiB3aXRoIGNoYXIgYzsgKi8KLS8qCi0gICBzIGlzIGEg TlVMLXRlcm1pbmF0ZWQgc3RyaW5nLgotICAgSWYgbGVuZ3RoKHMpID4gbiwgb25seSBuIGJ5dGVz IGFyZSBtb3ZlZC4KLSAgIFRoZSByZXN1bHQgaXMgTk9UIE5VTCB0ZXJtaW5hdGVkIHVubGVzcyBj ID09IE5VTCBhbmQgbGVuZ3RoKHMpIDwgbi4KLSAgIFRoZSBpbnRlbmRlZCBvZiB0aGlzIHJvdXRp bmUgaXMgZm9yIGZpbGxpbmcgaW4gZml4ZWQtbGVuZ3RoIHJlY29yZCBmaWVsZHMuCi0qLwotVk9J RAotbHNldChwLHMsbixjKSBjaGFyICpzOyBjaGFyICpwOyBpbnQgbjsgaW50IGM7IHsKLSAgICBp bnQgeDsKLSNpZm5kZWYgVVNFX01FTUNQWQotICAgIGludCBpOwotI2VuZGlmIC8qIFVTRV9NRU1D UFkgKi8KLSAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICB4ID0gc3RybGVuKHMpOwotICAgIGlmICh4 ID4gbikgeCA9IG47Ci0jaWZkZWYgVVNFX01FTUNQWQotICAgIG1lbWNweShwLHMseCk7Ci0gICAg aWYgKG4gPiB4KQotICAgICAgbWVtc2V0KHAreCxjLG4teCk7Ci0jZWxzZQotICAgIGZvciAoaSA9 IDA7IGkgPCB4OyBpKyspCi0gICAgICAqcCsrID0gKnMrKzsKLSAgICBmb3IgKDsgaSA8IG47IGkr KykKLSAgICAgICpwKysgPSBjOwotI2VuZGlmIC8qIFVTRV9NRU1DUFkgKi8KLX0KLQotLyogUiBT IEUgVCAgLS0gIFJpZ2h0LWFkanVzdCBzIGluIHAsIGxlZnQgcGFkZGluZyB0byBsZW5ndGggbiB3 aXRoIGNoYXIgYyAqLwotCi1WT0lECi1yc2V0KHAscyxuLGMpIGNoYXIgKnM7IGNoYXIgKnA7IGlu dCBuOyBpbnQgYzsgewotICAgIGludCB4OwotI2lmbmRlZiBVU0VfTUVNQ1BZCi0gICAgaW50IGk7 Ci0jZW5kaWYgLyogVVNFX01FTUNQWSAqLwotICAgIGlmICghcykgcyA9ICIiOwotICAgIHggPSBz dHJsZW4ocyk7Ci0gICAgaWYgKHggPiBuKSB4ID0gbjsKLSNpZmRlZiBVU0VfTUVNQ1BZCi0gICAg bWVtc2V0KHAsYyxuLXgpOwotICAgIG1lbWNweShwK24teCxzLHgpOwotI2Vsc2UKLSAgICBmb3Ig KGkgPSAwOyBpIDwgKG4gLSB4KTsgaSsrKQotICAgICAgKnArKyA9IGM7Ci0gICAgZm9yICg7IGkg PCBuOyBpKyspCi0gICAgICAqcCsrID0gKnMrKzsKLSNlbmRpZiAvKiBVU0VfTUVNQ1BZICovCi19 Ci0KLS8qICBVIEwgTyBOIEcgVCBPIEggRSBYICAtLSAgVW5zaWduZWQgbG9uZyB0byBoZXggICov Ci0KLS8qCi0gIENvbnZlcnRzIHVuc2lnbmVkIGxvbmcgYXJnIHRvIGhleCBhbmQgcmV0dXJucyBz dHJpbmcgcG9pbnRlciB0bwotICByaWdodG1vc3QgbiBoZXggZGlnaXRzIGxlZnQgcGFkZGVkIHdp dGggMCdzLiAgQWxsb3dzIGZvciBsb25ncwotICB1cCB0byA2NCBiaXRzLiAgUmV0dXJucyBwb2lu dGVyIHRvIHJlc3VsdC4KLSovCi1jaGFyICoKLSNpZmRlZiBDS19BTlNJQwotdWxvbmd0b2hleCgg dW5zaWduZWQgbG9uZyB6LCBpbnQgbiApCi0jZWxzZQotdWxvbmd0b2hleCh6LG4pIHVuc2lnbmVk IGxvbmcgejsgaW50IG47IAotI2VuZGlmCS8qIENLX0FOU0lDICovCi0vKiB1bG9uZ3RvaGV4ICov IHsKLSAgICBzdGF0aWMgY2hhciBoZXhidWZbMTddOwotICAgIGludCBpID0gMTYsIHgsIGsgPSAw OwotICAgIGhleGJ1ZlsxNl0gPSAnXDAnOwotICAgIGlmIChuID4gMTYpIG4gPSAxNjsKLSAgICBr ID0gMiAqIChzaXplb2YobG9uZykpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQlp ZiAoaSA+IGsgfHwgeiA9PSAwKSB7Ci0JICAgIGhleGJ1ZlsxNS1pXSA9ICcwJzsKLQl9IGVsc2Ug ewotCSAgICB4ID0geiAmIDB4MGY7Ci0JICAgIHogPSB6ID4+IDQ7Ci0JICAgIGhleGJ1ZlsxNS1p XSA9IHggKyAoKHggPCAxMCkgPyAnMCcgOiAweDM3KTsKLQl9Ci0gICAgfQotICAgIHJldHVybigo Y2hhciAqKSgmaGV4YnVmWzE2LWldKSk7Ci19Ci0KLS8qICBIIEUgWCBUIE8gVSBMIE8gTiBHICAt LSAgSGV4IHN0cmluZyB0byB1bnNpZ25lZCBsb25nICAqLwotCi0vKgotICBDb252ZXJ0cyBuIGNo YXJzIGZyb20gcyBmcm9tIGhleCB0byB1bnNpZ25lZCBsb25nLgotICBSZXR1cm5zOgotICAgMEwg b3IgcG9zaXRpdmUsIGdvb2QgcmVzdWx0ICgwTCBpcyByZXR1cm5lZCBpZiBhcmcgaXMgTlVMTCBv ciBlbXB0eSkuCi0gIC0xTCBvbiBlcnJvcjogbm9uLWhleCBhcmcgb3Igb3ZlcmZsb3cuCi0qLwot bG9uZwotaGV4dG91bG9uZyhzLG4pIGNoYXIgKnM7IGludCBuOyB7Ci0gICAgY2hhciBidWZbNjRd OwotICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMEw7Ci0gICAgaW50IGQsIGNvdW50ID0gMDsK LSAgICBpbnQgZmxhZyA9IDA7Ci0gICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgaWYgKCEqcykgewot CXJldHVybigwTCk7Ci0gICAgfQotICAgIGlmIChuIDwgMSkKLSAgICAgIHJldHVybigwTCk7Ci0g ICAgaWYgKG4gPiA2MykgbiA9IDYzOwotICAgIHN0cm5jcHkoYnVmLHMsbik7Ci0gICAgYnVmW25d ID0gJ1wwJzsKLSAgICBzID0gYnVmOwotICAgIHdoaWxlICgqcykgewotCWQgPSAqcysrOwotCWlm ICgoZCA9PSAnMCcgfHwgZCA9PSAnICcpKSB7Ci0JICAgIGlmICghZmxhZykKLQkgICAgICBjb250 aW51ZTsKLQl9IGVsc2UgewotCSAgICBmbGFnID0gMTsKLQl9Ci0JaWYgKGlzbG93ZXIoZCkpCi0J ICBkID0gdG91cHBlcihkKTsKLQlpZiAoZCA+PSAnMCcgJiYgZCA8PSAnOScpIHsKLQkgICAgZCAt PSAweDMwOwotCX0gZWxzZSBpZiAoZCA+PSAnQScgJiYgZCA8PSAnRicpIHsKLQkgICAgZCAtPSAw eDM3OwotCX0gZWxzZSB7Ci0JICAgIHJldHVybigtMUwpOwotCX0KLQlpZiAoKytjb3VudCA+IChz aXplb2YobG9uZykgKiAyKSkKLQkgIHJldHVybigtMUwpOwotCXJlc3VsdCA9IChyZXN1bHQgPDwg NCkgfCAoZCAmIDB4MGYpOwotICAgIH0KLSAgICByZXR1cm4ocmVzdWx0KTsKLX0KLQotLyoKLSAg YyBrIHMgcCBsIGkgdCAgLS0gIFNwbGl0cyBhIHN0cmluZyBpbnRvIHdvcmRzLCBvcjoKLSAgICAg ICAgICAgICAgICAgICAgIGV4dHJhY3RzIGEgZ2l2ZW4gd29yZCBmcm9tIGEgc3RyaW5nLgotCi0g IEFsbG93cyBmb3IgZ3JvdXBpbmcuCi0gIE9wZXJhdGVzIG9uIGEgY29weSBvZiB0aGUgc3RyaW5n OyBkb2VzIG5vdCBhbHRlciB0aGUgb3JpZ2luYWwgc3RyaW5nLgotICBBbGwgc3RyaW5ncyBOVUwt dGVybWluYXRlZC4KLQotICBDYWxsIHdpdGg6Ci0gICAgZmMgPSBmdW5jdGlvbiBjb2RlOgotICAg ICAgICAgMSA9IHNwbGl0LCAwID0gd29yZC4KLSAgICBuMSA9IGRlc2lyZWQgd29yZCBudW1iZXIg aWYgZmMgPT0gMC4KLSAgICBzMSA9IHNvdXJjZSBzdHJpbmcuCi0gICAgczIgPSBicmVhayBzdHJp bmcgKE5VTEwgdG8gYWNjZXB0IGRlZmF1bHQgPSBhbGwgbm9uLWFscGhhbnVtKS4KLSAgICBzMyA9 IGluY2x1ZGUgc3RyaW5nIChOVUxMIHRvIGFjY2VwdCBkZWZhdWx0ID0gYWxsIGFscGhhbnVtKS4K LSAgICBuMiA9IGdyb3VwaW5nIG1hc2sgKE9SIGRlc2lyZWQgb25lcyB0b2dldGhlcik6Ci0gICAg ICAgICAxID0gZG91YmxlcXVvdGVzLCAgMiA9IGJyYWNlcywgICAgNCA9IGFwb3N0cm9waGVzLAot ICAgICAgICAgOCA9IHBhcmVucywgICAgICAgMTYgPSBicmFja2V0cywgMzIgPSBhbmdsZSBicmFj a2V0cywKLSAgICAgICAgLTEgPSA2MyA9IGFsbCBvZiB0aGVzZS4KLSAgICBuMyA9IGdyb3VwIHF1 b3RlIGNoYXJhY3RlciwgQVNDSUkgdmFsdWUsIHVzZWQgYW5kIHRlc3RlZCBvbmx5IGZvcgotICAg ICAgICAgTElTUCBxdW90ZSwgZS5nLiAoYSAnYiBjICcoZCBlIGYpKS4KLSAgICBuNCA9IDAgdG8g Y29sbGFwc2UgYWRqYWNlbnQgc2VwYXJhdG9yczsKLSAgICAgICAgIG5vbnplcm8gbm90IHRvIGNv bGxhcHNlIHRoZW0uCi0KLSAgUmV0dXJuczoKLSAgICBQb2ludGVyIHRvIHN0cnVjdCBzdHJpbmdh cnJheSwgd2l0aCBzaXplOgotICAgICAgLTEgPSBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvci4KLSAg ICAgIC0yID0gdG9vIG1hbnkgd29yZHMgaW4gc3RyaW5nLgotICAgICAgIG4gPSBudW1iZXIgb2Yg d29yZHMgKDAgb3IgbW9yZSkuCi0KLSAgV2l0aDoKLSAgICB3b3JkYXJyYXkgPSBhcnJheSBvZiBw b2ludGVycyB0byBuIHdvcmRzIChuID09IDEgaWYgZmMgPT0gMCksIDEtYmFzZWQuCi0gICAgRWFj aCBwb2ludGVyIGlzIHRvIGEgbWFsbG9jJ2Qgc3RyaW5nLiAgVGhpcyBhcnJheSBpcyByZWN5Y2xl ZCB1cG9uIGVhY2gKLSAgICBjYWxsOyBpZiB5b3UgbmVlZCB0byBrZWVwIHRoZSBzdHJpbmdzLCBt YWtlIGNvcGllcyBvZiB0aGVtLiAgVGhpcyByb3V0aW5lCi0gICAgbXVzdCBoYXZlIGNvbnRyb2wg b2YgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLgotCi0gIElmIGEgZ2l2ZW4gY2hhcmFjdGVy IGlzIGluY2x1ZGVkIGluIHRoZSBpbmNsdWRlIGxpc3QsIGl0IGlzIG5vdCB0cmVhdGVkCi0gIGFz IGEgc2VwYXJhdG9yIG9yIGFzIGEgZ3JvdXBpbmcgY2hhcmFjdGVyLgotCi0gIEdyb3VwcyBtYXkg YmUgbmVzdGVkIG9ubHkgaWYgdGhleSBhcmUgZm9ybWVkIHdpdGggYnJhY2VzLCBwYXJlbnMsIG9y Ci0gIGJyYWNrZXRzLCBidXQgbm90IHdpdGggcXVvdGVzIG9yIGFwb3N0cm9waGVzIHNpbmNlIEFT Q0lJIHF1b3RlcyBoYXZlIG5vCi0gIGludHJpbnNpYyBoYW5kZWRuZXNzLiAgR3JvdXAtc3RhcnQg YW5kIGVuZCBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzCi0gIHNlcGFyYXRvcnMgZXZlbiBpbiB0 aGUgYWJzZW5jZSBvZiBvdGhlciBzZXBhcmF0b3JzLCBzbyBhIHN0cmluZyBzdWNoIGFzCi0gICJh e2J9YyIgcmVzdWx0cyBpbiB0aHJlZSB3b3Jkcywgbm90IG9uZS4KLQotICBTYW1wbGUgY2FsbCB0 byBzcGxpdCBhIHN0cmluZyBpbnRvIGFuIGFycmF5OgotICAgIHN0cnVjdCBzdHJpbmdhcnJheSAq IHE7Ci0gICAgcSA9IGNrc3BsaXQoMSwwLHMxLHMyLHMzLC0xLDApOwotICAgICAgICBxLT5hX3Np emUgPSBzaXplICg+PTApIG9yIGZhaWx1cmUgY29kZSAoPDApCi0gICAgICAgIHEtPmFfaGVhZCA9 IHBvaW50ZXIgdG8gYXJyYXkgKGVsZW1lbnRzIDAgdGhydSBxLT5hc2l6ZSAtIDEpLgotCi0gIFNh bXBsZSBjYWxsIHRvIGV4dHJhY3Qgd29yZCBuIGZyb20gYSBzdHJpbmc6Ci0gICAgc3RydWN0IHN0 cmluZ2FycmF5ICogcTsKLSAgICBxID0gY2tzcGxpdCgwLG4sczEsczIsczMsLTEsMCk7Ci0gICAg ICAgIHEtPmFfc2l6ZSA9IHNpemUgKDEpIG9yIGZhaWx1cmUgY29kZSAoPDApCi0gICAgICAgIHEt PmFfaGVhZCA9IHBvaW50ZXIgdG8gYXJyYXkgKGVsZW1lbnQgMSBpcyB0aGUgZGVzaXJlZCB3b3Jk KS4KLSovCi0KLS8qIFN0YXRlcyAqLwotCi0jZGVmaW5lIFNUX0JXICAwCQkJLyogQmV0d2VlbiBX b3JkcyAqLwotI2RlZmluZSBTVF9JVyAgMQkJCS8qIEluIFdvcmQgKi8KLSNkZWZpbmUgU1RfSUcg IDIJCQkvKiBTdGFydCBHcm91cCAqLwotCi0vKiBDaGFyYWN0ZXIgQ2xhc3NlcyAoYml0bWFwKSAq LwotCi0jZGVmaW5lIENMX1NFUCAxCQkJLyogU2VwYXJhdG9yICovCi0jZGVmaW5lIENMX09QTiAy CQkJLyogR3JvdXAgT3BlbiAqLwotI2RlZmluZSBDTF9DTFMgNAkJCS8qIEdyb3VwIENsb3NlICov Ci0jZGVmaW5lIENMX0RBVCA4CQkJLyogRGF0YSAqLwotI2RlZmluZSBDTF9RVU8gMTYJCQkvKiBH cm91cCBxdW90ZSAqLwotCi0jaWZkZWYgQklHQlVGT0sKLSNpZm5kZWYgTUFYV09SRFMKLSNkZWZp bmUgTUFYV09SRFMgNDA5NgkJCS8qIE1heCBudW1iZXIgb2Ygd29yZHMgKi8KLSNlbmRpZiAvKiBN QVhXT1JEUyAqLwotI2lmbmRlZiBORVNUTUFYCi0jZGVmaW5lIE5FU1RNQVggNjQJCQkvKiBNYXhp bXVtIG5lc3RpbmcgbGV2ZWwgKi8KLSNlbmRpZiAvKiBORVNUTUFYICovCi0jZWxzZQotI2lmbmRl ZiBNQVhXT1JEUwotI2RlZmluZSBNQVhXT1JEUyAxMjgJCQkvKiBNYXggbnVtYmVyIG9mIHdvcmRz ICovCi0jZW5kaWYgLyogTUFYV09SRFMgKi8KLSNpZm5kZWYgTkVTVE1BWAotI2RlZmluZSBORVNU TUFYIDE2CQkJLyogTWF4aW11bSBuZXN0aW5nIGxldmVsICovCi0jZW5kaWYgLyogTkVTVE1BWCAq LwotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0KLS8qIHN0YXRpYyAqLyBjaGFyICoqIHdvcmRhcnJh eSA9IE5VTEw7CS8qIFJlc3VsdCBhcnJheSBvZiB3b3JkIHBvaW50ZXJzICovCi0KLXN0YXRpYyBz dHJ1Y3Qgc3RyaW5nYXJyYXkgY2tfc3ZhbCA9ICB7CS8qIFJldHVybiB2YWx1ZSBzdHJ1Y3R1cmUg Ki8KLSAgICBOVUxMLAkJCQkvKiBQb2ludGVyIHRvIGFycmF5ICovCi0gICAgMAkJCQkJLyogU2l6 ZSAqLwotfTsKLXN0YXRpYyBpbnQgKiB3b3Jkc2l6ZSA9IE5VTEw7Ci0KLXN0YXRpYyBWT0lECi1z ZXR3b3JkKG4scyxsZW4pIGludCBuLCBsZW47IGNoYXIgKiBzOyB7Ci0gICAgcmVnaXN0ZXIgY2hh ciAqIHA7Ci0gICAgcmVnaXN0ZXIgaW50IGksIGs7Ci0KLSAgICBpZiAoIXMpIHMgPSAiIjsKLQot ICAgIGlmICghd29yZGFycmF5KSB7CQkJLyogQWxsb2NhdGUgcmVzdWx0IGFycmF5IChvbmx5IG9u Y2UpICovCi0JaWYgKCEod29yZGFycmF5ID0gKGNoYXIgKiopbWFsbG9jKChNQVhXT1JEUysxKSAq IHNpemVvZihjaGFyICopKSkpCi0JICByZXR1cm47Ci0JaWYgKCEod29yZHNpemUgPSAoaW50ICop bWFsbG9jKChNQVhXT1JEUysxKSAqIHNpemVvZihpbnQpKSkpCi0JICByZXR1cm47Ci0JZm9yIChp ID0gMDsgaSA8PSBNQVhXT1JEUzsgaSsrKQl7IC8qIEluaXRpYWxpemUgcmVzdWx0IGFycmF5ICov Ci0JICAgIHdvcmRhcnJheVtpXSA9IE5VTEw7Ci0JICAgIHdvcmRzaXplW2ldID0gMDsKLQl9Ci0g ICAgfQotICAgIGlmICh3b3Jkc2l6ZVtuXSA8IGxlbiAvKiB8fCAhd29yZGFycmF5W25dICovICkg ewotCWsgPSAobGVuIDwgMTYpID8gMTYgOiBsZW4gKyAobGVuIC8gNCk7Ci0Jd29yZGFycmF5W25d ID0gKGNoYXIgKikgbWFsbG9jKGsrMSk7Ci0Jd29yZHNpemVbbl0gPSAod29yZGFycmF5W25dKSA/ IGsgOiAwOwotCWlmICh3b3JkYXJyYXlbbl0pIHsKLQkgICAgcCA9IHdvcmRhcnJheVtuXTsKLQkg ICAgd2hpbGUgKCgqcCsrID0gKnMrKykgJiYgay0tID4gMCkgOwotCX0KLSAgICB9IGVsc2UgaWYg KGxlbiA+IDApIHsKLQlrID0gd29yZHNpemVbbl07CQkvKiAoSW4gY2FzZSBsZW4gYXJnIGlzIGEg bGllKSAqLwotCXAgPSB3b3JkYXJyYXlbbl07Ci0Jd2hpbGUgKCgqcCsrID0gKnMrKykgJiYgay0t ID4gMCkgewotI2lmZGVmIENPTU1FTlQKLQkgICAgaWYgKCgqKHMtMSkgPT0gQ01EUSkgJiYgKnMg IT0gQ01EUSkgewotCQlrKys7Ci0JCXAtLTsKLQkgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8K LQl9Ci0gICAgfSBlbHNlIGlmICh3b3JkYXJyYXlbbl0pIHsKLQl3b3JkYXJyYXlbbl1bMF0gPSBO VUw7Ci0gICAgfQotfQotCi1zdGF0aWMgY2hhciAqIHNwbGl0YnVmID0gTlVMTDsKLXN0YXRpYyBp bnQgbnNwbGl0YnVmID0gMDsKLQotLyogbjQgPSAxIHRvIE5PVCBjb2xsYXBzZSBhZGphY2VudCBz ZXBhcmF0b3JzICovCi0KLQotc3RydWN0IHN0cmluZ2FycmF5ICoKLWNrc3BsaXQoZmMsbjEsczEs czIsczMsbjIsbjMsbjQpIGludCBmYyxuMSxuMixuMyxuNDsgY2hhciAqczEsICpzMiwgKnMzOyB7 Ci0gICAgaW50IHNwbGl0dGluZyA9IDA7CQkJLyogV2hhdCBJIHdhcyBhc2tlZCB0byBkbyAqLwot ICAgIGludCBpLCBrLCBrbyA9IDAsIG4sIHgsIG1heCA9IE1BWFdPUkRTOyAvKiBXb3JrZXJzICov Ci0gICAgY2hhciAqIHMgPSBOVUxMLCAqIHNzLCAqIHA7CQkvKiBXb3JrZXJzICovCi0gICAgY2hh ciAqIHNlcCA9ICIiOwkJCS8qIERlZmF1bHQgYnJlYWsgc2V0ICovCi0gICAgY2hhciAqIG5vdHNl cCA9ICIiOwkJCS8qIERlZmF1bHQgaW5jbHVkZSBzZXQgKi8KLSAgICBpbnQgICAgZ3JvdXBpbmcg PSAwOwkJLyogR3JvdXBpbmcgb3B0aW9uICovCi0gICAgY2hhciAqIGdyX29wbiA9ICJcInsnKFs8 IjsJCS8qIEdyb3VwIG9wZW4gYnJhY2tldHMgKi8KLSAgICBjaGFyICogZ3JfY2xzID0gIlwifScp XT4iOwkJLyogR3JvdXAgY2xvc2UgYnJhY2tldHMgKi8KLSAgICBpbnQgICAgZ3Jfc3RrW05FU1RN QVhdOwkJLyogTmVzdGluZyBicmFja2V0IHN0YWNrICovCi0gICAgaW50ICAgIGdyX2x2bCA9IDA7 CQkJLyogTmVzdGluZyBsZXZlbCAqLwotICAgIGludCAgICB3b3JkbnVtID0gMDsJCQkvKiBDdXJy ZW50IHdvcmQgbnVtYmVyICovCi0gICAgQ0hBUiAgIGMgPSAnQSc7CQkJLyogQ3VycmVudCBjaGFy IChkdW1teSBzdGFydCB2YWx1ZSkgKi8KLSAgICBpbnQgICAgY2xhc3MgPSAwOwkJCS8qIEN1cnJl bnQgY2hhcmFjdGVyIGNsYXNzICovCi0gICAgaW50ICAgIHN0YXRlID0gU1RfQlc7CQkvKiBDdXJy ZW50IEZTQSBzdGF0ZSAqLwotICAgIGludCAgICBsZW4gPSAwOwkJCS8qIExlbmd0aCBvZiBjdXJy ZW50IHdvcmQgKi8KLSAgICBpbnQgICAgc2xlbiA9IDA7CQkJLyogTGVuZ3RoIG9mIHMxICovCi0g ICAgaW50ICAgIGdxdW90ZSA9IDA7CQkJLyogUXVvdGVkIGdyb3VwICovCi0gICAgaW50ICAgIGNx dW90ZSA9IDA7CQkJLyogUXVvdGVkIGNoYXJhY3RlciAqLwotICAgIGludCAgICBjb2xsYXBzZSA9 IDE7CQkvKiBDb2xsYXBzZSBhZGphY2VudCBzZXBhcmF0b3JzICovCi0gICAgaW50ICAgIGFsbCA9 IDA7CQkJLyogczMgPT0gQUxMICovCi0gICAgaW50ICAgIGNzdiA9IDA7CQkJLyogczMgPT0gQ1NW ICovCi0gICAgaW50ICAgIHRzdiA9IDA7CQkJLyogczMgPT0gVFNWICovCi0gICAgaW50ICAgIHBy ZXZzdGF0ZSA9IC0xOwotCi0gICAgdW5zaWduZWQgaW50IGhleDgwID0gMTI4OwotICAgIHVuc2ln bmVkIGludCBoZXhmZiA9IDI1NTsKLSAgICBDSEFSIG5vdHNlcGJ1ZlsyNTZdOwotCi0gICAgbm90 c2VwYnVmWzBdID0gTlVMOwkJCS8qIEtlZXAgc2V0IGZvciAiQUxMIiAqLwotICAgIGlmIChuNCkg Y29sbGFwc2UgPSAwOwkJLyogRG9uJ3QgY29sbGFwc2UgKi8KLQotICAgIGZvciAoaSA9IDA7IGkg PCBORVNUTUFYOyBpKyspCS8qIEluaXRpYWxpemUgbmVzdGluZyBzdGFjayAqLwotICAgICAgZ3Jf c3RrW2ldID0gMDsKLQotICAgIHNldHdvcmQoMSxOVUxMLDApOwotICAgIGNrX3N2YWwuYV9oZWFk ID0gd29yZGFycmF5OwkJLyogSW5pdGlhbGl6ZSByZXR1cm4gdmFsdWUgc3RydWN0ICovCi0gICAg Y2tfc3ZhbC5hX3NpemUgPSAwOwotCi0gICAgaWYgKCFzMSkgczEgPSAiIjsJCQkvKiBzMSA9IHNv dXJjZSBzdHJpbmcgKi8KLSAgICBpZiAoISpzMSkgewkJCQkvKiBJZiBub25lLCBub3RoaW5nIHRv IGRvICovCi0JcmV0dXJuKCZja19zdmFsKTsKLSAgICB9Ci0gICAgc3BsaXR0aW5nID0gZmM7CQkJ LyogT3VyIGpvYiAqLwotICAgIGlmIChzcGxpdHRpbmcpIHsJCQkvKiBJZiBzcGxpdHRpbmcgbiA9 IHdvcmQgY291bnQgKi8KLQluID0gMDsJCQkJLyogSW5pdGlhbGl6ZSBpdCAqLwotICAgIH0gZWxz ZSB7CQkJCS8qIE90aGVyd2lzZSAqLwotI2lmZGVmIENPTU1FTlQKLQlpZiAobjEgPCAxKSB7CQkJ LyogSWYgMCAob3IgbGVzcykgKi8KLQkgICAgY2tfc3ZhbC5hX3NpemUgPSAwOwkJLyogbm90aGlu ZyB0byBkby4gKi8KLQkgICAgcmV0dXJuKCZja19zdmFsKTsKLQl9Ci0jZWxzZQotCWlmIChuMSA9 PSAwKSB7CQkJLyogSWYgMCAqLwotCSAgICBja19zdmFsLmFfc2l6ZSA9IDA7CQkvKiBub3RoaW5n IHRvIGRvLiAqLwotCSAgICByZXR1cm4oJmNrX3N2YWwpOwotCX0KLSNlbmRpZgkvKiBDT01NRU5U ICovCi0JbiA9IG4xOwkJCQkvKiBuID0gZGVzaXJlZCB3b3JkIG51bWJlci4gKi8KLSAgICB9Ci0g ICAgc2xlbiA9IDA7CQkJCS8qIEdldCBsZW5ndGggb2YgczEgKi8KLSAgICBkZWJ1ZyhGMTExLCJj a3NwbGl0IixzMSxuKTsKLQotICAgIHAgPSBzMTsKLQotI2lmZGVmIENPTU1FTlQKLSAgICB3aGls ZSAoKnArKykgc2xlbisrOwkJLyogTWFrZSBwb2tlYWJsZSBjb3B5IG9mIHMxICovCi0gICAgaWYg KCFzcGxpdGJ1ZiB8fCBzbGVuID4gbnNwbGl0YnVmKSB7IC8qIEFsbG9jYXRlIGJ1ZmZlciBpZiBu ZWVkZWQgKi8KLQlpbnQgeHg7Ci0JaWYgKHNwbGl0YnVmKQotCSAgZnJlZShzcGxpdGJ1Zik7Ci0J eHggPSAoc2xlbiA8IDI1NSkgPyAyNTUgOiB4eCArICh4eCAvIDQpOwotCWRlYnVnKEYxMDEsImNr c3BsaXQgc3BsaXRidWYiLCIiLHh4KTsKLQlzcGxpdGJ1ZiA9IChjaGFyICopbWFsbG9jKHh4KzEp OwotCWlmICghc3BsaXRidWYpIHsJCS8qIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuLi4gKi8K LQkgICAgY2tfc3ZhbC5hX3NpemUgPSAtMTsKLQkgICAgcmV0dXJuKCZja19zdmFsKTsKLQl9Ci0J bnNwbGl0YnVmID0geHg7CQkJLyogUmVtZW1iZXIgc2l6ZSBvZiBidWZmZXIgKi8KLSAgICB9Ci0j ZWxzZQotLyoKLSAgVGhlIGlkZWEgaXMgdG8ganVzdCBjb3B5IHRoZSBzdHJpbmcgaW50byBzcGxp dGJ1ZiAoaWYgaXQgZXhpc3RzKS4gIFRoaXMKLSAgZ2l2ZXMgdXMgYm90aCB0aGUgY29weSBhbmQg dGhlIGxlbmd0aCBzbyB3ZSBvbmx5IG5lZWQgdG8gZ3JvdmVsIHRocm91Z2ggdGhlCi0gIHN0cmlu ZyBvbmNlIGluIG1vc3QgY2FzZXMuICBPbmx5IHdoZW4gc3BsaXRidWYgZG9lc24ndCBleGlzdCBv ciBpcyB0b28gc2hvcnQKLSAgZG8gd2UgcmUtbWFsbG9jKCksIHdoaWNoIHNob3VsZCBiZSB2ZXJ5 IGluZnJlcXVlbnQgc28gd2hvIGNhcmVzIGlmIHdlIGhhdmUKLSAgdG8gZ28gdGhyb3VnaCB0aGUg c3RyaW5nIGFnYWluIGluIHRoYXQgY2FzZS4KLSovCi0gICAgcCA9IHMxOwotICAgIHMgPSBzcGxp dGJ1ZjsKLSAgICBpZiAoc3BsaXRidWYpIHsJCQkvKiBNYWtlIHBva2VhYmxlIGNvcHkgb2YgczEg Ki8KLQl3aGlsZSAoKCpzKysgPSAqcCsrKSAmJiAoc2xlbisrIDwgbnNwbGl0YnVmKSkgLyogVHJ5 IHRvIGNvcHkgKi8KLQkgIDsKLSAgICB9Ci0gICAgaWYgKCFzcGxpdGJ1ZiB8fCBzbGVuID49IG5z cGxpdGJ1ZikgeyAvKiBOZWVkIHRvIGRvIG1vcmUuLi4gKi8KLQlpbnQgeHg7Ci0JaWYgKHNwbGl0 YnVmKQkJCS8qIEZyZWUgcHJldmlvdXMgYnVmIGlmIGFueSAqLwotCSAgZnJlZShzcGxpdGJ1Zik7 Ci0Jd2hpbGUgKCpwKyspIHNsZW4rKzsJCS8qIEdldCAocmVzdCBvZikgbGVuZ3RoICovCi0JeHgg PSAoc2xlbiA8IDI1NSkgPyAyNTUgOiBzbGVuICsgKHNsZW4gLyA0KTsgLyogU2l6ZSBvZiBuZXcg YnVmZmVyICovCi0Jc3BsaXRidWYgPSAoY2hhciAqKW1hbGxvYyh4eCsxKTsgLyogQWxsb2NhdGUg aXQgKi8KLQlpZiAoIXNwbGl0YnVmKSB7CQkgLyogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4u LiAqLwotCSAgICBja19zdmFsLmFfc2l6ZSA9IC0xOwotCSAgICByZXR1cm4oJmNrX3N2YWwpOwot CX0KLQluc3BsaXRidWYgPSB4eDsJCQkvKiBSZW1lbWJlciAobmV3KSBidWZmZXIgc2l6ZSAqLwot CXMgPSBzcGxpdGJ1ZjsKLQlwID0gczE7Ci0Jd2hpbGUgKCgqcysrID0gKnArKykpIDsKLSAgICB9 Ci0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgcyA9IHNwbGl0YnVmOwotICAgIHNlcCA9IHMy OwkJCQkvKiBzMiA9IGJyZWFrIHNldCAqLwotICAgIGlmICghc2VwKSBzZXAgPSAiIjsKLSAgICBu b3RzZXAgPSBzMzsJCQkvKiBzMyA9IGluY2x1ZGUgc2V0ICovCi0gICAgaWYgKCFub3RzZXApIHsK LQlub3RzZXAgPSAiIjsKLSAgICB9IGVsc2UgaWYgKChhbGwgPSAhY2tzdHJjbXAobm90c2VwLCJB TEwiLDMsMSkpIHx8Ci0JICAgICAgIChjc3YgPSAhY2tzdHJjbXAobm90c2VwLCJDU1YiLDMsMSkp IHx8Ci0JICAgICAgICh0c3YgPSAhY2tzdHJjbXAobm90c2VwLCJUU1YiLDMsMSkpKSB7Ci0JaW50 IGksIGZsYWc7IENIQVIgYzsKLQlpbnQgbiA9IDA7Ci0JY2hhciAqIHNzOwotCWlmICghYWxsICYm IChjc3YgfHwgdHN2KSkgewotCSAgICBhbGwgPSAxOwotCSAgICBjb2xsYXBzZSA9IDA7Ci0JfQot CWlmIChjc3YgfHwgdHN2KSB7Ci0JICAgIGFsbCA9IDE7Ci0JICAgIGNvbGxhcHNlID0gMDsKLQl9 Ci0JZm9yIChpID0gMTsgaSA8IDI1NjsgaSsrKSB7Ci0JICAgIGZsYWcgPSAwOwotCSAgICBzcyA9 IHNlcDsKLQkgICAgd2hpbGUgKGMgPSAqc3MrKyAmJiAhZmxhZykgewotCQlpZiAoYyA9PSBpKSBm bGFnKys7Ci0JICAgIH0KLQkgICAgaWYgKCFmbGFnKSBub3RzZXBidWZbbisrXSA9IGM7Ci0JfQot CW5vdHNlcGJ1ZltuXSA9IE5VTDsKLQlub3RzZXAgPSAoY2hhciAqKW5vdHNlcGJ1ZjsKLQlkZWJ1 ZyhGMTEwLCJDS01BVENIIE5PVFNFUEJVRiBBTEwiLG5vdHNlcCwwKTsKLSAgICB9Ci0gICAgaWYg KCpzICYmIGNzdikgewkJCS8qIEZvciBDU1Ygc2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KLSAg ICAgICAgd2hpbGUgKCpzID09IFNQIHx8ICpzID09IEhUKQotCSAgcysrOwotCWMgPSAqczsKLSAg ICB9Ci0gICAgaWYgKG4yID09IDAgJiYgY3N2KSBuMiA9IDE7CQkvKiBDU1YgaW1wbGllcyBkb3Vi bGVxdW90ZSBncm91cGluZyAqLwotICAgIGlmIChuMiA8IDApIG4yID0gNjM7CQkvKiBuMiA9IGdy b3VwaW5nIG1hc2sgKi8KLSAgICBncm91cGluZyA9IG4yOwotICAgIHAgPSAiIjsJCQkJLyogUG9p bnRlciB0byBjdXJyZW50IHdvcmQgKi8KLSAgICB3aGlsZSAoYykgewkJCQkvKiBMb29wIHRocm91 Z2ggc3RyaW5nICovCi0JYyA9ICpzOwotCWNsYXNzID0gMDsKLQlpZiAoIWNzdiAmJiAhdHN2KSB7 CQkvKiBmZGMgMjAxMC0xMi0zMCAqLwotCSAgICAvKiBJbiBDU1YgYW5kIFRTViBzcGxpdHRpbmcs IGJhY2tzbGFzaCBpcyBub3Qgc3BlY2lhbCAqLwotCSAgICBpZiAoIWNxdW90ZSAmJiBjID09IENN RFEpIHsJLyogSWYgQ01EUSAqLwotCQljcXVvdGUrKzsJCS8qIG5leHQgb25lIGlzIHF1b3RlZCAq LwotCQlnb3RvIG5leHRjOwkJLyogZ28gZ2V0IGl0ICovCi0JICAgIH0KLQotCX0KLQlpZiAoY3F1 b3RlICYmIGMgPT0gQ01EUSkgewkvKiBRdW90ZWQgQ01EUSBpcyBzcGVjaWFsICovCi0JICAgIGlm IChzdGF0ZSAhPSBTVF9CVykgewkvKiBiZWNhdXNlIGl0IGNhbiBzdGlsbCBzZXBhcmF0ZSAqLwot CQljaGFyICogczIgPSBzLTE7Ci0JCXdoaWxlIChzMiA+IHApIHsgKnMyID0gKihzMi0xKTsgczIt LTsgfQotCQlwKys7Ci0JICAgIH0KLQkgICAgY3F1b3RlID0gMDsKLQl9Ci0JaWYgKGNxdW90ZSkg ewkJCS8qIE90aGVyIHF1b3RlZCBjaGFyYWN0ZXIgKi8KLQkgICAgaWYgKHN0YXRlICE9IFNUX0JX KSB7CS8qIGNhbid0IHNlcGFyYXRlIG9yIGdyb3VwICovCi0JCWNoYXIgKiBzMiA9IHMtMTsKLQkJ d2hpbGUgKHMyID4gcCkgeyAqczIgPSAqKHMyLTEpOyBzMi0tOyB9Ci0JCXArKzsKLQkgICAgfQot CSAgICBjbGFzcyA9IENMX0RBVDsJCS8qIHNvIHRyZWF0IGl0IGFzIGRhdGEgKi8KLQkgICAgY3F1 b3RlID0gMDsKLQkgICAgeCA9IDE7Ci0JfSBlbHNlIHsJCQkvKiBDaGFyYWN0ZXIgaXMgbm90IHF1 b3RlZCAqLwotCSAgICBpZiAoIWFsbCAmJiBjIDwgU1ApIHsJLyogR2V0IGl0cyBjbGFzcyAqLwot CQl4ID0gMDsJCQkvKiB4ID09IDAgbWVhbnMgImlzIHNlcGFyYXRvciIgKi8KLQkgICAgfSBlbHNl IGlmICgqc2VwKSB7CQkvKiBCcmVhayBzZXQgZ2l2ZW4gKi8KLQkJc3MgPSBzZXA7Ci0JCXdoaWxl ICgqc3MgJiYgKnNzICE9IGMpIHNzKys7IC8qIChpbnN0ZWFkIG9mIGNrc3RyY2hyKCkpICovCi0J CXggPSAoKnNzICE9IGMpOwotCSAgICB9IGVsc2UgewkJCS8qIERlZmF1bHQgYnJlYWsgc2V0IGlz ICovCi0JCXggPSAoKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fCAvKiBhbGwgYnV0IGFscGhhbnVt ZXJpY3MgKi8KLQkJICAgICAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8Ci0JCSAgICAgKGMgPj0g J0EnICYmIGMgPD0gJ1onKSB8fAotCQkgICAgICgodW5zaWduZWQgaW50KWMgPj0gaGV4ODAgJiYg KHVuc2lnbmVkIGludCljIDw9IGhleGZmKQotCQkgICAgICk7Ci0JICAgIH0KLQkgICAgaWYgKHgg PT0gMCAmJiAqbm90c2VwICYmIGMpIHsgLyogSW5jbHVkZSBzZXQgaWYgZ2l2ZW4gKi8KLQkJc3Mg PSBub3RzZXA7Ci0JCXdoaWxlICgqc3MgJiYgKnNzICE9IGMpIHNzKys7IC8qIChpbnN0ZWFkIG9m IGNrc3RyY2hyKCkpICovCi0JCXggPSAoKnNzID09IGMpOwotCSAgICB9Ci0JICAgIGlmIChjID09 IG4zICYmIGdyb3VwaW5nICYmIHN0YXRlID09IFNUX0JXKSB7IC8qIEdyb3VwIHF1b3RlPyAqLwot CQljbGFzcyA9IENMX1FVTzsKLQkgICAgfSBlbHNlIHsKLQkJY2xhc3MgPSB4ID8gQ0xfREFUIDog Q0xfU0VQOyAvKiBDbGFzcyA9IGRhdGEgb3Igc2VwYXJhdG9yICovCi0JICAgIH0KLQkgICAgaWYg KGdyb3VwaW5nKSB7CQkvKiBHcm91cGluZz8gKi8KLQkJaW50IGo7CQkJLyogTG9vayBmb3IgZ3Jv dXAgc3RhcnQgKi8KLQkJZm9yIChrID0gMDsgayA8IDY7IGsrKykgeyAvKiBHcm91cC1zdGFydCBj aGFyPyAqLwotCQkgICAgaiA9IDEgPDwgazsJCS8qIEdldCBpdHMgbWFzayBiaXQgdmFsdWUgKi8K LQkJICAgIGlmIChncm91cGluZyAmIGopIHsKLQkJCWlmIChjID09IGdyX29wbltrXSkgeyAvKiBT ZWxlY3RlZCBncm91cCBvcGVuZXI/ICovCi0JCQkgICAga28gPSBrOwotCQkJICAgIGNsYXNzIHw9 IENMX09QTjsKLQkJCSAgICBpZiAoYyA9PSAnIicgfHwgYyA9PSAnXCcnKSB7IC8qIFRoZXNlIGNh biBhbHNvICovCi0JCQkJY2xhc3MgfD0gQ0xfQ0xTOyAgICAgICAgIC8qIGJlIGNsb3NlcnMgKi8K LQkJCQlicmVhazsKLQkJCSAgICB9Ci0JCQl9IGVsc2UgaWYgKGMgPT0gZ3JfY2xzW2tdKSB7IC8q IEdyb3VwIGNsb3Nlcj8gKi8KLQkJCSAgICBjbGFzcyB8PSBDTF9DTFM7Ci0JCQkgICAgYnJlYWs7 Ci0JCQl9Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotCX0KLQlkZWJ1ZyhGMDAwLCJja3NwbGl0IGNo YXIiLHMsYyk7Ci0JZGVidWcoRjEwMSwiY2tzcGxpdCBzdGF0ZSIsIiIsc3RhdGUpOwotCWRlYnVn KEYxMDEsImNrc3BsaXQgY2xhc3MiLCIiLGNsYXNzKTsKLQotCXN3aXRjaCAoc3RhdGUpIHsJCS8q IFN0YXRlIHN3aXRjaGVyLi4uICovCi0JICBjYXNlIFNUX0JXOgkJCS8qIEJFVFdFRU5XT1JEUyAq LwotCSAgICBpZiAoY2xhc3MgJiBDTF9PUE4pIHsJLyogR3JvdXAgb3BlbmVyICovCi0JCWlmIChn cl9sdmwgPT0gMCAmJiAhZ3F1b3RlKSB7IC8qIElmIG5vdCBpbiBncm91cCAqLwotCQkgICAgcCA9 IHM7CQkvKiBwb2ludCB0byBiZWdpbm5pbmcgb2Ygd29yZCAqLwotCQl9Ci0JCWdyX2x2bCsrOwkJ LyogUHVzaCBjbG9zZXIgb24gbmVzdGluZyBzdGFjayAqLwotCQlpZiAoZ3JfbHZsID49IE5FU1RN QVgpCi0JCSAgZ290byB4eHNwbGl0OwotCQlncl9zdGtbZ3JfbHZsXSA9IGdyX2Nsc1trb107Ci0J CXByZXZzdGF0ZSA9IHN0YXRlOwotCQlzdGF0ZSA9IFNUX0lHOwkJLyogU3dpdGNoIHRvIElOR1JP VVAgc3RhdGUgKi8KLQkgICAgfSBlbHNlIGlmIChjbGFzcyAmIENMX0RBVCkgeyAvKiBEYXRhIGNo YXJhY3RlciAqLwotCQlncl9sdmwgPSAwOwkJLyogQ2xlYXIgZ3JvdXAgbmVzdGluZyBzdGFjayAq LwotCQlncl9zdGtbZ3JfbHZsXSA9IDA7Ci0JCWxlbiA9IDA7Ci0JCXAgPSBzOwkJCS8qIFBvaW50 IHRvIGJlZ2lubmluZyBvZiB3b3JkICovCi0JCWlmIChncXVvdGUpIHsJCS8qIEFkanVzdCBmb3Ig cXVvdGUgKi8KLQkJICAgIGxlbisrOwotCQkgICAgcC0tOwotCQkgICAgZ3F1b3RlID0gMDsKLQkJ fQotCQlwcmV2c3RhdGUgPSBzdGF0ZTsKLQkJc3RhdGUgPSBTVF9JVzsJCS8qIFN3aXRjaCB0byBJ TldPUkQgc3RhdGUgKi8KLQkgICAgfSBlbHNlIGlmIChjbGFzcyAmIENMX1FVTykgeyAvKiBHcm91 cCBxdW90ZSAqLwotCQlncXVvdGUgPSBncl9sdmwrMTsJLyogUmVtZW1iZXIgcXVvdGVkIGxldmVs ICovCi0JCXAgPSBzIC0gMTsKLQkJbGVuID0gMTsKLQkgICAgfQotCSAgICBpZiAoY29sbGFwc2Up Ci0JICAgICAgYnJlYWs7Ci0KLQkgIGNhc2UgU1RfSVc6CQkJLyogSU5XT1JEIChidXQgbm90IGlu IGEgZ3JvdXApICovCi0JICAgIGlmIChjbGFzcyAmIENMX1NFUCkgewkvKiBFbmRzIG9uIGFueSBr aW5kIG9mIHNlcGFyYXRvciAqLwotCQkqcyA9IE5VTDsJCS8qIFRlcm1pbmF0ZSB0aGlzIHdvcmQg Ki8KLQkJaWYgKGNzdikgewkJLyogSWYgY29tbWEtc2VwYXJhdGVkIGxpc3QgKi8KLQkJICAgIGNo YXIgKiBzMiA9IHM7CS8qIGRpc2NhcmQgc3Vycm91bmRpbmcgc3BhY2VzICovCi0JCSAgICB3aGls ZSAoczIgPiBzcGxpdGJ1ZikgeyAvKiBmaXJzdCBiYWNrd2FyZHMuLi4gKi8KLQkJCXMyLS07Ci0J CQlpZiAoKnMyID09IFNQIHx8ICpzMiA9PSBIVCkKLQkJCSAgKnMyID0gTlVMOwotCQkJZWxzZQot CQkJICBicmVhazsKLQkJICAgIH0KLQkJICAgIHMyID0gcysxOwkJLyogVGhlbiBmb3J3YXJkcy4u LiAqLwotCQkgICAgd2hpbGUgKCpzMiAmJiAoKnMyID09IFNQIHx8ICpzMiA9PSBIVCkpCi0JCSAg ICAgICpzMisrOwotCQkgICAgcyA9IHMyLTE7Ci0JCX0KLQkJaWYgKCFjc3YgfHwgcHJldnN0YXRl ICE9IFNUX0lHKSB7Ci0JCSAgICB3b3JkbnVtKys7CQkgICAgICAvKiBDb3VudCBpdCAqLwotCQkg ICAgaWYgKHNwbGl0dGluZyB8fCBuIDwgMCkgeyAvKiBEaXNwb3NlIG9mIGl0IGFwcHJvcHJpYXRl bHkgKi8KLQkJCWlmICh3b3JkbnVtID4gbWF4KSB7ICAvKiBBZGQgdG8gYXJyYXkgaWYgc3BsaXR0 aW5nICovCi0JCQkgICAgY2tfc3ZhbC5hX3NpemUgPSAtMjsKLQkJCSAgICByZXR1cm4oJmNrX3N2 YWwpOwotCQkJfQotCQkJLyogVGhpcyBpbmVsZWdhbnQgYml0IGNvcnJlY3RzIGFuIGVkZ2UgY29u ZGl0aW9uICovCi0JCQlpZiAoY3N2ICYmICEqcCAmJiAoIWMgfHwgISoocysxKSkpIHsKLQkJCSAg ICB3b3JkbnVtLS07Ci0JCQl9IGVsc2UgewotCQkJICAgIHNldHdvcmQod29yZG51bSxwLGxlbik7 Ci0JCQl9Ci0JCSAgICB9IGVsc2UgaWYgKHdvcmRudW0gPT0gbikgeyAvKiBTZWFyY2hpbmcgZm9y IHdvcmQgbiAqLwotCQkJc2V0d29yZCgxLHAsbGVuKTsKLQkJCWNrX3N2YWwuYV9zaXplID0gMTsK LQkJCXJldHVybigmY2tfc3ZhbCk7Ci0JCSAgICB9Ci0JCX0KLQkJcHJldnN0YXRlID0gc3RhdGU7 Ci0JCXN0YXRlID0gU1RfQlc7CQkvKiBTd2l0Y2ggdG8gQkVUV0VFTldPUkRTIHN0YXRlICovCi0J CWxlbiA9IDA7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgU1RfSUc6CQkJLyogSU5H Uk9VUCAqLwotCSAgICBpZiAoY2xhc3MgJiBDTF9DTFMpIHsJLyogSGF2ZSBncm91cCBjbG9zZXI/ ICovCi0JCWlmIChjc3YpIHsKLQkJICAgIGlmICgqKHMrMSkgPT0gYykgewotCQkJY2hhciAqczIg PSBzOwotCQkJd2hpbGUgKCgqczIgPSAqKHMyKzEpKSkgczIrKzsKLQkJCXMrKzsKLQkJCWMgPSAq czsKLQkJICAgIH0KLQkJfQotCQlpZiAoYyA9PSBncl9zdGtbZ3JfbHZsXSkgeyAvKiBEb2VzIGl0 IG1hdGNoIGN1cnJlbnQgb3BlbmVyPyAqLwotCQkgICAgZ3JfbHZsLS07CQkgICAvKiBZZXMsIHBv cCBzdGFjayAqLwotCQkgICAgaWYgKGdyX2x2bCA8IDApCSAgIC8qIERvbid0IHBvcCBpdCB0b28g bXVjaCAqLwotCQkgICAgICBncl9sdmwgPSAwOwotCQkgICAgaWYgKGdyX2x2bCA9PSAwKSB7CS8q IElmIGF0IHRvcCBvZiBzdGFjayAqLwotCQkJaWYgKGdxdW90ZSkKLQkJCSAgcysrOwotCQkJYyA9 ICpzOwotCQkJKnMgPSBOVUw7CS8qIHdlIGhhdmUgd29yZC4gKi8KLQkJCXdvcmRudW0rKzsJLyog Q291bnQgYW5kIGRpc3Bvc2Ugb2YgaXQuICovCi0JCQlsZW4tLTsKLQkJCWlmIChzcGxpdHRpbmcg fHwgbiA8IDApIHsKLQkJCSAgICBpZiAod29yZG51bSA+IG1heCkgewotCQkJCWNrX3N2YWwuYV9z aXplID0gLTI7Ci0JCQkJcmV0dXJuKCZja19zdmFsKTsKLQkJCSAgICB9Ci0JCQkgICAgc2V0d29y ZCh3b3JkbnVtLHArMSxsZW4pOwotCQkJfSBlbHNlIGlmICh3b3JkbnVtID09IG4pIHsKLQkJCSAg ICBzZXR3b3JkKDEscCsxLGxlbik7Ci0JCQkgICAgY2tfc3ZhbC5hX3NpemUgPSAxOwotCQkJICAg IHJldHVybigmY2tfc3ZhbCk7Ci0JCQl9Ci0JCQlwcmV2c3RhdGUgPSBzdGF0ZTsKLQkJCXN0YXRl ID0gU1RfQlc7CS8qIFN3aXRjaCB0byBCRVRXRUVOV09SRFMgc3RhdGUgKi8KLQkJCWxlbiA9IDA7 Ci0JCSAgICB9Ci0JCSAgICBpZiAoZ3JfbHZsIDwgZ3F1b3RlKQotCQkgICAgICBncXVvdGUgPSAw OwotCQl9Ci0JICAgIH0gZWxzZSBpZiAoY2xhc3MgJiBDTF9PUE4pIHsgLyogSGF2ZSBncm91cCBv cGVuZXIgKi8KLQkJZ3JfbHZsKys7CQkgLyogUHVzaCBvbiBuZXN0aW5nIHN0YWNrICovCi0JCWlm IChncl9sdmwgPj0gTkVTVE1BWCkgZ290byB4eHNwbGl0OwotCQlncl9zdGtbZ3JfbHZsXSA9IGdy X2Nsc1trb107Ci0JICAgIH0KLQl9IC8qIHN3aXRjaCAqLwotCi0gICAgICBuZXh0YzoKLQlzKys7 CQkJCS8qIE5leHQgY2hhciAqLwotCWlmIChzdGF0ZSkKLQkgIGxlbisrOwotICAgIH0gLyogd2hp bGUgKGMpICovCi0KLSAgICBpZiAoZ3JfbHZsID4gMCkgewkJCS8qIEluIGNhc2Ugb2YgYW4gdW5j bG9zZWQgZ3JvdXAgKi8KLQlpZiAoc3BsaXR0aW5nIHx8IG4gPCAwKSB7CS8qIG1ha2UgaXQgdGhl IGxhc3Qgd29yZC4gKi8KLQkgICAgaWYgKCsrd29yZG51bSA+IG1heCkgewotCQlja19zdmFsLmFf c2l6ZSA9IC0yOwotCQlyZXR1cm4oJmNrX3N2YWwpOwotCSAgICB9Ci0JICAgIHNldHdvcmQod29y ZG51bSxwKzEsbGVuKTsKLQl9IGVsc2UgaWYgKHdvcmRudW0gPT0gbikgewkvKiBDb3VudGluZyBm cm9tIGxlZnQgKi8KLQkgICAgc2V0d29yZCgxLHArMSxsZW4pOwotCSAgICBja19zdmFsLmFfc2l6 ZSA9IDE7Ci0JICAgIHJldHVybigmY2tfc3ZhbCk7Ci0JfSBlbHNlIAlpZiAobiA8IDAgJiYgKHdv cmRudW0gKyBuID4gLTEpKSB7IC8qIENvdW50aW5nIGZyb20gcmlnaHQgKi8KLQkgICAgY2hhciAq IHMgPSB3b3JkYXJyYXlbd29yZG51bSArIG4gKyAxXTsKLQkgICAgaWYgKCFzKSBzID0gIiI7Ci0J ICAgIHNldHdvcmQoMSxzLHN0cmxlbihzKSk7Ci0JICAgIGNrX3N2YWwuYV9zaXplID0gMTsKLQkg ICAgcmV0dXJuKCZja19zdmFsKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIXNwbGl0dGlu ZykgewkJCS8qIEZ3b3JkLi4uICovCi0JaWYgKG4gPCAwICYmICh3b3JkbnVtICsgbiA+IC0xKSkg eyAvKiBDb3VudGluZyBmcm9tIHJpZ2h0ICovCi0JICAgIGNoYXIgKiBzID0gd29yZGFycmF5W3dv cmRudW0gKyBuICsgMV07Ci0JICAgIGlmICghcykgcyA9ICIiOwotCSAgICBzZXR3b3JkKDEscyxz dHJsZW4ocykpOwotCSAgICBja19zdmFsLmFfc2l6ZSA9IDE7Ci0JICAgIHJldHVybigmY2tfc3Zh bCk7Ci0gICAgICAgIH0KLQlzZXR3b3JkKDEsTlVMTCwwKTsJCS8qIEZyb20gbGVmdC4uLiAqLwot CWNrX3N2YWwuYV9zaXplID0gMDsJCS8qIGJ1dCB0aGVyZSB3ZXJlbid0IG4gd29yZHMgKi8KLQly ZXR1cm4oJmNrX3N2YWwpOwotICAgIH0gZWxzZSB7CQkJCS8qIFN1Y2NlZWQgb3RoZXJ3aXNlICov Ci0JY2tfc3ZhbC5hX3NpemUgPSB3b3JkbnVtOwotLyogCi0gIEFsd2F5cyBwdXQgYSBudWxsIGVs ZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkuICBJdCBkb2VzIG5vIGhhcm0gaW4KLSAgdGhl IG5vcm1hbCBjYXNlLCBhbmQgaXQncyByZXF1aXJlZCBpZiB3ZSdyZSBtYWtpbmcgYW4gYXJndltd IGFycmF5IHRvIAotICBwYXNzIHRvIGV4ZWN2cCgpLiAgVGhpcyBlbGVtZW50IGlzIG5vdCBpbmNs dWRlZCBpbiB0aGUgY291bnQuCi0qLwotCWlmICh3b3JkbnVtIDwgTUFYV09SRFMpCi0gICAgICAg ICAgc2V0d29yZCh3b3JkbnVtKzEsTlVMTCwwKTsKLSAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICBp ZiAoZGVibG9nKSB7Ci0JZm9yIChpID0gMTsgaSA8PSB3b3JkbnVtOyBpKyspCi0JICBkZWJ1ZyhG MTExLCJja3NwbGl0IHJlc3VsdCIsd29yZGFycmF5W2ldLGkpOwotICAgIH0KLSNlbmRpZiAvKiBE RUJVRyAqLwotICAgIHJldHVybigmY2tfc3ZhbCk7Ci0KLSAgeHhzcGxpdDoJCQkJLyogRXJyb3Ig cmV0dXJuICovCi0gICAgY2tfc3ZhbC5hX3NpemUgPSAtMjsKLSAgICByZXR1cm4oJmNrX3N2YWwp OwotfQotCi0vKgotICBja2hleGJ5dGV0b2ludCgpIGV4cGVjdHMgYSBzdHJpbmcgb2YgdHdvIGhl eCBjaGFyYWN0ZXJzLAotICByZXR1cm5zIHRoZSBpbnQgZXF1aXZhbGVudCBvciAtMSBvbiBlcnJv ci4KLSovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2toZXhieXRldG9pbnQoIGNoYXIgKiBzICkK LSNlbHNlCi1ja2hleGJ5dGV0b2ludChzKSBjaGFyICogczsKLSNlbmRpZgkvKiBDS19BTlNJQyAq LwotewotICAgIGludCBpLCBjWzJdOwotICAgIGlmICghcykgcmV0dXJuKC0xKTsKLSAgICBpZiAo KGludClzdHJsZW4ocykgIT0gMikgcmV0dXJuKC0xKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgMjsg aSsrKSB7Ci0JY1tpXSA9ICpzKys7Ci0JaWYgKCFjW2ldKSByZXR1cm4oLTEpOwotCWlmIChpc2xv d2VyKGNbaV0pKSBjW2ldID0gdG91cHBlcihjW2ldKTsKLQlpZiAoY1tpXSA+PSAnMCcgJiYgY1tp XSA8PSAnOScpIHsKLQkgICAgY1tpXSAtPSAweDMwOwotCX0gZWxzZSBpZiAoY1tpXSA+PSAnQScg JiYgY1tpXSA8PSAnRicpIHsKLQkgICAgY1tpXSAtPSAweDM3OwotCX0gZWxzZSB7Ci0JICAgIHJl dHVybigtMSk7Ci0JfQotICAgIH0KLSAgICByZXR1cm4oY1swXSAqIDE2ICsgY1sxXSk7Ci19Ci0K LQotLyogRW5kIG9mIGNrY2xpYi5jICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NsaWIuaCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2Vy bWl0LTkuMC4zMDIvY2tjbGliLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMDlj MGUuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9j a2NsaWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKiBja2NsaWIuaCAtLSBD LUtlcm1pdCBsaWJyYXJ5IHJvdXRpbmUgcHJvdG90eXBlcyAqLwotLyoKLSAgQXV0aG9yOiBGcmFu ayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKLSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2Fk ZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LgotCi0gIENvcHlyaWdodCAo QykgMjAwMiwgMjAwOSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRo ZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMt S2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhl IGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0qLwotI2lm bmRlZiBDS0NMSUJfSAotI2RlZmluZSBDS0NMSUJfSAotCi1zdHJ1Y3Qgc3RyaW5nYXJyYXkgewot ICAgIGNoYXIgKiogYV9oZWFkOwotICAgIGludCBhX3NpemU7Ci19OwotCi0jaWZkZWYgQ0tfQU5T SUMKLV9QUk9UT1RZUCggaW50IGNrc3RybmNweSwgKGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQp ICk7Ci1fUFJPVE9UWVAoIGludCBja3N0cm5jYXQsIChjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50 KSApOwotI2Vsc2UKLV9QUk9UT1RZUCggaW50IGNrc3RybmNweSwgKGNoYXIgKiwgY2hhciAqLCBp bnQpICk7Ci1fUFJPVE9UWVAoIGludCBja3N0cm5jYXQsIChjaGFyICosIGNoYXIgKiwgaW50KSAp OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0KLV9QUk9UT1RZUCggaW50IGNrbWFrbXNnLCAgKGNo YXIgKiwgaW50LCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICopICk7Ci1fUFJPVE9UWVAo IGludCBja21ha3htc2csIChjaGFyICosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICosCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIg KiwgY2hhciAqKSApOwotCi1fUFJPVE9UWVAoIGNoYXIgKiBja3N0cnBicmssIChjaGFyICosIGNo YXIgKikgKTsKLV9QUk9UT1RZUCggY2hhciAqIGNrc3Ryc3RyLCAoY2hhciAqLCBjaGFyICopICk7 Ci1fUFJPVE9UWVAoIGNoYXIgKiBjaGFydG9zdHIsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBj a2xvd2VyLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgY2t1cHBlciwgKGNoYXIgKikgKTsK LV9QUk9UT1RZUCggaW50IGNraW5kZXgsIChjaGFyICosIGNoYXIgKiwgaW50LCBpbnQsIGludCkg KTsKLV9QUk9UT1RZUCggY2hhciAqIGNrY3RvYSwgKGNoYXIpICk7Ci1fUFJPVE9UWVAoIGNoYXIg KiBja2N0b3gsIChDSEFSLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBja2l0b2EsIChpbnQp ICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBja3VpdG9hLCAodW5zaWduZWQgaW50KSApOwotX1BST1RP VFlQKCBjaGFyICogY2tsdG9hLCAobG9uZykgKTsKLV9QUk9UT1RZUCggY2hhciAqIGNrdWx0b2Es ICh1bnNpZ25lZCBsb25nKSApOwotX1BST1RPVFlQKCBjaGFyICogY2tmc3RvYSwgKENLX09GRl9U KSApOwotX1BST1RPVFlQKCBDS19PRkZfVCBja2F0b2ZzLCAoY2hhciAqKSApOwotX1BST1RPVFlQ KCBjaGFyICogY2tpdG94LCAoaW50KSApOwotX1BST1RPVFlQKCBjaGFyICogY2tsdG94LCAobG9u ZykgKTsKLV9QUk9UT1RZUCggaW50IGlzcGF0dGVybiwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCgg aW50IGNrbWF0Y2gsIChjaGFyICosIGNoYXIgKiwgaW50LCBpbnQgKSApOwotX1BST1RPVFlQKCBW T0lEIGNrbWVtY3B5LCAoY2hhciAqLCBjaGFyICosIGludCkgKTsKLV9QUk9UT1RZUCggY2hhciAq IGNrc3RyY2hyLCAoY2hhciAqLCBjaGFyKSApOwotX1BST1RPVFlQKCBjaGFyICogY2tzdHJyY2hy LCAoY2hhciAqLCBjaGFyKSApOwotX1BST1RPVFlQKCBpbnQgY2tyY2hhciwgKGNoYXIgKikgKTsK LV9QUk9UT1RZUCggaW50IGNrc3RyY21wLCAoY2hhciAqLCBjaGFyICosIGludCwgaW50KSApOwot I2RlZmluZSB4eHN0cmNtcChhLGIsYykgY2tzdHJjbXAoYSxiLGMsMCkKLV9QUk9UT1RZUCggaW50 IGNrc3RycHJlLCAoY2hhciAqLCBjaGFyICopICk7Ci1fUFJPVE9UWVAoIFZPSUQgc2hfc29ydCwg KGNoYXIgKiosIGNoYXIgKiosIGludCwgaW50LCBpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggY2hh ciAqIGJyc3RyaXAsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBmbnN0cmlwLCAoY2hh ciAqKSApOwotI2lmZGVmIENPTU1FTlQKLV9QUk9UT1RZUCggY2hhciAqIGJyYWNlLCAoY2hhciAq KSApOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLV9QUk9UT1RZUCggaW50IGRxdW90ZSwgKGNoYXIg KiwgaW50LCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCB1bnRhYmlmeSwgKGNoYXIgKiwgY2hhciAq LCBpbnQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgbWFrZWxpc3QsIChjaGFyICosIGNoYXIgKltdLCBp bnQpICk7Ci0jaWZuZGVmIENLX0FOU0lDCi1fUFJPVE9UWVAoIFZPSUQgbWFrZXN0ciwgKGNoYXIg KiosIGNoYXIgKikgKTsKLV9QUk9UT1RZUCggVk9JRCB4bWFrZXN0ciwgKGNoYXIgKiosIGNoYXIg KikgKTsKLSNlbHNlIC8qIENLX0FOU0lDICovCi1fUFJPVE9UWVAoIFZPSUQgbWFrZXN0ciwgKGNo YXIgKiosIGNvbnN0IGNoYXIgKikgKTsKLV9QUk9UT1RZUCggVk9JRCB4bWFrZXN0ciwgKGNoYXIg KiosIGNvbnN0IGNoYXIgKikgKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotX1BST1RPVFlQKCBp bnQgY2hrbnVtLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgcmRpZ2l0cywgKGNoYXIgKikg KTsKLV9QUk9UT1RZUCggY2hhciAqIGNrcmFkaXgsIChjaGFyICosaW50LGludCkgKTsKLQotLyog QmFzZS02NCBjb252ZXJzaW9uIG5lZWRlZCBmb3Igc2NyaXB0IHByb2dyYW1taW5nIGFuZCBIVFRQ ICovCi0KLSNpZm5kZWYgTk9CNjQKLV9QUk9UT1RZUCggaW50IGI4dG9iNjQsIChjaGFyICosaW50 LGNoYXIgKixpbnQpKTsKLV9QUk9UT1RZUCggaW50IGI2NHRvYjgsIChjaGFyICosaW50LGNoYXIg KixpbnQpKTsKLSNlbmRpZiAvKiBOT0I2NCAqLwotCi0jaWZkZWYgQ0tGTE9BVAotX1BST1RPVFlQ KCBpbnQgaXNmbG9hdCwgKGNoYXIgKixpbnQpICk7Ci0jaWZuZGVmIENLQ0xJQl9DCi0jaWZuZGVm IENLV0FSVF9DCi1leHRlcm4gQ0tGTE9BVCBmbG9hdHZhbDsKLSNlbmRpZiAvKiBDS1dBUlRfQyAq LwotI2VuZGlmIC8qIENLQ0xJQl9DICovCi0jZW5kaWYgLyogQ0tGTE9BVCAqLwotCi1fUFJPVE9U WVAoIGNoYXIgKiBwYXJuYW0sIChjaGFyKSApOwotX1BST1RPVFlQKCBjaGFyICpoaG1tc3MsIChs b25nKSApOwotCi1fUFJPVE9UWVAoIFZPSUQgbHNldCwgKGNoYXIgKiwgY2hhciAqLCBpbnQsIGlu dCkgKTsKLV9QUk9UT1RZUCggVk9JRCByc2V0LCAoY2hhciAqLCBjaGFyICosIGludCwgaW50KSAp OwotX1BST1RPVFlQKCBjaGFyICogdWxvbmd0b2hleCwgKHVuc2lnbmVkIGxvbmcsIGludCkgKTsK LV9QUk9UT1RZUCggbG9uZyBoZXh0b3Vsb25nLCAoY2hhciAqLCBpbnQpICk7Ci1fUFJPVE9UWVAo IHN0cnVjdCBzdHJpbmdhcnJheSAqIGNrc3BsaXQsIChpbnQsaW50LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLGNoYXIgKixjaGFyICosaW50LGludCxp bnQpICk7Ci0KLV9QUk9UT1RZUCggaW50IGNraGV4Ynl0ZXRvaW50LCAoY2hhciAqKSApOwotI2Vu ZGlmIC8qIENLQ0xJQl9IICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja2NtYWkuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2tjbWFpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NWQwYTAuLjAw MDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NtYWku YworKysgL2Rldi9udWxsCkBAIC0xLDM1ODAgKzAsMCBAQAotI2RlZmluZSBFRElUREFURSAgIjIw IEF1ZyAyMDExIgkJLyogTGFzdCBlZGl0IGRhdGUgZGQgbW1tIHl5eXkgKi8KLSNkZWZpbmUgRURJ VE5EQVRFICIyMDExMDgyMCIJCS8qIEtlZXAgdGhlbSBpbiBzeW5jICovCi0vKiBTYXQgQXVnIDIw IDE3OjIwOjE3IDIwMTEgKi8KLQotLyogY2tjbWFpLmMgLSBNYWluIHByb2dyYW0gZm9yIEMtS2Vy bWl0IHBsdXMgc29tZSBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucyAqLwotCi0vKgotICBja2NzeW0u aCBpcyB1c2VkIGZvciBmb3IgZGVmaW5pbmcgc3ltYm9scyB0aGF0IG5vcm1hbGx5IHdvdWxkIGJl IGRlZmluZWQKLSAgdXNpbmcgLUQgb3IgLWQgb24gdGhlIGNjIGNvbW1hbmQgbGluZSwgZm9yIHVz ZSB3aXRoIGNvbXBpbGVycyB0aGF0IGRvbid0Ci0gIHN1cHBvcnQgdGhpcyBmZWF0dXJlLiAgTXVz dCBjb21lIGJlZm9yZSBhbnkgdGVzdHMgZm9yIHByZXByb2Nlc3NvciBzeW1ib2xzLgotKi8KLSNp bmNsdWRlICJja2NzeW0uaCIKLS8qCi0gIENvbnNvbGlkYXRlZCBwcm9ncmFtIEMtS2VybWl0IHZl cnNpb24gaW5mb3JtYXRpb24gZm9yIGFsbCBwbGF0Zm9ybXMKLSAgKGJ1dCBmb3IgVU5JWCBhbHNv IHNlZSBja3V2ZXIuaCkuICBTZWUgbWFrZXZlcigpIGJlbG93IGZvciBob3cgdGhleSBhcmUgdXNl ZC4KLSovCi0jaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgLyogVW5jb21tZW50IHRo aXMgZm9yIHJlYWwgSzk1IHZlcnNpb24gKi8KLSNpZm5kZWYgT1MyCQkJCS8qIE9TMiBhY3R1YWxs eSBtZWFucyBLZXJtaXQgOTUuICovCi0jaWZuZGVmIEJFVEFURVNUCQkJLyogSXQncyBiZWNhdXNl IEtlcm1pdCA5NSBzdGFydGVkICovCi0jZGVmaW5lIEJFVEFURVNUCQkJLyogb3V0IGFzIEMtS2Vy bWl0IGZvciBPUy8yLiAqLwotI2VuZGlmIC8qIEJFVEFURVNUICovCi0jZW5kaWYgLyogT1MyICov Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgQkVUQVRFU1QKLSNpZmRlZiBPUzIKLSNp ZmRlZiBfX0RBVEVfXwotI2RlZmluZSBCRVRBREFURQotI2VuZGlmIC8qIF9fREFURV9fICovCi0j ZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQkVUQVRFU1QgKi8KLQotY2hhciAqIGNrX2NyeWVh ciA9ICIyMDExIjsgCQkvKiBDLUtlcm1pdCBjb3B5cmlnaHQgeWVhciAqLwotCi0jaWZuZGVmIE1B QwkJCQkvKiBNQUMgPSBLZXJtaXQgZm9yIE1BQyBPUyA2LCA3LCAuLi4gKi8KLS8qCi0gIE5vdGU6 IGluaXRpYWxpemUgY2tfc190ZXN0IHRvICIiIGlmIHRoaXMgaXMgbm90IGEgdGVzdCB2ZXJzaW9u LgotICBVc2UgKCpja19zX3Rlc3QgIT0gJ1wwJykgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcHJpbnQg dGVzdC1yZWxhdGVkIG1lc3NhZ2VzLgotKi8KLQotI2lmbmRlZiBCRVRBVEVTVAotI2lmbmRlZiBP UzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVOSVgsIFZNUywgZXRjLi4uIChpLmUu IEMtS2VybWl0KSAqLwotY2hhciAqY2tfc190ZXN0ID0gIiI7CQkJLyogIkRldiIsIkFscGhhIiwi QmV0YSIsIlJDIiwgb3IgIiIgKi8KLWNoYXIgKmNrX3NfdHZlciA9ICIiOwkJCS8qIFRlc3QgdmVy c2lvbiBudW1iZXIgb3IgIiIgKi8KLSNlbHNlICAvKiBPUzIgKi8KLWNoYXIgKmNrX3NfdGVzdCA9 ICIiOwkJCS8qIChpLmUuIEs5NSkgKi8KLWNoYXIgKmNrX3NfdHZlciA9ICIiOwotI2VuZGlmIC8q IE9TMiAqLwotI2Vsc2UKLWNoYXIgKmNrX3NfdGVzdCA9ICIiOwkJCS8qIERldmVsb3BtZW50ICov Ci1jaGFyICpja19zX3R2ZXIgPSAiIjsKLSNlbmRpZiAvKiBCRVRBVEVTVCAqLwotI2Vsc2UgLyog TUFDICovCi1jaGFyICpja19zX3Rlc3QgPSAiUHJlLUFscGhhIjsgICAgICAgICAgLyogTWFjIEtl cm1pdCBpcyBhbHdheXMgYSB0ZXN0Li4uICovCi1jaGFyICpja19zX3R2ZXIgPSAiIjsJCQkvKiAo cHJlIE1hYyBPUyBYIDEwLCB0aGF0IGlzISkgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQotI2lmZGVm IEJFVEFEQVRFICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGUgb2YgdGhpcyB2ZXJzaW9u IG9yIGVkaXQgKi8KLWNoYXIgKmNrX3NfZGF0ZSA9IF9fREFURV9fOyAgICAgICAgICAgICAvKiBD b21waWxhdGlvbiBkYXRlICovCi0jZWxzZQotY2hhciAqY2tfc19kYXRlID0gRURJVERBVEU7CQkv KiBTZWUgdG9wICovCi0KLSNlbmRpZiAvKiBCRVRBREFURSAqLwotY2hhciAqYnVpbGRpZCA9IEVE SVROREFURTsJCS8qIFNlZSB0b3AgKi8KLQotI2lmZGVmIFVOSVgKLXN0YXRpYyBjaGFyIHNjY3Np ZFtdID0gIkAoIylDLUtlcm1pdCA5LjAuMzAyIjsKLSNlbmRpZiAvKiBVTklYICovCi0KLS8qCi0g IFRoZSBDLUtlcm1pdCBWZXJzaW9uIG51bWJlciBpcyBtYWpvci5taW5vci5lZGl0IChpbnRlZ2Vy cykuCi0gIE1ham9yIHZlcnNpb24gYWx3YXlzIGdvZXMgdXAuCi0gIE1pbm9yIHZlcnNpb24gaXMg aGlzdG9yaWNhbCwgaGFzbid0IGJlZW4gdXNlZCBzaW5jZSBDLUtlcm1pdCA3LjEuCi0gIEVkaXQg aXMgc2VxdWVudGlhbCwgYWx3YXlzIGdvZXMgdXAsIGJ1dCB0aGVyZSBjYW4gYmUgZ2Fwcy4KLSAg Rm9yIGV4YW1wbGUgdGhlcmUgbWlnaHQgYmUgbWFueSBlZGl0cyBiZXR3ZWVuIHJlbGVhc2VzLgot ICBJZiB0aGUgbWFqb3IgZ29lcyB0byAxMCwgc29tZSB2ZXJzaW9uLW51bWJlci1iYXNlZCBmZWF0 dXJlIHRlc3RzCi0gIGNvdWxkIGZhaWwuICBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gdXNlIHRoZSBt aW5vciB2ZXJzaW9uIGZpZWxkCi0gIGZvciBmdXR1cmUgcmVsZWFzZXMuCi0qLwotCi1jaGFyICpj a19zX3ZlciA9ICI5LjAuMzAyIjsgICAgICAgICAgICAgLyogQy1LZXJtaXQgdmVyc2lvbiBzdHJp bmcgKi8KLWxvbmcgIGNrX2xfdmVyID0gIDkwMDMwMkw7ICAgICAgICAgICAgICAvKiBDLUtlcm1p dCB2ZXJzaW9uIG51bWJlciAqLwotCi0jaWZkZWYgT1MyCi1jaGFyICpja19zX3h2ZXIgPSAiMy4w LjAiOwkJLyogUHJvZHVjdC1zcGVjaWZpYyB2ZXJzaW9uIHN0cmluZyAqLwotbG9uZyAgY2tfbF94 dmVyID0gMzAwMEw7ICAgICAgICAgICAgICAgIC8qIFByb2R1Y3Qtc3BlY2lmaWMgdmVyc2lvbiBu dW1iZXIgKi8KLSNlbHNlCi0jaWZkZWYgTUFDCi1jaGFyICpja19zX3h2ZXIgPSAiMC45OTUiOyAg ICAgICAgICAgICAgLyogUHJvZHVjdC1zcGVjaWZpYyB2ZXJzaW9uIHN0cmluZyAqLwotbG9uZyAg Y2tfbF94dmVyID0gOTk1TDsgICAgICAgICAgICAgICAgIC8qIFByb2R1Y3Qtc3BlY2lmaWMgdmVy c2lvbiBudW1iZXIgKi8KLSNlbHNlCi1jaGFyICpja19zX3h2ZXIgPSAiIjsgICAgICAgICAgICAg ICAgICAgLyogRG9uJ3QgdG91Y2ggdGhlc2UuLi4gKi8KLWxvbmcgIGNrX2xfeHZlciA9IDBMOyAg ICAgICAgICAgICAgICAgICAvKiB0aGV5IGFyZSBjb21wdXRlZCBhdCBydW50aW1lICovCi0jZW5k aWYgLyogTUFDICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBPUzIKLSNpZmRlZiBJS1NE T05MWQotI2lmZGVmIE5UCi1jaGFyICpja19zX25hbWUgPSAiSUtTLU5UIjsKLSNlbHNlIC8qIE5U ICovCi1jaGFyICpja19zX25hbWUgPSAiSUtTLU9TLzIiOwotI2VuZGlmIC8qIE5UICovCi0jZWxz ZSAvKiBJS1NET05MWSAqLwotY2hhciAqY2tfc19uYW1lID0gIktlcm1pdCA5NSI7ICAgICAgICAg IC8qIFByb2dyYW0gbmFtZSAqLwotI2VuZGlmIC8qIElLU0RPTkxZICovCi0jZWxzZQotI2lmZGVm IE1BQwotY2hhciAqY2tfc19uYW1lID0gIk1hYyBLZXJtaXQiOwotI2Vsc2UKLWNoYXIgKmNrX3Nf bmFtZSA9ICJDLUtlcm1pdCI7Ci0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogT1MyICovCi0K LWNoYXIgKmNrX3Nfd2hvID0gIiI7ICAgICAgICAgICAgICAgICAgICAvKiBXaGVyZSBjdXN0b21p emVkLCAiIiA9IG5vdC4gKi8KLWNoYXIgKmNrX3BhdGNoID0gIiI7ICAgICAgICAgICAgICAgICAg ICAvKiBQYXRjaCBpbmZvLCBpZiBhbnkuICovCi0KLSNkZWZpbmUgQ0tWRVJMRU4gMTI4Ci1jaGFy IHZlcnNpb3hbQ0tWRVJMRU5dOyAgICAgICAgICAgICAgICAgLyogVmVyc2lvbiBzdHJpbmcgYnVm ZmVyICAqLwotY2hhciAqdmVyc2lvID0gdmVyc2lveDsgICAgICAgICAgICAgICAgIC8qIFRoZXNl IGFyZSBmaWxsZWQgaW4gYXQgKi8KLWxvbmcgdmVybnVtLCB4dmVybnVtOyAgICAgICAgICAgICAg ICAgICAvKiBydW50aW1lIGZyb20gYWJvdmUuICAgICovCi0KLSNkZWZpbmUgQ0tDTUFJCi0KLSNp bmNsdWRlICJja2Nhc2MuaCIgICAgICAgICAgICAgICAgICAgICAvKiBBU0NJSSBjaGFyYWN0ZXIg c3ltYm9scyAqLwotI2luY2x1ZGUgImNrY2RlYi5oIiAgICAgICAgICAgICAgICAgICAgIC8qIERl YnVnICYgb3RoZXIgc3ltYm9scyAqLwotCi1jaGFyICogbXluYW1lID0gTlVMTDsgICAgICAgICAg ICAgICAgICAgLyogVGhlIG5hbWUgSSBhbSBjYWxsZWQgYnkgKi8KLSNpZm5kZWYgT1MyCi1jaGFy ICogZXhlZGlyID0gTlVMTDsgICAgICAgICAgICAgICAgICAgLyogRGlyZWN0b3J5IEkgd2FzIGV4 ZWN1dGVkIGZyb20gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLWNoYXIgKiBteWhvbWUgPSBOVUxMOwkJ CS8qIEhvbWUgZGlyZWN0b3J5IG92ZXJyaWRlICovCi0KLS8qICBDIEsgQyBNIEEgSSAgLS0gIEMt S2VybWl0IE1haW4gcHJvZ3JhbSAgKi8KLQotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IChm ZGNAY29sdW1iaWEuZWR1KSwKLSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgY2l0eSBvZiBO ZXcgWW9yaywKLSAgQ29tcHV0ZXIgQ2VudGVyIC8gQ2VudGVyIGZvciBDb21wdXRpbmcgQWN0aXZp dGllcyAvIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kuCi0gIEkgYW0gbm8gbG9uZ2VyIGF0IENvbHVt YmlhIFUgYXMgb2YgMSBKdWx5IDIwMTEsIGJ1dCB0aGUgZW1haWwgYWRkcmVzcwotICBzaG91bGQg c3RpbGwgd29yay4gIFRoZSBLZXJtaXQgd2Vic2l0ZSBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVk dSBzaG91bGQKLSAgc3RpbGwgYmUgYXZhaWxhYmxlIGFuZCB1bmRlciBteSBjb250cm9sLCBhcyB3 ZWxsIGFzIHRoZSBLZXJtaXQgRlRQIHNpdGUsCi0gIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0Ly4KLQotQ09QWVJJR0hUIE5PVElDRToKLSovCi0KLWNoYXIgKmNvcHlyaWdodFtdID0g ewotCi0jaWZkZWYgcGRwMTEKLSJDb3B5cmlnaHQgKEMpIDE5ODUsICVzLCBUcnVzdGVlcyBvZiBD b2x1bWJpYSBVbml2ZXJzaXR5LCBOWUMuIiwKLSJBbGwgcmlnaHRzIHJlc2VydmVkLiIsCi0iICIs Ci0jZWxzZQotIkNvcHlyaWdodCAoQykgMTk4NSwgJXMsIiwKLSIgIFRoZSBUcnVzdGVlcyBvZiBD b2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLiIsCi0iICBBbGwgcmln aHRzIHJlc2VydmVkLiIsCi0iICIsCi0iUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IiwKLSJtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMiLAotImFyZSBt ZXQ6IiwKLSIgIiwKLSIgKyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodCIsCi0iICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiIsCi0iICIsCi0iICsgUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQi LAotIiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbiIsCi0iICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSIsCi0iICAgZGlzdHJpYnV0aW9uLiIsCi0iICIsCi0iICsg TmVpdGhlciB0aGUgbmFtZSBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2Yg aXRzIiwKLSIgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQiLAotIiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4iLAotIiAiLAotIlRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMiLAotIlwi QVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QiLAotIkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiIsCi0iQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQiLAotIkhPTERFUiBPUiBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwiLAotIlNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVCBOT1QiLAotIkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCIsCi0iREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIiwKLSJUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIiwKLSIoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UiLAotIk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIiwKLSNlbmRpZiAvKiBwZHAx MSAqLwotCi0jaWZkZWYgT1MyCi0iUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUsIFNl Y3VyZSBFbmRwb2ludHMgSW5jLCBOZXcgWW9yayBOWSBVU0EuIiwKLSJQb3J0aW9ucyBDb3B5cmln aHQgKEMpIDE5OTUsIE95IE9ubGluZSBTb2x1dGlvbnMgTHRkLiwgSnl2YXNreWxhLCBGaW5sYW5k LiIsCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotIlBvcnRp b25zIENvcHlyaWdodCAoQykgMTk5MCwgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5v bG9neS4iLAotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSJQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5 OTEsIDE5OTMgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiIsCi0iUG9y dGlvbnMgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1IGJ5IEFUJlQu IiwKLSJQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcsIEVyaWMgWW91bmcgPGVheUBj cnlwdG9zb2Z0LmNvbT4uIiwKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tf U1JQCi0iUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAxOTk3LCBTdGFuZm9yZCBVbml2ZXJzaXR5LiIs Ci0jZW5kaWYgLyogQ0tfU1JQICovCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQot I2lmbmRlZiBwZHAxMQotIiAiLAotIkZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCB2aXNpdCB0aGUg S2VybWl0IFByb2plY3Qgd2Vic2l0ZToiLAotImh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC8gLiIsCi0jZW5kaWYgLyogcGRwMTEgKi8KLSIifTsKLQotLyogV2luZG93cyBJS1NEIGNvcHly aWdodCB1c2VkIHRvIGJlIHNlcGFyYXRlICovCi1jaGFyICp3aWtzZGNwciA9IChjaGFyICopIGNv cHlyaWdodDsKLQotCi0vKgotRE9DVU1FTlRBVElPTjoKLQotICJVc2luZyBDLUtlcm1pdCIgYnkg RnJhbmsgZGEgQ3J1eiBhbmQgQ2hyaXN0aW5lIE0uIEdpYW5vbmUsCi0gIERpZ2l0YWwgUHJlc3Mg LyBCdXR0ZXJ3b3J0aC1IZWluZW1hbm4sIFdvYnVybiBNQSwgVVNBLgotICBTZWNvbmQgZWRpdGlv biAoMTk5NyksIElTQk4gMS01NTU1OC0xNjQtMS4KLSAgT3JkZXIgZnJvbSBEaWdpdGFsIFByZXNz OiAgICArMSAoODAwKSAzNjYtMjY2NQotICBPciBmcm9tIENvbHVtYmlhIFVuaXZlcnNpdHk6ICsx ICgyMTIpIDg1NC0zNzAzCi0KLUZvciBLZXJtaXQgOTUsIGFsc286Ci0KLSAgIktlcm1pdCA5NSIg YnkgQ2hyaXN0aW5lIE0uIEdpYW5vbmUgYW5kIEZyYW5rIGRhIENydXosCi0gIE1hbm5pbmcgUHVi bGljYXRpb25zLCBHcmVlbndpY2ggQ1QsIFVTQSAoMTk5OCkgLSBPbmxpbmUuCi0KLUFDS05PV0xF REdNRU5UUzoKLQotICBUaGUgS2VybWl0IGZpbGUgdHJhbnNmZXIgcHJvdG9jb2wgd2FzIGRldmVs b3BlZCBhdCB0aGUgQ29sdW1iaWEgVW5pdmVyc2l0eQotICBDZW50ZXIgZm9yIENvbXB1dGluZyBB Y3Rpdml0aWVzIChDVUNDQSksIHdoaWNoIHdhcyBzaW5jZSByZW5hbWVkIHRvIENvbHVtYmlhCi0g IFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcyAoQWNJUykgYW5kIGFmdGVy IHRoYXQgQ29sdW1iaWEKLSAgVW5pdmVyc2l0eSBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IChDVUlU KS4gIEtlcm1pdCBpcyBuYW1lZCBhZnRlciBLZXJtaXQgdGhlCi0gIEZyb2csIHN0YXIgb2YgdGhl IHRlbGV2aXNpb24gc2VyaWVzIFRIRSBNVVBQRVQgU0hPVzsgdGhlIG5hbWUgaXMgdXNlZCBieQot ICBwZXJtaXNzaW9uIG9mIEhlbnNvbiBBc3NvY2lhdGVzLCBJbmMuCi0KLSAgVGhhbmtzIHRvIGF0 IGxlYXN0IHRoZSBmb2xsb3dpbmcgcGVvcGxlIGZvciB0aGVpciBjb250cmlidXRpb25zIHRvIHRo aXMKLSAgcHJvZ3JhbSBvdmVyIHRoZSB5ZWFycywgYW5kIGFwb2xvZ2llcyB0byBhbnlvbmUgd2hv IHdhcyBpbmFkdmVydGFudGx5Ci0gIG9taXR0ZWQ6Ci0KLSAgIENocmlzIEFkaWUsIEVkaW5idXJn aCBVLCBTY290bGFuZCAoT1MvMikKLSAgIFJvYmVydCBBZHNldHQsIFVuaXZlcnNpdHkgb2YgV2F0 ZXJsb28sIENhbmFkYQotICAgTGFycnkgQWZyaW4sIENsZW1zb24gVQotICAgUnVzcyBBbGxiZXJ5 LCBTdGFuZm9yZCBVCi0gICBKZWZmcmV5IEFsdG1hbiwgQ29sdW1iaWEgVW5pdmVyc2l0eQotICAg R3JlZyBBbmRyZXdzLCBUZWxlYml0IENvcnAKLSAgIEJhcnJ5IEFyY2hlciwgVSBvZiBNaXNzb3Vy aQotICAgUm9iZXJ0IEFuZGVyc3NvbiwgSW50ZXJuYXRpb25hbCBTeXN0ZW1zIEEvUywgT3Nsbywg Tm9yd2F5Ci0gICBDaHJpcyBBcm1zdHJvbmcsIEJyb29raGF2ZW4gTmF0aW9uYWwgTGFiIChPUy8y KQotICAgV2lsbGlhbSBCYWRlciwgU29mdHdhcmUgQ29uc3VsdGluZyBTZXJ2aWNlcywgTmF6YXJl dGgsIFBBCi0gICBGdWF0IEJhcmFuLCBDb2x1bWJpYSBVCi0gICBTdGFuIEJhcmJlciwgUmljZSBV Ci0gICBKaW0gQmFyYm91ciwgVSBvZiBDb2xvcmFkbwotICAgRG9ubiBCYXVtZ2FydG5lciwgRGVs bAotICAgSWFuIEJlY2t3aXRoLCBEZWJpYW4gUHJvamVjdAotICAgTmVsc29uIEJlZWJlLCBVIG9m IFV0YWgKLSAgIEdlcnJ5IEJlbGFuZ2VyLCBDb2duaXRyb25pY3MKLSAgIEthcmwgQmVycnksIFVN QgotICAgTWFyayBCZXJyeW1hbiwgU0FJQwotICAgRGVhbiBXIEJldHRpbmdlciwgU1VOWQotICAg R2FyeSBCaWxrdXMKLSAgIFBldGVyIEJpbmRlcnVwLCBEZW5tYXJrCi0gICBEYXZpZCBCb2xlbiwg QWR2YW5jZWQgTmV0d29ya3MgYW5kIFNlcnZpY2VzLCBJbmMuCi0gICBKb29wIEJvbmVuCi0gICBN YXJjIEJvdWNoZXIsIFUgb2YgTW9udHJlYWwKLSAgIENoYXJsZXMgQnJvb2tzLCBFRE4KLSAgIEJv YiBCcm93bgotICAgTWlrZSBCcm93biwgUHVyZHVlIFUKLSAgIFJvYiBCcm93bgotICAgSmFjayBC cnlhbnMsIENhbGlmb3JuaWEgU3RhdGUgVSBhdCBMb25nIEJlYWNoCi0gICBNYXJrIEJ1ZGEsIERF QyAoVk1TKQotICAgRmVybmFuZG8gQ2FicmFsLCBQYWRyYW8gaVgsIEJyYXNpbGlhCi0gICBCam9y biBDYXJsc3NvbiwgU3RvY2tob2xtIFVuaXZlcnNpdHkgQ29tcHV0ZXIgQ2VudHJlIFFaLCBTd2Vk ZW4KLSAgIEJpbGwgQ2F0Y2hpbmdzLCAoZm9ybWVybHkgb2YpIENvbHVtYmlhIFUKLSAgIEJvYiBD YXR0YW5pLCBDb2x1bWJpYSBVIENTIERlcHQKLSAgIERhdmlkZSBDZXJ2b25lLCBSb2NoZXN0ZXIg VQotICAgU2V0aCBDaGFpa2xpbiwgRGVubWFyawotICAgSm9obiBDaGFuZGxlciwgSGFydmFyZCBV IC8gU21pdGhzb25pYW4gQXN0cm9ub21pY2FsIE9ic2VydmF0b3J5Ci0gICBCZXJuYXJkIENoZW4s IFVDTEEKLSAgIEFuZHJldyBBIENoZXJub3YsIFJFTENPTSBUZWFtLCBNb3Njb3cKLSAgIEpvaG4g TCBDaG1pZWxld3NraSwgQVQmVCwgTGlzbGUsIElMCi0gICBIb3dhcmQgQ2h1LCBVIG9mIE1pY2hp Z2FuCi0gICBCaWxsIENvYWxzb24sIE1jRG9ubmVsbCBEb3VnbGFzCi0gICBCZXJ0aWUgQ29vcGVy c21pdGgsIExvbmRvbgotICAgQ2hyaXN0aWFuIENvcnRpCi0gICBDaGV0IENyZWlkZXIsIFUgb2Yg V2VzdGVybiBPbnRhcmlvCi0gICBBbGFuIENyb3Nzd2VsbCwgQ29sdW1iaWEgVQotICAgSmVmZiBE YW1lbnMsIChmb3JtZXJseSBvZikgQ29sdW1iaWEgVQotICAgTWFyayBEYXZpZXMsIEJhdGggVSwg VUsKLSAgIFNpbi1pdGlyb3UgRGV6YXdhLCBGdWppZmlsbSwgSmFwYW4KLSAgIEpvZSBSLiBEb3Vw bmlrLCBVdGFoIFN0YXRlIFUKLSAgIEZyYW5rIERyZWFubywgSG9uZXl3ZWxsCi0gICBKb2huIER1 bmxhcCwgVSBvZiBXYXNoaW5ndG9uCi0gICBBbGV4IER1cHV5LCBTTUFSVC5DT00KLSAgIERhdmlk IER5Y2ssIEpvaG4gRmx1a2UgTWZnIENvLgotICAgU3RlZmFhbiBBLiBFZWNrZWxzLCBFdXJva29t LCBMdXhlbWJvdXJnCi0gICBOaWNrIEVmdGh5bWlvdQotICAgUGF1bCBFZ2dlcnQsIFR3aW4gU3Vu LCBJbmMuLCBFbCBTZWd1bmRvLCBDQQotICAgQmVybmllIEVpYmVuLCBERUMKLSAgIFBldGVyIEVp Y2hob3JuLCBBc3N5c3QgSW50ZXJuYXRpb25hbAotICAgS3Jpc3RvZmZlciBFcmlrc3NvbiwgUGVy aWRvdCBLb25zdWx0IEFCLCBPZXJlYnJvLCBTd2VkZW4KLSAgIEpvaG4gUi4gRXZhbnMsIElSUywg S2Fuc2FzIENpdHkKLSAgIEdsZW5uIEV2ZXJoYXJ0LCBSQ0EgTGFicwotICAgQ2hhcmxpZSBGaW5h biwgQ3JheSBSZXNlYXJjaAotICAgSGVybSBGaXNjaGVyLCBFbmNpbm8sIENBIChleHRlbnNpdmUg Y29udHJpYnV0aW9ucyB0byB2ZXJzaW9uIDQuMCkKLSAgIENhcmwgRm9uZ2hlaXNlciwgQ1dSVQot ICAgTWlrZSBGcmVlbWFuLCBCb25uZXZpbGxlIFBvd2VyIEF1dGhvcml0eQotICAgQ2FybCBGcmll ZGJlcmcKLSAgIE1hcmNlbGxvIEZydXRpZywgQ2F0aG9saWMgVW5pdmVyc2l0eSwgU2FvIFBhdWxv LCBCcmF6aWwgKFguMjUgc3VwcG9ydCkKLSAgIEhpcm9mdW1pIEZ1amlpLCBKYXBhbiBOYXQnbCBM YWIgZm9yIEhpZ2ggRW5lcmd5IFBoeXNpY3MsIFRva3lvIChLYW5qaSkKLSAgIENodWNrIEZ1bGxl ciwgV2VzdGluZ2hvdXNlIENvcnBvcmF0ZSBDb21wdXRlciBTZXJ2aWNlcwotICAgQW5keSBGeWZl LCBDYWx0ZWNoCi0gICBDaHJpc3RpbmUgTS4gR2lhbm9uZSwgQ29sdW1iaWEgVQotICAgSm9obiBH aWxtb3JlLCBVQyBCZXJrZWxleQotICAgTWFkaHVzdWRhbiBHaXl5YXJwdXJhbSwgSFAKLSAgIFJh aW5lciBHbGFzY2hpY2ssIFNpZW1lbnMgQUcsIFBhZGVyYm9ybgotICAgV2lsbGlhbSBILiBHbGFz cwotICAgR2VybWFuIEdvbGRzem1pZHQsIElCTQotICAgQ2h1Y2sgR29vZGhhcnQsIE5BU0EKLSAg IEFsaXN0YWlyIEdvcm1hbiwgTmV3IFplYWxhbmQKLSAgIFJpY2hhcmQgR3JhdGlvbiwgQURGQSwg QXVzdHJhbGlhCi0gICBDaHJpcyBHcmVlbiwgRXNzZXggVSwgVUsKLSAgIEFsYW4gR3JpZWcsIER1 bmRlZSBUZWNoLCBTY290bGFuZAotICAgWWVrdGEgR3Vyc2VsLCBNSVQKLSAgIEppbSBHdXl0b24s IFJhbmQgQ29ycAotICAgTWljaGFlbCBIYWVydGVsCi0gICBCcnVubyBIYWlibGUKLSAgIEJvYiBI YWluLCBVTU4KLSAgIE1hcmlvbiBIYWthbnNvbiwgT1JTVAotICAgUmljaGFyZCBIYW1pbHRvbgot ICAgSm9obiBIYW1pbHN0b24sIElvd2EgU3RhdGUgVQotICAgU2ltb24gSGFuaWEsIE5ldGhlcmxh bmRzCi0gICBTdGFuIEhhbmtzLCBSaWNlIFUuCi0gICBLZW4gSGFycmVuc3RlaW4sIFNSSQotICAg RXVnZW5pYSBIYXJyaXMsIERhdGEgR2VuZXJhbCAoQU9TL1ZTKQotICAgRGF2aWQgSGFycmlzb24s IEtpbmdzdG9uIFdhcnJlbiBDb3JwCi0gICBMdWNhcyBIYXJ0LCBPcmVnb24gU3RhdGUgVW5pdmVy c2l0eQotICAgSmFtZXMgSGFydmV5LCBJbmRpYW5hL1B1cmR1ZSBVIChWTVMpCi0gICBSb2IgSGVh bGV5Ci0gICBDaHVjayBIZWRyaWNrLCBSdXRnZXJzIFUKLSAgIFJvbiBIZWlieSwgVGVjaG5pY2Fs IFN5c3RlbXMgRGl2aXNpb24sIE1vdG9yb2xhIENvbXB1dGVyIEdyb3VwCi0gICBTdGV2ZSBIZW1t aW5nZXIsIFRla3Ryb25peAotICAgQ2hyaXN0aWFuIEhlbXNpbmcsIFJXVEggQWFjaGVuLCBHZXJt YW55IChPUy05KQotICAgUmFuZG9scGggSGVyYmVyLCBVUyBET0UsCi0gICBBbmRyZXcgSGVyYmVy dCwgTW9uYXNoIFVuaXYsIEF1c3RyYWxpYQotICAgTWFyY3VzIEhlcmJlcnQsIEdlcm1hbnkKLSAg IE1pa2UgSGlja2V5LCBJVEkKLSAgIERhbiBIaWxkZWJyYW5kLCBRTlggU29mdHdhcmUgU3lzdGVt cyBJbmMsIEthbmF0YSwgT04gKFFOWCkKLSAgIFIgRSBIaWxsCi0gICBTdGVwaGFuIEhvZmZtYW4t RW1kZW4KLSAgIFN2ZW4gSG9sbXN0cm9tLCBBQkIgVXRpbGl0aWVzIEFCLCBTd2VkZW4KLSAgIEJp bGwgSG9tZXIsIENyYXkgUmVzZWFyY2gKLSAgIFJheSBIdW50ZXIsIFRoZSBXb2xsb25nb25nIEdy b3VwCi0gICBSYW5keSBIdW50emlnZXIsIE5hdGlvbmFsIExpYnJhcnkgb2YgTWVkaWNpbmUKLSAg IExhcnJ5IEphY29icywgVHJhbnNhcmMKLSAgIFN0ZXZlIEplbmtpbnMsIExhbmNhc3RlciBVbml2 ZXJzaXR5LCBVSwotICAgRGF2ZSBKb2huc29uLCBHcmFkaWVudCBUZWNobm9sb2dpZXMKLSAgIE1h cmsgQiBKb2huc29uLCBBcHBsZSBDb21wdXRlcgotICAgSnlrZSBKb2tpbmVuLCBUYW1wZXJlIFVu aXZlcnNpdHkgb2YgVGVjaG5vbG9neSwgRmlubGFuZCAoUU5YKQotICAgRXJpYyBGIEpvbmVzLCBB VCZUCi0gICBMdWtlIEpvbmVzLCBBVCZUCi0gICBQZXRlciBKb25lcywgVSBvZiBRdWViZWMgTW9u dHJlYWwKLSAgIFBoaWwgSnVsaWFuLCBTQVMgSW5zdGl0dXRlCi0gICBQZXRlciBLYWJhbCwgVSBv ZiBRdWViZWMKLSAgIE1pYyBLYWN6bWFyY3ppaywgVSBvZiBUZXhhcyBhdCBBdXN0aW4KLSAgIFNl cmdleSBLYXJ0YXNob2ZmLCBJbnN0LiBvZiBQcmVjaXNlIE1lY2hhbmljcyAmIENvbXB1dGVyIEVx dWlwbWVudCwgTW9zY293Ci0gICBIb3dpZSBLYXllLCBDb2x1bWJpYSBVCi0gICBSb2IgS2Vkb2lu LCBMaW5vdHlwZSBDbywgSGF1cHBhdWdlLCBOWSAoT1MvMikKLSAgIFBoaWwgS2VlZ3N0cmEKLSAg IE1hcmsgS2VubmVkeSwgSUJNCi0gICBUZXJyeSBLZW5uZWR5LCBTdCBQZXRlcidzIENvbGxlZ2Us IEplcnNleSBDaXR5LCBOSiAoVk1TIGFuZCBtb3JlKQotICAgIkNhcmxvIEtpZCIsIFRlY2huaWNh bCBVbml2ZXJzaXR5IG9mIERlbGZ0LCBOZXRoZXJsYW5kcwotICAgVGltIEtpZW50emxlCi0gICBQ YXVsIEtpbW90bywgQ29ybmVsbCBVCi0gICBEb3VnbGFzIEtpbmdzdG9uLCBtb3JnYW4uY29tCi0g ICBMYXdyZW5jZSBLaXJieSwgV2lsdHNoaXJlLCBVSwotICAgVG9tIEtsb29zLCBTZXF1ZW50IENv bXB1dGVyIFN5c3RlbXMKLSAgIEd1ZW50ZXIgS25hdWYKLSAgIEppbSBLbnV0c29uLCBVIG9mIFRl eGFzIGF0IEF1c3RpbgotICAgSm9obiBULiBLb2hsIChCU0RJKQotICAgU2NvdHQgS3JhbWVyLCBT UkkgSW50ZXJuYXRpb25hbCwgTWVubG8gUGFyaywgQ0EKLSAgIEpvaG4gS3JheW5hY2ssIFVTIFBv c3RhbCBTZXJ2aWNlCi0gICBEYXZpZCBLcmlja2VyLCBFbmNvcmUgQ29tcHV0ZXIKLSAgIFRob21h cyBLcnVlZ2VyLCBVV00KLSAgIEJvIEt1bGxtYXIsIEFCQyBLbHViYmVuLCBTdG9ja2hvbG0sIGFu ZCBDZW50cmFsIEJhbmsgb2YgU3dlZGVuLCBLaXN0YQotICAgUi4gQnJhZCBLdW1tZXIsIEFUJlQg QmVsbCBMYWJzLCBBdGxhbnRhLCBHQQotICAgSm9obiBLdW56ZSwgVUMgQmVya2VsZXkKLSAgIERh dmlkIExhbmUsIEJTU0kgLyBCZWxsU291dGggKFN0cmF0dXMgVk9TLCBYLjI1KQotICAgQm9iIExh cnNvbiwgVVNDIChPUy05KQotICAgQmVydCBMYXZlcm1hbiwgR3JvbmluZ2VuIFUsIE5ldGhlcmxh bmRzCi0gICBTdGV2ZSBMYXl0b24KLSAgIERhdmlkIExhd3llciwgVUMgSXJ2aW5lCi0gICBKYXNv biBMZWhyCi0gICBEYXZpZCBMZVZpbmUsIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgQ29ycG9yYXRp b24KLSAgIERhbmllbCBTLiBMZXdhcnQsIFVJVUMKLSAgIFMuTy4gTGlkaWUsIExlaGlnaCBVCi0g ICBUb3IgTGlsbHF2aXN0LCBIZWxzaW5raSBVLCBGaW5sYW5kCi0gICBEYXZpZC1NaWNoYWVsIExp bmNrZSwgVSBvZiBTdCBHYWxsZW4sIFN3aXR6ZXJsYW5kCi0gICBSb2JlcnQgTGlwZSAoZm9yIFND TyBtYWtlZmlsZSBlbnRyaWVzICYgYWR2aWNlKQotICAgRGVhbiBMb25nCi0gICBNaWtlIExvbmcs IEFuYWxvZyBEZXZpY2VzLCBOb3J3b29kIE1BCi0gICBLZXZpbiBMb3dleSwgVSBvZiBTYXNrYXRj aGV3YW4gKE9TLzIpCi0gICBBbmR5IExvd3J5LCBDb2x1bWJpYSBVCi0gICBKYW1lcyBMdW1tZWws IENhcHJpY2EgVGVsZWNvbXB1dGluZyBSZXNvdXJjZXMgKFFOWCkKLSAgIExld2lzIE1jQ2FydGh5 Ci0gICBEYXZpZCBNYWNLZW56aWUsIEVudmlyb25tZW50YWwgRGVmZW5zZSBGdW5kLCBVIG9mIE1h cnlsYW5kCi0gICBKb2huIE1hY2tpbiwgVW5pdmVyc2l0eSBvZiBTaWRuZXksIEF1c3RyYWxpYQot ICAgTWFydGluIE1hY2xhcmVuLCBCYXRoIFUsIFVLCi0gICBDaHJpcyBNYWlvLCBDb2x1bWJpYSBV IENTIERlcHQKLSAgIE1vbnRzZXJyYXQgTWFuZSwgSFAsIEdyZW5vYmxlLCBGcmFuY2UKLSAgIEZ1 bHZpbyBNYXJpbm8sIE9saXZldHRpLCBJdnJlYSwgSXRhbHkKLSAgIEFydGh1ciBNYXJzaCwgZGly Y3NhLm9yZy5hdQotICAgUGV0ZXIgTWF1emV5LCBMdWNlbnQgVGVjaG5vbG9naWVzCi0gICBUeWUg TWNRdWVlbiwgVXRhaCBTdGF0ZSBVCi0gICBUZWQgTWVkaW4KLSAgIEhlbGxtdXRoIE1pY2hhZWxp cywgSGFuc2VhdGlzY2hlciBDb21wdXRlcnNlcnZpY2UgR21iSCwgSGFtYnVyZywgR2VybWFueQot ICAgTGVzbGllIE1pa2VzZWxsLCBBbWVyaWNhbiBGYXJtIEJ1cmVhdQotICAgVG9kZCBNaWxsZXIs IENvdXJ0ZXNhbiBDb25zdWx0aW5nCi0gICBHYXJ5IE1pbGxzCi0gICBNYXJ0aW4gTWlub3csIERF QyAoVk1TKQotICAgUGF3YW4gTWlzcmEsIEJlbGxjb3JlCi0gICBLZW4gTWl6aWFsa28sIElCTSwg TWFuYXNzYXMsIFZBCi0gICBXb2xmZ2FuZyBNb2VsbGVyLCBERUNVUyBHZXJtYW55Ci0gICBSYXkg TW9vZHksIFB1cmR1ZSBVCi0gICBCcnVjZSBKIE1vb3JlLCBBbGxlbi1CcmFkbGV5IENvLCBIaWdo bGFuZCBIZWlnaHRzLCBPSCAoQXRhcmkgU1QpCi0gICBTdGV2ZSBNb3JsZXksIENvbnZleAotICAg UGV0ZXIgTW9zc2VsLCBDb2x1bWJpYSBVCi0gICBUb255IE1vdnNob24sIE5ZVQotICAgTG91IE11 Y2Npb2xpLCBTd2Fuc29uIEFuYWx5c2lzIFN5c3RlbXMKLSAgIERhbiBNdXJwaHkKLSAgIE5lYWwg UC4gTXVycGh5LCBIYXJzb2YgU3lzdGVtcywgV29uZGVyIExha2UgSUwKLSAgIEdhcnkgTXVzc2Fy Ci0gICBKb2huIE5hbGwsIEZTVQotICAgSmFjayBOZWxzb24sIFUgb2YgUGl0dHNidXJnaAotICAg SmltIE5vYmxlLCBQbGFubmluZyBSZXNlYXJjaCBDb3Jwb3JhdGlvbiAoTWFjaW50b3NoKQotICAg SWFuIE8nQnJpZW4sIEJhdGggVSwgVUsKLSAgIE1lbGlzc2EgTydOZWlsbCwgU0ZVCi0gICBKb2hu IE93ZW5zCi0gICBUaG9tYXMgUGlua2wsIEhlYWx0aCBCdXNpbmVzcyBTeXN0ZW1zIEluYy4KLSAg IE1pY2hhZWwgUGlucywgSW93YSBDb21wdXRlciBBaWRlZCBFbmdpbmVlcmluZyBOZXR3b3JrCi0g ICBBbmRyZScgUGlyYXJkLCBVbml2ZXJzaXR5IG9mIExpZWdlLCBCZWxnaXVtCi0gICBQYXVsIFBs YWNld2F5LCBPaGlvIFN0YXRlIFUKLSAgIFBpZXQgVy4gUGxvbXAsIElDQ0UsIEdyb25pbmdlbiBV bml2ZXJzaXR5LCBOZXRoZXJsYW5kcwotICAgS2VuIFBvdWx0b24sIEhQIExhYnMKLSAgIE1hbmZy ZWQgUHJhbmdlLCBPYWtsYW5kIFUKLSAgIENocmlzdG9waGVyIFByYXR0LCBBUFYgQmFrZXIsIFVL Ci0gICBGcmFuayBQcmluZGxlLCBOQURDCi0gICBUb255IFF1ZXJ1YmluLCBVIG9mIEhhd2FpaQot ICAgSmVhbi1QaWVycmUgUmFkbGV5Ci0gICBBbnRvbiBSYW5nCi0gICBNaWtlIFJlY2h0bWFuCi0g ICBTY290dCBSaWJlCi0gICBBbGFuIFJvYmlldHRlLCBPeGZvcmQgVW5pdmVyc2l0eSwgVUsKLSAg IE1pY2hlbCBSb2JpdGFpbGxlLCBVIG9mIE1vbnRyZWFsIChNYWMpCi0gICBIdXcgUm9nZXJzLCBT Y2h3ZWl6ZXJpc2NoZSBLcmVkaXRhbnN0YWx0LCBadWVyaWNoCi0gICBOaWdlbCBSb2xlcywgQ2Ft YnJpZGdlLCBFbmdsYW5kCi0gICBLYWkgVXdlIFJvbW1lbCwgVGVjaG5pc2NoZSBVbml2ZXJzaXRh ZXQgTXVlbmNoZW4gKE9TLzIpCi0gICBMYXJyeSBSb3Nlbm1hbiAoQW1pZ2EpCi0gICBKYXkgUm91 bWFuLCBVIG9mIE1pY2hpZ2FuCi0gICBKYWNrIFJvdXNlLCBTQVMgSW5zdGl0dXRlIChEYXRhIEdl bmVyYWwgYW5kL29yIEFwb2xsbykKLSAgIFN0ZXcgUnViZW5zdGVpbiwgSGFydmFyZCBVIChWTVMp Ci0gICBHZXJoYXJkIFJ1ZWNrbGUsIEZIIERhcm1zdGFkdCwgRmIuIEUvQXV0b21hdGlzaWVydW5n c3RlY2huaWsKLSAgIEpvaG4gU2FudG9zLCBFRyZICi0gICBCaWxsIFNjaGlsaXQsIENvbHVtYmlh IFUKLSAgIFVsbGkgU2NobHVldGVyLCBSV1RIIEFhY2hlbiwgR2VybWFueSAoT1MtOSwgZXRjKQot ICAgTWljaGFlbCBTY2htaWR0LCBVIG9mIFBhZGVyYm9ybiwgR2VybWFueQotICAgRXJpYyBTY2hu b2ViZWxlbiwgQ29udmV4Ci0gICBCZW5uIFNjaHJlaWJlciwgREVDCi0gICBEYW4gU2NodWxsbWFu LCBERUMgKG1vZGVtcywgRElBTCBjb21tYW5kLCBldGMpCi0gICBKb2huIFNjaHVsdHosIDNNCi0g ICBTdGV2ZW4gU2NodWx0eiwgQ29udGVsIChQRFAtMTEpCi0gICBTdGV2ZW4gU2Nod2VkYQotICAg QVBQUCBTY29yZXIsIExlZWRzIFBvbHl0ZWNobmljLCBVSwotICAgR29yZG9uIFNjb3R0LCBNaWNy byBGb2N1cywgTmV3YnVyeSBVSwotICAgR2lzYmVydCBXLiBTZWxrZSwgV0lkTywgQm9ubiwgR2Vy bWFueQotICAgS2lqYWwgU2hhaAotICAgRGF2aWQgU2luZ2VyLCBJQk0gQWxtYWRlbiBSZXNlYXJj aCBMYWJzCi0gICBEYXZpZCBTaXplbGFuZCwgVSBvZiBMb25kb24gTWVkaWNhbCBTY2hvb2wKLSAg IEZyaWRyaWsgU2t1bGFzb24sIEljZWxhbmQKLSAgIFJpY2sgU2xhZGtleSAoTGludXgpCi0gICBE YXZlIFNsYXRlCi0gICBCcmFkbGV5IFNtaXRoLCBVQ0xBCi0gICBGcmVkIFNtaXRoLCBNZXJrIC8g Q29tcHV0cml0aW9uCi0gICBSaWNoYXJkIFMgU21pdGgsIENhbCBTdGF0ZQotICAgUnlhbiBTdGFu aXNmZXIsIFVOVAotICAgQmVydGlsIFN0ZW5zdHJvZW0sIFN0b2NraG9sbSBVbml2ZXJzaXR5IENv bXB1dGVyIENlbnRyZSAoUVopLCBTd2VkZW4KLSAgIEphbWVzIFN0dXJkZXZhbnQsIENBUCBHRU1F TkkgQU1FUklDQSwgTWlubmVhcG9saXMKLSAgIFBldGVyIFN2YW5iZXJnLCBSb3lhbCBUZWNobi4g SFMsIFN3ZWRlbgotICAgSmFtZXMgUi4gU3dlbnNvbiwgQWNjdS1XZWF0aGVyLCBJbmMuCi0gICBU ZWQgVCdzbywgTUlUIChMaW51eCkKLSAgIEFuZHkgVGFuZW5iYXVtLCBWcmlqZSBVLCBBbXN0ZXJk YW0sIE5ldGhlcmxhbmRzCi0gICBTZXRoIFRoZXJpYXVsdCwgQ29sdW1iaWEgVQotICAgR2xlbiBU aG9iZQotICAgTWFya2t1IFRvaWphbGEsIEhlbHNpbmtpIFUgb2YgVGVjaG5vbG9neQotICAgVGVl bXUgVG9ybWEsIEhlbHNpbmtpIFUgb2YgVGVjaG5vbG9neQotICAgTGludXMgVG9ydmFsZHMsIEhl bHNpbmtpCi0gICBSaWNrIFRyb3hlbCwgTklICi0gICBXYXJyZW4gVHVja2VyLCBUcmlkb20gQ29y cCwgTW91bnRhaW4gUGFyaywgR0EKLSAgIERhdmUgVHdldGVuLCBBTUVTLU5BUwotICAgRyBVZGRl Ym9yZywgU3dlZGVuCi0gICBXYWx0ZXIgVW5kZXJ3b29kLCBGb3JkIEFlcm9zcGFjZQotICAgUGll dGVyIFZhbiBEZXIgTGluZGVuLCBDZW50cmUgTW9uZGlhbCwgUGFyaXMKLSAgIEdlIHZhbiBHZWxk b3JwLCBOZXRoZXJsYW5kcwotICAgRnJlZCB2YW4gS2VtcGVuLCBNSU5JWCBVc2VyIEdyb3VwLCBW b29yaG91dCwgTmV0aGVybGFuZHMKLSAgIFdheW5lIFZhbiBQZWx0LCBHRS9DUkQKLSAgIE1hcmsg VmFzb2xsLCBPa2xhaG9tYSBTdGF0ZSBVIChWNyBVTklYKQotICAgS29uc3RhbnRpbiBWaW5vZ3Jh ZG92LCBJQ1NUSSwgTW9zY293Ci0gICBQYXVsIFZpeGllLCBERUMKLSAgIEJlcm5pZSBWb2x6LCBQ cm9jZXNzIFNvZnR3YXJlCi0gICBFZHVhcmQgVm9waWNrYSwgUHJhZ3VlIFVuaXZlcnNpdHkgb2Yg RWNvbm9taWNzLCBDemVjaCBSZXB1YmxpYwotICAgTWFydGluIFZvcmxhZW5kZXIKLSAgIERpbWl0 cmkgVnVsaXMsIENVTlkKLSAgIFJvZ2VyIFdhbGxhY2UsIFJheXRoZW9uCi0gICBTdGVwaGVuIFdh bHRvbiwgQ2FsaWYgU3RhdGUgVSwgTm9ydGhyaWRnZSAoQW1pZ2EpCi0gICBKYW1pZSBXYXRzb24s IEFkYXNvZnQsIFN3aXR6ZXJsYW5kIChBSVgpCi0gICBSaWNrIFdhdHNvbiwgVSBvZiBUZXhhcyAo TWFjaW50b3NoKQotICAgRXJpYyBXZWF2ZXIsIENvbHVtYmlhIFUKLSAgIFNjb3R0IFdlaWthcnQg KEFzc29jaWF0aW9uIGZvciBQcm9ncmVzc2l2ZSBDb21tdW5pY2F0aW9ucykKLSAgIFJvYmVydCBX ZWluZXIsIFByb2dyYW1taW5nIFBsdXMsIE5ldyBZb3JrIENpdHkKLSAgIExhdXJlbiBXZWluc3Rl aW4sIFZvcnRleCBUZWNobmxvZ3kKLSAgIERhdmlkIFdleGVsYmxhdCwgQVQmVAotICAgQ2xhcmsg V2llcmRhLCBJbGx1bWluYXRpIE9ubGluZQotICAgSm9hY2hpbSBXaWVzZWwsIFUgb2YgS2FybHNy dWhlCi0gICBMb24gV2lsbGV0dCwgVSBvZiBVdGFoCi0gICBNaWNoYWVsIFdpbGxpYW1zLCBVQ0xB Ci0gICBOYXRlIFdpbGxpYW1zLCBVIG9mIE1vbnRhbmEKLSAgIERhdmlkIFdpbHNvbgotICAgSm9l bGxlbiBXaW5kc29yLCBVIG9mIEFyaXpvbmEKLSAgIFBhdHJpY2sgV29sZmUsIEt1Y2sgJiBBc3Nv Y2lhdGVzLCBJbmMuCi0gICBHcmVnZyBXb25kZXJseSwgT2tsYWhvbWEgU3RhdGUgVSAoVjcgVU5J WCkKLSAgIEZhcnJlbGwgV29vZHMsIENvbmN1cnJlbnQgKGZvcm1lcmx5IE1hc3Njb21wKQotICAg RGF2ZSBXb29sbGV5LCBDQVAgQ29tbXVuaWNhdGlvbiBTeXN0ZW1zLCBMb25kb24KLSAgIEphY2sg V29vbGxleSwgU0NUIENvcnAKLSAgIEZyYW5rIFdvcnRuZXIKLSAgIEtlbiBZYXAsIGZvcm1lcmx5 IG9mIFUgb2YgUm9jaGVzdGVyCi0gICBKb2huIFplZWZmLCBBbm4gQXJib3IsIE1JCi0qLwotCi0j aW5jbHVkZSAiY2tja2VyLmgiICAgICAgICAgICAgICAgICAgICAgLyogS2VybWl0IHN5bWJvbHMg Ki8KLSNpbmNsdWRlICJja2NuZXQuaCIgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHN5 bWJvbHMgKi8KLQotI2lmZGVmIENLX1NTTAotI2luY2x1ZGUgImNrX3NzbC5oIgotI2VuZGlmIC8q IENLX1NTTCAqLwotCi0jaWZuZGVmIE5PU1BMCi0jaW5jbHVkZSAiY2t1dXNyLmgiCi0jZW5kaWYg LyogTk9TUEwgKi8KLQotI2lmZGVmIE9TMk9OTFkKLSNkZWZpbmUgSU5DTF9WSU8gICAgICAgICAg ICAgICAgICAgICAgICAvKiBOZWVkZWQgZm9yIGNrb2Nvbi5oICovCi0jaW5jbHVkZSA8b3MyLmg+ Ci0jdW5kZWYgQ09NTUVOVAotI2VuZGlmIC8qIE9TMk9OTFkgKi8KLQotI2lmZGVmIE5UCi0jaW5j bHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHRhcGkuaD4KLSNpbmNsdWRlICJja250YXAuaCIK LSNlbmRpZiAvKiBOVCAqLwotCi0jaWZuZGVmIE5PU0VSVkVSCi0vKiBUZXh0IG1lc3NhZ2UgZGVm aW5pdGlvbnMuLiBlYWNoIHNob3VsZCBiZSAyNTYgY2hhcnMgbG9uZywgb3IgbGVzcy4gKi8KLSNp ZmRlZiBNSU5JWAotY2hhciAqc3J2dHh0ID0gIlxyXG5cCi1FbnRlcmluZyBzZXJ2ZXIgbW9kZS5c clxuXDAiOwotI2Vsc2UKLSNpZmRlZiBPTERNU0cKLS8qCi0gIEl0IHNlZW1zIHRoZXJlIHdhcyBh IGxhcmdlIGluc3RhbGxhdGlvbiB0aGF0IHdhcyB1c2luZyBDLUtlcm1pdCA1QSgxNjUpCi0gIG9y IHRoZXJlYWJvdXRzLCB3aGljaCBoYWQgZGVwbG95ZWQgdGhvdXNhbmRzIG9mIE1TLURPUyBLZXJt aXQgc2NyaXB0cyBpbgotICBzY2F0dGVyZWQgbG9jYXRpb25zIHRoYXQgbG9va2VkIGZvciBzdHJp bmdzIGluIHRoZSBvbGQgc2VydmVyIG1lc3NhZ2UsCi0gIHdoaWNoIGNoYW5nZWQgaW4gNUEoMTgz KSwgQXVndXN0IDE5OTIuCi0qLwotY2hhciAqc3J2dHh0ID0gIlxyXG5cCi1DLUtlcm1pdCBzZXJ2 ZXIgc3RhcnRpbmcuICBSZXR1cm4gdG8geW91ciBsb2NhbCBtYWNoaW5lIGJ5IHR5cGluZ1xyXG5c Ci1pdHMgZXNjYXBlIHNlcXVlbmNlIGZvciBjbG9zaW5nIHRoZSBjb25uZWN0aW9uLCBhbmQgaXNz dWUgZnVydGhlclxyXG5cCi1jb21tYW5kcyBmcm9tIHRoZXJlLiAgVG8gc2h1dCBkb3duIHRoZSBD LUtlcm1pdCBzZXJ2ZXIsIGlzc3VlIHRoZVxyXG5cCi1GSU5JU0ggb3IgQllFIGNvbW1hbmQgYW5k IHRoZW4gcmVjb25uZWN0LlxuXAotXHJcblwwIjsKLSNlbHNlCi0jaWZkZWYgT1NLCi1jaGFyICpz cnZ0eHQgPSAiXHJcMDEyXAotRW50ZXJpbmcgc2VydmVyIG1vZGUuICBJZiB5b3VyIGxvY2FsIEtl cm1pdCBzb2Z0d2FyZSBpcyBtZW51IGRyaXZlbiwgdXNlXHJcMDEyXAotdGhlIG1lbnVzIHRvIHNl bmQgY29tbWFuZHMgdG8gdGhlIHNlcnZlci4gIE90aGVyd2lzZSwgZW50ZXIgdGhlIGVzY2FwZVxy XDAxMlwKLXNlcXVlbmNlIHRvIHJldHVybiB0byB5b3VyIGxvY2FsIEtlcm1pdCBwcm9tcHQgYW5k IGlzc3VlIGNvbW1hbmRzIGZyb21cclwwMTJcCi10aGVyZS4gVXNlIFNFTkQgYW5kIEdFVCBmb3Ig ZmlsZSB0cmFuc2Zlci4gVXNlIFJFTU9URSBIRUxQIGZvciBhIGxpc3Qgb2ZcclwwMTJcCi1vdGhl ciBhdmFpbGFibGUgc2VydmljZXMuICBVc2UgQllFIG9yIEZJTklTSCB0byBlbmQgc2VydmVyIG1v ZGUuXHJcMDEyXDAiOwotI2Vsc2UgLyogVU5JWCwgVk1TLCBBT1MvVlMsIGFuZCBhbGwgb3RoZXJz ICovCi1jaGFyICpzcnZ0eHQgPSAiXHJcblwKLUVudGVyaW5nIHNlcnZlciBtb2RlLiAgSWYgeW91 ciBsb2NhbCBLZXJtaXQgc29mdHdhcmUgaXMgbWVudSBkcml2ZW4sIHVzZVxyXG5cCi10aGUgbWVu dXMgdG8gc2VuZCBjb21tYW5kcyB0byB0aGUgc2VydmVyLiAgT3RoZXJ3aXNlLCBlbnRlciB0aGUg ZXNjYXBlXHJcblwKLXNlcXVlbmNlIHRvIHJldHVybiB0byB5b3VyIGxvY2FsIEtlcm1pdCBwcm9t cHQgYW5kIGlzc3VlIGNvbW1hbmRzIGZyb21cclxuXAotdGhlcmUuICBVc2UgU0VORCBhbmQgR0VU IGZvciBmaWxlIHRyYW5zZmVyLiAgVXNlIFJFTU9URSBIRUxQIGZvciBhIGxpc3Qgb2ZcclxuXAot b3RoZXIgYXZhaWxhYmxlIHNlcnZpY2VzLiAgVXNlIEJZRSBvciBGSU5JU0ggdG8gZW5kIHNlcnZl ciBtb2RlLlxyXG5cMCI7Ci0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogT0xETVNHICovCi0j ZW5kaWYgLyogTUlOSVggKi8KLSNlbHNlICAvKiBzZXJ2ZXIgbW9kZSBkaXNhYmxlZCAqLwotY2hh ciAqc3J2dHh0ID0gIiI7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQotaW50IGluaXRmbGcgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN5c2luaXQoKSBoYXMgZXhlY3V0ZWQuLi4gKi8K LWludCBob3djYWxsZWQgPSBJX0FNX0tFUk1JVDsgICAgICAgICAgICAvKiBIb3cgSSB3YXMgY2Fs bGVkICovCi1pbnQgaG10b3BsaW5lID0gMDsKLWludCBxdWl0dGluZyA9IDA7CQkJLyogSSdtIGlu IHRoZSBhY3Qgb2YgcXVpdHRpbmcgKi8KLQotI2lmZGVmIElLU0RDT05GCi1jaGFyICogaWtzZGNv bmYgPSBJS1NEQ09ORjsgICAgICAgICAgICAgLyogSUtTRCBjb25maWd1cmF0aW9uIGZpbGUgKi8K LWludCAgICBpa3NkY2YgICA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBIYXMgSUtTRCBjLmYu IGJlZW4gcHJvY2Vzc2VkPyAqLwotI2VuZGlmIC8qIElLU0RDT05GICovCi0KLWludCBzcnZjZG1z ZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBbU2VydmVyXSBDRCBtZXNzYWdlICovCi1j aGFyICogY2Rtc2dmaWxlWzhdID0geyBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwgfTsKLWNoYXIgKiBjZG1zZ3N0ciA9IE5VTEw7Ci1jaGFyICogY2tjZHBhdGggPSBOVUxM OwotCi0jaWZkZWYgTkxDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGV4dC1maWxl IGxpbmUgdGVybWluYXRvciAqLwotQ0hBUiBmZW9sID0gTkxDSEFSOwotI2Vsc2UKLUNIQVIgZmVv bCA9IDA7Ci0jZW5kaWYgLyogTkxDSEFSICovCi0KLWludCBmYmxrc2l6ID0gREJMS1NJWjsgICAg ICAgICAgLyogRmlsZSBibG9ja3NpemUgKi8KLWludCBmcmVjbCA9IERMUkVDTDsgICAgICAgICAg ICAgLyogRmlsZSByZWNvcmQgbGVuZ3RoICovCi1pbnQgZnJlY2ZtID0gWFlGRl9TOyAgICAgICAg ICAgIC8qIEZpbGUgcmVjb3JkIGZvcm1hdCAoZGVmYXVsdCA9IHN0cmVhbSkgKi8KLWludCBmb3Jn ID0gWFlGT19TOyAgICAgICAgICAgICAgLyogRmlsZSBvcmdhbml6YXRpb24gKHNlcXVlbnRpYWwp ICovCi1pbnQgZmNjdHJsID0gWFlGUF9OOyAgICAgICAgICAgIC8qIEZpbGUgY2FycmlhZ2UgY29u dHJvbCAoY3RybCBjaGFycykgKi8KLWludCBmaWxlY2FzZSA9IEZJTEVDQVNFOyAgICAgICAgLyog Q2FzZSBtYXR0ZXJzIGluIGZpbGVuYW1lcyAqLwotaW50IHN0YXRoYWNrID0gMTsgICAgICAgICAg ICAgICAvKiBGYXN0IGRpcmVjdG9yeSBsb29rdXBzIGJ5IGRlZmF1bHQgKi8KLQotY2hhciB1aWRi dWZbVUlEQlVGTEVOXSA9IHsgTlVMLCBOVUwgfTsgIC8qIFVzZXIgSUQgYnVmZmVyICovCi1pbnQg Y2ZpbGVmID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXBwbGljYXRpb24gKCJrZXJi YW5nIikgZmlsZSBmbGFnICovCi1jaGFyIGNtZGZpbFtDS01BWFBBVEggKyAxXSA9IHsgTlVMLCBO VUwgfTsgLyogQXBwbGljYXRpb24gZmlsZSBuYW1lICovCi1pbnQgaGF2ZXVybCA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogVVJMIGdpdmVuIG9uIGNvbW1hbmQgbGluZSAqLwotCi0jaWZu ZGVmIE5PWEZFUgotLyogTXVsdGktcHJvdG9jb2wgc3VwcG9ydCAqLwotCi1zdHJ1Y3QgY2tfcCBw dGFiW05QUk9UT1NdID0geyAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgS2VybWl0IHBhcnQg Li4uICovCi0gIHsgIktlcm1pdCIsCi0gICAgRFJQU0laLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUmVjZWl2ZSBwYWNrZXQgc2l6ZSAqLwotICAgIERTUFNJWiwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFNlbmQgcGFja2V0IHNpemUgKi8KLSAgICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kLXBhY2tldC1zaXplLXNldCBmbGFnICovCi0g ICAgREZXU0laLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93IHNpemUgKi8K LQotI2lmZGVmIE5FV0RFRkFVTFRTCi0gICAgUFhfQ0FVLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ29udHJvbCBjaGFyIHVucHJlZml4aW5nLi4uICovCi0jZWxzZQotICAgIFBYX0FM TCwKLSNlbmRpZiAvKiBORVdERUZBVUxUUyAqLwotCi0jaWZkZWYgVk1TICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRGVmYXVsdCBmaWxlbmFtZSBjb2xsaXNpb24gYWN0aW9uICovCi0g ICAgWFlGWF9YLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVQTEFDRSBmb3IgVkFY L1ZNUyAqLwotI2Vsc2UKLSAgICBYWUZYX0IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBCQUNLVVAgZm9yIGV2ZXJ5Ym9keSBlbHNlICovCi0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRl ZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBmaWxlIG5hbWUg Y29udmVyc2lvbiAqLwotICAgIFhZRk5fTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IExpdGVyYWwgZm9yIE9TMiAqLwotI2Vsc2UKLSAgICBYWUZOX0MsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBDb252ZXJ0ZWQgZm9yIG90aGVycyAqLwotI2VuZGlmIC8qIE9TMiAqLwot Ci0gICAgUEFUSF9PRkYsICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgcGF0aG5hbWVzIE9GRiAq LwotICAgIFBBVEhfQVVUTywgICAgICAgICAgICAgICAgICAvKiBSZWNlaXZlIHBhdGhuYW1lcyBB VVRPICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEhvc3QgcmVjZWl2ZSBp bml0aWF0aW9uIHN0cmluZyAoYmluYXJ5KSAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAg ICAgICAvKiBIb3N0IHJlY2VpdmUgaW5pdGlhdGlvbiBzdHJpbmcgKHRleHQpICAgKi8KLSAgICBO VUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogSG9zdCBzZXJ2ZXIgc3RyaW5nICovCi0gICAg TlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIHByb3RvY29sIHNlbmQgY29t bWFuZCAoYmluYXJ5KSAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRl cm5hbCBwcm90b2NvbCBzZW5kIGNvbW1hbmQgKHRleHQpICAgKi8KLSAgICBOVUxMLCAgICAgICAg ICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgcHJvdG9jb2wgcmVjZWl2ZSBjb21tYW5kIChiaW4p ICovCi0gICAgTlVMTCB9ICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIHByb3RvY29s IHJlY2VpdmUgY29tbWFuZCAodHh0KSAqLwotI2lmZGVmIENLX1hZWgotLAoteyJYTU9ERU0iLCAg ICAxMjgsMTI4LC0xLC0xLCAgIDEsLTEsLTEsMCwwLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEx9LAoteyJYTU9ERU0tQ1JDIiwxMjgsMTI4LC0xLC0xLCAgLTEsLTEsLTEsMCwwLE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEx9LAoteyJZTU9ERU0iLCAgIC0xLCAtMSwt MSwtMSwgICAgLTEsLTEsLTEsMCwwLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEx9 LAoteyJZTU9ERU0tZyIsIC0xLCAtMSwtMSwtMSwgICAgLTEsLTEsLTEsMCwwLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEx9LAoteyJaTU9ERU0iLCAgIC0xLCAtMSwtMSwtMSxQWF9X SUwsLTEsLTEsMCwwLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEx9LAoteyJPdGhl ciIsICAgIC0xLCAtMSwtMSwtMSwgICAgLTEsLTEsLTEsMCwwLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEx9Ci0jZW5kaWYgLyogQ0tfWFlaICovCi19OwotCi0vKiBEZWNsYXJhdGlv bnMgZm9yIFNlbmQtSW5pdCBQYXJhbWV0ZXJzICovCi0KLWludCBzcHNpeiA9IERTUFNJWiwgICAg ICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHBhY2tldCBzaXplIHRvIHNlbmQgKi8KLSAgICBz cG1heCA9IERTUFNJWiwgICAgICAgICAgICAgICAgICAgICAvKiBCaWdnZXN0IHBhY2tldCBzaXpl IHdlIGNhbiBzZW5kICovCi0gICAgbGFzdHNwbWF4ID0gRFNQU0laLCAgICAgICAgICAgICAgICAg LyogU2VuZC1wYWNrZXQgc2l6ZSBsYXN0IHVzZWQgKi8KLSAgICBzcHNpenIgPSBEU1BTSVosICAg ICAgICAgICAgICAgICAgICAvKiBTZW5kLXBhY2tldCBzaXplIHJlcXVlc3RlZCAqLwotICAgIHNw c2l6ZiA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgdG8gb3ZlcnJpZGUgc2l6 ZSBuZWdvdGlhdGlvbiAqLwotICAgIHJwc2l6ID0gRFJQU0laLCAgICAgICAgICAgICAgICAgICAg IC8qIEJpZ2dlc3Qgd2Ugd2FudCB0byByZWNlaXZlICovCi0gICAgdXJwc2l6ID0gRFJQU0laLCAg ICAgICAgICAgICAgICAgICAgLyogVXNlci1yZXF1ZXN0ZWQgcmVjZWl2ZSBwa3Qgc2l6ZSAqLwot ICAgIG1heHJwcyA9IE1BWFJQLCAgICAgICAgICAgICAgICAgICAgIC8qIE1heGltdW0gaW5jb21p bmcgbG9uZyBwYWNrZXQgc2l6ZSAqLwotICAgIG1heHNwcyA9IE1BWFNQLCAgICAgICAgICAgICAg ICAgICAgIC8qIE1heGltdW0gb3V0Ym91bmQgbC5wLiBzaXplICovCi0gICAgbWF4dHJ5ID0gTUFY VFJZLCAgICAgICAgICAgICAgICAgICAgLyogTWF4aW11bSByZXRyaWVzIHBlciBwYWNrZXQgKi8K LSAgICB3c2xvdHMgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgc2l6ZSBj dXJyZW50bHkgaW4gdXNlICovCi0gICAgd3Nsb3RyID0gREZXU0laLCAgICAgICAgICAgICAgICAg ICAgLyogV2luZG93IHNpemUgZnJvbSBTRVQgV0lORE9XICovCi0gICAgd3Nsb3RuID0gMSwgICAg ICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93IHNpemUgbmVnb3RpYXRlZCBpbiBTLXBrdCAq LwotICAgIHRpbWVvdXRzID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBzdGF0aXN0 aWNzIHJlcG9ydGluZyAqLwotICAgIHNwYWNrZXRzID0gMCwgICAgICAgICAgICAgICAgICAgICAg IC8qICAuLi4gKi8KLSAgICBycGFja2V0cyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiAg Li4uICovCi0gICAgcmV0cmFucyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgLyogIC4uLiAq LwotICAgIGNydW5jaGVkID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qICAuLi4gKi8KLSAg ICB3bWF4ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi4uICovCi0gICAgd2N1 ciA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIC4uLiAqLwotICAgIHNydmlkbCA9 IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBpZGxlIHRpbWVvdXQgKi8KLSAg ICBzcnZkaXMgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgZmlsZSB4ZmVy IGRpc3BsYXkgKi8KLSAgICBzcnZ0aW0gPSBEU1JWVElNLCAgICAgICAgICAgICAgICAgICAvKiBT ZXJ2ZXIgY29tbWFuZCB3YWl0IHRpbWVvdXQgKi8KLSAgICBzcnZwaW5nID0gMSwgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTZXJ2ZXIga2VlcGFsaXZlICovCi0vKgotICB0aW1pbnQgaXMgdGhl IHRpbWVvdXQgaW50ZXJ2YWwgSSB1c2Ugd2hlbiB3YWl0aW5nIGZvciBhIHBhY2tldC4KLSAgcGt0 dGltIGlzIHRoZSBTRVQgUkVDRUlWRSBUSU1FT1VUIHZhbHVlLCBzZW50IHRvIHRoZSBvdGhlciBL ZXJtaXQuCi0gIHJ0aW1vIGlzIHRoZSBTRVQgU0VORCBUSU1FT1VUIHZhbHVlLiAgcnRpbW8gaXMg dGhlIGluaXRpYWwgdmFsdWUgb2YKLSAgdGltaW50LiAgdGltaW50IGlzIGNoYW5nZWQgYnkgdGhl IHZhbHVlIGluIHRoZSBpbmNvbWluZyBuZWdvdGlhdGlvbgotICBwYWNrZXQgdW5sZXNzIGEgU0VU IFNFTkQgVElNRU9VVCBjb21tYW5kIHdhcyBnaXZlbi4KLSovCi0gICAgdGltaW50ID0gRE1ZVElN LCAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dCBpbnRlcnZhbCBJIHVzZSAqLwotICAgIHBr dHRpbSA9IFVSVElNRSwgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXQgSSB3YW50IHlvdSB0 byB1c2UgKi8KLSAgICBydGltbyA9IERNWVRJTSwgICAgICAgICAgICAgICAgICAgICAvKiBOb3Jt YWwgcGFja2V0IHdhaXQgdGltZW91dCAqLwotICAgIHRpbWVmID0gMCwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEZsYWcgdG8gb3ZlcnJpZGUgd2hhdCB5b3UgYXNrICovCi0jaWZkZWYgQ0tf VElNRVJTCi0gICAgcnR0ZmxnID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIGR5 bmFtaWMgcm91bmQtdHJpcCB0aW1lcnMgKi8KLSNlbHNlCi0gICAgcnR0ZmxnID0gMCwgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVXNlIGZpeGVkIHRpbWVyICovCi0jZW5kaWYgLyogQ0tfVElN RVJTICovCi0gICAgbWludGltZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgLyogTWluaW11 bSB0aW1lb3V0ICovCi0gICAgbWF4dGltZSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgLyog TWF4aW11bSB0aW1lb3V0ICovCi0KLSAgICBucGFkID0gTVlQQUROLCAgICAgICAgICAgICAgICAg ICAgICAvKiBIb3cgbXVjaCBwYWRkaW5nIHRvIHNlbmQgKi8KLSAgICBteXBhZG4gPSBNWVBBRE4s ICAgICAgICAgICAgICAgICAgICAvKiBIb3cgbXVjaCBwYWRkaW5nIHRvIGFzayBmb3IgKi8KLSAg ICBiY3RyID0gREZCQ1QsICAgICAgICAgICAgICAgICAgICAgICAvKiBCbG9jayBjaGVjayB0eXBl IHJlcXVlc3RlZCAqLwotICAgIGJjdHUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEJsb2NrIGNoZWNrIHR5cGUgdXNlZCAqLwotICAgIGJjdGwgPSAxLCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEJsb2NrIGNoZWNrIGxlbmd0aCAqLwotICAgIGJjdGYgPSAwLAkJCQkvKiBC bG9jayBjaGVjayB0eXBlIDMgZm9yY2VkIG9uIGFsbCAqLwotICAgIGNfc2F2ZSA9IC0xLCAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEJsb2NrIGNoZWNrIHNhdmluZyBhbmQgcmVzdG9yaW5nICov Ci0gICAgc3Nfc2F2ZSA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAgLyogU2xvdy1zdGFydCBz YXZpbmcgYW5kIHJlc3RvcmluZyAqLwotICAgIGVicSA9ICBNWUVCUSwgICAgICAgICAgICAgICAg ICAgICAgIC8qIDh0aCBiaXQgcHJlZml4ICovCi0gICAgZWJxZmxnID0gMCwgICAgICAgICAgICAg ICAgICAgICAgICAgLyogOHRoLWJpdCBxdW90aW5nIGZsYWcgKi8KLSAgICBycWYgPSAtMSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHVzZWQgaW4gOGJxIG5lZ290aWF0aW9uICov Ci0gICAgcnEgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZWQgOGJx IGJpZCAqLwotICAgIHNxID0gJ1knLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbnQg OGJxIGJpZCAqLwotICAgIHJwdCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJl cGVhdCBjb3VudCAqLwotICAgIHJwdHEgPSBNWVJQVFEsICAgICAgICAgICAgICAgICAgICAgIC8q IFJlcGVhdCBwcmVmaXggKi8KLSAgICBycHRmbGcgPSAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZXBlYXQgcHJvY2Vzc2luZyBmbGFnICovCi0gICAgcnB0ZW5hID0gMSwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUmVwZWF0IHByb2Nlc3NpbmcgZW5hYmxlZCAqLwotICAgIHhmcmNh biA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGNhbmNlbGxhdGlvbiBl bmFibGVkICovCi0gICAgeGZyaW50ID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHJh bnNmZXIgaW50ZXJydXB0aW9uIGVuYWJsZWQgKi8KLSAgICB4ZnJjaHIgPSAzLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBjYW5jZWwgY2hhciA9IEN0cmwtQyAqLwotICAgIHhm cm51bSA9IDMsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lZWQgdGhyZWUgb2YgdGhlbSBi eSBkZWZhdWx0ICovCi0gICAgZ194ZnJ4bGEgPSAtMTsKLSAgICBjaGFyICogeGZybXNnID0gTlVM TDsgICAgICAgICAgICAgICAvKiBNZXNzYWdlIGZvciBmLnQuIGRpc3BsYXkgc2NyZWVuICovCi0j ZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBOT0NTRVRTCi1pbnQgeGZyeGxhID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiAqLwotI2Vs c2UKLWludCB4ZnJ4bGEgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmFibGVkIG9y IGRpc2FibGVkICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi1pbnQgaGF2ZWxmcyA9IDA7CQkJ LyogTGFyZ2UgZmlsZSBzdXBwb3J0IGF2YWlsYWJsZSAqLwotCi0jaWZuZGVmIE5PWEZFUgotaW50 IGVwa3RmbGcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEUtUEFDS0VUIGNvbW1hbmQg YWN0aXZlICovCi0KLWludCBjYXBhcyAgPSA5LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ b3NpdGlvbiBvZiBDYXBhYmlsaXRpZXMgKi8KLSAgICBscGNhcGIgPSAyLCAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBMb25nIFBhY2tldCBjYXBhYmlsaXR5ICovCi0gICAgbHBjYXByID0gMSwg ICAgICAgICAgICAgICAgICAgICAgICAgLyogIHJlcXVlc3RlZCAqLwotICAgIGxwY2FwdSA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB1c2VkICovCi0gICAgc3djYXBiID0gNCwgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU2xpZGluZyBXaW5kb3cgY2FwYWJpbGl0eSAqLwotICAg IHN3Y2FwciA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICByZXF1ZXN0ZWQgKGFsbG93 ZWQpICovCi0gICAgc3djYXB1ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHVzZWQg Ki8KLSAgICBhdGNhcGIgPSA4LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdHRyaWJ1dGUg Y2FwYWJpbGl0eSAqLwotICAgIGF0Y2FwciA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8q ICByZXF1ZXN0ZWQgKi8KLSAgICBhdGNhcHUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiAgdXNlZCAqLwotICAgIHJzY2FwYiA9IDE2LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJF U0VORCBjYXBhYmlsaXR5ICovCi0gICAgcnNjYXByID0gMSwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogIHJlcXVlc3RlZCBieSBkZWZhdWx0ICovCi0gICAgcnNjYXB1ID0gMCwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogIHVzZWQgKi8KLSAgICBsc2NhcGIgPSAzMiwgICAgICAgICAgICAg ICAgICAgICAgICAvKiBMb2NraW5nIFNoaWZ0IGNhcGFiaWxpdHkgKi8KLSAgICBsc2NhcHIgPSAx LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgcmVxdWVzdGVkIGJ5IGRlZmF1bHQgKi8KLSAg ICBsc2NhcHUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgdXNlZCAqLwotCi0vKiBG bGFncyBmb3Igd2hldGhlciB0byB1c2UgcGFydGljdWxhciBhdHRyaWJ1dGVzICovCi0KLWludCBh dGVuY2kgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmNvZGluZyBpbiAqLwotICAg IGF0ZW5jbyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuY29kaW5nIG91dCAqLwot ICAgIGF0ZGF0aSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGUgaW4gKi8KLSAg ICBhdGRhdG8gPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRlIG91dCAqLwotICAg IGF0ZGlzaSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3Bvc2l0aW9uIGluL291 dCAqLwotICAgIGF0ZGlzbyA9IDEsCi0gICAgYXRsZW5pID0gMSwgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTGVuZ3RoIGluL291dCAoYm90aCBraW5kcykgKi8KLSAgICBhdGxlbm8gPSAxLAot ICAgIGF0YmxraSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJsb2Nrc2l6ZSBpbi9v dXQgKi8KLSAgICBhdGJsa28gPSAxLAotICAgIGF0dHlwaSA9IDEsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEZpbGUgdHlwZSBpbi9vdXQgKi8KLSAgICBhdHR5cG8gPSAxLAotICAgIGF0c2lk aSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbSBJRCBpbi9vdXQgKi8KLSAg ICBhdHNpZG8gPSAxLAotICAgIGF0c3lzaSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgLyog U3lzdGVtLWRlcGVuZGVudCBwYXJhbWV0ZXJzIGluL291dCAqLwotICAgIGF0c3lzbyA9IDE7Ci0K LWludCBkaXNwb3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwb3NpdGlvbiAq LwotCi0jaWZkZWYgQ0tfUEVSTVMKLWludCBhdGxwcmkgPSAxLAotICAgIGF0bHBybyA9IDEsCi0g ICAgYXRncHJpID0gMSwKLSAgICBhdGdwcm8gPSAxOwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0K LWludCBhdGZybWkgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNvcmQgRm9ybWF0 IGluL291dCAqLwotICAgIGF0ZnJtbyA9IDE7Ci0KLSNpZmRlZiBTVFJBVFVTCi1pbnQgYXRjcmVp ID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3JlYXRvciBJRCBpbi9vdXQgKi8KLSAg ICBhdGNyZW8gPSAxLAotICAgIGF0YWN0aSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEFjY291bnQgaW4vb3V0ICovCi0gICAgYXRhY3RvID0gMTsKLSNlbmRpZiAvKiBTVFJBVFVTICov Ci0KLWludCBzcHJtbGVuID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kL1JlY2Vp dmUgcHJvdG9jb2wgcGFyYW1ldGVyICovCi1pbnQgcnBybWxlbiA9IC0xOyAgICAgICAgICAgICAg ICAgICAgICAgLyogc3RyaW5nIGxlbmd0aCBsaW1pdHMgKi8KLWludCBzZW5kaXBrdHMgPSAxOyAg ICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIEkgcGFja2V0cyAqLwotCi1DSEFSIHBhZGNoID0g TVlQQURDLCAgICAgICAgICAgICAgICAgICAgLyogUGFkZGluZyBjaGFyYWN0ZXIgdG8gc2VuZCAq LwotICAgIG15cGFkYyA9IE1ZUEFEQywgICAgICAgICAgICAgICAgICAgIC8qIFBhZGRpbmcgY2hh cmFjdGVyIHRvIGFzayBmb3IgKi8KLSAgICBzZW9sID0gTVlFT0wsICAgICAgICAgICAgICAgICAg ICAgICAvKiBFbmQtT2YtTGluZSBjaGFyYWN0ZXIgdG8gc2VuZCAqLwotICAgIGVvbCA9IE1ZRU9M LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZC1PZi1MaW5lIGNoYXJhY3RlciB0byBsb29r IGZvciAqLwotICAgIGN0bHEgPSBDVExRLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRy b2wgcHJlZml4IGluIGluY29taW5nIGRhdGEgKi8KLSAgICBteWN0bHEgPSBDVExRLCAgICAgICAg ICAgICAgICAgICAgICAvKiBPdXRib3VuZCBjb250cm9sIGNoYXJhY3RlciBwcmVmaXggKi8KLSAg ICBteXJwdHEgPSBNWVJQVFE7ICAgICAgICAgICAgICAgICAgICAvKiBSZXBlYXQgcHJlZml4IEkg d2FudCB0byB1c2UgKi8KLQotaW50IHJwdG1pbiA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFJlcGVhdC1jb3VudCBtaW5pbXVtICovCi0KLWludCB1c2VwaXBlcyA9IDAsICAgICAgICAg ICAgICAgICAgICAgICAvKiBVc2VkIGZvciB4ZmVyIHRvL2Zyb20gcGlwZXMgKi8KLSAgICBnX3Vz ZXBpcGVzID0gLTE7Ci0KLWNoYXIgKiBmaWxlZmlsZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAv KiBGaWxlIGNvbnRhaW5pbmcgbGlzdCBvZiBmaWxlbmFtZXMgKi8KLS8qIENEIG1lc3NhZ2UgZmls ZW5hbWUgbGlzdCAqLwotCi1jaGFyIHdob2FyZXVbMTZdID0geyBOVUwsIE5VTCB9OyAgICAgICAg LyogU3lzdGVtIElEIG9mIG90aGVyIEtlcm1pdCAqLwotaW50IHN5c2luZGV4ID0gLTE7ICAgICAg ICAgICAgICAgICAgICAgIC8qIGFuZCBpbmRleCB0byBpdHMgc3lzdGVtIElEIHN0cnVjdCAqLwot aW50IG15aW5kZXggID0gLTE7Ci1pbnQgd2VhcmVhbGlrZSA9IDA7ICAgICAgICAgICAgICAgICAg ICAgLyogMiBLZXJtaXRzIGhhdmUgY29tcGF0aWJsZSBzeXNpZHMgKi8KLWNoYXIgKiBja3N5c2lk ID0gICAgICAgICAgICAgICAgICAgICAgICAvKiBNeSBzeXN0ZW0gSUQgKi8KLSNpZmRlZiBVTklY Ci0gICAgIlUxIgotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiRDciCi0jZWxzZQotI2lmZGVmIE9T SwotICAgICJVRCIKLSNlbHNlCi0jaWZkZWYgQU1JR0EKLSAgICAiTDMiCi0jZWxzZQotI2lmZGVm IE1BQwotICAgICJBMyIKLSNlbHNlCi0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSAgICAiVU4iCi0j ZWxzZSAvKiBOVCAqLwotICAgICJVTyIKLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UgLyogT1MyICov Ci0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICAiRjMiCi0jZWxzZQotI2lmZGVmIEdFTURPUwotICAg ICJLMiIKLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotICAgICJNViIKLSNlbHNlCi0gICAgIiIKLSNl bmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogR0VNRE9TICovCi0jZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBB TUlHQSAqLwotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVO SVggKi8KLSAgICA7Ci0KLWludCBvb3B0cyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBPLVBhY2tldCBPcHRpb25zICovCi1pbnQgb21vZGUgPSAtMTsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTy1QYWNrZXQgVHJhbnNmZXIgTW9kZSAqLwotaW50IG9uYW1lID0gLTE7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE8tUGFja2V0IEZpbGVuYW1lIE9wdGlvbnMgKi8KLWludCBv cGF0aCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPLVBhY2tldCBQYXRobmFtZSBP cHRpb25zICovCi0KLXN0cnVjdCB6YXR0ciBpYXR0cjsgICAgICAgICAgICAgICAgICAgICAvKiBJ bmNvbWluZyBmaWxlIGF0dHJpYnV0ZXMgKi8KLQotI2lmZGVmIFZNUwotLyogVk1TIGxhYmVsZWQg ZmlsZSBkZWZhdWx0IG9wdGlvbnMgLSBuYW1lIG9ubHkuICovCi1pbnQgbGZfb3B0cyA9IExCTF9O QU07Ci0jZWxzZQotI2lmZGVmIE9TMgotLyogT1MvMiBsYWJlbGVkIGZpbGUgZGVmYXVsdCBvcHRp b25zLCBhbGwgYXR0cmlidXRlcyBidXQgYXJjaGl2ZWQuICovCi11bnNpZ25lZCBsb25nIGludCBs Zl9vcHRzID0gTEJMX0VYVHxMQkxfSElEfExCTF9ST3xMQkxfU1lTOwotI2Vsc2UKLWludCBsZl9v cHRzID0gMDsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotLyogUGFja2V0 LXJlbGF0ZWQgdmFyaWFibGVzICovCi0KLWludCBwa3RudW0gPSAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDdXJyZW50IHBhY2tldCBudW1iZXIgKi8KLSAgICBzbmR0eXAgPSAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIG9mIHBhY2tldCBqdXN0IHNlbnQgKi8KLSAgICBy Y3Z0eXAgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIG9mIHBhY2tldCBqdXN0 IHJlY2VpdmVkICovCi0gICAgcnNuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UmVjZWl2ZWQgcGFja2V0IHNlcXVlbmNlIG51bWJlciAqLwotICAgIHJsbiwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmVkIHBhY2tldCBsZW5ndGggKi8KLSAgICBzaXpl LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHNpemUgb2Ygb3V0cHV0 IHBrdCBkYXRhICovCi0gICAgb3NpemUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UHJldmlvdXMgb3V0cHV0IHBhY2tldCBkYXRhIHNpemUgKi8KLSAgICBtYXhzaXplLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBNYXggc2l6ZSBmb3IgYnVpbGRpbmcgZGF0YSBmaWVsZCAq LwotICAgIHNwa3RsID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBwYWNr ZXQgYmVpbmcgc2VudCAqLwotICAgIHJwa3RsID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIExlbmd0aCBvZiBwYWNrZXQganVzdCByZWNlaXZlZCAqLwotICAgIHBrdHBhdXMgPSAwLCAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVycGFja2V0IHBhdXNlIGludGVydmFsLCBtc2Vj ICovCi0gICAgcnByaW50ZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVNT1RFIFBS SU5UIGZsYWcgKi8KLSAgICBybWFpbGYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBN QUlMIGZsYWcgKi8KLSAgICB4ZmVyc3RhdCA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAvKiBT dGF0dXMgb2YgbGFzdCB0cmFuc2FjdGlvbiAqLwotICAgIGZpbGVzdGF0dXMgPSAwOyAgICAgICAg ICAgICAgICAgICAgIC8qIFN0YXR1cyBvZiBsYXN0IGZpbGUgdHJhbnNmZXIgKi8KLQotQ0hBUiBw a3Rtc2didWZbUEtUTVNHTEVOKzFdOwotQ0hBUiAqZXBrdG1zZyA9IHBrdG1zZ2J1ZjsKLQotI2lm ZGVmIHBkcDExCi1pbnQgc3J2Y21kbGVuID0gTUFYUlA7ICAgICAgICAgICAgICAgICAgLyogc3J2 Y21kIGJ1ZmZlciBsZW5ndGggKi8KLSNlbHNlCi0jaWZkZWYgRFlOQU1JQwotaW50IHNydmNtZGxl biA9IE1BWFJQOwotI2Vsc2UKLWludCBzcnZjbWRsZW4gPSAwOwotI2VuZGlmIC8qIERZTkFNSUMg Ki8KLSNlbmRpZiAvKiBwZHAxMSAqLwotCi1DSEFSCi0jaWZkZWYgcGRwMTEKLSAgICBzcnZjbWRi dWZbTUFYUlArNF0sCi0gICAgKnNydmNtZCA9IHNydmNtZGJ1ZiwKLSNlbHNlCi0jaWZkZWYgRFlO QU1JQwotICAgICpzcnZjbWQgPSAoQ0hBUiAqKTAsICAgICAgICAgICAgICAgIC8qIFdoZXJlIHRv IGRlY29kZSBzZXJ2ZXIgY29tbWFuZCAqLwotI2Vsc2UKLSAgICBzcnZjbWRidWZbTUFYUlArNF0s Ci0gICAgKnNydmNtZCA9IHNydmNtZGJ1ZiwKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0jZW5kaWYg LyogcGRwMTEgKi8KLSAgICBwYWRidWZbOTZdLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBC dWZmZXIgZm9yIHNlbmQtcGFkZGluZyAqLwotICAgICpyZWNwa3QsCi0gICAgKnJkYXRhcCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byByZWNlaXZlZCBwYWNrZXQgZGF0 YSAqLwotICAgICpkYXRhID0gKENIQVIgKikwLCAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIg dG8gc2VuZC1wYWNrZXQgZGF0YSAqLwotICAgICpzcnZwdHIsICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFBvaW50ZXIgdG8gc3J2Y21kICovCi0gICAgbXlzdGNoID0gU09ILCAgICAgICAg ICAgICAgICAgICAgICAgLyogT3V0Ym91bmQgcGFja2V0LXN0YXJ0IGNoYXJhY3RlciAqLwotICAg IHN0Y2hyID0gU09IOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluY29taW5nIHBhY2tldC1z dGFydCBjaGFyYWN0ZXIgKi8KLQotLyogRmlsZS1yZWxhdGVkIHZhcmlhYmxlcyAqLwotCi0jaWZu ZGVmIE5PTVNFTkQgICAgICAgICAgICAgICAgICAgICAgICAgLyogTXVsdGlwbGUgU0VORCAqLwot c3RydWN0IGZpbGVsaXN0ICogZmlsZWhlYWQgPSBOVUxMOyAgICAgIC8qIFNFTkQgbGlzdCAqLwot c3RydWN0IGZpbGVsaXN0ICogZmlsZXRhaWwgPSBOVUxMOwotc3RydWN0IGZpbGVsaXN0ICogZmls ZW5leHQgPSBOVUxMOwotaW50IGFkZGxpc3QgPSAwOwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQot Y2hhciBmaWxuYW1bQ0tNQVhQQVRIICsgMV07ICAgICAgICAgICAgIC8qIE5hbWUgb2YgY3VycmVu dCBmaWxlLiAqLwotY2hhciBvZmlsbmFtW0NLTUFYUEFUSCArIDFdOyAgICAgICAgICAgIC8qIE9y aWdpbmFsIG5hbWUuICovCi0KLWludCBwaXBlc2VuZCA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBOb256ZXJvIGlmIHNlbmRpbmcgZnJvbSBwaXBlICovCi0jaWZkZWYgUElQRVNFTkQKLWNo YXIgKiBzbmRmaWx0ZXIgPSBOVUxMOyAgICAgICAgICAgICAgICAvKiBTZW5kIGFuZCByZWNlaXZl IGZpbHRlcnMgKi8KLWNoYXIgKiByY3ZmaWx0ZXIgPSBOVUxMOwotI2VuZGlmIC8qIFBJUEVTRU5E ICovCi0KLWNoYXIgKiogc25kYXJyYXkgPSBOVUxMOyAgICAgICAgICAgICAgICAvKiBTRU5EIC9B UlJBWSBwb2ludGVyIGFuZCByYW5nZSAqLwotI2lmbmRlZiBOT1NQTAotaW50IHNuZHhsbyA9IC0x LCBzbmR4aGkgPSAtMSwgc25keGluID0gLTE7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRpZiAv KiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT1NFUlZFUgotaW50IG5nZXRwYXRoID0gMDsgICAgICAg ICAgICAgICAgICAgICAgIC8qIEdFVCBzZWFyY2ggcGF0aCAqLwotaW50IGZyb21nZXRwYXRoID0g MDsKLWNoYXIgKiBnZXRwYXRoW01BWEdFVFBBVEhdOwotY2hhciAqIHhfdXNlciA9IE5VTEw7ICAg ICAgICAgICAgICAgICAgIC8qIFNlcnZlciBsb2dpbiBpbmZvcm1hdGlvbiAqLwotY2hhciAqIHhf cGFzc3dkID0gTlVMTDsKLWNoYXIgKiB4X2FjY3QgPSBOVUxMOwotI2VuZGlmIC8qIE5PU0VSVkVS ICovCi0KLWludCB4X2xvZ2luID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2dpbiBy ZXF1aXJlZCAqLwotaW50IHhfbG9nZ2VkID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFVz ZXIgaXMgbG9nZ2VkIGluICovCi0KLWV4dGVybiBpbnQgdGltZWxpbWl0OwotCi0jaWZkZWYgQ0tf TE9HSU4KLWludCBsb2dpbnRpbW8gPSAzMDA7ICAgICAgICAgICAgICAgICAgICAvKiBMb2dpbiB0 aW1lb3V0ICovCi1jaGFyICogdXNlcmZpbGUgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogRm9y YmlkZGVuIHVzZXIgZmlsZSAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jaWZkZWYgSUtTRAot Y2hhciAqIGFub25maWxlID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIEFub255bW91cyBsb2dp biBpbml0IGZpbGUgKi8KLWNoYXIgKiBhbm9ucm9vdCA9IE5VTEw7ICAgICAgICAgICAgICAgICAv KiBBbm9ueW1vdXMgZmlsZS1zeXN0ZW0gcm9vdCAqLwotaW50IGlrc190aW1vICA9IDMwMDsgICAg ICAgICAgICAgICAgICAgIC8qIDUgbWludXRlcyBpZGxlIHRpbW8gKi8KLWludCBpa3NfcmV0cnkg PSAzOyAgICAgICAgICAgICAgICAgICAgICAvKiAzIGF0dGVtcHRzIGF0IGxvZ2luICovCi0jZW5k aWYgLyogSUtTRCAqLwotCi0jaWZkZWYgQ0tTWVNMT0cKLWV4dGVybiBWT0lEIHpzeXNsb2coKTsK LWV4dGVybiBpbnQgY2t4bG9nZ2luZywgY2t4c3lzbG9nOwotI2VuZGlmIC8qIENLU1lTTE9HICov Ci0KLUNLX09GRl9UIGZzaXplID0gKENLX09GRl9UKTAsCQkvKiBTaXplIG9mIGN1cnJlbnQgZmls ZSAqLwotIHNlbmRzdGFydCA9IChDS19PRkZfVCkwLAkJLyogU0VORCBzdGFydCBwb3NpdGlvbiAq LwotIGNhbGlicmF0ZSA9IChDS19PRkZfVCkwOwkJLyogTm9uemVybyBpZiBjYWxpYnJhdGlvbiBy dW4gKi8KLQotaW50IG56eG9wdHMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9wdGlv bnMgZm9yIG56eHBhbmQoKSAqLwotaW50IG5maWxzID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE51bWJlciBvZiBmaWxlcyBpbiBmaWxlIGdyb3VwICovCi1pbnQgd2lsZGVuYSA9IDE7 CQkJLyogV2lsZGNhcmQgZXhwYW5zaW9uIGVuYWJsZWQgKi8KLSNpZmRlZiBVTklYCi1pbnQgd2ls ZHhwYW5kID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogV2hvIGV4cGFuZHMgd2lsZGNhcmRz LCAwPUtlcm1pdC4uICovCi0jZWxzZSAvKiBVTklYICovCi0jaWZkZWYgU1RSQVRVUwotaW50IHdp bGR4cGFuZCA9IDE7CQkJLyogMT1TaGVsbC4gKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5k aWYgLyogVU5JWCAqLwotI2lmZGVmIFVOSVhPUk9TSwotaW50IG1hdGNoZG90ID0gMDsgICAgICAg ICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgdG8gbWF0Y2ggZG90IGZpbGVzICovCi0jZWxzZQot aW50IG1hdGNoZG90ID0gMTsKLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLWludCBtYXRjaGZpZm8g PSAwOwkJCS8qIFdoZXRoZXIgdG8gbWF0Y2ggRklGTyAiZmlsZXMiICovCi1pbnQgY2xmaWxzID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgY29tbWFuZC1saW5lIGZpbGVz ICovCi1pbnQgc3RheWZsZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3Ig InN0YXkiLCBpLmUuICItUyIgKi8KLWludCB4ZmluaXNoID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBGbGFnIGZvciBGSU5JU0ggPSBFWElUICovCi1sb25nIHp0dXNlYyA9IC0xTDsgICAg ICAgICAgICAgICAgICAgICAgLyogVXNlZCB3aXRoIHp0aW1lKCkgKi8KLWxvbmcgenRtc2VjID0g LTFMOyAgICAgICAgICAgICAgICAgICAgICAvKiBEaXR0byAqLwotCi0vKiBDb21tdW5pY2F0aW9u IGRldmljZSAvIGNvbm5lY3Rpb24gdmFyaWFibGVzICovCi0KLWNoYXIgdHRuYW1lW1RUTkFNTEVO KzFdOyAgICAgICAgICAgICAgICAvKiBOYW1lIG9mIGNvbW11bmljYXRpb24gZGV2aWNlICovCi0K LSNpZmRlZiBNQUMKLWludCBjb25uZWN0ZWQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBU cnVlIGlmIGNvbm5lY3RlZCAqLwotaW50IHN0YXJ0Y29ubmVjdGVkOyAgICAgICAgICAgICAgICAg ICAgIC8qIGluaXRpYWwgc3RhdGUgb2YgY29ubmVjdGVkICovCi0jZW5kaWYgLyogTUFDICovCi0K LWxvbmcgc3BlZWQgPSAtMUw7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tdW5pY2F0aW9u IGRldmljZSBzcGVlZCAqLwotaW50IHdhc2Nsb3NlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAg IC8qIENvbm5lY3Rpb24gd2FzIGp1c3QgY2xvc2VkICovCi1pbnQgd2h5Y2xvc2VkID0gV0NfUkVN TzsgICAgICAgICAgICAgICAgLyogd2h5IGl0IHdhcyBjbG9zZWQgKi8KLWludCBxbnhwb3J0bG9j ayA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBRTlggcG9ydCBsb2NraW5nIG9uL29mZiAqLwot Ci0jaWZuZGVmIENMU09ORElTQwotI2RlZmluZSBDTFNPTkRJU0MgMAotI2VuZGlmIC8qIENMU09O RElTQyAqLwotCi1pbnQgY3hmbG93W0NYVF9NQVgrMV07ICAgICAgICAgICAgICAgICAgLyogU2Vl IGluaXRmbG93KCkgKi8KLQotI2lmbmRlZiBOT1NIT1cKLWNoYXIgKiBmbG9uYW1lW10gPSB7ICAg ICAgICAgICAgICAgICAgICAvKiBGbG93IGNvbnRyb2wgbmFtZXMgKi8KLSAgIm5vbmUiLCAieG9u L3hvZmYiLCAicnRzL2N0cyIsICJkdHIvY2QiLCAiZXR4L2FjayIsICJzdHJpbmciLAotICAieHh4 MSIsICJ4eHgyIiwgImR0ci9jdHMiLCAia2VlcCIsICJhdXRvIgotfTsKLWludCBuZmxvbmFtZSA9 IChzaXplb2YoZmxvbmFtZSkgLyBzaXplb2YoY2hhciAqKSk7Ci0KLWNoYXIgKiBjeG5hbWVbXSA9 IHsgICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIHR5cGUgbmFtZXMgKi8KLSAgInJl bW90ZSIsICJkaXJlY3Qtc2VyaWFsIiwgIm1vZGVtIiwgInRjcC9pcCIsICJ4LjI1IiwgImRlY25l dCIsCi0gICJsYXQiLCAibmV0YmlvcyIsICJuYW1lZC1waXBlIiwgInNzaCIsICJwaXBlIgotfTsK LWludCBuY3huYW1lID0gKHNpemVvZihjeG5hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOwotI2VuZGlm IC8qIE5PU0hPVyAqLwotCi1pbnQgcGFyaXR5ID0gREVGUEFSLCAgICAgICAgICAgICAgICAgICAg LyogUGFyaXR5IHNwZWNpZmllZCwgMCwnZScsJ28nLGV0YyAqLwotICAgIGh3cGFyaXR5ID0gMCwg ICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcmR3YXJlIHBhcml0eSBmb3Igc2VyaWFsIHBvcnQg Ki8KLSAgICBzdG9wYml0cyA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAvKiBTdG9wIGJpdHMg Zm9yIHNlcmlhbCBwb3J0ICovCi0gICAgY2xzb25kaXNjID0gQ0xTT05ESVNDLCAgICAgICAgICAg ICAgLyogU2VyaWFsIHBvcnQgY2xvc2Ugb24gZGlzY29ubmVjdCAqLwotICAgIGF1dG9wYXIgPSAw LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG9tYXRpYyBwYXJpdHkgY2hhbmdlIGZsYWcg Ki8KLSAgICBzb3NpID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaGlmdC1Jbi9P dXQgZmxhZyAqLwotICAgIGZsb3cgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZs b3cgY29udHJvbCAoc2VlIGluaXRmbG93KCkpICovCi0gICAgYXV0b2Zsb3cgPSAxLCAgICAgICAg ICAgICAgICAgICAgICAgLyogQXV0b21hdGljIGZsb3cgY29udHJvbCAqLwotICAgIHR1cm4gPSAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExpbmUgdHVybmFyb3VuZCBoYW5kc2hha2Ug ZmxhZyAqLwotICAgIHR1cm5jaCA9IFhPTiwgICAgICAgICAgICAgICAgICAgICAgIC8qIExpbmUg dHVybmFyb3VuZCBjaGFyYWN0ZXIgKi8KLSAgICBkdXBsZXggPSAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBEdXBsZXgsIGZ1bGwgYnkgZGVmYXVsdCAqLwotICAgIGVzY2FwZSA9IERGRVND LCAgICAgICAgICAgICAgICAgICAgIC8qIEVzY2FwZSBjaGFyYWN0ZXIgZm9yIGNvbm5lY3QgKi8K LSAgICBja2RlbGF5ID0gRERFTEFZLCAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsIGRlbGF5 IGJlZm9yZSBzZW5kaW5nICovCi0gICAgdG5sbSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVGVybWluYWwgbmV3bGluZSBtb2RlICovCi0KLS8qIE5ldHdvcmtzIGZvciBTRVQgSE9T VCAqLwotCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgTVlIT1NUTCAxMDI0Ci0jZWxzZQotI2Rl ZmluZSBNWUhPU1RMIDEwMAotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0KLWNoYXIgbXlob3N0W01Z SE9TVExdOyAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBob3N0IG5hbWUgKi8KLWludCBuZXR3 b3JrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHZzIHNlcmlhbCBjb25u ZWN0aW9uICovCi1pbnQgaW5zZXJ2ZXIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogUnVu bmluZyBhcyBhbiBJbnRlcm5ldCBzZXJ2ZXIgKi8KLWludCBpc2d1ZXN0ID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBVc2VyIGlzIGFub255bW91cyAqLwotY2hhciAqIGNsaWVudGhvc3Qg PSBOVUxMOyAgICAgICAgICAgICAgIC8qIFBlZXIgaG9zdCBuYW1lIG9yIGFkZHJlc3MgKi8KLWlu dCB0Y3BfaW5jb21pbmcgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBJbmNvbWluZyBUQ1AgY29u bmVjdGlvbj8gKi8KLQotI2lmZGVmIE5FVENPTk4KLSNpZmRlZiBUQ1BTT0NLRVQKLWludCBuZXR0 eXBlID0gTkVUX1RDUEI7ICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IG5ldHdvcmsgdHlwZSAq LwotI2Vsc2UKLSNpZmRlZiBTVU5YMjUKLWludCBuZXR0eXBlID0gTkVUX1NYMjU7Ci0jZWxzZQot I2lmZGVmIElCTVgyNQotaW50IG5ldHR5cGUgPSBORVRfSVgyNTsKLSNlbHNlCi0jaWZkZWYgSFBY MjUKLWludCBuZXR0eXBlID0gTkVUX0hYMjU7Ci0jZWxzZQotI2lmZGVmIFNUUkFUVVNYMjUKLWlu dCBuZXR0eXBlID0gTkVUX1ZYMjU7Ci0jZWxzZQotI2lmZGVmIERFQ05FVAotaW50IG5ldHR5cGUg PSBORVRfREVDOwotI2Vsc2UKLSNpZmRlZiBTVVBFUkxBVAotaW50IG5ldHR5cGUgPSBORVRfU0xB VDsKLSNlbHNlCi1pbnQgbmV0dHlwZSA9IE5FVF9OT05FOwotI2VuZGlmIC8qIFNVUEVSTEFUICov Ci0jZW5kaWYgLyogREVDTkVUICovCi0jZW5kaWYgLyogU1RSQVRVU1gyNSAqLwotI2VuZGlmIC8q IEhQWDI1ICovCi0jZW5kaWYgLyogSUJNWDI1ICovCi0jZW5kaWYgLyogU1VOWDI1ICovCi0jZW5k aWYgLyogVENQU09DS0VUICovCi0jZWxzZSAgLyogTkVUQ09OTiAqLwotaW50IG5ldHR5cGUgPSBO RVRfTk9ORTsKLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNpZmRlZiBBTllYMjUKLWludCByZXZj YWxsID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBYLjI1IHJldmVyc2UgY2FsbCBub3Qg c2VsZWN0ZWQgKi8KLWludCBjbG9zZ3IgID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBY LjI1IGNsb3NlZCB1c2VyIGdyb3VwICAqLwotaW50IGN1ZGF0YSA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFguMjUgY2FsbCB1c2VyIGRhdGEgbm90IHNwZWNpZmllZCAqLwotY2hhciB1 ZGF0YVtNQVhDVURBVEFdOyAgICAgICAgICAgICAgICAgIC8qIFguMjUgY2FsbCB1c2VyIGRhdGEg Ki8KLQotI2lmZGVmIElCTVgyNQotLyoKLSAgSSB3YXMgdW5hYmxlIHRvIGZpbmQgYW55IHByZS1k ZWZpbmVkIE1BWCB2YWx1ZXMgZm9yIHgyNSBhZGRyZXNzZXMgLSB0aGUKLSAgYWRkcmVzc2VzIHRo YXQgSSd2ZSBzZWVuIGhhdmUgYmVlbiBhcm91bmQgMTAtMTIgY2hhcmFjdGVycyAzMiBpcyBwcm9i YWJseQotICBlbm91Z2gsIDY0IGlzIGhvcGVmdWxseSBzYWZlIGZvciBldmVyeW9uZS4KLSovCi0g ICAgeDI1YWRkcl90IGxvY2FsX251YSA9IHsnXDAnfTsgICAgICAgLyogbG9jYWwgeC4yNSBhZGRy ZXNzICovCi0gICAgeDI1YWRkcl90IHJlbW90ZV9udWEgPSB7J1wwJ307ICAgICAgLyogcmVtb3Rl IHguMjUgYWRkcmVzcyAqLwotICAgIGNoYXIgeDI1bmFtZVszMl0gPSB7J1wwJ307ICAgICAgICAg IC8qIHgyNSBkZXZpY2UgbmFtZSwgc3gyNWEwIG9yIHN4MjVhMSAqLwotICAgIGNoYXIgeDI1ZGV2 WzY0XSA9ICAiL2Rldi94MjVwa3QiOyAgIC8qIHgyNSBkZXZpY2UgaW4gL2RldiAqLwotICAgIGlu dCB4MjVwb3J0ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIHBvcnQgdXNlZCBmb3IgWC4yNSAt IEFJWCBvbmx5ICovCi0jZW5kaWYgLyogSUJNWDI1ICovCi0KLSNpZm5kZWYgSUJNWDI1Ci0vKgot ICBUaGlzIGNvbmRpdGlvbiBpcyB1bnJlbGF0ZWQgdG8gdGhlIGFib3ZlIElCTVgyNSBjb25kaXRp b24uCi0gIElCTSBYLjI1IGRvZXNuJ3QgaGF2ZSBQQUQgc3VwcG9ydC4KLSovCi0gICAgQ0hBUiBw YWRwYXJtc1tNQVhQQURQQVJNUysxXTsgLyogWC4zIHBhcmFtZXRlcnMgKi8KLSNlbmRpZiAvKiBJ Qk1YMjUgKi8KLSNlbmRpZiAvKiBBTllYMjUgKi8KLQotLyogT3RoZXIgaXRlbXMgKi8KLQotaW50 IGlzaW50ZXJydXB0ZWQgPSAwOyAgICAgICAgICAgICAgICAgIC8qIFVzZWQgaW4gZXhjZXB0aW9u IGhhbmRsaW5nICovCi1pbnQgd2hhdCA9IFdfSU5JVDsgICAgICAgICAgICAgICAgICAgICAgLyog V2hhdCBJIGFtIGRvaW5nICovCi1pbnQgbGFzdHhmZXIgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgLyogTGFzdCB0cmFuc2ZlciAoc2VuZCBvciByZWNlaXZlKSAqLwotCi1leHRlcm4gaW50IG1k bXR5cDsgICAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gKC9uZXR3b3JrKSB0eXBlICovCi0K LSNpZmRlZiBOVAotZXh0ZXJuIGludCBTdGFydGVkRnJvbURpYWxlcjsKLSNpZmRlZiBOVFNJRwot ZXh0ZXJuIGludCBUbHNJbmRleDsKLSNlbmRpZiAvKiBOVFNJRyAqLwotI2lmZGVmIE5UQVNNCi11 bnNpZ25lZCBsb25nIEVTUFRvUmVzdG9yZTsgICAgICAgICAgICAgLyogRGl0dG8gKi8KLSNlbmRp ZiAvKiBOVEFTTSAqLwotI2VuZGlmIC8qIE5UICovCi0KLSNpZmRlZiBPUzJQTQotaW50IG9zMnBt ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TLzIgUHJlc2VudGF0aW9uIE1hbmFn ZXIgZmxhZyAqLwotI2VuZGlmIC8qIE9TMlBNICovCi0KLS8qIFRlcm1pbmFsIHNjcmVlbiBzaXpl LCBpZiBrbm93biwgLTEgbWVhbnMgdW5rbm93bi4gKi8KLQotI2lmZGVmIE9TMgotI2luY2x1ZGUg ImNrb2Nvbi5oIgotI2lmZGVmIEtVSQotaW50IHR0X3Jvd3NbVk5VTV0gPSB7MjQsMjQsMjUsMX07 ICAgICAgIC8qIFJvd3MgKGhlaWdodCkgKi8KLWludCB0dF9jb2xzW1ZOVU1dID0gezgwLDgwLDgw LDgwfTsgICAgICAvKiBDb2x1bW5zICh3aWR0aCkgKi8KLWludCBjbWRfcm93cyA9IDI0LCBjbWRf Y29scyA9IDgwOyAgICAgICAvKiBDb21tYW5kL2NvbnNvbGUgc2NyZWVuIGRpbWVuc2lvbnMgKi8K LSNlbHNlIC8qIEtVSSAqLwotaW50IHR0X3Jvd3NbVk5VTV0gPSB7LTEsMjQsMjUsMX07ICAgICAg IC8qIFJvd3MgKGhlaWdodCkgKi8KLWludCB0dF9jb2xzW1ZOVU1dID0gey0xLDgwLDgwLDgwfTsg ICAgICAvKiBDb2x1bW5zICh3aWR0aCkgKi8KLWludCBjbWRfcm93cyA9IC0xLCBjbWRfY29scyA9 IC0xOyAgICAgICAvKiBDb21tYW5kL2NvbnNvbGUgc2NyZWVuIGRpbWVuc2lvbnMgKi8KLSNlbmRp ZiAvKiBLVUkgKi8KLWludCBrOTVzdGRpbyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBT dGRpbyB0aHJlYWRzICovCi1pbnQgdHRfYmVsbCA9IFhZQl9BVUQgfCBYWUJfU1lTOyAgICAgICAg LyogQkVMTCBBVURJQkxFIChzeXN0ZW0gc291bmRzKSAqLwotI2Vsc2UgLyogT1MyICovCi1pbnQg dHRfcm93cyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogUm93cyAoaGVpZ2h0KSAqLwot aW50IHR0X2NvbHMgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbHVtbnMgKHdpZHRo KSAqLwotaW50IGNtZF9yb3dzID0gMjQsIGNtZF9jb2xzID0gODA7ICAgICAgIC8qIENvbW1hbmQv Y29uc29sZSBzY3JlZW4gZGltZW5zaW9ucyAqLwotaW50IHR0X2JlbGwgPSBYWUJfQVVEOyAgICAg ICAgICAgICAgICAgIC8qIEJFTEwgT04gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotaW50IHR0X3By aW50ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zcGFyZW50IHByaW50IGRpc2Fi bGVkICovCi1pbnQgdHRfZXNjYXBlID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogRXNjYXBp bmcgYmFjayBpcyBlbmFibGVkICovCi1pbnQgdHRfc2Nyb2xsID0gMTsgICAgICAgICAgICAgICAg ICAgICAgLyogU2Nyb2xsaW5nIG9wZXJhdGlvbnMgYXJlIGVuYWJsZWQgKi8KLQotaW50IHRuX2V4 aXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4aXQgb24gZGlzY29ubmVjdCAqLwot Ci1pbnQgZXhpdG9uY2xvc2UgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBvbiBjbG9z ZSAqLwotaW50IGV4aXRoYW5ndXAgPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIEhhbmd1cCBv biBleGl0ICovCi1pbnQgaGF2ZWxpbmUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogU0VU IExJTkUgb3IgU0VUIEhPU1QgaW4gZWZmZWN0ICovCi1pbnQgdGxldmVsID0gLTE7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogVGFrZS1maWxlIGNvbW1hbmQgbGV2ZWwgKi8KLWludCBoaW50cyA9 IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHRvIGdpdmUgaGludHMgKi8K LQotI2lmZGVmIE5PTE9DQUwKLWludCByZW1vbmx5ID0gMTsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZW1vdGUtbW9kZS1vbmx5IGFkdmlzb3J5ICgtUikgKi8KLWludCBub2xvY2FsID0gMTsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1vdGUtb25seSBzdHJpY3RseSBlbmZvcmNlZCAq LwotI2Vsc2UKLWludCByZW1vbmx5ID0gMDsKLWludCBub2xvY2FsID0gMDsKLWludCBjeF9zdGF0 dXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBDT05ORUNUIHJldHVybiBzdGF0dXMgKi8K LSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9TUEwKLWV4dGVybiBpbnQgY21kbHZs OyAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGxldmVsICovCi1leHRlcm4gaW50IG1h Y2x2bDsgICAgICAgICAgICAgICAgICAgICAgLyogTWFjcm8gaW52b2NhdGlvbiBsZXZlbCAqLwot I2VuZGlmIC8qIE5PU1BMICovCi0KLWludCBwcm90b2NvbCAgPSBQUk9UT19LOyAgICAgICAgICAg ICAgICAvKiBGaWxlIHRyYW5zZmVyIHByb3RvY29sID0gS2VybWl0ICovCi0KLSNpZmRlZiBORVdE RUZBVUxUUwotaW50IHByZWZpeGluZyA9IFBYX0NBVTsKLSNlbHNlCi1pbnQgcHJlZml4aW5nID0g UFhfQUxMOwotI2VuZGlmIC8qIE5FV0RFRkFVTFRTICovCi0KLWV4dGVybiBzaG9ydCBjdGxwW107 ICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sLXByZWZpeCB0YWJsZSAqLwotCi1pbnQgY2Fy cmllciA9IENBUl9BVVQ7ICAgICAgICAgICAgICAgICAgLyogUGF5IGF0dGVudGlvbiB0byBjYXJy aWVyIHNpZ25hbCAqLwotaW50IGNkdGltbyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IENhcnJpZXIgd2FpdCB0aW1lb3V0ICovCi1pbnQgeGl0c3RhID0gR09PRF9FWElUOyAgICAgICAg ICAgICAgICAgLyogUHJvZ3JhbSBleGl0IHN0YXR1cyAqLwotCi0jaWZkZWYgVk1TICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBmaWxlbmFtZSBjb2xsaXNpb24gYWN0aW9u ICovCi1pbnQgZm5jYWN0ID0gWFlGWF9YOyAgICAgICAgICAgICAgICAgICAgLyogUkVQTEFDRSBm b3IgVk1TICovCi0jZWxzZQotaW50IGZuY2FjdCA9IFhZRlhfQjsgICAgICAgICAgICAgICAgICAg IC8qIEJBQ0tVUCBmb3IgZXZlcnlib2R5IGVsc2UgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotaW50 IGZuY3NhdiA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBzYXZpbmcgJiByZXN0 b3JpbmcgdGhlIGFib3ZlICovCi1pbnQgYmdzZXQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQkFDS0dST1VORCBtb2RlIHNldCBleHBsaWNpdGx5ICovCi0KLWludCBjbWRpbnQgPSAx OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRzIGFyZSBhbGxvd2VkICovCi0j aWZkZWYgVU5JWAotaW50IHhzdXNwZW5kID0gREZTVVNQOwkJCS8qIFdoZXRoZXIgU1VTUEVORCBj b21tYW5kLCBldGMsICovCi0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogaXMgdG8gYmUgYWxsb3dlZC4gKi8KLWludCB4c3VzcGVuZCA9IDA7Ci0jZW5kaWYgLyogVU5J WCAqLwotCi0vKiBTdGF0aXN0aWNzIHZhcmlhYmxlcyAqLwotCi1DS19PRkZfVAotICAgIGZsY2ks ICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXJzIGZyb20gbGluZSwgY3VycmVudCBm aWxlICovCi0gICAgZmxjbywgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJzIHRvIGxpbmUs IGN1cnJlbnQgZmlsZSAgKi8KLSAgICB0bGNpLCAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hh cnMgZnJvbSBsaW5lIGluIHRyYW5zYWN0aW9uICovCi0gICAgdGxjbywgICAgICAgICAgICAgICAg ICAgICAgIC8qIENoYXJzIHRvIGxpbmUgaW4gdHJhbnNhY3Rpb24gKi8KLSAgICBmZmMsICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ2hhcnMgdG8vZnJvbSBjdXJyZW50IGZpbGUgKi8KLSAgICB0 ZmM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcnMgdG8vZnJvbSBmaWxlcyBpbiB0cmFu c2FjdGlvbiAqLwotCi1sb25nIGZpbGNudCwgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBv ZiBmaWxlcyBpbiB0cmFuc2FjdGlvbiAqLwotICAgIGZpbHJlaiwgICAgICAgICAgICAgICAgICAg ICAvKiBOdW1iZXIgb2YgZmlsZXMgcmVqZWN0ZWQgaW4gdHJhbnNhY3Rpb24gKi8KLSAgICBjcHMg PSAwTCwgICAgICAgICAgICAgICAgICAgLyogQ2hhcnMvc2VjIGxhc3QgdHJhbnNmZXIgKi8KLSAg ICBwZWFrY3BzID0gMEwsICAgICAgICAgICAgICAgLyogUGVhayBjaGFycy9zZWMgbGFzdCB0cmFu c2ZlciAqLwotICAgIGNjdSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGNoYXJz IHVucHJlZml4ZWQgaW4gdHJhbnNhY3Rpb24gKi8KLSAgICBjY3AsICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ29udHJvbCBjaGFycyBwcmVmaXhlZCBpbiB0cmFuc2FjdGlvbiAqLwotICAgIHJw dG47ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXBlYXRlZCBjaGFyYWN0ZXJzIGNvbXByZXNz ZWQgKi8KLQotaW50IHRzZWNzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlY29u ZHMgZm9yIHRyYW5zYWN0aW9uICovCi1pbnQgZnNlY3MgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUGVyLWZpbGUgdGltZXIgKi8KLQotI2lmZGVmIEdGVElNRVIKLUNLRkxPQVQKLSAg ZnBmc2VjcyA9IDAuMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbG9hdGluZyBwb2ludCBw ZXItZmlsZSB0aW1lciAqLwotICBmcHRzZWNzID0gMC4wOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIGFuZCBwZXItdHJhbnNhY3Rpb24gdGltZXIgKi8KLSNlbmRpZiAvKiBHRlRJTUVSICovCi0K LS8qIEZsYWdzICovCi0KLWludCBkZWJsb2cgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiBEZWJ1ZyBsb2cgaXMgb3BlbiAqLwotICAgIGRlYm9rID0gMSwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIERlYnVnIGxvZyBpcyBub3QgZGlzYWJsZWQgKi8KLSAgICBkZWJ4bGVuID0gNTQs ICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGxlbmd0aCBmb3IgZGVidWcgc3RyaW5n cyAqLwotICAgIGRlYnNlcyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9y IERFQlVHIFNFU1NJT04gKi8KLSAgICBkZWJ0aW0gPSAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBJbmNsdWRlIHRpbWVzdGFtcCBpbiBkZWJ1ZyBsb2cgKi8KLSAgICBkZWJtc2cgPSAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWJ1ZyBtZXNzYWdlcyBvbi9vZmYgKi8KLSAgICBw a3Rsb2cgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBwYWNrZXQgbG9n Z2luZyAqLwotICAgIHNlc2xvZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlc3Np b24gbG9nZ2luZyAqLwotICAgIGRpYWxvZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IERJQUwgbG9nZ2luZyAqLwotICAgIHRyYWxvZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFRyYW5zYWN0aW9uIGxvZ2dpbmcgKi8KLSAgICB0bG9nZm10ID0gMSwgICAgICAgICAgICAg ICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBsb2cgZm9ybWF0ICh2ZXJib3NlKSAqLwotICAgIHRs b2dzZXAgPSAoaW50KScsJywgICAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGxvZyBmaWVs ZCBzZXBhcmF0b3IgKi8KLSAgICBkaXNwbGEgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiBGaWxlIHRyYW5zZmVyIGRpc3BsYXkgb24vb2ZmICovCi0gICAgc3Rkb3VmID0gMCwgICAgICAg ICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3Igb3V0cHV0IHRvIHN0ZG91dCAqLwotICAgIHN0 ZGluZiA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGlucHV0IGZyb20g c3RkaW4gKi8KLSAgICB4ZmxnICAgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFn IGZvciBYIGluc3RlYWQgb2YgRiBwYWNrZXQgKi8KLSAgICBoY2ZsZyAgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBEb2luZyBIb3N0IGNvbW1hbmQgKi8KLSAgICBkZXN0ICAgPSBERVNU X0QsICAgICAgICAgICAgICAgICAgICAvKiBEZXN0aW5hdGlvbiBmb3IgcGFja2V0IGRhdGEgKi8K LSAgICB6Y2hrb2QgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB6Y2hrbygpIHNob3Vs ZCB3b3JrIGZvciBkaXJzIHRvbz8gKi8KLSAgICB6Y2hraWQgPSAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB6Y2hraSgpIHNob3VsZCB3b3JrIGZvciBkaXJzIHRvbz8gKi8KLQotLyogSWYg eW91IGNoYW5nZSB0aGlzLCBhbHNvIHNlZSBzdHJ1Y3QgcHRhYiBhYm92ZS4uLiAqLwotCi0jaWZk ZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgZmlsZSBuYW1l IGNvbnZlcnNpb24gKi8KLSAgICBmbmNudiAgPSBYWUZOX0wsICAgICAgICAgICAgICAgICAgICAv KiBEZWZhdWx0IGlzIExpdGVyYWwgaW4gT1MvMiwgKi8KLSAgICBmX3NhdmUgPSBYWUZOX0wsICAg ICAgICAgICAgICAgICAgICAvKiAoc2F2ZWQgY29weSBvZiBzYW1lKSAqLwotI2Vsc2UKLSAgICBm bmNudiAgPSBYWUZOX0MsICAgICAgICAgICAgICAgICAgICAvKiBlbHNld2hlcmUgQ29udmVydCB0 aGVtICovCi0gICAgZl9zYXZlID0gWFlGTl9DLCAgICAgICAgICAgICAgICAgICAgLyogKGRpdHRv KSAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgZm5zcGF0aCA9IFBBVEhfT0ZGLCAgICAgICAg ICAgICAgICAgLyogU2VuZCBmaWxlIHBhdGggKi8KLSAgICBmbnJwYXRoID0gUEFUSF9BVVRPLCAg ICAgICAgICAgICAgICAvKiBSZWNlaXZlIGZpbGUgcGF0aCAqLwotICAgIGZhY2twYXRoID0gMSwg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgYmFjayBwYXRoIGluIEFDSyB0byBGICovCi0g ICAgYmluYXJ5ID0gWFlGVF9CLCAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBmaWxlIHRy YW5zZmVyIG1vZGUgKi8KLSAgICBiX3NhdmUgPSBYWUZUX0IsICAgICAgICAgICAgICAgICAgICAv KiBTYXZlZCBmaWxlIG1vZGUgKi8KLSAgICBlb2ZtZXRob2QgPSAwLCAgICAgICAgICAgICAgICAg ICAgICAvKiBFT0YgZGV0ZWN0aW9uIG1ldGhvZCAobGVuZ3RoKSAqLwotCi0jaWZkZWYgT1MyCi0g ICAgY3Vyc29yX3NhdmUgPSAtMSwgICAgICAgICAgICAgICAgICAgLyogQ3Vyc29yIHN0YXRlICov Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICB4ZmVybW9kZSA9IFhNT0RFX0EsICAgICAgICAgICAg ICAgICAvKiBUcmFuc2ZlciBtb2RlLCBtYW51YWwgb3IgYXV0byAqLwotICAgIHhmaWxldHlwZSA9 IC0xLCAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIG9ubHkgdGV4dCAob3IgYmluYXJ5 KSAqLwotICAgIHJlY3Vyc2l2ZSA9IDAsICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY3Vyc2l2 ZSBkaXJlY3RvcnkgdHJhdmVyc2FsICovCi0gICAgbm9saW5rcyAgID0gMiwgICAgICAgICAgICAg ICAgICAgICAgLyogRG9uJ3QgZm9sbG93IHN5bWJvbGljIGxpbmtzICovCi0gICAgc2tpcGJ1cCAg ID0gMCwgICAgICAgICAgICAgICAgICAgICAgLyogU2tpcCBiYWNrdXAgZmlsZXMgd2hlbiBzZW5k aW5nICovCi0gICAgc2VuZG1vZGUgPSBTTV9TRU5ELCAgICAgICAgICAgICAgICAgLyogV2hpY2gg dHlwZSBvZiBTRU5EIG9wZXJhdGlvbiAqLwotICAgIHNsb3N0YXJ0ICA9IDEsICAgICAgICAgICAg ICAgICAgICAgIC8qIFNsb3cgc3RhcnQgKGdyb3cgcGFja2V0IGxlbmd0aHMpICovCi0gICAgY21h c2sgID0gMDM3NywgICAgICAgICAgICAgICAgICAgICAgLyogQ09OTkVDVCAodGVybWluYWwpIGJ5 dGUgbWFzayAqLwotICAgIGZtYXNrICA9IDAzNzcsICAgICAgICAgICAgICAgICAgICAgIC8qIEZp bGUgYnl0ZSBtYXNrICovCi0gICAgY2t3YXJuID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAg LyogRmxhZyBmb3IgZmlsZSB3YXJuaW5nICovCi0gICAgcXVpZXQgID0gMCwgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQmUgcXVpZXQgZHVyaW5nIGZpbGUgdHJhbnNmZXIgKi8KLSAgICBsb2Nh bCAgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxID0gbG9jYWwgbW9kZSwgMCA9IHJl bW90ZSBtb2RlICovCi0gICAgY3h0eXBlID0gQ1hUX1JFTU9URSwgICAgICAgICAgICAgICAgLyog Q29ubmVjdGlvbiB0eXBlICovCi0gICAgc2VydmVyID0gMCwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRmxhZyBmb3IgSSBBbSBTZXJ2ZXIgKi8KLSAgICBxdWVyeSA9IDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGbGFnIGZvciBRdWVyeSBhY3RpdmUgKi8KLSAgICBqdXN0b25lID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgc2hvdWxkIGRvIEp1c3QgT25lIGNv bW1hbmQgKi8KLSAgICB1cnNlcnZlciA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFn IGZvciBZb3UgQXJlIFNlcnZlciAqLwotICAgIGJ5ZV9hY3RpdmUgPSAwLCAgICAgICAgICAgICAg ICAgICAgIC8qIEZsYWcgZm9yIEJZRSBjb21tYW5kIGFjdGl2ZSAqLwotICAgIGRpcmFjdGl2ZSA9 IDAsICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIERJUkVDVE9SWSBjb21tYW5kIGFj dGl2ZSAqLwotICAgIGNkYWN0aXZlID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcg Zm9yIENEIGNvbW1hbmQgYWN0aXZlICovCi0gICAgY2ZsZyAgID0gMCwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ29ubmVjdCBiZWZvcmUgdHJhbnNhY3Rpb24gKi8KLSAgICBjbmZsZyAgPSAw LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0IGFmdGVyIHRyYW5zYWN0aW9uICov Ci0gICAgY3hzZWVuID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgY2Fu Y2VsbGluZyBhIGZpbGUgKi8KLSAgICBjenNlZW4gPSAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBGbGFnIGZvciBjYW5jZWxsaW5nIGZpbGUgZ3JvdXAgKi8KLSAgICBmYXRhbGlvID0gMCwg ICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBmYXRhbCBpL28gZXJyb3IgKi8KLSAg ICBkaXNjYXJkID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBmaWxlIHRv IGJlIGRpc2NhcmRlZCAqLwotICAgIGtlZXAgPSBTRVRfQVVUTywgICAgICAgICAgICAgICAgICAg IC8qIEtlZXAgaW5jb21wbGV0ZSBmaWxlcyA9IEFVVE8gKi8KLSAgICB1bmtjcyA9IDEsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBLZWVwIGZpbGUgdy91bmtub3duIGNoYXJhY3RlciBzZXQg Ki8KLSNpZmRlZiBWTVMKLSAgICBmaWxlcGVlayA9IDAsICAgICAgICAgICAgICAgICAgICAgICAv KiBJbnNwZWN0aW9uIG9mIGZpbGVzICovCi0jZWxzZQotI2lmZGVmIGRhdGdlbmVyYWwKLSAgICBm aWxlcGVlayA9IDAsCi0jZWxzZQotICAgIGZpbGVwZWVrID0gMSwKLSNlbmRpZiAvKiBkYXRhZ2Vu ZXJhbCAqLwotI2VuZGlmIC8qIFZNUyAqLwotICAgIG5ha3N0YXRlID0gMCwgICAgICAgICAgICAg ICAgICAgICAgIC8qIEluIGEgc3RhdGUgd2hlcmUgd2UgY2FuIHNlbmQgTkFLcyAqLwotICAgIGRi bGNoYXIgPSAtMSwgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciB0byBkb3VibGUg d2hlbiBzZW5kaW5nICovCi0gICAgbW92aW5nID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAg LyogTU9WRSA9IHNlbmQsIHRoZW4gZGVsZXRlICovCi0gICAgcmVsaWFibGUgPSBTRVRfQVVUTywg ICAgICAgICAgICAgICAgLyogTm9uemVybyBpZiB0cmFuc3BvcnQgaXMgcmVsaWFibGUgKi8KLSAg ICB4cmVsaWFibGUgPSAtMSwKLSAgICBzZXRyZWxpYWJsZSA9IDAsCi0gICAgdXJjbGVhciA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm9uemVybyBmb3IgY2xlYXIgY2hhbm5lbCB0byB5 b3UgKi8KLSAgICBjbGVhcnJxID0gU0VUX0FVVE8sICAgICAgICAgICAgICAgICAvKiBTRVQgQ0xF QVJDSEFORUwgdmFsdWUgKi8KLSAgICBjbGVhcmVkID0gMCwKLSAgICBzdHJlYW1pbmcgPSAwLCAg ICAgICAgICAgICAgICAgICAgICAvKiBOb256ZXJvIGlmIHN0cmVhbWluZyBpcyBhY3RpdmUgKi8K LSAgICBzdHJlYW1vayA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBOb256ZXJvIGlmIHN0 cmVhbWluZyBuZWdvdGlhdGVkICovCi0gICAgc3RyZWFtcnEgPSBTRVRfQVVUTywgICAgICAgICAg ICAgICAgLyogU0VUIFNUUkVBTUlORyB2YWx1ZSAqLwotICAgIHN0cmVhbWVkID0gLTE7ICAgICAg ICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgd2Ugc3RyZWFtZWQgbGFzdCB0aW1lICovCi0KLWNo YXIgKiBzbmRfbW92ZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBNb3ZlIGZpbGUgYWZ0ZXIg c2VuZGluZyBpdCAqLwotY2hhciAqIHNuZF9yZW5hbWUgPSBOVUxMOyAgICAgICAgICAgICAgIC8q IFJlbmFtZSBmaWxlIGFmdGVyIHNlbmRpbmcgaXQgKi8KLWNoYXIgKiByY3ZfbW92ZSA9IE5VTEw7 ICAgICAgICAgICAgICAgICAvKiBNb3ZlIGZpbGUgYWZ0ZXIgcmVjZWl2aW5nIGl0ICovCi1jaGFy ICogcmN2X3JlbmFtZSA9IE5VTEw7ICAgICAgICAgICAgICAgLyogUmVuYW1lIGZpbGUgYWZ0ZXIg cmVjZWl2aW5nIGl0ICovCi0KLWNoYXIgKiBnX3NuZF9tb3ZlID0gTlVMTDsKLWNoYXIgKiBnX3Nu ZF9yZW5hbWUgPSBOVUxMOwotY2hhciAqIGdfcmN2X21vdmUgPSBOVUxMOwotY2hhciAqIGdfcmN2 X3JlbmFtZSA9IE5VTEw7Ci0KLSNpZmRlZiBDS19UUklHR0VSCi1jaGFyICp0dF90cmlnZ2VyW1RS SUdHRVJTXSA9IHsgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMIH07Ci1D SEFSICp0dF90cm1hdGNoW1RSSUdHRVJTXSA9IHsgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMIH07Ci1jaGFyICp0cmlnZ2VydmFsID0gTlVMTDsKLSNlbmRpZiAvKiBDS19U UklHR0VSICovCi0KLWludCBja3hsb2dnaW5nID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBG bGFnIGZvciBzeXNsb2dnaW5nIGFjdGl2ZSAqLwotaW50IGlrZGJvcGVuID0gMDsgICAgICAgICAg ICAgICAgICAgICAgIC8qIEZsYWcgZm9yIElLU0QgZGF0YWJhc2UgYWN0aXZlICovCi1pbnQgZGJp bml0ZWQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgSUtTREIgcmVjb3Jk IGluaXQnZCAqLwotI2lmbmRlZiBDS1NZU0xPRwotaW50IGNreHN5c2xvZyA9IDA7ICAgICAgICAg ICAgICAgICAgICAgIC8qIExvZ2dpbmcgbGV2ZWwgMCAqLwotI2Vsc2UKLSNpZmRlZiBTWVNMT0dM RVZFTAotaW50IGNreHN5c2xvZyA9IFNZU0xPR0xFVkVMOyAgICAgICAgICAgIC8qIExvZ2dpbmcg bGV2ZWwgc3BlY2lmaWVkICovCi0jZWxzZQotaW50IGNreHN5c2xvZyA9IFNZU0xHX0RGOyAgICAg ICAgICAgICAgIC8qIERlZmF1bHQgbG9nZ2luZyBsZXZlbCAqLwotI2VuZGlmIC8qIFNZU0xPR0xF VkVMICovCi0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQotI2lmbmRlZiBOT0hFTFAKLSNpZm5kZWYg Tk9DTURMCi1fUFJPVE9UWVAoIFZPSUQgaW5pb3B0aGxwLCAodm9pZCkgKTsgICAgLyogQ29tbWFu ZC1saW5lIGhlbHAgaW5pdGlhbGl6ZXIgKi8KLSNlbmRpZiAvKiBOT0NNREwgKi8KLSNlbmRpZiAv KiBOT0hFTFAgKi8KLQotX1BST1RPVFlQKCBWT0lEIGdldGV4ZWRpciwgKHZvaWQpICk7Ci1fUFJP VE9UWVAoIGludCBwdXRub3RoaW5nLCAoY2hhcikgKTsKLQotI2lmZGVmIElLU0QKLV9QUk9UT1RZ UCggVk9JRCBkb2lrc2Rpbml0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBpa3NkaW5pdCwg KHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgZG9pa2xvZywgKHZvaWQpICk7Ci1fUFJPVE9UWVAo IGludCBkYmluaXQsICh2b2lkKSApOwotI2VuZGlmIC8qIElLU0QgKi8KLQotLyogVmFyaWFibGVz IHBhc3NlZCBmcm9tIGNvbW1hbmQgcGFyc2VyIHRvIHByb3RvY29sIG1vZHVsZSAqLwotCi0jaWZu ZGVmIE5PU1BMCi0jaWZuZGVmIE5PSUNQCi0jaWZkZWYgQ0tfQVBDCi1fUFJPVE9UWVAoIFZPSUQg YXBjb25lY3QsICh2b2lkKSApOwotI2VuZGlmIC8qIENLX0FQQyAqLwotI2lmZGVmIE9TMgotZXh0 ZXJuIGludCBpbml0dmlrOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0j ZW5kaWYgLyogTk9TUEwgKi8KLWNoYXIgKmNsY21kcyA9IE5VTEw7ICAgICAgICAgICAgICAgICAg ICAvKiBQb2ludGVyIHRvIGNvbW1hbmQtbGluZSBjb21tYW5kcyAqLwotCi0jaWZuZGVmIE5PU0VU S0VZCi1leHRlcm4gS0VZICprZXltYXA7Ci1leHRlcm4gTUFDUk8gKm1hY3JvdGFiOwotI2VuZGlm IC8qIE5PU0VUS0VZICovCi0KLSNpZm5kZWYgTk9QVVNICi1pbnQgbm9wdXNoID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogUFVTSCBlbmFibGVkICovCi0jZWxzZQotaW50IG5vcHVzaCA9 IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBVU0ggZGlzYWJsZWQgKi8KLSNlbmRpZiAv KiBOT1BVU0ggKi8KLQotQ0hBUiBzc3RhdGUgID0gKENIQVIpIDA7ICAgICAgICAgICAgICAgIC8q IFN0YXJ0aW5nIHN0YXRlIGZvciBhdXRvbWF0b24gKi8KLUNIQVIgenN0YXRlICA9IChDSEFSKSAw OyAgICAgICAgICAgICAgICAvKiBGb3IgcmVtZW1iZXJpbmcgc3N0YXRlICovCi1jaGFyICogcHJp bnRlcm5hbWUgPSBOVUxMOyAgICAgICAgICAgICAgLyogTlVMTCBpZiBwcmludGVyIG5vdCByZWRp cmVjdGVkICovCi1pbnQgcHJpbnRwaXBlID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogRm9y IFNFVCBQUklOVEVSICovCi1pbnQgbm9wcmludGVyID0gMDsKLQotI2lmbmRlZiBOT1hGRVIKLWNo YXIgKmNtYXJnICA9ICIiOyAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGNvbW1h bmQgZGF0YSAqLwotY2hhciAqY21hcmcyID0gIiI7ICAgICAgICAgICAgICAgICAgICAgIC8qIFBv aW50ZXIgdG8gMm5kIGNvbW1hbmQgZGF0YSAqLwotY2hhciAqKmNtbGlzdDsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gZmlsZSBsaXN0IGluIGFyZ3YgKi8KLQotI2lmZGVm IENLX0FVVE9ETCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG9kb3dubG9hZCAqLwotaW50 IGF1dG9kbCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZWQgYnkgZGVmYXVs dCAqLwotI2Vsc2UKLWludCBhdXRvZGwgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAo b3IgaWYgbm90IGltcGxlbWVudGVkKS4gKi8KLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLWludCBh ZGxfZXJyID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiAxID0gc3RvcCBvbiBlcnJvciAq LwotI2lmZGVmIEtVSQotaW50IGFkbF9hc2sgPSAxOwkJCS8qIDEgPSBmaWxlIGRpYWxvZyBvbiBh dXRvZG93bmxvYWQgKi8KLSNlbHNlCi1pbnQgYWRsX2FzayA9IDA7CQkJLyogMCA9IG5vIGZpbGUg ZGlhbG9nICovCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgT1MyICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQVVUT0RPV05MT0FEIHBhcmFtZXRlcnMgKi8KLWludCBhZGxfa21vZGUg PSBBRExfUEFDSywgICAgICAgICAgICAgICAvKiBNYXRjaCBQYWNrZXQgdG8gc2lnbmFsIGRvd25s b2FkICovCi0gICAgYWRsX3ptb2RlID0gQURMX1BBQ0s7Ci1jaGFyICogYWRsX2tzdHIgPSBOVUxM OyAgICAgICAgICAgICAgICAgLyogS0VSTUlUIERvd25sb2FkIFN0cmluZyAqLwotY2hhciAqIGFk bF96c3RyID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIFpNT0RFTSBEb3dubG9hZCBTdHJpbmcg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLQotaW50IHJlbWZpbGUgPSAwLCByZW1waXBlID0gMCwgcmVt YXBwZCA9IDA7IC8qIFJFTU9URSBvdXRwdXQgcmVkaXJlY3Rpb24gKi8KLWNoYXIgKiByZW1kZXN0 ID0gTlVMTDsKLQotI2lmbmRlZiBOT1NFUlZFUgotLyoKLSAgU2VydmVyIHNlcnZpY2VzOgotICAg MCA9IGRpc2FibGVkCi0gICAxID0gZW5hYmxlZCBpbiBsb2NhbCBtb2RlCi0gICAyID0gZW5hYmxl ZCBpbiByZW1vdGUgbW9kZQotICAgMyA9IGVuYWJsZWQgaW4gYm90aCBsb2NhbCBhbmQgcmVtb3Rl IG1vZGVzCi0gIG9ubHkgYXMgaW5pdGlhbCAoZGVmYXVsdCkgdmFsdWVzLgotKi8KLWludCBlbl94 aXQgPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFWElUICovCi1pbnQgZW5fY3dkID0g MzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ0QvQ1dEICovCi1pbnQgZW5fY3B5ID0gMzsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09QWSAgICovCi1pbnQgZW5fZGVsID0gMjsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogREVMRVRFICovCi1pbnQgZW5fbWtkID0gMzsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTUtESVIgKi8KLWludCBlbl9ybWQgPSAyOyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSTURJUiAqLwotaW50IGVuX2RpciA9IDM7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERJUkVDVE9SWSAqLwotaW50IGVuX2ZpbiA9IDM7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEZJTklTSCAqLwotaW50IGVuX2dldCA9IDM7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEdFVCAqLwotI2lmbmRlZiBOT1BVU0gKLWludCBlbl9ob3MgPSAyOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBIT1NUIGVuYWJsZWQgKi8KLSNlbHNlCi1pbnQgZW5faG9zID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSE9TVCBkaXNhYmxlZCAqLwotI2VuZGlmIC8q IE5PUFVTSCAqLwotaW50IGVuX3JlbiA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJF TkFNRSAqLwotaW50IGVuX3NlbiA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFTkQg Ki8KLWludCBlbl9zZXQgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgKi8KLWlu dCBlbl9zcGEgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTUEFDRSAqLwotaW50IGVu X3R5cCA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRZUEUgKi8KLWludCBlbl93aG8g PSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXSE8gKi8KLSNpZmRlZiBkYXRhZ2VuZXJh bAotLyogRGF0YSBHZW5lcmFsIEFPUy9WUyBjYW4ndCBkbyB0aGlzICovCi1pbnQgZW5fYnllID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQllFICovCi0jZWxzZQotaW50IGVuX2J5ZSA9 IDI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBDcyBpbiBsb2NhbCBtb2RlLi4uICovCi0j ZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLWludCBlbl9hc2cgPSAzOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBBU1NJR04gKi8KLWludCBlbl9xdWUgPSAzOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBRVUVSWSAqLwotaW50IGVuX3JldCA9IDI7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFJFVFJJRVZFICovCi1pbnQgZW5fbWFpID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAg LyogTUFJTCAqLwotaW50IGVuX3ByaSA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBS SU5UICovCi1pbnQgZW5fZW5hID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRU5BQkxF ICovCi0jZWxzZQotaW50IGVuX3hpdCA9IDAsIGVuX2N3ZCA9IDAsIGVuX2NweSA9IDAsIGVuX2Rl bCA9IDAsIGVuX21rZCA9IDAsIGVuX3JtZCA9IDAsCi0gICAgZW5fZGlyID0gMCwgZW5fZmluID0g MCwgZW5fZ2V0ID0gMCwgZW5faG9zID0gMCwgZW5fcmVuID0gMCwgZW5fc2VuID0gMCwKLSAgICBl bl9zZXQgPSAwLCBlbl9zcGEgPSAwLCBlbl90eXAgPSAwLCBlbl93aG8gPSAwLCBlbl9ieWUgPSAw LCBlbl9hc2cgPSAwLAotICAgIGVuX3F1ZSA9IDAsIGVuX3JldCA9IDAsIGVuX21haSA9IDAsIGVu X3ByaSA9IDAsIGVuX2VuYSA9IDA7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSNlbmRpZiAvKiBO T1hGRVIgKi8KLQotLyogTWlzY2VsbGFuZW91cyAqLwotCi1jaGFyICoqeGFyZ3Y7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogR2xvYmFsIGNvcGllcyBvZiBhcmd2ICovCi1pbnQgeGFyZ2M7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGFyZ2MgICovCi1pbnQgeGFyZ3M7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW4gaW1tdXRhYmxlIGNvcHkgb2YgYXJn YyAqLwotY2hhciAqeGFyZzA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBvZiBh cmd2WzBdICovCi1jaGFyICpwaXBlZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9p bnRlciB0byAtUCAocGlwZSkgZGF0YSAqLwotCi1leHRlcm4gY2hhciAqZGZ0dHk7ICAgICAgICAg ICAgICAgICAgICAgLyogRGVmYXVsdCB0dHkgbmFtZSBmcm9tIGNrP3Rpby5jICovCi1leHRlcm4g aW50IGRmbG9jOyAgICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBsb2NhdGlvbjogcmVt b3RlL2xvY2FsICovCi1leHRlcm4gaW50IGRmcHJ0eTsgICAgICAgICAgICAgICAgICAgICAgLyog RGVmYXVsdCBwYXJpdHkgKi8KLWV4dGVybiBpbnQgZGZmbG93OyAgICAgICAgICAgICAgICAgICAg ICAvKiBEZWZhdWx0IGZsb3cgY29udHJvbCAqLwotCi0jaWZkZWYgVE5DT0RFCi1leHRlcm4gaW50 IHRuX2RlYjsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLS8qCi0gIEJ1ZmZlcmVkIGZpbGUgaW5wdXQg YW5kIG91dHB1dCBidWZmZXJzLiAgU2VlIGdldHBrdCgpIGluIGNrY2Zucy5jCi0gIGFuZCB6b3V0 ZHVtcCgpIGluIHRoZSBzeXN0ZW0tZGVwZW5kZW50IGZpbGUgaS9vIG1vZHVsZSAodXN1YWxseSBj az9maW8uYykuCi0qLwotI2lmbmRlZiBEWU5BTUlDCi0vKiBOb3cgd2UgYWxsb2NhdGUgdGhlbSBk eW5hbWljYWxseSwgc2VlIGdldGlvYnMoKSBiZWxvdy4gKi8KLWNoYXIgemluYnVmZmVyW0lOQlVG U0laRV0sIHpvdXRidWZmZXJbT0JVRlNJWkVdOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLWNoYXIg KnppbnB0ciwgKnpvdXRwdHI7Ci1pbnQgemluY250LCB6b3V0Y250OwotaW50IHpvYnVmc2l6ZSA9 IE9CVUZTSVpFOwotaW50IHpvZmJ1ZmZlciA9IDE7Ci1pbnQgem9mYmxvY2sgID0gMTsKLQotI2lm ZGVmIFNFU0xJTUlUCi1pbnQgc2VzbGltaXQgPSAwOwotI2VuZGlmIC8qIFNFU0xJTUlUICovCi0K LSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotI2luY2x1ZGUgImNrdWF0aC5oIgotI2VuZGlmIC8q IENLX0FVVEhFTlRJQ0FUSU9OICovCi0KLV9QUk9UT1RZUCggaW50IGdldGlvYnMsIChWT0lEKSAp OwotCi0vKiAgTSBBIEkgTiAgLS0gIEMtS2VybWl0IG1haW4gcHJvZ3JhbSAgKi8KLQotI2luY2x1 ZGUgPHNpZ25hbC5oPgotCi0jaWZuZGVmIFZNUwotI2luY2x1ZGUgPHRpbWUuaD4KLSNlbmRpZgot Ci0jaWZuZGVmIE5PQ0NUUkFQCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0jaW5jbHVkZSAiY2tjc2ln LmgiCi1ja2ptcGJ1ZiBjbWpidWY7Ci0jaWZkZWYgR0VNRE9TICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU3BlY2lhbCBmb3IgQXRhcmkgU1QgKi8KLWNjX2NsZWFuKCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBUaGlzIGNhbid0IGJlIHJpZ2h0PyAqLwotI2VuZGlmIC8qIEdF TURPUyAqLwotI2VuZGlmIC8qIE5PQ0NUUkFQICovCi0KLSNpZm5kZWYgTk9YRkVSCi0vKiBJbmZv IGFzc29jaWF0ZWQgd2l0aCBhIHN5c3RlbSBJRCAqLwotCi1zdHJ1Y3Qgc3lzZGF0YSBzeXNpZGxp c3RbXSA9IHsgICAgICAgICAgLyogQWRkIG90aGVycyBhcyBuZWVkZWQuLi4gKi8KLSAgeyAiMCIs ICAiYW5vbnltb3VzIiwgICAgMCwgTlVMLCAgMCwgMCwgMCB9LAotICB7ICJBMSIsICJBcHBsZSBJ SSIsICAgICAwLCBOVUwsICAwLCAwLCAzIH0sIC8qIGZpeCB0aGlzICovCi0gIHsgIkEzIiwgIk1h Y2ludG9zaCIsICAgIDEsICc6JywgIDAsIDIsIDEgfSwKLSAgeyAiRDciLCAiVk1TIiwgICAgICAg ICAgMCwgJ10nLCAgMSwgMCwgMCB9LAotICB7ICJEQSIsICJSU1RTL0UiLCAgICAgICAwLCAnXScs ICAxLCAwLCAzIH0sIC8qIChpIHRoaW5rLi4uKSAqLwotICB7ICJEQiIsICJSVDExIiwgICAgICAg ICAwLCBOVUwsICAxLCAwLCAzIH0sIC8qIChtYXliZS4uLikgKi8KLSAgeyAiRjMiLCAiQU9TL1ZT IiwgICAgICAgMSwgJzonLCAgMCwgMCwgMiB9LAotICB7ICJJMSIsICJWTS9DTVMiLCAgICAgICAw LCBOVUwsICAwLCAwLCAwIH0sCi0gIHsgIkkyIiwgIk1WUy9UU08iLCAgICAgIDAsIE5VTCwgIDAs IDAsIDAgfSwKLSAgeyAiSTQiLCAiTVVTSUMiLCAgICAgICAgMCwgTlVMLCAgMCwgMCwgMCB9LAot ICB7ICJJNyIsICJDSUNTIiwgICAgICAgICAwLCBOVUwsICAwLCAwLCAwIH0sCi0gIHsgIkk5Iiwg Ik1WUy9ST1NDT0UiLCAgIDAsIE5VTCwgIDAsIDAsIDAgfSwKLSAgeyAiSzIiLCAiQXRhcmkgU1Qi LCAgICAgMSwgJ1xcJywgMSwgMCwgMyB9LAotICB7ICJMMyIsICJBbWlnYSIsICAgICAgICAxLCAn LycsICAxLCAwLCAyIH0sCi0gIHsgIk1WIiwgIlN0cmF0dXMgVk9TIiwgIDEsICc+JywgIDAsIDEs IDAgfSwKLSAgeyAiTjMiLCAiQXBvbGxvIEFlZ2lzIiwgMSwgJy8nLCAgMCwgMywgMiB9LAotICB7 ICJVMSIsICJVTklYIiwgICAgICAgICAxLCAnLycsICAwLCAzLCAyIH0sCi0gIHsgIlU4IiwgIk1T LURPUyIsICAgICAgIDEsICdcXCcsIDEsIDAsIDMgfSwKLSAgeyAiVUQiLCAiT1MtOSIsICAgICAg ICAgMSwgJy8nLCAgMCwgMywgMiB9LAotICB7ICJVTiIsICJXaW5kb3dzLTMyIiwgICAxLCAnXFwn LCAxLCAyLCAzIH0sCi0gIHsgIlVPIiwgIk9TLzIiLCAgICAgICAgIDEsICdcXCcsIDEsIDIsIDMg fQotfTsKLXN0YXRpYyBpbnQgbnh4c3lzaWRzID0gKHNpemVvZihzeXNpZGxpc3QpIC8gc2l6ZW9m KHN0cnVjdCBzeXNkYXRhKSk7Ci0KLS8qIEdpdmVuIGEgS2VybWl0IHN5c3RlbSBJRCBjb2RlLCBy ZXR1cm4gdGhlIGFzc29jaWF0ZWQgbmFtZSBzdHJpbmcgKi8KLS8qIGFuZCBzb21lIHByb3BlcnRp ZXMgb2YgdGhlIGZpbGVuYW1lcy4uLiAqLwotCi1jaGFyICoKLWdldHN5c2lkKHMpIGNoYXIgKiBz OyB7ICAgICAgICAgICAgICAgICAvKiBHZXQgc3lzdGVtLXR5cGUgbmFtZSAqLwotICAgIGludCBp OwotICAgIGlmICghcykgcmV0dXJuKCIiKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnh4c3lzaWRz OyBpKyspCi0gICAgICBpZiAoIXN0cmNtcChzeXNpZGxpc3RbaV0uc2lkX2NvZGUscykpCi0gICAg ICAgIHJldHVybihzeXNpZGxpc3RbaV0uc2lkX25hbWUpOwotICAgIHJldHVybihzKTsKLX0KLQot aW50Ci1nZXRzeXNpeChzKSBjaGFyICpzOyB7ICAgICAgICAgICAgICAgICAgLyogR2V0IHN5c3Rl bS10eXBlIGluZGV4ICovCi0gICAgaW50IGk7Ci0gICAgaWYgKCFzKSByZXR1cm4oLTEpOwotICAg IGZvciAoaSA9IDA7IGkgPCBueHhzeXNpZHM7IGkrKykKLSAgICAgIGlmICghc3RyY21wKHN5c2lk bGlzdFtpXS5zaWRfY29kZSxzKSkKLSAgICAgICAgcmV0dXJuKGkpOwotICAgIHJldHVybigtMSk7 Ci19Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLS8qIFRlbGwgaWYgYSBwYXRobmFtZSBpcyBhYnNv bHV0ZSAodmVyc3VzIHJlbGF0aXZlKSAqLwotLyogVGhpcyBzaG91bGQgYmUgcGFyY2VsZWQgb3V0 IHRvIGVhY2ggb2YgdGhlIGNrKmZpby5jIG1vZHVsZXMuLi4gKi8KLS8qIFZNUyBpc2Fic29sdXRl KCkgaXMgbm93IGluIGNrdmZpby5jLiAqLwotI2lmbmRlZiBWTVMKLWludAotaXNhYnNvbHV0ZShw YXRoKSBjaGFyICogcGF0aDsgewotICAgIGludCByYyA9IDA7Ci0gICAgaW50IHg7Ci0gICAgaWYg KCFwYXRoKQotICAgICAgcmV0dXJuKDApOwotICAgIGlmICghKnBhdGgpCi0gICAgICByZXR1cm4o MCk7Ci0gICAgeCA9IChpbnQpIHN0cmxlbihwYXRoKTsKLSAgICBkZWJ1ZyhGMTExLCJpc2Fic29s dXRlIixwYXRoLHgpOwotI2lmZGVmIFVOSVgKLSAgICBpZiAoKnBhdGggPT0gJy8nCi0jaWZkZWYg RFRJTERFCi0gICAgICAgIHx8ICpwYXRoID09ICd+JwotI2VuZGlmIC8qIERUSUxERSAqLwotICAg ICAgICApCi0gICAgICByYyA9IDE7Ci0jZWxzZSAvKiBkZWYgVU5JWCAqLwotI2lmZGVmIE9TMgot ICAgIGlmICgqcGF0aCA9PSAnLycgfHwgKnBhdGggPT0gJ1xcJykKLSAgICAgIHJjID0gMTsKLSAg ICBlbHNlIGlmIChpc2FscGhhKCpwYXRoKSAmJiB4ID4gMikKLSAgICAgIGlmICgqKHBhdGgrMSkg PT0gJzonICYmICgqKHBhdGggKzIpID09ICcvJyB8fCAqKHBhdGgrMikgPT0gJ1xcJykpCi0gICAg ICAgIHJjID0gMTsKLSNlbHNlIC8qIGRlZiBPUzIgKi8KLSNpZmRlZiBBTUlHQQotICAgIGlmICgq cGF0aCA9PSAnLycKLSNpZmRlZiBEVElMREUKLSAgICAgICAgfHwgKnBhdGggPT0gJ34nCi0jZW5k aWYgLyogRFRJTERFICovCi0gICAgICAgICkKLSAgICAgIHJjID0gMTsKLSNlbHNlIC8qIGRlZiBB TUlHQSAqLwotI2lmZGVmIE9TSwotICAgIGlmICgqcGF0aCA9PSAnLycKLSNpZmRlZiBEVElMREUK LSAgICAgICAgfHwgKnBhdGggPT0gJ34nCi0jZW5kaWYgLyogRFRJTERFICovCi0gICAgICAgICkK LSAgICAgIHJjID0gMTsKLSNlbHNlIC8qIGRlZiBPU0sgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAot ICAgIGlmICgqcGF0aCA9PSAnOicpCi0gICAgICByYyA9IDE7Ci0jZWxzZSAvKiBkZWYgZGF0YWdl bmVyYWwgKi8KLSNpZmRlZiBNQUMKLSAgICByYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBGaWxsIGluIGxhdGVyLi4uICovCi0jZWxzZSAvKiBkZWYgTUFDICovCi0jaWZkZWYg U1RSQVRVUwotICAgIHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGwg aW4gbGF0ZXIuLi4gKi8KLSNlbHNlIC8qIGRlZiBTVFJBVFVTICovCi0jaWZkZWYgR0VNRE9TCi0g ICAgaWYgKCpwYXRoID09ICcvJyB8fCAqcGF0aCA9PSAnXFwnKQotICAgICAgcmMgPSAxOwotICAg IGVsc2UgaWYgKGlzYWxwaGEoKnBhdGgpICYmIHggPiAxKQotICAgICAgaWYgKCoocGF0aCsxKSA9 PSAnOicpCi0gICAgICAgIHJjID0gMTsKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSNlbmRpZiAvKiBT VFJBVFVTICovCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNl bmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBBTUlHQSAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2Vu ZGlmIC8qIFVOSVggKi8KLSAgICBkZWJ1ZyhGMTAxLCJpc2Fic29sdXRlIHJjIiwiIixyYyk7Ci0g ICAgcmV0dXJuKHJjKTsKLX0KLSNlbmRpZiAvKiBuZGVmIFZNUyAqLwotCi0vKiAgU2VlIGlmIEkg aGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBrZXlib2FyZCAgKi8KLQotaW50Ci1pc19hX3R0eShu KSBpbnQgbjsgewotI2lmZGVmIFVOSVgKLSAgICBleHRlcm4gaW50IHR0ZmRmbGc7Ci0gICAgaWYg KHR0ZmRmbGcgPiAwKQotICAgICAgcmV0dXJuKDEpOwotI2VuZGlmIC8qIFVOSVggKi8KLSNpZmRl ZiBLVUkKLSAgICByZXR1cm4gMTsKLSNlbHNlIC8qIEtVSSAqLwotI2lmZGVmIE5UCi0gICAgaWYg KGlzV2luOTUoKSkKLSAgICAgIHJldHVybigxKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oX2lz YXR0eShuKSk7Ci0jZWxzZQotI2lmZGVmIElLU0QKLSAgIGlmIChpbnNlcnZlcikKLSAgICAgcmV0 dXJuKDEpOwotICAgZWxzZQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgcmV0dXJuKGlzYXR0eShu KSk7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLX0KLQotI2lmbmRlZiBOT1hG RVIKLVZPSUQKLWluaXR4bGlzdCgpIHsKLSAgICBleHRlcm4gY2hhciAqIHNuZGV4Y2VwdFtdLCAq IHJjdmV4Y2VwdFtdOwotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBOU05ERVhDRVBU OyBpKyspIHsKLQlzbmRleGNlcHRbaV0gPSBOVUxMOwotCXJjdmV4Y2VwdFtpXSA9IE5VTEw7Ci0g ICAgfQotfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0vKiBJbml0aWFsaXplIGZsb3cgY29udHJv bCB0YWJsZSAqLwotCi1WT0lECi1pbml0ZmxvdygpIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRGVmYXVsdCB2YWx1ZXMgZm9yIGZsb3cgY29udHJvbCAqLwotI2lmZGVmIFZNUyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBlYWNoIGtpbmQgb2YgY29ubmVjdGlvbi4g Ki8KLSAgICAvKiBUaGUgVk1TIHRlbG5ldCB0ZXJtaW5hbCBkcml2ZXIgdHJlYXRzICJub25lIiBh cyByZXF1ZXN0IHRvIGxvc2UgY2hhcnMgKi8KLSAgICBjeGZsb3dbQ1hUX1JFTU9URV0gID0gRkxP X1hPTlg7ICAgICAvKiBSZW1vdGUgbW9kZS4uLiAqLwotI2Vsc2UKLSNpZmRlZiBIUFVYCi0gICAg LyogRGl0dG8gZm9yIEhQLVVYICovCi0gICAgY3hmbG93W0NYVF9SRU1PVEVdICA9IEZMT19YT05Y OyAgICAgLyogUmVtb3RlIG1vZGUuLi4gKi8KLSNlbHNlCi0gICAgLyogVGhlIHRlbXB0YXRpb24g aXMgdG8gbWFrZSB0aGlzIG9uZSBGTE9fS0VFUCBidXQgZG9uJ3QhISEgKi8KLSAgICAvKiBJdCB0 b3RhbGx5IHdyZWNrcyBiaW5hcnktZmlsZSB0cmFuc2ZlciB3aGVuIGNvbWluZyBpbiB2aWEgVGVs bmV0LiAqLwotICAgIC8qIEluIFVOSVggYXQgbGVhc3QuLi4gKi8KLSAgICBjeGZsb3dbQ1hUX1JF TU9URV0gID0gRkxPX05PTkU7Ci0jZW5kaWYgLyogSFBVWCAqLwotI2VuZGlmIC8qIFZNUyAqLwot Ci0jaWZkZWYgVk1TCi0gICAgY3hmbG93W0NYVF9ESVJFQ1RdICA9IEZMT19YT05YOyAgICAgLyog RGlyZWN0IHNlcmlhbCBjb25uZWN0aW9ucy4uLiAqLwotI2Vsc2UKLSAgICBjeGZsb3dbQ1hUX0RJ UkVDVF0gID0gRkxPX05PTkU7Ci0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBDS19SVFNDVFMK LSAgICBjeGZsb3dbQ1hUX01PREVNXSAgID0gRkxPX1JUU0M7ICAgICAvKiBNb2RlbSBjb25uZWN0 aW9ucy4uLiAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICBjeGZsb3dbQ1hUX01PREVNXSAgID0g RkxPX1hPTlg7Ci0jZWxzZQotICAgIGN4Zmxvd1tDWFRfTU9ERU1dICAgPSBGTE9fTk9ORTsKLSNl bmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBDS19SVFNDVFMgKi8KLQotI2lmZGVmIFZNUwotICAg IGN4Zmxvd1tDWFRfVENQSVBdICAgPSBGTE9fWE9OWDsgICAgIC8qIFRDUC9JUCBjb25uZWN0aW9u cy4uLiAqLwotI2Vsc2UKLSAgICBjeGZsb3dbQ1hUX1RDUElQXSAgID0gRkxPX05PTkU7Ci0jZW5k aWYgLyogVk1TICovCi0KLSAgICBjeGZsb3dbQ1hUX1NTSF0gICAgID0gRkxPX05PTkU7Ci0gICAg Y3hmbG93W0NYVF9YMjVdICAgICA9IEZMT19OT05FOyAgICAgLyogT3RoZXIga2luZHMgb2YgbmV0 d29ya3MuLi4gKi8KLSAgICBjeGZsb3dbQ1hUX0RFQ05FVF0gID0gRkxPX1hPTlg7Ci0gICAgY3hm bG93W0NYVF9MQVRdICAgICA9IEZMT19YT05YOwotICAgIGN4Zmxvd1tDWFRfTkVUQklPU10gPSBG TE9fTk9ORTsKLSAgICBjeGZsb3dbQ1hUX05QSVBFXSAgID0gRkxPX05PTkU7Ci0gICAgY3hmbG93 W0NYVF9QSVBFXSAgICA9IEZMT19OT05FOwotICAgIGZsb3cgPSBjeGZsb3dbY3h0eXBlXTsgICAg ICAgICAgICAgIC8qIEluaXRpYWwgZmxvdyBzZXR0aW5nLiAqLwotICAgIGRlYnVnKEYxMDEsImlu aXRmbG93IiwiIixmbG93KTsKLX0KLQotI2lmbmRlZiBOT1hGRVIKLS8qIEluaXRpYWxpemUgZmls ZSB0cmFuc2ZlciBwcm90b2NvbHMgKi8KLQotVk9JRAotaW5pdHByb3RvKHksIHVwYnN0ciwgdXB0 c3RyLCBzcnZzdHIsIHNuZGJzdHIsIHNuZHRzdHIsIHJjdmJzdHIsIHJjdnRzdHIpCi0gICAgaW50 IHk7Ci0gICAgY2hhciAqIHVwYnN0ciwgKiB1cHRzdHIsICogc3J2c3RyLCAqIHNuZGJzdHIsICog c25kdHN0ciwgKiByY3Zic3RyLAotICAgICogcmN2dHN0cjsKLS8qIGluaXRwcm90byAqLyB7Ci0K LSAgICBpZiAodXBic3RyKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IG51bGwg c3RyaW5ncyAqLwotICAgICAgaWYgKCEqdXBic3RyKSAgICAgICAgICAgICAgICAgICAgIC8qIHRv IG51bGwgcG9pbnRlcnMgKi8KLSAgICAgICAgdXBic3RyID0gTlVMTDsKLQotICAgIGlmICh1cHRz dHIpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgbnVsbCBzdHJpbmdzICovCi0g ICAgICBpZiAoISp1cHRzdHIpICAgICAgICAgICAgICAgICAgICAgLyogdG8gbnVsbCBwb2ludGVy cyAqLwotICAgICAgICB1cHRzdHIgPSBOVUxMOwotCi0gICAgaWYgKHNuZGJzdHIpCi0gICAgICBp ZiAoISpzbmRic3RyKQotICAgICAgICBzbmRic3RyID0gTlVMTDsKLQotICAgIGlmIChzbmR0c3Ry KQotICAgICAgaWYgKCEqc25kdHN0cikKLSAgICAgICAgc25kdHN0ciA9IE5VTEw7Ci0KLSAgICBp ZiAocmN2YnN0cikKLSAgICAgIGlmICghKnJjdmJzdHIpCi0gICAgICAgIHJjdmJzdHIgPSBOVUxM OwotCi0gICAgaWYgKHJjdnRzdHIpCi0gICAgICBpZiAoISpyY3Z0c3RyKQotICAgICAgICByY3Z0 c3RyID0gTlVMTDsKLQotICAgIGlmIChzcnZzdHIpCi0gICAgICBpZiAoISpzcnZzdHIpCi0gICAg ICAgIHNydnN0ciA9IE5VTEw7Ci0KLSAgICBwcm90b2NvbCA9IHk7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBTZXQgcHJvdG9jb2wgKi8KLQotICAgIGlmIChwdGFiW3Byb3RvY29sXS5ycGt0bGVu ID4gLTEpCi0gICAgICB1cnBzaXogPSBwdGFiW3Byb3RvY29sXS5ycGt0bGVuOwotICAgIGlmIChw dGFiW3Byb3RvY29sXS5zcGt0ZmxnID4gLTEpCi0gICAgICBzcHNpemYgPSBwdGFiW3Byb3RvY29s XS5zcGt0ZmxnOwotICAgIGlmIChwdGFiW3Byb3RvY29sXS5zcGt0bGVuID4gLTEpIHsKLSAgICAg ICAgc3BzaXogPSBwdGFiW3Byb3RvY29sXS5zcGt0bGVuOwotICAgICAgICBkZWJ1ZyhGMTAxLCJp bml0cHJvdG8gc3BzaXoiLCIiLHNwc2l6KTsKLSAgICAgICAgaWYgKHNwc2l6ZikgewotICAgICAg ICAgICAgc3BzaXpyID0gc3BtYXggPSBzcHNpejsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImlu aXRwcm90byBzcHNpenIiLCIiLHNwc2l6cik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHB0 YWJbcHJvdG9jb2xdLndpbnNpemUgPiAtMSkKLSAgICAgIHdzbG90ciA9IHB0YWJbcHJvdG9jb2xd LndpbnNpemU7Ci0gICAgaWYgKHB0YWJbcHJvdG9jb2xdLnByZWZpeCA+IC0xKQotICAgICAgcHJl Zml4aW5nID0gcHRhYltwcm90b2NvbF0ucHJlZml4OwotICAgIGlmIChwdGFiW3Byb3RvY29sXS5m bmNhID4gLTEpCi0gICAgICBmbmNhY3QgID0gcHRhYltwcm90b2NvbF0uZm5jYTsKLSAgICBpZiAo cHRhYltwcm90b2NvbF0uZm5jbiA+IC0xKQotICAgICAgZm5jbnYgICA9IHB0YWJbcHJvdG9jb2xd LmZuY247Ci0gICAgaWYgKHB0YWJbcHJvdG9jb2xdLmZuc3AgPiAtMSkKLSAgICAgIGZuc3BhdGgg PSBwdGFiW3Byb3RvY29sXS5mbnNwOwotICAgIGlmIChwdGFiW3Byb3RvY29sXS5mbnJwID4gLTEp Ci0gICAgICBmbnJwYXRoID0gcHRhYltwcm90b2NvbF0uZm5ycDsKLQotICAgIG1ha2VzdHIoJihw dGFiW3Byb3RvY29sXS5oX2JfaW5pdCksdXBic3RyKTsKLSAgICBtYWtlc3RyKCYocHRhYltwcm90 b2NvbF0uaF90X2luaXQpLHVwdHN0cik7Ci0gICAgbWFrZXN0cigmKHB0YWJbcHJvdG9jb2xdLmhf eF9pbml0KSxzcnZzdHIpOwotICAgIG1ha2VzdHIoJihwdGFiW3Byb3RvY29sXS5wX2Jfc2NtZCks c25kYnN0cik7Ci0gICAgbWFrZXN0cigmKHB0YWJbcHJvdG9jb2xdLnBfdF9zY21kKSxzbmR0c3Ry KTsKLSAgICBtYWtlc3RyKCYocHRhYltwcm90b2NvbF0ucF9iX3JjbWQpLHJjdmJzdHIpOwotICAg IG1ha2VzdHIoJihwdGFiW3Byb3RvY29sXS5wX3RfcmNtZCkscmN2dHN0cik7Ci19Ci0jZW5kaWYg LyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9DTURMCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWRv Y21kbGluZSh2b2lkICogdGhyZWFkaW5mbykKLSNlbHNlIC8qIENLX0FOU0lDICovCi1kb2NtZGxp bmUodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsKLSNpZmRlZiBOVFNJRwotICAgIHNldGludCgpOwotICAgIGlmICh0aHJlYWRpbmZvKSB7ICAg ICAgICAgICAgICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0gICAgICAgVGxz U2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbyk7Ci0gICAgICAgZGVidWcoIEYxMDAsICJkb2Nt ZGxpbmUgY2FsbGVkIHdpdGggdGhyZWFkaW5mbyBibG9jayIsICIiLCAwICk7Ci0gICAgfSBlbHNl Ci0gICAgICBkZWJ1ZyggRjEwMCwgImRvY21kbGluZSB0aHJlYWRpbmZvIGlzIE5VTEwiLCIiLDAp OwotI2VuZGlmIC8qIE5UU0lHICovCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBOVAotI2lmZGVm IElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyog SUtTRCAqLwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICBwcm90 bygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUYWtlIGFueSByZXF1ZXN0ZWQgYWN0 aW9uLCB0aGVuICovCi0gICAgaWYgKCFxdWlldCkgICAgICAgICAgICAgICAgICAgICAgICAgLyog cHV0IGN1cnNvciBiYWNrIGF0IGxlZnQgbWFyZ2luLCAqLwotICAgICAgY29ub2xsKCIiKTsKLSNp Zm5kZWYgTk9MT0NBTAotICAgIGlmIChjbmZsZykgeyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlLWNvbm5lY3QgaWYgcmVxdWVzdGVkICovCi0gICAgICAgIGNuZmxnID0gMDsKLSAgICAgICAg ZG9jb25lY3QoMCwwKTsKLSAgICAgICAgaWYgKHR0Y2hrKCkgPCAwKQotICAgICAgICAgIGRvbG9n ZW5kKCk7Ci0gICAgfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIE5UU0lHCi0gICAg IGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICByZXR1cm47 Ci19Ci0KLXZvaWQKLWlrc2xvZ2luKCkgewotICAgIGlmIChzc3RlbG5ldAotI2lmZGVmIElLU0QK LSAgICAgICAgfHwgaW5zZXJ2ZXIgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5ldCBzZXJ2 ZXIgKi8KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICkgewotICAgICAgICBjaGFyICpzOwot ICAgICAgICBleHRlcm4gaW50IGZkaXNwbGE7ICAgICAgICAgICAgIC8qIEZpbGUtdHJhbnNmZXIg ZGlzcGxheSBmb3JtYXQgKi8KLSAgICAgICAgZXh0ZXJuIGNoYXIgKiBpa3Byb21wdDsgICAgICAg ICAvKiBJS1NEIHByb21wdCAqLwotCi0jaWZkZWYgSUtTRAotI2lmZGVmIENLX0xPR0lOCi0gICAg ICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgeF9sb2dpbiA9IDE7ICAgICAgICAgICAg ICAgIC8qIExvZ2luIHJlcXVpcmVkICovCi0gICAgICAgICAgICB4X2xvZ2dlZCA9IDA7ICAgICAg ICAgICAgICAgLyogTm90IGxvZ2dlZCBpbiB5ZXQgKi8KLSAgICAgICAgICAgIGNtc2V0cChpa3By b21wdCk7ICAgICAgICAgICAvKiBTZXQgdXAgSUtTRCdzIHByb21wdCAqLwotI2lmbmRlZiBOT1NF UlZFUgotICAgICAgICAgICAgZW5fbWFpID0gMDsgICAgICAgICAgICAgICAgIC8qIE1BSUwgaXMg ZGlzYWJsZWQgKi8KLSAgICAgICAgICAgIGVuX3dobyA9IDA7ICAgICAgICAgICAgICAgICAvKiBS RU1PVEUgV0hPIGlzIGRpc2FibGVkICovCi0gICAgICAgICAgICBlbl9ob3MgPSAwOyAgICAgICAg ICAgICAgICAgLyogUkVNT1RFIEhPU1QgaXMgZGlzYWJsZWQgKi8KLSAgICAgICAgICAgIGVuX3By aSA9IDA7ICAgICAgICAgICAgICAgICAvKiBQUklOVCBpcyBkaXNhYmxlZCAqLwotI2VuZGlmIC8q IE5PU0VSVkVSICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB4X2xvZ2luID0gMDsg ICAgICAgICAgICAgICAgLyogTG9naW4gbm90IHJlcXVpcmVkICovCi0gICAgICAgICAgICB4X2xv Z2dlZCA9IDE7ICAgICAgICAgICAgICAgLyogQWxyZWFkeSBsb2dnZWQgaW4gKi8KLSAgICAgICAg fQotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICBub2xv Y2FsID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBMSU5FL0hPU1Qgbm90IGFsbG93ZWQg Ki8KLSAgICAgICAgZmRpc3BsYSA9IFhZRkRfTjsgICAgICAgICAgICAgICAvKiBObyBmaWxlLXRy YW5zZmVyIGRpc3BsYXkgKi8KLSNpZmRlZiBORVRDT05OCi0gICAgICAgIGNsaWVudGhvc3QgPSBj a2dldHBlZXIoKTsgICAgICAgLyogR2V0IGNsaWVudCdzIGhvc3RuYW1lICovCi0gICAgICAgIGRl YnVnKEYxMTAsImlrc2xvZ2luIGNsaWVudGhvc3QiLGNsaWVudGhvc3QsMCk7Ci0jZW5kaWYgLyog TkVUQ09OTiAqLwotICAgICAgICB6dGltZSgmcyk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEdl dCBjdXJyZW50IGRhdGUgYW5kIHRpbWUgKi8KLQotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgQ0tf QVVUSEVOVElDQVRJT04KLSAgICAgICAgaWYgKHhfbG9naW4pIHsKLSAgICAgICAgICAgIHhfbG9n Z2VkID0gY2tfdG5fYXV0aF92YWxpZCgpOyAvKiBEaWQgVGVsbmV0IEF1dGggc3VjY2VlZD8gKi8K LSAgICAgICAgICAgIGRlYnVnKEYxMTEsImlrc2xvZ2luIiwieF9sb2dnZWQiLHhfbG9nZ2VkKTsK LQotI2lmZGVmIE5UCi0gICAgICAgICAgICAvKiBPbiBXaW5kb3dzIDl4LCB3ZSBkbyBub3QgaGF2 ZSB0aGUgYWJpbGl0eSBpbiAgKi8KLSAgICAgICAgICAgIC8qIHp2dXNlcigpIGF0IHByZXNlbnQg dG8gZGV0ZXJtaW5lIGlmIHRoZSBuYW1lICAqLwotICAgICAgICAgICAgLyogYXBwcm92ZWQgaW4g YSBLZXJiZXJvcyBwcmluY2lwYWwgaXMgcmVhbGx5IGEgICovCi0gICAgICAgICAgICAvKiBhbiBh Y2NvdW50IGluIHRoZSBXaW5kb3dzIEFjY2VzcyBDb250cm9sIExpc3QgKi8KLSAgICAgICAgICAg IGlmIChpc1dpbjk1KCkgJiYgeF9sb2dnZWQgPT0gQVVUSF9WQUxJRAotICAgICAgICAgICAgICAg ICAmJiAoY2tfdG5fYXV0aGVudGljYXRlZCgpICE9IEFVVEhUWVBFX05UTE0pCi0jaWZkZWYgQ0tf U1JQCi0gICAgICAgICAgICAgICAgICYmIChja190bl9hdXRoZW50aWNhdGVkKCkgIT0gQVVUSFRZ UEVfU1JQKQotI2VuZGlmIC8qIENLX1NSUCAqLwotICAgICAgICAgICAgICAgICApIHsKLSAgICAg ICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVVNFUik7Ci0gICAgICAgICAgICAgICAgeF9s b2dnZWQgPSBBVVRIX1VTRVI7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJXQVJOSU5HOlxyXG4i KTsKLSAgICAgICAgICAgICAgICBwcmludGYoCi0iIFRoZSBUZWxuZXQgYXV0aGVudGljYXRpb24g bWV0aG9kIHVzZWQgY2Fubm90IHByb3ZpZGUgZm9yIGF1dG9tYXRlZFxyXG4iKTsKLSAgICAgICAg ICAgICAgICBwcmludGYoCi0iIGxvZ2luIHRvIFdpbmRvd3MgOTUgb3IgV2luZG93cyA5OC4gIEEg cGFzc3dvcmQgbXVzdCBiZSBlbnRlcmVkXHJcbiIpOwotICAgICAgICAgICAgICAgIHByaW50ZigK LSIgbG9jYWxseSB0byB2YWxpZGF0ZSB5b3VyIHVzZXJpZC4gIFRlbG5ldCBhdXRoZW50aWNhdGlv biAoYW5kIGVuY3J5cHRpb24pXHJcbiIKLSAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg ICAgIHByaW50ZigKLSIgY2FuIGJlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIGhvc3QgKGFuZCBwcm90 ZWN0IHRoZSBwcml2YWN5IG9mIHlvdXIgcGFzc3dvcmQuKVwKLVxyXG4iCi0gICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotCi0gICAgICAgICAgICBpZiAo eF9sb2dnZWQgPT0gQVVUSF9WQUxJRCkgewotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgICAg IGlmICgoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgJiYKLSAgICAgICAgICAg ICAgICAgICAgKCFURUxPUFRfVShURUxPUFRfQVVUSEVOVElDQVRJT04pIHx8Ci0gICAgICAgICAg ICAgICAgICAgICBja190bl9hdXRoZW50aWNhdGVkKCkgPT0gQVVUSFRZUEVfTlVMTCB8fAotICAg ICAgICAgICAgICAgICAgICAgY2tfdG5fYXV0aGVudGljYXRlZCgpID09IEFVVEhUWVBFX0FVVE8p Ci0gICAgICAgICAgICAgICAgICAgICkgewotI2lmZGVmIFNTTF9LUkI1Ci0gICAgICAgICAgICAg ICAgICAgIGlmICh0bHNfaXNfa3JiNSgwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCJBdXRoZW50aWNhdGVkIHVzaW5nIEtlcmJlcm9zIDVcclxuIik7Ci0jaWZkZWYgQ0tTWVNM T0cKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfTEkgJiYg Y2t4bG9nZ2luZykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyIHN6 VXNlck5hbWVBdXRoZW50aWNhdGVkW107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tz eXNsb2coU1lTTEdfTEksIDEsICJBVVRIX1ZBTElEIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiS2VyYmVyb3MgNSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENL U1lTTE9HICovCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFNTTF9LUkI1 ICovCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiQXV0aGVudGljYXRlZCB1c2luZyBYLjUwOSBjZXJ0aWZpY2F0ZVxyXG4iKTsKLSNpZmRlZiBD S1NZU0xPRwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19M SSAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNo YXIgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBja3N5c2xvZyhTWVNMR19MSSwgMSwgIkFVVEhfVkFMSUQiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJYLjUwOSBjZXJ0aWZpY2F0ZSIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot I2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICAgIHsKLSAg ICAgICAgICAgICAgICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0ZWQgdXNpbmcgJXNcclxuIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShja190bl9hdXRoZW50 aWNhdGVkKCkpKTsKLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICAgICAgICAgICAgICAgIGlmIChj a3hzeXNsb2cgPj0gU1lTTEdfTEkgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAgICAgICAg ICAgICAgICBleHRlcm4gY2hhciBzelVzZXJOYW1lQXV0aGVudGljYXRlZFtdOwotICAgICAgICAg ICAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMSwgIkFVVEhfVkFMSUQiLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGNrX3RuX2F1dGhl bnRpY2F0ZWQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5h bWVBdXRoZW50aWNhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgenZ1c2VyKHVpZGJ1Zik7Ci0gICAgICAgICAgICAg ICAgaWYgKHp2cGFzcygiIikgPT0gMCkKLSAgICAgICAgICAgICAgICAgIHhfbG9nZ2VkID0gMDsK LSAgICAgICAgICAgIH0gZWxzZSBpZiAoeF9sb2dnZWQgPT0gQVVUSF9VU0VSICYmICFzdHJjbXAo dWlkYnVmLCJhbm9ueW1vdXMiKSkgewotICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyIHN6VXNl ck5hbWVBdXRoZW50aWNhdGVkW107Ci0gICAgICAgICAgICAgICAgenZ1c2VyKHVpZGJ1Zik7Ci0g ICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQiLAotICAg ICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkLDApOwotICAgICAgICAg ICAgICAgIGlmICh6dnBhc3Moc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQpID09IDApIHsKLSAgICAg ICAgICAgICAgICAgIC8qIEFub255bW91cyBsb2dpbiBmYWlsZWQuICBGb3JjZSBhIHVzZXJuYW1l IHByb21wdC4gKi8KLSAgICAgICAgICAgICAgICAgIHhfbG9nZ2VkID0gMDsKLSAgICAgICAgICAg ICAgICAgIHVpZGJ1ZlswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSNpZmRl ZiBDS19TU0wKLSAgICAgICAgICAgICAgICAgICAgaWYgKChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxz X2FjdGl2ZV9mbGFnKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgKCFURUxPUFRfVShURUxP UFRfQVVUSEVOVElDQVRJT04pIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY2tfdG5fYXV0 aGVudGljYXRlZCgpID09IEFVVEhUWVBFX05VTEwgfHwKLSAgICAgICAgICAgICAgICAgICAgICAg ICBja190bl9hdXRoZW50aWNhdGVkKCkgPT0gQVVUSFRZUEVfQVVUTykpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHByaW50ZigiQXV0aGVudGljYXRlZCB1c2luZyBYLjUwOSBjZXJ0aWZpY2F0 ZVxyXG4iKTsKLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNr eHN5c2xvZyA+PSBTWVNMR19MSSAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXh0ZXJuIGNoYXIgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMSwgIkFVVEhfVVNFUiIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlguNTA5IGNlcnRpZmljYXRlIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1lQXV0aGVudGlj YXRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgICAgICAgICAg ICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0ZWQgdXNpbmcgJXNc clxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoY2tf dG5fYXV0aGVudGljYXRlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSNpZmRlZiBDS1NZU0xPRwotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2t4c3lzbG9n ID49IFNZU0xHX0xJICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAiQVVUSF9VU0VSIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoY2tfdG5fYXV0aGVudGljYXRlZCgp KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWVBdXRo ZW50aWNhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg ICAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsK LSNpZmRlZiBDS1NZU0xPRwotICAgICAgICAgICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdf TEkgJiYgY2t4bG9nZ2luZyAmJgotICAgICAgICAgICAgICAgICAgICB4X2xvZ2dlZCA9PSBBVVRI X1VTRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3pVc2VyTmFtZUF1dGhl bnRpY2F0ZWRbXTsKLSAgICAgICAgICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfTEksIDEsICJB VVRIX1VTRVIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGNr X3RuX2F1dGhlbnRpY2F0ZWQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6VXNl ck5hbWVBdXRoZW50aWNhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgICAgICAgICAgeF9s b2dnZWQgPSAwOwotICAgICAgICAgICAgICAgIGlmICghc3RyY21wKCIodW5rbm93bikiLHVpZGJ1 ZikKLSNpZmRlZiBOVAotICAgICAgICAgICAgICAgICAgICB8fCAhc3RyaWNtcCgiYWRtaW5pc3Ry YXRvciIsdWlkYnVmKQotI2lmZGVmIFVOSVgKLSAgICAgICAgICAgICAgICAgICAgfHwgIXN0cmNt cCgicm9vdCIsdWlkYnVmKQotI2Vsc2UKLSNpZmRlZiBQbGFuOQotICAgICAgICAgICAgICAgICAg ICB8fCAhc3RyY21wKCJyb290Iix1aWRidWYpCi0jZWxzZQotI2lmZGVmIE9TSwotICAgICAgICAg ICAgICAgICAgICB8fCAhc3RyY21wKCJyb290Iix1aWRidWYpCi0jZW5kaWYgLyogT1NLICovCi0j ZW5kaWYgLyogUGxhbjkgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogTlQgKi8KLSAg ICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgdWlkYnVmWzBdID0gJ1wwJzsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICov Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotI2lmZGVmIElLU0QKLSAgICAgICAgaWYgKGluc2Vy dmVyKQotICAgICAgICAgIHByaW50ZigiXHJcbkludGVybmV0IEtlcm1pdCBTZXJ2aWNlIHJlYWR5 IGF0ICVzJXNcclxuIixzLHZlcnNpbyk7Ci0gICAgICAgIGVsc2UKLSNlbmRpZiAvKiBJS1NEICov Ci0gICAgICAgICAgcHJpbnRmKCJcclxuQy1LZXJtaXQgcmVhZHkgYXQgJXMlc1xyXG4iLHMsdmVy c2lvKTsKLSAgICAgICAgaWYgKCpteWhvc3QpCi0gICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLCBt eWhvc3QpOwotICAgICAgICBwcmludGYoIlxyXG4iKTsKLSAgICB9Ci0jaWZkZWYgQ0tfTE9HSU4K LSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgIGludCBpOwotICAgICAg ICBleHRlcm4gaW50IGFyZ194OyAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yICcteCcgb24gY29t bWFuZCBsaW5lICovCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgIGV4dGVybiBzdHJ1Y3QgbXRhYiAq bWFjdGFiOyAgICAgICAgIC8qIEZvciBPTl9MT0dJTiBtYWNyby4gKi8KLSAgICAgICAgZXh0ZXJu IGludCBubWFjOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICAgICAgZGVidWcoRjExMCwiTUFJ TiBjbGllbnRob3N0IixjbGllbnRob3N0LDApOwotICAgICAgICBzcnZpZGwgPSB0aW1lbGltaXQg PSBsb2dpbnRpbW87IC8qIEZvciBpbnRlcmFjdGl2ZSBsb2dpbiAqLwotICAgICAgICBydGltZXIo KTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHRpbWVyICovCi0gICAgICAgIGZvciAo aSA9IDA7IGkgPCBpa3NfcmV0cnkgJiYgIXhfbG9nZ2VkOyBpKyspIHsgLyogQ291bnQgcmV0cmll cyAqLwotICAgICAgICAgICAgaWYgKGd0aW1lcigpID4gbG9naW50aW1vKQotICAgICAgICAgICAg ICBicmVhazsKLSNpZmRlZiBUTkNPREUKLSAgICAgICAgICAgIHRuX3dhaXQoImxvZ2luIGxvb3Ai KTsKLSAgICAgICAgICAgIHRuX3B1c2goKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICAgICAg ICAgIGRlYnVnKEYxMDEsIk1BSU4gTE9HSU4gdHJ5IiwiIixpKTsKLSAgICAgICAgICAgIHdoYXQg PSBXX05PVEhJTkc7ICAgICAgICAgICAvKiBCZWNhdXNlIHByb3RvKCkgY2hhbmdlcyB0aGlzICov Ci0KLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJNQUlOIExPR0lO IiwKLSAgICAgICAgICAgICAgICAgICJURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1l X3N0YXJ0IiwKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJt aXQubWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAvKiBLZXJtaXQg c2VydmVyIG5lZ290aWF0ZWQgKi8KLSAgICAgICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0tF Uk1JVCkua2VybWl0Lm1lX3N0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiSUtT RCBzdGFydGluZyBpbiBzZXJ2ZXIgbW9kZSIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgYXJnX3gg PSAxOyAgICAgICAgICAgICAgLyogRW50ZXIgc2VydmVyIG1vZGUgKi8KLSAgICAgICAgICAgICAg ICBzc3RhdGUgPSAneCc7Ci0jaWZkZWYgSUtTRFBPUEJBQ0sKLSAgICAgICAgICAgICAgICBqdXN0 b25lID0gMTsgICAgICAgICAgICAvKiBFeGVjdXRlIG9uZSBjb21tYW5kIGF0IGEgdGltZS4gKi8K LSNlbmRpZiAvKiBJS1NEUE9QQkFDSyAqLwotICAgICAgICAgICAgICAgIHByb3RvKCk7ICAgICAg ICAgICAgICAgIC8qIEVudGVyIHByb3RvY29sIGlmIHJlcXVlc3RlZC4gKi8KLSNpZmRlZiBOVFNJ RwotICAgICAgICAgICAgICAgIGNrX2loKCk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAg ICAgICAgICBpZiAoeF9sb2dnZWQpICAgICAgICAgICAvKiBMb2dnZWQgaW4gKi8KLSAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAg IC8qIE5vdCBpbiBjbGllbnQvc2VydmVyIG1vZGUgKi8KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICov Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiSUtTRCBzdGFydGluZyB3aXRoIFVzZXJuYW1l IHByb21wdCIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgeF9sb2dnZWQgPSBja3hsb2dpbigoQ0hB UiAqKXVpZGJ1ZixOVUxMLE5VTEwsMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNzdGF0ZSkgeyAg ICAgICAgICAgLyogUmVjZWl2ZWQgYSBwYWNrZXQgYXQgcHJvbXB0ICovCi0jaWZkZWYgSUtTRFBP UEJBQ0sKLSAgICAgICAgICAgICAgICAgICAganVzdG9uZSA9IDE7ICAgICAgICAvKiBHbyBoYW5k bGUgaXQgKi8KLSNlbmRpZiAvKiBJS1NEUE9QQkFDSyAqLwotICAgICAgICAgICAgICAgICAgICBw cm90bygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXhfbG9nZ2Vk KSB7ICAgICAgICAvKiBJbiBjYXNlIHdlIGFyZSBhdCB0aGUgcHJvbXB0Li4uICovCi0gICAgICAg ICAgICAgICAgICAgIHByaW50ZigiQWNjZXNzIGRlbmllZC5cbiIpOwotICAgICAgICAgICAgICAg ICAgICB1aWRidWZbMF0gPSAnXDAnOyAgIC8qIEZvcmdldCB0aGUgbmFtZSBpZiB3ZSBoYXZlIG9u ZSAqLwotICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAgICAgICAgICB9 Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgICAgICB9Ci0gICAgICAgIHNydmlkbCA9IHRp bWVsaW1pdCA9IGlrc190aW1vOyAgLyogUmVzZXQgY29tbWFuZCB0aW1lbGltaXQgKi8KLSAgICAg ICAgZGVidWcoRjEwMSwiTUFJTiBMT0dJTiIsIiIseF9sb2dnZWQpOwotICAgICAgICBpZiAoIXhf bG9nZ2VkKSB7ICAgICAgICAgICAgICAgIC8qIExvZ2lucyBmYWlsZWQuICovCi0gICAgICAgICAg ICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkKLSAgICAgICAg ICAgICAgZXJycGt0KChDSEFSICopIkxvZ2luIFRpbWVvdXQiKTsKLSAgICAgICAgICAgIG1zbGVl cCg1MDApOwotICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDApOwotICAgICAgICB9Ci0gICAg ICAgIHdoYXQgPSBXX05PVEhJTkc7ICAgICAgICAgICAgICAgLyogU3RheSBpbiBrbm93biBzdGF0 ZSAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgICAgICBpZiAoaXNndWVzdCkgewotICAgICAgICAg ICAgZW5fcHJpID0gMDsgICAgICAgICAgICAgICAgIC8qIE5vIHByaW50aW5nIGZvciBhbm9ueW1v dXMgdXNlcnMgKi8KLSAgICAgICAgICAgIGVuX21haSA9IDA7ICAgICAgICAgICAgICAgICAvKiBO byBlbWFpbCBmb3IgYW5vbnltb3VzIHVzZXJzICovCi0gICAgICAgICAgICBlbl9ta2QgPSAwOyAg ICAgICAgICAgICAgICAgLyogT3IgZGlyZWN0b3J5IGNyZWF0aW9uICovCi0gICAgICAgICAgICBl bl9ybWQgPSAwOyAgICAgICAgICAgICAgICAgLyogT3IgZGlyZWN0b3J5IHJlbW92YWwgKi8KLSAg ICAgICAgICAgIGVuX2VuYSA9IDA7ICAgICAgICAgICAgICAgICAvKiBPciBFTkFCTGluZyBESVNB QkxFZCBpdGVtcyAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQotI2lmbmRl ZiBOT1NQTAotLyoKLSAgSWYgYSBtYWNybyBuYW1lZCAib25fbG9naW4iIGlzIGRlZmluZWQsIGV4 ZWN1dGUgaXQuICBBbHNvIHJlbW92ZSBpdCBmcm9tIHRoZQotICBtYWNybyB0YWJsZSBzbyB0aGUg dXNlciBjYW5ub3Qgc2VlIHdoYXQgaXQgZG9lcy4gIEV4ZWN1dGUgaXQgYXMgcGFydCBvZiB0aGUK LSAgaWtzZC5jb25mIGZpbGUuCi0qLwotICAgICAgICBpZiAobm1hYykgeyAgICAgICAgICAgICAg ICAgICAgIC8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KLSAgICAgICAgICAgIGludCBrOyAgICAg ICAgICAgICAgICAgICAgICAvKiBZZXMgKi8KLSAgICAgICAgICAgIGNoYXIgKiBjbWQgPSAib25f bG9naW4iOyAgICAvKiBNU1ZDIDIueCBjb21waWxlciBlcnJvciAqLwotICAgICAgICAgICAgayA9 IG1sb29rKG1hY3RhYixjbWQsbm1hYyk7IC8qIExvb2sgdXAgIm9uX2xvZ2luIiAqLwotICAgICAg ICAgICAgaWYgKGsgPj0gMCkgeyAgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLwotI2lmZGVm IElLU0RDT05GCi0gICAgICAgICAgICAgICAgaW50IHNhdmVkID0gaWtzZGNmOwotICAgICAgICAg ICAgICAgIGlrc2RjZiA9IDA7Ci0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSAgICAgICAgICAgICAg ICBpZiAoZG9kbyhrLCIiLDApID4gLTEpICAvKiBzZXQgaXQgdXAsICovCi0gICAgICAgICAgICAg ICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgLyogZXhlY3V0ZSBpdCAqLwotI2lmZGVmIElLU0RD T05GCi0gICAgICAgICAgICAgICAgaWtzZGNmID0gc2F2ZWQ7Ci0jZW5kaWYgLyogSUtTRENPTkYg Ki8KLSAgICAgICAgICAgICAgICBkZWxtYWMoY21kLDEpOyAgICAgICAgICAvKiBhbmQgZGVsZXRl IGl0ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAg IH0gLyogaWYgKGluc2VydmVyKSAqLwotI2Vsc2UgLyogQ0tfTE9HSU4gKi8KLSAgICBpZiAoaW5z ZXJ2ZXIpCi0gICAgICAgIHNydmlkbCA9IHRpbWVsaW1pdCA9IGlrc190aW1vOyAgLyogU2V0IGlk bGUgbGltaXRzIGZvciBJS1MgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElL U0QgKi8KLX0KLQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1mYWlsY21kbGluZSh2b2lkICogZm9v KQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWZhaWxjbWRsaW5lKGZvbykgVk9JRCAqIGZvbzsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotewotI2lmZGVmIEdFTURPUwotICAgIGNjX2NsZWFuKCk7Ci0j ZW5kaWYgLyogR0VNRE9TICovCi0jaWZuZGVmIE5PTE9DQUwKLSAgICBpZiAoY25mbGcpIGRvY29u ZWN0KDAsMCk7ICAgICAgICAgICAvKiBjb25uZWN0IGFnYWluIGlmIHJlcXVlc3RlZC4gKi8KLSAg ICBpZiAodHRjaGsoKSA8IDApCi0gICAgICBkb2xvZ2VuZCgpOwotI2VuZGlmIC8qIE5PTE9DQUwg Ki8KLX0KLSNlbmRpZiAvKiBOT0NNREwgKi8KLQotI2lmbmRlZiBOT0lDUAotVk9JRAotI2lmZGVm IENLX0FOU0lDCi1kb3Rha2Vpbmkodm9pZCAqIHRocmVhZGluZm8pICAgICAgICAgICAgLyogRXhl Y3V0ZSBpbml0IGZpbGUuICovCi0jZWxzZSAgLyogQ0tfQU5TSUMgKi8KLWRvdGFrZWluaSh0aHJl YWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsgLyogRXhlY3V0ZSBpbml0IGZpbGUuICovCi0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRvdGFrZWluaSAqLyB7Ci0jaWZkZWYgTlRTSUcKLSAgICBz ZXRpbnQoKTsKLSAgICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAgICAgICAgICAvKiBUaHJl YWQgbG9jYWwgc3RvcmFnZS4uLiAqLwotICAgICAgIFRsc1NldFZhbHVlKFRsc0luZGV4LHRocmVh ZGluZm8pOwotICAgICAgIGRlYnVnKEYxMDAsICJkb3Rha2VpbmkgY2FsbGVkIHdpdGggdGhyZWFk aW5mbyBibG9jayIsIiIsIDApOwotICAgIH0gZWxzZQotICAgICAgZGVidWcoRjEwMCwgImRvdGFr ZWluaSAtIHRocmVhZGluZm8gaXMgTlVMTCIsICIiLCAwKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwot I2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgTlQKLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVy KQotICAgICAgc2V0bnRjcmVkcygpOwotI2VuZGlmIC8qIElLU0QgKi8KLSNlbmRpZiAvKiBOVCAq LwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgY21kaW5pKCk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU2V0cyB0bGV2ZWwgKi8KLQotICAgIGRlYnVnKEYxMTEsImRvdGFrZWluaSIs Imluc2VydmVyIixpbnNlcnZlcik7Ci0gICAgZGVidWcoRjExMSwiZG90YWtlaW5pIiwic3N0ZWxu ZXQiLHNzdGVsbmV0KTsKLQotI2lmZGVmIENPTU1FTlQKLS8qIFdyb25nIHBsYWNlIGZvciB0aGlz Li4uICovCi0jaWZuZGVmIE5PWEZFUgotI2lmZGVmIENLX0ZBU1QKLSAgICBkb2Zhc3QoKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBCeSBub3cgRkFTVCBkZWZhdWx0cyBzaG91bGQgYmUg T0sgKi8KLSNlbmRpZiAvKiBDS19GQVNUICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0jZW5kaWYg LyogQ09NTUVOVCAqLwotCi0gICAgZG9pbml0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTm93IGRvIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlICovCi0gICAgZGVidWcoRjEwMSwibWFp biBleGVjdXRpbmcgaW5pdCBmaWxlIiwiIix0bGV2ZWwpOwotICAgIHdoaWxlICh0bGV2ZWwgPiAt MSkgewotICAgICAgICBzc3RhdGUgPSAoQ0hBUikgcGFyc2VyKDEpOyAgICAgIC8qIEV4ZWN1dGUg b25lIGNvbW1hbmQgYXQgYSB0aW1lLiAqLwotICAgICAgICBpZiAoc3N0YXRlKSBwcm90bygpOyAg ICAgICAgICAgIC8qIEVudGVyIHByb3RvY29sIGlmIHJlcXVlc3RlZC4gKi8KLSNpZmRlZiBOVFNJ RwotICAgICAgICBja19paCgpOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgfQotICAgIGRlYnVn KEYxMDEsIm1haW4gZXhpdHMgaW5pdCBmaWxlIiwiIix0bGV2ZWwpOwotCi0jaWZkZWYgTlRTSUcK LSAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgIHJl dHVybjsKLX0KLQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1mYWlsdGFrZWluaSh2b2lkICogdGhy ZWFkaW5mbykKLSNlbHNlIC8qIENLX0FOU0lDICovCi1mYWlsdGFrZWluaSh0aHJlYWRpbmZvKSBW T0lEICogdGhyZWFkaW5mbzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZmFpbHRha2Vpbmkg Ki8gewotI2lmZGVmIEdFTURPUwotICAgIGNjX2NsZWFuKCk7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEF0YXJpOiBDbGVhbiB1cCBhZnRlciBeQy10cmFwLiAqLwotI2VuZGlmIC8qIEdFTURP UyAqLwotICAgIGZpeGNtZCgpOwotICAgIGlmICghY2ZpbGVmKSB7Ci0gICAgICAgIGNvbm9sbCgi SW50ZXJydXB0ZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9yIFwKLWNvbW1hbmQtbGluZSBwcm9j ZXNzaW5nLiIpOwotICAgICAgICBjb25vbGwoIkMtS2VybWl0IHF1aXR0aW5nLi4uIik7Ci0gICAg fQotICAgIGRvZXhpdChCQURfRVhJVCwtMSk7ICAgICAgICAgICAgICAgIC8qIEV4aXQgd2l0aCBi YWQgc3RhdHVzLiAqLwotfQotCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWRvaWNwKHZvaWQgKiB0 aHJlYWRpbmZvKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWRvaWNwKHRocmVhZGluZm8pIFZPSUQg KiB0aHJlYWRpbmZvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBkb2ljcCAqLyB7Ci0jaWZk ZWYgTlRTSUcKLSAgICBzZXRpbnQoKTsKLSAgICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAg ICAgICAgICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLwotICAgICAgIGlmICghVGxzU2V0 VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbykpCi0gICAgICAgICAgZGVidWcoRjEwMSwiZG9pY3Ag VGxzU2V0VmFsdWUgZmFpbGVkIiwiIixHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgZGVidWcoRjEw MSwgImRvaWNwIGEgdGhyZWFkaW5mbyBibG9jayAtIFRsc0luZGV4IiwgIiIsIFRsc0luZGV4KTsK LSAgICB9IGVsc2UgewotICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9pY3AgcmVjZWl2ZWQgYSBudWxs IHRocmVhZGluZm8iLCAiIiwgMCk7Ci0gICAgfQotI2VuZGlmIC8qIE5UU0lHICovCi0jaWZkZWYg Q0tfTE9HSU4KLSNpZmRlZiBOVAotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAg ICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogSUtTRCAqLwotI2VuZGlmIC8qIE5UICovCi0jZW5k aWYgLyogQ0tfTE9HSU4gKi8KLSNpZmRlZiBNQUMKLSAgICB3aGlsZSAoMSkgewotICAgICAgICBl eHRlcm4gY2hhciAqbGZpbGVzOyAgICAgICAgICAgIC8qIEZha2UgcG9pbnRlciBjYXN0ICovCi0K LSAgICAgICAgaWYgKGNvbm5lY3RlZCkgewotICAgICAgICAgICAgZGVidWcoRjEwMCwgImRvaWNw OiBjYWxsaW5nIG1hY3BhcnNlciIsICIiLCAwKTsKLSAgICAgICAgICAgIHNzdGF0ZSA9IG5ld3Bh cnNlcigxLCAxLCAwTCk7Ci0KLSAgICAgICAgICAgIC8qIGlnbm9yZSBudWxsIGNvbW1hbmQgc3Rh dGUgKi8KLSAgICAgICAgICAgIGlmIChzc3RhdGUgPT0gJ24nKQotICAgICAgICAgICAgICBzc3Rh dGUgPSAnXDAnOwotCi0gICAgICAgICAgICBpZiAoc3N0YXRlKQotICAgICAgICAgICAgICBwcm90 bygpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIHBy b2Nlc3MgdGFrZSBmaWxlcyB0aGUgZmluZGVyIGdhdmUgdXMuCi0gICAgICAgICAgICAgKi8KLSAg ICAgICAgICAgIGlmICgodGxldmVsID09IC0xKSAmJiBsZmlsZXMpCi0gICAgICAgICAgICAgIHN0 YXJ0bGZpbGUoKTsKLQotICAgICAgICAgICAgZGVidWcoRjEwMCwgImRvaWNwOiBjYWxsaW5nIHBh cnNlciIsICIiLCAwKTsKLSAgICAgICAgICAgIHNzdGF0ZSA9IChDSEFSKSBwYXJzZXIoMCk7Ci0g ICAgICAgICAgICBpZiAoc3N0YXRlID09ICdjJykgICAgICAgICAgLyogaWYgTUFDIGNvbm5lY3Qg Ki8KLSAgICAgICAgICAgICAgc3N0YXRlID0gMDsKLSAgICAgICAgICAgIGlmIChzc3RhdGUpCi0g ICAgICAgICAgICAgIHByb3RvKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZSAvKiBOb3QgTUFD ICovCi0KLSNpZm5kZWYgTk9TUEwKLS8qCi0gIElmIGludGVyYWN0aXZlIGNvbW1hbmRzIHdlcmUg Z2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSAodXNpbmcgdGhlCi0gIC1DICJjb21tYW5kLCBjb21t YW5kLCAuLi4iIG9wdGlvbiksIGFzc2lnbiB0aGVtIHRvIGEgbWFjcm8gY2FsbGVkCi0gICJjbF9j b21tYW5kcyIsIHRoZW4gZXhlY3V0ZSB0aGUgbWFjcm8gYW5kIGxlYXZlIGl0IGRlZmluZWQgZm9y Ci0gIHN1YnNlcXVlbnQgcmUtZXhlY3V0aW9uIGlmIGRlc2lyZWQuCi0qLwotICAgIGlmIChjbGNt ZHMpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciAtQyBjb21tYW5kcyAqLwot ICAgICAgICBpbnQgeDsKLSAgICAgICAgeCA9IGFkZG1hYygiY2xfY29tbWFuZHMiLGNsY21kcyk7 IC8qIFB1dCBtYWNybyBpbiB0YWJsZSAqLwotICAgICAgICBpZiAoeCA+IC0xKSB7ICAgICAgICAg ICAgICAgICAgIC8qIElmIHN1Y2Nlc3NmdWwsICovCi0gICAgICAgICAgICBkb2RvKHgsTlVMTCxD Rl9DTURMKTsgICAgICAgLyogc2V0IHVwIGZvciBtYWNybyBleGVjdXRpb24gKi8KLSAgICAgICAg ICAgIHdoaWxlIChtYWNsdmwgPiAtMSkgeyAgICAgICAvKiBMb29wIGdldHRpbmcgbWFjcm8gY29t bWFuZHMuICovCi0gICAgICAgICAgICAgICAgc3N0YXRlID0gKENIQVIpIHBhcnNlcigxKTsKLSAg ICAgICAgICAgICAgICBpZiAoc3N0YXRlKSBwcm90bygpOyAgICAvKiBFbnRlciBwcm90b2NvbCBp ZiByZXF1ZXN0ZWQuICovCi0jaWZkZWYgTlRTSUcKLSAgICAgICAgICAgICAgICBja19paCgpOwot I2VuZGlmIC8qIE5UU0lHICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVi dWcoRjEwMCwiZG9pY3AgY2FsbGluZyBoZXJhbGQiLCIiLDApOwotICAgICAgICBoZXJhbGQoKTsK LSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB3aGlsZSgxKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBMb29wIGdldHRpbmcgY29tbWFuZHMuICovCi0gICAgICAgIHNzdGF0ZSA9 IChDSEFSKSBwYXJzZXIoMCk7Ci0gICAgICAgIGlmIChzc3RhdGUpIHByb3RvKCk7ICAgICAgICAg ICAgLyogRW50ZXIgcHJvdG9jb2wgaWYgcmVxdWVzdGVkLiAqLwotI2lmZGVmIE5UU0lHCi0gICAg ICAgY2tfaWgoKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgIH0KLSNpZmRlZiBOVFNJRwotICAg IGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0jZW5kaWYgLyog TUFDICovCi19Ci0KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotZmFpbGljcCh2b2lkICogdGhyZWFk aW5mbykKLSNlbHNlIC8qIENLX0FOU0lDICovCi1mYWlsaWNwKHRocmVhZGluZm8pIFZPSUQgKiB0 aHJlYWRpbmZvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0jaWZkZWYgR0VNRE9TCi0gICAg Y2NfY2xlYW4oKTsKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSAgICBmaXhjbWQoKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQb3AgY29tbWFuZCBzdGFja3MsIGV0Yy4gKi8KLSAgICBjbGNt ZHMgPSBOVUxMOwotICAgIGRlYnVnKEYxMDAsImNrY21haSBnb3QgaW50ZXJydXB0IiwiIiwwKTsK LX0KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZuZGVmIE5PSUNQCi1WT0lECi0jaWZkZWYgQ0tf QU5TSUMKLWRvY21kZmlsZSh2b2lkICogdGhyZWFkaW5mbykgICAgICAgICAgICAvKiBFeGVjdXRl IGFwcGxpY2F0aW9uIGZpbGUgKi8KLSNlbHNlIC8qIENLX0FOU0lDICovCi1kb2NtZGZpbGUodGhy ZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRv Y21kZmlsZSAqLyB7Ci0jaWZkZWYgTlRTSUcKLSAgICBjb25jYigoY2hhcillc2NhcGUpOwotICAg IHNldGludCgpOwotICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAgICAgICAgICAgICAgIC8qIFRo cmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0gICAgICAgIFRsc1NldFZhbHVlKFRsc0luZGV4LHRo cmVhZGluZm8pOwotICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9jbWRmaWxlIGNhbGxlZCB3aXRoIHRo cmVhZGluZm8gYmxvY2siLCIiLCAwKTsKLSAgICB9IGVsc2UgZGVidWcoRjEwMCwgImRvY21kZmls ZSAtIHRocmVhZGluZm8gaXMgTlVMTCIsICIiLCAwKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotI2lm ZGVmIENLX0xPR0lOCi0jaWZkZWYgSUtTRAotI2lmZGVmIE5UCi0gICAgaWYgKGluc2VydmVyKQot ICAgICAgc2V0bnRjcmVkcygpOwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogSUtTRCAqLwot I2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgZGVidWcoRjExMCwibWFpbiBjbWRmaWwiLGNtZGZp bCwwKTsKLSNpZm5kZWYgTk9TUEwKLSAgICBhZGRtYWMoIlxcJTAiLGNtZGZpbCk7Ci0jZW5kaWYg LyogTk9TUEwgKi8KLSAgICBkb3Rha2UoY21kZmlsKTsJCQkvKiBTZXQgdXAgdGhlIGNvbW1hbmQg ZmlsZSAqLwotICAgIGlmICh0bGV2ZWwgPiAtMSkJCQkvKiBSZW1lbWJlciB3ZSBkaWQgdGhpcyAq LwotICAgICAgY2ZpbGVmID0gMTsKLSAgICB3aGlsZSAodGxldmVsID4gLTEpIHsgICAgICAgICAg ICAgICAvKiBFeGVjdXRlIGl0IHVudGlsIGl0IHJ1bnMgb3V0LiAqLwotICAgICAgICBzc3RhdGUg PSBwYXJzZXIoMSk7ICAgICAgICAgICAgIC8qIExvb3AgZ2V0dGluZyBjb21tYW5kcy4gKi8KLSAg ICAgICAgaWYgKHNzdGF0ZSkgcHJvdG8oKTsgICAgICAgICAgICAvKiBFbnRlciBwcm90b2NvbCBp ZiByZXF1ZXN0ZWQuICovCi0jaWZkZWYgTlRTSUcKLSAgICAgICAgY2tfaWgoKTsKLSNlbmRpZiAv KiBOVFNJRyAqLwotICAgIH0KLQotI2lmZGVmIE5UU0lHCi0gICAgY2tUaHJlYWRFbmQodGhyZWFk aW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICByZXR1cm47Ci19Ci0KLVZPSUQKLSNpZmRl ZiBDS19BTlNJQwotZmFpbGNtZGZpbGUodm9pZCAqIHRocmVhZGluZm8pCi0jZWxzZSAvKiBDS19B TlNJQyAqLwotZmFpbGNtZGZpbGUodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLS8qIGZhaWxjbWRmaWxlICovIHsKLSNpZmRlZiBHRU1ET1MKLSAg ICBjY19jbGVhbigpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdGFyaTogQ2xlYW4gdXAg YWZ0ZXIgXkMtdHJhcC4gKi8KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSAgICBmaXhjbWQoKTsKLSAg ICBpZiAoIWNmaWxlZikgewotCWNvbm9sbCgiSW50ZXJydXB0ZWQgZHVyaW5nIGluaXRpYWxpemF0 aW9uIG9yIFwKLWNvbW1hbmQtbGluZSBwcm9jZXNzaW5nLiIpOwotCWNvbm9sbCgiQy1LZXJtaXQg cXVpdHRpbmcuLi4iKTsKLSAgICB9Ci0gICAgZG9leGl0KEJBRF9FWElULC0xKTsgICAgICAgICAg ICAgICAgLyogRXhpdCB3aXRoIGJhZCBzdGF0dXMuICovCi19Ci0jZW5kaWYgLyogTk9JQ1AgKi8K LQotI2lmbmRlZiBOT1hGRVIKLVZPSUQKLXNldHByZWZpeCh6KSBpbnQgejsgeyAgICAgICAgICAg ICAgICAgICAvKiBJbml0aWFsIGNvbnRyb2wtY2hhciBwcmVmaXhpbmcgKi8KLSNpZmRlZiBDS19T UEVFRAotICAgIGludCBpLCB2YWw7Ci0KLSAgICBwcmVmaXhpbmcgPSB6OwotICAgIHB0YWJbcHJv dG9jb2xdLnByZWZpeCA9IHByZWZpeGluZzsKLSAgICBkZWJ1ZyhGMTAxLCJzZXRwcmVmaXgiLCIi LHByZWZpeGluZyk7Ci0gICAgc3dpdGNoICh6KSB7Ci0gICAgICBjYXNlIFBYX0FMTDogICAgICAg ICAgICAgICAgICAgICAgLyogQWxsICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAvKiBEb24n dCBsZXQgQ2xlYXItQ2hhbm5lbCBiZSBkZXBlbmRlbnQgb24gcHJlZml4aW5nICovCi0gICAgICAg IGNsZWFycnEgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgY2xlYXJjaGFubmVs LCBmYWxsIHRocnUgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICBjYXNlIFBYX05PTjog ICAgICAgICAgICAgICAgICAgICAgLyogTm9uZSAqLwotICAgICAgICB2YWwgPSAoeiA9PSBQWF9B TEwpID8gMSA6IDA7Ci0gICAgICAgIGZvciAoaSA9Ci0jaWZkZWYgVU5QUkVGSVhaRVJPCi0gICAg ICAgICAgICAgMAotI2Vsc2UKLSAgICAgICAgICAgICAxCi0jZW5kaWYgLyogVU5QUkVGSVhaRVJP ICovCi0gICAgICAgICAgICAgOyBpIDwgMzI7IGkrKykKLSAgICAgICAgICBjdGxwW2ldID0gdmFs OwotICAgICAgICBmb3IgKGkgPSAxMjc7IGkgPCAxNjA7IGkrKykgY3RscFtpXSA9IHZhbDsKLSAg ICAgICAgY3RscFsodW5zaWduZWQpMjU1XSA9IHZhbDsKLSAgICAgICAgaWYgKHogPT0gUFhfTk9O KSB7ICAgICAgICAgICAgICAvKiBUaGVzZSBhcmUgbmV2ZXIgc2FmZSAqLwotICAgICAgICAgICAg aWYgKG5ldHdvcmspIHsgICAgICAgICAgICAgIC8qIEFzc3VtZSBuZXR3b3JrID0gdGVsbmV0IG9y IHJsb2dpbiAqLwotICAgICAgICAgICAgICAgIGN0bHBbQ1JdID0gMTsgICAgICAgICAgIC8qIFBy ZWZpeCBDUiBiZWNhdXNlIG9mIE5WVCBydWxlcyAqLwotICAgICAgICAgICAgICAgIGN0bHBbWE9O XSA9IGN0bHBbWE9GRl0gPSAxOyAvKiBCZWNhdXNlIG9mIFRlbG5ldCBzZXJ2ZXIgKi8KLSAgICAg ICAgICAgICAgICBjdGxwWzEyN10gPSBjdGxwWzI1NV0gPSAxOyAgLyogVGVsbmV0IElBQyAqLwot ICAgICAgICAgICAgICAgIGN0bHBbbXlzdGNoXSA9IGN0bHBbbXlzdGNoKzEyOF0gPSAxOyAvKiBL ZXJtaXQgcGFja2V0IHN0YXJ0ICovCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgIGN0bHBbQ1JdID0gY3RscFsyNTVdID0gY3RscFtteXN0Y2hdID0gY3RscFtteXN0Y2grMTI4 XSA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZsb3cgPT0gRkxPX1hPTlgpICAgICAgIC8qIFhv bi9Yb2ZmIGZvcmNlcyBwcmVmaXhpbmcgKi8KLSAgICAgICAgICAgICAgICAgIGN0bHBbWE9OXSA9 IGN0bHBbWE9GRl0gPSBjdGxwW1hPTisxMjhdID0gY3RscFtYT0ZGKzEyOF0gPSAxOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFBYX0NBVTog ICAgICAgICAgICAgICAgICAgICAgLyogQ2F1dGlvdXMgb3IgTWluaW1hbCAqLwotI2lmZGVmIENP TU1FTlQKLSAgICAgICAgLyogRG9uJ3QgbGV0IENMRUFSLUNIQU5ORUwgYmUgZGVwZW5kZW50IG9u IFByZWZpeGluZyAqLwotICAgICAgICBjbGVhcnJxID0gMDsgICAgICAgICAgICAgICAgICAgIC8q IFR1cm4gb2ZmIGNsZWFyY2hhbm5lbCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgIGNh c2UgUFhfV0lMOiAgICAgICAgICAgICAgICAgICAgICAvKiBNaW5pbWFsICgid2lsZCIpICovCi0g ICAgICAgIGN0bHBbMF0gPSAxOyAgICAgICAgICAgICAgICAgICAgLyogRG9lcyBub3QgaW5jbHVk ZSAwICovCi0gICAgICAgIGZvciAoaSA9IDE7IGkgPCAzMjsgaSsrKQotICAgICAgICAgIGN0bHBb aV0gPSAwOwotICAgICAgICBmb3IgKGkgPSAxMjc7IGkgPCAxNjA7IGkrKykKLSAgICAgICAgICBj dGxwW2ldID0gMDsKLSAgICAgICAgY3RscFtteXN0Y2hdID0gY3RscFtteXN0Y2grMTI4XSA9IDE7 IC8qIEtlcm1pdCBzdGFydCBvZiBwYWNrZXQgKi8KLSAgICAgICAgaWYgKHNlb2wgIT0gMTMpCi0g ICAgICAgICAgY3RscFtzZW9sXSA9IGN0bHBbc2VvbCsxMjhdID0gMTsgLyogS2VybWl0IGVuZCAq LwotICAgICAgICBjdGxwWzEzXSA9IGN0bHBbMTQxXSA9IDE7ICAgICAgIC8qIEluIGNhc2Ugb2Yg VEVMTkVUIChOVlQgcnVsZXMpICovCi0gICAgICAgIGN0bHBbKHVuc2lnbmVkKTI1NV0gPSAxOyAg ICAgICAgLyogRGl0dG8gKi8KLQotICAgICAgICAvKiBeRCwgXkosIF5NLCBvciBeVSBmb2xsb3dl ZCBieSB0aWxkZSB0cmlnZ2VyIFJsb2dpbiBlc2NhcGUgKi8KLQotICAgICAgICBjdGxwWzRdICA9 IGN0bHBbNCsxMjhdICA9IDE7ICAgIC8qIEluIGNhc2Ugb2YgUkxPR0lOICovCi0gICAgICAgIGN0 bHBbMTBdID0gY3RscFsxMCsxMjhdID0gMTsgICAgLyogSW4gY2FzZSBvZiBSTE9HSU4gKi8KLSAg ICAgICAgY3RscFsyMV0gPSBjdGxwWzIxKzEyOF0gPSAxOyAgICAvKiBJbiBjYXNlIG9mIFJMT0dJ TiAqLwotCi0gICAgICAgIGlmIChmbG93ID09IEZMT19YT05YIHx8ICAgICAgICAgLyogWG9uL1hv ZmYgZm9yY2VzIHByZWZpeGluZyB0aGVzZSAqLwotICAgICAgICAgICAgcHJlZml4aW5nID09IFBY X0NBVSB8fCAgICAgIC8qIFNvIGRvZXMgQ0FVVElPVVMgKi8KLSAgICAgICAgICAgIG5ldHdvcmsp ICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrcyB0b28uLi4gKi8KLSAgICAgICAgICBjdGxw W1hPTl0gPSBjdGxwW1hPRkZdID0gY3RscFtYT04rMTI4XSA9IGN0bHBbWE9GRisxMjhdID0gMTsK LSAgICAgICAgaWYgKHByZWZpeGluZyA9PSBQWF9DQVUpIHsgICAgICAvKiBDYXV0aW91cyAtIGFk ZCBzb21lIG1vcmUgKi8KLSNpZmRlZiBVTlBSRUZJWFpFUk8KLSAgICAgICAgICAgIGN0bHBbMF0g PSAxOwotI2VuZGlmIC8qIFVOUFJFRklYWkVSTyAqLwotICAgICAgICAgICAgY3RscFszXSAgID0g Y3RscFsxNl0gID0gMTsgICAgICAgICAgICAgLyogXkMsIERMRSAqLwotICAgICAgICAgICAgY3Rs cFsxNF0gID0gY3RscFsxNV0gID0gMTsgICAgICAgICAgICAgLyogU08vU0kgKi8KLSAgICAgICAg ICAgIGN0bHBbMjRdICA9IGN0bHBbMjVdICA9IDE7ICAgICAgICAgICAgIC8qIFZNUyBtaWdodCBu ZWVkIHRoZXNlICovCi0gICAgICAgICAgICBjdGxwWzI2XSAgPSBjdGxwWzI2KzEyOF0gPSAxOyAg ICAgICAgICAvKiBVTklYIHN1c3BlbmQgKi8KLSAgICAgICAgICAgIGN0bHBbMjhdICA9IGN0bHBb MjldICA9IGN0bHBbMzBdICA9IDE7IC8qIEFzc29ydGVkIGVzYyBjaGFycyAqLwotICAgICAgICAg ICAgY3RscFsxMzFdID0gY3RscFsxNDFdID0gY3RscFsxNDRdID0gMTsgLyogYW5kIDgtYml0IHZl cnNpb25zICovCi0gICAgICAgICAgICBjdGxwWyh1bnNpZ25lZCkyNTVdID0gY3RscFsxNTZdID0g Y3RscFsxNTddID0gY3RscFsxNThdID0gMTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg ICB9Ci0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLX0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotVk9J RAotbWFrZXZlcigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgdmVyc2lv biBzdHJpbmcgZnJvbSBwaWVjZXMgKi8KLSAgICBpbnQgeCwgeTsKLSAgICBjaGFyICogczsKLSNp Zm5kZWYgT1MyCi0jaWZuZGVmIE1BQwotICAgIGNrX3NfeHZlciA9IGNrX3NfdmVyOyAgICAgICAg ICAgICAgIC8qIEZpbGwgaW4gQy1LZXJtaXQgdmVyc2lvbiBudW1iZXIgKi8KLSAgICBja19sX3h2 ZXIgPSBja19sX3ZlcjsgICAgICAgICAgICAgICAvKiBmb3IgVU5JWCwgVk1TLCBldGMuICovCi0j ZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgeCA9IHN0cmxlbihja19zX25h bWUpOwotICAgIHkgPSBzdHJsZW4oY2tfc194dmVyKTsKLSAgICBpZiAoeSArIHggKyAxIDwgQ0tW RVJMRU4pIHsKLSAgICAgICAgY2ttYWttc2codmVyc2lvLENLVkVSTEVOLGNrX3NfbmFtZSwiICIs Y2tfc194dmVyLE5VTEwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNrc3RybmNweSh2ZXJzaW8s IkMtS2VybWl0IixDS1ZFUkxFTik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgeCArPSB5 ICsgMTsKLSAgCi0gICAgcyA9ICIgT1BFTiBTT1VSQ0U6IjsJCS8qIEMtS2VybWl0IDkuMCBhbmQg bGF0ZXIgKi8KLSAgICB5ID0gc3RybGVuKHMpOwotICAgIGlmIChDS1ZFUkxFTiA8IHggKyB5ICsg MSkKLSAgICAgIHJldHVybjsKLSAgICBja3N0cm5jYXQodmVyc2lvLHMsQ0tWRVJMRU4pOwotCi0g ICAgeCArPSB5ICsgMTsKLSAgICBpZiAoKmNrX3Nfd2hvKSB7Ci0gICAgICAgIHkgPSBzdHJsZW4o Y2tfc193aG8pOwotICAgICAgICBpZiAoQ0tWRVJMRU4gPCB4ICsgeSArIDEpCi0gICAgICAgICAg cmV0dXJuOwotICAgICAgICBja3N0cm5jYXQodmVyc2lvLCItIixDS1ZFUkxFTik7Ci0gICAgICAg IGNrc3RybmNhdCh2ZXJzaW8sY2tfc193aG8sQ0tWRVJMRU4pOwotICAgIH0KLSAgICB4ICs9IHkg KyAxOwotICAgIHkgPSBzdHJsZW4oY2tfc190ZXN0KTsKLSAgICBpZiAoeSA+IDAgJiYgeSArIHgg KyAxIDwgQ0tWRVJMRU4pIHsKLSAgICAgICAgY2tzdHJuY2F0KHZlcnNpbywiICIsQ0tWRVJMRU4p OwotICAgICAgICBja3N0cm5jYXQodmVyc2lvLGNrX3NfdGVzdCxDS1ZFUkxFTik7Ci0gICAgICAg IHggKz0geSArIDE7Ci0gICAgICAgIHkgPSBzdHJsZW4oY2tfc190dmVyKTsKLSAgICAgICAgaWYg KHkgPiAwICYmIHkgKyB4ICsgMSA8IENLVkVSTEVOKSB7Ci0gICAgICAgICAgICBja3N0cm5jYXQo dmVyc2lvLCIuIixDS1ZFUkxFTik7Ci0gICAgICAgICAgICBja3N0cm5jYXQodmVyc2lvLGNrX3Nf dHZlcixDS1ZFUkxFTik7Ci0gICAgICAgICAgICB4ICs9IHkgKyAxOwotICAgICAgICB9Ci0gICAg fQotICAgIHkgPSBzdHJsZW4oY2tfc19kYXRlKTsKLSAgICBpZiAoeSA+IDAgJiYgeSArIHggKyAy IDwgQ0tWRVJMRU4pIHsKLSAgICAgICAgY2tzdHJuY2F0KHZlcnNpbywiLCAiLENLVkVSTEVOKTsK LSAgICAgICAgY2tzdHJuY2F0KHZlcnNpbyxja19zX2RhdGUsQ0tWRVJMRU4pOwotICAgIH0KLSAg ICB2ZXJudW0gPSBja19sX3ZlcjsKLSAgICB4dmVybnVtID0gY2tfbF94dmVyOwotICAgIGRlYnVn KEYxMTAsIktlcm1pdCB2ZXJzaW9uIix2ZXJzaW8sMCk7Ci19Ci0KLXVuaW9uIGNrX3Nob3J0IHNo b3J0Ynl0ZXM7ICAgICAgICAgICAgICAvKiBGb3IgZGV0ZXJtaW5pbmcgYnl0ZSBvcmRlciAqLwot aW50IGJ5dGVvcmRlciA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIDAgPSBCaWcgRW5kaWFu OyAxID0gTGl0dGxlIEVuZGlhbiAqLwotaW50IGJpZ2VuZGlhbiA9IDE7Ci0vKiBOT1RFOiBNVVNU IEJFIDAgb3IgMSAtIG5vdGhpbmcgZWxzZSAqLwotCi0jaWZuZGVmIE5PU1BMCi0jZGVmaW5lIFND UklQVExFTiAxMDI0MAotI2VuZGlmCS8qIE5PU1BMICovCi0KLSNpZmRlZiBORVRDT05OCi0jaWZu ZGVmIE5PQ01ETAotI2lmbmRlZiBOT1VSTAotVk9JRAotZG91cmwoKSB7Ci0gICAgaW50IHJjID0g MDsKLSAgICBjaGFyICogcG9ydCA9IE5VTEw7Ci0gICAgZXh0ZXJuIGludCB0dG5wcm90bzsKLSAg ICBleHRlcm4gc3RydWN0IHVybGRhdGEgZ191cmw7Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyog Tk9URTogZGVidWcoKSBkb2Vzbid0IHdvcmsgeWV0IC0gbXVzdCB1c2UgcHJpbnRmJ3MgKi8KLSAg ICBwcmludGYoIlVSTDogICVzXG4iLGdfdXJsLnNhdiA/IGdfdXJsLnNhdiA6ICIobm9uZSkiKTsK LSAgICBwcmludGYoIlR5cGU6ICVzXG4iLGdfdXJsLnN2YyA/IGdfdXJsLnN2YyA6ICIobm9uZSki KTsKLSAgICBwcmludGYoIlVzZXI6ICVzXG4iLGdfdXJsLnVzciA/IGdfdXJsLnVzciA6ICIobm9u ZSkiKTsKLSAgICBwcmludGYoIlBhc3M6ICVzXG4iLGdfdXJsLnBzdyA/IGdfdXJsLnBzdyA6ICIo bm9uZSkiKTsKLSAgICBwcmludGYoIkhvc3Q6ICVzXG4iLGdfdXJsLmhvcyA/IGdfdXJsLmhvcyA6 ICIobm9uZSkiKTsKLS8qICBwcmludGYoIlBvcnQ6ICVzXG4iLGdfdXJsLnBvciA/IGdfdXJsLnBv ciA6ICIobm9uZSkiKTsgKi8KLSAgICBwcmludGYoIlBhdGg6ICVzXG4iLGdfdXJsLnB0aCA/IGdf dXJsLnB0aCA6ICIobm9uZSkiKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICBpZiAoIWNr c3RyY21wKGdfdXJsLnN2YywiaWtzZCIsLTEsMCkgfHwKLSAgICAgICAgIWNrc3RyY21wKGdfdXJs LnN2Yywia2VybWl0IiwtMSwwKSkgewotICAgICAgICBleHRlcm4gY2hhciBwd2J1ZltdOwotICAg ICAgICBleHRlcm4gaW50IHB3ZmxnOwotI2lmZGVmIE9TMgotICAgICAgICBleHRlcm4gaW50IHB3 Y3J5cHQ7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICAgICAgaWYgKCFnX3VybC5ob3MpIHsKLSAg ICAgICAgICAgIHByaW50ZigiP0luY29tcGxldGUgSUtTRCBVUkxcbiIpOwotICAgICAgICAgICAg ZG9leGl0KEJBRF9FWElULDEpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZ191cmwudXNyKQot ICAgICAgICAgICAgbWFrZXN0cigmZ191cmwudXNyLCJhbm9ueW1vdXMiKTsKLSAgICAgICAgaWYg KCFnX3VybC5wc3cpIHsKLSAgICAgICAgICAgIGNoYXIgKiB0bXBidWYgPSBOVUxMOwotICAgICAg ICAgICAgaWYgKCEodG1wYnVmID0gKGNoYXIgKiltYWxsb2MoMTAyNCkpKQotICAgICAgICAgICAg ICAgIGZhdGFsKCJkb3VybDogb3V0IG9mIG1lbW9yeSIpOwotICAgICAgICAgICAgaWYgKCFja3N0 cmNtcChnX3VybC51c3IsImFub255bW91cyIsLTEsMCkpIHsKLSAgICAgICAgICAgICAgICBja21h a21zZyh0bXBidWYsMTAyNCx1aWRidWYsIkAiLG15aG9zdCxOVUxMKTsKLSAgICAgICAgICAgICAg ICBtYWtlc3RyKCZnX3VybC5wc3csdG1wYnVmKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgcmVhZHBhc3MoIiBQYXNzd29yZDoiLHRtcGJ1ZiwxMDI0KTsKLSAgICAgICAg ICAgICAgICBtYWtlc3RyKCZnX3VybC5wc3csdG1wYnVmKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGZyZWUodG1wYnVmKTsKLSAgICAgICAgfQotICAgICAgICBwb3J0ID0gImtlcm1pdCI7 Ci0gICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOwotICAgICAgICBuZXR0eXBlID0gTkVUX1RD UEI7Ci0gICAgICAgIG1kbXR5cCA9IC1uZXR0eXBlOwotICAgICAgICBsb2NhbCA9IC0xOwotICAg ICAgICBja3N0cm5jcHkodWlkYnVmLGdfdXJsLnVzcixVSURCVUZMRU4pOwotICAgICAgICBpZiAo Z191cmwucHN3KSB7Ci0gICAgICAgICAgICBja3N0cm5jcHkocHdidWYsZ191cmwucHN3LFBXQlVG TCk7Ci0gICAgICAgICAgICBwd2ZsZyA9IDE7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICBwd2Ny eXB0ID0gMDsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgfQotICAgICAgICBja21ha21zZyh0 dG5hbWUsCi0gICAgICAgICAgICAgICAgIFRUTkFNTEVOLAotICAgICAgICAgICAgICAgICBnX3Vy bC5ob3MsCi0gICAgICAgICAgICAgICAgICI6IiwKLSAgICAgICAgICAgICAgICAgZ191cmwucG9y ID8gZ191cmwucG9yIDogcG9ydCwKLSAgICAgICAgICAgICAgICAgTlVMTAotICAgICAgICAgICAg ICAgICApOwotICAgICAgICByYyA9IHR0b3Blbih0dG5hbWUsJmxvY2FsLG1kbXR5cCwwKTsKLSAg ICAgICAgaWYgKHJjID4gLTEpIHsKLSAgICAgICAgICAgIG5ldHdvcmsgPSAxOwotICAgICAgICAg ICAgZXhpdG9uY2xvc2UgPSAxOwotI2lmZGVmIENLTE9HRElBTAotICAgICAgICAgICAgZG9sb2du ZXQoKTsKLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIHByaW50ZigiP0Nvbm5lY3Rpb24gZmFpbGVkOiAlc1xuIixnX3VybC5zYXYpOwotICAgICAg ICAgICAgZG9leGl0KEJBRF9FWElULDEpOwotICAgICAgICB9Ci0gICAgICAgIC8qIEFsc28gbmVl ZCB0byBjaGVjayBoZXJlIGZvciBzZWN1cmUgYXV0aGVudGljYXRpb24gYWxyZWFkeSBkb25lICov Ci0KLSNpZmRlZiBOT1NQTAotICAgICAgICBjZmxnID0gMTsKLSNlbHNlCi0JewotICAgICAgICAg ICAgY2hhciAqIHNjcmlwdCA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAoIShzY3JpcHQgPSAoY2hh ciAqKW1hbGxvYyhTQ1JJUFRMRU4pKSkKLSAgICAgICAgICAgICAgZmF0YWwoImRvdXJsOiBvdXQg b2YgbWVtb3J5Iik7Ci0gICAgICAgICAgICBpZiAoIWdfdXJsLnB0aCkgeyAgICAgICAgICAgLyog V3JpdGUgdGhlIGFwcHJvcHJpYXRlIHNjcmlwdCAqLwotCQljZmxnID0gMTsKLSAgICAgICAgICAg ICAgICBja21ha3htc2coc2NyaXB0LFNDUklQVExFTiwKLQkJCSAgImlmIG5vdCBlcSB7XFx2KGF1 dGhzdGF0ZSl9IHt1c2VyfSAiLAotCQkJICAiaWYgbm90IGVxIHtcXHYoYXV0aHN0YXRlKX0ge3Zh bGlkfSB7ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdGUgbG9naW4gIiwgLyog Tm8gcGF0aCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBnX3VybC51c3IsICAgICAgIC8q IEp1c3QgbG9nIGluIGFuZCBDT05ORUNUICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIg IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZ191cmwucHN3LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAiLCBpZiBmYWlsIGV4aXQgMSB7SUtTRCBsb2dpbiBmYWlsZWR9IH0iLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAiLCBjb25uZWN0IiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0JCS8qIHByaW50ZigiQ0xDTURTIDE6ICVzXG4i LHNjcmlwdCk7ICovCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8qIGRv ZXMgdGhlIHBhdGggc3BlY2lmeSBhIGZpbGUgb3IgYSBkaXJlY3Rvcnk/ICovCi0gICAgICAgICAg ICAgICAgaW50IGxlbiA9IHN0cmxlbihnX3VybC5wdGgpOwotICAgICAgICAgICAgICAgIGlmIChJ U0RJUlNFUChnX3VybC5wdGhbbGVuLTFdKSkgewotCQkgICAgY2ttYWt4bXNnKHNjcmlwdCxTQ1JJ UFRMRU4sIC8qIERpcmVjdG9yeSBuYW1lIGdpdmVuICovCi0JCQkgICAgICAiaWYgbm90IGVxIHtc XHYoYXV0aHN0YXRlKX0ge3VzZXJ9IFwKLWlmIG5vdCBlcSB7XFx2KGF1dGhzdGF0ZSl9IHt2YWxp ZH0geyByZW1vdGUgbG9naW4gIiwKLQkJCSAgICAgIGdfdXJsLnVzciwKLQkJCSAgICAgICIgIiwK LQkJCSAgICAgIGdfdXJsLnBzdywKLQkJCSAgICAgICIsIGlmIGZhaWwgZXhpdCAxIHtJS1NEIGxv Z2luIGZhaWxlZH0gfSIsCi0JCQkgICAgICAiLCBzZXQgbWFjcm8gZXJyb3Igb24iLAotCQkJICAg ICAgIiwgc2V0IHhmZXIgZGlzcGwgYnJpZWYiLAotCQkJICAgICAgIiwgc2V0IHhmZXIgYmVsbCBv ZmYiLAotCQkJICAgICAgIiwgcmVtb3RlIGNkICIsCi0JCQkgICAgICBnX3VybC5wdGgsCi0JCQkg ICAgICAiLCBsaW5lb3V0IGRpcmVjdG9yeSIsCi0JCQkgICAgICAiLCBjb25uZWN0IgotCQkJICAg ICAgKTsKLQkJICAgIC8qIHByaW50ZigiQ0xDTURTIDI6ICVzXG4iLHNjcmlwdCk7ICovCi0JCX0g ZWxzZSB7Ci0JCSAgICBja21ha3htc2coc2NyaXB0LFNDUklQVExFTiwgLyogUGF0aCBnaXZlbiwg dHJ5IHRvIEdFVCAqLwotCQkJICAgICAgImlmIG5vdCBlcSB7XFx2KGF1dGhzdGF0ZSl9IHt1c2Vy fSBcCi1pZiBub3QgZXEge1xcdihhdXRoc3RhdGUpfSB7dmFsaWR9IHsgcmVtb3RlIGxvZ2luICIs Ci0JCQkgICAgICBnX3VybC51c3IsCi0JCQkgICAgICAiICIsCi0JCQkgICAgICBnX3VybC5wc3cs Ci0JCQkgICAgICAiLCBpZiBmYWlsIGV4aXQgMSB7SUtTRCBsb2dpbiBmYWlsZWR9IH0iLAotCQkJ ICAgICAgIiwgc2V0IHhmZXIgZGlzcGwgYnJpZWYiLAotCQkJICAgICAgIiwgc2V0IHhmZXIgYmVs bCBvZmYiLAotCQkJICAgICAgIiwgZ2V0ICIsCi0JCQkgICAgICBnX3VybC5wdGgsCi0JCQkgICAg ICAiLCAucmMgOj0gXFx2KHN0YXR1cykiLAotCQkJICAgICAgIiwgaWYgb3BlbiBjb25uZWN0aW9u IGJ5ZSIsCi0JCQkgICAgICAiLCBleGl0IFxcbShyYykiCi0JCQkgICAgICApOwotCQkgICAgLyog cHJpbnRmKCJDTENNRFMgMjogJXNcbiIsc2NyaXB0KTsgKi8KLQkJfQotICAgICAgICAgICAgfQot ICAgICAgICAgICAgY2xjbWRzID0gc2NyaXB0OwkJLyogTWFrZSB0aGlzIG91ciAtQyBjbWRsaW5l IG1hY3JvICovCi0JICAgIC8qIHByaW50ZigiSEFWRVVSTD0lZFxuIixoYXZldXJsKTsgKi8KLSAg ICAgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGNr c3RyY21wKGdfdXJsLnN2YywidGVsbmV0IiwtMSwwKSAmJgotI2lmZGVmIFNTSEJVSUxUSU4KLSAg ICAgICAgICAgIGNrc3RyY21wKGdfdXJsLnN2Yywic3NoIiwtMSwwKSAmJgotI2VuZGlmIC8qIFNT SEJVSUxUSU4gKi8KLSAgICAgICAgICAgIGNrc3RyY21wKGdfdXJsLnN2YywiZnRwIiwtMSwwKSkg ewotICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksICVzIFVSTHMgbm90IHN1cHBvcnRlZFxuIiwK LSAgICAgICAgICAgICAgICAgICBnX3VybC5zdmMgPyBnX3VybC5zdmMgOiAiIik7Ci0gICAgICAg ICAgICBkb2V4aXQoQkFEX0VYSVQsMSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0jZW5kaWYgLyog Tk9DTURMICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2VuZGlmIC8qIE5PVVJMICovCi0KLS8q Ci0gIG1haW4oKS4uLgotCi0gIElmIHlvdSBnZXQgY29tcGxhaW50cyBhYm91dCAibWFpbjogcmV0 dXJuIHR5cGUgaXMgbm90IGJsYWgiLAotICBkZWZpbmUgTUFJTlRZUEUgb24gdGhlIENDIGNvbW1h bmQgbGluZSwgZS5nLiAiQ0ZMQUdTPS1ETUFJTlRZUEU9YmxhaCIKLSAgKHdoZXJlICJibGFoIiBp cyBpbnQsIGxvbmcsIG9yIHdoYXRldmVyKS4KLQotICBJZiB0aGUgY29tcGxhaW50IGlzICJBdHRl bXB0IHRvIHJldHVybiBhIHZhbHVlIGZyb20gYSBmdW5jdGlvbiBvZiB0eXBlIHZvaWQiCi0gIHRo ZW4gYWRkIC1ETUFJTklTVk9JRC4KLSovCi0jaWZuZGVmIE1BSU5UWVBFCi0jaWZuZGVmIE1BSU5J U1ZPSUQKLSNkZWZpbmUgTUFJTlRZUEUgaW50Ci0jZW5kaWYgLyogTUFJTklTVk9JRCAqLwotI2Vu ZGlmIC8qIE1BSU5UWVBFICovCi0KLSNpZmRlZiBNQUlOSVNWT0lECi0jaWZuZGVmIE1BSU5UWVBF Ci0jZGVmaW5lIE1BSU5UWVBFIHZvaWQKLSNlbmRpZiAvKiBNQUlOVFlQRSAqLwotI2VuZGlmIC8q IE1BSU5JU1ZPSUQgKi8KLQotI2lmZGVmIGFlZ2lzCi0vKiBPbiB0aGUgQXBvbGxvLCBpbnRlcmNl cHQgbWFpbiB0byBpbnNlcnQgYSBjbGVhbnVwIGhhbmRsZXIgKi8KLWludAotY2tjbWFpKGFyZ2Ms YXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OwotI2Vsc2UKLSNpZmRlZiBNQUMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBNYWNpbnRvc2ggKi8KLWludAotbWFpbiAodm9pZCkKLSNl bHNlCi0jaWZkZWYgX19HTlVDX18gICAgICAgICAgICAgICAgICAgICAgICAgLyogR0NDIGNvbXBp bGVyICovCi1pbnQKLW1haW4oYXJnYyxhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7Ci0jZWxz ZQotI2lmZGVmIF9fREVDQyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQyBBbHBoYSB3 aXRoIERFQyBDIGNvbXBpbGVyICovCi0jaWZkZWYgX19BTFBIQQotaW50Ci1tYWluKGFyZ2MsYXJn dikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OwotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERFQyBDIGNvbXBpbGVyLCBub3QgQWxwaGEgKi8KLSNkZWZpbmUgTUFJTklT Vk9JRAotVk9JRAotbWFpbihhcmdjLGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsKLSNlbmRp ZiAgLyogX19BTFBIQSAqLwotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTdHJhdHVzIFZPUyAqLwotaW50Ci1tYWluKGFyZ2MsYXJndikgaW50IGFyZ2M7 IGNoYXIgKiphcmd2OwotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEstOTUgKi8KLSNpZmRlZiBPUzIKLSNpZmRlZiBLVUkKLSNkZWZpbmUgTUFJTklTVk9JRAotdm9p ZAotTWFpbiggaW50IGFyZ2MsIGNoYXIgKiogYXJndiApCi0jZWxzZSAvKiBLVUkgKi8KLSNkZWZp bmUgTUFJTklTVk9JRAotVk9JRAotbWFpbihhcmdjLGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJn djsKLSNlbmRpZiAvKiBLVUkgKi8KLSNlbHNlICAvKiBOb3QgSzk1ICovCi1NQUlOVFlQRSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsIG90aGVycy4uLiAqLwotbWFpbihhcmdj LGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAv KiBTVFJBVFVTICovCi0jZW5kaWYgLyogX19ERUNDICovCi0jZW5kaWYgLyogX19HTlVDX18gKi8K LSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBhZWdpcyAqLwotCi0vKiBtYWluICovIHsKLQot ICAgIGNoYXIgKnA7Ci0KLSNpZm5kZWYgTk9TRVRLRVkKLSAgICBpbnQgaTsKLSNlbmRpZiAvKiBO T1NFVEtFWSAqLwotCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICBzaG9ydCAqcGZoYSA9IDAxNjAw MDAwMDAzNjsgICAgICAgICAvKiBHZXQgYXJvdW5kIExBTkdfUlQgcHJvYmxlbSAqLwotICAgICpw ZmhhID0gKHNob3J0KSAwOyAgICAgICAgICAgICAgICAgIC8qIE5vIHVzZXIgcHJvdGVjdGlvbiBm YXVsdCBoYW5kbGVyICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotICAgIGludCB1bmJ1 ZiA9IDA7CQkJLyogbm9uemVybyBmb3IgdW5idWZmZXJlZCBzdGRvdXQgKi8KLQotLyogc2V0YnVm IGhhcyB0byBiZSBjYWxsZWQgb24gdGhlIGZpbGUgZGVzY3JpcHRvciBiZWZvcmUgaXQgaXMgdXNl ZCAqLwotCi0jaWZkZWYgVU5JWAotI2lmZGVmIE5PTk9TRVRCVUYJCQkvKiBVbmJ1ZmZlcmVkIGNv bnNvbGUgaS9vICovCi0gICAgdW5idWYrKzsJCQkJLyogYXMgYSBjb21waWxlLXRpbWUgb3B0aW9u ICovCi0jZW5kaWYJLyogTk9OT1NFVEJVRiAqLwotICAgIGlmICghdW5idWYpIHsJCQkvKiBPciBh cyBhIGNvbW1hbmQtbGluZSBzZWxlY3Rpb24gKi8KLQlpbnQgaSwgbjsJCQkvKiBXZSBoYXZlIHRv IHByZS1wcmUtc2NhbiBmb3IgKi8KLQljaGFyICogczsJCQkvKiB0aGlzIG9uZS4gKi8KLQlmb3Ig KGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7Ci0JICAgIHMgPSBhcmd2W2ldOwotCSAgICBpZiAoIXMp IG4gPSAwOyBlbHNlIG4gPSAoaW50KXN0cmxlbihzKTsKLQkgICAgaWYgKG4gPiA0KSB7Ci0JCWlm ICghY2tzdHJjbXAoIi0tdW5idWZmZXJlZCIscyxuLDApKSB7Ci0JCSAgICB1bmJ1ZisrOwotCQkg ICAgYnJlYWs7Ci0JCX0KLQkgICAgfQotCX0KLSAgICB9Ci0gICAgaWYgKHVuYnVmKQotICAgICAg c2V0YnVmKHN0ZG91dCxOVUxMKTsKLSNlbmRpZgkvKiBVTklYICovCi0KLS8qIERvIHNvbWUgaW5p dGlhbGl6YXRpb24gKi8KLQotI2lmZGVmIFZNUwotI2lmZGVmIF9fREVDQwotICAgIC8qIEdldCBz b21lIFJNUyBkZWZhdWx0IHNldHRpbmdzLiAqLwotICAgIGdldF9ybXNfZGVmYXVsdHMoKTsKLSNl bmRpZiAvKiBkZWYgX19ERUNDICovCi0jZW5kaWYgLyogZGVmIFZNUyAqLwotCi0jaWZuZGVmIE1B QwotICAgIHhhcmdjID0geGFyZ3MgPSBhcmdjOyAgICAgICAgICAgICAgIC8qIE1ha2UgZ2xvYmFs IGNvcGllcyBvZiBhcmdjICovCi0gICAgeGFyZ3YgPSBhcmd2OyAgICAgICAgICAgICAgICAgICAg ICAgLyogLi4uYW5kIGFyZ3YuICovCi0gICAgeGFyZzAgPSBhcmd2WzBdOwotI2lmZGVmIE5UCi0g ICAgc2V0T1NWZXIoKTsKLSNlbmRpZiAvKiBOVCAqLwotICAgIHpzdHJpcChhcmd2WzBdLCZwKTsg ICAgICAgICAgICAgICAgIC8qIEdldCBuYW1lIHdlIHdlcmUgaW52b2tlZCB3aXRoICovCi0gICAg bWFrZXN0cigmbXluYW1lLHApOwotICAgIGlmICghY2tzdHJjbXAobXluYW1lLCJ0ZWxuZXQiLC0x LDApKSAgICAgICBob3djYWxsZWQgPSBJX0FNX1RFTE5FVDsKLSNpZmRlZiBDS19LRVJCRVJPUwot ICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsImt0ZWxuZXQiLC0xLDApKSBob3djYWxsZWQg PSBJX0FNX1RFTE5FVDsKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotICAgIGVsc2UgaWYgKCFj a3N0cmNtcChteW5hbWUsInJsb2dpbiIsLTEsMCkpICBob3djYWxsZWQgPSBJX0FNX1JMT0dJTjsK LSAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJpa3NkIiwtMSwwKSkgICAgaG93Y2FsbGVk ID0gSV9BTV9JS1NEOwotI2lmZGVmIE5FV0ZUUAotICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5h bWUsImZ0cCIsLTEsMCkpICAgICBob3djYWxsZWQgPSBJX0FNX0ZUUDsKLSNlbmRpZiAvKiBORVdG VFAgKi8KLSNpZm5kZWYgTk9IVFRQCi0gICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwiaHR0 cCIsLTEsMCkpICAgIGhvd2NhbGxlZCA9IElfQU1fSFRUUDsKLSNlbmRpZiAvKiBOT0hUVFAgKi8K LSNpZmRlZiBPUzIKLSAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJ0ZWxuZXQuZXhlIiwt MSwwKSkgIGhvd2NhbGxlZCA9IElfQU1fVEVMTkVUOwotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICBl bHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJzc2giLC0xLDApKSAgaG93Y2FsbGVkID0gSV9BTV9T U0g7Ci0gICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwic3NoLmV4ZSIsLTEsMCkpICBob3dj YWxsZWQgPSBJX0FNX1NTSDsKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZkZWYgQ0tfS0VS QkVST1MKLSAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJrdGVsbmV0LmV4ZSIsLTEsMCkp IGhvd2NhbGxlZCA9IElfQU1fVEVMTkVUOwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0gICAg ZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwicmxvZ2luLmV4ZSIsLTEsMCkpICBob3djYWxsZWQg PSBJX0FNX1JMT0dJTjsKLSNpZmRlZiBOVAotICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUs Imlrc2RudCIsLTEsMCkpICAgIGhvd2NhbGxlZCA9IElfQU1fSUtTRDsKLSAgICBlbHNlIGlmICgh Y2tzdHJjbXAobXluYW1lLCJpa3NkbnQuZXhlIiwtMSwwKSkgICAgaG93Y2FsbGVkID0gSV9BTV9J S1NEOwotI2VuZGlmIC8qIE5UICovCi0jaWZkZWYgTkVXRlRQCi0gICAgZWxzZSBpZiAoIWNrc3Ry Y21wKG15bmFtZSwiZnRwLmV4ZSIsLTEsMCkpICAgICBob3djYWxsZWQgPSBJX0FNX0ZUUDsKLSNl bmRpZiAvKiBORVdGVFAgKi8KLSNpZm5kZWYgTk9IVFRQCi0gICAgZWxzZSBpZiAoIWNrc3RyY21w KG15bmFtZSwiaHR0cC5leGUiLC0xLDApKSAgICBob3djYWxsZWQgPSBJX0FNX0hUVFA7Ci0jZW5k aWYgLyogTk9IVFRQICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgZWxzZSBpZiAoIWNrc3RyY21w KG15bmFtZSwia2VybWl0LXNzaHN1YiIsLTEsMCkpIGhvd2NhbGxlZCA9IElfQU1fU1NIU1VCOwot Ci0jaWZuZGVmIE5PSUNQCi0gICAgY21kaW5pKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTXVzdCBjb21lIGJlZm9yZSBwcmVzY2FuICovCi0gICAgZGVidWcoRjEwMCwibWFpbiBjbWRp bmkoKSBkb25lIiwiIiwwKTsKLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgIHByZXNjYW4oMCk7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFByZS1DaGVjayBmb3IgZGVidWdnaW5nLCBldGMgKi8K LSNlbmRpZiAvKiBNQUMgKi8KLSAgICBkZWJ1ZyhGMTAxLCJNQUlOIGZlb2wiLCIiLGZlb2wpOwot ICAgIG1ha2V2ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFB1dCB0b2dldGhlciB2 ZXJzaW9uIHN0cmluZ3MgKi8KLSNpZm5kZWYgTk9TRVRLRVkgICAgICAgICAgICAgICAgICAgICAg ICAvKiBBbGxvY2F0ZSAmIGluaXRpYWxpemUgdGhlIGtleW1hcCAqLwotICAgIC8qIFRoaXMgY29k ZSBoYXMgYmVlbiBtb3ZlZCB0byBiZWZvcmUgc3lzaW5pdCgpIGZvciBLOTVHICovCi0gICAgaWYg KCEoa2V5bWFwID0gKEtFWSAqKSBtYWxsb2Moc2l6ZW9mKEtFWSkqS01TSVpFKSkpCi0gICAgICBm YXRhbCgibWFpbjogbm8gbWVtb3J5IGZvciBrZXltYXAiKTsKLSAgICBpZiAoIShtYWNyb3RhYiA9 IChNQUNSTyAqKSBtYWxsb2Moc2l6ZW9mKE1BQ1JPKSpLTVNJWkUpKSkKLSAgICAgIGZhdGFsKCJt YWluOiBubyBtZW1vcnkgZm9yIG1hY3JvdGFiIik7Ci0gICAgZm9yIChpID0gMDsgaSA8IEtNU0la RTsgaSsrKSB7Ci0gICAgICAga2V5bWFwW2ldID0gKEtFWSkgaTsKLSAgICAgICBtYWNyb3RhYltp XSA9IE5VTEw7Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VUS0VZICovCi0KLSAgICBzaG9ydGJ5dGVz Lnhfc2hvcnQgPSAweEFCQ0Q7ICAgICAgICAvKiBHZXQgRW5kaWFubmVzcyAqLwotICAgIGlmIChz aG9ydGJ5dGVzLnhfY2hhclswXSA9PSAweENEKSB7IC8qIDAgPSBCaWcgRW5kaWFuICovCi0gICAg ICAgIGJ5dGVvcmRlciA9IDE7ICAgICAgICAgICAgICAgICAgLyogMSA9IExpdHRsZSBFbmRpYW4g Ki8KLSAgICAgICAgYmlnZW5kaWFuID0gMDsgICAgICAgICAgICAgICAgICAvKiAoZm9yIGNsYXJp dHkgaW4gcHJvZ3JhbW1pbmcpICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgYnl0ZW9yZGVyID0g MDsgICAgICAgICAgICAgICAgICAvKiBCaWcgRW5kaWFuICovCi0gICAgICAgIGJpZ2VuZGlhbiA9 IDE7Ci0gICAgfQotICAgIGlmIChzaXplb2YoQ0tfT0ZGX1QpID09IDgpCQkvKiBMYXJnZSBmaWxl cyBhbmQgaW50cz8gKi8KLSAgICAgIGhhdmVsZnMgPSAxOwotCi0gICAgaWYgKHN5c2luaXQoKSA8 IDApICAgICAgICAgICAgICAgICAgLyogU3lzdGVtLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbi4g Ki8KLSAgICAgIGZhdGFsKCJDYW4ndCBpbml0aWFsaXplISIpOwotICAgIGVsc2UKLSAgICAgIGlu aXRmbGcgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB3ZSBkaWQuICovCi0g ICAgZGVidWcoRjExMSwiY2tjbWFpIG15bmFtZSIsbXluYW1lLGhvd2NhbGxlZCk7Ci0KLSNpZmRl ZiBVTklYCi0gICAgZ2V0ZXhlZGlyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tcHV0 ZSBleGVkaXIgdmFyaWFibGUgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZmRlZiBDS1NZU0xP RwotI2lmZGVmIFNZU0xPR0xFVkVMCi0vKgotICBJZiBidWlsdCB3aXRoIC1EU1lTTE9HTEVWRUwg b24gY2MgY29tbWFuZCBsaW5lLCB0aGlzIG1lYW5zIHdlIGFsd2F5cwotICBkbyBzeXNsb2dnaW5n IGF0IHRoZSBpbmRpY2F0ZWQgbGV2ZWwuCi0qLwotICAgIHpzeXNsb2coKTsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE9wZW4gc3lzbG9nICovCi0jZWxzZSAvKiBTWVNMT0dMRVZFTCAqLwot I2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICB6c3lzbG9nKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogT3BlbiBzeXNsb2cgKi8KLSNlbmRpZiAvKiBJS1NEICovCi0jZW5k aWYgLyogU1lTTE9HTEVWRUwgKi8KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCi0jaWZkZWYgQ0tf S0VSQkVST1MKLSAgICBpbmlfa2VyYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0 aWFsaXplIEtlcmJlcm9zIGRhdGEgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2lmZGVm IENLX1NTTAotICAgIHNzbF9vbmNlX2luaXQoKTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRl ZiBUTkNPREUKLSAgICB0bl9zZXRfbW9kZXMoKTsgICAgICAgICAgICAgICAgICAgICAvKiBJbml0 IFRlbG5ldCBPcHRpb24gdGFibGVzICovCi0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNpZmRlZiBD S19UVEdXU0laICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHNjcmVlbiBkaW1l bnNpb25zICovCi0jaWZkZWYgT1MyCi0gICAgdHRnY3dzeigpOwotI2Vsc2UgLyogT1MyICovCi0g ICAgaWYgKHR0Z3dzaXooKSA+IDApIHsKLSAgICAgICAgaWYgKHR0X3Jvd3MgPiAwICYmIHR0X2Nv bHMgPiAwKSB7Ci0gICAgICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3M7Ci0gICAgICAgICAgICBj bWRfY29scyA9IHR0X2NvbHM7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0j ZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotCi0jaWZuZGVmIE9TMgotI2lmZGVmIFRDUFNPQ0tFVAot I2lmZGVmIENLX1NPQ0tTCi0gICAgU09DS1Npbml0KGFyZ3ZbMF0pOyAgICAgICAgICAgICAgICAg LyogSW50ZXJuZXQgcmVsYXkgcGFja2FnZS4uLiAqLwotI2VuZGlmIC8qIENLX1NPQ0tTICovCi0j ZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpbml0Zmxvdygp OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGZsb3ctY29udHJvbCB0YWJs ZSAqLwotCi0jaWZuZGVmIE5PSUNQCi0jaWZkZWYgQ0tGTE9BVAotICAgIGluaXRmbG9hdCgpOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERlZHVjZSBmbG9hdGluZy1wb2ludCBwcmVjaXNpb24g Ki8KLSNlbmRpZiAvKiBDS0ZMT0FUICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQotI2lmbmRlZiBO T1hGRVIKLSAgICBpbml0eGxpc3QoKTsJCQkvKiBJbml0IGV4Y2VwdGlvbiBsaXN0cyAqLwotCi0j aWZkZWYgQ0tfWFlaICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBwcm90 b2NvbHMuLi4gICovCi0KLSNpZmRlZiBYWVpfSU5URVJOQUwgLyogWFlaTU9ERU0gYXJlIGludGVy bmFsIC4uLiAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgIC8qIENhbid0IGRvIHRoaXMgZm9yIFhN T0RFTSBiZWNhdXNlIGlmIGZpbGVuYW1lIGNvbnRhaW5zIGEgIkMiIGV0Yy4uLiAqLwotICAgIGlu aXRwcm90byhQUk9UT19YLCAicnggJXMiLCJyeCAlcyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwpOwotICAgIGluaXRwcm90byhQUk9UT19YQywicmMgJXMiLCJyYyAlcyIsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotI2Vsc2UgLyogQ09NTUVOVCAqLwotICAgIGluaXRwcm90 byhQUk9UT19YLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAg ICBpbml0cHJvdG8oUFJPVE9fWEMsTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGluaXRwcm90byhQUk9UT19ZLCAicmIi LCJyYiIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIGluaXRwcm90byhQUk9U T19HLCAicmIiLCJyYiIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIGluaXRw cm90byhQUk9UT19aLCAicnoiLCJyeiIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwot ICAgaW5pdHByb3RvKFBST1RPX0ssImtlcm1pdCAtaXIiLCJrZXJtaXQgLXIiLCJrZXJtaXQgLXgi LE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIC8qIEtlcm1pdCBNdXN0IGJlIGxhc3QgKi8KLQot I2Vsc2UgLyogWFlaTU9ERU0gYXJlIGV4dGVybmFsIHByb3RvY29scyAuLi4gKi8KLQotIC8qICAg ICAgICAgICAgICAgICAgczEgICAgICBzMiAgICAgczMgICAgczQgICAgICBzNSAgICAgICAgIHM2 ICAgICAgczcgICAgICovCi0gaW5pdHByb3RvKFBST1RPX1gsICJyeCAlcyIsInJ4ICVzIixOVUxM LCJzeCAlcyIsInN4IC1hICVzIiwicnggJXMiLCAicnggJXMiKTsKLSBpbml0cHJvdG8oUFJPVE9f WEMsInJjICVzIiwicmMgJXMiLE5VTEwsInN4ICVzIiwic3ggLWEgJXMiLCJyYyAlcyIsICJyYyAl cyIpOwotIGluaXRwcm90byhQUk9UT19ZLCAicmIiLCAgICJyYiIsICAgTlVMTCwic2IgJXMiLCJz YiAtYSAlcyIsInJiIiwgICAgInJiIiAgICk7Ci0gaW5pdHByb3RvKFBST1RPX0csICJyYiIsICAg InJiIiwgICBOVUxMLCJzYiAlcyIsInNiIC1hICVzIiwicmIiLCAgICAicmIiICAgKTsKLSBpbml0 cHJvdG8oUFJPVE9fWiwgInJ6IiwgICAicnoiLCAgIE5VTEwsInN6ICVzIiwic3ogLWEgJXMiLCJy eiIsICAgICJyeiIgICApOwotIGluaXRwcm90byhQUk9UT19LLCAia2VybWl0IC1pciIsImtlcm1p dCAtciIsImtlcm1pdCAteCIsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gLyogS2VybWl0IG11c3Qg YmUgbGFzdCAqLwotCi0jZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCi0KLSNlbHNlICAvKiBObyBY WVpNT0RFTSBzdXBwb3J0ICovCi0KLSAgIGluaXRwcm90byhQUk9UT19LLCJrZXJtaXQgLWlyIiwi a2VybWl0IC1yIiwia2VybWl0IC14IixOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLQotI2VuZGlmIC8q IENLX1hZWiAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0gICAgY29ubm9pKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ29uc29sZSBpbnRlcnJ1cHRzIG9mZiAqLwotCi0jaWZuZGVm IE5PWEZFUgotI2lmZGVmIE9TMgotICAgIC8qIEluaXRpYWxpemUgS2VybWl0IGFuZCBabW9kZW0g QXV0by1Eb3dubG9hZCBTdHJpbmdzICovCi0gICAgYWRsX2tzdHIgPSBzdHJkdXAoIktFUk1JVCBS RUFEWSBUTyBTRU5ELi4uIik7Ci0gICAgYWRsX3pzdHIgPSBzdHJkdXAoInJ6XHIiKTsKLSNlbmRp ZiAvKiBPUzIgKi8KLQotI2lmZGVmIFBBVFRFUk5TCi0gICAgaW5pdHBhdCgpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBmaWxlbmFtZSBwYXR0ZXJucyAqLwotI2VuZGlm IC8qIFBBVFRFUk5TICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9DU0VUUwot ICAgIGluaXRjc2V0cygpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgY2hh cmFjdGVyIHNldHMgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZm5kZWYgTk9JQ1AKLSNp ZmRlZiBERkNETVNHCi0gICAgbWFrZXN0cigmY2Rtc2dzdHIsREZDRE1TRyk7Ci0gICAgbWFrZWxp c3QoY2Rtc2dzdHIsY2Rtc2dmaWxlLDgpOyAgICAgLyogSW5pdGlhbGl6ZSBDRCBtZXNzYWdlIGZp bGVuYW1lcyAqLwotI2VuZGlmIC8qIERGQ0RNU0cgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0g ICAgc3N0YXRlID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gZGVmYXVsdCBzdGFy dCBzdGF0ZS4gKi8KLSNpZmRlZiBEWU5BTUlDCi0gICAgaWYgKGdldGlvYnMoKSA8IDApCi0gICAg ICBmYXRhbCgiQ2FuJ3QgYWxsb2NhdGUgaS9vIGJ1ZmZlcnMhIik7Ci0jZW5kaWYgLyogRFlOQU1J QyAqLwotCi0jaWZuZGVmIE5PU1BMCi0jaWZuZGVmIE5PUkFORE9NCi0gICAgewotICAgICAgICBj aGFyIHN0YWNrZGF0YVsyNTZdOwotICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IDEyMzQsIG47Ci0g ICAgICAgIC8qIHRyeSB0byBtYWtlIGEgcmFuZG9tIHVuc2lnbmVkIGludCB0byBmZWVkIHNyYW5k KCkgKi8KLSNpZm5kZWYgVk1TCi0JLyogdGltZS5oIGFuZCBNdWx0aU5ldCBkbyBub3QgZ2V0IGFs b25nICovCi0gICAgICAgIGMgPSB0aW1lKE5VTEwpOwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAg ICBjICo9IGdldHBpZCgpOwotCS8qIFJlZmVyZW5jZWQgYmVmb3JlIHNldC4uLiBERUxJQkVSQVRF TFkgKi8KLSAgICAgICAgZm9yIChuID0gMDsgbiA8IHNpemVvZihzdGFja2RhdGEpOyBuKyspIC8q IElHTk9SRSBXQVJOSU5HICovCi0JICBjICs9IHN0YWNrZGF0YVtuXTsJCS8qIERFTElCRVJBVEVM WSBVU0VEIEJFRk9SRSBTRVQgKi8KLSAgICAgICAgc3JhbmQoKHVuc2lnbmVkIGludCljKTsKLSAg ICB9Ci0jZW5kaWYgLyogTk9SQU5ET00gKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgY2to b3N0KG15aG9zdCxNWUhPU1RMKTsgICAgICAgICAgICAgLyogTmFtZSBvZiBsb2NhbCBob3N0ICov Ci0gICAgZGVidWcoRjExMCwibWFpbiBja2hvc3QiLG15aG9zdCwwKTsKLSNpZmRlZiBJS1NECi0g ICAgaWYgKCFpbnNlcnZlcikgewotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgY2tzdHJuY3B5 KHR0bmFtZSxkZnR0eSxUVE5BTUxFTik7IC8qIFNldCB1cCBkZWZhdWx0IHR0eSBuYW1lLiAqLwot ICAgICAgICBsb2NhbCA9IG5vbG9jYWwgPyAwIDogZGZsb2M7ICAgIC8qIEFuZCB3aGV0aGVyIGl0 J3MgbG9jYWwgb3IgcmVtb3RlLiAqLwotICAgICAgICBwYXJpdHkgPSBkZnBydHk7ICAgICAgICAg ICAgICAgIC8qIFNldCBpbml0aWFsIHBhcml0eSwgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgICAg IG15aW5kZXggPSBnZXRzeXNpeChja3N5c2lkKTsgICAgLyogU3lzdGVtIGluZGV4ICovCi0jZW5k aWYgLyogTk9YRkVSICovCi0gICAgICAgIGlmIChsb2NhbCkgaWYgKHR0b3Blbih0dG5hbWUsJmxv Y2FsLDAsMCkgPCAwKSB7Ci0jaWZuZGVmIE9TMgotICAgICAgICAgICAgY29ub2woIkNhbid0IG9w ZW4gZGV2aWNlOiAiKTsKLSAgICAgICAgICAgIGNvbm9sbCh0dG5hbWUpOwotI2VuZGlmIC8qIE9T MiAqLwotICAgICAgICAgICAgbG9jYWwgPSAwOwotICAgICAgICAgICAgY2tzdHJuY3B5KHR0bmFt ZSxDVFROQU0sVFROQU1MRU4pOwotICAgICAgICB9Ci0gICAgICAgIHNldGZsb3coKTsgICAgICAg ICAgICAgICAgICAgICAgLyogU2V0IGFwcHJvcHJpYXRlIGZsb3cgY29udHJvbCAqLwotICAgICAg ICBzcGVlZCA9IHR0Z3NwZCgpOyAgICAgICAgICAgICAgIC8qIEdldCB0cmFuc21pc3Npb24gc3Bl ZWQuICovCi0jaWZkZWYgSUtTRAotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0KLSNpZmRlZiBB TllYMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGwgWC4yNSBpbXBsZW1lbnRhdGlv bnMgKi8KLSNpZm5kZWYgSUJNWDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGNlcHQg SUJNIGhhdmUgUEFEIHN1cHBvcnQgKi8KLSAgICBpbml0cGFkKCk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBJbml0aWFsaXplIFguMjUgUEFEICovCi0jZW5kaWYgLyogSUJNWDI1ICovCi0j ZW5kaWYgLyogQU5ZWDI1ICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKGluaWJ1ZnMoU0JT SVosUkJTSVopIDwgMCkgICAgICAgLyogQWxsb2NhdGUgcGFja2V0IGJ1ZmZlcnMgKi8KLSAgICAg IGZhdGFsKCJDYW4ndCBhbGxvY2F0ZSBwYWNrZXQgYnVmZmVycyEiKTsKLSNpZm5kZWYgTk9DS1NQ RUVECi0gICAgc2V0cHJlZml4KHByZWZpeGluZyk7ICAgICAgICAgICAgICAgLyogU2V0IHVwIGNv bnRyb2wgY2hhciBwcmVmaXhpbmcgKi8KLSNlbmRpZiAvKiBOT0NLU1BFRUQgKi8KLSNlbmRpZiAv KiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0lDUAotICAgIGlmIChzc3RlbG5ldAotI2lmZGVmIElL U0QKLSAgICAgICAgfHwgaW5zZXJ2ZXIKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICkgewot ICAgICAgICBpbnQgb24gPSAxLCB4ID0gMDsKLSAgICAgICAgZXh0ZXJuIGludCBja3hlY2gsIHR0 bmV0LCB0dG5wcm90bywgY21kbXNrOwotI2lmZGVmIFNPX1NOREJVRgotICAgICAgICBleHRlcm4g aW50IHRjcF9zZW5kYnVmOwotI2VuZGlmCi0jaWZkZWYgU09fUkNWQlVGCi0gICAgICAgIGV4dGVy biBpbnQgdGNwX3JlY3ZidWY7Ci0jZW5kaWYKLSNpZmRlZiBTT19LRUVQQUxJVkUKLSAgICAgICAg ZXh0ZXJuIGludCB0Y3Bfa2VlcGFsaXZlOwotI2VuZGlmCi0jaWZkZWYgU09fTElOR0VSCi0gICAg ICAgIGV4dGVybiBpbnQgdGNwX2xpbmdlciwgdGNwX2xpbmdlcl90bW87Ci0jZW5kaWYgLyogU09f TElOR0VSICovCi0jaWZkZWYgU09fRE9OVFJPVVRFCi0gICAgICAgIGV4dGVybiBpbnQgdGNwX2Rv bnRyb3V0ZTsKLSNlbmRpZiAvKiBTT19ET05UUk9VVEUgKi8KLSNpZmRlZiBUQ1BfTk9ERUxBWQot ICAgICAgICBleHRlcm4gaW50IHRjcF9ub2RlbGF5OwotI2VuZGlmIC8qIFRDUF9OT0RFTEFZICov Ci0jaWZkZWYgSUtTRAotICAgICAgICBleHRlcm4gaW50IGlrbG9nb3BlbjsKLSNlbmRpZiAvKiBJ S1NEICovCi0gICAgICAgIGV4dGVybiBpbnQgdHRtZG07Ci0KLSNpZmRlZiBVTklYCi0gICAgICAg IGlmIChpc2F0dHkoMCkpCi0gICAgICAgICAgZmF0YWwoIkludGVybmV0IEtlcm1pdCBTZXJ2aWNl IGNhbm5vdCBiZSBzdGFydGVkIGF0IGEgdGVybWluYWwuIik7Ci0jZW5kaWYgLyogVU5JWCAqLwot Ci0gICAgICAgIHJlbGlhYmxlID0geHJlbGlhYmxlID0gU0VUX09OOyAgLyogSUtTRCBoYXMgcmVs aWFibGUgY29ubmVjdGlvbiAqLwotI2lmbmRlZiBWTVMKLSAgICAgICAgZmxvdyA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBObyBmbG93IGNvbnRyb2wgbmVlZGVkICovCi0jZW5kaWYgLyog Vk1TICovCi0gICAgICAgIGJnc2V0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGlu IGJhY2tncm91bmQgKi8KLSAgICAgICAgbm9wdXNoID0gMTsgICAgICAgICAgICAgICAgICAgICAv KiBObyBleHRlcm5hbCBwcm9jZXNzZXMgKi8KLSAgICAgICAgcGFyaXR5ID0gMDsgICAgICAgICAg ICAgICAgICAgICAvKiA4IGJpdHMgLi4uICovCi0gICAgICAgIGNtZG1zayA9IDB4ZmY7ICAgICAg ICAgICAgICAgICAgLyogYWxsIHRoZSB3YXkgKi8KLSAgICAgICAgY21hc2sgPSAweGZmOwotCi0j aWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsgICAgICAgICAgICAgICAgIC8qIElm IElLU0QgKi8KLSAgICAgICAgICAgIGRvaWtzZGluaXQoKTsgICAgICAgICAgICAgICAvKiBFeGVj dXRlIElLU0QgY29uZmlndXJhdGlvbiBmaWxlICovCi0gICAgICAgICAgICB3aGlsZSAodGxldmVs ID4gLTEpCi0gICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAgICAgLyogKElnbm9y ZSBhbnkgZmlsZS14ZmVyIGNvbW1hbmRzKSAqLwotICAgICAgICAgICAgaWtzZGNmID0gMTsgICAg ICAgICAgICAgICAgIC8qIElLU0QgYy5mLiBoYXMgYmVlbiBwcm9jZXNzZWQgKi8KLSAgICAgICAg fQotICAgICAgICBpZiAoIWlrbG9nb3BlbikgKFZPSUQpIGRvaWtsb2coKTsgLyogT3BlbiBLZXJt aXQtc3BlY2lmaWMgbG9nICovCi0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZkZWYgVU5JWAotICAg ICAgICBzZXRidWYoc3Rkb3V0LE5VTEwpOyAgICAgICAgICAgIC8qIERvbid0IGJ1ZmZlciB0aGUg b3V0cHV0ICovCi0gICAgICAgIGNrc3RybmNweSh0dG5hbWUsIjAiLFRUTkFNTEVOKTsgLyogbm90 ICIvZGV2L3R0eSIuLi4gKi8KLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgIGxvY2FsID0gMDsg ICAgICAgICAgICAgICAgICAgICAgLyogV2UgYXJlIGluIHJlbW90ZSBtb2RlICovCi0gICAgICAg IGNreGVjaCA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogV2Ugd2lsbCBlY2hvICovCi0jaWZk ZWYgT1MyCi0gICAgICAgIG5ldHR5cGUgPSBORVRfVENQQjsgICAgICAgICAgICAgLyogU28gdHRv cGVuKCkgdHJlYXRzIHRoZSBjb25uZWN0aW9uICovCi0gICAgICAgIG1kbXR5cCA9IC1uZXR0eXBl OyAgICAgICAgICAgICAgLyogYXMgYSBuZXR3b3JrICovCi0jZW5kaWYgLyogT1MyICovCi0gICAg ICAgIGRlYnVnKEYxMDAsIm1haW4gYWJvdXQgdG8gY2FsbCB0dG9wZW4oKSBpbnNlcnZlciIsIiIs MCk7Ci0gICAgICAgIGlmICh0dG9wZW4odHRuYW1lLCZsb2NhbCxtZG10eXAsMCkgPCAwKSB7IC8q IE9wZW4gY29tbSBjaGFubmVsICovCi0gICAgICAgICAgICBmYXRhbCgiY2FuJ3QgaW5pdGlhbGl6 ZSBpL28iKTsKLSAgICAgICAgfQotI2lmZGVmIE9TMgotICAgICAgICBsb2NhbCA9IDA7Ci0gICAg ICAgIG5ldHdvcmsgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogRG9lcyB1c2UgbmV0d29ya2lu ZyBjb2RlICovCi0jZWxzZSAgLyogT1MyICovCi0gICAgICAgIG5ldHdvcmsgPSAwOyAgICAgICAg ICAgICAgICAgICAgLyogRG9lcyBub3QgdXNlIG5ldHdvcmtpbmcgY29kZSAqLwotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgICB0dG1kbSA9IC0xOyAgICAgICAgICAgICAgICAgICAgIC8qIERvZXMg bm90IHVzZSBhIG1vZGVtICovCi0gICAgICAgIHNzdGVsbmV0ID0gMTsgICAgICAgICAgICAgICAg ICAgLyogRG8gc2VydmVyLXNpZGUgVGVsbmV0IG5lZ290YXRpb25zICovCi0gICAgICAgIGRlYnVn KEYxMTEsIk1BSU4iLCJzc3RlbG5ldCIsc3N0ZWxuZXQpOwotICAgICAgICB0dG5ldCA9IE5FVF9U Q1BCOyAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgdHlwZSBpcyBUQ1Agc29ja2V0cyAqLwotICAg ICAgICB0dG5wcm90byA9IE5QX1RFTE5FVDsgICAgICAgICAgIC8qIE5ldHdvcmQgcHJvdG9jb2wg aXMgVGVsbmV0ICovCi0jaWZkZWYgSUtTREIKLSAgICAgICAgZGJpbml0KCk7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBJbml0aWFsaXplIGRhdGFiYXNlIHJlY29yZCAqLwotI2VuZGlmIC8qIElL U0RCICovCi0jaWZuZGVmIE9TMgotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgIC8q IEJlZm9yZSBpbml0aWFsaXphdGluZyBUZWxuZXQvUmxvZ2luIG5lZ290aWF0aW9ucywgaW5pdCBL ZXJiZXJvcyAqLwotICAgICAgICBja19hdXRoX2luaXQoY2tnZXRwZWVyKCksIiIsIiIsMCk7Ci0j ZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotI2lmZGVmIE5PTl9CTE9DS19JTwotICAg ICAgICBvbiA9IDE7Ci0gICAgICAgIHggPSBzb2NrZXRfaW9jdGwoMCxGSU9OQklPLCZvbik7Ci0g ICAgICAgIGRlYnVnKEYxMDEsIm1haW4gRklPTkJJTyIsIiIseCk7Ci0jZW5kaWYgLyogTk9OX0JM T0NLX0lPICovCi0jaWZkZWYgU09fT09CSU5MSU5FCi0gICAgICAgIG9uID0gMTsKLSAgICAgICAg eCA9IHNldHNvY2tvcHQoMCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLCAoY2hhciAqKSZvbiwg c2l6ZW9mKG9uKSk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIm1haW4gU09fT09CSU5MSU5FIiwiIix4 KTsKLSNlbmRpZiAvKiBTT19PT0JJTkxJTkUgKi8KLQotI2lmbmRlZiBOT1RDUE9QVFMKLSNpZm5k ZWYgZGF0YWdlbmVyYWwKLSNpZmRlZiBTT0xfU09DS0VUCi0jaWZkZWYgVENQX05PREVMQVkKLSAg ICAgICAgbm9fZGVsYXkoMCx0Y3Bfbm9kZWxheSk7Ci0jZW5kaWYgLyogVENQX05PREVMQVkgKi8K LSNpZmRlZiBTT19LRUVQQUxJVkUKLSAgICAgICAga2VlcGFsaXZlKDAsdGNwX2tlZXBhbGl2ZSk7 Ci0jZW5kaWYgLyogU09fS0VFUEFMSVZFICovCi0jaWZkZWYgU09fTElOR0VSCi0gICAgICAgIGNr X2xpbmdlcigwLHRjcF9saW5nZXIsIHRjcF9saW5nZXJfdG1vKTsKLSNlbmRpZiAvKiBTT19MSU5H RVIgKi8KLSNpZmRlZiBTT19ET05UUk9VVEUKLSAgICAgICAgZG9udHJvdXRlKDAsdGNwX2RvbnRy b3V0ZSk7Ci0jZW5kaWYgLyogU09fRE9OVFJPVVRFICovCi0jaWZkZWYgU09fU05EQlVGCi0gICAg ICAgIHNlbmRidWYoMCx0Y3Bfc2VuZGJ1Zik7Ci0jZW5kaWYgLyogU09fU05EQlVGICovCi0jaWZk ZWYgU09fUkNWQlVGCi0gICAgICAgIHJlY3ZidWYoMCx0Y3BfcmVjdmJ1Zik7Ci0jZW5kaWYgLyog U09fUkNWQlVGICovCi0jZW5kaWYgLyogU09MX1NPQ0tFVCAqLwotI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCi0jZW5kaWYgLyogTk9UQ1BPUFRTICovCi0KLSNpZmRlZiBDS19TU0wKLSAgICAgICAg aWYgKGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSkgewotICAgICAgICAgICAgaWYgKCFzc2xfdG5f aW5pdChTU0xfU0VSVkVSKSkgewotICAgICAgICAgICAgICAgIGlmIChiaW9fZXJyICE9IE5VTEwp IHsKLSAgICAgICAgICAgICAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCJkb19zc2xlYXlfaW5p dCgpIGZhaWxlZFxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vycm9ycyhi aW9fZXJyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBm Zmx1c2goc3RkZXJyKTsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsImRvX3Nz bGVheV9pbml0KCkgZmFpbGVkXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICBFUlJfcHJpbnRf ZXJyb3JzX2ZwKHN0ZGVycik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN3 aXRjaCAodHRucHJvdG8pIHsKLQkJICBjYXNlIE5QX1NTTDoKLQkJICBjYXNlIE5QX1RMUzoKLSAg CQkgIGNhc2UgTlBfU1NMX1JBVzoKLQkJICBjYXNlIE5QX1RMU19SQVc6Ci0JCSAgY2FzZSBOUF9T U0xfVEVMTkVUOgotCQkgIGNhc2UgTlBfVExTX1RFTE5FVDoKLSAgICAgICAgICAgICAgICAgICAg ZG9leGl0KEJBRF9FWElULDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAv KiBvdGhlcndpc2Ugd2Ugd2lsbCBjb250aW51ZSB0byBhY2NlcHQgdGhlIGNvbm5lY3Rpb24gICAq LwotICAgICAgICAgICAgICAgIC8qIHdpdGhvdXQgU1NMIG9yIFRMUyBzdXBwb3J0IHVubGVzcyBy ZXF1aXJlZC4gKi8KLSAgICAgICAgICAgICAgICBpZiAoIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRF TE9QVF9TVEFSVF9UTFMpICE9IFROX05HX01VICkKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BU X0RFRl9TX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19SRjsKLSAgICAgICAgICAg ICAgICBpZiAoIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgIT0gVE5fTkdf TVUgKQotICAgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9TVEFS VF9UTFMpID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgaWYgKCBURUxPUFRfREVGX0NfTUVf TU9ERShURUxPUFRfU1RBUlRfVExTKSAhPSBUTl9OR19NVSApCi0gICAgICAgICAgICAgICAgICAg IFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7Ci0gICAg ICAgICAgICAgICAgaWYgKCBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9 IFROX05HX01VICkKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxP UFRfU1RBUlRfVExTKSA9IFROX05HX1JGOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICBpZiAoIGNrX3NzbF9pbmNvbWluZygwKSA8IDAgKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGRvZXhpdChCQURfRVhJVCwxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lmZGVmIFROQ09ERQotICAgICAg ICB0bl9pbmkoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IFRlbG5ldCBuZWdvdGlh dGlvbiBub3cgKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9 Ci0gICAgZGVidWcoRjEwMSwibWFpbiBhcmdjIGFmdGVyIHByZXNjYW4oKSIsIiIsYXJnYyk7Ci0K LSAgICAvKiBOb3cgcHJvY2VzcyBhbnkgcmVsZXZhbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzICov Ci0KLSNpZm5kZWYgTk9ESUFMCi0gICAgZ2V0ZGlhbGVudigpOyAgICAgICAgICAgICAgICAgICAg ICAgLyogRGlhbGluZyAqLwotI2lmZGVmIE5FVENPTk4KLSAgICBuZGluaXQoKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIG5ldHdvcmsgZGlyZWN0b3J5IGluZm8gKi8K LSAgICBnZXRuZXRlbnYoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIGRpcmVj dG9yaWVzICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0j aWZuZGVmIE5PWEZFUgotI2lmZGVmIENLX0ZBU1QKLSAgICBkb2Zhc3QoKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBCeSBub3cgRkFTVCBkZWZhdWx0cyBzaG91bGQgYmUgT0sgKi8KLSNl bmRpZiAvKiBDS19GQVNUICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9DTURM Ci0gICAgaWtzbG9naW4oKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElLU0QgTG9naW4g YW5kIG90aGVyIHN0dWZmICovCi0jaWZkZWYgSUtTRAotI2lmZGVmIE5UCi0gICAgaWYgKCBpbnNl cnZlciApCi0gICAgICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBJ S1NEICovCi0jZW5kaWYgLyogTk9DTURMICovCi0KLSAgICBpZiAoaG93Y2FsbGVkID09IElfQU1f U1NIU1VCKSB7Ci0gICAgICAgIHJlbGlhYmxlID0gMTsJCQkvKiBXZSBzYXkgdGhlIGNvbm5lY3Rp b24gaXMgcmVsaWFibGUgKi8KLSAgICAgICAgeHJlbGlhYmxlID0gMTsJCQkvKiBBbmQgdGhhdCB3 ZSBzYWlkIGl0IHdhcyAqLwotICAgICAgICBzZXRyZWxpYWJsZSA9IDE7CQkvKiBBbmQgcHJldGVu ZCB0aGUgInVzZXIiIGRpZCB0b28gKi8KLSAgICAgICAgeGZpbmlzaCA9IDE7CQkJLyogRm9yIFJF TU9URSBIRUxQIHJlc3BvbnNlICovCi0gICAgICAgIG1kbXR5cCA9IDA7CQkJLyogRm9yIHR0b3Bl bigpICovCi0gICAgICAgIGNrc3RybmNweSh0dG5hbWUsIjAiLFRUTkFNTEVOKzEpOyAgLyogVXNl IGZpbGUgZGVzY3JpcHRvciAwICovCi0gICAgICAgIGxvY2FsID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQW5kIGZvcmNlIHJlbW90ZSBtb2RlICovCi0gICAgICAgIHR0b3Blbih0dG5h bWUsJmxvY2FsLG1kbXR5cCwwKTsgLyogT3BlbiB0aGUgImNvbm5lY3Rpb24iICovCi0gICAgICAg IHNzdGF0ZSA9ICd4JzsJCQkvKiBJbml0aWFsIHN0YXRlIGlzIFNlcnZlciAqLwotICAgICAgICBw cm90bygpOwkJCS8qIEVudGVyIHByb3RvY29sICovCi0gICAgICAgIGRvZXhpdChHT09EX0VYSVQs eGl0c3RhKTsJLyogRXhpdCB3aGVuIGRvbmUgKi8KLSAgICB9Ci0gICAgZGVidWcoRjExMSwiaG93 Y2FsbGVkIixteW5hbWUsaG93Y2FsbGVkKTsKLQotI2lmZGVmIE5PQ0NUUkFQCi0gICAgZG90YWtl aW5pKDApOwotI2Vsc2UgLyogTk9DQ1RSQVAgKi8KLSAgICBkZWJ1ZyhGMTAwLCJtYWluIGFib3V0 IHRvIGNjX2V4ZWN1dGUiLCIiLDApOwotICAgIHNldGludCgpOwotICAgIGNjX2V4ZWN1dGUoIGNr amFkZHIoY21qYnVmKSwgZG90YWtlaW5pLCBmYWlsdGFrZWluaSApOwotI2VuZGlmIC8qIE5PQ0NU UkFQICovCi0KLSAgICBkZWJ1ZyhGMTExLCJtYWluIDIgY2ZpbGVmIixjbWRmaWwsY2ZpbGVmKTsK LSAgICBpZiAoY21kZmlsWzBdKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBnb3Qgb25l IChzZWUgcHJlc2NhbigpKS4uLiAqLwotI2lmZGVmIE5PQ0NUUkFQCi0gICAgICAgIGRvY21kZmls ZSgwKTsgICAgICAgICAgICAgICAgICAgLyogZXhlY3V0ZSBpdC4gKi8KLSNlbHNlIC8qIE5PQ0NU UkFQICovCi0gICAgICAgIHNldGludCgpOwotICAgICAgICBjY19leGVjdXRlKCBja2phZGRyKGNt amJ1ZiksIGRvY21kZmlsZSwgZmFpbGNtZGZpbGUgKTsKLSNlbmRpZiAvKiBOT0NDVFJBUCAqLwot ICAgIH0KLSNpZm5kZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmVzZXJ2 ZSBuYW1lIHNvIHdlIGNhbiBkZWxldGUgaXQgKi8KLSAgICAqY21kZmlsID0gJ1wwJzsgICAgICAg ICAgICAgICAgICAgICAvKiBEb25lLCBudWxsaWZ5IHRoZSBmaWxlIG5hbWUgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZuZGVmIE5PQ01ETAotLyogTG9vayBm b3IgYSBVTklYLXN0eWxlIGNvbW1hbmQgbGluZS4uLiAqLwotCi0gICAgd2hhdCA9IFdfTk9USElO RzsKLQotICAgIGRlYnVnKEYxMDEsIm1haW4gYXJnYyIsIiIsYXJnYyk7Ci0jaWZuZGVmIE5PSEVM UAotICAgIGluaW9wdGhscCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUg Y21kbGluZSBhcmcgaGVscCAqLwotI2VuZGlmIC8qIE5PSEVMUCAqLwotICAgIGlmICgKLSNpZmRl ZiBDT01NRU5UCi0gICAgICAgICFjZmlsZWYgJiYKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg ICAgIGFyZ2MgPiAxKSB7ICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBsaW5lIGFyZ3Vt ZW50cz8gKi8KLSAgICAgICAgc3N0YXRlID0gKENIQVIpIGNtZGxpbigpOyAgICAgICAvKiBZZXMs IHBhcnNlLiAqLwotI2lmZGVmIE5FVENPTk4KLSNpZm5kZWYgTk9VUkwKLSAgICAgICAgaWYgKGhh dmV1cmwpIHsgICAgICAgICAgICAgICAgICAvKiBXYXMgYSBVUkwgZ2l2ZW4/ICovCi0gICAgICAg ICAgICBkb3VybCgpOyAgICAgICAgICAgICAgICAgICAgLyogaWYgc28sIGRvIGl0LiAqLwotICAg ICAgICB9Ci0jZW5kaWYgLyogTk9VUkwgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0jaWZuZGVm IE5PWEZFUgotICAgICAgICB6c3RhdGUgPSBzc3RhdGU7ICAgICAgICAgICAgICAgIC8qIFJlbWVt YmVyIHNzdGF0ZSBhcm91bmQgcHJvdG9jb2wgKi8KLSAgICAgICAgZGVidWcoRjEwMSwibWFpbiB6 c3RhdGUiLCIiLHpzdGF0ZSk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9MT0NB TAotICAgICAgICBpZiAoY2ZsZykgeyAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3QgZmly c3QgaWYgcmVxdWVzdGVkICovCi0gICAgICAgICAgICBkb2NvbmVjdCgwLDApOwotICAgICAgICAg ICAgaWYgKHR0Y2hrKCkgPCAwKQotICAgICAgICAgICAgICBkb2xvZ2VuZCgpOwotICAgICAgICAg ICAgY2ZsZyA9IDA7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYg Tk9YRkVSCi0gICAgICAgIGlmIChzc3RhdGUpIHsKLSNpZm5kZWYgTk9MT0NBTAotICAgICAgICAg ICAgaWYgKGRpc3BsYSkgY29uY2IoKGNoYXIpZXNjYXBlKTsgLyogKGZvciBjb25zb2xlICJpbnRl cnJ1cHRzIikgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgTk9DQ1RSQVAKLSAgICAg ICAgICAgIGRvY21kbGluZSgxKTsKLSNlbHNlIC8qIE5PQ0NUUkFQICovCi0gICAgICAgICAgICBz ZXRpbnQoKTsKLSAgICAgICAgICAgIGNjX2V4ZWN1dGUoIGNramFkZHIoY21qYnVmKSwgZG9jbWRs aW5lLCBmYWlsY21kbGluZSApOwotI2VuZGlmIC8qIE5PQ0NUUkFQICovCi0gICAgICAgIH0KLSNl bmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0lDUAotLyoKLSAgSWYgYSBjb21tYW5kLWxp bmUgYWN0aW9uIGFyZ3VtZW50IHdhcyBnaXZlbiBhbmQgLVMgKCJzdGF5Iikgd2FzIG5vdCBnaXZl biwKLSAgZXhpdCBub3cuCi0qLwotICAgICAgICBpZiAoKGNmbGcgfHwgY25mbGcgfHwgenN0YXRl KSAmJiAhc3RheWZsZykKLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgICAgICAgIGRvZXhpdChHT09E X0VYSVQseGl0c3RhKTsgICAgIC8qIEV4aXQgd2l0aCBnb29kIHN0YXR1cyAqLwotCi0jaWZuZGVm IE5PTE9DQUwKLSNpZm5kZWYgTk9JQ1AKLSAgICAgICAgaWYgKGxvY2FsKSB7Ci0jaWZkZWYgTkVU Q09OTgotICAgICAgICAgICAgaWYgKChjZmxnIHx8IGNuZmxnKSAmJiB0bl9leGl0ICYmIHR0Y2hr KCkgPCAwKQotICAgICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7IC8qIEV4aXQg d2l0aCBnb29kIHN0YXR1cyAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSAgICAgICAgICAgIGlm IChleGl0b25jbG9zZSAmJiAhbmV0d29yayAmJgotICAgICAgICAgICAgICAgIChjYXJyaWVyICE9 IENBUl9PRkYgJiYgKHR0Z21kbSgpICYgQk1fRENEKSA9PSAwKSkKLSAgICAgICAgICAgICAgZG9l eGl0KEdPT0RfRVhJVCx4aXRzdGEpOyAvKiBFeGl0IHdpdGggZ29vZCBzdGF0dXMgKi8KLSAgICAg ICAgICAgIGlmIChleGl0b25jbG9zZSAmJiBuZXR3b3JrICYmIHR0Y2hrKCkgPCAwKQotICAgICAg ICAgICAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7IC8qIEV4aXQgd2l0aCBnb29kIHN0YXR1 cyAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICov Ci0gICAgfQotI2VuZGlmIC8qIE5PQ01ETCAqLwotCi0jaWZkZWYgTk9JQ1AgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTm8gaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXIgKi8KLSNpZm5k ZWYgTk9DTURMCi0gICAgZWxzZSB7Ci0KLSAgICAgICAgLyogQ29tbWFuZC1saW5lLW9ubHkgdmVy c2lvbiAqLwotICAgICAgICBmYXRhbCgiP05vIGNvbW1hbmQtbGluZSBvcHRpb25zIGdpdmVuIC0g dHlwZSAna2VybWl0IC1oJyBmb3IgaGVscCIpOwotICAgIH0KLSNlbHNlICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOZWl0aGVyIG9uZSEgKi8KLSAgICAgICAgc3N0YXRlID0g J3gnOwotICAgICAgICBqdXN0b25lID0gMDsKLSAgICAgICAgcHJvdG8oKTsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTbyBnbyBpbnRvIHNlcnZlciBtb2RlICovCi0gICAgICAgIGRvZXhpdChH T09EX0VYSVQseGl0c3RhKTsgICAgICAgLyogZXhpdCB3aXRoIGdvb2Qgc3RhdHVzICovCi0KLSNl bmRpZiAvKiBOT0NNREwgKi8KLSNlbHNlIC8qIG5vdCBOT0lDUCAqLwotLyoKLSAgSWYgbm8gYWN0 aW9uIHJlcXVlc3RlZCBvbiBjb21tYW5kIGxpbmUsIG9yIGlmIC1TICgic3RheSIpIHdhcyBpbmNs dWRlZCwKLSAgZW50ZXIgdGhlIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyLgotKi8KLSAgICBp ZiAoIWNsY21kcykKLSAgICAgIGhlcmFsZCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBE aXNwbGF5IHByb2dyYW0gaGVyYWxkLiAqLwotCi0jaWZkZWYgTk9DQ1RSQVAKLSAgICBkZWJ1ZyhG MTAwLCJtYWluIE5PQ0NUUkFQIHNldHRpbmcgaW50ZXJydXB0IHRyYXAiLCIiLDApOwotICAgIHNl dGludCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCB1cCBjb21tYW5kIGludGVy cnVwdCB0cmFwcyAqLwotICAgIGRvaWNwKE5VTEwpOwotI2Vsc2UgLyogTk9DQ1RSQVAgKi8KLSAg ICB3aGlsZSAoMSkgewotICAgICAgICBkZWJ1ZyhGMTAwLCJtYWluIHNldHRpbmcgaW50ZXJydXB0 IHRyYXAiLCIiLDApOwotICAgICAgICBzZXRpbnQoKTsgICAgICAgICAgICAgICAgICAgICAgIC8q IFNldCB1cCBjb21tYW5kIGludGVycnVwdCB0cmFwcyAqLwotICAgICAgICBpZiAoIWNjX2V4ZWN1 dGUoY2tqYWRkcihjbWpidWYpLCBkb2ljcCwgZmFpbGljcCkpCi0gICAgICAgICAgYnJlYWs7Ci0g ICAgfQotI2VuZGlmIC8qIE5PQ0NUUkFQICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLSNpZm5kZWYg TUFJTklTVk9JRAotICAgIHJldHVybigxKTsKLSNlbmRpZiAvKiBNQUlOSVNWT0lEICovCi19Ci0K LSNpZmRlZiBEWU5BTUlDCi0vKiBBbGxvY2F0ZSBmaWxlIGkvbyBidWZmZXJzICovCi0KLWNoYXIg KnppbmJ1ZmZlciA9IE5VTEwsICp6b3V0YnVmZmVyID0gTlVMTDsKLQotaW50Ci1nZXRpb2JzKCkg ewotICAgIHppbmJ1ZmZlciA9IChjaGFyICopbWFsbG9jKElOQlVGU0laRSk7Ci0gICAgaWYgKCF6 aW5idWZmZXIpIHJldHVybigtMSk7Ci0gICAgem91dGJ1ZmZlciA9IChjaGFyICopbWFsbG9jKHpv YnVmc2l6ZSk7Ci0gICAgZGVidWcoRjEwMSwiem91dGJ1ZmZlciBtYWxsb2MiLCIiLHpvYnVmc2l6 ZSk7Ci0gICAgaWYgKCF6b3V0YnVmZmVyKSByZXR1cm4oLTEpOwotICAgIGRlYnVnKEYxMDAsImdl dGlvYnMgb2siLCIiLDApOwotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBEWU5BTUlDICov CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Nt YWkuYy5jOTkgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY21haS5j LmM5OQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU2NDBlNS4uMDAwMDAwMAotLS0g YS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY21haS5jLmM5OQorKysg L2Rldi9udWxsCkBAIC0xLDM1NzYgKzAsMCBAQAotI2RlZmluZSBFRElUREFURSAgIjIwIEF1ZyAy MDExIgkJLyogTGFzdCBlZGl0IGRhdGUgZGQgbW1tIHl5eXkgKi8KLSNkZWZpbmUgRURJVE5EQVRF ICIyMDExMDgyMCIJCS8qIEtlZXAgdGhlbSBpbiBzeW5jICovCi0vKiBTYXQgQXVnIDIwIDE3OjIw OjE3IDIwMTEgKi8KLQotLyogY2tjbWFpLmMgLSBNYWluIHByb2dyYW0gZm9yIEMtS2VybWl0IHBs dXMgc29tZSBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucyAqLwotCi0vKgotICBja2NzeW0uaCBpcyB1 c2VkIGZvciBmb3IgZGVmaW5pbmcgc3ltYm9scyB0aGF0IG5vcm1hbGx5IHdvdWxkIGJlIGRlZmlu ZWQKLSAgdXNpbmcgLUQgb3IgLWQgb24gdGhlIGNjIGNvbW1hbmQgbGluZSwgZm9yIHVzZSB3aXRo IGNvbXBpbGVycyB0aGF0IGRvbid0Ci0gIHN1cHBvcnQgdGhpcyBmZWF0dXJlLiAgTXVzdCBjb21l IGJlZm9yZSBhbnkgdGVzdHMgZm9yIHByZXByb2Nlc3NvciBzeW1ib2xzLgotKi8KLSNpbmNsdWRl ICJja2NzeW0uaCIKLS8qCi0gIENvbnNvbGlkYXRlZCBwcm9ncmFtIEMtS2VybWl0IHZlcnNpb24g aW5mb3JtYXRpb24gZm9yIGFsbCBwbGF0Zm9ybXMKLSAgKGJ1dCBmb3IgVU5JWCBhbHNvIHNlZSBj a3V2ZXIuaCkuICBTZWUgbWFrZXZlcigpIGJlbG93IGZvciBob3cgdGhleSBhcmUgdXNlZC4KLSov Ci0jaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgLyogVW5jb21tZW50IHRoaXMgZm9y IHJlYWwgSzk1IHZlcnNpb24gKi8KLSNpZm5kZWYgT1MyCQkJCS8qIE9TMiBhY3R1YWxseSBtZWFu cyBLZXJtaXQgOTUuICovCi0jaWZuZGVmIEJFVEFURVNUCQkJLyogSXQncyBiZWNhdXNlIEtlcm1p dCA5NSBzdGFydGVkICovCi0jZGVmaW5lIEJFVEFURVNUCQkJLyogb3V0IGFzIEMtS2VybWl0IGZv ciBPUy8yLiAqLwotI2VuZGlmIC8qIEJFVEFURVNUICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgQkVUQVRFU1QKLSNpZmRlZiBPUzIKLSNpZmRlZiBf X0RBVEVfXwotI2RlZmluZSBCRVRBREFURQotI2VuZGlmIC8qIF9fREFURV9fICovCi0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogQkVUQVRFU1QgKi8KLQotY2hhciAqIGNrX2NyeWVhciA9ICIy MDExIjsgCQkvKiBDLUtlcm1pdCBjb3B5cmlnaHQgeWVhciAqLwotCi0jaWZuZGVmIE1BQwkJCQkv KiBNQUMgPSBLZXJtaXQgZm9yIE1BQyBPUyA2LCA3LCAuLi4gKi8KLS8qCi0gIE5vdGU6IGluaXRp YWxpemUgY2tfc190ZXN0IHRvICIiIGlmIHRoaXMgaXMgbm90IGEgdGVzdCB2ZXJzaW9uLgotICBV c2UgKCpja19zX3Rlc3QgIT0gJ1wwJykgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcHJpbnQgdGVzdC1y ZWxhdGVkIG1lc3NhZ2VzLgotKi8KLQotI2lmbmRlZiBCRVRBVEVTVAotI2lmbmRlZiBPUzIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVOSVgsIFZNUywgZXRjLi4uIChpLmUuIEMtS2Vy bWl0KSAqLwotY2hhciAqY2tfc190ZXN0ID0gIiI7CQkJLyogIkRldiIsIkFscGhhIiwiQmV0YSIs IlJDIiwgb3IgIiIgKi8KLWNoYXIgKmNrX3NfdHZlciA9ICIiOwkJCS8qIFRlc3QgdmVyc2lvbiBu dW1iZXIgb3IgIiIgKi8KLSNlbHNlICAvKiBPUzIgKi8KLWNoYXIgKmNrX3NfdGVzdCA9ICIiOwkJ CS8qIChpLmUuIEs5NSkgKi8KLWNoYXIgKmNrX3NfdHZlciA9ICIiOwotI2VuZGlmIC8qIE9TMiAq LwotI2Vsc2UKLWNoYXIgKmNrX3NfdGVzdCA9ICIiOwkJCS8qIERldmVsb3BtZW50ICovCi1jaGFy ICpja19zX3R2ZXIgPSAiIjsKLSNlbmRpZiAvKiBCRVRBVEVTVCAqLwotI2Vsc2UgLyogTUFDICov Ci1jaGFyICpja19zX3Rlc3QgPSAiUHJlLUFscGhhIjsgICAgICAgICAgLyogTWFjIEtlcm1pdCBp cyBhbHdheXMgYSB0ZXN0Li4uICovCi1jaGFyICpja19zX3R2ZXIgPSAiIjsJCQkvKiAocHJlIE1h YyBPUyBYIDEwLCB0aGF0IGlzISkgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQotI2lmZGVmIEJFVEFE QVRFICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGUgb2YgdGhpcyB2ZXJzaW9uIG9yIGVk aXQgKi8KLWNoYXIgKmNrX3NfZGF0ZSA9IF9fREFURV9fOyAgICAgICAgICAgICAvKiBDb21waWxh dGlvbiBkYXRlICovCi0jZWxzZQotY2hhciAqY2tfc19kYXRlID0gRURJVERBVEU7CQkvKiBTZWUg dG9wICovCi0KLSNlbmRpZiAvKiBCRVRBREFURSAqLwotY2hhciAqYnVpbGRpZCA9IEVESVROREFU RTsJCS8qIFNlZSB0b3AgKi8KLQotI2lmZGVmIFVOSVgKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0g IkAoIylDLUtlcm1pdCA5LjAuMzAyIjsKLSNlbmRpZiAvKiBVTklYICovCi0KLS8qCi0gIFRoZSBD LUtlcm1pdCBWZXJzaW9uIG51bWJlciBpcyBtYWpvci5taW5vci5lZGl0IChpbnRlZ2VycykuCi0g IE1ham9yIHZlcnNpb24gYWx3YXlzIGdvZXMgdXAuCi0gIE1pbm9yIHZlcnNpb24gaXMgaGlzdG9y aWNhbCwgaGFzbid0IGJlZW4gdXNlZCBzaW5jZSBDLUtlcm1pdCA3LjEuCi0gIEVkaXQgaXMgc2Vx dWVudGlhbCwgYWx3YXlzIGdvZXMgdXAsIGJ1dCB0aGVyZSBjYW4gYmUgZ2Fwcy4KLSAgRm9yIGV4 YW1wbGUgdGhlcmUgbWlnaHQgYmUgbWFueSBlZGl0cyBiZXR3ZWVuIHJlbGVhc2VzLgotICBJZiB0 aGUgbWFqb3IgZ29lcyB0byAxMCwgc29tZSB2ZXJzaW9uLW51bWJlci1iYXNlZCBmZWF0dXJlIHRl c3RzCi0gIGNvdWxkIGZhaWwuICBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gdXNlIHRoZSBtaW5vciB2 ZXJzaW9uIGZpZWxkCi0gIGZvciBmdXR1cmUgcmVsZWFzZXMuCi0qLwotCi1jaGFyICpja19zX3Zl ciA9ICI5LjAuMzAyIjsgICAgICAgICAgICAgLyogQy1LZXJtaXQgdmVyc2lvbiBzdHJpbmcgKi8K LWxvbmcgIGNrX2xfdmVyID0gIDkwMDMwMkw7ICAgICAgICAgICAgICAvKiBDLUtlcm1pdCB2ZXJz aW9uIG51bWJlciAqLwotCi0jaWZkZWYgT1MyCi1jaGFyICpja19zX3h2ZXIgPSAiMy4wLjAiOwkJ LyogUHJvZHVjdC1zcGVjaWZpYyB2ZXJzaW9uIHN0cmluZyAqLwotbG9uZyAgY2tfbF94dmVyID0g MzAwMEw7ICAgICAgICAgICAgICAgIC8qIFByb2R1Y3Qtc3BlY2lmaWMgdmVyc2lvbiBudW1iZXIg Ki8KLSNlbHNlCi0jaWZkZWYgTUFDCi1jaGFyICpja19zX3h2ZXIgPSAiMC45OTUiOyAgICAgICAg ICAgICAgLyogUHJvZHVjdC1zcGVjaWZpYyB2ZXJzaW9uIHN0cmluZyAqLwotbG9uZyAgY2tfbF94 dmVyID0gOTk1TDsgICAgICAgICAgICAgICAgIC8qIFByb2R1Y3Qtc3BlY2lmaWMgdmVyc2lvbiBu dW1iZXIgKi8KLSNlbHNlCi1jaGFyICpja19zX3h2ZXIgPSAiIjsgICAgICAgICAgICAgICAgICAg LyogRG9uJ3QgdG91Y2ggdGhlc2UuLi4gKi8KLWxvbmcgIGNrX2xfeHZlciA9IDBMOyAgICAgICAg ICAgICAgICAgICAvKiB0aGV5IGFyZSBjb21wdXRlZCBhdCBydW50aW1lICovCi0jZW5kaWYgLyog TUFDICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBPUzIKLSNpZmRlZiBJS1NET05MWQot I2lmZGVmIE5UCi1jaGFyICpja19zX25hbWUgPSAiSUtTLU5UIjsKLSNlbHNlIC8qIE5UICovCi1j aGFyICpja19zX25hbWUgPSAiSUtTLU9TLzIiOwotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiBJ S1NET05MWSAqLwotY2hhciAqY2tfc19uYW1lID0gIktlcm1pdCA5NSI7ICAgICAgICAgIC8qIFBy b2dyYW0gbmFtZSAqLwotI2VuZGlmIC8qIElLU0RPTkxZICovCi0jZWxzZQotI2lmZGVmIE1BQwot Y2hhciAqY2tfc19uYW1lID0gIk1hYyBLZXJtaXQiOwotI2Vsc2UKLWNoYXIgKmNrX3NfbmFtZSA9 ICJDLUtlcm1pdCI7Ci0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogT1MyICovCi0KLWNoYXIg KmNrX3Nfd2hvID0gIiI7ICAgICAgICAgICAgICAgICAgICAvKiBXaGVyZSBjdXN0b21pemVkLCAi IiA9IG5vdC4gKi8KLWNoYXIgKmNrX3BhdGNoID0gIiI7ICAgICAgICAgICAgICAgICAgICAvKiBQ YXRjaCBpbmZvLCBpZiBhbnkuICovCi0KLSNkZWZpbmUgQ0tWRVJMRU4gMTI4Ci1jaGFyIHZlcnNp b3hbQ0tWRVJMRU5dOyAgICAgICAgICAgICAgICAgLyogVmVyc2lvbiBzdHJpbmcgYnVmZmVyICAq LwotY2hhciAqdmVyc2lvID0gdmVyc2lveDsgICAgICAgICAgICAgICAgIC8qIFRoZXNlIGFyZSBm aWxsZWQgaW4gYXQgKi8KLWxvbmcgdmVybnVtLCB4dmVybnVtOyAgICAgICAgICAgICAgICAgICAv KiBydW50aW1lIGZyb20gYWJvdmUuICAgICovCi0KLSNkZWZpbmUgQ0tDTUFJCi0KLSNpbmNsdWRl ICJja2Nhc2MuaCIgICAgICAgICAgICAgICAgICAgICAvKiBBU0NJSSBjaGFyYWN0ZXIgc3ltYm9s cyAqLwotI2luY2x1ZGUgImNrY2RlYi5oIiAgICAgICAgICAgICAgICAgICAgIC8qIERlYnVnICYg b3RoZXIgc3ltYm9scyAqLwotCi1jaGFyICogbXluYW1lID0gTlVMTDsgICAgICAgICAgICAgICAg ICAgLyogVGhlIG5hbWUgSSBhbSBjYWxsZWQgYnkgKi8KLSNpZm5kZWYgT1MyCi1jaGFyICogZXhl ZGlyID0gTlVMTDsgICAgICAgICAgICAgICAgICAgLyogRGlyZWN0b3J5IEkgd2FzIGV4ZWN1dGVk IGZyb20gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLWNoYXIgKiBteWhvbWUgPSBOVUxMOwkJCS8qIEhv bWUgZGlyZWN0b3J5IG92ZXJyaWRlICovCi0KLS8qICBDIEsgQyBNIEEgSSAgLS0gIEMtS2VybWl0 IE1haW4gcHJvZ3JhbSAgKi8KLQotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IChmZGNAY29s dW1iaWEuZWR1KSwKLSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgY2l0eSBvZiBOZXcgWW9y aywKLSAgQ29tcHV0ZXIgQ2VudGVyIC8gQ2VudGVyIGZvciBDb21wdXRpbmcgQWN0aXZpdGllcyAv IEluZm9ybWF0aW9uIFRlY2hub2xvZ3kuCi0gIEkgYW0gbm8gbG9uZ2VyIGF0IENvbHVtYmlhIFUg YXMgb2YgMSBKdWx5IDIwMTEsIGJ1dCB0aGUgZW1haWwgYWRkcmVzcwotICBzaG91bGQgc3RpbGwg d29yay4gIFRoZSBLZXJtaXQgd2Vic2l0ZSBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdSBzaG91 bGQKLSAgc3RpbGwgYmUgYXZhaWxhYmxlIGFuZCB1bmRlciBteSBjb250cm9sLCBhcyB3ZWxsIGFz IHRoZSBLZXJtaXQgRlRQIHNpdGUsCi0gIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 Ly4KLQotQ09QWVJJR0hUIE5PVElDRToKLSovCi0KLWNoYXIgKmNvcHlyaWdodFtdID0gewotCi0j aWZkZWYgcGRwMTEKLSJDb3B5cmlnaHQgKEMpIDE5ODUsICVzLCBUcnVzdGVlcyBvZiBDb2x1bWJp YSBVbml2ZXJzaXR5LCBOWUMuIiwKLSJBbGwgcmlnaHRzIHJlc2VydmVkLiIsCi0iICIsCi0jZWxz ZQotIkNvcHlyaWdodCAoQykgMTk4NSwgJXMsIiwKLSIgIFRoZSBUcnVzdGVlcyBvZiBDb2x1bWJp YSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLiIsCi0iICBBbGwgcmlnaHRzIHJl c2VydmVkLiIsCi0iICIsCi0iUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IiwKLSJtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMiLAotImFyZSBtZXQ6IiwK LSIgIiwKLSIgKyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodCIsCi0iICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiIsCi0iICIsCi0iICsgUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQiLAotIiAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbiIsCi0iICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZSIsCi0iICAgZGlzdHJpYnV0aW9uLiIsCi0iICIsCi0iICsgTmVpdGhl ciB0aGUgbmFtZSBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIiwK LSIgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQiLAotIiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4iLAotIiAiLAotIlRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMiLAotIlwiQVMgSVNc IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QiLAotIkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiIsCi0iQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQiLAotIkhPTERFUiBPUiBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwiLAot IlNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVCBOT1QiLAotIkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCIsCi0iREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIiwKLSJUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IiwKLSIoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UiLAotIk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIiwKLSNlbmRpZiAvKiBwZHAxMSAqLwot Ci0jaWZkZWYgT1MyCi0iUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUsIFNlY3VyZSBF bmRwb2ludHMgSW5jLCBOZXcgWW9yayBOWSBVU0EuIiwKLSJQb3J0aW9ucyBDb3B5cmlnaHQgKEMp IDE5OTUsIE95IE9ubGluZSBTb2x1dGlvbnMgTHRkLiwgSnl2YXNreWxhLCBGaW5sYW5kLiIsCi0j ZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotIlBvcnRpb25zIENv cHlyaWdodCAoQykgMTk5MCwgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4i LAotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSJQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5 OTMgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiIsCi0iUG9ydGlvbnMg Q29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1IGJ5IEFUJlQuIiwKLSJQ b3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcsIEVyaWMgWW91bmcgPGVheUBjcnlwdG9z b2Z0LmNvbT4uIiwKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tfU1JQCi0i UG9ydGlvbnMgQ29weXJpZ2h0IChDKSAxOTk3LCBTdGFuZm9yZCBVbml2ZXJzaXR5LiIsCi0jZW5k aWYgLyogQ0tfU1JQICovCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotI2lmbmRl ZiBwZHAxMQotIiAiLAotIkZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCB2aXNpdCB0aGUgS2VybWl0 IFByb2plY3Qgd2Vic2l0ZToiLAotImh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8gLiIs Ci0jZW5kaWYgLyogcGRwMTEgKi8KLSIifTsKLQotLyogV2luZG93cyBJS1NEIGNvcHlyaWdodCB1 c2VkIHRvIGJlIHNlcGFyYXRlICovCi1jaGFyICp3aWtzZGNwciA9IChjaGFyICopIGNvcHlyaWdo dDsKLQotCi0vKgotRE9DVU1FTlRBVElPTjoKLQotICJVc2luZyBDLUtlcm1pdCIgYnkgRnJhbmsg ZGEgQ3J1eiBhbmQgQ2hyaXN0aW5lIE0uIEdpYW5vbmUsCi0gIERpZ2l0YWwgUHJlc3MgLyBCdXR0 ZXJ3b3J0aC1IZWluZW1hbm4sIFdvYnVybiBNQSwgVVNBLgotICBTZWNvbmQgZWRpdGlvbiAoMTk5 NyksIElTQk4gMS01NTU1OC0xNjQtMS4KLSAgT3JkZXIgZnJvbSBEaWdpdGFsIFByZXNzOiAgICAr MSAoODAwKSAzNjYtMjY2NQotICBPciBmcm9tIENvbHVtYmlhIFVuaXZlcnNpdHk6ICsxICgyMTIp IDg1NC0zNzAzCi0KLUZvciBLZXJtaXQgOTUsIGFsc286Ci0KLSAgIktlcm1pdCA5NSIgYnkgQ2hy aXN0aW5lIE0uIEdpYW5vbmUgYW5kIEZyYW5rIGRhIENydXosCi0gIE1hbm5pbmcgUHVibGljYXRp b25zLCBHcmVlbndpY2ggQ1QsIFVTQSAoMTk5OCkgLSBPbmxpbmUuCi0KLUFDS05PV0xFREdNRU5U UzoKLQotICBUaGUgS2VybWl0IGZpbGUgdHJhbnNmZXIgcHJvdG9jb2wgd2FzIGRldmVsb3BlZCBh dCB0aGUgQ29sdW1iaWEgVW5pdmVyc2l0eQotICBDZW50ZXIgZm9yIENvbXB1dGluZyBBY3Rpdml0 aWVzIChDVUNDQSksIHdoaWNoIHdhcyBzaW5jZSByZW5hbWVkIHRvIENvbHVtYmlhCi0gIFVuaXZl cnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcyAoQWNJUykgYW5kIGFmdGVyIHRoYXQg Q29sdW1iaWEKLSAgVW5pdmVyc2l0eSBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IChDVUlUKS4gIEtl cm1pdCBpcyBuYW1lZCBhZnRlciBLZXJtaXQgdGhlCi0gIEZyb2csIHN0YXIgb2YgdGhlIHRlbGV2 aXNpb24gc2VyaWVzIFRIRSBNVVBQRVQgU0hPVzsgdGhlIG5hbWUgaXMgdXNlZCBieQotICBwZXJt aXNzaW9uIG9mIEhlbnNvbiBBc3NvY2lhdGVzLCBJbmMuCi0KLSAgVGhhbmtzIHRvIGF0IGxlYXN0 IHRoZSBmb2xsb3dpbmcgcGVvcGxlIGZvciB0aGVpciBjb250cmlidXRpb25zIHRvIHRoaXMKLSAg cHJvZ3JhbSBvdmVyIHRoZSB5ZWFycywgYW5kIGFwb2xvZ2llcyB0byBhbnlvbmUgd2hvIHdhcyBp bmFkdmVydGFudGx5Ci0gIG9taXR0ZWQ6Ci0KLSAgIENocmlzIEFkaWUsIEVkaW5idXJnaCBVLCBT Y290bGFuZCAoT1MvMikKLSAgIFJvYmVydCBBZHNldHQsIFVuaXZlcnNpdHkgb2YgV2F0ZXJsb28s IENhbmFkYQotICAgTGFycnkgQWZyaW4sIENsZW1zb24gVQotICAgUnVzcyBBbGxiZXJ5LCBTdGFu Zm9yZCBVCi0gICBKZWZmcmV5IEFsdG1hbiwgQ29sdW1iaWEgVW5pdmVyc2l0eQotICAgR3JlZyBB bmRyZXdzLCBUZWxlYml0IENvcnAKLSAgIEJhcnJ5IEFyY2hlciwgVSBvZiBNaXNzb3VyaQotICAg Um9iZXJ0IEFuZGVyc3NvbiwgSW50ZXJuYXRpb25hbCBTeXN0ZW1zIEEvUywgT3NsbywgTm9yd2F5 Ci0gICBDaHJpcyBBcm1zdHJvbmcsIEJyb29raGF2ZW4gTmF0aW9uYWwgTGFiIChPUy8yKQotICAg V2lsbGlhbSBCYWRlciwgU29mdHdhcmUgQ29uc3VsdGluZyBTZXJ2aWNlcywgTmF6YXJldGgsIFBB Ci0gICBGdWF0IEJhcmFuLCBDb2x1bWJpYSBVCi0gICBTdGFuIEJhcmJlciwgUmljZSBVCi0gICBK aW0gQmFyYm91ciwgVSBvZiBDb2xvcmFkbwotICAgRG9ubiBCYXVtZ2FydG5lciwgRGVsbAotICAg SWFuIEJlY2t3aXRoLCBEZWJpYW4gUHJvamVjdAotICAgTmVsc29uIEJlZWJlLCBVIG9mIFV0YWgK LSAgIEdlcnJ5IEJlbGFuZ2VyLCBDb2duaXRyb25pY3MKLSAgIEthcmwgQmVycnksIFVNQgotICAg TWFyayBCZXJyeW1hbiwgU0FJQwotICAgRGVhbiBXIEJldHRpbmdlciwgU1VOWQotICAgR2FyeSBC aWxrdXMKLSAgIFBldGVyIEJpbmRlcnVwLCBEZW5tYXJrCi0gICBEYXZpZCBCb2xlbiwgQWR2YW5j ZWQgTmV0d29ya3MgYW5kIFNlcnZpY2VzLCBJbmMuCi0gICBKb29wIEJvbmVuCi0gICBNYXJjIEJv dWNoZXIsIFUgb2YgTW9udHJlYWwKLSAgIENoYXJsZXMgQnJvb2tzLCBFRE4KLSAgIEJvYiBCcm93 bgotICAgTWlrZSBCcm93biwgUHVyZHVlIFUKLSAgIFJvYiBCcm93bgotICAgSmFjayBCcnlhbnMs IENhbGlmb3JuaWEgU3RhdGUgVSBhdCBMb25nIEJlYWNoCi0gICBNYXJrIEJ1ZGEsIERFQyAoVk1T KQotICAgRmVybmFuZG8gQ2FicmFsLCBQYWRyYW8gaVgsIEJyYXNpbGlhCi0gICBCam9ybiBDYXJs c3NvbiwgU3RvY2tob2xtIFVuaXZlcnNpdHkgQ29tcHV0ZXIgQ2VudHJlIFFaLCBTd2VkZW4KLSAg IEJpbGwgQ2F0Y2hpbmdzLCAoZm9ybWVybHkgb2YpIENvbHVtYmlhIFUKLSAgIEJvYiBDYXR0YW5p LCBDb2x1bWJpYSBVIENTIERlcHQKLSAgIERhdmlkZSBDZXJ2b25lLCBSb2NoZXN0ZXIgVQotICAg U2V0aCBDaGFpa2xpbiwgRGVubWFyawotICAgSm9obiBDaGFuZGxlciwgSGFydmFyZCBVIC8gU21p dGhzb25pYW4gQXN0cm9ub21pY2FsIE9ic2VydmF0b3J5Ci0gICBCZXJuYXJkIENoZW4sIFVDTEEK LSAgIEFuZHJldyBBIENoZXJub3YsIFJFTENPTSBUZWFtLCBNb3Njb3cKLSAgIEpvaG4gTCBDaG1p ZWxld3NraSwgQVQmVCwgTGlzbGUsIElMCi0gICBIb3dhcmQgQ2h1LCBVIG9mIE1pY2hpZ2FuCi0g ICBCaWxsIENvYWxzb24sIE1jRG9ubmVsbCBEb3VnbGFzCi0gICBCZXJ0aWUgQ29vcGVyc21pdGgs IExvbmRvbgotICAgQ2hyaXN0aWFuIENvcnRpCi0gICBDaGV0IENyZWlkZXIsIFUgb2YgV2VzdGVy biBPbnRhcmlvCi0gICBBbGFuIENyb3Nzd2VsbCwgQ29sdW1iaWEgVQotICAgSmVmZiBEYW1lbnMs IChmb3JtZXJseSBvZikgQ29sdW1iaWEgVQotICAgTWFyayBEYXZpZXMsIEJhdGggVSwgVUsKLSAg IFNpbi1pdGlyb3UgRGV6YXdhLCBGdWppZmlsbSwgSmFwYW4KLSAgIEpvZSBSLiBEb3VwbmlrLCBV dGFoIFN0YXRlIFUKLSAgIEZyYW5rIERyZWFubywgSG9uZXl3ZWxsCi0gICBKb2huIER1bmxhcCwg VSBvZiBXYXNoaW5ndG9uCi0gICBBbGV4IER1cHV5LCBTTUFSVC5DT00KLSAgIERhdmlkIER5Y2ss IEpvaG4gRmx1a2UgTWZnIENvLgotICAgU3RlZmFhbiBBLiBFZWNrZWxzLCBFdXJva29tLCBMdXhl bWJvdXJnCi0gICBOaWNrIEVmdGh5bWlvdQotICAgUGF1bCBFZ2dlcnQsIFR3aW4gU3VuLCBJbmMu LCBFbCBTZWd1bmRvLCBDQQotICAgQmVybmllIEVpYmVuLCBERUMKLSAgIFBldGVyIEVpY2hob3Ju LCBBc3N5c3QgSW50ZXJuYXRpb25hbAotICAgS3Jpc3RvZmZlciBFcmlrc3NvbiwgUGVyaWRvdCBL b25zdWx0IEFCLCBPZXJlYnJvLCBTd2VkZW4KLSAgIEpvaG4gUi4gRXZhbnMsIElSUywgS2Fuc2Fz IENpdHkKLSAgIEdsZW5uIEV2ZXJoYXJ0LCBSQ0EgTGFicwotICAgQ2hhcmxpZSBGaW5hbiwgQ3Jh eSBSZXNlYXJjaAotICAgSGVybSBGaXNjaGVyLCBFbmNpbm8sIENBIChleHRlbnNpdmUgY29udHJp YnV0aW9ucyB0byB2ZXJzaW9uIDQuMCkKLSAgIENhcmwgRm9uZ2hlaXNlciwgQ1dSVQotICAgTWlr ZSBGcmVlbWFuLCBCb25uZXZpbGxlIFBvd2VyIEF1dGhvcml0eQotICAgQ2FybCBGcmllZGJlcmcK LSAgIE1hcmNlbGxvIEZydXRpZywgQ2F0aG9saWMgVW5pdmVyc2l0eSwgU2FvIFBhdWxvLCBCcmF6 aWwgKFguMjUgc3VwcG9ydCkKLSAgIEhpcm9mdW1pIEZ1amlpLCBKYXBhbiBOYXQnbCBMYWIgZm9y IEhpZ2ggRW5lcmd5IFBoeXNpY3MsIFRva3lvIChLYW5qaSkKLSAgIENodWNrIEZ1bGxlciwgV2Vz dGluZ2hvdXNlIENvcnBvcmF0ZSBDb21wdXRlciBTZXJ2aWNlcwotICAgQW5keSBGeWZlLCBDYWx0 ZWNoCi0gICBDaHJpc3RpbmUgTS4gR2lhbm9uZSwgQ29sdW1iaWEgVQotICAgSm9obiBHaWxtb3Jl LCBVQyBCZXJrZWxleQotICAgTWFkaHVzdWRhbiBHaXl5YXJwdXJhbSwgSFAKLSAgIFJhaW5lciBH bGFzY2hpY2ssIFNpZW1lbnMgQUcsIFBhZGVyYm9ybgotICAgV2lsbGlhbSBILiBHbGFzcwotICAg R2VybWFuIEdvbGRzem1pZHQsIElCTQotICAgQ2h1Y2sgR29vZGhhcnQsIE5BU0EKLSAgIEFsaXN0 YWlyIEdvcm1hbiwgTmV3IFplYWxhbmQKLSAgIFJpY2hhcmQgR3JhdGlvbiwgQURGQSwgQXVzdHJh bGlhCi0gICBDaHJpcyBHcmVlbiwgRXNzZXggVSwgVUsKLSAgIEFsYW4gR3JpZWcsIER1bmRlZSBU ZWNoLCBTY290bGFuZAotICAgWWVrdGEgR3Vyc2VsLCBNSVQKLSAgIEppbSBHdXl0b24sIFJhbmQg Q29ycAotICAgTWljaGFlbCBIYWVydGVsCi0gICBCcnVubyBIYWlibGUKLSAgIEJvYiBIYWluLCBV TU4KLSAgIE1hcmlvbiBIYWthbnNvbiwgT1JTVAotICAgUmljaGFyZCBIYW1pbHRvbgotICAgSm9o biBIYW1pbHN0b24sIElvd2EgU3RhdGUgVQotICAgU2ltb24gSGFuaWEsIE5ldGhlcmxhbmRzCi0g ICBTdGFuIEhhbmtzLCBSaWNlIFUuCi0gICBLZW4gSGFycmVuc3RlaW4sIFNSSQotICAgRXVnZW5p YSBIYXJyaXMsIERhdGEgR2VuZXJhbCAoQU9TL1ZTKQotICAgRGF2aWQgSGFycmlzb24sIEtpbmdz dG9uIFdhcnJlbiBDb3JwCi0gICBMdWNhcyBIYXJ0LCBPcmVnb24gU3RhdGUgVW5pdmVyc2l0eQot ICAgSmFtZXMgSGFydmV5LCBJbmRpYW5hL1B1cmR1ZSBVIChWTVMpCi0gICBSb2IgSGVhbGV5Ci0g ICBDaHVjayBIZWRyaWNrLCBSdXRnZXJzIFUKLSAgIFJvbiBIZWlieSwgVGVjaG5pY2FsIFN5c3Rl bXMgRGl2aXNpb24sIE1vdG9yb2xhIENvbXB1dGVyIEdyb3VwCi0gICBTdGV2ZSBIZW1taW5nZXIs IFRla3Ryb25peAotICAgQ2hyaXN0aWFuIEhlbXNpbmcsIFJXVEggQWFjaGVuLCBHZXJtYW55IChP Uy05KQotICAgUmFuZG9scGggSGVyYmVyLCBVUyBET0UsCi0gICBBbmRyZXcgSGVyYmVydCwgTW9u YXNoIFVuaXYsIEF1c3RyYWxpYQotICAgTWFyY3VzIEhlcmJlcnQsIEdlcm1hbnkKLSAgIE1pa2Ug SGlja2V5LCBJVEkKLSAgIERhbiBIaWxkZWJyYW5kLCBRTlggU29mdHdhcmUgU3lzdGVtcyBJbmMs IEthbmF0YSwgT04gKFFOWCkKLSAgIFIgRSBIaWxsCi0gICBTdGVwaGFuIEhvZmZtYW4tRW1kZW4K LSAgIFN2ZW4gSG9sbXN0cm9tLCBBQkIgVXRpbGl0aWVzIEFCLCBTd2VkZW4KLSAgIEJpbGwgSG9t ZXIsIENyYXkgUmVzZWFyY2gKLSAgIFJheSBIdW50ZXIsIFRoZSBXb2xsb25nb25nIEdyb3VwCi0g ICBSYW5keSBIdW50emlnZXIsIE5hdGlvbmFsIExpYnJhcnkgb2YgTWVkaWNpbmUKLSAgIExhcnJ5 IEphY29icywgVHJhbnNhcmMKLSAgIFN0ZXZlIEplbmtpbnMsIExhbmNhc3RlciBVbml2ZXJzaXR5 LCBVSwotICAgRGF2ZSBKb2huc29uLCBHcmFkaWVudCBUZWNobm9sb2dpZXMKLSAgIE1hcmsgQiBK b2huc29uLCBBcHBsZSBDb21wdXRlcgotICAgSnlrZSBKb2tpbmVuLCBUYW1wZXJlIFVuaXZlcnNp dHkgb2YgVGVjaG5vbG9neSwgRmlubGFuZCAoUU5YKQotICAgRXJpYyBGIEpvbmVzLCBBVCZUCi0g ICBMdWtlIEpvbmVzLCBBVCZUCi0gICBQZXRlciBKb25lcywgVSBvZiBRdWViZWMgTW9udHJlYWwK LSAgIFBoaWwgSnVsaWFuLCBTQVMgSW5zdGl0dXRlCi0gICBQZXRlciBLYWJhbCwgVSBvZiBRdWVi ZWMKLSAgIE1pYyBLYWN6bWFyY3ppaywgVSBvZiBUZXhhcyBhdCBBdXN0aW4KLSAgIFNlcmdleSBL YXJ0YXNob2ZmLCBJbnN0LiBvZiBQcmVjaXNlIE1lY2hhbmljcyAmIENvbXB1dGVyIEVxdWlwbWVu dCwgTW9zY293Ci0gICBIb3dpZSBLYXllLCBDb2x1bWJpYSBVCi0gICBSb2IgS2Vkb2luLCBMaW5v dHlwZSBDbywgSGF1cHBhdWdlLCBOWSAoT1MvMikKLSAgIFBoaWwgS2VlZ3N0cmEKLSAgIE1hcmsg S2VubmVkeSwgSUJNCi0gICBUZXJyeSBLZW5uZWR5LCBTdCBQZXRlcidzIENvbGxlZ2UsIEplcnNl eSBDaXR5LCBOSiAoVk1TIGFuZCBtb3JlKQotICAgIkNhcmxvIEtpZCIsIFRlY2huaWNhbCBVbml2 ZXJzaXR5IG9mIERlbGZ0LCBOZXRoZXJsYW5kcwotICAgVGltIEtpZW50emxlCi0gICBQYXVsIEtp bW90bywgQ29ybmVsbCBVCi0gICBEb3VnbGFzIEtpbmdzdG9uLCBtb3JnYW4uY29tCi0gICBMYXdy ZW5jZSBLaXJieSwgV2lsdHNoaXJlLCBVSwotICAgVG9tIEtsb29zLCBTZXF1ZW50IENvbXB1dGVy IFN5c3RlbXMKLSAgIEd1ZW50ZXIgS25hdWYKLSAgIEppbSBLbnV0c29uLCBVIG9mIFRleGFzIGF0 IEF1c3RpbgotICAgSm9obiBULiBLb2hsIChCU0RJKQotICAgU2NvdHQgS3JhbWVyLCBTUkkgSW50 ZXJuYXRpb25hbCwgTWVubG8gUGFyaywgQ0EKLSAgIEpvaG4gS3JheW5hY2ssIFVTIFBvc3RhbCBT ZXJ2aWNlCi0gICBEYXZpZCBLcmlja2VyLCBFbmNvcmUgQ29tcHV0ZXIKLSAgIFRob21hcyBLcnVl Z2VyLCBVV00KLSAgIEJvIEt1bGxtYXIsIEFCQyBLbHViYmVuLCBTdG9ja2hvbG0sIGFuZCBDZW50 cmFsIEJhbmsgb2YgU3dlZGVuLCBLaXN0YQotICAgUi4gQnJhZCBLdW1tZXIsIEFUJlQgQmVsbCBM YWJzLCBBdGxhbnRhLCBHQQotICAgSm9obiBLdW56ZSwgVUMgQmVya2VsZXkKLSAgIERhdmlkIExh bmUsIEJTU0kgLyBCZWxsU291dGggKFN0cmF0dXMgVk9TLCBYLjI1KQotICAgQm9iIExhcnNvbiwg VVNDIChPUy05KQotICAgQmVydCBMYXZlcm1hbiwgR3JvbmluZ2VuIFUsIE5ldGhlcmxhbmRzCi0g ICBTdGV2ZSBMYXl0b24KLSAgIERhdmlkIExhd3llciwgVUMgSXJ2aW5lCi0gICBKYXNvbiBMZWhy Ci0gICBEYXZpZCBMZVZpbmUsIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgQ29ycG9yYXRpb24KLSAg IERhbmllbCBTLiBMZXdhcnQsIFVJVUMKLSAgIFMuTy4gTGlkaWUsIExlaGlnaCBVCi0gICBUb3Ig TGlsbHF2aXN0LCBIZWxzaW5raSBVLCBGaW5sYW5kCi0gICBEYXZpZC1NaWNoYWVsIExpbmNrZSwg VSBvZiBTdCBHYWxsZW4sIFN3aXR6ZXJsYW5kCi0gICBSb2JlcnQgTGlwZSAoZm9yIFNDTyBtYWtl ZmlsZSBlbnRyaWVzICYgYWR2aWNlKQotICAgRGVhbiBMb25nCi0gICBNaWtlIExvbmcsIEFuYWxv ZyBEZXZpY2VzLCBOb3J3b29kIE1BCi0gICBLZXZpbiBMb3dleSwgVSBvZiBTYXNrYXRjaGV3YW4g KE9TLzIpCi0gICBBbmR5IExvd3J5LCBDb2x1bWJpYSBVCi0gICBKYW1lcyBMdW1tZWwsIENhcHJp Y2EgVGVsZWNvbXB1dGluZyBSZXNvdXJjZXMgKFFOWCkKLSAgIExld2lzIE1jQ2FydGh5Ci0gICBE YXZpZCBNYWNLZW56aWUsIEVudmlyb25tZW50YWwgRGVmZW5zZSBGdW5kLCBVIG9mIE1hcnlsYW5k Ci0gICBKb2huIE1hY2tpbiwgVW5pdmVyc2l0eSBvZiBTaWRuZXksIEF1c3RyYWxpYQotICAgTWFy dGluIE1hY2xhcmVuLCBCYXRoIFUsIFVLCi0gICBDaHJpcyBNYWlvLCBDb2x1bWJpYSBVIENTIERl cHQKLSAgIE1vbnRzZXJyYXQgTWFuZSwgSFAsIEdyZW5vYmxlLCBGcmFuY2UKLSAgIEZ1bHZpbyBN YXJpbm8sIE9saXZldHRpLCBJdnJlYSwgSXRhbHkKLSAgIEFydGh1ciBNYXJzaCwgZGlyY3NhLm9y Zy5hdQotICAgUGV0ZXIgTWF1emV5LCBMdWNlbnQgVGVjaG5vbG9naWVzCi0gICBUeWUgTWNRdWVl biwgVXRhaCBTdGF0ZSBVCi0gICBUZWQgTWVkaW4KLSAgIEhlbGxtdXRoIE1pY2hhZWxpcywgSGFu c2VhdGlzY2hlciBDb21wdXRlcnNlcnZpY2UgR21iSCwgSGFtYnVyZywgR2VybWFueQotICAgTGVz bGllIE1pa2VzZWxsLCBBbWVyaWNhbiBGYXJtIEJ1cmVhdQotICAgVG9kZCBNaWxsZXIsIENvdXJ0 ZXNhbiBDb25zdWx0aW5nCi0gICBHYXJ5IE1pbGxzCi0gICBNYXJ0aW4gTWlub3csIERFQyAoVk1T KQotICAgUGF3YW4gTWlzcmEsIEJlbGxjb3JlCi0gICBLZW4gTWl6aWFsa28sIElCTSwgTWFuYXNz YXMsIFZBCi0gICBXb2xmZ2FuZyBNb2VsbGVyLCBERUNVUyBHZXJtYW55Ci0gICBSYXkgTW9vZHks IFB1cmR1ZSBVCi0gICBCcnVjZSBKIE1vb3JlLCBBbGxlbi1CcmFkbGV5IENvLCBIaWdobGFuZCBI ZWlnaHRzLCBPSCAoQXRhcmkgU1QpCi0gICBTdGV2ZSBNb3JsZXksIENvbnZleAotICAgUGV0ZXIg TW9zc2VsLCBDb2x1bWJpYSBVCi0gICBUb255IE1vdnNob24sIE5ZVQotICAgTG91IE11Y2Npb2xp LCBTd2Fuc29uIEFuYWx5c2lzIFN5c3RlbXMKLSAgIERhbiBNdXJwaHkKLSAgIE5lYWwgUC4gTXVy cGh5LCBIYXJzb2YgU3lzdGVtcywgV29uZGVyIExha2UgSUwKLSAgIEdhcnkgTXVzc2FyCi0gICBK b2huIE5hbGwsIEZTVQotICAgSmFjayBOZWxzb24sIFUgb2YgUGl0dHNidXJnaAotICAgSmltIE5v YmxlLCBQbGFubmluZyBSZXNlYXJjaCBDb3Jwb3JhdGlvbiAoTWFjaW50b3NoKQotICAgSWFuIE8n QnJpZW4sIEJhdGggVSwgVUsKLSAgIE1lbGlzc2EgTydOZWlsbCwgU0ZVCi0gICBKb2huIE93ZW5z Ci0gICBUaG9tYXMgUGlua2wsIEhlYWx0aCBCdXNpbmVzcyBTeXN0ZW1zIEluYy4KLSAgIE1pY2hh ZWwgUGlucywgSW93YSBDb21wdXRlciBBaWRlZCBFbmdpbmVlcmluZyBOZXR3b3JrCi0gICBBbmRy ZScgUGlyYXJkLCBVbml2ZXJzaXR5IG9mIExpZWdlLCBCZWxnaXVtCi0gICBQYXVsIFBsYWNld2F5 LCBPaGlvIFN0YXRlIFUKLSAgIFBpZXQgVy4gUGxvbXAsIElDQ0UsIEdyb25pbmdlbiBVbml2ZXJz aXR5LCBOZXRoZXJsYW5kcwotICAgS2VuIFBvdWx0b24sIEhQIExhYnMKLSAgIE1hbmZyZWQgUHJh bmdlLCBPYWtsYW5kIFUKLSAgIENocmlzdG9waGVyIFByYXR0LCBBUFYgQmFrZXIsIFVLCi0gICBG cmFuayBQcmluZGxlLCBOQURDCi0gICBUb255IFF1ZXJ1YmluLCBVIG9mIEhhd2FpaQotICAgSmVh bi1QaWVycmUgUmFkbGV5Ci0gICBBbnRvbiBSYW5nCi0gICBNaWtlIFJlY2h0bWFuCi0gICBTY290 dCBSaWJlCi0gICBBbGFuIFJvYmlldHRlLCBPeGZvcmQgVW5pdmVyc2l0eSwgVUsKLSAgIE1pY2hl bCBSb2JpdGFpbGxlLCBVIG9mIE1vbnRyZWFsIChNYWMpCi0gICBIdXcgUm9nZXJzLCBTY2h3ZWl6 ZXJpc2NoZSBLcmVkaXRhbnN0YWx0LCBadWVyaWNoCi0gICBOaWdlbCBSb2xlcywgQ2FtYnJpZGdl LCBFbmdsYW5kCi0gICBLYWkgVXdlIFJvbW1lbCwgVGVjaG5pc2NoZSBVbml2ZXJzaXRhZXQgTXVl bmNoZW4gKE9TLzIpCi0gICBMYXJyeSBSb3Nlbm1hbiAoQW1pZ2EpCi0gICBKYXkgUm91bWFuLCBV IG9mIE1pY2hpZ2FuCi0gICBKYWNrIFJvdXNlLCBTQVMgSW5zdGl0dXRlIChEYXRhIEdlbmVyYWwg YW5kL29yIEFwb2xsbykKLSAgIFN0ZXcgUnViZW5zdGVpbiwgSGFydmFyZCBVIChWTVMpCi0gICBH ZXJoYXJkIFJ1ZWNrbGUsIEZIIERhcm1zdGFkdCwgRmIuIEUvQXV0b21hdGlzaWVydW5nc3RlY2hu aWsKLSAgIEpvaG4gU2FudG9zLCBFRyZICi0gICBCaWxsIFNjaGlsaXQsIENvbHVtYmlhIFUKLSAg IFVsbGkgU2NobHVldGVyLCBSV1RIIEFhY2hlbiwgR2VybWFueSAoT1MtOSwgZXRjKQotICAgTWlj aGFlbCBTY2htaWR0LCBVIG9mIFBhZGVyYm9ybiwgR2VybWFueQotICAgRXJpYyBTY2hub2ViZWxl biwgQ29udmV4Ci0gICBCZW5uIFNjaHJlaWJlciwgREVDCi0gICBEYW4gU2NodWxsbWFuLCBERUMg KG1vZGVtcywgRElBTCBjb21tYW5kLCBldGMpCi0gICBKb2huIFNjaHVsdHosIDNNCi0gICBTdGV2 ZW4gU2NodWx0eiwgQ29udGVsIChQRFAtMTEpCi0gICBTdGV2ZW4gU2Nod2VkYQotICAgQVBQUCBT Y29yZXIsIExlZWRzIFBvbHl0ZWNobmljLCBVSwotICAgR29yZG9uIFNjb3R0LCBNaWNybyBGb2N1 cywgTmV3YnVyeSBVSwotICAgR2lzYmVydCBXLiBTZWxrZSwgV0lkTywgQm9ubiwgR2VybWFueQot ICAgS2lqYWwgU2hhaAotICAgRGF2aWQgU2luZ2VyLCBJQk0gQWxtYWRlbiBSZXNlYXJjaCBMYWJz Ci0gICBEYXZpZCBTaXplbGFuZCwgVSBvZiBMb25kb24gTWVkaWNhbCBTY2hvb2wKLSAgIEZyaWRy aWsgU2t1bGFzb24sIEljZWxhbmQKLSAgIFJpY2sgU2xhZGtleSAoTGludXgpCi0gICBEYXZlIFNs YXRlCi0gICBCcmFkbGV5IFNtaXRoLCBVQ0xBCi0gICBGcmVkIFNtaXRoLCBNZXJrIC8gQ29tcHV0 cml0aW9uCi0gICBSaWNoYXJkIFMgU21pdGgsIENhbCBTdGF0ZQotICAgUnlhbiBTdGFuaXNmZXIs IFVOVAotICAgQmVydGlsIFN0ZW5zdHJvZW0sIFN0b2NraG9sbSBVbml2ZXJzaXR5IENvbXB1dGVy IENlbnRyZSAoUVopLCBTd2VkZW4KLSAgIEphbWVzIFN0dXJkZXZhbnQsIENBUCBHRU1FTkkgQU1F UklDQSwgTWlubmVhcG9saXMKLSAgIFBldGVyIFN2YW5iZXJnLCBSb3lhbCBUZWNobi4gSFMsIFN3 ZWRlbgotICAgSmFtZXMgUi4gU3dlbnNvbiwgQWNjdS1XZWF0aGVyLCBJbmMuCi0gICBUZWQgVCdz bywgTUlUIChMaW51eCkKLSAgIEFuZHkgVGFuZW5iYXVtLCBWcmlqZSBVLCBBbXN0ZXJkYW0sIE5l dGhlcmxhbmRzCi0gICBTZXRoIFRoZXJpYXVsdCwgQ29sdW1iaWEgVQotICAgR2xlbiBUaG9iZQot ICAgTWFya2t1IFRvaWphbGEsIEhlbHNpbmtpIFUgb2YgVGVjaG5vbG9neQotICAgVGVlbXUgVG9y bWEsIEhlbHNpbmtpIFUgb2YgVGVjaG5vbG9neQotICAgTGludXMgVG9ydmFsZHMsIEhlbHNpbmtp Ci0gICBSaWNrIFRyb3hlbCwgTklICi0gICBXYXJyZW4gVHVja2VyLCBUcmlkb20gQ29ycCwgTW91 bnRhaW4gUGFyaywgR0EKLSAgIERhdmUgVHdldGVuLCBBTUVTLU5BUwotICAgRyBVZGRlYm9yZywg U3dlZGVuCi0gICBXYWx0ZXIgVW5kZXJ3b29kLCBGb3JkIEFlcm9zcGFjZQotICAgUGlldGVyIFZh biBEZXIgTGluZGVuLCBDZW50cmUgTW9uZGlhbCwgUGFyaXMKLSAgIEdlIHZhbiBHZWxkb3JwLCBO ZXRoZXJsYW5kcwotICAgRnJlZCB2YW4gS2VtcGVuLCBNSU5JWCBVc2VyIEdyb3VwLCBWb29yaG91 dCwgTmV0aGVybGFuZHMKLSAgIFdheW5lIFZhbiBQZWx0LCBHRS9DUkQKLSAgIE1hcmsgVmFzb2xs LCBPa2xhaG9tYSBTdGF0ZSBVIChWNyBVTklYKQotICAgS29uc3RhbnRpbiBWaW5vZ3JhZG92LCBJ Q1NUSSwgTW9zY293Ci0gICBQYXVsIFZpeGllLCBERUMKLSAgIEJlcm5pZSBWb2x6LCBQcm9jZXNz IFNvZnR3YXJlCi0gICBFZHVhcmQgVm9waWNrYSwgUHJhZ3VlIFVuaXZlcnNpdHkgb2YgRWNvbm9t aWNzLCBDemVjaCBSZXB1YmxpYwotICAgTWFydGluIFZvcmxhZW5kZXIKLSAgIERpbWl0cmkgVnVs aXMsIENVTlkKLSAgIFJvZ2VyIFdhbGxhY2UsIFJheXRoZW9uCi0gICBTdGVwaGVuIFdhbHRvbiwg Q2FsaWYgU3RhdGUgVSwgTm9ydGhyaWRnZSAoQW1pZ2EpCi0gICBKYW1pZSBXYXRzb24sIEFkYXNv ZnQsIFN3aXR6ZXJsYW5kIChBSVgpCi0gICBSaWNrIFdhdHNvbiwgVSBvZiBUZXhhcyAoTWFjaW50 b3NoKQotICAgRXJpYyBXZWF2ZXIsIENvbHVtYmlhIFUKLSAgIFNjb3R0IFdlaWthcnQgKEFzc29j aWF0aW9uIGZvciBQcm9ncmVzc2l2ZSBDb21tdW5pY2F0aW9ucykKLSAgIFJvYmVydCBXZWluZXIs IFByb2dyYW1taW5nIFBsdXMsIE5ldyBZb3JrIENpdHkKLSAgIExhdXJlbiBXZWluc3RlaW4sIFZv cnRleCBUZWNobmxvZ3kKLSAgIERhdmlkIFdleGVsYmxhdCwgQVQmVAotICAgQ2xhcmsgV2llcmRh LCBJbGx1bWluYXRpIE9ubGluZQotICAgSm9hY2hpbSBXaWVzZWwsIFUgb2YgS2FybHNydWhlCi0g ICBMb24gV2lsbGV0dCwgVSBvZiBVdGFoCi0gICBNaWNoYWVsIFdpbGxpYW1zLCBVQ0xBCi0gICBO YXRlIFdpbGxpYW1zLCBVIG9mIE1vbnRhbmEKLSAgIERhdmlkIFdpbHNvbgotICAgSm9lbGxlbiBX aW5kc29yLCBVIG9mIEFyaXpvbmEKLSAgIFBhdHJpY2sgV29sZmUsIEt1Y2sgJiBBc3NvY2lhdGVz LCBJbmMuCi0gICBHcmVnZyBXb25kZXJseSwgT2tsYWhvbWEgU3RhdGUgVSAoVjcgVU5JWCkKLSAg IEZhcnJlbGwgV29vZHMsIENvbmN1cnJlbnQgKGZvcm1lcmx5IE1hc3Njb21wKQotICAgRGF2ZSBX b29sbGV5LCBDQVAgQ29tbXVuaWNhdGlvbiBTeXN0ZW1zLCBMb25kb24KLSAgIEphY2sgV29vbGxl eSwgU0NUIENvcnAKLSAgIEZyYW5rIFdvcnRuZXIKLSAgIEtlbiBZYXAsIGZvcm1lcmx5IG9mIFUg b2YgUm9jaGVzdGVyCi0gICBKb2huIFplZWZmLCBBbm4gQXJib3IsIE1JCi0qLwotCi0jaW5jbHVk ZSAiY2tja2VyLmgiICAgICAgICAgICAgICAgICAgICAgLyogS2VybWl0IHN5bWJvbHMgKi8KLSNp bmNsdWRlICJja2NuZXQuaCIgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHN5bWJvbHMg Ki8KLQotI2lmZGVmIENLX1NTTAotI2luY2x1ZGUgImNrX3NzbC5oIgotI2VuZGlmIC8qIENLX1NT TCAqLwotCi0jaWZuZGVmIE5PU1BMCi0jaW5jbHVkZSAiY2t1dXNyLmgiCi0jZW5kaWYgLyogTk9T UEwgKi8KLQotI2lmZGVmIE9TMk9OTFkKLSNkZWZpbmUgSU5DTF9WSU8gICAgICAgICAgICAgICAg ICAgICAgICAvKiBOZWVkZWQgZm9yIGNrb2Nvbi5oICovCi0jaW5jbHVkZSA8b3MyLmg+Ci0jdW5k ZWYgQ09NTUVOVAotI2VuZGlmIC8qIE9TMk9OTFkgKi8KLQotI2lmZGVmIE5UCi0jaW5jbHVkZSA8 d2luZG93cy5oPgotI2luY2x1ZGUgPHRhcGkuaD4KLSNpbmNsdWRlICJja250YXAuaCIKLSNlbmRp ZiAvKiBOVCAqLwotCi0jaWZuZGVmIE5PU0VSVkVSCi0vKiBUZXh0IG1lc3NhZ2UgZGVmaW5pdGlv bnMuLiBlYWNoIHNob3VsZCBiZSAyNTYgY2hhcnMgbG9uZywgb3IgbGVzcy4gKi8KLSNpZmRlZiBN SU5JWAotY2hhciAqc3J2dHh0ID0gIlxyXG5cCi1FbnRlcmluZyBzZXJ2ZXIgbW9kZS5cclxuXDAi OwotI2Vsc2UKLSNpZmRlZiBPTERNU0cKLS8qCi0gIEl0IHNlZW1zIHRoZXJlIHdhcyBhIGxhcmdl IGluc3RhbGxhdGlvbiB0aGF0IHdhcyB1c2luZyBDLUtlcm1pdCA1QSgxNjUpCi0gIG9yIHRoZXJl YWJvdXRzLCB3aGljaCBoYWQgZGVwbG95ZWQgdGhvdXNhbmRzIG9mIE1TLURPUyBLZXJtaXQgc2Ny aXB0cyBpbgotICBzY2F0dGVyZWQgbG9jYXRpb25zIHRoYXQgbG9va2VkIGZvciBzdHJpbmdzIGlu IHRoZSBvbGQgc2VydmVyIG1lc3NhZ2UsCi0gIHdoaWNoIGNoYW5nZWQgaW4gNUEoMTgzKSwgQXVn dXN0IDE5OTIuCi0qLwotY2hhciAqc3J2dHh0ID0gIlxyXG5cCi1DLUtlcm1pdCBzZXJ2ZXIgc3Rh cnRpbmcuICBSZXR1cm4gdG8geW91ciBsb2NhbCBtYWNoaW5lIGJ5IHR5cGluZ1xyXG5cCi1pdHMg ZXNjYXBlIHNlcXVlbmNlIGZvciBjbG9zaW5nIHRoZSBjb25uZWN0aW9uLCBhbmQgaXNzdWUgZnVy dGhlclxyXG5cCi1jb21tYW5kcyBmcm9tIHRoZXJlLiAgVG8gc2h1dCBkb3duIHRoZSBDLUtlcm1p dCBzZXJ2ZXIsIGlzc3VlIHRoZVxyXG5cCi1GSU5JU0ggb3IgQllFIGNvbW1hbmQgYW5kIHRoZW4g cmVjb25uZWN0LlxuXAotXHJcblwwIjsKLSNlbHNlCi0jaWZkZWYgT1NLCi1jaGFyICpzcnZ0eHQg PSAiXHJcMDEyXAotRW50ZXJpbmcgc2VydmVyIG1vZGUuICBJZiB5b3VyIGxvY2FsIEtlcm1pdCBz b2Z0d2FyZSBpcyBtZW51IGRyaXZlbiwgdXNlXHJcMDEyXAotdGhlIG1lbnVzIHRvIHNlbmQgY29t bWFuZHMgdG8gdGhlIHNlcnZlci4gIE90aGVyd2lzZSwgZW50ZXIgdGhlIGVzY2FwZVxyXDAxMlwK LXNlcXVlbmNlIHRvIHJldHVybiB0byB5b3VyIGxvY2FsIEtlcm1pdCBwcm9tcHQgYW5kIGlzc3Vl IGNvbW1hbmRzIGZyb21cclwwMTJcCi10aGVyZS4gVXNlIFNFTkQgYW5kIEdFVCBmb3IgZmlsZSB0 cmFuc2Zlci4gVXNlIFJFTU9URSBIRUxQIGZvciBhIGxpc3Qgb2ZcclwwMTJcCi1vdGhlciBhdmFp bGFibGUgc2VydmljZXMuICBVc2UgQllFIG9yIEZJTklTSCB0byBlbmQgc2VydmVyIG1vZGUuXHJc MDEyXDAiOwotI2Vsc2UgLyogVU5JWCwgVk1TLCBBT1MvVlMsIGFuZCBhbGwgb3RoZXJzICovCi1j aGFyICpzcnZ0eHQgPSAiXHJcblwKLUVudGVyaW5nIHNlcnZlciBtb2RlLiAgSWYgeW91ciBsb2Nh bCBLZXJtaXQgc29mdHdhcmUgaXMgbWVudSBkcml2ZW4sIHVzZVxyXG5cCi10aGUgbWVudXMgdG8g c2VuZCBjb21tYW5kcyB0byB0aGUgc2VydmVyLiAgT3RoZXJ3aXNlLCBlbnRlciB0aGUgZXNjYXBl XHJcblwKLXNlcXVlbmNlIHRvIHJldHVybiB0byB5b3VyIGxvY2FsIEtlcm1pdCBwcm9tcHQgYW5k IGlzc3VlIGNvbW1hbmRzIGZyb21cclxuXAotdGhlcmUuICBVc2UgU0VORCBhbmQgR0VUIGZvciBm aWxlIHRyYW5zZmVyLiAgVXNlIFJFTU9URSBIRUxQIGZvciBhIGxpc3Qgb2ZcclxuXAotb3RoZXIg YXZhaWxhYmxlIHNlcnZpY2VzLiAgVXNlIEJZRSBvciBGSU5JU0ggdG8gZW5kIHNlcnZlciBtb2Rl LlxyXG5cMCI7Ci0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogT0xETVNHICovCi0jZW5kaWYg LyogTUlOSVggKi8KLSNlbHNlICAvKiBzZXJ2ZXIgbW9kZSBkaXNhYmxlZCAqLwotY2hhciAqc3J2 dHh0ID0gIiI7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQotaW50IGluaXRmbGcgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHN5c2luaXQoKSBoYXMgZXhlY3V0ZWQuLi4gKi8KLWludCBo b3djYWxsZWQgPSBJX0FNX0tFUk1JVDsgICAgICAgICAgICAvKiBIb3cgSSB3YXMgY2FsbGVkICov Ci1pbnQgaG10b3BsaW5lID0gMDsKLWludCBxdWl0dGluZyA9IDA7CQkJLyogSSdtIGluIHRoZSBh Y3Qgb2YgcXVpdHRpbmcgKi8KLQotI2lmZGVmIElLU0RDT05GCi1jaGFyICogaWtzZGNvbmYgPSBJ S1NEQ09ORjsgICAgICAgICAgICAgLyogSUtTRCBjb25maWd1cmF0aW9uIGZpbGUgKi8KLWludCAg ICBpa3NkY2YgICA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBIYXMgSUtTRCBjLmYuIGJlZW4g cHJvY2Vzc2VkPyAqLwotI2VuZGlmIC8qIElLU0RDT05GICovCi0KLWludCBzcnZjZG1zZyA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBbU2VydmVyXSBDRCBtZXNzYWdlICovCi1jaGFyICog Y2Rtc2dmaWxlWzhdID0geyBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwg fTsKLWNoYXIgKiBjZG1zZ3N0ciA9IE5VTEw7Ci1jaGFyICogY2tjZHBhdGggPSBOVUxMOwotCi0j aWZkZWYgTkxDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGV4dC1maWxlIGxpbmUg dGVybWluYXRvciAqLwotQ0hBUiBmZW9sID0gTkxDSEFSOwotI2Vsc2UKLUNIQVIgZmVvbCA9IDA7 Ci0jZW5kaWYgLyogTkxDSEFSICovCi0KLWludCBmYmxrc2l6ID0gREJMS1NJWjsgICAgICAgICAg LyogRmlsZSBibG9ja3NpemUgKi8KLWludCBmcmVjbCA9IERMUkVDTDsgICAgICAgICAgICAgLyog RmlsZSByZWNvcmQgbGVuZ3RoICovCi1pbnQgZnJlY2ZtID0gWFlGRl9TOyAgICAgICAgICAgIC8q IEZpbGUgcmVjb3JkIGZvcm1hdCAoZGVmYXVsdCA9IHN0cmVhbSkgKi8KLWludCBmb3JnID0gWFlG T19TOyAgICAgICAgICAgICAgLyogRmlsZSBvcmdhbml6YXRpb24gKHNlcXVlbnRpYWwpICovCi1p bnQgZmNjdHJsID0gWFlGUF9OOyAgICAgICAgICAgIC8qIEZpbGUgY2FycmlhZ2UgY29udHJvbCAo Y3RybCBjaGFycykgKi8KLWludCBmaWxlY2FzZSA9IEZJTEVDQVNFOyAgICAgICAgLyogQ2FzZSBt YXR0ZXJzIGluIGZpbGVuYW1lcyAqLwotaW50IHN0YXRoYWNrID0gMTsgICAgICAgICAgICAgICAv KiBGYXN0IGRpcmVjdG9yeSBsb29rdXBzIGJ5IGRlZmF1bHQgKi8KLQotY2hhciB1aWRidWZbVUlE QlVGTEVOXSA9IHsgTlVMLCBOVUwgfTsgIC8qIFVzZXIgSUQgYnVmZmVyICovCi1pbnQgY2ZpbGVm ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXBwbGljYXRpb24gKCJrZXJiYW5nIikg ZmlsZSBmbGFnICovCi1jaGFyIGNtZGZpbFtDS01BWFBBVEggKyAxXSA9IHsgTlVMLCBOVUwgfTsg LyogQXBwbGljYXRpb24gZmlsZSBuYW1lICovCi1pbnQgaGF2ZXVybCA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogVVJMIGdpdmVuIG9uIGNvbW1hbmQgbGluZSAqLwotCi0jaWZuZGVmIE5P WEZFUgotLyogTXVsdGktcHJvdG9jb2wgc3VwcG9ydCAqLwotCi1zdHJ1Y3QgY2tfcCBwdGFiW05Q Uk9UT1NdID0geyAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgS2VybWl0IHBhcnQgLi4uICov Ci0gIHsgIktlcm1pdCIsCi0gICAgRFJQU0laLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogUmVjZWl2ZSBwYWNrZXQgc2l6ZSAqLwotICAgIERTUFNJWiwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNlbmQgcGFja2V0IHNpemUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTZW5kLXBhY2tldC1zaXplLXNldCBmbGFnICovCi0gICAgREZX U0laLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93IHNpemUgKi8KLQotI2lm ZGVmIE5FV0RFRkFVTFRTCi0gICAgUFhfQ0FVLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQ29udHJvbCBjaGFyIHVucHJlZml4aW5nLi4uICovCi0jZWxzZQotICAgIFBYX0FMTCwKLSNl bmRpZiAvKiBORVdERUZBVUxUUyAqLwotCi0jaWZkZWYgVk1TICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRGVmYXVsdCBmaWxlbmFtZSBjb2xsaXNpb24gYWN0aW9uICovCi0gICAgWFlG WF9YLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVQTEFDRSBmb3IgVkFYL1ZNUyAq LwotI2Vsc2UKLSAgICBYWUZYX0IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCQUNL VVAgZm9yIGV2ZXJ5Ym9keSBlbHNlICovCi0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBPUzIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBmaWxlIG5hbWUgY29udmVy c2lvbiAqLwotICAgIFhZRk5fTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExpdGVy YWwgZm9yIE9TMiAqLwotI2Vsc2UKLSAgICBYWUZOX0MsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBDb252ZXJ0ZWQgZm9yIG90aGVycyAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAg UEFUSF9PRkYsICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgcGF0aG5hbWVzIE9GRiAqLwotICAg IFBBVEhfQVVUTywgICAgICAgICAgICAgICAgICAvKiBSZWNlaXZlIHBhdGhuYW1lcyBBVVRPICov Ci0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEhvc3QgcmVjZWl2ZSBpbml0aWF0 aW9uIHN0cmluZyAoYmluYXJ5KSAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAv KiBIb3N0IHJlY2VpdmUgaW5pdGlhdGlvbiBzdHJpbmcgKHRleHQpICAgKi8KLSAgICBOVUxMLCAg ICAgICAgICAgICAgICAgICAgICAgLyogSG9zdCBzZXJ2ZXIgc3RyaW5nICovCi0gICAgTlVMTCwg ICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIHByb3RvY29sIHNlbmQgY29tbWFuZCAo YmluYXJ5KSAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBw cm90b2NvbCBzZW5kIGNvbW1hbmQgKHRleHQpICAgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAg ICAgICAgICAgLyogRXh0ZXJuYWwgcHJvdG9jb2wgcmVjZWl2ZSBjb21tYW5kIChiaW4pICovCi0g ICAgTlVMTCB9ICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIHByb3RvY29sIHJlY2Vp dmUgY29tbWFuZCAodHh0KSAqLwotI2lmZGVmIENLX1hZWgotLAoteyJYTU9ERU0iLCAgICAxMjgs MTI4LC0xLC0xLCAgIDEsLTEsLTEsMCwwLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEx9LAoteyJYTU9ERU0tQ1JDIiwxMjgsMTI4LC0xLC0xLCAgLTEsLTEsLTEsMCwwLE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEx9LAoteyJZTU9ERU0iLCAgIC0xLCAtMSwtMSwtMSwg ICAgLTEsLTEsLTEsMCwwLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEx9LAoteyJZ TU9ERU0tZyIsIC0xLCAtMSwtMSwtMSwgICAgLTEsLTEsLTEsMCwwLE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEx9LAoteyJaTU9ERU0iLCAgIC0xLCAtMSwtMSwtMSxQWF9XSUwsLTEs LTEsMCwwLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEx9LAoteyJPdGhlciIsICAg IC0xLCAtMSwtMSwtMSwgICAgLTEsLTEsLTEsMCwwLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEx9Ci0jZW5kaWYgLyogQ0tfWFlaICovCi19OwotCi0vKiBEZWNsYXJhdGlvbnMgZm9y IFNlbmQtSW5pdCBQYXJhbWV0ZXJzICovCi0KLWludCBzcHNpeiA9IERTUFNJWiwgICAgICAgICAg ICAgICAgICAgICAvKiBDdXJyZW50IHBhY2tldCBzaXplIHRvIHNlbmQgKi8KLSAgICBzcG1heCA9 IERTUFNJWiwgICAgICAgICAgICAgICAgICAgICAvKiBCaWdnZXN0IHBhY2tldCBzaXplIHdlIGNh biBzZW5kICovCi0gICAgbGFzdHNwbWF4ID0gRFNQU0laLCAgICAgICAgICAgICAgICAgLyogU2Vu ZC1wYWNrZXQgc2l6ZSBsYXN0IHVzZWQgKi8KLSAgICBzcHNpenIgPSBEU1BTSVosICAgICAgICAg ICAgICAgICAgICAvKiBTZW5kLXBhY2tldCBzaXplIHJlcXVlc3RlZCAqLwotICAgIHNwc2l6ZiA9 IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgdG8gb3ZlcnJpZGUgc2l6ZSBuZWdv dGlhdGlvbiAqLwotICAgIHJwc2l6ID0gRFJQU0laLCAgICAgICAgICAgICAgICAgICAgIC8qIEJp Z2dlc3Qgd2Ugd2FudCB0byByZWNlaXZlICovCi0gICAgdXJwc2l6ID0gRFJQU0laLCAgICAgICAg ICAgICAgICAgICAgLyogVXNlci1yZXF1ZXN0ZWQgcmVjZWl2ZSBwa3Qgc2l6ZSAqLwotICAgIG1h eHJwcyA9IE1BWFJQLCAgICAgICAgICAgICAgICAgICAgIC8qIE1heGltdW0gaW5jb21pbmcgbG9u ZyBwYWNrZXQgc2l6ZSAqLwotICAgIG1heHNwcyA9IE1BWFNQLCAgICAgICAgICAgICAgICAgICAg IC8qIE1heGltdW0gb3V0Ym91bmQgbC5wLiBzaXplICovCi0gICAgbWF4dHJ5ID0gTUFYVFJZLCAg ICAgICAgICAgICAgICAgICAgLyogTWF4aW11bSByZXRyaWVzIHBlciBwYWNrZXQgKi8KLSAgICB3 c2xvdHMgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgc2l6ZSBjdXJyZW50 bHkgaW4gdXNlICovCi0gICAgd3Nsb3RyID0gREZXU0laLCAgICAgICAgICAgICAgICAgICAgLyog V2luZG93IHNpemUgZnJvbSBTRVQgV0lORE9XICovCi0gICAgd3Nsb3RuID0gMSwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogV2luZG93IHNpemUgbmVnb3RpYXRlZCBpbiBTLXBrdCAqLwotICAg IHRpbWVvdXRzID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBzdGF0aXN0aWNzIHJl cG9ydGluZyAqLwotICAgIHNwYWNrZXRzID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qICAu Li4gKi8KLSAgICBycGFja2V0cyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi4uICov Ci0gICAgcmV0cmFucyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgLyogIC4uLiAqLwotICAg IGNydW5jaGVkID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qICAuLi4gKi8KLSAgICB3bWF4 ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi4uICovCi0gICAgd2N1ciA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIC4uLiAqLwotICAgIHNydmlkbCA9IDAsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBpZGxlIHRpbWVvdXQgKi8KLSAgICBzcnZk aXMgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgZmlsZSB4ZmVyIGRpc3Bs YXkgKi8KLSAgICBzcnZ0aW0gPSBEU1JWVElNLCAgICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIg Y29tbWFuZCB3YWl0IHRpbWVvdXQgKi8KLSAgICBzcnZwaW5nID0gMSwgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTZXJ2ZXIga2VlcGFsaXZlICovCi0vKgotICB0aW1pbnQgaXMgdGhlIHRpbWVv dXQgaW50ZXJ2YWwgSSB1c2Ugd2hlbiB3YWl0aW5nIGZvciBhIHBhY2tldC4KLSAgcGt0dGltIGlz IHRoZSBTRVQgUkVDRUlWRSBUSU1FT1VUIHZhbHVlLCBzZW50IHRvIHRoZSBvdGhlciBLZXJtaXQu Ci0gIHJ0aW1vIGlzIHRoZSBTRVQgU0VORCBUSU1FT1VUIHZhbHVlLiAgcnRpbW8gaXMgdGhlIGlu aXRpYWwgdmFsdWUgb2YKLSAgdGltaW50LiAgdGltaW50IGlzIGNoYW5nZWQgYnkgdGhlIHZhbHVl IGluIHRoZSBpbmNvbWluZyBuZWdvdGlhdGlvbgotICBwYWNrZXQgdW5sZXNzIGEgU0VUIFNFTkQg VElNRU9VVCBjb21tYW5kIHdhcyBnaXZlbi4KLSovCi0gICAgdGltaW50ID0gRE1ZVElNLCAgICAg ICAgICAgICAgICAgICAgLyogVGltZW91dCBpbnRlcnZhbCBJIHVzZSAqLwotICAgIHBrdHRpbSA9 IFVSVElNRSwgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXQgSSB3YW50IHlvdSB0byB1c2Ug Ki8KLSAgICBydGltbyA9IERNWVRJTSwgICAgICAgICAgICAgICAgICAgICAvKiBOb3JtYWwgcGFj a2V0IHdhaXQgdGltZW91dCAqLwotICAgIHRpbWVmID0gMCwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZsYWcgdG8gb3ZlcnJpZGUgd2hhdCB5b3UgYXNrICovCi0jaWZkZWYgQ0tfVElNRVJT Ci0gICAgcnR0ZmxnID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIGR5bmFtaWMg cm91bmQtdHJpcCB0aW1lcnMgKi8KLSNlbHNlCi0gICAgcnR0ZmxnID0gMCwgICAgICAgICAgICAg ICAgICAgICAgICAgLyogVXNlIGZpeGVkIHRpbWVyICovCi0jZW5kaWYgLyogQ0tfVElNRVJTICov Ci0gICAgbWludGltZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgLyogTWluaW11bSB0aW1l b3V0ICovCi0gICAgbWF4dGltZSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgLyogTWF4aW11 bSB0aW1lb3V0ICovCi0KLSAgICBucGFkID0gTVlQQUROLCAgICAgICAgICAgICAgICAgICAgICAv KiBIb3cgbXVjaCBwYWRkaW5nIHRvIHNlbmQgKi8KLSAgICBteXBhZG4gPSBNWVBBRE4sICAgICAg ICAgICAgICAgICAgICAvKiBIb3cgbXVjaCBwYWRkaW5nIHRvIGFzayBmb3IgKi8KLSAgICBiY3Ry ID0gREZCQ1QsICAgICAgICAgICAgICAgICAgICAgICAvKiBCbG9jayBjaGVjayB0eXBlIHJlcXVl c3RlZCAqLwotICAgIGJjdHUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJsb2Nr IGNoZWNrIHR5cGUgdXNlZCAqLwotICAgIGJjdGwgPSAxLCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEJsb2NrIGNoZWNrIGxlbmd0aCAqLwotICAgIGJjdGYgPSAwLAkJCQkvKiBCbG9jayBj aGVjayB0eXBlIDMgZm9yY2VkIG9uIGFsbCAqLwotICAgIGNfc2F2ZSA9IC0xLCAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEJsb2NrIGNoZWNrIHNhdmluZyBhbmQgcmVzdG9yaW5nICovCi0gICAg c3Nfc2F2ZSA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAgLyogU2xvdy1zdGFydCBzYXZpbmcg YW5kIHJlc3RvcmluZyAqLwotICAgIGVicSA9ICBNWUVCUSwgICAgICAgICAgICAgICAgICAgICAg IC8qIDh0aCBiaXQgcHJlZml4ICovCi0gICAgZWJxZmxnID0gMCwgICAgICAgICAgICAgICAgICAg ICAgICAgLyogOHRoLWJpdCBxdW90aW5nIGZsYWcgKi8KLSAgICBycWYgPSAtMSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBGbGFnIHVzZWQgaW4gOGJxIG5lZ290aWF0aW9uICovCi0gICAg cnEgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZWQgOGJxIGJpZCAq LwotICAgIHNxID0gJ1knLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbnQgOGJxIGJp ZCAqLwotICAgIHJwdCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGVhdCBj b3VudCAqLwotICAgIHJwdHEgPSBNWVJQVFEsICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGVh dCBwcmVmaXggKi8KLSAgICBycHRmbGcgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXBlYXQgcHJvY2Vzc2luZyBmbGFnICovCi0gICAgcnB0ZW5hID0gMSwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUmVwZWF0IHByb2Nlc3NpbmcgZW5hYmxlZCAqLwotICAgIHhmcmNhbiA9IDEs ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGNhbmNlbGxhdGlvbiBlbmFibGVk ICovCi0gICAgeGZyaW50ID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIg aW50ZXJydXB0aW9uIGVuYWJsZWQgKi8KLSAgICB4ZnJjaHIgPSAzLCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBUcmFuc2ZlciBjYW5jZWwgY2hhciA9IEN0cmwtQyAqLwotICAgIHhmcm51bSA9 IDMsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lZWQgdGhyZWUgb2YgdGhlbSBieSBkZWZh dWx0ICovCi0gICAgZ194ZnJ4bGEgPSAtMTsKLSAgICBjaGFyICogeGZybXNnID0gTlVMTDsgICAg ICAgICAgICAgICAvKiBNZXNzYWdlIGZvciBmLnQuIGRpc3BsYXkgc2NyZWVuICovCi0jZW5kaWYg LyogTk9YRkVSICovCi0KLSNpZmRlZiBOT0NTRVRTCi1pbnQgeGZyeGxhID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiAqLwotI2Vsc2UKLWlu dCB4ZnJ4bGEgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmFibGVkIG9yIGRpc2Fi bGVkICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi1pbnQgaGF2ZWxmcyA9IDA7CQkJLyogTGFy Z2UgZmlsZSBzdXBwb3J0IGF2YWlsYWJsZSAqLwotCi0jaWZuZGVmIE5PWEZFUgotaW50IGVwa3Rm bGcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEUtUEFDS0VUIGNvbW1hbmQgYWN0aXZl ICovCi0KLWludCBjYXBhcyAgPSA5LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb3NpdGlv biBvZiBDYXBhYmlsaXRpZXMgKi8KLSAgICBscGNhcGIgPSAyLCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBMb25nIFBhY2tldCBjYXBhYmlsaXR5ICovCi0gICAgbHBjYXByID0gMSwgICAgICAg ICAgICAgICAgICAgICAgICAgLyogIHJlcXVlc3RlZCAqLwotICAgIGxwY2FwdSA9IDAsICAgICAg ICAgICAgICAgICAgICAgICAgIC8qICB1c2VkICovCi0gICAgc3djYXBiID0gNCwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU2xpZGluZyBXaW5kb3cgY2FwYWJpbGl0eSAqLwotICAgIHN3Y2Fw ciA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICByZXF1ZXN0ZWQgKGFsbG93ZWQpICov Ci0gICAgc3djYXB1ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHVzZWQgKi8KLSAg ICBhdGNhcGIgPSA4LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdHRyaWJ1dGUgY2FwYWJp bGl0eSAqLwotICAgIGF0Y2FwciA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICByZXF1 ZXN0ZWQgKi8KLSAgICBhdGNhcHUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgdXNl ZCAqLwotICAgIHJzY2FwYiA9IDE2LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFU0VORCBj YXBhYmlsaXR5ICovCi0gICAgcnNjYXByID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyog IHJlcXVlc3RlZCBieSBkZWZhdWx0ICovCi0gICAgcnNjYXB1ID0gMCwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogIHVzZWQgKi8KLSAgICBsc2NhcGIgPSAzMiwgICAgICAgICAgICAgICAgICAg ICAgICAvKiBMb2NraW5nIFNoaWZ0IGNhcGFiaWxpdHkgKi8KLSAgICBsc2NhcHIgPSAxLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAgcmVxdWVzdGVkIGJ5IGRlZmF1bHQgKi8KLSAgICBsc2Nh cHUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgdXNlZCAqLwotCi0vKiBGbGFncyBm b3Igd2hldGhlciB0byB1c2UgcGFydGljdWxhciBhdHRyaWJ1dGVzICovCi0KLWludCBhdGVuY2kg PSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmNvZGluZyBpbiAqLwotICAgIGF0ZW5j byA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuY29kaW5nIG91dCAqLwotICAgIGF0 ZGF0aSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGUgaW4gKi8KLSAgICBhdGRh dG8gPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRlIG91dCAqLwotICAgIGF0ZGlz aSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3Bvc2l0aW9uIGluL291dCAqLwot ICAgIGF0ZGlzbyA9IDEsCi0gICAgYXRsZW5pID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAg LyogTGVuZ3RoIGluL291dCAoYm90aCBraW5kcykgKi8KLSAgICBhdGxlbm8gPSAxLAotICAgIGF0 YmxraSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJsb2Nrc2l6ZSBpbi9vdXQgKi8K LSAgICBhdGJsa28gPSAxLAotICAgIGF0dHlwaSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZpbGUgdHlwZSBpbi9vdXQgKi8KLSAgICBhdHR5cG8gPSAxLAotICAgIGF0c2lkaSA9IDEs ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbSBJRCBpbi9vdXQgKi8KLSAgICBhdHNp ZG8gPSAxLAotICAgIGF0c3lzaSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgLyogU3lzdGVt LWRlcGVuZGVudCBwYXJhbWV0ZXJzIGluL291dCAqLwotICAgIGF0c3lzbyA9IDE7Ci0KLWludCBk aXNwb3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwb3NpdGlvbiAqLwotCi0j aWZkZWYgQ0tfUEVSTVMKLWludCBhdGxwcmkgPSAxLAotICAgIGF0bHBybyA9IDEsCi0gICAgYXRn cHJpID0gMSwKLSAgICBhdGdwcm8gPSAxOwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0KLWludCBh dGZybWkgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNvcmQgRm9ybWF0IGluL291 dCAqLwotICAgIGF0ZnJtbyA9IDE7Ci0KLSNpZmRlZiBTVFJBVFVTCi1pbnQgYXRjcmVpID0gMSwg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3JlYXRvciBJRCBpbi9vdXQgKi8KLSAgICBhdGNy ZW8gPSAxLAotICAgIGF0YWN0aSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFjY291 bnQgaW4vb3V0ICovCi0gICAgYXRhY3RvID0gMTsKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0KLWlu dCBzcHJtbGVuID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kL1JlY2VpdmUgcHJv dG9jb2wgcGFyYW1ldGVyICovCi1pbnQgcnBybWxlbiA9IC0xOyAgICAgICAgICAgICAgICAgICAg ICAgLyogc3RyaW5nIGxlbmd0aCBsaW1pdHMgKi8KLWludCBzZW5kaXBrdHMgPSAxOyAgICAgICAg ICAgICAgICAgICAgICAvKiBTZW5kIEkgcGFja2V0cyAqLwotCi1DSEFSIHBhZGNoID0gTVlQQURD LCAgICAgICAgICAgICAgICAgICAgLyogUGFkZGluZyBjaGFyYWN0ZXIgdG8gc2VuZCAqLwotICAg IG15cGFkYyA9IE1ZUEFEQywgICAgICAgICAgICAgICAgICAgIC8qIFBhZGRpbmcgY2hhcmFjdGVy IHRvIGFzayBmb3IgKi8KLSAgICBzZW9sID0gTVlFT0wsICAgICAgICAgICAgICAgICAgICAgICAv KiBFbmQtT2YtTGluZSBjaGFyYWN0ZXIgdG8gc2VuZCAqLwotICAgIGVvbCA9IE1ZRU9MLCAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEVuZC1PZi1MaW5lIGNoYXJhY3RlciB0byBsb29rIGZvciAq LwotICAgIGN0bHEgPSBDVExRLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgcHJl Zml4IGluIGluY29taW5nIGRhdGEgKi8KLSAgICBteWN0bHEgPSBDVExRLCAgICAgICAgICAgICAg ICAgICAgICAvKiBPdXRib3VuZCBjb250cm9sIGNoYXJhY3RlciBwcmVmaXggKi8KLSAgICBteXJw dHEgPSBNWVJQVFE7ICAgICAgICAgICAgICAgICAgICAvKiBSZXBlYXQgcHJlZml4IEkgd2FudCB0 byB1c2UgKi8KLQotaW50IHJwdG1pbiA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJl cGVhdC1jb3VudCBtaW5pbXVtICovCi0KLWludCB1c2VwaXBlcyA9IDAsICAgICAgICAgICAgICAg ICAgICAgICAvKiBVc2VkIGZvciB4ZmVyIHRvL2Zyb20gcGlwZXMgKi8KLSAgICBnX3VzZXBpcGVz ID0gLTE7Ci0KLWNoYXIgKiBmaWxlZmlsZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBGaWxl IGNvbnRhaW5pbmcgbGlzdCBvZiBmaWxlbmFtZXMgKi8KLS8qIENEIG1lc3NhZ2UgZmlsZW5hbWUg bGlzdCAqLwotCi1jaGFyIHdob2FyZXVbMTZdID0geyBOVUwsIE5VTCB9OyAgICAgICAgLyogU3lz dGVtIElEIG9mIG90aGVyIEtlcm1pdCAqLwotaW50IHN5c2luZGV4ID0gLTE7ICAgICAgICAgICAg ICAgICAgICAgIC8qIGFuZCBpbmRleCB0byBpdHMgc3lzdGVtIElEIHN0cnVjdCAqLwotaW50IG15 aW5kZXggID0gLTE7Ci1pbnQgd2VhcmVhbGlrZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyog MiBLZXJtaXRzIGhhdmUgY29tcGF0aWJsZSBzeXNpZHMgKi8KLWNoYXIgKiBja3N5c2lkID0gICAg ICAgICAgICAgICAgICAgICAgICAvKiBNeSBzeXN0ZW0gSUQgKi8KLSNpZmRlZiBVTklYCi0gICAg IlUxIgotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiRDciCi0jZWxzZQotI2lmZGVmIE9TSwotICAg ICJVRCIKLSNlbHNlCi0jaWZkZWYgQU1JR0EKLSAgICAiTDMiCi0jZWxzZQotI2lmZGVmIE1BQwot ICAgICJBMyIKLSNlbHNlCi0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSAgICAiVU4iCi0jZWxzZSAv KiBOVCAqLwotICAgICJVTyIKLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UgLyogT1MyICovCi0jaWZk ZWYgZGF0YWdlbmVyYWwKLSAgICAiRjMiCi0jZWxzZQotI2lmZGVmIEdFTURPUwotICAgICJLMiIK LSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotICAgICJNViIKLSNlbHNlCi0gICAgIiIKLSNlbmRpZiAv KiBTVFJBVFVTICovCi0jZW5kaWYgLyogR0VNRE9TICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBBTUlHQSAq LwotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVOSVggKi8K LSAgICA7Ci0KLWludCBvb3B0cyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPLVBh Y2tldCBPcHRpb25zICovCi1pbnQgb21vZGUgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAg LyogTy1QYWNrZXQgVHJhbnNmZXIgTW9kZSAqLwotaW50IG9uYW1lID0gLTE7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE8tUGFja2V0IEZpbGVuYW1lIE9wdGlvbnMgKi8KLWludCBvcGF0aCA9 IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPLVBhY2tldCBQYXRobmFtZSBPcHRpb25z ICovCi0KLXN0cnVjdCB6YXR0ciBpYXR0cjsgICAgICAgICAgICAgICAgICAgICAvKiBJbmNvbWlu ZyBmaWxlIGF0dHJpYnV0ZXMgKi8KLQotI2lmZGVmIFZNUwotLyogVk1TIGxhYmVsZWQgZmlsZSBk ZWZhdWx0IG9wdGlvbnMgLSBuYW1lIG9ubHkuICovCi1pbnQgbGZfb3B0cyA9IExCTF9OQU07Ci0j ZWxzZQotI2lmZGVmIE9TMgotLyogT1MvMiBsYWJlbGVkIGZpbGUgZGVmYXVsdCBvcHRpb25zLCBh bGwgYXR0cmlidXRlcyBidXQgYXJjaGl2ZWQuICovCi11bnNpZ25lZCBsb25nIGludCBsZl9vcHRz ID0gTEJMX0VYVHxMQkxfSElEfExCTF9ST3xMQkxfU1lTOwotI2Vsc2UKLWludCBsZl9vcHRzID0g MDsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotLyogUGFja2V0LXJlbGF0 ZWQgdmFyaWFibGVzICovCi0KLWludCBwa3RudW0gPSAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDdXJyZW50IHBhY2tldCBudW1iZXIgKi8KLSAgICBzbmR0eXAgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUeXBlIG9mIHBhY2tldCBqdXN0IHNlbnQgKi8KLSAgICByY3Z0eXAg PSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIG9mIHBhY2tldCBqdXN0IHJlY2Vp dmVkICovCi0gICAgcnNuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVjZWl2 ZWQgcGFja2V0IHNlcXVlbmNlIG51bWJlciAqLwotICAgIHJsbiwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFJlY2VpdmVkIHBhY2tldCBsZW5ndGggKi8KLSAgICBzaXplLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHNpemUgb2Ygb3V0cHV0IHBrdCBk YXRhICovCi0gICAgb3NpemUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmlv dXMgb3V0cHV0IHBhY2tldCBkYXRhIHNpemUgKi8KLSAgICBtYXhzaXplLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBNYXggc2l6ZSBmb3IgYnVpbGRpbmcgZGF0YSBmaWVsZCAqLwotICAg IHNwa3RsID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBwYWNrZXQgYmVp bmcgc2VudCAqLwotICAgIHJwa3RsID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExl bmd0aCBvZiBwYWNrZXQganVzdCByZWNlaXZlZCAqLwotICAgIHBrdHBhdXMgPSAwLCAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEludGVycGFja2V0IHBhdXNlIGludGVydmFsLCBtc2VjICovCi0g ICAgcnByaW50ZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVNT1RFIFBSSU5UIGZs YWcgKi8KLSAgICBybWFpbGYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNQUlMIGZs YWcgKi8KLSAgICB4ZmVyc3RhdCA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAvKiBTdGF0dXMg b2YgbGFzdCB0cmFuc2FjdGlvbiAqLwotICAgIGZpbGVzdGF0dXMgPSAwOyAgICAgICAgICAgICAg ICAgICAgIC8qIFN0YXR1cyBvZiBsYXN0IGZpbGUgdHJhbnNmZXIgKi8KLQotQ0hBUiBwa3Rtc2di dWZbUEtUTVNHTEVOKzFdOwotQ0hBUiAqZXBrdG1zZyA9IHBrdG1zZ2J1ZjsKLQotI2lmZGVmIHBk cDExCi1pbnQgc3J2Y21kbGVuID0gTUFYUlA7ICAgICAgICAgICAgICAgICAgLyogc3J2Y21kIGJ1 ZmZlciBsZW5ndGggKi8KLSNlbHNlCi0jaWZkZWYgRFlOQU1JQwotaW50IHNydmNtZGxlbiA9IE1B WFJQOwotI2Vsc2UKLWludCBzcnZjbWRsZW4gPSAwOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLSNl bmRpZiAvKiBwZHAxMSAqLwotCi1DSEFSCi0jaWZkZWYgcGRwMTEKLSAgICBzcnZjbWRidWZbTUFY UlArNF0sCi0gICAgKnNydmNtZCA9IHNydmNtZGJ1ZiwKLSNlbHNlCi0jaWZkZWYgRFlOQU1JQwot ICAgICpzcnZjbWQgPSAoQ0hBUiAqKTAsICAgICAgICAgICAgICAgIC8qIFdoZXJlIHRvIGRlY29k ZSBzZXJ2ZXIgY29tbWFuZCAqLwotI2Vsc2UKLSAgICBzcnZjbWRidWZbTUFYUlArNF0sCi0gICAg KnNydmNtZCA9IHNydmNtZGJ1ZiwKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0jZW5kaWYgLyogcGRw MTEgKi8KLSAgICBwYWRidWZbOTZdLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCdWZmZXIg Zm9yIHNlbmQtcGFkZGluZyAqLwotICAgICpyZWNwa3QsCi0gICAgKnJkYXRhcCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byByZWNlaXZlZCBwYWNrZXQgZGF0YSAqLwot ICAgICpkYXRhID0gKENIQVIgKikwLCAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gc2Vu ZC1wYWNrZXQgZGF0YSAqLwotICAgICpzcnZwdHIsICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFBvaW50ZXIgdG8gc3J2Y21kICovCi0gICAgbXlzdGNoID0gU09ILCAgICAgICAgICAgICAg ICAgICAgICAgLyogT3V0Ym91bmQgcGFja2V0LXN0YXJ0IGNoYXJhY3RlciAqLwotICAgIHN0Y2hy ID0gU09IOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluY29taW5nIHBhY2tldC1zdGFydCBj aGFyYWN0ZXIgKi8KLQotLyogRmlsZS1yZWxhdGVkIHZhcmlhYmxlcyAqLwotCi0jaWZuZGVmIE5P TVNFTkQgICAgICAgICAgICAgICAgICAgICAgICAgLyogTXVsdGlwbGUgU0VORCAqLwotc3RydWN0 IGZpbGVsaXN0ICogZmlsZWhlYWQgPSBOVUxMOyAgICAgIC8qIFNFTkQgbGlzdCAqLwotc3RydWN0 IGZpbGVsaXN0ICogZmlsZXRhaWwgPSBOVUxMOwotc3RydWN0IGZpbGVsaXN0ICogZmlsZW5leHQg PSBOVUxMOwotaW50IGFkZGxpc3QgPSAwOwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQotY2hhciBm aWxuYW1bQ0tNQVhQQVRIICsgMV07ICAgICAgICAgICAgIC8qIE5hbWUgb2YgY3VycmVudCBmaWxl LiAqLwotY2hhciBvZmlsbmFtW0NLTUFYUEFUSCArIDFdOyAgICAgICAgICAgIC8qIE9yaWdpbmFs IG5hbWUuICovCi0KLWludCBwaXBlc2VuZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBO b256ZXJvIGlmIHNlbmRpbmcgZnJvbSBwaXBlICovCi0jaWZkZWYgUElQRVNFTkQKLWNoYXIgKiBz bmRmaWx0ZXIgPSBOVUxMOyAgICAgICAgICAgICAgICAvKiBTZW5kIGFuZCByZWNlaXZlIGZpbHRl cnMgKi8KLWNoYXIgKiByY3ZmaWx0ZXIgPSBOVUxMOwotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0K LWNoYXIgKiogc25kYXJyYXkgPSBOVUxMOyAgICAgICAgICAgICAgICAvKiBTRU5EIC9BUlJBWSBw b2ludGVyIGFuZCByYW5nZSAqLwotI2lmbmRlZiBOT1NQTAotaW50IHNuZHhsbyA9IC0xLCBzbmR4 aGkgPSAtMSwgc25keGluID0gLTE7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRpZiAvKiBOT1hG RVIgKi8KLQotI2lmbmRlZiBOT1NFUlZFUgotaW50IG5nZXRwYXRoID0gMDsgICAgICAgICAgICAg ICAgICAgICAgIC8qIEdFVCBzZWFyY2ggcGF0aCAqLwotaW50IGZyb21nZXRwYXRoID0gMDsKLWNo YXIgKiBnZXRwYXRoW01BWEdFVFBBVEhdOwotY2hhciAqIHhfdXNlciA9IE5VTEw7ICAgICAgICAg ICAgICAgICAgIC8qIFNlcnZlciBsb2dpbiBpbmZvcm1hdGlvbiAqLwotY2hhciAqIHhfcGFzc3dk ID0gTlVMTDsKLWNoYXIgKiB4X2FjY3QgPSBOVUxMOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0K LWludCB4X2xvZ2luID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2dpbiByZXF1aXJl ZCAqLwotaW50IHhfbG9nZ2VkID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZXIgaXMg bG9nZ2VkIGluICovCi0KLWV4dGVybiBpbnQgdGltZWxpbWl0OwotCi0jaWZkZWYgQ0tfTE9HSU4K LWludCBsb2dpbnRpbW8gPSAzMDA7ICAgICAgICAgICAgICAgICAgICAvKiBMb2dpbiB0aW1lb3V0 ICovCi1jaGFyICogdXNlcmZpbGUgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogRm9yYmlkZGVu IHVzZXIgZmlsZSAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jaWZkZWYgSUtTRAotY2hhciAq IGFub25maWxlID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIEFub255bW91cyBsb2dpbiBpbml0 IGZpbGUgKi8KLWNoYXIgKiBhbm9ucm9vdCA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBBbm9u eW1vdXMgZmlsZS1zeXN0ZW0gcm9vdCAqLwotaW50IGlrc190aW1vICA9IDMwMDsgICAgICAgICAg ICAgICAgICAgIC8qIDUgbWludXRlcyBpZGxlIHRpbW8gKi8KLWludCBpa3NfcmV0cnkgPSAzOyAg ICAgICAgICAgICAgICAgICAgICAvKiAzIGF0dGVtcHRzIGF0IGxvZ2luICovCi0jZW5kaWYgLyog SUtTRCAqLwotCi0jaWZkZWYgQ0tTWVNMT0cKLWV4dGVybiBWT0lEIHpzeXNsb2coKTsKLWV4dGVy biBpbnQgY2t4bG9nZ2luZywgY2t4c3lzbG9nOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0KLUNL X09GRl9UIGZzaXplID0gKENLX09GRl9UKTAsCQkvKiBTaXplIG9mIGN1cnJlbnQgZmlsZSAqLwot IHNlbmRzdGFydCA9IChDS19PRkZfVCkwLAkJLyogU0VORCBzdGFydCBwb3NpdGlvbiAqLwotIGNh bGlicmF0ZSA9IChDS19PRkZfVCkwOwkJLyogTm9uemVybyBpZiBjYWxpYnJhdGlvbiBydW4gKi8K LQotaW50IG56eG9wdHMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9wdGlvbnMgZm9y IG56eHBhbmQoKSAqLwotaW50IG5maWxzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE51bWJlciBvZiBmaWxlcyBpbiBmaWxlIGdyb3VwICovCi1pbnQgd2lsZGVuYSA9IDE7CQkJLyog V2lsZGNhcmQgZXhwYW5zaW9uIGVuYWJsZWQgKi8KLSNpZmRlZiBVTklYCi1pbnQgd2lsZHhwYW5k ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogV2hvIGV4cGFuZHMgd2lsZGNhcmRzLCAwPUtl cm1pdC4uICovCi0jZWxzZSAvKiBVTklYICovCi0jaWZkZWYgU1RSQVRVUwotaW50IHdpbGR4cGFu ZCA9IDE7CQkJLyogMT1TaGVsbC4gKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyog VU5JWCAqLwotI2lmZGVmIFVOSVhPUk9TSwotaW50IG1hdGNoZG90ID0gMDsgICAgICAgICAgICAg ICAgICAgICAgIC8qIFdoZXRoZXIgdG8gbWF0Y2ggZG90IGZpbGVzICovCi0jZWxzZQotaW50IG1h dGNoZG90ID0gMTsKLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLWludCBtYXRjaGZpZm8gPSAwOwkJ CS8qIFdoZXRoZXIgdG8gbWF0Y2ggRklGTyAiZmlsZXMiICovCi1pbnQgY2xmaWxzID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgY29tbWFuZC1saW5lIGZpbGVzICovCi1p bnQgc3RheWZsZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgInN0YXki LCBpLmUuICItUyIgKi8KLWludCB4ZmluaXNoID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAv KiBGbGFnIGZvciBGSU5JU0ggPSBFWElUICovCi1sb25nIHp0dXNlYyA9IC0xTDsgICAgICAgICAg ICAgICAgICAgICAgLyogVXNlZCB3aXRoIHp0aW1lKCkgKi8KLWxvbmcgenRtc2VjID0gLTFMOyAg ICAgICAgICAgICAgICAgICAgICAvKiBEaXR0byAqLwotCi0vKiBDb21tdW5pY2F0aW9uIGRldmlj ZSAvIGNvbm5lY3Rpb24gdmFyaWFibGVzICovCi0KLWNoYXIgdHRuYW1lW1RUTkFNTEVOKzFdOyAg ICAgICAgICAgICAgICAvKiBOYW1lIG9mIGNvbW11bmljYXRpb24gZGV2aWNlICovCi0KLSNpZmRl ZiBNQUMKLWludCBjb25uZWN0ZWQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBUcnVlIGlm IGNvbm5lY3RlZCAqLwotaW50IHN0YXJ0Y29ubmVjdGVkOyAgICAgICAgICAgICAgICAgICAgIC8q IGluaXRpYWwgc3RhdGUgb2YgY29ubmVjdGVkICovCi0jZW5kaWYgLyogTUFDICovCi0KLWxvbmcg c3BlZWQgPSAtMUw7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tdW5pY2F0aW9uIGRldmlj ZSBzcGVlZCAqLwotaW50IHdhc2Nsb3NlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIENv bm5lY3Rpb24gd2FzIGp1c3QgY2xvc2VkICovCi1pbnQgd2h5Y2xvc2VkID0gV0NfUkVNTzsgICAg ICAgICAgICAgICAgLyogd2h5IGl0IHdhcyBjbG9zZWQgKi8KLWludCBxbnhwb3J0bG9jayA9IDA7 ICAgICAgICAgICAgICAgICAgICAvKiBRTlggcG9ydCBsb2NraW5nIG9uL29mZiAqLwotCi0jaWZu ZGVmIENMU09ORElTQwotI2RlZmluZSBDTFNPTkRJU0MgMAotI2VuZGlmIC8qIENMU09ORElTQyAq LwotCi1pbnQgY3hmbG93W0NYVF9NQVgrMV07ICAgICAgICAgICAgICAgICAgLyogU2VlIGluaXRm bG93KCkgKi8KLQotI2lmbmRlZiBOT1NIT1cKLWNoYXIgKiBmbG9uYW1lW10gPSB7ICAgICAgICAg ICAgICAgICAgICAvKiBGbG93IGNvbnRyb2wgbmFtZXMgKi8KLSAgIm5vbmUiLCAieG9uL3hvZmYi LCAicnRzL2N0cyIsICJkdHIvY2QiLCAiZXR4L2FjayIsICJzdHJpbmciLAotICAieHh4MSIsICJ4 eHgyIiwgImR0ci9jdHMiLCAia2VlcCIsICJhdXRvIgotfTsKLWludCBuZmxvbmFtZSA9IChzaXpl b2YoZmxvbmFtZSkgLyBzaXplb2YoY2hhciAqKSk7Ci0KLWNoYXIgKiBjeG5hbWVbXSA9IHsgICAg ICAgICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIHR5cGUgbmFtZXMgKi8KLSAgInJlbW90ZSIs ICJkaXJlY3Qtc2VyaWFsIiwgIm1vZGVtIiwgInRjcC9pcCIsICJ4LjI1IiwgImRlY25ldCIsCi0g ICJsYXQiLCAibmV0YmlvcyIsICJuYW1lZC1waXBlIiwgInNzaCIsICJwaXBlIgotfTsKLWludCBu Y3huYW1lID0gKHNpemVvZihjeG5hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOwotI2VuZGlmIC8qIE5P U0hPVyAqLwotCi1pbnQgcGFyaXR5ID0gREVGUEFSLCAgICAgICAgICAgICAgICAgICAgLyogUGFy aXR5IHNwZWNpZmllZCwgMCwnZScsJ28nLGV0YyAqLwotICAgIGh3cGFyaXR5ID0gMCwgICAgICAg ICAgICAgICAgICAgICAgIC8qIEhhcmR3YXJlIHBhcml0eSBmb3Igc2VyaWFsIHBvcnQgKi8KLSAg ICBzdG9wYml0cyA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAvKiBTdG9wIGJpdHMgZm9yIHNl cmlhbCBwb3J0ICovCi0gICAgY2xzb25kaXNjID0gQ0xTT05ESVNDLCAgICAgICAgICAgICAgLyog U2VyaWFsIHBvcnQgY2xvc2Ugb24gZGlzY29ubmVjdCAqLwotICAgIGF1dG9wYXIgPSAwLCAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEF1dG9tYXRpYyBwYXJpdHkgY2hhbmdlIGZsYWcgKi8KLSAg ICBzb3NpID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaGlmdC1Jbi9PdXQgZmxh ZyAqLwotICAgIGZsb3cgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsb3cgY29u dHJvbCAoc2VlIGluaXRmbG93KCkpICovCi0gICAgYXV0b2Zsb3cgPSAxLCAgICAgICAgICAgICAg ICAgICAgICAgLyogQXV0b21hdGljIGZsb3cgY29udHJvbCAqLwotICAgIHR1cm4gPSAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIExpbmUgdHVybmFyb3VuZCBoYW5kc2hha2UgZmxhZyAq LwotICAgIHR1cm5jaCA9IFhPTiwgICAgICAgICAgICAgICAgICAgICAgIC8qIExpbmUgdHVybmFy b3VuZCBjaGFyYWN0ZXIgKi8KLSAgICBkdXBsZXggPSAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBEdXBsZXgsIGZ1bGwgYnkgZGVmYXVsdCAqLwotICAgIGVzY2FwZSA9IERGRVNDLCAgICAg ICAgICAgICAgICAgICAgIC8qIEVzY2FwZSBjaGFyYWN0ZXIgZm9yIGNvbm5lY3QgKi8KLSAgICBj a2RlbGF5ID0gRERFTEFZLCAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsIGRlbGF5IGJlZm9y ZSBzZW5kaW5nICovCi0gICAgdG5sbSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog VGVybWluYWwgbmV3bGluZSBtb2RlICovCi0KLS8qIE5ldHdvcmtzIGZvciBTRVQgSE9TVCAqLwot Ci0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgTVlIT1NUTCAxMDI0Ci0jZWxzZQotI2RlZmluZSBN WUhPU1RMIDEwMAotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0KLWNoYXIgbXlob3N0W01ZSE9TVExd OyAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBob3N0IG5hbWUgKi8KLWludCBuZXR3b3JrID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHZzIHNlcmlhbCBjb25uZWN0aW9u ICovCi1pbnQgaW5zZXJ2ZXIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogUnVubmluZyBh cyBhbiBJbnRlcm5ldCBzZXJ2ZXIgKi8KLWludCBpc2d1ZXN0ID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBVc2VyIGlzIGFub255bW91cyAqLwotY2hhciAqIGNsaWVudGhvc3QgPSBOVUxM OyAgICAgICAgICAgICAgIC8qIFBlZXIgaG9zdCBuYW1lIG9yIGFkZHJlc3MgKi8KLWludCB0Y3Bf aW5jb21pbmcgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBJbmNvbWluZyBUQ1AgY29ubmVjdGlv bj8gKi8KLQotI2lmZGVmIE5FVENPTk4KLSNpZmRlZiBUQ1BTT0NLRVQKLWludCBuZXR0eXBlID0g TkVUX1RDUEI7ICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IG5ldHdvcmsgdHlwZSAqLwotI2Vs c2UKLSNpZmRlZiBTVU5YMjUKLWludCBuZXR0eXBlID0gTkVUX1NYMjU7Ci0jZWxzZQotI2lmZGVm IElCTVgyNQotaW50IG5ldHR5cGUgPSBORVRfSVgyNTsKLSNlbHNlCi0jaWZkZWYgSFBYMjUKLWlu dCBuZXR0eXBlID0gTkVUX0hYMjU7Ci0jZWxzZQotI2lmZGVmIFNUUkFUVVNYMjUKLWludCBuZXR0 eXBlID0gTkVUX1ZYMjU7Ci0jZWxzZQotI2lmZGVmIERFQ05FVAotaW50IG5ldHR5cGUgPSBORVRf REVDOwotI2Vsc2UKLSNpZmRlZiBTVVBFUkxBVAotaW50IG5ldHR5cGUgPSBORVRfU0xBVDsKLSNl bHNlCi1pbnQgbmV0dHlwZSA9IE5FVF9OT05FOwotI2VuZGlmIC8qIFNVUEVSTEFUICovCi0jZW5k aWYgLyogREVDTkVUICovCi0jZW5kaWYgLyogU1RSQVRVU1gyNSAqLwotI2VuZGlmIC8qIEhQWDI1 ICovCi0jZW5kaWYgLyogSUJNWDI1ICovCi0jZW5kaWYgLyogU1VOWDI1ICovCi0jZW5kaWYgLyog VENQU09DS0VUICovCi0jZWxzZSAgLyogTkVUQ09OTiAqLwotaW50IG5ldHR5cGUgPSBORVRfTk9O RTsKLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNpZmRlZiBBTllYMjUKLWludCByZXZjYWxsID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBYLjI1IHJldmVyc2UgY2FsbCBub3Qgc2VsZWN0 ZWQgKi8KLWludCBjbG9zZ3IgID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBYLjI1IGNs b3NlZCB1c2VyIGdyb3VwICAqLwotaW50IGN1ZGF0YSA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFguMjUgY2FsbCB1c2VyIGRhdGEgbm90IHNwZWNpZmllZCAqLwotY2hhciB1ZGF0YVtN QVhDVURBVEFdOyAgICAgICAgICAgICAgICAgIC8qIFguMjUgY2FsbCB1c2VyIGRhdGEgKi8KLQot I2lmZGVmIElCTVgyNQotLyoKLSAgSSB3YXMgdW5hYmxlIHRvIGZpbmQgYW55IHByZS1kZWZpbmVk IE1BWCB2YWx1ZXMgZm9yIHgyNSBhZGRyZXNzZXMgLSB0aGUKLSAgYWRkcmVzc2VzIHRoYXQgSSd2 ZSBzZWVuIGhhdmUgYmVlbiBhcm91bmQgMTAtMTIgY2hhcmFjdGVycyAzMiBpcyBwcm9iYWJseQot ICBlbm91Z2gsIDY0IGlzIGhvcGVmdWxseSBzYWZlIGZvciBldmVyeW9uZS4KLSovCi0gICAgeDI1 YWRkcl90IGxvY2FsX251YSA9IHsnXDAnfTsgICAgICAgLyogbG9jYWwgeC4yNSBhZGRyZXNzICov Ci0gICAgeDI1YWRkcl90IHJlbW90ZV9udWEgPSB7J1wwJ307ICAgICAgLyogcmVtb3RlIHguMjUg YWRkcmVzcyAqLwotICAgIGNoYXIgeDI1bmFtZVszMl0gPSB7J1wwJ307ICAgICAgICAgIC8qIHgy NSBkZXZpY2UgbmFtZSwgc3gyNWEwIG9yIHN4MjVhMSAqLwotICAgIGNoYXIgeDI1ZGV2WzY0XSA9 ICAiL2Rldi94MjVwa3QiOyAgIC8qIHgyNSBkZXZpY2UgaW4gL2RldiAqLwotICAgIGludCB4MjVw b3J0ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIHBvcnQgdXNlZCBmb3IgWC4yNSAtIEFJWCBv bmx5ICovCi0jZW5kaWYgLyogSUJNWDI1ICovCi0KLSNpZm5kZWYgSUJNWDI1Ci0vKgotICBUaGlz IGNvbmRpdGlvbiBpcyB1bnJlbGF0ZWQgdG8gdGhlIGFib3ZlIElCTVgyNSBjb25kaXRpb24uCi0g IElCTSBYLjI1IGRvZXNuJ3QgaGF2ZSBQQUQgc3VwcG9ydC4KLSovCi0gICAgQ0hBUiBwYWRwYXJt c1tNQVhQQURQQVJNUysxXTsgLyogWC4zIHBhcmFtZXRlcnMgKi8KLSNlbmRpZiAvKiBJQk1YMjUg Ki8KLSNlbmRpZiAvKiBBTllYMjUgKi8KLQotLyogT3RoZXIgaXRlbXMgKi8KLQotaW50IGlzaW50 ZXJydXB0ZWQgPSAwOyAgICAgICAgICAgICAgICAgIC8qIFVzZWQgaW4gZXhjZXB0aW9uIGhhbmRs aW5nICovCi1pbnQgd2hhdCA9IFdfSU5JVDsgICAgICAgICAgICAgICAgICAgICAgLyogV2hhdCBJ IGFtIGRvaW5nICovCi1pbnQgbGFzdHhmZXIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyog TGFzdCB0cmFuc2ZlciAoc2VuZCBvciByZWNlaXZlKSAqLwotCi1leHRlcm4gaW50IG1kbXR5cDsg ICAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gKC9uZXR3b3JrKSB0eXBlICovCi0KLSNpZmRl ZiBOVAotZXh0ZXJuIGludCBTdGFydGVkRnJvbURpYWxlcjsKLSNpZmRlZiBOVFNJRwotZXh0ZXJu IGludCBUbHNJbmRleDsKLSNlbmRpZiAvKiBOVFNJRyAqLwotI2lmZGVmIE5UQVNNCi11bnNpZ25l ZCBsb25nIEVTUFRvUmVzdG9yZTsgICAgICAgICAgICAgLyogRGl0dG8gKi8KLSNlbmRpZiAvKiBO VEFTTSAqLwotI2VuZGlmIC8qIE5UICovCi0KLSNpZmRlZiBPUzJQTQotaW50IG9zMnBtID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TLzIgUHJlc2VudGF0aW9uIE1hbmFnZXIgZmxh ZyAqLwotI2VuZGlmIC8qIE9TMlBNICovCi0KLS8qIFRlcm1pbmFsIHNjcmVlbiBzaXplLCBpZiBr bm93biwgLTEgbWVhbnMgdW5rbm93bi4gKi8KLQotI2lmZGVmIE9TMgotI2luY2x1ZGUgImNrb2Nv bi5oIgotI2lmZGVmIEtVSQotaW50IHR0X3Jvd3NbVk5VTV0gPSB7MjQsMjQsMjUsMX07ICAgICAg IC8qIFJvd3MgKGhlaWdodCkgKi8KLWludCB0dF9jb2xzW1ZOVU1dID0gezgwLDgwLDgwLDgwfTsg ICAgICAvKiBDb2x1bW5zICh3aWR0aCkgKi8KLWludCBjbWRfcm93cyA9IDI0LCBjbWRfY29scyA9 IDgwOyAgICAgICAvKiBDb21tYW5kL2NvbnNvbGUgc2NyZWVuIGRpbWVuc2lvbnMgKi8KLSNlbHNl IC8qIEtVSSAqLwotaW50IHR0X3Jvd3NbVk5VTV0gPSB7LTEsMjQsMjUsMX07ICAgICAgIC8qIFJv d3MgKGhlaWdodCkgKi8KLWludCB0dF9jb2xzW1ZOVU1dID0gey0xLDgwLDgwLDgwfTsgICAgICAv KiBDb2x1bW5zICh3aWR0aCkgKi8KLWludCBjbWRfcm93cyA9IC0xLCBjbWRfY29scyA9IC0xOyAg ICAgICAvKiBDb21tYW5kL2NvbnNvbGUgc2NyZWVuIGRpbWVuc2lvbnMgKi8KLSNlbmRpZiAvKiBL VUkgKi8KLWludCBrOTVzdGRpbyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGRpbyB0 aHJlYWRzICovCi1pbnQgdHRfYmVsbCA9IFhZQl9BVUQgfCBYWUJfU1lTOyAgICAgICAgLyogQkVM TCBBVURJQkxFIChzeXN0ZW0gc291bmRzKSAqLwotI2Vsc2UgLyogT1MyICovCi1pbnQgdHRfcm93 cyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogUm93cyAoaGVpZ2h0KSAqLwotaW50IHR0 X2NvbHMgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbHVtbnMgKHdpZHRoKSAqLwot aW50IGNtZF9yb3dzID0gMjQsIGNtZF9jb2xzID0gODA7ICAgICAgIC8qIENvbW1hbmQvY29uc29s ZSBzY3JlZW4gZGltZW5zaW9ucyAqLwotaW50IHR0X2JlbGwgPSBYWUJfQVVEOyAgICAgICAgICAg ICAgICAgIC8qIEJFTEwgT04gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotaW50IHR0X3ByaW50ID0g MDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zcGFyZW50IHByaW50IGRpc2FibGVkICov Ci1pbnQgdHRfZXNjYXBlID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogRXNjYXBpbmcgYmFj ayBpcyBlbmFibGVkICovCi1pbnQgdHRfc2Nyb2xsID0gMTsgICAgICAgICAgICAgICAgICAgICAg LyogU2Nyb2xsaW5nIG9wZXJhdGlvbnMgYXJlIGVuYWJsZWQgKi8KLQotaW50IHRuX2V4aXQgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4aXQgb24gZGlzY29ubmVjdCAqLwotCi1pbnQg ZXhpdG9uY2xvc2UgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBvbiBjbG9zZSAqLwot aW50IGV4aXRoYW5ndXAgPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIEhhbmd1cCBvbiBleGl0 ICovCi1pbnQgaGF2ZWxpbmUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIExJTkUg b3IgU0VUIEhPU1QgaW4gZWZmZWN0ICovCi1pbnQgdGxldmVsID0gLTE7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogVGFrZS1maWxlIGNvbW1hbmQgbGV2ZWwgKi8KLWludCBoaW50cyA9IDE7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHRvIGdpdmUgaGludHMgKi8KLQotI2lm ZGVmIE5PTE9DQUwKLWludCByZW1vbmx5ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZW1vdGUtbW9kZS1vbmx5IGFkdmlzb3J5ICgtUikgKi8KLWludCBub2xvY2FsID0gMTsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZW1vdGUtb25seSBzdHJpY3RseSBlbmZvcmNlZCAqLwotI2Vs c2UKLWludCByZW1vbmx5ID0gMDsKLWludCBub2xvY2FsID0gMDsKLWludCBjeF9zdGF0dXMgPSAw OyAgICAgICAgICAgICAgICAgICAgICAvKiBDT05ORUNUIHJldHVybiBzdGF0dXMgKi8KLSNlbmRp ZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9TUEwKLWV4dGVybiBpbnQgY21kbHZsOyAgICAg ICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGxldmVsICovCi1leHRlcm4gaW50IG1hY2x2bDsg ICAgICAgICAgICAgICAgICAgICAgLyogTWFjcm8gaW52b2NhdGlvbiBsZXZlbCAqLwotI2VuZGlm IC8qIE5PU1BMICovCi0KLWludCBwcm90b2NvbCAgPSBQUk9UT19LOyAgICAgICAgICAgICAgICAv KiBGaWxlIHRyYW5zZmVyIHByb3RvY29sID0gS2VybWl0ICovCi0KLSNpZmRlZiBORVdERUZBVUxU UwotaW50IHByZWZpeGluZyA9IFBYX0NBVTsKLSNlbHNlCi1pbnQgcHJlZml4aW5nID0gUFhfQUxM OwotI2VuZGlmIC8qIE5FV0RFRkFVTFRTICovCi0KLWV4dGVybiBzaG9ydCBjdGxwW107ICAgICAg ICAgICAgICAgICAgICAvKiBDb250cm9sLXByZWZpeCB0YWJsZSAqLwotCi1pbnQgY2FycmllciA9 IENBUl9BVVQ7ICAgICAgICAgICAgICAgICAgLyogUGF5IGF0dGVudGlvbiB0byBjYXJyaWVyIHNp Z25hbCAqLwotaW50IGNkdGltbyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhcnJp ZXIgd2FpdCB0aW1lb3V0ICovCi1pbnQgeGl0c3RhID0gR09PRF9FWElUOyAgICAgICAgICAgICAg ICAgLyogUHJvZ3JhbSBleGl0IHN0YXR1cyAqLwotCi0jaWZkZWYgVk1TICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRGVmYXVsdCBmaWxlbmFtZSBjb2xsaXNpb24gYWN0aW9uICovCi1p bnQgZm5jYWN0ID0gWFlGWF9YOyAgICAgICAgICAgICAgICAgICAgLyogUkVQTEFDRSBmb3IgVk1T ICovCi0jZWxzZQotaW50IGZuY2FjdCA9IFhZRlhfQjsgICAgICAgICAgICAgICAgICAgIC8qIEJB Q0tVUCBmb3IgZXZlcnlib2R5IGVsc2UgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotaW50IGZuY3Nh diA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBzYXZpbmcgJiByZXN0b3Jpbmcg dGhlIGFib3ZlICovCi1pbnQgYmdzZXQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog QkFDS0dST1VORCBtb2RlIHNldCBleHBsaWNpdGx5ICovCi0KLWludCBjbWRpbnQgPSAxOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRzIGFyZSBhbGxvd2VkICovCi0jaWZkZWYg VU5JWAotaW50IHhzdXNwZW5kID0gREZTVVNQOwkJCS8qIFdoZXRoZXIgU1VTUEVORCBjb21tYW5k LCBldGMsICovCi0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXMg dG8gYmUgYWxsb3dlZC4gKi8KLWludCB4c3VzcGVuZCA9IDA7Ci0jZW5kaWYgLyogVU5JWCAqLwot Ci0vKiBTdGF0aXN0aWNzIHZhcmlhYmxlcyAqLwotCi1DS19PRkZfVAotICAgIGZsY2ksICAgICAg ICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXJzIGZyb20gbGluZSwgY3VycmVudCBmaWxlICov Ci0gICAgZmxjbywgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJzIHRvIGxpbmUsIGN1cnJl bnQgZmlsZSAgKi8KLSAgICB0bGNpLCAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcnMgZnJv bSBsaW5lIGluIHRyYW5zYWN0aW9uICovCi0gICAgdGxjbywgICAgICAgICAgICAgICAgICAgICAg IC8qIENoYXJzIHRvIGxpbmUgaW4gdHJhbnNhY3Rpb24gKi8KLSAgICBmZmMsICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ2hhcnMgdG8vZnJvbSBjdXJyZW50IGZpbGUgKi8KLSAgICB0ZmM7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcnMgdG8vZnJvbSBmaWxlcyBpbiB0cmFuc2FjdGlv biAqLwotCi1sb25nIGZpbGNudCwgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBmaWxl cyBpbiB0cmFuc2FjdGlvbiAqLwotICAgIGZpbHJlaiwgICAgICAgICAgICAgICAgICAgICAvKiBO dW1iZXIgb2YgZmlsZXMgcmVqZWN0ZWQgaW4gdHJhbnNhY3Rpb24gKi8KLSAgICBjcHMgPSAwTCwg ICAgICAgICAgICAgICAgICAgLyogQ2hhcnMvc2VjIGxhc3QgdHJhbnNmZXIgKi8KLSAgICBwZWFr Y3BzID0gMEwsICAgICAgICAgICAgICAgLyogUGVhayBjaGFycy9zZWMgbGFzdCB0cmFuc2ZlciAq LwotICAgIGNjdSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGNoYXJzIHVucHJl Zml4ZWQgaW4gdHJhbnNhY3Rpb24gKi8KLSAgICBjY3AsICAgICAgICAgICAgICAgICAgICAgICAg LyogQ29udHJvbCBjaGFycyBwcmVmaXhlZCBpbiB0cmFuc2FjdGlvbiAqLwotICAgIHJwdG47ICAg ICAgICAgICAgICAgICAgICAgICAvKiBSZXBlYXRlZCBjaGFyYWN0ZXJzIGNvbXByZXNzZWQgKi8K LQotaW50IHRzZWNzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlY29uZHMgZm9y IHRyYW5zYWN0aW9uICovCi1pbnQgZnNlY3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAg LyogUGVyLWZpbGUgdGltZXIgKi8KLQotI2lmZGVmIEdGVElNRVIKLUNLRkxPQVQKLSAgZnBmc2Vj cyA9IDAuMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbG9hdGluZyBwb2ludCBwZXItZmls ZSB0aW1lciAqLwotICBmcHRzZWNzID0gMC4wOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFu ZCBwZXItdHJhbnNhY3Rpb24gdGltZXIgKi8KLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLS8qIEZs YWdzICovCi0KLWludCBkZWJsb2cgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWJ1 ZyBsb2cgaXMgb3BlbiAqLwotICAgIGRlYm9rID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIERlYnVnIGxvZyBpcyBub3QgZGlzYWJsZWQgKi8KLSAgICBkZWJ4bGVuID0gNTQsICAgICAg ICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGxlbmd0aCBmb3IgZGVidWcgc3RyaW5ncyAqLwot ICAgIGRlYnNlcyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIERFQlVH IFNFU1NJT04gKi8KLSAgICBkZWJ0aW0gPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJ bmNsdWRlIHRpbWVzdGFtcCBpbiBkZWJ1ZyBsb2cgKi8KLSAgICBkZWJtc2cgPSAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBEZWJ1ZyBtZXNzYWdlcyBvbi9vZmYgKi8KLSAgICBwa3Rsb2cg PSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBwYWNrZXQgbG9nZ2luZyAq LwotICAgIHNlc2xvZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlc3Npb24gbG9n Z2luZyAqLwotICAgIGRpYWxvZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwg bG9nZ2luZyAqLwotICAgIHRyYWxvZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRy YW5zYWN0aW9uIGxvZ2dpbmcgKi8KLSAgICB0bG9nZm10ID0gMSwgICAgICAgICAgICAgICAgICAg ICAgICAvKiBUcmFuc2FjdGlvbiBsb2cgZm9ybWF0ICh2ZXJib3NlKSAqLwotICAgIHRsb2dzZXAg PSAoaW50KScsJywgICAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGxvZyBmaWVsZCBzZXBh cmF0b3IgKi8KLSAgICBkaXNwbGEgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxl IHRyYW5zZmVyIGRpc3BsYXkgb24vb2ZmICovCi0gICAgc3Rkb3VmID0gMCwgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRmxhZyBmb3Igb3V0cHV0IHRvIHN0ZG91dCAqLwotICAgIHN0ZGluZiA9 IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGlucHV0IGZyb20gc3RkaW4g Ki8KLSAgICB4ZmxnICAgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBY IGluc3RlYWQgb2YgRiBwYWNrZXQgKi8KLSAgICBoY2ZsZyAgPSAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBEb2luZyBIb3N0IGNvbW1hbmQgKi8KLSAgICBkZXN0ICAgPSBERVNUX0QsICAg ICAgICAgICAgICAgICAgICAvKiBEZXN0aW5hdGlvbiBmb3IgcGFja2V0IGRhdGEgKi8KLSAgICB6 Y2hrb2QgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB6Y2hrbygpIHNob3VsZCB3b3Jr IGZvciBkaXJzIHRvbz8gKi8KLSAgICB6Y2hraWQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB6Y2hraSgpIHNob3VsZCB3b3JrIGZvciBkaXJzIHRvbz8gKi8KLQotLyogSWYgeW91IGNo YW5nZSB0aGlzLCBhbHNvIHNlZSBzdHJ1Y3QgcHRhYiBhYm92ZS4uLiAqLwotCi0jaWZkZWYgT1My ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgZmlsZSBuYW1lIGNvbnZl cnNpb24gKi8KLSAgICBmbmNudiAgPSBYWUZOX0wsICAgICAgICAgICAgICAgICAgICAvKiBEZWZh dWx0IGlzIExpdGVyYWwgaW4gT1MvMiwgKi8KLSAgICBmX3NhdmUgPSBYWUZOX0wsICAgICAgICAg ICAgICAgICAgICAvKiAoc2F2ZWQgY29weSBvZiBzYW1lKSAqLwotI2Vsc2UKLSAgICBmbmNudiAg PSBYWUZOX0MsICAgICAgICAgICAgICAgICAgICAvKiBlbHNld2hlcmUgQ29udmVydCB0aGVtICov Ci0gICAgZl9zYXZlID0gWFlGTl9DLCAgICAgICAgICAgICAgICAgICAgLyogKGRpdHRvKSAqLwot I2VuZGlmIC8qIE9TMiAqLwotCi0gICAgZm5zcGF0aCA9IFBBVEhfT0ZGLCAgICAgICAgICAgICAg ICAgLyogU2VuZCBmaWxlIHBhdGggKi8KLSAgICBmbnJwYXRoID0gUEFUSF9BVVRPLCAgICAgICAg ICAgICAgICAvKiBSZWNlaXZlIGZpbGUgcGF0aCAqLwotICAgIGZhY2twYXRoID0gMSwgICAgICAg ICAgICAgICAgICAgICAgIC8qIFNlbmQgYmFjayBwYXRoIGluIEFDSyB0byBGICovCi0gICAgYmlu YXJ5ID0gWFlGVF9CLCAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBmaWxlIHRyYW5zZmVy IG1vZGUgKi8KLSAgICBiX3NhdmUgPSBYWUZUX0IsICAgICAgICAgICAgICAgICAgICAvKiBTYXZl ZCBmaWxlIG1vZGUgKi8KLSAgICBlb2ZtZXRob2QgPSAwLCAgICAgICAgICAgICAgICAgICAgICAv KiBFT0YgZGV0ZWN0aW9uIG1ldGhvZCAobGVuZ3RoKSAqLwotCi0jaWZkZWYgT1MyCi0gICAgY3Vy c29yX3NhdmUgPSAtMSwgICAgICAgICAgICAgICAgICAgLyogQ3Vyc29yIHN0YXRlICovCi0jZW5k aWYgLyogT1MyICovCi0KLSAgICB4ZmVybW9kZSA9IFhNT0RFX0EsICAgICAgICAgICAgICAgICAv KiBUcmFuc2ZlciBtb2RlLCBtYW51YWwgb3IgYXV0byAqLwotICAgIHhmaWxldHlwZSA9IC0xLCAg ICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIG9ubHkgdGV4dCAob3IgYmluYXJ5KSAqLwot ICAgIHJlY3Vyc2l2ZSA9IDAsICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY3Vyc2l2ZSBkaXJl Y3RvcnkgdHJhdmVyc2FsICovCi0gICAgbm9saW5rcyAgID0gMiwgICAgICAgICAgICAgICAgICAg ICAgLyogRG9uJ3QgZm9sbG93IHN5bWJvbGljIGxpbmtzICovCi0gICAgc2tpcGJ1cCAgID0gMCwg ICAgICAgICAgICAgICAgICAgICAgLyogU2tpcCBiYWNrdXAgZmlsZXMgd2hlbiBzZW5kaW5nICov Ci0gICAgc2VuZG1vZGUgPSBTTV9TRU5ELCAgICAgICAgICAgICAgICAgLyogV2hpY2ggdHlwZSBv ZiBTRU5EIG9wZXJhdGlvbiAqLwotICAgIHNsb3N0YXJ0ICA9IDEsICAgICAgICAgICAgICAgICAg ICAgIC8qIFNsb3cgc3RhcnQgKGdyb3cgcGFja2V0IGxlbmd0aHMpICovCi0gICAgY21hc2sgID0g MDM3NywgICAgICAgICAgICAgICAgICAgICAgLyogQ09OTkVDVCAodGVybWluYWwpIGJ5dGUgbWFz ayAqLwotICAgIGZtYXNrICA9IDAzNzcsICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgYnl0 ZSBtYXNrICovCi0gICAgY2t3YXJuID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxh ZyBmb3IgZmlsZSB3YXJuaW5nICovCi0gICAgcXVpZXQgID0gMCwgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQmUgcXVpZXQgZHVyaW5nIGZpbGUgdHJhbnNmZXIgKi8KLSAgICBsb2NhbCAgPSAw LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxID0gbG9jYWwgbW9kZSwgMCA9IHJlbW90ZSBt b2RlICovCi0gICAgY3h0eXBlID0gQ1hUX1JFTU9URSwgICAgICAgICAgICAgICAgLyogQ29ubmVj dGlvbiB0eXBlICovCi0gICAgc2VydmVyID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyog RmxhZyBmb3IgSSBBbSBTZXJ2ZXIgKi8KLSAgICBxdWVyeSA9IDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBGbGFnIGZvciBRdWVyeSBhY3RpdmUgKi8KLSAgICBqdXN0b25lID0gMCwgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgc2hvdWxkIGRvIEp1c3QgT25lIGNvbW1hbmQg Ki8KLSAgICB1cnNlcnZlciA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBZ b3UgQXJlIFNlcnZlciAqLwotICAgIGJ5ZV9hY3RpdmUgPSAwLCAgICAgICAgICAgICAgICAgICAg IC8qIEZsYWcgZm9yIEJZRSBjb21tYW5kIGFjdGl2ZSAqLwotICAgIGRpcmFjdGl2ZSA9IDAsICAg ICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIERJUkVDVE9SWSBjb21tYW5kIGFjdGl2ZSAq LwotICAgIGNkYWN0aXZlID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIENE IGNvbW1hbmQgYWN0aXZlICovCi0gICAgY2ZsZyAgID0gMCwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ29ubmVjdCBiZWZvcmUgdHJhbnNhY3Rpb24gKi8KLSAgICBjbmZsZyAgPSAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0IGFmdGVyIHRyYW5zYWN0aW9uICovCi0gICAg Y3hzZWVuID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgY2FuY2VsbGlu ZyBhIGZpbGUgKi8KLSAgICBjenNlZW4gPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBG bGFnIGZvciBjYW5jZWxsaW5nIGZpbGUgZ3JvdXAgKi8KLSAgICBmYXRhbGlvID0gMCwgICAgICAg ICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBmYXRhbCBpL28gZXJyb3IgKi8KLSAgICBkaXNj YXJkID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBmaWxlIHRvIGJlIGRp c2NhcmRlZCAqLwotICAgIGtlZXAgPSBTRVRfQVVUTywgICAgICAgICAgICAgICAgICAgIC8qIEtl ZXAgaW5jb21wbGV0ZSBmaWxlcyA9IEFVVE8gKi8KLSAgICB1bmtjcyA9IDEsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBLZWVwIGZpbGUgdy91bmtub3duIGNoYXJhY3RlciBzZXQgKi8KLSNp ZmRlZiBWTVMKLSAgICBmaWxlcGVlayA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnNw ZWN0aW9uIG9mIGZpbGVzICovCi0jZWxzZQotI2lmZGVmIGRhdGdlbmVyYWwKLSAgICBmaWxlcGVl ayA9IDAsCi0jZWxzZQotICAgIGZpbGVwZWVrID0gMSwKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAq LwotI2VuZGlmIC8qIFZNUyAqLwotICAgIG5ha3N0YXRlID0gMCwgICAgICAgICAgICAgICAgICAg ICAgIC8qIEluIGEgc3RhdGUgd2hlcmUgd2UgY2FuIHNlbmQgTkFLcyAqLwotICAgIGRibGNoYXIg PSAtMSwgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciB0byBkb3VibGUgd2hlbiBz ZW5kaW5nICovCi0gICAgbW92aW5nID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogTU9W RSA9IHNlbmQsIHRoZW4gZGVsZXRlICovCi0gICAgcmVsaWFibGUgPSBTRVRfQVVUTywgICAgICAg ICAgICAgICAgLyogTm9uemVybyBpZiB0cmFuc3BvcnQgaXMgcmVsaWFibGUgKi8KLSAgICB4cmVs aWFibGUgPSAtMSwKLSAgICBzZXRyZWxpYWJsZSA9IDAsCi0gICAgdXJjbGVhciA9IDAsICAgICAg ICAgICAgICAgICAgICAgICAgLyogTm9uemVybyBmb3IgY2xlYXIgY2hhbm5lbCB0byB5b3UgKi8K LSAgICBjbGVhcnJxID0gU0VUX0FVVE8sICAgICAgICAgICAgICAgICAvKiBTRVQgQ0xFQVJDSEFO RUwgdmFsdWUgKi8KLSAgICBjbGVhcmVkID0gMCwKLSAgICBzdHJlYW1pbmcgPSAwLCAgICAgICAg ICAgICAgICAgICAgICAvKiBOb256ZXJvIGlmIHN0cmVhbWluZyBpcyBhY3RpdmUgKi8KLSAgICBz dHJlYW1vayA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBOb256ZXJvIGlmIHN0cmVhbWlu ZyBuZWdvdGlhdGVkICovCi0gICAgc3RyZWFtcnEgPSBTRVRfQVVUTywgICAgICAgICAgICAgICAg LyogU0VUIFNUUkVBTUlORyB2YWx1ZSAqLwotICAgIHN0cmVhbWVkID0gLTE7ICAgICAgICAgICAg ICAgICAgICAgIC8qIFdoZXRoZXIgd2Ugc3RyZWFtZWQgbGFzdCB0aW1lICovCi0KLWNoYXIgKiBz bmRfbW92ZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBNb3ZlIGZpbGUgYWZ0ZXIgc2VuZGlu ZyBpdCAqLwotY2hhciAqIHNuZF9yZW5hbWUgPSBOVUxMOyAgICAgICAgICAgICAgIC8qIFJlbmFt ZSBmaWxlIGFmdGVyIHNlbmRpbmcgaXQgKi8KLWNoYXIgKiByY3ZfbW92ZSA9IE5VTEw7ICAgICAg ICAgICAgICAgICAvKiBNb3ZlIGZpbGUgYWZ0ZXIgcmVjZWl2aW5nIGl0ICovCi1jaGFyICogcmN2 X3JlbmFtZSA9IE5VTEw7ICAgICAgICAgICAgICAgLyogUmVuYW1lIGZpbGUgYWZ0ZXIgcmVjZWl2 aW5nIGl0ICovCi0KLWNoYXIgKiBnX3NuZF9tb3ZlID0gTlVMTDsKLWNoYXIgKiBnX3NuZF9yZW5h bWUgPSBOVUxMOwotY2hhciAqIGdfcmN2X21vdmUgPSBOVUxMOwotY2hhciAqIGdfcmN2X3JlbmFt ZSA9IE5VTEw7Ci0KLSNpZmRlZiBDS19UUklHR0VSCi1jaGFyICp0dF90cmlnZ2VyW1RSSUdHRVJT XSA9IHsgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMIH07Ci1DSEFSICp0 dF90cm1hdGNoW1RSSUdHRVJTXSA9IHsgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMIH07Ci1jaGFyICp0cmlnZ2VydmFsID0gTlVMTDsKLSNlbmRpZiAvKiBDS19UUklHR0VS ICovCi0KLWludCBja3hsb2dnaW5nID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZv ciBzeXNsb2dnaW5nIGFjdGl2ZSAqLwotaW50IGlrZGJvcGVuID0gMDsgICAgICAgICAgICAgICAg ICAgICAgIC8qIEZsYWcgZm9yIElLU0QgZGF0YWJhc2UgYWN0aXZlICovCi1pbnQgZGJpbml0ZWQg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgSUtTREIgcmVjb3JkIGluaXQn ZCAqLwotI2lmbmRlZiBDS1NZU0xPRwotaW50IGNreHN5c2xvZyA9IDA7ICAgICAgICAgICAgICAg ICAgICAgIC8qIExvZ2dpbmcgbGV2ZWwgMCAqLwotI2Vsc2UKLSNpZmRlZiBTWVNMT0dMRVZFTAot aW50IGNreHN5c2xvZyA9IFNZU0xPR0xFVkVMOyAgICAgICAgICAgIC8qIExvZ2dpbmcgbGV2ZWwg c3BlY2lmaWVkICovCi0jZWxzZQotaW50IGNreHN5c2xvZyA9IFNZU0xHX0RGOyAgICAgICAgICAg ICAgIC8qIERlZmF1bHQgbG9nZ2luZyBsZXZlbCAqLwotI2VuZGlmIC8qIFNZU0xPR0xFVkVMICov Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQotI2lmbmRlZiBOT0hFTFAKLSNpZm5kZWYgTk9DTURM Ci1fUFJPVE9UWVAoIFZPSUQgaW5pb3B0aGxwLCAodm9pZCkgKTsgICAgLyogQ29tbWFuZC1saW5l IGhlbHAgaW5pdGlhbGl6ZXIgKi8KLSNlbmRpZiAvKiBOT0NNREwgKi8KLSNlbmRpZiAvKiBOT0hF TFAgKi8KLQotX1BST1RPVFlQKCBWT0lEIGdldGV4ZWRpciwgKHZvaWQpICk7Ci1fUFJPVE9UWVAo IGludCBwdXRub3RoaW5nLCAoY2hhcikgKTsKLQotI2lmZGVmIElLU0QKLV9QUk9UT1RZUCggVk9J RCBkb2lrc2Rpbml0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBpa3NkaW5pdCwgKHZvaWQp ICk7Ci1fUFJPVE9UWVAoIFZPSUQgZG9pa2xvZywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBk YmluaXQsICh2b2lkKSApOwotI2VuZGlmIC8qIElLU0QgKi8KLQotLyogVmFyaWFibGVzIHBhc3Nl ZCBmcm9tIGNvbW1hbmQgcGFyc2VyIHRvIHByb3RvY29sIG1vZHVsZSAqLwotCi0jaWZuZGVmIE5P U1BMCi0jaWZuZGVmIE5PSUNQCi0jaWZkZWYgQ0tfQVBDCi1fUFJPVE9UWVAoIFZPSUQgYXBjb25l Y3QsICh2b2lkKSApOwotI2VuZGlmIC8qIENLX0FQQyAqLwotI2lmZGVmIE9TMgotZXh0ZXJuIGlu dCBpbml0dmlrOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0jZW5kaWYg LyogTk9TUEwgKi8KLWNoYXIgKmNsY21kcyA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAvKiBQ b2ludGVyIHRvIGNvbW1hbmQtbGluZSBjb21tYW5kcyAqLwotCi0jaWZuZGVmIE5PU0VUS0VZCi1l eHRlcm4gS0VZICprZXltYXA7Ci1leHRlcm4gTUFDUk8gKm1hY3JvdGFiOwotI2VuZGlmIC8qIE5P U0VUS0VZICovCi0KLSNpZm5kZWYgTk9QVVNICi1pbnQgbm9wdXNoID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUFVTSCBlbmFibGVkICovCi0jZWxzZQotaW50IG5vcHVzaCA9IDE7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFBVU0ggZGlzYWJsZWQgKi8KLSNlbmRpZiAvKiBOT1BV U0ggKi8KLQotQ0hBUiBzc3RhdGUgID0gKENIQVIpIDA7ICAgICAgICAgICAgICAgIC8qIFN0YXJ0 aW5nIHN0YXRlIGZvciBhdXRvbWF0b24gKi8KLUNIQVIgenN0YXRlICA9IChDSEFSKSAwOyAgICAg ICAgICAgICAgICAvKiBGb3IgcmVtZW1iZXJpbmcgc3N0YXRlICovCi1jaGFyICogcHJpbnRlcm5h bWUgPSBOVUxMOyAgICAgICAgICAgICAgLyogTlVMTCBpZiBwcmludGVyIG5vdCByZWRpcmVjdGVk ICovCi1pbnQgcHJpbnRwaXBlID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIFNFVCBQ UklOVEVSICovCi1pbnQgbm9wcmludGVyID0gMDsKLQotI2lmbmRlZiBOT1hGRVIKLWNoYXIgKmNt YXJnICA9ICIiOyAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGNvbW1hbmQgZGF0 YSAqLwotY2hhciAqY21hcmcyID0gIiI7ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIg dG8gMm5kIGNvbW1hbmQgZGF0YSAqLwotY2hhciAqKmNtbGlzdDsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFBvaW50ZXIgdG8gZmlsZSBsaXN0IGluIGFyZ3YgKi8KLQotI2lmZGVmIENLX0FV VE9ETCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG9kb3dubG9hZCAqLwotaW50IGF1dG9k bCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZWQgYnkgZGVmYXVsdCAqLwot I2Vsc2UKLWludCBhdXRvZGwgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAob3IgaWYg bm90IGltcGxlbWVudGVkKS4gKi8KLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLWludCBhZGxfZXJy ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiAxID0gc3RvcCBvbiBlcnJvciAqLwotI2lm ZGVmIEtVSQotaW50IGFkbF9hc2sgPSAxOwkJCS8qIDEgPSBmaWxlIGRpYWxvZyBvbiBhdXRvZG93 bmxvYWQgKi8KLSNlbHNlCi1pbnQgYWRsX2FzayA9IDA7CQkJLyogMCA9IG5vIGZpbGUgZGlhbG9n ICovCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQVVUT0RPV05MT0FEIHBhcmFtZXRlcnMgKi8KLWludCBhZGxfa21vZGUgPSBBRExf UEFDSywgICAgICAgICAgICAgICAvKiBNYXRjaCBQYWNrZXQgdG8gc2lnbmFsIGRvd25sb2FkICov Ci0gICAgYWRsX3ptb2RlID0gQURMX1BBQ0s7Ci1jaGFyICogYWRsX2tzdHIgPSBOVUxMOyAgICAg ICAgICAgICAgICAgLyogS0VSTUlUIERvd25sb2FkIFN0cmluZyAqLwotY2hhciAqIGFkbF96c3Ry ID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIFpNT0RFTSBEb3dubG9hZCBTdHJpbmcgKi8KLSNl bmRpZiAvKiBPUzIgKi8KLQotaW50IHJlbWZpbGUgPSAwLCByZW1waXBlID0gMCwgcmVtYXBwZCA9 IDA7IC8qIFJFTU9URSBvdXRwdXQgcmVkaXJlY3Rpb24gKi8KLWNoYXIgKiByZW1kZXN0ID0gTlVM TDsKLQotI2lmbmRlZiBOT1NFUlZFUgotLyoKLSAgU2VydmVyIHNlcnZpY2VzOgotICAgMCA9IGRp c2FibGVkCi0gICAxID0gZW5hYmxlZCBpbiBsb2NhbCBtb2RlCi0gICAyID0gZW5hYmxlZCBpbiBy ZW1vdGUgbW9kZQotICAgMyA9IGVuYWJsZWQgaW4gYm90aCBsb2NhbCBhbmQgcmVtb3RlIG1vZGVz Ci0gIG9ubHkgYXMgaW5pdGlhbCAoZGVmYXVsdCkgdmFsdWVzLgotKi8KLWludCBlbl94aXQgPSAy OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFWElUICovCi1pbnQgZW5fY3dkID0gMzsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ0QvQ1dEICovCi1pbnQgZW5fY3B5ID0gMzsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ09QWSAgICovCi1pbnQgZW5fZGVsID0gMjsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogREVMRVRFICovCi1pbnQgZW5fbWtkID0gMzsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTUtESVIgKi8KLWludCBlbl9ybWQgPSAyOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBSTURJUiAqLwotaW50IGVuX2RpciA9IDM7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIERJUkVDVE9SWSAqLwotaW50IGVuX2ZpbiA9IDM7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZJTklTSCAqLwotaW50IGVuX2dldCA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEdFVCAqLwotI2lmbmRlZiBOT1BVU0gKLWludCBlbl9ob3MgPSAyOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBIT1NUIGVuYWJsZWQgKi8KLSNlbHNlCi1pbnQgZW5faG9zID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogSE9TVCBkaXNhYmxlZCAqLwotI2VuZGlmIC8qIE5PUFVT SCAqLwotaW50IGVuX3JlbiA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFTkFNRSAq LwotaW50IGVuX3NlbiA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFTkQgKi8KLWlu dCBlbl9zZXQgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgKi8KLWludCBlbl9z cGEgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTUEFDRSAqLwotaW50IGVuX3R5cCA9 IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRZUEUgKi8KLWludCBlbl93aG8gPSAzOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBXSE8gKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotLyog RGF0YSBHZW5lcmFsIEFPUy9WUyBjYW4ndCBkbyB0aGlzICovCi1pbnQgZW5fYnllID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQllFICovCi0jZWxzZQotaW50IGVuX2J5ZSA9IDI7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFBDcyBpbiBsb2NhbCBtb2RlLi4uICovCi0jZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KLWludCBlbl9hc2cgPSAzOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBBU1NJR04gKi8KLWludCBlbl9xdWUgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBRVUVSWSAqLwotaW50IGVuX3JldCA9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJF VFJJRVZFICovCi1pbnQgZW5fbWFpID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTUFJ TCAqLwotaW50IGVuX3ByaSA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBSSU5UICov Ci1pbnQgZW5fZW5hID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRU5BQkxFICovCi0j ZWxzZQotaW50IGVuX3hpdCA9IDAsIGVuX2N3ZCA9IDAsIGVuX2NweSA9IDAsIGVuX2RlbCA9IDAs IGVuX21rZCA9IDAsIGVuX3JtZCA9IDAsCi0gICAgZW5fZGlyID0gMCwgZW5fZmluID0gMCwgZW5f Z2V0ID0gMCwgZW5faG9zID0gMCwgZW5fcmVuID0gMCwgZW5fc2VuID0gMCwKLSAgICBlbl9zZXQg PSAwLCBlbl9zcGEgPSAwLCBlbl90eXAgPSAwLCBlbl93aG8gPSAwLCBlbl9ieWUgPSAwLCBlbl9h c2cgPSAwLAotICAgIGVuX3F1ZSA9IDAsIGVuX3JldCA9IDAsIGVuX21haSA9IDAsIGVuX3ByaSA9 IDAsIGVuX2VuYSA9IDA7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotLyogTWlzY2VsbGFuZW91cyAqLwotCi1jaGFyICoqeGFyZ3Y7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogR2xvYmFsIGNvcGllcyBvZiBhcmd2ICovCi1pbnQgeGFyZ2M7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGFyZ2MgICovCi1pbnQgeGFyZ3M7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogYW4gaW1tdXRhYmxlIGNvcHkgb2YgYXJnYyAqLwot Y2hhciAqeGFyZzA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBvZiBhcmd2WzBd ICovCi1jaGFyICpwaXBlZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0 byAtUCAocGlwZSkgZGF0YSAqLwotCi1leHRlcm4gY2hhciAqZGZ0dHk7ICAgICAgICAgICAgICAg ICAgICAgLyogRGVmYXVsdCB0dHkgbmFtZSBmcm9tIGNrP3Rpby5jICovCi1leHRlcm4gaW50IGRm bG9jOyAgICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBsb2NhdGlvbjogcmVtb3RlL2xv Y2FsICovCi1leHRlcm4gaW50IGRmcHJ0eTsgICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVs dCBwYXJpdHkgKi8KLWV4dGVybiBpbnQgZGZmbG93OyAgICAgICAgICAgICAgICAgICAgICAvKiBE ZWZhdWx0IGZsb3cgY29udHJvbCAqLwotCi0jaWZkZWYgVE5DT0RFCi1leHRlcm4gaW50IHRuX2Rl YjsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLS8qCi0gIEJ1ZmZlcmVkIGZpbGUgaW5wdXQgYW5kIG91 dHB1dCBidWZmZXJzLiAgU2VlIGdldHBrdCgpIGluIGNrY2Zucy5jCi0gIGFuZCB6b3V0ZHVtcCgp IGluIHRoZSBzeXN0ZW0tZGVwZW5kZW50IGZpbGUgaS9vIG1vZHVsZSAodXN1YWxseSBjaz9maW8u YykuCi0qLwotI2lmbmRlZiBEWU5BTUlDCi0vKiBOb3cgd2UgYWxsb2NhdGUgdGhlbSBkeW5hbWlj YWxseSwgc2VlIGdldGlvYnMoKSBiZWxvdy4gKi8KLWNoYXIgemluYnVmZmVyW0lOQlVGU0laRV0s IHpvdXRidWZmZXJbT0JVRlNJWkVdOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLWNoYXIgKnppbnB0 ciwgKnpvdXRwdHI7Ci1pbnQgemluY250LCB6b3V0Y250OwotaW50IHpvYnVmc2l6ZSA9IE9CVUZT SVpFOwotaW50IHpvZmJ1ZmZlciA9IDE7Ci1pbnQgem9mYmxvY2sgID0gMTsKLQotI2lmZGVmIFNF U0xJTUlUCi1pbnQgc2VzbGltaXQgPSAwOwotI2VuZGlmIC8qIFNFU0xJTUlUICovCi0KLSNpZmRl ZiBDS19BVVRIRU5USUNBVElPTgotI2luY2x1ZGUgImNrdWF0aC5oIgotI2VuZGlmIC8qIENLX0FV VEhFTlRJQ0FUSU9OICovCi0KLV9QUk9UT1RZUCggaW50IGdldGlvYnMsIChWT0lEKSApOwotCi0v KiAgTSBBIEkgTiAgLS0gIEMtS2VybWl0IG1haW4gcHJvZ3JhbSAgKi8KLQotI2luY2x1ZGUgPHNp Z25hbC5oPgotCi0jaWZuZGVmIE5PQ0NUUkFQCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0jaW5jbHVk ZSAiY2tjc2lnLmgiCi1ja2ptcGJ1ZiBjbWpidWY7Ci0jaWZkZWYgR0VNRE9TICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU3BlY2lhbCBmb3IgQXRhcmkgU1QgKi8KLWNjX2NsZWFuKCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGNhbid0IGJlIHJpZ2h0PyAqLwotI2Vu ZGlmIC8qIEdFTURPUyAqLwotI2VuZGlmIC8qIE5PQ0NUUkFQICovCi0KLSNpZm5kZWYgTk9YRkVS Ci0vKiBJbmZvIGFzc29jaWF0ZWQgd2l0aCBhIHN5c3RlbSBJRCAqLwotCi1zdHJ1Y3Qgc3lzZGF0 YSBzeXNpZGxpc3RbXSA9IHsgICAgICAgICAgLyogQWRkIG90aGVycyBhcyBuZWVkZWQuLi4gKi8K LSAgeyAiMCIsICAiYW5vbnltb3VzIiwgICAgMCwgTlVMLCAgMCwgMCwgMCB9LAotICB7ICJBMSIs ICJBcHBsZSBJSSIsICAgICAwLCBOVUwsICAwLCAwLCAzIH0sIC8qIGZpeCB0aGlzICovCi0gIHsg IkEzIiwgIk1hY2ludG9zaCIsICAgIDEsICc6JywgIDAsIDIsIDEgfSwKLSAgeyAiRDciLCAiVk1T IiwgICAgICAgICAgMCwgJ10nLCAgMSwgMCwgMCB9LAotICB7ICJEQSIsICJSU1RTL0UiLCAgICAg ICAwLCAnXScsICAxLCAwLCAzIH0sIC8qIChpIHRoaW5rLi4uKSAqLwotICB7ICJEQiIsICJSVDEx IiwgICAgICAgICAwLCBOVUwsICAxLCAwLCAzIH0sIC8qIChtYXliZS4uLikgKi8KLSAgeyAiRjMi LCAiQU9TL1ZTIiwgICAgICAgMSwgJzonLCAgMCwgMCwgMiB9LAotICB7ICJJMSIsICJWTS9DTVMi LCAgICAgICAwLCBOVUwsICAwLCAwLCAwIH0sCi0gIHsgIkkyIiwgIk1WUy9UU08iLCAgICAgIDAs IE5VTCwgIDAsIDAsIDAgfSwKLSAgeyAiSTQiLCAiTVVTSUMiLCAgICAgICAgMCwgTlVMLCAgMCwg MCwgMCB9LAotICB7ICJJNyIsICJDSUNTIiwgICAgICAgICAwLCBOVUwsICAwLCAwLCAwIH0sCi0g IHsgIkk5IiwgIk1WUy9ST1NDT0UiLCAgIDAsIE5VTCwgIDAsIDAsIDAgfSwKLSAgeyAiSzIiLCAi QXRhcmkgU1QiLCAgICAgMSwgJ1xcJywgMSwgMCwgMyB9LAotICB7ICJMMyIsICJBbWlnYSIsICAg ICAgICAxLCAnLycsICAxLCAwLCAyIH0sCi0gIHsgIk1WIiwgIlN0cmF0dXMgVk9TIiwgIDEsICc+ JywgIDAsIDEsIDAgfSwKLSAgeyAiTjMiLCAiQXBvbGxvIEFlZ2lzIiwgMSwgJy8nLCAgMCwgMywg MiB9LAotICB7ICJVMSIsICJVTklYIiwgICAgICAgICAxLCAnLycsICAwLCAzLCAyIH0sCi0gIHsg IlU4IiwgIk1TLURPUyIsICAgICAgIDEsICdcXCcsIDEsIDAsIDMgfSwKLSAgeyAiVUQiLCAiT1Mt OSIsICAgICAgICAgMSwgJy8nLCAgMCwgMywgMiB9LAotICB7ICJVTiIsICJXaW5kb3dzLTMyIiwg ICAxLCAnXFwnLCAxLCAyLCAzIH0sCi0gIHsgIlVPIiwgIk9TLzIiLCAgICAgICAgIDEsICdcXCcs IDEsIDIsIDMgfQotfTsKLXN0YXRpYyBpbnQgbnh4c3lzaWRzID0gKHNpemVvZihzeXNpZGxpc3Qp IC8gc2l6ZW9mKHN0cnVjdCBzeXNkYXRhKSk7Ci0KLS8qIEdpdmVuIGEgS2VybWl0IHN5c3RlbSBJ RCBjb2RlLCByZXR1cm4gdGhlIGFzc29jaWF0ZWQgbmFtZSBzdHJpbmcgKi8KLS8qIGFuZCBzb21l IHByb3BlcnRpZXMgb2YgdGhlIGZpbGVuYW1lcy4uLiAqLwotCi1jaGFyICoKLWdldHN5c2lkKHMp IGNoYXIgKiBzOyB7ICAgICAgICAgICAgICAgICAvKiBHZXQgc3lzdGVtLXR5cGUgbmFtZSAqLwot ICAgIGludCBpOwotICAgIGlmICghcykgcmV0dXJuKCIiKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwg bnh4c3lzaWRzOyBpKyspCi0gICAgICBpZiAoIXN0cmNtcChzeXNpZGxpc3RbaV0uc2lkX2NvZGUs cykpCi0gICAgICAgIHJldHVybihzeXNpZGxpc3RbaV0uc2lkX25hbWUpOwotICAgIHJldHVybihz KTsKLX0KLQotaW50Ci1nZXRzeXNpeChzKSBjaGFyICpzOyB7ICAgICAgICAgICAgICAgICAgLyog R2V0IHN5c3RlbS10eXBlIGluZGV4ICovCi0gICAgaW50IGk7Ci0gICAgaWYgKCFzKSByZXR1cm4o LTEpOwotICAgIGZvciAoaSA9IDA7IGkgPCBueHhzeXNpZHM7IGkrKykKLSAgICAgIGlmICghc3Ry Y21wKHN5c2lkbGlzdFtpXS5zaWRfY29kZSxzKSkKLSAgICAgICAgcmV0dXJuKGkpOwotICAgIHJl dHVybigtMSk7Ci19Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLS8qIFRlbGwgaWYgYSBwYXRobmFt ZSBpcyBhYnNvbHV0ZSAodmVyc3VzIHJlbGF0aXZlKSAqLwotLyogVGhpcyBzaG91bGQgYmUgcGFy Y2VsZWQgb3V0IHRvIGVhY2ggb2YgdGhlIGNrKmZpby5jIG1vZHVsZXMuLi4gKi8KLS8qIFZNUyBp c2Fic29sdXRlKCkgaXMgbm93IGluIGNrdmZpby5jLiAqLwotI2lmbmRlZiBWTVMKLWludAotaXNh YnNvbHV0ZShwYXRoKSBjaGFyICogcGF0aDsgewotICAgIGludCByYyA9IDA7Ci0gICAgaW50IHg7 Ci0gICAgaWYgKCFwYXRoKQotICAgICAgcmV0dXJuKDApOwotICAgIGlmICghKnBhdGgpCi0gICAg ICByZXR1cm4oMCk7Ci0gICAgeCA9IChpbnQpIHN0cmxlbihwYXRoKTsKLSAgICBkZWJ1ZyhGMTEx LCJpc2Fic29sdXRlIixwYXRoLHgpOwotI2lmZGVmIFVOSVgKLSAgICBpZiAoKnBhdGggPT0gJy8n Ci0jaWZkZWYgRFRJTERFCi0gICAgICAgIHx8ICpwYXRoID09ICd+JwotI2VuZGlmIC8qIERUSUxE RSAqLwotICAgICAgICApCi0gICAgICByYyA9IDE7Ci0jZWxzZSAvKiBkZWYgVU5JWCAqLwotI2lm ZGVmIE9TMgotICAgIGlmICgqcGF0aCA9PSAnLycgfHwgKnBhdGggPT0gJ1xcJykKLSAgICAgIHJj ID0gMTsKLSAgICBlbHNlIGlmIChpc2FscGhhKCpwYXRoKSAmJiB4ID4gMikKLSAgICAgIGlmICgq KHBhdGgrMSkgPT0gJzonICYmICgqKHBhdGggKzIpID09ICcvJyB8fCAqKHBhdGgrMikgPT0gJ1xc JykpCi0gICAgICAgIHJjID0gMTsKLSNlbHNlIC8qIGRlZiBPUzIgKi8KLSNpZmRlZiBBTUlHQQot ICAgIGlmICgqcGF0aCA9PSAnLycKLSNpZmRlZiBEVElMREUKLSAgICAgICAgfHwgKnBhdGggPT0g J34nCi0jZW5kaWYgLyogRFRJTERFICovCi0gICAgICAgICkKLSAgICAgIHJjID0gMTsKLSNlbHNl IC8qIGRlZiBBTUlHQSAqLwotI2lmZGVmIE9TSwotICAgIGlmICgqcGF0aCA9PSAnLycKLSNpZmRl ZiBEVElMREUKLSAgICAgICAgfHwgKnBhdGggPT0gJ34nCi0jZW5kaWYgLyogRFRJTERFICovCi0g ICAgICAgICkKLSAgICAgIHJjID0gMTsKLSNlbHNlIC8qIGRlZiBPU0sgKi8KLSNpZmRlZiBkYXRh Z2VuZXJhbAotICAgIGlmICgqcGF0aCA9PSAnOicpCi0gICAgICByYyA9IDE7Ci0jZWxzZSAvKiBk ZWYgZGF0YWdlbmVyYWwgKi8KLSNpZmRlZiBNQUMKLSAgICByYyA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGaWxsIGluIGxhdGVyLi4uICovCi0jZWxzZSAvKiBkZWYgTUFDICov Ci0jaWZkZWYgU1RSQVRVUwotICAgIHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZpbGwgaW4gbGF0ZXIuLi4gKi8KLSNlbHNlIC8qIGRlZiBTVFJBVFVTICovCi0jaWZkZWYg R0VNRE9TCi0gICAgaWYgKCpwYXRoID09ICcvJyB8fCAqcGF0aCA9PSAnXFwnKQotICAgICAgcmMg PSAxOwotICAgIGVsc2UgaWYgKGlzYWxwaGEoKnBhdGgpICYmIHggPiAxKQotICAgICAgaWYgKCoo cGF0aCsxKSA9PSAnOicpCi0gICAgICAgIHJjID0gMTsKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSNl bmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogZGF0YWdlbmVy YWwgKi8KLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBBTUlHQSAqLwotI2VuZGlmIC8qIE9T MiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICBkZWJ1ZyhGMTAxLCJpc2Fic29sdXRlIHJjIiwi IixyYyk7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLSNlbmRpZiAvKiBuZGVmIFZNUyAqLwotCi0vKiAg U2VlIGlmIEkgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBrZXlib2FyZCAgKi8KLQotaW50Ci1p c19hX3R0eShuKSBpbnQgbjsgewotI2lmZGVmIFVOSVgKLSAgICBleHRlcm4gaW50IHR0ZmRmbGc7 Ci0gICAgaWYgKHR0ZmRmbGcgPiAwKQotICAgICAgcmV0dXJuKDEpOwotI2VuZGlmIC8qIFVOSVgg Ki8KLSNpZmRlZiBLVUkKLSAgICByZXR1cm4gMTsKLSNlbHNlIC8qIEtVSSAqLwotI2lmZGVmIE5U Ci0gICAgaWYgKGlzV2luOTUoKSkKLSAgICAgIHJldHVybigxKTsKLSAgICBlbHNlCi0gICAgICBy ZXR1cm4oX2lzYXR0eShuKSk7Ci0jZWxzZQotI2lmZGVmIElLU0QKLSAgIGlmIChpbnNlcnZlcikK LSAgICAgcmV0dXJuKDEpOwotICAgZWxzZQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgcmV0dXJu KGlzYXR0eShuKSk7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLX0KLQotI2lm bmRlZiBOT1hGRVIKLVZPSUQKLWluaXR4bGlzdCgpIHsKLSAgICBleHRlcm4gY2hhciAqIHNuZGV4 Y2VwdFtdLCAqIHJjdmV4Y2VwdFtdOwotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBO U05ERVhDRVBUOyBpKyspIHsKLQlzbmRleGNlcHRbaV0gPSBOVUxMOwotCXJjdmV4Y2VwdFtpXSA9 IE5VTEw7Ci0gICAgfQotfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0vKiBJbml0aWFsaXplIGZs b3cgY29udHJvbCB0YWJsZSAqLwotCi1WT0lECi1pbml0ZmxvdygpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRGVmYXVsdCB2YWx1ZXMgZm9yIGZsb3cgY29udHJvbCAqLwotI2lmZGVm IFZNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBlYWNoIGtpbmQgb2YgY29u bmVjdGlvbi4gKi8KLSAgICAvKiBUaGUgVk1TIHRlbG5ldCB0ZXJtaW5hbCBkcml2ZXIgdHJlYXRz ICJub25lIiBhcyByZXF1ZXN0IHRvIGxvc2UgY2hhcnMgKi8KLSAgICBjeGZsb3dbQ1hUX1JFTU9U RV0gID0gRkxPX1hPTlg7ICAgICAvKiBSZW1vdGUgbW9kZS4uLiAqLwotI2Vsc2UKLSNpZmRlZiBI UFVYCi0gICAgLyogRGl0dG8gZm9yIEhQLVVYICovCi0gICAgY3hmbG93W0NYVF9SRU1PVEVdICA9 IEZMT19YT05YOyAgICAgLyogUmVtb3RlIG1vZGUuLi4gKi8KLSNlbHNlCi0gICAgLyogVGhlIHRl bXB0YXRpb24gaXMgdG8gbWFrZSB0aGlzIG9uZSBGTE9fS0VFUCBidXQgZG9uJ3QhISEgKi8KLSAg ICAvKiBJdCB0b3RhbGx5IHdyZWNrcyBiaW5hcnktZmlsZSB0cmFuc2ZlciB3aGVuIGNvbWluZyBp biB2aWEgVGVsbmV0LiAqLwotICAgIC8qIEluIFVOSVggYXQgbGVhc3QuLi4gKi8KLSAgICBjeGZs b3dbQ1hUX1JFTU9URV0gID0gRkxPX05PTkU7Ci0jZW5kaWYgLyogSFBVWCAqLwotI2VuZGlmIC8q IFZNUyAqLwotCi0jaWZkZWYgVk1TCi0gICAgY3hmbG93W0NYVF9ESVJFQ1RdICA9IEZMT19YT05Y OyAgICAgLyogRGlyZWN0IHNlcmlhbCBjb25uZWN0aW9ucy4uLiAqLwotI2Vsc2UKLSAgICBjeGZs b3dbQ1hUX0RJUkVDVF0gID0gRkxPX05PTkU7Ci0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBD S19SVFNDVFMKLSAgICBjeGZsb3dbQ1hUX01PREVNXSAgID0gRkxPX1JUU0M7ICAgICAvKiBNb2Rl bSBjb25uZWN0aW9ucy4uLiAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICBjeGZsb3dbQ1hUX01P REVNXSAgID0gRkxPX1hPTlg7Ci0jZWxzZQotICAgIGN4Zmxvd1tDWFRfTU9ERU1dICAgPSBGTE9f Tk9ORTsKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBDS19SVFNDVFMgKi8KLQotI2lmZGVm IFZNUwotICAgIGN4Zmxvd1tDWFRfVENQSVBdICAgPSBGTE9fWE9OWDsgICAgIC8qIFRDUC9JUCBj b25uZWN0aW9ucy4uLiAqLwotI2Vsc2UKLSAgICBjeGZsb3dbQ1hUX1RDUElQXSAgID0gRkxPX05P TkU7Ci0jZW5kaWYgLyogVk1TICovCi0KLSAgICBjeGZsb3dbQ1hUX1NTSF0gICAgID0gRkxPX05P TkU7Ci0gICAgY3hmbG93W0NYVF9YMjVdICAgICA9IEZMT19OT05FOyAgICAgLyogT3RoZXIga2lu ZHMgb2YgbmV0d29ya3MuLi4gKi8KLSAgICBjeGZsb3dbQ1hUX0RFQ05FVF0gID0gRkxPX1hPTlg7 Ci0gICAgY3hmbG93W0NYVF9MQVRdICAgICA9IEZMT19YT05YOwotICAgIGN4Zmxvd1tDWFRfTkVU QklPU10gPSBGTE9fTk9ORTsKLSAgICBjeGZsb3dbQ1hUX05QSVBFXSAgID0gRkxPX05PTkU7Ci0g ICAgY3hmbG93W0NYVF9QSVBFXSAgICA9IEZMT19OT05FOwotICAgIGZsb3cgPSBjeGZsb3dbY3h0 eXBlXTsgICAgICAgICAgICAgIC8qIEluaXRpYWwgZmxvdyBzZXR0aW5nLiAqLwotICAgIGRlYnVn KEYxMDEsImluaXRmbG93IiwiIixmbG93KTsKLX0KLQotI2lmbmRlZiBOT1hGRVIKLS8qIEluaXRp YWxpemUgZmlsZSB0cmFuc2ZlciBwcm90b2NvbHMgKi8KLQotVk9JRAotaW5pdHByb3RvKHksIHVw YnN0ciwgdXB0c3RyLCBzcnZzdHIsIHNuZGJzdHIsIHNuZHRzdHIsIHJjdmJzdHIsIHJjdnRzdHIp Ci0gICAgaW50IHk7Ci0gICAgY2hhciAqIHVwYnN0ciwgKiB1cHRzdHIsICogc3J2c3RyLCAqIHNu ZGJzdHIsICogc25kdHN0ciwgKiByY3Zic3RyLAotICAgICogcmN2dHN0cjsKLS8qIGluaXRwcm90 byAqLyB7Ci0KLSAgICBpZiAodXBic3RyKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb252 ZXJ0IG51bGwgc3RyaW5ncyAqLwotICAgICAgaWYgKCEqdXBic3RyKSAgICAgICAgICAgICAgICAg ICAgIC8qIHRvIG51bGwgcG9pbnRlcnMgKi8KLSAgICAgICAgdXBic3RyID0gTlVMTDsKLQotICAg IGlmICh1cHRzdHIpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgbnVsbCBzdHJp bmdzICovCi0gICAgICBpZiAoISp1cHRzdHIpICAgICAgICAgICAgICAgICAgICAgLyogdG8gbnVs bCBwb2ludGVycyAqLwotICAgICAgICB1cHRzdHIgPSBOVUxMOwotCi0gICAgaWYgKHNuZGJzdHIp Ci0gICAgICBpZiAoISpzbmRic3RyKQotICAgICAgICBzbmRic3RyID0gTlVMTDsKLQotICAgIGlm IChzbmR0c3RyKQotICAgICAgaWYgKCEqc25kdHN0cikKLSAgICAgICAgc25kdHN0ciA9IE5VTEw7 Ci0KLSAgICBpZiAocmN2YnN0cikKLSAgICAgIGlmICghKnJjdmJzdHIpCi0gICAgICAgIHJjdmJz dHIgPSBOVUxMOwotCi0gICAgaWYgKHJjdnRzdHIpCi0gICAgICBpZiAoISpyY3Z0c3RyKQotICAg ICAgICByY3Z0c3RyID0gTlVMTDsKLQotICAgIGlmIChzcnZzdHIpCi0gICAgICBpZiAoISpzcnZz dHIpCi0gICAgICAgIHNydnN0ciA9IE5VTEw7Ci0KLSAgICBwcm90b2NvbCA9IHk7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBTZXQgcHJvdG9jb2wgKi8KLQotICAgIGlmIChwdGFiW3Byb3RvY29s XS5ycGt0bGVuID4gLTEpCi0gICAgICB1cnBzaXogPSBwdGFiW3Byb3RvY29sXS5ycGt0bGVuOwot ICAgIGlmIChwdGFiW3Byb3RvY29sXS5zcGt0ZmxnID4gLTEpCi0gICAgICBzcHNpemYgPSBwdGFi W3Byb3RvY29sXS5zcGt0ZmxnOwotICAgIGlmIChwdGFiW3Byb3RvY29sXS5zcGt0bGVuID4gLTEp IHsKLSAgICAgICAgc3BzaXogPSBwdGFiW3Byb3RvY29sXS5zcGt0bGVuOwotICAgICAgICBkZWJ1 ZyhGMTAxLCJpbml0cHJvdG8gc3BzaXoiLCIiLHNwc2l6KTsKLSAgICAgICAgaWYgKHNwc2l6Zikg ewotICAgICAgICAgICAgc3BzaXpyID0gc3BtYXggPSBzcHNpejsKLSAgICAgICAgICAgIGRlYnVn KEYxMDEsImluaXRwcm90byBzcHNpenIiLCIiLHNwc2l6cik7Ci0gICAgICAgIH0KLSAgICB9Ci0g ICAgaWYgKHB0YWJbcHJvdG9jb2xdLndpbnNpemUgPiAtMSkKLSAgICAgIHdzbG90ciA9IHB0YWJb cHJvdG9jb2xdLndpbnNpemU7Ci0gICAgaWYgKHB0YWJbcHJvdG9jb2xdLnByZWZpeCA+IC0xKQot ICAgICAgcHJlZml4aW5nID0gcHRhYltwcm90b2NvbF0ucHJlZml4OwotICAgIGlmIChwdGFiW3By b3RvY29sXS5mbmNhID4gLTEpCi0gICAgICBmbmNhY3QgID0gcHRhYltwcm90b2NvbF0uZm5jYTsK LSAgICBpZiAocHRhYltwcm90b2NvbF0uZm5jbiA+IC0xKQotICAgICAgZm5jbnYgICA9IHB0YWJb cHJvdG9jb2xdLmZuY247Ci0gICAgaWYgKHB0YWJbcHJvdG9jb2xdLmZuc3AgPiAtMSkKLSAgICAg IGZuc3BhdGggPSBwdGFiW3Byb3RvY29sXS5mbnNwOwotICAgIGlmIChwdGFiW3Byb3RvY29sXS5m bnJwID4gLTEpCi0gICAgICBmbnJwYXRoID0gcHRhYltwcm90b2NvbF0uZm5ycDsKLQotICAgIG1h a2VzdHIoJihwdGFiW3Byb3RvY29sXS5oX2JfaW5pdCksdXBic3RyKTsKLSAgICBtYWtlc3RyKCYo cHRhYltwcm90b2NvbF0uaF90X2luaXQpLHVwdHN0cik7Ci0gICAgbWFrZXN0cigmKHB0YWJbcHJv dG9jb2xdLmhfeF9pbml0KSxzcnZzdHIpOwotICAgIG1ha2VzdHIoJihwdGFiW3Byb3RvY29sXS5w X2Jfc2NtZCksc25kYnN0cik7Ci0gICAgbWFrZXN0cigmKHB0YWJbcHJvdG9jb2xdLnBfdF9zY21k KSxzbmR0c3RyKTsKLSAgICBtYWtlc3RyKCYocHRhYltwcm90b2NvbF0ucF9iX3JjbWQpLHJjdmJz dHIpOwotICAgIG1ha2VzdHIoJihwdGFiW3Byb3RvY29sXS5wX3RfcmNtZCkscmN2dHN0cik7Ci19 Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9DTURMCi1WT0lECi0jaWZkZWYgQ0tf QU5TSUMKLWRvY21kbGluZSh2b2lkICogdGhyZWFkaW5mbykKLSNlbHNlIC8qIENLX0FOU0lDICov Ci1kb2NtZGxpbmUodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsKLSNpZmRlZiBOVFNJRwotICAgIHNldGludCgpOwotICAgIGlmICh0aHJlYWRp bmZvKSB7ICAgICAgICAgICAgICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0g ICAgICAgVGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbyk7Ci0gICAgICAgZGVidWcoIEYx MDAsICJkb2NtZGxpbmUgY2FsbGVkIHdpdGggdGhyZWFkaW5mbyBibG9jayIsICIiLCAwICk7Ci0g ICAgfSBlbHNlCi0gICAgICBkZWJ1ZyggRjEwMCwgImRvY21kbGluZSB0aHJlYWRpbmZvIGlzIE5V TEwiLCIiLDApOwotI2VuZGlmIC8qIE5UU0lHICovCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBO VAotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICBzZXRudGNyZWRzKCk7Ci0j ZW5kaWYgLyogSUtTRCAqLwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8K LSAgICBwcm90bygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUYWtlIGFueSByZXF1 ZXN0ZWQgYWN0aW9uLCB0aGVuICovCi0gICAgaWYgKCFxdWlldCkgICAgICAgICAgICAgICAgICAg ICAgICAgLyogcHV0IGN1cnNvciBiYWNrIGF0IGxlZnQgbWFyZ2luLCAqLwotICAgICAgY29ub2xs KCIiKTsKLSNpZm5kZWYgTk9MT0NBTAotICAgIGlmIChjbmZsZykgeyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlLWNvbm5lY3QgaWYgcmVxdWVzdGVkICovCi0gICAgICAgIGNuZmxnID0gMDsK LSAgICAgICAgZG9jb25lY3QoMCwwKTsKLSAgICAgICAgaWYgKHR0Y2hrKCkgPCAwKQotICAgICAg ICAgIGRvbG9nZW5kKCk7Ci0gICAgfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIE5U U0lHCi0gICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0g ICByZXR1cm47Ci19Ci0KLXZvaWQKLWlrc2xvZ2luKCkgewotICAgIGlmIChzc3RlbG5ldAotI2lm ZGVmIElLU0QKLSAgICAgICAgfHwgaW5zZXJ2ZXIgICAgICAgICAgICAgICAgICAgICAvKiBJbnRl cm5ldCBzZXJ2ZXIgKi8KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICkgewotICAgICAgICBj aGFyICpzOwotICAgICAgICBleHRlcm4gaW50IGZkaXNwbGE7ICAgICAgICAgICAgIC8qIEZpbGUt dHJhbnNmZXIgZGlzcGxheSBmb3JtYXQgKi8KLSAgICAgICAgZXh0ZXJuIGNoYXIgKiBpa3Byb21w dDsgICAgICAgICAvKiBJS1NEIHByb21wdCAqLwotCi0jaWZkZWYgSUtTRAotI2lmZGVmIENLX0xP R0lOCi0gICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgeF9sb2dpbiA9IDE7ICAg ICAgICAgICAgICAgIC8qIExvZ2luIHJlcXVpcmVkICovCi0gICAgICAgICAgICB4X2xvZ2dlZCA9 IDA7ICAgICAgICAgICAgICAgLyogTm90IGxvZ2dlZCBpbiB5ZXQgKi8KLSAgICAgICAgICAgIGNt c2V0cChpa3Byb21wdCk7ICAgICAgICAgICAvKiBTZXQgdXAgSUtTRCdzIHByb21wdCAqLwotI2lm bmRlZiBOT1NFUlZFUgotICAgICAgICAgICAgZW5fbWFpID0gMDsgICAgICAgICAgICAgICAgIC8q IE1BSUwgaXMgZGlzYWJsZWQgKi8KLSAgICAgICAgICAgIGVuX3dobyA9IDA7ICAgICAgICAgICAg ICAgICAvKiBSRU1PVEUgV0hPIGlzIGRpc2FibGVkICovCi0gICAgICAgICAgICBlbl9ob3MgPSAw OyAgICAgICAgICAgICAgICAgLyogUkVNT1RFIEhPU1QgaXMgZGlzYWJsZWQgKi8KLSAgICAgICAg ICAgIGVuX3ByaSA9IDA7ICAgICAgICAgICAgICAgICAvKiBQUklOVCBpcyBkaXNhYmxlZCAqLwot I2VuZGlmIC8qIE5PU0VSVkVSICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB4X2xv Z2luID0gMDsgICAgICAgICAgICAgICAgLyogTG9naW4gbm90IHJlcXVpcmVkICovCi0gICAgICAg ICAgICB4X2xvZ2dlZCA9IDE7ICAgICAgICAgICAgICAgLyogQWxyZWFkeSBsb2dnZWQgaW4gKi8K LSAgICAgICAgfQotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jZW5kaWYgLyogSUtTRCAqLwotICAg ICAgICBub2xvY2FsID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBMSU5FL0hPU1Qgbm90 IGFsbG93ZWQgKi8KLSAgICAgICAgZmRpc3BsYSA9IFhZRkRfTjsgICAgICAgICAgICAgICAvKiBO byBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgKi8KLSNpZmRlZiBORVRDT05OCi0gICAgICAgIGNsaWVu dGhvc3QgPSBja2dldHBlZXIoKTsgICAgICAgLyogR2V0IGNsaWVudCdzIGhvc3RuYW1lICovCi0g ICAgICAgIGRlYnVnKEYxMTAsImlrc2xvZ2luIGNsaWVudGhvc3QiLGNsaWVudGhvc3QsMCk7Ci0j ZW5kaWYgLyogTkVUQ09OTiAqLwotICAgICAgICB6dGltZSgmcyk7ICAgICAgICAgICAgICAgICAg ICAgIC8qIEdldCBjdXJyZW50IGRhdGUgYW5kIHRpbWUgKi8KLQotI2lmZGVmIENLX0xPR0lOCi0j aWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICAgICAgaWYgKHhfbG9naW4pIHsKLSAgICAgICAg ICAgIHhfbG9nZ2VkID0gY2tfdG5fYXV0aF92YWxpZCgpOyAvKiBEaWQgVGVsbmV0IEF1dGggc3Vj Y2VlZD8gKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImlrc2xvZ2luIiwieF9sb2dnZWQiLHhf bG9nZ2VkKTsKLQotI2lmZGVmIE5UCi0gICAgICAgICAgICAvKiBPbiBXaW5kb3dzIDl4LCB3ZSBk byBub3QgaGF2ZSB0aGUgYWJpbGl0eSBpbiAgKi8KLSAgICAgICAgICAgIC8qIHp2dXNlcigpIGF0 IHByZXNlbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBuYW1lICAqLwotICAgICAgICAgICAgLyogYXBw cm92ZWQgaW4gYSBLZXJiZXJvcyBwcmluY2lwYWwgaXMgcmVhbGx5IGEgICovCi0gICAgICAgICAg ICAvKiBhbiBhY2NvdW50IGluIHRoZSBXaW5kb3dzIEFjY2VzcyBDb250cm9sIExpc3QgKi8KLSAg ICAgICAgICAgIGlmIChpc1dpbjk1KCkgJiYgeF9sb2dnZWQgPT0gQVVUSF9WQUxJRAotICAgICAg ICAgICAgICAgICAmJiAoY2tfdG5fYXV0aGVudGljYXRlZCgpICE9IEFVVEhUWVBFX05UTE0pCi0j aWZkZWYgQ0tfU1JQCi0gICAgICAgICAgICAgICAgICYmIChja190bl9hdXRoZW50aWNhdGVkKCkg IT0gQVVUSFRZUEVfU1JQKQotI2VuZGlmIC8qIENLX1NSUCAqLwotICAgICAgICAgICAgICAgICAp IHsKLSAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVVNFUik7Ci0gICAgICAgICAg ICAgICAgeF9sb2dnZWQgPSBBVVRIX1VTRVI7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJXQVJO SU5HOlxyXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGYoCi0iIFRoZSBUZWxuZXQgYXV0aGVu dGljYXRpb24gbWV0aG9kIHVzZWQgY2Fubm90IHByb3ZpZGUgZm9yIGF1dG9tYXRlZFxyXG4iKTsK LSAgICAgICAgICAgICAgICBwcmludGYoCi0iIGxvZ2luIHRvIFdpbmRvd3MgOTUgb3IgV2luZG93 cyA5OC4gIEEgcGFzc3dvcmQgbXVzdCBiZSBlbnRlcmVkXHJcbiIpOwotICAgICAgICAgICAgICAg IHByaW50ZigKLSIgbG9jYWxseSB0byB2YWxpZGF0ZSB5b3VyIHVzZXJpZC4gIFRlbG5ldCBhdXRo ZW50aWNhdGlvbiAoYW5kIGVuY3J5cHRpb24pXHJcbiIKLSAgICAgICAgICAgICAgICApOwotICAg ICAgICAgICAgICAgIHByaW50ZigKLSIgY2FuIGJlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIGhvc3Qg KGFuZCBwcm90ZWN0IHRoZSBwcml2YWN5IG9mIHlvdXIgcGFzc3dvcmQuKVwKLVxyXG4iCi0gICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotCi0gICAgICAg ICAgICBpZiAoeF9sb2dnZWQgPT0gQVVUSF9WQUxJRCkgewotI2lmZGVmIENLX1NTTAotICAgICAg ICAgICAgICAgIGlmICgoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgJiYKLSAg ICAgICAgICAgICAgICAgICAgKCFURUxPUFRfVShURUxPUFRfQVVUSEVOVElDQVRJT04pIHx8Ci0g ICAgICAgICAgICAgICAgICAgICBja190bl9hdXRoZW50aWNhdGVkKCkgPT0gQVVUSFRZUEVfTlVM TCB8fAotICAgICAgICAgICAgICAgICAgICAgY2tfdG5fYXV0aGVudGljYXRlZCgpID09IEFVVEhU WVBFX0FVVE8pCi0gICAgICAgICAgICAgICAgICAgICkgewotI2lmZGVmIFNTTF9LUkI1Ci0gICAg ICAgICAgICAgICAgICAgIGlmICh0bHNfaXNfa3JiNSgwKSkgewotICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCJBdXRoZW50aWNhdGVkIHVzaW5nIEtlcmJlcm9zIDVcclxuIik7Ci0jaWZk ZWYgQ0tTWVNMT0cKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lT TEdfTEkgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVy biBjaGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2tzeXNsb2coU1lTTEdfTEksIDEsICJBVVRIX1ZBTElEIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiS2VyYmVyb3MgNSIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8q IFNTTF9LUkI1ICovCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiQXV0aGVudGljYXRlZCB1c2luZyBYLjUwOSBjZXJ0aWZpY2F0ZVxyXG4iKTsK LSNpZmRlZiBDS1NZU0xPRwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNreHN5c2xvZyA+ PSBTWVNMR19MSSAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ZXh0ZXJuIGNoYXIgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMSwgIkFVVEhfVkFMSUQiLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJYLjUwOSBjZXJ0aWZpY2F0ZSIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAg ICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAg ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0ZWQgdXNpbmcg JXNcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShja190 bl9hdXRoZW50aWNhdGVkKCkpKTsKLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICAgICAgICAgICAg ICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfTEkgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAg ICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciBzelVzZXJOYW1lQXV0aGVudGljYXRlZFtdOwot ICAgICAgICAgICAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMSwgIkFVVEhfVkFM SUQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGNr X3RuX2F1dGhlbnRpY2F0ZWQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN6VXNlck5hbWVBdXRoZW50aWNhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0g ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgenZ1c2VyKHVpZGJ1Zik7Ci0gICAg ICAgICAgICAgICAgaWYgKHp2cGFzcygiIikgPT0gMCkKLSAgICAgICAgICAgICAgICAgIHhfbG9n Z2VkID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoeF9sb2dnZWQgPT0gQVVUSF9VU0VSICYm ICFzdHJjbXAodWlkYnVmLCJhbm9ueW1vdXMiKSkgewotICAgICAgICAgICAgICAgIGV4dGVybiBj aGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107Ci0gICAgICAgICAgICAgICAgenZ1c2VyKHVp ZGJ1Zik7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3pVc2VyTmFtZUF1dGhlbnRpY2F0 ZWQiLAotICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkLDApOwot ICAgICAgICAgICAgICAgIGlmICh6dnBhc3Moc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQpID09IDAp IHsKLSAgICAgICAgICAgICAgICAgIC8qIEFub255bW91cyBsb2dpbiBmYWlsZWQuICBGb3JjZSBh IHVzZXJuYW1lIHByb21wdC4gKi8KLSAgICAgICAgICAgICAgICAgIHhfbG9nZ2VkID0gMDsKLSAg ICAgICAgICAgICAgICAgIHVpZGJ1ZlswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgfSBlbHNl IHsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAgICAgICAgaWYgKChzc2xfYWN0aXZlX2Zs YWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgKCFURUxP UFRfVShURUxPUFRfQVVUSEVOVElDQVRJT04pIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAg Y2tfdG5fYXV0aGVudGljYXRlZCgpID09IEFVVEhUWVBFX05VTEwgfHwKLSAgICAgICAgICAgICAg ICAgICAgICAgICBja190bl9hdXRoZW50aWNhdGVkKCkgPT0gQVVUSFRZUEVfQVVUTykpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQXV0aGVudGljYXRlZCB1c2luZyBYLjUwOSBj ZXJ0aWZpY2F0ZVxyXG4iKTsKLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19MSSAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMSwgIkFVVEhf VVNFUiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlguNTA5IGNlcnRp ZmljYXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1l QXV0aGVudGljYXRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAg ICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0ZWQg dXNpbmcgJXNcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBF X05BTUUoY2tfdG5fYXV0aGVudGljYXRlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo Y2t4c3lzbG9nID49IFNZU0xHX0xJICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAiQVVUSF9VU0VSIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoY2tfdG5fYXV0aGVu dGljYXRlZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6VXNl ck5hbWVBdXRoZW50aWNhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8K LSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg fSBlbHNlIHsKLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICAgICAgICAgIGlmIChja3hzeXNsb2cg Pj0gU1lTTEdfTEkgJiYgY2t4bG9nZ2luZyAmJgotICAgICAgICAgICAgICAgICAgICB4X2xvZ2dl ZCA9PSBBVVRIX1VTRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3pVc2Vy TmFtZUF1dGhlbnRpY2F0ZWRbXTsKLSAgICAgICAgICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdf TEksIDEsICJBVVRIX1VTRVIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQ RV9OQU1FKGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgICAg ICAgICAgeF9sb2dnZWQgPSAwOwotICAgICAgICAgICAgICAgIGlmICghc3RyY21wKCIodW5rbm93 bikiLHVpZGJ1ZikKLSNpZmRlZiBOVAotICAgICAgICAgICAgICAgICAgICB8fCAhc3RyaWNtcCgi YWRtaW5pc3RyYXRvciIsdWlkYnVmKQotI2lmZGVmIFVOSVgKLSAgICAgICAgICAgICAgICAgICAg fHwgIXN0cmNtcCgicm9vdCIsdWlkYnVmKQotI2Vsc2UKLSNpZmRlZiBQbGFuOQotICAgICAgICAg ICAgICAgICAgICB8fCAhc3RyY21wKCJyb290Iix1aWRidWYpCi0jZWxzZQotI2lmZGVmIE9TSwot ICAgICAgICAgICAgICAgICAgICB8fCAhc3RyY21wKCJyb290Iix1aWRidWYpCi0jZW5kaWYgLyog T1NLICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyog TlQgKi8KLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgdWlkYnVmWzBd ID0gJ1wwJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENLX0FVVEhFTlRJ Q0FUSU9OICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotI2lmZGVmIElLU0QKLSAgICAgICAg aWYgKGluc2VydmVyKQotICAgICAgICAgIHByaW50ZigiXHJcbkludGVybmV0IEtlcm1pdCBTZXJ2 aWNlIHJlYWR5IGF0ICVzJXNcclxuIixzLHZlcnNpbyk7Ci0gICAgICAgIGVsc2UKLSNlbmRpZiAv KiBJS1NEICovCi0gICAgICAgICAgcHJpbnRmKCJcclxuQy1LZXJtaXQgcmVhZHkgYXQgJXMlc1xy XG4iLHMsdmVyc2lvKTsKLSAgICAgICAgaWYgKCpteWhvc3QpCi0gICAgICAgICAgcHJpbnRmKCIl c1xyXG4iLCBteWhvc3QpOwotICAgICAgICBwcmludGYoIlxyXG4iKTsKLSAgICB9Ci0jaWZkZWYg Q0tfTE9HSU4KLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgIGludCBp OwotICAgICAgICBleHRlcm4gaW50IGFyZ194OyAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yICct eCcgb24gY29tbWFuZCBsaW5lICovCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgIGV4dGVybiBzdHJ1 Y3QgbXRhYiAqbWFjdGFiOyAgICAgICAgIC8qIEZvciBPTl9MT0dJTiBtYWNyby4gKi8KLSAgICAg ICAgZXh0ZXJuIGludCBubWFjOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICAgICAgZGVidWco RjExMCwiTUFJTiBjbGllbnRob3N0IixjbGllbnRob3N0LDApOwotICAgICAgICBzcnZpZGwgPSB0 aW1lbGltaXQgPSBsb2dpbnRpbW87IC8qIEZvciBpbnRlcmFjdGl2ZSBsb2dpbiAqLwotICAgICAg ICBydGltZXIoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHRpbWVyICovCi0gICAg ICAgIGZvciAoaSA9IDA7IGkgPCBpa3NfcmV0cnkgJiYgIXhfbG9nZ2VkOyBpKyspIHsgLyogQ291 bnQgcmV0cmllcyAqLwotICAgICAgICAgICAgaWYgKGd0aW1lcigpID4gbG9naW50aW1vKQotICAg ICAgICAgICAgICBicmVhazsKLSNpZmRlZiBUTkNPREUKLSAgICAgICAgICAgIHRuX3dhaXQoImxv Z2luIGxvb3AiKTsKLSAgICAgICAgICAgIHRuX3B1c2goKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8K LSAgICAgICAgICAgIGRlYnVnKEYxMDEsIk1BSU4gTE9HSU4gdHJ5IiwiIixpKTsKLSAgICAgICAg ICAgIHdoYXQgPSBXX05PVEhJTkc7ICAgICAgICAgICAvKiBCZWNhdXNlIHByb3RvKCkgY2hhbmdl cyB0aGlzICovCi0KLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJN QUlOIExPR0lOIiwKLSAgICAgICAgICAgICAgICAgICJURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCku a2VybWl0Lm1lX3N0YXJ0IiwKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VS TUlUKS5rZXJtaXQubWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAv KiBLZXJtaXQgc2VydmVyIG5lZ290aWF0ZWQgKi8KLSAgICAgICAgICAgIGlmIChURUxPUFRfU0Io VEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgZGVidWco RjEwMSwiSUtTRCBzdGFydGluZyBpbiBzZXJ2ZXIgbW9kZSIsIiIsMCk7Ci0gICAgICAgICAgICAg ICAgYXJnX3ggPSAxOyAgICAgICAgICAgICAgLyogRW50ZXIgc2VydmVyIG1vZGUgKi8KLSAgICAg ICAgICAgICAgICBzc3RhdGUgPSAneCc7Ci0jaWZkZWYgSUtTRFBPUEJBQ0sKLSAgICAgICAgICAg ICAgICBqdXN0b25lID0gMTsgICAgICAgICAgICAvKiBFeGVjdXRlIG9uZSBjb21tYW5kIGF0IGEg dGltZS4gKi8KLSNlbmRpZiAvKiBJS1NEUE9QQkFDSyAqLwotICAgICAgICAgICAgICAgIHByb3Rv KCk7ICAgICAgICAgICAgICAgIC8qIEVudGVyIHByb3RvY29sIGlmIHJlcXVlc3RlZC4gKi8KLSNp ZmRlZiBOVFNJRwotICAgICAgICAgICAgICAgIGNrX2loKCk7Ci0jZW5kaWYgLyogTlRTSUcgKi8K LSAgICAgICAgICAgICAgICBpZiAoeF9sb2dnZWQpICAgICAgICAgICAvKiBMb2dnZWQgaW4gKi8K LSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAg ICAgICAgICAgIC8qIE5vdCBpbiBjbGllbnQvc2VydmVyIG1vZGUgKi8KLSNlbmRpZiAvKiBJS1Nf T1BUSU9OICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiSUtTRCBzdGFydGluZyB3aXRo IFVzZXJuYW1lIHByb21wdCIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgeF9sb2dnZWQgPSBja3hs b2dpbigoQ0hBUiAqKXVpZGJ1ZixOVUxMLE5VTEwsMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNz dGF0ZSkgeyAgICAgICAgICAgLyogUmVjZWl2ZWQgYSBwYWNrZXQgYXQgcHJvbXB0ICovCi0jaWZk ZWYgSUtTRFBPUEJBQ0sKLSAgICAgICAgICAgICAgICAgICAganVzdG9uZSA9IDE7ICAgICAgICAv KiBHbyBoYW5kbGUgaXQgKi8KLSNlbmRpZiAvKiBJS1NEUE9QQkFDSyAqLwotICAgICAgICAgICAg ICAgICAgICBwcm90bygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo IXhfbG9nZ2VkKSB7ICAgICAgICAvKiBJbiBjYXNlIHdlIGFyZSBhdCB0aGUgcHJvbXB0Li4uICov Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiQWNjZXNzIGRlbmllZC5cbiIpOwotICAgICAg ICAgICAgICAgICAgICB1aWRidWZbMF0gPSAnXDAnOyAgIC8qIEZvcmdldCB0aGUgbmFtZSBpZiB3 ZSBoYXZlIG9uZSAqLwotICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAg ICAgICAgICB9Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgICAgICB9Ci0gICAgICAgIHNy dmlkbCA9IHRpbWVsaW1pdCA9IGlrc190aW1vOyAgLyogUmVzZXQgY29tbWFuZCB0aW1lbGltaXQg Ki8KLSAgICAgICAgZGVidWcoRjEwMSwiTUFJTiBMT0dJTiIsIiIseF9sb2dnZWQpOwotICAgICAg ICBpZiAoIXhfbG9nZ2VkKSB7ICAgICAgICAgICAgICAgIC8qIExvZ2lucyBmYWlsZWQuICovCi0g ICAgICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkK LSAgICAgICAgICAgICAgZXJycGt0KChDSEFSICopIkxvZ2luIFRpbWVvdXQiKTsKLSAgICAgICAg ICAgIG1zbGVlcCg1MDApOwotICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDApOwotICAgICAg ICB9Ci0gICAgICAgIHdoYXQgPSBXX05PVEhJTkc7ICAgICAgICAgICAgICAgLyogU3RheSBpbiBr bm93biBzdGF0ZSAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgICAgICBpZiAoaXNndWVzdCkgewot ICAgICAgICAgICAgZW5fcHJpID0gMDsgICAgICAgICAgICAgICAgIC8qIE5vIHByaW50aW5nIGZv ciBhbm9ueW1vdXMgdXNlcnMgKi8KLSAgICAgICAgICAgIGVuX21haSA9IDA7ICAgICAgICAgICAg ICAgICAvKiBObyBlbWFpbCBmb3IgYW5vbnltb3VzIHVzZXJzICovCi0gICAgICAgICAgICBlbl9t a2QgPSAwOyAgICAgICAgICAgICAgICAgLyogT3IgZGlyZWN0b3J5IGNyZWF0aW9uICovCi0gICAg ICAgICAgICBlbl9ybWQgPSAwOyAgICAgICAgICAgICAgICAgLyogT3IgZGlyZWN0b3J5IHJlbW92 YWwgKi8KLSAgICAgICAgICAgIGVuX2VuYSA9IDA7ICAgICAgICAgICAgICAgICAvKiBPciBFTkFC TGluZyBESVNBQkxFZCBpdGVtcyAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8K LQotI2lmbmRlZiBOT1NQTAotLyoKLSAgSWYgYSBtYWNybyBuYW1lZCAib25fbG9naW4iIGlzIGRl ZmluZWQsIGV4ZWN1dGUgaXQuICBBbHNvIHJlbW92ZSBpdCBmcm9tIHRoZQotICBtYWNybyB0YWJs ZSBzbyB0aGUgdXNlciBjYW5ub3Qgc2VlIHdoYXQgaXQgZG9lcy4gIEV4ZWN1dGUgaXQgYXMgcGFy dCBvZiB0aGUKLSAgaWtzZC5jb25mIGZpbGUuCi0qLwotICAgICAgICBpZiAobm1hYykgeyAgICAg ICAgICAgICAgICAgICAgIC8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KLSAgICAgICAgICAgIGlu dCBrOyAgICAgICAgICAgICAgICAgICAgICAvKiBZZXMgKi8KLSAgICAgICAgICAgIGNoYXIgKiBj bWQgPSAib25fbG9naW4iOyAgICAvKiBNU1ZDIDIueCBjb21waWxlciBlcnJvciAqLwotICAgICAg ICAgICAgayA9IG1sb29rKG1hY3RhYixjbWQsbm1hYyk7IC8qIExvb2sgdXAgIm9uX2xvZ2luIiAq LwotICAgICAgICAgICAgaWYgKGsgPj0gMCkgeyAgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAq LwotI2lmZGVmIElLU0RDT05GCi0gICAgICAgICAgICAgICAgaW50IHNhdmVkID0gaWtzZGNmOwot ICAgICAgICAgICAgICAgIGlrc2RjZiA9IDA7Ci0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSAgICAg ICAgICAgICAgICBpZiAoZG9kbyhrLCIiLDApID4gLTEpICAvKiBzZXQgaXQgdXAsICovCi0gICAg ICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgLyogZXhlY3V0ZSBpdCAqLwotI2lm ZGVmIElLU0RDT05GCi0gICAgICAgICAgICAgICAgaWtzZGNmID0gc2F2ZWQ7Ci0jZW5kaWYgLyog SUtTRENPTkYgKi8KLSAgICAgICAgICAgICAgICBkZWxtYWMoY21kLDEpOyAgICAgICAgICAvKiBh bmQgZGVsZXRlIGl0ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQ TCAqLwotICAgIH0gLyogaWYgKGluc2VydmVyKSAqLwotI2Vsc2UgLyogQ0tfTE9HSU4gKi8KLSAg ICBpZiAoaW5zZXJ2ZXIpCi0gICAgICAgIHNydmlkbCA9IHRpbWVsaW1pdCA9IGlrc190aW1vOyAg LyogU2V0IGlkbGUgbGltaXRzIGZvciBJS1MgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2Vu ZGlmIC8qIElLU0QgKi8KLX0KLQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1mYWlsY21kbGluZSh2 b2lkICogZm9vKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWZhaWxjbWRsaW5lKGZvbykgVk9JRCAq IGZvbzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotI2lmZGVmIEdFTURPUwotICAgIGNjX2Ns ZWFuKCk7Ci0jZW5kaWYgLyogR0VNRE9TICovCi0jaWZuZGVmIE5PTE9DQUwKLSAgICBpZiAoY25m bGcpIGRvY29uZWN0KDAsMCk7ICAgICAgICAgICAvKiBjb25uZWN0IGFnYWluIGlmIHJlcXVlc3Rl ZC4gKi8KLSAgICBpZiAodHRjaGsoKSA8IDApCi0gICAgICBkb2xvZ2VuZCgpOwotI2VuZGlmIC8q IE5PTE9DQUwgKi8KLX0KLSNlbmRpZiAvKiBOT0NNREwgKi8KLQotI2lmbmRlZiBOT0lDUAotVk9J RAotI2lmZGVmIENLX0FOU0lDCi1kb3Rha2Vpbmkodm9pZCAqIHRocmVhZGluZm8pICAgICAgICAg ICAgLyogRXhlY3V0ZSBpbml0IGZpbGUuICovCi0jZWxzZSAgLyogQ0tfQU5TSUMgKi8KLWRvdGFr ZWluaSh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsgLyogRXhlY3V0ZSBpbml0IGZpbGUu ICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRvdGFrZWluaSAqLyB7Ci0jaWZkZWYgTlRT SUcKLSAgICBzZXRpbnQoKTsKLSAgICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAgICAgICAg ICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLwotICAgICAgIFRsc1NldFZhbHVlKFRsc0lu ZGV4LHRocmVhZGluZm8pOwotICAgICAgIGRlYnVnKEYxMDAsICJkb3Rha2VpbmkgY2FsbGVkIHdp dGggdGhyZWFkaW5mbyBibG9jayIsIiIsIDApOwotICAgIH0gZWxzZQotICAgICAgZGVidWcoRjEw MCwgImRvdGFrZWluaSAtIHRocmVhZGluZm8gaXMgTlVMTCIsICIiLCAwKTsKLSNlbmRpZiAvKiBO VFNJRyAqLwotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgTlQKLSNpZmRlZiBJS1NECi0gICAgaWYg KGluc2VydmVyKQotICAgICAgc2V0bnRjcmVkcygpOwotI2VuZGlmIC8qIElLU0QgKi8KLSNlbmRp ZiAvKiBOVCAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgY21kaW5pKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogU2V0cyB0bGV2ZWwgKi8KLQotICAgIGRlYnVnKEYxMTEsImRv dGFrZWluaSIsImluc2VydmVyIixpbnNlcnZlcik7Ci0gICAgZGVidWcoRjExMSwiZG90YWtlaW5p Iiwic3N0ZWxuZXQiLHNzdGVsbmV0KTsKLQotI2lmZGVmIENPTU1FTlQKLS8qIFdyb25nIHBsYWNl IGZvciB0aGlzLi4uICovCi0jaWZuZGVmIE5PWEZFUgotI2lmZGVmIENLX0ZBU1QKLSAgICBkb2Zh c3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCeSBub3cgRkFTVCBkZWZhdWx0cyBz aG91bGQgYmUgT0sgKi8KLSNlbmRpZiAvKiBDS19GQVNUICovCi0jZW5kaWYgLyogTk9YRkVSICov Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgZG9pbml0KCk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTm93IGRvIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlICovCi0gICAgZGVidWco RjEwMSwibWFpbiBleGVjdXRpbmcgaW5pdCBmaWxlIiwiIix0bGV2ZWwpOwotICAgIHdoaWxlICh0 bGV2ZWwgPiAtMSkgewotICAgICAgICBzc3RhdGUgPSAoQ0hBUikgcGFyc2VyKDEpOyAgICAgIC8q IEV4ZWN1dGUgb25lIGNvbW1hbmQgYXQgYSB0aW1lLiAqLwotICAgICAgICBpZiAoc3N0YXRlKSBw cm90bygpOyAgICAgICAgICAgIC8qIEVudGVyIHByb3RvY29sIGlmIHJlcXVlc3RlZC4gKi8KLSNp ZmRlZiBOVFNJRwotICAgICAgICBja19paCgpOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgfQot ICAgIGRlYnVnKEYxMDEsIm1haW4gZXhpdHMgaW5pdCBmaWxlIiwiIix0bGV2ZWwpOwotCi0jaWZk ZWYgTlRTSUcKLSAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAq LwotICAgIHJldHVybjsKLX0KLQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1mYWlsdGFrZWluaSh2 b2lkICogdGhyZWFkaW5mbykKLSNlbHNlIC8qIENLX0FOU0lDICovCi1mYWlsdGFrZWluaSh0aHJl YWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZmFp bHRha2VpbmkgKi8gewotI2lmZGVmIEdFTURPUwotICAgIGNjX2NsZWFuKCk7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEF0YXJpOiBDbGVhbiB1cCBhZnRlciBeQy10cmFwLiAqLwotI2VuZGlm IC8qIEdFTURPUyAqLwotICAgIGZpeGNtZCgpOwotICAgIGlmICghY2ZpbGVmKSB7Ci0gICAgICAg IGNvbm9sbCgiSW50ZXJydXB0ZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9yIFwKLWNvbW1hbmQt bGluZSBwcm9jZXNzaW5nLiIpOwotICAgICAgICBjb25vbGwoIkMtS2VybWl0IHF1aXR0aW5nLi4u Iik7Ci0gICAgfQotICAgIGRvZXhpdChCQURfRVhJVCwtMSk7ICAgICAgICAgICAgICAgIC8qIEV4 aXQgd2l0aCBiYWQgc3RhdHVzLiAqLwotfQotCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWRvaWNw KHZvaWQgKiB0aHJlYWRpbmZvKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWRvaWNwKHRocmVhZGlu Zm8pIFZPSUQgKiB0aHJlYWRpbmZvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBkb2ljcCAq LyB7Ci0jaWZkZWYgTlRTSUcKLSAgICBzZXRpbnQoKTsKLSAgICBpZiAodGhyZWFkaW5mbykgeyAg ICAgICAgICAgICAgICAgICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLwotICAgICAgIGlm ICghVGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbykpCi0gICAgICAgICAgZGVidWcoRjEw MSwiZG9pY3AgVGxzU2V0VmFsdWUgZmFpbGVkIiwiIixHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAg ZGVidWcoRjEwMSwgImRvaWNwIGEgdGhyZWFkaW5mbyBibG9jayAtIFRsc0luZGV4IiwgIiIsIFRs c0luZGV4KTsKLSAgICB9IGVsc2UgewotICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9pY3AgcmVjZWl2 ZWQgYSBudWxsIHRocmVhZGluZm8iLCAiIiwgMCk7Ci0gICAgfQotI2VuZGlmIC8qIE5UU0lHICov Ci0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBOVAotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2 ZXIpCi0gICAgICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogSUtTRCAqLwotI2VuZGlmIC8qIE5U ICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNpZmRlZiBNQUMKLSAgICB3aGlsZSAoMSkgewot ICAgICAgICBleHRlcm4gY2hhciAqbGZpbGVzOyAgICAgICAgICAgIC8qIEZha2UgcG9pbnRlciBj YXN0ICovCi0KLSAgICAgICAgaWYgKGNvbm5lY3RlZCkgewotICAgICAgICAgICAgZGVidWcoRjEw MCwgImRvaWNwOiBjYWxsaW5nIG1hY3BhcnNlciIsICIiLCAwKTsKLSAgICAgICAgICAgIHNzdGF0 ZSA9IG5ld3BhcnNlcigxLCAxLCAwTCk7Ci0KLSAgICAgICAgICAgIC8qIGlnbm9yZSBudWxsIGNv bW1hbmQgc3RhdGUgKi8KLSAgICAgICAgICAgIGlmIChzc3RhdGUgPT0gJ24nKQotICAgICAgICAg ICAgICBzc3RhdGUgPSAnXDAnOwotCi0gICAgICAgICAgICBpZiAoc3N0YXRlKQotICAgICAgICAg ICAgICBwcm90bygpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyoKLSAgICAgICAg ICAgICAqIHByb2Nlc3MgdGFrZSBmaWxlcyB0aGUgZmluZGVyIGdhdmUgdXMuCi0gICAgICAgICAg ICAgKi8KLSAgICAgICAgICAgIGlmICgodGxldmVsID09IC0xKSAmJiBsZmlsZXMpCi0gICAgICAg ICAgICAgIHN0YXJ0bGZpbGUoKTsKLQotICAgICAgICAgICAgZGVidWcoRjEwMCwgImRvaWNwOiBj YWxsaW5nIHBhcnNlciIsICIiLCAwKTsKLSAgICAgICAgICAgIHNzdGF0ZSA9IChDSEFSKSBwYXJz ZXIoMCk7Ci0gICAgICAgICAgICBpZiAoc3N0YXRlID09ICdjJykgICAgICAgICAgLyogaWYgTUFD IGNvbm5lY3QgKi8KLSAgICAgICAgICAgICAgc3N0YXRlID0gMDsKLSAgICAgICAgICAgIGlmIChz c3RhdGUpCi0gICAgICAgICAgICAgIHByb3RvKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZSAv KiBOb3QgTUFDICovCi0KLSNpZm5kZWYgTk9TUEwKLS8qCi0gIElmIGludGVyYWN0aXZlIGNvbW1h bmRzIHdlcmUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSAodXNpbmcgdGhlCi0gIC1DICJjb21t YW5kLCBjb21tYW5kLCAuLi4iIG9wdGlvbiksIGFzc2lnbiB0aGVtIHRvIGEgbWFjcm8gY2FsbGVk Ci0gICJjbF9jb21tYW5kcyIsIHRoZW4gZXhlY3V0ZSB0aGUgbWFjcm8gYW5kIGxlYXZlIGl0IGRl ZmluZWQgZm9yCi0gIHN1YnNlcXVlbnQgcmUtZXhlY3V0aW9uIGlmIGRlc2lyZWQuCi0qLwotICAg IGlmIChjbGNtZHMpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciAtQyBjb21t YW5kcyAqLwotICAgICAgICBpbnQgeDsKLSAgICAgICAgeCA9IGFkZG1hYygiY2xfY29tbWFuZHMi LGNsY21kcyk7IC8qIFB1dCBtYWNybyBpbiB0YWJsZSAqLwotICAgICAgICBpZiAoeCA+IC0xKSB7 ICAgICAgICAgICAgICAgICAgIC8qIElmIHN1Y2Nlc3NmdWwsICovCi0gICAgICAgICAgICBkb2Rv KHgsTlVMTCxDRl9DTURMKTsgICAgICAgLyogc2V0IHVwIGZvciBtYWNybyBleGVjdXRpb24gKi8K LSAgICAgICAgICAgIHdoaWxlIChtYWNsdmwgPiAtMSkgeyAgICAgICAvKiBMb29wIGdldHRpbmcg bWFjcm8gY29tbWFuZHMuICovCi0gICAgICAgICAgICAgICAgc3N0YXRlID0gKENIQVIpIHBhcnNl cigxKTsKLSAgICAgICAgICAgICAgICBpZiAoc3N0YXRlKSBwcm90bygpOyAgICAvKiBFbnRlciBw cm90b2NvbCBpZiByZXF1ZXN0ZWQuICovCi0jaWZkZWYgTlRTSUcKLSAgICAgICAgICAgICAgICBj a19paCgpOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICAgICAgZGVidWcoRjEwMCwiZG9pY3AgY2FsbGluZyBoZXJhbGQiLCIiLDApOwotICAgICAgICBo ZXJhbGQoKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB3aGlsZSgxKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBMb29wIGdldHRpbmcgY29tbWFuZHMuICovCi0gICAgICAg IHNzdGF0ZSA9IChDSEFSKSBwYXJzZXIoMCk7Ci0gICAgICAgIGlmIChzc3RhdGUpIHByb3RvKCk7 ICAgICAgICAgICAgLyogRW50ZXIgcHJvdG9jb2wgaWYgcmVxdWVzdGVkLiAqLwotI2lmZGVmIE5U U0lHCi0gICAgICAgY2tfaWgoKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgIH0KLSNpZmRlZiBO VFNJRwotICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0j ZW5kaWYgLyogTUFDICovCi19Ci0KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotZmFpbGljcCh2b2lk ICogdGhyZWFkaW5mbykKLSNlbHNlIC8qIENLX0FOU0lDICovCi1mYWlsaWNwKHRocmVhZGluZm8p IFZPSUQgKiB0aHJlYWRpbmZvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0jaWZkZWYgR0VN RE9TCi0gICAgY2NfY2xlYW4oKTsKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSAgICBmaXhjbWQoKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb3AgY29tbWFuZCBzdGFja3MsIGV0Yy4gKi8K LSAgICBjbGNtZHMgPSBOVUxMOwotICAgIGRlYnVnKEYxMDAsImNrY21haSBnb3QgaW50ZXJydXB0 IiwiIiwwKTsKLX0KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZuZGVmIE5PSUNQCi1WT0lECi0j aWZkZWYgQ0tfQU5TSUMKLWRvY21kZmlsZSh2b2lkICogdGhyZWFkaW5mbykgICAgICAgICAgICAv KiBFeGVjdXRlIGFwcGxpY2F0aW9uIGZpbGUgKi8KLSNlbHNlIC8qIENLX0FOU0lDICovCi1kb2Nt ZGZpbGUodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLS8qIGRvY21kZmlsZSAqLyB7Ci0jaWZkZWYgTlRTSUcKLSAgICBjb25jYigoY2hhcillc2Nh cGUpOwotICAgIHNldGludCgpOwotICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAgICAgICAgICAg ICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0gICAgICAgIFRsc1NldFZhbHVlKFRs c0luZGV4LHRocmVhZGluZm8pOwotICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9jbWRmaWxlIGNhbGxl ZCB3aXRoIHRocmVhZGluZm8gYmxvY2siLCIiLCAwKTsKLSAgICB9IGVsc2UgZGVidWcoRjEwMCwg ImRvY21kZmlsZSAtIHRocmVhZGluZm8gaXMgTlVMTCIsICIiLCAwKTsKLSNlbmRpZiAvKiBOVFNJ RyAqLwotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgSUtTRAotI2lmZGVmIE5UCi0gICAgaWYgKGlu c2VydmVyKQotICAgICAgc2V0bnRjcmVkcygpOwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyog SUtTRCAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgZGVidWcoRjExMCwibWFpbiBjbWRm aWwiLGNtZGZpbCwwKTsKLSNpZm5kZWYgTk9TUEwKLSAgICBhZGRtYWMoIlxcJTAiLGNtZGZpbCk7 Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICBkb3Rha2UoY21kZmlsKTsJCQkvKiBTZXQgdXAgdGhl IGNvbW1hbmQgZmlsZSAqLwotICAgIGlmICh0bGV2ZWwgPiAtMSkJCQkvKiBSZW1lbWJlciB3ZSBk aWQgdGhpcyAqLwotICAgICAgY2ZpbGVmID0gMTsKLSAgICB3aGlsZSAodGxldmVsID4gLTEpIHsg ICAgICAgICAgICAgICAvKiBFeGVjdXRlIGl0IHVudGlsIGl0IHJ1bnMgb3V0LiAqLwotICAgICAg ICBzc3RhdGUgPSBwYXJzZXIoMSk7ICAgICAgICAgICAgIC8qIExvb3AgZ2V0dGluZyBjb21tYW5k cy4gKi8KLSAgICAgICAgaWYgKHNzdGF0ZSkgcHJvdG8oKTsgICAgICAgICAgICAvKiBFbnRlciBw cm90b2NvbCBpZiByZXF1ZXN0ZWQuICovCi0jaWZkZWYgTlRTSUcKLSAgICAgICAgY2tfaWgoKTsK LSNlbmRpZiAvKiBOVFNJRyAqLwotICAgIH0KLQotI2lmZGVmIE5UU0lHCi0gICAgY2tUaHJlYWRF bmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICByZXR1cm47Ci19Ci0KLVZP SUQKLSNpZmRlZiBDS19BTlNJQwotZmFpbGNtZGZpbGUodm9pZCAqIHRocmVhZGluZm8pCi0jZWxz ZSAvKiBDS19BTlNJQyAqLwotZmFpbGNtZGZpbGUodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGlu Zm87Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGZhaWxjbWRmaWxlICovIHsKLSNpZmRlZiBH RU1ET1MKLSAgICBjY19jbGVhbigpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdGFyaTog Q2xlYW4gdXAgYWZ0ZXIgXkMtdHJhcC4gKi8KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSAgICBmaXhj bWQoKTsKLSAgICBpZiAoIWNmaWxlZikgewotCWNvbm9sbCgiSW50ZXJydXB0ZWQgZHVyaW5nIGlu aXRpYWxpemF0aW9uIG9yIFwKLWNvbW1hbmQtbGluZSBwcm9jZXNzaW5nLiIpOwotCWNvbm9sbCgi Qy1LZXJtaXQgcXVpdHRpbmcuLi4iKTsKLSAgICB9Ci0gICAgZG9leGl0KEJBRF9FWElULC0xKTsg ICAgICAgICAgICAgICAgLyogRXhpdCB3aXRoIGJhZCBzdGF0dXMuICovCi19Ci0jZW5kaWYgLyog Tk9JQ1AgKi8KLQotI2lmbmRlZiBOT1hGRVIKLVZPSUQKLXNldHByZWZpeCh6KSBpbnQgejsgeyAg ICAgICAgICAgICAgICAgICAvKiBJbml0aWFsIGNvbnRyb2wtY2hhciBwcmVmaXhpbmcgKi8KLSNp ZmRlZiBDS19TUEVFRAotICAgIGludCBpLCB2YWw7Ci0KLSAgICBwcmVmaXhpbmcgPSB6OwotICAg IHB0YWJbcHJvdG9jb2xdLnByZWZpeCA9IHByZWZpeGluZzsKLSAgICBkZWJ1ZyhGMTAxLCJzZXRw cmVmaXgiLCIiLHByZWZpeGluZyk7Ci0gICAgc3dpdGNoICh6KSB7Ci0gICAgICBjYXNlIFBYX0FM TDogICAgICAgICAgICAgICAgICAgICAgLyogQWxsICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAg ICAvKiBEb24ndCBsZXQgQ2xlYXItQ2hhbm5lbCBiZSBkZXBlbmRlbnQgb24gcHJlZml4aW5nICov Ci0gICAgICAgIGNsZWFycnEgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgY2xl YXJjaGFubmVsLCBmYWxsIHRocnUgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICBjYXNl IFBYX05PTjogICAgICAgICAgICAgICAgICAgICAgLyogTm9uZSAqLwotICAgICAgICB2YWwgPSAo eiA9PSBQWF9BTEwpID8gMSA6IDA7Ci0gICAgICAgIGZvciAoaSA9Ci0jaWZkZWYgVU5QUkVGSVha RVJPCi0gICAgICAgICAgICAgMAotI2Vsc2UKLSAgICAgICAgICAgICAxCi0jZW5kaWYgLyogVU5Q UkVGSVhaRVJPICovCi0gICAgICAgICAgICAgOyBpIDwgMzI7IGkrKykKLSAgICAgICAgICBjdGxw W2ldID0gdmFsOwotICAgICAgICBmb3IgKGkgPSAxMjc7IGkgPCAxNjA7IGkrKykgY3RscFtpXSA9 IHZhbDsKLSAgICAgICAgY3RscFsodW5zaWduZWQpMjU1XSA9IHZhbDsKLSAgICAgICAgaWYgKHog PT0gUFhfTk9OKSB7ICAgICAgICAgICAgICAvKiBUaGVzZSBhcmUgbmV2ZXIgc2FmZSAqLwotICAg ICAgICAgICAgaWYgKG5ldHdvcmspIHsgICAgICAgICAgICAgIC8qIEFzc3VtZSBuZXR3b3JrID0g dGVsbmV0IG9yIHJsb2dpbiAqLwotICAgICAgICAgICAgICAgIGN0bHBbQ1JdID0gMTsgICAgICAg ICAgIC8qIFByZWZpeCBDUiBiZWNhdXNlIG9mIE5WVCBydWxlcyAqLwotICAgICAgICAgICAgICAg IGN0bHBbWE9OXSA9IGN0bHBbWE9GRl0gPSAxOyAvKiBCZWNhdXNlIG9mIFRlbG5ldCBzZXJ2ZXIg Ki8KLSAgICAgICAgICAgICAgICBjdGxwWzEyN10gPSBjdGxwWzI1NV0gPSAxOyAgLyogVGVsbmV0 IElBQyAqLwotICAgICAgICAgICAgICAgIGN0bHBbbXlzdGNoXSA9IGN0bHBbbXlzdGNoKzEyOF0g PSAxOyAvKiBLZXJtaXQgcGFja2V0IHN0YXJ0ICovCi0gICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgIGN0bHBbQ1JdID0gY3RscFsyNTVdID0gY3RscFtteXN0Y2hdID0gY3RscFtt eXN0Y2grMTI4XSA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZsb3cgPT0gRkxPX1hPTlgpICAg ICAgIC8qIFhvbi9Yb2ZmIGZvcmNlcyBwcmVmaXhpbmcgKi8KLSAgICAgICAgICAgICAgICAgIGN0 bHBbWE9OXSA9IGN0bHBbWE9GRl0gPSBjdGxwW1hPTisxMjhdID0gY3RscFtYT0ZGKzEyOF0gPSAx OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNl IFBYX0NBVTogICAgICAgICAgICAgICAgICAgICAgLyogQ2F1dGlvdXMgb3IgTWluaW1hbCAqLwot I2lmZGVmIENPTU1FTlQKLSAgICAgICAgLyogRG9uJ3QgbGV0IENMRUFSLUNIQU5ORUwgYmUgZGVw ZW5kZW50IG9uIFByZWZpeGluZyAqLwotICAgICAgICBjbGVhcnJxID0gMDsgICAgICAgICAgICAg ICAgICAgIC8qIFR1cm4gb2ZmIGNsZWFyY2hhbm5lbCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSAgICAgIGNhc2UgUFhfV0lMOiAgICAgICAgICAgICAgICAgICAgICAvKiBNaW5pbWFsICgid2ls ZCIpICovCi0gICAgICAgIGN0bHBbMF0gPSAxOyAgICAgICAgICAgICAgICAgICAgLyogRG9lcyBu b3QgaW5jbHVkZSAwICovCi0gICAgICAgIGZvciAoaSA9IDE7IGkgPCAzMjsgaSsrKQotICAgICAg ICAgIGN0bHBbaV0gPSAwOwotICAgICAgICBmb3IgKGkgPSAxMjc7IGkgPCAxNjA7IGkrKykKLSAg ICAgICAgICBjdGxwW2ldID0gMDsKLSAgICAgICAgY3RscFtteXN0Y2hdID0gY3RscFtteXN0Y2gr MTI4XSA9IDE7IC8qIEtlcm1pdCBzdGFydCBvZiBwYWNrZXQgKi8KLSAgICAgICAgaWYgKHNlb2wg IT0gMTMpCi0gICAgICAgICAgY3RscFtzZW9sXSA9IGN0bHBbc2VvbCsxMjhdID0gMTsgLyogS2Vy bWl0IGVuZCAqLwotICAgICAgICBjdGxwWzEzXSA9IGN0bHBbMTQxXSA9IDE7ICAgICAgIC8qIElu IGNhc2Ugb2YgVEVMTkVUIChOVlQgcnVsZXMpICovCi0gICAgICAgIGN0bHBbKHVuc2lnbmVkKTI1 NV0gPSAxOyAgICAgICAgLyogRGl0dG8gKi8KLQotICAgICAgICAvKiBeRCwgXkosIF5NLCBvciBe VSBmb2xsb3dlZCBieSB0aWxkZSB0cmlnZ2VyIFJsb2dpbiBlc2NhcGUgKi8KLQotICAgICAgICBj dGxwWzRdICA9IGN0bHBbNCsxMjhdICA9IDE7ICAgIC8qIEluIGNhc2Ugb2YgUkxPR0lOICovCi0g ICAgICAgIGN0bHBbMTBdID0gY3RscFsxMCsxMjhdID0gMTsgICAgLyogSW4gY2FzZSBvZiBSTE9H SU4gKi8KLSAgICAgICAgY3RscFsyMV0gPSBjdGxwWzIxKzEyOF0gPSAxOyAgICAvKiBJbiBjYXNl IG9mIFJMT0dJTiAqLwotCi0gICAgICAgIGlmIChmbG93ID09IEZMT19YT05YIHx8ICAgICAgICAg LyogWG9uL1hvZmYgZm9yY2VzIHByZWZpeGluZyB0aGVzZSAqLwotICAgICAgICAgICAgcHJlZml4 aW5nID09IFBYX0NBVSB8fCAgICAgIC8qIFNvIGRvZXMgQ0FVVElPVVMgKi8KLSAgICAgICAgICAg IG5ldHdvcmspICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrcyB0b28uLi4gKi8KLSAgICAg ICAgICBjdGxwW1hPTl0gPSBjdGxwW1hPRkZdID0gY3RscFtYT04rMTI4XSA9IGN0bHBbWE9GRisx MjhdID0gMTsKLSAgICAgICAgaWYgKHByZWZpeGluZyA9PSBQWF9DQVUpIHsgICAgICAvKiBDYXV0 aW91cyAtIGFkZCBzb21lIG1vcmUgKi8KLSNpZmRlZiBVTlBSRUZJWFpFUk8KLSAgICAgICAgICAg IGN0bHBbMF0gPSAxOwotI2VuZGlmIC8qIFVOUFJFRklYWkVSTyAqLwotICAgICAgICAgICAgY3Rs cFszXSAgID0gY3RscFsxNl0gID0gMTsgICAgICAgICAgICAgLyogXkMsIERMRSAqLwotICAgICAg ICAgICAgY3RscFsxNF0gID0gY3RscFsxNV0gID0gMTsgICAgICAgICAgICAgLyogU08vU0kgKi8K LSAgICAgICAgICAgIGN0bHBbMjRdICA9IGN0bHBbMjVdICA9IDE7ICAgICAgICAgICAgIC8qIFZN UyBtaWdodCBuZWVkIHRoZXNlICovCi0gICAgICAgICAgICBjdGxwWzI2XSAgPSBjdGxwWzI2KzEy OF0gPSAxOyAgICAgICAgICAvKiBVTklYIHN1c3BlbmQgKi8KLSAgICAgICAgICAgIGN0bHBbMjhd ICA9IGN0bHBbMjldICA9IGN0bHBbMzBdICA9IDE7IC8qIEFzc29ydGVkIGVzYyBjaGFycyAqLwot ICAgICAgICAgICAgY3RscFsxMzFdID0gY3RscFsxNDFdID0gY3RscFsxNDRdID0gMTsgLyogYW5k IDgtYml0IHZlcnNpb25zICovCi0gICAgICAgICAgICBjdGxwWyh1bnNpZ25lZCkyNTVdID0gY3Rs cFsxNTZdID0gY3RscFsxNTddID0gY3RscFsxNThdID0gMTsKLSAgICAgICAgfQotICAgICAgICBi cmVhazsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLX0KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotVk9JRAotbWFrZXZlcigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1h a2UgdmVyc2lvbiBzdHJpbmcgZnJvbSBwaWVjZXMgKi8KLSAgICBpbnQgeCwgeTsKLSAgICBjaGFy ICogczsKLSNpZm5kZWYgT1MyCi0jaWZuZGVmIE1BQwotICAgIGNrX3NfeHZlciA9IGNrX3NfdmVy OyAgICAgICAgICAgICAgIC8qIEZpbGwgaW4gQy1LZXJtaXQgdmVyc2lvbiBudW1iZXIgKi8KLSAg ICBja19sX3h2ZXIgPSBja19sX3ZlcjsgICAgICAgICAgICAgICAvKiBmb3IgVU5JWCwgVk1TLCBl dGMuICovCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgeCA9IHN0cmxl bihja19zX25hbWUpOwotICAgIHkgPSBzdHJsZW4oY2tfc194dmVyKTsKLSAgICBpZiAoeSArIHgg KyAxIDwgQ0tWRVJMRU4pIHsKLSAgICAgICAgY2ttYWttc2codmVyc2lvLENLVkVSTEVOLGNrX3Nf bmFtZSwiICIsY2tfc194dmVyLE5VTEwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNrc3RybmNw eSh2ZXJzaW8sIkMtS2VybWl0IixDS1ZFUkxFTik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g ICAgeCArPSB5ICsgMTsKLSAgCi0gICAgcyA9ICIgT1BFTiBTT1VSQ0U6IjsJCS8qIEMtS2VybWl0 IDkuMCBhbmQgbGF0ZXIgKi8KLSAgICB5ID0gc3RybGVuKHMpOwotICAgIGlmIChDS1ZFUkxFTiA8 IHggKyB5ICsgMSkKLSAgICAgIHJldHVybjsKLSAgICBja3N0cm5jYXQodmVyc2lvLHMsQ0tWRVJM RU4pOwotCi0gICAgeCArPSB5ICsgMTsKLSAgICBpZiAoKmNrX3Nfd2hvKSB7Ci0gICAgICAgIHkg PSBzdHJsZW4oY2tfc193aG8pOwotICAgICAgICBpZiAoQ0tWRVJMRU4gPCB4ICsgeSArIDEpCi0g ICAgICAgICAgcmV0dXJuOwotICAgICAgICBja3N0cm5jYXQodmVyc2lvLCItIixDS1ZFUkxFTik7 Ci0gICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sY2tfc193aG8sQ0tWRVJMRU4pOwotICAgIH0KLSAg ICB4ICs9IHkgKyAxOwotICAgIHkgPSBzdHJsZW4oY2tfc190ZXN0KTsKLSAgICBpZiAoeSA+IDAg JiYgeSArIHggKyAxIDwgQ0tWRVJMRU4pIHsKLSAgICAgICAgY2tzdHJuY2F0KHZlcnNpbywiICIs Q0tWRVJMRU4pOwotICAgICAgICBja3N0cm5jYXQodmVyc2lvLGNrX3NfdGVzdCxDS1ZFUkxFTik7 Ci0gICAgICAgIHggKz0geSArIDE7Ci0gICAgICAgIHkgPSBzdHJsZW4oY2tfc190dmVyKTsKLSAg ICAgICAgaWYgKHkgPiAwICYmIHkgKyB4ICsgMSA8IENLVkVSTEVOKSB7Ci0gICAgICAgICAgICBj a3N0cm5jYXQodmVyc2lvLCIuIixDS1ZFUkxFTik7Ci0gICAgICAgICAgICBja3N0cm5jYXQodmVy c2lvLGNrX3NfdHZlcixDS1ZFUkxFTik7Ci0gICAgICAgICAgICB4ICs9IHkgKyAxOwotICAgICAg ICB9Ci0gICAgfQotICAgIHkgPSBzdHJsZW4oY2tfc19kYXRlKTsKLSAgICBpZiAoeSA+IDAgJiYg eSArIHggKyAyIDwgQ0tWRVJMRU4pIHsKLSAgICAgICAgY2tzdHJuY2F0KHZlcnNpbywiLCAiLENL VkVSTEVOKTsKLSAgICAgICAgY2tzdHJuY2F0KHZlcnNpbyxja19zX2RhdGUsQ0tWRVJMRU4pOwot ICAgIH0KLSAgICB2ZXJudW0gPSBja19sX3ZlcjsKLSAgICB4dmVybnVtID0gY2tfbF94dmVyOwot ICAgIGRlYnVnKEYxMTAsIktlcm1pdCB2ZXJzaW9uIix2ZXJzaW8sMCk7Ci19Ci0KLXVuaW9uIGNr X3Nob3J0IHNob3J0Ynl0ZXM7ICAgICAgICAgICAgICAvKiBGb3IgZGV0ZXJtaW5pbmcgYnl0ZSBv cmRlciAqLwotaW50IGJ5dGVvcmRlciA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIDAgPSBC aWcgRW5kaWFuOyAxID0gTGl0dGxlIEVuZGlhbiAqLwotaW50IGJpZ2VuZGlhbiA9IDE7Ci0vKiBO T1RFOiBNVVNUIEJFIDAgb3IgMSAtIG5vdGhpbmcgZWxzZSAqLwotCi0jaWZuZGVmIE5PU1BMCi0j ZGVmaW5lIFNDUklQVExFTiAxMDI0MAotI2VuZGlmCS8qIE5PU1BMICovCi0KLSNpZmRlZiBORVRD T05OCi0jaWZuZGVmIE5PQ01ETAotI2lmbmRlZiBOT1VSTAotVk9JRAotZG91cmwoKSB7Ci0gICAg aW50IHJjID0gMDsKLSAgICBjaGFyICogcG9ydCA9IE5VTEw7Ci0gICAgZXh0ZXJuIGludCB0dG5w cm90bzsKLSAgICBleHRlcm4gc3RydWN0IHVybGRhdGEgZ191cmw7Ci0KLSNpZmRlZiBDT01NRU5U Ci0gICAgLyogTk9URTogZGVidWcoKSBkb2Vzbid0IHdvcmsgeWV0IC0gbXVzdCB1c2UgcHJpbnRm J3MgKi8KLSAgICBwcmludGYoIlVSTDogICVzXG4iLGdfdXJsLnNhdiA/IGdfdXJsLnNhdiA6ICIo bm9uZSkiKTsKLSAgICBwcmludGYoIlR5cGU6ICVzXG4iLGdfdXJsLnN2YyA/IGdfdXJsLnN2YyA6 ICIobm9uZSkiKTsKLSAgICBwcmludGYoIlVzZXI6ICVzXG4iLGdfdXJsLnVzciA/IGdfdXJsLnVz ciA6ICIobm9uZSkiKTsKLSAgICBwcmludGYoIlBhc3M6ICVzXG4iLGdfdXJsLnBzdyA/IGdfdXJs LnBzdyA6ICIobm9uZSkiKTsKLSAgICBwcmludGYoIkhvc3Q6ICVzXG4iLGdfdXJsLmhvcyA/IGdf dXJsLmhvcyA6ICIobm9uZSkiKTsKLS8qICBwcmludGYoIlBvcnQ6ICVzXG4iLGdfdXJsLnBvciA/ IGdfdXJsLnBvciA6ICIobm9uZSkiKTsgKi8KLSAgICBwcmludGYoIlBhdGg6ICVzXG4iLGdfdXJs LnB0aCA/IGdfdXJsLnB0aCA6ICIobm9uZSkiKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAg ICBpZiAoIWNrc3RyY21wKGdfdXJsLnN2YywiaWtzZCIsLTEsMCkgfHwKLSAgICAgICAgIWNrc3Ry Y21wKGdfdXJsLnN2Yywia2VybWl0IiwtMSwwKSkgewotICAgICAgICBleHRlcm4gY2hhciBwd2J1 ZltdOwotICAgICAgICBleHRlcm4gaW50IHB3ZmxnOwotI2lmZGVmIE9TMgotICAgICAgICBleHRl cm4gaW50IHB3Y3J5cHQ7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICAgICAgaWYgKCFnX3VybC5o b3MpIHsKLSAgICAgICAgICAgIHByaW50ZigiP0luY29tcGxldGUgSUtTRCBVUkxcbiIpOwotICAg ICAgICAgICAgZG9leGl0KEJBRF9FWElULDEpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZ191 cmwudXNyKQotICAgICAgICAgICAgbWFrZXN0cigmZ191cmwudXNyLCJhbm9ueW1vdXMiKTsKLSAg ICAgICAgaWYgKCFnX3VybC5wc3cpIHsKLSAgICAgICAgICAgIGNoYXIgKiB0bXBidWYgPSBOVUxM OwotICAgICAgICAgICAgaWYgKCEodG1wYnVmID0gKGNoYXIgKiltYWxsb2MoMTAyNCkpKQotICAg ICAgICAgICAgICAgIGZhdGFsKCJkb3VybDogb3V0IG9mIG1lbW9yeSIpOwotICAgICAgICAgICAg aWYgKCFja3N0cmNtcChnX3VybC51c3IsImFub255bW91cyIsLTEsMCkpIHsKLSAgICAgICAgICAg ICAgICBja21ha21zZyh0bXBidWYsMTAyNCx1aWRidWYsIkAiLG15aG9zdCxOVUxMKTsKLSAgICAg ICAgICAgICAgICBtYWtlc3RyKCZnX3VybC5wc3csdG1wYnVmKTsKLSAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgcmVhZHBhc3MoIiBQYXNzd29yZDoiLHRtcGJ1ZiwxMDI0KTsK LSAgICAgICAgICAgICAgICBtYWtlc3RyKCZnX3VybC5wc3csdG1wYnVmKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGZyZWUodG1wYnVmKTsKLSAgICAgICAgfQotICAgICAgICBwb3J0ID0g Imtlcm1pdCI7Ci0gICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOwotICAgICAgICBuZXR0eXBl ID0gTkVUX1RDUEI7Ci0gICAgICAgIG1kbXR5cCA9IC1uZXR0eXBlOwotICAgICAgICBsb2NhbCA9 IC0xOwotICAgICAgICBja3N0cm5jcHkodWlkYnVmLGdfdXJsLnVzcixVSURCVUZMRU4pOwotICAg ICAgICBpZiAoZ191cmwucHN3KSB7Ci0gICAgICAgICAgICBja3N0cm5jcHkocHdidWYsZ191cmwu cHN3LFBXQlVGTCk7Ci0gICAgICAgICAgICBwd2ZsZyA9IDE7Ci0jaWZkZWYgT1MyCi0gICAgICAg ICAgICBwd2NyeXB0ID0gMDsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgfQotICAgICAgICBj a21ha21zZyh0dG5hbWUsCi0gICAgICAgICAgICAgICAgIFRUTkFNTEVOLAotICAgICAgICAgICAg ICAgICBnX3VybC5ob3MsCi0gICAgICAgICAgICAgICAgICI6IiwKLSAgICAgICAgICAgICAgICAg Z191cmwucG9yID8gZ191cmwucG9yIDogcG9ydCwKLSAgICAgICAgICAgICAgICAgTlVMTAotICAg ICAgICAgICAgICAgICApOwotICAgICAgICByYyA9IHR0b3Blbih0dG5hbWUsJmxvY2FsLG1kbXR5 cCwwKTsKLSAgICAgICAgaWYgKHJjID4gLTEpIHsKLSAgICAgICAgICAgIG5ldHdvcmsgPSAxOwot ICAgICAgICAgICAgZXhpdG9uY2xvc2UgPSAxOwotI2lmZGVmIENLTE9HRElBTAotICAgICAgICAg ICAgZG9sb2duZXQoKTsKLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLSAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgIHByaW50ZigiP0Nvbm5lY3Rpb24gZmFpbGVkOiAlc1xuIixnX3VybC5zYXYp OwotICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDEpOwotICAgICAgICB9Ci0gICAgICAgIC8q IEFsc28gbmVlZCB0byBjaGVjayBoZXJlIGZvciBzZWN1cmUgYXV0aGVudGljYXRpb24gYWxyZWFk eSBkb25lICovCi0KLSNpZmRlZiBOT1NQTAotICAgICAgICBjZmxnID0gMTsKLSNlbHNlCi0Jewot ICAgICAgICAgICAgY2hhciAqIHNjcmlwdCA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAoIShzY3Jp cHQgPSAoY2hhciAqKW1hbGxvYyhTQ1JJUFRMRU4pKSkKLSAgICAgICAgICAgICAgZmF0YWwoImRv dXJsOiBvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgICAgICBpZiAoIWdfdXJsLnB0aCkgeyAgICAg ICAgICAgLyogV3JpdGUgdGhlIGFwcHJvcHJpYXRlIHNjcmlwdCAqLwotCQljZmxnID0gMTsKLSAg ICAgICAgICAgICAgICBja21ha3htc2coc2NyaXB0LFNDUklQVExFTiwKLQkJCSAgImlmIG5vdCBl cSB7XFx2KGF1dGhzdGF0ZSl9IHt1c2VyfSAiLAotCQkJICAiaWYgbm90IGVxIHtcXHYoYXV0aHN0 YXRlKX0ge3ZhbGlkfSB7ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdGUgbG9n aW4gIiwgLyogTm8gcGF0aCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBnX3VybC51c3Is ICAgICAgIC8qIEp1c3QgbG9nIGluIGFuZCBDT05ORUNUICovCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICIgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZ191cmwucHN3LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAiLCBpZiBmYWlsIGV4aXQgMSB7SUtTRCBsb2dpbiBmYWlsZWR9 IH0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBjb25uZWN0IiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0JCS8qIHByaW50ZigiQ0xDTURT IDE6ICVzXG4iLHNjcmlwdCk7ICovCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgIC8qIGRvZXMgdGhlIHBhdGggc3BlY2lmeSBhIGZpbGUgb3IgYSBkaXJlY3Rvcnk/ICovCi0g ICAgICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbihnX3VybC5wdGgpOwotICAgICAgICAgICAg ICAgIGlmIChJU0RJUlNFUChnX3VybC5wdGhbbGVuLTFdKSkgewotCQkgICAgY2ttYWt4bXNnKHNj cmlwdCxTQ1JJUFRMRU4sIC8qIERpcmVjdG9yeSBuYW1lIGdpdmVuICovCi0JCQkgICAgICAiaWYg bm90IGVxIHtcXHYoYXV0aHN0YXRlKX0ge3VzZXJ9IFwKLWlmIG5vdCBlcSB7XFx2KGF1dGhzdGF0 ZSl9IHt2YWxpZH0geyByZW1vdGUgbG9naW4gIiwKLQkJCSAgICAgIGdfdXJsLnVzciwKLQkJCSAg ICAgICIgIiwKLQkJCSAgICAgIGdfdXJsLnBzdywKLQkJCSAgICAgICIsIGlmIGZhaWwgZXhpdCAx IHtJS1NEIGxvZ2luIGZhaWxlZH0gfSIsCi0JCQkgICAgICAiLCBzZXQgbWFjcm8gZXJyb3Igb24i LAotCQkJICAgICAgIiwgc2V0IHhmZXIgZGlzcGwgYnJpZWYiLAotCQkJICAgICAgIiwgc2V0IHhm ZXIgYmVsbCBvZmYiLAotCQkJICAgICAgIiwgcmVtb3RlIGNkICIsCi0JCQkgICAgICBnX3VybC5w dGgsCi0JCQkgICAgICAiLCBsaW5lb3V0IGRpcmVjdG9yeSIsCi0JCQkgICAgICAiLCBjb25uZWN0 IgotCQkJICAgICAgKTsKLQkJICAgIC8qIHByaW50ZigiQ0xDTURTIDI6ICVzXG4iLHNjcmlwdCk7 ICovCi0JCX0gZWxzZSB7Ci0JCSAgICBja21ha3htc2coc2NyaXB0LFNDUklQVExFTiwgLyogUGF0 aCBnaXZlbiwgdHJ5IHRvIEdFVCAqLwotCQkJICAgICAgImlmIG5vdCBlcSB7XFx2KGF1dGhzdGF0 ZSl9IHt1c2VyfSBcCi1pZiBub3QgZXEge1xcdihhdXRoc3RhdGUpfSB7dmFsaWR9IHsgcmVtb3Rl IGxvZ2luICIsCi0JCQkgICAgICBnX3VybC51c3IsCi0JCQkgICAgICAiICIsCi0JCQkgICAgICBn X3VybC5wc3csCi0JCQkgICAgICAiLCBpZiBmYWlsIGV4aXQgMSB7SUtTRCBsb2dpbiBmYWlsZWR9 IH0iLAotCQkJICAgICAgIiwgc2V0IHhmZXIgZGlzcGwgYnJpZWYiLAotCQkJICAgICAgIiwgc2V0 IHhmZXIgYmVsbCBvZmYiLAotCQkJICAgICAgIiwgZ2V0ICIsCi0JCQkgICAgICBnX3VybC5wdGgs Ci0JCQkgICAgICAiLCAucmMgOj0gXFx2KHN0YXR1cykiLAotCQkJICAgICAgIiwgaWYgb3BlbiBj b25uZWN0aW9uIGJ5ZSIsCi0JCQkgICAgICAiLCBleGl0IFxcbShyYykiCi0JCQkgICAgICApOwot CQkgICAgLyogcHJpbnRmKCJDTENNRFMgMjogJXNcbiIsc2NyaXB0KTsgKi8KLQkJfQotICAgICAg ICAgICAgfQotICAgICAgICAgICAgY2xjbWRzID0gc2NyaXB0OwkJLyogTWFrZSB0aGlzIG91ciAt QyBjbWRsaW5lIG1hY3JvICovCi0JICAgIC8qIHByaW50ZigiSEFWRVVSTD0lZFxuIixoYXZldXJs KTsgKi8KLSAgICAgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgfSBlbHNlIHsKLSAgICAg ICAgaWYgKGNrc3RyY21wKGdfdXJsLnN2YywidGVsbmV0IiwtMSwwKSAmJgotI2lmZGVmIFNTSEJV SUxUSU4KLSAgICAgICAgICAgIGNrc3RyY21wKGdfdXJsLnN2Yywic3NoIiwtMSwwKSAmJgotI2Vu ZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSAgICAgICAgICAgIGNrc3RyY21wKGdfdXJsLnN2YywiZnRw IiwtMSwwKSkgewotICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksICVzIFVSTHMgbm90IHN1cHBv cnRlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBnX3VybC5zdmMgPyBnX3VybC5zdmMgOiAiIik7 Ci0gICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0j ZW5kaWYgLyogTk9DTURMICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2VuZGlmIC8qIE5PVVJM ICovCi0KLS8qCi0gIG1haW4oKS4uLgotCi0gIElmIHlvdSBnZXQgY29tcGxhaW50cyBhYm91dCAi bWFpbjogcmV0dXJuIHR5cGUgaXMgbm90IGJsYWgiLAotICBkZWZpbmUgTUFJTlRZUEUgb24gdGhl IENDIGNvbW1hbmQgbGluZSwgZS5nLiAiQ0ZMQUdTPS1ETUFJTlRZUEU9YmxhaCIKLSAgKHdoZXJl ICJibGFoIiBpcyBpbnQsIGxvbmcsIG9yIHdoYXRldmVyKS4KLQotICBJZiB0aGUgY29tcGxhaW50 IGlzICJBdHRlbXB0IHRvIHJldHVybiBhIHZhbHVlIGZyb20gYSBmdW5jdGlvbiBvZiB0eXBlIHZv aWQiCi0gIHRoZW4gYWRkIC1ETUFJTklTVk9JRC4KLSovCi0jaWZuZGVmIE1BSU5UWVBFCi0jaWZu ZGVmIE1BSU5JU1ZPSUQKLSNkZWZpbmUgTUFJTlRZUEUgaW50Ci0jZW5kaWYgLyogTUFJTklTVk9J RCAqLwotI2VuZGlmIC8qIE1BSU5UWVBFICovCi0KLSNpZmRlZiBNQUlOSVNWT0lECi0jaWZuZGVm IE1BSU5UWVBFCi0jZGVmaW5lIE1BSU5UWVBFIHZvaWQKLSNlbmRpZiAvKiBNQUlOVFlQRSAqLwot I2VuZGlmIC8qIE1BSU5JU1ZPSUQgKi8KLQotI2lmZGVmIGFlZ2lzCi0vKiBPbiB0aGUgQXBvbGxv LCBpbnRlcmNlcHQgbWFpbiB0byBpbnNlcnQgYSBjbGVhbnVwIGhhbmRsZXIgKi8KLWludAotY2tj bWFpKGFyZ2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OwotI2Vsc2UKLSNpZmRlZiBNQUMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNpbnRvc2ggKi8KLWludAotbWFpbiAo dm9pZCkKLSNlbHNlCi0jaWZkZWYgX19HTlVDX18gICAgICAgICAgICAgICAgICAgICAgICAgLyog R0NDIGNvbXBpbGVyICovCi1pbnQKLW1haW4oYXJnYyxhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFy Z3Y7Ci0jZWxzZQotI2lmZGVmIF9fREVDQyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERF QyBBbHBoYSB3aXRoIERFQyBDIGNvbXBpbGVyICovCi0jaWZkZWYgX19BTFBIQQotaW50Ci1tYWlu KGFyZ2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OwotI2Vsc2UgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIERFQyBDIGNvbXBpbGVyLCBub3QgQWxwaGEgKi8KLSNkZWZp bmUgTUFJTklTVk9JRAotVk9JRAotbWFpbihhcmdjLGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJn djsKLSNlbmRpZiAgLyogX19BTFBIQSAqLwotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTdHJhdHVzIFZPUyAqLwotaW50Ci1tYWluKGFyZ2MsYXJndikg aW50IGFyZ2M7IGNoYXIgKiphcmd2OwotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEstOTUgKi8KLSNpZmRlZiBPUzIKLSNpZmRlZiBLVUkKLSNkZWZpbmUgTUFJTklT Vk9JRAotdm9pZAotTWFpbiggaW50IGFyZ2MsIGNoYXIgKiogYXJndiApCi0jZWxzZSAvKiBLVUkg Ki8KLSNkZWZpbmUgTUFJTklTVk9JRAotVk9JRAotbWFpbihhcmdjLGFyZ3YpIGludCBhcmdjOyBj aGFyICoqYXJndjsKLSNlbmRpZiAvKiBLVUkgKi8KLSNlbHNlICAvKiBOb3QgSzk1ICovCi1NQUlO VFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsIG90aGVycy4uLiAqLwot bWFpbihhcmdjLGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsKLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogX19ERUNDICovCi0jZW5kaWYgLyogX19H TlVDX18gKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBhZWdpcyAqLwotCi0vKiBtYWlu ICovIHsKLQotICAgIGNoYXIgKnA7Ci0KLSNpZm5kZWYgTk9TRVRLRVkKLSAgICBpbnQgaTsKLSNl bmRpZiAvKiBOT1NFVEtFWSAqLwotCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICBzaG9ydCAqcGZo YSA9IDAxNjAwMDAwMDAzNjsgICAgICAgICAvKiBHZXQgYXJvdW5kIExBTkdfUlQgcHJvYmxlbSAq LwotICAgICpwZmhhID0gKHNob3J0KSAwOyAgICAgICAgICAgICAgICAgIC8qIE5vIHVzZXIgcHJv dGVjdGlvbiBmYXVsdCBoYW5kbGVyICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotICAg IGludCB1bmJ1ZiA9IDA7CQkJLyogbm9uemVybyBmb3IgdW5idWZmZXJlZCBzdGRvdXQgKi8KLQot Lyogc2V0YnVmIGhhcyB0byBiZSBjYWxsZWQgb24gdGhlIGZpbGUgZGVzY3JpcHRvciBiZWZvcmUg aXQgaXMgdXNlZCAqLwotCi0jaWZkZWYgVU5JWAotI2lmZGVmIE5PTk9TRVRCVUYJCQkvKiBVbmJ1 ZmZlcmVkIGNvbnNvbGUgaS9vICovCi0gICAgdW5idWYrKzsJCQkJLyogYXMgYSBjb21waWxlLXRp bWUgb3B0aW9uICovCi0jZW5kaWYJLyogTk9OT1NFVEJVRiAqLwotICAgIGlmICghdW5idWYpIHsJ CQkvKiBPciBhcyBhIGNvbW1hbmQtbGluZSBzZWxlY3Rpb24gKi8KLQlpbnQgaSwgbjsJCQkvKiBX ZSBoYXZlIHRvIHByZS1wcmUtc2NhbiBmb3IgKi8KLQljaGFyICogczsJCQkvKiB0aGlzIG9uZS4g Ki8KLQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7Ci0JICAgIHMgPSBhcmd2W2ldOwotCSAg ICBpZiAoIXMpIG4gPSAwOyBlbHNlIG4gPSAoaW50KXN0cmxlbihzKTsKLQkgICAgaWYgKG4gPiA0 KSB7Ci0JCWlmICghY2tzdHJjbXAoIi0tdW5idWZmZXJlZCIscyxuLDApKSB7Ci0JCSAgICB1bmJ1 ZisrOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkgICAgfQotCX0KLSAgICB9Ci0gICAgaWYgKHVuYnVm KQotICAgICAgc2V0YnVmKHN0ZG91dCxOVUxMKTsKLSNlbmRpZgkvKiBVTklYICovCi0KLS8qIERv IHNvbWUgaW5pdGlhbGl6YXRpb24gKi8KLQotI2lmZGVmIFZNUwotI2lmZGVmIF9fREVDQwotICAg IC8qIEdldCBzb21lIFJNUyBkZWZhdWx0IHNldHRpbmdzLiAqLwotICAgIGdldF9ybXNfZGVmYXVs dHMoKTsKLSNlbmRpZiAvKiBkZWYgX19ERUNDICovCi0jZW5kaWYgLyogZGVmIFZNUyAqLwotCi0j aWZuZGVmIE1BQwotICAgIHhhcmdjID0geGFyZ3MgPSBhcmdjOyAgICAgICAgICAgICAgIC8qIE1h a2UgZ2xvYmFsIGNvcGllcyBvZiBhcmdjICovCi0gICAgeGFyZ3YgPSBhcmd2OyAgICAgICAgICAg ICAgICAgICAgICAgLyogLi4uYW5kIGFyZ3YuICovCi0gICAgeGFyZzAgPSBhcmd2WzBdOwotI2lm ZGVmIE5UCi0gICAgc2V0T1NWZXIoKTsKLSNlbmRpZiAvKiBOVCAqLwotICAgIHpzdHJpcChhcmd2 WzBdLCZwKTsgICAgICAgICAgICAgICAgIC8qIEdldCBuYW1lIHdlIHdlcmUgaW52b2tlZCB3aXRo ICovCi0gICAgbWFrZXN0cigmbXluYW1lLHApOwotICAgIGlmICghY2tzdHJjbXAobXluYW1lLCJ0 ZWxuZXQiLC0xLDApKSAgICAgICBob3djYWxsZWQgPSBJX0FNX1RFTE5FVDsKLSNpZmRlZiBDS19L RVJCRVJPUwotICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsImt0ZWxuZXQiLC0xLDApKSBo b3djYWxsZWQgPSBJX0FNX1RFTE5FVDsKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotICAgIGVs c2UgaWYgKCFja3N0cmNtcChteW5hbWUsInJsb2dpbiIsLTEsMCkpICBob3djYWxsZWQgPSBJX0FN X1JMT0dJTjsKLSAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJpa3NkIiwtMSwwKSkgICAg aG93Y2FsbGVkID0gSV9BTV9JS1NEOwotI2lmZGVmIE5FV0ZUUAotICAgIGVsc2UgaWYgKCFja3N0 cmNtcChteW5hbWUsImZ0cCIsLTEsMCkpICAgICBob3djYWxsZWQgPSBJX0FNX0ZUUDsKLSNlbmRp ZiAvKiBORVdGVFAgKi8KLSNpZm5kZWYgTk9IVFRQCi0gICAgZWxzZSBpZiAoIWNrc3RyY21wKG15 bmFtZSwiaHR0cCIsLTEsMCkpICAgIGhvd2NhbGxlZCA9IElfQU1fSFRUUDsKLSNlbmRpZiAvKiBO T0hUVFAgKi8KLSNpZmRlZiBPUzIKLSAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJ0ZWxu ZXQuZXhlIiwtMSwwKSkgIGhvd2NhbGxlZCA9IElfQU1fVEVMTkVUOwotI2lmZGVmIFNTSEJVSUxU SU4KLSAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJzc2giLC0xLDApKSAgaG93Y2FsbGVk ID0gSV9BTV9TU0g7Ci0gICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwic3NoLmV4ZSIsLTEs MCkpICBob3djYWxsZWQgPSBJX0FNX1NTSDsKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZk ZWYgQ0tfS0VSQkVST1MKLSAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJrdGVsbmV0LmV4 ZSIsLTEsMCkpIGhvd2NhbGxlZCA9IElfQU1fVEVMTkVUOwotI2VuZGlmIC8qIENLX0tFUkJFUk9T ICovCi0gICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwicmxvZ2luLmV4ZSIsLTEsMCkpICBo b3djYWxsZWQgPSBJX0FNX1JMT0dJTjsKLSNpZmRlZiBOVAotICAgIGVsc2UgaWYgKCFja3N0cmNt cChteW5hbWUsImlrc2RudCIsLTEsMCkpICAgIGhvd2NhbGxlZCA9IElfQU1fSUtTRDsKLSAgICBl bHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJpa3NkbnQuZXhlIiwtMSwwKSkgICAgaG93Y2FsbGVk ID0gSV9BTV9JS1NEOwotI2VuZGlmIC8qIE5UICovCi0jaWZkZWYgTkVXRlRQCi0gICAgZWxzZSBp ZiAoIWNrc3RyY21wKG15bmFtZSwiZnRwLmV4ZSIsLTEsMCkpICAgICBob3djYWxsZWQgPSBJX0FN X0ZUUDsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSNpZm5kZWYgTk9IVFRQCi0gICAgZWxzZSBpZiAo IWNrc3RyY21wKG15bmFtZSwiaHR0cC5leGUiLC0xLDApKSAgICBob3djYWxsZWQgPSBJX0FNX0hU VFA7Ci0jZW5kaWYgLyogTk9IVFRQICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgZWxzZSBpZiAo IWNrc3RyY21wKG15bmFtZSwia2VybWl0LXNzaHN1YiIsLTEsMCkpIGhvd2NhbGxlZCA9IElfQU1f U1NIU1VCOwotCi0jaWZuZGVmIE5PSUNQCi0gICAgY21kaW5pKCk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTXVzdCBjb21lIGJlZm9yZSBwcmVzY2FuICovCi0gICAgZGVidWcoRjEwMCwi bWFpbiBjbWRpbmkoKSBkb25lIiwiIiwwKTsKLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgIHByZXNj YW4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZS1DaGVjayBmb3IgZGVidWdnaW5n LCBldGMgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSAgICBkZWJ1ZyhGMTAxLCJNQUlOIGZlb2wiLCIi LGZlb2wpOwotICAgIG1ha2V2ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFB1dCB0 b2dldGhlciB2ZXJzaW9uIHN0cmluZ3MgKi8KLSNpZm5kZWYgTk9TRVRLRVkgICAgICAgICAgICAg ICAgICAgICAgICAvKiBBbGxvY2F0ZSAmIGluaXRpYWxpemUgdGhlIGtleW1hcCAqLwotICAgIC8q IFRoaXMgY29kZSBoYXMgYmVlbiBtb3ZlZCB0byBiZWZvcmUgc3lzaW5pdCgpIGZvciBLOTVHICov Ci0gICAgaWYgKCEoa2V5bWFwID0gKEtFWSAqKSBtYWxsb2Moc2l6ZW9mKEtFWSkqS01TSVpFKSkp Ci0gICAgICBmYXRhbCgibWFpbjogbm8gbWVtb3J5IGZvciBrZXltYXAiKTsKLSAgICBpZiAoISht YWNyb3RhYiA9IChNQUNSTyAqKSBtYWxsb2Moc2l6ZW9mKE1BQ1JPKSpLTVNJWkUpKSkKLSAgICAg IGZhdGFsKCJtYWluOiBubyBtZW1vcnkgZm9yIG1hY3JvdGFiIik7Ci0gICAgZm9yIChpID0gMDsg aSA8IEtNU0laRTsgaSsrKSB7Ci0gICAgICAga2V5bWFwW2ldID0gKEtFWSkgaTsKLSAgICAgICBt YWNyb3RhYltpXSA9IE5VTEw7Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VUS0VZICovCi0KLSAgICBz aG9ydGJ5dGVzLnhfc2hvcnQgPSAweEFCQ0Q7ICAgICAgICAvKiBHZXQgRW5kaWFubmVzcyAqLwot ICAgIGlmIChzaG9ydGJ5dGVzLnhfY2hhclswXSA9PSAweENEKSB7IC8qIDAgPSBCaWcgRW5kaWFu ICovCi0gICAgICAgIGJ5dGVvcmRlciA9IDE7ICAgICAgICAgICAgICAgICAgLyogMSA9IExpdHRs ZSBFbmRpYW4gKi8KLSAgICAgICAgYmlnZW5kaWFuID0gMDsgICAgICAgICAgICAgICAgICAvKiAo Zm9yIGNsYXJpdHkgaW4gcHJvZ3JhbW1pbmcpICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgYnl0 ZW9yZGVyID0gMDsgICAgICAgICAgICAgICAgICAvKiBCaWcgRW5kaWFuICovCi0gICAgICAgIGJp Z2VuZGlhbiA9IDE7Ci0gICAgfQotICAgIGlmIChzaXplb2YoQ0tfT0ZGX1QpID09IDgpCQkvKiBM YXJnZSBmaWxlcyBhbmQgaW50cz8gKi8KLSAgICAgIGhhdmVsZnMgPSAxOwotCi0gICAgaWYgKHN5 c2luaXQoKSA8IDApICAgICAgICAgICAgICAgICAgLyogU3lzdGVtLWRlcGVuZGVudCBpbml0aWFs aXphdGlvbi4gKi8KLSAgICAgIGZhdGFsKCJDYW4ndCBpbml0aWFsaXplISIpOwotICAgIGVsc2UK LSAgICAgIGluaXRmbGcgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB3ZSBk aWQuICovCi0gICAgZGVidWcoRjExMSwiY2tjbWFpIG15bmFtZSIsbXluYW1lLGhvd2NhbGxlZCk7 Ci0KLSNpZmRlZiBVTklYCi0gICAgZ2V0ZXhlZGlyKCk7ICAgICAgICAgICAgICAgICAgICAgICAg LyogQ29tcHV0ZSBleGVkaXIgdmFyaWFibGUgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZmRl ZiBDS1NZU0xPRwotI2lmZGVmIFNZU0xPR0xFVkVMCi0vKgotICBJZiBidWlsdCB3aXRoIC1EU1lT TE9HTEVWRUwgb24gY2MgY29tbWFuZCBsaW5lLCB0aGlzIG1lYW5zIHdlIGFsd2F5cwotICBkbyBz eXNsb2dnaW5nIGF0IHRoZSBpbmRpY2F0ZWQgbGV2ZWwuCi0qLwotICAgIHpzeXNsb2coKTsgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE9wZW4gc3lzbG9nICovCi0jZWxzZSAvKiBTWVNMT0dM RVZFTCAqLwotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICB6c3lzbG9nKCk7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogT3BlbiBzeXNsb2cgKi8KLSNlbmRpZiAvKiBJS1NE ICovCi0jZW5kaWYgLyogU1lTTE9HTEVWRUwgKi8KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCi0j aWZkZWYgQ0tfS0VSQkVST1MKLSAgICBpbmlfa2VyYigpOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBJbml0aWFsaXplIEtlcmJlcm9zIGRhdGEgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAq LwotI2lmZGVmIENLX1NTTAotICAgIHNzbF9vbmNlX2luaXQoKTsKLSNlbmRpZiAvKiBDS19TU0wg Ki8KLSNpZmRlZiBUTkNPREUKLSAgICB0bl9zZXRfbW9kZXMoKTsgICAgICAgICAgICAgICAgICAg ICAvKiBJbml0IFRlbG5ldCBPcHRpb24gdGFibGVzICovCi0jZW5kaWYgLyogVE5DT0RFICovCi0K LSNpZmRlZiBDS19UVEdXU0laICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHNj cmVlbiBkaW1lbnNpb25zICovCi0jaWZkZWYgT1MyCi0gICAgdHRnY3dzeigpOwotI2Vsc2UgLyog T1MyICovCi0gICAgaWYgKHR0Z3dzaXooKSA+IDApIHsKLSAgICAgICAgaWYgKHR0X3Jvd3MgPiAw ICYmIHR0X2NvbHMgPiAwKSB7Ci0gICAgICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3M7Ci0gICAg ICAgICAgICBjbWRfY29scyA9IHR0X2NvbHM7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyog T1MyICovCi0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotCi0jaWZuZGVmIE9TMgotI2lmZGVmIFRD UFNPQ0tFVAotI2lmZGVmIENLX1NPQ0tTCi0gICAgU09DS1Npbml0KGFyZ3ZbMF0pOyAgICAgICAg ICAgICAgICAgLyogSW50ZXJuZXQgcmVsYXkgcGFja2FnZS4uLiAqLwotI2VuZGlmIC8qIENLX1NP Q0tTICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogT1MyICovCi0KLSAgICBp bml0ZmxvdygpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGZsb3ctY29u dHJvbCB0YWJsZSAqLwotCi0jaWZuZGVmIE5PSUNQCi0jaWZkZWYgQ0tGTE9BVAotICAgIGluaXRm bG9hdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZHVjZSBmbG9hdGluZy1wb2ludCBw cmVjaXNpb24gKi8KLSNlbmRpZiAvKiBDS0ZMT0FUICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQot I2lmbmRlZiBOT1hGRVIKLSAgICBpbml0eGxpc3QoKTsJCQkvKiBJbml0IGV4Y2VwdGlvbiBsaXN0 cyAqLwotCi0jaWZkZWYgQ0tfWFlaICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlh bGl6ZSBwcm90b2NvbHMuLi4gICovCi0KLSNpZmRlZiBYWVpfSU5URVJOQUwgLyogWFlaTU9ERU0g YXJlIGludGVybmFsIC4uLiAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgIC8qIENhbid0IGRvIHRo aXMgZm9yIFhNT0RFTSBiZWNhdXNlIGlmIGZpbGVuYW1lIGNvbnRhaW5zIGEgIkMiIGV0Yy4uLiAq LwotICAgIGluaXRwcm90byhQUk9UT19YLCAicnggJXMiLCJyeCAlcyIsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwpOwotICAgIGluaXRwcm90byhQUk9UT19YQywicmMgJXMiLCJyYyAlcyIs IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotI2Vsc2UgLyogQ09NTUVOVCAqLwotICAg IGluaXRwcm90byhQUk9UT19YLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMKTsKLSAgICBpbml0cHJvdG8oUFJPVE9fWEMsTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGluaXRwcm90byhQUk9U T19ZLCAicmIiLCJyYiIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIGluaXRw cm90byhQUk9UT19HLCAicmIiLCJyYiIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwot ICAgIGluaXRwcm90byhQUk9UT19aLCAicnoiLCJyeiIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwpOwotICAgaW5pdHByb3RvKFBST1RPX0ssImtlcm1pdCAtaXIiLCJrZXJtaXQgLXIiLCJr ZXJtaXQgLXgiLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIC8qIEtlcm1pdCBNdXN0IGJlIGxh c3QgKi8KLQotI2Vsc2UgLyogWFlaTU9ERU0gYXJlIGV4dGVybmFsIHByb3RvY29scyAuLi4gKi8K LQotIC8qICAgICAgICAgICAgICAgICAgczEgICAgICBzMiAgICAgczMgICAgczQgICAgICBzNSAg ICAgICAgIHM2ICAgICAgczcgICAgICovCi0gaW5pdHByb3RvKFBST1RPX1gsICJyeCAlcyIsInJ4 ICVzIixOVUxMLCJzeCAlcyIsInN4IC1hICVzIiwicnggJXMiLCAicnggJXMiKTsKLSBpbml0cHJv dG8oUFJPVE9fWEMsInJjICVzIiwicmMgJXMiLE5VTEwsInN4ICVzIiwic3ggLWEgJXMiLCJyYyAl cyIsICJyYyAlcyIpOwotIGluaXRwcm90byhQUk9UT19ZLCAicmIiLCAgICJyYiIsICAgTlVMTCwi c2IgJXMiLCJzYiAtYSAlcyIsInJiIiwgICAgInJiIiAgICk7Ci0gaW5pdHByb3RvKFBST1RPX0cs ICJyYiIsICAgInJiIiwgICBOVUxMLCJzYiAlcyIsInNiIC1hICVzIiwicmIiLCAgICAicmIiICAg KTsKLSBpbml0cHJvdG8oUFJPVE9fWiwgInJ6IiwgICAicnoiLCAgIE5VTEwsInN6ICVzIiwic3og LWEgJXMiLCJyeiIsICAgICJyeiIgICApOwotIGluaXRwcm90byhQUk9UT19LLCAia2VybWl0IC1p ciIsImtlcm1pdCAtciIsImtlcm1pdCAteCIsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gLyogS2Vy bWl0IG11c3QgYmUgbGFzdCAqLwotCi0jZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCi0KLSNlbHNl ICAvKiBObyBYWVpNT0RFTSBzdXBwb3J0ICovCi0KLSAgIGluaXRwcm90byhQUk9UT19LLCJrZXJt aXQgLWlyIiwia2VybWl0IC1yIiwia2VybWl0IC14IixOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLQot I2VuZGlmIC8qIENLX1hZWiAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0gICAgY29ubm9pKCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29uc29sZSBpbnRlcnJ1cHRzIG9mZiAqLwot Ci0jaWZuZGVmIE5PWEZFUgotI2lmZGVmIE9TMgotICAgIC8qIEluaXRpYWxpemUgS2VybWl0IGFu ZCBabW9kZW0gQXV0by1Eb3dubG9hZCBTdHJpbmdzICovCi0gICAgYWRsX2tzdHIgPSBzdHJkdXAo IktFUk1JVCBSRUFEWSBUTyBTRU5ELi4uIik7Ci0gICAgYWRsX3pzdHIgPSBzdHJkdXAoInJ6XHIi KTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIFBBVFRFUk5TCi0gICAgaW5pdHBhdCgpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBmaWxlbmFtZSBwYXR0ZXJucyAq LwotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYg Tk9DU0VUUwotICAgIGluaXRjc2V0cygpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRp YWxpemUgY2hhcmFjdGVyIHNldHMgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZm5kZWYg Tk9JQ1AKLSNpZmRlZiBERkNETVNHCi0gICAgbWFrZXN0cigmY2Rtc2dzdHIsREZDRE1TRyk7Ci0g ICAgbWFrZWxpc3QoY2Rtc2dzdHIsY2Rtc2dmaWxlLDgpOyAgICAgLyogSW5pdGlhbGl6ZSBDRCBt ZXNzYWdlIGZpbGVuYW1lcyAqLwotI2VuZGlmIC8qIERGQ0RNU0cgKi8KLSNlbmRpZiAvKiBOT0lD UCAqLwotCi0gICAgc3N0YXRlID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gZGVm YXVsdCBzdGFydCBzdGF0ZS4gKi8KLSNpZmRlZiBEWU5BTUlDCi0gICAgaWYgKGdldGlvYnMoKSA8 IDApCi0gICAgICBmYXRhbCgiQ2FuJ3QgYWxsb2NhdGUgaS9vIGJ1ZmZlcnMhIik7Ci0jZW5kaWYg LyogRFlOQU1JQyAqLwotCi0jaWZuZGVmIE5PU1BMCi0jaWZuZGVmIE5PUkFORE9NCi0gICAgewot ICAgICAgICBjaGFyIHN0YWNrZGF0YVsyNTZdOwotICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IDEy MzQsIG47Ci0gICAgICAgIC8qIHRyeSB0byBtYWtlIGEgcmFuZG9tIHVuc2lnbmVkIGludCB0byBm ZWVkIHNyYW5kKCkgKi8KLSNpZm5kZWYgVk1TCi0JLyogdGltZS5oIGFuZCBNdWx0aU5ldCBkbyBu b3QgZ2V0IGFsb25nICovCi0gICAgICAgIGMgPSB0aW1lKE5VTEwpOwotI2VuZGlmIC8qIFZNUyAq LwotICAgICAgICBjICo9IGdldHBpZCgpOwotCS8qIFJlZmVyZW5jZWQgYmVmb3JlIHNldC4uLiBE RUxJQkVSQVRFTFkgKi8KLSAgICAgICAgZm9yIChuID0gMDsgbiA8IHNpemVvZihzdGFja2RhdGEp OyBuKyspIC8qIElHTk9SRSBXQVJOSU5HICovCi0JICBjICs9IHN0YWNrZGF0YVtuXTsJCS8qIERF TElCRVJBVEVMWSBVU0VEIEJFRk9SRSBTRVQgKi8KLSAgICAgICAgc3JhbmQoKHVuc2lnbmVkIGlu dCljKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9SQU5ET00gKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwot Ci0gICAgY2tob3N0KG15aG9zdCxNWUhPU1RMKTsgICAgICAgICAgICAgLyogTmFtZSBvZiBsb2Nh bCBob3N0ICovCi0gICAgZGVidWcoRjExMCwibWFpbiBja2hvc3QiLG15aG9zdCwwKTsKLSNpZmRl ZiBJS1NECi0gICAgaWYgKCFpbnNlcnZlcikgewotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAg Y2tzdHJuY3B5KHR0bmFtZSxkZnR0eSxUVE5BTUxFTik7IC8qIFNldCB1cCBkZWZhdWx0IHR0eSBu YW1lLiAqLwotICAgICAgICBsb2NhbCA9IG5vbG9jYWwgPyAwIDogZGZsb2M7ICAgIC8qIEFuZCB3 aGV0aGVyIGl0J3MgbG9jYWwgb3IgcmVtb3RlLiAqLwotICAgICAgICBwYXJpdHkgPSBkZnBydHk7 ICAgICAgICAgICAgICAgIC8qIFNldCBpbml0aWFsIHBhcml0eSwgKi8KLSNpZm5kZWYgTk9YRkVS Ci0gICAgICAgIG15aW5kZXggPSBnZXRzeXNpeChja3N5c2lkKTsgICAgLyogU3lzdGVtIGluZGV4 ICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgICAgIGlmIChsb2NhbCkgaWYgKHR0b3Blbih0 dG5hbWUsJmxvY2FsLDAsMCkgPCAwKSB7Ci0jaWZuZGVmIE9TMgotICAgICAgICAgICAgY29ub2wo IkNhbid0IG9wZW4gZGV2aWNlOiAiKTsKLSAgICAgICAgICAgIGNvbm9sbCh0dG5hbWUpOwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgbG9jYWwgPSAwOwotICAgICAgICAgICAgY2tzdHJu Y3B5KHR0bmFtZSxDVFROQU0sVFROQU1MRU4pOwotICAgICAgICB9Ci0gICAgICAgIHNldGZsb3co KTsgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGFwcHJvcHJpYXRlIGZsb3cgY29udHJvbCAq LwotICAgICAgICBzcGVlZCA9IHR0Z3NwZCgpOyAgICAgICAgICAgICAgIC8qIEdldCB0cmFuc21p c3Npb24gc3BlZWQuICovCi0jaWZkZWYgSUtTRAotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0K LSNpZmRlZiBBTllYMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGwgWC4yNSBpbXBs ZW1lbnRhdGlvbnMgKi8KLSNpZm5kZWYgSUJNWDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBleGNlcHQgSUJNIGhhdmUgUEFEIHN1cHBvcnQgKi8KLSAgICBpbml0cGFkKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIFguMjUgUEFEICovCi0jZW5kaWYgLyogSUJN WDI1ICovCi0jZW5kaWYgLyogQU5ZWDI1ICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKGlu aWJ1ZnMoU0JTSVosUkJTSVopIDwgMCkgICAgICAgLyogQWxsb2NhdGUgcGFja2V0IGJ1ZmZlcnMg Ki8KLSAgICAgIGZhdGFsKCJDYW4ndCBhbGxvY2F0ZSBwYWNrZXQgYnVmZmVycyEiKTsKLSNpZm5k ZWYgTk9DS1NQRUVECi0gICAgc2V0cHJlZml4KHByZWZpeGluZyk7ICAgICAgICAgICAgICAgLyog U2V0IHVwIGNvbnRyb2wgY2hhciBwcmVmaXhpbmcgKi8KLSNlbmRpZiAvKiBOT0NLU1BFRUQgKi8K LSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0lDUAotICAgIGlmIChzc3RlbG5ldAot I2lmZGVmIElLU0QKLSAgICAgICAgfHwgaW5zZXJ2ZXIKLSNlbmRpZiAvKiBJS1NEICovCi0gICAg ICAgICkgewotICAgICAgICBpbnQgb24gPSAxLCB4ID0gMDsKLSAgICAgICAgZXh0ZXJuIGludCBj a3hlY2gsIHR0bmV0LCB0dG5wcm90bywgY21kbXNrOwotI2lmZGVmIFNPX1NOREJVRgotICAgICAg ICBleHRlcm4gaW50IHRjcF9zZW5kYnVmOwotI2VuZGlmCi0jaWZkZWYgU09fUkNWQlVGCi0gICAg ICAgIGV4dGVybiBpbnQgdGNwX3JlY3ZidWY7Ci0jZW5kaWYKLSNpZmRlZiBTT19LRUVQQUxJVkUK LSAgICAgICAgZXh0ZXJuIGludCB0Y3Bfa2VlcGFsaXZlOwotI2VuZGlmCi0jaWZkZWYgU09fTElO R0VSCi0gICAgICAgIGV4dGVybiBpbnQgdGNwX2xpbmdlciwgdGNwX2xpbmdlcl90bW87Ci0jZW5k aWYgLyogU09fTElOR0VSICovCi0jaWZkZWYgU09fRE9OVFJPVVRFCi0gICAgICAgIGV4dGVybiBp bnQgdGNwX2RvbnRyb3V0ZTsKLSNlbmRpZiAvKiBTT19ET05UUk9VVEUgKi8KLSNpZmRlZiBUQ1Bf Tk9ERUxBWQotICAgICAgICBleHRlcm4gaW50IHRjcF9ub2RlbGF5OwotI2VuZGlmIC8qIFRDUF9O T0RFTEFZICovCi0jaWZkZWYgSUtTRAotICAgICAgICBleHRlcm4gaW50IGlrbG9nb3BlbjsKLSNl bmRpZiAvKiBJS1NEICovCi0gICAgICAgIGV4dGVybiBpbnQgdHRtZG07Ci0KLSNpZmRlZiBVTklY Ci0gICAgICAgIGlmIChpc2F0dHkoMCkpCi0gICAgICAgICAgZmF0YWwoIkludGVybmV0IEtlcm1p dCBTZXJ2aWNlIGNhbm5vdCBiZSBzdGFydGVkIGF0IGEgdGVybWluYWwuIik7Ci0jZW5kaWYgLyog VU5JWCAqLwotCi0gICAgICAgIHJlbGlhYmxlID0geHJlbGlhYmxlID0gU0VUX09OOyAgLyogSUtT RCBoYXMgcmVsaWFibGUgY29ubmVjdGlvbiAqLwotI2lmbmRlZiBWTVMKLSAgICAgICAgZmxvdyA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBmbG93IGNvbnRyb2wgbmVlZGVkICovCi0j ZW5kaWYgLyogVk1TICovCi0gICAgICAgIGJnc2V0ID0gMDsgICAgICAgICAgICAgICAgICAgICAg LyogTm90IGluIGJhY2tncm91bmQgKi8KLSAgICAgICAgbm9wdXNoID0gMTsgICAgICAgICAgICAg ICAgICAgICAvKiBObyBleHRlcm5hbCBwcm9jZXNzZXMgKi8KLSAgICAgICAgcGFyaXR5ID0gMDsg ICAgICAgICAgICAgICAgICAgICAvKiA4IGJpdHMgLi4uICovCi0gICAgICAgIGNtZG1zayA9IDB4 ZmY7ICAgICAgICAgICAgICAgICAgLyogYWxsIHRoZSB3YXkgKi8KLSAgICAgICAgY21hc2sgPSAw eGZmOwotCi0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsgICAgICAgICAgICAg ICAgIC8qIElmIElLU0QgKi8KLSAgICAgICAgICAgIGRvaWtzZGluaXQoKTsgICAgICAgICAgICAg ICAvKiBFeGVjdXRlIElLU0QgY29uZmlndXJhdGlvbiBmaWxlICovCi0gICAgICAgICAgICB3aGls ZSAodGxldmVsID4gLTEpCi0gICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAgICAg LyogKElnbm9yZSBhbnkgZmlsZS14ZmVyIGNvbW1hbmRzKSAqLwotICAgICAgICAgICAgaWtzZGNm ID0gMTsgICAgICAgICAgICAgICAgIC8qIElLU0QgYy5mLiBoYXMgYmVlbiBwcm9jZXNzZWQgKi8K LSAgICAgICAgfQotICAgICAgICBpZiAoIWlrbG9nb3BlbikgKFZPSUQpIGRvaWtsb2coKTsgLyog T3BlbiBLZXJtaXQtc3BlY2lmaWMgbG9nICovCi0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZkZWYg VU5JWAotICAgICAgICBzZXRidWYoc3Rkb3V0LE5VTEwpOyAgICAgICAgICAgIC8qIERvbid0IGJ1 ZmZlciB0aGUgb3V0cHV0ICovCi0gICAgICAgIGNrc3RybmNweSh0dG5hbWUsIjAiLFRUTkFNTEVO KTsgLyogbm90ICIvZGV2L3R0eSIuLi4gKi8KLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgIGxv Y2FsID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogV2UgYXJlIGluIHJlbW90ZSBtb2RlICov Ci0gICAgICAgIGNreGVjaCA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogV2Ugd2lsbCBlY2hv ICovCi0jaWZkZWYgT1MyCi0gICAgICAgIG5ldHR5cGUgPSBORVRfVENQQjsgICAgICAgICAgICAg LyogU28gdHRvcGVuKCkgdHJlYXRzIHRoZSBjb25uZWN0aW9uICovCi0gICAgICAgIG1kbXR5cCA9 IC1uZXR0eXBlOyAgICAgICAgICAgICAgLyogYXMgYSBuZXR3b3JrICovCi0jZW5kaWYgLyogT1My ICovCi0gICAgICAgIGRlYnVnKEYxMDAsIm1haW4gYWJvdXQgdG8gY2FsbCB0dG9wZW4oKSBpbnNl cnZlciIsIiIsMCk7Ci0gICAgICAgIGlmICh0dG9wZW4odHRuYW1lLCZsb2NhbCxtZG10eXAsMCkg PCAwKSB7IC8qIE9wZW4gY29tbSBjaGFubmVsICovCi0gICAgICAgICAgICBmYXRhbCgiY2FuJ3Qg aW5pdGlhbGl6ZSBpL28iKTsKLSAgICAgICAgfQotI2lmZGVmIE9TMgotICAgICAgICBsb2NhbCA9 IDA7Ci0gICAgICAgIG5ldHdvcmsgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogRG9lcyB1c2Ug bmV0d29ya2luZyBjb2RlICovCi0jZWxzZSAgLyogT1MyICovCi0gICAgICAgIG5ldHdvcmsgPSAw OyAgICAgICAgICAgICAgICAgICAgLyogRG9lcyBub3QgdXNlIG5ldHdvcmtpbmcgY29kZSAqLwot I2VuZGlmIC8qIE9TMiAqLwotICAgICAgICB0dG1kbSA9IC0xOyAgICAgICAgICAgICAgICAgICAg IC8qIERvZXMgbm90IHVzZSBhIG1vZGVtICovCi0gICAgICAgIHNzdGVsbmV0ID0gMTsgICAgICAg ICAgICAgICAgICAgLyogRG8gc2VydmVyLXNpZGUgVGVsbmV0IG5lZ290YXRpb25zICovCi0gICAg ICAgIGRlYnVnKEYxMTEsIk1BSU4iLCJzc3RlbG5ldCIsc3N0ZWxuZXQpOwotICAgICAgICB0dG5l dCA9IE5FVF9UQ1BCOyAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgdHlwZSBpcyBUQ1Agc29ja2V0 cyAqLwotICAgICAgICB0dG5wcm90byA9IE5QX1RFTE5FVDsgICAgICAgICAgIC8qIE5ldHdvcmQg cHJvdG9jb2wgaXMgVGVsbmV0ICovCi0jaWZkZWYgSUtTREIKLSAgICAgICAgZGJpbml0KCk7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGRhdGFiYXNlIHJlY29yZCAqLwotI2Vu ZGlmIC8qIElLU0RCICovCi0jaWZuZGVmIE9TMgotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0g ICAgICAgIC8qIEJlZm9yZSBpbml0aWFsaXphdGluZyBUZWxuZXQvUmxvZ2luIG5lZ290aWF0aW9u cywgaW5pdCBLZXJiZXJvcyAqLwotICAgICAgICBja19hdXRoX2luaXQoY2tnZXRwZWVyKCksIiIs IiIsMCk7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotI2lmZGVmIE5PTl9CTE9D S19JTwotICAgICAgICBvbiA9IDE7Ci0gICAgICAgIHggPSBzb2NrZXRfaW9jdGwoMCxGSU9OQklP LCZvbik7Ci0gICAgICAgIGRlYnVnKEYxMDEsIm1haW4gRklPTkJJTyIsIiIseCk7Ci0jZW5kaWYg LyogTk9OX0JMT0NLX0lPICovCi0jaWZkZWYgU09fT09CSU5MSU5FCi0gICAgICAgIG9uID0gMTsK LSAgICAgICAgeCA9IHNldHNvY2tvcHQoMCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLCAoY2hh ciAqKSZvbiwgc2l6ZW9mKG9uKSk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIm1haW4gU09fT09CSU5M SU5FIiwiIix4KTsKLSNlbmRpZiAvKiBTT19PT0JJTkxJTkUgKi8KLQotI2lmbmRlZiBOT1RDUE9Q VFMKLSNpZm5kZWYgZGF0YWdlbmVyYWwKLSNpZmRlZiBTT0xfU09DS0VUCi0jaWZkZWYgVENQX05P REVMQVkKLSAgICAgICAgbm9fZGVsYXkoMCx0Y3Bfbm9kZWxheSk7Ci0jZW5kaWYgLyogVENQX05P REVMQVkgKi8KLSNpZmRlZiBTT19LRUVQQUxJVkUKLSAgICAgICAga2VlcGFsaXZlKDAsdGNwX2tl ZXBhbGl2ZSk7Ci0jZW5kaWYgLyogU09fS0VFUEFMSVZFICovCi0jaWZkZWYgU09fTElOR0VSCi0g ICAgICAgIGNrX2xpbmdlcigwLHRjcF9saW5nZXIsIHRjcF9saW5nZXJfdG1vKTsKLSNlbmRpZiAv KiBTT19MSU5HRVIgKi8KLSNpZmRlZiBTT19ET05UUk9VVEUKLSAgICAgICAgZG9udHJvdXRlKDAs dGNwX2RvbnRyb3V0ZSk7Ci0jZW5kaWYgLyogU09fRE9OVFJPVVRFICovCi0jaWZkZWYgU09fU05E QlVGCi0gICAgICAgIHNlbmRidWYoMCx0Y3Bfc2VuZGJ1Zik7Ci0jZW5kaWYgLyogU09fU05EQlVG ICovCi0jaWZkZWYgU09fUkNWQlVGCi0gICAgICAgIHJlY3ZidWYoMCx0Y3BfcmVjdmJ1Zik7Ci0j ZW5kaWYgLyogU09fUkNWQlVGICovCi0jZW5kaWYgLyogU09MX1NPQ0tFVCAqLwotI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogTk9UQ1BPUFRTICovCi0KLSNpZmRlZiBDS19TU0wK LSAgICAgICAgaWYgKGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSkgewotICAgICAgICAgICAgaWYg KCFzc2xfdG5faW5pdChTU0xfU0VSVkVSKSkgewotICAgICAgICAgICAgICAgIGlmIChiaW9fZXJy ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCJkb19z c2xlYXlfaW5pdCgpIGZhaWxlZFxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgRVJSX3ByaW50 X2Vycm9ycyhiaW9fZXJyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgICAgICBmZmx1c2goc3RkZXJyKTsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsImRvX3NzbGVheV9pbml0KCkgZmFpbGVkXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICBF UlJfcHJpbnRfZXJyb3JzX2ZwKHN0ZGVycik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIHN3aXRjaCAodHRucHJvdG8pIHsKLQkJICBjYXNlIE5QX1NTTDoKLQkJICBjYXNlIE5Q X1RMUzoKLSAgCQkgIGNhc2UgTlBfU1NMX1JBVzoKLQkJICBjYXNlIE5QX1RMU19SQVc6Ci0JCSAg Y2FzZSBOUF9TU0xfVEVMTkVUOgotCQkgIGNhc2UgTlBfVExTX1RFTE5FVDoKLSAgICAgICAgICAg ICAgICAgICAgZG9leGl0KEJBRF9FWElULDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAvKiBvdGhlcndpc2Ugd2Ugd2lsbCBjb250aW51ZSB0byBhY2NlcHQgdGhlIGNvbm5l Y3Rpb24gICAqLwotICAgICAgICAgICAgICAgIC8qIHdpdGhvdXQgU1NMIG9yIFRMUyBzdXBwb3J0 IHVubGVzcyByZXF1aXJlZC4gKi8KLSAgICAgICAgICAgICAgICBpZiAoIFRFTE9QVF9ERUZfU19N RV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9IFROX05HX01VICkKLSAgICAgICAgICAgICAgICAg ICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19SRjsKLSAg ICAgICAgICAgICAgICBpZiAoIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykg IT0gVE5fTkdfTVUgKQotICAgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRF TE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgaWYgKCBURUxPUFRf REVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSAhPSBUTl9OR19NVSApCi0gICAgICAgICAg ICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdf UkY7Ci0gICAgICAgICAgICAgICAgaWYgKCBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9TVEFS VF9UTFMpICE9IFROX05HX01VICkKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1Vf TU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOwotICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICBpZiAoIGNrX3NzbF9pbmNvbWluZygwKSA8IDAgKSB7Ci0gICAgICAg ICAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lmZGVmIFROQ09E RQotICAgICAgICB0bl9pbmkoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IFRlbG5l dCBuZWdvdGlhdGlvbiBub3cgKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwibWFpbiBhcmdjIGFmdGVyIHByZXNjYW4oKSIsIiIs YXJnYyk7Ci0KLSAgICAvKiBOb3cgcHJvY2VzcyBhbnkgcmVsZXZhbnQgZW52aXJvbm1lbnQgdmFy aWFibGVzICovCi0KLSNpZm5kZWYgTk9ESUFMCi0gICAgZ2V0ZGlhbGVudigpOyAgICAgICAgICAg ICAgICAgICAgICAgLyogRGlhbGluZyAqLwotI2lmZGVmIE5FVENPTk4KLSAgICBuZGluaXQoKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIG5ldHdvcmsgZGlyZWN0b3J5 IGluZm8gKi8KLSAgICBnZXRuZXRlbnYoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3 b3JrIGRpcmVjdG9yaWVzICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2VuZGlmIC8qIE5PRElB TCAqLwotCi0jaWZuZGVmIE5PWEZFUgotI2lmZGVmIENLX0ZBU1QKLSAgICBkb2Zhc3QoKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBCeSBub3cgRkFTVCBkZWZhdWx0cyBzaG91bGQgYmUg T0sgKi8KLSNlbmRpZiAvKiBDS19GQVNUICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5k ZWYgTk9DTURMCi0gICAgaWtzbG9naW4oKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElL U0QgTG9naW4gYW5kIG90aGVyIHN0dWZmICovCi0jaWZkZWYgSUtTRAotI2lmZGVmIE5UCi0gICAg aWYgKCBpbnNlcnZlciApCi0gICAgICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogTlQgKi8KLSNl bmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogTk9DTURMICovCi0KLSAgICBpZiAoaG93Y2FsbGVk ID09IElfQU1fU1NIU1VCKSB7Ci0gICAgICAgIHJlbGlhYmxlID0gMTsJCQkvKiBXZSBzYXkgdGhl IGNvbm5lY3Rpb24gaXMgcmVsaWFibGUgKi8KLSAgICAgICAgeHJlbGlhYmxlID0gMTsJCQkvKiBB bmQgdGhhdCB3ZSBzYWlkIGl0IHdhcyAqLwotICAgICAgICBzZXRyZWxpYWJsZSA9IDE7CQkvKiBB bmQgcHJldGVuZCB0aGUgInVzZXIiIGRpZCB0b28gKi8KLSAgICAgICAgeGZpbmlzaCA9IDE7CQkJ LyogRm9yIFJFTU9URSBIRUxQIHJlc3BvbnNlICovCi0gICAgICAgIG1kbXR5cCA9IDA7CQkJLyog Rm9yIHR0b3BlbigpICovCi0gICAgICAgIGNrc3RybmNweSh0dG5hbWUsIjAiLFRUTkFNTEVOKzEp OyAgLyogVXNlIGZpbGUgZGVzY3JpcHRvciAwICovCi0gICAgICAgIGxvY2FsID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQW5kIGZvcmNlIHJlbW90ZSBtb2RlICovCi0gICAgICAgIHR0 b3Blbih0dG5hbWUsJmxvY2FsLG1kbXR5cCwwKTsgLyogT3BlbiB0aGUgImNvbm5lY3Rpb24iICov Ci0gICAgICAgIHNzdGF0ZSA9ICd4JzsJCQkvKiBJbml0aWFsIHN0YXRlIGlzIFNlcnZlciAqLwot ICAgICAgICBwcm90bygpOwkJCS8qIEVudGVyIHByb3RvY29sICovCi0gICAgICAgIGRvZXhpdChH T09EX0VYSVQseGl0c3RhKTsJLyogRXhpdCB3aGVuIGRvbmUgKi8KLSAgICB9Ci0gICAgZGVidWco RjExMSwiaG93Y2FsbGVkIixteW5hbWUsaG93Y2FsbGVkKTsKLQotI2lmZGVmIE5PQ0NUUkFQCi0g ICAgZG90YWtlaW5pKDApOwotI2Vsc2UgLyogTk9DQ1RSQVAgKi8KLSAgICBkZWJ1ZyhGMTAwLCJt YWluIGFib3V0IHRvIGNjX2V4ZWN1dGUiLCIiLDApOwotICAgIHNldGludCgpOwotICAgIGNjX2V4 ZWN1dGUoIGNramFkZHIoY21qYnVmKSwgZG90YWtlaW5pLCBmYWlsdGFrZWluaSApOwotI2VuZGlm IC8qIE5PQ0NUUkFQICovCi0KLSAgICBkZWJ1ZyhGMTExLCJtYWluIDIgY2ZpbGVmIixjbWRmaWws Y2ZpbGVmKTsKLSAgICBpZiAoY21kZmlsWzBdKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJZiB3 ZSBnb3Qgb25lIChzZWUgcHJlc2NhbigpKS4uLiAqLwotI2lmZGVmIE5PQ0NUUkFQCi0gICAgICAg IGRvY21kZmlsZSgwKTsgICAgICAgICAgICAgICAgICAgLyogZXhlY3V0ZSBpdC4gKi8KLSNlbHNl IC8qIE5PQ0NUUkFQICovCi0gICAgICAgIHNldGludCgpOwotICAgICAgICBjY19leGVjdXRlKCBj a2phZGRyKGNtamJ1ZiksIGRvY21kZmlsZSwgZmFpbGNtZGZpbGUgKTsKLSNlbmRpZiAvKiBOT0ND VFJBUCAqLwotICAgIH0KLSNpZm5kZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQcmVzZXJ2ZSBuYW1lIHNvIHdlIGNhbiBkZWxldGUgaXQgKi8KLSAgICAqY21kZmlsID0gJ1ww JzsgICAgICAgICAgICAgICAgICAgICAvKiBEb25lLCBudWxsaWZ5IHRoZSBmaWxlIG5hbWUgKi8K LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZuZGVmIE5PQ01ETAot LyogTG9vayBmb3IgYSBVTklYLXN0eWxlIGNvbW1hbmQgbGluZS4uLiAqLwotCi0gICAgd2hhdCA9 IFdfTk9USElORzsKLQotICAgIGRlYnVnKEYxMDEsIm1haW4gYXJnYyIsIiIsYXJnYyk7Ci0jaWZu ZGVmIE5PSEVMUAotICAgIGluaW9wdGhscCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElu aXRpYWxpemUgY21kbGluZSBhcmcgaGVscCAqLwotI2VuZGlmIC8qIE5PSEVMUCAqLwotICAgIGlm ICgKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICFjZmlsZWYgJiYKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgIGFyZ2MgPiAxKSB7ICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBs aW5lIGFyZ3VtZW50cz8gKi8KLSAgICAgICAgc3N0YXRlID0gKENIQVIpIGNtZGxpbigpOyAgICAg ICAvKiBZZXMsIHBhcnNlLiAqLwotI2lmZGVmIE5FVENPTk4KLSNpZm5kZWYgTk9VUkwKLSAgICAg ICAgaWYgKGhhdmV1cmwpIHsgICAgICAgICAgICAgICAgICAvKiBXYXMgYSBVUkwgZ2l2ZW4/ICov Ci0gICAgICAgICAgICBkb3VybCgpOyAgICAgICAgICAgICAgICAgICAgLyogaWYgc28sIGRvIGl0 LiAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9VUkwgKi8KLSNlbmRpZiAvKiBORVRDT05OICov Ci0jaWZuZGVmIE5PWEZFUgotICAgICAgICB6c3RhdGUgPSBzc3RhdGU7ICAgICAgICAgICAgICAg IC8qIFJlbWVtYmVyIHNzdGF0ZSBhcm91bmQgcHJvdG9jb2wgKi8KLSAgICAgICAgZGVidWcoRjEw MSwibWFpbiB6c3RhdGUiLCIiLHpzdGF0ZSk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5k ZWYgTk9MT0NBTAotICAgICAgICBpZiAoY2ZsZykgeyAgICAgICAgICAgICAgICAgICAgIC8qIENv bm5lY3QgZmlyc3QgaWYgcmVxdWVzdGVkICovCi0gICAgICAgICAgICBkb2NvbmVjdCgwLDApOwot ICAgICAgICAgICAgaWYgKHR0Y2hrKCkgPCAwKQotICAgICAgICAgICAgICBkb2xvZ2VuZCgpOwot ICAgICAgICAgICAgY2ZsZyA9IDA7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0K LSNpZm5kZWYgTk9YRkVSCi0gICAgICAgIGlmIChzc3RhdGUpIHsKLSNpZm5kZWYgTk9MT0NBTAot ICAgICAgICAgICAgaWYgKGRpc3BsYSkgY29uY2IoKGNoYXIpZXNjYXBlKTsgLyogKGZvciBjb25z b2xlICJpbnRlcnJ1cHRzIikgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgTk9DQ1RS QVAKLSAgICAgICAgICAgIGRvY21kbGluZSgxKTsKLSNlbHNlIC8qIE5PQ0NUUkFQICovCi0gICAg ICAgICAgICBzZXRpbnQoKTsKLSAgICAgICAgICAgIGNjX2V4ZWN1dGUoIGNramFkZHIoY21qYnVm KSwgZG9jbWRsaW5lLCBmYWlsY21kbGluZSApOwotI2VuZGlmIC8qIE5PQ0NUUkFQICovCi0gICAg ICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0lDUAotLyoKLSAgSWYgYSBj b21tYW5kLWxpbmUgYWN0aW9uIGFyZ3VtZW50IHdhcyBnaXZlbiBhbmQgLVMgKCJzdGF5Iikgd2Fz IG5vdCBnaXZlbiwKLSAgZXhpdCBub3cuCi0qLwotICAgICAgICBpZiAoKGNmbGcgfHwgY25mbGcg fHwgenN0YXRlKSAmJiAhc3RheWZsZykKLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgICAgICAgIGRv ZXhpdChHT09EX0VYSVQseGl0c3RhKTsgICAgIC8qIEV4aXQgd2l0aCBnb29kIHN0YXR1cyAqLwot Ci0jaWZuZGVmIE5PTE9DQUwKLSNpZm5kZWYgTk9JQ1AKLSAgICAgICAgaWYgKGxvY2FsKSB7Ci0j aWZkZWYgTkVUQ09OTgotICAgICAgICAgICAgaWYgKChjZmxnIHx8IGNuZmxnKSAmJiB0bl9leGl0 ICYmIHR0Y2hrKCkgPCAwKQotICAgICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7 IC8qIEV4aXQgd2l0aCBnb29kIHN0YXR1cyAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSAgICAg ICAgICAgIGlmIChleGl0b25jbG9zZSAmJiAhbmV0d29yayAmJgotICAgICAgICAgICAgICAgIChj YXJyaWVyICE9IENBUl9PRkYgJiYgKHR0Z21kbSgpICYgQk1fRENEKSA9PSAwKSkKLSAgICAgICAg ICAgICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOyAvKiBFeGl0IHdpdGggZ29vZCBzdGF0dXMg Ki8KLSAgICAgICAgICAgIGlmIChleGl0b25jbG9zZSAmJiBuZXR3b3JrICYmIHR0Y2hrKCkgPCAw KQotICAgICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7IC8qIEV4aXQgd2l0aCBn b29kIHN0YXR1cyAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSNlbmRpZiAvKiBO T0xPQ0FMICovCi0gICAgfQotI2VuZGlmIC8qIE5PQ01ETCAqLwotCi0jaWZkZWYgTk9JQ1AgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXIg Ki8KLSNpZm5kZWYgTk9DTURMCi0gICAgZWxzZSB7Ci0KLSAgICAgICAgLyogQ29tbWFuZC1saW5l LW9ubHkgdmVyc2lvbiAqLwotICAgICAgICBmYXRhbCgiP05vIGNvbW1hbmQtbGluZSBvcHRpb25z IGdpdmVuIC0gdHlwZSAna2VybWl0IC1oJyBmb3IgaGVscCIpOwotICAgIH0KLSNlbHNlICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWl0aGVyIG9uZSEgKi8KLSAgICAgICAg c3N0YXRlID0gJ3gnOwotICAgICAgICBqdXN0b25lID0gMDsKLSAgICAgICAgcHJvdG8oKTsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTbyBnbyBpbnRvIHNlcnZlciBtb2RlICovCi0gICAgICAg IGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsgICAgICAgLyogZXhpdCB3aXRoIGdvb2Qgc3RhdHVz ICovCi0KLSNlbmRpZiAvKiBOT0NNREwgKi8KLSNlbHNlIC8qIG5vdCBOT0lDUCAqLwotLyoKLSAg SWYgbm8gYWN0aW9uIHJlcXVlc3RlZCBvbiBjb21tYW5kIGxpbmUsIG9yIGlmIC1TICgic3RheSIp IHdhcyBpbmNsdWRlZCwKLSAgZW50ZXIgdGhlIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyLgot Ki8KLSAgICBpZiAoIWNsY21kcykKLSAgICAgIGhlcmFsZCgpOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBEaXNwbGF5IHByb2dyYW0gaGVyYWxkLiAqLwotCi0jaWZkZWYgTk9DQ1RSQVAKLSAg ICBkZWJ1ZyhGMTAwLCJtYWluIE5PQ0NUUkFQIHNldHRpbmcgaW50ZXJydXB0IHRyYXAiLCIiLDAp OwotICAgIHNldGludCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCB1cCBjb21t YW5kIGludGVycnVwdCB0cmFwcyAqLwotICAgIGRvaWNwKE5VTEwpOwotI2Vsc2UgLyogTk9DQ1RS QVAgKi8KLSAgICB3aGlsZSAoMSkgewotICAgICAgICBkZWJ1ZyhGMTAwLCJtYWluIHNldHRpbmcg aW50ZXJydXB0IHRyYXAiLCIiLDApOwotICAgICAgICBzZXRpbnQoKTsgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNldCB1cCBjb21tYW5kIGludGVycnVwdCB0cmFwcyAqLwotICAgICAgICBpZiAo IWNjX2V4ZWN1dGUoY2tqYWRkcihjbWpidWYpLCBkb2ljcCwgZmFpbGljcCkpCi0gICAgICAgICAg YnJlYWs7Ci0gICAgfQotI2VuZGlmIC8qIE5PQ0NUUkFQICovCi0jZW5kaWYgLyogTk9JQ1AgKi8K LSNpZm5kZWYgTUFJTklTVk9JRAotICAgIHJldHVybigxKTsKLSNlbmRpZiAvKiBNQUlOSVNWT0lE ICovCi19Ci0KLSNpZmRlZiBEWU5BTUlDCi0vKiBBbGxvY2F0ZSBmaWxlIGkvbyBidWZmZXJzICov Ci0KLWNoYXIgKnppbmJ1ZmZlciA9IE5VTEwsICp6b3V0YnVmZmVyID0gTlVMTDsKLQotaW50Ci1n ZXRpb2JzKCkgewotICAgIHppbmJ1ZmZlciA9IChjaGFyICopbWFsbG9jKElOQlVGU0laRSk7Ci0g ICAgaWYgKCF6aW5idWZmZXIpIHJldHVybigtMSk7Ci0gICAgem91dGJ1ZmZlciA9IChjaGFyICop bWFsbG9jKHpvYnVmc2l6ZSk7Ci0gICAgZGVidWcoRjEwMSwiem91dGJ1ZmZlciBtYWxsb2MiLCIi LHpvYnVmc2l6ZSk7Ci0gICAgaWYgKCF6b3V0YnVmZmVyKSByZXR1cm4oLTEpOwotICAgIGRlYnVn KEYxMDAsImdldGlvYnMgb2siLCIiLDApOwotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBE WU5BTUlDICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja2NtZGIuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tj bWRiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNWNlYmMuLjAwMDAwMDAKLS0t IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NtZGIuYworKysgL2Rl di9udWxsCkBAIC0xLDM4NyArMCwwIEBACi0vKgotICBDIEsgQyBNIEQgQiAuIEMgIC0tICBtYWxs b2MgZGVidWdnZXIuCi0qLwotCi0vKgotICBBdXRob3I6IEhvd2llIEtheWUsIENvbHVtYmlhIFVu aXZlcnNpdHkgQ2VudGVyIGZvciBDb21wdXRpbmcgQWN0aXZpdGllcy4KLQotICBDb3B5cmlnaHQg KEMpIDE5ODUsIDE5OTksCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0 aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBD LUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGluIHRo ZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotKi8KLS8q IFVzZSB0aGUgcmVhbCBvbmVzIGluIHRoaXMgbW9kdWxlISAqLwotI2lmZGVmIG1hbGxvYwotI3Vu ZGVmIG1hbGxvYwotI2VuZGlmIC8qIG1hbGxvYyAqLwotI2lmZGVmIGNhbGxvYwotI3VuZGVmIGNh bGxvYwotI2VuZGlmIC8qIGNhbGxvYyAqLwotI2lmZGVmIHJlYWxsb2MKLSN1bmRlZiByZWFsbG9j Ci0jZW5kaWYgLyogcmVhbGxvYyAqLwotI2lmZGVmIGZyZWUKLSN1bmRlZiBmcmVlCi0jZW5kaWYg LyogZnJlZSAqLwotCi0jaW5jbHVkZSAiY2tjc3ltLmgiCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNp bmNsdWRlICJja2NkZWIuaCIKLQotI2lmZGVmIENPSEVSRU5UCi1fUFJPVE9UWVAgKCBGSUxFICog ZmRvcGVuLCAoaW50LCBjaGFyICopICk7Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotLyoKLSAg bWVtZGVidWc6Ci0gIHZhcmlhYmxlIHRvIGNvbnRyb2wgbWVtb3J5IGRlYnVnZ2luZy4KLSAgaWYg bWVtZGVidWcgPT0gIDEsIHRoZW4gYWN0aW9uIGlzIGFsd2F5cyB0YWtlbi4KLSAgaWYgbWVtZGVi dWcgPT0gIDAsIHRoZW4gbm8gYWN0aW9uIGlzIHRha2VuLgotICBpZiBtZW1kZWJ1ZyA9PSAtMSwg dGhlbiB0aGUgdXNlciBpcyBhc2tlZCAod29ya3Mgd2VsbCB3aXRoIGdkYikuCi0qLwotaW50IG1l bWRlYnVnID0gLTE7Ci1pbnQgZGlzYWJsZWQgPSAwOwotaW50IGluaXRlZCA9IDA7Ci0vKgotICBU byB1c2UgdGhpcyBwYWNrYWdlLCBjb21waWxlIHlvdXIgcHJvZ3JhbSB3aXRoOgotICAtRG1hbGxv Yz1kbWFsbG9jIC1EZnJlZT1kZnJlZSA9RGNhbGxvYz1kY2FsbG9jIC4uLiAtRE1ERUJVRwotICBh bmQgdGhlbiBsaW5rIGl0IHdpdGggY2tjbWRiLmMuCi0qLwotI2lmZGVmIE1ERUJVRwotCi0jaWZu ZGVmIE1fU0laRV9UCi0jaWZkZWYgTkVYVAotI2RlZmluZSBNX1NJWkVfVCBzaXplX3QKLSNlbHNl Ci0jaWZkZWYgU1VOT1M0MQotI2RlZmluZSBNX1NJWkVfVCB1bnNpZ25lZAotI2Vsc2UKLSNkZWZp bmUgTV9TSVpFX1QgaW50Ci0jZW5kaWYgLyogU1VOT1M0MSAqLwotI2VuZGlmIC8qIE5FWFQgKi8K LSNlbmRpZiAvKiBNX1NJWkVfVCAqLwotCi0jaWZkZWYgQ0tfQU5TSUMKLV9QUk9UT1RZUCggdm9p ZCBmcmVlLCAodm9pZCAqKSApOwotX1BST1RPVFlQKCB2b2lkICogbWFsbG9jLCAoc2l6ZV90KSAp OwotX1BST1RPVFlQKCB2b2lkICogcmVhbGxvYywgKHZvaWQgKiwgc2l6ZV90KSApOwotI2Vsc2UK LV9QUk9UT1RZUCggVk9JRCBmcmVlLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBjaGFyICogbWFs bG9jLCAoTV9TSVpFX1QpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiByZWFsbG9jLCAoY2hhciAqLCBN X1NJWkVfVCkgKTsKLSNlbmRpZiAvKiBORVhUICovCi0KLV9QUk9UT1RZUCggVk9JRCBtX2luc2Vy dCwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IG1fZGVsZXRlLCAoY2hhciAqKSApOwotCi1f UFJPVE9UWVAoIGNoYXIgKiBkbWFsbG9jLCAoaW50KSApOwotX1BST1RPVFlQKCBjaGFyICogZGNh bGxvYywgKGludCwgaW50KSApOwotX1BST1RPVFlQKCBjaGFyICogZHJlYWxsb2MsIChjaGFyICos IGludCkgKTsKLQotX1BST1RPVFlQKCBjaGFyICpzZXRfcmFuZ2VfY2hlY2ssIChjaGFyICosIGlu dCkgKTsKLV9QUk9UT1RZUCggY2hhciAqY2hlY2tfcmFuZ2UsIChjaGFyICopICk7Ci1fUFJPVE9U WVAoIHN0YXRpYyBjaGFyICptYXliZV9jaGVja19yYW5nZSwgKGNoYXIgKikgKTsKLQotX1BST1RP VFlQKCBzdGF0aWMgVk9JRCBtYXliZV9xdWl0LCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBzdGF0 aWMgaW50IGFzaywgKGNoYXIgKikgKTsKLQotI2lmbmRlZiBtaW4KLSNkZWZpbmUgbWluKHgseSkg KCh4KSA8ICh5KSA/ICh4KSA6ICh5KSkKLSNlbmRpZiAvKiBtaW4gKi8KLSNkZWZpbmUgUkFOR0Ug IkFCQ0RFRkdISUpLTE1OT1AiCi0jZGVmaW5lIElOVFNJWkUgIHNpemVvZihpbnQpCi0jZGVmaW5l IExPTkdTSVpFIHNpemVvZihsb25nKQotI2RlZmluZSBSU0laRSAgICBzaXplb2YoUkFOR0UpCi0j ZGVmaW5lIFJGUk9OVCAgIG1pbigoUlNJWkUvMiksTE9OR1NJWkUpCi0jZGVmaW5lIFJCQUNLICAg IG1pbigoUlNJWkUtUkZST05UKSxMT05HU0laRSkKLQotY2hhciAqCi1kbWFsbG9jKHNpemUpIGlu dCBzaXplOyB7Ci0gICAgY2hhciAqY3A7Ci0KLSAgICBjcCA9IG1hbGxvYyhzaXplICsgUlNJWkUg KyBJTlRTSVpFKTsKLSAgICBpZiAoY3ApIHsKLSAgICAgICAgY3AgPSBzZXRfcmFuZ2VfY2hlY2so Y3AsIHNpemUpOwotICAgICAgICBtX2luc2VydChjcCk7Ci0gICAgfQotICAgIHJldHVybihjcCk7 Ci19Ci0KLWNoYXIgKgotZGNhbGxvYyhuZWxlbSwgZWxzaXplKSBpbnQgbmVsZW0sIGVsc2l6ZTsg ewotICAgIGNoYXIgKmNwOwotCi0gICAgY3AgPSBkbWFsbG9jKG5lbGVtICogZWxzaXplKTsKLSAg ICBpZiAoY3ApCi0gICAgICAgIG1lbXNldChjcCwgMCwgbmVsZW0gKiBlbHNpemUpOwotICAgIHJl dHVybihjcCk7Ci19Ci0KLWNoYXIgKgotZHJlYWxsb2MoYnAsc2l6ZSkgY2hhciAqYnA7IGludCBz aXplOyB7Ci0gICAgY2hhciAqY3A7Ci0KLSAgICBpZiAoYnAgPT0gTlVMTCkgewotICAgICAgICBt YXliZV9xdWl0KCJGcmVlaW5nIE5VTEwgcG9pbnRlciIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg IG1fZGVsZXRlKGJwKTsKLSAgICAgICAgY3AgPSBjaGVja19yYW5nZShicCk7Ci0gICAgfQotICAg IGNwID0gcmVhbGxvYyhjcCwgc2l6ZSArIFJTSVpFICsgSU5UU0laRSk7Ci0gICAgaWYgKGNwKSB7 Ci0gICAgICAgIGNwID0gc2V0X3JhbmdlX2NoZWNrKGNwLCBzaXplKTsKLSAgICAgICAgbV9pbnNl cnQoY3ApOwotICAgIH0KLSAgICByZXR1cm4oY3ApOwotfQotCi1WT0lECi1kZnJlZShjcCkgY2hh ciAqY3A7IHsKLSAgICBpZiAoY3AgPT0gTlVMTCkKLSAgICAgICAgbWF5YmVfcXVpdCgiRnJlZWlu ZyBOVUxMIHBvaW50ZXIiKTsKLSAgICBlbHNlIHsKLSAgICAgICAgc3dpdGNoKG1fZGVsZXRlKGNw KSkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBjcCA9IG1heWJlX2NoZWNrX3Jhbmdl KGNwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBj cCA9IGNoZWNrX3JhbmdlKGNwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6 Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNpZm5kZWYgQ0tfQU5TSUMK LSAgICByZXR1cm4oZnJlZShjcCkpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi19Ci0KLWNoYXIg Kgotc2V0X3JhbmdlX2NoZWNrKGNwLHNpemUpIGNoYXIgKmNwOyBpbnQgc2l6ZTsgewotICAgIHJl Z2lzdGVyIGludCBpOwotICAgIGludCB0bXAgPSBzaXplOwotCi0gICAgZm9yKGkgPSAwOyBpIDwg SU5UU0laRTsgaSsrKSB7ICAgICAgLyogc2V0IHRoZSBzaXplIGluIHRoZSBzdHJpbmcgKi8KLSAg ICAgICAgY3BbaV0gPSB0bXAgJiAweGZmOwotICAgICAgICB0bXAgPj49IDg7Ci0gICAgfQotICAg IGNwICs9IElOVFNJWkU7ICAgICAgICAgICAgICAgICAgICAgIC8qIHNraXAgdGhlIHNpemUgKi8K LQotICAgIGZvcihpID0gMDsgaSA8IFJGUk9OVDsgaSsrKSAgICAgICAgIC8qIHNldCB0aGUgZnJv bnQgb2YgdGhlIHJhbmdlIGNoZWNrICovCi0gICAgICAgIGNwW2ldID0gUkFOR0VbaV07ICAgICAg ICAgICAgICAgLyogc3RyaW5nICovCi0KLSAgICBjcCArPSBSRlJPTlQ7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBza2lwIHRoZSBmcm9udCByYW5nZSBjaGVjayAqLwotCi0gICAgZm9yKGkgPSAw OyBpIDwgUkJBQ0s7IGkrKykgICAgICAgICAgLyogc2V0IHRoZSBiYWNrIG9kZiB0aGUgcmFuZ2Ug Y2hlY2sgKi8KLSAgICAgICAgY3BbaStzaXplXSA9IFJBTkdFW2krUkZST05UXTsKLQotICAgIHJl dHVybihjcCk7Ci19Ci0KLS8qCi0gIFB1dCBjYWxscyB0byB0aGlzIHJvdXRpbmUgaW4geW91ciBj b2RlIGFueSBwbGFjZSB3aGVyZSB5b3Ugd2FudCB0bwotICBjaGVjayB3aGV0aGVyIHlvdSd2ZSBj b3BpZWQgdG9vIG1hbnkgY2hhcmFjdGVycyBpbnRvIGEgbWFsbG9jJ2Qgc3BhY2UuCi0qLwotY2hh ciAqCi1jaGVja19yYW5nZShjcCkgY2hhciAqY3A7IHsKLSAgICByZWdpc3RlciBjaGFyICpicCA9 IGNwIC0gUkZST05UIC0gSU5UU0laRTsKLSAgICBjaGFyICp4cCA9IGJwOwotICAgIHJlZ2lzdGVy IGludCBpOwotICAgIGludCBzaXplID0gMDsKLQotICAgIGZvcihpID0gMCA7IGkgPCBJTlRTSVpF OyBpKyspIHsgICAgIC8qIGdldCB0aGUgc2l6ZSBvdXQgb2YgdGhlIHN0cmluZyAqLwotICAgICAg ICBzaXplIDw8PSA4OwotICAgICAgICBzaXplIHw9IGJwW0lOVFNJWkUtaS0xXSAmIDB4ZmY7Ci0g ICAgfQotICAgIGJwICs9IElOVFNJWkU7Ci0KLSAgICBmb3IoaSA9IDA7IGkgPCBSRlJPTlQ7IGkr KykgICAgICAgICAvKiBjaGVjayBmcm9udCByYW5nZSBjaGVjayAqLwotICAgICAgICBpZiAoYnBb aV0gIT0gUkFOR0VbaV0pIHsKLSAgICAgICAgICAgIG1heWJlX3F1aXQoImxlZnRzaWRlIG1hbGxv YyBidWZmZXIgb3ZlcnJ1biIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICBi cCArPSBSRlJPTlQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBza2lwIGZyb250IHJhbmdlIGNo ZWNrICovCi0KLSAgICBmb3IoaSA9IDA7IGkgPCBSQkFDSzsgaSsrKSAgICAgICAgICAvKiBjaGVj ayBiYWNrIHJhbmdlIGNoZWNrICovCi0gICAgICAgIGlmIChicFtpK3NpemVdICE9IFJBTkdFW2kr UkZST05UXSkgewotICAgICAgICAgICAgbWF5YmVfcXVpdCgicmlnaHRzaWRlIG1hbGxvYyBidWZm ZXIgb3ZlcnJ1biIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICByZXR1cm4o eHApOwotfQotCi1zdGF0aWMgY2hhciAqCi1tYXliZV9jaGVja19yYW5nZShjcCkgY2hhciAqY3A7 IHsKLSAgICByZWdpc3RlciBjaGFyICpicCA9IGNwIC0gUkZST05UIC0gSU5UU0laRTsKLSAgICBj aGFyICp4cCA9IGJwOwotICAgIHJlZ2lzdGVyIGludCBpOwotICAgIGludCBzaXplID0gMDsKLQot ICAgIGZvcihpID0gMCA7IGkgPCBJTlRTSVpFOyBpKyspIHsgICAgIC8qIGdldCB0aGUgc2l6ZSBv dXQgb2YgdGhlIHN0cmluZyAqLwotICAgICAgICBzaXplIDw8PSA4OwotICAgICAgICBzaXplIHw9 IGJwW0lOVFNJWkUtaS0xXSAmIDB4ZmY7Ci0gICAgfQotICAgIGJwICs9IElOVFNJWkU7Ci0KLSAg ICBmb3IoaSA9IDA7IGkgPCBSRlJPTlQ7IGkrKykgICAgICAgICAvKiBjaGVjayBmcm9udCByYW5n ZSBjaGVjayAqLwotICAgICAgICBpZiAoYnBbaV0gIT0gUkFOR0VbaV0pIHsKLSAgICAgICAgICAg IHJldHVybihjcCk7Ci0gICAgICAgIH0KLSAgICBicCArPSBSRlJPTlQ7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBza2lwIGZyb250IHJhbmdlIGNoZWNrICovCi0KLSAgICBmb3IoaSA9IDA7IGkg PCBSQkFDSzsgaSsrKSAgICAgICAgICAvKiBjaGVjayBiYWNrIHJhbmdlIGNoZWNrICovCi0gICAg ICAgIGlmIChicFtpK3NpemVdICE9IFJBTkdFW2krUkZST05UXSkgewotICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsInJpZ2h0c2lkZSBtYWxsb2MgYnVmZmVyIG92ZXJydW5cbiIpOwotICAgICAg ICAgICAgYWJvcnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgcmV0dXJu KHhwKTsKLX0KLQotI2RlZmluZSBCVUNLRVRTIDEwMDAwCi1jaGFyICptX3VzZWRbQlVDS0VUU107 Ci1jaGFyICptX3VzZWQyW0JVQ0tFVFNdOwotCi1WT0lECi1tX2luc2VydChjcCkgcmVnaXN0ZXIg Y2hhciAqY3A7IHsKLSAgICByZWdpc3RlciBpbnQgaTsKLQotICAgIGlmIChkaXNhYmxlZCkKLSAg ICAgICAgcmV0dXJuOwotCi0gICAgZm9yKGkgPSAwOyBpIDwgQlVDS0VUUzsgaSsrKQotICAgICAg ICBpZiAobV91c2VkW2ldID09IDApIHsKLSAgICAgICAgICAgIG1fdXNlZFtpXSA9IGNwOwotICAg ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgZGlzYWJsZWQgKys7Ci19Ci0KLXN0YXRp YyBWT0lECi1tX2luc2VydDIoY3ApIHJlZ2lzdGVyIGNoYXIgKmNwOyB7Ci0gICAgcmVnaXN0ZXIg aW50IGk7Ci0KLSAgICBpZiAoZGlzYWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IoaSA9 IDA7IGkgPCBCVUNLRVRTOyBpKyspCi0gICAgICAgIGlmIChtX3VzZWQyW2ldID09IDApIHsKLSAg ICAgICAgICAgIG1fdXNlZDJbaV0gPSBjcDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg fQotICAgIGRpc2FibGVkICsrOwotfQotCi1pbnQKLW1fZGVsZXRlKGNwKSByZWdpc3RlciBjaGFy ICpjcDsgewotICAgIHJlZ2lzdGVyIGludCBpOwotCi0gICAgZm9yKGkgPSAwOyBpIDwgQlVDS0VU UzsgaSsrKQotICAgICAgICBpZiAobV91c2VkW2ldID09IGNwKSB7Ci0gICAgICAgICAgICBtX3Vz ZWRbaV0gPSAwOwotICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICB9Ci0gICAgZm9yKGkg PSAwOyBpIDwgQlVDS0VUUzsgaSsrKQotICAgICAgICBpZiAobV91c2VkMltpXSA9PSBjcCkgewot ICAgICAgICAgICAgbV91c2VkMltpXSA9IDA7Ci0gICAgICAgICAgICByZXR1cm4oMik7Ci0gICAg ICAgIH0KLSAgICBpZiAoZGlzYWJsZWQpCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIG1heWJl X3F1aXQoIkZyZWVpbmcgdW5tYWxsb2MnZWQgcG9pbnRlciIpOwotICAgIHJldHVybigwKTsKLX0K LQotVk9JRAotbV9pbml0KCkgewotICAgIHJlZ2lzdGVyIGludCBpOwotCi0gICAgaW5pdGVkID0g MTsKLSAgICBkaXNhYmxlZCA9IDA7Ci0jaWZkZWYgTkVYVAotICAgIG1hbGxvY19kZWJ1ZygyKzQr OCsxNik7Ci0jZW5kaWYgLyogTkVYVCAqLwotCi0gICAgZm9yKGkgPSAwOyBpIDwgQlVDS0VUUzsg aSsrKQotICAgICAgbV91c2VkW2ldID0gMDsKLX0KLQotVk9JRAotbV9kb25lKCkgewotICAgIHJl Z2lzdGVyIGludCBpLGo9MDsKLQotICAgIGlmIChkaXNhYmxlZCkKLSAgICAgICAgcmV0dXJuOwot ICAgIGZvcihpID0gMDsgaSA8IEJVQ0tFVFM7IGkrKykKLSAgICAgICAgaWYgKG1fdXNlZFtpXSAh PSAwKSB7Ci0gICAgICAgICAgICBpZiAobWVtZGVidWcpIHsKLSAgICAgICAgICAgICAgICBpZiAo aiA9PSAwKQotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwidW5mcmVlJ2VkIGJ1 ZmZlcnMsIGluZGljZXM6ICIpOwotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCIlZCwg IiwgaSk7Ci0gICAgICAgICAgICAgICAgaisrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g ICAgaWYgKGopCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCJcbiIpOwotICAgIGZvcihpID0gMDsg aSA8IEJVQ0tFVFM7IGkrKykKLSAgICAgICAgaWYgKG1fdXNlZDJbaV0gIT0gMCkgewotICAgICAg ICAgICAgaWYgKG1lbWRlYnVnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGogPT0gMCkKLSAgICAg ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsInVuZnJlZSdlZCByZWdpc3RlcmVkIGJ1ZmZl cnMsIGluZGljZXM6ICIpOwotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCIlZCwgIiwg aSk7Ci0gICAgICAgICAgICAgICAgaisrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg aWYgKGopCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCJcbiIpOwotICAgIGlmIChqKQotICAgICAg ICBtYXliZV9xdWl0KCJVbmZyZWUnZWQgbWFsbG9jIGJ1ZmZlcnMiKTsKLX0KLQotVk9JRAotbV9j aGVja3JhbmdlcygpIHsKLSAgICBpbnQgaTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgQlVDS0VU UzsgaSsrKQotICAgICAgICBpZiAobV91c2VkW2ldKQotICAgICAgICAgICAgY2hlY2tfcmFuZ2Uo bV91c2VkW2ldKTsKLX0KLQotc3RhdGljIFZPSUQKLW1heWJlX3F1aXQoc3RyKSBjaGFyICpzdHI7 IHsKLSAgICBkZWJ1ZyhGMTAwLCJtZGVidWcgbWF5YmVfcXVpdCIsIiIsMCk7Ci0gICAgaWYgKG1l bWRlYnVnID09IDApCi0gICAgICAgIHJldHVybjsKLSAgICBmcHJpbnRmKHN0ZGVyciwiJXNcbiIs c3RyKTsKLSAgICBpZiAobWVtZGVidWcgPT0gMSkKLSAgICAgICAgYWJvcnQoKTsKLSAgICBpZiAo bWVtZGVidWcgPT0gLTEpCi0gICAgICAgIGlmIChhc2soIlF1aXQ/ICIpKQotICAgICAgICAgICAg YWJvcnQoKTsKLX0KLQotc3RhdGljIGludAotYXNrKHN0cikgY2hhciAqc3RyOyB7Ci0gICAgY2hh ciBidWZbMTAwXTsKLSAgICBGSUxFICppbjsKLSAgICBpbnQgZmQ7Ci0KLSAgICBmZCA9IGR1cChm aWxlbm8oc3RkaW4pKTsKLSAgICBpbiA9IGZkb3BlbihmZCwgInIiKTsKLSAgICB3aGlsZSgxKSB7 Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLHN0cik7Ci0gICAgICAgIGZmbHVzaChzdGRlcnIpOwot ICAgICAgICBpZiAoZmdldHMoYnVmLCA5OSwgaW4pID09IE5VTEwpIC8qIEVPRj8gKi8KLSAgICAg ICAgICAgIHJldHVybigwKTsKLSAgICAgICAgaWYgKGJ1ZlswXSA9PSAnbicgfHwgYnVmWzBdID09 ICdOJykgewotICAgICAgICAgICAgZmNsb3NlKGluKTsKLSAgICAgICAgICAgIHJldHVybigwKTsK LSAgICAgICAgfQotICAgICAgICBpZiAoYnVmWzBdID09ICd5JyB8fCBidWZbMF0gPT0gJ1knKSB7 Ci0gICAgICAgICAgICBmY2xvc2UoaW4pOwotICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAg ICB9Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCJwbGVhc2UgYW5zd2VyIHkvbi5cbiIpOwotICAg IH0KLX0KLSNlbmRpZiAvKiBNREVCVUcgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY25ldC5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja2NuZXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJi MDFhNi4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAy L2NrY25ldC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0NDcgKzAsMCBAQAotY2hhciAqY2tuZXR2 ID0gIk5ldHdvcmsgc3VwcG9ydCwgOS4wLjI5NywgMTQgSnVsIDIwMTEiOwotCi0vKiAgQyBLIEMg TiBFIFQgIC0tICBOZXR3b3JrIHN1cHBvcnQgICovCi0KLS8qCi0gIENvcHlyaWdodCAoQykgMTk4 NSwgMjAxMSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5 IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0 IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21h aS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0qLwotCi0vKgotICBS RU1JTkRFUjogQW55IGNoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgdGhhdCBvdGhlciBtb2R1bGVz IGRlcGVuZCBtdXN0Ci0gIGFsc28gYmUgbWFkZSB0byBja2xuZXQuYyAoZm9yIFZPUykgdW50aWwg c3VjaCB0aW1lIGFzIGNrbG5ldC5jIGFuZCB0aGlzCi0gIG1vZHVsZSBhcmUgbWVyZ2VkIGJhY2sg dG9nZXRoZXIuCi0KLSAgTk9URSBUTyBDT05UUklCVVRPUlM6IFRoaXMgZmlsZSwgYW5kIGFsbCB0 aGUgb3RoZXIgc2hhcmVkIChja2MgYW5kIGNrdSkKLSAgQy1LZXJtaXQgc291cmNlIGZpbGVzLCBt dXN0IGJlIGNvbXBhdGlibGUgd2l0aCBDIHByZXByb2Nlc3NvcnMgdGhhdCBzdXBwb3J0Ci0gIG9u bHkgI2lmZGVmLCAjZWxzZSwgI2VuZGlmLCAjZGVmaW5lLCBhbmQgI3VuZGVmLiAgUGxlYXNlIGRv IG5vdCB1c2UgI2lmLAotICBsb2dpY2FsIG9wZXJhdG9ycywgb3Igb3RoZXIgcHJlcHJvY2Vzc29y IGZlYXR1cmVzIGluIHRoaXMgbW9kdWxlLiAgQWxzbywKLSAgZG9uJ3QgdXNlIGFueSBBTlNJIEMg Y29uc3RydWN0cyBleGNlcHQgd2l0aGluICNpZmRlZiBDS19BTlNJQy4uI2VuZGlmLgotCi0gIEF1 dGhvcnM6Ci0KLSAgRnJhbmsgZGEgQ3J1eiAoZmRjQGNvbHVtYmlhLmVkdSksCi0gICAgQ29sdW1i aWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5 LgotICBKZWZmcmV5IEUgQWx0bWFuIChqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tKSAtLSBQ cmltYXJ5IAotICAgIG1haW50YWluZXIvZGV2ZWxvcGVyIHNpbmNlIGFib3V0IDE5OTYuCi0gIG5l dG9wZW4oKSByb3V0aW5lIGZvciBUQ1AvSVAgb3JpZ2luYWxseSBieSBLZW4gWWFwLCBSb2NoZXN0 ZXIgVW5pdmVyc2l0eQotICAgIChrZW5AY3Mucm9jaGVzdGVyLmVkdSkgKG5vIGxvbmdlciBhdCB0 aGF0IGFkZHJlc3MpLgotICBNaXNzaW5nIHBpZWNlcyBmb3IgRXhjZWxhbiBzb2NrZXRzIGxpYnJh cnkgZnJvbSBXaWxsaWFtIEJhZGVyLgotICBUZWxuZXQgcHJvdG9jb2wgYnkgRnJhbmsgZGEgQ3J1 eiBhbmQgSmVmZnJleSBBbHRtYW4uCi0gIFJsb2dpbiBwcm90b2NvbCBieSBKZWZmcmV5IEUgQWx0 bWFuLgotICBTU0wgc3VwcG9ydCBhZGFwdGVkIGJ5IEplZmZyZXkgRSBBbHRtYW4gZnJvbSB3b3Jr IGRvbmUgYnkKLSAgICBUaW0gSHVkc29uIDx0amhAY3J5cHRvc29mdC5jb20+ICs2MSA3IDMyNzgx NTgxCi0gIFRMUyBzdXBwb3J0IGJ5IEplZmZyZXkgRSBBbHRtYW4uCi0gIEhUVFAgc3VwcG9ydCBi eSBKZWZmcmV5IEUgQWx0bWFuLgotICBUR1YgTXVsdGlOZXQgY29kZSBieSBGcmFuayBkYSBDcnV6 LgotICBNdWx0aU5ldCBjb2RlIGFkYXB0ZWQgdG8gV0lOL1RDUCBieSBSYXkgSHVudGVyIG9mIFRX Ry4KLSAgTXVsdGlOZXQgY29kZSBhZGFwdGVkIHRvIERFQyBUQ1AvSVAgYnkgTGVlIFRpYmJlcnQg b2YgREVDIGFuZCBGcmFuayBkYSBDcnV6LgotICBUQ1AvSVAgc3VwcG9ydCBhZGFwdGVkIHRvIElC TSBUQ1AvSVAgMS4yLjEsMi4wIGZvciBPUy8yIGJ5IEthaSBVd2UgUm9tbWVsLgotICBDTVUtT3Bl blZNUy9JUCBtb2RpZmljYXRpb25zIGJ5IE1pa2UgTydNYWxsZXksIERpZ2l0YWwgKERFQykuCi0g IFguMjUgc3VwcG9ydCBieSBNYXJjZWxsbyBGcnV0aWcsIENhdGhvbGljIFVuaXZlcnNpdHksCi0g ICAgUmlvIGRlIEphbmVpcm8sIEJyYXppbCAoZnJ1dGlnQHJucC5pbXBhLmJyKSB3aXRoIGZpeGVz IGZyb20KLSAgICBTdGVmYWFuIEVlY2tlbHMsIEV1cm9rb20sIEx1eGVtYm91cmcuCi0gICAgRGF2 aWQgTGFuZSBhZGRlZCBzdXBwb3J0IGZvciBTdHJhdHVzIFZPUyBYLjI1IDE5OTYuCi0gICAgU3Rl cGhlbiBSaWVobSBhZGRlZCBzdXBwb3J0IGZvciBJQk0gQUlYIFguMjUgaW4gQXByaWwgMTk5OC4K LSAgT3RoZXIgY29udHJpYnV0aW9ucyBhcyBpbmRpY2F0ZWQgaW4gdGhlIGNvZGUuCi0qLwotI2Rl ZmluZSBDS0NORVRfQwotI2luY2x1ZGUgImNrY3N5bS5oIgotI2luY2x1ZGUgImNrY2RlYi5oIgot I2luY2x1ZGUgImNrY2tlci5oIgotI2luY2x1ZGUgImNrY2FzYy5oIgotI2lmZGVmIEkzODZJWCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcyB0byBjb21lIGJlZm9yZSBja2NuZXQuaCBp biAqLwotI2luY2x1ZGUgPGVycm5vLmg+ICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgdmVy c2lvbiwgYnV0IGFmdGVyIGluIG90aGVycyAqLwotI2VuZGlmIC8qIEkzODZJWCAqLwotI2luY2x1 ZGUgImNrY25ldC5oIiAgICAgICAgICAgICAgICAgICAgIC8qIHdoaWNoIGluY2x1ZGVzIGNrY3Rl bC5oICovCi0jaWZkZWYgQ0tfU1NMCi0jaW5jbHVkZSAiY2tfc3NsLmgiCi0jZW5kaWYgLyogQ0tf U1NMICovCi0KLSNpZmRlZiBDS19ETlNfU1JWCi0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSNpbmNs dWRlIDx3c2hlbHBlci5oPgotI2Vsc2UgLyogTlQgKi8KLS8qICFFcnJvciBPUy8yIGRvZXMgbm90 IHN1cHBvcnQgRE5TIFNlcnZpY2UgUmVjb3Jkcy4gKi8KLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2Ug LyogT1MyICovCi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaWZkZWYgVVNFX05BTUVTRVJfQ09N UEFUCi0jaW5jbHVkZSA8YXJwYS9uYW1lc2VyX2NvbXBhdC5oPgotI2VuZGlmCS8qIFVTRV9OQU1F U0VSX0NPTVBBVCAqLwotCi0jaWZkZWYgTUlOSVgzCi0jaW5jbHVkZSA8bmV0L2dlbi9yZXNvbHYu aD4KLSNpbmNsdWRlIDxuZXQvZ2VuL25hbWVzZXIuaD4KLSNlbHNlCi0jaW5jbHVkZSA8YXJwYS9u YW1lc2VyLmg+Ci0jaW5jbHVkZSA8cmVzb2x2Lmg+Ci0jZW5kaWYgLyogTUlOSVggMyAqLwotCi0j aWZuZGVmIFBTMkFJWDEwCi0jaWZuZGVmIEJTRDQKLSNpZm5kZWYgSTM4NklYCi0jaWZuZGVmIFJU QUlYCi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNlbmRpZiAvKiBSVEFJWCAqLwotI2VuZGlmIC8qIEkz ODZJWCAqLwotI2VuZGlmIC8qIEJTRDQgKi8KLSNlbmRpZiAvKiBQUzJBSVgxMCAqLwotI2VuZGlm IC8qIE9TMiAqLwotI2lmbmRlZiBUX1NSVgotI2RlZmluZSBUX1NSViAzMwotI2VuZGlmIC8qIFRf U1JWICovCi0jaWZuZGVmIFRfVFhUCi0jZGVmaW5lIFRfVFhUIDE2Ci0jZW5kaWYgLyogVF9UWFQg Ki8KLQotLyogZm9yIG9sZCBVbml4ZXMgYW5kIGZyaWVuZHMgLi4uICovCi0jaWZuZGVmIE1BWEhP U1ROQU1FTEVOCi0jZGVmaW5lIE1BWEhPU1ROQU1FTEVOIDY0Ci0jZW5kaWYgLyogTUFYSE9TVE5B TUVMRU4gKi8KLQotI2RlZmluZSBNQVhfRE5TX05BTUVMRU4gKDE1KihNQVhIT1NUTkFNRUxFTiAr IDEpKzEpCi0jZW5kaWYgLyogQ0tfRE5TX1NSViAqLwotCi0jaWZkZWYgTk9ORVQKLSNpZmRlZiBU Q1BJUExJQgotI3VuZGVmIFRDUElQTElCCi0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSNlbmRpZiAv KiBOT05FVCAqLwotCi0jaWZuZGVmIE5PTUhIT1NUCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSNkZWZp bmUgTk9NSEhPU1QKLSNlbHNlCi0jaWZkZWYgSFBVWDVXSU5UQ1AKLSNkZWZpbmUgTk9NSEhPU1QK LSNlbmRpZiAvKiBIUFVYNVdJTlRDUCAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5k aWYgLyogTk9NSEhPU1QgKi8KLQotI2lmZGVmIElOQUREUlgKLSAgc3RydWN0IGluX2FkZHIgaW5h ZGRyeDsKLSNlbmRpZiAvKiBJTkFERFJYICovCi0KLWludCB0dG5ldCA9IE5FVF9OT05FOyAgICAg ICAgICAgICAgICAgICAvKiBOZXR3b3JrIHR5cGUgKi8KLWludCB0dG5wcm90byA9IE5QX0RFRkFV TFQ7ICAgICAgICAgICAgICAvKiBOZXR3b3JrIHZpcnR1YWwgdGVybWluYWwgcHJvdG9jb2wgKi8K LQotLyogMCA9IGRvbid0IGxvd2VyY2FzZSB1c2VybmFtZSBmb3IgUmxvZ2luL1RlbG5ldCBwcm90 b2NvbCAqLwotLyogbm9uemVybyA9IGRvIGxvd2VyY2FzZSBpdC4gIEFkZCBhIFNFVCBjb21tYW5k IGlmIG5lY2Vzc2FyeS4uLiAqLwotI2lmZGVmIFZNUwotaW50IGNrX2xjbmFtZSA9IDE7Ci0jZWxz ZQotaW50IGNrX2xjbmFtZSA9IDA7Ci0jZW5kaWYgLyogVk1TICovCi0KLWV4dGVybiBpbnQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCB2YXJpYWJsZXMgKi8KLSAgZHVw bGV4LCBkZWJzZXMsIHNlc2xvZywgc2Vzc2Z0LCB3YXNjbG9zZWQsCi0gIHR0eWZkLCBxdWlldCwg bXNnZmxnLCB3aGF0LCBuZXR0eXBlLCB0dG1kbTsKLSNpZmRlZiBJS1NECi1leHRlcm4gaW50IGlu c2VydmVyOwotI2VuZGlmIC8qIElLU0QgKi8KLQotY2hhciBteWlwYWRkclsyMF0gPSB7ICdcMCcg fTsgICAgICAgICAgIC8qIEdsb2JhbCBjb3B5IG9mIG15IElQIGFkZHJlc3MgKi8KLWNoYXIgaG9z dGlwYWRkcls2NF0gPSB7ICdcMCcgfTsJCS8qIEdsb2JhbCBjb3B5IG9mIHJlbW90ZSBJUCBhZGRy ZXNzICovCi0KLSNpZmRlZiBORVRDT05OCi0vKiBEb24ndCBuZWVkIGFueSBvZiB0aGlzIGlmIHRo ZXJlIGlzIG5vIG5ldHdvcmsgc3VwcG9ydC4gKi8KLQotI2lmbmRlZiBPUzIKLS8qIEN1cnJlbnQg ZmQtc3dhcHBpbmcgaGFjayBpcyBub3QgdGhyZWFkLXNhZmUgKi8KLSNkZWZpbmUgSFRUUF9CVUZG RVJJTkcKLSNlbmRpZgkvKiBPUzIgKi8KLQotI2lmZGVmIEhUVFBfQlVGRkVSSU5HCi0jZGVmaW5l IEhUVFBfSU5CVUZMRU4gODE5Mgotc3RhdGljIGNoYXIgaHR0cF9pbmJ1ZltIVFRQX0lOQlVGTEVO XTsKLXN0YXRpYyBpbnQgaHR0cF9idWZwID0gMCwgaHR0cF9jb3VudDsKLSNlbmRpZgkvKiBIVFRQ X0JVRkZFUklORyAqLwotCi0vKgotICBORVRMRUJVRiBpcyAobXVzdCBiZSkgZGVmaW5lZCBmb3Ig dGhvc2UgcGxhdGZvcm1zIHRoYXQgY2FsbCB0aGlzCi0gIG1vZHVsZSB0byBkbyBuZXR3b3JrIGkv byAoZS5nLiBuZXRpbmMoKSwgbmV0dGNoaygpLCBldGMpIHJhdGhlcgotICB0aGFuIGRvaW5nIGl0 IHRoZW1zZWx2ZXMgKHR0aW5jKCksIHR0Y2hrKCksIGV0YykuICBJbiB0aGlzIGNhc2UKLSAgdGhl IFRlbG5ldCBsb2NhbC1lY2hvIGJ1ZmZlcnMgYW5kIHJvdXRpbmVzIGFyZSBkZWZpbmVkIGFuZCBy ZWZlcmVuY2VkCi0gIGhlcmUsIHJhdGhlciB0aGFuIGluIHRoZSBjaz90aW8uYyBtb2R1bGUuCi0q LwotI2lmZGVmIE5FVExFQlVGCi0jZGVmaW5lIExFQlVGU0laIDQwOTYKLWludCB0dHB1c2ggPSAt MSwgbGVfZGF0YSA9IDA7ICAgICAgICAgICAvKiBUaGVzZSBhcmUgc2VlbiBmcm9tIG91dHNpZGUg Ki8KLXN0YXRpYyBDSEFSIGxlX2J1ZltMRUJVRlNJWl07ICAgICAgICAgICAvKiBUaGVzZSBhcmUg dXNlZCBpbnRlcm5hbGx5ICovCi1zdGF0aWMgaW50IGxlX3N0YXJ0ID0gMCwgbGVfZW5kID0gMDsK LWludCB0dF9wdXNoX2luaXRlZCA9IDA7Ci0jZW5kaWYgLyogTkVUTEVCVUYgKi8KLQotI2lmZGVm IENLX1NPQ0tTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNPQ0tTIEludGVybmV0IHJlbGF5 IHBhY2thZ2UgKi8KLSNpZmRlZiBDS19TT0NLUzUgICAgICAgICAgICAgICAgICAgICAgICAvKiBT T0NLUyA1ICovCi0jZGVmaW5lIGFjY2VwdCAgU09DS1NhY2NlcHQKLSNkZWZpbmUgYmluZCAgICBT T0NLU2JpbmQKLSNkZWZpbmUgY29ubmVjdCBTT0NLU2Nvbm5lY3QKLSNkZWZpbmUgZ2V0c29ja25h bWUgU09DS1NnZXRzb2NrbmFtZQotI2RlZmluZSBsaXN0ZW4gU09DS1NsaXN0ZW4KLSNlbHNlICAv KiBOb3QgU09DS1MgNSAqLwotI2RlZmluZSBhY2NlcHQgIFJhY2NlcHQKLSNkZWZpbmUgYmluZCAg ICBSYmluZAotI2RlZmluZSBjb25uZWN0IFJjb25uZWN0Ci0jZGVmaW5lIGdldHNvY2tuYW1lIFJn ZXRzb2NrbmFtZQotI2RlZmluZSBsaXN0ZW4gUmxpc3RlbgotI2VuZGlmIC8qIENLX1NPQ0tTNSAq LwotI2VuZGlmIC8qIENLX1NPQ0tTICovCi0KLSNpZmRlZiBERUNfVENQSVAKLSNpbmNsdWRlIDx0 aW1lLmg+Ci0jaW5jbHVkZSA8aW5ldC5oPgotI2VuZGlmIC8qIERFQ19UQ1BJUCAqLwotCi0vKiBB bHNvIHNlZSBja2NuZXQuaCAtLSBobW1tLCB3aHkgZG9uJ3Qgd2UgYWx3YXlzIGluY2x1ZGUgaW5l dC5oPyAqLwotCi0jaWZkZWYgSFBVWAotI2lmbmRlZiBIUFVYNyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEhQVVggNy4wMCBkb2Vzbid0IGhhdmUgaXQgKi8KLSNpZm5kZWYgSFBVWDYgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBIUFVYIDYuMDAgZG9lc24ndCBoYXZlIGl0ICovCi0j aW5jbHVkZSA8YXJwYS9pbmV0Lmg+ICAgICAgICAgICAgICAgICAgLyogRm9yIGluZXRfbnRvYSgp IHByb3RvdHlwZSAqLwotI2VuZGlmIC8qIEhQVVg2ICovCi0jZW5kaWYgLyogSFBVWDcgKi8KLSNl bmRpZiAvKiBIUFVYICovCi0KLSNpZmRlZiBDTVVfVENQSVAKLSNpbmNsdWRlIDx0aW1lLmg+Ci0j ZW5kaWYgLyogQ01VX1RDUElQICovCi0KLSNpZm5kZWYgTk9EQ0xUSU1FVkFMCi0jaWZkZWYgRENM VElNRVZBTCAgICAgICAgICAgICAgICAgICAgICAgLyogVW5peFdhcmUgNyAqLwotc3RydWN0IHRp bWV2YWwgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFuZCBkZWZpbmUgdGhlc2Ugb3Vyc2Vs dmVzLiAqLwotICAgIGxvbmcgdHZfc2VjOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIChzZWUg Y29tbWVudHMgaW4gY2t1dGlvLmMpICovCi0gICAgbG9uZyB0dl91c2VjOwotfTsKLXN0cnVjdCB0 aW1lem9uZSB7Ci0gICAgaW50IHR6X21pbnV0ZXN3ZXN0OwotICAgIGludCB0el9kc3R0aW1lOwot fTsKLSNlbmRpZiAvKiBEQ0xUSU1FVkFMICovCi0jZW5kaWYgLyogTk9EQ0xUSU1FVkFMICovCi0K LSNpZmRlZiBXSU5UQ1AKLQotI2luY2x1ZGUgPHNldGptcC5oPgotI2luY2x1ZGUgPHNpZ25hbC5o PgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0vKgotICBUaGUgV0lOL1RDUCBjb2RlIHBhdGggaXMg dGhlIHNhbWUgYXMgdGhhdCBmb3IgTXVsdGlOZXQuCi0gIE9ubHkgdGhlIHJvdXRpbmUgbmFtZXMg aGF2ZSBjaGFuZ2VkIC4uLgotKi8KLSNkZWZpbmUgc29ja2V0X3JlYWQgICAgIG5ldHJlYWQKLSNk ZWZpbmUgc29ja2V0X2lvY3RsICAgIGlvY3RsCi0jZGVmaW5lIHNvY2tldF93cml0ZSAgICBuZXR3 cml0ZQotI2RlZmluZSBzb2NrZXRfY2xvc2UgICAgbmV0Y2xvc2UKLQotI2lmZGVmIE9MRF9UV0cg ICAgICAgICAgICAgICAgICAgICAgICAgLyogc29tZSByb3V0aW5lcyBoYXZlIGV2b2x2ZWQgKi8K LSAgICAgICAgZXh0ZXJuIGludCB2bXNlcnJubywgdWVycm5vOwotI2RlZmluZSBzb2NrZXRfZXJy bm8gICAgdWVycm5vCi0jZGVmaW5lIHNvY2tldF9wZXJyb3IgICBwZXJyb3IgICAgICAgICAvKiB3 aGljaCB1c2VzIGVycm5vLCBub3QgdWVycm5vISAqLwotI2Vsc2UKLSNkZWZpbmUgc29ja2V0X2Vy cm5vICAgIGVycm5vCi0jZGVmaW5lIHNvY2tldF9wZXJyb3IgICB3aW4kcGVycm9yCi0jZW5kaWYg LyogT0xEX1RXRyAqLwotCi0jZWxzZSAvKiBOb3QgV0lOVENQICovCi0KLSNpZmRlZiBPU0YxMwot I2lmZGVmIENLX0FOU0lDCi0jaWZkZWYgX05PX1BST1RPCi0jdW5kZWYgX05PX1BST1RPCi0jZW5k aWYgLyogX05PX1BST1RPICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNlbmRpZiAvKiBPU0Yx MyAqLwotCi0jaWZuZGVmIEkzODZJWAotI2lmbmRlZiBIUFVYUFJFNjUKLSNpbmNsdWRlIDxlcnJu by5oPgkJCS8qIEVycm9yIG51bWJlciBzeW1ib2xzICovCi0jZWxzZQotI2lmbmRlZiBFUlJOT19J TkNMVURFRAotI2luY2x1ZGUgPGVycm5vLmg+CQkJLyogRXJyb3IgbnVtYmVyIHN5bWJvbHMgKi8K LSNlbmRpZgkvKiBFUlJOT19JTkNMVURFRCAqLwotI2VuZGlmCS8qIEhQVVhQUkU2NSAqLwotI2Vu ZGlmIC8qIEkzODZJWCAqLwotCi0jaW5jbHVkZSA8c2lnbmFsLmg+ICAgICAgICAgICAgICAgICAg ICAgLyogRXZlcnlib2R5IG5lZWRzIHRoaXMgKi8KLQotI2lmZGVmIFpJTE9HICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFppbG9nIGhhcyBkaWZmZXJlbnQgbmFtZSBmb3IgdGhpcyAqLwot I2luY2x1ZGUgPHNldHJldC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNlbmRpZiAv KiBaSUxPRyAqLwotCi0jZW5kaWYgLyogV0lOVENQICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbCAg ICAgICAgICAgICAgICAgICAgICAvKiBEYXRhIEdlbmVyYWwgQU9TL1ZTICovCi0jaW5jbHVkZSA8 OnVzcjppbmNsdWRlOnZzX3RjcF9lcnJuby5oPgotI2luY2x1ZGUgPDp1c3I6aW5jbHVkZTpzeXM6 dnNfdGNwX3R5cGVzLmg+Ci0jaWZkZWYgU0VMRUNUCi0vKgotICBOT1RFOiBUaGlzIGNhbiBiZSBj b21waWxlZCBhbmQgbGlua2VkIE9LIHdpdGggU0VMRUNUIGRlZmluZWQKLSAgYnV0IGl0IGRvZXNu J3Qgd29yayBhdCBhbGwuICBBbnlib2R5IHdobyBjYXJlcyBhbmQga25vd3MgaG93Ci0gIHRvIGZp eCBpdCwgZmVlbCBmcmVlLgotKi8KLSNpbmNsdWRlIDw6dXNyOmluY2x1ZGU6c3lzOnZzX3RjcF90 aW1lLmg+Ci0jZW5kaWYgLyogU0VMRUNUICovCi0jaW5jbHVkZSA8OnVzcjppbmNsdWRlOnN5czpz b2NrZXQuaD4KLSNpbmNsdWRlIDw6dXNyOmluY2x1ZGU6bmV0aW5ldDppbi5oPgotI2luY2x1ZGUg PDp1c3I6aW5jbHVkZTpuZXRkYi5oPgotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0KLSNpZm5k ZWYgc29ja2V0X2Vycm5vCi0jZGVmaW5lIHNvY2tldF9lcnJubyBlcnJubwotI2VuZGlmIC8qIHNv Y2tldF9lcnJubyAqLwotCi0jaWZkZWYgVE5DT0RFCi1leHRlcm4gaW50IHRuX2RlYjsKLSNlbmRp ZiAvKiBUTkNPREUgKi8KLQotaW50IHRjcF9yZG5zID0gICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFJldmVyc2UgRE5TIGxvb2t1cCAqLwotI2lmZGVmIERFQ19UQ1BJUF9PTEQKLSAgICBTRVRf T0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb2Vzbid0IHNlZW0gdG8gd29yayBp biBVQ1ggKi8KLSNlbHNlCi0gICAgIFNFVF9BVVRPCi0jZW5kaWYgLyogREVDX1RDUElQICovCi0g ICAgICA7Ci0jaWZkZWYgQ0tfRE5TX1NSVgotaW50IHRjcF9kbnNfc3J2ID0gU0VUX09GRjsKLSNl bmRpZiAvKiBDS19ETlNfU1JWICovCi0KLV9QUk9UT1RZUCggY2hhciAqIGNtY3Z0ZGF0ZSwgKGNo YXIgKiwgaW50KSApOwotCi0jaWZkZWYgUkxPR0NPREUKLV9QUk9UT1RZUCggaW50IHJsb2dfY3Ry bCwgKENIQVIgKiwgaW50KSApOwotX1BST1RPVFlQKCBzdGF0aWMgaW50IHJsb2dfb29iLCAoQ0hB UiAqLCBpbnQpICk7Ci0jaWZuZGVmIFRDUElQTElCCi1fUFJPVE9UWVAoIHN0YXRpYyBTSUdUWVAg cmxvZ29vYmgsICggaW50ICkgKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotX1BST1RPVFlQKCBz dGF0aWMgaW50IHJsb2dfaW5pLCAoQ0hBUiAqLCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqKSApOwotaW50IHJsb2dfbW9kZSA9IFJMX0NP T0tFRDsKLWludCBybG9nX3N0b3BwZWQgPSAwOwotaW50IHJsb2dfaW5iYW5kID0gMDsKLSNlbmRp ZiAvKiBSTE9HQ09ERSAqLwotCi0jaWZuZGVmIE5PSUNQCi1leHRlcm4gaW50IGRvY29ueDsgICAg ICAgICAgICAgICAgICAgICAgLyogQ09OTkVDVC1jbGFzcyBjb21tYW5kIGFjdGl2ZSAqLwotI2Vu ZGlmIC8qIE5PSUNQICovCi0KLSNpZmRlZiBJQk1YMjUKLS8qIFRoaXMgdmFyaWFibGUgc2hvdWxk IHByb2JhYmx5IGJlIGdlbmVyYWxpc2VkIGZvciB0cnVlIGNsaWVudC9zZXJ2ZXIKLSAqIHN1cHBv cnQgLSBpZTogdGhlIGZkIG9mIHRoZSBsaXN0ZW5pbmcgc2VydmVyLCBhY2NlcHRlZCBjYWxscyBz aG91bGQKLSAqIGJlIGZvcmtlZCBvciBhdCBsZWFzdCBoYW5kbGVkIHZpYSBhIHNlY29uZCBmZCAo Zm9yIElCTSdzIFguMjUgLQotICogdHR5ZmQgYWx3YXlzIGhvbGRzIHRoZSBhY3RpdmUgZmQgLSBp ZSB0aGUgc2VydmVyIGJlY29tZXMgaW5hY3RpdmUKLSAqIGFzIGxvbmcgYXMgYSBjbGllbnQgaXMg Y29ubmVjdGVkLCBhbmQgYmVjb21lcyBhY3RpdmUgYWdhaW4gd2hlbiB0aGUKLSAqIGNvbm5lY3Rp b24gaXMgY2xvc2VkKQotICovCi1pbnQgeDI1c2VydmVyZmQgPSAwOyAgICAgICAgICAgIC8qIGV4 dGVybiBpbiBja2NuZXQuaCAqLwotaW50IHgyNXNlcW5vID0gMDsgICAgICAgICAgICAgICAvKiBD b25uZWN0aW9uIHNlcXVlbmNlIG51bWJlciAqLwotaW50IHgyNWxhc3Rtc2cgPSAtMTsgICAgICAg ICAgICAvKiBBIGNoZWFwc2thdGUncyBzdGF0ZSB0YWJsZSAqLwotCi0jZGVmaW5lIFgyNV9DTE9T RUQgICAgICAwICAgICAgIC8qIERlZmF1bHQgc3RhdGU6IG5vIGNvbm5lY3Rpb24sIG5vIFNUUkVB TSAqLwotI2RlZmluZSBYMjVfU0VUVVAgICAgICAgMSAgICAgICAvKiBYLjI1IGhhcyBiZWVuIHNl dCB1cCAobm8gY29ubmVjdGlvbikgKi8KLSNkZWZpbmUgWDI1X0NPTk5FQ1RFRCAgIDIgICAgICAg LyogWC4yNSBjb25uZWN0aW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkICovCi1pbnQgeDI1X3N0YXRl ID0gWDI1X0NMT1NFRDsgICAgIC8qIERlZmF1bHQgc3RhdGUgKi8KLSNlbmRpZiAvKiBJQk1YMjUg Ki8KLQotI2lmbmRlZiBERUJVRwotI2RlZmluZSBkZWJsb2cgMAotI2VuZGlmIC8qIERFQlVHICov Ci0KLSNpZmRlZiBDS19OQVdTICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWdvdGlhdGUg QWJvdXQgV2luZG93IFNpemUgKi8KLSNpZmRlZiBSTE9HQ09ERQotX1BST1RPVFlQKCBpbnQgcmxv Z19uYXdzLCAodm9pZCkgKTsKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2VuZGlmIC8qIENLX05B V1MgKi8KLQotI2lmZGVmIE9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciB0 ZXJtaW5hbCB0eXBlIG5hbWUgc3RyaW5nICovCi0jaW5jbHVkZSAiY2t1dXNyLmgiCi0jaWZuZGVm IE5UCi0jaW5jbHVkZSA8b3MyLmg+Ci0jdW5kZWYgQ09NTUVOVAotI2VuZGlmIC8qIE5UICovCi0j aW5jbHVkZSAiY2tvY29uLmgiCi1leHRlcm4gaW50IHR0X3R5cGUsIG1heF90dDsKLWV4dGVybiBz dHJ1Y3QgdHRfaW5mb19yZWMgdHRfaW5mb1tdOwotZXh0ZXJuIGNoYXIgdHRuYW1lW107Ci0jZWxz ZQotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0jaW5jbHVkZSAiY2t1dXNyLmgiCi0jZW5kaWYg LyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE5UCi1l eHRlcm4gaW50IHdpbnNvY2tfdmVyc2lvbjsKLSNlbmRpZiAvKiBOVCAqLwotCi0jaWZkZWYgQ0tf QVVUSEVOVElDQVRJT04KLSNpbmNsdWRlICJja3VhdGguaCIKLSNlbmRpZiAvKiBDS19BVVRIRU5U SUNBVElPTiAqLwotCi0jaW5jbHVkZSAiY2tjc2lnLmgiCi0KLSNpZm5kZWYgT1MyICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBGb3IgdGltZW91dCBsb25nanVtcHMgKi8KLXN0YXRpYyBj a2ptcGJ1ZiBuamJ1ZjsKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2RlZmluZSBOQU1FQ1BZTCAxMDI0 ICAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGNvcHkgb2YgaG9zdG5hbWUgKi8KLWNoYXIgbmFt ZWNvcHlbTkFNRUNQWUxdOyAgICAgICAgICAgICAgICAvKiBSZWZlcmVuY2VkIGJ5IGNrY3RlbC5j ICovCi1jaGFyIG5hbWVjb3B5MltOQU1FQ1BZTF07CQkvKiBSZWZlcmVuY2VkIGJ5IGNrY3RlbC5j ICovCi0jaWZuZGVmIE5PSFRUUAotY2hhciBodHRwX2hvc3RfcG9ydFtOQU1FQ1BZTF07ICAgICAg ICAgIC8qIG9yaWcgaG9zdC9wb3J0IG5lY2Vzc2FyeSBmb3IgaHR0cCAqLwotY2hhciBodHRwX2lw WzIwXSA9IHsgJ1wwJyB9OyAgICAgICAgICAgIC8qIGlwIGFkZHJlc3Mgb2YgaG9zdCAqLwotY2hh ciBodHRwX3BvcnQgPSAwOwotaW50ICBodHRwX3NzbCA9IDA7Ci1jaGFyICogaHR0cF9hZ2VudCA9 IDA7Ci1pbnQgIGh0dHBmZCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogc29ja2V0IGZv ciBodHRwIGNvbm5lY3Rpb25zICovCi1pbnQgIGh0dHBfY29kZSA9IDA7Ci0jZGVmaW5lIEhUVFBC VUZMRU4gIDEwMjQKLWNoYXIgaHR0cF9yZXBseV9zdHJbSFRUUEJVRkxFTl0gPSAiIjsKLSNlbmRp ZiAvKiBOT0hUVFAgKi8KLQotY2hhciBpcGFkZHJbMjBdID0geyAnXDAnIH07ICAgICAgICAgICAg IC8qIEdsb2JhbCBjb3B5IG9mIElQIGFkZHJlc3MgKi8KLXVuc2lnbmVkIGxvbmcgbXl4aXBhZGRy ID0gMEw7ICAgICAgICAgICAvKiBEaXR0byBhcyBhIG51bWJlciAqLwotI2VuZGlmIC8qIE5FVENP Tk4gKi8KLQotY2hhciAqdGNwX2FkZHJlc3MgPSBOVUxMOyAgICAgICAgICAgICAgIC8qIFByZWZl cnJlZCBJUCBBZGRyZXNzICovCi1leHRlcm4gY2hhciB1aWRidWZbXTsgICAgICAgICAgICAgICAg ICAgLyogVXNlciBJRCBidWZmZXIgKi8KLWV4dGVybiBjaGFyIHB3YnVmW107ICAgICAgICAgICAg ICAgICAgICAvKiBQYXNzd29yZCBidWZmZXIgKi8KLQotI2lmbmRlZiBOT0hUVFAKLWNoYXIgKiB0 Y3BfaHR0cF9wcm94eSA9IE5VTEw7ICAgICAgICAgICAvKiBOYW1lWzpwb3J0XSBvZiBodHRwIHBy b3h5IHNlcnZlciAqLwotaW50ICAgIHRjcF9odHRwX3Byb3h5X2Vycm5vID0gMDsKLWNoYXIgKiB0 Y3BfaHR0cF9wcm94eV91c2VyID0gTlVMTDsKLWNoYXIgKiB0Y3BfaHR0cF9wcm94eV9wd2QgID0g TlVMTDsKLWNoYXIgKiB0Y3BfaHR0cF9wcm94eV9hZ2VudCA9IE5VTEw7Ci0jZGVmaW5lIEhUVFBD UFlMIDEwMjQKLXN0YXRpYyBjaGFyIHByb3h5Y29weVtIVFRQQ1BZTF07Ci0jZW5kaWYgLyogTk9I VFRQICovCi0KLSNpZmRlZiBPUzIKLWV4dGVybiBpbnQgdHRfcm93c1tdLCB0dF9jb2xzW107Ci1l eHRlcm4gaW50IHR0X3N0YXR1c1tWTlVNXTsKLSNlbHNlIC8qIE9TMiAqLwotZXh0ZXJuIGludCB0 dF9yb3dzLCB0dF9jb2xzOyAgICAgICAgICAgIC8qIEV2ZXJ5Ym9keSBoYXMgdGhpcyAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotCi1leHRlcm4gaW50IGNtZF9jb2xzLCBjbWRfcm93czsKLQotI2lmZGVm IFNUUkVBTUlORyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBibG9ja2luZyB3cml0ZXMg Zm9yIHN0cmVhbWluZyAqLwotZXh0ZXJuIGludCBzdHJlYW1pbmc7Ci0jZW5kaWYgLyogU1RSRUFN SU5HICovCi0KLSNpZmRlZiBOVAotZXh0ZXJuIGludCBXU0FTYWZlVG9DYW5jZWw7Ci1pbnQgd2lu OTVzZWxlY3RidWcgPSAwOyAgICAgICAgICAgICAgICAgLyogRm9yIFRDUC9JUCBzdGFja3Mgd2hv c2Ugc2VsZWN0KCkgKi8KLS8qIGFsd2F5cyBmYWlscyBvbiB3cml0ZSByZXF1ZXN0cyBzdWNoIGFz IENpc2NvIGFuZCBRdWFydGVyZGVjayAqLwotI2RlZmluZSBzdHJpY21wIF9zdHJpY21wCi0jZW5k aWYgLyogTlQgKi8KLQotI2lmbmRlZiBOT1RDUE9QVFMKLQotLyogU2tpcCBhbGwgdGhpcyBpZiBO T1RDUE9QVFMgc3BlY2lmaWVkLiAqLwotCi0jaWZkZWYgU09MX1NPQ0tFVAotCi0jaWZkZWYgVENQ X05PREVMQVkKLWludCB0Y3Bfbm9kZWxheSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBOYWds ZSBhbGdvcml0aG0gVENQX05PREVMQVkgKi8KLSNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwotCi0j aWZkZWYgU09fRE9OVFJPVVRFCi1pbnQgdGNwX2RvbnRyb3V0ZSA9IDA7Ci0jZW5kaWYgLyogU09f RE9OVFJPVVRFICovCi0KLSNpZmRlZiBTT19MSU5HRVIKLWludCB0Y3BfbGluZ2VyICA9IDA7ICAg ICAgICAgICAgICAgICAgICAvKiBTT19MSU5HRVIgKi8KLWludCB0Y3BfbGluZ2VyX3RtbyA9IDA7 ICAgICAgICAgICAgICAgICAvKiBTT19MSU5HRVIgdGltZW91dCAqLwotI2VuZGlmIC8qIFNPX0xJ TkdFUiAqLwotCi0jaWZkZWYgSFBVWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnV0 IHRoZSBkYXRhIHN0cnVjdHVyZXMgKi8KLSNpZm5kZWYgSFBVWDggICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBuZWVkZWQgZm9yIGxpbmdlciBhcmUgbm90ICovCi0jaWZuZGVmIEhQVVg5ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmaW5lZCBpbiBIUC1VWCB2ZXJzaW9ucyAqLwot I2lmbmRlZiBIUFVYMTAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByaW9yIHRvIDguMDAu ICovCi0jaWZkZWYgU09fTElOR0VSCi0jdW5kZWYgU09fTElOR0VSCi0jZW5kaWYgLyogU09fTElO R0VSICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYgLyogSFBVWDkgKi8KLSNlbmRpZiAv KiBIUFVYOCAqLwotI2VuZGlmIC8qIEhQVVggKi8KLQotI2lmbmRlZiBTT19PT0JJTkxJTkUgICAg ICAgICAgICAgICAgICAgIC8qIEhvcGVmdWxseSBvbmx5IEhQLVVYIDcuMCAqLwotI2RlZmluZSBT T19PT0JJTkxJTkUgMHgwMTAwCi0jZW5kaWYgLyogU09fT09CSU5MSU5FICovCi0KLSNpZm5kZWYg VENQU05EQlVGU0laCi0jaWZkZWYgVk1TCi0jaWZkZWYgX19hbHBoYQotI2RlZmluZSBUQ1BTTkRC VUZTSVogMTYzODQKLSNlbmRpZiAvKiBfX2FscGhhICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5k aWYgLyogVENQU05EQlVGU0laICovCi0KLSNpZm5kZWYgVENQU05EQlVGU0laCi0jZGVmaW5lIFRD UFNOREJVRlNJWiAtMQotI2VuZGlmIC8qIFRDUFNOREJVRlNJWiAqLwotCi0jaWZkZWYgU09fU05E QlVGCi1pbnQgdGNwX3NlbmRidWYgPSBUQ1BTTkRCVUZTSVo7Ci0jZW5kaWYgLyogU09fU05EQlVG ICovCi0KLSNpZmRlZiBTT19SQ1ZCVUYKLWludCB0Y3BfcmVjdmJ1ZiA9IC0xOwotI2VuZGlmIC8q IFNPX1JDVkJVRiAqLwotCi0jaWZkZWYgU09fS0VFUEFMSVZFCi1pbnQgdGNwX2tlZXBhbGl2ZSA9 IDE7Ci0jZW5kaWYgLyogU09fS0VFUEFMSVZFICovCi0KLSNlbmRpZiAvKiBTT0xfU09DS0VUICov Ci0jZW5kaWYgLyogTk9UQ1BPUFRTICovCi0KLSNpZm5kZWYgTkVUQ09OTgotLyoKLSAgTmV0d29y ayBzdXBwb3J0IG5vdCBkZWZpbmVkLgotICBEdW1teSBmdW5jdGlvbnMgaGVyZSBpbiBjYXNlICNp ZmRlZidzIGZvcmdvdHRlbiBlbHNld2hlcmUuCi0qLwotaW50ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE9wZW4gbmV0d29yayBjb25uZWN0aW9uICovCi1uZXRvcGVuKG5h bWUsIGxjbCwgbmV0dCkgY2hhciAqbmFtZTsgaW50ICpsY2wsIG5ldHQ7IHsKLSAgICByZXR1cm4o LTEpOwotfQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsb3Nl IG5ldHdvcmsgY29ubmVjdGlvbiAqLwotbmV0Y2xvcygpIHsKLSAgICByZXR1cm4oLTEpOwotfQot aW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIG5ldHdvcmsg aW5wdXQgYnVmZmVyICovCi1uZXR0Y2hrKCkgewotICAgIHJldHVybigtMSk7Ci19Ci1pbnQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmx1c2ggbmV0d29yayBpbnB1dCBi dWZmZXIgKi8KLW5ldGZsdWkoKSB7Ci0gICAgcmV0dXJuKC0xKTsKLX0KLWludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIG5ldHdvcmsgQlJFQUsgKi8KLW5ldGJy ZWFrKCkgewotICAgIHJldHVybigtMSk7Ci19Ci1pbnQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogSW5wdXQgY2hhcmFjdGVyIGZyb20gbmV0d29yayAqLwotbmV0aW5jKHRp bW8pIGludCB0aW1vOyB7Ci0gICAgcmV0dXJuKC0xKTsKLX0KLWludCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgY2hhcmFjdGVyIHRvIG5ldHdvcmsgKi8KLSNp ZmRlZiBDS19BTlNJQwotbmV0dG9jKENIQVIgYykKLSNlbHNlCi1uZXR0b2MoYykgQ0hBUiBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBuZXR0b2MgKi8gewotICAgIHJldHVybigtMSk7Ci19 Ci1pbnQKLW5ldHRvbChzLG4pIENIQVIgKnM7IGludCBuOyB7Ci0gICAgcmV0dXJuKC0xKTsKLX0K LQotI2Vsc2UgLyogTkVUQ09OTiBpcyBkZWZpbmVkIChtdWNoIG9mIHRoaXMgbW9kdWxlLi4uKSAq LwotCi0jaWZkZWYgTkVUTEVCVUYKLVZPSUQKLWxlX2luaXQoKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBMb2NhbEVjaG9Jbml0KCkgKi8KLSAgICBpbnQgaTsKLSAgICBmb3IgKGkg PSAwOyBpIDwgTEVCVUZTSVo7IGkrKykKLSAgICAgIGxlX2J1ZltpXSA9ICdcMCc7Ci0gICAgbGVf c3RhcnQgPSAwOwotICAgIGxlX2VuZCA9IDA7Ci0gICAgbGVfZGF0YSA9IDA7Ci0gICAgdHRfcHVz aF9pbml0ZWQgPSAxOwotfQotCi1WT0lECi1sZV9jbGVhbigpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTG9jYWxFY2hvQ2xlYW51cCgpICovCi0gICAgbGVfaW5pdCgpOwotICAgIHJl dHVybjsKLX0KLQotaW50Ci1sZV9pbmJ1ZigpIHsKLSAgICBpbnQgcmMgPSAwOwotICAgIGlmIChs ZV9zdGFydCAhPSBsZV9lbmQpIHsKLSAgICAgICAgcmMgPSAobGVfZW5kIC0KLSAgICAgICAgICAg ICAgbGVfc3RhcnQgKwotICAgICAgICAgICAgICBMRUJVRlNJWikgJSBMRUJVRlNJWjsKLSAgICB9 Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWxlX3B1dGNoYXIo Q0hBUiBjaCkKLSNlbHNlCi1sZV9wdXRjaGFyKGNoKSBDSEFSIGNoOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi0vKiBsZV9wdXRjaGFyICovIHsKLSAgICBpZiAoKGxlX3N0YXJ0IC0gbGVfZW5kICsg TEVCVUZTSVopJUxFQlVGU0laID09IDEpIHsKLSAgICAgICAgZGVidWcoRjExMCwibGVfcHV0Y2hh ciIsImJ1ZmZlciBpcyBmdWxsIiwwKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAg bGVfYnVmW2xlX2VuZCsrXSA9IGNoOwotICAgIGlmIChsZV9lbmQgPT0gTEVCVUZTSVopCi0gICAg ICBsZV9lbmQgPSAwOwotICAgIGxlX2RhdGEgPSAxOwotICAgIHJldHVybigwKTsKLX0KLQotaW50 Ci0jaWZkZWYgQ0tfQU5TSUMKLWxlX3B1dHMoQ0hBUiAqIHMsIGludCBuKQotI2Vsc2UKLWxlX3B1 dHMocyxuKSBDSEFSICogczsgaW50IG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGxlX3B1 dHMgKi8gewotICAgIGludCByYyA9IDA7Ci0gICAgaW50IGkgPSAwOwotICAgIENIQVIgKiBwID0g KENIQVIgKikibGVfcHV0cyI7Ci0gICAgY2toZXhkdW1wKHAscyxuKTsKLSAgICBmb3IgKGkgPSAw OyBpIDwgbjsgaSsrKQotICAgICAgcmMgPSBsZV9wdXRjaGFyKChjaGFyKXNbaV0pOwotICAgIGRl YnVnKEYxMDEsImxlX3B1dHMiLCIiLHJjKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotbGVfcHV0c3RyKENIQVIgKiBzKQotI2Vsc2UKLWxlX3B1dHN0cihzKSBD SEFSICogczsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogbGVfcHV0cyAqLyB7Ci0gICAgQ0hB UiAqIHA7Ci0gICAgaW50IHJjID0gMDsKLSAgICBwID0gKENIQVIgKikibGVfcHV0c3RyIjsKLSAg ICBja2hleGR1bXAocCxzLChpbnQpc3RybGVuKChjaGFyICopcykpOwotICAgIGZvciAocCA9IHM7 ICpwICYmICFyYzsgcCsrKQotICAgICAgcmMgPSBsZV9wdXRjaGFyKCpwKTsKLSAgICByZXR1cm4o cmMpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotbGVfZ2V0Y2hhcihDSEFSICogcGNoKQot I2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWxlX2dldGNoYXIocGNoKSBDSEFSICogcGNoOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi0vKiBsZV9nYXRjaGFyICovIHsKLSAgICBpbnQgcmMgPSAwOwotICAg IGlmIChsZV9zdGFydCAhPSBsZV9lbmQpIHsKLSAgICAgICAgKnBjaCA9IGxlX2J1ZltsZV9zdGFy dF07Ci0gICAgICAgIGxlX2J1ZltsZV9zdGFydF0gPSAwOwotICAgICAgICBsZV9zdGFydCsrOwot Ci0gICAgICAgIGlmIChsZV9zdGFydCA9PSBMRUJVRlNJWikKLSAgICAgICAgICBsZV9zdGFydCA9 IDA7Ci0KLSAgICAgICAgaWYgKGxlX3N0YXJ0ID09IGxlX2VuZCkgewotICAgICAgICAgICAgbGVf ZGF0YSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgcmMrKzsKLSAgICB9IGVsc2UgewotICAgICAg ICAqcGNoID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuKHJjKTsKLX0KLSNlbmRpZiAvKiBORVRMRUJV RiAqLwotCi0jaWZkZWYgVk1TCi0vKgotICBJbiBlZGl0IDE5MCwgd2UgbW92ZWQgdG5faW5pKCkg dG8gYmUgY2FsbGVkIGZyb20gd2l0aGluIG5ldG9wZW4oKS4KLSAgQnV0IHRuX2luaSgpIGNhbGxz IHR0b2woKSwgYW5kIHR0b2woKSBjaGVja3MgdG8gc2VlIGlmIGl0J3MgYSBuZXQKLSAgY29ubmVj dGlvbiwgYnV0IHRoZSBmbGFnIGZvciB0aGF0IGlzbid0IHNldCB1bnRpbCBhZnRlciBuZXRvcGVu KCkKLSAgaXMgZmluaXNoZWQuICBTaW5jZSwgaW4gdGhpcyBtb2R1bGUsIHdlIGFyZSBhbHdheXMg ZG9pbmcgbmV0d29yawotICBvdXRwdXQgYW55d2F5LCB3ZSBqdXN0IGNhbGwgbmV0dG9sKCkgZGly ZWN0bHksIGluc3RlYWQgb2YgZ29pbmcgdGhydQotICB0dG9sKCkuICBPbmx5IG5lZWRlZCBmb3Ig Vk1TLCBzaW5jZSBVTklYLCBBT1MvVlMsIGFuZCBWT1MgY2FuIGhhbmRsZQotICBuZXQgY29ubmVj dGlvbnMganVzdCBsaWtlIHJlZ3VsYXIgY29ubmVjdGlvbnMgaW4gdHRvbCgpLCBhbmQgT1MvMgot ICBoYXMgYSBzcGVjaWFsIHJvdXRpbmUgZm9yIHRoaXMuCi0qLwotI2RlZmluZSB0dG9sIG5ldHRv bAotI2VuZGlmIC8qIFZNUyAqLwotCi1pbnQgdGNwc3JmZCA9IC0xOwotCi0jaWZkZWYgQ0tfS0VS QkVST1MKLQotY2hhciAqIGtyYjVfZF9wcmluY2lwYWwgPSBOVUxMOyAgICAgICAgIC8qIERlZmF1 bHQgcHJpbmNpcGFsICovCi1jaGFyICoga3JiNV9kX2luc3RhbmNlID0gTlVMTDsgICAgICAgICAg LyogRGVmYXVsdCBpbnN0YW5jZSAqLwotY2hhciAqIGtyYjVfZF9yZWFsbSA9IE5VTEw7ICAgICAg ICAgICAgIC8qIERlZmF1bHQgcmVhbG0gKi8KLWNoYXIgKiBrcmI1X2RfY2MgPSBOVUxMOyAgICAg ICAgICAgICAgICAvKiBEZWZhdWx0IGNyZWRlbnRpYWxzIGNhY2hlICovCi1jaGFyICoga3JiNV9k X3NydiAgID0gTlVMTDsgICAgICAgICAgICAgLyogRGVmYXVsdCBTZXJ2aWNlICovCi1pbnQgICAg a3JiNV9kX2xpZmV0aW1lID0gNjAwOyAgICAgICAgICAgLyogRGVmYXVsdCBsaWZldGltZSAoMTAg aG91cnMpICovCi1pbnQgICAga3JiNV9kX2ZvcndhcmRhYmxlID0gMDsgICAgICAgICAgLyogY3Jl ZHMgbm90IGZvcndhcmRhYmxlICovCi1pbnQgICAga3JiNV9kX3Byb3hpYWJsZSA9IDA7ICAgICAg ICAgICAgLyogY3JlZHMgbm90IHByb3hpYWJsZSAqLwotaW50ICAgIGtyYjVfZF9yZW5ld2FibGUg PSAwOyAgICAgICAgICAgIC8qIGNyZWRzIG5vdCByZW5ld2FibGUgKDAgbWluKSAqLwotaW50ICAg IGtyYjVfYXV0b2dldCA9IDE7ICAgICAgICAgICAgICAgIC8qIEF1dG9nZXQgVEdUcyAqLwotaW50 ICAgIGtyYjVfYXV0b2RlbCA9IDA7ICAgICAgICAgICAgICAgIC8qIEF1dG8gZGVsZXRlIFRHVHMg Ki8KLWludCAgICBrcmI1X2RfZ2V0azQgPSAwOyAgICAgICAgICAgICAgICAvKiBLNSBLaW5pdCBn ZXRzIEs0IFRHVHMgKi8KLWludCAgICBrcmI1X2NoZWNrYWRkcnMgPSAxOyAgICAgICAgICAgICAv KiBDaGVjayBUR1QgQWRkcnMgKi8KLWludCAgICBrcmI1X2Rfbm9fYWRkcmVzc2VzID0gMDsgICAg ICAgICAvKiBEbyBub3QgaW5jbHVkZSBJUCBBZGRyZXNzZXMgKi8KLWNoYXIgKiBrcmI1X2RfYWRk cnNbS1JCNV9OVU1fT0ZfQUREUlMrMV09e05VTEwsTlVMTH07IC8qIEFkZHJzIHRvIGluY2x1ZGUg Ki8KLWludCAgICBrcmI1X2Vycm5vID0gMDsgICAgICAgICAgICAgICAgICAvKiBMYXN0IEs1IGVy cm5vICovCi1jaGFyICoga3JiNV9lcnJtc2cgPSBOVUxMOyAgICAgICAgICAgICAgLyogTGFzdCBL NSBlcnJtc2cgKi8KLWNoYXIgKiBrNV9rZXl0YWIgPSBOVUxMOwotCi1jaGFyICoga3JiNF9kX3By aW5jaXBhbCA9IE5VTEw7ICAgICAgICAgLyogRGVmYXVsdCBwcmluY2lwYWwgKi8KLWNoYXIgKiBr cmI0X2RfcmVhbG0gPSBOVUxMOyAgICAgICAgICAgICAvKiBEZWZhdWx0IHJlYWxtICovCi1jaGFy ICoga3JiNF9kX3NydiAgID0gTlVMTDsgICAgICAgICAgICAgLyogRGVmYXVsdCBTZXJ2aWNlICov Ci1pbnQgICAga3JiNF9kX2xpZmV0aW1lID0gNjAwOyAgICAgICAgICAgLyogRGVmYXVsdCBsaWZl dGltZSAoMTAgaG91cnMpICovCi1pbnQgICAga3JiNF9kX3ByZWF1dGggPSAxOyAgICAgICAgICAg ICAgLyogVXNlIHByZWF1dGggcmVxdWVzdHMgKi8KLWNoYXIgKiBrcmI0X2RfaW5zdGFuY2UgPSBO VUxMOyAgICAgICAgICAvKiBEZWZhdWx0IGluc3RhbmNlICovCi1pbnQgICAga3JiNF9hdXRvZ2V0 ID0gMTsgICAgICAgICAgICAgICAgLyogQXV0b2dldCBUR1RzICovCi1pbnQgICAga3JiNF9hdXRv ZGVsID0gMDsgICAgICAgICAgICAgICAgLyogQXV0byBkZWxldGUgVEdUcyAqLwotaW50ICAgIGty YjRfY2hlY2thZGRycyA9IDE7ICAgICAgICAgICAgIC8qIENoZWNrIFRHVCBBZGRycyAqLwotY2hh ciAqIGs0X2tleXRhYiA9IE5VTEw7Ci0KLWludCAgICBrcmI0X2Vycm5vID0gMDsgICAgICAgICAg ICAgICAgICAvKiBMYXN0IEs0IGVycm5vICovCi1jaGFyICoga3JiNF9lcnJtc2cgPSBOVUxMOyAg ICAgICAgICAgICAgLyogTGFzdCBLNCBlcnJtc2cgKi8KLQotc3RydWN0IGtyYl9vcF9kYXRhIGty Yl9vcCA9IHsgICAgICAgICAgIC8qIE9wZXJhdGlvbmFsIGRhdGEgc3RydWN0dXJlICovCi0gICAg MCwgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKHZlcnNpb24sIGNhY2hlZmls ZSkgKi8KLX07Ci0KLXN0cnVjdCBrcmI0X2luaXRfZGF0YSBrcmI0X2luaXQgPSB7ICAgICAvKiBL ZXJiZXJvcyA0IElOSVQgZGF0YSBzdHJ1Y3R1cmUgKi8KLSAgICAwLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMCi19OwotCi1zdHJ1Y3Qga3JiNV9pbml0X2RhdGEga3JiNV9pbml0ID0geyAgICAgLyog S2VyYmVyb3MgNSBJTklUIGRhdGEgc3RydWN0dXJlICovCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgMCwgMCwKLSAgICB7IE5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgICBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sCi0gICAgMAot fTsKLQotc3RydWN0IGtyYjVfbGlzdF9jcmVkX2RhdGEga3JiNV9sYyA9IHsgIC8qIExpc3QgQ3Jl ZGVudGlhbHMgZGF0YSBzdHJ1Y3R1cmUgKi8KLSAgICAwLCAwLCAwCi19OwotCi1pbnQga3JiX2Fj dGlvbiA9IC0xOyAgICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgYWN0aW9uIHRvIHBlcmZv cm0gKi8KLQotI2lmbmRlZiBDS19BVVRIRU5USUNBVElPTgotY2hhciAqCi1ja19rcmI0X2dldHJl YWxtKCkgewotICAgIHJldHVybigiIik7Ci19Ci1jaGFyICoKLWNrX2tyYjVfZ2V0cmVhbG0oY2Mp IGNoYXIgKiBjYzsgewotICAgIHJldHVybigiIik7Ci19Ci1jaGFyICoKLWNrX2tyYjRfZ2V0cHJp bmNpcGFsKCkgewotICAgIHJldHVybigiIik7Ci19Ci1jaGFyICoKLWNrX2tyYjVfZ2V0cHJpbmNp cGFsKGNjKSBjaGFyICogY2M7IHsKLSAgICByZXR1cm4oIiIpOwotfQotI2VuZGlmIC8qIENLX0FV VEhFTlRJQ0FUSU9OICovCi0KLS8qICBJIE4gSSBfIEsgRSBSIEIgIC0tICBJbml0aWFsaXplIEtl cmJlcm9zIGRhdGEgICovCi0KLVZPSUQKLWluaV9rZXJiKCkgewotICAgIGludCBpOwotCi0gICAg a3JiX2FjdGlvbiA9IC0xOyAgICAgICAgICAgICAgICAgICAgLyogTm8gYWN0aW9uIHNwZWNpZmll ZCAqLwotCi0gICAga3JiX29wLnZlcnNpb24gPSAwOyAgICAgICAgICAgICAgICAgLyogS2VyYmVy b3MgdmVyc2lvbiAobm9uZSkgKi8KLSAgICBrcmJfb3AuY2FjaGUgPSBOVUxMOyAgICAgICAgICAg ICAgICAvKiBDYWNoZSBmaWxlIChub25lKSAqLwotCi0vKiBLZXJiZXJvcyA1ICovCi0KLSAgICBr cmI1X2luaXQuZm9yd2FyZGFibGUgPSBrcmI1X2RfZm9yd2FyZGFibGU7IC8qIEluaXQgc3dpdGNo IHZhbHVlcy4uLiAqLwotICAgIGtyYjVfaW5pdC5wcm94aWFibGUgICA9IGtyYjVfZF9wcm94aWFi bGU7Ci0gICAga3JiNV9pbml0LmxpZmV0aW1lICAgID0ga3JiNV9kX2xpZmV0aW1lOwotICAgIGty YjVfaW5pdC5yZW5ldyAgICAgICA9IDA7Ci0gICAga3JiNV9pbml0LnJlbmV3YWJsZSAgID0ga3Ji NV9kX3JlbmV3YWJsZTsKLSAgICBrcmI1X2luaXQudmFsaWRhdGUgICAgPSAwOwotICAgIGtyYjVf aW5pdC5ub19hZGRyZXNzZXMgPSBrcmI1X2Rfbm9fYWRkcmVzc2VzOwotICAgIGtyYjVfaW5pdC5n ZXRrNCAgICAgICA9IGtyYjVfZF9nZXRrNDsKLSAgICBpZiAoa3JiNV9pbml0LnBvc3RkYXRlKSB7 Ci0gICAgICAgIGZyZWUoa3JiNV9pbml0LnBvc3RkYXRlKTsKLSAgICAgICAga3JiNV9pbml0LnBv c3RkYXRlID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGtyYjVfaW5pdC5zZXJ2aWNlKSB7Ci0gICAg ICAgIGZyZWUoa3JiNV9pbml0LnNlcnZpY2UpOwotICAgICAgICBrcmI1X2luaXQuc2VydmljZSA9 IE5VTEw7Ci0gICAgfQotICAgIGlmICgha3JiNV9kX2NjIHx8ICFrcmI1X2RfY2NbMF0pIHsgIC8q IFNldCBkZWZhdWx0IGNhY2hlICovCi0gICAgICAgIGNoYXIgKiBwOwotICAgICAgICBwID0gY2tf a3JiNV9nZXRfY2NfbmFtZSgpOwotICAgICAgICBtYWtlc3RyKCZrcmI1X2RfY2MsKHAgJiYgcFsw XSkgPyBwIDogTlVMTCk7Ci0gICAgfQotICAgIGlmICgha3JiNV9kX3JlYWxtIHx8ICFrcmI1X2Rf cmVhbG1bMF0pIHsgLyogU2V0IGRlZmF1bHQgcmVhbG0gKi8KLSAgICAgICAgY2hhciAqIHA7Ci0g ICAgICAgIHAgPSBja19rcmI1X2dldHJlYWxtKGtyYjVfZF9jYyk7Ci0gICAgICAgIG1ha2VzdHIo JmtyYjVfZF9yZWFsbSwocCAmJiBwWzBdKSA/IHAgOiBOVUxMKTsKLSAgICB9Ci0gICAgbWFrZXN0 cigma3JiNV9pbml0Lmluc3RhbmNlLGtyYjVfZF9pbnN0YW5jZSk7Ci0gICAgbWFrZXN0cigma3Ji NV9pbml0LnJlYWxtLGtyYjVfZF9yZWFsbSk7IC8qIFNldCByZWFsbSBmcm9tIGRlZmF1bHQgKi8K LSAgICBpZiAoa3JiNV9pbml0LnBhc3N3b3JkKSB7Ci0gICAgICAgIG1lbXNldChrcmI1X2luaXQu cGFzc3dvcmQsMHhGRixzdHJsZW4oa3JiNV9pbml0LnBhc3N3b3JkKSk7Ci0gICAgICAgIGZyZWUo a3JiNV9pbml0LnBhc3N3b3JkKTsKLSAgICAgICAga3JiNV9pbml0LnBhc3N3b3JkID0gTlVMTDsK LSAgICB9Ci0gICAgaWYgKCFrcmI1X2RfcHJpbmNpcGFsKSB7ICAgICAgICAgICAgLyogRGVmYXVs dCBwcmluY2lwYWwgKi8KLSAgICAgICAgLyogYSBOdWxsIHByaW5jaXBhbCBpbmRpY2F0ZXMgdGhl IHVzZXIgc2hvdWxkIGJlIHByb21wdGVkICovCi0gICAgICAgIGNoYXIgKiBwID0gY2tfa3JiNV9n ZXRwcmluY2lwYWwoa3JiNV9kX2NjKTsKLSAgICAgICAgaWYgKCFwIHx8ICEoKnApKQotICAgICAg ICAgIHAgPSAoY2hhciAqKXVpZGJ1ZjsgICAgICAgICAgIC8qIFByaW5jaXBhbCA9IHVzZXIgKi8K LSAgICAgICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2RfcHJpbmNpcGFsLChwICYmIHBbMF0pID8g cCA6IE5VTEwpOwotICAgIH0KLSAgICBtYWtlc3RyKCZrcmI1X2luaXQucHJpbmNpcGFsLGtyYjVf ZF9wcmluY2lwYWwpOwotICAgIGZvciAoaSA9IDA7IGkgPD0gS1JCNV9OVU1fT0ZfQUREUlM7IGkr KykgewotICAgICAgICBpZiAoa3JiNV9pbml0LmFkZHJzW2ldKQotICAgICAgICAgIGZyZWUoa3Ji NV9pbml0LmFkZHJzW2ldKTsKLSAgICAgICAga3JiNV9pbml0LmFkZHJzW2ldID0gTlVMTDsKLSAg ICB9Ci0gICAgZm9yIChpID0gMDsgaSA8PSBLUkI1X05VTV9PRl9BRERSUyAmJiBrcmI1X2RfYWRk cnNbaV07IGkrKykgewotICAgICAgICBtYWtlc3RyKCZrcmI1X2luaXQuYWRkcnNbaV0sa3JiNV9k X2FkZHJzW2ldKTsKLSAgICB9Ci0KLSAgICAvKiBLZXJiZXJvcyA0ICovCi0KLSAgICBrcmI0X2lu aXQubGlmZXRpbWUgPSBrcmI0X2RfbGlmZXRpbWU7Ci0gICAga3JiNF9pbml0LnByZWF1dGggID0g a3JiNF9kX3ByZWF1dGg7Ci0gICAgbWFrZXN0cigma3JiNF9pbml0Lmluc3RhbmNlLGtyYjRfZF9p bnN0YW5jZSk7Ci0gICAgaWYgKCFrcmI0X2RfcmVhbG0gfHwgIWtyYjRfZF9yZWFsbVswXSkgey8q IFNldCBkZWZhdWx0IHJlYWxtICovCi0gICAgICAgIGNoYXIgKiBwOwotICAgICAgICBwID0gY2tf a3JiNF9nZXRyZWFsbSgpOwotICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRfZF9yZWFsbSwo cCAmJiBwWzBdKSA/IHAgOiBOVUxMKTsKLSAgICB9Ci0gICAgbWFrZXN0cigma3JiNF9pbml0LnJl YWxtLGtyYjRfZF9yZWFsbSk7Ci0gICAgaWYgKGtyYjRfaW5pdC5wYXNzd29yZCkgewotICAgICAg ICBtZW1zZXQoa3JiNF9pbml0LnBhc3N3b3JkLDB4RkYsc3RybGVuKGtyYjRfaW5pdC5wYXNzd29y ZCkpOwotICAgICAgICBmcmVlKGtyYjRfaW5pdC5wYXNzd29yZCk7Ci0gICAgICAgIGtyYjRfaW5p dC5wYXNzd29yZCA9IE5VTEw7Ci0gICAgfQotICAgIGlmICgha3JiNF9kX3ByaW5jaXBhbCkgeyAg ICAgICAgICAgIC8qIERlZmF1bHQgcHJpbmNpcGFsICovCi0gICAgICAgIC8qIGEgTnVsbCBwcmlu Y2lwYWwgaW5kaWNhdGVzIHRoZSB1c2VyIHNob3VsZCBiZSBwcm9tcHRlZCAqLwotICAgICAgICBj aGFyICogcCA9IGNrX2tyYjRfZ2V0cHJpbmNpcGFsKCk7Ci0gICAgICAgIGlmICghcCB8fCAhKCpw KSkKLSAgICAgICAgICBwID0gKGNoYXIgKil1aWRidWY7ICAgICAgICAgICAvKiBQcmluY2lwYWwg PSB1c2VyICovCi0gICAgICAgIG1ha2VzdHIoJihrcmI0X2RfcHJpbmNpcGFsKSwocCAmJiBwWzBd KSA/IHAgOiBOVUxMKTsKLSAgICB9Ci0gICAgbWFrZXN0cigmKGtyYjRfaW5pdC5wcmluY2lwYWwp LGtyYjRfZF9wcmluY2lwYWwpOwotfQotCi0vKiAgRCBPIEEgVSBUIEggIC0tICBBVVRIRU5USUNB VEUgYWN0aW9uIHJvdXRpbmUgICovCi0KLWludAotZG9hdXRoKGN4KSBpbnQgY3g7IHsgICAgICAg ICAgICAgICAgICAgIC8qIEFVVEhFTlRJQ0FURSBhY3Rpb24gcm91dGluZSAqLwotICAgIGludCBy YyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBjb2RlICovCi0KLSNpZmRl ZiBDS19BVVRIRU5USUNBVElPTgotI2lmZGVmIE9TMgotICAgIGlmICghY2tfc2VjdXJpdHlfbG9h ZGRsbCgpKSAgICAgICAgIC8qIExvYWQgdmFyaW91cyBETExzICovCi0gICAgICByZXR1cm4ocmMp OwotI2VuZGlmIC8qIE9TMiAqLwotICAgIGlmIChrcmJfb3AudmVyc2lvbiA9PSA0KSB7ICAgICAg ICAgIC8qIFZlcnNpb24gPSA0ICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBzaG9fYXV0aChB VVRIVFlQRV9LRVJCRVJPU19WNCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBpZiAo IWNrX2tyYjRfaXNfaW5zdGFsbGVkKCkpIHsKLSAgICAgICAgICAgIHByaW50ZigiP0tlcmJlcm9z IDQgaXMgbm90IGluc3RhbGxlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAg IH0KLSAgICAgICAgc3dpdGNoIChrcmJfYWN0aW9uKSB7ICAgICAgICAgICAvKiBQZXJmb3JtIFY0 IGZ1bmN0aW9ucyAqLwotICAgICAgICAgIGNhc2UgS1JCX0FfSU46ICAgICAgICAgICAgICAgIC8q IElOSVQgKi8KLSAgICAgICAgICAgIHJjIHw9ICEoY2tfa3JiNF9pbml0VEdUKCZrcmJfb3AsJmty YjRfaW5pdCkgPCAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgS1JCX0Ff REU6ICAgICAgICAgICAgICAgIC8qIERFU1RST1kgKi8KLSAgICAgICAgICAgIHJjIHw9ICEoY2tf a3JiNF9kZXN0cm95KCZrcmJfb3ApIDwgMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICBjYXNlIEtSQl9BX0xDOiAgICAgICAgICAgICAgICAvKiBMSVNULUNSRURFTlRJQUxTICovCi0g ICAgICAgICAgICByYyB8PSAhKGNrX2tyYjRfbGlzdF9jcmVkcygma3JiX29wKSA8IDApOwotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGtyYl9vcC52ZXJzaW9u ID09IDUpIHsgICAgICAgICAgLyogVjUgZnVuY3Rpb25zICovCi0jaWZkZWYgQ09NTUVOVAotICAg ICAgICBzaG9fYXV0aChBVVRIVFlQRV9LRVJCRVJPU19WNSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgICBpZiAoIWNrX2tyYjVfaXNfaW5zdGFsbGVkKCkpIHsKLSAgICAgICAgICAgIHBy aW50ZigiP0tlcmJlcm9zIDUgaXMgbm90IGluc3RhbGxlZFxuIik7Ci0gICAgICAgICAgICByZXR1 cm4oMCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChrcmJfYWN0aW9uKSB7Ci0gICAgICAg ICAgY2FzZSBLUkJfQV9JTjogICAgICAgICAgICAgICAgLyogSU5JVCAqLwotICAgICAgICAgICAg cmMgfD0gIShja19rcmI1X2luaXRUR1QoJmtyYl9vcCwma3JiNV9pbml0LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVfaW5pdC5nZXRrNCA/ICZrcmI0X2luaXQgOiAw KSA8IDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBLUkJfQV9ERTogICAg ICAgICAgICAgICAgLyogREVTVFJPWSAqLwotICAgICAgICAgICAgcmMgfD0gIShja19rcmI1X2Rl c3Ryb3koJmtyYl9vcCkgPCAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug S1JCX0FfTEM6ICAgICAgICAgICAgICAgIC8qIExJU1QtQ1JFREVOVElBTFMgKi8KLSAgICAgICAg ICAgIGlmIChrcmJfb3AudmVyc2lvbiA9PSAwKQotICAgICAgICAgICAgICBwcmludGYoIlxuIik7 Ci0gICAgICAgICAgICByYyB8PSAhKGNrX2tyYjVfbGlzdF9jcmVkcygma3JiX29wLCZrcmI1X2xj KSA8IDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotI2lm bmRlZiBOT0lDUAotI2lmbmRlZiBOT1NIT1cKLSAgICByYyA9IHNob19hdXRoKDApOyAgICAgICAg ICAgICAgICAgICAvKiBTaG93IGFsbCAqLwotI2VuZGlmIC8qIE5PU0hPVyAqLwotI2VuZGlmIC8q IE5PSUNQICovCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICByZXR1cm4ocmMp OwotfQotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZm5k ZWYgT1MyCi0jaWZuZGVmIE5PTElTVEVOICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIGlu Y29taW5nIGNvbm5lY3Rpb25zICovCi0KLSNpZm5kZWYgSU5BRERSX0FOWQotI2RlZmluZSBJTkFE RFJfQU5ZIDAKLSNlbmRpZiAvKiBJTkFERFJfQU5ZICovCi0KLV9QUk9UT1RZUCggaW50IHR0YnVm ciwgKCBWT0lEICkgKTsKLV9QUk9UT1RZUCggaW50IHRjcHNydl9vcGVuLCAoY2hhciAqLCBpbnQg KiwgaW50LCBpbnQgKSApOwotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgdGNwc3J2X3BvcnQgPSAw OwotCi0jZW5kaWYgLyogTk9MSVNURU4gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotc3RhdGljIGNo YXIgc3ZjYnVmWzgwXTsgICAgICAgICAgICAgICAgIC8qIFRDUCBzZXJ2aWNlIHN0cmluZyAqLwot c3RhdGljIGludCBzdmNudW0gPSAwOyAgICAgICAgICAgICAgICAgIC8qIFRDUCBwb3J0IG51bWJl ciAqLwotCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLS8qCi0gIFRDUElQTElCIG1lYW5zIHVz ZSBzZXBhcmF0ZSBzb2NrZXQgY2FsbHMgZm9yIGkvbywgd2hpbGUgb24gVU5JWCB0aGUKLSAgbm9y bWFsIGZpbGUgc3lzdGVtIGNhbGxzIGFyZSB1c2VkIGZvciBUQ1AvSVAgc29ja2V0cyB0b28uCi0g IE1lYW5zICJERUNfVENQSVAgb3IgTVVMVElORVQgb3IgV0lOVENQIG9yIE9TMiBvciBCRUJPWCIg KHNlZSBja2NuZXQuaCksCi0qLwotCi0jaWZkZWYgVENQSVBMSUIKLQotLyogRm9yIGJ1ZmZlcmVk IG5ldHdvcmsgcmVhZHMuLi4gKi8KLS8qCi0gIElmIHRoZSBidWZmZXJpbmcgY29kZSBpcyB3cml0 dGVuIHJpZ2h0LCBpdCBzaG91bGRuJ3QgbWF0dGVyCi0gIGhvdyBsb25nIHRoaXMgYnVmZmVyIGlz LgotKi8KLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotI2RlZmluZSBUVElCVUZMIDY0MjQwICAgICAg ICAgICAgICAgICAgIC8qIDQ0ICogMTQ2MCAoTVNTKSAqLwotI2Vsc2UKLSNkZWZpbmUgVFRJQlVG TCAzMjEyMCAgICAgICAgICAgICAgICAgICAvKiAyMiAqIDE0NjAgKE1TUykgKi8KLSNlbmRpZiAv KiBOVCAqLwotI2Vsc2UgLyogT1MyICovCi0jZGVmaW5lIFRUSUJVRkwgODE5MSAgICAgICAgICAg ICAgICAgICAgLyogTGV0J3MgdXNlIDhLLiAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi1DSEFSIHR0 aWJ1ZltUVElCVUZMKzFdOwotCi0vKgotICBzZWxlY3QoKSBpcyB1c2VkIGluIHByZWZlcmVuY2Ug dG8gYWxhcm0oKS9zaWduYWwoKSwgYnV0IGRpZmZlcmVudCBzeXN0ZW1zCi0gIHVzZSBkaWZmZXJl bnQgZm9ybXMgb2Ygc2VsZWN0KCkuLi4KLSovCi0jaWZuZGVmIE5PU0VMRUNUICAgICAgICAgLyog T3B0aW9uIHRvIG92ZXJyaWRlIEJTRFNFTEVDVCAqLwotI2lmZGVmIEJFTExWMTAKLS8qCi0gIE5v dGU6IEFsdGhvdWdoIEJFTExWMTAgZG9lcyBoYXZlIFRDUC9JUCBzdXBwb3J0LCBhbmQgZG9lcyB1 c2UgdGhlIHVuaXF1ZQotICBmb3JtIG9mIHNlbGVjdCgpIHRoYXQgaXMgZXZpZGVudCBpbiB0aGlz IG1vZHVsZSAoYW5kIGluIGNrdXRpby5jKSwgaXQgZG9lcwotICBub3QgaGF2ZSBhIHNvY2tldHMg bGlicmFyeSBhbmQgc28gd2UgY2FuJ3QgYnVpbGQgS2VybWl0IFRDUC9JUCBzdXBwb3J0IGZvcgot ICBpdC4gIEZvciB0aGlzLCBzb21lYm9keSB3b3VsZCBoYXZlIHRvIHdyaXRlIFRDUC9JUCBzdHJl YW1zIGNvZGUuCi0qLwotI2RlZmluZSBCRUxMU0VMRUNUCi0jaWZuZGVmIEZEX1NFVFNJWkUKLSNk ZWZpbmUgRkRfU0VUU0laRSAxMjgKLSNlbmRpZiAvKiBGRF9TRVRTSVpFICovCi0jZWxzZQotI2lm ZGVmIFdJTlRDUCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZNUyB3aXRoIFdvbGxvbmdv bmcgV0lOL1RDUCAqLwotI2lmbmRlZiBPTERfVFdHICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFRXRyAzLjIgaGFzIG9ubHkgc2VsZWN0KHJlYWQpICovCi0jZGVmaW5lIEJTRFNFTEVDVAotI2Vu ZGlmIC8qIE9MRF9UV0cgKi8KLSNlbHNlCi0jaWZkZWYgQ01VX1RDUElQICAgICAgICAgICAgICAg ICAgICAgICAgLyogTElCQ01VIGNhbiBkbyBzZWxlY3QgKi8KLSNkZWZpbmUgQlNEU0VMRUNUCi0j ZWxzZQotI2lmZGVmIERFQ19UQ1BJUAotI2RlZmluZSBCU0RTRUxFQ1QKLSNlbHNlCi0jaWZkZWYg T1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1MvMiB3aXRoIFRDUC9JUCAqLwot I2lmZGVmIE5UCi0jZGVmaW5lIEJTRFNFTEVDVAotI2Vsc2UgLyogTlQgKi8KLSNkZWZpbmUgSUJN U0VMRUNUCi0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBERUNf VENQSVAgKi8KLSNlbmRpZiAvKiBDTVVfVENQSVAgKi8KLSNlbmRpZiAvKiBXSU5UQ1AgKi8KLSNl bmRpZiAvKiBCRUxMVjEwICovCi0jZW5kaWYgLyogTk9TRUxFQ1QgKi8KLS8qCi0gIE90aGVycyAo VEdWLCBUQ1B3YXJlLCAuLi4pIHVzZSBhbGFybSgpL3NpZ25hbCgpLiAgVGhlIEJTRFNFTEVDVCBj YXNlIGRvZXMgbm90Ci0gIGNvbXBpbGUgYXQgYWxsOyB0aGUgSUJNU0VMRUNUIGNhc2UgY29tcGls ZXMgYW5kIGxpbmtzIGJ1dCBjcmFzaGVzIGF0IHJ1bnRpbWUuCi0gIE5PVEU6IElmIGFueSBvZiB0 aGVzZSBjYW4gYmUgY29udmVydGVkIHRvIHNlbGVjdCgpLCB0aGV5IHNob3VsZCBiZSBmb3IgdHdv Ci0gIHJlYXNvbnM6ICgxKSBJdCdzIGEgbG90IGZhc3RlcjsgKDIpIGNlcnRhaW4gc29ja2V0cyBs aWJyYXJpZXMgZG8gbm90IGxpa2UKLSAgdGhlaXIgc29ja2V0X3JlYWQoKSBjYWxscyB0byBiZSBp bnRlcnJ1cHRlZDsgc3Vic2VxdWVudCBzb2NrZXRfcmVhZCgpJ3MgdGVuZAotICB0byBmYWlsIHdp dGggRUJVU1kuICBUaGlzIGhhcHBlbmVkIGluIHRoZSBVQ1ggY2FzZSBiZWZvcmUgaXQgd2FzIGNv bnZlcnRlZAotICB0byB1c2Ugc2VsZWN0KCkuCi0qLwotI2lmbmRlZiBPUzIKLSNpZm5kZWYgVk1T Ci1zdGF0aWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlc2UgYXJlIHVz ZWQgaW4gQ0tWVElPLkMgKi8KLSNlbmRpZiAvKiBWTVMgKi8gICAgICAgICAgICAgICAgICAgICAg ICAvKiBBbmQgaW4gQ0tPTkVULkMgICAgICAgICAgICAqLwotI2VuZGlmIC8qIE9TMiAqLwotaW50 Ci0gIHR0aWJwID0gMCwKLSAgdHRpYm4gPSAwOwotLyoKLSAgUmVhZCBieXRlcyBmcm9tIG5ldHdv cmsgaW50byBpbnRlcm5hbCBidWZmZXIgdHRpYnVmW10uCi0gIFRvIGJlIGNhbGxlZCB3aGVuIGlu cHV0IGJ1ZmZlciBpcyBlbXB0eSwgaS5lLiB3aGVuIHR0aWJuID09IDAuCi0KLSAgT3RoZXIgbmV0 d29yayByZWFkaW5nIHJvdXRpbmVzLCBsaWtlIHR0aW5jLCB0dGlubCwgdHR4aW4sIHNob3VsZCBj aGVjayB0aGUKLSAgaW50ZXJuYWwgYnVmZmVyIGZpcnN0LCBhbmQgY2FsbCB0aGlzIHJvdXRpbmUg Zm9yIGEgcmVmaWxsIGlmIG5lY2Vzc2FyeS4KLQotICBSZXR1cm5zIC0xIG9uIGVycm9yLCAwIGlm IG5vdGhpbmcgaGFwcGVucy4gIFdoZW4gZGF0YSBpcyByZWFkIHN1Y2Nlc3NmdWxseSwKLSAgcmV0 dXJucyBudW1iZXIgb2YgYnl0ZXMgcmVhZCwgYW5kIHNldHMgZ2xvYmFsIHR0aWJuIHRvIHRoYXQg bnVtYmVyIGFuZAotICB0dGlicCAodGhlIGJ1ZmZlciBwb2ludGVyKSB0byB6ZXJvLgotKi8KLV9Q Uk9UT1RZUCggaW50IHR0YnVmciwgKCBWT0lEICkgKTsKLWludAotdHRidWZyKCkgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRUIEJ1ZmZlciBSZWFkICovCi0gICAgaW50IGNvdW50 OwotCi0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSAgICAgICAgICAgICAgLyogRmlyc3QgbWFr ZSBzdXJlIGN1cnJlbnQgbmV0IGlzICovCi0gICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAg ICAgICAgICAgLyogVENQL0lQOyBpZiBub3QsIGRvIG5vdGhpbmcuICovCi0KLSNpZmRlZiBPUzIK LSAgICBSZXF1ZXN0VENQSVBNdXRleChTRU1fSU5ERUZJTklURV9XQUlUKTsKLSNlbmRpZiAvKiBP UzIgKi8KLQotICAgIGlmICh0dGlibiA+IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIE91ciBp bnRlcm5hbCBidWZmZXIgaXMgbm90IGVtcHR5LCAqLwotI2lmZGVmIE9TMgotICAgICAgICBSZWxl YXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm4odHRpYm4p OyAgICAgICAgICAgICAgICAgIC8qIHNvIGtlZXAgdXNpbmcgaXQuICovCi0gICAgfQotCi0gICAg aWYgKHR0eWZkID09IC0xKSB7ICAgICAgICAgICAgICAgICAgLyogTm8gY29ubmVjdGlvbiwgZXJy b3IgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAv KiBPUzIgKi8KLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0KLSAgICB0dGlicCA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBFbHNlIHJlc2V0IHBvaW50ZXIgdG8gYmVnaW5uaW5n ICovCi0KLSNpZmRlZiBXSU5UQ1AKLSAgICBjb3VudCA9IDUxMjsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBUaGlzIHdvcmtzIGZvciBXSU4vVENQICovCi0jZWxzZQotI2lmZGVmIERFQ19UQ1BJ UAotICAgIGNvdW50ID0gNTEyOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVDWCAqLwotI2Vs c2UKLSNpZmRlZiBPUzIKLSAgICBjb3VudCA9IFRUSUJVRkw7Ci0jZWxzZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTXVsdGluZXQsIGV0Yy4gKi8KLSAgICBjb3VudCA9IHR0 Y2hrKCk7ICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBuZXR3b3JrIGlucHV0IGJ1ZmZlciwg Ki8KLSAgICBpZiAodHRpYm4gPiAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiB3aGljaCBjYW4g cHV0IGEgY2hhciB0aGVyZSEgKi8KLSAgICAgICAgZGVidWcoRjExMSwidHRidWZyIiwidHRjaGso KSByZXR1cm5zIixjb3VudCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4 KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVybih0dGlibik7Ci0gICAgfQotICAg IGlmIChjb3VudCA8IDApIHsgICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIGVycm9yIC0gY29u bmVjdGlvbiBjbG9zZWQgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgo KTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0gICAgZWxz ZSBpZiAoY291bnQgPiBUVElCVUZMKSAgICAgICAgICAgLyogVG9vIG1hbnkgdG8gcmVhZCAqLwot ICAgICAgY291bnQgPSBUVElCVUZMOwotICAgIGVsc2UgaWYgKGNvdW50ID09IDApICAgICAgICAg ICAgICAgIC8qIE5vbmUsIHNvIGZvcmNlIGJsb2NraW5nIHJlYWQgKi8KLSAgICAgIGNvdW50ID0g MTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBERUNfVENQSVAgKi8KLSNlbmRpZiAvKiBX SU5UQ1AgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGJ1ZnIgY291bnQgMSIsIiIsY291bnQpOwotCi0j aWZkZWYgQ0tfU1NMCi0gICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcp IHsKLSAgICAgICAgaW50IGVycm9yOwotICAgICAgc3NsX3JlYWQ6Ci0gICAgICAgIGlmIChzc2xf YWN0aXZlX2ZsYWcpCi0gICAgICAgICAgY291bnQgPSBTU0xfcmVhZChzc2xfY29uLCB0dGlidWYs IGNvdW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNvdW50ID0gU1NMX3JlYWQodGxzX2Nv biwgdHRpYnVmLCBjb3VudCk7Ci0gICAgICAgIGVycm9yID0gU1NMX2dldF9lcnJvcihzc2xfYWN0 aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLGNvdW50KTsKLSAgICAgICAgc3dpdGNoIChlcnJvcikg ewotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEx LCJ0dGJ1ZnIgU1NMX0VSUk9SX05PTkUiLCJjb3VudCIsY291bnQpOwotICAgICAgICAgICAgaWYg KGNvdW50ID4gMCkgewotICAgICAgICAgICAgICAgIHR0aWJwID0gMDsgICAgICAgICAgICAgIC8q IFJlc2V0IGJ1ZmZlciBwb2ludGVyLiAqLwotICAgICAgICAgICAgICAgIHR0aWJuID0gY291bnQ7 Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4odHRpYm4pOyAgICAgICAgICAvKiBS ZXR1cm4gYnVmZmVyIGNvdW50LiAqLwotICAgICAgICAgICAgfSBlbHNlIGlmIChjb3VudCA8IDAp IHsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsKLSNpZmRlZiBPUzIKLSAgICAgICAg ICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAg ICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBTU0xfRVJS T1JfV0FOVF9XUklURToKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0YnVmciBTU0xfRVJST1Jf V0FOVF9XUklURSIsIiIsMCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgIFJlbGVhc2VUQ1BJ UE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAg ICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKLSAgICAgICAgICAgIGRlYnVnKEYxMDAs InR0YnVmciBTU0xfRVJST1JfV0FOVF9SRUFEIiwiIiwwKTsKLSNpZmRlZiBPUzIKLSAgICAgICAg ICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICBy ZXR1cm4oLTEpOwotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6Ci0gICAgICAgICAg ICAgIGlmICggY291bnQgPT0gMCApIHsgLyogRU9GICovCi0gICAgICAgICAgICAgICAgICBuZXRj bG9zKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgp OwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIGludCByYyA9IC0xOwotI2lmZGVm IE5UCi0gICAgICAgICAgICAgICAgICBpbnQgZ2xlID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0dGJ1ZnIgU1NMX0VSUk9SX1NZU0NBTEwiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICJHZXRMYXN0RXJyb3IoKSIsZ2xlKTsKLSAgICAgICAgICAgICAg ICAgIHJjID0gb3Myc29ja2V0ZXJyb3IoZ2xlKTsKLSAgICAgICAgICAgICAgICAgIGlmIChyYyA9 PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICByYyA9IC0yOwotICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAoIHJjID09IC0yICkKLSAgICAgICAgICAgICAgICAgICAgICByYyA9IC0xOwotI2Vu ZGlmIC8qIE5UICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBN dXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgcmV0dXJuKHJjKTsK LSAgICAgICAgICAgICAgfQotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09L VVA6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dGJ1ZnIgU1NMX0VSUk9SX1dBTlRfWDUwOV9M T09LVVAiLCIiLDApOwotICAgICAgICAgICAgbmV0Y2xvcygpOwotI2lmZGVmIE9TMgotICAgICAg ICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAg ICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6Ci0gICAgICAgICAg ICAgIGlmIChiaW9fZXJyIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgICBpbnQgbGVuOwotICAg ICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3NsX2VycltdOwotICAgICAgICAgICAgICAgICAg QklPX3ByaW50ZihiaW9fZXJyLCJ0dGJ1ZnIgU1NMX0VSUk9SX1NTTFxuIik7Ci0gICAgICAgICAg ICAgICAgICBFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwotICAgICAgICAgICAgICAgICAgbGVu ID0gQklPX3JlYWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7Ci0gICAgICAgICAgICAg ICAgICBzc2xfZXJyW2xlbiA8IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAn XDAnOwotICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwidHRidWZyIFNTTF9FUlJPUl9TU0wi LHNzbF9lcnIsMCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpICAgICAg ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKHNzbF9lcnIpOwotICAg ICAgICAgICAgICB9IGVsc2UgaWYgKHNzbF9kZWJ1Z19mbGFnKSB7Ci0gICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTAwLCJ0dGJ1ZnIgU1NMX0VSUk9SX1NTTCIsIiIsMCk7Ci0gICAgICAgICAgICAg ICAgICBmZmx1c2goc3RkZXJyKTsKLSAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJ0 dGJ1ZnIgU1NMX0VSUk9SX1NTTFxuIik7Ci0gICAgICAgICAgICAgICAgICBFUlJfcHJpbnRfZXJy b3JzX2ZwKHN0ZGVycik7Ci0gICAgICAgICAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0JICAgICAg bmV0Y2xvcygpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAg ICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIHJl dHVybigtMik7Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJ0dGJ1ZnIgU1NMX0VSUk9SX1pFUk9fUkVUVVJOIiwiIiwwKTsKLSAg ICAgICAgICAgIG5ldGNsb3MoKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgUmVsZWFzZVRD UElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIHJldHVybigtMik7Ci0g ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRidWZyIFNTTF9F UlJPUl8/Pz8/PyIsIiIsMCk7Ci0gICAgICAgICAgICAgIG5ldGNsb3MoKTsKLSNpZmRlZiBPUzIK LSAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAg ICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENL X1NTTCAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyoKLSBUaGlzIGlzIGZvciBub25ibG9ja2luZyBy ZWFkcywgd2hpY2ggd2UgZG9uJ3QgZG8gYW55IG1vcmUuICBUaGlzIGNvZGUgZGlkbid0Ci0gd29y ayBhbnl3YXksIGluIHRoZSBzZW5zZSB0aGF0IGEgYnJva2VuIGNvbm5lY3Rpb24gd2FzIG5ldmVy IHNlbnNlZC4KLSovCi0gICAgaWYgKChjb3VudCA9IHNvY2tldF9yZWFkKHR0eWZkLCZ0dGlidWZb dHRpYnArdHRpYm5dLGNvdW50KSkgPCAxKSB7Ci0gICAgICAgIGlmIChjb3VudCA9PSAtMSAmJiBz b2NrZXRfZXJybm8gPT0gRVdPVUxEQkxPQ0spIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0 YnVmciBmaW5kcyBub3RoaW5nIiwiIiwwKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIFJlbGVh c2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICByZXR1cm4oMCk7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0dGJ1ZnIgc29ja2V0 X3JlYWQgZXJyb3IiLCIiLHNvY2tldF9lcnJubyk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICBS ZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgcmV0dXJu KC0xKTsKLSAgICAgICAgfQotCi0gICAgfSBlbHNlIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgICAg IGRlYnVnKEYxMDAsInR0YnVmciBzb2NrZXQgZW9mIiwiIiwwKTsKLSNpZmRlZiBPUzIKLSAgICAg ICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJu KC0xKTsKLSAgICB9Ci0jZWxzZSAvKiBDT01NRU5UICovCi0KLS8qIFRoaXMgaXMgZm9yIGJsb2Nr aW5nIHJlYWRzICovCi0KLSNpZm5kZWYgVk1TCi0jaWZkZWYgU09fT09CSU5MSU5FCi0gICAgewot ICAgICAgICBpbnQgb3V0b2ZiYW5kID0gMDsKLSNpZmRlZiBCRUxMU0VMRUNUCi0gICAgICAgIGlm IChzZWxlY3QoMTI4LCBOVUxMLCBOVUxMLCBlZmRzLCAwKSA+IDAgJiYgRkRfSVNTRVQodHR5ZmQs IGVmZHMpKQotICAgICAgICAgIG91dG9mYmFuZCA9IDE7Ci0jZWxzZQotI2lmZGVmIEJTRFNFTEVD VAotICAgICAgICBmZF9zZXQgZWZkczsKLSAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7Ci0gICAg ICAgIEZEX1pFUk8oJmVmZHMpOwotICAgICAgICBGRF9TRVQodHR5ZmQsICZlZmRzKTsKLSAgICAg ICAgdHYudHZfc2VjICA9IHR2LnR2X3VzZWMgPSAwTDsKLSAgICAgICAgZGVidWcoRjEwMCwiT3V0 LW9mLUJhbmQgQlNEU0VMRUNUIiwiIiwwKTsKLSNpZmRlZiBOVAotICAgICAgICBXU0FTYWZlVG9D YW5jZWwgPSAxOwotI2VuZGlmIC8qIE5UICovCi0gICAgICAgIGlmIChzZWxlY3QoRkRfU0VUU0la RSwgTlVMTCwgTlVMTCwgJmVmZHMsICZ0dikgPiAwICYmCi0gICAgICAgICAgICBGRF9JU1NFVCh0 dHlmZCwgJmVmZHMpKQotICAgICAgICAgIG91dG9mYmFuZCA9IDE7Ci0jaWZkZWYgTlQKLSAgICAg ICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UgLyogIUJTRFNF TEVDVCAqLwotI2lmZGVmIElCTVNFTEVDVAotLyogSXMgdXNlZCBieSBPUy8yIC4uLiAqLwotLyog Li4uIGFuZCBpdCBjYW1lIGluIGhhbmR5ISAgRm9yIG91ciBUQ1AvSVAgbGF5ZXIsIGl0IGF2b2lk cyBhbGwgdGhlIGZkX3NldCAqLwotLyogYW5kIHRpbWV2YWwgc3R1ZmYgc2luY2UgdGhpcyBpcyB0 aGUgb25seSBwbGFjZSB3aGVyZSBpdCBpcyB1c2VkLiAqLwotICAgICAgICBpbnQgc29ja2V0ID0g dHR5ZmQ7Ci0gICAgICAgIGRlYnVnKEYxMDAsIk91dC1vZi1CYW5kIElCTVNFTEVDVCIsIiIsMCk7 Ci0gICAgICAgIGlmICgoc2VsZWN0KCZzb2NrZXQsIDAsIDAsIDEsIDBMKSA9PSAxKSAmJiAoc29j a2V0ID09IHR0eWZkKSkKLSAgICAgICAgICBvdXRvZmJhbmQgPSAxOwotI2Vsc2UgLyogIUlCTVNF TEVDVCAqLwotLyoKLSAgSWYgd2UgY2FuJ3QgdXNlIHNlbGVjdCgpLCB0aGVuIHdlIHVzZSB0aGUg cmVndWxhciBhbGFybSgpL3NpZ25hbCgpCi0gIHRpbWVvdXQgbWVjaGFuaXNtLgotKi8KLSAgICAg IGRlYnVnKEYxMDEsIk91dC1vZi1CYW5kIGRhdGEgbm90IHN1cHBvcnRlZCIsIiIsMCk7Ci0gICAg ICBvdXRvZmJhbmQgPSAwOwotCi0jZW5kaWYgLyogSUJNU0VMRUNUICovCi0jZW5kaWYgLyogQlNE U0VMRUNUICovCi0jZW5kaWYgLyogQkVMTFNFTEVDVCAqLwotICAgICAgaWYgKG91dG9mYmFuZCkg ewotICAgICAgICAgLyogR2V0IHRoZSBVcmdlbnQgRGF0YSAqLwotICAgICAgICAgLyogaWYgT09C SU5MSU5FIGlzIGRpc2FibGVkIHRoaXMgc2hvdWxkIGJlIG9ubHkgYSBzaW5nbGUgYnl0ZSAgICAg ICovCi0gICAgICAgICAvKiBNUyBXaW5zb2NrIGhhcyBhIGJ1ZyBpbiBXaW5kb3dzIDk1LiAgRXh0 cmEgYnl0ZXMgYXJlIGRlbGl2ZXJlZCAgKi8KLSAgICAgICAgIC8qIFRoYXQgd2VyZSBuZXZlciBz ZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmZGVm IE9TMgotICAgICAgICAgIFJlcXVlc3RUQ1BJUE11dGV4KFNFTV9JTkRFRklOSVRFX1dBSVQpOwot I2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgIGNvdW50ID0gc29ja2V0X3JlY3YodHR5ZmQsJnR0 aWJ1Zlt0dGlicCt0dGlibl0sY291bnQsTVNHX09PQik7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAg UmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICBpZiAoY291 bnQgPD0gMCkgewotICAgICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsKLSAg ICAgICAgICAgICAgZGVidWcoRjEwMSwgInR0YnVmciBzb2NrZXRfcmVjdiBNU0dfT09CIiwiIixj b3VudCk7Ci0gICAgICAgICAgICAgIGRlYnVnKEYxMDEsICJ0dGJ1ZnIgc29ja2V0X2Vycm5vIiwi IixzX2Vycm5vKTsKLSNpZmRlZiBPUzJPTkxZCi0gICAgICAgICAgICAgIGlmIChjb3VudCA8IDAg JiYgKHNfZXJybm8gPT0gMCB8fCBzX2Vycm5vID09IDIzKSkgewotICAgICAgICAgICAgICAgICAg LyogVGhlc2UgYXBwZWFyIGluIE9TLzIgLSBkb24ndCBrbm93IHdoeSAgICovCi0gICAgICAgICAg ICAgICAgICAvKiBpZ25vcmUgaXQgYW5kIHJlYWQgYXMgbm9ybWFsIGRhdGEgICAgICAgKi8KLSAg ICAgICAgICAgICAgICAgIC8qIGFuZCBicmVhaywgdGhlbiB3ZSB3aWxsIGF0dGVtcHQgdG8gcmVh ZCAqLwotICAgICAgICAgICAgICAgICAgLyogdGhlIHBvcnQgdXNpbmcgbm9ybWFsIHJlYWQoKSB0 ZWNobmlxdWVzICovCi0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dGJ1ZnIgaGFuZGlu ZyBhcyBpbi1iYW5kIGRhdGEiLCIiLDApOwotICAgICAgICAgICAgICAgICAgY291bnQgPSAxOwot ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgbmV0Y2xvcygpOyAgICAg ICAgICAgICAgICAgICAgLyogKioqICoqKiAqLwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAg ICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAg ICAgIHJldHVybigtMik7Ci0gICAgICAgICAgICAgIH0KLSNlbHNlIC8qIE9TMk9OTFkgKi8KLSAg ICAgICAgICAgICAgbmV0Y2xvcygpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qICoqKiAqKiog Ki8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBPUzJPTkxZ ICovCi0gICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogd2UgZ290IG91 dC1vZi1iYW5kIGRhdGEgKi8KLSAgICAgICAgICAgICAgY2toZXhkdW1wKCJ0dGJ1ZnIgb3V0LW9m LWJhbmQgY2hhcnMiLCZ0dGlidWZbdHRpYnArdHRpYm5dLGNvdW50KTsKLSNpZmRlZiBCRVRBREVC VUcKLSAgICAgICAgICAgICAgYmxlZXAoQlBfTk9URSk7Ci0jZW5kaWYgLyogQkVUQURFQlVHICov Ci0jaWZkZWYgUkxPR0NPREUgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmxhaCAqLwotICAg ICAgICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfUkxPR0lOICB8fAotICAgICAgICAgICAgICAg ICAgdHRucHJvdG8gPT0gTlBfSzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzRMT0dJTiB8fAot ICAgICAgICAgICAgICAgICAgKCh0dG5wcm90byA9PSBOUF9LNUxPR0lOIHx8IHR0bnByb3RvID09 IE5QX0VLNUxPR0lOKSAmJiAKLSAgICAgICAgICAgICAgICAgICFybG9nX2luYmFuZCkKLSAgICAg ICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8qCi0g ICAgICAgICAgICAgICAgICAgIFdoZW4gdXJnZW50IGRhdGEgaXMgcmVhZCB3aXRoIE1TR19PT0Ig YW5kIG5vdCBPT0JJTkxJTkUKLSAgICAgICAgICAgICAgICAgICAgdGhlbiB1cmdlbnQgZGF0YSBh bmQgbm9ybWFsIGRhdGEgYXJlIG5vdCBtaXhlZC4gIFNvCi0gICAgICAgICAgICAgICAgICAgIHRy ZWF0IHRoZSBlbnRpcmUgYnVmZmVyIGFzIHVyZ2VudCBkYXRhLgotICAgICAgICAgICAgICAgICAg Ki8KLSAgICAgICAgICAgICAgICAgIHJsb2dfb29iKCZ0dGlidWZbdHRpYnArdHRpYm5dLCBjb3Vu dCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwot I2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgcmV0dXJuIHR0YnVmcigpOwotICAg ICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLyAvKiBibGFoICovCi0jaWZk ZWYgQ09NTUVOVAotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgIEkgaGF2ZW4ndCB3cml0 dGVuIHRoaXMgeWV0LCBub3IgZG8gSSBrbm93IHdoYXQgaXQgc2hvdWxkIGRvCi0gICAgICAgICAg ICAgKi8KLSAgICAgICAgICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfVEVMTkVUKSB7Ci0gICAg ICAgICAgICAgICAgICAgIHRuX29vYigpOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAg ICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAg ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvKiBGb3IgYW55IHByb3RvY29s cyB3ZSBkb24ndCBoYXZlIGEgc3BlY2lhbCBvdXQtb2YtYmFuZCAgKi8KLSAgICAgICAgICAgICAg ICAgIC8qIGhhbmRsZXIgZm9yLCBqdXN0IHB1dCB0aGUgYnl0ZXMgaW4gdGhlIG5vcm1hbCBidWZm ZXIgICAqLwotICAgICAgICAgICAgICAgICAgLyogYW5kIHJldHVybiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgICAgICAgIHR0aWJw ICs9IDA7ICAgICAgIC8qIFJlc2V0IGJ1ZmZlciBwb2ludGVyLiAqLwotICAgICAgICAgICAgICAg ICAgdHRpYm4gKz0gY291bnQ7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgICAgICAgIC8qIEdv dCBzb21lIGJ5dGVzLiAqLwotICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwidHRidWZyIGNv dW50IDIiLCIiLGNvdW50KTsKLSAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDApCi0gICAg ICAgICAgICAgICAgICAgICAgdHRpYnVmW3R0aWJwK3R0aWJuXSA9ICdcMCc7Ci0gICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJ0dGJ1ZnIgdHRpYnVmIix0dGlidWYsdHRpYnApOwotI2VuZGlm IC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBN dXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgcmV0dXJuKHR0aWJu KTsgICAgLyogUmV0dXJuIGJ1ZmZlciBjb3VudC4gKi8KLSAgICAgICAgICAgICAgfQotICAgICAg ICAgIH0KLSAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogU09fT09CSU5MSU5FICovCi0jZW5kaWYg LyogVk1TICovCi0KLSAgICBjb3VudCA9IHNvY2tldF9yZWFkKHR0eWZkLCZ0dGlidWZbdHRpYnAr dHRpYm5dLGNvdW50KTsKLSAgICBpZiAoY291bnQgPD0gMCkgewotICAgICAgICBpbnQgc19lcnJu byA9IHNvY2tldF9lcnJubzsKLSAgICAgICAgZGVidWcoRjEwMSwidHRidWZyIHNvY2tldF9yZWFk IiwiIixjb3VudCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInR0YnVmciBzb2NrZXRfZXJybm8iLCIi LHNfZXJybm8pOwotI2lmZGVmIE9TMgotICAgICAgICBpZiAoY291bnQgPT0gMCB8fCBvczJzb2Nr ZXRlcnJvcihzX2Vycm5vKSA8IDApIHsKLSAgICAgICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAg ICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAg ICB9Ci0gICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0j ZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgbmV0Y2xvcygpOyAgICAgICAgICAgICAgICAgICAgICAv KiAqKiogKioqICovCi0gICAgICAgIHJldHVybigtMik7Ci0jZW5kaWYgLyogT1MyICovCi0gICAg fQotI2VuZGlmIC8qIENPTU1FTlQgKi8gLyogKGJsb2NraW5nIHZzIG5vbmJsb2NrIHJlYWRzLi4u KSAqLwotICAgIGVsc2UgewotICAgICAgICB0dGlicCA9IDA7ICAgICAgICAgICAgICAgICAgICAg IC8qIFJlc2V0IGJ1ZmZlciBwb2ludGVyLiAqLwotICAgICAgICB0dGlibiArPSBjb3VudDsKLSNp ZmRlZiBERUJVRwotICAgICAgICBkZWJ1ZyhGMTAxLCJ0dGJ1ZnIgY291bnQgMiIsIiIsY291bnQp OyAvKiBHb3Qgc29tZSBieXRlcy4gKi8KLSAgICAgICAgaWYgKGNvdW50ID4gMCkKLSAgICAgICAg ICB0dGlidWZbdHRpYnArdHRpYm5dID0gJ1wwJzsKLSAgICAgICAgZGVidWcoRjExMSwidHRidWZy IHR0aWJ1ZiIsJnR0aWJ1Zlt0dGlicF0sdHRpYm4pOwotI2VuZGlmIC8qIERFQlVHICovCi0KLSNp ZmRlZiBPUzIKLSAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICAgICAgcmV0dXJuKHR0aWJuKTsgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gYnVmZmVy IGNvdW50LiAqLwotICAgIH0KLX0KLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotCi0jaWZuZGVmIElC TVNFTEVDVAotI2lmbmRlZiBCRUxMU0VMRUNUCi0jaWZuZGVmIEJTRFNFTEVDVCAgICAgICAgICAg ICAgIC8qIE5vbi1UQ1BJUExJQiBjYXNlICovCi0jaWZkZWYgU0VMRUNUCi0jZGVmaW5lIEJTRFNF TEVDVAotI2VuZGlmIC8qIFNFTEVDVCAqLwotI2VuZGlmIC8qIEJTRFNFTEVDVCAqLwotI2VuZGlm IC8qIEJFTExTRUxFQ1QgKi8KLSNlbmRpZiAvKiBJQk1TRUxFQ1QgKi8KLQotI2RlZmluZSBURUxO RVRfUE9SVCAyMyAgICAgICAgICAvKiBTaG91bGQgZG8gbG9va3VwLCBidXQgaXQgd29uJ3QgY2hh bmdlICovCi0jZGVmaW5lIFJMT0dJTl9QT1JUIDUxMwotI2RlZmluZSBLRVJNSVRfUE9SVCAxNjQ5 Ci0jZGVmaW5lIEtMT0dJTl9QT1JUIDU0MwotI2RlZmluZSBFS0xPR0lOX1BPUlQgMjEwNQotCi0j aWZuZGVmIE5PTkVUCi0vKgotICBDLUtlcm1pdCBuZXR3b3JrIG9wZW4vY2xvc2UgZnVuY3Rpb25z IGZvciBCU0Qtc29ja2V0cy4KLSAgTXVjaCBvZiB0aGlzIGNvZGUgc2hhcmVkIGJ5IFN1bkxpbmsg WC4yNSwgd2hpY2ggYWxzbyB1c2VzIHRoZSBzb2NrZXQgbGlicmFyeS4KLSovCi0KLS8qICBOIEUg VCBPIFAgTiAgLS0gIE9wZW4gYSBuZXR3b3JrIGNvbm5lY3Rpb24uICAqLwotLyoKLSAgQ2FsbCB3 aXRoOgotICAgIG5hbWUgb2YgaG9zdCAob3IgaG9zdDpzZXJ2aWNlKSwKLSAgICBsY2wgLSBsb2Nh bC1tb2RlIGZsYWcgdG8gYmUgc2V0IGlmIHRoaXMgZnVuY3Rpb24gc3VjY2VlZHMsCi0gICAgbmV0 d29yayB0eXBlIC0gdmFsdWUgZGVmaW5lZCBpbiBja3VuZXQuaC4KLSovCi0jaWZkZWYgVENQU09D S0VUCi1zdHJ1Y3QgaG9zdGVudCAqCi0jaWZkZWYgQ0tfQU5TSUMKLWNrX2NvcHlob3N0ZW50KHN0 cnVjdCBob3N0ZW50ICogaCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi1ja19jb3B5aG9zdGVudCho KSBzdHJ1Y3QgaG9zdGVudCAqIGg7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICAvKgot ICAgICAqICBUaGUgaG9zdGVudCBzdHJ1Y3R1cmUgaXMgZHluYW1pYyBpbiBuYXR1cmUuCi0gICAg ICogIHN0cnVjdCAgaG9zdGVudCB7Ci0gICAgICogIGNoYXIgICAgKiBoX25hbWU7Ci0gICAgICog IGNoYXIgICAgKiAqIGhfYWxpYXNlczsKLSAgICAgKiAgc2hvcnQgICBoX2FkZHJ0eXBlOwotICAg ICAqICBzaG9ydCAgIGhfbGVuZ3RoOwotICAgICAqICBjaGFyICAgICogKiBoX2FkZHJfbGlzdDsK LSAgICAgKiAgI2RlZmluZSBoX2FkZHIgIGhfYWRkcl9saXN0WzBdCi0gICAgICovCi0jZGVmaW5l IEhPU1RFTlRDTlQgNQotICAgIHN0YXRpYyBzdHJ1Y3QgaG9zdGVudCBob3N0c1tIT1NURU5UQ05U XSA9IHt7TlVMTCxOVUxMLDAsMCxOVUxMfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAge05VTEwsTlVMTCwwLDAsTlVMTH0sCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtOVUxMLE5VTEwsMCwwLE5VTEx9LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7TlVMTCxOVUxMLDAs MCxOVUxMfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg e05VTEwsTlVMTCwwLDAsTlVMTH19OwotICAgIHN0YXRpYyBpbnQgICAgbmV4dCA9IDA7Ci0gICAg aW50ICAgIGksY250OwotICAgIGNoYXIgKiogcHA7Ci0KLSAgICBpZiAoIGggPT0gTlVMTCApCi0g ICAgICAgIHJldHVybihOVUxMKTsKLQotICAgIGlmIChuZXh0ID09IEhPU1RFTlRDTlQpCi0gICAg ICAgIG5leHQgPSAwOwotCi0gICAgaWYgKCBob3N0c1tuZXh0XS5oX25hbWUgKSB7Ci0gICAgICAg IGZyZWUoaG9zdHNbbmV4dF0uaF9uYW1lKTsKLSAgICAgICAgaG9zdHNbbmV4dF0uaF9uYW1lID0g TlVMTDsKLSAgICB9Ci0gICAgaWYgKCBob3N0c1tuZXh0XS5oX2FsaWFzZXMgKSB7Ci0gICAgICAg IHBwID0gaG9zdHNbbmV4dF0uaF9hbGlhc2VzOwotICAgICAgICB3aGlsZSAoICpwcCApIHsKLSAg ICAgICAgICAgIGZyZWUoKnBwKTsKLSAgICAgICAgICAgIHBwKys7Ci0gICAgICAgIH0KLSAgICAg ICAgZnJlZShob3N0c1tuZXh0XS5oX2FsaWFzZXMpOwotICAgIH0KLSNpZmRlZiBIQUREUkxJU1QK LSAgICBpZiAoIGhvc3RzW25leHRdLmhfYWRkcl9saXN0ICkgewotICAgICAgICBwcCA9IGhvc3Rz W25leHRdLmhfYWRkcl9saXN0OwotICAgICAgICB3aGlsZSAoICpwcCApIHsKLSAgICAgICAgICAg IGZyZWUoKnBwKTsKLSAgICAgICAgICAgIHBwKys7Ci0gICAgICAgIH0KLSAgICAgICAgZnJlZSho b3N0c1tuZXh0XS5oX2FkZHJfbGlzdCk7Ci0gICAgfQotI2VuZGlmIC8qIEhBRERSTElTVCAqLwot Ci0gICAgbWFrZXN0cigmaG9zdHNbbmV4dF0uaF9uYW1lLGgtPmhfbmFtZSk7Ci0gICAgaWYgKGgt PmhfYWxpYXNlcykgewotICAgICAgICBmb3IgKCBjbnQ9MCxwcD1oLT5oX2FsaWFzZXM7IHBwICYm ICpwcDsgcHArKyxjbnQrKykgOwotICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGNhbiBnaXZlIHdh cm5pbmdzIGluIG5vbi1BTlNJIGJ1aWxkcyAqLwotICAgICAgICBob3N0c1tuZXh0XS5oX2FsaWFz ZXMgPSAoY2hhciAqKikgbWFsbG9jKHNpemVvZihjaGFyICopICogKGNudCsxKSk7Ci0gICAgICAg IGZvciAoIGk9MDsgaTxjbnQ7IGkrKykgewotICAgICAgICAgICAgaG9zdHNbbmV4dF0uaF9hbGlh c2VzW2ldID0gTlVMTDsKLSAgICAgICAgICAgIG1ha2VzdHIoJmhvc3RzW25leHRdLmhfYWxpYXNl c1tpXSxoLT5oX2FsaWFzZXNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIGhvc3RzW25leHRdLmhf YWxpYXNlc1tpXSA9IE5VTEw7Ci0gICAgfSBlbHNlCi0gICAgICAgIGhvc3RzW25leHRdLmhfYWxp YXNlcyA9IE5VTEw7Ci0KLSAgICBob3N0c1tuZXh0XS5oX2FkZHJ0eXBlID0gaC0+aF9hZGRydHlw ZTsKLSAgICBob3N0c1tuZXh0XS5oX2xlbmd0aCA9IGgtPmhfbGVuZ3RoOwotCi0jaWZkZWYgSEFE RFJMSVNUCi0jaWZkZWYgaF9hZGRyCi0gICAgaWYgKGgtPmhfYWRkcl9saXN0KSB7Ci0gICAgICAg IGZvciAoIGNudD0wLHBwPWgtPmhfYWRkcl9saXN0OyBwcCAmJiAqcHA7IHBwKyssY250KyspIDsK LSAgICAgICAgLyogVGhlIGZvbGxvd2luZyBjYW4gZ2l2ZSB3YXJuaW5ncyBub24tQU5TSSBidWls ZHMgKi8KLSAgICAgICAgaG9zdHNbbmV4dF0uaF9hZGRyX2xpc3QgPSAoY2hhciAqKikgbWFsbG9j KHNpemVvZihjaGFyICopICogKGNudCsxKSk7Ci0gICAgICAgIGZvciAoIGk9MDsgaTxjbnQ7IGkr KykgewotICAgICAgICAgICAgaG9zdHNbbmV4dF0uaF9hZGRyX2xpc3RbaV0gPSBtYWxsb2MoaC0+ aF9sZW5ndGgpOwotICAgICAgICAgICAgYmNvcHkoaC0+aF9hZGRyX2xpc3RbaV0saG9zdHNbbmV4 dF0uaF9hZGRyX2xpc3RbaV0saC0+aF9sZW5ndGgpOwotICAgICAgICB9Ci0gICAgICAgIGhvc3Rz W25leHRdLmhfYWRkcl9saXN0W2ldID0gTlVMTDsKLSAgICB9IGVsc2UKLSAgICAgICAgaG9zdHNb bmV4dF0uaF9hZGRyX2xpc3QgPSBOVUxMOwotI2Vsc2UKLSAgICBiY29weShoLT5oX2FkZHIsICZo b3N0c1tuZXh0XS5oX2FkZHIsIGgtPmhfbGVuZ3RoKTsKLSNlbmRpZiAvKiBoX2FkZHIgKi8KLSNl bHNlIC8qIEhBRERSTElTVCAqLwotICAgIGJjb3B5KGgtPmhfYWRkciwgJmhvc3RzW25leHRdLmhf YWRkciwgaC0+aF9sZW5ndGgpOwotI2VuZGlmIC8qIEhBRERSTElTVCAqLwotCi0gICAgcmV0dXJu KCZob3N0c1tuZXh0KytdKTsKLX0KLQotI2lmZGVmIEVYQ0VMQU4KLS8qCi0gIE1vc3Qgb3RoZXIg QlNEIHNvY2tldHMgaW1wbGVtZW50YXRpb25zIGRlZmluZSB0aGVzZSBpbiBoZWFkZXIgZmlsZXMK LSAgYW5kIGxpYnJhcmllcy4KLSovCi1zdHJ1Y3Qgc2VydmVudCB7Ci0gICAgdW5zaWduZWQgc2hv cnQgc19wb3J0OwotfTsKLQotc3RydWN0IGhvc3RlbnQgewotICAgIHNob3J0IGhfYWRkcnR5cGU7 Ci0gICAgc3RydWN0IGluX2FkZHIgaF9hZGRyOwotICAgIGludCBoX2xlbmd0aDsKLX07Ci0KLXN0 cnVjdCBzZXJ2ZW50ICoKLWdldHNlcnZieW5hbWUoc2VydmljZSwgY29ubmVjdGlvbikgY2hhciAq c2VydmljZSwqY29ubmVjdGlvbjsgewotICAgIHN0YXRpYyBzdHJ1Y3Qgc2VydmVudCBzZXJ2cmVj OwotICAgIGludCBwb3J0OwotCi0gICAgcG9ydCA9IDA7Ci0gICAgaWYgKHN0cmNtcChzZXJ2aWNl LCAidGVsbmV0IikgPT0gMCkgcG9ydCA9IDIzOwotICAgIGVsc2UgaWYgKHN0cmNtcChzZXJ2aWNl LCAic210cCIpID09IDApIHBvcnQgPSAyNTsKLSAgICBlbHNlIHBvcnQgPSBhdG9pKHNlcnZpY2Up OwotCi0gICAgZGVidWcoRjEwMSwiZ2V0c2VydmJ5bmFtZSByZXR1cm4gcG9ydCAiLCIiLHBvcnQp OwotCi0gICAgaWYgKHBvcnQgPiAwKSB7Ci0gICAgICAgIHNlcnZyZWMuc19wb3J0ID0gaHRvbnMo cG9ydCk7Ci0gICAgICAgIHJldHVybigmc2VydnJlYyk7Ci0gICAgfQotICAgIHJldHVybigoc3Ry dWN0IHNlcnZlbnQgKikgTlVMTCk7Ci19Ci0KLXN0cnVjdCBob3N0ZW50ICoKLWdldGhvc3RieW5h bWUoaG9zdG5hbWUpIGNoYXIgKmhvc3RuYW1lOyB7Ci0gICAgcmV0dXJuKChzdHJ1Y3QgaG9zdGVu dCAqKSBOVUxMKTsKLX0KLQotdW5zaWduZWQgbG9uZwotaW5ldF9hZGRyKG5hbWUpIGNoYXIgKm5h bWU7IHsKLSAgICB1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLSAgICBhZGRyID0gcmhvc3QoJm5hbWUp OwotICAgIGRlYnVnKEYxMTEsImluZXRfYWRkciAiLG5hbWUsKGludClhZGRyKTsKLSAgICByZXR1 cm4oYWRkcik7Ci19Ci0KLWNoYXIgKgotaW5ldF9udG9hKGluKSBzdHJ1Y3QgaW5fYWRkciBpbjsg ewotICAgIHN0YXRpYyBjaGFyIG5hbWVbODBdOwotICAgIGNrbWFreG1zZyhuYW1lLCBja3VpdG9h KGluLnNfbmV0KSwiLiIsY2t1aXRvYShpbi5zX2hvc3QpLCIuIiwKLSAgICAgICAgICAgICAgIGNr dWl0b2EoaW4uc19saCksIi4iLCBja3VpdG9hKGluLnNfaW1wbm8pKTsKLSAgICByZXR1cm4obmFt ZSk7Ci19Ci0jZWxzZQotI2lmZGVmIERFQ19UQ1BJUCAgICAgICAgICAgICAgICAgICAgICAgIC8q IFVDWCAqLwotCi1pbnQgdWN4X3BvcnRfYnVnID0gMDsgICAgICAgICAgICAgICAgICAgLyogRXhw bGFpbmVkIGJlbG93ICovCi0KLSNpZmRlZiBPTERJUAkJCQkvKiBWZXJ5IG9sZCBWQVhDIG9yIEdD QyAqLwotLyoKLSAgTm90ZSB0aGF0IG15IG9sZGVzdCBWQVggQyAoVjMuMS0wNTEpIGRvZXMgbm90 IG5lZWQgKG9yIHdhbnQpIE9MRElQLAotICBoZW5jZSB0aGUgIlZlcnkgb2xkIiBpbiB0aGUgY29t bWVudCAtIFNNUywgMjAxMC8wMy8xNS4KLSovCi0jZGVmaW5lIGdldHNlcnZieW5hbWUgbXlfZ2V0 c2VydmJ5bmFtZQotCi0jaWZkZWYgQ0tfQU5TSUMKLWdsb2JhbHJlZiBpbnQgKCpDJCRHQV9VQ1hf R0VUU0VSVkJZTkFNRSkoKTsKLWV4dGVybiB2b2lkIEMkJFRSQU5TTEFURSgpOwotZXh0ZXJuIHZv aWQgQyQkU09DS19UUkFOU0xBVEUoKTsKLSNlbHNlCi1nbG9iYWxyZWYgaW50ICgqQyQkR0FfVUNY X0dFVFNFUlZCWU5BTUUpKCk7Ci1leHRlcm4gVk9JRCBDJCRUUkFOU0xBVEUoKTsKLWV4dGVybiBW T0lEIEMkJFNPQ0tfVFJBTlNMQVRFKCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLQotc3RydWN0 IHNlcnZlbnQgKgotbXlfZ2V0c2VydmJ5bmFtZSAoc2VydmljZSwgcHJvdG8pIGNoYXIgKnNlcnZp Y2UsICpwcm90bzsgewotICAgIHN0YXRpYyBzdHJ1Y3Qgc2VydmVudCBzZW50OwotICAgIHN0cnVj dCBpb3NiIHsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzdGF0 dXM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdFsyXTsKLSAgICAgICAgfSBzYjsKLSAg ICAgICAgdW5zaWduZWQgbG9uZyBzcGFyZTsKLSAgICB9IHM7Ci0gICAgc3RydWN0IHsKLSAgICAg ICAgc3RydWN0IGlvc2IgKnM7Ci0gICAgICAgIGNoYXIgKnNlcnY7Ci0gICAgICAgIGNoYXIgKnBy b3Q7Ci0gICAgfSBwYXI7Ci0gICAgdW5zaWduZWQgbG9uZyBlOwotICAgIGNoYXIgc2J1ZlszMF0s IHBidWZbMzBdOwotICAgIGNoYXIgKnA7Ci0KLSAgICBkZWJ1ZyhGMTExLCJVQ1ggZ2V0c2VydmJ5 bmFtZSIsc2VydmljZSwoaW50KUMkJEdBX1VDWF9HRVRTRVJWQllOQU1FKTsKLQotICAgIHAgPSBz YnVmOwotICAgIGNrc3RybmNweShwLCBzZXJ2aWNlLCAyOSk7Ci0gICAgd2hpbGUgKCpwID0gdG91 cHBlcigqcCksICpwKyspIHt9Ci0gICAgcCA9IHBidWY7Ci0gICAgY2tzdHJuY3B5KHAsIHByb3Rv LCAyOSk7Ci0gICAgd2hpbGUgKCpwID0gdG91cHBlcigqcCksICpwKyspIHt9Ci0KLSAgICBwYXIu cyA9ICZzOwotCi0gICAgcGFyLnNlcnYgPSAiIjsKLSAgICBwYXIucHJvdCA9ICIiOwotICAgIC8q IHJlc2V0IGZpbGUgcG9pbnRlciBvciBzb21ldGhpbmcgbGlrZSB0aGF0IT8hPyAqLwotICAgIGUg PSAoKkMkJEdBX1VDWF9HRVRTRVJWQllOQU1FKSgmcGFyLCAmc2VudCwgcGFyLnMpOwotICAgIHBh ci5zZXJ2ID0gc2J1ZjsKLSAgICBwYXIucHJvdCA9IHBidWY7ICAgICAgICAgICAgLyogdGhhdCBp cyBkb24ndCBjYXJlICovCi0gICAgZSA9ICgqQyQkR0FfVUNYX0dFVFNFUlZCWU5BTUUpKCZwYXIs ICZzZW50LCBwYXIucyk7Ci0gICAgaWYgKChsb25nKWUgPT0gLTFMKQotICAgICAgcmV0dXJuIE5V TEw7Ci0gICAgaWYgKChlICYgMSkgPT0gMEwpIHsKLSAgICAgICAgQyQkVFJBTlNMQVRFKGUpOwot ICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKChzLnNiLnN0WzBdICYgMSkgPT0g MCkgewotICAgICAgICBDJCRTT0NLX1RSQU5TTEFURSgmcy5zYi5zdFswXSk7Ci0gICAgICAgIHJl dHVybiBOVUxMOwotICAgIH0KLS8qCi0gIHNlbnQuc19wb3J0IGlzIHN1cHBvc2VkIHRvIGJlIHJl dHVybmVkIGJ5IFVDWCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCi0gIEhvd2V2ZXIsIFVDWCAyLjAg dGhyb3VnaCAyLjBDIGRpZCBub3QgZG8gdGhpczsgMi4wRCBhbmQgbGF0ZXIgZG8gaXQuCi0gIEJ1 dCB0aGVyZSBpcyBubyB3YXkgb2Yga25vd2luZyB3aGljaCBVQ1ggdmVyc2lvbiwgc28gd2UgaGF2 ZSBhIHVzZXItc2V0dGFibGUKLSAgcnVudGltZSB2YXJpYWJsZS4gIE5vdGU6IFVDWCAyLjAgd2Fz IG9ubHkgZm9yIHRoZSBWQVguCi0qLwotICAgIGRlYnVnKEYxMDEsIlVDWCBnZXRzZXJ2YnluYW1l IHBvcnQiLCIiLHNlbnQuc19wb3J0KTsKLSAgICBkZWJ1ZyhGMTAxLCJVQ1ggZ2V0c2VydmJ5bmFt ZSBudG9ocyhwb3J0KSIsIiIsbnRvaHMoc2VudC5zX3BvcnQpKTsKLSAgICBpZiAodWN4X3BvcnRf YnVnKSB7Ci0gICAgICAgIHNlbnQuc19wb3J0ID0gaHRvbnMoc2VudC5zX3BvcnQpOwotICAgICAg ICBkZWJ1ZyhGMTAwLCJVQ1gtUE9SVC1CVUcgT046IHN3YXBwaW5nIGJ5dGVzIiwiIiwwKTsKLSAg ICAgICAgZGVidWcoRjEwMSwiVUNYIHN3YXBwZWQgcG9ydCIsIiIsc2VudC5zX3BvcnQpOwotICAg ICAgICBkZWJ1ZyhGMTAxLCJVQ1ggc3dhcHBlZCBudG9ocyhwb3J0KSIsIiIsbnRvaHMoc2VudC5z X3BvcnQpKTsKLSAgICB9Ci0gICAgcmV0dXJuICZzZW50OwotfQotI2VuZGlmIC8qIGRlZiBPTERJ UCAqLwotI2VuZGlmIC8qIERFQ19UQ1BJUCAqLwotI2VuZGlmIC8qIEVYQ0VMQU4gKi8KLQotaW50 Ci1nZXR0Y3Bwb3J0KCkgewotICAgIHJldHVybihzdmNudW0pOwotfQotCi0jZW5kaWYgLyogVENQ U09DS0VUICovCi0KLSNpZm5kZWYgTk9UQ1BPUFRTCi0jaWZuZGVmIGRhdGFnZW5lcmFsCi1pbnQK LWNrX2xpbmdlcihzb2NrLCBvbm9mZiwgdGltbykgaW50IHNvY2s7IGludCBvbm9mZjsgaW50IHRp bW87IHsKLS8qCi0gIFRoZSBmb2xsb3dpbmcsIGZyb20gV2lsbGlhbSBCYWRlciwgdHVybnMgb2Zm IHRoZSBzb2NrZXQgbGluZ2VyIHBhcmFtZXRlciwKLSAgd2hpY2ggbWFrZXMgYSBjbG9zZSgpIGJs b2NrIHVudGlsIGFsbCBkYXRhIGlzIHNlbnQuICAiSSBkb24ndCB0aGluayB0aGF0Ci0gIGRpc2Fi bGluZyBsaW5nZXIgY2FuIGV2ZXIgY2F1c2Uga2VybWl0IHRvIGxvc2UgZGF0YSwgYnV0IHlvdSB0 ZWxuZXQgdG8gYQotICBmbGFreSBzZXJ2ZXIgKG9yIHRvIG91ciBtb2RlbSBzZXJ2ZXIgd2hlbiB0 aGUgbW9kZW0gaXMgaW4gdXNlKSwgZGlzYWJsaW5nCi0gIGxpbmdlciBwcmV2ZW50cyBrZXJtaXQg ZnJvbSBoYW5naW5nIG9uIHRoZSBjbG9zZSBpZiB5b3UgdHJ5IHRvIGV4aXQuIgotCi0gIE1vZGlm aWVkIGJ5IEplZmYgQWx0bWFuIHRvIGJlIGdlbmVyYWxseSB1c2VmdWwuCi0qLwotI2lmZGVmIFNP TF9TT0NLRVQKLSNpZmRlZiBTT19MSU5HRVIKLSAgICBzdHJ1Y3QgbGluZ2VyIHNldF9saW5nZXJf b3B0OwotICAgIHN0cnVjdCBsaW5nZXIgZ2V0X2xpbmdlcl9vcHQ7Ci0gICAgU09DS09QVF9UIHg7 Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKCFpbnNlcnZlcikKLSNlbmRpZiAvKiBJS1NEICovCi0g ICAgICBpZiAoc29jayA9PSAtMSB8fAotICAgICAgICBuZXR0eXBlICE9IE5FVF9UQ1BBICYmIG5l dHR5cGUgIT0gTkVUX1RDUEIgJiYKLSAgICAgICAgbmV0dHlwZSAhPSBORVRfU1NIIHx8IHR0bWRt ID49IDApIHsKLSAgICAgICAgdGNwX2xpbmdlciA9IG9ub2ZmOwotICAgICAgICB0Y3BfbGluZ2Vy X3RtbyA9IHRpbW87Ci0gICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0gICAgeCA9IHNpemVvZihn ZXRfbGluZ2VyX29wdCk7Ci0gICAgaWYgKGdldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09f TElOR0VSLAotICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZnZXRfbGluZ2VyX29wdCwgJngp KSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsIlRDUCBja19saW5nZXIgY2FuJ3QgZ2V0IFNPX0xJTkdF UiIsY2tfZXJyc3RyKCksZXJybm8pOwotICAgIH0gZWxzZSBpZiAoeCAhPSBzaXplb2YoZ2V0X2xp bmdlcl9vcHQpKSB7Ci0jaWZkZWYgT1MyCi0gICAgICAgIHN0cnVjdCBfbGluZ2VyMTYgewotICAg ICAgICAgICAgc2hvcnQgc19saW5nZXI7Ci0gICAgICAgICAgICBzaG9ydCBzX29ub2ZmOwotICAg ICAgICB9IGdldF9saW5nZXJfb3B0MTYsIHNldF9saW5nZXJfb3B0MTY7Ci0gICAgICAgIGlmICgg eCA9PSBzaXplb2YoZ2V0X2xpbmdlcl9vcHQxNikgKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEx LCJUQ1Agc2V0bGluZ2VyIHdhcm5pbmc6IFNPX0xJTkdFUiIsImxlbiBpcyAxNi1iaXQiLHgpOwot ICAgICAgICAgICAgaWYgKGdldHNvY2tvcHQoc29jaywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNPTF9TT0NLRVQsIFNPX0xJTkdFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChj aGFyICopJmdldF9saW5nZXJfb3B0MTYsICZ4KQotICAgICAgICAgICAgICAgICkgewotICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsCi0gICAgICAgICAgICAgICAgICAgICAgIlRDUCBja19saW5n ZXIgY2FuJ3QgZ2V0IFNPX0xJTkdFUiIsY2tfZXJyc3RyKCksZXJybm8pOwotICAgICAgICAgICAg fSBlbHNlIGlmIChnZXRfbGluZ2VyX29wdDE2LnNfb25vZmYgIT0gb25vZmYgfHwKLSAgICAgICAg ICAgICAgICAgICAgICAgZ2V0X2xpbmdlcl9vcHQxNi5zX2xpbmdlciAhPSB0aW1vKQotICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgIHNldF9saW5nZXJfb3B0MTYuc19vbm9mZiAgPSBvbm9m ZjsKLSAgICAgICAgICAgICAgICBzZXRfbGluZ2VyX29wdDE2LnNfbGluZ2VyID0gdGltbzsKLSAg ICAgICAgICAgICAgICBpZiAoc2V0c29ja29wdChzb2NrLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNPTF9TT0NLRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09f TElOR0VSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJnNldF9saW5n ZXJfb3B0MTYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNldF9saW5n ZXJfb3B0MTYpKQotICAgICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlRDUCBja19saW5nZXIgY2Fu J3Qgc2V0IFNPX0xJTkdFUiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNrX2VycnN0cigp LAotICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubwotICAgICAgICAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgICAgICAgICB0Y3BfbGluZ2VyID0gZ2V0X2xpbmdlcl9vcHQx Ni5zX29ub2ZmOwotICAgICAgICAgICAgICAgICAgICB0Y3BfbGluZ2VyX3RtbyA9IGdldF9saW5n ZXJfb3B0MTYuc19saW5nZXI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjEwMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlRDUCBja19s aW5nZXIgbmV3IFNPX0xJTkdFUiIsIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9s aW5nZXJfb3B0MTYuc19vbm9mZik7Ci0gICAgICAgICAgICAgICAgICAgIHRjcF9saW5nZXIgPSBz ZXRfbGluZ2VyX29wdDE2LnNfb25vZmY7Ci0gICAgICAgICAgICAgICAgICAgIHRjcF9saW5nZXJf dG1vID0gc2V0X2xpbmdlcl9vcHQxNi5zX2xpbmdlcjsKLSAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1AgY2tfbGluZ2VyIFNPX0xJTkdFUiB1bmNoYW5nZWQiLCIi LAotICAgICAgICAgICAgICAgICAgICAgICBnZXRfbGluZ2VyX29wdDE2LnNfb25vZmYpOwotICAg ICAgICAgICAgICAgIHRjcF9saW5nZXIgPSBnZXRfbGluZ2VyX29wdDE2LnNfb25vZmY7Ci0gICAg ICAgICAgICAgICAgdGNwX2xpbmdlcl90bW8gPSBnZXRfbGluZ2VyX29wdDE2LnNfbGluZ2VyOwot ICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0 dXJuKDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIGRlYnVnKEYxMTEs IlRDUCBja19saW5nZXIgZXJyb3I6IFNPX0xJTkdFUiIsImxlbiIseCk7Ci0gICAgICAgIGRlYnVn KEYxMTEsIlRDUCBja19saW5nZXIgU09fTElOR0VSIiwKLSAgICAgICAgICAgICAgImV4cGVjdGVk IGxlbiIsc2l6ZW9mKGdldF9saW5nZXJfb3B0KSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsIlRDUCBj a19saW5nZXIgU09fTElOR0VSIiwibGluZ2VyX29wdC5sX29ub2ZmIiwKLSAgICAgICAgICAgICAg Z2V0X2xpbmdlcl9vcHQubF9vbm9mZik7Ci0gICAgICAgIGRlYnVnKEYxMTEsIlRDUCBsaW5nZXIg U09fTElOR0VSIiwibGluZ2VyX29wdC5sX2xpbmdlciIsCi0gICAgICAgICAgICAgICBnZXRfbGlu Z2VyX29wdC5sX2xpbmdlcik7Ci0gICAgfSBlbHNlIGlmIChnZXRfbGluZ2VyX29wdC5sX29ub2Zm ICE9IG9ub2ZmIHx8Ci0gICAgICAgICAgICAgICBnZXRfbGluZ2VyX29wdC5sX2xpbmdlciAhPSB0 aW1vKSB7Ci0gICAgICAgIHNldF9saW5nZXJfb3B0Lmxfb25vZmYgID0gb25vZmY7Ci0gICAgICAg IHNldF9saW5nZXJfb3B0LmxfbGluZ2VyID0gdGltbzsKLSAgICAgICAgaWYgKHNldHNvY2tvcHQo c29jaywKLSAgICAgICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwKLSAgICAgICAgICAgICAg ICAgICAgICAgU09fTElOR0VSLAotICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZzZXRf bGluZ2VyX29wdCwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNldF9saW5nZXJfb3B0 KSkpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIlRDUCBja19saW5nZXIgY2FuJ3Qgc2V0IFNP X0xJTkdFUiIsY2tfZXJyc3RyKCksZXJybm8pOwotICAgICAgICAgICAgdGNwX2xpbmdlciA9IGdl dF9saW5nZXJfb3B0Lmxfb25vZmY7Ci0gICAgICAgICAgICB0Y3BfbGluZ2VyX3RtbyA9IGdldF9s aW5nZXJfb3B0LmxfbGluZ2VyOwotICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLAotICAgICAgICAgICAgICAgICAgICJUQ1AgY2tfbGluZ2VyIG5ldyBTT19MSU5HRVIi LAotICAgICAgICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAgICAgIHNldF9saW5nZXJf b3B0Lmxfb25vZmYKLSAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgIHRjcF9saW5n ZXIgPSBzZXRfbGluZ2VyX29wdC5sX29ub2ZmOwotICAgICAgICAgICAgIHRjcF9saW5nZXJfdG1v ID0gc2V0X2xpbmdlcl9vcHQubF9saW5nZXI7Ci0gICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAg ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVidWcoRjEwMSwiVENQIGNrX2xpbmdlciBT T19MSU5HRVIgdW5jaGFuZ2VkIiwiIiwKLSAgICAgICAgICAgICAgZ2V0X2xpbmdlcl9vcHQubF9v bm9mZik7Ci0gICAgICAgIHRjcF9saW5nZXIgPSBnZXRfbGluZ2VyX29wdC5sX29ub2ZmOwotICAg ICAgICB0Y3BfbGluZ2VyX3RtbyA9IGdldF9saW5nZXJfb3B0LmxfbGluZ2VyOwotICAgICAgICBy ZXR1cm4gMTsKLSAgICB9Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAsIlRDUCBja19saW5nZXIgU09f TElOR0VSIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZiAvKiBTT19MSU5HRVIgKi8KLSNlbHNl Ci0gICAgZGVidWcoRjEwMCwiVENQIGNrX2xpbmdlciBTT19TT0NLRVQgbm90IGRlZmluZWQiLCIi LDApOwotI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAot c2VuZGJ1Zihzb2NrLHNpemUpIGludCBzb2NrOyBpbnQgc2l6ZTsgewotLyoKLSAgVGhlIGZvbGxv d2luZywgZnJvbSBXaWxsaWFtIEJhZGVyLCBhbGxvd3MgY2hhbmdpbmcgb2Ygc29ja2V0IGJ1ZmZl ciBzaXplcywKLSAgaW4gY2FzZSB0aGF0IG1pZ2h0IGFmZmVjdCBwZXJmb3JtYW5jZS4KLQotICBN b2RpZmllZCBieSBKZWZmIEFsdG1hbiB0byBiZSBnZW5lcmFsbHkgdXNlZnVsLgotKi8KLSNpZmRl ZiBTT0xfU09DS0VUCi0jaWZkZWYgU09fU05EQlVGCi0gICAgaW50IGksIGo7Ci0gICAgU09DS09Q VF9UIHg7Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKCFpbnNlcnZlcikKLSNlbmRpZiAvKiBJS1NE ICovCi0gICAgICBpZiAoc29jayA9PSAtMSB8fAotICAgICAgICBuZXR0eXBlICE9IE5FVF9UQ1BB ICYmIG5ldHR5cGUgIT0gTkVUX1RDUEIgJiYgbmV0dHlwZSAhPSBORVRfU1NICi0gICAgICAgICAg ICAgICAgfHwgdHRtZG0gPj0gMCkgewotICAgICAgICB0Y3Bfc2VuZGJ1ZiA9IHNpemU7Ci0gICAg ICAgIHJldHVybiAxOwotICAgIH0KLSAgICB4ID0gc2l6ZW9mKGkpOwotICAgIGlmIChnZXRzb2Nr b3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgKGNoYXIgKikmaSwgJngpKSB7Ci0gICAg ICAgIGRlYnVnKEYxMTEsIlRDUCBzZW5kYnVmIGNhbid0IGdldCBTT19TTkRCVUYiLGNrX2VycnN0 cigpLGVycm5vKTsKLSAgICB9IGVsc2UgaWYgKHggIT0gc2l6ZW9mKGkpKSB7Ci0jaWZkZWYgT1My Ci0gICAgICAgIHNob3J0IGkxNixqMTY7Ci0gICAgICAgIGlmICh4ID09IHNpemVvZihpMTYpKSB7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Agc2VuZGJ1ZiB3YXJuaW5nOiBTT19TTkRCVUYi LCJsZW4gaXMgMTYtYml0Iix4KTsKLSAgICAgICAgICAgIGlmIChnZXRzb2Nrb3B0KHNvY2ssCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICBTT0xfU09DS0VULCBTT19TTkRCVUYsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZpMTYsICZ4KQotICAgICAgICAgICAgICAgICkg ewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIlRDUCBzZW5kYnVmIGNhbid0IGdldCBTT19T TkRCVUYiLAotICAgICAgICAgICAgICAgICAgICAgIGNrX2VycnN0cigpLGVycm5vKTsKLSAgICAg ICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgdGNwX3NlbmRi dWYgPSBpMTY7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiVENQIHNlbmRidWYgU09fU05E QlVGIHJldHJpZXZlZCIsIiIsaTE2KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAg ICAgICAgIH0gZWxzZSBpZiAoaTE2ICE9IHNpemUpIHsKLSAgICAgICAgICAgICAgICBqMTYgPSBz aXplOwotICAgICAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHNvY2ssCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTT19TTkRCVUYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikm ajE2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihqMTYpKQotICAgICAg ICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiVENQIHNl bmRidWYgY2FuJ3Qgc2V0IFNPX1NOREJVRiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNr X2VycnN0cigpLGVycm5vKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1Agc2VuZGJ1ZiBvbGQgU09fU05EQlVGIiwiIixpMTYpOwot ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1Agc2VuZGJ1ZiBuZXcgU09fU05EQlVG IiwiIixqMTYpOwotICAgICAgICAgICAgICAgICAgICB0Y3Bfc2VuZGJ1ZiA9IHNpemU7Ci0gICAg ICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiVENQIHNlbmRidWYgU09fU05E QlVGIHVuY2hhbmdlZCIsIiIsaTE2KTsKLSAgICAgICAgICAgICAgICB0Y3Bfc2VuZGJ1ZiA9IHNp emU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgZGVidWco RjExMSwiVENQIHNlbmRidWYgZXJyb3I6IFNPX1NOREJVRiIsImxlbiIseCk7Ci0gICAgICAgIGRl YnVnKEYxMTEsIlRDUCBzZW5kYnVmIFNPX1NOREJVRiIsImV4cGVjdGVkIGxlbiIsc2l6ZW9mKGkp KTsKLSAgICAgICAgZGVidWcoRjExMSwiVENQIHNlbmRidWYgU09fU05EQlVGIiwiaSIsaSk7Ci0g ICAgfSBlbHNlIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgdGNwX3NlbmRidWYgPSBpOwotICAg ICAgICBkZWJ1ZyhGMTAxLCJUQ1Agc2VuZGJ1ZiBTT19TTkRCVUYgcmV0cmlldmVkIiwiIixpKTsK LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfSBlbHNlIGlmIChpICE9IHNpemUpIHsKLSAgICAgICAg aiA9IHNpemU7Ci0gICAgICAgIGlmIChzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1NO REJVRiwgKGNoYXIgKikmaiwgc2l6ZW9mKGopKSkgewotICAgICAgICAgICAgZGVidWcoRjExMSwi VENQIHNlbmRidWYgY2FuJ3Qgc2V0IFNPX1NOREJVRiIsY2tfZXJyc3RyKCksZXJybm8pOwotICAg ICAgICAgICAgdGNwX3NlbmRidWYgPSBpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ZGVidWcoRjEwMSwiVENQIHNlbmRidWYgb2xkIFNPX1NOREJVRiIsIiIsaSk7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJUQ1Agc2VuZGJ1ZiBuZXcgU09fU05EQlVGIiwiIixqKTsKLSAgICAgICAg ICAgIHRjcF9zZW5kYnVmID0gc2l6ZTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9 Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVidWcoRjEwMSwiVENQIHNlbmRidWYgU09fU05EQlVG IHVuY2hhbmdlZCIsIiIsaSk7Ci0gICAgICAgIHRjcF9zZW5kYnVmID0gc2l6ZTsKLSAgICAgICAg cmV0dXJuIDE7Ci0gICAgfQotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJUQ1Agc2VuZGJ1ZiBTT19T TkRCVUYgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8qIFNPX1NOREJVRiAqLwotI2Vsc2UK LSAgICBkZWJ1ZyhGMTAwLCJUQ1Agc2VuZGJ1ZiBTT19TT0NLRVQgbm90IGRlZmluZWQiLCIiLDAp OwotI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotcmVj dmJ1Zihzb2NrLHNpemUpIGludCBzb2NrOyBpbnQgc2l6ZTsgewotLyoKLSAgVGhlIGZvbGxvd2lu ZywgZnJvbSBXaWxsaWFtIEJhZGVyLCBhbGxvd3MgY2hhbmdpbmcgb2Ygc29ja2V0IGJ1ZmZlciBz aXplcywKLSAgaW4gY2FzZSB0aGF0IG1pZ2h0IGFmZmVjdCBwZXJmb3JtYW5jZS4KLQotICBNb2Rp ZmllZCBieSBKZWZmIEFsdG1hbiB0byBiZSBnZW5lcmFsbHkgdXNlZnVsLgotKi8KLSNpZmRlZiBT T0xfU09DS0VUCi0jaWZkZWYgU09fUkNWQlVGCi0gICAgaW50IGksIGo7Ci0gICAgU09DS09QVF9U IHg7Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKCFpbnNlcnZlcikKLSNlbmRpZiAvKiBJS1NEICov Ci0gICAgICBpZiAoc29jayA9PSAtMSB8fAotCSAgbmV0dHlwZSAhPSBORVRfVENQQSAmJiBuZXR0 eXBlICE9IE5FVF9UQ1BCICYmCi0JICBuZXR0eXBlICE9IE5FVF9TU0ggfHwgdHRtZG0gPj0gMCkg ewotICAgICAgICB0Y3BfcmVjdmJ1ZiA9IHNpemU7Ci0gICAgICAgIHJldHVybigxKTsKLSAgICB9 Ci0gICAgeCA9IHNpemVvZihpKTsKLSAgICBpZiAoZ2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VU LCBTT19SQ1ZCVUYsIChjaGFyICopJmksICZ4KSkgewotICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Ag cmVjdmJ1ZiBjYW4ndCBnZXQgU09fUkNWQlVGIixja19lcnJzdHIoKSxlcnJubyk7Ci0gICAgfSBl bHNlIGlmICh4ICE9IHNpemVvZihpKSkgewotI2lmZGVmIE9TMgotICAgICAgICBzaG9ydCBpMTYs ajE2OwotICAgICAgICBpZiAoIHggPT0gc2l6ZW9mKGkxNikgKSB7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTExLCJUQ1AgcmVjdmJ1ZiB3YXJuaW5nOiBTT19SQ1ZCVUYiLCJsZW4gaXMgMTYtYml0Iix4 KTsKLSAgICAgICAgICAgIGlmIChnZXRzb2Nrb3B0KHNvY2ssCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBTT0xfU09DS0VULCBTT19SQ1ZCVUYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAoY2hhciAqKSZpMTYsICZ4KQotICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsIlRDUCByZWN2YnVmIGNhbid0IGdldCBTT19SQ1ZCVUYiLAotICAgICAgICAg ICAgICAgICAgICAgIGNrX2VycnN0cigpLGVycm5vKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo c2l6ZSA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgdGNwX3JlY3ZidWYgPSBpMTY7Ci0gICAgICAg ICAgICAgICAgZGVidWcoRjEwMSwiVENQIHJlY3ZidWYgU09fUkNWQlVGIHJldHJpZXZlZCIsIiIs aTE2KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo aTE2ICE9IHNpemUpIHsKLSAgICAgICAgICAgICAgICBqMTYgPSBzaXplOwotICAgICAgICAgICAg ICAgIGlmIChzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgKGNoYXIgKikm ajE2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihqMTYpKSkgewotICAg ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJUQ1AgcmVjdmJ1ZiBjYW4nIHNldCBTT19SQ1ZC VUYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBja19lcnJzdHIoKSxlcnJubyk7Ci0gICAg ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiVENQ IHJlY3ZidWYgb2xkIFNPX1JDVkJVRiIsIiIsaTE2KTsKLSAgICAgICAgICAgICAgICAgICAgZGVi dWcoRjEwMSwiVENQIHJlY3ZidWYgbmV3IFNPX1JDVkJVRiIsIiIsajE2KTsKLSAgICAgICAgICAg ICAgICAgICAgdGNwX3JlY3ZidWYgPSBzaXplOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g MTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDEsIlRDUCByZWN2YnVmIFNPX1JDVkJVRiB1bmNoYW5nZWQiLCIiLGkxNik7 Ci0gICAgICAgICAgICAgICAgdGNwX3JlY3ZidWYgPSBzaXplOwotICAgICAgICAgICAgICAgIHJl dHVybiAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9 Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIGRlYnVnKEYxMTEsIlRDUCByZWN2YnVmIGVycm9y OiBTT19SQ1ZCVUYiLCJsZW4iLHgpOwotICAgICAgICBkZWJ1ZyhGMTExLCJUQ1AgcmVjdmJ1ZiBT T19SQ1ZCVUYiLCJleHBlY3RlZCBsZW4iLHNpemVvZihpKSk7Ci0gICAgICAgIGRlYnVnKEYxMTEs IlRDUCByZWN2YnVmIFNPX1JDVkJVRiIsImkiLGkpOwotICAgIH0gZWxzZSBpZiAoc2l6ZSA8PSAw KSB7Ci0gICAgICAgIHRjcF9yZWN2YnVmID0gaTsKLSAgICAgICAgZGVidWcoRjEwMSwiVENQIHJl Y3ZidWYgU09fUkNWQlVGIHJldHJpZXZlZCIsIiIsaSk7Ci0gICAgICAgIHJldHVybiAxOwotICAg IH0gZWxzZSBpZiAoaSAhPSBzaXplKSB7Ci0gICAgICAgIGogPSBzaXplOwotICAgICAgICBpZiAo c2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIChjaGFyICopJmosIHNpemVv ZihqKSkpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIlRDUCByZWN2YnVmIGNhbid0IHNldCBT T19SQ1ZCVUYiLGNrX2VycnN0cigpLGVycm5vKTsKLSAgICAgICAgICAgIHRjcF9yZWN2YnVmID0g aTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlRDUCByZWN2YnVm IG9sZCBTT19SQ1ZCVUYiLCIiLGkpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiVENQIHJlY3Zi dWYgbmV3IFNPX1JDVkJVRiIsIiIsaik7Ci0gICAgICAgICAgICB0Y3BfcmVjdmJ1ZiA9IHNpemU7 Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg IGRlYnVnKEYxMDEsIlRDUCByZWN2YnVmIFNPX1JDVkJVRiB1bmNoYW5nZWQiLCIiLGkpOwotICAg ICAgICB0Y3BfcmVjdmJ1ZiA9IHNpemU7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSNlbHNl Ci0gICAgZGVidWcoRjEwMCwiVENQIHJlY3ZidWYgU09fUkNWQlVGIG5vdCBkZWZpbmVkIiwiIiww KTsKLSNlbmRpZiAvKiBTT19SQ1ZCVUYgKi8KLSNlbHNlCi0gICAgZGVidWcoRjEwMCwiVENQIHJl Y3ZidWYgU09fU09DS0VUIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZiAvKiBTT0xfU09DS0VU ICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWludAota2VlcGFsaXZlKHNvY2ssb25vZmYpIGludCBz b2NrOyBpbnQgb25vZmY7IHsKLSNpZmRlZiBTT0xfU09DS0VUCi0jaWZkZWYgU09fS0VFUEFMSVZF Ci0gICAgaW50IGdldF9rZWVwYWxpdmVfb3B0OwotICAgIGludCBzZXRfa2VlcGFsaXZlX29wdDsK LSAgICBTT0NLT1BUX1QgeDsKLQotICAgIGRlYnVnKEYxMTEsIlRDUCBrZWVwYWxpdmUiLCJzb2Nr Iixzb2NrKTsKLSAgICBkZWJ1ZyhGMTExLCJUQ1Aga2VlcGFsaXZlIiwibmV0dHlwZSIsbmV0dHlw ZSk7Ci0gICAgZGVidWcoRjExMSwiVENQIGtlZXBhbGl2ZSIsInR0bWRtIix0dG1kbSk7Ci0KLSNp ZmRlZiBJS1NECi0gICAgaWYgKCFpbnNlcnZlcikKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICBp ZiAoc29jayA9PSAtMSB8fAotICAgICAgICBuZXR0eXBlICE9IE5FVF9UQ1BBICYmIG5ldHR5cGUg IT0gTkVUX1RDUEIgJiYgbmV0dHlwZSAhPSBORVRfU1NICi0gICAgICAgICAgICAgICAgfHwgdHRt ZG0gPj0gMCkgewotICAgICAgICB0Y3Bfa2VlcGFsaXZlID0gb25vZmY7Ci0gICAgICAgIHJldHVy biAxOwotICAgIH0KLSAgICB4ID0gc2l6ZW9mKGdldF9rZWVwYWxpdmVfb3B0KTsKLSAgICBpZiAo Z2V0c29ja29wdChzb2NrLAotICAgICAgICAgICAgICAgICAgIFNPTF9TT0NLRVQsIFNPX0tFRVBB TElWRSwgKGNoYXIgKikmZ2V0X2tlZXBhbGl2ZV9vcHQsICZ4KSkgewotICAgICAgICBkZWJ1ZyhG MTExLCJUQ1Aga2VlcGFsaXZlIGNhbid0IGdldCBTT19LRUVQQUxJVkUiLGNrX2VycnN0cigpLGVy cm5vKTsKLSAgICB9IGVsc2UgaWYgKHggIT0gc2l6ZW9mKGdldF9rZWVwYWxpdmVfb3B0KSkgewot I2lmZGVmIE9TMgotICAgICAgICBzaG9ydCBnZXRfa2VlcGFsaXZlX29wdDE2OwotICAgICAgICBz aG9ydCBzZXRfa2VlcGFsaXZlX29wdDE2OwotICAgICAgICBpZiAoeCA9PSBzaXplb2YoZ2V0X2tl ZXBhbGl2ZV9vcHQxNikpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIlRDUCBrZWVwYWxpdmUg d2FybmluZzogU09fS0VFUEFMSVZFIiwKLSAgICAgICAgICAgICAgICAgICJsZW4gaXMgMTYtYml0 Iix4KTsKLSAgICAgICAgICAgIGlmIChnZXRzb2Nrb3B0KHNvY2ssCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICBTT0xfU09DS0VULCBTT19LRUVQQUxJVkUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAoY2hhciAqKSZnZXRfa2VlcGFsaXZlX29wdDE2LCAmeCkKLSAgICAgICAgICAgICAg ICApIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAgICAgICAgICAgICAg ICJUQ1Aga2VlcGFsaXZlIGNhbid0IGdldCBTT19LRUVQQUxJVkUiLAotICAgICAgICAgICAgICAg ICAgICAgIGNrX2VycnN0cigpLAotICAgICAgICAgICAgICAgICAgICAgIGVycm5vCi0gICAgICAg ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0X2tlZXBhbGl2ZV9v cHQxNiAhPSBvbm9mZikgewotICAgICAgICAgICAgICAgIHNldF9rZWVwYWxpdmVfb3B0MTYgPSBv bm9mZjsKLSAgICAgICAgICAgICAgICBpZiAoc2V0c29ja29wdChzb2NrLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNPTF9TT0NLRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU09fS0VFUEFMSVZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy ICopJnNldF9rZWVwYWxpdmVfb3B0MTYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mKHNldF9rZWVwYWxpdmVfb3B0MTYpKQotICAgICAgICAgICAgICAgICAgICApIHsKLSAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IlRDUCBrZWVwYWxpdmUgY2FuJ3QgY2xlYXIgU09fS0VFUEFMSVZFIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgY2tfZXJyc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5v Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIHRjcF9r ZWVwYWxpdmUgPSBnZXRfa2VlcGFsaXZlX29wdDE2OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICJUQ1Aga2VlcGFsaXZlIG5ldyBTT19LRUVQQUxJVkUiLCIiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICBzZXRfa2VlcGFsaXZlX29wdDE2KTsKLSAgICAgICAgICAgICAgICAgICAgdGNw X2tlZXBhbGl2ZSA9IHNldF9rZWVwYWxpdmVfb3B0MTY7Ci0gICAgICAgICAgICAgICAgICAgIHJl dHVybiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAgICAgZGVidWcoRjEwMSwiVENQIGtlZXBhbGl2ZSBTT19LRUVQQUxJVkUgdW5jaGFuZ2Vk IiwiIiwKLSAgICAgICAgICAgICAgICAgICAgICBnZXRfa2VlcGFsaXZlX29wdDE2KTsKLSAgICAg ICAgICAgICAgICB0Y3Bfa2VlcGFsaXZlID0gb25vZmY7Ci0gICAgICAgICAgICAgICAgcmV0dXJu IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSNl bmRpZiAvKiBPUzIgKi8KLSAgICAgICAgZGVidWcoRjExMSwiVENQIGtlZXBhbGl2ZSBlcnJvcjog U09fS0VFUEFMSVZFIiwibGVuIix4KTsKLSAgICAgICAgZGVidWcoRjExMSwKLSAgICAgICAgICAg ICAgIlRDUCBrZWVwYWxpdmUgU09fS0VFUEFMSVZFIiwKLSAgICAgICAgICAgICAgImV4cGVjdGVk IGxlbiIsCi0gICAgICAgICAgICAgIHNpemVvZihnZXRfa2VlcGFsaXZlX29wdCkKLSAgICAgICAg ICAgICAgKTsKLSAgICAgICAgZGVidWcoRjExMSwKLSAgICAgICAgICAgICAgIlRDUCBrZWVwYWxp dmUgU09fS0VFUEFMSVZFIiwKLSAgICAgICAgICAgICAgImtlZXBhbGl2ZV9vcHQiLAotICAgICAg ICAgICAgICBnZXRfa2VlcGFsaXZlX29wdAotICAgICAgICAgICAgICApOwotICAgIH0gZWxzZSBp ZiAoZ2V0X2tlZXBhbGl2ZV9vcHQgIT0gb25vZmYpIHsKLSAgICAgICAgICAgIHNldF9rZWVwYWxp dmVfb3B0ID0gb25vZmY7Ci0gICAgICAgICAgICBpZiAoc2V0c29ja29wdChzb2NrLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFNPTF9TT0NLRVQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgU09fS0VFUEFMSVZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICop JnNldF9rZWVwYWxpdmVfb3B0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihz ZXRfa2VlcGFsaXZlX29wdCkpCi0gICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAg ZGVidWcoRjExMSwKLSAgICAgICAgICAgICAgICAgICAgICAiVENQIGtlZXBhbGl2ZSBjYW4ndCBj bGVhciBTT19LRUVQQUxJVkUiLAotICAgICAgICAgICAgICAgICAgICAgIGNrX2VycnN0cigpLAot ICAgICAgICAgICAgICAgICAgICAgIGVycm5vCi0gICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICAgICAgICB0Y3Bfa2VlcGFsaXZlID0gZ2V0X2tlZXBhbGl2ZV9vcHQ7Ci0gICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsCi0gICAgICAgICAgICAg ICAgICAgICAgIlRDUCBrZWVwYWxpdmUgbmV3IFNPX0tFRVBBTElWRSIsCi0gICAgICAgICAgICAg ICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAgICAgICAgc2V0X2tlZXBhbGl2ZV9vcHQKLSAg ICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIHRjcF9rZWVwYWxpdmUgPSBv bm9mZjsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlRDUCBrZWVwYWxpdmUgU09fS0VFUEFM SVZFIHVuY2hhbmdlZCIsCi0gICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICAg IGdldF9rZWVwYWxpdmVfb3B0Ci0gICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgdGNw X2tlZXBhbGl2ZSA9IG9ub2ZmOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotI2Vsc2UK LSAgICBkZWJ1ZyhGMTAwLCJUQ1Aga2VlcGFsaXZlIFNPX0tFRVBBTElWRSBub3QgZGVmaW5lZCIs IiIsMCk7Ci0jZW5kaWYgLyogU09fS0VFUEFMSVZFICovCi0jZWxzZQotICAgIGRlYnVnKEYxMDAs IlRDUCBrZWVwYWxpdmUgU09fU09DS0VUIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZiAvKiBT T0xfU09DS0VUICovCi0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLWRvbnRyb3V0ZShzb2NrLG9u b2ZmKSBpbnQgc29jazsgaW50IG9ub2ZmOyB7Ci0jaWZkZWYgU09MX1NPQ0tFVAotI2lmZGVmIFNP X0RPTlRST1VURQotICAgIGludCBnZXRfZG9udHJvdXRlX29wdDsKLSAgICBpbnQgc2V0X2RvbnRy b3V0ZV9vcHQ7Ci0gICAgU09DS09QVF9UIHg7Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKCFpbnNl cnZlcikKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICBpZiAoc29jayA9PSAtMSB8fAotICAgICAg ICBuZXR0eXBlICE9IE5FVF9UQ1BBICYmIG5ldHR5cGUgIT0gTkVUX1RDUEIgJiYgbmV0dHlwZSAh PSBORVRfU1NICi0gICAgICAgICAgICAgICAgfHwgdHRtZG0gPj0gMCkgewotICAgICAgICB0Y3Bf ZG9udHJvdXRlID0gb25vZmY7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICB4ID0gc2l6 ZW9mKGdldF9kb250cm91dGVfb3B0KTsKLSAgICBpZiAoZ2V0c29ja29wdChzb2NrLAotICAgICAg ICAgICAgICAgICAgIFNPTF9TT0NLRVQsIFNPX0RPTlRST1VURSwgKGNoYXIgKikmZ2V0X2RvbnRy b3V0ZV9vcHQsICZ4KSkgewotICAgICAgICBkZWJ1ZyhGMTExLCJUQ1AgZG9udHJvdXRlIGNhbid0 IGdldCBTT19ET05UUk9VVEUiLGNrX2VycnN0cigpLGVycm5vKTsKLSAgICB9IGVsc2UgaWYgKHgg IT0gc2l6ZW9mKGdldF9kb250cm91dGVfb3B0KSkgewotI2lmZGVmIE9TMgotICAgICAgICBzaG9y dCBnZXRfZG9udHJvdXRlX29wdDE2OwotICAgICAgICBzaG9ydCBzZXRfZG9udHJvdXRlX29wdDE2 OwotICAgICAgICBpZiAoeCA9PSBzaXplb2YoZ2V0X2RvbnRyb3V0ZV9vcHQxNikpIHsKLSAgICAg ICAgICAgIGRlYnVnKEYxMTEsIlRDUCBkb250cm91dGUgd2FybmluZzogU09fRE9OVFJPVVRFIiwK LSAgICAgICAgICAgICAgICAgICJsZW4gaXMgMTYtYml0Iix4KTsKLSAgICAgICAgICAgIGlmIChn ZXRzb2Nrb3B0KHNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTT0xfU09DS0VULCBT T19ET05UUk9VVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZnZXRfZG9u dHJvdXRlX29wdDE2LCAmeCkKLSAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTExLAotICAgICAgICAgICAgICAgICAgICAgICJUQ1AgZG9udHJvdXRlIGNhbid0IGdl dCBTT19ET05UUk9VVEUiLAotICAgICAgICAgICAgICAgICAgICAgIGNrX2VycnN0cigpLAotICAg ICAgICAgICAgICAgICAgICAgIGVycm5vCi0gICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAg ICAgICAgIH0gZWxzZSBpZiAoZ2V0X2RvbnRyb3V0ZV9vcHQxNiAhPSBvbm9mZikgewotICAgICAg ICAgICAgICAgIHNldF9kb250cm91dGVfb3B0MTYgPSBvbm9mZjsKLSAgICAgICAgICAgICAgICBp ZiAoc2V0c29ja29wdChzb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPTF9T T0NLRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09fRE9OVFJPVVRFLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJnNldF9kb250cm91dGVfb3B0MTYs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNldF9kb250cm91dGVfb3B0 MTYpKQotICAgICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgZGVidWco RjExMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlRDUCBkb250cm91dGUgY2FuJ3QgY2xl YXIgU09fRE9OVFJPVVRFIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCks Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIHRjcF9kb250cm91dGUgPSBnZXRfZG9udHJvdXRl X29wdDE2OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJUQ1AgZG9udHJvdXRlIG5ldyBT T19ET05UUk9VVEUiLCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfZG9udHJvdXRl X29wdDE2KTsKLSAgICAgICAgICAgICAgICAgICAgdGNwX2RvbnRyb3V0ZSA9IHNldF9kb250cm91 dGVfb3B0MTY7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiVENQ IGRvbnRyb3V0ZSBTT19ET05UUk9VVEUgdW5jaGFuZ2VkIiwiIiwKLSAgICAgICAgICAgICAgICAg ICAgICBnZXRfZG9udHJvdXRlX29wdDE2KTsKLSAgICAgICAgICAgICAgICB0Y3BfZG9udHJvdXRl ID0gb25vZmY7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAg ZGVidWcoRjExMSwiVENQIGRvbnRyb3V0ZSBlcnJvcjogU09fRE9OVFJPVVRFIiwibGVuIix4KTsK LSAgICAgICAgZGVidWcoRjExMSwKLSAgICAgICAgICAgICAgIlRDUCBkb250cm91dGUgU09fRE9O VFJPVVRFIiwKLSAgICAgICAgICAgICAgImV4cGVjdGVkIGxlbiIsCi0gICAgICAgICAgICAgIHNp emVvZihnZXRfZG9udHJvdXRlX29wdCkKLSAgICAgICAgICAgICAgKTsKLSAgICAgICAgZGVidWco RjExMSwKLSAgICAgICAgICAgICAgIlRDUCBkb250cm91dGUgU09fRE9OVFJPVVRFIiwKLSAgICAg ICAgICAgICAgImRvbnRyb3V0ZV9vcHQiLAotICAgICAgICAgICAgICBnZXRfZG9udHJvdXRlX29w dAotICAgICAgICAgICAgICApOwotICAgIH0gZWxzZSBpZiAoZ2V0X2RvbnRyb3V0ZV9vcHQgIT0g b25vZmYpIHsKLSAgICAgICAgICAgIHNldF9kb250cm91dGVfb3B0ID0gb25vZmY7Ci0gICAgICAg ICAgICBpZiAoc2V0c29ja29wdChzb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNP TF9TT0NLRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU09fRE9OVFJPVVRFLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJnNldF9kb250cm91dGVfb3B0LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzZXRfZG9udHJvdXRlX29wdCkpCi0gICAg ICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwKLSAgICAgICAgICAg ICAgICAgICAgICAiVENQIGRvbnRyb3V0ZSBjYW4ndCBjbGVhciBTT19ET05UUk9VVEUiLAotICAg ICAgICAgICAgICAgICAgICAgIGNrX2VycnN0cigpLAotICAgICAgICAgICAgICAgICAgICAgIGVy cm5vCi0gICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICB0Y3BfZG9udHJv dXRlID0gZ2V0X2RvbnRyb3V0ZV9vcHQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsCi0gICAgICAgICAgICAgICAgICAgICAgIlRDUCBkb250cm91dGUg bmV3IFNPX0RPTlRST1VURSIsCi0gICAgICAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAg ICAgICAgICAgICAgc2V0X2RvbnRyb3V0ZV9vcHQKLSAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgICAgICAgIHRjcF9kb250cm91dGUgPSBvbm9mZjsKLSAgICAgICAgICAgICAgICBy ZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRl YnVnKEYxMDEsIlRDUCBkb250cm91dGUgU09fRE9OVFJPVVRFIHVuY2hhbmdlZCIsCi0gICAgICAg ICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICAgIGdldF9kb250cm91dGVfb3B0Ci0gICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgdGNwX2RvbnRyb3V0ZSA9IG9ub2ZmOwotICAg ICAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJUQ1AgZG9u dHJvdXRlIFNPX0RPTlRST1VURSBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYgLyogU09fRE9O VFJPVVRFICovCi0jZWxzZQotICAgIGRlYnVnKEYxMDAsIlRDUCBkb250cm91dGUgU09fU09DS0VU IG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZiAvKiBTT0xfU09DS0VUICovCi0gICAgcmV0dXJu KDApOwotfQotCi1pbnQKLW5vX2RlbGF5KHNvY2ssb25vZmYpICBpbnQgc29jazsgaW50IG9ub2Zm OyB7Ci0jaWZkZWYgU09MX1NPQ0tFVAotI2lmZGVmIFRDUF9OT0RFTEFZCi0gICAgaW50IGdldF9u b2RlbGF5X29wdDsKLSAgICBpbnQgc2V0X25vZGVsYXlfb3B0OwotICAgIFNPQ0tPUFRfVCB4Owot Ci0jaWZkZWYgSUtTRAotICAgIGlmICghaW5zZXJ2ZXIpCi0jZW5kaWYgLyogSUtTRCAqLwotICAg ICAgaWYgKHNvY2sgPT0gLTEgfHwKLSAgICAgICAgbmV0dHlwZSAhPSBORVRfVENQQSAmJiBuZXR0 eXBlICE9IE5FVF9UQ1BCICYmIG5ldHR5cGUgIT0gTkVUX1NTSAotICAgICAgICAgICAgICAgIHx8 IHR0bWRtID49IDApIHsKLSAgICAgICAgdGNwX25vZGVsYXkgPSBvbm9mZjsKLSAgICAgICAgcmV0 dXJuKDEpOwotICAgIH0KLSAgICB4ID0gc2l6ZW9mKGdldF9ub2RlbGF5X29wdCk7Ci0gICAgaWYg KGdldHNvY2tvcHQoc29jayxJUFBST1RPX1RDUCxUQ1BfTk9ERUxBWSwKLSAgICAgICAgICAgICAg ICAgICAoY2hhciAqKSZnZXRfbm9kZWxheV9vcHQsJngpKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEs Ci0gICAgICAgICAgICAgICJUQ1Agbm9fZGVsYXkgY2FuJ3QgZ2V0IFRDUF9OT0RFTEFZIiwKLSAg ICAgICAgICAgICAgY2tfZXJyc3RyKCksCi0gICAgICAgICAgICAgIGVycm5vKTsKLSAgICB9IGVs c2UgaWYgKHggIT0gc2l6ZW9mKGdldF9ub2RlbGF5X29wdCkpIHsKLSNpZmRlZiBPUzIKLSAgICAg ICAgc2hvcnQgZ2V0X25vZGVsYXlfb3B0MTY7Ci0gICAgICAgIHNob3J0IHNldF9ub2RlbGF5X29w dDE2OwotICAgICAgICBpZiAoeCA9PSBzaXplb2YoZ2V0X25vZGVsYXlfb3B0MTYpKSB7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Agbm9fZGVsYXkgd2FybmluZzogVENQX05PREVMQVkiLCJs ZW4gaXMgMTYtYml0Iix4KTsKLSAgICAgICAgICAgIGlmIChnZXRzb2Nrb3B0KHNvY2ssCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICBJUFBST1RPX1RDUCwgVENQX05PREVMQVksCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZnZXRfbm9kZWxheV9vcHQxNiwgJngpCi0gICAg ICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwKLSAgICAgICAgICAg ICAgICAgICAgICAiVENQIG5vX2RlbGF5IGNhbid0IGdldCBUQ1BfTk9ERUxBWSIsCi0gICAgICAg ICAgICAgICAgICAgICAgY2tfZXJyc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgZXJybm8p OwotICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRfbm9kZWxheV9vcHQxNiAhPSBvbm9mZikgewot ICAgICAgICAgICAgICAgIHNldF9ub2RlbGF5X29wdDE2ID0gb25vZmY7Ci0gICAgICAgICAgICAg ICAgaWYgKHNldHNvY2tvcHQoc29jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ UFBST1RPX1RDUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ1BfTk9ERUxBWSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZzZXRfbm9kZWxheV9vcHQx NiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2V0X25vZGVsYXlfb3B0 MTYpKQotICAgICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgZGVidWco RjExMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlRDUCBub19kZWxheSBjYW4ndCBjbGVh ciBUQ1BfTk9ERUxBWSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNrX2VycnN0cigpLAot ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubyk7Ci0gICAgICAgICAgICAgICAgICAgIHRj cF9ub2RlbGF5ID0gZ2V0X25vZGVsYXlfb3B0MTY7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIlRDUCBub19kZWxheSBuZXcgVENQX05PREVMQVkiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X25vZGVsYXlfb3B0MTYpOwot ICAgICAgICAgICAgICAgICAgICB0Y3Bfbm9kZWxheSA9IG9ub2ZmOwotICAgICAgICAgICAgICAg ICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIlRDUCBub19kZWxheSBUQ1BfTk9ERUxBWSB1bmNo YW5nZWQiLCIiLAotICAgICAgICAgICAgICAgICAgICAgIGdldF9ub2RlbGF5X29wdDE2KTsKLSAg ICAgICAgICAgICAgICB0Y3Bfbm9kZWxheSA9IG9ub2ZmOwotICAgICAgICAgICAgICAgIHJldHVy biAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgICAgIGRlYnVnKEYxMTEsIlRDUCBub19kZWxheSBlcnJvcjog VENQX05PREVMQVkiLCJsZW4iLHgpOwotICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Agbm9fZGVsYXkg VENQX05PREVMQVkiLCJleHBlY3RlZCBsZW4iLAotICAgICAgICAgICAgICBzaXplb2YoZ2V0X25v ZGVsYXlfb3B0KSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsIlRDUCBub19kZWxheSBUQ1BfTk9ERUxB WSIsIm5vZGVsYXlfb3B0IixnZXRfbm9kZWxheV9vcHQpOwotICAgIH0gZWxzZSBpZiAoZ2V0X25v ZGVsYXlfb3B0ICE9IG9ub2ZmKSB7Ci0gICAgICAgIHNldF9ub2RlbGF5X29wdCA9IG9ub2ZmOwot ICAgICAgICBpZiAoc2V0c29ja29wdChzb2NrLAotICAgICAgICAgICAgICAgICAgICAgICBJUFBS T1RPX1RDUCwKLSAgICAgICAgICAgICAgICAgICAgICAgVENQX05PREVMQVksCi0gICAgICAgICAg ICAgICAgICAgICAgIChjaGFyICopJnNldF9ub2RlbGF5X29wdCwKLSAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mKHNldF9ub2RlbGF5X29wdCkpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEx LAotICAgICAgICAgICAgICAgICAgIlRDUCBub19kZWxheSBjYW4ndCBjbGVhciBUQ1BfTk9ERUxB WSIsCi0gICAgICAgICAgICAgICAgICBja19lcnJzdHIoKSwKLSAgICAgICAgICAgICAgICAgIGVy cm5vCi0gICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgdGNwX25vZGVsYXkgPSBnZXRf bm9kZWxheV9vcHQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJU Q1Agbm9fZGVsYXkgbmV3IFRDUF9OT0RFTEFZIiwiIixzZXRfbm9kZWxheV9vcHQpOwotICAgICAg ICAgICAgdGNwX25vZGVsYXkgPSBvbm9mZjsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAg ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVidWcoRjEwMSwiVENQIG5vX2RlbGF5IFRDUF9O T0RFTEFZIHVuY2hhbmdlZCIsIiIsZ2V0X25vZGVsYXlfb3B0KTsKLSAgICAgICAgdGNwX25vZGVs YXkgPSBvbm9mZjsKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLSNlbHNlCi0gICAgZGVidWco RjEwMCwiVENQIG5vX2RlbGF5IFRDUF9OT0RFTEFZIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRp ZiAvKiBUQ1BfTk9ERUxBWSAqLwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJUQ1Agbm9fZGVsYXkg U09fU09DS0VUIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZiAvKiBTT0xfU09DS0VUICovCi0g ICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBOT1RD UE9QVFMgKi8KLQotI2lmZGVmIFNVTlgyNQotI2lmbmRlZiBYMjVfV1JfRkFDSUxJVFkKLS8qIEZv ciBTb2xhcmlzIDIuMyAvIFN1bkxpbmsgOC54IC0gc2VlIGNvbW1lbnRzIGluIGNrY25ldC5oICov Ci12b2lkCi1iemVybyhzLG4pIGNoYXIgKnM7IGludCBuOyB7Ci0gICAgbWVtc2V0KHMsMCxuKTsK LX0KLSNlbmRpZiAvKiBYMjVfV1JfRkFDSUxJVFkgKi8KLSNlbmRpZiAvKiBTVU5YMjUgKi8KLQot I2lmZGVmIFRDUFNPQ0tFVAotI2lmbmRlZiBPUzIKLSNpZm5kZWYgTk9MSVNURU4KLQotI2lmZGVm IEJTRFNFTEVDVAotI2lmbmRlZiBWTVMKLSNpZm5kZWYgQkVMTFYxMAotI2lmbmRlZiBkYXRhZ2Vu ZXJhbAotI2lmZGVmIGhwOTAwMHM1MDAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhQLTkwMDAv NTAwIEhQLVUgNS4yMSAqLwotI2luY2x1ZGUgPHRpbWUuaD4KLSNlbHNlCi0KLS8qKioqKiogVEhJ UyBTRUNUSU9OIEFEREVEIEJZIFNURVZFIFJBTkNFIC0gT1M5IE5FVFdPUksgU0VSVkVSCi0qICAg ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotKgotKiAgICAgICBEdWUgdG8gT1M5J3MgTGFjayBvZiBhIHNlbGVjdCgpIGNhbGwsIHRoZSBm b2xsb3dpbmcgc2VlbXMgdG8gYmUKLSogICAgICAgZW5vdWdoIHRvIGZvb2wgdGhlIHJlc3Qgb2Yg dGhlIGNvZGUgaW50byBjb21waWxpbmcuIFRoZSBvbmx5Ci0qICAgICAgIGVmZmVjdCB0aGF0IEkg Y2FuIHNlZSBpcyB1c2luZyBjb250cm9sIEwgdG8gcmVmcmVzaCB0aGUgc3RhdHVzCi0qICAgICAg IGRpc3BsYXkgZ2V0cyBxdWVkIHVwIHVudGlsIHNvbWUgbmV0d29yayBwYWNrZXRzIGFycml2ZS4K LSoKLSogICAgICAgVGhpcyBzb2x1dGlvbiBpcyBieSBubyBtZWFucyBlbGVnYW50IGJ1dCB3b3Jr cyBlbm91Z2ggdG8gYmUKLSogICAgICAgYSAodGhlKSBzb2x1dGlvbi4KLSoKLSogICAgICAgQWxz byB3aXRoIHRoZSBkZWZpbmVzIEkgaGFkIHNwZWNpZmllZCBpbiBteSBtYWtlZmlsZSBJIGhhZCB0 bwotKiAgICAgICBoYXZlIGFuICNlbmRpZiByaWdodCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIHdo ZW4gY29tcGlsaW5nLgotKiAgICAgICBJIGRpZCBub3QgYm90aGVyIHNwZWRpbmcgdGltZSB0byBm aW5kIG91dCB3aHkuCi0qCi0qICAgICAgIENPUFRTICAgPSAtdG89b3NrIC1kPU9TSyAtZD1UQ1BT T0NLRVQgLWQ9U0VMRUNUIC1kPVZPSUQ9dm9pZCAtZD1TSUdfViBcCi0qICAgICAgICAgIC1kPURZ TkFNSUMgLWQ9UEFSU0VOU0UgLWQ9S0FOSkkgLWQ9TVlDVVJTRVMgLWQ9WkZDREFUIFwKLSogICAg ICAgICAgLWQ9Q0tfQVBDIC1kPUNLX1JFRElSIC1kPVJFTkFNRSAtZD1DS19UVFlGRCAtZD1OT09M RE1PREVNUyBcCi0qICAgICAgICAgIC1kPUNLX0FOU0lDIC1kPUNLX1hZWiAtdHA9NjgwNDBkIC1s PW5ldGRiLmwgLWw9c29ja2xpYi5sIFwKLSogICAgICAgICAgLWw9dGVybWxpYi5sIC1sPW1hdGgu bCAtbD1zeXNfY2xpYi5sCi0qCi0qICAgICAgIHN0ZXZlckBvemVtYWlsLmNvbS5hdQotKi8KLQot I2lmZGVmICBPU0sKLSNkZWZpbmUgQlNEU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAvKiBz d2l0Y2ggb24gQlNEIHNlbGVjdCBjb2RlICovCi0jZGVmaW5lIEZEX1NFVFNJWkUgMzIgICAgICAg ICAgICAgICAgICAgLyogTWF4ICMgb2YgcGF0aHMgaW4gT1M5ICovCi0jZGVmaW5lIEZEX1pFUk8o cCkgICAgICAgICAgICAgICAgICAgICAgKCgqcCk9MCkKLSNkZWZpbmUgRkRfU0VUKG4sYikgICAg ICAgICAgICAgICAgICAgICAoKCpiKXw9KDE8PChuKSkpCi0jZGVmaW5lIEZEX0lTU0VUKG4sYikg ICAgICAgICAgIDEgICAgICAgLyogYWx3YXlzIHNheSBkYXRhIGlzIHJlYWR5ICovCi0jZGVmaW5l IHNlbGVjdChhLGIsYyxkLGUpICAgICAgIDEgICAgICAgLyogYWx3YXlzIHNheSAxIHBhdGggaGFz IGRhdGEgKi8KLXR5cGVkZWYgaW50ICAgICBmZF9zZXQ7ICAgICAgICAgICAgICAgICAvKiBrZWVw IEJTRCBDb2RlIEhhcHB5ICovCi1zdHJ1Y3QgdGltZXZhbCB7aW50IHR2X3NlYyx0dl91c2VjO307 ICAgLyoga2VlcCBCU0QgQ29kZSBIYXBweSAqLwotCi0vKioqKioqIEVORCBPRiBPUzkgTU9EUyBG Uk9NIFNURVZFIFJBTkNFICoqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2VuZGlmIC8qIE9T SyAqLwotCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZiAvKiBocDkwMDBzNTAwICovCi0j ZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBCRUxMVjEwICovCi0jZW5kaWYgLyog Vk1TICovCi0jaWZkZWYgU0VMRUNUX0gKLSNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+Ci0jZW5kaWYg LyogU0VMRUNUX0ggKi8KLSNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KLQotI2lmZGVmIFNFTEVDVAot I2lmZGVmIENLX1NDT1Y1Ci0jaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgotI2VuZGlmIC8qIENLX1ND T1Y1ICovCi0jZW5kaWYgLyogU0VMRUNUICovCi0KLSNpZmRlZiBOT1RVU0VECi0vKiBUIEMgUCBT IE8gQyBLIEUgVCBfIE8gUCBFIE4gLS0gT3BlbiBhIHByZWV4aXN0aW5nIHNvY2tldCBudW1iZXIg Ki8KLQotaW50Ci10Y3Bzb2NrZXRfb3BlbihuYW1lLGxjbCxuZXR0LHRpbW8pIGNoYXIgKiBuYW1l OyBpbnQgKiBsY2w7IGludCBuZXR0OyBpbnQgdGltbyB7Ci0gICAgaW50IG9uID0gMTsKLSAgICBz dGF0aWMgc3RydWN0IHNlcnZlbnQgKnNlcnZpY2UsIHNlcnZyZWM7Ci0gICAgc3RhdGljIHN0cnVj dCBob3N0ZW50ICpob3N0OwotICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FkZHI7Ci0g ICAgc3RhdGljCi0jaWZkZWYgVUNYNTAKLSAgICAgIHVuc2lnbmVkCi0jZW5kaWYgLyogVUNYNTAg Ki8KLSAgICAgIGludCBzYWRkcmxlbjsKLSNpZmRlZiBCU0RTRUxFQ1QKLSAgICBmZF9zZXQgcmZk czsKLSAgICBzdHJ1Y3QgdGltZXZhbCB0djsKLSNlbHNlCi0jaWZkZWYgQkVMTFNFTEVDVAotICAg IGZkX3NldCByZmRzOwotI2Vsc2UKLSAgICBmZF9zZXQgcmZkczsKLSAgICBmZF9zZXQgcmZkczsK LSAgICBzdHJ1Y3QgdGltZXZhbCB7Ci0gICAgICAgIGxvbmcgdHZfc2VjOwotICAgICAgICBsb25n IHR2X3VzZWM7Ci0gICAgfSB0djsKLSNlbmRpZiAvKiBCRUxMU0VMRUNUICovCi0jZW5kaWYgLyog QlNEU0VMRUNUICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0Y3Bzb2NrZXRfb3BlbiBuZXR0IiwiIixu ZXR0KTsKLSAgICAqaXBhZGRyID0gJ1wwJzsKLQotICAgIGlmIChuZXR0ICE9IE5FVF9UQ1BCKQot ICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEJTRCBzb2NrZXQgc3Vw cG9ydCAqLwotCi0gICAgbmV0Y2xvcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xv c2UgYW55IHByZXZpb3VzIGNvbm5lY3Rpb24uICovCi0gICAgY2tzdHJuY3B5KG5hbWVjb3B5LCBu YW1lLCBOQU1FQ1BZTCk7IC8qIENvcHkgdGhlIGhvc3RuYW1lLiAqLwotI2lmZGVmIENPTU1FTlQK LSAgICAvKiBKZWZmJ3MgdmVyc2lvbiBmcm9tIDMwIERlYyAyMDA1IGRvZXNuJ3QgaW5oaWJpdCBU ZWxuZXQgKi8KLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVENQUkFXICYmCi0JdHRucHJvdG8gIT0g TlBfU1NMX1JBVyAmJgotCXR0bnByb3RvICE9IE5QX1RMU19SQVcpCi0gICAgICB0dG5wcm90byA9 IE5QX05PTkU7ICAgICAgICAgICAgICAgLyogTm8gcHJvdG9jb2wgc2VsZWN0ZWQgeWV0LiAqLwot I2Vsc2UKLSAgICAvKiBmZGMncyB2ZXJzaW9uIGZyb20gNCBEZWMgMjAwNSB3b3JrcyBvayAqLwot ICAgIGlmICh0dG5wcm90byAhPSBOUF9UQ1BSQVcpCi0gICAgICB0dG5wcm90byA9IE5QX05PTkU7 ICAgICAgICAgICAgICAgLyogTm8gcHJvdG9jb2wgc2VsZWN0ZWQgeWV0LiAqLwotI2VuZGlmCS8q IENPTU1FTlQgKi8KLSAgICBkZWJ1ZyhGMTEwLCJ0Y3Bzb2NrZXRfb3BlbiBuYW1lY29weSIsbmFt ZWNvcHksMCk7Ci0KLSAgICAvKiBBc3NpZ24gdGhlIHNvY2tldCBudW1iZXIgdG8gdHR5ZmQgYW5k IHRoZW4gZmlsbCBpbiB0Y3Agc3RydWN0dXJlcyAqLwotICAgIHR0eWZkID0gYXRvaSgmbmFtZVsx XSk7Ci0gICAgZGVidWcoRjExMSwidGNwc29ja2V0X29wZW4iLCJ0dHlmZCIsdHR5ZmQpOwotCi0j aWZuZGVmIE5PVENQT1BUUwotI2lmZGVmIFNPTF9TT0NLRVQKLSAgICBzZXRzb2Nrb3B0KHR0eWZk LCBTT0xfU09DS0VULCBTT19PT0JJTkxJTkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOwotCi0j aWZuZGVmIGRhdGFnZW5lcmFsCi0jaWZkZWYgVENQX05PREVMQVkKLSAgICBub19kZWxheSh0dHlm ZCx0Y3Bfbm9kZWxheSk7Ci0jZW5kaWYgLyogVENQX05PREVMQVkgKi8KLSNpZmRlZiBTT19LRUVQ QUxJVkUKLSAgICBrZWVwYWxpdmUodHR5ZmQsdGNwX2tlZXBhbGl2ZSk7Ci0jZW5kaWYgLyogU09f S0VFUEFMSVZFICovCi0jaWZkZWYgU09fTElOR0VSCi0gICAgY2tfbGluZ2VyKHR0eWZkLHRjcF9s aW5nZXIsIHRjcF9saW5nZXJfdG1vKTsKLSNlbmRpZiAvKiBTT19MSU5HRVIgKi8KLSNpZmRlZiBT T19TTkRCVUYKLSAgICBzZW5kYnVmKHR0eWZkLHRjcF9zZW5kYnVmKTsKLSNlbmRpZiAvKiBTT19T TkRCVUYgKi8KLSNpZmRlZiBTT19SQ1ZCVUYKLSAgICByZWN2YnVmKHR0eWZkLHRjcF9yZWN2YnVm KTsKLSNlbmRpZiAvKiBTT19SQ1ZCVUYgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2Vu ZGlmIC8qIFNPTF9TT0NLRVQgKi8KLSNlbmRpZiAvKiBOT1RDUE9QVFMgKi8KLQotI2lmZGVmIE5U X1RDUF9PVkVSTEFQUEVECi0gICAgT3ZlcmxhcHBlZFdyaXRlSW5pdCgpOwotICAgIE92ZXJsYXBw ZWRSZWFkSW5pdCgpOwotI2VuZGlmIC8qIE5UX1RDUF9PVkVSTEFQUEVEICovCi0KLQotICAgIC8q IEdldCB0aGUgbmFtZSBvZiB0aGUgaG9zdCB3ZSBhcmUgY29ubmVjdGVkIHRvICovCi0KLSAgICBz YWRkcmxlbiA9IHNpemVvZihzYWRkcik7Ci0gICAgZ2V0cGVlcm5hbWUodHR5ZmQsKHN0cnVjdCBz b2NrYWRkciAqKSZzYWRkciwmc2FkZHJsZW4pOwotCi0gICAgY2tzdHJuY3B5KGlwYWRkciwoY2hh ciAqKWluZXRfbnRvYShzYWRkci5zaW5fYWRkciksMjApOwotCi0gICAgaWYgKHRjcF9yZG5zID09 IFNFVF9PTgotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgICAgIHx8IHRjcF9yZG5zID09IFNFVF9B VVRPICYmCi0gICAgICAgICAoY2tfa3JiNV9pc19pbnN0YWxsZWQoKSB8fCBja19rcmI0X2lzX2lu c3RhbGxlZCgpKQotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0jaWZuZGVmIE5PSFRUUAotICAg ICAgICAgICYmICh0Y3BfaHR0cF9wcm94eSA9PSBOVUxMKQotI2VuZGlmIC8qIE5PSFRUUCAqLwot I2lmZGVmIENLX1NTTAotICAgICAgICAgICYmICEoc3NsX29ubHlfZmxhZyB8fCB0bHNfb25seV9m bGFnKQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFJldmVyc2UgRE5TICovCi0gICAgICAgIGlmICghcXVpZXQpIHsKLSAgICAg ICAgICAgIHByaW50ZigiIFJldmVyc2UgRE5TIExvb2t1cC4uLiAiKTsKLSAgICAgICAgICAgIGZm bHVzaChzdGRvdXQpOwotICAgICAgICB9Ci0gICAgICAgIGhvc3QgPSBnZXRob3N0YnlhZGRyKChj aGFyICopJnNhZGRyLnNpbl9hZGRyLDQsUEZfSU5FVCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsInRj cHNvY2tldF9vcGVuIGdldGhvc3RieWFkZHIiLGhvc3QgPyAiT0siIDogIkZBSUxFRCIsMCk7Ci0g ICAgICAgIGlmIChob3N0KSB7Ci0gICAgICAgICAgICBob3N0ID0gY2tfY29weWhvc3RlbnQoaG9z dCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0Y3Bzb2NrZXRfb3BlbiBnZXRob3N0YnlhZGRy ICE9IE5VTEwiLCIiLDApOwotICAgICAgICAgICAgaWYgKCFxdWlldCkgewotICAgICAgICAgICAg ICAgIHByaW50ZigiKE9LKVxuIik7Ci0gICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBja3N0cm5jcHkobmFtZSwgaG9zdC0+aF9uYW1lLCA4 MCk7Ci0gICAgICAgICAgICBja3N0cm5jYXQobmFtZSwgIjoiLCA4MCk7Ci0gICAgICAgICAgICBj a3N0cm5jYXQobmFtZSxja3VpdG9hKG50b2hzKHNhZGRyLnNpbl9wb3J0KSksIDgwKTsKLSAgICAg ICAgICAgIGlmICghcXVpZXQKLSNpZm5kZWYgTk9JQ1AKLSAgICAgICAgICAgICAgICAmJiAhZG9j b254Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAg IHByaW50ZigiJXMgY29ubmVjdGVkIG9uIHBvcnQgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAg aG9zdC0+aF9uYW1lLAotICAgICAgICAgICAgICAgICAgIG50b2hzKHNhZGRyLnNpbl9wb3J0KQot ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXF1aWV0KQotICAgICAg ICAgIHByaW50ZigiRmFpbGVkXG4iKTsKLSAgICB9IGVsc2UgaWYgKCFxdWlldCkKLSAgICAgIHBy aW50ZigiKE9LKVxuIik7Ci0KLSAgICBpZiAodGNwX3JkbnMgIT0gU0VUX09OIHx8ICFob3N0KSB7 Ci0gICAgICAgIGNrc3RybmNweShuYW1lLGlwYWRkciw4MCk7Ci0gICAgICAgIGNrc3RybmNhdChu YW1lLCI6Iiw4MCk7Ci0gICAgICAgIGNrc3RybmNhdChuYW1lLGNrdWl0b2EobnRvaHMoc2FkZHIu c2luX3BvcnQpKSw4MCk7Ci0gICAgICAgIGlmICghcXVpZXQKLSNpZmRlZiBOT0lDUAotICAgICAg ICAgICAgJiYgIWRvY29ueAotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgICAgICAgICApCi0gICAg ICAgICAgcHJpbnRmKCIlcyBjb25uZWN0ZWQgb24gcG9ydCAlZFxuIixpcGFkZHIsbnRvaHMoc2Fk ZHIuc2luX3BvcnQpKTsKLSAgICB9Ci0gICAgaWYgKCFxdWlldCkgZmZsdXNoKHN0ZG91dCk7Ci0g ICAgdHRuZXQgPSBuZXR0OyAgICAgICAgICAgICAgICAgICAgICAgLyogVENQL0lQIChzb2NrZXRz KSBuZXR3b3JrICovCi0KLSNpZmRlZiBSTE9HQ09ERQotICAgIGlmIChudG9ocyhzYWRkci5zaW5f cG9ydCkgPT0gNTEzKQotICAgICAgICB0dG5wcm90byA9IE5QX0xPR0lOOwotICAgIGVsc2UKLSNl bmRpZiAvKiBSTE9HQ09ERSAqLwotICAgIC8qIEFzc3VtZSB0aGUgc2VydmljZSBpcyBURUxORVQu ICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgLyogSmVmZidzIGNvZGUgZnJvbSAyMDA1LzEyLzMw ICovCi0gICAgICBpZiAodHRucHJvdG8gIT0gTlBfVENQX1JBVyAmJgotCSAgdHRucHJvdG8gIT0g TlBfU1NMX1JBVyAmJgotCSAgdHRucHJvdG8gIT0gTlBfVExTX1JBVykKLSNlbHNlCi0gICAgICAv KiBmZGMncyBjb2RlIGZyb20gMjAwNS8xMi8wNCAqLwotICAgICAgaWYgKHR0bnByb3RvICE9IE5Q X1RDUFJBVykKLSNlbmRpZgkvKiBDT01NRU5UICovCi0JdHRucHJvdG8gPSBOUF9URUxORVQ7CQkv KiBZZXMsIHNldCBnbG9iYWwgZmxhZy4gKi8KLSNpZmRlZiBDS19TRUNVUklUWQotICAgIC8qIEJl Zm9yZSBJbml0aWFsaXphdGlvbiBUZWxuZXQvUmxvZ2luIE5lZ290aWF0aW9ucyBJbml0IEtlcmJl cm9zICovCi0gICAgY2tfYXV0aF9pbml0KCh0Y3BfcmRucyAmJiBob3N0ICYmIGhvc3QtPmhfbmFt ZSAmJiBob3N0LT5oX25hbWVbMF0pID8KLSAgICAgICAgICAgICAgICBob3N0LT5oX25hbWUgOiBp cGFkZHIsCi0gICAgICAgICAgICAgICAgaXBhZGRyLAotICAgICAgICAgICAgICAgIHVpZGJ1ZiwK LSAgICAgICAgICAgICAgICB0dHlmZAotICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogQ0tf U0VDVVJJVFkgKi8KLSAgICBpZiAodG5faW5pKCkgPCAwKSAgICAgICAgICAgICAgICAgICAvKiBT dGFydC9SZXNldCBURUxORVQgbmVnb3RpYXRpb25zICovCi0gICAgICBpZiAodHRjaGsoKSA8IDAp ICAgICAgICAgICAgICAgICAgLyogRGlkIGl0IGZhaWwgZHVlIHRvIGNvbm5lY3QgbG9zcz8gKi8K LSAgICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmICgqbGNsIDwgMCkgKmxjbCA9IDE7ICAgICAg ICAgICAgIC8qIExvY2FsIG1vZGUuICovCi0KLSAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBEb25lLiAqLwotfQotI2VuZGlmIC8qIE5PVFVTRUQgKi8KLQotLyogIFQg QyBQIFMgUiBWIF8gTyBQIEUgTiAgLS0gIE9wZW4gYSBUQ1AvSVAgU2VydmVyIGNvbm5lY3Rpb24g ICovCi0vKgotICBDYWxsaW5nIGNvbnZlbnRpb25zIHNhbWUgYXMgdHRvcGVuKCksIGV4Y2VwdCB0 aGlyZCBhcmd1bWVudCBpcyBuZXR3b3JrCi0gIHR5cGUgcmF0aGVyIHRoYW4gbW9kZW0gdHlwZS4K LSovCi1pbnQKLXRjcHNydl9vcGVuKG5hbWUsbGNsLG5ldHQsdGltbykgY2hhciAqIG5hbWU7IGlu dCAqIGxjbDsgaW50IG5ldHQ7IGludCB0aW1vOyB7Ci0gICAgY2hhciAqcDsKLSAgICBpbnQgaSwg eDsKLSAgICBTT0NLT1BUX1Qgb24gPSAxOwotICAgIGludCByZWFkeV90b19hY2NlcHQgPSAwOwot ICAgIHN0YXRpYyBzdHJ1Y3Qgc2VydmVudCAqc2VydmljZSwgKnNlcnZpY2UyLCBzZXJ2cmVjOwot ICAgIHN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqaG9zdDsKLSAgICBzdGF0aWMgc3RydWN0IHNvY2th ZGRyX2luIHNhZGRyOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBsX2FkZHI7Ci0gICAgR1NPQ0tO QU1FX1QgbF9zbGVuOwotI2lmZGVmIFVDWDUwCi0gICAgc3RhdGljIHVfaW50IHNhZGRybGVuOwot I2Vsc2UKLSAgICBzdGF0aWMgU09DS09QVF9UIHNhZGRybGVuOwotI2VuZGlmIC8qIFVDWDUwICov Ci0KLSNpZmRlZiBCU0RTRUxFQ1QKLSAgICBmZF9zZXQgcmZkczsKLSAgICBzdHJ1Y3QgdGltZXZh bCB0djsKLSNlbHNlCi0jaWZkZWYgQkVMTFNFTENUCi0gICAgZmRfc2V0IHJmZHM7Ci0jZWxzZQot ICAgIGZkX3NldCByZmRzOwotICAgIHN0cnVjdCB0aW1ldmFsIHsKLSAgICAgICAgbG9uZyB0dl9z ZWM7Ci0gICAgICAgIGxvbmcgdHZfdXNlYzsKLSAgICB9IHR2OwotI2VuZGlmIC8qIEJFTExTRUxF Q1QgKi8KLSNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KLSNpZmRlZiBDS19TU0wKLSAgICBpbnQgc3Ns X2ZhaWxlZCA9IDA7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0Y3Bz cnZfb3BlbiBuZXR0IiwiIixuZXR0KTsKLSAgICAqaXBhZGRyID0gJ1wwJzsKLQotICAgIGlmIChu ZXR0ICE9IE5FVF9UQ1BCKQotICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAg IC8qIEJTRCBzb2NrZXQgc3VwcG9ydCAqLwotCi0gICAgbmV0Y2xvcygpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ2xvc2UgYW55IHByZXZpb3VzIGNvbm5lY3Rpb24uICovCi0gICAgY2tz dHJuY3B5KG5hbWVjb3B5LCBuYW1lLCBOQU1FQ1BZTCk7IC8qIENvcHkgdGhlIGhvc3RuYW1lLiAq LwotICAgIC8qIERvbid0IGRvIHRoaXMuICovCi0jaWZkZWYgQ09NTUVOVAotICAgIC8qIGZkYyAq LwotICAgIGlmICh0dG5wcm90byAhPSBOUF9UQ1BSQVcpCi0gICAgICB0dG5wcm90byA9IE5QX05P TkU7ICAgICAgICAgICAgICAgLyogTm8gcHJvdG9jb2wgc2VsZWN0ZWQgeWV0LiAqLwotI2VuZGlm CS8qIENPTU1FTlQgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogSmVmZiAqLwotICAgIGlmICh0 dG5wcm90byAhPSBOUF9UQ1BfUkFXICYmCi0JdHRucHJvdG8gIT0gTlBfU1NMX1JBVyAmJgotCXR0 bnByb3RvICE9IE5QX1RMU19SQVcpCi0gICAgICB0dG5wcm90byA9IE5QX05PTkU7ICAgICAgICAg ICAgICAgLyogTm8gcHJvdG9jb2wgc2VsZWN0ZWQgeWV0LiAqLwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLSAgICBkZWJ1ZyhGMTEwLCJ0Y3BzcnZfb3BlbiBuYW1lY29weSIsbmFtZWNvcHksMCk7Ci0K LSAgICBwID0gbmFtZWNvcHk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBXYXMgYSBzZXJ2aWNl IHJlcXVlc3RlZD8gKi8KLSAgICB3aGlsZSAoKnAgIT0gJ1wwJyAmJiAqcCAhPSAnOicpCi0gICAg ICBwKys7IC8qIExvb2sgZm9yIGNvbG9uICovCi0gICAgaWYgKCpwID09ICc6JykgeyAgICAgICAg ICAgICAgICAgICAgLyogSGF2ZSBhIGNvbG9uICovCi0gICAgICAgICpwKysgPSAnXDAnOyAgICAg ICAgICAgICAgICAgICAgLyogR2V0IHNlcnZpY2UgbmFtZSBvciBudW1iZXIgKi8KLSAgICB9IGVs c2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgdXNlIGtlcm1pdCAq LwotICAgICAgICBwID0gImtlcm1pdCI7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsInRjcHNydl9v cGVuIHNlcnZpY2UgcmVxdWVzdGVkIixwLDApOwotICAgIGlmIChpc2RpZ2l0KCpwKSkgeyAgICAg ICAgICAgICAgICAgIC8qIFVzZSBzb2NrZXQgbnVtYmVyIHdpdGhvdXQgbG9va3VwICovCi0gICAg ICAgIHNlcnZpY2UgPSAmc2VydnJlYzsKLSAgICAgICAgc2VydmljZS0+c19wb3J0ID0gaHRvbnMo KHVuc2lnbmVkIHNob3J0KWF0b2kocCkpOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE90aGVyd2lzZSBsb29rdXAgdGhlIHNlcnZpY2UgbmFtZSAqLwotICAgICAg ICBzZXJ2aWNlID0gZ2V0c2VydmJ5bmFtZShwLCAidGNwIik7Ci0gICAgfQotICAgIGlmICghc2Vy dmljZSAmJiAhc3RyY21wKCJrZXJtaXQiLHApKSB7IC8qIFVzZSBLZXJtaXQgc2VydmljZSBwb3J0 ICovCi0gICAgICAgIHNlcnZpY2UgPSAmc2VydnJlYzsKLSAgICAgICAgc2VydmljZS0+c19wb3J0 ID0gaHRvbnMoMTY0OSk7Ci0gICAgfQotI2lmZGVmIFJMT0dDT0RFCi0gICAgaWYgKHNlcnZpY2Ug JiYgIXN0cmNtcCgibG9naW4iLHApICYmIHNlcnZpY2UtPnNfcG9ydCAhPSBodG9ucyg1MTMpKSB7 Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICIgIFdhcm5pbmc6IGxv Z2luIHNlcnZpY2Ugb24gcG9ydCAlZCBpbnN0ZWFkIG9mIHBvcnQgNTEzXG4iLAotICAgICAgICAg ICAgICAgICBudG9ocyhzZXJ2aWNlLT5zX3BvcnQpKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIs ICIgIEVkaXQgU0VSVklDRVMgZmlsZSBpZiBSTE9HSU4gZmFpbHMgdG8gY29ubmVjdC5cbiIpOwot ICAgICAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZfb3BlbiBsb2dpbiBvbiBwb3J0IiwiIixudG9ocyhz ZXJ2aWNlLT5zX3BvcnQpKTsKLSAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSAgICBpZiAo IXNlcnZpY2UpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW5ub3QgZmluZCBwb3J0IGZv ciBzZXJ2aWNlOiAlc1xuIiwgcCk7Ci0gICAgICAgIGRlYnVnKEYxMTEsInRjcHNydl9vcGVuIGNh bid0IGdldCBzZXJ2aWNlIixwLGVycm5vKTsKLSAgICAgICAgZXJybm8gPSAwOyAgICAgICAgICAg ICAgICAgICAgICAvKiByYXRoZXIgdGhhbiBtaXNsZWFkICovCi0gICAgICAgIHJldHVybigtMSk7 Ci0gICAgfQotCi0gICAgLyogSWYgd2UgY3VycmVudGx5IGhhdmUgYSBsaXN0ZW4gYWN0aXZlIGJ1 dCBwb3J0IGhhcyBjaGFuZ2VkIHRoZW4gY2xvc2UgKi8KLQotICAgIGRlYnVnKEYxMDEsInRjcHNy dl9vcGVuIGNoZWNraW5nIHByZXZpb3VzIGNvbm5lY3Rpb24iLCIiLHRjcHNyZmQpOwotICAgIGRl YnVnKEYxMDEsInRjcHNydl9vcGVuIHByZXZpb3VzIHRjcHNydl9wb3J0IiwiIix0Y3BzcnZfcG9y dCk7Ci0gICAgaWYgKHRjcHNyZmQgIT0gLTEgJiYKLSAgICAgICAgdGNwc3J2X3BvcnQgIT0gbnRv aHMoKHVuc2lnbmVkIHNob3J0KXNlcnZpY2UtPnNfcG9ydCkpIHsKLSAgICAgICAgZGVidWcoRjEw MCwidGNwc3J2X29wZW4gY2xvc2luZyBwcmV2aW91cyBjb25uZWN0aW9uIiwiIiwwKTsKLSNpZmRl ZiBUQ1BJUExJQgotICAgICAgICBzb2NrZXRfY2xvc2UodGNwc3JmZCk7Ci0jZWxzZQotICAgICAg ICBjbG9zZSh0Y3BzcmZkKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICB0Y3BzcmZk ID0gLTE7Ci0gICAgfQotICAgIGRlYnVnKEYxMDAsInRjcHNydl9vcGVuIHRjcHNyZmQiLCIiLHRj cHNyZmQpOwotICAgIGlmICh0Y3BzcmZkID09IC0xKSB7Ci0KLSAgICAgICAgLyogU2V0IHVwIHNv Y2tldCBzdHJ1Y3R1cmUgYW5kIGdldCBob3N0IGFkZHJlc3MgKi8KLQotICAgICAgICBiemVybygo Y2hhciAqKSZzYWRkciwgc2l6ZW9mKHNhZGRyKSk7Ci0gICAgICAgIGRlYnVnKEYxMDAsInRjcHNy dl9vcGVuIGJ6ZXJvIG9rIiwiIiwwKTsKLSAgICAgICAgc2FkZHIuc2luX2ZhbWlseSA9IEFGX0lO RVQ7Ci0gICAgICAgIGlmICh0Y3BfYWRkcmVzcykgewotI2lmZGVmIElOQUREUlgKLSAgICAgICAg ICAgIGluYWRkcnggPSBpbmV0X2FkZHIodGNwX2FkZHJlc3MpOwotICAgICAgICAgICAgc2FkZHIu c2luX2FkZHIuc19hZGRyID0gKih1bnNpZ25lZCBsb25nICopJmluYWRkcng7Ci0jZWxzZQotICAg ICAgICAgICAgc2FkZHIuc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKHRjcF9hZGRyZXNzKTsK LSNlbmRpZiAvKiBJTkFERFJYICovCi0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHNhZGRyLnNp bl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7Ci0KLSAgICAgICAgLyogR2V0IGEgZmlsZSBkZXNj cmlwdG9yIGZvciB0aGUgY29ubmVjdGlvbi4gKi8KLQotICAgICAgICBzYWRkci5zaW5fcG9ydCA9 IHNlcnZpY2UtPnNfcG9ydDsKLSAgICAgICAgaXBhZGRyWzBdID0gJ1wwJzsKLQotICAgICAgICBk ZWJ1ZyhGMTAwLCJ0Y3BzcnZfb3BlbiBjYWxsaW5nIHNvY2tldCIsIiIsMCk7Ci0gICAgICAgIGlm ICgodGNwc3JmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCkpIDwgMCkgewotICAg ICAgICAgICAgcGVycm9yKCJUQ1Agc29ja2V0IGVycm9yIik7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTAxLCJ0Y3BzcnZfb3BlbiBzb2NrZXQgZXJyb3IiLCIiLGVycm5vKTsKLSAgICAgICAgICAgIHJl dHVybiAoLTEpOwotICAgICAgICB9Ci0gICAgICAgIGVycm5vID0gMDsKLQotICAgICAgICAvKiBT cGVjaWZ5IHRoZSBQb3J0IG1heSBiZSByZXVzZWQgKi8KLQotICAgICAgICBkZWJ1ZyhGMTAwLCJ0 Y3BzcnZfb3BlbiBjYWxsaW5nIHNldHNvY2tvcHQiLCIiLDApOwotICAgICAgICB4ID0gc2V0c29j a29wdCh0Y3BzcmZkLAotICAgICAgICAgICAgICAgICAgICAgICBTT0xfU09DS0VULFNPX1JFVVNF QUREUiwoY2hhciAqKSZvbixzaXplb2Ygb24pOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZf b3BlbiBzZXRzb2Nrb3B0IiwiIix4KTsKLQotICAgICAgIC8qIE5vdyBiaW5kIHRvIHRoZSBzb2Nr ZXQgKi8KLSAgICAgICAgcHJpbnRmKCJcbkJpbmRpbmcgc29ja2V0IHRvIHBvcnQgJWQgLi4uXG4i LAotICAgICAgICAgICAgICAgbnRvaHMoKHVuc2lnbmVkIHNob3J0KXNlcnZpY2UtPnNfcG9ydCkp OwotICAgICAgICBpZiAoYmluZCh0Y3BzcmZkLCAoc3RydWN0IHNvY2thZGRyICopJnNhZGRyLCBz aXplb2Yoc2FkZHIpKSA8IDApIHsKLSAgICAgICAgICAgIGkgPSBlcnJubzsgICAgICAgICAgICAg ICAgICAvKiBTYXZlIGVycm9yIGNvZGUgKi8KLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICAgICAg c29ja2V0X2Nsb3NlKHRjcHNyZmQpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAgICAgICAg IGNsb3NlKHRjcHNyZmQpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgICAgICB0Y3Bz cmZkID0gLTE7Ci0gICAgICAgICAgICB0Y3BzcnZfcG9ydCA9IDA7Ci0gICAgICAgICAgICB0dHlm ZCA9IC0xOwotICAgICAgICAgICAgd2FzY2xvc2VkID0gMTsKLSAgICAgICAgICAgIGVycm5vID0g aTsgICAgICAgICAgICAgICAgICAvKiBhbmQgcmVwb3J0IHRoaXMgZXJyb3IgKi8KLSAgICAgICAg ICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIGJpbmQgZXJybm8iLCIiLGVycm5vKTsKLSAgICAg ICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBiaW5kIHRvIHNvY2tldCAoZXJybm8gPSAlZClcbiIs ZXJybm8pOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICBkZWJ1 ZyhGMTAwLCJ0Y3BzcnZfb3BlbiBiaW5kIE9LIiwiIiwwKTsKLSAgICAgICAgcHJpbnRmKCJMaXN0 ZW5pbmcgLi4uXG4iKTsKLSAgICAgICAgaWYgKGxpc3Rlbih0Y3BzcmZkLCAxNSkgPCAwKSB7Ci0g ICAgICAgICAgICBpID0gZXJybm87ICAgICAgICAgICAgICAgICAgLyogU2F2ZSBlcnJvciBjb2Rl ICovCi0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgICAgIHNvY2tldF9jbG9zZSh0Y3BzcmZkKTsK LSNlbHNlIC8qIFRDUElQTElCICovCi0gICAgICAgICAgICBjbG9zZSh0Y3BzcmZkKTsKLSNlbmRp ZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgdGNwc3JmZCA9IC0xOwotICAgICAgICAgICAg dGNwc3J2X3BvcnQgPSAwOwotICAgICAgICAgICAgdHR5ZmQgPSAtMTsKLSAgICAgICAgICAgIHdh c2Nsb3NlZCA9IDE7Ci0gICAgICAgICAgICBlcnJubyA9IGk7ICAgICAgICAgICAgICAgICAgLyog QW5kIHJlcG9ydCB0aGlzIGVycm9yICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZf b3BlbiBsaXN0ZW4gZXJybm8iLCIiLGVycm5vKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgIH0KLSAgICAgICAgZGVidWcoRjEwMCwidGNwc3J2X29wZW4gbGlzdGVuIE9LIiwiIiww KTsKLSAgICAgICAgdGNwc3J2X3BvcnQgPSBudG9ocygodW5zaWduZWQgc2hvcnQpc2VydmljZS0+ c19wb3J0KTsKLSAgICB9Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoY2tfc3NsZWF5X2lzX2lu c3RhbGxlZCgpKSB7Ci0gICAgICAgIGlmICghc3NsX3RuX2luaXQoU1NMX1NFUlZFUikpIHsKLSAg ICAgICAgICAgIHNzbF9mYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYgKGJpb19lcnIhPU5VTEwp IHsKLSAgICAgICAgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsImRvX3NzbGVheV9pbml0KCkg ZmFpbGVkXG4iKTsKLSAgICAgICAgICAgICAgICBFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwot ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmZmx1c2goc3RkZXJyKTsKLSAg ICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiZG9fc3NsZWF5X2luaXQoKSBmYWlsZWRcbiIp OwotICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJvcnNfZnAoc3RkZXJyKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGlmICh0bHNfb25seV9mbGFnIHx8IHNzbF9vbmx5X2ZsYWcpIHsK LSNpZmRlZiBUQ1BJUExJQgotICAgICAgICAgICAgICAgIHNvY2tldF9jbG9zZSh0dHlmZCk7Ci0g ICAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKHRjcHNyZmQpOwotI2Vsc2UgLyogVENQSVBMSUIg Ki8KLSAgICAgICAgICAgICAgICBjbG9zZSh0dHlmZCk7Ci0gICAgICAgICAgICAgICAgY2xvc2Uo dGNwc3JmZCk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgICAgICB0dHlmZCA9 IC0xOwotICAgICAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDE7Ci0gICAgICAgICAgICAgICAgdGNw c3JmZCA9IC0xOwotICAgICAgICAgICAgICAgIHRjcHNydl9wb3J0ID0gMDsKLSAgICAgICAgICAg ICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogd2Ugd2lsbCBj b250aW51ZSB0byBhY2NlcHQgdGhlIGNvbm5lY3Rpb24gICAqLwotICAgICAgICAgICAgLyogd2l0 aG91dCBTU0wgb3IgVExTIHN1cHBvcnQgdW5sZXNzIHJlcXVpcmVkLiAqLwotICAgICAgICAgICAg aWYgKCBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSAhPSBUTl9OR19NVSAp Ci0gICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykg PSBUTl9OR19SRjsKLSAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRf U1RBUlRfVExTKSAhPSBUTl9OR19NVSApCi0gICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1Vf TU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOwotICAgICAgICAgICAgaWYgKCBURUxP UFRfREVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSAhPSBUTl9OR19NVSApCi0gICAgICAg ICAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19S RjsKLSAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfU1RBUlRfVExT KSAhPSBUTl9OR19NVSApCi0gICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxP UFRfU1RBUlRfVExTKSA9IFROX05HX1JGOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENL X1NTTCAqLwotCi0gICAgcHJpbnRmKCJcbldhaXRpbmcgdG8gQWNjZXB0IGEgVENQL0lQIGNvbm5l Y3Rpb24gb24gcG9ydCAlZCAuLi5cbiIsCi0gICAgICAgICAgIG50b2hzKCh1bnNpZ25lZCBzaG9y dClzZXJ2aWNlLT5zX3BvcnQpKTsKLSAgICBzYWRkcmxlbiA9IHNpemVvZihzYWRkcik7Ci0KLSNp ZmRlZiBCU0RTRUxFQ1QKLSAgICB0di50dl9zZWMgID0gdHYudHZfdXNlYyA9IDBMOwotICAgIGlm ICh0aW1vIDwgMCkKLSAgICAgIHR2LnR2X3VzZWMgPSAobG9uZykgLXRpbW8gKiAxMDAwMEw7Ci0g ICAgZWxzZQotICAgICAgdHYudHZfc2VjID0gdGltbzsKLSAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZf b3BlbiBCU0RTRUxFQ1QiLCIiLHRpbW8pOwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZf b3BlbiBub3QgQlNEU0VMRUNUIiwiIix0aW1vKTsKLSNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KLQot ICAgIGlmICh0aW1vKSB7Ci0gICAgICAgIHdoaWxlICghcmVhZHlfdG9fYWNjZXB0KSB7Ci0jaWZk ZWYgQlNEU0VMRUNUCi0gICAgICAgICAgICBGRF9aRVJPKCZyZmRzKTsKLSAgICAgICAgICAgIEZE X1NFVCh0Y3BzcmZkLCAmcmZkcyk7Ci0gICAgICAgICAgICByZWFkeV90b19hY2NlcHQgPQotICAg ICAgICAgICAgICAoKHNlbGVjdChGRF9TRVRTSVpFLAotI2lmZGVmIEhQVVgKLSNpZmRlZiBIUFVY MTAxMAotICAgICAgICAgICAgICAgICAgICAgICAoZmRfc2V0ICopCi0jZWxzZQotCi0gICAgICAg ICAgICAgICAgICAgICAgIChpbnQgKikKLSNlbmRpZiAvKiBIUFVYMTAxMCAqLwotI2Vsc2UKLSNp ZmRlZiBfX0RFQ0MKLSNpZmRlZiBJTlRTRUxFQ1QKLSAgICAgICAgICAgICAgICAgICAgICAgKGlu dCAqKQotI2Vsc2UgLyogZGVmIElOVFNFTEVDVCAqLwotICAgICAgICAgICAgICAgICAgICAgICAo ZmRfc2V0ICopCi0jZW5kaWYgLyogZGVmIElOVFNFTEVDVCBbZWxzZV0gKi8KLSNlbmRpZiAvKiBf X0RFQ0MgKi8KLSNlbmRpZiAvKiBIUFVYICovCi0gICAgICAgICAgICAgICAgICAgICAgICZyZmRz LCBOVUxMLCBOVUxMLCAmdHYpID4gMCkgJiYKLSAgICAgICAgICAgICAgIEZEX0lTU0VUKHRjcHNy ZmQsICZyZmRzKSk7Ci0jZWxzZSAvKiBCU0RTRUxFQ1QgKi8KLSNpZmRlZiBJQk1TRUxFQ1QKLSNk ZWZpbmUgY2tfc2xlZXBpbnQgMjUwCi0gICAgICAgICAgICByZWFkeV90b19hY2NlcHQgPQotICAg ICAgICAgICAgICAoc2VsZWN0KCZ0Y3BzcmZkLCAxLCAwLCAwLAotICAgICAgICAgICAgICAgICAg ICAgIHRpbW8gPCAwID8gLXRpbW8gOgotICAgICAgICAgICAgICAgICAgICAgICh0aW1vID4gMCA/ IHRpbW8gKiAxMDAwTCA6IGNrX3NsZWVwaW50KSkgPT0gMQotICAgICAgICAgICAgICAgKTsKLSNl bHNlCi0jaWZkZWYgQkVMTFNFTEVDVAotICAgICAgICAgICAgRkRfWkVSTyhyZmRzKTsKLSAgICAg ICAgICAgIEZEX1NFVCh0Y3BzcmZkLCByZmRzKTsKLSAgICAgICAgICAgIHJlYWR5X3RvX2FjY2Vw dCA9Ci0gICAgICAgICAgICAgICgoc2VsZWN0KDEyOCwgcmZkcywgTlVMTCwgTlVMTCwgdGltbyA8 IDAgPyAtdGltbyA6Ci0gICAgICAgICAgICAgICAgICAgICAgKHRpbW8gPiAwID8gdGltbyAqIDEw MDBMKSkgPiAwKSAmJgotICAgICAgICAgICAgICAgRkRfSVNTRVQodGNwc3JmZCwgcmZkcykpOwot I2Vsc2UKLS8qIFRyeSB0aGlzIC0gd2hhdCdzIHRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4uLi4g Ki8KLQotICAgICAgICAgICAgRkRfWkVSTygmcmZkcyk7Ci0gICAgICAgICAgICBGRF9TRVQodGNw c3JmZCwgJnJmZHMpOwotICAgICAgICAgICAgcmVhZHlfdG9fYWNjZXB0ID0KLSAgICAgICAgICAg ICAgKChzZWxlY3QoRkRfU0VUU0laRSwKLSAgICAgICAgICAgICAgICAgICAgICAgKGZkX3NldCAq KSAmcmZkcywgTlVMTCwgTlVMTCwgJnR2KSA+IDApICYmCi0gICAgICAgICAgICAgICBGRF9JU1NF VCh0Y3BzcmZkLCAmcmZkcykpOwotCi0jZW5kaWYgLyogQkVMTFNFTEVDVCAqLwotI2VuZGlmIC8q IElCTVNFTEVDVCAqLwotI2VuZGlmIC8qIEJTRFNFTEVDVCAqLwotICAgICAgICB9Ci0gICAgfQot ICAgIGlmIChyZWFkeV90b19hY2NlcHQgfHwgdGltbyA9PSAwKSB7Ci0gICAgICAgIGlmICgodHR5 ZmQgPSBhY2NlcHQodGNwc3JmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0 IHNvY2thZGRyICopJnNhZGRyLCZzYWRkcmxlbikpIDwgMCkgewotICAgICAgICAgICAgaSA9IGVy cm5vOyAgICAgICAgICAgICAgICAgIC8qIHNhdmUgZXJyb3IgY29kZSAqLwotI2lmZGVmIFRDUElQ TElCCi0gICAgICAgICAgICBzb2NrZXRfY2xvc2UodGNwc3JmZCk7Ci0jZWxzZSAvKiBUQ1BJUExJ QiAqLwotICAgICAgICAgICAgY2xvc2UodGNwc3JmZCk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8K LSAgICAgICAgICAgIHR0eWZkID0gLTE7Ci0gICAgICAgICAgICB3YXNjbG9zZWQgPSAxOwotICAg ICAgICAgICAgdGNwc3JmZCA9IC0xOwotICAgICAgICAgICAgdGNwc3J2X3BvcnQgPSAwOwotICAg ICAgICAgICAgZXJybm8gPSBpOyAgICAgICAgICAgICAgICAgIC8qIGFuZCByZXBvcnQgdGhpcyBl cnJvciAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gYWNjZXB0IGVycm5v IiwiIixlcnJubyk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAg IHNldHNvY2tvcHQodHR5ZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24s IHNpemVvZiBvbik7Ci0KLSNpZm5kZWYgTk9UQ1BPUFRTCi0jaWZuZGVmIGRhdGFnZW5lcmFsCi0j aWZkZWYgU09MX1NPQ0tFVAotI2lmZGVmIFRDUF9OT0RFTEFZCi0gICAgICAgIG5vX2RlbGF5KHR0 eWZkLHRjcF9ub2RlbGF5KTsKLSAgICAgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gbm9fZGVs YXkiLCIiLHRjcF9ub2RlbGF5KTsKLSNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwotI2lmZGVmIFNP X0tFRVBBTElWRQotICAgICAgICBrZWVwYWxpdmUodHR5ZmQsdGNwX2tlZXBhbGl2ZSk7Ci0gICAg ICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIGtlZXBhbGl2ZSIsIiIsdGNwX2tlZXBhbGl2ZSk7 Ci0jZW5kaWYgLyogU09fS0VFUEFMSVZFICovCi0jaWZkZWYgU09fTElOR0VSCi0gICAgICAgIGNr X2xpbmdlcih0dHlmZCx0Y3BfbGluZ2VyLCB0Y3BfbGluZ2VyX3Rtbyk7Ci0gICAgICAgIGRlYnVn KEYxMDEsInRjcHNydl9vcGVuIGxpbmdlciIsIiIsdGNwX2xpbmdlcl90bW8pOwotI2VuZGlmIC8q IFNPX0xJTkdFUiAqLwotI2lmZGVmIFNPX1NOREJVRgotICAgICAgICBzZW5kYnVmKHR0eWZkLHRj cF9zZW5kYnVmKTsKLSNlbmRpZiAvKiBTT19TTkRCVUYgKi8KLSNpZmRlZiBTT19SQ1ZCVUYKLSAg ICAgICAgcmVjdmJ1Zih0dHlmZCx0Y3BfcmVjdmJ1Zik7Ci0jZW5kaWYgLyogU09fUkNWQlVGICov Ci0jZW5kaWYgLyogU09MX1NPQ0tFVCAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5k aWYgLyogTk9UQ1BPUFRTICovCi0KLSAgICAgICAgdHRuZXQgPSBuZXR0OyAgICAgICAgICAgICAg ICAgICAvKiBUQ1AvSVAgKHNvY2tldHMpIG5ldHdvcmsgKi8KLSAgICAgICAgdGNwX2luY29taW5n ID0gMTsgICAgICAgICAgICAgICAvKiBUaGlzIGlzIGFuIGluY29taW5nIGNvbm5lY3Rpb24gKi8K LSAgICAgICAgc3N0ZWxuZXQgPSAxOyAgICAgICAgICAgICAgICAgICAvKiBEbyBzZXJ2ZXItc2lk ZSBUZWxuZXQgcHJvdG9jb2wgKi8KLQotICAgICAgICAvKiBTZWUgaWYgdGhlIHNlcnZpY2UgaXMg VEVMTkVULiAqLwotICAgICAgICB4ID0gKHVuc2lnbmVkIHNob3J0KXNlcnZpY2UtPnNfcG9ydDsK LSAgICAgICAgc2VydmljZTIgPSBnZXRzZXJ2YnluYW1lKCJ0ZWxuZXQiLCAidGNwIik7Ci0gICAg ICAgIGlmIChzZXJ2aWNlMiAmJiB4ID09IHNlcnZpY2UyLT5zX3BvcnQpIHsKLSNpZmRlZiBDT01N RU5UCi0JICAgIC8qIEplZmYgMjAwNS8xMi8zMCAqLwotCSAgICBpZiAodHRucHJvdG8gIT0gTlBf VENQUkFXICYmIC8qIFllcy4uLiAqLwotCQkgdHRucHJvdG8gIT0gTlBfU1NMX1JBVyAmJgotCQkg dHRucHJvdG8gIT0gTlBfVExTX1JBVykgLyogYW5kIGlmIHJhdyBwb3J0IG5vdCByZXF1ZXN0ZWQg Ki8KLSNlbHNlCi0JICAgIC8qIGZkYyAyMDA1LzEyLzA0ICovCi0gICAgICAgICAgICBpZiAodHRu cHJvdG8gIT0gTlBfVENQUkFXKSAgLyogWWVzIGFuZCBpZiByYXcgcG9ydCBub3QgcmVxdWVzdGVk ICovCi0jZW5kaWYJLyogICovCi0gICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOwkv KiBzZXQgcHJvdG9jb2wgdG8gVEVMTkVULiAqLwotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNw eShpcGFkZHIsKGNoYXIgKilpbmV0X250b2Eoc2FkZHIuc2luX2FkZHIpLDIwKTsKLSAgICAgICAg aWYgKHRjcF9yZG5zKSB7Ci0gICAgICAgICAgICBpZiAoIXF1aWV0KSB7Ci0gICAgICAgICAgICAg ICAgcHJpbnRmKCIgUmV2ZXJzZSBETlMgTG9va3VwLi4uICIpOwotICAgICAgICAgICAgICAgIGZm bHVzaChzdGRvdXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhvc3QgPSBnZXRo b3N0YnlhZGRyKChjaGFyICopJnNhZGRyLnNpbl9hZGRyLDQsUEZfSU5FVCkpIHsKLSAgICAgICAg ICAgICAgICBob3N0ID0gY2tfY29weWhvc3RlbnQoaG9zdCk7Ci0gICAgICAgICAgICAgICAgZGVi dWcoRjEwMCwidGNwc3J2X29wZW4gZ2V0aG9zdGJ5YWRkciAhPSBOVUxMIiwiIiwwKTsKLSAgICAg ICAgICAgICAgICBpZiAoIXF1aWV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiKE9L KVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lWzBdID0gJyonOwotICAgICAgICAgICAgICAgIGNr c3RybmNweSgmbmFtZVsxXSxob3N0LT5oX25hbWUsNzgpOwotICAgICAgICAgICAgICAgIGNrc3Ry bmNhdChuYW1lLCI6Iiw4MC1zdHJsZW4obmFtZSkpOwotICAgICAgICAgICAgICAgIGNrc3RybmNh dChuYW1lLHAsODAtc3RybGVuKG5hbWUpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXF1aWV0Ci0j aWZuZGVmIE5PSUNQCi0gICAgICAgICAgICAgICAgICAgICYmICFkb2NvbngKLSNlbmRpZiAvKiBO T0lDUCAqLwotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICBwcmludGYo IiVzIGNvbm5lY3RlZCBvbiBwb3J0ICVzXG4iLGhvc3QtPmhfbmFtZSxwKTsKLSAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFxdWlldCkgcHJpbnRmKCJGYWlsZWQuXG4i KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghcXVpZXQpIHByaW50ZigiKE9L KVxuIik7Ci0KLSAgICAgICAgaWYgKCF0Y3BfcmRucyB8fCAhaG9zdCkgewotICAgICAgICAgICAg Y2tzdHJuY3B5KG5hbWUsaXBhZGRyLDgwKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChuYW1lLCI6 Iiw4MCk7Ci0gICAgICAgICAgICBja3N0cm5jYXQobmFtZSxja3VpdG9hKG50b2hzKHNhZGRyLnNp bl9wb3J0KSksODApOwotICAgICAgICAgICAgaWYgKCFxdWlldAotI2lmbmRlZiBOT0lDUAotICAg ICAgICAgICAgICAgICYmICFkb2NvbngKLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgICAgICAgICAg ICAgICkKLSAgICAgICAgICAgICAgcHJpbnRmKCIlcyBjb25uZWN0ZWQgb24gcG9ydCAlZFxuIixp cGFkZHIsbnRvaHMoc2FkZHIuc2luX3BvcnQpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXF1 aWV0KSBmZmx1c2goc3Rkb3V0KTsKLQotI2lmZGVmIENLX1NFQ1VSSVRZCi0gICAgICAgIC8qIEJl Zm9yZSBJbml0aWFsaXphdGlvbiBUZWxuZXQvUmxvZ2luIE5lZ290aWF0aW9ucyBJbml0IEtlcmJl cm9zICovCi0gICAgICAgIGNrX2F1dGhfaW5pdCgodGNwX3JkbnMgJiYgaG9zdCAmJiBob3N0LT5o X25hbWUgJiYgaG9zdC0+aF9uYW1lWzBdKSA/Ci0gICAgICAgICAgICAgICAgICAgICAoY2hhciAq KWhvc3QtPmhfbmFtZSA6IGlwYWRkciwKLSAgICAgICAgICAgICAgICAgICAgIGlwYWRkciwKLSAg ICAgICAgICAgICAgICAgICAgIHVpZGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgIHR0eWZkCi0g ICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIENLX1NFQ1VSSVRZICovCi0KLSNpZmRl ZiBDS19TU0wKLSAgICAgICAgaWYgKGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSAmJiAhc3NsX2Zh aWxlZCkgewotICAgICAgICAgICAgaWYgKGNrX3NzbF9pbmNvbWluZyh0dHlmZCkgPCAwKSB7Ci0j aWZkZWYgVENQSVBMSUIKLSAgICAgICAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKHR0eWZkKTsK LSAgICAgICAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKHRjcHNyZmQpOwotI2Vsc2UgLyogVENQ SVBMSUIgKi8KLSAgICAgICAgICAgICAgICAgICAgY2xvc2UodHR5ZmQpOwotICAgICAgICAgICAg ICAgICAgICBjbG9zZSh0Y3BzcmZkKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICAg ICAgICAgICAgICB0dHlmZCA9IC0xOwotICAgICAgICAgICAgICAgICAgICB3YXNjbG9zZWQgPSAx OwotICAgICAgICAgICAgICAgICAgICB0Y3BzcmZkID0gLTE7Ci0gICAgICAgICAgICAgICAgICAg IHRjcHNydl9wb3J0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0jaWZuZGVmIGRhdGFn ZW5lcmFsCi0gICAgICAgIC8qIEZpbmQgb3V0IG91ciBvd24gSVAgYWRkcmVzcy4gKi8KLSAgICAg ICAgbF9zbGVuID0gc2l6ZW9mKGxfYWRkcik7Ci0gICAgICAgIGJ6ZXJvKChjaGFyICopJmxfYWRk ciwgbF9zbGVuKTsKLSNpZm5kZWYgRVhDRUxBTgotICAgICAgICBpZiAoIWdldHNvY2tuYW1lKHR0 eWZkLCAoc3RydWN0IHNvY2thZGRyICopJmxfYWRkciwgJmxfc2xlbikpIHsKLSAgICAgICAgICAg IGNoYXIgKiBzID0gKGNoYXIgKilpbmV0X250b2EobF9hZGRyLnNpbl9hZGRyKTsKLSAgICAgICAg ICAgIGNrc3RybmNweShteWlwYWRkciwgcywyMCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJn ZXRzb2NrbmFtZSIsbXlpcGFkZHIsMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBFWENFTEFOICov Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotICAgICAgICBpZiAodG5faW5pKCkgPCAwKSAg ICAgICAgICAgICAgIC8qIFN0YXJ0IFRFTE5FVCBuZWdvdGlhdGlvbnMuICovCi0gICAgICAgICAg aWYgKHR0Y2hrKCkgPCAwKSB7ICAgICAgICAgICAgLyogRGlzY29ubmVjdGVkPyAqLwotICAgICAg ICAgICAgICBpID0gZXJybm87ICAgICAgICAgICAgICAgIC8qIHNhdmUgZXJyb3IgY29kZSAqLwot I2lmZGVmIFRDUElQTElCCi0gICAgICAgICAgICAgIHNvY2tldF9jbG9zZSh0Y3BzcmZkKTsKLSNl bHNlIC8qIFRDUElQTElCICovCi0gICAgICAgICAgICAgIGNsb3NlKHRjcHNyZmQpOwotI2VuZGlm IC8qIFRDUElQTElCICovCi0gICAgICAgICAgICAgIHR0eWZkID0gLTE7Ci0gICAgICAgICAgICAg IHdhc2Nsb3NlZCA9IDE7Ci0gICAgICAgICAgICAgIHRjcHNyZmQgPSAtMTsKLSAgICAgICAgICAg ICAgdGNwc3J2X3BvcnQgPSAwOwotICAgICAgICAgICAgICBlcnJubyA9IGk7ICAgICAgICAgICAg ICAgIC8qIGFuZCByZXBvcnQgdGhpcyBlcnJvciAqLwotICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJ0Y3BzcnZfb3BlbiBhY2NlcHQgZXJybm8iLCIiLGVycm5vKTsKLSAgICAgICAgICAgICAgcmV0 dXJuKC0xKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIHNl cnZpY2UiLCIiLHgpOwotICAgICAgICBpZiAoKmxjbCA8IDApICAgICAgICAgICAgICAgICAgIC8q IFNldCBsb2NhbCBtb2RlLiAqLwotICAgICAgICAgICpsY2wgPSAxOwotCi0jaWZkZWYgQ0tfS0VS QkVST1MKLSNpZmRlZiBLUkI1X1UyVQotICAgICAgICBpZiAoIHR0bnByb3RvID09IE5QX0s1VTJV ICkgewotICAgICAgICAgICAgaWYgKGs1X3VzZXJfdG9fdXNlcl9zZXJ2ZXJfYXV0aCgpICE9IDAp IHsKLSAgICAgICAgICAgICAgICBpID0gZXJybm87ICAgICAgICAgICAgICAgIC8qIHNhdmUgZXJy b3IgY29kZSAqLwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAgICAgICAgc29ja2V0X2Nsb3Nl KHRjcHNyZmQpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgICAgICBjbG9zZSh0 Y3BzcmZkKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgICAgIHR0eWZkID0g LTE7Ci0gICAgICAgICAgICAgICAgd2FzY2xvc2VkID0gMTsKLSAgICAgICAgICAgICAgICB0Y3Bz cmZkID0gLTE7Ci0gICAgICAgICAgICAgICAgdGNwc3J2X3BvcnQgPSAwOwotICAgICAgICAgICAg ICAgIGVycm5vID0gaTsgICAgICAgICAgICAgICAgLyogYW5kIHJlcG9ydCB0aGlzIGVycm9yICov Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gYWNjZXB0IGVycm5vIiwi IixlcnJubyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotI2VuZGlmIC8qIEtSQjVfVTJVICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8K LSAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAvKiBEb25lLiAqLwotICAg IH0gZWxzZSB7Ci0gICAgICAgIGkgPSBlcnJubzsgICAgICAgICAgICAgICAgICAgICAgLyogc2F2 ZSBlcnJvciBjb2RlICovCi0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgc29ja2V0X2Nsb3NlKHRj cHNyZmQpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAgICAgY2xvc2UodGNwc3JmZCk7Ci0j ZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICAgICAgdHR5ZmQgPSAtMTsKLSAgICAgICAgd2FzY2xv c2VkID0gMTsKLSAgICAgICAgdGNwc3JmZCA9IC0xOwotICAgICAgICB0Y3BzcnZfcG9ydCA9IDA7 Ci0gICAgICAgIGVycm5vID0gaTsgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHJlcG9ydCB0 aGlzIGVycm9yICovCi0gICAgICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIGFjY2VwdCBlcnJu byIsIiIsZXJybm8pOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLX0KLSNlbmRpZiAvKiBO T0xJU1RFTiAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2Vu ZGlmIC8qIE5PTkVUICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQKLWNoYXIgKgotY2tuYW1lMmFkZHIo bmFtZSkgY2hhciAqIG5hbWU7Ci17Ci0jaWZkZWYgSFBVWDUKLSAgICByZXR1cm4oIiIpOwotI2Vs c2UKLSAgICBzdHJ1Y3QgaG9zdGVudCAqaG9zdDsKLQotICAgIGlmIChuYW1lID09IE5VTEwgfHwg Km5hbWUgPT0gJ1wwJykKLSAgICAgICAgcmV0dXJuKCIiKTsKLQotICAgIGhvc3QgPSBnZXRob3N0 YnluYW1lKG5hbWUpOwotICAgIGlmICggaG9zdCApIHsKLSAgICAgICAgaG9zdCA9IGNrX2NvcHlo b3N0ZW50KGhvc3QpOwotICAgICAgICByZXR1cm4oaW5ldF9udG9hKCooKHN0cnVjdCBpbl9hZGRy ICopIGhvc3QtPmhfYWRkcikpKTsKLSAgICB9Ci0gICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBI UFVYNSAqLwotfQotCi1jaGFyICoKLWNrYWRkcjJuYW1lKGFkZHIpIGNoYXIgKiBhZGRyOwotewot I2lmZGVmIEhQVVg1Ci0gICAgcmV0dXJuKCIiKTsKLSNlbHNlCi0gICAgc3RydWN0IGhvc3RlbnQg Kmhvc3Q7Ci0gICAgc3RydWN0IGluX2FkZHIgc2luX2FkZHI7Ci0KLSAgICBpZiAoYWRkciA9PSBO VUxMIHx8ICphZGRyID09ICdcMCcpCi0gICAgICAgIHJldHVybigiIik7Ci0KLSAgICBzaW5fYWRk ci5zX2FkZHIgPSBpbmV0X2FkZHIoYWRkcik7Ci0gICAgaG9zdCA9IGdldGhvc3RieWFkZHIoKGNo YXIgKikmc2luX2FkZHIsNCxBRl9JTkVUKTsKLSAgICBpZiAoaG9zdCkgewotICAgICAgICBob3N0 ID0gY2tfY29weWhvc3RlbnQoaG9zdCk7Ci0gICAgICAgIHJldHVybigoY2hhciAqKWhvc3QtPmhf bmFtZSk7Ci0gICAgfQotICAgIHJldHVybigiIik7Ci0jZW5kaWYgLyogSFBVWDUgKi8KLX0KLSNl bmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotdW5zaWduZWQgbG9uZyBwZWVyeGlwYWRkciA9IDBMOwot Ci1jaGFyICoKLWNrZ2V0cGVlcigpIHsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBzdGF0aWMgY2hh ciBuYW1lYnVmWzI1Nl07Ci0gICAgc3RhdGljIHN0cnVjdCBob3N0ZW50ICpob3N0OwotICAgIHN0 YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FkZHI7Ci0jaWZkZWYgR1BFRVJOQU1FX1QKLSAgICBz dGF0aWMgR1BFRVJOQU1FX1Qgc2FkZHJsZW47Ci0jZWxzZQotI2lmZGVmIFBUWAotICAgIHN0YXRp YyBzaXplX3Qgc2FkZHJsZW47Ci0jZWxzZQotI2lmZGVmIEFJWDQyCi0gICAgLyogSXQncyBzaXpl X3QgaW4gNC4yIGJ1dCBpbnQgaW4gNC4xIGFuZCBlYXJsaWVyLiAqLwotICAgIC8qIE5vdGU6IHRo ZSA0LjIgbWFuIHBhZ2UgbGllczsgYmVsaWV2ZSBzb2NrZXQuaC4gKi8KLSAgICBzdGF0aWMgc2l6 ZV90IHNhZGRybGVuOwotI2Vsc2UKLSNpZmRlZiBVTklYV0FSRQotICAgIHN0YXRpYyBzaXplX3Qg c2FkZHJsZW47Ci0jZWxzZSAgLyogVU5JWFdBUkUgKi8KLSNpZmRlZiBERUNfVENQSVAKLS8qIDIw MTAtMDMtMDggU01TLgotICogQ29pbmNpZGVudGFsbHksIHRoZSBjb25kaXRpb24gZm9yIGludGVn ZXIgYXJndW1lbnRzIGluIHNlbGVjdCgpLAotICogd2hpY2ggaXMgYWN0dWFsbHkgImRlZmluZWQo IF9ERUNDX1Y0X1NPVVJDRSkiLCB3b3JrcyBmb3IgYW4gaW50ZWdlcgotICogYXJndW1lbnQgaW4g Z2V0cGVlcm5hbWUoKS4gIFNhZGx5LCBkdWUgdG8gYSBsYWNrIG9mIGZvcmVzaWdodCwKLSAqICJk ZWZpbmVkKCBfREVDQ19WNF9TT1VSQ0UpIiBkb2Vzbid0IHdvcmsgd2l0aCBERUMgQyBWNC4wLCBz byB0aGUKLSAqIHVzZXItc3BlY2lmaWVkIElOVFNFTEVDVCBpcyB1c2VkIGluc3RlYWQuICBNb3N0 IGxpa2VseSwgInNpemVfdCIKLSAqIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgInVuc2lnbmVk IGludCIsIGJ1dCBJJ20gYSBjb3dhcmQuCi0gKi8KLSNpZmRlZiBJTlRTRUxFQ1QKLSAgICBzdGF0 aWMgaW50IHNhZGRybGVuOwotI2Vsc2UgLyogZGVmIElOVFNFTEVDVCAqLwotICAgIHN0YXRpYyB1 bnNpZ25lZCBpbnQgc2FkZHJsZW47Ci0jZW5kaWYgLyogZGVmIElOVFNFTEVDVCBbZWxzZV0gKi8K LSNlbHNlCi0jaWZkZWYgTUFDT1NYMTAKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNhZGRybGVu OwotI2Vsc2UKLSNpZmRlZiBDS182NEJJVAotICAgIHN0YXRpYyBzb2NrbGVuX3Qgc2FkZHJsZW47 Ci0jZWxzZQotICAgIHN0YXRpYyBpbnQgc2FkZHJsZW47Ci0jZW5kaWYJLyogQ0tfNjRCSVQgKi8K LSNlbmRpZiAvKiBNQUNPU1gxMCAqLwotI2VuZGlmIC8qIERFQ19UQ1BJUCAqLwotI2VuZGlmIC8q IFVOSVhXQVJFICovCi0jZW5kaWYgLyogQUlYNDIgKi8KLSNlbmRpZiAvKiBQVFggKi8KLSNlbmRp ZgkvKiBHUEVFUk5BTUVfVCAqLwotICAgIHNhZGRybGVuID0gc2l6ZW9mKHNhZGRyKTsKLSAgICBp ZiAoZ2V0cGVlcm5hbWUodHR5ZmQsKHN0cnVjdCBzb2NrYWRkciAqKSZzYWRkciwmc2FkZHJsZW4p IDwgMCkgewotICAgICAgICBkZWJ1ZyhGMTExLCJja2dldHBlZXIgZmFpbHVyZSIsY2tpdG9hKHR0 eWZkKSxlcnJubyk7Ci0gICAgICAgIHJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgaG9zdCA9IGdl dGhvc3RieWFkZHIoKGNoYXIgKikmc2FkZHIuc2luX2FkZHIsNCxBRl9JTkVUKTsKLSAgICBpZiAo aG9zdCkgewotICAgICAgICBob3N0ID0gY2tfY29weWhvc3RlbnQoaG9zdCk7Ci0gICAgICAgIGNr c3RybmNweShuYW1lYnVmLChjaGFyICopaG9zdC0+aF9uYW1lLDgwKTsKLSAgICB9IGVsc2Ugewot ICAgICAgICBja3N0cm5jcHkobmFtZWJ1ZiwoY2hhciAqKWluZXRfbnRvYShzYWRkci5zaW5fYWRk ciksODApOwotICAgIH0KLSAgICBwZWVyeGlwYWRkciA9IG50b2hsKHNhZGRyLnNpbl9hZGRyLnNf YWRkcik7Ci0gICAgZGVidWcoRjExMSwiY2tnZXRwZWVyIixuYW1lYnVmLHBlZXJ4aXBhZGRyKTsK LSAgICByZXR1cm4obmFtZWJ1Zik7Ci0jZWxzZQotICAgIHJldHVybihOVUxMKTsKLSNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KLX0KLQotLyogR2V0IGZ1bGx5IHF1YWxpZmllZCBJUCBob3N0bmFtZSAq LwotCi0jaWZuZGVmIE5PTkVUCi1jaGFyICoKLSNpZmRlZiBDS19BTlNJQwotY2tnZXRmcWhvc3Ru YW1lKGNoYXIgKiBuYW1lKQotI2Vsc2UKLWNrZ2V0ZnFob3N0bmFtZShuYW1lKSBjaGFyICogbmFt ZTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotI2lmZGVmIE5PQ0tHRVRGUUhPU1QKLQotICAg IHJldHVybihuYW1lKTsKLQotI2Vsc2UgLyogSWYgdGhlIGZvbGxvd2luZyBjb2RlIGR1bXBzIGNv cmUsIGRlZmluZSBOT0NLR0VURlFIT1NUIGFuZCByZWJ1aWxkLiAqLwotCi0gICAgc3RhdGljIGNo YXIgbmFtZWJ1ZlsyNTZdOwotICAgIHN0cnVjdCBob3N0ZW50ICpob3N0PU5VTEw7Ci0gICAgc3Ry dWN0IHNvY2thZGRyX2luIHJfYWRkcjsKLSAgICBpbnQgaTsKLQotICAgIGRlYnVnKEYxMTAsImNr Z2V0ZnFobigpIixuYW1lLDApOwotCi0gICAgY2tzdHJuY3B5KG5hbWVidWYsbmFtZSwyNTYpOwot ICAgIG5hbWVidWZbMjU1XSA9ICdcMCc7Ci0gICAgaSA9IGNraW5kZXgoIjoiLG5hbWVidWYsMCww LDApOwotICAgIGlmIChpKQotICAgICAgbmFtZWJ1ZltpLTFdID0gJ1wwJzsKLQotICAgIGJ6ZXJv KChjaGFyICopJnJfYWRkciwgc2l6ZW9mKHJfYWRkcikpOwotCi0gICAgaG9zdCA9IGdldGhvc3Ri eW5hbWUobmFtZWJ1Zik7Ci0gICAgaWYgKGhvc3QpIHsKLSAgICAgICAgaG9zdCA9IGNrX2NvcHlo b3N0ZW50KGhvc3QpOwotICAgICAgICBkZWJ1ZyhGMTAwLCJja2dldGZxaG4oKSBnZXRob3N0Ynlu YW1lICE9IE5VTEwiLCIiLDApOwotICAgICAgICByX2FkZHIuc2luX2ZhbWlseSA9IGhvc3QtPmhf YWRkcnR5cGU7Ci0jaWZkZWYgSEFERFJMSVNUCi0jaWZkZWYgaF9hZGRyCi0gICAgICAgIC8qIFRo aXMgaXMgZm9yIHRyeWluZyBtdWx0aXBsZSBJUCBhZGRyZXNzZXMgLSBzZWUgPG5ldGRiLmg+ICov Ci0gICAgICAgIGlmICghKGhvc3QtPmhfYWRkcl9saXN0KSkKLSAgICAgICAgICBnb3RvIGV4aXRf ZnVuYzsKLSAgICAgICAgYmNvcHkoaG9zdC0+aF9hZGRyX2xpc3RbMF0sCi0gICAgICAgICAgICAg IChjYWRkcl90KSZyX2FkZHIuc2luX2FkZHIsCi0gICAgICAgICAgICAgIGhvc3QtPmhfbGVuZ3Ro Ci0gICAgICAgICAgICAgICk7Ci0jZWxzZQotICAgICAgICBiY29weShob3N0LT5oX2FkZHIsIChj YWRkcl90KSZyX2FkZHIuc2luX2FkZHIsIGhvc3QtPmhfbGVuZ3RoKTsKLSNlbmRpZiAvKiBoX2Fk ZHIgKi8KLSNlbHNlICAvKiBIQUREUkxJU1QgKi8KLSAgICAgICAgYmNvcHkoaG9zdC0+aF9hZGRy LCAoY2FkZHJfdCkmcl9hZGRyLnNpbl9hZGRyLCBob3N0LT5oX2xlbmd0aCk7Ci0jZW5kaWYgLyog SEFERFJMSVNUICovCi0jaWZkZWYgQ09NTUVOVAotI2lmbmRlZiBFWENFTEFOCi0gICAgICAgIGRl YnVnKEYxMTEsIkJDT1BZIiwiaG9zdC0+aF9hZGRyIixob3N0LT5oX2FkZHIpOwotI2VuZGlmIC8q IEVYQ0VMQU4gKi8KLSAgICAgICAgZGVidWcoRjExMSwiQkNPUFkiLCIgKGNhZGRyX3QpJnJfYWRk ci5zaW5fYWRkciIsCi0gICAgICAgICAgICAgIChjYWRkcl90KSZyX2FkZHIuc2luX2FkZHIpOwot I2VuZGlmCS8qIENPTU1FTlQgKi8KLSAgICAgICAgZGVidWcoRjExMSwiQkNPUFkiLCJob3N0LT5o X2xlbmd0aCIsaG9zdC0+aF9sZW5ndGgpOwotCi0jaWZkZWYgTlQKLSAgICAgICAgLyogV2luZG93 cyA5NS85OCByZXF1aXJlcyBhIDEgc2Vjb25kIHdhaXQgYmV0d2VlbiBjYWxscyB0byBNaWNyb3Nv ZnQgKi8KLSAgICAgICAgLyogcHJvdmlkZWQgRE5TIGZ1bmN0aW9ucy4gIE90aGVyd2lzZSwgdGhl IFRUTCBvZiB0aGUgRE5TIHJlc3BvbnNlICovCi0gICAgICAgIC8qIGlzIGlnbm9yZWQuICovCi0g ICAgICAgIGlmIChpc1dpbjk1KCkpCi0gICAgICAgICAgc2xlZXAoMSk7Ci0jZW5kaWYgLyogTlQg Ki8KLSAgICAgICAgaG9zdCA9IGdldGhvc3RieWFkZHIoKGNoYXIgKikmcl9hZGRyLnNpbl9hZGRy LDQsUEZfSU5FVCk7Ci0gICAgICAgIGlmIChob3N0KSB7Ci0gICAgICAgICAgICBob3N0ID0gY2tf Y29weWhvc3RlbnQoaG9zdCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJja2dldGZxaG4oKSBn ZXRob3N0YnlhZGRyICE9IE5VTEwiLCIiLDApOwotICAgICAgICAgICAgY2tzdHJuY3B5KG5hbWVi dWYsIGhvc3QtPmhfbmFtZSwgMjU2KTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmZGVmIEhBRERS TElTVAotI2lmZGVmIGhfYWRkcgotICBleGl0X2Z1bmM6Ci0jZW5kaWYgLyogaF9hZGRyICovCi0j ZW5kaWYgLyogSEFERFJMSVNUICovCi0KLSAgICBpZiAoaSA+IDApCi0gICAgICBja3N0cm5jYXQo bmFtZWJ1ZiwmbmFtZVtpLTFdLDI1Ni1zdHJsZW4obmFtZWJ1Ziktc3RybGVuKCZuYW1lW2ktMV0p KTsKLSAgICBkZWJ1ZyhGMTEwLCJja2dldGZxaG4oKSIsbmFtZWJ1ZiwwKTsKLSAgICByZXR1cm4o bmFtZWJ1Zik7Ci0jZW5kaWYgLyogTk9DS0dFVEZRSE9TVCAqLwotfQotCi1WT0lECi0jaWZkZWYg Q0tfQU5TSUMKLXNldG5wcm90byhjaGFyICogcCkKLSNlbHNlCi1zZXRucHJvdG8ocCkgY2hhciAq IHA7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoIWlzZGlnaXQoKnApKSB7Ci0g ICAgICAgIGlmICghc3RyY21wKCJrZXJtaXQiLHApKQotICAgICAgICAgIHR0bnByb3RvID0gTlBf S0VSTUlUOwotICAgICAgICBlbHNlIGlmICghc3RyY21wKCJ0ZWxuZXQiLHApKQotICAgICAgICAg IHR0bnByb3RvID0gTlBfVEVMTkVUOwotICAgICAgICBlbHNlIGlmICghc3RyY21wKCJodHRwIixw KSkKLSAgICAgICAgICB0dG5wcm90byA9IE5QX1RDUFJBVzsKLSNpZmRlZiBSTE9HQ09ERQotICAg ICAgICBlbHNlIGlmICghc3RyY21wKCJsb2dpbiIscCkpCi0gICAgICAgICAgdHRucHJvdG8gPSBO UF9STE9HSU47Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBDS19TU0wKLSAgICAgICAg LyogQ29tbW9ubHkgdXNlZCBTU0wgcG9ydHMgKG1pZ2h0IG5vdCBiZSBpbiBzZXJ2aWNlcyBmaWxl KSAqLwotICAgICAgICBlbHNlIGlmICghc3RyY21wKCJodHRwcyIscCkpIHsKLSAgICAgICAgICB0 dG5wcm90byA9IE5QX1NTTF9SQVc7Ci0gICAgICAgICAgc3NsX29ubHlfZmxhZyA9IDE7Ci0gICAg ICAgIH0gZWxzZSBpZiAoIXN0cmNtcCgic3NsLXRlbG5ldCIscCkpIHsKLSAgICAgICAgICB0dG5w cm90byA9IE5QX1RFTE5FVDsKLSAgICAgICAgICBzc2xfb25seV9mbGFnID0gMTsKLSAgICAgICAg fSBlbHNlIGlmICghc3RyY21wKCJ0ZWxuZXRzIixwKSkgewotICAgICAgICAgIHR0bnByb3RvID0g TlBfVEVMTkVUOwotICAgICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAxOwotICAgICAgICB9Ci0jZW5k aWYgLyogQ0tfU1NMICovCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBSTE9HQ09ERQotICAg ICAgICBlbHNlIGlmICghc3RyY21wKCJrbG9naW4iLHApKSB7Ci0gICAgICAgICAgICBpZiAoY2tf a3JiNV9pc19pbnN0YWxsZWQoKSkKLSAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9LNUxPR0lO OwotICAgICAgICAgICAgZWxzZSBpZiAoY2tfa3JiNF9pc19pbnN0YWxsZWQoKSkKLSAgICAgICAg ICAgICAgdHRucHJvdG8gPSBOUF9LNExPR0lOOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg ICAgICB0dG5wcm90byA9IE5QX1JMT0dJTjsKLSAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKCJl a2xvZ2luIixwKSkgewotICAgICAgICAgICAgaWYgKGNrX2tyYjVfaXNfaW5zdGFsbGVkKCkpCi0g ICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfRUs1TE9HSU47Ci0gICAgICAgICAgICBlbHNlIGlm IChja19rcmI0X2lzX2luc3RhbGxlZCgpKQotICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX0VL NExPR0lOOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX1JM T0dJTjsKLSAgICAgICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5kaWYgLyogQ0tfS0VS QkVST1MgKi8KLSAgICAgICAgZWxzZQotICAgICAgICAgIHR0bnByb3RvID0gTlBfTk9ORTsKLSAg ICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKGF0b2kocCkpIHsKLSAgICAgICAgICBjYXNlIDIz OiAgICAgICAgICAgICAgICAgICAgICAvKiBUZWxuZXQgKi8KLSAgICAgICAgICAgIHR0bnByb3Rv ID0gTlBfVEVMTkVUOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA1MTM6Ci0g ICAgICAgICAgICB0dG5wcm90byA9IE5QX1JMT0dJTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgIGNhc2UgMTY0OToKLSAgICAgICAgICAgIHR0bnByb3RvID0gTlBfS0VSTUlUOwotICAg ICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgY2FzZSA0NDM6Ci0jaWZk ZWYgQ09NTUVOVAotCSAgICAvKiBKZWZmIDIwMDUvMTIvMzAgKi8KLSAgICAgICAgICAgIHR0bnBy b3RvID0gTlBfU1NMX1JBVzsKLSNlbHNlCi0JICAgIC8qIGZkYyAyMDA1LzEyLzA0ICovCi0gICAg ICAgICAgICB0dG5wcm90byA9IE5QX1NTTDsKLSNlbmRpZgkvKiBDT01NRU5UICovCi0gICAgICAg ICAgICBzc2xfb25seV9mbGFnID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh c2UgMTUxOgotICAgICAgICAgIGNhc2UgOTkyOgotICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9U RUxORVQ7Ci0gICAgICAgICAgICBzc2xfb25seV9mbGFnID0gMTsKLSAgICAgICAgICAgIGJyZWFr OwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgICAgICAgY2Fz ZSA1NDM6Ci0gICAgICAgICAgICBpZiAoY2tfa3JiNV9pc19pbnN0YWxsZWQoKSkKLSAgICAgICAg ICAgICAgdHRucHJvdG8gPSBOUF9LNUxPR0lOOwotICAgICAgICAgICAgZWxzZSBpZiAoY2tfa3Ji NF9pc19pbnN0YWxsZWQoKSkKLSAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9LNExPR0lOOwot ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX1JMT0dJTjsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjEwNToKLSAgICAgICAgICAgIGlmIChj a19rcmI1X2lzX2luc3RhbGxlZCgpKQotICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX0VLNUxP R0lOOwotICAgICAgICAgICAgZWxzZSBpZiAoY2tfa3JiNF9pc19pbnN0YWxsZWQoKSkKLSAgICAg ICAgICAgICAgdHRucHJvdG8gPSBOUF9FSzRMT0dJTjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg ICAgICAgICAgdHRucHJvdG8gPSBOUF9STE9HSU47Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRp ZiAvKiBDS19LRVJCRVJPUyAqLwotICAgICAgICAgIGNhc2UgODA6ICAgICAgICAgICAgICAgICAg ICAgIC8qIEhUVFAgKi8KLSAgICAgICAgICAgIHR0bnByb3RvID0gTlBfVENQUkFXOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHR0bnByb3RvID0g TlBfTk9ORTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vKiBj a2dldHNlcnZpY2UoKSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgcG9ydCBudW1iZXIgZm9yIGEg Z2l2ZW4gKi8KLS8qIHNlcnZpY2UgdGFraW5nIGludG8gYWNjb3VudCB0aGUgdXNlIG9mIEROUyBT UlYgcmVjb3Jkcy4gICAgICAgICAqLwotCi1zdGF0aWMgc3RydWN0IHNlcnZlbnQgc2VydnJlYzsK LXN0YXRpYyBzdHJ1Y3Qgc2VydmVudCAqCi1ja2dldHNlcnZpY2UoaG9zdG5hbWUsIHNlcnZpY2Vu YW1lLCBpcCwgaXBsZW4pCi0gICAgY2hhciAqaG9zdG5hbWU7IGNoYXIgKiBzZXJ2aWNlbmFtZTsg Y2hhciAqIGlwOyBpbnQgaXBsZW47Ci17Ci0gICAgc3RydWN0IHNlcnZlbnQgKiBzZXJ2aWNlID0g TlVMTDsKLSNpZmRlZiBDS19ETlNfU1JWCi0gICAgc3RydWN0IHNvY2thZGRyICogZG5zX2FkZHJz ID0gTlVMTDsKLSAgICBpbnQgZG5zX25hZGRycyA9IDA7Ci0jZW5kaWYgLyogQ0tfRE5TX1NSViAq LwotCi0gICAgaWYgKGlzZGlnaXQoKnNlcnZpY2VuYW1lKSkgeyAgICAgICAgLyogVXNlIHNvY2tl dCBudW1iZXIgd2l0aG91dCBsb29rdXAgKi8KLSAgICAgICAgc2VydmljZSA9ICZzZXJ2cmVjOwot ICAgICAgICBzZXJ2aWNlLT5zX3BvcnQgPSBodG9ucygodW5zaWduZWQgc2hvcnQpYXRvaShzZXJ2 aWNlbmFtZSkpOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90 aGVyd2lzZSBsb29rdXAgdGhlIHNlcnZpY2UgbmFtZSAqLwotI2lmZGVmIENLX0ROU19TUlYKLSAg ICAgICAgaWYgKHRjcF9kbnNfc3J2ICYmICFxdWlldCkgewotICAgICAgICAgICAgcHJpbnRmKCIg RE5TIFNSViBMb29rdXAuLi4gIik7Ci0gICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAg ICAgfQotICAgICAgICBpZiAodGNwX2Ruc19zcnYgJiYKLSAgICAgICAgICAgIGxvY2F0ZV9zcnZf ZG5zKGhvc3RuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZW5hbWUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAidGNwIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICZkbnNfYWRkcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmZG5zX25hZGRycwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAg ICAvKiBVc2UgdGhlIGZpcnN0IG9uZS4gIEV2ZW50dWFsbHkgd2Ugc2hvdWxkIGN5Y2xlIHRocm91 Z2ggYWxsICovCi0gICAgICAgICAgICAvKiB0aGUgcmV0dXJuZWQgSVAgYWRkcmVzc2VzIGFuZCBw b3J0IG51bWJlcnMuICovCi0gICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IE5V TEw7Ci0jaWZkZWYgQkVUQURFQlVHCi0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIHBy aW50ZigiXHJcbiIpOwotICAgICAgICAgICAgZm9yICggaT0wO2k8ZG5zX25hZGRycztpKysgKSB7 Ci0gICAgICAgICAgICAgICAgc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmZG5zX2FkZHJz W2ldOwotICAgICAgICAgICAgICAgIHByaW50ZigiZG5zX2FkZHJzWyVkXSA9ICVzICVkXHJcbiIs IGksCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWluZXRfbnRvYShzaW4tPnNpbl9h ZGRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKLSAg ICAgICAgICAgIH0KLSNlbmRpZiAvKiBCRVRBREVCVUcgKi8KLSAgICAgICAgICAgIHNpbiA9IChz dHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmRuc19hZGRyc1swXTsKLSAgICAgICAgICAgIGlmICggaXAg JiYgaXBsZW4gPiAwICkKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkoaXAsKGNoYXIgKilpbmV0 X250b2Eoc2luLT5zaW5fYWRkciksaXBsZW4pOwotICAgICAgICAgICAgc2VydmljZSA9ICZzZXJ2 cmVjOwotICAgICAgICAgICAgc2VydmljZS0+c19wb3J0ID0gc2luLT5zaW5fcG9ydDsKLQotICAg ICAgICAgICAgZnJlZShkbnNfYWRkcnMpOwotICAgICAgICAgICAgZG5zX2FkZHJzID0gTlVMTDsK LSAgICAgICAgICAgIGRuc19uYWRkcnMgPSAwOwotICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBD S19ETlNfU1JWICovCi0gICAgICAgICAgICBzZXJ2aWNlID0gZ2V0c2VydmJ5bmFtZShzZXJ2aWNl bmFtZSwgInRjcCIpOwotICAgIH0KLSAgICBpZiAoIXNlcnZpY2UpIHsKLSAgICAgICAgaWYgKCFj a3N0cmNtcCgia2VybWl0IixzZXJ2aWNlbmFtZSwtMSwwKSkgeyAvKiBLZXJtaXQgc2VydmljZSBw b3J0ICovCi0gICAgICAgICAgICBzZXJ2aWNlID0gJnNlcnZyZWM7Ci0gICAgICAgICAgICBzZXJ2 aWNlLT5zX3BvcnQgPSBodG9ucygxNjQ5KTsKLSAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAo InRlbG5ldCIsc2VydmljZW5hbWUsLTEsMCkpIHsgLyogVGVsbmV0IHBvcnQgKi8KLSAgICAgICAg ICAgIHNlcnZpY2UgPSAmc2VydnJlYzsKLSAgICAgICAgICAgIHNlcnZpY2UtPnNfcG9ydCA9IGh0 b25zKDIzKTsKLSAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoImh0dHAiLHNlcnZpY2VuYW1l LC0xLDApKSB7Ci0gICAgICAgICAgICBzZXJ2aWNlID0gJnNlcnZyZWM7Ci0gICAgICAgICAgICBz ZXJ2aWNlLT5zX3BvcnQgPSBodG9ucyg4MCk7Ci0gICAgICAgIH0KLSNpZmRlZiBSTE9HQ09ERQot ICAgICAgICBlbHNlIGlmICghY2tzdHJjbXAoImxvZ2luIixzZXJ2aWNlbmFtZSwtMSwwKSkgewot ICAgICAgICAgICAgc2VydmljZSA9ICZzZXJ2cmVjOwotICAgICAgICAgICAgc2VydmljZS0+c19w b3J0ID0gaHRvbnMoNTEzKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZk ZWYgQ0tfU1NMCi0gICAgICAgIC8qIENvbW1vbmx5IHVzZWQgU1NMIHBvcnRzIChtaWdodCBub3Qg YmUgaW4gc2VydmljZXMgZmlsZSkgKi8KLSAgICAgICAgZWxzZSBpZiAoIWNrc3RyY21wKCJodHRw cyIsc2VydmljZW5hbWUsLTEsMCkpIHsKLSAgICAgICAgICAgIHNlcnZpY2UgPSAmc2VydnJlYzsK LSAgICAgICAgICAgIHNlcnZpY2UtPnNfcG9ydCA9IGh0b25zKDQ0Myk7Ci0gICAgICAgIH0gZWxz ZSBpZiAoIWNrc3RyY21wKCJzc2wtdGVsbmV0IixzZXJ2aWNlbmFtZSwtMSwwKSkgewotICAgICAg ICAgICAgc2VydmljZSA9ICZzZXJ2cmVjOwotICAgICAgICAgICAgc2VydmljZS0+c19wb3J0ID0g aHRvbnMoMTUxKTsKLSAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoInRlbG5ldHMiLHNlcnZp Y2VuYW1lLC0xLDApKSB7Ci0gICAgICAgICAgICBzZXJ2aWNlID0gJnNlcnZyZWM7Ci0gICAgICAg ICAgICBzZXJ2aWNlLT5zX3BvcnQgPSBodG9ucyg5OTIpOwotICAgICAgICB9Ci0jZW5kaWYgLyog Q0tfU1NMICovCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBSTE9HQ09ERQotICAgICAgICBl bHNlIGlmICghY2tzdHJjbXAoImtsb2dpbiIsc2VydmljZW5hbWUsLTEsMCkpIHsKLSAgICAgICAg ICAgIHNlcnZpY2UgPSAmc2VydnJlYzsKLSAgICAgICAgICAgIHNlcnZpY2UtPnNfcG9ydCA9IGh0 b25zKDU0Myk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKCJla2xvZ2luIixzZXJ2aWNl bmFtZSwtMSwwKSkgewotICAgICAgICAgICAgc2VydmljZSA9ICZzZXJ2cmVjOwotICAgICAgICAg ICAgc2VydmljZS0+c19wb3J0ID0gaHRvbnMoMjEwNSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBS TE9HQ09ERSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0gICAgfQotICAgIHJldHVybihz ZXJ2aWNlKTsKLX0KLQotLyogIE4gRSBUIE8gUCBFIE4gIC0tICBPcGVuIGEgbmV0d29yayBjb25u ZWN0aW9uICAqLwotLyoKLSAgQ2FsbGluZyBjb252ZW50aW9ucyBzYW1lIGFzIHR0b3BlbigpLCBl eGNlcHQgdGhpcmQgYXJndW1lbnQgaXMgbmV0d29yawotICB0eXBlIHJhdGhlciB0aGFuIG1vZGVt IHR5cGUuICBEZXNpZ25lZCB0byBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gdHRvcGVuLgotKi8KLQot I2RlZmluZSBYWE5BTUVMRU4gMjU2Ci1zdGF0aWMgY2hhciB4eG5hbWVbWFhOQU1FTEVOXTsKLQot aW50Ci1uZXRvcGVuKG5hbWUsIGxjbCwgbmV0dCkgY2hhciAqbmFtZTsgaW50ICpsY2wsIG5ldHQ7 IHsKLSAgICBjaGFyICpwOwotICAgIGludCBpLCB4LCByY19pbmV0X2FkZHIgPSAwLCBkbnMgPSAw OwotI2lmZGVmIFRDUFNPQ0tFVAotICAgIGludCBpc2Nvbm5lY3QgPSAwOwotI2lmZGVmIFNPX09P QklOTElORQotICAgIGludCBvbiA9IDE7Ci0jZW5kaWYgLyogU09fT09CSU5MSU5FICovCi0gICAg c3RydWN0IHNlcnZlbnQgKnNlcnZpY2U9TlVMTDsKLSAgICBzdHJ1Y3QgaG9zdGVudCAqaG9zdD1O VUxMOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiByX2FkZHI7Ci0gICAgc3RydWN0IHNvY2thZGRy X2luIHNpbjsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbF9hZGRyOwotICAgIEdTT0NLTkFNRV9U IGxfc2xlbjsKLSNpZmRlZiBFWENFTEFOCi0gICAgc3RydWN0IHNvY2thZGRyX2luIHNlbmRfc29j a2V0OwotI2VuZGlmIC8qIEVYQ0VMQU4gKi8KLQotI2lmZGVmIElOQUREUlgKLS8qIGluZXRfYWRk cigpIGlzIG9mIHR5cGUgc3RydWN0IGluX2FkZHIgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAg IGV4dGVybiBzdHJ1Y3QgaW5fYWRkciBpbmV0X2FkZHIoKTsKLSNlbHNlCi0jaWZkZWYgSFBVWDVX SU5UQ1AKLSAgICBleHRlcm4gc3RydWN0IGluX2FkZHIgaW5ldF9hZGRyKCk7Ci0jZW5kaWYgLyog SFBVWDVXSU5UQ1AgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotICAgIHN0cnVjdCBpbl9h ZGRyIGlheDsKLSNlbHNlCi0jaWZkZWYgSU5BRERSX05PTkUKLSAgICBzdHJ1Y3QgaW5fYWRkciBp YXg7Ci0jZWxzZSAvKiBJTkFERFJfTk9ORSAqLwotICAgIGxvbmcgaWF4OwotI2VuZGlmIC8qIElO QUREUl9OT05FICovCi0jZW5kaWYgLyogSU5BRERSWCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAq LwotCi0jaWZkZWYgQ09NTUVOVAotLyogVGhpcyBjYXVzZXMgYmlnIHRyb3VibGUgKi8KLSNpZm5k ZWYgSU5BRERSX05PTkUKLSNkZWZpbmUgSU5BRERSX05PTkUgMHhmZmZmZmZmZgotI2VuZGlmIC8q IElOQUREUl9OT05FICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgU1VOWDI1ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29kZSBmb3IgU3VuTGluayBYLjI1IHN1cHBvcnQg Ki8KLSNkZWZpbmUgWDI5UElEIDEgICAgICAgICAgICAgICAgICAgICAgICAvKiBYLjI5IFByb3Rv Y29sIElEICovCi1fUFJPVE9UWVAoU0lHVFlQIHgyNW9vYmgsIChpbnQpICk7Ci0gICAgQ09OTl9E QiB4MjVob3N0OwotI2lmbmRlZiBYMjVfV1JfRkFDSUxJVFkKLSAgICBGQUNJTElUWSB4MjVmYWNp bDsKLSNlbHNlCi0gICAgRkFDSUxJVFlfREIgeDI1ZmFjaWw7Ci0jZW5kaWYgLyogWDI1X1dSX0ZB Q0lMSVRZICovCi0gICAgc3RhdGljIGludCBuZWVkaCA9IDE7Ci0gICAgUElEX1QgcGlkOwotICAg IGV4dGVybiBpbnQgbGlua2lkLCBsY24sIHgyNXZlcjsKLSNlbmRpZiAvKiBTVU5YMjUgKi8KLSNp ZmRlZiBBTllYMjUKLSAgICBleHRlcm4gaW50IHJldmNhbGwsIGNsb3NnciwgY3VkYXRhOwotICAg IGV4dGVybiBjaGFyIHVkYXRhW107Ci0jZW5kaWYgLyogQU5ZWDI1ICovCi0KLSNpZmRlZiBJQk1Y MjUgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWYXJpYWJsZXMgZm9yIElCTSBYMjUgKi8K LSAgICBleHRlcm4gaW50IHgyNXBvcnQ7ICAgICAgICAgICAgICAgICAvKiBMb2dpY2FsIHBvcnQg dG8gdXNlICovCi0gICAgZXh0ZXJuIHgyNWFkZHJfdCBsb2NhbF9udWE7ICAgICAgICAgLyogTG9j YWwgWC4yNSBhZGRyZXNzICovCi0gICAgZXh0ZXJuIHgyNWFkZHJfdCByZW1vdGVfbnVhOyAgICAg ICAgLyogUmVtb3RlIFguMjUgYWRkcmVzcyAqLwotICAgIGV4dGVybiBjaGFyIHgyNW5hbWVbXTsg ICAgICAgICAgICAgIC8qIFgyNSBkZXZpY2UgbmFtZSAoc3gyNWEwKSAqLwotICAgIGV4dGVybiBj aGFyIHgyNWRldltdOyAgICAgICAgICAgICAgIC8qIFgyNSBkZXZpY2UgZmlsZSAvZGV2L3gyNXBr dCAqLwotICAgIHVsb25nIGJpbmRfZmxhZ3MgPSAwOyAgICAgICAgICAgICAgIC8qIEZsYWdzIGZv ciBiaW5kaW5nIHRoZSBYMjUgc3RyZWFtICovCi0gICAgdWxvbmcgdG9rZW4gPSAwOyAgICAgICAg ICAgICAgICAgICAgLyogVGVtcG9yYXJ5IHJldHVybiBjb2RlICovCi0jZW5kaWYgLyogSUJNWDI1 ICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIG5ldHQiLCIiLG5ldHQpOwotICAgICppcGFk ZHIgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgSVAgYWRkcmVzcyBz dHJpbmcgKi8KLQotI2lmZGVmIFNVTlgyNQotICAgIGlmIChuZXR0ID09IE5FVF9TWDI1KSB7ICAg ICAgICAgICAgIC8qIElmIG5ldHdvcmsgdHlwZSBpcyBYLjI1ICovCi0gICAgICAgIG5ldGNsb3Mo KTsgICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgYW55IHByZXZpb3VzIG5ldCBjb25uZWN0 aW9uICovCi0gICAgICAgIHR0bnByb3RvID0gTlBfTk9ORTsgICAgICAgICAgICAgLyogTm8gcHJv dG9jb2wgc2VsZWN0ZWQgeWV0ICovCi0KLSAgICAgICAgLyogU2V0IHVwIGhvc3Qgc3RydWN0dXJl ICovCi0gICAgICAgIGJ6ZXJvKChjaGFyICopJngyNWhvc3Qsc2l6ZW9mKHgyNWhvc3QpKTsKLSAg ICAgICAgaWYgKCh4MjVob3N0Lmhvc3RsZW4gPSBwa3gxMjEobmFtZSx4MjVob3N0Lmhvc3QpKSA8 IDApIHsKLSAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwiSW52YWxpZCBYLjEyMSBob3N0IGFk ZHJlc3MgJXNcbiIsbmFtZSk7Ci0gICAgICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgICAgICBy ZXR1cm4gKC0xKTsKLSAgICAgICAgfQotICAgICAgICB4MjVob3N0LmRhdGFsZW4gPSBYMjlQSURM RU47Ci0gICAgICAgIHgyNWhvc3QuZGF0YVswXSA9IFgyOVBJRDsKLQotICAgICAgICAvKiBTZXQg Y2FsbCB1c2VyIGRhdGEgaWYgc3BlY2lmaWVkICovCi0gICAgICAgIGlmIChjdWRhdGEpIHsKLSAg ICAgICAgICAgIGNrc3RybmNweSgoY2hhciAqKXgyNWhvc3QuZGF0YStYMjlQSURMRU4sdWRhdGEs KGludClzdHJsZW4odWRhdGEpKTsKLSAgICAgICAgICAgIHgyNWhvc3QuZGF0YWxlbiArPSAoaW50 KXN0cmxlbih1ZGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBPcGVuIFN1bkxpbmsgWC4y NSBzb2NrZXQgKi8KLSAgICAgICAgaWYgKCFxdWlldCAmJiAqbmFtZSkgewotICAgICAgICAgICAg cHJpbnRmKCIgVHJ5aW5nICVzLi4uICIsIG5hbWUpOwotICAgICAgICAgICAgZmZsdXNoKHN0ZG91 dCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh0dHlmZCA9IHNvY2tldChBRl9YMjUsIFNPQ0tf U1RSRUFNLCAwKSkgPCAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIHNvY2tl dCBlcnJvciIsIiIsZXJybm8pOwotICAgICAgICAgICAgcGVycm9yICgiWC4yNSBzb2NrZXQgZXJy b3IiKTsKLSAgICAgICAgICAgIHJldHVybiAoLTEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyog U2V0dGluZyBYLjI1IG91dC1vZi1iYW5kIGRhdGEgaGFuZGxlciAqLwotICAgICAgICBwaWQgPSBn ZXRwaWQoKTsKLSAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFNJT0NTUEdSUCwmcGlkKSkgewotICAg ICAgICAgICAgcGVycm9yKCJYLjI1IHNldCBwcm9jZXNzIGdyb3VwIGlkIGVycm9yIik7Ci0gICAg ICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAgIChWT0lEKSBzaWduYWwoU0lH VVJHLHgyNW9vYmgpOwotCi0gICAgICAgIC8qIFNldCByZXZlcnNlIGNoYXJnZSBjYWxsIGFuZCBj bG9zZWQgdXNlciBncm91cCBpZiByZXF1ZXN0ZWQgKi8KLSAgICAgICAgYnplcm8gKChjaGFyICop JngyNWZhY2lsLHNpemVvZih4MjVmYWNpbCkpOwotCi0jaWZuZGVmIFgyNV9XUl9GQUNJTElUWQot LyogIE5ldyBTdW5MaW5rICg3LjAgb3IgOC4wLCBub3Qgc3VyZSB3aGljaCkuLi4gKi8KLSAgICAg ICAgeDI1ZmFjaWwudHlwZSA9IFRfUkVWRVJTRV9DSEFSR0U7IC8qIFJldmVyc2UgQ2hhcmdlICov Ci0gICAgICAgIHgyNWZhY2lsLmZfcmV2ZXJzZV9jaGFyZ2UgPSByZXZjYWxsID8gMSA6IDA7Ci0g ICAgICAgIGlmIChpb2N0bCh0dHlmZCxYMjVfU0VUX0ZBQ0lMSVRZLCZ4MjVmYWNpbCkgPCAwKSB7 Ci0gICAgICAgICAgICBwZXJyb3IgKCJTZXR0aW5nIFguMjUgcmV2ZXJzZSBjaGFyZ2UiKTsKLSAg ICAgICAgICAgIHJldHVybiAoLTEpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjbG9zZ3IgPiAt MSkgeyAgICAgICAgICAgICAgLyogQ2xvc2VkIFVzZXIgR3JvdXAgKE91dGdvaW5nKSAqLwotICAg ICAgICAgICAgYnplcm8gKChjaGFyICopJngyNWZhY2lsLHNpemVvZih4MjVmYWNpbCkpOwotICAg ICAgICAgICAgeDI1ZmFjaWwudHlwZSA9IFRfQ1VHOwotICAgICAgICAgICAgeDI1ZmFjaWwuZl9j dWdfcmVxID0gQ1VHX1JFUV9BQ1M7Ci0gICAgICAgICAgICB4MjVmYWNpbC5mX2N1Z19pbmRleCA9 IGNsb3NncjsKLSAgICAgICAgICAgIGlmIChpb2N0bCh0dHlmZCxYMjVfU0VUX0ZBQ0lMSVRZLCZ4 MjVmYWNpbCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgcGVycm9yICgiU2V0dGluZyBYLjI1IGNs b3NlZCB1c2VyIGdyb3VwIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSNlbHNlCi0vKiAgT2xkIFN1bkxpbmsgNi4wIChvciA3LjA/KS4u LiAqLwotICAgICAgICBpZiAocmV2Y2FsbCkgeDI1ZmFjaWwucmV2ZXJzZV9jaGFyZ2UgPSByZXZj YWxsOwotICAgICAgICBpZiAoY2xvc2dyID4gLTEpIHsKLSAgICAgICAgICAgIHgyNWZhY2lsLmN1 Z19yZXEgPSAxOwotICAgICAgICAgICAgeDI1ZmFjaWwuY3VnX2luZGV4ID0gY2xvc2dyOwotICAg ICAgICB9Ci0gICAgICAgIGlmIChpb2N0bCh0dHlmZCxYMjVfV1JfRkFDSUxJVFksJngyNWZhY2ls KSA8IDApIHsKLSAgICAgICAgICAgIHBlcnJvciAoIlNldHRpbmcgWC4yNSBmYWNpbGl0aWVzIik7 Ci0gICAgICAgICAgICByZXR1cm4gKC0xKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIFgyNV9XUl9G QUNJTElUWSAqLwotCi0gICAgICAgIC8qICBOZWVkIFguMjUgaGVhZGVyIHdpdGggYml0cyBRIGFu ZCBNICovCi0gICAgICAgIGlmIChpb2N0bCAodHR5ZmQsWDI1X0hFQURFUiwmbmVlZGgpIDwgMCkg ewotICAgICAgICAgICAgcGVycm9yICgiU2V0dGluZyBYLjI1IGhlYWRlciIpOwotICAgICAgICAg ICAgcmV0dXJuICgtMSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBDb25uZWN0cyB0byByZW1v dGUgaG9zdCB2aWEgU3VuTGluayBYLjI1ICovCi0gICAgICAgIGlmIChjb25uZWN0KHR0eWZkLChz dHJ1Y3Qgc29ja2FkZHIgKikmeDI1aG9zdCxzaXplb2YoeDI1aG9zdCkpIDwgMCkgewotICAgICAg ICAgICAgaSA9IGVycm5vOwotICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0b3BlbiBjb25uZWN0 IGVycm5vIiwiIixpKTsKLSAgICAgICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICAgICAgcGVy cm9yKCJuZXRvcGVuIHgyNSBjb25uZWN0Iik7Ci0gICAgICAgICAgICAgICAgeDI1ZGlhZygpOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgKFZPSUQpIG5ldGNsb3MoKTsKLSAgICAgICAgICAg IHR0eWZkID0gLTE7Ci0gICAgICAgICAgICB3YXNjbG9zZWQgPSAxOwotICAgICAgICAgICAgdHRu cHJvdG8gPSBOUF9OT05FOwotICAgICAgICAgICAgZXJybm8gPSBpOwotICAgICAgICAgICAgcmV0 dXJuICgtMSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBHZXQgWC4yNSBsaW5rIGlkZW50aWZp Y2F0aW9uIHVzZWQgZm9yIHRoZSBjb25uZWN0aW9uICovCi0gICAgICAgIGlmIChpb2N0bCh0dHlm ZCxYMjVfR0VUX0xJTkssJmxpbmtpZCkgPCAwKSB7Ci0gICAgICAgICAgICBwZXJyb3IgKCJHZXR0 aW5nIFguMjUgbGluayBpZCIpOwotICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgIH0K LQotICAgICAgICAvKiBHZXQgWC4yNSBsb2dpY2FsIGNoYW5uZWwgbnVtYmVyIHVzZWQgZm9yIHRo ZSBjb25uZWN0aW9uICovCi0gICAgICAgIGlmIChpb2N0bCh0dHlmZCxYMjVfUkRfTENHTiwmbGNu KSA8IDApIHsKLSAgICAgICAgICAgIHBlcnJvciAoIkdldHRpbmcgWC4yNSBsY24iKTsKLSAgICAg ICAgICAgIHJldHVybiAoLTEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogR2V0IFN1bkxpbmsg WC4yNSB2ZXJzaW9uICovCi0gICAgICAgIGlmIChpb2N0bCh0dHlmZCxYMjVfVkVSU0lPTiwmeDI1 dmVyKSA8IDApIHsKLSAgICAgICAgICAgIHBlcnJvciAoIkdldHRpbmcgU3VuTGluayBYLjI1IHZl cnNpb24iKTsKLSAgICAgICAgICAgIHJldHVybiAoLTEpOwotICAgICAgICB9Ci0gICAgICAgIHR0 bmV0ID0gbmV0dDsgICAgICAgICAgICAgICAgICAgLyogU3VubGluayBYLjI1IG5ldHdvcmsgKi8K LSAgICAgICAgdHRucHJvdG8gPSBOUF9YMzsgICAgICAgICAgICAgICAvKiBQQUQgWC4zLCBYLjI4 LCBYLjI5IHByb3RvY29sICovCi0gICAgICAgIGlmIChsY2wpIGlmICgqbGNsIDwgMCkgKmxjbCA9 IDE7IC8qIExvY2FsIG1vZGUgKi8KLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0gZWxzZSAvKiBO b3RlIHRoYXQgU1VOWDI1IHN1cHBvcnQgY2FuIGNvZXhpc3Qgd2l0aCBUQ1AvSVAgc3VwcG9ydC4g Ki8KLSNlbmRpZiAvKiBTVU5YMjUgKi8KLQotI2lmZGVmIElCTVgyNQotICAgIC8qIHJpZWhtICov Ci0gICAgaWYgKG5ldHQgPT0gTkVUX0lYMjUpIHsgICAgICAgICAgICAgLyogSUJNIEFJWCBYLjI1 ICovCi0gICAgICAgIG5ldGNsb3MoKTsgICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgYW55 IHByZXZpb3VzIG5ldCBjb25uZWN0aW9uICovCi0gICAgICAgIHR0bnByb3RvID0gTlBfTk9ORTsg ICAgICAgICAgICAgLyogTm8gcHJvdG9jb2wgc2VsZWN0ZWQgeWV0ICovCi0KLSAgICAgICAgLyog ZmluZCBvdXQgd2hvIHdlIGFyZSAtIHRoaXMgaXMgbm90IHNvIGVhc3kgb24gQUlYICovCi0gICAg ICAgIC8qIHJpZWhtOiBuZWVkIHRvIHdyaXRlIHRoZSBjb2RlIHRoYXQgZmluZHMgdGhpcyBvdXQK LSAgICAgICAgICogYXV0b21hdGljYWxseSwgb3IgYXQgbGVhc3QgYWxsb3cgaXQgdG8gYmUgY29u ZmlndXJlZAotICAgICAgICAgKiBzb21laG93Ci0gICAgICAgICAqLwotICAgICAgICBpZiAoIWxv Y2FsX251YVswXSAmJiAheDI1bG9jYWxfbnVhKGxvY2FsX251YSkpIHsKLSAgICAgICAgICAgIHJl dHVybigtMSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBJbml0aWFsaXNlIHRoZSBYMjUgQVBJ IChvbmNlIHBlciBwcm9jZXNzPyBvbmNlIHBlciBjb25uZWN0aW9uPykgKi8KLQotICAgICAgICBk ZWJ1ZyhGMTEwLCAiT3BlbmluZyAiLCB4MjVkZXYsIDAgKTsKLSAgICAgICAgLyogc2V0IE9fTkRF TEFZIHRvIGFsbG93IHBvbGxpbmc/ICovCi0gICAgICAgIGlmICgodHR5ZmQgPSBvcGVuKHgyNWRl diwgT19SRFdSKSkgPCAwKSB7Ci0gICAgICAgICAgICBwZXJyb3IgKCJYLjI1IGRldmljZSBvcGVu IGVycm9yIik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuOiBkZXZpY2Ugb3BlbiBl cnJvciIsIiIsZXJybm8pOwotICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgIH0KLQot ICAgICAgICAvKiBwdXNoIHRoZSBOUEkgb250byB0aGUgU1RSRUFNICovCi0gICAgICAgIGlmIChp b2N0bCh0dHlmZCxJX1BVU0gsIm5waSIpIDwgMCApIHsKLSAgICAgICAgICAgIGNsb3NlKHR0eWZk KTsKLSAgICAgICAgICAgIHR0eWZkID0gLTE7Ci0gICAgICAgICAgICB3YXNjbG9zZWQgPSAxOwot ICAgICAgICAgICAgcGVycm9yKCAia2VybWl0OiBuZXRvcGVuKCk6IGNvdWxkbid0IHB1c2ggbnBp IG9uIHRoZSBYMjUgc3RyZWFtIiApOwotICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0b3Blbjog Y2FuJ3QgcHVzaCBucGkgb24gdGhlIFgyNSBzdHJlYW0iLCIiLGVycm5vKTsKLSAgICAgICAgICAg IHJldHVybiAoLTEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogc2V0IHVwIHNlcnZlciBtb2Rl IC0gYmluZCB0aGUgeDI1IHBvcnQgYW5kIHdhaXQgZm9yCi0gICAgICAgICAqIGluY29taW5nIGNv bm5lY3Rpb25zCi0gICAgICAgICAqLwotICAgICAgICBpZiAobmFtZVswXSA9PSAnKicpIHsgICAg ICAgICAgIC8qIFNlcnZlciAqLwotICAgICAgICAgICAgLyogc2V0IHVwIGEgc2VydmVyIC0gc2Vl IHRoZSB3YXJuaW5nIGluIHgyNWJpbmQoKSAqLwotICAgICAgICAgICAgYmluZF9mbGFncyB8PSBU T0tFTl9SRVFVRVNUOwotCi0gICAgICAgICAgICAvKiBiaW5kIGtlcm1pdCB0byB0aGUgbG9jYWwg WDI1IGFkZHJlc3MgKi8KLSAgICAgICAgICAgIHRva2VuID0geDI1YmluZCh0dHlmZCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9udWEsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzdHJsZW4oIHVk YXRhICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICB4MjVwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRfZmxh Z3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgaWYgKHRva2Vu IDwgMCkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldG9wZW46IGNvdWxkbid0IGJp bmQgdG8gbG9jYWwgWDI1IGFkZHJlc3MiLCIiLDApOwotICAgICAgICAgICAgICAgIG5ldGNsb3Mo KTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgLyogQ3VycmVudGx5IG5vdCBjb25uZWN0ZWQgdG8gYSByZW1vdGUgaG9zdCAqLwotCi0gICAg ICAgICAgICByZW1vdGVfbnVhWzBdID0gJ1wwJzsKLQotICAgICAgICAgICAgLyogc3RvcmUgdGhl IGZkIHNvIHRoYXQgaW5jb21pbmcgY2FsbHMgY2FuIGhhdmUgdGhlaXIgb3duIGZkCi0gICAgICAg ICAgICAgKiBUaGlzIGlzIGFsbW9zdCBzdXBwb3J0IGZvciBhIHRydWUgc2VydmVyIChpZTogYSds YSBmdHBkKQotICAgICAgICAgICAgICogYnV0IHdlJ3JlIG5vdCBxdWl0ZSB0aGVyZSB5ZXQuCi0g ICAgICAgICAgICAgKiB1c2VkIGluIG5ldGNsb3MoKQotICAgICAgICAgICAgICovCi0gICAgICAg ICAgICB4MjVzZXJ2ZXJmZCA9IHR0eWZkOwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAq IHdhaXQgZm9yIGFuIGluY29taW5nIGNhbGwKLSAgICAgICAgICAgICAqIHRoaXMgc2hvdWxkIGhh cHBlbiBpbiB0aGUgInNlcnZlciIgY29tbWFuZCBhbmQgbm90IGluCi0gICAgICAgICAgICAgKiB0 aGUgInNldCBob3N0ICoiIGNvbW1hbmQuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlm ICgodHR5ZmQgPSB4MjVnZXRjYWxsKHR0eWZkKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgbmV0 Y2xvcygpOwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xpZW50ICovCi0gICAgICAg ICAgICAvKiBCaW5kIGtlcm1pdCB0byB0aGUgbG9jYWwgWDI1IGFkZHJlc3MgKi8KLSAgICAgICAg ICAgIHRva2VuID0geDI1YmluZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dHlmZCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9udWEsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNoYXIgKilOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICB4MjVwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRfZmxhZ3MKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgaWYgKHRva2VuIDwgMCkg ewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldG9wZW46IGNvdWxkbid0IGJpbmQgdG8g bG9jYWwgWDI1IGFkZHJlc3MiLCIiLDApOwotICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsKLSAg ICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgfQotLyogcmllaG06IHRoaXMg c2hvdWxkIGJlIGRvbmUgdmlhIHRoZSBDT05ORUNUIGNvbW1hbmQsIG5vdCBIT1NUISAqLwotICAg ICAgICAgICAgewotICAgICAgICAgICAgICAgIHgyNXNlcnZlcmZkID0gMDsKLSAgICAgICAgICAg ICAgICAvKiBjYWxsIHRoZSByZW1vdGUgaG9zdCAqLwotICAgICAgICAgICAgICAgIC8qIG5hbWUg PT0gYWRkcmVzcyBvZiByZW1vdGUgaG9zdCBhcyBjaGFyKiAqLwotICAgICAgICAgICAgICAgIGlm ICh4MjVjYWxsKHR0eWZkLCBuYW1lLCB1ZGF0YSkgPCAwICkgewotICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAibmV0b3BlbjogY291bGRu J3QgY29ubmVjdCB0byByZW1vdGUgWDI1IGFkZHJlc3MiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAiIiwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgICAg ICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg c3RyY3B5KHJlbW90ZV9udWEsIG5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg ICAgIHR0bmV0ID0gbmV0dDsgICAgICAgICAgICAgICAgICAgLyogQUlYIFguMjUgbmV0d29yayAq LwotICAgICAgICBpZiAobGNsKSBpZiAoKmxjbCA8IDApICpsY2wgPSAxOyAvKiBMb2NhbCBtb2Rl ICovCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIH0gZWxzZSAvKiBOb3RlIHRoYXQgSUJNWDI1 IHN1cHBvcnQgY2FuIGNvZXhpc3Qgd2l0aCBUQ1AvSVAgc3VwcG9ydC4gKi8KLSNlbmRpZiAvKiBJ Qk1YMjUgKi8KLQotLyogICBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgbmV0d29ya3MgaGVyZS4gKi8K LQotICAgICAgaWYgKG5ldHQgIT0gTkVUX1RDUEIpIHJldHVybigtMSk7IC8qIEJTRCBzb2NrZXQg c3VwcG9ydCAqLwotCi0jaWZkZWYgVENQU09DS0VUCi0gICAgbmV0Y2xvcygpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ2xvc2UgYW55IHByZXZpb3VzIGNvbm5lY3Rpb24uICovCi0gICAg Y2tzdHJuY3B5KG5hbWVjb3B5LCBuYW1lLCBOQU1FQ1BZTCk7ICAgICAgICAvKiBDb3B5IHRoZSBo b3N0bmFtZS4gKi8KLSAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIG5hbWVjb3B5IixuYW1lY29weSww KTsKLQotI2lmbmRlZiBOT0xJU1RFTgotICAgIGlmIChuYW1lWzBdID09ICcqJykKLSAgICAgIHJl dHVybih0Y3BzcnZfb3BlbihuYW1lLCBsY2wsIG5ldHQsIDApKTsKLSNlbmRpZiAvKiBOT0xJU1RF TiAqLwotCi0gICAgcCA9IG5hbWVjb3B5OyAgICAgICAgICAgICAgICAgICAgICAgLyogV2FzIGEg c2VydmljZSByZXF1ZXN0ZWQ/ICovCi0gICAgd2hpbGUgKCpwICE9ICdcMCcgJiYgKnAgIT0gJzon KSBwKys7IC8qIExvb2sgZm9yIGNvbG9uICovCi0gICAgaWYgKCpwID09ICc6JykgeyAgICAgICAg ICAgICAgICAgICAgLyogSGF2ZSBhIGNvbG9uICovCi0gICAgICAgIGRlYnVnKEYxMTAsIm5ldG9w ZW4gbmFtZSBoYXMgY29sb24iLG5hbWVjb3B5LDApOwotICAgICAgICAqcCsrID0gJ1wwJzsgICAg ICAgICAgICAgICAgICAgIC8qIEdldCBzZXJ2aWNlIG5hbWUgb3IgbnVtYmVyICovCi0jaWZkZWYg Q0tfVVJMCi0gICAgICAgIC8qCi0gICAgICAgICAgIEhlcmUgd2UgaGF2ZSB0byBjaGVjayBmb3Ig dmFyaW91cyBwb3B1bGFyIHN5bnRheGVzOgotICAgICAgICAgICBob3N0OnBvcnQgKG91ciBvcmln aW5hbCBzeW50YXgpCi0gICAgICAgICAgIFVSTCBzdWNoIGFzIHRlbG5ldDpob3N0IG9yIHRlbG5l dDovL2hvc3QvCi0gICAgICAgICAgIE9yIGV2ZW4gdGVsbmV0Oi8vdXNlcjpwYXNzd29yZEBob3N0 OnBvcnQvcGF0aC8KLSAgICAgICAgICAgT3IgYSBtYWxmb3JtZWQgVVJMIHN1Y2ggYXMgZ2VuZXJh dGVkIGJ5IE5ldHNjYXBlIDQuMCBsaWtlOgotICAgICAgICAgICB0ZWxuZXQ6dGVsbmV0IG9yIHRl bG5ldDo6aG9zdC4KLSAgICAgICAgKi8KLQotICAgICAgICAvKgotICAgICAgICAgKiBSRVBMQUNF IFRISVMgQ09ERSBXSVRIIHVybHBhcnNlKCkgYnV0IG5vdCBvbiB0aGUgZGF5IG9mIHRoZQotICAg ICAgICAgKiBDLUtlcm1pdCA4LjAgUkVMRUFTRS4KLSAgICAgICAgICovCi0KLSAgICAgICAgaWYg KCpwID09ICc6JykgICAgICAgICAgICAgICAgICAvKiBhIHNlY29uZCBjb2xvbiAqLwotICAgICAg ICAgICpwKysgPSAnXDAnOyAgICAgICAgICAgICAgICAgIC8qIGdldCByaWQgb2YgdGhhdCBvbmUg dG9vICovCi0gICAgICAgIHdoaWxlICgqcCA9PSAnLycpICpwKysgPSAnXDAnOyAgLyogYW5kIHNs YXNoZXMgKi8KLSAgICAgICAgeCA9IHN0cmxlbihwKTsgICAgICAgICAgICAgICAgICAvKiBMZW5n dGggb2YgcmVtYWluZGVyICovCi0gICAgICAgIGlmIChwW3gtMV0gPT0gJy8nKSAgICAgICAgICAg ICAgLyogSWYgdGhlcmUgaXMgYSB0cmFpbGluZyBzbGFzaCAqLwotICAgICAgICAgIHBbeC0xXSA9 ICdcMCc7ICAgICAgICAgICAgICAgIC8qIHJlbW92ZSBpdC4gKi8KLSAgICAgICAgZGVidWcoRjEx MCwibmV0b3BlbiBuYW1lY29weSBhZnRlciBzdHJpcHBpbmciLG5hbWVjb3B5LDApOwotICAgICAg ICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIHAgYWZ0ZXIgc3RyaXBwaW5nIixwLDApOwotICAgICAgICBz ZXJ2aWNlID0gZ2V0c2VydmJ5bmFtZShuYW1lY29weSwidGNwIik7Ci0gICAgICAgIGlmIChzZXJ2 aWNlIHx8Ci0jaWZkZWYgUkxPR0NPREUKLSAgICAgICAgICAgICFja3N0cmNtcCgicmxvZ2luIixu YW1lY29weSxOQU1FQ1BZTCwwKSB8fAotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgQ0tf U1NMCi0gICAgICAgICAgICAhY2tzdHJjbXAoInRlbG5ldHMiLG5hbWVjb3B5LE5BTUVDUFlMLDAp IHx8Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAhY2tzdHJjbXAoImlrc2QiLG5h bWVjb3B5LE5BTUVDUFlMLDApCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgIGNoYXIgdGVt cGhvc3RbMjU2XSwgdGVtcHNlcnZpY2VbODBdLCB0ZW1wcGF0aFsyNTZdOwotICAgICAgICAgICAg Y2hhciAqIHEgPSBwLCAqciA9IHAsICp3ID0gcDsKLSAgICAgICAgICAgIGludCB1aWRmb3VuZD0w OwotICAgICAgICAgICAgZXh0ZXJuIGNoYXIgcHdidWZbXTsKLSAgICAgICAgICAgIGV4dGVybiBp bnQgcHdmbGcsIHB3Y3J5cHQ7Ci0KLSAgICAgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9ERUZB VUxUKQotICAgICAgICAgICAgICBzZXRucHJvdG8obmFtZWNvcHkpOwotCi0gICAgICAgICAgICAv KiBDaGVjayBmb3IgdXNlcmlkIGFuZCBwb3NzaWJseSBwYXNzd29yZCAqLwotICAgICAgICAgICAg d2hpbGUgKCpwICE9ICdcMCcgJiYgKnAgIT0gJ0AnKQotICAgICAgICAgICAgICAgIHArKzsgLyog bG9vayBmb3IgQCAqLwotICAgICAgICAgICAgaWYgKCpwID09ICdAJykgewotICAgICAgICAgICAg ICAgIC8qIGZvdW5kIHVzZXJuYW1lIGFuZCBwZXJoYXBzIHBhc3N3b3JkICovCi0gICAgICAgICAg ICAgICAgZGVidWcoRjExMCwibmV0b3BlbiBuYW1lY29weSBmb3VuZCBAIiwiIiwwKTsKLSAgICAg ICAgICAgICAgICAqcCA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAg ICAgIHdoaWxlICgqdyAhPSAnXDAnICYmICp3ICE9ICc6JykKLSAgICAgICAgICAgICAgICAgIHcr KzsKLSAgICAgICAgICAgICAgICBpZiAoKncgPT0gJzonKQotICAgICAgICAgICAgICAgICAgKncr KyA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgLyogciBub3cgcG9pbnRzIHRvIHVzZXJuYW1lLCBz YXZlIGl0IGFuZCB0aGUgcGFzc3dvcmQgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJu ZXRvcGVuIG5hbWVjb3B5IHVzZXJuYW1lIixyLDApOwotICAgICAgICAgICAgICAgIGRlYnVnKEYx MTAsIm5ldG9wZW4gbmFtZWNvcHkgcGFzc3dvcmQiLHcsMCk7Ci0gICAgICAgICAgICAgICAgdWlk Zm91bmQ9MTsKLSAgICAgICAgICAgICAgICBpZiAoIHN0cmNtcCh1aWRidWYscikgfHwgKncgKQot ICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkocHdidWYsdyxQV0JVRkwrMSk7Ci0gICAgICAg ICAgICAgICAgY2tzdHJuY3B5KHVpZGJ1ZixyLFVJREJVRkxFTik7Ci0gICAgICAgICAgICAgICAg cHdmbGcgPSAxOwotICAgICAgICAgICAgICAgIHB3Y3J5cHQgPSAwOwotICAgICAgICAgICAgICAg IHEgPSBwOyAgICAgICAgICAgICAgICAgIC8qIEhvc3QgYWZ0ZXIgdXNlciBhbmQgcHdkICovCi0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHAgPSBxOyAgICAgICAgICAgICAg ICAgIC8qIE5vIHVzZXJuYW1lIG9yIHBhc3N3b3JkICovCi0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICAvKiBOb3cgd2UgbXVzdCBsb29rIGZvciB0aGUgb3B0aW9uYWwgcG9ydC4gKi8KLSAgICAg ICAgICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4geCBwIixwLDApOwotICAgICAgICAgICAgZGVidWco RjExMCwibmV0b3BlbiB4IHEiLHEsMCk7Ci0KLSAgICAgICAgICAgIC8qIExvb2sgZm9yIHRoZSBw b3J0L3NlcnZpY2Ugb3IgYSBmaWxlL2RpcmVjdG9yeSBwYXRoICovCi0gICAgICAgICAgICB3aGls ZSAoKnAgIT0gJ1wwJyAmJiAqcCAhPSAnOicgJiYgKnAgIT0gJy8nKQotICAgICAgICAgICAgICBw Kys7Ci0gICAgICAgICAgICBpZiAoKnAgPT0gJzonKSB7Ci0gICAgICAgICAgICAgICAgZGVidWco RjExMCwibmV0b3BlbiBmb3VuZCBwb3J0IixxLDApOwotICAgICAgICAgICAgICAgICpwKysgPSAn XDAnOyAgICAgICAgICAgIC8qIEZvdW5kIGEgcG9ydCBuYW1lIG9yIG51bWJlciAqLwotICAgICAg ICAgICAgICAgIHIgPSBwOwotCi0gICAgICAgICAgICAgICAgLyogTG9vayBmb3IgdGhlIGVuZCBv ZiBwb3J0L3NlcnZpY2Ugb3IgYSBmaWxlL2RpcmVjdG9yeSBwYXRoICovCi0gICAgICAgICAgICAg ICAgd2hpbGUgKCpwICE9ICdcMCcgJiYgKnAgIT0gJy8nKQotICAgICAgICAgICAgICAgICAgICBw Kys7Ci0gICAgICAgICAgICAgICAgaWYgKCpwID09ICcvJykKLSAgICAgICAgICAgICAgICAgICAg KnArKyA9ICdcMCc7Ci0KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIHBvcnQi LHIsMCk7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRlbXBzZXJ2aWNlLHIsODApOwotICAg ICAgICAgICAgICAgIGNrc3RybmNweSh0ZW1waG9zdCxxLDI1Nik7Ci0gICAgICAgICAgICAgICAg Y2tzdHJuY3B5KHRlbXBwYXRoLHAsMjU2KTsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkobmFt ZWNvcHksdGVtcGhvc3QsTkFNRUNQWUwpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIm5l dG9wZW4gdGVtcHNlcnZpY2UiLHRlbXBzZXJ2aWNlLDApOwotICAgICAgICAgICAgICAgIGRlYnVn KEYxMTAsIm5ldG9wZW4gdGVtcGhvc3QiLHRlbXBob3N0LDApOwotICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsIm5ldG9wZW4gdGVtcHBhdGgiLHRlbXBwYXRoLDApOwotCi0gICAgICAgICAgICAg ICAgLyogbW92ZSBwb3J0L3NlcnZpY2UgdG8gYSBidWZmZXIgdGhhdCB3b24ndCBnbyBhd2F5ICov Ci0gICAgICAgICAgICAgICAgeCA9IHN0cmxlbihuYW1lY29weSk7Ci0gICAgICAgICAgICAgICAg cCA9IG5hbWVjb3B5ICsgeCArIDE7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KHAsIHRlbXBz ZXJ2aWNlLCBOQU1FQ1BZTCAtIHgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICAvKiBIYW5kbGUgYSBwYXRoIGlmIHdlIGZvdW5kIG9uZSAqLwotICAgICAgICAgICAgICAg IGlmICgqcCA9PSAnLycpCi0gICAgICAgICAgICAgICAgICAgICpwKysgPSAnXDAnOwotICAgICAg ICAgICAgICAgIGNrc3RybmNweSh0ZW1wcGF0aCxwLDI1Nik7Ci0KLSAgICAgICAgICAgICAgICAv KiBXZSBkaWRuJ3QgZmluZCBhbm90aGVyIHBvcnQsIGJ1dCBpZiBxIGlzIGEgc2VydmljZSAqLwot ICAgICAgICAgICAgICAgIC8qIHRoZW4gYXNzdW1lIHRoYXQgbmFtZWNvcHkgaXMgYWN0dWFsbHkg YSBob3N0LiAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKGdldHNlcnZieW5hbWUocSwidGNw IikpIHsKLSAgICAgICAgICAgICAgICAgICAgcCA9IHE7Ci0gICAgICAgICAgICAgICAgfSBlbHNl IHsKLSNpZmRlZiBSTE9HQ09ERQotICAgICAgICAgICAgICAgICAgICAvKiBybG9naW4gaXMgbm90 IGEgdmFsaWQgc2VydmljZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKCJy bG9naW4iLG5hbWVjb3B5LDYsMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNw eShuYW1lY29weSwibG9naW4iLE5BTUVDUFlMKTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIFJMT0dDT0RFICovCi0gICAgICAgICAgICAgICAgICAgIC8qIGlrc2QgaXMgbm90IGEg dmFsaWQgc2VydmljZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKCJpa3Nk IixuYW1lY29weSw2LDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkobmFt ZWNvcHksImtlcm1pdCIsTkFNRUNQWUwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgIC8qIFJlY29uc3RydWN0IG5hbWVjb3B5ICovCi0gICAgICAgICAgICAgICAg ICAgIGNrc3RybmNweSh0ZW1wc2VydmljZSxuYW1lY29weSw4MCk7Ci0gICAgICAgICAgICAgICAg ICAgIGNrc3RybmNweSh0ZW1waG9zdCxxLDI1Nik7Ci0gICAgICAgICAgICAgICAgICAgIGNrc3Ry bmNweShuYW1lY29weSx0ZW1waG9zdCxOQU1FQ1BZTCk7Ci0gICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsIm5ldG9wZW4gdGVtcHNlcnZpY2UiLHRlbXBzZXJ2aWNlLDApOwotICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIHRlbXBob3N0Iix0ZW1waG9zdCwwKTsKLSAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwibmV0b3BlbiB0ZW1wcGF0aCIsdGVtcHBhdGgs MCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLyogbW92ZSBwb3J0L3NlcnZpY2UgdG8gYSBidWZm ZXIgdGhhdCB3b24ndCBnbyBhd2F5ICovCi0gICAgICAgICAgICAgICAgICAgIHggPSBzdHJsZW4o bmFtZWNvcHkpOwotICAgICAgICAgICAgICAgICAgICBwID0gbmFtZWNvcHkgKyB4ICsgMTsKLSAg ICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHAsIHRlbXBzZXJ2aWNlLCBOQU1FQ1BZTCAtIHgg LSAxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJuZXRvcGVuIFVSTCByZXN1bHQ6IGhvc3QiLG5hbWVjb3B5LDApOwotICAgICAgICAg ICAgZGVidWcoRjExMCwibmV0b3BlbiBVUkwgcmVzdWx0OiBzZXJ2aWNlIixwLDApOwotICAgICAg ICAgICAgZGVidWcoRjExMCwibmV0b3BlbiBVUkwgcmVzdWx0OiBwYXRoIix0ZW1wcGF0aCwwKTsK LQotI2lmZGVmIElLU19HRVQKLSAgICAgICAgICAgIC8qIElmIHdlIGhhdmUgc2V0IGEgcGF0aCBz cGVjaWZpZWQsIHdlIG5lZWQgdG8gdHJ5IHRvIEdFVCBpdCAqLwotICAgICAgICAgICAgLyogQnV0 IHdlIGhhdmUgYW5vdGhlciBwcm9ibGVtLCB3ZSBoYXZlIHRvIGxvZ2luIGZpcnN0LiAgSG93ICov Ci0gICAgICAgICAgICAvKiBkbyB3ZSBzcGVjaWZ5IHRoYXQgYSBsb2dpbiBtdXN0IGJlIGRvbmUg YmVmb3JlIHRoZSBHRVQ/ICAgKi8KLSAgICAgICAgICAgIC8qIFRoZSB1c2VyJ3MgbmFtZSBpZiBz cGVjaWZpZWQgaXMgaW4gJ3VzZXJpZCcgYW5kIHRoZSAgICAgICAqLwotICAgICAgICAgICAgLyog cGFzc3dvcmQgaWYgYW55IGlzIGluICdwd2J1ZicuICAgICAgICAgICAgICAgICAgICAgICAgICAg ICovCi0gICAgICAgICAgICBpZiAoIHRlbXBwYXRoWzBdICkgewotICAgICAgICAgICAgICAgIGV4 dGVybiBpbnQgYWN0aW9uOwotICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyICogY21hcmc7Ci0K LSAgICAgICAgICAgICAgICBpZiAoICF1aWRmb3VuZCApIHsKLSAgICAgICAgICAgICAgICAgICAg LyogSWYgbm8gdXNlcmlkIHdhcyBzcGVjaWZpZWQgYXMgcGFydCBvZiB0aGUgVVJMIGJ1dAotICAg ICAgICAgICAgICAgICAgICAgKiBhIHBhdGggd2FzIHNwZWNpZmllZCwgdGhlbiB3ZQotICAgICAg ICAgICAgICAgICAgICAgKiBzZXQgdGhlIHVzZXIgbmFtZSB0byBhbm9ueW1vdXMgYW5kIHRoZSBw YXNzd29yZAotICAgICAgICAgICAgICAgICAgICAgKiB0byB0aGUgY3VycmVudCB1c2VyaWQuCi0g ICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkocHdi dWYsdWlkYnVmLFBXQlVGTCk7Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChwd2J1Ziwi QCIsUFdCVUZMKTsKLSAgICAgICAgICAgICAgICAgICAgcHdmbGcgPSAxOwotICAgICAgICAgICAg ICAgICAgICBwd2NyeXB0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHVpZGJ1 ZiwiYW5vbnltb3VzIixVSURCVUZMRU4pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg ICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogSWYgYSBmaWxlIHBhdGggd2FzIHNwZWNpZmll ZCB3ZSBwZXJmb3JtIHRoZSBHRVQKLSAgICAgICAgICAgICAgICAgKiBvcGVyYXRpb24gYW5kIHRo ZW4gdGVybWluYXRlIHRoZSBjb25uZWN0aW9uLgotICAgICAgICAgICAgICAgICAqCi0gICAgICAg ICAgICAgICAgICogSWYgYSBkaXJlY3Rvcnkgd2FzIGdpdmVuIGluc3RlYWQgb2YgYSBmaWxlLCB0 aGVuCi0gICAgICAgICAgICAgICAgICogd2Ugc2hvdWxkIFJFTU9URSBDRCB0byB0aGUgZGlyZWN0 b3J5IGFuZCBsaXN0IGl0cwotICAgICAgICAgICAgICAgICAqIGNvbnRlbnRzLiAgQnV0IGhvdyBk byB3ZSB0ZWxsIHRoZSBkaWZmZXJlbmNlPwotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg ICAgICAgIG1ha2VzdHIoJmNtYXJnLHRlbXBwYXRoKTsKLSAgICAgICAgICAgICAgICBhY3Rpb24g PSAncic7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogSUtTX0dFVCAqLwotICAgICAgICB9Ci0j ZW5kaWYgLyogQ0tfVVJMICovCi0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogT3RoZXJ3aXNlIHVzZSB0ZWxuZXQgKi8KLSAgICAgICAgcCA9ICJ0ZWxuZXQiOwotICAg IH0KLS8qCi0gIEJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLCBuYW1lY29weVtdIHNob3VsZCBob2xk IHRoZSBudWxsLXRlcm1pbmF0ZWQKLSAgaG9zdG5hbWUgb3IgYWRkcmVzcywgYW5kIHAgc2hvdWxk IHBvaW50IHRvIHRoZSBzZXJ2aWNlIG5hbWUgb3IgbnVtYmVyLgotKi8KLSAgICBkZWJ1ZyhGMTEw LCJuZXRvcGVuIGhvc3QiLG5hbWVjb3B5LDApOwotICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4gc2Vy dmljZSByZXF1ZXN0ZWQiLHAsMCk7Ci0KLSAgIC8qIFVzZSB0aGUgc2VydmljZSBwb3J0IHRvIHNl dCB0aGUgZGVmYXVsdCBwcm90b2NvbCB0eXBlIGlmIG5lY2Vzc2FyeSAqLwotICAgIGlmICh0dG5w cm90byA9PSBOUF9ERUZBVUxUKQotICAgICAgIHNldG5wcm90byhwKTsKLQotICAgIGNrc3RybmNw eShuYW1lY29weTIsbmFtZWNvcHksTkFNRUNQWUwpOwotICAgIHNlcnZpY2UgPSBja2dldHNlcnZp Y2UobmFtZWNvcHkscCxuYW1lY29weSxOQU1FQ1BZTCk7Ci0gICAgaWYgKCFzZXJ2aWNlKSB7Ci0g ICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgZmluZCBwb3J0IGZvciBzZXJ2aWNlICVzXG4i LCBwKTsKLSNpZmRlZiBUR1ZPUldJTgotICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIGNhbid0 IGdldCBzZXJ2aWNlIiwiIixzb2NrZXRfZXJybm8pOwotI2Vsc2UKLSAgICAgICAgZGVidWcoRjEw MSwibmV0b3BlbiBjYW4ndCBnZXQgc2VydmljZSIsIiIsZXJybm8pOwotI2VuZGlmIC8qIFRHVk9S V0lOICovCi0gICAgICAgIGVycm5vID0gMDsgICAgICAgICAgICAgICAgICAvKiAocmF0aGVyIHRo YW4gbWlzbGVhZCkgKi8KLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9IGVsc2UgewotICAgICAg ICBpZiAoIWNrc3RyY21wKG5hbWVjb3B5LG5hbWVjb3B5MiwtMSwwKSkKLQkgIG5hbWVjb3B5Mlsw XSA9ICdcMCc7Ci0gICAgICAgIGNrc3RybmNweShzdmNidWYsY2t1aXRvYShudG9ocyhzZXJ2aWNl LT5zX3BvcnQpKSxzaXplb2Yoc3ZjYnVmKSk7Ci0gICAgICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4g c2VydmljZSBvayIsc3ZjYnVmLDApOwotICAgIH0KLQotI2lmZGVmIFJMT0dDT0RFCi0gICAgaWYg KHNlcnZpY2UgJiYgIXN0cmNtcCgibG9naW4iLHApICYmIHNlcnZpY2UtPnNfcG9ydCAhPSBodG9u cyg1MTMpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICIgIFdh cm5pbmc6IGxvZ2luIHNlcnZpY2Ugb24gcG9ydCAlZCBpbnN0ZWFkIG9mIHBvcnQgNTEzXG4iLAot ICAgICAgICAgICAgICAgICBudG9ocyhzZXJ2aWNlLT5zX3BvcnQpCi0gICAgICAgICAgICAgICAg KTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIEVkaXQgU0VSVklDRVMgZmlsZSBpZiBSTE9H SU4gZmFpbHMgdG8gY29ubmVjdC5cbiIpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZfb3Bl biBsb2dpbiBvbiBwb3J0IiwiIixudG9ocyhzZXJ2aWNlLT5zX3BvcnQpKTsKLSAgICB9Ci0jZW5k aWYgLyogUkxPR0NPREUgKi8KLQotI2lmbmRlZiBOT0hUVFAKLSAgIC8qIEZvciBIVFRQIGNvbm5l Y3Rpb25zIHdlIG11c3QgcHJlc2VydmUgdGhlIG9yaWdpbmFsIGhvc3RuYW1lIGFuZCAqLwotICAg Lyogc2VydmljZSByZXF1ZXN0ZWQgc28gd2UgY2FuIGluY2x1ZGUgdGhlbSBpbiB0aGUgSG9zdCBo ZWFkZXIuICAgICovCi0gICAgY2ttYWttc2coaHR0cF9ob3N0X3BvcnQsc2l6ZW9mKGh0dHBfaG9z dF9wb3J0KSxuYW1lY29weSwiOiIsCi0gICAgICAgICAgICAgIGNraXRvYShudG9ocyhzZXJ2aWNl LT5zX3BvcnQpKSxOVUxMKTsKLQotICAgIC8qICduYW1lY29weScgY29udGFpbnMgdGhlIG5hbWUg b2YgdGhlIGhvc3QgdG8gd2hpY2ggd2Ugd2FudCB0byBjb25uZWN0ICovCi0gICAgLyogJ3N2Y2J1 ZicgICBjb250YWlucyB0aGUgc2VydmljZSBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKi8KLSAgICAvKiAnc2VydmljZS0+c19wb3J0JyBjb250YWlucyB0aGUgcG9ydCBudW1i ZXIgaW4gbmV0d29yayBieXRlIG9yZGVyICAgICAqLwotCi0gICAgLyogSWYgd2UgYXJlIHVzaW5n IGFuIGh0dHAgcHJveHksIHdlIG5lZWQgdG8gY3JlYXRlIGEgYnVmZmVyIGNvbnRhaW5pbmcgKi8K LSAgICAvKiAgIGhvc3RuYW1lOnBvcnQtbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIHRvIHBhc3MgdG8gdGhlIGh0dHBfY29ubmVj dCgpIGZ1bmN0aW9uLiAgVGhlbiB3ZSBuZWVkIHRvIHJlcGxhY2UgICAgICovCi0gICAgLyogJ25h bWVjb3B5JyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBwcm94eSBzZXJ2ZXIgYW5kIHRoZSBzZXJ2aWNl LT5zX3BvcnQgKi8KLSAgICAvKiB3aXRoIHRoZSBwb3J0IG51bWJlciBvZiB0aGUgcHJveHkgKGRl ZmF1bHQgcG9ydCA4MCkuICAgICAgICAgICAgICAgICAqLwotCi0gICAgaWYgKCB0Y3BfaHR0cF9w cm94eSApIHsKLSAgICAgICAgY2ttYWttc2cocHJveHljb3B5LHNpemVvZihwcm94eWNvcHkpLG5h bWVjb3B5LCI6IiwKLSAgICAgICAgICAgICAgICAgY2t1aXRvYShudG9ocyhzZXJ2aWNlLT5zX3Bv cnQpKSxOVUxMKTsKLSAgICAgICAgY2tzdHJuY3B5KG5hbWVjb3B5LHRjcF9odHRwX3Byb3h5LE5B TUVDUFlMKTsKLQotICAgICAgICBwID0gbmFtZWNvcHk7ICAgICAgICAgICAgICAgICAgICAgICAv KiBXYXMgYSBzZXJ2aWNlIHJlcXVlc3RlZD8gKi8KLSAgICAgICAgd2hpbGUgKCpwICE9ICdcMCcg JiYgKnAgIT0gJzonKSBwKys7IC8qIExvb2sgZm9yIGNvbG9uICovCi0gICAgICAgIGlmICgqcCA9 PSAnOicpIHsgICAgICAgICAgICAgICAgICAgIC8qIEhhdmUgYSBjb2xvbiAqLwotICAgICAgICAg ICAgZGVidWcoRjExMCwibmV0b3BlbiBuYW1lIGhhcyBjb2xvbiIsbmFtZWNvcHksMCk7Ci0gICAg ICAgICAgICAqcCsrID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgIC8qIEdldCBzZXJ2aWNlIG5h bWUgb3IgbnVtYmVyICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHJjcHkoKytw LCJodHRwIik7Ci0gICAgICAgIH0KLQotICAgICAgICBzZXJ2aWNlID0gY2tnZXRzZXJ2aWNlKG5h bWVjb3B5LHAsbmFtZWNvcHksTkFNRUNQWUwpOwotICAgICAgICBpZiAoIXNlcnZpY2UpIHsKLSAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgZmluZCBwb3J0IGZvciBzZXJ2aWNlICVz XG4iLCBwKTsKLSNpZmRlZiBUR1ZPUldJTgotICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0b3Bl biBjYW4ndCBnZXQgc2VydmljZSBmb3IgcHJveHkiLCIiLHNvY2tldF9lcnJubyk7Ci0jZWxzZQot ICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0b3BlbiBjYW4ndCBnZXQgc2VydmljZSBmb3IgcHJv eHkiLCIiLGVycm5vKTsKLSNlbmRpZiAvKiBUR1ZPUldJTiAqLwotICAgICAgICAgICAgZXJybm8g PSAwOyAgICAgICAgICAgICAgICAgIC8qIChyYXRoZXIgdGhhbiBtaXNsZWFkKSAqLwotICAgICAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jcHkocCxja3VpdG9h KG50b2hzKHNlcnZpY2UtPnNfcG9ydCkpLE5BTUVDUFlMLShwLW5hbWVjb3B5KSk7Ci0KLSAgICB9 Ci0jZW5kaWYgLyogTk9IVFRQICovCi0KLSAgICAvKiBTZXQgdXAgc29ja2V0IHN0cnVjdHVyZSBh bmQgZ2V0IGhvc3QgYWRkcmVzcyAqLwotCi0gICAgYnplcm8oKGNoYXIgKikmcl9hZGRyLCBzaXpl b2Yocl9hZGRyKSk7Ci0gICAgZGVidWcoRjEwMCwibmV0b3BlbiBiemVybyBvayIsIiIsMCk7Ci0v KgotICAgTk9URTogT3JpZ2luYWxseSB0aGUgaW5ldF9hZGRyKCkgY2hlY2sgd2FzICNpZmRlZiBO VCwgYnV0IGlzIGVuYWJsZWQgZm9yCi0gICBhbGwgYXMgb2YgMjAgU2VwIDk3LCB0byBhbGxvdyBw ZW9wbGUgdG8gInNldCBob3N0IiB0byBhIHNwZWNpZmljIG51bWVyaWMgSVAKLSAgIGFkZHJlc3Mg d2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBtdWx0aWhvbWVkIGhvc3Qgc2VxdWVuY2UgYW5kIHdp bmRpbmcgdXAKLSAgIGF0IGEgZGlmZmVyZW50IHBsYWNlIHRoYW4gdGhlIG9uZSByZXF1ZXN0ZWQu Ci0qLwotI2lmZGVmIElOQUREUl9OT05FCi0gICAgZGVidWcoRjEwMSwibmV0b3BlbiBJTkFERFJf Tk9ORSBkZWZpbmVkIiwiIixJTkFERFJfTk9ORSk7Ci0jZWxzZSAvKiBJTkFERFJfTk9ORSAqLwot ICAgIGRlYnVnKEYxMDAsIm5ldG9wZW4gSU5BRERSX05PTkUgbm90IGRlZmluZWQiLCIiLDApOwot I2VuZGlmIC8qIElOQUREUl9OT05FICovCi0jaWZkZWYgSU5BRERSWAotICAgIGRlYnVnKEYxMDAs Im5ldG9wZW4gSU5BRERSWCBkZWZpbmVkIiwiIiwwKTsKLSNlbHNlIC8qIElOQUREUlggKi8KLSAg ICBkZWJ1ZyhGMTAwLCJuZXRvcGVuIElOQUREUlggbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlm IC8qIElOQUREUlggKi8KLQotI2lmbmRlZiBOT01ISE9TVAotI2lmZGVmIElOQUREUlgKLSAgICBp YXggPSBpbmV0X2FkZHIobmFtZWNvcHkpOwotICAgIGRlYnVnKEYxMTEsIm5ldG9wZW4gaW5ldF9h ZGRyIixuYW1lY29weSxpYXguc19hZGRyKTsKLSNlbHNlIC8qIElOQUREUlggKi8KLSNpZmRlZiBJ TkFERFJfTk9ORQotICAgIGlheC5zX2FkZHIgPSBpbmV0X2FkZHIobmFtZWNvcHkpOwotICAgIGRl YnVnKEYxMTEsIm5ldG9wZW4gaW5ldF9hZGRyIixuYW1lY29weSxpYXguc19hZGRyKTsKLSNlbHNl IC8qIElOQUREUl9OT05FICovCi0jaWZkZWYgU09MQVJJUwotICAgIC8qIEluIFNvbGFyaXMgaW5l dF9hZGRyKCkgaXMgb2YgdHlwZSBpbl9hZGRyX3Qgd2hpY2ggaXMgdWludDMyX3QgKi8KLSAgICAv KiAodW5zaWduZWQpIHlldCBpdCByZXR1cm5zIC0xIChzaWduZWQpIG9uIGZhaWx1cmUuICovCi0g ICAgLyogSXQgbWFrZXMgYSBkaWZmZXJlbmNlIGluIDY0LWJpdCBidWlsZHMuICovCi0gICAgcmNf aW5ldF9hZGRyID0gaW5ldF9hZGRyKG5hbWVjb3B5KTsJLyogQXNzaWduIHJldHVybiBjb2RlIHRv IGFuIGludCAqLwotICAgIGlheCA9ICh1bnNpZ25lZCkgcmNfaW5ldF9hZGRyOwkvKiBhbmQgZnJv bSB0aGVyZSB0byB3aGF0ZXZlci4uICovCi0jZWxzZQotI2lmbmRlZiBkYXRhZ2VuZXJhbAotICAg IGlheCA9ICh1bnNpZ25lZCBpbnQpIGluZXRfYWRkcihuYW1lY29weSk7Ci0jZWxzZQotICAgIGlh eCA9IC0xTDsKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFNPTEFSSVMgKi8K LSAgICBkZWJ1ZyhGMTExLCJuZXRvcGVuIHJjX2luZXRfYWRkciIsbmFtZWNvcHkscmNfaW5ldF9h ZGRyKTsKLSAgICBkZWJ1ZyhGMTExLCJuZXRvcGVuIGluZXRfYWRkciIsbmFtZWNvcHksaWF4KTsK LSNlbmRpZiAvKiBJTkFERFJfTk9ORSAqLwotI2VuZGlmIC8qIElOQUREUlggKi8KLQotICAgIGRu cyA9IDA7Ci0gICAgaWYgKAotLyogVGhpcyBtaWdodCBnaXZlIHdhcm5pbmdzIG9uIDY0LWJpdCBw bGF0Zm9ybXMgYnV0IHRoZXkgc2hvdWxkIGJlIGhhcm1sZXNzICovCi0vKiBiZWNhdXNlIElOQURE Ul9OT05FIHNob3VsZCBiZSBhbGwgMSdzIGFueXdheSwgdGh1cyB0aGUgT1IgcGFydCBpcyAqLwot LyogcHJvYmFibHkgc3VwZXJmbHVvdXMgLS0gbm90IHN1cmUgd2h5IGl0J3MgZXZlbiB0aGVyZSwg bWF5YmUgaXQgc2hvdWxkIGJlICovCi0vKiByZW1vdmVkLiAqLwotI2lmZGVmIFNPTEFSSVMKLQly Y19pbmV0X2FkZHIgPT0gLTEKLSNlbHNlCi0jaWZkZWYgSU5BRERSX05PTkUKLSAgICAgICAgaWF4 LnNfYWRkciA9PSBJTkFERFJfTk9ORSAvKiB8fCBpYXguc19hZGRyID09ICh1bnNpZ25lZCBsb25n KSAtMUwgKi8KLSNlbHNlIC8qIElOQUREUl9OT05FICovCi0gICAgICAgIGlheCA8IDAKLSNlbmRp ZiAvKiBJTkFERFJfTk9ORSAqLwotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSAgICAgICAgKSB7Ci0g ICAgICAgIGlmICghcXVpZXQpIHsKLSAgICAgICAgICAgIHByaW50ZigiIEROUyBMb29rdXAuLi4g Iik7Ci0gICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAo KGhvc3QgPSBnZXRob3N0YnluYW1lKG5hbWVjb3B5KSkgIT0gTlVMTCkgewotICAgICAgICAgICAg ZGVidWcoRjExMCwibmV0b3BlbiBnZXRob3N0YnluYW1lICE9IE5VTEwiLG5hbWVjb3B5LDApOwot ICAgICAgICAgICAgaG9zdCA9IGNrX2NvcHlob3N0ZW50KGhvc3QpOwotICAgICAgICAgICAgZG5z ID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHdlIHBlcmZvcm1lZCBkbnMgbG9v a3VwICovCi0gICAgICAgICAgICByX2FkZHIuc2luX2ZhbWlseSA9IGhvc3QtPmhfYWRkcnR5cGU7 Ci0gICAgICAgICAgICBpZiAodGNwX3JkbnMgJiYgaG9zdC0+aF9uYW1lICYmIGhvc3QtPmhfbmFt ZVswXQotI2lmbmRlZiBOT0hUVFAKLSAgICAgICAgICAgICAgICAgJiYgKHRjcF9odHRwX3Byb3h5 ID09IE5VTEwpCi0jZW5kaWYgLyogTk9IVFRQICovCi0JCSkgewotI2lmZGVmIENPTU1FTlQKLSAg ICAgICAgICAgICAgICBja3N0cm5jcHkoeHhuYW1lLGhvc3QtPmhfbmFtZSxYWE5BTUVMRU4pOwot CQlkZWJ1ZyhGMTEwLCJuZXRvcGVuIHh4bmFtZVsxXSIseHhuYW1lLDApOwotICAgICAgICAgICAg ICAgIGlmICgoWFhOQU1FTEVOIC0gKGludClzdHJsZW4obmFtZSkpID4gKChpbnQpc3RybGVuKHN2 Y2J1ZikrMSkpewotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQoeHhuYW1lLCI6IixYWE5B TUVMRU4gLSAoaW50KXN0cmxlbih4eG5hbWUpKTsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJu Y2F0KHh4bmFtZSxzdmNidWYsWFhOQU1FTEVOIC0gKGludClzdHJsZW4oeHhuYW1lKSk7Ci0JCSAg ICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIHh4bmFtZVsyXSIseHhuYW1lLDApOwotICAgICAgICAgICAg ICAgIH0KLQkJbmFtZSA9IChjaGFyICopeHhuYW1lOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBj a3N0cm5jcHkobmFtZSxob3N0LT5oX25hbWUsODApOyAgLyogQmFkIEJhZCBCYWQgKi8KLSAgICAg ICAgICAgICAgICBpZiAoICg4MC1zdHJsZW4obmFtZSkpID4gKHN0cmxlbihzdmNidWYpKzEpICkg ewotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQobmFtZSwiOiIsODAtc3RybGVuKG5hbWUp KTsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KG5hbWUsc3ZjYnVmLDgwLXN0cmxlbihu YW1lKSk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCS8qIENPTU1FTlQgKi8KLSAgICAgICAg ICAgIH0KLQkgICAgZGVidWcoRjExMCwibmV0b3BlbiBuYW1lIGFmdGVyIGxvb2t1cCIsbmFtZSww KTsKLQotI2lmZGVmIEhBRERSTElTVAotI2lmZGVmIGhfYWRkcgotICAgICAgICAgICAgLyogVGhp cyBpcyBmb3IgdHJ5aW5nIG11bHRpcGxlIElQIGFkZHJlc3NlcyAtIHNlZSA8bmV0ZGIuaD4gKi8K LSAgICAgICAgICAgIGlmICghKGhvc3QtPmhfYWRkcl9saXN0KSkKLSAgICAgICAgICAgICAgcmV0 dXJuKC0xKTsKLSAgICAgICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkcl9saXN0WzBdLAotICAgICAg ICAgICAgICAgICAgKGNhZGRyX3QpJnJfYWRkci5zaW5fYWRkciwKLSAgICAgICAgICAgICAgICAg IGhvc3QtPmhfbGVuZ3RoCi0gICAgICAgICAgICAgICAgICApOwotI2Vsc2UKLSAgICAgICAgICAg IGJjb3B5KGhvc3QtPmhfYWRkciwgKGNhZGRyX3QpJnJfYWRkci5zaW5fYWRkciwgaG9zdC0+aF9s ZW5ndGgpOwotI2VuZGlmIC8qIGhfYWRkciAqLwotI2Vsc2UgIC8qIEhBRERSTElTVCAqLwotI2lm ZGVmIEhQVVg2Ci0JICAgIHJfYWRkci5zaW5fYWRkci5zX2FkZHIgPSAodV9sb25nKWhvc3QtPmhf YWRkcjsKLSNlbHNlICAvKiBIUFVYNiAqLwotICAgICAgICAgICAgYmNvcHkoaG9zdC0+aF9hZGRy LCAoY2FkZHJfdCkmcl9hZGRyLnNpbl9hZGRyLCBob3N0LT5oX2xlbmd0aCk7Ci0jZW5kaWYJLyog SFBVWDYgKi8KLSNlbmRpZiAvKiBIQUREUkxJU1QgKi8KLQotI2lmbmRlZiBIUFVYNgotICAgICAg ICAgICAgZGVidWcoRjExMSwiQkNPUFkiLCJob3N0LT5oX2xlbmd0aCIsaG9zdC0+aF9sZW5ndGgp OwotI2VuZGlmCS8qIEhQVVg2ICovCi0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogTk9NSEhP U1QgKi8KLQotICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gZG5zIiwiIixkbnMpOwotCi0gICAgaWYg KCFkbnMpIHsKLSNpZmRlZiBJTkFERFJYCi0vKiBpbmV0X2FkZHIoKSBpcyBvZiB0eXBlIHN0cnVj dCBpbl9hZGRyICovCi0gICAgICAgIHN0cnVjdCBpbl9hZGRyIGluYTsKLSAgICAgICAgdW5zaWdu ZWQgbG9uZyB1dTsKLSAgICAgICAgZGVidWcoRjEwMCwibmV0b3BlbiBnZXRob3N0YnluYW1lID09 IE5VTEw6IElOQUREUlgiLCIiLDApOwotICAgICAgICBpbmEgPSBpbmV0X2FkZHIobmFtZWNvcHkp OwotICAgICAgICB1dSA9ICoodW5zaWduZWQgaW50ICopJmluYTsKLSNlbHNlIC8qIE5vdCBJTkFE RFJYICovCi0vKiBpbmV0X2FkZHIoKSBpcyB1bnNpZ25lZCBsb25nICovCi0gICAgICAgIHVuc2ln bmVkIGxvbmcgdXU7Ci0gICAgICAgIGRlYnVnKEYxMDAsIm5ldG9wZW4gZ2V0aG9zdGJ5bmFtZSA9 PSBOVUxMOiBOb3QgSU5BRERSWCIsIiIsMCk7Ci0gICAgICAgIHV1ID0gaW5ldF9hZGRyKG5hbWVj b3B5KTsKLSNlbmRpZiAvKiBJTkFERFJYICovCi0gICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4g dXUiLCIiLHV1KTsKLSAgICAgICAgaWYgKAotI2lmZGVmIElOQUREUl9OT05FCi0gICAgICAgICAg ICAhKHV1ID09IElOQUREUl9OT05FIHx8IHV1ID09ICh1bnNpZ25lZCBpbnQpIC0xTCkKLSNlbHNl ICAgLyogSU5BRERSX05PTkUgKi8KLSAgICAgICAgICAgIHV1ICE9ICgodW5zaWduZWQgbG9uZykt MSkKLSNlbmRpZiAvKiBJTkFERFJfTk9ORSAqLwotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAg ICByX2FkZHIuc2luX2FkZHIuc19hZGRyID0gdXU7Ci0gICAgICAgICAgICByX2FkZHIuc2luX2Zh bWlseSA9IEFGX0lORVQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgVk1TCi0gICAgICAgICAg ICBmcHJpbnRmKHN0ZG91dCwgIlxyXG4iKTsgICAgLyogY29tcGxldGUgYW55IHByZXZpb3VzIG1l c3NhZ2UgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi Q2FuJ3QgZ2V0IGFkZHJlc3MgZm9yICVzXG4iLCBuYW1lY29weSk7Ci0jaWZkZWYgVEdWT1JXSU4K LSAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gY2FuJ3QgZ2V0IGFkZHJlc3MiLCIiLHNv Y2tldF9lcnJubyk7Ci0jZWxzZQotICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0b3BlbiBjYW4n dCBnZXQgYWRkcmVzcyIsIiIsZXJybm8pOwotI2VuZGlmIC8qIFRHVk9SV0lOICovCi0gICAgICAg ICAgICBlcnJubyA9IDA7ICAgICAgICAgICAgICAgICAgLyogUmF0aGVyIHRoYW4gbWlzbGVhZCAq LwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIEdl dCBhIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIGNvbm5lY3Rpb24uICovCi0KLSAgICByX2FkZHIu c2luX3BvcnQgPSBzZXJ2aWNlLT5zX3BvcnQ7Ci0gICAgY2tzdHJuY3B5KGlwYWRkciwoY2hhciAq KWluZXRfbnRvYShyX2FkZHIuc2luX2FkZHIpLDIwKTsKLSAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVu IHRyeWluZyIsaXBhZGRyLDApOwotICAgIGlmICghcXVpZXQgJiYgKmlwYWRkcikgewotICAgICAg ICBwcmludGYoIiBUcnlpbmcgJXMuLi4gIiwgaXBhZGRyKTsKLSAgICAgICAgZmZsdXNoKHN0ZG91 dCk7Ci0gICAgfQotCi0gICAgLyogTG9vcCB0byB0cnkgYWRkaXRpb25hbCBJUCBhZGRyZXNzZXMs IGlmIGFueS4gKi8KLQotICAgIGRvIHsKLSNpZmRlZiBFWENFTEFOCi0gICAgICAgIHNlbmRfc29j a2V0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotICAgICAgICBzZW5kX3NvY2tldC5zaW5fYWRkci5z X2FkZHIgPSAwOwotICAgICAgICBzZW5kX3NvY2tldC5zaW5fcG9ydCA9IDA7Ci0gICAgICAgIGlm ICgodHR5ZmQgPSBzb2NrZXQoU09DS19TVFJFQU0sIChzdHJ1Y3Qgc29ja3Byb3RvICopMCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmc2VuZF9zb2NrZXQsIFNPX1JFVVNFQUREUikpIDwg MCkKLSNlbHNlICAvKiBFWENFTEFOICovCi0jaWZkZWYgTlQKLSNpZmRlZiBDT01NRU5UX1gKLSAg ICAgICAvKgotICAgICAgICAgTXVzdCBtYWtlIHN1cmUgdGhhdCBhbGwgc29ja2V0cyBhcmUgb3Bl bmVkIGluCi0gICAgICAgICBOb24tb3ZlcmxhcHBlZCBtb2RlIHNpbmNlIHdlIHVzZSB0aGUgc3Rh bmRhcmQKLSAgICAgICAgIEMgUlRMIGZ1bmN0aW9ucyB0byByZWFkIGFuZCB3cml0ZSBkYXRhLgot ICAgICAgICAgQnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGFzIHBsYW5uZWQuCi0gICAgICAg Ki8KLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGludCBvcHRpb25WYWx1ZSA9IFNPX1NZTkNI Uk9OT1VTX05PTkFMRVJUOwotICAgICAgICAgICAgICBpZiAoc2V0c29ja29wdChJTlZBTElEX1NP Q0tFVCwgU09MX1NPQ0tFVCwgU09fT1BFTlRZUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjaGFyICopICZvcHRpb25WYWx1ZSwgc2l6ZW9mKG9wdGlvblZhbHVlKSkKLSAgICAgICAg ICAgICAgICAgICE9IE5PX0VSUk9SKQotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAg ICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBOVCAqLwotCi0gICAgICAg IGlmICgodHR5ZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSA8IDApCi0jZW5k aWYgLyogRVhDRUxBTiAqLwotICAgICAgICAgICAgewotI2lmZGVmIEVYQ0VMQU4KLSAgICAgICAg ICAgICAgICBleHBlcnJvcigiVENQIHNvY2tldCBlcnJvciIpOwotI2Vsc2UKLSNpZmRlZiBWTVMK LSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIlxyXG4iKTsgLyogY29tcGxldGUgYW55 IHByZXZpb3VzIHN0ZG91dCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2lmZGVmIFRHVk9SV0lOCi0j aWZkZWYgT0xEX1RXRwotICAgICAgICAgICAgICAgIGVycm5vID0gc29ja2V0X2Vycm5vOwotI2Vu ZGlmIC8qIE9MRF9UV0cgKi8KLSAgICAgICAgICAgICAgICBzb2NrZXRfcGVycm9yKCJUQ1Agc29j a2V0IGVycm9yIik7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0b3BlbiBzb2NrZXQg ZXJyb3IiLCIiLHNvY2tldF9lcnJubyk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIHBlcnJvcigi VENQIHNvY2tldCBlcnJvciIpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4g c29ja2V0IGVycm9yIiwiIixlcnJubyk7Ci0jZW5kaWYgLyogVEdWT1JXSU4gKi8KLSNlbmRpZiAv KiBFWENFTEFOICovCi0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIGVycm5vID0gMDsKLQotI2lmZGVmIFJMT0dDT0RFCi0gICAgICAgLyogTm90IHBh cnQgb2YgdGhlIFJMT0dJTiBSRkMsIGJ1dCB0aGUgQlNEIGltcGxlbWVudGF0aW9uICAgICAqLwot ICAgICAgIC8qIHJlcXVpcmVzIHRoYXQgdGhlIGNsaWVudCBwb3J0IGJlIGEgcHJpdmlsaWdlZCBw b3J0ICg8MTAyNCkgKi8KLSAgICAgICAvKiBvbiBhIFVuaXggc3lzdGVtIHRoaXMgd291bGQgcmVx dWlyZSBTdXBlclVzZXIgcGVybWlzc2lvbnMgICovCi0gICAgICAgLyogdGhlcmVieSBzYXlpbmcg dGhhdCB0aGUgcm9vdCBvZiB0aGUgVW5peCBzeXN0ZW0gaGFzIGdpdmVuICAqLwotICAgICAgIC8q IHBlcm1pc3Npb24gZm9yIHRoaXMgY29ubmVjdGlvbiB0byBiZSBjcmVhdGVkICAgICAgICAgICAg ICAgKi8KLSAgICAgICBpZiAoc2VydmljZS0+c19wb3J0ID09IGh0b25zKCh1bnNpZ25lZCBzaG9y dClSTE9HSU5fUE9SVCkpIHsKLSAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGxwb3J0 ID0gMTAyNDsgIC8qIG1heCByZXNlcnZlZCBwb3J0ICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAg IGludCBzX2Vycm5vOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgICAgICAgIGxwb3J0LS07ICAg ICAgICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCByZXVzZSBhIHBvcnQgKi8K LSAgICAgICAgICAgaWYgKGxwb3J0ID09IDUxMikKLSAgICAgICAgICAgICBscG9ydCA9IDEwMjM7 Ci0KLSAgICAgICAgICAgc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotICAgICAgICAgICBpZiAo dGNwX2FkZHJlc3MpIHsKLSNpZmRlZiBJTkFERFJYCi0gICAgICAgICAgICAgICBpbmFkZHJ4ID0g aW5ldF9hZGRyKHRjcF9hZGRyZXNzKTsKLSAgICAgICAgICAgICAgIHNpbi5zaW5fYWRkci5zX2Fk ZHIgPSAqKHVuc2lnbmVkIGxvbmcgKikmaW5hZGRyeDsKLSNlbHNlCi0gICAgICAgICAgICAgICBz aW4uc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKHRjcF9hZGRyZXNzKTsKLSNlbmRpZiAvKiBJ TkFERFJYICovCi0gICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgIHNpbi5zaW5fYWRkci5z X2FkZHIgPSBJTkFERFJfQU5ZOwotICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAg ICAgc2luLnNpbl9wb3J0ID0gaHRvbnMobHBvcnQpOwotICAgICAgICAgICAgICAgaWYgKGJpbmQo dHR5ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc2luKSkgPj0gMCkKLSAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICBzX2Vycm5vID0g c29ja2V0X2Vycm5vOwotICAgICAgICAgICAgICAgaWYgKHNfZXJybm8gJiYgLyogT1MyIGJpbmQg ZmFpbHMgd2l0aCAwLCBpZiBhbHJlYWR5IGluIHVzZSAqLwotI2lmZGVmIE5UCi0gICAgICAgICAg ICAgICAgICAgc19lcnJubyAhPSBXU0FFQUREUklOVVNFCi0jZWxzZQotICAgICAgICAgICAgICAg ICAgIHNfZXJybm8gIT0gU09DRUFERFJJTlVTRSAmJgotICAgICAgICAgICAgICAgICAgIHNfZXJy bm8gIT0gKFNPQ0VBRERSSU5VU0UgLSBTT0NCQVNFRVJSKQotI2VuZGlmIC8qIE5UICovCi0gICAg ICAgICAgICAgICAgICAgKQotI2Vsc2UgLyogT1MyICovCi0jaWZkZWYgVEdWT1JXSU4KLSAgICAg ICAgICAgICAgICAgaWYgKHNvY2tldF9lcnJubyAhPSBFQUREUklOVVNFKQotI2Vsc2UKLSAgICAg ICAgICAgICAgICAgaWYgKGVycm5vICE9IEVBRERSSU5VU0UpCi0jZW5kaWYgLyogVEdWT1JXSU4g Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICB7Ci0jaWZkZWYgQ09NTUVO VAotICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuQmluZCBmYWlsZWQgd2l0aCBlcnJu byAlZCAgZm9yIHBvcnQgJWQuXG4iLAotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc19lcnJubwotI2Vsc2UKLSNpZmRlZiBUR1ZPUldJTgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc29ja2V0X2Vycm5vCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXJybm8KLSNlbmRpZiAvKiBUR1ZPUldJTiAqLwotI2VuZGlmIC8qIE9TMiAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBscG9ydAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgICAgZGVidWco RjEwMSwicmxvZ2luIGJpbmQgZmFpbGVkIiwiIixzX2Vycm5vKTsKLSNlbHNlCi0jaWZkZWYgVEdW T1JXSU4KLSAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwicmxvZ2luIGJpbmQgZmFp bGVkIiwiIixzb2NrZXRfZXJybm8pOwotI2lmZGVmIE9MRF9UV0cKLSAgICAgICAgICAgICAgICAg ICAgICAgZXJybm8gPSBzb2NrZXRfZXJybm87Ci0jZW5kaWYgLyogT0xEX1RXRyAqLwotICAgICAg ICAgICAgICAgICAgICAgICBzb2NrZXRfcGVycm9yKCJybG9naW4gYmluZCIpOwotI2Vsc2UKLSAg ICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwicmxvZ2luIGJpbmQgZmFpbGVkIiwiIixl cnJubyk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHBlcnJvcigicmxvZ2luIGJpbmQiKTsKLSNl bmRpZiAvKiBUR1ZPUldJTiAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2Vsc2UgIC8qIENPTU1FTlQg Ki8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwicmxvZ2lu IGJpbmQgc19lcnJubyIsIiIsc19lcnJubyk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHBlcnJv cigicmxvZ2luIGJpbmQiKTsKLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiXHJcbiIpOyAgLyogY29tcGxldGUgYW55IHByZXZpb3VzIG1lc3NhZ2UgKi8K LSNlbmRpZiAvKiBWTVMgKi8KLSNpZmRlZiBUR1ZPUldJTgotICAgICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJybG9naW4gYmluZCBzb2NrZXRfZXJybm8iLCIiLHNvY2tldF9lcnJubyk7 Ci0jaWZkZWYgT0xEX1RXRwotICAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9IHNvY2tldF9l cnJubzsKLSNlbmRpZiAvKiBPTERfVFdHICovCi0gICAgICAgICAgICAgICAgICAgICAgIHNvY2tl dF9wZXJyb3IoInJsb2dpbiBiaW5kIik7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJybG9naW4gYmluZCBlcnJubyIsIiIsZXJybm8pOwotICAgICAgICAgICAgICAg ICAgICAgICBwZXJyb3IoInJsb2dpbiBiaW5kIik7Ci0jZW5kaWYgLyogVEdWT1JXSU4gKi8KLSNl bmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwicmxvZ2lu IGxvY2FsIHBvcnQiLCIiLGxwb3J0KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAg ICAgICAgICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x OwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGxwb3J0LS07Ci0gICAgICAg ICAgICAgICBpZiAobHBvcnQgPT0gNTEyIC8qIGxvd2VzdCByZXNlcnZlZCBwb3J0IHRvIHVzZSAq LyApIHsKLSAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuTm8gcmVzZXJ2ZWQgcG9ydHMgYXZh aWxhYmxlLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICAgICAg ICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfQotICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gbHBvcnQiLCIiLGxwb3J0KTsKLSAgICAgICAgICAgdHRu cHJvdG8gPSBOUF9STE9HSU47Ci0gICAgICAgfSBlbHNlCi0jZW5kaWYgLyogUkxPR0NPREUgICov Ci0KLSAgICAgICAvKiBJZiBhIHNwZWNpZmljIFRDUCBhZGRyZXNzIG9uIHRoZSBsb2NhbCBob3N0 IGlzIGRlc2lyZWQgd2UgKi8KLSAgICAgICAvKiBtdXN0IGJpbmQgaXQgdG8gdGhlIHNvY2tldC4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZm5kZWYgZGF0YWdlbmVyYWwKLSAg ICAgICAgIGlmICh0Y3BfYWRkcmVzcykgewotICAgICAgICAgICAgIGludCBzX2Vycm5vOwotCi0g ICAgICAgICAgICAgZGVidWcoRjExMCwibmV0b3BlbiBiaW5kaW5nIHNvY2tldCB0byIsdGNwX2Fk ZHJlc3MsMCk7Ci0gICAgICAgICAgICAgYnplcm8oKGNoYXIgKikmc2luLHNpemVvZihzaW4pKTsK LSAgICAgICAgICAgICBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0jaWZkZWYgSU5BRERSWAot ICAgICAgICAgICAgIGluYWRkcnggPSBpbmV0X2FkZHIodGNwX2FkZHJlc3MpOwotICAgICAgICAg ICAgIHNpbi5zaW5fYWRkci5zX2FkZHIgPSAqKHVuc2lnbmVkIGxvbmcgKikmaW5hZGRyeDsKLSNl bHNlCi0gICAgICAgICAgICAgc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcih0Y3BfYWRk cmVzcyk7Ci0jZW5kaWYgLyogSU5BRERSWCAqLwotICAgICAgICAgICAgIHNpbi5zaW5fcG9ydCA9 IDA7Ci0gICAgICAgICAgICAgaWYgKGJpbmQodHR5ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2lu LCBzaXplb2Yoc2luKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgIHNfZXJybm8gPSBzb2NrZXRf ZXJybm87IC8qIFNhdmUgZXJyb3IgY29kZSAqLwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAg ICAgICAgIHNvY2tldF9jbG9zZSh0dHlmZCk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAgICAg ICAgICAgICAgICBjbG9zZSh0dHlmZCk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICAgICAg ICAgICAgICAgdHR5ZmQgPSAtMTsKLSAgICAgICAgICAgICAgICAgd2FzY2xvc2VkID0gMTsKLSAg ICAgICAgICAgICAgICAgZXJybm8gPSBzX2Vycm5vOyAgICAgICAvKiBhbmQgcmVwb3J0IHRoaXMg ZXJyb3IgKi8KLSAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0b3BlbiBiaW5kIGVycm5v IiwiIixlcnJubyk7Ci0gICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAg fQotICAgICAgICAgfQotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0KLS8qIE5vdyBjb25uZWN0 IHRvIHRoZSBzb2NrZXQgb24gdGhlIG90aGVyIGVuZC4gKi8KLQotI2lmZGVmIEVYQ0VMQU4KLSAg ICAgICAgaWYgKGNvbm5lY3QodHR5ZmQsICZyX2FkZHIpIDwgMCkKLSNlbHNlCi0jaWZkZWYgTlQK LSAgICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAxOwotI2VuZGlmIC8qIE5UICovCi0gICAgICAg IGlmIChjb25uZWN0KHR0eWZkLCAoc3RydWN0IHNvY2thZGRyICopJnJfYWRkciwgc2l6ZW9mKHJf YWRkcikpIDwgMCkKLSNlbmRpZiAvKiBFWENFTEFOICovCi0gICAgICAgICAgewotI2lmZGVmIE5U Ci0gICAgICAgICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDA7Ci0jZW5kaWYgLyogTlQgKi8KLSNp ZmRlZiBPUzIKLSAgICAgICAgICAgICAgaSA9IHNvY2tldF9lcnJubzsKLSNlbHNlIC8qIE9TMiAq LwotI2lmZGVmIFRHVk9SV0lOCi0gICAgICAgICAgICAgIGkgPSBzb2NrZXRfZXJybm87Ci0jZWxz ZQotICAgICAgICAgICAgICBpID0gZXJybm87ICAgICAgICAgICAgICAgIC8qIFNhdmUgZXJyb3Ig Y29kZSAqLwotI2VuZGlmIC8qIFRHVk9SV0lOICovCi0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYg UkxPR0NPREUKLSAgICAgICAgICAgICAgaWYgKAotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAg ICBpICYmIC8qIE9TMiBiaW5kIGZhaWxzIHdpdGggMCwgaWYgYWxyZWFkeSBpbiB1c2UgKi8KLSNp ZmRlZiBOVAotICAgICAgICAgICAgICAgICBpID09IFdTQUVBRERSSU5VU0UKLSNlbHNlCi0gICAg ICAgICAgICAgICAgIChpID09IFNPQ0VBRERSSU5VU0UgfHwKLSAgICAgICAgICAgICAgICAgaSA9 PSAoU09DRUFERFJJTlVTRSAtIFNPQ0JBU0VFUlIpKQotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAv KiBPUzIgKi8KLSNpZmRlZiBUR1ZPUldJTgotICAgICAgICAgICAgICAgICAgc29ja2V0X2Vycm5v ID09IEVBRERSSU5VU0UKLSNlbHNlCi0gICAgICAgICAgICAgICAgICBlcnJubyA9PSBFQUREUklO VVNFCi0jZW5kaWYgLyogVEdWT1JXSU4gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAg ICAgICAgICYmIHR0bnByb3RvID09IE5QX1JMT0dJTikgewotI2lmZGVmIFRDUElQTElCCi0gICAg ICAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKHR0eWZkKTsgLyogQ2xvc2UgaXQuICovCi0jZWxz ZQotICAgICAgICAgICAgICAgICAgIGNsb3NlKHR0eWZkKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAq LwotICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgIC8qIFRyeSBhIGRpZmZl cmVudCBscG9ydCAqLwotICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0j aWZkZWYgSEFERFJMSVNUCi0jaWZkZWYgaF9hZGRyCi0gICAgICAgICAgICAgIGlmIChob3N0ICYm IGhvc3QtPmhfYWRkcl9saXN0ICYmIGhvc3QtPmhfYWRkcl9saXN0WzFdKSB7Ci0gICAgICAgICAg ICAgICAgICBwZXJyb3IoIiIpOwotICAgICAgICAgICAgICAgICAgaG9zdC0+aF9hZGRyX2xpc3Qr KzsKLSAgICAgICAgICAgICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkcl9saXN0WzBdLAotICAgICAg ICAgICAgICAgICAgICAgICAgKGNhZGRyX3QpJnJfYWRkci5zaW5fYWRkciwKLSAgICAgICAgICAg ICAgICAgICAgICAgIGhvc3QtPmhfbGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgICAgY2tzdHJu Y3B5KGlwYWRkciwoY2hhciAqKWluZXRfbnRvYShyX2FkZHIuc2luX2FkZHIpLDIwKTsKLSAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4gaF9hZGRyX2xpc3QiLGlwYWRkciwwKTsK LSAgICAgICAgICAgICAgICAgIGlmICghcXVpZXQgJiYgKmlwYWRkcikgewotICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiIFRyeWluZyAlcy4uLiAiLCBpcGFkZHIpOwotICAgICAgICAgICAg ICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIFRD UElQTElCCi0gICAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2UodHR5ZmQpOyAvKiBDbG9zZSBp dC4gKi8KLSNlbHNlCi0gICAgICAgICAgICAgICAgICBjbG9zZSh0dHlmZCk7Ci0jZW5kaWYgLyog VENQSVBMSUIgKi8KLSAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICB9 Ci0jZW5kaWYgLyogaF9hZGRyICovCi0jZW5kaWYgIC8qIEhBRERSTElTVCAqLwotICAgICAgICAg ICAgICBuZXRjbG9zKCk7Ci0gICAgICAgICAgICAgIHR0eWZkID0gLTE7Ci0gICAgICAgICAgICAg IHdhc2Nsb3NlZCA9IDE7Ci0gICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfTk9ORTsKLSAgICAg ICAgICAgICAgZXJybm8gPSBpOyAgICAgICAgICAgICAgICAvKiBBbmQgcmVwb3J0IHRoaXMgZXJy b3IgKi8KLSNpZmRlZiBFWENFTEFOCi0gICAgICAgICAgICAgIGlmIChlcnJubykgZXhwZXJyb3Io Im5ldG9wZW4gY29ubmVjdCIpOwotI2Vsc2UKLSNpZmRlZiBUR1ZPUldJTgotICAgICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIGNvbm5lY3QgZXJyb3IiLCIiLHNvY2tldF9lcnJubyk7Ci0g ICAgICAgICAgICAgIC8qIGlmIChlcnJubykgc29ja2V0X3BlcnJvcigibmV0b3BlbiBjb25uZWN0 Iik7ICovCi0jaWZkZWYgT0xEX1RXRwotICAgICAgICAgICAgICBlcnJubyA9IHNvY2tldF9lcnJu bzsKLSNlbmRpZiAvKiBPTERfVFdHICovCi0gICAgICAgICAgICAgIGlmICghcXVpZXQpCi0gICAg ICAgICAgICAgICAgc29ja2V0X3BlcnJvcigibmV0b3BlbiBjb25uZWN0Iik7Ci0jZWxzZSAvKiBU R1ZPUldJTiAqLwotICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIGNvbm5lY3QgZXJy bm8iLCIiLGVycm5vKTsKLSNpZmRlZiBWTVMKLSAgICAgICAgICAgICAgaWYgKCFxdWlldCkKLSAg ICAgICAgICAgICAgICBwZXJyb3IoIlxyXG5GYWlsZWQiKTsKLSNlbHNlCi0gICAgICAgICAgICAg IGlmICghcXVpZXQpCi0gICAgICAgICAgICAgICAgcGVycm9yKCJGYWlsZWQiKTsKLSNlbmRpZiAv KiBWTVMgKi8KLSNpZmRlZiBERUNfVENQSVAKLSAgICAgICAgICAgICAgaWYgKCFxdWlldCkKLSAg ICAgICAgICAgICAgICBwZXJyb3IoIm5ldG9wZW4gY29ubmVjdCIpOwotI2VuZGlmIC8qIERFQ19U Q1BJUCAqLwotI2lmZGVmIENNVV9UQ1BJUAotICAgICAgICAgICAgICBpZiAoIXF1aWV0KQotICAg ICAgICAgICAgICAgIHBlcnJvcigibmV0b3BlbiBjb25uZWN0Iik7Ci0jZW5kaWYgLyogQ01VX1RD UElQICovCi0jZW5kaWYgLyogVEdWT1JXSU4gKi8KLSNlbmRpZiAvKiBFWENFTEFOICovCi0gICAg ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgfQotI2lmZGVmIE5UCi0gICAgICAgIFdT QVNhZmVUb0NhbmNlbCA9IDA7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgaXNjb25uZWN0ID0g MTsKLSAgICB9IHdoaWxlICghaXNjb25uZWN0KTsKLQotI2lmZGVmIE5PTl9CTE9DS19JTwotICAg IG9uID0gMTsKLSAgICB4ID0gc29ja2V0X2lvY3RsKHR0eWZkLEZJT05CSU8sJm9uKTsKLSAgICBk ZWJ1ZyhGMTAxLCJuZXRvcGVuIEZJT05CSU8iLCIiLHgpOwotI2VuZGlmIC8qIE5PTl9CTE9DS19J TyAqLwotCi0jaWZkZWYgTlRfVENQX09WRVJMQVBQRUQKLSAgICBPdmVybGFwcGVkV3JpdGVJbml0 KCk7Ci0gICAgT3ZlcmxhcHBlZFJlYWRJbml0KCk7Ci0jZW5kaWYgLyogTlRfVENQX09WRVJMQVBQ RUQgKi8KLQotICAgIHR0bmV0ID0gbmV0dDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFRDUC9J UCAoc29ja2V0cykgbmV0d29yayAqLwotCi0jaWZuZGVmIE5PSFRUUAotICAgIC8qIFdlIGhhdmUg c3VjY2VlZGVkIGluIGNvbm5lY3RpbmcgdG8gdGhlIEhUVFAgUFJPWFkuICBTbyBub3cgd2UgICAq LwotICAgIC8qIG5lZWQgdG8gYXR0ZW1wdCB0byBjb25uZWN0IHRocm91Z2ggdGhlIHByb3h5IHRv IHRoZSBhY3R1YWwgaG9zdCAqLwotICAgIC8qIElmIHRoYXQgaXMgc3VjY2Vzc2Z1bCwgd2UgaGF2 ZSB0byBwcmV0ZW5kIHRoYXQgd2UgbWFkZSBhIGRpcmVjdCAqLwotICAgIC8qIGNvbm5lY3Rpb24g dG8gdGhlIGFjdHVhbCBob3N0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwot Ci0gICAgaWYgKCB0Y3BfaHR0cF9wcm94eSApIHsKLSNpZmRlZiBPUzIKLSAgICAgICAgY2hhciAq IGFnZW50ID0gIktlcm1pdCA5NSI7ICAgICAgICAgICAgIC8qIERlZmF1bHQgdXNlciBhZ2VudCAq LwotI2Vsc2UKLSAgICAgICAgY2hhciAqIGFnZW50ID0gIkMtS2VybWl0IjsKLSNlbmRpZiAvKiBP UzIgKi8KLQotICAgICAgICBpZiAoaHR0cF9jb25uZWN0KHR0eWZkLAotCQkJIHRjcF9odHRwX3By b3h5X2FnZW50ID8gdGNwX2h0dHBfcHJveHlfYWdlbnQgOiBhZ2VudCwKLQkJCSBOVUxMLAotICAg ICAgICAgICAgICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X3VzZXIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgdGNwX2h0dHBfcHJveHlfcHdkLAotICAgICAgICAgICAgICAgICAgICAgICAg IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcHJveHljb3B5Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgKSA8IDApIHsKLSAgICAgICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgICAgIHJl dHVybigtMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBja3N0cm5jcHkobmFtZWNvcHkscHJveHlj b3B5LE5BTUVDUFlMKTsKLSAgICAgICAgcCA9IG5hbWVjb3B5OyAgICAgICAgICAgICAgICAgICAg ICAgLyogV2FzIGEgc2VydmljZSByZXF1ZXN0ZWQ/ICovCi0gICAgICAgIHdoaWxlICgqcCAhPSAn XDAnICYmICpwICE9ICc6JykgcCsrOyAvKiBMb29rIGZvciBjb2xvbiAqLwotICAgICAgICAqcCA9 ICdcMCc7Ci0gICAgfQotI2VuZGlmIC8qIE5PSFRUUCAqLwotCi0gICAgLyogSmVmZiAtIERvZXMg dGhpcyBuZXh0IGJsb2NrIG9mIGNvZGUgdGhhdCBzZXQncyB0aGUgcHJvdG9jb2wgKi8KLSAgICAv KiBuZWVkIHRvIGJlIGhlcmUgYW55bW9yZT8gIDUvMTAvMjAwMCAgICAgICAgICAgICAgICAgICAg ICAgICAqLwotCi0gICAgLyogVGhlcmUgYXJlIGNlcnRhaW4gbWFnaWMgcG9ydCBudW1iZXJzIHRo YXQgd2hlbiB1c2VkIHJlcXVpcmUgKi8KLSAgICAvKiB0aGUgdXNlIG9mIHNwZWNpZmljIHByb3Rv Y29scy4gIENoZWNrIHRoaXMgbm93IGJlZm9yZSB3ZSAgICAqLwotICAgIC8qIHNldCB0aGUgU09f T09CSU5MSU5FIHN0YXRlIG9yIHdlIG1pZ2h0IGdldCBpdCB3cm9uZy4gICAgICAgICovCi0gICAg eCA9IG50b2hzKCh1bnNpZ25lZCBzaG9ydClzZXJ2aWNlLT5zX3BvcnQpOwotICAgIHN2Y251bSA9 IHg7Ci0gICAgLyogU2VlIGlmIHRoZSBzZXJ2aWNlIGlzIFRFTE5FVC4gKi8KLSAgICBpZiAoeCA9 PSBURUxORVRfUE9SVCkgewotICAgICAgICAvKiBZZXMsIHNvIGlmIHJhdyBwb3J0IG5vdCByZXF1 ZXN0ZWQgKi8KLSNpZmRlZiBDT01NRU5UCi0JLyogSmVmZiAyMDA1LzEyLzMwICovCi0gICAgICAg IGlmICh0dG5wcm90byAhPSBOUF9UQ1BSQVcgJiYgdHRucHJvdG8gIT0gTlBfU1NMX1JBVyAmJiAK LQkgICAgdHRucHJvdG8gIT0gTlBfVExTX1JBVyAmJiB0dG5wcm90byAhPSBOUF9OT05FKQotI2Vs c2UKLQkvKiBmZGMgMjAwNS8xMi8wNCAqLwotICAgICAgICBpZiAodHRucHJvdG8gIT0gTlBfVENQ UkFXICYmIHR0bnByb3RvICE9IE5QX05PTkUpCi0jZW5kaWYJLyogQ09NTUVOVCAqLwotICAgICAg ICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOyAgICAgICAgIC8qIFNlbGVjdCBURUxORVQgcHJvdG9j b2wuICovCi0gICAgfQotI2lmZGVmIFJMT0dDT0RFCi0gICAgZWxzZSBpZiAoeCA9PSBSTE9HSU5f UE9SVCkgewotICAgICAgICB0dG5wcm90byA9IE5QX1JMT0dJTjsKLSAgICB9Ci0jaWZkZWYgQ0tf S0VSQkVST1MKLSAgICAvKiBUaGVyZSBpcyBubyBnb29kIHdheSB0byBkbyB0aGlzLiAgSWYgdGhl IHVzZXIgZGlkbid0IHRlbGwgICAgKi8KLSAgICAvKiB3aGljaCBvbmUgdG8gdXNlIHVwIGZyb250 LiAgV2UgbWF5IGd1ZXNzIHdyb25nIGlmIHRoZSB1c2VyICAgKi8KLSAgICAvKiBoYXMgYm90aCBL ZXJiZXJvcyB2ZXJzaW9ucyBpbnN0YWxsZWQgYW5kIHZhbGlkIFRHVHMgZm9yIGVhY2ggKi8KLSAg ICBlbHNlIGlmICh4ID09IEtMT0dJTl9QT1JUICYmCi0gICAgICAgICAgICAgdHRucHJvdG8gIT0g TlBfSzRMT0dJTiAmJgotICAgICAgICAgICAgIHR0bnByb3RvICE9IE5QX0s1TE9HSU4pIHsKLSAg ICAgICAgaWYgKGNrX2tyYjVfaXNfaW5zdGFsbGVkKCkgJiYKLSAgICAgICAgICAgIGNrX2tyYjVf aXNfdGd0X3ZhbGlkKCkpCi0gICAgICAgICAgdHRucHJvdG8gPSBOUF9LNUxPR0lOOwotICAgICAg ICBlbHNlIGlmIChja19rcmI0X2lzX2luc3RhbGxlZCgpICYmIGNrX2tyYjRfaXNfdGd0X3ZhbGlk KCkpCi0gICAgICAgICAgdHRucHJvdG8gPSBOUF9LNExPR0lOOwotICAgICAgICBlbHNlCi0gICAg ICAgICAgdHRucHJvdG8gPSBOUF9LNExPR0lOOwotICAgIH0gZWxzZSBpZiAoeCA9PSBFS0xPR0lO X1BPUlQgJiYKLSAgICAgICAgICAgICAgIHR0bnByb3RvICE9IE5QX0VLNExPR0lOICYmCi0gICAg ICAgICAgICAgICB0dG5wcm90byAhPSBOUF9FSzVMT0dJTikgewotICAgICAgICBpZiAoY2tfa3Ji NV9pc19pbnN0YWxsZWQoKSAmJiBja19rcmI1X2lzX3RndF92YWxpZCgpKQotICAgICAgICAgIHR0 bnByb3RvID0gTlBfRUs1TE9HSU47Ci0gICAgICAgIGVsc2UgaWYgKGNrX2tyYjRfaXNfaW5zdGFs bGVkKCkgJiYgY2tfa3JiNF9pc190Z3RfdmFsaWQoKSkKLSAgICAgICAgICB0dG5wcm90byA9IE5Q X0VLNExPR0lOOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdHRucHJvdG8gPSBOUF9FSzRMT0dJ TjsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNlbmRpZiAvKiBSTE9HQ09ERSAq LwotI2lmZGVmIElLU19PUFRJT04KLSAgICBlbHNlIGlmICh4ID09IEtFUk1JVF9QT1JUKSB7ICAg ICAgICAvKiBJS1MgdXNlcyBUZWxuZXQgcHJvdG9jb2wgKi8KLSAgICAgICAgaWYgKHR0bnByb3Rv ID09IE5QX05PTkUpCi0gICAgICAgICAgdHRucHJvdG8gPSBOUF9LRVJNSVQ7Ci0gICAgfQotI2Vu ZGlmIC8qIElLU19PUFRJT04gKi8KLQotI2lmZGVmIFNPX09PQklOTElORQotLyoKLSAgVGhlIHN5 bWJvbCBTT19PT0JJTkxJTkUgaXMgbm90IGtub3duIHRvIFVsdHJpeCAyLjAuCi0gIEl0IG1lYW5z ICJsZWF2ZSBvdXQgb2YgYmFuZCBkYXRhIGlubGluZSIuICBUaGUgbm9ybWFsIHZhbHVlIGlzIDB4 MDEwMCwKLSAgYnV0IGRvbid0IHRyeSB0aGlzIG9uIHN5c3RlbXMgd2hlcmUgdGhlIHN5bWJvbCBp cyB1bmRlZmluZWQuCi0qLwotLyoKLSAgTm90ZSBmcm9tIEplZmYgQWx0bWFuOiAxMi8xMy85NQot ICBJbiBpbXBsZW1lbnRpbmcgcmxvZ2luIHByb3RvY29sIEkgaGF2ZSBjb21lIHRvIHRoZSBjb25j bHVzaW9uIHRoYXQgaXQgaXMKLSAgYSByZWFsbHkgYmFkIGlkZWEgdG8gcmVhZCBvdXQtb2YtYmFu ZCBkYXRhIGlubGluZS4KLSAgQXQgbGVhc3QgV2luZG93cyBhbmQgT1MvMiBkb2VzIG5vdCBoYW5k bGUgdGhpcyB3ZWxsLgotICBBbmQgaWYgeW91IG5lZWQgdG8ga25vdyB0aGF0IGRhdGEgaXMgb3V0 LW9mLWJhbmQsIHRoZW4gaXQgYmVjb21lcwotICBhYnNvbHV0ZWx5IHBvaW50bGVzcy4KLQotICBU aGVyZWZvcmUsIGF0IGxlYXN0IG9uIE9TMiBhbmQgV2luZG93cyAoTlQpIEkgaGF2ZSBjaGFuZ2Vk IHRoZSB2YWx1ZSBvZgotICBvbiB0byAwLCBzbyB0aGF0IG91dC1vZi1iYW5kIGRhdGEgc3RheXMg b3V0LW9mLWJhbmQuCi0KLSAgMTIvMTgvOTUKLSAgQWN0dWFsbHksIE9PQiBkYXRhIHNob3VsZCBi ZSByZWFkIGlubGluZSB3aGVuIHBvc3NpYmxlLiAgRXNwZWNpYWxseSB3aXRoCi0gIHByb3RvY29s cyB0aGF0IGRvbid0IGNhcmUgYWJvdXQgdGhlIFVyZ2VudCBmbGFnLiAgVGhpcyBpcyB0cnVlIHdp dGggVGVsbmV0LgotICBXaXRoIFJsb2dpbiwgeW91IG5lZWQgdG8gYmUgYWJsZSB0byBjYXRjaCBP T0IgZGF0YS4gIEhvd2V2ZXIsIHRoZSBiZXN0Ci0gIHdheSB0byBkbyB0aGlzIGlzIHRvIHNldCBh IHNpZ25hbCBoYW5kbGVyIG9uIFNJR1VSRy4gIFRoaXMgaXNuJ3QgcG9zc2libGUKLSAgb24gT1Mv MiBhbmQgV2luZG93cy4gIEJ1dCBpdCBpcyBpbiBVTklYLiAgV2Ugd2lsbCBhbHNvIG5lZWQgT09C IGRhdGEgZm9yCi0gIEZUUCBzbyBiZXR0ZXIgY3JlYXRlIGEgZ2VuZXJhbCBtZWNoYW5pc20uCi0K LSAgVGhlIHJlYXNvbiBmb3IgbWFraW5nIE9PQiBkYXRhIGJlIGlubGluZSBpcyB0aGF0IHRoZSBz dGFuZGFyZCB0dGluYy90dG9jCi0gIGNhbGxzIGNhbiBiZSB1c2VkIGZvciByZWFkaW5nIHRoYXQg ZGF0YSBvbiBVTklYIHN5c3RlbXMuICBJZiB3ZSBkaWRuJ3QKLSAgaGF2ZSB0aGUgT09CSU5MSU5F IG9wdGlvbiBzZXQgdGhlbiB3ZSB3b3VsZCBoYXZlIHRvIHVzZSByZWN2KCxNU0dfT09CKQotICB0 byByZWFkIGl0LgotKi8KLSNpZmRlZiBSTE9HQ09ERQotI2lmZGVmIFRDUElQTElCCi0gICAgaWYg KHR0bnByb3RvID09IE5QX1JMT0dJTgotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgICAgIHx8IHR0 bnByb3RvID09IE5QX0s0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs0TE9HSU4KLSAgICAgICAg fHwgdHRucHJvdG8gPT0gTlBfSzVMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTgotI2Vu ZGlmIC8qIENLX0tFUkJFUk9TICovCi0gICAgICApCi0gICAgICBvbiA9IDA7Ci0jZWxzZSAvKiBU Q1BJUExJQiAqLwotICAgIGlmICh0dG5wcm90byA9PSBOUF9STE9HSU4KLSNpZmRlZiBDS19LRVJC RVJPUwotICAgICAgICAgfHwgdHRucHJvdG8gPT0gTlBfSzRMT0dJTiB8fCB0dG5wcm90byA9PSBO UF9FSzRMT0dJTgotICAgICAgICAgfHwgdHRucHJvdG8gPT0gTlBfSzVMT0dJTiB8fCB0dG5wcm90 byA9PSBOUF9FSzVMT0dJTgotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0gICAgICAgICApIHsK LSAgICAgICAgZGVidWcoRjEwMCwiSW5zdGFsbGluZyBybG9nb29iaCBvbiBTSUdVUkciLCIiLDAp OwotICAgICAgICBzaWduYWwoU0lHVVJHLCBybG9nb29iaCk7Ci0gICAgICAgIG9uID0gMDsKLSAg ICB9IGVsc2UgewotICAgICAgICBkZWJ1ZyhGMTAwLCJJZ25vcmluZyBTSUdVUkciLCIiLDApOwot ICAgICAgICBzaWduYWwoU0lHVVJHLCBTSUdfREZMKTsKLSAgICB9Ci0jZW5kaWYgLyogVENQSVBM SUIgKi8KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICBz ZXRzb2Nrb3B0KHR0eWZkLCBTT0xfU09DS0VULCBTT19PT0JJTkxJTkUsKGNoYXIgKikgJm9uLCBz aXplb2Ygb24pOwotI2Vsc2UKLSNpZmRlZiBCU0Q0MwotICAgIHNldHNvY2tvcHQodHR5ZmQsIFNP TF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7Ci0jZWxzZQot I2lmZGVmIE9TRjEKLSAgICBzZXRzb2Nrb3B0KHR0eWZkLCBTT0xfU09DS0VULCBTT19PT0JJTkxJ TkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOwotI2Vsc2UKLSNpZmRlZiBQT1NJWAotICAgIHNl dHNvY2tvcHQodHR5ZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNp emVvZiBvbik7Ci0jZWxzZQotI2lmZGVmIE1PVFNWODhSNAotICAgIHNldHNvY2tvcHQodHR5ZmQs IFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7Ci0jZWxz ZQotI2lmZGVmIFNPTEFSSVMKLS8qCi0gIE1heWJlIHRoaXMgYXBwbGllcyB0byBhbGwgU1ZSNCB2 ZXJzaW9ucywgYnV0IHRoZSBvdGhlciAoZWxzZSkgd2F5IGhhcyBiZWVuCi0gIGNvbXBpbGluZyBh bmQgd29ya2luZyBmaW5lIG9uIGFsbCB0aGUgb3RoZXJzLCBzbyBiZXN0IG5vdCB0byBjaGFuZ2Ug aXQuCi0qLwotICAgIHNldHNvY2tvcHQodHR5ZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwo Y2hhciAqKSAmb24sIHNpemVvZiBvbik7Ci0jZWxzZQotI2lmZGVmIE9TSwotICAgIHNldHNvY2tv cHQodHR5ZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNpemVvZiBv bik7Ci0jZWxzZQotI2lmZGVmIE9TMgotICAgIHsKLSAgICAgICAgaW50IHJjOwotICAgICAgICBy YyA9IHNldHNvY2tvcHQodHR5ZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICBTT0xfU09DS0VU LAotICAgICAgICAgICAgICAgICAgICAgICAgU09fT09CSU5MSU5FLAotICAgICAgICAgICAgICAg ICAgICAgICAgKGNoYXIgKikgJm9uLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIG9u Ci0gICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICBkZWJ1ZyhGMTExLCJzZXRzb2Nr b3B0IFNPX09PQklOTElORSIsb24gPyAib24iIDogIm9mZiIgLHJjKTsKLSAgICB9Ci0jZWxzZQot I2lmZGVmIFZNUyAvKiBvciwgYXQgbGVhc3QsIFZNUyB3aXRoIGdjYyAqLwotICAgIHNldHNvY2tv cHQodHR5ZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNpemVvZiBv bik7Ci0jZWxzZQotI2lmZGVmIENMSVgKLSAgICBzZXRzb2Nrb3B0KHR0eWZkLCBTT0xfU09DS0VU LCBTT19PT0JJTkxJTkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOwotI2Vsc2UKLSAgICBzZXRz b2Nrb3B0KHR0eWZkLCBTT0xfU09DS0VULCBTT19PT0JJTkxJTkUsICZvbiwgc2l6ZW9mIG9uKTsK LSNlbmRpZiAvKiBDTElYICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0j ZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogU09MQVJJUyAqLwotI2VuZGlmIC8qIE1PVFNWODhS NCAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0jZW5kaWYgLyogQlNENDMgKi8KLSNlbmRpZiAvKiBP U0YxICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBTT19PT0JJTkxJTkUg Ki8KLQotI2lmbmRlZiBOT1RDUE9QVFMKLSNpZm5kZWYgZGF0YWdlbmVyYWwKLSNpZmRlZiBTT0xf U09DS0VUCi0jaWZkZWYgVENQX05PREVMQVkKLSAgICBub19kZWxheSh0dHlmZCx0Y3Bfbm9kZWxh eSk7Ci0jZW5kaWYgLyogVENQX05PREVMQVkgKi8KLSNpZmRlZiBTT19LRUVQQUxJVkUKLSAgICBr ZWVwYWxpdmUodHR5ZmQsdGNwX2tlZXBhbGl2ZSk7Ci0jZW5kaWYgLyogU09fS0VFUEFMSVZFICov Ci0jaWZkZWYgU09fTElOR0VSCi0gICAgY2tfbGluZ2VyKHR0eWZkLHRjcF9saW5nZXIsIHRjcF9s aW5nZXJfdG1vKTsKLSNlbmRpZiAvKiBTT19MSU5HRVIgKi8KLSNpZmRlZiBTT19TTkRCVUYKLSAg ICBzZW5kYnVmKHR0eWZkLHRjcF9zZW5kYnVmKTsKLSNlbmRpZiAvKiBTT19TTkRCVUYgKi8KLSNp ZmRlZiBTT19SQ1ZCVUYKLSAgICByZWN2YnVmKHR0eWZkLHRjcF9yZWN2YnVmKTsKLSNlbmRpZiAv KiBTT19SQ1ZCVUYgKi8KLSNlbmRpZiAvKiBTT0xfU09DS0VUICovCi0jZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KLSNlbmRpZiAvKiBOT1RDUE9QVFMgKi8KLQotI2lmbmRlZiBkYXRhZ2VuZXJhbAot ICAgIC8qIEZpbmQgb3V0IG91ciBvd24gSVAgYWRkcmVzcy4gKi8KLSAgICAvKiBXZSBuZWVkIHRo ZSBsX2FkZHIgc3RydWN0dXJlIGZvciBbRV1LTE9HSU4uICovCi0gICAgbF9zbGVuID0gc2l6ZW9m KGxfYWRkcik7Ci0gICAgYnplcm8oKGNoYXIgKikmbF9hZGRyLCBsX3NsZW4pOwotI2lmbmRlZiBF WENFTEFOCi0gICAgaWYgKCFnZXRzb2NrbmFtZSh0dHlmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZs X2FkZHIsICZsX3NsZW4pKSB7Ci0gICAgICAgIGNoYXIgKiBzID0gKGNoYXIgKilpbmV0X250b2Eo bF9hZGRyLnNpbl9hZGRyKTsKLSAgICAgICAgY2tzdHJuY3B5KG15aXBhZGRyLCBzLCAyMCk7Ci0g ICAgICAgIGRlYnVnKEYxMTAsImdldHNvY2tuYW1lIixteWlwYWRkciwwKTsKLSAgICB9Ci0jZW5k aWYgLyogRVhDRUxBTiAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0KLS8qCi0gIFRoaXMg aXMgcmVhbGx5IG9ubHkgbmVlZGVkIGZvciBLZXJiZXJvcyBJViBidXQgaXMgdXNlZnVsIGluZm9y bWF0aW9uIGluIGFueQotICBjYXNlLiAgSWYgd2UgY29ubmVjdCB0byBhIG5hbWUgdGhhdCBpcyBy ZWFsbHkgYSBwb29sLCB3ZSBuZWVkIHRvIGdldCB0aGUKLSAgbmFtZSBvZiB0aGUgbWFjaGluZSB3 ZSBhcmUgYWN0dWFsbHkgY29ubmVjdGluZyB0byBmb3IgSzQgdG8gYXV0aGVudGljYXRlCi0gIHBy b3Blcmx5LiAgVGhpcyB3YXkgd2UgYWxzbyB1cGRhdGUgdGhlIG5hbWVzIHByb3Blcmx5LgotCi0g IEhvd2V2ZXIsIGl0IGlzIGEgc2VjdXJpdHkgaG9sZSB3aGVuIHVzZWQgd2l0aCBpbnNlY3VyZSBE TlMuCi0KLSAgTm90ZTogVGhpcyBkb2VzIG5vdCB3b3JrIG9uIFdpbmRvd3MgOTUgb3IgV2luZG93 cyBOVCAzLjV4LiAgVGhpcyBpcyBiZWNhdXNlCi0gIG9mIHRoZSBNaWNyb3NvZnQgaW1wbGVtZW50 YXRpb24gb2YgZ2V0aG9zdGJ5YWRkcigpIGluIGJvdGggV2luc29jayAxLjEKLSAgYW5kIFdpbnNv Y2sgMi4wIG9uIHRob3NlIHBsYXRmb3Jtcy4gIFRoZWlyIGFsZ29yaXRobSBpczoKLQotICAxLiBD aGVjayB0aGUgSE9TVEVOVCBjYWNoZS4KLSAgMi4gQ2hlY2sgdGhlIEhPU1RTIGZpbGUgYXQgJVN5 c3RlbVJvb3QlXFN5c3RlbTMyXERSSVZFUlNcRVRDLgotICAzLiBEbyBhIEROUyBxdWVyeSBpZiB0 aGUgRE5TIHNlcnZlciBpcyBjb25maWd1cmVkIGZvciBuYW1lIHJlc29sdXRpb24uCi0gIDQuIERv IGFuIGFkZGl0aW9uYWwgTmV0QklPUyByZW1vdGUgYWRhcHRlciBzdGF0dXMgdG8gYW4gSVAgYWRk cmVzcyBmb3IgaXRzCi0gICAgIE5ldEJJT1MgbmFtZSB0YWJsZS4gVGhpcyBzdGVwIGlzIHNwZWNp ZmljIG9ubHkgdG8gdGhlIFdpbmRvd3MgTlQgdmVyc2lvbgotICAgICAzLjUxIGltcGxlbWVudGF0 aW9uLgotCi0gIFRoZSBwcm9ibGVtIGlzIHRoZSB1c2Ugb2YgdGhlIEhPU1RFTlQgY2FjaGUuICBJ dCBtZWFucyB0aGF0IGdldGhvc3RieWFkZHIoKQotICBjYW4gbm90IGJlIHVzZWQgdG8gcmVzb2x2 ZSB0aGUgcmVhbCBuYW1lIG9mIG1hY2hpbmUgaWYgaXQgd2FzIG9yaWdpbmFsbHkKLSAgYWNjZXNz ZWQgYnkgYW4gYWxpYXMgdXNlZCB0byByZXByZXNlbnQgYSBjbHVzdGVyLgotKi8KLSAgICAgaWYg KCh0Y3BfcmRucyAmJiBkbnMgfHwgdGNwX3JkbnMgPT0gU0VUX09OCi0jaWZkZWYgQ0tfS0VSQkVS T1MKLSAgICAgICAgIHx8IHRjcF9yZG5zID09IFNFVF9BVVRPICYmCi0gICAgICAgICAgKGNrX2ty YjVfaXNfaW5zdGFsbGVkKCkgfHwgY2tfa3JiNF9pc19pbnN0YWxsZWQoKSkKLSNlbmRpZiAvKiBD S19LRVJCRVJPUyAqLwotICAgICAgICAgKQotI2lmbmRlZiBOT0hUVFAKLSAgICAgICAgICAmJiAo dGNwX2h0dHBfcHJveHkgPT0gTlVMTCkKLSNlbmRpZiAvKiBOT0hUVFAgKi8KLSNpZmRlZiBDS19T U0wKLSAgICAgICAgICAmJiAhKHNzbF9vbmx5X2ZsYWcgfHwgdGxzX29ubHlfZmxhZykKLSNlbmRp ZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICkgewotI2lmZGVmIE5UCi0gICAgICAgIGlmIChpc1dp bjk1KCkpCi0gICAgICAgICAgc2xlZXAoMSk7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgaWYg KCFxdWlldCkgewotICAgICAgICAgICAgcHJpbnRmKCIgUmV2ZXJzZSBETlMgTG9va3VwLi4uICIp OwotICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhv c3QgPSBnZXRob3N0YnlhZGRyKChjaGFyICopJnJfYWRkci5zaW5fYWRkciw0LFBGX0lORVQpKSB7 Ci0gICAgICAgICAgICBjaGFyICogczsKLSAgICAgICAgICAgIGhvc3QgPSBja19jb3B5aG9zdGVu dChob3N0KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldG9wZW4gZ2V0aG9zdGJ5bmFtZSAh PSBOVUxMIiwiIiwwKTsKLSAgICAgICAgICAgIGlmICghcXVpZXQpIHsKLSAgICAgICAgICAgICAg ICBwcmludGYoIihPSylcbiIpOwotICAgICAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgcyA9IGhvc3QtPmhfbmFtZTsKLSAgICAgICAgICAgIGlm ICghcykgeyAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGNhbiBoYXBwZW4uLi4gKi8KLSAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXRvcGVuIGhvc3QtPmhfbmFtZSBpcyBOVUxMIiwiIiww KTsKLSAgICAgICAgICAgICAgICBzID0gIiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAv KiBTb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCBpbmV0X250b2EoKSBvbiBIUFVYIDEwLnh4ICovCi0g ICAgICAgICAgICAvKiBUaGUgY29tcGlsZXIgc2F5cyAiSW50ZWdyYWwgdmFsdWUgaW1wbGljaXRs eSBjb252ZXJ0ZWQgdG8gKi8KLSAgICAgICAgICAgIC8qIHBvaW50ZXIgaW4gYXNzaWdubWVudC4i ICBUaGUgcHJvdG90eXBlIGlzIHJpZ2h0IHRoZXJlICovCi0gICAgICAgICAgICAvKiBpbiA8YXJw YS9pbmV0Lmg+IHNvIHdoYXQncyB0aGUgcHJvYmxlbT8gKi8KLSAgICAgICAgICAgIC8qIERpdHRv IGluIEhQLVVYIDUueCwgYnV0IG5vdCA4Lnggb3IgOS54Li4uICovCi0gICAgICAgICAgICBpZiAo ISpzKSB7ICAgICAgICAgICAgICAgICAgLyogTm8gbmFtZSBzbyBzdWJzdGl0dXRlIHRoZSBhZGRy ZXNzICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0b3BlbiBob3N0LT5oX25hbWUg aXMgZW1wdHkiLCIiLDApOwotICAgICAgICAgICAgICAgIHMgPSBpbmV0X250b2Eocl9hZGRyLnNp bl9hZGRyKTsgLyogQ29udmVydCBhZGRyZXNzIHRvIHN0cmluZyAqLwotICAgICAgICAgICAgICAg IGlmICghcykgICAgICAgICAgICAgICAgIC8qIFRydXN0IE5vIDEgKi8KLSAgICAgICAgICAgICAg ICAgIHMgPSAiIjsKLSAgICAgICAgICAgICAgICBpZiAoKnMpIHsgICAgICAgICAgICAgICAvKiBJ ZiBpdCB3b3JrZWQsIHVzZSB0aGlzIHN0cmluZyAqLwotICAgICAgICAgICAgICAgICAgICBja3N0 cm5jcHkoaXBhZGRyLHMsMjApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBz ID0gaXBhZGRyOyAgICAgICAgICAgICAvKiBPdGhlcndpc2Ugc3RpY2sgd2l0aCB0aGUgSVAgKi8K LSAgICAgICAgICAgICAgICBpZiAoISpzKSAgICAgICAgICAgICAgICAvKiBvciBmYWlsaW5nIHRo YXQgKi8KLSAgICAgICAgICAgICAgICAgIHMgPSBuYW1lY29weTsgICAgICAgICAvKiB0aGUgbmFt ZSB3ZSB3ZXJlIGNhbGxlZCB3aXRoLiAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg KCpzKSB7ICAgICAgICAgICAgICAgICAgIC8qIENvcHlpbmcgaW50byBvdXIgYXJndW1lbnQ/ICov Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KG5hbWUscyw4MCk7ICAgLyogQmFkIEJhZCBCYWQg Ki8KLSAgICAgICAgICAgICAgICBpZiAoICg4MC1zdHJsZW4obmFtZSkpID4gKHN0cmxlbihzdmNi dWYpKzEpICkgewotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQobmFtZSwiOiIsODAtc3Ry bGVuKG5hbWUpKTsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KG5hbWUsc3ZjYnVmLDgw LXN0cmxlbihuYW1lKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg ICAgICAgaWYgKCFxdWlldCAmJiAqcwotI2lmbmRlZiBOT0lDUAotICAgICAgICAgICAgICAgICYm ICFkb2NvbngKLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgICAgICAgICAgICAgICkgewotICAgICAg ICAgICAgICAgIHByaW50ZigiICVzIGNvbm5lY3RlZCBvbiBwb3J0ICVzXG4iLHMscCk7Ci0jaWZk ZWYgQkVUQURFQlVHCi0gICAgICAgICAgICAgICAgLyogVGhpcyBpcyBzaW1wbHkgZm9yIHRlc3Rp bmcgdGhlIEROUyBlbnRyaWVzICovCi0gICAgICAgICAgICAgICAgaWYgKGhvc3QtPmhfYWxpYXNl cykgewotICAgICAgICAgICAgICAgICAgICBjaGFyICoqIGEgPSBob3N0LT5oX2FsaWFzZXM7Ci0g ICAgICAgICAgICAgICAgICAgIHdoaWxlICgqYSkgewotICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCIgYWxpYXMgPT4gJXNcbiIsKmEpOwotICAgICAgICAgICAgICAgICAgICAgICAgYSsr OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIEJF VEFERUJVRyAqLwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg aWYgKCFxdWlldCkgcHJpbnRmKCJGYWlsZWQuXG4iKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBp ZiAoIXF1aWV0KSBwcmludGYoIihPSylcbiIpOwotICAgIGlmICghcXVpZXQpIGZmbHVzaChzdGRv dXQpOwotCi0gICAgLyogVGhpcyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gZG9uZSBidXQganVz dCBpbiBjYXNlICovCi0gICAgY2tzdHJuY3B5KGlwYWRkciwoY2hhciAqKWluZXRfbnRvYShyX2Fk ZHIuc2luX2FkZHIpLDIwKTsKLQotI2lmZGVmIENLX1NFQ1VSSVRZCi0KLSAgICAvKiBCZWZvcmUg SW5pdGlhbGl6YXRpb24gVGVsbmV0L1Jsb2dpbiBOZWdvdGlhdGlvbnMgSW5pdCBLZXJiZXJvcyAq LwotI2lmbmRlZiBOT0hUVFAKLSAgICBpZiAodGNwX2h0dHBfcHJveHkpIHsKLSAgICAgICAgZm9y IChpPXN0cmxlbihwcm94eWNvcHkpOyBpID49IDAgOyBpLS0pCi0gICAgICAgICAgICBpZiAoIHBy b3h5Y29weVtpXSA9PSAnOicgKQotICAgICAgICAgICAgICAgIHByb3h5Y29weVtpXSA9ICdcMCc7 Ci0gICAgfQotI2VuZGlmIC8qIE5PSFRUUCAqLwotICAgIGNrX2F1dGhfaW5pdCgKLSNpZm5kZWYg Tk9IVFRQCi0gICAgICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5ID8gcHJveHljb3B5IDoKLSNl bmRpZiAvKiBOT0hUVFAgKi8KLSAgICAgICAgICAgICAgICAgKHRjcF9yZG5zICYmIGhvc3QgJiYg aG9zdC0+aF9uYW1lICYmIGhvc3QtPmhfbmFtZVswXSkgPwotICAgICAgICAgICAgICAgICAoY2hh ciAqKWhvc3QtPmhfbmFtZSA6IChuYW1lY29weTJbMF0gPyBuYW1lY29weTIgOiAKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZWNvcHlbMF0gPyBuYW1lY29weSA6 IGlwYWRkcikpLAotICAgICAgICAgICAgICAgICBpcGFkZHIsCi0gICAgICAgICAgICAgICAgIHVp ZGJ1ZiwKLSAgICAgICAgICAgICAgICAgdHR5ZmQKLSAgICAgICAgICAgICAgICAgKTsKLSNlbmRp ZiAvKiBDS19TRUNVUklUWSAqLwotI2lmZGVmIENLX1NTTAotICAgIGlmIChja19zc2xlYXlfaXNf aW5zdGFsbGVkKCkpIHsKLSAgICAgICAgaWYgKCFzc2xfdG5faW5pdChTU0xfQ0xJRU5UKSkgewot ICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0b3BlbiBzc2xfdG5faW5pdCgpIGZhaWxlZCIsIiIs MCk7Ci0gICAgICAgICAgICBpZiAoYmlvX2VyciE9TlVMTCkgewotICAgICAgICAgICAgICAgIEJJ T19wcmludGYoYmlvX2Vyciwic3NsX3RuX2luaXQoKSBmYWlsZWRcbiIpOwotICAgICAgICAgICAg ICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOwotICAgICAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCJzc2xfdG5faW5pdCgpIGZhaWxlZFxuIik7Ci0gICAgICAgICAgICAgICAgRVJSX3ByaW50 X2Vycm9yc19mcChzdGRlcnIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRsc19v bmx5X2ZsYWcgfHwgc3NsX29ubHlfZmxhZykgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAs Im5ldG9wZW4gc3NsL3RscyByZXF1aXJlZCIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgbmV0Y2xv cygpOwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg ICAgICAgIC8qIHdlIHdpbGwgY29udGludWUgdG8gYWNjZXB0IHRoZSBjb25uZWN0aW9uICAgKi8K LSAgICAgICAgICAgIC8qIHdpdGhvdXQgU1NMIG9yIFRMUyBzdXBwb3J0IHVubGVzcyByZXF1aXJl ZC4gKi8KLSAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX1NUQVJU X1RMUykgIT0gVE5fTkdfTVUgKQotICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RF KFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICBpZiAoIFRFTE9QVF9E RUZfU19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgIT0gVE5fTkdfTVUgKQotICAgICAgICAgICAg ICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19SRjsKLSAg ICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgIT0g VE5fTkdfTVUgKQotICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9T VEFSVF9UTFMpID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICBpZiAoIFRFTE9QVF9ERUZfQ19VX01P REUoVEVMT1BUX1NUQVJUX1RMUykgIT0gVE5fTkdfTVUgKQotICAgICAgICAgICAgICAgIFRFTE9Q VF9ERUZfQ19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19SRjsKLSAgICAgICAgfSBl bHNlIGlmICggY2tfc3NsX291dGdvaW5nKHR0eWZkKSA8IDAgKSB7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJja19zc2xfb3V0Z29pbmcoKSBmYWlsZWQiLCIiLDApOwotICAgICAgICAgICAgbmV0 Y2xvcygpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRp ZiAvKiBDS19TU0wgKi8KLQotI2lmZGVmIFJMT0dDT0RFCi0gICAgaWYgKHR0bnByb3RvID09IE5Q X1JMT0dJTgotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgICAgIHx8IHR0bnByb3RvID09IE5QX0s0 TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs0TE9HSU4KLSAgICAgICAgfHwgdHRucHJvdG8gPT0g TlBfSzVMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTgotI2VuZGlmIC8qIENLX0tFUkJF Uk9TICovCi0gICAgICAgICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2ltaWxh ciBkZWFsIGZvciBybG9naW4gKi8KLSAgICAgICAgaWYgKHJsb2dfaW5pKCgodGNwX3JkbnMgJiYg aG9zdCAmJiBob3N0LT5oX25hbWUgJiYgaG9zdC0+aF9uYW1lWzBdKSA/Ci0gICAgICAgICAgICAg ICAgICAgICAgKENIQVIgKilob3N0LT5oX25hbWUgOiAoQ0hBUiAqKWlwYWRkciksCi0gICAgICAg ICAgICAgICAgICAgICBzZXJ2aWNlLT5zX3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAmbF9h ZGRyLCZyX2FkZHIKLSAgICAgICAgICAgICAgICAgICAgICkgPCAwKSB7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTAwLCJybG9naW4gaW5pdGlhbGl6YXRpb24gZmFpbGVkIiwiIiwwKTsKLSAgICAgICAg ICAgIG5ldGNsb3MoKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICB9 IGVsc2UKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotICAgIGlmICh0bl9pbmkoKSA8IDApIHsgICAg ICAgICAgICAgICAgIC8qIFN0YXJ0IFRlbG5ldCBuZWdvdGlhdGlvbnMuICovCi0gICAgICAgIG5l dGNsb3MoKTsKLSAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiBHb25l LCBzbyBvcGVuIGZhaWxlZC4gICovCi0gICAgfQotICAgIGlmICh0dGNoaygpIDwgMCkgewotICAg ICAgICBuZXRjbG9zKCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotI2lmZGVmIENLX0tF UkJFUk9TCi0jaWZkZWYgS1JCNV9VMlUKLSAgIGlmICggdHRucHJvdG8gPT0gTlBfSzVVMlUgKSB7 Ci0gICAgICAgaWYgKGs1X3VzZXJfdG9fdXNlcl9jbGllbnRfYXV0aCgpKSB7Ci0gICAgICAgICAg IG5ldGNsb3MoKTsKLSAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICB9Ci0gICB9Ci0jZW5k aWYgLyogS1JCNV9VMlUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0gICAgZGVidWco RjEwMSwibmV0b3BlbiBzZXJ2aWNlIiwiIixzdmNudW0pOwotICAgIGRlYnVnKEYxMTAsIm5ldG9w ZW4gbmFtZSIsbmFtZSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIGlwYWRkciIsaXBhZGRy LDApOwotICAgIGNrc3RybmNweShob3N0aXBhZGRyLGlwYWRkciw2Myk7Ci0KLSAgICBpZiAobGNs KSBpZiAoKmxjbCA8IDApICAgICAgICAgICAgICAvKiBMb2NhbCBtb2RlLiAqLwotICAgICAgKmxj bCA9IDE7Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0gICAgcmV0dXJuKDApOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRG9uZS4gKi8KLX0KLQotLyogIE4gRSBUIEMgTCBPIFMgIC0tICBD bG9zZSBjdXJyZW50IG5ldHdvcmsgY29ubmVjdGlvbi4gICovCi0KLSNpZm5kZWYgTk9MT0NBTAot X1BST1RPVFlQKFZPSUQgc2xyZXN0b3IsKFZPSUQpKTsKLSNpZmRlZiBDS19TU0wKLWludCB0bHNf bm9yZXN0b3JlID0gMDsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICov Ci0KLWludAotbmV0Y2xvcygpIHsKLSAgICBzdGF0aWMgaW50IGNsb3NlX2luX3Byb2dyZXNzID0g MDsKLSAgICBpbnQgeCA9IDAsIHksIHo7Ci0gICAgZGVidWcoRjEwMSwibmV0Y2xvcyIsIiIsdHR5 ZmQpOwotCi0jaWZkZWYgTkVUTEVCVUYKLSAgICBpZiAoIXR0X3B1c2hfaW5pdGVkKQotICAgICAg bGVfaW5pdCgpOwotI2VuZGlmIC8qIE5FVExFQlVGICovCi0KLSAgICBpZiAodHR5ZmQgPT0gLTEp ICAgICAgICAgICAgICAgICAgICAvKiBXYXMgb3Blbj8gKi8KLSAgICAgIHJldHVybigwKTsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBXYXNuJ3QuICovCi0KLSAgICBpZiAoY2xvc2VfaW5fcHJv Z3Jlc3MpCi0gICAgICByZXR1cm4oMCk7Ci0gICAgY2xvc2VfaW5fcHJvZ3Jlc3MgPSAxOyAgICAg ICAgICAgICAgLyogUmVtZW1iZXIgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgLyogVGhpcyBm dW5jdGlvbiBjYWxsIHNob3VsZCBub3QgYmUgaGVyZSBzaW5jZSB0aGlzIGlzIGEgZGlyZWN0IGNh bGwgKi8KLSAgICAvKiBmcm9tIGFuIEkvTyByb3V0aW5lIHRvIGEgdXNlciBpbnRlcmZhY2UgbGV2 ZWwgZnVuY3Rpb24uICBIb3dldmVyLCAqLwotICAgIC8qIHRoZSByZWFsaXR5IGlzIHRoYXQgd2Ug ZG8gbm90IGhhdmUgcHVyZSBpbnRlcmZhY2VzLiAgSWYgd2UgZXZlciAgICovCi0gICAgLyogZGVj aWRlIHRvIGNsZWFuIHRoaXMgdXAgdGhlIFVJIGxldmVsIHNob3VsZCBhc3NpZ24gdGhpcyBmdW5j dGlvbiAgKi8KLSAgICAvKiB2aWEgYSBwb2ludGVyIGFzc2lnbm1lbnQuICAtIEplZmYgOS8xMC8x OTk5ICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmZGVmIENLX1NTTAotICAgIGlmICghdGxz X25vcmVzdG9yZSkKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgIHNscmVzdG9yKCk7Ci0jZW5k aWYgLyogTk9MT0NBTCAqLwotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUQ1BJUE11dGV4KFNFTV9J TkRFRklOSVRFX1dBSVQpOwotI2Vsc2UgLyogT1MyICovCi0gICAgaWYgKHR0eWZkID4gLTEpICAg ICAgICAgICAgICAgICAgICAgLyogV2FzLiAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgewot I2lmZGVmIFZNUwotCSAgeSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9u IG5vbmJsb2NraW5nIHJlYWRzICovCi0JICB6ID0gc29ja2V0X2lvY3RsKHR0eWZkLEZJT05CSU8s JnkpOwotCSAgZGVidWcoRjExMSwibmV0Y2xvcyBGSU9OQklPIiwib24iLHopOwotI2VuZGlmIC8q IFZNUyAqLwotI2lmZGVmIFROQ09ERQotICAgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9URUxO RVQpIHsKLSAgICAgICAgICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9MT0dPVVQpCi0jaWZkZWYg Q09NTUVOVAotLyogSmVmZiAyMDA1LzEyLzMwICovCi0jaWZkZWYgQ0tfU1NMCi0JCSAmJiAhc3Ns X3Jhd19mbGFnICYmICF0bHNfcmF3X2ZsYWcKLSNlbmRpZgkvKiBDS19TU0wgKi8KLSNlbmRpZgkv KiBDT01NRU5UICovCi0JCSkgewotCQkvKiBTZW5kIExPR09VVCBvcHRpb24gYmVmb3JlIGNsb3Nl ICovCi0JCWlmICh0bl9zb3B0KERPLFRFTE9QVF9MT0dPVVQpID49IDApIHsKLQkJICAgIFRFTE9Q VF9VTkFOU1dFUkVEX0RPKFRFTE9QVF9MT0dPVVQpID0gMTsKLQkJICAgIC8qIEl0IHdvdWxkIGJl IG5pY2UgdG8gY2FsbCB0bl93YWl0IGJ1dCB3ZSBjYW4ndCAqLwotCQl9Ci0JICAgIH0KLSAgICAg ICAgICAgIHRuX3B1c2goKTsJCQkvKiBQbGFjZSBhbnkgd2FpdGluZyBkYXRhIGludG8gaW5wdXQq LwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNpZmRlZiBDS19TU0wKLSAgICAg ICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnKSB7Ci0gICAgICAgICAgICAgIGlmIChzc2xfZGVidWdf ZmxhZykKLSAgICAgICAgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsImNhbGxpbmcgU1NMX3No dXRkb3duXG4iKTsKLSAgICAgICAgICAgICAgU1NMX3NodXRkb3duKHNzbF9jb24pOwotICAgICAg ICAgICAgICBzc2xfYWN0aXZlX2ZsYWcgPSAwOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAo dGxzX2FjdGl2ZV9mbGFnKSB7Ci0gICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAg ICAgICAgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsImNhbGxpbmcgU1NMX3NodXRkb3duXG4i KTsKLSAgICAgICAgICAgICAgU1NMX3NodXRkb3duKHRsc19jb24pOwotICAgICAgICAgICAgICB0 bHNfYWN0aXZlX2ZsYWcgPSAwOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNp ZmRlZiBWTVMKLSAgICAgICAgICBja19jYW5jaW8oKTsgICAgICAgICAgICAgICAgICAvKiBDYW5j ZWwgYW55IG91dHN0YW5kaW5nIHJlYWRzLiAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2lmZGVmIFRD UElQTElCCi0gICAgICAgICAgeCA9IHNvY2tldF9jbG9zZSh0dHlmZCk7ICAgICAgLyogQ2xvc2Ug aXQuICovCi0jZWxzZQotI2lmbmRlZiBPUzIKLSNpZmRlZiBJQk1YMjUKLSAgICAgICAgaWYgKHR0 bmV0ID09IE5FVF9JWDI1KSB7Ci0gICAgICAgICAgICAvKiByaWVobTogc2hvdWxkIHNlbmQgYSBk aXNjX3JlcSAtIGJ1dCBvbmx5IGlmIGxpbmsgaXMgc3RpbGwgT0sgKi8KLSAgICAgICAgICAgIHgg PSB4MjVjbGVhcigpOwotICAgICAgICAgICAgY2xvc2UodHR5ZmQpOwotICAgICAgICAgICAgaWYg KHgyNXNlcnZlcmZkKSB7Ci0gICAgICAgICAgICAgICAgICAvKiB3ZSB3ZXJlIHRoZSBwYXNzaXZl IGNsaWVudCBvZiBhIHNlcnZlciwgbm93IHdlCi0gICAgICAgICAgICAgICAgICAgKiBnbyBiYWNr IHRvIGJlaW5nIHRoZSBub3JtYWwgY2xpZW50LgotICAgICAgICAgICAgICAgICAgICogSSBob3Bl IHRoYXQga2VybWl0IGNhbiBjb3BlIHdpdGggdGhlIGxvZ2ljIHRoYXQKLSAgICAgICAgICAgICAg ICAgICAqIHRoZXJlIGNhbiBzdGlsbCBiZSBhIGNvbm5lY3Rpb24gYWZ0ZXIgbmV0Y2xvcwotICAg ICAgICAgICAgICAgICAgICogaGFzIGJlZW4gY2FsbGVkLgotICAgICAgICAgICAgICAgICAgICov Ci0gICAgICAgICAgICAgICAgICB0dHlmZCA9IHgyNXNlcnZlcmZkOwotICAgICAgICAgICAgICAg ICAgeDI1c2VydmVyZmQgPSAwOwotICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAg ICAgICAqIG5lZWQgdG8gY2xvc2UgdGhlIHNlcnZlciBjb25uZWN0aW9uIHRvbyAtIGJlY2F1c2UK LSAgICAgICAgICAgICAgICAgICAqIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGNvbm5lY3RlZCB0byB0 aGUgTlBJIGhhdmUgdGhlCi0gICAgICAgICAgICAgICAgICAgKiBzYW1lIHN0YXR1cy4KLSAgICAg ICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgKiBUaGUgcHJvYmxlbSBpcyB0aGF0 IGFueSB3YWl0aW5nIGNvbm5lY3Rpb25zIGdldAotICAgICAgICAgICAgICAgICAgICogbG9zdCwg dGhlIGNsaWVudCBkb2Vzbid0IHJlYWxpc2UsIGFuZCBoYW5ncy4KLSAgICAgICAgICAgICAgICAg ICAqLwotICAgICAgICAgICAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICB4MjVfc3RhdGUgPSBYMjVfQ0xPU0VEOyAgICAgLyogcmllaG06IGRlYWQgY29kZT8g Ki8KLSAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogSUJNWDI1ICovCi0gICAgICAgICAgeCA9IGNs b3NlKHR0eWZkKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAg ICAgfQotICAgIHR0eWZkID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hcmsgaXQg YXMgY2xvc2VkLiAqLwotICAgIHdhc2Nsb3NlZCA9IDE7Ci0jaWZkZWYgT1MyCi0gICAgUmVsZWFz ZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBUTkNPREUKLSNpZmRlZiBD S19GT1JXQVJEX1gKLSAgICBmd2R4X2Nsb3NlX2FsbCgpOyAgICAgICAgICAgICAgICAgICAvKiBT aHV0IGRvd24gYW55IEZvcndhcmQgWCBzb2NrZXRzICovCi0jZW5kaWYgLyogQ0tfRk9SV0FSRF9Y ICovCi0gICAgdG5fcmVzZXQoKTsgICAgICAgICAgICAgICAgICAgLyogVGhlIFJlc2V0IFRlbG5l dCBPcHRpb24gdGFibGUuICAqLwotICAgIGRlYnVnKEYxMDAsIm5ldGNsb3NlIHNldHRpbmcgdG5f aW5pdCA9IDAiLCIiLDApOwotICAgIHRuX2luaXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIFJlbWVtYmVyIGFib3V0IHRlbG5ldCBwcm90b2NvbC4uLiAqLwotICAgIHNzdGVsbmV0ID0g MDsgICAgICAgICAgICAgICAgICAgICAgIC8qIENsaWVudC1zaWRlIFRlbG5ldCAqLwotI2VuZGlm IC8qIFROQ09ERSAqLwotICAgICppcGFkZHIgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgIC8q IFplcm8gdGhlIElQIGFkZHJlc3Mgc3RyaW5nICovCi0gICAgdGNwX2luY29taW5nID0gMDsgICAg ICAgICAgICAgICAgICAgLyogTm8gbG9uZ2VyIGluY29taW5nICovCi0gICAgLyogRG9uJ3QgcmVz ZXQgdHRucHJvdG8gc28gdGhhdCB3ZSBjYW4gcmVtZW1iZXIgd2hpY2ggcHJvdG9jb2wgaXMgaW4g dXNlICovCi0KLSNpZmRlZiBUQ1BJUExJQgotLyoKLSAgRW1wdHkgdGhlIGludGVybmFsIGJ1ZmZl cnMgc28gdGhleSB3b24ndCBiZSB1c2VkIGFzIGludmFsaWQgaW5wdXQgb24KLSAgdGhlIG5leHQg Y29ubmVjdCBhdHRlbXB0IChybG9naW4pLgotKi8KLSAgICB0dGlicCA9IDA7Ci0gICAgdHRpYm4g PSAwOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAvKiBJ ZiB3ZSBhcmUgYXV0b21hdGljYWxseSBkZXN0cm95aW5nIEtlcmJlcm9zIGNyZWRlbnRpYWxzIG9u IENsb3NlICovCi0gICAgLyogZG8gaXQgbm93LiAqLwotI2lmZGVmIEtSQjQKLSAgICBpZiAoa3Ji NF9hdXRvZGVsID09IEtSQl9ERUxfQ0wpIHsKLSAgICAgICAgZXh0ZXJuIHN0cnVjdCBrcmJfb3Bf ZGF0YSBrcmJfb3A7Ci0gICAgICAgIGtyYl9vcC52ZXJzaW9uID0gNDsKLSAgICAgICAga3JiX29w LmNhY2hlID0gTlVMTDsKLSAgICAgICAgY2tfa3JiNF9kZXN0cm95KCZrcmJfb3ApOwotICAgIH0K LSNlbmRpZiAvKiBLUkI0ICovCi0jaWZkZWYgS1JCNQotICAgIGlmIChrcmI1X2F1dG9kZWwgPT0g S1JCX0RFTF9DTCkgewotICAgICAgICBleHRlcm4gc3RydWN0IGtyYl9vcF9kYXRhIGtyYl9vcDsK LSAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2RfY2M7Ci0gICAgICAgIGtyYl9vcC52ZXJzaW9u ID0gNTsKLSAgICAgICAga3JiX29wLmNhY2hlID0ga3JiNV9kX2NjOwotICAgICAgICBja19rcmI1 X2Rlc3Ryb3koJmtyYl9vcCk7Ci0gICAgfQotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBD S19LRVJCRVJPUyAqLwotICAgIGNsb3NlX2luX3Byb2dyZXNzID0gMDsgICAgICAgICAgICAgIC8q IFJlbWVtYmVyIHdlIGFyZSBkb25lLiAqLwotICAgIHJldHVybih4KTsKLX0KLQotI2lmZGVmIE9T MgotaW50Ci1vczJzb2NrZXRlcnJvciggaW50IHNfZXJybm8gKSB7Ci0jaWZkZWYgT1MyT05MWQot ICAgIGlmIChzX2Vycm5vID4gMCAmJiBzX2Vycm5vIDw9IFNPQ0JBU0VFUlIpIHsKLSAgICAgICAg LyogaW4gT1MvMiwgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhyZWFkaW5nIGluIHRoYXQKLSAg ICAgICAgICogdGhlIHZhbHVlIG9mIGVycm5vIGlzIG5vdCB0aHJlYWQgc2FmZS4gIEl0IGNhbiBi ZQotICAgICAgICAgKiBzZXQgdG8gYSB2YWx1ZSBmcm9tIGEgcHJldmlvdXMgbGlicmFyeSBjYWxs IGFuZCBpZgotICAgICAgICAgKiBpdCB3YXMgbm90IGNsZWFyZWQgaXQgd2lsbCBhcHBlYXIgaGVy ZS4gIE9ubHkgdHJlYXQKLSAgICAgICAgICogdmFsaWQgc29ja2V0IGVycm9yIGNvZGVzIGFzIGVy cm9ycyBpbiB0aGlzIGZ1bmN0aW9uLgotICAgICAgICAgKi8KLSAgICAgICAgZGVidWcoRjEwMCwi b3Myc29ja2V0ZXJyb3IgZXJybm8uaCIsIiIsMCk7Ci0gICAgICAgIHNvY2tldF9lcnJubyA9IDA7 Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyT05MWSAqLwotCi0gICAg c3dpdGNoIChzX2Vycm5vKSB7Ci0gICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTk8gRVJST1IgKi8KLSAgICAgICAgZGVidWcoRjEwMCwib3Myc29ja2V0ZXJyb3IgTk9F UlJPUiIsIiIsMCk7Ci0gICAgICAgIHJldHVybigwKTsKLSNpZmRlZiBOVAotICAgICAgY2FzZSBX U0FFQ09OTlJFU0VUOgotI2Vsc2UgLyogTlQgKi8KLSAgICAgIGNhc2UgU09DRUNPTk5SRVNFVDoK LSAgICAgIGNhc2UgU09DRUNPTk5SRVNFVCAtIFNPQ0JBU0VFUlI6Ci0jZW5kaWYgLyogTlQgKi8K LSAgICAgICAgZGVidWcoRjEwMCwib3Myc29ja2V0ZXJyb3IgRUNPTlJFU0VUIiwiIiwwKTsKLSAg ICAgICAgdG5fZGVidWcoIkVDT05SRVNFVCIpOwotICAgICAgICBuZXRjbG9zKCk7ICAgICAgICAg ICAgICAvKiAqKiogKioqICovCi0gICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgIC8qIENv bm5lY3Rpb24gaXMgYnJva2VuLiAqLwotI2lmZGVmIE5UCi0gICAgICBjYXNlIFdTQUVDT05OQUJP UlRFRDoKLSNlbHNlIC8qIE5UICovCi0gICAgICBjYXNlIFNPQ0VDT05OQUJPUlRFRDoKLSAgICAg IGNhc2UgU09DRUNPTk5BQk9SVEVEIC0gU09DQkFTRUVSUjoKLSNlbmRpZiAvKiBOVCAqLwotICAg ICAgICBkZWJ1ZyhGMTAwLCJvczJzb2NrZXRlcnJvciBFQ09OTkFCT1JURUQiLCIiLDApOwotICAg ICAgICB0bl9kZWJ1ZygiRUNPTk5BQk9SVEVEIik7Ci0gICAgICAgIG5ldGNsb3MoKTsgICAgICAg ICAgICAgIC8qICoqKiAqKiogKi8KLSAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgLyog Q29ubmVjdGlvbiBpcyBicm9rZW4uICovCi0jaWZkZWYgTlQKLSAgICAgIGNhc2UgV1NBRU5FVFJF U0VUOgotI2Vsc2UgLyogTlQgKi8KLSAgICAgIGNhc2UgU09DRU5FVFJFU0VUOgotICAgICAgY2Fz ZSBTT0NFTkVUUkVTRVQgLSBTT0NCQVNFRVJSOgotI2VuZGlmIC8qIE5UICovCi0gICAgICAgIGRl YnVnKEYxMDAsIm9zMnNvY2tldGVycm9yIEVORVRSRVNFVCIsIiIsMCk7Ci0gICAgICAgIHRuX2Rl YnVnKCJFTkVUUkVTRVQiKTsKLSAgICAgICAgbmV0Y2xvcygpOyAgICAgICAgICAgICAgLyogKioq ICoqKiAqLwotICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIGlz IGJyb2tlbi4gKi8KLSNpZmRlZiBOVAotICAgICAgY2FzZSBXU0FFTk9UQ09OTjoKLSNlbHNlIC8q IE5UICovCi0gICAgICBjYXNlIFNPQ0VOT1RDT05OOgotICAgICAgY2FzZSBTT0NFTk9UQ09OTiAt IFNPQ0JBU0VFUlI6Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgZGVidWcoRjEwMCwib3Myc29j a2V0ZXJyb3IgRU5PVENPTk4iLCIiLDApOwotICAgICAgICB0bl9kZWJ1ZygiRU5PVENPTk4iKTsK LSAgICAgICAgbmV0Y2xvcygpOyAgICAgICAgICAgICAgICAgICAgICAvKiAqKiogKioqICovCi0g ICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdGlvbiBpcyBi cm9rZW4uICovCi0jaWZkZWYgTlQKLSAgICAgIGNhc2UgV1NBRVNIVVRET1dOOgotICAgICAgICBk ZWJ1ZyhGMTAwLCJvczJzb2NrZXRlcnJvciBFU0hVVERPV04iLCIiLDApOwotICAgICAgICB0bl9k ZWJ1ZygiRVNIVVRET1dOIik7Ci0gICAgICAgIG5ldGNsb3MoKTsgICAgICAgICAgICAgICAgICAg ICAgLyogKioqICoqKiAqLwotICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAg IC8qIENvbm5lY3Rpb24gaXMgYnJva2VuLiAqLwotI2VuZGlmIC8qIE5UICovCi0jaWZkZWYgTlQK LSAgICAgIGNhc2UgV1NBRVdPVUxEQkxPQ0s6Ci0jZWxzZQotICAgICAgY2FzZSBTT0NFV09VTERC TE9DSzoKLSAgICAgIGNhc2UgU09DRVdPVUxEQkxPQ0sgLSBTT0NCQVNFRVJSOgotI2VuZGlmIC8q IE5UICovCi0gICAgICAgIGRlYnVnKEYxMDAsIm9zMnNvY2tldGVycm9yIEVXT1VMREJMT0NLIiwi IiwwKTsKLSAgICAgICAgcmV0dXJuKDApOwotI2lmZGVmIE5UCi0gICAgICBjYXNlIEVSUk9SX0lP X0lOQ09NUExFVEU6Ci0gICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6Ci0gICAgICBjYXNlIEVS Uk9SX09QRVJBVElPTl9BQk9SVEVEOgotICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTlQg Ki8KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotICAgIHJldHVy bigwKTsKLX0KLSNlbmRpZiAvKiBPUzIgKi8KLQotLyogIE4gRSBUIFQgQyBIIEsgIC0tICBDaGVj ayBpZiBuZXR3b3JrIHVwLCBhbmQgaG93IG1hbnkgYnl0ZXMgY2FuIGJlIHJlYWQgKi8KLS8qCi0g IFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHdhaXRpbmcsIG9yIC0xIGlmIGNvbm5lY3Rpb24gaGFz IGJlZW4gZHJvcHBlZC4KLSovCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ2hlY2sgaG93IG1hbnkgYnl0ZXMgYXJlIHJlYWR5ICovCi1uZXR0Y2hrKCkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlYWRpbmcgZnJvbSBuZXR3b3JrICovCi0j aWZkZWYgVENQSVBMSUIKLSAgICBsb25nIGNvdW50ID0gMDsKLSAgICBpbnQgeCA9IDAsIHo7Ci0g ICAgbG9uZyB5OwotICAgIGNoYXIgYzsKLSAgICBpbnQgcmM7Ci0jaWZkZWYgTlQKLSAgICBleHRl cm4gaW50IGlvbm9ibG9jazsgICAgICAgICAgICAgICAvKiBGb3IgT3ZlcmxhcHBlZCBJL08gKi8K LSNlbmRpZiAvKiBOVCAqLwotCi0gICAgZGVidWcoRjEwMSwibmV0dGNoayBlbnRyeSB0dGlibiIs IiIsdHRpYm4pOwotICAgIGRlYnVnKEYxMDEsIm5ldHRjaGsgZW50cnkgdHRpYnAiLCIiLHR0aWJw KTsKLQotI2lmZGVmIE5FVExFQlVGCi0gICAgewotICAgICAgICBpbnQgbiA9IDA7Ci0gICAgICAg IGlmICh0dHB1c2ggPj0gMCkKLSAgICAgICAgICBuKys7Ci0gICAgICAgIG4gKz0gbGVfaW5idWYo KTsKLSAgICAgICAgaWYgKG4gPiAwKQotICAgICAgICAgIHJldHVybihuKTsKLSAgICB9Ci0jZW5k aWYgLyogTkVUTEVCVUYgKi8KLQotI2lmbmRlZiBPUzIKLSNpZm5kZWYgQkVCT1gKLSAgICBzb2Nr ZXRfZXJybm8gPSAwOyAvKiBUaGlzIGlzIGEgZnVuY3Rpb24gY2FsbCBpbiBOVCwgYW5kIEJlT1Mg Ki8KLSNlbmRpZiAvKiBCRUJPWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKHR0eWZk ID09IC0xKSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsIm5ldHRjaGsgc29ja2V0IGlzIGNsb3NlZCIs IiIsMCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotLyoKLSAgTm90ZTogdGhpcyBzb2Nr ZXRfaW9jdGwoKSBjYWxsIGRvZXMgTk9UIHJldHVybiBhbiBlcnJvciBpZiB0aGUKLSAgY29ubmVj dGlvbiBoYXMgYmVlbiBicm9rZW4uICAoQXQgbGVhc3Qgbm90IGluIE11bHRpTmV0LikKLSovCi0j aWZkZWYgQ09NTUVOVAotLyogIEFub3RoZXIgdHJpY2sgdGhhdCBjYW4gYmUgdHJpZWQgaGVyZSBp cyBzb21ldGhpbmcgbGlrZSB0aGlzOiAqLwotCi0gICAgaWYgKHR0bmV0ID09IE5FVF9UQ1BCKSB7 Ci0gICAgICAgIGNoYXIgZHVtbXk7Ci0gICAgICAgIHggPSByZWFkKHR0eWZkLCZkdW1teSwwKTsg ICAgICAgLyogVHJ5IHRvIHJlYWQgbm90aGluZyAqLwotICAgICAgICBpZiAoeCA8IDApIHsgICAg ICAgICAgICAgICAgICAgIC8qICJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiICovCi0gICAgICAg ICAgICBwZXJyb3IoIlRDUC9JUCIpOyAgICAgICAgICAgLyogb3Igc29tZXN1Y2guLi4gKi8KLSAg ICAgICAgICAgIHR0Y2xvcygwKTsgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBvdXIgZW5kIHRv by4gKi8KLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYg LyogQ09NTUVOVCAqLwotCi0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoc3NsX2FjdGl2ZV9mbGFn KSB7Ci0jaWZuZGVmIElLU0RPTkxZCi0jaWZkZWYgT1MyCi0gICAgICAgIGlmICggSXNDb25uZWN0 TW9kZSgpICkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0dGNoayAoc3NsX2FjdGl2ZV9m bGFnKSByZXR1cm5zIiwiIixjb3VudCk7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAg IH0KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBJS1NET05MWSAqLwotICAgICAgICBjb3Vu dCA9IFNTTF9wZW5kaW5nKHNzbF9jb24pOwotICAgICAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTExLCJuZXR0Y2hrIiwiU1NMX3BlbmRpbmcgZXJyb3IiLGNvdW50KTsK LSAgICAgICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKCBjb3VudCA+IDAgKQotICAgICAgICAgICAgcmV0dXJuKGNvdW50KTsg ICAgICAgICAgICAgICAgICAvKiBEb24ndCBwZXJmb3JtIGEgcmVhZCAqLwotICAgIH0gZWxzZSBp ZiAodGxzX2FjdGl2ZV9mbGFnKSB7Ci0jaWZuZGVmIElLU0RPTkxZCi0jaWZkZWYgT1MyCi0gICAg ICAgIGlmICggSXNDb25uZWN0TW9kZSgpICkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0 dGNoayAodGxzX2FjdGl2ZV9mbGFnKSByZXR1cm5zIiwiIixjb3VudCk7Ci0gICAgICAgICAgICBy ZXR1cm4oMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBJS1NET05M WSAqLwotICAgICAgICBjb3VudCA9IFNTTF9wZW5kaW5nKHRsc19jb24pOwotICAgICAgICBpZiAo Y291bnQgPCAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXR0Y2hrIiwiVExTX3BlbmRp bmcgZXJyb3IiLGNvdW50KTsKLSAgICAgICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgICAgIHJl dHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCBjb3VudCA+IDAgKQotICAgICAgICAg ICAgcmV0dXJuKGNvdW50KTsgICAgICAgICAgICAgICAgICAvKiBEb24ndCBwZXJmb3JtIGEgcmVh ZCAqLwotICAgIH0gZWxzZQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgaWYgKHNvY2tldF9p b2N0bCh0dHlmZCxGSU9OUkVBRCwKLSNpZmRlZiBDT01NRU5UCi0gICAgLyogTm93IHdlJ3ZlIGNo YW5nZWQgdGhlIGlvY3RsKC4uLC4uLHgpIHByb3RvdHlwZSBmb3IgREVDQyB0byAodm9pZCAqKSAq LwotI2lmZGVmIF9fREVDQwotICAgIC8qIE5PVEU6ICImY291bnQiIG1pZ2h0IG5lZWQgdG8gYmUg IihjaGFyICopJmNvdW50IiBpbiBzb21lIHNldHRpbmdzLiAqLwotICAgICAgICAgICAgICAgICAg ICAgLyogQ2FzdCBuZWVkZWQgZm9yIERFQ0MgNC4xICYgbGF0ZXI/ICovCi0gICAgICAgICAgICAg ICAgICAgICAvKiBNYXliZSwgYnV0IF9fREVDQ19WRVIgb25seSBleGlzdHMgaW4gNS4wIGFuZCBs YXRlciAqLwotICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikKLSNlbmRpZiAvKiBfX0RFQ0Mg Ki8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgICAgICAmY291bnQKLSAg ICAgICAgICAgICAgICAgICAgICkgPCAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsIm5ldHRjaGsg c29ja2V0X2lvY3RsIGVycm9yIiwiIixzb2NrZXRfZXJybm8pOwotICAgICAgICAvKiBJZiB0aGUg Y29ubmVjdGlvbiBpcyBnb25lLCB0aGUgY29ubmVjdGlvbiBpcyBnb25lLiAqLwotICAgICAgICBu ZXRjbG9zKCk7Ci0jaWZkZWYgTlRfVENQX09WRVJMQVBQRUQKLSAgICAgICAgLyogSXMgdGhlcmUg YW55dGhpbmcgaW4gdGhlIG92ZXJsYXBwZWQgSS9PIGJ1ZmZlcnM/ICovCi0gICAgICAgIGNvdW50 ICs9IE92ZXJsYXBwZWREYXRhV2FpdGluZygpOwotI2VuZGlmIC8qIE5UX1RDUF9PVkVSTEFQUEVE ICovCi0gICAgICAgIGNvdW50ICs9IHR0aWJuOwotICAgICAgICByZXR1cm4oY291bnQ+MD9jb3Vu dDotMSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsIm5ldHRjaGsgY291bnQiLCIiLGNvdW50KTsK LSNpZmRlZiBOVF9UQ1BfT1ZFUkxBUFBFRAotICAgIC8qIElzIHRoZXJlIGFueXRoaW5nIGluIHRo ZSBvdmVybGFwcGVkIEkvTyBidWZmZXJzPyAqLwotICAgIGNvdW50ICs9IE92ZXJsYXBwZWREYXRh V2FpdGluZygpOwotICAgIGRlYnVnKEYxMDEsIm5ldHRjaGsgY291bnQgdy9vdmVybGFwcGVkIiwi Iixjb3VudCk7Ci0jZW5kaWYgLyogTlRfVENQX09WRVJMQVBQRUQgKi8KLQotI2lmZGVmIE9TMgot I2lmbmRlZiBJS1NET05MWQotICAgIGlmICggSXNDb25uZWN0TW9kZSgpICkgewotICAgICAgICBk ZWJ1ZyhGMTAxLCJuZXR0Y2hrIChGSU9OUkVBRCkgcmV0dXJucyIsIiIsY291bnQpOwotICAgICAg ICByZXR1cm4oY291bnQpOwotICAgIH0KLSNlbmRpZiAvKiBJS1NET05MWSAqLwotI2VuZGlmIC8q IE9TMiAqLwotCi0vKiBGb3IgdGhlIHNha2Ugb2YgZWZmaWNpZW5jeSwgaWYgdGhlcmUgaXMgc3Rp bGwgZGF0YSBpbiB0aGUgdHRpYnVmICovCi0vKiBkbyBub3QgZ28gdG8gdGhlIGJvdGhlciBvZiBj aGVja2luZyB0byBzZWUgb2YgdGhlIGNvbm5lY3Rpb24gaXMgICovCi0vKiBzdGlsbCB2YWxpZC4g IFRoZSBoYW5kbGUgaXMgc3RpbGwgZ29vZCwgc28ganVzdCByZXR1cm4gdGhlIGNvdW50ICovCi0v KiBvZiB0aGUgYnl0ZXMgdGhhdCB3ZSBhbHJlYWR5IGhhdmUgbGVmdCB0byBwcm9jZXNzLiAgICAg ICAgICAgICAgICovCi0jaWZkZWYgT1MyCi0gICAgaWYgKCBjb3VudCA+IDAgfHwgdHRpYm4gPiAw ICkgewotICAgICAgICBjb3VudCs9dHRpYm47Ci0gICAgICAgIGRlYnVnKEYxMDEsIm5ldHRjaGsg KGNvdW50K3R0aWJuID4gMCkgcmV0dXJucyIsIiIsY291bnQpOwotICAgICAgICByZXR1cm4oY291 bnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlcXVlc3RUQ1BJUE11dGV4KFNFTV9JTkRFRklO SVRFX1dBSVQpOwotICAgICAgICBpZiAoIHR0aWJuID09IDAgKQotICAgICAgICAgICAgdHRpYnAg PSAwOyAgICAgIC8qIHJlc2V0IGZvciBuZXh0IHJlYWQgKi8KLSAgICB9Ci0jZWxzZSAvKiBPUzIg Ki8KLSAgICBpZiAoIGNvdW50ID4gMCB8fCB0dGlibiA+IDAgKSB7Ci0gICAgICAgIGRlYnVnKEYx MDEsIm5ldHRjaGsgcmV0dXJucyIsIiIsY291bnQrdHRpYm4pOwotICAgICAgICByZXR1cm4oY291 bnQrdHRpYm4pOwotICAgIH0KLSAgICB0dGlibiA9IHR0aWJwID0gMDsKLSNlbmRpZiAvKiBPUzIg Ki8KLQotLyoKLSAgVGhlIGZvbGxvd2luZyBjb2RlIHdvcmtzIHdlbGwgaW4gbW9zdCBzZXR0aW5n cywgYnV0IG1lc3NlcyB0aGluZ3MgdXAgaW4KLSAgb3RoZXJzLCBpbmNsdWRpbmcgQ01VL1RlayBU Q1AvSVAgYW5kIFVDWCAyLjAsIHdoZXJlIGl0IHNvbWVob3cgbWFuYWdlcyB0bwotICBtYWtlIGl0 IGltcG9zc2libGUgdG8gZXZlciBtYWtlIGEgbmV3IGNvbm5lY3Rpb24gdG8gdGhlIHNhbWUgaG9z dCBhZ2FpbiB3aXRoCi0gIENPTk5FQ1QsIG9uY2UgaXQgaGFzIGJlZW4gbG9nZ2VkIG91dCBmcm9t IHRoZSBmaXJzdCB0aW1lLiAgTm90IGV2ZW4gaWYgeW91Ci0gIEhBTkdVUCBmaXJzdCwgb3IgU0VU IEhPU1Q8Q1I+LCBvciBTRVQgTElORTxDUj4uICBSZXBvcnRlZGx5LCBob3dldmVyLCBpdAotICBk b2VzIHdvcmsgT0sgaW4gbGF0ZXIgcmVsZWFzZXMgb2YgVUNYLiAgQnV0IHRoZXJlIGlzIG5vIHdh eSB3ZSBjYW4KLSAgYWNjb21tb2RhdGUgYm90aCBvbGQgYW5kIG5ldyAtLSB3ZSBtaWdodCBoYXZl IHN0YXRpYyBsaW5raW5nIG9yIGR5bmFtaWMKLSAgbGlua2luZywgZXRjIGV0Yy4gIElmIHdlIGhh dmUgc3RhdGljLCBJIG9ubHkgaGF2ZSBhY2Nlc3MgdG8gMi4wLCB3aGVyZSB0aGlzCi0gIGRvZXNu J3Qgd29yaywgZXRjIGV0YyBibGFoIGJsYWguCi0KLSAgSW4gdGhlIGZvbGxvd2luZyBsaW5lcywg d2UgZGVmaW5lIGEgc3ltYm9sIE5PQ09VTlQgZm9yIGJ1aWxkcyB3aGVyZSB3ZSB3YW50Ci0gIHRv IG9taXQgdGhpcyBjb2RlLiAgQnkgZGVmYXVsdCwgaXQgaXMgb21pdHRlZCBmb3IgQ01VL1Rlay4g IFlvdSBjYW4gZm9yY2UKLSAgb21pc3Npb24gb2YgaXQgZm9yIG90aGVyIGNvbWJpbmF0aW9ucyBi eSBkZWZpbmluZyBOT0NPVU5UIGluIENGTEFHUy4gIFlvdQotICBjYW4gZm9yY2UgaW5jbHVzaW9u IG9mIHRoaXMgY29kZSwgZXZlbiBmb3IgQ01VL1RlaywgYnkgaW5jbHVkaW5nIE5PTk9DT1VOVAot ICBpbiBDRkxBR1MuCi0qLwotI2lmZGVmIE5PTk9DT1VOVAotI2lmZGVmIE5PQ09VTlQKLSN1bmRl ZiBOT0NPVU5UCi0jZW5kaWYgLyogTk9DT1VOVCAqLwotI2Vsc2UKLSNpZm5kZWYgTk9DT1VOVAot I2lmZGVmIENNVV9UQ1BJUAotI2RlZmluZSBOT0NPVU5UCi0jZW5kaWYgLyogQ01VX1RDUElQICov Ci0jZW5kaWYgLyogTk9DT1VOVCAqLwotI2VuZGlmIC8qIE5PTk9DT1VOVCAqLwotCi0KLSAgICAv KiBGcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCB3ZSBoYXZlIGEgcG9zc2libGUgcmFjZSBjb25kaXRp b24gaW4gSzk1Ci0gICAgICogZHVlIHRvIGl0cyB1c2Ugb2YgbXVsdGlwbGUgdGhyZWFkcy4gIFRo ZXJlZm9yZSwgd2UgbXVzdCBlbnN1cmUKLSAgICAgKiB0aGF0IG9ubHkgb25lIHRocmVhZCBhdHRl bXB0IHRvIHJlYWQvd3JpdGUgZnJvbSB0aGUgc29ja2V0IGF0IGEKLSAgICAgKiB0aW1lLiAgT3Ro ZXJ3aXNlLCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBidWZmZXIgdG8gYmUgb3ZlcndyaXR0ZW4uCi0g ICAgICovCi0gICAgLyogd2Uga25vdyBub3cgdGhhdCBjb3VudCA+PSAwIGFuZCB0aGF0IHR0aWJu ID09IDAgKi8KLQotICAgIGlmIChjb3VudCA9PSAwCi0jaWZkZWYgUkxPR0NPREUKLSNpZmRlZiBD S19LRVJCRVJPUwotICAgICAgICAmJiB0dG5wcm90byAhPSBOUF9FSzRMT0dJTiAmJiB0dG5wcm90 byAhPSBOUF9FSzVMT0dJTgotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0jZW5kaWYgLyogUkxP R0NPREUgKi8KLSAgICAgICAgKSB7Ci0gICAgICAgIGludCBzX2Vycm5vID0gMDsKLSNpZm5kZWYg Tk9DT1VOVAotLyoKLSAgSGVyZSB3ZSBuZWVkIHRvIHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2Vl biBhIDAgY291bnQgb24gYW4gYWN0aXZlCi0gIGNvbm5lY3Rpb24sIGFuZCBhIDAgY291bnQgYmVj YXVzZSB0aGUgcmVtb3RlIGVuZCBvZiB0aGUgc29ja2V0IGJyb2tlIHRoZQotICBjb25uZWN0aW9u LiAgVGhlcmUgaXMgbm8gbWVjaGFuaXNtIGluIFRHViBNdWx0aU5ldCAob3IgV0lOL1RDUD8pIHRv IHF1ZXJ5Ci0gIHRoZSBzdGF0dXMgb2YgdGhlIGNvbm5lY3Rpb24sIHNvIHdlIGhhdmUgdG8gZG8g YSByZWFkLiAgLTEgbWVhbnMgdGhlcmUgd2FzCi0gIG5vIGRhdGEgYXZhaWxhYmxlIChzb2NrZXRf ZXJybm8gPT0gRVdPVUxEQkxPQ0spLCAwIG1lYW5zIHRoZSBjb25uZWN0aW9uIGlzCi0gIGRvd24u ICBCdXQgaWYsIGJ5IGNoYW5jZSwgd2UgYWN0dWFsbHkgZ2V0IGEgY2hhcmFjdGVyLCB3ZSBoYXZl IHRvIHB1dCBpdAotICB3aGVyZSBpdCB3b24ndCBiZSBsb3N0LgotKi8KLSNpZm5kZWYgTk9OX0JM T0NLX0lPCi0jaWZkZWYgT1MyCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIFJlcXVlc3RTU0xNdXRl eChTRU1fSU5ERUZJTklURV9XQUlUKTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRpZiAvKiBP UzIgKi8KLSAgICAgICAgeSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9u IG5vbmJsb2NraW5nIHJlYWRzICovCi0gICAgICAgIHogPSBzb2NrZXRfaW9jdGwodHR5ZmQsRklP TkJJTywmeSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsIm5ldHRjaGsgRklPTkJJTyIsIm9uIix6KTsK LSNpZmRlZiBPUzIKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgUmVsZWFzZVNTTE11dGV4KCk7Ci0j ZW5kaWYgLyogQ0tfU1NMICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9OX0JMT0NL X0lPICovCi0jaWZkZWYgTlRfVENQX09WRVJMQVBQRUQKLSAgICAgICAgaW9ub2Jsb2NrID0gMTsg ICAgICAgICAgICAgICAgICAvKiBGb3IgT3ZlcmxhcHBlZCBJL08gKi8KLSNlbmRpZiAvKiBOVF9U Q1BfT1ZFUkxBUFBFRCAqLwotI2lmZGVmIENLX1NTTAotICAgICAgICBpZiAoIHNzbF9hY3RpdmVf ZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcgKSB7Ci0jaWZkZWYgT1MyCi0JICBzc2xfcmVhZDoKLSAg ICAgICAgICAgIHggPSBTU0xfcmVhZCggc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgJnR0aWJ1Zlt0dGlicCt0dGlibl0sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgIFRUSUJVRkwtdHRpYnAtdHRpYm4gKTsKLSAgICAgICAgICAgIHN3 aXRjaCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLHgpKSB7 Ci0gICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgotICAgICAgICAgICAgICAgIGRlYnVn KEYxMTEsIm5ldHRjaGsgU1NMX0VSUk9SX05PTkUiLCJ4Iix4KTsKLSAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0gICAgICAgICAg ICAgICAgZGVidWcoRjEwMCwibmV0dGNoayBTU0xfRVJST1JfV0FOVF9XUklURSIsIiIsMCk7Ci0g ICAgICAgICAgICAgICAgeCA9IC0xOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAs Im5ldHRjaGsgU1NMX0VSUk9SX1dBTlRfUkVBRCIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgeCA9 IC0xOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTU0xfRVJST1Jf U1lTQ0FMTDoKLSAgICAgICAgICAgICAgICBpZiAoIHggPT0gMCApIHsgLyogRU9GICovCi0gICAg ICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsK LSAgICAgICAgICAgICAgICAgICAgZ290byBuZXR0Y2hrX3JldHVybjsKLSAgICAgICAgICAgICAg fSBlbHNlIHsKLSNpZmRlZiBOVAotICAgICAgICAgICAgICAgICAgaW50IGdsZSA9IEdldExhc3RF cnJvcigpOwotI2VuZGlmIC8qIE5UICovCi0jaWZuZGVmIE5PTl9CTE9DS19JTwotI2lmZGVmIE9T MgotI2lmZGVmIENLX1NTTAotCQkgIFJlcXVlc3RTU0xNdXRleChTRU1fSU5ERUZJTklURV9XQUlU KTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQkJICB5ID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIG5vbmJsb2NraW5nIHJlYWRzICovCi0J CSAgeiA9IHNvY2tldF9pb2N0bCh0dHlmZCxGSU9OQklPLCZ5KTsKLQkJICBkZWJ1ZyhGMTExLCJu ZXR0Y2hrIEZJT05CSU8iLCJvZmYiLHopOwotI2lmZGVmIE9TMgotI2lmZGVmIENLX1NTTAotCQkg IFJlbGVhc2VTU0xNdXRleCgpOwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIE5PTl9CTE9DS19JTyAqLwotI2lmZGVmIE5UX1RDUF9PVkVSTEFQUEVECi0J CSAgaW9ub2Jsb2NrID0gMDsgICAgICAgICAgICAgICAgICAvKiBGb3IgT3ZlcmxhcHBlZCBJL08g Ki8KLSNlbmRpZiAvKiBOVF9UQ1BfT1ZFUkxBUFBFRCAqLwotI2lmZGVmIE5UCi0gICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJuZXR0Y2hrIFNTTF9FUlJPUl9TWVNDQUxMIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAiR2V0TGFzdEVycm9yKCkiLGdsZSk7Ci0gICAgICAgICAgICAgICAg ICByYyA9IG9zMnNvY2tldGVycm9yKGdsZSk7Ci0gICAgICAgICAgICAgICAgICBpZiAocmMgPT0g LTEpCi0gICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMjsKLSAgICAgICAgICAgICAgICAgIGVs c2UgaWYgKCByYyA9PSAtMiApCi0gICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKLQkJICBn b3RvIG5ldHRjaGtfcmV0dXJuOwotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUw OV9MT09LVVA6Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0dGNoayBTU0xfRVJST1Jf V0FOVF9YNTA5X0xPT0tVUCIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6Ci0gICAgICAgICAgICAgICAgaWYgKGJpb19lcnIhPU5V TEwpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxlbjsKLSAgICAgICAgICAgICAgICAgICAg ZXh0ZXJuIGNoYXIgc3NsX2VycltdOwotICAgICAgICAgICAgICAgICAgICBCSU9fcHJpbnRmKGJp b19lcnIsIm5ldHRjaGsoKSBTU0xfRVJST1JfU1NMXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg RVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKLSAgICAgICAgICAgICAgICAgICAgbGVuID0gQklP X3JlYWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7Ci0gICAgICAgICAgICAgICAgICAg IHNzbF9lcnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7 Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIm5ldHRjaGsgU1NMX0VSUk9SX1NTTCIs c3NsX2VyciwwKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKHNzbF9lcnIpOwotICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoc3NsX2RlYnVnX2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEw MCwibmV0dGNoayBTU0xfRVJST1JfU1NMIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgZmZs dXNoKHN0ZGVycik7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJuZXR0Y2hr KCkgU1NMX0VSUk9SX1NTTFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJv cnNfZnAoc3RkZXJyKTsKLSAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgICAg ICAgICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgICAgICAgICByYyA9IC0xOwotCQlnb3RvIG5l dHRjaGtfcmV0dXJuOwotI2Vsc2UKLSAgICAgICAgICAgICAgICB4ID0gLTE7Ci0JCWJyZWFrOwot I2VuZGlmCi0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46Ci0gICAgICAgICAg ICAgICAgZGVidWcoRjEwMCwibmV0dGNoayBTU0xfRVJST1JfWkVST19SRVRVUk4iLCIiLDApOwot ICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgICAgICAgICByYyA9IC0xOwotICAg ICAgICAgICAgICAgIGdvdG8gbmV0dGNoa19yZXR1cm47Ci0gICAgICAgICAgICBkZWZhdWx0Ogot ICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldHRjaGsgU1NMX0VSUk9SXz8/Pz8/IiwiIiww KTsKLSAgICAgICAgICAgICAgICBuZXRjbG9zKCk7Ci0gICAgICAgICAgICAgICAgcmMgPSAtMTsK LSAgICAgICAgICAgICAgICBnb3RvIG5ldHRjaGtfcmV0dXJuOwotICAgICAgICAgICAgfQotI2Vs c2UgLyogT1MyICovCi0JICAgIC8qIERvIG5vdCBibG9jayAqLwotCSAgICB4ID0gLTE7Ci0jZW5k aWYgLyogT1MyICovCi0gICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAg ICB7Ci0jaWZkZWYgT1MyCi0gICAgICAgIHggPSBzb2NrZXRfcmVhZCh0dHlmZCwmdHRpYnVmW3R0 aWJwK3R0aWJuXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUVElCVUZMLXR0aWJwLXR0aWJu KTsgIC8qIFJldHVybnMgLTEgaWYgbm8gZGF0YSAqLwotI2Vsc2UgLyogT1MyICovCi0gICAgICAg IHggPSBzb2NrZXRfcmVhZCh0dHlmZCwmYywxKTsgICAgLyogUmV0dXJucyAtMSBpZiBubyBkYXRh ICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIH0KLSAgICAgICAgc19lcnJubyA9IHNvY2tl dF9lcnJubzsgICAgICAgICAvKiBzb2NrZXRfZXJybm8gbWF5IGJlIGEgZnVuY3Rpb24gKi8KLSAg ICAgICAgZGVidWcoRjEwMSwibmV0dGNoayBzb2NrZXRfcmVhZCIsIiIseCk7Ci0KLSNpZm5kZWYg Tk9OX0JMT0NLX0lPCi0jaWZkZWYgT1MyCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIFJlcXVlc3RT U0xNdXRleChTRU1fSU5ERUZJTklURV9XQUlUKTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAgICAgeSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBU dXJuIG9mZiBub25ibG9ja2luZyByZWFkcyAqLwotICAgICAgICB6ID0gc29ja2V0X2lvY3RsKHR0 eWZkLEZJT05CSU8sJnkpOwotICAgICAgICBkZWJ1ZyhGMTExLCJuZXR0Y2hrIEZJT05CSU8iLCJv ZmYiLHopOwotI2lmZGVmIE9TMgotI2lmZGVmIENLX1NTTAotICAgICAgICBSZWxlYXNlU1NMTXV0 ZXgoKTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBO T05fQkxPQ0tfSU8gKi8KLSNpZmRlZiBOVF9UQ1BfT1ZFUkxBUFBFRAotICAgICAgICBpb25vYmxv Y2sgPSAwOyAgICAgICAgICAgICAgICAgIC8qIEZvciBPdmVybGFwcGVkIEkvTyAqLwotI2VuZGlm IC8qIE5UX1RDUF9PVkVSTEFQUEVEICovCi0KLSAgICAgICAgaWYgKHggPT0gLTEpIHsKLSAgICAg ICAgICAgIGRlYnVnKEYxMDEsIm5ldHRjaGsgc29ja2V0X3JlYWQgZXJybm8iLCIiLHNfZXJybm8p OwotI2lmZGVmIE9TMgotICAgICAgICAgICAgaWYgKG9zMnNvY2tldGVycm9yKHNfZXJybm8pIDwg MCkgewotICAgICAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgICAgICAgICAgICAgZ290byBuZXR0 Y2hrX3JldHVybjsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgfSBl bHNlIGlmICh4ID09IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldHRjaGsgY29ubmVj dGlvbiBjbG9zZWQiLCIiLDApOwotICAgICAgICAgICAgbmV0Y2xvcygpOyAgICAgICAgICAgICAg ICAgIC8qICoqKiAqKiogKi8KLSAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgICAgICAgICBnb3Rv IG5ldHRjaGtfcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICh4ID49IDEpIHsgICAgICAg ICAgICAgICAgICAgLyogT29wcywgYWN0dWFsbHkgZ290IGEgYnl0ZT8gKi8KLSNpZmRlZiBPUzIK LSAgICAgICAgICAgIC8qIEluIE9TLzIgd2UgcmVhZCBkaXJlY3RseSBpbnRvIHR0aWJ1ZltdICov Ci0gICAgICAgICAgICBja2hleGR1bXAoIm5ldHRjaGsgZ290IHJlYWwgZGF0YSIsJnR0aWJ1Zlt0 dGlicCt0dGlibl0seCk7Ci0gICAgICAgICAgICB0dGlibiArPSB4OwotI2Vsc2UgLyogT1MyICov Ci0jaWZkZWYgQ0tfU1NMCi0JICAgIGlmICggc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVf ZmxhZyApIHsKLQkJY2toZXhkdW1wKCJuZXR0Y2hrIGdvdCByZWFsIGRhdGEiLCZ0dGlidWZbdHRp YnArdHRpYm5dLHgpOwotCQl0dGlibiArPSB4OwotCSAgICB9IGVsc2UgCi0jZW5kaWYgLyogQ0tf U1NMICovCi0JICAgIHsKLQkJZGVidWcoRjEwMSwibmV0dGNoayBzb2NrZXRfcmVhZCBjaGFyIiwi IixjKTsKLQkJZGVidWcoRjEwMSwibmV0dGNoayB0dGlicCIsIiIsdHRpYnApOwotCQlkZWJ1ZyhG MTAxLCJuZXR0Y2hrIHR0aWJuIiwiIix0dGlibik7Ci0vKgotICBJbiB0aGUgY2FzZSBvZiBPdmVy bGFwcGVkIEkvTyB0aGUgY2hhcmFjdGVyIHdvdWxkIGhhdmUgY29tZSBmcm9tCi0gIHRoZSBiZWdp bm5pbmcgb2YgdGhlIGJ1ZmZlciwgc28gcHV0IGl0IGJhY2suCi0qLwotCQlpZiAodHRpYnAgPiAw KSB7Ci0JCSAgICB0dGlicC0tOwotCQkgICAgdHRpYnVmW3R0aWJwXSA9IGM7Ci0JCSAgICB0dGli bisrOwotCQl9IGVsc2UgewotCQkgICAgdHRpYnVmW3R0aWJwK3R0aWJuXSA9IGM7Ci0JCSAgICB0 dGlibisrOwotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgfQotI2Vsc2Ug LyogTk9DT1VOVCAqLwotICAgICAgICBpZiAodHRuZXQgPT0gTkVUX1RDUEIpIHsKLSAgICAgICAg ICAgIGNoYXIgZHVtbXk7Ci0gICAgICAgICAgICB4ID0gcmVhZCh0dHlmZCwmZHVtbXksMCk7ICAg LyogVHJ5IHRvIHJlYWQgbm90aGluZyAqLwotICAgICAgICAgICAgaWYgKHggPCAwKSB7ICAgICAg ICAgICAgICAgIC8qICJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiICovCi0gICAgICAgICAgICAg ICAgcGVycm9yKCJUQ1AvSVAiKTsgICAgICAgLyogb3Igc29tZXN1Y2guLi4gKi8KLSAgICAgICAg ICAgICAgICB0dGNsb3MoMCk7ICAgICAgICAgICAgICAvKiBDbG9zZSBvdXIgZW5kIHRvby4gKi8K LSAgICAgICAgICAgICAgICByYyA9IC0xOwotICAgICAgICAgICAgICAgIGdvdG8gbmV0dGNoa19y ZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0NPVU5UICovCi0g ICAgfQotI2lmZGVmIENLX0tFUkJFUk9TCi0jaWZkZWYgS1JCNAotI2lmZGVmIFJMT0dDT0RFCi0g ICAgaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOKQotICAgICAgY291bnQgKz0ga3JiNF9kZXNf YXZhaWwodHR5ZmQpOwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5kaWYgLyogS1JCNCAqLwot I2lmZGVmIEtSQjUKLSNpZmRlZiBSTE9HQ09ERQotICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzVM T0dJTikKLSAgICAgIGNvdW50ICs9IGtyYjVfZGVzX2F2YWlsKHR0eWZkKTsKLSNlbmRpZiAvKiBS TE9HQ09ERSAqLwotI2lmZGVmIEtSQjVfVTJVCi0gICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJV KQotICAgICAgY291bnQgKz0ga3JiNV91MnVfYXZhaWwodHR5ZmQpOwotI2VuZGlmIC8qIEtSQjVf VTJVICovCi0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0KLSAg ICBkZWJ1ZyhGMTAxLCJuZXR0Y2hrIHJldHVybnMiLCIiLGNvdW50K3R0aWJuKTsKLSAgICByYyA9 IGNvdW50ICsgdHRpYm47Ci0KLSAgbmV0dGNoa19yZXR1cm46Ci0jaWZkZWYgT1MyCi0gICAgUmVs ZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICByZXR1cm4ocmMpOwotCi0j ZWxzZSAvKiBOb3QgVENQSVBMSUIgKi8KLS8qCi0gIFVOSVgganVzdCB1c2VzIHR0Y2hrKCksIGlu IHdoaWNoIHRoZSBpb2N0bCgpIGNhbGxzIG9uIHRoZSBmaWxlIGRlc2NyaXB0b3IKLSAgc2VlbSB0 byB3b3JrIE9LLgotKi8KLSAgICByZXR1cm4odHRjaGsoKSk7Ci0jZW5kaWYgLyogVENQSVBMSUIg Ki8KLS8qCi0gIEJ1dCB3aGF0IGFib3V0IFguMjU/Ci0qLwotfQotCi0jaWZuZGVmIE9TMgotVk9J RAotbmV0dG91dChpKSBpbnQgaTsgeyAgICAgICAgICAgICAgICAgICAgIC8qIENhdGNoIHRoZSBh bGFybSBpbnRlcnJ1cHRzICovCi0gICAgZGVidWcoRjEwMCwibmV0dG91dCBjYXVnaHQgdGltZW91 dCIsIiIsMCk7Ci0gICAgdHRpbW9mZigpOwotICAgIGNrbG9uZ2ptcChuamJ1ZiwgLTEpOwotfQot I2VuZGlmIC8qICFPUzIgKi8KLQotI2lmZGVmIFRDUElQTElCCi0KLVZPSUQKLSNpZmRlZiBDS19B TlNJQwotZG9uZXRpbmModm9pZCAqIHRocmVhZGluZm8pCi0jZWxzZSAvKiBDS19BTlNJQyAqLwot ZG9uZXRpbmModGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLS8qIGRvbmV0aW5jICovIHsKLSNpZmRlZiBOVFNJRwotICAgIGV4dGVybiBpbnQgVGxz SW5kZXg7Ci0gICAgc2V0aW50KCk7Ci0gICAgaWYgKHRocmVhZGluZm8pIHsgICAgICAgICAgICAg ICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KLSAgICAgICAgVGxzU2V0VmFsdWUo VGxzSW5kZXgsdGhyZWFkaW5mbyk7Ci0gICAgfQotI2VuZGlmIC8qIE5UU0lHICovCi0jaWZkZWYg Q0tfTE9HSU4KLSNpZmRlZiBOVAotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAg ICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogSUtTRCAqLwotI2VuZGlmIC8qIE5UICovCi0jZW5k aWYgLyogQ0tfTE9HSU4gKi8KLSAgICB3aGlsZSAoMSkgewotICAgICAgICBpZiAodHRidWZyKCkg PCAwKSAgICAgICAgICAgICAgIC8qIEtlZXAgdHJ5aW5nIHRvIHJlZmlsbCBpdC4gKi8KLSAgICAg ICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaWxsIHdlIGdldCBhbiBlcnJv ci4gKi8KLSAgICAgICAgaWYgKHR0aWJuID4gMCkgICAgICAgICAgICAgICAgICAvKiBPciB3ZSBn ZXQgYSBjaGFyYWN0ZXIuICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotI2VuZGlmIC8q IFRDUElQTElCICovCi0KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotZmFpbG5ldGluYyh2b2lkICog dGhyZWFkaW5mbykKLSNlbHNlIC8qIENLX0FOU0lDICovCi1mYWlsbmV0aW5jKHRocmVhZGluZm8p IFZPSUQgKiB0aHJlYWRpbmZvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBmYWlsbmV0aW5j ICovIHsKLSAgICA7IC8qIE5vdGhpbmcgdG8gZG8gb24gYW4gZXJyb3IgKi8KLX0KLQotLyogTiBF IFQgWCBJIE4gLS0gSW5wdXQgYmxvY2sgb2YgY2hhcmFjdGVycyBmcm9tIG5ldHdvcmsgKi8KLQot aW50Ci1uZXR4aW4obixidWYpIGludCBuOyBDSEFSICogYnVmOyB7Ci0gICAgaW50IGxlbiwgaSwg ajsKLSNpZmRlZiBUQ1BJUExJQgotICAgIGludCByYzsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwot Ci0gICAgaWYgKHR0eWZkID09IC0xKSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsIm5ldHhpbiBzb2Nr ZXQgaXMgY2xvc2VkIiwiIiwwKTsKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0jaWZkZWYg Q0tfS0VSQkVST1MKLSNpZmRlZiBLUkI0Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBpZiAodHRucHJv dG8gPT0gTlBfRUs0TE9HSU4pIHsKLSAgICAgICAgaWYgKChsZW4gPSBrcmI0X2Rlc19yZWFkKHR0 eWZkLGJ1ZixuKSkgPCAwKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIGVsc2UKLSAg ICAgICAgICByZXR1cm4obGVuKTsKLSAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNlbmRp ZiAvKiBLUkI0ICovCi0jaWZkZWYgS1JCNQotI2lmZGVmIFJMT0dDT0RFCi0gICAgaWYgKHR0bnBy b3RvID09IE5QX0VLNUxPR0lOKSB7Ci0gICAgICAgIGlmICgobGVuID0ga3JiNV9kZXNfcmVhZCh0 dHlmZCwoY2hhciAqKWJ1ZixuLDApKSA8IDApCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAg ICAgZWxzZQotICAgICAgICAgIHJldHVybihsZW4pOwotICAgIH0KLSNlbmRpZiAvKiBSTE9HQ09E RSAqLwotI2lmZGVmIEtSQjVfVTJVCi0gICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJVKSB7Ci0g ICAgICAgIGlmICgobGVuID0ga3JiNV91MnVfcmVhZCh0dHlmZCwoY2hhciAqKWJ1ZixuKSkgPCAw KQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4o bGVuKTsKLSAgICB9Ci0jZW5kaWYgLyogS1JCNV9VMlUgKi8KLSNlbmRpZiAvKiBLUkI1ICovCi0j ZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQotI2lmZGVmIFRDUElQTElCCi0jaWZkZWYgT1MyCi0g ICAgUmVxdWVzdFRDUElQTXV0ZXgoU0VNX0lOREVGSU5JVEVfV0FJVCk7Ci0jZW5kaWYgLyogT1My ICovCi0gICAgaWYgKHR0aWJuID09IDApCi0gICAgICBpZiAoKHJjID0gdHRidWZyKCkpIDw9IDAp IHsKLSNpZmRlZiBPUzIKLSAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBP UzIgKi8KLSAgICAgICAgcmV0dXJuKHJjKTsKLSAgICAgIH0KLQotICAgIGlmICh0dGlibiA8PSBu KSB7Ci0gICAgICAgIGxlbiA9IHR0aWJuOwotICAgICAgICBtZW1jcHkoYnVmLCZ0dGlidWZbdHRp YnBdLGxlbik7ICAgICAgICAgLyogc2FmZSAqLwotICAgICAgICB0dGlicCArPSBsZW47Ci0gICAg ICAgIHR0aWJuID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBtZW1jcHkoYnVmLCZ0dGlidWZb dHRpYnBdLG4pOyAgICAgICAgICAgLyogc2FmZSAqLwotICAgICAgICB0dGlicCArPSBuOwotICAg ICAgICB0dGlibiAtPSBuOwotICAgICAgICBsZW4gPSBuOwotICAgIH0KLSNpZmRlZiBPUzIKLSAg ICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotI2Vsc2UgLyogVENQSVBM SUIgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIGlmICgoaiA9IG5l dGluYygwKSkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoaiA8IC0xKQotICAgICAgICAgICAgICBy ZXR1cm4oaik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICB9Ci0gICAgICAgIGJ1ZltpXSA9IGo7Ci0gICAgfQotICAgIGxlbiA9IGk7Ci0jZW5kaWYgLyog VENQSVBMSUIgKi8KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAg LyogVGhpcyB3b3VsZCBiZSBncmVhdCBpZiBpdCB3b3JrZWQuICBCdXQgd2hhdCBpZiB0aGUgYnVm ZmVyIHdlIHJlYWQgICovCi0gICAgLyogY29udGFpbnMgYSB0ZWxuZXQgbmVnb3RpYXRpb24gdGhh dCBjaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGUgICAgICAgICovCi0gICAgLyogZW5jcnlwdGlvbi4g IElmIHNvLCB3ZSB3b3VsZCBiZSBlaXRoZXIgZGVjcnlwdGluZyB1bmVuY3J5cHRlZCB0ZXh0ICov Ci0gICAgLyogb3Igbm90IGRlY3J5cHRpbmcgZW5jcnlwdGVkIHRleHQuICBTbyB3ZSBtdXN0IG1v dmUgdGhpcyBjYWxsIHRvICAgICovCi0gICAgLyogYWxsIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdHR4 aW4oKS4gIEluIE9TMiB0aGF0IG1lYW5zIG9zMl9uZXR4aW4oKSAgICovCi0gICAgLyogd2hlcmUg dGhlIFRlbG5ldCBOZWdvdGlhdGlvbnMgYXJlIGhhbmRsZWQuICAgICAgICAgICAgICAgICAgICAg ICAgICovCi0gICAgaWYgKHVfZW5jcnlwdCkKLSAgICAgIGNrX3RuX2RlY3J5cHQoYnVmLGxlbik7 Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAg IHJldHVybihsZW4pOwotfQotCi0vKiAgTiBFIFQgSSBOIEMgLS0gIElucHV0IGNoYXJhY3RlciBm cm9tIG5ldHdvcmsgKi8KLQotI2lmZGVmIE5FVExFQlVGCi0jZGVmaW5lIExFQlVGCi0jZW5kaWYg LyogTkVUTEVCVUYgKi8KLSNpZmRlZiBUVExFQlVGCi0jZGVmaW5lIExFQlVGCi0jZW5kaWYgLyog VFRMRUJVRiAqLwotI2lmbmRlZiBMRUJVRgotI2lmZGVmIE9TMgotI2RlZmluZSBMRUJVRgotI2Vu ZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIExFQlVGICovCi0KLWludAotbmV0aW5jKHRpbW8pIGlu dCB0aW1vOyB7Ci0jaWZkZWYgVENQSVBMSUIKLSAgICBpbnQgeDsgdW5zaWduZWQgY2hhciBjOyAg ICAgICAgICAgICAvKiBUaGUgbG9jYWxzLiAqLwotCi0jaWZkZWYgTkVUTEVCVUYKLSAgICBpZiAo dHRwdXNoID49IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwibmV0aW5jIiwidHRwdXNoIix0dHB1 c2gpOwotICAgICAgICBjID0gdHRwdXNoOwotICAgICAgICB0dHB1c2ggPSAtMTsKLSAgICAgICAg cmV0dXJuKGMpOwotICAgIH0KLSAgICBpZiAobGVfZGF0YSkgewotICAgICAgICBpZiAobGVfZ2V0 Y2hhcigoQ0hBUiAqKSZjKSA+IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldGluYyBs ZV9nZXRjaGFyIiwiYyIsYyk7Ci0gICAgICAgICAgICByZXR1cm4oYyk7Ci0gICAgICAgIH0KLSAg ICB9Ci0jZW5kaWYgLyogTkVUTEVCVUYgKi8KLQotICAgIGlmICh0dHlmZCA9PSAtMSkgewotICAg ICAgICBkZWJ1ZyhGMTAwLCJuZXRpbmMgc29ja2V0IGlzIGNsb3NlZCIsIiIsMCk7Ci0gICAgICAg IHJldHVybigtMik7Ci0gICAgfQotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBLUkI0Ci0j aWZkZWYgUkxPR0NPREUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pIHsKLSAgICAg ICAgaWYgKCh4ID0ga3JiNF9kZXNfcmVhZCh0dHlmZCwmYywxKSkgPT0gMCkKLSAgICAgICAgICBy ZXR1cm4oLTEpOwotICAgICAgICBlbHNlIGlmICh4IDwgMCkKLSAgICAgICAgICByZXR1cm4oLTIp OwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuKGMpOwotICAgIH0KLSNlbmRpZiAvKiBS TE9HQ09ERSAqLwotI2VuZGlmIC8qIEtSQjQgKi8KLSNpZmRlZiBLUkI1Ci0jaWZkZWYgUkxPR0NP REUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsKLSAgICAgICAgaWYgKCh4ID0g a3JiNV9kZXNfcmVhZCh0dHlmZCwmYywxLDApKSA9PSAwKQotICAgICAgICAgIHJldHVybigtMSk7 Ci0gICAgICAgIGVsc2UgaWYgKHggPCAwKQotICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAg IGVsc2UKLSAgICAgICAgICByZXR1cm4oYyk7Ci0gICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICov Ci0jaWZkZWYgS1JCNV9VMlUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKLSAgICAg ICAgaWYgKCh4ID0ga3JiNV91MnVfcmVhZCh0dHlmZCwmYywxKSkgPT0gMCkKLSAgICAgICAgICBy ZXR1cm4oLTEpOwotICAgICAgICBlbHNlIGlmICh4IDwgMCkKLSAgICAgICAgICByZXR1cm4oLTIp OwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuKGMpOwotICAgIH0KLSNlbmRpZiAvKiBL UkI1X1UyVSAqLwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwot Ci0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRDUElQTXV0ZXgoU0VNX0lOREVGSU5JVEVfV0FJVCk7 Ci0jZW5kaWYgLyogT1MyICovCi0gICAgaWYgKHR0aWJuID4gMCkgeyAgICAgICAgICAgICAgICAg ICAgLyogU29tZXRoaW5nIGluIGludGVybmFsIGJ1ZmZlcj8gKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgIGRlYnVnKEYxMDAsIm5ldGluYyBjaGFyIGluIGJ1ZiIsIiIsMCk7IC8qIFllcy4gKi8K LSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU3VjY2Vzcy4gKi8KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBFbHNlIG11c3QgcmVhZCBmcm9tIG5ldHdvcmsuICovCi0gICAgICAgIHggPSAtMTsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIGZhaWx1cmUuICovCi0jaWZkZWYgREVC VUcKLSAgICAgICAgZGVidWcoRjEwMSwibmV0aW5jIGdvZXMgdG8gbmV0LCB0aW1vIiwiIix0aW1v KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIENLX1NTTAotICAgICAgICAvKgotICAgICAg ICAgKiBJbiB0aGUgY2FzZSBvZiBPcGVuU1NMLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXJlIGlz IHN0aWxsCi0gICAgICAgICAqIGRhdGEgd2FpdGluZyBpbiB0aGUgU1NMIHNlc3Npb24gYnVmZmVy cyB0aGF0IGhhcyBub3QgeWV0Ci0gICAgICAgICAqIGJlZW4gcmVhZCBieSBLZXJtaXQuICBJZiB0 aGlzIGlzIHRoZSBjYXNlIHdlIG11c3QgcHJvY2VzcwotICAgICAgICAgKiBpdCB3aXRob3V0IGNh bGxpbmcgc2VsZWN0KCkgYmVjYXVzZSBzZWxlY3QoKSB3aWxsIG5vdCByZXR1cm4KLSAgICAgICAg ICogd2l0aCBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlcmUgaXMgZGF0YSB0byBiZSByZWFkIGZyb20g dGhlCi0gICAgICAgICAqIHNvY2tldC4gIElmIHRoZXJlIGlzIG5vIGRhdGEgcGVuZGluZyBpbiB0 aGUgU1NMIHNlc3Npb24KLSAgICAgICAgICogYnVmZmVycyB0aGVuIGZhbGwgdGhyb3VnaCB0byB0 aGUgc2VsZWN0KCkgY29kZSBhbmQgd2FpdCBmb3IKLSAgICAgICAgICogc29tZSBkYXRhIHRvIGFy cml2ZS4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcpIHsKLSAgICAg ICAgICAgIHggPSBTU0xfcGVuZGluZyhzc2xfY29uKTsKLSAgICAgICAgICAgIGlmICh4IDwgMCkg ewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldGluYyIsIlNTTF9wZW5kaW5nIGVycm9y Iix4KTsKLSAgICAgICAgICAgICAgICBuZXRjbG9zKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAg ICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAg ICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgfSBlbHNlIGlmICggeCA+IDAgKSB7Ci0gICAg ICAgICAgICAgICAgaWYgKCB0dGJ1ZnIoKSA+PSAwICkgewotICAgICAgICAgICAgICAgICAgICB4 ID0gbmV0aW5jKHRpbW8pOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICBSZWxlYXNl VENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICByZXR1 cm4oeCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgeCA9 IC0xOwotICAgICAgICB9IGVsc2UgaWYgKHRsc19hY3RpdmVfZmxhZykgewotICAgICAgICAgICAg eCA9IFNTTF9wZW5kaW5nKHRsc19jb24pOwotICAgICAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAg ICAgICAgICAgICAgZGVidWcoRjExMSwibmV0aW5jIiwiVExTX3BlbmRpbmcgZXJyb3IiLHgpOwot ICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICBS ZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIHJl dHVybigtMSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCB4ID4gMCApIHsKLSAgICAgICAgICAg ICAgICBpZiAoIHR0YnVmcigpID49IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBuZXRp bmModGltbyk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11 dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4ID0gLTE7Ci0g ICAgICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZm5kZWYgTEVCVUYKLSAgICAgICAgaWYg KHRpbW8gPT0gMCkgeyAgICAgICAgICAgICAgICAvKiBVbnRpbWVkIGNhc2UuICovCi0gICAgICAg ICAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgLyogV2FpdCBmb3JldmVyIGlmIG5lY2Vz c2FyeS4gKi8KLSAgICAgICAgICAgICAgICBpZiAodHRidWZyKCkgPCAwKSAgICAgICAvKiBSZWZp bGwgYnVmZmVyLiAqLwotICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgIC8q IEVycm9yLCBmYWlsLiAqLwotICAgICAgICAgICAgICAgIGlmICh0dGlibiA+IDApIHsgICAgICAg IC8qIFN1Y2Nlc3MuICovCi0gICAgICAgICAgICAgICAgICAgIHggPSAwOwotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGltZWQgY2FzZS4uLiAqLwotI2Vu ZGlmIC8qIExFQlVGICovCi0gICAgICAgICAgewotI2lmZGVmIE5UX1RDUF9PVkVSTEFQUEVECi0g ICAgICAgICAgICAvKiBUaGlzIGNvZGUgaXMgZm9yIHVzZSBvbiBOVCB3aGVuIHdlIGFyZSB1c2lu ZyAqLwotICAgICAgICAgICAgLyogT3ZlcmxhcHBlZCBJL08gdG8gaGFuZGxlIHJlYWRzLiAgSW4g dGhlIGNhc2UgKi8KLSAgICAgICAgICAgIC8qIG9mIG91dHN0YW5kaW5nIHJlYWRzIHNlbGVjdCgp IGRvZXNuJ3Qgd29yayAgICovCi0KLSAgICAgICAgICAgIGlmIChXYWl0Rm9yT3ZlcmxhcHBlZFJl YWREYXRhKHRpbW8pKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKHR0YnVmcigpIDwgMCkgICAvKiBLZWVwIHRyeWluZyB0byByZWZpbGwgaXQu ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogVGlsbCB3ZSBn ZXQgYW4gZXJyb3IuICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh0dGlibiA+IDApIHsgICAg LyogT3Igd2UgZ2V0IGEgY2hhcmFjdGVyLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgeCA9 IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbHNlIC8qIE5UX1RDUF9PVkVS TEFQUEVEICovCi0jaWZkZWYgQlNEU0VMRUNUCi0gICAgICAgICAgICBmZF9zZXQgcmZkczsKLSAg ICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OwotICAgICAgICAgICAgaW50IHRpbWVvdXQgPSB0 aW1vIDwgMCA/IC10aW1vIDogMTAwMCAqIHRpbW87Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJu ZXRpbmMgQlNEU0VMRUNUIiwiIix0aW1vKTsKLQotICAgICAgICAgICAgZm9yICggOyB0aW1lb3V0 ID49IDA7IHRpbWVvdXQgLT0gKHRpbW8gPyAxMDAgOiAwKSkgewotICAgICAgICAgICAgICAgIGlu dCByYzsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXRpbmMiLCJ0aW1lb3V0Iix0aW1l b3V0KTsKLSAgICAgICAgICAgICAgICAvKiBEb24ndCBtb3ZlIHNlbGVjdCgpIGluaXRpYWxpemF0 aW9uIG91dCBvZiB0aGUgbG9vcC4gKi8KLSAgICAgICAgICAgICAgICBGRF9aRVJPKCZyZmRzKTsK LSAgICAgICAgICAgICAgICBGRF9TRVQodHR5ZmQsICZyZmRzKTsKLSAgICAgICAgICAgICAgICB0 di50dl9zZWMgID0gdHYudHZfdXNlYyA9IDBMOwotICAgICAgICAgICAgICAgIGlmICh0aW1vKQot ICAgICAgICAgICAgICAgICAgdHYudHZfdXNlYyA9IChsb25nKSAxMDAwMDBMOwotICAgICAgICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHR2LnR2X3NlYyA9IDMwOwotI2lmZGVmIE5U Ci0gICAgICAgICAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMTsKLSNlbmRpZiAvKiBOVCAqLwot ICAgICAgICAgICAgICAgIHJjID0gc2VsZWN0KEZEX1NFVFNJWkUsCi0jaWZkZWYgX19ERUNDCi0j aWZkZWYgSU5UU0VMRUNUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCAqKQotI2Vs c2UgLyogZGVmIElOVFNFTEVDVCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmZF9z ZXQgKikKLSNlbmRpZiAvKiBkZWYgSU5UU0VMRUNUIFtlbHNlXSAqLwotI2Vsc2UgLyogZGVmIF9f REVDQyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmZF9zZXQgKikKLSNlbmRpZiAv KiBkZWYgX19ERUNDIFtlbHNlXSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZmRz LCBOVUxMLCBOVUxMLCAmdHYpOwotICAgICAgICAgICAgICAgIGlmIChyYyA8IDApIHsKLSAgICAg ICAgICAgICAgICAgICAgaW50IHNfZXJybm8gPSBzb2NrZXRfZXJybm87Ci0gICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTEsIm5ldGluYyIsInNlbGVjdCIscmMpOwotICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJuZXRpbmMiLCJzb2NrZXRfZXJybm8iLHNfZXJybm8pOwotICAgICAg ICAgICAgICAgICAgICBpZiAoc19lcnJubykgewotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAg ICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwibmV0aW5jIiwic2VsZWN0 IixyYyk7Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAwOwot I2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICAgICAgaWYgKCFGRF9JU1NFVCh0dHlmZCwgJnJm ZHMpKSB7Ci0jaWZkZWYgTEVCVUYKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxlX2luYnVmKCkg PiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gLTE7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIExF QlVGICovCi0gICAgICAgICAgICAgICAgICAgIC8qIElmIHdhaXRpbmcgZm9yZXZlciB3ZSBoYXZl IG5vIHdheSBvZiBrbm93aW5nIGlmIHRoZSAqLwotICAgICAgICAgICAgICAgICAgICAvKiBzb2Nr ZXQgY2xvc2VkIHNvIHRyeSB3cml0aW5nIGEgMC1sZW5ndGggVENQIHBhY2tldCAgKi8KLSAgICAg ICAgICAgICAgICAgICAgLyogd2hpY2ggc2hvdWxkIGZvcmNlIGFuIGVycm9yIGlmIHRoZSBzb2Nr ZXQgaXMgY2xvc2VkICovCi0gICAgICAgICAgICAgICAgICAgIGlmICghdGltbykgewotICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKChyYyA9IHNvY2tldF93cml0ZSh0dHlmZCwiIiwwKSkgPCAw KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNfZXJybm8gPSBzb2NrZXRfZXJy bm87Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0aW5jIHNvY2tl dF93cml0ZSBlcnJvciIsIiIsc19lcnJubyk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKG9zMnNvY2tldGVycm9yKHNfZXJybm8pIDwgMCkgewotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5k aWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsgLyog Q2FsbCBpdCBhbiBpL28gZXJyb3IgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKHR0YnVmcigpIDwgMCkgeyAvKiBLZWVwIHRyeWluZyB0byByZWZpbGwgaXQuICovCi0g ICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsgICAgICAgICAgLyogVGlsbCB3ZSBnZXQgYW4gZXJyb3IuICovCi0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHR0aWJuID4gMCkgeyAgICAv KiBPciB3ZSBnZXQgYSBjaGFyYWN0ZXIuICovCi0gICAgICAgICAgICAgICAgICAgICAgICB4ID0g MDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAtMTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgfQotI2lmZGVmIE5UCi0gICAgICAgICAgICBXU0FTYWZlVG9DYW5jZWwg PSAwOwotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiAhQlNEU0VMRUNUICovCi0jaWZkZWYgSUJN U0VMRUNUCi0vKgotICBXYXMgdXNlZCBieSBPUy8yLCBjdXJyZW50bHkgbm90IHVzZWQsIGJ1dCBt aWdodCBjb21lIGluIGhhbmR5IHNvbWUgZGF5Li4uCi0gIC4uLiBhbmQgaXQgY2FtZSBpbiBoYW5k eSEgIEZvciBvdXIgVENQL0lQIGxheWVyLCBpdCBhdm9pZHMgYWxsIHRoZSBmZF9zZXQKLSAgYW5k IHRpbWV2YWwgc3R1ZmYgc2luY2UgdGhpcyBpcyB0aGUgb25seSBwbGFjZSB3aGVyZSBpdCBpcyB1 c2VkLgotKi8KLSAgICAgICAgICAgIGludCBzb2NrZXQgPSB0dHlmZDsKLSAgICAgICAgICAgIGlu dCB0aW1lb3V0ID0gdGltbyA8IDAgPyAtdGltbyA6IDEwMDAgKiB0aW1vOwotCi0gICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJuZXRpbmMgSUJNU0VMRUNUIiwiIix0aW1vKTsKLSAgICAgICAgICAgIGZv ciAoIDsgdGltZW91dCA+PSAwOyB0aW1lb3V0IC09ICh0aW1vID8gMTAwIDogMCkpIHsKLSAgICAg ICAgICAgICAgICBpZiAoc2VsZWN0KCZzb2NrZXQsIDEsIDAsIDAsIDEwMEwpID09IDEpIHsKLSAg ICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm ICh0dGJ1ZnIoKSA8IDApIHsgLyogS2VlcCB0cnlpbmcgdG8gcmVmaWxsIGl0LiAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsgICAgICAvKiBUaWxsIHdlIGdldCBhbiBlcnJvci4gKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dGlibiA+IDAp IHsgLyogT3Igd2UgZ2V0IGEgY2hhcmFjdGVyLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAtMTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBMRUJV RgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxlX2luYnVmKCkgPiAwKSAgewotICAgICAgICAg ICAgICAgICAgICB0aW1lb3V0ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBMRUJVRiAqLwotICAgICAgICAgICAgfQotI2Vsc2Ug LyogIUlCTVNFTEVDVCAqLwotI2lmZGVmIFdJTlNPQ0sKLSAgICAgICAvKiBBY3R1YWxseSwgdW5k ZXIgV2luU29jayB3ZSBoYXZlIGEgYmV0dGVyIG1lY2hhbmlzbSB0aGFuIHNlbGVjdCgpICovCi0g ICAgICAgLyogZm9yIHNldHRpbmcgdGltZW91dHMgKFNPX1JDVlRJTUVPLCBTT19TTkRUSU1FTykg Ki8KLSAgICAgICAgICAgIFNPQ0tFVCBzb2NrZXQgPSB0dHlmZDsKLSAgICAgICAgICAgIGRlYnVn KEYxMDEsIm5ldGluYyBOVFNFTEVDVCIsIiIsdGltbyk7Ci0gICAgICAgICAgICBpZiAoc2V0c29j a29wdChzb2NrZXQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAoY2hhciAqKSZ0aW1vLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0aW1vKSkgID09IE5PX0VSUk9SKQotICAg ICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgICAgaWYgKHR0YnVmcigpIDwg MCkgICAgIC8qIEtlZXAgdHJ5aW5nIHRvIHJlZmlsbCBpdC4gKi8KLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7ICAgICAgICAgICAgICAvKiBUaWxsIHdlIGdldCBhbiBlcnJvci4gKi8KLSAgICAg ICAgICAgICAgICAgIGlmICh0dGlibiA+IDApIHsgICAgICAvKiBPciB3ZSBnZXQgYSBjaGFyYWN0 ZXIuICovCi0gICAgICAgICAgICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSNlbHNlIC8q IFdJTlNPQ0sgKi8KLS8qCi0gIElmIHdlIGNhbid0IHVzZSBzZWxlY3QoKSwgdGhlbiB3ZSB1c2Ug dGhlIHJlZ3VsYXIgYWxhcm0oKS9zaWduYWwoKQotICB0aW1lb3V0IG1lY2hhbmlzbS4KLSovCi0g ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRpbmMgYWxhcm0iLCIiLHRpbW8pOwotICAgICAgICAg ICAgeCA9IGFscm1fZXhlY3V0ZShja2phZGRyKG5qYnVmKSx0aW1vLG5ldHRvdXQsZG9uZXRpbmMs ZmFpbG5ldGluYyk7Ci0gICAgICAgICAgICB0dGltb2ZmKCk7ICAgICAgICAgICAgICAgICAgLyog VGltZXIgb2ZmLiAqLwotI2VuZGlmIC8qIFdJTlNPQ0sgKi8KLSNlbmRpZiAvKiBJQk1TRUxFQ1Qg Ki8KLSNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KLSNlbmRpZiAvKiBOVF9UQ1BfT1ZFUkxBUFBFRCAq LwotICAgICAgICB9Ci0gICAgfQotCi0jaWZkZWYgTEVCVUYKLSAgICBpZiAobGVfaW5idWYoKSA+ IDApIHsgICAgICAgICAgICAgICAvKiBJZiBkYXRhIHdhcyBpbnNlcnRlZCBpbnRvIHRoZSAqLwot ICAgICAgICBpZiAobGVfZ2V0Y2hhcigoQ0hBUiAqKSZjKSA+IDApIHsvKiBMb2NhbCBFY2hvIGJ1 ZmZlciB3aGlsZSB0aGUgICAqLwotI2lmZGVmIE9TMiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB3YXMgdGFraW5nIHBsYWNlIGRvIG5vdCBtaXggICAqLwotICAgICAgICAgIFJlbGVh c2VUQ1BJUE11dGV4KCk7ICAgICAgICAgICAvKiB0aGUgbGUgZGF0YSB3aXRoIHRoZSBuZXQgZGF0 YSAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgIHJldHVybihjKTsKLSAgICAgICAgfQot ICAgIH0KLSNlbmRpZiAvKiBMRUJVRiAqLwotICAgIGlmICh4IDwgMCkgeyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFJldHVybiAtMSBpZiB3ZSBmYWlsZWQuICovCi0gICAgICAgIGRlYnVnKEYx MDAsIm5ldGluYyB0aW1lZCBvdXQiLCIiLDApOwotI2lmZGVmIE9TMgotICAgICAgICBSZWxlYXNl VENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm4oLTEpOwotICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSAqLwotICAg ICAgICBjID0gdHRpYnVmW3R0aWJwXTsgICAgICAgICAgICAgIC8qIFJldHVybiB0aGUgZmlyc3Qg Y2hhciBpbiB0dGlidWZbXSAqLwotICAgICAgICBpZiAoZGVibG9nKSB7Ci0jaWZuZGVmIENPTU1F TlQKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldGluYyByZXR1cm5pbmciLCIiLGMpOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIGlmIChjID09IDApIHsKLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJuZXRpbmMgMCB0dGlibiIsIiIsdHRpYm4pOwotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDEsIm5ldGluYyAwIHR0aWJwIiwiIix0dGlicCk7Ci0jaWZkZWYgQkVUQURF QlVHCi0gICAgICAgICAgICAgICAgewotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICBl eHRlcm4gaW50IHR0X3R5cGVfbW9kZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhSVNWVE5U KHR0X3R5cGVfbW9kZSkgKQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICBj a2hleGR1bXAoIm5ldGluYyAmdHRidWZbdHRpYnBdIiwmdHRpYnVmW3R0aWJwXSx0dGlibik7Ci0g ICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIEJFVEFERUJVRyAqLwotICAgICAgICAgICAgfQot ICAgICAgICB9Ci0gICAgICAgIHR0aWJwKys7Ci0gICAgICAgIHR0aWJuLS07Ci0jaWZkZWYgT1My Ci0gICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYg Q0tfRU5DUllQVElPTgotICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKQot ICAgICAgICAgIGNrX3RuX2RlY3J5cHQoJmMsMSk7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LwotICAgICAgICByZXR1cm4oYyk7Ci0gICAgfQotI2Vsc2UgLyogTm90IHVzaW5nIFRDUElQTElC ICovCi0gICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotfQotCi0vKiAgTiBF IFQgVCBPIEwgIC0tICBPdXRwdXQgYSBzdHJpbmcgb2YgYnl0ZXMgdG8gdGhlIG5ldHdvcmsgICov Ci0vKgotICBDYWxsIHdpdGggcyA9IHBvaW50ZXIgdG8gc3RyaW5nLCBuID0gbGVuZ3RoLgotICBS ZXR1cm5zIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuIG9uIHN1Y2Nlc3MsIG9yCi0g IC0xIG9uIGkvbyBlcnJvciwgLTIgaWYgY2FsbGVkIGltcHJvcGVybHkuCi0qLwotCi1pbnQKLW5l dHRvbChzLG4pIENIQVIgKnM7IGludCBuOyB7Ci0jaWZkZWYgVENQSVBMSUIKLSAgICBpbnQgY291 bnQgPSAwOwotICAgIGludCBsZW4gPSBuOwotICAgIGludCB0cnkgPSAwOwotCi0gICAgaWYgKHR0 eWZkID09IC0xKSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsIm5ldHRvbCBzb2NrZXQgaXMgY2xvc2Vk IiwiIiwwKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJuZXR0 b2wgVENQSVBMSUIgdHRuZXQiLCIiLHR0bmV0KTsKLSNpZmRlZiBDT01NRU5UCi0gICAgY2toZXhk dW1wKCJuZXR0b2wiLHMsbik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgQ0tfS0VS QkVST1MKLSNpZmRlZiBLUkI0Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBpZiAodHRucHJvdG8gPT0g TlBfRUs0TE9HSU4pIHsKLSAgICAgICAgcmV0dXJuKGtyYjRfZGVzX3dyaXRlKHR0eWZkLHMsbikp OwotICAgIH0KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2VuZGlmIC8qIEtSQjQgKi8KLSNpZmRl ZiBLUkI1Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs1TE9HSU4p IHsKLSAgICAgICAgcmV0dXJuKGtyYjVfZGVzX3dyaXRlKHR0eWZkLHMsbiwwKSk7Ci0gICAgfQot I2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgS1JCNV9VMlUKLSAgICBpZiAodHRucHJvdG8g PT0gTlBfSzVVMlUpIHsKLSAgICAgICAgcmV0dXJuKGtyYjVfdTJ1X3dyaXRlKHR0eWZkLHMsbikp OwotICAgIH0KLSNlbmRpZiAvKiBLUkI1X1UyVSAqLwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRp ZiAvKiBDS19LRVJCRVJPUyAqLwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIGlmIChURUxP UFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pKQotICAgICAgY2tfdG5fZW5jcnlwdChzLG4pOwotI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChzc2xfYWN0 aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7Ci0gICAgICAgIGludCBlcnJvciwgcjsKLSAg ICAgICAgLyogV3JpdGUgdXNpbmcgU1NMICovCi0gICAgICBzc2xfcmV0cnk6Ci0gICAgICAgIGlm IChzc2xfYWN0aXZlX2ZsYWcpCi0gICAgICAgICAgciA9IFNTTF93cml0ZShzc2xfY29uLCBzLCBs ZW4gLyogPjEwMjQ/MTAyNDpsZW4gKi8pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgciA9IFNT TF93cml0ZSh0bHNfY29uLCBzLCBsZW4gLyogPjEwMjQ/MTAyNDpsZW4gKi8pOwotICAgICAgICBz d2l0Y2ggKFNTTF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbixyKSkg ewotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEx LCJuZXR0b2wiLCJTU0xfd3JpdGUiLHIpOwotICAgICAgICAgICAgaWYgKCByID09IGxlbiApCi0g ICAgICAgICAgICAgICAgcmV0dXJuKG4pOwotICAgICAgICAgICAgIHMgKz0gcjsKLSAgICAgICAg ICAgICBsZW4gLT0gcjsKLSAgICAgICAgICAgICBnb3RvIHNzbF9yZXRyeTsKLSAgICAgICAgICBj YXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0dG9s IFNTTF9FUlJPUl9XQU5UX1dSSVRFIiwiIiwwKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAgICAgICAgICAgZGVidWcoRjEw MCwibmV0dG9sIFNTTF9FUlJPUl9XQU5UX1JFQUQiLCIiLDApOwotICAgICAgICAgICAgcmV0dXJu KC0xKTsKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgotICAgICAgICAgICAgICBp ZiAoIHIgPT0gMCApIHsgLyogRU9GICovCi0gICAgICAgICAgICAgICAgICBuZXRjbG9zKCk7Ci0g ICAgICAgICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgICAgaW50IHJjID0gLTE7Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgICAgICAg IGludCBnbGUgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEs Im5ldHRvbCBTU0xfRVJST1JfU1lTQ0FMTCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIkdl dExhc3RFcnJvcigpIixnbGUpOwotICAgICAgICAgICAgICAgICAgcmMgPSBvczJzb2NrZXRlcnJv cihnbGUpOwotICAgICAgICAgICAgICAgICAgaWYgKHJjID09IC0xKQotICAgICAgICAgICAgICAg ICAgICAgIHJjID0gLTI7Ci0gICAgICAgICAgICAgICAgICBlbHNlIGlmICggcmMgPT0gLTIgKQot ICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAg ICAgICAgICAgIHJldHVybihyYyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIFNT TF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgotICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0dG9s IFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQIiwiIiwwKTsKLSAgICAgICAgICAgIG5ldGNsb3Mo KTsKLSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1NM OgotICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0dG9sIFNTTF9FUlJPUl9TU0wiLCIiLDApOwot ICAgICAgICAgICAgICBpZiAoYmlvX2VyciE9TlVMTCkgewotICAgICAgICAgICAgICAgICAgaW50 IGxlbjsKLSAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyIHNzbF9lcnJbXTsKLSAgICAgICAg ICAgICAgICAgIEJJT19wcmludGYoYmlvX2VyciwibmV0dG9sKCkgU1NMX0VSUk9SX1NTTFxuIik7 Ci0gICAgICAgICAgICAgICAgICBFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwotICAgICAgICAg ICAgICAgICAgbGVuID0gQklPX3JlYWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7Ci0g ICAgICAgICAgICAgICAgICBzc2xfZXJyW2xlbiA8IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9F UlJfQkZTWl0gPSAnXDAnOwotICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwibmV0dG9sIFNT TF9FUlJPUl9TU0wiLHNzbF9lcnIsMCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVn X2ZsYWcpCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKHNzbF9lcnIpOwotICAgICAgICAg ICAgICB9IGVsc2UgaWYgKHNzbF9kZWJ1Z19mbGFnKSB7Ci0gICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJuZXR0b2wgU1NMX0VSUk9SX1NTTCIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICBm Zmx1c2goc3RkZXJyKTsKLSAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJuZXR0b2wo KSBTU0xfRVJST1JfU1NMXG4iKTsKLSAgICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJvcnNf ZnAoc3RkZXJyKTsKLSAgICAgICAgICAgICAgfQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAg ICAgbmV0Y2xvcygpOwotICAgICAgICAgICAgICByZXR1cm4oLTIpOwotI2Vsc2UKLSAgICAgICAg ICAgICAgcmV0dXJuKC0xKTsKLSNlbmRpZgotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9f UkVUVVJOOgotICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0dG9sIFNTTF9FUlJPUl9aRVJPX1JF VFVSTiIsIiIsMCk7Ci0gICAgICAgICAgICBuZXRjbG9zKCk7Ci0gICAgICAgICAgICByZXR1cm4o LTIpOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0b2wg U1NMX0VSUk9SXz8/Pz8/IiwiIiwwKTsKLSAgICAgICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAg ICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0K LSAgbmV0dG9sX3JldHJ5OgotICAgIHRyeSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEluY3JlYXNlIHRoZSB0cnkgY291bnRlciAqLwotCi0gICAgaWYgKHR0bmV0ID09IE5FVF9U Q1BCKSB7Ci0jaWZkZWYgQlNEU0VMRUNUCi0gICAgICAgIGZkX3NldCB3ZmRzOwotICAgICAgICBz dHJ1Y3QgdGltZXZhbCB0djsKLQotICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0b2wgQlNEU0VMRUNU IiwiIiwwKTsKLSAgICAgICAgdHYudHZfdXNlYyA9IDBMOwotICAgICAgICB0di50dl9zZWM9MzA7 Ci0jaWZkZWYgTlQKLSAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMTsKLSNlbmRpZiAvKiBOVCAq LwotI2lmZGVmIFNUUkVBTUlORwotICAgICAgZG9fc2VsZWN0OgotI2VuZGlmIC8qIFNUUkVBTUlO RyAqLwotICAgICAgICBGRF9aRVJPKCZ3ZmRzKTsKLSAgICAgICAgRkRfU0VUKHR0eWZkLCAmd2Zk cyk7Ci0gICAgICAgIGlmIChzZWxlY3QoRkRfU0VUU0laRSwgTlVMTCwKLSNpZmRlZiBfX0RFQ0MK LSNpZm5kZWYgX19ERUNDX1ZFUgotICAgICAgICAgICAgICAgICAgICAoaW50ICopCi0jZW5kaWYg LyogX19ERUNDX1ZFUiAqLwotI2VuZGlmIC8qIF9fREVDQyAqLwotICAgICAgICAgICAgICAgICAg ICZ3ZmRzLCBOVUxMLCAmdHYpIDwgMCkgewotICAgICAgICAgICAgaW50IHNfZXJybm8gPSBzb2Nr ZXRfZXJybm87Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0b2wgc2VsZWN0IGZhaWxlZCIs IiIsc19lcnJubyk7Ci0jaWZkZWYgQkVUQURFQlVHCi0gICAgICAgICAgICBwcmludGYoIm5ldHRv bCBzZWxlY3QgZmFpbGVkOiAlZFxuIiwgc19lcnJubyk7Ci0jZW5kaWYgLyogQkVUQURFQlVHICov Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDA7Ci0gICAgICAgICAg ICBpZiAoIXdpbjk1c2VsZWN0YnVnKQotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICAgIHJl dHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFGRF9JU1NFVCh0dHlmZCwgJndmZHMp KSB7Ci0jaWZkZWYgU1RSRUFNSU5HCi0gICAgICAgICAgICBpZiAoc3RyZWFtaW5nKQotICAgICAg ICAgICAgICBnb3RvIGRvX3NlbGVjdDsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSAgICAgICAg ICAgIGRlYnVnKEYxMTEsIm5ldHRvbCIsIiFGRF9JU1NFVCIsdHR5ZmQpOwotI2lmZGVmIE5UCi0g ICAgICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAwOwotICAgICAgICAgICAgaWYgKCF3aW45NXNl bGVjdGJ1ZykKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAg ICAgICB9Ci0jaWZkZWYgTlQKLSAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKLSNlbmRpZiAv KiBOVCAqLwotI2Vsc2UgLyogQlNEU0VMRUNUICovCi0jaWZkZWYgSUJNU0VMRUNUCi0gICAgICAg IHsKLSAgICAgICAgICAgIGludCB0cmllcyA9IDA7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJu ZXR0b2wgSUJNU0VMRUNUIiwiIiwwKTsKLSAgICAgICAgICAgIHdoaWxlIChzZWxlY3QoJnR0eWZk LCAwLCAxLCAwLCAxMDAwKSAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50OwotICAg ICAgICAgICAgICAgIGlmICh0cmllcysrID49IDYwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8q IGlmIGFmdGVyIDYwIHNlY29uZHMgd2UgY2FuJ3QgZ2V0IHBlcm1pc3Npb24gdG8gd3JpdGUgKi8K LSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0dG9sIHNlbGVjdCBmYWlsZWQiLCIi LHNvY2tldF9lcnJubyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoY291bnQgPSBuZXR0Y2hrKCkpIDwgMCkg ewotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXR0b2wiLCJuZXR0Y2hrKCkiLGNv dW50KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKGNvdW50KTsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJQk1TRUxFQ1QgKi8KLSNl bmRpZiAvKiBCU0RTRUxFQ1QgKi8KLSAgICAgICAgaWYgKChjb3VudCA9IHNvY2tldF93cml0ZSh0 dHlmZCxzLG4pKSA8IDApIHsKLSAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5v OyAvKiBtYXliZSBhIGZ1bmN0aW9uICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0b2wg c29ja2V0X3dyaXRlIGVycm9yIiwiIixzX2Vycm5vKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAg IGlmIChvczJzb2NrZXRlcnJvcihzX2Vycm5vKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybigt Mik7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAg ICAgICAgLyogQ2FsbCBpdCBhbiBpL28gZXJyb3IgKi8KLSAgICAgICAgfQotICAgICAgICBpZiAo Y291bnQgPCBuKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXR0b2wgc29ja2V0X3dyaXRl IixzLGNvdW50KTsKLSAgICAgICAgICAgIGlmICh0cnkgPiAyNSkgewotICAgICAgICAgICAgICAg IC8qIGRvbid0IHRyeSBtb3JlIHRoYW4gMjUgdGltZXMgKi8KLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJuZXR0b2wgdHJpZWQgbW9yZSB0aGFuIDI1IHRpbWVzIiwiIiwwKTsKLSAgICAgICAg ICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNvdW50 ID4gMCkgewotICAgICAgICAgICAgICAgIHMgKz0gY291bnQ7Ci0gICAgICAgICAgICAgICAgbiAt PSBjb3VudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRvbCBy ZXRyeSIscyxuKTsKLSAgICAgICAgICAgIGdvdG8gbmV0dG9sX3JldHJ5OwotICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgZGVidWcoRjExMSwibmV0dG9sIHNvY2tldF93cml0ZSIscyxjb3Vu dCk7Ci0gICAgICAgICAgICByZXR1cm4obGVuKTsgLyogc3VjY2VzcyAtIHJldHVybiB0b3RhbCBs ZW5ndGggKi8KLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgcmV0dXJuKC0yKTsKLSNlbHNl Ci0gICAgZGVidWcoRjEwMCwibmV0dG9sIFRDUElQTElCIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSAg ICByZXR1cm4oLTIpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi19Ci0KLS8qICBOIEUgVCBUIE8g QyAgLS0gICBPdXRwdXQgY2hhcmFjdGVyIHRvIG5ldHdvcmsgKi8KLS8qCi0gIENhbGwgd2l0aCBj aGFyYWN0ZXIgdG8gYmUgdHJhbnNtaXR0ZWQuCi0gIFJldHVybnMgMCBpZiB0cmFuc21pc3Npb24g d2FzIHN1Y2Nlc3NmdWwsIG9yCi0gIC0xIHVwb24gaS9vIGVycm9yLCBvciAtMiBpZiBjYWxsZWQg aW1wcm9wZXJseS4KLSovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotbmV0dG9jKENIQVIgYykKLSNl bHNlCi1uZXR0b2MoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBuZXR0b2Mg Ki8gewotI2lmZGVmIFVOSVgKLSAgICByZXR1cm4odHRvYyhjKSk7Ci0jZWxzZQotI2lmZGVmIFRD UElQTElCCi0gICAgdW5zaWduZWQgY2hhciBjYzsKLSAgICBpZiAodHR5ZmQgPT0gLTEpIHsKLSAg ICAgICAgZGVidWcoRjEwMCwibmV0dG9jIHNvY2tldCBpcyBjbG9zZWQiLCIiLDApOwotICAgICAg ICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGNjID0gYzsKLSAgICBkZWJ1ZyhGMTAxLCJuZXR0b2Mg Y2MiLCIiLGNjKTsKLQotI2lmZGVmIENLX0tFUkJFUk9TCi0jaWZkZWYgS1JCNAotI2lmZGVmIFJM T0dDT0RFCi0gICAgaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOKSB7Ci0gICAgICAgIHJldHVy bihrcmI0X2Rlc193cml0ZSh0dHlmZCwmY2MsMSk9PTE/MDotMSk7Ci0gICAgfQotI2VuZGlmIC8q IFJMT0dDT0RFICovCi0jZW5kaWYgLyogS1JCNCAqLwotI2lmZGVmIEtSQjUKLSNpZmRlZiBSTE9H Q09ERQotICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzVMT0dJTikgewotICAgICAgICByZXR1cm4o a3JiNV9kZXNfd3JpdGUodHR5ZmQsJmNjLDEsMCk9PTE/MDotMSk7Ci0gICAgfQotI2VuZGlmIC8q IFJMT0dDT0RFICovCi0jaWZkZWYgS1JCNV9VMlUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVV MlUpIHsKLSAgICAgICAgcmV0dXJuKGtyYjVfdTJ1X3dyaXRlKHR0eWZkLCZjYywxKT09MT8wOi0x KTsKLSAgICB9Ci0jZW5kaWYgLyogS1JCNV9VMlUgKi8KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5k aWYgLyogQ0tfS0VSQkVST1MgKi8KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgaWYg KCBURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pICkKLSAgICAgICAgICAgIGNrX3RuX2VuY3J5 cHQoJmNjLDEpOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wKLSAg ICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgewotICAgICAgICBpbnQg bGVuLCBlcnJvcjsKLSAgICAgICAgLyogV3JpdGUgdXNpbmcgU1NMICovCi0gICAgICBzc2xfcmV0 cnk6Ci0gICAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcpCi0gICAgICAgICAgbGVuID0gU1NMX3dy aXRlKHNzbF9jb24sICZjYywgMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsZW4gPSBTU0xf d3JpdGUodGxzX2NvbiwgJmNjLCAxKTsKLSAgICAgICAgc3dpdGNoIChTU0xfZ2V0X2Vycm9yKHNz bF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24sbGVuKSkgewotICAgICAgICAgIGNhc2UgU1NM X0VSUk9SX05PTkU6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXR0b2MiLCJTU0xfd3JpdGUi LGxlbik7Ci0gICAgICAgICAgICByZXR1cm4obGVuID09IDEgPyAwIDogLTEpOwotICAgICAgICAg IGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0gIAkgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVB RDoKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1lT Q0FMTDoKLSAgICAgICAgICAgICAgaWYgKCBsZW4gPT0gMCApIHsgLyogRU9GICovCi0gICAgICAg ICAgICAgICAgICBuZXRjbG9zKCk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oLTIpOwotICAg ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgaW50IHJjID0gLTE7Ci0jaWZk ZWYgTlQKLSAgICAgICAgICAgICAgICAgIGludCBnbGUgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRvYyBTU0xfRVJST1JfU1lTQ0FMTCIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgIkdldExhc3RFcnJvcigpIixnbGUpOwotICAgICAgICAgICAg ICAgICAgcmMgPSBvczJzb2NrZXRlcnJvcihnbGUpOwotICAgICAgICAgICAgICAgICAgaWYgKHJj ID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTI7Ci0gICAgICAgICAgICAgICAg ICBlbHNlIGlmICggcmMgPT0gLTIgKQotICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7Ci0j ZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAgICAgICAgIHJldHVybihyYyk7Ci0gICAgICAgICAg ICAgIH0KLSAgICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgotICAgICAgICAgICAgICBpZiAoYmlv X2VyciE9TlVMTCkgewotICAgICAgICAgICAgICAgICAgaW50IGxlbjsKLSAgICAgICAgICAgICAg ICAgIGV4dGVybiBjaGFyIHNzbF9lcnJbXTsKLSAgICAgICAgICAgICAgICAgIEJJT19wcmludGYo YmlvX2VyciwibmV0dG9jKCkgU1NMX0VSUk9SX1NTTFxuIik7Ci0gICAgICAgICAgICAgICAgICBF UlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwotICAgICAgICAgICAgICAgICAgbGVuID0gQklPX3Jl YWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7Ci0gICAgICAgICAgICAgICAgICBzc2xf ZXJyW2xlbiA8IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAnOwotICAg ICAgICAgICAgICAgICAgZGVidWcoRjExMCwibmV0dG9jIFNTTF9FUlJPUl9TU0wiLHNzbF9lcnIs MCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKHNzbF9lcnIpOwotICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNzbF9k ZWJ1Z19mbGFnKSB7Ci0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0b2MgU1NMX0VS Uk9SX1NTTCIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICBmZmx1c2goc3RkZXJyKTsKLSAgICAg ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJuZXR0b2MoKSBTU0xfRVJST1JfU1NMXG4iKTsK LSAgICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJvcnNfZnAoc3RkZXJyKTsKLSAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgotICAgICAgICAgIGNh c2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg ICBuZXRjbG9zKCk7Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgfQot I2VuZGlmIC8qIENLX1NTTCAqLwotICAgIGlmICh0dG5ldCA9PSBORVRfVENQQikgewotI2lmZGVm IEJTRFNFTEVDVAotICAgICAgICBmZF9zZXQgd2ZkczsKLSAgICAgICAgc3RydWN0IHRpbWV2YWwg dHY7Ci0KLSAgICAgICAgZGVidWcoRjEwMSwibmV0dG9jIEJTRFNFTEVDVCIsIiIsMCk7Ci0gICAg ICAgIHR2LnR2X3VzZWMgPSAwTDsKLSAgICAgICAgdHYudHZfc2VjID0gMzA7Ci0KLSNpZmRlZiBT VFJFQU1JTkcKLSAgICAgIGRvX3NlbGVjdDoKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQotICAg ICAgICBGRF9aRVJPKCZ3ZmRzKTsKLSAgICAgICAgRkRfU0VUKHR0eWZkLCAmd2Zkcyk7Ci0gICAg ICAgIGlmIChzZWxlY3QoRkRfU0VUU0laRSwgTlVMTCwKLSNpZmRlZiBfX0RFQ0MKLSNpZm5kZWYg X19ERUNDX1ZFUgotICAgICAgICAgICAgICAgICAgIChpbnQgKikKLSNlbmRpZiAvKiBfX0RFQ0Nf VkVSICovCi0jZW5kaWYgLyogX19ERUNDICovCi0gICAgICAgICAgICAgICAgICAgJndmZHMsIE5V TEwsICZ0dikgPCAwKSB7Ci0gICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsK LSAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldHRvYyBzZWxlY3QgZmFpbGVkIiwiIixzX2Vycm5v KTsKLSNpZmRlZiBCRVRBREVCVUcKLSAgICAgICAgICAgIHByaW50ZigibmV0dG9jIHNlbGVjdCBm YWlsZWQ6ICVkXG4iLCBzX2Vycm5vKTsKLSNlbmRpZiAvKiBCRVRBREVCVUcgKi8KLSNpZmRlZiBO VAotICAgICAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKLSAgICAgICAgICAgIGlmICghd2lu OTVzZWxlY3RidWcpCi0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAgICAgcmV0dXJuKC0xKTsK LSAgICAgICAgfQotICAgICAgICBpZiAoIUZEX0lTU0VUKHR0eWZkLCAmd2ZkcykpIHsKLSNpZmRl ZiBTVFJFQU1JTkcKLSAgICAgICAgICAgIGlmIChzdHJlYW1pbmcpCi0gICAgICAgICAgICAgIGdv dG8gZG9fc2VsZWN0OwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotICAgICAgICAgICAgZGVidWco RjExMSwibmV0dG9jIiwiIUZEX0lTU0VUIix0dHlmZCk7Ci0jaWZkZWYgTlQKLSAgICAgICAgICAg IFdTQVNhZmVUb0NhbmNlbCA9IDA7Ci0gICAgICAgICAgICBpZiAoIXdpbjk1c2VsZWN0YnVnKQot I2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSNp ZmRlZiBOVAotICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAwOwotI2VuZGlmIC8qIE5UICovCi0j ZWxzZSAvKiBCU0RTRUxFQ1QgKi8KLSNpZmRlZiBJQk1TRUxFQ1QKLSAgICAgICAgewotICAgICAg ICAgICAgaW50IHRyaWVzID0gMDsKLSAgICAgICAgICAgIHdoaWxlIChzZWxlY3QoJnR0eWZkLCAw LCAxLCAwLCAxMDAwKSAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50OwotICAgICAg ICAgICAgICAgIGlmICh0cmllcysrID49IDYwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIGlm IGFmdGVyIDYwIHNlY29uZHMgd2UgY2FuJ3QgZ2V0IHBlcm1pc3Npb24gdG8gd3JpdGUgKi8KLSAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0dG9jIHNlbGVjdCBmYWlsZWQiLCIiLHNv Y2tldF9lcnJubyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoY291bnQgPSBuZXR0Y2hrKCkpIDwgMCkgewot ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXR0b2MiLCJuZXR0Y2hrKCkiLGNvdW50 KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKGNvdW50KTsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJQk1TRUxFQ1QgKi8KLSNlbmRp ZiAvKiBCU0RTRUxFQ1QgKi8KLSAgICAgICAgaWYgKHNvY2tldF93cml0ZSh0dHlmZCwmY2MsMSkg PCAxKSB7Ci0gICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsgICAgICAgICAv KiBtYXliZSBhIGZ1bmN0aW9uICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0b2Mgc29j a2V0X3dyaXRlIGVycm9yIiwiIixzX2Vycm5vKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIGlm IChvczJzb2NrZXRlcnJvcihzX2Vycm5vKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybigtMik7 Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0g ICAgICAgIGRlYnVnKEYxMDEsIm5ldHRvYyBzb2NrZXRfd3JpdGUiLCIiLCBjYyk7Ci0gICAgICAg IHJldHVybigwKTsKLSAgICB9IGVsc2UgcmV0dXJuKC0yKTsKLSNlbHNlCi0gICAgcmV0dXJuKC0y KTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLX0KLQotLyogIE4g RSBUIEYgTCBVIEkgIC0tICBGbHVzaCBuZXR3b3JrIGlucHV0IGJ1ZmZlciAgKi8KLQotI2lmZGVm IFROQ09ERQotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1uZXRnZXRjKGludCB0aW1vKSAg ICAgICAgICAgICAgICAgICAgICAgLyogSW5wdXQgZnVuY3Rpb24gdG8gcG9pbnQgdG8uLi4gKi8K LSNlbHNlICAvKiBDS19BTlNJQyAqLwotbmV0Z2V0Yyh0aW1vKSBpbnQgdGltbzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IC4uLmluIHRoZSB0bl9kb29wKCkgY2FsbCAqLwotI2lmZGVmIFRDUElQTElCCi0gICAgcmV0dXJu IG5ldGluYyh0aW1vKTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0gICAgcmV0dXJuIHR0aW5jKHRp bW8pOwotI2VuZGlmIC8qIFRDUElQTElCICovCi19Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLWlu dAotbmV0Zmx1aSgpIHsKLSAgICBpbnQgbjsKLSAgICBpbnQgY2g7Ci0jaWZkZWYgTkVUTEVCVUYK LSAgICB0dHB1c2ggPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciB0aGUgcGVl ay1haGVhZCBjaGFyICovCi0gICAgd2hpbGUgKGxlX2RhdGEgJiYgKGxlX2luYnVmKCkgPiAwKSkg ewotICAgICAgICBDSEFSIGNoID0gJ1wwJzsKLSAgICAgICAgaWYgKGxlX2dldGNoYXIoJmNoKSA+ IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInR0Zmx1aSBsZV9pbmJ1ZiBjaCIsIiIsY2gp OwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE5FVExFQlVGICovCi0KLSNpZmRlZiBUQ1BJ UExJQgotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUQ1BJUE11dGV4KFNFTV9JTkRFRklOSVRFX1dB SVQpOwotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIFROQ09ERQotICAgIGlmICh0dG5wcm90byA9 PSBOUF9URUxORVQpIHsKLSAgICAgICAgLyogTmV0Zmx1aSBtdXN0IHByb2Nlc3MgVGVsbmV0IG5l Z290aWF0aW9ucyBvciBnZXQgb3V0IG9mIHN5bmMgKi8KLSAgICAgICAgaWYgKChuID0gbmV0dGNo aygpKSA8PSAwKQotICAgICAgICAgIGdvdG8gZXhpdF9mbHVpOwotICAgICAgICB3aGlsZSAobi0t ID4gMCkgewotICAgICAgICAgICAgY2ggPSBuZXRpbmMoMSk7Ci0gICAgICAgICAgICBpZiAoY2gg PT0gSUFDKSB7Ci0gICAgICAgICAgICAgICAgZXh0ZXJuIGludCBkdXBsZXg7ICAvKiB0aGlzIHJl YWxseSBzaG91bGRuJ3QgYmUgaGVyZSBidXQgLi4uICovCi0gICAgICAgICAgICAgICAgaW50IHR4 ID0gdG5fZG9vcCgoQ0hBUikoY2ggJiAweGZmKSxkdXBsZXgsbmV0Z2V0Yyk7Ci0gICAgICAgICAg ICAgICAgaWYgKHR4ID09IDEpIGR1cGxleCA9IDE7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo dHggPT0gMikgZHVwbGV4ID0gMDsKLSAgICAgICAgICAgICAgICBuID0gbmV0dGNoaygpOwotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlCi0jZW5kaWYgLyogVE5DT0RFICovCi0g ICAgewotICAgICAgICB0dGlidWZbdHRpYnArdHRpYm5dID0gJ1wwJzsKLSAgICAgICAgZGVidWco RjExMSwibmV0Zmx1aSAxIix0dGlidWYsdHRpYm4pOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAg ICAgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSkgewotICAgICAgICAgICAgY2tf dG5fZGVjcnlwdCgmdHRpYnVmW3R0aWJwXSx0dGlibik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBD S19FTkNSWVBUSU9OICovCi0gICAgICAgIHR0aWJuID0gdHRpYnAgPSAwOyAgICAgICAgICAgICAg LyogRmx1c2ggaW50ZXJuYWwgYnVmZmVyICpGSVJTVCogKi8KLSAgICAgICAgaWYgKHR0eWZkIDwg MSkKLSAgICAgICAgICBnb3RvIGV4aXRfZmx1aTsKLSAgICAgICAgaWYgKChuID0gbmV0dGNoaygp KSA+IDApIHsgICAgICAvKiBOb3cgc2VlIHdoYXQncyB3YWl0aW5nIG9uIHRoZSBuZXQgKi8KLSAg ICAgICAgICAgIGlmIChuID4gVFRJQlVGTCkgbiA9IFRUSUJVRkw7ICAgICAgIC8qIGFuZCBzcG9u Z2UgaXQgdXAgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldGZsdWkgMiIsIiIsbik7ICAg ICAgIC8qIC4uLiAqLwotICAgICAgICAgICAgbiA9IHNvY2tldF9yZWFkKHR0eWZkLHR0aWJ1Zixu KTsgLyogaW50byBvdXIgYnVmZmVyICovCi0gICAgICAgICAgICBpZiAobiA+PSAwKSB0dGlidWZb bl0gPSAnXDAnOwotICAgICAgICAgICAgZGVidWcoRjExMSwibmV0Zmx1aSAzIix0dGlidWYsbik7 Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9F TkNSWVBUSU9OKSkgewotICAgICAgICAgICAgICAgIGNrX3RuX2RlY3J5cHQoJnR0aWJ1Zlt0dGli cF0sbik7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAg ICAgICAgdHRpYnVmWzBdID0gJ1wwJzsKLSAgICAgICAgfQotICAgIH0KLSNlbHNlICAvKiAhVENQ SVBMSUIgKi8KLSAgICBpZiAodHR5ZmQgPCAxKQotICAgICAgZ290byBleGl0X2ZsdWk7Ci0jaWZk ZWYgVE5DT0RFCi0gICAgaWYgKHR0bnByb3RvID09IE5QX1RFTE5FVCkgewotICAgICAgICBpZiAo KG4gPSB0dGNoaygpKSA8PSAwKQotICAgICAgICAgIGdvdG8gZXhpdF9mbHVpOwotICAgICAgICB3 aGlsZSAobi0tID49IDApIHsKLSAgICAgICAgICAgIC8qIE5ldGZsdWkgbXVzdCBwcm9jZXNzIFRl bG5ldCBuZWdvdGlhdGlvbnMgb3IgZ2V0IG91dCBvZiBzeW5jICovCi0gICAgICAgICAgICBjaCA9 IHR0aW5jKDEpOwotICAgICAgICAgICAgaWYgKGNoID09IElBQykgewotICAgICAgICAgICAgICAg IGV4dGVybiBpbnQgZHVwbGV4OyAgLyogdGhpcyByZWFsbHkgc2hvdWxkbid0IGJlIGhlcmUgYnV0 IC4uLiAqLwotICAgICAgICAgICAgICAgIGludCB0eCA9IHRuX2Rvb3AoKENIQVIpKGNoICYgMHhm ZiksZHVwbGV4LG5ldGdldGMpOwotICAgICAgICAgICAgICAgIGlmICh0eCA9PSAxKSBkdXBsZXgg PSAxOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR4ID09IDIpIGR1cGxleCA9IDA7Ci0gICAg ICAgICAgICAgICAgbiA9IHR0Y2hrKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAg fSBlbHNlCi0jZW5kaWYgLyogVE5DT0RFICovCi0gICAgaWYgKChuID0gdHRjaGsoKSkgPiAwKSB7 Ci0gICAgICAgIGRlYnVnKEYxMDEsIm5ldGZsdWkgbm9uLVRDUElQTElCIiwiIixuKTsKLSAgICAg ICAgd2hpbGUgKChuLS0pICYmIHR0aW5jKDEpID4gLTEpICAvKiBEb24ndCB3b3JyeSwgdHRpbmMo KSBpcyBidWZmZXJlZCAqLwotICAgICAgICAgIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGFuZCBpdCBoYW5kbGVzIHRoZSBkZWNyeXB0aW9uLi4uICovCi0gICAgfQotI2VuZGlmIC8q IFRDUElQTElCICovCi0gIGV4aXRfZmx1aToKLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVENQSVBN dXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIHJldHVybigwKTsKLX0KLQotI2lmZGVmIENL X0tFUkJFUk9TCi0vKiBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgYXJlIHJlcXVpcmVkIGZv ciBlbmNyeXB0ZWQgcmxvZ2luICovCi0vKiBUaGV5IGFyZSBjYWxsZWQgd2l0aCBuZXR0b2MoKSBv ciBuZXR0b2woKSBhcmUgdHJhbnNtaXR0aW5nICAgICovCi0vKiBlbmNyeXB0ZWQgZGF0YS4gIFRo ZXkgY2FsbCBhIGZ1bmN0aW9uIHRvIGVuY3J5cHQgdGhlIGRhdGEgICAgICovCi0vKiBhbmQgdGhh dCBmdW5jdGlvbiBuZWVkcyB0byBiZSBhYmxlIHRvIHdyaXRlIHRvL3JlYWQgZnJvbSB0aGUgICov Ci0vKiBuZXR3b3JrIGluIGFuIHVuaW1wZWRlZCBtYW5uZXIuICBIZW5jZSwgdGhlc2UgdHdvIHNp bXBsZSBmbnMuICovCi1pbnQKLW5ldF93cml0ZShmZCwgYnVmLCBsZW4pCi0gICAgaW50IGZkOwot ICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKmJ1ZjsKLSAgICBpbnQgbGVuOwotewotICAgIGludCBj YzsKLSAgICByZWdpc3RlciBpbnQgd3JsZW4gPSBsZW47Ci0gICAgZG8gewotI2lmZGVmIFRDUElQ TElCCi0gICAgICAgIGNjID0gc29ja2V0X3dyaXRlKGZkLCBidWYsIHdybGVuKTsKLSNlbHNlCi0g ICAgICAgIGNjID0gd3JpdGUoZmQsYnVmLHdybGVuKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwot ICAgICAgICBpZiAoY2MgPCAwKSB7Ci0gICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9l cnJubzsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldF93cml0ZSBlcnJvciIsIiIsc19lcnJu byk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICBpZiAob3Myc29ja2V0ZXJyb3Ioc19lcnJubykg PCAwKQotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg ICAgICAgICAgICAgY29udGludWU7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgICAgIGlmIChl cnJubyA9PSBFSU5UUikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJl dHVybigtMSk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0g ICAgICAgICAgICBidWYgKz0gY2M7Ci0gICAgICAgICAgICB3cmxlbiAtPSBjYzsKLSAgICAgICAg fQotICAgIH0gd2hpbGUgKHdybGVuID4gMCk7Ci0gICAgcmV0dXJuKGxlbik7Ci19Ci1pbnQKLW5l dF9yZWFkKGZkLCBidWYsIGxlbikKLSAgICBpbnQgZmQ7Ci0gICAgcmVnaXN0ZXIgY2hhciAqYnVm OwotICAgIHJlZ2lzdGVyIGludCBsZW47Ci17Ci0gICAgaW50IGNjLCBsZW4yID0gMDsKLQotICAg IGRvIHsKLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICBjYyA9IHNvY2tldF9yZWFkKGZkLCBidWYs IGxlbik7Ci0jZWxzZQotICAgICAgICBjYyA9IHJlYWQoZmQsYnVmLGxlbik7Ci0jZW5kaWYKLSAg ICAgICAgaWYgKGNjIDwgMCkgewotICAgICAgICAgICAgaW50IHNfZXJybm8gPSBzb2NrZXRfZXJy bm87Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRfcmVhZCBlcnJvciIsIiIsc19lcnJubyk7 Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICBpZiAob3Myc29ja2V0ZXJyb3Ioc19lcnJubykgPCAw KQotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAg ICAgICByZXR1cm4oY2MpOyAgICAgICAgICAvKiBlcnJubyBpcyBhbHJlYWR5IHNldCAqLwotICAg ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNjID09IDApIHsKLSAgICAgICAgICAgIG5ldGNsb3Mo KTsKLSAgICAgICAgICAgIHJldHVybihsZW4yKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIGJ1ZiArPSBjYzsKLSAgICAgICAgICAgIGxlbjIgKz0gY2M7Ci0gICAgICAgICAgICBsZW4g LT0gY2M7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChsZW4gPiAwKTsKLSAgICByZXR1cm4obGVu Mik7Ci19Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNlbmRpZiAvKiBOT05FVCAqLwotCi0v KiBnZXRsb2NhbGlwYWRkcigpIGF0dGVtcHRzIHRvIHJlc29sdmUgYW4gSVAgQWRkcmVzcyBmb3Ig dGhlIGxvY2FsIG1hY2hpbmUuCi0gKiAgIElmIHRoZSBob3N0IGlzIG11bHRpLWhvbWVkIGl0IHJl dHVybnMgb25seSBvbmUgYWRkcmVzcy4KLSAqCi0gKiBUd28gdGVjaG5pcXVlcyBhcmUgdXNlZC4K LSAqICgxKSBnZXQgdGhlIGxvY2FsIGhvc3QgbmFtZSBhbmQgcGVyZm9ybSBhIEROUyBsb29rdXAs IHRoZW4gdGFrZQotICogICAgIHRoZSBmaXJzdCBlbnRyeTsKLSAqICgyKSBvcGVuIGEgVURQIHNv Y2tldCwgdXNlIGl0IHRvIGNvbm5lY3QgdG8gYSBmaWN0aXRpb3VzIGhvc3QgKGl0J3MgT0ssCi0g KiAgICBubyBkYXRhIGlzIHNlbnQpLCB0aGVuIHJldHJpZXZlIHRoZSBsb2NhbCBhZGRyZXNzIGZy b20gdGhlIHNvY2tldC4KLSAqIE5vdGU6IHRoZSBzZWNvbmQgdGVjaG5pcXVlIHdvbid0IHdvcmsg b24gTWljcm9zb2Z0IHN5c3RlbXMuICBTZWUKLSAqIEFydGljbGUgSUQ6IFExMjkwNjUgUFJCOiBH ZXRzb2NrbmFtZSgpIFJldHVybnMgSVAgQWRkcmVzcyAwLjAuMC4wIGZvciBVRFAKLSAqLwotCi0v KiBUZWNobmlxdWUgbnVtYmVyIG9uZSBjYW5ub3Qgd29yayByZWxpYWJseSBpZiB0aGUgbWFjaGlu ZSBpcyBhIGxhcHRvcAotICogYW5kIHRoZSBob3N0bmFtZSBpcyBhc3NvY2lhdGVkIHdpdGggYSBw aHlzaWNhbCBhZGFwdGVyIHdoaWNoIGlzIG5vdAotICogaW5zdGFsbGVkIGFuZCBhIFBQUCBjb25u ZWN0aW9uIGlzIGJlaW5nIHVzZWQgaW5zdGVhZC4gIFRoaXMgaXMgYmVjYXVzZQotICogdGhlIGhv c3RuYW1lIEROUyBsb29rdXAgd2lsbCBzdWNjZWVkIGZvciB0aGUgcGh5c2ljYWwgYWRhcHRlciBl dmVuIHRob3VnaAotICogaXQgd291bGQgYmUgaW1wb3NzaWJsZSB0byB1c2UgaXQuICBJbiBOVDQg U1A0LCB0aGUgZ2V0aG9zdGJ5bmFtZSgpCi0gKiB3aGVuIGdpdmVuIHRoZSByZXN1bHQgb2YgZ2V0 aG9zdG5hbWUoKSByZXR1cm5zIG5vdCB0aGUgcmVhbCBETlMgZW50cmllcwotICogZm9yIHRoYXQg bmFtZStkb21haW4uICBJbnN0ZWFkIGl0IHJldHVybnMgYWxsIG9mIHRoZSBzdGF0aWMgYW5kIGR5 bmFtaWMKLSAqIElQIGFkZHJlc3NlcyBhc3NpZ25lZCB0byBhbnkgcGh5c2ljYWwgb3IgdmlydHVh bCBhZGFwdGVyIGRlZmluZWQgaW4gdGhlCi0gKiBzeXN0ZW0gcmVnYXJkbGVzcyBvZiB3aGV0aGVy IG9yIG5vdCBpdCBpcyBpbnN0YWxsZWQuICBUaGUgb3JkZXIgb2YgdGhlCi0gKiBhZGRyZXNzZXMg aXMgZml4ZWQgYWNjb3JkaW5nIHRvIHRoZSBiaW5kaW5nIG9yZGVyIGluIHRoZSBOVCByZWdpc3Ry eS4KLSAqLwotCi0vKgotICogSXQgYXBwZWFycyB0aGF0IGNhbGxpbmcgZ2V0aG9zdGJ5bmFtZShO VUxMKSBpcyBtb3JlIHJlbGlhYmxlIHRoYW4KLSAqIGNhbGxpbmcgZ2V0aG9zdGJ5bmFtZShnZXRo b3N0bmFtZSgpKSBvbiBXaW5kb3dzLiAgU28gb24gV2luZG93cyB3ZSB3aWxsCi0gKiBvbmx5IGNh bGwgZ2V0aG9zdGJ5bmFtZShOVUxMKS4KLSAqLwotCi1pbnQKLWdldGxvY2FsaXBhZGRyKCkgewot I2lmbmRlZiBkYXRhZ2VuZXJhbAotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBsX3NhOwotICAgIHN0 cnVjdCBzb2NrYWRkcl9pbiByX3NhOwotICAgIEdTT0NLTkFNRV9UIHNsZW4gPSBzaXplb2Yoc3Ry dWN0IHNvY2thZGRyX2luKTsKLSAgICBpbnQgc29jazsKLSAgICBpbnQgcmM7Ci0gICAgc3RydWN0 IGluX2FkZHIgbGFkZHI7Ci0KLSAgICAvKiBpZiBzdGlsbCBub3QgcmVzb2x2ZWQsIHRoZW4gdHJ5 IHNlY29uZCBzdHJhdGVneSAqLwotICAgIC8qIFRoaXMgc2Vjb25kIHN0cmF0ZWd5IGRvZXMgbm90 IHdvcmsgb24gV2luZG93cyAqLwotCi0gICAgZGVidWcoRjEwMCwiZ2V0bG9jYWxpcGFkZHIiLCIi LDApOwotICAgIG1lbXNldCgmbF9zYSwwLHNsZW4pOwotICAgIG1lbXNldCgmcl9zYSwwLHNsZW4p OwotCi0gICAgLyogZ2V0IGEgVURQIHNvY2tldCAqLwotICAgIHNvY2sgPSBzb2NrZXQoQUZfSU5F VCwgU09DS19ER1JBTSwgMCk7Ci0gICAgaWYgKHNvY2sgIT0gLTEpIHsKLSAgICAgICAgLyogY29u bmVjdCB0byBhcmJpcmFyeSBwb3J0IGFuZCBhZGRyZXNzIChOT1QgbG9vcGJhY2spICovCi0gICAg ICAgIHJfc2Euc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0gICAgICAgIHJfc2Euc2luX3BvcnQgPSBo dG9ucyhJUFBPUlRfRUNITyk7Ci0KLSAgICAgICAgLyogVGhlIGZvbGxvd2luZyBpcyBhbiAiaWxs ZWdhbCBjb252ZXJzaW9uIiBpbiBBT1MvVlMgKi8KLSAgICAgICAgLyogKGFuZCB3aG8ga25vd3Mg d2hlcmUgZWxzZSkgKi8KLQotI2lmZGVmIElOQUREUlgKLSAgICAgICAgaW5hZGRyeCA9IGluZXRf YWRkcigiMTI4LjEyNy41MC4xIik7Ci0gICAgICAgIHJfc2Euc2luX2FkZHIuc19hZGRyID0gKih1 bnNpZ25lZCBsb25nICopJmluYWRkcng7Ci0jZWxzZQotICAgICAgICByX3NhLnNpbl9hZGRyLnNf YWRkciA9IGluZXRfYWRkcigiMTI4LjEyNy41MC4xIik7Ci0jZW5kaWYgLyogSU5BRERSWCAqLwot ICAgICAgICByYyA9IGNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmcl9zYSwgc2l6 ZW9mKHN0cnVjdCBzb2NrYWRkcikpOwotICAgICAgICBpZiAoIXJjKSB7ICAgICAgICAgICAgICAg ICAgICAgIC8qIGdldCBsb2NhbCBhZGRyZXNzICovCi0gICAgICAgICAgICBnZXRzb2NrbmFtZShz b2NrLChzdHJ1Y3Qgc29ja2FkZHIgKikmbF9zYSwmc2xlbik7Ci0jaWZkZWYgVENQSVBMSUIKLSAg ICAgICAgICAgIHNvY2tldF9jbG9zZShzb2NrKTsgICAgICAgICAvKiBXZSdyZSBkb25lIHdpdGgg dGhlIHNvY2tldCAqLwotI2Vsc2UKLSAgICAgICAgICAgIGNsb3NlKHNvY2spOwotI2VuZGlmIC8q IFRDUElQTElCICovCi0gICAgICAgICAgICBpZiAobF9zYS5zaW5fYWRkci5zX2FkZHIgIT0gSU5B RERSX0FOWSkgewotICAgICAgICAgICAgICAgIG15eGlwYWRkciA9IG50b2hsKGxfc2Euc2luX2Fk ZHIuc19hZGRyKTsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkobXlpcGFkZHIsKGNoYXIgKilp bmV0X250b2EobF9zYS5zaW5fYWRkciksMjApOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs ImdldGxvY2FsaXBhZGRyIHNldHRpbmcgYnVmIHRvIixteWlwYWRkciwwKTsKLSAgICAgICAgICAg ICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0 dXJuIGdldGxvY2FsaXBhZGRycyhteWlwYWRkcixzaXplb2YobXlpcGFkZHIpLDApOwotI2Vsc2Ug LyogZGF0YWdlbmVyYWwgKi8KLSAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIGRhdGFnZW5lcmFs ICovCi19Ci0KLWludAotZ2V0bG9jYWxpcGFkZHJzKGJ1ZixidWZzeixpbmRleCkKLSAgICBjaGFy ICogYnVmOwotICAgIGludCAgICBidWZzejsKLSAgICBpbnQgICAgaW5kZXg7Ci0vKiBnZXRsb2Nh bGlwYWRkcnMgKi8gewotI2lmbmRlZiBkYXRhZ2VuZXJhbAotICAgIGNoYXIgbG9jYWxob3N0WzI1 Nl07Ci0gICAgc3RydWN0IGhvc3RlbnQgKiBob3N0PU5VTEw7Ci0gICAgc3RydWN0IHNvY2thZGRy X2luIGxfc2E7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIHJfc2E7Ci0gICAgR1NPQ0tOQU1FX1Qg c2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotICAgIGludCByYzsKLSNpZmRlZiBD T01NRU5UCi0gICAgaW50IHNvY2s7Ci0gICAgY2hhciBtZXNzYWdlQnVmWzYwXTsKLSAgICBzdHJ1 Y3QgaW5fYWRkciBsYWRkcjsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICBkZWJ1ZyhGMTAw LCJnZXRsb2NhbGlwYWRkcnMiLCIiLDApOwotICAgIG1lbXNldCgmbF9zYSwwLHNsZW4pOwotICAg IG1lbXNldCgmcl9zYSwwLHNsZW4pOwotCi0gICAgLyogaW5pdCBsb2NhbCBhZGRyZXNzICh0byB6 ZXJvKSAqLwotICAgIGxfc2Euc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKLQotI2lmZGVm IENLR0hOTEhPU1QKLSAgICByYyA9IGdldGhvc3RuYW1lKGxvY2FsaG9zdCwgMjU2KTsKLSAgICBk ZWJ1ZyhGMTEwLCJnZXRsb2NhbGlwYWRkcnMgbG9jYWxob3N0Iixsb2NhbGhvc3QsMCk7Ci0jZWxz ZQotICAgIC8qIFRoaXMgZG9lc24ndCB3b3JrIG9uIHNvbWUgcGxhdGZvcm1zLCBlLmcuIFNvbGFy aXMgKi8KLSAgICByYyA9IDA7Ci0gICAgbG9jYWxob3N0WzBdID0gJ1wwJzsKLSNpZmRlZiBOVAot ICAgIGlmICggd2luc29ja192ZXJzaW9uIDwgMjAgKSB7Ci0gICAgICAgIHJjID0gZ2V0aG9zdG5h bWUobG9jYWxob3N0LCAyNTYpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRsb2NhbGlwYWRkcnMg bG9jYWxob3N0Iixsb2NhbGhvc3QsMCk7Ci0gICAgfQotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYg LyogQ0tHSE5MSE9TVCAqLwotICAgIGlmICghcmMpIHsKLSAgICAgICAgLyogcmVzb2x2ZSBob3N0 IG5hbWUgZm9yIGxvY2FsIGFkZHJlc3MgKi8KLSAgICAgICAgZGVidWcoRjExMCwiZ2V0bG9jYWxp cGFkZHJzIiwiY2FsbGluZyBnZXRob3N0YnluYW1lKCkiLDApOwotICAgICAgICBob3N0ID0gZ2V0 aG9zdGJ5bmFtZShsb2NhbGhvc3QpOwotICAgICAgICAvKiBkZWJ1ZyhGMTExLCJnZXRsb2NhbGlw YWRkcnMiLCJnZXRob3N0YnluYW1lKCkgcmV0dXJuZWQiLGhvc3QpOyAqLwotICAgICAgICBpZiAo aG9zdCkgewotI2lmZGVmIEhBRERSTElTVAotICAgICAgICAgICAgaG9zdCA9IGNrX2NvcHlob3N0 ZW50KGhvc3QpOwotICAgICAgICAgICAgaWYgKCBpbmRleCA8IDAgfHwgaW5kZXggPiA2MyB8fCAh aG9zdC0+aF9hZGRyX2xpc3RbaW5kZXhdICkgewotICAgICAgICAgICAgICAgIGJ1ZlswXSA9ICdc MCc7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGxfc2Euc2luX2FkZHIuc19hZGRyID0KLSAgICAgICAgICAgICAgKigodW5zaWduZWQgbG9u ZyAqKSAoaG9zdC0+aF9hZGRyX2xpc3RbaW5kZXhdKSk7Ci0gICAgICAgICAgICBja3N0cm5jcHko YnVmLChjaGFyICopaW5ldF9udG9hKGxfc2Euc2luX2FkZHIpLDIwKTsKLSAgICAgICAgICAgIGRl YnVnKEYxMTAsImdldGxvY2FsaXBhZGRycyBzZXR0aW5nIGJ1ZiB0byIsYnVmLDApOwotCi0jaWZk ZWYgQ09NTUVOVAotICAgICAgICAgICAgLyogVGhpcyBpcyBmb3IgcmVwb3J0aW5nIG11bHRpcGxl IElQIEFkZHJlc3MgKi8KLSAgICAgICAgICAgIHdoaWxlIChob3N0LT5oX2FkZHJfbGlzdCAmJiBo b3N0LT5oX2FkZHJfbGlzdFswXSkgewotICAgICAgICAgICAgICAgIGxfc2Euc2luX2FkZHIuc19h ZGRyID0KLSAgICAgICAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKikgKGhvc3QtPmhfYWRk cl9saXN0WzBdKSk7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KG1lc3NhZ2VCdWYsCi0gICAg ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWluZXRfbnRvYShsX3NhLnNpbl9hZGRyKSw2MCk7 Ci0gICAgICAgICAgICAgICAgaWYgKHRjcF9hZGRyZXNzKSB7Ci0gICAgICAgICAgICAgICAgICAg IGlmICghc3RyY21wKG1lc3NhZ2VCdWYsdGNwX2FkZHJlc3MpKQotICAgICAgICAgICAgICAgICAg ICAgIGNrc3RybmNweShteWlwYWRkcix0Y3BfYWRkcmVzcywyMCk7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImdldGxvY2FsaXBhZGRycyBpcCBhZGRyZXNz IGxpc3QiLCBtZXNzYWdlQnVmLCAwKTsKLSAgICAgICAgICAgICAgICBob3N0LT5oX2FkZHJfbGlz dCsrOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbHNlICAgLyogSEFE RFJMSVNUICovCi0gICAgICAgICAgICBpZiAoaW5kZXggIT0gMCkgewotICAgICAgICAgICAgICAg IGJ1ZlswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGxfc2Euc2luX2FkZHIuc19hZGRyID0gKigodW5zaWduZWQgbG9uZyAq KSAoaG9zdC0+aF9hZGRyKSk7Ci0gICAgICAgICAgICBja3N0cm5jcHkoYnVmLChjaGFyICopaW5l dF9udG9hKGxfc2Euc2luX2FkZHIpLGJ1ZnN6KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImdl dGxvY2FsaXBhZGRycyBzZXR0aW5nIGJ1ZiB0byIsYnVmLDApOwotI2VuZGlmICAvKiBIQUREUkxJ U1QgKi8KLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfSBlbHNlIGRlYnVnKEYxMTAs Ci0gICAgICAgICAgICAgICAgICAgICAiZ2V0bG9jYWxpcGFkZHJzOiBnZXRob3N0YnluYW1lKCkg ZmFpbGVkIiwKLSAgICAgICAgICAgICAgICAgICAgIGxvY2FsaG9zdCwKLSAgICAgICAgICAgICAg ICAgICAgIDAKLSAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgfQotI2VuZGlmIC8qIGRhdGFn ZW5lcmFsICovCi0gICAgcmV0dXJuKC0xKTsKLX0KLQotI2lmZGVmIFJMT0dDT0RFICAgICAgICAg ICAgICAgICAvKiBUQ1AvSVAgUkxPR0lOIHByb3RvY29sIHN1cHBvcnQgY29kZSAqLwotaW50Ci1y bG9nX25hd3MoKSB7Ci0gICAgc3RydWN0IHJsb2dfbmF3cyB7Ci0gICAgICAgIHVuc2lnbmVkIGNo YXIgaWRbNF07Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IHJvd3MsIGNvbHMsIHlwaXgsIHhwaXg7 Ci0gICAgfSBuYXdzYnVmOwotCi0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKQotICAgICAgcmV0 dXJuIDA7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1JMT0dJTgotI2lmZGVmIENLX0tFUkJFUk9T Ci0gICAgICAgICYmIHR0bnByb3RvICE9IE5QX0s0TE9HSU4KLSAgICAgICAgJiYgdHRucHJvdG8g IT0gTlBfRUs0TE9HSU4KLSAgICAgICAgJiYgdHRucHJvdG8gIT0gTlBfSzVMT0dJTgotICAgICAg ICAmJiB0dG5wcm90byAhPSBOUF9FSzVMT0dJTgotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0g ICAgICAgICApCi0gICAgICByZXR1cm4gMDsKLSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfTkFX UykpCi0gICAgICByZXR1cm4gMDsKLQotICAgIGRlYnVnKEYxMDAsInJsb2dpbiBXaW5kb3cgU2l6 ZSBzZW50IiwiIiwwKTsKLQotICAgIG5hd3NidWYuaWRbMF0gPSBuYXdzYnVmLmlkWzFdID0gMDM3 NzsKLSAgICBuYXdzYnVmLmlkWzJdID0gbmF3c2J1Zi5pZFszXSA9ICdzJzsKLSNpZmRlZiBPUzIK LSAgICBuYXdzYnVmLnJvd3MgPSBodG9ucygodW5zaWduZWQgc2hvcnQpIChWc2NybkdldEhlaWdo dChWVEVSTSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLSh0dF9zdGF0dXNbVlRFUk1dPzE6 MCkpKTsKLSAgICBuYXdzYnVmLmNvbHMgPSBodG9ucygodW5zaWduZWQgc2hvcnQpIFZzY3JuR2V0 V2lkdGgoVlRFUk0pKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgIG5hd3NidWYucm93cyA9IGh0b25z KCh1bnNpZ25lZCBzaG9ydCkgdHRfcm93cyk7Ci0gICAgbmF3c2J1Zi5jb2xzID0gaHRvbnMoKHVu c2lnbmVkIHNob3J0KSB0dF9jb2xzKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBuYXdzYnVmLnlw aXggPSBodG9ucygwKTsgICAgICAgICAgICAvKiB5IHBpeGVscyAqLwotCi0gICAgbmF3c2J1Zi54 cGl4ID0gaHRvbnMoMCk7ICAgICAgICAgICAgLyogeCBwaXhlbHMgKi8KLSAgICBpZiAodHRvbCgo Q0hBUiAqKSgmbmF3c2J1ZiksIHNpemVvZihuYXdzYnVmKSkgPCAwKQotICAgICAgcmV0dXJuKC0x KTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZmRlZiBPUzJPUlVOSVgKLSNkZWZpbmUgUkxPR09V VEJVRgotI2VuZGlmIC8qIE9TMiAqLwotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1ybG9n X2luaShDSEFSICogaG9zdG5hbWUsIGludCBwb3J0LAotICAgICAgICAgc3RydWN0IHNvY2thZGRy X2luICogbF9hZGRyLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiByX2FkZHIpCi0jZWxzZSAvKiBDS19B TlNJQyAqLwotcmxvZ19pbmkoaG9zdG5hbWUsIHBvcnQsIGxfYWRkciwgcl9hZGRyKQotICAgIENI QVIgKiBob3N0bmFtZTsKLSAgICBpbnQgcG9ydDsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiBs X2FkZHI7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luICogcl9hZGRyOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi0vKiBybG9nX2luaSAqLyB7Ci0KLSNpZmRlZiBSTE9HT1VUQlVGCi0gICAgY2hhciBv dXRidWZbNTEyXTsKLSAgICBpbnQgIG91dGJ5dGVzPTA7Ci0jZW5kaWYgLyogUkxPR09VVEJVRiAq LwotICAgIGludCBmbGFnID0gMDsKLSNkZWZpbmUgVEVSTUxFTiAxNgotI2RlZmluZSBDT05TUERM RU4gMTYKLSAgICBDSEFSIGxvY2FsdXNlcltVSURCVUZMRU4rMV07Ci0gICAgQ0hBUiByZW1vdGV1 c2VyW1VJREJVRkxFTisxXTsKLSAgICBpbnQgdXNlcmxlbiA9IDA7Ci0gICAgQ0hBUiB0ZXJtX3Nw ZWVkW1RFUk1MRU4rQ09OU1BETEVOKzFdOwotI2lmZGVmIENPTkdTUEQKLSAgICBsb25nIGNvbnNw ZCA9IC0xTDsKLSNlbmRpZiAvKiBDT05HU1BEICovCi0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGlu dCB0dF90eXBlLCBtYXhfdHQ7Ci0gICAgZXh0ZXJuIHN0cnVjdCB0dF9pbmZvX3JlYyB0dF9pbmZv W107Ci0jZW5kaWYgLyogT1MyICovCi0gICAgaW50IGksIG47Ci0KLSAgICBpbnQgcmMgPSAwOwot ICAgIHRuX3Jlc2V0KCk7ICAgICAgICAgICAgICAgICAvKiBUaGlzIGNhbGwgd2lsbCByZXNldCBh bGwgb2YgdGhlIFRlbG5ldCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBv cHRpb25zIGFuZCB0aGVuIHF1aXQuICBXZSBuZWVkIHRvIGRvICAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiB0aGlzIHNpbmNlIHdlIHVzZSB0aGUgVGVsbmV0IG9wdGlvbnMg ICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0byBob2xkIHZhcmlvdXMg c3RhdGUgaW5mb3JtYXRpb24gICAgICAqLwotICAgIGR1cGxleCA9IDA7ICAgICAgICAgICAgICAg ICAvKiBSbG9naW4gaXMgYWx3YXlzIHJlbW90ZSBlY2hvICovCi0gICAgcmxvZ19pbmJhbmQgPSAw OwotCi0jaWZkZWYgQ0tfVFRHV1NJWgotLyoKLSAgQnV0IGNvbXB1dGUgdGhlIHZhbHVlcyBhbnl3 YXkgYmVmb3JlIHRoZSBmaXJzdCByZWFkIHNpbmNlIHRoZSBvdXQtCi0gIG9mLWJhbmQgTkFXUyBy ZXF1ZXN0IHdvdWxkIGFycml2ZSBiZWZvcmUgdGhlIGZpcnN0IGRhdGEgYnl0ZSAoTlVMTCkuCi0q LwotI2lmZGVmIE9TMgotICAgIC8qIENvbnNvbGUgdGVybWluYWwgc2NyZWVuIHJvd3MgYW5kIGNv bHVtbnMgKi8KLSAgICBkZWJ1ZyhGMTAxLCJybG9nX2luaSB0dF9yb3dzIDEiLCIiLFZzY3JuR2V0 SGVpZ2h0KFZURVJNKQotICAgICAgICAgICAtKHR0X3N0YXR1c1tWVEVSTV0/MTowKSk7Ci0gICAg ZGVidWcoRjEwMSwicmxvZ19pbmkgdHRfY29scyAxIiwiIixWc2NybkdldFdpZHRoKFZURVJNKSk7 Ci0gICAgLyogTm90IGtub3duIHlldCAqLwotICAgIGlmIChWc2NybkdldFdpZHRoKFZURVJNKSA8 IDAgfHwKLSAgICAgICAgVnNjcm5HZXRIZWlnaHQoVlRFUk0pLSh0dF9zdGF0dXNbVlRFUk1dPzE6 MCkgPCAwKSB7Ci0gICAgICAgIHR0Z3dzaXooKTsgICAgICAgICAgICAgICAgICAgICAgLyogVHJ5 IHRvIGdldCBzY3JlZW4gZGltZW5zaW9ucyAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLAotICAg ICAgICAgICJybG9nX2luaSB0dF9yb3dzIDIiLAotICAgICAgICAgICIiLAotICAgICAgICAgIFZz Y3JuR2V0SGVpZ2h0KFZURVJNKS0odHRfc3RhdHVzW1ZURVJNXT8xOjApCi0gICAgICAgICAgKTsK LSAgICBkZWJ1ZyhGMTAxLCJybG9nX2luaSB0dF9jb2xzIDIiLCIiLFZzY3JuR2V0V2lkdGgoVlRF Uk0pKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgIGRlYnVnKEYxMDEsInJsb2dfaW5pIHR0X3Jvd3Mg MSIsIiIsdHRfcm93cyk7Ci0gICAgZGVidWcoRjEwMSwicmxvZ19pbmkgdHRfY29scyAxIiwiIix0 dF9jb2xzKTsKLSAgICBpZiAodHRfcm93cyA8IDAgfHwgdHRfY29scyA8IDApIHsgICAvKiBOb3Qg a25vd24geWV0ICovCi0gICAgICAgIHR0Z3dzaXooKTsgICAgICAgICAgICAgICAgICAgICAgLyog VHJ5IHRvIGZpbmQgb3V0ICovCi0gICAgfQotICAgIGRlYnVnKEYxMDEsInJsb2dfaW5pIHR0X3Jv d3MgMiIsIiIsdHRfcm93cyk7Ci0gICAgZGVidWcoRjEwMSwicmxvZ19pbmkgdHRfY29scyAyIiwi Iix0dF9jb2xzKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0K LSAgICB0dGZsdWkoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBieSBmbHVz aGluZyB0aGUgYnVmZmVycyAqLwotCi0gICAgcmxvZ19tb2RlID0gUkxfQ09PS0VEOwotCi0gICAg LyogRGV0ZXJtaW5lIHRoZSB1c2VyJ3MgbG9jYWwgdXNlcm5hbWUgLi4uICovCi0KLSAgICBsb2Nh bHVzZXJbMF0gPSAnXDAnOwotI2lmZGVmIE5UCi0gICAgewotICAgICAgICBjaGFyIGxvY2FsdWlk W1VJREJVRkxFTisxXTsKLSAgICAgICAgY2tzdHJuY3B5KChjaGFyICopbG9jYWx1c2VyLChjaGFy ICopR2V0TG9jYWxVc2VyKCksVUlEQlVGTEVOKTsKLSAgICB9Ci0KLSAgICBpZiAoICFsb2NhbHVz ZXJbMF0gKQotI2VuZGlmIC8qIE5UICovCi0gICAgewotICAgICAgICBjaGFyICogdXNlciA9IGdl dGVudigiVVNFUiIpOwotICAgICAgICBpZiAoIXVzZXIpCi0gICAgICAgICAgdXNlciA9ICIiOwot ICAgICAgICB1c2VybGVuID0gc3RybGVuKHVzZXIpOwotICAgICAgICBkZWJ1ZyhGMTExLCJybG9n aW4gZ2V0ZW52KFVTRVIpIix1c2VyLHVzZXJsZW4pOwotICAgICAgICBja3N0cm5jcHkoKGNoYXIg Kilsb2NhbHVzZXIsdXNlcixVSURCVUZMRU4pOwotICAgICAgICBkZWJ1ZyhGMTEwLCJybG9nX2lu aSBsb2NhbHVzZXIgMSIsbG9jYWx1c2VyLDApOwotICAgIH0KLSAgICBpZiAoICFsb2NhbHVzZXJb MF0gKQotICAgICAgICBzdHJjcHkoKGNoYXIgKilsb2NhbHVzZXIsInVua25vd24iKTsKLSAgICBl bHNlIGlmIChja19sY25hbWUpIHsKLSAgICAgICAgY2tsb3dlcigoY2hhciAqKWxvY2FsdXNlcik7 Ci0gICAgICAgIGRlYnVnKEYxMTAsInJsb2dfaW5pIGxvY2FsdXNlciAyIixsb2NhbHVzZXIsMCk7 Ci0gICAgfQotCi0gICAgLyogQW5kIHRoZSB1c2VybmFtZSB0byBsb2dpbiB3aXRoICovCi0gICAg aWYgKHVpZGJ1ZlswXSkgewotICAgICAgICBja3N0cm5jcHkoKGNoYXIgKilyZW1vdGV1c2VyLHVp ZGJ1ZixVSURCVUZMRU4pOwotICAgICAgICBkZWJ1ZyhGMTEwLCJybG9nX2luaSByZW1vdGV1c2Vy IDEiLHJlbW90ZXVzZXIsMCk7Ci0gICAgfSBlbHNlIGlmIChsb2NhbHVzZXJbMF0pIHsKLSAgICAg ICAgY2tzdHJuY3B5KChjaGFyICopcmVtb3RldXNlciwoY2hhciAqKWxvY2FsdXNlcixVSURCVUZM RU4pOwotICAgICAgICBkZWJ1ZyhGMTEwLCJybG9nX2luaSByZW1vdGV1c2VyIDIiLHJlbW90ZXVz ZXIsMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVtb3RldXNlclswXSA9ICdcMCc7Ci0gICAg ICAgIGRlYnVnKEYxMTAsInJsb2dfaW5pIHJlbW90ZXVzZXIgMyIscmVtb3RldXNlciwwKTsKLSAg ICB9Ci0gICAgaWYgKGNrX2xjbmFtZSkKLSAgICAgIGNrbG93ZXIoKGNoYXIgKilyZW1vdGV1c2Vy KTsKLSAgICBkZWJ1ZyhGMTEwLCJybG9nX2luaSByZW1vdGV1c2VyIDQiLHJlbW90ZXVzZXIsMCk7 Ci0KLSAgICAvKiBUaGUgY29tbWFuZCB0byBpc3N1ZSBpcyB0aGUgdGVybWluYWwgdHlwZSBhbmQg c3BlZWQgKi8KLSAgICB0ZXJtX3NwZWVkWzBdID0gJ1wwJzsKLSAgICBpZiAodG5fdGVybSkgeyAg ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVMTkVUIFRFUk1JTkFMLVRZUEUgdmFsdWUgKi8K LSAgICAgICAgaWYgKCp0bl90ZXJtKSB7ICAgICAgICAgICAgICAgICAvKiAoaWYgYW55KSB0YWtl cyBwcmVjZWRlbmNlLiAqLwotICAgICAgICAgICAgY2tzdHJuY3B5KChjaGFyICopdGVybV9zcGVl ZCwgdG5fdGVybSwgVEVSTUxFTik7Ci0gICAgICAgICAgICBmbGFnID0gMTsKLSAgICAgICAgfQot ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSB0aGUg bG9jYWwgdGVybWluYWwgdHlwZSAqLwotI2lmZGVmIE9TMgotICAgICAgICAvKiBJbiB0ZXJtaW5h bC1lbXVsYXRpbmcgdmVyc2lvbnMsIGl0J3MgdGhlIFNFVCBURVJNIFRZUEUgdmFsdWUgKi8KLSAg ICAgICAgY2tzdHJuY3B5KHRlcm1fc3BlZWQsICh0dF90eXBlID49IDAgJiYgdHRfdHlwZSA8PSBt YXhfdHQpID8KLSAgICAgICAgICAgICAgICB0dF9pbmZvW3R0X3R5cGVdLnhfbmFtZSA6ICJuZXR3 b3JrIiwgVEVSTUxFTik7Ci0jZWxzZQotICAgICAgICAvKiBJbiB0aGUgb3RoZXJzLCB3ZSBqdXN0 IGxvb2sgYXQgdGhlIFRFUk0gZW52aXJvbm1lbnQgdmFyaWFibGUgKi8KLSAgICAgICAgewotICAg ICAgICAgICAgY2hhciAqcCA9IGdldGVudigiVEVSTSIpOwotICAgICAgICAgICAgaWYgKHApCi0g ICAgICAgICAgICAgIGNrc3RybmNweSgoY2hhciAqKXRlcm1fc3BlZWQscCxURVJNTEVOKTsKLSAg ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgdGVybV9zcGVlZFswXSA9ICdcMCc7Ci0jaWZk ZWYgVk1TCi0gICAgICAgICAgICBmb3IgKHAgPSAoY2hhciAqKSB0ZXJtX3NwZWVkOyAqcDsgcCsr KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCpwID09ICctJyAmJiAoIXN0cmNtcChwLCItODAiKSB8 fCAhc3RyY21wKHAsIi0xMzIiKSkpCi0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICBlbHNlIGlmIChpc3VwcGVyKCpwKSkKLSAgICAgICAgICAgICAgICAgICpwID0gdG9s b3dlcigqcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqcCA9ICdcMCc7Ci0jZW5kaWYg LyogVk1TICovCi0gICAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0gICAgbiA9IHN0 cmxlbigoY2hhciAqKXRlcm1fc3BlZWQpOwotICAgIGlmIChuID4gMCkgeyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFdlIGhhdmUgYSB0ZXJtaW5hbCB0eXBlICovCi0gICAgICAgIGlmICghZmxh ZykgeyAgICAgICAgICAgICAgICAgICAgLyogSWYgbm90IHVzZXItc3BlY2lmaWVkICovCi0gICAg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSAgICAgLyogdGhlbiBsb3dlcmNhc2UgaXQu ICAgICovCi0gICAgICAgICAgICAgIGlmIChpc3VwcGVyKHRlcm1fc3BlZWRbaV0pKQotICAgICAg ICAgICAgICAgIHRlcm1fc3BlZWRbaV0gPSB0b2xvd2VyKHRlcm1fc3BlZWRbaV0pOwotICAgICAg ICB9Ci0gICAgICAgIGRlYnVnKEYxMTAsInJsb2dfaW5pIHRlcm1fc3BlZWQgMSIsdGVybV9zcGVl ZCwwKTsKLQotI2lmZGVmIENPTkdTUEQKLSAgICAgICAgLyogY29uc3BkKCkgaXMgbm90IHlldCBk ZWZpbmVkIGluIGFsbCBjayp0aW8uYyBtb2R1bGVzICovCi0gICAgICAgIGNvbnNwZCA9IGNvbmdz cGQoKTsKLSAgICAgICAgaWYgKGNvbnNwZCA+IDBMKSB7Ci0gICAgICAgICAgICBja3N0cm5jYXQo KGNoYXIgKil0ZXJtX3NwZWVkLCIvIixzaXplb2YodGVybV9zcGVlZCkpOwotICAgICAgICAgICAg Y2tzdHJuY2F0KChjaGFyICopdGVybV9zcGVlZCxja2x0b2EoY29uc3BkKSxzaXplb2YodGVybV9z cGVlZCkpOwotICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBDT05HU1BEICovCi0gICAgICAgICAg Y2tzdHJuY2F0KChjaGFyICopdGVybV9zcGVlZCwiLzE5MjAwIixzaXplb2YodGVybV9zcGVlZCkp OwotICAgICAgICBkZWJ1ZyhGMTEwLCJybG9nX2luaSB0ZXJtX3NwZWVkIDIiLHRlcm1fc3BlZWQs MCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGVybV9zcGVlZFswXSA9ICdcMCc7Ci0gICAgICAg IGRlYnVnKEYxMTAsInJsb2dfaW5pIHRlcm1fc3BlZWQgMyIsdGVybV9zcGVlZCwwKTsKLSAgICB9 Ci0KLSNpZmRlZiBDS19LRVJCRVJPUwotICAgIGlmICh0dG5wcm90byA9PSBOUF9LNExPR0lOIHx8 IHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8Ci0gICAgICAgIHR0bnByb3RvID09IE5QX0s1TE9H SU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsKLSAgICAgICAgaW50IGt2ZXIsIGVuY3J5 cHQsIHJjOwotICAgICAgICBzd2l0Y2ggKHR0bnByb3RvKSB7Ci0gICAgICAgICAgY2FzZSBOUF9L NExPR0lOOgotICAgICAgICAgICAga3ZlciA9IDQ7Ci0gICAgICAgICAgICBlbmNyeXB0ID0gMDsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgTlBfRUs0TE9HSU46Ci0gICAgICAg ICAgICBrdmVyID0gNDsKLSAgICAgICAgICAgIGVuY3J5cHQgPSAxOwotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgY2FzZSBOUF9LNUxPR0lOOgotICAgICAgICAgICAga3ZlciA9IDU7Ci0g ICAgICAgICAgICBlbmNyeXB0ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh c2UgTlBfRUs1TE9HSU46Ci0gICAgICAgICAgICBrdmVyID0gNTsKLSAgICAgICAgICAgIGVuY3J5 cHQgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg ICBrdmVyID0gMDsKLSAgICAgICAgICAgIGVuY3J5cHQgPSAwOwotICAgICAgICB9Ci0gICAgICAg IHJjID0gY2tfa3JiX3Jsb2dpbihob3N0bmFtZSwgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxvY2FsdXNlciwgcmVtb3RldXNlciwgdGVybV9zcGVlZCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxfYWRkciwgcl9hZGRyLCBrdmVyLCBlbmNyeXB0KTsKLSAgICAgICAgaWYg KCFyYykgeyAgICAgICAgICAgICAgICAgICAgICAvKiBzdWNjZXNzICovCi0gICAgICAgICAgICBU RUxPUFRfTUUoVEVMT1BUX05BV1MpID0gMTsKLSAgICAgICAgICAgIHJjID0gcmxvZ19uYXdzKCk7 Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHJjKTsKLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBD S19LRVJCRVJPUyAqLwotICAgIGlmICh0dG5wcm90byA9PSBOUF9STE9HSU4pIHsKLSNpZmRlZiBS TE9HT1VUQlVGCi0gICAgICAgIC8qCi0gICAgICAgICAqICBUaGUgcmNtZHMgc3RhcnQgdGhlIGNv bm5lY3Rpb24gd2l0aCBhIHNlcmllcyBvZiBpbml0IGRhdGE6Ci0gICAgICAgICAqCi0gICAgICAg ICAqICAgIGEgcG9ydCBudW1iZXIgdXBvbiB3aGljaCBjbGllbnQgaXMgbGlzdGVuaW5nIGZvciBz dGRlcnIgZGF0YQotICAgICAgICAgKiAgICB0aGUgdXNlcidzIG5hbWUgb24gdGhlIGNsaWVudCBt YWNoaW5lCi0gICAgICAgICAqICAgIHRoZSB1c2VyJ3MgbmFtZSBvbiB0aGUgc2VydmVyIG1hY2hp bmUKLSAgICAgICAgICogICAgdGhlIHRlcm1pbmFsX3R5cGUvc3BlZWQgb3IgY29tbWFuZCB0byBl eGVjdXRlCi0gICAgICAgICAqLwotICAgICAgICBvdXRidWZbb3V0Ynl0ZXMrK10gPSAwOwotICAg ICAgICBzdHJjcHkoKGNoYXIgKilvdXRidWYrb3V0Ynl0ZXMsKGNoYXIgKilsb2NhbHVzZXIpOwot ICAgICAgICBvdXRieXRlcyArPSBzdHJsZW4oKGNoYXIgKilsb2NhbHVzZXIpICsgMTsKLSAgICAg ICAgc3RyY3B5KChjaGFyICopb3V0YnVmK291dGJ5dGVzLChjaGFyICopcmVtb3RldXNlcik7Ci0g ICAgICAgIG91dGJ5dGVzICs9IHN0cmxlbigoY2hhciAqKXJlbW90ZXVzZXIpICsgMTsKLSAgICAg ICAgc3RyY3B5KChjaGFyICopb3V0YnVmK291dGJ5dGVzLChjaGFyICopdGVybV9zcGVlZCk7Ci0g ICAgICAgIG91dGJ5dGVzICs9IHN0cmxlbigoY2hhciAqKXRlcm1fc3BlZWQpICsgMTsKLSAgICAg ICAgcmMgPSB0dG9sKChDSEFSICopb3V0YnVmLG91dGJ5dGVzKTsKLSNlbHNlIC8qIFJMT0dPVVRC VUYgKi8KLSAgICAgICAgdHRvYygwKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIGFu IGluaXRpYWwgTlVMIGFzIHdha2UtdXAgKi8KLSAgICAgICAgLyogU2VuZCBlYWNoIHZhcmlhYmxl IHdpdGggdGhlIHRyYWlsaW5nIE5VTCAqLwotICAgICAgICByYyA9IHR0b2wobG9jYWx1c2VyLHN0 cmxlbigoY2hhciAqKWxvY2FsdXNlcikrMSk7Ci0gICAgICAgIGlmIChyYyA+IDApCi0gICAgICAg ICAgcmMgPSB0dG9sKHJlbW90ZXVzZXIsc3RybGVuKChjaGFyICopcmVtb3RldXNlcikrMSk7Ci0g ICAgICAgIGlmIChyYyA+IDApCi0gICAgICAgICAgcmMgPSB0dG9sKHRlcm1fc3BlZWQsc3RybGVu KChjaGFyICopdGVybV9zcGVlZCkrMSk7Ci0jZW5kaWYgLyogUkxPR09VVEJVRiAqLwotCi0gICAg ICAgIC8qIE5vdyB3ZSBhcmUgc3VwcG9zZWQgdG8gZ2V0IGJhY2sgYSBzaW5nbGUgTlVMIGFzIGNv bmZpcm1hdGlvbiAqLwotICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIHJjID0gdHRpbmMoNjAp OwotICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gZmlyc3QgdHRpbmMiLCIiLHJjKTsKLSAgICAg ICAgaWYgKHJjID4gMCkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwicmxvZ2luIHR0aW5jIDEi LCIiLHJjKTsKLSAgICAgICAgICAgIHByaW50ZigKLSAgICAgICAgICAgICAgICJSbG9naW4gcHJv dG9jb2wgZXJyb3IgLSAweCV4IHJlY2VpdmVkIGluc3RlYWQgb2YgMHgwMFxuIiwgcmMpOwotICAg ICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfSBlbHNlIGlmIChyYyA8IDApIHsKLSAgICAg ICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiB0dGluYyBlcnJubyIsIiIsZXJybm8pOwotICAgICAg ICAgICAgLyogcHJpbnRmKCJOZXR3b3JrIGVycm9yOiAlZFxuIiwgZXJybm8pOyAqLwotICAgICAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0K LS8qIHR3byBjb250cm9sIG1lc3NhZ2VzIGFyZSBkZWZpbmVkOgotCi0gICBhIGRvdWJsZSBmbGFn IGJ5dGUgb2YgJ28nIGluZGljYXRlcyBhIG9uZS1ieXRlIG1lc3NhZ2Ugd2hpY2ggaXMKLSAgIGlk ZW50aWNhbCB0byB3aGF0IHdhcyBvbmNlIGNhcnJpZWQgb3V0IG9mIGJhbmQuCi0KLSAgIGEgZG91 YmxlIGZsYWcgYnl0ZSBvZiAncScgaW5kaWNhdGVzIGEgemVyby1ieXRlIG1lc3NhZ2UuICBUaGlz Ci0gICBtZXNzYWdlIGlzIGludGVycHJldGVkIGFzIHR3byBcMzc3IGRhdGEgYnl0ZXMuICBUaGlz IGlzIGp1c3QgYQotICAgcXVvdGUgcnVsZSBzbyB0aGF0IGJpbmFyeSBkYXRhIGZyb20gdGhlIHNl cnZlciBkb2VzIG5vdCBjb25mdXNlIHRoZQotICAgY2xpZW50LiAgKi8KLQotaW50IAotcmxvZ19j dHJsKGNwLCBuKQotICAgICB1bnNpZ25lZCBjaGFyICpjcDsKLSAgICAgaW50IG47Ci17Ci0gICAg aWYgKChuID49IDUpICYmIChjcFsyXSA9PSAnbycpICYmIChjcFszXSA9PSAnbycpKSB7Ci0gICAg ICAgIGlmIChybG9nX29vYigmY3BbNF0sMSkpCi0gICAgICAgICAgICByZXR1cm4oLTUpOwotICAg ICAgICByZXR1cm4oNSk7Ci0gICAgfSBlbHNlIGlmICgobiA+PSA0KSAmJiAoY3BbMl0gPT0gJ3En KSAmJiAoY3BbM10gPT0gJ3EnKSkgewotICAgICAgICAvKiB0aGlzIGlzIHNvbWV3aGF0IG9mIGEg aGFjayAqLwotICAgICAgICBjcFsyXSA9ICdcMzc3JzsKLSAgICAgICAgY3BbM10gPSAnXDM3Nyc7 Ci0gICAgICAgIHJldHVybigyKTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi1zdGF0aWMg aW50Ci1ybG9nX29vYihvb2JkYXRhLCBjb3VudCkgQ0hBUiAqIG9vYmRhdGE7IGludCBjb3VudDsg ewotICAgIGludCBpOwotICAgIGludCBmbHVzaCA9IDA7Ci0KLSAgICBkZWJ1ZyhGMTExLCJybG9n aW4gb3V0X29mX2JhbmQiLCJjb3VudCIsY291bnQpOwotCi0gICAgZm9yIChpID0gMDsgaTxjb3Vu dDsgaSsrKSAgIHsKLSAgICAgICAgZGVidWcoRjEwMSwicmxvZ2luIG91dF9vZl9iYW5kIiwiIixv b2JkYXRhW2ldKTsKLSAgICAgICAgICAgICAgICBpZiAob29iZGF0YVtpXSAmIDB4MDEpCi0gICAg ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAob29iZGF0YVtpXSAm IDB4MDIpIHsgLyogRmx1c2ggQnVmZmVyZWQgRGF0YSBub3QgeWV0IGRpc3BsYXllZCAqLwotICAg ICAgICAgICAgZGVidWcoRjEwMSwicmxvZ2luIEZsdXNoIEJ1ZmZlcmVkIERhdGEgY29tbWFuZCIs IiIsb29iZGF0YVtpXSk7Ci0KLSAgICAgICAgICAgIC8qIE9ubHkgZmx1c2ggdGhlIGRhdGEgaWYg aW4gZmFjdCB3ZSBhcmUgaW4gYSBtb2RlIHRoYXQgd29uJ3QgKi8KLSAgICAgICAgICAgIC8qIGdl dCBvdXQgb2Ygc3luYy4gIEllLCBub3Qgd2hlbiB3ZSBhcmUgaW4gcHJvdG9jb2wgbW9kZS4gICAg Ki8KLSAgICAgICAgICAgIHN3aXRjaCAoIHdoYXQgKSB7Ci0gICAgICAgICAgICBjYXNlIFdfTk9U SElORzoKLSAgICAgICAgICAgIGNhc2UgV19DT05ORUNUOgotICAgICAgICAgICAgY2FzZSBXX0NP TU1BTkQ6Ci0gICAgICAgICAgICAgICAgaWYgKCBybG9nX2luYmFuZCApCi0gICAgICAgICAgICAg ICAgICAgIGZsdXNoID0gMTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg ICAgIHR0Zmx1aSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0gICAgICAgIGlmIChvb2JkYXRhW2ldICYgMHgxMCkgeyAgICAgICAgLyogU3dpdGNo IHRvIFJBVyBtb2RlICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gUmF3IE1vZGUg Y29tbWFuZCIsIiIsb29iZGF0YVtpXSk7Ci0gICAgICAgICAgICBybG9nX21vZGUgPSBSTF9SQVc7 Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob29iZGF0YVtpXSAmIDB4MjApIHsgICAgICAgIC8q IFN3aXRjaCB0byBDT09LRUQgbW9kZSAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwicmxvZ2lu IENvb2tlZCBNb2RlIGNvbW1hbmQiLCIiLG9vYmRhdGFbaV0pOwotICAgICAgICAgICAgcmxvZ19t b2RlID0gUkxfQ09PS0VEOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvb2JkYXRhW2ldICYgMHg4 MCkKLSAgICAgICAgeyAgICAgICAgLyogU2VuZCBXaW5kb3cgU2l6ZSBJbmZvICovCi0gICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gV2luZG93IFNpemUgY29tbWFuZCIsIiIsb29iZGF0YVtp XSk7Ci0gICAgICAgICAgICAvKiBSZW1lbWJlciB0byBzZW5kIFdTIEluZm8gd2hlbiBXaW5kb3cg U2l6ZSBjaGFuZ2VzICovCi0gICAgICAgICAgICBpZiAoICFURUxPUFRfTUUoVEVMT1BUX05BV1Mp ICkgewotICAgICAgICAgICAgICAgIFRFTE9QVF9NRShURUxPUFRfTkFXUykgPSAxOwotICAgICAg ICAgICAgICAgIHJsb2dfbmF3cygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot ICAgIHJldHVybihmbHVzaCk7Ci19Ci0jaWZuZGVmIFRDUElQTElCCi1zdGF0aWMgU0lHVFlQCi1y bG9nb29iaChzaWcpIGludCBzaWc7IHsKLSNpZmRlZiBTT0xBUklTCi0gICAgY2hhciAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogT3Igc2hvdWxkIGl0IGJlIGNoYXIgZm9yIGFsbD8g Ki8KLSNlbHNlCi0gICAgQ0hBUgotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSAgICAgIG9vYmRhdGE7 Ci0KLSAgICAvKiBpbnQgIGNvdW50ID0gMDsgKi8gLyogKG5vdCB1c2VkKSAqLwotCi0gICAgd2hp bGUgKHJlY3YodHR5ZmQsICZvb2JkYXRhLCAxLCBNU0dfT09CKSA8IDApIHsKLSAgICAgIC8qCi0g ICAgICAgKiBXZSBuZWVkIHRvIGRvIHNvbWUgc3BlY2lhbCBwcm9jZXNzaW5nIGhlcmUuCi0gICAg ICAgKiBKdXN0IGluIGNhc2UgdGhlIHNvY2tldCBpcyBibG9ja2VkIGZvciBpbnB1dAotICAgICAg ICoKLSAgICAgICAqLwotICAgICAgICBzd2l0Y2ggKGVycm5vKSB7Ci0gICAgICAgICAgY2FzZSBF V09VTERCTE9DSzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwicmxvZ2lu IG91dF9vZl9iYW5kIiwiIixvb2JkYXRhKTsKLSAgICBpZiAob29iZGF0YSA9PSAweDAyKSB7ICAg ICAgLyogRmx1c2ggQnVmZmVyZWQgRGF0YSBub3QgeWV0IGRpc3BsYXllZCAqLwotICAgICAgICBk ZWJ1ZyhGMTAxLCJybG9naW4gRmx1c2ggQnVmZmVyZWQgRGF0YSBjb21tYW5kIiwiIixvb2JkYXRh KTsKLSAgICAgICAgbmV0Zmx1aSgpOwotICAgIH0KLSAgICBpZiAob29iZGF0YSAmIDB4MTApIHsg ICAgICAgICAgICAgICAvKiBTd2l0Y2ggdG8gcmF3IG1vZGUgKi8KLSAgICAgICAgZGVidWcoRjEw MSwicmxvZ2luIFJhdyBNb2RlIGNvbW1hbmQiLCIiLG9vYmRhdGEpOwotICAgICAgICBybG9nX21v ZGUgPSBSTF9SQVc7Ci0gICAgfQotICAgIGlmIChvb2JkYXRhICYgMHgyMCkgeyAgICAgICAgICAg ICAgIC8qIFN3aXRjaCB0byBjb29rZWQgbW9kZSAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJybG9n aW4gQ29va2VkIE1vZGUgY29tbWFuZCIsIiIsb29iZGF0YSk7Ci0gICAgICAgIHJsb2dfbW9kZSA9 IFJMX0NPT0tFRDsKLSAgICB9Ci0gICAgaWYgKG9vYmRhdGEgJiAweDgwKSB7ICAgICAgICAgICAg ICAgICAvKiBTZW5kIFdpbmRvdyBTaXplIEluZm8gKi8KLSAgICAgICAgZGVidWcoRjEwMSwicmxv Z2luIFdpbmRvdyBTaXplIGNvbW1hbmQiLCIiLG9vYmRhdGEpOwotICAgICAgICAvKiBSZW1lbWJl ciB0byBzZW5kIFdTIEluZm8gd2hlbiBXaW5kb3cgU2l6ZSBjaGFuZ2VzICovCi0gICAgICAgIGlm ICggIVRFTE9QVF9NRShURUxPUFRfTkFXUykgKSB7Ci0gICAgICAgICAgICBURUxPUFRfTUUoVEVM T1BUX05BV1MpID0gMTsKLSAgICAgICAgICAgIHJsb2dfbmF3cygpOwotICAgICAgICB9Ci0gICAg fQotfQotI2VuZGlmIC8qIFRDUElQTElCICovCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLQotLyog U2VuZCBuZXR3b3JrIEJSRUFLICovCi0vKgotICBSZXR1cm5zIC0xIG9uIGVycm9yLCAwIGlmIG5v dGhpbmcgaGFwcGVucywgMSBpZiBCUkVBSyBzZW50IHN1Y2Nlc3NmdWxseS4KLSovCi1pbnQKLW5l dGJyZWFrKCkgewotICAgIENIQVIgYnVmWzNdOwotICAgIGlmICh0dG5ldCA9PSBORVRfVENQQikg ewotICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfVEVMTkVUKSB7Ci0jaWZkZWYgVE5DT0RFCi0g ICAgICAgICAgICBidWZbMF0gPSAoQ0hBUikgSUFDOyBidWZbMV0gPSAoQ0hBUikgQlJFQUs7IGJ1 ZlsyXSA9IChDSEFSKSAwOwotICAgICAgICAgICAgaWYgKAotI2lmZGVmIE9TMgotICAgICAgICAg ICAgICAgIG5ldHRvbCgoY2hhciAqKSBidWYsIDIpCi0jZWxzZQotICAgICAgICAgICAgICAgIHR0 b2woYnVmLCAyKQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIDwgMikKLSAgICAg ICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzIHx8 IGRlYmxvZykgewotICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyIHRuX21zZ1tdOwotICAgICAg ICAgICAgICAgIGNrbWFrbXNnKHRuX21zZyxUTl9NU0dfTEVOLCJURUxORVQgU0VOVCAiLFRFTENN RChCUkVBSyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCk7Ci0gICAgICAg ICAgICAgICAgZGVidWcoRjEwMSx0bl9tc2csIiIsQlJFQUspOwotICAgICAgICAgICAgICAgIGlm IChkZWJzZXMgfHwgdG5fZGViKSB0bl9kZWJ1Zyh0bl9tc2cpOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgcmV0dXJuKDEpOwotI2Vsc2UKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldGJy ZWFrIG5vIFROQ09ERSIsIiIsMCk7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyog VE5DT0RFICovCi0gICAgICAgIH0KLSAgICAgICAgLyogSW5zZXJ0IG90aGVyIFRDUC9JUCBwcm90 b2NvbHMgaGVyZSAqLwotICAgIH0KLSAgICAvKiBJbnNlcnQgb3RoZXIgbmV0d29ya3MgaGVyZSAq LwotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLQotI2lmZGVmIE5F VENPTk4KLSNpZmRlZiBTVU5YMjUKLS8qCi0gIFN1bkxpbmsgWC4yNSBzdXBwb3J0IGJ5IE1hcmNl bGxvIEZydXRpZywgQ2F0aG9saWMgVW5pdmVyc2l0eSwKLSAgUmlvIGRlIEphbmVpcm8sIEJyYXpp bCwgMTk5MC4KLSovCi0KLS8qIFBBRCBYLjMsIFguMjggYW5kIFguMjkgc3VwcG9ydCAqLwotCi1z dGF0aWMgQ0hBUiB4MjllcnJbTUFYUEFEUEFSTVMrM10gPSB7IFgyOV9FUlJPUiwgSU5WQUxJRF9Q QURfUEFSTSwgJ1wwJyB9OwotCi0vKiBJbml0aWFsaXplIFBBRCAqLwotCi1leHRlcm4gQ0hBUiBw YWRwYXJtc1tdOwotCi1WT0lECi1pbml0cGFkKCkgewotICBwYWRwYXJtc1tQQURfQlJFQUtfQ0hB UkFDVEVSXSAgICAgICAgPSAwOyAgLyogQnJlYWsgY2hhcmFjdGVyICovCi0gIHBhZHBhcm1zW1BB RF9FU0NBUEVdICAgICAgICAgICAgICAgICA9IDE7ICAvKiBFc2NhcGUgcGVybWl0dGVkICovCi0g IHBhZHBhcm1zW1BBRF9FQ0hPXSAgICAgICAgICAgICAgICAgICA9IDE7ICAvKiBLZXJtaXQgUEFE IGRvZXMgZWNobyAqLwotICBwYWRwYXJtc1tQQURfREFUQV9GT1JXQVJEX0NIQVJdICAgICAgPSAy OyAgLyogZm9yd2FyZCBjaGFyYWN0ZXIgQ1IgKi8KLSAgcGFkcGFybXNbUEFEX0RBVEFfRk9SV0FS RF9USU1FT1VUXSAgID0gMDsgIC8qIG5vIHRpbWVvdXQgZm9yd2FyZCBjb25kaXRpb24gKi8KLSAg cGFkcGFybXNbUEFEX0ZMT1dfQ09OVFJPTF9CWV9QQURdICAgID0gMDsgIC8qIG5vdCB1c2VkICov Ci0gIHBhZHBhcm1zW1BBRF9TVVBQUkVTU0lPTl9PRl9TSUdOQUxTXSA9IDE7ICAvKiBhbGxvdyBQ QUQgc2VydmljZSBzaWduYWxzICovCi0gIHBhZHBhcm1zW1BBRF9CUkVBS19BQ1RJT05dICAgICAg ICAgICA9IDIxOyAvKiBicmsgYWN0aW9uOiBJTlQgcGsgKyBicmsgaW5kKi8KLSAgcGFkcGFybXNb UEFEX1NVUFBSRVNTSU9OX09GX0RBVEFdICAgID0gMDsgIC8qIG5vIHN1cHJlc3Npb24gb2YgdXNl ciBkYXRhICovCi0gIHBhZHBhcm1zW1BBRF9QQURESU5HX0FGVEVSX0NSXSAgICAgICA9IDA7ICAv KiBubyBwYWRkaW5nIGFmdGVyIENSICovCi0gIHBhZHBhcm1zW1BBRF9MSU5FX0ZPTERJTkddICAg ICAgICAgICA9IDA7ICAvKiBubyBsaW5lIGZvbGQgKi8KLSAgcGFkcGFybXNbUEFEX0xJTkVfU1BF RURdICAgICAgICAgICAgID0gMDsgIC8qIGxpbmUgc3BlZWQgLSBkb24ndCBjYXJlICovCi0gIHBh ZHBhcm1zW1BBRF9GTE9XX0NPTlRST0xfQllfVVNFUl0gICA9IDA7ICAvKiBmbG93IGNvbnQgb2Yg UEFEIC0gbm90IHVzZWQgKi8KLSAgcGFkcGFybXNbUEFEX0xGX0FGVEVSX0NSXSAgICAgICAgICAg ID0gMDsgIC8qIG5vIExGIGluc2VydGlvbiBhZnRlciBDUiAqLwotICBwYWRwYXJtc1tQQURfUEFE RElOR19BRlRFUl9MRl0gICAgICAgPSAwOyAgLyogbm8gcGFkZGluZyBhZnRlciBMRiAqLwotICBw YWRwYXJtc1tQQURfRURJVElOR10gICAgICAgICAgICAgICAgPSAxOyAgLyogY2FuIGVkaXQgKi8K LSAgcGFkcGFybXNbUEFEX0NIQVJfREVMRVRFX0NIQVJdICAgICAgID0gODsgIC8qIGNoYXJhY3Rl ciBkZWxldGUgY2hhcmFjdGVyICovCi0gIHBhZHBhcm1zW1BBRF9CVUZGRVJfREVMRVRFX0NIQVJd ICAgICA9IDIxOyAvKiBidWZmZXIgZGVsZXRlIGNoYXJhY3RlciAqLwotICBwYWRwYXJtc1tQQURf QlVGRkVSX0RJU1BMQVlfQ0hBUl0gICAgPSAxODsgLyogYnVmZmVyIGRpc3BsYXkgY2hhcmFjdGVy ICovCi19Ci0KLS8qIFNldCBQQUQgcGFyYW1ldGVycyAqLwotCi1WT0lECi1zZXRwYWQocyxuKSBD SEFSICpzOyBpbnQgbjsgewotICAgIGludCBpOwotICAgIENIQVIgKnBzID0gczsKLQotICAgIGlm IChuIDwgMSkgewotICAgICAgICBpbml0cGFkKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9y IChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAgICAgaWYgKCpwcyA+IE1BWFBBRFBBUk1T KQotICAgICAgICAgICAgICB4MjllcnJbaSsyXSA9ICpwczsKLSAgICAgICAgICAgIGVsc2UKLSAg ICAgICAgICAgICAgcGFkcGFybXNbKnBzXSA9ICoocHMrMSk7Ci0gICAgICAgICAgICBwcyArPSAy OwotICAgICAgICB9Ci0gICAgfQotfQotCi0vKiBSZWFkIFBBRCBwYXJhbWV0ZXJzICovCi0KLVZP SUQKLXJlYWRwYWQocyxuLHIpIENIQVIgKnM7IGludCBuOyBDSEFSICpyOyB7Ci0gICAgaW50IGk7 Ci0gICAgQ0hBUiAqcHMgPSBzOwotICAgIENIQVIgKnByID0gcjsKLQotICAgICpwcisrID0gWDI5 X1BBUkFNRVRFUl9JTkRJQ0FUSU9OOwotICAgIGlmIChuID4gMCkgewotICAgICAgICBmb3IgKGkg PSAwOyBpIDwgbjsgaSsrLCBwcysrKSB7Ci0gICAgICAgICAgICBpZiAoKnBzID4gTUFYUEFEUEFS TVMpIHsKLSAgICAgICAgICAgICAgICB4MjllcnJbaSsyXSA9ICpwcysrOwotICAgICAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAqcHIrKyA9ICpwczsKLSAgICAgICAgICAgICAgICAq cHIrKyA9IHBhZHBhcm1zWypwcysrXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0g ZWxzZSB7Ci0gICAgICAgIGZvciAoaSA9IDE7IGkgPCBNQVhQQURQQVJNUzsgaSsrKSB7Ci0gICAg ICAgICAgICAqcHIrKyA9IGk7Ci0gICAgICAgICAgICAqcHIrKyA9IHBhZHBhcm1zW2ldOwotICAg ICAgICB9Ci0gICAgfQotfQotCi1pbnQKLXFiaXRwa3QocyxuKSBDSEFSICpzOyBpbnQgbjsgewot ICAgIENIQVIgKnBzID0gczsKLSAgICBpbnQgeDI5Y21kID0gKnBzOwotICAgIENIQVIgKnBzYSA9 IHMrMTsKLSAgICBDSEFSIHgyOXJlc3BbKE1BWFBBRFBBUk1TKjIpKzFdOwotCi0gICAgc3dpdGNo ICh4MjljbWQpIHsKLQotICAgICAgICBjYXNlIFgyOV9TRVRfUEFSTVM6Ci0gICAgICAgICAgICBz ZXRwYWQgKHBzKzEsbi8yKTsKLSAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbigoY2hhciAqKXgy OWVycikgPiAyKSB7Ci0gICAgICAgICAgICAgICAgdHRvbCh4MjllcnIsKGludClzdHJsZW4oKGNo YXIgKil4MjllcnIpKTsKLSAgICAgICAgICAgICAgICB4MjllcnJbMl0gPSAnXDAnOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuICgtMik7Ci0gICAgICAgIGNhc2UgWDI5X1JFQURf UEFSTVM6Ci0gICAgICAgICAgICByZWFkcGFkIChwcysxLG4vMix4MjlyZXNwKTsKLSAgICAgICAg ICAgIHNldHFiaXQgKCk7Ci0gICAgICAgICAgICB0dG9sKHgyOXJlc3AsKG4+MSk/KG4rMSk6KDIq TUFYUEFEUEFSTVMrMSkpOwotICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKChjaGFyICopeDI5 ZXJyKSA+IDIpIHsKLSAgICAgICAgICAgICAgICB0dG9sKHgyOWVyciwoaW50KXN0cmxlbigoY2hh ciAqKXgyOWVycikpOwotICAgICAgICAgICAgICAgIHgyOWVyclsyXSA9ICdcMCc7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICByZXNldHFiaXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICBjYXNlIFgyOV9TRVRfQU5EX1JFQURfUEFSTVM6Ci0gICAgICAgICAgICBzZXRwYWQgKHBz KzEsbi8yKTsKLSAgICAgICAgICAgIHJlYWRwYWQgKHBzKzEsbi8yLHgyOXJlc3ApOwotICAgICAg ICAgICAgc2V0cWJpdCgpOwotICAgICAgICAgICAgdHRvbCh4MjlyZXNwLChuPjEpPyhuKzEpOigy Kk1BWFBBRFBBUk1TKzEpKTsKLSAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbigoY2hhciAqKXgy OWVycikgPiAyKSB7Ci0gICAgICAgICAgICAgICAgdHRvbCAoeDI5ZXJyLChpbnQpc3RybGVuKChj aGFyICopeDI5ZXJyKSk7Ci0gICAgICAgICAgICAgICAgeDI5ZXJyIFsyXSA9ICdcMCc7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICByZXNldHFiaXQoKTsKLSAgICAgICAgICAgIHJldHVybiAo LTIpOwotICAgICAgICBjYXNlIFgyOV9JTlZJVEFUSU9OX1RPX0NMRUFSOgotICAgICAgICAgICAg KFZPSUQpIHgyNWNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm4gKC0xKTsKLSAgICAgICAgY2Fz ZSBYMjlfSU5ESUNBVElPTl9PRl9CUkVBSzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAg ICByZXR1cm4gKDApOwotfQotCi0vKiBQQUQgYnJlYWsgYWN0aW9uIHByb2Nlc3NvciAqLwotCi1W T0lECi1icmVha2FjdCgpIHsKLSAgICBleHRlcm4gY2hhciB4MjVvYnVmW01BWE9YMjVdOwotICAg IGV4dGVybiBpbnQgb2J1Zmw7Ci0gICAgZXh0ZXJuIGludCBhY3RpdmU7Ci0gICAgZXh0ZXJuIHVu c2lnbmVkIGNoYXIgdG9zZW5kOwotICAgIHN0YXRpYyBDSEFSIGluZGJya1szXSA9IHsKLSAgICAg ICAgWDI5X0lORElDQVRJT05fT0ZfQlJFQUssCi0gICAgICAgIFBBRF9TVVBQUkVTU0lPTl9PRl9E QVRBLAotICAgICAgICAxCi0gICAgfTsKLSAgICBDSEFSIGludHVkYXQsIGNhdXNlLCBkaWFnOwot Ci0gICAgaWYgKHgyNXN0YXQoKSA8IDApIHJldHVybjsgIC8qIElnbm9yZSBpZiBubyB2aXJ0dWFs IGNhbGwgZXN0YWJsaXNoZWQgKi8KLQotICAgIGlmIChwYWRwYXJtc1tQQURfQlJFQUtfQUNUSU9O XSAhPSAwKSAvKiBGb3J3YXJkIGNvbmRpdGlvbiAqLwotICAgICAgICBpZiAodHRvbCgoQ0hBUiAq KXgyNW9idWYsb2J1ZmwpIDwgMCkgewotICAgICAgICAgICAgcGVycm9yICgiXHJcbkNhbid0IHNl bmQgY2hhcmFjdGVycyIpOwotICAgICAgICAgICAgYWN0aXZlID0gMDsKLSAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgIGJ6ZXJvICh4MjVvYnVmLHNpemVvZih4MjVvYnVmKSk7Ci0gICAgICAg ICAgICBvYnVmbCA9IDA7Ci0gICAgICAgICAgICB0b3NlbmQgPSAwOwotICAgICAgICB9OwotCi0g ICAgc3dpdGNoIChwYWRwYXJtc1tQQURfQlJFQUtfQUNUSU9OXSkgewotCi0gICAgICAgY2FzZSAw IDogYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyAqLwotICAgICAgIGNhc2Ug MSA6IC8qIHNlbmQgaW50ZXJydXB0IHBhY2tldCB3aXRoIGludGVycnVwdCB1c2VyIGRhdGEgZmll bGQgPSAxICovCi0gICAgICAgICAgICAgICAgaW50dWRhdCA9IDE7Ci0gICAgICAgICAgICAgICAg eDI1aW50ciAoaW50dWRhdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAy IDogLyogc2VuZCByZXNldCBwYWNrZXQgd2l0aCBjYXVzZSBhbmQgZGlhZyA9IDAgKi8KLSAgICAg ICAgICAgICAgICBjYXVzZSA9IGRpYWcgPSAwOwotICAgICAgICAgICAgICAgIHgyNXJlc2V0IChj YXVzZSxkaWFnKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIDUgOiAvKiBz ZW5kIGludGVycnVwdCBwYWNrZXQgd2l0aCBpbnRlcnJ1cHQgdXNlciBkYXRhIGZpZWxkID0gMCAq LwotICAgICAgICAgICAgICAgIGludHVkYXQgPSAwOwotICAgICAgICAgICAgICAgIHgyNWludHIg KGludHVkYXQpOwotICAgICAgICAgICAgICAgIHNldHFiaXQgKCk7Ci0gICAgICAgICAgICAgICAg Lyogc2VuZCBpbmRpY2F0aW9uIG9mIGJyZWFrIHdpdGhvdXQgYSBwYXJhbWV0ZXIgZmllbGQgKi8K LSAgICAgICAgICAgICAgICB0dG9jKFgyOV9JTkRJQ0FUSU9OX09GX0JSRUFLKTsKLSAgICAgICAg ICAgICAgICByZXNldHFiaXQgKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgY2Fz ZSA4IDogYWN0aXZlID0gMDsgICAgICAgICAgICAgLyogbGVhdmUgZGF0YSB0cmFuc2ZlciAqLwot ICAgICAgICAgICAgICAgIGNvbm9sICgiXHJcbiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgIGNhc2UgMjE6IC8qIHNlbmQgaW50ZXJydXB0IHBhY2tldCB3aXRoIGludGVycnVwdCB1 c2VyIGRhdGEgZmllbGQgPSAwICovCi0gICAgICAgICAgICAgICAgaW50dWRhdCA9IDA7Ci0gICAg ICAgICAgICAgICAgeDI1aW50ciAoaW50dWRhdCk7Ci0gICAgICAgICAgICAgICAgc2V0cGFkIChp bmRicmsrMSwyKTsgICAgLyogc2V0IHBhZCB0byBkaXNjYXJkIGlucHV0ICovCi0gICAgICAgICAg ICAgICAgc2V0cWJpdCAoKTsKLSAgICAgICAgICAgICAgICAvKiBzZW5kIGluZGljYXRpb24gb2Yg YnJlYWsgd2l0aCBwYXJhbWV0ZXIgZmllbGQgKi8KLSAgICAgICAgICAgICAgICB0dG9sIChpbmRi cmssc2l6ZW9mKGluZGJyaykpOwotICAgICAgICAgICAgICAgIHJlc2V0cWJpdCAoKTsKLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgfQotfQotCi0vKiBYLjI1IHN1cHBvcnQgZnVuY3Rpb25z ICovCi0KLVgyNV9DQVVTRV9ESUFHIGRpYWc7Ci0KLS8qCi0gIENvbnZlcnQgYSBudWxsLXRlcm1p bmF0ZWQgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBYLjEyMSBhZGRyZXNzCi0gIHRvIGEgcGFja2Vk IEJDRCBmb3JtLgotKi8KLWludAotcGt4MTIxKHN0cixiY2QpIGNoYXIgKnN0cjsgQ0hBUiAqYmNk OyB7Ci0gICAgaW50IGksIGo7Ci0gICAgdV9jaGFyIGM7Ci0KLSAgICBpID0gaiA9IDA7Ci0gICAg d2hpbGUgKHN0cltpXSkgewotICAgICAgICBpZiAoaSA+PSAxNSB8fCBzdHIgW2ldIDwgJzAnIHx8 IHN0ciBbaV0gPiAnOScpCi0gICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgIGMgPSBzdHIg W2ldIC0gJzAnOwotICAgICAgICBpZiAoaSAmIDEpCi0gICAgICAgICAgYmNkIFtqKytdIHw9IGM7 Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBiY2QgW2pdID0gYyA8PCA0OwotICAgICAgICBpKys7 Ci0gICAgfQotICAgIHJldHVybiAoaSk7Ci19Ci0KLS8qIFJlYWRzIGFuZCBwcmludHMgWC4yNSBk aWFnbm9zdGljICovCi0KLWludAoteDI1ZGlhZyAoKSB7Ci0gICAgaW50IGk7Ci0KLSAgICBiemVy byAoKGNoYXIgKikmZGlhZyxzaXplb2YoZGlhZykpOwotICAgIGlmIChpb2N0bCh0dHlmZCxYMjVf UkRfQ0FVU0VfRElBRywmZGlhZykpIHsKLSAgICAgICAgcGVycm9yICgiUmVhZGluZyBYLjI1IGRp YWdub3N0aWMiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgaWYgKGRpYWcuZGF0 YWxlbiA+IDApIHsKLSAgICAgICAgcHJpbnRmICgiWC4yNSBEaWFnbm9zdGljIDoiKTsKLSAgICAg ICAgZm9yIChpID0gMDsgaSA8IChpbnQpZGlhZy5kYXRhbGVuOyBpKyspCi0gICAgICAgICAgcHJp bnRmKCIgJTAyaCIsZGlhZy5kYXRhW2ldKSsKLSAgICAgICAgcHJpbnRmICgiXHJcbiIpOwotICAg IH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qIFguMjUgT3V0LW9mLUJhbmQgU2lnbmFsIEhhbmRs ZXIgKi8KLQotU0lHVFlQCi14MjVvb2JoKGZvbykgaW50IGZvbzsgewotICAgIGludCBvb2J0eXBl OwotICAgIHVfY2hhciBvb2JkYXRhOwotICAgIGludCB0OwotCi0gICAgKFZPSUQpIHNpZ25hbChT SUdVUkcseDI1b29iaCk7Ci0gICAgZG8gewotICAgICAgICBpZiAoaW9jdGwodHR5ZmQsWDI1X09P Ql9UWVBFLCZvb2J0eXBlKSkgewotICAgICAgICAgICAgcGVycm9yICgiR2V0dGluZyBzaWduYWwg dHlwZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAo b29idHlwZSkgewotICAgICAgICAgIGNhc2UgSU5UX0RBVEE6Ci0gICAgICAgICAgICBpZiAocmVj dih0dHlmZCwoY2hhciAqKSZvb2JkYXRhLDEsTVNHX09PQikgPCAwKSB7Ci0gICAgICAgICAgICAg ICAgcGVycm9yICgiUmVjZWl2aW5nIFguMjUgaW50ZXJydXB0IGRhdGEiKTsKLSAgICAgICAgICAg ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0ID0gb29iZGF0YTsKLSAg ICAgICAgICAgIHByaW50ZiAoIlxyXG5JbnRlcnJ1cHQgcmVjZWl2ZWQsIGRhdGEgPSAlZFxyXG4i LCB0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVkNfUkVTRVQ6Ci0gICAg ICAgICAgICBwcmludGYgKCJcclxuVmlydHVhbCBjaXJjdWl0IHJlc2V0XHJcbiIpOwotICAgICAg ICAgICAgeDI1ZGlhZyAoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgTl9S RVNFVFM6Ci0gICAgICAgICAgICBwcmludGYgKCJcclxuUmVzZXQgdGltZW91dFxyXG4iKTsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgTl9DTEVBUlM6Ci0gICAgICAgICAgICBw cmludGYgKCJcclxuQ2xlYXIgdGltZW91dFxyXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgIGNhc2UgTVNHX1RPT19MT05HOgotICAgICAgICAgICAgcHJpbnRmICgiXHJcbk1lc3Nh Z2UgZGlzY2FyZGVkLCB0b28gbG9uZ1xyXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAob29idHlwZSkgcHJpbnRmKCJcclxuVW5rbm93 biBvb2IgdHlwZSAlZFxyXG4iLG9vYnR5cGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg IH0KLSAgICB9IHdoaWxlIChvb2J0eXBlKTsKLX0KLQotLyogU2VuZCBhIFguMjUgaW50ZXJydXB0 IHBhY2tldCAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwoteDI1aW50cihjaGFyIGludHIpCi0j ZWxzZQoteDI1aW50cihpbnRyKSBjaGFyIGludHI7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8q IHgyNWludHIgKi8gewotICAgIGlmIChzZW5kKHR0eWZkLCZpbnRyLDEsTVNHX09PQikgPCAwKSBy ZXR1cm4oLTEpOwotICAgIGRlYnVnKEYxMDAsIlguMjUgaW50ciIsIiIsMCk7Ci0gICAgcmV0dXJu KDApOwotfQotCi0vKiBSZXNldCBYLjI1IHZpcnR1YWwgY2lyY3VpdCAqLwotaW50Ci0jaWZkZWYg Q0tfQU5TSUMKLXgyNXJlc2V0KGNoYXIgY2F1c2UsIGNoYXIgZGlhZ24pCi0jZWxzZQoteDI1cmVz ZXQoY2F1c2UsIGRpYWduKSBjaGFyIGNhdXNlOyBjaGFyIGRpYWduOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi0vKiB4MjVyZXNldCAqLyB7Ci0gICAgYnplcm8gKChjaGFyICopJmRpYWcsc2l6ZW9m KGRpYWcpKTsKLSAgICBkaWFnLmZsYWdzICAgPSAwOwotICAgIGRpYWcuZGF0YWxlbiA9IDI7Ci0g ICAgZGlhZy5kYXRhWzBdID0gY2F1c2U7Ci0gICAgZGlhZy5kYXRhWzFdID0gZGlhZ247Ci0gICAg aWYgKGlvY3RsKHR0eWZkLFgyNV9XUl9DQVVTRV9ESUFHLCZkaWFnKSA8IDApCi0gICAgICByZXR1 cm4oLTEpOwotICAgIGRlYnVnKEYxMDAsIlguMjUgcmVzZXQiLCIiLDApOwotICAgIHJldHVybigw KTsKLX0KLQotLyogQ2xlYXIgWC4yNSB2aXJ0dWFsIGNpcmN1aXQgKi8KLWludAoteDI1Y2xlYXIo KSB7Ci0gICAgaW50IGk7Ci0gICAgZGVidWcoRjEwMCwiWC4yNSBjbGVhciIsIiIsMCk7Ci0gICAg Ynplcm8gKChjaGFyICopJmRpYWcsc2l6ZW9mKGRpYWcpKTsKLSAgICBkaWFnLmZsYWdzID0gKDEg PDwgRElBR19UWVBFKTsKLSAgICBkaWFnLmRhdGFsZW4gPSAyOwotICAgIGRpYWcuZGF0YVswXSA9 IDA7Ci0gICAgZGlhZy5kYXRhWzFdID0gMDsKLSAgICBpb2N0bCAodHR5ZmQsWDI1X1dSX0NBVVNF X0RJQUcsJmRpYWcpOyAvKiBTZW5kIENsZWFyIFJlcXVlc3QgKi8KLSAgICByZXR1cm4odHRjbG9z KDApKTsgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBzb2NrZXQgKi8KLX0KLQotLyogWC4yNSBz dGF0dXMgKi8KLWludAoteDI1c3RhdCgpIHsKLSAgICBpZiAodHR5ZmQgPT0gLTEpIHJldHVybiAo LTEpOwotICAgIHJldHVybigwKTsKLX0KLQotLyogU2V0IFFfQklUIG9uICovCi1WT0lECi1zZXRx Yml0KCkgewotICAgIHN0YXRpYyBpbnQgcWJpdG9uID0gMSA8PCBRX0JJVDsKLSAgICBpb2N0bCAo dHR5ZmQsWDI1X1NFTkRfVFlQRSwmcWJpdG9uKTsKLX0KLQotLyogU2V0IFFfQklUIG9mZiAqLwot Vk9JRAotcmVzZXRxYml0KCkgewotICAgIHN0YXRpYyBpbnQgcWJpdG9mZiA9IDA7Ci0gICAgaW9j dGwgKHR0eWZkLFgyNV9TRU5EX1RZUEUsJnFiaXRvZmYpOwotfQotCi0vKiBSZWFkIG4gY2hhcmFj dGVycyBmcm9tIFguMjUgY2lyY3VpdCBpbnRvIGJ1ZiAqLwotCi1pbnQKLXgyNXhpbihuLGJ1Zikg aW50IG47IENIQVIgKmJ1ZjsgewotICAgIHJlZ2lzdGVyIGludCB4LCBjOwotICAgIGludCBxcGt0 OwotCi0gICAgZG8gewotICAgICAgICB4ID0gcmVhZCh0dHlmZCxidWYsbik7Ci0gICAgICAgIGlm IChidWZbMF0gJiAoMSA8PCBRX0JJVCkpIHsgLyogSWYgUV9CSVQgcGFja2V0LCBwcm9jZXNzIGl0 ICovCi0gICAgICAgICAgICAvKiBJZiByZXR1cm4gLTEgOiBpbnZpdGF0aW9uIHRvIGNsZWFyOyAt MiA6IFBBRCBjaGFuZ2VzICovCi0gICAgICAgICAgICBpZiAoKGM9cWJpdHBrdChidWYrMSx4LTIp KSA8IDApIHJldHVybihjKTsKLSAgICAgICAgICAgIHFwa3QgPSAxOwotICAgICAgICB9IGVsc2Ug cXBrdCA9IDA7Ci0gICAgfSB3aGlsZSAocXBrdCk7Ci0KLSNpZmRlZiBDT01NRU5UICAgICAgICAg ICAgICAgICAgLyogRGlzYWJsZWQgYnkgU3RlcGhlbiBSaWVobSAxOS4xMi45NyAqLwotICAgIC8q IEJVRyEKLSAgICAgKiBpZiBidWZbXSBpcyBmdWxsLCB0aGVuIHRoaXMgbnVsbCBsYW5kcyBpbiBu aXJ2YW5hIQotICAgICAqIEkgd2FzIHVuYWJsZSB0byBmaW5kIGFueSBjb2RlIHdoaWNoIG5lZWRz IGEgdHJhaWxpbmcgbnVsbCBpbiBidWZbXQotICAgICAqLwotICAgIGlmICh4ID4gMCkgYnVmW3hd ID0gJ1wwJzsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgaWYgKHggPCAxKSB4ID0gLTE7Ci0g ICAgZGVidWcoRjEwMSwieDI1eGluIHgiLCIiLHgpOwotCi0gICAgcmV0dXJuKHgpOwotfQotCi0j aWZkZWYgQ09NTUVOVCAvKiBOTyBMT05HRVIgTkVFREVEISAqLwotLyogWC4yNSByZWFkIGEgbGlu ZSAqLwotCi1pbnQKLSNpZmRlZiBQQVJTRU5TRQotI2lmZGVmIENLX0FOU0lDCi14MjVpbmwoQ0hB UiAqZGVzdCwgaW50IG1heCxpbnQgdGltbywgQ0hBUiBlb2wsIENIQVIgc3RhcnQpCi0jZWxzZQot eDI1aW5sKGRlc3QsbWF4LHRpbW8sZW9sLHN0YXJ0KSBpbnQgbWF4LHRpbW87IENIQVIgKmRlc3Qs IGVvbCwgc3RhcnQ7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNlbHNlIC8qIG5vdCBQQVJTRU5T RSAqLwotI2lmZGVmIENLX0FOU0lDCi14MjVpbmwoQ0hBUiAqZGVzdCwgaW50IG1heCxpbnQgdGlt bywgQ0hBUiBlb2wpCi0jZWxzZQoteDI1aW5sKGRlc3QsbWF4LHRpbW8sZW9sKSBpbnQgbWF4LHRp bW87IENIQVIgKmRlc3QsIGVvbDsKLSNlbmRpZiAvKiBfX1NEVENfXyAqLwotI2VuZGlmIC8qUEFS U0VOU0UgKi8KLSAvKiB4MjVpbmwgKi8gewotICAgIENIQVIgKnBkZXN0OwotICAgIGludCBwa3R5 cGUsIGdvdGVvbCwgcmVzdCwgbjsKLSAgICBpbnQgaSwgZmxhZyA9IDA7Ci0gICAgZXh0ZXJuIGlu dCB0dHBydHksIHR0cGZsZzsKLSAgICBpbnQgdHRwbXNrOwotCi0gICAgdHRwbXNrID0gKHR0cHJ0 eSkgPyAwMTc3IDogMDM3NzsgICAgLyogU2V0IHBhcml0eSBzdHJpcHBpbmcgbWFzayAqLwotCi0g ICAgZGVidWcoRjEwMSwieDI1aW5sIG1heCIsIiIsbWF4KTsKLSAgICBkZWJ1ZyhGMTAxLCJ4MjVp bmwgZW9sIiwiIixlb2wpOwotICAgIHBkZXN0ICA9IGRlc3Q7Ci0gICAgcmVzdCAgID0gbWF4Owot ICAgIGdvdGVvbCA9IDA7Ci0gICAgZG8gewotICAgICAgICBuID0gcmVhZCh0dHlmZCxwZGVzdCxy ZXN0KTsKLSAgICAgICAgbi0tOwotICAgICAgICBwa3R5cGUgPSAqcGRlc3QgJiAweDdmOwotICAg ICAgICBzd2l0Y2ggKHBrdHlwZSkgewotICAgICAgICAgIGNhc2UgMSA8PCBRX0JJVDoKLSAgICAg ICAgICAgIGlmIChxYml0cGt0KHBkZXN0KzEsLS1uKSA8IDApIHJldHVybigtMik7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKGZsYWcgPT0g MCkgeyAvKiBpZiBub3QgaW4gcGFja2V0LCBzZWFyY2ggc3RhcnQgKi8KLSAgICAgICAgICAgICAg ICBmb3IgKGkgPSAxOyAoaSA8IG4pICYmCi0gICAgICAgICAgICAgICAgICAgICAhKGZsYWcgPSAo KGRlc3RbaV0gJiAweDdmKSA9PSBzdGFydCkpOwotICAgICAgICAgICAgICAgICAgICAgaSsrKTsK LSAgICAgICAgICAgICAgICBpZiAoZmxhZyA9PSAwKSB7IC8qIG5vdCBmb3VuZCwgZGlzY2FyZCBq dW5rICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIngyNWlubCBza2lwcGluZyIs IiIsbik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgIC8qIGZvdW5kLCBkaXNjYXJkIGp1bmsgYmVmb3JlIHN0YXJ0 ICovCi0gICAgICAgICAgICAgICAgICAgIGludCBrOwotICAgICAgICAgICAgICAgICAgICBuID0g biAtIGkgKyAxOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAxOyBrIDw9IG47IGsrKywg aSsrKSBkZXN0W2tdID0gZGVzdFtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyAoaSA8IG4pICYmIC8qIHNlYXJjaCBmb3IgZW9sICov Ci0gICAgICAgICAgICAgICAgICEoZ290ZW9sPSgoKCpwZGVzdCA9ICoocGRlc3QrMSkmdHRwbXNr KSYweDdmKT09IGVvbCkpOwotICAgICAgICAgICAgICAgICBpKysscGRlc3QrKyk7Ci0gICAgICAg ICAgICAqcGRlc3QgPSAnXDAnOwotICAgICAgICAgICAgcmVzdCAtPSBuOwotICAgICAgICB9Ci0g ICAgfSB3aGlsZSAoKHJlc3QgPiAwKSAmJiAoIWdvdGVvbCkpOwotCi0gICAgaWYgKGdvdGVvbCkg ewotICAgICAgICBuID0gbWF4IC0gcmVzdDsKLSAgICAgICAgZGVidWcgKEYxMTEsIngyNWlubCBY LjI1IGdvdCIsKGNoYXIgKikgZGVzdCxuKTsKLSAgICAgICAgaWYgKHRpbW8pIHR0aW1vZmYoKTsK LSAgICAgICAgaWYgKHR0cGZsZysrID09IDAgJiYgdHRwcnR5ID09IDApIHsKLSAgICAgICAgICAg IGlmICgodHRwcnR5ID0gcGFyY2hrKGRlc3Qsc3RhcnQsbikpID4gMCkgewotICAgICAgICAgICAg ICAgIGludCBqOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIngyNWlubCBzZW5zZXMgcGFy aXR5IiwiIix0dHBydHkpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIngyNWlubCBwYWNr ZXQgYmVmb3JlIiwoY2hhciAqKWRlc3QsMCk7Ci0gICAgICAgICAgICAgICAgdHRwbXNrID0gMHg3 ZjsKLSAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKQotICAgICAgICAgICAg ICAgICAgZGVzdFtqXSAmPSAweDdmOyAvKiBTdHJpcCBwYXJpdHkgZnJvbSBwYWNrZXQgKi8KLSAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ4MjVpbmwgcGFja2V0IGFmdGVyICIsZGVzdCwwKTsK LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwicGFyY2hr IiwiIix0dHBydHkpOwotICAgICAgICAgICAgICAgIGlmICh0dHBydHkgPCAwKSB7IHR0cHJ0eSA9 IDA7IG4gPSAtMTsgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHR0aW1vZmYo KTsKLSAgICAgICAgcmV0dXJuKG4pOwotICAgIH0KLSAgICB0dGltb2ZmKCk7Ci0gICAgcmV0dXJu KC0xKTsKLX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogU1VOWDI1ICovCi0KLSNp ZmRlZiBJQk1YMjUKLS8qCi0gKiBJQk0gWDI1IHN1cHBvcnQgLSB1c2luZyB0aGUgTlBJIHN0cmVh bXMgaW50ZXJmYWNlCi0gKiB3cml0dGVuIGJ5IFN0ZXBoZW4gUmllaG0sIHBjLXBsdXMsIE11bmlj aCBHZXJtYW55Ci0gKi8KLQotLyogcmllaG06IG1pc3NpbmcgZnVuY3Rpb25zIC8gVE9ETyBsaXN0 ICovCi0KLS8qCi0gIHgyNWludHIoKSAtIFNlbmQgYW4gaW50ZXJydXB0IHBhY2tldAotKi8KLQot LyogcmV0dXJuIGFuIGVycm9yIG1lc3NhZ2UgZGVwZW5kaW5nIG9uIHBhY2tldCB0eXBlICovCi1j aGFyICoKLXgyNWVycihuKSBpbnQgbjsgewotICAgIHN0YXRpYyBjaGFyIGJ1ZlszMF07Ci0gICAg c3dpdGNoIChuKSB7Ci0gICAgICBjYXNlIE5CQURBRERSOiAgICAgcmV0dXJuICJpbnZhbGlkIGFk ZHJlc3MiOwotICAgICAgY2FzZSBOQkFET1BUOiAgICAgIHJldHVybiAiaW52YWxpZCBvcHRpb25z IjsKLSAgICAgIGNhc2UgTkFDQ0VTUzogICAgICByZXR1cm4gIm5vIHBlcm1pc3Npb24iOwotICAg ICAgY2FzZSBOTk9BRERSOiAgICAgIHJldHVybiAidW5hYmxlIHRvIGFsbG9jYXRlIGFkZHJlc3Mi OwotICAgICAgY2FzZSBOT1VUU1RBVEU6ICAgIHJldHVybiAiaW52YWxpZCBzdGF0ZSI7Ci0gICAg ICBjYXNlIE5CQURTRVE6ICAgICAgcmV0dXJuICJpbnZhbGlkIHNlcXVlbmNlIG51bWJlciI7Ci0g ICAgICBjYXNlIE5TWVNFUlI6ICAgICAgcmV0dXJuICJzeXN0ZW0gZXJyb3IiOwotICAgICAgY2Fz ZSBOQkFEREFUQTogICAgIHJldHVybiAiaW52YWxpZCBkYXRhIHNpemUiOwotICAgICAgY2FzZSBO QkFERkxBRzogICAgIHJldHVybiAiaW52YWxpZCBmbGFnIjsKLSAgICAgIGNhc2UgTk5PVFNVUFBP UlQ6ICByZXR1cm4gInVuc3VwcG9ydGVkIHByaW1pdGl2ZSI7Ci0gICAgICBjYXNlIE5CT1VORDog ICAgICAgcmV0dXJuICJhZGRyZXNzIGluIHVzZSI7Ci0gICAgICBjYXNlIE5CQURRT1NQQVJBTTog cmV0dXJuICJiYWQgUU9TIHBhcmFtZXRlcnMiOwotICAgICAgY2FzZSBOQkFEUU9TVFlQRTogIHJl dHVybiAiYmFkIFFPUyB0eXBlIjsKLSAgICAgIGNhc2UgTkJBRFRPS0VOOiAgICByZXR1cm4gImJh ZCB0b2tlbiB2YWx1ZSI7Ci0gICAgICBjYXNlIE5OT1BST1RPSUQ6ICAgcmV0dXJuICJwcm90b2Nv bCBpZCBjb3VsZCBub3QgYmUgYWxsb2NhdGVkIjsKLSAgICAgIGNhc2UgTk9ERENVRDogICAgICBy ZXR1cm4gIm9kZCBsZW5ndGggY2FsbCB1c2VyIGRhdGEiOwotICAgICAgZGVmYXVsdDoKLSAgICAg ICAgY2ttYWttc2coYnVmLHNpemVvZihidWYpLCJVbmtub3duIE5QSSBlcnJvciAiLGNraXRvYShu KSxOVUxMLE5VTEwpOwotICAgICAgICByZXR1cm4gYnVmOwotICAgIH0KLX0KLQotLyogdHVybiBh IG1lYW5pbmdsZXNzIHByaW1pdGl2ZSBudW1iZXIgaW50byBhIG1lYW5pbmdmdWwgcHJpbWl0aXZl IG5hbWUgKi8KLWNoYXIgKgoteDI1cHJpbShuKSBpbnQgbjsgewotICAgIHN0YXRpYyBjaGFyIGJ1 ZlszMF07Ci0gICAgc3dpdGNoKG4pIHsKLSAgICAgIGNhc2UgTl9CSU5EX0FDSzogICAgIHJldHVy biAiTl9CSU5EX0FDSyI7Ci0gICAgICBjYXNlIE5fQklORF9SRVE6ICAgICByZXR1cm4gIk5fQklO RF9SRVEiOwotICAgICAgY2FzZSBOX0NPTk5fQ09OOiAgICAgcmV0dXJuICJOX0NPTk5fQ09OIjsK LSAgICAgIGNhc2UgTl9DT05OX0lORDogICAgIHJldHVybiAiTl9DT05OX0lORCI7Ci0gICAgICBj YXNlIE5fQ09OTl9SRVE6ICAgICByZXR1cm4gIk5fQ09OTl9SRVEiOwotICAgICAgY2FzZSBOX0NP Tk5fUkVTOiAgICAgcmV0dXJuICJOX0NPTk5fUkVTIjsKLSAgICAgIGNhc2UgTl9EQVRBQ0tfSU5E OiAgIHJldHVybiAiTl9EQVRBQUNLX0lORCI7Ci0gICAgICBjYXNlIE5fREFUQUNLX1JFUTogICBy ZXR1cm4gIk5fREFUQUFDS19SRVEiOwotICAgICAgY2FzZSBOX0RBVEFfSU5EOiAgICAgcmV0dXJu ICJOX0RBVEFfSU5EIjsKLSAgICAgIGNhc2UgTl9EQVRBX1JFUTogICAgIHJldHVybiAiTl9EQVRB X1JFUSI7Ci0gICAgICBjYXNlIE5fRElTQ09OX0lORDogICByZXR1cm4gIk5fRElTQ09OX0lORCI7 Ci0gICAgICBjYXNlIE5fRElTQ09OX1JFUTogICByZXR1cm4gIk5fRElTQ09OX1JFUSI7Ci0gICAg ICBjYXNlIE5fRVJST1JfQUNLOiAgICByZXR1cm4gIk5fRVJST1JfQUNLIjsKLSAgICAgIGNhc2Ug Tl9FWERBVEFfSU5EOiAgIHJldHVybiAiTl9FWERBVEFfSU5EIjsKLSAgICAgIGNhc2UgTl9FWERB VEFfUkVROiAgIHJldHVybiAiTl9FWERBVEFfUkVRIjsKLSAgICAgIGNhc2UgTl9JTkZPX0FDSzog ICAgIHJldHVybiAiTl9JTkZPX0FDSyI7Ci0gICAgICBjYXNlIE5fSU5GT19SRVE6ICAgICByZXR1 cm4gIk5fSU5GT19SRVEiOwotICAgICAgY2FzZSBOX09LX0FDSzogICAgICAgcmV0dXJuICJOX09L X0FDSyI7Ci0gICAgICBjYXNlIE5fT1BUTUdNVF9SRVE6ICByZXR1cm4gIk5fT1BUTUdNVF9SRVEi OwotICAgICAgY2FzZSBOX1JFU0VUX0NPTjogICAgcmV0dXJuICJOX1JFU0VUX0NPTiI7Ci0gICAg ICBjYXNlIE5fUkVTRVRfSU5EOiAgICByZXR1cm4gIk5fUkVTRVRfSU5EIjsKLSAgICAgIGNhc2Ug Tl9SRVNFVF9SRVE6ICAgIHJldHVybiAiTl9SRVNFVF9SRVEiOwotICAgICAgY2FzZSBOX1JFU0VU X1JFUzogICAgcmV0dXJuICJOX1JFU0VUX1JFUyI7Ci0gICAgICBjYXNlIE5fVURFUlJPUl9JTkQ6 ICByZXR1cm4gIk5fVURFUlJPUl9JTkQiOwotICAgICAgY2FzZSBOX1VOQklORF9SRVE6ICAgcmV0 dXJuICJOX1VOQklORF9SRVEiOwotICAgICAgY2FzZSBOX1VOSVREQVRBX1JFUTogcmV0dXJuICJO X1VOSVREQVRBX1JFUSI7Ci0gICAgICBjYXNlIE5fVU5JVERBVEFfSU5EOiByZXR1cm4gIk5fVU5J VERBVEFfSU5EIjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNrbWFrbXNnKGJ1ZixzaXplb2Yo YnVmKSwiVU5LTk9XTiAoIixja2l0b2EobiksIikiLE5VTEwpOwotICAgICAgICByZXR1cm4gYnVm OwotICAgIH0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBGdW5jdGlvbjogeDI1Z2V0 bXNnKCkKLSAqIERlc2NyaXB0aW9uOiBnZXQgYSBTVFJFQU1TIG1lc3NhZ2UsIGFuZCBjaGVjayBp dCBmb3IgZXJyb3JzCi0gKgotICogUGFyYW1ldGVyczoKLSAqIGZkICAgICAgICAgICAtIGZpbGUg ZGVzY3JpcHRvciB0byB4MjUgZGV2aWNlIChvcGVuZWQpCi0gKiBjb250cm9sICAgICAgLSBjb250 cm9sIGJ1ZmZlciAocHJlLWFsbG9jYXRlZCkKLSAqIGN0bF9zaXplICAgICAtIHNpemUgb2YgY29u dHJvbCBidWZmZXIKLSAqIGRhdGEgICAgICAgICAtIGRhdGEgYnVmZmVyIChwcmUtYWxsb2NhdGVk KQotICogZGF0YV9zaXplICAgIC0gc2l6ZSBvZiBkYXRhIGJ1ZmZlcgotICogZmxhZ3MgICAgICAg IC0gZmxhZ3MgZm9yIGdldG1zZygpCi0gKiBleHBlY3RlZCAgICAgLSBleHBlY3RlZCBQcmltaXRp dmUgdHlwZQotICoKLSAqIFJldHVybiBWYWx1ZToKLSAqICAgICAgPj0gMCAgICBPSyAoc2l6ZSBv ZiBkYXRhIHJldHVybmVkKQotICogICAgICAtMSAgICAgIGVycm9yCi0gKgotICovCi1pbnQKLXgy NWdldG1zZyggZmQsIGNvbnRyb2wsIGN0bF9zaXplLCBkYXRhLCBkYXRhX3NpemUsIGdldF9mbGFn cywgZXhwZWN0ZWQgKQotICAgIGludCAgICAgICAgICAgICAgICAgZmQ7ICAgICAgICAgICAgIC8q IFgyNSBkZXZpY2UgKG9wZW5lZCkgKi8KLSAgICBOX25waV9jdGxfdCAgICAgICAgICpjb250cm9s OyAgICAgICAvKiBjb250cm9sIGJ1ZmZlciAocHJlLWFsbG9jYXRlZCkgKi8KLSAgICBpbnQgICAg ICAgICAgICAgICAgIGN0bF9zaXplOyAgICAgICAvKiBzaXplIG9mIGNvbnRyb2wgYnVmZmVyICov Ci0gICAgTl9ucGlfZGF0YV90ICAgICAgICAqZGF0YTsgICAgICAgICAgLyogZGF0YSBidWZmZXIg KHByZS1hbGxvY2F0ZWQpICovCi0gICAgaW50ICAgICAgICAgICAgICAgICBkYXRhX3NpemU7ICAg ICAgLyogc2l6ZSBvZiBkYXRhIGJ1ZmZlciAqLwotICAgIGludCAgICAgICAgICAgICAgICAgKmdl dF9mbGFnczsgICAgIC8qIGdldG1zZygpIGZsYWdzICovCi0gICAgaW50ICAgICAgICAgICAgICAg ICBleHBlY3RlZDsgICAgICAgLyogZXhwZWN0ZWQgcHJpbWl0aXZlIHR5cGUgKi8KLS8qIHgyNWdl dG1zZyAqLyB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICByYyA9IDA7ICAgICAgICAgLyogcmV0 dXJuIGNvZGUgKi8KLSAgICBzdHJ1Y3Qgc3RyYnVmICAgICAgICpnZXRfY3RsPU5VTEw7ICAvKiBn ZXRtc2cgY29udHJvbCAqLwotICAgIHN0cnVjdCBzdHJidWYgICAgICAgKmdldF9kYXRhPU5VTEw7 IC8qIGdldG1zZyBkYXRhICovCi0gICAgaW50ICAgICAgICAgICAgICAgICBtb3JlID0gMDsgICAg ICAgLyogZmxhZyBmb3IgbW9yZSBkYXRhIGV0YyAqLwotICAgIGludCAgICAgICAgICAgICAgICAg ZmlsZV9zdGF0dXMgPSAtMTsgLyogZmlsZSBhc3luYyBzdGF0dXMgKi8KLSAgICBOX25waV9jdGxf dCAgICAgICAgICogcmVzdWx0OyAgICAgICAvKiBwb2ludGVyIHRvIHNpbXBsaWZ5IHN3aXRjaCgp ICovCi0gICAgaW50ICAgICAgICAgICAgICAgICBwYWNrZXRfdHlwZSA9IC0xOyAvKiB1bmtub3du IHBhY2tldCB0aHVzIGZhciAqLwotCi0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTog ZW50ZXJpbmcgeDI1Z2V0bXNnXG4iICk7Ci0jZW5kaWYgLyogVFJBQ0UgKi8KLQotICAgIGRlYnVn KCBGMTEwLCAieDI1Z2V0bXNnIHdhaXRpbmcgZm9yIHBhY2tldCAiLCB4MjVwcmltKCBleHBlY3Rl ZCApLCAwKTsKLSAgICAvKiBwcmVwYXJlIHRoZSBjb250cm9sIHN0cnVjdHVyZXMgZm9yIGdldG1z ZyAqLwotICAgIGlmIChjb250cm9sKSB7Ci0gICAgICAgIGlmICgoZ2V0X2N0bCA9IChzdHJ1Y3Qg c3RyYnVmKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJidWYpKSkgPT0gTlVMTCkKLSAgICAgICAg ICB7Ci0gICAgICAgICAgICAgIHBlcnJvcigia2VybWl0IHgyNWdldG1zZygpOiBnZXRfY3RsIG1h bGxvYyBmYWlsZWRcbiIpOwotICAgICAgICAgICAgICBkZWJ1ZyggRjEwMCwgIngyNWdldG1zZyBt YWxsb2MgZmFpbGVkIGZvciBnZXRfY3RsXG4iLCAiIiwgMCk7Ci0gICAgICAgICAgICAgIHJldHVy bigtMSk7Ci0gICAgICAgICAgfQotICAgICAgICAvKiBhbGxvdyBnZXRtc2cgdG8gcmV0dXJuIGFu IHVuZXhwZWN0ZWQgcGFja2V0IHR5cGUgKHdoaWNoIG1heSBiZQotICAgICAgICAgKiBsYXJnZXIg dGhhbiB0aGUgZXhwZWN0ZWQgb25lKQotICAgICAgICAgKi8KLSAgICAgICAgZ2V0X2N0bC0+bWF4 bGVuID0gTlBJX01BWF9DVEw7Ci0gICAgICAgIGdldF9jdGwtPmxlbiA9IDA7Ci0gICAgICAgIGdl dF9jdGwtPmJ1ZiA9IChjaGFyICopY29udHJvbDsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmlu dGYoCi0gImtlcm1pdCB4MjVnZXRtc2coKTogaW50ZXJuYWwgZXJyb3IuIGNvbnRyb2wgYnVmZmVy IE1VU1QgYmUgcHJlLWFsbG9jYXRlZCFcbiIKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIGRl YnVnKEYxMDAsIngyNWdldG1zZyBpbnRlcm5hbCBlcnJvci4gbm8gYnVmZmVyIHByZS1hbGxvY2F0 ZWQiLCIiLDApOwotICAgICAgICByZXR1cm4oIC0xICk7Ci0gICAgfQotICAgIGlmIChkYXRhKSB7 Ci0gICAgICAgIGlmICgoZ2V0X2RhdGEgPSAoc3RydWN0IHN0cmJ1ZiopbWFsbG9jKHNpemVvZihz dHJ1Y3Qgc3RyYnVmKSkpID09IE5VTEwpCi0gICAgICAgICAgewotICAgICAgICAgICAgcGVycm9y KCJrZXJtaXQgeDI1Z2V0bXNnKCk6IGdldF9kYXRhIG1hbGxvYyBmYWlsZWRcbiIpOwotICAgICAg ICAgICAgZGVidWcoIEYxMDAsICJ4MjVnZXRtc2cgbWFsbG9jIGZhaWxlZCBmb3IgZ2V0X2RhdGFc biIsICIiLCAwKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAg Z2V0X2RhdGEtPm1heGxlbiA9IChOUElfTUFYX0RBVEEgPCBkYXRhX3NpemUgKSA/Ci0gICAgICAg ICAgTlBJX01BWF9EQVRBIDoKLSAgICAgICAgICAgIGRhdGFfc2l6ZTsKLSAgICAgICAgZ2V0X2Rh dGEtPmxlbiA9IDA7Ci0gICAgICAgIGdldF9kYXRhLT5idWYgPSAoY2hhciAqKWRhdGE7Ci0gICAg fQotCi0gICAgLyogZ2V0IGFuIFguMjUgcGFja2V0IC0KLSAgICAgKiBpdCBtYXkgYmUgYW55IGtp bmQgb2YgcGFja2V0LCBzbyBjaGVjayBmb3Igc3BlY2lhbCBjYXNlcwotICAgICAqIGl0IG1heSBi ZSBzcGxpdCBpbnRvIG11bHRpcGxlIHBhcnRzIC0gc28gbG9vcCBpZiBuZWNlc3NhcnkKLSAgICAg Ki8KLSAgICBkbyB7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgcHJpbnRmKCAia2VybWl0OiB4MjVn ZXRtc2coKTogZ2V0dGluZyBhIG1lc3NhZ2VcbiIgKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAg ICAgICBlcnJubyA9IDA7Ci0gICAgICAgIGlmICgobW9yZSA9IGdldG1zZyhmZCwgZ2V0X2N0bCwg Z2V0X2RhdGEsIGdldF9mbGFncykpIDwgMCkgewotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICBw cmludGYoICJrZXJtaXQ6IHgyNWdldG1zZygpOiBnZXRtc2cgcmV0dXJuZWQgYW4gZXJyb3JcbiIg KTsKLSAgICAgICAgICAgIHBlcnJvciggImdldG1zZyBlcnJvciB3YXMiICk7Ci0jZW5kaWYgLyog REVCVUcgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsICJ4MjVnZXRtc2cgZ2V0bXNnIHJldHVy bmVkIGFuIGVycm9yXG4iLCAiIiwgZXJybm8pOwotICAgICAgICAgICAgaWYgKChlcnJubyA9PSBF QUdBSU4pICYmIChnZXRfZGF0YSAmJiAoZ2V0X2RhdGEtPmxlbiA+IDApKSApIHsKLSAgICAgICAg ICAgICAgICAvKiB3YXMgaW4gbm9uLWJsb2NraW5nIG1vZGUsIG5vdGhpbmcgdG8gZ2V0LCBidXQg d2UncmUKLSAgICAgICAgICAgICAgICAgKiBhbHJlYWR5IHdhaXRpbmcgZm9yIHRoZSByZXN0IG9m IHRoZSBwYWNrZXQgLQotICAgICAgICAgICAgICAgICAqIHN3aXRjaCB0byBibG9ja2luZyBtb2Rl IGZvciB0aGUgbmV4dCByZWFkLgotICAgICAgICAgICAgICAgICAqIGZpbGVfc3RhdHVzIHVzZWQg dG8gcmVzZXQgZmlsZSBzdGF0dXMgYmVmb3JlIHJldHVybmluZwotICAgICAgICAgICAgICAgICAq LwotICAgICAgICAgICAgICAgIGlmICgoZmlsZV9zdGF0dXMgPSBmY250bChmZCwgRl9HRVRGTCwg MCkpIDwgMAotICAgICAgICAgICAgICAgICAgICB8fCBmY250bChmZCwgRl9TRVRGTCwgZmlsZV9z dGF0dXMgJiB+T19OREVMQVkpIDwgMCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg ICAgICAgICAgICBwZXJyb3IoIngyNWdldG1zZygpOiBjb3VsZG4ndCBjaGFuZ2UgeDI1IGJsb2Nr aW5nIG1vZGUiKTsKLSAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJ4MjVnZXRtc2cgZmNudGwgcmV0dXJuZWQgYW4gZXJyb3JcbiIs ICIiLCBlcnJubyk7Ci0gICAgICAgICAgICAgICAgICAgICAgLyogbmV0Y2xvcygpOyAqLwotICAg ICAgICAgICAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIC8qIGxv b3AgYWdhaW4gaW50byBhIGJsb2NraW5nIGdldG1zZygpICovCi0gICAgICAgICAgICAgICAgICAg ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgIC8qIG5vIGRhdGEgdG8gZ2V0IGluIG5vbi1ibG9ja2luZyBtb2RlIC0g cmV0dXJuIGVtcHR5IGhhbmRlZCAqLwotICAgICAgICAgICAgICAgIHBlcnJvciggIngyNWdldG1z ZygpOiBnZXRtc2cgZmFpbGVkIiApOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIngyNWdl dG1zZyBnZXRtc2cgcmV0dXJuZWQgYW4gZXJyb3JcbiIsICIiLCBlcnJubyk7Ci0gICAgICAgICAg ICAgICAgcmMgPSAtMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgfSBlbHNlIGlmIChtb3JlICYgTU9SRUNUTCkgewotICAgICAgICAgICAgLyogcGFuaWMg LSB0aGUgY29udHJvbCBpbmZvcm1hdGlvbiB3YXMgbGFyZ2VyIHRoYW4gdGhlCi0gICAgICAgICAg ICAgKiBtYXhpbXVtIGNvbnRyb2wgYnVmZmVyIHNpemUhCi0gICAgICAgICAgICAgKi8KLSAgICAg ICAgICAgIC8qIHJpZWhtOiBjbG9zZSBjb25uZWN0aW9uPyAqLwotI2lmZGVmIERFQlVHCi0gICAg ICAgICAgICBwcmludGYoIngyNWdldG1zZygpOiByZWNlaXZlZCBwYXJ0aWFsIGNvbnRyb2wgcGFj a2V0IC0gcGFuaWNcbiIpOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgICAgICBkZWJ1Zygg RjEwMSwgIngyNWdldG1zZyBnZXRtc2cgYmFkIGNvbnRyb2wgYmxvY2tcbiIsICIiLCBlcnJubyk7 Ci0gICAgICAgICAgICByYyA9IC0xOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot ICAgICAgICBpZiAocmVzdWx0ID0gKE5fbnBpX2N0bF90ICopY29udHJvbCkgewotICAgICAgICAg ICAgcGFja2V0X3R5cGUgPSByZXN1bHQtPmJpbmRfYWNrLlBSSU1fdHlwZTsKLSAgICAgICAgICAg IGlmIChwYWNrZXRfdHlwZSAhPSBOX09LX0FDSykgewotICAgICAgICAgICAgICAgIHgyNWxhc3Rt c2cgPSBwYWNrZXRfdHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmZGVmIERFQlVH Ci0gICAgICAgIC8qIHByaW50ZiggImtlcm1pdDogeDI1Z2V0bXNnKCk6IGdldHRpbmcgIiApOyAq LwotICAgICAgICBpZiAoZ2V0X2N0bC0+bGVuID4gMCkgewotICAgICAgICAgICAgeDI1ZHVtcF9w cmltKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMCwKLSAgICAgICAgICAg ICAgIngyNWdldG1zZyBnb3QgcGFja2V0ICIsCi0gICAgICAgICAgICAgIHgyNXByaW0oIHJlc3Vs dC0+YmluZF9hY2suUFJJTV90eXBlICksCi0gICAgICAgICAgICAgIDAKLSAgICAgICAgICAgICAg KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotCi0gICAgICAgIGlmIChnZXRfY3RsLT5sZW4gPj0gKGlu dClzaXplb2YocmVzdWx0LT5iaW5kX2Fjay5QUklNX3R5cGUpKSB7Ci0gICAgICAgICAgICAvKiBu b3QgYXMgcHJldHR5IGFzIGEgc3dpdGNoKCksIGJ1dCBzd2l0Y2ggY2FuJ3QgaGFuZGxlCi0gICAg ICAgICAgICAgKiBydW50aW1lIHZhcmlhYmxlIHZhbHVlcyA6LSgKLSAgICAgICAgICAgICAqLwot ICAgICAgICAgICAgaWYgKHBhY2tldF90eXBlID09IGV4cGVjdGVkICkgewotICAgICAgICAgICAg ICAgIC8qIGdvdCB3aGF0IHdlIHdhbnRlZCwgc3BlY2lhbCBjYXNlIGZvciBEQVRBX0lORAotICAg ICAgICAgICAgICAgICAqIHBhY2tldHMgdGhvdWdoICovCi0gICAgICAgICAgICAgICAgLyogcmll aG06IGNoZWNrIFEtYml0ID8gKi8KLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgICAgIHByaW50 ZigieDI1Z2V0bXNnKCk6IGdvdCBleHBlY3RlZCBwYWNrZXRcbnJjIGlzICVkXG4iLCByYyk7Ci0j ZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgICAgICAgICBpZiAocGFja2V0X3R5cGUgPT0gTl9E QVRBX0lORCApIHsKLSAgICAgICAgICAgICAgICAgICAgLyogZGF0YSByZWNlaXZlZC4gTWF5IGJl IGluY29tcGxldGUsIGV2ZW4gdGhvdWdoCi0gICAgICAgICAgICAgICAgICAgICAqIGdldG1zZyBy ZXR1cm5lZCBPSwotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAg aWYgKHJlc3VsdC0+ZGF0YV9pbmQuREFUQV94ZmVyX2ZsYWdzICYgTl9NT1JFX0RBVEFfRkxBRykK LSAgICAgICAgICAgICAgICAgICAgICAgIG1vcmUgfD0gTU9SRURBVEE7Ci0gICAgICAgICAgICAg ICAgICAgIGlmIChyZXN1bHQtPmRhdGFfaW5kLkRBVEFfeGZlcl9mbGFncyAmIE5fUkNfRkxBRykK LSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiggIngyNWdldG1zZygpOiBkYXRhIHBhY2tl dCB3YW50cyBhY2tcbiIgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ug aWYoIHBhY2tldF90eXBlID09IE5fRElTQ09OX0lORCkgewotICAgICAgICAgICAgICAgIHByaW50 ZiggIlgyNSBkaWNvbm5lY3RlZFxuIiApOwotICAgICAgICAgICAgICAgIC8qIHJpZWhtOiBuZWVk IHRvIGFja25vd2xlZGdlIGEgZGlzY29ubmVjdGlvbj8gKi8KLSAgICAgICAgICAgICAgICB4MjVj bGVhcigpOwotICAgICAgICAgICAgICAgIC8qIHgyNXVuYmluZCggdHR5ZmQgKTsgKi8KLSAgICAg ICAgICAgICAgICByYyA9IC0xOwotICAgICAgICAgICAgfSBlbHNlIGlmKCBwYWNrZXRfdHlwZSA9 PSBOX0VSUk9SX0FDSykgewotICAgICAgICAgICAgICAgIGVycm5vID0gcmVzdWx0LT5lcnJvcl9h Y2suVU5JWF9lcnJvcjsKLSAgICAgICAgICAgICAgICBwZXJyb3IoICJYMjUgZXJyb3IgcmVjZWl2 ZWQiICk7Ci0gICAgICAgICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgcHJpbnRmKCJ4MjVnZXRtc2coKTogZmFpbGVkICVzXG4iLCB4MjVlcnIo cGFja2V0X3R5cGUpKTsKLSAgICAgICAgICAgICAgICByYyA9IC0xOwotICAgICAgICAgICAgfQot ICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8q IFBhbmljIC0gbm8gY29udHJvbCBkYXRhICovCi0gICAgICAgICAgICBwcmludGYoICJrZXJtaXQ6 IHgyNWdldG1zZygpOiBubyBjb250cm9sIGRhdGEgd2l0aCBwYWNrZXRcbiIgKTsKLSAgICAgICAg ICAgIHJjID0gLTE7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgICAg aWYgKGdldF9kYXRhICYmIChnZXRfZGF0YS0+bGVuID49IDApKSB7Ci0gICAgICAgICAgICBnZXRf ZGF0YS0+YnVmICs9IGdldF9kYXRhLT5sZW47Ci0gICAgICAgICAgICBnZXRfZGF0YS0+bWF4bGVu IC09IGdldF9kYXRhLT5sZW47Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICgocmMgPT0gMCkKLSAg ICAgICAgICAgICAmJiAoZ2V0X2RhdGEgJiYgKGdldF9kYXRhLT5tYXhsZW4gPiAwKSkKLSAgICAg ICAgICAgICAmJiAobW9yZSAmIE1PUkVEQVRBKQotICAgICAgICAgICAgICk7Ci0KLSAgICAvKiBy ZXR1cm4gdGhlIGZpbGUgc3RhdHVzIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSwgdW5sZXNzIGl0cyBz dGlsbAotICAgICAqIHNldCB0byAtMSwgb3Igb25lIG9mIHRoZSBmY250bCdzIGZhaWxlZCAqLwot ICAgIGlmICgoZmlsZV9zdGF0dXMgPj0gMCkgJiYgZmNudGwoZmQsIEZfU0VURkwsIGZpbGVfc3Rh dHVzKSA8IDApCi0gICAgICAgIHJjID0gLTE7Ci0KLSAgICAvKgotICAgICAqIFZlcmlmeSB0aGF0 IHdlIHJlY2VpdmVkIGFuIGV4cGVjdGVkIHByaW1pdGl2ZQotICAgICAqIHRoZXJlIGlzIGFwcGFy YW50bHkgYW4gZXJyb3IgY2FzZSB3aGVyZSB0aGUgcHJpbWl0aXZlIGlzIHNldAotICAgICAqIGNv cnJlY3RseSwgYnV0IHRoZXJlIGlzIG5vdCBlbm91Z2ggZGF0YSBpbiB0aGUgY29udHJvbCBzdHJ1 Y3R1cmUKLSAgICAgKi8KLSAgICBpZiAoKHBhY2tldF90eXBlICE9IGV4cGVjdGVkKSAmJiAoZ2V0 X2N0bC0+bGVuID49IGN0bF9zaXplKSApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAg ICAgICAgICAgICAgIngyNWdldG1zZygpOiAlcyBOT1QgcmVjZWl2ZWQuIFByaW1pdGl2ZSByZWNl aXZlZCB3YXMgJXNcbiIsCi0gICAgICAgICAgICAgICAgeDI1cHJpbSggZXhwZWN0ZWQgKSwgeDI1 cHJpbSggcGFja2V0X3R5cGUgKSk7Ci0gICAgICAgIGRlYnVnKEYxMTAsICJ4MjVnZXRtc2cgZ290 IGFuIHVuZXhwZWN0ZWQgcGFja2V0ICIsCi0gICAgICAgICAgICAgIHgyNXByaW0ocGFja2V0X3R5 cGUpLAotICAgICAgICAgICAgICAwCi0gICAgICAgICAgICAgICk7Ci0gICAgICAgIHJjID0gLTE7 Ci0gICAgfQotCi0gICAgaWYgKHJjID09IDApIHsKLSAgICAgICAgaWYgKGdldF9kYXRhICYmICgg Z2V0X2RhdGEtPmxlbiA+PSAwKSkgewotICAgICAgICAgICAgcmMgPSBnZXRfZGF0YS0+bGVuOwot ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGdldF9jdGwpICB7IGZyZWUoZ2V0X2N0bCk7IGdl dF9jdGwgPSBOVUxMOyB9Ci0gICAgaWYgKGdldF9kYXRhKSB7IGZyZWUoZ2V0X2RhdGEpOyBnZXRf ZGF0YSA9IE5VTEw7IH0KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBERUJVRwotICAgIHByaW50 ZiggImtlcm1pdCB4MjVnZXRtc2coKTogcmV0dXJuaW5nICVkXG4iLCByYyApOwotI2VuZGlmIC8q IERFQlVHICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGRlYnVnKEYxMTAsICJ4MjVnZXRt c2cgcmV0dXJuaW5nIHBhY2tldCAiLCB4MjVwcmltKCBwYWNrZXRfdHlwZSApLCAwKTsKLQotI2lm ZGVmIFRSQUNFCi0gICAgcHJpbnRmKCAiVFJBQ0U6IGxlYXZpbmcgeDI1Z2V0bXNnXG4iICk7Ci0j ZW5kaWYgLyogVFJBQ0UgKi8KLSAgICByZXR1cm4ocmMpOwotfQotCi0vKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKLSAqIEZ1bmN0aW9uOiB4MjVwdXRtc2coKQotICoKLSAqIERlc2NyaXB0aW9uOgotICog ICAgICBzZW5kIGEgbWVzc2FnZSB0byBhIFgyNSBTVFJFQU0KLSAqCi0gKiBQYXJhbWV0ZXJzOgot ICogICAgICBmZCAgICAgICAgICAgICAgLSBmaWxlIGRlc2NyaXB0b3IgdG8geDI1IGRldmljZSAo b3BlbmVkKQotICogICAgICBjb250cm9sICAgICAgICAgLSBjb250cm9sIGJ1ZmZlciAocHJlLWFs bG9jYXRlZCkKLSAqICAgICAgZGF0YSAgICAgICAgICAgIC0gZGF0YSBidWZmZXIgKHByZS1hbGxv Y2F0ZWQpCi0gKiAgICAgIGRhdGFfbGVuICAgICAgICAtIGxlbmd0aCBvZiBkYXRhIHRvIGJlIHRy YW5zbWl0dGVkCi0gKiAgICAgIHB1dF9mbGFncyAgICAgICAtIGZsYWdzIGZvciBwdXRtc2coKQot ICoKLSAqIFJldHVybiBWYWx1ZToKLSAqICAgICAgPj0gMCAgICBudW1iZXIgb2YgYnl0ZXMgdHJh bnNtaXR0ZWQKLSAqICAgICAgLTEgICAgICBlcnJvcgotICovCi1pbnQKLXgyNXB1dG1zZyhmZCwg Y29udHJvbCwgZGF0YSwgZGF0YV9sZW4sIHB1dF9mbGFncykKLSAgICBpbnQgICAgICAgICAgICAg ICAgIGZkOyAgICAgICAgICAgICAvKiBYMjUgZGV2aWNlIChvcGVuZWQpICovCi0gICAgTl9ucGlf Y3RsX3QgICAgICAgICAqY29udHJvbDsgICAgICAgLyogY29udHJvbCBidWZmZXIgKHByZS1hbGxv Y2F0ZWQpICovCi0gICAgTl9ucGlfZGF0YV90ICAgICAgICAqZGF0YTsgICAgICAgICAgLyogZGF0 YSBidWZmZXIgKHByZS1hbGxvY2F0ZWQpICovCi0gICAgaW50ICAgICAgICAgICAgICAgICBkYXRh X2xlbjsgICAgICAgLyogbGVuZ3RoIG9mIGRhdGEgKG5vdCB0aGUgc2l6ZSBvZgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXIpICovCi0gICAgaW50 ICAgICAgICAgICAgICAgICAqcHV0X2ZsYWdzOyAgICAgLyogcHV0bXNnKCkgZmxhZ3MgKi8KLS8q IHgyNXB1dG1zZyAqLyB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICByYyA9IDA7ICAgICAgICAg LyogcmV0dXJuIGNvZGUgKi8KLSAgICB1bG9uZyAgICAgICAgICAgICAgIHR5cGU7ICAgICAgICAg ICAvKiBwcmltaXRpdmUgdHlwZSAqLwotICAgIHN0cnVjdCBzdHJidWYgICAgICAgKnB1dF9jdGwg PSBOVUxMOyAvKiBwdXRtc2cgY29udHJvbCAqLwotICAgIHN0cnVjdCBzdHJidWYgICAgICAgKnB1 dF9kYXRhID0gTlVMTDsgLyogcHV0bXNnIGRhdGEgKi8KLQotI2lmZGVmIFRSQUNFCi0gICAgcHJp bnRmKCAiVFJBQ0U6IGVudGVyaW5nIHgyNXB1dG1zZ1xuIiApOwotI2VuZGlmIC8qIFRSQUNFICov Ci0KLSNpZmRlZiBERUJVRwotICAgIHByaW50ZiggImtlcm1pdDogeDI1cHV0bXNnKCk6IHB1dHRp bmcgIiApOwotICAgIHgyNWR1bXBfcHJpbSggY29udHJvbCApOwotICAgIHByaW50ZiggIlx0ZGF0 YTpcdFx0IiApOwotICAgIHgyNWR1bXBfZGF0YSggZGF0YSwgMCwgZGF0YV9sZW4gKTsKLSAgICBk ZWJ1ZyhGMTEwLCJ4MjVwdXRtc2c6IHB1dHRpbmcgcGFja2V0ICIseDI1cHJpbShjb250cm9sLT5Q UklNX3R5cGUpLDApOwotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICBpZiAoY29udHJvbCkgewot ICAgICAgICBwdXRfY3RsID0gKHN0cnVjdCBzdHJidWYgKiltYWxsb2MoIHNpemVvZiggc3RydWN0 IHN0cmJ1ZiApICk7Ci0gICAgICAgIGlmIChwdXRfY3RsID09IE5VTEwpIHsKLSAgICAgICAgICAg IHBlcnJvcigia2VybWl0IHgyNXB1dG1zZygpOiBwdXRfY3RsIG1hbGxvYyBmYWlsZWRcbiIpOwot ICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICBwdXRfY3RsLT5tYXhs ZW4gPSAwOyAgICAgICAgICAgICAgICAgICAgLyogdW51c2VkIGJ5IHB1dG1zZyAqLwotICAgICAg ICBwdXRfY3RsLT5sZW4gPSBOUElfTUFYX0NUTDsKLSAgICAgICAgcHV0X2N0bC0+YnVmID0gKGNo YXIgKiljb250cm9sOwotICAgIH0KLSAgICBpZiAoZGF0YSAmJiAoIGRhdGFfbGVuID4gMCkpIHsK LSAgICAgICAgcHV0X2RhdGEgPSAoc3RydWN0IHN0cmJ1ZiAqKW1hbGxvYyggc2l6ZW9mKCBzdHJ1 Y3Qgc3RyYnVmICkgKTsKLSAgICAgICAgaWYoIHB1dF9kYXRhID09IE5VTEwpIHsKLSAgICAgICAg ICAgIHBlcnJvcigia2VybWl0IHgyNXB1dG1zZygpOiBwdXRfZGF0YSBtYWxsb2MgZmFpbGVkXG4i KTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHV0X2RhdGEt Pm1heGxlbiA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIHVudXNlZCBieSBwdXRtc2cgKi8KLSAg ICAgICAgcHV0X2RhdGEtPmxlbiA9IGRhdGFfbGVuOwotICAgICAgICBwdXRfZGF0YS0+YnVmID0g KGNoYXIgKilkYXRhOwotICAgIH0KLQotICAgIGVycm5vID0gMDsKLSAgICByYyA9IHB1dG1zZyAo ZmQsIHB1dF9jdGwsIHB1dF9kYXRhLCAwKTsKLSAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIHBy aW50ZigieDI1cHV0bXNnKCk6IGNvdWxkbid0IHB1dCAlc1xuIix4MjVwcmltKGNvbnRyb2wtPlBS SU1fdHlwZSkpOwotICAgICAgICBwZXJyb3IoImtlcm1pdDogeDI1cHV0bXNnKCk6IHB1dG1zZyBm YWlsZWQiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICAvKiByaWVobTogdGhp cyBzaG91bGQgcGVyaGFwcyBiZSBkaXNjb3VudGVkISAqLwotICAgIHgyNWxhc3Rtc2cgPSBjb250 cm9sLT5QUklNX3R5cGU7Ci0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgREVCVUcKLSAgICBwcmlu dGYoICJrZXJtaXQgZGVidWc6IHgyNXB1dG1zZygpIHJldHVybmluZyAlZFxuIiwgZGF0YV9sZW4g KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBkZWJ1Zygg RjEwMSwgIngyNXB1dG1zZyBibG9jayBzaXplIHB1dCAiLCAiIiwgZGF0YV9sZW4pOwotCi0jaWZk ZWYgVFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogbGVhdmluZyB4MjVwdXRtc2dcbiIgKTsKLSNl bmRpZiAvKiBUUkFDRSAqLwotCi0gICAgcmV0dXJuKCBkYXRhX2xlbiApOwotfQotCi0vKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKLSogRnVuY3Rpb246IHgyNWJpbmQKLSogRGVzY3JpcHRpb246ICBUaGUg YmluZCBzdWJtaXR0ZWQgdG8gTlBJIHByb3ZpZGVzIHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZAot KiAgICAgICAgICAgICAgIGJ5IHRoZSBwYWNrZXQgbGF5ZXIgZm9yIGl0IHRvIGxpc3RlbiBmb3Ig c3VpdGFibGUgaW5jb21pbmcKLSogICAgICAgICAgICAgICBjYWxscy4KLSoKLSogV0FSTklORzoK LSoKLSogVGhpcyByb3V0aW5lIG5lZWRzIHRvIGJlIGNhbGxlZCBpbiBhIGNvbXBsZXRlbHkgZGlm ZmVyZW50IG1hbm5lciBmb3IKLSogdGhlIGNsaWVudCBhbmQgc2VydmVyIHNpZGUuIFdoZW4gc3Rh cnRpbmcgYSBjbGllbnQsIHRoZQotKiBudW1fd2FpdGluZ19jYWxscyBhbmQgQ1VEIGluZm9ybWF0 aW9uIHNob3VsZCBhbGwgYmUgc2V0IHRvIDAhIFRoZQotKiBjbGllbnQncyBDVUQgbXVzdCBiZSBp bnNlcnRlZCBpbiB0aGUgQ09OTl9SRVEgZGF0YSBibG9jay4KLSogV2hlbiBzdGFydGluZyBhIHNl cnZlciwgdGhlIENVRCBtdXN0IGJlIHNldCB0byBhIENVRCBwYXR0ZXJuLCBhbmQKLSogdGhlIG51 bWJlciBvZiB3YWl0aW5nIGNhbGxzIHNob3VsZCBiZSBzZXQgdG8gYSBudW1iZXIgb3RoZXIgdGhh biAwLgotKiAobnVtIHdhaXRpbmcgY2FsbHMgaXMgdGhlIG51bWJlciBvZiBpbmNvbW1pbmcgY2Fs bHMgd2hpY2ggYXJlIHRvIGJlCi0qIHB1dCBvbiBob2xkIHdoaWxlIHRoZSBzZXJ2ZXIgaXMgc2Vy dmljaW5nIGFub3RoZXIgY2xpZW50LikKLSoKLSogV2hvIGludmVudGVkIHRoaXMgY3JhcD8KLSoK LSogUGFyYW1ldGVyczoKLSogICAgICAgZmQgICAgICAgICAgICAgIC0gWDI1IGRldmljZSAob3Bl bmVkKQotKiAgICAgICBhZGRyICAgICAgICAgICAgLSBsb2NhbCBhZGRyZXNzCi0qICAgICAgIGN1 ZCAgICAgICAgICAgICAtIFVzZXIgRGF0YSAobnVsbCB0ZXJtaW5hdGVkKQotKiAgICAgICBjdWRf bGVuICAgICAgICAgLSBVc2VyIERhdGEgbGVuZ3RoCi0qICAgICAgIG51bV93YWl0aW5nX2NhbGxz IC0gbnVtYmVyIG9mIG91dHN0YW5kaW5nIGNhbGxzIGFsbG93ZWQgb24gdGhpcyBzdHJlYW0KLSog ICAgICAgbGluZSAgICAgICAgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlciAoMSkKLSogICAgICAg ZmxhZ3MgICAgICAgICAgIC0gMCwgREVGQVVMVF9MSVNURU5FUiBvciBUT0tFTl9SRVFVRVNUCi0q Ci0qIFJldHVybiBWYWx1ZToKLSogICAgICAgaWYgYmluZGluZyBpcyBzdWNjZXNzZnVsLCAwIGlz IHJldHVybmVkIGZvciBhIGNsaWVudCwgYW5kIGEgdG9rZW4gaXMKLSogICAgICAgcmV0dXJuZWQg Zm9yIGEgc2VydmVyCi0qCi0qIFJldHVybiBjb2RlOiAwIGlmIHN1Y2Nlc3NmdWwKLSogICAgICAg ICAgICAgIC0xIGlmIHVuc3VjY2Vzc2Z1bAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXVsb25n Ci14MjViaW5kKGZkLCBhZGRyLCBjdWQsIGN1ZF9sZW4sIG51bV93YWl0aW5nX2NhbGxzLCBsaW5l LCBiaW5kX2ZsYWdzKQotICAgIGludCBmZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFgyNSBkZXZpY2UgKG9wZW5lZCkgKi8KLSAgICBjaGFyICogYWRkcjsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBsb2NhbCBhZGRyZXNzICovCi0gICAgY2hhciAqIGN1ZDsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ2FsbCBVc2VyIERhdGEgKG51bGwgdGVybWluYXRlZCkgKi8KLSAgICBp bnQgY3VkX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2VyIERhdGEgbGVuZ3RoICov Ci0gICAgaW50IG51bV93YWl0aW5nX2NhbGxzOyAgICAgICAgICAgICAgLyogT3V0c3RhbmRpbmcg Y2FsbHMgYWxsb3dlZCAqLwotICAgIGludCBsaW5lOyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGxvZ2ljYWwgcG9ydCBudW1iZXIgKi8KLSAgICB1bG9uZyBiaW5kX2ZsYWdzOyAgICAgICAg ICAgLyogMCwgREVGQVVMVF9MSVNURU5FUiBvciBUT0tFTl9SRVFVRVNUICovCi0vKiB4MjViaW5k ICovIHsKLSAgICB1bG9uZyByYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4g Y29kZSAqLwotICAgIGludCBnZXRfZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIHByaW9y aXR5IGZsYWcgcGFzc2VkIHRvIGdldG1zZyAqLwotICAgIGludCBwdXRfZmxhZ3MgPSAwOyAgICAg ICAgICAgICAgICAgIC8qIG91dHB1dCBmbGFncyBmb3IgcHV0bXNnLCBhbHdheXMgMCAqLwotICAg IHVsb25nIHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByaW1pdGl2ZSB0eXBlICov Ci0gICAgTl9iaW5kX3JlcV90ICpiaW5kX3JlcTsgICAgICAgICAgICAgLyogcG9pbnRlciB0byBO X0JJTkRfUkVRIHByaW1pdGl2ZSAqLwotICAgIE5fYmluZF9hY2tfdCAqYmluZF9hY2s7ICAgICAg ICAgICAgIC8qIHBvaW50ZXIgdG8gTl9CSU5EX0FDSyBwcmltaXRpdmUgKi8KLSAgICBjaGFyICph ZGR0bF9pbmZvOyAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGluZm8gaW4gYWRkaXRp b24gdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgTl9C SU5EX1JFUSBwcmltaXRpdmUgdGhhdCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqIHBhc3NlZCBpbiB0aGUgY29udHJvbCBzdHJ1Y3R1cmUKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0byBwdXRtc2cgKi8KLSAgICBpbnQgYWRk cl9sZW4gPSAwOyAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgYWRkcmVzcyBzdHJpbmcg Ki8KLSAgICB1bG9uZyBiaW5kX3JlcV90X3NpemU7ICAgICAgICAgICAgICAvKiBmb3IgZGVidWdn aW5nIG9ubHkgKi8KLQotI2lmZGVmIFRSQUNFCi0gICAgcHJpbnRmKCJUUkFDRTogZW50ZXJpbmcg eDI1YmluZFxuIiApOwotI2VuZGlmIC8qIFRSQUNFICovCi0KLSNpZmRlZiBERUJVRwotICAgIHBy aW50ZigiVFJBQ0U6IHgyNWJpbmQoICVkLCAlcywgJXMsICVkLCAlZCApXG4iLAotICAgICAgICAg ICBmZCwgYWRkciwgY3VkLCBsaW5lLCBiaW5kX2ZsYWdzCi0gICAgICAgICAgICk7Ci0jZW5kaWYg LyogREVCVUcgKi8KLQotICAgIC8qCi0gICAgICogQWxsb2NhdGUgIGFuZCB6ZXJvIG91dCBzcGFj ZSB0byBob2xkIHRoZSBjb250cm9sIHBvcnRpb24gb2YgdGhlCi0gICAgICogbWVzc2FnZSBwYXNz ZWQgdG8gcHV0bXNnLiBUaGlzIHdpbGwgY29udGFpbiB0aGUgTl9CSU5EX1JFUQotICAgICAqIHBy aW1pdGl2ZSBhbmQgYW55IGFkZGl0aW9uYWwgaW5mbyByZXF1aXJlZCBmb3IgdGhhdC4KLSAgICAg KgotICAgICAqIE5vdGU6IGFsbG9jYXRlZCBzcGFjZSBpcyB0aGUgc2l6ZSBvZiB0aGUgdW5pb24g dHlwZWRlZgotICAgICAqIE5fbnBpX2N0bF90IHRvIGFsbG93IHRoZSB1c2UgZm8gdGhlIGdlbmVy aWMgeDI1cHV0bXNnIHJvdXRpbmUuCi0gICAgICovCi0gICAgYmluZF9yZXEgPSAoTl9iaW5kX3Jl cV90ICopIG1hbGxvYyhzaXplb2YoIE5fbnBpX2N0bF90KSk7Ci0gICAgaWYgKGJpbmRfcmVxID09 IE5VTEwpIHsKLSAgICAgICAgcGVycm9yKCJrZXJtaXQ6IHgyNWJpbmQoKTogYmluZF9yZXEgbWFs bG9jIGZhaWxlZCIpOwotICAgICAgICBkZWJ1ZyhGMTAwLCAieDI1YmluZCBiaW5kX3JlcSBtYWxs b2MgZmFpbGVkIiwgIiIsIDApOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBiemVy bygoY2hhciAqKWJpbmRfcmVxLCBzaXplb2YoTl9ucGlfY3RsX3QpKTsKLQotICAgIC8qIEJ1aWxk IHRoZSBCaW5kIFJlcXVlc3QgUHJpbWl0aXZlICovCi0gICAgYmluZF9yZXEtPlBSSU1fdHlwZSA9 ICh1bG9uZykgTl9CSU5EX1JFUTsKLQotICAgIC8qIE5vdGUgdGhhdCB0aGUgYWRkcmVzcyBsZW5n dGggaXMgbisyIGFuZCBOT1Qgbi4gVHdvIGJ5dGVzIE1VU1QgcHJlY2VlZAotICAgICAqIHRoZSBh Y3R1YWwgYWRkcmVzcyBpbiBhbiBOX0JJTkRfUkVRLiBUaGUgZmlyc3QgYnl0ZSBjb250YWlucyB0 aGUKLSAgICAgKiBsaW5lIG51bWJlciBiZWluZyB1c2VkIHdpdGggdGhpcyBhZGRyZXNzLCBhbmQg dGhlIHNlY29uZCBieXRlIGlzIHRoZQotICAgICAqIFguMTIxIGFkZHJlc3MgcHJlZml4LCB3aGlj aCBtdXN0IGJlIHplcm8uCi0gICAgICovCi0gICAgYWRkcl9sZW4gPSBzdHJsZW4oYWRkcik7Ci0g ICAgYmluZF9yZXEtPkFERFJfbGVuZ3RoID0gKHVsb25nKSAoYWRkcl9sZW4gKyAyKTsKLSAgICBi aW5kX3JlcS0+QUREUl9vZmZzZXQgPSAodWxvbmcpKHNpemVvZihOX2JpbmRfcmVxX3QpKTsKLSAg ICBiaW5kX3JlcS0+Q09OSU5EX251bWJlciA9ICh1bG9uZyludW1fd2FpdGluZ19jYWxsczsgLyog c2VydmVyIG9ubHkgKi8KLSAgICBiaW5kX3JlcS0+QklORF9mbGFncyA9ICh1bG9uZykgYmluZF9m bGFnczsgLyogMCBpbiBjbGllbnQgKi8KLSAgICBiaW5kX3JlcS0+UFJPVE9JRF9sZW5ndGggPSAo dWxvbmcpIGN1ZF9sZW47IC8qIDAgaW4gY2xpZW50ICovCi0gICAgaWYgKGN1ZF9sZW4gPT0gMCkg ewotICAgICAgICBiaW5kX3JlcS0+UFJPVE9JRF9vZmZzZXQgPSAodWxvbmcpIDA7Ci0gICAgfSBl bHNlIHsKLSAgICAgICAgLyogbmVlZCB0byByZW1lbWJlciB0aGUgdHJhaWxpbmcgTlVMTCBpbiB0 aGUgYWRkcmVzcyAtIG5vdAotICAgICAgICAgKiBjb3VudGVkIGluIHRoZSBhZGRyZXNzIGxlbmd0 aAotICAgICAgICAgKi8KLSAgICAgICAgYmluZF9yZXEtPlBST1RPSURfb2Zmc2V0Ci0gICAgICAg ICAgPSAodWxvbmcpIChzaXplb2YoTl9iaW5kX3JlcV90KSArIGJpbmRfcmVxLT5BRERSX2xlbmd0 aCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBOb3cgZmlsbCBpbiB0aGUgYWRkaXRpb25hbCBp bmZvcm1hdGlvbiByZXF1aXJlZCB3aXRoIHRoaXMgcHJpbWl0aXZlCi0gICAgICogKGFkZHJlc3Mg YW5kIHByb3RvY29sIGluZm9ybWF0aW9uIChDYWxsIFVzZXIgRGF0YSkpCi0gICAgICovCi0gICAg YWRkdGxfaW5mbyA9IChjaGFyICopICgodm9pZCAqKWJpbmRfcmVxICsgYmluZF9yZXEtPkFERFJf b2Zmc2V0KTsKLSAgICAvKgotICAgICAqIFRoZSBiaXR3aXNlICImIiBlbnN1cmVzIHRoYXQgdGhl IGxpbmUgbnVtYmVyIGlzIG9ubHkgb25lIGJ5dGUgbG9uZwotICAgICAqLwotICAgICphZGR0bF9p bmZvKysgPSAoY2hhcikgbGluZSAmIDB4ZmY7Ci0gICAgKmFkZHRsX2luZm8rKyA9IChjaGFyKSAw OyAvKiBYLjEyMSBmb3JtYXQgKi8KLSAgICBiY29weSggYWRkciwgYWRkdGxfaW5mbywgYWRkcl9s ZW4gKTsgLyogaW5jbHVkZSB0cmFpbGluZyBudWxsICovCi0gICAgYWRkdGxfaW5mbyArPSBhZGRy X2xlbjsKLSAgICBpZiAoY3VkX2xlbiA+IDApCi0gICAgICBiY29weSggY3VkLCBhZGR0bF9pbmZv LCBjdWRfbGVuICk7Ci0gICAgLyoKLSAgICAgKiBDYWxsIHB1dG1zZygpIHRvIHB1dCB0aGUgYmlu ZCByZXF1ZXN0IG1lc3NhZ2Ugb24gdGhlIHN0cmVhbQotICAgICAqLwotICAgIGlmICh4MjVwdXRt c2coZmQsCi0gICAgICAgICAgICAgICAgICAoTl9ucGlfY3RsX3QqKWJpbmRfcmVxLAotICAgICAg ICAgICAgICAgICAgKE5fbnBpX2RhdGFfdCAqKU5VTEwsCi0gICAgICAgICAgICAgICAgICAwLAot ICAgICAgICAgICAgICAgICAgJnB1dF9mbGFncwotICAgICAgICAgICAgICAgICAgKSA8IDApIHsK LSAgICAgICAgcHJpbnRmKCAia2VybWl0OiB4MjViaW5kKCk6IHgyNXB1dG1zZyBmYWlsZWRcbiIg KTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIEFsbG9jYXRl IGFuZCB6ZXJvIG91dCBzcGFjZSBmb3IgdGhlIE5fQklORF9BQ0sgcHJpbWl0aXZlCi0gICAgICov Ci0gICAgYmluZF9hY2sgPSAoTl9iaW5kX2Fja190ICopIG1hbGxvYyhzaXplb2YoTl9ucGlfY3Rs X3QpKTsKLSAgICBpZiAoYmluZF9hY2sgPT0gTlVMTCl7Ci0gICAgICAgIHBlcnJvcigia2VybWl0 OiB4MjViaW5kKCk6IGJpbmRfYWNrIG1hbGxvYyBmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuKC0x KTsKLSAgICB9Ci0gICAgYnplcm8oYmluZF9hY2ssIHNpemVvZihOX25waV9jdGxfdCkpOwotICAg IC8qCi0gICAgICogSW5pdGlhbGl6ZSB0aGUgY29udHJvbCBzdHJ1Y3R1cmUgYW5kIGZsYWcgdmFy aWFibGUgc2VudCB0byBnZXRtc2cKLSAgICAgKi8KLSAgICBnZXRfZmxhZ3M9MDsKLQotICAgIC8q IGdldCB0aGUgQUNLIGZvciB0aGUgYmluZCAqLwotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCAi a2VybWl0OiB4MjViaW5kKCkgdHJ5aW5nIHRvIGdldCBhIEJJTkRfQUNLXG4iICk7Ci0jZW5kaWYg LyogREVCVUcgKi8KLSAgICByYyA9ICh1bG9uZyl4MjVnZXRtc2coIGZkLCAoTl9ucGlfY3RsX3Qq KWJpbmRfYWNrLAotICAgICAgICAgICAgKGludClzaXplb2YoIE5fYmluZF9hY2tfdCApLCAoTl9u cGlfZGF0YV90KilOVUxMLCAwLCAmZ2V0X2ZsYWdzLAotICAgICAgICAgICAgTl9CSU5EX0FDSyAp OwotCi0gICAgLyogdHVybiBxdWFudGl0aXZlIHJldHVybiBjb2RlIGludG8gYSBxdWFsaXRhdGl2 ZSBvbmUgKi8KLSAgICBpZiAocmMgPiAwKSByYyA9IDA7Ci0KLSAgICAvKiBpZiBhbGwgd2VudCB3 ZWxsLCBnZXQgdGhlIHRva2VuIGZyb20gdGhlIGFja25vd2xlZGdlbWVudCBwYWNrZXQgKi8KLSAg ICBpZiAoKGJpbmRfZmxhZ3MgJiBUT0tFTl9SRVFVRVNUICkgJiYgKCByYyA+PSAwKSkgewotICAg ICAgICByYyA9IGJpbmRfYWNrLT5UT0tFTl92YWx1ZTsKLSAgICB9Ci0KLSAgICAvKiBmcmVlIHVw IHRoZSBtZW1vcnkgd2UgYWxsb2NhdGVkIGVhcmxpZXIgKi8KLSAgICBmcmVlKGJpbmRfcmVxKTsK LSAgICBmcmVlKGJpbmRfYWNrKTsKLQotI2lmZGVmIFRSQUNFCi0gICAgcHJpbnRmKCAiVFJBQ0U6 IGxlYXZpbmcgeDI1YmluZFxuIiApOwotI2VuZGlmIC8qIFRSQUNFICovCi0KLSAgICByZXR1cm4o IHJjICk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBGdW5jdGlvbjogeDI1Y2FsbAot KiBEZXNjcmlwdGlvbjogIFRoaXMgcm91dGluZSBidWlsZHMgYW5kIHNlbmRzIGFuIE5fQ09OTl9S RVEgcHJpbWl0aXZlLCB0aGVuCi0qICAgICAgICAgICAgICAgY2hlY2tzIGZvciBhbiBOX0NPTk5f Q09OIHByaW1pdGl2ZSBpbiByZXR1cm4uCi0qCi0qIFBhcmFtZXRlcnM6Ci0qIGZkICAgIC0gZmls ZSBkZXNjcmlwdG9yIG9mIHN0cmVhbQotKiBjYWRkciAtIGNhbGxlZCBhZGRyZXNzIChyZW1vdGUg YWRkcmVzcykKLSoKLSogRnVuY3Rpb25zIFJlZmVyZW5jZWQ6Ci0qIG1hbGxvYygpCi0qIGJ6ZXJv KCkKLSogZ2V0bXNnKCkKLSogcHV0bXNnKCkKLSoKLSogUmV0dXJuIGNvZGU6Ci0qIDAgLSBpZiBz dWNjZXNzZnVsCi0qIC0xIGlmIG5vdCBzdWNjZXNzZnVsCi0qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K LWludAoteDI1Y2FsbChmZCwgcmVtb3RlX251YSwgY3VkKQotICAgIGludCBmZDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFgyNSBkZXZpY2UgKG9wZW5lZCkgKi8KLSAgICBjaGFyICog cmVtb3RlX251YTsgICAgICAgICAgICAgICAgICAvKiByZW1vdGUgYWRkcmVzcyB0byBjYWxsICov Ci0gICAgY2hhciAqIGN1ZDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FsbCB1c2VyIGRh dGEgKi8KLS8qIHgyNWNhbGwgKi8gewotICAgIGludCByYzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHJldHVybiBjb2RlICovCi0gICAgaW50IGZsYWdzOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ29ubmVjdGlvbiBmbGFncyAqLwotICAgIGludCBnZXRfZmxhZ3M7ICAgICAg ICAgICAgICAgICAgICAgIC8qIHByaW9yaXR5IGZsYWdzIGZvciBnZXRtc2cgKi8KLSAgICB1bG9u ZyB0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmltaXRpdmUgdHlwZSAqLwotICAg IE5fY29ubl9yZXFfdCAqY29ubnJlcV9jdGw7ICAgICAgICAgIC8qIHBvaW50ZXIgdG8gTl9DT05O X1JFUSBwcmltaXRpdmUgKi8KLSAgICBOX25waV9kYXRhX3QgKmNvbm5yZXFfZGF0YTsgICAgICAg ICAvKiBwb2ludGVyIHRvIE5fQ09OTl9SRVEgZGF0YSAoQ1VEKSAqLwotICAgIGludCBjb25ucmVx X2RhdGFfbGVuOyAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBmaWxsZWQgZGF0YSBidWZmZXIg Ki8KLSAgICBOX2Nvbm5fY29uX3QgKmNvbm5jb25fY3RsOyAgICAgICAgICAvKiBwb2ludGVyIHRv IE5fQ09OTl9DT04gcHJpbWl0aXZlICovCi0gICAgTl9ucGlfZGF0YV90ICpjb25uY29uX2RhdGE7 ICAgICAgICAgLyogcG9pbnRlciB0byBhbnkgZGF0YSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgTl9DT05OX0NPTiBwcmltaXRp dmUgKi8KLSAgICBjaGFyICphZGR0bF9pbmZvOyAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVy IHRvIGFkZGl0aW9uYWwgaW5mbyBuZWVkZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKiBmb3IgTl9DT05OX1JFUSBwcmltaXRpdmUgKi8KLSAgICBpbnQgYWRkcl9s ZW47ICAgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgYWRkcmVzcyAqLwotCi0jaWZk ZWYgVFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogZW50ZXJpbmcgeDI1Y2FsbFxuIiApOwotI2Vu ZGlmIC8qIFRSQUNFICovCi0KLSNpZmRlZiBERUJVRwotICAgIHByaW50ZiggIngyNWNhbGwoICVk LCAlcyApXG4iLCBmZCwgcmVtb3RlX251YSApOwotICAgIHByaW50ZiggImNvbm5lY3RpbmcgdG8g JXMgb24gZmQgJWRcbiIsIHJlbW90ZV9udWEsIGZkICk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQot ICAgIC8qCi0gICAgICogQWxsb2NhdGUgYW5kIHplcm8gb3V0IHNwYWNlIGZvciB0aGUgTl9DT05O X1JFUSBwcmltaXRpdmUKLSAgICAgKiB1c2UgdGhlIHNpemUgb2YgdGhlIGdlbmVyaWMgTlBJIHBy aW1pdGl2ZSBjb250cm9sIGJ1ZmZlcgotICAgICAqLwotICAgIGNvbm5yZXFfY3RsICA9IChOX2Nv bm5fcmVxX3QgKikgbWFsbG9jKHNpemVvZihOX25waV9jdGxfdCkpOwotICAgIGlmIChjb25ucmVx X2N0bCA9PSBOVUxMKXsKLSAgICAgICAgcGVycm9yKCJrZXJtaXQ6IHgyNWNhbGwoKTogY29ubnJl cV9jdGwgbWFsbG9jIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBi emVybyhjb25ucmVxX2N0bCxzaXplb2YoTl9ucGlfY3RsX3QpKTsKLSAgICAvKgotICAgICAqIEJ1 aWxkIHRoZSBDb25uZWN0aW9uIFJlcXVlc3QgUHJpbWl0aXZlCi0gICAgICovCi0gICAgZmxhZ3Mg PSAwOwotICAgIGNvbm5yZXFfY3RsLT5QUklNX3R5cGUgPSAodWxvbmcpIE5fQ09OTl9SRVE7Ci0K LSAgICAvKiBOb3RlIHRoYXQgdGhlIGFkZHJlc3MgbGVuZ3RoIGlzIG5jaGFpKzEgYW5kIG5vdCBu KzIuIFRoZSBsaW5lIG51bWJlcgotICAgICAqIGlzIG9ubHkgcGFzc2VkIHdpdGggdGhlIGFkZHJl c3MgZm9yIHRoZSBiaW5kLiBUaGUgZmlyc3QgYnl0ZSBvZgotICAgICAqIHRoZSBhZGRyZXNzIGZv ciB0aGUgTl9DT05OIHByaW1pdGl2ZXMgY29udGFpbnMgdGhlIFguMTIxCi0gICAgICogYWRkcmVz cyBwcmVmaXgsIHdoaWNoIG11c3QgYmUgemVyby4gVGhlIHJlbWFpbmluZyBieXRlcyBhcmUgdGhl Ci0gICAgICogYWRkcmVzcyBpdHNlbGYuCi0gICAgICovCi0gICAgYWRkcl9sZW4gPSBzdHJsZW4o IHJlbW90ZV9udWEgKTsKLSAgICBjb25ucmVxX2N0bC0+REVTVF9sZW5ndGggPSAodWxvbmcpIChh ZGRyX2xlbiArIDEpOwotICAgIGNvbm5yZXFfY3RsLT5ERVNUX29mZnNldCA9ICh1bG9uZykgc2l6 ZW9mKE5fY29ubl9yZXFfdCk7Ci0gICAgLyogY29ubnJlcV9jdGwtPkNPTk5fZmxhZ3MgPSAodWxv bmcpRVhfREFUQV9PUFQgfCBSRUNfQ09ORl9PUFQ7ICovCi0gICAgY29ubnJlcV9jdGwtPkNPTk5f ZmxhZ3MgPSAodWxvbmcpIDA7Ci0gICAgY29ubnJlcV9jdGwtPlFPU19sZW5ndGggPSAodWxvbmcp IDA7ICAgICAgICAvKiB1bnN1cHBvcnRlZCBpbiBBSVggNC4xICovCi0gICAgY29ubnJlcV9jdGwt PlFPU19vZmZzZXQgPSAodWxvbmcpIDA7ICAgICAgICAvKiB1bnN1cHBvcnRlZCBpbiBBSVggNC4x ICovCi0KLSAgICBhZGR0bF9pbmZvID0gKGNoYXIgKikgKCh2b2lkKiljb25ucmVxX2N0bCArIGNv bm5yZXFfY3RsLT5ERVNUX29mZnNldCk7Ci0gICAgKmFkZHRsX2luZm8rKyA9IChjaGFyKSAwOyAv KiBYLjEyMSBmb3JtYXQgKi8KLSAgICBiY29weSggcmVtb3RlX251YSwgYWRkdGxfaW5mbywgYWRk cl9sZW4gKTsKLQotICAgIC8qCi0gICAgICogc2V0dXAgdGhlIGRhdGEgYnVmZmVyIGZvciB0aGUg Y29ubmVjdGlvbiByZXF1ZXN0Ci0gICAgICovCi0gICAgY29ubnJlcV9kYXRhICA9IChOX25waV9k YXRhX3QgKikgbWFsbG9jKHNpemVvZihOX25waV9kYXRhX3QpKTsKLSAgICBpZiAoY29ubnJlcV9k YXRhID09IE5VTEwpewotICAgICAgICBwZXJyb3IoImtlcm1pdDogeDI1Y2FsbCgpOiBjb25ucmVx X2RhdGEgbWFsbG9jIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBi emVybyhjb25ucmVxX2RhdGEsc2l6ZW9mKE5fbnBpX2RhdGFfdCkpOwotCi0gICAgLyogZmFjaWxp dHkgc2VsZWN0aW9uIG5lZWRzIHRvIGJlIHB1dCBpbiB0aGUgZnJvbnQgb2YgY29ubnJlcV9kYXRh ICovCi0gICAgY29ubnJlcV9kYXRhX2xlbiA9IDA7Ci0gICAgY29ubnJlcV9kYXRhX2xlbiArPSB4 MjVmYWNpbGl0aWVzKCAoY2hhciAqKWNvbm5yZXFfZGF0YSApOwotICAgIGlmIChjdWQgJiYgKmN1 ZCkgewotICAgICAgICBiY29weShjdWQsCi0gICAgICAgICAgICAgIChjaGFyICopKChjaGFyICop Y29ubnJlcV9kYXRhICsgY29ubnJlcV9kYXRhX2xlbiksCi0gICAgICAgICAgICAgIHN0cmxlbihj dWQpCi0gICAgICAgICAgICAgICk7Ci0gICAgICAgIGNvbm5yZXFfZGF0YV9sZW4gKz0gc3RybGVu KCBjdWQgKTsKLSAgICAgICAgfQotCi0gICAgLyoKLSAgICAgKiBDYWxsIHB1dG1zZygpIHRvIHB1 dCB0aGUgY29ubmVjdGlvbiByZXF1ZXN0IG1lc3NhZ2Ugb24gdGhlIHN0cmVhbQotICAgICAqLwot ICAgIHJjID0geDI1cHV0bXNnKCBmZCwgKE5fbnBpX2N0bF90Kiljb25ucmVxX2N0bCwgY29ubnJl cV9kYXRhLAotICAgICAgICAgICAgY29ubnJlcV9kYXRhX2xlbiwgJmZsYWdzICk7Ci0gICAgaWYg KHJjIDwgMCkgewotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIC8qCi0gICAgICog QWxsb2NhdGUgYW5kIHplcm8gb3V0IHNwYWNlIGZvciB0aGUgTl9DT05OX0NPTiBwcmltaXRpdmUK LSAgICAgKi8KLSAgICBpZiAoKGNvbm5jb25fY3RsID0gKE5fY29ubl9jb25fdCAqKSBtYWxsb2Mo c2l6ZW9mKE5fbnBpX2N0bF90KSkpID09IE5VTEwpIHsKLSAgICAgICAgcGVycm9yKCJrZXJtaXQ6 IHgyNWNhbGwoKTogY29ubmNvbl9jdGwgbWFsbG9jIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4o LTEpOwotICAgIH0KLSAgICBiemVybyhjb25uY29uX2N0bCwgc2l6ZW9mKE5fbnBpX2N0bF90KSk7 Ci0KLSAgICAvKgotICAgICAqIEFsbG9jYXRlIGFuZCB6ZXJvIG91dCBzcGFjZSBmb3IgYW55IGRh dGEgYXNzb2NpYXRlZCB3aXRoIE5fQ09OTl9DT04KLSAgICAgKi8KLSAgICBpZiAoIChjb25uY29u X2RhdGEgPSAoTl9ucGlfZGF0YV90ICopIG1hbGxvYyhOUElfTUFYX0RBVEEpKSA9PSBOVUxMKSB7 Ci0gICAgICAgIHBlcnJvcigia2VybWl0OiB4MjVjYWxsKCk6IGNvbm5jb25fZGF0YSBtYWxsb2Mg ZmFpbGVkIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGJ6ZXJvKGNvbm5jb25f ZGF0YSwgTlBJX01BWF9EQVRBKTsKLQotICAgIC8qIEluaXRpYWxpemUgYW5kIGJ1aWxkIHRoZSBz dHJ1Y3R1cmVzIGZvciBnZXRtc2cgKi8KLSAgICBnZXRfZmxhZ3M9MDsKLQotICAgIHJjID0geDI1 Z2V0bXNnKCBmZCwgKE5fbnBpX2N0bF90Kiljb25uY29uX2N0bCwgKGludClzaXplb2YoIE5fY29u bl9jb25fdCApLAotICAgICAgICAgICAgY29ubmNvbl9kYXRhLCBOUElfTUFYX0RBVEEsICZnZXRf ZmxhZ3MsIE5fQ09OTl9DT04gKTsKLQotICAgIC8qIHR1cm4gcXVhbnRpdGl2ZSByZXR1cm4gY29k ZSBpbnRvIGEgcXVhbGl0YXRpdmUgb25lICovCi0gICAgaWYgKHJjID4gMCkgcmMgPSAwOwotCi0g ICAgLyogRnJlZSB0aGUgc3BhY2UgdGhhdCB3ZSBubyBsb25nZXIgbmVlZCAqLwotICAgIGlmIChj b25ucmVxX2N0bCkgeyBmcmVlKGNvbm5yZXFfY3RsKTsgY29ubnJlcV9jdGwgPSBOVUxMOyB9Ci0g ICAgaWYgKGNvbm5jb25fY3RsKSB7IGZyZWUoY29ubmNvbl9jdGwpOyBjb25uY29uX2N0bCA9IE5V TEw7IH0KLSAgICBpZiAoY29ubmNvbl9kYXRhKSB7IGZyZWUoY29ubmNvbl9kYXRhKTsgY29ubmNv bl9kYXRhID0gTlVMTDsgfQotCi0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogbGVh dmluZyB4MjVjYWxsXG4iICk7Ci0jZW5kaWYgLyogVFJBQ0UgKi8KLQotICAgIHJldHVybihyYyk7 Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRnVuY3Rpb246IHgyNWdldGNhbGwKLSAq Ci0gKiBEZXNjcmlwdGlvbjogVGhpcyByb3V0aW5lIGNoZWNrcyBmb3IgYW4gaW5jb21taW5nIGNh bGwsIHZlcmlmaWVkCi0gKiB0aGF0IGl0IGlzIGEgQ09OTklORCAoY29ubmVjdGlvbiBpbmRpY2F0 aW9uKSBtZXNzYWdlLCBhbmQgdGhlbgotICogYWNjZXB0cyB0aGUgY2FsbCBhbmQgcmV0dXJucyB0 aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBuZXcgc3RyZWFtCi0gKgotICogUGFyYW1ldGVyczoK LSAqIGZkICAgLSBmaWxlIGRlc2NyaXB0b3Igb2YgbGlzdGVuaW5nIHN0cmVhbQotICoKLSAqIFJl dHVybiBDb2RlczoKLSAqIGNhbGxmZCAgICAgICAtIGZpbGUgZGVzY3JpcHRvciBvZiBjb25uZWN0 ZWQgaW5jb21taW5nIGNhbGwuCi0gKiAgICAgICAgICAgICAgLSBzZXQgdG8gLTEgaWYgYW4gZXJy b3Igb2NjdXJlZAotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludAoteDI1Z2V0Y2FsbChm ZCkgaW50IGZkOyB7Ci0gICAgaW50IHgyNWNhbGxmZDsgICAgICAgICAgICAgICAgICAgICAgLyog ZmQgb2YgaW5jb21taW5nIGNhbGwgKi8KLSAgICBOX2Nvbm5faW5kX3QgKmNvbm5pbmRfY3RsOyAg ICAgICAgICAvKiBjb25uaW5kIGNvbnRyb2xsIGJ1ZmZlciAqLwotICAgIE5fbnBpX2RhdGFfdCAq Y29ubmluZF9kYXRhOyAgICAgICAgIC8qIGNvbm5pbmQgZGF0YSBidWZmZXIgKi8KLSAgICBpbnQg Z2V0X2ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyBmb3IgZ2V0bXNnICovCi0g ICAgdWxvbmcgZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbiBmbGFn cyAqLwotICAgIGludCByYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBj b2RlICovCi0KLSAgICBleHRlcm4geDI1YWRkcl90IHJlbW90ZV9udWE7ICAgICAgICAvKiByZW1v dGUgWC4yNSBhZGRyIGdsb2JhbCB2YXIgKi8KLQotI2lmZGVmIFRSQUNFCi0gICAgcHJpbnRmKCAi VFJBQ0U6IGVudGVyaW5nIHgyNWdldGNhbGxcbiIgKTsKLSNlbmRpZiAvKiBUUkFDRSAqLwotCi0g ICAgLyogYWxsb2NhdGUgc3BhY2UgZm9yIGNvbm5lY3Rpb24gaW5kaWNhdGlvbiBidWZmZXJzICov Ci0gICAgaWYgKChjb25uaW5kX2N0bCA9IChOX2Nvbm5faW5kX3QgKiltYWxsb2Moc2l6ZW9mKE5f bnBpX2N0bF90KSkpID09IE5VTEwpIHsKLSAgICAgICAgcGVycm9yKCJrZXJtaXQ6IHgyNWdldGNh bGwoKTogY29ubmluZF9jdGwgbWFsbG9jIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4gKC0xKTsK LSAgICB9Ci0gICAgYnplcm8oY29ubmluZF9jdGwsIHNpemVvZihOX25waV9jdGxfdCkpOwotCi0g ICAgaWYgKChjb25uaW5kX2RhdGEgPSAoTl9ucGlfZGF0YV90ICopbWFsbG9jKE5QSV9NQVhfREFU QSkpID09IE5VTEwpIHsKLSAgICAgICAgcGVycm9yKCJrZXJtaXQ6IHgyNWdldGNhbGwoKTogY29u bmluZF9kYXRhIG1hbGxvYyBmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgfQot ICAgIGJ6ZXJvKGNvbm5pbmRfZGF0YSwgTlBJX01BWF9EQVRBKTsKLQotICAgIC8qIGluaXRpYWxp c2UgY29udHJvbCBzdHJ1Y3R1cmVzICovCi0gICAgZ2V0X2ZsYWdzID0gMDsKLQotICAgIC8qIGNh bGwgZ2V0bXNnIHRvIGNoZWNrIGZvciBhIGNvbm5lY3Rpb24gaW5kaWNhdGlvbiAqLwotICAgIGlm ICh4MjVnZXRtc2coZmQsCi0gICAgICAgICAgICAgICAgICAoTl9ucGlfY3RsX3QqKWNvbm5pbmRf Y3RsLAotICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoTl9jb25uX2luZF90KSwKLSAgICAg ICAgICAgICAgICAgIGNvbm5pbmRfZGF0YSwKLSAgICAgICAgICAgICAgICAgIE5QSV9NQVhfREFU QSwKLSAgICAgICAgICAgICAgICAgICZnZXRfZmxhZ3MsCi0gICAgICAgICAgICAgICAgICBOX0NP Tk5fSU5ECi0gICAgICAgICAgICAgICAgICApIDwgMCkgewotI2lmZGVmIERFQlVHCi0gICAgICAg IHByaW50ZiggIngyNWdldGNhbGwoKTogZXJybm8gaXM6ICVkXG4iLCBlcnJubyApOwotI2VuZGlm IC8qIERFQlVHICovCi0gICAgICAgIHBlcnJvciAoIngyNWdldGNhbGwoKTogZ2V0bXNnIGZhaWxl ZCIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIC8qIGEgY29ubmVjdGlvbiBp bmRpY2F0aW9uIHdhcyByZWNlaXZlZAotICAgICAqIC0gcHVsbCBpdCB0byBiaXRzIGFuZCBhbnN3 ZXIgdGhlIGNhbGwKLSAgICAgKi8KLSAgICB4MjVzZXFubyA9IGNvbm5pbmRfY3RsLT5TRVFfbnVt YmVyOwotICAgIGZsYWdzID0gY29ubmluZF9jdGwtPkNPTk5fZmxhZ3M7Ci0jaWZkZWYgREVCVUcK LSAgICBwcmludGYoICJzZXR0aW5nIHJlbW90ZV9udWEgdG8gYSBuZXcgdmFsdWUgZHVlIHRvIGlu Y29tbWluZyBjYWxsXG4iICk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAvKgotICAgICAqIG5v IGd1YXJhbnRlZSB0aGF0IHRoZSBhZGRyZXNzIGlzIG51bGwgdGVybWluYXRlZCwgZW5zdXJlIHRo YXQKLSAgICAgKiBhZnRlciBjb3B5aW5nIHRoYXQgaXQgaXMgKGFzc3VtcHRpb246IHJlbW90ZV9u dWEgaXMgbG9uZ2VyIHRoYW4KLSAgICAgKiB0aGUgYWRkcmVzcyArIDEpCi0gICAgICovCi0gICAg Ynplcm8ocmVtb3RlX251YSwgc2l6ZW9mKHJlbW90ZV9udWEpKTsKLSAgICAvKiBub3RlOiBjb25u aW5kX2N0bCBjb250YWlucyBhIHgxMjEgYWRkcmVzcywgd2hpY2ggaGFzIGEgbnVsbCBhcwotICAg ICAqIHRoZSBGSVJTVCBjaGFyYWN0ZXIgLSBzdHJpcCBpdCBvZmYhCi0gICAgICovCi0gICAgY2tz dHJuY3B5KHJlbW90ZV9udWEsCi0gICAgICAgICAgICAoY2hhciopKChjaGFyKiljb25uaW5kX2N0 bCArIGNvbm5pbmRfY3RsLT5TUkNfb2Zmc2V0ICsgMSksCi0gICAgICAgICAgICBjb25uaW5kX2N0 bC0+U1JDX2xlbmd0aCAtIDEKLSAgICAgICAgICAgICk7Ci0jaWZkZWYgREVCVUcKLSAgICBwcmlu dGYoICJyZW1vdGVfbnVhIHNldCB0byBuZXcgdmFsdWUgb2YgJXNcbiIsIHJlbW90ZV9udWEgKTsK LSNlbmRpZiAvKiBERUJVRyAqLwotCi0gICAgLyogZXJyb3JzIGhhbmRsZWQgYnkgY2FsbGVlICov Ci0gICAgeDI1Y2FsbGZkID0geDI1YWNjZXB0KHgyNXNlcW5vLCBmbGFncyk7Ci0KLSAgICAvKiBm cmVlIHRoZSBtYWxsb2MnZCBidWZmZXJzICovCi0gICAgaWYgKGNvbm5pbmRfY3RsKSB7IGZyZWUo Y29ubmluZF9jdGwpOyBjb25uaW5kX2N0bCA9IE5VTEw7IH0KLSAgICBpZiAoY29ubmluZF9kYXRh KSB7IGZyZWUoY29ubmluZF9kYXRhKTsgY29ubmluZF9kYXRhID0gTlVMTDsgfQotCi0jaWZkZWYg VFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogbGVhdmluZyB4MjVnZXRjYWxsXG4iICk7Ci0jZW5k aWYgLyogVFJBQ0UgKi8KLQotICAgIC8qIHJldHVybiB0aGUgZmlsZSBkZXNjcmlwdG9yIChvciBl cnJvciBpZiA8IDApICovCi0gICAgcmV0dXJuKCB4MjVjYWxsZmQgKTsKLX0KLQotLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCi0gKiBGdW5jdGlvbjogeDI1YWNjZXB0Ci0gKgotICogRGVzY3JpcHRpb246 IGFjY2VwdCBhbiBpbmNvbW1pbmcgY2FsbAotICogICAgICAgICAgICAgIFRoaXMgZXNzZW50aWFs bHkgbWVhbnMgb3BlbmluZyBhIG5ldyBTVFJFQU0gYW5kIHNlbmRpbmcKLSAqICAgICAgICAgICAg ICBhbiBhY2tub3dsZWRnZSBiYWNrIHRvIHRoZSBjYWxsZXIuCi0gKgotICogUGFyYW1ldGVyczoK LSAqICAgICAgc2Vxbm8gICAtIHNlcXVlbmNlIG51bWJlciBmb3IgYWNrbm93bGVkZ2VtZW50Ci0g KiAgICAgIGZsYWdzICAgLSBmbGFncyBwYXNzZWQgdG8gdXMgYnkgdGhlIGNhbGxlcgotICoKLSAq IFJldHVybiBDb2RlczoKLSAqICAgICAgZmQgICAgICAtIGZpbGUgZGVzY3JpcHRvciBvZiBuZXcg U1RSRUFNCi0gKiAgICAgICAgICAgICAgICBzZXQgdG8gLTEgaWYgYW4gZXJyb3Igb2NjdXJlZAot ICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludAoteDI1YWNjZXB0KHNlcW5vLGZsYWdzKQot ICAgIHVsb25nIHNlcW5vOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb24gc2Vx dWVuY2UgbnVtYmVyICovCi0gICAgdWxvbmcgZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAg LyogY29ubmVjdGlvbiBmbGFncyAqLwotLyogeDI1YWNjZXB0ICovIHsKLSAgICBpbnQgeDI1Y2Fs bGZkOyAgICAgICAgICAgICAgICAgICAgICAvKiBmZCBmb3IgaW5jb21taW5nIGNhbGwgKi8KLSAg ICBpbnQgZ2V0X2ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiBwcmlvcml0eSBmbGFncyBm b3IgZ2V0bXNnICovCi0gICAgaW50IHB1dF9mbGFncyA9IDA7ICAgICAgICAgICAgICAgICAgLyog ZmxhZ3MgZm9yIHB1dG1zZywgYWx3YXlzIDAgKi8KLSAgICBpbnQgYWRkcl9sZW47ICAgICAgICAg ICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgbG9jYWwgYWRkcmVzcyAqLwotICAgIHVsb25nIHRv a2VuOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb24gdG9rZW4gKi8KLSAgICBO X2Nvbm5fcmVzX3QgKmNvbm5fcmVzOyAgICAgICAgICAgICAvKiBOX0NPTk5fUkVTIHByaW1pdGl2 ZSAqLwotICAgIE5fb2tfYWNrX3QgKm9rX2FjazsgICAgICAgICAgICAgICAgIC8qIE5fT0tfQUNL IHByaW1pdGl2ZSAqLwotICAgIGNoYXIgKmFkZHRsX2luZm87ICAgICAgICAgICAgICAgICAgIC8q IHRlbXAgcG9pbnRlciAqLwotICAgIGludCByYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRlbXBvcmFyeSByZXR1cm4gY29kZSAqLwotCi0vKiBnbG9iYWwgdmFyaWFibGVzIGZyb20g Y2tjbWFpLmMgKi8KLSAgICBleHRlcm4gaW50IHJldmNhbGwsIGNsb3NnciwgY3VkYXRhOwotICAg IGV4dGVybiBjaGFyIHVkYXRhW107Ci0gICAgZXh0ZXJuIHgyNWFkZHJfdCBsb2NhbF9udWE7ICAg ICAgICAgLyogbG9jYWwgWC4yNSBhZGRyZXNzICovCi0gICAgZXh0ZXJuIGNoYXIgeDI1bmFtZVtd OyAgICAgICAgICAgICAgLyogeDI1IGRldmljZSBuYW1lIChzeDI1YTApICovCi0gICAgZXh0ZXJu IGNoYXIgeDI1ZGV2W107ICAgICAgICAgICAgICAgLyogeDI1IGRldmljZSBmaWxlIC9kZXYveDI1 cGt0ICovCi0gICAgZXh0ZXJuIGludCB4MjVwb3J0OyAgICAgICAgICAgICAgICAgLyogbG9naWNh bCBwb3J0IHRvIHVzZSAqLwotICAgIHVsb25nIGJpbmRfZmxhZ3MgPSAwOyAgICAgICAgICAgICAg IC8qIGZsYWdzIGZvciBiaW5kaW5nIHRoZSBYMjUgc3RyZWFtICovCi0KLSNpZmRlZiBUUkFDRQot ICAgIHByaW50ZiggIlRSQUNFOiBlbnRlcmluZyB4MjVhY2NlcHRcbiIgKTsKLSNlbmRpZiAvKiBU UkFDRSAqLwotCi0gICAgLyogb3BlbiBhIG5ldyBwYWNrZXQgbGV2ZWwgc3RyZWFtICovCi0gICAg aWYgKCh4MjVjYWxsZmQgPSBvcGVuKHgyNWRldiwgT19SRFdSKSkgPCAwKSB7Ci0gICAgICAgIHBl cnJvciAoImtlcm1pdDogeDI1YWNjZXB0KCk6IFguMjUgZGV2aWNlIG9wZW4gZXJyb3IiKTsKLSAg ICAgICAgZGVidWcoRjEwMSwieDI1YWNjZXB0KCkgZGV2aWNlIG9wZW4gZXJyb3IiLCIiLGVycm5v KTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICAvKiBwdXNoIHRoZSBOUEkgb250 byB0aGUgU1RSRUFNICovCi0gICAgaWYgKGlvY3RsKHgyNWNhbGxmZCxJX1BVU0gsIm5waSIpIDwg MCkgewotICAgICAgICBwZXJyb3IoICJrZXJtaXQ6IHgyNWFjY2VwdCgpOiBjb3VsZG4ndCBwdXNo IG5waSBvbiB0aGUgWDI1IHN0cmVhbSIgKTsKLSAgICAgICAgZGVidWcoRjEwMSwieDI1YWNjZXB0 IGNhbid0IHB1c2ggbnBpIG9uIHRoZSBYMjUgc3RyZWFtIiwiIixlcnJubyk7Ci0gICAgICAgIHJl dHVybiAoLTEpOwotICAgIH0KLQotICAgIC8qIGJpbmQga2VybWl0IHNlcnZlciB0byB0aGUgbG9j YWwgWDI1IGFkZHJlc3MgKi8KLSAgICAvKiB0YWtlbiBmcm9tIC91c3Ivc2FtcGxlcy9zeDI1L25w aS9ucGlzZXJ2ZXIuYyAoQUlYIDQpICovCi0gICAgYmluZF9mbGFncyB8PSBUT0tFTl9SRVFVRVNU OwotICAgIHRva2VuID0geDI1YmluZCh4MjVjYWxsZmQsbG9jYWxfbnVhLChjaGFyICopTlVMTCww LDAseDI1cG9ydCxiaW5kX2ZsYWdzKTsKLSAgICBpZiAodG9rZW4gPCAwKSB7Ci0gICAgICAgIHBy aW50ZiggImtlcm1pdDogeDI1YWNjZXB0KCk6IGNvdWxkbid0IGJpbmQgdG8gbG9jYWwgWDI1IGFk ZHJlc3NcbiIgKTsKLSAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICByZXR1cm4oLTEpOwotICAg IH0KLQotICAgIC8qIGFsbG9jYXRlIGNvbm5lY3Rpb24gcmVzcG9uc2UgcHJpbWl0aXZlICovCi0g ICAgaWYgKChjb25uX3JlcyA9IChOX2Nvbm5fcmVzX3QgKiltYWxsb2MoIE5QSV9NQVhfQ1RMICkp ID09IE5VTEwpIHsKLSAgICAgICAgcGVycm9yKCJrZXJtaXQ6IHgyNWFjY2VwdCgpOiBjb25uX3Jl cyBtYWxsb2MgZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLSAgICBiemVy bygoY2hhciAqKWNvbm5fcmVzLCBOUElfTUFYX0NUTCk7Ci0KLSAgICAvKiBzZXR1cCBjb25uZWN0 aW9uIHJlc3BvbnNlIHByaW1pdGl2ZSAqLwotICAgIGFkZHJfbGVuID0gc3RybGVuKCBsb2NhbF9u dWEgKTsKLSAgICBjb25uX3Jlcy0+UFJJTV90eXBlID0gKHVsb25nKU5fQ09OTl9SRVM7Ci0gICAg Y29ubl9yZXMtPlRPS0VOX3ZhbHVlID0gdG9rZW47Ci0gICAgLyogbm90ZSBhZGRyZXNzIGxlbmd0 aCBpcyBuKzEgdG8gYWNjb21vZGF0ZSB0aGUgWC4xMjEgYWRkcmVzcyBwcmVmaXggKi8KLSAgICBj b25uX3Jlcy0+UkVTX2xlbmd0aCA9ICh1bG9uZykoYWRkcl9sZW4gKyAxKTsKLSAgICBjb25uX3Jl cy0+UkVTX29mZnNldCA9ICh1bG9uZylzaXplb2YoIE5fY29ubl9yZXNfdCApOwotICAgIGNvbm5f cmVzLT5TRVFfbnVtYmVyID0gc2Vxbm87Ci0gICAgY29ubl9yZXMtPkNPTk5fZmxhZ3MgPSAwOwot ICAgIGNvbm5fcmVzLT5RT1NfbGVuZ3RoID0gMDsgICAgICAgICAgIC8qIHVuc3VwcG9ydGVkIC0g bXVzdCBiZSAwICghPykgKi8KLSAgICBjb25uX3Jlcy0+UU9TX29mZnNldCA9IDA7Ci0KLSAgICBh ZGR0bF9pbmZvID0gKGNoYXIgKikoKGNoYXIgKiljb25uX3JlcyArIGNvbm5fcmVzLT5SRVNfb2Zm c2V0KTsKLSAgICAqYWRkdGxfaW5mbysrID0gKGNoYXIpMDsgICAgLyogWC4xMjEgYWRkcmVzcyBw cmVmaXggKi8KLSAgICBiY29weSggbG9jYWxfbnVhLCBhZGR0bF9pbmZvLCBhZGRyX2xlbiApOwot Ci0gICAgLyoKLSAgICAgKiBzZW5kIG9mZiB0aGUgY29ubmVjdCByZXNwb25zZQotICAgICAqLwot ICAgIGlmICh4MjVwdXRtc2coeDI1Y2FsbGZkLAotICAgICAgICAgICAgICAgICAgKE5fbnBpX2N0 bF90Kiljb25uX3JlcywKLSAgICAgICAgICAgICAgICAgIChOX25waV9kYXRhX3QgKilOVUxMLAot ICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICZwdXRfZmxhZ3MKLSAgICAg ICAgICAgICAgICAgICkgPCAwICkgewotICAgICAgICBwZXJyb3IoImtlcm1pdDogeDI1YWNjZXB0 KCk6IHB1dG1zZyBjb25uZWN0IHJlc3BvbnNlIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4oLTEp OwotICAgIH0KLQotICAgIC8qCi0gICAgICogQWxsb2NhdGUgYW5kIHplcm8gb3V0IHNwYWNlIGZv ciB0aGUgT0tfQUNLIHByaW1pdGl2ZQotICAgICAqLwotICAgIGlmICgob2tfYWNrID0gKE5fb2tf YWNrX3QgKikgbWFsbG9jKHNpemVvZihOX25waV9jdGxfdCkpKSA9PSBOVUxMKSB7Ci0gICAgICAg IHBlcnJvcigia2VybWl0OiB4MjVjYWxsKCk6IG9rX2FjayBtYWxsb2MgZmFpbGVkIik7Ci0gICAg ICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGJ6ZXJvKG9rX2Fjaywgc2l6ZW9mKE5fbnBpX2N0 bF90KSk7Ci0KLSAgICAvKiBJbml0aWFsaXplIGFuZCBidWlsZCB0aGUgc3RydWN0dXJlcyBmb3Ig Z2V0bXNnICovCi0gICAgZ2V0X2ZsYWdzPTA7Ci0KLSAgICByYyA9IChpbnQpeDI1Z2V0bXNnKHgy NWNhbGxmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIChOX25waV9jdGxfdCopb2tfYWNrLAot ICAgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoTl9va19hY2tfdCksCi0gICAgICAg ICAgICAgICAgICAgICAgICAoTl9ucGlfZGF0YV90KilOVUxMLAotICAgICAgICAgICAgICAgICAg ICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZnZXRfZmxhZ3MsCi0gICAgICAgICAg ICAgICAgICAgICAgICBOX09LX0FDSwotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBp ZiAocmMgPT0gMCkgewotICAgICAgICAvKiBzZXF1ZW5jZSBudW1iZXIgaXMgb25seSBmb3IgZGlz Y29ubmVjdGluZyB3aGVuIG5vdCBjb25uZWN0ZWQgIT8gKi8KLSAgICAgICAgeDI1c2Vxbm8gPSAw OwotICAgIH0KLQotICAgIC8qIGZyZWUgdXAgbWFsbG9jJ2VkIGJ1ZmZlciBzcGFjZSAqLwotICAg IGlmIChjb25uX3JlcykgeyBmcmVlKGNvbm5fcmVzKTsgY29ubl9yZXMgPSBOVUxMOyB9Ci0gICAg aWYgKG9rX2FjaykgeyBmcmVlKG9rX2Fjayk7IG9rX2FjayA9IE5VTEw7IH0KLQotI2lmZGVmIFRS QUNFCi0gICAgcHJpbnRmKCAiVFJBQ0U6IGxlYXZpbmcgeDI1YWNjZXB0XG4iICk7Ci0jZW5kaWYg LyogVFJBQ0UgKi8KLQotICAgIHJldHVybiggKCByYyA+PSAwICkgPyB4MjVjYWxsZmQgOiAtMSAp OwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEZ1bmN0aW9uOiB4MjV1bmJpbmQKLSAq Ci0gKiBEZXNjcmlwdGlvbjogIFRoaXMgc3Vicm91dGluZSBidWlsZHMgYW5kIHNlbmRzIGFuIHVu YmluZCByZXF1ZXN0IGFuZCBnZXRzCi0gKiB0aGUgYWNrbm93bGVkZ2VtZW50IGZvciBpdC4KLSAq Ci0gKiBQYXJhbWV0ZXJzOgotICogZmQgLSBGaWxlIGRlc2NyaXB0b3Igb2YgdGhlIHN0cmVhbQot ICoKLSAqIEZ1bmN0aW9ucyBSZWZlcmVuY2VkOgotICogZ2V0bXNnKCkKLSAqIHB1dG1zZygpCi0g KiBtYWxsb2MoKQotICogYnplcm8oKQotICoKLSAqIFJldHVybiBjb2RlOgotICogMCAtIGlmIHN1 Y2Nlc3NmdWwKLSAqIC0xIC0gaWYgbm90IHN1Y2Nlc3NmdWwKLSAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KLWludAoteDI1dW5iaW5kKGZkKSBpbnQgZmQ7IHsgICAgICAgICAgICAgICAgIC8qIFgyNSBk ZXZpY2UgKG9wZW5lZCkgKi8KLSAgICBpbnQgcmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiByZXR1cm4gY29kZSAqLwotICAgIGludCBmbGFnczsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGJpbmQgZmxhZ3MgKi8KLSAgICBpbnQgZ2V0X2ZsYWdzOyAgICAgICAgICAgICAgICAg ICAgICAvKiBwcmlvcml0eSBmbGFnIGZvciBnZXRtc2cgKi8KLSAgICB1bG9uZyB0eXBlOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBwcmltaXRpdmUgdHlwZSAqLwotICAgIE5fdW5iaW5kX3Jl cV90ICp1bmJpbmRfcmVxOyAgICAgICAgIC8qIHBvaW50ZXIgdG8gTl9VTkJJTkRfUkVRICovCi0g ICAgTl9va19hY2tfdCAqb2tfYWNrOyAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBOX09L X0FDSyAqLwotCi0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogZW50ZXJpbmcgeDI1 dW5iaW5kXG4iICk7Ci0jZW5kaWYgLyogVFJBQ0UgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgLyog cHJpbnRmKCAieDI1dW5iaW5kKCAlZCApXG4iLCBmZCApOyAqLwotI2VuZGlmIC8qIERFQlVHICov Ci0gICAgZGVidWcoRjEwMSwieDI1dW5iaW5kIGNsb3NpbmcgeDI1IGNvbm5lY3Rpb24gIyIsIiIs ZmQpOwotCi0gICAgLyogQWxsb2NhdGUgYW5kIHplcm8gb3V0IHNwYWNlIHRvIGhvbGQgdGhlIE5f VU5CSU5EX1JFUSBwcmltaXRpdmUgKi8KLSAgICB1bmJpbmRfcmVxID0gKE5fdW5iaW5kX3JlcV90 ICopIG1hbGxvYyhzaXplb2YoTl9ucGlfY3RsX3QpKTsKLSAgICBpZiAodW5iaW5kX3JlcSA9PSBO VUxMKSB7Ci0gICAgICAgIHBlcnJvcigia2VybWl0OiB4MjV1bmJpbmQoKTogdW5iaW5kX3JlcSBt YWxsb2MgZmFpbGVkIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGJ6ZXJvKHVu YmluZF9yZXEsIHNpemVvZihOX25waV9jdGxfdCkpOwotCi0gICAgLyoKLSAgICAgKiBCdWlsZCB0 aGUgVW5iaW5kIFJlcXVlc3QgUHJpbWl0aXZlCi0gICAgICovCi0gICAgZmxhZ3MgPSAwOwotICAg IHVuYmluZF9yZXEtPlBSSU1fdHlwZSA9ICh1bG9uZykgTl9VTkJJTkRfUkVROwotCi0gICAgLyoK LSAgICAgKiBDYWxsIHB1dG1zZygpIHRvIHB1dCB0aGUgYmluZCByZXF1ZXN0IG1lc3NhZ2Ugb24g dGhlIHN0cmVhbQotICAgICAqLwotICAgIGlmICh4MjVwdXRtc2coZmQsCi0gICAgICAgICAgICAg ICAgICAoTl9ucGlfY3RsX3QqKXVuYmluZF9yZXEsCi0gICAgICAgICAgICAgICAgICAoTl9ucGlf ZGF0YV90ICopTlVMTCwKLSAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAm ZmxhZ3MKLSAgICAgICAgICAgICAgICAgICkgPCAwKSB7Ci0gICAgICAgIHBlcnJvciAoImtlcm1p dDogeDI1dW5iaW5kKCk6IHB1dG1zZyBmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICB9Ci0KLSAgICAvKiBBbGxvY2F0ZSBhbmQgWmVybyBvdXQgc3BhY2UgZm9yIHRoZSBOX09LX0FD SyBwcmltaXRpdmUgKi8KLSAgICBva19hY2sgPSAoTl9va19hY2tfdCAqKSBtYWxsb2Moc2l6ZW9m KE5fbnBpX2N0bF90KSk7Ci0gICAgaWYgKG9rX2FjayA9PSBOVUxMKSB7Ci0gICAgICAgIHBlcnJv cigia2VybWl0IHgyNXVuYmluZCgpOiBva19hY2sgbWFsbG9jIGZhaWxlZFxuIik7Ci0gICAgICAg IHJldHVybigtMSk7Ci0gICAgfQotICAgIGJ6ZXJvKG9rX2Fjaywgc2l6ZW9mKE5fbnBpX2N0bF90 KSk7Ci0KLSAgICAvKiBJbml0aWFsaXplIGFuZCBidWlsZCB0aGUgY29udHJvbCBzdHJ1Y3R1cmUg Zm9yIGdldG1zZyAqLwotICAgIGdldF9mbGFncz0wOwotCi0gICAgLyogQ2FsbCBnZXRtc2coKSB0 byBjaGVjayBmb3IgYW4gYWNrbm93bGVkZ2VtZW50ICovCi0gICAgcmMgPSB4MjVnZXRtc2coZmQs Ci0gICAgICAgICAgICAgICAgICAgKE5fbnBpX2N0bF90Kilva19hY2ssCi0gICAgICAgICAgICAg ICAgICAgKGludClzaXplb2YoTl9va19hY2tfdCksCi0gICAgICAgICAgICAgICAgICAgKE5fbnBp X2RhdGFfdCopTlVMTCwKLSAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAg ICZnZXRfZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgTl9PS19BQ0sKLSAgICAgICAgICAgICAg ICAgICApOwotICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAgcGVycm9yICgia2VybWl0OiB4MjV1 bmJpbmQ6IGdldG1zZyBmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAg ICAvKiBGcmVlIHVwIHRoZSBzcGFjZSB0aGF0IHdlIG5vIGxvbmdlciBuZWVkICovCi0gICAgaWYg KHVuYmluZF9yZXEpIHsgZnJlZSh1bmJpbmRfcmVxKTsgdW5iaW5kX3JlcSA9IE5VTEw7IH0KLSAg ICBpZiAob2tfYWNrKSB7IGZyZWUob2tfYWNrKTsgb2tfYWNrID0gTlVMTDsgfQotCi0jaWZkZWYg VFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogbGVhdmluZyB4MjV1bmJpbmRcbiIgKTsKLSNlbmRp ZiAvKiBUUkFDRSAqLwotCi0gICAgcmV0dXJuKDApOwotfQotCi0vKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKLSAqIEZ1bmN0aW9uOiB4MjV4aW4KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICAgUmVh ZCBuIGNoYXJhY3RlcnMgZnJvbSBYLjI1IGNpcmN1aXQgaW50byBidWYgKEFJWCBvbmx5KQotICoK LSAqIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGRhdGFfYnVmX2xlbiAgICBtYXhpbXVtIHNpemUgb2Yg ZGF0YSBidWZmZXIKLSAqICAgICAgZGF0YV9idWYgICAgICAgIHBvaW50ZXIgdG8gcHJlLWFsbG9j YXRlZCBidWZmZXIgc3BhY2UKLSAqCi0gKiBSZXR1cm4gVmFsdWU6Ci0gKiAgICAgIHRoZSBudW1i ZXIgb2YgY2hhcmFjdGVycyBhY3R1YWxseSByZWFkCi0gKi8KLWludAoteDI1eGluKGRhdGFfYnVm X2xlbixkYXRhX2J1ZikgaW50IGRhdGFfYnVmX2xlbjsgQ0hBUiAqZGF0YV9idWY7IHsKLSAgICBz dHJ1Y3Qgc3RyYnVmIGdldG1zZ19jdGw7ICAgICAgICAgICAvKiBzdHJlYW1zIGNvbnRyb2wgc3Ry dWN0dXJlICovCi0gICAgc3RydWN0IHN0cmJ1ZiBnZXRtc2dfZGF0YTsgICAgICAgICAgLyogc3Ry ZWFtcyBkYXRhIHN0cnVjdHVyZSAqLwotICAgIGludCByYyA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHJldHVybiBjb2RlICovCi0gICAgaW50IGdldG1zZ19mbGFnczsgICAgICAgICAg ICAgICAgICAgLyogcGFja2V0IHByaW9yaXR5IGZsYWdzICovCi0gICAgY2hhciAqIGN0bF9idWY7 ICAgICAgICAgICAgICAgICAgICAgLyogbnBpIGNvbnRyb2wgYnVmZmVyICovCi0gICAgTl9ucGlf Y3RsX3QgKiByZXN1bHQ7ICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBzaW1wbGlmeSBzd2l0 Y2goKSAqLwotCi0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogZW50ZXJpbmcgeDI1 eGluXG4iICk7Ci0jZW5kaWYgLyogVFJBQ0UgKi8KLQotICAgIC8qIGVuc3VyZSB0aGF0IG5vIG1h eGltdW0ncyBhcmUgb3ZlcnJpZGRlbiAqLwotICAgIGRhdGFfYnVmX2xlbiA9IChOUElfTUFYX0RB VEEgPCBkYXRhX2J1Zl9sZW4pID8gTlBJX01BWF9EQVRBIDogZGF0YV9idWZfbGVuOwotCi0gICAg LyogYWxsb2NhdGUgc3BhY2UgZm9yIHBhY2tldCBjb250cm9sIGluZm8gKi8KLSAgICBpZiAoKGN0 bF9idWYgPSAoY2hhciAqKW1hbGxvYyhOUElfTUFYX0NUTCkpID09IE5VTEwpIHsKLSAgICAgICAg cGVycm9yKCAia2VybWl0OiB4MjV4aW4oKTogY3RsX2J1ZiBtYWxsb2MiICk7Ci0gICAgICAgIHJl dHVybigtMSk7Ci0gICAgfQotI2lmZGVmIENPTU1FTlQKLSAgICAvKiByaWVobTogbmVlZCB6ZXJv ZWQgYnVmZmVyIGZvciBnZXRtc2c/ICovCi0gICAgYnplcm8oIGN0bF9idWYsIE5QSV9NQVhfQ1RM ICk7Ci0gICAgLyogY2xlYXIgZGF0YSBidWZmZXIgKi8KLSAgICBiemVybyggZGF0YV9idWYsIGRh dGFfYnVmX2xlbiApOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIGdldG1zZ19mbGFncyA9 IDA7ICAgICAgICAgICAgICAgICAgIC8qIGdldCB0aGUgZmlyc3QgcGFja2V0IGF2YWlsYWJsZSAq LwotCi0gICAgcmMgPSB4MjVnZXRtc2codHR5ZmQsCi0gICAgICAgICAgICAgICAgICAgY3RsX2J1 ZiwKLSAgICAgICAgICAgICAgICAgICBOUElfTUFYX0NUTCwKLSAgICAgICAgICAgICAgICAgICBk YXRhX2J1ZiwKLSAgICAgICAgICAgICAgICAgICBkYXRhX2J1Zl9sZW4sCi0gICAgICAgICAgICAg ICAgICAgJmdldG1zZ19mbGFncywKLSAgICAgICAgICAgICAgICAgICBOX0RBVEFfSU5ECi0gICAg ICAgICAgICAgICAgICAgKTsKLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgREVCVUcKLSAgICBpZiAo cmMgPj0gMCkgewotICAgICAgICBwcmludGYoICJrZXJtaXQ6IHgyNXhpbigpOiBnb3QgIiApOwot ICAgICAgICB4MjVkdW1wX2RhdGEoIGRhdGFfYnVmLCAwLCByYyApOwotICAgIH0gZWxzZSB7Ci0g ICAgICAgIHByaW50ZiggIngyNXhpbigpOiBhdHRlbXB0IHRvIGdldCBkYXRhIHJlc3VsdGVkIGlu IGFuIGVycm9yXG4iICk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0gICAgLyogZnJlZSBidWZmZXJzICovCi0gICAgaWYgKGN0bF9idWYpIHsgZnJl ZShjdGxfYnVmKTsgY3RsX2J1ZiA9IE5VTEw7IH0KLQotI2lmZGVmIFRSQUNFCi0gICAgcHJpbnRm KCAiVFJBQ0U6IGxlYXZpbmcgeDI1eGlcbiIgKTsKLSNlbmRpZiAvKiBUUkFDRSAqLwotCi0gICAg cmV0dXJuKHJjKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBGdW5jdGlvbjogeDI1 d3JpdGUKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICAgd3JpdGUgYSBibG9jayBvZiBjaGFy YWN0ZXJzIHRvIHRoZSBYMjUgU1RSRUFNIChBSVgpCi0gKgotICogUGFyYW1ldGVyczoKLSAqICAg ICAgZmQgICAgICAgICAgICAgIGZpbGUgZGVzY3JpcHRvciB0byB3cml0ZSB0bwotICogICAgICBk YXRhYnVmICAgICAgICAgYnVmZmVyIGNvbnRhaW5pbmcgZGF0YSB0byB3cml0ZQotICogICAgICBk YXRhYnVmc2l6ZSAgICAgICAgICAgICBzaXplIG9mIHRoZSBidWZmZXIgdG8gd3JpdGUKLSAqCi0g KiBSZXR1cm4gVmFsdWU6Ci0gKiAgICAgIHNpemUgICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGJ5 dGVzIGFjdHVhbGx5IHRyYW5zbWl0dGVkCi0gKi8KLWludAoteDI1d3JpdGUoZmQsIGRhdGFidWYs IGRhdGFidWZzaXplKQotICAgIGludCAgICAgICAgIGZkOyAgICAgICAgICAgICAgICAgIC8qIFgy NSBTVFJFQU1TIGZpbGUgZGVzY3JpcHRvciAodHR5ZmQpICovCi0gICAgY2hhciAgICAgICAgKmRh dGFidWY7ICAgICAgICAgICAgICAgLyogYnVmZmVyIHRvIHdyaXRlICovCi0gICAgaW50ICAgICAg ICAgZGF0YWJ1ZnNpemU7ICAgICAgICAgICAgLyogYnVmZmVyIHNpemUgKi8KLS8qIHgyNXdyaXRl ICovIHsKLSAgICBOX2RhdGFfcmVxX3QgKmRhdGFfcmVxX2N0bDsKLSAgICBpbnQgcmM7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gY29kZSAoc2l6ZSB0cmFuc21pdHRlZCkg Ki8KLSAgICBpbnQgd3JpdGVfZmxhZ3MgPSAwOyAgICAgICAgICAgICAgICAvKiBhbHdheXMgMCAh PyAqLwotCi0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogZW50ZXJpbmcgeDI1d3Jp dGVcbiIgKTsKLSNlbmRpZiAvKiBUUkFDRSAqLwotCi0gICAgaWYgKChkYXRhX3JlcV9jdGwgPSAo Tl9kYXRhX3JlcV90ICopbWFsbG9jKE5QSV9NQVhfQ1RMKSApID09IE5VTEwpIHsKLSAgICAgICAg cGVycm9yKCAia2VybWl0OiB4MjV3cml0ZSgpOiBkYXRhX3JlcV9jdGwgbWFsbG9jIiApOwotICAg ICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBkYXRhX3JlcV9jdGwtPlBSSU1fdHlwZSA9IE5f REFUQV9SRVE7Ci0gICAgZGF0YV9yZXFfY3RsLT5EQVRBX3hmZXJfZmxhZ3MgPSAwOwotCi0gICAg LyogcmllaG06IHBvc3NpYmxlIGV4dGVuc2lvbgotICAgICAqIHBvc3NpYmx5IG5lZWQgdG8gdGhp bmsgYWJvdXQgc3BsaXR0aW5nIHVwIHRoZSBkYXRhIGJ1ZmZlcgotICAgICAqIGludG8gbXVsdGlw bGUgcGFydHMgaWYgZGF0YWJ1ZnNpemUgPiBOUElfTUFYX0RBVEEKLSAgICAgKi8KLQotI2lmZGVm IENPTU1FTlQKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZiggImtlcm1pdDogeDI1d3JpdGUoKTog d3JpdGluZyBkYXRhIHRvIHgyNSBzdHJlYW1cbiIgKTsKLSAgICBwcmludGYoICJcdGRhdGE6XHQi ICk7Ci0gICAgeDI1ZHVtcF9kYXRhKGRhdGFidWYsIDAsIGRhdGFidWZzaXplKTsKLSNlbmRpZiAv KiBERUJVRyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICByYyA9IHgyNXB1dG1zZyhmZCwK LSAgICAgICAgICAgICAgICAgICAoTl9ucGlfY3RsX3QqKWRhdGFfcmVxX2N0bCwKLSAgICAgICAg ICAgICAgICAgICAoTl9ucGlfZGF0YV90KilkYXRhYnVmLAotICAgICAgICAgICAgICAgICAgIGRh dGFidWZzaXplLAotICAgICAgICAgICAgICAgICAgICZ3cml0ZV9mbGFncwotICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgaWYgKGRhdGFfcmVxKSB7IGZyZWUoZGF0YV9yZXFfY3RsKTsgIGRhdGFf cmVxID0gTlVMTDsgfQotCi0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogbGVhdmlu ZyB4MjV3cml0ZVxuIiApOwotI2VuZGlmIC8qIFRSQUNFICovCi0KLSAgICByZXR1cm4ocmMpOwot fQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEZ1bmN0aW9uOiB4MjVsb2NhbF9udWEKLSAq Ci0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICAgVGhpcyByb3V0aW5lIGlzIG9ubHkgaW50ZXJlc3Rp bmcgZm9yIElCTSBjb21wdXRlcnMuIEluIG9yZGVyCi0gKiAgICAgIHRvIHNldCB1cCBhIGNvbm5l Y3Rpb24gKHNlZSB4MjViaW5kKCkpIHlvdSBuZWVkIHRvIGtub3cgdGhlCi0gKiAgICAgIGxvY2Fs IE5VQSAoeDI1IGFkZHJlc3MpLiBVbmZvcnR1bmF0ZWx5LCB5b3UgbmVlZCBhbGwgdGhpcyBjb2Rl Ci0gKiAgICAgIHRvIGZpbmQgdGhhdCBvdXQsIEkganVzdCBob3BlIHRoaXMgd29ya3MgZm9yIGV2 ZXJ5b25lIGVsc2UhCi0gKgotICogUGFyYW1ldGVyczoKLSAqICAgICAgYSBwcmUtYWxsb2NhdGVk IGNoYXJhY3RlciBidWZmZXIsIGxvbmcgZW5vdWdoIHRvIGhvbGQgYW4gWC4yNSBhZGRyZXNzCi0g KiAgICAgIGFuZCB0aGUgdGFpbGluZyBudWxsLgotICoKLSAqIFJldHVybiBWYWx1ZToKLSAqICAg ICAgdGhlIGxlbmd0aCBvZiB0aGUgYWRkcmVzcyBzdHJpbmcuCi0gKiAgICAgIDAgPSBlcnJvcgot ICovCi1pbnQKLXgyNWxvY2FsX251YShjaGFyICpidWYpIHsKLSAgICBzdHJ1Y3QgQ3VBdCAqcmVz cG9uc2U7ICAgICAgLyogc3RydWN0dXJlIHRvIGZpbGwgd2l0aCBpbmZvIGZyb20gT0RNICovCi0g ICAgQ0xBU1NfU1lNQk9MIHJldENsYXNzOyAgICAgIC8qIE9ETSBjbGFzcyAqLwotICAgIGNoYXIg cXVlcnlbNjRdOyAgICAgICAgICAgICAvKiBvZG0gZGF0YWJhc2UgcXVlcnkgKi8KLSAgICBpbnQg cmMgPSAwOyAgICAgICAgICAgICAgICAgLyogcmV0dXJuIHZhbHVlIChsZW5ndGggb2YgbG9jYWwg TlVBKSAqLwotICAgIGV4dGVybiBjaGFyIHgyNW5hbWVbXTsgICAgICAvKiB4MjUgZGV2aWNlIG5h bWUgKHN4MjVhMCkgKi8KLQotI2lmZGVmIFRSQUNFCi0gICAgcHJpbnRmKCAiVFJBQ0U6IGVudGVy aW5nIHgyNWxvY2FsX251YVxuIiApOwotI2VuZGlmIC8qIFRSQUNFICovCi0KLSAgICAvKiBzZXQg dXAgcXVlcnkgc3RyaW5nICovCi0gICAgaWYgKHgyNW5hbWVbMF0gPT0gJ1wwJykgewotI2lmZGVm IERFQlVHCi0gICAgICAgIHByaW50ZiggImtlcm1pdDogeDI1bG9jYWxfbnVhKCk6IE5vIHgyNSBk ZXZpY2Ugc2V0LCB0cnlpbmcgc3gyNWEwXG4iICk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAg ICAgc3RyY3B5KCB4MjVuYW1lLCAic3gyNWEwIiApOwotICAgIH0KLSAgICBja21ha21zZyhxdWVy eSwgc2l6ZW9mKHF1ZXJ5KSwgIm5hbWUgbGlrZSAiLHgyNW5hbWUsCi0gICAgICAgICAgICAgIiBh bmQgYXR0cmlidXRlIGxpa2UgbG9jYWxfbnVhIik7Ci0KLSAgICAvKiBpbml0aWFsaXNlIE9ETSBk YXRhYmFzZSAqLwotICAgIG9kbWVycm5vID0gMDsKLSAgICBpZiAob2RtX2luaXRpYWxpemUoKSA9 PSAtMSkgewotICAgICAgICBwcmludGYoICJ4MjVsb2NhbF9udWEoKTogY2FuJ3QgaW5pdGlhbGl6 ZSBPRE0gZGF0YWJhc2UiKTsKLSAgICAgICAgc3dpdGNoIChvZG1lcnJubykgewotICAgICAgICAg IGNhc2UgT0RNSV9JTlZBTElEX1BBVEg6Ci0gICAgICAgICAgICBwcmludGYoICJpbnZhbGlkIHBh dGhcbiIgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RNSV9NQUxMT0Nf RVJSOgotICAgICAgICAgICAgcHJpbnRmKCAibWFsbG9jIGZhaWxlZFxuIiApOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHByaW50ZiggInVua25v d24gZXJyb3IgJWRcblBsZWFzZSBjYWxsIElCTVxuIiwgb2RtZXJybm8gKTsKLSAgICAgICAgfQot ICAgICAgICByZXR1cm4ocmMpOwotICAgIH0KLQotICAgIC8qIG9wZW4gdGhlIEN1QXQgY2xhc3Mg Ki8KLSAgICByZXRDbGFzcyA9IG9kbV9vcGVuX2NsYXNzKEN1QXRfQ0xBU1MpOwotICAgIGlmICgo KGludClyZXRDbGFzcykgPT0gLTEpIHsKLSAgICAgICAgcHJpbnRmKCAia2VybWl0OiB4MjVsb2Nh bF9udWEoKTogY2FuJ3Qgb3BlbiBDdUF0IGNsYXNzIGluIG9kbS4gIiApOwotICAgICAgICBzd2l0 Y2ggKG9kbWVycm5vKSB7Ci0gICAgICAgICAgY2FzZSBPRE1JX0NMQVNTX0RORToKLSAgICAgICAg ICAgIHByaW50ZiggIkN1QXQgY2xhc3MgZG9lc24ndCBleGlzdFxuIiApOwotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgY2FzZSBPRE1JX0NMQVNTX1BFUk1TOgotICAgICAgICAgICAgcHJp bnRmKCAicGVybWlzc2lvbiB0byBDdUF0IGNsYXNzIGZpbGUgZGVuaWVkXG4iICk7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIE9ETUlfTUFHSUNOT19FUlI6Ci0gICAgICAgICAg ICBwcmludGYoICJDdUF0IGlzIGFuIGludmFsaWQgT0RNIG9iamVjdCBjbGFzc1xuIiApOwotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBPRE1JX09QRU5fRVJSOgotICAgICAgICAg ICAgcHJpbnRmKCAiY2Fubm90IG9wZW4gQ3VBdCBjbGFzcyAtIGFuZCBkb24ndCBrbm93IHdoeSFc biIgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RNSV9JTlZBTElEX1BB VEg6Ci0gICAgICAgICAgICBwcmludGYoICJpbnZhbGlkIHBhdGhcbiIgKTsKLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RNSV9UT09NQU5ZQ0xBU1NFUzoKLSAgICAgICAgICAg IHByaW50ZiggInRvbyBtYW55IG9iamVjdCBjbGFzc2VzIGhhdmUgYmVlbiBvcGVuZWRcbiIgKTsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmlu dGYoICJ1bmtub3duIGVycm9yICVkXG5QbGVhc2UgY2FsbCBJQk1cbiIsIG9kbWVycm5vICk7Ci0g ICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHJjKTsKLSAgICB9Ci0KLSNpZmRlZiBERUJVRwotICAg IHByaW50ZigicmV0Q2xhc3M9ICVkXG4iLCByZXRDbGFzcyk7Ci0jZW5kaWYgLyogREVCVUcgKi8K LQotICAgIHJlc3BvbnNlID0gKHN0cnVjdCBDdUF0ICopb2RtX2dldF9maXJzdCggcmV0Q2xhc3Ms IHF1ZXJ5LCBOVUxMICk7Ci0gICAgaWYgKCgoaW50KXJlc3BvbnNlKSA9PSAtMSkgewotICAgICAg ICBwcmludGYoICJrZXJtaXQ6IHgyNWxvY2FsX251YSgpOiBvZG0gcXVlcnkgZmFpbGVkICIgKTsK LSAgICAgICAgc3dpdGNoIChvZG1lcnJubykgewotICAgICAgICAgIGNhc2UgT0RNSV9CQURfQ1JJ VDogICAgICAgICAgIC8qIFByb2dyYW1taW5nIGVycm9yICovCi0gICAgICAgICAgICBwcmludGYo ICJiYWQgc2VhcmNoIGNyaXRlcmlhXG4iICk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICBjYXNlIE9ETUlfQ0xBU1NfRE5FOgotICAgICAgICAgICAgcHJpbnRmKCAiQ3VBdCBjbGFzcyBk b2Vzbid0IGV4aXN0XG4iICk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIE9E TUlfQ0xBU1NfUEVSTVM6Ci0gICAgICAgICAgICBwcmludGYoICJwZXJtaXNzaW9uIHRvIEN1QXQg Y2xhc3MgZmlsZSBkZW5pZWRcbiIgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh c2UgT0RNSV9JTlRFUk5BTF9FUlI6Ci0gICAgICAgICAgICBwcmludGYoIm9kbSBpbnRlcm5hbCBl cnJvclxuUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yXG4iICk7Ci0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICBjYXNlIE9ETUlfSU5WQUxJRF9DTFhOOgotICAgICAgICAgICAg cHJpbnRmKCJDdUF0IGlzIGludmFsaWQgb3IgaW5jb25zaXN0ZW50IG9kbSBjbGFzcyBjb2xsZWN0 aW9uXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RNSV9JTlZBTElE X1BBVEg6Ci0gICAgICAgICAgICBwcmludGYoICJpbnZhbGlkIHBhdGhcbiIgKTsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RNSV9NQUdJQ05PX0VSUjoKLSAgICAgICAgICAg IHByaW50ZiggIkN1QXQgaXMgYW4gaW52YWxpZCBPRE0gb2JqZWN0IGNsYXNzXG4iICk7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIE9ETUlfTUFMTE9DX0VSUjoKLSAgICAgICAg ICAgIHByaW50ZiggIm1hbGxvYyBmYWlsZWRcbiIgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgIGNhc2UgT0RNSV9PUEVOX0VSUjoKLSAgICAgICAgICAgIHByaW50ZiggImNhbm5vdCBv cGVuIEN1QXQgY2xhc3MgLSBhbmQgZG9uJ3Qga25vdyB3aHkhXG4iICk7Ci0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICBjYXNlIE9ETUlfVE9PTUFOWUNMQVNTRVM6Ci0gICAgICAgICAgICBw cmludGYoICJ0b28gbWFueSBvYmplY3QgY2xhc3NlcyBoYXZlIGJlZW4gb3BlbmVkXG4iICk7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcHJpbnRm KCAidW5rbm93biBlcnJvciAlZFxuUGxlYXNlIGNhbGwgSUJNXG4iLCBvZG1lcnJubyApOwotICAg ICAgICB9Ci0gICAgICAgIHJldHVybihyYyk7Ci0gICAgfQotCi0gICAgLyogY2hlY2sgZm9yIGEg bWVhbmluZ2Z1bGwgcmVzcG9uc2UgKi8KLSAgICBpZiAocmVzcG9uc2UgIT0gTlVMTCkgewotICAg ICAgICBpZiAocmVzcG9uc2UtPnZhbHVlICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHN0cmNweShi dWYsIHJlc3BvbnNlLT52YWx1ZSk7Ci0gICAgICAgICAgICByYyA9IHN0cmxlbiggYnVmICk7Ci0j aWZkZWYgREVCVUcKLS8qCi0gICAgICAgICAgICBwcmludGYoICJhdHRyaWJ1dGUgbmFtZSBpczog JXNcbiIsIChjaGFyICopcmVzcG9uc2UtPmF0dHJpYnV0ZSApOwotICAgICAgICAgICAgcHJpbnRm KCAiSSB0aGluayBteSBhZGRyZXNzIGlzICVzXG4iLCAoY2hhciopcmVzcG9uc2UtPnZhbHVlICk7 Ci0qLwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBw cmludGYoICJrZXJtaXQ6IHgyNWxvY2FsX251YSgpOiBjb3VsZG4ndCBmaW5kIHRoZSBsb2NhbCBO VUFcbiIgKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAob2RtZXJy bm8pIHsKLSAgICAgICAgICBjYXNlIE9ETUlfQkFEX0NSSVQ6Ci0gICAgICAgICAgICBwcmludGYo ICJFcnJvcjogT0RNSV9CQURfQ1JJVCAtIGJhZCBjcml0ZXJpYVxuIiApOwotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgY2FzZSBPRE1JX0NMQVNTX0RORToKLSAgICAgICAgICAgIHByaW50 ZiggIkVycm9yOiBPRE1JX0NMQVNTX0RORSAtIGNsYXNzIGRvZXNuJ3QgZXhpc3RcbiIgKTsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RNSV9DTEFTU19QRVJNUzoKLSAgICAg ICAgICAgIHByaW50ZiggIkVycm9yOiBPRE1JX0NMQVNTX1BFUk1TIC0gY2xhc3MgcGVybWlzc2lv bnNcbiIgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RNSV9JTlRFUk5B TF9FUlI6Ci0gICAgICAgICAgICBwcmludGYoICJFcnJvcjogT0RNSV9JTlRFUk5BTF9FUlIgLSBw YW5pY1xuIiApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBPRE1JX0lOVkFM SURfQ0xYTjoKLSAgICAgICAgICAgIHByaW50ZiggIkVycm9yOiBPRE1JX0lOVkFMSURfQ0xYTiAt IGludmFsaWQgY29sbGVjdGlvblxuIiApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSBPRE1JX0lOVkFMSURfUEFUSDoKLSAgICAgICAgICAgIHByaW50ZiggIkVycm9yOiBPRE1J X0lOVkFMSURfUEFUSCAtIGludmFsaWQgcGF0aCAtIHdoYXQgcGF0aD9cbiIgKTsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RNSV9NQUdJQ05PX0VSUjoKLSAgICAgICAgICAg IHByaW50ZiggIkVycm9yOiBPRE1JX01BR0lDTk9fRVJSIC0gaW52YWxpZCBvYmplY3QgbWFnaWNc biIgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RNSV9NQUxMT0NfRVJS OgotICAgICAgICAgICAgcHJpbnRmKCAiRXJyb3I6IE9ETUlfTUFMTE9DX0VSUiAtIG1hbGxvYyBm YWlsZWRcbiIgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RNSV9PUEVO X0VSUjoKLSAgICAgICAgICAgIHByaW50ZiggIkVycm9yOiBPRE1JX09QRU5fRVJSIC0gY2Fubm90 IG9wZW4gY2xhc3NcbiIgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RN SV9UT09NQU5ZQ0xBU1NFUzoKLSAgICAgICAgICAgIHByaW50ZiggIkVycm9yOiBPRE1JX1RPT01B TllDTEFTU0VTIC0gdG9vIG1hbnkgY2xhc3Nlc1xuIiApOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHByaW50ZiggIlVua25vd24gZXJyb3IhXG4i ICk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHJjKTsKLSAgICB9Ci0KLSAgICAvKiBjbG9z ZSB0aGUgZGF0YWJhc2UgYWdhaW4gKi8KLSAgICBvZG1fY2xvc2VfY2xhc3MoIHJldENsYXNzICk7 Ci0KLSAgICAvKiBmb3JnZXQgYWJvdXQgT0RNIGFsbCB0b2dldGhlciAqLwotICAgIG9kbV90ZXJt aW5hdGUoKTsKLQotI2lmZGVmIFRSQUNFCi0gICAgcHJpbnRmKCAiVFJBQ0U6IGxlYXZpbmcgeDI1 bG9jYWxfbnVhXG4iICk7Ci0jZW5kaWYgLyogVFJBQ0UgKi8KLQotICAgIGRlYnVnKEYxMTAsICJ4 MjVsb2NhbF9udWEgbG9jYWwgYWRkcmVzcyBpcyAiLCBidWYsIDApOwotICAgIHJldHVybihyYyk7 Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRnVuY3Rpb246IHgyNWZhY2lsaXRpZXMK LSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICAgYnVpbGQgdXAgdGhlIGZhY2lsaXRpZXMgZGF0 YSBwYWNrZXQgZm9yIGEgY29ubmVjdGlvbiByZXF1ZXN0Ci0gKgotICogUGFyYW1ldGVyczoKLSAq ICAgICAgYSBwcmUtYWxsb2NhdGVkIGNoYXIgYnVmZmVyLCBub3JtYWxseSBOUElfTUFYX0RBVEEg YmlnLgotICoKLSAqIFJldHVybiBWYWx1ZToKLSAqICAgICAgdGhlIG51bWJlciBvZiBjaGFyYWN0 ZXJzIGluc2VydGVkIGludG8gdGhlIGJ1ZmZlcgotICovCi1pbnQKLXgyNWZhY2lsaXRpZXMoYnVm ZmVyKSBjaGFyICpidWZmZXI7IHsKLSAgICBleHRlcm4gaW50IHJldmNhbGw7Ci0gICAgZXh0ZXJu IGludCBjbG9zZ3I7Ci0gICAgY2hhciAqcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dGVtcCBwb2ludGVyICovCi0gICAgY2hhciAqc3RhcnQ7ICAgICAgICAgICAgICAgICAgICAgICAg LyogdGVtcCBwb2ludGVyICovCi0KLSNpZmRlZiBUUkFDRQotICAgIHByaW50ZiggIlRSQUNFOiBl bnRlcmluZyB4MjVmYWNpbGl0aWVzXG4iICk7Ci0jZW5kaWYgLyogVFJBQ0UgKi8KLQotICAgIHAg PSBidWZmZXIgKyAxOwotICAgIHN0YXJ0ID0gcDsKLQotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRm KCAia2VybWl0OiB4MjVmYWNpbGl0aWVzKCk6IGdldHRpbmcgWDI1IGZhY2lsaXRpZXNcbiIgKTsK LSNlbmRpZiAvKiBERUJVRyAqLwotCi0gICAgaWYgKHJldmNhbGwgIT0gMCkgewotI2lmZGVmIERF QlVHCi0gICAgICAgIHByaW50ZigicmV2ZXJzZSBjaGFyZ2U6ICVkXG4iLCByZXZjYWxsICk7Ci0j ZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgKisrcCA9IDB4MDE7Ci0gICAgICAgICorK3AgPSBy ZXZjYWxsOwotICAgIH0KLSAgICBpZiAoY2xvc2dyID4gMCkgewotI2lmZGVmIERFQlVHCi0gICAg ICAgIHByaW50ZigiY2xvc2VkIHVzZXIgZ3JvdXA6ICVkXG4iLCBjbG9zZ3IgKTsKLSNlbmRpZiAv KiBERUJVRyAqLwotICAgICAgICAqKytwID0gMHgwMzsKLSAgICAgICAgKisrcCA9IGNsb3NncjsK LSAgICB9Ci0KLSNpZmRlZiBERUJVRwotICAgIGlmIChwID09IHN0YXJ0KSB7Ci0gICAgICAgIHBy aW50ZiggIm5vIGZhY2lsaXRpZXNcbiIgKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQot ICAgIC8qIHNldCB0aGUgc2l6ZSBvZiB0aGUgZmFjaWxpdGllcyBidWZmZXIgKi8KLSAgICAqYnVm ZmVyID0gKGNoYXIpKCBwIC0gc3RhcnQgKSAmIDB4ZmY7Ci0KLSNpZmRlZiBERUJVRwotICAgIHBy aW50ZiggImtlcm1pdDogeDI1ZmFjaWxpdGllcygpOiByZXR1cm5pbmcgJWRcbiIsIChpbnQpKHAg LSBidWZmZXIpICApOwotI2VuZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiBUUkFDRQotICAgIHBy aW50ZiggIlRSQUNFOiBsZWF2aW5nIHgyNWZhY2lsaXRpZXNcbiIgKTsKLSNlbmRpZiAvKiBUUkFD RSAqLwotCi0gICAgLyogcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBmYWNpbGl0aWVzIHdpdGggc2l6 ZSBieXRlICovCi0gICAgLyogMSA9PSBubyBmYWNpbGl0aWVzLCAwIGJ5dGUgcmV0dXJuZWQgYXMg ZmFjaWxpdGllcyBzaXplICovCi0gICAgcmV0dXJuKCAoaW50KShwIC0gYnVmZmVyKSApOwotfQot Ci0vKgotICogcmVzZXQgdGhlIGNvbm5lY3Rpb24KLSAqLwotaW50Ci14MjVyZXNldChjYXVzZSwg ZGlhZ24pIGNoYXIgY2F1c2U7IGNoYXIgZGlhZ247IHsKLSAgICAvKiBub3QgaW1wbGVtZW50ZWQg Ki8KLQotI2lmZGVmIFRSQUNFCi0gICAgcHJpbnRmKCAiVFJBQ0U6IGVudGVyaW5nIHgyNXJlc2V0 XG4iICk7Ci0jZW5kaWYgLyogVFJBQ0UgKi8KLQotI2lmZGVmIFRSQUNFCi0gICAgcHJpbnRmKCAi VFJBQ0U6IGxlYXZpbmcgeDI1cmVzZXRcbiIgKTsKLSNlbmRpZiAvKiBUUkFDRSAqLwotCi0gICAg cmV0dXJuKDApOwotfQotCi0vKgotICogY2xlYXIgdGhlIHgyNSBjb25uZWN0aW9uIC0gaWU6IGhh bmcgdXAKLSAqLwotaW50Ci14MjVjbGVhcigpIHsKLSAgICBpbnQgZ2V0X2ZsYWdzID0gMDsgICAg ICAgICAgICAgICAgICAvKiBwcmlvcml0eSBmbGFnIGZvciBnZXRtc2cgKi8KLSAgICBpbnQgcHV0 X2ZsYWdzID0gMDsgICAgICAgICAgICAgICAgICAvKiBzZW5kIGZsYWdzLCBhbHdheXMgMCAqLwot ICAgIHVsb25nIHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByaW1pdGl2ZSB0eXBl ICovCi0gICAgTl9kaXNjb25fcmVxX3QgKmRpc2Nvbl9yZXE7ICAgICAgICAgLyogcG9pbnRlciB0 byBOX0RJU0NPTl9SRVEgKi8KLSAgICBOX2Rpc2Nvbl9pbmRfdCAqZGlzY29uX2luZDsgICAgICAg ICAvKiBwb2ludGVyIHRvIE5fRElTQ09OX0lORCAqLwotICAgIE5fbnBpX2RhdGFfdCAqZGlzY29u X2RhdGE7ICAgICAgICAgIC8qIHBvaW50ZXIgdG8gTl9ESVNDT05fSU5EIGRhdGEgKi8KLSAgICBp bnQgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gY29kZSAqLwotCi0j aWZkZWYgVFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogZW50ZXJpbmcgeDI1Y2xlYXJcbiIgKTsK LSNlbmRpZiAvKiBUUkFDRSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICAvKiBwcmludGYoICJ4MjVj bGVhcigpOiBjaGVja2luZyBsYXN0IG1zZzogJXNcbiIsIHgyNXByaW0oeDI1bGFzdG1zZykpOyAq LwotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICAvKgotICAgICogVGhlIGZvbGxvd2luZyBjaGVj a3MgYXJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgZGlzY29ubmVjdAotICAgICogb3Ig dW5iaW5kIHR3aWNlIC0gdGhpcyBzZWVtcyB0byB0aHJvdyB0aGUgTlBJIGludGVyZmFjZSByaWdo dCBvdXQgb2YKLSAgICAqIGtpbHRlci4KLSAgICAqLwotICAgIHN3aXRjaCh4MjVsYXN0bXNnKSB7 Ci0gICAgICBjYXNlIE5fQklORF9BQ0s6Ci0gICAgICBjYXNlIE5fQ09OTl9DT046Ci0gICAgICBj YXNlIE5fQ09OTl9SRVE6Ci0gICAgICBjYXNlIE5fREFUQV9SRVE6Ci0gICAgICBjYXNlIE5fREFU QV9JTkQ6Ci0gICAgICAgIHsKLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgLyogcHJpbnRmKCJ4 MjVjbGVhcigpOiBhY3RpdmVseSBkaXNjb25uZWN0aW5nXG4iKTsgKi8KLSNlbmRpZiAvKiBERUJV RyAqLwotCi0gICAgICAgICAgICAgICAgZGlzY29uX3JlcSA9IChOX2Rpc2Nvbl9yZXFfdCAqKW1h bGxvYyhOUElfTUFYX0NUTCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRpc2Nvbl9yZXEgPT0gTlVM TCkgewotICAgICAgICAgICAgICAgICAgICBwZXJyb3IoImtlcm1pdCB4MjVjbGVhcigpOiBkaXNj b25fcmVxIG1hbGxvYyBmYWlsZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICAvKiBmYWxsdGhy b3VnaCwgdHJ5IHRvIHVuYmluZCB0aGUgTlBJIGFueXdheSAqLwotICAgICAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRpc2Nvbl9yZXEtPlBSSU1fdHlwZSA9IE5fRElT Q09OX1JFUTsKLSAgICAgICAgICAgICAgICAgICAgZGlzY29uX3JlcS0+RElTQ09OX3JlYXNvbiA9 IDA7ICAgICAgLyogbm90IHVzZWQgYnkgQUlYICovCi0gICAgICAgICAgICAgICAgICAgIGRpc2Nv bl9yZXEtPlJFU19sZW5ndGggPSAwOwotICAgICAgICAgICAgICAgICAgICBkaXNjb25fcmVxLT5S RVNfb2Zmc2V0ID0gKHVsb25nKShzaXplb2YoTl9kaXNjb25fcmVxX3QpKTsKLSAgICAgICAgICAg ICAgICAgICAgZGlzY29uX3JlcS0+U0VRX251bWJlciA9IHgyNXNlcW5vOyAgLyogZ2xvYmFsICov Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHgyNXB1dG1zZyh0dHlmZCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoTl9ucGlfY3RsX3QqKWRpc2Nvbl9yZXEsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5fbnBpX2RhdGFfdCopTlVMTCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZwdXRfZmxhZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDwg MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGVycm9yKCJ4MjVwdXRtc2cgZmFpbGVkIGlu IHgyNWNsZWFyKCkiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICBkaXNjb25faW5kID0gKE5fZGlzY29uX2luZF90ICopbWFsbG9jKE5QSV9NQVhfQ1RMKTsKLSAg ICAgICAgICAgICAgICAgICAgZGlzY29uX2RhdGEgPSAoTl9ucGlfZGF0YV90ICopbWFsbG9jKE5Q SV9NQVhfREFUQSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmKChkaXNjb25faW5kID09IE5VTEwp IHx8IChkaXNjb25fZGF0YSA9PSBOVUxMKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGVy cm9yKCJ4MjVjbGVhcigpOiBkaXNjb25faW5kIG1hbGxvYyBmYWlsZWRcbiIpOwotICAgICAgICAg ICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2gsIHRyeSB0byB1bmJpbmQgdGhlIE5QSSBhbnl3 YXkgKi8KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGlmKHgyNWdldG1zZyh0dHlmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoTl9ucGlfY3RsX3QqKWRpc2Nvbl9pbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlBJX01BWF9DVEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKE5fbnBpX2RhdGFfdCopZGlzY29uX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTlBJX01BWF9EQVRBLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZnZXRfZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTl9PS19BQ0sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDwgMCAp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoIngyNWdldG1zZyBmYWlsZWQg aW4geDI1Y2xlYXIoKSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJv dWdoLCB0cnkgdG8gdW5iaW5kIHRoZSBOUEkgYW55d2F5ICovCi0gICAgICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHgyNWxhc3Rt c2cgIT0gTl9VTkJJTkRfUkVRKSB7Ci0gICAgICAgIHJjID0geDI1dW5iaW5kKHR0eWZkKTsKLSAg ICB9Ci0KLSNpZmRlZiBUUkFDRQotICAgIHByaW50ZiggIlRSQUNFOiBsZWF2aW5nIHgyNWNsZWFy XG4iICk7Ci0jZW5kaWYgLyogVFJBQ0UgKi8KLQotICAgIHJldHVybihyYyk7Ci19Ci0KLSNpZmRl ZiBERUJVRwotLyoKLSAqIG9ubHkgZm9yIGRlYnVnZ2luZwotICoKLSAqIHR1cm4gdGhlIGludGVy bmFsIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0YWJsb2NrIGludG8gc29tZXRoaW5nCi0gKiBoYWxm LXdheSByZWFkYWJsZS4gQmVjYXVzZSB0aGUgbGVuZ3RoIGlzIGtub3duLCB3ZSBjYW4gcHJpbnQK LSAqIHRoZSBzdHJpbmcgaW5jbHVkaW5nIG51bGwncyBldGMgKGltcG9ydGFudCwgYmVjYXVzZSB0 aGUgZmlyc3QoISkKLSAqIGJ5dGUgb2YgYW4gWDEyMSBhZGRyZXNzIGlzIGEgbnVsbCEgKFgxMjEg YWRkciA9PSAwICsgWDI1IGFkZHIpCi0gKi8KLXgyNWR1bXBfZGF0YShjaGFyICphZGRyLCB1bG9u ZyBvZmZzZXQsIHVsb25nIGxlbmd0aCkgewotICAgIGNoYXIgKnB0ciA9IGFkZHIgKyBvZmZzZXQ7 Ci0gICAgdWxvbmcgaSA9IGxlbmd0aDsKLSAgICAvKiBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZv ciBhbGwgdW5wcmludGFibGUgY2hhcnMgKi8KLSAgICBjaGFyICpidWYgPSAoY2hhciAqKW1hbGxv YyggbGVuZ3RoICogNCApOwotICAgIGNoYXIgKmJwdHIgPSBidWY7ICAgLyogcG9pbnRlciB0byBj dXJyZW50IHBsYWNlIGluIHRoZSBwcmludCBidWZmZXIgKi8KLQotICAgIHdoaWxlIChpID4gMCkg ewotICAgICAgICBpZiAoaXNwcmludCgqcHRyKSkgewotICAgICAgICAgICAgKmJwdHIrKyA9ICpw dHI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAqYnB0cisrID0gJ1snOwotICAgICAg ICAgICAgc3RyY3B5KGJwdHIsY2tjdG94KCpwdHIsMSkpOyBicHRyICs9IDI7Ci0gICAgICAgICAg ICAqYnB0cisrID0gJ10nOwotICAgICAgICB9Ci0gICAgICAgIHB0cisrOwotICAgICAgICBpLS07 Ci0gICAgfQotICAgIGlmIChsZW5ndGggPiAwKSB7Ci0gICAgICAgICpicHRyID0gJ1wwJzsKLSAg ICAgICAgcHJpbnRmKCAiJXMiLCBidWYgKTsKLSAgICB9Ci0gICAgcHJpbnRmKCAiICglZCslZClc biIsIG9mZnNldCwgbGVuZ3RoICk7Ci0KLSAgICBpZiAoYnVmKSB7IGZyZWUoYnVmKTsgYnVmID0g TlVMTDsgfQotICAgIHJldHVybjsKLX0KLQotLyoKLSAqIG9ubHkgZm9yIGRlYnVnZ2luZwotICog cHJpbnQgYXMgbXVjaCB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgYSBwYWNrZXQgYXMgcG9zc2li bGUKLSAqLwoteDI1ZHVtcF9wcmltKHByaW1pdGl2ZSkgICAgTl9ucGlfY3RsX3QgKnByaW1pdGl2 ZTsgewotICAgIHByaW50ZigiUHJpbWl0aXZlIik7Ci0gICAgc3dpdGNoIChwcmltaXRpdmUtPlBS SU1fdHlwZSkgewotICAgICAgY2FzZSBOX0JJTkRfQUNLOgotICAgICAgICBwcmludGYoICJcdE5f QklORF9BQ0tcblx0YWRkcmVzczpcdCIgKTsKLSAgICAgICAgeDI1ZHVtcF9kYXRhKCAoY2hhciAq KXByaW1pdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+YmluZF9hY2suQURE Ul9vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmJpbmRfYWNrLkFERFJf bGVuZ3RoICk7Ci0gICAgICAgIHByaW50ZiggIlx0cHJvdG8gaWQ6XHQiICk7Ci0gICAgICAgIHgy NWR1bXBfZGF0YSggKGNoYXIgKilwcmltaXRpdmUsCi0gICAgICAgICAgICAgICAgICAgICBwcmlt aXRpdmUtPmJpbmRfYWNrLlBST1RPSURfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgcHJp bWl0aXZlLT5iaW5kX2Fjay5QUk9UT0lEX2xlbmd0aCApOwotICAgICAgICBwcmludGYoICJcdGNv bm5pbmQ6XHQlZFxuXHR0b2tlbjpcdFx0JWRcbiIsCi0gICAgICAgICAgICAgICBwcmltaXRpdmUt PmJpbmRfYWNrLkNPTklORF9udW1iZXIsCi0gICAgICAgICAgICAgICBwcmltaXRpdmUtPmJpbmRf YWNrLlRPS0VOX3ZhbHVlICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIE5fQklORF9S RVE6Ci0gICAgICAgIHByaW50ZiggIlx0Tl9CSU5EX1JFUVxuXHRhZGRyZXNzOlx0IiApOwotICAg ICAgICB4MjVkdW1wX2RhdGEoIChjaGFyICopcHJpbWl0aXZlLAotICAgICAgICAgICAgICAgICAg ICAgcHJpbWl0aXZlLT5iaW5kX3JlcS5BRERSX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAg IHByaW1pdGl2ZS0+YmluZF9yZXEuQUREUl9sZW5ndGggKTsKLSAgICAgICAgcHJpbnRmKCAiXHRw cm90byBpZDpcdCIgKTsKLSAgICAgICAgeDI1ZHVtcF9kYXRhKCAoY2hhciAqKXByaW1pdGl2ZSwK LSAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+YmluZF9yZXEuUFJPVE9JRF9vZmZzZXQs Ci0gICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmJpbmRfcmVxLlBST1RPSURfbGVuZ3Ro ICk7Ci0gICAgICAgIHByaW50ZiggIlx0Y29ubmluZDpcdCVkXG5cdGZsYWdzOlx0XHQlZFxuIiwK LSAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+YmluZF9yZXEuQ09OSU5EX251bWJlciwKLSAgICAg ICAgICAgICAgIHByaW1pdGl2ZS0+YmluZF9yZXEuQklORF9mbGFncyApOwotICAgICAgICBicmVh azsKLQotICAgICAgY2FzZSBOX0NPTk5fQ09OOgotICAgICAgICBwcmludGYoICJcdE5fQ09OTl9D T05cbiIgKTsKLSAgICAgICAgcHJpbnRmKCAiXHRSRVNcdFx0IiApOwotICAgICAgICB4MjVkdW1w X2RhdGEoIChjaGFyICopcHJpbWl0aXZlLAotICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZl LT5jb25uX2Nvbi5SRVNfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5j b25uX2Nvbi5SRVNfbGVuZ3RoICk7Ci0gICAgICAgIHByaW50ZiggIlx0ZmxhZ3M6XHQlZFxuIiwg cHJpbWl0aXZlLT5jb25uX2Nvbi5DT05OX2ZsYWdzICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAg ICBjYXNlIE5fQ09OTl9JTkQ6Ci0gICAgICAgIHByaW50ZiggIlx0Tl9DT05OX0lORFxuIiApOwot ICAgICAgICBwcmludGYoICJcdHNvdXJjZTpcdFx0IiApOwotICAgICAgICB4MjVkdW1wX2RhdGEo IChjaGFyICopcHJpbWl0aXZlLAotICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5jb25u X2luZC5TUkNfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5jb25uX2lu ZC5TUkNfbGVuZ3RoICk7Ci0gICAgICAgIHByaW50ZiggIlx0ZGVzdGluYXRpb246XHQiICk7Ci0g ICAgICAgIHgyNWR1bXBfZGF0YSggKGNoYXIgKilwcmltaXRpdmUsCi0gICAgICAgICAgICAgICAg ICAgICBwcmltaXRpdmUtPmNvbm5faW5kLkRFU1Rfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAg ICAgcHJpbWl0aXZlLT5jb25uX2luZC5ERVNUX2xlbmd0aCApOwotICAgICAgICBwcmludGYoICJc dFNFUV9udW1iZXI6XHQlZFxuIiwgcHJpbWl0aXZlLT5jb25uX2luZC5TRVFfbnVtYmVyICk7Ci0g ICAgICAgIHByaW50ZiggIlx0ZmxhZ3M6XHQlZFxuIiwgcHJpbWl0aXZlLT5jb25uX2luZC5DT05O X2ZsYWdzICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIE5fQ09OTl9SRVE6Ci0gICAg ICAgIHByaW50ZiggIlx0Tl9DT05OX1JFUVxuXHRkZXN0aW5hdGlvbjpcdCIgKTsKLSAgICAgICAg eDI1ZHVtcF9kYXRhKCAoY2hhciAqKXByaW1pdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgIHBy aW1pdGl2ZS0+Y29ubl9yZXEuREVTVF9vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICBwcmlt aXRpdmUtPmNvbm5fcmVxLkRFU1RfbGVuZ3RoICk7Ci0gICAgICAgIHByaW50ZiggIlx0ZmxhZ3M6 XHQlZFxuIiwgcHJpbWl0aXZlLT5jb25uX3JlcS5DT05OX2ZsYWdzICk7Ci0gICAgICAgIGJyZWFr OwotCi0gICAgICBjYXNlIE5fQ09OTl9SRVM6Ci0gICAgICAgIHByaW50ZiggIlx0Tl9DT05OX1JF U1xuIiApOwotICAgICAgICBwcmludGYoICJcdFRPS0VOX3ZhbHVlXHQlZFxuIiwgcHJpbWl0aXZl LT5jb25uX3Jlcy5UT0tFTl92YWx1ZSApOwotICAgICAgICBwcmludGYoICJcdFNFUV9udW1iZXJc dCVkXG4iLCBwcmltaXRpdmUtPmNvbm5fcmVzLlNFUV9udW1iZXIgKTsKLSAgICAgICAgcHJpbnRm KCAiXHRDT05OX2ZsYWdzXHQlZFxuIiwgcHJpbWl0aXZlLT5jb25uX3Jlcy5DT05OX2ZsYWdzICk7 Ci0gICAgICAgIHByaW50ZiggIlx0UkVTXHRcdCIgKTsKLSAgICAgICAgeDI1ZHVtcF9kYXRhKCAo Y2hhciAqKXByaW1pdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+Y29ubl9y ZXMuUkVTX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+Y29ubl9yZXMu UkVTX2xlbmd0aCApOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBOX0RBVEFDS19JTkQ6 Ci0gICAgICAgIHByaW50ZiggIlx0Tl9EQVRBQ0tfSU5EXG4iICk7Ci0gICAgICAgIGJyZWFrOwot Ci0gICAgICBjYXNlIE5fREFUQUNLX1JFUToKLSAgICAgICAgcHJpbnRmKCAiXHROX0RBVEFDS19S RVFcbiIgKTsKLSAgICAgICAgcHJpbnRmKCAiXHRmbGFnczpcdCVkXG4iLCBwcmltaXRpdmUtPmRh dGFfcmVxLkRBVEFfeGZlcl9mbGFncyApOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBO X0RBVEFfSU5EOgotICAgICAgICBwcmludGYoICJcdE5fREFUQV9JTkRcbiIgKTsKLSAgICAgICAg cHJpbnRmKCAiXHRmbGFnczpcdCVkXG4iLCBwcmltaXRpdmUtPmRhdGFfaW5kLkRBVEFfeGZlcl9m bGFncyApOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBOX0RBVEFfUkVROgotICAgICAg ICBwcmludGYoICJcdE5fREFUQV9SRVFcbiIgKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh c2UgTl9ESVNDT05fSU5EOgotICAgICAgICBwcmludGYoICJcdE5fRElTQ09OX0lORFxuIiApOwot ICAgICAgICBwcmludGYoICJcdG9yaWdpbjpcdCVkXG4iLCBwcmltaXRpdmUtPmRpc2Nvbl9pbmQu RElTQ09OX29yaWcgKTsKLSAgICAgICAgcHJpbnRmKCAiXHRyZWFzb246XHRcdCVkXG4iLCBwcmlt aXRpdmUtPmRpc2Nvbl9pbmQuRElTQ09OX3JlYXNvbiApOwotICAgICAgICBwcmludGYoICJcdHNl cSBubzpcdFx0JWRcbiIsIHByaW1pdGl2ZS0+ZGlzY29uX2luZC5TRVFfbnVtYmVyICk7Ci0gICAg ICAgIHByaW50ZiggIlx0UkVTOlx0IiApOwotICAgICAgICB4MjVkdW1wX2RhdGEoIChjaGFyICop cHJpbWl0aXZlLAotICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5kaXNjb25faW5kLlJF U19vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmRpc2Nvbl9pbmQuUkVT X2xlbmd0aCApOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBOX0RJU0NPTl9SRVE6Ci0g ICAgICAgIHByaW50ZiggIlx0Tl9ESVNDT05fUkVRXG4iICk7Ci0gICAgICAgIHByaW50ZiggIlx0 RElTQ09OX3JlYXNvbjpcdCVkXG4iLAotICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5kaXNjb25f cmVxLkRJU0NPTl9yZWFzb24gKTsKLSAgICAgICAgcHJpbnRmKCAiXHRSRVM6XHQiICk7Ci0gICAg ICAgIHgyNWR1bXBfZGF0YSggKGNoYXIgKilwcmltaXRpdmUsCi0gICAgICAgICAgICAgICAgICAg ICBwcmltaXRpdmUtPmRpc2Nvbl9yZXEuUkVTX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAg IHByaW1pdGl2ZS0+ZGlzY29uX3JlcS5SRVNfbGVuZ3RoICk7Ci0gICAgICAgIHByaW50ZiggIlx0 U0VRX251bWJlcjpcdCVkXG4iLCBwcmltaXRpdmUtPmRpc2Nvbl9yZXEuU0VRX251bWJlciApOwot ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBOX0VSUk9SX0FDSzoKLSAgICAgICAgcHJpbnRm KCAiXHROX0VSUk9SX0FDS1xuIiApOwotICAgICAgICBwcmludGYoICJcdENhdXNlZCBieTpcdCVz XG4iLAotICAgICAgICAgICAgICAgeDI1cHJpbSggcHJpbWl0aXZlLT5lcnJvcl9hY2suRVJST1Jf cHJpbSApICk7Ci0gICAgICAgIHByaW50ZiggIlx0TlBJIGVycm9yOlx0JXNcbiIsCi0gICAgICAg ICAgICAgICB4MjVlcnIoIHByaW1pdGl2ZS0+ZXJyb3JfYWNrLk5QSV9lcnJvciApKTsKLSAgICAg ICAgZXJybm8gPSBwcmltaXRpdmUtPmVycm9yX2Fjay5VTklYX2Vycm9yOwotICAgICAgICBwZXJy b3IoICJcdCIgKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgTl9FWERBVEFfSU5EOgot ICAgICAgICBwcmludGYoICJcdE5fRVhEQVRBX0FDS1xuIiApOwotICAgICAgICBicmVhazsKLQot ICAgICAgY2FzZSBOX0VYREFUQV9SRVE6Ci0gICAgICAgIHByaW50ZiggIlx0Tl9FWERBVEFfUkVR XG4iICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIE5fSU5GT19BQ0s6Ci0gICAgICAg IHByaW50ZiggIlx0Tl9JTkZPX0FDS1xuIiApOwotICAgICAgICBwcmludGYoICJcdE5TRFUgc2l6 ZTpcdCVkXG4iLCBwcmltaXRpdmUtPmluZm9fYWNrLk5TRFVfc2l6ZSApOwotICAgICAgICBwcmlu dGYoICJcdEVOU0RVIHNpemU6XHQlZFxuIiwgcHJpbWl0aXZlLT5pbmZvX2Fjay5FTlNEVV9zaXpl ICk7Ci0gICAgICAgIHByaW50ZiggIlx0Q0RBVEEgc2l6ZTpcdCVkXG4iLCBwcmltaXRpdmUtPmlu Zm9fYWNrLkNEQVRBX3NpemUgKTsKLSAgICAgICAgcHJpbnRmKCAiXHREREFUQSBzaXplOlx0JWRc biIsIHByaW1pdGl2ZS0+aW5mb19hY2suRERBVEFfc2l6ZSApOwotICAgICAgICBwcmludGYoICJc dEFERFIgc2l6ZTpcdCVkXG4iLCBwcmltaXRpdmUtPmluZm9fYWNrLkFERFJfc2l6ZSApOwotICAg ICAgICBwcmludGYoICJcdE5JRFUgc2l6ZTpcdCVkXG4iLCBwcmltaXRpdmUtPmluZm9fYWNrLk5J RFVfc2l6ZSApOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBOX0lORk9fUkVROgotICAg ICAgICBwcmludGYoICJcdE5fSU5GT19SRVFcbiIgKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg IGNhc2UgTl9PS19BQ0s6Ci0gICAgICAgIHByaW50ZiggIlx0Tl9PS19BQ0tcbiIgKTsKLSAgICAg ICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgTl9PUFRNR01UX1JFUToKLSAgICAgICAgcHJpbnRmKCAi XHROX09QVE1HTVRfUkVRXG4iICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIE5fUkVT RVRfQ09OOgotICAgICAgICBwcmludGYoICJcdE5fUkVTRVRfQ09OXG4iICk7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgICBjYXNlIE5fUkVTRVRfSU5EOgotICAgICAgICBwcmludGYoICJcdE5fUkVT RVRfSU5EXG4iICk7Ci0gICAgICAgIHByaW50ZiggIlx0cmVhc29uOlx0XHQlZFxuIiwgcHJpbWl0 aXZlLT5yZXNldF9pbmQuUkVTRVRfcmVhc29uICk7Ci0gICAgICAgIHByaW50ZiggIlx0b3JpZ2lu Olx0XHQlZFxuIiwgcHJpbWl0aXZlLT5yZXNldF9pbmQuUkVTRVRfb3JpZyApOwotICAgICAgICBi cmVhazsKLQotICAgICAgY2FzZSBOX1JFU0VUX1JFUToKLSAgICAgICAgcHJpbnRmKCAiXHROX1JF U0VUX1JFUVxuIiApOwotICAgICAgICBwcmludGYoICJcdHJlYXNvbjpcdFx0JWRcbiIsIHByaW1p dGl2ZS0+cmVzZXRfcmVxLlJFU0VUX3JlYXNvbiApOwotICAgICAgICBicmVhazsKLQotICAgICAg Y2FzZSBOX1JFU0VUX1JFUzoKLSAgICAgICAgcHJpbnRmKCAiXHROX1JFU0VUX1JFU1xuIiApOwot ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBOX1VERVJST1JfSU5EOgotICAgICAgICBwcmlu dGYoICJcdE5fVURFUlJPUl9JTkRcbiIgKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2Ug Tl9VTkJJTkRfUkVROgotICAgICAgICBwcmludGYoICJcdE5fVU5CSU5EX1JFUVxuIiApOwotICAg ICAgICBicmVhazsKLQotICAgICAgY2FzZSBOX1VOSVREQVRBX1JFUToKLSAgICAgICAgcHJpbnRm KCAiXHROX1VOSVREQVRBX1JFUVxuIiApOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBO X1VOSVREQVRBX0lORDoKLSAgICAgICAgcHJpbnRmKCAiXHROX1VOSVREQVRBX0lORFxuIiApOwot ICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgKHZvaWQpIHByaW50Zigg IlVua25vd24gTlBJIGVycm9yICVkIiwgcHJpbWl0aXZlLT5QUklNX3R5cGUgKTsKLSAgICAgICAg cmV0dXJuIDA7Ci0gICAgfQotfQotI2VuZGlmIC8qIERFQlVHICovCi0KLS8qIGl0IGxvb2tzIGxp a2Ugc2lnbmFsIGhhbmRsaW5nIGlzIG5vdCBuZWVkZWQgd2l0aCBzdHJlYW1zISAqLwotLyogeDI1 b29iaCgpICAgIC0gaGFuZGxlIFNJR1VSRyBzaWduYWxzIC0gdGFrZSBmcm9tIGlzb2RlID8gKi8K LQotI2VuZGlmIC8qIElCTVgyNSAqLwotCi0jaWZuZGVmIE5PSFRUUAotLyoKLSAgV2hpY2ggdGlt ZS5oIGZpbGVzIHRvIGluY2x1ZGUuLi4gU2VlIGNrY2RlYi5oIGZvciBkZWZhdWx0cy4KLSAgTm90 ZSB0aGF0IDAsIDEsIDIsIG9yIGFsbCAzIG9mIHRoZXNlIGNhbiBiZSBpbmNsdWRlZCBhY2NvcmRp bmcgdG8KLSAgdGhlIHN5bWJvbCBkZWZpbml0aW9ucy4KLSovCi0jaWZuZGVmIE5PVElNRUgKLSNp ZmRlZiBUSU1FSAotI2luY2x1ZGUgPHRpbWUuaD4KLSNlbmRpZiAvKiBUSU1FSCAqLwotI2VuZGlm IC8qIE5PVElNRUggKi8KLQotI2lmbmRlZiBOT1NZU1RJTUVICi0jaWZkZWYgU1lTVElNRUgKLSNp bmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmIC8qIFNZU1RJTUVIICovCi0jZW5kaWYgLyogTk9T WVNUSU1FSCAqLwotCi0jaWZuZGVmIE5PU1lTVElNRUJICi0jaWZkZWYgU1lTVElNRUJICi0jaW5j bHVkZSA8c3lzL3RpbWViLmg+Ci0jZW5kaWYgLyogU1lTVElNRUJIICovCi0jZW5kaWYgLyogTk9T WVNUSU1FQkggKi8KLQotI2lmbmRlZiBUSU1FSAotI2lmbmRlZiBTWVNUSU1FSAotI2lmbmRlZiBT WVNUSU1FQkgKLSNpZmRlZiBQbGFuOQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZWxzZQotI2lm ZGVmIEFJWDQxCi0jaW5jbHVkZSA8dGltZS5oPgotI2Vsc2UKLSNpZmRlZiBTVU5PUzQKLSNpbmNs dWRlIDxzeXMvdGltZS5oPgotI2Vsc2UKLSNpZmRlZiBTWVNUSU1FSAotI2luY2x1ZGUgPHN5cy90 aW1lLmg+Ci0jZWxzZQotI2lmZGVmIFBPU0lYCi0jaW5jbHVkZSA8cG9zaXgvdGltZS5oPgotI2Vs c2UKLSNpZmRlZiBDTElYCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbHNlCi0jaWZkZWYgT1My Ci0jaW5jbHVkZSA8dGltZS5oPgotI2Vsc2UKLSNpbmNsdWRlIDx0aW1lLmg+Ci0vKiAjaW5jbHVk ZSA8dXRpbWUuaD4gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDTElYICovCi0jZW5k aWYgLyogUE9TSVggKi8KLSNlbmRpZiAvKiBTWVNUSU1FSCAqLwotI2VuZGlmIC8qIFNVTk9TNCAq LwotI2VuZGlmIC8qIEFJWDQxICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLSNlbmRpZgotI2VuZGlm Ci0jZW5kaWYKLQotI2lmZGVmIE9TMgotI2luY2x1ZGUgPHN5cy91dGltZS5oPgotI2lmZGVmIE5U Ci0jZGVmaW5lIHV0aW1idWYgX3V0aW1idWYKLSNlbmRpZiAvKiBOVCAqLwotI2RlZmluZSB1dGlt ZSAgIF91dGltZQotI2Vsc2UKLSNpZmRlZiBTWVNVVElNRUggICAgICAgICAgICAgICAgICAgICAg ICAvKiA8c3lzL3V0aW1lLmg+IGlmIHJlcXVlc3RlZCwgICovCi0jaW5jbHVkZSA8c3lzL3V0aW1l Lmg+ICAgICAgICAgICAgICAgICAgLyogZm9yIGV4dHJhIGZpZWxkcyByZXF1aXJlZCBieSAqLwot I2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDg4T3BlbiBzcGVjLiAq LwotI2lmZGVmIFVUSU1FSCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9yIDx1dGltZS5o PiBpZiByZXF1ZXN0ZWQgKi8KLSNpbmNsdWRlIDx1dGltZS5oPiAgICAgICAgICAgICAgICAgICAg ICAvKiAoU1ZSNCwgUE9TSVgpICovCi0jZGVmaW5lIFNZU1VUSU1FSCAgICAgICAgICAgICAgICAg ICAgICAgLyogVXNlIHRoaXMgZm9yIGJvdGggY2FzZXMuICovCi0jZW5kaWYgLyogVVRJTUVIICov Ci0jZW5kaWYgLyogU1lTVVRJTUVIICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBWTVMJ CQkJLyogU01TIDIwMDcvMDIvMTUgKi8KLSNpbmNsdWRlICJja3ZydGwuaCIKLSNlbmRpZiAvKiBk ZWYgVk1TICovCi0KLSNpZm5kZWYgSFRUUF9WRVJTSU9OCi0jZGVmaW5lIEhUVFBfVkVSU0lPTiAi SFRUUC8xLjEiCi0jZW5kaWYgLyogSFRUUF9WRVJTSU9OICovCi0KLSNpZmRlZiBDTURBVEUyVE0K LXRpbWVfdAotI2lmZGVmIENLX0FOU0lDCi1odHRwX2RhdGUoY2hhciAqIGRhdGUpCi0jZWxzZQot aHR0cF9kYXRlKGRhdGUpIGNoYXIgKiBkYXRlOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBo dHRwX2RhdGUgKi8gewotICAgIC8qIEhUVFAgZGF0ZXMgYXJlIG9mIHRoZSBmb3JtOiAgIlN1biwg MDYgT2N0IDE5OTcgMjA6MTE6NDcgR01UIiAqLwotICAgIC8qIFRoZXJlIGFyZSB0d28gb2xkZXIg Zm9ybWF0cyB3aGljaCB3ZSBhcmUgcmVxdWlyZWQgdG8gcGFyc2UKLSAgICAgKiB0aGF0IHdlIGN1 cnJlbnRseSBkbyBub3Q6Ci0gICAgICoKLSAgICAgKiBSRkMgODUwOiAgICJTdW5kYXksIDA2LU9j dC05NyAyMDoxMTo0NyBHTVQiCi0gICAgICogYXNjdGltZSgpOiAiU3VuIE5vdiAgNiAyMDoxMTo0 NyAxOTk3IgotICAgICAqCi0gICAgICogSG93ZXZlciwgaXQgaXMgcmVxdWlyZWQgdGhhdCBhbGwg ZGF0ZXMgYmUgc2VudCBpbiB0aGUgZm9ybSB3ZQotICAgICAqIGRvIGFjY2VwdC4gIFRoZSBvdGhl ciB0d28gZm9ybWF0cyBhcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aAotICAgICAqIHJlYWxseSBv bGQgc2VydmVycy4KLSAgICAgKi8KLSAgICBleHRlcm4gY2hhciBjbWRhdGVidWZbMThdOwotICAg IHN0cnVjdCB0bSB0X3RtOwotICAgIHRpbWVfdCB0OwotICAgIGNoYXIgbGRhdGVbMzJdOwotICAg IGludCBqOwotCi0gICAgaiA9IGNraW5kZXgoIiwiLGRhdGUsMCwwLDApOwotICAgIGNrc3RybmNw eShsZGF0ZSwmZGF0ZVtqKzFdLDI1KTsKLQotICAgIHsgICAvKgotICAgICAgICAgICBjbWN2dGF0 ZSgpIGRhdGUgY2hhbmdlZCB0byByZXR1cm4gYSBzdHJpbmcgcG9pbnRlci4KLSAgICAgICAgICAg ZmRjLCAxMiBBdWcgMjAwMS4KLSAgICAgICAgKi8KLSAgICAgICAgY2hhciAqIGRwOwotICAgICAg ICBkcCA9IChjaGFyICopY21jdnRkYXRlKGxkYXRlLDApOyAvKiBDb252ZXJ0IHRvIG5vcm1hbCBm b3JtICovCi0gICAgICAgIGlmICghZHApCi0gICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB0 X3RtID0gKmNtZGF0ZTJ0bShkcCwxKTsKLSAgICB9Ci0vKgotICBGcm9tIEx1Y2FzIEhhcnQsIDUg RGVjIDIwMDE6Ci0gICJPbiB0aGUgc3lzdGVtcyB0byB3aGljaCBJIGhhdmUgYWNjZXNzIChTdW5P UyA0LjEuMSwgU29sYXJpcyA4LCBhbmQgVHJ1NjQpLAotICBzZXR0aW5nIHRtX2lzZHN0IHRvIC0x IG1haW50YWlucyB0aGUgY29ycmVjdCB0aW1lem9uZSBvZmZzZXRzLCBpLmUuLCB3cml0ZXMKLSAg dGhlIHNwZWNpZmllZCAoR01UKSB0aW1lIGlmIHRoZSBidWZmZXIgc2l6ZSBpcyAyMSwgb3IgdGhl IGNvbnRlbXBvcmFuZW91cwotICBsb2NhbHRpbWUgaWYgdGhlIGJ1ZmZlciBzaXplIGlzIDI1LiAg UGVyaGFwcyB0bV9pc2RzdCBzaG91bGQgYmUgc2V0IGluCi0gIGNtZGF0ZTJ0bSgpLCByYXRoZXIg dGhhbiBvbmx5IGluIGh0dHBfZGF0ZS4iCi0qLwotI2lmbmRlZiBOT1RNX0lTRFNUICAgICAgICAg ICAgICAgICAgICAgIC8qIEZvciBwbGF0Zm9ybXMgd2hlcmUgKi8KLSAgICB0X3RtLnRtX2lzZHN0 ID0gLTE7ICAgICAgICAgICAgICAgICAvKiB0bV9pc2RzdCBkb2Vzbid0IGV4aXN0LiAqLwotI2Vu ZGlmIC8qIE5PVE1fSVNEU1QgKi8KLQotICAgIHQgPSBta3RpbWUoJnRfdG0pOyAgICAgICAgICAg ICAgICAgIC8qIE5PVCBQT1JUQUJMRSAqLwotCi0jaWZkZWYgWFhfVElNRVpPTkUKLSAgICB0IC09 IF90aW1lem9uZTsKLSNlbmRpZiAvKiBYWF9USU1FWk9ORSAqLwotCi0gICAgcmV0dXJuKHQpOwot fQotI2VuZGlmIC8qIENNREFURTJUTSAqLwotCi1jaGFyICoKLWh0dHBfbm93KCkgewotICAgIHN0 YXRpYyBjaGFyIG5vd3N0clszMl07Ci0jaWZkZWYgQ01EQVRFMlRNCi0gICAgc3RydWN0IHRtICAq Z210OwotICAgIHRpbWVfdCBsdGltZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIE5PVCBQT1JU QUJMRSAqLwotCi0gICAgdGltZSgmbHRpbWUpOwotCi0gICAgZ210ID0gZ210aW1lKCZsdGltZSk7 ICAgICAgICAgICAgICAgLyogUFJPQkFCTFkgTk9UIFBPUlRBQkxFICovCi0gICAgc3RyZnRpbWUo bm93c3RyLDMyLCIlYSwgJWQgJWIgJVkgJUg6JU06JVMgR01UIixnbXQpOyAvKiBOT1QgUE9SVEFC TEUgKi8KLSAgICAvKiBub3Qgb25seSBpcyBpdCBub3QgcG9ydGFibGUgYnV0IGl0J3MgbG9jYWxl LWRlcGVuZGVudCAqLwotI2Vsc2UKLS8qCi0gIFRoaXMgaXMgaG9wZWxlc3MuICBGaXJzdCBvZiBh bGwsIGl0IHNlZW1zIHRoYXQgSFRUUCB3YW50cyBEYXkgYW5kIE1vbnRoCi0gIE5BTUVTPyAgSW4g RW5nbGlzaD8gIFdob3NlIGlkZWEgd2FzIHRoYXQ/ICBFdmVuIHdvcnNlLCB0aGUgZGF0ZS90aW1l IG11c3QgYmUKLSAgZXhwcmVzc2VkIGluIFp1bHUgKFVUQyAoR01UKSksIGFuZCBjb252ZXJ0aW5n IGZyb20gbG9jYWwgdGltZSB0byBHTVQgaXMgYQotICBuaWdodG1hcmUuICBFdmVyeSBwbGF0Zm9y bSBkb2VzIGl0IGRpZmZlcmVudGx5LCBpZiBhdCBhbGwgLS0gZXZlbiBpZiB3ZQotICByZXN0cmlj dCBvdXJzZWx2ZXMgdG8gVU5JWC4gIEZvciBleGFtcGxlIChxdW90aW5nIGZyb20gcmVjZW50IEMt S2VybWl0IGVkaXQKLSAgaGlzdG9yeSksICJGaXhlZCBhIGxvbmdzdGFuZGluZyBidWcgaW4gdGhl IEJTREkgdmVyc2lvbiwgaW4gd2hpY2ggaW5jb21pbmcKLSAgZmlsZSBkYXRlcyB3ZXJlIHNldCBp biBHTVQgcmF0aGVyIHRoYW4gbG9jYWwgdGltZS4gIEl0IHNlZW1zIGluIDQuNEJTRCwKLSAgbG9j YWx0aW1lKCkgZG9lcyBub3QgcmV0dXJuIHRoZSBsb2NhbCB0aW1lLCBidXQgcmF0aGVyIFplcm8g TWVyaWRpYW4gKFp1bHUpCi0gIHRpbWUgKEdNVCksIGFuZCBtdXN0IGJlIGFkanVzdGVkIGJ5IHRo ZSB0bV9nbXRvZmYgdmFsdWUuIiAgU3dlbGwuICBGb3IKLSAgZ3JlYXRlciBhcHByZWNpYXRpb24g b2YgdGhlIHNjb3BlIG9mIHRoZSBwcm9ibGVtLCBqdXN0IHRha2UgYSBsb29rIGF0IHRoZQotICB0 aW1lLXJlbGF0ZWQgI2lmZGVmcyBpbiBja3V0aW8uYy4gIFRoZSBvbmx5IHJpZ2h0IHdheSB0byBk byB0aGlzIGlzIHRvIGFkZAotICBvdXIgb3duIHBvcnRhYmxlIEFQSSBmb3IgY29udmVydGluZyBi ZXR3ZWVuIGxvY2FsIHRpbWUgYW5kIEdNVC9VVEMvWnVsdQotICB0aGF0IHNoaWVsZHMgdXMgbm90 IG9ubHkgZnJvbSBVTklYaXNtcyBsaWtlIHRpbWVfdCBhbmQgc3RydWN0IHRtLCBidXQgYWxzbwot ICB0aGUgdW5iZWxpZXZhYmxlIGFtb3VudCBvZiBkaWZmZXJlbmNlcyBpbiB0aW1lLXJlbGF0ZWQg QVBJcyAtLSBlLmcuIGlzCi0gICJ0aW1lem9uZSIgYW4gZXh0ZXJuYWwgdmFyaWFibGUgb3IgYSBm dW5jdGlvbjsgd2hpY2ggaGVhZGVyIGZpbGUocykgZG8gd2UKLSAgaW5jbHVkZSwgZXRjIGV0YyBl dGMuICBJdCdzIGEgbWFqb3IgcHJvamVjdC4KLSovCi0gICAgaW50IHg7Ci0gICAgeCA9IGNtY3Z0 ZGF0ZSgiIiwxKTsKLQotRXZpZGVudGx5IHRoaXMgY29kZSBpcyBub3QgdXNlZCAtLSBpZiBpdCBp cywgaXQgbXVzdCBiZSBmaXhlZCB0byB1c2UKLW5ldyAoYXVnIDIwMDEpIGNtY3Z0ZGF0ZSgpIGNh bGxpbmcgY29udmVudGlvbnMuCi0KLSAgICBpZiAoeCA8IDApCi0gICAgICByZXR1cm4oIiIpOwot LyogIHl5eXltbWRkIGhoOm1tOnNzICovCi0vKiAgMDEyMzQ1Njc4OTAxMjM0NTYgKi8KLSAgICBu b3dzdHJbMF0gID0gJ1gnOyAgICAgICAgICAgICAgICAgICAvKiAxc3QgbGV0dGVyIG9mIGRheSAq LwotICAgIG5vd3N0clsxXSAgPSAneCc7ICAgICAgICAgICAgICAgICAgIC8qIDJuZCBsZXR0ZXIg b2YgZGF5ICovCi0gICAgbm93c3RyWzJdICA9ICd4JzsgICAgICAgICAgICAgICAgICAgLyogM3Jk IGxldHRlciBvZiBkYXkgKi8KLSAgICBub3dzdHJbM10gID0gJywnOwotICAgIG5vd3N0cls0XSAg PSAnICc7Ci0gICAgbm93c3RyWzVdICA9IGNtZGF0ZVs2XTsKLSAgICBub3dzdHJbNl0gID0gY21k YXRlWzddOwotICAgIG5vd3N0cls3XSAgPSAnICc7Ci0gICAgbm93c3RyWzhdICA9ICcgJzsgICAg ICAgICAgICAgICAgICAgLyogZmlyc3QgbGV0dGVyIG9mIG1vbnRoICovCi0gICAgbm93c3RyWzld ICA9ICcgJzsgICAgICAgICAgICAgICAgICAgLyogc2Vjb25kIGxldHRlciBvZiBtb250aCAqLwot ICAgIG5vd3N0clsxMF0gPSAnICc7ICAgICAgICAgICAgICAgICAgIC8qIHRoaXJkIGxldHRlciBv ZiBtb250aCAqLwotICAgIG5vd3N0clsxMV0gPSAnICc7Ci0gICAgbm93c3RyWzEyXSA9IGNtZGF0 ZVswXTsKLSAgICBub3dzdHJbMTNdID0gY21kYXRlWzFdOwotICAgIG5vd3N0clsxNF0gPSBjbWRh dGVbMl07Ci0gICAgbm93c3RyWzE1XSA9IGNtZGF0ZVszXTsKLSAgICBub3dzdHJbMTZdID0gJyAn OwotICAgIG5vd3N0clsxN10gPSBjbWRhdGVbOV07Ci0gICAgbm93c3RyWzE4XSA9IGNtZGF0ZVsx MF07Ci0gICAgbm93c3RyWzE5XSA9IGNtZGF0ZVsxMV07Ci0gICAgbm93c3RyWzIwXSA9IGNtZGF0 ZVsxMl07Ci0gICAgbm93c3RyWzIxXSA9IGNtZGF0ZVsxM107Ci0gICAgbm93c3RyWzIyXSA9IGNt ZGF0ZVsxNF07Ci0gICAgbm93c3RyWzIzXSA9IGNtZGF0ZVsxNV07Ci0gICAgbm93c3RyWzI0XSA9 IGNtZGF0ZVsxNl07Ci0gICAgbm93c3RyWzI1XSA9ICcgJzsKLSAgICBub3dzdHJbMjZdID0gJ0cn OwotICAgIG5vd3N0clsyN10gPSAnTSc7Ci0gICAgbm93c3RyWzI4XSA9ICdUJzsKLSAgICBub3dz dHJbMjldID0gJ1wwJzsKLSNlbmRpZiAvKiBDTURBVEUyVE0gKi8KLSAgICByZXR1cm4obm93c3Ry KTsKLX0KLQotI2lmbmRlZiBPUzIKLSNpZm5kZWYgQ0tfQVVUSEVOVElDQVRJT04KLS8qIGZyb20g Y2t1dXNyLmgsIHdoaWNoIHRoaXMgbW9kdWxlIG5vcm1hbGx5IGRvZXNuJ3QgaW5jbHVkZSAqLwot X1BST1RPVFlQKCBpbnQgZGNsYXJyYXksIChjaGFyLCBpbnQpICk7Ci0jZW5kaWYgLyogQ0tfQVVU SEVOVElDQVRJT04gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLS8qCi0gIEFzc2lnbiBodHRwIHJlc3Bv bnNlIHBhaXJzIHRvIGdpdmVuIGFycmF5LgotICBGb3IgYmVzdCByZXN1bHRzLCByZXNwb25zZSBw YWlycyBzaG91bGQgY29udGFpbiBubyBzcGFjZXMuCi0KLSAgQ2FsbCB3aXRoOgotICAgIHJlc3Ag ID0gIHBvaW50ZXIgdG8gcmVzcG9uc2UgbGlzdC4KLSAgICBuICAgICA9ICBzaXplIG9mIHJlc3Bv bnNlIGxpc3QuCi0gICAgYXJyYXkgPSAgYXJyYXkgbGV0dGVyLgotICBSZXR1cm5zOgotICAgIDAg b24gZmFpbHVyZS4KLSAgICA+PSAxLCBzaXplIG9mIGFycmF5LCBvbiBzdWNjZXNzLgotKi8KLXN0 YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotaHR0cF9ta2FycmF5KGNoYXIgKiogcmVzcCwgaW50 IG4sIGNoYXIgYXJyYXkpCi0jZWxzZQotaHR0cF9ta2FycmF5KHJlc3AsIG4sIGFycmF5KSBjaGFy ICoqIHJlc3A7IGludCBuOyBjaGFyIGFycmF5OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0j aWZuZGVmIE5PU1BMCi0gICAgaW50IGksIHg7Ci0gICAgY2hhciAqKiBhcDsKLSAgICBleHRlcm4g Y2hhciAqKiBhX3B0cltdOwotICAgIGV4dGVybiBpbnQgYV9kaW1bXTsKLQotICAgIGlmICghYXJy YXkgfHwgbiA8PSAwKQotICAgICAgcmV0dXJuKDApOwotICAgIGlmICgoeCA9IGRjbGFycmF5KGFy cmF5LG4pKSA8IDApIHsKLSAgICAgICAgcHJpbnRmKCI/QXJyYXkgZGVjbGFyYXRpb24gZmFpbHVy ZVxuIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIC8qIE5vdGU6IGFyZ3VtZW50 IGFycmF5IGlzIDAtYmFzZWQgYnV0IEtlcm1pdCBhcnJheSBpcyAxLWJhc2VkICovCi0gICAgYXAg PSBhX3B0clt4XTsKLSAgICBhcFswXSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAvKiAw dGggZWxlbWVudCBpcyBlbXB0eSAqLwotICAgIGZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7Ci0g ICAgICAgIGFwW2ldID0gcmVzcFtpLTFdOyAgICAgICAgICAgICAgLyogSWYgcmVzcCBlbGVtZW50 cyB3ZXJlIG1hbGxvYydkICovCi0gICAgICAgIHJlc3BbaS0xXSA9IE5VTEw7Ci0gICAgfQotICAg IGFfZGltW3hdID0gbjsKLSAgICByZXR1cm4obik7Ci0jZWxzZQotICAgIHJldHVybigwKTsKLSNl bmRpZiAvKiBOT1NQTCAqLwotfQotCi0jZGVmaW5lIEhUVFBIRUFEQ05UIDY0Ci1pbnQKLWh0dHBf Z2V0X2NodW5rX2xlbigpCi17Ci0gICAgaW50IGxlbiA9IDA7Ci0gICAgaW50IGkgPSAwLCBqID0g LTE7Ci0gICAgY2hhciBidWZbMjRdOwotICAgIGludCBjaDsKLQotICAgIHdoaWxlICgoY2ggPSBo dHRwX2luYygwKSkgPj0gMCAmJiBpIDwgMjQpIHsKLSAgICAgICAgYnVmW2ldID0gY2g7Ci0gICAg ICAgIGlmICggYnVmW2ldID09ICc7JyApICAgICAgICAgICAgLyogRmluZCBjaHVuay1leHRlbnNp b24gKGlmIGFueSkgKi8KLSAgICAgICAgICAgIGogPSBpOwotICAgICAgICBpZiAoIGJ1ZltpXSA9 PSAxMCApIHsgICAgICAgICAgIC8qIGZvdW5kIGVuZCBvZiBsaW5lICovCi0gICAgICAgICAgICBp ZiAoaSA+IDAgJiYgYnVmW2ktMV0gPT0gMTMpCi0gICAgICAgICAgICAgICAgaS0tOwotICAgICAg ICAgICAgYnVmW2ldID0gJ1wwJzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg ICAgIGkrKzsKLSAgICB9Ci0gICAgaWYgKCBpIDwgMjQgKSB7ICAgICAgICAgICAgICAgICAgICAg LyogYnVmIG5vdyBjb250YWlucyBsZW4gaW4gSGV4ICovCi0gICAgICAgIGxlbiA9IGhleHRvdWxv bmcoYnVmLCBqID09IC0xID8gaSA6IGotMSk7Ci0gICAgfQotCi0gICAgcmV0dXJuKGxlbik7Ci19 Ci0KLWludAotaHR0cF9pc2Nvbm5lY3RlZCgpCi17Ci0gICAgcmV0dXJuKGh0dHBmZCAhPSAtMSk7 Ci19Ci0KLWNoYXIgKgotaHR0cF9ob3N0KCkKLXsKLSAgICByZXR1cm4oaHR0cGZkICE9IC0xID8g aHR0cF9ob3N0X3BvcnQgOiAiIik7Ci19Ci0KLWNoYXIgKgotaHR0cF9zZWN1cml0eSgpCi17Ci0g ICAgaWYgKCBodHRwZmQgPT0gLTEgKQotICAgICAgICByZXR1cm4oIk5VTEwiKTsKLSNpZmRlZiBD S19TU0wKLSAgICBpZiAodGxzX2h0dHBfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgU1NMX0NJUEhF UiAqIGNpcGhlcjsKLSAgICAgICAgY29uc3QgY2hhciAqY2lwaGVyX2xpc3Q7Ci0gICAgICAgIHN0 YXRpYyBjaGFyIGJ1ZlsxMjhdOwotICAgICAgICBidWZbMF0gPSBOVUw7Ci0gICAgICAgIGNpcGhl ciA9IFNTTF9nZXRfY3VycmVudF9jaXBoZXIodGxzX2h0dHBfY29uKTsKLSAgICAgICAgY2lwaGVy X2xpc3QgPSBTU0xfQ0lQSEVSX2dldF9uYW1lKGNpcGhlcik7Ci0gICAgICAgIFNTTF9DSVBIRVJf ZGVzY3JpcHRpb24oY2lwaGVyLGJ1ZixzaXplb2YoYnVmKSk7Ci0gICAgICAgIHJldHVybihidWYp OwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICByZXR1cm4oIk5VTEwiKTsKLX0KLQot aW50Ci1odHRwX3Jlb3BlbigpCi17Ci0gICAgaW50IHJjID0gMDsKLSAgICBjaGFyICogcyA9IE5V TEw7ICAgICAgICAgICAgICAgICAgICAvKiBzdHJkdXAgaXMgbm90IHBvcnRhYmxlICovCi0gICAg aWYgKCB0Y3BfaHR0cF9wcm94eSApIHsKLSAgICAgICAgY2hhciAqIHA7Ci0gICAgICAgIG1ha2Vz dHIoJnMsKGNoYXIgKilodHRwX2hvc3RfcG9ydCk7Ci0gICAgICAgIHAgPSBzOwotICAgICAgICB3 aGlsZSAoKnAgIT0gJ1wwJyAmJiAqcCAhPSAnOicpIHArKzsgLyogTG9vayBmb3IgY29sb24gKi8K LSAgICAgICAgaWYgKCpwID09ICc6JykgeyAgICAgICAgICAgICAgICAgICAgIC8qIEhhdmUgYSBj b2xvbiAqLwotICAgICAgICAgICAgKnArKyA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgLyog R2V0IHNlcnZpY2UgbmFtZSBvciBudW1iZXIgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIHA9Imh0dHAiOwotICAgICAgICB9Ci0gICAgICAgIHJjID0gaHR0cF9vcGVuKHMscCxodHRw X3NzbCxOVUxMLDAsaHR0cF9hZ2VudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbWFrZXN0cigm cywoY2hhciAqKWh0dHBfaXApOwotICAgICAgICByYyA9IGh0dHBfb3BlbihzLGNrdWl0b2EoaHR0 cF9wb3J0KSxodHRwX3NzbCxOVUxMLDAsaHR0cF9hZ2VudCk7Ci0gICAgfQotICAgIGZyZWUocyk7 Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotaHR0cF9vcGVu KGNoYXIgKiBob3N0bmFtZSwgY2hhciAqIHN2Y25hbWUsIGludCB1c2Vfc3NsLCBjaGFyICogcmRu c19uYW1lLAotICAgICAgICAgIGludCByZG5zX2xlbiwgY2hhciAqIGFnZW50KQotI2Vsc2UgLyog Q0tfQU5TSUMgKi8KLWh0dHBfb3Blbihob3N0bmFtZSwgc3ZjbmFtZSwgdXNlX3NzbCwgcmRuc19u YW1lLCByZG5zX2xlbiwgYWdlbnQpCi0gICAgY2hhciAqIGhvc3RuYW1lOwotICAgIGNoYXIgKiBz dmNuYW1lOwotICAgIGludCAgICB1c2Vfc3NsOwotICAgIGNoYXIgKiByZG5zX25hbWU7Ci0gICAg aW50ICAgIHJkbnNfbGVuOwotICAgIGNoYXIgKiBhZ2VudDsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotewotICAgIGNoYXIgbmFtZWNvcHlbTkFNRUNQWUxdOwotICAgIGNoYXIgKnA7Ci0gICAgaW50 IGksIHgsIGRucyA9IDA7Ci0jaWZkZWYgVENQU09DS0VUCi0gICAgaW50IGlzY29ubmVjdCA9IDA7 Ci0jaWZkZWYgU09fT09CSU5MSU5FCi0gICAgaW50IG9uID0gMTsKLSNlbmRpZiAvKiBTT19PT0JJ TkxJTkUgKi8KLSAgICBzdHJ1Y3Qgc2VydmVudCAqc2VydmljZT1OVUxMOwotICAgIHN0cnVjdCBo b3N0ZW50ICpob3N0PU5VTEw7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIHJfYWRkcjsKLSAgICBz dHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBsX2FkZHI7Ci0g ICAgR1NPQ0tOQU1FX1QgbF9zbGVuOwotI2lmZGVmIEVYQ0VMQU4KLSAgICBzdHJ1Y3Qgc29ja2Fk ZHJfaW4gc2VuZF9zb2NrZXQ7Ci0jZW5kaWYgLyogRVhDRUxBTiAqLwotCi0jaWZkZWYgSU5BRERS WAotLyogaW5ldF9hZGRyKCkgaXMgb2YgdHlwZSBzdHJ1Y3QgaW5fYWRkciAqLwotI2lmZGVmIGRh dGFnZW5lcmFsCi0gICAgZXh0ZXJuIHN0cnVjdCBpbl9hZGRyIGluZXRfYWRkcigpOwotI2Vsc2UK LSNpZmRlZiBIUFVYNVdJTlRDUAotICAgIGV4dGVybiBzdHJ1Y3QgaW5fYWRkciBpbmV0X2FkZHIo KTsKLSNlbmRpZiAvKiBIUFVYNVdJTlRDUCAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0g ICAgc3RydWN0IGluX2FkZHIgaWF4OwotI2Vsc2UKLSNpZmRlZiBJTkFERFJfTk9ORQotICAgIHN0 cnVjdCBpbl9hZGRyIGlheDsKLSNlbHNlIC8qIElOQUREUl9OT05FICovCi0gICAgbG9uZyBpYXg7 Ci0jZW5kaWYgLyogSU5BRERSX05PTkUgKi8KLSNlbmRpZiAvKiBJTkFERFJYICovCi0KLSAgICBp ZiAoIHJkbnNfbmFtZSA9PSBOVUxMIHx8IHJkbnNfbGVuIDwgMCApCi0gICAgICAgIHJkbnNfbGVu ID0gMDsKLQotICAgICpodHRwX2lwID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAvKiBJbml0 aWFsaXplIElQIGFkZHJlc3Mgc3RyaW5nICovCi0gICAgbmFtZWNvcHlbMF0gPSAnXDAnOwotCi0j aWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsImh0dHBf b3BlbiBob3N0bmFtZSIsaG9zdG5hbWUsMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImh0dHBfb3Bl biBzdmNuYW1lIixzdmNuYW1lLDApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIGlm ICghaG9zdG5hbWUpIGhvc3RuYW1lID0gIiI7Ci0gICAgaWYgKCFzdmNuYW1lKSBzdmNuYW1lID0g IiI7Ci0gICAgaWYgKCEqaG9zdG5hbWUgfHwgISpzdmNuYW1lKSByZXR1cm4oLTEpOwotCi0gICAg Ci0gICAgc2VydmljZSA9IGNrZ2V0c2VydmljZShob3N0bmFtZSxzdmNuYW1lLGh0dHBfaXAsMjAp OwotCi0gICAgaWYgKHNlcnZpY2UgPT0gTlVMTCkgewotICAgICAgICBpZiAoICFxdWlldCApCi0g ICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIHNlcnZpY2U6ICVzXHJcbiIsc3ZjbmFtZSk7Ci0g ICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgLyogRm9yIEhUVFAgY29ubmVjdGlvbnMg d2UgbXVzdCBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgaG9zdG5hbWUgYW5kICovCi0gICAgLyogc2Vy dmljZSByZXF1ZXN0ZWQgc28gd2UgY2FuIGluY2x1ZGUgdGhlbSBpbiB0aGUgSG9zdCBoZWFkZXIu ICAgICovCi0gICAgY2ttYWttc2coaHR0cF9ob3N0X3BvcnQsc2l6ZW9mKGh0dHBfaG9zdF9wb3J0 KSxob3N0bmFtZSwiOiIsCi0gICAgICAgICAgICAgIGNrdWl0b2EobnRvaHMoc2VydmljZS0+c19w b3J0KSksTlVMTCk7Ci0gICAgaHR0cF9wb3J0ID0gbnRvaHMoc2VydmljZS0+c19wb3J0KTsKLSAg ICBodHRwX3NzbCA9IHVzZV9zc2w7Ci0gICAgZGVidWcoRjExMSwiaHR0cF9vcGVuIixodHRwX2hv c3RfcG9ydCxodHRwX3BvcnQpOwotCi0gICAgLyogJ2h0dHBfaXAnIGNvbnRhaW5zIHRoZSBJUCBh ZGRyZXNzIHRvIHdoaWNoIHdlIHdhbnQgdG8gY29ubmVjdCAgICAgICAgKi8KLSAgICAvKiAnc3Zj bmFtJyAgIGNvbnRhaW5zIHRoZSBzZXJ2aWNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqLwotICAgIC8qICdzZXJ2aWNlLT5zX3BvcnQnIGNvbnRhaW5zIHRoZSBwb3J0IG51 bWJlciBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgICAgICovCi0KLSAgICAvKiBJZiB3ZSBhcmUgdXNp bmcgYW4gaHR0cCBwcm94eSwgd2UgbmVlZCB0byBjcmVhdGUgYSBidWZmZXIgY29udGFpbmluZyAq LwotICAgIC8qICAgaG9zdG5hbWU6cG9ydC1udW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogdG8gcGFzcyB0byB0aGUgaHR0cF9jb25u ZWN0KCkgZnVuY3Rpb24uICBUaGVuIHdlIG5lZWQgdG8gcmVwbGFjZSAgICAgKi8KLSAgICAvKiAn bmFtZWNvcHknIHdpdGggdGhlIG5hbWUgb2YgdGhlIHByb3h5IHNlcnZlciBhbmQgdGhlIHNlcnZp Y2UtPnNfcG9ydCAqLwotICAgIC8qIHdpdGggdGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBwcm94eSAo ZGVmYXVsdCBwb3J0IDgwKS4gICAgICAgICAgICAgICAgICovCi0KLSAgICBpZiAoIHRjcF9odHRw X3Byb3h5ICkgewotCi0gICAgICAgIGNrbWFrbXNnKHByb3h5Y29weSxzaXplb2YocHJveHljb3B5 KSxob3N0bmFtZSwiOiIsCi0gICAgICAgICAgICAgICAgIGNrdWl0b2EobnRvaHMoc2VydmljZS0+ c19wb3J0KSksTlVMTCk7Ci0gICAgICAgIGNrc3RybmNweShuYW1lY29weSx0Y3BfaHR0cF9wcm94 eSxOQU1FQ1BZTCk7Ci0KLSAgICAgICAgcCA9IG5hbWVjb3B5OyAgICAgICAgICAgICAgICAgICAg ICAgLyogV2FzIGEgc2VydmljZSByZXF1ZXN0ZWQ/ICovCi0gICAgICAgIHdoaWxlICgqcCAhPSAn XDAnICYmICpwICE9ICc6JykgcCsrOyAvKiBMb29rIGZvciBjb2xvbiAqLwotICAgICAgICBpZiAo KnAgPT0gJzonKSB7ICAgICAgICAgICAgICAgICAgICAvKiBIYXZlIGEgY29sb24gKi8KLSAgICAg ICAgICAgIGRlYnVnKEYxMTAsImh0dHBfb3BlbiBuYW1lIGhhcyBjb2xvbiIsbmFtZWNvcHksMCk7 Ci0gICAgICAgICAgICAqcCsrID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgIC8qIEdldCBzZXJ2 aWNlIG5hbWUgb3IgbnVtYmVyICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHJj cHkoKytwLCJodHRwIik7Ci0gICAgICAgIH0KLQotICAgICAgICBzZXJ2aWNlID0gY2tnZXRzZXJ2 aWNlKG5hbWVjb3B5LHAsaHR0cF9pcCwyMCk7Ci0gICAgICAgIGlmICghc2VydmljZSkgewotICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBmaW5kIHBvcnQgZm9yIHNlcnZpY2UgJXNc biIsIHApOwotI2lmZGVmIFRHVk9SV0lOCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX29w ZW4gY2FuJ3QgZ2V0IHNlcnZpY2UgZm9yIHByb3h5IiwiIixzb2NrZXRfZXJybm8pOwotI2Vsc2UK LSAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfb3BlbiBjYW4ndCBnZXQgc2VydmljZSBmb3Ig cHJveHkiLCIiLGVycm5vKTsKLSNlbmRpZiAvKiBUR1ZPUldJTiAqLwotICAgICAgICAgICAgZXJy bm8gPSAwOyAgICAgICAgICAgICAgICAgIC8qIChyYXRoZXIgdGhhbiBtaXNsZWFkKSAqLwotICAg ICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGNvcHkgdGhlIHBy b3h5bmFtZSBhbmQgcmVtb3ZlIHRoZSBzZXJ2aWNlIGlmIGFueSBzbyB3ZSBjYW4gdXNlIAotICAg ICAgICAgKiBpdCBhcyB0aGUgaG9zdG5hbWUgCi0gICAgICAgICAqLwotICAgICAgICBja3N0cm5j cHkobmFtZWNvcHksdGNwX2h0dHBfcHJveHksTkFNRUNQWUwpOwotICAgICAgICBwID0gbmFtZWNv cHk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBXYXMgYSBzZXJ2aWNlIHJlcXVlc3RlZD8gKi8K LSAgICAgICAgd2hpbGUgKCpwICE9ICdcMCcgJiYgKnAgIT0gJzonKSBwKys7IC8qIExvb2sgZm9y IGNvbG9uICovCi0gICAgICAgIGlmICgqcCA9PSAnOicpIHsgICAgICAgICAgICAgICAgICAgIC8q IEhhdmUgYSBjb2xvbiAqLwotICAgICAgICAgICAgKnAgPSAnXDAnOyAgICAgICAgICAgICAgICAg ICAgICAvKiB0ZXJtaW5hdGUgc3RyaW5nICovCi0gICAgICAgIH0gICAgICAgIAotICAgICAgICBo b3N0bmFtZSA9IG5hbWVjb3B5OyAgICAgICAgICAgICAgICAvKiB1c2UgcHJveHkgYXMgaG9zdG5h bWUgKi8KLSAgICB9Ci0KLSAgICAvKiBTZXQgdXAgc29ja2V0IHN0cnVjdHVyZSBhbmQgZ2V0IGhv c3QgYWRkcmVzcyAqLwotICAgIGJ6ZXJvKChjaGFyICopJnJfYWRkciwgc2l6ZW9mKHJfYWRkcikp OwotICAgIGRlYnVnKEYxMDAsImh0dHBfb3BlbiBiemVybyBvayIsIiIsMCk7Ci0KLSNpZmRlZiBJ TkFERFJfTk9ORQotICAgIGRlYnVnKEYxMDEsImh0dHBfb3BlbiBJTkFERFJfTk9ORSBkZWZpbmVk IiwiIixJTkFERFJfTk9ORSk7Ci0jZWxzZSAvKiBJTkFERFJfTk9ORSAqLwotICAgIGRlYnVnKEYx MDAsImh0dHBfb3BlbiBJTkFERFJfTk9ORSBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYgLyog SU5BRERSX05PTkUgKi8KLSNpZmRlZiBJTkFERFJYCi0gICAgZGVidWcoRjEwMCwiaHR0cF9vcGVu IElOQUREUlggZGVmaW5lZCIsIiIsMCk7Ci0jZWxzZSAvKiBJTkFERFJYICovCi0gICAgZGVidWco RjEwMCwiaHR0cF9vcGVuIElOQUREUlggbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8qIElO QUREUlggKi8KLQotI2lmbmRlZiBOT01ISE9TVAotI2lmZGVmIElOQUREUlgKLSAgICBpYXggPSBp bmV0X2FkZHIoaHR0cF9pcFswXT9odHRwX2lwOmhvc3RuYW1lKTsKLSAgICBkZWJ1ZyhGMTExLCJo dHRwX29wZW4gaW5ldF9hZGRyIixodHRwX2lwWzBdP2h0dHBfaXA6aG9zdG5hbWUsaWF4LnNfYWRk cik7Ci0jZWxzZSAvKiBJTkFERFJYICovCi0jaWZkZWYgSU5BRERSX05PTkUKLSAgICBpYXguc19h ZGRyID0gaW5ldF9hZGRyKGh0dHBfaXBbMF0/aHR0cF9pcDpob3N0bmFtZSk7Ci0gICAgZGVidWco RjExMSwiaHR0cF9vcGVuIGluZXRfYWRkciIsaHR0cF9pcFswXT9odHRwX2lwOmhvc3RuYW1lLGlh eC5zX2FkZHIpOwotI2Vsc2UgLyogSU5BRERSX05PTkUgKi8KLSNpZm5kZWYgZGF0YWdlbmVyYWwK LSAgICBpYXggPSAodW5zaWduZWQgaW50KSBpbmV0X2FkZHIoaHR0cF9pcFswXT9odHRwX2lwOmhv c3RuYW1lKTsKLSNlbHNlCi0gICAgaWF4ID0gLTFMOwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICov Ci0gICAgZGVidWcoRjExMSwiaHR0cF9vcGVuIGluZXRfYWRkciIsaHR0cF9pcFswXT9odHRwX2lw Omhvc3RuYW1lLGlheCk7Ci0jZW5kaWYgLyogSU5BRERSX05PTkUgKi8KLSNlbmRpZiAvKiBJTkFE RFJYICovCi0KLSAgICBkbnMgPSAwOwotICAgIGlmICgKLSNpZmRlZiBJTkFERFJfTk9ORQotLyog VGhpcyBtaWdodCBnaXZlIHdhcm5pbmdzIG9uIDY0LWJpdCBwbGF0Zm9ybXMgYnV0IHRoZXkgc2hv dWxkIGJlIGhhcm1sZXNzICovCi0vKiBiZWNhdXNlIElOQUREUl9OT05FIHNob3VsZCBiZSBhbGwg MSdzIGFueXdheSwgdGh1cyB0aGUgT1IgcGFydCBpcyAqLwotLyogcHJvYmFibHkgc3VwZXJmbHVv dXMgLS0gbm90IHN1cmUgd2h5IGl0J3MgZXZlbiB0aGVyZSwgbWF5YmUgaXQgc2hvdWxkIGJlICov Ci0vKiByZW1vdmVkLiAqLwotICAgICAgICBpYXguc19hZGRyID09IElOQUREUl9OT05FIC8qIHx8 IGlheC5zX2FkZHIgPT0gKHVuc2lnbmVkIGxvbmcpIC0xTCAqLwotI2Vsc2UgLyogSU5BRERSX05P TkUgKi8KLSAgICAgICAgaWF4ID09IC0xCi0jZW5kaWYgLyogSU5BRERSX05PTkUgKi8KLSAgICAg ICAgKSB7Ci0gICAgICAgIGlmICghcXVpZXQpIHsKLSAgICAgICAgICAgIHByaW50ZigiIEROUyBM b29rdXAuLi4gIik7Ci0gICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgfQotICAg ICAgICBpZiAoKGhvc3QgPSBnZXRob3N0YnluYW1lKGh0dHBfaXBbMF0gPyBodHRwX2lwIDogaG9z dG5hbWUpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX29wZW4gZ2V0 aG9zdGJ5bmFtZSAhPSBOVUxMIiwiIiwwKTsKLSAgICAgICAgICAgIGhvc3QgPSBja19jb3B5aG9z dGVudChob3N0KTsKLSAgICAgICAgICAgIGRucyA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBS ZW1lbWJlciB3ZSBwZXJmb3JtZWQgZG5zIGxvb2t1cCAqLwotICAgICAgICAgICAgcl9hZGRyLnNp bl9mYW1pbHkgPSBob3N0LT5oX2FkZHJ0eXBlOwotICAgICAgICAgICAgaWYgKHRjcF9yZG5zICYm IGhvc3QtPmhfbmFtZSAmJiBob3N0LT5oX25hbWVbMF0gJiYgKHJkbnNfbGVuID4gMCkKLSAgICAg ICAgICAgICAgICAgJiYgKHRjcF9odHRwX3Byb3h5ID09IE5VTEwpCi0gICAgICAgICAgICAgICAg ICkKLSAgICAgICAgICAgICAgICBja21ha21zZyhyZG5zX25hbWUscmRuc19sZW4saG9zdC0+aF9u YW1lLCI6IixzdmNuYW1lLE5VTEwpOwotCi0jaWZkZWYgSEFERFJMSVNUCi0jaWZkZWYgaF9hZGRy Ci0gICAgICAgICAgICAvKiBUaGlzIGlzIGZvciB0cnlpbmcgbXVsdGlwbGUgSVAgYWRkcmVzc2Vz IC0gc2VlIDxuZXRkYi5oPiAqLwotICAgICAgICAgICAgaWYgKCEoaG9zdC0+aF9hZGRyX2xpc3Qp KQotICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgYmNvcHkoaG9zdC0+aF9h ZGRyX2xpc3RbMF0sCi0gICAgICAgICAgICAgICAgICAoY2FkZHJfdCkmcl9hZGRyLnNpbl9hZGRy LAotICAgICAgICAgICAgICAgICAgaG9zdC0+aF9sZW5ndGgKLSAgICAgICAgICAgICAgICAgICk7 Ci0jZWxzZQotICAgICAgICAgICAgYmNvcHkoaG9zdC0+aF9hZGRyLCAoY2FkZHJfdCkmcl9hZGRy LnNpbl9hZGRyLCBob3N0LT5oX2xlbmd0aCk7Ci0jZW5kaWYgLyogaF9hZGRyICovCi0jZWxzZSAg LyogSEFERFJMSVNUICovCi0gICAgICAgICAgICBiY29weShob3N0LT5oX2FkZHIsIChjYWRkcl90 KSZyX2FkZHIuc2luX2FkZHIsIGhvc3QtPmhfbGVuZ3RoKTsKLSNlbmRpZiAvKiBIQUREUkxJU1Qg Ki8KLSNpZmRlZiBDT01NRU5UCi0jaWZuZGVmIEVYQ0VMQU4KLSAgICAgICAgICAgIGRlYnVnKEYx MTEsIkJDT1BZIiwiaG9zdC0+aF9hZGRyIixob3N0LT5oX2FkZHIpOwotI2VuZGlmIC8qIEVYQ0VM QU4gKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIkJDT1BZIiwiIChjYWRkcl90KSZyX2FkZHIu c2luX2FkZHIiLAotICAgICAgICAgICAgICAgICAgKGNhZGRyX3QpJnJfYWRkci5zaW5fYWRkcik7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJCQ09QWSIsIiByX2FkZHIuc2luX2FkZHIuc19hZGRy IiwKLSAgICAgICAgICAgICAgICAgIHJfYWRkci5zaW5fYWRkci5zX2FkZHIpOwotI2VuZGlmCS8q IENPTU1FTlQgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIkJDT1BZIiwiaG9zdC0+aF9sZW5n dGgiLGhvc3QtPmhfbGVuZ3RoKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBOT01ISE9T VCAqLwotCi0gICAgaWYgKCFkbnMpIHsKLSNpZmRlZiBJTkFERFJYCi0vKiBpbmV0X2FkZHIoKSBp cyBvZiB0eXBlIHN0cnVjdCBpbl9hZGRyICovCi0gICAgICAgIHN0cnVjdCBpbl9hZGRyIGluYTsK LSAgICAgICAgdW5zaWduZWQgbG9uZyB1dTsKLSAgICAgICAgZGVidWcoRjEwMCwiaHR0cF9vcGVu IGdldGhvc3RieW5hbWUgPT0gTlVMTDogSU5BRERSWCIsIiIsMCk7Ci0gICAgICAgIGluYSA9IGlu ZXRfYWRkcihodHRwX2lwWzBdP2h0dHBfaXA6aG9zdG5hbWUpOwotICAgICAgICB1dSA9ICoodW5z aWduZWQgaW50ICopJmluYTsKLSNlbHNlIC8qIE5vdCBJTkFERFJYICovCi0vKiBpbmV0X2FkZHIo KSBpcyB1bnNpZ25lZCBsb25nICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgdXU7Ci0gICAgICAg IGRlYnVnKEYxMDAsImh0dHBfb3BlbiBnZXRob3N0YnluYW1lID09IE5VTEw6IE5vdCBJTkFERFJY IiwiIiwwKTsKLSAgICAgICAgdXUgPSBpbmV0X2FkZHIoaHR0cF9pcFswXT9odHRwX2lwOmhvc3Ru YW1lKTsKLSNlbmRpZiAvKiBJTkFERFJYICovCi0gICAgICAgIGRlYnVnKEYxMDEsImh0dHBfb3Bl biB1dSIsIiIsdXUpOwotICAgICAgICBpZiAoCi0jaWZkZWYgSU5BRERSX05PTkUKLSAgICAgICAg ICAgICEodXUgPT0gSU5BRERSX05PTkUgfHwgdXUgPT0gKHVuc2lnbmVkIGludCkgLTFMKQotI2Vs c2UgICAvKiBJTkFERFJfTk9ORSAqLwotICAgICAgICAgICAgdXUgIT0gKCh1bnNpZ25lZCBsb25n KS0xKQotI2VuZGlmIC8qIElOQUREUl9OT05FICovCi0gICAgICAgICAgICApIHsKLSAgICAgICAg ICAgIHJfYWRkci5zaW5fYWRkci5zX2FkZHIgPSB1dTsKLSAgICAgICAgICAgIHJfYWRkci5zaW5f ZmFtaWx5ID0gQUZfSU5FVDsKLSAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBWTVMKLSAgICAgICAg ICAgIGZwcmludGYoc3Rkb3V0LCAiXHJcbiIpOyAgICAvKiBjb21wbGV0ZSBhbnkgcHJldmlvdXMg bWVzc2FnZSAqLwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ICJDYW4ndCBnZXQgYWRkcmVzcyBmb3IgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICBodHRw X2lwWzBdP2h0dHBfaXA6aG9zdG5hbWUpOwotI2lmZGVmIFRHVk9SV0lOCi0gICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJodHRwX29wZW4gY2FuJ3QgZ2V0IGFkZHJlc3MiLCIiLHNvY2tldF9lcnJubyk7 Ci0jZWxzZQotICAgICAgICAgICAgZGVidWcoRjEwMSwiaHR0cF9vcGVuIGNhbid0IGdldCBhZGRy ZXNzIiwiIixlcnJubyk7Ci0jZW5kaWYgLyogVEdWT1JXSU4gKi8KLSAgICAgICAgICAgIGVycm5v ID0gMDsgICAgICAgICAgICAgICAgICAvKiBSYXRoZXIgdGhhbiBtaXNsZWFkICovCi0gICAgICAg ICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogR2V0IGEgZmlsZSBk ZXNjcmlwdG9yIGZvciB0aGUgY29ubmVjdGlvbi4gKi8KLQotICAgIHJfYWRkci5zaW5fcG9ydCA9 IHNlcnZpY2UtPnNfcG9ydDsKLSAgICBja3N0cm5jcHkoaHR0cF9pcCwoY2hhciAqKWluZXRfbnRv YShyX2FkZHIuc2luX2FkZHIpLDIwKTsKLSAgICBkZWJ1ZyhGMTEwLCJodHRwX29wZW4gdHJ5aW5n IixodHRwX2lwLDApOwotICAgIGlmICghcXVpZXQgJiYgKmh0dHBfaXApIHsKLSAgICAgICAgcHJp bnRmKCIgVHJ5aW5nICVzLi4uICIsIGh0dHBfaXApOwotICAgICAgICBmZmx1c2goc3Rkb3V0KTsK LSAgICB9Ci0KLSAgICAvKiBMb29wIHRvIHRyeSBhZGRpdGlvbmFsIElQIGFkZHJlc3NlcywgaWYg YW55LiAqLwotCi0gICAgZG8gewotI2lmZGVmIEVYQ0VMQU4KLSAgICAgICAgc2VuZF9zb2NrZXQu c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0gICAgICAgIHNlbmRfc29ja2V0LnNpbl9hZGRyLnNfYWRk ciA9IDA7Ci0gICAgICAgIHNlbmRfc29ja2V0LnNpbl9wb3J0ID0gMDsKLSAgICAgICAgaWYgKCho dHRwZmQgPSBzb2NrZXQoU09DS19TVFJFQU0sIChzdHJ1Y3Qgc29ja3Byb3RvICopMCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmc2VuZF9zb2NrZXQsIFNPX1JFVVNFQUREUikpIDwgMCkK LSNlbHNlICAvKiBFWENFTEFOICovCi0gICAgICAgIGlmICgoaHR0cGZkID0gc29ja2V0KEFGX0lO RVQsIFNPQ0tfU1RSRUFNLCAwKSkgPCAwKQotI2VuZGlmIC8qIEVYQ0VMQU4gKi8KLSAgICAgICAg ICAgIHsKLSNpZmRlZiBFWENFTEFOCi0gICAgICAgICAgICAgICAgZXhwZXJyb3IoIlRDUCBzb2Nr ZXQgZXJyb3IiKTsKLSNlbHNlCi0jaWZkZWYgVEdWT1JXSU4KLSNpZmRlZiBPTERfVFdHCi0gICAg ICAgICAgICAgICAgZXJybm8gPSBzb2NrZXRfZXJybm87Ci0jZW5kaWYgLyogT0xEX1RXRyAqLwot ICAgICAgICAgICAgICAgIHNvY2tldF9wZXJyb3IoIlRDUCBzb2NrZXQgZXJyb3IiKTsKLSAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX29wZW4gc29ja2V0IGVycm9yIiwiIixzb2NrZXRf ZXJybm8pOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBwZXJyb3IoIlRDUCBzb2NrZXQgZXJyb3Ii KTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX29wZW4gc29ja2V0IGVycm9yIiwi IixlcnJubyk7Ci0jZW5kaWYgLyogVEdWT1JXSU4gKi8KLSNlbmRpZiAvKiBFWENFTEFOICovCi0g ICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVycm5v ID0gMDsKLQotICAgICAgIC8qIElmIGEgc3BlY2lmaWMgVENQIGFkZHJlc3Mgb24gdGhlIGxvY2Fs IGhvc3QgaXMgZGVzaXJlZCB3ZSAqLwotICAgICAgIC8qIG11c3QgYmluZCBpdCB0byB0aGUgc29j a2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmbmRlZiBkYXRhZ2VuZXJh bAotICAgICAgICAgaWYgKHRjcF9hZGRyZXNzKSB7Ci0gICAgICAgICAgICAgaW50IHNfZXJybm87 Ci0KLSAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJodHRwX29wZW4gYmluZGluZyBzb2NrZXQgdG8i LHRjcF9hZGRyZXNzLDApOwotICAgICAgICAgICAgIGJ6ZXJvKChjaGFyICopJnNpbixzaXplb2Yo c2luKSk7Ci0gICAgICAgICAgICAgc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIElO QUREUlgKLSAgICAgICAgICAgICBpbmFkZHJ4ID0gaW5ldF9hZGRyKHRjcF9hZGRyZXNzKTsKLSAg ICAgICAgICAgICBzaW4uc2luX2FkZHIuc19hZGRyID0gKih1bnNpZ25lZCBsb25nICopJmluYWRk cng7Ci0jZWxzZQotICAgICAgICAgICAgIHNpbi5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIo dGNwX2FkZHJlc3MpOwotI2VuZGlmIC8qIElOQUREUlggKi8KLSAgICAgICAgICAgICBzaW4uc2lu X3BvcnQgPSAwOwotICAgICAgICAgICAgIGlmIChiaW5kKGh0dHBmZCwgKHN0cnVjdCBzb2NrYWRk ciAqKSZzaW4sIHNpemVvZihzaW4pKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgc19lcnJubyA9 IHNvY2tldF9lcnJubzsgLyogU2F2ZSBlcnJvciBjb2RlICovCi0jaWZkZWYgVENQSVBMSUIKLSAg ICAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKGh0dHBmZCk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAq LwotICAgICAgICAgICAgICAgICBjbG9zZShodHRwZmQpOwotI2VuZGlmIC8qIFRDUElQTElCICov Ci0gICAgICAgICAgICAgICAgIGh0dHBmZCA9IC0xOwotICAgICAgICAgICAgICAgICBlcnJubyA9 IHNfZXJybm87ICAgICAgIC8qIGFuZCByZXBvcnQgdGhpcyBlcnJvciAqLwotICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJodHRwX29wZW4gYmluZCBlcnJubyIsIiIsZXJybm8pOwotICAgICAg ICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLSNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLwotCi0vKiBOb3cgY29ubmVjdCB0byB0aGUgc29ja2V0IG9uIHRo ZSBvdGhlciBlbmQuICovCi0KLSNpZmRlZiBFWENFTEFOCi0gICAgICAgIGlmIChjb25uZWN0KGh0 dHBmZCwgJnJfYWRkcikgPCAwKQotI2Vsc2UKLSNpZmRlZiBOVAotICAgICAgICAgIFdTQVNhZmVU b0NhbmNlbCA9IDE7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgaWYgKGNvbm5lY3QoaHR0cGZk LCAoc3RydWN0IHNvY2thZGRyICopJnJfYWRkciwgc2l6ZW9mKHJfYWRkcikpIDwgMCkKLSNlbmRp ZiAvKiBFWENFTEFOICovCi0gICAgICAgICAgewotI2lmZGVmIE5UCi0gICAgICAgICAgICAgIFdT QVNhZmVUb0NhbmNlbCA9IDA7Ci0jZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAg ICAgICAgaSA9IHNvY2tldF9lcnJubzsKLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVmIFRHVk9SV0lO Ci0gICAgICAgICAgICAgIGkgPSBzb2NrZXRfZXJybm87Ci0jZWxzZQotICAgICAgICAgICAgICBp ID0gZXJybm87ICAgICAgICAgICAgICAgIC8qIFNhdmUgZXJyb3IgY29kZSAqLwotI2VuZGlmIC8q IFRHVk9SV0lOICovCi0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgSEFERFJMSVNUCi0jaWZkZWYg aF9hZGRyCi0gICAgICAgICAgICAgIGlmIChob3N0ICYmIGhvc3QtPmhfYWRkcl9saXN0ICYmIGhv c3QtPmhfYWRkcl9saXN0WzFdKSB7Ci0gICAgICAgICAgICAgICAgICBwZXJyb3IoIiIpOwotICAg ICAgICAgICAgICAgICAgaG9zdC0+aF9hZGRyX2xpc3QrKzsKLSAgICAgICAgICAgICAgICAgIGJj b3B5KGhvc3QtPmhfYWRkcl9saXN0WzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgKGNhZGRy X3QpJnJfYWRkci5zaW5fYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QtPmhfbGVu Z3RoKTsKLQotICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGh0dHBfaXAsKGNoYXIgKilpbmV0 X250b2Eocl9hZGRyLnNpbl9hZGRyKSwyMCk7Ci0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJodHRwX29wZW4gaF9hZGRyX2xpc3QiLGh0dHBfaXAsMCk7Ci0gICAgICAgICAgICAgICAgICBp ZiAoIXF1aWV0ICYmICpodHRwX2lwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIg VHJ5aW5nICVzLi4uICIsIGh0dHBfaXApOwotICAgICAgICAgICAgICAgICAgICAgIGZmbHVzaChz dGRvdXQpOwotICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAg ICAgICAgICBzb2NrZXRfY2xvc2UoaHR0cGZkKTsgLyogQ2xvc2UgaXQuICovCi0jZWxzZQotICAg ICAgICAgICAgICAgICAgY2xvc2UoaHR0cGZkKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAg ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBoX2Fk ZHIgKi8KLSNlbmRpZiAgLyogSEFERFJMSVNUICovCi0gICAgICAgICAgICAgIGh0dHBfY2xvc2Uo KTsKLSAgICAgICAgICAgICAgaHR0cGZkID0gLTE7Ci0gICAgICAgICAgICAgIGVycm5vID0gaTsg ICAgICAgICAgICAgICAgLyogQW5kIHJlcG9ydCB0aGlzIGVycm9yICovCi0jaWZkZWYgRVhDRUxB TgotICAgICAgICAgICAgICBpZiAoZXJybm8pIGV4cGVycm9yKCJodHRwX29wZW4gY29ubmVjdCIp OwotI2Vsc2UKLSNpZmRlZiBUR1ZPUldJTgotICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJodHRw X29wZW4gY29ubmVjdCBlcnJvciIsIiIsc29ja2V0X2Vycm5vKTsKLSAgICAgICAgICAgICAgLyog aWYgKGVycm5vKSBzb2NrZXRfcGVycm9yKCJodHRwX29wZW4gY29ubmVjdCIpOyAqLwotI2lmZGVm IE9MRF9UV0cKLSAgICAgICAgICAgICAgZXJybm8gPSBzb2NrZXRfZXJybm87Ci0jZW5kaWYgLyog T0xEX1RXRyAqLwotICAgICAgICAgICAgICBpZiAoIXF1aWV0KQotICAgICAgICAgICAgICAgIHNv Y2tldF9wZXJyb3IoImh0dHBfb3BlbiBjb25uZWN0Iik7Ci0jZWxzZSAvKiBUR1ZPUldJTiAqLwot ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX29wZW4gY29ubmVjdCBlcnJubyIsIiIsZXJy bm8pOwotI2lmZGVmIFZNUwotICAgICAgICAgICAgICBpZiAoIXF1aWV0KQotICAgICAgICAgICAg ICAgIHBlcnJvcigiXHJcbkZhaWxlZCIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgaWYgKCFxdWll dCkKLSAgICAgICAgICAgICAgICBwZXJyb3IoIkZhaWxlZCIpOwotI2VuZGlmIC8qIFZNUyAqLwot I2lmZGVmIERFQ19UQ1BJUAotICAgICAgICAgICAgICBpZiAoIXF1aWV0KQotICAgICAgICAgICAg ICAgIHBlcnJvcigiaHR0cF9vcGVuIGNvbm5lY3QiKTsKLSNlbmRpZiAvKiBERUNfVENQSVAgKi8K LSNpZmRlZiBDTVVfVENQSVAKLSAgICAgICAgICAgICAgaWYgKCFxdWlldCkKLSAgICAgICAgICAg ICAgICBwZXJyb3IoImh0dHBfb3BlbiBjb25uZWN0Iik7Ci0jZW5kaWYgLyogQ01VX1RDUElQICov Ci0jZW5kaWYgLyogVEdWT1JXSU4gKi8KLSNlbmRpZiAvKiBFWENFTEFOICovCi0gICAgICAgICAg ICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgfQotI2lmZGVmIE5UCi0gICAgICAgIFdTQVNhZmVU b0NhbmNlbCA9IDA7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgaXNjb25uZWN0ID0gMTsKLSAg ICB9IHdoaWxlICghaXNjb25uZWN0KTsKLQotI2lmZGVmIE5PTl9CTE9DS19JTwotICAgIG9uID0g MTsKLSAgICB4ID0gc29ja2V0X2lvY3RsKGh0dHBmZCxGSU9OQklPLCZvbik7Ci0gICAgZGVidWco RjEwMSwiaHR0cF9vcGVuIEZJT05CSU8iLCIiLHgpOwotI2VuZGlmIC8qIE5PTl9CTE9DS19JTyAq LwotCi0gICAgLyogV2UgaGF2ZSBzdWNjZWVkZWQgaW4gY29ubmVjdGluZyB0byB0aGUgSFRUUCBQ Uk9YWS4gIFNvIG5vdyB3ZSAgICovCi0gICAgLyogbmVlZCB0byBhdHRlbXB0IHRvIGNvbm5lY3Qg dGhyb3VnaCB0aGUgcHJveHkgdG8gdGhlIGFjdHVhbCBob3N0ICovCi0gICAgLyogSWYgdGhhdCBp cyBzdWNjZXNzZnVsLCB3ZSBoYXZlIHRvIHByZXRlbmQgdGhhdCB3ZSBtYWRlIGEgZGlyZWN0ICov Ci0gICAgLyogY29ubmVjdGlvbiB0byB0aGUgYWN0dWFsIGhvc3QuICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCi0KLSAgICBpZiAoIHRjcF9odHRwX3Byb3h5ICkgewotI2lmZGVm IE9TMgotICAgICAgICBpZiAoIWFnZW50KSAKLQkgIGFnZW50ID0gIktlcm1pdCA5NSI7CS8qIERl ZmF1bHQgdXNlciBhZ2VudCAqLwotI2Vsc2UKLSAgICAgICAgaWYgKCFhZ2VudCkgCi0JICBhZ2Vu dCA9ICJDLUtlcm1pdCI7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICAgICAgaWYgKGh0dHBfY29u bmVjdChodHRwZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJveHlfYWdl bnQgPyB0Y3BfaHR0cF9wcm94eV9hZ2VudCA6IGFnZW50LAotICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJveHlfdXNlciwK LSAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94eV9wd2QsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eWNvcHkKLSAg ICAgICAgICAgICAgICAgICAgICAgICApIDwgMCkgewotICAgICAgICAgICAgaHR0cF9jbG9zZSgp OwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmZGVmIFNP X09PQklOTElORQotICAgIC8qIFNlZSBub3RlIG9uIFNPX09PQklOTElORSBpbiBuZXRvcGVuKCkg Ki8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIHNldHNvY2tvcHQoaHR0cGZkLCBTT0xfU09DS0VU LCBTT19PT0JJTkxJTkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOwotI2Vsc2UKLSNpZmRlZiBC U0Q0MwotICAgIHNldHNvY2tvcHQoaHR0cGZkLCBTT0xfU09DS0VULCBTT19PT0JJTkxJTkUsKGNo YXIgKikgJm9uLCBzaXplb2Ygb24pOwotI2Vsc2UKLSNpZmRlZiBPU0YxCi0gICAgc2V0c29ja29w dChodHRwZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNpemVvZiBv bik7Ci0jZWxzZQotI2lmZGVmIFBPU0lYCi0gICAgc2V0c29ja29wdChodHRwZmQsIFNPTF9TT0NL RVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7Ci0jZWxzZQotI2lmZGVm IE1PVFNWODhSNAotICAgIHNldHNvY2tvcHQoaHR0cGZkLCBTT0xfU09DS0VULCBTT19PT0JJTkxJ TkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOwotI2Vsc2UKLSNpZmRlZiBTT0xBUklTCi0vKgot ICBNYXliZSB0aGlzIGFwcGxpZXMgdG8gYWxsIFNWUjQgdmVyc2lvbnMsIGJ1dCB0aGUgb3RoZXIg KGVsc2UpIHdheSBoYXMgYmVlbgotICBjb21waWxpbmcgYW5kIHdvcmtpbmcgZmluZSBvbiBhbGwg dGhlIG90aGVycywgc28gYmVzdCBub3QgdG8gY2hhbmdlIGl0LgotKi8KLSAgICBzZXRzb2Nrb3B0 KGh0dHBmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9u KTsKLSNlbHNlCi0jaWZkZWYgT1NLCi0gICAgc2V0c29ja29wdChodHRwZmQsIFNPTF9TT0NLRVQs IFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7Ci0jZWxzZQotI2lmZGVmIE9T MgotICAgIHsKLSAgICAgICAgaW50IHJjOwotICAgICAgICByYyA9IHNldHNvY2tvcHQoaHR0cGZk LAotICAgICAgICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwKLSAgICAgICAgICAgICAgICAg ICAgICAgIFNPX09PQklOTElORSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopICZv biwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiBvbgotICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgZGVidWcoRjExMSwic2V0c29ja29wdCBTT19PT0JJTkxJTkUiLG9u ID8gIm9uIiA6ICJvZmYiICxyYyk7Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBWTVMgLyogb3IsIGF0 IGxlYXN0LCBWTVMgd2l0aCBnY2MgKi8KLSAgICBzZXRzb2Nrb3B0KGh0dHBmZCwgU09MX1NPQ0tF VCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKLSNlbHNlCi0jaWZkZWYg Q0xJWAotICAgIHNldHNvY2tvcHQoaHR0cGZkLCBTT0xfU09DS0VULCBTT19PT0JJTkxJTkUsKGNo YXIgKikgJm9uLCBzaXplb2Ygb24pOwotI2Vsc2UKLSAgICBzZXRzb2Nrb3B0KGh0dHBmZCwgU09M X1NPQ0tFVCwgU09fT09CSU5MSU5FLCAmb24sIHNpemVvZiBvbik7Ci0jZW5kaWYgLyogQ0xJWCAq LwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE9TSyAqLwot I2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNlbmRpZiAvKiBNT1RTVjg4UjQgKi8KLSNlbmRpZiAvKiBQ T1NJWCAqLwotI2VuZGlmIC8qIEJTRDQzICovCi0jZW5kaWYgLyogT1NGMSAqLwotI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogU09fT09CSU5MSU5FICovCi0KLSNpZm5kZWYgTk9U Q1BPUFRTCi0jaWZuZGVmIGRhdGFnZW5lcmFsCi0jaWZkZWYgU09MX1NPQ0tFVAotI2lmZGVmIFRD UF9OT0RFTEFZCi0gICAgbm9fZGVsYXkodHR5ZmQsdGNwX25vZGVsYXkpOwotI2VuZGlmIC8qIFRD UF9OT0RFTEFZICovCi0jaWZkZWYgU09fS0VFUEFMSVZFCi0gICAga2VlcGFsaXZlKHR0eWZkLHRj cF9rZWVwYWxpdmUpOwotI2VuZGlmIC8qIFNPX0tFRVBBTElWRSAqLwotI2lmZGVmIFNPX0xJTkdF UgotICAgIGNrX2xpbmdlcih0dHlmZCx0Y3BfbGluZ2VyLCB0Y3BfbGluZ2VyX3Rtbyk7Ci0jZW5k aWYgLyogU09fTElOR0VSICovCi0jaWZkZWYgU09fU05EQlVGCi0gICAgc2VuZGJ1Zih0dHlmZCx0 Y3Bfc2VuZGJ1Zik7Ci0jZW5kaWYgLyogU09fU05EQlVGICovCi0jaWZkZWYgU09fUkNWQlVGCi0g ICAgcmVjdmJ1Zih0dHlmZCx0Y3BfcmVjdmJ1Zik7Ci0jZW5kaWYgLyogU09fUkNWQlVGICovCi0j ZW5kaWYgLyogU09MX1NPQ0tFVCAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYg LyogTk9UQ1BPUFRTICovCi0KLSNpZm5kZWYgZGF0YWdlbmVyYWwKLSAgICAvKiBGaW5kIG91dCBv dXIgb3duIElQIGFkZHJlc3MuICovCi0gICAgLyogV2UgbmVlZCB0aGUgbF9hZGRyIHN0cnVjdHVy ZSBmb3IgW0VdS0xPR0lOLiAqLwotICAgIGxfc2xlbiA9IHNpemVvZihsX2FkZHIpOwotICAgIGJ6 ZXJvKChjaGFyICopJmxfYWRkciwgbF9zbGVuKTsKLSNpZm5kZWYgRVhDRUxBTgotICAgIGlmICgh Z2V0c29ja25hbWUoaHR0cGZkLCAoc3RydWN0IHNvY2thZGRyICopJmxfYWRkciwgJmxfc2xlbikp IHsKLSAgICAgICAgY2hhciAqIHMgPSAoY2hhciAqKWluZXRfbnRvYShsX2FkZHIuc2luX2FkZHIp OwotICAgICAgICBja3N0cm5jcHkobXlpcGFkZHIsIHMsIDIwKTsKLSAgICAgICAgZGVidWcoRjEx MCwiZ2V0c29ja25hbWUiLG15aXBhZGRyLDApOwotICAgIH0KLSNlbmRpZiAvKiBFWENFTEFOICov Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotLyogU2VlIG5vdGUgaW4gbmV0b3BlbigpIG9u IFJldmVyc2UgRE5TIGxvb2t1cHMgKi8KLSAgICAgaWYgKHRjcF9yZG5zID09IFNFVF9PTikgewot I2lmZGVmIE5UCi0gICAgICAgIGlmIChpc1dpbjk1KCkpCi0gICAgICAgICAgc2xlZXAoMSk7Ci0j ZW5kaWYgLyogTlQgKi8KLSAgICAgICAgaWYgKCFxdWlldCkgewotICAgICAgICAgICAgcHJpbnRm KCIgUmV2ZXJzZSBETlMgTG9va3VwLi4uICIpOwotICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7 Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhvc3QgPSBnZXRob3N0YnlhZGRyKChjaGFyICopJnJf YWRkci5zaW5fYWRkciw0LFBGX0lORVQpKSB7Ci0gICAgICAgICAgICBjaGFyICogczsKLSAgICAg ICAgICAgIGhvc3QgPSBja19jb3B5aG9zdGVudChob3N0KTsKLSAgICAgICAgICAgIGRlYnVnKEYx MDAsImh0dHBfb3BlbiBnZXRob3N0YnluYW1lICE9IE5VTEwiLCIiLDApOwotICAgICAgICAgICAg aWYgKCFxdWlldCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiKE9LKVxuIik7Ci0gICAgICAg ICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzID0g aG9zdC0+aF9uYW1lOwotICAgICAgICAgICAgaWYgKCFzKSB7ICAgICAgICAgICAgICAgICAgIC8q IFRoaXMgY2FuIGhhcHBlbi4uLiAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBf b3BlbiBob3N0LT5oX25hbWUgaXMgTlVMTCIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgcyA9ICIi OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogU29tZXRoaW5nIGlzIHdyb25nIHdpdGgg aW5ldF9udG9hKCkgb24gSFBVWCAxMC54eCAqLwotICAgICAgICAgICAgLyogVGhlIGNvbXBpbGVy IHNheXMgIkludGVncmFsIHZhbHVlIGltcGxpY2l0bHkgY29udmVydGVkIHRvICovCi0gICAgICAg ICAgICAvKiBwb2ludGVyIGluIGFzc2lnbm1lbnQuIiAgVGhlIHByb3RvdHlwZSBpcyByaWdodCB0 aGVyZSAqLwotICAgICAgICAgICAgLyogaW4gPGFycGEvaW5ldC5oPiBzbyB3aGF0J3MgdGhlIHBy b2JsZW0/ICovCi0gICAgICAgICAgICAvKiBEaXR0byBpbiBIUC1VWCA1LngsIGJ1dCBub3QgOC54 IG9yIDkueC4uLiAqLwotICAgICAgICAgICAgaWYgKCEqcykgeyAgICAgICAgICAgICAgICAgIC8q IE5vIG5hbWUgc28gc3Vic3RpdHV0ZSB0aGUgYWRkcmVzcyAqLwotICAgICAgICAgICAgICAgIGRl YnVnKEYxMDAsImh0dHBfb3BlbiBob3N0LT5oX25hbWUgaXMgZW1wdHkiLCIiLDApOwotICAgICAg ICAgICAgICAgIHMgPSBpbmV0X250b2Eocl9hZGRyLnNpbl9hZGRyKTsgLyogQ29udmVydCBhZGRy ZXNzIHRvIHN0cmluZyAqLwotICAgICAgICAgICAgICAgIGlmICghcykgICAgICAgICAgICAgICAg IC8qIFRydXN0IE5vIDEgKi8KLSAgICAgICAgICAgICAgICAgIHMgPSAiIjsKLSAgICAgICAgICAg ICAgICBpZiAoKnMpIHsgICAgICAgICAgICAgICAvKiBJZiBpdCB3b3JrZWQsIHVzZSB0aGlzIHN0 cmluZyAqLwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoaHR0cF9pcCxzLDIwKTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcyA9IGh0dHBfaXA7ICAgICAgICAgICAg IC8qIE90aGVyd2lzZSBzdGljayB3aXRoIHRoZSBJUCAqLwotICAgICAgICAgICAgICAgIGlmICgh KnMpICAgICAgICAgICAgICAgICAvKiBvciBmYWlsaW5nIHRoYXQgKi8KLSAgICAgICAgICAgICAg ICAgIHMgPSBodHRwX2hvc3RfcG9ydDsgICAgLyogdGhlIG5hbWUgd2Ugd2VyZSBjYWxsZWQgd2l0 aC4gKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgqcykgICAgICAgICAgICAgICAg ICAgICAvKiByZXR1cm4gdGhlIHJkbnMgbmFtZSAqLwotICAgICAgICAgICAgICAgIGNrbWFrbXNn KHJkbnNfbmFtZSxyZG5zX2xlbixzLCI6IixzdmNuYW1lLE5VTEwpOwotCi0gICAgICAgICAgICBp ZiAoIXF1aWV0ICYmICpzCi0jaWZuZGVmIE5PSUNQCi0gICAgICAgICAgICAgICAgJiYgIWRvY29u eAotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAg ICAgcHJpbnRmKCIgJXMgY29ubmVjdGVkIG9uIHBvcnQgJXNcbiIscywKLSAgICAgICAgICAgICAg ICAgICAgICAgY2t1aXRvYShudG9ocyhzZXJ2aWNlLT5zX3BvcnQpKSk7Ci0jaWZkZWYgQkVUQURF QlVHCi0gICAgICAgICAgICAgICAgLyogVGhpcyBpcyBzaW1wbHkgZm9yIHRlc3RpbmcgdGhlIERO UyBlbnRyaWVzICovCi0gICAgICAgICAgICAgICAgaWYgKGhvc3QtPmhfYWxpYXNlcykgewotICAg ICAgICAgICAgICAgICAgICBjaGFyICoqIGEgPSBob3N0LT5oX2FsaWFzZXM7Ci0gICAgICAgICAg ICAgICAgICAgIHdoaWxlICgqYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIg YWxpYXMgPT4gJXNcbiIsKmEpOwotICAgICAgICAgICAgICAgICAgICAgICAgYSsrOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIEJFVEFERUJVRyAq LwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFxdWll dCkgcHJpbnRmKCJGYWlsZWQuXG4iKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXF1aWV0 KSBwcmludGYoIihPSylcbiIpOwotICAgIGlmICghcXVpZXQpIGZmbHVzaChzdGRvdXQpOwotCi0K LSAgICBpZiAoIHRjcF9odHRwX3Byb3h5ICkgewotICAgICAgICAvKiBFcmFzZSB0aGUgSVAgYWRk cmVzcyBzaW5jZSB3ZSBjYW5ub3QgcmV1c2UgaXQgKi8KLSAgICAgICAgaHR0cF9pcFswXSA9ICdc MCc7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogVGhpcyBzaG91bGQgYWxyZWFkeSBoYXZlIGJl ZW4gZG9uZSBidXQganVzdCBpbiBjYXNlICovCi0gICAgICAgIGNrc3RybmNweShodHRwX2lwLChj aGFyICopaW5ldF9udG9hKHJfYWRkci5zaW5fYWRkciksMjApOwotICAgIH0KLSAgICBtYWtlc3Ry KCZodHRwX2FnZW50LGFnZW50KTsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmICh1c2Vfc3NsICYm IGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSkgewotICAgICAgICBpZiAoIXNzbF9odHRwX2luaXQo aG9zdG5hbWUpKSB7Ci0gICAgICAgICAgICBpZiAoYmlvX2VyciE9TlVMTCkgewotICAgICAgICAg ICAgICAgIEJJT19wcmludGYoYmlvX2Vyciwic3NsX3RuX2luaXQoKSBmYWlsZWRcbiIpOwotICAg ICAgICAgICAgICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0gICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOwotICAgICAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCJzc2xfdG5faW5pdCgpIGZhaWxlZFxuIik7Ci0gICAgICAgICAgICAgICAg RVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg aHR0cF9jbG9zZSgpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfSBlbHNlIGlm ICggY2tfc3NsX2h0dHBfY2xpZW50KGh0dHBmZCxob3N0bmFtZSkgPCAwICkgewotICAgICAgICAg ICAgaHR0cF9jbG9zZSgpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAg IH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotICAgIHJl dHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbmUuICovCi19Ci0KLWludAot I2lmZGVmIENLX0FOU0lDCi1odHRwX2Nsb3NlKFZPSUQpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwot aHR0cF9jbG9zZSgpCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpbnQgeCA9IDA7Ci0g ICAgZGVidWcoRjEwMSwiaHR0cF9jbG9zZSIsIiIsaHR0cGZkKTsKLQotI2lmZGVmIEhUVFBfQlVG RkVSSU5HCi0gICAgaHR0cF9jb3VudCA9IDA7Ci0gICAgaHR0cF9idWZwID0gMDsKLSNlbmRpZgkv KiBIVFRQX0JVRkZFUklORyAqLwotCi0gICAgaWYgKGh0dHBmZCA9PSAtMSkgICAgICAgICAgICAg ICAgICAgIC8qIFdhcyBvcGVuPyAqLwotICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFdhc24ndC4gKi8KLQotI2lmbmRlZiBPUzIKLSAgICBpZiAoaHR0cGZkID4gLTEp ICAgICAgICAgICAgICAgICAgICAgLyogV2FzLiAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAg ewotI2lmZGVmIENLX1NTTAotICAgICAgICAgIGlmICh0bHNfaHR0cF9hY3RpdmVfZmxhZykgewot ICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgQklPX3By aW50ZihiaW9fZXJyLCJjYWxsaW5nIFNTTF9zaHV0ZG93blxuIik7Ci0gICAgICAgICAgICAgIFNT TF9zaHV0ZG93bih0bHNfaHR0cF9jb24pOwotICAgICAgICAgICAgICB0bHNfaHR0cF9hY3RpdmVf ZmxhZyA9IDA7Ci0gICAgICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIFRDUElQ TElCCi0gICAgICAgICAgeCA9IHNvY2tldF9jbG9zZShodHRwZmQpOyAgICAgIC8qIENsb3NlIGl0 LiAqLwotI2Vsc2UKLSNpZm5kZWYgT1MyCi0gICAgICAgICAgeCA9IGNsb3NlKGh0dHBmZCk7Ci0j ZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICAgIH0KLSAgICBodHRw ZmQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hcmsgaXQgYXMgY2xvc2VkLiAq LwotICAgIC8qIGRvIG5vdCBlcmFzZSBodHRwX2hvc3RfcG9ydCwgaHR0cF9pcCwgaHR0cF9wb3J0 IHNvIHRoZXkgKi8KLSAgICAvKiBjYW4gYmUgdXNlZCBieSBodHRwX3Jlb3BlbigpICovCi0gICAg cmV0dXJuKHgpOwotfQotCi0KLS8qIGh0dHBfdG9sKCkKLSAqIENhbGwgd2l0aCBzID0gcG9pbnRl ciB0byBzdHJpbmcsIG4gPSBsZW5ndGguCi0gKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyBhY3R1 YWxseSB3cml0dGVuIG9uIHN1Y2Nlc3MsIG9yCi0gKiAtMSBvbiBpL28gZXJyb3IsIC0yIGlmIGNh bGxlZCBpbXByb3Blcmx5LgotICovCi0KLWludAotaHR0cF90b2wocyxuKSBDSEFSICpzOyBpbnQg bjsgewotICAgIGludCBjb3VudCA9IDA7Ci0gICAgaW50IGxlbiA9IG47Ci0gICAgaW50IHRyeSA9 IDA7Ci0KLSAgICBpZiAoaHR0cGZkID09IC0xKSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsImh0dHBf dG9sIHNvY2tldCBpcyBjbG9zZWQiLCIiLDApOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQot ICAgIGRlYnVnKEYxMDEsImh0dHBfdG9sIFRDUElQTElCIHR0bmV0IiwiIix0dG5ldCk7Ci0jaWZk ZWYgQ09NTUVOVAotICAgIGNraGV4ZHVtcCgiaHR0cF90b2wiLHMsbik7Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKHRsc19odHRwX2FjdGl2ZV9mbGFnKSB7 Ci0gICAgICAgIGludCBlcnJvciwgcjsKLSAgICAgICAgLyogV3JpdGUgdXNpbmcgU1NMICovCi0g ICAgICBzc2xfcmV0cnk6Ci0gICAgICAgICAgciA9IFNTTF93cml0ZSh0bHNfaHR0cF9jb24sIHMs IGxlbiAvKiA+MTAyND8xMDI0OmxlbiAqLyk7Ci0gICAgICAgIHN3aXRjaCAoU1NMX2dldF9lcnJv cih0bHNfaHR0cF9jb24scikpIHsKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgotICAg ICAgICAgICAgZGVidWcoRjExMSwiaHR0cF90b2wiLCJTU0xfd3JpdGUiLHIpOwotICAgICAgICAg ICAgaWYgKCByID09IGxlbiApCi0gICAgICAgICAgICAgICAgcmV0dXJuKG4pOwotICAgICAgICAg ICAgIHMgKz0gcjsKLSAgICAgICAgICAgICBsZW4gLT0gcjsKLSAgICAgICAgICAgICBnb3RvIHNz bF9yZXRyeTsKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotICAgICAgICAg ICAgZGVidWcoRjEwMCwiaHR0cF90b2wgU1NMX0VSUk9SX1dBTlRfV1JJVEUiLCIiLDApOwotCSAg ICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAg ICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF90b2wgU1NMX0VSUk9SX1dBTlRfUkVBRCIsIiIsMCk7 Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NB TEw6Ci0gICAgICAgICAgICAgIGlmICggciA9PSAwICkgeyAvKiBFT0YgKi8KLSAgICAgICAgICAg ICAgICAgIGh0dHBfY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAg ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBpbnQgcmMgPSAtMTsKLSNpZmRl ZiBOVAotICAgICAgICAgICAgICAgICAgaW50IGdsZSA9IEdldExhc3RFcnJvcigpOwotICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMSwiaHR0cF90b2wgU1NMX0VSUk9SX1NZU0NBTEwiLAotICAg ICAgICAgICAgICAgICAgICAgICAgICJHZXRMYXN0RXJyb3IoKSIsZ2xlKTsKLSAgICAgICAgICAg ICAgICAgIHJjID0gb3Myc29ja2V0ZXJyb3IoZ2xlKTsKLSAgICAgICAgICAgICAgICAgIGlmIChy YyA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICByYyA9IC0yOwotICAgICAgICAgICAgICAg ICAgZWxzZSBpZiAoIHJjID09IC0yICkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7 Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAgICAgICAgIHJldHVybihyYyk7Ci0gICAgICAg ICAgICAgIH0KLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgotICAg ICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF90b2wgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVAi LCIiLDApOwotICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwotICAgICAgICAgICAgcmV0dXJuKC0y KTsKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAw LCJodHRwX3RvbCBTU0xfRVJST1JfU1NMIiwiIiwwKTsKLSAgICAgICAgICAgIGh0dHBfY2xvc2Uo KTsKLSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfWkVS T19SRVRVUk46Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX3RvbCBTU0xfRVJST1JfWkVS T19SRVRVUk4iLCIiLDApOwotICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwotICAgICAgICAgICAg cmV0dXJuKC0yKTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZGVidWcoRjEwMCwi aHR0cF90b2wgU1NMX0VSUk9SXz8/Pz8/IiwiIiwwKTsKLSAgICAgICAgICAgIGh0dHBfY2xvc2Uo KTsKLSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyog Q0tfU1NMICovCi0KLSAgaHR0cF90b2xfcmV0cnk6Ci0gICAgdHJ5Kys7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogSW5jcmVhc2UgdGhlIHRyeSBjb3VudGVyICovCi0KLSAgICB7Ci0j aWZkZWYgQlNEU0VMRUNUCi0gICAgICAgIGZkX3NldCB3ZmRzOwotICAgICAgICBzdHJ1Y3QgdGlt ZXZhbCB0djsKLQotICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX3RvbCBCU0RTRUxFQ1QiLCIiLDAp OwotICAgICAgICB0di50dl91c2VjID0gMEw7Ci0gICAgICAgIHR2LnR2X3NlYz0zMDsKLSNpZmRl ZiBOVAotICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAxOwotI2VuZGlmIC8qIE5UICovCi0jaWZk ZWYgU1RSRUFNSU5HCi0gICAgICBkb19zZWxlY3Q6Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0g ICAgICAgIEZEX1pFUk8oJndmZHMpOwotICAgICAgICBGRF9TRVQoaHR0cGZkLCAmd2Zkcyk7Ci0g ICAgICAgIGlmIChzZWxlY3QoRkRfU0VUU0laRSwgTlVMTCwKLSNpZmRlZiBfX0RFQ0MKLSNpZm5k ZWYgX19ERUNDX1ZFUgotICAgICAgICAgICAgICAgICAgICAoaW50ICopCi0jZW5kaWYgLyogX19E RUNDX1ZFUiAqLwotI2VuZGlmIC8qIF9fREVDQyAqLwotICAgICAgICAgICAgICAgICAgICZ3ZmRz LCBOVUxMLCAmdHYpIDwgMCkgewotICAgICAgICAgICAgaW50IHNfZXJybm8gPSBzb2NrZXRfZXJy bm87Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX3RvbCBzZWxlY3QgZmFpbGVkIiwiIixz X2Vycm5vKTsKLSNpZmRlZiBCRVRBREVCVUcKLSAgICAgICAgICAgIHByaW50ZigiaHR0cF90b2wg c2VsZWN0IGZhaWxlZDogJWRcbiIsIHNfZXJybm8pOwotI2VuZGlmIC8qIEJFVEFERUJVRyAqLwot I2lmZGVmIE5UCi0gICAgICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAwOwotICAgICAgICAgICAg aWYgKCF3aW45NXNlbGVjdGJ1ZykKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgICByZXR1 cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghRkRfSVNTRVQoaHR0cGZkLCAmd2Zkcykp IHsKLSNpZmRlZiBTVFJFQU1JTkcKLSAgICAgICAgICAgIGlmIChzdHJlYW1pbmcpCi0gICAgICAg ICAgICAgIGdvdG8gZG9fc2VsZWN0OwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotICAgICAgICAg ICAgZGVidWcoRjExMSwiaHR0cF90b2wiLCIhRkRfSVNTRVQiLHR0eWZkKTsKLSNpZmRlZiBOVAot ICAgICAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKLSAgICAgICAgICAgIGlmICghd2luOTVz ZWxlY3RidWcpCi0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICAgICAgfQotI2lmZGVmIE5UCi0gICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDA7Ci0jZW5kaWYg LyogTlQgKi8KLSNlbHNlIC8qIEJTRFNFTEVDVCAqLwotI2lmZGVmIElCTVNFTEVDVAotICAgICAg ICB7Ci0gICAgICAgICAgICBpbnQgdHJpZXMgPSAwOwotICAgICAgICAgICAgZGVidWcoRjEwMSwi aHR0cF90b2wgSUJNU0VMRUNUIiwiIiwwKTsKLSAgICAgICAgICAgIHdoaWxlIChzZWxlY3QoJmh0 dHBmZCwgMCwgMSwgMCwgMTAwMCkgIT0gMSkgewotICAgICAgICAgICAgICAgIGludCBjb3VudDsK LSAgICAgICAgICAgICAgICBpZiAodHJpZXMrKyA+PSA2MCkgewotICAgICAgICAgICAgICAgICAg ICAvKiBpZiBhZnRlciA2MCBzZWNvbmRzIHdlIGNhbid0IGdldCBwZXJtaXNzaW9uIHRvIHdyaXRl ICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfdG9sIHNlbGVjdCBmYWls ZWQiLCIiLHNvY2tldF9lcnJubyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgICAgICAgICAgfQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgICBpZiAoKGNv dW50ID0gaHR0cF90Y2hrKCkpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJodHRwX3RvbCIsImh0dHBfdGNoaygpIixjb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIHJl dHVybihjb3VudCk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIElCTVNFTEVDVCAqLwotI2VuZGlmIC8q IEJTRFNFTEVDVCAqLwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgIGlmICgoY291bnQgPSBzb2Nr ZXRfd3JpdGUoaHR0cGZkLHMsbikpIDwgMCkgewotICAgICAgICAgICAgaW50IHNfZXJybm8gPSBz b2NrZXRfZXJybm87IC8qIG1heWJlIGEgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgIGRlYnVnKEYx MDEsImh0dHBfdG9sIHNvY2tldF93cml0ZSBlcnJvciIsIiIsc19lcnJubyk7Ci0jaWZkZWYgT1My Ci0gICAgICAgICAgICBpZiAob3Myc29ja2V0ZXJyb3Ioc19lcnJubykgPCAwKQotICAgICAgICAg ICAgICByZXR1cm4oLTIpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgcmV0dXJuKC0x KTsgICAgICAgICAgICAgICAgIC8qIENhbGwgaXQgYW4gaS9vIGVycm9yICovCi0gICAgICAgIH0K LSNlbHNlIC8qIFRDUElQTElCICovCi0gICAgICAgIGlmICgoY291bnQgPSB3cml0ZShodHRwZmQs cyxuKSkgPCAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX3RvbCBzb2NrZXRfd3Jp dGUgZXJyb3IiLCIiLGVycm5vKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAg ICAgICAvKiBDYWxsIGl0IGFuIGkvbyBlcnJvciAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogVENQ SVBMSUIgKi8KLSAgICAgICAgaWYgKGNvdW50IDwgbikgewotICAgICAgICAgICAgZGVidWcoRjEx MSwiaHR0cF90b2wgc29ja2V0X3dyaXRlIixzLGNvdW50KTsKLSAgICAgICAgICAgIGlmICh0cnkg PiAyNSkgewotICAgICAgICAgICAgICAgIC8qIGRvbid0IHRyeSBtb3JlIHRoYW4gMjUgdGltZXMg Ki8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX3RvbCB0cmllZCBtb3JlIHRoYW4g MjUgdGltZXMiLCIiLDApOwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcyArPSBj b3VudDsKLSAgICAgICAgICAgICAgICBuIC09IGNvdW50OwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgZGVidWcoRjExMSwiaHR0cF90b2wgcmV0cnkiLHMsbik7Ci0gICAgICAgICAgICBnb3Rv IGh0dHBfdG9sX3JldHJ5OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVidWcoRjEx MSwiaHR0cF90b2wgc29ja2V0X3dyaXRlIixzLGNvdW50KTsKLSAgICAgICAgICAgIHJldHVybihs ZW4pOyAvKiBzdWNjZXNzIC0gcmV0dXJuIHRvdGFsIGxlbmd0aCAqLwotICAgICAgICB9Ci0gICAg fQotfQotCi1pbnQKLWh0dHBfaW5jKHRpbW8pIGludCB0aW1vOyB7Ci0gICAgaW50IHg9LTE7IHVu c2lnbmVkIGNoYXIgYzsgICAgICAgICAgICAgLyogVGhlIGxvY2Fscy4gKi8KLQotICAgIGlmICho dHRwZmQgPT0gLTEpIHsKLSNpZmRlZiBIVFRQX0JVRkZFUklORwotCWh0dHBfY291bnQgPSAwOwot ICAJaHR0cF9idWZwID0gMDsKLSNlbmRpZgkvKiBIVFRQX0JVRkZFUklORyAqLwotICAgICAgICBk ZWJ1ZyhGMTAwLCJodHRwX2luYyBzb2NrZXQgaXMgY2xvc2VkIiwiIiwwKTsKLSAgICAgICAgcmV0 dXJuKC0yKTsKLSAgICB9Ci0KLSNpZmRlZiBDS19TU0wKLSAgICAvKgotICAgICAqIEluIHRoZSBj YXNlIG9mIE9wZW5TU0wsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgc3RpbGwKLSAgICAg KiBkYXRhIHdhaXRpbmcgaW4gdGhlIFNTTCBzZXNzaW9uIGJ1ZmZlcnMgdGhhdCBoYXMgbm90IHll dAotICAgICAqIGJlZW4gcmVhZCBieSBLZXJtaXQuICBJZiB0aGlzIGlzIHRoZSBjYXNlIHdlIG11 c3QgcHJvY2VzcwotICAgICAqIGl0IHdpdGhvdXQgY2FsbGluZyBzZWxlY3QoKSBiZWNhdXNlIHNl bGVjdCgpIHdpbGwgbm90IHJldHVybgotICAgICAqIHdpdGggYW4gaW5kaWNhdGlvbiB0aGF0IHRo ZXJlIGlzIGRhdGEgdG8gYmUgcmVhZCBmcm9tIHRoZQotICAgICAqIHNvY2tldC4gIElmIHRoZXJl IGlzIG5vIGRhdGEgcGVuZGluZyBpbiB0aGUgU1NMIHNlc3Npb24KLSAgICAgKiBidWZmZXJzIHRo ZW4gZmFsbCB0aHJvdWdoIHRvIHRoZSBzZWxlY3QoKSBjb2RlIGFuZCB3YWl0IGZvcgotICAgICAq IHNvbWUgZGF0YSB0byBhcnJpdmUuCi0gICAgICovCi0gICAgaWYgKHRsc19odHRwX2FjdGl2ZV9m bGFnKSB7Ci0gICAgICAgIGludCBlcnJvcjsKLQotICAgICAgICB4ID0gU1NMX3BlbmRpbmcodGxz X2h0dHBfY29uKTsKLSAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEx LCJodHRwX2luYyIsIlNTTF9wZW5kaW5nIGVycm9yIix4KTsKLSAgICAgICAgICAgIGh0dHBfY2xv c2UoKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIHggPiAw ICkgewotCSAgc3NsX3JlYWQ6Ci0gICAgICAgICAgICB4ID0gU1NMX3JlYWQodGxzX2h0dHBfY29u LCAmYywgMSk7Ci0gICAgICAgICAgICBlcnJvciA9IFNTTF9nZXRfZXJyb3IodGxzX2h0dHBfY29u LHgpOwotICAgICAgICAgICAgc3dpdGNoIChlcnJvcikgewotICAgICAgICAgICAgY2FzZSBTU0xf RVJST1JfTk9ORToKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJodHRwX2luYyBTU0xfRVJS T1JfTk9ORSIsIngiLHgpOwotICAgICAgICAgICAgICAgIGlmICh4ID4gMCkgewotI2lmZGVmIE9T MgotICAgICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9T MiAqLwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oYyk7ICAgICAgICAgIC8qIFJldHVybiBj aGFyYWN0ZXIuICovCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4IDwgMCkgewotI2lmZGVm IE9TMgotICAgICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKLSNpZmRlZiBPUzIK LSAgICAgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotICAgICAgICAgICAgICAgIGRl YnVnKEYxMDAsImh0dHBfaW5jIFNTTF9FUlJPUl9XQU5UX1dSSVRFIiwiIiwwKTsKLSNpZmRlZiBP UzIKLSAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAq LwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICBjYXNlIFNTTF9FUlJP Ul9XQU5UX1JFQUQ6Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF9pbmMgU1NMX0VS Uk9SX1dBTlRfUkVBRCIsIiIsMCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgUmVsZWFz ZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4o LTEpOwotICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKLSAgICAgICAgICAgICAg ICBpZiAoIHggPT0gMCApIHsgLyogRU9GICovCi0gICAgICAgICAgICAgICAgICAgIGh0dHBfY2xv c2UoKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgo KTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAg ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgcmMgPSAtMTsK LSNpZmRlZiBOVAotICAgICAgICAgICAgICAgICAgICBpbnQgZ2xlID0gR2V0TGFzdEVycm9yKCk7 Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImh0dHBfaW5jIFNTTF9FUlJPUl9TWVND QUxMIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJHZXRMYXN0RXJyb3IoKSIsZ2xlKTsK LSAgICAgICAgICAgICAgICAgICAgcmMgPSBvczJzb2NrZXRlcnJvcihnbGUpOwotICAgICAgICAg ICAgICAgICAgICBpZiAocmMgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICByYyA9IC0y OwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggcmMgPT0gLTIgKQotICAgICAgICAgICAg ICAgICAgICAgICAgcmMgPSAtMTsKLSNlbmRpZiAvKiBOVCAqLwotI2lmZGVmIE9TMgotICAgICAg ICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAg ICAgICAgICAgICAgICAgICByZXR1cm4ocmMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6Ci0gICAgICAgICAgICAgICAgZGVi dWcoRjEwMCwiaHR0cF9pbmMgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVAiLCIiLDApOwotICAg ICAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICBS ZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIHJl dHVybigtMik7Ci0gICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6Ci0gICAgICAgICAgICAg ICAgZGVidWcoRjEwMCwiaHR0cF9pbmMgU1NMX0VSUk9SX1NTTCIsIiIsMCk7Ci0jaWZkZWYgQ09N TUVOVAotICAgICAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICAgICAgY2Fz ZSBTU0xfRVJST1JfWkVST19SRVRVUk46Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0 cF9pbmMgU1NMX0VSUk9SX1pFUk9fUkVUVVJOIiwiIiwwKTsKLSAgICAgICAgICAgICAgICBodHRw X2Nsb3NlKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgo KTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAg ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX2luYyBTU0xf RVJST1JfPz8/Pz8iLCIiLDApOwotICAgICAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKLSNpZmRl ZiBPUzIKLSAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9T MiAqLwotICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSNpZmRlZiBIVFRQX0JVRkZFUklORwot ICAgIC8qIFNraXAgYWxsIHRoZSBzZWxlY3QoKSBzdHVmZiBpZiB3ZSBoYXZlIGJ5dGVzIGJ1ZmZl cmVkIGxvY2FsbHkgKi8KLSAgICBpZiAoaHR0cF9jb3VudCA+IDApCi0gICAgICBnb3RvIGdldGZy b21idWZmZXI7Ci0jZW5kaWYJLyogSFRUUF9CVUZGRVJJTkcgKi8KLQotICAgIHsKLSNpZmRlZiBC U0RTRUxFQ1QKLSAgICAgICAgZmRfc2V0IHJmZHM7Ci0gICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2 OwotICAgICAgICBpbnQgdGltZW91dCA9IHRpbW8gPCAwID8gLXRpbW8gOiAxMDAwICogdGltbzsK LSAgICAgICAgZGVidWcoRjEwMSwiaHR0cF9pbmMgQlNEU0VMRUNUIiwiIix0aW1vKTsKLQotICAg ICAgICBmb3IgKCA7IHRpbWVvdXQgPj0gMDsgdGltZW91dCAtPSAodGltbyA/IDEwMCA6IDApKSB7 Ci0gICAgICAgICAgICBpbnQgcmM7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJodHRwX2luYyIs InRpbWVvdXQiLHRpbWVvdXQpOwotICAgICAgICAgICAgLyogRG9uJ3QgbW92ZSBzZWxlY3QoKSBp bml0aWFsaXphdGlvbiBvdXQgb2YgdGhlIGxvb3AuICovCi0gICAgICAgICAgICBGRF9aRVJPKCZy ZmRzKTsKLSAgICAgICAgICAgIEZEX1NFVChodHRwZmQsICZyZmRzKTsKLSAgICAgICAgICAgIHR2 LnR2X3NlYyAgPSB0di50dl91c2VjID0gMEw7Ci0gICAgICAgICAgICBpZiAodGltbykKLSAgICAg ICAgICAgICAgICB0di50dl91c2VjID0gKGxvbmcpIDEwMDAwMEw7Ci0gICAgICAgICAgICBlbHNl Ci0gICAgICAgICAgICAgICAgdHYudHZfc2VjID0gMzA7Ci0jaWZkZWYgTlQKLSAgICAgICAgICAg IFdTQVNhZmVUb0NhbmNlbCA9IDE7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAgIHJjID0g c2VsZWN0KEZEX1NFVFNJWkUsCi0jaWZuZGVmIF9fREVDQwotICAgICAgICAgICAgICAgICAgICAg ICAgIChmZF9zZXQgKikKLSNlbmRpZiAvKiBfX0RFQ0MgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgICAmcmZkcywgTlVMTCwgTlVMTCwgJnR2KTsKLSAgICAgICAgICAgIGlmIChyYyA8IDApIHsK LSAgICAgICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsKLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJodHRwX2luYyIsInNlbGVjdCIscmMpOwotICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsImh0dHBfaW5jIiwic29ja2V0X2Vycm5vIixzX2Vycm5vKTsKLSNpZmRlZiBI VFRQX0JVRkZFUklORwotCQlodHRwX2NvdW50ID0gMDsKLQkJaHR0cF9idWZwID0gMDsKLSNlbmRp ZgkvKiBIVFRQX0JVRkZFUklORyAqLwotICAgICAgICAgICAgICAgIGlmIChzX2Vycm5vKQotICAg ICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg ZGVidWcoRjExMSwiaHR0cF9pbmMiLCJzZWxlY3QiLHJjKTsKLSNpZmRlZiBOVAotICAgICAgICAg ICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgaWYg KEZEX0lTU0VUKGh0dHBmZCwgJnJmZHMpKSB7Ci0gICAgICAgICAgICAgICAgeCA9IDA7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg IC8qIElmIHdhaXRpbmcgZm9yZXZlciB3ZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nIGlmIHRoZSAq LwotICAgICAgICAgICAgICAgIC8qIHNvY2tldCBjbG9zZWQgc28gdHJ5IHdyaXRpbmcgYSAwLWxl bmd0aCBUQ1AgcGFja2V0ICAqLwotICAgICAgICAgICAgICAgIC8qIHdoaWNoIHNob3VsZCBmb3Jj ZSBhbiBlcnJvciBpZiB0aGUgc29ja2V0IGlzIGNsb3NlZCAqLwotICAgICAgICAgICAgICAgIGlm ICghdGltbykgewotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAgICAgICAgICAgIGlmICgocmMg PSBzb2NrZXRfd3JpdGUoaHR0cGZkLCIiLDApKSA8IDApIHsKLSNpZmRlZiBIVFRQX0JVRkZFUklO RwotCQkJaHR0cF9jb3VudCA9IDA7Ci0JCQlodHRwX2J1ZnAgPSAwOwotI2VuZGlmCS8qIEhUVFBf QlVGRkVSSU5HICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tl dF9lcnJubzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfaW5jIHNv Y2tldF93cml0ZSBlcnJvciIsIiIsc19lcnJubyk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAg ICAgICAgICAgICBpZiAob3Myc29ja2V0ZXJyb3Ioc19lcnJubykgPCAwKQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4oLTEpOyAvKiBDYWxsIGl0IGFuIGkvbyBlcnJvciAqLwotICAg ICAgICAgICAgICAgICAgICB9Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgICAg ICAgICBpZiAoKHJjID0gd3JpdGUoaHR0cGZkLCIiLDApKSA8IDApIHsKLSNpZmRlZiBIVFRQX0JV RkZFUklORwotCQkJaHR0cF9jb3VudCA9IDA7Ci0JCQlodHRwX2J1ZnAgPSAwOwotI2VuZGlmCS8q IEhUVFBfQlVGRkVSSU5HICovCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJo dHRwX2luYyBzb2NrZXRfd3JpdGUgZXJyb3IiLCIiLGVycm5vKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybigtMSk7IC8qIENhbGwgaXQgYW4gaS9vIGVycm9yICovCi0gICAgICAgICAg ICAgICAgICAgIH0KLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmZGVm IE5UCi0gICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDA7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbHNl IC8qICFCU0RTRUxFQ1QgKi8KLSNpZmRlZiBJQk1TRUxFQ1QKLSAvKgotICBXYXMgdXNlZCBieSBP Uy8yLCBjdXJyZW50bHkgbm90IHVzZWQsIGJ1dCBtaWdodCBjb21lIGluIGhhbmR5IHNvbWUgZGF5 Li4uCi0gIC4uLiBhbmQgaXQgY2FtZSBpbiBoYW5keSEgIEZvciBvdXIgVENQL0lQIGxheWVyLCBp dCBhdm9pZHMgYWxsIHRoZSBmZF9zZXQKLSAgYW5kIHRpbWV2YWwgc3R1ZmYgc2luY2UgdGhpcyBp cyB0aGUgb25seSBwbGFjZSB3aGVyZSBpdCBpcyB1c2VkLgotICovCi0gICAgICAgIGludCBzb2Nr ZXQgPSBodHRwZmQ7Ci0gICAgICAgIGludCB0aW1lb3V0ID0gdGltbyA8IDAgPyAtdGltbyA6IDEw MDAgKiB0aW1vOwotCi0gICAgICAgIGRlYnVnKEYxMDEsImh0dHBfaW5jIElCTVNFTEVDVCIsIiIs dGltbyk7Ci0gICAgICAgIGZvciAoIDsgdGltZW91dCA+PSAwOyB0aW1lb3V0IC09ICh0aW1vID8g MTAwIDogMCkpIHsKLSAgICAgICAgICAgIGlmIChzZWxlY3QoJnNvY2tldCwgMSwgMCwgMCwgMTAw TCkgPT0gMSkgewotICAgICAgICAgICAgICAgIHggPSAwOwotICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZWxzZSAvKiAhSUJNU0VMRUNUICovCi0gICAg ICAgIFNFTEVDVCBpcyByZXF1aXJlZCBmb3IgdGhpcyBjb2RlCi0jZW5kaWYgLyogSUJNU0VMRUNU ICovCi0jZW5kaWYgLyogQlNEU0VMRUNUICovCi0gICAgfQotCi0gICAgaWYgKHRpbW8gJiYgeCA8 IDApIHsgICAgICAgIC8qIHNlbGVjdCgpIHRpbWVkIG91dCAqLwotI2lmZGVmIEhUVFBfQlVGRkVS SU5HCi0JaHR0cF9jb3VudCA9IDA7Ci0JaHR0cF9idWZwID0gMDsKLSNlbmRpZgkvKiBIVFRQX0JV RkZFUklORyAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX2luYyBzZWxlY3QoKSB0aW1lZCBv dXQiLCIiLDApOwotICAgICAgICByZXR1cm4oLTEpOyAvKiBDYWxsIGl0IGFuIGkvbyBlcnJvciAq LwotICAgIH0KLQotI2lmZGVmIENLX1NTTAotICAgICAgICBpZiAoIHRsc19odHRwX2FjdGl2ZV9m bGFnICkgewotICAgICAgICAgICAgaW50IGVycm9yOwotCSAgc3NsX3JlYWQyOgotICAgICAgICAg ICAgeCA9IFNTTF9yZWFkKHRsc19odHRwX2NvbiwgJmMsIDEpOwotICAgICAgICAgICAgZXJyb3Ig PSBTU0xfZ2V0X2Vycm9yKHRsc19odHRwX2Nvbix4KTsKLSAgICAgICAgICAgIHN3aXRjaCAoZXJy b3IpIHsKLSAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6Ci0gICAgICAgICAgICAgICAg ZGVidWcoRjExMSwiaHR0cF9pbmMgU1NMX0VSUk9SX05PTkUiLCJ4Iix4KTsKLSAgICAgICAgICAg ICAgICBpZiAoeCA+IDApIHsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgUmVsZWFz ZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKGMpOyAgICAgICAgICAvKiBSZXR1cm4gY2hhcmFjdGVyLiAqLwotICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoeCA8IDApIHsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgUmVs ZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAg cmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg ICBodHRwX2Nsb3NlKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgIFJlbGVhc2VU Q1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICAgIHJldHVy bigtMik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FO VF9XUklURToKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX2luYyBTU0xfRVJST1Jf V0FOVF9XUklURSIsIiIsMCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgUmVsZWFzZVRD UElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4oLTEp OwotICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAgICAgICAgICAgICAg IGRlYnVnKEYxMDAsImh0dHBfaW5jIFNTTF9FUlJPUl9XQU5UX1JFQUQiLCIiLDApOwotI2lmZGVm IE9TMgotICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1My ICovCi0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIGNhc2UgU1NMX0VS Uk9SX1NZU0NBTEw6Ci0gICAgICAgICAgICAgICAgaWYgKCB4ID09IDAgKSB7IC8qIEVPRiAqLwot ICAgICAgICAgICAgICAgICAgICBodHRwX2Nsb3NlKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAg ICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAg ICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICAgICAgICAgaW50IHJjID0gLTE7Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgICAgICAg ICAgaW50IGdsZSA9IEdldExhc3RFcnJvcigpOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTExLCJodHRwX2luYyBTU0xfRVJST1JfU1lTQ0FMTCIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAiR2V0TGFzdEVycm9yKCkiLGdsZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gb3My c29ja2V0ZXJyb3IoZ2xlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJjID09IC0xKQotICAg ICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBp ZiAoIHJjID09IC0yICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7Ci0jZW5kaWYg LyogTlQgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0 ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHJjKTsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlf TE9PS1VQOgotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfaW5jIFNTTF9FUlJPUl9X QU5UX1g1MDlfTE9PS1VQIiwiIiwwKTsKLSAgICAgICAgICAgICAgICBodHRwX2Nsb3NlKCk7Ci0j aWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAv KiBPUzIgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICAgICAgY2FzZSBT U0xfRVJST1JfU1NMOgotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfaW5jIFNTTF9F UlJPUl9TU0wiLCIiLDApOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgICBodHRwX2Ns b3NlKCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAg IFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAg cmV0dXJuKC0yKTsKLSAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfaW5jIFNTTF9FUlJPUl9aRVJPX1JFVFVSTiIs IiIsMCk7Ci0gICAgICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwotI2lmZGVmIE9TMgotICAgICAg ICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAg ICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg ICAgZGVidWcoRjEwMCwiaHR0cF9pbmMgU1NMX0VSUk9SXz8/Pz8/IiwiIiwwKTsKLSAgICAgICAg ICAgICAgICBodHRwX2Nsb3NlKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgUmVsZWFz ZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4o LTIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSNp ZmRlZiBIVFRQX0JVRkZFUklORwotLyoKLSAgQnVmZmVyaW5nIGNvZGUgYWRkZWQgYnkgZmRjIDE1 IERlYyAyMDA1IGZvciBub24tU1NMIGNhc2Ugb25seSBiZWNhdXNlIEhUVFAKLSAgR0VUcyB3ZXJl IG9yZGVycyBvZiBtYWduaXR1ZGUgdG9vIHNsb3cgZHVlIHRvIHRoZSBzaW5nbGUtYnl0ZSByZWFk KClzLiAgVGhlCi0gIGZpbGUtZGVzY3JpcHRvciBzd2FwcGluZyBpcyBwcmV0dHkgZ3Jvc3MsIGJ1 dCB0aGUgbW9yZSBlbGVnYW50IHNvbHV0aW9uCi0gIChjYWxsaW5nIGEgbmV0dGNoaygpIGxpa2Ug cm91dGluZSB3aXRoIHRoZSBmZCBhcyBhIHBhcmFtZXRlcikgZG9lc24ndCB3b3JrLAotICBiZWNh dXNlIG5ldHRjaGsoKSByZWxpZXMgb24gdG9vIG1hbnkgb3RoZXIgcm91dGluZXMgdGhhdCwgbGlr ZSBpdHNlbGYsIGFyZQotICBoYXJkd2lyZWQgZm9yIHR0eWZkLgotKi8KLSAgZ2V0ZnJvbWJ1ZmZl cjoKLQlpZiAoLS1odHRwX2NvdW50ID49IDApIHsKLQkgICAgYyA9IGh0dHBfaW5idWZbaHR0cF9i dWZwKytdOwotCSAgICB4ID0gMTsKLQl9IGVsc2UgewotCSAgICBpbnQgc2F2ZWZkOwotCSAgICBz YXZlZmQgPSB0dHlmZDsKLQkgICAgdHR5ZmQgPSBodHRwZmQ7Ci0JICAgIHggPSBuZXR0Y2hrKCk7 Ci0JICAgIHR0eWZkID0gc2F2ZWZkOwkJCi0JICAgIGRlYnVnKEYxMDEsImh0dHBfaW5jIG5ldHRj aGsiLCIiLHgpOwotCSAgICBpZiAoeCA+IEhUVFBfSU5CVUZMRU4pCi0JICAgICAgeCA9IEhUVFBf SU5CVUZMRU47Ci0jaWZkZWYgVENQSVBMSUIKLQkgICAgeCA9IHNvY2tldF9yZWFkKGh0dHBmZCxo dHRwX2luYnVmLHgpOwotI2Vsc2UgIC8qIE5vdCBUQ1BJUExJQiAqLwotCSAgICB4ID0gcmVhZCho dHRwZmQsaHR0cF9pbmJ1Zix4KTsKLSNlbmRpZgkvKiBUQ1BJUExJQiAqLwotCSAgICBodHRwX2Nv dW50ID0gMDsKLQkgICAgaHR0cF9idWZwID0gMDsKLQkgICAgaWYgKHggPiAwKSB7Ci0JCWMgPSBo dHRwX2luYnVmW2h0dHBfYnVmcCsrXTsKLQkJaHR0cF9jb3VudCA9IHggLSAxOwotCSAgICB9Ci0J fQotI2Vsc2UgIC8qIE5vdCBIVFRQX0JVRkZFUklORyAqLwotI2lmZGVmIFRDUElQTElCCi0gICAg ICAgIHggPSBzb2NrZXRfcmVhZChodHRwZmQsJmMsMSk7Ci0jZWxzZSAgLyogTm90IFRDUElQTElC ICovCi0gICAgICAgIHggPSByZWFkKGh0dHBmZCwmYywxKTsKLSNlbmRpZgkvKiBUQ1BJUExJQiAq LwotI2VuZGlmCS8qIEhUVFBfQlVGRkVSSU5HICovCi0KLSAgICAgICAgaWYgKHggPD0gMCkgewot ICAgICAgICAgICAgaW50IHNfZXJybm8gPSBzb2NrZXRfZXJybm87Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJ0dGJ1ZnIgc29ja2V0X3JlYWQiLCIiLHgpOwotICAgICAgICAgICAgZGVidWcoRjEw MSwidHRidWZyIHNvY2tldF9lcnJubyIsIiIsc19lcnJubyk7Ci0jaWZkZWYgT1MyCi0gICAgICAg ICAgICBpZiAoeCA9PSAwIHx8IG9zMnNvY2tldGVycm9yKHNfZXJybm8pIDwgMCkgewotICAgICAg ICAgICAgICAgIGh0dHBfY2xvc2UoKTsKLSAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRl eCgpOwotICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSNlbHNl IC8qIE9TMiAqLwotICAgICAgICAgICAgaHR0cF9jbG9zZSgpOyAgICAgICAgICAgICAgICAgICAg ICAvKiAqKiogKioqICovCi0gICAgICAgICAgICByZXR1cm4oLTIpOwotI2VuZGlmIC8qIE9TMiAq LwotICAgICAgICB9Ci0gICAgICAgIHJldHVybihjKTsKLX0KLQotdm9pZAotI2lmZGVmIENLX0FO U0lDCi1odHRwX3NldF9jb2RlX3JlcGx5KGNoYXIgKiBtc2cpCi0jZWxzZQotaHR0cF9zZXRfY29k ZV9yZXBseShtc2cpCi0gICAgY2hhciAqIG1zZzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewot ICAgIGNoYXIgKiBwID0gbXNnOwotICAgIGNoYXIgYnVmWzE2XTsKLSAgICBpbnQgaT0wOwotCi0g ICAgd2hpbGUgKCAqcCAhPSBTUCAmJiAqcCAhPSBOVUwgKSB7Ci0gICAgICAgIGJ1ZltpXSA9ICpw OwotICAgICAgICBwKys7Ci0gICAgICAgIGkrKzsKLSAgICB9Ci0KLSAgICBodHRwX2NvZGUgPSBh dG9pKGJ1Zik7Ci0KLSAgICB3aGlsZSAoICpwID09IFNQICkKLSAgICAgICAgcCsrOwotCi0gICAg Y2tzdHJuY3B5KGh0dHBfcmVwbHlfc3RyLHAsSFRUUEJVRkxFTik7Ci19Ci0KLWludAotI2lmZGVm IENLX0FOU0lDCi1odHRwX2dldChjaGFyICogYWdlbnQsIGNoYXIgKiogaGRybGlzdCwgY2hhciAq IHVzZXIsCi0gICAgICAgICBjaGFyICogcHdkLCBjaGFyIGFycmF5LCBjaGFyICogbG9jYWwsIGNo YXIgKiByZW1vdGUsCi0gICAgICAgICBpbnQgc3RkaW8pCi0jZWxzZQotaHR0cF9nZXQoYWdlbnQs IGhkcmxpc3QsIHVzZXIsIHB3ZCwgYXJyYXksIGxvY2FsLCByZW1vdGUsIHN0ZGlvKQotICAgIGNo YXIgKiBhZ2VudDsgY2hhciAqKiBoZHJsaXN0OyBjaGFyICogdXNlcjsKLSAgICBjaGFyICogcHdk OyBjaGFyIGFycmF5OyBjaGFyICogbG9jYWw7IGNoYXIgKiByZW1vdGU7Ci0gICAgaW50IHN0ZGlv OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgY2hhciAqIHJlcXVlc3QgPSBOVUxMOwot ICAgIGludCAgICBpLCBqLCBsZW4gPSAwLCBoZGNudCA9IDAsIHJjID0gMDsKLSAgICBpbnQgICAg Y2g7Ci0gICAgaW50ICAgIGh0dHBfZm5kID0gMDsKLSAgICBjaGFyICAgYnVmW0hUVFBCVUZMRU5d LCAqcDsKLSAgICBpbnQgICAgbnVsbGxpbmU7Ci0jaWZkZWYgT1MyCi0gICAgc3RydWN0IHV0aW1i dWYgdV90OwotI2Vsc2UgLyogT1MyICovCi0jaWZkZWYgU1lTVVRJTUVICi0gICAgc3RydWN0IHV0 aW1idWYgdV90OwotI2Vsc2UKLSAgICBzdHJ1Y3QgdXRpbWJ1ZiB7Ci0gICAgICAgIHRpbWVfdCBh dGltZTsKLSAgICAgICAgdGltZV90IG10aW1lOwotICAgIH0gdV90OwotI2VuZGlmIC8qIFNZU1VU SU1IICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgdGltZV90IG1vZF90ID0gMDsKLSAgICB0aW1l X3Qgc3J2X3QgPSAwOwotICAgIHRpbWVfdCBsb2NhbF90ID0gMDsKLSAgICBjaGFyIHBhc3N3ZFs2 NF07Ci0gICAgY2hhciBiNjRpblsxMjhdOwotICAgIGNoYXIgYjY0b3V0WzI1Nl07Ci0gICAgY2hh ciAqIGhlYWRlcnNbSFRUUEhFQURDTlRdOwotICAgIGludCBjbG9zZWNvbiA9IDA7Ci0gICAgaW50 IGNodW5rZWQgPSAwOwotICAgIGludCB6ZmlsZSA9IDA7Ci0gICAgaW50IGZpcnN0ID0gMTsKLQot I2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAgICAgICBkZWJ1ZyhGMTAxLCJodHRw X2dldCBodHRwZmQiLCIiLGh0dHBmZCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImh0dHBfYWdlbnQi LGFnZW50LDApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJodHRwX3VzZXIiLHVzZXIsMCk7Ci0gICAg ICAgIGRlYnVnKEYxMTAsImh0dHBfbG9jYWwiLGxvY2FsLDApOwotICAgICAgICBkZWJ1ZyhGMTEw LCJodHRwX3JlbW90ZSIscmVtb3RlLDApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAg IGlmICghcmVtb3RlKSByZW1vdGUgPSAiIjsKLQotICAgIGlmIChodHRwZmQgPT0gLTEpCi0gICAg ICByZXR1cm4oLTEpOwotCi0gICAgaWYgKGFycmF5KSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkg PCBIVFRQSEVBRENOVDsgaSsrKQotICAgICAgICAgIGhlYWRlcnNbaV0gPSBOVUxMOwotICAgIH0K LSAgICBsZW4gPSA4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHRVQgKi8KLSAgICBs ZW4gKz0gc3RybGVuKEhUVFBfVkVSU0lPTik7Ci0gICAgbGVuICs9IHN0cmxlbihyZW1vdGUpOwot ICAgIGxlbiArPSAxNjsKLQotICAgIGlmIChoZHJsaXN0KSB7Ci0gICAgICAgIGZvciAoaSA9IDA7 IGhkcmxpc3RbaV07IGkrKykKLSAgICAgICAgICAgIGxlbiArPSBzdHJsZW4oaGRybGlzdFtpXSkg KyAyOwotICAgIH0KLSAgICBsZW4gKz0gKGludCkgc3RybGVuKGh0dHBfaG9zdF9wb3J0KSArIDg7 Ci0KLSAgICBpZiAoYWdlbnQpCi0gICAgICBsZW4gKz0gMTMgKyBzdHJsZW4oYWdlbnQpOwotICAg IGlmICh1c2VyKSB7Ci0gICAgICAgIGlmICghcHdkKSB7Ci0gICAgICAgICAgICByZWFkcGFzcygi UGFzc3dvcmQ6ICIscGFzc3dkLDY0KTsKLSAgICAgICAgICAgIHB3ZCA9IHBhc3N3ZDsKLSAgICAg ICAgfQotICAgICAgICBja21ha21zZyhiNjRpbixzaXplb2YoYjY0aW4pLHVzZXIsIjoiLHB3ZCxO VUxMKTsKLSAgICAgICAgaiA9IGI4dG9iNjQoYjY0aW4sc3RybGVuKGI2NGluKSxiNjRvdXQsMjU2 KTsKLSAgICAgICAgbWVtc2V0KHB3ZCwwLHN0cmxlbihwd2QpKTsgICAgICAvKiBOT1QgUE9SVEFC TEUgKi8KLSAgICAgICAgaWYgKGogPCAwKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAg IGI2NG91dFtqXSA9ICdcMCc7Ci0gICAgICAgIGxlbiArPSBqICsgMjQ7Ci0gICAgfQotI2lmZGVm IEhUVFBfQ0xPU0UKLSAgICBsZW4gKz0gMTk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b25uZWN0aW9uOiBjbG9zZSAqLwotI2VuZGlmCi0gICAgbGVuICs9IDM7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogYmxhbmsgbGluZSArIG51bGwgKi8KLQotICAgIHJlcXVlc3QgPSBtYWxs b2MobGVuKTsKLSAgICBpZiAoIXJlcXVlc3QpCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgc3By aW50ZihyZXF1ZXN0LCJHRVQgJXMgJXNcclxuIixyZW1vdGUsSFRUUF9WRVJTSU9OKTsgICAgICAg Lyogc2FmZSAqLwotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJIb3N0OiAiLCBsZW4pOwotICAgIGNr c3RybmNhdChyZXF1ZXN0LGh0dHBfaG9zdF9wb3J0LCBsZW4pOwotICAgIGNrc3RybmNhdChyZXF1 ZXN0LCJcclxuIixsZW4pOwotICAgIGlmIChhZ2VudCkgewotICAgICAgICBja3N0cm5jYXQocmVx dWVzdCwiVXNlci1hZ2VudDogIixsZW4pOwotICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxhZ2Vu dCxsZW4pOwotICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICB9Ci0g ICAgaWYgKHVzZXIpIHsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkF1dGhvcml6YXRpb246 IEJhc2ljICIsbGVuKTsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsYjY0b3V0LGxlbik7Ci0g ICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwotICAgIH0KLSAgICBpZiAoIGhk cmxpc3QgKSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGhkcmxpc3RbaV07IGkrKykgewotICAgICAg ICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsaGRybGlzdFtpXSxsZW4pOwotICAgICAgICAgICAgY2tz dHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWZkZWYgSFRU UF9DTE9TRQotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJDb25uZWN0aW9uOiBjbG9zZVxyXG4iLGxl bik7Ci0jZW5kaWYKLSAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLQotICBnZXRy ZXE6Ci0gICAgaWYgKGh0dHBfdG9sKChDSEFSICopcmVxdWVzdCxzdHJsZW4ocmVxdWVzdCkpIDwg MCkKLSAgICB7Ci0gICAgICAgIGh0dHBfY2xvc2UoKTsKLSAgICAgICAgaWYgKCBmaXJzdCApIHsK LSAgICAgICAgICAgIGZpcnN0LS07Ci0gICAgICAgICAgICBodHRwX3Jlb3BlbigpOwotICAgICAg ICAgICAgZ290byBnZXRyZXE7Ci0gICAgICAgIH0KLSAgICAgICAgcmMgPSAtMTsKLSAgICAgICAg Z290byBnZXRleGl0OwotICAgIH0KLQotICAgIC8qIFByb2Nlc3MgdGhlIGhlYWRlcnMgKi8KLSAg ICBsb2NhbF90ID0gdGltZShOVUxMKTsKLSAgICBudWxsbGluZSA9IDA7Ci0gICAgaSA9IDA7Ci0g ICAgbGVuID0gLTE7Ci0gICAgd2hpbGUgKCFudWxsbGluZSAmJiAoY2ggPSBodHRwX2luYygwKSkg Pj0gMCAmJiBpIDwgSFRUUEJVRkxFTikgewotICAgICAgICBidWZbaV0gPSBjaDsKLSAgICAgICAg aWYgKCBidWZbaV0gPT0gMTAgKSB7IC8qIGZvdW5kIGVuZCBvZiBsaW5lICovCi0gICAgICAgICAg ICBpZiAoaSA+IDAgJiYgYnVmW2ktMV0gPT0gMTMpCi0gICAgICAgICAgICAgIGktLTsKLSAgICAg ICAgICAgIGlmIChpIDwgMSkKLSAgICAgICAgICAgICAgbnVsbGxpbmUgPSAxOwotICAgICAgICAg ICAgYnVmW2ldID0gJ1wwJzsKLSAgICAgICAgICAgIGlmIChhcnJheSAmJiAhbnVsbGxpbmUgJiYg aGRjbnQgPCBIVFRQSEVBRENOVCkKLSAgICAgICAgICAgICAgbWFrZXN0cigmaGVhZGVyc1toZGNu dCsrXSxidWYpOwotICAgICAgICAgICAgaWYgKCFja3N0cmNtcChidWYsIkhUVFAiLDQsMCkpIHsK LSAgICAgICAgICAgICAgICBodHRwX2ZuZCA9IDE7Ci0gICAgICAgICAgICAgICAgaiA9IGNraW5k ZXgoIiAiLGJ1ZiwwLDAsMCk7Ci0gICAgICAgICAgICAgICAgcCA9ICZidWZbal07Ci0gICAgICAg ICAgICAgICAgd2hpbGUgKCBpc3NwYWNlKCpwKSApCi0gICAgICAgICAgICAgICAgICBwKys7Ci0g ICAgICAgICAgICAgICAgc3dpdGNoICggcFswXSApIHsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug JzEnOiAgICAgICAgICAgICAvKiBJbmZvcm1hdGlvbmFsIG1lc3NhZ2UgKi8KLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlICcyJzogICAgICAgICAgICAg LyogU3VjY2VzcyAqLwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgIGNhc2UgJzMnOiAgICAgICAgICAgICAvKiBSZWRpcmVjdGlvbiAqLwotICAgICAgICAgICAg ICAgICAgY2FzZSAnNCc6ICAgICAgICAgICAgIC8qIENsaWVudCBmYWlsdXJlICovCi0gICAgICAg ICAgICAgICAgICBjYXNlICc1JzogICAgICAgICAgICAgLyogU2VydmVyIGZhaWx1cmUgKi8KLSAg ICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAvKiBVbmtub3duICovCi0gICAg ICAgICAgICAgICAgICAgIGlmICghcXVpZXQpCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJGYWlsdXJlOiBTZXJ2ZXIgcmVwb3J0cyAlc1xuIixwKTsKLSAgICAgICAgICAgICAgICAgICAg cmMgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwgPSBOVUxMOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBodHRwX3NldF9jb2RlX3JlcGx5KHApOwotI2lmZGVmIENN REFURTJUTQotICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoYnVmLCJMYXN0LU1vZGlm aWVkIiwxMywwKSkgewotICAgICAgICAgICAgICAgIG1vZF90ID0gaHR0cF9kYXRlKCZidWZbMTVd KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiRGF0ZSIsNCwwKSkgewot ICAgICAgICAgICAgICAgIHNydl90ID0gaHR0cF9kYXRlKCZidWZbNF0pOwotI2VuZGlmIC8qIENN REFURTJUTSAqLwotICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoYnVmLCJDb25uZWN0 aW9uOiIsMTEsMCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIGNraW5kZXgoImNsb3NlIixidWYs MTEsMCwwKSAhPSAwICkKLSAgICAgICAgICAgICAgICAgICAgY2xvc2Vjb24gPSAxOwotICAgICAg ICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoYnVmLCJDb250ZW50LUxlbmd0aDoiLDE1LDApKSB7 Ci0gICAgICAgICAgICAgICAgbGVuID0gYXRvaSgmYnVmWzE2XSk7Ci0gICAgICAgICAgICB9IGVs c2UgaWYgKCFja3N0cmNtcChidWYsIlRyYW5zZmVyLUVuY29kaW5nOiIsMTgsMCkpIHsKLSAgICAg ICAgICAgICAgICBpZiAoIGNraW5kZXgoImNodW5rZWQiLGJ1ZiwxOCwwLDApICE9IDAgKQotICAg ICAgICAgICAgICAgICAgICBjaHVua2VkID0gMTsKLQkJZGVidWcoRjEwMSwiaHR0cF9nZXQgY2h1 bmtlZCIsIiIsY2h1bmtlZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpID0gMDsKLSAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgIH0KLSAgICBp ZiAoY2ggPCAwICYmIGZpcnN0KSB7Ci0gICAgICAgIGZpcnN0LS07Ci0gICAgICAgIGh0dHBfY2xv c2UoKTsKLSAgICAgICAgaHR0cF9yZW9wZW4oKTsKLSAgICAgICAgZ290byBnZXRyZXE7Ci0gICAg fQotICAgIGlmIChodHRwX2ZuZCA9PSAwKSB7Ci0gICAgICAgIHJjID0gLTE7Ci0gICAgICAgIGNs b3NlY29uID0gMTsKLSAgICAgICAgZ290byBnZXRleGl0OwotICAgIH0KLQotICAgIC8qIE5vdyB3 ZSBoYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSAqLwotICAgIGlmICggbG9jYWwgJiYgbG9j YWxbMF0gKSB7Ci0gICAgICAgIGlmICh6b3Blbm8oWk9GSUxFLGxvY2FsLE5VTEwsTlVMTCkpCi0g ICAgICAgICAgICB6ZmlsZSA9IDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJjID0gLTE7 Ci0gICAgfQotCi0gICAgaWYgKCBjaHVua2VkICkgewotICAgICAgICB3aGlsZSAoKGxlbiA9IGh0 dHBfZ2V0X2NodW5rX2xlbigpKSA+IDApIHsKLSAgICAgICAgICAgIHdoaWxlIChsZW4gJiYgKGNo ID0gaHR0cF9pbmMoMCkpID49IDApIHsKLSAgICAgICAgICAgICAgICBsZW4tLTsKLSAgICAgICAg ICAgICAgICBpZiAoIHpmaWxlICkKLSAgICAgICAgICAgICAgICAgICAgemNob3V0KFpPRklMRSwo Q0hBUiljaCk7Ci0gICAgICAgICAgICAgICAgaWYgKCBzdGRpbyApCi0gICAgICAgICAgICAgICAg ICAgIGNvbm9jKChDSEFSKWNoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoY2gg PSBodHRwX2luYygwKSkgIT0gQ1IpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICBpZiAoKGNoID0gaHR0cF9pbmMoMCkpICE9IExGKQotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKGxlbiAmJiAoY2ggPSBodHRw X2luYygwKSkgPj0gMCkgewotICAgICAgICAgICAgbGVuLS07Ci0gICAgICAgICAgICBpZiAoIHpm aWxlICkKLSAgICAgICAgICAgICAgICB6Y2hvdXQoWk9GSUxFLChDSEFSKWNoKTsKLSAgICAgICAg ICAgIGlmICggc3RkaW8gKQotICAgICAgICAgICAgICAgIGNvbm9jKChDSEFSKWNoKTsKLSAgICAg ICAgfQotICAgIH0KLQotICAgIGlmICggemZpbGUgKQotICAgICAgICB6Y2xvc2UoWk9GSUxFKTsK LQotICAgIGlmICggY2h1bmtlZCApIHsgICAgICAgICAgICAvKiBQYXJzZSBUcmFpbGluZyBIZWFk ZXJzICovCi0gICAgICAgIG51bGxsaW5lID0gMDsKLSAgICAgICAgd2hpbGUgKCFudWxsbGluZSAm JiAoY2ggPSBodHRwX2luYygwKSkgPj0gMCAmJiBpIDwgSFRUUEJVRkxFTikgewotICAgICAgICAg ICAgYnVmW2ldID0gY2g7Ci0gICAgICAgICAgICBpZiAoIGJ1ZltpXSA9PSAxMCApIHsgLyogZm91 bmQgZW5kIG9mIGxpbmUgKi8KLSAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgYnVmW2ktMV0g PT0gMTMpCi0gICAgICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICAgICAgaWYgKGkgPCAx KQotICAgICAgICAgICAgICAgICAgbnVsbGxpbmUgPSAxOwotICAgICAgICAgICAgICAgIGJ1Zltp XSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5ICYmICFudWxsbGluZSAmJiBoZGNu dCA8IEhUVFBIRUFEQ05UKQotICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZoZWFkZXJzW2hk Y250KytdLGJ1Zik7Ci0jaWZkZWYgQ01EQVRFMlRNCi0gICAgICAgICAgICAgICAgaWYgKCFja3N0 cmNtcChidWYsIkxhc3QtTW9kaWZpZWQiLDEzLDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1v ZF90ID0gaHR0cF9kYXRlKCZidWZbMTVdKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFj a3N0cmNtcChidWYsIkRhdGUiLDQsMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3J2X3QgPSBo dHRwX2RhdGUoJmJ1Zls0XSk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENNREFURTJU TSAqLwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFja3N0cmNtcChidWYsIkNvbm5lY3Rpb246 IiwxMSwwKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIGNraW5kZXgoImNsb3NlIixidWYs MTEsMCwwKSAhPSAwICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlY29uID0gMTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaSA9IDA7Ci0gICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg IH0KLQotICAgIGlmICggemZpbGUgKSB7ICAgICAgICAgICAgICAvKiBTZXQgdGltZXN0YW1wICov Ci0jaWZuZGVmIE5PU0VUVElNRQotI2lmZGVmIE9TMgotICAgICAgICB1X3QuYWN0aW1lID0gc3J2 X3QgPyBzcnZfdCA6IGxvY2FsX3Q7Ci0gICAgICAgIHVfdC5tb2R0aW1lID0gbW9kX3QgPyBtb2Rf dCA6IGxvY2FsX3Q7Ci0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBTWVNVVElNRUgKLSAgICAgICAg dV90LmFjdGltZSA9IHNydl90ID8gc3J2X3QgOiBsb2NhbF90OwotICAgICAgICB1X3QubW9kdGlt ZSA9IG1vZF90ID8gbW9kX3QgOiBsb2NhbF90OwotI2Vsc2UKLSNpZmRlZiBCU0Q0NAotICAgICAg ICB1X3RbMF0udHZfc2VjID0gc3J2X3QgPyBzcnZfdCA6IGxvY2FsX3Q7Ci0gICAgICAgIHVfdFsx XS50dl9zZWMgPSBtb2RfdCA/IG1vZF90IDogbG9jYWxfdDsKLSNlbHNlCi0gICAgICAgIHVfdC5t dGltZSA9IHNydl90ID8gc3J2X3QgOiBsb2NhbF90OwotICAgICAgICB1X3QuYXRpbWUgPSBtb2Rf dCA/IG1vZF90IDogbG9jYWxfdDsKLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIFNZU1VU SU1FSCAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgdXRpbWUobG9jYWwsJnVfdCk7 Ci0jZW5kaWYgLyogTk9TRVRUSU1FICovCi0gICAgfQotCi0gIGdldGV4aXQ6Ci0gICAgaWYgKGFy cmF5KQotICAgICAgaHR0cF9ta2FycmF5KGhlYWRlcnMsaGRjbnQsYXJyYXkpOwotCi0gICAgaWYg KCBjbG9zZWNvbiApCi0gICAgICAgIGh0dHBfY2xvc2UoKTsKLSAgICBmcmVlKHJlcXVlc3QpOwot ICAgIGZvciAoaSA9IDA7IGkgPCBoZGNudDsgaSsrKSB7Ci0gICAgICAgIGlmIChoZWFkZXJzW2ld KQotICAgICAgICAgIGZyZWUoaGVhZGVyc1tpXSk7Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19 Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1odHRwX2hlYWQoY2hhciAqIGFnZW50LCBjaGFyICoq IGhkcmxpc3QsIGNoYXIgKiB1c2VyLAotICAgICAgICAgIGNoYXIgKiBwd2QsIGNoYXIgYXJyYXks IGNoYXIgKiBsb2NhbCwgY2hhciAqIHJlbW90ZSwKLSAgICAgICAgICBpbnQgc3RkaW8pCi0jZWxz ZQotaHR0cF9oZWFkKGFnZW50LCBoZHJsaXN0LCB1c2VyLCBwd2QsIGFycmF5LCBsb2NhbCwgcmVt b3RlLCBzdGRpbykKLSAgICBjaGFyICogYWdlbnQ7IGNoYXIgKiogaGRybGlzdDsgY2hhciAqIHVz ZXI7Ci0gICAgY2hhciAqIHB3ZDsgY2hhciBhcnJheTsgY2hhciAqIGxvY2FsOyBjaGFyICogcmVt b3RlOwotICAgIGludCBzdGRpbzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGNoYXIg KiByZXF1ZXN0ID0gTlVMTDsKLSAgICBpbnQgICAgaSwgaiwgbGVuID0gMCwgaGRjbnQgPSAwLCBy YyA9IDA7Ci0gICAgaW50ICAgIGNoOwotICAgIGludCAgICBodHRwX2ZuZCA9IDA7Ci0gICAgY2hh ciAgIGJ1ZltIVFRQQlVGTEVOXSwgKnA7Ci0gICAgaW50ICAgIG51bGxsaW5lOwotICAgIHRpbWVf dCBtb2RfdDsKLSAgICB0aW1lX3Qgc3J2X3Q7Ci0gICAgdGltZV90IGxvY2FsX3Q7Ci0gICAgY2hh ciBwYXNzd2RbNjRdOwotICAgIGNoYXIgYjY0aW5bMTI4XTsKLSAgICBjaGFyIGI2NG91dFsyNTZd OwotICAgIGNoYXIgKiBoZWFkZXJzW0hUVFBIRUFEQ05UXTsKLSAgICBpbnQgIGNsb3NlY29uID0g MDsKLSAgICBpbnQgIGZpcnN0ID0gMTsKLQotICAgIGlmIChodHRwZmQgPT0gLTEpCi0gICAgICBy ZXR1cm4oLTEpOwotCi0gICAgaWYgKGFycmF5KSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBI VFRQSEVBRENOVDsgaSsrKQotICAgICAgICAgIGhlYWRlcnNbaV0gPSBOVUxMOwotICAgIH0KLSAg ICBsZW4gPSA5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIRUFEICovCi0gICAgbGVu ICs9IHN0cmxlbihIVFRQX1ZFUlNJT04pOwotICAgIGxlbiArPSBzdHJsZW4ocmVtb3RlKTsKLSAg ICBsZW4gKz0gMTY7Ci0KLSAgICBpZiAoIGhkcmxpc3QgKSB7Ci0gICAgICAgIGZvciAoaSA9IDA7 IGhkcmxpc3RbaV07IGkrKykKLSAgICAgICAgICAgIGxlbiArPSBzdHJsZW4oaGRybGlzdFtpXSkg KyAyOwotICAgIH0KLSAgICBsZW4gKz0gc3RybGVuKGh0dHBfaG9zdF9wb3J0KSArIDg7Ci0KLSAg ICBpZiAoYWdlbnQpCi0gICAgICBsZW4gKz0gMTMgKyBzdHJsZW4oYWdlbnQpOwotICAgIGlmICh1 c2VyKSB7Ci0gICAgICAgIGlmICghcHdkKSB7Ci0gICAgICAgICAgICByZWFkcGFzcygiUGFzc3dv cmQ6ICIscGFzc3dkLDY0KTsKLSAgICAgICAgICAgIHB3ZCA9IHBhc3N3ZDsKLSAgICAgICAgfQot ICAgICAgICBja21ha21zZyhiNjRpbixzaXplb2YoYjY0aW4pLHVzZXIsIjoiLHB3ZCxOVUxMKTsK LSAgICAgICAgaiA9IGI4dG9iNjQoYjY0aW4sc3RybGVuKGI2NGluKSxiNjRvdXQsMjU2KTsKLSAg ICAgICAgbWVtc2V0KHB3ZCwwLHN0cmxlbihwd2QpKTsgICAgICAvKiBOT1QgUE9SVEFCTEUgKi8K LSAgICAgICAgaWYgKGogPCAwKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIGI2NG91 dFtqXSA9ICdcMCc7Ci0gICAgICAgIGxlbiArPSBqICsgMjQ7Ci0gICAgfQotI2lmZGVmIEhUVFBf Q0xPU0UKLSAgICBsZW4gKz0gMTk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0 aW9uOiBjbG9zZSAqLwotI2VuZGlmCi0gICAgbGVuICs9IDM7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYmxhbmsgbGluZSArIG51bGwgKi8KLQotICAgIHJlcXVlc3QgPSAoY2hhciAqKW1h bGxvYyhsZW4pOwotICAgIGlmICghcmVxdWVzdCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBz cHJpbnRmKHJlcXVlc3QsIkhFQUQgJXMgJXNcclxuIixyZW1vdGUsSFRUUF9WRVJTSU9OKTsKLSAg ICBja3N0cm5jYXQocmVxdWVzdCwiSG9zdDogIiwgbGVuKTsKLSAgICBja3N0cm5jYXQocmVxdWVz dCxodHRwX2hvc3RfcG9ydCwgbGVuKTsKLSAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVu KTsKLSAgICBpZiAoYWdlbnQpIHsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlVzZXItYWdl bnQ6ICIsbGVuKTsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsYWdlbnQsbGVuKTsKLSAgICAg ICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0gICAgfQotICAgIGlmICh1c2VyKSB7 Ci0gICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJBdXRob3JpemF0aW9uOiBCYXNpYyAiLGxlbik7 Ci0gICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LGI2NG91dCxsZW4pOwotICAgICAgICBja3N0cm5j YXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICB9Ci0gICAgaWYgKCBoZHJsaXN0ICkgewotICAg ICAgICBmb3IgKGkgPSAwOyBoZHJsaXN0W2ldOyBpKyspIHsKLSAgICAgICAgICAgIGNrc3RybmNh dChyZXF1ZXN0LGhkcmxpc3RbaV0sbGVuKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0 LCJcclxuIixsZW4pOwotICAgICAgICB9Ci0gICAgfQotI2lmZGVmIEhUVFBfQ0xPU0UKLSAgICBj a3N0cm5jYXQocmVxdWVzdCwiQ29ubmVjdGlvbjogY2xvc2VcclxuIixsZW4pOwotI2VuZGlmCi0g ICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0KLSAgICBpZiAoIGxvY2FsICYmIGxv Y2FsWzBdICkgewotICAgICAgICBpZiAoIXpvcGVubyhaT0ZJTEUsbG9jYWwsTlVMTCxOVUxMKSkg ewotICAgICAgICAgICAgZnJlZShyZXF1ZXN0KTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgIH0KLSAgICB9Ci0KLSAgaGVhZHJlcToKLSAgICBpZiAoaHR0cF90b2woKENIQVIgKily ZXF1ZXN0LHN0cmxlbihyZXF1ZXN0KSkgPCAwKQotICAgIHsKLSAgICAgICAgaHR0cF9jbG9zZSgp OwotICAgICAgICBpZiAoIGZpcnN0ICkgewotICAgICAgICAgICAgZmlyc3QtLTsKLSAgICAgICAg ICAgIGh0dHBfcmVvcGVuKCk7Ci0gICAgICAgICAgICBnb3RvIGhlYWRyZXE7Ci0gICAgICAgIH0K LSAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgZ290byBoZWFkZXhpdDsKLSAgICB9Ci0KLSAgICAv KiBQcm9jZXNzIHRoZSBoZWFkZXJzICovCi0KLSAgICBsb2NhbF90ID0gdGltZShOVUxMKTsKLSAg ICBudWxsbGluZSA9IDA7Ci0gICAgaSA9IDA7Ci0gICAgd2hpbGUgKCFudWxsbGluZSAmJiAoY2gg PSBodHRwX2luYygwKSkgPj0gMCAmJiBpIDwgSFRUUEJVRkxFTikgewotICAgICAgICBidWZbaV0g PSBjaDsKLSAgICAgICAgaWYgKGJ1ZltpXSA9PSAxMCkgeyAgICAgICAgICAgICAvKiBmb3VuZCBl bmQgb2YgbGluZSAqLwotICAgICAgICAgICAgaWYgKGkgPiAwICYmIGJ1ZltpLTFdID09IDEzKQot ICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICBpZiAoaSA8IDEpCi0gICAgICAgICAgICAg IG51bGxsaW5lID0gMTsKLSAgICAgICAgICAgIGJ1ZltpXSA9ICdcMCc7Ci0gICAgICAgICAgICBp ZiAoYXJyYXkgJiYgIW51bGxsaW5lICYmIGhkY250IDwgSFRUUEhFQURDTlQpCi0gICAgICAgICAg ICAgIG1ha2VzdHIoJmhlYWRlcnNbaGRjbnQrK10sYnVmKTsKLSAgICAgICAgICAgIGlmICghY2tz dHJjbXAoYnVmLCJIVFRQIiw0LDApKSB7Ci0gICAgICAgICAgICAgICAgaHR0cF9mbmQgPSAxOwot ICAgICAgICAgICAgICAgIGogPSBja2luZGV4KCIgIixidWYsMCwwLDApOwotICAgICAgICAgICAg ICAgIHAgPSAmYnVmW2pdOwotICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpwKSkKLSAg ICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBbMF0pIHsKLSAg ICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAgICAgICAgICAgICAvKiBJbmZvcm1hdGlvbmFsIG1l c3NhZ2UgKi8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBj YXNlICcyJzogICAgICAgICAgICAgLyogU3VjY2VzcyAqLwotICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJzMnOiAgICAgICAgICAgICAvKiBSZWRpcmVj dGlvbiAqLwotICAgICAgICAgICAgICAgICAgY2FzZSAnNCc6ICAgICAgICAgICAgIC8qIENsaWVu dCBmYWlsdXJlICovCi0gICAgICAgICAgICAgICAgICBjYXNlICc1JzogICAgICAgICAgICAgLyog U2VydmVyIGZhaWx1cmUgKi8KLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAg ICAvKiBVbmtub3duICovCi0gICAgICAgICAgICAgICAgICAgIGlmICghcXVpZXQpCi0gICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsdXJlOiBTZXJ2ZXIgcmVwb3J0cyAlc1xuIixwKTsK LSAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgaHR0cF9zZXRfY29kZV9yZXBseShwKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcChidWYsIkNvbm5lY3Rpb246IiwxMSwwKSkgewot ICAgICAgICAgICAgICAgICAgICBpZiAoIGNraW5kZXgoImNsb3NlIixidWYsMTEsMCwwKSAhPSAw ICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlY29uID0gMTsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgaWYgKCBsb2NhbCAmJiBsb2NhbFswXSApIHsKLSAgICAgICAg ICAgICAgICAgICAgenNvdXQoWk9GSUxFLGJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIHpzb3V0 KFpPRklMRSwiXHJcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo c3RkaW8pCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXNcclxuIixidWYpOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgaSA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICBpKys7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGNoIDwgMCAmJiBmaXJzdCkgewotICAg ICAgICBmaXJzdC0tOwotICAgICAgICBodHRwX2Nsb3NlKCk7Ci0gICAgICAgIGh0dHBfcmVvcGVu KCk7Ci0gICAgICAgIGdvdG8gaGVhZHJlcTsKLSAgICB9Ci0gICAgaWYgKCBodHRwX2ZuZCA9PSAw ICkKLSAgICAgICAgcmMgPSAtMTsKLQotICAgIGlmIChhcnJheSkKLSAgICAgIGh0dHBfbWthcnJh eShoZWFkZXJzLGhkY250LGFycmF5KTsKLQotICBoZWFkZXhpdDoKLSAgICBpZiAoIGxvY2FsICYm IGxvY2FsWzBdICkKLSAgICAgICAgemNsb3NlKFpPRklMRSk7Ci0gICAgaWYgKGNsb3NlY29uKQot ICAgICAgICBodHRwX2Nsb3NlKCk7Ci0gICAgZnJlZShyZXF1ZXN0KTsKLSAgICBmb3IgKGkgPSAw OyBpIDwgaGRjbnQ7IGkrKykgewotICAgICAgICBpZiAoaGVhZGVyc1tpXSkKLSAgICAgICAgICBm cmVlKGhlYWRlcnNbaV0pOwotICAgIH0KLSAgICByZXR1cm4ocmMpOwotfQotCi1pbnQKLSNpZmRl ZiBDS19BTlNJQwotaHR0cF9pbmRleChjaGFyICogYWdlbnQsIGNoYXIgKiogaGRybGlzdCwgY2hh ciAqIHVzZXIsIGNoYXIgKiBwd2QsCi0gICAgICAgICAgICAgY2hhciBhcnJheSwgY2hhciAqIGxv Y2FsLCBjaGFyICogcmVtb3RlLCBpbnQgc3RkaW8pCi0jZWxzZQotaHR0cF9pbmRleChhZ2VudCwg aGRybGlzdCwgdXNlciwgcHdkLCBhcnJheSwgbG9jYWwsIHJlbW90ZSwgc3RkaW8pCi0gICAgY2hh ciAqIGFnZW50OyBjaGFyICoqIGhkcmxpc3Q7IGNoYXIgKiB1c2VyOyBjaGFyICogcHdkOwotICAg IGNoYXIgYXJyYXk7IGNoYXIgKiBsb2NhbDsgY2hhciAqIHJlbW90ZTsgaW50IHN0ZGlvOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgY2hhciAqIHJlcXVlc3QgPSBOVUxMOwotICAgIGlu dCAgICBpLCBqLCBsZW4gPSAwLCBoZGNudCA9IDAsIHJjID0gMDsKLSAgICBpbnQgICAgY2g7Ci0g ICAgaW50ICAgIGh0dHBfZm5kID0gMDsKLSAgICBjaGFyICAgYnVmW0hUVFBCVUZMRU5dLCAqcDsK LSAgICBpbnQgICAgbnVsbGxpbmU7Ci0gICAgdGltZV90IG1vZF90OwotICAgIHRpbWVfdCBzcnZf dDsKLSAgICB0aW1lX3QgbG9jYWxfdDsKLSAgICBjaGFyIHBhc3N3ZFs2NF07Ci0gICAgY2hhciBi NjRpblsxMjhdOwotICAgIGNoYXIgYjY0b3V0WzI1Nl07Ci0gICAgY2hhciAqIGhlYWRlcnNbSFRU UEhFQURDTlRdOwotICAgIGludCAgY2xvc2Vjb24gPSAwOwotICAgIGludCAgY2h1bmtlZCA9IDA7 Ci0gICAgaW50ICB6ZmlsZSA9IDA7Ci0gICAgaW50ICBmaXJzdCA9IDE7Ci0KLSAgICBpZiAoaHR0 cGZkID09IC0xKQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmIChhcnJheSkgewotICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgSFRUUEhFQURDTlQ7IGkrKykKLSAgICAgICAgICBoZWFkZXJzW2ld ID0gTlVMTDsKLSAgICB9Ci0gICAgbGVuID0gMTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIElOREVYICovCi0gICAgbGVuICs9IHN0cmxlbihIVFRQX1ZFUlNJT04pOwotICAgIGxlbiAr PSBzdHJsZW4ocmVtb3RlKTsKLSAgICBsZW4gKz0gMTY7Ci0KLSAgICBpZiAoIGhkcmxpc3QgKSB7 Ci0gICAgICAgIGZvciAoaSA9IDA7IGhkcmxpc3RbaV07IGkrKykKLSAgICAgICAgICAgIGxlbiAr PSBzdHJsZW4oaGRybGlzdFtpXSkgKyAyOwotICAgIH0KLSAgICBsZW4gKz0gc3RybGVuKGh0dHBf aG9zdF9wb3J0KSArIDg7Ci0KLSAgICBpZiAoYWdlbnQpCi0gICAgICAgIGxlbiArPSAxMyArIHN0 cmxlbihhZ2VudCk7Ci0gICAgaWYgKHVzZXIpIHsKLSAgICAgICAgaWYgKCFwd2QpIHsKLSAgICAg ICAgICAgIHJlYWRwYXNzKCJQYXNzd29yZDogIixwYXNzd2QsNjQpOwotICAgICAgICAgICAgcHdk ID0gcGFzc3dkOwotICAgICAgICB9Ci0gICAgICAgIGNrbWFrbXNnKGI2NGluLHNpemVvZihiNjRp biksdXNlciwiOiIscHdkLE5VTEwpOwotICAgICAgICBqID0gYjh0b2I2NChiNjRpbixzdHJsZW4o YjY0aW4pLGI2NG91dCwyNTYpOwotICAgICAgICBtZW1zZXQocHdkLDAsc3RybGVuKHB3ZCkpOwot ICAgICAgICBpZiAoaiA8IDApCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgYjY0b3V0 W2pdID0gJ1wwJzsKLSAgICAgICAgbGVuICs9IGogKyAyNDsKLSAgICB9Ci0jaWZkZWYgSFRUUF9D TE9TRQotICAgIGxlbiArPSAxOTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rp b246IGNsb3NlICovCi0jZW5kaWYKLSAgICBsZW4gKz0gMzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBibGFuayBsaW5lICsgbnVsbCAqLwotCi0gICAgcmVxdWVzdCA9IG1hbGxvYyhsZW4p OwotICAgIGlmICghcmVxdWVzdCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBzcHJpbnRmKHJl cXVlc3QsIklOREVYICVzXHJcbiIsSFRUUF9WRVJTSU9OKTsKLSAgICBja3N0cm5jYXQocmVxdWVz dCwiSG9zdDogIiwgbGVuKTsKLSAgICBja3N0cm5jYXQocmVxdWVzdCxodHRwX2hvc3RfcG9ydCwg bGVuKTsKLSAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICBpZiAoYWdlbnQp IHsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlVzZXItYWdlbnQ6ICIsbGVuKTsKLSAgICAg ICAgY2tzdHJuY2F0KHJlcXVlc3QsYWdlbnQsbGVuKTsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVl c3QsIlxyXG4iLGxlbik7Ci0gICAgfQotICAgIGlmICh1c2VyKSB7Ci0gICAgICAgIGNrc3RybmNh dChyZXF1ZXN0LCJBdXRob3JpemF0aW9uOiBCYXNpYyAiLGxlbik7Ci0gICAgICAgIGNrc3RybmNh dChyZXF1ZXN0LGI2NG91dCxsZW4pOwotICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIs bGVuKTsKLSAgICB9Ci0gICAgaWYgKCBoZHJsaXN0ICkgewotICAgICAgICBmb3IgKGkgPSAwOyBo ZHJsaXN0W2ldOyBpKyspIHsKLSAgICAgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LGhkcmxpc3Rb aV0sbGVuKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwotICAg ICAgICB9Ci0gICAgfQotI2lmZGVmIEhUVFBfQ0xPU0UKLSAgICBja3N0cm5jYXQocmVxdWVzdCwi Q29ubmVjdGlvbjogY2xvc2VcclxuIixsZW4pOwotI2VuZGlmCi0gICAgY2tzdHJuY2F0KHJlcXVl c3QsIlxyXG4iLGxlbik7Ci0gIGluZGV4cmVxOgotICAgIGlmIChodHRwX3RvbCgoQ0hBUiAqKXJl cXVlc3Qsc3RybGVuKHJlcXVlc3QpKSA8IDApCi0gICAgewotICAgICAgICBodHRwX2Nsb3NlKCk7 Ci0gICAgICAgIGlmICggZmlyc3QgKSB7Ci0gICAgICAgICAgICBmaXJzdC0tOwotICAgICAgICAg ICAgaHR0cF9yZW9wZW4oKTsKLSAgICAgICAgICAgIGdvdG8gaW5kZXhyZXE7Ci0gICAgICAgIH0K LSAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgZ290byBpbmRleGV4aXQ7Ci0gICAgfQotCi0gICAg LyogUHJvY2VzcyB0aGUgaGVhZGVycyAqLwotICAgIGxvY2FsX3QgPSB0aW1lKE5VTEwpOwotICAg IG51bGxsaW5lID0gMDsKLSAgICBpID0gMDsKLSAgICBsZW4gPSAtMTsKLSAgICB3aGlsZSAoIW51 bGxsaW5lICYmIChjaCA9IGh0dHBfaW5jKDApKSA+PSAwICYmIGkgPCBIVFRQQlVGTEVOKSB7Ci0g ICAgICAgIGJ1ZltpXSA9IGNoOwotICAgICAgICBpZiAoYnVmW2ldID09IDEwKSB7ICAgICAgICAg ICAgIC8qIGZvdW5kIGVuZCBvZiBsaW5lICovCi0gICAgICAgICAgICBpZiAoaSA+IDAgJiYgYnVm W2ktMV0gPT0gMTMpCi0gICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgIGlmIChpIDwgMSkK LSAgICAgICAgICAgICAgbnVsbGxpbmUgPSAxOwotICAgICAgICAgICAgYnVmW2ldID0gJ1wwJzsK LSAgICAgICAgICAgIGlmIChhcnJheSAmJiAhbnVsbGxpbmUgJiYgaGRjbnQgPCBIVFRQSEVBRENO VCkKLSAgICAgICAgICAgICAgbWFrZXN0cigmaGVhZGVyc1toZGNudCsrXSxidWYpOwotICAgICAg ICAgICAgaWYgKCFja3N0cmNtcChidWYsIkhUVFAiLDQsMCkpIHsKLSAgICAgICAgICAgICAgICBo dHRwX2ZuZCA9IDE7Ci0gICAgICAgICAgICAgICAgaiA9IGNraW5kZXgoIiAiLGJ1ZiwwLDAsMCk7 Ci0gICAgICAgICAgICAgICAgcCA9ICZidWZbal07Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGlz c3BhY2UoKnApKQotICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIHN3aXRj aCAoIHBbMF0gKSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlICcxJzogICAgICAgICAgICAgLyog SW5mb3JtYXRpb25hbCBtZXNzYWdlICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgY2FzZSAnMic6ICAgICAgICAgICAgIC8qIFN1Y2Nlc3MgKi8KLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlICczJzogICAgICAg ICAgICAgLyogUmVkaXJlY3Rpb24gKi8KLSAgICAgICAgICAgICAgICAgIGNhc2UgJzQnOiAgICAg ICAgICAgICAvKiBDbGllbnQgZmFpbHVyZSAqLwotICAgICAgICAgICAgICAgICAgY2FzZSAnNSc6 ICAgICAgICAgICAgIC8qIFNlcnZlciBmYWlsdXJlICovCi0gICAgICAgICAgICAgICAgICBkZWZh dWx0OiAgICAgICAgICAgICAgLyogVW5rbm93biAqLwotICAgICAgICAgICAgICAgICAgICBpZiAo IXF1aWV0KQotICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRmFpbHVyZTogU2VydmVyIHJl cG9ydHMgJXNcbiIscCk7Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIGh0dHBfc2V0X2NvZGVfcmVwbHkocCk7Ci0gICAgICAg ICAgICB9IGVsc2UgaWYgKCAhbnVsbGxpbmUgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFja3N0 cmNtcChidWYsIkNvbm5lY3Rpb246IiwxMSwwKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo IGNraW5kZXgoImNsb3NlIixidWYsMTEsMCwwKSAhPSAwICkKLSAgICAgICAgICAgICAgICAgICAg ICAgIGNsb3NlY29uID0gMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChi dWYsIkNvbnRlbnQtTGVuZ3RoOiIsMTUsMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbGVuID0g YXRvaSgmYnVmWzE2XSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoYnVm LCJUcmFuc2Zlci1FbmNvZGluZzoiLDE4LDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgg Y2tpbmRleCgiY2h1bmtlZCIsYnVmLDE4LDAsMCkgIT0gMCApCi0gICAgICAgICAgICAgICAgICAg ICAgICBjaHVua2VkID0gMTsKLQkJICAgIGRlYnVnKEYxMDEsImh0dHBfaW5kZXggY2h1bmtlZCIs IiIsY2h1bmtlZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByaW50Zigi JXNcbiIsYnVmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkgPSAwOwotICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNo IDwgMCAmJiBmaXJzdCkgewotICAgICAgICBmaXJzdC0tOwotICAgICAgICBodHRwX2Nsb3NlKCk7 Ci0gICAgICAgIGh0dHBfcmVvcGVuKCk7Ci0gICAgICAgIGdvdG8gaW5kZXhyZXE7Ci0gICAgfQot ICAgIGlmICggaHR0cF9mbmQgPT0gMCApIHsKLSAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgY2xv c2Vjb24gPSAxOwotICAgICAgICBnb3RvIGluZGV4ZXhpdDsKLSAgICB9Ci0KLSAgICAvKiBOb3cg d2UgaGF2ZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgKi8KLSAgICBpZiAoIGxvY2FsICYmIGxv Y2FsWzBdICkgewotICAgICAgICBpZiAoem9wZW5vKFpPRklMRSxsb2NhbCxOVUxMLE5VTEwpKQot ICAgICAgICAgICAgemZpbGUgPSAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByYyA9IC0x OwotICAgIH0KLQotICAgIGlmICggY2h1bmtlZCApIHsKLSAgICAgICAgd2hpbGUgKChsZW4gPSBo dHRwX2dldF9jaHVua19sZW4oKSkgPiAwKSB7Ci0gICAgICAgICAgICB3aGlsZSAobGVuICYmIChj aCA9IGh0dHBfaW5jKDApKSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgbGVuLS07Ci0gICAgICAg ICAgICAgICAgaWYgKCB6ZmlsZSApCi0gICAgICAgICAgICAgICAgICAgIHpjaG91dChaT0ZJTEUs KENIQVIpY2gpOwotICAgICAgICAgICAgICAgIGlmICggc3RkaW8gKQotICAgICAgICAgICAgICAg ICAgICBjb25vYygoQ0hBUiljaCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGNo ID0gaHR0cF9pbmMoMCkpICE9IENSKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgaWYgKChjaCA9IGh0dHBfaW5jKDApKSAhPSBMRikKLSAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlIChsZW4gJiYgKGNoID0gaHR0 cF9pbmMoMCkpID49IDApIHsKLSAgICAgICAgICAgIGxlbi0tOwotICAgICAgICAgICAgaWYgKCB6 ZmlsZSApCi0gICAgICAgICAgICAgICAgemNob3V0KFpPRklMRSwoQ0hBUiljaCk7Ci0gICAgICAg ICAgICBpZiAoIHN0ZGlvICkKLSAgICAgICAgICAgICAgICBjb25vYygoQ0hBUiljaCk7Ci0gICAg ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIHpmaWxlICkKLSAgICAgICAgemNsb3NlKFpPRklMRSk7 Ci0KLSAgICBpZiAoIGNodW5rZWQgKSB7ICAgICAgICAgICAgLyogUGFyc2UgVHJhaWxpbmcgSGVh ZGVycyAqLwotICAgICAgICBudWxsbGluZSA9IDA7Ci0gICAgICAgIHdoaWxlICghbnVsbGxpbmUg JiYgKGNoID0gaHR0cF9pbmMoMCkpID49IDAgJiYgaSA8IEhUVFBCVUZMRU4pIHsKLSAgICAgICAg ICAgIGJ1ZltpXSA9IGNoOwotICAgICAgICAgICAgaWYgKCBidWZbaV0gPT0gMTAgKSB7IC8qIGZv dW5kIGVuZCBvZiBsaW5lICovCi0gICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIGJ1ZltpLTFd ID09IDEzKQotICAgICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgICAgIGlmIChpIDwg MSkKLSAgICAgICAgICAgICAgICAgIG51bGxsaW5lID0gMTsKLSAgICAgICAgICAgICAgICBidWZb aV0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGlmIChhcnJheSAmJiAhbnVsbGxpbmUgJiYgaGRj bnQgPCBIVFRQSEVBRENOVCkKLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmaGVhZGVyc1to ZGNudCsrXSxidWYpOwotICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAoYnVmLCJDb25uZWN0 aW9uOiIsMTEsMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBja2luZGV4KCJjbG9zZSIs YnVmLDExLDAsMCkgIT0gMCApCi0gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWNvbiA9IDE7 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGkgPSAwOwotICAgICAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSAgICB9Ci0gICAgcmMgPSAwOwotCi0gIGluZGV4ZXhpdDoKLSAgICBpZiAoYXJyYXkpCi0gICAg ICBodHRwX21rYXJyYXkoaGVhZGVycyxoZGNudCxhcnJheSk7Ci0KLSAgICBpZiAoY2xvc2Vjb24p Ci0gICAgICAgIGh0dHBfY2xvc2UoKTsKLSAgICBmcmVlKHJlcXVlc3QpOwotICAgIGZvciAoaSA9 IDA7IGkgPCBoZGNudDsgaSsrKSB7Ci0gICAgICAgIGlmIChoZWFkZXJzW2ldKQotICAgICAgICAg IGZyZWUoaGVhZGVyc1tpXSk7Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19Ci0KLWludAotI2lm ZGVmIENLX0FOU0lDCi1odHRwX3B1dChjaGFyICogYWdlbnQsIGNoYXIgKiogaGRybGlzdCwgY2hh ciAqIG1pbWUsIGNoYXIgKiB1c2VyLAotICAgICAgICAgY2hhciAqIHB3ZCwgY2hhciBhcnJheSwg Y2hhciAqIGxvY2FsLCBjaGFyICogcmVtb3RlLAotICAgICAgICAgY2hhciAqIGRlc3QsIGludCBz dGRpbykKLSNlbHNlCi1odHRwX3B1dChhZ2VudCwgaGRybGlzdCwgbWltZSwgdXNlciwgcHdkLCBh cnJheSwgbG9jYWwsIHJlbW90ZSwgZGVzdCwgc3RkaW8pCi0gICAgY2hhciAqIGFnZW50OyBjaGFy ICoqIGhkcmxpc3Q7IGNoYXIgKiBtaW1lOyBjaGFyICogdXNlcjsKLSAgICBjaGFyICogcHdkOyBj aGFyIGFycmF5OyBjaGFyICogbG9jYWw7IGNoYXIgKiByZW1vdGU7IGNoYXIgKiBkZXN0OwotICAg IGludCBzdGRpbzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGNoYXIgKiByZXF1ZXN0 PU5VTEw7Ci0gICAgaW50ICAgIGksIGosIGxlbiA9IDAsIGhkY250ID0gMCwgcmMgPSAwOwotICAg IGludCAgICBjaDsKLSAgICBpbnQgICAgaHR0cF9mbmQgPSAwOwotICAgIGNoYXIgICBidWZbSFRU UEJVRkxFTl0sICpwOwotICAgIGludCAgICBudWxsbGluZTsKLSAgICB0aW1lX3QgbW9kX3Q7Ci0g ICAgdGltZV90IHNydl90OwotICAgIHRpbWVfdCBsb2NhbF90OwotICAgIGNoYXIgcGFzc3dkWzY0 XTsKLSAgICBjaGFyIGI2NGluWzEyOF07Ci0gICAgY2hhciBiNjRvdXRbMjU2XTsKLSAgICBpbnQg IGZpbGVsZW47Ci0gICAgY2hhciAqIGhlYWRlcnNbSFRUUEhFQURDTlRdOwotICAgIGludCAgY2xv c2Vjb24gPSAwOwotICAgIGludCAgY2h1bmtlZCA9IDA7Ci0gICAgaW50ICBmaXJzdCA9IDE7Ci0g ICAgaW50ICB6ZmlsZSA9IDA7Ci0KLSAgICBpZiAoaHR0cGZkID09IC0xKQotICAgICAgcmV0dXJu KC0xKTsKLSAgICBpZiAoIW1pbWUpIG1pbWUgPSAiIjsKLSAgICBpZiAoIXJlbW90ZSkgcmVtb3Rl ID0gIiI7Ci0gICAgaWYgKCFsb2NhbCkgbG9jYWwgPSAiIjsKLSAgICBpZiAoISpsb2NhbCkgcmV0 dXJuKC0xKTsKLQotICAgIGlmIChhcnJheSkgewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSFRU UEhFQURDTlQ7IGkrKykKLSAgICAgICAgICBoZWFkZXJzW2ldID0gTlVMTDsKLSAgICB9Ci0gICAg ZmlsZWxlbiA9IHpjaGtpKGxvY2FsKTsKLSAgICBpZiAoZmlsZWxlbiA8IDApCi0gICAgICByZXR1 cm4oLTEpOwotCi0gICAgLyogQ29tcHV0ZSBsZW5ndGggb2YgcmVxdWVzdCBoZWFkZXIgKi8KLSAg ICBsZW4gPSA4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQVVQgKi8KLSAgICBsZW4g Kz0gc3RybGVuKEhUVFBfVkVSU0lPTik7Ci0gICAgbGVuICs9IHN0cmxlbihyZW1vdGUpOwotICAg IGxlbiArPSAxNjsKLQotICAgIGlmICggaGRybGlzdCApIHsKLSAgICAgICAgZm9yIChpID0gMDsg aGRybGlzdFtpXTsgaSsrKQotICAgICAgICAgICAgbGVuICs9IHN0cmxlbihoZHJsaXN0W2ldKSAr IDI7Ci0gICAgfQotICAgIGxlbiArPSBzdHJsZW4oaHR0cF9ob3N0X3BvcnQpICsgODsKLQotICAg IGlmIChhZ2VudCkKLSAgICAgIGxlbiArPSAxMyArIHN0cmxlbihhZ2VudCk7Ci0gICAgaWYgKHVz ZXIpIHsKLSAgICAgICAgaWYgKCFwd2QpIHsKLSAgICAgICAgICAgIHJlYWRwYXNzKCJQYXNzd29y ZDogIixwYXNzd2QsNjQpOwotICAgICAgICAgICAgcHdkID0gcGFzc3dkOwotICAgICAgICB9Ci0g ICAgICAgIGNrbWFrbXNnKGI2NGluLHNpemVvZihiNjRpbiksdXNlciwiOiIscHdkLE5VTEwpOwot ICAgICAgICBqID0gYjh0b2I2NChiNjRpbixzdHJsZW4oYjY0aW4pLGI2NG91dCwyNTYpOwotICAg ICAgICBtZW1zZXQocHdkLDAsc3RybGVuKHB3ZCkpOwotICAgICAgICBpZiAoaiA8IDApCi0gICAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgYjY0b3V0W2pdID0gJ1wwJzsKLSAgICAgICAgbGVu ICs9IGogKyAyNDsKLSAgICB9Ci0gICAgbGVuICs9IDE2ICsgc3RybGVuKG1pbWUpOyAgICAgICAg ICAgLyogQ29udGVudC10eXBlOiAqLwotICAgIGxlbiArPSAzMjsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIENvbnRlbnQtbGVuZ3RoOiAqLwotICAgIGxlbiArPSAzMjsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIERhdGU6ICovCi0jaWZkZWYgSFRUUF9DTE9TRQotICAgIGxlbiArPSAx OTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb246IGNsb3NlICovCi0jZW5k aWYKLSAgICBsZW4gKz0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBibGFuayBsaW5l ICsgbnVsbCAqLwotCi0gICAgcmVxdWVzdCA9IG1hbGxvYyhsZW4pOwotICAgIGlmICghcmVxdWVz dCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBzcHJpbnRmKHJlcXVlc3QsIlBVVCAlcyAlc1xy XG4iLHJlbW90ZSxIVFRQX1ZFUlNJT04pOwotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJEYXRlOiAi LGxlbik7Ci0jaWZkZWYgQ01EQVRFMlRNCi0gICAgY2tzdHJuY2F0KHJlcXVlc3QsaHR0cF9ub3co KSxsZW4pOwotI2Vsc2UKLSAgICBja3N0cm5jYXQocmVxdWVzdCwuLi4sbGVuKTsKLSNlbmRpZiAv KiBDTURBVEUyVE0gKi8KLSAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICBj a3N0cm5jYXQocmVxdWVzdCwiSG9zdDogIiwgbGVuKTsKLSAgICBja3N0cm5jYXQocmVxdWVzdCxo dHRwX2hvc3RfcG9ydCwgbGVuKTsKLSAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsK LSAgICBpZiAoYWdlbnQpIHsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlVzZXItYWdlbnQ6 ICIsbGVuKTsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsYWdlbnQsbGVuKTsKLSAgICAgICAg Y2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0gICAgfQotICAgIGlmICh1c2VyKSB7Ci0g ICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJBdXRob3JpemF0aW9uOiBCYXNpYyAiLGxlbik7Ci0g ICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LGI2NG91dCxsZW4pOwotICAgICAgICBja3N0cm5jYXQo cmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICB9Ci0gICAgaWYgKCBoZHJsaXN0ICkgewotICAgICAg ICBmb3IgKGkgPSAwOyBoZHJsaXN0W2ldOyBpKyspIHsKLSAgICAgICAgICAgIGNrc3RybmNhdChy ZXF1ZXN0LGhkcmxpc3RbaV0sbGVuKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJc clxuIixsZW4pOwotICAgICAgICB9Ci0gICAgfQotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJDb250 ZW50LXR5cGU6ICIsbGVuKTsKLSAgICBja3N0cm5jYXQocmVxdWVzdCxtaW1lLGxlbik7Ci0gICAg Y2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0gICAgc3ByaW50ZihidWYsIkNvbnRlbnQt bGVuZ3RoOiAlZFxyXG4iLGZpbGVsZW4pOyAvKiBzYWZlICovCi0gICAgY2tzdHJuY2F0KHJlcXVl c3QsYnVmLGxlbik7Ci0jaWZkZWYgSFRUUF9DTE9TRQotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJD b25uZWN0aW9uOiBjbG9zZVxyXG4iLGxlbik7Ci0jZW5kaWYKLSAgICBja3N0cm5jYXQocmVxdWVz dCwiXHJcbiIsbGVuKTsKLQotICAgIC8qIE5vdyB3ZSBoYXZlIHRoZSBjb250ZW50cyBvZiB0aGUg ZmlsZSAqLwotICAgIGlmICh6b3BlbmkoWklGSUxFLGxvY2FsKSkgewotCi0gICAgICBwdXRyZXE6 CQkJCS8qIFNlbmQgcmVxdWVzdCAqLwotICAgICAgICBpZiAoaHR0cF90b2woKENIQVIgKilyZXF1 ZXN0LHN0cmxlbihyZXF1ZXN0KSkgPD0gMCkgewotICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwot ICAgICAgICAgICAgaWYgKCBmaXJzdCApIHsKLSAgICAgICAgICAgICAgICBmaXJzdC0tOwotICAg ICAgICAgICAgICAgIGh0dHBfcmVvcGVuKCk7Ci0gICAgICAgICAgICAgICAgZ290byBwdXRyZXE7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB6Y2xvc2UoWklGSUxFKTsKLSAgICAgICAgICAg IHJjID0gLTE7Ci0gICAgICAgICAgICBnb3RvIHB1dGV4aXQ7Ci0gICAgICAgIH0KLSAgICAgICAg LyogUmVxdWVzdCBoZWFkZXJzIGhhdmUgYmVlbiBzZW50ICovCi0KLSAgICAgICAgaSA9IDA7Ci0g ICAgICAgIHdoaWxlICh6Y2hpbihaSUZJTEUsJmNoKSA9PSAwKSB7Ci0gICAgICAgICAgICBidWZb aSsrXSA9IGNoOwotICAgICAgICAgICAgaWYgKGkgPT0gSFRUUEJVRkxFTikgewotICAgICAgICAg ICAgICAgIGlmIChodHRwX3RvbCgoQ0hBUiAqKWJ1ZixIVFRQQlVGTEVOKSA8PSAwKSB7Ci0gICAg ICAgICAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBm aXJzdCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0LS07Ci0gICAgICAgICAgICAg ICAgICAgICAgICBodHRwX3Jlb3BlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBw dXRyZXE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgaSA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkg PiAwKSB7Ci0gICAgICAgICAgICBpZiAoaHR0cF90b2woKENIQVIgKilidWYsaSkgPCAwKSB7Ci0g ICAgICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwotICAgICAgICAgICAgICAgIGlmICggZmlyc3Qg KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0LS07Ci0gICAgICAgICAgICAgICAgICAgIGh0 dHBfcmVvcGVuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gcHV0cmVxOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB6Y2xvc2UoWklGSUxF KTsKLQotICAgICAgICAvKiBQcm9jZXNzIHRoZSByZXNwb25zZSBoZWFkZXJzICovCi0gICAgICAg IGxvY2FsX3QgPSB0aW1lKE5VTEwpOwotICAgICAgICBudWxsbGluZSA9IDA7Ci0gICAgICAgIGkg PSAwOwotICAgICAgICBsZW4gPSAtMTsKLSAgICAgICAgd2hpbGUgKCFudWxsbGluZSAmJiAoY2gg PSBodHRwX2luYygwKSkgPj0gMCAmJiBpIDwgSFRUUEJVRkxFTikgewotICAgICAgICAgICAgYnVm W2ldID0gY2g7Ci0gICAgICAgICAgICBpZiAoYnVmW2ldID09IDEwKSB7ICAgICAgICAgLyogZm91 bmQgZW5kIG9mIGxpbmUgKi8KLSAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgYnVmW2ktMV0g PT0gMTMpCi0gICAgICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICAgICAgaWYgKGkgPCAx KQotICAgICAgICAgICAgICAgICAgbnVsbGxpbmUgPSAxOwotICAgICAgICAgICAgICAgIGJ1Zltp XSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5ICYmICFudWxsbGluZSAmJiBoZGNu dCA8IEhUVFBIRUFEQ05UKQotICAgICAgICAgICAgICAgICAgbWFrZXN0cigmaGVhZGVyc1toZGNu dCsrXSxidWYpOwotICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAoYnVmLCJIVFRQIiw0LDAp KSB7Ci0gICAgICAgICAgICAgICAgICAgIGh0dHBfZm5kID0gMTsKLSAgICAgICAgICAgICAgICAg ICAgaiA9IGNraW5kZXgoIiAiLGJ1ZiwwLDAsMCk7Ci0gICAgICAgICAgICAgICAgICAgIHAgPSAm YnVmW2pdOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqcCkpCi0gICAgICAg ICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBbMF0pIHsK LSAgICAgICAgICAgICAgICAgICAgICBjYXNlICcxJzogICAgICAgICAvKiBJbmZvcm1hdGlvbmFs IG1lc3NhZ2UgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgJzInOiAgICAgICAgIC8qIFN1Y2Nlc3MgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzMnOiAgICAgICAg IC8qIFJlZGlyZWN0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNCc6ICAgICAg ICAgLyogQ2xpZW50IGZhaWx1cmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICBjYXNlICc1Jzog ICAgICAgICAvKiBTZXJ2ZXIgZmFpbHVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1 bHQ6ICAgICAgICAgIC8qIFVua25vd24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh cXVpZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRmFpbHVyZTogU2VydmVy IHJlcG9ydHMgJXNcbiIscCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByYyA9IC0xOwotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGh0dHBfc2V0X2NvZGVfcmVw bHkocCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg KCFja3N0cmNtcChidWYsIkNvbm5lY3Rpb246IiwxMSwwKSkgewotICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCBja2luZGV4KCJjbG9zZSIsYnVmLDExLDAsMCkgIT0gMCApCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2xvc2Vjb24gPSAxOwotICAgICAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKCFja3N0cmNtcChidWYsIkNvbnRlbnQtTGVuZ3RoOiIsMTUsMCkpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGxlbiA9IGF0b2koJmJ1ZlsxNl0pOwotICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKCFja3N0cmNtcChidWYsIlRyYW5zZmVyLUVuY29kaW5nOiIsMTgsMCkpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2tpbmRleCgiY2h1bmtlZCIsYnVmLDE4LDAs MCkgIT0gMCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtlZCA9IDE7Ci0JCQlk ZWJ1ZyhGMTAxLCJodHRwX3B1dCBjaHVua2VkIiwiIixjaHVua2VkKTsKLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIHN0ZGlvICkKLSAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiJXNcbiIsYnVmKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgaSA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGkr KzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoY2ggPCAwICYmIGZpcnN0 KSB7Ci0gICAgICAgICAgICBmaXJzdC0tOwotICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwotICAg ICAgICAgICAgaHR0cF9yZW9wZW4oKTsKLSAgICAgICAgICAgIGdvdG8gcHV0cmVxOwotICAgICAg ICB9Ci0gICAgICAgIGlmICggaHR0cF9mbmQgPT0gMCApIHsKLSAgICAgICAgICAgIGNsb3NlY29u ID0gMTsKLSAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgICAgICAgICBnb3RvIHB1dGV4aXQ7Ci0g ICAgICAgIH0KLQotICAgICAgICAvKiBBbnkgcmVzcG9uc2UgZGF0YT8gKi8KLSAgICAgICAgaWYg KCBkZXN0ICYmIGRlc3RbMF0gKSB7Ci0gICAgICAgICAgICBpZiAoem9wZW5vKFpPRklMRSxkZXN0 LE5VTEwsTlVMTCkpCi0gICAgICAgICAgICAgICAgemZpbGUgPSAxOwotICAgICAgICAgICAgZWxz ZQotICAgICAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIGNo dW5rZWQgKSB7Ci0gICAgICAgICAgICB3aGlsZSAoKGxlbiA9IGh0dHBfZ2V0X2NodW5rX2xlbigp KSA+IDApIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAobGVuICYmIChjaCA9IGh0dHBfaW5jKDAp KSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxlbi0tOwotICAgICAgICAgICAgICAgICAg ICBpZiAoIHpmaWxlICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHpjaG91dChaT0ZJTEUsKENI QVIpY2gpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIHN0ZGlvICkKLSAgICAgICAgICAgICAg ICAgICAgICAgIGNvbm9jKChDSEFSKWNoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgaWYgKChjaCA9IGh0dHBfaW5jKDApKSAhPSBDUikKLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKChjaCA9IGh0dHBfaW5jKDApKSAhPSBMRikKLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICB3aGlsZSAobGVuICYmIChjaCA9IGh0dHBfaW5jKDApKSA+PSAwKSB7Ci0g ICAgICAgICAgICAgICAgbGVuLS07Ci0gICAgICAgICAgICAgICAgaWYgKCB6ZmlsZSApCi0gICAg ICAgICAgICAgICAgICAgIHpjaG91dChaT0ZJTEUsKENIQVIpY2gpOwotICAgICAgICAgICAgICAg IGlmICggc3RkaW8gKQotICAgICAgICAgICAgICAgICAgICBjb25vYygoQ0hBUiljaCk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIHpmaWxlICkKLSAgICAgICAgICAg IHpjbG9zZShaT0ZJTEUpOwotCi0gICAgICAgIGlmICggY2h1bmtlZCApIHsgICAgICAgICAgICAv KiBQYXJzZSBUcmFpbGluZyBIZWFkZXJzICovCi0gICAgICAgICAgICBudWxsbGluZSA9IDA7Ci0g ICAgICAgICAgICB3aGlsZSAoIW51bGxsaW5lICYmIChjaCA9IGh0dHBfaW5jKDApKSA+PSAwICYm IGkgPCBIVFRQQlVGTEVOKSB7Ci0gICAgICAgICAgICAgICAgYnVmW2ldID0gY2g7Ci0gICAgICAg ICAgICAgICAgaWYgKCBidWZbaV0gPT0gMTAgKSB7IC8qIGZvdW5kIGVuZCBvZiBsaW5lICovCi0g ICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBidWZbaS0xXSA9PSAxMykKLSAgICAgICAg ICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgMSkKLSAgICAg ICAgICAgICAgICAgICAgICBudWxsbGluZSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGJ1Zltp XSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcnJheSAmJiAhbnVsbGxpbmUgJiYg aGRjbnQgPCBIVFRQSEVBRENOVCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmhl YWRlcnNbaGRjbnQrK10sYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcChi dWYsIkNvbm5lY3Rpb246IiwxMSwwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBj a2luZGV4KCJjbG9zZSIsYnVmLDExLDAsMCkgIT0gMCApCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2xvc2Vjb24gPSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgIGkgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg ICAgIGkrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICB9IGVsc2UgewotICAgICAgICByYyA9IC0xOwotICAgIH0KLQotICBwdXRleGl0OgotICAgIGlm ICggYXJyYXkgKQotICAgICAgICBodHRwX21rYXJyYXkoaGVhZGVycyxoZGNudCxhcnJheSk7Ci0K LSAgICBpZiAoY2xvc2Vjb24pCi0gICAgICAgIGh0dHBfY2xvc2UoKTsKLSAgICBmcmVlKHJlcXVl c3QpOwotICAgIGZvciAoaSA9IDA7IGkgPCBoZGNudDsgaSsrKSB7Ci0gICAgICAgIGlmIChoZWFk ZXJzW2ldKQotICAgICAgICAgIGZyZWUoaGVhZGVyc1tpXSk7Ci0gICAgfQotICAgIHJldHVybihy Yyk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1odHRwX2RlbGV0ZShjaGFyICogYWdlbnQs IGNoYXIgKiogaGRybGlzdCwgY2hhciAqIHVzZXIsCi0gICAgICAgICAgY2hhciAqIHB3ZCwgY2hh ciBhcnJheSwgY2hhciAqIHJlbW90ZSkKLSNlbHNlCi1odHRwX2RlbGV0ZShhZ2VudCwgaGRybGlz dCwgdXNlciwgcHdkLCBhcnJheSwgcmVtb3RlKQotICAgIGNoYXIgKiBhZ2VudDsgY2hhciAqKiBo ZHJsaXN0OyBjaGFyICogdXNlcjsKLSAgICBjaGFyICogcHdkOyBjaGFyIGFycmF5OyBjaGFyICog cmVtb3RlOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgY2hhciAqIHJlcXVlc3Q9TlVM TDsKLSAgICBpbnQgICAgaSwgaiwgbGVuID0gMCwgaGRjbnQgPSAwLCByYyA9IDA7Ci0gICAgaW50 ICAgIGNoOwotICAgIGludCAgICBodHRwX2ZuZCA9IDA7Ci0gICAgY2hhciAgIGJ1ZltIVFRQQlVG TEVOXSwgKnA7Ci0gICAgaW50ICAgIG51bGxsaW5lOwotICAgIHRpbWVfdCBtb2RfdDsKLSAgICB0 aW1lX3Qgc3J2X3Q7Ci0gICAgdGltZV90IGxvY2FsX3Q7Ci0gICAgY2hhciBwYXNzd2RbNjRdOwot ICAgIGNoYXIgYjY0aW5bMTI4XTsKLSAgICBjaGFyIGI2NG91dFsyNTZdOwotICAgIGNoYXIgKiBo ZWFkZXJzW0hUVFBIRUFEQ05UXTsKLSAgICBpbnQgIGNsb3NlY29uID0gMDsKLSAgICBpbnQgIGNo dW5rZWQgPSAwOwotICAgIGludCAgZmlyc3QgPSAxOwotCi0gICAgaWYgKGh0dHBmZCA9PSAtMSkK LSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAoYXJyYXkpIHsKLSAgICAgICAgZm9yIChpID0g MDsgaSA8IEhUVFBIRUFEQ05UOyBpKyspCi0gICAgICAgICAgaGVhZGVyc1tpXSA9IE5VTEw7Ci0g ICAgfQotCi0gICAgLyogQ29tcHV0ZSBsZW5ndGggb2YgcmVxdWVzdCBoZWFkZXIgKi8KLSAgICBs ZW4gPSAxMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVMRVRFICovCi0gICAgbGVu ICs9IHN0cmxlbihIVFRQX1ZFUlNJT04pOwotICAgIGxlbiArPSBzdHJsZW4ocmVtb3RlKTsKLSAg ICBsZW4gKz0gMTY7Ci0KLSAgICBpZiAoIGhkcmxpc3QgKSB7Ci0gICAgICAgIGZvciAoaSA9IDA7 IGhkcmxpc3RbaV07IGkrKykKLSAgICAgICAgICAgIGxlbiArPSBzdHJsZW4oaGRybGlzdFtpXSkg KyAyOwotICAgIH0KLSAgICBsZW4gKz0gc3RybGVuKGh0dHBfaG9zdF9wb3J0KSArIDg7Ci0KLSAg ICBpZiAoYWdlbnQpCi0gICAgICBsZW4gKz0gMTMgKyBzdHJsZW4oYWdlbnQpOwotICAgIGlmICh1 c2VyKSB7Ci0gICAgICAgIGlmICghcHdkKSB7Ci0gICAgICAgICAgICByZWFkcGFzcygiUGFzc3dv cmQ6ICIscGFzc3dkLDY0KTsKLSAgICAgICAgICAgIHB3ZCA9IHBhc3N3ZDsKLSAgICAgICAgfQot ICAgICAgICBja21ha21zZyhiNjRpbixzaXplb2YoYjY0aW4pLHVzZXIsIjoiLHB3ZCxOVUxMKTsK LSAgICAgICAgaiA9IGI4dG9iNjQoYjY0aW4sc3RybGVuKGI2NGluKSxiNjRvdXQsMjU2KTsKLSAg ICAgICAgbWVtc2V0KHB3ZCwwLHN0cmxlbihwd2QpKTsKLSAgICAgICAgaWYgKGogPCAwKQotICAg ICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIGI2NG91dFtqXSA9ICdcMCc7Ci0gICAgICAgIGxl biArPSBqICsgMjQ7Ci0gICAgfQotICAgIGxlbiArPSAzMjsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIERhdGU6ICovCi0jaWZkZWYgSFRUUF9DTE9TRQotICAgIGxlbiArPSAxOTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb246IGNsb3NlICovCi0jZW5kaWYKLSAgICBs ZW4gKz0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBibGFuayBsaW5lICsgbnVsbCAq LwotCi0gICAgcmVxdWVzdCA9IG1hbGxvYyhsZW4pOwotICAgIGlmICghcmVxdWVzdCkKLSAgICAg IHJldHVybigtMSk7Ci0KLSAgICBzcHJpbnRmKHJlcXVlc3QsIkRFTEVURSAlcyAlc1xyXG4iLHJl bW90ZSxIVFRQX1ZFUlNJT04pOwotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJEYXRlOiAiLGxlbik7 Ci0jaWZkZWYgQ01EQVRFMlRNCi0gICAgY2tzdHJuY2F0KHJlcXVlc3QsaHR0cF9ub3coKSxsZW4p OwotI2Vsc2UKLSAgICBja3N0cm5jYXQocmVxdWVzdCwuLi4sbGVuKTsKLSNlbmRpZiAvKiBDTURB VEUyVE0gKi8KLSAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICBja3N0cm5j YXQocmVxdWVzdCwiSG9zdDogIiwgbGVuKTsKLSAgICBja3N0cm5jYXQocmVxdWVzdCxodHRwX2hv c3RfcG9ydCwgbGVuKTsKLSAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICBp ZiAoYWdlbnQpIHsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlVzZXItYWdlbnQ6ICIsbGVu KTsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsYWdlbnQsbGVuKTsKLSAgICAgICAgY2tzdHJu Y2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0gICAgfQotICAgIGlmICh1c2VyKSB7Ci0gICAgICAg IGNrc3RybmNhdChyZXF1ZXN0LCJBdXRob3JpemF0aW9uOiBCYXNpYyAiLGxlbik7Ci0gICAgICAg IGNrc3RybmNhdChyZXF1ZXN0LGI2NG91dCxsZW4pOwotICAgICAgICBja3N0cm5jYXQocmVxdWVz dCwiXHJcbiIsbGVuKTsKLSAgICB9Ci0gICAgaWYgKCBoZHJsaXN0ICkgewotICAgICAgICBmb3Ig KGkgPSAwOyBoZHJsaXN0W2ldOyBpKyspIHsKLSAgICAgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0 LGhkcmxpc3RbaV0sbGVuKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixs ZW4pOwotICAgICAgICB9Ci0gICAgfQotI2lmZGVmIEhUVFBfQ0xPU0UKLSAgICBja3N0cm5jYXQo cmVxdWVzdCwiQ29ubmVjdGlvbjogY2xvc2VcclxuIixsZW4pOwotI2VuZGlmCi0gICAgY2tzdHJu Y2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0gIGRlbHJlcToKLSAgICBpZiAoaHR0cF90b2woKENI QVIgKilyZXF1ZXN0LHN0cmxlbihyZXF1ZXN0KSkgPCAwKQotICAgIHsKLSAgICAgICAgaHR0cF9j bG9zZSgpOwotICAgICAgICBpZiAoIGZpcnN0ICkgewotICAgICAgICAgICAgZmlyc3QtLTsKLSAg ICAgICAgICAgIGh0dHBfcmVvcGVuKCk7Ci0gICAgICAgICAgICBnb3RvIGRlbHJlcTsKLSAgICAg ICAgfQotICAgICAgICByYyA9IC0xOwotICAgICAgICBnb3RvIGRlbGV4aXQ7Ci0gICAgfQotCi0g ICAgLyogUHJvY2VzcyB0aGUgcmVzcG9uc2UgaGVhZGVycyAqLwotICAgIGxvY2FsX3QgPSB0aW1l KE5VTEwpOwotICAgIG51bGxsaW5lID0gMDsKLSAgICBpID0gMDsKLSAgICBsZW4gPSAtMTsKLSAg ICB3aGlsZSAoIW51bGxsaW5lICYmIChjaCA9IGh0dHBfaW5jKDApKSA+PSAwICYmIGkgPCBIVFRQ QlVGTEVOKSB7Ci0gICAgICAgIGJ1ZltpXSA9IGNoOwotICAgICAgICBpZiAoYnVmW2ldID09IDEw KSB7ICAgICAgICAgLyogZm91bmQgZW5kIG9mIGxpbmUgKi8KLSAgICAgICAgICAgIGlmIChpID4g MCAmJiBidWZbaS0xXSA9PSAxMykKLSAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgaWYg KGkgPCAxKQotICAgICAgICAgICAgICBudWxsbGluZSA9IDE7Ci0gICAgICAgICAgICBidWZbaV0g PSAnXDAnOwotICAgICAgICAgICAgaWYgKGFycmF5ICYmICFudWxsbGluZSAmJiBoZGNudCA8IEhU VFBIRUFEQ05UKQotICAgICAgICAgICAgICAgIG1ha2VzdHIoJmhlYWRlcnNbaGRjbnQrK10sYnVm KTsKLSAgICAgICAgICAgIGlmICghY2tzdHJjbXAoYnVmLCJIVFRQIiw0LDApKSB7Ci0gICAgICAg ICAgICAgICAgaHR0cF9mbmQgPSAxOwotICAgICAgICAgICAgICAgIGogPSBja2luZGV4KCIgIixi dWYsMCwwLDApOwotICAgICAgICAgICAgICAgIHAgPSAmYnVmW2pdOwotICAgICAgICAgICAgICAg IHdoaWxlIChpc3NwYWNlKCpwKSkKLSAgICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAg ICAgICBzd2l0Y2ggKHBbMF0pIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAgICAgICAg ICAgICAvKiBJbmZvcm1hdGlvbmFsIG1lc3NhZ2UgKi8KLSAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlICcyJzogICAgICAgICAgICAgLyogU3VjY2VzcyAq LwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJzMn OiAgICAgICAgICAgICAvKiBSZWRpcmVjdGlvbiAqLwotICAgICAgICAgICAgICAgICAgY2FzZSAn NCc6ICAgICAgICAgICAgIC8qIENsaWVudCBmYWlsdXJlICovCi0gICAgICAgICAgICAgICAgICBj YXNlICc1JzogICAgICAgICAgICAgLyogU2VydmVyIGZhaWx1cmUgKi8KLSAgICAgICAgICAgICAg ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAvKiBVbmtub3duICovCi0gICAgICAgICAgICAgICAg ICAgIGlmICghcXVpZXQpCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsdXJlOiBT ZXJ2ZXIgcmVwb3J0cyAlc1xuIixwKTsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaHR0cF9zZXRfY29kZV9yZXBseShwKTsK LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcChidWYs IkNvbm5lY3Rpb246IiwxMSwwKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIGNraW5kZXgo ImNsb3NlIixidWYsMTEsMCwwKSAhPSAwICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb3Nl Y29uID0gMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChidWYsIkNvbnRl bnQtTGVuZ3RoOiIsMTUsMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbGVuID0gYXRvaSgmYnVm WzE2XSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoYnVmLCJUcmFuc2Zl ci1FbmNvZGluZzoiLDE4LDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggY2tpbmRleCgi Y2h1bmtlZCIsYnVmLDE4LDAsMCkgIT0gMCApCi0gICAgICAgICAgICAgICAgICAgICAgICBjaHVu a2VkID0gMTsKLQkJICAgIGRlYnVnKEYxMDEsImh0dHBfZGVsZXRlIGNodW5rZWQiLCIiLGNodW5r ZWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLGJ1 Zik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpID0gMDsKLSAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY2ggPCAwICYmIGZp cnN0KSB7Ci0gICAgICAgIGZpcnN0LS07Ci0gICAgICAgIGh0dHBfY2xvc2UoKTsKLSAgICAgICAg aHR0cF9yZW9wZW4oKTsKLSAgICAgICAgZ290byBkZWxyZXE7Ci0gICAgfQotICAgIGlmICggaHR0 cF9mbmQgPT0gMCApIHsKLSAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgY2xvc2Vjb24gPSAxOwot ICAgICAgICBnb3RvIGRlbGV4aXQ7Ci0gICAgfQotCi0gICAgLyogQW55IHJlc3BvbnNlIGRhdGE/ ICovCi0gICAgaWYgKCBjaHVua2VkICkgewotICAgICAgICB3aGlsZSAoKGxlbiA9IGh0dHBfZ2V0 X2NodW5rX2xlbigpKSA+IDApIHsKLSAgICAgICAgICAgIHdoaWxlIChsZW4gJiYgKGNoID0gaHR0 cF9pbmMoMCkpID49IDApIHsKLSAgICAgICAgICAgICAgICBsZW4tLTsKLSAgICAgICAgICAgICAg ICBjb25vYygoQ0hBUiljaCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGNoID0g aHR0cF9pbmMoMCkpICE9IENSKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg aWYgKChjaCA9IGh0dHBfaW5jKDApKSAhPSBMRikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlIChsZW4gJiYgKGNoID0gaHR0cF9p bmMoMCkpID49IDApIHsKLSAgICAgICAgICAgIGxlbi0tOwotICAgICAgICAgICAgY29ub2MoKENI QVIpY2gpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCBjaHVua2VkICkgeyAgICAgICAg ICAgIC8qIFBhcnNlIFRyYWlsaW5nIEhlYWRlcnMgKi8KLSAgICAgICAgbnVsbGxpbmUgPSAwOwot ICAgICAgICB3aGlsZSAoIW51bGxsaW5lICYmIChjaCA9IGh0dHBfaW5jKDApKSA+PSAwICYmIGkg PCBIVFRQQlVGTEVOKSB7Ci0gICAgICAgICAgICBidWZbaV0gPSBjaDsKLSAgICAgICAgICAgIGlm ICggYnVmW2ldID09IDEwICkgeyAvKiBmb3VuZCBlbmQgb2YgbGluZSAqLwotICAgICAgICAgICAg ICAgIGlmIChpID4gMCAmJiBidWZbaS0xXSA9PSAxMykKLSAgICAgICAgICAgICAgICAgIGktLTsK LSAgICAgICAgICAgICAgICBpZiAoaSA8IDEpCi0gICAgICAgICAgICAgICAgICBudWxsbGluZSA9 IDE7Ci0gICAgICAgICAgICAgICAgYnVmW2ldID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBpZiAo YXJyYXkgJiYgIW51bGxsaW5lICYmIGhkY250IDwgSFRUUEhFQURDTlQpCi0gICAgICAgICAgICAg ICAgICAgIG1ha2VzdHIoJmhlYWRlcnNbaGRjbnQrK10sYnVmKTsKLSAgICAgICAgICAgICAgICBp ZiAoIWNrc3RyY21wKGJ1ZiwiQ29ubmVjdGlvbjoiLDExLDApKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGlmICggY2tpbmRleCgiY2xvc2UiLGJ1ZiwxMSwwLDApICE9IDAgKQotICAgICAgICAgICAg ICAgICAgICAgICAgY2xvc2Vjb24gPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBpID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaSsrOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gIGRlbGV4aXQ6Ci0gICAgaWYgKGFy cmF5KQotICAgICAgICBodHRwX21rYXJyYXkoaGVhZGVycyxoZGNudCxhcnJheSk7Ci0KLSAgICBp ZiAoY2xvc2Vjb24pCi0gICAgICAgIGh0dHBfY2xvc2UoKTsKLSAgICBmcmVlKHJlcXVlc3QpOwot ICAgIGZvciAoaSA9IDA7IGkgPCBoZGNudDsgaSsrKSB7Ci0gICAgICAgIGlmIChoZWFkZXJzW2ld KQotICAgICAgICAgIGZyZWUoaGVhZGVyc1tpXSk7Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19 Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1odHRwX3Bvc3QoY2hhciAqIGFnZW50LCBjaGFyICoq IGhkcmxpc3QsIGNoYXIgKiBtaW1lLCBjaGFyICogdXNlciwKLSAgICAgICAgICBjaGFyICogcHdk LCBjaGFyIGFycmF5LCBjaGFyICogbG9jYWwsIGNoYXIgKiByZW1vdGUsCi0gICAgICAgICAgY2hh ciAqIGRlc3QsIGludCBzdGRpbykKLSNlbHNlCi1odHRwX3Bvc3QoYWdlbnQsIGhkcmxpc3QsIG1p bWUsIHVzZXIsIHB3ZCwgYXJyYXksIGxvY2FsLCByZW1vdGUsIGRlc3QsCi0gICAgICAgICAgc3Rk aW8pCi0gICAgY2hhciAqIGFnZW50OyBjaGFyICoqIGhkcmxpc3Q7IGNoYXIgKiBtaW1lOyBjaGFy ICogdXNlcjsKLSAgICBjaGFyICogcHdkOyBjaGFyIGFycmF5OyBjaGFyICogbG9jYWw7IGNoYXIg KiByZW1vdGU7IGNoYXIgKiBkZXN0OwotICAgIGludCBzdGRpbzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotewotICAgIGNoYXIgKiByZXF1ZXN0PU5VTEw7Ci0gICAgaW50ICAgIGksIGosIGxlbiA9 IDAsIGhkY250ID0gMCwgcmMgPSAwOwotICAgIGludCAgICBjaDsKLSAgICBpbnQgICAgaHR0cF9m bmQgPSAwOwotICAgIGNoYXIgICBidWZbSFRUUEJVRkxFTl0sICpwOwotICAgIGludCAgICBudWxs bGluZTsKLSAgICB0aW1lX3QgbW9kX3Q7Ci0gICAgdGltZV90IHNydl90OwotICAgIHRpbWVfdCBs b2NhbF90OwotICAgIGNoYXIgcGFzc3dkWzY0XTsKLSAgICBjaGFyIGI2NGluWzEyOF07Ci0gICAg Y2hhciBiNjRvdXRbMjU2XTsKLSAgICBpbnQgIGZpbGVsZW47Ci0gICAgY2hhciAqIGhlYWRlcnNb SFRUUEhFQURDTlRdOwotICAgIGludCAgY2xvc2Vjb24gPSAwOwotICAgIGludCAgY2h1bmtlZCA9 IDA7Ci0gICAgaW50ICB6ZmlsZSA9IDA7Ci0gICAgaW50ICBmaXJzdCA9IDE7Ci0KLSAgICBpZiAo aHR0cGZkID09IC0xKQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmIChhcnJheSkgewotICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgSFRUUEhFQURDTlQ7IGkrKykKLSAgICAgICAgICBoZWFkZXJz W2ldID0gTlVMTDsKLSAgICB9Ci0gICAgZmlsZWxlbiA9IHpjaGtpKGxvY2FsKTsKLSAgICBpZiAo ZmlsZWxlbiA8IDApCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgLyogQ29tcHV0ZSBsZW5ndGgg b2YgcmVxdWVzdCBoZWFkZXIgKi8KLSAgICBsZW4gPSA5OyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQT1NUICovCi0gICAgbGVuICs9IHN0cmxlbihIVFRQX1ZFUlNJT04pOwotICAgIGxl biArPSBzdHJsZW4ocmVtb3RlKTsKLSAgICBsZW4gKz0gMTY7Ci0KLSAgICBpZiAoIGhkcmxpc3Qg KSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGhkcmxpc3RbaV07IGkrKykKLSAgICAgICAgICAgIGxl biArPSBzdHJsZW4oaGRybGlzdFtpXSkgKyAyOwotICAgIH0KLSAgICBsZW4gKz0gc3RybGVuKGh0 dHBfaG9zdF9wb3J0KSArIDg7Ci0KLSAgICBpZiAoYWdlbnQpCi0gICAgICBsZW4gKz0gMTMgKyBz dHJsZW4oYWdlbnQpOwotICAgIGlmICh1c2VyKSB7Ci0gICAgICAgIGlmICghcHdkKSB7Ci0gICAg ICAgICAgICByZWFkcGFzcygiUGFzc3dvcmQ6ICIscGFzc3dkLDY0KTsKLSAgICAgICAgICAgIHB3 ZCA9IHBhc3N3ZDsKLSAgICAgICAgfQotICAgICAgICBja21ha21zZyhiNjRpbixzaXplb2YoYjY0 aW4pLHVzZXIsIjoiLHB3ZCxOVUxMKTsKLSAgICAgICAgaiA9IGI4dG9iNjQoYjY0aW4sc3RybGVu KGI2NGluKSxiNjRvdXQsMjU2KTsKLSAgICAgICAgbWVtc2V0KHB3ZCwwLHN0cmxlbihwd2QpKTsK LSAgICAgICAgaWYgKGogPCAwKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIGI2NG91 dFtqXSA9ICdcMCc7Ci0gICAgICAgIGxlbiArPSBqICsgMjQ7Ci0gICAgfQotICAgIGxlbiArPSAx NiArIHN0cmxlbihtaW1lKTsgICAgICAgICAgIC8qIENvbnRlbnQtdHlwZTogKi8KLSAgICBsZW4g Kz0gMzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250ZW50LWxlbmd0aDogKi8KLSAg ICBsZW4gKz0gMzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRlOiAqLwotI2lmZGVm IEhUVFBfQ0xPU0UKLSAgICBsZW4gKz0gMTk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b25uZWN0aW9uOiBjbG9zZSAqLwotI2VuZGlmCi0gICAgbGVuICs9IDM7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogYmxhbmsgbGluZSArIG51bGwgKi8KLQotICAgIHJlcXVlc3QgPSBtYWxs b2MobGVuKTsKLSAgICBpZiAoIXJlcXVlc3QpCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgc3By aW50ZihyZXF1ZXN0LCJQT1NUICVzICVzXHJcbiIscmVtb3RlLEhUVFBfVkVSU0lPTik7Ci0gICAg Y2tzdHJuY2F0KHJlcXVlc3QsIkRhdGU6ICIsbGVuKTsKLSAgICBja3N0cm5jYXQocmVxdWVzdCxo dHRwX25vdygpLGxlbik7Ci0gICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0gICAg Y2tzdHJuY2F0KHJlcXVlc3QsIkhvc3Q6ICIsIGxlbik7Ci0gICAgY2tzdHJuY2F0KHJlcXVlc3Qs aHR0cF9ob3N0X3BvcnQsIGxlbik7Ci0gICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7 Ci0gICAgaWYgKGFnZW50KSB7Ci0gICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJVc2VyLWFnZW50 OiAiLGxlbik7Ci0gICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LGFnZW50LGxlbik7Ci0gICAgICAg IGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwotICAgIH0KLSAgICBpZiAodXNlcikgewot ICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiQXV0aG9yaXphdGlvbjogQmFzaWMgIixsZW4pOwot ICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxiNjRvdXQsbGVuKTsKLSAgICAgICAgY2tzdHJuY2F0 KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0gICAgfQotICAgIGlmICggaGRybGlzdCApIHsKLSAgICAg ICAgZm9yIChpID0gMDsgaGRybGlzdFtpXTsgaSsrKSB7Ci0gICAgICAgICAgICBja3N0cm5jYXQo cmVxdWVzdCxoZHJsaXN0W2ldLGxlbik7Ci0gICAgICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwi XHJcbiIsbGVuKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBja3N0cm5jYXQocmVxdWVzdCwiQ29u dGVudC10eXBlOiAiLGxlbik7Ci0gICAgY2tzdHJuY2F0KHJlcXVlc3QsbWltZSxsZW4pOwotICAg IGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwotI2lmZGVmIEhUVFBfQ0xPU0UKLSAgICBj a3N0cm5jYXQocmVxdWVzdCwiQ29ubmVjdGlvbjogY2xvc2VcclxuIixsZW4pOwotI2VuZGlmCi0g ICAgc3ByaW50ZihidWYsIkNvbnRlbnQtbGVuZ3RoOiAlZFxyXG4iLGZpbGVsZW4pOyAvKiBzYWZl ICovCi0gICAgY2tzdHJuY2F0KHJlcXVlc3QsYnVmLGxlbik7Ci0gICAgY2tzdHJuY2F0KHJlcXVl c3QsIlxyXG4iLGxlbik7Ci0jaWZkZWYgQ09NTUVOVAotICAgIC8qIFRoaXMgaXMgYXBwYXJlbnRs eSBhIG1pc3Rha2UgLSB0aGUgcHJldmlvdXMgY2tzdHJuY2F0KCkgYWxyZWFkeSAgKi8KLSAgICAv KiBhcHBlbmRlZCBhIGJsYW5rIGxpbmUgdG8gdGhlIHJlcXVlc3QuICBUaGVyZSBzaG91bGQgb25s eSBiZSBvbmUuICovCi0gICAgLyogU2VydmVycyBhcmUgbm90IHJlcXVpcmVkIGJ5IFJGQyAyNjE2 IHRvIGlnbm9yZSBleHRyYW5lb3VzIGVtcHR5ICAqLwotICAgIC8qIGxpbmVzLiAgLWZkYywgMjgg QXVnIDIwMDUuICovCi0gICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0jZW5kaWYJ LyogQ09NTUVOVCAqLwotCi0gICAgLyogTm93IHdlIGhhdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBm aWxlICovCi0gIHBvc3RvcGVuOgotICAgIGlmICh6b3BlbmkoWklGSUxFLGxvY2FsKSkgewotICAg ICAgcG9zdHJlcToKLSAgICAgICAgaWYgKGh0dHBfdG9sKChDSEFSICopcmVxdWVzdCxzdHJsZW4o cmVxdWVzdCkpIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwotICAg ICAgICAgICAgaWYgKCBmaXJzdCApIHsKLSAgICAgICAgICAgICAgICBmaXJzdC0tOwotICAgICAg ICAgICAgICAgIGh0dHBfcmVvcGVuKCk7Ci0gICAgICAgICAgICAgICAgZ290byBwb3N0cmVxOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgICAgIHpjbG9zZSha SUZJTEUpOwotICAgICAgICAgICAgZ290byBwb3N0ZXhpdDsKLSAgICAgICAgfQotCi0gICAgICAg IGkgPSAwOwotICAgICAgICB3aGlsZSAoemNoaW4oWklGSUxFLCZjaCkgPT0gMCkgewotICAgICAg ICAgICAgYnVmW2krK10gPSBjaDsKLSAgICAgICAgICAgIGlmIChpID09IEhUVFBCVUZMRU4pIHsK LSAgICAgICAgICAgICAgICBodHRwX3RvbCgoQ0hBUiAqKWJ1ZixIVFRQQlVGTEVOKTsKLSAgICAg ICAgICAgICAgICBpID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAo aSA+IDApCi0gICAgICAgICAgaHR0cF90b2woKENIQVIgKilidWYsSFRUUEJVRkxFTik7Ci0gICAg ICAgIHpjbG9zZShaSUZJTEUpOwotCi0gICAgICAgIC8qIFByb2Nlc3MgdGhlIHJlc3BvbnNlIGhl YWRlcnMgKi8KLSAgICAgICAgbG9jYWxfdCA9IHRpbWUoTlVMTCk7Ci0gICAgICAgIG51bGxsaW5l ID0gMDsKLSAgICAgICAgaSA9IDA7Ci0gICAgICAgIGxlbiA9IC0xOwotICAgICAgICB3aGlsZSAo IW51bGxsaW5lICYmIChjaCA9IGh0dHBfaW5jKDApKSA+PSAwICYmIGkgPCBIVFRQQlVGTEVOKSB7 Ci0gICAgICAgICAgICBidWZbaV0gPSBjaDsKLSAgICAgICAgICAgIGlmIChidWZbaV0gPT0gMTAp IHsgICAgICAgICAvKiBmb3VuZCBlbmQgb2YgbGluZSAqLwotICAgICAgICAgICAgICAgIGlmIChp ID4gMCAmJiBidWZbaS0xXSA9PSAxMykKLSAgICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAg ICAgICAgICBpZiAoaSA8IDEpCi0gICAgICAgICAgICAgICAgICBudWxsbGluZSA9IDE7Ci0gICAg ICAgICAgICAgICAgYnVmW2ldID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXkgJiYg IW51bGxsaW5lICYmIGhkY250IDwgSFRUUEhFQURDTlQpCi0gICAgICAgICAgICAgICAgICBtYWtl c3RyKCZoZWFkZXJzW2hkY250KytdLGJ1Zik7Ci0gICAgICAgICAgICAgICAgaWYgKCFja3N0cmNt cChidWYsIkhUVFAiLDQsMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaHR0cF9mbmQgPSAxOwot ICAgICAgICAgICAgICAgICAgICBqID0gY2tpbmRleCgiICIsYnVmLDAsMCwwKTsKLSAgICAgICAg ICAgICAgICAgICAgcCA9ICZidWZbal07Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc3Nw YWNlKCpwKSkKLSAgICAgICAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgICAg IHN3aXRjaCAocFswXSkgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAgICAgICAg IC8qIEluZm9ybWF0aW9uYWwgbWVzc2FnZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMic6ICAgICAgICAgLyogU3VjY2VzcyAq LwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg Y2FzZSAnMyc6ICAgICAgICAgLyogUmVkaXJlY3Rpb24gKi8KLSAgICAgICAgICAgICAgICAgICAg ICBjYXNlICc0JzogICAgICAgICAvKiBDbGllbnQgZmFpbHVyZSAqLwotICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgJzUnOiAgICAgICAgIC8qIFNlcnZlciBmYWlsdXJlICovCi0gICAgICAgICAg ICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgLyogVW5rbm93biAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCFxdWlldCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJGYWlsdXJlOiBTZXJ2ZXIgcmVwb3J0cyAlc1xuIixwKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHJjID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg aHR0cF9zZXRfY29kZV9yZXBseShwKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29ubmVjdGlvbjoiLDExLDApKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNraW5kZXgoImNsb3NlIixidWYsMTEsMCwwKSAh PSAwICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWNvbiA9IDE7Ci0gICAgICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29udGVudC1MZW5ndGg6Iiwx NSwwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gYXRvaSgmYnVmWzE2XSk7Ci0g ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiVHJhbnNmZXItRW5j b2Rpbmc6IiwxOCwwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBja2luZGV4KCJj aHVua2VkIixidWYsMTgsMCwwKSAhPSAwICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aHVua2VkID0gMTsKLQkJCWRlYnVnKEYxMDEsImh0dHBfcG9zdCBjaHVua2VkIiwiIixjaHVua2Vk KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoc3RkaW8p Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLGJ1Zik7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIGkgPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KGNoIDwgMCAmJiBmaXJzdCkgewotICAgICAgICAgICAgZmlyc3QtLTsKLSAgICAgICAgICAgIGh0 dHBfY2xvc2UoKTsKLSAgICAgICAgICAgIGh0dHBfcmVvcGVuKCk7Ci0gICAgICAgICAgICBnb3Rv IHBvc3RvcGVuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChodHRwX2ZuZCA9PSAwKSB7Ci0gICAg ICAgICAgICByYyA9IC0xOwotICAgICAgICAgICAgY2xvc2Vjb24gPSAxOwotICAgICAgICAgICAg Z290byBwb3N0ZXhpdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIEFueSByZXNwb25zZSBkYXRh PyAqLwotICAgICAgICBpZiAoIGRlc3QgJiYgZGVzdFswXSApIHsKLSAgICAgICAgICAgIGlmICh6 b3Blbm8oWk9GSUxFLGRlc3QsTlVMTCxOVUxMKSkKLSAgICAgICAgICAgICAgICB6ZmlsZSA9IDE7 Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgfQot Ci0gICAgICAgIGlmICggY2h1bmtlZCApIHsKLSAgICAgICAgICAgIHdoaWxlICgobGVuID0gaHR0 cF9nZXRfY2h1bmtfbGVuKCkpID4gMCkgewotICAgICAgICAgICAgICAgIHdoaWxlIChsZW4gJiYg KGNoID0gaHR0cF9pbmMoMCkpID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbGVuLS07Ci0g ICAgICAgICAgICAgICAgICAgIGlmICggemZpbGUgKQotICAgICAgICAgICAgICAgICAgICAgICAg emNob3V0KFpPRklMRSwoQ0hBUiljaCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggc3RkaW8g KQotICAgICAgICAgICAgICAgICAgICAgICAgY29ub2MoKENIQVIpY2gpOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKGNoID0gaHR0cF9pbmMoMCkpICE9IENSKQotICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoKGNoID0gaHR0cF9p bmMoMCkpICE9IExGKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdoaWxlIChsZW4gJiYgKGNoID0gaHR0cF9p bmMoMCkpID49IDApIHsKLSAgICAgICAgICAgICAgICBsZW4tLTsKLSAgICAgICAgICAgICAgICBp ZiAoIHpmaWxlICkKLSAgICAgICAgICAgICAgICAgICAgemNob3V0KFpPRklMRSwoQ0hBUiljaCk7 Ci0gICAgICAgICAgICAgICAgaWYgKCBzdGRpbyApCi0gICAgICAgICAgICAgICAgICAgIGNvbm9j KChDSEFSKWNoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICggemZp bGUgKQotICAgICAgICAgICAgemNsb3NlKFpPRklMRSk7Ci0KLSAgICAgICAgaWYgKCBjaHVua2Vk ICkgeyAgICAgICAgICAgIC8qIFBhcnNlIFRyYWlsaW5nIEhlYWRlcnMgKi8KLSAgICAgICAgICAg IG51bGxsaW5lID0gMDsKLSAgICAgICAgICAgIHdoaWxlICghbnVsbGxpbmUgJiYgKGNoID0gaHR0 cF9pbmMoMCkpID49IDAgJiYgaSA8IEhUVFBCVUZMRU4pIHsKLSAgICAgICAgICAgICAgICBidWZb aV0gPSBjaDsKLSAgICAgICAgICAgICAgICBpZiAoIGJ1ZltpXSA9PSAxMCApIHsgLyogZm91bmQg ZW5kIG9mIGxpbmUgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIGJ1ZltpLTFd ID09IDEzKQotICAgICAgICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgICAgICAgICAg aWYgKGkgPCAxKQotICAgICAgICAgICAgICAgICAgICAgIG51bGxsaW5lID0gMTsKLSAgICAgICAg ICAgICAgICAgICAgYnVmW2ldID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5 ICYmICFudWxsbGluZSAmJiBoZGNudCA8IEhUVFBIRUFEQ05UKQotICAgICAgICAgICAgICAgICAg ICAgICAgbWFrZXN0cigmaGVhZGVyc1toZGNudCsrXSxidWYpOwotICAgICAgICAgICAgICAgICAg ICBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29ubmVjdGlvbjoiLDExLDApKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBpZiAoIGNraW5kZXgoImNsb3NlIixidWYsMTEsMCwwKSAhPSAwICkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWNvbiA9IDE7Ci0gICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgaSA9IDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJjID0gLTE7Ci0gICAgfQotCi0g IHBvc3RleGl0OgotICAgIGlmIChhcnJheSkKLSAgICAgICAgaHR0cF9ta2FycmF5KGhlYWRlcnMs aGRjbnQsYXJyYXkpOwotICAgIGlmIChjbG9zZWNvbikKLSAgICAgICAgaHR0cF9jbG9zZSgpOwot ICAgIGZyZWUocmVxdWVzdCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGhkY250OyBpKyspIHsKLSAg ICAgICAgaWYgKGhlYWRlcnNbaV0pCi0gICAgICAgICAgZnJlZShoZWFkZXJzW2ldKTsKLSAgICB9 Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWh0dHBfY29ubmVj dChpbnQgc29ja2V0LCBjaGFyICogYWdlbnQsIGNoYXIgKiogaGRybGlzdCwgY2hhciAqIHVzZXIs Ci0gICAgICAgICAgICAgY2hhciAqIHB3ZCwgY2hhciBhcnJheSwgY2hhciAqIGhvc3RfcG9ydCkK LSNlbHNlCi1odHRwX2Nvbm5lY3Qoc29ja2V0LCBhZ2VudCwgaGRybGlzdCwgdXNlciwgcHdkLCBh cnJheSwgaG9zdF9wb3J0KQotICAgIGludCBzb2NrZXQ7Ci0gICAgY2hhciAqIGFnZW50OyBjaGFy ICoqIGhkcmxpc3Q7IGNoYXIgKiB1c2VyOwotICAgIGNoYXIgKiBwd2Q7IGNoYXIgYXJyYXk7IGNo YXIgKiBob3N0X3BvcnQ7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjaGFyICogcmVx dWVzdD1OVUxMOwotICAgIGludCAgICBpLCBqLCBsZW4gPSAwLCBoZGNudCA9IDAsIHJjID0gMDsK LSAgICBpbnQgICAgaHR0cF9mbmQgPSAwOwotICAgIGNoYXIgICBidWZbSFRUUEJVRkxFTl0sICpw LCBjaDsKLSAgICBpbnQgICAgbnVsbGxpbmU7Ci0gICAgdGltZV90IG1vZF90OwotICAgIHRpbWVf dCBzcnZfdDsKLSAgICB0aW1lX3QgbG9jYWxfdDsKLSAgICBjaGFyIHBhc3N3ZFs2NF07Ci0gICAg Y2hhciBiNjRpblsxMjhdOwotICAgIGNoYXIgYjY0b3V0WzI1Nl07Ci0gICAgY2hhciAqIGhlYWRl cnNbSFRUUEhFQURDTlRdOwotICAgIGludCAgICBjb25uZWN0ZWQgPSAwOwotCi0gICAgdGNwX2h0 dHBfcHJveHlfZXJybm8gPSAwOwotCi0gICAgaWYgKHNvY2tldCA9PSAtMSkKLSAgICAgIHJldHVy bigtMSk7Ci0KLSAgICBpZiAoYXJyYXkpIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IEhUVFBI RUFEQ05UOyBpKyspCi0gICAgICAgICAgaGVhZGVyc1tpXSA9IE5VTEw7Ci0gICAgfQotCi0gICAg LyogQ29tcHV0ZSBsZW5ndGggb2YgcmVxdWVzdCBoZWFkZXIgKi8KLSAgICBsZW4gPSAxMjsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09OTkVDVCAqLwotICAgIGxlbiArPSBzdHJsZW4o SFRUUF9WRVJTSU9OKTsKLSAgICBsZW4gKz0gc3RybGVuKGhvc3RfcG9ydCk7Ci0gICAgbGVuICs9 IChpbnQpIHN0cmxlbihodHRwX2hvc3RfcG9ydCkgKyA4OwotICAgIGxlbiArPSAxNjsKLSAgICBs ZW4gKz0gc3RybGVuKCJQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlXHJcbiIpOwotICAgIGlm ICggaGRybGlzdCApIHsKLSAgICAgICAgZm9yIChpID0gMDsgaGRybGlzdFtpXTsgaSsrKQotICAg ICAgICAgICAgbGVuICs9IHN0cmxlbihoZHJsaXN0W2ldKSArIDI7Ci0gICAgfQotICAgIGlmIChh Z2VudCAmJiBhZ2VudFswXSkKLSAgICAgIGxlbiArPSAxMyArIHN0cmxlbihhZ2VudCk7Ci0gICAg aWYgKHVzZXIgJiYgdXNlclswXSkgewotICAgICAgICBpZiAoIXB3ZCkgewotICAgICAgICAgICAg cmVhZHBhc3MoIlBhc3N3b3JkOiAiLHBhc3N3ZCw2NCk7Ci0gICAgICAgICAgICBwd2QgPSBwYXNz d2Q7Ci0gICAgICAgIH0KLSAgICAgICAgY2ttYWttc2coYjY0aW4sc2l6ZW9mKGI2NGluKSx1c2Vy LCI6Iixwd2QsTlVMTCk7Ci0gICAgICAgIGogPSBiOHRvYjY0KGI2NGluLHN0cmxlbihiNjRpbiks YjY0b3V0LDI1Nik7Ci0gICAgICAgIG1lbXNldChwd2QsMCxzdHJsZW4ocHdkKSk7Ci0gICAgICAg IGlmIChqIDwgMCkKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBiNjRvdXRbal0gPSAn XDAnOwotICAgICAgICBsZW4gKz0gaiArIDcyOwotICAgIH0KLSAgICBsZW4gKz0gMzI7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBEYXRlOiAqLwotICAgIGxlbiArPSAzOyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGJsYW5rIGxpbmUgKyBudWxsICovCi0KLSAgICByZXF1ZXN0ID0g bWFsbG9jKGxlbik7Ci0gICAgaWYgKCFyZXF1ZXN0KQotICAgICAgcmV0dXJuKC0xKTsKLQotICAg IHNwcmludGYocmVxdWVzdCwiQ09OTkVDVCAlcyAlc1xyXG4iLGhvc3RfcG9ydCxIVFRQX1ZFUlNJ T04pOwotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJEYXRlOiAiLGxlbik7Ci0jaWZkZWYgQ01EQVRF MlRNCi0gICAgY2tzdHJuY2F0KHJlcXVlc3QsaHR0cF9ub3coKSxsZW4pOwotI2Vsc2UKLSAgICBz dHJjYXQocmVxdWVzdCwuLi4pOwotI2VuZGlmIC8qIENNREFURTJUTSAqLwotICAgIGNrc3RybmNh dChyZXF1ZXN0LCJcclxuIixsZW4pOwotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJIb3N0OiAiLCBs ZW4pOwotICAgIGNrc3RybmNhdChyZXF1ZXN0LGh0dHBfaG9zdF9wb3J0LCBsZW4pOwotICAgIGNr c3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwotICAgIGlmIChhZ2VudCAmJiBhZ2VudFswXSkg ewotICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiVXNlci1hZ2VudDogIixsZW4pOwotICAgICAg ICBja3N0cm5jYXQocmVxdWVzdCxhZ2VudCxsZW4pOwotICAgICAgICBja3N0cm5jYXQocmVxdWVz dCwiXHJcbiIsbGVuKTsKLSAgICB9Ci0gICAgaWYgKHVzZXIgJiYgdXNlclswXSkgewotICAgICAg ICBja3N0cm5jYXQocmVxdWVzdCwiUHJveHktYXV0aG9yaXphdGlvbjogQmFzaWMgIixsZW4pOwot ICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxiNjRvdXQsbGVuKTsKLSAgICAgICAgY2tzdHJuY2F0 KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0gICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJFeHRlbnNp b246IFNlY3VyaXR5L1JlbW90ZS1QYXNzcGhyYXNlXHJcbiIsbGVuKTsKLSAgICB9Ci0gICAgY2tz dHJuY2F0KHJlcXVlc3QsIlByb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIixsZW4pOwot ICAgIGlmICggaGRybGlzdCApIHsKLSAgICAgICAgZm9yIChpID0gMDsgaGRybGlzdFtpXTsgaSsr KSB7Ci0gICAgICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxoZHJsaXN0W2ldLGxlbik7Ci0gICAg ICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICAgICAgfQotICAgIH0K LSAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICBsZW4gPSBzdHJsZW4ocmVx dWVzdCk7Ci0KLSNpZmRlZiBUQ1BJUExJQgotICAgIC8qIFNlbmQgcmVxdWVzdCAqLwotICAgIGlm IChzb2NrZXRfd3JpdGUoc29ja2V0LChDSEFSICopcmVxdWVzdCxzdHJsZW4ocmVxdWVzdCkpIDwg MCkgewotICAgICAgcmMgPSAtMTsKLSAgICAgIGdvdG8gY29ubmV4aXQ7Ci0gICAgfQotI2Vsc2UK LSAgICBpZiAod3JpdGUoc29ja2V0LChDSEFSICopcmVxdWVzdCxzdHJsZW4ocmVxdWVzdCkpIDwg MCkgeyAvKiBTZW5kIHJlcXVlc3QgKi8KLSAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgZ290byBj b25uZXhpdDsKLSAgICB9Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLQotICAgIC8qIFByb2Nlc3Mg dGhlIHJlc3BvbnNlIGhlYWRlcnMgKi8KLSAgICBsb2NhbF90ID0gdGltZShOVUxMKTsKLSAgICBu dWxsbGluZSA9IDA7Ci0gICAgaSA9IDA7Ci0gICAgd2hpbGUgKCFudWxsbGluZSAmJgotI2lmZGVm IFRDUElQTElCCi0gICAgICAgICAgIChzb2NrZXRfcmVhZChzb2NrZXQsJmNoLDEpID09IDEpICYm Ci0jZWxzZQotICAgICAgICAgICAocmVhZChzb2NrZXQsJmNoLDEpID09IDEpICYmCi0jZW5kaWYg LyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgaSA8IEhUVFBCVUZMRU4pIHsKLSAgICAgICAgYnVm W2ldID0gY2g7Ci0gICAgICAgIGlmIChidWZbaV0gPT0gMTApIHsgICAgICAgICAvKiBmb3VuZCBl bmQgb2YgbGluZSAqLwotICAgICAgICAgICAgaWYgKGkgPiAwICYmIGJ1ZltpLTFdID09IDEzKQot ICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICBpZiAoaSA8IDEpCi0gICAgICAgICAgICAg IG51bGxsaW5lID0gMTsKLSAgICAgICAgICAgIGJ1ZltpXSA9ICdcMCc7Ci0KLSAgICAgICAgICAg IGlmIChhcnJheSAmJiAhbnVsbGxpbmUgJiYgaGRjbnQgPCBIVFRQSEVBRENOVCkKLSAgICAgICAg ICAgICAgICBtYWtlc3RyKCZoZWFkZXJzW2hkY250KytdLGJ1Zik7Ci0gICAgICAgICAgICBpZiAo IWNrc3RyY21wKGJ1ZiwiSFRUUCIsNCwwKSkgewotICAgICAgICAgICAgICAgIGh0dHBfZm5kID0g MTsKLSAgICAgICAgICAgICAgICBqID0gY2tpbmRleCgiICIsYnVmLDAsMCwwKTsKLSAgICAgICAg ICAgICAgICBwID0gJmJ1ZltqXTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqcCkp Ci0gICAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJveHlf ZXJybm8gPSBhdG9pKHApOwotICAgICAgICAgICAgICAgIHN3aXRjaCAocFswXSkgewotICAgICAg ICAgICAgICAgICAgY2FzZSAnMSc6ICAgICAgICAgICAgIC8qIEluZm9ybWF0aW9uYWwgbWVzc2Fn ZSAqLwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug JzInOiAgICAgICAgICAgICAvKiBTdWNjZXNzICovCi0gICAgICAgICAgICAgICAgICAgIGNvbm5l Y3RlZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg Y2FzZSAnMyc6ICAgICAgICAgICAgIC8qIFJlZGlyZWN0aW9uICovCi0gICAgICAgICAgICAgICAg ICBjYXNlICc0JzogICAgICAgICAgICAgLyogQ2xpZW50IGZhaWx1cmUgKi8KLSAgICAgICAgICAg ICAgICAgIGNhc2UgJzUnOiAgICAgICAgICAgICAvKiBTZXJ2ZXIgZmFpbHVyZSAqLwotICAgICAg ICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgIC8qIFVua25vd24gKi8KLSAgICAgICAg ICAgICAgICAgICAgaWYgKCFxdWlldCkKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZh aWx1cmU6IFNlcnZlciByZXBvcnRzICVzXG4iLHApOwotICAgICAgICAgICAgICAgICAgICByYyA9 IC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBodHRwX3NldF9jb2RlX3Jl cGx5KHApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIiVz XG4iLGJ1Zik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpID0gMDsKLSAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIGh0dHBf Zm5kID09IDAgKQotICAgICAgICByYyA9IC0xOwotCi0gICAgaWYgKGFycmF5KQotICAgICAgICBo dHRwX21rYXJyYXkoaGVhZGVycyxoZGNudCxhcnJheSk7Ci0KLSAgY29ubmV4aXQ6Ci0gICAgaWYg KCAhY29ubmVjdGVkICkgewotICAgICAgICBpZiAoIHNvY2tldCA9PSB0dHlmZCApIHsKLSAgICAg ICAgICAgIHR0Y2xvcygwKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggc29ja2V0ID09 IGh0dHBmZCApIHsKLSAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0K LQotICAgIGZyZWUocmVxdWVzdCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGhkY250OyBpKyspIHsK LSAgICAgICAgaWYgKGhlYWRlcnNbaV0pCi0gICAgICAgICAgZnJlZShoZWFkZXJzW2ldKTsKLSAg ICB9Ci0gICAgcmV0dXJuKHJjKTsKLX0KLSNlbmRpZiAvKiBOT0hUVFAgKi8KLQotI2lmZGVmIENL X0ROU19TUlYKLQotI2RlZmluZSBJTkNSX0NIRUNLKHgseSkgeCArPSB5OyBpZiAoeCA+IHNpemUg KyBhbnN3ZXIuYnl0ZXMpIGdvdG8gZG5zb3V0Ci0jZGVmaW5lIENIRUNLKHgseSkgaWYgKHggKyB5 ID4gc2l6ZSArIGFuc3dlci5ieXRlcykgZ290byBkbnNvdXQKLSNkZWZpbmUgTlRPSFNQKHgseSkg eFswXSA8PCA4IHwgeFsxXTsgeCArPSB5Ci0KLSNpZm5kZWYgQ0tRVUVSWVRZUEUKLSNpZmRlZiBV TklYV0FSRQotI2lmbmRlZiBVVzcKLSNkZWZpbmUgQ0tRVUVSWVRZUEUgQ0hBUgotI2VuZGlmIC8q IFVXNyAqLwotI2VuZGlmIC8qIFVOSVhXQVJFICovCi0jZW5kaWYgLyogQ0tRVUVSWVRZUEUgKi8K LQotI2lmbmRlZiBDS1FVRVJZVFlQRQotI2RlZmluZSBDS1FVRVJZVFlQRSBjaGFyCi0jZW5kaWYg LyogQ0tRVUVSWVRZUEUgKi8KLQotLyogMSBpcyBzdWNjZXNzLCAwIGlzIGZhaWx1cmUgKi8KLWlu dAotbG9jYXRlX3Nydl9kbnMoaG9zdCwgc2VydmljZSwgcHJvdG9jb2wsIGFkZHJfcHAsIG5hZGRy cykKLSAgICBjaGFyICpob3N0OwotICAgIGNoYXIgKnNlcnZpY2U7Ci0gICAgY2hhciAqcHJvdG9j b2w7Ci0gICAgc3RydWN0IHNvY2thZGRyICoqYWRkcl9wcDsKLSAgICBpbnQgKm5hZGRyczsKLXsK LSAgICBpbnQgbm91dCwgaiwgY291bnQ7Ci0gICAgdW5pb24gewotICAgICAgICB1bnNpZ25lZCBj aGFyIGJ5dGVzWzIwNDhdOwotICAgICAgICBIRUFERVIgaGRyOwotICAgIH0gYW5zd2VyOwotICAg IHVuc2lnbmVkIGNoYXIgKnA9TlVMTDsKLSAgICBDS1FVRVJZVFlQRSBxdWVyeVtNQVhfRE5TX05B TUVMRU5dOwotI2lmZGVmIENLX0FOU0lDCi0gICAgY29uc3QgY2hhciAqIGg7Ci0jZWxzZQotICAg IGNoYXIgKiBoOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0gICAgc3RydWN0IHNvY2thZGRyICph ZGRyID0gTlVMTDsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IE5VTEw7Ci0gICAgc3Ry dWN0IGhvc3RlbnQgKmhwID0gTlVMTDsKLSAgICBpbnQgdHlwZSwgY2xhc3M7Ci0gICAgaW50IHBy aW9yaXR5LCB3ZWlnaHQsIHNpemUsIGxlbiwgbnVtYW5zd2VycywgbnVtcXVlcmllcywgcmRsZW47 Ci0gICAgdW5zaWduZWQgc2hvcnQgcG9ydDsKLSNpZmRlZiBDS19BTlNJQwotICAgIGNvbnN0Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSAgICAgIGludCBoZHJzaXplID0gc2l6ZW9mKEhFQURFUik7 Ci0gICAgc3RydWN0IHNydl9kbnNfZW50cnkgewotICAgICAgICBzdHJ1Y3Qgc3J2X2Ruc19lbnRy eSAqbmV4dDsKLSAgICAgICAgaW50IHByaW9yaXR5OwotICAgICAgICBpbnQgd2VpZ2h0OwotICAg ICAgICB1bnNpZ25lZCBzaG9ydCBwb3J0OwotICAgICAgICBjaGFyICpob3N0OwotICAgIH07Ci0g ICAgc3RydWN0IHNydl9kbnNfZW50cnkgKmhlYWQgPSBOVUxMOwotICAgIHN0cnVjdCBzcnZfZG5z X2VudHJ5ICpzcnYgPSBOVUxMLCAqZW50cnkgPSBOVUxMOwotICAgIGNoYXIgKiBzID0gTlVMTDsK LQotICAgIG5vdXQgPSAwOwotICAgIGFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopIG1hbGxvYyhz aXplb2Yoc3RydWN0IHNvY2thZGRyKSk7Ci0gICAgaWYgKGFkZHIgPT0gTlVMTCkKLSAgICAgIHJl dHVybiAwOwotCi0gICAgY291bnQgPSAxOwotCi0gICAgLyoKLSAgICAgKiBGaXJzdCBidWlsZCBh IHF1ZXJ5IG9mIHRoZSBmb3JtOgotICAgICAqCi0gICAgICogICBzZXJ2aWNlLnByb3RvY29sLmhv c3QKLSAgICAgKgotICAgICAqIHdoaWNoIHdpbGwgbW9zdCBsaWtlbHkgYmUgc29tZXRoaW5nIGxp a2U6Ci0gICAgICoKLSAgICAgKiAgIF90ZWxuZXQuX3RjcC5ob3N0Ci0gICAgICoKLSAgICAgKi8K LSAgICBpZiAoKChpbnQpc3RybGVuKHNlcnZpY2UpICsgc3RybGVuKHByb3RvY29sKSArIHN0cmxl bihob3N0KSArIDUpCi0gICAgICAgID4gTUFYX0ROU19OQU1FTEVOCi0gICAgICAgICkKLSAgICAg IGdvdG8gZG5zb3V0OwotCi0gICAgLyogUmVhbG0gbmFtZXMgZG9uJ3QgKG5vcm1hbGx5KSBlbmQg d2l0aCAiLiIsIGJ1dCBpZiB0aGUgcXVlcnkKLSAgICAgICBkb2Vzbid0IGVuZCB3aXRoICIuIiBh bmQgZG9lc24ndCBnZXQgYW4gYW5zd2VyIGFzIGlzLCB0aGUKLSAgICAgICByZXNvbHYgY29kZSB3 aWxsIHRyeSBhcHBlbmRpbmcgdGhlIGxvY2FsIGRvbWFpbi4gIFNpbmNlIHRoZQotICAgICAgIHJl YWxtIG5hbWVzIGFyZSBhYnNvbHV0ZXMsIGxldCdzIHN0b3AgdGhhdC4KLQotICAgICAgIEJ1dCBv bmx5IGlmIGEgbmFtZSBoYXMgYmVlbiBzcGVjaWZpZWQuICBJZiB3ZSBhcmUgcGVyZm9ybWluZwot ICAgICAgIGEgc2VhcmNoIG9uIHRoZSBwcmVmaXggYWxvbmUgdGhlbiB0aGUgaW50ZW50aW9uIGlz IHRvIGFsbG93Ci0gICAgICAgdGhlIGxvY2FsIGRvbWFpbiBvciBkb21haW4gc2VhcmNoIGxpc3Rz IHRvIGJlIGV4cGFuZGVkLgotICAgICovCi0gICAgaCA9IGhvc3QgKyBzdHJsZW4gKGhvc3QpOwot ICAgIGNrbWFreG1zZyhxdWVyeSwgc2l6ZW9mKHF1ZXJ5KSwgIl8iLHNlcnZpY2UsIi5fIixwcm90 b2NvbCwiLiIsIGhvc3QsCi0gICAgICAgICAgICAgICgoaCA+IGhvc3QpICYmIChoWy0xXSAhPSAn LicpPyIuIjpOVUxMKSwKLSAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7 Ci0KLSAgICBzaXplID0gcmVzX3NlYXJjaChxdWVyeSwgQ19JTiwgVF9TUlYsIGFuc3dlci5ieXRl cywgc2l6ZW9mKGFuc3dlci5ieXRlcykpOwotCi0gICAgaWYgKHNpemUgPCBoZHJzaXplKQotICAg ICAgZ290byBkbnNvdXQ7Ci0KLSAgICAvKiBXZSBnb3QgYSByZXBseSAtIFNlZSBob3cgbWFueSBh bnN3ZXJzIGl0IGNvbnRhaW5zLiAqLwotCi0gICAgcCA9IGFuc3dlci5ieXRlczsKLQotICAgIG51 bXF1ZXJpZXMgPSBudG9ocyhhbnN3ZXIuaGRyLnFkY291bnQpOwotICAgIG51bWFuc3dlcnMgPSBu dG9ocyhhbnN3ZXIuaGRyLmFuY291bnQpOwotCi0gICAgcCArPSBzaXplb2YoSEVBREVSKTsKLQot ICAgIC8qCi0gICAgICogV2UgbmVlZCB0byBza2lwIG92ZXIgYWxsIG9mIHRoZSBxdWVzdGlvbnMs IHNvIHdlIGhhdmUgdG8gaXRlcmF0ZQotICAgICAqIG92ZXIgZXZlcnkgcXVlcnkgcmVjb3JkLiAg ZG5fZXhwYW5kKCkgaXMgYWJsZSB0byB0ZWxsIHVzIHRoZSBzaXplCi0gICAgICogb2YgY29tcHJl c3NlZCBETlMgbmFtZXMsIHNvIHdlIHVzZSBpdC4KLSAgICAgKi8KLSAgICB3aGlsZSAobnVtcXVl cmllcy0tKSB7Ci0gICAgICAgIGxlbiA9IGRuX2V4cGFuZChhbnN3ZXIuYnl0ZXMsYW5zd2VyLmJ5 dGVzK3NpemUscCxxdWVyeSxzaXplb2YocXVlcnkpKTsKLSAgICAgICAgaWYgKGxlbiA8IDApCi0g ICAgICAgICAgZ290byBkbnNvdXQ7Ci0gICAgICAgIElOQ1JfQ0hFQ0socCwgbGVuICsgNCk7Ci0g ICAgfQotCi0gICAgLyoKLSAgICAgKiBXZSdyZSBub3cgcG9pbnRpbmcgYXQgdGhlIGFuc3dlciBy ZWNvcmRzLiAgT25seSBwcm9jZXNzIHRoZW0gaWYKLSAgICAgKiB0aGV5J3JlIGFjdHVhbGx5IFRf U1JWIHJlY29yZHMgKHRoZXkgbWlnaHQgYmUgQ05BTUUgcmVjb3JkcywKLSAgICAgKiBmb3IgaW5z dGFuY2UpLgotICAgICAqCi0gICAgICogQnV0IGluIGEgRE5TIHJlcGx5LCBpZiB5b3UgZ2V0IGEg Q05BTUUgeW91IGFsd2F5cyBnZXQgdGhlIGFzc29jaWF0ZWQKLSAgICAgKiAicmVhbCIgUlIgZm9y IHRoYXQgQ05BTUUuICBSRkMgMTAzNCwgMy42LjI6Ci0gICAgICoKLSAgICAgKiBDTkFNRSBSUnMg Y2F1c2Ugc3BlY2lhbCBhY3Rpb24gaW4gRE5TIHNvZnR3YXJlLiAgV2hlbiBhIG5hbWUgc2VydmVy Ci0gICAgICogZmFpbHMgdG8gZmluZCBhIGRlc2lyZWQgUlIgaW4gdGhlIHJlc291cmNlIHNldCBh c3NvY2lhdGVkIHdpdGggdGhlCi0gICAgICogZG9tYWluIG5hbWUsIGl0IGNoZWNrcyB0byBzZWUg aWYgdGhlIHJlc291cmNlIHNldCBjb25zaXN0cyBvZiBhIENOQU1FCi0gICAgICogcmVjb3JkIHdp dGggYSBtYXRjaGluZyBjbGFzcy4gIElmIHNvLCB0aGUgbmFtZSBzZXJ2ZXIgaW5jbHVkZXMgdGhl IENOQU1FCi0gICAgICogcmVjb3JkIGluIHRoZSByZXNwb25zZSBhbmQgcmVzdGFydHMgdGhlIHF1 ZXJ5IGF0IHRoZSBkb21haW4gbmFtZQotICAgICAqIHNwZWNpZmllZCBpbiB0aGUgZGF0YSBmaWVs ZCBvZiB0aGUgQ05BTUUgcmVjb3JkLiAgVGhlIG9uZSBleGNlcHRpb24gdG8KLSAgICAgKiB0aGlz IHJ1bGUgaXMgdGhhdCBxdWVyaWVzIHdoaWNoIG1hdGNoIHRoZSBDTkFNRSB0eXBlIGFyZSBub3Qg cmVzdGFydGVkLgotICAgICAqCi0gICAgICogSW4gb3RoZXIgd29yZHMsIENOQU1FcyBkbyBub3Qg bmVlZCB0byBiZSBleHBhbmRlZCBieSB0aGUgY2xpZW50LgotICAgICAqLwotICAgIHdoaWxlIChu dW1hbnN3ZXJzLS0pIHsKLQotICAgICAgICAvKiBGaXJzdCBpcyB0aGUgbmFtZTsgdXNlIGRuX2V4 cGFuZCgpIHRvIGdldCB0aGUgY29tcHJlc3NlZCBzaXplLiAqLwotICAgICAgICBsZW4gPSBkbl9l eHBhbmQoYW5zd2VyLmJ5dGVzLGFuc3dlci5ieXRlcytzaXplLHAscXVlcnksc2l6ZW9mKHF1ZXJ5 KSk7Ci0gICAgICAgIGlmIChsZW4gPCAwKQotICAgICAgICAgIGdvdG8gZG5zb3V0OwotICAgICAg ICBJTkNSX0NIRUNLKHAsIGxlbik7Ci0KLSAgICAgICAgQ0hFQ0socCwyKTsgICAgICAgICAgICAg ICAgICAgICAvKiBRdWVyeSB0eXBlICovCi0gICAgICAgIHR5cGUgPSBOVE9IU1AocCwyKTsKLQot ICAgICAgICBDSEVDSyhwLCA2KTsgICAgICAgICAgICAgICAgICAgIC8qIFF1ZXJ5IGNsYXNzICov Ci0gICAgICAgIGNsYXNzID0gTlRPSFNQKHAsNik7ICAgICAgICAgICAgLyogQWxzbyBza2lwIG92 ZXIgNC1ieXRlIFRUTCAqLwotCi0gICAgICAgIENIRUNLKHAsMik7ICAgICAgICAgICAgICAgICAg ICAgLyogUmVjb3JkIGRhdGEgbGVuZ3RoICovCi0gICAgICAgIHJkbGVuID0gTlRPSFNQKHAsMik7 Ci0gICAgICAgIC8qCi0gICAgICAgICAqIElmIHRoaXMgaXMgYW4gU1JWIHJlY29yZCwgcHJvY2Vz cyBpdC4gIFJlY29yZCBmb3JtYXQgaXM6Ci0gICAgICAgICAqCi0gICAgICAgICAqIFByaW9yaXR5 Ci0gICAgICAgICAqIFdlaWdodAotICAgICAgICAgKiBQb3J0Ci0gICAgICAgICAqIFNlcnZlciBu YW1lCi0gICAgICAgICAqLwotICAgICAgICBpZiAoY2xhc3MgPT0gQ19JTiAmJiB0eXBlID09IFRf U1JWKSB7Ci0gICAgICAgICAgICBDSEVDSyhwLDIpOwotICAgICAgICAgICAgcHJpb3JpdHkgPSBO VE9IU1AocCwyKTsKLSAgICAgICAgICAgIENIRUNLKHAsIDIpOwotICAgICAgICAgICAgd2VpZ2h0 ID0gTlRPSFNQKHAsMik7Ci0gICAgICAgICAgICBDSEVDSyhwLCAyKTsKLSAgICAgICAgICAgIHBv cnQgPSBOVE9IU1AocCwyKTsKLSAgICAgICAgICAgIGxlbiA9IGRuX2V4cGFuZChhbnN3ZXIuCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgYW5zd2VyLmJ5dGVzICsgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVvZihxdWVyeSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgICAgaWYgKGxlbiA8IDApCi0gICAgICAgICAgICAgIGdvdG8gZG5zb3V0OwotICAg ICAgICAgICAgSU5DUl9DSEVDSyhwLCBsZW4pOwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAg ICAqIFdlIGdvdCBldmVyeXRoaW5nLiAgSW5zZXJ0IGl0IGludG8gb3VyIGxpc3QsIGJ1dCBtYWtl IHN1cmUKLSAgICAgICAgICAgICAqIGl0J3MgaW4gdGhlIHJpZ2h0IG9yZGVyLiAgUmlnaHQgbm93 IHdlIGRvbid0IGRvIGFueXRoaW5nCi0gICAgICAgICAgICAgKiB3aXRoIHRoZSB3ZWlnaHQgZmll bGQKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc3J2ID0gKHN0cnVjdCBzcnZfZG5zX2Vu dHJ5ICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3J2X2Ruc19lbnRyeSkpOwotICAgICAgICAgICAg aWYgKHNydiA9PSBOVUxMKQotICAgICAgICAgICAgICBnb3RvIGRuc291dDsKLQotICAgICAgICAg ICAgc3J2LT5wcmlvcml0eSA9IHByaW9yaXR5OwotICAgICAgICAgICAgc3J2LT53ZWlnaHQgPSB3 ZWlnaHQ7Ci0gICAgICAgICAgICBzcnYtPnBvcnQgPSBwb3J0OwotICAgICAgICAgICAgbWFrZXN0 cigmcywoY2hhciAqKXF1ZXJ5KTsgIC8qIHN0cmR1cCgpIGlzIG5vdCBwb3J0YWJsZSAqLwotICAg ICAgICAgICAgc3J2LT5ob3N0ID0gczsKLQotICAgICAgICAgICAgaWYgKGhlYWQgPT0gTlVMTCB8 fCBoZWFkLT5wcmlvcml0eSA+IHNydi0+cHJpb3JpdHkpIHsKLSAgICAgICAgICAgICAgICBzcnYt Pm5leHQgPSBoZWFkOwotICAgICAgICAgICAgICAgIGhlYWQgPSBzcnY7Ci0gICAgICAgICAgICB9 IGVsc2UKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIENvbmZ1c2luZy4g IEluc2VydCBhbiBlbnRyeSBpbnRvIHRoaXMgc3BvdCBvbmx5IGlmOgotICAgICAgICAgICAgICAg ICAqICAuIFRoZSBuZXh0IHBlcnNvbiBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgKGxvd2VyCi0gICAg ICAgICAgICAgICAgICogICAgcHJpb3JpdGllcyBhcmUgcHJlZmVycmVkKSwgb3I6Ci0gICAgICAg ICAgICAgICAgICogIC4gVGhlcmUgaXMgbm8gbmV4dCBlbnRyeSAod2UncmUgYXQgdGhlIGVuZCkK LSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgZm9yIChlbnRyeSA9IGhlYWQ7IGVu dHJ5ICE9IE5VTEw7IGVudHJ5ID0gZW50cnktPm5leHQpCi0gICAgICAgICAgICAgICAgaWYgKChl bnRyeS0+bmV4dCAmJgotICAgICAgICAgICAgICAgICAgICAgZW50cnktPm5leHQtPnByaW9yaXR5 ID4gc3J2LT5wcmlvcml0eSkgfHwKLSAgICAgICAgICAgICAgICAgICAgZW50cnktPm5leHQgPT0g TlVMTCkgewotICAgICAgICAgICAgICAgICAgICBzcnYtPm5leHQgPSBlbnRyeS0+bmV4dDsKLSAg ICAgICAgICAgICAgICAgICAgZW50cnktPm5leHQgPSBzcnY7Ci0gICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgSU5D Ul9DSEVDSyhwLCByZGxlbik7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBOb3cgd2UndmUgZ290 IGEgbGlua2VkIGxpc3Qgb2YgZW50cmllcyBzb3J0ZWQgYnkgcHJpb3JpdHkuCi0gICAgICogU3Rh cnQgbG9va2luZyB1cCBBIHJlY29yZHMgYW5kIHJldHVybmluZyBhZGRyZXNzZXMuCi0gICAgICov Ci0gICAgaWYgKGhlYWQgPT0gTlVMTCkKLSAgICAgIGdvdG8gZG5zb3V0OwotCi0gICAgZm9yIChl bnRyeSA9IGhlYWQ7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gZW50cnktPm5leHQpIHsKLSAgICAg ICAgaHAgPSBnZXRob3N0YnluYW1lKGVudHJ5LT5ob3N0KTsKLSAgICAgICAgaWYgKGhwICE9IDAp IHsKLQotICAgICAgICAgICAgLyogV2F0Y2ggb3V0IC0gbWVtc2V0KCkgYW5kIG1lbWNweSgpIGFy ZSBub3QgcG9ydGFibGUuLi4gKi8KLQotICAgICAgICAgICAgc3dpdGNoIChocC0+aF9hZGRydHlw ZSkgewotICAgICAgICAgICAgICBjYXNlIEFGX0lORVQ6Ci0gICAgICAgICAgICAgICAgZm9yIChq ID0gMDsgaHAtPmhfYWRkcl9saXN0W2pdOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgc2lu ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmYWRkcltub3V0KytdOwotICAgICAgICAgICAgICAg ICAgICBtZW1zZXQgKChjaGFyICopIHNpbiwgMCwgc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHIpKTsK LSAgICAgICAgICAgICAgICAgICAgc2luLT5zaW5fZmFtaWx5ID0gaHAtPmhfYWRkcnR5cGU7Ci0g ICAgICAgICAgICAgICAgICAgIHNpbi0+c2luX3BvcnQgPSBodG9ucyhlbnRyeS0+cG9ydCk7Ci0g ICAgICAgICAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKSAmc2luLT5zaW5fYWRkciwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIGhwLT5oX2FkZHJfbGlzdFtqXSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOyAgICAgICAgICAg ICAvKiBzYWZlICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChub3V0ICsgMSA+PSBjb3VudCkg ewotICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gNTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIHJlYWxsb2MoKGNoYXIgKikgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSAqIGNvdW50KTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGlmICghYWRkcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkbnNvdXQ7 Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChlbnRyeSA9IGhlYWQ7 IGVudHJ5ICE9IE5VTEw7KSB7Ci0gICAgICAgIGZyZWUoZW50cnktPmhvc3QpOwotICAgICAgICBl bnRyeS0+aG9zdCA9IE5VTEw7Ci0gICAgICAgIHNydiA9IGVudHJ5OwotICAgICAgICBlbnRyeSA9 IGVudHJ5LT5uZXh0OwotICAgICAgICBmcmVlKHNydik7Ci0gICAgICAgIHNydiA9IE5VTEw7Ci0g ICAgfQotCi0gIGRuc291dDoKLSAgICBpZiAoc3J2KQotICAgICAgZnJlZShzcnYpOwotCi0gICAg aWYgKG5vdXQgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgLyogTm8gZ29vZCBzZXJ2ZXJzICov Ci0gICAgICAgIGlmIChhZGRyKQotICAgICAgICAgIGZyZWUoYWRkcik7Ci0gICAgICAgIHJldHVy biAwOwotICAgIH0KLSAgICAqYWRkcl9wcCA9IGFkZHI7Ci0gICAgKm5hZGRycyA9IG5vdXQ7Ci0g ICAgcmV0dXJuIDE7Ci19Ci0jdW5kZWYgSU5DUl9DSEVDSwotI3VuZGVmIENIRUNLCi0jdW5kZWYg TlRPSFNQCi0KLSNkZWZpbmUgSU5DUl9DSEVDSyh4LCB5KSB4ICs9IHk7IGlmICh4ID4gc2l6ZSAr IGFuc3dlci5ieXRlcykgXAotICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCi0jZGVm aW5lIENIRUNLKHgsIHkpIGlmICh4ICsgeSA+IHNpemUgKyBhbnN3ZXIuYnl0ZXMpIFwKLSAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAotI2RlZmluZSBOVE9IU1AoeCwgeSkgeFswXSA8 PCA4IHwgeFsxXTsgeCArPSB5Ci0KLWludAotbG9jYXRlX3R4dF9ycihwcmVmaXgsIG5hbWUsIHJl dHN0cikKLSAgICBjaGFyICpwcmVmaXgsICpuYW1lOwotICAgIGNoYXIgKipyZXRzdHI7Ci17Ci0g ICAgdW5pb24gewotICAgICAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzWzIwNDhdOwotICAgICAgICBI RUFERVIgaGRyOwotICAgIH0gYW5zd2VyOwotICAgIHVuc2lnbmVkIGNoYXIgKnA7Ci0gICAgY2hh ciBob3N0W01BWF9ETlNfTkFNRUxFTl0sICpoOwotICAgIGludCBzaXplOwotICAgIGludCB0eXBl LCBjbGFzcywgbnVtYW5zd2VycywgbnVtcXVlcmllcywgcmRsZW4sIGxlbjsKLQotICAgIC8qCi0g ICAgICogRm9ybSBvdXIgcXVlcnksIGFuZCBzZW5kIGl0IHZpYSBETlMKLSAgICAgKi8KLQotICAg IGlmIChuYW1lID09IE5VTEwgfHwgbmFtZVswXSA9PSAnXDAnKSB7Ci0gICAgICAgIHN0cmNweSho b3N0LHByZWZpeCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCBzdHJsZW4ocHJlZml4KSAr IHN0cmxlbihuYW1lKSArIDMgPiBNQVhfRE5TX05BTUVMRU4gKQotICAgICAgICAgICAgcmV0dXJu IDA7Ci0KLSAgICAgICAgLyogUmVhbG0gbmFtZXMgZG9uJ3QgKG5vcm1hbGx5KSBlbmQgd2l0aCAi LiIsIGJ1dCBpZiB0aGUgcXVlcnkKLSAgICAgICAgICAgZG9lc24ndCBlbmQgd2l0aCAiLiIgYW5k IGRvZXNuJ3QgZ2V0IGFuIGFuc3dlciBhcyBpcywgdGhlCi0gICAgICAgICAgIHJlc29sdiBjb2Rl IHdpbGwgdHJ5IGFwcGVuZGluZyB0aGUgbG9jYWwgZG9tYWluLiAgU2luY2UgdGhlCi0gICAgICAg ICAgIHJlYWxtIG5hbWVzIGFyZSBhYnNvbHV0ZXMsIGxldCdzIHN0b3AgdGhhdC4KLQotICAgICAg ICAgICBCdXQgb25seSBpZiBhIG5hbWUgaGFzIGJlZW4gc3BlY2lmaWVkLiAgSWYgd2UgYXJlIHBl cmZvcm1pbmcKLSAgICAgICAgICAgYSBzZWFyY2ggb24gdGhlIHByZWZpeCBhbG9uZSB0aGVuIHRo ZSBpbnRlbnRpb24gaXMgdG8gYWxsb3cKLSAgICAgICAgICAgdGhlIGxvY2FsIGRvbWFpbiBvciBk b21haW4gc2VhcmNoIGxpc3RzIHRvIGJlIGV4cGFuZGVkLgotICAgICAgICAqLwotICAgICAgICBo ID0gaG9zdCArIHN0cmxlbiAoaG9zdCk7Ci0gICAgICAgIGNrbWFrbXNnKGhvc3Qsc2l6ZW9mKGhv c3QpLHByZWZpeCwgIi4iLCBuYW1lLAotICAgICAgICAgICAgICAgICAoKGggPiBob3N0KSAmJiAo aFstMV0gIT0gJy4nKSk/Ii4iOk5VTEwpOwotCi0gICAgfQotICAgIHNpemUgPSByZXNfc2VhcmNo KGhvc3QsIENfSU4sIFRfVFhULCBhbnN3ZXIuYnl0ZXMsIHNpemVvZihhbnN3ZXIuYnl0ZXMpKTsK LQotICAgIGlmIChzaXplIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBwID0gYW5zd2Vy LmJ5dGVzOwotCi0gICAgbnVtcXVlcmllcyA9IG50b2hzKGFuc3dlci5oZHIucWRjb3VudCk7Ci0g ICAgbnVtYW5zd2VycyA9IG50b2hzKGFuc3dlci5oZHIuYW5jb3VudCk7Ci0KLSAgICBwICs9IHNp emVvZihIRUFERVIpOwotCi0gICAgLyoKLSAgICAgKiBXZSBuZWVkIHRvIHNraXAgb3ZlciB0aGUg cXVlc3Rpb25zIGJlZm9yZSB3ZSBjYW4gZ2V0IHRvIHRoZSBhbnN3ZXJzLAotICAgICAqIHdoaWNo IG1lYW5zIHdlIGhhdmUgdG8gaXRlcmF0ZSBvdmVyIGV2ZXJ5IHF1ZXJ5IHJlY29yZC4gIFdlIHVz ZQotICAgICAqIGRuX2V4cGFuZCB0byB0ZWxsIHVzIGhvdyBsb25nIGVhY2ggY29tcHJlc3NlZCBu YW1lIGlzLgotICAgICAqLwotCi0gICAgd2hpbGUgKG51bXF1ZXJpZXMtLSkgewotICAgICAgICBs ZW4gPSBkbl9leHBhbmQoYW5zd2VyLmJ5dGVzLCBhbnN3ZXIuYnl0ZXMgKyBzaXplLCBwLCBob3N0 LAotICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihob3N0KSk7Ci0gICAgICAgIGlmIChs ZW4gPCAwKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIElOQ1JfQ0hFQ0socCwgbGVu ICsgNCk7ICAgICAgICAgLyogTmFtZSBwbHVzIHR5cGUgcGx1cyBjbGFzcyAqLwotICAgIH0KLQot ICAgIC8qCi0gICAgICogV2UncmUgbm93IHBvaW50aW5nIGF0IHRoZSBhbnN3ZXIgcmVjb3Jkcy4g IFByb2Nlc3MgdGhlIGZpcnN0Ci0gICAgICogVFhUIHJlY29yZCB3ZSBmaW5kLgotICAgICAqLwot Ci0gICAgd2hpbGUgKG51bWFuc3dlcnMtLSkgewotCi0gICAgICAgIC8qIEZpcnN0IHRoZSBuYW1l OyB1c2UgZG5fZXhwYW5kIHRvIGdldCB0aGUgY29tcHJlc3NlZCBzaXplICovCi0gICAgICAgIGxl biA9IGRuX2V4cGFuZChhbnN3ZXIuYnl0ZXMsIGFuc3dlci5ieXRlcyArIHNpemUsIHAsCi0gICAg ICAgICAgICAgICAgICAgICAgICBob3N0LCBzaXplb2YoaG9zdCkpOwotICAgICAgICBpZiAobGVu IDwgMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBJTkNSX0NIRUNLKHAsIGxlbik7 Ci0KLSAgICAgICAgLyogTmV4dCBpcyB0aGUgcXVlcnkgdHlwZSAqLwotICAgICAgICBDSEVDSyhw LCAyKTsKLSAgICAgICAgdHlwZSA9IE5UT0hTUChwLDIpOwotCi0gICAgICAgIC8qIE5leHQgaXMg dGhlIHF1ZXJ5IGNsYXNzOyBhbHNvIHNraXAgb3ZlciA0IGJ5dGUgVFRMICovCi0gICAgICAgIENI RUNLKHAsNik7Ci0gICAgICAgIGNsYXNzID0gTlRPSFNQKHAsNik7Ci0KLSAgICAgICAgLyogUmVj b3JkIGRhdGEgbGVuZ3RoIC0gbWFrZSBzdXJlIHdlIGFyZW4ndCB0cnVuY2F0ZWQgKi8KLQotICAg ICAgICBDSEVDSyhwLDIpOwotICAgICAgICByZGxlbiA9IE5UT0hTUChwLDIpOwotCi0gICAgICAg IGlmIChwICsgcmRsZW4gPiBhbnN3ZXIuYnl0ZXMgKyBzaXplKQotICAgICAgICAgICAgcmV0dXJu IDA7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogSWYgdGhpcyBpcyBhIFRYVCByZWNvcmQsIHJl dHVybiB0aGUgc3RyaW5nLiAgTm90ZSB0aGF0IHRoZQotICAgICAgICAgKiBzdHJpbmcgaGFzIGEg MS1ieXRlIGxlbmd0aCBpbiB0aGUgZnJvbnQKLSAgICAgICAgICovCi0gICAgICAgIC8qIFhYWCBX aGF0IGFib3V0IGZsYWdnaW5nIG11bHRpcGxlIFRYVCByZWNvcmRzIGFzIGFuIGVycm9yPyAgKi8K LQotICAgICAgICBpZiAoY2xhc3MgPT0gQ19JTiAmJiB0eXBlID09IFRfVFhUKSB7Ci0gICAgICAg ICAgICBsZW4gPSAqcCsrOwotICAgICAgICAgICAgaWYgKHAgKyBsZW4gPiBhbnN3ZXIuYnl0ZXMg KyBzaXplKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgKnJldHN0ciA9 IG1hbGxvYyhsZW4gKyAxKTsKLSAgICAgICAgICAgIGlmICgqcmV0c3RyID09IE5VTEwpCi0gICAg ICAgICAgICAgICAgcmV0dXJuIEVOT01FTTsKLSAgICAgICAgICAgIHN0cm5jcHkoKnJldHN0ciwg KGNoYXIgKikgcCwgbGVuKTsKLSAgICAgICAgICAgICgqcmV0c3RyKVtsZW5dID0gJ1wwJzsKLSAg ICAgICAgICAgIC8qIEF2b2lkIGEgY29tbW9uIGVycm9yLiAqLwotICAgICAgICAgICAgaWYgKCAo KnJldHN0cilbbGVuLTFdID09ICcuJyApCi0gICAgICAgICAgICAgICAgKCpyZXRzdHIpW2xlbi0x XSA9ICdcMCc7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0KLQotICAg IHJldHVybiAwOwotfQotI3VuZGVmIElOQ1JfQ0hFQ0sKLSN1bmRlZiBDSEVDSwotI3VuZGVmIE5U T0hTUAotI2VuZGlmIC8qIENLX0ROU19TUlYgKi8KLQotI2lmZGVmIFROQ09ERQotI2lmZGVmIENL X0ZPUldBUkRfWAotI2lmZGVmIFVOSVgKLSNpbmNsdWRlIDxzeXMvdW4uaD4KLSNkZWZpbmUgRldE WF9VTklYX1NPQ0sKLSNpZm5kZWYgQUZfTE9DQUwKLSNkZWZpbmUgQUZfTE9DQUwgQUZfVU5JWAot I2VuZGlmCi0jaWZuZGVmIFBGX0xPQ0FMCi0jZGVmaW5lIFBGX0xPQ0FMIFBGX1VOSVgKLSNlbmRp ZgotI2lmbmRlZiBTVU5fTEVOCi0vKiBFdmFsdWF0ZSB0byBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBg c29ja2FkZHJfdW4nIHN0cnVjdHVyZS4gICovCi0jZGVmaW5lIFNVTl9MRU4ocHRyKSAoKHNpemVf dCkgKCgoc3RydWN0IHNvY2thZGRyX3VuICopIDApLT5zdW5fcGF0aCkgICAgICAgICBcCi0gICAg ICAgICAgICAgICAgICAgICAgKyBzdHJsZW4gKChwdHIpLT5zdW5fcGF0aCkpCi0jZW5kaWYKLSNl bmRpZiAvKiBVTklYICovCi1pbnQKLWZ3ZHhfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoc2NyZWVuKSBp bnQgc2NyZWVuOyB7Ci0jaWZkZWYgTk9QVVRFTlYKLSAgICByZXR1cm4oLTEpOwotI2Vsc2UgLyog Tk9QVVRFTlYgKi8KLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FkZHI7Ci0gICAgaW50IGRpc3Bs YXksIHBvcnQsIHNvY2s9LTEsIGk7Ci0gICAgc3RhdGljIGNoYXIgZW52WzUxMl07Ci0KLSAgICAv KgotICAgICAqIFggV2luZG93cyBTZXJ2ZXJzIHN1cHBvcnQgbXVsdGlwbGUgZGlzcGxheXMgYnkg bGlzdGVuaW5nIG9uCi0gICAgICogb25lIHNvY2tldCBwZXIgZGlzcGxheS4gIERpc3BsYXkgMCBp cyBwb3J0IDYwMDA7IERpc3BsYXkgMSBpcwotICAgICAqIHBvcnQgNjAwMTsgZXRjLgotICAgICAq Ci0gICAgICogV2Ugc3RhcnQgYnkgdHJ5aW5nIHRvIG9wZW4gcG9ydCA2MDAxIHNvIHRoYXQgZGlz cGxheSAwIGlzCi0gICAgICogcmVzZXJ2ZWQgZm9yIHRoZSBsb2NhbCBYIFdpbmRvd3MgU2VydmVy LgotICAgICAqLwotCi0gICAgZm9yICggZGlzcGxheT0xOyBkaXNwbGF5IDwgMTAwMCA7IGRpc3Bs YXkrKyAgKSB7Ci0KLSAgICAgICAgaWYgKChzb2NrID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RS RUFNLCAwKSkgPCAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJmd2R4X2NyZWF0ZV9saXN0 ZW5fc29ja2V0KCkiLCJzb2NrZXQoKSA8IDAiLHNvY2spOwotICAgICAgICAgICAgcmV0dXJuKC0x KTsKLSAgICAgICAgfQotCi0gICAgICAgIHBvcnQgPSA2MDAwICsgZGlzcGxheTsKLSAgICAgICAg Ynplcm8oKGNoYXIgKikmc2FkZHIsIHNpemVvZihzYWRkcikpOwotICAgICAgICBzYWRkci5zaW5f ZmFtaWx5ID0gQUZfSU5FVDsKLSAgICAgICAgc2FkZHIuc2luX2FkZHIuc19hZGRyID0gaW5ldF9h ZGRyKG15aXBhZGRyKTsKLSAgICAgICAgc2FkZHIuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKLQot ICAgICAgICBpZiAoYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJnNhZGRyLCBzaXplb2Yo c2FkZHIpKSA8IDApIHsKLSAgICAgICAgICAgIGkgPSBlcnJubzsgICAgICAgICAgICAgICAgICAv KiBTYXZlIGVycm9yIGNvZGUgKi8KLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICAgICAgc29ja2V0 X2Nsb3NlKHNvY2spOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgIGNsb3NlKHNv Y2spOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgICAgICBzb2NrID0gLTE7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJmd2R4X2NyZWF0ZV9saXN0ZW5fc29ja2V0KCkiLCJiaW5kKCkg PCAwIiwwKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVi dWcoRjEwMCwiZmR3eF9jcmVhdGVfbGlzdGVuX3NvY2tldCgpIGJpbmQgT0siLCIiLDApOwotICAg ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIGRpc3BsYXkgPiAxMDAwICkgewotICAgICAg ICBkZWJ1ZyhGMTAwLCJmd2R4X2NyZWF0ZV9saXN0ZW5fc29ja2V0KCkgT3V0IG9mIERpc3BsYXlz IiwiIiwwKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBpZiAobGlzdGVuKHNv Y2ssIDUpIDwgMCkgewotICAgICAgICBpID0gZXJybm87ICAgICAgICAgICAgICAgICAgLyogU2F2 ZSBlcnJvciBjb2RlICovCi0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgc29ja2V0X2Nsb3NlKHNv Y2spOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAgICAgY2xvc2Uoc29jayk7Ci0jZW5kaWYg LyogVENQSVBMSUIgKi8KLSAgICAgICAgZGVidWcoRjEwMSwiZmR3eF9jcmVhdGVfbGlzdGVuX3Nv Y2tldCgpIGxpc3RlbigpIGVycm5vIiwiIixlcnJubyk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0g ICAgfQotICAgIGRlYnVnKEYxMDAsImZ3ZHhfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoKSBsaXN0ZW4g T0siLCIiLDApOwotCi0gICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5s aXN0ZW5fc29ja2V0ID0gc29jazsKLSAgICBpZiAoIW15aXBhZGRyWzBdKQotICAgICAgICBnZXRs b2NhbGlwYWRkcigpOwotICAgIGlmICggbXlpcGFkZHJbMF0gKQotICAgICAgICBja21ha3htc2co ZW52LHNpemVvZihlbnYpLCJESVNQTEFZPSIsbXlpcGFkZHIsIjoiLAotICAgICAgICAgICAgICAg ICAgY2t1aXRvYShkaXNwbGF5KSwiOiIsY2t1aXRvYShzY3JlZW4pLAotICAgICAgICAgICAgICAg ICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIGVsc2UKLSAgICAgICAgY2tt YWttc2coZW52LHNpemVvZihlbnYpLCJESVNQTEFZPSIsY2t1aXRvYShkaXNwbGF5KSwiOiIsCi0g ICAgICAgICAgICAgICAgIGNrdWl0b2Eoc2NyZWVuKSk7Ci0gICAgcHV0ZW52KGVudik7Ci0gICAg cmV0dXJuKDApOwotI2VuZGlmIC8qIE5PUFVURU5WICovCi19Ci0KLQotaW50Ci1md2R4X29wZW5f Y2xpZW50X2NoYW5uZWwoY2hhbm5lbCkgaW50IGNoYW5uZWw7IHsKLSAgICBjaGFyICogZW52Owot ICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzYWRkcjsKLSNpZmRlZiBGV0RYX1VOSVhfU09DSwotICAg IHN0cnVjdCBzb2NrYWRkcl91biBzYWRkcl91biA9IHsgQUZfTE9DQUwgfTsKLSNlbmRpZiAvKiBG V0RYX1VOSVhfU09DSyAqLwotICAgIGludCBjb2xvbiwgZG90LCBkaXNwbGF5LCBwb3J0LCBzb2Nr LCBpLCBzY3JlZW47Ci0gICAgaW50IGZhbWlseTsKLSAgICBjaGFyIGJ1ZlsyNTZdLCAqIGhvc3Q9 TlVMTCwgKiByZXN0PU5VTEw7Ci0jaWZkZWYgVENQX05PREVMQVkKLSAgICBpbnQgb249MTsKLSNl bmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwotCi0gICAgZGVidWcoRjExMSwiZndkeF9jcmVhdGVfY2xp ZW50X2NoYW5uZWwoKSIsImNoYW5uZWwiLGNoYW5uZWwpOwotCi0gICAgZm9yICggaT0wOyBpPE1B WEZXRFggOyBpKysgKSB7Ci0gICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCku Zm9yd2FyZF94LmNoYW5uZWxbaV0uaWQgPT0gY2hhbm5lbCkgewotICAgICAgICAgICAgLyogQWxy ZWFkeSBvcGVuICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmd2R4X2NyZWF0ZV9jbGllbnRf Y2hhbm5lbCgpIiwiYWxyZWFkeSBvcGVuIiwwKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAg ICAgICAgfQotICAgIH0KLQotICAgIGVudiA9IGdldGVudigiRElTUExBWSIpOwotICAgIGlmICgg IWVudiApCi0gICAgICBlbnYgPSAoY2hhciAqKXRuX2dldF9kaXNwbGF5KCk7Ci0gICAgaWYgKCBl bnYgKQotICAgICAgY2tzdHJuY3B5KGJ1ZixlbnYsMjU2KTsKLSAgICBlbHNlCi0gICAgICBja3N0 cm5jcHkoYnVmLCIxMjcuMC4wLjE6MC4wIiwyNTYpOwotCi0gICAgYnplcm8oKGNoYXIgKikmc2Fk ZHIsc2l6ZW9mKHNhZGRyKSk7Ci0gICAgc2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0KLSAg ICBpZiAoIWZ3ZHhfcGFyc2VfZGlzcGxheW5hbWUoYnVmLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmZmFtaWx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9z dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRpc3BsYXksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZzY3JlZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZyZXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAg KSB7Ci0gICAgICAgIGlmICggaG9zdCApIGZyZWUoaG9zdCk7Ci0gICAgICAgIGlmICggcmVzdCAp IGZyZWUocmVzdCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKHJlc3QpIGZy ZWUocmVzdCk7Ci0KLSNpZm5kZWYgRldEWF9VTklYX1NPQ0sKLSAgLyogaWYgJERJU1BMQVkgaW5k aWNhdGVzIHVzZSBvZiB1bml4IGRvbWFpbiBzb2NrZXRzLCBidXQgd2UgZG9uJ3Qgc3VwcG9ydCBp dCwKLSAgICogd2UgY2hhbmdlIHRoaW5ncyB0byB1c2UgaW5ldCBzb2NrZXRzIG9uIHRoZSBpcCBs b29wYmFjayBpbnRlcmZhY2UgaW5zdGVhZCwKLSAgICogYW5kIGhvcGUgdGhhdCBpdCB3b3Jrcy4K LSAgICovCi0gICAgaWYgKGZhbWlseSA9PSBGYW1pbHlMb2NhbCkgewotICAgICAgICBkZWJ1ZyhG MTAwLCJmd2R4X2NyZWF0ZV9jbGllbnRfY2hhbm5lbCgpIEZhbWlseUxvY2FsIiwiIiwwKTsKLSAg ICAgICAgZmFtaWx5ID0gRmFtaWx5SW50ZXJuZXQ7Ci0gICAgICAgIGlmIChob3N0KSBmcmVlKGhv c3QpOwotICAgICAgICBpZiAoaG9zdCA9IG1hbGxvYyhzdHJsZW4oImxvY2FsaG9zdCIpICsgMSkp Ci0gICAgICAgICAgICBzdHJjcHkoaG9zdCwgImxvY2FsaG9zdCIpOwotICAgICAgICBlbHNlIHsK LSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZSAvKiBGV0RY X1VOSVhfU09DSyAqLwotICAgIGlmIChmYW1pbHkgPT0gRmFtaWx5TG9jYWwpIHsKLSAgICAgICAg aWYgKGhvc3QpIGZyZWUoaG9zdCk7Ci0gICAgICAgIHNvY2sgPSBzb2NrZXQoUEZfTE9DQUwsIFNP Q0tfU1RSRUFNLCAwKTsKLSAgICAgICAgaWYgKHNvY2sgPCAwKQotICAgICAgICAgICAgcmV0dXJu KC0xKTsKLQotICAgICAgICBja21ha21zZyhidWYsc2l6ZW9mKGJ1ZiksIi90bXAvLlgxMS11bml4 L1giLGNraXRvYShkaXNwbGF5KSxOVUxMLE5VTEwpOwotICAgICAgICBzdHJuY3B5KHNhZGRyX3Vu LnN1bl9wYXRoLCBidWYsIHNpemVvZihzYWRkcl91bi5zdW5fcGF0aCkpOwotICAgICAgICBpZiAo Y29ubmVjdChzb2NrLChzdHJ1Y3Qgc29ja2FkZHIgKikmc2FkZHJfdW4sIFNVTl9MRU4oJnNhZGRy X3VuKSkgPCAwKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgfSBlbHNlCi0jZW5kaWYgIC8q IEZXRFhfVU5JWF9TT0NLICovCi0gICAgewotICAgICAgICAvKiBPdGhlcndpc2UsIHdlIGFyZSBh c3N1bWluZyBGYW1pbHlJbnRlcm5ldCAqLwotICAgICAgICBpZiAoaG9zdCkgewotICAgICAgICAg ICAgY2tzdHJuY3B5KGJ1Zixob3N0LHNpemVvZihidWYpKTsKLSAgICAgICAgICAgIGZyZWUoaG9z dCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2tzdHJuY3B5KGJ1ZixteWlwYWRkcixz aXplb2YoYnVmKSk7Ci0KLSAgICAgICAgZGVidWcoRjExMSwiZndkeF9jcmVhdGVfY2xpZW50X2No YW5uZWwoKSIsImRpc3BsYXkiLGRpc3BsYXkpOwotCi0gICAgICAgIHBvcnQgPSA2MDAwICsgZGlz cGxheTsKLSAgICAgICAgc2FkZHIuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKLQotICAgICAgICBk ZWJ1ZyhGMTEwLCJmd2R4X2NyZWF0ZV9jbGllbnRfY2hhbm5lbCgpIGlwLWFkZHJlc3MiLGJ1Ziww KTsKLSAgICAgICAgc2FkZHIuc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKGJ1Zik7Ci0gICAg ICAgIGlmICggc2FkZHIuc2luX2FkZHIuc19hZGRyID09ICh1bnNpZ25lZCBsb25nKSAtMQotI2lm ZGVmIElOQUREUl9OT05FCi0gICAgICAgICAgICAgfHwgc2FkZHIuc2luX2FkZHIuc19hZGRyID09 IElOQUREUl9OT05FCi0jZW5kaWYgLyogSU5BRERSX05PTkUgKi8KLSAgICAgICAgICAgICApCi0g ICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpob3N0OwotICAgICAgICAgICAg aG9zdCA9IGdldGhvc3RieW5hbWUoYnVmKTsKLSAgICAgICAgICAgIGlmICggaG9zdCA9PSBOVUxM ICkKLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgaG9zdCA9IGNrX2Nv cHlob3N0ZW50KGhvc3QpOwotI2lmZGVmIEhBRERSTElTVAotI2lmZGVmIGhfYWRkcgotICAgICAg ICAgICAgLyogVGhpcyBpcyBmb3IgdHJ5aW5nIG11bHRpcGxlIElQIGFkZHJlc3NlcyAtIHNlZSA8 bmV0ZGIuaD4gKi8KLSAgICAgICAgICAgIGlmICghKGhvc3QtPmhfYWRkcl9saXN0KSkKLSAgICAg ICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgYmNvcHkoaG9zdC0+aF9hZGRyX2xp c3RbMF0sCi0gICAgICAgICAgICAgICAgICAgKGNhZGRyX3QpJnNhZGRyLnNpbl9hZGRyLAotICAg ICAgICAgICAgICAgICAgIGhvc3QtPmhfbGVuZ3RoCi0gICAgICAgICAgICAgICAgICAgKTsKLSNl bHNlCi0gICAgICAgICAgICBiY29weShob3N0LT5oX2FkZHIsIChjYWRkcl90KSZzYWRkci5zaW5f YWRkciwgaG9zdC0+aF9sZW5ndGgpOwotI2VuZGlmIC8qIGhfYWRkciAqLwotI2Vsc2UgIC8qIEhB RERSTElTVCAqLwotICAgICAgICAgICAgYmNvcHkoaG9zdC0+aF9hZGRyLCAoY2FkZHJfdCkmc2Fk ZHIuc2luX2FkZHIsIGhvc3QtPmhfbGVuZ3RoKTsKLSNlbmRpZiAvKiBIQUREUkxJU1QgKi8KLSAg ICAgICAgfQotCi0gICAgICAgIGlmICgoc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVB TSwgMCkpIDwgMCkgewotICAgICAgICAgICAgZGVidWcoRjExMSwiZndkeF9jcmVhdGVfY2xpZW50 X2NoYW5uZWwoKSIsInNvY2tldCgpIDwgMCIsc29jayk7Ci0gICAgICAgICAgICByZXR1cm4oLTEp OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2Fk ZHIgKikmc2FkZHIsIHNpemVvZihzYWRkcikpIDwgMCkgewotICAgICAgICAgICAgZGVidWcoRjEx MCwiZndkeF9jcmVhdGVfY2xpZW50X2NoYW5uZWwoKSIsImNvbm5lY3QoKSBmYWlsZWQiLDApOwot I2lmZGVmIFRDUElQTElCCi0gICAgICAgICAgICBzb2NrZXRfY2xvc2Uoc29jayk7Ci0jZWxzZSAv KiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgY2xvc2Uoc29jayk7Ci0jZW5kaWYgLyogVENQSVBM SUIgKi8KLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLQotI2lmZGVmIFRDUF9O T0RFTEFZCi0gICAgICAgIHNldHNvY2tvcHQoc29jayxJUFBST1RPX1RDUCxUQ1BfTk9ERUxBWSwo Y2hhciAqKSZvbixzaXplb2Yob24pKTsKLSNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwotICAgIH0K LQotICAgIGZvciAoaSA9IDA7IGkgPCBNQVhGV0RYOyBpKyspIHsKLSAgICAgaWYgKFRFTE9QVF9T QihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtpXS5pZCA9PSAtMSkgewotICAg ICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2ldLmZk ID0gc29jazsKLSAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gu Y2hhbm5lbFtpXS5pZCA9IGNoYW5uZWw7Ci0gICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJE X1gpLmZvcndhcmRfeC5jaGFubmVsW2ldLm5lZWRfdG9fc2VuZF94YXV0aCA9IDE7Ci0gICAgICAg ICBkZWJ1ZyhGMTExLCJmd2R4X2NyZWF0ZV9jbGllbnRfY2hhbm5lbCgpIiwic29ja2V0Iixzb2Nr KTsKLSAgICAgICAgIHJldHVybigwKTsKLSAgICAgfQotICAgIH0KLSAgICByZXR1cm4oLTEpOwot fQotCi1pbnQKLWZ3ZHhfc2VydmVyX2F2YWlsKCkgewotICAgIGNoYXIgKiBlbnY7Ci0gICAgc3Ry dWN0IHNvY2thZGRyX2luIHNhZGRyOwotI2lmZGVmIEZXRFhfVU5JWF9TT0NLCi0gICAgc3RydWN0 IHNvY2thZGRyX3VuIHNhZGRyX3VuID0geyBBRl9MT0NBTCB9OwotI2VuZGlmICAvKiBGV0RYX1VO SVhfU09DSyAqLwotICAgIGludCBjb2xvbiwgZG90LCBkaXNwbGF5LCBwb3J0LCBzb2NrLCBpLCBz Y3JlZW47Ci0gICAgY2hhciBidWZbMjU2XSwgKmhvc3Q9TlVMTCwgKnJlc3Q9TlVMTDsKLSNpZmRl ZiBUQ1BfTk9ERUxBWQotICAgIGludCBvbj0xOwotI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCi0g ICAgaW50IGZhbWlseTsKLQotICAgIGVudiA9IGdldGVudigiRElTUExBWSIpOwotICAgIGlmICgg IWVudiApCi0gICAgICBlbnYgPSAoY2hhciAqKXRuX2dldF9kaXNwbGF5KCk7Ci0gICAgaWYgKCBl bnYgKQotICAgICAgY2tzdHJuY3B5KGJ1ZixlbnYsMjU2KTsKLSAgICBlbHNlCi0gICAgICBja3N0 cm5jcHkoYnVmLCIxMjcuMC4wLjE6MC4wIiwyNTYpOwotCi0gICAgYnplcm8oKGNoYXIgKikmc2Fk ZHIsc2l6ZW9mKHNhZGRyKSk7Ci0gICAgc2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0KLSAg ICBpZiAoIWZ3ZHhfcGFyc2VfZGlzcGxheW5hbWUoYnVmLCZmYW1pbHksJmhvc3QsJmRpc3BsYXks JnNjcmVlbiwmcmVzdCkpIHsKLSAgICAgICAgaWYgKCBob3N0ICkgZnJlZShob3N0KTsKLSAgICAg ICAgaWYgKCByZXN0ICkgZnJlZShyZXN0KTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAg ICBpZiAocmVzdCkgZnJlZShyZXN0KTsKLQotI2lmbmRlZiBGV0RYX1VOSVhfU09DSwotICAvKiBp ZiAkRElTUExBWSBpbmRpY2F0ZXMgdXNlIG9mIHVuaXggZG9tYWluIHNvY2tldHMsIGJ1dCB3ZSBk b24ndCBzdXBwb3J0IGl0LAotICAgKiB3ZSBjaGFuZ2UgdGhpbmdzIHRvIHVzZSBpbmV0IHNvY2tl dHMgb24gdGhlIGlwIGxvb3BiYWNrIGludGVyZmFjZSBpbnN0ZWFkLAotICAgKiBhbmQgaG9wZSB0 aGF0IGl0IHdvcmtzLgotICAgKi8KLSAgICBpZiAoZmFtaWx5ID09IEZhbWlseUxvY2FsKSB7Ci0g ICAgICAgIGZhbWlseSA9IEZhbWlseUludGVybmV0OwotICAgICAgICBpZiAoaG9zdCkgZnJlZSho b3N0KTsKLSAgICAgICAgaWYgKGhvc3QgPSBtYWxsb2Moc3RybGVuKCJsb2NhbGhvc3QiKSArIDEp KQotICAgICAgICAgICAgc3RyY3B5KGhvc3QsICJsb2NhbGhvc3QiKTsKLSAgICAgICAgZWxzZSB7 Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UgLyogRldE WF9VTklYX1NPQ0sgKi8KLSAgICBpZiAoZmFtaWx5ID09IEZhbWlseUxvY2FsKSB7Ci0gICAgICAg IGRlYnVnKEYxMDAsImZ3ZHhfc2VydmVyX2F2YWlsKCkgRmFtaWx5TG9jYWwiLCIiLDApOwotICAg ICAgICBpZiAoaG9zdCkgZnJlZShob3N0KTsKLSAgICAgICAgc29jayA9IHNvY2tldChQRl9MT0NB TCwgU09DS19TVFJFQU0sIDApOwotICAgICAgICBpZiAoc29jayA8IDApCi0gICAgICAgICAgICBy ZXR1cm4oMCk7Ci0KLSAgICAgICAgY2ttYWttc2coYnVmLHNpemVvZihidWYpLCIvdG1wLy5YMTEt dW5peC9YIixja2l0b2EoZGlzcGxheSksTlVMTCxOVUxMKTsKLSAgICAgICAgc3RybmNweShzYWRk cl91bi5zdW5fcGF0aCwgYnVmLCBzaXplb2Yoc2FkZHJfdW4uc3VuX3BhdGgpKTsKLSAgICAgICAg aWYgKGNvbm5lY3Qoc29jaywoc3RydWN0IHNvY2thZGRyICopJnNhZGRyX3VuLFNVTl9MRU4oJnNh ZGRyX3VuKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICBjbG9zZShzb2Nr KTsKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLSNlbmRpZiAgLyogRldEWF9VTklYX1NPQ0sg Ki8KLQotICAgIC8qIE90aGVyd2lzZSwgd2UgYXJlIGFzc3VtaW5nIEZhbWlseUludGVybmV0ICov Ci0gICAgaWYgKGhvc3QpIHsKLSAgICAgICAgY2tzdHJuY3B5KGJ1Zixob3N0LHNpemVvZihidWYp KTsKLSAgICAgICAgZnJlZShob3N0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2tzdHJuY3B5KGJ1 ZixteWlwYWRkcixzaXplb2YoYnVmKSk7Ci0KLSAgICBkZWJ1ZyhGMTExLCJmd2R4X3NlcnZlcl9h dmFpbCgpIiwiZGlzcGxheSIsZGlzcGxheSk7Ci0KLSAgICBwb3J0ID0gNjAwMCArIGRpc3BsYXk7 Ci0gICAgc2FkZHIuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKLQotICAgIGRlYnVnKEYxMTAsImZ3 ZHhfc2VydmVyX2F2YWlsKCkgaXAtYWRkcmVzcyIsYnVmLDApOwotICAgIHNhZGRyLnNpbl9hZGRy LnNfYWRkciA9IGluZXRfYWRkcihidWYpOwotICAgIGlmICggc2FkZHIuc2luX2FkZHIuc19hZGRy ID09ICh1bnNpZ25lZCBsb25nKSAtMQotI2lmZGVmIElOQUREUl9OT05FCi0gICAgICAgICB8fCBz YWRkci5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX05PTkUKLSNlbmRpZiAvKiBJTkFERFJfTk9O RSAqLwotICAgICAgICAgKQotICAgIHsKLSAgICAgICAgc3RydWN0IGhvc3RlbnQgKmhvc3Q7Ci0g ICAgICAgIGhvc3QgPSBnZXRob3N0YnluYW1lKGJ1Zik7Ci0gICAgICAgIGlmICggaG9zdCA9PSBO VUxMICkgewotICAgICAgICAgICAgZGVidWcoRjExMCwiZndkeF9zZXJ2ZXJfYXZhaWwoKSBnZXRo b3N0YnluYW1lKCkgZmFpbGVkIiwKLSAgICAgICAgICAgICAgICAgICBteWlwYWRkciwwKTsKLSAg ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgaG9zdCA9IGNrX2NvcHlo b3N0ZW50KGhvc3QpOwotI2lmZGVmIEhBRERSTElTVAotI2lmZGVmIGhfYWRkcgotICAgICAgICAv KiBUaGlzIGlzIGZvciB0cnlpbmcgbXVsdGlwbGUgSVAgYWRkcmVzc2VzIC0gc2VlIDxuZXRkYi5o PiAqLwotICAgICAgICBpZiAoIShob3N0LT5oX2FkZHJfbGlzdCkpCi0gICAgICAgICAgICByZXR1 cm4oLTEpOwotICAgICAgICBiY29weShob3N0LT5oX2FkZHJfbGlzdFswXSwKLSAgICAgICAgICAg ICAgIChjYWRkcl90KSZzYWRkci5zaW5fYWRkciwKLSAgICAgICAgICAgICAgIGhvc3QtPmhfbGVu Z3RoCi0gICAgICAgICAgICAgICApOwotI2Vsc2UKLSAgICAgICAgYmNvcHkoaG9zdC0+aF9hZGRy LCAoY2FkZHJfdCkmc2FkZHIuc2luX2FkZHIsIGhvc3QtPmhfbGVuZ3RoKTsKLSNlbmRpZiAvKiBo X2FkZHIgKi8KLSNlbHNlICAvKiBIQUREUkxJU1QgKi8KLSAgICAgICAgYmNvcHkoaG9zdC0+aF9h ZGRyLCAoY2FkZHJfdCkmc2FkZHIuc2luX2FkZHIsIGhvc3QtPmhfbGVuZ3RoKTsKLSNlbmRpZiAv KiBIQUREUkxJU1QgKi8KLSAgICB9Ci0KLSAgICBpZiAoKHNvY2sgPSBzb2NrZXQoQUZfSU5FVCwg U09DS19TVFJFQU0sIDApKSA8IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwiZndkeF9zZXJ2ZXJf YXZhaWwoKSIsInNvY2tldCgpIDwgMCIsc29jayk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9 Ci0KLSAgICBpZiAoIGNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzYWRkciwgc2l6 ZW9mKHNhZGRyKSkgPCAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsImZ3ZHhfc2VydmVyX2F2YWls KCkiLCJjb25uZWN0KCkgZmFpbGVkIiwwKTsKLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICBzb2Nr ZXRfY2xvc2Uoc29jayk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAgICAgICBjbG9zZShzb2Nr KTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotCi0j aWZkZWYgVENQSVBMSUIKLSAgICBzb2NrZXRfY2xvc2Uoc29jayk7Ci0jZWxzZSAvKiBUQ1BJUExJ QiAqLwotICAgIGNsb3NlKHNvY2spOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgcmV0dXJu KDEpOwotfQotCi1pbnQKLWZ3ZHhfb3Blbl9zZXJ2ZXJfY2hhbm5lbCgpIHsKLSAgICBpbnQgc29j aywgcmVhZHlfdG9fYWNjZXB0LCBzb2NrMixjaGFubmVsLGk7Ci0jaWZkZWYgVENQX05PREVMQVkK LSAgICBpbnQgb249MTsKLSNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwotI2lmZGVmIFVDWDUwCi0g ICAgc3RhdGljIHVfaW50IHNhZGRybGVuOwotI2Vsc2UKLSAgICBzdGF0aWMgU09DS09QVF9UIHNh ZGRybGVuOwotI2VuZGlmIC8qIFVDWDUwICovCi0gICAgc3RydWN0IHNvY2thZGRyX2luIHNhZGRy OwotICAgIGNoYXIgc2JbOF07Ci0gICAgZXh0ZXJuIGNoYXIgdG5fbXNnW107Ci0jaWZkZWYgQlNE U0VMRUNUCi0gICAgZmRfc2V0IHJmZHM7Ci0gICAgc3RydWN0IHRpbWV2YWwgdHY7Ci0jZWxzZQot I2lmZGVmIEJFTExTRUxDVAotICAgIGZkX3NldCByZmRzOwotI2Vsc2UKLSAgICBmZF9zZXQgcmZk czsKLSAgICBzdHJ1Y3QgdGltZXZhbCB7Ci0gICAgICAgIGxvbmcgdHZfc2VjOwotICAgICAgICBs b25nIHR2X3VzZWM7Ci0gICAgfSB0djsKLSNlbmRpZiAvKiBCRUxMU0VMRUNUICovCi0jZW5kaWYg LyogQlNEU0VMRUNUICovCi0gICAgdW5zaWduZWQgc2hvcnQgbmNoYW5uZWw7Ci0gICAgdW5zaWdu ZWQgY2hhciAqIHA7Ci0KLSAgICBzb2NrID0gVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZv cndhcmRfeC5saXN0ZW5fc29ja2V0OwotCi0gIHRyeV9hZ2FpbjoKLQotI2lmZGVmIEJTRFNFTEVD VAotICAgIHR2LnR2X3NlYyAgPSB0di50dl91c2VjID0gMEw7Ci0gICAgdHYudHZfdXNlYyA9IDUw OwotICAgIEZEX1pFUk8oJnJmZHMpOwotICAgIEZEX1NFVChzb2NrLCAmcmZkcyk7Ci0gICAgcmVh ZHlfdG9fYWNjZXB0ID0KLSAgICAgICAgKChzZWxlY3QoRkRfU0VUU0laRSwKLSNpZmRlZiBIUFVY Ci0jaWZkZWYgSFBVWDEwMTAKLSAgICAgICAgICAgICAgICAgIChmZF9zZXQgKikKLSNlbHNlCi0K LSAgICAgICAgICAgICAgICAgIChpbnQgKikKLSNlbmRpZiAvKiBIUFVYMTAxMCAqLwotI2Vsc2UK LSNpZmRlZiBfX0RFQ0MKLSAgICAgICAgICAgICAgICAgIChmZF9zZXQgKikKLSNlbmRpZiAvKiBf X0RFQ0MgKi8KLSNlbmRpZiAvKiBIUFVYICovCi0gICAgICAgICAgICAgICAgICAmcmZkcywgTlVM TCwgTlVMTCwgJnR2KSA+IDApICYmCi0gICAgICAgICAgRkRfSVNTRVQoc29jaywgJnJmZHMpKTsK LSNlbHNlIC8qIEJTRFNFTEVDVCAqLwotI2lmZGVmIElCTVNFTEVDVAotICAgIHJlYWR5X3RvX2Fj Y2VwdCA9IChzZWxlY3QoJnNvY2ssIDEsIDAsIDAsIDUwKSA9PSAxKTsKLSNlbHNlCi0jaWZkZWYg QkVMTFNFTEVDVAotICAgIEZEX1pFUk8ocmZkcyk7Ci0gICAgRkRfU0VUKHNvY2ssIHJmZHMpOwot ICAgIHJlYWR5X3RvX2FjY2VwdCA9Ci0gICAgICAgICgoc2VsZWN0KDEyOCwgcmZkcywgTlVMTCwg TlVMTCwgNTApID4gMCkgJiYKLSAgICAgICAgICBGRF9JU1NFVChzb2NrLCByZmRzKSk7Ci0jZWxz ZQotLyogVHJ5IHRoaXMgLSB3aGF0J3MgdGhlIHdvcnN0IHRoYXQgY2FuIGhhcHBlbi4uLiAqLwot Ci0gICAgdHYudHZfc2VjICA9IHR2LnR2X3VzZWMgPSAwTDsKLSAgICB0di50dl91c2VjID0gNTA7 Ci0gICAgRkRfWkVSTygmcmZkcyk7Ci0gICAgRkRfU0VUKHNvY2ssICZyZmRzKTsKLSAgICByZWFk eV90b19hY2NlcHQgPQotICAgICAgICAoKHNlbGVjdChGRF9TRVRTSVpFLAotICAgICAgICAgICAg ICAgICAgKGZkX3NldCAqKSAmcmZkcywgTlVMTCwgTlVMTCwgJnR2KSA+IDApICYmCi0gICAgICAg ICAgRkRfSVNTRVQoc29jaywgJnJmZHMpKTsKLSNlbmRpZiAvKiBCRUxMU0VMRUNUICovCi0jZW5k aWYgLyogSUJNU0VMRUNUICovCi0jZW5kaWYgLyogQlNEU0VMRUNUICovCi0KLSAgICBpZiAoICFy ZWFkeV90b19hY2NlcHQgKQotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoKHNvY2syID0g YWNjZXB0KHNvY2ssKHN0cnVjdCBzb2NrYWRkciAqKSZzYWRkciwmc2FkZHJsZW4pKSA8IDApIHsK LSAgICAgICAgaW50IGkgPSBlcnJubzsgICAgICAgICAgICAgICAgICAvKiBzYXZlIGVycm9yIGNv ZGUgKi8KLSAgICAgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gYWNjZXB0IGVycm5vIiwiIixp KTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIE5vdyB3ZSBo YXZlIHRoZSBvcGVuIHNvY2tldC4gIFdlIG11c3Qgbm93IGZpbmQgYSBjaGFubmVsIHRvIHN0b3Jl Ci0gICAgICogaXQgaW4sIGFuZCB0aGVuIG5vdGlmeSB0aGUgY2xpZW50LgotICAgICAqLwotCi0g ICAgZm9yICggY2hhbm5lbD0wO2NoYW5uZWw8TUFYRldEWDtjaGFubmVsKysgKSB7Ci0gICAgICAg IGlmICggVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2NoYW5u ZWxdLmZkID09IC0xICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICggY2hh bm5lbCA9PSBNQVhGV0RYICkgewotI2lmZGVmIFRDUElQTElCCi0gICAgICAgIHNvY2tldF9jbG9z ZShzb2NrMik7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAgICAgICBjbG9zZShzb2NrMik7Ci0j ZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBp ZiAoIGZ3ZHhfc2VuZF9vcGVuKGNoYW5uZWwpIDwgMCApIHsKLSNpZmRlZiBUQ1BJUExJQgotICAg ICAgICBzb2NrZXRfY2xvc2Uoc29jazIpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAgICAg Y2xvc2Uoc29jazIpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgfQotCi0jaWZkZWYgVENQ X05PREVMQVkKLSAgICBzZXRzb2Nrb3B0KHNvY2syLElQUFJPVE9fVENQLFRDUF9OT0RFTEFZLChj aGFyICopJm9uLHNpemVvZihvbikpOwotI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCi0KLSAgICBU RUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbY2hhbm5lbF0uZmQg PSBzb2NrMjsKLSAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5u ZWxbY2hhbm5lbF0uaWQgPSBjaGFubmVsOwotICAgIGdvdG8gdHJ5X2FnYWluOwotCi0gICAgcmV0 dXJuKDApOyAgLyogbmV2ZXIgcmVhY2hlZCAqLwotfQotCi1pbnQKLWZ3ZHhfY2xvc2VfY2hhbm5l bChjaGFubmVsKSBpbnQgY2hhbm5lbDsgewotICAgIGludCBpLGZkOwotCi0gICAgZm9yICggaT0w OyBpPE1BWEZXRFggOyBpKysgKSB7Ci0gICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0ZPUldB UkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbaV0uaWQgPT0gY2hhbm5lbCkKLSAgICAgICAgICAgIGJy ZWFrOwotICAgIH0KLSAgICBpZiAoIGkgPT0gTUFYRldEWCApCi0gICAgICAgIHJldHVybigtMSk7 Ci0KLSAgICBmZCA9IFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5l bFtpXS5mZDsKLSAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5u ZWxbaV0uZmQgPSAtMTsKLSAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94 LmNoYW5uZWxbaV0uaWQgPSAtMTsKLSAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9y d2FyZF94LmNoYW5uZWxbaV0ubmVlZF90b19zZW5kX3hhdXRoID0gMDsKLQotI2lmZGVmIFRDUElQ TElCCi0gICAgc29ja2V0X2Nsb3NlKGZkKTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0gICAgY2xv c2UoZmQpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgcmV0dXJuKDApOwotfQotCi1pbnQK LWZ3ZHhfY2xvc2VfYWxsKCkgewotICAgIGludCB4LGZkOwotCi0gICAgZGVidWcoRjExMSwiZndk eF9jbG9zZV9hbGwoKSIsCi0gICAgICAgICAgIlRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5m b3J3YXJkX3gubGlzdGVuX3NvY2tldCIsCi0gICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JX QVJEX1gpLmZvcndhcmRfeC5saXN0ZW5fc29ja2V0KTsKLQotICAgIGlmICggVEVMT1BUX1NCKFRF TE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5saXN0ZW5fc29ja2V0ICE9IC0xICkgewotI2lmZGVm IFRDUElQTElCCi0gICAgICAgIHNvY2tldF9jbG9zZShURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRf WCkuZm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAg ICAgY2xvc2UoVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5saXN0ZW5fc29j a2V0KTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZP UldBUkRfWCkuZm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQgPSAtMTsKLSAgICB9Ci0KLSAgICBmb3Ig KHggPSAwOyB4IDwgTUFYRldEWDsgeCsrKSB7Ci0gICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0ZP UldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbeF0uZmQgIT0gLTEpIHsKLSAgICAgIGZkID0gVEVM T1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLmZkOwotICAgICAg VEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLmZkID0gLTE7 Ci0gICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbeF0u aWQgPSAtMTsKLSAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hh bm5lbFt4XS5uZWVkX3RvX3NlbmRfeGF1dGggPSAwOwotICAgICAgVEVMT1BUX1NCKFRFTE9QVF9G T1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLnN1c3BlbmQgPSAwOwotI2lmZGVmIFRDUElQ TElCCi0gICAgICBzb2NrZXRfY2xvc2UoZmQpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAg IGNsb3NlKGZkKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICB9Ci0gICAgfQotICAgIHJl dHVybigwKTsKLX0KLQotLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgZm9yIFVuaXgg Ki8KLSNpZm5kZWYgc29ja2V0X3dyaXRlCi0jZGVmaW5lIHNvY2tldF93cml0ZShmLHMsbikgICAg d3JpdGUoZixzLG4pCi0jZW5kaWYgLyogc29ja2V0X3dyaXRlICovCi0jaWZuZGVmIHNvY2tldF9y ZWFkCi0jZGVmaW5lIHNvY2tldF9yZWFkKGYscyxuKSAgICAgcmVhZChmLHMsbikKLSNlbmRpZiAv KiBzb2NrZXRfcmVhZCAqLwotCi1pbnQKLWZ3ZHhfd3JpdGVfZGF0YV90b19jaGFubmVsKGNoYW5u ZWwsIGRhdGEsIGxlbikKLSAgICBpbnQgY2hhbm5lbDsgY2hhciAqIGRhdGE7IGludCBsZW47Ci17 Ci0gICAgaW50IHNvY2ssIGNvdW50LCB0cnk9MCwgbGVuZ3RoID0gbGVuLCBpOwotCi0gICAgaWYg KCBsZW4gPD0gMCApCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIGZvciAoIGk9MDsgaTxNQVhG V0RYIDsgaSsrICkgewotICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZv cndhcmRfeC5jaGFubmVsW2ldLmlkID09IGNoYW5uZWwpCi0gICAgICAgICAgICBicmVhazsKLSAg ICB9Ci0gICAgaWYgKCBpID09IE1BWEZXRFggKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsImZ3ZHhf d3JpdGVfZGF0YV90b19jaGFubmVsIiwKLSAgICAgICAgICAgICAgICJhdHRlbXB0aW5nIHRvIHdy aXRlIHRvIGNsb3NlZCBjaGFubmVsIiwwKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0K LSAgICBzb2NrID0gVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVs W2ldLmZkOwotICAgIGRlYnVnKEYxMTEsImZ3ZHhfd3JpdGVfZGF0YV90b19jaGFubmVsIiwic29j a2V0Iixzb2NrKTsKLSAgICBja2hleGR1bXAoImZ3ZHhfd3JpdGVfZGF0YV90b19jaGFubmVsIixk YXRhLGxlbik7Ci0KLSAgZndkeF93cml0ZV9kYXRhX3RvX2NoYW5uZWxfcmV0cnk6Ci0KLSAgICBp ZiAoKGNvdW50ID0gc29ja2V0X3dyaXRlKHNvY2ssZGF0YSxsZW4pKSA8IDApIHsKLSAgICAgICAg aW50IHNfZXJybm8gPSBzb2NrZXRfZXJybm87IC8qIG1heWJlIGEgZnVuY3Rpb24gKi8KLSAgICAg ICAgZGVidWcoRjEwMSwiZndkeF93cml0ZV9kYXRhX3RvX2NoYW5uZWwgc29ja2V0X3dyaXRlIGVy cm9yIiwiIixzX2Vycm5vKTsKLSNpZmRlZiBCRVRBVEVTVAotICAgICAgICBwcmludGYoImZ3ZHhf d3JpdGVfZGF0YV90b19jaGFubmVsIGVycm9yXHJcbiIpOwotI2VuZGlmIC8qIEJFVEFURVNUICov Ci0jaWZkZWYgT1MyCi0gICAgICAgIGlmIChvczJzb2NrZXRlcnJvcihzX2Vycm5vKSA8IDApCi0g ICAgICAgICAgICByZXR1cm4oLTIpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm4o LTEpOyAgICAgICAgICAgICAgICAgLyogQ2FsbCBpdCBhbiBpL28gZXJyb3IgKi8KLSAgICB9Ci0g ICAgaWYgKGNvdW50IDwgbGVuKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ3ZHhfd3JpdGVfZGF0 YV90b19jaGFubmVsIHNvY2tldF93cml0ZSIsZGF0YSxjb3VudCk7Ci0gICAgICAgIGlmIChjb3Vu dCA+IDApIHsKLSAgICAgICAgICAgIGRhdGEgKz0gY291bnQ7Ci0gICAgICAgICAgICBsZW4gLT0g Y291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMSwiZndkeF93cml0ZV9kYXRhX3Rv X2NoYW5uZWwgcmV0cnkiLGRhdGEsbGVuKTsKLSAgICAgICAgaWYgKCBsZW4gPiAwICkKLSAgICAg ICAgICAgIGdvdG8gZndkeF93cml0ZV9kYXRhX3RvX2NoYW5uZWxfcmV0cnk7Ci0gICAgfQotCi0g ICAgZGVidWcoRjExMSwiZndkeF93cml0ZV9kYXRhX3RvX2NoYW5uZWwgY29tcGxldGUiLGRhdGEs bGVuZ3RoKTsKLSAgICByZXR1cm4obGVuZ3RoKTsgLyogc3VjY2VzcyAtIHJldHVybiB0b3RhbCBs ZW5ndGggKi8KLX0KLQotVk9JRAotZndkeF9jaGVja19zb2NrZXRzKGZkX3NldCAqaWJpdHMpCi17 Ci0gICAgaW50IHgsIHNvY2ssIGNoYW5uZWwsIGJ5dGVzOwotICAgIHN0YXRpYyBjaGFyIGJ1ZmZl clszMjAwMF07Ci0KLSAgICBkZWJ1ZyhGMTAwLCJmd2R4X2NoZWNrX3NvY2tldHMoKSIsIiIsMCk7 Ci0gICAgaWYgKCBzc3RlbG5ldCAmJiAhVEVMT1BUX01FKFRFTE9QVF9GT1JXQVJEX1gpIHx8Ci0g ICAgICAgICAhc3N0ZWxuZXQgJiYgIVRFTE9QVF9VKFRFTE9QVF9GT1JXQVJEX1gpKSB7Ci0gICAg ICAgIGRlYnVnKEYxMTAsImZ3ZHhfY2hlY2tfc29ja2V0cygpIiwiVEVMT1BUX0ZPUldBUkRfWCBu b3QgbmVnb3RpYXRlZCIsMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHgg PSAwOyB4IDwgTUFYRldEWDsgeCsrKSB7Ci0gICAgICAgIGlmICggVEVMT1BUX1NCKFRFTE9QVF9G T1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLmZkID09IC0xIHx8Ci0gICAgICAgICAgICAg VEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLnN1c3BlbmQg KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc29jayA9IFRFTE9QVF9TQihURUxP UFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5mZDsKLSAgICAgICAgaWYgKEZEX0lT U0VUKHNvY2ssIGliaXRzKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2hhbm5lbCA9IFRFTE9Q VF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5pZDsKLSAgICAgICAg ICAgIGRlYnVnKEYxMTEsImZ3ZHhfY2hlY2tfc29ja2V0cygpIiwiY2hhbm5lbCBzZXQiLGNoYW5u ZWwpOwotCi0gICAgICAgICAgICBieXRlcyA9IHNvY2tldF9yZWFkKHNvY2ssIGJ1ZmZlciwgc2l6 ZW9mKGJ1ZmZlcikpOwotICAgICAgICAgICAgaWYgKGJ5dGVzID4gMCkKLSAgICAgICAgICAgICAg ICBmd2R4X3NlbmRfZGF0YV9mcm9tX2NoYW5uZWwoY2hhbm5lbCwgYnVmZmVyLCBieXRlcyk7Ci0g ICAgICAgICAgICBlbHNlIGlmIChieXRlcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZndkeF9j bG9zZV9jaGFubmVsKGNoYW5uZWwpOwotICAgICAgICAgICAgICAgIGZ3ZHhfc2VuZF9jbG9zZShj aGFubmVsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotaW50Ci1md2R4 X2luaXRfZmRfc2V0KGZkX3NldCAqaWJpdHMpCi17Ci0gICAgaW50IHgsc2V0PTAsY250PTA7Ci0K LSAgICBpZiAoIHNzdGVsbmV0ICYmICFURUxPUFRfTUUoVEVMT1BUX0ZPUldBUkRfWCkgfHwKLSAg ICAgICAgICFzc3RlbG5ldCAmJiAhVEVMT1BUX1UoVEVMT1BUX0ZPUldBUkRfWCkpIHsKLSAgICAg ICAgZGVidWcoRjExMCwiZndkeF9pbml0X2ZkX3NldCgpIiwiVEVMT1BUX0ZPUldBUkRfWCBub3Qg bmVnb3RpYXRlZCIsMCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0KLSAgICBpZiAoVEVM T1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5saXN0ZW5fc29ja2V0ICE9IC0xKSB7 Ci0gICAgICAgIHNldCsrOwotICAgICAgICBGRF9TRVQoVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJE X1gpLmZvcndhcmRfeC5saXN0ZW5fc29ja2V0LCBpYml0cyk7Ci0gICAgfQotICAgIGZvciAoeCA9 IDA7IHggPCBNQVhGV0RYOyB4KyspIHsKLSAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfRk9S V0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5mZCAhPSAtMSkgewotICAgICAgICAgICAgY250 Kys7Ci0gICAgICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRf eC5jaGFubmVsW3hdLnN1c3BlbmQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg ICAgICBzZXQrKzsKLSAgICAgICAgICAgIEZEX1NFVChURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRf WCkuZm9yd2FyZF94LmNoYW5uZWxbeF0uZmQsIGliaXRzKTsKLSAgICAgICAgfQotICAgIH0KLSAg ICBpZiAoc2V0ICsgY250ID09IDApIHsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9IGVsc2Ug ewotICAgICAgICByZXR1cm4oc2V0KTsKLSAgICB9Ci19Ci0KLSNpZmRlZiBOVAotVk9JRAotZndk eF90aHJlYWQoIFZPSUQgKiBkdW1teSApCi17Ci0gICAgZmRfc2V0IGlmZHM7Ci0gICAgc3RydWN0 IHRpbWV2YWwgdHY7Ci0gICAgZXh0ZXJuIGludCBwcmlvcml0eTsKLSAgICBpbnQgbjsKLQotICAg IHNldGludCgpOwotICAgIFNldFRocmVhZFBydHkocHJpb3JpdHksaXNXaW45NSgpID8gMyA6IDEx KTsKLQotICAgIHdoaWxlICggIXNzdGVsbmV0ICYmIFRFTE9QVF9VKFRFTE9QVF9GT1JXQVJEX1gp IHx8Ci0gICAgICAgICAgICBzc3RlbG5ldCAmJiBURUxPUFRfTUUoVEVMT1BUX0ZPUldBUkRfWCkp Ci0gICAgewotICAgICAgICBGRF9aRVJPKCZpZmRzKTsKLSAgICAgICAgbiA9IGZ3ZHhfaW5pdF9m ZF9zZXQoJmlmZHMpOwotICAgICAgICBpZiAobiA+IDApIHsKLSAgICAgICAgICAgIHR2LnR2X3Nl YyA9IDA7Ci0gICAgICAgICAgICB0di50dl91c2VjID0gMjUwMDsKLSAgICAgICAgICAgIGlmICgg c2VsZWN0KEZEX1NFVFNJWkUsICZpZmRzLCBOVUxMLCBOVUxMLCAmdHYpID4gMCApCi0gICAgICAg ICAgICAgICAgZndkeF9jaGVja19zb2NrZXRzKCZpZmRzKTsKLQotICAgICAgICB9IGVsc2UgaWYg KG4gPCAwKSB7Ci0gICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2Fy ZF94LnRocmVhZF9zdGFydGVkID0gMDsKLSAgICAgICAgICAgIGNrVGhyZWFkRW5kKE5VTEwpOwot ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2xlZXAoMSk7Ci0gICAgICAgIH0KLSAgICB9 Ci19Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KLSNlbmRpZiAv KiBUTkNPREUgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NuZXQuaCBiL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjbmV0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDA0MGJjNzQuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja2NuZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MDkgKzAsMCBAQAotLyogY2tj bmV0LmggLS0gU3ltYm9sIGFuZCBtYWNybyBkZWZpbml0aW9ucyBmb3IgQy1LZXJtaXQgbmV0d29y ayBzdXBwb3J0ICovCi0KLS8qCi0gIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlh LmVkdT4KLSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1z LCBOZXcgWW9yayBDaXR5LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKLSAgICBUcnVz dGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAg IEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUg b3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlz Y2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0qLwotI2lmbmRlZiBDS0NORVRfSAotI2RlZmluZSBD S0NORVRfSAotCi0vKiBOZXR3b3JrIHR5cGVzICovCi0KLSNkZWZpbmUgTkVUX05PTkUgMCAgICAg ICAgICAgICAgICAgICAgICAvKiBOb25lICovCi0jZGVmaW5lIE5FVF9UQ1BCIDEgICAgICAgICAg ICAgICAgICAgICAgLyogVENQL0lQIEJlcmtlbGV5IChzb2NrZXQpICovCi0jZGVmaW5lIE5FVF9U Q1BBIDIgICAgICAgICAgICAgICAgICAgICAgLyogVENQL0lQIEFUJlQgKHN0cmVhbXMpICovCi0j ZGVmaW5lIE5FVF9TWDI1IDMgICAgICAgICAgICAgICAgICAgICAgLyogU1VOT1MgU3VuTGluayBY LjI1ICovCi0jZGVmaW5lIE5FVF9ERUMgIDQgICAgICAgICAgICAgICAgICAgICAgLyogREVDbmV0 ICovCi0jZGVmaW5lIE5FVF9WUFNJIDUgICAgICAgICAgICAgICAgICAgICAgLyogVkFYIFBTSSAq LwotI2RlZmluZSBORVRfUElQRSA2ICAgICAgICAgICAgICAgICAgICAgIC8qIExBTiBNYW5hZ2Vy IE5hbWVkIFBpcGUgKi8KLSNkZWZpbmUgTkVUX1ZYMjUgNyAgICAgICAgICAgICAgICAgICAgICAv KiBTdHJhdHVzIFZPUyBYLjI1ICovCi0jZGVmaW5lIE5FVF9CSU9TIDggICAgICAgICAgICAgICAg ICAgICAgLyogSUJNIE5ldEJpb3MgKi8KLSNkZWZpbmUgTkVUX1NMQVQgOSAgICAgICAgICAgICAg ICAgICAgICAvKiBNZXJpZGlhbiBUZWNobm9sb2dpZXMnIFN1cGVyTEFUICovCi0jZGVmaW5lIE5F VF9GSUxFIDEwICAgICAgICAgICAgICAgICAgICAgLyogUmVhZCBmcm9tIGEgZmlsZSAqLwotI2Rl ZmluZSBORVRfQ01EICAxMSAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgZnJvbSBhIHN1Yi1w cm9jZXNzICovCi0jZGVmaW5lIE5FVF9ETEwgIDEyICAgICAgICAgICAgICAgICAgICAgLyogTG9h ZCBhIERMTCBmb3IgdXNlIGFzIGNvbW0gY2hhbm5lbCovCi0jZGVmaW5lIE5FVF9JWDI1IDEzICAg ICAgICAgICAgICAgICAgICAgLyogSUJNIEFJWCA0LjEgWC4yNSAqLwotI2RlZmluZSBORVRfSFgy NSAxNCAgICAgICAgICAgICAgICAgICAgIC8qIEhQLVVYIDEwIFguMjUgKi8KLSNkZWZpbmUgTkVU X1BUWSAgMTUgICAgICAgICAgICAgICAgICAgICAvKiBQc2V1ZG90ZXJtaW5hbCAqLwotI2RlZmlu ZSBORVRfU1NIICAxNiAgICAgICAgICAgICAgICAgICAgIC8qIFNTSCAqLwotCi0jaWZkZWYgT1My ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW4gT1MvMiwgb25seSB0aGUgMzItYml0 ICovCi0jaWZuZGVmIF9fMzJCSVRfXyAgICAgICAgICAgICAgICAgICAgICAgLyogdmVyc2lvbiBn ZXRzIE5FVEJJT1MgKi8KLSNpZmRlZiBDS19ORVRCSU9TCi0jdW5kZWYgQ0tfTkVUQklPUwotI2Vu ZGlmIC8qIENLX05FVEJJT1MgKi8KLSNlbmRpZiAvKiBfXzMyQklUX18gKi8KLSNlbmRpZiAvKiBP UzIgKi8KLQotI2lmZGVmIF9NX1BQQwotI2lmZGVmIFNVUEVSTEFUCi0jdW5kZWYgU1VQRVJMQVQK LSNlbmRpZiAvKiBTVVBFUkxBVCAqLwotI2VuZGlmIC8qIF9NX1BQQyAqLwotCi0jaWZkZWYgTlBJ UEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIGl0ZW1zIGluIGNvbW1vbiB0byAq LwotI2RlZmluZSBOUElQRU9SQklPUyAgICAgICAgICAgICAgICAgICAgIC8qIE5hbWVkIFBpcGVz IGFuZCBORVRCSU9TICovCi0jZW5kaWYgLyogTlBJUEUgKi8KLSNpZmRlZiBDS19ORVRCSU9TCi0j aWZuZGVmIE5QSVBFT1JCSU9TCi0jZGVmaW5lIE5QSVBFT1JCSU9TCi0jZW5kaWYgLyogTlBJUEVP UkJJT1MgKi8KLSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0KLS8qIE5ldHdvcmsgdmlydHVhbCB0 ZXJtaW5hbCBwcm90b2NvbHMgKGZvciBTRVQgSE9TVCBjb25uZWN0aW9ucykgKi8KLS8qIEZUUCwg SFRUUCBhbmQgU1NIIGhhdmUgdGhlaXIgb3duIHN0YWNrcyAgICAgICAgICAgICAgICAgICAgICAg Ki8KLQotI2RlZmluZSBOUF9ERUZBVUxUICAgIDI1NQotI2RlZmluZSBOUF9OT05FICAgICAgICAg MCAgICAgICAgICAgICAgIC8qIE5vbmUgKGFzeW5jKSAqLwotI2RlZmluZSBOUF9URUxORVQgICAg ICAgMSAgICAgICAgICAgICAgIC8qIFRDUC9JUCB0ZWxuZXQgKi8KLSNkZWZpbmUgTlBfVlRQICAg ICAgICAgIDIgICAgICAgICAgICAgICAvKiBJU08gVmlydHVhbCBUZXJtaW5hbCBQcm90b2NvbCAq LwotI2RlZmluZSBOUF9YMyAgICAgICAgICAgMyAgICAgICAgICAgICAgIC8qIENDSVRUIFguMyAq LwotI2RlZmluZSBOUF9YMjggICAgICAgICAgNCAgICAgICAgICAgICAgIC8qIENDSVRUIFguMjgg Ki8KLSNkZWZpbmUgTlBfWDI5ICAgICAgICAgIDUgICAgICAgICAgICAgICAvKiBDQ0lUVCBYLjI5 ICovCi0jZGVmaW5lIE5QX1JMT0dJTiAgICAgICA2ICAgICAgICAgICAgICAgLyogVENQL0lQIFJl bW90ZSBsb2dpbiAqLwotI2RlZmluZSBOUF9LRVJNSVQgICAgICAgNyAgICAgICAgICAgICAgIC8q IFRDUC9JUCBLZXJtaXQgKi8KLSNkZWZpbmUgTlBfVENQUkFXICAgICAgIDggICAgICAgICAgICAg ICAvKiBUQ1AvSVAgUmF3IHNvY2tldCAqLwotI2RlZmluZSBOUF9UQ1BVTksgICAgICAgOSAgICAg ICAgICAgICAgIC8qIFRDUC9JUCBVbmtub3duICovCi0jZGVmaW5lIE5QX1NTTCAgICAgICAgIDEw ICAgICAgICAgICAgICAgLyogVENQL0lQIFNTTHYyMyAqLwotI2RlZmluZSBOUF9UTFMgICAgICAg ICAxMSAgICAgICAgICAgICAgIC8qIFRDUC9JUCBUTFN2MSAqLwotI2RlZmluZSBOUF9TU0xfVEVM TkVUICAxMiAgICAgICAgICAgICAgIC8qIFRDUC9JUCBUZWxuZXQgb3ZlciBTU0x2MjMgKi8KLSNk ZWZpbmUgTlBfVExTX1RFTE5FVCAgMTMgICAgICAgICAgICAgICAvKiBUQ1AvSVAgVGVsbmV0IG92 ZXIgVExTdjEgKi8KLSNkZWZpbmUgTlBfSzRMT0dJTiAgICAgMTQgICAgICAgICAgICAgICAvKiBU Q1AvSVAgS2VyYmVyaXplZCByZW1vdGUgbG9naW4gKi8KLSNkZWZpbmUgTlBfRUs0TE9HSU4gICAg MTUgICAgICAgICAgICAgICAvKiBUQ1AvSVAgRW5jcnlwdGVkIEtlcmJlcml6ZWQgLi4uICovCi0j ZGVmaW5lIE5QX0s1TE9HSU4gICAgIDE2ICAgICAgICAgICAgICAgLyogVENQL0lQIEtlcmJlcml6 ZWQgcmVtb3RlIGxvZ2luICovCi0jZGVmaW5lIE5QX0VLNUxPR0lOICAgIDE3ICAgICAgICAgICAg ICAgLyogVENQL0lQIEVuY3J5cHRlZCBLZXJiZXJpemVkIC4uLiAqLwotI2RlZmluZSBOUF9LNVUy VSAgICAgICAxOCAgICAgICAgICAgICAgIC8qIFRDUC9JUCBLZXJiZXJvcyA1IFVzZXIgdG8gVXNl ciAqLwotI2RlZmluZSBOUF9DVEVSTSAgICAgICAxOSAgICAgICAgICAgICAgIC8qIERFQyBDVEVS TSAqLwotI2RlZmluZSBOUF9MQVQgICAgICAgICAyMCAgICAgICAgICAgICAgIC8qIERFQyBMQVQg Ki8KLSNkZWZpbmUgTlBfU1NMX1JBVyAgICAgMjEJCS8qIFNTTCB3aXRoIG5vIFRlbG5ldCBwZXJt aXR0ZWQgKi8KLSNkZWZpbmUgTlBfVExTX1JBVyAgICAgMjIJCS8qIFRMUyB3aXRoIG5vIFRlbG5l dCBwZXJtaXR0ZWQgKi8KLQotLyogb3RoZXJzIGhlcmUuLi4gKi8KLQotI2lmZGVmIENLX1NTTAot I2RlZmluZSBJU19URUxORVQoKSAgICAgIChuZXR0eXBlID09IE5FVF9UQ1BCICYmICh0dG5wcm90 byA9PSBOUF9URUxORVQgXAotICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09 IE5QX1NTTF9URUxORVQgXAotICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09 IE5QX1RMU19URUxORVQgXAotICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09 IE5QX0tFUk1JVCkpCi0jZWxzZSAvKiBDS19TU0wgKi8KLSNkZWZpbmUgSVNfVEVMTkVUKCkgICAg ICAobmV0dHlwZSA9PSBORVRfVENQQiAmJiAodHRucHJvdG8gPT0gTlBfVEVMTkVUIFwKLSAgICAg ICAgICAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9LRVJNSVQpKQotI2VuZGlmIC8q IENLX1NTTCAqLwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBLUkI1Ci0jaWZkZWYgS1JC NAotI2RlZmluZSBJU19STE9HSU4oKSAgICAgIChuZXR0eXBlID09IE5FVF9UQ1BCICYmICh0dG5w cm90byA9PSBOUF9STE9HSU4gXAotICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3Rv ID09IE5QX0s1TE9HSU4gXAotICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09 IE5QX0VLNUxPR0lOIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBO UF9LNExPR0lOIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9F SzRMT0dJTiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKSkKLSNlbHNlIC8qIEtSQjQgKi8K LSNkZWZpbmUgSVNfUkxPR0lOKCkgICAgICAobmV0dHlwZSA9PSBORVRfVENQQiAmJiAodHRucHJv dG8gPT0gTlBfUkxPR0lOIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9 PSBOUF9LNUxPR0lOIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBO UF9FSzVMT0dJTiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKSkKLSNlbmRpZiAvKiBLUkI0 ICovCi0jZWxzZSAvKiBLUkI1ICovCi0jaWZkZWYgS1JCNAotI2RlZmluZSBJU19STE9HSU4oKSAg ICAgIChuZXR0eXBlID09IE5FVF9UQ1BCICYmICh0dG5wcm90byA9PSBOUF9STE9HSU4gXAotICAg ICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09IE5QX0s0TE9HSU4gXAotICAgICAg ICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09IE5QX0VLNExPR0lOIFwKLSAgICAgICAg ICAgICAgICAgICAgICAgICApKQotI2Vsc2UgLyogS1JCNCAqLwotS0VSQkVST1MgZGVmaW5lZCB3 aXRob3V0IGVpdGhlciBLUkI0IG9yIEtSQjUKLSNlbmRpZiAvKiBLUkI0ICovCi0jZW5kaWYgLyog S1JCNSAqLwotI2Vsc2UgLyogQ0tfS0VSQkVST1MgKi8KLSNkZWZpbmUgSVNfUkxPR0lOKCkgICAg ICAobmV0dHlwZSA9PSBORVRfVENQQiAmJiAodHRucHJvdG8gPT0gTlBfUkxPR0lOKSkKLSNlbmRp ZiAvKiBDS19LRVJCRVJPUyAqLwotCi0jZGVmaW5lIElTX1NTSCgpICAgICAgICAgKG5ldHR5cGUg PT0gTkVUX1NTSCkKLQotLyogUkxPR0lOIE1vZGVzICovCi0jZGVmaW5lICAgIFJMX1JBVyAgICAg MCAgICAgICAgICAgICAgICAgLyogIERvIE5vdCBQcm9jZXNzIFhPTi9YT0ZGICovCi0jZGVmaW5l ICAgIFJMX0NPT0tFRCAgMSAgICAgICAgICAgICAgICAgLyogIERvIFByb2Nlc3MgWE9OL1hPRkYg Ki8KLQotLyogRW5jcnlwdGlvbiB0eXBlcyAqLwotCi0jZGVmaW5lIENYX05PTkUgICAgOTk5Ci0K LSNpZmRlZiBFTkNUWVBFX0FOWQotI2RlZmluZSBDWF9BVVRPIEVOQ1RZUEVfQU5ZCi0jZWxzZQot I2RlZmluZSBDWF9BVVRPIDAKLSNlbmRpZiAvKiBFTkNUWVBFX0FOWSAqLwotCi0jaWZkZWYgRU5D VFlQRV9ERVNfQ0ZCNjQKLSNkZWZpbmUgQ1hfREVTQzY0IEVOQ1RZUEVfREVTX0NGQjY0Ci0jZWxz ZQotI2RlZmluZSBDWF9ERVNDNjQgMQotI2VuZGlmIC8qIEVOQ1RZUEVfREVTX0NGQjY0ICovCi0K LSNpZmRlZiBFTkNUWVBFX0RFU19PRkI2NAotI2RlZmluZSBDWF9ERVNPNjQgRU5DVFlQRV9ERVNf T0ZCNjQKLSNlbHNlCi0jZGVmaW5lIENYX0RFU082NCAyCi0jZW5kaWYgLyogRU5DVFlQRV9ERVNf T0ZCNjQgKi8KLQotI2lmZGVmIEVOQ1RZUEVfREVTM19DRkI2NAotI2RlZmluZSBDWF9ERVMzQzY0 IEVOQ1RZUEVfREVTM19DRkI2NAotI2Vsc2UKLSNkZWZpbmUgQ1hfREVTM0M2NCAzCi0jZW5kaWYg LyogRU5DVFlQRV9ERVNfQ0ZCNjQgKi8KLQotI2lmZGVmIEVOQ1RZUEVfREVTM19PRkI2NAotI2Rl ZmluZSBDWF9ERVNPNjQgRU5DVFlQRV9ERVMzX09GQjY0Ci0jZWxzZQotI2RlZmluZSBDWF9ERVMz TzY0IDQKLSNlbmRpZiAvKiBFTkNUWVBFX0RFU19PRkI2NCAqLwotCi0jaWZkZWYgRU5DVFlQRV9D QVNUNV80MF9DRkI2NAotI2RlZmluZSBDWF9DNTQwQzY0IEVOQ1RZUEVfQ0FTVDVfNDBfQ0ZCNjQK LSNlbHNlCi0jZGVmaW5lIENYX0M1NDBDNjQgOAotI2VuZGlmIC8qIEVOQ1RZUEVfQ0FTVDVfNDBf Q0ZCNjQgKi8KLQotI2lmZGVmIEVOQ1RZUEVfQ0FTVDVfNDBfT0ZCNjQKLSNkZWZpbmUgQ1hfQzU0 ME82NCBFTkNUWVBFX0NBU1Q1XzQwX09GQjY0Ci0jZWxzZQotI2RlZmluZSBDWF9DNTQwTzY0IDkK LSNlbmRpZiAvKiBFTkNUWVBFX0NBU1Q1XzQwX09GQjY0ICovCi0KLSNpZmRlZiBFTkNUWVBFX0NB U1QxMjhfQ0ZCNjQKLSNkZWZpbmUgQ1hfQzEyOEM2NCBFTkNUWVBFX0NBU1QxMjhfQ0ZCNjQKLSNl bHNlCi0jZGVmaW5lIENYX0MxMjhDNjQgMTAKLSNlbmRpZiAvKiBFTkNUWVBFX0NBU1QxMjhfQ0ZC NjQgKi8KLQotI2lmZGVmIEVOQ1RZUEVfQ0FTVDEyOF9PRkI2NAotI2RlZmluZSBDWF9DMTI4TzY0 IEVOQ1RZUEVfQ0FTVDEyOF9PRkI2NAotI2Vsc2UKLSNkZWZpbmUgQ1hfQzEyOE82NCAxMQotI2Vu ZGlmIC8qIEVOQ1RZUEVfQ0FTVDEyOF9PRkI2NCAqLwotCi0vKiBCYXNpYyBuZXR3b3JrIGZ1bmN0 aW9uIHByb3RvdHlwZXMsIGNvbW1vbiB0byBhbGwuICovCi0KLV9QUk9UT1RZUCggaW50IG5ldG9w ZW4sIChjaGFyICosIGludCAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBuZXRjbG9zLCAodm9p ZCkgKTsKLV9QUk9UT1RZUCggaW50IG5ldGZsdWksICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQg bmV0dGNoaywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBuZXR4Y2hrLCAoaW50KSApOwotX1BS T1RPVFlQKCBpbnQgbmV0YnJlYWssICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgbmV0aW5jLCAo aW50KSApOwotX1BST1RPVFlQKCBpbnQgbmV0eGluLCAoaW50LCBDSEFSICopICk7Ci1fUFJPVE9U WVAoIGludCBuZXR0b2wsIChDSEFSICosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IG5ldHRvYywg KENIQVIpICk7Ci0jaWZkZWYgVENQU09DS0VUCi1fUFJPVE9UWVAoIGludCBnZXR0Y3Bwb3J0LCAo dm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGdldHRjcHBvcnQsICh2b2lkKSApOwotI2VuZGlmCS8q IFRDUFNPQ0tFVCAqLwotCi0vKgotICBTdW5MaW5rIFguMjUgc3VwcG9ydCBieSBNYXJjZWxsbyBG cnV0aWcsIENhdGhvbGljIFVuaXZlcnNpdHksCi0gIFJpbyBkZSBKYW5laXJvLCBCcmF6aWwsIDE5 OTAuCi0KLSAgTWF5YmUgdGhpcyBjYW4gYmUgYWRhcHRlZCB0byBWQVggUFNJIGFuZCBvdGhlciBY LjI1IHByb2R1Y3RzIHRvby4KLSovCi0jaWZuZGVmIFNVTk9TNCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogT25seSB2YWxpZCBmb3IgU1VOT1M0ICovCi0jaWZuZGVmIFNPTEFSSVMKLSNpZmRl ZiBTVU5YMjUKLSN1bmRlZiBTVU5YMjUKLSNlbmRpZiAvKiBTVU5YMjUgKi8KLSNlbmRpZiAvKiBT T0xBUklTICovCi0jZW5kaWYgLyogU1VOT1M0ICovCi0KLSNpZmRlZiBTVFJBVFVTWDI1Ci0jZGVm aW5lIEFOWVgyNQotI2RlZmluZSBNQVhfVVNFUl9EQVRBIDEyOCAvKiBTVU4gZGVmaW5lcyB0aGlz IGluIGEgaGVhZGVyIGZpbGUsIEkgYmVsaWV2ZS4gKi8KLSNlbmRpZiAvKiBTVFJBVFVTWDI1ICov Ci0KLSNpZmRlZiBTVU5YMjUKLSNkZWZpbmUgQU5ZWDI1Ci0jZW5kaWYgLyogU1VOWDI1ICovCi0K LSNpZmRlZiBJQk1YMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBSVggNC4xIFguMjUg Ki8KLSNpZm5kZWYgQUlYNDEKLSN1bmRlZiBJQk1YMjUKLSNlbHNlIC8qIEFJWDQxICovCi0jZGVm aW5lIEFOWVgyNQotI2RlZmluZSBNQVhfVVNFUl9EQVRBIE5QSV9NQVhfREFUQSAgICAgIC8qIHVz ZWQgZm9yIGJ1ZmZlciBzaXplcyAqLwotI2VuZGlmIC8qIEFJWDQxICovCi0jZW5kaWYgLyogSUJN WDI1ICovCi0KLSNpZmRlZiBIUFgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIUC1V WCAxMC4qIFguMjUgKi8KLSNpZm5kZWYgSFBVWDEwCi0jdW5kZWYgSFBYMjUKLSNlbHNlIC8qIEhQ VVgxMCAqLwotI2RlZmluZSBBTllYMjUKLSNlbmRpZiAvKiBIUFVYMTAgKi8KLSNlbmRpZiAvKiBI UFgyNSAqLwotCi0jaWZkZWYgQU5ZWDI1Ci0jaWZuZGVmIE5FVENPTk4gICAgICAgICAgICAgICAg ICAgICAgICAgLyogQU5ZWDI1IGltcGxpZXMgTkVUQ09OTiAqLwotI2RlZmluZSBORVRDT05OCi0j ZW5kaWYgLyogTkVUQ09OTiAqLwotCi0jZGVmaW5lIE1BWFBBRFBBUk1TICAgICAgICAgICAgICAg IDIyICAgLyogTnVtYmVyIG9mIFBBRCBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIE1BWENVREFUQSAg ICAgICAgICAgICAgICAgIDEyICAgLyogTWF4IGxlbmd0aCBvZiBYLjI1IGNhbGwgdXNlciBkYXRh ICovCi0jZGVmaW5lIFgyOVBJRCAgICAgICAgICAgICAgICAgICAgICAxICAgLyogWC4yOSBwcm90 b2NvbCBJRCAqLwotI2RlZmluZSBYMjlQSURMRU4gICAgICAgICAgICAgICAgICAgNCAgIC8qIFgu MjkgcHJvdG9jb2wgSUQgbGVuZ3RoICovCi0KLSNkZWZpbmUgWDI5X1NFVF9QQVJNUyAgICAgICAg ICAgICAgIDIKLSNkZWZpbmUgWDI5X1JFQURfUEFSTVMgICAgICAgICAgICAgIDQKLSNkZWZpbmUg WDI5X1NFVF9BTkRfUkVBRF9QQVJNUyAgICAgIDYKLSNkZWZpbmUgWDI5X0lOVklUQVRJT05fVE9f Q0xFQVIgICAgIDEKLSNkZWZpbmUgWDI5X1BBUkFNRVRFUl9JTkRJQ0FUSU9OICAgIDAKLSNkZWZp bmUgWDI5X0lORElDQVRJT05fT0ZfQlJFQUsgICAgIDMKLSNkZWZpbmUgWDI5X0VSUk9SICAgICAg ICAgICAgICAgICAgIDUKLQotI2RlZmluZSBJTlZBTElEX1BBRF9QQVJNICAgICAgICAgICAgMQot Ci0jZGVmaW5lIFBBRF9CUkVBS19DSEFSQUNURVIgICAgICAgICAwCi0KLSNkZWZpbmUgUEFEX0VT Q0FQRSAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEFEX0VDSE8gICAgICAgICAgICAgICAg ICAgIDIKLSNkZWZpbmUgUEFEX0RBVEFfRk9SV0FSRF9DSEFSICAgICAgIDMKLSNkZWZpbmUgUEFE X0RBVEFfRk9SV0FSRF9USU1FT1VUICAgIDQKLSNkZWZpbmUgUEFEX0ZMT1dfQ09OVFJPTF9CWV9Q QUQgICAgIDUKLSNkZWZpbmUgUEFEX1NVUFBSRVNTSU9OX09GX1NJR05BTFMgIDYKLSNkZWZpbmUg UEFEX0JSRUFLX0FDVElPTiAgICAgICAgICAgIDcKLSNkZWZpbmUgUEFEX1NVUFBSRVNTSU9OX09G X0RBVEEgICAgIDgKLSNkZWZpbmUgUEFEX1BBRERJTkdfQUZURVJfQ1IgICAgICAgIDkKLSNkZWZp bmUgUEFEX0xJTkVfRk9MRElORyAgICAgICAgICAgMTAKLSNkZWZpbmUgUEFEX0xJTkVfU1BFRUQg ICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEFEX0ZMT1dfQ09OVFJPTF9CWV9VU0VSICAgMTIKLSNk ZWZpbmUgUEFEX0xGX0FGVEVSX0NSICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEFEX1BBRERJTkdf QUZURVJfTEYgICAgICAgMTQKLSNkZWZpbmUgUEFEX0VESVRJTkcgICAgICAgICAgICAgICAgMTUK LSNkZWZpbmUgUEFEX0NIQVJfREVMRVRFX0NIQVIgICAgICAgMTYKLSNkZWZpbmUgUEFEX0JVRkZF Ul9ERUxFVEVfQ0hBUiAgICAgMTcKLSNkZWZpbmUgUEFEX0JVRkZFUl9ESVNQTEFZX0NIQVIgICAg MTgKLQotI2RlZmluZSBNQVhJWDI1IE1BWF9VU0VSX0RBVEEqNwotI2RlZmluZSBNQVhPWDI1IE1B WF9VU0VSX0RBVEEKLSNlbmRpZiAvKiBBTllYMjUgKi8KLQotI2lmZGVmIFNVTlgyNQotI2lmZGVm IFNPTEFSSVMyNSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBwcmVzdW1hYmx5IFN1bkxp bmsgOS54eCAqLwotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNs dWRlIDxzeXMvaW9jY29tLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lz L3NvY2tldC5oPgotI2luY2x1ZGUgPHN5cy9zb2NraW8uaD4KLSNpbmNsdWRlIDxzdW5kZXYvc3lu Y3N0YXQuaD4KLSNpbmNsdWRlIDxuZXR4MjUveDI1X3BrLmg+Ci0jaW5jbHVkZSA8bmV0eDI1L3gy NV9jdGwuaD4KLSNpbmNsdWRlIDxuZXR4MjUveDI1X2lvY3RsLmg+Ci0jZWxzZQotI2luY2x1ZGUg PHN5cy9pb2N0bC5oPiAgICAgICAgICAgICAgICAgIC8qIFguMjUgaW5jbHVkZXMsIFN1biBvbmx5 ICovCi0jaW5jbHVkZSA8c3lzL3N5c3RtLmg+Ci0jaWZuZGVmIFNPTEFSSVMKLSNpbmNsdWRlIDxz eXMvbWJ1Zi5oPgotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+ Ci0jaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KLSNpZmRlZiBTT0xBUklTCi0jaW5jbHVkZSA8c3lz L3NvY2tpby5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzeXMvZG9tYWluLmg+Ci0jZW5kaWYgLyogU09M QVJJUyAqLwotI2luY2x1ZGUgPHN5cy9zb2NrZXR2YXIuaD4KLSNpbmNsdWRlIDxuZXQvaWYuaD4K LSNpbmNsdWRlIDxzdW5kZXYvc3luY3N0YXQuaD4KLSNpbmNsdWRlIDxuZXR4MjUveDI1X3BrLmg+ Ci0jaW5jbHVkZSA8bmV0eDI1L3gyNV9jdGwuaD4KLSNpbmNsdWRlIDxuZXR4MjUveDI1X2lvY3Rs Lmg+Ci0jZW5kaWYgLyogU09MQVJJUzI1ICovCi0jZW5kaWYgLyogU1VOWDI1ICovCi0KLSNpZmRl ZiBBTllYMjUKLQotI2lmZGVmIElCTVgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFgu MjUgaW5jbHVkZXMsIEFJWCBvbmx5ICovCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxz eXMvdHd0eXBlcy5oPgotI2luY2x1ZGUgPHN5cy90d2xpYi5oPgotCi0jaW5jbHVkZSA8c3lzL3N0 cmVhbS5oPgotI2luY2x1ZGUgPHN0cm9wdHMuaD4KLQotI2RlZmluZSBOUElfMjAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHJlcXVpcmVkIHRvIGluY2x1ZGUgdGhlIHdob2xlIE5QSSAqLwot I2luY2x1ZGUgPHN5cy9ucGlfMjAuaD4KLSNpbmNsdWRlIDxzeXMvbnBpYXBpLmg+Ci0jaW5jbHVk ZSA8c3lzL3BrdGludGYuaD4KLQotI2luY2x1ZGUgPG9kbWkuaD4gICAgICAgICAgICAgICAgICAg ICAgIC8qIHJlcXVpcmVkIGZvciBhY2Nlc3MgdG8gdGhlIE9ETSAgICovCi0jaW5jbHVkZSA8c3lz L2NmZ29kbS5oPiAgICAgICAgICAgICAgICAgLyogZGF0YWJhc2UsIG5lZWRlZCB0byBmaW5kIG91 dCB0aGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2Nh bCBOVUEuIHNlZSB4MjVsb2NhbF9udWEoKSAgICAqLwotCi0KLS8qIElCTSBYMjUgTlBJIGdlbmVy aWMgcHJpbWl0aXZlIHR5cGUgKi8KLXR5cGVkZWYgdW5pb24gTl9ucGlfY3RsX3QgewotICAgIHVs b25nICAgICAgICAgICAgICAgUFJJTV90eXBlOyAgICAgICAgICAgICAgLyogZ2VuZXJpYyBwcmlt aXRpdmUgdHlwZSAqLwotICAgIGNoYXIgICAgICAgICAgICAgICAgYnVmZmVyW05QSV9NQVhfQ1RM XTsgICAgLyogbWF4aW11bSBwcmltaXRpdmUgc2l6ZSAqLwotICAgIE5fYmluZF9hY2tfdCAgICAg ICAgYmluZF9hY2s7Ci0gICAgTl9iaW5kX3JlcV90ICAgICAgICBiaW5kX3JlcTsKLSAgICBOX2Nv bm5fY29uX3QgICAgICAgIGNvbm5fY29uOwotICAgIE5fY29ubl9pbmRfdCAgICAgICAgY29ubl9p bmQ7Ci0gICAgTl9jb25uX3JlcV90ICAgICAgICBjb25uX3JlcTsKLSAgICBOX2Nvbm5fcmVzX3Qg ICAgICAgIGNvbm5fcmVzOwotICAgIE5fZGF0YV9yZXFfdCAgICAgICAgZGF0YV9yZXE7Ci0gICAg Tl9kYXRhX2luZF90ICAgICAgICBkYXRhX2luZDsKLSAgICBOX2Rpc2Nvbl9pbmRfdCAgICAgIGRp c2Nvbl9pbmQ7Ci0gICAgTl9kaXNjb25fcmVxX3QgICAgICBkaXNjb25fcmVxOwotICAgIE5fZXJy b3JfYWNrX3QgICAgICAgZXJyb3JfYWNrOwotICAgIE5fZXhkYXRhX2luZF90ICAgICAgZXhkYXRh X2luZDsKLSAgICBOX2luZm9fYWNrX3QgICAgICAgIGluZm9fYWNrOwotICAgIE5fb2tfYWNrX3Qg ICAgICAgICAgb2tfYWNrOwotICAgIE5fcmVzZXRfY29uX3QgICAgICAgcmVzZXRfY29uOwotICAg IE5fcmVzZXRfcmVxX3QgICAgICAgcmVzZXRfcmVxOwotICAgIE5fcmVzZXRfaW5kX3QgICAgICAg cmVzZXRfaW5kOwotfSBOX25waV9jdGxfdDsKLQotLyogc29tZSBleHRyYSBkZWZpbml0aW9ucyB0 byBoZWxwIG91dCAqLwotdHlwZWRlZiBjaGFyICAgIHgyNWFkZHJfdFs0NV07ICAgICAgICAgIC8q IG1heCA0MCBkZWZpbmVkIGJ5IENDSVRUICovCi10eXBlZGVmIGNoYXIgICAgTl9ucGlfZGF0YV90 W05QSV9NQVhfREFUQV07Ci0KLS8qIGZkIG9yIHNlcnZlciB3YWl0aW5nIGZvciBjb25uZWN0aW9u cywgdXNlZCBieSBuZXRjbG9zIGFuZCBuZXRvcGVuICovCi1leHRlcm4gaW50IHgyNXNlcnZlcmZk OwotCi0jZW5kaWYgLyogSUJNWDI1ICovCi0KLSNpZmRlZiBIUFgyNSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBYLjI1IGluY2x1ZGVzLCBIUC1VWCBvbmx5ICovCi0jaW5jbHVkZSA8eDI1 L2NjaXR0cHJvdG8uaD4KLSNpbmNsdWRlIDx4MjUveDI1Lmg+Ci0jaW5jbHVkZSA8eDI1L3gyNWFk ZHJzdHIuaD4KLSNpbmNsdWRlIDx4MjUveDI1Y29kZXMuaD4KLSNpbmNsdWRlIDx4MjUveDI1aGRf aW9jdGwuaD4KLSNpbmNsdWRlIDx4MjUveDI1aW9jdGxzLmg+Ci0jaW5jbHVkZSA8eDI1L3gyNXN0 ci5oPgotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2VuZGlmIC8qIEhQWDI1ICovCi0KLS8qIEMt S2VybWl0IFguMyAvIFguMjUgLyBYLjI5IC8gWC4xMjEgc3VwcG9ydCBmdW5jdGlvbnMgKi8KLQot LyogKHJpZWhtOiB0aGlzIGxpc3Qgb2YgZnVuY3Rpb25zIGlzbid0IHF1aXRlIHJpZ2h0IGZvciBB SVgpICovCi0KLV9QUk9UT1RZUCggaW50IHNob3BhZCwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50 IHNob3gyNSwgKGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCBpbml0cGFkLCAodm9pZCkgKTsKLV9Q Uk9UT1RZUCggVk9JRCBzZXRwYWQsIChDSEFSICosIGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCBy ZWFkcGFkLCAoQ0hBUiAqLCBpbnQsIENIQVIgKikgKTsKLV9QUk9UT1RZUCggaW50IHFiaXRwa3Qs IChDSEFSICosIGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCBzZXRxYml0LCAodm9pZCkgKTsKLV9Q Uk9UT1RZUCggVk9JRCByZXNldHFiaXQsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIGJyZWFr YWN0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHBreDEyMSwgKGNoYXIgKiwgQ0hBUiAqKSAp OwotX1BST1RPVFlQKCBTSUdUWVAgeDI1b29iaCwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IHgy NWRpYWcsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgeDI1aW50ciwgKGNoYXIpICk7Ci1fUFJP VE9UWVAoIGludCB4MjVyZXNldCwgKGNoYXIsIGNoYXIpICk7Ci1fUFJPVE9UWVAoIGludCB4MjVj bGVhciwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCB4MjVzdGF0LCAodm9pZCkgKTsKLV9QUk9U T1RZUCggaW50IHgyNWluLCAoaW50LCBDSEFSICopICk7Ci1fUFJPVE9UWVAoIGludCBzZXRwYWRw LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHNldHgyNSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAo IGludCB4MjV4aW4sIChpbnQsIENIQVIgKikgKTsKLV9QUk9UT1RZUCggaW50IHgyNWlubCwgKENI QVIgKiwgaW50LCBpbnQsIENIQVIpICk7Ci0KLSNpZmRlZiBJQk1YMjUKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXR1cCB4MjUgKi8KLV9QUk9UT1RZUCggdWxv bmcgeDI1YmluZCwgKGludCwgY2hhciAqLCBjaGFyICosIGludCwgaW50LCBpbnQsIHVsb25nKSAp OwotX1BST1RPVFlQKCBpbnQgeDI1Y2FsbCwgKGludCwgY2hhciAqLCBjaGFyICopICk7IC8qIGNv bm5lY3QgdG8gcmVtb3RlICovCi1fUFJPVE9UWVAoIGludCB4MjV1bmJpbmQsIChpbnQpICk7ICAg ICAgLyogZGlzY29ubmVjdCAqLwotX1BST1RPVFlQKCBjaGFyICp4MjVwcmltLCAoaW50KSApOyAg ICAgIC8qIGRpc3BsYXkgcHJpbWl0aXZlcyAqLwotX1BST1RPVFlQKCBpbnQgeDI1bG9jYWxfbnVh LCAoY2hhciAqKSApOyAvKiBmaW5kIGxvY2FsIE5VQSAqLwotI2VuZGlmIC8qIElCTVgyNSAqLwot Ci0jZW5kaWYgLyogQU5ZWDI1ICovCi0KLS8qIENNVS1PcGVuVk1TL0lQICovCi0KLSNpZmRlZiBD TVVfVENQSVAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDTVVfVENQSVAgaW1wbGllcyBUQ1BT T0NLRVQgKi8KLSNpZm5kZWYgVENQU09DS0VUCi0jZGVmaW5lIFRDUFNPQ0tFVAotI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLwotI2lmbmRlZiBUQ1BJUExJQgotI2RlZmluZSBUQ1BJUExJQgotI2VuZGlm IC8qIFRDUElQTElCICovCi0jZW5kaWYgLyogQ01VX1RDUElQICovCi0KLS8qIERFQyBUQ1AvSVAg Zm9yIChPcGVuKVZNUywgcHJldmlvdXNseSBrbm93biBhcyBVQ1ggKi8KLQotI2lmZGVmIERFQ19U Q1BJUCAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQ19UQ1BJUCBpbXBsaWVzIFRDUFNPQ0tF VCAqLwotI2lmbmRlZiBUQ1BTT0NLRVQKLSNkZWZpbmUgVENQU09DS0VUCi0jZW5kaWYgLyogVENQ U09DS0VUICovCi0jaWZuZGVmIFRDUElQTElCCi0jZGVmaW5lIFRDUElQTElCCi0jZW5kaWYgLyog VENQSVBMSUIgKi8KLSNlbmRpZiAvKiBERUNfVENQSVAgKi8KLQotLyogU1JJL1RHVi9DaXNjby9Q cm9jZXNzIE11bHRpTmV0LCBUQ1AvSVAgZm9yIFZBWC9WTVMgKi8KLQotI2lmZGVmIE1VTFRJTkVU ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1VTFRJTkVUIGltcGxpZXMgVENQU09DS0VUICov Ci0jaWZuZGVmIFRDUFNPQ0tFVAotI2RlZmluZSBUQ1BTT0NLRVQKLSNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KLSNpZm5kZWYgVENQSVBMSUIKLSNkZWZpbmUgVENQSVBMSUIKLSNlbmRpZiAvKiBUQ1BJ UExJQiAqLwotI2lmbmRlZiBUR1ZPUldJTiAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1VTFRJ TkVUIGFuZCBXSU5UQ1AgKi8KLSNkZWZpbmUgVEdWT1JXSU4gICAgICAgICAgICAgICAgICAgICAg ICAvKiBzaGFyZSBhIGxvdCBvZiBjb2RlLi4uICovCi0jZW5kaWYgLyogVEdWT1JXSU4gKi8KLSNl bmRpZiAvKiBNVUxUSU5FVCAqLwotCi0vKiBXb2xsb25nb25nIFRDUC9JUCBmb3IgVkFYL1ZNUyAq LwotCi0jaWZkZWYgV0lOVENQICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0lOVENQIGlt cGxpZXMgVENQU09DS0VUICovCi0jaWZuZGVmIFRDUFNPQ0tFVAotI2RlZmluZSBUQ1BTT0NLRVQK LSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNpZm5kZWYgVENQSVBMSUIKLSNkZWZpbmUgVENQSVBM SUIKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotI2lmbmRlZiBUR1ZPUldJTiAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFdJTlRDUCBhbmQgTVVMVElORVQgKi8KLSNkZWZpbmUgVEdWT1JXSU4gICAg ICAgICAgICAgICAgICAgICAgICAvKiBzaGFyZSBhIGxvdCBvZiBjb2RlLi4uICovCi0jZW5kaWYg LyogVEdWT1JXSU4gKi8KLSNlbmRpZiAvKiBXSU5UQ1AgKi8KLQotLyogV29sbG9uZ29uZyBUQ1Av SVAgZm9yIEFUJlQgU3lzIFYgKi8KLQotI2lmZGVmIFdPTExPTkdPTkcgICAgICAgICAgICAgICAg ICAgICAgIC8qIFdPTExPTkdPTkcgaW1wbGllcyBUQ1BTT0NLRVQgKi8KLSNpZm5kZWYgVENQU09D S0VUICAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBjb25mdXNlIFdPTExPTkdPTkcgKi8K LSNkZWZpbmUgVENQU09DS0VUICAgICAgICAgICAgICAgICAgICAgICAvKiAod2hpY2ggaXMgZm9y IFVOSVgpIHdpdGggKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8gICAgICAgICAgICAgICAgICAv KiBXSU5UQ1AsIHdoaWNoIGlzIGZvciBWTVMhICovCi0jZW5kaWYgLyogV09MTE9OR09ORyAqLwot Ci0jaWZkZWYgRVhDRUxBTiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVhDRUxBTiBpbXBs aWVzIFRDUFNPQ0tFVCAqLwotI2lmbmRlZiBUQ1BTT0NLRVQKLSNkZWZpbmUgVENQU09DS0VUCi0j ZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogRVhDRUxBTiAqLwotCi0jaWZkZWYgSU5U RVJMQU4gICAgICAgICAgICAgICAgICAgICAgICAgLyogSU5URVJMQU4gaW1wbGllcyBUQ1BTT0NL RVQgKi8KLSNpZm5kZWYgVENQU09DS0VUCi0jZGVmaW5lIFRDUFNPQ0tFVAotI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLwotI2VuZGlmIC8qIElOVEVSTEFOICovCi0KLSNpZmRlZiBCRUJPWAotI2lmbmRl ZiBUQ1BTT0NLRVQKLSNkZWZpbmUgVENQU09DS0VUCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0j aWZuZGVmIFRDUElQTElCCi0jZGVmaW5lIFRDUElQTElCCi0jZW5kaWYgLyogVENQSVBMSUIgKi8K LSNkZWZpbmUgc29ja2V0X2Vycm5vICAgIGhfZXJybm8KLSNkZWZpbmUgc29ja2V0X3JlYWQoeCx5 LHopICAgICAgcmVjdih4LHksc2l6ZW9mKGNoYXIpLHopCi0jZGVmaW5lIHNvY2tldF93cml0ZSh4 LHkseikgICAgIHNlbmQoeCx5LHNpemVvZihjaGFyKSx6KQotI2RlZmluZSBzb2NrZXRfaW9jdGwg ICAgaW9jdGwKLSNkZWZpbmUgc29ja2V0X2Nsb3NlKHgpICAgICAgICAgY2xvc2Vzb2NrZXQoeCkK LSNpZm5kZWYgRklPTkJJTwotI2RlZmluZSBGSU9OQklPIDIKLSNlbmRpZiAvKiBGSU9OQklPICov Ci0jaWZuZGVmIEZJT05SRUFECi0jZGVmaW5lIEZJT05SRUFEICAgICAgIDEKLSNlbmRpZiAvKiBG SU9OUkVBRCAqLwotI2lmbmRlZiBTSU9DQVRNQVJLCi0jZGVmaW5lIFNJT0NBVE1BUksgICAgIDMK LSNlbmRpZiAvKiBTSU9DQVRNQVJLICovCi0jZW5kaWYgLyogQkVCT1ggKi8KLQotI2lmZGVmIENP TU1FTlQgLyogbm8gbG9uZ2VyIHVzZWQgYnV0IG1pZ2h0IGNvbWUgaW4gaGFuZHkgYWdhaW4gbGF0 ZXIuLi4gKi8KLS8qCi0gIENLX1JFQUQwIGNhbiAoYW5kIHNob3VsZCkgYmUgZGVmaW5lZCBpZiBh bmQgb25seSBpZjoKLSAgKGEpIHJlYWQoZmQsJngsMCkgY2FuIGJlIHVzZWQgaGFybWxlc3NseSBv biBhIFRDUC9JUCBzb2NrZXQgY29ubmVjdGlvbi4KLSAgKGIpIHJlYWQoZmQsJngsMCkgcmV0dXJu cyAwIGlmIHRoZSBjb25uZWN0aW9uIGlzIHVwLCAtMSBpZiBpdCBpcyBkb3duLgotKi8KLSNpZm5k ZWYgQ0tfUkVBRDAKLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZmRlZiBTVU5PUzQxICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBJdCB3b3JrcyBpbiBTdW5PUyA0LjEgKi8KLSNkZWZpbmUgQ0tfUkVB RDAKLSNlbHNlCi0jaWZkZWYgTkVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5k IE5lWFRTVEVQICovCi0jZGVmaW5lIENLX1JFQUQwCi0jZW5kaWYgLyogTkVYVCAqLwotI2VuZGlm IC8qIFNVTk9TNDEgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBDS19SRUFE MCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotLyogVGVsbmV0IHByb3RvY29sICovCi0KLSNp ZmRlZiBUQ1BTT0NLRVQgICAgICAgICAgICAgICAgICAgICAgICAvKiBUQ1BTT0NLRVQgaW1wbGll cyBUTkNPREUgKi8KLSNpZm5kZWYgVE5DT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBX aGljaCBtZWFucy4uLiAqLwotI2RlZmluZSBUTkNPREUgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIENvbXBpbGUgaW4gdGVsbmV0IGNvZGUgKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotLyoK LSAgIFBsYXRmb3JtcyB3aGVyZSB3ZSBtdXN0IGNhbGwgZ2V0aG9zdG5hbWUoYnVmLGxlbikgYW5k IHRoZW4KLSAgIGdldGhvc3RieW5hbWUoYnVmKSB0byBnZXQgbG9jYWwgSVAgYWRkcmVzcywgcmF0 aGVyIHRoYW4gY2FsbGluZwotICAgZ2V0aG9zdGJ5bmFtZSgiIikuCi0qLwotI2lmbmRlZiBDS0dI TkxIT1NUCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSNkZWZpbmUgQ0tHSE5MSE9TVAotI2Vsc2UKLSNp ZmRlZiBTT0xBUklTCi0jZGVmaW5lIENLR0hOTEhPU1QKLSNlbHNlCi0jaWZkZWYgU1VOT1M0Ci0j ZGVmaW5lIENLR0hOTEhPU1QKLSNlbHNlCi0jaWZkZWYgVU5JWFdBUkUKLSNkZWZpbmUgQ0tHSE5M SE9TVAotI2Vsc2UKLSNpZmRlZiBTSU5JWAotI2RlZmluZSBDS0dITkxIT1NUCi0jZW5kaWYgLyog U0lOSVggKi8KLSNlbmRpZiAvKiBVTklYV0FSRSAqLwotI2VuZGlmIC8qIFNVTk9TNCAqLwotI2Vu ZGlmIC8qIFNPTEFSSVMgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIENL R0hOTEhPU1QgKi8KLQotI2lmbmRlZiBSTE9HQ09ERSAgICAgICAgICAgICAgICAgICAgICAgIC8q IFdoYXQgYWJvdXQgUmxvZ2luPyAqLwotI2lmbmRlZiBOT1JMT0dJTgotLyoKLSAgUmxvZ2luIGNh biBiZSBlbmFibGVkIG9ubHkgZm9yIFVOSVggdmVyc2lvbnMgdGhhdCBoYXZlIGJvdGggU0lHVVJH Ci0gIChTQ08gZG9lc24ndCkgYW5kIENLX1RUR1dTSVogKE9TRi8xIGRvZXNuJ3QpLCBzbyB3ZSBk b24ndCBhc3N1bWUgdGhhdAotICBhbnkgb3RoZXJzIGhhdmUgdGhlc2Ugd2l0aG91dCB2ZXJpZnlp bmcgZmlyc3QuICBOb3QgdGhhdCBpdCByZWFsbHkgbWFrZXMKLSAgbXVjaCBkaWZmZXJlbmNlIHNp bmNlIHlvdSBjYW4gb25seSB1c2UgUmxvZ2luIGlmIHlvdSBhcmUgcm9vdC4uLgotKi8KLSNpZmRl ZiBTVU5PUzQxCi0jZGVmaW5lIFJMT0dDT0RFCi0jZWxzZQotI2lmZGVmIFNPTEFSSVMKLSNkZWZp bmUgUkxPR0NPREUKLSNlbHNlCi0jaWZkZWYgSFBVWDkKLSNkZWZpbmUgUkxPR0NPREUKLSNlbHNl Ci0jaWZkZWYgSFBVWDEwCi0jZGVmaW5lIFJMT0dDT0RFCi0jZWxzZQotI2lmZGVmIE9TRjQwCi0j ZGVmaW5lIFJMT0dDT0RFCi0jZWxzZQotI2lmZGVmIE5FWFQKLSNkZWZpbmUgUkxPR0NPREUKLSNl bHNlCi0jaWZkZWYgQUlYNDEKLSNkZWZpbmUgUkxPR0NPREUKLSNlbHNlCi0jaWZkZWYgVU5JWFdB UkUKLSNkZWZpbmUgUkxPR0NPREUKLSNlbHNlCi0jaWZkZWYgSVJJWDUxCi0jZGVmaW5lIFJMT0dD T0RFCi0jZWxzZQotI2lmZGVmIElSSVg2MAotI2RlZmluZSBSTE9HQ09ERQotI2Vsc2UKLSNpZmRl ZiBRTlgKLSNkZWZpbmUgUkxPR0NPREUKLSNlbHNlCi0jaWZkZWYgX19saW51eF9fCi0jZGVmaW5l IFJMT0dDT0RFCi0jZWxzZQotI2lmZGVmIEJTRDQ0Ci0jZGVmaW5lIFJMT0dDT0RFCi0jZW5kaWYg LyogQlNENDQgKi8KLSNlbmRpZiAvKiBfX2xpbnV4X18gKi8KLSNlbmRpZiAvKiBRTlggKi8KLSNl bmRpZiAvKiBJUklYNjAgKi8KLSNlbmRpZiAvKiBJUklYNTEgKi8KLSNlbmRpZiAvKiBVTklYV0FS RSAqLwotI2VuZGlmIC8qIEFJWDQxICovCi0jZW5kaWYgLyogTkVYVCAqLwotI2VuZGlmIC8qIE9T RjQwICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYgLyogSFBVWDkgKi8KLSNlbmRpZiAv KiBTT0xBUklTICovCi0jZW5kaWYgLyogU1VOT1M0MSAqLwotI2VuZGlmIC8qIE5PUkxPR0lOICov Ci0jaWZkZWYgVk1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVk1TICovCi0jZGVm aW5lIFJMT0dDT0RFCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNl bmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotI2lmZGVmIFROQ09ERQotLyoKLSAgVGVsbmV0IGxvY2Fs LWVjaG8gYnVmZmVyLCB1c2VkIGZvciBzYXZpbmcgdXAgdXNlciBkYXRhIHRoYXQgY2FuJ3QgYmUK LSAgcHJvcGVybHkgZGlzcGxheWVkIGFuZC9vciBldmFsdWF0ZWQgdW50aWwgcGVuZGluZyBUZWxu ZXQgbmVnb3RpYXRpb25zIGFyZQotICBjb21wbGV0ZS4gIFRUTEVCVUYgaXMgZGVmaW5lZCBmb3Ig cGxhdGZvcm1zIChsaWtlIFVOSVgpIHdoZXJlIG5ldCBpL28gaXMKLSAgZG9uZSBieSB0aGUgc2Ft ZSByb3V0aW5lcyB0aGF0IGRvIHNlcmlhbCBpL28gKGluIHdoaWNoIGNhc2UgdGhlIHJlbGV2YW50 Ci0gIGNvZGUgZ29lcyBpbnRvIHRoZSBjaz90aW8uYyBtb2R1bGUsIGluIHRoZSB0dGluYygpLCB0 dGNoaygpLCBldGMsIHJvdXRpbmVzKTsKLSAgTkVUTEVUQlVGIGlzIGRlZmluZWQgZm9yIHBsYXRm b3JtcyAobGlrZSBWTVMpIHRoYXQgdXNlIGRpZmZlcmVudCBBUElzIGZvcgotICBuZXR3b3JrIGFu ZCBzZXJpYWwgaS9vLCBhbmQgZW5hYmxlcyB0aGUgY29waWVzIG9mIHRoZSBzYW1lIHJvdXRpbmVz IHRoYXQKLSAgYXJlIGluIGNrY25ldC5jLgotKi8KLSNpZm5kZWYgVFRMRUJVRgotI2lmZGVmIFVO SVgKLSNkZWZpbmUgVFRMRUJVRgotI2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJhbAotI2RlZmluZSBU VExFQlVGCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5k aWYgLyogVFRMRUJVRiAqLwotCi0jaWZuZGVmIE5FVExFQlVGCi0jaWZkZWYgVk1TCi0jZGVmaW5l IE5FVExFQlVGCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogTkVUTEVCVUYgKi8KLSNlbmRp ZiAvKiBUTkNPREUgKi8KLQotI2lmZGVmIFNVTlgyNSAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFNVTlgyNSBpbXBsaWVzIFRDUFNPQ0tFVCAqLwotI2lmbmRlZiBUQ1BTT0NLRVQgICAgICAg ICAgICAgICAgICAgICAgIC8qIEJ1dCBkb2Vzbid0IGltcGx5IFROQ09ERSAqLwotI2RlZmluZSBU Q1BTT0NLRVQKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBTVU5YMjUgKi8KLQot I2lmbmRlZiBUQ1BTT0NLRVQKLSNpZm5kZWYgTk9fRE5TX1NSVgotI2RlZmluZSBOT19ETlNfU1JW Ci0jZW5kaWYgLyogTk9fRE5TX1NSViAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0vKiBU aGlzIGlzIGFub3RoZXIgVENQU09DS0VUIHNlY3Rpb24uLi4gKi8KLQotI2lmZGVmIFRDUFNPQ0tF VAotI2lmbmRlZiBORVRDT05OICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRDUFNPQ0tFVCBp bXBsaWVzIE5FVENPTk4gKi8KLSNkZWZpbmUgTkVUQ09OTgotI2VuZGlmIC8qIE5FVENPTk4gKi8K LQotI2lmbmRlZiBOT19ETlNfU1JWCi0jaWZkZWYgTk9MT0NBTAotI2RlZmluZSBOT19ETlNfU1JW Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmZGVmIE9TMk9OTFkKLSNkZWZpbmUgTk9fRE5TX1NS VgotI2VuZGlmIC8qIE9TMk9OTFkgKi8KLSNpZmRlZiBOVAotI2lmZGVmIF9NX1BQQwotI2RlZmlu ZSBOT19ETlNfU1JWCi0jZW5kaWYgLyogX01fRE5TICovCi0jZW5kaWYgLyogTk9fRE5TX1NSViAq LwotI2lmZGVmIFZNUwotI2RlZmluZSBOT19ETlNfU1JWCi0jZW5kaWYgLyogVk1TICovCi0jaWZk ZWYgU1RSQVRVUwotI2RlZmluZSBOT19ETlNfU1JWCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2lm ZGVmIGRhdGFnZW5lcmFsCi0jZGVmaW5lIE5PX0ROU19TUlYKLSNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLwotI2lmZGVmIHVsdHJpeAotI2RlZmluZSBOT19ETlNfU1JWCi0jZW5kaWYgLyogdWx0cml4 ICovCi0jaWZkZWYgTkVYVAotI2RlZmluZSBOT19ETlNfU1JWCi0jZW5kaWYgLyogTkVYVCAqLwot I2VuZGlmIC8qIE5PX0ROU19TUlYgKi8KLQotI2lmbmRlZiBDS19ETlNfU1JWICAgICAgICAgICAg ICAgICAgICAgIC8qIFVzZSBETlMgU1JWIHJlY29yZHMgdG8gZGV0ZXJtaW5lICovCi0jaWZuZGVm IE5PX0ROU19TUlYgICAgICAgICAgICAgICAgICAgICAgLyogaG9zdCBhbmQgcG9ydHMgKi8KLSNk ZWZpbmUgQ0tfRE5TX1NSVgotI2VuZGlmIC8qIE5PX0ROU19TUlYgKi8KLSNlbmRpZiAvKiBDS19E TlNfU1JWICovCi0KLSNpZm5kZWYgTk9MSVNURU4gICAgICAgICAgICAgICAgICAgICAgICAvKiBz ZWxlY3QoKSBpcyByZXF1aXJlZCB0byBzdXBwb3J0ICovCi0jaWZuZGVmIFNFTEVDVCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogaW5jb21pbmcgY29ubmVjdGlvbnMuICovCi0jaWZuZGVmIFZN UwotI2lmbmRlZiBPUzIKLSNkZWZpbmUgTk9MSVNURU4KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRp ZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBTRUxFQ1QgKi8KLSNlbmRpZiAvKiBOT0xJU1RFTiAqLwot Ci0vKiBCU0Qgc29ja2V0cyBsaWJyYXJ5IGhlYWRlciBmaWxlcyAqLwotCi0jaWZkZWYgVk1TCi0v KgotICBCZWNhdXNlIGJ6ZXJvKCkgYW5kIGJjb3B5KCkgYXJlIG5vdCBwb3J0YWJsZSBhbW9uZyBW TVMgdmVyc2lvbnMsCi0gIG9yIGNvbXBpbGVycywgb3IgVENQL0lQIHByb2R1Y3RzLCBldGMuCi0q LwotI2lmbmRlZiBiemVybwotI2RlZmluZSBiemVybyhzLG4pIG1lbXNldChzLDAsbikKLSNlbmRp ZiAvKiBiemVybyAqLwotI2lmbmRlZiBiY29weQotI2RlZmluZSBiY29weShoLGEsbCkgbWVtY3B5 KGEsaCxsKQotI2VuZGlmIC8qIGJjb3B5ICovCi0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBI UFVYNgotLyogVGhlc2UgYXJlIG1pc3NpbmcgaW4gSFAtVVggNi54eCAqLwotI2lmbmRlZiBiemVy bwotI2RlZmluZSBiemVybyhzLG4pIG1lbXNldChzLDAsbikKLSNlbmRpZiAvKiBiemVybyAqLwot I2lmbmRlZiBiY29weQotI2RlZmluZSBiY29weShoLGEsbCkgbWVtY3B5KGEsaCxsKQotI2VuZGlm IC8qIGJjb3B5ICovCi0jZW5kaWYgLyogSFBVWDYgKi8KLQotI2lmZGVmIFVOSVggICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFVOSVggc2VjdGlvbiAqLwotCi0jaWZkZWYgU1ZSNAotLyoK LSAgVGhlc2Ugc3VnZ2VzdGVkIGJ5IFJvYiBIZWFsZXksIHJoZWFsZXlAa2FzLmhlbGlvcy5tbi5v cmcsIHRvIGF2b2lkCi0gIGJ1Z3MgaW4gQmVya2VsZXkgY29tcGF0aWJpbGl0eSBsaWJyYXJ5IG9u IFN5cyBWIFI0IHN5c3RlbXMsIGJ1dCB1bnRlc3RlZAotICBieSBtZSAoZmRjKS4gIFJlbW92ZSB0 aGlzIGJpdCBpZiBpdCBnaXZlcyB5b3UgdHJvdWJsZS4KLSAgKExhdGVyIGNvcnJlY3RlZCBieSBN YXJjIEJvdWNoZXIgPG1ib3VjaGVyQGlyby51bW9udHJlYWwuY2E+IGJlY2F1c2UKLSAgYnplcm8v YmNvcHkgYXJlIG5vdCBhcmd1bWVudC1jb21wYXRpYmxlIHdpdGggbWVtc2V0L21lbWNweXxtZW1t b3ZlLikKLSovCi0jaWZuZGVmIGJ6ZXJvCi0jZGVmaW5lIGJ6ZXJvKHMsbikgbWVtc2V0KHMsMCxu KQotI2VuZGlmCi0jaWZkZWYgU09MQVJJUwotI2lmZGVmIFNVTlgyNQotI3VuZGVmIGJ6ZXJvCi0v KgotICBXT1VMRCBZT1UgQkVMSUVWRS4uLiBUaGF0IHRoZSBTb2xhcmlzIFguMjUgL29wdC9TVU5X Y29tbS9saWIvbGlic29ja3gyNQotICBsaWJyYXJ5IHJlZmVyZW5jZXMgYnplcm8sIGV2ZW4gdGhv dWdoIHRoZSB1c2Ugb2YgYnplcm8gaXMgZm9yYmlkZGVuIGluCi0gIFNvbGFyaXM/ICBMb29rIGZv ciB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBja2NuZXQuYy4KLSovCi1fUFJPVE9UWVAoIHZv aWQgYnplcm8sIChjaGFyICosIGludCkgKTsKLSNlbmRpZiAvKiBTVU5YMjUgKi8KLSNpZm5kZWYg YmNvcHkKLSNkZWZpbmUgYmNvcHkoaCxhLGwpIG1lbWNweShhLGgsbCkKLSNlbmRpZgotI2Vsc2UK LSNpZm5kZWYgYmNvcHkKLSNkZWZpbmUgYmNvcHkoaCxhLGwpIG1lbW1vdmUoYSxoLGwpCi0jZW5k aWYKLSNlbmRpZiAvKiBTT0xBUklTICovCi0jZWxzZSAvKiAhU1ZSNCAqLwotI2lmZGVmIFBUWCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlcXVlbnQgRFlOSVggUFRYIDEuMyAqLwot I2lmbmRlZiBiemVybwotI2RlZmluZSBiemVybyhzLG4pIG1lbXNldChzLDAsbikKLSNlbmRpZgot I2lmbmRlZiBiY29weQotI2RlZmluZSBiY29weShoLGEsbCkgbWVtY3B5KGEsaCxsKQotI2VuZGlm Ci0jZW5kaWYgLyogUFRYICovCi0jZW5kaWYgLyogU1ZSNCAqLwotCi0jaWZkZWYgSU5URVJMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmFjYWwtSW50ZXJsYW4gVENQL0lQICovCi0jaW5j bHVkZSA8aW50ZXJsYW4vc29ja2V0Lmg+Ci0jaW5jbHVkZSA8aW50ZXJsYW4vaWxfdHlwZXMuaD4K LSNpbmNsdWRlIDxpbnRlcmxhbi90ZWxuZXQuaD4KLSNpbmNsdWRlIDxpbnRlcmxhbi9pbF9lcnJu by5oPgotI2luY2x1ZGUgPGludGVybGFuL2luLmg+Ci0jaW5jbHVkZSA8aW50ZXJsYW4vdGVsbmV0 Lmg+ICAgICAgICAgICAgLyogV2h5IHR3aWNlID8gPyA/ICovCi0jZWxzZSAvKiBOb3QgSW50ZXJs YW4gKi8KLSNpZmRlZiBCRUJPWAotI2luY2x1ZGUgPHNvY2tldC5oPgotI2Vsc2UgLyogTm90IEJF Qk9YICovICAgICAgICAgICAgICAgICAgIC8qIE5vcm1hbCBCU0QgVENQL0lQIGxpYnJhcnkgKi8K LSNpZmRlZiBDT01NRU5UCi0jaWZuZGVmIEhQVVgKLSNpbmNsdWRlIDxhcnBhL3RlbG5ldC5oPgot I2VuZGlmIC8qIEhQVVggKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYgU0NPMjM0Ci0j aW5jbHVkZSA8c3lzL2Vycm5vLnRjcC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy50Y3AuaD4KLSNl bmRpZiAvKiBTQ08yMzQgKi8KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgV09MTE9O R09ORwotI2luY2x1ZGUgPHN5cy9pbi5oPgotI2Vsc2UKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+ Ci0jaWZuZGVmIFNWNjhSM1Y2ICAgICAgICAgICAgICAgIC8qIChtYXliZSB0aGlzIHNob3VsZCBi ZSBTVlIzIGluIGdlbmVyYWwpICovCi0jaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4gICAgICAgIC8q IEFkZGVkIEp1bmUgMjAwMSAqLwotI2VuZGlmIC8qIFNWNjhSM1Y2ICovCi0jZW5kaWYgLyogV09M TE9OR09ORyAqLwotI2VuZGlmIC8qIEJFQk9YICovCi0jZW5kaWYgLyogSU5URVJMQU4gKi8KLQot I2lmbmRlZiBFWENFTEFOCi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpZm5kZWYgSU5URVJMQU4KLSNp ZmRlZiBXT0xMT05HT05HCi0jZGVmaW5lIG1pbm9yICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogRG8gbm90IGluY2x1ZGUgPHN5cy9tYWNyb3MuaD4gKi8KLSNpbmNsdWRlIDxzeXMvaW5ldC5o PgotI2Vsc2UKLSNpZm5kZWYgT1hPUwotI2lmbmRlZiBIUFVYCi0jaWZuZGVmIEJFQk9YCi0jaW5j bHVkZSA8YXJwYS9pbmV0Lmg+Ci0jZW5kaWYgLyogQkVCT1ggKi8KLSNlbmRpZiAvKiBIUFVYICov Ci0jZWxzZSAvKiBPWE9TICovCi0vKiBJbiB0b28gbWFueSByZWxlYXNlcyBvZiBYL09TLCA8YXJw YS9pbmV0Lmg+IGRlY2xhcmVzIGluZXRfYWRkcigpIGFzCi0gKiBgYHN0cnVjdCBpbl9hZGRyJycu ICBUaGlzIGlzIGRlZmluaXRpdmVseSB3cm9uZywgYW5kIGNvdWxkIGNhdXNlCi0gKiBjb3JlIGR1 bXBzLiAgSW5zdGVhZCBvZiBpbmNsdWRpbmcgdGhhdCBiYWQgZmlsZSwgaW5ldF9hZGRyKCkgaXMK LSAqIGNvcnJlY3RseSBkZWNsYXJlZCBoZXJlLiAgT2YgY291cnNlLCBhbGwgdGhlIGRlY2xhcmF0 aW9ucyBkb25lIHRoZXJlCi0gKiBoYXMgYmVlbiBjb3BpZWQgaGVyZS4KLSAqLwotdW5zaWduZWQg bG9uZyBpbmV0X2FkZHIoKTsKLWNoYXIgICAgKmluZXRfbnRvYSgpOwotc3RydWN0ICBpbl9hZGRy IGluZXRfbWFrZWFkZHIoKTsKLXVuc2lnbmVkIGxvbmcgaW5ldF9uZXR3b3JrKCk7Ci0jZW5kaWYg LyogT1hPUyAqLwotI2VuZGlmIC8qIFdPTExPTkdPTkcgKi8KLSNlbmRpZiAvKiBJTlRFUkxBTiAq LwotI2VuZGlmIC8qIEVYQ0VMQU4gKi8KLQotI2lmZGVmIEVYQ0VMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEV4Y2VsYW4gVENQL0lQICovCi0jaWZuZGVmIGJ6ZXJvCi0jZGVmaW5lIGJ6 ZXJvKHMsbikgbWVtc2V0KHMsMCxuKQotI2VuZGlmIC8qIGJ6ZXJvICovCi0jaWZuZGVmIGJjb3B5 Ci0jZGVmaW5lIGJjb3B5KGgsYSxsKSBtZW1jcHkoYSxoLGwpCi0jZW5kaWYgLyogYmNvcHkgKi8K LSNpbmNsdWRlIDxleF9lcnJuby5oPgotI2VuZGlmIC8qIEVYQ0VMQU4gKi8KLQotI2lmZGVmIEkz ODZJWCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVyYWN0aXZlIFN5cyBWIFIzIG5l dHdvcmsuICovCi0vKiAjZGVmaW5lIFRFTE9QVFMgKi8gICAgICAgICAgICAgICAgICAgLyogVGhp cyBtaWdodCBuZWVkIGRlZmluaW5nLiAqLwotI2RlZmluZSBPUkdfTkxPTkcgRU5BTUVUT09MT05H ICAgICAgICAgIC8qIFJlc29sdmUgY29uZmxpY3Rpbmcgc3ltYm9scyAqLwotI3VuZGVmIEVOQU1F VE9PTE9ORyAgICAgICAgICAgICAgICAgICAgIC8qIGluIDxlcnJuby5oPiBhbmQgPG5ldC9lcnJu by5oPiAqLwotI2RlZmluZSBPUkdfTkVNUFRZIEVOT1RFTVBUWQotI3VuZGVmIEVOT1RFTVBUWQot I2luY2x1ZGUgPG5ldC9lcnJuby5oPgotI3VuZGVmIEVOQU1FVE9PTE9ORwotI2RlZmluZSBFTkFN RVRPT0xPTkcgT1JHX05MT05HCi0jdW5kZWYgRU5PVEVNUFRZCi0jZGVmaW5lIEVOT1RFTVBUWSBP UkdfTkVNUFRZCi0jaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4gICAgICAgICAgICAgICAgLyogZm9y IGluZXRfYWRkcigpICovCi0jZW5kaWYgLyogSTM4NklYICovCi0vKgotICBEYXRhIHR5cGUgb2Yg dGhlIGluZXRfYWRkcigpIGZ1bmN0aW9uLi4uCi0gIFdlIGRlZmluZSBJTkFERFJYIGlmIGl0IGlz IG9mIHR5cGUgc3RydWN0IGluYWRkci4KLSAgSWYgaXQgaXMgdW5kZWZpbmVkLCB1bnNpZ25lZCBs b25nIGlzIGFzc3VtZWQuCi0gIExvb2sgYXQgPGFycGEvaW5ldC5oPiB0byBmaW5kIG91dC4gIFRo ZSBmb2xsb3dpbmcga25vd24gY2FzZXMgYXJlCi0gIGhhbmRsZWQgaGVyZS4gIE90aGVyIHN5c3Rl bXMgdGhhdCBuZWVkIGl0IGNhbiBiZSBhZGRlZCBoZXJlLCBvciBlbHNlCi0gIC1ESU5BRERSWCBj YW4gYmUgaW5jbHVkZWQgaW4gdGhlIENGTEFHUyBvbiB0aGUgY2MgY29tbWFuZCBsaW5lLgotKi8K LSNpZm5kZWYgTk9JTkFERFJYCi0jaWZkZWYgRFUyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogREVDIFVsdHJpeCAyLjAgKi8KLSNkZWZpbmUgSU5BRERSWAotI2VuZGlmIC8qIERVMiAq LwotI2VuZGlmIC8qIE5PSU5BRERSWCAqLwotCi0jZWxzZSAvKiBOb3QgVU5JWCAqLwotCi0jaWZk ZWYgVk1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKE9wZW4pVk1TIHNlY3Rpb24g Ki8KLQotI2lmZGVmIE1VTFRJTkVUICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRHViBNdWx0 aU5ldCAqLwotLyoKLSAgSW4gQy1LZXJtaXQgNy4wIEJldGEuMDggd2Ugc3RhcnRlZCBnZXR0aW5n IHNjYWRzIG9mIGNvbXBpbGUgdGltZSB3YXJuaW5ncwotICBpbiBNdWx0aW5ldCBidWlsZHM6ICJi bGFoIiBpcyBpbXBsaWNpdGx5IGRlY2xhcmVkIGFzIGEgZnVuY3Rpb24sIHdoZXJlIGJsYWgKLSAg aXMgc29ja2V0X3JlYWQvd3JpdGUvY2xvc2UsIG50b2hzLCBodG9ucywgZ2V0cGVlcm5hbWUsIGFj Y2VwdCwgc2VsZWN0LCBldGMuCi0gIEkgaGF2ZSBubyBpZGVhIHdoeSAtLSB0aGVzZSByb3V0aW5l cyBhcmUgZGVjbGFyZWQgaW4gdGhlIGhlYWRlciBmaWxlcyBiZWxvdywKLSAgYW5kIHRoZSBpbmNs dWRlcyBoYXZlbid0IGNoYW5nZWQuICBUaGUgZXhlY3V0YWJsZSBzdGlsbCBzZWVtcyB0byB3b3Jr IE9LLgotICBNZXNzaW5nIHdpdGggdGhlIG9yZGVyIG9mIHRoZSBmb2xsb3dpbmcgaW5jbHVkZXMg aXMgZGlzYXN0cm91cy4KLSovCi0jaWZkZWYgTVVMVElORVRfTk9fUFJPVE9UWVBFUwotI3VuZGVm IE1VTFRJTkVUX05PX1BST1RPVFlQRVMKLSNlbmRpZiAvKiBNVUxUSU5FVF9OT19QUk9UT1RZUEVT ICovCi0KLSNpZmRlZiAgX19jcGx1c3BsdXMKLSN1bmRlZiAgX19jcGx1c3BsdXMKLSNlbmRpZiAv KiAgX19jcGx1c3BsdXMgKi8KLQotI2luY2x1ZGUgIm11bHRpbmV0X3Jvb3Q6W211bHRpbmV0Lmlu Y2x1ZGVdZXJybm8uaCIKLSNpbmNsdWRlICJtdWx0aW5ldF9yb290OlttdWx0aW5ldC5pbmNsdWRl LnN5c110eXBlcy5oIgotI2luY2x1ZGUgIm11bHRpbmV0X3Jvb3Q6W211bHRpbmV0LmluY2x1ZGUu c3lzXXNvY2tldC5oIgotI2luY2x1ZGUgIm11bHRpbmV0X3Jvb3Q6W211bHRpbmV0LmluY2x1ZGVd bmV0ZGIuaCIKLSNpbmNsdWRlICJtdWx0aW5ldF9yb290OlttdWx0aW5ldC5pbmNsdWRlLm5ldGlu ZXRdaW4uaCIKLSNpbmNsdWRlICJtdWx0aW5ldF9yb290OlttdWx0aW5ldC5pbmNsdWRlLmFycGFd aW5ldC5oIgotI2luY2x1ZGUgIm11bHRpbmV0X3Jvb3Q6W211bHRpbmV0LmluY2x1ZGUuc3lzXWlv Y3RsLmgiCi0KLSNpZmRlZiBDT01NRU5UCi0vKgotICBObyBsb25nZXIgbmVlZGVkIGJlY2F1c2Ug bm93IGJ6ZXJvL2Jjb3B5IGFyZSBtYWNyb3MgZGVmaW5lZCBhcwotICBtZW1zZXQvbWVtbW92ZSBp biBhbGwgVk1TIGJ1aWxkcy4KLSovCi0vKgotICBXZSBzaG91bGQgYmUgYWJsZSB0byBwaWNrIHRo ZXNlIHVwIGZyb20gPHN0cmluZ3MuaD4gYnV0IGl0J3MKLSAgbm90IHBvcnRhYmxlIGJldHdlZW4g VkFYQyBhbmQgREVDQy4gIEFuZCBldmVuIHdpdGggREVDQyA1Lnggd2UgaGF2ZSBhCi0gIGRpZmZl cmVuY2UgYmV0d2VlbiBWQVggYW5kIEFscGhhLiAgV2UgZ2V0IHdhcm5pbmdzIGhlcmUgb24gdGhl IFZBWAotICB3aXRoIERFQ0MgNS42LTAwMyBidXQgdGhleSBhcmUgbm90IGZhdGFsLgotKi8KLSNp Zm5kZWYgX19ERUNDX1ZFUgotI2lmbmRlZiBiemVybwotX1BST1RPVFlQKCB2b2lkIGJ6ZXJvLCAo Y2hhciAqLCBpbnQpICk7Ci0jZW5kaWYgLyogYnplcm8gKi8KLSNpZm5kZWYgYmNvcHkKLV9QUk9U T1RZUCggdm9pZCBiY29weSwgKGNoYXIgKiwgY2hhciAqLCBpbnQpICk7Ci0jZW5kaWYgLyogYmNv cHkgKi8KLSNlbmRpZiAvKiBfX0RFQ0NfVkVSICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0j aWZkZWYgX19ERUNDCi0vKgotICAgSWYgY29tcGlsaW5nIHVuZGVyIERFQyBDIHRoZSBzb2NrZXQg Y2FsbHMgbXVzdCBub3QgYmUgcHJlZml4ZWQgd2l0aAotICAgREVDQyQuICBUaGlzIGlzIGRvbmUg YnkgdXNpbmcgdGhlIGNvbXBpbGVyIHN3aXRjaCAvUHJlZml4PUFuc2lfQzg5LgotICAgSG93ZXZl ciwgdGhpcyBjYXVzZXMgc29tZSBjYWxscyB0aGF0IHNob3VsZCBiZSBwcmVmaXhlZCB0byBub3Qg YmUKLSAgICh3aGljaCBJIHRoaW5rIGlzIGEgYnVnIGluIHRoZSBjb21waWxlciAtIEkndmUgYmVl biB0b2xkIHRoZXNlIGNhbGxzCi0gICBhcmUgcHJlc2VudCBpbiBBTlNJIGNvbXBpbGVycykuICBB dCBhbnkgcmF0ZSwgc3VjaCBjYWxscyBhcmUgZml4ZWQKLSAgIGhlcmUgYnkgZXhwbGljaXRseSBw cmVmaXhpbmcgdGhlbS4KLSovCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgIEJ1dCB0aGlzIGNhdXNl cyBlcnJvcnMgd2l0aCBWTVMgNi4yIC8gREVDIEMgNS4zLTAwNiAvIE11bHRpTmV0IDQuMEEgb24K LSAgIGEgVkFYIChidXQgbm90IG9uIGFuIEFscGhhKS4gIFNvIG5vdyB3aGF0IGhhcHBlbnMgaWYg d2Ugc2tpcCBkb2luZyB0aGlzPwotKi8KLSNkZWZpbmUgY2xvc2UgZGVjYyRjbG9zZQotI2RlZmlu ZSBhbGFybSBkZWNjJGFsYXJtCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIF9fREVD QyAqLwotCi0jZWxzZSAvKiBOb3QgTVVMVElORVQgKi8KLQotI2lmZGVmIFdJTlRDUCAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFdJTi9UQ1AgPSBQYXRoV2F5IGZvciBWTVMgKi8KLSNpZmRl ZiBPTERfVFdHCi0jaW5jbHVkZSAidHdnJHRjcDpbbmV0ZGlzdC5pbmNsdWRlLnN5c11lcnJuby5o IgotI2luY2x1ZGUgInR3ZyR0Y3A6W25ldGRpc3QuaW5jbHVkZS5zeXNddHlwZXMyLmgiIC8qIGF2 b2lkIHNvbWUgZHVwbGljYXRlcyAqLwotI2Vsc2UKLSNpbmNsdWRlICJ0d2ckdGNwOltuZXRkaXN0 LmluY2x1ZGVdc29ja2V0X2FsaWFzZXMuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUg InR3ZyR0Y3A6W25ldGRpc3QuaW5jbHVkZS5zeXNddHlwZXMuaCIKLSNlbmRpZiAvKiBPTERfVFdH ICovCi0jaW5jbHVkZSAidHdnJHRjcDpbbmV0ZGlzdC5pbmNsdWRlLnN5c11zb2NrZXQuaCIKLSNp bmNsdWRlICJ0d2ckdGNwOltuZXRkaXN0LmluY2x1ZGVdbmV0ZGIuaCIKLSNpbmNsdWRlICJ0d2ck dGNwOltuZXRkaXN0LmluY2x1ZGUuc3lzXWRvbWFpbi5oIgotI2luY2x1ZGUgInR3ZyR0Y3A6W25l dGRpc3QuaW5jbHVkZS5zeXNdcHJvdG9zdy5oIgotI2luY2x1ZGUgInR3ZyR0Y3A6W25ldGRpc3Qu aW5jbHVkZS5uZXRpbmV0XWluLmgiCi0jaW5jbHVkZSAidHdnJHRjcDpbbmV0ZGlzdC5pbmNsdWRl LmFycGFdaW5ldC5oIgotI2luY2x1ZGUgInR3ZyR0Y3A6W25ldGRpc3QuaW5jbHVkZS5zeXNdaW9j dGwuaCIKLQotI2Vsc2UgLyogTm90IFdJTlRDUCAqLwotCi0jaWZkZWYgREVDX1RDUElQCi0jaWZk ZWYgVUNYNTAKLSNpZm5kZWYgSUZfRE9UX0gKLSNkZWZpbmUgSUZfRE9UX0gKLSNlbmRpZiAvKiAg SUZfRE9UX0ggKi8KLSNlbmRpZiAvKiBVQ1g1MCAqLwotCi0jaWZkZWYgSUZfRE9UX0gKLSNpbmNs dWRlIDxpZi5oPiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWVkZWQgdG8gcHV0IHVwIHVf aW50IHR5cGVkZWYgKi8KLSNlbHNlCi0jaWZkZWYgTkVFRFVJTlQKLXR5cGVkZWYgdW5zaWduZWQg aW50IHVfaW50OwotI2VuZGlmIC8qIE5FRURVSU5UICovCi0jZW5kaWYgLyogSUZfRE9UX0ggKi8K LQotI2luY2x1ZGUgPGluLmg+Ci0jaWZkZWYgVk1TCi0jaW5jbHVkZSA8aW5ldC5oPgkJCS8qIChT TVMgMjAwNy8wMi8xNSkgKi8KLSNlbmRpZgkvKiBWTVMgKi8KLSNpbmNsdWRlIDxuZXRkYi5oPgot I2luY2x1ZGUgPHNvY2tldC5oPgotI2luY2x1ZGUgImNrdmlvYy5oIgotI2RlZmluZSBzb2NrZXRf ZXJybm8gZXJybm8KLQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIE5vIGxvbmdlciBuZWVkZWQgYmVj YXVzZSBub3cgYnplcm8vYmNvcHkgYXJlIG1hY3JvcyBkZWZpbmVkIGFzCi0gIG1lbXNldC9tZW1t b3ZlIGluIGFsbCBWTVMgYnVpbGRzLgotKi8KLS8qCi0gIFRyYW5zbGF0aW9uOiBJbiA8c3RyaW5n cy5oPiwgd2hpY2ggZXhpc3RzIG9ubHkgZm9yIERFQ0MgPj0gNS4yLCBiemVybygpCi0gIGFuZCBi Y29weSgpIGFyZSBkZWNsYXJlZCBvbmx5IGZvciBPcGVuVk1TID49IDcuMC4gIFRoaXMgc3RpbGwg bWlnaHQgbmVlZAotICBhZGp1c3RtZW50IGZvciBERUNDIDUuMCBhbmQgaGlnaGVyLgotKi8KLSNp ZmRlZiBfX0RFQ0NfVkVSCi0jaWZkZWYgVk1TVjcwCi0vKgotICBOb3RlOiB5b3UgY2FuJ3QgdXNl ICIjaWYgKF9fVk1TX1ZFUj49NzAwMDAwMDApIiBiZWNhdXNlIHRoYXQgaXMgbm90Ci0gIHBvcnRh YmxlIGFuZCBraWxscyBub24tVk1TIGJ1aWxkcy4KLSovCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgot I2Vsc2UKLSNpZm5kZWYgYnplcm8KLSNkZWZpbmUgYnplcm8ocyxuKSBtZW1zZXQocywwLG4pCi0j ZW5kaWYKLSNpZm5kZWYgYmNvcHkKLSNkZWZpbmUgYmNvcHkoaCxhLGwpIG1lbW1vdmUoYSxoLGwp Ci0jZW5kaWYKLSNlbmRpZiAvKiBWTVNWNzAgKi8KLSNlbHNlCi0jaWZuZGVmIGJ6ZXJvCi0jZGVm aW5lIGJ6ZXJvKHMsbikgbWVtc2V0KHMsMCxuKQotI2VuZGlmCi0jaWZuZGVmIGJjb3B5Ci0jZGVm aW5lIGJjb3B5KGgsYSxsKSBtZW1tb3ZlKGEsaCxsKQotI2VuZGlmCi0jZW5kaWYgLyogX19ERUND X1ZFUiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2RlZmluZSBzb2NrZXRfcmVhZCAgICAg cmVhZAotI2RlZmluZSBzb2NrZXRfd3JpdGUgICAgd3JpdGUKLSNkZWZpbmUgc29ja2V0X2lvY3Rs ICAgIGlvY3RsCi0jZGVmaW5lIHNvY2tldF9jbG9zZSAgICBjbG9zZQotCi0jaWZkZWYgX19ERUND Ci1pbnQgaW9jdGwgKGludCBkLCBpbnQgcmVxdWVzdCwgdm9pZCAqYXJncCk7Ci0jZWxzZQotaW50 IGlvY3RsIChpbnQgZCwgaW50IHJlcXVlc3QsIGNoYXIgKmFyZ3ApOwotI2VuZGlmIC8qIERFQ0Mg Ki8KLS8qCi0gIFVDWCBzdXBwb3J0cyBzZWxlY3QoKSwgYnV0IGRvZXMgbm90IHByb3ZpZGUgdGhl IG5lZWRlZCBzeW1ib2wgYW5kCi0gIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBpbiBhbnkgaGVhZGVy IGZpbGUsIHNvIC4uLgotKi8KLSNpbmNsdWRlIDx0eXBlcy5oPgotI2lmbmRlZiBOQkJZCi0vKi0K LSAqIENvcHlyaWdodCAoYykgMTk4MiwgMTk4NiwgMTk5MSwgMTk5MwotICogICAgICBUaGUgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp c3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKiAgICAgIENhbGlmb3Ju aWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFt ZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5U UyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK LSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU Ci0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4K LSAqCi0gKiAgICAgIEAoIyl0eXBlcy5oICAgICA4LjEgKEJlcmtlbGV5KSA2LzIvOTMKLSAqLwot Ci0jZGVmaW5lIE5CQlkgICAgOCAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBiaXRzIGluIGEg Ynl0ZSAqLwotCi0vKgotICogU2VsZWN0IHVzZXMgYml0IG1hc2tzIG9mIGZpbGUgZGVzY3JpcHRv cnMgaW4gbG9uZ3MuICBUaGVzZSBtYWNyb3MKLSAqIG1hbmlwdWxhdGUgc3VjaCBiaXQgZmllbGRz ICh0aGUgZmlsZXN5c3RlbSBtYWNyb3MgdXNlIGNoYXJzKS4KLSAqIEZEX1NFVFNJWkUgbWF5IGJl IGRlZmluZWQgYnkgdGhlIHVzZXIsIGJ1dCB0aGUgZGVmYXVsdCBoZXJlIHNob3VsZAotICogYmUg ZW5vdWdoIGZvciBtb3N0IHVzZXMuCi0gKi8KLSNpZm5kZWYgRkRfU0VUU0laRQotI2RlZmluZSBG RF9TRVRTSVpFICAgICAgMjU2Ci0jZW5kaWYKLQotdHlwZWRlZiBsb25nICAgIGZkX21hc2s7Ci0j ZGVmaW5lIE5GREJJVFMgKHNpemVvZihmZF9tYXNrKSAqIE5CQlkpICAgICAgICAvKiBiaXRzIHBl ciBtYXNrICovCi0KLSNpZm5kZWYgaG93bWFueQotI2RlZmluZSBob3dtYW55KHgsIHkpICAgKCgo eCkrKCh5KS0xKSkvKHkpKQotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IGZkX3NldCB7Ci0gICAg ICAgIGZkX21hc2sgZmRzX2JpdHNbaG93bWFueShGRF9TRVRTSVpFLCBORkRCSVRTKV07Ci19IGZk X3NldDsKLQotI2RlZmluZSBGRF9TRVQobiwgcCkgICAgKChwKS0+ZmRzX2JpdHNbKG4pL05GREJJ VFNdIHw9ICgxIDw8ICgobikgJSBORkRCSVRTKSkpCi0jZGVmaW5lIEZEX0NMUihuLCBwKSAgICAo KHApLT5mZHNfYml0c1sobikvTkZEQklUU10gJj0gfigxIDw8ICgobikgJSBORkRCSVRTKSkpCi0j ZGVmaW5lIEZEX0lTU0VUKG4sIHApICAoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gJiAoMSA8 PCAoKG4pICUgTkZEQklUUykpKQotI2RlZmluZSBGRF9DT1BZKGYsIHQpICAgYmNvcHkoZiwgdCwg c2l6ZW9mKCooZikpKQotI2RlZmluZSBGRF9aRVJPKHApICAgICAgYnplcm8ocCwgc2l6ZW9mKCoo cCkpKQotI2VuZGlmIC8qICFOQkJZICovCi0KLSNlbHNlICAvKiBOb3QgREVDX1RDUElQICovCi0K LSNpZmRlZiBDTVVfVENQSVAKLSNpbmNsdWRlIDx0eXBlcy5oPgotI2luY2x1ZGUgPGluLmg+Ci0j aW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlIDxzb2NrZXQuaD4KLSNpbmNsdWRlIDxpbmV0Lmg+ Ci0jaW5jbHVkZSA8aW9jdGwuaD4KLSNpbmNsdWRlICJja3Zpb2MuaCIKLSNkZWZpbmUgc29ja2V0 X2Vycm5vIGVycm5vCi0KLS8qCi0gKiBSb3V0aW5lcyBzdXBwbGllZCBpbiBMSUJDTVUuT0xCCi0g Ki8KLSNkZWZpbmUgc29ja2V0X2lvY3RsICAgIGlvY3RsCi0jZGVmaW5lIHNvY2tldF9yZWFkICAg ICBjbXVfcmVhZAotI2RlZmluZSBzb2NrZXRfd3JpdGUgICAgY211X3dyaXRlCi0jZGVmaW5lIHNv Y2tldF9jbG9zZSAgICBjbXVfY2xvc2UKLQotI2VuZGlmIC8qIENNVV9UQ1BJUCAqLwotI2VuZGlm IC8qIERFQ19UQ1BJUCAqLwotI2VuZGlmIC8qIFdJTlRDUCAqLwotI2VuZGlmIC8qIE1VTFRJTkVU ICovCi0KLSNlbHNlIC8qIE5vdCBWTVMgKi8KLQotI2lmZGVmIE9TMgotI2luY2x1ZGUgImNrb25l dC5oIgotI2lmbmRlZiBOVAotI2luY2x1ZGUgPG5lcnJuby5oPgotI2VuZGlmCi0jZW5kaWYgLyog T1MyICovCi0KLSNpZmRlZiBTVFJBVFVTICAvKiBTdHJhdHVzIFZPUyB1c2luZyBPUyBUQ1AvSVAg cHJvZHVjdHMgUzIzNSwgUzIzNiwgUzIzNyAqLwotI2luY2x1ZGUgPHRjcF9zb2NrZXQuaD4KLS8q IFRoaXMgZ2V0cyB1c2VkIHNvbWUgcGxhY2VzIHdoZW4gVENQU09DS0VUIGlzIGRlZmluZWQuICov Ci0vKiBPUyBUQ1AgcHJvdmlkZXMgYnplcm8oKSwgYnV0IG5vdCBiY29weSgpLi4uIGdvIGZpZ3Vy ZS4gKi8KLSNkZWZpbmUgYmNvcHkocyxkLHopIG1lbWNweShkLHMseikKLSNlbmRpZiAvKiBTVFJB VFVTICovCi0KLSNpZmRlZiBPU0sKLSNpZm5kZWYgT1NLWFhDCi0jaW5jbHVkZSA8aW5ldC9pbi5o PgotI2luY2x1ZGUgPGluZXQvbmV0ZGIuaD4KLSNpbmNsdWRlIDxpbmV0L3NvY2tldC5oPgotI2Vs c2UKLSNpbmNsdWRlIDxJTkVUL2luLmg+Ci0jaW5jbHVkZSA8SU5FVC9uZXRkYi5oPgotI2luY2x1 ZGUgPElORVQvc29ja2V0Lmg+Ci0jZW5kaWYgLyogT1NLWFhDICovCi0jaWZuZGVmIGJ6ZXJvCi0j ZGVmaW5lIGJ6ZXJvKHMsbikgbWVtc2V0KHMsMCxuKQotI2VuZGlmCi0jaWZuZGVmIGJjb3B5Ci0j ZGVmaW5lIGJjb3B5KGgsYSxsKSBtZW1jcHkoYSxoLGwpCi0jZW5kaWYKLXR5cGVkZWYgY2hhciAq IGNhZGRyX3Q7IC8qIGNvcmUgYWRkcmVzcyB0eXBlICovCi0jZW5kaWYgLyogT1NLICovCi0KLSNl bmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogVENQU09DS0VUICov Ci0KLSNpZm5kZWYgTk9JTkFERFJYCQkgICAgICAvKiAzMDEgLSBOZWVkZWQgZm9yIFNvbGFyaXMg MTAgYW5kIDExICovCi0jaWZkZWYgU09MQVJJUwotI2RlZmluZSBOT0lOQUREUlgKLSNpZmRlZiBJ TkFERFJfTk9ORQotI3VuZGVmIElOQUREUl9OT05FCi0jZW5kaWYJLyogSU5BRERSX05PTkUgKi8K LSNlbmRpZgkvKiBTT0xBUklTICovCi0jZW5kaWYJLyogTk9JTkFERFJYICovCi0KLSNpZmRlZiBO T0lOQUREUlgKLSNpZmRlZiBJTkFERFJYCi0jdW5kZWYgSU5BRERSWAotI2VuZGlmCS8qIElOQURE UlggKi8KLSNlbmRpZgkvKiBOT0lOQUREUlggKi8KLQotI2lmZGVmIFRDUFNPQ0tFVAotI2lmbmRl ZiBOT0hBRERSTElTVAotI2lmbmRlZiBIQUREUkxJU1QKLSNpZmRlZiBTVU5PUzQxCi0jZGVmaW5l IEhBRERSTElTVAotI2VuZGlmIC8qIFNVTk9TNDEgKi8KLSNpZmRlZiBTT0xBUklTCi0jZGVmaW5l IEhBRERSTElTVAotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNpZmRlZiBMSU5VWAotI2RlZmluZSBI QUREUkxJU1QKLSNlbmRpZiAvKiBMSU5VWCAqLwotI2lmZGVmIEFJWFJTCi0jZGVmaW5lIEhBRERS TElTVAotI2VuZGlmIC8qIEFJWFJTICovCi0jaWZkZWYgSFBVWAotI2RlZmluZSBIQUREUkxJU1QK LSNlbmRpZiAvKiBIUFVYICovCi0jaWZkZWYgSVJJWAotI2RlZmluZSBIQUREUkxJU1QKLSNlbmRp ZiAvKiBJUklYICovCi0jaWZkZWYgSTM4NklYCi0jZGVmaW5lIEhBRERSTElTVAotI2VuZGlmIC8q IEkzODZJWCAqLwotI2VuZGlmIC8qIEhBRERSTElTVCAqLwotLyogQSBzeXN0ZW0gdGhhdCBkZWZp bmVzIGhfYWRkciBhcyBoX2FkZHJfbGlzdFswXSBzaG91bGQgYmUgSEFERFJMSVNUICovCi0jaWZu ZGVmIEhBRERSTElTVAotI2lmZGVmIGhfYWRkcgotI2RlZmluZSBIQUREUkxJU1QKLSNlbmRpZiAv KiBoX2FkZHIgKi8KLSNlbmRpZiAvKiBIQUREUkxJU1QgKi8KLSNlbmRpZiAvKiBOT0hBRERSTElT VCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0jaWZkZWYgVE5DT0RFICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogSWYgd2UncmUgY29tcGlsaW5nIHRlbG5ldCBjb2RlLi4uICovCi0j aWZuZGVmIElLU19PUFRJT04KLSNpZm5kZWYgU1RSQVRVUwotI2RlZmluZSBJS1NfT1BUSU9OCi0j ZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSNpbmNsdWRlICJj a2N0ZWwuaCIKLSNlbHNlCi1leHRlcm4gaW50IHNzdGVsbmV0OwotI2lmZGVmIElLU0QKLSN1bmRl ZiBJS1NECi0jZW5kaWYgLyogSUtTRCAqLwotI2lmbmRlZiBOT0lLU0QKLSNkZWZpbmUgTk9JS1NE Ci0jZW5kaWYgLyogTk9JS1NEICovCi0jaWZkZWYgSUtTX09QVElPTgotI3VuZGVmIElLU19PUFRJ T04KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNpZm5k ZWYgTk9UQ1BPUFRTCi0vKgotICBBdXRvbWF0aWNhbGx5IGRlZmluZSBOT1RDUE9QVFMgZm9yIGNv bmZpZ3VyYXRpb25zIHdoZXJlIHRoZXkgY2FuJ3QgYmUKLSAgdXNlZCBhdCBydW50aW1lIG9yIGNh dXNlIHRvbyBtdWNoIHRyb3VibGUgYXQgY29tcGlsZSB0aW1lLgotKi8KLSNpZmRlZiBDTVVfVENQ SVAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDTVUvVGVrICovCi0jZGVmaW5lIE5PVENQT1BU UwotI2VuZGlmIC8qIENNVV9UQ1BJUCAqLwotI2lmZGVmIE1VTFRJTkVUICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE11bHRpbmV0IG9uIEFscGhhICovCi0jaWZkZWYgX19hbHBoYQotI2RlZmlu ZSBOT1RDUE9QVFMKLSNlbmRpZiAvKiBfX2FscGhhICovCi0jZW5kaWYgLyogTVVMVElORVQgKi8K LSNlbmRpZiAvKiBOT1RDUE9QVFMgKi8KLQotI2lmZGVmIE5PVENQT1BUUwotI2lmZGVmIFRDUF9O T0RFTEFZCi0jdW5kZWYgVENQX05PREVMQVkKLSNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwotI2lm ZGVmIFNPX0xJTkdFUgotI3VuZGVmIFNPX0xJTkdFUgotI2VuZGlmIC8qIFNPX0xJTkdFUiAqLwot I2lmZGVmIFNPX0tFRVBBTElWRQotI3VuZGVmIFNPX0tFRVBBTElWRQotI2VuZGlmIC8qIFNPX0tF RVBBTElWRSAqLwotI2lmZGVmIFNPX1NOREJVRgotI3VuZGVmIFNPX1NOREJVRgotI2VuZGlmIC8q IFNPX1NOREJVRiAqLwotI2lmZGVmIFNPX1JDVkJVRgotI3VuZGVmIFNPX1JDVkJVRgotI2VuZGlm IC8qIFNPX1JDVkJVRiAqLwotI2VuZGlmIC8qIE5PVENQT1BUUyAqLwotCi0vKiBUaGlzIGZ1bmN0 aW9uIGlzIGRlY2xhcmVkIGV2ZW4gd2hlbiBUQ1BTT0NLRVQgaXMgbm90IGF2YWlsYWJsZSAqLwot X1BST1RPVFlQKCBjaGFyICogY2tnZXRwZWVyLCAoVk9JRCkpOwotCi0jaWZkZWYgVENQU09DS0VU Ci0jaWZkZWYgU09MX1NPQ0tFVAotI2lmZGVmIFRDUF9OT0RFTEFZCi1fUFJPVE9UWVAoIGludCBu b19kZWxheSwgKGludCwgaW50KSApOwotI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCi0jaWZkZWYg U09fS0VFUEFMSVZFCi1fUFJPVE9UWVAoIGludCBrZWVwYWxpdmUsIChpbnQsIGludCkgKSA7Ci0j ZW5kaWYgLyogU09fS0VFUEFMSVZFICovCi0jaWZkZWYgU09fTElOR0VSCi1fUFJPVE9UWVAoIGlu dCBja19saW5nZXIsIChpbnQsIGludCwgaW50KSApIDsKLSNlbmRpZiAvKiBTT19MSU5HRVIgKi8K LSNpZmRlZiBTT19TTkRCVUYKLV9QUk9UT1RZUCggaW50IHNlbmRidWYsKGludCwgaW50KSApIDsK LSNlbmRpZiAvKiBTT19TTkRCVUYgKi8KLSNpZmRlZiBTT19SQ1ZCVUYKLV9QUk9UT1RZUCggaW50 IHJlY3ZidWYsIChpbnQsIGludCkgKSA7Ci0jZW5kaWYgLyogU09fUkNWQlVGICovCi0jaWZkZWYg U09fRE9OVFJPVVRFCi1fUFJPVE9UWVAoaW50IGRvbnRyb3V0ZSwgKGludCwgaW50KSk7Ci0jZW5k aWYgLyogU09fRE9OVFJPVVRFICovCi0jZW5kaWYgLyogU09MX1NPQ0tFVCAqLwotX1BST1RPVFlQ KCBpbnQgZ2V0bG9jYWxpcGFkZHIsIChWT0lEKSk7Ci1fUFJPVE9UWVAoIGludCBnZXRsb2NhbGlw YWRkcnMsIChjaGFyICosaW50LGludCkpOwotX1BST1RPVFlQKCBjaGFyICogY2tnZXRmcWhvc3Ru YW1lLChjaGFyICopKTsKLV9QUk9UT1RZUCggc3RydWN0IGhvc3RlbnQgKiBja19jb3B5aG9zdGVu dCwoc3RydWN0IGhvc3RlbnQgKikpOwotX1BST1RPVFlQKCBjaGFyICogY2tuYW1lMmFkZHIsIChj aGFyICopKTsKLV9QUk9UT1RZUCggY2hhciAqIGNrYWRkcjJuYW1lLCAoY2hhciAqKSk7Ci0KLS8q IEFJWCAqLwotCi0jaWZkZWYgQUlYUlMKLSNpZm5kZWYgVENQX05PREVMQVkKLSNkZWZpbmUgVENQ X05PREVMQVkgMHgxCi0jZW5kaWYgLyogVENQX05PREVMQVkgKi8KLSNpZm5kZWYgVENQX01BWFNF RwotI2RlZmluZSBUQ1BfTUFYU0VHIDB4MgotI2VuZGlmIC8qIFRDUF9NQVhTRUcgKi8KLSNpZm5k ZWYgVENQX0tFRVBBTElWRQotI2RlZmluZSBUQ1BfS0VFUEFMSVZFIDB4OAotI2VuZGlmIC8qIFRD UF9LRUVQQUxJVkUgKi8KLSNlbmRpZiAvKiBBSVhSUyAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAq LwotCi0jaWZkZWYgUkxPR0NPREUKLSNpZm5kZWYgQ0tfVFRHV1NJWgotU09SUllfUkxPR0lOX1JF UVVJUkVTX1RUR1dTSVpfc2VlX2NrY3BsbS5kb2MKLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0j ZW5kaWYgLyogUkxPR0NPREUgKi8KLQotI2lmZGVmIENLX05BV1MKLSNpZm5kZWYgQ0tfVFRHV1NJ WgotU09SUllfQ0tfTkFXU19SRVFVSVJFU19UVEdXU0laX3NlZV9ja2NwbG0uZG9jCi0jZW5kaWYg LyogQ0tfVFRHV1NJWiAqLwotI2VuZGlmIC8qIENLX05BV1MgKi8KLQotI2lmbmRlZiBQRl9JTkVU Ci0jaWZkZWYgIEFGX0lORVQKLSNkZWZpbmUgUEZfSU5FVCBBRl9JTkVUCi0jZW5kaWYgLyogQUZf SU5FVCAqLwotI2VuZGlmIC8qIFBGX0lORVQgKi8KLQotI2lmbmRlZiBJUFBPUlRfRUNITwotI2Rl ZmluZSBJUFBPUlRfRUNITyA3Ci0jZW5kaWYgLyogSVBQT1JUX0VDSE8gKi8KLQotI2lmZGVmIENL X0tFUkJFUk9TCi0jaWZkZWYgUkxPR0NPREUKLV9QUk9UT1RZUChpbnQgY2tfa3JiX3Jsb2dpbiwo Q0hBUiAqLCBpbnQsIENIQVIgKiwgQ0hBUiAqLCBDSEFSICosCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBpbnQsIGludCkpOwotI2VuZGlmIC8qIFJMT0dD T0RFICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQotX1BST1RPVFlQKCBWT0lEIGluaV9r ZXJiLCAoIHZvaWQgKSApOyAgIC8qIEtlcmJlcm9zIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgKi8K LV9QUk9UT1RZUCggaW50IGRvYXV0aCwgKGludCkgKTsgICAgICAgICAvKiBBVVRIRU5USUNBVEUg YWN0aW9uIHJvdXRpbmUgKi8KLQotI2lmZGVmIENLX0ROU19TUlYKLV9QUk9UT1RZUChpbnQgbG9j YXRlX3Nydl9kbnMsKGNoYXIgKmhvc3QsIGNoYXIgKnNlcnZpY2UsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICpwcm90b2NvbCwgc3RydWN0IHNvY2thZGRyICoqYWRkcl9wcCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbmFkZHJzKSk7Ci0jZW5kaWYgLyog Q0tfRE5TX1NSViAqLwotCi0jaWZuZGVmIE5PSFRUUAotX1BST1RPVFlQKGludCBodHRwX29wZW4s IChjaGFyICosIGNoYXIgKiwgaW50LCBjaGFyICosIGludCwgY2hhciAqKSk7Ci1fUFJPVE9UWVAo aW50IGh0dHBfcmVvcGVuLCAoVk9JRCkpOwotX1BST1RPVFlQKGludCBodHRwX2Nsb3NlLCAoVk9J RCkpOwotX1BST1RPVFlQKGludCBodHRwX2dldCwgKGNoYXIgKixjaGFyICoqLGNoYXIgKixjaGFy ICosY2hhcixjaGFyICosY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCkpOwot X1BST1RPVFlQKGludCBodHRwX2hlYWQsIChjaGFyICosY2hhciAqKixjaGFyICosY2hhciAqLGNo YXIsY2hhciAqLGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KSk7Ci1fUFJP VE9UWVAoaW50IGh0dHBfcHV0LCAoY2hhciAqLGNoYXIgKiosY2hhciAqLGNoYXIgKixjaGFyICos Y2hhcixjaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICosIGlu dCkpOwotX1BST1RPVFlQKGludCBodHRwX2RlbGV0ZSwgKGNoYXIgKixjaGFyICoqLGNoYXIgKixj aGFyICosY2hhcixjaGFyICopKTsKLV9QUk9UT1RZUChpbnQgaHR0cF9jb25uZWN0LCAoaW50LCBj aGFyICosY2hhciAqKixjaGFyICosY2hhciAqLGNoYXIsY2hhciAqKSk7Ci1fUFJPVE9UWVAoaW50 IGh0dHBfcG9zdCwgKGNoYXIgKixjaGFyICoqLGNoYXIgKixjaGFyICosY2hhciAqLGNoYXIsY2hh ciAqLAotICAgICAgICAgICAgICAgICAgY2hhciAqLGNoYXIgKiwgaW50KSk7Ci1fUFJPVE9UWVAo aW50IGh0dHBfaW5kZXgsIChjaGFyICosY2hhciAqKixjaGFyICosY2hhciAqLGNoYXIsY2hhciAq LGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCkpOwotX1BST1RPVFlQKGlu dCBodHRwX2luYywgKGludCkpOwotX1BST1RPVFlQKGludCBodHRwX2lzY29ubmVjdGVkLCAodm9p ZCkpOwotCi1leHRlcm4gY2hhciAqIHRjcF9odHRwX3Byb3h5OyAgICAgICAgICAgLyogTmFtZVs6 cG9ydF0gb2YgaHR0cCBwcm94eSBzZXJ2ZXIgKi8KLWV4dGVybiBpbnQgICAgdGNwX2h0dHBfcHJv eHlfZXJybm87ICAgICAvKiBSZXR1cm4gdmFsdWUgZnJvbSBzZXJ2ZXIgKi8KLWV4dGVybiBjaGFy ICogdGNwX2h0dHBfcHJveHlfdXNlcjsgICAgICAvKiBOYW1lIG9mIHVzZXIgZm9yIGF1dGhlbnRp Y2F0aW9uICovCi1leHRlcm4gY2hhciAqIHRjcF9odHRwX3Byb3h5X3B3ZDsgICAgICAgLyogUGFz c3dvcmQgb2YgdXNlciAqLwotI2VuZGlmIC8qIE5PSFRUUCAqLwotCi0jaWZkZWYgVENQU09DS0VU Ci0KLS8qIFR5cGUgbmVlZGVkIGFzIDV0aCBhcmd1bWVudCAobGVuZ3RoKSB0byBnZXQvc2V0c29j a29wdCgpICovCi0KLSNpZmRlZiBUUlU2NAotLyogVGhleSBzYXkgaXQgdGhlbXNlbHZlcyAtIHRo aXMgZG9lcyBub3QgY29uZm9ybSB0byBzdGFuZGFyZHMgKi8KLSNkZWZpbmUgc29ja2xlbl90IGlu dAotI2Vsc2UKLSNpZmRlZiBIUFVYCi0jZGVmaW5lIHNvY2tsZW5fdCBpbnQKLSNlbmRpZgkvKiBI UFVYICovCi0jZW5kaWYJLyogVFJVNjQgKi8KLQotI2lmbmRlZiBTT0NLT1BUX1QKLSNpZmRlZiBD S182NEJJVAotI2RlZmluZSBTT0NLT1BUX1Qgc29ja2xlbl90Ci0jZW5kaWYJLyogQ0tfNjRCSVQg Ki8KLSNlbmRpZgkvKiBTT0NLT1BUX1QgKi8KLQotI2lmbmRlZiBTT0NLT1BUX1QKLSNkZWZpbmUg U09DS09QVF9UIGludAotI2lmZGVmIE1BQ09TWDEwCi0jdW5kZWYgU09DS09QVF9UCi0jZGVmaW5l IFNPQ0tPUFRfVCB1bnNpZ25lZCBpbnQKLSNlbHNlCi0jaWZkZWYgQUlYNDIKLSN1bmRlZiBTT0NL T1BUX1QKLSNkZWZpbmUgU09DS09QVF9UIHVuc2lnbmVkIGxvbmcKLSNlbHNlCi0jaWZkZWYgUFRY Ci0jdW5kZWYgU09DS09QVF9UCi0jZGVmaW5lIFNPQ0tPUFRfVCBzaXplX3QKLSNlbHNlCi0jaWZk ZWYgTlQKLSN1bmRlZiBTT0NLT1BUX1QKLSNkZWZpbmUgU09DS09QVF9UIGludAotI2Vsc2UgLyog TlQgKi8KLSNpZmRlZiBVTklYV0FSRQotI3VuZGVmIFNPQ0tPUFRfVAotI2RlZmluZSBTT0NLT1BU X1Qgc2l6ZV90Ci0jZWxzZSAvKiBVTklYV0FSRSAqLwotI2lmZGVmIFZNUwotI2lmZGVmIERFQ19U Q1BJUAotI2lmZGVmIF9fREVDQ19WRVIKLSN1bmRlZiBTT0NLT1BUX1QKLSNkZWZpbmUgU09DS09Q VF9UIHNpemVfdAotI2VuZGlmIC8qIF9fREVDQ19WRVIgKi8KLSNlbmRpZiAvKiBERUNfVENQSVAg Ki8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYV0FSRSAqLwotI2VuZGlmIC8qIE5U ICovCi0jZW5kaWYgLyogUFRYICovCi0jZW5kaWYgLyogQUlYNDIgKi8KLSNlbmRpZiAvKiBNQUNP U1gxMCAqLwotI2VuZGlmIC8qIFNPQ0tPUFRfVCAqLwotCi0vKiBEaXR0byBmb3IgZ2V0c29ja25h bWUoKSAqLwotCi0jaWZuZGVmIEdTT0NLTkFNRV9UCi0jaWZkZWYgQ0tfNjRCSVQKLSNkZWZpbmUg R1NPQ0tOQU1FX1Qgc29ja2xlbl90Ci0jZW5kaWYJLyogQ0tfNjRCSVQgKi8KLSNlbmRpZgkvKiBH U09DS05BTUVfVCAqLwotCi0jaWZuZGVmIEdTT0NLTkFNRV9UCi0jZGVmaW5lIEdTT0NLTkFNRV9U IGludAotI2lmZGVmIE1BQ09TWDEwCi0jdW5kZWYgR1NPQ0tOQU1FX1QKLSNkZWZpbmUgR1NPQ0tO QU1FX1QgdW5zaWduZWQgaW50Ci0jZWxzZQotI2lmZGVmIFBUWAotI3VuZGVmIEdTT0NLTkFNRV9U Ci0jZGVmaW5lIEdTT0NLTkFNRV9UIHNpemVfdAotI2Vsc2UKLSNpZmRlZiBBSVg0MiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBzaXplX3QgaW4gNC4yKyssIGludCBpbiA0LjEtLSAqLwot I3VuZGVmIEdTT0NLTkFNRV9UCi0jZGVmaW5lIEdTT0NLTkFNRV9UIHNpemVfdAotI2Vsc2UKLSNp ZmRlZiBVTklYV0FSRQotI3VuZGVmIEdTT0NLTkFNRV9UCi0jZGVmaW5lIEdTT0NLTkFNRV9UIHNp emVfdAotI2Vsc2UKLSNpZmRlZiBWTVMKLSNpZmRlZiBERUNfVENQSVAKLSNpZmRlZiBfX0RFQ0Nf VkVSCi0jdW5kZWYgR1NPQ0tOQU1FX1QKLSNkZWZpbmUgR1NPQ0tOQU1FX1Qgc2l6ZV90Ci0jZW5k aWYgLyogX19ERUNDX1ZFUiAqLwotI2VuZGlmIC8qIERFQ19UQ1BJUCAqLwotI2VuZGlmIC8qIFZN UyAqLwotI2VuZGlmIC8qIFVOSVhXQVJFICovCi0jZW5kaWYgLyogQUlYNDEgKi8KLSNlbmRpZiAv KiBQVFggKi8KLSNlbmRpZiAvKiBNQUNPU1gxMCAqLwotI2VuZGlmIC8qIEdTT0NLTkFNRV9UICov Ci0KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotI2lmZGVmIE1BQ09TWDEwCi0jaWZkZWYgYmNv cHkKLSN1bmRlZiBiY29weQotI2VuZGlmCi0jaWZkZWYgYnplcm8KLSN1bmRlZiBiemVybwotI2Vu ZGlmCi0jZW5kaWYgLyogTUFDT1NYMTAgKi8KLQotI2VuZGlmIC8qIENLQ05FVF9IICovCgpkaWZm IC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NwbG0udHh0 IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NwbG0udHh0CmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDBlZGRlLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjcGxtLnR4dAorKysgL2Rldi9udWxsCkBA IC0xLDMxMTMgKzAsMCBAQAotCi0gICBbMV1UaGUgQ29sdW1iaWEgQ3Jvd24gVGhlIEtlcm1pdCBQ cm9qZWN0IHwgQ29sdW1iaWEgVW5pdmVyc2l0eQotICAgNjEyIFdlc3QgMTE1dGggU3RyZWV0LCBO ZXcgWW9yayBOWSAxMDAyNSBVU0EgbyBbMl1rZXJtaXRAY29sdW1iaWEuZWR1Ci0gICAuLi5zaW5j ZSAxOTgxCi0gICBbM11Ib21lIFs0XUtlcm1pdCA5NSBbNV1DLUtlcm1pdCBbNl1TY3JpcHRzIFs3 XUN1cnJlbnQgWzhdTmV3IFs5XUZBUQotICAgWzEwXVN1cHBvcnQKLQotQy1LZXJtaXQgUHJvZ3Jh bSBMb2dpYyBNYW51YWwKLQotICAgICBGcmFuayBkYSBDcnV6Ci0gICAgIFsxMV1UaGUgS2VybWl0 IFByb2plY3QKLQotICAgQXMgb2Y6IEMtS2VybWl0IDkuMC4zMDAsIDMwIEp1bmUgMjAxMQotICAg TGFzdCB1cGRhdGU6IEZyaSBKdWwgMSAxNTo0NzozNCAyMDExCi0KLSAgICAgSUYgWU9VIEFSRSBS RUFESU5HIEEgUExBSU4tVEVYVCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQsIG5vdGUgdGhhdAot ICAgICB0aGlzIGZpbGUgaXMgYSBwbGFpbi10ZXh0IGR1bXAgb2YgYSBXZWIgcGFnZS4gWW91IGNh biB2aXNpdCB0aGUKLSAgICAgb3JpZ2luYWwgKGFuZCBwb3NzaWJseSBtb3JlIHVwLXRvLWRhdGUp IFdlYiBwYWdlIGhlcmU6Ci0KLSAgWzEyXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2NwbG0uaHRtbAotCi1DT05URU5UUwotCi0gIDEuIFsxM11JTlRST0RVQ1RJT04KLSAgMi4gWzE0 XUZJTEVTCi0gIDMuIFsxNV1TT1VSQ0UgQ09ERSBQT1JUQUJJTElUWSBBTkQgU1RZTEUKLSAgNC4g WzE2XU1PRFVMRVMKLSAgICAgNC5BLiBbMTddR3JvdXAgQTogTGlicmFyeSBSb3V0aW5lcwotICAg ICA0LkIuIFsxOF1Hcm91cCBCOiBLZXJtaXQgRmlsZSBUcmFuc2ZlcgotICAgICA0LkMuIFsxOV1H cm91cCBDOiBDaGFyYWN0ZXItU2V0IENvbnZlcnNpb24KLSAgICAgNC5ELiBbMjBdR3JvdXAgRDog VXNlciBJbnRlcmZhY2UKLSAgICAgNC5FLiBbMjFdR3JvdXAgRTogUGxhdGZvcm0tRGVwZW5kZW50 IEkvTwotICAgICA0LkYuIFsyMl1Hcm91cCBGOiBOZXR3b3JrIFN1cHBvcnQKLSAgICAgNC5HLiBb MjNdR3JvdXAgRzogRm9ybWF0dGVkIFNjcmVlbiBTdXBwb3J0Ci0gICAgIDQuSC4gWzI0XUdyb3Vw IEg6IFBzZXVkb3Rlcm1pbmFsIFN1cHBvcnQKLSAgICAgNC5JLiBbMjVdR3JvdXAgSTogU2VjdXJp dHkKLSAgSS4gWzI2XUFQUEVORElYIEk6IEZJTEUgUEVSTUlTU0lPTlMKLQotMS4gSU5UUk9EVUNU SU9OCi0KLSAgIFRoZSBLZXJtaXQgUHJvdG9jb2wgaXMgc3BlY2lmaWVkIGluIHRoZSBib29rIFsy N11LZXJtaXQsIEEgRmlsZQotICAgVHJhbnNmZXIgUHJvdG9jb2wgYnkgRnJhbmsgZGEgQ3J1eiwg RGlnaXRhbCBQcmVzcyAvIEJ1dHRlcndvcnRoCi0gICBIZWluZW1hbm4sIE5ld3RvbiwgTUEsIFVT QSAoMTk4NyksIDM3OSBwYWdlcywgSVNCTiAwLTkzMjM3Ni04OC02LiBJdCBpcwotICAgYXNzdW1l ZCB0aGUgcmVhZGVyIGlzIGZhbWlsaWFyIHdpdGggdGhlIEtlcm1pdCBwcm90b2NvbCBzcGVjaWZp Y2F0aW9uLgotCi0gICBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSByZWxhdGlvbnNoaXAgYW1vbmcg dGhlIG1vZHVsZXMgYW5kIGZ1bmN0aW9ucyBvZgotICAgQy1LZXJtaXQgNUEgYW5kIGxhdGVyLCBh bmQgb3RoZXIgcHJvZ3JhbW1pbmcgY29uc2lkZXJhdGlvbnMuIEMtS2VybWl0Ci0gICBpcyBkZXNp Z25lZCB0byBiZSBwb3J0YWJsZSB0byBhbnkga2luZCBvZiBjb21wdXRlciB0aGF0IGhhcyBhIEMK LSAgIGNvbXBpbGVyLiBUaGUgc291cmNlIGNvZGUgaXMgYnJva2VuIGludG8gbWFueSBmaWxlcyB0 aGF0IGFyZSBncm91cGVkCi0gICBhY2NvcmRpbmcgdG8gdGhlaXIgZnVuY3Rpb24sIGFzIHNob3du IGluIHRoZSBbMjhdQ29udGVudHMuCi0KLSAgIEMtS2VybWl0IGhhcyBzZWVuIGNvbnN0YW50IGRl dmVsb3BtZW50IHNpbmNlIDE5ODUuIFRocm91Z2hvdXQgaXRzCi0gICBoaXN0b3J5LCB0aGVyZSBo YXMgYmVlbiBhIG5ldmVyZW5kaW5nIHR1Zy1vZi13YXIgYW1vbmc6Ci0KLSAgICBhLiBGdW5jdGlv bmFsaXR5OiBhZGRpbmcgbmV3IGZlYXR1cmVzLCBmaXhpbmcgYnVncywgaW1wcm92aW5nCi0gICAg ICAgcGVyZm9ybWFuY2UuCi0gICAgYi4gQWRkaW5nIHN1cHBvcnQgZm9yIG5ldyBwbGF0Zm9ybXMg b3IgY29tbXVuaWNhdGlvbiBtZXRob2RzLgotICAgIGMuICJCdXp6d29yZCAxLjAgY29tcGxpYW5j ZSIuCi0KLSAgIFRoZSBsYXR0ZXIgY2F0ZWdvcnkgaXMgdGhlIG1vc3QgZnJ1c3RyYXRpbmcsIHNp bmNlIGl0IGdlbmVyYWxseQotICAgaW52b2x2ZXMgbWFzc2l2ZSBjaGFuZ2VzIGp1c3QgdG8ga2Vl cCB0aGUgc29mdHdhcmUgZG9pbmcgd2hhdCBpdCBkaWQKLSAgIGJlZm9yZSBpbiBzb21lIG5ldyBz ZXR0aW5nOiBlLmcuIHRoZSBLJlItdG8tQU5TSUMgY29udmVyc2lvbiAod2hpY2ggaGFkCi0gICB0 byBiZSBkb25lLCBvZiBjb3Vyc2UsIHdpdGhvdXQgYnJlYWtpbmcgSyZSKTsgWTJLIChub3QgYSBi aWcgZGVhbCBpbgotICAgb3VyIGNhc2UpOyB0aGUgbWFueSBhbmQgdmFyaWVkIFVOSVggYW5kIG90 aGVyIEFQSSAic3RhbmRhcmRzIiB3aXRoCi0gICB3aGljaCB0byAiY29tcGx5Ii4KLQotICAgVXBv biBmaXJzdCBnbGFuY2UgYXQgdGhlIHNvdXJjZSBjb2RlLCB5b3Ugd2lsbCBwcm9iYWJseSBiZSBh cHBhbGxlZC4KLSAgIE1hbnkgd2lsbCBiZSB0ZW1wdGVkIHRvIGNsZWFuIGl0IHVwIGFuZCBtb2Rl cm5pemUgaXQuIEJ1dCBhcyBzb29uIGFzCi0gICB5b3UgZG8sIHlvdSBhcmUgc3VyZSB0byBicmVh ayBzb21ldGhpbmcuIFJlbWVtYmVyIHRoYXQgYWJvdmUgYWxsIGVsc2UsCi0gICB0aGUgQy1LZXJt aXQgY29kZSBpcyBwb3J0YWJsZSB0byBldmVyeSBVbml4IHBsYXRmb3JtIHRoYXQgZXZlciBleGlz dGVkLAotICAgZ29pbmcgYmFjayBVbml4IFY3ICgxOTc5KSosIGFuZCB0byBzZXZlcmFsIG90aGVy IGNvbXBsZXRlbHkgZGlmZmVyZW50Ci0gICBhbmQgdW5yZWxhdGVkIG9wZXJhdGluZy1zeXN0ZW0g ZmFtaWxpZXMgc3VjaCBhcyBERUMvSFAgVk1TLCBERyBBT1MvVlMsCi0gICBhbmQgU3RyYXR1cyBW T1MsIGFzIHdlbGwgYXMgdG8gc29tZSBVbml4IG9mZnNob290cyBsaWtlIE9TLTkgYW5kIFBsYW4g OQotICAgKGZyb20gT3V0ZXIgU3BhY2UpLiBFdmVyeSByZWxlYXNlIG9mIEtlcm1pdCBoYXMgYmVl biBjaGVja2VkIG9uIGV2ZXJ5Ci0gICBwbGF0Zm9ybSBhdmFpbGFibGUgLS0gdGhlIG9sZGVyIHRo ZSBiZXR0ZXIhIC0tIHRvIG1ha2Ugc3VyZSBpdCBzdGlsbAotICAgYnVpbGRzIGFuZCBydW5zLiBF dmVuIHRvZGF5ICgyMDExKSwgdGhlcmUgYXJlIG1vZGVybiBVbml4IHN5c3RlbXMgdGhhdAotICAg aGF2ZSBub24tQU5TSSBDIGNvbXBpbGVycywgZm9yZW1vc3QgYW1vbmcgdGhlbSBIUC1VWCAod2hl cmUgYW4gQU5TSQotICAgb3B0aW1pemluZyBDIGNvbXBpbGVyIGlzIGF2YWlsYWJsZSwgYnV0IG9u bHkgYXMgYW4gZXhwZW5zaXZlIGFkZC1vbikuCi0gICBJbiBhIHdheSwgcG9ydGFiaWxpdHkgaXMg dGhlIG1vc3QgaW1wb3J0YW50IGZlYXR1cmUgb2YgQy1LZXJtaXQgYW5kCi0gICBldmVyeSBlZmZv cnQgc2hvdWxkIGJlIG1hZGUgdG8gcHJlc2VydmUgaXQgdGhyb3VnaCBmdXR1cmUgcmVsZWFzZXMu Ci0KLSAgIFZvbHVtaW5vdXMgZWRpdCBoaXN0b3JpZXMgYXJlIGF2YWlsYWJsZSBnb2luZyBiYWNr IHRvIE1heSAxOTg1LiBUaGUKLSAgIGZpcnN0IHZlcnNpb25zIG9mIEMtS2VybWl0IHdlcmUgZG9u ZSBvbiBvdXIgWzI5XURFQyBWQVgtMTEvNzUwIHdpdGgKLSAgIFVsdHJpeCAxLjAgYW5kIDIuMCAo YXMgd2VsbCBhcyBkZXBhcnRtZW50YWwgNzUwcyB3aXRoIDQuMkJTRCoqKSwgREVDCi0gICBQcm8t MzgwIHdvcmtzdGF0aW9ucyAoZGVza3RvcCBQRFAtMTFzKSBydW5uaW5nIDIuOUJTRCwgd2hpY2gg d2FzCi0gICBbMzBdcG9ydGVkIHRvIHRoZSAzODAgYnkgdXMuIExhdGVyICgxOTg4IG9yIHNvKSBv biBhIGJpZyBWQVggODY1MCB3aXRoCi0gICBVbHRyaXgsIHdoaWNoIGJlY2FtZSBhbiA4NzAwICh0 aGVzZSBubyBkb3VidCB3ZWlnaGVkIHNldmVyYWwgdG9ucyksIGFuZAotICAgZmluYWxseSBhIHN1 Y2Nlc3Npb24gb2Ygbm9uLURFQyBlcXVpcG1lbnQ6IGFuIEVuY29yZSBNdWx0aW1heCwgMjUgeWVh cnMKLSAgIHdvcnRoIG9mIFN1bnMsIGFuZCBub3cgTGludXggb24gWzMxXUhQIEJsYWRlcy4gV2Ug YWxzbyBoYWQgb3VyIG93biBWTVMKLSAgIGRldmVsb3BtZW50IHN5c3RlbXMgZm9yIHNvbWUgeWVh cnMuIEFsbCB0aGlzIHBsdXMgYSBnZW5lcm91cyBhc3NvcnRtZW50Ci0gICBvZiBkZXBhcnRtZW50 YWwgYW5kIG9mZnNpdGUgZ3Vlc3QgYWNjb3VudHMgb24gYSBtdWx0aXR1ZGUgb2YgcGxhdGZvcm1z LgotICAgQW55d2F5LCB0aGUgZWRpdCBoaXN0b3JpZXM6Ci0KLSAgICAgWzMyXWNrYzA0ZS50eHQg Qy1LZXJtaXQgNC4yKDAzMCkgTWF5IDE5ODUgdG8gNEUoMDcyKSBKYW4gMTk4OS4KLSAgICAgWzMz XWNrYzA0Zi50eHQgQy1LZXJtaXQgNEYoMDc3KSBBcnAgMTk4OSB0byA0RigwOTUpIEF1ZyAxOTg5 LgotICAgICBbMzRdY2tjMTY4LnR4dCBVcGRhdGVzIHRvIEMtS2VybWl0IDVBKDE2OCkgZm9yIFZN UyBOb3YgMTk5MQotICAgICBbMzVdY2tjMTc4LnR4dCBDLUtlcm1pdCA1QSgxMDApIEp1bCAxOTg5 IHRvIDVBKDE3OCkgSmFuIDE5OTIKLSAgICAgWzM2XWNrYzE4OC50eHQgQy1LZXJtaXQgNUEoMTg4 KSBkZXZlbG9wbWVudCwgMTk5MgotICAgICBbMzddY2tjMTg5LnR4dCBDLUtlcm1pdCA1QSgxODkp IGRldmVsb3BtZW50LCAxOTkzCi0gICAgIFszOF1ja2MxOTIudHh0IEMtS2VybWl0IDYuMCgxOTIp IGRldmVsb3BtZW50LCAxOTk4Ci0gICAgIFszOV1ja2MxOTcudHh0IEMtS2VybWl0IDcuMCgxOTcp IGRldmVsb3BtZW50LCAyMDAwCi0gICAgIFs0MF1ja2MyMDAudHh0IEMtS2VybWl0IDguMC4yMDAg ZGV2ZWxvcG1lbnQsIDIwMDEKLSAgICAgWzQxXWNrYzIxMS50eHQgQy1LZXJtaXQgOC4wLjIwMSB0 aHJvdWdoIDguMC4yMDkgMjAwMS0yMDA0Ci0gICAgIFs0Ml1ja2MzMDAudHh0IEMtS2VybWl0IDku MC4zMDAgSnVuZSAyMDExCi0KLSAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwot ICAgKiBDLUtlcm1pdCA2LjAgd2FzIHRoZSBsYXN0IG9uZSB0byBiZSBidWlsdCBvbiBWNywgYXMg SSByZWNhbGwuIFRoZQotICAgY29kZSBzaG91bGQgc3RpbGwgYmUgZ29vZCBmb3IgVjcgYnV0IGl0 IHByb2JhYmx5IGhhcyBvdXRncm93biB0aGUKLSAgIDE2LWJpdCBhZGRyZXNzIHNwYWNlLiBJbiBh bnkgY2FzZSB0aGVyZSBpcyBzdGlsbCBhIFY3IG1ha2VmaWxlIHRhcmdldAotICAgYW5kIGEgVjcg cGF0aCB0aHJvdWdoIHRoZSBmb3Jlc3Qgb2YgI2lmZGVmcyBpbiB0aGUgY29kZSBpZiBhbnlib2R5 IGlzCi0gICBydW5uaW5nIFY3IG9uIGFuIGVtdWxhdG9yIGFuZCB3b3VsZCBsaWtlIHRvIHRyeSBi dWlsZGluZyBDLUtlcm1pdC4KLSAgIFRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIFY2IGJ1dCB0aGF0 IGlzIG9ubHkgYmVjYXVzZSBubyBWNiBzeXN0ZW0gd2FzCi0gICBldmVyIGZvdW5kIGZvciBkZXZl bG9wbWVudC4gTm90aWNlIHRoYXQgc29tZSBvdGhlciAxNi1iaXQgVW5peGVzIGFyZQotICAgc3Vw cG9ydGVkIGluIHRoZSBjb2RlLCBpbmNsdWRpbmcgMi45QlNEIGFuZCBUYW5keSBYZW5peCAzLjAs IGJ1dCBoYXZlCi0gICBub3QgYmVlbiB0cmllZCBzaW5jZSBDLUtlcm1pdCA2LjAKLQotICAgKiog IEMtS2VybWl0IDkuMC4zMDAgd2FzIGJ1aWx0IHN1Y2Nlc3NmdWxseSBvbiA0LjJCU0QgYWJvdXQg MjUgeWVhcnMKLSAgIGxhdGVyLCBpbiBKdW5lIDIwMTEuCi0KLSAgIFsgWzQzXUNvbnRlbnRzIF0g WyBbNDRdQy1LZXJtaXQgXSBbIFs0NV1LZXJtaXQgSG9tZSBdCi0KLTIuIEZJTEVTCi0KLSAgIEMt S2VybWl0IHNvdXJjZSBmaWxlcyBiZWdpbiB3aXRoIHRoZSB0d28gbGV0dGVycyAiY2siLCBmb3Ig ZXhhbXBsZQotICAgY2t1dGlvLmMuIEZpbGVuYW1lcyBhcmUga2VwdCBzaG9ydCAoNi4zKSBmb3Ig bWF4aW11bSBwb3J0YWJpbGl0eSBhbmQKLSAgIChvYnZpb3VzbHkgSSBob3BlKSBkbyBub3QgY29u dGFpbiBzcGFjZXMgb3IgbW9yZSB0aGFuIG9uZSBwZXJpb2QuIFRoZQotICAgdGhpcmQgY2hhcmFj dGVyIGluIHRoZSBuYW1lIGRlbm90ZXMgc29tZXRoaW5nIGFib3V0IHRoZSBmdW5jdGlvbiBncm91 cAotICAgYW5kIHRoZSBleHBlY3RlZCBsZXZlbCBvZiBwb3J0YWJpbGl0eToKLQotICAgICBhICAg ICBHZW5lcmFsIGRlc2NyaXB0aXZlIG1hdGVyaWFsIGFuZCBkb2N1bWVudGF0aW9uICh0ZXh0KQot ICAgICBiICAgICBCT08gZmlsZSBlbmNvZGVycyBhbmQgZGVjb2RlcnMgKG9ic29sZXRlKQotICAg ICBjICAgICBBbGwgcGxhdGZvcm1zIHdpdGggQyBjb21waWxlcnMgKCopCi0gICAgIGQgICAgIERh dGEgR2VuZXJhbCBBT1MvVlMKLSAgICAgZSAgICAgUmVzZXJ2ZWQgZm9yICJja2VybWl0IiBmaWxl cywgbGlrZSBja2VybWl0LmluaSwgY2tlcm1pdDIudHh0Ci0gICAgIGYgICAgIChyZXNlcnZlZCkK LSAgICAgZyAgICAgKHJlc2VydmVkKQotICAgICBoICAgICAocmVzZXJ2ZWQpCi0gICAgIGkgICAg IENvbW1vZG9yZSBBbWlnYSAoSW50dWl0aW9uKQotICAgICBqICAgICAodW51c2VkKQotICAgICBr ICAgICAodW51c2VkKQotICAgICBsICAgICBTdHJhdHVzIFZPUwotICAgICBtICAgICBNYWNpbnRv c2ggd2l0aCBNYWMgT1MgMS05Ci0gICAgIG4gICAgICh1bnVzZWQpCi0gICAgIG8gICAgIE9TLzIg YW5kIE1pY3Jvc29mdCBXaW5kb3dzIDl4L01FL05ULzIwMDAvWFAvVmlzdGEvZXRjCi0gICAgIHAg ICAgIFBsYW4gOSBmcm9tIEJlbGwgTGFicwotICAgICBxICAgICAocmVzZXJ2ZWQpCi0gICAgIHIg ICAgIERFQyBQRFAtMTEgd2l0aCBSU1RTL0UgKG5ldmVyIHVzZWQsIG9wZW4gZm9yIHJlYXNzaWdu bWVudCkKLSAgICAgcyAgICAgQXRhcmkgU1QgR0VNRE9TIChsYXN0IHN1cHBvcnRlZCBpbiB2ZXJz aW9uIDVBKDE4OSkpCi0gICAgIHQgICAgIERFQyBQRFAtMTEgd2l0aCBSVC0xMSAobmV2ZXIgdXNl ZCwgb3BlbiBmb3IgcmVhc3NpZ25tZW50KQotICAgICB1ICAgICBVbml4LWJhc2VkIG9wZXJhdGlu ZyBzeXN0ZW1zICgqKQotICAgICB2ICAgICBWTVMgYW5kIE9wZW5WTVMKLSAgICAgdyAgICAgV2Fy dCAoTGV4LWxpa2UgcHJlcHJvY2Vzc29yLCBwbGF0Zm9ybSBpbmRlcGVuZGVudCkKLSAgICAgeCAg ICAgKHJlc2VydmVkKQotICAgICB5ICAgICAocmVzZXJ2ZWQpCi0gICAgIHogICAgIChyZXNlcnZl ZCkKLSAgICAgMC0zICAgKHJlc2VydmVkKQotICAgICA0ICAgICBJQk0gQVMvNDAwCi0gICAgIDUt OCAgIChyZXNlcnZlZCkKLSAgICAgOSAgICAgTWljcm93YXJlIE9TLTkKLSAgICAgXyAgICAgKHVu ZGVyc2NvcmUpIEVuY3J5cHRpb24gbW9kdWxlcwotCi0gICAoKikgSW4gZmFjdCB0aGVyZSBpcyBs aXR0bGUgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgY2tjKi4qIGFuZCBja3UqLioKLSAgIGNhdGVn b3JpZXMuIEl0IHdvdWxkIG1ha2UgbW9yZSBzZW5zZSBmb3IgYWxsIGNrdSouKiBtb2R1bGVzIHRv IGJlCi0gICBja2MqLiogb25lcywgZXhjZXB0IGNrdWZpby5jLCBja3V0aW8uYywgY2t1Y29uLmMs IGNrdWNucy5jLCBhbmQKLSAgIGNrdXB0eS5jLCB3aGljaCB0cnVseSBhcmUgc3BlY2lmaWMgdG8g VW5peC4gVGhlIHJlc3QgKGNrdXVzKi5jLAotICAgY2t1Y21kLmMsIGV0YykgYXJlIHF1aXRlIHBv cnRhYmxlLgotCi0gICBPbmUgaGludCBiZWZvcmUgcHJvY2VlZGluZzogZnVuY3Rpb25zIGFyZSBz Y2F0dGVyZWQgYWxsIG92ZXIgdGhlIGNrYyouYwotICAgYW5kIGNrdSouYyBtb2R1bGVzLCB3aGVy ZSBmdW5jdGlvbiBzaXplIGhhcyBiZWd1biB0byB0YWtlIHByZWNlZGVuY2UKLSAgIG92ZXIgdGhl IGRlc2lyYWJpbGl0eSBvZiBncm91cGluZyByZWxhdGVkIGZ1bmN0aW9ucyB0b2dldGhlciwgdGhl IGFpbQotICAgYmVpbmcgdG8ga2VlcCBhbnkgcGFydGljdWxhciBtb2R1bGUgZnJvbSBncm93aW5n IGRpc3Byb3BvcnRpb25hdGVseQotICAgbGFyZ2UuIFRoZSBlYXNpZXN0IHdheSAoaW4gVU5JWCkg dG8gZmluZCBvdXQgaW4gd2hhdCBzb3VyY2UgZmlsZSBhCi0gICBnaXZlbiBmdW5jdGlvbiBpcyBk ZWZpbmVkIGlzIGxpa2UgdGhpcyAod2hlcmUgdGhlIGRlc2lyZWQgZnVuY3Rpb24gaXMKLSAgIGZv bygpLi4uKToKLQotICBncmVwIF5mb29cKCBjayouYwotCi0gICBUaGlzIHdvcmtzIGJlY2F1c2Ug dGhlIGNvZGluZyBjb252ZW50aW9uIGhhcyBiZWVuIHRvIG1ha2UgZnVuY3Rpb24KLSAgIG5hbWVz IGFsd2F5cyBzdGFydCBvbiB0aGUgbGVmdCBtYXJnaW4gd2l0aCB0aGVpciBjb250ZW50cyBpbmRl bnRlZCwgZm9yCi0gICBleGFtcGxlOgotCi1zdGF0aWMgY2hhciAqCi1mb28oeCx5KSBpbnQgeCwg eTsgewotICAgIC4uLgotfQotCi0gICBBbHNvIG5vdGUgdGhlIHN0eWxlIGZvciBicmFja2V0IHBs YWNlbWVudC4gVGhpcyBhbGxvd3MgYnJhY2tldC1tYXRjaGluZwotICAgdGV4dCBlZGl0b3JzIChz dWNoIGFzIEVNQUNTKSB0byBoZWxwIHlvdSBtYWtlIHN1cmUgeW91IGtub3cgd2hpY2gKLSAgIG9w ZW5pbmcgYnJhY2tldCBhIGNsb3NpbmcgYnJhY2tldCBtYXRjaGVzLCBwYXJ0aWN1bGFybHkgd2hl biB0aGUKLSAgIG9wZW5pbmcgYnJhY2tldCBpcyBhYm92ZSB0aGUgdmlzaWJsZSBzY3JlZW4sIGFu ZCBpdCBhbHNvIG1ha2VzIGl0IGVhc3kKLSAgIHRvIGZpbmQgdGhlIGVuZCBvZiBhIGZ1bmN0aW9u IChzZWFyY2ggZm9yICd9JyBvbiB0aGUgbGVmdCBtYXJnaW4pLgotCi0gICBPZiBjb3Vyc2UgRU1B Q1MgdGFncyB3b3JrIG5pY2VseSB3aXRoIHRoaXMgZm9ybWF0IHRvbzoKLQotICAkIGNkIGtlcm1p dC1zb3VyY2UtZGlyZWN0b3J5Ci0gICQgZXRhZ3MgY2tbY3VdKi5jCi0gICQgZW1hY3MKLSAgRXNj LVggVmlzaXQtVGFncy1UYWJsZTxDUj48Q1I+Ci0KLSAgIChidXQgcmVtZW1iZXIgdGhhdCB0aGUg c291cmNlIGZpbGUgZm9yIGNrY3Byby5jIGlzIFs0Nl1ja2Nwcm8udyEpCi0KLSAgIEFsc286Ci0K LSAgICAgKiBUYWJzIHNob3VsZCBiZSBzZXQgZXZlcnkgOCBzcGFjZXMsIGFzIG9uIGEgVlQxMDAu Ci0gICAgICogQWxsIGxpbmVzIG11c3Qgbm8gbW9yZSB0aGFuIDc5IGNoYXJhY3RlcnMgd2lkZSBh ZnRlciB0YWIgZXhwYW5zaW9uLgotICAgICAqIE5vdGUgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4g cGh5c2ljYWwgdGFicyAoQVNDSUkgOSkgYW5kIHRoZQotICAgICAgIGluZGVudGF0aW9uIGNvbnZl bnRpb25zLCB3aGljaCBhcmU6IDQgZm9yIGJsb2NrIGNvbnRlbnRzLCAyIGZvcgotICAgICAgIG1v c3Qgb3RoZXIgc3R1ZmYgKG9idmlvdXNseSB0aGlzIGlzIG5vdCBhIHBvcnRhYmlsaXR5IGlzc3Vl LCBqdXN0Ci0gICAgICAgc3R5bGUpLgotCi0gICBbIFs0N11Db250ZW50cyBdIFsgWzQ4XUMtS2Vy bWl0IF0gWyBbNDldS2VybWl0IEhvbWUgXQotCi0zLiBTT1VSQ0UgQ09ERSBQT1JUQUJJTElUWSBB TkQgU1RZTEUKLQotICAgQy1LZXJtaXQgd2FzIGRlc2lnbmVkIGluIDE5ODUgYXMgYSBwbGF0Zm9y bS1pbmRlcGVuZGVudCByZXBsYWNlbWVudCBmb3IKLSAgIHRoZSBlYXJsaWVyIFVuaXggS2VybWl0 LiBDLUtlcm1pdCdzIGRlc2lnbiB3YXMgZXhwZWN0ZWQgdG8gcHJvbW90ZQotICAgcG9ydGFiaWxp dHksIGFuZCBqdWRnaW5nIGZyb20gdGhlIG51bWJlciBvZiBwbGF0Zm9ybXMgdG8gd2hpY2ggaXQg aGFzCi0gICBiZWVuIGFkYXB0ZWQgc2luY2UgdGhlbiwgdGhlIG1vZGVsIGlzIGVmZmVjdGl2ZSwg aWYgbm90IGlkZWFsCi0gICAob2J2aW91c2x5IGlmIHdlIGhhZCBpdCBhbGwgdG8gZG8gb3Zlciwg d2UnZCBjaGFuZ2UgYSBmZXcgdGhpbmdzKS4gVG8KLSAgIGFuc3dlciB0aGUgb2Z0LXJlcGVhdGVk IHF1ZXN0aW9uOiAiV2h5IGFyZSB0aGVyZSBzbyBtYW55ICNpZmRlZnM/IiwKLSAgIGl0J3MgYmVj YXVzZToKLQotICAgICAqIE1hbnkgb2YgdGhlbSBhcmUgcmVsYXRlZCB0byBmZWF0dXJlIHNlbGVj dGlvbiBhbmQgcHJvZ3JhbSBzaXplLCBhbmQKLSAgICAgICBzbyBuZWVkIHRvIGJlIHRoZXJlIGFu eXdheS4KLSAgICAgKiBUaG9zZSB0aGF0IHRyZWF0IGNvbXBpbGVyLCBsaWJyYXJ5LCBwbGF0Zm9y bSwgaGVhZGVyLWZpbGUsIGFuZAotICAgICAgIHNpbWlsYXIgZGlmZmVyZW5jZXMgaGF2ZSBidWls dCB1cCBvdmVyIHRpbWUgYXMgaHVuZHJlZHMgb2YgcGVvcGxlCi0gICAgICAgYWxsIG92ZXIgdGhl IHdvcmxkIGFkYXB0ZWQgQy1LZXJtaXQgdG8gdGhlaXIgcGFydGljdWxhcgotICAgICAgIGVudmly b25tZW50cyBhbmQgc2VudCBiYWNrIHRoZWlyIGNoYW5nZXMuIFRoZXJlIG1pZ2h0IGJlIG1vcmUK LSAgICAgICBwb2xpdGljYWxseS1jb3JyZWN0IHdheXMgdG8gYWNoaWV2ZSBwb3J0YWJpbGl0eSwg YnV0IHRoaXMgb25lIGlzCi0gICAgICAgbmF0dXJhbCBhbmQgcHJvdmVuLiBUaGUgYmFzaWMgaWRl YSBpcyB0byBpbnRyb2R1Y2UgY2hhbmdlcyB0aGF0IGNhbgotICAgICAgIGJlIHNlbGVjdGVkIGJ5 IGRlZmluaW5nIGEgc3ltYm9sLCB3aGljaCwgaWYgbm90IGRlZmluZWQsIGxlYXZlcyB0aGUKLSAg ICAgICBwcm9ncmFtIGV4YWN0bHkgYXMgaXQgd2FzIGJlZm9yZSB0aGUgY2hhbmdlcy4KLSAgICAg KiBBbHRob3VnaCBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byAiY2xlYW4gdXAiIHRoZSAiI2lmZGVm IG1lc3MiLAotICAgICAgIG5vYm9keSBoYXMgYWNjZXNzIHRvIGFsbCB0aGUgaHVuZHJlZHMgb2Yg cGxhdGZvcm1zIHNlcnZlZCBieSB0aGUKLSAgICAgICAjaWZkZWZzIHRvIGNoZWNrIHRoZSByZXN1 bHRzLgotCi0gICBBbmQgdG8gYW5zd2VyIHRoZSBzZWNvbmQtbW9zdC1vZnQtcmVwZWF0ZWQgcXVl c3Rpb246ICJXaHkgZG9uJ3QgeW91Ci0gICBqdXN0IHVzZSBHTlUgYXV0b2NvbmZpZyAvIGF1dG9t YWtlIC8gYXV0b3doYXRldmVyIGluc3RlYWQgb2YKLSAgIGhhcmQtY29kaW5nIGFsbCB0aG9zZSAj aWZkZWZzPyIgQW5zd2VyczoKLQotICAgICAqIFRoZSBHTlUgdG9vbHMgYXJlIG5vdCBhdmFpbGFi bGUgb24gYWxsIHRoZSBwbGF0Zm9ybXMgd2hlcmUgQy1LZXJtaXQKLSAgICAgICBtdXN0IGJlIGJ1 aWx0IGFuZCBJIHdvdWxkbid0IG5lY2Vzc2FyaWx5IHRydXN0IHRoZW0gaWYgdGhleSB3ZXJlLgot ICAgICAqIEVhY2ggcGxhdGZvcm0gaXMgYSBtb3ZpbmcgdGFyZ2V0LCBzbyB0aGUgdG9vbHMgdGhl bXNlbHZlcyB3b3VsZAotICAgICAgIG5lZWQgdG8gdXBkYXRlZCBiZWZvcmUgS2VybWl0IGNvdWxk IGJlIHVwZGF0ZWQuCi0gICAgICogSXQgd291bGQgb25seSBhZGQgYW5vdGhlciBsYXllciBvZiBj b21wbGV4aXR5IHRvIGFuIGFscmVhZHkgY29tcGxleAotICAgICAgIHByb2Nlc3MuCi0gICAgICog Q29udmVyc2lvbiBhdCB0aGlzIHBvaW50IHdvdWxkIG5vdCBiZSBwcmFjdGljYWwgdW5sZXNzIHRo ZXJlIHdhcyBhCi0gICAgICAgd2F5IHRvIHRlc3QgdGhlIHJlc3VsdHMgb24gYWxsIHRoZSBodW5k cmVkcyBvZiBwbGF0Zm9ybXMgd2hlcmUKLSAgICAgICBDLUtlcm1pdCBpcyBzdXBwb3NlZCB0byBi dWlsZC4KLQotICAgV2hlbiB3cml0aW5nIGNvZGUgZm9yIHRoZSBzeXN0ZW0taW5kZXBlbmRlbnQg Qy1LZXJtaXQgbW9kdWxlcywgcGxlYXNlCi0gICBzdGljayB0byB0aGUgZm9sbG93aW5nIGNvZGlu ZyBjb252ZW50aW9ucyB0byBlbnN1cmUgcG9ydGFiaWxpdHkgdG8gdGhlCi0gICB3aWRlc3QgcG9z c2libGUgdmFyaWV0eSBvZiBDIHByZXByb2Nlc3NvcnMsIGNvbXBpbGVycywgYW5kIGxpbmtlcnMs IGFzCi0gICB3ZWxsIGFzIGNlcnRhaW4gbmV0d29yayBhbmQvb3IgZW1haWwgdHJhbnNwb3J0cy4g VGhlIHNhbWUgaG9sZHMgdHJ1ZQotICAgZm9yIG1hbnkgb2YgdGhlICJzeXN0ZW0gZGVwZW5kZW50 IiBtb2R1bGVzIHRvbzsgcGFydGljdWxhcmx5IHRoZSBVbml4Ci0gICBvbmVzLCBzaW5jZSB0aGV5 IG11c3QgYmUgYnVpbGRhYmxlIGJ5IGEgd2lkZSB2YXJpZXR5IG9mIGNvbXBpbGVycyBhbmQKLSAg IGxpbmtlcnMsIG5ldyBhbmQgb2xkLgotCi0gICBUaGlzIGxpc3QgZG9lcyBub3QgcHVycG9ydCB0 byBiZSBjb21wcmVoZW5zaXZlLCBhbmQgYWx0aG91Z2ggc29tZSBpdGVtcwotICAgb24gaXQgbWln aHQgc2VlbSBmYXItZmV0Y2hlZCwgdGhleSB3b3VsZCBub3QgYmUgbGlzdGVkIHVubGVzcyBJIGhh ZAotICAgZW5jb3VudGVyZWQgdGhlbSBzb21ld2hlcmUsIHNvbWUgdGltZS4gSSB3aXNoIEkgaGFk IGtlcHQgYmV0dGVyIHJlY29yZHMKLSAgIHNvIEkgY291bGQgY2l0ZSBzcGVjaWZpYyBwbGF0Zm9y bXMgYW5kIGNvbXBpbGVycy4KLQotICAgICAqIFRyeSB0byBrZWVwIHZhcmlhYmxlIGFuZCBmdW5j dGlvbiBuYW1lcyB1bmlxdWUgd2l0aGluIDYgY2hhcmFjdGVycywKLSAgICAgICBlc3BlY2lhbGx5 IGlmIHRoZXkgYXJlIHVzZWQgYWNyb3NzIG1vZHVsZXMsIHNpbmNlIDYgaXMgdGhlIG1heGltdW0K LSAgICAgICBmb3Igc29tZSBvbGQgbGlua2VycyAoYWN0dWFsbHksIHRoaXMgZ29lcyBiYWNrIHRv IFRPUFMtMTAgYW5kIC0yMAotICAgICAgIGFuZCBvdGhlciBvbGQgREVDIE9TJ3Mgd2hlcmUgQy1L ZXJtaXQgbmV2ZXIgcmFuIGFueXdheTsgYSBtb3JlCi0gICAgICAgcmVhbGlzdGljIG1heGltdW0g aXMgcHJvYmFibHkgc29tZXdoZXJlIGJldHdlZW4gOCBhbmQgMTYpLiBXZSBrbm93Ci0gICAgICAg Zm9yIGNlcnRhaW4gdGhhdCBWQVggQyBoYXMgYSAzMS1jaGFyYWN0ZXIgbWF4IGJlY2F1c2UgaXQg Y29tcGxhaW5zCi0gICAgICAgLS0gb3RoZXJzIG1pZ2h0IG5vdCBjb21wbGFpbiwgYnV0IGp1c3Qg c2lsZW50bHkgdHJ1bmNhdGUsIHRodXMKLSAgICAgICBmb2xkaW5nIHR3byBvciBtb3JlIHJvdXRp bmVzL3ZhcmlhYmxlcyBpbnRvIG9uZS4KLSAgICAgKiBLZWVwIHByZXByb2Nlc3NvciBzeW1ib2xz IHVuaXF1ZSB3aXRoaW4gOCBjaGFyYWN0ZXJzOyB0aGF0J3MgdGhlCi0gICAgICAgbWF4IGZvciBz b21lIHByZXByb2Nlc3NvcnMgKHNvcnJ5LCBJIGNhbid0IGdpdmUgYSBzcGVjaWZpYyBleGFtcGxl LAotICAgICAgIGJ1dCBpbiAxOTg4IG9yIHRoZXJlYWJvdXRzLCBJIGhhZCB0byBjaGFuZ2UgY2hh cmFjdGVyLXNldCBzeW1ib2xzCi0gICAgICAgbGlrZSBUQ19MQVRJTjEgYW5kIFRDX0xBVElOMiB0 byBUQ18xTEFUSU4gYW5kIFRDXzJMQVRJTiBiZWNhdXNlIHRoZQotICAgICAgIGRpZ2l0cyB3ZXJl IGJlaW5nIHRydW5jYXRlZCBhbmQgaWdub3JlZCBvbiBhIHBsYXRmb3JtIHdoZXJlIEkKLSAgICAg ICBhY3R1YWxseSBoYWQgdG8gYnVpbGQgQy1LZXJtaXQgNUE7IHVuZm9ydHVuYXRlbHkgSSBkaWRu J3Qgbm90ZQotICAgICAgIHdoaWNoIHBsYXRmb3JtIC0tIG1heWJlIHNvbWUgZWFybHkgVWx0cml4 IHZlcnNpb24/KQotICAgICAqIERvbid0IGNyZWF0ZSBwcmVwcm9jZXNzb3Igc3ltYm9scywgb3Ig dmFyaWFibGUgb3IgZnVuY3Rpb24gbmFtZXMsCi0gICAgICAgdGhhdCBzdGFydCB3aXRoIHVuZGVy c2NvcmUgKF8pLiBUaGVzZSBhcmUgdXN1YWxseSByZXNlcnZlZCBmb3IKLSAgICAgICBpbnRlcm5h bCB1c2UgYnkgdGhlIGNvbXBpbGVyIGFuZCBoZWFkZXIgZmlsZXMuCi0gICAgICogRG9uJ3QgcHV0 ICNpbmNsdWRlIGRpcmVjdGl2ZXMgaW5zaWRlIGZ1bmN0aW9ucyBvciB7IGJsb2NrcyB9LgotICAg ICAqIERvbid0IHVzZSB0aGUgI2lmIG9yICNlbGlmIHByZXByb2Nlc3NvciBjb25zdHJ1Y3Rpb25z LCBvbmx5IHVzZQotICAgICAgICNpZmRlZiwgI2lmbmRlZiwgI2RlZmluZSwgI3VuZGVmLCBhbmQg I2VuZGlmLgotICAgICAqIFB1dCB0b2tlbnMgYWZ0ZXIgI2VuZGlmIGluIGNvbW1lbnQgYnJhY2tl dHMsIGUuZy4gI2VuZGlmIC8qIEZPTyAqLy4KLSAgICAgKiBEb24ndCBpbmRlbnQgcHJlcHJvY2Vz c29yIHN0YXRlbWVudHMgLSAjIG11c3QgYWx3YXlzIGJlIGZpcnN0IGNoYXIKLSAgICAgICBvbiBs aW5lLgotICAgICAqIERvbid0IHB1dCB3aGl0ZXNwYWNlIGFmdGVyICMgaW4gcHJlcHJvY2Vzc29y IHN0YXRlbWVudHMuCi0gICAgICogRG9uJ3QgdXNlICNwcmFnbWEsIGV2ZW4gd2l0aGluICNpZmRl ZnMgLS0gaXQgbWFrZXMgc29tZQotICAgICAgIHByZXByb2Nlc3NvcnMgZ2l2ZSB1cC4KLSAgICAg KiBTYW1lIGdvZXMgZm9yICNtb2R1bGUsICNpZiwgZXRjIC0gI2lmZGVmcyBkbyBOT1QgcHJvdGVj dCB0aGVtLgotICAgICAqIERvbid0IHVzZSBsb2dpY2FsIG9wZXJhdG9ycyBpbiBwcmVwcm9jZXNz b3IgY29uc3RydWN0aW9ucy4KLSAgICAgKiBBdm9pZCAjaWZkZWZzIGluc2lkZSBhcmd1bWVudCBs aXN0IHRvIGZ1bmN0aW9uIGNhbGxzIChJIGNhbid0Ci0gICAgICAgcmVtZW1iZXIgd2h5IHRoaXMg b25lIGlzIGhlcmUsIGJ1dCBwcm9iYWJseSBuZWVkbid0IGJlOyB3ZSBkbyB0aGlzCi0gICAgICAg YWxsIHRoZSB0aW1lKS4KLSAgICAgKiBBbHdheXMgY2FzdCBzdHJsZW4oKSBpbiBleHByZXNzaW9u cyB0byBpbnQ6Ci0gICAgICAgaWYgKChpbnQpc3RybGVuKGZvbykgPCB4KS4uLgotICAgICAqIEF2 b2lkIHR5cGVkZWZzOyB0aGV5IG1pZ2h0IGJlIHBvcnRhYmxlIGJ1dCB0aGV5IGFyZSB2ZXJ5IGNv bmZ1c2luZwotICAgICAgIGFuZCB0aGVyZSdzIG5vIHdheSB0byB0ZXN0IGZvciB0aGVpciBwcmVz ZW5jZSBvciBhYnNlbmNlIGF0IGNvbXBpbGUKLSAgICAgICB0aW1lLiBVc2UgcHJlcHJvY2Vzc29y IHN5bWJvbHMgaW5zdGVhZCBpZiBwb3NzaWJsZTsgYXQgbGVhc3QgeW91Ci0gICAgICAgY2FuIHRl c3QgdGhlaXIgZGVmaW5pdGlvbnMuCi0gICAgICogVW5zaWduZWQgbG9uZyBpcyBub3QgcG9ydGFi bGU7IHVzZSBhIHByZXByb2Nlc3NvciBzeW1ib2wgKEtlcm1pdAotICAgICAgIHVzZXMgVUxPTkcg Zm9yIHRoaXMpLgotICAgICAqIExvbmcgbG9uZyBpcyBub3QgcG9ydGFibGUuIElmIHlvdSByZWFs bHkgbmVlZCBpdCwgYmUgY3JlYXRpdmUuCi0gICAgICogU2ltaWxhcmx5IDEyMzRMTCBpcyBub3Qg cG9ydGFibGUsIG5vciBhbG1vc3QgYW55IG90aGVyIGNvbnN0YW50Ci0gICAgICAgbW9kaWZpZXIg b3RoZXIgdGhhbiBMLgotICAgICAqIFVuc2lnbmVkIGNoYXIgaXMgbm90IHBvcnRhYmxlLCB1c2Ug Q0hBUiAoYSBwcmVwcm9jZXNzb3Igc3ltYm9sCi0gICAgICAgZGVmaW5lZCBpbiB0aGUgS2VybWl0 IGhlYWRlciBmaWxlcykgYW5kIGFsd2F5cyB0YWtlIHByZWNhdXRpb25zCi0gICAgICAgYWdhaW5z dCBjaGFyYWN0ZXIgc2lnbmFnZSAobW9yZSBhYm91dCB0aGlzIFs1MF1iZWxvdykuCi0gICAgICog RG9uJ3QgdXNlIGluaXRpYWxpemVycyB3aXRoIGF1dG9tYXRpYyBhcnJheXMgb3Igc3RydWN0czog aXQncyBub3QKLSAgICAgICBwb3J0YWJsZS4KLSAgICAgKiBEb24ndCB1c2UgYmlnIGF1dG9tYXRp YyBhcnJheXMgb3Igc3RydWN0cyBpbiBmdW5jdGlvbnMgdGhhdCBtaWdodAotICAgICAgIGJlIGNh bGxlZCByZWN1cnNpdmVseTsgc29tZSBwbGF0Zm9ybXMgaGF2ZSBmaXhlZC1zaXplIHN0YWNrcyAo ZS5nLgotICAgICAgIFdpbmRvd3MgOXg6IDI1NkspIGFuZCByZWN1cnNpdmUgZnVuY3Rpb25zIGNy YXNoIHdpdGggc3RhY2sKLSAgICAgICBvdmVyZmxvdy4gRXZlbiB3aGVuIHRoZXJlIGlzIG5vdCBh IGNvbXBpbGVyIGxpbWl0YXRpb24sIHRoaXMgY2F1c2VzCi0gICAgICAgbWVtb3J5IHRvIGJlIGNv bnN1bWVkIHdpdGhvdXQgYm91bmQsIGFuZCBjYW4gZW5kIHVwIGZpbGxpbmcgc3dhcAotICAgICAg IHNwYWNlLgotICAgICAqIERvbid0IGFzc3VtZSB0aGF0IHN0cnVjdCBhc3NpZ25tZW50IHBlcmZv cm1zIGEgY29weSwgb3IgdGhhdCBpdAotICAgICAgIGV2ZW4gZXhpc3RzLgotICAgICAqIERvbid0 IHVzZSBzaXplb2YgdG8gZ2V0IHRoZSBzaXplIG9mIGFuIGFycmF5OyBzb21lb25lIG1pZ2h0IGNv bWUKLSAgICAgICBhbG9uZyBsYXRlciBhbmQgYW5kIGNoYW5nZSBpdCBmcm9tIHN0YXRpYyB0byBt YWxsb2MnZC4gQWx3YXlzIHVzZSBhCi0gICAgICAgc3ltYm9sIHRvIHJlZmVyIHRvIHRoZSBhcnJh eSdzIHNpemUuCi0gICAgICogRG9uJ3QgcHV0IHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlv bnMgaW50byBoZWFkZXIgZmlsZXMgdGhhdAotICAgICAgIGFyZSB1c2VkIGJ5IG1vZHVsZXMgdGhh dCBkb24ndCBjb250YWluIHRoYXQgZnVuY3Rpb247IHRoZSBsaW5rIHN0ZXAKLSAgICAgICBjYW4g ZmFpbCB3aXRoIHVucmVzb2x2ZWQgcmVmZXJlbmNlcyAoZS5nLiBvbiBBT1MvVlMpLgotICAgICAq IEF2b2lkIHRoZSBjb25zdHJ1Y3Rpb24gKisrcCAodGhlIG9yZGVyIG9mIGV2YWx1YXRpb24gdmFy aWVzOyBpdAotICAgICAgIHNob3VsZG4ndCBidXQgYXQgbGVhc3Qgb25lIGNvbXBpbGVyIGhhZCBh IGJ1ZyB0aGF0IG1hZGUgbWUgaW5jbHVkZQotICAgICAgIHRoaXMgaXRlbSkuCi0gICAgICogRG9u J3QgdXNlIHRyaXBsZSBhc3NpZ25tZW50cywgbGlrZSBhID0gYiA9IGMgPSAwOyAob3IgcXVhZHJ1 cGxlLAotICAgICAgIGV0YykuIFNvbWUgY29tcGlsZXJzIGdlbmVyYXRlIGJhZCBjb2RlIGZvciB0 aGVzZSwgb3IgY3Jhc2gsIGV0YwotICAgICAgIChzb21lIHZlcnNpb24gb2YgREVDIEMgYXMgSSBy ZWNhbGwpLgotICAgICAqIFNvbWUgY29tcGlsZXJzIGRvbid0IGFsbG93IHN0cnVjdHVyZSBtZW1i ZXJzIHRvIGhhdmUgdGhlIHNhbWUgbmFtZXMKLSAgICAgICBhcyBvdGhlciBpZGVudGlmaWVycy4g VHJ5IHRvIGdpdmUgc3RydWN0dXJlIG1lbWJlcnMgdW5pcXVlIG5hbWVzLgotICAgICAqIERvbid0 IGFzc3VtZSBhbnl0aGluZyBhYm91dCBvcmRlciBvZiBldmFsdWF0aW9uIGluIGJvb2xlYW4KLSAg ICAgICBleHByZXNzaW9ucywgb3IgdGhhdCB0aGV5IHdpbGwgc3RvcCBlYXJseSBpZiBhIHJlcXVp cmVkIGNvbmRpdGlvbgotICAgICAgIGlzIG5vdCB0cnVlLCBlLmcuOgotICBpZiAoaSA+IDAgJiYg cFtpLTFdID09IGJsYWgpCi0KLSAgICAgICBjYW4gc3RpbGwgZHVtcCBjb3JlIGlmIGkgPT0gMCAo aG9wZWZ1bGx5IHRoaXMgaXMgbm90IHRydWUgb2YgYW55Ci0gICAgICAgbW9kZXJuIGNvbXBpbGVy LCBidXQgSSB3b3VsZCBub3QgaGF2ZSBzYWlkIHRoaXMgaWYgaXQgZGlkIG5vdAotICAgICAgIGFj dHVhbGx5IGhhcHBlbiBzb21ld2hlcmUpLgotICAgICAqIERvbid0IGhhdmUgYSBzd2l0Y2goKSBz dGF0ZW1lbnQgd2l0aCBubyBjYXNlcyAoZS5nLiBiZWNhdXNlIG9mCi0gICAgICAgI2lmZGVmcyk7 IHRoaXMgaXMgYSBmYXRhbCBlcnJvciBpbiBzb21lIGNvbXBpbGVycy4KLSAgICAgKiBEb24ndCBw dXQgbG90cyBvZiBjb2RlIGluIGEgc3dpdGNoIGNhc2U7IG1vdmUgaXQgb3V0IHRvIGEgc2VwYXJh dGUKLSAgICAgICBmdW5jdGlvbjsgc29tZSBjb21waWxlcnMgcnVuIG91dCBvZiBtZW1vcnkgd2hl biBwcmVzZW50ZWQgd2l0aCBhCi0gICAgICAgaHVnZSBzd2l0Y2goKSBzdGF0ZW1lbnQgLS0gaXQn cyBub3QgdGhlIG51bWJlciBvZiBjYXNlcyB0aGF0Ci0gICAgICAgbWF0dGVyczsgaXQncyB0aGUg b3ZlcmFsbCBhbW91bnQgb2YgY29kZS4KLSAgICAgKiBTb21lIGNvbXBpbGVycyBtaWdodCBhbHNv IGxpbWl0IHRoZSBudW1iZXIgb2Ygc3dpdGNoKCkgY2FzZXMsIGUuZy4KLSAgICAgICB0byAyNTQu Ci0gICAgICogRG9uJ3QgcHV0IGFueXRoaW5nIGJldHdlZW4gInN3aXRjaCgpIHsiIGFuZCAiY2Fz ZToiIC0tIHN3aXRjaAotICAgICAgIGJsb2NrcyBhcmUgbm90IGxpa2Ugb3RoZXIgYmxvY2tzLgot ICAgICAqIERvbid0IGp1bXAgaW50byBvciBvdXQgb2Ygc3dpdGNoZXMuCi0gICAgICogRG9uJ3Qg bWFrZSBjaGFyYWN0ZXItc3RyaW5nIGNvbnN0YW50cyBsb25nZXIgdGhhbiBhYm91dCAyNTAgYnl0 ZXMuCi0gICAgICAgTG9uZ2VyIHN0cmluZ3Mgc2hvdWxkIGJlIGJyb2tlbiB1cCBpbnRvIGFycmF5 cyBvZiBzdHJpbmdzLgotICAgICAqIERvbid0IHdyaXRlIGludG8gY2hhcmFjdGVyLXN0cmluZyBj b25zdGFudHMgKG9idmlvdXNseSkuIEV2ZW4gd2hlbgotICAgICAgIHlvdSBrbm93IHlvdSBhcmUg bm90IHdyaXRpbmcgcGFzdCB0aGUgZW5kOyB0aGUgY29tcGlsZXIgb3IgbGlua2VyCi0gICAgICAg bWlnaHQgaGF2ZSBwdXQgdGhlbSBpbnRvIHJlYWQtb25seSBhbmQvb3Igc2hhcmVkIG1lbW9yeSwg YW5kL29yCi0gICAgICAgY29hbGVzY2VkIG11bHRpcGxlIGVxdWFsIGNvbnN0YW50cyBzbyBpZiB5 b3UgY2hhbmdlIG9uZSB5b3UgY2hhbmdlCi0gICAgICAgdGhlbSBhbGwuCi0gICAgICogRG9uJ3Qg ZGVwZW5kIG9uICdccicgYmVpbmcgY2FycmlhZ2UgcmV0dXJuLgotICAgICAqIERvbid0IGRlcGVu ZCBvbiAnXG4nIGJlaW5nIGxpbmVmZWVkIG9yIGZvciB0aGF0IG1hdHRlciBhbnkgU0lOR0xFCi0g ICAgICAgY2hhcmFjdGVyLgotICAgICAqIERvbid0IGRlcGVuZCBvbiAnXHInIGFuZCAnXG4nIGJl aW5nIGRpZmZlcmVudCAoZS5nLiBhcyBzZXBhcmF0ZQotICAgICAgIHN3aXRjaCgpIGNhc2VzKS4K LSAgICAgKiBJbiBvdGhlciB3b3JkcywgZG9uJ3QgdXNlIFxuIG9yIFxyIHRvIHN0YW5kIGZvciBz cGVjaWZpYwotICAgICAgIGNoYXJhY3RlcnM7IHVzZSBcMDEyIGFuZCBcMDE1IGluc3RlYWQuCi0g ICAgICogRG9uJ3QgY29kZSBmb3IgImJ1enp3b3JkIDEuMCBjb21wbGlhbmNlIiwgdW5sZXNzICJi dXp6d29yZCIgaXMgSyZSCi0gICAgICAgYW5kICIxLjAiIGlzIHRoZSBmaXJzdCBlZGl0aW9uLgot ICAgICAqIERvbid0IHVzZSBvciBkZXBlbmQgb24gYW55dGhpbmdfdCAoc2l6ZV90LCBwaWRfdCwg ZXRjKSwgZXhjZXB0Ci0gICAgICAgdGltZV90LCB3aXRob3V0ICNpZmRlZiBwcm90ZWN0aW9uICh0 aW1lX3QgaXMgdGhlIG9ubHkgb25lIEkndmUKLSAgICAgICBmb3VuZCB0aGF0IGlzIGFjY2VwdGVk IGV2ZXJ5d2hlcmUpLiBUaGlzIGlzIGEgdG91Z2ggb25lIGJlY2F1c2UgdGhlCi0gICAgICAgc2Ft ZSBmdW5jdGlvbiBtaWdodCByZXF1aXJlIChzYXkpIGEgc2l6ZV90IGFyZyBvbiBvbmUgcGxhdGZv cm0sCi0gICAgICAgd2hlcmVhcyBzaXplX3QgaXMgdW5oZWFyZCBvZiBvbiBhbm90aGVyOyBvciB3 b3JzZSwgaXQgbWlnaHQgcmVxdWlyZQotICAgICAgIGEgdG90YWxseSBkaWZmZXJlbnQgZGF0YSB0 eXBlLCBsaWtlIGludCBvciBsb25nIG9yIHNvbWUgb3RoZXIKLSAgICAgICB0eXBlZGVmJ2QgdGhp bmcuIEl0IGhhcyBvZnRlbiBwcm92ZWQgbmVjZXNzYXJ5IHRvIGRlZmluZSBhIHN5bWJvbAotICAg ICAgIHRvIHN0YW5kIGZvciB0aGUgdHlwZSBvZiBhIHBhcnRpY3VsYXIgYXJndW1lbnQgdG8gYSBw YXJ0aWN1bGFyCi0gICAgICAgbGlicmFyeSBvciBzeXN0ZW0gZnVuY3Rpb24gdG8gZ2V0IGFyb3Vu ZCB0aGlzIHByb2JsZW0uCi0gICAgICogRG9uJ3QgdXNlIG9yIGRlcGVuZCBvbiBpbnRlcm5hdGlv bmFsaXphdGlvbiAoImkxOG4iKSBmZWF0dXJlcywKLSAgICAgICB3Y2hhcl90LCBsb2NhbGVzLCBl dGMsIGluIHBvcnRhYmxlIGNvZGU7IHRoZXkgYXJlIG5vdCBwb3J0YWJsZS4KLSAgICAgICBBbnl3 YXksIGxvY2FsZXMgYXJlIG5vdCB0aGUgcmlnaHQgbW9kZWwgZm9yIEtlcm1pdCdzCi0gICAgICAg bXVsdGktY2hhcmFjdGVyLXNldCBzdXBwb3J0LiBLZXJtaXQgZG9lcyBhbGwgY2hhcmFjdGVyLXNl dAotICAgICAgIGNvbnZlcnNpb24gaXRzZWxmIGFuZCBkb2VzIG5vdCB1c2UgYW55IGV4dGVybmFs IGxpYnJhcmllcyBvcgotICAgICAgIGZ1bmN0aW9ucy4KLSAgICAgKiBJbiBwYXJ0aWN1bGFyLCBk b24ndCB1c2UgYW55IGxpYnJhcnkgZnVuY3Rpb25zIHRoYXQgZGVhbCB3aXRoIHdpZGUKLSAgICAg ICBjaGFyYWN0ZXJzIG9yIFVuaWNvZGUgaW4gYW55IGZvcm0uIFRoZXNlIGFyZSBub3Qgb25seSBu b25wb3J0YWJsZSwKLSAgICAgICBidXQgYSBjb25zdGFudGx5IHNoaWZ0aW5nIHRhcmdldCAoZS5n LiB0aGUgb25lcyBpbiBnbGliYykuCi0gICAgICogRG9uJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbiBh Ym91dCBzaWduYWwgaGFuZGxlciB0eXBlLiBJdCBjYW4gYmUKLSAgICAgICB2b2lkLCBpbnQsIGxv bmcsIG9yIGFueXRoaW5nIGVsc2UuIEFsd2F5cyBkZWNsYXJlIHNpZ25hbCBoYW5kbGVycwotICAg ICAgIGFzIFNJR1RZUCAoc2VlIGRlZmluaXRpb24gaW4gY2tjZGViLmggYW5kIGF1Z21lbnQgaXQg aWYgbmVjZXNzYXJ5KQotICAgICAgIGFuZCBhbHdheXMgdXNlIFNJR1JFVFVSTiBhdCBleGl0IHBv aW50cyBmcm9tIHNpZ25hbCBoYW5kbGVycy4KLSAgICAgKiBTaWduYWxzIHNob3VsZCBhbHdheXMg YmUgcmUtYXJtZWQgdG8gYmUgdXNlZCBhZ2FpbiAodGhpcyBiYXJlbHkKLSAgICAgICBzY3JhdGNo ZXMgdGhlIHN1cmZhY2UgLS0gdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gQlNEL1Y3IGFuZCBTeXN0 ZW0KLSAgICAgICBWIGFuZCBQT1NJWCBzaWduYWwgaGFuZGxpbmcgYXJlIG51bWVyb3VzLCBhbmQg c29tZSBwbGF0Zm9ybXMgZG8gbm90Ci0gICAgICAgZXZlbiBzdXBwb3J0IHNpZ25hbHMsIGFsYXJt cywgb3IgbG9uZ2ptcHMgY29ycmVjdGx5IG9yIGF0IGFsbCAtLQotICAgICAgIGF2b2lkIGFsbCBv ZiB0aGlzIGlmIHlvdSBjYW4pLgotICAgICAqIE9uIHRoZSBvdGhlciBoYW5kLCBkb24ndCBhc3N1 bWUgdGhhdCBzaWduYWxzIGFyZSBkaXNhcm1lZCBhZnRlcgotICAgICAgIGJlaW5nIHJhaXNlZC4g SW4gc29tZSBwbGF0Zm9ybXMgeW91IGhhdmUgdG8gcmUtYXJtIHRoZW0sIGluIG90aGVycwotICAg ICAgIHRoZXkgc3RheSBhcm1lZC4KLSAgICAgKiBEb24ndCBjYWxsIG1hbGxvYygpIGFuZCBmcmll bmRzIGZyb20gYSBzaWduYWwgaGFuZGxlcjsgZG9uJ3QgZG8KLSAgICAgICBhbnl0aGluZyBidXQg c2V0dGluZyBpbnRlZ2VyIGdsb2JhbCB2YXJpYWJsZXMgaW4gYSBzaWduYWwgaGFuZGxlci4KLSAg ICAgKiBtYWxsb2MoKSBkb2VzIG5vdCBpbml0aWFsaXplIGFsbG9jYXRlZCBtZW1vcnkgLS0gaXQg bmV2ZXIgc2FpZCBpdAotICAgICAgIGRpZC4gRG9uJ3QgZXhwZWN0IGl0IHRvIGJlIGFsbCAwJ3Mu Ci0gICAgICogRGlkIFlvdSBLbm93OiBtYWxsb2MoKSBjYW4gc3VjY2VlZCBhbmQgdGhlIHByb2dy YW0gY2FuIHN0aWxsIGR1bXAKLSAgICAgICBjb3JlIGxhdGVyIHdoZW4gaXQgYXR0ZW1wdHMgdG8g dXNlIHRoZSBtYWxsb2MnZCBtZW1vcnk/IChUaGlzCi0gICAgICAgaGFwcGVucyB3aGVuIGFsbG9j YXRpb24gaXMgZGVmZXJyZWQgdW50aWwgdXNlIGFuZCBzd2FwIHNwYWNlIGlzCi0gICAgICAgZnVs bC4pCi0gICAgICogbWVtc2V0KCksIG1lbW1vdmUoKSwgYW5kIG1lbWNweSgpIGFyZSBub3QgcG9y dGFibGUsIGRvbid0IHVzZSB0aGVtCi0gICAgICAgd2l0aG91dCBwcm90ZWN0aW5nIHRoZW0gaW4g aWZkZWZzICh3ZSBoYXZlIFVTRV9NRU1DUFkgZm9yIHRoaXMpLgotICAgICAgIGJ6ZXJvKCkvYmNv cHkoKSB0b28sIGV4Y2VwdCB3ZSdyZSBndWFyYW50ZWVkIHRvIGhhdmUKLSAgICAgICBiemVybygp L2Jjb3B5KCkgd2hlbiB1c2luZyB0aGUgc29ja2V0cyBsaWJyYXJ5IChub3QgcmVhbGx5KS4gU2Vl Ci0gICAgICAgZXhhbXBsZXMgaW4gdGhlIHNvdXJjZS4KLSAgICAgKiBEb24ndCBhc3N1bWUgdGhh dCBzdHJuY3B5KCkgc3RvcHMgb24gdGhlIGZpcnN0IG51bGwgYnl0ZSAtLSBtb3N0Ci0gICAgICAg dmVyc2lvbnMgYWx3YXlzIGNvcHkgdGhlIG51bWJlciBvZiBieXRlcyBnaXZlbiBpbiBhcmcgMywg cGFkZGluZwotICAgICAgIG91dCB3aXRoIDAncyBhbmQgb3ZlcndyaXRpbmcgd2hhdGV2ZXIgd2Fz IHRoZXJlIGJlZm9yZS4gVXNlCi0gICAgICAgQy1LZXJtaXQgY2tzdHJuY3B5KCkgaWYgeW91IHdh bnQgcHJlZGljdGFibGUgbm9uLXBhZGRpbmcgYmVoYXZpb3IsCi0gICAgICAgZ3VhcmFudGVlZCBO VUwtdGVybWluYXRpb24sIGFuZCBhIHVzZWZ1bCByZXR1cm4gY29kZS4KLSAgICAgKiBESUQgWU9V IEtOT1cuLiB0aGF0IHNvbWUgdmVyc2lvbnMgb2YgaW5ldF9ibGFoKCkgcm91dGluZXMgcmV0dXJu IElQCi0gICAgICAgYWRkcmVzc2VzIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgd2hpbGUgb3RoZXJz IHJldHVybiB0aGVtIGxvY2FsCi0gICAgICAgbWFjaGluZSBieXRlIG9yZGVyPyBTbyBwYXNzaW5n IHRoZW0gdG8gbnRvaHMoKSBvciB3aGF0ZXZlciBpcyBub3QKLSAgICAgICBhbHdheXMgdGhlIHJp Z2h0IHRoaW5nIHRvIGRvLgotICAgICAqIERvbid0IHVzZSBBTlNJLWZvcm1hdCBmdW5jdGlvbiBk ZWNsYXJhdGlvbnMgd2l0aG91dCAjaWZkZWYKLSAgICAgICBDS19BTlNJQywgYW5kIGFsd2F5cyBw cm92aWRlIGFuICNlbHNlIGZvciB0aGUgbm9uLUFOU0kgY2FzZS4KLSAgICAgKiBVc2UgdGhlIEtl cm1pdCBfUFJPVE9UWVAoKSBtYWNybyBmb3IgZGVjbGFyaW5nIGZ1bmN0aW9uIHByb3RvdHlwZXM7 Ci0gICAgICAgaXQgd29ya3MgaW4gYm90aCB0aGUgQU5TSSBhbmQgbm9uLUFOU0kgY2FzZXMuCi0g ICAgICogRG9uJ3QgZGVwZW5kIG9uIGFueSBvdGhlciBBTlNJIHByZXByb2Nlc3NvciBmZWF0dXJl cyBsaWtlICJwYXN0aW5nIgotICAgICAgIC0tIHRoZXkgYXJlIG9mdGVuIG1pc3Npbmcgb3Igbm9u b3BlcmF0aW9uYWwuCi0gICAgICogRG9uJ3QgYXNzdW1lIGFueSBDKysgc3ludGF4IG9yIHNlbWFu dGljcy4KLSAgICAgKiBEb24ndCB1c2UgLy8gYXMgYSBjb21tZW50IGludHJvZHVjZXIuIEMgaXMg bm90IEMrKy4KLSAgICAgKiBEb24ndCBkZWNsYXJlIGEgc3RyaW5nIGFzICJjaGFyIGZvb1tdIiBp biBvbmUgbW9kdWxlIGFuZCAiZXh0ZXJuCi0gICAgICAgY2hhciAqIGZvbyIgaW4gYW5vdGhlciwg b3IgdmljZS12ZXJzYTogdGhpcyBjYXVzZXMgY29yZSBkdW1wcy4KLSAgICAgKiBXaXRoIGNvbXBp bGVyIG1ha2VycyBmYWxsaW5nIGFsbCBvdmVyIHRoZW1zZWx2ZXMgdHJ5aW5nIHRvIG91dGRvCi0g ICAgICAgZWFjaCBvdGhlciBpbiBBTlNJIHN0cmljdG5lc3MsIGl0IGhhcyBiZWNvbWUgaW5jcmVh c2luZ2x5IG5lY2Vzc2FyeQotICAgICAgIHRvIGNhc3QgRVZFUllUSElORy4gRXNwZWNpYWxseSBj aGFyIHZzIHVuc2lnbmVkIGNoYXIuIFdlIG5lZWQgdG8KLSAgICAgICB1c2UgdW5zaWduZWQgY2hh cnMgaWYgd2Ugd2FudCB0byBkZWFsIHdpdGggOC1iaXQgY2hhcmFjdGVyIHNldHMsCi0gICAgICAg YnV0IG1vc3QgY2hhcmFjdGVyLSBhbmQgc3RyaW5nLW9yaWVudGVkIEFQSXMgd2FudCAoc2lnbmVk KSBjaGFyCi0gICAgICAgYXJndW1lbnRzLCBzbyBleHBsaWNpdCBjYXN0cyBhcmUgbmVjZXNzYXJ5 LiBJdCB3b3VsZCBiZSBuaWNlIGlmCi0gICAgICAgZXZlcnkgY29tcGlsZXIgaGFkIGEgLWZ1bnNp Z25lZC1jaGFyIG9wdGlvbiAoYXMgZ2NjIGRvZXMpLCBidXQgdGhleQotICAgICAgIGRvbid0Lgot ICAgICAqIGFbeF0sIHdoZXJlIHggaXMgYW4gdW5zaWduZWQgY2hhciwgY2FuIHByb2R1Y2UgYSB3 aWxkIG1lbW9yeQotICAgICAgIHJlZmVyZW5jZSBpZiB4LCB3aGVuIHByb21vdGVkIHRvIGFuIGlu dCwgYmVjb21lcyBuZWdhdGl2ZS4gQ2FzdCBpdAotICAgICAgIHRvICh1bnNpZ25lZCksIGV2ZW4g dGhvdWdoIGl0IEFMUkVBRFkgSVMgdW5zaWduZWQuCi0gICAgICogQmUgY2FyZWZ1bCBob3cgeW91 IGRlY2xhcmUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBjaGFyIG9yIGxvbmcKLSAgICAgICBhcmd1bWVu dHM7IGZvciBBTlNJIGNvbXBpbGVycyB5b3UgTVVTVCB1c2UgQU5TSSBkZWNsYXJhdGlvbnMgdG8K LSAgICAgICBhdm9pZCBwcm9tb3Rpb24gcHJvYmxlbXMsIGJ1dCB5b3UgY2FuJ3QgdXNlIEFOU0kg ZGVjbGFyYXRpb25zIHdpdGgKLSAgICAgICBub24tQU5TSSBjb21waWxlcnMuIFRodXMgZGVjbGFy YXRpb25zIG9mIHN1Y2ggZnVuY3Rpb25zIG11c3QgYmUKLSAgICAgICBoaWRlb3VzbHkgZW50d2lu ZWQgaW4gI2lmZGVmcy4gRXhhbXBsZToKLSAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAgUHV0IGNoYXJhY3RlciBpbiBzZXJ2ZXIgY29tbWFuZCBidWZmZXIgICovCi0gICNpZmRlZiBD S19BTlNJQwotICBwdXRzcnYoY2hhciBjKQotICAjZWxzZQotICBwdXRzcnYoYykgY2hhciBjOwot ICAjZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSAgLyogcHV0c3J2ICovIHsKLSAgICAgICpzcnZwdHIr KyA9IGM7Ci0gICAgICAqc3J2cHRyID0gJ1wwJzsgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBidWZm ZXIgaXMgbnVsbC10ZXJtaW5hdGVkICovCi0gICAgICByZXR1cm4oMCk7Ci0gIH0KLQotICAgICAq IEJlIGNhcmVmdWwgaG93IHlvdSByZXR1cm4gY2hhcmFjdGVycyBmcm9tIGZ1bmN0aW9ucyB0aGF0 IHJldHVybiBpbnQKLSAgICAgICB2YWx1ZXMgLS0gImdldGMtbGlrZSBmdW5jdGlvbnMiIC0tIGlu IHRoZSBBTlNJIHdvcmxkLiBVbmxlc3MgeW91Ci0gICAgICAgZXhwbGljaXRseSBjYXN0IHRoZSBy ZXR1cm4gdmFsdWUgdG8gKHVuc2lnbmVkKSwgaXQgaXMgbGlrZWx5IHRvIGJlCi0gICAgICAgInBy b21vdGVkIiB0byBhbiBpbnQgYW5kIGhhdmUgaXRzIHNpZ24gZXh0ZW5kZWQuCi0gICAgICogQXQg bGVhc3Qgb25lIGNvbXBpbGVyICh0aGUgb25lIG9uIERFQyBPU0YvMSAxLjMpIHRyZWF0cyAiLyoi IGFuZAotICAgICAgICIqLyIgd2l0aGluIHN0cmluZyBjb25zdGFudHMgYXMgY29tbWVudCBiZWdp biBhbmQgZW5kLiBObyBhbW91bnQgb2YKLSAgICAgICAjaWZkZWZzIHdpbGwgZ2V0IGFyb3VuZCB0 aGlzIG9uZS4gWW91IHNpbXBseSBjYW4ndCBwdXQgdGhlc2UKLSAgICAgICBzZXF1ZW5jZXMgaW4g YSBzdHJpbmcgY29uc3RhbnQsIGUuZy4gIi91c3IvbG9jYWwvZG9jLyouKiIuCi0gICAgICogQXZv aWQgcHV0dGluZyBtdWx0aXBsZSBtYWNybyByZWZlcmVuY2VzIG9uIGEgc2luZ2xlIGxpbmUsIGUu Zy46Ci0gIHB1dGNoYXIoQlMpOyBwdXRjaGFyKFNQKTsgcHV0Y2hhcihCUykKLQotICAgVGhpcyBv dmVyZmxvd3MgdGhlIENQUCBvdXRwdXQgYnVmZmVyIG9mIG1vcmUgdGhhbiBhIGZldyBDIHByZXBy b2Nlc3NvcnMKLSAgICh0aGlzIGhhcHBlbmVkLCBmb3IgZXhhbXBsZSwgd2l0aCBTdW5PUyA0LjEg Y2MsIHdoaWNoIGV2aWRlbnRseSBoYXMgYQotICAgMUsgbWFjcm8gZXhwYW5zaW9uIGJ1ZmZlciku Ci0KLSAgIEMtS2VybWl0IG5lZWRzIGNvbnN0YW50IGFkanVzdG1lbnQgdG8gbmV3IE9TIGFuZCBj b21waWxlciByZWxlYXNlcy4KLSAgIEV2ZXJ5IG5ldyBPUyByZWxlYXNlIHNodWZmbGVzIGhlYWRl ciBmaWxlcyBvciB0aGVpciBjb250ZW50cywgb3IKLSAgIHByb3RvdHlwZXMsIG9yIGRhdGEgdHlw ZXMsIG9yIGxldmVscyBvZiBBTlNJIHN0cmljdG5lc3MsIGV0Yy4gRXZlcnkKLSAgIHRpbWUgeW91 IG1ha2UgYW4gYWRqdXN0bWVudCB0byByZW1vdmUgYSBuZXcgY29tcGlsYXRpb24gZXJyb3IsIEJF IFZFUlkKLSAgIENBUkVGVUwgdG8gI2lmZGVmIGl0IG9uIGEgc3ltYm9sIHVuaXF1ZSB0byB0aGUg bmV3IGNvbmZpZ3VyYXRpb24gc28KLSAgIHRoYXQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24g KGFuZCBhbGwgb3RoZXIgY29uZmlndXJhdGlvbnMgb24gYWxsCi0gICBvdGhlciBwbGF0Zm9ybXMp IHJlbWFpbiBhcyBiZWZvcmUuCi0KLSAgIEFzc3VtZSBub3RoaW5nLiBEb24ndCBhc3N1bWUgaGVh ZGVyIGZpbGVzIGFyZSB3aGVyZSB0aGV5IGFyZSBzdXBwb3NlZAotICAgdG8gYmUsIHRoYXQgdGhl eSBjb250YWluIHdoYXQgeW91IHRoaW5rIHRoZXkgY29udGFpbiwgdGhhdCB0aGV5IGRlZmluZQot ICAgc3BlY2lmaWMgc3ltYm9scyB0byBoYXZlIGNlcnRhaW4gdmFsdWVzIC0tIG9yIGRlZmluZSB0 aGVtIGF0IGFsbCEgRG9uJ3QKLSAgIGFzc3VtZSBzeXN0ZW0gaGVhZGVyIGZpbGVzIHByb3RlY3Qg dGhlbXNlbHZlcyBhZ2FpbnN0IG11bHRpcGxlCi0gICBpbmNsdXNpb24uIERvbid0IGFzc3VtZSB0 aGF0IHBhcnRpY3VsYXIgc3lzdGVtIG9yIGxpYnJhcnkgY2FsbHMgYXJlCi0gICBhdmFpbGFibGUs IG9yIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUgd2hhdCB5b3UgdGhpbmsgdGhleSBhcmUgLS0gb3Jk ZXIsCi0gICBkYXRhIHR5cGUsIHBhc3NlZCBieSByZWZlcmVuY2UgdnMgdmFsdWUsIGV0Yy4gQmUg Y29uc2VydmF0aXZlIHdoZW4KLSAgIGF0dGVtcHRpbmcgdG8gd3JpdGUgcG9ydGFibGUgY29kZS4g QXZvaWQgYWxsIGFkdmFuY2VkIGZlYXR1cmVzLgotCi0gICBJZiB5b3Ugc2VlIHNvbWV0aGluZyB0 aGF0IGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGRvbid0IGFzc3VtZSBpdCdzIGEKLSAgIG1pc3Rha2Ug LS0gaXQgbWlnaHQgYmUgdGhlcmUgZm9yIGEgcmVhc29uLCBhbmQgY2hhbmdpbmcgaXQgb3IgcmVt b3ZpbmcKLSAgIGlzIGxpa2VseSB0byBjYXVzZSBjb21waWxhdGlvbiwgbGlua2luZywgb3IgcnVu dGltZSBmYWlsdXJlcyBzb21ldGltZSwKLSAgIHNvbWV3aGVyZS4gU29tZSBodWdlIHBlcmNlbnRh Z2Ugb2YgdGhlIGNvZGUsIGVzcGVjaWFsbHkgaW4gdGhlCi0gICBwbGF0Zm9ybS1kZXBlbmRlbnQg bW9kdWxlcywgaXMgd29ya2Fyb3VuZHMgZm9yIGNvbXBpbGVyLCBsaW5rZXIsIG9yIEFQSQotICAg YnVncy4KLQotICAgQnV0IGZpbmFsbHkuLi4gZmVlbCBmcmVlIHRvIHZpb2xhdGUgYW55IG9yIGFs bCBvZiB0aGVzZSBydWxlcyBpbgotICAgcGxhdGZvcm0tc3BlY2lmaWMgbW9kdWxlcyBmb3IgZW52 aXJvbm1lbnRzIGluIHdoaWNoIHRoZSBydWxlcyBhcmUKLSAgIGNlcnRhaW4gbm90IHRvIGFwcGx5 LiBGb3IgZXhhbXBsZSwgaW4gVk1TLXNwZWNpZmljIGNvZGUsIGl0IGlzIE9LIHRvCi0gICB1c2Ug I2lmLCBiZWNhdXNlIFZBWCBDLCBERUMgQywgYW5kIFZNUyBHQ0MgYWxsIHN1cHBvcnQgaXQuCi0K LSAgIFsgWzUxXUNvbnRlbnRzIF0gWyBbNTJdQy1LZXJtaXQgXSBbIFs1M11LZXJtaXQgSG9tZSBd Ci0KLTMuMS4gTWVtb3J5IExlYWtzCi0KLSAgIFRoZSBDIGxhbmd1YWdlIGFuZCBzdGFuZGFyZCBD IGxpYnJhcnkgYXJlIG5vdG9yaW91c2x5IGluYWRlcXVhdGUgYW5kCi0gICB1bnNhZmUuIFN0cmlu Z3MgYXJlIGFycmF5cyBvZiBjaGFyYWN0ZXJzLCB1c3VhbGx5IHJlZmVyZW5jZWQgdGhyb3VnaAot ICAgcG9pbnRlcnMuIFRoZXJlIGlzIG5vIG5hdGl2ZSBzdHJpbmcgZGF0YXR5cGUuIEJ1ZmZlcnMg YXJlIGZpeGVkIHNpemUsCi0gICBhbmQgQyBwcm92aWRlcyBubyBydW50aW1lIGJvdW5kcyBjaGVj a2luZywgdGh1cyBhbGxvd2luZyBvdmVyd3JpdGluZyBvZgotICAgb3RoZXIgZGF0YSBvciBldmVu IHByb2dyYW0gY29kZS4gV2l0aCB0aGUgcG9wdWxhcml6YXRpb24gb2YgdGhlCi0gICBJbnRlcm5l dCwgdGhlICJidWZmZXIgZXhwbG9pdCIgaGFzIGJlY29tZSBhIHByZWZlcnJlZCBtZXRob2QgZm9y Ci0gICBoYWNrZXJzIHRvIGhpamFjayBwcml2aWxlZ2VkIHByb2dyYW1zOyBsb25nIGRhdGEgc3Ry aW5ncyBhcmUgZmVkIHRvIGEKLSAgIHByb2dyYW0gaW4gaG9wZXMgdGhhdCBpdCB1c2VzIHVuc2Fm ZSBDIGxpYnJhcnkgY2FsbHMgc3VjaCBhcyBzdHJjcHkoKQotICAgb3Igc3ByaW50ZigpIHRvIGNv cHkgc3RyaW5ncyBpbnRvIGF1dG9tYXRpYyBhcnJheXMsIHRodXMgb3ZlcndyaXRpbmcKLSAgIHRo ZSBjYWxsIHN0YWNrLCBhbmQgdGhlcmVmb3JlIHRoZSByb3V0aW5lJ3MgcmV0dXJuIGFkZHJlc3Mu IFdoZW4gc3VjaCBhCi0gICBob2xlIGlzIGRpc2NvdmVyZWQsIGEgInN0cmluZyIgY2FuIGJlIGNv bnN0cnVjdGVkIHRoYXQgY29udGFpbnMgbWFjaGluZQotICAgY29kZSB0byBoaWphY2sgdGhlIHBy b2dyYW0ncyBwcml2aWxlZ2VzIGFuZCBwZW5ldHJhdGUgdGhlIHN5c3RlbS4KLQotICAgVGhpcyBw cm9ibGVtIGlzIHBhcnRpYWxseSBhZGRyZXNzZWQgYnkgdGhlIHN0cm4uLi4oKSByb3V0aW5lcywg d2hpY2gKLSAgIHNob3VsZCBhbHdheXMgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRoZWlyIHN0 ci4uLigpIGVxdWl2YWxlbnRzCi0gICAoZXhjZXB0IHdoZW4gdGhlIGNvcHkgb3BlcmF0aW9uIGhh cyBhbHJlYWR5IGJlZW4gcHJlY2hlY2tlZCwgb3IgdGhlcmUKLSAgIGlzIGEgZ29vZCByZWFzb24g Zm9yIG5vdCB1c2luZyB0aGVtLCBlLmcuIHRoZSBzb21ldGltZXMgdW5kZXNpcmFibGUKLSAgIHNp ZGUgZWZmZWN0IG9mIHN0cm5jcHkoKSB6ZXJvaW5nIHRoZSByZW1haW5kZXIgb2YgdGhlIGJ1ZmZl cikuIFRoZSBtb3N0Ci0gICBnYXBpbmcgd2hvbGUsIGhvd2V2ZXIsIGlzIHNwcmludGYoKSwgd2hp Y2ggcGVyZm9ybXMgbm8gbGVuZ3RoIGNoZWNraW5nCi0gICBvbiBpdHMgZGVzdGluYXRpb24gYnVm ZmVyLCBhbmQgaXMgbm90IGVhc3kgdG8gcmVwbGFjZS4gQWx0aG91Z2gKLSAgIHNucHJpbnRmKCkg cm91dGluZXMgYXJlIHN0YXJ0aW5nIHRvIGFwcGVhciwgdGhleSBhcmUgbm90IHlldAotICAgd2lk ZXNwcmVhZCwgYW5kIGNlcnRhaW5seSBub3QgdW5pdmVyc2FsLCBub3IgYXJlIHRoZXkgZXNwZWNp YWxseQotICAgcG9ydGFibGUsIG9yIGV2ZW4gZnVsbC1mZWF0dXJlZC4KLQotICAgRm9yIHRoZXNl IHJlYXNvbnMsIHdlIGhhdmUgc3RhcnRlZCB0byBidWlsZCB1cCBvdXIgb3duIGxpdHRsZSBsaWJy YXJ5Ci0gICBvZiBDIExpYnJhcnkgcmVwbGFjZW1lbnRzLCBja2NsaWIuW2NoXS4gVGhlc2UgYXJl IHNhZmUgYW5kIGhpZ2hseQotICAgcG9ydGFibGUgcHJpbWl0aXZlcyBmb3IgbWVtb3J5IG1hbmFn ZW1lbnQgYW5kIHN0cmluZyBtYW5pcHVsYXRpb24sIHN1Y2gKLSAgIGFzOgotCi0gICBja3N0cm5j cHkoKQotICAgICAgICAgIExpa2Ugc3RybmNweSBidXQgcmV0dXJucyBhIHVzZWZ1bCB2YWx1ZSwg ZG9lc24ndCB6ZXJvIGJ1ZmZlci4KLQotICAgY2tpdG9hKCkKLSAgICAgICAgICBPcHBvc2l0ZSBv ZiBhdG9pKCkKLQotICAgY2tsdG9hKCkKLSAgICAgICAgICBPcHBvc2l0ZSBvZiBhdG9sKCkKLQot ICAgY2tjdG9hKCkKLSAgICAgICAgICBSZXR1cm5zIGNoYXJhY3RlciBhcyBzdHJpbmcKLQotICAg Y2ttYWttc2coKQotICAgICAgICAgIFVzZWQgd2l0aCBjaz90bz8oKSBhcyBhIHNhZmUgc3ByaW50 ZigpIHJlcGxhY2VtZW50IGZvciB1cCB0byA0Ci0gICAgICAgICAgaXRlbXMKLQotICAgY2ttYWt4 bXNnKCkKLSAgICAgICAgICBMaWtlIGNrbWFrbXNnKCkgYnV0IGFjY2VwdHMgdXAgdG8gMTIgaXRl bXMKLQotICAgTW9yZSBhYm91dCBsaWJyYXJ5IGZ1bmN0aW9ucyBpbiBbNTRdU2VjdGlvbiA0LkEu Ci0KLSAgIFsgWzU1XUNvbnRlbnRzIF0gWyBbNTZdQy1LZXJtaXQgXSBbIFs1N11LZXJtaXQgSG9t ZSBdCi0KLTMuMi4gVGhlICJjaGFyIiB2cyAidW5zaWduZWQgY2hhciIgRGlsZW1tYQotCi0gICBU aGlzIGlzIG9uZSBvZiB0aGUgbW9zdCBhZ2dyYXZhdGluZyBhbmQgdmV4aW5nIGNoYXJhY3Rlcmlz dGljcyBvZiB0aGUgQwotICAgbGFuZ3VhZ2UuIEJ5IGRlc2lnbiwgY2hhcnMgKGFuZCBjaGFyICon cykgYXJlIFNJR05FRC4gQnV0IGluIHRoZSBtb2Rlcm4KLSAgIGVyYSwgaG93ZXZlciwgd2UgbmVl ZCB0byBwcm9jZXNzIGNoYXJhY3RlcnMgdGhhdCBjYW4gaGF2ZSAob3IgaW5jbHVkZSkKLSAgIDgt Yml0IHZhbHVlcywgYXMgaW4gdGhlIElTTyBMYXRpbi0xLCBJQk0gQ1AgODUwLCBvciBVVEYtOCBj aGFyYWN0ZXIKLSAgIHNldHMsIHNvIHRoaXMgZGF0YSBtdXN0IGJlIHRyZWF0ZWQgYXMgdW5zaWdu ZWQuIEJ1dCBzb21lIEMgY29tcGlsZXJzCi0gICAoc3VjaCBhcyB0aG9zZSBiYXNlZCBvbiB0aGUg QmVsbCBVTklYIFY3IGNvbXBpbGVyKSBkbyBub3Qgc3VwcG9ydAotICAgInVuc2lnbmVkIGNoYXIi IGFzIGEgZGF0YSB0eXBlLiBUaGVyZWZvcmUgd2UgaGF2ZSB0aGUgbWFjcm8gb3IgdHlwZWRlZgot ICAgQ0hBUiwgd2hpY2ggd2UgdXNlIHdoZW4gd2UgbmVlZCBjaGFycyB0byBiZSB1bnNpZ25lZCwg YnV0IHdoaWNoLAotICAgdW5mb3J0dW5hdGVseSwgcmVzb2x2ZXMgaXRzZWxmIHRvICJjaGFyIiBv biB0aG9zZSBjb21waWxlcnMgdGhhdCBkb24ndAotICAgc3VwcG9ydCAidW5zaWduZWQgY2hhciIu IEFORCBTTy4uLiBXZSBoYXZlIHRvIGRvIGEgbG90IG9mIGZpZGRsaW5nIGF0Ci0gICBydW50aW1l IHRvIGF2b2lkIHNpZ24gZXh0ZW5zaW9uIGFuZCBzbyBmb3J0aC4KLQotICAgU29tZSBtb2Rlcm4g Y29tcGlsZXJzIChlLmcuIElCTSwgREVDLCBNaWNyb3NvZnQpIGhhdmUgb3B0aW9ucyB0aGF0IHNh eQotICAgIm1ha2UgYWxsIGNoYXJzIGJlIHVuc2lnbmVkIiAoZS5nLiBHQ0MgIi1mdW5zaWduZWQt Y2hhciIpIGFuZCB3ZSB1c2UKLSAgIHRoZW0gd2hlbiB0aGV5IGFyZSBhdmFpbGFibGUuIE90aGVy IGNvbXBpbGVycyBkb24ndCBoYXZlIHRoaXMgb3B0aW9uLAotICAgYW5kIGF0IHRoZSBzYW1lIHRp bWUsIGFyZSBiZWNvbWluZyBpbmNyZWFzaW5nbHkgc3RyaWN0IGFib3V0IHR5cGUKLSAgIG1pc21h dGNoZXMsIGFuZCBzcGV3IG91dCB0b3JyZW50cyBvZiB3YXJuaW5ncyB3aGVuIHdlIHVzZSBhIENI QVIgd2hlcmUKLSAgIGEgY2hhciBpcyBleHBlY3RlZCwgb3IgdmljZSB2ZXJzYS4gV2UgZml4IHRo ZXNlIG9uZSBieSBvbmUgdXNpbmcgY2FzdHMsCi0gICBhbmQgdGhlIGNvZGUgYmVjb21lcyBpbmNy ZWFzaW5nbHkgdWdseS4gQnV0IHRoZXJlIHJlbWFpbnMgYSBzZXJpb3VzCi0gICBwcm9ibGVtLCBu YW1lbHkgdGhhdCBjZXJ0YWluIGxpYnJhcnkgYW5kIGtlcm5lbCBmdW5jdGlvbnMgaGF2ZQotICAg YXJndW1lbnRzIHRoYXQgYXJlIGRlY2xhcmVkIGFzIHNpZ25lZCBjaGFycyAob3IgcG9pbnRlcnMg dG8gdGhlbSksCi0gICB3aGVyZWFzIG91ciBjaGFyYWN0ZXIgZGF0YSBpcyB1bnNpZ25lZC4gRmlu ZSwgd2UgY2FuIGNhbiB1c2UgY2FzdHMgaGVyZQotICAgdG9vIC0tIGJ1dCB3aG8ga25vd3Mgd2hh dCBoYXBwZW5zIGluc2lkZSB0aGVzZSByb3V0aW5lcy4KLQotICAgWyBbNThdQ29udGVudHMgXSBb IFs1OV1DLUtlcm1pdCBdIFsgWzYwXUtlcm1pdCBIb21lIF0KLQotNC4gTU9EVUxFUwotCi0gICBX aGVuIEMtS2VybWl0IGlzIG9uIHRoZSBmYXIgZW5kIG9mIGEgY29ubmVjdGlvbiwgaXQgaXMgc2Fp ZCB0byBiZSBpbgotICAgcmVtb3RlIG1vZGUuIFdoZW4gQy1LZXJtaXQgaGFzIG1hZGUgYSBjb25u ZWN0aW9uIHRvIGFub3RoZXIgY29tcHV0ZXIsCi0gICBpdCBpcyBpbiBsb2NhbCBtb2RlLiAoSWYg Qy1LZXJtaXQgaXMgImluIHRoZSBtaWRkbGUiIG9mIGEgbXVsdGlob3AKLSAgIGNvbm5lY3Rpb24s IGl0IGlzIHN0aWxsIGluIGxvY2FsIG1vZGUuKQotCi0gICBPbiBhbm90aGVyIGF4aXMsIEMtS2Vy bWl0IGNhbiBiZSBpbiBhbnkgb2Ygc2V2ZXJhbCBtYWpvciBzdGF0ZXM6Ci0KLSAgIENvbW1hbmQg U3RhdGUKLSAgICAgICAgICBSZWFkaW5nIGFuZCB3cml0aW5nIGZyb20gdGhlIGpvYidzIGNvbnRy b2xsaW5nIHRlcm1pbmFsIG9yCi0gICAgICAgICAgImNvbnNvbGUiLiBJbiB0aGlzIG1vZGUsIGFs bCBpL28gaXMgaGFuZGxlZCBieSB0aGUgR3JvdXAgRQotICAgICAgICAgIGNvbnh4eCgpIChjb25z b2xlIGkvbykgcm91dGluZXMuCi0KLSAgIFByb3RvY29sIFN0YXRlCi0gICAgICAgICAgUmVhZGlu ZyBhbmQgd3JpdGluZyBmcm9tIHRoZSBjb21tdW5pY2F0aW9ucyBkZXZpY2UuIEluIHRoaXMKLSAg ICAgICAgICBtb2RlLCBhbGwgaS9vIGlzIGhhbmRsZWQgYnkgdGhlIEdyb3VwIEUgdHR4eHgoKSAo dGVybWluYWwgaS9vKQotICAgICAgICAgIHJvdXRpbmVzLgotCi0gICBUZXJtaW5hbCBTdGF0ZQot ICAgICAgICAgIFJlYWRpbmcgZnJvbSB0aGUga2V5Ym9hcmQgd2l0aCBjb254eHgoKSByb3V0aW5l cyBhbmQgd3JpdGluZyB0bwotICAgICAgICAgIHRoZSBjb21tdW5pY2F0aW9ucyBkZXZpY2Ugd2l0 aCB0dHh4eCgpIHJvdXRpbmVzIEFORCB2aWNlLXZlcnNhLgotCi0gICBXaGVuIGluIGxvY2FsIG1v ZGUsIHRoZSBjb25zb2xlIGFuZCBjb21tdW5pY2F0aW9ucyBkZXZpY2UgYXJlIGRpc3RpbmN0Lgot ICAgRHVyaW5nIGZpbGUgdHJhbnNmZXIsIEtlcm1pdCBtYXkgcHV0IHVwIGEgZmlsZS10cmFuc2Zl ciBkaXNwbGF5IG9uIHRoZQotICAgY29uc29sZSBhbmQgc2FtcGxlIHRoZSBjb25zb2xlIGZvciBp bnRlcnJ1cHRpb24gc2lnbmFscy4KLQotICAgV2hlbiBpbiByZW1vdGUgbW9kZSwgdGhlIGNvbnNv bGUgYW5kIGNvbW11bmljYXRpb25zIGRldmljZSBhcmUgdGhlCi0gICBzYW1lLCBhbmQgdGhlcmVm b3JlIHRoZXJlIGNhbiBiZSBubyBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgb24gdGhlCi0gICBjb25z b2xlIG9yIGludGVycnVwdGlvbnMgZnJvbSBpdCAoZXhjZXB0IGZvciAiaW4tYmFuZCIgaW50ZXJy dXB0aW9ucwotICAgc3VjaCBhcyBeQ15DXkMpLgotCi0gICBbIFs2MV1Db250ZW50cyBdIFsgWzYy XUMtS2VybWl0IF0gWyBbNjNdS2VybWl0IEhvbWUgXQotCi00LkEuIEdyb3VwIEE6IExpYnJhcnkg RnVuY3Rpb25zCi0KLSAgIExpYnJhcnkgZnVuY3Rpb25zLCBzdHJpY3RseSBwb3J0YWJsZSwgY2Fu IGJlIHVzZWQgYnkgYWxsIG1vZHVsZXMgb24gYWxsCi0gICBwbGF0Zm9ybXM6IFs2NF1ja2NsaWIu aCwgWzY1XWNrY2xpYi5jLgotCi0gICAoVG8gYmUgZmlsbGVkIGluLi4uIEZvciBub3csIHNlZSBb NjZdU2VjdGlvbiAzLjEgYW5kIHRoZSBjb21tZW50cyBpbgotICAgY2tjbGliLmMuKQotCi0gICBb IFs2N11Db250ZW50cyBdIFsgWzY4XUMtS2VybWl0IF0gWyBbNjldS2VybWl0IEhvbWUgXQotCi00 LkIuIEdyb3VwIEI6IEtlcm1pdCBGaWxlIFRyYW5zZmVyCi0KLSAgIFRoZSBLZXJtaXQgcHJvdG9j b2wga2VybmVsLiBUaGVzZSBmaWxlcywgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAiY2tjCi0gICBh cmUgc3VwcG9zZWQgdG8gYmUgdG90YWxseSBwb3J0YWJsZSBDLCBhbmQgYXJlIGV4cGVjdGVkIHRv IGNvbXBpbGUKLSAgIGNvcnJlY3RseSBvbiBhbnkgcGxhdGZvcm0gd2l0aCBhbnkgQyBjb21waWxl ci4gIlBvcnRhYmxlIiBkb2VzIG5vdCBtZWFuCi0gICB0aGUgc2FtZSBhcyBhcyAiQU5TSSIgLS0g dGhlc2UgbW9kdWxlcyBtdXN0IGNvbXBpbGUgb24gMTAtIGFuZCAyMC15ZWFyCi0gICBvbGQgY29t cHV0ZXJzLCB3aXRoIEMgcHJlcHJvY2Vzc29ycywgY29tcGlsZXJzLCBhbmQvb3IgbGlua2VycyB0 aGF0Ci0gICBoYXZlIGFsbCBzb3J0cyBvZiByZXN0cmljdGlvbnMuIFRoZSBHcm91cCBCIG1vZHVs ZXMgZG8gbm90IGluY2x1ZGUgYW55Ci0gICBoZWFkZXIgZmlsZXMgb3RoZXIgdGhhbiB0aG9zZSB0 aGF0IGNvbWUgd2l0aCBLZXJtaXQgaXRzZWxmLiBUaGV5IGRvIG5vdAotICAgY29udGFpbiBhbnkg bGlicmFyeSBjYWxscyBleGNlcHQgZnJvbSB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5IChlLmcuCi0g ICBwcmludGYoKSkuIFRoZXkgbW9zdCBjZXJ0YWlubHkgZG8gbm90IGNvbnRhaW4gYW55IHN5c3Rl bSBjYWxscy4gRmlsZXM6Ci0KLSAgIFs3MF1ja2NzeW0uaAotICAgICAgICAgIEZvciB1c2UgYnkg QyBjb21waWxlcnMgdGhhdCBkb24ndCBhbGxvdyAtRCBvbiB0aGUgY29tbWFuZCBsaW5lLgotCi0g ICBbNzFdY2tjYXNjLmgKLSAgICAgICAgICBBU0NJSSBjaGFyYWN0ZXIgc3ltYm9sIGRlZmluaXRp b25zLgotCi0gICBbNzJdY2tjc2lnLmgKLSAgICAgICAgICBTeXN0ZW0taW5kZXBlbmRlbnQgc2ln bmFsLWhhbmRsaW5nIGRlZmluaXRpb25zIGFuZCBwcm90b3R5cGVzLgotCi0gICBbNzNdY2tjZGVi LmgKLSAgICAgICAgICBPcmlnaW5hbGx5LCBkZWJ1Z2dpbmcgZGVmaW5pdGlvbnMuIE5vdyB0aGlz IGZpbGUgYWxzbyBjb250YWlucwotICAgICAgICAgIGFsbCBkZWZpbml0aW9ucyBhbmQgcHJvdG90 eXBlcyB0aGF0IGFyZSBzaGFyZWQgYnkgYWxsIG1vZHVsZXMgaW4KLSAgICAgICAgICBhbGwgZ3Jv dXBzLgotCi0gICBbNzRdY2tja2VyLmgKLSAgICAgICAgICBLZXJtaXQgcHJvdG9jb2wgc3ltYm9s IGRlZmluaXRpb25zLgotCi0gICBbNzVdY2tjeGxhLmgKLSAgICAgICAgICBDaGFyYWN0ZXItc2V0 LXJlbGF0ZWQgc3ltYm9sIGRlZmluaXRpb25zIChzZWUgbmV4dCBzZWN0aW9uKS4KLQotICAgWzc2 XWNrY21haS5jCi0gICAgICAgICAgVGhlIG1haW4gcHJvZ3JhbS4gVGhpcyBtb2R1bGUgY29udGFp bnMgdGhlIGRlY2xhcmF0aW9ucyBvZiBhbGwKLSAgICAgICAgICB0aGUgcHJvdG9jb2wtcmVsYXRl ZCBnbG9iYWwgdmFyaWFibGVzIHRoYXQgYXJlIHNoYXJlZCBhbW9uZyB0aGUKLSAgICAgICAgICBv dGhlciBtb2R1bGVzLgotCi0gICBbNzddY2tjcHJvLncKLSAgICAgICAgICBUaGUgcHJvdG9jb2wg bW9kdWxlIGl0c2VsZiwgd3JpdHRlbiBpbiAid2FydCIsIGEgbGV4LWxpa2UKLSAgICAgICAgICBw cmVwcm9jZXNzb3IgdGhhdCBpcyBkaXN0cmlidXRlZCB3aXRoIEtlcm1pdCB1bmRlciB0aGUgbmFt ZQotICAgICAgICAgIENLV0FSVC5DLgotCi0gICBbNzhdY2tjZm5zLmMsIFs3OV1ja2NmbjIuYywg WzgwXWNrY2ZuMy5jCi0gICAgICAgICAgVGhlIHByb3RvY29sIHN1cHBvcnQgZnVuY3Rpb25zIHVz ZWQgYnkgdGhlIHByb3RvY29sIG1vZHVsZS4KLQotICAgWzgxXUdyb3VwIEIgbW9kdWxlcyBtYXkg Y2FsbCB1cG9uIGZ1bmN0aW9ucyBmcm9tIFs4Ml1Hcm91cCBFLCBidXQgbm90Ci0gICBmcm9tIFs4 M11Hcm91cCBEIG1vZHVsZXMgKHdpdGggdGhlIHNpbmdsZSBleGNlcHRpb24gdGhhdCB0aGUgbWFp bgotICAgcHJvZ3JhbSBpbnZva2VzIHRoZSB1c2VyIGludGVyZmFjZSwgd2hpY2ggaXMgaW4gR3Jv dXAgRCkuIChUaGlzIGxhc3QKLSAgIGFzc2VydGlvbiBpcyByZWFsbHkgb25seSBhIGNvbmplY3R1 cmUuKQotCi0gICBbIFs4NF1Db250ZW50cyBdIFsgWzg1XUMtS2VybWl0IF0gWyBbODZdS2VybWl0 IEhvbWUgXQotCi00LkMuIEdyb3VwIEM6IENoYXJhY3Rlci1TZXQgQ29udmVyc2lvbgotCi0gICBD aGFyYWN0ZXIgc2V0IHRyYW5zbGF0aW9uIHRhYmxlcyBhbmQgZnVuY3Rpb25zLiBVc2VkIGJ5IHRo ZSBbODddR3JvdXAKLSAgIEIsIHByb3RvY29sIG1vZHVsZXMsIGJ1dCBtYXkgYmUgc3BlY2lmaWMg dG8gZGlmZmVyZW50IGNvbXB1dGVycy4gKFNvCi0gICBmYXIsIGFsbCBjaGFyYWN0ZXIgY2hhcmFj dGVyIHNldHMgc3VwcG9ydGVkIGJ5IEMtS2VybWl0IGFyZSBzdXBwb3J0ZWQKLSAgIGluIFs4OF1j a3V4bGEuYyBhbmQgWzg5XWNrdXhsYS5oLCBpbmNsdWRpbmcgTWFjaW50b3NoIGFuZCBJQk0gY2hh cmFjdGVyCi0gICBzZXRzKS4gVGhlc2UgbW9kdWxlcyBzaG91bGQgYmUgY29tcGxldGVseSBwb3J0 YWJsZSwgYW5kIG5vdCByZWx5IG9uIGFueQotICAga2luZCBvZiBzeXN0ZW0gb3IgbGlicmFyeSBz ZXJ2aWNlcy4KLQotICAgWzkwXWNrY3hsYS5oCi0gICAgICAgICAgQ2hhcmFjdGVyLXNldCBkZWZp bml0aW9ucyB1c2FibGUgYnkgYWxsIHZlcnNpb25zIG9mIEMtS2VybWl0LgotCi0gICBjaz94bGEu aAotICAgICAgICAgIENoYXJhY3Rlci1zZXQgZGVmaW5pdGlvbnMgZm9yIGNvbXB1dGVyICI/Iiwg ZS5nLiBbOTFdY2t1eGxhLmgKLSAgICAgICAgICBmb3IgVU5JWCwgWzkyXWNrbXhsYS5oIGZvciBN YWNpbnRvc2guCi0KLSAgIFs5M11jaz94bGEKLSAgICAgICAgICBDaGFyYWN0ZXItc2V0IHRyYW5z bGF0aW9uIHRhYmxlcyBhbmQgZnVuY3Rpb25zIGZvciBjb21wdXRlciAiPyIsCi0gICAgICAgICAg Rm9yIGV4YW1wbGUsIENLVVhMQS5DIGZvciBVTklYLCBDS01YTEEuQyBmb3IgTWFjaW50b3NoLiBT byBmYXIsCi0gICAgICAgICAgdGhlc2UgYXJlIHRoZSBvbmx5IHR3byBzdWNoIG1vZHVsZXMuIFRo ZSBVTklYIG1vZHVsZSBpcyB1c2VkIGZvcgotICAgICAgICAgIGFsbCB2ZXJzaW9ucyBvZiBDLUtl cm1pdCBleGNlcHQgdGhlIE1hY2ludG9zaCB2ZXJzaW9uLgotCi0gICBbOTRdY2tjdW5pLmgKLSAg ICAgICAgICBVbmljb2RlIGRlZmluaXRpb25zCi0KLSAgIFs5NV1ja2N1bmkuYwotICAgICAgICAg IFVuaWNvZGUgbW9kdWxlCi0KLSAgIEhlcmUncyBob3cgdG8gYWRkIGEgbmV3IGZpbGUgY2hhcmFj dGVyIHNldCBpbiB0aGUgb3JpZ2luYWwgKG5vbi1Vbmljb2RlCi0gICBtb2R1bGVzKS4gQXNzdW1p bmcgaXQgaXMgYmFzZWQgb24gdGhlIFJvbWFuIChMYXRpbikgYWxwaGFiZXQuIExldCdzCi0gICBj YWxsIGl0ICJCYXJiYXJpYW4iLiBGaXJzdCwgaW4gY2s/eGxhLmgsIGFkZCBhIGRlZmluaXRpb24g Zm9yIEZDX0JBUkJBCi0gICAoOCBjaGFycyBtYXhpbXVtIGxlbmd0aCkgYW5kIGluY3JlYXNlIE1B WEZDU0VUUyBieSAxLiBUaGVuLCBpbgotICAgY2s/eGxhLmM6Ci0KLSAgICAgKiBBZGQgYSBiYXJi YXJpYW4gZW50cnkgaW50byB0aGUgZmNzaW5mbyBhcnJheS4KLSAgICAgKiBBZGQgYSAiYmFyYmFy aWFuIiBlbnRyeSB0byBmaWxlIGNoYXJhY3RlciBzZXQga2V5d29yZCB0YWJsZSwKLSAgICAgICBm Y3N0YWIuCi0gICAgICogQWRkIGEgImJhcmJhcmlhbiIgZW50cnkgdG8gdGVybWluYWwgY2hhcmFj dGVyIHNldCBrZXl3b3JkIHRhYmxlLAotICAgICAgIHR0Y3N0YWIuCi0gICAgICogQWRkIGEgdHJh bnNsYXRpb24gdGFibGUgZnJvbSBMYXRpbi0xIHRvIGJhcmJhcmlhbjogeWwxYmFbXS4KLSAgICAg KiBBZGQgYSB0cmFuc2xhdGlvbiB0YWJsZSBmcm9tIGJhcmJhcmlhbiB0byBMYXRpbi0xOiB5YmFs MVtdLgotICAgICAqIEFkZCBhIHRyYW5zbGF0aW9uIGZ1bmN0aW9uIGZyb20gQmFyYmFyaWFuIHRv IEFTQ0lJOiB4YmFhcygpLgotICAgICAqIEFkZCBhIHRyYW5zbGF0aW9uIGZ1bmN0aW9uIGZyb20g QmFyYmFyaWFuIHRvIExhdGluLTE6IHhiYWwxKCkuCi0gICAgICogQWRkIGEgdHJhbnNsYXRpb24g ZnVuY3Rpb24gZnJvbSBMYXRpbi0xIHRvIEJhcmJhcmlhbjogeGwxYmEoKS4KLSAgICAgKiBldGMg ZXRjIGZvciBlYWNoIHRyYW5zZmVyIGNoYXJhY3RlciBzZXQuLi4KLSAgICAgKiBBZGQgdHJhbnNs YXRpb24gZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIHhscyBhbmQgeGxyIHRhYmxlcy4KLQotICAg T3RoZXIgdHJhbnNsYXRpb25zIGludm9sdmluZyBCYXJiYXJpYW4gKGUuZy4gZnJvbSBCYXJiYXJp YW4gdG8KLSAgIExhdGluLUN5cmlsbGljKSBhcmUgcGVyZm9ybWVkIHRocm91Z2ggdGhlc2UgdGFi bGVzIGFuZCBmdW5jdGlvbnMuIFNlZQotICAgY2t1eGxhLmggYW5kIGNrdXhsYS5jIGZvciBleHRl bnNpdmUgZXhhbXBsZXMuCi0KLSAgIFRvIGFkZCBhIG5ldyBUcmFuc2ZlciBDaGFyYWN0ZXIgU2V0 LCBlLmcuIExhdGluIEFscGhhYmV0IDkgKGZvciB0aGUKLSAgIEV1cm8gc3ltYm9sKSwgYWdhaW4g aW4gdGhlICJvbGQiIGNoYXJhY3Rlci1zZXQgbW9kdWxlczoKLQotICAgSW4gY2tjeGxhLmg6Ci0K LSAgICAgICAgICArIEFkZCBhIFRDX3h4eHggZGVmaW5pdGlvbiBhbmQgaW5jcmVhc2UgTUFYVENT RVRTIGFjY29yZGluZ2x5LgotCi0gICBJbiBjaz94bGEuaCAoc2luY2UgYW55IHRyYW5zZmVyIGNo YXJzZXQgaXMgYWxzbyBhIGZpbGUgY2hhcnNldCk6Ci0KLSAgICAgICAgICArIEFkZCBhbiBGQ194 eHh4IGRlZmluaXRpb24gYW5kIGluY3JlYXNlIE1BWEZDU0VUUyBhY2NvcmRpbmdseS4KLQotICAg SW4gY2s/eGxhLmM6Ci0KLSAgICAgICAgICArIEFkZCBhIHRjc2luZm9bXSBlbnRyeS4KLSAgICAg ICAgICArIE1ha2UgYSB0Y3N0YWJbXSBrZXl3b3JkIHRhYmxlIGVudHJ5LgotICAgICAgICAgICsg TWFrZSBhbiBmY3NpbmZvW10gdGFibGUgZW50cnkuCi0gICAgICAgICAgKyBNYWtlIGFuIGZjc3Rh YltdIGtleXdvcmQgdGFibGUgZW50cnkuCi0gICAgICAgICAgKyBNYWtlIGEgdGNzdGFiW10ga2V5 d29yZCB0YWJsZSBlbnRyeS4KLSAgICAgICAgICArIElmIG5lY2Vzc2FyeSwgbWFrZSBhIGxhbmdp bmZvW10gdGFibGUgZW50cnkuCi0gICAgICAgICAgKyBNYWtlIGVudHJpZXMgaW4gdGhlIGZ1bmN0 aW9uIHBvaW50ZXIgYXJyYXlzLgotICAgICAgICAgICsgUHJvdmlkZSBhbnkgbmVlZGVkIGZ1bmN0 aW9ucy4KLQotICAgQXMgb2YgQy1LZXJtaXQgNy4wLCBjaGFyYWN0ZXIgc2V0cyBhcmUgYWxzbyBo YW5kbGVkIGluIHBhcmFsbGVsIGJ5IHRoZQotICAgbmV3IChhbmQgdmVyeSBsYXJnZSkgVW5pY29k ZSBtb2R1bGUsIGNrY3VuaS5bY2hdLiBFdmVudHVhbGx5IHdlIHNob3VsZAotICAgcGhhc2Ugb3V0 IHRoZSBvbGQgd2F5LCBkZXNjcmliZWQganVzdCBhYm92ZSwgYW5kIG9wZXJhdGUgZW50aXJlbHkg aW4KLSAgIChhbmQgdGhyb3VnaCkgVW5pY29kZS4gVGhlIGFkdmFudGFnZXMgYXJlIG1hbnkuIFRo ZSBkaXNhZHZhbnRhZ2VzIGFyZQotICAgc2l6ZSBhbmQgcGVyZm9ybWFuY2UuIFRvIGFkZCBhIGNo YXJhY3RlciB0byB0aGUgVW5pY29kZSBtb2R1bGVzOgotCi0gICBJbiBja2N1bmkuaDoKLQotICAg ICAgICAgICsgKFRvIGJlIGZpbGxlZCBpbi4uLikKLQotICAgSW4gY2tjdW5pLmM6Ci0KLSAgICAg ICAgICArIChUbyBiZSBmaWxsZWQgaW4uLi4pCi0KLSAgIFsgWzk2XUNvbnRlbnRzIF0gWyBbOTdd Qy1LZXJtaXQgXSBbIFs5OF1LZXJtaXQgSG9tZSBdCi0KLTQuRC4gR3JvdXAgRDogVXNlciBJbnRl cmZhY2UKLQotICAgVGhpcyBpcyB0aGUgY29kZSB0aGF0IGNvbW11bmljYXRlcyB3aXRoIHRoZSB1 c2VyLCBnZXRzIGhlciBjb21tYW5kcywKLSAgIGluZm9ybXMgaGVyIG9mIHRoZSByZXN1bHRzLiBJ dCBtYXkgYmUgY29tbWFuZC1saW5lIG9yaWVudGVkLAotICAgaW50ZXJhY3RpdmUgcHJvbXB0aW5n IGRpYWxvZywgbWVudXMgYW5kIGFycm93IGtleXMsIHdpbmRvd3MgYW5kIG1pY2UsCi0gICBzcGVl Y2ggcmVjb2duaXRpb24sIHRlbGVwYXRoeSwgZXRjLiBUaGUgb25lIHByb3ZpZGVkIGlzIGNvbW1h bmQtYW5kCi0gICBwcm9tcHQsIHdpdGggdGhlIGFiaWxpdHkgdG8gcmVhZCBjb21tYW5kcyBmcm9t IHZhcmlvdXMgc291cmNlczogdGhlCi0gICBjb25zb2xlIGtleWJvYXJkLCBhIGZpbGUsIG9yIGEg bWFjcm8gZGVmaW5pdGlvbi4gVGhlIHVzZXIgaW50ZXJmYWNlIGhhcwotICAgdGhyZWUgbWFqb3Ig ZnVuY3Rpb25zOgotCi0gICAgMS4gU2V0cyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGZpbGUgdHJh bnNmZXIgYW5kIHRoZW4gc3RhcnRzIGl0LiBUaGlzCi0gICAgICAgaXMgZG9uZSBieSBzZXR0aW5n IGNlcnRhaW4gKG1hbnkpIGdsb2JhbCB2YXJpYWJsZXMsIHN1Y2ggYXMgdGhlCi0gICAgICAgcHJv dG9jb2wgbWFjaGluZSBzdGFydCBzdGF0ZSwgdGhlIGZpbGUgc3BlY2lmaWNhdGlvbiwgZmlsZSB0 eXBlLAotICAgICAgIGNvbW11bmljYXRpb24gcGFyYW1ldGVycywgcGFja2V0IGxlbmd0aCwgd2lu ZG93IHNpemUsIGNoYXJhY3RlcgotICAgICAgIHNldCwgZXRjLgotICAgIDIuIERpc3BsYXlzIG1l c3NhZ2VzIG9uIHRoZSB1c2VyJ3Mgc2NyZWVuIGR1cmluZyB0aGUgZmlsZSB0cmFuc2ZlciwKLSAg ICAgICB1c2luZyB0aGUgc2NyZWVuKCkgZnVuY3Rpb24sIHdoaWNoIGlzIGNhbGxlZCBieSB0aGUg Z3JvdXAtMQotICAgICAgIG1vZHVsZXMuCi0gICAgMy4gRXhlY3V0ZXMgYW55IGNvbW1hbmRzIGRp cmVjdGx5IHRoYXQgZG8gbm90IHJlcXVpcmUgS2VybWl0IHByb3RvY29sLAotICAgICAgIHN1Y2gg YXMgdGhlIENPTk5FQ1QgY29tbWFuZCwgbG9jYWwgZmlsZSBtYW5hZ2VtZW50IGNvbW1hbmRzLAot ICAgICAgIHBhcmFtZXRlci1zZXR0aW5nIGNvbW1hbmRzLCBGVFAgY2xpZW50IGNvbW1hbmRzLCBl dGMuCi0KLSAgIElmIHlvdSBwbGFuIHRvIGVtYmVkIHRoZSBbOTldR3JvdXAgQiwgZmlsZXMgaW50 byBhIHByb2dyYW0gd2l0aCBhCi0gICBkaWZmZXJlbnQgdXNlciBpbnRlcmZhY2UsIHlvdXIgaW50 ZXJmYWNlIG11c3Qgc3VwcGx5IGFuIGFwcHJvcHJpYXRlCi0gICBzY3JlZW4oKSBmdW5jdGlvbiwg cGx1cyBhIGNvdXBsZSByZWxhdGVkIG9uZXMgbGlrZSBjaGtpbnQoKSBhbmQKLSAgIGludG1zZygp IGZvciBoYW5kbGluZyBrZXlib2FyZCAob3IgbW91c2UsIGV0YykgaW50ZXJydXB0aW9ucyBkdXJp bmcKLSAgIGZpbGUgdHJhbnNmZXIuIFRoZSBiZXN0IHdheSB0byBmaW5kIG91dCBhYm91dCB0aGlz IGlzIHRvIGxpbmsgYWxsIHRoZQotICAgQy1LZXJtaXQgbW9kdWxlcyB0b2dldGhlciBleGNlcHQg dGhlIGNrdXUqLm8gYW5kIGNrdWNvbi5vIG1vZHVsZXMsIGFuZAotICAgc2VlIHdoaWNoIG1pc3Np bmcgc3ltYm9scyB0dXJuIHVwLgotCi0gICBDLUtlcm1pdCdzIGNoYXJhY3Rlci1vcmllbnRlZCB1 c2VyIGludGVyZmFjZSAoYXMgb3Bwb3NlZCB0byB0aGUKLSAgIE1hY2ludG9zaCB2ZXJzaW9uJ3Mg Z3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlKSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nCi0gICBt b2R1bGVzLiBDLUtlcm1pdCBjYW4gYmUgYnVpbHQgd2l0aCBhbiBpbnRlcmFjdGl2ZSBjb21tYW5k IHBhcnNlciwgYQotICAgY29tbWFuZC1saW5lLW9wdGlvbi1vbmx5IHBhcnNlciwgYSBncmFwaGlj YWwgdXNlciBpbnRlcmZhY2UsIG9yIGFueQotICAgY29tYmluYXRpb24sIGFuZCBpdCBjYW4gZXZl biBiZSBidWlsdCB3aXRoIG5vIHVzZXIgaW50ZXJmYWNlIGF0IGFsbCAoaW4KLSAgIHdoaWNoIGNh c2UgaXQgcnVucyBhcyBhIHJlbW90ZS1tb2RlIEtlcm1pdCBzZXJ2ZXIpLgotCi0gICBbMTAwXWNr dWNtZC5oCi0gICBbMTAxXWNrdWNtZC5jCi0gICAgICAgICAgVGhlIGNvbW1hbmQgcGFyc2luZyBw cmltaXRpdmVzIHVzZWQgYnkgdGhlIGludGVyYWN0aXZlIGNvbW1hbmQKLSAgICAgICAgICBwYXJz ZXIgdG8gcGFyc2Uga2V5d29yZHMsIG51bWJlcnMsIGZpbGVuYW1lcywgZXRjLCBhbmQgdG8gZ2l2 ZQotICAgICAgICAgIGhlbHAsIGNvbXBsZXRlIGZpZWxkcywgc3VwcGx5IGRlZmF1bHRzLCBhbGxv dyBhYmJyZXZpYXRpb25zIGFuZAotICAgICAgICAgIGVkaXRpbmcsIGV0Yy4gVGhpcyBwYWNrYWdl IGlzIHRvdGFsbHkgaW5kZXBlbmRlbnQgb2YgS2VybWl0LCBidXQKLSAgICAgICAgICBkb2VzIGRl cGVuZCBvbiB0aGUgWzEwMl1Hcm91cCBFIGZ1bmN0aW9ucy4KLQotICAgWzEwM11ja3V1c3IuaAot ICAgICAgICAgIERlZmluaXRpb25zIG9mIHN5bWJvbHMgdXNlZCBpbiBLZXJtaXQncyBjb21tYW5k cy4KLQotICAgY2t1dXMqLmMKLSAgICAgICAgICBLZXJtaXQncyBpbnRlcmFjdGl2ZSBjb21tYW5k IHBhcnNlciwgaW5jbHVkaW5nIHRoZSBzY3JpcHQKLSAgICAgICAgICBwcm9ncmFtbWluZyBsYW5n dWFnZTogWzEwNF1ja3V1c3IuYyAoaW5jbHVkZXMgdG9wLWxldmVsIGtleXdvcmQKLSAgICAgICAg ICB0YWJsZXMpOyBbMTA1XWNrdXVzMi5jIChIRUxQIGNvbW1hbmQgdGV4dCk7IFsxMDZdY2t1dXMz LmMgKG1vc3QKLSAgICAgICAgICBvZiB0aGUgU0VUIGNvbW1hbmQpOyBbMTA3XWNrdXVzNC5jIChp bmNsdWRlcyB2YXJpYWJsZXMgYW5kCi0gICAgICAgICAgZnVuY3Rpb25zKTsgY2t1dXNbNTY3XS5j IChtaXNjZWxsYW5lb3VzKTsKLQotICAgWzEwOF1ja3V1c3kuYwotICAgICAgICAgIFRoZSBjb21t YW5kLWxpbmUtb3B0aW9uIHBhcnNlci4KLQotICAgWzEwOV1ja3V1c3guYwotICAgICAgICAgIFVz ZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucyBjb21tb24gdG8gYm90aCB0aGUgaW50ZXJhY3RpdmUgYW5k Ci0gICAgICAgICAgY29tbWFuZC1saW5lIHBhcnNlcnMuCi0KLSAgIFsxMTBdY2t1dmVyLmgKLSAg ICAgICAgICBWZXJzaW9uIGhlcmFsZHMgZm9yIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMuCi0K LSAgIFsxMTFdY2t1c2NyLmMKLSAgICAgICAgICBUaGUgKG9sZCwgdXVjcC1saWtlKSBTQ1JJUFQg Y29tbWFuZAotCi0gICBbMTEyXWNrdWRpYS5jCi0gICAgICAgICAgVGhlIERJQUwgY29tbWFuZC4g SW5jbHVkZXMgc3BlY2lmaWMga25vd2xlZGdlIG9mIG1hbnkgdHlwZXMgb2YKLSAgICAgICAgICBt b2RlbXMuCi0KLSAgIE5vdGUgdGhhdCBub25lIG9mIHRoZSBhYm92ZSBmaWxlcyBpcyBhY3R1YWxs eSBVbml4LXNwZWNpZmljLiBPdmVyIHRpbWUKLSAgIHRoZXkgaGF2ZSBwcm92ZW4gdG8gYmUgcG9y dGFibGUgYW1vbmcgYWxsIHBsYXRmb3JtcyB3aGVyZSBDLUtlcm1pdCBpcwotICAgYnVpbHQ6IFVu aXgsIFZNUywgQU9TL1ZTLCBBbWlnYSwgT1MtOSwgVk9TLCBldGMgZXRjLiBUaHVzIHRoZSB0aGly ZAotICAgbGV0dGVyIHNob3VsZCBtb3JlIHByb3Blcmx5IGJlICJjIiwgYnV0IGNoYW5naW5nIGl0 IHdvdWxkIGJlIHRvbwotICAgY29uZnVzaW5nLgotCi0gICBjaz9jb24uYywgY2t1Y25zLmMKLSAg ICAgICAgICBUaGUgQ09OTkVDVCBjb21tYW5kLiBUZXJtaW5hbCBjb25uZWN0aW9uLCBhbmQgaW4g c29tZSBjYXNlcwotICAgICAgICAgIChNYWNpbnRvc2gsIFdpbmRvd3MpIGFsc28gdGVybWluYWwg ZW11bGF0aW9uLiBOT1RFOiBBcyBvZgotICAgICAgICAgIEMtS2VybWl0IDcuMCwgdGhlcmUgYXJl IHR3byBkaWZmZXJlbnQgQ09OTkVDVCBtb2R1bGVzIGZvciBVTklYOgotICAgICAgICAgIFsxMTNd Y2t1Y29uLmMgLS0gdGhlIHRyYWRpdGlvbmFsLCBwb3J0YWJsZSwgZm9yaygpLWJhc2VkIHZlcnNp b24KLSAgICAgICAgICAtLSBhbmQgWzExNF1ja3VjbnMuYywgYSBuZXcgdmVyc2lvbiB0aGF0IHVz ZXMgc2VsZWN0KCkgcmF0aGVyCi0gICAgICAgICAgdGhhbiBmb3JrcyBzbyBpdCBjYW4gaGFuZGxl IGVuY3J5cHRpb24uIGNrdWNucy5jIGlzIHRoZQotICAgICAgICAgIHByZWZlcnJlZCB2ZXJzaW9u IGZvciBVbml4OyBja3Vjb24uYyBpcyBub3QgbGlrZWx5IHRvIGtlZXAgcGFjZQotICAgICAgICAg IHdpdGggaXQgaW4gdGVybXMgb2YgdXBncmFkZXMsIGV0Yy4gSG93ZXZlciwgc2luY2Ugc2VsZWN0 KCkgaXMKLSAgICAgICAgICBub3QgcG9ydGFibGUgdG8gZXZlcnkgcGxhdGZvcm0sIGNrdWNvbi5j IHdpbGwgYmUga2VwdAotICAgICAgICAgIGluZGVmaW5pdGVseSBmb3IgdGhvc2UgcGxhdGZvcm1z IHRoYXQgY2FuJ3QgdXNlIGNrdWNucy5jLiBOT1RFOgotICAgICAgICAgIFN1bkxpbmsgWC4yNSBz dXBwb3J0IGlzIGF2YWlsYWJsZSBvbmx5IGluIGNrdWNvbi5jLgotCi0gICBja18qLiosIGNrdWF0 Ki4qCi0gICAgICAgICAgTW9kdWxlcyBoYXZpbmcgdG8gZG8gd2l0aCBhdXRoZW50aWNhdGlvbiBh bmQgZW5jcnlwdGlvbi4gU2luY2UKLSAgICAgICAgICB0aGUgcmVsYXhhdGlvbiBvZiBVU0EgZXhw b3J0IGxhd3MsIHRoZXkgYXJlIGluY2x1ZGVkIHdpdGggdGhlCi0gICAgICAgICAgZ2VuZXJhbCBz b3VyY2UtY29kZSBkaXN0cmlidXRpb24uIFNlY3VyZSBDLUtlcm1pdCBiaW5hcmllcyBjYW4KLSAg ICAgICAgICBiZSBidWlsdCB1c2luZyBzcGVjaWFsIHRhcmdldHMgaW4gdGhlIHN0YW5kYXJkIG1h a2VmaWxlLgotICAgICAgICAgIEhvd2V2ZXIsIHNlY3VyZSBwcmVidWlsdCBiaW5hcmllcyBtYXkg bm90IGJlIGRpc3RyaWJ1dGVkLgotCi0gICBGb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zLCB0aGUg ZmlsZXMgbWF5LCBhbmQgcHJvYmFibHkgZG8sIGhhdmUKLSAgIGRpZmZlcmVudCBuYW1lcy4gRm9y IGV4YW1wbGUsIHRoZSBNYWNpbnRvc2ggZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlCi0gICBmaWxl bmFtZXMgc3RhcnQgd2l0aCAiY2ttIi4gS2VybWl0IDk1IHVzZXMgdGhlIGNrdWNtZCBhbmQgY2t1 dXMqCi0gICBtb2R1bGVzLCBidXQgaGFzIGl0cyBvd24gQ09OTkVDVCBjb21tYW5kIG1vZHVsZXMu IEFuZCBzbyBvbi4KLQotICAgSGVyZSBpcyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIEMtS2VybWl0 J3MgInVzZXIgaW50ZXJmYWNlIGludGVyZmFjZSIsCi0gICBmcm9tIGNrdXVzci5jLiBJdCBpcyBu b3doZXJlIG5lYXIgY29tcGxldGU7IGluIHBhcnRpY3VsYXIsIGh1bmRyZWRzIG9mCi0gICBnbG9i YWwgdmFyaWFibGVzIGFyZSBzaGFyZWQgYW1vbmcgdGhlIG1hbnkgbW9kdWxlcy4gVGhlc2Ugc2hv dWxkLCBzb21lCi0gICBkYXksIGJlIGNvbGxlY3RlZCBpbnRvIGNsYXNzZXMgb3Igc3RydWN0dXJl cyB0aGF0IGNhbiBiZSBwYXNzZWQgYXJvdW5kCi0gICBhcyBuZWVkZWQ7IG5vdCBvbmx5IGZvciBw dXJpdHkncyBzYWtlLCBidXQgYWxzbyB0byBhbGxvdyBmb3IgbXVsdGlwbGUKLSAgIHNpbXVsdGFu ZW91cyBjb21tdW5pY2F0aW9uIHNlc3Npb25zIGFuZCBvciB1c2VyIGludGVyZmFjZXMuIE91ciBs aXN0IG9mCi0gICB0aGluZ3MgdG8gZG8gaXMgZW5kbGVzcywgYW5kIHJlb3JnYW5pemluZyB0aGUg c291cmNlIGlzIGFsbW9zdCBhbHdheXMKLSAgIGF0IHRoZSBib3R0b20uCi0KLSAgIFRoZSBja3V1 cyouYyBtb2R1bGVzIChsaWtlIG1hbnkgb2YgdGhlIGNrYyouYyBtb2R1bGVzKSBkZXBlbmQgb24g dGhlCi0gICBleGlzdGVuY2Ugb2YgQyBsaWJyYXJ5IGZlYXR1cmVzIGxpa2UgZm9wZW4sIGZnZXRz LCBmZW9mLCAoZilwcmludGYsCi0gICBhcmd2L2FyZ2MsIGV0Yy4gT3RoZXIgZnVuY3Rpb25zIHRo YXQgYXJlIGxpa2VseSB0byB2YXJ5IGFtb25nIG9wZXJhdGluZwotICAgc3lzdGVtcyAtLSBsaWtl IHNldHRpbmcgdGVybWluYWwgbW9kZXMgb3IgaW50ZXJydXB0cyAtLSBhcmUgaW52b2tlZCB2aWEK LSAgIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBbMTE1XUdyb3Vw IEUKLSAgIHBsYXRmb3JtLWRlcGVuZGVudCBtb2R1bGVzLCBjaz9bZnRdaW8uYy4gVGhlIGNvbW1h bmQgbGluZSBwYXJzZXIKLSAgIHByb2Nlc3NlcyBhbnkgYXJndW1lbnRzIGZvdW5kIG9uIHRoZSBj b21tYW5kIGxpbmUsIGFzIHBhc3NlZCB0byBtYWluKCkKLSAgIHZpYSBhcmd2L2FyZ2MuIFRoZSBp bnRlcmFjdGl2ZSBwYXJzZXIgdXNlcyB0aGUgZmFjaWxpdGllcyBvZiB0aGUgY21kCi0gICBwYWNr YWdlIChkZXZlbG9wZWQgZm9yIHRoaXMgcHJvZ3JhbSwgYnV0LCBpbiB0aGVvcnksIHVzYWJsZSBi eSBhbnkKLSAgIHByb2dyYW0pLiBBbnkgY29tbWFuZCBwYXJzZXIgbWF5IGJlIHN1YnN0aXR1dGVk IGZvciB0aGlzIG9uZS4gVGhlIG9ubHkKLSAgIHJlcXVpcmVtZW50cyBmb3IgdGhlIEtlcm1pdCBj b21tYW5kIHBhcnNlciBhcmUgdGhlc2U6Ci0KLSAgICAxLiBTZXQgcGFyYW1ldGVycyB2aWEgZ2xv YmFsIHZhcmlhYmxlcyBsaWtlIGR1cGxleCwgc3BlZWQsIHR0bmFtZSwKLSAgICAgICBldGMuIFNl ZSBbMTE2XWNrY21haS5jIGZvciB0aGUgZGVjbGFyYXRpb25zIGFuZCBkZXNjcmlwdGlvbnMgb2YK LSAgICAgICB0aGVzZSB2YXJpYWJsZXMuCi0gICAgMi4gSWYgYSBjb21tYW5kIGNhbiBiZSBleGVj dXRlZCB3aXRob3V0IHRoZSB1c2Ugb2YgS2VybWl0IHByb3RvY29sLAotICAgICAgIHRoZW4gZXhl Y3V0ZSB0aGUgY29tbWFuZCBkaXJlY3RseSBhbmQgc2V0IHRoZSBzc3RhdGUgKHN0YXJ0IHN0YXRl KQotICAgICAgIHZhcmlhYmxlIHRvIDAuIEV4YW1wbGVzIGluY2x1ZGUgU0VUIGNvbW1hbmRzLCBs b2NhbCBkaXJlY3RvcnkKLSAgICAgICBsaXN0aW5ncywgdGhlIENPTk5FQ1QgY29tbWFuZC4KLSAg ICAzLiBJZiBhIGNvbW1hbmQgcmVxdWlyZXMgdGhlIEtlcm1pdCBwcm90b2NvbCwgc2V0IHRoZSBm b2xsb3dpbmcKLSAgICAgICB2YXJpYWJsZXM6Ci0gc3N0YXRlICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJpbmcgZGF0YQotICAgJ3gnIChlbnRlciBzZXJ2ZXIgbW9kZSkgICAgICAgICAg ICAobm9uZSkKLSAgICdyJyAoc2VuZCBhICdnZXQnIGNvbW1hbmQpICAgICAgICAgY21hcmcsIGNt YXJnMgotICAgJ3YnIChlbnRlciByZWNlaXZlIG1vZGUpICAgICAgICAgICBjbWFyZzIKLSAgICdn JyAoc2VuZCBhIGdlbmVyaWMgY29tbWFuZCkgICAgICAgY21hcmcKLSAgICdzJyAoc2VuZCBmaWxl cykgICAgICAgICAgICAgICAgICAgbmZpbHMsIGNtYXJnICYgY21hcmcyIE9SIGNtbGlzdAotICAg J2MnIChzZW5kIGEgcmVtb3RlIGhvc3QgY29tbWFuZCkgICBjbWFyZwotCi0KLSAgICAgICBjbWxp c3QgaXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyaW5ncy4KLSAgICAgICBjbWFyZywgY21h cmcyIGFyZSBwb2ludGVycyB0byBzdHJpbmdzLgotICAgICAgIG5maWxzIGlzIGFuIGludGVnZXIg KGhtbW0sIHByb2JhYmx5IHNob3VsZCBiZSBhbiB1bnNpZ25lZCBsb25nKS4KLQotICAgICAgICBj bWFyZyBjYW4gYmU6Ci0gICAgICAgICAgICAgICAgQSBmaWxlbmFtZSBzdHJpbmcgKHBvc3NpYmx5 IHdpbGQpLCBvcjoKLSAgICAgICAgICAgICAgICBhIHBvaW50ZXIgdG8gYSBwcmVmYWJyaWNhdGVk IGdlbmVyaWMgY29tbWFuZCBzdHJpbmcsIG9yOgotICAgICAgICAgICAgICAgIGEgcG9pbnRlciB0 byBhIGhvc3QgY29tbWFuZCBzdHJpbmcuCi0KLSAgICAgICAgY21hcmcyIGlzOgotICAgICAgICAg ICAgICAgIFRoZSBuYW1lIHRvIHNlbmQgYSBzaW5nbGUgZmlsZSB1bmRlciwgb3I6Ci0gICAgICAg ICAgICAgICAgdGhlIG5hbWUgdW5kZXIgd2hpY2ggdG8gc3RvcmUgYW4gaW5jb21pbmcgZmlsZTsg bXVzdCBub3QKLSAgICAgICAgICAgICAgICBiZSB3aWxkLgotICAgICAgICAgICAgICAgIElmIGl0 J3MgdGhlIG5hbWUgZm9yIHJlY2VpdmluZywgYSBudWxsIHZhbHVlIG1lYW5zIHRvCi0gICAgICAg ICAgICAgICAgc3RvcmUgdGhlIGZpbGUgdW5kZXIgdGhlIG5hbWUgaXQgYXJyaXZlcyB3aXRoLgot Ci0gICAgICAgIGNtbGlzdCBpczoKLSAgICAgICAgICAgICAgICBBIGxpc3Qgb2Ygbm9ud2lsZCBm aWxlbmFtZXMsIHN1Y2ggYXMgcGFzc2VkIHZpYSBhcmd2LgotCi0gICAgICAgIG5maWxzIGlzIGFu IGludGVnZXIsIGludGVycHJldGVkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgLTE6IGZp bGVzcGVjIChwb3NzaWJseSB3aWxkKSBpbiBjbWFyZywgbXVzdCBiZSBleHBhbmRlZAotICAgICAg ICAgICAgICAgIGludGVybmFsbHkuCi0gICAgICAgICAgICAgICAgMDogc2VuZCBmcm9tIHN0ZGlu IChzdGFuZGFyZCBpbnB1dCkuCi0gICAgICAgICAgICAgICAgPjA6IG51bWJlciBvZiBmaWxlcyB0 byBzZW5kLCBmcm9tIGNtbGlzdC4KLQotICAgVGhlIHNjcmVlbigpIGZ1bmN0aW9uIGlzIHVzZWQg dG8gdXBkYXRlIHRoZSBzY3JlZW4gZHVyaW5nIGZpbGUKLSAgIHRyYW5zZmVyLiBUaGUgdGxvZygp IGZ1bmN0aW9uIHdyaXRlcyB0byBhIHRyYW5zYWN0aW9uIGxvZyAoaWYgVExPRyBpcwotICAgZGVm aW5lZCkuIFRoZSBkZWJ1ZygpIGZ1bmN0aW9uIHdyaXRlcyB0byBhIGRlYnVnZ2luZyBsb2cgKGlm IERFQlVHIGlzCi0gICBkZWZpbmVkKS4gVGhlIGludG1zZygpIGFuZCBjaGtpbnQoKSBmdW5jdGlv bnMgcHJvdmlkZSB0aGUgdXNlciBpL28gZm9yCi0gICBpbnRlcnJ1cHRpbmcgZmlsZSB0cmFuc2Zl cnMuCi0KLSAgIFsgWzExN11Db250ZW50cyBdIFsgWzExOF1DLUtlcm1pdCBdIFsgWzExOV1LZXJt aXQgSG9tZSBdCi0KLTQuRS4gR3JvdXAgRTogUGxhdGZvcm0tRGVwZW5kZW50IEkvTwotCi0gICBQ bGF0Zm9ybS1kZXBlbmRlbnQgZnVuY3Rpb24gZGVmaW5pdGlvbnMuIEFsbCB0aGUgS2VybWl0IG1v ZHVsZXMsCi0gICBpbmNsdWRpbmcgdGhlIGNvbW1hbmQgcGFja2FnZSwgY2FsbCB1cG9uIHRoZXNl IGZ1bmN0aW9ucywgd2hpY2ggYXJlCi0gICBkZXNpZ25lZCB0byBwcm92aWRlIHN5c3RlbS1pbmRl cGVuZGVudCBwcmltaXRpdmVzIGZvciBjb250cm9sbGluZyBhbmQKLSAgIG1hbmlwdWxhdGluZyBk ZXZpY2VzIGFuZCBmaWxlcy4gRm9yIFVuaXgsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZAot ICAgaW4gdGhlIGZpbGVzIFsxMjBdY2t1ZmlvLmMgKGZpbGVzKSwgWzEyMV1ja3V0aW8uYyAoY29t bXVuaWNhdGlvbnMpLCBhbmQKLSAgIFsxMjJdY2t1c2lnLmMgKHNpZ25hbCBoYW5kbGluZykuCi0K LSAgIEZvciBWTVMsIHRoZSBmaWxlcyBhcmUgWzEyM11ja3ZmaW8uYywgY2t2dGlvLmMsIGFuZCBb MTI0XWNrdXNpZy5jIChWTVMKLSAgIGNhbiB1c2UgdGhlIHNhbWUgc2lnbmFsIGhhbmRsaW5nIHJv dXRpbmVzIGFzIFVuaXgpLiBJdCBkb2Vzbid0IHJlYWxseQotICAgbWF0dGVyIHdoYXQgdGhlIGZp bGVzIGFyZSBjYWxsZWQsIGV4Y2VwdCBmb3IgS2VybWl0IGRpc3RyaWJ1dGlvbgotICAgcHVycG9z ZXMgKGdyb3VwaW5nIHJlbGF0ZWQgZmlsZXMgdG9nZXRoZXIgYWxwaGFiZXRpY2FsbHkpLCBvbmx5 IHRoYXQKLSAgIGVhY2ggZnVuY3Rpb24gaXMgcHJvdmlkZWQgd2l0aCB0aGUgbmFtZSBpbmRpY2F0 ZWQsIG9ic2VydmVzIHRoZSBzYW1lCi0gICBjYWxsaW5nIGFuZCByZXR1cm4gY29udmVudGlvbnMs IGFuZCBoYXMgdGhlIHNhbWUgdHlwZS4KLQotICAgVGhlIEdyb3VwIEUgbW9kdWxlcyBjb250YWlu IGJvdGggZnVuY3Rpb25zIGFuZCBnbG9iYWwgdmFyaWFibGVzIHRoYXQKLSAgIGFyZSBhY2Nlc3Nl ZCBieSBtb2R1bGVzIGluIHRoZSBvdGhlciBncm91cHMuIFRoZXNlIGFyZSBub3cgZGVzY3JpYmVk LgotCi0gICAoQnkgdGhlIHdheSwgSSBnb3QgdGhpcyBsaXN0IGJ5IGxpbmtpbmcgYWxsIHRoZSBD LUtlcm1pdCBtb2R1bGVzCi0gICB0b2dldGhlciBleGNlcHQgY2t1dGlvIGFuZCBja3VmaW8uIFRo ZXNlIGFyZSB0aGUgc3ltYm9scyB0aGF0IGxkCi0gICByZXBvcnRlZCBhcyB1bmRlZmluZWQuIEJ1 dCB0aGF0IHdhcyBhIGxvbmcgdGltZSBhZ28sIHByb2JhYmx5IGNpcmNhCi0gICBWZXJzaW9uIDYu KQotCi00LkUuMS4gR2xvYmFsIFZhcmlhYmxlcwotCi0gICBjaGFyICpERUxDTUQ7Ci0gICAgICAg ICAgUG9pbnRlciB0byBzdHJpbmcgY29udGFpbmluZyBjb21tYW5kIGZvciBkZWxldGluZyBmaWxl cy4KLSAgICAgICAgICBFeGFtcGxlOiBjaGFyICpERUxDTUQgPSAicm0gLWYgIjsgKFVOSVgpCi0g ICAgICAgICAgRXhhbXBsZTogY2hhciAqREVMQ01EID0gImRlbGV0ZSAiOyAoVk1TKQotICAgICAg ICAgIE5vdGUgdHJhaWxpbmcgc3BhY2UuIEZpbGVuYW1lIGlzIGNvbmNhdGVuYXRlZCB0byBlbmQg b2YgdGhpcwotICAgICAgICAgIHN0cmluZy4gTk9URTogREVMQ01EIGlzIHVzZWQgb25seSBpbiB2 ZXJzaW9ucyB0aGF0IGRvIG5vdAotICAgICAgICAgIHByb3ZpZGUgdGhlaXIgb3duIGJ1aWx0LWlu IERFTEVURSBjb21tYW5kLgotCi0gICBjaGFyICpESVJDTUQ7Ci0gICAgICAgICAgUG9pbnRlciB0 byBzdHJpbmcgY29udGFpbmluZyBjb21tYW5kIGZvciBsaXN0aW5nIGZpbGVzIHdoZW4gYQotICAg ICAgICAgIGZpbGVzcGVjIGlzIGdpdmVuLgotICAgICAgICAgIEV4YW1wbGU6IGNoYXIgKkRJUkNN RCA9ICIvYmluL2xzIC1sICI7IChVTklYKQotICAgICAgICAgIEV4YW1wbGU6IGNoYXIgKkRJUkNN RCA9ICJkaXJlY3RvcnkgIjsgKFZNUykKLSAgICAgICAgICBOb3RlIHRyYWlsaW5nIHNwYWNlLiBG aWxlbmFtZSBpcyBjb25jYXRlbmF0ZWQgdG8gZW5kIG9mIHRoaXMKLSAgICAgICAgICBzdHJpbmcu IE5PVEU6IERJUkNNRCBpcyB1c2VkIG9ubHkgaW4gdmVyc2lvbnMgdGhhdCBkbyBub3QKLSAgICAg ICAgICBwcm92aWRlIHRoZWlyIG93biBidWlsdC1pbiBESVJFQ1RPUlkgY29tbWFuZC4KLQotICAg Y2hhciAqRElSQ00yOwotICAgICAgICAgIFBvaW50ZXIgdG8gc3RyaW5nIGNvbnRhaW5pbmcgY29t bWFuZCBmb3IgbGlzdGluZyBmaWxlcyB3aGVuIGEKLSAgICAgICAgICBmaWxlc3BlYyBpcyBub3Qg Z2l2ZW4uIChjdXJyZW50bHkgbm90IHVzZWQsIGhhbmRsZWQgaW4gYW5vdGhlcgotICAgICAgICAg IHdheS4pCi0gICAgICAgICAgRXhhbXBsZTogY2hhciAqRElSQ01EMiA9ICIvYmluL2xzIC1sZCAq IjsKLSAgICAgICAgICBOT1RFOiBESVJDTUQyIGlzIHVzZWQgb25seSBpbiB2ZXJzaW9ucyB0aGF0 IGRvIG5vdCBwcm92aWRlIHRoZWlyCi0gICAgICAgICAgb3duIGJ1aWx0LWluIERJUkVDVE9SWSBj b21tYW5kLgotCi0gICBjaGFyICpQV0RDTUQ7Ci0gICAgICAgICAgUG9pbnRlciB0byBzdHJpbmcg Y29udGFpbmluZyBjb21tYW5kIHRvIGRpc3BsYXkgY3VycmVudAotICAgICAgICAgIGRpcmVjdG9y eS4KLSAgICAgICAgICBFeGFtcGxlOiBjaGFyICpQV0RDTUQgPSAicHdkICI7Ci0gICAgICAgICAg Tk9URTogUFdEQ01EIGlzIHVzZWQgb25seSBpbiB2ZXJzaW9ucyB0aGF0IGRvIG5vdCBwcm92aWRl IHRoZWlyCi0gICAgICAgICAgb3duIGJ1aWx0LWluIFBXRCBjb21tYW5kLgotCi0gICBjaGFyICpT UEFDTUQ7Ci0gICAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHRvIGRpc3BsYXkgZnJlZSBkaXNr IHNwYWNlIGluIGN1cnJlbnQKLSAgICAgICAgICBkZXZpY2UvZGlyZWN0b3J5LgotICAgICAgICAg IEV4YW1wbGU6IGNoYXIgKlNQQUNNRCA9ICJkZiAuIjsKLSAgICAgICAgICBOT1RFOiBTUEFDTUQg aXMgdXNlZCBvbmx5IGluIHZlcnNpb25zIHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlaXIKLSAgICAg ICAgICBvd24gYnVpbHQtaW4gU1BBQ0UgY29tbWFuZC4KLQotICAgY2hhciAqU1BBQ00yOwotICAg ICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCB0byBkaXNwbGF5IGZyZWUgZGlzayBzcGFjZSBpbiBh bm90aGVyCi0gICAgICAgICAgZGV2aWNlL2RpcmVjdG9yeS4KLSAgICAgICAgICBFeGFtcGxlOiBj aGFyICpTUEFDTTIgPSAiZGYgIjsKLSAgICAgICAgICBOb3RlIHRyYWlsaW5nIHNwYWNlLiBEZXZp Y2Ugb3IgZGlyZWN0b3J5IG5hbWUgaXMgYWRkZWQgdG8gdGhpcwotICAgICAgICAgIHN0cmluZy4g Tk9URTogU1BBQ01EMiBpcyB1c2VkIG9ubHkgaW4gdmVyc2lvbnMgdGhhdCBkbyBub3QKLSAgICAg ICAgICBwcm92aWRlIHRoZWlyIG93biBidWlsdC1pbiBTUEFDRSBjb21tYW5kLgotCi0gICBjaGFy ICpUWVBDTUQ7Ci0gICAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIGZvciBkaXNwbGF5aW5nIHRo ZSBjb250ZW50cyBvZiBhIGZpbGUuCi0gICAgICAgICAgRXhhbXBsZTogY2hhciAqVFlQQ01EID0g ImNhdCAiOwotICAgICAgICAgIE5vdGUgdHJhaWxpbmcgc3BhY2UuIERldmljZSBvciBkaXJlY3Rv cnkgbmFtZSBpcyBhZGRlZCB0byB0aGlzCi0gICAgICAgICAgc3RyaW5nLiBOT1RFOiBUWVBDTUQg aXMgdXNlZCBvbmx5IGluIHZlcnNpb25zIHRoYXQgZG8gbm90Ci0gICAgICAgICAgcHJvdmlkZSB0 aGVpciBvd24gYnVpbHQtaW4gVFlQRSBjb21tYW5kLgotCi0gICBjaGFyICpXSE9DTUQ7Ci0gICAg ICAgICAgUG9pbnRlciB0byBjb21tYW5kIGZvciBkaXNwbGF5aW5nIGxvZ2dlZC1pbiB1c2Vycy4K LSAgICAgICAgICBFeGFtcGxlOiBjaGFyICpXSE9DTUQgPSAid2hvICI7Ci0gICAgICAgICAgTm90 ZSB0cmFpbGluZyBzcGFjZS4gU3BlY2lmaWMgdXNlciBuYW1lIG1heSBiZSBhZGRlZCB0byB0aGlz Ci0gICAgICAgICAgc3RyaW5nLgotCi0gICBpbnQgYmFja2dyZCA9IDA7Ci0gICAgICAgICAgRmxh ZyBmb3Igd2hldGhlciBwcm9ncmFtIGlzIHJ1bm5pbmcgaW4gZm9yZWdyb3VuZCAoMCkgb3IKLSAg ICAgICAgICBiYWNrZ3JvdW5kIChub256ZXJvKS4gQmFja2dyb3VuZCBvcGVyYXRpb24gaW1wbGll cyB0aGF0IHNjcmVlbgotICAgICAgICAgIG91dHB1dCBzaG91bGQgbm90IGJlIGRvbmUgYW5kIHRo YXQgYWxsIGVycm9ycyBzaG91bGQgYmUgZmF0YWwuCi0KLSAgIGludCBja3hlY2g7Ci0gICAgICAg ICAgRmxhZyBmb3Igd2hvIGlzIHRvIGVjaG8gY29uc29sZSB0eXBlaW46Ci0gICAgICAgICAgMTog VGhlIHByb2dyYW0gKHN5c3RlbSBpcyBub3QgZWNob2luZykuCi0gICAgICAgICAgMDogVGhlIE9T LCBmcm9udCBlbmQsIHRlcm1pbmFsLCBldGMgKG5vdCB0aGlzIHByb2dyYW0pLgotCi0gICBjaGFy ICpja3hzeXM7Ci0gICAgICAgICAgUG9pbnRlciB0byBzdHJpbmcgdGhhdCBuYW1lcyB0aGUgY29t cHV0ZXIgYW5kIG9wZXJhdGluZyBzeXN0ZW0uCi0gICAgICAgICAgRXhhbXBsZTogY2hhciAqY2t4 c3lzID0gIiBOZVhUIE1hY2ggMS4wIjsKLSAgICAgICAgICBUZWxscyB3aGF0IGNvbXB1dGVyIHN5 c3RlbSBja3h2IGFwcGxpZXMgdG8uIEluIFVOSVggS2VybWl0LCB0aGlzCi0gICAgICAgICAgdmFy aWFibGUgaXMgYWxzbyB1c2VkIHRvIHByaW50IHRoZSBwcm9ncmFtIGhlcmFsZCwgYW5kIGluIHRo ZQotICAgICAgICAgIFNIT1cgVkVSU0lPTiBjb21tYW5kLgotCi0gICBjaGFyICpja3h2OwotICAg ICAgICAgIFBvaW50ZXIgdG8gdmVyc2lvbi9lZGl0IGluZm8gb2YgY2s/dGlvLmMgbW9kdWxlLgot ICAgICAgICAgIEV4YW1wbGU6IGNoYXIgKmNreHYgPSAiVU5JWCBDb21tdW5pY2F0aW9ucyBTdXBw b3J0LCA2LjAuMTY5LCA2Ci0gICAgICAgICAgU2VwIDk2IjsKLSAgICAgICAgICBVc2VkIGJ5IFNI T1cgVkVSU0lPTiBjb21tYW5kLgotCi0gICBjaGFyICpja3pzeXM7Ci0gICAgICAgICAgTGlrZSBj a3hzeXMsIGJ1dCBicmllZmVyLgotICAgICAgICAgIEV4YW1wbGU6IGNoYXIgKmNrenN5cyA9ICIg NC4zIEJTRCI7Ci0gICAgICAgICAgVGVsbHMgd2hhdCBwbGF0Zm9ybSBja3p2IGFwcGxpZXMgdG8u IFVzZWQgYnkgdGhlIFNIT1cgVkVSU0lPTgotICAgICAgICAgIGNvbW1hbmQuCi0KLSAgIGNoYXIg KmNrenY7Ci0gICAgICAgICAgUG9pbnRlciB0byB2ZXJzaW9uL2VkaXQgaW5mbyBvZiBjaz9maW8u YyBtb2R1bGUuCi0gICAgICAgICAgRXhhbXBsZTogY2hhciAqY2t6diA9ICJVTklYIEZpbGUgc3Vw cG9ydCwgNi4wLjExMywgNiBTZXAgOTYiOwotICAgICAgICAgIFVzZWQgYnkgU0hPVyBWRVJTSU9O IGNvbW1hbmQuCi0KLSAgIGludCBkZmZsb3c7Ci0gICAgICAgICAgRGVmYXVsdCBmbG93IGNvbnRy b2wuIDAgPSBub25lLCAxID0gWG9uL1hvZmYsIC4uLiAoc2VlIEZMT194eHgKLSAgICAgICAgICBz eW1ib2xzIGluIGNrY2RlYi5oKQotICAgICAgICAgIFNldCBieSBHcm91cCBFIG1vZHVsZS4gVXNl ZCBieSBbMTI1XWNrY21haS5jIHRvIGluaXRpYWxpemUgZmxvdwotICAgICAgICAgIGNvbnRyb2wg dmFyaWFibGUuCi0KLSAgIGludCBkZmxvYzsKLSAgICAgICAgICBEZWZhdWx0IGxvY2F0aW9uLiAw ID0gcmVtb3RlLCAxID0gbG9jYWwuIFNldCBieSBHcm91cCBFIG1vZHVsZS4KLSAgICAgICAgICBV c2VkIGJ5IGNrY21haS5jIHRvIGluaXRpYWxpemUgbG9jYWwgdmFyaWFibGUuIFVzZWQgaW4gdmFy aW91cwotICAgICAgICAgIHBsYWNlcyBpbiB0aGUgdXNlciBpbnRlcmZhY2UuCi0KLSAgIGludCBk ZnBydHk7Ci0gICAgICAgICAgRGVmYXVsdCBwYXJpdHkuIDAgPSBub25lLCAnZScgPSBldmVuLCAn bycgPSBvZGQsICdtJyA9IG1hcmssICdzJwotICAgICAgICAgID0gc3BhY2UuIFNldCBieSBHcm91 cCBFIG1vZHVsZS4gVXNlZCBieSBja2NtYWkuYyB0byBpbml0aWFsaXplCi0gICAgICAgICAgcGFy aXR5IHZhcmlhYmxlLgotCi0gICBjaGFyICpkZnR0eTsKLSAgICAgICAgICBEZWZhdWx0IGNvbW11 bmljYXRpb24gZGV2aWNlLiBTZXQgYnkgR3JvdXAgRSBtb2R1bGUuIFVzZWQgaW4KLSAgICAgICAg ICBtYW55IHBsYWNlcy4gVGhpcyB2YXJpYWJsZSBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdGhlIHN5 bWJvbAotICAgICAgICAgIENUVE5BTSwgd2hpY2ggaXMgZGVmaW5lZCBpbiBja2NkZWIuaCwgZS5n LiBhcyAiL2Rldi90dHkiIGZvcgotICAgICAgICAgIFVOSVgsICJUVDoiIGZvciBWTVMsIGV0Yy4g RXhhbXBsZTogY2hhciAqZGZ0dHkgPSBDVFROQU07Ci0KLSAgIGNoYXIgKm10Y2hzW107Ci0gICAg ICAgICAgQXJyYXkgb2Ygc3RyaW5nIHBvaW50ZXJzIHRvIGZpbGVuYW1lcyB0aGF0IG1hdGNoZWQg dGhlIG1vc3QKLSAgICAgICAgICByZWNlbnQgd2lsZGNhcmQgbWF0Y2gsIGkuZS4gdGhlIG1vc3Qg cmVjZW50IGNhbGwgdG8genhwYW5kKCkuCi0gICAgICAgICAgVXNlZCAoYXQgbGVhc3QpIGJ5IGNv bW1hbmQgcGFyc2luZyBwYWNrYWdlIGZvciBwYXJ0aWFsIGZpbGVuYW1lCi0gICAgICAgICAgY29t cGxldGlvbi4KLQotICAgaW50IHRpbGRlX2V4cGFuZDsKLSAgICAgICAgICBGbGFnIGZvciB3aGV0 aGVyIHRvIGF0dGVtcHQgdG8gZXhwYW5kIGxlYWRpbmcgdGlsZGVzIGluCi0gICAgICAgICAgZGly ZWN0b3J5IG5hbWVzICh1c2VkIGluIFVOSVggb25seSwgYW5kIHRoZW4gb25seSB3aGVuIHRoZQot ICAgICAgICAgIHN5bWJvbCBEVElMREUgaXMgZGVmaW5lZC4KLQotICAgaW50IHR0bnByb3RvOwot ICAgICAgICAgIFRoZSBwcm90b2NvbCBiZWluZyB1c2VkIHRvIGNvbW11bmljYXRlIG92ZXIgYSBu ZXR3b3JrIGRldmljZS4KLSAgICAgICAgICBWYWx1ZXMgYXJlIGRlZmluZWQgaW4gY2tjbmV0Lmgu IEV4YW1wbGU6IE5QX1RFTE5FVCBpcyBuZXR3b3JrCi0gICAgICAgICAgcHJvdG9jb2wgInRlbG5l dCIuCi0KLSAgIGludCBtYXhuYW07Ci0gICAgICAgICAgVGhlIG1heGltdW0gbGVuZ3RoIGZvciBh IGZpbGVuYW1lLCBleGNsdXNpdmUgb2YgYW55IGRldmljZSBvcgotICAgICAgICAgIGRpcmVjdG9y eSBpbmZvcm1hdGlvbiwgaW4gdGhlIGZvcm1hdCBvZiB0aGUgaG9zdCBvcGVyYXRpbmcKLSAgICAg ICAgICBzeXN0ZW0uCi0KLSAgIGludCBtYXhwYXRoOwotICAgICAgICAgIFRoZSBtYXhpbXVtIGxl bmd0aCBmb3IgYSBmdWxseSBzcGVjaWZpZWQgZmlsZW5hbWUsIGluY2x1ZGluZwotICAgICAgICAg IGRldmljZSBkZXNpZ25hdG9yLCBkaXJlY3RvcnkgbmFtZSwgbmV0d29yayBub2RlIG5hbWUsIGV0 YywgaW4KLSAgICAgICAgICB0aGUgZm9ybWF0IG9mIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0s IGFuZCBpbmNsdWRpbmcgYWxsCi0gICAgICAgICAgcHVuY3R1YXRpb24uCi0KLSAgIGludCB0dHlm ZDsKLSAgICAgICAgICBGaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGNvbW11bmljYXRpb24gZGV2aWNl LiAtMSBpZiB0aGVyZSBpcyBubwotICAgICAgICAgIG9wZW4gb3IgdXNhYmxlIGNvbm5lY3Rpb24s IGluY2x1ZGluZyB3aGVuIEMtS2VybWl0IGlzIGluIHJlbW90ZQotICAgICAgICAgIG1vZGUuIFNp bmNlIHRoaXMgaXMgbm90IGltcGxlbWVudGVkIGV2ZXJ5d2hlcmUsIHJlZmVyZW5jZXMgdG8gaXQK LSAgICAgICAgICBhcmUgaW4gI2lmZGVmIENLX1RUWUZELi4jZW5kaWYuCi0KLSAgIFsgWzEyNl1D b250ZW50cyBdIFsgWzEyN11DLUtlcm1pdCBdIFsgWzEyOF1LZXJtaXQgSG9tZSBdCi0KLTQuRS4y LiBGdW5jdGlvbnMKLQotICAgVGhlc2UgYXJlIGRpdmlkZWQgaW50byB0aHJlZSBjYXRlZ29yaWVz OiBmaWxlLXJlbGF0ZWQgZnVuY3Rpb25zIChCLjEpLAotICAgY29tbXVuaWNhdGlvbiBmdW5jdGlv bnMgKEIuMiksIGFuZCBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucyAoQi4zKS4KLQotNC5FLjIuMS4g RmlsZS1SZWxhdGVkIEZ1bmN0aW9ucwotCi0gICBJbiBtb3N0IGltcGxlbWVudGF0aW9ucywgdGhl c2UgYXJlIGNvbGxlY3RlZCB0b2dldGhlciBpbnRvIGEgbW9kdWxlCi0gICBjYWxsZWQgY2s/Zmlv LmMsIHdoZXJlID8gPSAidSIgKFsxMjldY2t1dGlvLmMgZm9yIFVuaXgpLCAidiIKLSAgIChbMTMw XWNrdnRpby5jIGZvciBWTVMpLCBbMTMxXWV0Yy4gVG8gYmUgdG90YWxseSBwbGF0Zm9ybS1pbmRl cGVuZGVudCwKLSAgIEMtS2VybWl0IG1haW50YWlucyBpdHMgb3duIGZpbGUgbnVtYmVycywgYW5k IHByb3ZpZGVzIHRoZSBmdW5jdGlvbnMKLSAgIGRlc2NyaWJlZCBpbiB0aGlzIHNlY3Rpb24gdG8g ZGVhbCB3aXRoIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlbS4KLSAgIFRoZSBmaWxlIG51 bWJlcnMgYXJlIHJlZmVycmVkIHRvIHN5bWJvbGljYWxseSwgYW5kIGFyZSBkZWZpbmVkIGFzCi0g ICBmb2xsb3dzIGluIGNrY2tlci5oOgotCi0gICNkZWZpbmUgWkNURVJNICAgICAgMCAgICAgICAg ICAgLyogQ29uc29sZSB0ZXJtaW5hbCAqLwotICAjZGVmaW5lIFpTVERJTyAgICAgIDEgICAgICAg ICAgIC8qIFN0YW5kYXJkIGlucHV0L291dHB1dCAqLwotICAjZGVmaW5lIFpJRklMRSAgICAgIDIg ICAgICAgICAgIC8qIEN1cnJlbnQgaW5wdXQgZmlsZSBmb3IgU0VORCBjb21tYW5kICovCi0gICNk ZWZpbmUgWk9GSUxFICAgICAgMyAgICAgICAgICAgLyogQ3VycmVudCBvdXRwdXQgZmlsZSBmb3Ig UkVDRUlWRSBjb21tYW5kICovCi0gICNkZWZpbmUgWkRGSUxFICAgICAgNCAgICAgICAgICAgLyog Q3VycmVudCBkZWJ1Z2dpbmcgbG9nIGZpbGUgKi8KLSAgI2RlZmluZSBaVEZJTEUgICAgICA1ICAg ICAgICAgICAvKiBDdXJyZW50IHRyYW5zYWN0aW9uIGxvZyBmaWxlICovCi0gICNkZWZpbmUgWlBG SUxFICAgICAgNiAgICAgICAgICAgLyogQ3VycmVudCBwYWNrZXQgbG9nIGZpbGUgKi8KLSAgI2Rl ZmluZSBaU0ZJTEUgICAgICA3ICAgICAgICAgICAvKiBDdXJyZW50IHNlc3Npb24gbG9nIGZpbGUg Ki8KLSAgI2RlZmluZSBaU1lTRk4gICAgICA4ICAgICAgICAgICAvKiBJbnB1dCBmcm9tIGEgc3lz dGVtIGZ1bmN0aW9uIChwaXBlKSAqLwotICAjZGVmaW5lIFpSRklMRSAgICAgIDkgICAgICAgICAg IC8qIExvY2FsIGZpbGUgZm9yIFJFQUQgY29tbWFuZCAqLyAgKE5FVykKLSAgI2RlZmluZSBaV0ZJ TEUgICAgIDEwICAgICAgICAgICAvKiBMb2NhbCBmaWxlIGZvciBXUklURSBjb21tYW5kICovIChO RVcpCi0gICNkZWZpbmUgWk1GSUxFICAgICAxMSAgICAgICAgICAgLyogQXV4aWxpYXJ5IGZpbGUg Zm9yIGludGVybmFsIHVzZSAqLyAoTkVXKQotICAjZGVmaW5lIFpORklMUyAgICAgMTIgICAgICAg ICAgIC8qIEhvdyBtYW55IGRlZmluZWQgZmlsZSBudW1iZXJzICovCi0KLSAgIEluIHRoZSBkZXNj cmlwdGlvbnMgYmVsb3csIGZuIHJlZmVycyB0byBhIGZpbGVuYW1lLCBhbmQgbiByZWZlcnMgdG8g b25lCi0gICBvZiB0aGVzZSBmaWxlIG51bWJlcnMuIEZ1bmN0aW9ucyBhcmUgb2YgdHlwZSBpbnQg dW5sZXNzIG90aGVyd2lzZQotICAgbm90ZWQsIGFuZCBhcmUgbGlzdGVkIG1vc3RseSBhbHBoYWJl dGljYWxseS4KLQotICAgaW50Ci0gICAgICAgICAgY2hrZm4obikgaW50IG47Ci0gICAgICAgICAg Q2hlY2tzIHRoZSBmaWxlIG51bWJlciBuLiBSZXR1cm5zOgotICAgICAgICAgICAtMTogRmlsZSBu dW1iZXIgbiBpcyBvdXQgb2YgcmFuZ2UKLSAgICAgICAgICAgIDA6IG4gaXMgaW4gcmFuZ2UsIGJ1 dCBmaWxlIGlzIG5vdCBvcGVuCi0gICAgICAgICAgICAxOiBuIGluIHJhbmdlIGFuZCBmaWxlIGlz IG9wZW4KLQotICAgaW50Ci0gICAgICAgICAgaXN3aWxkKGZpbHNwZWMpIGNoYXIgKmZpbGVzcGVj OwotICAgICAgICAgIENoZWNrcyBpZiB0aGUgZmlsZSBzcGVjaWZpY2F0aW9uIGlzICJ3aWxkIiwg aS5lLiBjb250YWlucwotICAgICAgICAgIG1ldGFjaGFyYWN0ZXJzIG9yIG90aGVyIG5vdGF0aW9u cyBpbnRlbmRlZCB0byBtYXRjaCBtdWx0aXBsZQotICAgICAgICAgIGZpbGVuYW1lcy4gUmV0dXJu czoKLSAgICAgICAgICAgIDA6IG5vdCB3aWxkCi0gICAgICAgICAgICAxOiB3aWxkLgotCi0gICBp bnQKLSAgICAgICAgICBpc2RpcihzdHJpbmcpIGNoYXIgKnN0cmluZzsKLSAgICAgICAgICBDaGVj a3MgaWYgdGhlIHN0cmluZyBpcyB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBkaXJlY3RvcnkuIFRo ZQotICAgICAgICAgIGlkZWEgaXMgdG8gY2hlY2sgd2hldGhlciB0aGUgc3RyaW5nIGNhbiBiZSAi Y2QnZCIgdG8sIHNvIGluIHNvbWUKLSAgICAgICAgICBjYXNlcyAoZS5nLiBET1MpIGl0IG1pZ2h0 IGFsc28gaW5kaWNhdGUgYW55IGZpbGUgc3RydWN0dXJlZAotICAgICAgICAgIGRldmljZSwgc3Vj aCBhcyBhIGRpc2sgZHJpdmUgKGxpa2UgQTopLiBPdGhlciBub256ZXJvIHJldHVybnMKLSAgICAg ICAgICBpbmRpY2F0ZSBzeXN0ZW0tZGVwZW5kZW50IGluZm9ybWF0aW9uOyBlLmcuIGluIFZNUwot ICAgICAgICAgIGlzZGlyKCJbLkZPT10iKSByZXR1cm5zIDEgYnV0IGlzZGlyKCJGT08uRElSOzEi KSByZXR1cm5zIDIgdG8KLSAgICAgICAgICBpbmRpY2F0ZSB0aGUgZGlyZWN0b3J5LWZpbGUgbmFt ZSBpcyBpbiBhIGZvcm1hdCB0aGF0IG5lZWRzCi0gICAgICAgICAgY29udmVyc2lvbiBiZWZvcmUg aXQgY2FuIGJlIGNvbWJpbmVkIHdpdGggYSBmaWxlbmFtZS4gUmV0dXJuczoKLSAgICAgICAgICAg IDA6IG5vdCBhIGRpcmVjdG9yeSAoaW5jbHVkaW5nIGFueSBraW5kIG9mIGVycm9yKQotICAgICAg ICAgICAgMTogaXQgaXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5Ci0KLSAgIGNoYXIgKgotICAgICAg ICAgIHpmY2RhdChuYW1lKSBjaGFyICpuYW1lOwotICAgICAgICAgIFJldHVybnMgbW9kaWZpY2F0 aW9uIChwcmVmZXJhYmx5LCBvdGhlcndpc2UgY3JlYXRpb24pIGRhdGUvdGltZQotICAgICAgICAg IG9mIGZpbGUgd2hvc2UgbmFtZSBpcyBnaXZlbiBpbiB0aGUgYXJndW1lbnQgc3RyaW5nLiBSZXR1 cm4gdmFsdWUKLSAgICAgICAgICBpcyBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgb2YgdGhlIGZvcm0g eXl5eW1tZGQgaGg6bW06c3MsIGZvcgotICAgICAgICAgIGV4YW1wbGUgMTk5MzEyMzEgMjM6NTk6 NTksIHdoaWNoIHJlcHJlc2VudHMgdGhlIGxvY2FsIHRpbWUgKG5vCi0gICAgICAgICAgdGltZXpv bmUgb3IgZGF5bGlnaHQgc2F2aW5ncyB0aW1lIGZpbmFnbGluZyByZXF1aXJlZCkuIFJldHVybnMK LSAgICAgICAgICB0aGUgbnVsbCBzdHJpbmcgKCIiKSBvbiBmYWlsdXJlLiBUaGUgdGV4dCBwb2lu dGVkIHRvIGJ5IHRoZQotICAgICAgICAgIHN0cmluZyBwb2ludGVyIG1pZ2h0IGJlIGluIGEgc3Rh dGljIGJ1ZmZlciwgYW5kIHNvIHNob3VsZCBiZQotICAgICAgICAgIGNvcGllZCB0byBhIHNhZmUg cGxhY2UgYnkgdGhlIGNhbGxlciBiZWZvcmUgYW55IHN1YnNlcXVlbnQgY2FsbHMKLSAgICAgICAg ICB0byB0aGlzIGZ1bmN0aW9uLgotCi0gICBzdHJ1Y3QgemZuZnAgKgotICAgICAgICAgIHpmbnFm cChmbiwgYnVmbGVuLCBidWYpIGNoYXIgKiBmbjsgaW50IGJ1ZmxlbjsgY2hhciAqIGJ1ZjsKLSAg ICAgICAgICBHaXZlbiB0aGUgZmlsZW5hbWUgZm4sIHRoZSBjb3JyZXNwb25kaW5nIGZ1bGx5IHF1 YWxpZmllZCwKLSAgICAgICAgICBhYnNvbHV0ZSBmaWxlbmFtZSBpcyBwbGFjZWQgaW50byB0aGUg YnVmZmVyIGJ1Ziwgd2hvc2UgbGVuZ3RoIGlzCi0gICAgICAgICAgYnVmbGVuLiBPbiBmYWlsdXJl IHJldHVybnMgYSBOVUxMIHBvaW50ZXIuIE9uIHN1Y2Nlc3MgcmV0dXJucyBhCi0gICAgICAgICAg cG9pbnRlciB0byBhIHN0cnVjdCB6Zm5mcCBjb250YWluaW5nIHBvaW50ZXJzIHRvIHRoZSBmdWxs Ci0gICAgICAgICAgcGF0aG5hbWUgYW5kIHRvIGp1c3QgdGhlIGZpbGVuYW1lLCBhbmQgYW4gaW50 IGdpdmluZyB0aGUgbGVuZ3RoCi0gICAgICAgICAgb2YgdGhlIGZ1bGwgcGF0aG5hbWUuIEFsbCBy ZWZlcmVuY2VzIHRvIHRoaXMgZnVuY3Rpb24gaW4KLSAgICAgICAgICBtYWlubGluZSBjb2RlIG11 c3QgYmUgcHJvdGVjdGVkIGJ5ICNpZmRlZiBaRk5RRlAuLiNlbmRpZiwKLSAgICAgICAgICBiZWNh dXNlIGl0IGlzIG5vdCBwcmVzZW50IGluIGFsbCBvZiB0aGUgY2sqZmlvLmMgbW9kdWxlcy4gU28g aWYKLSAgICAgICAgICB5b3UgaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gaW4gYSB2ZXJzaW9uIHRo YXQgZGlkIG5vdCBoYXZlIGl0Ci0gICAgICAgICAgYmVmb3JlLCBiZSBzdXJlIHRvIGFkZCAjZGVm aW5lIFpGTlFGUCBpbiB0aGUgYXBwcm9wcmlhdGUgc3BvdCBpbgotICAgICAgICAgIGNrY2RlYi5o IG9yIGluIHRoZSBidWlsZC1wcm9jZWR1cmUgQ0ZMQUdTLgotCi0gICBpbnQKLSAgICAgICAgICB6 Y21wZm4oczEsczIpIGNoYXIgKiBzMiwgKiBzMjsKLSAgICAgICAgICBDb21wYXJlcyB0d28gZmls ZW5hbWVzIHRvIHNlZSBpZiB0aGV5IHJlZmVyIHRvIHRoZSBzYW1lLgotICAgICAgICAgIEludGVy bmFsbHksIHRoZSBhcmd1bWVudHMgY2FuIGJlIGNvbnZlcnRlZCB0byBmdWxseSBxdWFsaWZpZWQK LSAgICAgICAgICBwYXRobmFtZXMsIGUuZy4gd2l0aCB6Zm5xZnAoKSwgcmVhbHBhdGgoKSwgb3Ig c29tZXN1Y2guIEluIFVuaXgKLSAgICAgICAgICBvciBvdGhlciBzeXN0ZW1zIHdoZXJlIHN5bWJv bGljIGxpbmtzIGV4aXN0LCB0aGUgbGluayBzaG91bGQgYmUKLSAgICAgICAgICByZXNvbHZlZCBi ZWZvcmUgbWFraW5nIHRoZSBjb21wYXJpc29uIG9yIGxvb2tpbmcgYXQgdGhlIGlub2Rlcy4KLSAg ICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgMDogRmlsZXMgYXJlIG5vdCBpZGVudGljYWwu Ci0gICAgICAgICAgICAxOiBGaWxlcyBhcmUgaWRlbnRpY2FsLgotCi0gICBpbnQKLSAgICAgICAg ICB6ZnNlZWsocG9zKSBsb25nIHBvczsKLSAgICAgICAgICBQb3NpdGlvbnMgdGhlIGlucHV0IHBv aW50ZXIgb24gdGhlIGN1cnJlbnQgaW5wdXQgZmlsZSB0byB0aGUKLSAgICAgICAgICBnaXZlbiBw b3NpdGlvbi4gVGhlIHBvcyBhcmd1bWVudCBpcyAwLWJhc2VkLCB0aGUgb2Zmc2V0Ci0gICAgICAg ICAgKGRpc3RhbmNlIGluIGJ5dGVzKSBmcm9tIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gTmVlZGVk IGZvcgotICAgICAgICAgIFJFU0VORCwgUFNFTkQsIGFuZCBvdGhlciByZWNvdmVyeSBvcGVyYXRp b25zLiBUaGlzIGZ1bmN0aW9uIGlzCi0gICAgICAgICAgbm90IG5lY2Vzc2FyaWx5IHBvc3NpYmxl IG9uIGFsbCBzeXN0ZW1zLCBlLmcuIHJlY29yZC1vcmllbnRlZAotICAgICAgICAgIHN5c3RlbXMu IEl0IHNob3VsZCBvbmx5IGJlIHVzZWQgb24gYmluYXJ5IGZpbGVzIChpLmUuIGZpbGVzIHdlCi0g ICAgICAgICAgYXJlIHNlbmRpbmcgaW4gYmluYXJ5IG1vZGUpIGFuZCBzdHJlYW0tb3JpZW50ZWQg ZmlsZSBzeXN0ZW1zLgotICAgICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBvbiBmYWls dXJlLgotICAgICAgICAgICAgMDogT24gc3VjY2Vzcy4KLQotICAgaW50Ci0gICAgICAgICAgemNo ZGlyKGRpcm5hbSkgY2hhciAqZGlybmFtOwotICAgICAgICAgIENoYW5nZXMgY3VycmVudCBvciBk ZWZhdWx0IGRpcmVjdG9yeSB0byB0aGUgb25lIGdpdmVuIGluIGRpcm5hbS4KLSAgICAgICAgICBS ZXR1cm5zOgotICAgICAgICAgICAgMDogT24gZmFpbHVyZS4KLSAgICAgICAgICAgIDE6IG9uIHN1 Y2Nlc3MuCi0KLSAgIGxvbmcKLSAgICAgICAgICB6Y2hraShmbikgY2hhciAqZm47Ci0gICAgICAg ICAgQ2hlY2sgdG8gc2VlIGlmIGZpbGUgd2l0aCBuYW1lIGZuIGlzIGEgcmVndWxhciwgcmVhZGFi bGUsCi0gICAgICAgICAgZXhpc3RpbmcgZmlsZSwgc3VpdGFibGUgZm9yIEtlcm1pdCB0byBzZW5k IC0tIG5vdCBhIGRpcmVjdG9yeSwKLSAgICAgICAgICBub3QgYSBzeW1ib2xpYyBsaW5rLCBldGMu IFJldHVybnM6Ci0gICAgICAgICAgIC0zOiBpZiBmaWxlIGV4aXN0cyBidXQgaXMgbm90IGFjY2Vz c2libGUgKGUuZy4gcmVhZC1wcm90ZWN0ZWQpOwotICAgICAgICAgICAtMjogaWYgZmlsZSBleGlz dHMgYnV0IGlzIG5vdCBvZiBhIHJlYWRhYmxlIHR5cGUgKGUuZy4gYQotICAgICAgICAgIGRpcmVj dG9yeSk7Ci0gICAgICAgICAgIC0xOiBvbiBlcnJvciAoZS5nLiBmaWxlIGRvZXMgbm90IGV4aXN0 LCBvciBmbiBpcyBnYXJiYWdlKTsKLSAgICAgICAgICA+PTA6IChsZW5ndGggb2YgZmlsZSkgaWYg ZmlsZSBleGlzdHMgYW5kIGlzIHJlYWRhYmxlLgotICAgICAgICAgIEFsc28gc2VlIGlzZGlyKCks IHpnZXRmcygpLgotCi0gICBpbnQKLSAgICAgICAgICB6Y2hrcGlkKHBpZCkgdW5zaWduZWQgbG9u ZyBwaWQ7Ci0gICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIDE6IElmIHRoZSBnaXZlbiBw cm9jZXNzIElEIChlLmcuIHBpZCBpbiBVTklYKSBpcyB2YWxpZCBhbmQKLSAgICAgICAgICBhY3Rp dmUKLSAgICAgICAgICAgIDA6IG90aGVyd2lzZS4KLQotICAgbG9uZwotICAgICAgICAgIHpnZXRm cyhmbikgY2hhciAqZm47Ci0gICAgICAgICAgR2V0cyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gZmls ZSwgcmVnYXJkbGVzcyBvZiBhY2Nlc3NpYmlsaXR5LgotICAgICAgICAgIFVzZWQgZm9yIGRpcmVj dG9yeSBsaXN0aW5ncy4gVW5saWtlIHpjaGtpKCksIHNob3VsZCByZXR1cm4gdGhlCi0gICAgICAg ICAgc2l6ZSBvZiBhbnkga2luZCBvZiBmaWxlLCBldmVuIGEgZGlyZWN0b3J5LiB6Z2V0ZnMoKSBh bHNvIHNob3VsZAotICAgICAgICAgIHNlcnZlIGFzIGEgbWluaSAiZ2V0IGZpbGUgaW5mbyIgZnVu Y3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB1bnRpbAotICAgICAgICAgIHdlIGRlc2lnbiBhIGJldHRl ciBvbmUsIGJ5IGFsc28gc2V0dGluZyBzb21lIGdsb2JhbCB2YXJpYWJsZXM6Ci0gICAgICAgICAg ICBpbnQgemdmc19saW5rICAgPSAxLzAgPSBmaWxlIGlzIChub3QpIGEgc3ltYm9saWMgbGluay4K LSAgICAgICAgICAgIGludCB6Z2ZzX2RpciAgICA9IDEvMCA9IGZpbGUgaXMgKG5vdCkgYSBkaXJl Y3RvcnkuCi0gICAgICAgICAgICBjaGFyIGxpbmtuYW1lW10gPSBpZiB6Z2ZzX2xpbmsgIT0gMCwg bmFtZSBvZiBmaWxlIGxpbmsgcG9pbnRzCi0gICAgICAgICAgdG8uCi0gICAgICAgICAgUmV0dXJu czoKLSAgICAgICAgICAgLTE6IG9uIGVycm9yIChlLmcuIGZpbGUgZG9lcyBub3QgZXhpc3QsIG9y IGZuIGlzIGdhcmJhZ2UpOwotICAgICAgICAgID49MDogKGxlbmd0aCBvZiBmaWxlKSBpZiBmaWxl IGV4aXN0cyBhbmQgaXMgcmVhZGFibGUuCi0KLSAgIGludAotICAgICAgICAgIHpjaGtvKGZuKSBj aGFyICpmbjsKLSAgICAgICAgICBDaGVja3MgdG8gc2VlIGlmIGEgZmlsZSBvZiB0aGUgZ2l2ZW4g bmFtZSBjYW4gYmUgY3JlYXRlZC4KLSAgICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAtMTog aWYgZmlsZSBjYW5ub3QgYmUgY3JlYXRlZCwgb3Igb24gYW55IGtpbmQgb2YgZXJyb3IuCi0gICAg ICAgICAgICAwOiBpZiBmaWxlIGNhbiBiZSBjcmVhdGVkLgotCi0gICBpbnQKLSAgICAgICAgICB6 Y2hrc3BhKGZuLGxlbikgY2hhciAqZjsgbG9uZyBsZW47Ci0gICAgICAgICAgQ2hlY2tzIHRvIHNl ZSBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IHNwYWNlIHRvIHN0b3JlIHRoZSBmaWxlCi0gICAgICAg ICAgbmFtZWQgZm4sIHdoaWNoIGlzIGxlbiBieXRlcyBsb25nLiBJZiB5b3UgY2FuJ3Qgd3JpdGUg YSBmdW5jdGlvbgotICAgICAgICAgIHRvIGRvIHRoaXMsIHRoZW4ganVzdCBtYWtlIGEgZHVtbXkg dGhhdCBhbHdheXMgcmV0dXJucyAxOyBoaWdoZXIKLSAgICAgICAgICBsZXZlbCBjb2RlIHdpbGwg cmVjb3ZlciBmcm9tIGRpc2stZnVsbCBlcnJvcnMuIFRoZSByZWNlaXZpbmcKLSAgICAgICAgICBL ZXJtaXQgdXNlcyB0aGlzIGZ1bmN0aW9uIHRvIHJlZnVzZSBhbiBpbmNvbWluZyBmaWxlIGJhc2Vk IG9uCi0gICAgICAgICAgaXRzIHNpemUsIHZpYSB0aGUgYXR0cmlidXRlIG1lY2hhbmlzbS4gUmV0 dXJuczoKLSAgICAgICAgICAgLTE6IG9uIGVycm9yLgotICAgICAgICAgICAgMDogaWYgdGhlcmUg aXMgbm90IGVub3VnaCBzcGFjZS4KLSAgICAgICAgICAgIDE6IGlmIHRoZXJlIGlzIGVub3VnaCBz cGFjZS4KLQotICAgaW50Ci0gICAgICAgICAgemNoaW4obixjKSBpbnQgbjsgaW50ICpjOwotICAg ICAgICAgIEdldHMgYSBjaGFyYWN0ZXIgZnJvbSBmaWxlIG51bWJlciBuLCByZXR1cm4gaXQgaW4g YyAoY2FsbCB3aXRoCi0gICAgICAgICAgJmMpLiBSZXR1cm5zOgotICAgICAgICAgICAtMTogb24g ZmFpbHVyZSwgaW5jbHVkaW5nIEVPRi4KLSAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3Mgd2l0aCBj aGFyYWN0ZXIgaW4gYy4KLQotICAgaW50Ci0gICAgICAgICAgemNob3V0KG4sYykgaW50IG47IGNo YXIgYzsKLSAgICAgICAgICBXcml0ZXMgdGhlIGNoYXJhY3RlciBjIHRvIGZpbGUgbnVtYmVyIG4u IFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBvbiBlcnJvci4KLSAgICAgICAgICAgIDA6IG9uIHN1 Y2Nlc3MuCi0KLSAgIGludAotICAgICAgICAgIHpjbG9zZShuKSBpbnQgbjsKLSAgICAgICAgICBD bG9zZXMgZmlsZSBudW1iZXIgbi4gUmV0dXJuczoKLSAgICAgICAgICAgLTE6IG9uIGVycm9yLgot ICAgICAgICAgICAgMTogb24gc3VjY2Vzcy4KLQotICAgaW50Ci0gICAgICAgICAgemRlbGV0KGZu KSBjaGFyICpuYW1lOwotICAgICAgICAgIEF0dGVtcHRzIHRvIGRlbGV0ZSAocmVtb3ZlLCBlcmFz ZSkgdGhlIG5hbWVkIGZpbGUuIFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBvbiBlcnJvci4KLSAg ICAgICAgICAgIDE6IGlmIGZpbGUgd2FzIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5LgotCi0gICBjaGFy ICoKLSAgICAgICAgICB6Z3Blcm0oY2hhciAqIGYpCi0gICAgICAgICAgUmV0dXJucyBhIHBvaW50 ZXIgdG8gdGhlIHN5c3RlbS1kZXBlbmRlbnQgbnVtZXJpYwotICAgICAgICAgIHBlcm1pc3Npb25z L3Byb3RlY3Rpb24gc3RyaW5nIGZvciBmaWxlIGYsIG9yIE5VTEwgdXBvbiBmYWlsdXJlLgotICAg ICAgICAgIFVzZWQgaWYgQ0tfUEVSTVMgaXMgZGVmaW5lZC4KLQotICAgY2hhciAqCi0gICAgICAg ICAgemlwZXJtKGNoYXIgKiBmKQotICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBz eXN0ZW0tZGVwZW5kZW50IHN5bWJvbGljCi0gICAgICAgICAgcGVybWlzc2lvbnMvcHJvdGVjdGlv biBzdHJpbmcgZm9yIGZpbGUgZiwgb3IgTlVMTCB1cG9uIGZhaWx1cmUuCi0gICAgICAgICAgVXNl ZCBpZiBDS19QRVJNUyBpcyBkZWZpbmVkLiBFeGFtcGxlOiBJbiBVTklYIHpncGVybShmKSBtaWdo dAotICAgICAgICAgIHJldHVybiAiMTAwNzcwIiwgYnV0IHppcGVybSgpIG1pZ2h0IHJldHVybiAi LXJ3eHJ3eC0tLSIuIEluIFZNUywKLSAgICAgICAgICB6Z3Blcm0oKSB3b3VsZCByZXR1cm4gYSBo ZXhhZGVjaW1hbCBzdHJpbmcsIGJ1dCB6aXBlcm0oKSB3b3VsZAotICAgICAgICAgIHJldHVybiBz b21ldGhpbmcgbGlrZSAiKFJXRUQsUldFRCxSRSwpIi4KLQotICAgY2hhciAqCi0gICAgICAgICAg emd0ZGlyKCkKLSAgICAgICAgICBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmFtZSBvZiB0aGUg Y3VycmVudCBkaXJlY3RvcnksIGZvbGRlciwKLSAgICAgICAgICBldGMsIG9yIGEgTlVMTCBwb2lu dGVyIGlmIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBjYW5ub3QgYmUKLSAgICAgICAgICBkZXRlcm1p bmVkLiBJZiBwb3NzaWJsZSwgdGhlIGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9uIHNob3VsZCBiZQot ICAgICAgICAgIChhKSBmdWxseSBzcGVjaWZpZWQsIGUuZy4gYXMgYSBjb21wbGV0ZSBwYXRobmFt ZSwgYW5kIChiKSBiZQotICAgICAgICAgIHN1aXRhYmxlIGZvciBhcHBlbmRpbmcgYSBmaWxlbmFt ZS4gVGh1cywgZm9yIGV4YW1wbGUsIFVuaXgKLSAgICAgICAgICBkaXJlY3RvcnkgbmFtZXMgc2hv dWxkIGVuZCB3aXRoICcvJy4gVk1TIGRpcmVjdG9yeSBuYW1lcyBzaG91bGQKLSAgICAgICAgICBs b29rIGxpa2UgREVWOltOQU1FXSAocmF0aGVyIHRoYW4sIHNheSwgTkFNRS5ESVI7MSkuCi0KLSAg IGNoYXIgKgotICAgICAgICAgIHpob21lKCkKLSAgICAgICAgICBSZXR1cm5zIGEgcG9pbnRlciB0 byBhIHN0cmluZyBjb250YWluaW5nIHRoZSB1c2VyJ3MgaG9tZQotICAgICAgICAgIGRpcmVjdG9y eSwgb3IgTlVMTCB1cG9uIGVycm9yLiBTaG91bGQgYmUgZm9ybWF0dGVkIGxpa2Ugemd0ZGlyKCkK LSAgICAgICAgICAocS52LikuCi0KLSAgIGludAotICAgICAgICAgIHppbmZpbGwoKQotICAgICAg ICAgIEZpbGwgYnVmZmVyIGZyb20gaW5wdXQgZmlsZS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5 IHRoZSBtYWNybwotICAgICAgICAgIHptaW5jaGFyKCksIHdoaWNoIGlzIGRlZmluZWQgaW4gY2tj a2VyLmguIHptaW5jaGFyKCkgbWFuYWdlcyBpdHMKLSAgICAgICAgICBvd24gYnVmZmVyLCBhbmQg Y2FsbHMgemluZmlsbCgpIHRvIGZpbGwgaXQgd2hlbmV2ZXIgaXQgYmVjb21lcwotICAgICAgICAg IGVtcHR5LiBJdCBpcyB1c2VkIG9ubHkgZm9yIHNlbmRpbmcgZmlsZXMsIGFuZCByZWFkcyBjaGFy YWN0ZXJzCi0gICAgICAgICAgb25seSBmcm9tIGZpbGUgbnVtYmVyIFpJRklMRS4gemluZmlsbCgp IHJldHVybnMgLTEgdXBvbiBlbmQgb2YKLSAgICAgICAgICBmaWxlLCAtMiB1cG9uIGZhdGFsIGVy cm9yLCBhbmQgLTMgdXBvbiB0aW1lb3V0IChlLmcuIHdoZW4KLSAgICAgICAgICByZWFkaW5nIGZy b20gYSBwaXBlKTsgb3RoZXJ3aXNlIGl0IHJldHVybnMgdGhlIGZpcnN0IGNoYXJhY3RlcgotICAg ICAgICAgIGZyb20gdGhlIGJ1ZmZlciBpdCBqdXN0IHJlYWQuCi0KLSAgIGludAotICAgICAgICAg IHprc2VsZigpCi0gICAgICAgICAgS2lsbHMgdGhlIGN1cnJlbnQgam9iLCBzZXNzaW9uLCBwcm9j ZXNzLCBldGMsIGxvZ3Mgb3V0LAotICAgICAgICAgIGRpc2FwcGVhcnMuIFVzZWQgYnkgdGhlIEtl cm1pdCBzZXJ2ZXIgd2hlbiBpdCByZWNlaXZlcyBhIEJZRQotICAgICAgICAgIGNvbW1hbmQuIE9u IGZhaWx1cmUsIHJldHVybnMgLTEuIE9uIHN1Y2Nlc3MsIGRvZXMgbm90IHJldHVybiBhdAotICAg ICAgICAgIGFsbCEgVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCB1bnRpbCBhbGwg b3RoZXIgc3RlcHMKLSAgICAgICAgICBoYXZlIGJlZW4gdGFrZW4gdG8gY2xvc2UgZmlsZXMsIGV0 Yy4KLQotICAgVk9JRAotICAgICAgICAgIHpzdHJpcChmbiwmZm4yKSBjaGFyICpmbjEsICoqZm4y OwotICAgICAgICAgIFN0cmlwcyBkZXZpY2UgYW5kIGRpcmVjdG9yeSwgZXRjLCBmcm9tIGZpbGUg c3BlY2lmaWNhdGlvbiBmbiwKLSAgICAgICAgICBsZWF2aW5nIG9ubHkgdGhlIGZpbGVuYW1lIChp bmNsdWRpbmcgImV4dGVuc2lvbiIgb3IgImZpbGV0eXBlIgotICAgICAgICAgIC0tIHRoZSBwYXJ0 IGFmdGVyIHRoZSBkb3QpLiBGb3IgZXhhbXBsZSBEVUEwOltQUk9HUkFNU11PT0ZBLkM7MwotICAg ICAgICAgIGJlY29tZXMgT09GQS5DLCBvciAvdXNyL2ZkYy9vb2ZhLmMgYmVjb21lcyBvb2ZhLmMu IFJldHVybnMgYQotICAgICAgICAgIHBvaW50ZXIgdG8gcmVzdWx0IGluIGZuMi4KLQotICAgaW50 Ci0gICAgICAgICAgenNldHBlcm0oY2hhciAqIGZpbGUsIHVuc2lnbmVkIGludCBjb2RlKQotICAg ICAgICAgIFNldCBwZXJtaXNzaW9ucyBvZiBmaWxlIHRvIGdpdmVuIHN5c3RlbS1kZXBlbmRlbnQg Y29kZS4gICAwOiBPbgotICAgICAgICAgIGZhaWx1cmUuCi0gICAgICAgICAgICAxOiBvbiBzdWNj ZXNzLgotCi0gICBpbnQKLSAgICAgICAgICB6c2V0cm9vdChjaGFyICogZGlyKQotICAgICAgICAg IFNldHMgdGhlIHJvb3QgZm9yIHRoZSB1c2VyJ3MgZmlsZSBhY2Nlc3MsIGxpa2UgVW5peCBjaHJv b3QoKSwKLSAgICAgICAgICBidXQgZG9lcyBub3QgcmVxdWlyZSBwcml2aWxlZ2UuIEluIFVuaXgs IHRoaXMgbXVzdCBiZQotICAgICAgICAgIGltcGxlbWVudGVkIGVudGlyZWx5IGJ5IEtlcm1pdCdz IG93biBmaWxlIGFjY2VzcyByb3V0aW5lcy4KLSAgICAgICAgICBSZXR1cm5zOgotICAgICAgICAg ICAgMTogU3VjY2VzcwotICAgICAgICAgICAtMTogSW52YWxpZCBhcmd1bWVudAotICAgICAgICAg ICAtMjoKLSAgICAgICAgICAgLTM6IEludGVybmFsIGVycm9yCi0gICAgICAgICAgIC00OiBBY2Nl c3MgdG8gZ2l2ZW4gZGlyZWN0b3J5IGRlbmllZAotICAgICAgICAgICAtNTogTmV3IHJvb3Qgbm90 IHdpdGhpbiBvbGQgcm9vdAotCi0gICBpbnQKLSAgICAgICAgICB6aW5yb290KGNoYXIgKiBmaWxl KQotICAgICAgICAgIElmIG5vIHJvb3QgaXMgc2V0ICh6c2V0cm9vdCgpKSwgcmV0dXJucyAxLgot ICAgICAgICAgIE90aGVyd2lzZSwgaWYgZ2l2ZW4gZmlsZSBpcyBpbiB0aGUgcm9vdCwgcmV0dXJu cyAxLgotICAgICAgICAgIE90aGVyd2lzZSwgcmV0dXJucyAwLgotCi0gICBWT0lECi0gICAgICAg ICAgemx0b3IoZm4sZm4yKSBjaGFyICpmbjEsICpmbjI7Ci0gICAgICAgICAgTG9jYWwtVG8tUmVt b3RlIGZpbGVuYW1lIHRyYW5zbGF0aW9uLiBPQlNPTEVURTogcmVwbGFjZWQgYnkKLSAgICAgICAg ICBuemx0b3IoKSAocS52LikuIFRyYW5zbGF0ZXMgdGhlIGxvY2FsIGZpbGVuYW1lIGZuIGludG8g YSBmb3JtYXQKLSAgICAgICAgICBzdWl0YWJsZSBmb3IgdHJhbnNtaXNzaW9uIHRvIGFuIGFyYml0 cmFyeSB0eXBlIG9mIGNvbXB1dGVyLCBhbmQKLSAgICAgICAgICBjb3BpZXMgdGhlIHJlc3VsdCBp bnRvIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBmbjIuIFRyYW5zbGF0aW9uCi0gICAgICAgICAg bWF5IGludm9sdmUgKGEpIHN0cmlwcGluZyB0aGUgZGV2aWNlIGFuZC9vciBkaXJlY3RvcnkvcGF0 aCBuYW1lLAotICAgICAgICAgIChiKSBjb252ZXJ0aW5nIGxvd2VyY2FzZSB0byB1cHBlcmNhc2Us IChjKSByZW1vdmluZyBzcGFjZXMgYW5kCi0gICAgICAgICAgc3RyYW5nZSBjaGFyYWN0ZXJzLCBv ciBjb252ZXJ0aW5nIHRoZW0gdG8gc29tZSBpbm5vY3VvdXMKLSAgICAgICAgICBhbHBoYWJldGlj IGNoYXJhY3RlciBsaWtlIFgsIChkKSBkaXNjYXJkaW5nIG9yIGNvbnZlcnRpbmcgZXh0cmEKLSAg ICAgICAgICBwZXJpb2RzICh0aGVyZSBzaG91bGQgbm90IGJlIG1vcmUgdGhhbiBvbmUpLiBEb2Vz IGl0cyBiZXN0LgotICAgICAgICAgIFJldHVybnMgbm8gdmFsdWUuIG5hbWUyIGlzIGEgcG9pbnRl ciB0byBhIGJ1ZmZlciwgZnVybmlzaGVkIGJ5Ci0gICAgICAgICAgdGhlIGNhbGxlciwgaW50byB3 aGljaCB6bHRvcigpIHdyaXRlcyB0aGUgcmVzdWx0aW5nIG5hbWUuIE5vCi0gICAgICAgICAgbGVu Z3RoIGNoZWNraW5nIGlzIGRvbmUuCi0KLSAgICNpZmRlZiBOWkxUT1IKLSAgICAgICAgICBWT0lE Ci0gICAgICAgICAgbnpsdG9yKGZuLGZuMixjb252ZXJ0LHBhdGhuYW1lcyxtYXgpIGNoYXIgKmZu MSwqZm4yOyBpbnQKLSAgICAgICAgICBjb252ZXJ0LHBhdGhuYW1lcyxtYXg7Ci0gICAgICAgICAg UmVwbGFjZXMgemx0b3IoKS4gVGhpcyBuZXcgdmVyc2lvbiBoYW5kbGVzIHBhdGhuYW1lcyBhbmQg Y2hlY2tzCi0gICAgICAgICAgbGVuZ3RoLiBmbjEgYW5kIGZuMiBhcmUgYXMgaW4gemx0b3IoKS4g VGhpcyB2ZXJzaW9uIGlzIGNhbGxlZAotICAgICAgICAgIHVuY29uZGl0aW9uYWxseSBmb3IgZWFj aCBmaWxlLCByYXRoZXIgdGhhbiBvbmx5IHdoZW4gZmlsZW5hbWUKLSAgICAgICAgICBjb252ZXJz aW9uIGlzIGVuYWJsZWQuIFBhdGhuYW1lcyBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlczoK LQotICAgICAgICAgICAgUEFUSF9PRkY6IFBhdGhuYW1lLCBpZiBhbnksIGlzIHRvIGJlIHN0cmlw cGVkCi0gICAgICAgICAgICBQQVRIX1JFTDogVGhlIHJlbGF0aXZlIHBhdGhuYW1lIGlzIHRvIGJl IGluY2x1ZGVkCi0gICAgICAgICAgICBQQVRIX0FCUzogVGhlIGZ1bGwgcGF0aG5hbWUgaXMgdG8g YmUgaW5jbHVkZWQKLQotICAgICAgICAgIEFmdGVyIGhhbmRsaW5nIHBhdGhuYW1lcywgY29udmVy c2lvbiBpcyBkb25lIHRvIHRoZSByZXN1bHQgYXMgaW4KLSAgICAgICAgICB0aGUgemx0b3IoKSBk ZXNjcmlwdGlvbiBpZiBjb252ZXJ0ICE9IDA7IGlmIHJlbGF0aXZlIG9yIGFic29sdXRlCi0gICAg ICAgICAgcGF0aG5hbWVzIGFyZSBpbmNsdWRlZCwgdGhleSBhcmUgY29udmVydGVkIHRvIFVOSVgg Zm9ybWF0LCBpLmUuCi0gICAgICAgICAgd2l0aCBzbGFzaCAoLykgYXMgdGhlIGRpcmVjdG9yeSBz ZXBhcmF0b3IuIFRoZSBtYXggcGFyYW1ldGVyCi0gICAgICAgICAgc3BlY2lmaWVzIHRoZSBtYXhp bXVtIHNpemUgb2YgZm4yLiBJZiBjb252ZXJ0ID4gMCwgdGhlIHJlZ3VsYXIKLSAgICAgICAgICBj b252ZXJzaW9ucyBhcmUgZG9uZTsgaWYgY29udmVydCA8IDAsIG1pbmltYWwgY29udmVyc2lvbnMg YXJlCi0gICAgICAgICAgZG9uZSAod2Ugc2tpcCB1cHBlcmNhc2luZyB0aGUgbGV0dGVycywgd2Ug YWxsb3cgbW9yZSB0aGFuIG9uZQotICAgICAgICAgIHBlcmlvZCwgZXRjOyB0aGlzIGNhbiBiZSB1 c2VkIHdoZW4gd2Uga25vdyBvdXIgcGFydG5lciBpcyBVTklYCi0gICAgICAgICAgb3Igc2ltaWxh cikuCi0KLSAgICNlbmRpZiAvKiBOWkxUT1IgKi8KLQotICAgaW50Ci0gICAgICAgICAgbnp4cGFu ZChmbixmbGFncykgY2hhciAqZm47IGludCBmbGFnczsKLSAgICAgICAgICBSZXBsYWNlcyB6eHBh bmQoKSwgd2hpY2ggaXMgb2Jzb2xldGUgYXMgb2YgQy1LZXJtaXQgNy4wLgotICAgICAgICAgIENh bGwgd2l0aDoKLSAgICAgICAgICAgIGZuID0gUG9pbnRlciB0byBmaWxlbmFtZSBvciBwYXR0ZXJu LgotICAgICAgICAgICAgZmxhZ3MgPSBvcHRpb24gYml0czoKLSAgICAgICAgICAgICAgZmxhZ3Mg JiBaWF9GSUxPTkxZICBNYXRjaCByZWd1bGFyIGZpbGVzCi0gICAgICAgICAgICAgIGZsYWdzICYg WlhfRElST05MWSAgTWF0Y2ggZGlyZWN0b3JpZXMKLSAgICAgICAgICAgICAgZmxhZ3MgJiBaWF9S RUNVUlNFICBEZXNjZW5kIHRocm91Z2ggZGlyZWN0b3J5IHRyZWUKLSAgICAgICAgICAgICAgZmxh Z3MgJiBaWF9NQVRDSERPVCBNYXRjaCAiZG90IGZpbGVzIgotICAgICAgICAgICAgICBmbGFncyAm IFpYX05PQkFDS1VQIERvbid0IG1hdGNoICJiYWNrdXAgZmlsZXMiCi0gICAgICAgICAgICAgIGZs YWdzICYgWlhfTk9MSU5LUyAgRG9uJ3QgZm9sbG93IHN5bWxpbmtzLgotCi0gICAgICAgICAgUmV0 dXJucyB0aGUgbnVtYmVyIG9mIGZpbGVzIHRoYXQgbWF0Y2ggZm4sIHdpdGggZGF0YSBzdHJ1Y3R1 cmVzCi0gICAgICAgICAgc2V0IHVwIHNvIHRoZSBmaXJzdCBmaWxlIChpZiBhbnkpIHdpbGwgYmUg cmV0dXJuZWQgYnkgdGhlIG5leHQKLSAgICAgICAgICB6bmV4dCgpIGNhbGwuIElmIFpYX0ZJTE9O TFkgYW5kIFpYX0RJUk9OTFkgYXJlIGJvdGggc2V0LCBvcgotICAgICAgICAgIG5laXRoZXIgb25l IGlzIHNldCwgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGFyZSBtYXRjaGVkLiBOb3RlczoKLQotICAg ICAgICAgMS4gSXQgaXMgZXNzZW50aWFsIHRoYXQgdGhlIG51bWJlciByZXR1cm5lZCBieSBuenhw YW5kKCkgcmVmbGVjdAotICAgICAgICAgICAgdGhlIGFjdHVhbCBudW1iZXIgb2YgZmlsZW5hbWVz IHRoYXQgd2lsbCBiZSByZXR1cm5lZCBieQotICAgICAgICAgICAgem5leHQoKSBjYWxscy4gSW4g b3RoZXIgd29yZHM6Ci0gIGZvciAobiA9IG56eHBhbmQoc3RyaW5nLGZsYWdzKTsgbiA+IDA7IG4t LSkgewotICAgICAgem5leHQoYnVmKTsKLSAgICAgIHByaW50ZigiJXNcbiIsIGJ1Zik7Ci0gIH0K LQotICAgICAgICAgICAgc2hvdWxkIHByaW50IGFsbCB0aGUgZmlsZSBuYW1lczsgbm8gbW9yZSwg bm8gbGVzcy4KLSAgICAgICAgIDIuIEluIFVOSVgsIERPUywgT1MtOSwgZXRjLCB3aGVyZSBkaXJl Y3RvcmllcyBjb250YWluIGVudHJpZXMgZm9yCi0gICAgICAgICAgICB0aGVtc2VsdmVzICguKSBh bmQgdGhlIHN1cGVyaW9yIGRpcmVjdG9yeSAoLi4pLCB0aGVzZSBzaG91bGQKLSAgICAgICAgICAg IE5PVCBiZSBpbmNsdWRlZCBpbiB0aGUgbGlzdCB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcywgaW5j bHVkaW5nCi0gICAgICAgICAgICB3aGVuIFpYX01BVENIRE9UIGlzIHNldC4KLSAgICAgICAgIDMu IEFkZGl0aW9uYWwgb3B0aW9uIGJpdHMgbWlnaHQgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZSwgZS5n LiBmb3IKLSAgICAgICAgICAgIHNvcnRpbmcgKHNvcnQgYnkgZGF0ZS9uYW1lL3NpemUsIHJldmVy c2UvYXNjZW5kaW5nLCBldGMpLgotICAgICAgICAgICAgQ3VycmVudGx5IHRoaXMgaXMgZG9uZSBv bmx5IGluIGhpZ2hlciBsZXZlbCBjb2RlICh0aHJvdWdoIGEKLSAgICAgICAgICAgIGhhY2sgaW4g d2hpY2ggdGhlIG56eHBhbmQoKSBleHBvcnRzIGl0cyBmaWxlbmFtZSBhcnJheSwgd2hpY2gKLSAg ICAgICAgICAgIGlzIG5vdCBwb3J0YWJsZSBiZWNhdXNlIG5vdCBhbGwgT1MncyBjYW4gdXNlIHRo aXMgbWVjaGFuaXNtKS4KLQotICAgaW50Ci0gICAgICAgICAgem1haWwoYWRkcixmbikgY2hhciAq YWRkciwgZm47Ci0gICAgICAgICAgU2VuZCB0aGUgbG9jYWwsIGV4aXN0aW5nIGZpbGUgZm4gYXMg ZS1tYWlsIHRvIHRoZSBhZGRyZXNzIGFkZHIuCi0gICAgICAgICAgUmV0dXJuczoKLSAgICAgICAg ICAgIDA6IG9uIHN1Y2Nlc3MKLSAgICAgICAgICAgIDI6IGlmIG1haWwgZGVsaXZlcmVkIGJ1dCB0 ZW1wIGZpbGUgY2FuJ3QgYmUgZGVsZXRlZAotICAgICAgICAgICAtMjogaWYgbWFpbCBjYW4ndCBi ZSBkZWxpdmVyZWQKLQotICAgaW50Ci0gICAgICAgICAgem1rZGlyKHBhdGgpIGNoYXIgKnBhdGg7 Ci0gICAgICAgICAgVGhlIHBhdGggY2FuIGJlIGEgZmlsZSBzcGVjaWZpY2F0aW9uIHRoYXQgbWln aHQgY29udGFpbgotICAgICAgICAgIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiwgaW4gd2hpY2ggdGhl IGZpbGVuYW1lIGlzIGV4cGVjdGVkIHRvIGJlCi0gICAgICAgICAgaW5jbHVkZWQsIG9yIGFuIHVu YW1iaWd1b3VzIGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9uIChlLmcuIGluCi0gICAgICAgICAgVU5J WCBpdCBtdXN0IGVuZCB3aXRoICIvIikuIFRoaXMgcm91dGluZSBhdHRlbXB0cyB0byBjcmVhdGUg YW55Ci0gICAgICAgICAgZGlyZWN0b3JpZXMgaW4gdGhlIGdpdmVuIHBhdGggdGhhdCBkb24ndCBh bHJlYWR5IGV4aXN0LiBSZXR1cm5zCi0gICAgICAgICAgMCBvciBncmVhdGVyIHN1Y2Nlc3M6IG5v IGRpcmVjdG9yaWVzIG5lZWRlZCBjcmVhdGlvbiwgb3IgZWxzZQotICAgICAgICAgIGFsbCBkaXJl Y3RvcmllcyB0aGF0IG5lZWRlZCBjcmVhdGlvbiB3ZXJlIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5Owot ICAgICAgICAgIHRoZSByZXR1cm4gY29kZSBpcyB0aGUgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIHRo YXQgd2VyZSBjcmVhdGVkLgotICAgICAgICAgIFJldHVybnMgLTEgb24gZmFpbHVyZSB0byBjcmVh dGUgYW55IG9mIHRoZSBuZWVkZWQgZGlyZWN0b3JpZXMuCi0KLSAgIGludAotICAgICAgICAgIHpy bWRpcihwYXRoKSBjaGFyICpwYXRoOwotICAgICAgICAgIEF0dGVtcHRzIHRvIHJlbW92ZSB0aGUg Z2l2ZW4gZGlyZWN0b3J5LiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEKLSAgICAgICAgICBvbiBm YWlsdXJlLiBUaGUgZGV0YWlsZWQgc2VtYW50aWNzIGFyZSBvcGVuIC0tIHNob3VsZCBpdCBmYWls IGlmCi0gICAgICAgICAgdGhlIGRpcmVjdG9yeSBjb250YWlucyBhbnkgZmlsZXMgb3Igc3ViZGly ZWN0b3JpZXMsIGV0Yy4gSXQgaXMKLSAgICAgICAgICBwcm9iYWJseSBiZXN0IGZvciB0aGlzIHJv dXRpbmUgdG8gYmVoYXZlIGluIHdoYXRldmVyIG1hbm5lciBpcwotICAgICAgICAgIGN1c3RvbWFy eSBvbiB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybTsgZS5nLiBpbiBVTklYLCBWTVMsIERPUywKLSAg ICAgICAgICBldGMsIHdoZXJlIGRpcmVjdG9yaWVzIGNhbiBub3QgYmUgcmVtb3ZlZCB1bmxlc3Mg dGhleSBhcmUgZW1wdHkuCi0KLSAgIFZPSUQKLSAgICAgICAgICB6bmV3bihmbixzKSBjaGFyICpm biwgKipzOwotICAgICAgICAgIFRyYW5zZm9ybXMgdGhlIG5hbWUgZm4gaW50byBhIGZpbGVuYW1l IHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZQotICAgICAgICAgIHVuaXF1ZS4gSWYgdGhlIGZpbGUg Zm4gZG9lcyBub3QgZXhpc3QsIHRoZW4gdGhlIG5ldyBuYW1lIGlzIHRoZQotICAgICAgICAgIHNh bWUgYXMgZm47IE90aGVyd2lzZSwgaXQncyBkaWZmZXJlbnQuIHRoaXMgZnVuY3Rpb24gZG9lcyBp dHMKLSAgICAgICAgICBiZXN0LCByZXR1cm5zIG5vIHZhbHVlLiBOZXcgbmFtZSBpcyBjcmVhdGVk IGluIGNhbGxlcidzIHNwYWNlLgotICAgICAgICAgIENhbGwgbGlrZSB0aGlzOiB6bmV3bihvbGQs Jm5ldyk7LiBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyBhCi0gICAgICAgICAgcG9pbnRlciB0byB0 aGUgbmV3IG5hbWUuIFRoaXMgcG9pbnRlciBpcyBzZXQgYnkgem5ld24oKSB0byBwb2ludAotICAg ICAgICAgIHRvIGEgc3RhdGljIHN0cmluZyBpbiBpdHMgb3duIHNwYWNlLCBzbyBiZSBzdXJlIHRv IHRoZSByZXN1bHQgdG8KLSAgICAgICAgICBhIHNhZmUgcGxhY2UgYmVmb3JlIGNhbGxpbmcgdGhp cyBmdW5jdGlvbiBhZ2Fpbi4KLQotICAgaW50Ci0gICAgICAgICAgem5leHQoZm4pIGNoYXIgKmZu OwotICAgICAgICAgIENvcGllcyB0aGUgbmV4dCBmaWxlIG5hbWUgZnJvbSBhIGZpbGUgbGlzdCBj cmVhdGVkIGJ5IHp4cGFuZCgpCi0gICAgICAgICAgaW50byB0aGUgc3RyaW5nIHBvaW50ZWQgdG8g YnkgZm4gKHNlZSB6eHBhbmQpLiBJZiBubyBtb3JlIGZpbGVzLAotICAgICAgICAgIHRoZW4gdGhl IG51bGwgc3RyaW5nIGlzIHBsYWNlZCB0aGVyZS4gUmV0dXJucyAwIGlmIHRoZXJlIGFyZSBubwot ICAgICAgICAgIG1vcmUgZmlsZW5hbWVzLCB3aXRoIDB0aCBlbGVtZW50IHRoZSBhcnJheSBwb2lu dGVkIHRvIGJ5IGZuIHNldAotICAgICAgICAgIHRvIE5VTC4gSWYgdGhlcmUgaXMgYSBmaWxlbmFt ZSwgaXQgaXMgc3RvcmVkIGluIHRoZSBhcnJheQotICAgICAgICAgIHBvaW50ZWQgdG8gYnkgZm4g YW5kIGEgcG9zaXRpdmUgbnVtYmVyIGlzIHJldHVybmVkLiBOT1RFOiBUaGlzCi0gICAgICAgICAg aXMgYSBjaGFuZ2UgZnJvbSBlYXJsaWVyIGRlZmluaXRpb25zIG9mIHRoaXMgZnVuY3Rpb24KLSAg ICAgICAgICAocHJlLTE5OTkpLCB3aGljaCByZXR1cm5lZCB0aGUgbnVtYmVyIG9mIGZpbGVzIHJl bWFpbmluZzsgdGh1cyAwCi0gICAgICAgICAgd2FzIHRoZSByZXR1cm4gdmFsdWUgd2hlbiByZXR1 cm5pbmcgdGhlIGZpbmFsIGZpbGUuIEhvd2V2ZXIsIG5vCi0gICAgICAgICAgbWFpbmxpbmUgY29k ZSBldmVyIGRlcGVuZGVkIG9uIHRoZSByZXR1cm4gdmFsdWUsIHNvIHRoaXMgY2hhbmdlCi0gICAg ICAgICAgc2hvdWxkIGJlIHNhZmUuCi0KLSAgIGludAotICAgICAgICAgIHpvcGVuaShuLGZuKSBp bnQgbjsgY2hhciAqZm47Ci0gICAgICAgICAgT3BlbnMgdGhlIGZpbGUgbmFtZWQgZm4gZm9yIGlu cHV0IGFzIGZpbGUgbnVtYmVyIG4uIFJldHVybnM6Ci0gICAgICAgICAgICAwOiBvbiBmYWlsdXJl LgotICAgICAgICAgICAgMTogb24gc3VjY2Vzcy4KLQotICAgaW50Ci0gICAgICAgICAgem9wZW5v KG4sZm4senosZmNiKSBpbnQgbjsgY2hhciAqbmFtZTsgc3RydWN0IHphdHRyICp6ejsgc3RydWN0 Ci0gICAgICAgICAgZmlsaW5mbyAqZmNiOwotICAgICAgICAgIEF0dGVtcHRzIHRvIG9wZW4gdGhl IG5hbWVkIGZpbGUgZm9yIG91dHB1dCBhcyBmaWxlIG51bWJlciBuLiB6egotICAgICAgICAgIGlz IGEgS2VybWl0IGZpbGUgYXR0cmlidXRlIHN0cnVjdHVyZSBhcyBkZWZpbmVkIGluIGNrY2RlYi5o LAotICAgICAgICAgIGNvbnRhaW5pbmcgdmFyaW91cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmls ZSwgaW5jbHVkaW5nIGl0cwotICAgICAgICAgIHNpemUsIGNyZWF0aW9uIGRhdGUsIGFuZCBzbyBm b3J0aC4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYXR0ZW1wdAotICAgICAgICAgIHRvIGhvbm9yIGFz IG1hbnkgb2YgdGhlc2UgYXMgcG9zc2libGUuIGZjYiBpcyBhICJmaWxlIGNvbnRyb2wKLSAgICAg ICAgICBibG9jayIgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLCBkZWZpbmVkIGluIGNrY2RlYi5o LCBjb250YWluaW5nCi0gICAgICAgICAgaW5mb3JtYXRpb24gcmVsZXZhbnQgdG8gY29tcGxpY2F0 ZWQgZmlsZSBzeXN0ZW1zIGxpa2UgVk1TIChSTVMpLAotICAgICAgICAgIElCTSBNVlMsIGV0Yywg bGlrZSBibG9ja3NpemUsIHJlY29yZCBsZW5ndGgsIG9yZ2FuaXphdGlvbiwKLSAgICAgICAgICBy ZWNvcmQgZm9ybWF0LCBjYXJyaWFnZSBjb250cm9sLCBldGMuIFJldHVybnM6Ci0gICAgICAgICAg ICAwOiBvbiBmYWlsdXJlLgotICAgICAgICAgICAgMTogb24gc3VjY2Vzcy4KLQotICAgaW50Ci0g ICAgICAgICAgem91dGR1bXAoKQotICAgICAgICAgIER1bXBzIGEgZmlsZSBvdXRwdXQgYnVmZmVy LiBVc2VkIHdpdGggdGhlIG1hY3JvIHptY2hvdXQoKQotICAgICAgICAgIGRlZmluZWQgaW4gY2tj a2VyLmguIFVzZWQgb25seSB3aXRoIGZpbGUgbnVtYmVyIFpPRklMRSwgaS5lLiB0aGUKLSAgICAg ICAgICBmaWxlIHRoYXQgaXMgYmVpbmcgcmVjZWl2ZWQgYnkgS2VybWl0IGR1cmluZyBmaWxlIHRy YW5zZmVyLgotICAgICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBvbiBmYWlsdXJlLgot ICAgICAgICAgICAgMDogb24gc3VjY2Vzcy4KLQotICAgaW50Ci0gICAgICAgICAgenByaW50KHAs Zm4pIGNoYXIgKnAsICpmOwotICAgICAgICAgIFByaW50cyB0aGUgZmlsZSB3aXRoIG5hbWUgZm4g b24gYSBsb2NhbCBwcmludGVyLCB3aXRoIG9wdGlvbnMgcC4KLSAgICAgICAgICBSZXR1cm5zOgot ICAgICAgICAgICAgMDogb24gc3VjY2VzcwotICAgICAgICAgICAgMzogaWYgZmlsZSBzZW50IHRv IHByaW50ZXIgYnV0IGNhbid0IGJlIGRlbGV0ZWQKLSAgICAgICAgICAgLTM6IGlmIGZpbGUgY2Fu J3QgYmUgcHJpbnRlZAotCi0gICBpbnQKLSAgICAgICAgICB6cmVuYW1lKGZuLGZuMikgY2hhciAq Zm4sICpmbjI7Ci0gICAgICAgICAgQ2hhbmdlcyB0aGUgbmFtZSBvZiBmaWxlIGZuIHRvIGZuMi4g SWYgZm4yIGlzIHRoZSBuYW1lIG9mIGFuCi0gICAgICAgICAgZXhpc3RpbmcgZGlyZWN0b3J5LCBv ciBhIGZpbGUtc3RydWN0dXJlZCBkZXZpY2UsIHRoZW4gZmlsZSBmbiBpcwotICAgICAgICAgIG1v dmVkIHRvIHRoYXQgZGlyZWN0b3J5IG9yIGRldmljZSwga2VlcGluZyBpdHMgb3JpZ2luYWwgbmFt ZS4gSWYKLSAgICAgICAgICBmbjIgbGFja3MgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIHdoZW4gcGFz c2VkIHRvIHRoaXMgZnVuY3Rpb24sIGFuCi0gICAgICAgICAgYXBwcm9wcmlhdGUgb25lIGlzIHN1 cHBsaWVkLiBSZXR1cm5zOgotICAgICAgICAgICAtMTogb24gZmFpbHVyZS4KLSAgICAgICAgICAg IDA6IG9uIHN1Y2Nlc3MuCi0KLSAgIGludAotICAgICAgICAgIHpjb3B5KHNvdXJjZSxkZXN0KSBj aGFyICogc291cmNlLCAqIGRlc3Q7Ci0gICAgICAgICAgQ29waWVzIHRoZSBzb3VyY2UgZmlsZSB0 byB0aGUgZGVzdGluYXRpb24uIE9uZSBmaWxlIG9ubHkuIE5vCi0gICAgICAgICAgd2lsZGNhcmRz LiBUaGUgZGVzdGluYXRpb24gc3RyaW5nIG1heSBiZSBhIGZpbGVuYW1lIG9yIGEKLSAgICAgICAg ICBkaXJlY3RvcnkgbmFtZS4gUmV0dXJuczoKLSAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCi0g ICAgICAgICAgIDwwOiBvbiBmYWlsdXJlOgotICAgICAgICAgICAgLTI6IHNvdXJjZSBmaWxlIGlz IG5vdCBhIHJlZ3VsYXIgZmlsZS4KLSAgICAgICAgICAgIC0zOiBzb3VyY2UgZmlsZSBub3QgZm91 bmQuCi0gICAgICAgICAgICAtNDogcGVybWlzc2lvbiBkZW5pZWQuCi0gICAgICAgICAgICAtNTog c291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgZmlsZS4KLSAgICAgICAgICAgIC02 OiBpL28gZXJyb3IuCi0gICAgICAgICAgICAtMTogb3RoZXIgZXJyb3IuCi0KLSAgIGNoYXIgKgot ICAgICAgICAgIHpsb2NhbHRpbWUoY2hhciAqKQotICAgICAgICAgIENhbGwgd2l0aDogInl5eXlt bWRkIGhoOm1tOnNzIiBHTVQvVVRDIGRhdGUtdGltZS4gUmV0dXJucwotICAgICAgICAgIHBvaW50 ZXIgdG8gbG9jYWwgZGF0ZS10aW1lIHN0cmluZyAieXl5eW1tZGQgaGg6bW06c3MiIG9uCi0gICAg ICAgICAgc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgotCi0gICBWT0lECi0gICAgICAgICAgenJ0 b2woZm4sZm4yKSBjaGFyICpmbiwgKmZuMjsKLSAgICAgICAgICBSZW1vdGUtVG8tTG9jYWwgZmls ZW5hbWUgdHJhbnNsYXRpb24uIE9CU09MRVRFOiByZXBsYWNlZCBieQotICAgICAgICAgIG56cnRv bCgpLiBUcmFuc2xhdGVzIGEgInN0YW5kYXJkIiBmaWxlbmFtZSB0byBhIGxvY2FsIGZpbGVuYW1l LgotICAgICAgICAgIEZvciBleGFtcGxlLCBpbiBVbml4IHRoaXMgZnVuY3Rpb24gbWlnaHQgY29u dmVydCBhbgotICAgICAgICAgIGFsbC11cHBlcmNhc2UgbmFtZSB0byBsb3dlcmNhc2UsIGJ1dCBs ZWF2ZSBsb3dlci0gb3IgbWl4LWNhc2UKLSAgICAgICAgICBuYW1lcyBhbG9uZS4gRG9lcyBpdHMg YmVzdCwgcmV0dXJucyBubyB2YWx1ZS4gTmV3IG5hbWUgaXMgaW4KLSAgICAgICAgICBzdHJpbmcg cG9pbnRlZCB0byBieSBmbjIuIE5vIGxlbmd0aCBjaGVja2luZyBpcyBkb25lLgotCi0gICAjaWZk ZWYgTlpMVE9SCi0gICBpbnQKLSAgICAgICAgICBuenJ0b2woZm4sZm4yLGNvbnZlcnQscGF0aG5h bWVzLG1heCkgY2hhciAqZm4xLCpmbjI7IGludAotICAgICAgICAgIGNvbnZlcnQscGF0aG5hbWVz LG1heDsKLSAgICAgICAgICBSZXBsYWNlcyB6cnRvbC4gTGlrZSB6cnRvbCBidXQgaGFuZGxlcyBw YXRobmFtZXMgYW5kIGNoZWNrcwotICAgICAgICAgIGxlbmd0aC4gU2VlIG56bHRvciBmb3IgZGV0 YWlsZWQgZGVzY3JpcHRpb24gb2YgcGFyYW1ldGVycy4KLQotICAgI2VuZGlmIC8qIE5aTFRPUiAq LwotCi0gICBpbnQKLSAgICAgICAgICB6c2F0dHIoeHgpIHN0cnVjdCB6YXR0ciAqeHg7Ci0gICAg ICAgICAgRmlsbHMgaW4gYSBLZXJtaXQgZmlsZSBhdHRyaWJ1dGUgc3RydWN0dXJlIGZvciB0aGUg ZmlsZSB3aGljaCBpcwotICAgICAgICAgIHRvIGJlIHNlbnQsIG5hbWVseSB0aGUgY3VycmVudGx5 IG9wZW4gWklGSUxFLiBOb3RlIHRoYXQgdGhpcyBpcwotICAgICAgICAgIG5vdCBhIHZlcnkgZ29v ZCBkZXNpZ24sIGJ1dCB3ZSdyZSBzdHVjayB3aXRoIGl0LiBDYWxsZXJzIG11c3QKLSAgICAgICAg ICBlbnN1cmUgdGhhdCB6c2F0dHIoKSBpcyBjYWxsZWQgb25seSBvbiByZWFsIGZpbGVzLCBub3Qg b24gcGlwZXMsCi0gICAgICAgICAgaW50ZXJuYWxseSBnZW5lcmF0ZWQgZmlsZS1saWtlIG9iamVj dHMgc3VjaCBhcyBzZXJ2ZXIgUkVNT1RFCi0gICAgICAgICAgY29tbWFuZCByZXNwb25zZXMsIGV0 Yy4gUmV0dXJuczoKLSAgICAgICAgICAgLTE6IG9uIGZhaWx1cmUuCi0gICAgICAgICAgICAwOiBv biBzdWNjZXNzIHdpdGggdGhlIHN0cnVjdHVyZSBmaWxsZWQgaW4uCi0gICAgICAgICAgSWYgYW55 IHN0cmluZyBtZW1iZXIgaXMgbnVsbCwgaXQgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlCi0gICAg ICAgICAgY2FsbGVyLgotICAgICAgICAgIElmIGFueSBudW1lcmljIG1lbWJlciBpcyAtMSwgaXQg c2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIGNhbGxlci4KLQotICAgaW50Ci0gICAgICAgICAgenNo Y21kKHMpIGNoYXIgKnM7Ci0gICAgICAgICAgcyBjb250YWlucyB0byBwb2ludGVyIHRvIGEgY29t bWFuZCB0byBiZSBleGVjdXRlZCBieSB0aGUgaG9zdAotICAgICAgICAgIGNvbXB1dGVyJ3Mgc2hl bGwsIGNvbW1hbmQgcGFyc2VyLCBvciBvcGVyYXRpbmcgc3lzdGVtLiBJZiB0aGUKLSAgICAgICAg ICBzeXN0ZW0gYWxsb3dzIHRoZSB1c2VyIHRvIGNob29zZSBmcm9tIGEgdmFyaWV0eSBvZiBjb21t YW5kCi0gICAgICAgICAgcHJvY2Vzc29ycyAoc2hlbGxzKSwgdGhlbiB0aGlzIGZ1bmN0aW9uIHNo b3VsZCBlbXBsb3kgdGhlIHVzZXIncwotICAgICAgICAgIHByZWZlcnJlZCBzaGVsbC4gSWYgcG9z c2libGUsIHRoZSB1c2VyJ3Mgam9iIChlbnZpcm9ubWVudCwKLSAgICAgICAgICBwcm9jZXNzLCBl dGMpIHNob3VsZCBiZSBzZXQgdXAgdG8gY2F0Y2gga2V5Ym9hcmQgaW50ZXJydXB0aW9uCi0gICAg ICAgICAgc2lnbmFscyB0byBhbGxvdyB0aGUgdXNlciB0byBoYWx0IHRoZSBzeXN0ZW0gY29tbWFu ZCBhbmQgcmV0dXJuCi0gICAgICAgICAgdG8gS2VybWl0LiBUaGUgY29tbWFuZCBtdXN0IHJ1biBp biBvcmRpbmFyeSwgdW5wcml2aWxlZ2VkIHVzZXIKLSAgICAgICAgICBtb2RlLiBJZiBwb3NzaWJs ZSwgdGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIC0xIG9uIGZhaWx1cmUgdG8KLSAgICAgICAg ICBzdGFydCB0aGUgY29tbWFuZCwgb3IgZWxzZSBpdCBzaG91bGQgcmV0dXJuIDEgaWYgdGhlIGNv bW1hbmQKLSAgICAgICAgICBzdWNjZWVkZWQgYW5kIDAgaWYgaXQgZmFpbGVkLgotCi0gICBpbnQK LSAgICAgICAgICBwZXhpdHN0YXR1cwotICAgICAgICAgIHpzaGNtZCgpIGFuZCB6c3lzY21kKCkg c2hvdWxkIHNldCB0aGlzIHRvIHRoZSBjb21tYW5kJ3MgYWN0dWFsCi0gICAgICAgICAgZXhpdCBz dGF0dXMgY29kZSBpZiBwb3NzaWJsZS4KLQotICAgaW50Ci0gICAgICAgICAgenN5c2NtZChzKSBj aGFyICpzOwotICAgICAgICAgIHMgY29udGFpbnMgdG8gcG9pbnRlciB0byBhIGNvbW1hbmQgdG8g YmUgZXhlY3V0ZWQgYnkgdGhlIGhvc3QKLSAgICAgICAgICBjb21wdXRlcidzIHNoZWxsLCBjb21t YW5kIHBhcnNlciwgb3Igb3BlcmF0aW5nIHN5c3RlbS4gSWYgdGhlCi0gICAgICAgICAgc3lzdGVt IGFsbG93cyB0aGUgdXNlciB0byBjaG9vc2UgZnJvbSBhIHZhcmlldHkgb2YgY29tbWFuZAotICAg ICAgICAgIHByb2Nlc3NvcnMgKHNoZWxscyksIHRoZW4gdGhpcyBmdW5jdGlvbiBzaG91bGQgZW1w bG95IHRoZSBzeXN0ZW0KLSAgICAgICAgICBzdGFuZGFyZCBzaGVsbCAoZS5nLiAvYmluL3NoIGZv ciBVbml4KSwgc28gdGhhdCB0aGUgcmVzdWx0cyB3aWxsCi0gICAgICAgICAgYWx3YXlzIGJlIHRo ZSBzYW1lIGZvciBldmVyeWJvZHkuIElmIHBvc3NpYmxlLCB0aGUgdXNlcidzIGpvYgotICAgICAg ICAgIChlbnZpcm9ubWVudCwgcHJvY2VzcywgZXRjKSBzaG91bGQgYmUgc2V0IHVwIHRvIGNhdGNo IGtleWJvYXJkCi0gICAgICAgICAgaW50ZXJydXB0aW9uIHNpZ25hbHMgdG8gYWxsb3cgdGhlIHVz ZXIgdG8gaGFsdCB0aGUgc3lzdGVtCi0gICAgICAgICAgY29tbWFuZCBhbmQgcmV0dXJuIHRvIEtl cm1pdC4gVGhlIGNvbW1hbmQgbXVzdCBydW4gaW4gb3JkaW5hcnksCi0gICAgICAgICAgdW5wcml2 aWxlZ2VkIHVzZXIgbW9kZS4gSWYgcG9zc2libGUsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVy bgotICAgICAgICAgIC0xIG9uIGZhaWx1cmUgdG8gc3RhcnQgdGhlIGNvbW1hbmQsIG9yIGVsc2Ug aXQgc2hvdWxkIHJldHVybiAxCi0gICAgICAgICAgaWYgdGhlIGNvbW1hbmQgc3VjY2VlZGVkIGFu ZCAwIGlmIGl0IGZhaWxlZC4KLQotICAgVk9JRAotICAgICAgICAgIHpfZXhlYyhzLGFyZ3MpIGNo YXIgKiBzOyBjaGFyICogYXJnc1tdOwotICAgICAgICAgIFRoaXMgb25lIGV4ZWN1dGVzIHRoZSBj b21tYW5kIHMgKHdoaWNoIGlzIHNlYXJjaGVkIGZvciB1c2luZyB0aGUKLSAgICAgICAgICBzeXN0 ZW0ncyBub3JtYWwgc2VhcmNoaW5nIG1lY2hhbmlzbSwgc3VjaCBhcyBQQVRIIGluIFVOSVgpLCB3 aXRoCi0gICAgICAgICAgdGhlIGdpdmVuIGFyZ3VtZW50IHZlY3Rvciwgd2hpY2ggZm9sbG93cyB0 aGUgY29udmVudGlvbnMgb2YgVU5JWAotICAgICAgICAgIGFyZ3ZbXTogdGhlIG5hbWUgb2YgdGhl IGNvbW1hbmQgcG9pbnRlZCB0byBieSBlbGVtZW50IDAsIHRoZQotICAgICAgICAgIGZpcnN0IGFy ZyBieSBlbGVtZW50IDEsIGFuZCBzbyBvbi4gQSBudWxsIGFyZ3NbXSBwb2ludGVyCi0gICAgICAg ICAgaW5kaWNhdGVzIHRoZSBlbmQgb2YgdGhlIGFyZ3VtZW50IGxpc3QuIEFsbCBvcGVuIGZpbGVz IG11c3QKLSAgICAgICAgICByZW1haW4gb3BlbiBzbyB0aGUgZXhlYydkIHByb2Nlc3MgY2FuIHVz ZSB0aGVtLiBSZXR1cm5zIG9ubHkgaWYKLSAgICAgICAgICB1bnN1Y2Nlc3NmdWwuCi0KLSAgIGlu dAotICAgICAgICAgIHpzaW5sKG4scyx4KSBpbnQgbiwgeDsgY2hhciAqczsKLSAgICAgICAgICBS ZWFkcyBhIGxpbmUgZnJvbSBmaWxlIG51bWJlciBuLiBXcml0ZXMgdGhlIGxpbmUgaW50byB0aGUK LSAgICAgICAgICBhZGRyZXNzIHMgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4gV3JpdGluZyB0ZXJt aW5hdGVzIHdoZW4KLSAgICAgICAgICBuZXdsaW5lIGlzIHJlYWQsIGJ1dCB3aXRoIG5ld2xpbmUg ZGlzY2FyZGVkLiBXcml0aW5nIGFsc28KLSAgICAgICAgICB0ZXJtaW5hdGVzIHVwb24gRU9GIG9y IGlmIGxlbmd0aCB4IGlzIGV4aGF1c3RlZC4gUmV0dXJuczoKLSAgICAgICAgICAgLTE6IG9uIEVP RiBvciBlcnJvci4KLSAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCi0KLSAgIGludAotICAgICAg ICAgIHpzb3V0KG4scykgaW50IG47IGNoYXIgKnM7Ci0gICAgICAgICAgV3JpdGVzIHRoZSBzdHJp bmcgcyBvdXQgdG8gZmlsZSBudW1iZXIgbi4gUmV0dXJuczoKLSAgICAgICAgICAgLTE6IG9uIGZh aWx1cmUuCi0gICAgICAgICAgICAwOiBvbiBzdWNjZXNzLgotCi0gICBpbnQKLSAgICAgICAgICB6 c291dGwobixzKSBpbnQgbjsgY2hhciAqczsKLSAgICAgICAgICBXcml0ZXMgdGhlIHN0cmluZyBz IG91dCB0byBmaWxlIG51bWJlciBuIGFuZCBhZGRzIGEgbGluZQotICAgICAgICAgIChyZWNvcmQp IHRlcm1pbmF0b3IgKGJvdW5kYXJ5KSBhcHByb3ByaWF0ZSBmb3IgdGhlIHN5c3RlbSBhbmQKLSAg ICAgICAgICB0aGUgZmlsZSBmb3JtYXQuIFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBvbiBmYWls dXJlLgotICAgICAgICAgICAgMDogb24gc3VjY2Vzcy4KLQotICAgaW50Ci0gICAgICAgICAgenNv dXR4KG4scyx4KSBpbnQgbiwgeDsgY2hhciAqczsKLSAgICAgICAgICBXcml0ZXMgZXhhY3RseSB4 IGNoYXJhY3RlcnMgZnJvbSBzdHJpbmcgcyB0byBmaWxlIG51bWJlciBuLiBJZiBzCi0gICAgICAg ICAgaGFzIGZld2VyIHRoYW4geCBjaGFyYWN0ZXJzLCB0aGVuIHRoZSBlbnRpcmUgc3RyaW5nIHMg aXMKLSAgICAgICAgICB3cml0dGVuLiBSZXR1cm5zOgotICAgICAgICAgICAtMTogb24gZmFpbHVy ZS4KLSAgICAgICAgICA+PSAwOiBvbiBzdWNjZXNzLCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMg YWN0dWFsbHkgd3JpdHRlbi4KLQotICAgaW50Ci0gICAgICAgICAgenN0aW1lKGZuLHl5LHgpIGNo YXIgKmZuOyBzdHJ1Y3QgemF0dHIgKnl5OyBpbnQgeDsKLSAgICAgICAgICBTZXRzIHRoZSBjcmVh dGlvbiBkYXRlIChhbmQgb3RoZXIgYXR0cmlidXRlcykgb2YgYW4gZXhpc3RpbmcKLSAgICAgICAg ICBmaWxlLCBvciBjb21wYXJlcyBhIGZpbGUncyBjcmVhdGlvbiBkYXRlIHdpdGggYSBnaXZlbiBk YXRlLiBDYWxsCi0gICAgICAgICAgd2l0aDoKLQotICAgZm46IHBvaW50ZXIgdG8gbmFtZSBvZiBl eGlzdGluZyBmaWxlLgotICAgeXk6IFBvaW50ZXIgdG8gYSBLZXJtaXQgZmlsZSBhdHRyaWJ1dGUg c3RydWN0dXJlIGluIHdoaWNoIHl5LT5kYXRlLnZhbAotICAgaXMgYSBkYXRlIG9mIHRoZSBmb3Jt IHl5eXltbWRkIGhoOm1tOnNzLCBlLmcuIDE5OTAwMjA4IDEzOjAwOjAwLCB3aGljaAotICAgaXMg dG8gYmUgdXNlZCBmb3Igc2V0dGluZyBvciBjb21wYXJpbmcgdGhlIGZpbGUgZGF0ZS4gT3RoZXIg YXR0cmlidXRlcwotICAgaW4gdGhlIHN0cnVjdCBjYW4gYWxzbyBiZSBzZXQsIHN1Y2ggYXMgdGhl IHByb3RlY3Rpb24vcGVybWlzc2lvbiAoU2VlCi0gICBbMTMyXUFwcGVuZGl4IEkpLCB3aGVuIGl0 IG1ha2VzIHNlbnNlIChlLmcuICJ5eS0+bHByb3RlY3QudmFsIiBjYW4gYmUKLSAgIHNldCBpZiB0 aGUgcmVtb3RlIHN5c3RlbSBJRCBtYXRjaGVzIHRoZSBsb2NhbCBvbmUpLgotICAgIHg6IEEgZnVu Y3Rpb24gY29kZTogMCBtZWFucyB0byBzZXQgdGhlIGZpbGUncyBjcmVhdGlvbiBkYXRlIGFzIGdp dmVuLgotICAgMSBtZWFucyBjb21wYXJlIHRoZSBkYXRlIGZyb20gdGhlIHl5IHN0cnVjdCB3aXRo IHRoZSBmaWxlJ3MgZGF0ZS4KLQotICAgICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBv biBhbnkga2luZCBvZiBlcnJvci4KLSAgICAgICAgICAgIDA6IGlmIHggaXMgMCBhbmQgdGhlIGZp bGUgZGF0ZSB3YXMgc2V0IHN1Y2Nlc3NmdWxseS4KLSAgICAgICAgICAgIDA6IGlmIHggaXMgMSBh bmQgZGF0ZSBmcm9tIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgPiBmaWxlIGNyZWF0aW9uCi0gICAgICAg ICAgZGF0ZS4KLSAgICAgICAgICAgIDE6IGlmIHggaXMgMSBhbmQgZGF0ZSBmcm9tIGF0dHJpYnV0 ZSBzdHJ1Y3R1cmUgPD0gZmlsZQotICAgICAgICAgIGNyZWF0aW9uIGRhdGUuCi0KLSAgIFZPSUQK LSAgICAgICAgICB6c3RyaXAobmFtZSxuYW1lMikgY2hhciAqbmFtZSwgKipuYW1lMjsKLSAgICAg ICAgICBTdHJpcHMgcGF0aG5hbWUgZnJvbSBmaWxlbmFtZSAibmFtZSIuIENvbnN0cnVjdHMgdGhl IHJlc3VsdGluZwotICAgICAgICAgIHN0cmluZyBpbiBhIHN0YXRpYyBidWZmZXIgaW4gaXRzIG93 biBzcGFjZSBhbmQgcmV0dXJucyBhIHBvaW50ZXIKLSAgICAgICAgICB0byBpdCBpbiBuYW1lMi4g QWxzbyBzdHJpcHMgZGV2aWNlIG5hbWUsIGZpbGUgdmVyc2lvbiBudW1iZXJzLAotICAgICAgICAg IGFuZCBvdGhlciAibm9uLW5hbWUiIG1hdGVyaWFsLgotCi0gICBpbnQKLSAgICAgICAgICB6eGNt ZChuLHMpIGNoYXIgKnM7Ci0gICAgICAgICAgUnVucyBhIHN5c3RlbSBjb21tYW5kIHNvIGl0cyBv dXRwdXQgY2FuIGJlIGFjY2Vzc2VkIGFzIGlmIGl0Ci0gICAgICAgICAgd2VyZSBmaWxlIG4uIFRo ZSBjb21tYW5kIGlzIHJ1biBpbiBvcmRpbmFyeSwgdW5wcml2aWxlZ2VkIHVzZXIKLSAgICAgICAg ICBtb2RlLgotICAgICAgICAgIElmIG4gaXMgWlNURElPIG9yIFpDVEVSTSwgcmV0dXJucyAtMS4K LSAgICAgICAgICBJZiBuIGlzIFpJRklMRSBvciBaUkZJTEUsIHRoZW4gS2VybWl0IHJlYWRzIGZy b20gdGhlIGNvbW1hbmQsCi0gICAgICAgICAgb3RoZXJ3aXNlIEtlcm1pdCB3cml0ZXMgdG8gdGhl IGNvbW1hbmQuCi0gICAgICAgICAgUmV0dXJucyAwIG9uIGVycm9yLCAxIG9uIHN1Y2Nlc3MuCi0K LSAgIGludAotICAgICAgICAgIHp4cGFuZChmbikgY2hhciAqZm47Ci0gICAgICAgICAgT0JTT0xF VEU6IFJlcGxhY2VkIGJ5IG56eHBhbmQoKSwgcS52LgotCi0gICAjaWZkZWYgWlhSRVdJTkQKLSAg IGludAotICAgICAgICAgIHp4cmV3aW5kKCkKLSAgICAgICAgICBSZXR1cm5zIHRoZSBudW1iZXIg b2YgZmlsZXMgcmV0dXJuZWQgYnkgdGhlIG1vc3QgcmVjZW50Ci0gICAgICAgICAgbnp4cGFuZCgp IGNhbGwsIGFuZCByZXNldHMgdGhlIGxpc3QgdG8gdGhlIGJlZ2lubmluZyBzbyB0aGUgbmV4dAot ICAgICAgICAgIHpuZXh0KCkgY2FsbCByZXR1cm5zIHRoZSBmaXJzdCBmaWxlLiBSZXR1cm5zIC0x IGlmIHp4cGFuZCBoYXMKLSAgICAgICAgICBub3QgeWV0IGJlZW4gY2FsbGVkLiBJZiB0aGlzIGZ1 bmN0aW9uIGlzIGF2YWlsYWJsZSwgWlhSRVdJTkQKLSAgICAgICAgICBzaG91bGQgYmUgZGVmaW5l ZDsgb3RoZXJ3aXNlIGl0IHNob3VsZCBub3QgYmUgcmVmZXJlbmNlZC4KLQotICAgI2VuZGlmIC8q IFpYUkVXSU5EICovCi0KLSAgIGludAotICAgICAgICAgIHhzeXN0ZW0oY21kKSBjaGFyICpjbWQ7 Ci0gICAgICAgICAgRXhlY3V0ZXMgdGhlIHN5c3RlbSBjb21tYW5kIHdpdGhvdXQgcmVkaXJlY3Rp bmcgYW55IG9mIGl0cyBpL28sCi0gICAgICAgICAgc2ltaWxhciAod2VsbCwgaWRlbnRpY2FsKSB0 byBzeXN0ZW0oKSBpbiBVbml4LiBCdXQgYmVmb3JlCi0gICAgICAgICAgcGFzc2luZyB0aGUgY29t bWFuZCB0byB0aGUgc3lzdGVtLCB4c3lzdGVtKCkgZW5zdXJlcyB0aGF0IGFsbAotICAgICAgICAg IHByaXZpbGVnZXMgYXJlIHR1cm5lZCBvZmYsIHNvIHRoYXQgdGhlIHN5c3RlbSBjb21tYW5kIGV4 ZWN1dGVzCi0gICAgICAgICAgaW4gb3JkaW5hcnkgdW5wcml2aWxlZ2VkIHVzZXIgbW9kZS4gSWYg cG9zc2libGUsIHhzeXN0ZW0oKQotICAgICAgICAgIHJldHVybnMgdGhlIHJldHVybiBjb2RlIG9m IHRoZSBjb21tYW5kIHRoYXQgd2FzIGV4ZWN1dGVkLgotCi00LkUuMi4yLiBJS1NEIFZhcmlhYmxl cyBhbmQgRnVuY3Rpb25zCi0KLSAgIFRoZXNlIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYW55IEMt S2VybWl0IHZlcnNpb24gdGhhdCBpcyB0byBiZQotICAgaW5zdGFsbGVkIGFzIGFuIEludGVybmV0 IEtlcm1pdCBTZXJ2aWNlIERhZW1vbiAoSUtTRCkuIElLU0QgaXMgZXhwZWN0ZWQKLSAgIHRvIGJl IHN0YXJ0ZWQgYnkgdGhlIEludGVybmV0IERhZW1vbiAoZS5nLiBpbmV0ZCkgd2l0aCBpdHMgc3Rh bmRhcmQgaS9vCi0gICByZWRpcmVjdGVkIHRvIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uLgotCi0g ICBpbnQgY2t4YW5vbjsKLSAgICAgICAgICBOb256ZXJvIGlmIGFub255bW91cyBsb2dpbnMgYWxs b3dlZC4KLQotICAgZXh0ZXJuIGludCBpbnNlcnZlcjsKLSAgICAgICAgICBOb256ZXJvIGlmIHN0 YXJ0ZWQgaW4gSUtTRCBtb2RlLgotCi0gICBleHRlcm4gaW50IGlzZ3Vlc3Q7Ci0gICAgICAgICAg Tm9uemVybyBpZiBJS1NEIGFuZCB1c2VyIGxvZ2dlZCBpbiBhbm9ueW1vdXNseS4KLQotICAgZXh0 ZXJuIGNoYXIgKiBob21kaXI7Ci0gICAgICAgICAgUG9pbnRlciB0byB1c2VyJ3MgaG9tZSBkaXJl Y3RvcnkuCi0KLSAgIGV4dGVybiBjaGFyICogYW5vbnJvb3Q7Ci0gICAgICAgICAgUG9pbnRlciB0 byBmaWxlLXN5c3RlbSByb290IGZvciBhbm9ueW1vdXMgdXNlcnMuCi0KLSAgIEV4aXN0aW5nIGZ1 bmN0aW9ucyBtdXN0IG1ha2UgImlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KSIgY2hlY2tzIGZvcgot ICAgYWN0aW9ucyB0aGF0IHdvdWxkIG5vdCBiZSBsZWdhbCBmb3IgZ3Vlc3RzOiB6ZGVsZXRlKCks IHpybWRpcigpLAotICAgenByaW50KCksIHptYWlsKCksIGV0Yy4KLQotICAgaW50Ci0gICAgICAg ICAgenZ1c2VyKG5hbWUpIGNoYXIgKiBuYW1lOwotICAgICAgICAgIFZlcmlmaWVzIHRoYXQgdXNl ciAibmFtZSIgZXhpc3RzIGFuZCBpcyBhbGxvd2VkIHRvIGxvZyBpbi4gSWYKLSAgICAgICAgICB0 aGUgbmFtZSBpcyAiZnRwIiBvciAiYW5vbnltb3VzIiBhbmQgY2t4YW5vbiAhPSAwLCBhIGd1ZXN0 IGxvZ2luCi0gICAgICAgICAgaXMgc2V0IHVwLiBSZXR1cm5zIDAgaWYgdXNlciBub3QgYWxsb3dl ZCB0byBsb2cgaW4sIG5vbnplcm8gaWYKLSAgICAgICAgICB1c2VyIG1heSBsb2cgaW4uCi0KLSAg IGludAotICAgICAgICAgIHp2cGFzcyhzdHJpbmcpIGNoYXIgKiBzdHJpbmc7Ci0gICAgICAgICAg VmVyaWZpZXMgcGFzc3dvcmQgb2YgdGhlIHVzZXIgZnJvbSB0aGUgbW9zdCByZWNlbnQgenZ1c2Vy KCkKLSAgICAgICAgICBjYWxsLiBSZXR1cm5zIG5vbnplcm8gaWYgcGFzc3dvcmQgaXMgdmFsaWQg Zm9yIHVzZXIsIDAgaWYgaXQKLSAgICAgICAgICBpc24ndC4gTWFrZXMgYW55IGFwcHJvcHJpYXRl IHN5c3RlbSBsb2cgZW50cmllcyAoSUtTRCBsb2dpbnMsCi0gICAgICAgICAgZmFpbGVkIGxvZ2lu IGF0dGVtcHRzLCBldGMpLiBJZiBwYXNzd29yZCBpcyB2YWxpZCwgbG9ncyB0aGUgdXNlcgotICAg ICAgICAgIGluIGFzIGhlcnNlbGYgKGlmIHJlYWwgdXNlciksIG9yIHNldHMgdXAgcmVzdHJpY3Rl ZCBhbm9ueW1vdXMKLSAgICAgICAgICBhY2Nlc3MgaWYgdXNlciBpcyBndWVzdCAoZS5nLiBjaGFu Z2VzIGZpbGUtc3lzdGVtIHJvb3QgdG8KLSAgICAgICAgICBhbm9ucm9vdCBhbmQgc2V0cyBpc2d1 ZXN0ID0gMSkuCi0KLSAgIFZPSUQKLSAgICAgICAgICB6c3lzbG9nKCkKLSAgICAgICAgICBCZWdp bnMgYW55IGRlc2lyZWQgc3lzdGVtIGxvZ2dpbmcgb2YgYW4gSUtTRCBzZXNzaW9uLgotCi0gICBW T0lECi0gICAgICAgICAgenZsb2dvdXQoKQotICAgICAgICAgIFRlcm1pbmF0ZXMgYW4gSUtTRCBz ZXNzaW9uLiBJbiBtb3N0IGNhc2VzIHRoaXMgaXMgc2ltcGx5IGEKLSAgICAgICAgICB3cmFwcGVy IGZvciBleGl0KCkgb3IgZG9leGl0KCksIHdpdGggc29tZSBzeXN0ZW0gbG9nZ2luZyBhZGRlZC4K LQotNC5FLjIuMy4gUHJpdmlsZWdlIEZ1bmN0aW9ucwotCi0gICBUaGVzZSBmdW5jdGlvbnMgYXJl IHVzZWQgYnkgQy1LZXJtaXQgdG8gYWRhcHQgaXRzZWxmIHRvIG9wZXJhdGluZwotICAgc3lzdGVt cyB3aGVyZSB0aGUgcHJvZ3JhbSBjYW4gYmUgbWFkZSB0byBydW4gaW4gYSAicHJpdmlsZWdlZCIg bW9kZSwKLSAgIGUuZy4gc2V0dWlkIG9yIHNldGdpZCBpbiBVbml4LiBDLUtlcm1pdCBzaG91bGQg Tk9UIHJlYWQgYW5kIHdyaXRlIGZpbGVzCi0gICBvciBzdGFydCBzdWJwcm9jZXNzZXMgYXMgYSBw cml2aWxlZ2VkIHByb2dyYW0uIFRoaXMgd291bGQgcHJlc2VudCBhCi0gICBzZXJpb3VzIHRocmVh dCB0byBzeXN0ZW0gc2VjdXJpdHkuIFRoZSBzZWN1cml0eSBwYWNrYWdlIGhhcyBiZWVuCi0gICBp bnN0YWxsZWQgdG8gcHJldmVudCBzdWNoIHNlY3VyaXR5IGJyZWFjaGVzIGJ5IHR1cm5pbmcgb2Zm IHRoZQotICAgcHJvZ3JhbSdzIHNwZWNpYWwgcHJpdmlsZWdlcyBhdCBhbGwgdGltZXMgZXhjZXB0 IHdoZW4gdGhleSBhcmUgbmVlZGVkLgotCi0gICBJbiBVTklYLCB0aGUgb25seSBuZWVkIEtlcm1p dCBoYXMgZm9yIHByaXZpbGVnZWQgc3RhdHVzIGlzIGFjY2VzcyB0bwotICAgdGhlIFVVQ1AgbG9j a2ZpbGUgZGlyZWN0b3J5LCBpbiBvcmRlciB0byByZWFkLCBjcmVhdGUsIGFuZCBkZXN0cm95Ci0g ICBsb2NrZmlsZXMsIGFuZCB0byBvcGVuIGNvbW11bmljYXRpb24gZGV2aWNlcyB0aGF0IGFyZSBu b3JtYWxseQotICAgcHJvdGVjdGVkIGFnYWluc3QgdGhlIHVzZXIgKHNlZSB0aGUgWzEzM11Vbml4 IEMtS2VybWl0IEluc3RhbGxhdGlvbgotICAgSW5zdHJ1Y3Rpb25zIGZvciBkaXNjdXNzaW9uKS4g VGhlcmVmb3JlLCBwcml2aWxlZ2VzIHNob3VsZCBvbmx5IGJlCi0gICBlbmFibGVkIGZvciB0aGVz ZSBvcGVyYXRpb25zIGFuZCBkaXNhYmxlZCBhdCBhbGwgb3RoZXIgdGltZXMuIFRoaXMKLSAgIHJl bGlldmVzIHRoZSBwcm9ncmFtbWVyIG9mIHRoZSByZXNwb25zaWJpbGl0eSBvZiBwdXR0aW5nIGV4 cGVuc2l2ZSBhbmQKLSAgIHVucmVsaWFibGUgYWNjZXNzIGNoZWNrcyBhcm91bmQgZXZlcnkgZmls ZSBhY2Nlc3MgYW5kIHN1YnByb2Nlc3MKLSAgIGNyZWF0aW9uLgotCi0gICBTdHJpY3RseSBzcGVh a2luZywgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcmVxdWlyZWQgaW4gYWxsIEMtS2VybWl0Ci0g ICBpbXBsZW1lbnRhdGlvbnMsIGJlY2F1c2UgdGhlaXIgdXNlIChzbyBmYXIsIGF0IGxlYXN0KSBp cyBpbnRlcm5hbCB0bwotICAgdGhlIEdyb3VwIEUgbW9kdWxlcy4gSG93ZXZlciwgdGhleSBzaG91 bGQgYmUgaW5jbHVkZWQgaW4gYWxsIEMtS2VybWl0Ci0gICBpbXBsZW1lbnRhdGlvbnMgZm9yIG9w ZXJhdGluZyBzeXN0ZW1zIHRoYXQgc3VwcG9ydCB0aGUgbm90aW9uIG9mIGEKLSAgIHByaXZpbGVn ZWQgcHJvZ3JhbSAoVU5JWCwgUlNUUy9FLCB3aGF0IG90aGVycz8pLgotCi0gICBpbnQKLSAgICAg ICAgICBwcml2X2luaSgpCi0gICAgICAgICAgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHByb2dyYW0g aXMgcnVubmluZyBpbiBwcml2aWxlZ2VkIHN0YXR1cy4KLSAgICAgICAgICBJZiBzbywgdHVybiBv ZmYgdGhlIHByaXZpbGVnZXMsIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGV5IGNhbiBiZQotICAgICAg ICAgIHR1cm5lZCBvbiBhZ2FpbiB3aGVuIG5lZWRlZC4gQ2FsbGVkIGZyb20gc3lzaW5pdCgpIGF0 IHByb2dyYW0KLSAgICAgICAgICBzdGFydHVwIHRpbWUuIFJldHVybnM6Ci0gICAgICAgICAgICAw IG9uIHN1Y2Nlc3MKLSAgICAgICAgICAgIG5vbnplcm8gb24gZmFpbHVyZSwgaW4gd2hpY2ggY2Fz ZSB0aGUgcHJvZ3JhbSBzaG91bGQgaGFsdAotICAgICAgICAgIGltbWVkaWF0ZWx5LgotCi0gICBp bnQKLSAgICAgICAgICBwcml2X29uKCkKLSAgICAgICAgICBJZiB0aGUgcHJvZ3JhbSBpcyBub3Qg cHJpdmlsZWdlZCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuIElmCi0gICAgICAgICAgdGhl IHByb2dyYW0gaXMgcHJpdmlsZWdlZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGl0IHRvCi0gICAg ICAgICAgcHJpdmlsZWdlZCBzdGF0dXMuIHByaXZfaW5pKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVk IGZpcnN0LgotICAgICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgICAwIG9uIHN1Y2Nlc3MKLSAg ICAgICAgICAgIG5vbnplcm8gb24gZmFpbHVyZQotCi0gICBpbnQKLSAgICAgICAgICBwcml2X29m ZigpCi0gICAgICAgICAgVHVybnMgcHJpdmlsZWdlcyBvZmYgKGlmIHRoZXkgYXJlIG9uKSBpbiBz dWNoIGEgd2F5IHRoYXQgdGhleQotICAgICAgICAgIGNhbiBiZSB0dXJuZWQgYmFjayBvbiBhZ2Fp bi4gUmV0dXJuczoKLSAgICAgICAgICAgIDAgb24gc3VjY2VzcwotICAgICAgICAgICAgbm9uemVy byBvbiBmYWlsdXJlCi0KLSAgIGludAotICAgICAgICAgIHByaXZfY2FuKCkKLSAgICAgICAgICBU dXJucyBwcml2aWxlZ2VzIG9mZiBpbiBzdWNoIGEgd2F5IHRoYXQgdGhleSBjYW5ub3QgYmUgdHVy bmVkCi0gICAgICAgICAgYmFjayBvbi4gUmV0dXJuczoKLSAgICAgICAgICAgIDAgb24gc3VjY2Vz cwotICAgICAgICAgICAgbm9uemVybyBvbiBmYWlsdXJlCi0KLSAgIGludAotICAgICAgICAgIHBy aXZfY2hrKCkKLSAgICAgICAgICBBdHRlbXB0cyB0byB0dXJucyBwcml2aWxlZ2VzIG9mZiBpbiBz dWNoIGEgd2F5IHRoYXQgdGhleSBjYW4gYmUKLSAgICAgICAgICB0dXJuZWQgb24gYWdhaW4gbGF0 ZXIuIFRoZW4gY2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgd2VyZQotICAgICAgICAgIHJl YWxseSB0dXJuZWQgb2ZmLiBJZiB0aGV5IHdlcmUgbm90IHJlYWxseSB0dXJuZWQgb2ZmLCB0aGVu IHRoZXkKLSAgICAgICAgICBhcmUgY2FuY2VsZWQgcGVybWFuZW50bHkuIFJldHVybnM6Ci0gICAg ICAgICAgICAwIG9uIHN1Y2Nlc3MKLSAgICAgICAgICAgIG5vbnplcm8gb24gZmFpbHVyZQotCi00 LkUuMi40LiBDb25zb2xlLVJlbGF0ZWQgRnVuY3Rpb25zCi0KLSAgIFRoZXNlIHJlbGF0ZSB0byB0 aGUgcHJvZ3JhbSdzICJjb25zb2xlIiwgb3IgY29udHJvbGxpbmcgdGVybWluYWwsIGkuZS4KLSAg IHRoZSB0ZXJtaW5hbCB0aGF0IHRoZSB1c2VyIGlzIGxvZ2dlZCBpbiBvbiBhbmQgdHlwZXMgY29t bWFuZHMgYXQsIG9yIG9uCi0gICBhIFBDIG9yIHdvcmtzdGF0aW9uLCB0aGUgYWN0dWFsIGtleWJv YXJkIGFuZCBzY3JlZW4uCi0KLSAgIGludAotICAgICAgICAgIGNvbmJpbihlc2MpIGNoYXIgZXNj OwotICAgICAgICAgIFB1dHMgdGhlIGNvbnNvbGUgaW50byAiYmluYXJ5IiBtb2RlLCBzbyB0aGF0 IEtlcm1pdCdzIGNvbW1hbmQKLSAgICAgICAgICBwYXJzZXIgY2FuIGNvbnRyb2wgZWNob2luZyBh bmQgb3RoZXIgdHJlYXRtZW50IG9mIGNoYXJhY3RlcnMKLSAgICAgICAgICB0aGF0IHRoZSB1c2Vy IHR5cGVzLiBlc2MgaXMgdGhlIGNoYXJhY3RlciB0aGF0IHdpbGwgYmUgdXNlZCB0bwotICAgICAg ICAgIGdldCBLZXJtaXQncyBhdHRlbnRpb24gZHVyaW5nIHBhY2tldCBtb2RlOyBwdXRzIHRoaXMg aW4gYSBnbG9iYWwKLSAgICAgICAgICBwbGFjZS4gU2V0cyB0aGUgY2t4ZWNoIHZhcmlhYmxlLiBS ZXR1cm5zOgotICAgICAgICAgICAtMTogb24gZXJyb3IuCi0gICAgICAgICAgICAwOiBvbiBzdWNj ZXNzLgotCi0gICBpbnQKLSAgICAgICAgICBjb25jYihlc2MpIGNoYXIgZXNjOwotICAgICAgICAg IFB1dCBjb25zb2xlIGluICJjYnJlYWsiIChzaW5nbGUtY2hhcmFjdGVyIHdha2V1cCkgbW9kZS4g VGhhdCBpcywKLSAgICAgICAgICBlbnN1cmUgdGhhdCBlYWNoIGNvbnNvbGUgY2hhcmFjdGVyIGlz IGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbQotICAgICAgICAgIGltbWVkaWF0ZWx5IHdoZW4gdGhl IHVzZXIgdHlwZXMgaXQuIE90aGVyd2lzZSBqdXN0IGxpa2UKLSAgICAgICAgICBjb25iaW4oKS4g UmV0dXJuczoKLSAgICAgICAgICAgLTE6IG9uIGVycm9yLgotICAgICAgICAgICAgMDogb24gc3Vj Y2Vzcy4KLQotICAgaW50Ci0gICAgICAgICAgY29uY2hrKCkKLSAgICAgICAgICBSZXR1cm5zIGEg bnVtYmVyLCAwIG9yIGdyZWF0ZXIsIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3YWl0aW5nCi0g ICAgICAgICAgdG8gYmUgcmVhZCBmcm9tIHRoZSBjb25zb2xlLCBpLmUuIHRoZSBudW1iZXIgb2Yg Y2hhcmFjdGVycyB0aGF0Ci0gICAgICAgICAgdGhlIHVzZXIgaGFzIHR5cGVkIHRoYXQgaGF2ZSBu b3QgYmVlbiByZWFkIHlldCBieSBLZXJtaXQuCi0KLSAgIGxvbmcKLSAgICAgICAgICBjb25nc3Bk KCk7Ci0gICAgICAgICAgUmV0dXJucyB0aGUgc3BlZWQgKCJiYXVkIHJhdGUiKSBvZiB0aGUgY29u dHJvbGxpbmcgdGVybWluYWwsIGlmCi0gICAgICAgICAga25vd24sIG90aGVyd2lzZSAtMUwuCi0K LSAgIGludAotICAgICAgICAgIGNvbmdrcyh0aW1vKSBpbnQgdGltbzsKLSAgICAgICAgICBHZXQg S2V5Ym9hcmQgU2NhbmNvZGUuIFJlYWRzIGEga2V5Ym9hcmQgc2NhbiBjb2RlIGZyb20gdGhlCi0g ICAgICAgICAgcGh5c2ljYWwgY29uc29sZSBrZXlib2FyZC4gSWYgdGhlIHRpbW8gcGFyYW1ldGVy IGlzIGdyZWF0ZXIgdGhhbgotICAgICAgICAgIHplcm8sIHRoZW4gdGltZXMgb3V0IGFuZCByZXR1 cm5zIC0yIGlmIG5vIGNoYXJhY3RlciBhcHBlYXJzCi0gICAgICAgICAgd2l0aGluIHRoZSBnaXZl biBudW1iZXIgb2Ygc2Vjb25kcy4gVXBvbiBhbnkgb3RoZXIga2luZCBvZgotICAgICAgICAgIGVy cm9yLCByZXR1cm5zIC0xLiBVcG9uIHN1Y2Nlc3MgcmV0dXJucyBhIHNjYW4gY29kZSwgd2hpY2gg bWF5Ci0gICAgICAgICAgYmUgYW55IHBvc2l0aXZlIGludGVnZXIuIEZvciBzaXR1YXRpb25zIHdo ZXJlIHNjYW4gY29kZXMgY2Fubm90Ci0gICAgICAgICAgYmUgcmVhZCAoZm9yIGV4YW1wbGUsIHdo ZW4gYW4gQVNDSUkgdGVybWluYWwgaXMgdXNlZCBhcyB0aGUKLSAgICAgICAgICBqb2IncyBjb250 cm9sbGluZyB0ZXJtaW5hbCksIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvCi0gICAgICAg ICAgY29uaW5jKCksIGkuZS4gaXQgcmV0dXJucyBhbiA4LWJpdCBjaGFyYWN0ZXIgdmFsdWUuIGNv bmdrcygpIGlzCi0gICAgICAgICAgZm9yIHVzZSB3aXRoIHdvcmtzdGF0aW9ucyB3aG9zZSBrZXli b2FyZHMgaGF2ZSBBbHRlcm5hdGUsCi0gICAgICAgICAgQ29tbWFuZCwgT3B0aW9uLCBhbmQgc2lt aWxhciBtb2RpZmllciBrZXlzLCBhbmQgRnVuY3Rpb24ga2V5cwotICAgICAgICAgIHRoYXQgZ2Vu ZXJhdGUgY29kZXMgZ3JlYXRlciB0aGFuIDI1NS4KLQotICAgaW50Ci0gICAgICAgICAgY29uZ20o KQotICAgICAgICAgIENvbnNvbGUgZ2V0IG1vZGVzLiBHZXRzIHRoZSBjdXJyZW50IGNvbnNvbGUg dGVybWluYWwgbW9kZXMgYW5kCi0gICAgICAgICAgc2F2ZXMgdGhlbSBzbyB0aGF0IGNvbnJlcygp IGNhbiByZXN0b3JlIHRoZW0gbGF0ZXIuIFJldHVybnMgMSBpZgotICAgICAgICAgIGl0IGdvdCB0 aGUgbW9kZXMgT0ssIDAgaWYgaXQgZGlkIG5vdGhpbmcgKGUuZy4gYmVjYXVzZSBLZXJtaXQgaXMK LSAgICAgICAgICBub3QgY29ubmVjdGVkIHdpdGggYW55IHRlcm1pbmFsKSwgLTEgb24gZXJyb3Iu Ci0KLSAgIGludAotICAgICAgICAgIGNvbmluYyh0aW1vKSBpbnQgdGltbzsKLSAgICAgICAgICBD b25zb2xlIElucHV0IENoYXJhY3Rlci4gUmVhZHMgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29uc29s ZS4gSWYKLSAgICAgICAgICB0aGUgdGltbyBwYXJhbWV0ZXIgaXMgZ3JlYXRlciB0aGFuIHplcm8s IHRoZW4gY29uaW5jKCkgdGltZXMgb3V0Ci0gICAgICAgICAgYW5kIHJldHVybnMgLTIgaWYgbm8g Y2hhcmFjdGVyIGFwcGVhcnMgd2l0aGluIHRoZSBnaXZlbiBudW1iZXIKLSAgICAgICAgICBvZiBz ZWNvbmRzLiBVcG9uIGFueSBvdGhlciBraW5kIG9mIGVycm9yLCByZXR1cm5zIC0xLiBVcG9uCi0g ICAgICAgICAgc3VjY2VzcywgcmV0dXJucyB0aGUgY2hhcmFjdGVyIGl0c2VsZiwgd2l0aCBhIHZh bHVlIGluIHRoZSByYW5nZQotICAgICAgICAgIDAtMjU1IGRlY2ltYWwuCi0KLSAgIFZPSUQKLSAg ICAgICAgICBjb25pbnQoZixzKSBTSUdUWVAgKCpmKSgpLCAoKnMpKCk7Ci0gICAgICAgICAgU2V0 cyB0aGUgY29uc29sZSB0byBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgaWYgdGhlIHVzZXIgdHlwZXMg YQotICAgICAgICAgIGtleWJvYXJkIGludGVycnVwdCBjaGFyYWN0ZXIsIGFuZCB0byB0cmFuc2Zl ciBjb250cm9sIHRoZQotICAgICAgICAgIHNpZ25hbC1oYW5kbGluZyBmdW5jdGlvbiBmLiBGb3Ig c3lzdGVtcyB3aXRoIGpvYiBjb250cm9sLCBzIGlzCi0gICAgICAgICAgdGhlIGFkZHJlc3Mgb2Yg dGhlIGZ1bmN0aW9uIHRoYXQgc3VzcGVuZHMgdGhlIGpvYi4gU2V0cyB0aGUKLSAgICAgICAgICBn bG9iYWwgdmFyaWFibGUgImJhY2tncmQiIHRvIHplcm8gaWYgS2VybWl0IGlzIHJ1bm5pbmcgaW4g dGhlCi0gICAgICAgICAgZm9yZWdyb3VuZCwgYW5kIHRvIG5vbnplcm8gaWYgS2VybWl0IGlzIHJ1 bm5pbmcgaW4gdGhlCi0gICAgICAgICAgYmFja2dyb3VuZC4gU2VlIGNrY2RlYi5oIGZvciB0aGUg ZGVmaW5pdGlvbiBvZiBTSUdUWVAuIE5vIHJldHVybgotICAgICAgICAgIHZhbHVlLgotCi0gICBW T0lECi0gICAgICAgICAgY29ubm9pKCkKLSAgICAgICAgICBDb25zb2xlIG5vIGludGVycnVwdHMu IERpc2FibGUga2V5Ym9hcmQgaW50ZXJydXB0cyBvbiB0aGUKLSAgICAgICAgICBjb25zb2xlLiBO byByZXR1cm4gdmFsdWUuCi0KLSAgIGludAotICAgICAgICAgIGNvbm9jKGMpIGNoYXIgYzsKLSAg ICAgICAgICBXcml0ZXMgY2hhcmFjdGVyIGMgdG8gdGhlIGNvbnNvbGUgdGVybWluYWwuIFJldHVy bnM6Ci0gICAgICAgICAgMCBvbiBmYWlsdXJlLCAxIG9uIHN1Y2Nlc3MuCi0KLSAgIGludAotICAg ICAgICAgIGNvbm9sKHMpIGNoYXIgKnM7Ci0gICAgICAgICAgV3JpdGVzIHN0cmluZyBzIHRvIHRo ZSBjb25zb2xlLiBSZXR1cm5zIC0xIG9uIGVycm9yLCAwIG9yCi0gICAgICAgICAgZ3JlYXRlciBv biBzdWNjZXNzLgotCi0gICBpbnQKLSAgICAgICAgICBjb25vbGEocykgY2hhciAqc1tdOyB7Ci0g ICAgICAgICAgV3JpdGVzIGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gdGhlIGNvbnNvbGUuIFJldHVy bnMgLTEgb24gZXJyb3IsCi0gICAgICAgICAgMCBvciBncmVhdGVyIG9uIHN1Y2Nlc3MuCi0KLSAg IGludAotICAgICAgICAgIGNvbm9sbChzKSBjaGFyICpzOwotICAgICAgICAgIFdyaXRlcyBzdHJp bmcgcyB0byB0aGUgY29uc29sZSwgZm9sbG93ZWQgYnkgdGhlIG5lY2Vzc2FyeSBsaW5lCi0gICAg ICAgICAgdGVybWluYXRpb24gY2hhcmFjdGVycyB0byBwdXQgdGhlIGNvbnNvbGUgY3Vyc29yIGF0 IHRoZQotICAgICAgICAgIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lLiBSZXR1cm5zIC0xIG9u IGVycm9yLCAwIG9yIGdyZWF0ZXIgb24KLSAgICAgICAgICBzdWNjZXNzLgotCi0gICBpbnQKLSAg ICAgICAgICBjb25yZXMoKQotICAgICAgICAgIFJlc3RvcmVzIHRoZSBjb25zb2xlIHRlcm1pbmFs IHRvIHRoZSBtb2RlcyBvYnRhaW5lZCBieSBjb25nbSgpLgotICAgICAgICAgIFJldHVybnM6IC0x IG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MuCi0KLSAgIGludAotICAgICAgICAgIGNvbnhvKHgscykg aW50IHg7IGNoYXIgKnM7Ci0gICAgICAgICAgV3JpdGUgeCBjaGFyYWN0ZXJzIGZyb20gc3RyaW5n IHMgdG8gdGhlIGNvbnNvbGUuIFJldHVybnMgMCBvcgotICAgICAgICAgIGdyZWF0ZXIgb24gc3Vj Y2VzcywgLTEgb24gZXJyb3IuCi0KLSAgIGNoYXIgKgotICAgICAgICAgIGNvbmtiZygpOwotICAg ICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkZXNpZ25hdG9yIG9mIHRoZSBjb25zb2xl IGtleWJvYXJkCi0gICAgICAgICAgdHlwZS4gRm9yIGV4YW1wbGUsIG9uIGEgUEMsIHRoaXMgZnVu Y3Rpb24gd291bGQgcmV0dXJuICI4OCIsCi0gICAgICAgICAgIjEwMSIsIGV0Yy4gVXBvbiBmYWls dXJlLCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZW1wdHkgc3RyaW5nLgotCi00LkUuMi41LiBD b21tdW5pY2F0aW9ucyBGdW5jdGlvbnMKLQotICAgVGhlIGNvbW11bmljYXRpb24gZGV2aWNlIGlz IHRoZSBkZXZpY2UgdXNlZCBmb3IgdGVybWluYWwgZW11bGF0aW9uIGFuZAotICAgZmlsZSB0cmFu c2Zlci4gSXQgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgZGV2aWNlIGFzIHRoZSBjb25zb2xl LCBhbmQKLSAgIGl0IG1heSBvciBtYXkgbm90IGJlIGEgdGVybWluYWwgKHNlcmlhbC1wb3J0KSBk ZXZpY2U7IGl0IGNvdWxkIGFsc28gYmUKLSAgIGEgbmV0d29yayBjb25uZWN0aW9uLiBGb3IgYnJl dml0eSwgdGhlIGNvbW11bmljYXRpb24gZGV2aWNlIGlzIHJlZmVycmVkCi0gICB0byBoZXJlIGFz IHRoZSAidHR5Ii4gV2hlbiB0aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UgaXMgdGhlIHNhbWUgYXMg dGhlCi0gICBjb25zb2xlIGRldmljZSwgS2VybWl0IGlzIHNhaWQgdG8gYmUgaW4gcmVtb3RlIG1v ZGUuIFdoZW4gdGhlIHR3bwotICAgZGV2aWNlcyBhcmUgZGlmZmVyZW50LCBLZXJtaXQgaXMgaW4g bG9jYWwgbW9kZS4KLQotICAgaW50Ci0gICAgICAgICAgdHRjaGsoKQotICAgICAgICAgIFJldHVy bnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBhcnJpdmVkIGF0IHRoZQotICAg ICAgICAgIGNvbW11bmljYXRpb24gZGV2aWNlIGJ1dCBoYXZlIG5vdCB5ZXQgYmVlbiByZWFkIGJ5 IHR0aW5jKCksCi0gICAgICAgICAgdHRpbmwoKSwgYW5kIGZyaWVuZHMuIElmIGNvbW11bmljYXRp b24gaW5wdXQgaXMgYnVmZmVyZWQgKGFuZCBpdAotICAgICAgICAgIHNob3VsZCBiZSksIHRoaXMg aXMgdGhlIHN1bSBvZiB0aGUgbnVtYmVyIG9mIHVucmVhZCBjaGFyYWN0ZXJzCi0gICAgICAgICAg aW4gS2VybWl0J3MgYnVmZmVyIFBMVVMgdGhlIG51bWJlciBvZiB1bnJlYWQgY2hhcmFjdGVycyBp biB0aGUKLSAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtJ3MgaW50ZXJuYWwgYnVmZmVyLiBUaGUg Y2FsbCBtdXN0IGJlCi0gICAgICAgICAgbm9uZGVzdHJ1Y3RpdmUgYW5kIG5vbmJsb2NraW5nLCBh bmQgYXMgaW5leHBlbnNpdmUgYXMgcG9zc2libGUuCi0gICAgICAgICAgUmV0dXJuczoKLSAgICAg ICAgICAgIDA6IG9yIGdyZWF0ZXIgb24gc3VjY2VzcywKLSAgICAgICAgICAgIDA6IGluIGNhc2Ug b2YgaW50ZXJuYWwgZXJyb3IsCi0gICAgICAgICAgIC0xOiBvciBsZXNzIHdoZW4gaXQgZGV0ZXJt aW5lcyB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBicm9rZW4sCi0gICAgICAgICAgb3IgdGhlcmUg aXMgbm8gY29ubmVjdGlvbi4KLQotICAgICAgICAgIFRoYXQgaXMsIGEgbmVnYXRpdmUgcmV0dXJu IGZyb20gdHRjaGsoKSBzaG91bGQgcmVsaWFibHkgaW5kaWNhdGUKLSAgICAgICAgICB0aGF0IHRo ZXJlIGlzIG5vIHVzYWJsZSBjb25uZWN0aW9uLiBGdXJ0aGVybW9yZSwgdHRjaGsoKSBzaG91bGQK LSAgICAgICAgICBiZSBjYWxsYWJsZSBhdCBhbnkgdGltZSB0byBzZWUgaWYgdGhlIGNvbm5lY3Rp b24gaXMgb3Blbi4gV2hlbgotICAgICAgICAgIHRoZSBjb25uZWN0aW9uIGlzIG9wZW4sIGV2ZXJ5 IGVmZm9ydCBtdXN0IGJlIG1hZGUgdG8gZW5zdXJlIHRoYXQKLSAgICAgICAgICB0dGNoayByZXR1 cm5zIGFuIGFjY3VyYXRlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdhaXRpbmcgdG8gYmUKLSAgICAg ICAgICByZWFkLCByYXRoZXIgdGhhbiBqdXN0IDAgKG5vIGNoYXJhY3RlcnMpIG9yIDEgKDEgb3Ig bW9yZQotICAgICAgICAgIGNoYXJhY3RlcnMpLCBhcyB3b3VsZCBiZSB0aGUgY2FzZSB3aGVuIHdl IHVzZSBzZWxlY3QoKS4gVGhpcwotICAgICAgICAgIGFzcGVjdCBvZiB0dGNoaydzIG9wZXJhdGlv biBpcyBjcml0aWNhbCB0byBzdWNjZXNzZnVsIG9wZXJhdGlvbgotICAgICAgICAgIG9mIHNsaWRp bmcgd2luZG93cyBhbmQgc3RyZWFtaW5nLCBidXQgIm5vbmRlc3RydWN0aXZlIGJ1ZmZlcgotICAg ICAgICAgIHBlZWtpbmciIGlzIGFuIG9ic2N1cmUgb3BlcmF0aW5nIHN5c3RlbSBmZWF0dXJlLCBh bmQgc28gd2hlbiBpdAotICAgICAgICAgIGlzIG5vdCBhdmFpbGFibGUsIHdlIGhhdmUgdG8gZG8g aXQgb3Vyc2VsdmVzIGJ5IG1hbmFnaW5nIG91ciBvd24KLSAgICAgICAgICBpbnRlcm5hbCBidWZm ZXIgYXQgYSBsZXZlbCBiZWxvdyB0dGluYygpLCB0dGlubCgpLCBldGMsIGFzIGluCi0gICAgICAg ICAgdGhlIFVOSVggdmVyc2lvbiAobm9uLUZJT05SRUFEIGNhc2UpLgotCi0gICAgICAgICAgQW4g ZXh0ZXJuYWwgZ2xvYmFsIHZhcmlhYmxlLCBjbHNvbmRpc2MsIGlmIG5vbnplcm8sIG1lYW5zIHRo YXQKLSAgICAgICAgICBpZiBhIHNlcmlhbCBjb25uZWN0aW9uIGRyb3BzIChjYXJyaWVyIG9uLXRv LW9mZiB0cmFuc2l0aW9uCi0gICAgICAgICAgZGV0ZWN0ZWQgYnkgdHRjaGsoKSksIHRoZSBkZXZp Y2Ugc2hvdWxkIGJlIGNsb3NlZCBhbmQgcmVsZWFzZWQKLSAgICAgICAgICBhdXRvbWF0aWNhbGx5 LgotCi0gICBpbnQKLSAgICAgICAgICB0dGNsb3MoKQotICAgICAgICAgIENsb3NlcyB0aGUgY29t bXVuaWNhdGlvbiBkZXZpY2UgKHR0eSBvciBuZXR3b3JrKS4gSWYgdGhlcmUgd2VyZQotICAgICAg ICAgIGFueSBraW5kIG9mIGV4Y2x1c2l2ZSBhY2Nlc3MgbG9ja3MgY29ubmVjdGVkIHdpdGggdGhl IHR0eSwgdGhlc2UKLSAgICAgICAgICBhcmUgcmVsZWFzZWQuIElmIHRoZSB0dHkgaGFzIGEgbW9k ZW0gY29ubmVjdGlvbiwgaXQgaXMgaHVuZyB1cC4KLSAgICAgICAgICBGb3IgdHJ1ZSB0dHkgZGV2 aWNlcywgdGhlIG9yaWdpbmFsIHR0eSBkZXZpY2UgbW9kZXMgYXJlCi0gICAgICAgICAgcmVzdG9y ZWQuIFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBvbiBmYWlsdXJlLgotICAgICAgICAgICAgMDog b24gc3VjY2Vzcy4KLQotICAgaW50Ci0gICAgICAgICAgdHRmbHVpKCkKLSAgICAgICAgICBGbHVz aCBjb21tdW5pY2F0aW9ucyBpbnB1dCBidWZmZXIuIElmIGFueSBjaGFyYWN0ZXJzIGhhdmUKLSAg ICAgICAgICBhcnJpdmVkIGJ1dCBoYXZlIG5vdCB5ZXQgYmVlbiByZWFkLCBkaXNjYXJkIHRoZXNl IGNoYXJhY3RlcnMuIElmCi0gICAgICAgICAgY29tbXVuaWNhdGlvbnMgaW5wdXQgaXMgYnVmZmVy ZWQgYnkgS2VybWl0IChhbmQgaXQgc2hvdWxkIGJlKSwKLSAgICAgICAgICB0aGlzIGZ1bmN0aW9u IGZsdXNoZXMgS2VybWl0J3MgYnVmZmVyIGFzIHdlbGwgYXMgdGhlIG9wZXJhdGluZwotICAgICAg ICAgIHN5c3RlbSdzIGludGVybmFsIGlucHV0IGJ1ZmZlci4gUmV0dXJuczoKLSAgICAgICAgICAg LTE6IG9uIGZhaWx1cmUuCi0gICAgICAgICAgICAwOiBvbiBzdWNjZXNzLgotCi0gICBpbnQKLSAg ICAgICAgICB0dGZsdW8oKQotICAgICAgICAgIEZsdXNoIHR0eSBvdXRwdXQgYnVmZmVyLiBJZiBh bnkgY2hhcmFjdGVycyBoYXZlIGJlZW4gd3JpdHRlbiBidXQKLSAgICAgICAgICBub3QgYWN0dWFs bHkgdHJhbnNtaXR0ZWQgKGUuZy4gYmVjYXVzZSB0aGUgc3lzdGVtIGhhcyBiZWVuCi0gICAgICAg ICAgZmxvdy1jb250cm9sbGVkKSwgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgc3lzdGVtJ3Mgb3V0cHV0 IGJ1ZmZlci4KLSAgICAgICAgICAoTm90ZSwgdGhpcyBmdW5jdGlvbiBpcyBub3QgYWN0dWFsbHkg dXNlZCwgYnV0IGl0IGlzIHJlY29tbWVuZGVkCi0gICAgICAgICAgdGhhdCBhbGwgQy1LZXJtaXQg cHJvZ3JhbW1lcnMgYWRkIGl0IGZvciBmdXR1cmUgdXNlLCBldmVuIGlmIGl0Ci0gICAgICAgICAg aXMgb25seSBhIGR1bW15IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyAwIGFsd2F5cy4pCi0KLSAgIGlu dAotICAgICAgICAgIHR0Z21kbSgpCi0gICAgICAgICAgTG9va3MgZm9yIHRoZSBtb2RlbSBzaWdu YWxzIENUUywgRFNSLCBhbmQgQ1RTLCBhbmQgcmV0dXJucyB0aG9zZQotICAgICAgICAgIHRoYXQg YXJlIG9uIGluIGFzIGl0cyByZXR1cm4gdmFsdWUsIGluIGEgYml0IG1hc2sgYXMgZGVzY3JpYmVk Ci0gICAgICAgICAgZm9yIHR0d21kbSwgaW4gd2hpY2ggYSBiaXQgaXMgb24gKDEpIG9yIG9mZiAo MCkgYWNjb3JkaW5nIHRvCi0gICAgICAgICAgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBzaWdu YWwgaXMgb24gKGFzc2VydGVkKSBvciBvZmYgKG5vdAotICAgICAgICAgIGFzc2VydGVkKS4gUmV0 dXJuIHZhbHVlczoKLSAgICAgICAgICAgLTM6IE5vdCBpbXBsZW1lbnRlZAotICAgICAgICAgICAt MjogaWYgdGhlIGxpbmUgZG9lcyBub3QgaGF2ZSBtb2RlbSBjb250cm9sCi0gICAgICAgICAgIC0x OiBvbiBlcnJvcgotICAgICAgICAgID49MDogb24gc3VjY2Vzcywgd2l0aCBiaXQgbWFzayBjb250 YWluaW5nIHRoZSBtb2RlbSBzaWduYWxzLgotCi0gICBsb25nCi0gICAgICAgICAgdHRnc3BkKCkK LSAgICAgICAgICBSZXR1cm5zIHRoZSBjdXJyZW50IHR0eSBzcGVlZCBpbiBCSVRTIChub3QgQ0hB UkFDVEVSUykgcGVyCi0gICAgICAgICAgc2Vjb25kLCBvciAtMSBpZiBpdCBpcyBub3Qga25vd24g b3IgaWYgdGhlIHR0eSBpcyByZWFsbHkgYQotICAgICAgICAgIG5ldHdvcmssIG9yIHVwb24gYW55 IGtpbmQgb2YgZXJyb3IuIE9uIHN1Y2Nlc3MsIHRoZSBzcGVlZAotICAgICAgICAgIHJldHVybmVk IGlzIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJpdHMgcGVyIHNlY29uZCwgbGlrZSAxMjAwLAotICAg ICAgICAgIDk2MDAsIDE5MjAwLCBldGMuCi0KLSAgIGludAotICAgICAgICAgIHR0Z3dzaXooKQot ICAgICAgICAgIEdldCB0ZXJtaW5hbCB3aW5kb3cgc2l6ZS4gUmV0dXJucyAtMSBvbiBlcnJvciwg MCBpZiB0aGUgd2luZG93Ci0gICAgICAgICAgc2l6ZSBjYW4ndCBiZSBvYnRhaW5lZCwgMSBpZiB0 aGUgd2luZG93IHNpemUgaGFzIGJlZW4KLSAgICAgICAgICBzdWNjZXNzZnVsbHkgb2J0YWluZWQu IFVwb24gc3VjY2VzcywgdGhlIGV4dGVybmFsIGdsb2JhbAotICAgICAgICAgIHZhcmlhYmxlcyB0 dF9yb3dzIGFuZCB0dF9jb2xzIGFyZSBzZXQgdG8gdGhlIG51bWJlciBvZiBzY3JlZW4KLSAgICAg ICAgICByb3dzIGFuZCBudW1iZXIgb2Ygc2NyZWVuIGNvbHVtbnMsIHJlc3BlY3RpdmVseS4gQXMg dGhpcwotICAgICAgICAgIGZ1bmN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBhbGwgY2sqdGlv LmMgbW9kdWxlcywgY2FsbHMgdG8gaXQKLSAgICAgICAgICBtdXN0IGJlIHdyYXBwZWQgaW4gI2lm ZGVmIENLX1RUR1dTSVouLiNlbmRpZi4gTk9URTogVGhpcwotICAgICAgICAgIGZ1bmN0aW9uIG11 c3QgYmUgYXZhaWxhYmxlIHRvIHVzZSB0aGUgVEVMTkVUIE5BV1MgZmVhdHVyZQotICAgICAgICAg IChOZWdvdGlhdGUgQWJvdXQgV2luZG93IFNpemUpIGFzIHdlbGwgYXMgUmxvZ2luLgotCi0gICBp bnQKLSAgICAgICAgICB0dGhhbmcoKQotICAgICAgICAgIEhhbmcgdXAgdGhlIGN1cnJlbnQgdHR5 IGRldmljZS4gRm9yIHJlYWwgdHR5IGRldmljZXMsIHR1cm4gb2ZmCi0gICAgICAgICAgRFRSIGZv ciBhYm91dCAxLzMtMS8yIHNlY29uZCAob3Igb3RoZXIgbGVuZ3RoIG9mIHRpbWUsIGRlcGVuZGlu ZwotICAgICAgICAgIG9uIHRoZSBzeXN0ZW0pLiBJZiB0aGUgdHR5IGlzIHJlYWxseSBhIG5ldHdv cmsgY29ubmVjdGlvbiwgY2xvc2UKLSAgICAgICAgICBpdC4gUmV0dXJuczoKLSAgICAgICAgICAg LTE6IG9uIGZhaWx1cmUuCi0gICAgICAgICAgICAwOiBpZiBpdCBkb2VzIG5vdCBldmVuIHRyeSB0 byBoYW5nIHVwLgotICAgICAgICAgICAgMTogaWYgaXQgYmVsaWV2ZXMgaXQgaHVuZyB1cCBzdWNj ZXNzZnVsbHkuCi0KLSAgIFZPSUQKLSAgICAgICAgICB0dGltb2ZmKCkKLSAgICAgICAgICBUdXJu cyBvZmYgYWxsIHBlbmRpbmcgdGltZXIgaW50ZXJydXB0cy4KLQotICAgaW50Ci0gICAgICAgICAg dHRpbmModGltbykgaW50IHRpbW87IChmdW5jdGlvbiBpcyBvbGQsIHJldHVybiBjb2RlcyBhcmUg bmV3KQotICAgICAgICAgIFJlYWRzIG9uZSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29tbXVuaWNhdGlv biBkZXZpY2UuIElmIHRpbW8gaXMKLSAgICAgICAgICBncmVhdGVyIHRoYW4gemVybywgd2FpdCB0 aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMgYW5kIHRoZW4KLSAgICAgICAgICB0aW1lIG91dCBp ZiBubyBjaGFyYWN0ZXIgYXJyaXZlcywgb3RoZXJ3aXNlIHdhaXQgZm9yZXZlciBmb3IgYQotICAg ICAgICAgIGNoYXJhY3Rlci4gUmV0dXJuczoKLSAgICAgICAgICAgLTM6IGludGVybmFsIGVycm9y IChlLmcuIHR0eSBtb2RlcyBzZXQgd3JvbmcpCi0gICAgICAgICAgIC0yOiBjb21tdW5pY2F0aW9u cyBkaXNjb25uZWN0Ci0gICAgICAgICAgIC0xOiB0aW1lb3V0IG9yIG90aGVyIGVycm9yCi0gICAg ICAgICAgPj0wOiB0aGUgY2hhcmFjdGVyIHRoYXQgd2FzIHJlYWQuCi0gICAgICAgICAgSXQgaXMg SElHSExZIFJFQ09NTUVOREVEIHRoYXQgdHRpbmMoKSBiZSBpbnRlcm5hbGx5IGJ1ZmZlcmVkIHNv Ci0gICAgICAgICAgdGhhdCBjYWxscyB0byBpdCBhcmUgcmVsYXRpdmVseSBpbmV4cGVuc2l2ZS4g SWYgaXQgaXMgcG9zc2libGUKLSAgICAgICAgICB0byB0byBpbXBsZW1lbnQgdHRpbmMoKSBhcyBh IG1hY3JvLCBhbGwgdGhlIGJldHRlciwgZm9yIGV4YW1wbGUKLSAgICAgICAgICBzb21ldGhpbmcg bGlrZToKLQotICAjZGVmaW5lIHR0aW5jKHQpICggKC0tdHhidWZuID49IDApID8gdHhidWZbdHRi dWZwKytdIDogdHhidWZyKHQpICkKLQotICAgICAgICAgIChzZWUgZGVzY3JpcHRpb24gb2YgdHhi dWZyKCkgYmVsb3cpCi0KLSAgIGludAotICAgICAgICAgIHR0aW5sKGRlc3QsbWF4LHRpbW8sZW9s LHN0YXJ0LHR1cm4pIGludCBtYXgsdGltbyx0dXJuOyBDSEFSCi0gICAgICAgICAgKmRlc3QsIGVv bCwgc3RhcnQ7Ci0gICAgICAgICAgdHRpbmwoKSBpcyBLZXJtaXQncyBwYWNrZXQgcmVhZGVyLiBS ZWFkcyBhIHBhY2tldCBmcm9tIHRoZQotICAgICAgICAgIGNvbW11bmljYXRpb25zIGRldmljZSwg b3IgdXAgdG8gbWF4IGNoYXJhY3RlcnMsIHdoaWNoZXZlciBvY2N1cnMKLSAgICAgICAgICBmaXJz dC4gQSBsaW5lIGlzIGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgc3RhcnRpbmcgd2l0aCB0aGUgc3Rh cnQKLSAgICAgICAgICBjaGFyYWN0ZXIgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgY2hhcmFjdGVy IGdpdmVuIGluIGVvbCBvcgotICAgICAgICAgIHVudGlsIHRoZSBsZW5ndGggaXMgZXhoYXVzdGVk LCBvciwgaWYgdHVybiAhPSAwLCB1bnRpbCB0aGUgbGluZQotICAgICAgICAgIHR1cm5hcm91bmQg Y2hhcmFjdGVyICh0dXJuKSBpcyByZWFkLiBJZiB0dXJuIGlzIDAsIHR0aW5sKCkKLSAgICAgICAg ICAqc2hvdWxkKiB1c2UgdGhlIHBhY2tldCBsZW5ndGggZmllbGQgdG8gZGV0ZWN0IHRoZSBlbmQs IHRvIGFsbG93Ci0gICAgICAgICAgZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBlb2wgY2hh cmFjdGVyIGFwcGVhcnMgdW5wcmVmaXhlZCBpbgotICAgICAgICAgIHRoZSBwYWNrZXQgZGF0YS4g KFRoZSB0dXJuYXJvdW5kIGNoYXJhY3RlciBpcyBmb3IgaGFsZi1kdXBsZXgKLSAgICAgICAgICBs aW5lbW9kZSBjb25uZWN0aW9ucy4pCi0KLSAgICAgICAgICBJZiB0aW1vIGlzIGdyZWF0ZXIgdGhh biB6ZXJvLCB0dGlubCgpIHRpbWVzIG91dCBpZiB0aGUgZW9sCi0gICAgICAgICAgY2hhcmFjdGVy IGlzIG5vdCBlbmNvdW50ZXJlZCB3aXRoaW4gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzCi0g ICAgICAgICAgYW5kIHJldHVybnMgLTEuCi0KLSAgICAgICAgICBUaGUgY2hhcmFjdGVycyB0aGF0 IHdlcmUgaW5wdXQgYXJlIGNvcGllZCBpbnRvICJkZXN0IiB3aXRoIHRoZWlyCi0gICAgICAgICAg cGFyaXR5IGJpdHMgc3RyaXBwZWQgaWYgcGFyaXR5IGlzIG5vdCBub25lLiBUaGUgZmlyc3QgY2hh cmFjdGVyCi0gICAgICAgICAgY29waWVkIGludG8gZGVzdCBzaG91bGQgYmUgdGhlIHN0YXJ0IGNo YXJhY3RlciwgYW5kIHRoZSBsYXN0Ci0gICAgICAgICAgc2hvdWxkIGJlIHRoZSBmaW5hbCBjaGFy YWN0ZXIgb2YgdGhlIHBhY2tldCAodGhlIGxhc3QgYmxvY2sKLSAgICAgICAgICBjaGVjayBjaGFy YWN0ZXIpLiB0dGlubCgpIHNob3VsZCBhbHNvIGFic29yYiBhbmQgZGlzY2FyZCB0aGUgZW9sCi0g ICAgICAgICAgYW5kIHR1cm4gY2hhcmFjdGVycywgYW5kIGFueSBvdGhlciBjaGFyYWN0ZXJzIHRo YXQgYXJlIHdhaXRpbmcKLSAgICAgICAgICB0byBiZSByZWFkLCB1cCB1bnRpbCB0aGUgbmV4dCBz dGFydCBjaGFyYWN0ZXIsIHNvIHRoYXQKLSAgICAgICAgICBzdWJzZXF1ZW50IGNhbGxzIHRvIHR0 Y2hrKCkgd2lsbCBub3Qgc3VjY2VlZCBzaW1wbHkgYmVjYXVzZQotICAgICAgICAgIHRoZXJlIGFy ZSBzb21lIHRlcm1pbmF0b3JzIHN0aWxsIHNpdHRpbmcgaW4gdGhlIGJ1ZmZlciB0aGF0Ci0gICAg ICAgICAgdHRpbmwoKSBkaWRuJ3QgcmVhZC4gVGhpcyBvcGVyYXRpb24sIGlmIHBlcmZvcm1lZCwg TVVTVCBOT1QKLSAgICAgICAgICBCTE9DSyAoc28gaWYgaXQgY2FuJ3QgYmUgcGVyZm9ybWVkIGlu IGEgZ3VhcmFudGVlZCBub25ibG9ja2luZwotICAgICAgICAgIHdheSwgZG9uJ3QgZG8gaXQpLgot Ci0gICAgICAgICAgT24gc3VjY2VzcywgdHRpbmwoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hh cmFjdGVycyByZWFkLgotICAgICAgICAgIE9wdGlvbmFsbHksIHR0aW5sKCkgY2FuIHNlbnNlIHRo ZSBwYXJpdHkgb2YgaW5jb21pbmcgcGFja2V0cy4gSWYKLSAgICAgICAgICBpdCBkb2VzIHRoaXMs IHRoZW4gaXQgc2hvdWxkIHNldCB0aGUgZ2xvYmFsIHZhcmlhYmxlIHR0cHJ0eQotICAgICAgICAg IGFjY29yZGluZ2x5LiB0dGlubCgpIHNob3VsZCBiZSBjb2RlZCB0byBiZSBhcyBlZmZpY2llbnQg YXMKLSAgICAgICAgICBwb3NzaWJsZSwgc2luY2UgaXQgaXMgYXQgdGhlICJpbm5lciBsb29wIiBv ZiBwYWNrZXQgcmVjZXB0aW9uLgotICAgICAgICAgIHR0aW5sKCkgcmV0dXJuczoKLSAgICAgICAg ICAgLTE6IFRpbWVvdXQgb3Igb3RoZXIgcG9zc2libHkgY29ycmVjdGFibGUgZXJyb3IuCi0gICAg ICAgICAgIC0yOiBJbnRlcnJ1cHRlZCBmcm9tIGtleWJvYXJkLgotICAgICAgICAgICAtMzogVW5j b3JyZWN0YWJsZSBpL28gZXJyb3IgLS0gY29ubmVjdGlvbiBsb3N0LCBjb25maWd1cmF0aW9uCi0g ICAgICAgICAgcHJvYmxlbSwgZXRjLgotICAgICAgICAgID49MDogb24gc3VjY2VzcywgdGhlIG51 bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBhY3R1YWxseQotICAgICAgICAgIHJlYWQgYW5k IHBsYWNlZCBpbiB0aGUgZGVzdCBidWZmZXIsIG5vdCBjb3VudGluZyB0aGUgdHJhaWxpbmcKLSAg ICAgICAgICBudWxsLgotCi0gICBpbnQKLSAgICAgICAgICB0dG9jKGMpIGNoYXIgYzsKLSAgICAg ICAgICBPdXRwdXRzIHRoZSBjaGFyYWN0ZXIgYyB0byB0aGUgY29tbXVuaWNhdGlvbiBsaW5lLiBJ ZiB0aGUKLSAgICAgICAgICBvcGVyYXRpb24gZmFpbHMgdG8gY29tcGxldGUgd2l0aGluIHR3byBz ZWNvbmRzLCB0aGlzIGZ1bmN0aW9uCi0gICAgICAgICAgcmV0dXJucyAtMS4gT3RoZXJ3aXNlIGl0 IHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzCi0gICAgICAgICAgYWN0dWFsbHkgd3Jp dHRlbiB0byB0aGUgdHR5ICgwIG9yIDEpLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5Ci0gICAg ICAgICAgYmUgdXNlZCBmb3IgaW50ZXJhY3RpdmUsIGNoYXJhY3Rlci1tb2RlIG9wZXJhdGlvbnMs IGxpa2UKLSAgICAgICAgICB0ZXJtaW5hbCBjb25uZWN0aW9uLCBzY3JpcHQgZXhlY3V0aW9uLCBk aWFsZXIgaS9vLCB3aGVyZSB0aGUKLSAgICAgICAgICBvdmVyaGVhZCBvZiB0aGUgc2lnbmFscyBh bmQgYWxhcm1zIGRvZXMgbm90IGNyZWF0ZSBhIGJvdHRsZW5lY2suCi0gICAgICAgICAgKFRISVMg REVTQ1JJUFRJT04gTkVFRFMgSU1QUk9WRU1FTlQgLS0gSWYgdGhlIG9wZXJhdGlvbiBmYWlscwot ICAgICAgICAgIHdpdGhpbiBhICJjZXJ0YWluIGFtb3VudCBvZiB0aW1lIi4uLiB3aGljaCBtaWdo dCBiZSBkZXBlbmRlbnQgb24KLSAgICAgICAgICB0aGUgY29tbXVuaWNhdGlvbiBtZXRob2QsIHNw ZWVkLCBldGMuIEluIHBhcnRpY3VsYXIsCi0gICAgICAgICAgZmxvdy1jb250cm9sIGRlYWRsb2Nr cyBtdXN0IGJlIGFjY291bnRlZCBmb3IgYW5kIGJyb2tlbiBvdXQgb2YKLSAgICAgICAgICB0byBw cmV2ZW50IHRoZSBwcm9ncmFtIGZyb20gaGFuZ2luZyBpbmRlZmluaXRlbHksIGV0Yy4pCi0KLSAg IGludAotICAgICAgICAgIHR0b2wocyxuKSBpbnQgbjsgY2hhciAqczsKLSAgICAgICAgICBLZXJt aXQncyBwYWNrZXQgd3JpdGVyLiBXcml0ZXMgdGhlIG4gY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5n Ci0gICAgICAgICAgcG9pbnRlZCB0byB0byBieSBzLiBOT1RFOiBJdCBpcyB0dG9sJ3MgcmVzcG9u c2liaWxpdHkgdG8gd3JpdGUKLSAgICAgICAgICBBTEwgb2YgdGhlIGNoYXJhY3RlcnMsIG5vdCBq dXN0IHNvbWUgb2YgdGhlbS4gUmV0dXJuczoKLSAgICAgICAgICAgLTE6IG9uIGEgcG9zc2libHkg Y29ycmVjdGFibGUgZXJyb3IgKHNvIGl0IGNhbiBiZSByZXRyaWVkKS4KLSAgICAgICAgICAgLTM6 IG9uIGEgZmF0YWwgZXJyb3IsIGUuZy4gY29ubmVjdGlvbiBsb3N0LgotICAgICAgICAgID49MDog b24gc3VjY2VzcywgdGhlIGFjdHVhbCBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuICh0aGUK LSAgICAgICAgICBzcGVjaWZpYyBudW1iZXIgaXMgbm90IGFjdHVhbGx5IHVzZWQgZm9yIGFueXRo aW5nKS4KLQotICAgaW50Ci0gICAgICAgICAgdHRvcGVuKHR0bmFtZSxsY2wsbW9kZW0sdGltbykg Y2hhciAqdHRuYW1lOyBpbnQgKmxjbCwgbW9kZW0sCi0gICAgICAgICAgdGltbzsKLSAgICAgICAg ICBPcGVucyBhIHR0eSBkZXZpY2UsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IG9wZW4uIHR0b3BlbiBt dXN0IGNoZWNrCi0gICAgICAgICAgdG8gbWFrZSBzdXJlIHRoZSBTQU1FIGRldmljZSBpcyBub3Qg YWxyZWFkeSBvcGVuOyBpZiBpdCBpcywKLSAgICAgICAgICB0dG9wZW4gcmV0dXJucyBzdWNjZXNz ZnVsbHkgd2l0aG91dCBkb2luZyBhbnl0aGluZy4gSWYgYQotICAgICAgICAgIERJRkZFUkVOVCBk ZXZpY2UgaXMgY3VycmVudGx5IG9wZW4sIHR0b3BlbigpIG11c3QgY2FsbCB0dGNsb3MoKQotICAg ICAgICAgIHRvIGNsb3NlIGl0IGJlZm9yZSBvcGVuaW5nIHRoZSBuZXcgb25lLgotCi0gICAgICAg IFBhcmFtZXRlcnM6Ci0KLSAgICAgICAgICAgICAgdHRuYW1lOgotICAgICAgICAgICAgICAgICAg ICAgIGNoYXJhY3RlciBzdHJpbmcgLSBkZXZpY2UgbmFtZSBvciBuZXR3b3JrIGhvc3QgbmFtZS4K LQotICAgICAgICAgICAgICBsY2w6Ci0gICAgICAgICAgICAgICAgICAgICAgSWYgY2FsbGVkIHdp dGggbGNsIDwgMCwgc2V0cyB2YWx1ZSBvZiBsY2wgYXMKLSAgICAgICAgICAgICAgICAgICAgICBm b2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAgIDA6IHRoZSB0ZXJtaW5hbCBuYW1lZCBieSB0 dG5hbWUgaXMgdGhlIGpvYidzCi0gICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxpbmcgdGVy bWluYWwuCi0gICAgICAgICAgICAgICAgICAgICAgMTogdGhlIHRlcm1pbmFsIG5hbWVkIGJ5IHR0 bmFtZSBpcyBub3QgdGhlIGpvYidzCi0gICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxpbmcg dGVybWluYWwuCi0gICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGRldmljZSBpcyBhbHJlYWR5 IG9wZW4sIG9yIGlmIHRoZSByZXF1ZXN0ZWQKLSAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ug Y2FuJ3QgYmUgb3BlbmVkLCB0aGVuIGxjbCByZW1haW5zIChhbmQgaXMKLSAgICAgICAgICAgICAg ICAgICAgICByZXR1cm5lZCBhcykgLTEuCi0KLSAgICAgICAgICAgICAgbW9kZW06Ci0gICAgICAg ICAgICAgICAgICAgICAgTGVzcyB0aGFuIHplcm86IHRoaXMgaXMgdGhlIG5lZ2F0aXZlIG9mIHRo ZSBuZXR3b3JrCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZSwgYW5kIHR0bmFtZSBpcyBhIG5l dHdvcmsgaG9zdCBuYW1lLiBOZXR3b3JrCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZXMgKGZy b20gWzEzNF1ja2NuZXQuaDoKLQotICBORVRfVENQQiAxICAgVENQL0lQIEJlcmtlbGV5IChzb2Nr ZXQpICAoaW1wbGVtZW50ZWQgaW4gWzEzNV1ja3V0aW8uYykKLSAgTkVUX1RDUEEgMiAgIFRDUC9J UCBBVCZUIChzdHJlYW1zKSAgICAgKG5vdCB5ZXQgaW1wbGVtZW50ZWQpCi0gIE5FVF9ERUMgIDMg ICBERUNuZXQgICAgICAgICAgICAgICAgICAgIChub3QgeWV0IGltcGxlbWVudGVkKQotCi0gICAg ICAgICAgICAgICAgICAgICAgWmVybyBvciBncmVhdGVyOiB0dG5hbWUgaXMgYSB0ZXJtaW5hbCBk ZXZpY2UgbmFtZS4KLSAgICAgICAgICAgICAgICAgICAgICBaZXJvIG1lYW5zIGEgZGlyZWN0IGNv bm5lY3Rpb24gKGRvbid0IHVzZSBtb2RlbQotICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbHMp LiBQb3NpdGl2ZSBtZWFucyB1c2UgbW9kZW0gc2lnbmFscyBkZXBlbmRpbmcKLSAgICAgICAgICAg ICAgICAgICAgICBvbiB0aGUgY3VycmVudCBzZXR0aW5nIG9mIHR0Y2FyciAoc2VlIHR0c2NhcnIo KSkuCi0KLSAgICAgICAgICAgICAgdGltbzoKLSAgICAgICAgICAgICAgICAgICAgICA+IDA6IG51 bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIG9wZW4oKSB0byByZXR1cm4KLSAgICAgICAgICAg ICAgICAgICAgICBiZWZvcmUgdGltaW5nIG91dC4KLSAgICAgICAgICAgICAgICAgICAgICA8PTA6 IG5vIHRpbWVyLCB3YWl0IGZvcmV2ZXIgKGUuZy4gZm9yIGluY29taW5nCi0gICAgICAgICAgICAg ICAgICAgICAgY2FsbCkuCi0gICAgICAgICAgICAgICAgICAgICAgRm9yIHJlYWwgdHR5IGRldmlj ZXMsIHR0b3BlbigpIGF0dGVtcHRzIHRvIGdhaW4KLSAgICAgICAgICAgICAgICAgICAgICBleGNs dXNpdmUgYWNjZXNzIHRvIHRoZSB0dHkgZGV2aWNlLCBmb3IgZXhhbXBsZSBpbgotICAgICAgICAg ICAgICAgICAgICAgIFVOSVggYnkgY3JlYXRpbmcgYSAibG9ja2ZpbGUiIChpbiBvdGhlciBvcGVy YXRpbmcKLSAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zLCBsaWtlIFZNUywgZXhjbHVzaXZl IGFjY2VzcyBwcm9iYWJseQotICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzIG5vIHNwZWNp YWwgYWN0aW9uKS4KLQotICAgICAgICBTaWRlIGVmZmVjdHM6Ci0gICAgICAgICAgICAgICAgQ29w aWVzIGl0cyBhcmd1bWVudHMgYW5kIHRoZSB0dHkgZmlsZSBkZXNjcmlwdG9yIHRvIGdsb2JhbAot ICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0aGF0IGFyZSBhdmFpbGFibGUgdG8gdGhlIG90aGVy IHR0eS1yZWxhdGVkCi0gICAgICAgICAgICAgICAgZnVuY3Rpb25zLCB3aXRoIHRoZSBsY2wgdmFs dWUgYWx0ZXJlZCBhcyBkZXNjcmliZWQgYWJvdmUuCi0gICAgICAgICAgICAgICAgR2V0cyBhbGwg cGFyYW1ldGVycyBhbmQgc2V0dGluZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBsaW5lCi0gICAgICAg ICAgICAgICAgYW5kIHB1dHMgdGhlbSBpbiBhIGdsb2JhbCBhcmVhLCBzbyB0aGF0IHRoZXkgY2Fu IGJlCi0gICAgICAgICAgICAgICAgcmVzdG9yZWQgYnkgdHRyZXMoKSwgZS5nLiB3aGVuIHRoZSBk ZXZpY2UgaXMgY2xvc2VkLgotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgICAgICAgICAw OiBvbiBzdWNjZXNzCi0gICAgICAgICAgICAgICAgIC01OiBpZiBkZXZpY2UgaXMgaW4gdXNlCi0g ICAgICAgICAgICAgICAgIC00OiBpZiBhY2Nlc3MgdG8gZGV2aWNlIGlzIGRlbmllZAotICAgICAg ICAgICAgICAgICAtMzogaWYgYWNjZXNzIHRvIGxvY2sgbWVjaGFuaXNtIGRlbmllZAotICAgICAg ICAgICAgICAgICAtMjogdXBvbiB0aW1lb3V0IHdhaXRpbmcgZm9yIGRldmljZSB0byBvcGVuCi0g ICAgICAgICAgICAgICAgIC0xOiBvbiBvdGhlciBlcnJvcgotCi0gICBpbnQKLSAgICAgICAgICB0 dHBrdChzcGVlZCxmbG93LHBhcml0eSkgbG9uZyBzcGVlZDsgaW50IGZsb3csIHBhcml0eTsKLSAg ICAgICAgICBQdXRzIHRoZSBjdXJyZW50bHkgb3BlbiB0dHkgZGV2aWNlIGludG8gdGhlIGFwcHJv cHJpYXRlIG1vZGVzCi0gICAgICAgICAgZm9yIHRyYW5zbWl0dGluZyBhbmQgcmVjZWl2aW5nIEtl cm1pdCBwYWNrZXRzLgotCi0gICAgICAgIEFyZ3VtZW50czoKLQotICAgICAgICAgICAgICBzcGVl ZDoKLSAgICAgICAgICAgICAgICAgICAgICBpZiBzcGVlZCA+IC0xLCBhbmQgdGhlIGRldmljZSBp cyBhIHRydWUgdHR5IGRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICBhbmQgS2VybWl0IGlz IGluIGxvY2FsIG1vZGUsIHR0cGt0IGFsc28gc2V0cyB0aGUKLSAgICAgICAgICAgICAgICAgICAg ICBzcGVlZC4KLQotICAgICAgICAgICAgICBmbG93OgotICAgICAgICAgICAgICAgICAgICAgIGlm IGluIHRoZSByYW5nZSAwLTMsIHR0cGt0IHNlbGVjdHMgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAg ICAgICAgICAgICAgICAgICB0eXBlIG9mIGZsb3cgY29udHJvbC4gQ3VycmVudGx5IDAgaXMgZGVm aW5lZCBhcyBubwotICAgICAgICAgICAgICAgICAgICAgIGZsb3cgY29udHJvbCwgMSBpcyBYb24v WG9mZiwgYW5kIG5vIG90aGVyIHR5cGVzIGFyZQotICAgICAgICAgICAgICAgICAgICAgIGRlZmlu ZWQuIElmIChhbmQgdGhpcyBpcyBhIGhvcnJpYmxlIGhhY2ssIGJ1dCBpdAotICAgICAgICAgICAg ICAgICAgICAgIGdvZXMgYmFjayBtYW55IHllYXJzIGFuZCB3aWxsIGJlIGhhcmQgdG8gZXJhZGlj YXRlKQotICAgICAgICAgICAgICAgICAgICAgIGZsb3cgaXMgNCwgdGhlbiB0aGUgYXBwcm9wcmlh dGUgdHR5IG1vZGVzIGFyZSBzZXQKLSAgICAgICAgICAgICAgICAgICAgICBmb3IgbW9kZW0gZGlh bGluZywgYSBzcGVjaWFsIGNhc2UgaW4gd2hpY2ggd2UgdGFsawotICAgICAgICAgICAgICAgICAg ICAgIHRvIGEgbW9kZW0tY29udHJvbGxlZCBsaW5lIHdpdGhvdXQgcmVxdWlyaW5nCi0gICAgICAg ICAgICAgICAgICAgICAgY2Fycmllci4gSWYgZmxvdyBpcyA1LCB0aGVuIHdlIHJlcXVpcmUgY2Fy cmllci4KLQotICAgICAgICAgICAgICBwYXJpdHk6Ci0gICAgICAgICAgICAgICAgICAgICAgVGhp cyBpcyBzaW1wbHkgY29waWVkIGludG8gYSBnbG9iYWwgdmFyaWFibGUgc28gdGhhdAotICAgICAg ICAgICAgICAgICAgICAgIG90aGVyIGZ1bmN0aW9ucyAobGlrZSB0dGlubCwgdHRpbmMsIGV0Yykg Y2FuIHVzZSBpdC4KLQotICAgICAgICBTaWRlIGVmZmVjdHM6Ci0gICAgICAgICAgICAgICAgQ29w aWVzIGl0cyBhcmd1bWVudHMgdG8gZ2xvYmFsIHZhcmlhYmxlcywgZmx1c2hlcyB0aGUKLSAgICAg ICAgICAgICAgICB0ZXJtaW5hbCBkZXZpY2UgaW5wdXQgYnVmZmVyLgotCi0gICAgICAgIFJldHVy bnM6Ci0gICAgICAgICAgICAgICAgIC0xOiBvbiBlcnJvci4KLSAgICAgICAgICAgICAgICAgIDA6 IG9uIHN1Y2Nlc3MuCi0KLSAgIGludAotICAgICAgICAgIHR0c2V0ZmxvdyhpbnQpCi0gICAgICAg ICAgRW5hYmxlcyB0aGUgZ2l2ZW4gdHlwZSBvZiBmbG93IGNvbnRyb2wgb24gdGhlIG9wZW4gc2Vy aWFsCi0gICAgICAgICAgY29tbXVuaWNhdGlvbnMgZGV2aWNlIGltbWVkaWF0ZWx5LiBBcmd1bWVu dHMgYXJlIHRoZSBGTE9feHh4Ci0gICAgICAgICAgdmFsdWVzIGZyb20gY2tjZGViLmgsIGV4Y2Vw dCBGTE9fRElBTCwgRkxPX0RJQVgsIG9yIEZMT19BVVRPLAotICAgICAgICAgIHdoaWNoIGFyZSBu b3QgYWN0dWFsIGZsb3ctY29udHJvbCB0eXBlcy4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsCi0gICAg ICAgICAgLTEgb24gZmFpbHVyZS4KLQotICAgI2lmZGVmIFRUU1BETElTVAotICAgbG9uZyAqCi0g ICAgICAgICAgdHRzcGRsaXN0KCkKLSAgICAgICAgICBSZXR1cm5zIGEgcG9pbnRlciB0byBhbiBh cnJheSBvZiBsb25ncywgb3IgTlVMTCBvbiBmYWlsdXJlLiBPbgotICAgICAgICAgIHN1Y2Nlc3Ms IGVsZW1lbnQgMCBvZiB0aGUgYXJyYXkgY29udGFpbnMgbnVtYmVyLCBuLCBpbmRpY2F0aW5nCi0g ICAgICAgICAgaG93IG1hbnkgZm9sbG93LiBFbGVtZW50cyAxLW4gYXJlIHNlcmlhbCBzcGVlZHMs IGV4cHJlc3NlZCBpbgotICAgICAgICAgIGJpdHMgcGVyIHNlY29uZCwgdGhhdCBhcmUgbGVnYWwg b24gdGhpcyBwbGF0Zm9ybS4gVGhlIHVzZXIKLSAgICAgICAgICBpbnRlcmZhY2UgbWF5IHVzZSB0 aGlzIGxpc3QgdG8gY29uc3RydWN0IGEgbWVudSwga2V5d29yZCB0YWJsZSwKLSAgICAgICAgICBl dGMuCi0KLSAgICNlbmRpZiAvKiBUVFNQRExJU1QgKi8KLQotICAgaW50Ci0gICAgICAgICAgdHRy ZXMoKQotICAgICAgICAgIFJlc3RvcmVzIHRoZSB0dHkgZGV2aWNlIHRvIHRoZSBtb2RlcyBhbmQg c2V0dGluZ3MgdGhhdCB3ZXJlIGluCi0gICAgICAgICAgZWZmZWN0IGF0IHRoZSB0aW1lIGl0IHdh cyBvcGVuZWQgKHNlZSB0dG9wZW4pLiBSZXR1cm5zOgotICAgICAgICAgICAtMTogb24gZXJyb3Iu Ci0gICAgICAgICAgICAwOiBvbiBzdWNjZXNzLgotCi0gICBpbnQKLSAgICAgICAgICB0dHJ1bmNt ZChzdHJpbmcpIGNoYXIgKiBzdHJpbmc7Ci0gICAgICAgICAgUnVucyB0aGUgZ2l2ZW4gY29tbWFu ZCBvbiB0aGUgbG9jYWwgc3lzdGVtLCBidXQgcmVkaXJlY3RzIGl0cwotICAgICAgICAgIGlucHV0 IGFuZCBvdXRwdXQgdG8gdGhlIGNvbW11bmljYXRpb24gKFNFVCBMSU5FLCBTRVQgUE9SVCwgb3IK LSAgICAgICAgICBTRVQgSE9TVCkgZGV2aWNlLiBSZXR1cm5zOgotICAgICAgICAgICAgMDogb24g ZmFpbHVyZS4KLSAgICAgICAgICAgIDE6IG9uIHN1Y2Nlc3MuCi0KLSAgIGludAotICAgICAgICAg IHR0c2NhcnIoY2FycmllcikgaW50IGNhcnJpZXI7Ci0gICAgICAgICAgQ29waWVzIGl0cyBhcmd1 bWVudCB0byBhIHZhcmlhYmxlIHRoYXQgaXMgZ2xvYmFsIHRvIHRoZSBvdGhlcgotICAgICAgICAg IHR0eS1yZWxhdGVkIGZ1bmN0aW9ucywgYW5kIHRoZW4gcmV0dXJucyBpdC4gVGhlIHZhbHVlcyBm b3IKLSAgICAgICAgICBjYXJyaWVyIGFyZSBkZWZpbmVkIGluIGNrY2RlYi5oOiBDQVJfT04sIENB Ul9PRkYsIENBUl9BVVRPLgotICAgICAgICAgIHR0b3BlbigpLCB0dHBrdCgpLCBhbmQgdHR2dCgp IHVzZSB0aGlzIHZhcmlhYmxlIHdoZW4gZGVjaWRpbmcKLSAgICAgICAgICBob3cgdG8gb3BlbiB0 aGUgdHR5IGRldmljZSBhbmQgd2hhdCBtb2RlcyB0byBzZWxlY3QuIFRoZQotICAgICAgICAgIG1l YW5pbmdzIGFyZSB0aGVzZToKLQotICAgQ0FSX09GRjogSWdub3JlIGNhcnJpZXIgYXQgYWxsIHRp bWVzLgotICAgQ0FSX09OOiBSZXF1aXJlIGNhcnJpZXIgYXQgYWxsIHRpbWVzLCBleGNlcHQgd2hl biBkaWFsaW5nLiBUaGlzIG1lYW5zLAotICAgZm9yIGV4YW1wbGUsIHRoYXQgdHRvcGVuKCkgY291 bGQgaGFuZyBmb3JldmVyIHdhaXRpbmcgZm9yIGNhcnJpZXIgaWYgaXQKLSAgIGlzIG5vdCBwcmVz ZW50LgotICAgQ0FSX0FVVE86IElmIHRoZSBtb2RlbSB0eXBlIGlzIHplcm8gKGkuZS4gdGhlIGNv bm5lY3Rpb24gaXMgZGlyZWN0KSwKLSAgIHRoaXMgaXMgdGhlIHNhbWUgYXMgQ0FSX09GRi4gSWYg dGhlIG1vZGVtIHR5cGUgaXMgcG9zaXRpdmUsIHRoZW4gaGVlZAotICAgY2FycmllciBkdXJpbmcg Q09OTkVDVCAodHR2dCBtb2RlKSwgYnV0IGlnbm9yZSBpdCBhdCBvdGhlciB0aW1lcwotICAgKHBh Y2tldCBtb2RlLCBkdXJpbmcgU0VUIExJTkUsIGV0YykuIENvbXBhdGlibGUgd2l0aCBwcmUtNUEg dmVyc2lvbnMgb2YKLSAgIEMtS2VybWl0LiBUaGlzIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBjYXJy aWVyIG1vZGUuCi0KLSAgICAgICAgICBLZXJtaXQncyBESUFMIGNvbW1hbmQgaWdub3JlcyB0aGUg Y2FycmllciBzZXR0aW5nLCBidXQgdHRvcGVuKCksCi0gICAgICAgICAgdHR2dCgpLCBhbmQgdHRw a3QoKSBhbGwgaG9ub3IgdGhlIGNhcnJpZXIgb3B0aW9uIGluIGVmZmVjdCBhdAotICAgICAgICAg IHRoZSB0aW1lIHRoZXkgYXJlIGNhbGxlZC4gTm9uZSBvZiB0aGlzIGFwcGxpZXMgdG8gcmVtb3Rl IG1vZGUKLSAgICAgICAgICAodGhlIHR0eSBkZXZpY2UgaXMgdGhlIGpvYidzIGNvbnRyb2xsaW5n IHRlcm1pbmFsKSBvciB0byBuZXR3b3JrCi0gICAgICAgICAgaG9zdCBjb25uZWN0aW9ucyAobW9k ZW0gdHlwZSBpcyBuZWdhdGl2ZSkuCi0KLSAgIGludAotICAgICAgICAgIHR0c25kYigpCi0gICAg ICAgICAgU2VuZHMgYSBCUkVBSyBzaWduYWwgb24gdGhlIHR0eSBkZXZpY2UuIE9uIGEgcmVhbCB0 dHkgZGV2aWNlLAotICAgICAgICAgIHNlbmQgYSByZWFsIEJSRUFLIGxhc3RpbmcgYXBwcm94aW1h dGVseSAyNzUgbWlsbGlzZWNvbmRzLiBJZgotICAgICAgICAgIHRoaXMgaXMgbm90IHBvc3NpYmxl LCBzaW11bGF0ZSBhIEJSRUFLIGJ5IChmb3IgZXhhbXBsZSkgZHJvcHBpbmcKLSAgICAgICAgICBk b3duIHNvbWUgdmVyeSBsb3cgYmF1ZCByYXRlLCBsaWtlIDUwLCBhbmQgc2VuZGluZyBhIGJ1bmNo IG9mCi0gICAgICAgICAgbnVsbCBjaGFyYWN0ZXJzLiBPbiBhIG5ldHdvcmsgY29ubmVjdGlvbiwg ZG8gdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgICAgbmV0d29yayBwcm90b2NvbCBmb3IgQlJFQUsu IFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBvbiBlcnJvci4KLSAgICAgICAgICAgIDA6IG9uIHN1 Y2Nlc3MuCi0KLSAgIGludAotICAgICAgICAgIHR0c25kbGIoKQotICAgICAgICAgIExpa2UgdHRz bmRiKCksIGJ1dCBzZW5kcyBhICJMb25nIEJSRUFLIiAoYXBwcm94IDEuNSBzZWNvbmRzKS4KLSAg ICAgICAgICBGb3IgbmV0d29yayBjb25uZWN0aW9ucywgaXQgaXMgaWRlbnRpY2FsIHRvIHR0c25k YigpLiBDdXJyZW50bHksCi0gICAgICAgICAgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgaWYg Q0tfTEJSSyBpcyBkZWZpbmVkIChhcyBpdCBpcyBmb3IKLSAgICAgICAgICBVTklYIGFuZCBWTVMp LgotCi0gICBpbnQKLSAgICAgICAgICB0dHNzcGQoY3BzKSBpbnQgY3BzOwotICAgICAgICAgIEZv ciBzZXJpYWwgZGV2aWNlcyBvbmx5LCBzZXQgdGhlIGRldmljZSB0cmFuc21pc3Npb24gc3BlZWQg dG8KLSAgICAgICAgICAobm90ZSBjYXJlZnVsbHkpIFRFTiBUSU1FUyB0aGUgYXJndW1lbnQuIFRo ZSBhcmd1bWVudCBpcyBpbgotICAgICAgICAgIGNoYXJhY3RlcnMgcGVyIHNlY29uZCwgYnV0IHRy YW5zbWlzc2lvbiBzcGVlZHMgYXJlIGluIGJpdHMgcGVyCi0gICAgICAgICAgc2Vjb25kLiBjcHMg YXJlIHVzZWQgcmF0aGVyIHRoYW4gYnBzIGJlY2F1c2UgaGlnaCBzcGVlZHMgbGlrZQotICAgICAg ICAgIDM4NDAwIGFyZSBub3QgZXhwcmVzc2libGUgaW4gYSAxNi1iaXQgaW50IGJ1dCBsb25ncyBj YW5ub3QgYmUKLSAgICAgICAgICB1c2VkIGJlY2F1c2Uga2V5d29yZC10YWJsZSB2YWx1ZXMgYXJl IGludHMgYW5kIG5vdCBsb25ncy4gSWYgdGhlCi0gICAgICAgICAgYXJndW1lbnQgaXMgNywgdGhl biB0aGUgYnBzIGlzIDc1LCBub3QgNzAuIElmIHRoZSBhcmd1bWVudCBpcwotICAgICAgICAgIDg4 OCwgdGhpcyBpcyBhIHNwZWNpYWwgY29kZSBmb3IgNzUvMTIwMCBzcGxpdC1zcGVlZCBvcGVyYXRp b24KLSAgICAgICAgICAoNzUgYnBzIG91dCwgMTIwMCBicHMgaW4pLiBSZXR1cm5zOgotICAgICAg ICAgICAtMTogb24gZXJyb3IsIG1lYW5pbmcgdGhlIHJlcXVlc3RlZCBzcGVlZCBpcyBub3QgdmFs aWQgb3IKLSAgICAgICAgICBhdmFpbGFibGUuCi0gICAgICAgICAgPj0wOiBvbiBzdWNjZXNzIChk b24ndCB0cnkgdG8gdXNlIHRoaXMgdmFsdWUgZm9yIGFueXRoaW5nKS4KLQotICAgaW50Ci0gICAg ICAgICAgdHR2dChzcGVlZCxmbG93KSBsb25nIHNwZWVkOyBpbnQgZmxvdzsKLSAgICAgICAgICBQ dXRzIHRoZSBjdXJyZW50bHkgb3BlbiB0dHkgZGV2aWNlIGludG8gdGhlIGFwcHJvcHJpYXRlIG1v ZGVzCi0gICAgICAgICAgZm9yIHRlcm1pbmFsIGVtdWxhdGlvbi4gVGhlIGFyZ3VtZW50cyBhcmUg aW50ZXJwcmV0ZWQgYXMgaW4KLSAgICAgICAgICB0dHBrdCgpLiBTaWRlIGVmZmVjdHM6IHR0dnQo KSBzdG9yZXMgaXRzIGFyZ3VtZW50cyBpbiBnbG9iYWwKLSAgICAgICAgICB2YXJpYWJsZXMsIGFu ZCBzZXRzIGEgZmxhZyB0aGF0IGl0IGhhcyBiZWVuIGNhbGxlZCBzbyB0aGF0Ci0gICAgICAgICAg c3Vic2VxdWVudCBjYWxscyBjYW4gYmUgaWdub3JlZCBzbyBsb25nIGFzIHRoZSBhcmd1bWVudHMg YXJlIHRoZQotICAgICAgICAgIHNhbWUgYXMgaW4gdGhlIGxhc3QgZWZmZWN0aXZlIGNhbGwuIE90 aGVyIGZ1bmN0aW9ucywgc3VjaCBhcwotICAgICAgICAgIHR0b3BlbigpLCB0dGNsb3NlKCksIHR0 cmVzKCksIHR0dnQoKSwgZXRjLCB0aGF0IGNoYW5nZSB0aGUgdHR5Ci0gICAgICAgICAgZGV2aWNl IGluIGFueSB3YXkgbXVzdCB1bnNldCB0aGlzIGZsYWcuIEluIFVOSVggS2VybWl0LCB0aGlzCi0g ICAgICAgICAgZmxhZyBpcyBjYWxsZWQgdHZ0ZmxnLgotCi0gICBpbnQKLSAgICAgICAgICB0dHdt ZG0obWRtc2lnLHRpbW8pIGludCBtZG1zaWcsIHRpbW87Ci0gICAgICAgICAgV2FpdHMgdXAgdG8g dGltbyBzZWNvbmRzIGZvciBhbGwgb2YgdGhlIGdpdmVuIG1vZGVtIHNpZ25hbHMgdG8KLSAgICAg ICAgICBhcHBlYXIuIG1kbXNpZyBpcyBhIGJpdCBtYXNrLCBpbiB3aGljaCBhIGJpdCBpcyBvbiAo MSkgb3Igb2ZmCi0gICAgICAgICAgKDApIGFjY29yZGluZyB0byB3aGV0aGVyIHRoZSBjb3JyZXNw b25kaW5nIHNpZ25hbCBpcyB0byBiZQotICAgICAgICAgIHdhaXRlZCBmb3IuIFRoZXNlIHN5bWJv bHMgYXJlIGRlZmluZWQgaW4gY2tjZGViLmg6Ci0gICAgICAgICAgICBCTV9DVFMgKGJpdCAwKSBt ZWFucyB3YWl0IGZvciBDbGVhciBUbyBTZW5kCi0gICAgICAgICAgICBCTV9EU1IgKGJpdCAxKSBt ZWFucyB3YWl0IGZvciBEYXRhIFNldCBSZWFkeQotICAgICAgICAgICAgQk1fRENEIChiaXQgMikg bWVhbnMgd2FpdCBmb3IgQ2FycmllciBEZXRlY3QKLSAgICAgICAgICBSZXR1cm5zOgotICAgICAg ICAgICAtMzogTm90IGltcGxlbWVudGVkLgotICAgICAgICAgICAtMjogVGhpcyBsaW5lIGRvZXMg bm90IGhhdmUgbW9kZW0gY29udHJvbC4KLSAgICAgICAgICAgLTE6IFRpbWVvdXQ6IHRpbWUgbGlt aXQgZXhjZWVkZWQgYmVmb3JlIGFsbCBzaWduYWxzIHdlcmUKLSAgICAgICAgICBkZXRlY3RlZC4K LSAgICAgICAgICAgIDE6IFN1Y2Nlc3MuCi0KLSAgIGludAotICAgICAgICAgIHR0eGluKG4sYnVm KSBpbnQgbjsgQ0hBUiAqYnVmOwotICAgICAgICAgIFJlYWRzIHggY2hhcmFjdGVycyBmcm9tIHRo ZSB0dHkgZGV2aWNlIGludG8gdGhlIHNwZWNpZmllZCBidWYsCi0gICAgICAgICAgc3RyaXBwaW5n IHBhcml0eSBpZiBwYXJpdHkgaXMgbm90IG5vbmUuIFRoaXMgY2FsbCB3YWl0cyBmb3JldmVyLAot ICAgICAgICAgIHRoZXJlIGlzIG5vIHRpbWVvdXQuIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQg dG8gYmUgY2FsbGVkIG9ubHkKLSAgICAgICAgICB3aGVuIHlvdSBrbm93IHRoYXQgYXQgbGVhc3Qg eCBjaGFyYWN0ZXJzIGFyZSB3YWl0aW5nIHRvIGJlIHJlYWQKLSAgICAgICAgICAoYXMgZGV0ZXJt aW5lZCwgZm9yIGV4YW1wbGUsIGJ5IHR0Y2hrKCkpLiBUaGlzIGZ1bmN0aW9uIHNob3VsZAotICAg ICAgICAgIHVzZSB0aGUgc2FtZSBidWZmZXIgYXMgdHRpbmMoKS4KLQotICAgaW50Ci0gICAgICAg ICAgdHhidWZyKHRpbW8pIGludCB0aW1vOwotICAgICAgICAgIFJlYWRzIGNoYXJhY3RlcnMgaW50 byB0aGUgaW50ZXJuYWwgY29tbXVuaWNhdGlvbnMgaW5wdXQgYnVmZmVyLgotICAgICAgICAgIHRp bW8gaXMgYSB0aW1lb3V0IGludGVydmFsLCBpbiBzZWNvbmRzLiAwIG1lYW5zIG5vIHRpbWVvdXQs IHdhaXQKLSAgICAgICAgICBmb3JldmVyLiBDYWxsZWQgYnkgdHRpbmMoKSAoYW5kIHBvc3NpYmx5 IHR0eGluKCkgYW5kIHR0aW5sKCkpCi0gICAgICAgICAgd2hlbiB0aGUgY29tbXVuaWNhdGlvbnMg aW5wdXQgYnVmZmVyIGlzIGVtcHR5LiBUaGUgYnVmZmVyIHNob3VsZAotICAgICAgICAgIGJlIGNh bGxlZCB0dHhidWZbXSwgaXRzIGxlbmd0aCBpcyBkZWZpbmVkIGJ5IHRoZSBzeW1ib2wgVFhCVUZM LgotICAgICAgICAgIFRoZSBnbG9iYWwgdmFyaWFibGUgdHhidWZuIGlzIHRoZSBudW1iZXIgb2Yg Y2hhcmFjdGVycyBhdmFpbGFibGUKLSAgICAgICAgICB0byBiZSByZWFkIGZyb20gdHR4YnVmW10s IGFuZCB0eGJ1ZnAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0Ci0gICAgICAgICAgY2hhcmFjdGVy IHRvIGJlIHJlYWQuIFNob3VsZCBub3QgYmUgY2FsbGVkIGlmIHR4YnVmbiA+IDAsIGluCi0gICAg ICAgICAgd2hpY2ggY2FzZSB0aGUgYnVmZmVyIGRvZXMgbm90IG5lZWQgcmVmaWxsaW5nLiBUaGlz IHJvdXRpbmUKLSAgICAgICAgICByZXR1cm5zOgotICAgICAgICAgICAgLTI6IENvbW11bmljYXRp b25zIGRpc2Nvbm5lY3QKLSAgICAgICAgICAgIC0xOiBUaW1lb3V0Ci0gICAgICAgICAgPj0wOiBB IGNoYXJhY3RlciAoMCAtIDI1NSkgT24gc3VjY2VzcywgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0 Ci0gICAgICAgICAgd2FzIHJlYWQsIHdpdGggdGhlIHZhcmlhYmxlcyB0eGJ1Zm4gYW5kIHR4YnVm cCBzZXQgYXBwcm9wcmlhdGVseQotICAgICAgICAgIGZvciBhbnkgcmVtYWluaW5nIGNoYXJhY3Rl cnMuCi0gICAgICAgICAgTk9URTogQ3VycmVudGx5IHRoaXMgcm91dGluZSBpcyB1c2VkIGludGVy bmFsbHkgb25seSBieSB0aGUgVU5JWAotICAgICAgICAgIGFuZCBWTVMgdmVyc2lvbnMuIFRoZSBh aW0gaXMgdG8gbWFrZSBpdCBhdmFpbGFibGUgdG8gYWxsCi0gICAgICAgICAgdmVyc2lvbnMgc28g dGhlcmUgaXMgb25lIHNpbmdsZSBjb2hlcmVudCBhbmQgZWZmaWNpZW50IHdheSBvZgotICAgICAg ICAgIHJlYWRpbmcgZnJvbSB0aGUgY29tbXVuaWNhdGlvbnMgZGV2aWNlIG9yIG5ldHdvcmsuCi0K LTQuRS4yLjYuIE1pc2NlbGxhbmVvdXMgc3lzdGVtLWRlcGVuZGVudCBmdW5jdGlvbnMKLQotICAg Vk9JRAotICAgICAgICAgIHp0aW1lKHMpIGNoYXIgKipzOwotICAgICAgICAgIFJldHVybnMgYSBw b2ludGVyLCBzLCB0byB0aGUgY3VycmVudCBkYXRlLWFuZC10aW1lIHN0cmluZyBpbiBzLgotICAg ICAgICAgIFRoaXMgc3RyaW5nIG11c3QgYmUgaW4gdGhlIGZpeGVkLWZpZWxkIGZvcm1hdCBhc3Nv Y2lhdGVkIHdpdGgKLSAgICAgICAgICB0aGUgQyBydW50aW1lIGFzY3RpbWUoKSBmdW5jdGlvbiwg bGlrZTogIlN1biBTZXAgMTYgMTM6MjM6NDUKLSAgICAgICAgICAxOTczXG4iIHNvIHRoYXQgY2Fs bGVycyBvZiB0aGlzIGZ1bmN0aW9uIGNhbiBleHRyYWN0IHRoZQotICAgICAgICAgIGRpZmZlcmVu dCBmaWVsZHMuIFRoZSBwb2ludGVyIHZhbHVlIGlzIGZpbGxlZCBpbiBieSB6dGltZSwgYW5kCi0g ICAgICAgICAgdGhlIGRhdGEgaXQgcG9pbnRzIHRvIGlzIG5vdCBzYWZlLCBzbyBzaG91bGQgYmUg Y29waWVkIHRvIGEgc2FmZQotICAgICAgICAgIHBsYWNlIGJlZm9yZSB1c2UuIHp0aW1lKCkgaGFz IG5vIHJldHVybiB2YWx1ZS4gQXMgYSBzaWRlIGVmZmVjdCwKLSAgICAgICAgICB0aGlzIHJvdXRp bmUgY2FuIGFsc28gZmlsbCBpbiB0aGUgZm9sbG93aW5nIHR3byBleHRlcm5hbAotICAgICAgICAg IHZhcmlhYmxlcyAod2hpY2ggbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBzeXN0ZW0tZGVwZW5kZW50 IG1vZHVsZXMKLSAgICAgICAgICBmb3IgZWFjaCBwbGF0Zm9ybSk6Ci0gICAgICAgICAgICBsb25n IHp0dXNlYzogRnJhY3Rpb24gb2Ygc2Vjb25kcyBvZiBjbG9jayB0aW1lLCBtaWNyb3NlY29uZHMu Ci0gICAgICAgICAgICBsb25nIHp0bXNlYzogRnJhY3Rpb24gb2Ygc2Vjb25kcyBvZiBjbG9jayB0 aW1lLCBtaWxsaXNlY29uZHMuCi0gICAgICAgICAgSWYgdGhlc2UgdmFyaWFibGVzIGFyZSBub3Qg c2V0IGJ5IHpzdGltZSgpLCB0aGV5IHJlbWFpbiBhdCB0aGVpcgotICAgICAgICAgIGluaXRpYWwg dmFsdWUgb2YgLTFMLgotCi0gICBpbnQKLSAgICAgICAgICBndGltZXIoKQotICAgICAgICAgIFJl dHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGVsYXBzZWQgdGltZSBjb3VudGVyIGluIHNl Y29uZHMKLSAgICAgICAgICAoc2VlIHJ0aW1lciksIG9yIDAgb24gYW55IGtpbmQgb2YgZXJyb3Iu Ci0KLSAgICNpZmRlZiBHRlRJTUVSCi0gICAgICAgICAgQ0tGTE9BVAotICAgICAgICAgIGdmdGlt ZXIoKQotICAgICAgICAgIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGVsYXBzZWQg dGltZSBjb3VudGVyIGluCi0gICAgICAgICAgc2Vjb25kcywgYXMgYSBmbG9hdGluZyBwb2ludCBu dW1iZXIsIGNhcGFibGUgb2YgcmVwcmVzZW50aW5nIG5vdAotICAgICAgICAgIG9ubHkgd2hvbGUg c2Vjb25kcywgYnV0IGFsc28gdGhlIGZyYWN0aW9uYWwgcGFydCwgdG8gdGhlCi0gICAgICAgICAg bWlsbGlzZWNvbmQgb3IgbWljcm9zZWNvbmQgbGV2ZWwsIHdoYXRldmVyIHByZWNpc2lvbiBpcwot ICAgICAgICAgIGF2YWlsYWJsZS4gUmVxdWlyZXMgYSBmdW5jdGlvbiB0byBnZXQgdGltZXMgYXQg c3Vic2Vjb25kCi0gICAgICAgICAgcHJlY2lzaW9uLCBhcyB3ZWxsIGFzIGZsb2F0aW5nLXBvaW50 IHN1cHBvcnQuIFRoYXQncyB3aHkgaXQncwotICAgICAgICAgICNpZmRlZidkLgotCi0gICAjZW5k aWYgLyogR0ZUSU1FUiAqLwotCi0gICBpbnQKLSAgICAgICAgICBtc2xlZXAobSkgaW50IG07Ci0g ICAgICAgICAgU2xlZXBzIChwYXVzZXMsIGRvZXMgbm90aGluZykgZm9yIG0gbWlsbGlzZWNvbmRz IChhIG1pbGxpc2Vjb25kCi0gICAgICAgICAgaXMgb25lIHRob3VzYW5kdGggb2YgYSBzZWNvbmQp LiBSZXR1cm5zOgotICAgICAgICAgICAtMTogb24gZmFpbHVyZS4KLSAgICAgICAgICAgIDA6IG9u IHN1Y2Nlc3MuCi0KLSAgIFZPSUQKLSAgICAgICAgICBydGltZXIoKQotICAgICAgICAgIFNldHMg dGhlIGVsYXBzZWQgdGltZSBjb3VudGVyIHRvIHplcm8uIElmIHlvdSB3YW50IHRvIHRpbWUgaG93 Ci0gICAgICAgICAgbG9uZyBhbiBvcGVyYXRpb24gdGFrZXMsIGNhbGwgcnRpbWVyKCkgd2hlbiBp dCBzdGFydHMgYW5kIGd0aW1lcgotICAgICAgICAgIHdoZW4gaXQgZW5kcy4gcnRpbWVyKCkgaGFz IG5vIHJldHVybiB2YWx1ZS4KLQotICAgI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICBWT0lECi0g ICAgICAgICAgcmZ0aW1lcigpCi0gICAgICAgICAgU2V0cyB0aGUgZWxhcHNlZCB0aW1lIGNvdW50 ZXIgdG8gemVyby4gSWYgeW91IHdhbnQgdG8gdGltZSBob3cKLSAgICAgICAgICBsb25nIGFuIG9w ZXJhdGlvbiB0YWtlcywgY2FsbCByZnRpbWVyKCkgd2hlbiBpdCBzdGFydHMgYW5kCi0gICAgICAg ICAgZ2Z0aW1lciB3aGVuIGl0IGVuZHMuIHJmdGltZXIoKSBoYXMgbm8gcmV0dXJuIHZhbHVlLiBO b3RlOgotICAgICAgICAgIHJmdGltZXIoKSBpcyB0byBiZSB1c2VkIHdpdGggZ2Z0aW1lcigpIGFu ZCBydGltZXIoKSBpcyB0byBiZQotICAgICAgICAgIHVzZWQgd2l0aCBndGltZXIoKS4gU2VlIHRo ZSByZnRpbWVyKCkgZGVzY3JpcHRpb24uCi0KLSAgICNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSAg IGludAotICAgICAgICAgIHN5c2luaXQoKQotICAgICAgICAgIERvZXMgd2hhdGV2ZXIgbmVlZHMg ZG9pbmcgdXBvbiBwcm9ncmFtIHN0YXJ0LiBJbiBwYXJ0aWN1bGFyLCBpZgotICAgICAgICAgIHRo ZSBwcm9ncmFtIGlzIHJ1bm5pbmcgaW4gYW55IGtpbmQgb2YgcHJpdmlsZWdlZCBtb2RlLCB0dXJu cyBvZmYKLSAgICAgICAgICB0aGUgcHJpdmlsZWdlcyAoc2VlIHByaXZfaW5pKCkpLiBSZXR1cm5z OgotICAgICAgICAgICAtMTogb24gZXJyb3IuCi0gICAgICAgICAgICAwOiBvbiBzdWNjZXNzLgot Ci0gICBpbnQKLSAgICAgICAgICBzeXNjbGVhbnVwKCkKLSAgICAgICAgICBEb2VzIHdoYXRldmVy IG5lZWRzIGRvaW5nIHVwb24gcHJvZ3JhbSBleGl0LiBSZXR1cm5zOgotICAgICAgICAgICAtMTog b24gZXJyb3IuCi0gICAgICAgICAgICAwOiBvbiBzdWNjZXNzLgotCi0gICBpbnQKLSAgICAgICAg ICBwc3VzcGVuZCgpCi0gICAgICAgICAgU3VzcGVuZHMgdGhlIEtlcm1pdCBwcm9jZXNzLCBwdXRz IGl0IGluIHRoZSBiYWNrZ3JvdW5kIHNvIGl0IGNhbgotICAgICAgICAgIGJlIGNvbnRpbnVlZCAo ImZvcmVncm91bmRlZCIpIGxhdGVyLiBSZXR1cm5zOgotICAgICAgICAgICAtMTogaWYgdGhpcyBm dW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkLgotICAgICAgICAgICAgMDogb24gc3VjY2Vzcy4KLQot ICAgWyBbMTM2XUNvbnRlbnRzIF0gWyBbMTM3XUMtS2VybWl0IF0gWyBbMTM4XUtlcm1pdCBIb21l IF0KLQotNC5GLiBHcm91cCBGOiBOZXR3b3JrIFN1cHBvcnQKLQotICAgQXMgb2YgdmVyc2lvbiA1 QSwgQy1LZXJtaXQgaW5jbHVkZXMgc3VwcG9ydCBmb3Igc2V2ZXJhbCBuZXR3b3Jrcy4KLSAgIE9y aWdpbmFsbHksIHRoaXMgd2FzIGp1c3Qgd29ya2VkIGludG8gdGhlIHR0b3BlbigpLCB0dGNsb3Mo KSwgdHRpbmMoKSwKLSAgIHR0aW5sKCksIGFuZCBzaW1pbGFyIHJvdXRpbmVzIGluIFsxMzldY2t1 dGlvLmMuIEJ1dCB0aGlzIG1hZGUgaXQKLSAgIGltcG9zc2libGUgdG8gc2hhcmUgdGhpcyBjb2Rl IHdpdGggbm9uLVVOSVggdmVyc2lvbnMsIGxpa2UgVk1TLCBBT1MvVlMsCi0gICBPUy8yLCBldGMu IFNvIGFzIG9mIGVkaXQgMTY4LCBuZXR3b3JrIGNvZGUgaGFzIGJlZW4gc2VwYXJhdGVkIG91dCBp bnRvCi0gICBpdHMgb3duIG1vZHVsZSBhbmQgaGVhZGVyIGZpbGUsIGNrY25ldC5jIGFuZCBja2Nu ZXQuaDoKLQotICAgICBbMTQwXWNrY25ldC5oOiBOZXR3b3JrLXJlbGF0ZWQgc3ltYm9sIGRlZmlu aXRpb25zLgotICAgICBbMTQxXWNrY25ldC5jOiBOZXR3b3JrIGkvbyAoVENQL0lQLCBYLjI1LCBl dGMpLCBzaGFyZWQgYnkgbW9zdAotICAgcGxhdGZvcm1zLgotICAgICBbMTQyXWNrbG5ldC5jOiBO ZXR3b3JrIGkvbyAoVENQL0lQLCBYLjI1LCBldGMpIHNwZWNpZmljIHRvIFN0cmF0dXMKLSAgIFZP Uy4KLQotICAgVGhlIHJvdXRpbmVzIGFuZCB2YXJpYWJsZXMgaW4gdGhlc2UgbW9kdWxlcyBmYWxs IGludG8gdHdvIGNhdGVnb3JpZXM6Ci0KLSAgICAxLiBTdXBwb3J0IGZvciBzcGVjaWZpYyBuZXR3 b3JrIHBhY2thZ2VzIGxpa2UgU3VuTGluayBYLjI1IGFuZCBUR1YKLSAgICAgICBNdWx0aU5ldCwg YW5kOgotICAgIDIuIHN1cHBvcnQgZm9yIHNwZWNpZmljIG5ldHdvcmsgdmlydHVhbCB0ZXJtaW5h bCBwcm90b2NvbHMgbGlrZSBDQ0lUVAotICAgICAgIFguMyBhbmQgVENQL0lQIFRlbG5ldC4KLQot ICAgQ2F0ZWdvcnkgKDEpIGZ1bmN0aW9ucyBhcmUgYW5hbG9ncyB0byB0aGUgdHQqKCkgZnVuY3Rp b25zLCBhbmQgaGF2ZQotICAgbmFtZXMgbGlrZSBuZXRvcGVuLCBuZXRjbG9zLCBuZXR0aW5jLCBl dGMuIEdyb3VwIEEtRCBtb2R1bGVzIGRvIG5vdAotICAgKGFuZCBtdXN0IG5vdCkga25vdyBhbnl0 aGluZyBhYm91dCB0aGVzZSBmdW5jdGlvbnMgLS0gdGhleSBjb250aW51ZSB0bwotICAgY2FsbCB0 aGUgb2xkIEdyb3VwIEUgZnVuY3Rpb25zICh0dG9wZW4sIHR0aW5jLCBldGMpLiBDYXRlZ29yeSAo MikKLSAgIGZ1bmN0aW9ucyBhcmUgcHJvdG9jb2wgc3BlY2lmaWMgYW5kIGhhdmUgbmFtZXMgcHJl Zml4ZWQgYnkgYSBwcm90b2NvbAotICAgaWRlbnRpZmllciwgbGlrZSB0biBmb3IgdGVsbmV0IHgy NSBmb3IgWC4yNS4KLQotICAgY2tjbmV0LmggY29udGFpbnMgcHJvdG90eXBlcyBmb3IgYWxsIHRo ZXNlIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBzeW1ib2wKLSAgIGRlZmluaXRpb25zIGZvciBuZXR3 b3JrIHR5cGVzLCBwcm90b2NvbHMsIGFuZCBuZXR3b3JrLSBhbmQgcHJvdG9jb2wtCi0gICBzcGVj aWZpYyBzeW1ib2xzLCBhcyB3ZWxsIGFzICNpbmNsdWRlcyBmb3IgdGhlIGhlYWRlciBmaWxlcyBu ZWNlc3NhcnkKLSAgIGZvciBlYWNoIG5ldHdvcmsgYW5kIHByb3RvY29sLgotCi0gICBUaGUgZm9s bG93aW5nIGZ1bmN0aW9ucyBhcmUgdG8gYmUgcHJvdmlkZWQgZm9yIG5ldHdvcmtzIHRoYXQgZG8g bm90IHVzZQotICAgbm9ybWFsIHN5c3RlbSBpL28gKG9wZW4sIHJlYWQsIHdyaXRlLCBjbG9zZSk6 Ci0KLSAgIGludAotICAgICAgICAgIG5ldG9wZW4oKQotICAgICAgICAgIFRvIGJlIGNhbGxlZCBm cm9tIHdpdGhpbiB0dG9wZW4oKSB3aGVuIGEgbmV0d29yayBjb25uZWN0aW9uIGlzCi0gICAgICAg ICAgcmVxdWVzdGVkLiBDYWxsaW5nIGNvbnZlbnRpb25zIGFuZCBwdXJwb3NlIHNhbWUgYXMgR3Jv dXAgRQotICAgICAgICAgIHR0b3BlbigpLgotCi0gICBpbnQKLSAgICAgICAgICBuZXRjbG9zKCkK LSAgICAgICAgICBUbyBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gdHRjbG9zKCkgd2hlbiBhIG5ldHdv cmsgY29ubmVjdGlvbiBpcwotICAgICAgICAgIGJlaW5nIGNsb3NlZC4gQ2FsbGluZyBjb252ZW50 aW9ucyBhbmQgcHVycG9zZSBzYW1lIGFzIEdyb3VwIEUKLSAgICAgICAgICB0dGNsb3MoKS4KLQot ICAgaW50Ci0gICAgICAgICAgbmV0dGNoaygpCi0gICAgICAgICAgVG8gYmUgY2FsbGVkIGZyb20g d2l0aGluIHR0Y2hrKCkuIENhbGxpbmcgY29udmVudGlvbnMgYW5kCi0gICAgICAgICAgcHVycG9z ZSBzYW1lIGFzIEdyb3VwIEUgdHRjaGsoKS4KLQotICAgaW50Ci0gICAgICAgICAgbmV0Zmx1aSgp Ci0gICAgICAgICAgVG8gYmUgY2FsbGVkIGZyb20gd2l0aGluIHR0Zmx1aSgpLiBDYWxsaW5nIGNv bnZlbnRpb25zIGFuZAotICAgICAgICAgIHB1cnBvc2Ugc2FtZSBhcyBHcm91cCBFIHR0Zmx1aSgp LgotCi0gICBpbnQKLSAgICAgICAgICBuZXRicmVhaygpCi0gICAgICAgICAgVG8gc2VuZCBhIG5l dHdvcmsgYnJlYWsgKGF0dGVudGlvbikgc2lnbmFsLiBDYWxsaW5nIGNvbnZlbnRpb25zCi0gICAg ICAgICAgYW5kIHB1cnBvc2Ugc2FtZSBhcyBHcm91cCBFIHR0c25kYnJrKCkuCi0KLSAgIGludAot ICAgICAgICAgIG5ldGluYygpCi0gICAgICAgICAgVG8gZ2V0IGEgY2hhcmFjdGVyIGZyb20gdGhl IG5ldHdvcmsuIENhbGxpbmcgY29udmVudGlvbnMgc2FtZSBhcwotICAgICAgICAgIEdyb3VwIEUg dHRzbmRicmsoKS4KLQotICAgaW50Ci0gICAgICAgICAgbmV0dG9jKCkKLSAgICAgICAgICBTZW5k IGEgImNoYXJhY3RlciIgKGJ5dGUpIHRvIHRoZSBuZXR3b3JrLiBDYWxsaW5nIGNvbnZlbnRpb25z Ci0gICAgICAgICAgc2FtZSBhcyBHcm91cCBFIHR0b2MoKS4KLQotICAgaW50Ci0gICAgICAgICAg bmV0dG9sKCkKLSAgICAgICAgICBTZW5kIGEgImxpbmUiIChzZXF1ZW5jZSBvZiBieXRlcykgdG8g dGhlIG5ldHdvcmsuIENhbGxpbmcKLSAgICAgICAgICBjb252ZW50aW9ucyBzYW1lIGFzIEdyb3Vw IEUgdHRvbCgpLgotCi0gICBDb25jZWl2YWJseSwgc29tZSBzeXN0ZW1zIHN1cHBvcnQgbmV0d29y ayBjb25uZWN0aW9ucyBzaW1wbHkgYnkgbGV0dGluZwotICAgeW91IG9wZW4gYSBkZXZpY2Ugb2Yg YSBjZXJ0YWluIG5hbWUgYW5kIGxldHRpbmcgeW91IGRvIGkvbyB0byBpdC4KLSAgIE90aGVycyAo bGlrZSB0aGUgQmVya2VsZXkgc29ja2V0cyBUQ1AvSVAgbGlicmFyeSBvbiBVTklYKSByZXF1aXJl IHlvdQotICAgdG8gb3BlbiB0aGUgY29ubmVjdGlvbiBpbiBhIHNwZWNpYWwgd2F5LCBidXQgdGhl biBkbyBub3JtYWwgaS9vIChyZWFkLAotICAgd3JpdGUpLiBJbiBzdWNoIGEgY2FzZSwgeW91IHdv dWxkIHVzZSBuZXRvcGVuKCksIGJ1dCB5b3Ugd291bGQgbm90IHVzZQotICAgbmV0dGluYywgbmV0 dG9jLCBldGMuCi0KLSAgIFZNUyBUQ1AvSVAgcHJvZHVjdHMgaGF2ZSB0aGVpciBvd24gc2V0IG9m IGZ1bmN0aW9ucyBmb3IgYWxsIG5ldHdvcmsKLSAgIG9wZXJhdGlvbnMsIHNvIGluIHRoYXQgY2Fz ZSB0aGUgZnVsbCByYW5nZSBvZiBuZXR4eHgoKSBmdW5jdGlvbnMgaXMKLSAgIHVzZWQuCi0KLSAg IFRoZSB0ZWNobmlxdWUgaXMgdG8gcHV0IGEgdGVzdCBpbiBlYWNoIGNvcnJlc3BvbmRpbmcgdHR4 eHgoKSBmdW5jdGlvbgotICAgdG8gc2VlIGlmIGEgbmV0d29yayBjb25uZWN0aW9uIGlzIGFjdGl2 ZSAob3IgaXMgYmVpbmcgcmVxdWVzdGVkKSwgdGVzdAotICAgZm9yIHdoaWNoIGtpbmQgb2YgbmV0 d29yayBpdCBpcywgYW5kIGlmIG5lY2Vzc2FyeSByb3V0ZSB0aGUgY2FsbCB0byB0aGUKLSAgIGNv cnJlc3BvbmRpbmcgbmV0eHh4KCkgZnVuY3Rpb24uIFRoZSBuZXR4eHgoKSBmdW5jdGlvbiBtdXN0 IGFsc28KLSAgIGNvbnRhaW4gY29kZSB0byB0ZXN0IGZvciB0aGUgbmV0d29yayB0eXBlLCB3aGlj aCBpcyBhdmFpbGFibGUgdmlhIHRoZQotICAgZ2xvYmFsIHZhcmlhYmxlIHR0bmV0LgotCi0gICBb IFsxNDNdQ29udGVudHMgXSBbIFsxNDRdQy1LZXJtaXQgXSBbIFsxNDVdS2VybWl0IEhvbWUgXQot Ci00LkYuMS4gVGVsbmV0IFByb3RvY29sCi0KLSAgIChUaGlzIHNlY3Rpb24gbmVlZHMgYSBncmVh dCBkZWFsIG9mIHVwZGF0aW5nLi4uKQotCi0gICBBcyBvZiBlZGl0IDE5NSwgVGVsbmV0IHByb3Rv Y29sIGlzIHNwbGl0IG91dCBpbnRvIGl0cyBvd24gZmlsZXMsIHNpbmNlCi0gICBpdCBjYW4gYmUg aW1wbGVtZW50ZWQgaW4gcmVtb3RlIG1vZGUsIHdoaWNoIGRvZXMgbm90IGhhdmUgYSBuZXR3b3Jr Ci0gICBjb25uZWN0aW9uOgotCi0gICAgICBbMTQ2XWNrY3RlbC5oOiBUZWxuZXQgcHJvdG9jb2wg c3ltYm9sIGRlZmluaXRpb25zLgotICAgICAgWzE0N11ja2N0ZWwuYzogVGVsbmV0IHByb3RvY29s LgotCi0gICBUaGUgVGVsbmV0IHByb3RvY29sIGlzIHN1cHBvcnRlZCBieSB0aGUgZm9sbG93aW5n IHZhcmlhYmxlcyBhbmQKLSAgIHJvdXRpbmVzOgotCi0gICBpbnQgdG5faW5pdAotICAgICAgICAg IE5vbnplcm8gaWYgdGVsbmV0IHByb3RvY29sIGluaXRpYWxpemVkLCB6ZXJvIG90aGVyd2lzZS4K LQotICAgaW50Ci0gICAgICAgICAgdG5faW5pdCgpCi0gICAgICAgICAgSW5pdGlhbGl6ZSB0aGUg dGVsbmV0IHByb3RvY29sIChzZW5kIGluaXRpYWwgb3B0aW9ucykuCi0KLSAgIGludAotICAgICAg ICAgIHRuX3NvcHQoKQotICAgICAgICAgIFNlbmQgYSB0ZWxuZXQgb3B0aW9uLgotCi0gICBpbnQK LSAgICAgICAgICB0bl9kb29wKCkKLSAgICAgICAgICBSZWNlaXZlIGFuZCBhY3Qgb24gYSB0ZWxu ZXQgb3B0aW9uIGZyb20gdGhlIHJlbW90ZS4KLQotICAgaW50Ci0gICAgICAgICAgdG5fc3R0eXAo KQotICAgICAgICAgIFNlbmQgdGVybWluYWwgdHlwZSB1c2luZyB0ZWxuZXQgcHJvdG9jb2wuCi0K LTQuRi4yLiBGVFAgUHJvdG9jb2wKLQotICAgKFRvIGJlIGZpbGxlZCBpbi4uLikgU2VlIHRoZSBb MTQ4XXNvdXJjZSBmaWxlCi0KLTQuRi4zLiBIVFRQIFByb3RvY29sCi0KLSAgIChUbyBiZSBmaWxs ZWQgaW4uLi4pCi0KLTQuRi40LiBYLjI1IE5ldHdvcmtzCi0KLSAgIFRoZXNlIHJvdXRpbmVzIHdl cmUgd3JpdHRlbiBTdW5MaW5rIFguMjUgYW5kIGhhdmUgc2luY2UgYmVlbiBhZGFwdGVkIHRvCi0g ICBhdCBsZWFzdCBvbiBvbmUgb3RoZXI6IElCTSBBSVhMaW5rL1guMjUuCi0KLSAgIGludAotICAg ICAgICAgIHgyNWRpYWcoKQotICAgICAgICAgIFJlYWRzIGFuZCBwcmludHMgWC4yNSBkaWFnbm9z dGljcwotCi0gICBpbnQKLSAgICAgICAgICB4MjVvb2JoKCkKLSAgICAgICAgICBYLjI1IG91dCBv ZiBiYW5kIHNpZ25hbCBoYW5kbGVyCi0KLSAgIGludAotICAgICAgICAgIHgyNWludHIoKQotICAg ICAgICAgIFNlbmRzIFguMjUgaW50ZXJydXB0IHBhY2tldAotCi0gICBpbnQKLSAgICAgICAgICB4 MjVyZXNldCgpCi0gICAgICAgICAgUmVzZXRzIFguMjUgdmlydHVhbCBjaXJjdWl0Ci0KLSAgIGlu dAotICAgICAgICAgIHgyNWNsZWFyKCkKLSAgICAgICAgICBDbGVhciBYLjI1IHZpcnR1YWwgY2ly Y3VpdAotCi0gICBpbnQKLSAgICAgICAgICB4MjVzdGF0KCkKLSAgICAgICAgICBYLjI1IHN0YXR1 cwotCi0gICBpbnQKLSAgICAgICAgICBzZXRxYml0KCkKLSAgICAgICAgICBTZXRzIFguMjUgUS1i aXQKLQotICAgaW50Ci0gICAgICAgICAgcmVzZXRxYml0KCkKLSAgICAgICAgICBSZXNldHMgWC4y NSBRLWJpdAotCi0gICBpbnQKLSAgICAgICAgICB4MjV4aW4oKQotICAgICAgICAgIFJlYWRzIG4g Y2hhcmFjdGVycyBmcm9tIFguMjUgY2lyY3VpdC4KLQotICAgaW50Ci0gICAgICAgICAgeDI1aW5s KCkKLSAgICAgICAgICBSZWFkIGEgS2VybWl0IHBhY2tldCBmcm9tIFguMjUgY2lyY3VpdC4KLQot ICAgWyBbMTQ5XUNvbnRlbnRzIF0gWyBbMTUwXUMtS2VybWl0IF0gWyBbMTUxXUtlcm1pdCBIb21l IF0KLQotNC5GLjUuIEFkZGluZyBOZXcgTmV0d29yayBUeXBlcwotCi0gICBFeGFtcGxlOiBBZGRp bmcgc3VwcG9ydCBmb3IgSUJNIFguMjUgYW5kIEhld2xldHQgUGFja2FyZCBYLjI1LiBGaXJzdCwK LSAgIGFkZCBuZXcgbmV0d29yayB0eXBlIHN5bWJvbHMgZm9yIGVhY2ggb25lLiBUaGVyZSBhcmUg YWxyZWFkeSBzb21lCi0gICBuZXR3b3JrIHR5cGVzIGRlZmluZWQgZm9yIG90aGVyIFguMjUgcGFj a2FnZXM6Ci0KLSAgTkVUX1NYMjUgaXMgdGhlIG5ldHdvcmstdHlwZSBJRCBmb3IgU3VuTGluayBY LjI1LgotICBORVRfVlgyNSBpcyB0aGUgbmV0d29yay10eXBlIElEIGZvciBWT1MgWC4yNS4KLQot ICAgU28gZmlyc3QgeW91IHNob3VsZCBuZXcgc3ltYm9scyBmb3IgdGhlIG5ldyBuZXR3b3JrIHR5 cGVzLCBnaXZpbmcgdGhlbQotICAgdGhlIG5leHQgbnVtYmVycyBpbiB0aGUgc2VxdWVuY2UsIGUu Zy46Ci0KLSNkZWZpbmUgTkVUX0hYMjUgMTEgICAgICAgICAgICAgICAgICAgICAvKiBIZXdsZXR0 LVBhY2thcmQgWC4yNSAqLwotI2RlZmluZSBORVRfSVgyNSAxMiAgICAgICAgICAgICAgICAgICAg IC8qIElCTSBYLjI1ICovCi0KLSAgIFRoaXMgaXMgaW4gY2tjbmV0LmguCi0KLSAgIFRoZW4gd2Ug bmVlZCBzeW1ib2xzIHRvIHNheSB0aGF0IHdlIGFyZSBhY3R1YWxseSBjb21waWxpbmcgaW4gdGhl IGNvZGUKLSAgIGZvciB0aGVzZSBwbGF0Zm9ybXMuIFRoZXNlIHdvdWxkIGJlIGRlZmluZWQgb24g dGhlIGNjIGNvbW1hbmQgbGluZToKLQotICAtRElCTVgyNSAgKGZvciBJQk0pCi0gIC1ESFBYMjUg ICAoZm9yIEhQKQotCi0gICBTbyB3ZSBjYW4gYnVpbGQgQy1LZXJtaXQgdmVyc2lvbnMgZm9yIEFJ WCBhbmQgSFAtVVggYm90aCB3aXRoIGFuZAotICAgd2l0aG91dCBYLjI1IHN1cHBvcnQgKHNpbmNl IG5vdCBhbGwgQUlYIGFuZCBJQk0gc3lzdGVtcyBoYXZlIHRoZSBuZWVkZWQKLSAgIGxpYnJhcmll cywgYW5kIHNvIGFuIGV4ZWN1dGFibGUgdGhhdCB3YXMgbGlua2VkIHdpdGggdGhlbSBtaWdodCBu bwotICAgbG9hZCkuCi0KLSAgIFRoZW4gaW4gY2tjbmV0Lmg6Ci0KLSNpZmRlZiBJQk1YMjUKLSNk ZWZpbmUgQU5ZWDI1Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0KLSNpZmRlZiBIUFgyNQotI2RlZmlu ZSBBTllYMjUKLSNlbmRpZiAvKiBIUFgyNSAqLwotCi0gICBBbmQgdGhlbiB1c2UgQU5ZWDI1IGZv ciBjb2RlIHRoYXQgaXMgY29tbW9uIHRvIGFsbCBvZiB0aGVtLCBhbmQgSUJNWDI1Ci0gICBvciBI UFgyNSBmb3IgY29kZSBzcGVjaWZpYyB0byBJQk0gb3IgSFAuCi0KLSAgIEl0IG1pZ2h0IGFsc28g aGFwcGVuIHRoYXQgc29tZSBjb2RlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiB0d28gb3IgbW9yZQot ICAgb2YgdGhlc2UsIGJ1dCBub3QgdGhlIG90aGVycy4gU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHRo YXQgeW91IHdyaXRlIGNvZGUKLSAgIHRoYXQgYXBwbGllcyB0byBib3RoIElCTSBhbmQgSFAsIGJ1 dCBub3QgU3VuIG9yIFZPUyBYLjI1LiBUaGVuIHlvdSBhZGQKLSAgIHRoZSBmb2xsb3dpbmcgZGVm aW5pdGlvbiB0byBja2NuZXQuaDoKLQotI2lmbmRlZiBIUE9SSUJNWDI1Ci0jaWZkZWYgSFBYMjUK LSNkZWZpbmUgSFBPUklCTVgyNQotI2Vsc2UKLSNpZmRlZiBJQk1YMjUKLSNkZWZpbmUgSFBPUklC TVgyNQotI2VuZGlmIC8qIElCTVgyNSAqLwotI2VuZGlmIC8qIEhQWDI1ICovCi0jZW5kaWYgLyog SFBPUklCTVgyNSAqLwotCi0gICBZb3UgY2FuIE5PVCB1c2UgY29uc3RydWN0aW9ucyBsaWtlICIj aWYgZGVmaW5lZCAoSFBYMjUgfHwgSUJNWDI1KSI7Ci0gICB0aGV5IGFyZSBub3QgcG9ydGFibGUu Ci0KLSAgIFsgWzE1Ml1Db250ZW50cyBdIFsgWzE1M11DLUtlcm1pdCBdIFsgWzE1NF1LZXJtaXQg SG9tZSBdCi0KLTQuRy4gR3JvdXAgRzogRm9ybWF0dGVkIFNjcmVlbiBTdXBwb3J0Ci0KLSAgIFNv IGZhciwgdGhpcyBpcyB1c2VkIG9ubHkgZm9yIHRoZSBmdWxsc2NyZWVuIGxvY2FsLW1vZGUgZmls ZSB0cmFuc2ZlcgotICAgZGlzcGxheS4gSW4gdGhlIGZ1dHVyZSwgaXQgbWlnaHQgYmUgZXh0ZW5k ZWQgdG8gb3RoZXIgdXNlcy4gVGhlCi0gICBmdWxsc2NyZWVuIGRpc3BsYXkgY29kZSBpcyBpbiBh bmQgYXJvdW5kIHRoZSByb3V0aW5lIHNjcmVlbmMoKSBpbgotICAgWzE1NV1ja3V1c3guYy4KLQot ICAgSW4gdGhlIFVOSVggdmVyc2lvbiwgd2UgdXNlIHRoZSBjdXJzZXMgbGlicmFyeSwgcGx1cyBv bmUgY2FsbCBmcm9tIHRoZQotICAgdGVybWNhcCBsaWJyYXJ5LiBJbiBvdGhlciB2ZXJzaW9ucyAo T1MvMiwgVk1TLCBldGMpIHdlIGluc2VydCBkdW1teQotICAgcm91dGluZXMgdGhhdCBoYXZlIHRo ZSBzYW1lIG5hbWVzIGFzIGN1cnNlcyByb3V0aW5lcy4gU28gZmFyLCB0aGVyZSBhcmUKLSAgIHR3 byBtZXRob2RzIGZvciBzaW11bGF0aW5nIGN1cnNlcyByb3V0aW5lczoKLQotICAgIDEuIEluIFZN Uywgd2UgdXNlIHRoZSBTY3JlZW4gTWFuYWdlbWVudCBMaWJyYXJ5IChTTUcpLCBhbmQgaW5zZXJ0 Ci0gICAgICAgc3R1YnMgdG8gY29udmVydCBjdXJzZXMgY2FsbHMgaW50byBTTUcgY2FsbHMuCi0g ICAgMi4gSW4gT1MvMiwgd2UgdXNlIHRoZSBNWUNVUlNFUyBjb2RlLCBpbiB3aGljaCB0aGUgc3R1 YiByb3V0aW5lcwotICAgICAgIGFjdHVhbGx5IGVtaXQgdGhlIGFwcHJvcHJpYXRlIGVzY2FwZSBz ZXF1ZW5jZXMgdGhlbXNlbHZlcy4KLQotICAgSGVyZSBhcmUgdGhlIHN0dWIgcm91dGluZXM6Ci0K LSAgIGludAotICAgICAgICAgIHRnZXRlbnQoY2hhciAqYnVmLCBjaGFyICp0ZXJtKQotICAgICAg ICAgIEFyZ3VtZW50cyBhcmUgaWdub3JlZC4gUmV0dXJucyAxIGlmIHRoZSB1c2VyIGhhcyBhIHN1 cHBvcnRlZAotICAgICAgICAgIHRlcm1pbmFsIHR5cGUsIDAgb3RoZXJ3aXNlLiBTZXRzIGEgZ2xv YmFsIHZhcmlhYmxlIChmb3IgZXhhbXBsZSwKLSAgICAgICAgICAiaXN2dDUyIiBvciAiaXNkYXNo ZXIiKSB0byBpbmRpY2F0ZSB0aGUgdGVybWluYWwgdHlwZS4KLQotICAgVk9JRAotICAgICAgICAg IG1vdmUoaW50IHJvdywgaW50IGNvbCkKLSAgICAgICAgICBTZW5kcyB0aGUgZXNjYXBlIHNlcXVl bmNlIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlCi0gICAgICAgICAgaW5kaWNhdGVkIHJv dyBhbmQgY29sdW1uLiBUaGUgbnVtYmVycyBhcmUgMC1iYXNlZCwgZS5nLiB0aGUgaG9tZQotICAg ICAgICAgIHBvc2l0aW9uIGlzIDAsMC4KLQotICAgaW50Ci0gICAgICAgICAgY2xlYXIoKQotICAg ICAgICAgIFNlbmRzIHRoZSBlc2NhcGUgc2VxdWVuY2UgdG8gY2xlYXIgdGhlIHNjcmVlbi4KLQot ICAgaW50Ci0gICAgICAgICAgY2xydG9lb2woKQotICAgICAgICAgIFNlbmRzIHRoZSBlc2NhcGUg c2VxdWVuY2UgdG8gY2xlYXIgZnJvbSB0aGUgY3VycmVudCBjdXJzb3IKLSAgICAgICAgICBwb3Np dGlvbiB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgotCi0gICBJbiB0aGUgTVlDVVJTRVMgY2FzZSwg Y29kZSBtdXN0IGJlIGFkZGVkIHRvIGVhY2ggb2YgdGhlIGxhc3QgdGhyZWUKLSAgIHJvdXRpbmVz IHRvIGVtaXQgdGhlIGFwcHJvcHJpYXRlIGVzY2FwZSBzZXF1ZW5jZXMgZm9yIGEgbmV3IHRlcm1p bmFsCi0gICB0eXBlLgotCi0gICBjbGVhcm9rKGN1cnNjciksIHdyZWZyZXNoKCkKLSAgICAgICAg ICBJbiByZWFsIGN1cnNlcywgdGhlc2UgdHdvIGNhbGxzIGFyZSByZXF1aXJlZCB0byByZWZyZXNo IHRoZQotICAgICAgICAgIHNjcmVlbiwgZm9yIGV4YW1wbGUgYWZ0ZXIgaXQgd2FzIGZyYWN0dXJl ZCBieSBhIGJyb2FkY2FzdAotICAgICAgICAgIG1lc3NhZ2UuIFRoZXNlIGFyZSB1c2VmdWwgb25s eSBpZiB0aGUgdW5kZXJseWluZyBzY3JlZW4KLSAgICAgICAgICBtYW5hZ2VtZW50IHNlcnZpY2Ug a2VlcHMgYSBjb3B5IG9mIHRoZSBlbnRpcmUgc2NyZWVuLCBhcyBjdXJzZXMKLSAgICAgICAgICBh bmQgU01HIGRvLiBDLUtlcm1pdCBkb2VzIG5vdCBkbyB0aGlzIGl0c2VsZi4KLQotICAgWyBbMTU2 XUNvbnRlbnRzIF0gWyBbMTU3XUMtS2VybWl0IF0gWyBbMTU4XUtlcm1pdCBIb21lIF0KLQotNC5I LiBHcm91cCBIOiBQc2V1ZG90ZXJtaW5hbCBTdXBwb3J0Ci0KLSAgIChUbyBiZSBmaWxsZWQgaW4u Li4pIEJ1dCBzZWU6IFsxNTlddGhlc2UgY29tbWVudHMsIGFuZCB0aGUgc291cmNlIGZpbGVzCi0g ICBbMTYwXWNrdXB0eS5oIGFuZCBbMTYxXWNrdXB0eS5jLgotCi00LkkuIEdyb3VwIEk6IFNlY3Vy aXR5Ci0KLSAgIChUbyBiZSBmaWxsZWQgaW4uLi4pIE1lYW53aGlsZSwgc2VlIFsxNjJdc2VjdXJp dHkuaHRtbC4KLQotICAgWyBbMTYzXUNvbnRlbnRzIF0gWyBbMTY0XUMtS2VybWl0IF0gWyBbMTY1 XUtlcm1pdCBIb21lIF0KLQotQVBQRU5ESVggSS4gRklMRSBQRVJNSVNTSU9OUwotCi1JLjEuIEZv cm1hdCBvZiBTeXN0ZW0tRGVwZW5kZW50IEZpbGUgUGVybWlzc2lvbnMgaW4gQS1QYWNrZXRzCi0K LSAgIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWVsZCAodGhlICIsIiBhdHRyaWJ1dGUpIGlzIGludGVy cHJldGVkIGFjY29yZGluZwotICAgdG8gdGhlIFN5c3RlbSBJRCAoIi4iIEF0dHJpYnV0ZSkuCi0K LSAgIEZvciBVTklYIChTeXN0ZW0gSUQgPSBVMSksIGl0J3MgdGhlIGZhbWlsaWFyIDMtZGlnaXQg b2N0YWwgbnVtYmVyLCB0aGUKLSAgIGxvdy1vcmRlciA5IGJpdHMgb2YgdGhlIGZpbGVtb2RlOiBP d25lciwgR3JvdXAsIFdvcmxkLCBlLmcuIDY2MCA9Ci0gICByZWFkL3dyaXRlIGFjY2VzcyBmb3Ig b3duZXIgYW5kIGdyb3VwLCBub25lIGZvciB3b3JsZCwgcmVjb3JkZWQgYXMgYQotICAgMy1kaWdp dCBvY3RhbCBzdHJpbmcuIEhpZ2gtb3JkZXIgVU5JWCBwZXJtaXNzaW9uIGJpdHMgYXJlIG5vdAot ICAgdHJhbnNtaXR0ZWQuCi0KLSAgIEZvciBWTVMgKFN5c3RlbSBJRCA9IEQ3KSwgaXQncyBhIDQt ZGlnaXQgaGV4IHN0cmluZywgcmVwcmVzZW50aW5nIHRoZQotICAgMTYtYml0IGZpbGUgcHJvdGVj dGlvbiBXR09TIGZpZWxkcyAoV29ybGQsR3JvdXAsT3duZXIsU3lzdGVtKSwgaW4gdGhhdAotICAg b3JkZXIgKHdoaWNoIGlzIHRoZSByZXZlcnNlIG9mIGhvdyB0aGV5J3JlIHNob3duIGluIGEgZGly ZWN0b3J5Ci0gICBsaXN0aW5nKTsgaW4gZWFjaCBmaWVsZCwgQml0IDAgPSBSZWFkLCAxID0gV3Jp dGUsIDIgPSBFeGVjdXRlLCAzID0KLSAgIERlbGV0ZS4gQSBiaXQgdmFsdWUgb2YgMCBtZWFucyBw ZXJtaXNzaW9uIGlzIGdyYW50ZWQsIDEgbWVhbnMKLSAgIHBlcm1pc3Npb24gaXMgZGVuaWVkLiBT YW1wbGU6Ci0KLSAgci0wMS0wMC1eQS8hRldFUk1JVC5FWEUnIgotICBzLTAxLTAwLV5BRSFZL2Ft ZC93YXRzdW4vdy9mZGMvbmV3L3dlcm1pdC5leGUuRFYKLSAgci0wMi0wMS1eQV0iQS4iRDciIkI4 IzExOTk4MDEwMSAxODoxNDowNSEjODUzMSY4NzI5NjAsJEEyMEItITcoIzUxMkAgIy5ZCi0gIHMt MDItMDEtXkElIlkuNSEKLQotICAgQSBWTVMgZGlyZWN0b3J5IGxpc3Rpbmcgc2hvd3MgdGhlIGZp bGUncyBwcm90ZWN0aW9uIGFzIChFLFJXRUQsUkVELFJFKQotICAgd2hpY2ggcmVhbGx5IG1lYW5z IChTPUUsTz1SV0VELEc9UkVELFc9UkUpLCB3aGljaCBpcyByZXZlcnNlIG9yZGVyIGZyb20KLSAg IHRoZSBpbnRlcm5hbCBzdG9yYWdlLCBzbyAoUkUsUkVELFJXRUQsRSkuIE5vdyB0cmFuc2xhdGUg ZWFjaCBsZXR0ZXIgdG8KLSAgIGl0cyBjb3JyZXNwb25kaW5nIGJpdDoKLQotICBSRT0wMTAxLCBS RUQ9MTEwMSwgUldFRD0xMTExLCBFPTAwMTAKLQotICAgTm93IHJldmVyc2UgdGhlIGJpdHM6Ci0K LSAgUkU9MTAxMCwgUkVEPTAwMTAsIFJXRUQ9MDAwMCwgRT0xMTAxCi0KLSAgIFRoaXMgZ2l2ZXMg dGhlIDE2LWJpdCBxdWFudGl0eToKLQotICAxMDEwMDAxMDAwMDAxMTAxCi0KLSAgIFRoaXMgaXMg dGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBWTVMgZmlsZSBwZXJtaXNzaW9uOyBp biBoZXg6Ci0KLSAgQTIwQgotCi0gICBhcyBzaG93biBpbiB0aGUgc2FtcGxlIHBhY2tldCBhYm92 ZS4KLQotICAgVGhlIFZNUyBmb3JtYXQgcHJvYmFibHkgd291bGQgYWxzbyBhcHBseSB0byBSU1gg b3IgYW55IG90aGVyIEZJTEVTLTExCi0gICBzeXN0ZW0uCi0KLUkuMi4gSGFuZGxpbmcgb2YgR2Vu ZXJpYyBQcm90ZWN0aW9uCi0KLSAgIFRvIGJlIHVzZWQgd2hlbiB0aGUgdHdvIHN5c3RlbXMgYXJl IGRpZmZlcmVudCAoYW5kL29yIGRvIG5vdCByZWNvZ25pemUKLSAgIG9yIHVuZGVyc3RhbmQgZWFj aCBvdGhlcidzIGxvY2FsIHByb3RlY3Rpb24gY29kZXMpLgotCi0gICBGaXJzdCBvZiBhbGwsIHRo ZSBib29rIGlzIHdyb25nLiBUaGlzIHNob3VsZCBub3QgYmUgdGhlIFdvcmxkCi0gICBwcm90ZWN0 aW9uLCBidXQgdGhlIE93bmVyIHByb3RlY3Rpb24uIFRoZSBvdGhlciBmaWVsZHMgc2hvdWxkIGJl IHNldAotICAgYWNjb3JkaW5nIHRvIHN5c3RlbSBkZWZhdWx0cyAoZS5nLiBVTklYIHVtYXNrLCBW TVMgZGVmYXVsdCBwcm90ZWN0aW9uLAotICAgZXRjKSwgZXhjZXB0IHRoYXQgbm8gbm9uLU93bmVy IGZpZWxkIHNob3VsZCBnaXZlIG1vcmUgcGVybWlzc2lvbnMgdGhhbgotICAgdGhlIE93bmVyIGZp ZWxkLgotCi0gICBbIFsxNjZdVG9wIF0gWyBbMTY3XUNvbnRlbnRzIF0gWyBbMTY4XUMtS2VybWl0 IEhvbWUgXSBbIFsxNjldS2VybWl0Ci0gICBIb21lIF0KLSAgICAgX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCi0KLQotICAg IEMtS2VybWl0IFByb2dyYW0gTG9naWMgTWFudWFsIC8gWzE3MF1UaGUgS2VybWl0IFByb2plY3Qg LwotICAgIFsxNzFda2VybWl0QGNvbHVtYmlhLmVkdSAvIDMwIEp1bmUgMjAxMQotCi1SZWZlcmVu Y2VzCi0KLSAgIDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1LwotICAgMi4gbWFpbHRvOmtlcm1p dEBjb2x1bWJpYS5lZHUKLSAgIDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRl eC5odG1sCi0gICA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1Lmh0bWwKLSAg IDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgIDYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3NjcmlwdHMuaHRtbAotICAgNy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1cnJlbnQuaHRtbAotICAgOC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L3doYXRzbmV3Lmh0bWwKLSAgIDkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sCi0gIDEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvc3VwcG9ydC5odG1sCi0gIDExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Ci0gIDEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwKLSAgMTMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4MQotICAxNC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3gyCi0gIDE1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDMKLSAgMTYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4NAotICAxNy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3g0LkEKLSAgMTguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4NC5CCi0gIDE5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDQuQwotICAyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrY3BsbS5odG1sI3g0LkQKLSAgMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NwbG0uaHRtbCN4NC5FCi0gIDIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjcGxtLmh0bWwjeDQuRgotICAyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY3BsbS5odG1sI3g0LkcKLSAgMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NwbG0uaHRtbCN4NC5ICi0gIDI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tjcGxtLmh0bWwjeDQuSQotICAyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr Y3BsbS5odG1sI3hhMQotICAyNy4gaHR0cDovL3d3dy5hbWF6b24uY29tL2dwL3Byb2R1Y3QvMDkz MjM3Njg4Nj9pZT1VVEY4JnRhZz1hbGVpZG1vcmVsZG9tLTIwJmxpbmtDb2RlPWFzMiZjYW1wPTE3 ODkmY3JlYXRpdmU9OTMyNSZjcmVhdGl2ZUFTSU49MDkzMjM3Njg4NgotICAyOC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCi0gIDI5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdmF4XzExLTc1MC5qcGcKLSAgMzAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2N1L2NvbXB1dGluZ2hpc3RvcnkvaGVybWl0Lmh0bWwKLSAgMzEuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdWRvY3MvaWxvc2V0dXAuaHRtbAotICAzMi4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2MwNGUudHh0Ci0gIDMzLiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrYzA0Zi50eHQKLSAgMzQuIGZ0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjMTY4LnR4dAotICAzNS4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvZi9ja2MxNzgudHh0Ci0gIDM2LiBmdHA6Ly9rZXJtaXQuY29sdW1i aWEuZWR1L2tlcm1pdC9mL2NrYzE4OC50eHQKLSAgMzcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5l ZHUva2VybWl0L2YvY2tjMTg5LnR4dAotICAzOC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvZi9ja2MxOTIudHh0Ci0gIDM5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9mL2NrYzE5Ny50eHQKLSAgNDAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Yv Y2tjMjAwLnR4dAotICA0MS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2My MTEudHh0Ci0gIDQyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrYzMwMC50 eHQKLSAgNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250 ZW50cwotICA0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAot ICA0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAgNDYuIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY3Byby53Ci0gIDQ3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjY29udGVudHMKLSAgNDgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgNDkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gIDUwLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDMuMgotICA1MS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCi0gIDUyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gIDUzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvaW5kZXguaHRtbAotICA1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY3BsbS5odG1sI3g0LkEKLSAgNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NwbG0uaHRtbCNjb250ZW50cwotICA1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQuaHRtbAotICA1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lu ZGV4Lmh0bWwKLSAgNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRt bCNjb250ZW50cwotICA1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQu aHRtbAotICA2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAg NjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cwot ICA2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICA2My4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAgNjQuIGZ0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2xpYi5oCi0gIDY1LiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NsaWIuYwotICA2Ni4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3gzLjEKLSAgNjcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cwotICA2OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICA2OS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAgNzAuIGZ0cDovL2tlcm1pdC5jb2x1bWJp YS5lZHUva2VybWl0L2Mta2VybWl0L2NrY3N5bS5oCi0gIDcxLiBmdHA6Ly9rZXJtaXQuY29sdW1i aWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2Nhc2MuaAotICA3Mi4gZnRwOi8va2VybWl0LmNvbHVt YmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjc2lnLmgKLSAgNzMuIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2RlYi5oCi0gIDc0LiBmdHA6Ly9rZXJtaXQuY29s dW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NrZXIuaAotICA3NS4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjeGxhLmgKLSAgNzYuIGZ0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY21haS5jCi0gIDc3LiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2Nwcm8udwotICA3OC4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjZm5zLmMKLSAgNzkuIGZ0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2ZuMi5jCi0gIDgwLiBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NmbjMuYwotICA4MS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3g0LkIKLSAgODIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4NC5FCi0gIDgzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDQuRAotICA4NC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCi0gIDg1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gIDg2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvaW5kZXguaHRtbAotICA4Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY3BsbS5odG1sI3g0LkIKLSAgODguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L2NrdXhsYS5jCi0gIDg5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9jLWtlcm1pdC9ja3V4bGEuaAotICA5MC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2tjeGxhLmgKLSAgOTEuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L2NrdXhsYS5oCi0gIDkyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja214bGEuaAotICA5My4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvYy1rZXJtaXQvY2s/eGxhCi0gIDk0LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja2N1bmkuaAotICA5NS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvYy1rZXJtaXQvY2tjdW5pLmMKLSAgOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cwotICA5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICA5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2luZGV4Lmh0bWwKLSAgOTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nw bG0uaHRtbCN4NC5CCi0gMTAwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtl cm1pdC9ja3VjbWQuaAotIDEwMS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2t1Y21kLmMKLSAxMDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nw bG0uaHRtbCN4NC5FCi0gMTAzLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtl cm1pdC9ja3V1c3IuaAotIDEwNC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2t1dXNyLmMKLSAxMDUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrdXVzMi5jCi0gMTA2LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja3V1czMuYwotIDEwNy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2t1dXM0LmMKLSAxMDguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2Mta2VybWl0L2NrdXVzeS5jCi0gMTA5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9ja3V1c3guYwotIDExMC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvYy1rZXJtaXQvY2t1dmVyLmgKLSAxMTEuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L2NrdXNjci5jCi0gMTEyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9jLWtlcm1pdC9ja3VkaWEuYwotIDExMy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2t1Y29uLmMKLSAxMTQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L2NrdWNucy5jCi0gMTE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjcGxtLmh0bWwjeDQuRQotIDExNi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2tjbWFpLmMKLSAxMTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cwotIDExOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQuaHRtbAotIDExOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2luZGV4Lmh0bWwKLSAxMjAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2Vy bWl0L2NrdWZpby5jCi0gMTIxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtl cm1pdC9ja3V0aW8uYwotIDEyMi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2t1c2lnLmMKLSAxMjMuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrdmZpby5jCi0gMTI0LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja3VzaWcuYwotIDEyNS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2tjbWFpLmMKLSAxMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2NwbG0uaHRtbCNjb250ZW50cwotIDEyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQuaHRtbAotIDEyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4 Lmh0bWwKLSAxMjkuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2Nr dXRpby5jCi0gMTMwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9j a3Z0aW8uYwotIDEzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1s I3gyCi0gMTMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeGEx Ci0gMTMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKLSAxMzQu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY25ldC5oCi0gMTM1 LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYwotIDEz Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCi0g MTM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMTM4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDEzOS4gZnRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKLSAxNDAuIGZ0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY25ldC5oCi0gMTQxLiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NuZXQuYwotIDE0Mi4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tsbmV0LmMKLSAxNDMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cwotIDE0NC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDE0NS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAxNDYuIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY3RlbC5oCi0gMTQ3LiBmdHA6Ly9rZXJtaXQuY29s dW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2N0ZWwuYwotIDE0OC4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjZnRwLmMKLSAxNDkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cwotIDE1MC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDE1MS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAxNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cwotIDE1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQuaHRtbAotIDE1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2luZGV4Lmh0bWwKLSAxNTUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2Vy bWl0L2NrdXVzeC5jCi0gMTU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxt Lmh0bWwjY29udGVudHMKLSAxNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0Lmh0bWwKLSAxNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1s Ci0gMTU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjTG9v c2VFbmQKLSAxNjAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2t1cHR5LmgK LSAxNjEuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2t1cHR5LmMKLSAxNjIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5odG1sCi0gMTYzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjY29udGVudHMKLSAxNjQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAxNjUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gMTY2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjdG9wCi0gMTY3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjY29udGVudHMKLSAxNjguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAxNjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9pbmRleC5odG1sCi0gMTcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv aW5kZXguaHRtbAotIDE3MS4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKCmRpZmYgLS1naXQg YS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3Byby5jIGIvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Nwcm8uYwpkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggM2M1MWI2Yi4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVp bGQvY2tlcm1pdC05LjAuMzAyL2NrY3Byby5jCisrKyAvZGV2L251bGwKQEAgLTEsMzgxNCArMCww IEBACi0KLS8qIFdBUk5JTkcgLS0gVGhpcyBDIHNvdXJjZSBwcm9ncmFtIGdlbmVyYXRlZCBieSBX YXJ0IHByZXByb2Nlc3Nvci4gKi8KLS8qIERvIG5vdCBlZGl0IHRoaXMgZmlsZTsgZWRpdCB0aGUg V2FydC1mb3JtYXQgc291cmNlIGZpbGUgaW5zdGVhZCwgKi8KLS8qIGFuZCB0aGVuIHJ1biBpdCB0 aHJvdWdoIFdhcnQgdG8gcHJvZHVjZSBhIG5ldyBDIHNvdXJjZSBmaWxlLiAgICAgKi8KLQotLyog V2FydCBWZXJzaW9uIEluZm86ICovCi1jaGFyICp3YXJ0diA9ICJXYXJ0IFZlcnNpb24gMi4xNCwg MTAgTm92IDE5OTkiOwotCi1jaGFyICpwcm90diA9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtKi1DLSotICovCi0iQy1LZXJtaXQgUHJvdG9j b2wgTW9kdWxlIDguMC4xNjAsIDEyIEF1ZyAyMDA3IjsKLQotaW50IGthY3RpdmUgPSAwOwkJCS8q IEtlcm1pdCBwcm90b2NvbCBpcyBhY3RpdmUgKi8KLQotI2RlZmluZSBQS1RaRVJPSEFDSwotCi0v KiBDIEsgQyBQIFIgTyAgLS0gQy1LZXJtaXQgUHJvdG9jb2wgTW9kdWxlLCBpbiBXYXJ0IHByZXBy b2Nlc3NvciBub3RhdGlvbi4gKi8KLS8qCi0gIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNv bHVtYmlhLmVkdT4sCi0gIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24g U3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDcsCi0g ICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9y ay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRY VCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUg Zm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotKi8KLSNpZm5kZWYgTk9YRkVSCi0jaW5j bHVkZSAiY2tjc3ltLmgiCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0jaW5jbHVkZSAiY2tjYXNjLmgi Ci0jaW5jbHVkZSAiY2tja2VyLmgiCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5UCi0jZGVmaW5lIElO Q0xfTk9QTQotI2RlZmluZSBJTkNMX1ZJTwkJCS8qIE5lZWRlZCBmb3IgY2tvY29uLmggKi8KLSNp bmNsdWRlIDxvczIuaD4KLSN1bmRlZiBDT01NRU5UCi0jZW5kaWYgLyogTlQgKi8KLSNpbmNsdWRl ICJja29jb24uaCIKLSNlbmRpZiAvKiBPUzIgKi8KLQotLyoKLSBOb3RlIC0tIFRoaXMgZmlsZSBt YXkgYWxzbyBiZSBwcmVwcm9jZXNzZWQgYnkgdGhlIFVOSVggTGV4IHByb2dyYW0sIGJ1dAotIHlv dSBtdXN0IGluZGVudCB0aGUgYWJvdmUgI2luY2x1ZGUgc3RhdGVtZW50cyBiZWZvcmUgdXNpbmcg TGV4LCBhbmQgdGhlbgotIHJlc3RvcmUgdGhlbSB0byB0aGUgbGVmdCBtYXJnaW4gaW4gdGhlIHJl c3VsdGluZyBDIHByb2dyYW0gYmVmb3JlIGNvbXBpbGF0aW9uLgotIEFsc28sIHRoZSBpbnZvY2F0 aW9uIG9mIHRoZSAid2FydCgpIiBmdW5jdGlvbiBiZWxvdyBtdXN0IGJlIHJlcGxhY2VkIGJ5IGFu Ci0gaW52b2NhdGlvbiAgb2YgdGhlICJ5eWxleCgpIiBmdW5jdGlvbi4gIEl0IG1pZ2h0IGFsc28g YmUgbmVjZXNzYXJ5IHRvIHJlbW92ZQotIGNvbW1lbnRzIGluIHRoZSAoJSkoJSkuLi4oJSkoJSkg c2VjdGlvbi4KLSovCi0KLS8qIFN0YXRlIGRlZmluaXRpb25zIGZvciBXYXJ0IChvciBMZXgpICov Ci0jZGVmaW5lIGlwa3QgMQotI2RlZmluZSByZmlsZSAyCi0jZGVmaW5lIHJhdHRyIDMKLSNkZWZp bmUgcmRwa3QgNAotI2RlZmluZSBzc2luaXQgNQotI2RlZmluZSBzc2ZpbGUgNgotI2RlZmluZSBz c2F0dHIgNwotI2RlZmluZSBzc2RhdGEgOAotI2RlZmluZSBzc2VvZiA5Ci0jZGVmaW5lIHNzZW90 IDEwCi0jZGVmaW5lIHNlcnZlIDExCi0jZGVmaW5lIGdlbmVyaWMgMTIKLSNkZWZpbmUgZ2V0IDEz Ci0jZGVmaW5lIHJnZW4gMTQKLSNkZWZpbmUgc3NvcGt0IDE1Ci0jZGVmaW5lIHJvcGt0IDE2Ci0K LV9QUk9UT1RZUChzdGF0aWMgVk9JRCB4eHByb3RvLCh2b2lkKSk7Ci1fUFJPVE9UWVAoc3RhdGlj IFZPSUQgd2hlcmVtc2csKHZvaWQpKTsKLV9QUk9UT1RZUChpbnQgd2FydCwodm9pZCkpOwotX1BS T1RPVFlQKHN0YXRpYyBpbnQgc2dldGluaXQsKGludCxpbnQpKTsKLV9QUk9UT1RZUChpbnQgc25k c3BhY2UsKGludCkpOwotCi0vKiBFeHRlcm5hbCBDLUtlcm1pdCB2YXJpYWJsZSBkZWNsYXJhdGlv bnMgKi8KLSAgZXh0ZXJuIGNoYXIgKnZlcnNpbywgKnNydnR4dCwgKmNtYXJnLCAqY21hcmcyLCAq KmNtbGlzdCwgKnJmX2VycjsKLSAgZXh0ZXJuIGNoYXIgKiByZnNwZWMsICogc2ZzcGVjLCAqIHNy ZnNwZWMsICogcnJmc3BlYzsKLSAgZXh0ZXJuIGNoYXIgKiBwcmZzcGVjLCAqIHBzZnNwZWMsICog cHNyZnNwZWMsICogcHJyZnNwZWM7Ci0gIGV4dGVybiBjaGFyICpjZG1zZ2ZpbGVbXTsKLSAgZXh0 ZXJuIGNoYXIgKiBzbmRfbW92ZSwgKiBzbmRfcmVuYW1lLCAqIHNyaW1zZzsKLSAgZXh0ZXJuIGNo YXIgZmlsbmFtW10sIG9maWxuYW1bXSwgZnNwZWNbXSwgdHRuYW1lW10sIG9mbjFbXTsKLSAgZXh0 ZXJuIENIQVIgc3N0YXRlLCAqc3J2cHRyLCAqZGF0YTsKLSAgZXh0ZXJuIGludCB0aW1pbnQsIHJ0 aW1vLCBuZmlscywgaGNmbGcsIHhmbGcsIGZsb3csIG1kbXR5cCwgbmV0d29yazsKLSAgZXh0ZXJu IGludCBvb3B0cywgb21vZGUsIG9uYW1lLCBvcGF0aCwgbm9wdXNoLCBpc2d1ZXN0LCB4Y21kc3Jj LCByY2RhY3RpdmU7Ci0gIGV4dGVybiBpbnQgcmVqZWN0aW9uLCBtb3ZpbmcsIGZuY2FjdCwgYnll X2FjdGl2ZSwgdXJzZXJ2ZXIsIGZhdGFsaW87Ci0gIGV4dGVybiBpbnQgcHJvdG9jb2wsIHByZWZp eGluZywgZmlsY250LCBjYXJyaWVyLCBmbnNwYXRoLCBpbnRlcnJ1cHRlZDsKLSAgZXh0ZXJuIGlu dCByZWN1cnNpdmUsIGluc2VydmVyLCBuenhvcHRzLCBpZGxldG1vLCBzcnZpZGwsIHhmcmludDsK LSAgZXh0ZXJuIHN0cnVjdCBja19wIHB0YWJbXTsKLSAgZXh0ZXJuIGludCByZW1maWxlLCByZW1w aXBlLCB4ZmVyc3RhdCwgZmlsZXN0YXR1cywgd2VhcmVhbGlrZSwgZmFja3BhdGg7Ci0gIGV4dGVy biBpbnQgcGF0dGVybnMsIGZpbGVwZWVrLCBnbmZlcnJvcjsKLSAgZXh0ZXJuIGNoYXIgKiByZW1k ZXN0OwotCi0jaWZkZWYgUEtUWkVST0hBQ0sKLSNkZWZpbmUgUEtUWkVST0xFTiAzMgotc3RhdGlj IGNoYXIgaXBrdGFja1tQS1RaRVJPTEVOXTsKLXN0YXRpYyBpbnQgaXBrdGxlbiA9IDA7Ci0jZW5k aWYgLyogUEtUWkVST0hBQ0sgKi8KLQotc3RhdGljIGludCBzX3RpbWludCA9IC0xOwkJLyogRm9y IHNhdmluZyB0aW1lb3V0IHZhbHVlICovCi1zdGF0aWMgaW50IG15am9iID0gMDsKLXN0YXRpYyBp bnQgaGF2ZWZzID0gMDsKLSNpZmRlZiBDS19MT0dJTgotc3RhdGljIGludCBsb2d0cmllcyA9IDA7 Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotc3RhdGljIGludCBjYW5jZWwgPSAwOwotaW50IGZh Y2tidWcgPSAwOwotCi0jaWZkZWYgU1RSRUFNSU5HCi1leHRlcm4gaW50IHN0cmVhbWluZywgc3Ry ZWFtb2s7Ci0KLXN0YXRpYyBWT0lECi1zdHJlYW1vbigpIHsKLSAgICBpZiAoc3RyZWFtb2spIHsK LQlkZWJ1ZyhGMTAwLCJzdHJlYW1vbiIsIiIsMCk7Ci0Jc3RyZWFtaW5nID0gMTsKLQl0aW1pbnQg PSAwOwkJCS8qIE5vIHRpbWVvdXRzIHdoaWxlIHN0cmVhbWluZy4gKi8KLSAgICB9Ci19Ci0KLSNp ZmRlZiBDT01NRU5UCQkJCS8qIChub3QgdXNlZCkgKi8KLXN0YXRpYyBWT0lECi1zdHJlYW1vZmYo KSB7Ci0gICAgaWYgKHN0cmVhbWluZykgewotCWRlYnVnKEYxMDAsInN0cmVhbW9mZiIsIiIsMCk7 Ci0Jc3RyZWFtaW5nID0gMDsKLQl0aW1pbnQgPSBzX3RpbWludDsJCS8qIFJlc3RvcmUgdGltZW91 dCAqLwotICAgIH0KLX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZWxzZSAvKiBTVFJFQU1JTkcg Ki8KLSNkZWZpbmUgc3RyZWFtb24oKQotI2RlZmluZSBzdHJlYW1vZmYoKQotI2VuZGlmIC8qIFNU UkVBTUlORyAqLwotCi0jaWZuZGVmIE5PU1BMCi1fUFJPVE9UWVAoIGludCBhZGRtYWMsIChjaGFy ICosIGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IHp6c3RyaW5nLCAoY2hhciAqLCBjaGFyICoq LCBpbnQgKikgKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT0lDUAotX1BST1RPVFlQ KCBpbnQgY21kc3JjLCAodm9pZCkgKTsKLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZuZGVmIE5P U0VSVkVSCi0gIGV4dGVybiBjaGFyICogeF91c2VyLCAqIHhfcGFzc3dkLCAqIHhfYWNjdDsKLSAg ZXh0ZXJuIGludCB4X2xvZ2luLCB4X2xvZ2dlZDsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0j aW5jbHVkZSAiY2tjbmV0LmgiCi0KLSNpZmRlZiBUTkNPREUKLSAgZXh0ZXJuIGludCB0dG5wcm90 bzsJCQkvKiBOZXR3b3JrIHByb3RvY29sICovCi0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNpZmRl ZiBDS19TUEVFRAotICBleHRlcm4gc2hvcnQgY3RscFtdOwkJCS8qIENvbnRyb2wtY2hhcmFjdGVy IHByZWZpeCB0YWJsZSAqLwotI2VuZGlmIC8qIENLX1NQRUVEICovCi0KLSNpZmRlZiBUTkNPREUK LSAgZXh0ZXJuIGludCB0bl9iX25sbSwgdG5fYl94ZmVyLCB0bl9ubG07Ci0jaWZkZWYgQ0tfRU5D UllQVElPTgotICBleHRlcm4gaW50IHRuX25vX2VuY3J5cHRfeGZlcjsKLSNlbmRpZiAvKiBDS19F TkNSWVBUSU9OICovCi0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQKLSNp Zm5kZWYgTk9MSVNURU4KLSAgZXh0ZXJuIGludCB0Y3BzcmZkOwotI2VuZGlmIC8qIE5PTElTVEVO ICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLSAgZXh0ZXJuIGludCBjeHNlZW4sIGN6c2Vl biwgc2VydmVyLCBzcnZkaXMsIGxvY2FsLCBkaXNwbGEsIGJjdHUsIGJjdHIsIGJjdGw7Ci0gIGV4 dGVybiBpbnQgcXVpZXQsIHRzZWNzLCBwYXJpdHksIGJhY2tncmQsIG5ha3N0YXRlLCBhdGNhcHUs IHdzbG90biwgd2lubG87Ci0gIGV4dGVybiBpbnQgd3Nsb3RzLCBzdWNjZXNzLCB4aXRzdGEsIHJw cmludGYsIGRpc2NhcmQsIGNkdGltbywga2VlcCwgZmRpc3BsYTsKLSAgZXh0ZXJuIGludCB0aW1l Ziwgc3RkaW5mLCByc2NhcHUsIHNlbmRtb2RlLCBlcGt0ZmxnLCBlcGt0cmN2ZCwgZXBrdHNlbnQ7 Ci0gIGV4dGVybiBpbnQgYmluYXJ5LCBmbmNudjsKLSAgZXh0ZXJuIGxvbmcgc3BlZWQsIGZmYywg Y3JjMTYsIGNhbGlicmF0ZSwgZGVzdDsKLSNpZmRlZiBDT01NRU5UCi0gIGV4dGVybiBjaGFyICpU WVBDTUQsICpESVJDTUQsICpESVJDTTI7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmbmRlZiBP UzIKLSAgZXh0ZXJuIGNoYXIgKlNQQUNNRCwgKlNQQUNNMiwgKldIT0NNRDsKLSNlbmRpZiAvKiBP UzIgKi8KLSAgZXh0ZXJuIENIQVIgKnJkYXRhcDsKLSAgZXh0ZXJuIHN0cnVjdCB6YXR0ciBpYXR0 cjsKLQotI2lmZGVmIFZNUwotICBleHRlcm4gaW50IGJhdGNoOwotI2VuZGlmIC8qIFZNUyAqLwot Ci0jaWZkZWYgR0ZUSU1FUgotICBleHRlcm4gQ0tGTE9BVCBmcHRzZWNzOwotI2VuZGlmIC8qIEdG VElNRVIgKi8KLQotICBleHRlcm4gQ0hBUiAqc3J2Y21kOwotICBleHRlcm4gQ0hBUiAqZXBrdG1z ZzsKLQotI2lmZGVmIENLX1RNUERJUgotZXh0ZXJuIGludCBmX3RtcGRpcjsJCQkvKiBEaXJlY3Rv cnkgY2hhbmdlZCB0ZW1wb3JhcmlseSAqLwotZXh0ZXJuIGNoYXIgc2F2ZGlyW107CQkJLyogRm9y IHNhdmluZyBjdXJyZW50IGRpcmVjdG9yeSAqLwotZXh0ZXJuIGNoYXIgKiBkbGRpcjsKLSNlbmRp ZiAvKiBDS19UTVBESVIgKi8KLQotICBleHRlcm4gaW50IHF1ZXJ5OwkJCS8qIFF1ZXJ5LWFjdGl2 ZSBmbGFnICovCi0jaWZuZGVmIE5PU1BMCi0gIGV4dGVybiBpbnQgY21kbHZsOwotICBjaGFyIHF1 ZXJ5YnVmW1FCVUZMKzFdID0geyBOVUwsIE5VTCB9OyAvKiBRVUVSWSByZXNwb25zZSBidWZmZXIg Ki8KLSAgY2hhciAqcWJ1ZnAgPSBxdWVyeWJ1ZjsJCS8qIFBvaW50ZXIgdG8gaXQgKi8KLSAgaW50 IHFidWZuID0gMDsJCQkvKiBMZW5ndGggb2YgZGF0YSBpbiBpdCAqLwotI2Vsc2UKLSAgZXh0ZXJu IGludCB0bGV2ZWw7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT0lDUAotICBleHRl cm4gaW50IGVzY2FwZTsKLSNlbmRpZiAvKiBOT0lDUCAqLwotLyoKLSAgSWYgdGhlIGZvbGxvd2lu ZyBmbGFnIGlzIG5vbnplcm8gd2hlbiB0aGUgcHJvdG9jb2wgbW9kdWxlIGlzIGVudGVyZWQsCi0g IHRoZW4gc2VydmVyIG1vZGUgcGVyc2lzdHMgZm9yIGV4YWN0bHkgb25lIHRyYW5zYWN0aW9uLCBy YXRoZXIgdGhhbgotICBsb29waW5nIHVudGlsIEJZRSBvciBGSU5JU0ggaXMgcmVjZWl2ZWQuCi0q LwotZXh0ZXJuIGludCBqdXN0b25lOwotCi1zdGF0aWMgaW50IHJfc2F2ZSA9IC0xOwotc3RhdGlj IGludCBwX3NhdmUgPSAtMTsKLQotLyogRnVuY3Rpb24gdG8gbGV0IHJlbW90ZS1tb2RlIHVzZXIg a25vdyB3aGVyZSB0aGVpciBmaWxlKHMpIHdlbnQgKi8KLQotaW50IHdoZXJlZmxnID0gMTsJCQkv KiBVbnNldCB3aXRoIFNFVCBYRkVSIFJFUE9SVCAqLwotCi1zdGF0aWMgVk9JRAotd2hlcmVtc2co KSB7Ci0gICAgZXh0ZXJuIGludCBxdWlldCwgZmlscmVqOwotICAgIGludCBuOwotICAgIG4gPSBm aWxjbnQgLSBmaWxyZWo7Ci0gICAgZGVidWcoRjEwMSwid2hlcmVtc2cgbiIsIiIsbik7Ci0KLSAg ICBkZWJ1ZyhGMTEwLCJ3aGVyZW1zZyBwcmZzcGVjIixwcmZzcGVjLDApOwotICAgIGRlYnVnKEYx MTAsIndoZXJlbXNnIHJmc3BlYyIscmZzcGVjLDApOwotICAgIGRlYnVnKEYxMTAsIndoZXJlbXNn IHBzZnNwZWMiLHBzZnNwZWMsMCk7Ci0gICAgZGVidWcoRjExMCwid2hlcmVtc2cgc2ZzcGVjIixz ZnNwZWMsMCk7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJ3aGVyZW1zZyBwcnJmc3BlYyIscHJyZnNwZWMs MCk7Ci0gICAgZGVidWcoRjExMCwid2hlcmVtc2cgcnJmc3BlYyIscnJmc3BlYywwKTsKLSAgICBk ZWJ1ZyhGMTEwLCJ3aGVyZW1zZyBwc3Jmc3BlYyIscHNyZnNwZWMsMCk7Ci0gICAgZGVidWcoRjEx MCwid2hlcmVtc2cgc3Jmc3BlYyIsc3Jmc3BlYywwKTsKLQotICAgIGlmICghcXVpZXQgJiYgIWxv Y2FsKSB7Ci0JaWYgKG4gPT0gMSkgewotCSAgICBzd2l0Y2ggKG15am9iKSB7Ci0JICAgICAgY2Fz ZSAncyc6Ci0JCWlmIChzZnNwZWMpIHsKLQkJICAgIHByaW50ZigiIFNFTlQ6IFslc10iLHNmc3Bl Yyk7Ci0JCSAgICBpZiAoc3Jmc3BlYykKLQkJICAgICAgcHJpbnRmKCIgVG86IFslc10iLHNyZnNw ZWMpOwotCQkgICAgcHJpbnRmKCIgKCVzKVxyXG4iLCBzdWNjZXNzID8gIk9LIiA6ICJGQUlMRUQi KTsKLQkJfQotCQlicmVhazsKLQkgICAgICBjYXNlICdyJzoKLQkgICAgICBjYXNlICd2JzoKLQkJ aWYgKHJyZnNwZWMpIHsKLQkJICAgIHByaW50ZigiIFJDVkQ6IFslc10iLHJyZnNwZWMpOwotCQkg ICAgaWYgKHJmc3BlYykKLQkJICAgICAgcHJpbnRmKCIgVG86IFslc10iLHJmc3BlYyk7Ci0JCSAg ICBwcmludGYoIiAoJXMpXHJcbiIsIHN1Y2Nlc3MgPyAiT0siIDogIkZBSUxFRCIpOwotCQl9Ci0J ICAgIH0KLQl9IGVsc2UgaWYgKG4gPiAxKSB7Ci0JICAgIHN3aXRjaCAobXlqb2IpIHsKLQkgICAg ICBjYXNlICdzJzoKLQkJaWYgKHNmc3BlYykgewotCQkgICAgcHJpbnRmKCIgU0VOVDogKCVkIGZp bGVzKSIsbik7Ci0JCSAgICBpZiAoc3Jmc3BlYykKLQkJICAgICAgcHJpbnRmKCIgTGFzdDogWyVz XSIsc3Jmc3BlYyk7Ci0JCSAgICBwcmludGYoIiAoJXMpXHJcbiIsIHN1Y2Nlc3MgPyAiT0siIDog IkZBSUxFRCIpOwotCQl9Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgJ3InOgotCSAgICAgIGNhc2Ug J3YnOgotCQlpZiAocnJmc3BlYykgewotCQkgICAgcHJpbnRmKCIgUkNWRDogKCVkIGZpbGVzKSIs bik7Ci0JCSAgICBpZiAocmZzcGVjKQotCQkgICAgICBwcmludGYoIiBMYXN0OiBbJXNdIixyZnNw ZWMpOwotCQkgICAgcHJpbnRmKCIgKCVzKVxyXG4iLCBzdWNjZXNzID8gIk9LIiA6ICJGQUlMRUQi KTsKLQkJfQotCSAgICB9Ci0JfSBlbHNlIGlmIChuID09IDApIHsKLQkgICAgaWYgKG15am9iID09 ICdzJykKLQkgICAgICBwcmludGYoIiBTRU5UOiAoMCBmaWxlcykgICAgICAgICAgXHJcbiIpOwot CSAgICBlbHNlIGlmIChteWpvYiA9PSAncicgfHwgbXlqb2IgPT0gJ3YnKQotCSAgICAgIHByaW50 ZigiIFJDVkQ6ICgwIGZpbGVzKSAgICAgICAgICBcclxuIik7Ci0JfQotICAgIH0KLX0KLQotc3Rh dGljIFZPSUQKLXJkZWJ1ZygpIHsKLSAgICBpZiAoc2VydmVyKQotICAgICAgZGVidWcoRjExMSwi UkVTVU1FIiwic2VydmVyPTEiLGp1c3RvbmUpOwotICAgIGVsc2UKLSAgICAgIGRlYnVnKEYxMTEs IlJFU1VNRSIsInNlcnZlcj0wIixqdXN0b25lKTsKLX0KLQotLyogRmxhZ3MgZm9yIHRoZSBFTkFC TEUgYW5kIERJU0FCTEUgY29tbWFuZHMgKi8KLWV4dGVybiBpbnQKLSAgZW5fY3B5LCBlbl9jd2Qs IGVuX2RlbCwgZW5fZGlyLCBlbl9maW4sIGVuX2dldCwgZW5fYnllLCBlbl9tYWksIGVuX3ByaSwK LSAgZW5faG9zLCBlbl9yZW4sIGVuX3NlbiwgZW5fc3BhLCBlbl9zZXQsIGVuX3R5cCwgZW5fd2hv LCBlbl9yZXQsIGVuX3hpdCwKLSAgZW5fbWtkLCBlbl9ybWQ7Ci0jaWZuZGVmIE5PU1BMCi1leHRl cm4gaW50IGVuX2FzZywgZW5fcXVlOwotI2VuZGlmIC8qIE5PU1BMICovCi1leHRlcm4gaW50IHdo YXQsIGxhc3R4ZmVyOwotCi0vKiBHbG9iYWwgdmFyaWFibGVzIGRlY2xhcmVkIGhlcmUgKi8KLQot ICBpbnQgd2hhdHJ1ID0gMDsJCQkvKiBXaGF0IGFyZSB5b3UuICovCi0gIGludCB3aGF0cnUyID0g MDsJCQkvKiBXaGF0IGFyZSB5b3UsIGNvbnQnZC4gKi8KLQotLyogTG9jYWwgdmFyaWFibGVzICov Ci0KLSAgc3RhdGljIGNoYXIgdnN0YXRlID0gMDsgIAkJLyogU2F2ZWQgU3RhdGUgICAqLwotICBz dGF0aWMgY2hhciB2Y21kID0gMDsgICAgCQkvKiBTYXZlZCBDb21tYW5kICovCi0gIHN0YXRpYyBp bnQgcmVnZXQgPSAwOwkJCS8qIEZsYWcgZm9yIGV4ZWN1dGluZyBSRUdFVCAqLwotICBzdGF0aWMg aW50IHJldHJpZXZlID0gMDsJCS8qIEZsYWcgZm9yIGV4ZWN1dGluZyBSRVRSSUVWRSAqLwotICBz dGF0aWMgaW50IG9wa3QgPSAwOwkJCS8qIFNlbmQgRXh0ZW5kZWQgR0VUIHBhY2tldCAqLwotCi0g IHN0YXRpYyBpbnQgeDsJCQkJLyogR2VuZXJhbC1wdXJwb3NlIGludGVnZXIgKi8KLSAgc3RhdGlj IGNoYXIgKnM7CQkJLyogR2VuZXJhbC1wdXJwb3NlIHN0cmluZyBwb2ludGVyICovCi0KLS8qIE1h Y3JvcyAtIE5vdGUsIEJFR0lOIGlzIHByZWRlZmluZWQgYnkgV2FydCAoYW5kIExleCkgYXMgInN0 YXRlID0gIiwgKi8KLS8qIEJFR0lOIGlzIE5PVCBhIEdPVE8hICovCi0jZGVmaW5lIFRJTklUIGlm ICh0aW5pdCgxKSA8IDApIHJldHVybigtOSkKLSNkZWZpbmUgU0VSVkUgeyBUSU5JVDsgcmVzZXRj KCk7IG5ha3N0YXRlPTE7IHdoYXQ9V19OT1RISU5HOyBjbWFyZzI9IiI7IFwKLXNlbmRtb2RlPVNN X1NFTkQ7IGhhdmVmcz0wOyByZWN1cnNpdmU9cl9zYXZlOyBmbnNwYXRoPXBfc2F2ZTsgQkVHSU4g c2VydmU7IH0KLSNkZWZpbmUgUkVTVU1FIHsgcmRlYnVnKCk7IGlmICghc2VydmVyKSB7IHdoZXJl bXNnKCk7IHJldHVybigwKTsgfSBlbHNlIFwKLWlmIChqdXN0b25lKSB7IGp1c3RvbmU9MDsgd2hl cmVtc2coKTsgcmV0dXJuKDApOyB9IGVsc2UgeyBTRVJWRTsgfSB9Ci0KLSNpZmRlZiBHRlRJTUVS Ci0jZGVmaW5lIFFVSVQgeD1xdWlldDsgcXVpZXQ9MTsgY2xzaWYoKTsgY2xzb2YoMSk7IHRzZWNz PWd0aW1lcigpOyBcCi0gZnB0c2Vjcz1nZnRpbWVyKCk7IHF1aWV0PXg7IHJldHVybihzdWNjZXNz KQotI2Vsc2UKLSNkZWZpbmUgUVVJVCB4PXF1aWV0OyBxdWlldD0xOyBjbHNpZigpOyBjbHNvZigx KTsgdHNlY3M9Z3RpbWVyKCk7IHF1aWV0PXg7IFwKLSByZXR1cm4oc3VjY2VzcykKLSNlbmRpZiAv KiBHRlRJTUVSICovCi0KLS8qCi0gIEJ5IGxhdGUgMTk5OSwgdGhlIGJpZyBzd2l0Y2goKSBzdGF0 ZW1lbnQgZ2VuZXJhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBzdGF0ZQotICB0YWJsZSBiZWdhbiBj aG9raW5nIGV2ZW4gZ2NjLCBzbyBoZXJlIHdlIGV4dHJhY3QgdGhlIGNvZGUgZnJvbSB0aGUgbGFy Z2VyCi0gIHN0YXRlcyBpbnRvIHN0YXRpYyByb3V0aW5lcyB0byByZWR1Y2UgdGhlIHNpemUgb2Yg dGhlIGNhc2VzIGFuZCB0aGUKLSAgc3dpdGNoKCkgb3ZlcmFsbC4gIFRoZSByb3V0aW5lcyBmb2xs b3cgdGhlIHN0YXRlIHRhYmxlOyB0aGUgcHJvdG90eXBlcyBhcmUKLSAgaGVyZS4gIEVhY2ggb2Yg dGhlc2Ugcm91dGluZXMgc2ltcGx5IGNvbnRhaW5zIHRoZSB0ZXh0IGZyb20gdGhlCi0gIGNvcnJl c3BvbmRpbmcgY2FzZSwgYnV0IHdpdGggcmV0dXJuKC0xKSBhZGRlZCBpbiBhcHByb3ByaWF0ZSBw bGFjZXM7IHNlZQotICBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIHN0YXRlIHRhYmxlIHN3aXRjaGVy LgotKi8KLXN0YXRpYyBpbnQgcmM7CQkJCS8qIFJldHVybiBjb2RlIGZvciB0aGVzZSByb3V0aW5l cyAqLwotc3RhdGljIGludCByY3Zfc19wa3QoKTsJCQkvKiBSZWNlaXZlZCBhbiBTIHBhY2tldCAq Lwotc3RhdGljIGludCByY3ZfZmlyc3RkYXRhKCk7CQkvKiBSZWNlaXZlZCBmaXJzdCBEYXRhIHBh Y2tldCAqLwotc3RhdGljIGludCByY3Zfc2hvcnRyZXBseSgpOwkJLyogU2hvcnQgcmVwbHkgdG8g YSBSRU1PVEUgY29tbWFuZCAgKi8KLXN0YXRpYyBpbnQgc3J2X3F1ZXJ5KCk7CQkJLyogU2VydmVy IGFuc3dlcnMgYW4gcXVlcnkgKi8KLXN0YXRpYyBpbnQgc3J2X2NvcHkoKTsJCQkvKiBTZXJ2ZXIg ZXhlY3V0ZXMgUkVNT1RFIENPUFkgKi8KLXN0YXRpYyBpbnQgc3J2X3JlbmFtZSgpOwkJLyogU2Vy dmVyIGV4ZWN1dGVzIFJFTU9URSBSRU5BTUUgKi8KLXN0YXRpYyBpbnQgc3J2X2xvZ2luKCk7CQkJ LyogU2VydmVyIGV4ZWN1dGVzIFJFTU9URSBMT0dJTiAqLwotc3RhdGljIGludCBzcnZfdGltZW91 dCgpOwkJLyogU2VydmVyIHRpbWVzIG91dCAqLwotCi0KLSNkZWZpbmUgQkVHSU4gc3RhdGUgPQot Ci1pbnQgc3RhdGUgPSAwOwotCi1pbnQKLXdhcnQoKQotewotICAgIGludCBjLGFjdG5vOwotICAg IGV4dGVybiBjaGFyIHRibFtdOwotICAgIHdoaWxlICgxKSB7Ci0JYyA9IGlucHV0KCkgLSAzMjsK LQlkZWJ1ZyhGMDAwLCJQUk9UTyBpbnB1dCIsY2tpdG9hKHN0YXRlKSxjKzMyKTsKLQlpZiAoYyA8 IDAgfHwgYyA+IDk1KSBjID0gMDsKLQlpZiAoKGFjdG5vID0gdGJsW2MgKyBzdGF0ZSo5Nl0pICE9 IC0xKQotCSAgICBzd2l0Y2goYWN0bm8pIHsKLWNhc2UgMToKLSAgICB7IFRJTklUOwkJCQkvKiBT ZW5kIGZpbGUocykgKi8KLSAgICBpZiAoc2luaXQoKSA+IDApIEJFR0lOIHNzaW5pdDsKLSAgICAg ICBlbHNlIFJFU1VNRTsgfQotICAgIGJyZWFrOwotY2FzZSAyOgotICAgIHsgVElOSVQ7IG5ha3N0 YXRlID0gMTsgQkVHSU4gZ2V0OyB9Ci0gICAgYnJlYWs7Ci1jYXNlIDM6Ci0gICAgewkJCQkJLyog Q2xpZW50IHNlbmRzIGEgR0VUIGNvbW1hbmQgKi8KLSAgICBUSU5JVDsKLSAgICB2c3RhdGUgPSBn ZXQ7Ci0gICAgcmVnZXQgPSAwOwotICAgIHJldHJpZXZlID0gMDsKLSAgICBvcGt0ID0gMDsKLSAg ICB2Y21kID0gMDsKLSNpZmRlZiBQS1RaRVJPSEFDSwotICAgIGlwa3RhY2tbMF0gPSBOVUw7Ci0j ZW5kaWYgLyogUEtUWkVST0hBQ0sgKi8KLSAgICBpZiAoc2lwa3QoJ0knKSA+PSAwKQotICAgICAg QkVHSU4gaXBrdDsKLSAgICBlbHNlCi0gICAgICBSRVNVTUU7Ci19Ci0gICAgYnJlYWs7Ci1jYXNl IDQ6Ci0gICAgewkJCQkJLyogQ2xpZW50IHNlbmRzIGEgUkVUUklFVkUgY29tbWFuZCAqLwotICAg IFRJTklUOwotICAgIHZzdGF0ZSA9IGdldDsKLSAgICByZWdldCA9IDA7Ci0gICAgcmV0cmlldmUg PSAxOwotICAgIG9wa3QgPSAwOwotICAgIHZjbWQgPSAwOwotICAgIGlmIChzaXBrdCgnSScpID49 IDApCi0gICAgICBCRUdJTiBpcGt0OwotICAgIGVsc2UKLSAgICAgIFJFU1VNRTsKLX0KLSAgICBi cmVhazsKLWNhc2UgNToKLSAgICB7CQkJCQkvKiBDbGllbnQgc2VuZHMgYSBSRUdFVCBjb21tYW5k ICovCi0gICAgVElOSVQ7Ci0gICAgdnN0YXRlID0gZ2V0OwotICAgIHJlZ2V0ID0gMTsKLSAgICBy ZXRyaWV2ZSA9IDA7Ci0gICAgb3BrdCA9IDA7Ci0gICAgdmNtZCA9IDA7Ci0gICAgaWYgKHNpcGt0 KCdJJykgPj0gMCkKLSAgICAgIEJFR0lOIGlwa3Q7Ci0gICAgZWxzZQotICAgICAgUkVTVU1FOwot fQotICAgIGJyZWFrOwotY2FzZSA2OgotICAgIHsJCQkJCS8qIENsaWVudCBzZW5kcyBFeHRlbmRl ZCBHRVQgUGFja2V0ICovCi0gICAgVElOSVQ7Ci0gICAgdnN0YXRlID0gZ2V0OwotICAgIHJlZ2V0 ID0gb29wdHMgJiBHT1BUX1JFUzsKLSAgICByZXRyaWV2ZSA9IG9vcHRzICYgR09QVF9ERUw7Ci0g ICAgb3BrdCA9IDE7Ci0gICAgdmNtZCA9IDA7Ci0gICAgaWYgKHNpcGt0KCdJJykgPj0gMCkKLSAg ICAgIEJFR0lOIGlwa3Q7Ci0gICAgZWxzZQotICAgICAgUkVTVU1FOwotfQotICAgIGJyZWFrOwot Y2FzZSA3OgotICAgIHsJCQkJCS8qIENsaWVudCBzZW5kcyBhIEhvc3QgY29tbWFuZCAqLwotICAg IFRJTklUOwotICAgIHZzdGF0ZSA9IHJnZW47Ci0gICAgdmNtZCA9ICdDJzsKLSAgICBpZiAoc2lw a3QoJ0knKSA+PSAwKQotICAgICAgQkVHSU4gaXBrdDsKLSAgICBlbHNlCi0gICAgICBSRVNVTUU7 Ci19Ci0gICAgYnJlYWs7Ci1jYXNlIDg6Ci0gICAgeyBUSU5JVDsJCQkJLyogQ2xpZW50IHNlbmRz IGEgS2VybWl0IGNvbW1hbmQgKi8KLSAgICB2c3RhdGUgPSByZ2VuOwotICAgIHZjbWQgPSAnSyc7 Ci0gICAgaWYgKHNpcGt0KCdJJykgPj0gMCkKLSAgICAgIEJFR0lOIGlwa3Q7Ci0gICAgZWxzZQot ICAgICAgUkVTVU1FOwotfQotICAgIGJyZWFrOwotY2FzZSA5OgotICAgIHsJCQkJCS8qIENsaWVu dCBzZW5kcyBhIFJFTU9URSBjb21tYW5kICovCi0gICAgVElOSVQ7Ci0gICAgdnN0YXRlID0gcmdl bjsKLSAgICB2Y21kID0gJ0cnOwotICAgIGlmIChzaXBrdCgnSScpID49IDApCi0gICAgICBCRUdJ TiBpcGt0OwotICAgIGVsc2UKLSAgICAgIFJFU1VNRTsKLX0KLSAgICBicmVhazsKLWNhc2UgMTA6 Ci0gICAgewkJCQkJLyogRW50ZXIgc2VydmVyIG1vZGUgKi8KLSAgICBpbnQgeDsKLSAgICB4ID0g anVzdG9uZTsKLSAgICBpZiAoIUVOQUJMRUQoZW5fZGVsKSkgewkJLyogSWYgREVMRVRFIGlzIGRp c2FibGVkICovCi0JaWYgKGZuY2FjdCA9PSBYWUZYX0IgfHwJCS8qIHVuZG8gYW55IGZpbGUgY29s bGlzaW9uIGFjdGlvbiAqLwotCSAgICBmbmNhY3QgPT0gWFlGWF9VIHx8CQkvKiB0aGF0IGNvdWxk IHJlc3VsdCBpbiBkZWxldGlvbiBvciAqLwotCSAgICBmbmNhY3QgPT0gWFlGWF9BIHx8CQkvKiBt b2RpZmljYXRpb24gb2YgZXhpc3RpbmcgZmlsZXMuICovCi0JICAgIGZuY2FjdCA9PSBYWUZYX1gp IHsKLSNpZm5kZWYgTk9JQ1AKLQkgICAgZXh0ZXJuIGludCBnX2ZuY2FjdDsKLQkgICAgZ19mbmNh Y3QgPSBmbmNhY3Q7CQkvKiBTYXZlIGN1cnJlbnQgc2V0dGluZyAqLwotI2VuZGlmIC8qIE5PSUNQ ICovCi0JICAgIGZuY2FjdCA9IFhZRlhfUjsJCS8qIENoYW5nZSB0byBSRU5BTUUgKi8KLQkgICAg ZGVidWcoRjEwMSwic2VydmVyIERFTEVURSBkaXNhYmxlZCBzbyBmbmNhY3QgUkVOQU1FIiwiIixm bmNhY3QpOwotCX0KLSAgICB9Ci0gICAgU0VSVkU7CQkJCS8qIHRpbml0KCkgY2xlYXJzIGp1c3Rv bmUuLi4gKi8KLSAgICBqdXN0b25lID0geDsKLSNpZmRlZiBJS1NEQgotICAgIGlmIChpa2Rib3Bl bikgc2xvdHN0YXRlKHdoYXQsICJTRVJWRVIiLCAiIiwgIiIpOwotI2VuZGlmIC8qIElLU0RCICov Ci19Ci0gICAgYnJlYWs7Ci1jYXNlIDExOgotICAgIHsKLSAgICBpbnQgYjEgPSAwLCBiMiA9IDA7 Ci0gICAgaWYgKCFkYXRhKSBUSU5JVDsJCQkvKiAiQUJFTkQiIC0tIFRlbGwgb3RoZXIgc2lkZS4g Ki8KLSNpZm5kZWYgcGRwMTEKLSAgICBpZiAoZXBrdGZsZykgewkJCS8qIElmIGJlY2F1c2Ugb2Yg RS1QQUNLRVQgY29tbWFuZCAqLwotCWIxID0gYmN0bDsgYjIgPSBiY3R1OwkJLyogU2F2ZSBibG9j ayBjaGVjayB0eXBlICovCi0JYmN0bCA9IGJjdHUgPSAxOwkJLyogc2V0IGl0IHRvIDEgKi8KLSAg ICB9Ci0jZW5kaWYgLyogcGRwMTEgKi8KLSAgICBlcnJwa3QoKENIQVIgKikiVXNlciBjYW5jZWxs ZWQiKTsJLyogU2VuZCB0aGUgcGFja2V0ICovCi0jaWZuZGVmIHBkcDExCi0gICAgaWYgKGVwa3Rm bGcpIHsJCQkvKiBSZXN0b3JlIHRoZSBibG9jayBjaGVjayAqLwotCWVwa3RmbGcgPSAwOwotCWJj dGwgPSBiMTsgYmN0dSA9IGIyOwotICAgIH0KLSNlbmRpZiAvKiBwZHAxMSAqLwotICAgIHN1Y2Nl c3MgPSAwOwotICAgIHJldHVybigwKTsJCQkJLyogUmV0dXJuIGZyb20gcHJvdG9jb2wuICovCi19 Ci0gICAgYnJlYWs7Ci1jYXNlIDEyOgotICAgIHsJCS8qIFJlY2VpdmUgU2VuZC1Jbml0IHBhY2tl dC4gKi8KLSAgICByYyA9IHJjdl9zX3BrdCgpOwotICAgIGNhbmNlbCA9IDA7CQkJCS8qIFJlc2V0 IGNhbmNlbGxhdGlvbiBjb3VudGVyICovCi0gICAgZGVidWcoRjEwMSwicmN2X3NfcGt0IiwiIixy Yyk7Ci0gICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7CQkvKiAoc2VlIGJlbG93KSAqLwotfQot ICAgIGJyZWFrOwotY2FzZSAxMzoKLSAgICB7CQkJCS8qIEdldCBhY2sgZm9yIEktcGFja2V0ICov Ci0gICAgaW50IHggPSAwOwotI2lmZGVmIFBLVFpFUk9IQUNLCi0gICAgY2tzdHJuY3B5KGlwa3Rh Y2ssKGNoYXIgKilyZGF0YXAsUEtUWkVST0xFTik7IC8qIFNhdmUgYSBjb3B5IG9mIHRoZSBBQ0sg Ki8KLSAgICBpcGt0bGVuID0gc3RybGVuKGlwa3RhY2spOwotI2VuZGlmIC8qIFBLVFpFUk9IQUNL ICovCi0gICAgc3BhcihyZGF0YXApOwkJCS8qIFNldCBwYXJhbWV0ZXJzICovCi0gICAgY2FuY2Vs ID0gMDsKLSAgICB3aW5sbyA9IDA7CQkJCS8qIFNldCB3aW5kb3ctbG93IGJhY2sgdG8gemVybyAq LwotICAgIGRlYnVnKEYxMDEsIjxpcGt0Plkgd2lubG8iLCIiLHdpbmxvKTsKLSAgICB1cnNlcnZl ciA9IDE7CQkJLyogU28gSSBrbm93IEknbSB0YWxraW5nIHRvIGEgc2VydmVyICovCi0gICAgaWYg KHZjbWQpIHsJCQkJLyogSWYgc2VuZGluZyBhIGdlbmVyaWMgY29tbWFuZCAqLwotCWlmICh0aW5p dCgwKSA8IDApIHJldHVybigtOSk7CS8qIEluaXRpYWxpemUgbWFueSB0aGluZ3MgKi8KLQl4ID0g c2NtZCh2Y21kLChDSEFSICopY21hcmcpOwkvKiBEbyB0aGF0ICovCi0JaWYgKHggPj0gMCkgeCA9 IDA7CQkvKiAoYmVjYXVzZSBvZiBPLVBhY2tldCkgKi8KLQlkZWJ1ZyhGMTAxLCJwcm90byBHIHBh Y2tldCBzY21kIiwiIix4KTsKLQl2Y21kID0gMDsJCQkvKiBhbmQgdGhlbiB1bi1yZW1lbWJlciBp dC4gKi8KLSAgICB9IGVsc2UgaWYgKHZzdGF0ZSA9PSBnZXQpIHsKLQlkZWJ1ZyhGMTAxLCJSRUdF VCBzc3RhdGUiLCIiLHNzdGF0ZSk7Ci0JeCA9IHNyaW5pdChyZWdldCwgcmV0cmlldmUsIG9wa3Qp OyAvKiBHRVQgb3IgUkVHRVQsIGV0YyAqLwotICAgIH0KLSAgICBpZiAoeCA8IDApIHsJCQkvKiBJ ZiBjb21tYW5kIHdhcyB0b28gbG9uZyAqLwotCWlmICghc3JpbXNnKQotCSAgc3JpbXNnID0gIkVy cm9yIHNlbmRpbmcgc3RyaW5nIjsKLQllcnJwa3QoKENIQVIgKilzcmltc2cpOwkJLyogY2FuY2Vs IGJvdGggc2lkZXMuICovCi0Jc3VjY2VzcyA9IDA7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSBpZiAo eCA+IDApIHsJCQkvKiBOZWVkIHRvIHNlbmQgbW9yZSBPLVBhY2tldHMgKi8KLQlCRUdJTiBzc29w a3Q7Ci0gICAgfSBlbHNlIHsKLQlydGltZXIoKTsJCQkvKiBSZXNldCB0aGUgZWxhcHNlZCBzZWNv bmRzIHRpbWVyLiAqLwotI2lmZGVmIEdGVElNRVIKLQlyZnRpbWVyKCk7Ci0jZW5kaWYgLyogR0ZU SU1FUiAqLwotCXdpbmxvID0gMDsJCQkvKiBXaW5kb3cgYmFjayB0byAwLCBhZ2Fpbi4gKi8KLQlk ZWJ1ZyhGMTAxLCI8aXBrdD5ZIHZzdGF0ZSIsIiIsdnN0YXRlKTsKLQluYWtzdGF0ZSA9IDE7CQkJ LyogQ2FuIHNlbmQgTkFLcyBmcm9tIGhlcmUuICovCi0JQkVHSU4gdnN0YXRlOwkJCS8qIFN3aXRj aCB0byBkZXNpcmVkIHN0YXRlICovCi0gICAgfQotfQotICAgIGJyZWFrOwotY2FzZSAxNDoKLSAg ICB7CQkJCS8qIEdvdCBBQ0sgdG8gTy1QYWNrZXQgKi8KLSAgICBkZWJ1ZyhGMTAwLCJDUENQUk8g PHNzb3BrdD5ZIiwiIiwwKTsKLSAgICB4ID0gc29wa3QoKTsKLSAgICBkZWJ1ZyhGMTAxLCJDUENQ Uk8gPHNzb3BrdD5ZIHgiLCIiLHgpOwotICAgIGlmICh4IDwgMCkgewkJCS8qIElmIGVycm9yICov Ci0JZXJycGt0KChDSEFSICopc3JpbXNnKTsJCS8qIGNhbmNlbCBib3RoIHNpZGVzLiAqLwotCXN1 Y2Nlc3MgPSAwOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgaWYgKHggPT0gMCkgewkJLyogVGhpcyB3 YXMgdGhlIGxhc3QgTy1QYWNrZXQgKi8KLQlydGltZXIoKTsJCQkvKiBSZXNldCB0aGUgZWxhcHNl ZCBzZWNvbmRzIHRpbWVyLiAqLwotI2lmZGVmIEdGVElNRVIKLQlyZnRpbWVyKCk7Ci0jZW5kaWYg LyogR0ZUSU1FUiAqLwotCXdpbmxvID0gMDsJCQkvKiBXaW5kb3cgYmFjayB0byAwLCBhZ2Fpbi4g Ki8KLQlkZWJ1ZyhGMTAxLCI8c3NvcGt0Plkgd2lubG8iLCIiLHdpbmxvKTsKLQluYWtzdGF0ZSA9 IDE7CQkJLyogQ2FuIHNlbmQgTkFLcyBmcm9tIGhlcmUuICovCi0JQkVHSU4gdnN0YXRlOwkJCS8q IFN3aXRjaCB0byBkZXNpcmVkIHN0YXRlICovCi0gICAgfQotICAgIGRlYnVnKEYxMDEsIkNQQ1BS TyA8c3NvcGt0Plkgbm90IGNoYW5naW5nIHN0YXRlIiwiIix4KTsKLX0KLSAgICBicmVhazsKLWNh c2UgMTU6Ci0gICAgewkJCQkvKiBJZ25vcmUgRXJyb3IgcmVwbHkgdG8gSSBwYWNrZXQgKi8KLSAg ICBpbnQgeCA9IDA7Ci0gICAgd2lubG8gPSAwOwkJCQkvKiBTZXQgd2luZG93LWxvdyBiYWNrIHRv IHplcm8gKi8KLSAgICBkZWJ1ZyhGMTAxLCI8aXBrdD5FIHdpbmxvIiwiIix3aW5sbyk7Ci0gICAg aWYgKHZjbWQpIHsJCQkJLyogSW4gY2FzZSBvdGhlciBLZXJtaXQgZG9lc24ndCAqLwotCWlmICh0 aW5pdCgwKSA8IDApIHJldHVybigtOSk7Ci0JeCA9IHNjbWQodmNtZCwoQ0hBUiAqKWNtYXJnKTsJ LyogdW5kZXJzdGFuZCBJLXBhY2tldHMuICovCi0JaWYgKHggPj0gMCkgeCA9IDA7CQkvKiAoYmVj YXVzZSBvZiBPLVBhY2tldCkgKi8KLQl2Y21kID0gMDsJCQkvKiBPdGhlcndpc2UgYWN0IGFzIGFi b3ZlLi4uICovCi0gICAgfSBlbHNlIGlmICh2c3RhdGUgPT0gZ2V0KSB4ID0gc3Jpbml0KHJlZ2V0 LCByZXRyaWV2ZSwgb3BrdCk7Ci0gICAgaWYgKHggPCAwKSB7CQkJLyogSWYgY29tbWFuZCB3YXMg dG9vIGxvbmcgKi8KLQllcnJwa3QoKENIQVIgKilzcmltc2cpOwkJLyogY2FuY2VsIGJvdGggc2lk ZXMuICovCi0Jc3VjY2VzcyA9IDA7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSBpZiAoeCA+IDApIHsJ CQkvKiBOZWVkIHRvIHNlbmQgbW9yZSBPLVBhY2tldHMgKi8KLQlCRUdJTiBzc29wa3Q7Ci0gICAg fSBlbHNlIHsKLQlmcmVlcnBrdCh3aW5sbyk7CQkvKiBEaXNjYXJkIHRoZSBFcnJvciBwYWNrZXQu ICovCi0JZGVidWcoRjEwMSwiPGlwa3Q+RSB3aW5sbyIsIiIsd2lubG8pOwotCXdpbmxvID0gMDsJ CQkvKiBCYWNrIHRvIHBhY2tldCAwIGFnYWluLiAqLwotCW5ha3N0YXRlID0gMTsJCQkvKiBDYW4g c2VuZCBOQUtzIGZyb20gaGVyZS4gKi8KLQlCRUdJTiB2c3RhdGU7Ci0gICAgfQotfQotICAgIGJy ZWFrOwotY2FzZSAxNjoKLSAgICB7CQkvKiBSZXNlbmQgb2YgcHJldmlvdXMgSS1wa3QgQUNLLCBz YW1lIHNlcSBudW1iZXIgKi8KLSAgICBmcmVlcnBrdCgwKTsJCQkvKiBGcmVlIHRoZSBBQ0sncyBy ZWNlaXZlIGJ1ZmZlciAqLwotICAgIHJlc2VuZCgwKTsJCQkJLyogU2VuZCB0aGUgR0VUIHBhY2tl dCBhZ2Fpbi4gKi8KLX0KLSAgICBicmVhazsKLWNhc2UgMTc6Ci0gICAgewkJCQkvKiBHZXQgSS1w YWNrZXQgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBzcGFyKHJkYXRhcCk7CQkJLyogU2V0IHBh cmFtZXRlcnMgZnJvbSBpdCAqLwotICAgIGFjazEocnBhcigpKTsJCQkvKiBSZXNwb25kIHdpdGgg b3VyIG93biBwYXJhbWV0ZXJzICovCi0jaWZkZWYgQ09NTUVOVAotICAgIHBrdGluaXQoKTsJCQkJ LyogUmVpbml0aWFsaXplIHBhY2tldCBudW1iZXJzICovCi0jZWxzZQotI2lmZGVmIENPTU1FTlQK LSAgICAvKiBUaGlzIGNhbid0IGJlIHJpZ2h0IC0gaXQgdW5kb2VzIHRoZSBzdHVmZiB3ZSBqdXN0 IG5lZ290aWF0ZWQgKi8KLSAgICB4ID0ganVzdG9uZTsKLSAgICB0aW5pdCgxKTsJCQkJLyogUmVp bml0aWFsaXplIEVWRVJZVEhJTkcgKi8KLSAgICBqdXN0b25lID0geDsJCQkvKiBCdXQgdGhpcy4u LiAqLwotI2Vsc2UKLSAgICB0aW5pdCgwKTsJCQkJLyogSW5pdGlhbGl6ZSBtb3N0IHRoaW5ncyAq LwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyog Tk9TRVJWRVIgKi8KLSAgICBjYW5jZWwgPSAwOwkJCQkvKiBSZXNldCBjYW5jZWxsYXRpb24gY291 bnRlciAqLwotfQotICAgIGJyZWFrOwotY2FzZSAxODoKLSAgICB7CQkJCS8qIEdFVCAqLwotI2lm bmRlZiBOT1NFUlZFUgotICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCkgewotCWVycnBrdCgo Q0hBUiAqKSJMb2dpbiByZXF1aXJlZCIpOwotCVNFUlZFOwotICAgIH0gZWxzZSBpZiAoc2dldGlu aXQoMCwwKSA8IDApIHsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBDS1NZU0xPRwot CWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLQkgIGNrc3lzbG9nKFNZ U0xHX1BSLCAxLCAic2VydmVyIiwgIkdFVCIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBD S1NZU0xPRyAqLwotCUJFR0lOIHNzaW5pdDsKLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8K LX0KLSAgICBicmVhazsKLWNhc2UgMTk6Ci0gICAgewkJCQkvKiBHRVQgL0RFTEVURSAoUkVUUklF VkUpICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgaWYgKHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7 Ci0JZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxz ZSBpZiAoIUVOQUJMRUQoZW5fZGVsKSkgewotCWVycnBrdCgoQ0hBUiAqKSJEZWxldGluZyBmaWxl cyBpcyBkaXNhYmxlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgaWYgKHNnZXRpbml0KDAsMCkg PCAwKSB7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0JbW92aW5nID0gMTsKLSNpZmRlZiBDS1NZ U0xPRwotCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLQkgIGNrc3lz bG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkdFVCAvREVMRVRFIiwgKGNoYXIgKilzcnZjbWQp OwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0JQkVHSU4gc3Npbml0OwotICAgIH0KLSNlbmRpZiAv KiBOT1NFUlZFUiAqLwotfQotICAgIGJyZWFrOwotY2FzZSAyMDoKLSAgICB7CQkJCS8qIEdFVCAv UkVDVVJTSVZFICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgcmVjdXJzaXZlID0gMTsJCQkvKiBT ZXQgdGhlc2UgYmVmb3JlIHNnZXRpbml0KCkgKi8KLSAgICBpZiAoZm5zcGF0aCA9PSBQQVRIX09G RikKLSAgICAgIGZuc3BhdGggPSBQQVRIX1JFTDsJCS8qIERvbid0IHdvcnJ5LCB0aGV5IHdpbGwg YmUgKi8KLSAgICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQpIHsJCS8qIHJlc2V0IG5leHQgdGlt ZSB0aHJvdWdoLiAqLwotCWVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJlZCIpOwotCVJFU1VN RTsKLSAgICB9IGVsc2UgaWYgKHNnZXRpbml0KDAsMCkgPCAwKSB7Ci0JUkVTVU1FOwotICAgIH0g ZWxzZSB7Ci0jaWZkZWYgQ0tTWVNMT0cKLQlpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNr eGxvZ2dpbmcpCi0JICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJHRVQgL1JFQ1VS U0lWRSIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCUJFR0lOIHNz aW5pdDsKLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLSAgICBicmVhazsKLWNhc2Ug MjE6Ci0gICAgewkJCQkvKiBHRVQgL1JFQ1VSU0lWRSAvREVMRVRFICovCi0jaWZuZGVmIE5PU0VS VkVSCi0gICAgcmVjdXJzaXZlID0gMTsJCQkvKiBTZXQgdGhlc2UgYmVmb3JlIHNnZXRpbml0KCkg Ki8KLSAgICBpZiAoZm5zcGF0aCA9PSBQQVRIX09GRikKLSAgICAgIGZuc3BhdGggPSBQQVRIX1JF TDsJCS8qIERvbid0IHdvcnJ5LCB0aGV5IHdpbGwgYmUgKi8KLSAgICBtb3ZpbmcgPSAxOwkJCQkv KiByZXNldCBuZXh0IHRpbWUgdGhyb3VnaC4gKi8KLSAgICBpZiAoeF9sb2dpbiAmJiAheF9sb2dn ZWQpIHsKLQllcnJwa3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsKLQlSRVNVTUU7Ci0gICAg fSBlbHNlIGlmICghRU5BQkxFRChlbl9kZWwpKSB7Ci0JZXJycGt0KChDSEFSICopIkRlbGV0aW5n IGZpbGVzIGlzIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSBpZiAoc2dldGluaXQo MCwwKSA8IDApIHsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBDS1NZU0xPRwotCWlm IChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLQkgIGNrc3lzbG9nKFNZU0xH X1BSLDEsInNlcnZlciIsCi0JCSAgICJHRVQgL1JFQ1VSU0lWRSAvREVMRVRFIiwoY2hhciAqKXNy dmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQlCRUdJTiBzc2luaXQ7Ci0gICAgfQotI2Vu ZGlmIC8qIE5PU0VSVkVSICovCi19Ci0gICAgYnJlYWs7Ci1jYXNlIDIyOgotICAgIHsJCQkJLyog R0VUIC9SRUNPVkVSIChSRUdFVCkgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBpZiAoeF9sb2dp biAmJiAheF9sb2dnZWQpIHsKLQllcnJwa3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsKLQlT RVJWRTsKLSAgICB9IGVsc2UgaWYgKHNnZXRpbml0KDEsMCkgPCAwKSB7Ci0JUkVTVU1FOwotICAg IH0gZWxzZSB7Ci0jaWZkZWYgQ0tTWVNMT0cKLQlpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYm IGNreGxvZ2dpbmcpCi0JICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJHRVQgL1JF Q09WRVIiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQlCRUdJTiBz c2luaXQ7Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0gICAgYnJlYWs7Ci1jYXNl IDIzOgotICAgIHsJCQkJLyogRXh0ZW5kZWQgR0VUICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAg aWYgKHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7CQkvKiAoYW55IGNvbWJpbmF0aW9uIG9mIG9wdGlv bnMpICovCi0JZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7Ci0JU0VSVkU7Ci0gICAg fSBlbHNlIGlmICgoeCA9IHNnZXRpbml0KDAsMSkpIDwgMCkgewotCWRlYnVnKEYxMDEsIkNLQ1BS TyA8c2VydmU+TyBzZ2V0aW5pdCBmYWlsIiwiIix4KTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIGlm ICh4ID09IDApIHsKLQlkZWJ1ZyhGMTAxLCJDS0NQUk8gPHNlcnZlPk8gc2dldGluaXQgZG9uZSIs IiIseCk7Ci0jaWZkZWYgQ0tTWVNMT0cKLQlpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNr eGxvZ2dpbmcpCi0JICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJFWFRFTkRFRCBH RVQiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQlCRUdJTiBzc2lu aXQ7Ci0gICAgfSBlbHNlIHsJCQkJLyogT3RoZXJ3aXNlIHN0YXkgaW4gdGhpcyBzdGF0ZSAqLwot CWRlYnVnKEYxMDEsIkNLQ1BSTyA8c2VydmU+TyBzZ2V0aW5pdCBUQkMiLCIiLHgpOwotCWFjaygp OwotCUJFR0lOIHJvcGt0OwotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotICAgIGJy ZWFrOwotY2FzZSAyNDoKLSAgICB7Ci0jaWZuZGVmIE5PU0VSVkVSCi0gICAgaWYgKHhfbG9naW4g JiYgIXhfbG9nZ2VkKSB7CQkvKiAoYW55IGNvbWJpbmF0aW9uIG9mIG9wdGlvbnMpICovCi0JZXJy cGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7Ci0JU0VSVkU7Ci0gICAgfSBlbHNlIGlmICgo eCA9IHNnZXRpbml0KDAsMSkpIDwgMCkgewotCWRlYnVnKEYxMDEsIkNLQ1BSTyA8cm9wa3Q+TyBz Z2V0aW5pdCBmYWlsIiwiIix4KTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIGlmICh4ID09IDApIHsK LQlkZWJ1ZyhGMTAxLCJDS0NQUk8gPHJvcGt0Pk8gc2dldGluaXQgZG9uZSIsIiIseCk7Ci0jaWZk ZWYgQ0tTWVNMT0cKLQlpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0J ICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJFWFRFTkRFRCBHRVQiLCAoY2hhciAq KXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQlCRUdJTiBzc2luaXQ7Ci0gICAgfSBl bHNlIHsJCQkJLyogT3RoZXJ3aXNlIHN0YXkgaW4gdGhpcyBzdGF0ZSAqLwotCWRlYnVnKEYxMDEs IkNLQ1BSTyA8cm9wa3Q+TyBzZ2V0aW5pdCBUQkMiLCIiLHgpOwotCWFjaygpOwotICAgIH0KLSNl bmRpZiAvKiBOT1NFUlZFUiAqLwotfQotICAgIGJyZWFrOwotY2FzZSAyNToKLSAgICB7CQkJCS8q IEdlbmVyaWMgc2VydmVyIGNvbW1hbmQgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBzcnZwdHIg PSBzcnZjbWQ7CQkJLyogUG9pbnQgdG8gY29tbWFuZCBidWZmZXIgKi8KLSAgICBkZWNvZGUocmRh dGFwLHB1dHNydiwwKTsJCS8qIERlY29kZSBwYWNrZXQgZGF0YSBpbnRvIGl0ICovCi0gICAgcHV0 c3J2KE5VTCk7CQkJLyogSW5zZXJ0IGEgY291cGxlIG51bGxzICovCi0gICAgcHV0c3J2KE5VTCk7 CQkJLyogZm9yIHRlcm1pbmF0aW9uICovCi0gICAgaWYgKHNydmNtZFswXSkgewotCXNzdGF0ZSA9 IHNydmNtZFswXTsJCS8qIFNldCByZXF1ZXN0ZWQgc3RhcnQgc3RhdGUgKi8KLQlpZiAoeF9sb2dp biAmJiAheF9sb2dnZWQgJiYJLyogTG9naW4gcmVxdWlyZWQ/ICovCi0JICAgIC8qIExvZ2luLCBM b2dvdXQsIGFuZCBIZWxwIGFyZSBhbGxvd2VkIHdoZW4gbm90IGxvZ2dlZCBpbiAqLwotCSAgICBz c3RhdGUgIT0gJ0knICYmIHNzdGF0ZSAhPSAnTCcgJiYgc3N0YXRlICE9ICdIJykgewotCSAgICBl cnJwa3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsKLQkgICAgU0VSVkU7Ci0JfSBlbHNlIHsK LQkgICAgbmFrc3RhdGUgPSAwOwkJLyogTm93IEknbSB0aGUgc2VuZGVyLiAqLwotCSAgICB3aGF0 ID0gV19SRU1POwkJLyogRG9pbmcgYSBSRU1PVEUgY29tbWFuZC4gKi8KLSNpZmRlZiBTVFJFQU1J TkcKLQkgICAgaWYgKCFzdHJlYW1pbmcpCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0JICAgICAg aWYgKHRpbWludCA8IDEpCi0JCXRpbWludCA9IGNoa3RpbW8ocnRpbW8sdGltZWYpOyAvKiBTd2l0 Y2ggdG8gcGVyLXBhY2tldCB0aW1lciAqLwotCSAgICBiaW5hcnkgPSBYWUZUX1Q7CQkvKiBTd2l0 Y2ggdG8gdGV4dCBtb2RlICovCi0JICAgIEJFR0lOIGdlbmVyaWM7CQkvKiBTd2l0Y2ggdG8gZ2Vu ZXJpYyBjb21tYW5kIHN0YXRlICovCi0JfQotICAgIH0gZWxzZSB7Ci0JZXJycGt0KChDSEFSICop IkJhZGx5IGZvcm1lZCBzZXJ2ZXIgY29tbWFuZCIpOyAvKiByZXBvcnQgZXJyb3IgKi8KLQlSRVNV TUU7CQkJLyogJiBnbyBiYWNrIHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8KLSAgICB9Ci0jZW5k aWYgLyogTk9TRVJWRVIgKi8KLX0KLSAgICBicmVhazsKLWNhc2UgMjY6Ci0gICAgewkJCQkvKiBS ZWNlaXZlIEhvc3QgY29tbWFuZCAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIGlmICh4X2xvZ2lu ICYmICF4X2xvZ2dlZCkgewotCWVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJlZCIpOwotCVNF UlZFOwotICAgIH0gZWxzZSBpZiAoIUVOQUJMRUQoZW5faG9zKSkgewotCWVycnBrdCgoQ0hBUiAq KSJSRU1PVEUgSE9TVCBkaXNhYmxlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgaWYgKG5vcHVz aCkgewotCWVycnBrdCgoQ0hBUiAqKSJIT1NUIGNvbW1hbmRzIG5vdCBhdmFpbGFibGUiKTsKLQlS RVNVTUU7Ci0gICAgfSBlbHNlIHsKLQlzcnZwdHIgPSBzcnZjbWQ7CQkvKiBQb2ludCB0byBjb21t YW5kIGJ1ZmZlciAqLwotCWRlY29kZShyZGF0YXAscHV0c3J2LDApOwkvKiBEZWNvZGUgY29tbWFu ZCBwYWNrZXQgaW50byBpdCAqLwotCXB1dHNydihOVUwpOwkJCS8qIE51bGwtdGVybWluYXRlICov Ci0JbmFrc3RhdGUgPSAwOwkJCS8qIE5vdyBzZW5kaW5nLCBub3QgcmVjZWl2aW5nICovCi0JYmlu YXJ5ID0gWFlGVF9UOwkJLyogU3dpdGNoIHRvIHRleHQgbW9kZSAqLwotCWlmIChzeXNjbWQoKGNo YXIgKilzcnZjbWQsIiIpKSB7IC8qIFRyeSB0byBleGVjdXRlIHRoZSBjb21tYW5kICovCi0JICAg IHdoYXQgPSBXX1JFTU87CQkvKiBEb2luZyBhIFJFTU9URSBjb21tYW5kLiAqLwotI2lmZGVmIFNU UkVBTUlORwotCSAgICBpZiAoIXN0cmVhbWluZykKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQkg ICAgICBpZiAodGltaW50IDwgMSkKLQkJdGltaW50ID0gY2hrdGltbyhydGltbyx0aW1lZik7IC8q IFN3aXRjaCB0byBwZXItcGFja2V0IHRpbWVyICovCi0jaWZkZWYgQ0tTWVNMT0cKLQkgICAgaWYg KGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotCSAgICAgIGNrc3lzbG9nKFNZ U0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBIT1NUIiwgKGNoYXIgKilzcnZjbWQpOwotI2Vu ZGlmIC8qIENLU1lTTE9HICovCi0JICAgIEJFR0lOIHNzaW5pdDsJCS8qIElmIE9LLCBzZW5kIGJh Y2sgaXRzIG91dHB1dCAqLwotCX0gZWxzZSB7CQkJLyogT3RoZXJ3aXNlICovCi0JICAgIGVycnBr dCgoQ0hBUiAqKSJDYW4ndCBkbyBzeXN0ZW0gY29tbWFuZCIpOyAvKiByZXBvcnQgZXJyb3IgKi8K LQkgICAgUkVTVU1FOwkJCS8qICYgZ28gYmFjayB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCi0J fQotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotICAgIGJyZWFrOwotY2FzZSAyNzoK LSAgICB7CQkJCS8qIEludGVycnVwdGVkIG9yIGNvbm5lY3Rpb24gbG9zdCAqLwotICAgIHJjID0g c3J2X3RpbWVvdXQoKTsKLSAgICBkZWJ1ZyhGMTAxLCJzcnZfdGltZW91dCIsIiIscmMpOwotICAg IGlmIChyYyA+IC0xKSByZXR1cm4ocmMpOwkJLyogKHNlZSBiZWxvdykgKi8KLX0KLSAgICBicmVh azsKLWNhc2UgMjg6Ci0gICAgewkJCQkvKiBTZXJ2ZXIgZ290IGEgTkFLIGluIGNvbW1hbmQtd2Fp dCAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIGVycnBrdCgoQ0hBUiAqKSJEaWQgeW91IHNheSBS RUNFSVZFIGluc3RlYWQgb2YgR0VUPyIpOwotICAgIFJFU1VNRTsKLSNlbmRpZiAvKiBOT1NFUlZF UiAqLwotfQotICAgIGJyZWFrOwotY2FzZSAyOToKLSAgICB7CQkJCS8qIEFueSBvdGhlciBjb21t YW5kIGluIHRoaXMgc3RhdGUgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBpZiAoYyAhPSAoJ0Un IC0gU1ApICYmIGMgIT0gKCdZJyAtIFNQKSkgLyogZXhjZXB0IEUgYW5kIFkgcGFja2V0cy4gKi8K LSAgICAgIGVycnBrdCgoQ0hBUiAqKSJVbmltcGxlbWVudGVkIHNlcnZlciBmdW5jdGlvbiIpOwot ICAgIC8qIElmIHdlIGFuc3dlciBhbiBFIHdpdGggYW4gRSwgd2UgZ2V0IGFuIGluZmluaXRlIGxv b3AuICovCi0gICAgLyogQSBZIChBQ0spIGNhbiBzaG93IHVwIGhlcmUgaWYgd2Ugc2VudCBiYWNr IGEgc2hvcnQtZm9ybSByZXBseSB0byAqLwotICAgIC8qIGEgRyBwYWNrZXQgYW5kIGl0IHdhcyBl Y2hvZWQuICBBQ0tzIGNhbiBiZSBzYWZlbHkgaWdub3JlZCBoZXJlLiAqLwotICAgIFJFU1VNRTsJ CQkJLyogR28gYmFjayB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0LiAqLwotI2VuZGlmIC8qIE5PU0VS VkVSICovCi19Ci0gICAgYnJlYWs7Ci1jYXNlIDMwOgotICAgIHsJCQkJLyogTG9naW4vT3V0ICov Ci0gICAgcmMgPSBzcnZfbG9naW4oKTsKLSAgICBkZWJ1ZyhGMTAxLCI8Z2VuZXJpYz5JIHNydl9s b2dpbiIsIiIscmMpOwotICAgIGlmIChyYyA+IC0xKSByZXR1cm4ocmMpOwkJLyogKHNlZSBiZWxv dykgKi8KLX0KLSAgICBicmVhazsKLWNhc2UgMzE6Ci0gICAgewkJCQkvKiBHb3QgUkVNT1RFIENE IGNvbW1hbmQgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChj a3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xH X1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBDRCIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAv KiBDS1NZU0xPRyAqLwotICAgIGlmICghRU5BQkxFRChlbl9jd2QpKSB7Ci0JZXJycGt0KChDSEFS ICopIlJFTU9URSBDRCBkaXNhYmxlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgewotCWNoYXIg KiBwID0gTlVMTDsKLQl4ID0gY3dkKChjaGFyICopKHNydmNtZCsxKSk7CS8qIFRyeSB0byBjaGFu Z2UgZGlyZWN0b3J5ICovCi0jaWZkZWYgSUtTREIKLQlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3 aGF0LCJSRU1PVEUgQ0QiLCAoY2hhciAqKShzcnZjbWQrMiksICIiKTsKLSNlbmRpZiAvKiBJS1NE QiAqLwotCWlmICgheCkgewkJCS8qIEZhaWxlZCAqLwotCSAgICBlcnJwa3QoKENIQVIgKikiQ2Fu J3QgY2hhbmdlIGRpcmVjdG9yeSIpOwotCSAgICBSRVNVTUU7CQkJLyogQmFjayB0byBzZXJ2ZXIg Y29tbWFuZCB3YWl0ICovCi0JfSBlbHNlIGlmICh4ID09IDIpIHsJCS8qIFVzZXIgd2FudHMgbWVz c2FnZSAqLwotCSAgICBpZiAoIUVOQUJMRUQoZW5fdHlwKSkgewkvKiBNZXNzYWdlcyAoUkVNT1RF IFRZUEUpIGRpc2FibGVkPyAqLwotCQllcnJwa3QoKENIQVIgKikiUkVNT1RFIFRZUEUgZGlzYWJs ZWQiKTsKLQkJUkVTVU1FOwotCSAgICB9IGVsc2UgewkJCS8qIFRZUEUgaXMgZW5hYmxlZCAqLwot CQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQkgICAgaWYgKHpjaGtpKGNk bXNnZmlsZVtpXSkgPiAtMSkgewotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkJYmluYXJ5ID0g WFlGVF9UOwkvKiBVc2UgdGV4dCBtb2RlIGZvciB0aGlzLiAqLwotCQlpZiAoaSA8IDggJiYgc25k dHlwZShjZG1zZ2ZpbGVbaV0pKSB7IC8qIEhhdmUgcmVhZG1lIGZpbGU/ICovCi0JCSAgICBCRUdJ TiBzc2luaXQ7CS8qIE9LICovCi0JCX0gZWxzZSB7CQkvKiBub3QgT0sgKi8KLQkJICAgIHAgPSB6 Z3RkaXIoKTsKLQkJICAgIGlmICghcCkgcCA9ICIiOwotCQkgICAgc3VjY2VzcyA9ICgqcCkgPyAx IDogMDsKLQkJICAgIGFjazEoKENIQVIgKilwKTsJLyogQUNLIHdpdGggbmV3IGRpcmVjdG9yeSBu YW1lICovCi0JCSAgICBzdWNjZXNzID0gMTsKLQkJICAgIFJFU1VNRTsJCS8qIHdhaXQgZm9yIG5l eHQgc2VydmVyIGNvbW1hbmQgKi8KLQkJfQotCSAgICB9Ci0JfSBlbHNlIHsJCQkvKiBVc2VyIGRv ZXNuJ3Qgd2FudCBtZXNzYWdlICovCi0JICAgIHAgPXpndGRpcigpOwotCSAgICBpZiAoIXApIHAg PSAiIjsKLQkgICAgc3VjY2VzcyA9ICgqcCkgPyAxIDogMDsKLQkgICAgYWNrMSgoQ0hBUiAqKXAp OwotCSAgICBzdWNjZXNzID0gMTsKLQkgICAgUkVTVU1FOwkJCS8qIFdhaXQgZm9yIG5leHQgc2Vy dmVyIGNvbW1hbmQgKi8KLQl9Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0gICAg YnJlYWs7Ci1jYXNlIDMyOgotICAgIHsJCQkJLyogR290IFJFTU9URSBQV0QgY29tbWFuZCAqLwot I2lmbmRlZiBOT1NFUlZFUgotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+PSBT WVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2 ZXIiLCAiUkVNT1RFIFBXRCIsIE5VTEwpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgaWYg KCFFTkFCTEVEKGVuX2N3ZCkpIHsKLQllcnJwa3QoKENIQVIgKikiUkVNT1RFIENEIGRpc2FibGVk Iik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0JaWYgKGVuY3N0cigoQ0hBUiAqKXpndGRpcigp KSA+IC0xKSB7IC8qIEVuY29kZSBjdXJyZW50IGRpcmVjdG9yeSAqLwotCSAgICBhY2sxKGRhdGEp OwkJCS8qIElmIGl0IGZpdHMsIHNlbmQgaXQgYmFjayBpbiBBQ0sgKi8KLQkgICAgc3VjY2VzcyA9 IDE7Ci0JfSBlbHNlIHsJCQkvKiBGYWlsZWQgKi8KLQkgICAgYWNrKCk7CQkJLyogU2VuZCBlbXB0 eSBBQ0sgKi8KLQkgICAgc3VjY2VzcyA9IDA7CQkvKiBhbmQgaW5kaWNhdGUgZmFpbHVyZSBsb2Nh bGx5ICovCi0JfQotCVJFU1VNRTsJCQkJLyogQmFjayB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICov Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0gICAgYnJlYWs7Ci1jYXNlIDMzOgot ICAgIHsJCQkJLyogUkVNT1RFIERJUkVDVE9SWSBjb21tYW5kICovCi0jaWZuZGVmIE5PU0VSVkVS Ci0gICAgY2hhciAqbjI7Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9nID49IFNZ U0xHX1BSICYmIGNreGxvZ2dpbmcpCi0gICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZl ciIsICJSRU1PVEUgRElSRUNUT1JZIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lT TE9HICovCi0gICAgaWYgKCFFTkFCTEVEKGVuX2RpcikpIHsJCS8qIElmIERJUiBpcyBkaXNhYmxl ZCwgKi8KLQllcnJwa3QoKENIQVIgKikiUkVNT1RFIERJUkVDVE9SWSBkaXNhYmxlZCIpOyAvKiBy ZWZ1c2UuICovCi0JUkVTVU1FOwotICAgIH0gZWxzZSB7CQkJCS8qIERJUiBpcyBlbmFibGVkLiAq LwotI2lmZGVmIElLU0RCCi0JaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIERJ UiIsIChjaGFyICopKHNydmNtZCsyKSwgIiIpOwotI2VuZGlmIC8qIElLU0RCICovCi0JaWYgKCFF TkFCTEVEKGVuX2N3ZCkpIHsJCS8qIEJ1dCBDV0QgaXMgZGlzYWJsZWQgKi8KLQkgICAgenN0cmlw KChjaGFyICopKHNydmNtZCsyKSwmbjIpOyAvKiBhbmQgdGhleSBpbmNsdWRlZCBhIHBhdGhuYW1l LCAqLwotCSAgICBpZiAoc3RyY21wKChjaGFyICopKHNydmNtZCsyKSxuMikpIHsgLyogc28gcmVm dXNlLiAqLwotCQllcnJwa3QoKENIQVIgKikiQWNjZXNzIGRlbmllZCIpOwotCQlSRVNVTUU7CQkJ LyogUmVtZW1iZXIsIHRoaXMgaXMgbm90IGEgZ290byEgKi8KLQkgICAgfQotCX0KLQlpZiAoc3Rh dGUgPT0gZ2VuZXJpYykgewkJCS8qIEl0J3MgT0sgdG8gZ28gYWhlYWQuICovCi0jaWZkZWYgQ09N TUVOVAotCSAgICBuMiA9ICgqKHNydmNtZCsyKSkgPyBESVJDTUQgOiBESVJDTTI7Ci0JICAgIGlm IChzeXNjbWQobjIsKGNoYXIgKikoc3J2Y21kKzIpKSkgIC8qIElmIGl0IGNhbiBiZSBkb25lICov Ci0jZWxzZQotCSAgICBpbnQgeDsKLQkgICAgaWYgKCh4ID0gc25kZGlyKChjaGFyKikoc3J2Y21k KzIpKSkgPiAwKQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgewotCQlCRUdJTiBzc2luaXQ7 CQkvKiBzZW5kIHRoZSByZXN1bHRzIGJhY2s7ICovCi0JICAgIH0gZWxzZSB7CQkJLyogb3RoZXJ3 aXNlICovCi0JCWlmICh4IDwgMCkKLQkJICBlcnJwa3QoKENIQVIgKikiTm8gZmlsZXMgbWF0Y2gi KTsKLQkJZWxzZQotCQkgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBsaXN0IGRpcmVjdG9yeSIpOwot CQlSRVNVTUU7CQkJLyogcmV0dXJuIHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8KLQkgICAgfQot CX0KLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLSAgICBicmVhazsKLWNhc2UgMzQ6 Ci0gICAgewkJCQkvKiBSRU1PVEUgREVMRVRFIChFcmFzZSkgKi8KLSNpZm5kZWYgTk9TRVJWRVIK LSAgICBjaGFyICpuMjsKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0gU1lT TEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVy IiwgIlJFTU9URSBERUxFVEUiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cg Ki8KLSAgICBpZiAoIUVOQUJMRUQoZW5fZGVsKSkgewotCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUg REVMRVRFIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7CQkJCS8qIERFTEVURSBp cyBlbmFibGVkICovCi0jaWZkZWYgSUtTREIKLQlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0 LCJSRU1PVEUgREVMRVRFIiwgKGNoYXIgKikoc3J2Y21kKzIpLCAiIik7Ci0jZW5kaWYgLyogSUtT REIgKi8KLQlpZiAoIUVOQUJMRUQoZW5fY3dkKSkgewkJLyogYnV0IENXRCBpcyBkaXNhYmxlZCAq LwotCSAgICB6c3RyaXAoKGNoYXIgKikoc3J2Y21kKzIpLCZuMik7IC8qIGFuZCB0aGV5IGluY2x1 ZGVkIGEgcGF0aG5hbWUsICovCi0JICAgIGlmIChzdHJjbXAoKGNoYXIgKikoc3J2Y21kKzIpLG4y KSkgeyAvKiBzbyByZWZ1c2UuICovCi0JCWVycnBrdCgoQ0hBUiAqKSJBY2Nlc3MgZGVuaWVkIik7 Ci0JCVJFU1VNRTsJCQkvKiBSZW1lbWJlciwgdGhpcyBpcyBub3QgYSBnb3RvISAqLwotCSAgICB9 Ci0JfSBlbHNlIGlmIChpc2RpcigoY2hhciAqKShzcnZjbWQrMikpKSB7IC8qIEEgZGlyZWN0b3J5 IG5hbWU/ICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSJJdCdzIGEgZGlyZWN0b3J5Iik7Ci0JICAg IFJFU1VNRTsKLQl9Ci0JaWYgKHN0YXRlID09IGdlbmVyaWMpIHsJCS8qIEl0J3MgT0sgdG8gZ28g YWhlYWQuICovCi0JICAgIGludCB4OwotCSAgICBpZiAoKHggPSBzbmRkZWwoKGNoYXIqKShzcnZj bWQrMikpKSA+IDApIHsKLQkJQkVHSU4gc3Npbml0OwkJLyogSWYgT0sgc2VuZCByZXN1bHRzIGJh Y2sgKi8KLQkgICAgfSBlbHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KLQkJaWYgKHggPCAwKQotCQkg IGVycnBrdCgoQ0hBUiAqKSJGaWxlIG5vdCBmb3VuZCIpOyAvKiByZXBvcnQgZmFpbHVyZSAqLwot CQllbHNlCi0JCSAgZXJycGt0KChDSEFSICopIkRFTEVURSBmYWlsZWQiKTsKLQkJUkVTVU1FOwkJ CS8qICYgcmV0dXJuIHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8KLQkgICAgfQotCX0KLSAgICB9 Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLSAgICBicmVhazsKLWNhc2UgMzU6Ci0gICAgewkJ CQkvKiBGSU5JU0ggKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlm IChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZ U0xHX1BSLCAxLCAic2VydmVyIiwgIkZJTklTSCIsIE5VTEwpOwotI2VuZGlmIC8qIENLU1lTTE9H ICovCi0jaWZkZWYgSUtTREIKLSAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJTRVJW RVIgRklOSVNIIiwgIiIsICIiKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotICAgIGlmICghRU5BQkxF RChlbl9maW4pKSB7Ci0JZXJycGt0KChDSEFSICopIkZJTklTSCBkaXNhYmxlZCIpOwotCVJFU1VN RTsKLSAgICB9IGVsc2UgewotCWFjaygpOwkJCQkvKiBBY2tub3dsZWRnZSAqLwotCXh4c2NyZWVu KFNDUl9UQywwLDBMLCIiKTsJLyogRGlzcGxheSAqLwotCXN1Y2Nlc3MgPSAxOwotCXJldHVybigw KTsJCQkvKiBEb25lICovCi0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0gICAgYnJl YWs7Ci1jYXNlIDM2OgotICAgIHsJCQkJLyogRVhJVCAqLwotI2lmbmRlZiBOT1NFUlZFUgotI2lm ZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5n KQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIEVYSVQiLCBO VUxMKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotI2lmZGVmIElLU0RCCi0gICAgaWYgKGlrZGJv cGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIEVYSVQiLCAiIiwgIiIpOwotI2VuZGlmIC8qIElL U0RCICovCi0gICAgaWYgKCFFTkFCTEVEKGVuX3hpdCkpIHsKLQllcnJwa3QoKENIQVIgKikiRVhJ VCBkaXNhYmxlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgewotCWFjaygpOwkJCQkvKiBBY2tu b3dsZWRnZSAqLwotCXh4c2NyZWVuKFNDUl9UQywwLDBMLCIiKTsJLyogRGlzcGxheSAqLwotCWRv ZXhpdChHT09EX0VYSVQseGl0c3RhKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0K LSAgICBicmVhazsKLWNhc2UgMzc6Ci0gICAgewkJCQkvKiBCWUUgKExvZ291dCkgKi8KLSNpZm5k ZWYgTk9TRVJWRVIKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdf UFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwg IkJZRSIsIE5VTEwpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jaWZkZWYgSUtTREIKLSAgICBp ZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJTRVJWRVIgQllFIiwgIiIsICIiKTsKLSNlbmRp ZiAvKiBJS1NEQiAqLwotICAgIGlmICghRU5BQkxFRChlbl9ieWUpKSB7Ci0JZXJycGt0KChDSEFS ICopIkJZRSBkaXNhYmxlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgewotCWFjaygpOwkJCQkv KiBBY2tub3dsZWRnZSAqLwotCXN1Y2Nlc3MgPSAxOwotCW1zbGVlcCg3NTApOwkJCS8qIEdpdmUg dGhlIEFDSyB0aW1lIHRvIGdldCBvdXQgKi8KLQlpZiAobG9jYWwpCi0JICB0dHJlcygpOwkJCS8q IFJlc2V0IHRoZSB0ZXJtaW5hbCAqLwotCXh4c2NyZWVuKFNDUl9UQywwLDBMLCIiKTsJLyogRGlz cGxheSAqLwotCWRvY2xlYW4oMSk7CQkJLyogQ2xlYW4gdXAgZmlsZXMsIGV0YyAqLwotI2lmZGVm IERFQlVHCi0JZGVidWcoRjEwMCwiQy1LZXJtaXQgQllFIC0gTG9nZ2luIG91dC4uLiIsIiIsMCk7 Ci0JemNsb3NlKFpERklMRSk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBJS1NECi0jaWZk ZWYgQ0tfTE9HSU4KLQlpZiAoaW5zZXJ2ZXIpCi0JICBja3hsb2dvdXQoKTsKLQllbHNlCi0jZW5k aWYgLyogQ0tfTE9HSU4gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgVENQU09DS0VUCi0j aWZuZGVmIE5PTElTVEVOCi0JICBpZiAobmV0d29yayAmJiB0Y3BzcmZkID4gMCAmJiAhaW5zZXJ2 ZXIpCi0JICAgIGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsKLQllbHNlCi0jZW5kaWYgLyogTk9M SVNURU4gKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQkgIHJldHVybih6a3NlbGYoKSk7CQkv KiBUcnkgdG8gbG9nIHNlbGYgb3V0ICovCi0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19 Ci0gICAgYnJlYWs7Ci1jYXNlIDM4OgotICAgIHsJCQkJLyogUkVNT1RFIEhFTFAgKi8KLSNpZmRl ZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykK LSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBIRUxQIiwgTlVM TCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZmRlZiBJS1NEQgotICAgIGlmIChpa2Rib3Bl bikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBIRUxQIiwgIiIsICIiKTsKLSNlbmRpZiAvKiBJS1NE QiAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIGlmIChzbmRobHAoKSkgewotCUJFR0lOIHNzaW5p dDsJCQkvKiB0cnkgdG8gc2VuZCBpdCAqLwotICAgIH0gZWxzZSB7CQkJCS8qIElmIG5vdCBvaywg Ki8KLQllcnJwa3QoKENIQVIgKikiQ2FuJ3Qgc2VuZCBoZWxwIik7IC8qIHNlbmQgZXJyb3IgbWVz c2FnZSBpbnN0ZWFkICovCi0JUkVTVU1FOwkJCQkvKiBhbmQgcmV0dXJuIHRvIHNlcnZlciBjb21t YW5kIHdhaXQgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLSAgICBicmVhazsK LWNhc2UgMzk6Ci0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRU1PVEUgUkVO QU1FICovCi0gICAgcmMgPSBzcnZfcmVuYW1lKCk7Ci0gICAgZGVidWcoRjEwMSwic3J2X3JlbmFt ZSIsIiIscmMpOwotICAgIGlmIChyYyA+IC0xKSByZXR1cm4ocmMpOwkJLyogKHNlZSBiZWxvdykg Ki8KLX0KLSAgICBicmVhazsKLWNhc2UgNDA6Ci0gICAgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBSRU1PVEUgQ09QWSAqLwotICAgIHJjID0gc3J2X2NvcHkoKTsKLSAgICBkZWJ1ZyhG MTAxLCJzcnZfY29weSIsIiIscmMpOwotICAgIGlmIChyYyA+IC0xKSByZXR1cm4ocmMpOwkJLyog KHNlZSBiZWxvdykgKi8KLX0KLSAgICBicmVhazsKLWNhc2UgNDE6Ci0gICAgewkJCQkvKiBSRU1P VEUgU0VUICovCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BS ICYmIGNreGxvZ2dpbmcpCi0gICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJS RU1PVEUgU0VUIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jaWZu ZGVmIE5PU0VSVkVSCi0jaWZkZWYgSUtTREIKLSAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3 aGF0LCJSRU1PVEUgU0VUIiwgKGNoYXIgKikoc3J2Y21kKzEpLCAiIik7Ci0jZW5kaWYgLyogSUtT REIgKi8KLSAgICBpZiAoIUVOQUJMRUQoZW5fc2V0KSkgewotCWVycnBrdCgoQ0hBUiAqKSJSRU1P VEUgU0VUIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0JaWYgKHJlbXNldCgo Y2hhciAqKShzcnZjbWQrMSkpKSB7IC8qIFRyeSB0byBkbyB3aGF0IHRoZXkgYXNrICovCi0JICAg IHN1Y2Nlc3MgPSAxOwotCSAgICBhY2soKTsJCQkvKiBJZiBPSywgdGhlbiBhY2tub3dsZWRnZSAq LwotCX0gZWxzZQkJCQkvKiBPdGhlcndpc2UgKi8KLQkgIGVycnBrdCgoQ0hBUiAqKSJVbmtub3du IFJFTU9URSBTRVQgcGFyYW1ldGVyIik7IC8qIGdpdmUgZXJyb3IgbXNnICovCi0JUkVTVU1FOwkJ CQkvKiBSZXR1cm4gdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLwotICAgIH0KLSNlbmRpZiAvKiBO T1NFUlZFUiAqLwotfQotICAgIGJyZWFrOwotY2FzZSA0MjoKLSAgICB7CQkJCS8qIFJFTU9URSBU WVBFICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgY2hhciAqbjI7Ci0jaWZkZWYgQ0tTWVNMT0cK LSAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0gICAgICBja3N5 c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgVFlQRSIsIChjaGFyICopc3J2Y21k KTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgIGlmICghRU5BQkxFRChlbl90eXApKSB7Ci0J ZXJycGt0KChDSEFSICopIlJFTU9URSBUWVBFIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0g ZWxzZSB7Ci0jaWZkZWYgSUtTREIKLQlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1P VEUgVFlQRSIsIChjaGFyICopKHNydmNtZCsyKSwgIiIpOwotI2VuZGlmIC8qIElLU0RCICovCi0J aWYgKCFFTkFCTEVEKGVuX2N3ZCkpIHsJCS8qIElmIENXRCBkaXNhYmxlZCAqLwotCSAgICB6c3Ry aXAoKGNoYXIgKikoc3J2Y21kKzIpLCZuMik7IC8qIGFuZCB0aGV5IGluY2x1ZGVkIGEgcGF0aG5h bWUsICovCi0JICAgIGlmIChzdHJjbXAoKGNoYXIgKikoc3J2Y21kKzIpLG4yKSkgeyAvKiByZWZ1 c2UuICovCi0JCWVycnBrdCgoQ0hBUiAqKSJBY2Nlc3MgZGVuaWVkIik7Ci0JCVJFU1VNRTsJCQkv KiBSZW1lbWJlciwgdGhpcyBpcyBub3QgYSBnb3RvISAqLwotCSAgICB9Ci0JfQotCWlmIChzdGF0 ZSA9PSBnZW5lcmljKSB7CQkvKiBJdCdzIE9LIHRvIGdvIGFoZWFkLiAqLwotCSAgICBiaW5hcnkg PSBYWUZUX1Q7CQkvKiBVc2UgdGV4dCBtb2RlIGZvciB0aGlzLiAqLwotCSAgICBpZiAoCQkJLyog KFJFU1VNRSBkaWRuJ3QgY2hhbmdlIHN0YXRlKSAqLwotI2lmZGVmIENPTU1FTlQKLQkgICAgICBz eXNjbWQoVFlQQ01ELChjaGFyICopKHNydmNtZCsyKSkJLyogT2xkIHdheSAqLwotI2Vsc2UKLQkg ICAgICBzbmR0eXBlKChjaGFyICopKHNydmNtZCsyKSkgLyogTmV3IHdheSAqLwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLQkJKQotCSAgICAgIEJFR0lOIHNzaW5pdDsJCS8qIE9LICovCi0JICAgIGVs c2UgewkJCS8qIG5vdCBPSyAqLwotCQllcnJwa3QoKENIQVIgKikiQ2FuJ3QgdHlwZSBmaWxlIik7 IC8qIGdpdmUgZXJyb3IgbWVzc2FnZSAqLwotCQlSRVNVTUU7CQkJLyogd2FpdCBmb3IgbmV4dCBz ZXJ2ZXIgY29tbWFuZCAqLwotCSAgICB9Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAq LwotfQotICAgIGJyZWFrOwotY2FzZSA0MzoKLSAgICB7CQkJCS8qIFJFTU9URSBNS0RJUiAqLwot I2lmbmRlZiBOT1NFUlZFUgotI2lmZGVmIENLX01LRElSCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBp ZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0gICAgICBja3N5c2xvZyhT WVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgTUtESVIiLCAoY2hhciAqKXNydmNtZCk7Ci0j ZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZmRlZiBJS1NEQgotICAgIGlmIChpa2Rib3Blbikgc2xv dHN0YXRlKHdoYXQsIlJFTU9URSBNS0RJUiIsIChjaGFyICopKHNydmNtZCsyKSwgIiIpOwotI2Vu ZGlmIC8qIElLU0RCICovCi0gICAgaWYgKCFFTkFCTEVEKGVuX21rZCkpIHsKLQllcnJwa3QoKENI QVIgKikiUkVNT1RFIE1LRElSIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSBpZiAo IUVOQUJMRUQoZW5fY3dkKSkgewkvKiBJZiBDV0QgZGlzYWJsZWQgKi8KLQllcnJwa3QoKENIQVIg KikiRGlyZWN0b3J5IGFjY2VzcyByZXN0cmljdGVkIik7Ci0JUkVTVU1FOwkJCQkvKiBSZW1lbWJl ciwgdGhpcyBpcyBub3QgYSBnb3RvISAqLwotICAgIH0KLSAgICBpZiAoc3RhdGUgPT0gZ2VuZXJp YykgewkJLyogT0sgdG8gZ28gYWhlYWQuICovCi0JY2hhciAqcCA9IE5VTEw7Ci0JeCA9IGNrbWtk aXIoMCwoY2hhciAqKShzcnZjbWQrMiksJnAsMCwxKTsgLyogTWFrZSB0aGUgZGlyZWN0b3J5ICov Ci0JaWYgKCFwKSBwID0gIiI7Ci0JaWYgKHggPiAtMSkgewotCSAgICBlbmNzdHIoKENIQVIgKilw KTsJCS8qIE9LIC0gZW5jb2RlIHRoZSBuYW1lICovCi0JICAgIGFjazEoZGF0YSk7CQkJLyogU2Vu ZCBzaG9ydC1mb3JtIHJlc3BvbnNlICovCi0JICAgIHN1Y2Nlc3MgPSAxOwotCSAgICBSRVNVTUU7 Ci0JfSBlbHNlIHsJCQkvKiBub3QgT0sgKi8KLQkgICAgaWYgKCEqcCkgcCA9ICJEaXJlY3Rvcnkg Y3JlYXRpb24gZmFpbHVyZSI7Ci0JICAgIGVycnBrdCgoQ0hBUiAqKXApOwkJLyogZ2l2ZSBlcnJv ciBtZXNzYWdlICovCi0JICAgIFJFU1VNRTsJCQkvKiBXYWl0IGZvciBuZXh0IHNlcnZlciBjb21t YW5kICovCi0JfQotICAgIH0KLSNlbHNlCi0gICAgZXJycGt0KChDSEFSICopIlJFTU9URSBNS0RJ UiBub3QgYXZhaWxhYmxlIik7Ci0gICAgUkVTVU1FOwotI2VuZGlmIC8qIENLX01LRElSICovCi0j ZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLSAgICBicmVhazsKLWNhc2UgNDQ6Ci0gICAgewkJCQkv KiBSRU1PVEUgUk1ESVIgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSNpZmRlZiBDS19NS0RJUgotI2lm ZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5n KQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFJNRElSIiwg KGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jaWZkZWYgSUtTREIKLSAg ICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgUk1ESVIiLCAoY2hhciAqKShz cnZjbWQrMiksICIiKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotICAgIGlmICghRU5BQkxFRChlbl9y bWQpKSB7Ci0JZXJycGt0KChDSEFSICopIlJFTU9URSBSTURJUiBkaXNhYmxlZCIpOwotCVJFU1VN RTsKLSAgICB9IGVsc2UgaWYgKCFFTkFCTEVEKGVuX2N3ZCkpIHsJLyogSWYgQ1dEIGRpc2FibGVk ICovCi0JZXJycGt0KChDSEFSICopIkRpcmVjdG9yeSBhY2Nlc3MgcmVzdHJpY3RlZCIpOwotCVJF U1VNRTsJCQkJLyogUmVtZW1iZXIsIHRoaXMgaXMgbm90IGEgZ290byEgKi8KLSAgICB9Ci0gICAg aWYgKHN0YXRlID09IGdlbmVyaWMpIHsJCS8qIE9LIHRvIGdvIGFoZWFkLiAqLwotCWNoYXIgKnAg PSBOVUxMOwotCXggPSBja21rZGlyKDEsKGNoYXIgKikoc3J2Y21kKzIpLCZwLDAsMSk7Ci0JaWYg KCFwKSBwID0gIiI7Ci0JaWYgKHggPiAtMSkgewotCSAgICBlbmNzdHIoKENIQVIgKilwKTsJCS8q IE9LIC0gZW5jb2RlIHRoZSBuYW1lICovCi0JICAgIGFjazEoZGF0YSk7CQkJLyogU2VuZCBzaG9y dC1mb3JtIHJlc3BvbnNlICovCi0JICAgIHN1Y2Nlc3MgPSAxOwotCSAgICBSRVNVTUU7Ci0JfSBl bHNlIHsJCQkvKiBub3QgT0sgKi8KLQkgICAgaWYgKCEqcCkgcCA9ICJEaXJlY3RvcnkgcmVtb3Zh bCBmYWlsdXJlIjsKLQkgICAgZXJycGt0KChDSEFSICopcCk7CQkvKiBnaXZlIGVycm9yIG1lc3Nh Z2UgKi8KLQkgICAgUkVTVU1FOwkJCS8qIFdhaXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8K LQl9Ci0gICAgfQotI2Vsc2UKLSAgICBlcnJwa3QoKENIQVIgKikiUkVNT1RFIFJNRElSIG5vdCBh dmFpbGFibGUiKTsKLSAgICBSRVNVTUU7Ci0jZW5kaWYgLyogQ0tfTUtESVIgKi8KLSNlbmRpZiAv KiBOT1NFUlZFUiAqLwotfQotICAgIGJyZWFrOwotY2FzZSA0NToKLSAgICB7CQkJCS8qIFJFTU9U RSBTUEFDRSAqLwotI2lmbmRlZiBOT1NFUlZFUgotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNr eHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdf UFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFNQQUNFIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlm IC8qIENLU1lTTE9HICovCi0gICAgaWYgKCFFTkFCTEVEKGVuX3NwYSkpIHsKLQllcnJwa3QoKENI QVIgKikiUkVNT1RFIFNQQUNFIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0J eCA9IHNydmNtZFsxXTsJCQkvKiBHZXQgYXJlYSB0byBjaGVjayAqLwotCXggPSAoKHggPT0gTlVM KSB8fCAoeCA9PSBTUCkKLSNpZmRlZiBPUzIKLQkgICAgIHx8ICh4ID09ICchJykgfHwgKHNydmNt ZFszXSA9PSAnOicpCi0jZW5kaWYgLyogT1MyICovCi0JICAgICApOwotI2lmZGVmIElLU0RCCi0J aWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwKLQkJCSAgICAgICJSRU1PVEUgU1BBQ0UiLAot CQkJICAgICAgKHggPyAiIiA6IChjaGFyICopc3J2Y21kKSwKLQkJCSAgICAgICIiCi0JCQkgICAg ICApOwotI2VuZGlmIC8qIElLU0RCICovCi0JaWYgKCF4ICYmICFFTkFCTEVEKGVuX2N3ZCkpIHsJ LyogQ1dEIGRpc2FibGVkICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSJBY2Nlc3MgZGVuaWVkIik7 IC8qIGFuZCBub24tZGVmYXVsdCBhcmVhIGdpdmVuLCAqLwotCSAgICBSRVNVTUU7CQkJLyogcmVm dXNlLiAqLwotCX0gZWxzZSB7Ci0jaWZkZWYgT1MyCi1fUFJPVE9UWVAoaW50IHNuZHNwYWNlLChp bnQpKTsKLQkgICAgaWYgKHNuZHNwYWNlKHggPyB0b3VwcGVyKHNydmNtZFsyXSkgOiAwKSkgewot CQlCRUdJTiBzc2luaXQ7CQkvKiBzZW5kIHRoZSByZXBvcnQuICovCi0JICAgIH0gZWxzZSB7CQkJ LyogSWYgbm90IG9rLCAqLwotCQllcnJwa3QoKENIQVIgKikiQ2FuJ3Qgc2VuZCBzcGFjZSIpOyAv KiBzZW5kIGVycm9yIG1lc3NhZ2UgKi8KLQkJUkVTVU1FOwkJCS8qIGFuZCByZXR1cm4gdG8gc2Vy dmVyIGNvbW1hbmQgd2FpdCAqLwotCSAgICB9Ci0jZWxzZQotICAgICAgICAgICAgaWYgKG5vcHVz aCkKLSAgICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg IHggPSAoeCA/IHN5c2NtZChTUEFDTUQsIiIpIDogc3lzY21kKFNQQUNNMiwoY2hhciAqKShzcnZj bWQrMikpKTsKLQkgICAgaWYgKHgpIHsJCQkvKiBJZiB3ZSBnb3QgdGhlIGluZm8gKi8KLQkJQkVH SU4gc3Npbml0OwkJLyogc2VuZCBpdCAqLwotCSAgICB9IGVsc2UgewkJCS8qIG90aGVyd2lzZSAq LwotCQllcnJwa3QoKENIQVIgKikiQ2FuJ3QgY2hlY2sgc3BhY2UiKTsgLyogc2VuZCBlcnJvciBt ZXNzYWdlICovCi0JCVJFU1VNRTsJCQkvKiBhbmQgYXdhaXQgbmV4dCBzZXJ2ZXIgY29tbWFuZCAq LwotCSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0JfQotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZF UiAqLwotfQotICAgIGJyZWFrOwotY2FzZSA0NjoKLSAgICB7CQkJCS8qIFJFTU9URSBXSE8gKi8K LSNpZm5kZWYgTk9TRVJWRVIKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0g U1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2Vy dmVyIiwgIlJFTU9URSBXSE8iLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cg Ki8KLSNpZmRlZiBJS1NEQgotICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9U RSBXSE8iLCAoY2hhciAqKShzcnZjbWQrMiksICIiKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotICAg IGlmICghRU5BQkxFRChlbl93aG8pKSB7Ci0JZXJycGt0KChDSEFSICopIlJFTU9URSBXSE8gZGlz YWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBPUzIKLV9QUk9UT1RZUChp bnQgc25kd2hvLChjaGFyICopKTsKLQkgICAgaWYgKHNuZHdobygoY2hhciAqKShzcnZjbWQrMikp KSB7Ci0JCUJFR0lOIHNzaW5pdDsJCS8qIHRyeSB0byBzZW5kIGl0ICovCi0JICAgIH0gZWxzZSB7 CQkJLyogSWYgbm90IG9rLCAqLwotCQllcnJwa3QoKENIQVIgKikiQ2FuJ3QgZG8gd2hvIGNvbW1h bmQiKTsgLyogc2VuZCBlcnJvciBtc2cgKi8KLQkJUkVTVU1FOwkJCS8qIGFuZCByZXR1cm4gdG8g c2VydmVyIGNvbW1hbmQgd2FpdCAqLwotCSAgICB9Ci0jZWxzZQotCWlmIChzeXNjbWQoV0hPQ01E LChjaGFyICopKHNydmNtZCsyKSkpIHsKLQkgICAgQkVHSU4gc3Npbml0OwotCX0gZWxzZSB7Ci0J ICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBkbyB3aG8gY29tbWFuZCIpOwotCSAgICBSRVNVTUU7 Ci0JfQotI2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQot ICAgIGJyZWFrOwotY2FzZSA0NzoKLSAgICB7CQkJCS8qIFZhcmlhYmxlIHF1ZXJ5IG9yIHNldCAq LwotICAgIHJjID0gc3J2X3F1ZXJ5KCk7Ci0gICAgZGVidWcoRjEwMSwic3J2X3F1ZXJ5IiwiIixy Yyk7Ci0gICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7Ci19Ci0gICAgYnJlYWs7Ci1jYXNlIDQ4 OgotICAgIHsJCQkJLyogUkVNT1RFIE1FU1NBR0UgY29tbWFuZCAqLwotI2lmbmRlZiBOT1NFUlZF UgotICAgIGRlYnVnKEYxMTAsIlJNU0ciLChjaGFyICopc3J2Y21kKzIsMCk7Ci0gICAgeHhzY3Jl ZW4oU0NSX01TLDAsMEwsKGNoYXIgKikoc3J2Y21kKzIpKTsKLSAgICBhY2soKTsKLSAgICBSRVNV TUU7Ci0jZW5kaWYJLyogTk9TRVJWRVIgKi8KLX0KLSAgICBicmVhazsKLWNhc2UgNDk6Ci0gICAg ewkJCQkvKiBJbnRlcnJ1cHRlZCBvciBjb25uZWN0aW9uIGxvc3QgKi8KLSNpZm5kZWYgTk9TRVJW RVIKLSAgICBpZiAoZmF0YWxpbykgewkJCS8qIENvbm5lY3Rpb24gbG9zdCAqLwotI2lmZGVmIENL U1lTTE9HCi0JaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotCSAgY2tz eXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiSW50ZXJydXB0ZWQiLCBOVUxMKTsKLSNlbmRp ZiAvKiBDS1NZU0xPRyAqLwotCXN1Y2Nlc3MgPSAwOwotCXhpdHN0YSB8PSAod2hhdCAmIFdfS0VS TUlUKTsKLQlRVUlUOwotICAgIH0gZWxzZSBpZiAoaW50ZXJydXB0ZWQpIHsKLQlpZiAoIUVOQUJM RUQoZW5fZmluKSkgewkJLyogQ3RybC1DIHR5cGVkICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSJR VUlUIGRpc2FibGVkIik7Ci0JICAgIFJFU1VNRTsKLQl9IGVsc2UgewotI2lmZGVmIENLU1lTTE9H Ci0JICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLQkgICAgICBj a3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJJbnRlcnJ1cHRlZCIsIE5VTEwpOwotI2Vu ZGlmIC8qIENLU1lTTE9HICovCi0JICAgIHN1Y2Nlc3MgPSAwOwotCSAgICB4aXRzdGEgfD0gKHdo YXQgJiBXX0tFUk1JVCk7Ci0JICAgIFFVSVQ7Ci0JfQotICAgIH0gZWxzZSB7CQkJCS8qIFNob3Vs ZG4ndCBoYXBwZW4gKi8KLQlkZWJ1ZyhGMTAwLCJTRVJWRVIgKGdlbmVyaWMpIEdPVCBVTkVYUEVD VEVEICdxJyIsIiIsMCk7Ci0JUVVJVDsKLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0K LSAgICBicmVhazsKLWNhc2UgNTA6Ci0gICAgewkJCQkvKiBBbnl0aGluZyBlbHNlIGluIHRoaXMg c3RhdGUuLi4gKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBlcnJwa3QoKENIQVIgKikiVW5pbXBs ZW1lbnRlZCBSRU1PVEUgY29tbWFuZCIpOyAvKiBDb21wbGFpbiAqLwotICAgIFJFU1VNRTsJCQkJ LyogYW5kIHJldHVybiB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCi0jZW5kaWYgLyogTk9TRVJW RVIgKi8KLX0KLSAgICBicmVhazsKLWNhc2UgNTE6Ci0gICAgewkJCQkvKiBTZW50IEJZRSBhbmQg Y29ubmVjdGlvbiBicm9rZW4gKi8KLSAgICBpZiAoYnllX2FjdGl2ZSAmJiB0dGNoaygpIDwgMCkg ewotCW1zbGVlcCg1MDApOwotCWJ5ZV9hY3RpdmUgPSAwOwotCXR0Y2xvcygwKTsJCQkvKiBDbG9z ZSBvdXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uICovCi0JY2xzb2YoMCk7Ci0JcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKLSAgICB9IGVsc2UgewkJCQkvKiBPdGhlciBnZW5lcmljIGNvbW1hbmQgKi8KLQly ZXR1cm4oc3VjY2VzcyA9IDApOwkJLyogb3IgY29ubmVjdGlvbiBub3QgYnJva2VuICovCi0gICAg fQotfQotICAgIGJyZWFrOwotY2FzZSA1MjoKLSAgICB7CQkJCS8qIFNob3J0LUZvcm0gcmVwbHkg Ki8KLSAgICByYyA9IHJjdl9zaG9ydHJlcGx5KCk7Ci0gICAgZGVidWcoRjEwMSwiPHJnZW4+WSBy Y3Zfc2hvcnRyZXBseSIsIiIscmMpOwotICAgIGlmIChyYyA+IC0xKSByZXR1cm4ocmMpOwotfQot ICAgIGJyZWFrOwotY2FzZSA1MzoKLSAgICB7CQkJCS8qIEZpbGUgaGVhZGVyICovCi0gICAgLyog Y2hhciAqbjI7ICovCi0gICAgZXh0ZXJuIGludCByc247Ci0gICAgZGVidWcoRjEwMSwiPHJmaWxl PkYgd2lubG8gMSIsIiIsd2lubG8pOwotICAgIHhmbGcgPSAwOwkJCQkvKiBOb3Qgc2NyZWVuIGRh dGEgKi8KLSAgICBpZiAoIWN6c2VlbikKLSAgICAgIGNhbmNlbCA9IDA7CQkJLyogUmVzZXQgY2Fu Y2VsbGF0aW9uIGNvdW50ZXIgKi8KLSNpZmRlZiBDQUxJQlJBVEUKLSAgICBpZiAoZGVzdCA9PSBE RVNUX04pCi0gICAgICBjYWxpYnJhdGUgPSAxOwotI2VuZGlmIC8qIENBTElCUkFURSAqLwotICAg IGlmICghcmN2ZmlsKGZpbG5hbSkpIHsJCS8qIEZpZ3VyZSBvdXQgbG9jYWwgZmlsZW5hbWUgKi8K LQllcnJwa3QoKENIQVIgKilyZl9lcnIpOwkJLyogVHJvdWJsZSAqLwotCVJFU1VNRTsKLSAgICB9 IGVsc2UgewkJCQkvKiBSZWFsIGZpbGUsIE9LIHRvIHJlY2VpdmUgKi8KLQljaGFyICogZm5wOwot CWRlYnVnKEYxMTEsIjxyZmlsZT5GIHdpbmxvIDIiLGZzcGVjLHdpbmxvKTsKLQlpZiAoZmlsY250 ID09IDEpCQkvKiByY3ZmaWwgc2V0IHRoaXMgdG8gMSBmb3IgMXN0IGZpbGUgKi8KLQkgIGNyYzE2 ID0gMEw7CQkJLyogQ2xlYXIgZmlsZSBDUkMgKi8KLQlmbnAgPSBmc3BlYzsJCQkvKiBUaGlzIGlz IHRoZSBmdWxsIHBhdGggKi8KLQlpZiAoc2VydmVyICYmICFFTkFCTEVEKGVuX2N3ZCkgfHwgLyog aWYgRElTQUJMRSBDRCAqLwotCSAgICAhZmFja3BhdGgJCQkgIC8qIG9yIEYtQUNLLVBBVEggT0ZG ICovCi0JICAgICkgewotCSAgICB6c3RyaXAoZnNwZWMsJmZucCk7CQkvKiBkb24ndCBzZW5kIGJh Y2sgZnVsbCBwYXRoICovCi0JfQotCWVuY3N0cigoQ0hBUiAqKWZucCk7Ci0JaWYgKGZhY2tidWcp Ci0JICBhY2soKTsKLQllbHNlCi0JICBhY2sxKGRhdGEpOwkJCS8qIFNlbmQgaXQgYmFjayBpbiBB Q0sgKi8KLQlpbml0YXR0cigmaWF0dHIpOwkJLyogQ2xlYXIgZmlsZSBhdHRyaWJ1dGUgc3RydWN0 dXJlICovCi0Jc3RyZWFtb24oKTsKLQlpZiAod2luZG93KHdzbG90bikgPCAwKSB7CS8qIEFsbG9j YXRlIG5lZ290aWF0ZWQgd2luZG93IHNsb3RzICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4n dCBvcGVuIHdpbmRvdyIpOwotCSAgICBSRVNVTUU7Ci0JfQotI2lmZGVmIElLU0RCCi0JaWYgKGlr ZGJvcGVuKSBzbG90c3RhdGUod2hhdCwKLQkJCSAgICAgIHNlcnZlciA/ICJTRVJWRVIiIDogIiIs Ci0JCQkgICAgICAiUkVDRUlWRSIsCi0JCQkgICAgICBmc3BlYwotCQkJICAgICAgKTsKLSNlbmRp ZiAvKiBJS1NEQiAqLwotCUJFR0lOIHJhdHRyOwkJCS8qIE5vdyBleHBlY3QgQXR0cmlidXRlIHBh Y2tldHMgKi8KLSAgICB9Ci19Ci0gICAgYnJlYWs7Ci1jYXNlIDU0OgotICAgIHsJCQkJLyogWC1w YWNrZXQgaW5zdGVhZCBvZiBmaWxlIGhlYWRlciAqLwotICAgIHhmbGcgPSAxOwkJCQkvKiBTY3Jl ZW4gZGF0YSAqLwotICAgIGlmICghY3pzZWVuKQotICAgICAgY2FuY2VsID0gMDsJCQkvKiBSZXNl dCBjYW5jZWxsYXRpb24gY291bnRlciAqLwotICAgIGFjaygpOwkJCQkvKiBBY2tub3dsZWRnZSB0 aGUgWC1wYWNrZXQgKi8KLSAgICBpbml0YXR0cigmaWF0dHIpOwkJCS8qIEluaXRpYWxpemUgYXR0 cmlidXRlIHN0cnVjdHVyZSAqLwotICAgIHN0cmVhbW9uKCk7Ci0gICAgaWYgKHdpbmRvdyh3c2xv dG4pIDwgMCkgewkJLyogYWxsb2NhdGUgbmVnb3RpYXRlZCB3aW5kb3cgc2xvdHMgKi8KLQllcnJw a3QoKENIQVIgKikiQ2FuJ3Qgb3BlbiB3aW5kb3ciKTsKLQlSRVNVTUU7Ci0gICAgfQotI2lmbmRl ZiBOT1NQTAotICAgIGlmIChxdWVyeSkgewkJCS8qIElmIHRoaXMgaXMgdGhlIHJlc3BvbnNlIHRv ICovCi0JcWJ1ZnAgPSBxdWVyeWJ1ZjsJCS8qIGEgcXVlcnkgdGhhdCB3ZSBzZW50LCBpbml0aWFs aXplICovCi0JcWJ1Zm4gPSAwOwkJCS8qIHRoZSByZXNwb25zZSBidWZmZXIgKi8KLQlxdWVyeWJ1 ZlswXSA9IE5VTDsKLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB3aGF0ID0gV19SRU1P OwkJCS8qIHdlJ3JlIGRvaW5nIGEgUkVNT1RFIGNvbW1hbmQgKi8KLSNpZmRlZiBJS1NEQgotICAg IGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsCi0JCQkgIHNlcnZlciA/ICJTRVJWRVIiIDog IiIsCi0JCQkgICJSRUNFSVZFIiwKLQkJCSAgZnNwZWMKLQkJCSAgKTsKLSNlbmRpZiAvKiBJS1NE QiAqLwotICAgIEJFR0lOIHJhdHRyOwkJCS8qIEV4cGVjdCBBdHRyaWJ1dGUgcGFja2V0cyAqLwot fQotICAgIGJyZWFrOwotY2FzZSA1NToKLSAgICB7CQkJCS8qIEF0dHJpYnV0ZSBwYWNrZXQgKi8K LSAgICBpZiAoZ2F0dHIocmRhdGFwLCZpYXR0cikgPT0gMCkgewkvKiBSZWFkIGludG8gYXR0cmli dXRlIHN0cnVjdHVyZSAqLwotI2lmZGVmIENLX1JFU0VORAotCWFjazEoKENIQVIgKilpYXR0ci5y ZXBseS52YWwpOwkvKiBSZXBseSB3aXRoIGRhdGEgKi8KLSNlbHNlCi0JYWNrKCk7CQkJCS8qIElm IE9LLCBhY2tub3dsZWRnZSAqLwotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotICAgIH0gZWxzZSB7 CQkJCS8qIE90aGVyd2lzZSAqLwotCWV4dGVybiBsb25nIGZzaXplOwotCWNoYXIgKnI7Ci0JciA9 IGdldHJlYXNvbihpYXR0ci5yZXBseS52YWwpOwotCWFjazEoKENIQVIgKilpYXR0ci5yZXBseS52 YWwpOwkvKiByZWZ1c2UgdG8gYWNjZXB0IHRoZSBmaWxlICovCi0JeHhzY3JlZW4oU0NSX1NULFNU X1JFRlUsMEwscik7CS8qIHJlYXNvbiAqLwotI2lmZGVmIFRMT0cKLQlpZiAodHJhbG9nICYmICF0 bG9nZm10KQotCSAgZG94bG9nKHdoYXQsZmlsbmFtLGZzaXplLGJpbmFyeSwxLHIpOwotI2VuZGlm IC8qIFRMT0cgKi8KLSAgICB9Ci19Ci0gICAgYnJlYWs7Ci1jYXNlIDU2OgotICAgIHsJCQkJLyog Rmlyc3QgZGF0YSBwYWNrZXQgKi8KLSAgICBkZWJ1ZyhGMTAwLCI8cmF0dHI+IEQgZmlyc3RkYXRh IiwiIiwwKTsKLSAgICByYyA9IHJjdl9maXJzdGRhdGEoKTsKLSAgICBkZWJ1ZyhGMTAxLCJyY3Zf Zmlyc3RkYXRhIHJjIiwiIixyYyk7Ci0gICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7CQkvKiAo c2VlIGJlbG93KSAqLwotfQotICAgIGJyZWFrOwotY2FzZSA1NzoKLSAgICB7CQkJCS8qIEVPVCwg bm8gbW9yZSBmaWxlcyAqLwotICAgIGFjaygpOwkJCQkvKiBBY2tub3dsZWRnZSB0aGUgQiBwYWNr ZXQgKi8KLSAgICByZW90KCk7CQkJCS8qIERvIEVPVCB0aGluZ3MgKi8KLSNpZmRlZiBDS19UTVBE SVIKLS8qIElmIHdlIHdlcmUgY2QnZCB0ZW1wb3JhcmlseSB0byBhbm90aGVyIGRldmljZSBvciBk aXJlY3RvcnkgLi4uICovCi0gICAgaWYgKGZfdG1wZGlyKSB7Ci0JaW50IHg7Ci0JeCA9IHpjaGRp cigoY2hhciAqKSBzYXZkaXIpOwkvKiAuLi4gcmVzdG9yZSBwcmV2aW91cyBkaXJlY3RvcnkgKi8K LQlmX3RtcGRpciA9IDA7CQkJLyogYW5kIHJlbWVtYmVyIHdlIGRpZCBpdC4gKi8KLQlkZWJ1ZyhG MTExLCJja2Nwcm8udyBCIHRtcGRpciByZXN0b3JpbmciLHNhdmRpcix4KTsKLSAgICB9Ci0jZW5k aWYgLyogQ0tfVE1QRElSICovCi0gICAgUkVTVU1FOwkJCQkvKiBhbmQgcXVpdCAqLwotfQotICAg IGJyZWFrOwotY2FzZSA1ODoKLSAgICB7CQkJCS8qIEdvdCBEYXRhIHBhY2tldCAqLwotICAgIGRl YnVnKEYxMDEsIjxyZHBrdD5EIGN4c2VlbiIsIiIsY3hzZWVuKTsKLSAgICBkZWJ1ZyhGMTAxLCI8 cmRwa3Q+RCBjenNlZW4iLCIiLGN6c2Vlbik7Ci0gICAgaWYgKGN4c2VlbiB8fCBjenNlZW4gfHwg ZGlzY2FyZCkgewkvKiBJZiBmaWxlIG9yIGdyb3VwIGludGVycnVwdGlvbiAqLwotCUNIQVIgKiBt c2c7Ci0JbXNnID0gY3pzZWVuID8gKENIQVIgKikiWiIgOiAoQ0hBUiAqKSJYIjsKLSNpZmRlZiBT VFJFQU1JTkcKLQlpZiAoc3RyZWFtaW5nKSB7CQkvKiBOZWVkIHRvIGNhbmNlbCAqLwotCSAgICBk ZWJ1ZyhGMTExLCI8cmRwa3Q+RCBzdHJlYW1pbmcgY2FuY2VsIixtc2csY2FuY2VsKTsKLQkgICAg aWYgKGNhbmNlbCsrID09IDApIHsJLyogT25seSBkbyB0aGlzIG9uY2UgKi8KLQkJYWNrMShtc2cp OwkJLyogUHV0ICJYIiBvciAiWiIgaW4gQUNLICovCi0JICAgIH0gZWxzZSBpZiAoY3pzZWVuKSB7 Ci0JCWVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNlbGVkIik7Ci0JCVJFU1VNRTsKLQkgICAgfSBl bHNlIHsKLQkJZmFzdGFjaygpOwotCSAgICB9Ci0JfSBlbHNlCi0jZW5kaWYgLyogU1RSRUFNSU5H ICovCi0JICBhY2sxKG1zZyk7Ci0gICAgfSBlbHNlIHsJCQkJLyogTm8gaW50ZXJydXB0aW9uICov Ci0JaW50IHJjLCBxZjsKLSNpZm5kZWYgTk9TUEwKLQlxZiA9IHF1ZXJ5OwotI2Vsc2UKLQlxZiA9 IDA7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZmRlZiBDS1RVTklORwotCXJjID0gKGJpbmFyeSAm JiAhcGFyaXR5KSA/Ci0JICBiZGVjb2RlKHJkYXRhcCxwdXRmaWwpOgotCSAgICBkZWNvZGUocmRh dGFwLCBxZiA/IHB1dHRybSA6IHB1dGZpbCwgMSk7Ci0jZWxzZQotCXJjID0gZGVjb2RlKHJkYXRh cCwgcWYgPyBwdXR0cm0gOiBwdXRmaWwsIDEpOwotI2VuZGlmIC8qIENLVFVOSU5HICovCi0JaWYg KHJjIDwgMCkgewotCSAgICBkaXNjYXJkID0gKGtlZXAgPT0gMCB8fCAoa2VlcCA9PSBTRVRfQVVU TyAmJiBiaW5hcnkgIT0gWFlGVF9UKSk7Ci0JICAgIGVycnBrdCgoQ0hBUiAqKSJFcnJvciB3cml0 aW5nIGRhdGEiKTsgLyogSWYgZmFpbHVyZSwgKi8KLQkgICAgUkVTVU1FOwotCX0gZWxzZQkJCQkv KiBEYXRhIHdyaXR0ZW4gT0ssIHNlbmQgQUNLICovCi0jaWZkZWYgU1RSRUFNSU5HCi0JICBpZiAo c3RyZWFtaW5nKQotCSAgICBmYXN0YWNrKCk7Ci0JZWxzZQotI2VuZGlmIC8qIFNUUkVBTUlORyAq LwotCSAgYWNrKCk7Ci0gICAgfQotfQotICAgIGJyZWFrOwotY2FzZSA1OToKLSAgICB7CQkJCS8q IEVPRiBpbW1lZGlhdGVseSBhZnRlciBBLVBhY2tldC4gKi8KLSAgICByZl9lcnIgPSAiQ2FuJ3Qg Y3JlYXRlIGZpbGUiOwotICAgIHRpbWludCA9IHNfdGltaW50OwotICAgIGlmIChkaXNjYXJkKSB7 CQkJLyogRGlzY2FyZGluZyBhIHJlYWwgZmlsZS4uLiAqLwotCXggPSAxOwotICAgIH0gZWxzZSBp ZiAoeGZsZykgewkJCS8qIElmIHNjcmVlbiBkYXRhICovCi0JaWYgKHJlbWZpbGUpIHsJCQkvKiBy ZWRpcmVjdGVkIHRvIGZpbGUgKi8KLQkgICAgaWYgKHJlbXBpcGUpCQkvKiBvciBwaXBlICovCi0J ICAgICAgeCA9IG9wZW5jKFpPRklMRSxyZW1kZXN0KTsgLyogUGlwZTogc3RhcnQgY29tbWFuZCAq LwotCSAgICBlbHNlCi0JICAgICAgeCA9IG9wZW5hKHJlbWRlc3QsJmlhdHRyKTsgLyogRmlsZTog b3BlbiB3aXRoIGF0dHJpYnV0ZXMgKi8KLQl9IGVsc2UgewkJCS8qIG90aGVyd2lzZSAqLwotCSAg ICB4ID0gb3BlbnQoJmlhdHRyKTsJCS8qICJvcGVuIiB0aGUgc2NyZWVuICovCi0JfQotI2lmZGVm IENBTElCUkFURQotICAgIH0gZWxzZSBpZiAoY2FsaWJyYXRlKSB7CQkvKiBJZiBjYWxpYnJhdGlv biBydW4gKi8KLQl4ID0gY2tvcGVueCgmaWF0dHIpOwkJLyogZG8gdGhpcyAqLwotI2VuZGlmIC8q IENBTElCUkFURSAqLwotICAgIH0gZWxzZSB7CQkJCS8qIG90aGVyd2lzZSAqLwotCXggPSBvcGVu YShmaWxuYW0sJmlhdHRyKTsJLyogb3BlbiB0aGUgZmlsZSwgd2l0aCBhdHRyaWJ1dGVzICovCi0J aWYgKHggPT0gLTE3KSB7CQkJLyogUkVHRVQgc2tpcHBlZCBiZWNhdXNlIHNhbWUgc2l6ZSAqLwot CSAgICBkaXNjYXJkID0gMTsKLQkgICAgcmVqZWN0aW9uID0gMTsKLQl9Ci0gICAgfQotICAgIGlm ICgheCB8fCByZW9mKGZpbG5hbSwgJmlhdHRyKSA8IDApIHsgLyogQ2xvc2Ugb3V0cHV0IGZpbGUg Ki8KLQllcnJwa3QoKENIQVIgKikgcmZfZXJyKTsJLyogSWYgcHJvYmxlbSwgc2VuZCBlcnJvciBt c2cgKi8KLQlSRVNVTUU7CQkJCS8qIGFuZCBxdWl0ICovCi0gICAgfSBlbHNlIHsJCQkJLyogb3Ro ZXJ3aXNlICovCi0JaWYgKHggPT0gLTE3KQotCSAgeHhzY3JlZW4oU0NSX1NULFNUX1NLSVAsU0tQ X1JFUywiIik7Ci0JYWNrKCk7CQkJCS8qIGFja25vd2xlZGdlIHRoZSBFT0YgcGFja2V0ICovCi0J QkVHSU4gcmZpbGU7CQkJLyogYW5kIGF3YWl0IGFub3RoZXIgZmlsZSAqLwotICAgIH0KLX0KLSAg ICBicmVhazsKLWNhc2UgNjA6Ci0gICAgeyAgCQkJCS8qIEN0cmwtQyBvciBjb25uZWN0aW9uIGxv c3MuICovCi0gICAgdGltaW50ID0gc190aW1pbnQ7Ci0gICAgd2luZG93KDEpOwkJCQkvKiBTZXQg d2luZG93IHNpemUgYmFjayB0byAxLi4uICovCi0gICAgY3hzZWVuID0gMTsKLSAgICB4ID0gY2xz b2YoMSk7CQkJLyogQ2xvc2UgZmlsZSAqLwotICAgIHJldHVybihzdWNjZXNzID0gMCk7CQkvKiBG YWlsZWQgKi8KLX0KLSAgICBicmVhazsKLWNhc2UgNjE6Ci0gICAgewkJCQkvKiBFbmQgT2YgRmls ZSAoRU9GKSBQYWNrZXQgKi8KLS8qICB3c2xvdHMgPSAxOwkqLwkJCS8qIChkb24ndCBzZXQpIFdp bmRvdyBzaXplIGJhY2sgdG8gMSAqLwotI2lmbmRlZiBDT0hFUkVOVCAvKiBDb2hlcmVudCBjb21w aWxlciBibG93cyB1cCBvbiB0aGlzIHN3aXRjaCgpIHN0YXRlbWVudC4gKi8KLSAgICB4ID0gcmVv ZihmaWxuYW0sICZpYXR0cik7CQkvKiBIYW5kbGUgdGhlIEVPRiBwYWNrZXQgKi8KLSAgICBzd2l0 Y2ggKHgpIHsJCQkvKiByZW9mKCkgc2V0cyB0aGUgc3VjY2VzcyBmbGFnICovCi0gICAgICBjYXNl IC01OgkJCQkvKiBIYW5kbGUgcHJvYmxlbXMgKi8KLQllcnJwa3QoKENIQVIgKikiUkVOQU1FIGZh aWxlZCIpOyAvKiBGYXRhbCAqLwotCVJFU1VNRTsKLQlicmVhazsKLSAgICAgIGNhc2UgLTQ6Ci0J ZXJycGt0KChDSEFSICopIk1PVkUgZmFpbGVkIik7CS8qIEZhdGFsICovCi0JUkVTVU1FOwotCWJy ZWFrOwotICAgICAgY2FzZSAtMzoJCQkJLyogSWYgcHJvYmxlbSwgc2VuZCBlcnJvciBtc2cgKi8K LQllcnJwa3QoKENIQVIgKikiQ2FuJ3QgcHJpbnQgZmlsZSIpOyAvKiBGYXRhbCAqLwotCVJFU1VN RTsKLQlicmVhazsKLSAgICAgIGNhc2UgLTI6Ci0JZXJycGt0KChDSEFSICopIkNhbid0IG1haWwg ZmlsZSIpOyAvKiBGYXRhbCAqLwotCVJFU1VNRTsKLQlicmVhazsKLSAgICAgIGNhc2UgMjoJCQkJ LyogTm90IGZhdGFsICovCi0gICAgICBjYXNlIDM6Ci0JeHhzY3JlZW4oU0NSX0VNLDAsMEwsIlJl Y2VpdmVyIGNhbid0IGRlbGV0ZSB0ZW1wIGZpbGUiKTsKLQlSRVNVTUU7Ci0JYnJlYWs7Ci0gICAg ICBkZWZhdWx0OgotCWlmICh4IDwgMCkgewkJCS8qIEZhdGFsICovCi0JICAgIGVycnBrdCgoQ0hB UiAqKSJDYW4ndCBjbG9zZSBmaWxlIik7Ci0JICAgIFJFU1VNRTsKLQl9IGVsc2UgewkJCS8qIFN1 Y2Nlc3MgKi8KLSNpZm5kZWYgTk9TUEwKLQkgICAgaWYgKHF1ZXJ5KQkJCS8qIFF1ZXJ5IHJlcG9u c2VzIGdlbmVyYWxseSAqLwotCSAgICAgIGNvbm9sbCgiIik7CQkvKiBkb24ndCBoYXZlIGxpbmUg dGVybWluYXRvcnMgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCSAgICBpZiAoY3pzZWVuKSB7CQkv KiBCYXRjaCBjYW5jZWxlZD8gKi8KLQkJaWYgKGNhbmNlbCsrID09IDApIHsJLyogSWYgd2UgaGF2 ZW4ndCB0cmllZCB0aGlzIHlldCAqLwotCQkgICAgYWNrMSgoQ0hBUiAqKSJaIik7CS8qIFRyeSBp dCBvbmNlICovCi0JCX0gZWxzZSB7CQkvKiBPdGhlcndpc2UgKi8KLQkJICAgIGVycnBrdCgoQ0hB UiAqKSJVc2VyIGNhbmNlbGVkIik7IC8qIHF1aXRlIHdpdGggRXJyb3IgKi8KLQkJICAgIFJFU1VN RTsKLQkJfQotCSAgICB9IGVsc2UKLQkgICAgICBhY2soKTsJCQkvKiBBY2tub3dsZWRnZSB0aGUg RU9GIHBhY2tldCAqLwotCSAgICBCRUdJTiByZmlsZTsJCS8qIGFuZCBhd2FpdCBhbm90aGVyIGZp bGUgKi8KLQl9Ci0gICAgfQotI2Vsc2UKLSAgICBpZiAocmVvZihmaWxuYW0sICZpYXR0cikgPCAw KSB7CS8qIENsb3NlIHRoZSBmaWxlICovCi0JZXJycGt0KChDSEFSICopIkVycm9yIGF0IGVuZCBv ZiBmaWxlIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7CQkJCS8qIHJlb2YoKSBzZXRzIHN1Y2Nl c3MgZmxhZyAqLwotCWFjaygpOwotCUJFR0lOIHJmaWxlOwotICAgIH0KLSNlbmRpZiAvKiBDT0hF UkVOVCAqLwotfQotICAgIGJyZWFrOwotY2FzZSA2MjoKLSAgICB7CQkJCS8qIEFDSyBmb3IgU2Vu ZC1Jbml0ICovCi0gICAgc3BhcihyZGF0YXApOwkJCS8qIHNldCBwYXJhbWV0ZXJzIGZyb20gaXQg Ki8KLSAgICBjYW5jZWwgPSAwOwotICAgIGJjdHUgPSBiY3RyOwkJCS8qIHN3aXRjaCB0byBhZ3Jl ZWQtdXBvbiBibG9jayBjaGVjayAqLwotICAgIGJjdGwgPSAoYmN0dSA9PSA0KSA/IDIgOiBiY3R1 OwkvKiBTZXQgYmxvY2stY2hlY2sgbGVuZ3RoICovCi0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgaWYg KChzZW5kbW9kZSA9PSBTTV9SRVNFTkQpICYmICghYXRjYXB1IHx8ICFyc2NhcHUpKSB7IC8qIFJF U0VORCAqLwotCWVycnBrdCgoQ0hBUiAqKSAiUkVTRU5EIGNhcGFiaWxpdGllcyBub3QgbmVnb3Rp YXRlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgewotI2VuZGlmIC8qIENLX1JFU0VORCAqLwot CXdoYXQgPSBXX1NFTkQ7CQkJLyogUmVtZW1iZXIgd2UncmUgc2VuZGluZyAqLwotCWxhc3R4ZmVy ID0gV19TRU5EOwotCXggPSBzZmlsZSh4ZmxnKTsJCS8qIFNlbmQgWCBvciBGIGhlYWRlciBwYWNr ZXQgKi8KLQljYW5jZWwgPSAwOwkJCS8qIFJlc2V0IGNhbmNlbGxhdGlvbiBjb3VudGVyICovCi0J aWYgKHgpIHsJCQkvKiBJZiB0aGUgcGFja2V0IHdhcyBzZW50IE9LICovCi0JICAgIGlmICgheGZs ZyAmJiBmaWxjbnQgPT0gMSkJLyogYW5kIGl0J3MgYSByZWFsIGZpbGUgKi8KLQkgICAgICBjcmMx NiA9IDBMOwkJLyogQ2xlYXIgdGhlIGZpbGUgQ1JDICovCi0JICAgIHJlc2V0YygpOwkJCS8qIHJl c2V0IHBlci10cmFuc2FjdGlvbiBjb3VudGVycyAqLwotCSAgICBydGltZXIoKTsJCQkvKiByZXNl dCB0aW1lcnMgKi8KLSNpZmRlZiBHRlRJTUVSCi0JICAgIHJmdGltZXIoKTsKLSNlbmRpZiAvKiBH RlRJTUVSICovCi0JICAgIHN0cmVhbW9uKCk7CQkJLyogdHVybiBvbiBzdHJlYW1pbmcgKi8KLSNp ZmRlZiBJS1NEQgotCSAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LAotCQkJCSAgKHNl cnZlciA/ICJTRVJWRVIiIDogIiIpLAotCQkJCSAgIlNFTkQiLAotCQkJCSAgZmlsbmFtCi0JCQkJ ICApOwotI2VuZGlmIC8qIElLU0RCICovCi0JICAgIEJFR0lOIHNzZmlsZTsJCS8qIGFuZCBzd2l0 Y2ggdG8gcmVjZWl2ZS1maWxlIHN0YXRlICovCi0JfSBlbHNlIHsJCQkvKiBvdGhlcndpc2Ugc2Vu ZCBlcnJvciBtc2cgJiBxdWl0ICovCi0JICAgIHMgPSB4ZmxnID8gIkNhbid0IGV4ZWN1dGUgY29t bWFuZCIgOiAoY2hhciAqKWVwa3Rtc2c7Ci0JICAgIGlmICghKnMpIHMgPSAiQ2FuJ3Qgb3BlbiBm aWxlIjsKLQkgICAgZXJycGt0KChDSEFSICopcyk7Ci0JICAgIFJFU1VNRTsKLQl9Ci0jaWZkZWYg Q0tfUkVTRU5ECi0gICAgfQotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotfQotICAgIGJyZWFrOwot Y2FzZSA2MzoKLSAgICB7CQkJCS8qIFIgcGFja2V0IHdhcyByZXRyYW5zbWl0dGVkLiAqLwotICAg IHhzaW5pdCgpOwkJCQkvKiBSZXNlbmQgcGFja2V0IDAgKi8KLX0KLSAgICBicmVhazsKLWNhc2Ug NjQ6Ci0gICAgewkJCQkvKiBTYW1lIGRlYWwgaWYgRyBwYWNrZXQgY29tZXMgYWdhaW4gKi8KLSAg ICB4c2luaXQoKTsKLX0KLSAgICBicmVhazsKLWNhc2UgNjU6Ci0gICAgewkJCQkvKiBTYW1lIGRl YWwgaWYgQyBwYWNrZXQgY29tZXMgYWdhaW4gKi8KLSAgICB4c2luaXQoKTsKLX0KLSAgICBicmVh azsKLWNhc2UgNjY6Ci0gICAgewkJCQkvKiBBQ0sgZm9yIEYgb3IgWCBwYWNrZXQgKi8KLSAgICBz cnZwdHIgPSBzcnZjbWQ7CQkJLyogUG9pbnQgdG8gc3RyaW5nIGJ1ZmZlciAqLwotICAgIGRlY29k ZShyZGF0YXAscHV0c3J2LDApOwkJLyogRGVjb2RlIGRhdGEgZmllbGQsIGlmIGFueSAqLwotICAg IHB1dHNydihOVUwpOwkJCS8qIFRlcm1pbmF0ZSB3aXRoIG51bGwgKi8KLSAgICBmZmMgPSAwTDsJ CQkJLyogUmVzZXQgZmlsZSBieXRlIGNvdW50ZXIgKi8KLSAgICBkZWJ1ZyhGMTAxLCI8c3NmaWxl PlkgY3hzZWVuIiwiIixjeHNlZW4pOwotICAgIGlmICgqc3J2Y21kKSB7CQkJLyogSWYgcmVtb3Rl IG5hbWUgd2FzIHJlY29yZGVkICovCi0gICAgICAgIGlmIChzZW5kbW9kZSAhPSBTTV9SRVNFTkQp IHsKLQkgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9DIHx8IGZkaXNwbGEgPT0gWFlGRF9TKQotCSAg ICAgIHh4c2NyZWVuKFNDUl9BTiwwLDBMLChjaGFyICopc3J2Y21kKTsKLQkgICAgdGxvZyhGMTEw LCIgcmVtb3RlIG5hbWU6IiwoY2hhciAqKSBzcnZjbWQsMEwpOwotCSAgICBtYWtlc3RyKCZwc3Jm c3BlYywoY2hhciAqKXNydmNtZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGN4c2Vlbnx8 Y3pzZWVuKSB7CQkvKiBJbnRlcnJ1cHRlZD8gKi8KLQlkZWJ1ZyhGMTAxLCI8c3NmaWxlPlkgY2Fu Y2VsaW5nIiwiIiwwKTsKLQl4ID0gY2xzaWYoKTsJCQkvKiBDbG9zZSBpbnB1dCBmaWxlICovCi0J c3hlb2YoMSk7CQkJLyogU2VuZCBFT0YoRCkgKi8KLQlCRUdJTiBzc2VvZjsJCQkvKiBhbmQgc3dp dGNoIHRvIEVPRiBzdGF0ZS4gKi8KLSAgICB9IGVsc2UgaWYgKGF0Y2FwdSkgewkJLyogSWYgYXR0 cmlidXRlcyBhcmUgdG8gYmUgdXNlZCAqLwotCWlmIChzYXR0cih4ZmxnIHwgc3RkaW5mLCAxKSA8 IDApIHsgLyogc2VuZCB0aGVtICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBzZW5kIGF0 dHJpYnV0ZXMiKTsgLyogaWYgcHJvYmxlbSwgc2F5IHNvICovCi0JICAgIFJFU1VNRTsJCQkvKiBh bmQgcXVpdCAqLwotCX0gZWxzZSBCRUdJTiBzc2F0dHI7CQkvKiBpZiBvaywgc3dpdGNoIHRvIGF0 dHJpYnV0ZSBzdGF0ZSAqLwotICAgIH0gZWxzZSB7CQkJCS8qIEF0dHJpYnV0ZXMgbm90IG5lZ290 aWF0ZWQgKi8KLQlpZiAod2luZG93KHdzbG90bikgPCAwKSB7CS8qIE9wZW4gd2luZG93ICovCi0J ICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBvcGVuIHdpbmRvdyIpOwotCSAgICBSRVNVTUU7Ci0J fSBlbHNlIGlmICgoeCA9IHNkYXRhKCkpID09IC0yKSB7IC8qIFNlbmQgZmlyc3QgZGF0YSBwYWNr ZXQgZGF0YSAqLwotCSAgICB3aW5kb3coMSk7CQkJLyogQ29ubmVjdGlvbiBsb3N0LCByZXNldCB3 aW5kb3cgKi8KLQkgICAgeCA9IGNsc2lmKCk7CQkvKiBDbG9zZSBpbnB1dCBmaWxlICovCi0JICAg IHJldHVybihzdWNjZXNzID0gMCk7CS8qIFJldHVybiBmYWlsdXJlICovCi0JfSBlbHNlIGlmICh4 ID09IC05KSB7CQkvKiBVc2VyIGludGVycnVwdGVkICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSJV c2VyIGNhbmNlbGxlZCIpOyAvKiBTZW5kIEVycm9yIHBhY2tldCAqLwotCSAgICB3aW5kb3coMSk7 CQkJLyogU2V0IHdpbmRvdyBzaXplIGJhY2sgdG8gMS4uLiAqLwotCSAgICB0aW1pbnQgPSBzX3Rp bWludDsJCS8qIFJlc3RvcmUgdGltZW91dCAqLwotCSAgICByZXR1cm4oc3VjY2VzcyA9IDApOwkv KiBGYWlsZWQgKi8KLQl9IGVsc2UgaWYgKHggPCAwKSB7CQkvKiBFT0YgKGVtcHR5IGZpbGUpIG9y IGludGVycnVwdGVkICovCi0JICAgIHdpbmRvdygxKTsJCQkvKiBwdXQgd2luZG93IHNpemUgYmFj ayB0byAxLCAqLwotCSAgICBkZWJ1ZyhGMTAxLCI8c3NmaWxlPlkgY3hzZWVuIiwiIixjeHNlZW4p OwotCSAgICB4ID0gY2xzaWYoKTsJCS8qIElmIG5vdCBvaywgY2xvc2UgaW5wdXQgZmlsZSwgKi8K LQkgICAgaWYgKHggPCAwKQkJCS8qIHRyZWF0aW5nIGZhaWx1cmUgYXMgaW50ZXJydXB0aW9uICov Ci0JICAgICAgY3hzZWVuID0gMTsJCS8qIFNlbmQgRU9GIHBhY2tldCAqLwotCSAgICBzZW9mKGN4 c2Vlbnx8Y3pzZWVuKTsKLQkgICAgQkVHSU4gc3Nlb2Y7CQkvKiBhbmQgc3dpdGNoIHRvIEVPRiBz dGF0ZS4gKi8KLQl9IGVsc2UgewkJCS8qIEZpcnN0IGRhdGEgc2VudCBPSyAqLwotCSAgICBCRUdJ TiBzc2RhdGE7CQkvKiBBbGwgb2ssIHN3aXRjaCB0byBzZW5kLWRhdGEgc3RhdGUgKi8KLQl9Ci0g ICAgfQotfQotICAgIGJyZWFrOwotY2FzZSA2NzoKLSAgICB7CQkJCS8qIEdvdCBBQ0sgdG8gQSBw YWNrZXQgKi8KLSAgICBmZmMgPSAwTDsJCQkJLyogUmVzZXQgZmlsZSBieXRlIGNvdW50ZXIgKi8K LSAgICBkZWJ1ZyhGMTAxLCI8c3NhdHRyPlkgY3hzZWVuIiwiIixjeHNlZW4pOwotICAgIGlmIChj eHNlZW58fGN6c2VlbikgewkJLyogSW50ZXJydXB0ZWQ/ICovCi0JZGVidWcoRjEwMSwiPHNhdHRy PlkgY2FuY2VsaW5nIiwiIiwwKTsKLQl4ID0gY2xzaWYoKTsJCQkvKiBDbG9zZSBpbnB1dCBmaWxl ICovCi0Jc3hlb2YoMSk7CQkJLyogU2VuZCBFT0YoRCkgKi8KLQlCRUdJTiBzc2VvZjsJCQkvKiBh bmQgc3dpdGNoIHRvIEVPRiBzdGF0ZS4gKi8KLSAgICB9IGVsc2UgaWYgKHJzYXR0cihyZGF0YXAp IDwgMCkgewkvKiBXYXMgdGhlIGZpbGUgcmVmdXNlZD8gKi8KLQlkaXNjYXJkID0gMTsJCQkvKiBT ZXQgdGhlIGRpc2NhcmQgZmxhZyAqLwotCWNsc2lmKCk7CQkJLyogQ2xvc2UgdGhlIGZpbGUgKi8K LQlzeGVvZigxKTsJCQkvKiBzZW5kIEVPRiB3aXRoICJkaXNjYXJkIiBjb2RlICovCi0JQkVHSU4g c3Nlb2Y7CQkJLyogc3dpdGNoIHRvIHNlbmQtRU9GIHN0YXRlICovCi0gICAgfSBlbHNlIGlmICgo eCA9IHNhdHRyKHhmbGcgfCBzdGRpbmYsIDApKSA8IDApIHsgLyogU2VuZCBtb3JlPyAqLwotCWVy cnBrdCgoQ0hBUiAqKSJDYW4ndCBzZW5kIGF0dHJpYnV0ZXMiKTsgLyogVHJvdWJsZS4uLiAqLwot CVJFU1VNRTsKLSAgICB9IGVsc2UgaWYgKHggPT0gMCkgewkJLyogTm8gbW9yZSB0byBzZW5kIHNv IG5vdyB0aGUgZGF0YSAqLwotCWlmICh3aW5kb3cod3Nsb3RuKSA8IDApIHsJLyogQWxsb2NhdGUg bmVnb3RpYXRlZCB3aW5kb3cgc2xvdHMgKi8KLQkgICAgZXJycGt0KChDSEFSICopIkNhbid0IG9w ZW4gd2luZG93Iik7Ci0JICAgIFJFU1VNRTsKLQl9Ci0JaWYgKCh4ID0gc2RhdGEoKSkgPT0gLTIp IHsJLyogRmlsZSBhY2NlcHRlZCwgc2VuZCBmaXJzdCBkYXRhICovCi0JICAgIHdpbmRvdygxKTsJ CQkvKiBDb25uZWN0aW9uIGJyb2tlbiAqLwotCSAgICB4ID0gY2xzaWYoKTsJCS8qIENsb3NlIGZp bGUgKi8KLQkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJLyogUmV0dXJuIGZhaWx1cmUgKi8KLQl9 IGVsc2UgaWYgKHggPT0gLTkpIHsJCS8qIFVzZXIgaW50ZXJydXB0ZWQgKi8KLQkgICAgZXJycGt0 KChDSEFSICopIlVzZXIgY2FuY2VsbGVkIik7IC8qIFNlbmQgRXJyb3IgcGFja2V0ICovCi0JICAg IHdpbmRvdygxKTsJCQkvKiBTZXQgd2luZG93IHNpemUgYmFjayB0byAxLi4uICovCi0JICAgIHRp bWludCA9IHNfdGltaW50OwkJLyogUmVzdG9yZSB0aW1lb3V0ICovCi0JICAgIHJldHVybihzdWNj ZXNzID0gMCk7CS8qIEZhaWxlZCAqLwotCX0gZWxzZSBpZiAoeCA8IDApIHsJCS8qIElmIGRhdGEg d2FzIG5vdCBzZW50ICovCi0JICAgIHdpbmRvdygxKTsJCQkvKiBwdXQgd2luZG93IHNpemUgYmFj ayB0byAxLCAqLwotCSAgICBkZWJ1ZyhGMTAxLCI8c3NhdHRyPlkgY3hzZWVuIiwiIixjeHNlZW4p OwotCSAgICBpZiAoY2xzaWYoKSA8IDApCQkvKiBDbG9zZSBpbnB1dCBmaWxlICovCi0JICAgICAg Y3hzZWVuID0gMTsJCS8qIFNlbmQgRU9GIHBhY2tldCAqLwotCSAgICBzZW9mKGN4c2Vlbnx8Y3pz ZWVuKTsKLQkgICAgQkVHSU4gc3Nlb2Y7CQkvKiBhbmQgc3dpdGNoIHRvIEVPRiBzdGF0ZS4gKi8K LQl9IGVsc2UgewotCSAgICBCRUdJTiBzc2RhdGE7CQkvKiBBbGwgb2ssIHN3aXRjaCB0byBzZW5k LWRhdGEgc3RhdGUgKi8KLQl9Ci0gICAgfQotfQotICAgIGJyZWFrOwotY2FzZSA2ODoKLSAgICB7 ICAJCQkJLyogQ3RybC1DIG9yIGNvbm5lY3Rpb24gbG9zcy4gKi8KLSAgICB3aW5kb3coMSk7CQkJ CS8qIFNldCB3aW5kb3cgc2l6ZSBiYWNrIHRvIDEuLi4gKi8KLSAgICBjeHNlZW4gPSAxOwkJCQkv KiBUbyBpbmRpY2F0ZSBpbnRlcnJ1cHRpb24gKi8KLSAgICB4ID0gY2xzaWYoKTsJCQkvKiBDbG9z ZSBmaWxlICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJCS8qIEZhaWxlZCAqLwotfQotICAg IGJyZWFrOwotY2FzZSA2OToKLSAgICB7CQkJCS8qIEdvdCBBQ0sgdG8gRGF0YSBwYWNrZXQgKi8K LSAgICBjYW5uZWQocmRhdGFwKTsJCQkvKiBDaGVjayBpZiBmaWxlIHRyYW5zZmVyIGNhbmNlbGxl ZCAqLwotICAgIGRlYnVnKEYxMTEsIjxzc2RhdGE+WSBjeHNlZW4iLHJkYXRhcCxjeHNlZW4pOwot ICAgIGRlYnVnKEYxMTEsIjxzc2RhdGE+WSBjenNlZW4iLHJkYXRhcCxjenNlZW4pOwotICAgIGlm ICgoeCA9IHNkYXRhKCkpID09IC0yKSB7CQkvKiBUcnkgdG8gc2VuZCBuZXh0IGRhdGEgKi8KLQl3 aW5kb3coMSk7CQkJLyogQ29ubmVjdGlvbiBsb3N0LCByZXNldCB3aW5kb3cgKi8KLQl4ID0gY2xz aWYoKTsJCQkvKiBDbG9zZSBmaWxlICovCi0JcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJCS8qIEZhaWxl ZCAqLwotICAgIH0gZWxzZSBpZiAoeCA9PSAtOSkgewkJLyogVXNlciBpbnRlcnJ1cHRlZCAqLwot CWVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNlbGxlZCIpOyAvKiBTZW5kIEVycm9yIHBhY2tldCAq LwotCXdpbmRvdygxKTsJCQkvKiBTZXQgd2luZG93IHNpemUgYmFjayB0byAxLi4uICovCi0JdGlt aW50ID0gc190aW1pbnQ7CQkvKiBSZXN0b3JlIG9yaWdpbmFsIHRpbWVvdXQgKi8KLQlyZXR1cm4o c3VjY2VzcyA9IDApOwkJLyogRmFpbGVkICovCi0gICAgfSBlbHNlIGlmICh4IDwgMCkgewkJCS8q IEVPRiAtIGZpbmlzaGVkIHNlbmRpbmcgZGF0YSAqLwotCWRlYnVnKEYxMDEsIjxzc2RhdGE+WSBj eHNlZW4iLCIiLGN4c2Vlbik7Ci0Jd2luZG93KDEpOwkJCS8qIFNldCB3aW5kb3cgc2l6ZSBiYWNr IHRvIDEuLi4gKi8KLQlpZiAoY2xzaWYoKSA8IDApCQkvKiBDbG9zZSBpbnB1dCBmaWxlICovCi0J ICBjeHNlZW4gPSAxOwkJCS8qIFNlbmQgRU9GIHBhY2tldCAqLwotCWRlYnVnKEYxMDEsIjxzc2Rh dGE+WSBDQUxMSU5HIFNFT0YoKSIsIiIsY3hzZWVuKTsKLQlzZW9mKGN4c2Vlbnx8Y3pzZWVuKTsK LQlCRUdJTiBzc2VvZjsJCQkvKiBhbmQgZW50ZXIgc2VuZC1lb2Ygc3RhdGUgKi8KLSAgICB9Ci0g ICAgLyogTk9URTogSWYgeCA9PSAwIGl0IG1lYW5zIHdlJ3JlIGRyYWluaW5nOiBzZWUgc2RhdGEo KSEgKi8KLX0KLSAgICBicmVhazsKLWNhc2UgNzA6Ci0gICAgewkJCQkvKiBHb3QgQUNLIHRvIEVP RiAqLwotICAgIGludCBnLCB4ZGlzY2FyZDsKLSAgICBjYW5uZWQocmRhdGFwKTsJCQkvKiBDaGVj ayBpZiBmaWxlIHRyYW5zZmVyIGNhbmNlbGxlZCAqLwotICAgIGRlYnVnKEYxMTEsIjxzc2VvZj5Z IGN4c2VlbiIscmRhdGFwLGN4c2Vlbik7Ci0gICAgZGVidWcoRjExMSwiPHNzZW9mPlkgY3pzZWVu IixyZGF0YXAsY3pzZWVuKTsKLSAgICBkZWJ1ZyhGMTExLCI8c3Nlb2Y+WSBkaXNjYXJkIixyZGF0 YXAsZGlzY2FyZCk7Ci0gICAgeGRpc2NhcmQgPSBkaXNjYXJkOwotICAgIGRpc2NhcmQgPSAwOwot ICAgIHN1Y2Nlc3MgPSAoY3hzZWVuID09IDAgJiYgY3pzZWVuID09IDApOyAvKiBUcmFuc2ZlciBz dGF0dXMuLi4gKi8KLSAgICBkZWJ1ZyhGMTAxLCI8c3Nlb2Y+WSBzdWNjZXNzIiwiIixzdWNjZXNz KTsKLSAgICBpZiAoc3VjY2VzcyAmJiByZWplY3Rpb24gPiAwKQkgICAgLyogSWYgcmVqZWN0ZWQs IHN1Y2NlZWQgaWYgKi8KLSAgICAgIGlmIChyZWplY3Rpb24gIT0gJyMnICYmCQkgICAgLyogcmVh c29uIHdhcyBkYXRlICovCi0JICByZWplY3Rpb24gIT0gMSAmJiByZWplY3Rpb24gIT0gJz8nKSAv KiBvciBuYW1lOyAqLwotCXN1Y2Nlc3MgPSAwOwkJCSAgICAvKiBmYWlsIG90aGVyd2lzZS4gKi8K LSAgICBjeHNlZW4gPSAwOwkJCQkvKiBUaGlzIGdvZXMgYmFjayB0byB6ZXJvLiAqLwotICAgIGlm IChzdWNjZXNzKSB7CQkJLyogT25seSBpZiB0cmFuc2ZlciBzdWNjZWVkZWQuLi4gKi8KLQl4eHNj cmVlbihTQ1JfU1QsU1RfT0ssMEwsIiIpOwotCWlmICgheGRpc2NhcmQpIHsKLQkgICAgbWFrZXN0 cigmc2ZzcGVjLHBzZnNwZWMpOwkvKiBSZWNvcmQgZmlsZW5hbWVzIGZvciBXSEVSRSAqLwotCSAg ICBtYWtlc3RyKCZzcmZzcGVjLHBzcmZzcGVjKTsKLQl9Ci0JaWYgKG1vdmluZykgewkJCS8qIElm IE1PVkUnaW5nICovCi0JICAgIHggPSB6ZGVsZXQoZmlsbmFtKTsJCS8qIFRyeSB0byBkZWxldGUg dGhlIHNvdXJjZSBmaWxlICovCi0jaWZkZWYgVExPRwotCSAgICBpZiAodHJhbG9nKSB7Ci0JCWlm ICh4ID4gLTEpIHsKLQkJICAgIHRsb2coRjExMCwiIGRlbGV0ZWQiLGZpbG5hbSwwKTsKLQkJfSBl bHNlIHsKLQkJICAgIHRsb2coRjExMCwiIGRlbGV0ZSBmYWlsZWQ6Iixja19lcnJzdHIoKSwwKTsK LQkJfQotCSAgICB9Ci0jZW5kaWYgLyogVExPRyAqLwotCX0gZWxzZSBpZiAoc25kX21vdmUpIHsJ CS8qIE9yIG1vdmUgaXQgKi8KLQkgICAgaW50IHg7Ci0JICAgIHggPSB6cmVuYW1lKGZpbG5hbSxz bmRfbW92ZSk7Ci0jaWZkZWYgVExPRwotCSAgICBpZiAodHJhbG9nKSB7Ci0JCWlmICh4ID4gLTEp IHsKLQkJICAgIHRsb2coRjExMCwiIG1vdmVkIHRvICIsc25kX21vdmUsMCk7Ci0JCX0gZWxzZSB7 Ci0JCSAgICB0bG9nKEYxMTAsIiBtb3ZlIGZhaWxlZDoiLGNrX2VycnN0cigpLDApOwotCQl9Ci0J ICAgIH0KLSNlbmRpZiAvKiBUTE9HICovCi0JfSBlbHNlIGlmIChzbmRfcmVuYW1lKSB7CS8qIE9y IHJlbmFtZSBpdCAqLwotCSAgICBjaGFyICpzID0gc25kX3JlbmFtZTsJLyogUmVuYW1pbmcgc3Ry aW5nICovCi0jaWZuZGVmIE5PU1BMCi0JICAgIGludCB5OwkJCS8qIFBhc3MgaXQgdGhydSB0aGUg ZXZhbHVhdG9yICovCi0JICAgIGV4dGVybiBpbnQgY21kX3F1b3Rpbmc7CS8qIGZvciBcdihmaWxl bmFtZSkgKi8KLQkgICAgaWYgKGNtZF9xdW90aW5nKSB7CQkvKiBCdXQgb25seSBpZiBjbWRfcXVv dGluZyBpcyBvbiAqLwotCQl5ID0gTUFYUlA7Ci0JCXMgPSAoY2hhciAqKXNydmNtZDsKLQkJenpz dHJpbmcoc25kX3JlbmFtZSwmcywmeSk7Ci0JCXMgPSAoY2hhciAqKXNydmNtZDsKLQkgICAgfQot I2VuZGlmIC8qIE5PU1BMICovCi0JICAgIGlmIChzKSBpZiAoKnMpIHsKLQkJaW50IHg7Ci0JCXgg PSB6cmVuYW1lKGZpbG5hbSxzKTsKLSNpZmRlZiBUTE9HCi0JICAgIGlmICh0cmFsb2cpIHsKLQkJ aWYgKHggPiAtMSkgewotCQkgICAgdGxvZyhGMTEwLCIgcmVuYW1lZCB0byIscywwKTsKLQkJfSBl bHNlIHsKLQkJICAgIHRsb2coRjExMCwiIHJlbmFtZSBmYWlsZWQ6Iixja19lcnJzdHIoKSwwKTsK LQkJfQotCSAgICB9Ci0jZW5kaWYgLyogVExPRyAqLwotI2lmZGVmIENPTU1FTlQKLQkJKnMgPSBO VUw7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICB9Ci0JfQotICAgIH0KLSAgICBpZiAoY3pz ZWVuKSB7CQkJLyogQ2hlY2sgZ3JvdXAgaW50ZXJydXB0aW9uIGZsYWcgKi8KLQlnID0gMDsJCQkJ LyogTm8gbW9yZSBmaWxlcyBpZiBpbnRlcnJ1cHRlZCAqLwotICAgIH0gZWxzZSB7CQkJCS8qIE90 aGVyd2lzZS4uLiAqLwotI2lmZGVmIENPTU1FTlQKLQkvKiBUaGlzIGNvZGUgbWFrZXMgYW55IG9w ZW4gZXJyb3IgZmF0YWwgdG8gYSBmaWxlLWdyb3VwIHRyYW5zZmVyLiAqLwotCWcgPSBnbmZpbGUo KTsKLQlkZWJ1ZyhGMTExLCI8c3Nlb2Y+WSBnbmZpbGUiLGZpbG5hbSxnKTsKLQlpZiAoZyA+IDAp IHsJCQkvKiBBbnkgbW9yZSBmaWxlcyB0byBzZW5kPyAqLwotCSAgICBpZiAoc2ZpbGUoeGZsZykp CQkvKiBZZXMsIHRyeSB0byBzZW5kIG5leHQgZmlsZSBoZWFkZXIgKi8KLQkgICAgICBCRUdJTiBz c2ZpbGU7CQkvKiBpZiBvaywgZW50ZXIgc2VuZC1maWxlIHN0YXRlICovCi0JICAgIGVsc2UgewkJ CS8qIG90aGVyd2lzZSAqLwotCQlzID0geGZsZyA/ICJDYW4ndCBleGVjdXRlIGNvbW1hbmQiIDog KGNoYXIgKillcGt0bXNnOwotCQlpZiAoISpzKSBzID0gIkNhbid0IG9wZW4gZmlsZSI7Ci0JCWVy cnBrdCgoQ0hBUiAqKXMpOwkvKiBzZW5kIGVycm9yIG1lc3NhZ2UgKi8KLQkJUkVTVU1FOwkJCS8q IGFuZCBxdWl0ICovCi0JICAgIH0KLQl9IGVsc2UgewkJCS8qIE5vIG5leHQgZmlsZSAqLwotCSAg ICB0c2VjcyA9IGd0aW1lcigpOwkJLyogZ2V0IHN0YXRpc3RpY3MgdGltZXJzICovCi0jaWZkZWYg R0ZUSU1FUgotCSAgICBmcHRzZWNzID0gZ2Z0aW1lcigpOwotI2VuZGlmIC8qIEdGVElNRVIgKi8K LQkgICAgc2VvdCgpOwkJCS8qIHNlbmQgRU9UIHBhY2tldCAqLwotCSAgICBCRUdJTiBzc2VvdDsJ CS8qIGVudGVyIHNlbmQtZW90IHN0YXRlICovCi0JfQotI2Vsc2UgIC8qIENPTU1FTlQgKi8KLQl3 aGlsZSAoMSkgewkJCS8qIEtlZXAgdHJ5aW5nLi4uICovCi0JICAgIGcgPSBnbmZpbGUoKTsJCS8q IEdldCBuZXh0IGZpbGUgKi8KLQkgICAgZGVidWcoRjExMSwiPHNzZW9mPlkgZ25maWxlIixmaWxu YW0sZyk7Ci0JICAgIGlmIChnID09IDAgJiYgZ25mZXJyb3IgPT0gMCkgLyogTm8gbW9yZSwgc3Rv cCB0cnlpbmcgKi8KLQkgICAgICBicmVhazsKLQkgICAgaWYgKGcgPiAwKSB7CQkvKiBIYXZlIG9u ZSAqLwotCQlpZiAoc2ZpbGUoeGZsZykpIHsJLyogVHJ5IHRvIG9wZW4gYW5kIHNlbmQgRiBwYWNr ZXQgKi8KLQkJICAgIEJFR0lOIHNzZmlsZTsJLyogSWYgT0ssIGVudGVyIHNlbmQtZmlsZSBzdGF0 ZSAqLwotCQkgICAgYnJlYWs7CQkvKiBhbmQgYnJlYWsgb3V0IG9mIGxvb3AuICovCi0JCX0KLQkg ICAgfSAvKiBPdGhlcndpc2Uga2VlcCB0cnlpbmcgdG8gZ2V0IG9uZSB3ZSBjYW4gc2VuZC4uLiAq LwotCX0KLSAgICB9Ci0gICAgaWYgKGcgPT0gMCkgewotCWRlYnVnKEYxMDEsIjxzc2VvZj5ZIG5v IG1vcmUgZmlsZXMiLCIiLGN6c2Vlbik7Ci0JdHNlY3MgPSBndGltZXIoKTsJCS8qIEdldCBzdGF0 aXN0aWNzIHRpbWVycyAqLwotI2lmZGVmIEdGVElNRVIKLQlmcHRzZWNzID0gZ2Z0aW1lcigpOwot I2VuZGlmIC8qIEdGVElNRVIgKi8KLQlzZW90KCk7CQkJCS8qIFNlbmQgRU9UIHBhY2tldCAqLwot CUJFR0lOIHNzZW90OwkJCS8qIEVudGVyIHNlbmQtZW90IHN0YXRlICovCi0gICAgfQotI2VuZGlm IC8qIENPTU1FTlQgKi8KLX0KLSAgICBicmVhazsKLWNhc2UgNzE6Ci0gICAgewkJCQkvKiBHb3Qg QUNLIHRvIEVPVCAqLwotICAgIGRlYnVnKEYxMDEsInNzZW90IGp1c3RvbmUiLCIiLGp1c3RvbmUp OwotICAgIFJFU1VNRTsJCQkJLyogQWxsIGRvbmUsIGp1c3QgcXVpdCAqLwotfQotICAgIGJyZWFr OwotY2FzZSA3MjoKLSAgICB7CQkJCQkvKiBHb3QgRXJyb3IgcGFja2V0LCBpbiBhbnkgc3RhdGUg Ki8KLSAgICBjaGFyICpzID0gIiI7Ci0gICAgd2luZG93KDEpOwkJCQkvKiBDbG9zZSB3aW5kb3cg Ki8KLSAgICB0aW1pbnQgPSBzX3RpbWludDsJCQkvKiBSZXN0b3JlIG9yaWdpbmFsIHRpbWVvdXQg Ki8KLSAgICBpZiAoKmVwa3Rtc2cpCQkJLyogTWVzc2FnZSBmcm9tIEVycm9yIHBhY2tldCAqLwot ICAgICAgcyA9IChjaGFyICopZXBrdG1zZzsKLSAgICBpZiAoISpzKSB7CQkJCS8qIElmIG5vdCB0 aGVyZSB0aGVuIG1heWJlIGhlcmUgKi8KLQlzID0gKGNoYXIgKilyZGF0YXA7Ci0JY2tzdHJuY3B5 KChjaGFyICopZXBrdG1zZywoY2hhciAqKXJkYXRhcCxQS1RNU0dMRU4pOwotICAgIH0KLSAgICBp ZiAoISpzKQkJCQkvKiBIb3BlZnVsbHkgd2UnbGwgbmV2ZXIgc2VlIHRoaXMuICovCi0gICAgICBz ID0gIlVua25vd24gZXJyb3IiOwotICAgIHN1Y2Nlc3MgPSAwOwkJCS8qIEZvciBJRiBTVUNDRVNT L0ZBSUwuICovCi0gICAgZGVidWcoRjEwMSwiY2tjcHJvLncganVzdG9uZSBhdCBFIHBrdCIsIiIs anVzdG9uZSk7Ci0KLSAgICBzdWNjZXNzID0gMDsJCQkvKiBUcmFuc2ZlciBmYWlsZWQgKi8KLSAg ICB4ZmVyc3RhdCA9IHN1Y2Nlc3M7CQkJLyogUmVtZW1iZXIgdHJhbnNmZXIgc3RhdHVzICovCi0g ICAgaWYgKCFlcGt0c2VudCkgewotCXggPSBxdWlldDsgcXVpZXQgPSAxOwkJLyogQ2xvc2UgZmls ZXMgc2lsZW50bHksICovCi0JZXBrdHJjdmQgPSAxOwkJCS8qIFByZXZlbnQgbWVzc2FnZXMgZnJv bSBjbHNvZigpICovCi0JY2xzaWYoKTsKLQljbHNvZigxKTsgCQkJLyogZGlzY2FyZGluZyBhbnkg b3V0cHV0IGZpbGUuICovCi0JZXJtc2cocyk7CQkJLyogSXNzdWUgdGhlIG1lc3NhZ2UgKGNhbGxz IHNjcmVlbikuICovCi0JcXVpZXQgPSB4OwkJCS8qIFJlc3RvcmUgcXVpZXQgc3RhdGUgKi8KLSAg ICB9Ci0gICAgdHN0YXRzKCk7CQkJCS8qIEdldCBzdGF0cyAqLwotLyoKLSAgSWYgd2UgYXJlIGV4 ZWN1dGluZyBjb21tYW5kcyBmcm9tIGEgY29tbWFuZCBmaWxlIG9yIG1hY3JvLCBsZXQgdGhlIGNv bW1hbmQKLSAgZmlsZSBvciBtYWNybyBkZWNpZGUgd2hldGhlciB0byBleGl0LCBiYXNlZCBvbiBT RVQgeyBUQUtFLCBNQUNSTyB9IEVSUk9SLgotKi8KLSAgICBpZiAoCi0jaWZuZGVmIE5PSUNQCi0J IXhjbWRzcmMgJiYKLSNlbmRpZiAvKiBOT0lDUCAqLwotCWJhY2tncmQgJiYgIXNlcnZlcikKLSAg ICAgIGZhdGFsKCJQcm90b2NvbCBlcnJvciIpOwotICAgIHhpdHN0YSB8PSAod2hhdCAmIFdfS0VS TUlUKTsJLyogU2F2ZSB0aGlzIGZvciBkb2V4aXQoKS4gKi8KLSNpZmRlZiBDS19UTVBESVIKLS8q IElmIHdlIHdlcmUgY2QnZCB0ZW1wb3JhcmlseSB0byBhbm90aGVyIGRldmljZSBvciBkaXJlY3Rv cnkgLi4uICovCi0gICAgaWYgKGZfdG1wZGlyKSB7Ci0JaW50IHg7Ci0JeCA9IHpjaGRpcigoY2hh ciAqKSBzYXZkaXIpOwkvKiAuLi4gcmVzdG9yZSBwcmV2aW91cyBkaXJlY3RvcnkgKi8KLQlmX3Rt cGRpciA9IDA7CQkJLyogYW5kIHJlbWVtYmVyIHdlIGRpZCBpdC4gKi8KLQlkZWJ1ZyhGMTExLCJj a2Nwcm8udyBFIHRtcGRpciByZXN0b3JlZCIsc2F2ZGlyLHgpOwotICAgIH0KLSNlbmRpZiAvKiBD S19UTVBESVIgKi8KLSNpZmRlZiBJS1NEQgotICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdo YXQsIkVSUk9SIiwgKGNoYXIgKillcGt0bXNnLCAiIik7Ci0jZW5kaWYgLyogSUtTREIgKi8KLSAg ICBSRVNVTUU7Ci19Ci0gICAgYnJlYWs7Ci1jYXNlIDczOgotICAgIHsgc3VjY2VzcyA9IDA7IFFV SVQ7IH0KLSAgICBicmVhazsKLWNhc2UgNzQ6Ci0gICAgewkJCQkJLyogQW55dGhpbmcgbm90IGFj Y291bnRlZCBmb3IgYWJvdmUgKi8KLSAgICBlcnJwa3QoKENIQVIgKikiVW5leHBlY3RlZCBwYWNr ZXQgdHlwZSIpOyAvKiBHaXZlIGVycm9yIG1lc3NhZ2UgKi8KLSAgICB3aW5kb3coMSk7Ci0gICAg eGl0c3RhIHw9ICh3aGF0ICYgV19LRVJNSVQpOwkvKiBTYXZlIHRoaXMgZm9yIGRvZXhpdCgpLiAq LwotICAgIFJFU1VNRTsJCQkJLyogYW5kIHF1aXQgKi8KLX0KLSAgICBicmVhazsKLQotCSAgICB9 Ci0gICAgfQotfQotCi1jaGFyIHRibFtdID0gewotIC0xLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzIsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAot IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LAotIDc0LCAxMSwgNzQsICA3LCA3NCwgNzQsIDc0LCAgOSwgIDQsIDc0LCAgNSwgIDgs IDc0LCA3NCwgNzQsICA2LAotIDc0LCA3MywgIDMsICAxLCA3NCwgNzQsICAyLCA3NCwgMTAsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIC0xLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQs IDc0LCA3NCwgMTUsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDEzLCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LAotIDc0LCAxMSwgNzQsICA3LCA3NCwgNzQsIDc0LCAgOSwgIDQsIDc0LCAgNSwgIDgsIDc0 LCA3NCwgNzQsICA2LAotIDc0LCA3MywgIDMsICAxLCA3NCwgNzQsICAyLCA3NCwgMTAsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIC0xLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNTcsIDc0 LCA3NCwgNzIsIDUzLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNTQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LAotIDc0LCAxMSwgNzQsICA3LCA3NCwgNzQsIDc0LCAgOSwgIDQsIDc0LCAgNSwgIDgsIDc0LCA3 NCwgNzQsICA2LAotIDc0LCA3MywgIDMsICAxLCA3NCwgNzQsICAyLCA3NCwgMTAsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LAotIC0xLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA1NSwgNzQsIDc0LCA1 NiwgNzIsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA1OSwgNzQsIDc0LCA3NCwgNzQsIDc0LAot IDc0LCAxMSwgNzQsICA3LCA3NCwgNzQsIDc0LCAgOSwgIDQsIDc0LCAgNSwgIDgsIDc0LCA3NCwg NzQsICA2LAotIDc0LCA3MywgIDMsICAxLCA3NCwgNzQsICAyLCA3NCwgMTAsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LAotIC0xLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA1OCwg NzIsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA2MSwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0 LCAxMSwgNzQsICA3LCA3NCwgNzQsIDc0LCAgOSwgIDQsIDc0LCAgNSwgIDgsIDc0LCA3NCwgNzQs ICA2LAotIDc0LCA2MCwgIDMsICAxLCA3NCwgNzQsICAyLCA3NCwgMTAsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LAotIC0xLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDY1LCA3NCwgNzIs IDc0LCA2NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNjMsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDYyLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCAx MSwgNzQsICA3LCA3NCwgNzQsIDc0LCAgOSwgIDQsIDc0LCAgNSwgIDgsIDc0LCA3NCwgNzQsICA2 LAotIDc0LCA3MywgIDMsICAxLCA3NCwgNzQsICAyLCA3NCwgMTAsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LAotIC0xLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzIsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDY2LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCAxMSwg NzQsICA3LCA3NCwgNzQsIDc0LCAgOSwgIDQsIDc0LCAgNSwgIDgsIDc0LCA3NCwgNzQsICA2LAot IDc0LCA3MywgIDMsICAxLCA3NCwgNzQsICAyLCA3NCwgMTAsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LAotIC0xLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzIsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDY3LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCAxMSwgNzQs ICA3LCA3NCwgNzQsIDc0LCAgOSwgIDQsIDc0LCAgNSwgIDgsIDc0LCA3NCwgNzQsICA2LAotIDc0 LCA3MywgIDMsICAxLCA3NCwgNzQsICAyLCA3NCwgMTAsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LAotIC0xLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzIsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDY5LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCAxMSwgNzQsICA3 LCA3NCwgNzQsIDc0LCAgOSwgIDQsIDc0LCAgNSwgIDgsIDc0LCA3NCwgNzQsICA2LAotIDc0LCA2 OCwgIDMsICAxLCA3NCwgNzQsICAyLCA3NCwgMTAsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LAotIC0xLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzIsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDcwLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCAxMSwgNzQsICA3LCA3 NCwgNzQsIDc0LCAgOSwgIDQsIDc0LCAgNSwgIDgsIDc0LCA3NCwgNzQsICA2LAotIDc0LCA3Mywg IDMsICAxLCA3NCwgNzQsICAyLCA3NCwgMTAsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAot IC0xLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzIsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDcxLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCAxMSwgNzQsICA3LCA3NCwg NzQsIDc0LCAgOSwgIDQsIDc0LCAgNSwgIDgsIDc0LCA3NCwgNzQsICA2LAotIDc0LCA3MywgIDMs ICAxLCA3NCwgNzQsICAyLCA3NCwgMTAsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIC0x LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjks IDI5LAotIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5 LCAyOSwgMjksIDI5LAotIDI5LCAyOSwgMjksIDI2LCAyOSwgMjksIDI5LCAyNSwgMTksIDE3LCAy MiwgMjksIDI5LCAyOSwgMjgsIDIzLAotIDI5LCAyOSwgMTgsIDEyLCAyOSwgMjksIDIwLCAyMSwg MjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LAotIDI5LCAxMSwgMjksICA3LCAyOSwgMjks IDI5LCAgOSwgIDQsIDI5LCAgNSwgIDgsIDI5LCAyOSwgMjksICA2LAotIDI5LCAyNywgIDMsICAx LCAyOSwgMjksICAyLCAyOSwgMTAsIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LAotIC0xLCA1 MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUw LAotIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1 MCwgNTAsIDUwLAotIDUwLCAzMiwgNTAsIDMxLCAzMywgMzQsIDM1LCA1MCwgMzgsIDMwLCA1MCwg NDAsIDM3LCA0OCwgNTAsIDUwLAotIDUwLCA1MCwgMzksIDQxLCA0MiwgNDUsIDQ3LCA0NiwgMzYs IDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLAotIDUwLCAxMSwgNTAsICA3LCA0NCwgNTAsIDUw LCAgOSwgIDQsIDUwLCAgNSwgIDgsIDUwLCA0MywgNTAsICA2LAotIDUwLCA0OSwgIDMsICAxLCA1 MCwgNTAsICAyLCA1MCwgMTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLAotIC0xLCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAot IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzIsIDc0LCA3NCwgNzQsIDE3LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDEyLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDE2 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCAxMSwgNzQsICA3LCA3NCwgNzQsIDc0LCAg OSwgIDQsIDc0LCAgNSwgIDgsIDc0LCA3NCwgNzQsICA2LAotIDc0LCA3MywgIDMsICAxLCA3NCwg NzQsICAyLCA3NCwgMTAsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIC0xLCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzIsIDUzLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDEyLCA3NCwgNzQsIDc0LCA3NCwgNTQsIDUyLCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCAxMSwgNzQsICA3LCA3NCwgNzQsIDc0LCAgOSwg IDQsIDc0LCAgNSwgIDgsIDc0LCA3NCwgNzQsICA2LAotIDc0LCA1MSwgIDMsICAxLCA3NCwgNzQs ICAyLCA3NCwgMTAsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIC0xLCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzIsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LAotIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDE0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCAxMSwgNzQsICA3LCA3NCwgNzQsIDc0LCAgOSwgIDQs IDc0LCAgNSwgIDgsIDc0LCA3NCwgNzQsICA2LAotIDc0LCA3MywgIDMsICAxLCA3NCwgNzQsICAy LCA3NCwgMTAsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotICAwLCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAotIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LAot IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzIsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDI0LAotIDc0LCA3NCwgNzQsIDEyLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LAotIDc0LCAxMSwgNzQsICA3LCA3NCwgNzQsIDc0LCAgOSwgIDQsIDc0 LCAgNSwgIDgsIDc0LCA3NCwgNzQsICA2LAotIDc0LCA3MywgIDMsICAxLCA3NCwgNzQsICAyLCA3 NCwgMTAsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsNzQKLX07Ci0KLQotLyoKLSAgRnJvbSBoZXJl IGRvd24gdG8gcHJvdG8oKSBhcmUgcm91dGluZXMgdGhhdCB3ZXJlIG1vdmVkIG91dCBvZiB0aGUg c3RhdGUKLSAgdGFibGUgc3dpdGNoZXIgYmVjYXVzZSB0aGUgcmVzdWx0aW5nIHN3aXRjaCgpIGhh ZCBiZWNvbWUgdG9vIGxhcmdlLgotICBUbyBtb3ZlIHRoZSBjb250ZW50cyBvZiBhIHN0YXRlLXRh YmxlIGNhc2UgdG8gYSByb3V0aW5lOgotICAgIDEuIEFkZCBhIHByb3RvdHlwZSB0byB0aGUgbGlz dCBhYm92ZSB0aGUgc3RhdGUgdGFibGUgc3dpdGNoZXIuCi0gICAgMi4gTWFrZSBhIHJvdXRpbmUg d2l0aCBhbiBhcHByb3ByaWF0ZSBuYW1lLCByZXR1cm5pbmcgaW50LgotICAgIDMuIE1vdmUgdGhl IGNvZGUgaW50byBpdC4KLSAgICA0LiBQdXQgYSBjYWxsIHRvIHRoZSBuZXcgcm91dGluZSBpbiB0 aGUgZm9ybWVyIHNwb3Q6Ci0gICAgICAgICByYyA9IG5hbWVfb2Zfcm91dGluZSgpOwotICAgICAg ICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7Ci0gICAgNS4gQWRkICJyZXR1cm4oLTEpOyIgYWZ0 ZXIgZXZlcnkgUkVTVU1FLCBTRVJWRSwgb3IgQkVHSU4gbWFjcm8gYW5kCi0gICAgICAgYXQgdGhl IGVuZCBpZiB0aGUgY29kZSBpcyBvcGVuLWVuZGVkLgotKi8KLXN0YXRpYyBpbnQKLXJjdl9maXJz dGRhdGEoKSB7Ci0gICAgZXh0ZXJuIGludCBkaXNwb3M7Ci0gICAgZGVidWcoRjEwMSwicmN2X2Zp cnN0ZGF0YSIsIiIsZGlzcG9zKTsKLQotICAgIGlmIChkaXNjYXJkKSB7CQkJLyogaWYgd2UncmUg ZGlzY2FyZGluZyB0aGUgZmlsZSAqLwotCWFjazEoKENIQVIgKikiWCIpOwkJLyoganVzdCBhY2sg dGhlIGRhdGEgbGlrZSB0aGlzLiAqLwotCWNhbmNlbCsrOwkJCS8qIGFuZCBjb3VudCBpdCAqLwot CUJFR0lOIHJkcGt0OwkJCS8qIGFuZCB3YWl0IGZvciBtb3JlIGRhdGEgcGFja2V0cy4gKi8KLQly ZXR1cm4oLTEpOwotICAgIH0gZWxzZSB7CQkJCS8qIE5vdCBkaXNjYXJkaW5nLiAqLwotCXJmX2Vy ciA9ICJDYW4ndCBvcGVuIGZpbGUiOwotCWlmICh4ZmxnKSB7CQkJLyogSWYgc2NyZWVuIGRhdGEg Ki8KLQkgICAgaWYgKHJlbWZpbGUpIHsJCS8qIHJlZGlyZWN0ZWQgdG8gZmlsZSAqLwotCQlpZiAo cmVtcGlwZSkJCS8qIG9yIHBpcGUgKi8KLQkJICB4ID0gb3BlbmMoWk9GSUxFLHJlbWRlc3QpOyAv KiBQaXBlOiBzdGFydCBjb21tYW5kICovCi0JCWVsc2UKLQkJICB4ID0gb3BlbmEocmVtZGVzdCwm aWF0dHIpOyAvKiBGaWxlOiBvcGVuIHdpdGggYXR0cmlidXRlcyAqLwotCSAgICB9IGVsc2UgewkJ CS8qIG90aGVyd2lzZSAqLwotCQl4ID0gb3BlbnQoJmlhdHRyKTsJLyogIm9wZW4iIHRoZSBzY3Jl ZW4gKi8KLQkgICAgfQotCX0gZWxzZSB7CQkJLyogb3RoZXJ3aXNlICovCi0jaWZkZWYgQ0FMSUJS QVRFCi0JICAgIGlmIChjYWxpYnJhdGUpIHsJCS8qIElmIGNhbGlicmF0aW9uIHJ1biAqLwotCQl4 ID0gY2tvcGVueCgmaWF0dHIpOwkvKiBvcGVuIG5vdGhpbmcgKi8KLSNpZmRlZiBTVFJFQU1JTkcK LQkJaWYgKHN0cmVhbWluZykJCS8qIFN0cmVhbWluZyAqLwotCQkgIGZhc3RhY2soKTsJCS8qIEFD SyB3aXRob3V0IEFDS2luZy4gKi8KLQkJZWxzZQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCQkg IGFjaygpOwkJLyogU2VuZCByZWFsIEFDSyAqLwotCQlCRUdJTiByZHBrdDsJCS8qIFByb2NlZWQg dG8gbmV4dCBzdGF0ZSAqLwotCQlyZXR1cm4oLTEpOwotCSAgICB9IGVsc2UKLSNlbmRpZiAvKiBD QUxJQlJBVEUgKi8KLSNpZmRlZiBVTklYCi0vKgotICBJbiBVTklYIHdlIGNhbiBwaXBlIHRoZSBm aWxlIGRhdGEgaW50byB0aGUgbWFpbCBwcm9ncmFtLCB3aGljaCBpcyB0byBiZQotICBwcmVmZXJy ZWQgdG8gd3JpdGluZyBpdCBvdXQgdG8gYSB0ZW1wIGZpbGUgYW5kIHRoZW4gbWFpbGluZyBpdCBh ZnRlcndhcmRzLgotICBUaGlzIGRlcGVuZHMgcmF0aGVyIGhlYXZpbHkgb24gYWxsIFVOSVhlcyBo YXZpbmcgYSBtYWlsIGNvbW1hbmQgdGhhdAotICBhY2NlcHRzICctcyAic3ViamVjdCInIG9uIHRo ZSBjb21tYW5kIGxpbmUuICBNQUlMQ01EIChlLmcuIG1haWwsIE1haWwsIG1haWx4KQotICBpcyBk ZWZpbmVkIGluIGNrdWZpby5jLgotKi8KLQkgICAgaWYgKGRpc3BvcyA9PSAnTScpIHsJLyogTWFp bC4uLiAqLwotCQljaGFyICpzOwotCQljaGFyICogdG1wID0gTlVMTDsKLQkJaW50IG4gPSAwOwot CQlleHRlcm4gY2hhciAqTUFJTENNRDsKLQkJcyA9IGlhdHRyLmRpc3AudmFsICsgMTsKLQkJbiA9 IChpbnQpc3RybGVuKE1BSUxDTUQpICsgICAgLyogTWFpbCBjb21tYW5kICovCi0JCSAgKGludClz dHJsZW4ocykgKwkgICAgICAvKiBhZGRyZXNzICovCi0JCSAgKGludClzdHJsZW4ob2ZpbG5hbSkg KyAzMjsgIC8qIHN1YmplY3QgKi8KLQkJaWYgKHRtcCA9IChjaGFyICopbWFsbG9jKG4pKSB7Ci0J CSAgICBja21ha3htc2codG1wLG4sCi0JCQkgICAgICBNQUlMQ01ELCIgLXMgXCIiLG9maWxuYW0s IlwiICIscywKLQkJCSAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwot CQkgICAgZGVidWcoRjExMSwicmN2X2ZpcnNkYXRhIG1haWwiLHRtcCwoaW50KXN0cmxlbih0bXAp KTsKLQkJICAgIHggPSBvcGVuYyhaT0ZJTEUsKGNoYXIgKil0bXApOwotCQkgICAgZnJlZSh0bXAp OwotCQl9IGVsc2UKLQkJICB4ID0gMDsKLQkgICAgfSBlbHNlIGlmIChkaXNwb3MgPT0gJ1AnKSB7 IC8qIERpdHRvIGZvciBwcmludCAqLwotCQljaGFyICogdG1wID0gTlVMTDsKLQkJaW50IG47Ci0J CWV4dGVybiBjaGFyICpQUklOVENNRDsKLQkJbiA9IChpbnQpc3RybGVuKFBSSU5UQ01EKSArIChp bnQpc3RybGVuKGlhdHRyLmRpc3AudmFsKzEpICsgNDsKLQkJaWYgKHRtcCA9IChjaGFyICopbWFs bG9jKG4pKSB7Ci0JCSAgICBzcHJpbnRmKHRtcCwJLyogc2FmZSAocHJlY2hlY2tlZCkgKi8KLQkJ CSAgICAiJXMgJXMiLCBQUklOVENNRCwgaWF0dHIuZGlzcC52YWwgKyAxKTsKLQkJICAgIHggPSBv cGVuYyhaT0ZJTEUsKGNoYXIgKil0bXApOwotCQkgICAgZnJlZSh0bXApOwotCQl9IGVsc2UKLQkJ ICB4ID0gMDsKLQkgICAgfSBlbHNlCi0jZW5kaWYgLyogVU5JWCAqLwotCSAgICAgIHggPSBvcGVu YShmaWxuYW0sJmlhdHRyKTsJLyogb3BlbiB0aGUgZmlsZSwgd2l0aCBhdHRyaWJ1dGVzICovCi0J fQotCWlmICh4KSB7CQkJLyogSWYgZmlsZSB3YXMgb3BlbmVkIG9rICovCi0JICAgIGludCByYywg cWY7Ci0jaWZuZGVmIE5PU1BMCi0JICAgIHFmID0gcXVlcnk7Ci0jZWxzZQotCSAgICBxZiA9IDA7 Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIENLVFVOSU5HCi0JICAgIHJjID0gKGJpbmFy eSAmJiAhcGFyaXR5KSA/Ci0JICAgICAgYmRlY29kZShyZGF0YXAscHV0ZmlsKToKLQkgICAgICAg ZGVjb2RlKHJkYXRhcCwgcWYgPyBwdXR0cm0gOiBwdXRmaWwsIDEpOwotI2Vsc2UKLQkgICAgcmMg PSBkZWNvZGUocmRhdGFwLCBxZiA/IHB1dHRybSA6IHB1dGZpbCwgMSk7Ci0jZW5kaWYgLyogQ0tU VU5JTkcgKi8KLQkgICAgaWYgKHJjIDwgMCkgewotCQllcnJwa3QoKENIQVIgKikiRXJyb3Igd3Jp dGluZyBkYXRhIik7Ci0JCVJFU1VNRTsKLQkJcmV0dXJuKC0xKTsKLQkgICAgfQotI2lmZGVmIFNU UkVBTUlORwotCSAgICBpZiAoc3RyZWFtaW5nKQkJLyogU3RyZWFtaW5nIHdhcyBuZWdvdGlhdGVk ICovCi0JICAgICAgZmFzdGFjaygpOwkJLyogQUNLIHdpdGhvdXQgQUNLaW5nLiAqLwotCSAgICBl bHNlCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0JICAgICAgYWNrKCk7CQkJLyogYWNrbm93bGVk Z2UgaXQgKi8KLQkgICAgQkVHSU4gcmRwa3Q7CQkvKiBhbmQgc3dpdGNoIHRvIHJlY2VpdmUtZGF0 YSBzdGF0ZSAqLwotCSAgICByZXR1cm4oLTEpOwotCX0gZWxzZSB7CQkJLyogb3RoZXJ3aXNlICov Ci0JICAgIGVycnBrdCgoQ0hBUiAqKSByZl9lcnIpOwkvKiBzZW5kIGVycm9yIHBhY2tldCAqLwot ICAgIAkgICAgUkVTVU1FOwkJCS8qIGFuZCBxdWl0LiAqLwotCSAgICByZXR1cm4oLTEpOwotCX0K LSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQKLXJjdl9zaG9ydHJlcGx5KCkgewotI2lmZGVmIFBLVFpF Uk9IQUNLCi0gICAgc3VjY2VzcyA9IDA7Ci0gICAgZGVidWcoRjExMSwicmN2X3Nob3J0cmVwbHki LHJkYXRhcCxpcGt0bGVuKTsKLSAgICBpZiAoaXBrdGFja1swXSAmJiAhc3RybmNtcChpcGt0YWNr LChjaGFyICopcmRhdGFwLGlwa3RsZW4pKSB7Ci0JLyogTm8gaXQncyB0aGUgQUNLIHRvIHRoZSBJ IHBhY2tldCBhZ2FpbiAqLwotCXggPSBzY21kKHZjbWQsKENIQVIgKiljbWFyZyk7CS8qIFNvIHNl bmQgdGhlIFJFTU9URSBjb21tYW5kIGFnYWluICovCi0JLyogTWF5YmUgdGhpcyBzaG91bGQgYmUg cmVzZW5kKCkgKi8KLQlkZWJ1ZyhGMTEwLCJJUEtUWkVST0hBQ0siLGlwa3RhY2sseCk7Ci0JaWYg KHggPCAwKSB7Ci0JICAgIGVycnBrdCgoQ0hBUiAqKXNyaW1zZyk7Ci0JICAgIFJFU1VNRTsKLQkg ICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgfSBlbHNlIHsKLQlpcGt0YWNrWzBdID0gTlVMOwotI2Vu ZGlmIC8qIFBLVFpFUk9IQUNLICovCi0JdXJzZXJ2ZXIgPSAxOwotI2lmbmRlZiBOT1NFUlZFUgot I2lmbmRlZiBOT1NQTAotCWlmIChxdWVyeSkgewkJCS8qIElmIHRvIHF1ZXJ5LCAqLwotCSAgICBx YnVmcCA9IHF1ZXJ5YnVmOwkJLyogIGluaXRpYWxpemUgcXVlcnkgcmVzcG9uc2UgYnVmZmVyICov Ci0JICAgIHFidWZuID0gMDsKLQkgICAgcXVlcnlidWZbMF0gPSBOVUw7Ci0JfQotI2VuZGlmIC8q IE5PU1BMICovCi0JeCA9IDE7Ci0JaWYgKHJlbWZpbGUpIHsJCQkvKiBSZXNwb25zZSByZWRpcmVj dGVkIHRvIGZpbGUgKi8KLQkgICAgcmZfZXJyID0gIkNhbid0IG9wZW4gZmlsZSI7Ci0JICAgIGlm IChyZW1waXBlKQkJLyogb3IgcGlwZSAqLwotCSAgICAgIHggPQotI2lmbmRlZiBOT1BVU0gKLQkJ enhjbWQoWk9GSUxFLHJlbWRlc3QpCS8qIFBpcGU6IFN0YXJ0IGNvbW1hbmQgKi8KLSNlbHNlCi0J CTAKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQkJOwotCSAgICBlbHNlCi0JICAgICAgeCA9IG9wZW5h KHJlbWRlc3QsJmlhdHRyKTsgLyogRmlsZTogT3BlbiB3aXRoIGF0dHJpYnV0ZXMgKi8KLQkgICAg ZGVidWcoRjExMSwicmN2X3Nob3J0cmVwbHkgcmVtZmlsZSIscmVtZGVzdCx4KTsKLQl9IGVsc2Ug ewotCSAgICB4ID0gb3BlbnQoJmlhdHRyKTsJCS8qICJvcGVuIiB0aGUgc2NyZWVuICovCi0JfQot CWlmICh4KSB7CQkJLyogSWYgZmlsZSB3YXMgb3BlbmVkIG9rICovCi0JICAgIGlmIChkZWNvZGUo cmRhdGFwLAotI2lmbmRlZiBOT1NQTAotCQkgICAgICAgKHF1ZXJ5IHx8ICFyZW1maWxlKSA/IHB1 dHRybSA6Ci0jZWxzZQotCQkgICAgICAgIXJlbWZpbGUgPyBwdXR0cm0gOgotI2VuZGlmIC8qIE5P U1BMICovCi0JCSAgICAgICB6cHV0ZmlsLCAxKSA8IDApIHsgLyogTm90ZTogenB1dGZpbCwgbm90 IHB1dGZpbC4gKi8KLQkJZXJycGt0KChDSEFSICopIkVycm9yIHdyaXRpbmcgZGF0YSIpOwotCQlS RVNVTUU7Ci0JCXJldHVybigtMSk7Ci0JICAgIH0gZWxzZSB7Ci0JCWlmIChyZGF0YXApCQkvKiBJ ZiB3ZSBoYWQgZGF0YSAqLwotCQkgIGlmICgqcmRhdGFwKQkJLyogYWRkIGEgbGluZSB0ZXJtaW5h dG9yICovCi0JCSAgICBpZiAocmVtZmlsZSkgewkvKiB0byBmaWxlICovCi0JCQl6c291dGwoWk9G SUxFLCIiKTsKLQkJICAgIH0gZWxzZSB7CQkvKiBvciB0byBzY3JlZW4uICovCi0jaWZuZGVmIE5P SUNQCi0JCQlpZiAoIXF1ZXJ5IHx8ICF4Y21kc3JjKQotI2VuZGlmIC8qIE5PSUNQICovCi0JCQkg IGlmICghKHF1aWV0ICYmIHJjZGFjdGl2ZSkpCi0JCQkgICAgY29ub2xsKCIiKTsKLQkJICAgIH0K LQkJaWYgKGJ5ZV9hY3RpdmUgJiYgbmV0d29yaykgeyAvKiBJIHNlbnQgQllFIG9yIFJFTU9URSBM T0dPVVQgKi8KLQkJICAgIG1zbGVlcCg1MDApOwkvKiBjb21tYW5kIGFuZCBnb3QgdGhlIEFDSy4u LiAqLwotCQkgICAgYnllX2FjdGl2ZSA9IDA7Ci0JCSAgICB0dGNsb3MoMCk7Ci0JCX0KLQkJY2xz b2YoMCk7Ci0JCWlmICghZXBrdHNlbnQgJiYgIWVwa3RyY3ZkKSAvKiBJZiBubyBlcnJvciBwYWNr ZXQuLi4gKi8KLQkJICBzdWNjZXNzID0gMTsJCS8qIHN1Y2Nlc3MuICovCi0JCVJFU1VNRTsKLQkJ cmV0dXJuKC0xKTsKLQkgICAgfQotCX0gZWxzZSB7CQkJLyogRmlsZSBub3Qgb3BlbmVkIE9LICov Ci0JICAgIGVycnBrdCgoQ0hBUiAqKSByZl9lcnIpOwkvKiBzZW5kIGVycm9yIG1lc3NhZ2UgKi8K LQkgICAgUkVTVU1FOwkJCS8qIGFuZCBxdWl0LiAqLwotCSAgICByZXR1cm4oLTEpOwotCX0KLSNl bmRpZiAvKiBOT1NFUlZFUiAqLwotI2lmZGVmIFBLVFpFUk9IQUNLCi0gICAgfQotI2VuZGlmIC8q IFBLVFpFUk9IQUNLICovCi0gICAgZGVidWcoRjEwMSwicmN2X3Nob3J0cmVwbHkgZmFsbHRocnUi LCIiLHN1Y2Nlc3MpOwotICAgIHJldHVybigtMSk7Ci19Ci0KLQotc3RhdGljIGludAotc3J2X3F1 ZXJ5KCkgewotI2lmbmRlZiBOT1NFUlZFUgotI2lmbmRlZiBOT1NQTAotICAgIGNoYXIgYzsKLSNp ZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2lu ZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBRVUVSWSIs IChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotI2lmZGVmIElLU0RCCi0g ICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIFFVRVJZIiwgKGNoYXIgKiko c3J2Y21kKzIpLCAiIik7Ci0jZW5kaWYgLyogSUtTREIgKi8KLSAgICBjID0gKihzcnZjbWQrMik7 CQkJLyogUSA9IFF1ZXJ5LCBTID0gU2V0ICovCi0gICAgaWYgKGMgPT0gJ1EnKSB7CQkJLyogUXVl cnkgKi8KLQlpZiAoIUVOQUJMRUQoZW5fcXVlKSkgeyAvKiBTZWN1cml0eSAqLwotCSAgICBlcnJw a3QoKENIQVIgKikiUkVNT1RFIFFVRVJZIGRpc2FibGVkIik7Ci0JICAgIFJFU1VNRTsKLQkgICAg cmV0dXJuKC0xKTsKLQl9IGVsc2UgewkJCS8qIFF1ZXJ5IGFsbG93ZWQgKi8KLQkgICAgaW50IG47 IGNoYXIgKnAsICpxOwotCSAgICBxYnVmcCA9IHF1ZXJ5YnVmOwkJLyogV2lwZSBvdXQgb2xkIHN0 dWZmICovCi0JICAgIHFidWZuID0gMDsKLQkgICAgcXVlcnlidWZbMF0gPSBOVUw7Ci0JICAgIHAg PSAoY2hhciAqKSBzcnZjbWQgKyAzOwkvKiBQb2ludGVyIGZvciBtYWtpbmcgd3JhcHBlciAqLwot CSAgICBuID0gc3RybGVuKChjaGFyICopc3J2Y21kKTsJLyogUG9zaXRpb24gb2YgZW5kICovCi0J ICAgIGMgPSAqKHNydmNtZCs0KTsJCS8qIFdoaWNoIHR5cGUgb2YgdmFyaWFibGUgKi8KLQotCSAg ICBpZiAoKihzcnZjbWQrNikgPT0gQ01EUSkgewkvKiBTdGFydHMgd2l0aCBjb21tYW5kIHF1b3Rl PyAqLwotCQlwID0gKGNoYXIgKikgc3J2Y21kICsgNjsgLyogVGFrZSBpdCBsaXRlcmFsbHkgKi8K LQkJaWYgKCpwID09IENNRFEpIHArKzsKLQkgICAgfSBlbHNlIHsJCQkvKiBUaGV5IHBsYXllZCBi eSB0aGUgcnVsZXMgKi8KLQkJaWYgKGMgPT0gJ0snKSB7CQkvKiBLZXJtaXQgdmFyaWFibGUgKi8K LQkJICAgIGludCBrOwotCQkgICAgayA9IChpbnQpIHN0cmxlbihwKTsKLQkJICAgIGlmIChrID4g MCAmJiBwW2stMV0gPT0gJyknKSB7Ci0JCQlwID0gKGNoYXIgKikoc3J2Y21kICsgNCk7Ci0JCQkq KHNydmNtZCs0KSA9IENNRFE7Ci0JCQkqKHNydmNtZCs1KSA9ICdmJzsgLyogRnVuY3Rpb24sIHNv IG1ha2UgaXQgXGYuLi4oKSAqLwotCQkgICAgfSBlbHNlIHsKLQkJCSooc3J2Y21kKzMpID0gQ01E UTsgLyogU3R1ZmYgd3JhcHBpbmcgaW50byBidWZmZXIgKi8KLQkJCSooc3J2Y21kKzQpID0gJ3Yn OyAgLyogVmFyaWFibGUsIHNvIG1ha2UgaXQgXHYoLi4uKSAqLwotCQkJKihzcnZjbWQrNSkgPSAn KCc7ICAvKiBhcm91bmQgdmFyaWFibGUgbmFtZSAqLwotCQkJKihzcnZjbWQrbikgPSAnKSc7Ci0J CQkqKHNydmNtZCtuKzEpID0gTlVMOwotCQkgICAgfQotCQl9IGVsc2UgewotCQkgICAgKihzcnZj bWQrMykgPSBDTURROyAvKiBTdHVmZiB3cmFwcGluZyBpbnRvIGJ1ZmZlciAqLwotCQkgICAgKihz cnZjbWQrNCkgPSAndic7IC8qICBWYXJpYWJsZSwgc28gbWFrZSBpdCBcdiguLi4pICovCi0JCSAg ICAqKHNydmNtZCs1KSA9ICcoJzsJLyogYXJvdW5kIHZhcmlhYmxlIG5hbWUgKi8KLQkJICAgICoo c3J2Y21kK24pID0gJyknOwotCQkgICAgKihzcnZjbWQrbisxKSA9IE5VTDsKLQkJICAgIGlmIChj ID09ICdTJykgewkvKiBTeXN0ZW0gdmFyaWFibGUgKi8KLQkJCSooc3J2Y21kKzQpID0gJyQnOyAv KiAgc28gaXQncyBcJCguLi4pICovCi0JCSAgICB9IGVsc2UgaWYgKGMgPT0gJ0cnKSB7IC8qIE5v bi1cIEdsb2JhbCB2YXJpYWJsZSAqLwotCQkJKihzcnZjbWQrNCkgPSAnbSc7IC8qICBzbyB3cmFw IGl0IGluIFxtKC4uLikgKi8KLQkJICAgIH0KLQkJfQotCSAgICB9CQkJCS8qIE5vdyBldmFsdWF0 ZSBpdCAqLwotCSAgICBuID0gUUJVRkw7CQkJLyogTWF4IGxlbmd0aCAqLwotCSAgICBxID0gcXVl cnlidWY7CQkvKiBXaGVyZSB0byBwdXQgaXQgKi8KLQkgICAgaWYgKHp6c3RyaW5nKHAsJnEsJm4p IDwgMCkgewotCQllcnJwa3QoKG4gPiAwKSA/IChDSEFSICopIkNhbid0IGdldCB2YWx1ZSIKLQkJ ICAgICAgICAgICAgICAgOiAoQ0hBUiAqKSJWYWx1ZSB0b28gbG9uZyIKLQkJICAgICAgICk7Ci0J CVJFU1VNRTsKLQkJcmV0dXJuKC0xKTsKLQkgICAgfSBlbHNlIHsKLQkJaWYgKGVuY3N0cigoQ0hB UiAqKXF1ZXJ5YnVmKSA+IC0xKSB7IC8qIEVuY29kZSBpdCAqLwotCQkgICAgYWNrMShkYXRhKTsJ CS8qIElmIGl0IGZpdHMsIHNlbmQgaXQgYmFjayBpbiBBQ0sgKi8KLQkJICAgIHN1Y2Nlc3MgPSAx OwotCQkgICAgUkVTVU1FOwotCQkgICAgcmV0dXJuKC0xKTsKLQkJfSBlbHNlIGlmIChzbmRzdHJp bmcocXVlcnlidWYpKSB7IC8qIExvbmcgZm9ybSByZXNwb25zZSAqLwotCQkgICAgQkVHSU4gc3Np bml0OwotCQkgICAgcmV0dXJuKC0xKTsKLQkJfSBlbHNlIHsJCS8qIHNuZGhscCgpIGZhaWxzICov Ci0JCSAgICBlcnJwa3QoKENIQVIgKikiQ2FuJ3Qgc2VuZCB2YWx1ZSIpOwotCQkgICAgUkVTVU1F OwotCQkgICAgcmV0dXJuKC0xKTsKLQkJfQotCSAgICB9Ci0JfQotICAgIH0gZWxzZSBpZiAoYyA9 PSAnUycpIHsJCS8qIFNldCAoYXNzaWduKSAqLwotCWlmICghRU5BQkxFRChlbl9hc2cpKSB7CQkv KiBTZWN1cml0eSAqLwotCSAgICBlcnJwa3QoKENIQVIgKikiUkVNT1RFIEFTU0lHTiBkaXNhYmxl ZCIpOwotCSAgICBSRVNVTUU7Ci0JICAgIHJldHVybigtMSk7Ci0JfSBlbHNlIHsJCQkvKiBPSyAq LwotCSAgICBpbnQgbjsKLQkgICAgbiA9IHh1bmNoYXIoKihzcnZjbWQrMykpOwkvKiBMZW5ndGgg b2YgbmFtZSAqLwotCSAgICBuID0gMyArIG4gKyAxOwkJLyogUG9zaXRpb24gb2YgbGVuZ3RoIG9m IHZhbHVlICovCi0JICAgICooc3J2Y21kK24pID0gTlVMOwkJLyogRG9uJ3QgbmVlZCBpdCAqLwot CSAgICBpZiAoYWRkbWFjKChjaGFyICopKHNydmNtZCs0KSwoY2hhciAqKShzcnZjbWQrbisxKSkg PCAwKQotCSAgICAgIGVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgQVNTSUdOIGZhaWxlZCIpOwotCSAg ICBlbHNlIHsKLQkJYWNrKCk7Ci0JCXN1Y2Nlc3MgPSAxOwotCSAgICB9Ci0JICAgIFJFU1VNRTsK LQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgfSBlbHNlIHsKLQllcnJwa3QoKENIQVIgKikiQmFk bHkgZm9ybWVkIHNlcnZlciBjb21tYW5kIik7Ci0JUkVTVU1FOwotCXJldHVybigtMSk7Ci0gICAg fQotI2Vsc2UKLSAgICBlcnJwa3QoKENIQVIgKikiVmFyaWFibGUgcXVlcnkvc2V0IG5vdCBhdmFp bGFibGUiKTsKLSAgICBSRVNVTUU7Ci0gICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBOT1NQTCAq LwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLXN0YXRpYyBpbnQKLXNydl9jb3B5KCkgewot I2lmbmRlZiBOT1NFUlZFUgotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+PSBT WVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2 ZXIiLCAiUkVNT1RFIENPUFkiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cg Ki8KLSNpZmRlZiBaQ09QWQotICAgIGlmICghRU5BQkxFRChlbl9jcHkpKSB7Ci0JZXJycGt0KChD SEFSICopIlJFTU9URSBDT1BZIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotCXJldHVybigtMSk7Ci0g ICAgfSBlbHNlIHsKLQljaGFyICpzdHIxLCAqc3RyMiwgZjFbMjU2XSwgZjJbMjU2XTsKLQlpbnQg IGxlbjEsIGxlbjI7Ci0gICAgICAgIGxlbjEgPSB4dW5jaGFyKHNydmNtZFsxXSk7CS8qIFNlcGFy YXRlIHRoZSBwYXJhbWV0ZXJzICovCi0gICAgICAgIGxlbjIgPSB4dW5jaGFyKHNydmNtZFsyK2xl bjFdKTsKLSAgICAgICAgc3RybmNweShmMSwoY2hhciAqKShzcnZjbWQrMiksbGVuMSk7Ci0gICAg ICAgIGYxW2xlbjFdID0gTlVMOwotICAgICAgICBzdHJuY3B5KGYyLChjaGFyICopKHNydmNtZCsz K2xlbjEpLGxlbjIpOwotICAgICAgICBmMltsZW4yXSA9IE5VTDsKLSNpZmRlZiBJS1NEQgotCWlm IChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBDT1BZIiwgZjEsIGYyKTsKLSNlbmRp ZiAvKiBJS1NEQiAqLwotCWlmICghRU5BQkxFRChlbl9jd2QpKSB7CQkvKiBJZiBDV0QgaXMgZGlz YWJsZWQgKi8KLQkgICAgenN0cmlwKGYxLCZzdHIxKTsJCS8qIGFuZCB0aGV5IGluY2x1ZGVkIGEg cGF0aG5hbWUsICovCi0gICAgICAgICAgICB6c3RyaXAoZjIsJnN0cjIpOwotCSAgICBpZiAoc3Ry Y21wKGYxLHN0cjEpIHx8IHN0cmNtcChmMixzdHIyKSkgeyAvKiBSZWZ1c2UuICovCi0JCWVycnBr dCgoQ0hBUiAqKSJBY2Nlc3MgZGVuaWVkIik7Ci0JCVJFU1VNRTsJCQkvKiBSZW1lbWJlciwgdGhp cyBpcyBub3QgYSBnb3RvISAqLwotCQlyZXR1cm4oLTEpOwotCSAgICB9Ci0JfQotCWlmIChzdGF0 ZSA9PSBnZW5lcmljKSB7CQkvKiBJdCdzIE9LIHRvIGdvIGFoZWFkLiAqLwotICAgICAgICAgICAg aWYgKHpjb3B5KGYxLGYyKSkgewkJLyogVHJ5ICovCi0JCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBj b3B5IGZpbGUiKTsgLyogZ2l2ZSBlcnJvciBtZXNzYWdlICovCi0JICAgIH0gZWxzZSB7Ci0JCXN1 Y2Nlc3MgPSAxOwotCQlhY2soKTsKLQkgICAgfQotICAgICAgICAgICAgUkVTVU1FOwkJCS8qIHdh aXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAg fQotICAgIHJldHVybigtMSk7Ci0jZWxzZSAvKiBubyBaQ09QWSAqLwotICAgIGVycnBrdCgoQ0hB UiAqKSJSRU1PVEUgQ09QWSBub3QgYXZhaWxhYmxlIik7IC8qIGdpdmUgZXJyb3IgbWVzc2FnZSAq LwotICAgIFJFU1VNRTsJCQkJLyogd2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLwotICAg IHJldHVybigtMSk7Ci0jZW5kaWYgLyogWkNPUFkgKi8KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwot fQotCi1zdGF0aWMgaW50Ci1zcnZfcmVuYW1lKCkgewotI2lmbmRlZiBOT1NFUlZFUgotI2lmZGVm IENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQot ICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFJFTkFNRSIsIChj aGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotI2lmZGVmIFpSRU5BTUUKLSAg ICBpZiAoIUVOQUJMRUQoZW5fcmVuKSkgewotCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgUkVOQU1F IGRpc2FibGVkIik7Ci0JUkVTVU1FOwotCXJldHVybigtMSk7Ci0gICAgfSBlbHNlIHsJCQkJLyog UkVOQU1FIGlzIGVuYWJsZWQgKi8KLQljaGFyICpzdHIxLCAqc3RyMiwgZjFbMjU2XSwgZjJbMjU2 XTsKLQlpbnQgbGVuMSwgbGVuMjsKLQlsZW4xID0geHVuY2hhcihzcnZjbWRbMV0pOwkvKiBTZXBh cmF0ZSB0aGUgcGFyYW1ldGVycyAqLwotCWxlbjIgPSB4dW5jaGFyKHNydmNtZFsyK2xlbjFdKTsK LQlzdHJuY3B5KGYxLChjaGFyICopKHNydmNtZCsyKSxsZW4xKTsKLQlmMVtsZW4xXSA9IE5VTDsK LQlzdHJuY3B5KGYyLChjaGFyICopKHNydmNtZCszK2xlbjEpLGxlbjIpOwotCWYyW2xlbjJdID0g TlVMOwotCWxlbjIgPSB4dW5jaGFyKHNydmNtZFsyK2xlbjFdKTsKLQlzdHJuY3B5KGYxLChjaGFy ICopKHNydmNtZCsyKSxsZW4xKTsKLQlmMVtsZW4xXSA9IE5VTDsKLQlzdHJuY3B5KGYyLChjaGFy ICopKHNydmNtZCszK2xlbjEpLGxlbjIpOwotCWYyW2xlbjJdID0gTlVMOwotI2lmZGVmIElLU0RC Ci0JaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIFJFTkFNRSIsIGYxLCBmMik7 Ci0jZW5kaWYgLyogSUtTREIgKi8KLQlpZiAoIUVOQUJMRUQoZW5fY3dkKSkgewkJLyogSWYgQ1dE IGlzIGRpc2FibGVkICovCi0JICAgIHpzdHJpcChmMSwmc3RyMSk7CQkvKiBhbmQgdGhleSBpbmNs dWRlZCBhIHBhdGhuYW1lLCAqLwotCSAgICB6c3RyaXAoZjIsJnN0cjIpOwotCSAgICBpZiAoIHN0 cmNtcChmMSxzdHIxKSB8fCBzdHJjbXAoZjIsc3RyMikgKSB7IC8qIHJlZnVzZS4gKi8KLQkJZXJy cGt0KChDSEFSICopIkFjY2VzcyBkZW5pZWQiKTsKLQkJUkVTVU1FOwkJCS8qIFJlbWVtYmVyLCB0 aGlzIGlzIG5vdCBhIGdvdG8hICovCi0JCXJldHVybigtMSk7Ci0JICAgIH0KLQl9Ci0JaWYgKHN0 YXRlID09IGdlbmVyaWMpIHsJCS8qIEl0J3MgT0sgdG8gZ28gYWhlYWQuICovCi0JICAgIGlmICh6 cmVuYW1lKGYxLGYyKSkgewkvKiBUcnkgKi8KLQkJZXJycGt0KChDSEFSICopIkNhbid0IHJlbmFt ZSBmaWxlIik7IC8qIEdpdmUgZXJyb3IgbXNnICovCi0JICAgIH0gZWxzZSB7Ci0JCXN1Y2Nlc3Mg PSAxOwotCQlhY2soKTsKLQkgICAgfQotCSAgICBSRVNVTUU7CQkJLyogV2FpdCBmb3IgbmV4dCBz ZXJ2ZXIgY29tbWFuZCAqLwotCSAgICByZXR1cm4oLTEpOwotCX0KLSAgICB9Ci0gICAgcmV0dXJu KC0xKTsKLSNlbHNlIC8qIG5vIFpSRU5BTUUgKi8KLSAgICAvKiBHaXZlIGVycm9yIG1lc3NhZ2Ug Ki8KLSAgICBlcnJwa3QoKENIQVIgKikiUkVNT1RFIFJFTkFNRSBub3QgYXZhaWxhYmxlIik7Ci0g ICAgUkVTVU1FOwkJCQkvKiBXYWl0IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICovCi0gICAgcmV0 dXJuKC0xKTsKLSNlbmRpZiAvKiBaUkVOQU1FICovCi0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0K LQotc3RhdGljIGludAotc3J2X2xvZ2luKCkgewotI2lmbmRlZiBOT1NFUlZFUgotICAgIGNoYXIg ZjFbTE9HSU5MRU4rMV0sIGYyW0xPR0lOTEVOKzFdLCBmM1tMT0dJTkxFTisxXTsKLSAgICBDSEFS ICpwOwotICAgIGludCBsZW4sIGk7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HSU4geF9s b2dpbiIsIiIseF9sb2dpbik7Ci0gICAgZGVidWcoRjEwMSwiUkVNT1RFIExPR0lOIHhfbG9nZ2Vk IiwiIix4X2xvZ2dlZCk7Ci0KLSAgICBmMVswXSA9IE5VTDsgZjJbMF0gPSBOVUw7IGYzWzBdID0g TlVMOwotICAgIGxlbiA9IDA7Ci0gICAgaWYgKHNydmNtZFsxXSkJCQkvKiBGaXJzdCBsZW5ndGgg ZmllbGQgKi8KLSAgICAgIGxlbiA9IHh1bmNoYXIoc3J2Y21kWzFdKTsJCS8qIFNlcGFyYXRlIHRo ZSBwYXJhbWV0ZXJzICovCi0KLSAgICBpZiAoeF9sb2dpbikgewkJCS8qIExvZ2luIHJlcXVpcmVk ICovCi0JaWYgKHhfbG9nZ2VkKSB7CQkJLyogQW5kIGFscmVhZHkgbG9nZ2VkIGluICovCi0JICAg IGlmIChsZW4gPiAwKSB7CQkvKiBMb2dnaW5nIGluIGFnYWluICovCi0JCWVycnBrdCgoQ0hBUiAq KSJBbHJlYWR5IGxvZ2dlZCBpbi4iKTsKLQkgICAgfSBlbHNlIHsJCQkvKiBMb2dnaW5nIG91dCAq LwotCQlkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HT1VUIiwiIix4X2xvZ2dlZCk7Ci0jaWZkZWYgQ0tT WVNMT0cKLQkJaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotCQkgIGNr c3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBMT0dPVVQiLCBOVUxMKTsKLSNl bmRpZiAvKiBDS1NZU0xPRyAqLwotI2lmZGVmIElLU0RCCi0JCWlmIChpa2Rib3Blbikgc2xvdHN0 YXRlKHdoYXQsIlJFTU9URSBMT0dPVVQiLCAiIiwgIiIpOwotI2VuZGlmIC8qIElLU0RCICovCi0J CXRsb2coRjExMCwiTG9nZ2VkIG91dCIseF91c2VyLDApOwotCQlhY2sxKChDSEFSICopIkxvZ2dl ZCBvdXQiKTsKLQkJc3VjY2VzcyA9IDE7Ci0JCW1zbGVlcCg1MDApOwotI2lmZGVmIENLX0xPR0lO Ci0JCXhfbG9nZ2VkID0gMDsKLSNpZmRlZiBJS1NECi0JCWlmIChpbnNlcnZlcikKLQkJICBja3hs b2dvdXQoKTsKLSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQkgICAg fQotCX0gZWxzZSB7CQkJLyogTm90IGxvZ2dlZCBpbiB5ZXQgKi8KLQkgICAgZGVidWcoRjEwMSwi UkVNT1RFIExPR0lOIGxlbiIsIiIsbGVuKTsKLQkgICAgaWYgKGxlbiA+IDApIHsJCS8qIEhhdmUg dXNlcm5hbWUgKi8KLSNpZmRlZiBDS1NZU0xPRwotCQlpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BS ICYmIGNreGxvZ2dpbmcpCi0JCSAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVN T1RFIExPR0lOIiwgTlVMTCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQkJaWYgKGxlbiA+IExP R0lOTEVOKSB7Ci0JCSAgICBlcnJwa3QoKENIQVIgKikiVXNlcm5hbWUgdG9vIGxvbmciKTsKLQkJ fQotCQlwID0gc3J2Y21kICsgMjsJCS8qIFBvaW50IHRvIGl0ICovCi0JCWZvciAoaSA9IDA7IGkg PCBsZW47IGkrKykgLyogQ29weSBpdCAqLwotCQkgIGYxW2ldID0gcFtpXTsKLQkJZjFbbGVuXSA9 IE5VTDsJCS8qIFRlcm1pbmF0ZSBpdCAqLwotCQlwICs9IGxlbjsJCS8qIFBvaW50IHRvIG5leHQg bGVuZ3RoIGZpZWxkICovCi0JCWlmICgqcCkgewkJLyogSWYgd2UgaGF2ZSBvbmUgKi8KLQkJICAg IGxlbiA9IHh1bmNoYXIoKnArKyk7IC8qIGRlY29kZSBpdCAqLwotCQkgICAgaWYgKGxlbiA+IDAg JiYgbGVuIDw9IExPR0lOTEVOKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIC8qIFNh bWUgZGVhbCBmb3IgcGFzc3dvcmQgKi8KLQkJCSAgZjJbaV0gPSBwW2ldOwotCQkJZjJbbGVuXSA9 IE5VTDsKLQkJCXAgKz0gbGVuOwkvKiBBbmQgYWNjb3VudCAqLwotCQkJaWYgKCpwKSB7Ci0JCQkg ICAgbGVuID0geHVuY2hhcigqcCsrKTsKLQkJCSAgICBpZiAobGVuID4gMCAmJiBsZW4gPD0gTE9H SU5MRU4pIHsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCQkJICBmM1tpXSA9IHBb aV07CS8qIFNldCBidXQgbmV2ZXIgdXNlZCAqLwotCQkJCWYzW2xlbl0gPSBOVUw7IC8qIChiZWNh dXNlIGFjY291bnQgbm90IHVzZWQpICovCi0JCQkgICAgfQotCQkJfQotCQkgICAgfQotCQl9Ci0J CWRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiAxIiwiIix4X2xvZ2dlZCk7Ci0jaWZkZWYgSUtTRAot I2lmZGVmIENLX0xPR0lOCi0JCWlmIChpbnNlcnZlcikgewkJLyogTG9nIGluIHRvIHN5c3RlbSBm b3IgcmVhbCAqLwotCQkgICAgeF9sb2dnZWQgPSBja3hsb2dpbigoQ0hBUiAqKWYxLChDSEFSICop ZjIsTlVMTCwwKTsKLQkJICAgIGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiAyIiwiIix4X2xvZ2dl ZCk7Ci0JCSAgICBpZiAoeF9sb2dnZWQpIHsJLyogQ291bnQgYXR0ZW1wdHMgKi8KLQkJCWxvZ3Ry aWVzID0gMDsKLQkJCWp1c3RvbmUgPSAxOwotCQkgICAgfSBlbHNlIHsKLQkJCWxvZ3RyaWVzKys7 Ci0JCQlzbGVlcChsb2d0cmllcyk7Ci0JCSAgICB9Ci0JCX0gZWxzZQotI2VuZGlmIC8qIENLX0xP R0lOICovCi0jZW5kaWYgLyogSUtTRCAqLwotCQkgIGlmICh4X3VzZXIgJiYgeF9wYXNzd2QpIHsg LyogVXNlciBhbmQgcGFzc3dvcmQgbXVzdCBtYXRjaCAqLwotCQkgICAgICBpZiAoIXN0cmNtcCh4 X3VzZXIsZjEpKSAvKiBTRVQgU0VSVkVSIExPR0lOICovCi0JCQlpZiAoIXN0cmNtcCh4X3Bhc3N3 ZCxmMikpCi0JCQkgIHhfbG9nZ2VkID0gMTsKLQkJICAgICAgZGVidWcoRjEwMSwiUkVNT1RFIExP R0lOIDMiLCIiLHhfbG9nZ2VkKTsKLQkJICB9IGVsc2UgaWYgKHhfdXNlcikgewkvKiBPbmx5IHVz ZXJuYW1lIGdpdmVuLCBubyBwYXNzd29yZCAqLwotCQkgICAgICBpZiAoIXN0cmNtcCh4X3VzZXIs ZjEpKSAvKiBzbyBvbmx5IHVzZXJuYW1lIG11c3QgbWF0Y2ggKi8KLQkJCXhfbG9nZ2VkID0gMTsK LQkJICAgICAgZGVidWcoRjEwMSwiUkVNT1RFIExPR0lOIDQiLCIiLHhfbG9nZ2VkKTsKLQkJICB9 Ci0jaWZkZWYgQ0tfTE9HSU4gCi0gICAgICAgICAgICAgICAgZWxzZSB7Ci0JCSAgICB4X2xvZ2dl ZCA9IGNreGxvZ2luKChDSEFSICopZjEsKENIQVIgKilmMixOVUxMLDApOwotCQkgICAgZGVidWco RjEwMSwiUkVNT1RFIExPR0lOIDUiLCIiLHhfbG9nZ2VkKTsKLSAgICAgICAgICAgICAgICB9Ci0j ZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQkJaWYgKHhfbG9nZ2VkKSB7CQkvKiBMb2dnZWQgaW4/ICov Ci0JCSAgICB0bG9nKEYxMTAsIkxvZ2dlZCBpbiIsIHhfdXNlciwgMCk7Ci0JCSAgICBpZiAoaXNn dWVzdCkKLQkJICAgICAgYWNrMSgoQ0hBUiAqKSJMb2dnZWQgaW4gYXMgZ3Vlc3QgLSByZXN0cmlj dGlvbnMgYXBwbHkiKTsKLQkJICAgIGVsc2UKLQkJICAgICAgYWNrMSgoQ0hBUiAqKSJMb2dnZWQg aW4iKTsKLQkJICAgIHN1Y2Nlc3MgPSAxOwotCQl9IGVsc2UgewotCQkgICAgdGxvZyhGMTEwLCJM b2dpbiBmYWlsZWQiLCBmMSwgMCk7Ci0JCSAgICBlcnJwa3QoKENIQVIgKikiQWNjZXNzIGRlbmll ZC4iKTsKLSNpZmRlZiBJS1NECi0jaWZkZWYgQ0tfTE9HSU4KLQkJICAgIGlmIChpbnNlcnZlciAm JiBsb2d0cmllcyA+IDIpCi0JCSAgICAgIGNreGxvZ291dCgpOwotI2VuZGlmIC8qIENLX0xPR0lO ICovCi0jZW5kaWYgLyogSUtTRCAqLwotCQl9Ci0JICAgIH0gZWxzZSB7CQkJLyogTE9HT1VUICov Ci0JCWVycnBrdCgoQ0hBUiAqKSJMb2dvdXQgaWdub3JlZCIpOwotCSAgICB9Ci0JfQotICAgIH0g ZWxzZSB7CQkJCS8qIExvZ2luIG5vdCByZXF1aXJlZCAqLwotCWlmIChsZW4gPiAwKQotCSAgZXJy cGt0KChDSEFSICopIkxvZ2luIGlnbm9yZWQuIik7Ci0JZWxzZQotCSAgZXJycGt0KChDSEFSICop IkxvZ291dCBpZ25vcmVkLiIpOwotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotICAgIFJF U1VNRTsKLSAgICByZXR1cm4oLTEpOwotfQotCi1zdGF0aWMgaW50Ci1zcnZfdGltZW91dCgpIHsK LSAgICAvKiBLOTUgZG9lcyB0aGlzIGl0cyBvd24gd2F5ICovCi0gICAgaWYgKGlkbGV0bW8pIHsK LSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICBwcmludGYo IlxyXG5JS1NEIElETEUgVElNRU9VVDogJWQgc2VjXHJcbiIsIHNydmlkbCk7Ci0gICAgICAgICAg IGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8K LQlpZGxldG1vID0gMDsKLQlwcmludGYoIlxyXG5TRVJWRVIgSURMRSBUSU1FT1VUOiAlZCBzZWNc clxuIiwgc3J2aWRsKTsKLQl4aXRzdGEgfD0gKHdoYXQgJiBXX0tFUk1JVCk7Ci0JUVVJVDsKLSAg ICB9Ci0jaWZuZGVmIE5PU0VSVkVSCi0gICAgZWxzZSBpZiAoZmF0YWxpbykgewkJCS8qIENvbm5l Y3Rpb24gbG9zdCAqLwotI2lmZGVmIENLU1lTTE9HCi0JICBpZiAoY2t4c3lzbG9nID49IFNZU0xH X1BSICYmIGNreGxvZ2dpbmcpCi0JICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwg IkNvbm5lY3Rpb24gbG9zdCIsIE5VTEwpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jaWZkZWYg SUtTREIKLQkgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlNFUlZFUiBESVNDT05ORUNU IiwoY2hhciAqKXNydmNtZCwgIiIpOwotI2VuZGlmIC8qIElLU0RCICovCi0JeGl0c3RhIHw9IHdo YXQ7Ci0JUVVJVDsKLSAgICB9IGVsc2UgaWYgKGludGVycnVwdGVkKSB7CQkvKiBJbnRlcnJ1cHRl ZCBieSBoYW5kICovCi0JaWYgKCFFTkFCTEVEKGVuX2ZpbikpIHsKLQkgICAgZXJycGt0KChDSEFS ICopIlFVSVQgZGlzYWJsZWQiKTsKLQkgICAgUkVTVU1FOwotCSAgICByZXR1cm4oLTEpOwotCX0g ZWxzZSB7Ci0JICAgIGlmICh3aGF0ID09IFdfU0VORCB8fCB3aGF0ID09IFdfUkVDViB8fCB3aGF0 ID09IFdfUkVNTykgewotCQlzdWNjZXNzID0gMDsKLSNpZmRlZiBDS1NZU0xPRwotCQlpZiAoY2t4 c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0JCSAgY2tzeXNsb2coU1lTTEdfUFIs IDEsICJzZXJ2ZXIiLCAiSW50ZXJydXB0ZWQiLCBOVUxMKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAq LwotCSAgICB9IGVsc2UgaWYgKHdoYXQgPT0gV19OT1RISU5HICYmIGZpbGNudCA9PSAwKSB7Ci0J CXN1Y2Nlc3MgPSAxOwotCSAgICB9IC8qIE90aGVyd2lzZSBsZWF2ZSBzdWNjZXNzIGFsb25lICov Ci0JICAgIHhpdHN0YSB8PSAod2hhdCAmIFdfS0VSTUlUKTsKLQkgICAgUVVJVDsKLQl9Ci0gICAg fSBlbHNlIHsJCQkJLyogU2hvdWxkbid0IGhhcHBlbiAqLwotCWRlYnVnKEYxMDAsIlNFUlZFUiAo dG9wKSBHT1QgVU5FWFBFQ1RFRCAncSciLCIiLDApOwotCVFVSVQ7Ci0gICAgfQotI2VuZGlmIC8q IE5PU0VSVkVSICovCi19Ci0KLXN0YXRpYyBpbnQKLXJjdl9zX3BrdCgpIHsKLSNpZm5kZWYgTk9T RVJWRVIKLSAgICBpZiAoc3RhdGUgPT0gcmdlbikKLSAgICAgIHVyc2VydmVyID0gMTsKLSAgICBp ZiAoLyogc3RhdGUgPT0gc2VydmUgJiYgKi8geF9sb2dpbiAmJiAheF9sb2dnZWQpIHsKLQllcnJw a3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsKLQlTRVJWRTsKLSAgICB9IGVsc2UKLSNlbmRp ZiAvKiBOT1NFUlZFUiAqLwotICAgICAgaWYgKHN0YXRlID09IHNlcnZlICYmICFFTkFCTEVEKGVu X3NlbikpIHsgLyogTm90IGluIHNlcnZlciBtb2RlICovCi0JZXJycGt0KChDSEFSICopIlNFTkQg ZGlzYWJsZWQiKTsgLyogd2hlbiBTRU5EIGlzIGRpc2FibGVkLiAqLwotCVJFU1VNRTsKLQlyZXR1 cm4oLTEpOwotICAgIH0gZWxzZSB7CQkJCS8qIE9LIHRvIGdvIGFoZWFkLiAqLwotI2lmZGVmIENL X1RNUERJUgotCWlmIChkbGRpciAmJiAhZl90bXBkaXIpIHsJLyogSWYgdGhleSBoYXZlIGEgZG93 bmxvYWQgZGlyZWN0b3J5ICovCi0JICAgIGRlYnVnKEYxMTAsInJlY2VpdmUgZG93bmxvYWQgZGly IixkbGRpciwwKTsKLQkgICAgaWYgKHMgPSB6Z3RkaXIoKSkgewkJLyogR2V0IGN1cnJlbnQgZGly ZWN0b3J5ICovCi0JCWRlYnVnKEYxMTAsInJlY2VpdmUgY3VycmVudCBkaXIiLHMsMCk7Ci0JCWlm ICh6Y2hkaXIoZGxkaXIpKSB7CS8qIENoYW5nZSB0byBkb3dubG9hZCBkaXJlY3RvcnkgKi8KLQkJ ICAgIGRlYnVnKEYxMDAsInJlY2VpdmUgemNoZGlyIG9rIiwiIiwwKTsKLQkJICAgIGNrc3RybmNw eShzYXZkaXIscyxUTVBESVJMRU4pOwotCQkgICAgZl90bXBkaXIgPSAxOwkvKiBSZW1lbWJlciB0 aGF0IHdlIGRpZCB0aGlzICovCi0JCX0gZWxzZQotCQkgIGRlYnVnKEYxMDAsInJlY2VpdmUgemNo ZGlyIGZhaWxlZCIsIiIsMCk7Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0J bmFrc3RhdGUgPSAxOwkJCS8qIENhbiBzZW5kIE5BS3MgZnJvbSBoZXJlLiAqLwotCXJpbml0KHJk YXRhcCk7CQkJLyogU2V0IHBhcmFtZXRlcnMgKi8KLQliY3R1ID0gYmN0cjsJCQkvKiBTd2l0Y2gg dG8gYWdyZWVkLXVwb24gYmxvY2sgY2hlY2sgKi8KLQliY3RsID0gKGJjdHUgPT0gNCkgPyAyIDog YmN0dTsJLyogU2V0IGJsb2NrLWNoZWNrIGxlbmd0aCAqLwotCXdoYXQgPSBXX1JFQ1Y7CQkJLyog UmVtZW1iZXIgd2UncmUgcmVjZWl2aW5nICovCi0JbGFzdHhmZXIgPSBXX1JFQ1Y7Ci0JcmVzZXRj KCk7CQkJLyogUmVzZXQgY291bnRlcnMgKi8KLQlydGltZXIoKTsJCQkvKiBSZXNldCB0aW1lciAq LwotI2lmZGVmIEdGVElNRVIKLQlyZnRpbWVyKCk7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCXN0 cmVhbW9uKCk7Ci0JQkVHSU4gcmZpbGU7CQkJLyogR28gaW50byByZWNlaXZlLWZpbGUgc3RhdGUg Ki8KLSAgICB9Ci0gICAgcmV0dXJuKC0xKTsKLX0KLQotCi0vKiBFTkQgT0YgUk9VVElORVMgTU9W RUQgT1VUIE9GIFNUQVRFIE1BQ0hJTkUgKi8KLQotCi0vKiAgUCBSIE8gVCBPICAtLSAgUHJvdG9j b2wgZW50cnkgZnVuY3Rpb24gICovCi0KLXN0YXRpYyBpbnQgaXNfdG4gPSAwOwkJCS8qIEl0J3Mg YSBUZWxuZXQgY29ubmVjdGlvbiAqLwotCi0jaWZkZWYgQ0tfU1BFRUQKLWludCBmX2N0bHAgPSAw OwkJCQkvKiBDb250cm9sLWNoYXJhY3RlciBwcmVmaXggdGFibGUgKi8KLSNpZmRlZiBDT01NRU5U Ci1zaG9ydCBzX2N0bHBbMjU2XTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogQ0tf U1BFRUQgKi8KLQotLyoKLSAgVGhpcyBpcyBzaW1wbHkgYSB3cmFwcGVyIGZvciB0aGUgcmVhbCBw cm90b2NvbCBmdW5jdGlvbiBqdXN0IGJlbG93LAotICB0aGF0IHNhdmVzIGFueSBpdGVtcyB0aGF0 IG1pZ2h0IGJlIGNoYW5nZWQgYXV0b21hdGljYWxseSBieSBwcm90b2NvbAotICBuZWdvdGlhdGlv bnMgYW5kIHRoZW4gcmVzdG9yZXMgdGhlbSB1cG9uIGV4aXQgZnJvbSBwcm90b2NvbCBtb2RlLgot Ki8KLVZPSUQKLXByb3RvKCkgewotICAgIGV4dGVybiBpbnQgYl9zYXZlLCBmX3NhdmUsIGNfc2F2 ZSwgc3Nfc2F2ZSwgc2xvc3RhcnQsIHJlbGlhYmxlLCB1cmNsZWFyOwotI2lmbmRlZiBOT0NTRVRT Ci0gICAgZXh0ZXJuIGludCBmY2hhcnNldCwgZmNzX3NhdmUsIHRjaGFyc2V0LCB0Y3Nfc2F2ZTsK LSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZmRlZiBQSVBFU0VORAotICAgIGV4dGVybiBpbnQg cGlwZXNlbmQ7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVm IE9TMgotICAgIGV4dGVybiBpbnQgY3Vyc29yZW5hW10sIGN1cnNvcl9zYXZlLCB0ZXJtX2lvOwot ICAgIGV4dGVybiBCWVRFIHZtb2RlOwotICAgIGV4dGVybiBpbnQgZGlzcGxheV9kZW1vOwotICAg IGludCB0ZXJtX2lvX3NhdmU7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAq LwotI2lmZGVmIFROQ09ERQotICAgIGludCBfdV9iaW49MCwgX21lX2JpbiA9IDA7Ci0jaWZkZWYg SUtTX09QVElPTgotICAgIGludCAvKiBfdV9zdGFydD0wLCAqLyBfbWVfc3RhcnQgPSAwOwotI2Vu ZGlmIC8qIElLU19PUFRJT04gKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNpZmRlZiBQQVRURVJO UwotICAgIGludCBwYV9zYXZlOwotICAgIGludCBpOwotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0g ICAgaW50IHNjYW5fc2F2ZTsKLQotI2lmZGVmIFBBVFRFUk5TCi0gICAgcGFfc2F2ZSA9IHBhdHRl cm5zOwotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0gICAgc2Nhbl9zYXZlID0gZmlsZXBlZWs7Ci0K LSAgICBteWpvYiA9IHNzdGF0ZTsKLQotI2lmZGVmIENLX0xPR0lOCi0gICAgaWYgKGlzZ3Vlc3Qp IHsJCQkvKiBJZiB1c2VyIGlzIGFub255bW91cyAqLwotCWVuX3ByaSA9IDA7CQkJLyogZGlzYWJs ZSBwcmludGluZyAqLwotCWVuX21haSA9IDA7CQkJLyogYW5kIGRpc2FibGUgZW1haWwgKi8KLQll bl9kZWwgPSAwOwkJCS8qIGFuZCBmaWxlIGRlbGV0aW9uICovCi0gICAgfQotI2VuZGlmIC8qIENL X0xPR0lOICovCi0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGN1cnNvcl9zYXZl ID0gY3Vyc29yZW5hW3Ztb2RlXTsKLSAgICBjdXJzb3JlbmFbdm1vZGVdID0gMDsKLSAgICB0ZXJt X2lvX3NhdmUgPSB0ZXJtX2lvOwotICAgIHRlcm1faW8gPSAwOwotI2VuZGlmIC8qIE9TMiAqLwot I2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICBiX3NhdmUgPSBiaW5hcnk7CQkJLyogU0VUIEZJTEUg VFlQRSAqLwotICAgIGZfc2F2ZSA9IGZuY252OwkJCS8qIFNFVCBGSUxFIE5BTUVTICovCi0gICAg Y19zYXZlID0gYmN0cjsKLSAgICBwX3NhdmUgPSBmbnNwYXRoOwotICAgIHJfc2F2ZSA9IHJlY3Vy c2l2ZTsKLSAgICBzX3RpbWludCA9IHRpbWludDsKLSAgICBzc19zYXZlID0gc2xvc3RhcnQ7Ci0j aWZuZGVmIE5PQ1NFVFMKLSAgICBmY3Nfc2F2ZSA9IGZjaGFyc2V0OwotICAgIHRjc19zYXZlID0g dGNoYXJzZXQ7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyogRG9u J3QgZG8gdGhpcyBiZWNhdXNlIHRoZW4gdXNlciBjYW4gbmV2ZXIgZmluZCBvdXQgd2hhdCBoYXBw ZW5lZC4gKi8KLSNpZmRlZiBDS19TUEVFRAotICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykK LSAgICAgIHNfY3RscFtpXSA9IGN0bHBbaV07Ci0gICAgZl9jdGxwID0gMTsKLSNlbmRpZiAvKiBD S19TUEVFRCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBpZiAocmVsaWFibGUgPT0gU0VU X09OKQotICAgICAgc2xvc3RhcnQgPSAwOwotICAgIGlzX3RuID0gKCFsb2NhbCAmJiBzc3RlbG5l dCkKLSNpZmRlZiBUTkNPREUKLSAgICAgIHx8IChsb2NhbCAmJiBuZXR3b3JrICYmIHR0bnByb3Rv ID09IE5QX1RFTE5FVCkKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQk7Ci0jaWZkZWYgVE5DT0RFCi0g ICAgaWYgKGlzX3RuKSB7Ci0gICAgICAgIGlmICh0bl9iX3hmZXIgJiYgIShzc3RlbG5ldCB8fCBp bnNlcnZlcikpIHsKLQkgICAgLyogU2F2ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiBUZWxuZXQgQmlu YXJ5ICovCi0JICAgIF91X2JpbiA9IFRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpOwotCSAgICBfbWVf YmluID0gVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpOwotCi0JICAgIC8qIElmIGVpdGhlciBkaXJl Y3Rpb24gaXMgbm90IEJpbmFyeSBhdHRlbXB0IHRvIG5lZ290aWF0ZSBpdCAqLwotCSAgICBpZiAo IV91X2JpbiAmJiBURUxPUFRfVV9NT0RFKFRFTE9QVF9CSU5BUlkpICE9IFROX05HX1JGKSB7Ci0J CXRuX3NvcHQoRE8sVEVMT1BUX0JJTkFSWSk7Ci0JCVRFTE9QVF9VTkFOU1dFUkVEX0RPKFRFTE9Q VF9CSU5BUlkpID0gMTsKLQkgICAgfQotCSAgICBpZiAoIV9tZV9iaW4gJiYgVEVMT1BUX01FX01P REUoVEVMT1BUX0JJTkFSWSkgIT0gVE5fTkdfUkYpIHsKLQkJdG5fc29wdChXSUxMLFRFTE9QVF9C SU5BUlkpOwotCQlURUxPUFRfVU5BTlNXRVJFRF9XSUxMKFRFTE9QVF9CSU5BUlkpID0gMTsKLQkg ICAgfQotCSAgICBpZiAoIShfbWVfYmluICYmIF91X2JpbikpCi0JICAgICAgdG5fd2FpdCgicHJv dG8gc2V0IGJpbmFyeSBtb2RlIik7Ci0gICAgICAgIH0KLSNpZmRlZiBJS1NfT1BUSU9OCi0jaWZk ZWYgQ0tfWFlaCi0gICAgICAgIGlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7CS8qIE5vbi1LZXJt aXQgcHJvdG9jb2wgc2VsZWN0ZWQgKi8KLSAgICAgICAgICAgIGlmIChURUxPUFRfVShURUxPUFRf S0VSTUlUKSAmJgotICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJt aXQudV9zdGFydCkgewotICAgICAgICAgICAgICAgIGlrc193YWl0KEtFUk1JVF9SRVFfU1RPUCww KTsgLyogU3RvcCB0aGUgb3RoZXIgU2VydmVyICovCi0JCS8qIF91X3N0YXJ0ID0gMTsgKi8KLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYK LSAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0 KSB7Ci0gICAgICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfU1RPUCk7CS8qIEknbSBub3Qgc2Vy dmVyaW5nICovCi0JIAlURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0ID0g MDsKLQkJX21lX3N0YXJ0ID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0jZW5k aWYgLyogQ0tfWFlaICovCi0gICAgICAgIGlmIChzc3RhdGUgPT0gJ3gnIHx8IHNzdGF0ZSA9PSAn dicpIHsgLyogUmVzcG9uZGluZyB0byBhIHJlcXVlc3QgKi8KLSAgICAgICAgICAgIGlmICghaW5z ZXJ2ZXIgJiYgVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkgJiYKLSAgICAgICAgICAgICAgICBURUxP UFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQpIHsKLSAgICAgICAgICAgICAgICBp a3Nfd2FpdChLRVJNSVRfUkVRX1NUT1AsMCk7IC8qIFN0b3AgdGhlIG90aGVyIFNlcnZlciAqLwot CQkvKiBfdV9zdGFydCA9IDE7ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoVEVM T1BUX01FKFRFTE9QVF9LRVJNSVQpICYmCi0gICAgICAgICAgICAgICAgIVRFTE9QVF9TQihURUxP UFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpIHsKLSAgICAgICAgICAgICAgICB0bl9zaWtzKEtF Uk1JVF9TVEFSVCk7CS8qIFNlbmQgS2VybWl0LVNlcnZlciBTdGFydCAqLwotCSAJVEVMT1BUX1NC KFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0gZWxzZSB7CQkJLyogSW5pdGlhdGluZyBhIHJlcXVlc3QgKi8KLSAgICAgICAgICAgIGlm IChURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYKLSAgICAgICAgICAgICAgICBURUxPUFRfU0Io VEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgdG5fc2lr cyhLRVJNSVRfU1RPUCk7CS8qIEknbSBub3Qgc2VydmVyaW5nICovCi0JIAlURUxPUFRfU0IoVEVM T1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0ID0gMDsKLQkJX21lX3N0YXJ0ID0gMTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChURUxPUFRfVShURUxPUFRfS0VSTUlUKSAmJgotCSAg ICAgICAgIVRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCkgewotCQkvKiBT ZW5kIFJlcS1TZXJ2ZXItU3RhcnQgKi8KLSAgICAgICAgICAgICAgICBpZiAoIWlrc193YWl0KEtF Uk1JVF9SRVFfU1RBUlQsMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNzdGF0ZSAhPSAn cycpIHsKLQkJCXN1Y2Nlc3MgPSAwOwkvKiBPdGhlciBLZXJtaXQgcmVmdXNlZCB0byBzZXJ2ZSAq LwotCQkJaWYgKGxvY2FsKQotCQkJICBwcmludGYoIkEgS2VybWl0IFNlcnZlciBpcyBub3QgYXZh aWxhYmxlXHJcbiIpOwotCQkJZGVidWcoRjExMCwicHJvdG8oKSIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJBIEtlcm1pdCBTZXJ2ZXIgaXMgbm90IGF2YWlsYWJsZSIsMCk7Ci0JCQl0 bG9nKEYxMTAsIklLUyBjbGllbnQvc2VydmVyIGZhaWx1cmUiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiQSBLZXJtaXQgU2VydmVyIGlzIG5vdCBhdmFpbGFibGUiLDApOwotCQkJZ290 byB4eHByb3RveDsKLSAgICAgICAgICAgICAgICAgICAgfQotCQl9Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgot ICAgICAgICBpZiAodG5fbm9fZW5jcnlwdF94ZmVyICYmICEoc3N0ZWxuZXQgfHwgaW5zZXJ2ZXIp KSB7Ci0gICAgICAgICAgICBja190bl9lbmNfc3RvcCgpOwotICAgICAgICB9Ci0jZW5kaWYgLyog Q0tfRU5DUllQVElPTiAqLwotICAgIH0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotICAgIGlmICgh eGZyaW50KSBjb25ub2koKTsKLSAgICB4eHByb3RvKCk7CQkJCS8qIENhbGwgdGhlIHJlYWwgcHJv dG9jb2wgZnVuY3Rpb24gKi8KLQotI2lmZGVmIElLU19PUFRJT04KLSAgeHhwcm90b3g6Ci0jZW5k aWYgLyogSUtTX09QVElPTiAqLwotICAgIHhmZXJzdGF0ID0gc3VjY2VzczsJCQkvKiBSZW1lbWJl ciB0cmFuc2ZlciBzdGF0dXMgKi8KLSAgICBrYWN0aXZlID0gMDsKLQotI2lmZGVmIFROQ09ERQot I2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgaWYgKHRuX25vX2VuY3J5cHRfeGZlciAmJiAh KHNzdGVsbmV0IHx8IGluc2VydmVyKSkgewotICAgICAgICAgICAgY2tfdG5fZW5jX3N0YXJ0KCk7 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgSUtTX09QVElP TgotICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYKLSAgICAgICAgVEVMT1BUX1NC KFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCAmJiAhX21lX3N0YXJ0KSB7Ci0gICAgICAg IHRuX3Npa3MoS0VSTUlUX1NUT1ApOwkJLyogU2VydmVyIGlzIHN0b3BwZWQgKi8KLSAJVEVMT1BU X1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCA9IDA7Ci0gICAgfQotI2VuZGlmIC8q IElLU19PUFRJT04gKi8KLSAgICBpZiAoaXNfdG4gJiYgdG5fYl94ZmVyICYmICEoc3N0ZWxuZXQg fHwgaW5zZXJ2ZXIpKSB7Ci0gICAgICAgIC8qIGlmIHdlIG5lZ290aWF0ZWQgQmluYXJ5IG1vZGUg dHJ5IHRvIHJlc2V0IGl0ICovCi0gICAgICAgIGlmICghX3VfYmluKSB7Ci0gICAgICAgICAgICAv KiBDaGVjayB0byBzZWUgaWYgdGhlIHN0YXRlIGNoYW5nZWQgZHVyaW5nIHRoZSB0cmFuc2ZlciAq LwotCSAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkpIHsKLQkJdG5fc29wdChET05ULFRF TE9QVF9CSU5BUlkpOwotCQlURUxPUFRfVU5BTlNXRVJFRF9ET05UKFRFTE9QVF9CSU5BUlkpID0g MTsKLQkgICAgfSBlbHNlCi0JICAgICAgX3VfYmluID0gMTsJCS8qIFNvIHdlIGRvbid0IGNhbGwg dG5fd2FpdCgpICovCi0gICAgICAgIH0KLSAgICAgICAgaWYgKCFfbWVfYmluKSB7Ci0gICAgICAg ICAgICAvKiBDaGVjayB0byBzZWUgaWYgdGhlIHN0YXRlIGNoYW5nZWQgZHVyaW5nIHRoZSB0cmFu c2ZlciAqLwotCSAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpKSB7Ci0JCXRuX3NvcHQo V09OVCxURUxPUFRfQklOQVJZKTsKLQkJVEVMT1BUX1VOQU5TV0VSRURfV09OVChURUxPUFRfQklO QVJZKSA9IDE7Ci0JICAgIH0gZWxzZQotCSAgICAgIF9tZV9iaW4gPSAxOwkJLyogU28gd2UgZG9u J3QgY2FsbCB0bl93YWl0KCkgKi8KLQl9Ci0JaWYgKCEoX21lX2JpbiAmJiBfdV9iaW4pKQotCSAg dG5fd2FpdCgicHJvdG8gcmVzZXQgYmluYXJ5IG1vZGUiKTsKLSAgICB9Ci0jZW5kaWYgLyogVE5D T0RFICovCi0KLSNpZmRlZiBQQVRURVJOUwotICAgIHBhdHRlcm5zID0gcGFfc2F2ZTsKLSNlbmRp ZiAvKiBQQVRURVJOUyAqLwotICAgIGZpbGVwZWVrID0gc2Nhbl9zYXZlOwotCi0jaWZkZWYgU1RS RUFNSU5HCi0gICAgc3RyZWFtaW5nID0gMDsKLSAgICAvKiBzdHJlYW1vayA9IDA7ICovCi0jZW5k aWYgLyogU1RSRUFNSU5HICovCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIENLX1NQRUVECi0gICAg Zm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotICAgICAgY3RscFtpXSA9IHNfY3RscFtpXTsKLSAg ICBmX2N0bHAgPSAwOwotI2VuZGlmIC8qIENLX1NQRUVEICovCi0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgIHVyY2xlYXIgPSAwOwotICAgIGlmICghc3VjY2VzcykgewotCXhpdHN0YSB8PSAod2hh dCAmIFdfS0VSTUlUKTsKLQl0bG9nKEYxMTAsIiBmYWlsZWQ6IiwoY2hhciAqKWVwa3Rtc2csMCk7 Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInByb3RvIHhmZXJzdGF0IixlcGt0bXNnLHhmZXJzdGF0 KTsKLSAgICBzbG9zdGFydCA9IHNzX3NhdmU7Ci0gICAgaWYgKHNfdGltaW50ID4gLTEpIHsJCS8q IEJlY2F1c2Ugb2YgUkVNT1RFIFNFVCAqLwotCXRpbWludCA9IHNfdGltaW50OwotCXNfdGltaW50 ID0gLTE7Ci0gICAgfQotICAgIHJlY3Vyc2l2ZSA9IHJfc2F2ZTsKLSAgICBmbnNwYXRoID0gcF9z YXZlOwotICAgIGlmIChjX3NhdmUgPiAtMSkgewkJCS8qIEJlY2F1c2Ugb2YgUkVNT1RFIFNFVCAq LwotCWJjdHIgPSBjX3NhdmU7Ci0JY19zYXZlID0gLTE7Ci0gICAgfQotICAgIGZuY252ICAgPSBm X3NhdmU7Ci0gICAgYmluYXJ5ICA9IGJfc2F2ZTsKLSNpZmRlZiBQSVBFU0VORAotICAgIHBpcGVz ZW5kID0gMDsgICAgCQkJLyogTmV4dCB0aW1lIG1pZ2h0IG5vdCBiZSBwaXBlc2VuZCAqLwotI2Vu ZGlmIC8qIFBJUEVTRU5EICovCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICBjdXJz b3JlbmFbdm1vZGVdID0gY3Vyc29yX3NhdmU7Ci0gICAgdGVybV9pbyA9IHRlcm1faW9fc2F2ZTsK LSAgICBkaXNwbGF5X2RlbW8gPSAxOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9D QUwgKi8KLX0KLQotc3RhdGljIFZPSUQKLXh4cHJvdG8oKSB7Ci0gICAgaW50IHg7Ci0gICAgbG9u ZyBseDsKLSNpZmRlZiBDS19YWVoKLSNpZmRlZiBYWVpfSU5URVJOQUwKLV9QUk9UT1RZUCggaW50 IHB4eXosIChpbnQpICk7Ci0jZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCi0jZW5kaWYgLyogQ0tf WFlaICovCi0KLSAgICBjaGFyIHhzc1syXTsJCQkvKiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2Yg c3N0YXRlICovCi0gICAgeHNzWzBdID0gc3N0YXRlOwotICAgIHhzc1sxXSA9IE5VTDsKLSAgICBz X3RpbWludCA9IHRpbWludDsKLQotICAgIGRlYnVnKEYxMDEsInh4cHJvdG8gZW50cnkganVzdG9u ZSIsIiIsanVzdG9uZSk7Ci0gICAgc3VjY2VzcyA9IDA7Ci0KLSAgICByZXRyaWV2ZSA9IDA7CQkJ LyogUmVzZXQgdGhlc2UgLi4uICovCi0gICAgcmVnZXQgPSAwOwotICAgIG9wa3QgPSAwOwotCi0g ICAgaWYgKGxvY2FsICYmIHR0Y2hrKCkgPCAwKSB7CQkvKiBHaXZpbmcgQllFIG9yIEZJTiAqLwot CWlmIChieWVfYWN0aXZlKSB7CQkvKiBidXQgdGhlcmUgaXMgbm8gY29ubmVjdGlvbiAqLwotCSAg ICB0dGNsb3MoMCk7Ci0JICAgIHN1Y2Nlc3MgPSAxOwotCSAgICByZXR1cm47Ci0JfQotCS8qIERp dHRvIGZvciBhbnkgUkVNT1RFIGNvbW1hbmQgKi8KLQlpZiAoc3N0YXRlID09ICdnJyAmJiBjbWFy ZyApIHsKLQkgICAgaWYgKCpjbWFyZyA9PSAnTCcgfHwgKmNtYXJnID09ICdGJyB8fCAqY21hcmcg PT0gJ1gnKQotCSAgICAgIHN1Y2Nlc3MgPSAxOwotCSAgICBlbHNlCi0JICAgICAgcHJpbnRmKCI/ Tm8gY29ubmVjdGlvblxyXG4iKTsKLQkgICAgcmV0dXJuOwotCX0KLSAgICB9Ci0KLS8qIFNldCB1 cCB0aGUgY29tbXVuaWNhdGlvbiBsaW5lIGZvciBmaWxlIHRyYW5zZmVyLiAqLwotLyogTk9URTog QWxsIG9mIHRoZSB4eHNjcmVlbigpIGNhbGxzIHByaW9yIHRvIHRoZSB3YXJ0KCkgaW52b2NhdGlv biAqLwotLyogY291bGQganVzdCBhcyBlYXNpbHkgYmUgcHJpbnRmJ3Mgb3IsIGZvciB0aGF0IG1h dHRlciwgaGludHMuICovCi0KLSAgICBpZiAobG9jYWwgJiYgKHNwZWVkIDwgMEwpICYmIChuZXR3 b3JrID09IDApKSB7Ci0JeHhzY3JlZW4oU0NSX0VNLDAsMEwsIlNvcnJ5LCB5b3UgbXVzdCAnc2V0 IHNwZWVkJyBmaXJzdCIpOwotCXJldHVybjsKLSAgICB9Ci0gICAgeCA9IC0xOwotICAgIGlmICh0 dG9wZW4odHRuYW1lLCZ4LG1kbXR5cCxjZHRpbW8pIDwgMCkgewotCWRlYnVnKEYxMTEsImZhaWxl ZDogcHJvdG8gdHRvcGVuIGxvY2FsIix0dG5hbWUsbG9jYWwpOwotCXh4c2NyZWVuKFNDUl9FTSww LDBMLCJDYW4ndCBvcGVuIGxpbmUiKTsKLQlyZXR1cm47Ci0gICAgfQotICAgIGlmICh4ID4gLTEp IGxvY2FsID0geDsKLSAgICBkZWJ1ZyhGMTExLCJwcm90byB0dG9wZW4gbG9jYWwiLHR0bmFtZSxs b2NhbCk7Ci0KLSAgICBseCA9IChsb2NhbCAmJiAhbmV0d29yaykgPyBzcGVlZCA6IC0xOwotI2lm ZGVmIE5FVENPTk4KLSNpZmRlZiBDS19TUEVFRAotICAgIGlmIChpc190bikgewotCWN0bHBbKHVu c2lnbmVkKTI1NV0gPSBjdGxwW0NSXSA9IDE7Ci0JaWYgKHBhcml0eSA9PSAnZScgfHwgcGFyaXR5 ID09ICdtJykgY3RscFsxMjddID0gMTsKLQlpZiAoZmxvdyA9PSBGTE9fWE9OWCkgewkJLyogQWxz byB3YXRjaCBvdXQgZm9yIFhvbi9Yb2ZmICovCi0JICAgIGN0bHBbMTddID0gY3RscFsxOV0gPSAx OwotCSAgICBjdGxwWzE3KzEyOF0gPSBjdGxwWzE5KzEyOF0gPSAxOwotCX0KLSAgICB9Ci0jZW5k aWYgLyogQ0tfU1BFRUQgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0gICAgaWYgKHR0cGt0KGx4 LGZsb3cscGFyaXR5KSA8IDApIHsJLyogUHV0IGxpbmUgaW4gcGFja2V0IG1vZGUsICovCi0JeHhz Y3JlZW4oU0NSX0VNLDAsMEwsIkNhbid0IGNvbmRpdGlvbiBsaW5lIik7Ci0JcmV0dXJuOwotICAg IH0KLSAgICBpZiAobG9jYWwgJiYgIW5ldHdvcmsgJiYgY2FycmllciAhPSBDQVJfT0ZGKSB7Ci0J aW50IHg7CQkJCS8qIFNlcmlhbCBjb25uZWN0aW9uICovCi0JeCA9IHR0Z21kbSgpOwkJCS8qIHdp dGggY2FycmllciBjaGVja2luZyAqLwotCWlmICh4ID4gLTEpIHsKLQkgICAgaWYgKCEoeCAmIEJN X0RDRCkpIHsKLQkJZGVidWcoRjEwMSwicHJvdG8gdHRnbWRtIiwiIiwwKTsKLQkJeHhzY3JlZW4o U0NSX0VNLDAsMEwsIkNhcnJpZXIgcmVxdWlyZWQgYnV0IG5vdCBkZXRlY3RlZCIpOwotCQlyZXR1 cm47Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIC8qIFNlbmQgcmVtb3RlIHNpZGUncyAicmVjZWl2 ZSIgb3IgInNlcnZlciIgc3RhcnR1cCBzdHJpbmcsIGlmIGFueSAqLwotICAgIGlmIChsb2NhbCAm JiBja2luZGV4KChjaGFyICopeHNzLCJzcmdjamhrIiwwLDAsMSkpIHsKLQljaGFyICpzID0gTlVM TDsKLSAgICAgICAgaWYgKAotI2lmZGVmIElLU19PUFRJT04KLQkgICAgLyogRG9uJ3Qgc2VuZCBh dXRvLWJsYWggc3RyaW5nIGlmIHdlIGtub3cgb3RoZXIgc2lkZSBpcyBzZXJ2aW5nICovCi0JICAg ICFURUxPUFRfVShURUxPUFRfS0VSTUlUKSB8fAotCSAgICAhVEVMT1BUX1NCKFRFTE9QVF9LRVJN SVQpLmtlcm1pdC51X3N0YXJ0Ci0jZWxzZQotCSAgICAxCi0jZW5kaWYgLyogSUtTX09QVElPTiAq LwotCSAgICApIHsKLQkgICAgaWYgKHNzdGF0ZSA9PSAncycpIHsJLyogU2VuZGluZyBmaWxlKHMp ICovCi0JCXMgPSBiaW5hcnkgPyBwdGFiW3Byb3RvY29sXS5oX2JfaW5pdCA6IHB0YWJbcHJvdG9j b2xdLmhfdF9pbml0OwotCSAgICB9IGVsc2UgaWYgKHByb3RvY29sID09IFBST1RPX0spIHsgLyog Q29tbWFuZCBmb3Igc2VydmVyICovCi0JCXMgPSBwdGFiW3Byb3RvY29sXS5oX3hfaW5pdDsKLQkg ICAgfQotCX0KLSNpZmRlZiBDS19TUEVFRAotI2lmbmRlZiBVTlBSRUZJWFpFUk8KLQlpZiAocHJv dG9jb2wgPT0gUFJPVE9fSykJLyogQmVjYXVzZSBvZiBDLXN0cmluZ3MuLi4gKi8KLQkgIGN0bHBb MF0gPSAxOwotI2VuZGlmIC8qIFVOUFJFRklYWkVSTyAqLwotI2VuZGlmIC8qIENLX1NQRUVEICov Ci0JaWYgKHMpIGlmICgqcykgewkJLyogSWYgd2UgaGF2ZSBhIGNvbW1hbmQgdG8gc2VuZC4uLiAq LwotCSAgICBjaGFyIHRtcGJ1ZlszNTZdOwotCSAgICBpbnQgdG1wYnVmc2l6ID0gMzU2OwotCSAg ICBpbnQgc3R1ZmYgPSAtMSwgc3R1ZmYyID0gLTEsIGxlbiA9IDA7Ci0JICAgIGV4dGVybiBpbnQg dG5sbTsKLQkgICAgaWYgKHNzdGF0ZSA9PSAncycpIHsJLyogU2VuZGluZyBmaWxlKHMpICovCi0j aWZkZWYgQ0tfWFlaCi0JCWlmIChwcm90b2NvbCA9PSBQUk9UT19YKSB7Ci0JCSAgICBjaGFyICog czI7Ci0JCSAgICBzMiA9IGNtYXJnMlswXSA/IGNtYXJnMiA6IGNtYXJnOwotCQkgICAgaWYgKChp bnQpc3RybGVuKHMpICsgKGludClzdHJsZW4oczIpICsgNCA8IDM1NikKLQkJICAgICAgc3ByaW50 Zih0bXBidWYsIHMsIHMyKTsKLQkJICAgIGVsc2UKLQkJICAgICAgdG1wYnVmWzBdID0gTlVMOwot CQl9IGVsc2UgewotI2VuZGlmIC8qIENLX1hZWiAqLwotCQkgICAgY2ttYWttc2codG1wYnVmLCAz NTYsIHMsIE5VTEwsIE5VTEwsIE5VTEwpOwotI2lmZGVmIENLX1hZWgotCQl9Ci0jZW5kaWYgLyog Q0tfWFlaICovCi0JICAgIH0gZWxzZSB7CQkJLyogQ29tbWFuZCBmb3Igc2VydmVyICovCi0JCWNr c3RybmNweSh0bXBidWYscywzNTYpOwotCSAgICB9Ci0JICAgIGNrc3RybmNhdCh0bXBidWYsICJc MDE1IixzaXplb2YodG1wYnVmKSk7Ci0JICAgIGlmICh0bmxtKQkJCS8qIFRFUk1JTkFMIE5FV0xJ TkUgT04gKi8KLQkgICAgICBzdHVmZiA9IExGOwkJLyogU3R1ZmYgTEYgKi8KLSNpZmRlZiBUTkNP REUKLQkgICAgLyogVEVMTkVUIE5FV0xJTkUgTU9ERSAqLwotCSAgICBpZiAoaXNfdG4pIHsKLQkJ c3dpdGNoIChURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkgPyB0bl9iX25sbSA6IHRuX25sbSkgewot CQkgIGNhc2UgVE5MX0NSOgotCQkgICAgYnJlYWs7Ci0JCSAgY2FzZSBUTkxfQ1JOVUw6Ci0JCSAg ICBicmVhazsKLQkJICBjYXNlIFROTF9DUkxGOgotCQkgICAgc3R1ZmYyID0gc3R1ZmY7Ci0JCSAg ICBzdHVmZiA9IExGOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIFROQ09E RSAqLwotCi0jaWZkZWYgTkVUQ09OTgotI2lmZGVmIFRDUFNPQ0tFVAotI2lmZGVmIFJMT0dDT0RF Ci0JICAgIGlmIChuZXR3b3JrICYmIHR0bnByb3RvID09IE5QX1JMT0dJTikgewotCQlzd2l0Y2gg KHRuX2JfbmxtKSB7IC8qIEFsd2F5cyBCSU5BUlkgKi8KLQkJICBjYXNlIFROTF9DUjoKLQkJICAg IGJyZWFrOwotCQkgIGNhc2UgVE5MX0NSTlVMOgotCQkgICAgc3R1ZmYyID0gc3R1ZmY7Ci0JCSAg ICBzdHVmZiAgPSBOVUw7Ci0JCSAgICBicmVhazsKLQkJICBjYXNlIFROTF9DUkxGOgotCQkgICAg c3R1ZmYyID0gc3R1ZmY7Ci0JCSAgICBzdHVmZiA9IExGOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkg ICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5k aWYgLyogTkVUQ09OTiAqLwotCi0JICAgIGxlbiA9IHN0cmxlbih0bXBidWYpOwotCSAgICBpZiAo c3R1ZmYgPj0gMCAmJiBsZW4gPCB0bXBidWZzaXogLSAxKSB7Ci0JCXRtcGJ1ZltsZW4rK10gPSBz dHVmZjsKLQkJaWYgKHN0dWZmMiA+PSAwICYmIGxlbiA8IHRtcGJ1ZnNpeiAtIDEpCi0JCSAgdG1w YnVmW2xlbisrXSA9IHN0dWZmMjsKLQkJdG1wYnVmW2xlbl0gPSBOVUw7Ci0JICAgIH0KLQkgICAg dHRvbCgoQ0hBUiAqKXRtcGJ1ZixsZW4pOwotCSAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykJ LyogR2l2ZSByZW1vdGUgS2VybWl0IHRpbWUgdG8gc3RhcnQgKi8KLQkgICAgICBtc2xlZXAoNDAw KTsKLQl9Ci0gICAgfQotCi0jaWZkZWYgQ0tfWFlaCi0gICAgaWYgKHByb3RvY29sICE9IFBST1RP X0spIHsJCS8qIE5vbi1LZXJtaXQgcHJvdG9jb2wgc2VsZWN0ZWQgKi8KLQljaGFyIHRtcGJ1Zlsz NTZdOwotCWludCB0bXBidWZzaXogPSAzNTY7Ci0JY2hhciAqIHMgPSAiIjsKLQotI2lmZGVmIENL X1RNUERJUgotCWlmIChzc3RhdGUgPT0gJ3YnKSB7CQkvKiBJZiByZWNlaXZpbmcgYW5kLi4uICov Ci0JICAgIGlmIChkbGRpciAmJiAhZl90bXBkaXIpIHsJLyogaWYgdGhleSBoYXZlIGEgZG93bmxv YWQgZGlyZWN0b3J5ICovCi0JCWlmIChzID0gemd0ZGlyKCkpIHsJLyogR2V0IGN1cnJlbnQgZGly ZWN0b3J5ICovCi0JCSAgICBpZiAoemNoZGlyKGRsZGlyKSkgeyAvKiBDaGFuZ2UgdG8gZG93bmxv YWQgZGlyZWN0b3J5ICovCi0JCQlja3N0cm5jcHkoc2F2ZGlyLHMsVE1QRElSTEVOKTsKLQkJCWZf dG1wZGlyID0gMTsJLyogUmVtZW1iZXIgdGhhdCB3ZSBkaWQgdGhpcyAqLwotCQkgICAgfQotCQl9 Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0KLSNpZmRlZiBYWVpfSU5URVJO QUwJCQkvKiBJbnRlcm5hbCAqLwotCXN1Y2Nlc3MgPSAhcHh5eihzc3RhdGUpOwotI2Vsc2UKLSNp ZmRlZiBDS19SRURJUgkJCQkvKiBFeHRlcm5hbCAqLwotCXN3aXRjaCAoc3N0YXRlKSB7Ci0JICBj YXNlICdzJzoJCQkvKiAnVGlzIGJldHRlciB0byBTRU5ELi4uICovCi0JICAgIHMgPSBiaW5hcnkg PyBwdGFiW3Byb3RvY29sXS5wX2Jfc2NtZCA6IHB0YWJbcHJvdG9jb2xdLnBfdF9zY21kOwotCSAg ICBicmVhazsKLQkgIGNhc2UgJ3YnOgkJCS8qIC4uLiB0aGFuIFJFQ0VJVkUgKi8KLQkgICAgcyA9 IGJpbmFyeSA/IHB0YWJbcHJvdG9jb2xdLnBfYl9yY21kIDogcHRhYltwcm90b2NvbF0ucF90X3Jj bWQ7Ci0JICAgIGJyZWFrOwotCX0KLQlpZiAoIXMpIHMgPSAiIjsKLQlpZiAoKnMpIHsKLQkgICAg aWYgKHNzdGF0ZSA9PSAncycpIHsJLyogU2VuZGluZyAqLwotCQlleHRlcm4gaW50IHhmZXJtb2Rl OwotCQlpbnQgayA9IDAsIHggPSAwLCBiID0gYmluYXJ5OwotCQkvKgotCQkgIElmIGp1c3Qgb25l IGZpbGUgd2UgY2FuIHNjYW4gaXQgdG8gc2V0IHRoZSB4ZmVyIG1vZGUuCi0JCSAgT3RoZXJ3aXNl IGl0J3MgdXAgdG8gdGhlIGV4dGVybmFsIHByb3RvY29sIHByb2dyYW0uCi0JCSovCi0JCWlmIChw YXR0ZXJucyAmJiB4ZmVybW9kZSA9PSBYTU9ERV9BICYmICFpc3dpbGQoZnNwZWMpKSB7Ci0JCSAg ICBleHRlcm4gaW50IG5zY2FuZmlsZTsKLQkJICAgIGsgPSBzY2FuZmlsZShmc3BlYywmeCxuc2Nh bmZpbGUpOwotCQkgICAgaWYgKGsgPiAtMSkgewotCQkJYiA9IChrID09IEZUX0JJTikgPyBYWUZU X0IgOiBYWUZUX1Q7Ci0JCQlzID0gYiA/Ci0JCQkgICAgcHRhYltwcm90b2NvbF0ucF9iX3NjbWQg OgotCQkJICAgIHB0YWJbcHJvdG9jb2xdLnBfdF9zY21kOwotCQkgICAgfQotCQl9Ci0JCWlmICgo aW50KXN0cmxlbihzKSArIChpbnQpc3RybGVuKGZzcGVjKSA8IHRtcGJ1ZnNpeikgewotCQkgICAg c3ByaW50Zih0bXBidWYscyxmc3BlYyk7IC8qIHNhZmUgKHByZWNoZWNrZWQpICovCi0JCSAgICB0 bG9nKEYxMTAsIlNlbmRpbmciLGZzcGVjLDBMKTsKLQkJfQotCSAgICB9IGVsc2UgewkJCS8qIFJl Y2VpdmluZyAqLwotCQlpZiAoKGludClzdHJsZW4ocykgKyAoaW50KXN0cmxlbihjbWFyZzIpIDwg dG1wYnVmc2l6KSB7Ci0JCSAgICBzcHJpbnRmKHRtcGJ1ZixzLGNtYXJnMik7IC8qIHNhZmUgKHBy ZWNoZWNrZWQpICovCi0JCSAgICB0bG9nKEYxMTAsIlJlY2VpdmluZyIsY21hcmcyLDBMKTsKLQkJ fQotCSAgICB9Ci0JICAgIHRsb2coRjExMCwiIHZpYSBleHRlcm5hbCBwcm90b2NvbDoiLHRtcGJ1 ZiwwKTsKLQkgICAgZGVidWcoRjExMCwiY2tjcHJvIHR0cnVuY21kIix0bXBidWYsMCk7Ci0JICAg IHN1Y2Nlc3MgPSB0dHJ1bmNtZCh0bXBidWYpOwotCSAgICB0bG9nKEYxMTAsIiBzdGF0dXM6Iixz dWNjZXNzID8gIk9LIiA6ICJGQUlMRUQiLCAwKTsKLQl9IGVsc2UgewotCSAgICBwcmludGYoIj9T b3JyeSwgbm8gZXh0ZXJuYWwgcHJvdG9jb2wgZGVmaW5lZCBmb3IgJXNcclxuIiwKLQkJICAgcHRh Yltwcm90b2NvbF0ucF9uYW1lCi0JCSAgICk7Ci0JfQotI2Vsc2UKLQlwcmludGYoCi0iU29ycnks IG9ubHkgS2VybWl0IHByb3RvY29sIGlzIHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24gb2YgS2Vy bWl0XG4iCi0JICAgICAgICk7Ci0jZW5kaWYgLyogQ0tfUkVESVIgKi8KLSNlbmRpZiAvKiBYWVpf SU5URVJOQUwgKi8KLQlyZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIENLX1hZWiAqLwotCi0jaWZk ZWYgTlRTSUdYCi0gICAgY29ucmF3KCk7Ci0gICAgY29ubm9pKCk7Ci0jZWxzZQotICAgIGlmICgh bG9jYWwpCi0gICAgICBjb25ub2koKTsJCQkJLyogTm8gY29uc29sZSBpbnRlcnJ1cHRzIGlmIHJl bW90ZSAqLwotI2VuZGlmIC8qIE5UU0lHICovCi0KLSAgICBrYWN0aXZlID0gMTsKLSAgICBpZiAo c3N0YXRlID09ICd4JykgewkJLyogSWYgZW50ZXJpbmcgc2VydmVyIG1vZGUsICovCi0JZXh0ZXJu IGludCBob3djYWxsZWQ7Ci0Jc2VydmVyID0gMTsJCQkvKiBzZXQgZmxhZywgKi8KLQlkZWJ1ZyhG MTAxLCJzZXJ2ZXIgYmFja2dyZCIsIiIsYmFja2dyZCk7Ci0JZGVidWcoRjEwMSwic2VydmVyIHF1 aWV0IiwiIixxdWlldCk7Ci0JZGVidWcoRjEwMCwiU0hPVUxEIE5PVCBTRUUgVEhJUyBJRiBJTiBC QUNLR1JPVU5EISIsIiIsMCk7Ci0JaWYgKGhvd2NhbGxlZCA9PSBJX0FNX1NTSFNVQikgewkvKiBh bmQgaXNzdWUgYXBwcm9wcmlhdGUgbWVzc2FnZS4gKi8KLQkgICAgdHRvbCgoQ0hBUiAqKSJLRVJN SVQgUkVBRFkgVE8gU0VSVkUuLi5cMDE1XDAxMiIsMjYpOwotCX0gZWxzZSBpZiAoIWxvY2FsKSB7 Ci0JICAgIGlmICghcXVpZXQgJiYgIWJhY2tncmQKLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAgICAg ICAgICAgICAgJiYgIVRFTE9QVF9NRShURUxPUFRfS0VSTUlUKSAvKiBVc2VyIHdhcyB0b2xkIGJ5 IG5lZ290aWF0aW9uICovCi0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotCQkpIHsKLQkJY29ub2xs KHNydnR4dCk7Ci0JCWNvbm9sbCgiS0VSTUlUIFJFQURZIFRPIFNFUlZFLi4uIik7Ci0JICAgIH0K LQl9IGVsc2UgewotCSAgICBjb25vbCgiRW50ZXJpbmcgc2VydmVyIG1vZGUgb24gIik7Ci0JICAg IGNvbm9sbCh0dG5hbWUpOwotCSAgICBjb25vbGwoIlR5cGUgQ3RybC1DIHRvIHF1aXQuIik7Ci0J ICAgIGlmIChzcnZkaXMpIGludG1zZygtMUwpOwotI2lmZGVmIFRDUFNPQ0tFVAotI2lmbmRlZiBO T0xJU1RFTgotCSAgICBpZiAobmV0d29yayAmJiB0Y3BzcmZkID4gMCkKLQkgICAgICB0dG9sKChD SEFSICopIktFUk1JVCBSRUFEWSBUTyBTRVJWRS4uLlwwMTVcMDEyIiwyNik7Ci0jZW5kaWYgLyog Tk9MSVNURU4gKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQl9Ci0gICAgfSBlbHNlCi0gICAg ICBzZXJ2ZXIgPSAwOwotI2lmZGVmIFZNUwotICAgIGlmICghcXVpZXQgJiYgIWJhY2tncmQpICAg IC8qIFNvIG1lc3NhZ2UgZG9lc24ndCBvdmVyd3JpdGUgcHJvbXB0ICovCi0gICAgICBjb25vbGwo IiIpOwotICAgIGlmIChsb2NhbCkgY29ucmVzKCk7ICAgICAgIC8qIFNvIEN0cmwtQyB3aWxsIHdv cmsgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLS8qCi0gIElmIGluIHJlbW90ZSBtb2RlLCBub3Qgc2h1 c2hlZCwgbm90IGluIGJhY2tncm91bmQsIGFuZCBhdCB0b3AgY29tbWFuZCBsZXZlbCwKLSAgaXNz dWUgYSBoZWxwZnVsIG1lc3NhZ2UgdGVsbGluZyB3aGF0IHRvIGRvLi4uCi0qLwotICAgIGlmICgh bG9jYWwgJiYgIXF1aWV0ICYmICFiYWNrZ3JkKSB7Ci0JaWYgKHNzdGF0ZSA9PSAndicpIHsKLQkg ICAgY29ub2xsKCJSZXR1cm4gdG8geW91ciBsb2NhbCBLZXJtaXQgYW5kIGdpdmUgYSBTRU5EIGNv bW1hbmQuIik7Ci0JICAgIGNvbm9sbCgiIik7Ci0JICAgIGNvbm9sbCgiS0VSTUlUIFJFQURZIFRP IFJFQ0VJVkUuLi4iKTsKLQl9IGVsc2UgaWYgKHNzdGF0ZSA9PSAncycpIHsKLQkgICAgY29ub2xs KCJSZXR1cm4gdG8geW91ciBsb2NhbCBLZXJtaXQgYW5kIGdpdmUgYSBSRUNFSVZFIGNvbW1hbmQu Iik7Ci0JICAgIGNvbm9sbCgiIik7Ci0JICAgIGNvbm9sbCgiS0VSTUlUIFJFQURZIFRPIFNFTkQu Li4iKTsKLQl9IGVsc2UgaWYgKCBzc3RhdGUgPT0gJ2cnIHx8IHNzdGF0ZSA9PSAncicgfHwgc3N0 YXRlID09ICdoJyB8fAotCQkgICAgc3N0YXRlID09ICdqJyB8fCBzc3RhdGUgPT0gJ2MnICkgewot CSAgICBjb25vbGwoIlJldHVybiB0byB5b3VyIGxvY2FsIEtlcm1pdCBhbmQgZ2l2ZSBhIFNFUlZF UiBjb21tYW5kLiIpOwotCSAgICBjb25vbGwoIiIpOwotCSAgICBjb25vbGwoKHNzdGF0ZSA9PSAn cicgfHwgc3N0YXRlID09ICdqJyB8fCBzc3RhdGUgPT0gJ2gnKSA/Ci0JCSAgICJLRVJNSVQgUkVB RFkgVE8gR0VULi4uIiA6Ci0JCSAgICJLRVJNSVQgUkVBRFkgVE8gU0VORCBTRVJWRVIgQ09NTUFO RC4uLiIpOwotCX0KLSAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgIGlmICghbG9jYWwpIHNsZWVw KDEpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLS8qCi0gIFRoZSAnd2FydCgpJyBmdW5jdGlvbiBp cyBnZW5lcmF0ZWQgYnkgdGhlIHdhcnQgcHJvZ3JhbS4gIEl0IGdldHMgYQotICBjaGFyYWN0ZXIg ZnJvbSB0aGUgaW5wdXQoKSByb3V0aW5lIGFuZCB0aGVuIGJhc2VkIG9uIHRoYXQgY2hhcmFjdGVy IGFuZAotICB0aGUgY3VycmVudCBzdGF0ZSwgc2VsZWN0cyB0aGUgYXBwcm9wcmlhdGUgYWN0aW9u LCBhY2NvcmRpbmcgdG8gdGhlIHN0YXRlCi0gIHRhYmxlIGFib3ZlLCB3aGljaCBpcyB0cmFuc2Zv cm1lZCBieSB0aGUgd2FydCBwcm9ncmFtIGludG8gYSBiaWcgY2FzZQotICBzdGF0ZW1lbnQuICBU aGUgZnVuY3Rpb24gaXMgYWN0aXZlIGZvciBvbmUgdHJhbnNhY3Rpb24uCi0qLwotICAgIHJ0aW1l cigpOwkJCQkvKiBSZXNldCBlbGFwc2VkLXRpbWUgdGltZXIgKi8KLSNpZmRlZiBHRlRJTUVSCi0g ICAgcmZ0aW1lcigpOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICByZXNldGMoKTsJCQkJLyog JiBvdGhlciBwZXItdHJhbnNhY3Rpb24gY291bnRlcnMuICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJw cm90byBjYWxsaW5nIHdhcnQsIGp1c3RvbmUiLCIiLGp1c3RvbmUpOwotCi0gICAgd2FydCgpOwkJ CQkvKiBFbnRlciB0aGUgc3RhdGUgdGFibGUgc3dpdGNoZXIuICovCi0vKgotICBOb3RlOiB0aGUg Zm9sbG93aW5nIGlzIG5lY2Vzc2FyeSBpbiBjYXNlIHdlIGhhdmUganVzdCBkb25lIGEgcmVtb3Rl LW1vZGUKLSAgZmlsZSB0cmFuc2ZlciwgaW4gd2hpY2ggY2FzZSB0aGUgY29udHJvbGxpbmcgdGVy bWluYWwgbW9kZXMgaGF2ZSBiZWVuCi0gIGNoYW5nZWQgYnkgdHRwa3QoKS4gIEluIHBhcnRpY3Vs YXIsIHNwZWNpYWwgY2hhcmFjdGVycyBsaWtlIEN0cmwtQyBhbmQKLSAgQ3RybC1cIG1pZ2h0IGhh dmUgYmVlbiB0dXJuZWQgb2ZmIChzZWUgdHRwa3QpLiAgU28gdGhpcyBjYWxsIHRvIHR0cmVzKCkg aXMKLSAgZXNzZW50aWFsLiAgSU1QT1JUQU5UOiByZXN0b3JlIGludGVycnVwdCBoYW5kbGVycyBm aXJzdCwgb3RoZXJ3aXNlIGFueQotICB0ZXJtaW5hbCBpbnRlcnJ1cHRzIHRoYXQgb2NjdXIgYmVm b3JlIHRoaXMgaXMgZG9uZSBpbiB0aGUgbm9ybWFsIHBsYWNlCi0gIGxhdGVyIHdpbGwgY2F1c2Ug YSBjcmFzaC4KLSovCi0jaWZkZWYgT1MyCi0gICAgdHRyZXMoKTsJCQkJLyogUmVzZXQgdGhlIGNv bW11bmljYXRpb24gZGV2aWNlICovCi0jZWxzZQotICAgIGlmICghbG9jYWwpIHsKLQlzZXRpbnQo KTsJCQkvKiBBcm0gaW50ZXJydXB0IGhhbmRsZXJzIEZJUlNUICovCi0JbXNsZWVwKDUwMCk7Ci0J dHRyZXMoKTsJCQkvKiBUaGVuIHJlc3RvcmUgdGVybWluYWwuICovCi0gICAgfQotI2VuZGlmIC8q IE9TMiAqLwotICAgIHh4c2NyZWVuKFNDUl9UQywwLDBMLCIiKTsJCS8qIFRyYW5zYWN0aW9uIGNv bXBsZXRlICovCi0gICAgeCA9IHF1aWV0OwotICAgIHF1aWV0PTE7Ci0gICAgY2xzaWYoKTsJCQkJ LyogRmFpbHNhZmUgaW4gY2FzZSB3ZSBtaXNzZWQgKi8KLSAgICBjbHNvZigxKTsJCQkJLyogYSBj YXNlIGluIHRoZSBzdGF0ZSBtYWNoaW5lLiAqLwotICAgIHF1aWV0ID0geDsKLQotICAgIGlmIChz ZXJ2ZXIpIHsJCQkvKiBCYWNrIGZyb20gcGFja2V0IHByb3RvY29sLiAqLwotICAgIAlpZiAoIXF1 aWV0ICYmICFiYWNrZ3JkCi0jaWZkZWYgSUtTRAotCSAgICAmJiAhaW5zZXJ2ZXIKLSNlbmRpZiAv KiBJS1NEICovCi0JICAgICkgewkJCQkvKiBHaXZlIGFwcHJvcHJpYXRlIG1lc3NhZ2UgKi8KLQkg ICAgY29ub2xsKCIiKTsKLQkgICAgY29ub2xsKCJDLUtlcm1pdCBzZXJ2ZXIgZG9uZSIpOwotICAg ICAgICB9Ci0gICAgICAgIHNlcnZlciA9IDA7CQkJLyogTm90IGEgc2VydmVyIGFueSBtb3JlICov Ci0gICAgfQotfQotCi0vKiAgUyBHIEUgVCBJIE4gSSBUICAtLSAgSGFuZGxlIGluY29taW5nIEdF VC1DbGFzcyBwYWNrZXRzICAqLwotCi0vKgotICBSZXR1cm5zOgotICAgLTE6IE9uIGVycm9yCi0g ICAgMDogR0VUIHBhY2tldCBwcm9jZXNzZWQgT0sgLSByZWFkeSB0byBTZW5kLgotICAgIDE6IEV4 dGVuZGVkIEdFVCBwcm9jZXNzZWQgT0sgLSB3YWl0IGZvciBhbm90aGVyLgotKi8KLXN0YXRpYyBp bnQKLXNnZXRpbml0KHJlZ2V0LHhnZXQpIGludCByZWdldCwgeGdldDsgewkvKiBTZXJ2ZXIgZW5k IG9mIEdFVCBjb21tYW5kICovCi0gICAgY2hhciAqIGZzID0gTlVMTDsJCQkvKiBQb2ludGVyIHRv IGZpbGVzcGVjICovCi0gICAgaW50IGksIG4sIGRvbmUgPSAwOwotI2lmZGVmIFBJUEVTRU5ECi0g ICAgZXh0ZXJuIGludCB1c2VwaXBlcywgcGlwZXNlbmQ7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8K LSAgICBleHRlcm4gaW50IG5vbGlua3M7Ci0KLSAgICBpZiAoIUVOQUJMRUQoZW5fZ2V0KSkgewkJ LyogT25seSBpZiBub3QgZGlzYWJsZWQhICAqLwotCWVycnBrdCgoQ0hBUiAqKSJHRVQgZGlzYWJs ZWQiKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLQotICAgIC8qIE9LIHRvIHByb2NlZWQgKi8KLQot ICAgIG5vbGlua3MgPSByZWN1cnNpdmU7Ci0gICAgZmlsY250ID0gMDsKLQotI2lmZGVmIFdIQVRB TUkKLSAgICAvKiBJZiB0aGV5IGFyZSBhbGlrZSB0aGlzIHdhcyBhbHJlYWR5IGRvbmUgaW4gd2hv YXJld2UoKSAqLwotICAgIGRlYnVnKEYxMDEsInNnZXRpbml0IHdoYXRydSIsIiIsd2hhdHJ1KTsK LSAgICBpZiAod2hhdHJ1ICYgV01JX0ZMQUcpIHsJCS8qIERpZCB3ZSBnZXQgV0hBVEFNSSBpbmZv PyAqLwotCWRlYnVnKEYxMDEsInNnZXRpbml0IGJpbmFyeSAoMSkiLCIiLGJpbmFyeSk7Ci0jaWZk ZWYgVk1TCi0JaWYgKGJpbmFyeSAhPSBYWUZUX0kgJiYgYmluYXJ5ICE9IFhZRlRfTCkKLSNlbHNl Ci0jaWZkZWYgT1MyCi0JICBpZiAoYmluYXJ5ICE9IFhZRlRfTCkKLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBWTVMgKi8KLQkgICAgYmluYXJ5ID0gKHdoYXRydSAmIFdNSV9GTU9ERSkgPyAv KiBZZXMsIHNldCBmaWxlIHR5cGUgKi8KLQkgICAgICBYWUZUX0IgOiBYWUZUX1Q7CS8qIGF1dG9t YXRpY2FsbHkgKi8KLQlkZWJ1ZyhGMTAxLCJzZ2V0aW5pdCBiaW5hcnkgKDIpIiwiIixiaW5hcnkp OwotCWlmICghd2VhcmVhbGlrZSkKLQkgIGZuY252ID0gKHdoYXRydSAmIFdNSV9GTkFNRSkgPyAx IDogMDsgLyogQW5kIG5hbWUgY29udmVyc2lvbiAqLwotICAgIH0KLSNlbmRpZiAvKiBXSEFUQU1J ICovCi0KLSAgICBmcyA9IChjaGFyICopc3J2Y21kOwotICAgIHNydnB0ciA9IHNydmNtZDsJCQkv KiBQb2ludCB0byBzZXJ2ZXIgY29tbWFuZCBidWZmZXIgKi8KLSAgICBkZWNvZGUocmRhdGFwLHB1 dHNydiwwKTsJCS8qIERlY29kZSB0aGUgR0VUIGNvbW1hbmQgaW50byBpdCAqLwotICAgIC8qIEFj Y2VwdCBtdWx0aXBsZSBmaWxlc3BlY3MgKi8KLSAgICBjbWFyZzIgPSAiIjsJCQkvKiBEb24ndCB1 c2UgY21hcmcyICovCi0gICAgY21hcmcgPSAiIjsJCQkJLyogRG9uJ3QgdXNlIGNtYXJnICovCi0K LSAgICBkb25lID0gMTsJCQkJLyogT25seSAxIHBhY2tldCBuZWVkZWQuLi4gKi8KLSAgICBpZiAo eGdldCkgewkJCQkvKiBTcGVjaWFsIGRlY29kaW5nIGZvciBFeHRlbmRlZCBHRVQgKi8KLQljaGFy IEwsIG5leHQsIGM7CQkvKiBQTFYgaXRlbXMgKi8KLQlpbnQgbGVuLCB2YWw7CQkJLyogTW9yZSBQ TFYgaXRlbXMgKi8KLQljaGFyICogcCA9IChjaGFyICopc3J2Y21kOwkvKiBTdHJpbmcgdG8gZGVj b2RlICovCi0KLQlkb25lID0gMDsJCQkvKiBNYXliZSBtb3JlIHBhY2tldHMgbmVlZGVkICovCi0J ZnMgPSBOVUxMOwkJCS8qIFdlIGRvbid0IGtub3cgdGhlIGZpbGVzcGVjIHlldCAqLwotCWMgPSAq cCsrOwkJCS8qIEdldCBmaXJzdCBwYXJhbWV0ZXIgKi8KLQotCXdoaWxlIChjKSB7CQkJLyogRm9y IGFsbCBwYXJhbWV0ZXJzLi4uICovCi0JICAgIGRlYnVnKEYwMDAsInNnZXRpbml0IGMiLCIiLGMp OwotCSAgICBMID0gKnArKzsJCQkvKiBHZXQgbGVuZ3RoICovCi0JICAgIGlmIChMID49IFNQKQkJ LyogRGVjb2RlIGxlbmd0aCAqLwotCSAgICAgIGxlbiA9IHh1bmNoYXIoTCk7Ci0JICAgIGVsc2Ug aWYgKGMgPT0gJ0AnKSB7CS8qIEFsbG93IG1pc3NpbmcgRU9QIGxlbmd0aCBmaWVsZCAqLwotCQls ZW4gPSAwOwotCSAgICB9IGVsc2UgewotCQlsZW4gPSAoeHVuY2hhcigqcCsrKSAqIDk1KTsKLQkJ bGVuICs9IHh1bmNoYXIoKnArKyk7Ci0JICAgIH0KLQkgICAgZGVidWcoRjEwMSwic2dldGluaXQg bGVuIiwiIixsZW4pOwotCSAgICBuZXh0ID0gKihwK2xlbik7CQkvKiBHZXQgbmV4dCBwYXJhbWV0 ZXIgKi8KLQkgICAgKihwK2xlbikgPSBOVUw7CQkvKiBaZXJvIGl0IG91dCB0byB0ZXJtaW5hbCB2 YWx1ZSAqLwotCSAgICBkZWJ1ZyhGMTEwLCJzZ2V0aW5pdCBwIixwLDApOwotCSAgICBzd2l0Y2gg KGMpIHsJCS8qIERvIHRoZSBwYXJhbWV0ZXIgKi8KLQkgICAgICBjYXNlICdPJzoJCQkvKiBHRVQg T3B0aW9ucyAqLwotCQl2YWwgPSBhdG9pKHApOwkJLyogQ29udmVydCB0byBpbnQgKi8KLQkJZGVi dWcoRjEwMSwic2dldGluaXQgTyB2YWwiLCIiLHZhbCk7Ci0JCWlmICh2YWwgJiBHT1BUX0RFTCkg bW92aW5nID0gMTsKLQkJaWYgKHZhbCAmIEdPUFRfUkVTKSByZWdldCA9IDE7Ci0JCWlmICh2YWwg JiBHT1BUX1JFQykgewotCQkgICAgcmVjdXJzaXZlID0gMTsKLQkJICAgIG5vbGlua3MgPSAyOwot CQkgICAgaWYgKGZuc3BhdGggPT0gUEFUSF9PRkYpCi0JCSAgICAgIGZuc3BhdGggPSBQQVRIX1JF TDsKLQkJfQotCQlicmVhazsKLQkgICAgICBjYXNlICdNJzoJCQkvKiBUcmFuc2ZlciBNb2RlICov Ci0JCXZhbCA9IGF0b2kocCk7Ci0JCWRlYnVnKEYxMDEsInNnZXRpbml0IE0gdmFsIiwiIix2YWwp OwotCQlpZiAodmFsIDwgMSkKLQkJICBicmVhazsKLQkJcGF0dGVybnMgPSAwOwkJLyogVGFrZXMg cHJlY2VkZW5jZSBvdmVyIHBhdHRlcm5zICovCi0JCWZpbGVwZWVrID0gMDsJCS8qIGFuZCBGSUxF IFNDQU4gKi8KLQkJaWYgKHZhbCA9PSBHTU9EX1RYVCkgYmluYXJ5ID0gWFlGVF9UOyAvKiBUZXh0 ICovCi0JCWlmICh2YWwgPT0gR01PRF9CSU4pIGJpbmFyeSA9IFhZRlRfQjsgLyogQmluYXJ5ICov Ci0JCWlmICh2YWwgPT0gR01PRF9MQkwpIGJpbmFyeSA9IFhZRlRfTDsgLyogTGFiZWxlZCAqLwot CQlicmVhazsKLQkgICAgICBjYXNlICdGJzoJCQkvKiBGaWxlbmFtZSAqLwotCQlmcyA9IHA7Ci0J CWRlYnVnKEYxMTAsInNnZXRpbml0IGZpbGVuYW1lIixmcywwKTsKLQkJYnJlYWs7Ci0JICAgICAg Y2FzZSAnQCc6CQkJLyogRW5kIE9mIFBhcmFtZXRlcnMgKi8KLQkJZG9uZSA9IDE7Ci0JCWRlYnVn KEYxMDAsInNnZXRpbml0IEVPUCIsIiIsMCk7Ci0JCWJyZWFrOwotCSAgICAgIGRlZmF1bHQ6Ci0J CWVycnBrdCgoQ0hBUiAqKSJVbmtub3duIEdFVCBQYXJhbWV0ZXIiKTsKLQkJZGVidWcoRjEwMCwi c2dldGluaXQgdW5rbm93biBwYXJhbWV0ZXIiLCIiLDApOwotCQlyZXR1cm4oLTEpOwotCSAgICB9 Ci0JICAgIHAgKz0gKGxlbiArIDEpOwotCSAgICBjID0gbmV4dDsKLQl9Ci0gICAgfQotICAgIGlm ICghZnMpIGZzID0gIiI7CQkJLyogQSBmaWxlbmFtZSBpcyByZXF1aXJlZCAqLwotICAgIGlmICgq ZnMpIHsKLQloYXZlZnMgPSAxOwotCW4gPSAwOwkJCQkvKiBDaGVjayBmb3IgcXVvdGVkIG5hbWUg Ki8KLQlpZiAoKG4gPSBzdHJsZW4oZnMpKSA+IDEpIHsKLQkgICAgLyogTm90ZTogdGhpcyBkb2Vz IG5vdCBhbGxvdyBmb3IgbXVsdGlwbGUgcXVvdGVkIG5hbWVzICovCi0JICAgIGlmICgoZnNbMF0g PT0gJ3snICYmIGZzW24tMV0gPT0gJ30nKSB8fAotCQkoZnNbMF0gPT0gJyInICYmIGZzW24tMV0g PT0gJyInKSkgewotCQlmc1tuLTFdID0gJ1wwJzsKLQkJZnMrKzsKLQkJZGVidWcoRjExMSwic2dl dGluaXQgdW5xdW90ZWQgZmlsZW5hbWUiLGZzLG4pOwotCSAgICB9IGVsc2UKLQkgICAgICBuID0g MDsJCQkvKiBUaGlzIG1lYW5zIG5vIHF1b3RpbmcgKi8KLQl9Ci0KLSNpZmRlZiBQSVBFU0VORAot CWRlYnVnKEYxMTEsInNnZXRpbml0Iixmcyx1c2VwaXBlcyk7Ci0JaWYgKHVzZXBpcGVzICYmIEVO QUJMRUQoZW5faG9zKSAmJiAqZnMgPT0gJyEnKSB7Ci0JICAgIGNtYXJnID0gZnMgKyAxOwkJLyog UG9pbnQgcGFzdCB0aGUgYmFuZyAqLwotCSAgICAqZnMgPSBOVUw7Ci0JICAgIG5maWxzID0gLTE7 Ci0JICAgIHBpcGVzZW5kID0gMTsKLQkgICAgZGVidWcoRjExMSwic2dldGluaXQgcGlwZXNlbmQi LGNtYXJnLHBpcGVzZW5kKTsKLQl9Ci0JaWYgKCFwaXBlc2VuZCkgewkJLyogSWYgaXQncyBub3Qg YSBwaXBlICovCi0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQkgICAgaWYgKG4gPT0gMCkgewkJLyog SWYgdGhlIG5hbWUgd2FzIG5vdCBxdW90ZWQgKi8KLSNpZm5kZWYgTk9NU0VORAotCQluZmlscyA9 IGZucGFyc2UoZnMpOwkvKiBBbGxvdyBpdCB0byBiZSBhIGxpc3Qgb2YgbmFtZXMgKi8KLQkJZGVi dWcoRjExMSwic2dldGluaXQgQSIsZnMsbmZpbHMpOwotI2lmZGVmIENPTU1FTlQKLS8qIFRoaXMg ZG9lc24ndCB3b3JrIGlmIGEgR0VULVBBVEggaXMgc2V0LiAqLwotCQlpZiAobmZpbHMgPT0gMSAm JiAhaXN3aWxkKGZzKSkgeyAvKiBTaW5nbGUgZmlsZSAqLwotCQkgICAgY2hhciAqIG07Ci0JCSAg ICBpZiAoKHggPSB6Y2hraShmcykpIDwgMCkgeyAvKiBDaGVjayBpZiBpdCdzIHNlbmRhYmxlICov Ci0JCQlzd2l0Y2ggKHgpIHsKLQkJCSAgY2FzZSAtMTogbSA9ICJGaWxlIG5vdCBmb3VuZCI7IGJy ZWFrOwotCQkJICBjYXNlIC0yOiBtID0gIk5vdCBhIHJlZ3VsYXIgZmlsZSI7IGJyZWFrOwotCQkJ ICBjYXNlIC0zOiBtID0gIlJlYWQgYWNjZXNzIGRlbmllZCI7IGJyZWFrOwotCQkJfQotCQkJZXJy cGt0KChDSEFSICopbSk7Ci0JCQlyZXR1cm4oLTEpOwotCQkgICAgfQotCQl9Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotCSAgICB9IGVsc2UgewkJCS8qIElmIGl0IHdhcyBxdW90ZWQgKi8KLSNlbmRp ZiAvKiBOT01TRU5EICovCi0JCW56eG9wdHMgPSAwOwotI2lmZGVmIFVOSVhPUk9TSwotCQlpZiAo bWF0Y2hkb3QpICBuenhvcHRzIHw9IFpYX01BVENIRE9UOwotI2VuZGlmIC8qIFVOSVhPUk9TSyAq LwotCQlpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7Ci0JCS8qIFRyZWF0IGFz IGEgc2luZ2xlIGZpbGVzcGVjICovCi0JCW5maWxzID0gMCAtIG56eHBhbmQoZnMsbnp4b3B0cyk7 Ci0JCWRlYnVnKEYxMTEsInNnZXRpbml0IEIiLGZzLG5maWxzKTsKLQkJY21hcmcgPSBmczsKLQkg ICAgfQotI2lmZGVmIFBJUEVTRU5ECi0JfQotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0gICAgfQot ICAgIGlmICghZG9uZSkgewkJCS8qIE5lZWQgbW9yZSBPIHBhY2tldHMuLi4gKi8KLQlkZWJ1ZyhG MTAwLCJzZ2V0aW5pdCBPLVBhY2tldCBUQkMiLCIiLDApOyAvKiBUbyBCZSBDb250aW51ZWQgKi8K LQlyZXR1cm4oMSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDAsInNnZXRpbml0IE8tUGFja2V0IGRv bmUgLSBoYXZlZnMiLCIiLGhhdmVmcyk7Ci0gICAgaWYgKCFoYXZlZnMpIHsJCQkvKiBEb25lIC0g bWFrZSBzdXJlIHdlIGhhdmUgZmlsZW5hbWUgKi8KLQllcnJwa3QoKENIQVIgKikiR0VUIHdpdGhv dXQgZmlsZW5hbWUiKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBmcmVlcnBrdCh3aW5sbyk7 Ci0gICAgd2lubG8gPSAwOwkJCQkvKiBCYWNrIHRvIHBhY2tldCAwIGFnYWluLiAqLwotICAgIGRl YnVnKEYxMDEsInNnZXRpbml0IHdpbmxvIiwiIix3aW5sbyk7Ci0gICAgbmFrc3RhdGUgPSAwOwkJ CS8qIE5vdyBJJ20gdGhlIHNlbmRlciEgKi8KLSAgICBpZiAocmVnZXQpIHNlbmRtb2RlID0gU01f UkVTRU5EOwotICAgIGlmIChzaW5pdCgpID4gMCkgewkJCS8qIFNlbmQgU2VuZC1Jbml0ICovCi0j aWZkZWYgU1RSRUFNSU5HCi0JaWYgKCFzdHJlYW1pbmcpCi0jZW5kaWYgLyogU1RSRUFNSU5HICov Ci0JICB0aW1pbnQgPSBjaGt0aW1vKHJ0aW1vLHRpbWVmKTsgLyogU3dpdGNoIHRvIHBlci1wYWNr ZXQgdGltZXIgKi8KLQlyZXR1cm4oMCk7CQkJLyogSWYgc3VjY2Vzc2Z1bCwgc3dpdGNoIHN0YXRl ICovCi0gICAgfSBlbHNlIHJldHVybigtMSk7CQkJLyogRWxzZSBiYWNrIHRvIHNlcnZlciBjb21t YW5kIHdhaXQgKi8KLX0KLQotI2Vsc2UgIC8qIE5PWEZFUiAqLwotCi0jaW5jbHVkZSAiY2tjZGVi LmgiCi0KLVZPSUQKLXByb3RvKCkgewotICAgIGV4dGVybiBpbnQgc3VjY2VzczsKLSAgICBzdWNj ZXNzID0gMDsKLX0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3Byby53IGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Nwcm8udwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggYTZiNWY0OC4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrY3Byby53CisrKyAvZGV2L251bGwKQEAgLTEsMzYzMyArMCwwIEBACi1jaGFyICpw cm90diA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAtKi1DLSotICovCi0iQy1LZXJtaXQgUHJvdG9jb2wgTW9kdWxlIDkuMC4xNjAsIDE2IE9j dCAyMDA5IjsKLQotaW50IGthY3RpdmUgPSAwOwkJCS8qIEtlcm1pdCBwcm90b2NvbCBpcyBhY3Rp dmUgKi8KLQotI2RlZmluZSBQS1RaRVJPSEFDSwotCi0vKiBDIEsgQyBQIFIgTyAgLS0gQy1LZXJt aXQgUHJvdG9jb2wgTW9kdWxlLCBpbiBXYXJ0IHByZXByb2Nlc3NvciBub3RhdGlvbi4gKi8KLS8q Ci0gIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCi0gIENvbHVtYmlh IFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4K LQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDksCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEg VW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2Vy dmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHly aWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1p c3Npb25zLgotKi8KLSNpZm5kZWYgTk9YRkVSCi0jaW5jbHVkZSAiY2tjc3ltLmgiCi0jaW5jbHVk ZSAiY2tjZGViLmgiCi0jaW5jbHVkZSAiY2tjYXNjLmgiCi0jaW5jbHVkZSAiY2tja2VyLmgiCi0j aWZkZWYgT1MyCi0jaWZuZGVmIE5UCi0jZGVmaW5lIElOQ0xfTk9QTQotI2RlZmluZSBJTkNMX1ZJ TwkJCS8qIE5lZWRlZCBmb3IgY2tvY29uLmggKi8KLSNpbmNsdWRlIDxvczIuaD4KLSN1bmRlZiBD T01NRU5UCi0jZW5kaWYgLyogTlQgKi8KLSNpbmNsdWRlICJja29jb24uaCIKLSNlbmRpZiAvKiBP UzIgKi8KLQotLyoKLSBOb3RlIC0tIFRoaXMgZmlsZSBtYXkgYWxzbyBiZSBwcmVwcm9jZXNzZWQg YnkgdGhlIFVOSVggTGV4IHByb2dyYW0sIGJ1dAotIHlvdSBtdXN0IGluZGVudCB0aGUgYWJvdmUg I2luY2x1ZGUgc3RhdGVtZW50cyBiZWZvcmUgdXNpbmcgTGV4LCBhbmQgdGhlbgotIHJlc3RvcmUg dGhlbSB0byB0aGUgbGVmdCBtYXJnaW4gaW4gdGhlIHJlc3VsdGluZyBDIHByb2dyYW0gYmVmb3Jl IGNvbXBpbGF0aW9uLgotIEFsc28sIHRoZSBpbnZvY2F0aW9uIG9mIHRoZSAid2FydCgpIiBmdW5j dGlvbiBiZWxvdyBtdXN0IGJlIHJlcGxhY2VkIGJ5IGFuCi0gaW52b2NhdGlvbiAgb2YgdGhlICJ5 eWxleCgpIiBmdW5jdGlvbi4gIEl0IG1pZ2h0IGFsc28gYmUgbmVjZXNzYXJ5IHRvIHJlbW92ZQot IGNvbW1lbnRzIGluIHRoZSAoJSkoJSkuLi4oJSkoJSkgc2VjdGlvbi4KLSovCi0KLS8qIFN0YXRl IGRlZmluaXRpb25zIGZvciBXYXJ0IChvciBMZXgpICovCi0lc3RhdGVzIGlwa3QgcmZpbGUgcmF0 dHIgcmRwa3Qgc3Npbml0IHNzZmlsZSBzc2F0dHIgc3NkYXRhIHNzZW9mIHNzZW90Ci0lc3RhdGVz IHNlcnZlIGdlbmVyaWMgZ2V0IHJnZW4gc3NvcGt0IHJvcGt0Ci0KLV9QUk9UT1RZUChzdGF0aWMg Vk9JRCB4eHByb3RvLCh2b2lkKSk7Ci1fUFJPVE9UWVAoc3RhdGljIFZPSUQgd2hlcmVtc2csKHZv aWQpKTsKLV9QUk9UT1RZUChpbnQgd2FydCwodm9pZCkpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQg c2dldGluaXQsKGludCxpbnQpKTsKLV9QUk9UT1RZUChpbnQgc25kc3BhY2UsKGludCkpOwotCi0v KiBFeHRlcm5hbCBDLUtlcm1pdCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgKi8KLSAgZXh0ZXJuIGNo YXIgKnZlcnNpbywgKnNydnR4dCwgKmNtYXJnLCAqY21hcmcyLCAqKmNtbGlzdCwgKnJmX2VycjsK LSAgZXh0ZXJuIGNoYXIgKiByZnNwZWMsICogc2ZzcGVjLCAqIHNyZnNwZWMsICogcnJmc3BlYzsK LSAgZXh0ZXJuIGNoYXIgKiBwcmZzcGVjLCAqIHBzZnNwZWMsICogcHNyZnNwZWMsICogcHJyZnNw ZWM7Ci0gIGV4dGVybiBjaGFyICpjZG1zZ2ZpbGVbXTsKLSAgZXh0ZXJuIGNoYXIgKiBzbmRfbW92 ZSwgKiBzbmRfcmVuYW1lLCAqIHNyaW1zZzsKLSAgZXh0ZXJuIGNoYXIgZmlsbmFtW10sIG9maWxu YW1bXSwgZnNwZWNbXSwgdHRuYW1lW10sIG9mbjFbXTsKLSAgZXh0ZXJuIENIQVIgc3N0YXRlLCAq c3J2cHRyLCAqZGF0YTsKLSAgZXh0ZXJuIGludCB0aW1pbnQsIHJ0aW1vLCBuZmlscywgaGNmbGcs IHhmbGcsIGZsb3csIG1kbXR5cCwgbmV0d29yazsKLSAgZXh0ZXJuIGludCBvb3B0cywgb21vZGUs IG9uYW1lLCBvcGF0aCwgbm9wdXNoLCBpc2d1ZXN0LCB4Y21kc3JjLCByY2RhY3RpdmU7Ci0gIGV4 dGVybiBpbnQgcmVqZWN0aW9uLCBtb3ZpbmcsIGZuY2FjdCwgYnllX2FjdGl2ZSwgdXJzZXJ2ZXIs IGZhdGFsaW87Ci0gIGV4dGVybiBpbnQgcHJvdG9jb2wsIHByZWZpeGluZywgZmlsY250LCBjYXJy aWVyLCBmbnNwYXRoLCBpbnRlcnJ1cHRlZDsKLSAgZXh0ZXJuIGludCByZWN1cnNpdmUsIGluc2Vy dmVyLCBuenhvcHRzLCBpZGxldG1vLCBzcnZpZGwsIHhmcmludDsKLSAgZXh0ZXJuIHN0cnVjdCBj a19wIHB0YWJbXTsKLSAgZXh0ZXJuIGludCByZW1maWxlLCByZW1waXBlLCB4ZmVyc3RhdCwgZmls ZXN0YXR1cywgd2VhcmVhbGlrZSwgZmFja3BhdGg7Ci0gIGV4dGVybiBpbnQgcGF0dGVybnMsIGZp bGVwZWVrLCBnbmZlcnJvcjsKLSAgZXh0ZXJuIGNoYXIgKiByZW1kZXN0OwotCi0jaWZkZWYgUEtU WkVST0hBQ0sKLSNkZWZpbmUgUEtUWkVST0xFTiAzMgotc3RhdGljIGNoYXIgaXBrdGFja1tQS1Ra RVJPTEVOXTsKLXN0YXRpYyBpbnQgaXBrdGxlbiA9IDA7Ci0jZW5kaWYgLyogUEtUWkVST0hBQ0sg Ki8KLQotc3RhdGljIGludCBzX3RpbWludCA9IC0xOwkJLyogRm9yIHNhdmluZyB0aW1lb3V0IHZh bHVlICovCi1zdGF0aWMgaW50IG15am9iID0gMDsKLXN0YXRpYyBpbnQgaGF2ZWZzID0gMDsKLSNp ZmRlZiBDS19MT0dJTgotc3RhdGljIGludCBsb2d0cmllcyA9IDA7Ci0jZW5kaWYgLyogQ0tfTE9H SU4gKi8KLQotc3RhdGljIGludCBjYW5jZWwgPSAwOwotaW50IGZhY2tidWcgPSAwOwotCi0jaWZk ZWYgU1RSRUFNSU5HCi1leHRlcm4gaW50IHN0cmVhbWluZywgc3RyZWFtb2s7Ci0KLXN0YXRpYyBW T0lECi1zdHJlYW1vbigpIHsKLSAgICBpZiAoc3RyZWFtb2spIHsKLQlkZWJ1ZyhGMTAwLCJzdHJl YW1vbiIsIiIsMCk7Ci0Jc3RyZWFtaW5nID0gMTsKLQl0aW1pbnQgPSAwOwkJCS8qIE5vIHRpbWVv dXRzIHdoaWxlIHN0cmVhbWluZy4gKi8KLSAgICB9Ci19Ci0KLSNpZmRlZiBDT01NRU5UCQkJCS8q IChub3QgdXNlZCkgKi8KLXN0YXRpYyBWT0lECi1zdHJlYW1vZmYoKSB7Ci0gICAgaWYgKHN0cmVh bWluZykgewotCWRlYnVnKEYxMDAsInN0cmVhbW9mZiIsIiIsMCk7Ci0Jc3RyZWFtaW5nID0gMDsK LQl0aW1pbnQgPSBzX3RpbWludDsJCS8qIFJlc3RvcmUgdGltZW91dCAqLwotICAgIH0KLX0KLSNl bmRpZiAvKiBDT01NRU5UICovCi0jZWxzZSAvKiBTVFJFQU1JTkcgKi8KLSNkZWZpbmUgc3RyZWFt b24oKQotI2RlZmluZSBzdHJlYW1vZmYoKQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCi0jaWZu ZGVmIE5PU1BMCi1fUFJPVE9UWVAoIGludCBhZGRtYWMsIChjaGFyICosIGNoYXIgKikgKTsKLV9Q Uk9UT1RZUCggaW50IHp6c3RyaW5nLCAoY2hhciAqLCBjaGFyICoqLCBpbnQgKikgKTsKLSNlbmRp ZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT0lDUAotX1BST1RPVFlQKCBpbnQgY21kc3JjLCAodm9p ZCkgKTsKLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZuZGVmIE5PU0VSVkVSCi0gIGV4dGVybiBj aGFyICogeF91c2VyLCAqIHhfcGFzc3dkLCAqIHhfYWNjdDsKLSAgZXh0ZXJuIGludCB4X2xvZ2lu LCB4X2xvZ2dlZDsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0jaW5jbHVkZSAiY2tjbmV0Lmgi Ci0KLSNpZmRlZiBUTkNPREUKLSAgZXh0ZXJuIGludCB0dG5wcm90bzsJCQkvKiBOZXR3b3JrIHBy b3RvY29sICovCi0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNpZmRlZiBDS19TUEVFRAotICBleHRl cm4gc2hvcnQgY3RscFtdOwkJCS8qIENvbnRyb2wtY2hhcmFjdGVyIHByZWZpeCB0YWJsZSAqLwot I2VuZGlmIC8qIENLX1NQRUVEICovCi0KLSNpZmRlZiBUTkNPREUKLSAgZXh0ZXJuIGludCB0bl9i X25sbSwgdG5fYl94ZmVyLCB0bl9ubG07Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICBleHRlcm4g aW50IHRuX25vX2VuY3J5cHRfeGZlcjsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jZW5k aWYgLyogVE5DT0RFICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZm5kZWYgTk9MSVNURU4KLSAg ZXh0ZXJuIGludCB0Y3BzcmZkOwotI2VuZGlmIC8qIE5PTElTVEVOICovCi0jZW5kaWYgLyogVENQ U09DS0VUICovCi0KLSAgZXh0ZXJuIGludCBjeHNlZW4sIGN6c2Vlbiwgc2VydmVyLCBzcnZkaXMs IGxvY2FsLCBkaXNwbGEsIGJjdHUsIGJjdHIsIGJjdGw7Ci0gIGV4dGVybiBpbnQgYmN0ZjsKLSAg ZXh0ZXJuIGludCBxdWlldCwgdHNlY3MsIHBhcml0eSwgYmFja2dyZCwgbmFrc3RhdGUsIGF0Y2Fw dSwgd3Nsb3RuLCB3aW5sbzsKLSAgZXh0ZXJuIGludCB3c2xvdHMsIHN1Y2Nlc3MsIHhpdHN0YSwg cnByaW50ZiwgZGlzY2FyZCwgY2R0aW1vLCBrZWVwLCBmZGlzcGxhOwotICBleHRlcm4gaW50IHRp bWVmLCBzdGRpbmYsIHJzY2FwdSwgc2VuZG1vZGUsIGVwa3RmbGcsIGVwa3RyY3ZkLCBlcGt0c2Vu dDsKLSAgZXh0ZXJuIGludCBiaW5hcnksIGZuY252OwotICBleHRlcm4gbG9uZyBzcGVlZCwgZmZj LCBjcmMxNiwgY2FsaWJyYXRlLCBkZXN0OwotI2lmZGVmIENPTU1FTlQKLSAgZXh0ZXJuIGNoYXIg KlRZUENNRCwgKkRJUkNNRCwgKkRJUkNNMjsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZuZGVm IE9TMgotICBleHRlcm4gY2hhciAqU1BBQ01ELCAqU1BBQ00yLCAqV0hPQ01EOwotI2VuZGlmIC8q IE9TMiAqLwotICBleHRlcm4gQ0hBUiAqcmRhdGFwOwotICBleHRlcm4gc3RydWN0IHphdHRyIGlh dHRyOwotCi0jaWZkZWYgVk1TCi0gIGV4dGVybiBpbnQgYmF0Y2g7Ci0jZW5kaWYgLyogVk1TICov Ci0KLSNpZmRlZiBHRlRJTUVSCi0gIGV4dGVybiBDS0ZMT0FUIGZwdHNlY3M7Ci0jZW5kaWYgLyog R0ZUSU1FUiAqLwotCi0gIGV4dGVybiBDSEFSICpzcnZjbWQ7Ci0gIGV4dGVybiBDSEFSICplcGt0 bXNnOwotCi0jaWZkZWYgQ0tfVE1QRElSCi1leHRlcm4gaW50IGZfdG1wZGlyOwkJCS8qIERpcmVj dG9yeSBjaGFuZ2VkIHRlbXBvcmFyaWx5ICovCi1leHRlcm4gY2hhciBzYXZkaXJbXTsJCQkvKiBG b3Igc2F2aW5nIGN1cnJlbnQgZGlyZWN0b3J5ICovCi1leHRlcm4gY2hhciAqIGRsZGlyOwotI2Vu ZGlmIC8qIENLX1RNUERJUiAqLwotCi0gIGV4dGVybiBpbnQgcXVlcnk7CQkJLyogUXVlcnktYWN0 aXZlIGZsYWcgKi8KLSNpZm5kZWYgTk9TUEwKLSAgZXh0ZXJuIGludCBjbWRsdmw7Ci0gIGNoYXIg cXVlcnlidWZbUUJVRkwrMV0gPSB7IE5VTCwgTlVMIH07IC8qIFFVRVJZIHJlc3BvbnNlIGJ1ZmZl ciAqLwotICBjaGFyICpxYnVmcCA9IHF1ZXJ5YnVmOwkJLyogUG9pbnRlciB0byBpdCAqLwotICBp bnQgcWJ1Zm4gPSAwOwkJCS8qIExlbmd0aCBvZiBkYXRhIGluIGl0ICovCi0jZWxzZQotICBleHRl cm4gaW50IHRsZXZlbDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PSUNQCi0gIGV4 dGVybiBpbnQgZXNjYXBlOwotI2VuZGlmIC8qIE5PSUNQICovCi0vKgotICBJZiB0aGUgZm9sbG93 aW5nIGZsYWcgaXMgbm9uemVybyB3aGVuIHRoZSBwcm90b2NvbCBtb2R1bGUgaXMgZW50ZXJlZCwK LSAgdGhlbiBzZXJ2ZXIgbW9kZSBwZXJzaXN0cyBmb3IgZXhhY3RseSBvbmUgdHJhbnNhY3Rpb24s IHJhdGhlciB0aGFuCi0gIGxvb3BpbmcgdW50aWwgQllFIG9yIEZJTklTSCBpcyByZWNlaXZlZC4K LSovCi1leHRlcm4gaW50IGp1c3RvbmU7Ci0KLXN0YXRpYyBpbnQgcl9zYXZlID0gLTE7Ci1zdGF0 aWMgaW50IHBfc2F2ZSA9IC0xOwotCi0vKiBGdW5jdGlvbiB0byBsZXQgcmVtb3RlLW1vZGUgdXNl ciBrbm93IHdoZXJlIHRoZWlyIGZpbGUocykgd2VudCAqLwotCi1pbnQgd2hlcmVmbGcgPSAxOwkJ CS8qIFVuc2V0IHdpdGggU0VUIFhGRVIgUkVQT1JUICovCi0KLXN0YXRpYyBWT0lECi13aGVyZW1z ZygpIHsKLSAgICBleHRlcm4gaW50IHF1aWV0LCBmaWxyZWo7Ci0gICAgaW50IG47Ci0gICAgbiA9 IGZpbGNudCAtIGZpbHJlajsKLSAgICBkZWJ1ZyhGMTAxLCJ3aGVyZW1zZyBuIiwiIixuKTsKLQot ICAgIGRlYnVnKEYxMTAsIndoZXJlbXNnIHByZnNwZWMiLHByZnNwZWMsMCk7Ci0gICAgZGVidWco RjExMCwid2hlcmVtc2cgcmZzcGVjIixyZnNwZWMsMCk7Ci0gICAgZGVidWcoRjExMCwid2hlcmVt c2cgcHNmc3BlYyIscHNmc3BlYywwKTsKLSAgICBkZWJ1ZyhGMTEwLCJ3aGVyZW1zZyBzZnNwZWMi LHNmc3BlYywwKTsKLQotICAgIGRlYnVnKEYxMTAsIndoZXJlbXNnIHBycmZzcGVjIixwcnJmc3Bl YywwKTsKLSAgICBkZWJ1ZyhGMTEwLCJ3aGVyZW1zZyBycmZzcGVjIixycmZzcGVjLDApOwotICAg IGRlYnVnKEYxMTAsIndoZXJlbXNnIHBzcmZzcGVjIixwc3Jmc3BlYywwKTsKLSAgICBkZWJ1ZyhG MTEwLCJ3aGVyZW1zZyBzcmZzcGVjIixzcmZzcGVjLDApOwotCi0gICAgaWYgKCFxdWlldCAmJiAh bG9jYWwpIHsKLQlpZiAobiA9PSAxKSB7Ci0JICAgIHN3aXRjaCAobXlqb2IpIHsKLQkgICAgICBj YXNlICdzJzoKLQkJaWYgKHNmc3BlYykgewotCQkgICAgcHJpbnRmKCIgU0VOVDogWyVzXSIsc2Zz cGVjKTsKLQkJICAgIGlmIChzcmZzcGVjKQotCQkgICAgICBwcmludGYoIiBUbzogWyVzXSIsc3Jm c3BlYyk7Ci0JCSAgICBwcmludGYoIiAoJXMpXHJcbiIsIHN1Y2Nlc3MgPyAiT0siIDogIkZBSUxF RCIpOwotCQl9Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgJ3InOgotCSAgICAgIGNhc2UgJ3YnOgot CQlpZiAocnJmc3BlYykgewotCQkgICAgcHJpbnRmKCIgUkNWRDogWyVzXSIscnJmc3BlYyk7Ci0J CSAgICBpZiAocmZzcGVjKQotCQkgICAgICBwcmludGYoIiBUbzogWyVzXSIscmZzcGVjKTsKLQkJ ICAgIHByaW50ZigiICglcylcclxuIiwgc3VjY2VzcyA/ICJPSyIgOiAiRkFJTEVEIik7Ci0JCX0K LQkgICAgfQotCX0gZWxzZSBpZiAobiA+IDEpIHsKLQkgICAgc3dpdGNoIChteWpvYikgewotCSAg ICAgIGNhc2UgJ3MnOgotCQlpZiAoc2ZzcGVjKSB7Ci0JCSAgICBwcmludGYoIiBTRU5UOiAoJWQg ZmlsZXMpIixuKTsKLQkJICAgIGlmIChzcmZzcGVjKQotCQkgICAgICBwcmludGYoIiBMYXN0OiBb JXNdIixzcmZzcGVjKTsKLQkJICAgIHByaW50ZigiICglcylcclxuIiwgc3VjY2VzcyA/ICJPSyIg OiAiRkFJTEVEIik7Ci0JCX0KLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAncic6Ci0JICAgICAgY2Fz ZSAndic6Ci0JCWlmIChycmZzcGVjKSB7Ci0JCSAgICBwcmludGYoIiBSQ1ZEOiAoJWQgZmlsZXMp IixuKTsKLQkJICAgIGlmIChyZnNwZWMpCi0JCSAgICAgIHByaW50ZigiIExhc3Q6IFslc10iLHJm c3BlYyk7Ci0JCSAgICBwcmludGYoIiAoJXMpXHJcbiIsIHN1Y2Nlc3MgPyAiT0siIDogIkZBSUxF RCIpOwotCQl9Ci0JICAgIH0KLQl9IGVsc2UgaWYgKG4gPT0gMCkgewotCSAgICBpZiAobXlqb2Ig PT0gJ3MnKQotCSAgICAgIHByaW50ZigiIFNFTlQ6ICgwIGZpbGVzKSAgICAgICAgICBcclxuIik7 Ci0JICAgIGVsc2UgaWYgKG15am9iID09ICdyJyB8fCBteWpvYiA9PSAndicpCi0JICAgICAgcHJp bnRmKCIgUkNWRDogKDAgZmlsZXMpICAgICAgICAgIFxyXG4iKTsKLQl9Ci0gICAgfQotfQotCi1z dGF0aWMgVk9JRAotcmRlYnVnKCkgewotICAgIGlmIChzZXJ2ZXIpCi0gICAgICBkZWJ1ZyhGMTEx LCJSRVNVTUUiLCJzZXJ2ZXI9MSIsanVzdG9uZSk7Ci0gICAgZWxzZQotICAgICAgZGVidWcoRjEx MSwiUkVTVU1FIiwic2VydmVyPTAiLGp1c3RvbmUpOwotfQotCi0vKiBGbGFncyBmb3IgdGhlIEVO QUJMRSBhbmQgRElTQUJMRSBjb21tYW5kcyAqLwotZXh0ZXJuIGludAotICBlbl9jcHksIGVuX2N3 ZCwgZW5fZGVsLCBlbl9kaXIsIGVuX2ZpbiwgZW5fZ2V0LCBlbl9ieWUsIGVuX21haSwgZW5fcHJp LAotICBlbl9ob3MsIGVuX3JlbiwgZW5fc2VuLCBlbl9zcGEsIGVuX3NldCwgZW5fdHlwLCBlbl93 aG8sIGVuX3JldCwgZW5feGl0LAotICBlbl9ta2QsIGVuX3JtZDsKLSNpZm5kZWYgTk9TUEwKLWV4 dGVybiBpbnQgZW5fYXNnLCBlbl9xdWU7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLWV4dGVybiBpbnQg d2hhdCwgbGFzdHhmZXI7Ci0KLS8qIEdsb2JhbCB2YXJpYWJsZXMgZGVjbGFyZWQgaGVyZSAqLwot Ci0gIGludCB3aGF0cnUgPSAwOwkJCS8qIFdoYXQgYXJlIHlvdS4gKi8KLSAgaW50IHdoYXRydTIg PSAwOwkJCS8qIFdoYXQgYXJlIHlvdSwgY29udCdkLiAqLwotCi0vKiBMb2NhbCB2YXJpYWJsZXMg Ki8KLQotICBzdGF0aWMgY2hhciB2c3RhdGUgPSAwOyAgCQkvKiBTYXZlZCBTdGF0ZSAgICovCi0g IHN0YXRpYyBjaGFyIHZjbWQgPSAwOyAgICAJCS8qIFNhdmVkIENvbW1hbmQgKi8KLSAgc3RhdGlj IGludCByZWdldCA9IDA7CQkJLyogRmxhZyBmb3IgZXhlY3V0aW5nIFJFR0VUICovCi0gIHN0YXRp YyBpbnQgcmV0cmlldmUgPSAwOwkJLyogRmxhZyBmb3IgZXhlY3V0aW5nIFJFVFJJRVZFICovCi0g IHN0YXRpYyBpbnQgb3BrdCA9IDA7CQkJLyogU2VuZCBFeHRlbmRlZCBHRVQgcGFja2V0ICovCi0K LSAgc3RhdGljIGludCB4OwkJCQkvKiBHZW5lcmFsLXB1cnBvc2UgaW50ZWdlciAqLwotICBzdGF0 aWMgY2hhciAqczsJCQkvKiBHZW5lcmFsLXB1cnBvc2Ugc3RyaW5nIHBvaW50ZXIgKi8KLQotLyog TWFjcm9zIC0gTm90ZSwgQkVHSU4gaXMgcHJlZGVmaW5lZCBieSBXYXJ0IChhbmQgTGV4KSBhcyAi c3RhdGUgPSAiLCAqLwotLyogQkVHSU4gaXMgTk9UIGEgR09UTyEgKi8KLSNkZWZpbmUgVElOSVQg aWYgKHRpbml0KDEpIDwgMCkgcmV0dXJuKC05KQotI2RlZmluZSBTRVJWRSB7IFRJTklUOyByZXNl dGMoKTsgbmFrc3RhdGU9MTsgd2hhdD1XX05PVEhJTkc7IGNtYXJnMj0iIjsgXAotc2VuZG1vZGU9 U01fU0VORDsgaGF2ZWZzPTA7IHJlY3Vyc2l2ZT1yX3NhdmU7IGZuc3BhdGg9cF9zYXZlOyBCRUdJ TiBzZXJ2ZTsgfQotI2RlZmluZSBSRVNVTUUgeyByZGVidWcoKTsgaWYgKCFzZXJ2ZXIpIHsgd2hl cmVtc2coKTsgcmV0dXJuKDApOyB9IGVsc2UgXAotaWYgKGp1c3RvbmUpIHsganVzdG9uZT0wOyB3 aGVyZW1zZygpOyByZXR1cm4oMCk7IH0gZWxzZSB7IFNFUlZFOyB9IH0KLQotI2lmZGVmIEdGVElN RVIKLSNkZWZpbmUgUVVJVCB4PXF1aWV0OyBxdWlldD0xOyBjbHNpZigpOyBjbHNvZigxKTsgdHNl Y3M9Z3RpbWVyKCk7IFwKLSBmcHRzZWNzPWdmdGltZXIoKTsgcXVpZXQ9eDsgcmV0dXJuKHN1Y2Nl c3MpCi0jZWxzZQotI2RlZmluZSBRVUlUIHg9cXVpZXQ7IHF1aWV0PTE7IGNsc2lmKCk7IGNsc29m KDEpOyB0c2Vjcz1ndGltZXIoKTsgcXVpZXQ9eDsgXAotIHJldHVybihzdWNjZXNzKQotI2VuZGlm IC8qIEdGVElNRVIgKi8KLQotLyoKLSAgQnkgbGF0ZSAxOTk5LCB0aGUgYmlnIHN3aXRjaCgpIHN0 YXRlbWVudCBnZW5lcmF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIHN0YXRlCi0gIHRhYmxlIGJlZ2Fu IGNob2tpbmcgZXZlbiBnY2MsIHNvIGhlcmUgd2UgZXh0cmFjdCB0aGUgY29kZSBmcm9tIHRoZSBs YXJnZXIKLSAgc3RhdGVzIGludG8gc3RhdGljIHJvdXRpbmVzIHRvIHJlZHVjZSB0aGUgc2l6ZSBv ZiB0aGUgY2FzZXMgYW5kIHRoZQotICBzd2l0Y2goKSBvdmVyYWxsLiAgVGhlIHJvdXRpbmVzIGZv bGxvdyB0aGUgc3RhdGUgdGFibGU7IHRoZSBwcm90b3R5cGVzIGFyZQotICBoZXJlLiAgRWFjaCBv ZiB0aGVzZSByb3V0aW5lcyBzaW1wbHkgY29udGFpbnMgdGhlIHRleHQgZnJvbSB0aGUKLSAgY29y cmVzcG9uZGluZyBjYXNlLCBidXQgd2l0aCByZXR1cm4oLTEpIGFkZGVkIGluIGFwcHJvcHJpYXRl IHBsYWNlczsgc2VlCi0gIGluc3RydWN0aW9ucyBhZnRlciB0aGUgc3RhdGUgdGFibGUgc3dpdGNo ZXIuCi0qLwotc3RhdGljIGludCByYzsJCQkJLyogUmV0dXJuIGNvZGUgZm9yIHRoZXNlIHJvdXRp bmVzICovCi1zdGF0aWMgaW50IHJjdl9zX3BrdCgpOwkJCS8qIFJlY2VpdmVkIGFuIFMgcGFja2V0 ICovCi1zdGF0aWMgaW50IHJjdl9maXJzdGRhdGEoKTsJCS8qIFJlY2VpdmVkIGZpcnN0IERhdGEg cGFja2V0ICovCi1zdGF0aWMgaW50IHJjdl9zaG9ydHJlcGx5KCk7CQkvKiBTaG9ydCByZXBseSB0 byBhIFJFTU9URSBjb21tYW5kICAqLwotc3RhdGljIGludCBzcnZfcXVlcnkoKTsJCQkvKiBTZXJ2 ZXIgYW5zd2VycyBhbiBxdWVyeSAqLwotc3RhdGljIGludCBzcnZfY29weSgpOwkJCS8qIFNlcnZl ciBleGVjdXRlcyBSRU1PVEUgQ09QWSAqLwotc3RhdGljIGludCBzcnZfcmVuYW1lKCk7CQkvKiBT ZXJ2ZXIgZXhlY3V0ZXMgUkVNT1RFIFJFTkFNRSAqLwotc3RhdGljIGludCBzcnZfbG9naW4oKTsJ CQkvKiBTZXJ2ZXIgZXhlY3V0ZXMgUkVNT1RFIExPR0lOICovCi1zdGF0aWMgaW50IHNydl90aW1l b3V0KCk7CQkvKiBTZXJ2ZXIgdGltZXMgb3V0ICovCi0KLSUlCi0KLS8qCi0gIFByb3RvY29sIGVu dHJ5IHBvaW50cywgb25lIGZvciBlYWNoIHN0YXJ0IHN0YXRlIChzc3RhdGUpLgotICBUaGUgbG93 ZXJjYXNlIGxldHRlcnMgYXJlIGludGVybmFsICJpbnB1dHMiIGZyb20gdGhlIHVzZXIgaW50ZXJm YWNlLgotICBOT1RFOiBUaGUgc3RhcnQgc3RhdGUgbGV0dGVycyB0aGF0IGFwcGVhciBvbiB0aGUg bGVmdCBtYXJnaW4gaW1tZWRpYXRlbHkKLSAgYmVsb3cgY2FuIE5PVCBiZSB1c2VkIGFzIHBhY2tl dCB0eXBlcyBPUiBhcyBHLXBhY2tldCBzdWJjb2Rlcy4KLSovCi0KLXMgeyBUSU5JVDsJCQkJLyog U2VuZCBmaWxlKHMpICovCi0gICAgaWYgKHNpbml0KCkgPiAwKSBCRUdJTiBzc2luaXQ7Ci0gICAg ICAgZWxzZSBSRVNVTUU7IH0KLQotdiB7IFRJTklUOyBuYWtzdGF0ZSA9IDE7IEJFR0lOIGdldDsg fQkvKiBSZWNlaXZlIGZpbGUocykgKi8KLQotciB7CQkJCQkvKiBDbGllbnQgc2VuZHMgYSBHRVQg Y29tbWFuZCAqLwotICAgIFRJTklUOwotICAgIHZzdGF0ZSA9IGdldDsKLSAgICByZWdldCA9IDA7 Ci0gICAgcmV0cmlldmUgPSAwOwotICAgIG9wa3QgPSAwOwotICAgIHZjbWQgPSAwOwotI2lmZGVm IFBLVFpFUk9IQUNLCi0gICAgaXBrdGFja1swXSA9IE5VTDsKLSNlbmRpZiAvKiBQS1RaRVJPSEFD SyAqLwotICAgIGlmIChzaXBrdCgnSScpID49IDApCi0gICAgICBCRUdJTiBpcGt0OwotICAgIGVs c2UKLSAgICAgIFJFU1VNRTsKLX0KLQotaCB7CQkJCQkvKiBDbGllbnQgc2VuZHMgYSBSRVRSSUVW RSBjb21tYW5kICovCi0gICAgVElOSVQ7Ci0gICAgdnN0YXRlID0gZ2V0OwotICAgIHJlZ2V0ID0g MDsKLSAgICByZXRyaWV2ZSA9IDE7Ci0gICAgb3BrdCA9IDA7Ci0gICAgdmNtZCA9IDA7Ci0gICAg aWYgKHNpcGt0KCdJJykgPj0gMCkKLSAgICAgIEJFR0lOIGlwa3Q7Ci0gICAgZWxzZQotICAgICAg UkVTVU1FOwotfQotaiB7CQkJCQkvKiBDbGllbnQgc2VuZHMgYSBSRUdFVCBjb21tYW5kICovCi0g ICAgVElOSVQ7Ci0gICAgdnN0YXRlID0gZ2V0OwotICAgIHJlZ2V0ID0gMTsKLSAgICByZXRyaWV2 ZSA9IDA7Ci0gICAgb3BrdCA9IDA7Ci0gICAgdmNtZCA9IDA7Ci0gICAgaWYgKHNpcGt0KCdJJykg Pj0gMCkKLSAgICAgIEJFR0lOIGlwa3Q7Ci0gICAgZWxzZQotICAgICAgUkVTVU1FOwotfQotbyB7 CQkJCQkvKiBDbGllbnQgc2VuZHMgRXh0ZW5kZWQgR0VUIFBhY2tldCAqLwotICAgIFRJTklUOwot ICAgIHZzdGF0ZSA9IGdldDsKLSAgICByZWdldCA9IG9vcHRzICYgR09QVF9SRVM7Ci0gICAgcmV0 cmlldmUgPSBvb3B0cyAmIEdPUFRfREVMOwotICAgIG9wa3QgPSAxOwotICAgIHZjbWQgPSAwOwot ICAgIGlmIChzaXBrdCgnSScpID49IDApCi0gICAgICBCRUdJTiBpcGt0OwotICAgIGVsc2UKLSAg ICAgIFJFU1VNRTsKLX0KLWMgewkJCQkJLyogQ2xpZW50IHNlbmRzIGEgSG9zdCBjb21tYW5kICov Ci0gICAgVElOSVQ7Ci0gICAgdnN0YXRlID0gcmdlbjsKLSAgICB2Y21kID0gJ0MnOwotICAgIGlm IChzaXBrdCgnSScpID49IDApCi0gICAgICBCRUdJTiBpcGt0OwotICAgIGVsc2UKLSAgICAgIFJF U1VNRTsKLX0KLWsgeyBUSU5JVDsJCQkJLyogQ2xpZW50IHNlbmRzIGEgS2VybWl0IGNvbW1hbmQg Ki8KLSAgICB2c3RhdGUgPSByZ2VuOwotICAgIHZjbWQgPSAnSyc7Ci0gICAgaWYgKHNpcGt0KCdJ JykgPj0gMCkKLSAgICAgIEJFR0lOIGlwa3Q7Ci0gICAgZWxzZQotICAgICAgUkVTVU1FOwotfQot ZyB7CQkJCQkvKiBDbGllbnQgc2VuZHMgYSBSRU1PVEUgY29tbWFuZCAqLwotICAgIFRJTklUOwot ICAgIHZzdGF0ZSA9IHJnZW47Ci0gICAgdmNtZCA9ICdHJzsKLSAgICBpZiAoc2lwa3QoJ0knKSA+ PSAwKQotICAgICAgQkVHSU4gaXBrdDsKLSAgICBlbHNlCi0gICAgICBSRVNVTUU7Ci19Ci14IHsJ CQkJCS8qIEVudGVyIHNlcnZlciBtb2RlICovCi0gICAgaW50IHg7Ci0gICAgeCA9IGp1c3RvbmU7 Ci0gICAgaWYgKCFFTkFCTEVEKGVuX2RlbCkpIHsJCS8qIElmIERFTEVURSBpcyBkaXNhYmxlZCAq LwotCWlmIChmbmNhY3QgPT0gWFlGWF9CIHx8CQkvKiB1bmRvIGFueSBmaWxlIGNvbGxpc2lvbiBh Y3Rpb24gKi8KLQkgICAgZm5jYWN0ID09IFhZRlhfVSB8fAkJLyogdGhhdCBjb3VsZCByZXN1bHQg aW4gZGVsZXRpb24gb3IgKi8KLQkgICAgZm5jYWN0ID09IFhZRlhfQSB8fAkJLyogbW9kaWZpY2F0 aW9uIG9mIGV4aXN0aW5nIGZpbGVzLiAqLwotCSAgICBmbmNhY3QgPT0gWFlGWF9YKSB7Ci0jaWZu ZGVmIE5PSUNQCi0JICAgIGV4dGVybiBpbnQgZ19mbmNhY3Q7Ci0JICAgIGdfZm5jYWN0ID0gZm5j YWN0OwkJLyogU2F2ZSBjdXJyZW50IHNldHRpbmcgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCSAg ICBmbmNhY3QgPSBYWUZYX1I7CQkvKiBDaGFuZ2UgdG8gUkVOQU1FICovCi0JICAgIGRlYnVnKEYx MDEsInNlcnZlciBERUxFVEUgZGlzYWJsZWQgc28gZm5jYWN0IFJFTkFNRSIsIiIsZm5jYWN0KTsK LQl9Ci0gICAgfQotICAgIFNFUlZFOwkJCQkvKiB0aW5pdCgpIGNsZWFycyBqdXN0b25lLi4uICov Ci0gICAganVzdG9uZSA9IHg7Ci0jaWZkZWYgSUtTREIKLSAgICBpZiAoaWtkYm9wZW4pIHNsb3Rz dGF0ZSh3aGF0LCAiU0VSVkVSIiwgIiIsICIiKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotfQotCi1h IHsKLSAgICBpbnQgYjEgPSAwLCBiMiA9IDA7Ci0gICAgaWYgKCFkYXRhKSBUSU5JVDsJCQkvKiAi QUJFTkQiIC0tIFRlbGwgb3RoZXIgc2lkZS4gKi8KLQotICAgIGlmICghYmN0ZikgewkJICAgICAv KiBCbG9jayBjaGVjayAzIGZvcmNlZCBvbiBhbGwgcGFja2V0cyAqLwotI2lmbmRlZiBwZHAxMQot CWlmIChlcGt0ZmxnKSB7CQkJLyogSWYgYmVjYXVzZSBvZiBFLVBBQ0tFVCBjb21tYW5kICovCi0J ICAgIGIxID0gYmN0bDsgYjIgPSBiY3R1OwkvKiBTYXZlIGJsb2NrIGNoZWNrIHR5cGUgKi8KLQkg ICAgYmN0bCA9IGJjdHUgPSAxOwkJLyogc2V0IGl0IHRvIDEgKi8KLQl9Ci0jZW5kaWYgLyogcGRw MTEgKi8KLSAgICB9Ci0gICAgZXJycGt0KChDSEFSICopIlVzZXIgY2FuY2VsbGVkIik7CS8qIFNl bmQgdGhlIHBhY2tldCAqLwotICAgIGlmICghYmN0ZikgewkJICAgICAvKiBCbG9jayBjaGVjayAz IGZvcmNlZCBvbiBhbGwgcGFja2V0cyAqLwotI2lmbmRlZiBwZHAxMQotCWlmIChlcGt0ZmxnKSB7 CQkJLyogUmVzdG9yZSB0aGUgYmxvY2sgY2hlY2sgKi8KLQkgICAgZXBrdGZsZyA9IDA7Ci0JICAg IGJjdGwgPSBiMTsgYmN0dSA9IGIyOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogcGRwMTEgKi8KLSAg ICBzdWNjZXNzID0gMDsKLSAgICByZXR1cm4oMCk7CQkJCS8qIFJldHVybiBmcm9tIHByb3RvY29s LiAqLwotfQotCi0vKgotICBEeW5hbWljIHN0YXRlczogPGN1cnJlbnQtc3RhdGVzPmlucHV0LWNo YXJhY3RlciB7IGFjdGlvbiB9Ci0gIG5ha3N0YXRlICE9IDAgbWVhbnMgd2UncmUgaW4gYSByZWNl aXZpbmcgc3RhdGUsIGluIHdoaWNoIHdlIHNlbmQgQUNLcyAmIE5BS3MuCi0qLwotCi08cmdlbixn ZXQsc2VydmUscm9wa3Q+UyB7CQkvKiBSZWNlaXZlIFNlbmQtSW5pdCBwYWNrZXQuICovCi0gICAg cmMgPSByY3Zfc19wa3QoKTsKLSAgICBjYW5jZWwgPSAwOwkJCQkvKiBSZXNldCBjYW5jZWxsYXRp b24gY291bnRlciAqLwotICAgIGRlYnVnKEYxMDEsInJjdl9zX3BrdCIsIiIscmMpOwotICAgIGlm IChyYyA+IC0xKSByZXR1cm4ocmMpOwkJLyogKHNlZSBiZWxvdykgKi8KLX0KLQotLyogU3RhdGVz IGluIHdoaWNoIHdlIGdldCByZXBsaWVzIGJhY2sgZnJvbSBjb21tYW5kcyBzZW50IHRvIGEgc2Vy dmVyLiAqLwotLyogQ29tcGxpY2F0ZWQgYmVjYXVzZSBkaXJlY3Rpb24gb2YgcHJvdG9jb2wgY2hh bmdlcywgcGFja2V0IG51bWJlciAgICAqLwotLyogc3RheXMgYXQgemVybyB0aHJvdWdoIEktRy1T IHNlcXVlbmNlLCBhbmQgY29tcGxpY2F0ZWQgZXZlbiBtb3JlIGJ5ICAqLwotLyogc2xpZGluZyB3 aW5kb3dzIGJ1ZmZlciBhbGxvY2F0aW9uLiAqLwotCi08aXBrdD5ZIHsJCQkJLyogR2V0IGFjayBm b3IgSS1wYWNrZXQgKi8KLSAgICBpbnQgeCA9IDA7Ci0jaWZkZWYgUEtUWkVST0hBQ0sKLSAgICBj a3N0cm5jcHkoaXBrdGFjaywoY2hhciAqKXJkYXRhcCxQS1RaRVJPTEVOKTsgLyogU2F2ZSBhIGNv cHkgb2YgdGhlIEFDSyAqLwotICAgIGlwa3RsZW4gPSBzdHJsZW4oaXBrdGFjayk7Ci0jZW5kaWYg LyogUEtUWkVST0hBQ0sgKi8KLSAgICBzcGFyKHJkYXRhcCk7CQkJLyogU2V0IHBhcmFtZXRlcnMg Ki8KLSAgICBjYW5jZWwgPSAwOwotICAgIHdpbmxvID0gMDsJCQkJLyogU2V0IHdpbmRvdy1sb3cg YmFjayB0byB6ZXJvICovCi0gICAgZGVidWcoRjEwMSwiPGlwa3Q+WSB3aW5sbyIsIiIsd2lubG8p OwotICAgIHVyc2VydmVyID0gMTsJCQkvKiBTbyBJIGtub3cgSSdtIHRhbGtpbmcgdG8gYSBzZXJ2 ZXIgKi8KLSAgICBpZiAodmNtZCkgewkJCQkvKiBJZiBzZW5kaW5nIGEgZ2VuZXJpYyBjb21tYW5k ICovCi0JaWYgKHRpbml0KDApIDwgMCkgcmV0dXJuKC05KTsJLyogSW5pdGlhbGl6ZSBtYW55IHRo aW5ncyAqLwotCXggPSBzY21kKHZjbWQsKENIQVIgKiljbWFyZyk7CS8qIERvIHRoYXQgKi8KLQlp ZiAoeCA+PSAwKSB4ID0gMDsJCS8qIChiZWNhdXNlIG9mIE8tUGFja2V0KSAqLwotCWRlYnVnKEYx MDEsInByb3RvIEcgcGFja2V0IHNjbWQiLCIiLHgpOwotCXZjbWQgPSAwOwkJCS8qIGFuZCB0aGVu IHVuLXJlbWVtYmVyIGl0LiAqLwotICAgIH0gZWxzZSBpZiAodnN0YXRlID09IGdldCkgewotCWRl YnVnKEYxMDEsIlJFR0VUIHNzdGF0ZSIsIiIsc3N0YXRlKTsKLQl4ID0gc3Jpbml0KHJlZ2V0LCBy ZXRyaWV2ZSwgb3BrdCk7IC8qIEdFVCBvciBSRUdFVCwgZXRjICovCi0gICAgfQotICAgIGlmICh4 IDwgMCkgewkJCS8qIElmIGNvbW1hbmQgd2FzIHRvbyBsb25nICovCi0JaWYgKCFzcmltc2cpCi0J ICBzcmltc2cgPSAiRXJyb3Igc2VuZGluZyBzdHJpbmciOwotCWVycnBrdCgoQ0hBUiAqKXNyaW1z Zyk7CQkvKiBjYW5jZWwgYm90aCBzaWRlcy4gKi8KLQlzdWNjZXNzID0gMDsKLQlSRVNVTUU7Ci0g ICAgfSBlbHNlIGlmICh4ID4gMCkgewkJCS8qIE5lZWQgdG8gc2VuZCBtb3JlIE8tUGFja2V0cyAq LwotCUJFR0lOIHNzb3BrdDsKLSAgICB9IGVsc2UgewotCXJ0aW1lcigpOwkJCS8qIFJlc2V0IHRo ZSBlbGFwc2VkIHNlY29uZHMgdGltZXIuICovCi0jaWZkZWYgR0ZUSU1FUgotCXJmdGltZXIoKTsK LSNlbmRpZiAvKiBHRlRJTUVSICovCi0Jd2lubG8gPSAwOwkJCS8qIFdpbmRvdyBiYWNrIHRvIDAs IGFnYWluLiAqLwotCWRlYnVnKEYxMDEsIjxpcGt0PlkgdnN0YXRlIiwiIix2c3RhdGUpOwotCW5h a3N0YXRlID0gMTsJCQkvKiBDYW4gc2VuZCBOQUtzIGZyb20gaGVyZS4gKi8KLQlCRUdJTiB2c3Rh dGU7CQkJLyogU3dpdGNoIHRvIGRlc2lyZWQgc3RhdGUgKi8KLSAgICB9Ci19Ci0KLTxzc29wa3Q+ WSB7CQkJCS8qIEdvdCBBQ0sgdG8gTy1QYWNrZXQgKi8KLSAgICBkZWJ1ZyhGMTAwLCJDUENQUk8g PHNzb3BrdD5ZIiwiIiwwKTsKLSAgICB4ID0gc29wa3QoKTsKLSAgICBkZWJ1ZyhGMTAxLCJDUENQ Uk8gPHNzb3BrdD5ZIHgiLCIiLHgpOwotICAgIGlmICh4IDwgMCkgewkJCS8qIElmIGVycm9yICov Ci0JZXJycGt0KChDSEFSICopc3JpbXNnKTsJCS8qIGNhbmNlbCBib3RoIHNpZGVzLiAqLwotCXN1 Y2Nlc3MgPSAwOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgaWYgKHggPT0gMCkgewkJLyogVGhpcyB3 YXMgdGhlIGxhc3QgTy1QYWNrZXQgKi8KLQlydGltZXIoKTsJCQkvKiBSZXNldCB0aGUgZWxhcHNl ZCBzZWNvbmRzIHRpbWVyLiAqLwotI2lmZGVmIEdGVElNRVIKLQlyZnRpbWVyKCk7Ci0jZW5kaWYg LyogR0ZUSU1FUiAqLwotCXdpbmxvID0gMDsJCQkvKiBXaW5kb3cgYmFjayB0byAwLCBhZ2Fpbi4g Ki8KLQlkZWJ1ZyhGMTAxLCI8c3NvcGt0Plkgd2lubG8iLCIiLHdpbmxvKTsKLQluYWtzdGF0ZSA9 IDE7CQkJLyogQ2FuIHNlbmQgTkFLcyBmcm9tIGhlcmUuICovCi0JQkVHSU4gdnN0YXRlOwkJCS8q IFN3aXRjaCB0byBkZXNpcmVkIHN0YXRlICovCi0gICAgfQotICAgIGRlYnVnKEYxMDEsIkNQQ1BS TyA8c3NvcGt0Plkgbm90IGNoYW5naW5nIHN0YXRlIiwiIix4KTsKLX0KLQotPGlwa3Q+RSB7CQkJ CS8qIElnbm9yZSBFcnJvciByZXBseSB0byBJIHBhY2tldCAqLwotICAgIGludCB4ID0gMDsKLSAg ICB3aW5sbyA9IDA7CQkJCS8qIFNldCB3aW5kb3ctbG93IGJhY2sgdG8gemVybyAqLwotICAgIGRl YnVnKEYxMDEsIjxpcGt0PkUgd2lubG8iLCIiLHdpbmxvKTsKLSAgICBpZiAodmNtZCkgewkJCQkv KiBJbiBjYXNlIG90aGVyIEtlcm1pdCBkb2Vzbid0ICovCi0JaWYgKHRpbml0KDApIDwgMCkgcmV0 dXJuKC05KTsKLQl4ID0gc2NtZCh2Y21kLChDSEFSICopY21hcmcpOwkvKiB1bmRlcnN0YW5kIEkt cGFja2V0cy4gKi8KLQlpZiAoeCA+PSAwKSB4ID0gMDsJCS8qIChiZWNhdXNlIG9mIE8tUGFja2V0 KSAqLwotCXZjbWQgPSAwOwkJCS8qIE90aGVyd2lzZSBhY3QgYXMgYWJvdmUuLi4gKi8KLSAgICB9 IGVsc2UgaWYgKHZzdGF0ZSA9PSBnZXQpIHggPSBzcmluaXQocmVnZXQsIHJldHJpZXZlLCBvcGt0 KTsKLSAgICBpZiAoeCA8IDApIHsJCQkvKiBJZiBjb21tYW5kIHdhcyB0b28gbG9uZyAqLwotCWVy cnBrdCgoQ0hBUiAqKXNyaW1zZyk7CQkvKiBjYW5jZWwgYm90aCBzaWRlcy4gKi8KLQlzdWNjZXNz ID0gMDsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIGlmICh4ID4gMCkgewkJCS8qIE5lZWQgdG8gc2Vu ZCBtb3JlIE8tUGFja2V0cyAqLwotCUJFR0lOIHNzb3BrdDsKLSAgICB9IGVsc2UgewotCWZyZWVy cGt0KHdpbmxvKTsJCS8qIERpc2NhcmQgdGhlIEVycm9yIHBhY2tldC4gKi8KLQlkZWJ1ZyhGMTAx LCI8aXBrdD5FIHdpbmxvIiwiIix3aW5sbyk7Ci0Jd2lubG8gPSAwOwkJCS8qIEJhY2sgdG8gcGFj a2V0IDAgYWdhaW4uICovCi0JbmFrc3RhdGUgPSAxOwkJCS8qIENhbiBzZW5kIE5BS3MgZnJvbSBo ZXJlLiAqLwotCUJFR0lOIHZzdGF0ZTsKLSAgICB9Ci19Ci0KLTxnZXQ+WSB7CQkvKiBSZXNlbmQg b2YgcHJldmlvdXMgSS1wa3QgQUNLLCBzYW1lIHNlcSBudW1iZXIgKi8KLSAgICBmcmVlcnBrdCgw KTsJCQkvKiBGcmVlIHRoZSBBQ0sncyByZWNlaXZlIGJ1ZmZlciAqLwotICAgIHJlc2VuZCgwKTsJ CQkJLyogU2VuZCB0aGUgR0VUIHBhY2tldCBhZ2Fpbi4gKi8KLX0KLQotLyogU3RhdGVzIGluIHdo aWNoIHdlJ3JlIGJlaW5nIGEgc2VydmVyICovCi0KLTxzZXJ2ZSxnZXQ+SSB7CQkJCS8qIEdldCBJ LXBhY2tldCAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIHNwYXIocmRhdGFwKTsJCQkvKiBTZXQg cGFyYW1ldGVycyBmcm9tIGl0ICovCi0gICAgYWNrMShycGFyKCkpOwkJCS8qIFJlc3BvbmQgd2l0 aCBvdXIgb3duIHBhcmFtZXRlcnMgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgcGt0aW5pdCgpOwkJ CQkvKiBSZWluaXRpYWxpemUgcGFja2V0IG51bWJlcnMgKi8KLSNlbHNlCi0jaWZkZWYgQ09NTUVO VAotICAgIC8qIFRoaXMgY2FuJ3QgYmUgcmlnaHQgLSBpdCB1bmRvZXMgdGhlIHN0dWZmIHdlIGp1 c3QgbmVnb3RpYXRlZCAqLwotICAgIHggPSBqdXN0b25lOwotICAgIHRpbml0KDEpOwkJCQkvKiBS ZWluaXRpYWxpemUgRVZFUllUSElORyAqLwotICAgIGp1c3RvbmUgPSB4OwkJCS8qIEJ1dCB0aGlz Li4uICovCi0jZWxzZQotICAgIHRpbml0KDApOwkJCQkvKiBJbml0aWFsaXplIG1vc3QgdGhpbmdz ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAv KiBOT1NFUlZFUiAqLwotICAgIGNhbmNlbCA9IDA7CQkJCS8qIFJlc2V0IGNhbmNlbGxhdGlvbiBj b3VudGVyICovCi19Ci0KLTxzZXJ2ZT5SIHsJCQkJLyogR0VUICovCi0jaWZuZGVmIE5PU0VSVkVS Ci0gICAgaWYgKHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7Ci0JZXJycGt0KChDSEFSICopIkxvZ2lu IHJlcXVpcmVkIik7Ci0JU0VSVkU7Ci0gICAgfSBlbHNlIGlmIChzZ2V0aW5pdCgwLDApIDwgMCkg ewotCVJFU1VNRTsKLSAgICB9IGVsc2UgewotI2lmZGVmIENLU1lTTE9HCi0JaWYgKGNreHN5c2xv ZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotCSAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJz ZXJ2ZXIiLCAiR0VUIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0J QkVHSU4gc3Npbml0OwotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotCi08c2VydmU+ SCB7CQkJCS8qIEdFVCAvREVMRVRFIChSRVRSSUVWRSkgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAg ICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQpIHsKLQllcnJwa3QoKENIQVIgKikiTG9naW4gcmVx dWlyZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIGlmICghRU5BQkxFRChlbl9kZWwpKSB7Ci0J ZXJycGt0KChDSEFSICopIkRlbGV0aW5nIGZpbGVzIGlzIGRpc2FibGVkIik7Ci0JUkVTVU1FOwot ICAgIH0gZWxzZSBpZiAoc2dldGluaXQoMCwwKSA8IDApIHsKLQlSRVNVTUU7Ci0gICAgfSBlbHNl IHsKLQltb3ZpbmcgPSAxOwotI2lmZGVmIENLU1lTTE9HCi0JaWYgKGNreHN5c2xvZyA+PSBTWVNM R19QUiAmJiBja3hsb2dnaW5nKQotCSAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAi R0VUIC9ERUxFVEUiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQlC RUdJTiBzc2luaXQ7Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLTxzZXJ2ZT5W IHsJCQkJLyogR0VUIC9SRUNVUlNJVkUgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICByZWN1cnNp dmUgPSAxOwkJCS8qIFNldCB0aGVzZSBiZWZvcmUgc2dldGluaXQoKSAqLwotICAgIGlmIChmbnNw YXRoID09IFBBVEhfT0ZGKQotICAgICAgZm5zcGF0aCA9IFBBVEhfUkVMOwkJLyogRG9uJ3Qgd29y cnksIHRoZXkgd2lsbCBiZSAqLwotICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCkgewkJLyog cmVzZXQgbmV4dCB0aW1lIHRocm91Z2guICovCi0JZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVp cmVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSBpZiAoc2dldGluaXQoMCwwKSA8IDApIHsKLQlS RVNVTUU7Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBDS1NZU0xPRwotCWlmIChja3hzeXNsb2cgPj0g U1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLQkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVy IiwgIkdFVCAvUkVDVVJTSVZFIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lTTE9H ICovCi0JQkVHSU4gc3Npbml0OwotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotCi08 c2VydmU+VyB7CQkJCS8qIEdFVCAvUkVDVVJTSVZFIC9ERUxFVEUgKi8KLSNpZm5kZWYgTk9TRVJW RVIKLSAgICByZWN1cnNpdmUgPSAxOwkJCS8qIFNldCB0aGVzZSBiZWZvcmUgc2dldGluaXQoKSAq LwotICAgIGlmIChmbnNwYXRoID09IFBBVEhfT0ZGKQotICAgICAgZm5zcGF0aCA9IFBBVEhfUkVM OwkJLyogRG9uJ3Qgd29ycnksIHRoZXkgd2lsbCBiZSAqLwotICAgIG1vdmluZyA9IDE7CQkJCS8q IHJlc2V0IG5leHQgdGltZSB0aHJvdWdoLiAqLwotICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dl ZCkgewotCWVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJlZCIpOwotCVJFU1VNRTsKLSAgICB9 IGVsc2UgaWYgKCFFTkFCTEVEKGVuX2RlbCkpIHsKLQllcnJwa3QoKENIQVIgKikiRGVsZXRpbmcg ZmlsZXMgaXMgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIGlmIChzZ2V0aW5pdCgw LDApIDwgMCkgewotCVJFU1VNRTsKLSAgICB9IGVsc2UgewotI2lmZGVmIENLU1lTTE9HCi0JaWYg KGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotCSAgY2tzeXNsb2coU1lTTEdf UFIsMSwic2VydmVyIiwKLQkJICAgIkdFVCAvUkVDVVJTSVZFIC9ERUxFVEUiLChjaGFyICopc3J2 Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCUJFR0lOIHNzaW5pdDsKLSAgICB9Ci0jZW5k aWYgLyogTk9TRVJWRVIgKi8KLX0KLQotPHNlcnZlPkogewkJCQkvKiBHRVQgL1JFQ09WRVIgKFJF R0VUKSAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCkg ewotCWVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJlZCIpOwotCVNFUlZFOwotICAgIH0gZWxz ZSBpZiAoc2dldGluaXQoMSwwKSA8IDApIHsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsKLSNpZmRl ZiBDS1NZU0xPRwotCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLQkg IGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkdFVCAvUkVDT1ZFUiIsIChjaGFyICop c3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCUJFR0lOIHNzaW5pdDsKLSAgICB9Ci0j ZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLQotPHNlcnZlPk8gewkJCQkvKiBFeHRlbmRlZCBHRVQg Ki8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQpIHsJCS8q IChhbnkgY29tYmluYXRpb24gb2Ygb3B0aW9ucykgKi8KLQllcnJwa3QoKENIQVIgKikiTG9naW4g cmVxdWlyZWQiKTsKLQlTRVJWRTsKLSAgICB9IGVsc2UgaWYgKCh4ID0gc2dldGluaXQoMCwxKSkg PCAwKSB7Ci0JZGVidWcoRjEwMSwiQ0tDUFJPIDxzZXJ2ZT5PIHNnZXRpbml0IGZhaWwiLCIiLHgp OwotCVJFU1VNRTsKLSAgICB9IGVsc2UgaWYgKHggPT0gMCkgewotCWRlYnVnKEYxMDEsIkNLQ1BS TyA8c2VydmU+TyBzZ2V0aW5pdCBkb25lIiwiIix4KTsKLSNpZmRlZiBDS1NZU0xPRwotCWlmIChj a3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLQkgIGNrc3lzbG9nKFNZU0xHX1BS LCAxLCAic2VydmVyIiwgIkVYVEVOREVEIEdFVCIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAv KiBDS1NZU0xPRyAqLwotCUJFR0lOIHNzaW5pdDsKLSAgICB9IGVsc2UgewkJCQkvKiBPdGhlcndp c2Ugc3RheSBpbiB0aGlzIHN0YXRlICovCi0JZGVidWcoRjEwMSwiQ0tDUFJPIDxzZXJ2ZT5PIHNn ZXRpbml0IFRCQyIsIiIseCk7Ci0JYWNrKCk7Ci0JQkVHSU4gcm9wa3Q7Ci0gICAgfQotI2VuZGlm IC8qIE5PU0VSVkVSICovCi19Ci0KLTxyb3BrdD5PIHsKLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBp ZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQpIHsJCS8qIChhbnkgY29tYmluYXRpb24gb2Ygb3B0aW9u cykgKi8KLQllcnJwa3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsKLQlTRVJWRTsKLSAgICB9 IGVsc2UgaWYgKCh4ID0gc2dldGluaXQoMCwxKSkgPCAwKSB7Ci0JZGVidWcoRjEwMSwiQ0tDUFJP IDxyb3BrdD5PIHNnZXRpbml0IGZhaWwiLCIiLHgpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgaWYg KHggPT0gMCkgewotCWRlYnVnKEYxMDEsIkNLQ1BSTyA8cm9wa3Q+TyBzZ2V0aW5pdCBkb25lIiwi Iix4KTsKLSNpZmRlZiBDS1NZU0xPRwotCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4 bG9nZ2luZykKLQkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkVYVEVOREVEIEdF VCIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCUJFR0lOIHNzaW5p dDsKLSAgICB9IGVsc2UgewkJCQkvKiBPdGhlcndpc2Ugc3RheSBpbiB0aGlzIHN0YXRlICovCi0J ZGVidWcoRjEwMSwiQ0tDUFJPIDxyb3BrdD5PIHNnZXRpbml0IFRCQyIsIiIseCk7Ci0JYWNrKCk7 Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLTxzZXJ2ZT5HIHsJCQkJLyogR2Vu ZXJpYyBzZXJ2ZXIgY29tbWFuZCAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIHNydnB0ciA9IHNy dmNtZDsJCQkvKiBQb2ludCB0byBjb21tYW5kIGJ1ZmZlciAqLwotICAgIGRlY29kZShyZGF0YXAs cHV0c3J2LDApOwkJLyogRGVjb2RlIHBhY2tldCBkYXRhIGludG8gaXQgKi8KLSAgICBwdXRzcnYo TlVMKTsJCQkvKiBJbnNlcnQgYSBjb3VwbGUgbnVsbHMgKi8KLSAgICBwdXRzcnYoTlVMKTsJCQkv KiBmb3IgdGVybWluYXRpb24gKi8KLSAgICBpZiAoc3J2Y21kWzBdKSB7Ci0Jc3N0YXRlID0gc3J2 Y21kWzBdOwkJLyogU2V0IHJlcXVlc3RlZCBzdGFydCBzdGF0ZSAqLwotCWlmICh4X2xvZ2luICYm ICF4X2xvZ2dlZCAmJgkvKiBMb2dpbiByZXF1aXJlZD8gKi8KLQkgICAgLyogTG9naW4sIExvZ291 dCwgYW5kIEhlbHAgYXJlIGFsbG93ZWQgd2hlbiBub3QgbG9nZ2VkIGluICovCi0JICAgIHNzdGF0 ZSAhPSAnSScgJiYgc3N0YXRlICE9ICdMJyAmJiBzc3RhdGUgIT0gJ0gnKSB7Ci0JICAgIGVycnBr dCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJlZCIpOwotCSAgICBTRVJWRTsKLQl9IGVsc2UgewotCSAg ICBuYWtzdGF0ZSA9IDA7CQkvKiBOb3cgSSdtIHRoZSBzZW5kZXIuICovCi0JICAgIHdoYXQgPSBX X1JFTU87CQkvKiBEb2luZyBhIFJFTU9URSBjb21tYW5kLiAqLwotI2lmZGVmIFNUUkVBTUlORwot CSAgICBpZiAoIXN0cmVhbWluZykKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQkgICAgICBpZiAo dGltaW50IDwgMSkKLQkJdGltaW50ID0gY2hrdGltbyhydGltbyx0aW1lZik7IC8qIFN3aXRjaCB0 byBwZXItcGFja2V0IHRpbWVyICovCi0JICAgIGJpbmFyeSA9IFhZRlRfVDsJCS8qIFN3aXRjaCB0 byB0ZXh0IG1vZGUgKi8KLQkgICAgQkVHSU4gZ2VuZXJpYzsJCS8qIFN3aXRjaCB0byBnZW5lcmlj IGNvbW1hbmQgc3RhdGUgKi8KLQl9Ci0gICAgfSBlbHNlIHsKLQllcnJwa3QoKENIQVIgKikiQmFk bHkgZm9ybWVkIHNlcnZlciBjb21tYW5kIik7IC8qIHJlcG9ydCBlcnJvciAqLwotCVJFU1VNRTsJ CQkvKiAmIGdvIGJhY2sgdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLwotICAgIH0KLSNlbmRpZiAv KiBOT1NFUlZFUiAqLwotfQotCi08c2VydmU+QyB7CQkJCS8qIFJlY2VpdmUgSG9zdCBjb21tYW5k ICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgaWYgKHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7Ci0J ZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7Ci0JU0VSVkU7Ci0gICAgfSBlbHNlIGlm ICghRU5BQkxFRChlbl9ob3MpKSB7Ci0JZXJycGt0KChDSEFSICopIlJFTU9URSBIT1NUIGRpc2Fi bGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSBpZiAobm9wdXNoKSB7Ci0JZXJycGt0KChDSEFS ICopIkhPU1QgY29tbWFuZHMgbm90IGF2YWlsYWJsZSIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2Ug ewotCXNydnB0ciA9IHNydmNtZDsJCS8qIFBvaW50IHRvIGNvbW1hbmQgYnVmZmVyICovCi0JZGVj b2RlKHJkYXRhcCxwdXRzcnYsMCk7CS8qIERlY29kZSBjb21tYW5kIHBhY2tldCBpbnRvIGl0ICov Ci0JcHV0c3J2KE5VTCk7CQkJLyogTnVsbC10ZXJtaW5hdGUgKi8KLQluYWtzdGF0ZSA9IDA7CQkJ LyogTm93IHNlbmRpbmcsIG5vdCByZWNlaXZpbmcgKi8KLQliaW5hcnkgPSBYWUZUX1Q7CQkvKiBT d2l0Y2ggdG8gdGV4dCBtb2RlICovCi0JaWYgKHN5c2NtZCgoY2hhciAqKXNydmNtZCwiIikpIHsg LyogVHJ5IHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KLQkgICAgd2hhdCA9IFdfUkVNTzsJCS8q IERvaW5nIGEgUkVNT1RFIGNvbW1hbmQuICovCi0jaWZkZWYgU1RSRUFNSU5HCi0JICAgIGlmICgh c3RyZWFtaW5nKQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCSAgICAgIGlmICh0aW1pbnQgPCAx KQotCQl0aW1pbnQgPSBjaGt0aW1vKHJ0aW1vLHRpbWVmKTsgLyogU3dpdGNoIHRvIHBlci1wYWNr ZXQgdGltZXIgKi8KLSNpZmRlZiBDS1NZU0xPRwotCSAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xH X1BSICYmIGNreGxvZ2dpbmcpCi0JICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIi LCAiUkVNT1RFIEhPU1QiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8K LQkgICAgQkVHSU4gc3Npbml0OwkJLyogSWYgT0ssIHNlbmQgYmFjayBpdHMgb3V0cHV0ICovCi0J fSBlbHNlIHsJCQkvKiBPdGhlcndpc2UgKi8KLQkgICAgZXJycGt0KChDSEFSICopIkNhbid0IGRv IHN5c3RlbSBjb21tYW5kIik7IC8qIHJlcG9ydCBlcnJvciAqLwotCSAgICBSRVNVTUU7CQkJLyog JiBnbyBiYWNrIHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8KLQl9Ci0gICAgfQotI2VuZGlmIC8q IE5PU0VSVkVSICovCi19Ci0KLTxzZXJ2ZT5xIHsJCQkJLyogSW50ZXJydXB0ZWQgb3IgY29ubmVj dGlvbiBsb3N0ICovCi0gICAgcmMgPSBzcnZfdGltZW91dCgpOwotICAgIGRlYnVnKEYxMDEsInNy dl90aW1lb3V0IiwiIixyYyk7Ci0gICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7CQkvKiAoc2Vl IGJlbG93KSAqLwotfQotCi08c2VydmU+TiB7CQkJCS8qIFNlcnZlciBnb3QgYSBOQUsgaW4gY29t bWFuZC13YWl0ICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgZXJycGt0KChDSEFSICopIkRpZCB5 b3Ugc2F5IFJFQ0VJVkUgaW5zdGVhZCBvZiBHRVQ/Iik7Ci0gICAgUkVTVU1FOwotI2VuZGlmIC8q IE5PU0VSVkVSICovCi19Ci0KLTxzZXJ2ZT4uIHsJCQkJLyogQW55IG90aGVyIGNvbW1hbmQgaW4g dGhpcyBzdGF0ZSAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIGlmIChjICE9ICgnRScgLSBTUCkg JiYgYyAhPSAoJ1knIC0gU1ApKSAvKiBleGNlcHQgRSBhbmQgWSBwYWNrZXRzLiAqLwotICAgICAg ZXJycGt0KChDSEFSICopIlVuaW1wbGVtZW50ZWQgc2VydmVyIGZ1bmN0aW9uIik7Ci0gICAgLyog SWYgd2UgYW5zd2VyIGFuIEUgd2l0aCBhbiBFLCB3ZSBnZXQgYW4gaW5maW5pdGUgbG9vcC4gKi8K LSAgICAvKiBBIFkgKEFDSykgY2FuIHNob3cgdXAgaGVyZSBpZiB3ZSBzZW50IGJhY2sgYSBzaG9y dC1mb3JtIHJlcGx5IHRvICovCi0gICAgLyogYSBHIHBhY2tldCBhbmQgaXQgd2FzIGVjaG9lZC4g IEFDS3MgY2FuIGJlIHNhZmVseSBpZ25vcmVkIGhlcmUuICovCi0gICAgUkVTVU1FOwkJCQkvKiBH byBiYWNrIHRvIHNlcnZlciBjb21tYW5kIHdhaXQuICovCi0jZW5kaWYgLyogTk9TRVJWRVIgKi8K LX0KLQotPGdlbmVyaWM+SSB7CQkJCS8qIExvZ2luL091dCAqLwotICAgIHJjID0gc3J2X2xvZ2lu KCk7Ci0gICAgZGVidWcoRjEwMSwiPGdlbmVyaWM+SSBzcnZfbG9naW4iLCIiLHJjKTsKLSAgICBp ZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsJCS8qIChzZWUgYmVsb3cpICovCi19Ci0KLTxnZW5lcmlj PkMgewkJCQkvKiBHb3QgUkVNT1RFIENEIGNvbW1hbmQgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSNp ZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2lu ZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBDRCIsIChj aGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgIGlmICghRU5BQkxFRChl bl9jd2QpKSB7Ci0JZXJycGt0KChDSEFSICopIlJFTU9URSBDRCBkaXNhYmxlZCIpOwotCVJFU1VN RTsKLSAgICB9IGVsc2UgewotCWNoYXIgKiBwID0gTlVMTDsKLQl4ID0gY3dkKChjaGFyICopKHNy dmNtZCsxKSk7CS8qIFRyeSB0byBjaGFuZ2UgZGlyZWN0b3J5ICovCi0jaWZkZWYgSUtTREIKLQlp ZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgQ0QiLCAoY2hhciAqKShzcnZjbWQr MiksICIiKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotCWlmICgheCkgewkJCS8qIEZhaWxlZCAqLwot CSAgICBlcnJwa3QoKENIQVIgKikiQ2FuJ3QgY2hhbmdlIGRpcmVjdG9yeSIpOwotCSAgICBSRVNV TUU7CQkJLyogQmFjayB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCi0JfSBlbHNlIGlmICh4ID09 IDIpIHsJCS8qIFVzZXIgd2FudHMgbWVzc2FnZSAqLwotCSAgICBpZiAoIUVOQUJMRUQoZW5fdHlw KSkgewkvKiBNZXNzYWdlcyAoUkVNT1RFIFRZUEUpIGRpc2FibGVkPyAqLwotCQllcnJwa3QoKENI QVIgKikiUkVNT1RFIFRZUEUgZGlzYWJsZWQiKTsKLQkJUkVTVU1FOwotCSAgICB9IGVsc2UgewkJ CS8qIFRZUEUgaXMgZW5hYmxlZCAqLwotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkr KykgewotCQkgICAgaWYgKHpjaGtpKGNkbXNnZmlsZVtpXSkgPiAtMSkgewotCQkJYnJlYWs7Ci0J CSAgICB9Ci0JCX0KLQkJYmluYXJ5ID0gWFlGVF9UOwkvKiBVc2UgdGV4dCBtb2RlIGZvciB0aGlz LiAqLwotCQlpZiAoaSA8IDggJiYgc25kdHlwZShjZG1zZ2ZpbGVbaV0pKSB7IC8qIEhhdmUgcmVh ZG1lIGZpbGU/ICovCi0JCSAgICBCRUdJTiBzc2luaXQ7CS8qIE9LICovCi0JCX0gZWxzZSB7CQkv KiBub3QgT0sgKi8KLQkJICAgIHAgPSB6Z3RkaXIoKTsKLQkJICAgIGlmICghcCkgcCA9ICIiOwot CQkgICAgc3VjY2VzcyA9ICgqcCkgPyAxIDogMDsKLQkJICAgIGFjazEoKENIQVIgKilwKTsJLyog QUNLIHdpdGggbmV3IGRpcmVjdG9yeSBuYW1lICovCi0JCSAgICBzdWNjZXNzID0gMTsKLQkJICAg IFJFU1VNRTsJCS8qIHdhaXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KLQkJfQotCSAgICB9 Ci0JfSBlbHNlIHsJCQkvKiBVc2VyIGRvZXNuJ3Qgd2FudCBtZXNzYWdlICovCi0JICAgIHAgPSB6 Z3RkaXIoKTsKLQkgICAgaWYgKCFwKSBwID0gIiI7Ci0JICAgIHN1Y2Nlc3MgPSAoKnApID8gMSA6 IDA7Ci0JICAgIGFjazEoKENIQVIgKilwKTsKLQkgICAgc3VjY2VzcyA9IDE7Ci0JICAgIFJFU1VN RTsJCQkvKiBXYWl0IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICovCi0JfQotICAgIH0KLSNlbmRp ZiAvKiBOT1NFUlZFUiAqLwotfQotCi08Z2VuZXJpYz5BIHsJCQkJLyogR290IFJFTU9URSBQV0Qg Y29tbWFuZCAqLwotI2lmbmRlZiBOT1NFUlZFUgotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNr eHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdf UFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFBXRCIsIE5VTEwpOwotI2VuZGlmIC8qIENLU1lTTE9H ICovCi0gICAgaWYgKCFFTkFCTEVEKGVuX2N3ZCkpIHsKLQllcnJwa3QoKENIQVIgKikiUkVNT1RF IENEIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0JaWYgKGVuY3N0cigoQ0hB UiAqKXpndGRpcigpKSA+IC0xKSB7IC8qIEVuY29kZSBjdXJyZW50IGRpcmVjdG9yeSAqLwotCSAg ICBhY2sxKGRhdGEpOwkJCS8qIElmIGl0IGZpdHMsIHNlbmQgaXQgYmFjayBpbiBBQ0sgKi8KLQkg ICAgc3VjY2VzcyA9IDE7Ci0JfSBlbHNlIHsJCQkvKiBGYWlsZWQgKi8KLQkgICAgYWNrKCk7CQkJ LyogU2VuZCBlbXB0eSBBQ0sgKi8KLQkgICAgc3VjY2VzcyA9IDA7CQkvKiBhbmQgaW5kaWNhdGUg ZmFpbHVyZSBsb2NhbGx5ICovCi0JfQotCVJFU1VNRTsJCQkJLyogQmFjayB0byBzZXJ2ZXIgY29t bWFuZCB3YWl0ICovCi0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLTxnZW5lcmlj PkQgewkJCQkvKiBSRU1PVEUgRElSRUNUT1JZIGNvbW1hbmQgKi8KLSNpZm5kZWYgTk9TRVJWRVIK LSAgICBjaGFyICpuMjsKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0gU1lT TEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVy IiwgIlJFTU9URSBESVJFQ1RPUlkiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNM T0cgKi8KLSAgICBpZiAoIUVOQUJMRUQoZW5fZGlyKSkgewkJLyogSWYgRElSIGlzIGRpc2FibGVk LCAqLwotCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgRElSRUNUT1JZIGRpc2FibGVkIik7IC8qIHJl ZnVzZS4gKi8KLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsJCQkJLyogRElSIGlzIGVuYWJsZWQuICov Ci0jaWZkZWYgSUtTREIKLQlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgRElS IiwgKGNoYXIgKikoc3J2Y21kKzIpLCAiIik7Ci0jZW5kaWYgLyogSUtTREIgKi8KLQlpZiAoIUVO QUJMRUQoZW5fY3dkKSkgewkJLyogQnV0IENXRCBpcyBkaXNhYmxlZCAqLwotCSAgICB6c3RyaXAo KGNoYXIgKikoc3J2Y21kKzIpLCZuMik7IC8qIGFuZCB0aGV5IGluY2x1ZGVkIGEgcGF0aG5hbWUs ICovCi0JICAgIGlmIChzdHJjbXAoKGNoYXIgKikoc3J2Y21kKzIpLG4yKSkgeyAvKiBzbyByZWZ1 c2UuICovCi0JCWVycnBrdCgoQ0hBUiAqKSJBY2Nlc3MgZGVuaWVkIik7Ci0JCVJFU1VNRTsJCQkv KiBSZW1lbWJlciwgdGhpcyBpcyBub3QgYSBnb3RvISAqLwotCSAgICB9Ci0JfQotCWlmIChzdGF0 ZSA9PSBnZW5lcmljKSB7CQkJLyogSXQncyBPSyB0byBnbyBhaGVhZC4gKi8KLSNpZmRlZiBDT01N RU5UCi0JICAgIG4yID0gKCooc3J2Y21kKzIpKSA/IERJUkNNRCA6IERJUkNNMjsKLQkgICAgaWYg KHN5c2NtZChuMiwoY2hhciAqKShzcnZjbWQrMikpKSAgLyogSWYgaXQgY2FuIGJlIGRvbmUgKi8K LSNlbHNlCi0JICAgIGludCB4OwotCSAgICBpZiAoKHggPSBzbmRkaXIoKGNoYXIqKShzcnZjbWQr MikpKSA+IDApCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICB7Ci0JCUJFR0lOIHNzaW5pdDsJ CS8qIHNlbmQgdGhlIHJlc3VsdHMgYmFjazsgKi8KLQkgICAgfSBlbHNlIHsJCQkvKiBvdGhlcndp c2UgKi8KLQkJaWYgKHggPCAwKQotCQkgIGVycnBrdCgoQ0hBUiAqKSJObyBmaWxlcyBtYXRjaCIp OwotCQllbHNlCi0JCSAgZXJycGt0KChDSEFSICopIkNhbid0IGxpc3QgZGlyZWN0b3J5Iik7Ci0J CVJFU1VNRTsJCQkvKiByZXR1cm4gdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLwotCSAgICB9Ci0J fQotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotCi08Z2VuZXJpYz5FIHsJCQkJLyog UkVNT1RFIERFTEVURSAoRXJhc2UpICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgY2hhciAqbjI7 Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxv Z2dpbmcpCi0gICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgREVM RVRFIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgaWYgKCFF TkFCTEVEKGVuX2RlbCkpIHsKLQllcnJwa3QoKENIQVIgKikiUkVNT1RFIERFTEVURSBkaXNhYmxl ZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgewkJCQkvKiBERUxFVEUgaXMgZW5hYmxlZCAqLwot I2lmZGVmIElLU0RCCi0JaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIERFTEVU RSIsIChjaGFyICopKHNydmNtZCsyKSwgIiIpOwotI2VuZGlmIC8qIElLU0RCICovCi0JaWYgKCFF TkFCTEVEKGVuX2N3ZCkpIHsJCS8qIGJ1dCBDV0QgaXMgZGlzYWJsZWQgKi8KLQkgICAgenN0cmlw KChjaGFyICopKHNydmNtZCsyKSwmbjIpOyAvKiBhbmQgdGhleSBpbmNsdWRlZCBhIHBhdGhuYW1l LCAqLwotCSAgICBpZiAoc3RyY21wKChjaGFyICopKHNydmNtZCsyKSxuMikpIHsgLyogc28gcmVm dXNlLiAqLwotCQllcnJwa3QoKENIQVIgKikiQWNjZXNzIGRlbmllZCIpOwotCQlSRVNVTUU7CQkJ LyogUmVtZW1iZXIsIHRoaXMgaXMgbm90IGEgZ290byEgKi8KLQkgICAgfQotCX0gZWxzZSBpZiAo aXNkaXIoKGNoYXIgKikoc3J2Y21kKzIpKSkgeyAvKiBBIGRpcmVjdG9yeSBuYW1lPyAqLwotCSAg ICBlcnJwa3QoKENIQVIgKikiSXQncyBhIGRpcmVjdG9yeSIpOwotCSAgICBSRVNVTUU7Ci0JfQot CWlmIChzdGF0ZSA9PSBnZW5lcmljKSB7CQkvKiBJdCdzIE9LIHRvIGdvIGFoZWFkLiAqLwotCSAg ICBpbnQgeDsKLQkgICAgaWYgKCh4ID0gc25kZGVsKChjaGFyKikoc3J2Y21kKzIpKSkgPiAwKSB7 Ci0JCUJFR0lOIHNzaW5pdDsJCS8qIElmIE9LIHNlbmQgcmVzdWx0cyBiYWNrICovCi0JICAgIH0g ZWxzZSB7CQkJLyogb3RoZXJ3aXNlICovCi0JCWlmICh4IDwgMCkKLQkJICBlcnJwa3QoKENIQVIg KikiRmlsZSBub3QgZm91bmQiKTsgLyogcmVwb3J0IGZhaWx1cmUgKi8KLQkJZWxzZQotCQkgIGVy cnBrdCgoQ0hBUiAqKSJERUxFVEUgZmFpbGVkIik7Ci0JCVJFU1VNRTsJCQkvKiAmIHJldHVybiB0 byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCi0JICAgIH0KLQl9Ci0gICAgfQotI2VuZGlmIC8qIE5P U0VSVkVSICovCi19Ci0KLTxnZW5lcmljPkYgewkJCQkvKiBGSU5JU0ggKi8KLSNpZm5kZWYgTk9T RVJWRVIKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYg Y2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkZJTklT SCIsIE5VTEwpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jaWZkZWYgSUtTREIKLSAgICBpZiAo aWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJTRVJWRVIgRklOSVNIIiwgIiIsICIiKTsKLSNlbmRp ZiAvKiBJS1NEQiAqLwotICAgIGlmICghRU5BQkxFRChlbl9maW4pKSB7Ci0JZXJycGt0KChDSEFS ICopIkZJTklTSCBkaXNhYmxlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgewotCWFjaygpOwkJ CQkvKiBBY2tub3dsZWRnZSAqLwotCXh4c2NyZWVuKFNDUl9UQywwLDBMLCIiKTsJLyogRGlzcGxh eSAqLwotCXN1Y2Nlc3MgPSAxOwotCXJldHVybigwKTsJCQkvKiBEb25lICovCi0gICAgfQotI2Vu ZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLTxnZW5lcmljPlggewkJCQkvKiBFWElUICovCi0jaWZu ZGVmIE5PU0VSVkVSCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xH X1BSICYmIGNreGxvZ2dpbmcpCi0gICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIs ICJSRU1PVEUgRVhJVCIsIE5VTEwpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jaWZkZWYgSUtT REIKLSAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgRVhJVCIsICIiLCAi Iik7Ci0jZW5kaWYgLyogSUtTREIgKi8KLSAgICBpZiAoIUVOQUJMRUQoZW5feGl0KSkgewotCWVy cnBrdCgoQ0hBUiAqKSJFWElUIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0J YWNrKCk7CQkJCS8qIEFja25vd2xlZGdlICovCi0JeHhzY3JlZW4oU0NSX1RDLDAsMEwsIiIpOwkv KiBEaXNwbGF5ICovCi0JZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOwotICAgIH0KLSNlbmRpZiAv KiBOT1NFUlZFUiAqLwotfQotCi08Z2VuZXJpYz5MIHsJCQkJLyogQllFIChMb2dvdXQpICovCi0j aWZuZGVmIE5PU0VSVkVSCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9nID49IFNZ U0xHX1BSICYmIGNreGxvZ2dpbmcpCi0gICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZl ciIsICJCWUUiLCBOVUxMKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotI2lmZGVmIElLU0RCCi0g ICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiU0VSVkVSIEJZRSIsICIiLCAiIik7Ci0j ZW5kaWYgLyogSUtTREIgKi8KLSAgICBpZiAoIUVOQUJMRUQoZW5fYnllKSkgewotCWVycnBrdCgo Q0hBUiAqKSJCWUUgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsKLQlhY2soKTsJ CQkJLyogQWNrbm93bGVkZ2UgKi8KLQlzdWNjZXNzID0gMTsKLQltc2xlZXAoNzUwKTsJCQkvKiBH aXZlIHRoZSBBQ0sgdGltZSB0byBnZXQgb3V0ICovCi0JaWYgKGxvY2FsKQotCSAgdHRyZXMoKTsJ CQkvKiBSZXNldCB0aGUgdGVybWluYWwgKi8KLQl4eHNjcmVlbihTQ1JfVEMsMCwwTCwiIik7CS8q IERpc3BsYXkgKi8KLQlkb2NsZWFuKDEpOwkJCS8qIENsZWFuIHVwIGZpbGVzLCBldGMgKi8KLSNp ZmRlZiBERUJVRwotCWRlYnVnKEYxMDAsIkMtS2VybWl0IEJZRSAtIExvZ2dpbmcgb3V0Li4uIiwi IiwwKTsKLQl6Y2xvc2UoWkRGSUxFKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIElLU0QK LSNpZmRlZiBDS19MT0dJTgotCWlmIChpbnNlcnZlcikKLQkgIGNreGxvZ291dCgpOwotCWVsc2UK LSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBUQ1BTT0NL RVQKLSNpZm5kZWYgTk9MSVNURU4KLQkgIGlmIChuZXR3b3JrICYmIHRjcHNyZmQgPiAwICYmICFp bnNlcnZlcikKLQkgICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOwotCWVsc2UKLSNlbmRpZiAv KiBOT0xJU1RFTiAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCSAgcmV0dXJuKHprc2VsZigp KTsJCS8qIFRyeSB0byBsb2cgc2VsZiBvdXQgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIg Ki8KLX0KLQotPGdlbmVyaWM+SCB7CQkJCS8qIFJFTU9URSBIRUxQICovCi0jaWZkZWYgQ0tTWVNM T0cKLSAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0gICAgICBj a3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgSEVMUCIsIE5VTEwpOwotI2Vu ZGlmIC8qIENLU1lTTE9HICovCi0jaWZkZWYgSUtTREIKLSAgICBpZiAoaWtkYm9wZW4pIHNsb3Rz dGF0ZSh3aGF0LCJSRU1PVEUgSEVMUCIsICIiLCAiIik7Ci0jZW5kaWYgLyogSUtTREIgKi8KLSNp Zm5kZWYgTk9TRVJWRVIKLSAgICBpZiAoc25kaGxwKCkpIHsKLQlCRUdJTiBzc2luaXQ7CQkJLyog dHJ5IHRvIHNlbmQgaXQgKi8KLSAgICB9IGVsc2UgewkJCQkvKiBJZiBub3Qgb2ssICovCi0JZXJy cGt0KChDSEFSICopIkNhbid0IHNlbmQgaGVscCIpOyAvKiBzZW5kIGVycm9yIG1lc3NhZ2UgaW5z dGVhZCAqLwotCVJFU1VNRTsJCQkJLyogYW5kIHJldHVybiB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0 ICovCi0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLTxnZW5lcmljPlIgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBSRU1PVEUgUkVOQU1FICovCi0gICAgcmMgPSBzcnZf cmVuYW1lKCk7Ci0gICAgZGVidWcoRjEwMSwic3J2X3JlbmFtZSIsIiIscmMpOwotICAgIGlmIChy YyA+IC0xKSByZXR1cm4ocmMpOwkJLyogKHNlZSBiZWxvdykgKi8KLX0KLQotPGdlbmVyaWM+SyB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFTU9URSBDT1BZICovCi0gICAgcmMgPSBz cnZfY29weSgpOwotICAgIGRlYnVnKEYxMDEsInNydl9jb3B5IiwiIixyYyk7Ci0gICAgaWYgKHJj ID4gLTEpIHJldHVybihyYyk7CQkvKiAoc2VlIGJlbG93KSAqLwotfQotCi08Z2VuZXJpYz5TIHsJ CQkJLyogUkVNT1RFIFNFVCAqLwotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+ PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJz ZXJ2ZXIiLCAiUkVNT1RFIFNFVCIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xP RyAqLwotI2lmbmRlZiBOT1NFUlZFUgotI2lmZGVmIElLU0RCCi0gICAgaWYgKGlrZGJvcGVuKSBz bG90c3RhdGUod2hhdCwiUkVNT1RFIFNFVCIsIChjaGFyICopKHNydmNtZCsxKSwgIiIpOwotI2Vu ZGlmIC8qIElLU0RCICovCi0gICAgaWYgKCFFTkFCTEVEKGVuX3NldCkpIHsKLQllcnJwa3QoKENI QVIgKikiUkVNT1RFIFNFVCBkaXNhYmxlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgewotCWlm IChyZW1zZXQoKGNoYXIgKikoc3J2Y21kKzEpKSkgeyAvKiBUcnkgdG8gZG8gd2hhdCB0aGV5IGFz ayAqLwotCSAgICBzdWNjZXNzID0gMTsKLQkgICAgYWNrKCk7CQkJLyogSWYgT0ssIHRoZW4gYWNr bm93bGVkZ2UgKi8KLQl9IGVsc2UJCQkJLyogT3RoZXJ3aXNlICovCi0JICBlcnJwa3QoKENIQVIg KikiVW5rbm93biBSRU1PVEUgU0VUIHBhcmFtZXRlciIpOyAvKiBnaXZlIGVycm9yIG1zZyAqLwot CVJFU1VNRTsJCQkJLyogUmV0dXJuIHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8KLSAgICB9Ci0j ZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLQotPGdlbmVyaWM+VCB7CQkJCS8qIFJFTU9URSBUWVBF ICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgY2hhciAqbjI7Ci0jaWZkZWYgQ0tTWVNMT0cKLSAg ICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0gICAgICBja3N5c2xv ZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgVFlQRSIsIChjaGFyICopc3J2Y21kKTsK LSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgIGlmICghRU5BQkxFRChlbl90eXApKSB7Ci0JZXJy cGt0KChDSEFSICopIlJFTU9URSBUWVBFIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxz ZSB7Ci0jaWZkZWYgSUtTREIKLQlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUg VFlQRSIsIChjaGFyICopKHNydmNtZCsyKSwgIiIpOwotI2VuZGlmIC8qIElLU0RCICovCi0JaWYg KCFFTkFCTEVEKGVuX2N3ZCkpIHsJCS8qIElmIENXRCBkaXNhYmxlZCAqLwotCSAgICB6c3RyaXAo KGNoYXIgKikoc3J2Y21kKzIpLCZuMik7IC8qIGFuZCB0aGV5IGluY2x1ZGVkIGEgcGF0aG5hbWUs ICovCi0JICAgIGlmIChzdHJjbXAoKGNoYXIgKikoc3J2Y21kKzIpLG4yKSkgeyAvKiByZWZ1c2Uu ICovCi0JCWVycnBrdCgoQ0hBUiAqKSJBY2Nlc3MgZGVuaWVkIik7Ci0JCVJFU1VNRTsJCQkvKiBS ZW1lbWJlciwgdGhpcyBpcyBub3QgYSBnb3RvISAqLwotCSAgICB9Ci0JfQotCWlmIChzdGF0ZSA9 PSBnZW5lcmljKSB7CQkvKiBJdCdzIE9LIHRvIGdvIGFoZWFkLiAqLwotCSAgICBiaW5hcnkgPSBY WUZUX1Q7CQkvKiBVc2UgdGV4dCBtb2RlIGZvciB0aGlzLiAqLwotCSAgICBpZiAoCQkJLyogKFJF U1VNRSBkaWRuJ3QgY2hhbmdlIHN0YXRlKSAqLwotI2lmZGVmIENPTU1FTlQKLQkgICAgICBzeXNj bWQoVFlQQ01ELChjaGFyICopKHNydmNtZCsyKSkJLyogT2xkIHdheSAqLwotI2Vsc2UKLQkgICAg ICBzbmR0eXBlKChjaGFyICopKHNydmNtZCsyKSkgLyogTmV3IHdheSAqLwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLQkJKQotCSAgICAgIEJFR0lOIHNzaW5pdDsJCS8qIE9LICovCi0JICAgIGVsc2Ug ewkJCS8qIG5vdCBPSyAqLwotCQllcnJwa3QoKENIQVIgKikiQ2FuJ3QgdHlwZSBmaWxlIik7IC8q IGdpdmUgZXJyb3IgbWVzc2FnZSAqLwotCQlSRVNVTUU7CQkJLyogd2FpdCBmb3IgbmV4dCBzZXJ2 ZXIgY29tbWFuZCAqLwotCSAgICB9Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwot fQotCi08Z2VuZXJpYz5tIHsJCQkJLyogUkVNT1RFIE1LRElSICovCi0jaWZuZGVmIE5PU0VSVkVS Ci0jaWZkZWYgQ0tfTUtESVIKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0g U1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2Vy dmVyIiwgIlJFTU9URSBNS0RJUiIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xP RyAqLwotI2lmZGVmIElLU0RCCi0gICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVN T1RFIE1LRElSIiwgKGNoYXIgKikoc3J2Y21kKzIpLCAiIik7Ci0jZW5kaWYgLyogSUtTREIgKi8K LSAgICBpZiAoIUVOQUJMRUQoZW5fbWtkKSkgewotCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgTUtE SVIgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIGlmICghRU5BQkxFRChlbl9jd2Qp KSB7CS8qIElmIENXRCBkaXNhYmxlZCAqLwotCWVycnBrdCgoQ0hBUiAqKSJEaXJlY3RvcnkgYWNj ZXNzIHJlc3RyaWN0ZWQiKTsKLQlSRVNVTUU7CQkJCS8qIFJlbWVtYmVyLCB0aGlzIGlzIG5vdCBh IGdvdG8hICovCi0gICAgfQotICAgIGlmIChzdGF0ZSA9PSBnZW5lcmljKSB7CQkvKiBPSyB0byBn byBhaGVhZC4gKi8KLQljaGFyICpwID0gTlVMTDsKLQl4ID0gY2tta2RpcigwLChjaGFyICopKHNy dmNtZCsyKSwmcCwwLDEpOyAvKiBNYWtlIHRoZSBkaXJlY3RvcnkgKi8KLQlpZiAoIXApIHAgPSAi IjsKLQlpZiAoeCA+IC0xKSB7Ci0JICAgIGVuY3N0cigoQ0hBUiAqKXApOwkJLyogT0sgLSBlbmNv ZGUgdGhlIG5hbWUgKi8KLQkgICAgYWNrMShkYXRhKTsJCQkvKiBTZW5kIHNob3J0LWZvcm0gcmVz cG9uc2UgKi8KLQkgICAgc3VjY2VzcyA9IDE7Ci0JICAgIFJFU1VNRTsKLQl9IGVsc2UgewkJCS8q IG5vdCBPSyAqLwotCSAgICBpZiAoISpwKSBwID0gIkRpcmVjdG9yeSBjcmVhdGlvbiBmYWlsdXJl IjsKLQkgICAgZXJycGt0KChDSEFSICopcCk7CQkvKiBnaXZlIGVycm9yIG1lc3NhZ2UgKi8KLQkg ICAgUkVTVU1FOwkJCS8qIFdhaXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KLQl9Ci0gICAg fQotI2Vsc2UKLSAgICBlcnJwa3QoKENIQVIgKikiUkVNT1RFIE1LRElSIG5vdCBhdmFpbGFibGUi KTsKLSAgICBSRVNVTUU7Ci0jZW5kaWYgLyogQ0tfTUtESVIgKi8KLSNlbmRpZiAvKiBOT1NFUlZF UiAqLwotfQotCi08Z2VuZXJpYz5kIHsJCQkJLyogUkVNT1RFIFJNRElSICovCi0jaWZuZGVmIE5P U0VSVkVSCi0jaWZkZWYgQ0tfTUtESVIKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNs b2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAx LCAic2VydmVyIiwgIlJFTU9URSBSTURJUiIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBD S1NZU0xPRyAqLwotI2lmZGVmIElLU0RCCi0gICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hh dCwiUkVNT1RFIFJNRElSIiwgKGNoYXIgKikoc3J2Y21kKzIpLCAiIik7Ci0jZW5kaWYgLyogSUtT REIgKi8KLSAgICBpZiAoIUVOQUJMRUQoZW5fcm1kKSkgewotCWVycnBrdCgoQ0hBUiAqKSJSRU1P VEUgUk1ESVIgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIGlmICghRU5BQkxFRChl bl9jd2QpKSB7CS8qIElmIENXRCBkaXNhYmxlZCAqLwotCWVycnBrdCgoQ0hBUiAqKSJEaXJlY3Rv cnkgYWNjZXNzIHJlc3RyaWN0ZWQiKTsKLQlSRVNVTUU7CQkJCS8qIFJlbWVtYmVyLCB0aGlzIGlz IG5vdCBhIGdvdG8hICovCi0gICAgfQotICAgIGlmIChzdGF0ZSA9PSBnZW5lcmljKSB7CQkvKiBP SyB0byBnbyBhaGVhZC4gKi8KLQljaGFyICpwID0gTlVMTDsKLQl4ID0gY2tta2RpcigxLChjaGFy ICopKHNydmNtZCsyKSwmcCwwLDEpOwotCWlmICghcCkgcCA9ICIiOwotCWlmICh4ID4gLTEpIHsK LQkgICAgZW5jc3RyKChDSEFSICopcCk7CQkvKiBPSyAtIGVuY29kZSB0aGUgbmFtZSAqLwotCSAg ICBhY2sxKGRhdGEpOwkJCS8qIFNlbmQgc2hvcnQtZm9ybSByZXNwb25zZSAqLwotCSAgICBzdWNj ZXNzID0gMTsKLQkgICAgUkVTVU1FOwotCX0gZWxzZSB7CQkJLyogbm90IE9LICovCi0JICAgIGlm ICghKnApIHAgPSAiRGlyZWN0b3J5IHJlbW92YWwgZmFpbHVyZSI7Ci0JICAgIGVycnBrdCgoQ0hB UiAqKXApOwkJLyogZ2l2ZSBlcnJvciBtZXNzYWdlICovCi0JICAgIFJFU1VNRTsJCQkvKiBXYWl0 IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICovCi0JfQotICAgIH0KLSNlbHNlCi0gICAgZXJycGt0 KChDSEFSICopIlJFTU9URSBSTURJUiBub3QgYXZhaWxhYmxlIik7Ci0gICAgUkVTVU1FOwotI2Vu ZGlmIC8qIENLX01LRElSICovCi0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLQotPGdlbmVyaWM+ VSB7CQkJCS8qIFJFTU9URSBTUEFDRSAqLwotI2lmbmRlZiBOT1NFUlZFUgotI2lmZGVmIENLU1lT TE9HCi0gICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAg Y2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFNQQUNFIiwgKGNoYXIgKilz cnZjbWQpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgaWYgKCFFTkFCTEVEKGVuX3NwYSkp IHsKLQllcnJwa3QoKENIQVIgKikiUkVNT1RFIFNQQUNFIGRpc2FibGVkIik7Ci0JUkVTVU1FOwot ICAgIH0gZWxzZSB7Ci0JeCA9IHNydmNtZFsxXTsJCQkvKiBHZXQgYXJlYSB0byBjaGVjayAqLwot CXggPSAoKHggPT0gTlVMKSB8fCAoeCA9PSBTUCkKLSNpZmRlZiBPUzIKLQkgICAgIHx8ICh4ID09 ICchJykgfHwgKHNydmNtZFszXSA9PSAnOicpCi0jZW5kaWYgLyogT1MyICovCi0JICAgICApOwot I2lmZGVmIElLU0RCCi0JaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwKLQkJCSAgICAgICJS RU1PVEUgU1BBQ0UiLAotCQkJICAgICAgKHggPyAiIiA6IChjaGFyICopc3J2Y21kKSwKLQkJCSAg ICAgICIiCi0JCQkgICAgICApOwotI2VuZGlmIC8qIElLU0RCICovCi0JaWYgKCF4ICYmICFFTkFC TEVEKGVuX2N3ZCkpIHsJLyogQ1dEIGRpc2FibGVkICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSJB Y2Nlc3MgZGVuaWVkIik7IC8qIGFuZCBub24tZGVmYXVsdCBhcmVhIGdpdmVuLCAqLwotCSAgICBS RVNVTUU7CQkJLyogcmVmdXNlLiAqLwotCX0gZWxzZSB7Ci0jaWZkZWYgT1MyCi1fUFJPVE9UWVAo aW50IHNuZHNwYWNlLChpbnQpKTsKLQkgICAgaWYgKHNuZHNwYWNlKHggPyB0b3VwcGVyKHNydmNt ZFsyXSkgOiAwKSkgewotCQlCRUdJTiBzc2luaXQ7CQkvKiBzZW5kIHRoZSByZXBvcnQuICovCi0J ICAgIH0gZWxzZSB7CQkJLyogSWYgbm90IG9rLCAqLwotCQllcnJwa3QoKENIQVIgKikiQ2FuJ3Qg c2VuZCBzcGFjZSIpOyAvKiBzZW5kIGVycm9yIG1lc3NhZ2UgKi8KLQkJUkVTVU1FOwkJCS8qIGFu ZCByZXR1cm4gdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLwotCSAgICB9Ci0jZWxzZQotICAgICAg ICAgICAgaWYgKG5vcHVzaCkKLSAgICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAgICBlbHNl Ci0gICAgICAgICAgICAgIHggPSAoeCA/IHN5c2NtZChTUEFDTUQsIiIpIDogc3lzY21kKFNQQUNN MiwoY2hhciAqKShzcnZjbWQrMikpKTsKLQkgICAgaWYgKHgpIHsJCQkvKiBJZiB3ZSBnb3QgdGhl IGluZm8gKi8KLQkJQkVHSU4gc3Npbml0OwkJLyogc2VuZCBpdCAqLwotCSAgICB9IGVsc2UgewkJ CS8qIG90aGVyd2lzZSAqLwotCQllcnJwa3QoKENIQVIgKikiQ2FuJ3QgY2hlY2sgc3BhY2UiKTsg Lyogc2VuZCBlcnJvciBtZXNzYWdlICovCi0JCVJFU1VNRTsJCQkvKiBhbmQgYXdhaXQgbmV4dCBz ZXJ2ZXIgY29tbWFuZCAqLwotCSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0JfQotICAgIH0KLSNl bmRpZiAvKiBOT1NFUlZFUiAqLwotfQotCi08Z2VuZXJpYz5XIHsJCQkJLyogUkVNT1RFIFdITyAq LwotI2lmbmRlZiBOT1NFUlZFUgotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+ PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJz ZXJ2ZXIiLCAiUkVNT1RFIFdITyIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xP RyAqLwotI2lmZGVmIElLU0RCCi0gICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVN T1RFIFdITyIsIChjaGFyICopKHNydmNtZCsyKSwgIiIpOwotI2VuZGlmIC8qIElLU0RCICovCi0g ICAgaWYgKCFFTkFCTEVEKGVuX3dobykpIHsKLQllcnJwa3QoKENIQVIgKikiUkVNT1RFIFdITyBk aXNhYmxlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgewotI2lmZGVmIE9TMgotX1BST1RPVFlQ KGludCBzbmR3aG8sKGNoYXIgKikpOwotCSAgICBpZiAoc25kd2hvKChjaGFyICopKHNydmNtZCsy KSkpIHsKLQkJQkVHSU4gc3Npbml0OwkJLyogdHJ5IHRvIHNlbmQgaXQgKi8KLQkgICAgfSBlbHNl IHsJCQkvKiBJZiBub3Qgb2ssICovCi0JCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBkbyB3aG8gY29t bWFuZCIpOyAvKiBzZW5kIGVycm9yIG1zZyAqLwotCQlSRVNVTUU7CQkJLyogYW5kIHJldHVybiB0 byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCi0JICAgIH0KLSNlbHNlCi0JaWYgKHN5c2NtZChXSE9D TUQsKGNoYXIgKikoc3J2Y21kKzIpKSkgewotCSAgICBCRUdJTiBzc2luaXQ7Ci0JfSBlbHNlIHsK LQkgICAgZXJycGt0KChDSEFSICopIkNhbid0IGRvIHdobyBjb21tYW5kIik7Ci0JICAgIFJFU1VN RTsKLQl9Ci0jZW5kaWYgLyogT1MyICovCi0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19 Ci0KLTxnZW5lcmljPlYgewkJCQkvKiBWYXJpYWJsZSBxdWVyeSBvciBzZXQgKi8KLSAgICByYyA9 IHNydl9xdWVyeSgpOwotICAgIGRlYnVnKEYxMDEsInNydl9xdWVyeSIsIiIscmMpOwotICAgIGlm IChyYyA+IC0xKSByZXR1cm4ocmMpOwotfQotCi08Z2VuZXJpYz5NIHsJCQkJLyogUkVNT1RFIE1F U1NBR0UgY29tbWFuZCAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIGRlYnVnKEYxMTAsIlJNU0ci LChjaGFyICopc3J2Y21kKzIsMCk7Ci0gICAgeHhzY3JlZW4oU0NSX01TLDAsMEwsKGNoYXIgKiko c3J2Y21kKzIpKTsKLSAgICBhY2soKTsKLSAgICBSRVNVTUU7Ci0jZW5kaWYJLyogTk9TRVJWRVIg Ki8KLX0KLQotPGdlbmVyaWM+cSB7CQkJCS8qIEludGVycnVwdGVkIG9yIGNvbm5lY3Rpb24gbG9z dCAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIGlmIChmYXRhbGlvKSB7CQkJLyogQ29ubmVjdGlv biBsb3N0ICovCi0jaWZkZWYgQ0tTWVNMT0cKLQlpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYm IGNreGxvZ2dpbmcpCi0JICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJJbnRlcnJ1 cHRlZCIsIE5VTEwpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0Jc3VjY2VzcyA9IDA7Ci0JeGl0 c3RhIHw9ICh3aGF0ICYgV19LRVJNSVQpOwotCVFVSVQ7Ci0gICAgfSBlbHNlIGlmIChpbnRlcnJ1 cHRlZCkgewotCWlmICghRU5BQkxFRChlbl9maW4pKSB7CQkvKiBDdHJsLUMgdHlwZWQgKi8KLQkg ICAgZXJycGt0KChDSEFSICopIlFVSVQgZGlzYWJsZWQiKTsKLQkgICAgUkVTVU1FOwotCX0gZWxz ZSB7Ci0jaWZkZWYgQ0tTWVNMT0cKLQkgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBj a3hsb2dnaW5nKQotCSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkludGVy cnVwdGVkIiwgTlVMTCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQkgICAgc3VjY2VzcyA9IDA7 Ci0JICAgIHhpdHN0YSB8PSAod2hhdCAmIFdfS0VSTUlUKTsKLQkgICAgUVVJVDsKLQl9Ci0gICAg fSBlbHNlIHsJCQkJLyogU2hvdWxkbid0IGhhcHBlbiAqLwotCWRlYnVnKEYxMDAsIlNFUlZFUiAo Z2VuZXJpYykgR09UIFVORVhQRUNURUQgJ3EnIiwiIiwwKTsKLQlRVUlUOwotICAgIH0KLSNlbmRp ZiAvKiBOT1NFUlZFUiAqLwotfQotCi08Z2VuZXJpYz4uIHsJCQkJLyogQW55dGhpbmcgZWxzZSBp biB0aGlzIHN0YXRlLi4uICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgZXJycGt0KChDSEFSICop IlVuaW1wbGVtZW50ZWQgUkVNT1RFIGNvbW1hbmQiKTsgLyogQ29tcGxhaW4gKi8KLSAgICBSRVNV TUU7CQkJCS8qIGFuZCByZXR1cm4gdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLwotI2VuZGlmIC8q IE5PU0VSVkVSICovCi19Ci0KLTxyZ2VuPnEgewkJCQkvKiBTZW50IEJZRSBhbmQgY29ubmVjdGlv biBicm9rZW4gKi8KLSAgICBpZiAoYnllX2FjdGl2ZSAmJiB0dGNoaygpIDwgMCkgewotCW1zbGVl cCg1MDApOwotCWJ5ZV9hY3RpdmUgPSAwOwotCXR0Y2xvcygwKTsJCQkvKiBDbG9zZSBvdXIgZW5k IG9mIHRoZSBjb25uZWN0aW9uICovCi0JY2xzb2YoMCk7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK LSAgICB9IGVsc2UgewkJCQkvKiBPdGhlciBnZW5lcmljIGNvbW1hbmQgKi8KLQlyZXR1cm4oc3Vj Y2VzcyA9IDApOwkJLyogb3IgY29ubmVjdGlvbiBub3QgYnJva2VuICovCi0gICAgfQotfQotCi08 cmdlbj5ZIHsJCQkJLyogU2hvcnQtRm9ybSByZXBseSAqLwotICAgIHJjID0gcmN2X3Nob3J0cmVw bHkoKTsKLSAgICBkZWJ1ZyhGMTAxLCI8cmdlbj5ZIHJjdl9zaG9ydHJlcGx5IiwiIixyYyk7Ci0g ICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7Ci19Ci0KLTxyZ2VuLHJmaWxlPkYgewkJCQkvKiBG aWxlIGhlYWRlciAqLwotICAgIC8qIGNoYXIgKm4yOyAqLwotICAgIGV4dGVybiBpbnQgcnNuOwot ICAgIGRlYnVnKEYxMDEsIjxyZmlsZT5GIHdpbmxvIDEiLCIiLHdpbmxvKTsKLSAgICB4ZmxnID0g MDsJCQkJLyogTm90IHNjcmVlbiBkYXRhICovCi0gICAgaWYgKCFjenNlZW4pCi0gICAgICBjYW5j ZWwgPSAwOwkJCS8qIFJlc2V0IGNhbmNlbGxhdGlvbiBjb3VudGVyICovCi0jaWZkZWYgQ0FMSUJS QVRFCi0gICAgaWYgKGRlc3QgPT0gREVTVF9OKQotICAgICAgY2FsaWJyYXRlID0gMTsKLSNlbmRp ZiAvKiBDQUxJQlJBVEUgKi8KLSAgICBpZiAoIXJjdmZpbChmaWxuYW0pKSB7CQkvKiBGaWd1cmUg b3V0IGxvY2FsIGZpbGVuYW1lICovCi0JZXJycGt0KChDSEFSICopcmZfZXJyKTsJCS8qIFRyb3Vi bGUgKi8KLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsJCQkJLyogUmVhbCBmaWxlLCBPSyB0byByZWNl aXZlICovCi0JY2hhciAqIGZucDsKLQlkZWJ1ZyhGMTExLCI8cmZpbGU+RiB3aW5sbyAyIixmc3Bl Yyx3aW5sbyk7Ci0JaWYgKGZpbGNudCA9PSAxKQkJLyogcmN2ZmlsIHNldCB0aGlzIHRvIDEgZm9y IDFzdCBmaWxlICovCi0JICBjcmMxNiA9IDBMOwkJCS8qIENsZWFyIGZpbGUgQ1JDICovCi0JZm5w ID0gZnNwZWM7CQkJLyogVGhpcyBpcyB0aGUgZnVsbCBwYXRoICovCi0JaWYgKHNlcnZlciAmJiAh RU5BQkxFRChlbl9jd2QpIHx8IC8qIGlmIERJU0FCTEUgQ0QgKi8KLQkgICAgIWZhY2twYXRoCQkJ ICAvKiBvciBGLUFDSy1QQVRIIE9GRiAqLwotCSAgICApIHsKLQkgICAgenN0cmlwKGZzcGVjLCZm bnApOwkJLyogZG9uJ3Qgc2VuZCBiYWNrIGZ1bGwgcGF0aCAqLwotCX0KLQllbmNzdHIoKENIQVIg KilmbnApOwotCWlmIChmYWNrYnVnKQotCSAgYWNrKCk7Ci0JZWxzZQotCSAgYWNrMShkYXRhKTsJ CQkvKiBTZW5kIGl0IGJhY2sgaW4gQUNLICovCi0JaW5pdGF0dHIoJmlhdHRyKTsJCS8qIENsZWFy IGZpbGUgYXR0cmlidXRlIHN0cnVjdHVyZSAqLwotCXN0cmVhbW9uKCk7Ci0JaWYgKHdpbmRvdyh3 c2xvdG4pIDwgMCkgewkvKiBBbGxvY2F0ZSBuZWdvdGlhdGVkIHdpbmRvdyBzbG90cyAqLwotCSAg ICBlcnJwa3QoKENIQVIgKikiQ2FuJ3Qgb3BlbiB3aW5kb3ciKTsKLQkgICAgUkVTVU1FOwotCX0K LSNpZmRlZiBJS1NEQgotCWlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsCi0JCQkgICAgICBz ZXJ2ZXIgPyAiU0VSVkVSIiA6ICIiLAotCQkJICAgICAgIlJFQ0VJVkUiLAotCQkJICAgICAgZnNw ZWMKLQkJCSAgICAgICk7Ci0jZW5kaWYgLyogSUtTREIgKi8KLQlCRUdJTiByYXR0cjsJCQkvKiBO b3cgZXhwZWN0IEF0dHJpYnV0ZSBwYWNrZXRzICovCi0gICAgfQotfQotCi08cmdlbixyZmlsZT5Y IHsJCQkJLyogWC1wYWNrZXQgaW5zdGVhZCBvZiBmaWxlIGhlYWRlciAqLwotICAgIHhmbGcgPSAx OwkJCQkvKiBTY3JlZW4gZGF0YSAqLwotICAgIGlmICghY3pzZWVuKQotICAgICAgY2FuY2VsID0g MDsJCQkvKiBSZXNldCBjYW5jZWxsYXRpb24gY291bnRlciAqLwotICAgIGFjaygpOwkJCQkvKiBB Y2tub3dsZWRnZSB0aGUgWC1wYWNrZXQgKi8KLSAgICBpbml0YXR0cigmaWF0dHIpOwkJCS8qIElu aXRpYWxpemUgYXR0cmlidXRlIHN0cnVjdHVyZSAqLwotICAgIHN0cmVhbW9uKCk7Ci0gICAgaWYg KHdpbmRvdyh3c2xvdG4pIDwgMCkgewkJLyogYWxsb2NhdGUgbmVnb3RpYXRlZCB3aW5kb3cgc2xv dHMgKi8KLQllcnJwa3QoKENIQVIgKikiQ2FuJ3Qgb3BlbiB3aW5kb3ciKTsKLQlSRVNVTUU7Ci0g ICAgfQotI2lmbmRlZiBOT1NQTAotICAgIGlmIChxdWVyeSkgewkJCS8qIElmIHRoaXMgaXMgdGhl IHJlc3BvbnNlIHRvICovCi0JcWJ1ZnAgPSBxdWVyeWJ1ZjsJCS8qIGEgcXVlcnkgdGhhdCB3ZSBz ZW50LCBpbml0aWFsaXplICovCi0JcWJ1Zm4gPSAwOwkJCS8qIHRoZSByZXNwb25zZSBidWZmZXIg Ki8KLQlxdWVyeWJ1ZlswXSA9IE5VTDsKLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB3 aGF0ID0gV19SRU1POwkJCS8qIHdlJ3JlIGRvaW5nIGEgUkVNT1RFIGNvbW1hbmQgKi8KLSNpZmRl ZiBJS1NEQgotICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsCi0JCQkgIHNlcnZlciA/ ICJTRVJWRVIiIDogIiIsCi0JCQkgICJSRUNFSVZFIiwKLQkJCSAgZnNwZWMKLQkJCSAgKTsKLSNl bmRpZiAvKiBJS1NEQiAqLwotICAgIEJFR0lOIHJhdHRyOwkJCS8qIEV4cGVjdCBBdHRyaWJ1dGUg cGFja2V0cyAqLwotfQotCi08cmF0dHI+QSB7CQkJCS8qIEF0dHJpYnV0ZSBwYWNrZXQgKi8KLSAg ICBpZiAoZ2F0dHIocmRhdGFwLCZpYXR0cikgPT0gMCkgewkvKiBSZWFkIGludG8gYXR0cmlidXRl IHN0cnVjdHVyZSAqLwotI2lmZGVmIENLX1JFU0VORAotCWFjazEoKENIQVIgKilpYXR0ci5yZXBs eS52YWwpOwkvKiBSZXBseSB3aXRoIGRhdGEgKi8KLSNlbHNlCi0JYWNrKCk7CQkJCS8qIElmIE9L LCBhY2tub3dsZWRnZSAqLwotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotICAgIH0gZWxzZSB7CQkJ CS8qIE90aGVyd2lzZSAqLwotCWV4dGVybiBsb25nIGZzaXplOwotCWNoYXIgKnI7Ci0JciA9IGdl dHJlYXNvbihpYXR0ci5yZXBseS52YWwpOwotCWFjazEoKENIQVIgKilpYXR0ci5yZXBseS52YWwp OwkvKiByZWZ1c2UgdG8gYWNjZXB0IHRoZSBmaWxlICovCi0JeHhzY3JlZW4oU0NSX1NULFNUX1JF RlUsMEwscik7CS8qIHJlYXNvbiAqLwotI2lmZGVmIFRMT0cKLQlpZiAodHJhbG9nICYmICF0bG9n Zm10KQotCSAgZG94bG9nKHdoYXQsZmlsbmFtLGZzaXplLGJpbmFyeSwxLHIpOwotI2VuZGlmIC8q IFRMT0cgKi8KLSAgICB9Ci19Ci0KLTxyYXR0cj5EIHsJCQkJLyogRmlyc3QgZGF0YSBwYWNrZXQg Ki8KLSAgICBkZWJ1ZyhGMTAwLCI8cmF0dHI+IEQgZmlyc3RkYXRhIiwiIiwwKTsKLSAgICByYyA9 IHJjdl9maXJzdGRhdGEoKTsKLSAgICBkZWJ1ZyhGMTAxLCJyY3ZfZmlyc3RkYXRhIHJjIiwiIixy Yyk7Ci0gICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7CQkvKiAoc2VlIGJlbG93KSAqLwotfQot Ci08cmZpbGU+QiB7CQkJCS8qIEVPVCwgbm8gbW9yZSBmaWxlcyAqLwotICAgIGFjaygpOwkJCQkv KiBBY2tub3dsZWRnZSB0aGUgQiBwYWNrZXQgKi8KLSAgICByZW90KCk7CQkJCS8qIERvIEVPVCB0 aGluZ3MgKi8KLSNpZmRlZiBDS19UTVBESVIKLS8qIElmIHdlIHdlcmUgY2QnZCB0ZW1wb3Jhcmls eSB0byBhbm90aGVyIGRldmljZSBvciBkaXJlY3RvcnkgLi4uICovCi0gICAgaWYgKGZfdG1wZGly KSB7Ci0JaW50IHg7Ci0JeCA9IHpjaGRpcigoY2hhciAqKSBzYXZkaXIpOwkvKiAuLi4gcmVzdG9y ZSBwcmV2aW91cyBkaXJlY3RvcnkgKi8KLQlmX3RtcGRpciA9IDA7CQkJLyogYW5kIHJlbWVtYmVy IHdlIGRpZCBpdC4gKi8KLQlkZWJ1ZyhGMTExLCJja2Nwcm8udyBCIHRtcGRpciByZXN0b3Jpbmci LHNhdmRpcix4KTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0gICAgUkVTVU1FOwkJ CQkvKiBhbmQgcXVpdCAqLwotfQotCi08cmRwa3Q+RCB7CQkJCS8qIEdvdCBEYXRhIHBhY2tldCAq LwotICAgIGRlYnVnKEYxMDEsIjxyZHBrdD5EIGN4c2VlbiIsIiIsY3hzZWVuKTsKLSAgICBkZWJ1 ZyhGMTAxLCI8cmRwa3Q+RCBjenNlZW4iLCIiLGN6c2Vlbik7Ci0gICAgaWYgKGN4c2VlbiB8fCBj enNlZW4gfHwgZGlzY2FyZCkgewkvKiBJZiBmaWxlIG9yIGdyb3VwIGludGVycnVwdGlvbiAqLwot CUNIQVIgKiBtc2c7Ci0JbXNnID0gY3pzZWVuID8gKENIQVIgKikiWiIgOiAoQ0hBUiAqKSJYIjsK LSNpZmRlZiBTVFJFQU1JTkcKLQlpZiAoc3RyZWFtaW5nKSB7CQkvKiBOZWVkIHRvIGNhbmNlbCAq LwotCSAgICBkZWJ1ZyhGMTExLCI8cmRwa3Q+RCBzdHJlYW1pbmcgY2FuY2VsIixtc2csY2FuY2Vs KTsKLQkgICAgaWYgKGNhbmNlbCsrID09IDApIHsJLyogT25seSBkbyB0aGlzIG9uY2UgKi8KLQkJ YWNrMShtc2cpOwkJLyogUHV0ICJYIiBvciAiWiIgaW4gQUNLICovCi0JICAgIH0gZWxzZSBpZiAo Y3pzZWVuKSB7Ci0JCWVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNlbGVkIik7Ci0JCVJFU1VNRTsK LQkgICAgfSBlbHNlIHsKLQkJZmFzdGFjaygpOwotCSAgICB9Ci0JfSBlbHNlCi0jZW5kaWYgLyog U1RSRUFNSU5HICovCi0JICBhY2sxKG1zZyk7Ci0gICAgfSBlbHNlIHsJCQkJLyogTm8gaW50ZXJy dXB0aW9uICovCi0JaW50IHJjLCBxZjsKLSNpZm5kZWYgTk9TUEwKLQlxZiA9IHF1ZXJ5OwotI2Vs c2UKLQlxZiA9IDA7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZmRlZiBDS1RVTklORwotCXJjID0g KGJpbmFyeSAmJiAhcGFyaXR5KSA/Ci0JICBiZGVjb2RlKHJkYXRhcCxwdXRmaWwpOgotCSAgICBk ZWNvZGUocmRhdGFwLCBxZiA/IHB1dHRybSA6IHB1dGZpbCwgMSk7Ci0jZWxzZQotCXJjID0gZGVj b2RlKHJkYXRhcCwgcWYgPyBwdXR0cm0gOiBwdXRmaWwsIDEpOwotI2VuZGlmIC8qIENLVFVOSU5H ICovCi0JaWYgKHJjIDwgMCkgewotCSAgICBkaXNjYXJkID0gKGtlZXAgPT0gMCB8fCAoa2VlcCA9 PSBTRVRfQVVUTyAmJiBiaW5hcnkgIT0gWFlGVF9UKSk7Ci0JICAgIGVycnBrdCgoQ0hBUiAqKSJF cnJvciB3cml0aW5nIGRhdGEiKTsgLyogSWYgZmFpbHVyZSwgKi8KLQkgICAgUkVTVU1FOwotCX0g ZWxzZQkJCQkvKiBEYXRhIHdyaXR0ZW4gT0ssIHNlbmQgQUNLICovCi0jaWZkZWYgU1RSRUFNSU5H Ci0JICBpZiAoc3RyZWFtaW5nKQotCSAgICBmYXN0YWNrKCk7Ci0JZWxzZQotI2VuZGlmIC8qIFNU UkVBTUlORyAqLwotCSAgYWNrKCk7Ci0gICAgfQotfQotCi08cmF0dHI+WiB7CQkJCS8qIEVPRiBp bW1lZGlhdGVseSBhZnRlciBBLVBhY2tldC4gKi8KLSAgICByZl9lcnIgPSAiQ2FuJ3QgY3JlYXRl IGZpbGUiOwotICAgIHRpbWludCA9IHNfdGltaW50OwotICAgIGlmIChkaXNjYXJkKSB7CQkJLyog RGlzY2FyZGluZyBhIHJlYWwgZmlsZS4uLiAqLwotCXggPSAxOwotICAgIH0gZWxzZSBpZiAoeGZs ZykgewkJCS8qIElmIHNjcmVlbiBkYXRhICovCi0JaWYgKHJlbWZpbGUpIHsJCQkvKiByZWRpcmVj dGVkIHRvIGZpbGUgKi8KLQkgICAgaWYgKHJlbXBpcGUpCQkvKiBvciBwaXBlICovCi0JICAgICAg eCA9IG9wZW5jKFpPRklMRSxyZW1kZXN0KTsgLyogUGlwZTogc3RhcnQgY29tbWFuZCAqLwotCSAg ICBlbHNlCi0JICAgICAgeCA9IG9wZW5hKHJlbWRlc3QsJmlhdHRyKTsgLyogRmlsZTogb3BlbiB3 aXRoIGF0dHJpYnV0ZXMgKi8KLQl9IGVsc2UgewkJCS8qIG90aGVyd2lzZSAqLwotCSAgICB4ID0g b3BlbnQoJmlhdHRyKTsJCS8qICJvcGVuIiB0aGUgc2NyZWVuICovCi0JfQotI2lmZGVmIENBTElC UkFURQotICAgIH0gZWxzZSBpZiAoY2FsaWJyYXRlKSB7CQkvKiBJZiBjYWxpYnJhdGlvbiBydW4g Ki8KLQl4ID0gY2tvcGVueCgmaWF0dHIpOwkJLyogZG8gdGhpcyAqLwotI2VuZGlmIC8qIENBTElC UkFURSAqLwotICAgIH0gZWxzZSB7CQkJCS8qIG90aGVyd2lzZSAqLwotCXggPSBvcGVuYShmaWxu YW0sJmlhdHRyKTsJLyogb3BlbiB0aGUgZmlsZSwgd2l0aCBhdHRyaWJ1dGVzICovCi0JaWYgKHgg PT0gLTE3KSB7CQkJLyogUkVHRVQgc2tpcHBlZCBiZWNhdXNlIHNhbWUgc2l6ZSAqLwotCSAgICBk aXNjYXJkID0gMTsKLQkgICAgcmVqZWN0aW9uID0gMTsKLQl9Ci0gICAgfQotICAgIGlmICgheCB8 fCByZW9mKGZpbG5hbSwgJmlhdHRyKSA8IDApIHsgLyogQ2xvc2Ugb3V0cHV0IGZpbGUgKi8KLQll cnJwa3QoKENIQVIgKikgcmZfZXJyKTsJLyogSWYgcHJvYmxlbSwgc2VuZCBlcnJvciBtc2cgKi8K LQlSRVNVTUU7CQkJCS8qIGFuZCBxdWl0ICovCi0gICAgfSBlbHNlIHsJCQkJLyogb3RoZXJ3aXNl ICovCi0JaWYgKHggPT0gLTE3KQotCSAgeHhzY3JlZW4oU0NSX1NULFNUX1NLSVAsU0tQX1JFUywi Iik7Ci0JYWNrKCk7CQkJCS8qIGFja25vd2xlZGdlIHRoZSBFT0YgcGFja2V0ICovCi0JQkVHSU4g cmZpbGU7CQkJLyogYW5kIGF3YWl0IGFub3RoZXIgZmlsZSAqLwotICAgIH0KLX0KLQotPHJkcGt0 PnEgeyAgCQkJCS8qIEN0cmwtQyBvciBjb25uZWN0aW9uIGxvc3MuICovCi0gICAgdGltaW50ID0g c190aW1pbnQ7Ci0gICAgd2luZG93KDEpOwkJCQkvKiBTZXQgd2luZG93IHNpemUgYmFjayB0byAx Li4uICovCi0gICAgY3hzZWVuID0gMTsKLSAgICB4ID0gY2xzb2YoMSk7CQkJLyogQ2xvc2UgZmls ZSAqLwotICAgIHJldHVybihzdWNjZXNzID0gMCk7CQkvKiBGYWlsZWQgKi8KLX0KLQotPHJkcGt0 PlogewkJCQkvKiBFbmQgT2YgRmlsZSAoRU9GKSBQYWNrZXQgKi8KLS8qICB3c2xvdHMgPSAxOwkq LwkJCS8qIChkb24ndCBzZXQpIFdpbmRvdyBzaXplIGJhY2sgdG8gMSAqLwotI2lmbmRlZiBDT0hF UkVOVCAvKiBDb2hlcmVudCBjb21waWxlciBibG93cyB1cCBvbiB0aGlzIHN3aXRjaCgpIHN0YXRl bWVudC4gKi8KLSAgICB4ID0gcmVvZihmaWxuYW0sICZpYXR0cik7CQkvKiBIYW5kbGUgdGhlIEVP RiBwYWNrZXQgKi8KLSAgICBzd2l0Y2ggKHgpIHsJCQkvKiByZW9mKCkgc2V0cyB0aGUgc3VjY2Vz cyBmbGFnICovCi0gICAgICBjYXNlIC01OgkJCQkvKiBIYW5kbGUgcHJvYmxlbXMgKi8KLQllcnJw a3QoKENIQVIgKikiUkVOQU1FIGZhaWxlZCIpOyAvKiBGYXRhbCAqLwotCVJFU1VNRTsKLQlicmVh azsKLSAgICAgIGNhc2UgLTQ6Ci0JZXJycGt0KChDSEFSICopIk1PVkUgZmFpbGVkIik7CS8qIEZh dGFsICovCi0JUkVTVU1FOwotCWJyZWFrOwotICAgICAgY2FzZSAtMzoJCQkJLyogSWYgcHJvYmxl bSwgc2VuZCBlcnJvciBtc2cgKi8KLQllcnJwa3QoKENIQVIgKikiQ2FuJ3QgcHJpbnQgZmlsZSIp OyAvKiBGYXRhbCAqLwotCVJFU1VNRTsKLQlicmVhazsKLSAgICAgIGNhc2UgLTI6Ci0JZXJycGt0 KChDSEFSICopIkNhbid0IG1haWwgZmlsZSIpOyAvKiBGYXRhbCAqLwotCVJFU1VNRTsKLQlicmVh azsKLSAgICAgIGNhc2UgMjoJCQkJLyogTm90IGZhdGFsICovCi0gICAgICBjYXNlIDM6Ci0JeHhz Y3JlZW4oU0NSX0VNLDAsMEwsIlJlY2VpdmVyIGNhbid0IGRlbGV0ZSB0ZW1wIGZpbGUiKTsKLQlS RVNVTUU7Ci0JYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotCWlmICh4IDwgMCkgewkJCS8qIEZhdGFs ICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBjbG9zZSBmaWxlIik7Ci0JICAgIFJFU1VN RTsKLQl9IGVsc2UgewkJCS8qIFN1Y2Nlc3MgKi8KLSNpZm5kZWYgTk9TUEwKLQkgICAgaWYgKHF1 ZXJ5KQkJCS8qIFF1ZXJ5IHJlcG9uc2VzIGdlbmVyYWxseSAqLwotCSAgICAgIGNvbm9sbCgiIik7 CQkvKiBkb24ndCBoYXZlIGxpbmUgdGVybWluYXRvcnMgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwot CSAgICBpZiAoY3pzZWVuKSB7CQkvKiBCYXRjaCBjYW5jZWxlZD8gKi8KLQkJaWYgKGNhbmNlbCsr ID09IDApIHsJLyogSWYgd2UgaGF2ZW4ndCB0cmllZCB0aGlzIHlldCAqLwotCQkgICAgYWNrMSgo Q0hBUiAqKSJaIik7CS8qIFRyeSBpdCBvbmNlICovCi0JCX0gZWxzZSB7CQkvKiBPdGhlcndpc2Ug Ki8KLQkJICAgIGVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNlbGVkIik7IC8qIHF1aXRlIHdpdGgg RXJyb3IgKi8KLQkJICAgIFJFU1VNRTsKLQkJfQotCSAgICB9IGVsc2UKLQkgICAgICBhY2soKTsJ CQkvKiBBY2tub3dsZWRnZSB0aGUgRU9GIHBhY2tldCAqLwotCSAgICBCRUdJTiByZmlsZTsJCS8q IGFuZCBhd2FpdCBhbm90aGVyIGZpbGUgKi8KLQl9Ci0gICAgfQotI2Vsc2UKLSAgICBpZiAocmVv ZihmaWxuYW0sICZpYXR0cikgPCAwKSB7CS8qIENsb3NlIHRoZSBmaWxlICovCi0JZXJycGt0KChD SEFSICopIkVycm9yIGF0IGVuZCBvZiBmaWxlIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7CQkJ CS8qIHJlb2YoKSBzZXRzIHN1Y2Nlc3MgZmxhZyAqLwotCWFjaygpOwotCUJFR0lOIHJmaWxlOwot ICAgIH0KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotfQotCi08c3Npbml0PlkgewkJCQkvKiBBQ0sg Zm9yIFNlbmQtSW5pdCAqLwotICAgIHNwYXIocmRhdGFwKTsJCQkvKiBzZXQgcGFyYW1ldGVycyBm cm9tIGl0ICovCi0gICAgY2FuY2VsID0gMDsKLSAgICBpZiAoYmN0ZikgewotCWJjdHUgPSAzOwot CWJjdGwgPSAzOwotICAgIH0gZWxzZSB7Ci0JYmN0dSA9IGJjdHI7CQkJLyogc3dpdGNoIHRvIGFn cmVlZC11cG9uIGJsb2NrIGNoZWNrICovCi0JYmN0bCA9IChiY3R1ID09IDQpID8gMiA6IGJjdHU7 CS8qIFNldCBibG9jay1jaGVjayBsZW5ndGggKi8KLSAgICB9Ci0KLSNpZmRlZiBDS19SRVNFTkQK LSAgICBpZiAoKHNlbmRtb2RlID09IFNNX1JFU0VORCkgJiYgKCFhdGNhcHUgfHwgIXJzY2FwdSkp IHsgLyogUkVTRU5EICovCi0JZXJycGt0KChDSEFSICopICJSRVNFTkQgY2FwYWJpbGl0aWVzIG5v dCBuZWdvdGlhdGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyogQ0tfUkVT RU5EICovCi0Jd2hhdCA9IFdfU0VORDsJCQkvKiBSZW1lbWJlciB3ZSdyZSBzZW5kaW5nICovCi0J bGFzdHhmZXIgPSBXX1NFTkQ7Ci0JeCA9IHNmaWxlKHhmbGcpOwkJLyogU2VuZCBYIG9yIEYgaGVh ZGVyIHBhY2tldCAqLwotCWNhbmNlbCA9IDA7CQkJLyogUmVzZXQgY2FuY2VsbGF0aW9uIGNvdW50 ZXIgKi8KLQlpZiAoeCkgewkJCS8qIElmIHRoZSBwYWNrZXQgd2FzIHNlbnQgT0sgKi8KLQkgICAg aWYgKCF4ZmxnICYmIGZpbGNudCA9PSAxKQkvKiBhbmQgaXQncyBhIHJlYWwgZmlsZSAqLwotCSAg ICAgIGNyYzE2ID0gMEw7CQkvKiBDbGVhciB0aGUgZmlsZSBDUkMgKi8KLQkgICAgcmVzZXRjKCk7 CQkJLyogcmVzZXQgcGVyLXRyYW5zYWN0aW9uIGNvdW50ZXJzICovCi0JICAgIHJ0aW1lcigpOwkJ CS8qIHJlc2V0IHRpbWVycyAqLwotI2lmZGVmIEdGVElNRVIKLQkgICAgcmZ0aW1lcigpOwotI2Vu ZGlmIC8qIEdGVElNRVIgKi8KLQkgICAgc3RyZWFtb24oKTsJCQkvKiB0dXJuIG9uIHN0cmVhbWlu ZyAqLwotI2lmZGVmIElLU0RCCi0JICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsCi0J CQkJICAoc2VydmVyID8gIlNFUlZFUiIgOiAiIiksCi0JCQkJICAiU0VORCIsCi0JCQkJICBmaWxu YW0KLQkJCQkgICk7Ci0jZW5kaWYgLyogSUtTREIgKi8KLQkgICAgQkVHSU4gc3NmaWxlOwkJLyog YW5kIHN3aXRjaCB0byByZWNlaXZlLWZpbGUgc3RhdGUgKi8KLQl9IGVsc2UgewkJCS8qIG90aGVy d2lzZSBzZW5kIGVycm9yIG1zZyAmIHF1aXQgKi8KLQkgICAgcyA9IHhmbGcgPyAiQ2FuJ3QgZXhl Y3V0ZSBjb21tYW5kIiA6IChjaGFyICopZXBrdG1zZzsKLQkgICAgaWYgKCEqcykgcyA9ICJDYW4n dCBvcGVuIGZpbGUiOwotCSAgICBlcnJwa3QoKENIQVIgKilzKTsKLQkgICAgUkVTVU1FOwotCX0K LSNpZmRlZiBDS19SRVNFTkQKLSAgICB9Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi19Ci0KLS8q Ci0gIFRoZXNlIHN0YXRlcyBhcmUgbmVjZXNzYXJ5IHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3 ZSBnZXQgYSBzZXJ2ZXIgY29tbWFuZAotICBwYWNrZXQgKFIsIEcsIG9yIEMpIHJlcGx5IHdpdGgg YW4gUyBwYWNrZXQsIGJ1dCB0aGUgY2xpZW50IHJldHJhbnNtaXRzIHRoZQotICBjb21tYW5kIHBh Y2tldC4gIFRoZSBpbnB1dCgpIGZ1bmN0aW9uIGRvZXNuJ3QgY2F0Y2ggdGhpcyBiZWNhdXNlIHRo ZSBwYWNrZXQKLSAgbnVtYmVyIGlzIHN0aWxsIHplcm8uCi0qLwotPHNzaW5pdD5SIHsJCQkJLyog UiBwYWNrZXQgd2FzIHJldHJhbnNtaXR0ZWQuICovCi0gICAgeHNpbml0KCk7CQkJCS8qIFJlc2Vu ZCBwYWNrZXQgMCAqLwotfQotCi08c3Npbml0PkcgewkJCQkvKiBTYW1lIGRlYWwgaWYgRyBwYWNr ZXQgY29tZXMgYWdhaW4gKi8KLSAgICB4c2luaXQoKTsKLX0KLQotLyogc2hvdWxkIHByb2JhYmx5 IGFkZCBjYXNlcyBmb3IgTywgVywgViwgSCwgSiwgLi4uICovCi0KLTxzc2luaXQ+QyB7CQkJCS8q IFNhbWUgZGVhbCBpZiBDIHBhY2tldCBjb21lcyBhZ2FpbiAqLwotICAgIHhzaW5pdCgpOwotfQot Ci08c3NmaWxlPlkgewkJCQkvKiBBQ0sgZm9yIEYgb3IgWCBwYWNrZXQgKi8KLSAgICBzcnZwdHIg PSBzcnZjbWQ7CQkJLyogUG9pbnQgdG8gc3RyaW5nIGJ1ZmZlciAqLwotICAgIGRlY29kZShyZGF0 YXAscHV0c3J2LDApOwkJLyogRGVjb2RlIGRhdGEgZmllbGQsIGlmIGFueSAqLwotICAgIHB1dHNy dihOVUwpOwkJCS8qIFRlcm1pbmF0ZSB3aXRoIG51bGwgKi8KLSAgICBmZmMgPSAwTDsJCQkJLyog UmVzZXQgZmlsZSBieXRlIGNvdW50ZXIgKi8KLSAgICBkZWJ1ZyhGMTAxLCI8c3NmaWxlPlkgY3hz ZWVuIiwiIixjeHNlZW4pOwotICAgIGlmICgqc3J2Y21kKSB7CQkJLyogSWYgcmVtb3RlIG5hbWUg d2FzIHJlY29yZGVkICovCi0gICAgICAgIGlmIChzZW5kbW9kZSAhPSBTTV9SRVNFTkQpIHsKLQkg ICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9DIHx8IGZkaXNwbGEgPT0gWFlGRF9TKQotCSAgICAgIHh4 c2NyZWVuKFNDUl9BTiwwLDBMLChjaGFyICopc3J2Y21kKTsKLQkgICAgdGxvZyhGMTEwLCIgcmVt b3RlIG5hbWU6IiwoY2hhciAqKSBzcnZjbWQsMEwpOwotCSAgICBtYWtlc3RyKCZwc3Jmc3BlYywo Y2hhciAqKXNydmNtZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGN4c2Vlbnx8Y3pzZWVu KSB7CQkvKiBJbnRlcnJ1cHRlZD8gKi8KLQlkZWJ1ZyhGMTAxLCI8c3NmaWxlPlkgY2FuY2VsaW5n IiwiIiwwKTsKLQl4ID0gY2xzaWYoKTsJCQkvKiBDbG9zZSBpbnB1dCBmaWxlICovCi0Jc3hlb2Yo MSk7CQkJLyogU2VuZCBFT0YoRCkgKi8KLQlCRUdJTiBzc2VvZjsJCQkvKiBhbmQgc3dpdGNoIHRv IEVPRiBzdGF0ZS4gKi8KLSAgICB9IGVsc2UgaWYgKGF0Y2FwdSkgewkJLyogSWYgYXR0cmlidXRl cyBhcmUgdG8gYmUgdXNlZCAqLwotCWlmIChzYXR0cih4ZmxnIHwgc3RkaW5mLCAxKSA8IDApIHsg Lyogc2VuZCB0aGVtICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBzZW5kIGF0dHJpYnV0 ZXMiKTsgLyogaWYgcHJvYmxlbSwgc2F5IHNvICovCi0JICAgIFJFU1VNRTsJCQkvKiBhbmQgcXVp dCAqLwotCX0gZWxzZSBCRUdJTiBzc2F0dHI7CQkvKiBpZiBvaywgc3dpdGNoIHRvIGF0dHJpYnV0 ZSBzdGF0ZSAqLwotICAgIH0gZWxzZSB7CQkJCS8qIEF0dHJpYnV0ZXMgbm90IG5lZ290aWF0ZWQg Ki8KLQlpZiAod2luZG93KHdzbG90bikgPCAwKSB7CS8qIE9wZW4gd2luZG93ICovCi0JICAgIGVy cnBrdCgoQ0hBUiAqKSJDYW4ndCBvcGVuIHdpbmRvdyIpOwotCSAgICBSRVNVTUU7Ci0JfSBlbHNl IGlmICgoeCA9IHNkYXRhKCkpID09IC0yKSB7IC8qIFNlbmQgZmlyc3QgZGF0YSBwYWNrZXQgZGF0 YSAqLwotCSAgICB3aW5kb3coMSk7CQkJLyogQ29ubmVjdGlvbiBsb3N0LCByZXNldCB3aW5kb3cg Ki8KLQkgICAgeCA9IGNsc2lmKCk7CQkvKiBDbG9zZSBpbnB1dCBmaWxlICovCi0JICAgIHJldHVy bihzdWNjZXNzID0gMCk7CS8qIFJldHVybiBmYWlsdXJlICovCi0JfSBlbHNlIGlmICh4ID09IC05 KSB7CQkvKiBVc2VyIGludGVycnVwdGVkICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSJVc2VyIGNh bmNlbGxlZCIpOyAvKiBTZW5kIEVycm9yIHBhY2tldCAqLwotCSAgICB3aW5kb3coMSk7CQkJLyog U2V0IHdpbmRvdyBzaXplIGJhY2sgdG8gMS4uLiAqLwotCSAgICB0aW1pbnQgPSBzX3RpbWludDsJ CS8qIFJlc3RvcmUgdGltZW91dCAqLwotCSAgICByZXR1cm4oc3VjY2VzcyA9IDApOwkvKiBGYWls ZWQgKi8KLQl9IGVsc2UgaWYgKHggPCAwKSB7CQkvKiBFT0YgKGVtcHR5IGZpbGUpIG9yIGludGVy cnVwdGVkICovCi0JICAgIHdpbmRvdygxKTsJCQkvKiBwdXQgd2luZG93IHNpemUgYmFjayB0byAx LCAqLwotCSAgICBkZWJ1ZyhGMTAxLCI8c3NmaWxlPlkgY3hzZWVuIiwiIixjeHNlZW4pOwotCSAg ICB4ID0gY2xzaWYoKTsJCS8qIElmIG5vdCBvaywgY2xvc2UgaW5wdXQgZmlsZSwgKi8KLQkgICAg aWYgKHggPCAwKQkJCS8qIHRyZWF0aW5nIGZhaWx1cmUgYXMgaW50ZXJydXB0aW9uICovCi0JICAg ICAgY3hzZWVuID0gMTsJCS8qIFNlbmQgRU9GIHBhY2tldCAqLwotCSAgICBzZW9mKGN4c2Vlbnx8 Y3pzZWVuKTsKLQkgICAgQkVHSU4gc3Nlb2Y7CQkvKiBhbmQgc3dpdGNoIHRvIEVPRiBzdGF0ZS4g Ki8KLQl9IGVsc2UgewkJCS8qIEZpcnN0IGRhdGEgc2VudCBPSyAqLwotCSAgICBCRUdJTiBzc2Rh dGE7CQkvKiBBbGwgb2ssIHN3aXRjaCB0byBzZW5kLWRhdGEgc3RhdGUgKi8KLQl9Ci0gICAgfQot fQotCi08c3NhdHRyPlkgewkJCQkvKiBHb3QgQUNLIHRvIEEgcGFja2V0ICovCi0gICAgZmZjID0g MEw7CQkJCS8qIFJlc2V0IGZpbGUgYnl0ZSBjb3VudGVyICovCi0gICAgZGVidWcoRjEwMSwiPHNz YXR0cj5ZIGN4c2VlbiIsIiIsY3hzZWVuKTsKLSAgICBpZiAoY3hzZWVufHxjenNlZW4pIHsJCS8q IEludGVycnVwdGVkPyAqLwotCWRlYnVnKEYxMDEsIjxzYXR0cj5ZIGNhbmNlbGluZyIsIiIsMCk7 Ci0JeCA9IGNsc2lmKCk7CQkJLyogQ2xvc2UgaW5wdXQgZmlsZSAqLwotCXN4ZW9mKDEpOwkJCS8q IFNlbmQgRU9GKEQpICovCi0JQkVHSU4gc3Nlb2Y7CQkJLyogYW5kIHN3aXRjaCB0byBFT0Ygc3Rh dGUuICovCi0gICAgfSBlbHNlIGlmIChyc2F0dHIocmRhdGFwKSA8IDApIHsJLyogV2FzIHRoZSBm aWxlIHJlZnVzZWQ/ICovCi0JZGlzY2FyZCA9IDE7CQkJLyogU2V0IHRoZSBkaXNjYXJkIGZsYWcg Ki8KLQljbHNpZigpOwkJCS8qIENsb3NlIHRoZSBmaWxlICovCi0Jc3hlb2YoMSk7CQkJLyogc2Vu ZCBFT0Ygd2l0aCAiZGlzY2FyZCIgY29kZSAqLwotCUJFR0lOIHNzZW9mOwkJCS8qIHN3aXRjaCB0 byBzZW5kLUVPRiBzdGF0ZSAqLwotICAgIH0gZWxzZSBpZiAoKHggPSBzYXR0cih4ZmxnIHwgc3Rk aW5mLCAwKSkgPCAwKSB7IC8qIFNlbmQgbW9yZT8gKi8KLQllcnJwa3QoKENIQVIgKikiQ2FuJ3Qg c2VuZCBhdHRyaWJ1dGVzIik7IC8qIFRyb3VibGUuLi4gKi8KLQlSRVNVTUU7Ci0gICAgfSBlbHNl IGlmICh4ID09IDApIHsJCS8qIE5vIG1vcmUgdG8gc2VuZCBzbyBub3cgdGhlIGRhdGEgKi8KLQlp ZiAod2luZG93KHdzbG90bikgPCAwKSB7CS8qIEFsbG9jYXRlIG5lZ290aWF0ZWQgd2luZG93IHNs b3RzICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBvcGVuIHdpbmRvdyIpOwotCSAgICBS RVNVTUU7Ci0JfQotCWlmICgoeCA9IHNkYXRhKCkpID09IC0yKSB7CS8qIEZpbGUgYWNjZXB0ZWQs IHNlbmQgZmlyc3QgZGF0YSAqLwotCSAgICB3aW5kb3coMSk7CQkJLyogQ29ubmVjdGlvbiBicm9r ZW4gKi8KLQkgICAgeCA9IGNsc2lmKCk7CQkvKiBDbG9zZSBmaWxlICovCi0JICAgIHJldHVybihz dWNjZXNzID0gMCk7CS8qIFJldHVybiBmYWlsdXJlICovCi0JfSBlbHNlIGlmICh4ID09IC05KSB7 CQkvKiBVc2VyIGludGVycnVwdGVkICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNl bGxlZCIpOyAvKiBTZW5kIEVycm9yIHBhY2tldCAqLwotCSAgICB3aW5kb3coMSk7CQkJLyogU2V0 IHdpbmRvdyBzaXplIGJhY2sgdG8gMS4uLiAqLwotCSAgICB0aW1pbnQgPSBzX3RpbWludDsJCS8q IFJlc3RvcmUgdGltZW91dCAqLwotCSAgICByZXR1cm4oc3VjY2VzcyA9IDApOwkvKiBGYWlsZWQg Ki8KLQl9IGVsc2UgaWYgKHggPCAwKSB7CQkvKiBJZiBkYXRhIHdhcyBub3Qgc2VudCAqLwotCSAg ICB3aW5kb3coMSk7CQkJLyogcHV0IHdpbmRvdyBzaXplIGJhY2sgdG8gMSwgKi8KLQkgICAgZGVi dWcoRjEwMSwiPHNzYXR0cj5ZIGN4c2VlbiIsIiIsY3hzZWVuKTsKLQkgICAgaWYgKGNsc2lmKCkg PCAwKQkJLyogQ2xvc2UgaW5wdXQgZmlsZSAqLwotCSAgICAgIGN4c2VlbiA9IDE7CQkvKiBTZW5k IEVPRiBwYWNrZXQgKi8KLQkgICAgc2VvZihjeHNlZW58fGN6c2Vlbik7Ci0JICAgIEJFR0lOIHNz ZW9mOwkJLyogYW5kIHN3aXRjaCB0byBFT0Ygc3RhdGUuICovCi0JfSBlbHNlIHsKLQkgICAgQkVH SU4gc3NkYXRhOwkJLyogQWxsIG9rLCBzd2l0Y2ggdG8gc2VuZC1kYXRhIHN0YXRlICovCi0JfQot ICAgIH0KLX0KLQotPHNzZGF0YT5xIHsgIAkJCQkvKiBDdHJsLUMgb3IgY29ubmVjdGlvbiBsb3Nz LiAqLwotICAgIHdpbmRvdygxKTsJCQkJLyogU2V0IHdpbmRvdyBzaXplIGJhY2sgdG8gMS4uLiAq LwotICAgIGN4c2VlbiA9IDE7CQkJCS8qIFRvIGluZGljYXRlIGludGVycnVwdGlvbiAqLwotICAg IHggPSBjbHNpZigpOwkJCS8qIENsb3NlIGZpbGUgKi8KLSAgICByZXR1cm4oc3VjY2VzcyA9IDAp OwkJLyogRmFpbGVkICovCi19Ci0KLTxzc2RhdGE+WSB7CQkJCS8qIEdvdCBBQ0sgdG8gRGF0YSBw YWNrZXQgKi8KLSAgICBjYW5uZWQocmRhdGFwKTsJCQkvKiBDaGVjayBpZiBmaWxlIHRyYW5zZmVy IGNhbmNlbGxlZCAqLwotICAgIGRlYnVnKEYxMTEsIjxzc2RhdGE+WSBjeHNlZW4iLHJkYXRhcCxj eHNlZW4pOwotICAgIGRlYnVnKEYxMTEsIjxzc2RhdGE+WSBjenNlZW4iLHJkYXRhcCxjenNlZW4p OwotICAgIGlmICgoeCA9IHNkYXRhKCkpID09IC0yKSB7CQkvKiBUcnkgdG8gc2VuZCBuZXh0IGRh dGEgKi8KLQl3aW5kb3coMSk7CQkJLyogQ29ubmVjdGlvbiBsb3N0LCByZXNldCB3aW5kb3cgKi8K LQl4ID0gY2xzaWYoKTsJCQkvKiBDbG9zZSBmaWxlICovCi0JcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJ CS8qIEZhaWxlZCAqLwotICAgIH0gZWxzZSBpZiAoeCA9PSAtOSkgewkJLyogVXNlciBpbnRlcnJ1 cHRlZCAqLwotCWVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNlbGxlZCIpOyAvKiBTZW5kIEVycm9y IHBhY2tldCAqLwotCXdpbmRvdygxKTsJCQkvKiBTZXQgd2luZG93IHNpemUgYmFjayB0byAxLi4u ICovCi0JdGltaW50ID0gc190aW1pbnQ7CQkvKiBSZXN0b3JlIG9yaWdpbmFsIHRpbWVvdXQgKi8K LQlyZXR1cm4oc3VjY2VzcyA9IDApOwkJLyogRmFpbGVkICovCi0gICAgfSBlbHNlIGlmICh4IDwg MCkgewkJCS8qIEVPRiAtIGZpbmlzaGVkIHNlbmRpbmcgZGF0YSAqLwotCWRlYnVnKEYxMDEsIjxz c2RhdGE+WSBjeHNlZW4iLCIiLGN4c2Vlbik7Ci0Jd2luZG93KDEpOwkJCS8qIFNldCB3aW5kb3cg c2l6ZSBiYWNrIHRvIDEuLi4gKi8KLQlpZiAoY2xzaWYoKSA8IDApCQkvKiBDbG9zZSBpbnB1dCBm aWxlICovCi0JICBjeHNlZW4gPSAxOwkJCS8qIFNlbmQgRU9GIHBhY2tldCAqLwotCWRlYnVnKEYx MDEsIjxzc2RhdGE+WSBDQUxMSU5HIFNFT0YoKSIsIiIsY3hzZWVuKTsKLQlzZW9mKGN4c2Vlbnx8 Y3pzZWVuKTsKLQlCRUdJTiBzc2VvZjsJCQkvKiBhbmQgZW50ZXIgc2VuZC1lb2Ygc3RhdGUgKi8K LSAgICB9Ci0gICAgLyogTk9URTogSWYgeCA9PSAwIGl0IG1lYW5zIHdlJ3JlIGRyYWluaW5nOiBz ZWUgc2RhdGEoKSEgKi8KLX0KLQotPHNzZW9mPlkgewkJCQkvKiBHb3QgQUNLIHRvIEVPRiAqLwot ICAgIGludCBnLCB4ZGlzY2FyZDsKLSAgICBjYW5uZWQocmRhdGFwKTsJCQkvKiBDaGVjayBpZiBm aWxlIHRyYW5zZmVyIGNhbmNlbGxlZCAqLwotICAgIGRlYnVnKEYxMTEsIjxzc2VvZj5ZIGN4c2Vl biIscmRhdGFwLGN4c2Vlbik7Ci0gICAgZGVidWcoRjExMSwiPHNzZW9mPlkgY3pzZWVuIixyZGF0 YXAsY3pzZWVuKTsKLSAgICBkZWJ1ZyhGMTExLCI8c3Nlb2Y+WSBkaXNjYXJkIixyZGF0YXAsZGlz Y2FyZCk7Ci0gICAgeGRpc2NhcmQgPSBkaXNjYXJkOwotICAgIGRpc2NhcmQgPSAwOwotICAgIHN1 Y2Nlc3MgPSAoY3hzZWVuID09IDAgJiYgY3pzZWVuID09IDApOyAvKiBUcmFuc2ZlciBzdGF0dXMu Li4gKi8KLSAgICBkZWJ1ZyhGMTAxLCI8c3Nlb2Y+WSBzdWNjZXNzIiwiIixzdWNjZXNzKTsKLSAg ICBpZiAoc3VjY2VzcyAmJiByZWplY3Rpb24gPiAwKQkgICAgLyogSWYgcmVqZWN0ZWQsIHN1Y2Nl ZWQgaWYgKi8KLSAgICAgIGlmIChyZWplY3Rpb24gIT0gJyMnICYmCQkgICAgLyogcmVhc29uIHdh cyBkYXRlICovCi0JICByZWplY3Rpb24gIT0gMSAmJiByZWplY3Rpb24gIT0gJz8nKSAvKiBvciBu YW1lOyAqLwotCXN1Y2Nlc3MgPSAwOwkJCSAgICAvKiBmYWlsIG90aGVyd2lzZS4gKi8KLSAgICBj eHNlZW4gPSAwOwkJCQkvKiBUaGlzIGdvZXMgYmFjayB0byB6ZXJvLiAqLwotICAgIGlmIChzdWNj ZXNzKSB7CQkJLyogT25seSBpZiB0cmFuc2ZlciBzdWNjZWVkZWQuLi4gKi8KLQl4eHNjcmVlbihT Q1JfU1QsU1RfT0ssMEwsIiIpOwotCWlmICgheGRpc2NhcmQpIHsKLQkgICAgbWFrZXN0cigmc2Zz cGVjLHBzZnNwZWMpOwkvKiBSZWNvcmQgZmlsZW5hbWVzIGZvciBXSEVSRSAqLwotCSAgICBtYWtl c3RyKCZzcmZzcGVjLHBzcmZzcGVjKTsKLQl9Ci0JaWYgKG1vdmluZykgewkJCS8qIElmIE1PVkUn aW5nICovCi0JICAgIHggPSB6ZGVsZXQoZmlsbmFtKTsJCS8qIFRyeSB0byBkZWxldGUgdGhlIHNv dXJjZSBmaWxlICovCi0jaWZkZWYgVExPRwotCSAgICBpZiAodHJhbG9nKSB7Ci0JCWlmICh4ID4g LTEpIHsKLQkJICAgIHRsb2coRjExMCwiIGRlbGV0ZWQiLGZpbG5hbSwwKTsKLQkJfSBlbHNlIHsK LQkJICAgIHRsb2coRjExMCwiIGRlbGV0ZSBmYWlsZWQ6Iixja19lcnJzdHIoKSwwKTsKLQkJfQot CSAgICB9Ci0jZW5kaWYgLyogVExPRyAqLwotCX0gZWxzZSBpZiAoc25kX21vdmUpIHsJCS8qIE9y IG1vdmUgaXQgKi8KLQkgICAgaW50IHg7Ci0JICAgIHggPSB6cmVuYW1lKGZpbG5hbSxzbmRfbW92 ZSk7Ci0jaWZkZWYgVExPRwotCSAgICBpZiAodHJhbG9nKSB7Ci0JCWlmICh4ID4gLTEpIHsKLQkJ ICAgIHRsb2coRjExMCwiIG1vdmVkIHRvICIsc25kX21vdmUsMCk7Ci0JCX0gZWxzZSB7Ci0JCSAg ICB0bG9nKEYxMTAsIiBtb3ZlIGZhaWxlZDoiLGNrX2VycnN0cigpLDApOwotCQl9Ci0JICAgIH0K LSNlbmRpZiAvKiBUTE9HICovCi0JfSBlbHNlIGlmIChzbmRfcmVuYW1lKSB7CS8qIE9yIHJlbmFt ZSBpdCAqLwotCSAgICBjaGFyICpzID0gc25kX3JlbmFtZTsJLyogUmVuYW1pbmcgc3RyaW5nICov Ci0jaWZuZGVmIE5PU1BMCi0JICAgIGludCB5OwkJCS8qIFBhc3MgaXQgdGhydSB0aGUgZXZhbHVh dG9yICovCi0JICAgIGV4dGVybiBpbnQgY21kX3F1b3Rpbmc7CS8qIGZvciBcdihmaWxlbmFtZSkg Ki8KLQkgICAgaWYgKGNtZF9xdW90aW5nKSB7CQkvKiBCdXQgb25seSBpZiBjbWRfcXVvdGluZyBp cyBvbiAqLwotCQl5ID0gTUFYUlA7Ci0JCXMgPSAoY2hhciAqKXNydmNtZDsKLQkJenpzdHJpbmco c25kX3JlbmFtZSwmcywmeSk7Ci0JCXMgPSAoY2hhciAqKXNydmNtZDsKLQkgICAgfQotI2VuZGlm IC8qIE5PU1BMICovCi0JICAgIGlmIChzKSBpZiAoKnMpIHsKLQkJaW50IHg7Ci0JCXggPSB6cmVu YW1lKGZpbG5hbSxzKTsKLSNpZmRlZiBUTE9HCi0JICAgIGlmICh0cmFsb2cpIHsKLQkJaWYgKHgg PiAtMSkgewotCQkgICAgdGxvZyhGMTEwLCIgcmVuYW1lZCB0byIscywwKTsKLQkJfSBlbHNlIHsK LQkJICAgIHRsb2coRjExMCwiIHJlbmFtZSBmYWlsZWQ6Iixja19lcnJzdHIoKSwwKTsKLQkJfQot CSAgICB9Ci0jZW5kaWYgLyogVExPRyAqLwotI2lmZGVmIENPTU1FTlQKLQkJKnMgPSBOVUw7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICB9Ci0JfQotICAgIH0KLSAgICBpZiAoY3pzZWVuKSB7 CQkJLyogQ2hlY2sgZ3JvdXAgaW50ZXJydXB0aW9uIGZsYWcgKi8KLQlnID0gMDsJCQkJLyogTm8g bW9yZSBmaWxlcyBpZiBpbnRlcnJ1cHRlZCAqLwotICAgIH0gZWxzZSB7CQkJCS8qIE90aGVyd2lz ZS4uLiAqLwotI2lmZGVmIENPTU1FTlQKLQkvKiBUaGlzIGNvZGUgbWFrZXMgYW55IG9wZW4gZXJy b3IgZmF0YWwgdG8gYSBmaWxlLWdyb3VwIHRyYW5zZmVyLiAqLwotCWcgPSBnbmZpbGUoKTsKLQlk ZWJ1ZyhGMTExLCI8c3Nlb2Y+WSBnbmZpbGUiLGZpbG5hbSxnKTsKLQlpZiAoZyA+IDApIHsJCQkv KiBBbnkgbW9yZSBmaWxlcyB0byBzZW5kPyAqLwotCSAgICBpZiAoc2ZpbGUoeGZsZykpCQkvKiBZ ZXMsIHRyeSB0byBzZW5kIG5leHQgZmlsZSBoZWFkZXIgKi8KLQkgICAgICBCRUdJTiBzc2ZpbGU7 CQkvKiBpZiBvaywgZW50ZXIgc2VuZC1maWxlIHN0YXRlICovCi0JICAgIGVsc2UgewkJCS8qIG90 aGVyd2lzZSAqLwotCQlzID0geGZsZyA/ICJDYW4ndCBleGVjdXRlIGNvbW1hbmQiIDogKGNoYXIg KillcGt0bXNnOwotCQlpZiAoISpzKSBzID0gIkNhbid0IG9wZW4gZmlsZSI7Ci0JCWVycnBrdCgo Q0hBUiAqKXMpOwkvKiBzZW5kIGVycm9yIG1lc3NhZ2UgKi8KLQkJUkVTVU1FOwkJCS8qIGFuZCBx dWl0ICovCi0JICAgIH0KLQl9IGVsc2UgewkJCS8qIE5vIG5leHQgZmlsZSAqLwotCSAgICB0c2Vj cyA9IGd0aW1lcigpOwkJLyogZ2V0IHN0YXRpc3RpY3MgdGltZXJzICovCi0jaWZkZWYgR0ZUSU1F UgotCSAgICBmcHRzZWNzID0gZ2Z0aW1lcigpOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQkgICAg c2VvdCgpOwkJCS8qIHNlbmQgRU9UIHBhY2tldCAqLwotCSAgICBCRUdJTiBzc2VvdDsJCS8qIGVu dGVyIHNlbmQtZW90IHN0YXRlICovCi0JfQotI2Vsc2UgIC8qIENPTU1FTlQgKi8KLQl3aGlsZSAo MSkgewkJCS8qIEtlZXAgdHJ5aW5nLi4uICovCi0JICAgIGcgPSBnbmZpbGUoKTsJCS8qIEdldCBu ZXh0IGZpbGUgKi8KLQkgICAgZGVidWcoRjExMSwiPHNzZW9mPlkgZ25maWxlIixmaWxuYW0sZyk7 Ci0JICAgIGlmIChnID09IDAgJiYgZ25mZXJyb3IgPT0gMCkgLyogTm8gbW9yZSwgc3RvcCB0cnlp bmcgKi8KLQkgICAgICBicmVhazsKLQkgICAgaWYgKGcgPiAwKSB7CQkvKiBIYXZlIG9uZSAqLwot CQlpZiAoc2ZpbGUoeGZsZykpIHsJLyogVHJ5IHRvIG9wZW4gYW5kIHNlbmQgRiBwYWNrZXQgKi8K LQkJICAgIEJFR0lOIHNzZmlsZTsJLyogSWYgT0ssIGVudGVyIHNlbmQtZmlsZSBzdGF0ZSAqLwot CQkgICAgYnJlYWs7CQkvKiBhbmQgYnJlYWsgb3V0IG9mIGxvb3AuICovCi0JCX0KLQkgICAgfSAv KiBPdGhlcndpc2Uga2VlcCB0cnlpbmcgdG8gZ2V0IG9uZSB3ZSBjYW4gc2VuZC4uLiAqLwotCX0K LSAgICB9Ci0gICAgaWYgKGcgPT0gMCkgewotCWRlYnVnKEYxMDEsIjxzc2VvZj5ZIG5vIG1vcmUg ZmlsZXMiLCIiLGN6c2Vlbik7Ci0JdHNlY3MgPSBndGltZXIoKTsJCS8qIEdldCBzdGF0aXN0aWNz IHRpbWVycyAqLwotI2lmZGVmIEdGVElNRVIKLQlmcHRzZWNzID0gZ2Z0aW1lcigpOwotI2VuZGlm IC8qIEdGVElNRVIgKi8KLQlzZW90KCk7CQkJCS8qIFNlbmQgRU9UIHBhY2tldCAqLwotCUJFR0lO IHNzZW90OwkJCS8qIEVudGVyIHNlbmQtZW90IHN0YXRlICovCi0gICAgfQotI2VuZGlmIC8qIENP TU1FTlQgKi8KLX0KLQotPHNzZW90PlkgewkJCQkvKiBHb3QgQUNLIHRvIEVPVCAqLwotICAgIGRl YnVnKEYxMDEsInNzZW90IGp1c3RvbmUiLCIiLGp1c3RvbmUpOwotICAgIFJFU1VNRTsJCQkJLyog QWxsIGRvbmUsIGp1c3QgcXVpdCAqLwotfQotCi1FIHsJCQkJCS8qIEdvdCBFcnJvciBwYWNrZXQs IGluIGFueSBzdGF0ZSAqLwotICAgIGNoYXIgKnMgPSAiIjsKLSAgICB3aW5kb3coMSk7CQkJCS8q IENsb3NlIHdpbmRvdyAqLwotICAgIHRpbWludCA9IHNfdGltaW50OwkJCS8qIFJlc3RvcmUgb3Jp Z2luYWwgdGltZW91dCAqLwotICAgIGlmICgqZXBrdG1zZykJCQkvKiBNZXNzYWdlIGZyb20gRXJy b3IgcGFja2V0ICovCi0gICAgICBzID0gKGNoYXIgKillcGt0bXNnOwotICAgIGlmICghKnMpIHsJ CQkJLyogSWYgbm90IHRoZXJlIHRoZW4gbWF5YmUgaGVyZSAqLwotCXMgPSAoY2hhciAqKXJkYXRh cDsKLQlja3N0cm5jcHkoKGNoYXIgKillcGt0bXNnLChjaGFyICopcmRhdGFwLFBLVE1TR0xFTik7 Ci0gICAgfQotICAgIGlmICghKnMpCQkJCS8qIEhvcGVmdWxseSB3ZSdsbCBuZXZlciBzZWUgdGhp cy4gKi8KLSAgICAgIHMgPSAiVW5rbm93biBlcnJvciI7Ci0gICAgc3VjY2VzcyA9IDA7CQkJLyog Rm9yIElGIFNVQ0NFU1MvRkFJTC4gKi8KLSAgICBkZWJ1ZyhGMTAxLCJja2Nwcm8udyBqdXN0b25l IGF0IEUgcGt0IiwiIixqdXN0b25lKTsKLQotICAgIHN1Y2Nlc3MgPSAwOwkJCS8qIFRyYW5zZmVy IGZhaWxlZCAqLwotICAgIHhmZXJzdGF0ID0gc3VjY2VzczsJCQkvKiBSZW1lbWJlciB0cmFuc2Zl ciBzdGF0dXMgKi8KLSAgICBpZiAoIWVwa3RzZW50KSB7Ci0JeCA9IHF1aWV0OyBxdWlldCA9IDE7 CQkvKiBDbG9zZSBmaWxlcyBzaWxlbnRseSwgKi8KLQllcGt0cmN2ZCA9IDE7CQkJLyogUHJldmVu dCBtZXNzYWdlcyBmcm9tIGNsc29mKCkgKi8KLQljbHNpZigpOwotCWNsc29mKDEpOyAJCQkvKiBk aXNjYXJkaW5nIGFueSBvdXRwdXQgZmlsZS4gKi8KLQllcm1zZyhzKTsJCQkvKiBJc3N1ZSB0aGUg bWVzc2FnZSAoY2FsbHMgc2NyZWVuKS4gKi8KLQlxdWlldCA9IHg7CQkJLyogUmVzdG9yZSBxdWll dCBzdGF0ZSAqLwotICAgIH0KLSAgICB0c3RhdHMoKTsJCQkJLyogR2V0IHN0YXRzICovCi0vKgot ICBJZiB3ZSBhcmUgZXhlY3V0aW5nIGNvbW1hbmRzIGZyb20gYSBjb21tYW5kIGZpbGUgb3IgbWFj cm8sIGxldCB0aGUgY29tbWFuZAotICBmaWxlIG9yIG1hY3JvIGRlY2lkZSB3aGV0aGVyIHRvIGV4 aXQsIGJhc2VkIG9uIFNFVCB7IFRBS0UsIE1BQ1JPIH0gRVJST1IuCi0qLwotICAgIGlmICgKLSNp Zm5kZWYgTk9JQ1AKLQkheGNtZHNyYyAmJgotI2VuZGlmIC8qIE5PSUNQICovCi0JYmFja2dyZCAm JiAhc2VydmVyKQotICAgICAgZmF0YWwoIlByb3RvY29sIGVycm9yIik7Ci0gICAgeGl0c3RhIHw9 ICh3aGF0ICYgV19LRVJNSVQpOwkvKiBTYXZlIHRoaXMgZm9yIGRvZXhpdCgpLiAqLwotI2lmZGVm IENLX1RNUERJUgotLyogSWYgd2Ugd2VyZSBjZCdkIHRlbXBvcmFyaWx5IHRvIGFub3RoZXIgZGV2 aWNlIG9yIGRpcmVjdG9yeSAuLi4gKi8KLSAgICBpZiAoZl90bXBkaXIpIHsKLQlpbnQgeDsKLQl4 ID0gemNoZGlyKChjaGFyICopIHNhdmRpcik7CS8qIC4uLiByZXN0b3JlIHByZXZpb3VzIGRpcmVj dG9yeSAqLwotCWZfdG1wZGlyID0gMDsJCQkvKiBhbmQgcmVtZW1iZXIgd2UgZGlkIGl0LiAqLwot CWRlYnVnKEYxMTEsImNrY3Byby53IEUgdG1wZGlyIHJlc3RvcmVkIixzYXZkaXIseCk7Ci0gICAg fQotI2VuZGlmIC8qIENLX1RNUERJUiAqLwotI2lmZGVmIElLU0RCCi0gICAgaWYgKGlrZGJvcGVu KSBzbG90c3RhdGUod2hhdCwiRVJST1IiLCAoY2hhciAqKWVwa3Rtc2csICIiKTsKLSNlbmRpZiAv KiBJS1NEQiAqLwotICAgIFJFU1VNRTsKLX0KLQotcSB7IHN1Y2Nlc3MgPSAwOyBRVUlUOyB9CQkv KiBDdHJsLUMgb3IgY29ubmVjdGlvbiBsb3NzLiAqLwotCi0uIHsJCQkJCS8qIEFueXRoaW5nIG5v dCBhY2NvdW50ZWQgZm9yIGFib3ZlICovCi0gICAgZXJycGt0KChDSEFSICopIlVuZXhwZWN0ZWQg cGFja2V0IHR5cGUiKTsgLyogR2l2ZSBlcnJvciBtZXNzYWdlICovCi0gICAgd2luZG93KDEpOwot ICAgIHhpdHN0YSB8PSAod2hhdCAmIFdfS0VSTUlUKTsJLyogU2F2ZSB0aGlzIGZvciBkb2V4aXQo KS4gKi8KLSAgICBSRVNVTUU7CQkJCS8qIGFuZCBxdWl0ICovCi19Ci0KLSUlCi0KLS8qCi0gIEZy b20gaGVyZSBkb3duIHRvIHByb3RvKCkgYXJlIHJvdXRpbmVzIHRoYXQgd2VyZSBtb3ZlZCBvdXQg b2YgdGhlIHN0YXRlCi0gIHRhYmxlIHN3aXRjaGVyIGJlY2F1c2UgdGhlIHJlc3VsdGluZyBzd2l0 Y2goKSBoYWQgYmVjb21lIHRvbyBsYXJnZS4KLSAgVG8gbW92ZSB0aGUgY29udGVudHMgb2YgYSBz dGF0ZS10YWJsZSBjYXNlIHRvIGEgcm91dGluZToKLSAgICAxLiBBZGQgYSBwcm90b3R5cGUgdG8g dGhlIGxpc3QgYWJvdmUgdGhlIHN0YXRlIHRhYmxlIHN3aXRjaGVyLgotICAgIDIuIE1ha2UgYSBy b3V0aW5lIHdpdGggYW4gYXBwcm9wcmlhdGUgbmFtZSwgcmV0dXJuaW5nIGludC4KLSAgICAzLiBN b3ZlIHRoZSBjb2RlIGludG8gaXQuCi0gICAgNC4gUHV0IGEgY2FsbCB0byB0aGUgbmV3IHJvdXRp bmUgaW4gdGhlIGZvcm1lciBzcG90OgotICAgICAgICAgcmMgPSBuYW1lX29mX3JvdXRpbmUoKTsK LSAgICAgICAgIGlmIChyYyA+IC0xKSByZXR1cm4ocmMpOwotICAgIDUuIEFkZCAicmV0dXJuKC0x KTsiIGFmdGVyIGV2ZXJ5IFJFU1VNRSwgU0VSVkUsIG9yIEJFR0lOIG1hY3JvIGFuZAotICAgICAg IGF0IHRoZSBlbmQgaWYgdGhlIGNvZGUgaXMgb3Blbi1lbmRlZC4KLSovCi1zdGF0aWMgaW50Ci1y Y3ZfZmlyc3RkYXRhKCkgewotICAgIGV4dGVybiBpbnQgZGlzcG9zOwotICAgIGRlYnVnKEYxMDEs InJjdl9maXJzdGRhdGEiLCIiLGRpc3Bvcyk7Ci0KLSAgICBpZiAoZGlzY2FyZCkgewkJCS8qIGlm IHdlJ3JlIGRpc2NhcmRpbmcgdGhlIGZpbGUgKi8KLQlhY2sxKChDSEFSICopIlgiKTsJCS8qIGp1 c3QgYWNrIHRoZSBkYXRhIGxpa2UgdGhpcy4gKi8KLQljYW5jZWwrKzsJCQkvKiBhbmQgY291bnQg aXQgKi8KLQlCRUdJTiByZHBrdDsJCQkvKiBhbmQgd2FpdCBmb3IgbW9yZSBkYXRhIHBhY2tldHMu ICovCi0JcmV0dXJuKC0xKTsKLSAgICB9IGVsc2UgewkJCQkvKiBOb3QgZGlzY2FyZGluZy4gKi8K LQlyZl9lcnIgPSAiQ2FuJ3Qgb3BlbiBmaWxlIjsKLQlpZiAoeGZsZykgewkJCS8qIElmIHNjcmVl biBkYXRhICovCi0JICAgIGlmIChyZW1maWxlKSB7CQkvKiByZWRpcmVjdGVkIHRvIGZpbGUgKi8K LQkJaWYgKHJlbXBpcGUpCQkvKiBvciBwaXBlICovCi0JCSAgeCA9IG9wZW5jKFpPRklMRSxyZW1k ZXN0KTsgLyogUGlwZTogc3RhcnQgY29tbWFuZCAqLwotCQllbHNlCi0JCSAgeCA9IG9wZW5hKHJl bWRlc3QsJmlhdHRyKTsgLyogRmlsZTogb3BlbiB3aXRoIGF0dHJpYnV0ZXMgKi8KLQkgICAgfSBl bHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KLQkJeCA9IG9wZW50KCZpYXR0cik7CS8qICJvcGVuIiB0 aGUgc2NyZWVuICovCi0JICAgIH0KLQl9IGVsc2UgewkJCS8qIG90aGVyd2lzZSAqLwotI2lmZGVm IENBTElCUkFURQotCSAgICBpZiAoY2FsaWJyYXRlKSB7CQkvKiBJZiBjYWxpYnJhdGlvbiBydW4g Ki8KLQkJeCA9IGNrb3BlbngoJmlhdHRyKTsJLyogb3BlbiBub3RoaW5nICovCi0jaWZkZWYgU1RS RUFNSU5HCi0JCWlmIChzdHJlYW1pbmcpCQkvKiBTdHJlYW1pbmcgKi8KLQkJICBmYXN0YWNrKCk7 CQkvKiBBQ0sgd2l0aG91dCBBQ0tpbmcuICovCi0JCWVsc2UKLSNlbmRpZiAvKiBTVFJFQU1JTkcg Ki8KLQkJICBhY2soKTsJCS8qIFNlbmQgcmVhbCBBQ0sgKi8KLQkJQkVHSU4gcmRwa3Q7CQkvKiBQ cm9jZWVkIHRvIG5leHQgc3RhdGUgKi8KLQkJcmV0dXJuKC0xKTsKLQkgICAgfSBlbHNlCi0jZW5k aWYgLyogQ0FMSUJSQVRFICovCi0jaWZkZWYgVU5JWAotLyoKLSAgSW4gVU5JWCB3ZSBjYW4gcGlw ZSB0aGUgZmlsZSBkYXRhIGludG8gdGhlIG1haWwgcHJvZ3JhbSwgd2hpY2ggaXMgdG8gYmUKLSAg cHJlZmVycmVkIHRvIHdyaXRpbmcgaXQgb3V0IHRvIGEgdGVtcCBmaWxlIGFuZCB0aGVuIG1haWxp bmcgaXQgYWZ0ZXJ3YXJkcy4KLSAgVGhpcyBkZXBlbmRzIHJhdGhlciBoZWF2aWx5IG9uIGFsbCBV TklYZXMgaGF2aW5nIGEgbWFpbCBjb21tYW5kIHRoYXQKLSAgYWNjZXB0cyAnLXMgInN1YmplY3Qi JyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgTUFJTENNRCAoZS5nLiBtYWlsLCBNYWlsLCBtYWlseCkK LSAgaXMgZGVmaW5lZCBpbiBja3VmaW8uYy4KLSovCi0JICAgIGlmIChkaXNwb3MgPT0gJ00nKSB7 CS8qIE1haWwuLi4gKi8KLQkJY2hhciAqczsKLQkJY2hhciAqIHRtcCA9IE5VTEw7Ci0JCWludCBu ID0gMDsKLQkJZXh0ZXJuIGNoYXIgKk1BSUxDTUQ7Ci0JCXMgPSBpYXR0ci5kaXNwLnZhbCArIDE7 Ci0JCW4gPSAoaW50KXN0cmxlbihNQUlMQ01EKSArICAgIC8qIE1haWwgY29tbWFuZCAqLwotCQkg IChpbnQpc3RybGVuKHMpICsJICAgICAgLyogYWRkcmVzcyAqLwotCQkgIChpbnQpc3RybGVuKG9m aWxuYW0pICsgMzI7ICAvKiBzdWJqZWN0ICovCi0JCWlmICh0bXAgPSAoY2hhciAqKW1hbGxvYyhu KSkgewotCQkgICAgY2ttYWt4bXNnKHRtcCxuLAotCQkJICAgICAgTUFJTENNRCwiIC1zIFwiIixv ZmlsbmFtLCJcIiAiLHMsCi0JCQkgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMKTsKLQkJICAgIGRlYnVnKEYxMTEsInJjdl9maXJzZGF0YSBtYWlsIix0bXAsKGludClzdHJs ZW4odG1wKSk7Ci0JCSAgICB4ID0gb3BlbmMoWk9GSUxFLChjaGFyICopdG1wKTsKLQkJICAgIGZy ZWUodG1wKTsKLQkJfSBlbHNlCi0JCSAgeCA9IDA7Ci0JICAgIH0gZWxzZSBpZiAoZGlzcG9zID09 ICdQJykgeyAvKiBEaXR0byBmb3IgcHJpbnQgKi8KLQkJY2hhciAqIHRtcCA9IE5VTEw7Ci0JCWlu dCBuOwotCQlleHRlcm4gY2hhciAqUFJJTlRDTUQ7Ci0JCW4gPSAoaW50KXN0cmxlbihQUklOVENN RCkgKyAoaW50KXN0cmxlbihpYXR0ci5kaXNwLnZhbCsxKSArIDQ7Ci0JCWlmICh0bXAgPSAoY2hh ciAqKW1hbGxvYyhuKSkgewotCQkgICAgc3ByaW50Zih0bXAsCS8qIHNhZmUgKHByZWNoZWNrZWQp ICovCi0JCQkgICAgIiVzICVzIiwgUFJJTlRDTUQsIGlhdHRyLmRpc3AudmFsICsgMSk7Ci0JCSAg ICB4ID0gb3BlbmMoWk9GSUxFLChjaGFyICopdG1wKTsKLQkJICAgIGZyZWUodG1wKTsKLQkJfSBl bHNlCi0JCSAgeCA9IDA7Ci0JICAgIH0gZWxzZQotI2VuZGlmIC8qIFVOSVggKi8KLQkgICAgICB4 ID0gb3BlbmEoZmlsbmFtLCZpYXR0cik7CS8qIG9wZW4gdGhlIGZpbGUsIHdpdGggYXR0cmlidXRl cyAqLwotCX0KLQlpZiAoeCkgewkJCS8qIElmIGZpbGUgd2FzIG9wZW5lZCBvayAqLwotCSAgICBp bnQgcmMsIHFmOwotI2lmbmRlZiBOT1NQTAotCSAgICBxZiA9IHF1ZXJ5OwotI2Vsc2UKLQkgICAg cWYgPSAwOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBDS1RVTklORwotCSAgICByYyA9 IChiaW5hcnkgJiYgIXBhcml0eSkgPwotCSAgICAgIGJkZWNvZGUocmRhdGFwLHB1dGZpbCk6Ci0J ICAgICAgIGRlY29kZShyZGF0YXAsIHFmID8gcHV0dHJtIDogcHV0ZmlsLCAxKTsKLSNlbHNlCi0J ICAgIHJjID0gZGVjb2RlKHJkYXRhcCwgcWYgPyBwdXR0cm0gOiBwdXRmaWwsIDEpOwotI2VuZGlm IC8qIENLVFVOSU5HICovCi0JICAgIGlmIChyYyA8IDApIHsKLQkJZXJycGt0KChDSEFSICopIkVy cm9yIHdyaXRpbmcgZGF0YSIpOwotCQlSRVNVTUU7Ci0JCXJldHVybigtMSk7Ci0JICAgIH0KLSNp ZmRlZiBTVFJFQU1JTkcKLQkgICAgaWYgKHN0cmVhbWluZykJCS8qIFN0cmVhbWluZyB3YXMgbmVn b3RpYXRlZCAqLwotCSAgICAgIGZhc3RhY2soKTsJCS8qIEFDSyB3aXRob3V0IEFDS2luZy4gKi8K LQkgICAgZWxzZQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCSAgICAgIGFjaygpOwkJCS8qIGFj a25vd2xlZGdlIGl0ICovCi0JICAgIEJFR0lOIHJkcGt0OwkJLyogYW5kIHN3aXRjaCB0byByZWNl aXZlLWRhdGEgc3RhdGUgKi8KLQkgICAgcmV0dXJuKC0xKTsKLQl9IGVsc2UgewkJCS8qIG90aGVy d2lzZSAqLwotCSAgICBlcnJwa3QoKENIQVIgKikgcmZfZXJyKTsJLyogc2VuZCBlcnJvciBwYWNr ZXQgKi8KLSAgICAJICAgIFJFU1VNRTsJCQkvKiBhbmQgcXVpdC4gKi8KLQkgICAgcmV0dXJuKC0x KTsKLQl9Ci0gICAgfQotfQotCi1zdGF0aWMgaW50Ci1yY3Zfc2hvcnRyZXBseSgpIHsKLSNpZmRl ZiBQS1RaRVJPSEFDSwotICAgIHN1Y2Nlc3MgPSAwOwotICAgIGRlYnVnKEYxMTEsInJjdl9zaG9y dHJlcGx5IixyZGF0YXAsaXBrdGxlbik7Ci0gICAgaWYgKGlwa3RhY2tbMF0gJiYgIXN0cm5jbXAo aXBrdGFjaywoY2hhciAqKXJkYXRhcCxpcGt0bGVuKSkgewotCS8qIE5vIGl0J3MgdGhlIEFDSyB0 byB0aGUgSSBwYWNrZXQgYWdhaW4gKi8KLQl4ID0gc2NtZCh2Y21kLChDSEFSICopY21hcmcpOwkv KiBTbyBzZW5kIHRoZSBSRU1PVEUgY29tbWFuZCBhZ2FpbiAqLwotCS8qIE1heWJlIHRoaXMgc2hv dWxkIGJlIHJlc2VuZCgpICovCi0JZGVidWcoRjExMCwiSVBLVFpFUk9IQUNLIixpcGt0YWNrLHgp OwotCWlmICh4IDwgMCkgewotCSAgICBlcnJwa3QoKENIQVIgKilzcmltc2cpOwotCSAgICBSRVNV TUU7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotICAgIH0gZWxzZSB7Ci0JaXBrdGFja1swXSA9IE5V TDsKLSNlbmRpZiAvKiBQS1RaRVJPSEFDSyAqLwotCXVyc2VydmVyID0gMTsKLSNpZm5kZWYgTk9T RVJWRVIKLSNpZm5kZWYgTk9TUEwKLQlpZiAocXVlcnkpIHsJCQkvKiBJZiB0byBxdWVyeSwgKi8K LQkgICAgcWJ1ZnAgPSBxdWVyeWJ1ZjsJCS8qICBpbml0aWFsaXplIHF1ZXJ5IHJlc3BvbnNlIGJ1 ZmZlciAqLwotCSAgICBxYnVmbiA9IDA7Ci0JICAgIHF1ZXJ5YnVmWzBdID0gTlVMOwotCX0KLSNl bmRpZiAvKiBOT1NQTCAqLwotCXggPSAxOwotCWlmIChyZW1maWxlKSB7CQkJLyogUmVzcG9uc2Ug cmVkaXJlY3RlZCB0byBmaWxlICovCi0JICAgIHJmX2VyciA9ICJDYW4ndCBvcGVuIGZpbGUiOwot CSAgICBpZiAocmVtcGlwZSkJCS8qIG9yIHBpcGUgKi8KLQkgICAgICB4ID0KLSNpZm5kZWYgTk9Q VVNICi0JCXp4Y21kKFpPRklMRSxyZW1kZXN0KQkvKiBQaXBlOiBTdGFydCBjb21tYW5kICovCi0j ZWxzZQotCQkwCi0jZW5kaWYgLyogTk9QVVNIICovCi0JCTsKLQkgICAgZWxzZQotCSAgICAgIHgg PSBvcGVuYShyZW1kZXN0LCZpYXR0cik7IC8qIEZpbGU6IE9wZW4gd2l0aCBhdHRyaWJ1dGVzICov Ci0JICAgIGRlYnVnKEYxMTEsInJjdl9zaG9ydHJlcGx5IHJlbWZpbGUiLHJlbWRlc3QseCk7Ci0J fSBlbHNlIHsKLQkgICAgeCA9IG9wZW50KCZpYXR0cik7CQkvKiAib3BlbiIgdGhlIHNjcmVlbiAq LwotCX0KLQlpZiAoeCkgewkJCS8qIElmIGZpbGUgd2FzIG9wZW5lZCBvayAqLwotCSAgICBpZiAo ZGVjb2RlKHJkYXRhcCwKLSNpZm5kZWYgTk9TUEwKLQkJICAgICAgIChxdWVyeSB8fCAhcmVtZmls ZSkgPyBwdXR0cm0gOgotI2Vsc2UKLQkJICAgICAgICFyZW1maWxlID8gcHV0dHJtIDoKLSNlbmRp ZiAvKiBOT1NQTCAqLwotCQkgICAgICAgenB1dGZpbCwgMSkgPCAwKSB7IC8qIE5vdGU6IHpwdXRm aWwsIG5vdCBwdXRmaWwuICovCi0JCWVycnBrdCgoQ0hBUiAqKSJFcnJvciB3cml0aW5nIGRhdGEi KTsKLQkJUkVTVU1FOwotCQlyZXR1cm4oLTEpOwotCSAgICB9IGVsc2UgewotCQlpZiAocmRhdGFw KQkJLyogSWYgd2UgaGFkIGRhdGEgKi8KLQkJICBpZiAoKnJkYXRhcCkJCS8qIGFkZCBhIGxpbmUg dGVybWluYXRvciAqLwotCQkgICAgaWYgKHJlbWZpbGUpIHsJLyogdG8gZmlsZSAqLwotCQkJenNv dXRsKFpPRklMRSwiIik7Ci0JCSAgICB9IGVsc2UgewkJLyogb3IgdG8gc2NyZWVuLiAqLwotI2lm bmRlZiBOT0lDUAotCQkJaWYgKCFxdWVyeSB8fCAheGNtZHNyYykKLSNlbmRpZiAvKiBOT0lDUCAq LwotCQkJICBpZiAoIShxdWlldCAmJiByY2RhY3RpdmUpKQotCQkJICAgIGNvbm9sbCgiIik7Ci0J CSAgICB9Ci0JCWlmIChieWVfYWN0aXZlICYmIG5ldHdvcmspIHsgLyogSSBzZW50IEJZRSBvciBS RU1PVEUgTE9HT1VUICovCi0JCSAgICBtc2xlZXAoNTAwKTsJLyogY29tbWFuZCBhbmQgZ290IHRo ZSBBQ0suLi4gKi8KLQkJICAgIGJ5ZV9hY3RpdmUgPSAwOwotCQkgICAgdHRjbG9zKDApOwotCQl9 Ci0JCWNsc29mKDApOwotCQlpZiAoIWVwa3RzZW50ICYmICFlcGt0cmN2ZCkgLyogSWYgbm8gZXJy b3IgcGFja2V0Li4uICovCi0JCSAgc3VjY2VzcyA9IDE7CQkvKiBzdWNjZXNzLiAqLwotCQlSRVNV TUU7Ci0JCXJldHVybigtMSk7Ci0JICAgIH0KLQl9IGVsc2UgewkJCS8qIEZpbGUgbm90IG9wZW5l ZCBPSyAqLwotCSAgICBlcnJwa3QoKENIQVIgKikgcmZfZXJyKTsJLyogc2VuZCBlcnJvciBtZXNz YWdlICovCi0JICAgIFJFU1VNRTsJCQkvKiBhbmQgcXVpdC4gKi8KLQkgICAgcmV0dXJuKC0xKTsK LQl9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSNpZmRlZiBQS1RaRVJPSEFDSwotICAgIH0KLSNl bmRpZiAvKiBQS1RaRVJPSEFDSyAqLwotICAgIGRlYnVnKEYxMDEsInJjdl9zaG9ydHJlcGx5IGZh bGx0aHJ1IiwiIixzdWNjZXNzKTsKLSAgICByZXR1cm4oLTEpOwotfQotCi0KLXN0YXRpYyBpbnQK LXNydl9xdWVyeSgpIHsKLSNpZm5kZWYgTk9TRVJWRVIKLSNpZm5kZWYgTk9TUEwKLSAgICBjaGFy IGM7Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNr eGxvZ2dpbmcpCi0gICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUg UVVFUlkiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZmRlZiBJ S1NEQgotICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBRVUVSWSIsIChj aGFyICopKHNydmNtZCsyKSwgIiIpOwotI2VuZGlmIC8qIElLU0RCICovCi0gICAgYyA9ICooc3J2 Y21kKzIpOwkJCS8qIFEgPSBRdWVyeSwgUyA9IFNldCAqLwotICAgIGlmIChjID09ICdRJykgewkJ CS8qIFF1ZXJ5ICovCi0JaWYgKCFFTkFCTEVEKGVuX3F1ZSkpIHsgLyogU2VjdXJpdHkgKi8KLQkg ICAgZXJycGt0KChDSEFSICopIlJFTU9URSBRVUVSWSBkaXNhYmxlZCIpOwotCSAgICBSRVNVTUU7 Ci0JICAgIHJldHVybigtMSk7Ci0JfSBlbHNlIHsJCQkvKiBRdWVyeSBhbGxvd2VkICovCi0JICAg IGludCBuOyBjaGFyICpwLCAqcTsKLQkgICAgcWJ1ZnAgPSBxdWVyeWJ1ZjsJCS8qIFdpcGUgb3V0 IG9sZCBzdHVmZiAqLwotCSAgICBxYnVmbiA9IDA7Ci0JICAgIHF1ZXJ5YnVmWzBdID0gTlVMOwot CSAgICBwID0gKGNoYXIgKikgc3J2Y21kICsgMzsJLyogUG9pbnRlciBmb3IgbWFraW5nIHdyYXBw ZXIgKi8KLQkgICAgbiA9IHN0cmxlbigoY2hhciAqKXNydmNtZCk7CS8qIFBvc2l0aW9uIG9mIGVu ZCAqLwotCSAgICBjID0gKihzcnZjbWQrNCk7CQkvKiBXaGljaCB0eXBlIG9mIHZhcmlhYmxlICov Ci0KLQkgICAgaWYgKCooc3J2Y21kKzYpID09IENNRFEpIHsJLyogU3RhcnRzIHdpdGggY29tbWFu ZCBxdW90ZT8gKi8KLQkJcCA9IChjaGFyICopIHNydmNtZCArIDY7IC8qIFRha2UgaXQgbGl0ZXJh bGx5ICovCi0JCWlmICgqcCA9PSBDTURRKSBwKys7Ci0JICAgIH0gZWxzZSB7CQkJLyogVGhleSBw bGF5ZWQgYnkgdGhlIHJ1bGVzICovCi0JCWlmIChjID09ICdLJykgewkJLyogS2VybWl0IHZhcmlh YmxlICovCi0JCSAgICBpbnQgazsKLQkJICAgIGsgPSAoaW50KSBzdHJsZW4ocCk7Ci0JCSAgICBp ZiAoayA+IDAgJiYgcFtrLTFdID09ICcpJykgewotCQkJcCA9IChjaGFyICopKHNydmNtZCArIDQp OwotCQkJKihzcnZjbWQrNCkgPSBDTURROwotCQkJKihzcnZjbWQrNSkgPSAnZic7IC8qIEZ1bmN0 aW9uLCBzbyBtYWtlIGl0IFxmLi4uKCkgKi8KLQkJICAgIH0gZWxzZSB7Ci0JCQkqKHNydmNtZCsz KSA9IENNRFE7IC8qIFN0dWZmIHdyYXBwaW5nIGludG8gYnVmZmVyICovCi0JCQkqKHNydmNtZCs0 KSA9ICd2JzsgIC8qIFZhcmlhYmxlLCBzbyBtYWtlIGl0IFx2KC4uLikgKi8KLQkJCSooc3J2Y21k KzUpID0gJygnOyAgLyogYXJvdW5kIHZhcmlhYmxlIG5hbWUgKi8KLQkJCSooc3J2Y21kK24pID0g JyknOwotCQkJKihzcnZjbWQrbisxKSA9IE5VTDsKLQkJICAgIH0KLQkJfSBlbHNlIHsKLQkJICAg ICooc3J2Y21kKzMpID0gQ01EUTsgLyogU3R1ZmYgd3JhcHBpbmcgaW50byBidWZmZXIgKi8KLQkJ ICAgICooc3J2Y21kKzQpID0gJ3YnOyAvKiAgVmFyaWFibGUsIHNvIG1ha2UgaXQgXHYoLi4uKSAq LwotCQkgICAgKihzcnZjbWQrNSkgPSAnKCc7CS8qIGFyb3VuZCB2YXJpYWJsZSBuYW1lICovCi0J CSAgICAqKHNydmNtZCtuKSA9ICcpJzsKLQkJICAgICooc3J2Y21kK24rMSkgPSBOVUw7Ci0JCSAg ICBpZiAoYyA9PSAnUycpIHsJLyogU3lzdGVtIHZhcmlhYmxlICovCi0JCQkqKHNydmNtZCs0KSA9 ICckJzsgLyogIHNvIGl0J3MgXCQoLi4uKSAqLwotCQkgICAgfSBlbHNlIGlmIChjID09ICdHJykg eyAvKiBOb24tXCBHbG9iYWwgdmFyaWFibGUgKi8KLQkJCSooc3J2Y21kKzQpID0gJ20nOyAvKiAg c28gd3JhcCBpdCBpbiBcbSguLi4pICovCi0JCSAgICB9Ci0JCX0KLQkgICAgfQkJCQkvKiBOb3cg ZXZhbHVhdGUgaXQgKi8KLQkgICAgbiA9IFFCVUZMOwkJCS8qIE1heCBsZW5ndGggKi8KLQkgICAg cSA9IHF1ZXJ5YnVmOwkJLyogV2hlcmUgdG8gcHV0IGl0ICovCi0JICAgIGlmICh6enN0cmluZyhw LCZxLCZuKSA8IDApIHsKLQkJZXJycGt0KChuID4gMCkgPyAoQ0hBUiAqKSJDYW4ndCBnZXQgdmFs dWUiCi0JCSAgICAgICAgICAgICAgIDogKENIQVIgKikiVmFsdWUgdG9vIGxvbmciCi0JCSAgICAg ICApOwotCQlSRVNVTUU7Ci0JCXJldHVybigtMSk7Ci0JICAgIH0gZWxzZSB7Ci0JCWlmIChlbmNz dHIoKENIQVIgKilxdWVyeWJ1ZikgPiAtMSkgeyAvKiBFbmNvZGUgaXQgKi8KLQkJICAgIGFjazEo ZGF0YSk7CQkvKiBJZiBpdCBmaXRzLCBzZW5kIGl0IGJhY2sgaW4gQUNLICovCi0JCSAgICBzdWNj ZXNzID0gMTsKLQkJICAgIFJFU1VNRTsKLQkJICAgIHJldHVybigtMSk7Ci0JCX0gZWxzZSBpZiAo c25kc3RyaW5nKHF1ZXJ5YnVmKSkgeyAvKiBMb25nIGZvcm0gcmVzcG9uc2UgKi8KLQkJICAgIEJF R0lOIHNzaW5pdDsKLQkJICAgIHJldHVybigtMSk7Ci0JCX0gZWxzZSB7CQkvKiBzbmRobHAoKSBm YWlscyAqLwotCQkgICAgZXJycGt0KChDSEFSICopIkNhbid0IHNlbmQgdmFsdWUiKTsKLQkJICAg IFJFU1VNRTsKLQkJICAgIHJldHVybigtMSk7Ci0JCX0KLQkgICAgfQotCX0KLSAgICB9IGVsc2Ug aWYgKGMgPT0gJ1MnKSB7CQkvKiBTZXQgKGFzc2lnbikgKi8KLQlpZiAoIUVOQUJMRUQoZW5fYXNn KSkgewkJLyogU2VjdXJpdHkgKi8KLQkgICAgZXJycGt0KChDSEFSICopIlJFTU9URSBBU1NJR04g ZGlzYWJsZWQiKTsKLQkgICAgUkVTVU1FOwotCSAgICByZXR1cm4oLTEpOwotCX0gZWxzZSB7CQkJ LyogT0sgKi8KLQkgICAgaW50IG47Ci0JICAgIG4gPSB4dW5jaGFyKCooc3J2Y21kKzMpKTsJLyog TGVuZ3RoIG9mIG5hbWUgKi8KLQkgICAgbiA9IDMgKyBuICsgMTsJCS8qIFBvc2l0aW9uIG9mIGxl bmd0aCBvZiB2YWx1ZSAqLwotCSAgICAqKHNydmNtZCtuKSA9IE5VTDsJCS8qIERvbid0IG5lZWQg aXQgKi8KLQkgICAgaWYgKGFkZG1hYygoY2hhciAqKShzcnZjbWQrNCksKGNoYXIgKikoc3J2Y21k K24rMSkpIDwgMCkKLQkgICAgICBlcnJwa3QoKENIQVIgKikiUkVNT1RFIEFTU0lHTiBmYWlsZWQi KTsKLQkgICAgZWxzZSB7Ci0JCWFjaygpOwotCQlzdWNjZXNzID0gMTsKLQkgICAgfQotCSAgICBS RVNVTUU7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotICAgIH0gZWxzZSB7Ci0JZXJycGt0KChDSEFS ICopIkJhZGx5IGZvcm1lZCBzZXJ2ZXIgY29tbWFuZCIpOwotCVJFU1VNRTsKLQlyZXR1cm4oLTEp OwotICAgIH0KLSNlbHNlCi0gICAgZXJycGt0KChDSEFSICopIlZhcmlhYmxlIHF1ZXJ5L3NldCBu b3QgYXZhaWxhYmxlIik7Ci0gICAgUkVTVU1FOwotICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyog Tk9TUEwgKi8KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotCi1zdGF0aWMgaW50Ci1zcnZfY29w eSgpIHsKLSNpZm5kZWYgTk9TRVJWRVIKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNs b2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAx LCAic2VydmVyIiwgIlJFTU9URSBDT1BZIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENL U1lTTE9HICovCi0jaWZkZWYgWkNPUFkKLSAgICBpZiAoIUVOQUJMRUQoZW5fY3B5KSkgewotCWVy cnBrdCgoQ0hBUiAqKSJSRU1PVEUgQ09QWSBkaXNhYmxlZCIpOwotCVJFU1VNRTsKLQlyZXR1cm4o LTEpOwotICAgIH0gZWxzZSB7Ci0JY2hhciAqc3RyMSwgKnN0cjIsIGYxWzI1Nl0sIGYyWzI1Nl07 Ci0JaW50ICBsZW4xLCBsZW4yOwotICAgICAgICBsZW4xID0geHVuY2hhcihzcnZjbWRbMV0pOwkv KiBTZXBhcmF0ZSB0aGUgcGFyYW1ldGVycyAqLwotICAgICAgICBsZW4yID0geHVuY2hhcihzcnZj bWRbMitsZW4xXSk7Ci0gICAgICAgIHN0cm5jcHkoZjEsKGNoYXIgKikoc3J2Y21kKzIpLGxlbjEp OwotICAgICAgICBmMVtsZW4xXSA9IE5VTDsKLSAgICAgICAgc3RybmNweShmMiwoY2hhciAqKShz cnZjbWQrMytsZW4xKSxsZW4yKTsKLSAgICAgICAgZjJbbGVuMl0gPSBOVUw7Ci0jaWZkZWYgSUtT REIKLQlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgQ09QWSIsIGYxLCBmMik7 Ci0jZW5kaWYgLyogSUtTREIgKi8KLQlpZiAoIUVOQUJMRUQoZW5fY3dkKSkgewkJLyogSWYgQ1dE IGlzIGRpc2FibGVkICovCi0JICAgIHpzdHJpcChmMSwmc3RyMSk7CQkvKiBhbmQgdGhleSBpbmNs dWRlZCBhIHBhdGhuYW1lLCAqLwotICAgICAgICAgICAgenN0cmlwKGYyLCZzdHIyKTsKLQkgICAg aWYgKHN0cmNtcChmMSxzdHIxKSB8fCBzdHJjbXAoZjIsc3RyMikpIHsgLyogUmVmdXNlLiAqLwot CQllcnJwa3QoKENIQVIgKikiQWNjZXNzIGRlbmllZCIpOwotCQlSRVNVTUU7CQkJLyogUmVtZW1i ZXIsIHRoaXMgaXMgbm90IGEgZ290byEgKi8KLQkJcmV0dXJuKC0xKTsKLQkgICAgfQotCX0KLQlp ZiAoc3RhdGUgPT0gZ2VuZXJpYykgewkJLyogSXQncyBPSyB0byBnbyBhaGVhZC4gKi8KLSAgICAg ICAgICAgIGlmICh6Y29weShmMSxmMikpIHsJCS8qIFRyeSAqLwotCQllcnJwa3QoKENIQVIgKiki Q2FuJ3QgY29weSBmaWxlIik7IC8qIGdpdmUgZXJyb3IgbWVzc2FnZSAqLwotCSAgICB9IGVsc2Ug ewotCQlzdWNjZXNzID0gMTsKLQkJYWNrKCk7Ci0JICAgIH0KLSAgICAgICAgICAgIFJFU1VNRTsJ CQkvKiB3YWl0IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICovCi0JICAgIHJldHVybigtMSk7Ci0J fQotICAgIH0KLSAgICByZXR1cm4oLTEpOwotI2Vsc2UgLyogbm8gWkNPUFkgKi8KLSAgICBlcnJw a3QoKENIQVIgKikiUkVNT1RFIENPUFkgbm90IGF2YWlsYWJsZSIpOyAvKiBnaXZlIGVycm9yIG1l c3NhZ2UgKi8KLSAgICBSRVNVTUU7CQkJCS8qIHdhaXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQg Ki8KLSAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIFpDT1BZICovCi0jZW5kaWYgLyogTk9TRVJW RVIgKi8KLX0KLQotc3RhdGljIGludAotc3J2X3JlbmFtZSgpIHsKLSNpZm5kZWYgTk9TRVJWRVIK LSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9n Z2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBSRU5B TUUiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZmRlZiBaUkVO QU1FCi0gICAgaWYgKCFFTkFCTEVEKGVuX3JlbikpIHsKLQllcnJwa3QoKENIQVIgKikiUkVNT1RF IFJFTkFNRSBkaXNhYmxlZCIpOwotCVJFU1VNRTsKLQlyZXR1cm4oLTEpOwotICAgIH0gZWxzZSB7 CQkJCS8qIFJFTkFNRSBpcyBlbmFibGVkICovCi0JY2hhciAqc3RyMSwgKnN0cjIsIGYxWzI1Nl0s IGYyWzI1Nl07Ci0JaW50IGxlbjEsIGxlbjI7Ci0JbGVuMSA9IHh1bmNoYXIoc3J2Y21kWzFdKTsJ LyogU2VwYXJhdGUgdGhlIHBhcmFtZXRlcnMgKi8KLQlsZW4yID0geHVuY2hhcihzcnZjbWRbMits ZW4xXSk7Ci0Jc3RybmNweShmMSwoY2hhciAqKShzcnZjbWQrMiksbGVuMSk7Ci0JZjFbbGVuMV0g PSBOVUw7Ci0Jc3RybmNweShmMiwoY2hhciAqKShzcnZjbWQrMytsZW4xKSxsZW4yKTsKLQlmMlts ZW4yXSA9IE5VTDsKLQlsZW4yID0geHVuY2hhcihzcnZjbWRbMitsZW4xXSk7Ci0Jc3RybmNweShm MSwoY2hhciAqKShzcnZjbWQrMiksbGVuMSk7Ci0JZjFbbGVuMV0gPSBOVUw7Ci0Jc3RybmNweShm MiwoY2hhciAqKShzcnZjbWQrMytsZW4xKSxsZW4yKTsKLQlmMltsZW4yXSA9IE5VTDsKLSNpZmRl ZiBJS1NEQgotCWlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBSRU5BTUUiLCBm MSwgZjIpOwotI2VuZGlmIC8qIElLU0RCICovCi0JaWYgKCFFTkFCTEVEKGVuX2N3ZCkpIHsJCS8q IElmIENXRCBpcyBkaXNhYmxlZCAqLwotCSAgICB6c3RyaXAoZjEsJnN0cjEpOwkJLyogYW5kIHRo ZXkgaW5jbHVkZWQgYSBwYXRobmFtZSwgKi8KLQkgICAgenN0cmlwKGYyLCZzdHIyKTsKLQkgICAg aWYgKCBzdHJjbXAoZjEsc3RyMSkgfHwgc3RyY21wKGYyLHN0cjIpICkgeyAvKiByZWZ1c2UuICov Ci0JCWVycnBrdCgoQ0hBUiAqKSJBY2Nlc3MgZGVuaWVkIik7Ci0JCVJFU1VNRTsJCQkvKiBSZW1l bWJlciwgdGhpcyBpcyBub3QgYSBnb3RvISAqLwotCQlyZXR1cm4oLTEpOwotCSAgICB9Ci0JfQot CWlmIChzdGF0ZSA9PSBnZW5lcmljKSB7CQkvKiBJdCdzIE9LIHRvIGdvIGFoZWFkLiAqLwotCSAg ICBpZiAoenJlbmFtZShmMSxmMikpIHsJLyogVHJ5ICovCi0JCWVycnBrdCgoQ0hBUiAqKSJDYW4n dCByZW5hbWUgZmlsZSIpOyAvKiBHaXZlIGVycm9yIG1zZyAqLwotCSAgICB9IGVsc2UgewotCQlz dWNjZXNzID0gMTsKLQkJYWNrKCk7Ci0JICAgIH0KLQkgICAgUkVTVU1FOwkJCS8qIFdhaXQgZm9y IG5leHQgc2VydmVyIGNvbW1hbmQgKi8KLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgfQotICAg IHJldHVybigtMSk7Ci0jZWxzZSAvKiBubyBaUkVOQU1FICovCi0gICAgLyogR2l2ZSBlcnJvciBt ZXNzYWdlICovCi0gICAgZXJycGt0KChDSEFSICopIlJFTU9URSBSRU5BTUUgbm90IGF2YWlsYWJs ZSIpOwotICAgIFJFU1VNRTsJCQkJLyogV2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLwot ICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogWlJFTkFNRSAqLwotI2VuZGlmIC8qIE5PU0VSVkVS ICovCi19Ci0KLXN0YXRpYyBpbnQKLXNydl9sb2dpbigpIHsKLSNpZm5kZWYgTk9TRVJWRVIKLSAg ICBjaGFyIGYxW0xPR0lOTEVOKzFdLCBmMltMT0dJTkxFTisxXSwgZjNbTE9HSU5MRU4rMV07Ci0g ICAgQ0hBUiAqcDsKLSAgICBpbnQgbGVuLCBpOwotCi0gICAgZGVidWcoRjEwMSwiUkVNT1RFIExP R0lOIHhfbG9naW4iLCIiLHhfbG9naW4pOwotICAgIGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiB4 X2xvZ2dlZCIsIiIseF9sb2dnZWQpOwotCi0gICAgZjFbMF0gPSBOVUw7IGYyWzBdID0gTlVMOyBm M1swXSA9IE5VTDsKLSAgICBsZW4gPSAwOwotICAgIGlmIChzcnZjbWRbMV0pCQkJLyogRmlyc3Qg bGVuZ3RoIGZpZWxkICovCi0gICAgICBsZW4gPSB4dW5jaGFyKHNydmNtZFsxXSk7CQkvKiBTZXBh cmF0ZSB0aGUgcGFyYW1ldGVycyAqLwotCi0gICAgaWYgKHhfbG9naW4pIHsJCQkvKiBMb2dpbiBy ZXF1aXJlZCAqLwotCWlmICh4X2xvZ2dlZCkgewkJCS8qIEFuZCBhbHJlYWR5IGxvZ2dlZCBpbiAq LwotCSAgICBpZiAobGVuID4gMCkgewkJLyogTG9nZ2luZyBpbiBhZ2FpbiAqLwotCQllcnJwa3Qo KENIQVIgKikiQWxyZWFkeSBsb2dnZWQgaW4uIik7Ci0JICAgIH0gZWxzZSB7CQkJLyogTG9nZ2lu ZyBvdXQgKi8KLQkJZGVidWcoRjEwMSwiUkVNT1RFIExPR09VVCIsIiIseF9sb2dnZWQpOwotI2lm ZGVmIENLU1lTTE9HCi0JCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykK LQkJICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgTE9HT1VUIiwgTlVM TCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZmRlZiBJS1NEQgotCQlpZiAoaWtkYm9wZW4p IHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgTE9HT1VUIiwgIiIsICIiKTsKLSNlbmRpZiAvKiBJS1NE QiAqLwotCQl0bG9nKEYxMTAsIkxvZ2dlZCBvdXQiLHhfdXNlciwwKTsKLQkJYWNrMSgoQ0hBUiAq KSJMb2dnZWQgb3V0Iik7Ci0JCXN1Y2Nlc3MgPSAxOwotCQltc2xlZXAoNTAwKTsKLSNpZmRlZiBD S19MT0dJTgotCQl4X2xvZ2dlZCA9IDA7Ci0jaWZkZWYgSUtTRAotCQlpZiAoaW5zZXJ2ZXIpCi0J CSAgY2t4bG9nb3V0KCk7Ci0jZW5kaWYgLyogSUtTRCAqLwotI2VuZGlmIC8qIENLX0xPR0lOICov Ci0JICAgIH0KLQl9IGVsc2UgewkJCS8qIE5vdCBsb2dnZWQgaW4geWV0ICovCi0JICAgIGRlYnVn KEYxMDEsIlJFTU9URSBMT0dJTiBsZW4iLCIiLGxlbik7Ci0JICAgIGlmIChsZW4gPiAwKSB7CQkv KiBIYXZlIHVzZXJuYW1lICovCi0jaWZkZWYgQ0tTWVNMT0cKLQkJaWYgKGNreHN5c2xvZyA+PSBT WVNMR19QUiAmJiBja3hsb2dnaW5nKQotCQkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVy IiwgIlJFTU9URSBMT0dJTiIsIE5VTEwpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0JCWlmIChs ZW4gPiBMT0dJTkxFTikgewotCQkgICAgZXJycGt0KChDSEFSICopIlVzZXJuYW1lIHRvbyBsb25n Iik7Ci0JCX0KLQkJcCA9IHNydmNtZCArIDI7CQkvKiBQb2ludCB0byBpdCAqLwotCQlmb3IgKGkg PSAwOyBpIDwgbGVuOyBpKyspIC8qIENvcHkgaXQgKi8KLQkJICBmMVtpXSA9IHBbaV07Ci0JCWYx W2xlbl0gPSBOVUw7CQkvKiBUZXJtaW5hdGUgaXQgKi8KLQkJcCArPSBsZW47CQkvKiBQb2ludCB0 byBuZXh0IGxlbmd0aCBmaWVsZCAqLwotCQlpZiAoKnApIHsJCS8qIElmIHdlIGhhdmUgb25lICov Ci0JCSAgICBsZW4gPSB4dW5jaGFyKCpwKyspOyAvKiBkZWNvZGUgaXQgKi8KLQkJICAgIGlmIChs ZW4gPiAwICYmIGxlbiA8PSBMT0dJTkxFTikgewotCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsr KSAvKiBTYW1lIGRlYWwgZm9yIHBhc3N3b3JkICovCi0JCQkgIGYyW2ldID0gcFtpXTsKLQkJCWYy W2xlbl0gPSBOVUw7Ci0JCQlwICs9IGxlbjsJLyogQW5kIGFjY291bnQgKi8KLQkJCWlmICgqcCkg ewotCQkJICAgIGxlbiA9IHh1bmNoYXIoKnArKyk7Ci0JCQkgICAgaWYgKGxlbiA+IDAgJiYgbGVu IDw9IExPR0lOTEVOKSB7Ci0JCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQkJCSAgZjNb aV0gPSBwW2ldOwkvKiBTZXQgYnV0IG5ldmVyIHVzZWQgKi8KLQkJCQlmM1tsZW5dID0gTlVMOyAv KiAoYmVjYXVzZSBhY2NvdW50IG5vdCB1c2VkKSAqLwotCQkJICAgIH0KLQkJCX0KLQkJICAgIH0K LQkJfQotCQlkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HSU4gMSIsIiIseF9sb2dnZWQpOwotI2lmZGVm IElLU0QKLSNpZmRlZiBDS19MT0dJTgotCQlpZiAoaW5zZXJ2ZXIpIHsJCS8qIExvZyBpbiB0byBz eXN0ZW0gZm9yIHJlYWwgKi8KLQkJICAgIHhfbG9nZ2VkID0gY2t4bG9naW4oKENIQVIgKilmMSwo Q0hBUiAqKWYyLE5VTEwsMCk7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HSU4gMiIsIiIs eF9sb2dnZWQpOwotCQkgICAgaWYgKHhfbG9nZ2VkKSB7CS8qIENvdW50IGF0dGVtcHRzICovCi0J CQlsb2d0cmllcyA9IDA7Ci0JCQlqdXN0b25lID0gMTsKLQkJICAgIH0gZWxzZSB7Ci0JCQlsb2d0 cmllcysrOwotCQkJc2xlZXAobG9ndHJpZXMpOwotCQkgICAgfQotCQl9IGVsc2UKLSNlbmRpZiAv KiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQkJICBpZiAoeF91c2VyICYmIHhfcGFz c3dkKSB7IC8qIFVzZXIgYW5kIHBhc3N3b3JkIG11c3QgbWF0Y2ggKi8KLQkJICAgICAgaWYgKCFz dHJjbXAoeF91c2VyLGYxKSkgLyogU0VUIFNFUlZFUiBMT0dJTiAqLwotCQkJaWYgKCFzdHJjbXAo eF9wYXNzd2QsZjIpKQotCQkJICB4X2xvZ2dlZCA9IDE7Ci0JCSAgICAgIGRlYnVnKEYxMDEsIlJF TU9URSBMT0dJTiAzIiwiIix4X2xvZ2dlZCk7Ci0JCSAgfSBlbHNlIGlmICh4X3VzZXIpIHsJLyog T25seSB1c2VybmFtZSBnaXZlbiwgbm8gcGFzc3dvcmQgKi8KLQkJICAgICAgaWYgKCFzdHJjbXAo eF91c2VyLGYxKSkgLyogc28gb25seSB1c2VybmFtZSBtdXN0IG1hdGNoICovCi0JCQl4X2xvZ2dl ZCA9IDE7Ci0JCSAgICAgIGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiA0IiwiIix4X2xvZ2dlZCk7 Ci0JCSAgfQotI2lmZGVmIENLX0xPR0lOIAotICAgICAgICAgICAgICAgIGVsc2UgewotCQkgICAg eF9sb2dnZWQgPSBja3hsb2dpbigoQ0hBUiAqKWYxLChDSEFSICopZjIsTlVMTCwwKTsKLQkJICAg IGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiA1IiwiIix4X2xvZ2dlZCk7Ci0gICAgICAgICAgICAg ICAgfQotI2VuZGlmIC8qIENLX0xPR0lOICovCi0JCWlmICh4X2xvZ2dlZCkgewkJLyogTG9nZ2Vk IGluPyAqLwotCQkgICAgdGxvZyhGMTEwLCJMb2dnZWQgaW4iLCB4X3VzZXIsIDApOwotCQkgICAg aWYgKGlzZ3Vlc3QpCi0JCSAgICAgIGFjazEoKENIQVIgKikiTG9nZ2VkIGluIGFzIGd1ZXN0IC0g cmVzdHJpY3Rpb25zIGFwcGx5Iik7Ci0JCSAgICBlbHNlCi0JCSAgICAgIGFjazEoKENIQVIgKiki TG9nZ2VkIGluIik7Ci0JCSAgICBzdWNjZXNzID0gMTsKLQkJfSBlbHNlIHsKLQkJICAgIHRsb2co RjExMCwiTG9naW4gZmFpbGVkIiwgZjEsIDApOwotCQkgICAgZXJycGt0KChDSEFSICopIkFjY2Vz cyBkZW5pZWQuIik7Ci0jaWZkZWYgSUtTRAotI2lmZGVmIENLX0xPR0lOCi0JCSAgICBpZiAoaW5z ZXJ2ZXIgJiYgbG9ndHJpZXMgPiAyKQotCQkgICAgICBja3hsb2dvdXQoKTsKLSNlbmRpZiAvKiBD S19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQkJfQotCSAgICB9IGVsc2UgewkJCS8qIExP R09VVCAqLwotCQllcnJwa3QoKENIQVIgKikiTG9nb3V0IGlnbm9yZWQiKTsKLQkgICAgfQotCX0K LSAgICB9IGVsc2UgewkJCQkvKiBMb2dpbiBub3QgcmVxdWlyZWQgKi8KLQlpZiAobGVuID4gMCkK LQkgIGVycnBrdCgoQ0hBUiAqKSJMb2dpbiBpZ25vcmVkLiIpOwotCWVsc2UKLQkgIGVycnBrdCgo Q0hBUiAqKSJMb2dvdXQgaWdub3JlZC4iKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8K LSAgICBSRVNVTUU7Ci0gICAgcmV0dXJuKC0xKTsKLX0KLQotc3RhdGljIGludAotc3J2X3RpbWVv dXQoKSB7Ci0gICAgLyogSzk1IGRvZXMgdGhpcyBpdHMgb3duIHdheSAqLwotICAgIGlmIChpZGxl dG1vKSB7Ci0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgICAg cHJpbnRmKCJcclxuSUtTRCBJRExFIFRJTUVPVVQ6ICVkIHNlY1xyXG4iLCBzcnZpZGwpOwotICAg ICAgICAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJ S1NEICovCi0JaWRsZXRtbyA9IDA7Ci0JcHJpbnRmKCJcclxuU0VSVkVSIElETEUgVElNRU9VVDog JWQgc2VjXHJcbiIsIHNydmlkbCk7Ci0JeGl0c3RhIHw9ICh3aGF0ICYgV19LRVJNSVQpOwotCVFV SVQ7Ci0gICAgfQotI2lmbmRlZiBOT1NFUlZFUgotICAgIGVsc2UgaWYgKGZhdGFsaW8pIHsJCQkv KiBDb25uZWN0aW9uIGxvc3QgKi8KLSNpZmRlZiBDS1NZU0xPRwotCSAgaWYgKGNreHN5c2xvZyA+ PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotCSAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNl cnZlciIsICJDb25uZWN0aW9uIGxvc3QiLCBOVUxMKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwot I2lmZGVmIElLU0RCCi0JICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJTRVJWRVIgRElT Q09OTkVDVCIsKGNoYXIgKilzcnZjbWQsICIiKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotCXhpdHN0 YSB8PSB3aGF0OwotCVFVSVQ7Ci0gICAgfSBlbHNlIGlmIChpbnRlcnJ1cHRlZCkgewkJLyogSW50 ZXJydXB0ZWQgYnkgaGFuZCAqLwotCWlmICghRU5BQkxFRChlbl9maW4pKSB7Ci0JICAgIGVycnBr dCgoQ0hBUiAqKSJRVUlUIGRpc2FibGVkIik7Ci0JICAgIFJFU1VNRTsKLQkgICAgcmV0dXJuKC0x KTsKLQl9IGVsc2UgewotCSAgICBpZiAod2hhdCA9PSBXX1NFTkQgfHwgd2hhdCA9PSBXX1JFQ1Yg fHwgd2hhdCA9PSBXX1JFTU8pIHsKLQkJc3VjY2VzcyA9IDA7Ci0jaWZkZWYgQ0tTWVNMT0cKLQkJ aWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotCQkgIGNrc3lzbG9nKFNZ U0xHX1BSLCAxLCAic2VydmVyIiwgIkludGVycnVwdGVkIiwgTlVMTCk7Ci0jZW5kaWYgLyogQ0tT WVNMT0cgKi8KLQkgICAgfSBlbHNlIGlmICh3aGF0ID09IFdfTk9USElORyAmJiBmaWxjbnQgPT0g MCkgewotCQlzdWNjZXNzID0gMTsKLQkgICAgfSAvKiBPdGhlcndpc2UgbGVhdmUgc3VjY2VzcyBh bG9uZSAqLwotCSAgICB4aXRzdGEgfD0gKHdoYXQgJiBXX0tFUk1JVCk7Ci0JICAgIFFVSVQ7Ci0J fQotICAgIH0gZWxzZSB7CQkJCS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KLQlkZWJ1ZyhGMTAwLCJT RVJWRVIgKHRvcCkgR09UIFVORVhQRUNURUQgJ3EnIiwiIiwwKTsKLQlRVUlUOwotICAgIH0KLSNl bmRpZiAvKiBOT1NFUlZFUiAqLwotfQotCi1zdGF0aWMgaW50Ci1yY3Zfc19wa3QoKSB7Ci0jaWZu ZGVmIE5PU0VSVkVSCi0gICAgaWYgKHN0YXRlID09IHJnZW4pCi0gICAgICB1cnNlcnZlciA9IDE7 Ci0gICAgaWYgKC8qIHN0YXRlID09IHNlcnZlICYmICovIHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7 Ci0JZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7Ci0JU0VSVkU7Ci0gICAgfSBlbHNl Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSAgICAgIGlmIChzdGF0ZSA9PSBzZXJ2ZSAmJiAhRU5B QkxFRChlbl9zZW4pKSB7IC8qIE5vdCBpbiBzZXJ2ZXIgbW9kZSAqLwotCWVycnBrdCgoQ0hBUiAq KSJTRU5EIGRpc2FibGVkIik7IC8qIHdoZW4gU0VORCBpcyBkaXNhYmxlZC4gKi8KLQlSRVNVTUU7 Ci0JcmV0dXJuKC0xKTsKLSAgICB9IGVsc2UgewkJCQkvKiBPSyB0byBnbyBhaGVhZC4gKi8KLSNp ZmRlZiBDS19UTVBESVIKLQlpZiAoZGxkaXIgJiYgIWZfdG1wZGlyKSB7CS8qIElmIHRoZXkgaGF2 ZSBhIGRvd25sb2FkIGRpcmVjdG9yeSAqLwotCSAgICBkZWJ1ZyhGMTEwLCJyZWNlaXZlIGRvd25s b2FkIGRpciIsZGxkaXIsMCk7Ci0JICAgIGlmIChzID0gemd0ZGlyKCkpIHsJCS8qIEdldCBjdXJy ZW50IGRpcmVjdG9yeSAqLwotCQlkZWJ1ZyhGMTEwLCJyZWNlaXZlIGN1cnJlbnQgZGlyIixzLDAp OwotCQlpZiAoemNoZGlyKGRsZGlyKSkgewkvKiBDaGFuZ2UgdG8gZG93bmxvYWQgZGlyZWN0b3J5 ICovCi0JCSAgICBkZWJ1ZyhGMTAwLCJyZWNlaXZlIHpjaGRpciBvayIsIiIsMCk7Ci0JCSAgICBj a3N0cm5jcHkoc2F2ZGlyLHMsVE1QRElSTEVOKTsKLQkJICAgIGZfdG1wZGlyID0gMTsJLyogUmVt ZW1iZXIgdGhhdCB3ZSBkaWQgdGhpcyAqLwotCQl9IGVsc2UKLQkJICBkZWJ1ZyhGMTAwLCJyZWNl aXZlIHpjaGRpciBmYWlsZWQiLCIiLDApOwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIENLX1RNUERJ UiAqLwotCW5ha3N0YXRlID0gMTsJCQkvKiBDYW4gc2VuZCBOQUtzIGZyb20gaGVyZS4gKi8KLQly aW5pdChyZGF0YXApOwkJCS8qIFNldCBwYXJhbWV0ZXJzICovCi0JaWYgKGJjdGYpIHsKLQkgICAg YmN0dSA9IDM7Ci0JICAgIGJjdGwgPSAzOwotCX0gZWxzZSB7Ci0JICAgIGJjdHUgPSBiY3RyOwkg ICAgICAgLyogc3dpdGNoIHRvIGFncmVlZC11cG9uIGJsb2NrIGNoZWNrICovCi0JICAgIGJjdGwg PSAoYmN0dSA9PSA0KSA/IDIgOiBiY3R1OyAvKiBTZXQgYmxvY2stY2hlY2sgbGVuZ3RoICovCi0J fQotCXdoYXQgPSBXX1JFQ1Y7CQkJLyogUmVtZW1iZXIgd2UncmUgcmVjZWl2aW5nICovCi0JbGFz dHhmZXIgPSBXX1JFQ1Y7Ci0JcmVzZXRjKCk7CQkJLyogUmVzZXQgY291bnRlcnMgKi8KLQlydGlt ZXIoKTsJCQkvKiBSZXNldCB0aW1lciAqLwotI2lmZGVmIEdGVElNRVIKLQlyZnRpbWVyKCk7Ci0j ZW5kaWYgLyogR0ZUSU1FUiAqLwotCXN0cmVhbW9uKCk7Ci0JQkVHSU4gcmZpbGU7CQkJLyogR28g aW50byByZWNlaXZlLWZpbGUgc3RhdGUgKi8KLSAgICB9Ci0gICAgcmV0dXJuKC0xKTsKLX0KLQot Ci0vKiBFTkQgT0YgUk9VVElORVMgTU9WRUQgT1VUIE9GIFNUQVRFIE1BQ0hJTkUgKi8KLQotCi0v KiAgUCBSIE8gVCBPICAtLSAgUHJvdG9jb2wgZW50cnkgZnVuY3Rpb24gICovCi0KLXN0YXRpYyBp bnQgaXNfdG4gPSAwOwkJCS8qIEl0J3MgYSBUZWxuZXQgY29ubmVjdGlvbiAqLwotCi0jaWZkZWYg Q0tfU1BFRUQKLWludCBmX2N0bHAgPSAwOwkJCQkvKiBDb250cm9sLWNoYXJhY3RlciBwcmVmaXgg dGFibGUgKi8KLSNpZmRlZiBDT01NRU5UCi1zaG9ydCBzX2N0bHBbMjU2XTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLQotLyoKLSAgVGhpcyBpcyBzaW1wbHkg YSB3cmFwcGVyIGZvciB0aGUgcmVhbCBwcm90b2NvbCBmdW5jdGlvbiBqdXN0IGJlbG93LAotICB0 aGF0IHNhdmVzIGFueSBpdGVtcyB0aGF0IG1pZ2h0IGJlIGNoYW5nZWQgYXV0b21hdGljYWxseSBi eSBwcm90b2NvbAotICBuZWdvdGlhdGlvbnMgYW5kIHRoZW4gcmVzdG9yZXMgdGhlbSB1cG9uIGV4 aXQgZnJvbSBwcm90b2NvbCBtb2RlLgotKi8KLVZPSUQKLXByb3RvKCkgewotICAgIGV4dGVybiBp bnQgYl9zYXZlLCBmX3NhdmUsIGNfc2F2ZSwgc3Nfc2F2ZSwgc2xvc3RhcnQsIHJlbGlhYmxlLCB1 cmNsZWFyOwotI2lmbmRlZiBOT0NTRVRTCi0gICAgZXh0ZXJuIGludCBmY2hhcnNldCwgZmNzX3Nh dmUsIHRjaGFyc2V0LCB0Y3Nfc2F2ZTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZmRlZiBQ SVBFU0VORAotICAgIGV4dGVybiBpbnQgcGlwZXNlbmQ7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8K LSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGV4dGVybiBpbnQgY3Vyc29yZW5hW10s IGN1cnNvcl9zYXZlLCB0ZXJtX2lvOwotICAgIGV4dGVybiBCWVRFIHZtb2RlOwotICAgIGV4dGVy biBpbnQgZGlzcGxheV9kZW1vOwotICAgIGludCB0ZXJtX2lvX3NhdmU7Ci0jZW5kaWYgLyogT1My ICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmZGVmIFROQ09ERQotICAgIGludCBfdV9iaW49 MCwgX21lX2JpbiA9IDA7Ci0jaWZkZWYgSUtTX09QVElPTgotICAgIGludCAvKiBfdV9zdGFydD0w LCAqLyBfbWVfc3RhcnQgPSAwOwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSNlbmRpZiAvKiBU TkNPREUgKi8KLSNpZmRlZiBQQVRURVJOUwotICAgIGludCBwYV9zYXZlOwotICAgIGludCBpOwot I2VuZGlmIC8qIFBBVFRFUk5TICovCi0gICAgaW50IHNjYW5fc2F2ZTsKLQotI2lmZGVmIFBBVFRF Uk5TCi0gICAgcGFfc2F2ZSA9IHBhdHRlcm5zOwotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0gICAg c2Nhbl9zYXZlID0gZmlsZXBlZWs7Ci0KLSAgICBteWpvYiA9IHNzdGF0ZTsKLQotI2lmZGVmIENL X0xPR0lOCi0gICAgaWYgKGlzZ3Vlc3QpIHsJCQkvKiBJZiB1c2VyIGlzIGFub255bW91cyAqLwot CWVuX3ByaSA9IDA7CQkJLyogZGlzYWJsZSBwcmludGluZyAqLwotCWVuX21haSA9IDA7CQkJLyog YW5kIGRpc2FibGUgZW1haWwgKi8KLQllbl9kZWwgPSAwOwkJCS8qIGFuZCBmaWxlIGRlbGV0aW9u ICovCi0gICAgfQotI2VuZGlmIC8qIENLX0xPR0lOICovCi0KLSNpZm5kZWYgTk9MT0NBTAotI2lm ZGVmIE9TMgotICAgIGN1cnNvcl9zYXZlID0gY3Vyc29yZW5hW3Ztb2RlXTsKLSAgICBjdXJzb3Jl bmFbdm1vZGVdID0gMDsKLSAgICB0ZXJtX2lvX3NhdmUgPSB0ZXJtX2lvOwotICAgIHRlcm1faW8g PSAwOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICBiX3NhdmUg PSBiaW5hcnk7CQkJLyogU0VUIEZJTEUgVFlQRSAqLwotICAgIGZfc2F2ZSA9IGZuY252OwkJCS8q IFNFVCBGSUxFIE5BTUVTICovCi0gICAgY19zYXZlID0gYmN0cjsKLSAgICBwX3NhdmUgPSBmbnNw YXRoOwotICAgIHJfc2F2ZSA9IHJlY3Vyc2l2ZTsKLSAgICBzX3RpbWludCA9IHRpbWludDsKLSAg ICBzc19zYXZlID0gc2xvc3RhcnQ7Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICBmY3Nfc2F2ZSA9IGZj aGFyc2V0OwotICAgIHRjc19zYXZlID0gdGNoYXJzZXQ7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwot Ci0jaWZkZWYgQ09NTUVOVAotLyogRG9uJ3QgZG8gdGhpcyBiZWNhdXNlIHRoZW4gdXNlciBjYW4g bmV2ZXIgZmluZCBvdXQgd2hhdCBoYXBwZW5lZC4gKi8KLSNpZmRlZiBDS19TUEVFRAotICAgIGZv ciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLSAgICAgIHNfY3RscFtpXSA9IGN0bHBbaV07Ci0gICAg Zl9jdGxwID0gMTsKLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSAgICBpZiAocmVsaWFibGUgPT0gU0VUX09OKQotICAgICAgc2xvc3RhcnQgPSAwOwotICAgIGlz X3RuID0gKCFsb2NhbCAmJiBzc3RlbG5ldCkKLSNpZmRlZiBUTkNPREUKLSAgICAgIHx8IChsb2Nh bCAmJiBuZXR3b3JrICYmIHR0bnByb3RvID09IE5QX1RFTE5FVCkKLSNlbmRpZiAvKiBUTkNPREUg Ki8KLQk7Ci0jaWZkZWYgVE5DT0RFCi0gICAgaWYgKGlzX3RuKSB7Ci0gICAgICAgIGlmICh0bl9i X3hmZXIgJiYgIShzc3RlbG5ldCB8fCBpbnNlcnZlcikpIHsKLQkgICAgLyogU2F2ZSB0aGUgY3Vy cmVudCBzdGF0ZSBvZiBUZWxuZXQgQmluYXJ5ICovCi0JICAgIF91X2JpbiA9IFRFTE9QVF9VKFRF TE9QVF9CSU5BUlkpOwotCSAgICBfbWVfYmluID0gVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpOwot Ci0JICAgIC8qIElmIGVpdGhlciBkaXJlY3Rpb24gaXMgbm90IEJpbmFyeSBhdHRlbXB0IHRvIG5l Z290aWF0ZSBpdCAqLwotCSAgICBpZiAoIV91X2JpbiAmJiBURUxPUFRfVV9NT0RFKFRFTE9QVF9C SU5BUlkpICE9IFROX05HX1JGKSB7Ci0JCXRuX3NvcHQoRE8sVEVMT1BUX0JJTkFSWSk7Ci0JCVRF TE9QVF9VTkFOU1dFUkVEX0RPKFRFTE9QVF9CSU5BUlkpID0gMTsKLQkgICAgfQotCSAgICBpZiAo IV9tZV9iaW4gJiYgVEVMT1BUX01FX01PREUoVEVMT1BUX0JJTkFSWSkgIT0gVE5fTkdfUkYpIHsK LQkJdG5fc29wdChXSUxMLFRFTE9QVF9CSU5BUlkpOwotCQlURUxPUFRfVU5BTlNXRVJFRF9XSUxM KFRFTE9QVF9CSU5BUlkpID0gMTsKLQkgICAgfQotCSAgICBpZiAoIShfbWVfYmluICYmIF91X2Jp bikpCi0JICAgICAgdG5fd2FpdCgicHJvdG8gc2V0IGJpbmFyeSBtb2RlIik7Ci0gICAgICAgIH0K LSNpZmRlZiBJS1NfT1BUSU9OCi0jaWZkZWYgQ0tfWFlaCi0gICAgICAgIGlmIChwcm90b2NvbCAh PSBQUk9UT19LKSB7CS8qIE5vbi1LZXJtaXQgcHJvdG9jb2wgc2VsZWN0ZWQgKi8KLSAgICAgICAg ICAgIGlmIChURUxPUFRfVShURUxPUFRfS0VSTUlUKSAmJgotICAgICAgICAgICAgICAgIFRFTE9Q VF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCkgewotICAgICAgICAgICAgICAgIGlr c193YWl0KEtFUk1JVF9SRVFfU1RPUCwwKTsgLyogU3RvcCB0aGUgb3RoZXIgU2VydmVyICovCi0J CS8qIF91X3N0YXJ0ID0gMTsgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChURUxP UFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYKLSAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BU X0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgdG5fc2lrcyhLRVJN SVRfU1RPUCk7CS8qIEknbSBub3Qgc2VydmVyaW5nICovCi0JIAlURUxPUFRfU0IoVEVMT1BUX0tF Uk1JVCkua2VybWl0Lm1lX3N0YXJ0ID0gMDsKLQkJX21lX3N0YXJ0ID0gMTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfWFlaICovCi0gICAgICAgIGlmIChzc3Rh dGUgPT0gJ3gnIHx8IHNzdGF0ZSA9PSAndicpIHsgLyogUmVzcG9uZGluZyB0byBhIHJlcXVlc3Qg Ki8KLSAgICAgICAgICAgIGlmICghaW5zZXJ2ZXIgJiYgVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkg JiYKLSAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3Rh cnQpIHsKLSAgICAgICAgICAgICAgICBpa3Nfd2FpdChLRVJNSVRfUkVRX1NUT1AsMCk7IC8qIFN0 b3AgdGhlIG90aGVyIFNlcnZlciAqLwotCQkvKiBfdV9zdGFydCA9IDE7ICovCi0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9LRVJNSVQpICYmCi0gICAgICAg ICAgICAgICAgIVRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpIHsKLSAg ICAgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9TVEFSVCk7CS8qIFNlbmQgS2VybWl0LVNlcnZl ciBTdGFydCAqLwotCSAJVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCA9 IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7CQkJLyogSW5pdGlhdGluZyBhIHJl cXVlc3QgKi8KLSAgICAgICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYKLSAg ICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KSB7 Ci0gICAgICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfU1RPUCk7CS8qIEknbSBub3Qgc2VydmVy aW5nICovCi0JIAlURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0ID0gMDsK LQkJX21lX3N0YXJ0ID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChURUxPUFRf VShURUxPUFRfS0VSTUlUKSAmJgotCSAgICAgICAgIVRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5r ZXJtaXQudV9zdGFydCkgewotCQkvKiBTZW5kIFJlcS1TZXJ2ZXItU3RhcnQgKi8KLSAgICAgICAg ICAgICAgICBpZiAoIWlrc193YWl0KEtFUk1JVF9SRVFfU1RBUlQsMCkpIHsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKHNzdGF0ZSAhPSAncycpIHsKLQkJCXN1Y2Nlc3MgPSAwOwkvKiBPdGhlciBL ZXJtaXQgcmVmdXNlZCB0byBzZXJ2ZSAqLwotCQkJaWYgKGxvY2FsKQotCQkJICBwcmludGYoIkEg S2VybWl0IFNlcnZlciBpcyBub3QgYXZhaWxhYmxlXHJcbiIpOwotCQkJZGVidWcoRjExMCwicHJv dG8oKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBIEtlcm1pdCBTZXJ2ZXIgaXMg bm90IGF2YWlsYWJsZSIsMCk7Ci0JCQl0bG9nKEYxMTAsIklLUyBjbGllbnQvc2VydmVyIGZhaWx1 cmUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQSBLZXJtaXQgU2VydmVyIGlzIG5v dCBhdmFpbGFibGUiLDApOwotCQkJZ290byB4eHByb3RveDsKLSAgICAgICAgICAgICAgICAgICAg fQotCQl9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICov Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICBpZiAodG5fbm9fZW5jcnlwdF94ZmVyICYm ICEoc3N0ZWxuZXQgfHwgaW5zZXJ2ZXIpKSB7Ci0gICAgICAgICAgICBja190bl9lbmNfc3RvcCgp OwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgIH0KLSNlbmRpZiAv KiBUTkNPREUgKi8KLQotICAgIGlmICgheGZyaW50KSBjb25ub2koKTsKLSAgICB4eHByb3RvKCk7 CQkJCS8qIENhbGwgdGhlIHJlYWwgcHJvdG9jb2wgZnVuY3Rpb24gKi8KLQotI2lmZGVmIElLU19P UFRJT04KLSAgeHhwcm90b3g6Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgIHhmZXJzdGF0 ID0gc3VjY2VzczsJCQkvKiBSZW1lbWJlciB0cmFuc2ZlciBzdGF0dXMgKi8KLSAgICBrYWN0aXZl ID0gMDsKLQotI2lmZGVmIFROQ09ERQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgaWYg KHRuX25vX2VuY3J5cHRfeGZlciAmJiAhKHNzdGVsbmV0IHx8IGluc2VydmVyKSkgewotICAgICAg ICAgICAgY2tfdG5fZW5jX3N0YXJ0KCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBU SU9OICovCi0jaWZkZWYgSUtTX09QVElPTgotICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0tFUk1J VCkgJiYKLSAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCAm JiAhX21lX3N0YXJ0KSB7Ci0gICAgICAgIHRuX3Npa3MoS0VSTUlUX1NUT1ApOwkJLyogU2VydmVy IGlzIHN0b3BwZWQgKi8KLSAJVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFy dCA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSAgICBpZiAoaXNfdG4gJiYg dG5fYl94ZmVyICYmICEoc3N0ZWxuZXQgfHwgaW5zZXJ2ZXIpKSB7Ci0gICAgICAgIC8qIGlmIHdl IG5lZ290aWF0ZWQgQmluYXJ5IG1vZGUgdHJ5IHRvIHJlc2V0IGl0ICovCi0gICAgICAgIGlmICgh X3VfYmluKSB7Ci0gICAgICAgICAgICAvKiBDaGVjayB0byBzZWUgaWYgdGhlIHN0YXRlIGNoYW5n ZWQgZHVyaW5nIHRoZSB0cmFuc2ZlciAqLwotCSAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0JJTkFS WSkpIHsKLQkJdG5fc29wdChET05ULFRFTE9QVF9CSU5BUlkpOwotCQlURUxPUFRfVU5BTlNXRVJF RF9ET05UKFRFTE9QVF9CSU5BUlkpID0gMTsKLQkgICAgfSBlbHNlCi0JICAgICAgX3VfYmluID0g MTsJCS8qIFNvIHdlIGRvbid0IGNhbGwgdG5fd2FpdCgpICovCi0gICAgICAgIH0KLSAgICAgICAg aWYgKCFfbWVfYmluKSB7Ci0gICAgICAgICAgICAvKiBDaGVjayB0byBzZWUgaWYgdGhlIHN0YXRl IGNoYW5nZWQgZHVyaW5nIHRoZSB0cmFuc2ZlciAqLwotCSAgICBpZiAoVEVMT1BUX01FKFRFTE9Q VF9CSU5BUlkpKSB7Ci0JCXRuX3NvcHQoV09OVCxURUxPUFRfQklOQVJZKTsKLQkJVEVMT1BUX1VO QU5TV0VSRURfV09OVChURUxPUFRfQklOQVJZKSA9IDE7Ci0JICAgIH0gZWxzZQotCSAgICAgIF9t ZV9iaW4gPSAxOwkJLyogU28gd2UgZG9uJ3QgY2FsbCB0bl93YWl0KCkgKi8KLQl9Ci0JaWYgKCEo X21lX2JpbiAmJiBfdV9iaW4pKQotCSAgdG5fd2FpdCgicHJvdG8gcmVzZXQgYmluYXJ5IG1vZGUi KTsKLSAgICB9Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNpZmRlZiBQQVRURVJOUwotICAgIHBh dHRlcm5zID0gcGFfc2F2ZTsKLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotICAgIGZpbGVwZWVrID0g c2Nhbl9zYXZlOwotCi0jaWZkZWYgU1RSRUFNSU5HCi0gICAgc3RyZWFtaW5nID0gMDsKLSAgICAv KiBzdHJlYW1vayA9IDA7ICovCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0jaWZkZWYgQ09NTUVO VAotI2lmZGVmIENLX1NQRUVECi0gICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotICAgICAg Y3RscFtpXSA9IHNfY3RscFtpXTsKLSAgICBmX2N0bHAgPSAwOwotI2VuZGlmIC8qIENLX1NQRUVE ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHVyY2xlYXIgPSAwOwotICAgIGlmICghc3Vj Y2VzcykgewotCXhpdHN0YSB8PSAod2hhdCAmIFdfS0VSTUlUKTsKLQl0bG9nKEYxMTAsIiBmYWls ZWQ6IiwoY2hhciAqKWVwa3Rtc2csMCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInByb3RvIHhm ZXJzdGF0IixlcGt0bXNnLHhmZXJzdGF0KTsKLSAgICBzbG9zdGFydCA9IHNzX3NhdmU7Ci0gICAg aWYgKHNfdGltaW50ID4gLTEpIHsJCS8qIEJlY2F1c2Ugb2YgUkVNT1RFIFNFVCAqLwotCXRpbWlu dCA9IHNfdGltaW50OwotCXNfdGltaW50ID0gLTE7Ci0gICAgfQotICAgIHJlY3Vyc2l2ZSA9IHJf c2F2ZTsKLSAgICBmbnNwYXRoID0gcF9zYXZlOwotICAgIGlmIChjX3NhdmUgPiAtMSkgewkJCS8q IEJlY2F1c2Ugb2YgUkVNT1RFIFNFVCAqLwotCWJjdHIgPSBjX3NhdmU7Ci0JY19zYXZlID0gLTE7 Ci0gICAgfQotICAgIGZuY252ICAgPSBmX3NhdmU7Ci0gICAgYmluYXJ5ICA9IGJfc2F2ZTsKLSNp ZmRlZiBQSVBFU0VORAotICAgIHBpcGVzZW5kID0gMDsgICAgCQkJLyogTmV4dCB0aW1lIG1pZ2h0 IG5vdCBiZSBwaXBlc2VuZCAqLwotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0jaWZuZGVmIE5PTE9D QUwKLSNpZmRlZiBPUzIKLSAgICBjdXJzb3JlbmFbdm1vZGVdID0gY3Vyc29yX3NhdmU7Ci0gICAg dGVybV9pbyA9IHRlcm1faW9fc2F2ZTsKLSAgICBkaXNwbGF5X2RlbW8gPSAxOwotI2VuZGlmIC8q IE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLX0KLQotc3RhdGljIFZPSUQKLXh4cHJvdG8o KSB7Ci0gICAgaW50IHg7Ci0gICAgbG9uZyBseDsKLSNpZmRlZiBDS19YWVoKLSNpZmRlZiBYWVpf SU5URVJOQUwKLV9QUk9UT1RZUCggaW50IHB4eXosIChpbnQpICk7Ci0jZW5kaWYgLyogWFlaX0lO VEVSTkFMICovCi0jZW5kaWYgLyogQ0tfWFlaICovCi0KLSAgICBjaGFyIHhzc1syXTsJCQkvKiBT dHJpbmcgcmVwcmVzZW50YXRpb24gb2Ygc3N0YXRlICovCi0gICAgeHNzWzBdID0gc3N0YXRlOwot ICAgIHhzc1sxXSA9IE5VTDsKLSAgICBzX3RpbWludCA9IHRpbWludDsKLQotICAgIGRlYnVnKEYx MDEsInh4cHJvdG8gZW50cnkganVzdG9uZSIsIiIsanVzdG9uZSk7Ci0gICAgc3VjY2VzcyA9IDA7 Ci0KLSAgICByZXRyaWV2ZSA9IDA7CQkJLyogUmVzZXQgdGhlc2UgLi4uICovCi0gICAgcmVnZXQg PSAwOwotICAgIG9wa3QgPSAwOwotCi0gICAgaWYgKGxvY2FsICYmIHR0Y2hrKCkgPCAwKSB7CQkv KiBHaXZpbmcgQllFIG9yIEZJTiAqLwotCWlmIChieWVfYWN0aXZlKSB7CQkvKiBidXQgdGhlcmUg aXMgbm8gY29ubmVjdGlvbiAqLwotCSAgICB0dGNsb3MoMCk7Ci0JICAgIHN1Y2Nlc3MgPSAxOwot CSAgICByZXR1cm47Ci0JfQotCS8qIERpdHRvIGZvciBhbnkgUkVNT1RFIGNvbW1hbmQgKi8KLQlp ZiAoc3N0YXRlID09ICdnJyAmJiBjbWFyZyApIHsKLQkgICAgaWYgKCpjbWFyZyA9PSAnTCcgfHwg KmNtYXJnID09ICdGJyB8fCAqY21hcmcgPT0gJ1gnKQotCSAgICAgIHN1Y2Nlc3MgPSAxOwotCSAg ICBlbHNlCi0JICAgICAgcHJpbnRmKCI/Tm8gY29ubmVjdGlvblxyXG4iKTsKLQkgICAgcmV0dXJu OwotCX0KLSAgICB9Ci0KLS8qIFNldCB1cCB0aGUgY29tbXVuaWNhdGlvbiBsaW5lIGZvciBmaWxl IHRyYW5zZmVyLiAqLwotLyogTk9URTogQWxsIG9mIHRoZSB4eHNjcmVlbigpIGNhbGxzIHByaW9y IHRvIHRoZSB3YXJ0KCkgaW52b2NhdGlvbiAqLwotLyogY291bGQganVzdCBhcyBlYXNpbHkgYmUg cHJpbnRmJ3Mgb3IsIGZvciB0aGF0IG1hdHRlciwgaGludHMuICovCi0KLSAgICBpZiAobG9jYWwg JiYgKHNwZWVkIDwgMEwpICYmIChuZXR3b3JrID09IDApKSB7Ci0JeHhzY3JlZW4oU0NSX0VNLDAs MEwsIlNvcnJ5LCB5b3UgbXVzdCAnc2V0IHNwZWVkJyBmaXJzdCIpOwotCXJldHVybjsKLSAgICB9 Ci0gICAgeCA9IC0xOwotICAgIGlmICh0dG9wZW4odHRuYW1lLCZ4LG1kbXR5cCxjZHRpbW8pIDwg MCkgewotCWRlYnVnKEYxMTEsImZhaWxlZDogcHJvdG8gdHRvcGVuIGxvY2FsIix0dG5hbWUsbG9j YWwpOwotCXh4c2NyZWVuKFNDUl9FTSwwLDBMLCJDYW4ndCBvcGVuIGxpbmUiKTsKLQlyZXR1cm47 Ci0gICAgfQotICAgIGlmICh4ID4gLTEpIGxvY2FsID0geDsKLSAgICBkZWJ1ZyhGMTExLCJwcm90 byB0dG9wZW4gbG9jYWwiLHR0bmFtZSxsb2NhbCk7Ci0KLSAgICBseCA9IChsb2NhbCAmJiAhbmV0 d29yaykgPyBzcGVlZCA6IC0xOwotI2lmZGVmIE5FVENPTk4KLSNpZmRlZiBDS19TUEVFRAotICAg IGlmIChpc190bikgewotCWN0bHBbKHVuc2lnbmVkKTI1NV0gPSBjdGxwW0NSXSA9IDE7Ci0JaWYg KHBhcml0eSA9PSAnZScgfHwgcGFyaXR5ID09ICdtJykgY3RscFsxMjddID0gMTsKLQlpZiAoZmxv dyA9PSBGTE9fWE9OWCkgewkJLyogQWxzbyB3YXRjaCBvdXQgZm9yIFhvbi9Yb2ZmICovCi0JICAg IGN0bHBbMTddID0gY3RscFsxOV0gPSAxOwotCSAgICBjdGxwWzE3KzEyOF0gPSBjdGxwWzE5KzEy OF0gPSAxOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLSNlbmRpZiAvKiBORVRD T05OICovCi0gICAgaWYgKHR0cGt0KGx4LGZsb3cscGFyaXR5KSA8IDApIHsJLyogUHV0IGxpbmUg aW4gcGFja2V0IG1vZGUsICovCi0JeHhzY3JlZW4oU0NSX0VNLDAsMEwsIkNhbid0IGNvbmRpdGlv biBsaW5lIik7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBpZiAobG9jYWwgJiYgIW5ldHdvcmsgJiYg Y2FycmllciAhPSBDQVJfT0ZGKSB7Ci0JaW50IHg7CQkJCS8qIFNlcmlhbCBjb25uZWN0aW9uICov Ci0JeCA9IHR0Z21kbSgpOwkJCS8qIHdpdGggY2FycmllciBjaGVja2luZyAqLwotCWlmICh4ID4g LTEpIHsKLQkgICAgaWYgKCEoeCAmIEJNX0RDRCkpIHsKLQkJZGVidWcoRjEwMSwicHJvdG8gdHRn bWRtIiwiIiwwKTsKLQkJeHhzY3JlZW4oU0NSX0VNLDAsMEwsIkNhcnJpZXIgcmVxdWlyZWQgYnV0 IG5vdCBkZXRlY3RlZCIpOwotCQlyZXR1cm47Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIC8qIFNl bmQgcmVtb3RlIHNpZGUncyAicmVjZWl2ZSIgb3IgInNlcnZlciIgc3RhcnR1cCBzdHJpbmcsIGlm IGFueSAqLwotICAgIGlmIChsb2NhbCAmJiBja2luZGV4KChjaGFyICopeHNzLCJzcmdjamhrIiww LDAsMSkpIHsKLQljaGFyICpzID0gTlVMTDsKLSAgICAgICAgaWYgKAotI2lmZGVmIElLU19PUFRJ T04KLQkgICAgLyogRG9uJ3Qgc2VuZCBhdXRvLWJsYWggc3RyaW5nIGlmIHdlIGtub3cgb3RoZXIg c2lkZSBpcyBzZXJ2aW5nICovCi0JICAgICFURUxPUFRfVShURUxPUFRfS0VSTUlUKSB8fAotCSAg ICAhVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0Ci0jZWxzZQotCSAgICAx Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotCSAgICApIHsKLQkgICAgaWYgKHNzdGF0ZSA9PSAn cycpIHsJLyogU2VuZGluZyBmaWxlKHMpICovCi0JCXMgPSBiaW5hcnkgPyBwdGFiW3Byb3RvY29s XS5oX2JfaW5pdCA6IHB0YWJbcHJvdG9jb2xdLmhfdF9pbml0OwotCSAgICB9IGVsc2UgaWYgKHBy b3RvY29sID09IFBST1RPX0spIHsgLyogQ29tbWFuZCBmb3Igc2VydmVyICovCi0JCXMgPSBwdGFi W3Byb3RvY29sXS5oX3hfaW5pdDsKLQkgICAgfQotCX0KLSNpZmRlZiBDS19TUEVFRAotI2lmbmRl ZiBVTlBSRUZJWFpFUk8KLQlpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykJLyogQmVjYXVzZSBvZiBD LXN0cmluZ3MuLi4gKi8KLQkgIGN0bHBbMF0gPSAxOwotI2VuZGlmIC8qIFVOUFJFRklYWkVSTyAq LwotI2VuZGlmIC8qIENLX1NQRUVEICovCi0JaWYgKHMpIGlmICgqcykgewkJLyogSWYgd2UgaGF2 ZSBhIGNvbW1hbmQgdG8gc2VuZC4uLiAqLwotCSAgICBjaGFyIHRtcGJ1ZlszNTZdOwotCSAgICBp bnQgdG1wYnVmc2l6ID0gMzU2OwotCSAgICBpbnQgc3R1ZmYgPSAtMSwgc3R1ZmYyID0gLTEsIGxl biA9IDA7Ci0JICAgIGV4dGVybiBpbnQgdG5sbTsKLQkgICAgaWYgKHNzdGF0ZSA9PSAncycpIHsJ LyogU2VuZGluZyBmaWxlKHMpICovCi0jaWZkZWYgQ0tfWFlaCi0JCWlmIChwcm90b2NvbCA9PSBQ Uk9UT19YKSB7Ci0JCSAgICBjaGFyICogczI7Ci0JCSAgICBzMiA9IGNtYXJnMlswXSA/IGNtYXJn MiA6IGNtYXJnOwotCQkgICAgaWYgKChpbnQpc3RybGVuKHMpICsgKGludClzdHJsZW4oczIpICsg NCA8IDM1NikKLQkJICAgICAgc3ByaW50Zih0bXBidWYsIHMsIHMyKTsKLQkJICAgIGVsc2UKLQkJ ICAgICAgdG1wYnVmWzBdID0gTlVMOwotCQl9IGVsc2UgewotI2VuZGlmIC8qIENLX1hZWiAqLwot CQkgICAgY2ttYWttc2codG1wYnVmLCAzNTYsIHMsIE5VTEwsIE5VTEwsIE5VTEwpOwotI2lmZGVm IENLX1hZWgotCQl9Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0JICAgIH0gZWxzZSB7CQkJLyogQ29t bWFuZCBmb3Igc2VydmVyICovCi0JCWNrc3RybmNweSh0bXBidWYscywzNTYpOwotCSAgICB9Ci0J ICAgIGNrc3RybmNhdCh0bXBidWYsICJcMDE1IixzaXplb2YodG1wYnVmKSk7Ci0JICAgIGlmICh0 bmxtKQkJCS8qIFRFUk1JTkFMIE5FV0xJTkUgT04gKi8KLQkgICAgICBzdHVmZiA9IExGOwkJLyog U3R1ZmYgTEYgKi8KLSNpZmRlZiBUTkNPREUKLQkgICAgLyogVEVMTkVUIE5FV0xJTkUgTU9ERSAq LwotCSAgICBpZiAoaXNfdG4pIHsKLQkJc3dpdGNoIChURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkg PyB0bl9iX25sbSA6IHRuX25sbSkgewotCQkgIGNhc2UgVE5MX0NSOgotCQkgICAgYnJlYWs7Ci0J CSAgY2FzZSBUTkxfQ1JOVUw6Ci0JCSAgICBicmVhazsKLQkJICBjYXNlIFROTF9DUkxGOgotCQkg ICAgc3R1ZmYyID0gc3R1ZmY7Ci0JCSAgICBzdHVmZiA9IExGOwotCQkgICAgYnJlYWs7Ci0JCX0K LQkgICAgfQotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0jaWZkZWYgTkVUQ09OTgotI2lmZGVmIFRD UFNPQ0tFVAotI2lmZGVmIFJMT0dDT0RFCi0JICAgIGlmIChuZXR3b3JrICYmIHR0bnByb3RvID09 IE5QX1JMT0dJTikgewotCQlzd2l0Y2ggKHRuX2JfbmxtKSB7IC8qIEFsd2F5cyBCSU5BUlkgKi8K LQkJICBjYXNlIFROTF9DUjoKLQkJICAgIGJyZWFrOwotCQkgIGNhc2UgVE5MX0NSTlVMOgotCQkg ICAgc3R1ZmYyID0gc3R1ZmY7Ci0JCSAgICBzdHVmZiAgPSBOVUw7Ci0JCSAgICBicmVhazsKLQkJ ICBjYXNlIFROTF9DUkxGOgotCQkgICAgc3R1ZmYyID0gc3R1ZmY7Ci0JCSAgICBzdHVmZiA9IExG OwotCQkgICAgYnJlYWs7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5k aWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0JICAgIGxlbiA9IHN0 cmxlbih0bXBidWYpOwotCSAgICBpZiAoc3R1ZmYgPj0gMCAmJiBsZW4gPCB0bXBidWZzaXogLSAx KSB7Ci0JCXRtcGJ1ZltsZW4rK10gPSBzdHVmZjsKLQkJaWYgKHN0dWZmMiA+PSAwICYmIGxlbiA8 IHRtcGJ1ZnNpeiAtIDEpCi0JCSAgdG1wYnVmW2xlbisrXSA9IHN0dWZmMjsKLQkJdG1wYnVmW2xl bl0gPSBOVUw7Ci0JICAgIH0KLQkgICAgdHRvbCgoQ0hBUiAqKXRtcGJ1ZixsZW4pOwotCSAgICBp ZiAocHJvdG9jb2wgPT0gUFJPVE9fSykJLyogR2l2ZSByZW1vdGUgS2VybWl0IHRpbWUgdG8gc3Rh cnQgKi8KLQkgICAgICBtc2xlZXAoNDAwKTsKLQl9Ci0gICAgfQotCi0jaWZkZWYgQ0tfWFlaCi0g ICAgaWYgKHByb3RvY29sICE9IFBST1RPX0spIHsJCS8qIE5vbi1LZXJtaXQgcHJvdG9jb2wgc2Vs ZWN0ZWQgKi8KLQljaGFyIHRtcGJ1ZlszNTZdOwotCWludCB0bXBidWZzaXogPSAzNTY7Ci0JY2hh ciAqIHMgPSAiIjsKLQotI2lmZGVmIENLX1RNUERJUgotCWlmIChzc3RhdGUgPT0gJ3YnKSB7CQkv KiBJZiByZWNlaXZpbmcgYW5kLi4uICovCi0JICAgIGlmIChkbGRpciAmJiAhZl90bXBkaXIpIHsJ LyogaWYgdGhleSBoYXZlIGEgZG93bmxvYWQgZGlyZWN0b3J5ICovCi0JCWlmIChzID0gemd0ZGly KCkpIHsJLyogR2V0IGN1cnJlbnQgZGlyZWN0b3J5ICovCi0JCSAgICBpZiAoemNoZGlyKGRsZGly KSkgeyAvKiBDaGFuZ2UgdG8gZG93bmxvYWQgZGlyZWN0b3J5ICovCi0JCQlja3N0cm5jcHkoc2F2 ZGlyLHMsVE1QRElSTEVOKTsKLQkJCWZfdG1wZGlyID0gMTsJLyogUmVtZW1iZXIgdGhhdCB3ZSBk aWQgdGhpcyAqLwotCQkgICAgfQotCQl9Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyogQ0tfVE1QRElS ICovCi0KLSNpZmRlZiBYWVpfSU5URVJOQUwJCQkvKiBJbnRlcm5hbCAqLwotCXN1Y2Nlc3MgPSAh cHh5eihzc3RhdGUpOwotI2Vsc2UKLSNpZmRlZiBDS19SRURJUgkJCQkvKiBFeHRlcm5hbCAqLwot CXN3aXRjaCAoc3N0YXRlKSB7Ci0JICBjYXNlICdzJzoJCQkvKiAnVGlzIGJldHRlciB0byBTRU5E Li4uICovCi0JICAgIHMgPSBiaW5hcnkgPyBwdGFiW3Byb3RvY29sXS5wX2Jfc2NtZCA6IHB0YWJb cHJvdG9jb2xdLnBfdF9zY21kOwotCSAgICBicmVhazsKLQkgIGNhc2UgJ3YnOgkJCS8qIC4uLiB0 aGFuIFJFQ0VJVkUgKi8KLQkgICAgcyA9IGJpbmFyeSA/IHB0YWJbcHJvdG9jb2xdLnBfYl9yY21k IDogcHRhYltwcm90b2NvbF0ucF90X3JjbWQ7Ci0JICAgIGJyZWFrOwotCX0KLQlpZiAoIXMpIHMg PSAiIjsKLQlpZiAoKnMpIHsKLQkgICAgaWYgKHNzdGF0ZSA9PSAncycpIHsJLyogU2VuZGluZyAq LwotCQlleHRlcm4gaW50IHhmZXJtb2RlOwotCQlpbnQgayA9IDAsIHggPSAwLCBiID0gYmluYXJ5 OwotCQkvKgotCQkgIElmIGp1c3Qgb25lIGZpbGUgd2UgY2FuIHNjYW4gaXQgdG8gc2V0IHRoZSB4 ZmVyIG1vZGUuCi0JCSAgT3RoZXJ3aXNlIGl0J3MgdXAgdG8gdGhlIGV4dGVybmFsIHByb3RvY29s IHByb2dyYW0uCi0JCSovCi0JCWlmIChwYXR0ZXJucyAmJiB4ZmVybW9kZSA9PSBYTU9ERV9BICYm ICFpc3dpbGQoZnNwZWMpKSB7Ci0JCSAgICBleHRlcm4gaW50IG5zY2FuZmlsZTsKLQkJICAgIGsg PSBzY2FuZmlsZShmc3BlYywmeCxuc2NhbmZpbGUpOwotCQkgICAgaWYgKGsgPiAtMSkgewotCQkJ YiA9IChrID09IEZUX0JJTikgPyBYWUZUX0IgOiBYWUZUX1Q7Ci0JCQlzID0gYiA/Ci0JCQkgICAg cHRhYltwcm90b2NvbF0ucF9iX3NjbWQgOgotCQkJICAgIHB0YWJbcHJvdG9jb2xdLnBfdF9zY21k OwotCQkgICAgfQotCQl9Ci0JCWlmICgoaW50KXN0cmxlbihzKSArIChpbnQpc3RybGVuKGZzcGVj KSA8IHRtcGJ1ZnNpeikgewotCQkgICAgc3ByaW50Zih0bXBidWYscyxmc3BlYyk7IC8qIHNhZmUg KHByZWNoZWNrZWQpICovCi0JCSAgICB0bG9nKEYxMTAsIlNlbmRpbmciLGZzcGVjLDBMKTsKLQkJ fQotCSAgICB9IGVsc2UgewkJCS8qIFJlY2VpdmluZyAqLwotCQlpZiAoKGludClzdHJsZW4ocykg KyAoaW50KXN0cmxlbihjbWFyZzIpIDwgdG1wYnVmc2l6KSB7Ci0JCSAgICBzcHJpbnRmKHRtcGJ1 ZixzLGNtYXJnMik7IC8qIHNhZmUgKHByZWNoZWNrZWQpICovCi0JCSAgICB0bG9nKEYxMTAsIlJl Y2VpdmluZyIsY21hcmcyLDBMKTsKLQkJfQotCSAgICB9Ci0JICAgIHRsb2coRjExMCwiIHZpYSBl eHRlcm5hbCBwcm90b2NvbDoiLHRtcGJ1ZiwwKTsKLQkgICAgZGVidWcoRjExMCwiY2tjcHJvIHR0 cnVuY21kIix0bXBidWYsMCk7Ci0JICAgIHN1Y2Nlc3MgPSB0dHJ1bmNtZCh0bXBidWYpOwotCSAg ICB0bG9nKEYxMTAsIiBzdGF0dXM6IixzdWNjZXNzID8gIk9LIiA6ICJGQUlMRUQiLCAwKTsKLQl9 IGVsc2UgewotCSAgICBwcmludGYoIj9Tb3JyeSwgbm8gZXh0ZXJuYWwgcHJvdG9jb2wgZGVmaW5l ZCBmb3IgJXNcclxuIiwKLQkJICAgcHRhYltwcm90b2NvbF0ucF9uYW1lCi0JCSAgICk7Ci0JfQot I2Vsc2UKLQlwcmludGYoCi0iU29ycnksIG9ubHkgS2VybWl0IHByb3RvY29sIGlzIHN1cHBvcnRl ZCBpbiB0aGlzIHZlcnNpb24gb2YgS2VybWl0XG4iCi0JICAgICAgICk7Ci0jZW5kaWYgLyogQ0tf UkVESVIgKi8KLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KLQlyZXR1cm47Ci0gICAgfQotI2Vu ZGlmIC8qIENLX1hZWiAqLwotCi0jaWZkZWYgTlRTSUdYCi0gICAgY29ucmF3KCk7Ci0gICAgY29u bm9pKCk7Ci0jZWxzZQotICAgIGlmICghbG9jYWwpCi0gICAgICBjb25ub2koKTsJCQkJLyogTm8g Y29uc29sZSBpbnRlcnJ1cHRzIGlmIHJlbW90ZSAqLwotI2VuZGlmIC8qIE5UU0lHICovCi0KLSAg ICBrYWN0aXZlID0gMTsKLSAgICBpZiAoc3N0YXRlID09ICd4JykgewkJLyogSWYgZW50ZXJpbmcg c2VydmVyIG1vZGUsICovCi0JZXh0ZXJuIGludCBob3djYWxsZWQ7Ci0Jc2VydmVyID0gMTsJCQkv KiBzZXQgZmxhZywgKi8KLQlkZWJ1ZyhGMTAxLCJzZXJ2ZXIgYmFja2dyZCIsIiIsYmFja2dyZCk7 Ci0JZGVidWcoRjEwMSwic2VydmVyIHF1aWV0IiwiIixxdWlldCk7Ci0JZGVidWcoRjEwMCwiU0hP VUxEIE5PVCBTRUUgVEhJUyBJRiBJTiBCQUNLR1JPVU5EISIsIiIsMCk7Ci0JaWYgKGhvd2NhbGxl ZCA9PSBJX0FNX1NTSFNVQikgewkvKiBhbmQgaXNzdWUgYXBwcm9wcmlhdGUgbWVzc2FnZS4gKi8K LQkgICAgdHRvbCgoQ0hBUiAqKSJLRVJNSVQgUkVBRFkgVE8gU0VSVkUuLi5cMDE1XDAxMiIsMjYp OwotCX0gZWxzZSBpZiAoIWxvY2FsKSB7Ci0JICAgIGlmICghcXVpZXQgJiYgIWJhY2tncmQKLSNp ZmRlZiBJS1NfT1BUSU9OCi0gICAgICAgICAgICAgICAgJiYgIVRFTE9QVF9NRShURUxPUFRfS0VS TUlUKSAvKiBVc2VyIHdhcyB0b2xkIGJ5IG5lZ290aWF0aW9uICovCi0jZW5kaWYgLyogSUtTX09Q VElPTiAqLwotCQkpIHsKLQkJY29ub2xsKHNydnR4dCk7Ci0JCWNvbm9sbCgiS0VSTUlUIFJFQURZ IFRPIFNFUlZFLi4uIik7Ci0JICAgIH0KLQl9IGVsc2UgewotCSAgICBjb25vbCgiRW50ZXJpbmcg c2VydmVyIG1vZGUgb24gIik7Ci0JICAgIGNvbm9sbCh0dG5hbWUpOwotCSAgICBjb25vbGwoIlR5 cGUgQ3RybC1DIHRvIHF1aXQuIik7Ci0JICAgIGlmIChzcnZkaXMpIGludG1zZygtMUwpOwotI2lm ZGVmIFRDUFNPQ0tFVAotI2lmbmRlZiBOT0xJU1RFTgotCSAgICBpZiAobmV0d29yayAmJiB0Y3Bz cmZkID4gMCkKLQkgICAgICB0dG9sKChDSEFSICopIktFUk1JVCBSRUFEWSBUTyBTRVJWRS4uLlww MTVcMDEyIiwyNik7Ci0jZW5kaWYgLyogTk9MSVNURU4gKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQg Ki8KLQl9Ci0gICAgfSBlbHNlCi0gICAgICBzZXJ2ZXIgPSAwOwotI2lmZGVmIFZNUwotICAgIGlm ICghcXVpZXQgJiYgIWJhY2tncmQpICAgIC8qIFNvIG1lc3NhZ2UgZG9lc24ndCBvdmVyd3JpdGUg cHJvbXB0ICovCi0gICAgICBjb25vbGwoIiIpOwotICAgIGlmIChsb2NhbCkgY29ucmVzKCk7ICAg ICAgIC8qIFNvIEN0cmwtQyB3aWxsIHdvcmsgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLS8qCi0gIElm IGluIHJlbW90ZSBtb2RlLCBub3Qgc2h1c2hlZCwgbm90IGluIGJhY2tncm91bmQsIGFuZCBhdCB0 b3AgY29tbWFuZCBsZXZlbCwKLSAgaXNzdWUgYSBoZWxwZnVsIG1lc3NhZ2UgdGVsbGluZyB3aGF0 IHRvIGRvLi4uCi0qLwotICAgIGlmICghbG9jYWwgJiYgIXF1aWV0ICYmICFiYWNrZ3JkKSB7Ci0J aWYgKHNzdGF0ZSA9PSAndicpIHsKLQkgICAgY29ub2xsKCJSZXR1cm4gdG8geW91ciBsb2NhbCBL ZXJtaXQgYW5kIGdpdmUgYSBTRU5EIGNvbW1hbmQuIik7Ci0JICAgIGNvbm9sbCgiIik7Ci0JICAg IGNvbm9sbCgiS0VSTUlUIFJFQURZIFRPIFJFQ0VJVkUuLi4iKTsKLQl9IGVsc2UgaWYgKHNzdGF0 ZSA9PSAncycpIHsKLQkgICAgY29ub2xsKCJSZXR1cm4gdG8geW91ciBsb2NhbCBLZXJtaXQgYW5k IGdpdmUgYSBSRUNFSVZFIGNvbW1hbmQuIik7Ci0JICAgIGNvbm9sbCgiIik7Ci0JICAgIGNvbm9s bCgiS0VSTUlUIFJFQURZIFRPIFNFTkQuLi4iKTsKLQl9IGVsc2UgaWYgKCBzc3RhdGUgPT0gJ2cn IHx8IHNzdGF0ZSA9PSAncicgfHwgc3N0YXRlID09ICdoJyB8fAotCQkgICAgc3N0YXRlID09ICdq JyB8fCBzc3RhdGUgPT0gJ2MnICkgewotCSAgICBjb25vbGwoIlJldHVybiB0byB5b3VyIGxvY2Fs IEtlcm1pdCBhbmQgZ2l2ZSBhIFNFUlZFUiBjb21tYW5kLiIpOwotCSAgICBjb25vbGwoIiIpOwot CSAgICBjb25vbGwoKHNzdGF0ZSA9PSAncicgfHwgc3N0YXRlID09ICdqJyB8fCBzc3RhdGUgPT0g J2gnKSA/Ci0JCSAgICJLRVJNSVQgUkVBRFkgVE8gR0VULi4uIiA6Ci0JCSAgICJLRVJNSVQgUkVB RFkgVE8gU0VORCBTRVJWRVIgQ09NTUFORC4uLiIpOwotCX0KLSAgICB9Ci0jaWZkZWYgQ09NTUVO VAotICAgIGlmICghbG9jYWwpIHNsZWVwKDEpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLS8qCi0g IFRoZSAnd2FydCgpJyBmdW5jdGlvbiBpcyBnZW5lcmF0ZWQgYnkgdGhlIHdhcnQgcHJvZ3JhbS4g IEl0IGdldHMgYQotICBjaGFyYWN0ZXIgZnJvbSB0aGUgaW5wdXQoKSByb3V0aW5lIGFuZCB0aGVu IGJhc2VkIG9uIHRoYXQgY2hhcmFjdGVyIGFuZAotICB0aGUgY3VycmVudCBzdGF0ZSwgc2VsZWN0 cyB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uLCBhY2NvcmRpbmcgdG8gdGhlIHN0YXRlCi0gIHRhYmxl IGFib3ZlLCB3aGljaCBpcyB0cmFuc2Zvcm1lZCBieSB0aGUgd2FydCBwcm9ncmFtIGludG8gYSBi aWcgY2FzZQotICBzdGF0ZW1lbnQuICBUaGUgZnVuY3Rpb24gaXMgYWN0aXZlIGZvciBvbmUgdHJh bnNhY3Rpb24uCi0qLwotICAgIHJ0aW1lcigpOwkJCQkvKiBSZXNldCBlbGFwc2VkLXRpbWUgdGlt ZXIgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgcmZ0aW1lcigpOwotI2VuZGlmIC8qIEdGVElNRVIg Ki8KLSAgICByZXNldGMoKTsJCQkJLyogJiBvdGhlciBwZXItdHJhbnNhY3Rpb24gY291bnRlcnMu ICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJwcm90byBjYWxsaW5nIHdhcnQsIGp1c3RvbmUiLCIiLGp1 c3RvbmUpOwotCi0gICAgd2FydCgpOwkJCQkvKiBFbnRlciB0aGUgc3RhdGUgdGFibGUgc3dpdGNo ZXIuICovCi0vKgotICBOb3RlOiB0aGUgZm9sbG93aW5nIGlzIG5lY2Vzc2FyeSBpbiBjYXNlIHdl IGhhdmUganVzdCBkb25lIGEgcmVtb3RlLW1vZGUKLSAgZmlsZSB0cmFuc2ZlciwgaW4gd2hpY2gg Y2FzZSB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgbW9kZXMgaGF2ZSBiZWVuCi0gIGNoYW5nZWQg YnkgdHRwa3QoKS4gIEluIHBhcnRpY3VsYXIsIHNwZWNpYWwgY2hhcmFjdGVycyBsaWtlIEN0cmwt QyBhbmQKLSAgQ3RybC1cIG1pZ2h0IGhhdmUgYmVlbiB0dXJuZWQgb2ZmIChzZWUgdHRwa3QpLiAg U28gdGhpcyBjYWxsIHRvIHR0cmVzKCkgaXMKLSAgZXNzZW50aWFsLiAgSU1QT1JUQU5UOiByZXN0 b3JlIGludGVycnVwdCBoYW5kbGVycyBmaXJzdCwgb3RoZXJ3aXNlIGFueQotICB0ZXJtaW5hbCBp bnRlcnJ1cHRzIHRoYXQgb2NjdXIgYmVmb3JlIHRoaXMgaXMgZG9uZSBpbiB0aGUgbm9ybWFsIHBs YWNlCi0gIGxhdGVyIHdpbGwgY2F1c2UgYSBjcmFzaC4KLSovCi0jaWZkZWYgT1MyCi0gICAgdHRy ZXMoKTsJCQkJLyogUmVzZXQgdGhlIGNvbW11bmljYXRpb24gZGV2aWNlICovCi0jZWxzZQotICAg IGlmICghbG9jYWwpIHsKLQlzZXRpbnQoKTsJCQkvKiBBcm0gaW50ZXJydXB0IGhhbmRsZXJzIEZJ UlNUICovCi0JbXNsZWVwKDUwMCk7Ci0JdHRyZXMoKTsJCQkvKiBUaGVuIHJlc3RvcmUgdGVybWlu YWwuICovCi0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgIHh4c2NyZWVuKFNDUl9UQywwLDBM LCIiKTsJCS8qIFRyYW5zYWN0aW9uIGNvbXBsZXRlICovCi0gICAgeCA9IHF1aWV0OwotICAgIHF1 aWV0PTE7Ci0gICAgY2xzaWYoKTsJCQkJLyogRmFpbHNhZmUgaW4gY2FzZSB3ZSBtaXNzZWQgKi8K LSAgICBjbHNvZigxKTsJCQkJLyogYSBjYXNlIGluIHRoZSBzdGF0ZSBtYWNoaW5lLiAqLwotICAg IHF1aWV0ID0geDsKLQotICAgIGlmIChzZXJ2ZXIpIHsJCQkvKiBCYWNrIGZyb20gcGFja2V0IHBy b3RvY29sLiAqLwotICAgIAlpZiAoIXF1aWV0ICYmICFiYWNrZ3JkCi0jaWZkZWYgSUtTRAotCSAg ICAmJiAhaW5zZXJ2ZXIKLSNlbmRpZiAvKiBJS1NEICovCi0JICAgICkgewkJCQkvKiBHaXZlIGFw cHJvcHJpYXRlIG1lc3NhZ2UgKi8KLQkgICAgY29ub2xsKCIiKTsKLQkgICAgY29ub2xsKCJDLUtl cm1pdCBzZXJ2ZXIgZG9uZSIpOwotICAgICAgICB9Ci0gICAgICAgIHNlcnZlciA9IDA7CQkJLyog Tm90IGEgc2VydmVyIGFueSBtb3JlICovCi0gICAgfQotfQotCi0vKiAgUyBHIEUgVCBJIE4gSSBU ICAtLSAgSGFuZGxlIGluY29taW5nIEdFVC1DbGFzcyBwYWNrZXRzICAqLwotCi0vKgotICBSZXR1 cm5zOgotICAgLTE6IE9uIGVycm9yCi0gICAgMDogR0VUIHBhY2tldCBwcm9jZXNzZWQgT0sgLSBy ZWFkeSB0byBTZW5kLgotICAgIDE6IEV4dGVuZGVkIEdFVCBwcm9jZXNzZWQgT0sgLSB3YWl0IGZv ciBhbm90aGVyLgotKi8KLXN0YXRpYyBpbnQKLXNnZXRpbml0KHJlZ2V0LHhnZXQpIGludCByZWdl dCwgeGdldDsgewkvKiBTZXJ2ZXIgZW5kIG9mIEdFVCBjb21tYW5kICovCi0gICAgY2hhciAqIGZz ID0gTlVMTDsJCQkvKiBQb2ludGVyIHRvIGZpbGVzcGVjICovCi0gICAgaW50IGksIG4sIGRvbmUg PSAwOwotI2lmZGVmIFBJUEVTRU5ECi0gICAgZXh0ZXJuIGludCB1c2VwaXBlcywgcGlwZXNlbmQ7 Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSAgICBleHRlcm4gaW50IG5vbGlua3M7Ci0KLSAgICBp ZiAoIUVOQUJMRUQoZW5fZ2V0KSkgewkJLyogT25seSBpZiBub3QgZGlzYWJsZWQhICAqLwotCWVy cnBrdCgoQ0hBUiAqKSJHRVQgZGlzYWJsZWQiKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLQotICAg IC8qIE9LIHRvIHByb2NlZWQgKi8KLQotICAgIG5vbGlua3MgPSByZWN1cnNpdmU7Ci0gICAgZmls Y250ID0gMDsKLQotI2lmZGVmIFdIQVRBTUkKLSAgICAvKiBJZiB0aGV5IGFyZSBhbGlrZSB0aGlz IHdhcyBhbHJlYWR5IGRvbmUgaW4gd2hvYXJld2UoKSAqLwotICAgIGRlYnVnKEYxMDEsInNnZXRp bml0IHdoYXRydSIsIiIsd2hhdHJ1KTsKLSAgICBpZiAod2hhdHJ1ICYgV01JX0ZMQUcpIHsJCS8q IERpZCB3ZSBnZXQgV0hBVEFNSSBpbmZvPyAqLwotCWRlYnVnKEYxMDEsInNnZXRpbml0IGJpbmFy eSAoMSkiLCIiLGJpbmFyeSk7Ci0jaWZkZWYgVk1TCi0JaWYgKGJpbmFyeSAhPSBYWUZUX0kgJiYg YmluYXJ5ICE9IFhZRlRfTCkKLSNlbHNlCi0jaWZkZWYgT1MyCi0JICBpZiAoYmluYXJ5ICE9IFhZ RlRfTCkKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQkgICAgYmluYXJ5ID0g KHdoYXRydSAmIFdNSV9GTU9ERSkgPyAvKiBZZXMsIHNldCBmaWxlIHR5cGUgKi8KLQkgICAgICBY WUZUX0IgOiBYWUZUX1Q7CS8qIGF1dG9tYXRpY2FsbHkgKi8KLQlkZWJ1ZyhGMTAxLCJzZ2V0aW5p dCBiaW5hcnkgKDIpIiwiIixiaW5hcnkpOwotCWlmICghd2VhcmVhbGlrZSkKLQkgIGZuY252ID0g KHdoYXRydSAmIFdNSV9GTkFNRSkgPyAxIDogMDsgLyogQW5kIG5hbWUgY29udmVyc2lvbiAqLwot ICAgIH0KLSNlbmRpZiAvKiBXSEFUQU1JICovCi0KLSAgICBmcyA9IChjaGFyICopc3J2Y21kOwot ICAgIHNydnB0ciA9IHNydmNtZDsJCQkvKiBQb2ludCB0byBzZXJ2ZXIgY29tbWFuZCBidWZmZXIg Ki8KLSAgICBkZWNvZGUocmRhdGFwLHB1dHNydiwwKTsJCS8qIERlY29kZSB0aGUgR0VUIGNvbW1h bmQgaW50byBpdCAqLwotICAgIC8qIEFjY2VwdCBtdWx0aXBsZSBmaWxlc3BlY3MgKi8KLSAgICBj bWFyZzIgPSAiIjsJCQkvKiBEb24ndCB1c2UgY21hcmcyICovCi0gICAgY21hcmcgPSAiIjsJCQkJ LyogRG9uJ3QgdXNlIGNtYXJnICovCi0KLSAgICBkb25lID0gMTsJCQkJLyogT25seSAxIHBhY2tl dCBuZWVkZWQuLi4gKi8KLSAgICBpZiAoeGdldCkgewkJCQkvKiBTcGVjaWFsIGRlY29kaW5nIGZv ciBFeHRlbmRlZCBHRVQgKi8KLQljaGFyIEwsIG5leHQsIGM7CQkvKiBQTFYgaXRlbXMgKi8KLQlp bnQgbGVuLCB2YWw7CQkJLyogTW9yZSBQTFYgaXRlbXMgKi8KLQljaGFyICogcCA9IChjaGFyICop c3J2Y21kOwkvKiBTdHJpbmcgdG8gZGVjb2RlICovCi0KLQlkb25lID0gMDsJCQkvKiBNYXliZSBt b3JlIHBhY2tldHMgbmVlZGVkICovCi0JZnMgPSBOVUxMOwkJCS8qIFdlIGRvbid0IGtub3cgdGhl IGZpbGVzcGVjIHlldCAqLwotCWMgPSAqcCsrOwkJCS8qIEdldCBmaXJzdCBwYXJhbWV0ZXIgKi8K LQotCXdoaWxlIChjKSB7CQkJLyogRm9yIGFsbCBwYXJhbWV0ZXJzLi4uICovCi0JICAgIGRlYnVn KEYwMDAsInNnZXRpbml0IGMiLCIiLGMpOwotCSAgICBMID0gKnArKzsJCQkvKiBHZXQgbGVuZ3Ro ICovCi0JICAgIGlmIChMID49IFNQKQkJLyogRGVjb2RlIGxlbmd0aCAqLwotCSAgICAgIGxlbiA9 IHh1bmNoYXIoTCk7Ci0JICAgIGVsc2UgaWYgKGMgPT0gJ0AnKSB7CS8qIEFsbG93IG1pc3Npbmcg RU9QIGxlbmd0aCBmaWVsZCAqLwotCQlsZW4gPSAwOwotCSAgICB9IGVsc2UgewotCQlsZW4gPSAo eHVuY2hhcigqcCsrKSAqIDk1KTsKLQkJbGVuICs9IHh1bmNoYXIoKnArKyk7Ci0JICAgIH0KLQkg ICAgZGVidWcoRjEwMSwic2dldGluaXQgbGVuIiwiIixsZW4pOwotCSAgICBuZXh0ID0gKihwK2xl bik7CQkvKiBHZXQgbmV4dCBwYXJhbWV0ZXIgKi8KLQkgICAgKihwK2xlbikgPSBOVUw7CQkvKiBa ZXJvIGl0IG91dCB0byB0ZXJtaW5hbCB2YWx1ZSAqLwotCSAgICBkZWJ1ZyhGMTEwLCJzZ2V0aW5p dCBwIixwLDApOwotCSAgICBzd2l0Y2ggKGMpIHsJCS8qIERvIHRoZSBwYXJhbWV0ZXIgKi8KLQkg ICAgICBjYXNlICdPJzoJCQkvKiBHRVQgT3B0aW9ucyAqLwotCQl2YWwgPSBhdG9pKHApOwkJLyog Q29udmVydCB0byBpbnQgKi8KLQkJZGVidWcoRjEwMSwic2dldGluaXQgTyB2YWwiLCIiLHZhbCk7 Ci0JCWlmICh2YWwgJiBHT1BUX0RFTCkgbW92aW5nID0gMTsKLQkJaWYgKHZhbCAmIEdPUFRfUkVT KSByZWdldCA9IDE7Ci0JCWlmICh2YWwgJiBHT1BUX1JFQykgewotCQkgICAgcmVjdXJzaXZlID0g MTsKLQkJICAgIG5vbGlua3MgPSAyOwotCQkgICAgaWYgKGZuc3BhdGggPT0gUEFUSF9PRkYpCi0J CSAgICAgIGZuc3BhdGggPSBQQVRIX1JFTDsKLQkJfQotCQlicmVhazsKLQkgICAgICBjYXNlICdN JzoJCQkvKiBUcmFuc2ZlciBNb2RlICovCi0JCXZhbCA9IGF0b2kocCk7Ci0JCWRlYnVnKEYxMDEs InNnZXRpbml0IE0gdmFsIiwiIix2YWwpOwotCQlpZiAodmFsIDwgMSkKLQkJICBicmVhazsKLQkJ cGF0dGVybnMgPSAwOwkJLyogVGFrZXMgcHJlY2VkZW5jZSBvdmVyIHBhdHRlcm5zICovCi0JCWZp bGVwZWVrID0gMDsJCS8qIGFuZCBGSUxFIFNDQU4gKi8KLQkJaWYgKHZhbCA9PSBHTU9EX1RYVCkg YmluYXJ5ID0gWFlGVF9UOyAvKiBUZXh0ICovCi0JCWlmICh2YWwgPT0gR01PRF9CSU4pIGJpbmFy eSA9IFhZRlRfQjsgLyogQmluYXJ5ICovCi0JCWlmICh2YWwgPT0gR01PRF9MQkwpIGJpbmFyeSA9 IFhZRlRfTDsgLyogTGFiZWxlZCAqLwotCQlicmVhazsKLQkgICAgICBjYXNlICdGJzoJCQkvKiBG aWxlbmFtZSAqLwotCQlmcyA9IHA7Ci0JCWRlYnVnKEYxMTAsInNnZXRpbml0IGZpbGVuYW1lIixm cywwKTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAnQCc6CQkJLyogRW5kIE9mIFBhcmFtZXRlcnMg Ki8KLQkJZG9uZSA9IDE7Ci0JCWRlYnVnKEYxMDAsInNnZXRpbml0IEVPUCIsIiIsMCk7Ci0JCWJy ZWFrOwotCSAgICAgIGRlZmF1bHQ6Ci0JCWVycnBrdCgoQ0hBUiAqKSJVbmtub3duIEdFVCBQYXJh bWV0ZXIiKTsKLQkJZGVidWcoRjEwMCwic2dldGluaXQgdW5rbm93biBwYXJhbWV0ZXIiLCIiLDAp OwotCQlyZXR1cm4oLTEpOwotCSAgICB9Ci0JICAgIHAgKz0gKGxlbiArIDEpOwotCSAgICBjID0g bmV4dDsKLQl9Ci0gICAgfQotICAgIGlmICghZnMpIGZzID0gIiI7CQkJLyogQSBmaWxlbmFtZSBp cyByZXF1aXJlZCAqLwotICAgIGlmICgqZnMpIHsKLQloYXZlZnMgPSAxOwotCW4gPSAwOwkJCQkv KiBDaGVjayBmb3IgcXVvdGVkIG5hbWUgKi8KLQlpZiAoKG4gPSBzdHJsZW4oZnMpKSA+IDEpIHsK LQkgICAgLyogTm90ZTogdGhpcyBkb2VzIG5vdCBhbGxvdyBmb3IgbXVsdGlwbGUgcXVvdGVkIG5h bWVzICovCi0JICAgIGlmICgoZnNbMF0gPT0gJ3snICYmIGZzW24tMV0gPT0gJ30nKSB8fAotCQko ZnNbMF0gPT0gJyInICYmIGZzW24tMV0gPT0gJyInKSkgewotCQlmc1tuLTFdID0gJ1wwJzsKLQkJ ZnMrKzsKLQkJZGVidWcoRjExMSwic2dldGluaXQgdW5xdW90ZWQgZmlsZW5hbWUiLGZzLG4pOwot CSAgICB9IGVsc2UKLQkgICAgICBuID0gMDsJCQkvKiBUaGlzIG1lYW5zIG5vIHF1b3RpbmcgKi8K LQl9Ci0KLSNpZmRlZiBQSVBFU0VORAotCWRlYnVnKEYxMTEsInNnZXRpbml0Iixmcyx1c2VwaXBl cyk7Ci0JaWYgKHVzZXBpcGVzICYmIEVOQUJMRUQoZW5faG9zKSAmJiAqZnMgPT0gJyEnKSB7Ci0J ICAgIGNtYXJnID0gZnMgKyAxOwkJLyogUG9pbnQgcGFzdCB0aGUgYmFuZyAqLwotCSAgICAqZnMg PSBOVUw7Ci0JICAgIG5maWxzID0gLTE7Ci0JICAgIHBpcGVzZW5kID0gMTsKLQkgICAgZGVidWco RjExMSwic2dldGluaXQgcGlwZXNlbmQiLGNtYXJnLHBpcGVzZW5kKTsKLQl9Ci0JaWYgKCFwaXBl c2VuZCkgewkJLyogSWYgaXQncyBub3QgYSBwaXBlICovCi0jZW5kaWYgLyogUElQRVNFTkQgKi8K LQkgICAgaWYgKG4gPT0gMCkgewkJLyogSWYgdGhlIG5hbWUgd2FzIG5vdCBxdW90ZWQgKi8KLSNp Zm5kZWYgTk9NU0VORAotCQluZmlscyA9IGZucGFyc2UoZnMpOwkvKiBBbGxvdyBpdCB0byBiZSBh IGxpc3Qgb2YgbmFtZXMgKi8KLQkJZGVidWcoRjExMSwic2dldGluaXQgQSIsZnMsbmZpbHMpOwot I2lmZGVmIENPTU1FTlQKLS8qIFRoaXMgZG9lc24ndCB3b3JrIGlmIGEgR0VULVBBVEggaXMgc2V0 LiAqLwotCQlpZiAobmZpbHMgPT0gMSAmJiAhaXN3aWxkKGZzKSkgeyAvKiBTaW5nbGUgZmlsZSAq LwotCQkgICAgY2hhciAqIG07Ci0JCSAgICBpZiAoKHggPSB6Y2hraShmcykpIDwgMCkgeyAvKiBD aGVjayBpZiBpdCdzIHNlbmRhYmxlICovCi0JCQlzd2l0Y2ggKHgpIHsKLQkJCSAgY2FzZSAtMTog bSA9ICJGaWxlIG5vdCBmb3VuZCI7IGJyZWFrOwotCQkJICBjYXNlIC0yOiBtID0gIk5vdCBhIHJl Z3VsYXIgZmlsZSI7IGJyZWFrOwotCQkJICBjYXNlIC0zOiBtID0gIlJlYWQgYWNjZXNzIGRlbmll ZCI7IGJyZWFrOwotCQkJfQotCQkJZXJycGt0KChDSEFSICopbSk7Ci0JCQlyZXR1cm4oLTEpOwot CQkgICAgfQotCQl9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICB9IGVsc2UgewkJCS8qIElm IGl0IHdhcyBxdW90ZWQgKi8KLSNlbmRpZiAvKiBOT01TRU5EICovCi0JCW56eG9wdHMgPSAwOwot I2lmZGVmIFVOSVhPUk9TSwotCQlpZiAobWF0Y2hkb3QpICBuenhvcHRzIHw9IFpYX01BVENIRE9U OwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotCQlpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpY X1JFQ1VSU0U7Ci0JCS8qIFRyZWF0IGFzIGEgc2luZ2xlIGZpbGVzcGVjICovCi0JCW5maWxzID0g MCAtIG56eHBhbmQoZnMsbnp4b3B0cyk7Ci0JCWRlYnVnKEYxMTEsInNnZXRpbml0IEIiLGZzLG5m aWxzKTsKLQkJY21hcmcgPSBmczsKLQkgICAgfQotI2lmZGVmIFBJUEVTRU5ECi0JfQotI2VuZGlm IC8qIFBJUEVTRU5EICovCi0gICAgfQotICAgIGlmICghZG9uZSkgewkJCS8qIE5lZWQgbW9yZSBP IHBhY2tldHMuLi4gKi8KLQlkZWJ1ZyhGMTAwLCJzZ2V0aW5pdCBPLVBhY2tldCBUQkMiLCIiLDAp OyAvKiBUbyBCZSBDb250aW51ZWQgKi8KLQlyZXR1cm4oMSk7Ci0gICAgfQotICAgIGRlYnVnKEYx MDAsInNnZXRpbml0IE8tUGFja2V0IGRvbmUgLSBoYXZlZnMiLCIiLGhhdmVmcyk7Ci0gICAgaWYg KCFoYXZlZnMpIHsJCQkvKiBEb25lIC0gbWFrZSBzdXJlIHdlIGhhdmUgZmlsZW5hbWUgKi8KLQll cnJwa3QoKENIQVIgKikiR0VUIHdpdGhvdXQgZmlsZW5hbWUiKTsKLQlyZXR1cm4oLTEpOwotICAg IH0KLSAgICBmcmVlcnBrdCh3aW5sbyk7Ci0gICAgd2lubG8gPSAwOwkJCQkvKiBCYWNrIHRvIHBh Y2tldCAwIGFnYWluLiAqLwotICAgIGRlYnVnKEYxMDEsInNnZXRpbml0IHdpbmxvIiwiIix3aW5s byk7Ci0gICAgbmFrc3RhdGUgPSAwOwkJCS8qIE5vdyBJJ20gdGhlIHNlbmRlciEgKi8KLSAgICBp ZiAocmVnZXQpIHNlbmRtb2RlID0gU01fUkVTRU5EOwotICAgIGlmIChzaW5pdCgpID4gMCkgewkJ CS8qIFNlbmQgU2VuZC1Jbml0ICovCi0jaWZkZWYgU1RSRUFNSU5HCi0JaWYgKCFzdHJlYW1pbmcp Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0JICB0aW1pbnQgPSBjaGt0aW1vKHJ0aW1vLHRpbWVm KTsgLyogU3dpdGNoIHRvIHBlci1wYWNrZXQgdGltZXIgKi8KLQlyZXR1cm4oMCk7CQkJLyogSWYg c3VjY2Vzc2Z1bCwgc3dpdGNoIHN0YXRlICovCi0gICAgfSBlbHNlIHJldHVybigtMSk7CQkJLyog RWxzZSBiYWNrIHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8KLX0KLQotI2Vsc2UgIC8qIE5PWEZF UiAqLwotCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0KLVZPSUQKLXByb3RvKCkgewotICAgIGV4dGVy biBpbnQgc3VjY2VzczsKLSAgICBzdWNjZXNzID0gMDsKLX0KLSNlbmRpZiAvKiBOT1hGRVIgKi8K CmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3Np Zy5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NzaWcuaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBiYTg1Yy4uMDAwMDAwMAotLS0gYS9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3NpZy5oCisrKyAvZGV2L251bGwKQEAg LTEsMjE0ICswLDAgQEAKLS8qICBDIEsgQyBTIEkgRyAuIEggICovCi0KLS8qICBEZWZpbml0aW9u cyBhbmQgcHJvdG90eXBlcyBmb3Igc2lnbmFsIGhhbmRsaW5nICAqLwotCi0vKgotICBBdXRob3I6 IEplZmZyZXkgRSBBbHRtYW4gKGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20pLAotICBTZWN1 cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkuCi0KLSAgQ29weXJpZ2h0IChDKSAxOTg1 LCAyMDA5LAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkg b2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQg Q09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFp LmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLSovCi0jaWZkZWYgT1My Ci0jaWZuZGVmIE5UCi0jaWZuZGVmIF9fSEVWX18gICAgICAgICAgICAgICAgIC8qIElOQ0xfU0VN QVBIT1JFIG1heSBhbHNvIGRlZmluZSBIRVYgKi8KLSNkZWZpbmUgX19IRVZfXwotdHlwZWRlZiAg VUxPTkcgICAgSEVWOyAgICAgICAgICAgICAgICAgIC8qIGhldiAqLwotdHlwZWRlZiAgSEVWICAg ICAgKlBIRVY7Ci0jZW5kaWYgLyogX19IRVZfXyAqLwotI2VuZGlmIC8qIE5UICovCi1zdHJ1Y3Qg X3RocmVhZGluZm8gewotICAgIGludCBpbnVzZTsKLSAgICBpbnQgY2hpbGQ7Ci0gICAgaW50IHNp Ymxpbmc7Ci0jaWZkZWYgTlQKLSAgICBIQU5ETEUgaWQ7Ci0gICAgSEFORExFIGhhbmRsZTsKLSAg ICBIQU5ETEUgcGFyZW50OwotICAgIEhBTkRMRSBDb21wbGV0aW9uU2VtIDsKLSAgICBIQU5ETEUg RGllU2VtIDsKLSNlbHNlIC8qIE5UICovCi0gICAgVElEIGlkOwotICAgIFRJRCBwYXJlbnQ7Ci0g ICAgSEVWIENvbXBsZXRpb25TZW07Ci0gICAgSEVWIERpZVNlbTsKLSNlbmRpZiAvKiBOVCAqLwot fTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENLX0FOU0lDCi10eXBlZGVmIFNJR1RZUCAo KmNrX3NpZ2Z1bmMpKHZvaWQgKik7Ci10eXBlZGVmIFNJR1RZUCAoKmNrX3NpZ2hhbmQpKGludCk7 Ci0jZWxzZQotdHlwZWRlZiBTSUdUWVAgKCpja19zaWdmdW5jKSgpOwotdHlwZWRlZiBTSUdUWVAg KCpja19zaWdoYW5kKSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0KLS8qIE1hY3JvcyBmb3Ig UE9TSVggdnMgb2xkLXN0eWxlIHNpZ25hbCBoYW5kbGluZy4gKi8KLQotI2lmZGVmIENLX1BPU0lY X1NJRwotdHlwZWRlZiBzaWdqbXBfYnVmIGNram1wYnVmOwotI2Vsc2UKLSNpZmRlZiBOVAotI2Rl ZmluZSBOT0NSWVBUCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2lmZGVmIE5UQVNNCi10eXBlZGVm IHN0cnVjdCB7Ci0gICAgQ09OVEVYVCBjb250ZXh0OwotICAgIERXT1JEIHJldGNvZGU7Ci19IGNr am1wYnVmOwotI2Vsc2UgLyogTlRBU00gKi8KLXR5cGVkZWYgam1wX2J1ZiBja2ptcGJ1ZjsKLSNl bmRpZiAvKiBOVEFTTSAqLwotI2Vsc2UKLXR5cGVkZWYgam1wX2J1ZiBja2ptcGJ1ZjsKLSNlbmRp ZgotI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLwotLyoKLSAgU3VwcG9zZSB5b3Ugd2FudCB0byBw YXNzIHRoZSBhZGRyZXNzIG9mIGEgam1wX2J1ZiBiYXIgdG8gYSBmdW5jdGlvbiBmb28uCi0gIFNp bmNlIGptcF9idWYgaXMgbm9ybWFsbHkgZGVmaW5lZCAodHlwZWRlZidkKSBhcyBhbiBhcnJheSwg eW91IHdvdWxkIGRvCi0gIGl0IGxpa2UgdGhpczogIGZvbyhiYXIpLCB3aGVyZSBmb28gPSBmb28o am1wX2J1ZiBiYXIpLiAgQnV0IHN1cHBvc2UgYQotICBqbXBfYnVmIGlzIChzYXkpIGEgc3RydWN0 IHJhdGhlciB0aGFuIGFuIGFycmF5LiAgVGhlbiB5b3UgbXVzdCBkbwotICBmb28oJmJhcikgd2hl cmUgZm9vIGlzIGZvbyhqbXBfYnVmICogYmFyKS4gIFRoaXMgaXMgY29udHJvbGxlZCBoZXJlIGlu Ci0gIHRoZSB0cmFkaXRpb25hbCBmYXNoaW9uLCBieSBpZmRlZnMuICBCeSBkZWZhdWx0LCB3ZSBh c3N1bWUgdGhhdCBqbXBfYnVmCi0gIGlzIGFuIGFycmF5LiAgRGVmaW5lIHRoZSBzeW1ib2wgSkJO T1RBUlJBWSBpZiBqbXBfYnVmIGlzIG5vdCBhbiBhcnJheS4KLSovCi0jaWZuZGVmIEpCTk9UQVJS QVkKLSNpZmRlZiBOVAotI2RlZmluZSBKQk5PVEFSUkFZCi0jZW5kaWYgLyogTlQgKi8KLSNlbmRp ZiAvKiBKQk5PVEFSUkFZICovCi0KLSNpZmRlZiBKQk5PVEFSUkFZCi10eXBlZGVmIGNram1wYnVm ICogY2tqcHRyOwotI2RlZmluZSBja2phZGRyKHgpICYgeAotI2RlZmluZSBja2pkcmVmKHgpICog eAotI2lmZGVmIENLX1BPU0lYX1NJRwotI2RlZmluZSBja3NldGptcCh4KSBzaWdzZXRqbXAoeCwx KQotI2RlZmluZSBja2xvbmdqbXAoeCx5KSBzaWdsb25nam1wKHgseSkKLSNlbHNlCi0jaWZkZWYg TlQKLV9faW5saW5lIGludAotY2tfaWgodm9pZCkgewotICAgIGV4dGVybiBpbnQgVGxzSW5kZXg7 Ci0jaWZkZWYgTlRTSUcKLSAgICBzdHJ1Y3QgX3RocmVhZGluZm8gKiB0aHJlYWRpbmZvOwotICAg IHRocmVhZGluZm8gPSAoc3RydWN0IF90aHJlYWRpbmZvICopIFRsc0dldFZhbHVlKFRsc0luZGV4 KTsKLSAgICBpZiAodGhyZWFkaW5mbykgewotICAgICAgICBpZiAoV2FpdEFuZFJlc2V0U2VtKHRo cmVhZGluZm8tPkRpZVNlbSwwKSkgewotICAgICAgICAgICAgY2tUaHJlYWREaWUodGhyZWFkaW5m byk7Ci0gICAgICAgICAgICByZXR1cm4gMTsgICAgICAgICAgICAgICAgICAgLyogVGhpcyBzaG91 bGQgbmV2ZXIgZXhlY3V0ZSAqLwotICAgICAgICB9Ci0gICAgfQotI2lmZGVmIENPTU1FTlQKLSAg ICBlbHNlIGRlYnVnKCBGMTAwLCAiY2tfaWgoKSB0aHJlYWRpbmZvIGlzIE5VTEwiLCIiLDApOwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgIHJldHVybiAwOwot fQotI2lmZGVmIE5UU0lHCi0jZGVmaW5lIGNrc2V0am1wKHgpIHNldGptcCh4KQotI2RlZmluZSBj a2xvbmdqbXAoeCx5KSBsb25nam1wKHgseSkKLSNlbHNlIC8qIE5UU0lHICovCi0jaWZkZWYgTlRB U00KLV9faW5saW5lIERXT1JECi1ja3NldGptcCggY2tqcHRyIGptcCApIHsKLSAgICBleHRlcm4g aW50IGlzaW50ZXJydXB0ZWQ7Ci0gICAgam1wLT5yZXRjb2RlID0gMDsKLSAgICBtZW1zZXQoICZq bXAtPmNvbnRleHQsIDAsIHNpemVvZihDT05URVhUKSApOwotICAgIGptcC0+Y29udGV4dC5Db250 ZXh0RmxhZ3MgPSBDT05URVhUX0ZVTEwgOwotICAgIGlmICggIUdldFRocmVhZENvbnRleHQoIEdl dEN1cnJlbnRUaHJlYWQoKSwgJmptcC0+Y29udGV4dCApICkKLSAgICAgIGRlYnVnKCBGMTAxLCAi Y2tzZXRqbXAgR2V0VGhyZWFkQ29udGV4dCBmYWlsZWQiLCIiLEdldExhc3RFcnJvcigpKTsKLSAg ICBkZWJ1ZyhGMTAxLCJja3NldGptcCByZXR1cm5zIiwiIixqbXAtPnJldGNvZGUpOwotICAgIGlz aW50ZXJydXB0ZWQgPSAwOwotICAgIHJldHVybiAoam1wLT5yZXRjb2RlKTsKLX0KLQotX19pbmxp bmUgdm9pZAotY2tsb25nam1wKCBja2pwdHIgam1wLCBpbnQgcmV0dmFsICkgewotICAgIGV4dGVy biBIQU5ETEUgdGlkQ29tbWFuZDsKLSAgICBleHRlcm4gaW50IHR0eWZkLCBtZG10eXAgOwotICAg IGV4dGVybiBEV09SRCBDb21tYW5kSUQ7Ci0gICAgZXh0ZXJuIGludCBpc2ludGVycnVwdGVkOwot Ci0gICAgY29ubm9pKCk7Ci0gICAgaXNpbnRlcnJ1cHRlZCA9IDE7Ci0gICAgam1wLT5yZXRjb2Rl ID0gKCByZXR2YWwgPyByZXR2YWwgOiAxICk7Ci0gICAgZGVidWcoRjEwMSwiYWJvdXQgdG8gU2V0 VGhyZWFkQ29udGV4dCBmb3IgdGhyZWFkIiwiIiwgQ29tbWFuZElEKTsKLSAgICBkZWJ1ZyhGMTAx LCJmcm9tIFRocmVhZCIsIiIsR2V0Q3VycmVudFRocmVhZElkKCkpOwotICAgIGlmICggbWRtdHlw ID49IDAgKSB7Ci0gICAgICAgIFB1cmdlQ29tbSggKEhBTkRMRSkgdHR5ZmQsIFBVUkdFX1RYQUJP UlQgfCBQVVJHRV9SWEFCT1JUICk7Ci0gICAgfQotICAgIGlmIChTZXRUaHJlYWRDb250ZXh0KCB0 aWRDb21tYW5kLCAmam1wLT5jb250ZXh0ICkpCi0gICAgICBkZWJ1ZyhGMTAwLCJja2xvbmdqbXAg U2V0VGhyZWFkQ29udGV4dCBzdWNjZXNzIiwiIiwwKTsKLSAgICBlbHNlCi0gICAgICBkZWJ1ZyhG MTAxLCJja2xvbmdqbXAgU2V0VGhyZWFkQ29udGV4dCBmYWlsZWQiLCIiLEdldExhc3RFcnJvcigp KTsKLSAgICBtc2xlZXAoNTApOwotICAgIGNtaW5pKDEpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJlc2V0IGNvbW1hbmQgcGFyc2VyICovCi0gICAgcHV0a2V5KDEzKTsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU3R1ZmYgYSBjYXJyaWFnZSByZXR1cm4gKi8KLSAgIC8qIFBvc3RF dmVudEF2YWlsU2VtKCk7ICovCi19Ci0jZWxzZSAvKiBOVEFTTSAqLwotdm9pZCBjcmFzaCggdm9p ZCApIDsKLSNkZWZpbmUgY2tzZXRqbXAoeCkgc2V0am1wKHgpCi1fX2lubGluZSB2b2lkCi1ja2xv bmdqbXAoIGNranB0ciBqbXAsIGludCByZXR2YWwgKSB7Ci0gICAgZXh0ZXJuIEhBTkRMRSB0aWRD b21tYW5kOwotICAgIGV4dGVybiBpbnQgdHR5ZmQsIG1kbXR5cDsKLSAgICBleHRlcm4gRFdPUkQg Q29tbWFuZElEOwotICAgIENPTlRFWFQgY29udGV4dDsKLQotICAgIGlmICggbWRtdHlwID49IDAg KSB7Ci0gICAgICAgIFB1cmdlQ29tbSggKEhBTkRMRSkgdHR5ZmQsIFBVUkdFX1RYQUJPUlQgfCBQ VVJHRV9SWEFCT1JUICkgOwotICAgIH0KLSAgICBtZW1zZXQoICZjb250ZXh0LCAwLCBzaXplb2Yo Q09OVEVYVCkgKTsKLSAgICBjb250ZXh0LkNvbnRleHRGbGFncyA9IENPTlRFWFRfRlVMTDsKLSAg ICBpZiAoICFHZXRUaHJlYWRDb250ZXh0KCB0aWRDb21tYW5kLCAmY29udGV4dCApICkKLSAgICAg IGRlYnVnKCBGMTAxLCAiY2tsb25nam1wIEdldFRocmVhZENvbnRleHQgZmFpbGVkIiwiIixHZXRM YXN0RXJyb3IoKSk7Ci0KLSAgICAvKiBJbnZhbGlkYXRlIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVy ICovCi0gICAgY29udGV4dC5FaXAgPSAgKHVuc2lnbmVkIGxvbmcpIGNyYXNoOwotCi0gICAgZGVi dWcoRjEwMSwiYWJvdXQgdG8gU2V0VGhyZWFkQ29udGV4dCBmb3IgdGhyZWFkIiwiIiwgQ29tbWFu ZElEKTsKLSAgICBkZWJ1ZyhGMTAxLCJmcm9tIFRocmVhZCIsIiIsR2V0Q3VycmVudFRocmVhZElk KCkpOwotICAgIGlmIChTZXRUaHJlYWRDb250ZXh0KCB0aWRDb21tYW5kLCAmY29udGV4dCApKQot ICAgICAgZGVidWcoRjEwMCwiY2tsb25nam1wIFNldFRocmVhZENvbnRleHQgc3VjY2VzcyIsIiIs MCk7Ci0gICAgZWxzZQotICAgICAgZGVidWcoRjEwMSwiY2tsb25nam1wIFNldFRocmVhZENvbnRl eHQgZmFpbGVkIiwiIixHZXRMYXN0RXJyb3IoKSk7Ci19Ci0jZW5kaWYgLyogTlRBU00gKi8KLSNl bmRpZiAvKiBOVFNJRyAqLwotI2Vsc2UgLyogTlQgKi8KLSNkZWZpbmUgY2tzZXRqbXAoeCkgc2V0 am1wKHgpCi0jZGVmaW5lIGNrbG9uZ2ptcCh4LHkpIGxvbmdqbXAoeCx5KQotI2VuZGlmIC8qIE5U ICovCi0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0jZWxzZSAgLyogam1wX2J1ZiBpcyBhbiBh cnJheSAqLwotdHlwZWRlZiBja2ptcGJ1ZiBja2pwdHI7Ci0jZGVmaW5lIGNramFkZHIoeCkgeAot I2RlZmluZSBja2pkcmVmKHgpIHgKLSNpZmRlZiBDS19QT1NJWF9TSUcKLSNkZWZpbmUgY2tzZXRq bXAoeCkgc2lnc2V0am1wKHgsMSkKLSNkZWZpbmUgY2tsb25nam1wKHgseSkgc2lnbG9uZ2ptcCh4 LHkpCi0jZWxzZQotI2RlZmluZSBja3NldGptcCh4KSBzZXRqbXAoeCkKLSNkZWZpbmUgY2tsb25n am1wKHgseSkgbG9uZ2ptcCh4LHkpCi0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0jZW5kaWYg LyogSkJOT1RBUlJBWSAqLwotCi1fUFJPVE9UWVAoIGludCBjY19leGVjdXRlLCAoY2tqcHRyLCBj a19zaWdmdW5jLCBja19zaWdmdW5jKSApOwotX1BST1RPVFlQKCBpbnQgYWxybV9leGVjdXRlLAot ICAgICAgICAgIChja2pwdHIsCi0gICAgICAgICAgIGludCAvKiB0aW1vICovLAotICAgICAgICAg ICBja19zaWdoYW5kIC8qIGhhbmRsZXIgKi8sCi0gICAgICAgICAgIGNrX3NpZ2Z1bmMsIGNrX3Np Z2Z1bmMpICk7Ci1fUFJPVE9UWVAoIGludCBjY19hbHJtX2V4ZWN1dGUsCi0gICAgICAgICAgKGNr anB0ciwKLSAgICAgICAgICAgaW50IC8qIHRpbW8gKi8sCi0gICAgICAgICAgIGNrX3NpZ2hhbmQg LyogaGFuZGxlciAqLywKLSAgICAgICAgICAgY2tfc2lnZnVuYywKLSAgICAgICAgICAgY2tfc2ln ZnVuYykgKTsKLQotLyogRW5kIG9mIGNrdXNpZy5oICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Nzc2wuaCBiL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjc3NsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDRlMzFmMTIuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja2Nzc2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0jaWZkZWYg Q0tfU1NMCi0jaWZuZGVmIENLX0FOU0lDCi0jZGVmaW5lIE5PUFJPVE8KLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotI2luY2x1ZGUgImJpby5oIgotI2luY2x1ZGUgImJ1ZmZlci5oIgotI2luY2x1ZGUg Ing1MDkuaCIKLSNpbmNsdWRlICJwZW0uaCIKLSNpbmNsdWRlICJzc2wuaCIKLQotZXh0ZXJuIEJJ TyAqYmlvX2VycjsKLWV4dGVybiBTU0wgKnNzbF9jb247Ci1leHRlcm4gU1NMX0NUWCAqc3NsX2N0 eDsKLWV4dGVybiBpbnQgc3NsX2RlYnVnX2ZsYWc7Ci1leHRlcm4gaW50IHNzbF9vbmx5X2ZsYWc7 Ci1leHRlcm4gaW50IHNzbF9hY3RpdmVfZmxhZzsKLWV4dGVybiBpbnQgc3NsX3ZlcmlmeV9mbGFn OwotZXh0ZXJuIGludCBzc2xfc2VjdXJlX2ZsYWc7Ci1leHRlcm4gaW50IHNzbF92ZXJib3NlX2Zs YWc7Ci1leHRlcm4gaW50IHNzbF9kaXNhYmxlZF9mbGFnOwotZXh0ZXJuIGludCBzc2xfY2VydF9y ZXF1aXJlZDsKLWV4dGVybiBpbnQgc3NsX2NlcnRzb2tfZmxhZzsKLWV4dGVybiBpbnQgc3NsX2R1 bW15X2ZsYWc7Ci0KLWV4dGVybiBjaGFyICpzc2xfbG9nX2ZpbGU7Ci1leHRlcm4gY2hhciAqc3Ns X3JzYV9jZXJ0X2ZpbGU7Ci1leHRlcm4gY2hhciAqc3NsX3JzYV9rZXlfZmlsZTsKLWV4dGVybiBj aGFyICpzc2xfZHNhX2NlcnRfZmlsZTsKLWV4dGVybiBjaGFyICpzc2xfZGhfa2V5X2ZpbGU7Ci1l eHRlcm4gY2hhciAqc3NsX2NpcGhlcl9saXN0OwotCi1leHRlcm4gU1NMX0NUWCAqdGxzX2N0eDsK LWV4dGVybiBTU0wgKnRsc19jb247Ci1leHRlcm4gaW50IHRsc19vbmx5X2ZsYWc7Ci1leHRlcm4g aW50IHRsc19hY3RpdmVfZmxhZzsKLWV4dGVybiBpbnQgdGxzX3NlY3VyZV9mbGFnOwotCi1fUFJP VE9UWVAoaW50IHNzbF9kb19pbml0LChpbnQpKTsKLV9QUk9UT1RZUChpbnQgc3NsX2Rpc3BsYXlf Y29ubmVjdF9kZXRhaWxzLChTU0wgKixpbnQpKTsKLV9QUk9UT1RZUChpbnQgc3NsX3NlcnZlcl92 ZXJpZnlfY2FsbGJhY2ssKGludCwgWDUwOV9TVE9SRV9DVFggKikpOwotX1BST1RPVFlQKGludCBz c2xfY2xpZW50X3ZlcmlmeV9jYWxsYmFjaywoaW50LCBYNTA5X1NUT1JFX0NUWCAqKSk7Ci0KLSNp ZmRlZiBPUzIKLSNkZWZpbmUgU1NMX2dldF9lcnJvciAgICAgICAgICAgICAgICAgICAgY2tfU1NM X2dldF9lcnJvcgotI2RlZmluZSBTU0xfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICBja19T U0xfcmVhZAotI2RlZmluZSBTU0xfcGVlayAgICAgICAgICAgICAgICAgICAgICAgICBja19TU0xf cGVlawotI2RlZmluZSBTU0xfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICBja19TU0xfY29u bmVjdAotI2RlZmluZSBTU0xfc2V0X2ZkICAgICAgICAgICAgICAgICAgICAgICBja19TU0xfc2V0 X2ZkCi0jZGVmaW5lIFNTTF9mcmVlICAgICAgICAgICAgICAgICAgICAgICAgIGNrX1NTTF9mcmVl Ci0jZGVmaW5lIFNTTF9zaHV0ZG93biAgICAgICAgICAgICAgICAgICAgIGNrX1NTTF9zaHV0ZG93 bgotI2RlZmluZSBTU0xfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICBja19TU0xfd3JpdGUK LSNkZWZpbmUgU1NMX3BlbmRpbmcgICAgICAgICAgICAgICAgICAgICAgY2tfU1NMX3BlbmRpbmcK LSNkZWZpbmUgU1NMX2xvYWRfZXJyb3Jfc3RyaW5ncyAgICAgICAgICAgY2tfU1NMX2xvYWRfZXJy b3Jfc3RyaW5ncwotI2RlZmluZSBTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUgICAgICAgICBja19T U0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUKLSNkZWZpbmUgU1NMX0NJUEhFUl9nZXRfbmFtZSAgICAg ICAgICAgICAgY2tfU1NMX0NJUEhFUl9nZXRfbmFtZQotI2RlZmluZSBTU0xfZ2V0X2N1cnJlbnRf Y2lwaGVyICAgICAgICAgICBja19TU0xfZ2V0X2N1cnJlbnRfY2lwaGVyCi0jZGVmaW5lIFNTTF9n ZXRfc2hhcmVkX2NpcGhlcnMgICAgICAgICAgIGNrX1NTTF9nZXRfc2hhcmVkX2NpcGhlcnMKLSNk ZWZpbmUgU1NMX2dldF9jaXBoZXJzICAgICAgICAgICAgICAgICAgY2tfU1NMX2dldF9jaXBoZXJz Ci0jZGVmaW5lIFNTTF9nZXRfY2lwaGVyX2xpc3QgICAgICAgICAgICAgIGNrX1NTTF9nZXRfY2lw aGVyX2xpc3QKLSNkZWZpbmUgU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMgY2tfU1NM X0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMKLSNkZWZpbmUgU1NMX3VzZV9SU0FQcml2YXRl S2V5X2ZpbGUgICAgICAgY2tfU1NMX3VzZV9SU0FQcml2YXRlS2V5X2ZpbGUKLSNkZWZpbmUgU1NM X3VzZV9EU0FQcml2YXRlS2V5X2ZpbGUgICAgICAgY2tfU1NMX3VzZV9EU0FQcml2YXRlS2V5X2Zp bGUKLSNkZWZpbmUgU1NMX3VzZV9Qcml2YXRlS2V5X2ZpbGUgICAgICAgICAgY2tfU1NMX3VzZV9Q cml2YXRlS2V5X2ZpbGUKLSNkZWZpbmUgU1NMX3VzZV9jZXJ0aWZpY2F0ZV9maWxlICAgICAgICAg Y2tfU1NMX3VzZV9jZXJ0aWZpY2F0ZV9maWxlCi0jZGVmaW5lIFNTTF9DVFhfdXNlX1ByaXZhdGVL ZXlfZmlsZSAgICAgIGNrX1NTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZQotI2RlZmluZSBTU0xf Q1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlICAgICBja19TU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9m aWxlCi0jZGVmaW5lIFNTTF9zZXRfdmVyaWZ5ICAgICAgICAgICAgICAgICAgIGNrX1NTTF9zZXRf dmVyaWZ5Ci0jZGVmaW5lIFNTTF9uZXcgICAgICAgICAgICAgICAgICAgICAgICAgIGNrX1NTTF9u ZXcKLSNkZWZpbmUgU1NMX0NUWF9jdHJsICAgICAgICAgICAgICAgICAgICAgY2tfU1NMX0NUWF9j dHJsCi0jZGVmaW5lIFNTTF9DVFhfbmV3ICAgICAgICAgICAgICAgICAgICAgIGNrX1NTTF9DVFhf bmV3Ci0jZGVmaW5lIFNTTF9DVFhfZnJlZSAgICAgICAgICAgICAgICAgICAgIGNrX1NTTF9DVFhf ZnJlZQotI2RlZmluZSBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYiAgICBja19TU0xfQ1RY X3NldF9kZWZhdWx0X3Bhc3N3ZF9jYgotI2RlZmluZSBTU0x2MjNfbWV0aG9kICAgICAgICAgICAg ICAgICAgICBja19TU0x2MjNfbWV0aG9kCi0jZGVmaW5lIFNTTHYzX21ldGhvZCAgICAgICAgICAg ICAgICAgICAgIGNrX1NTTHYzX21ldGhvZAotI2RlZmluZSBUTFN2MV9tZXRob2QgICAgICAgICAg ICAgICAgICAgICBja19UTFN2MV9tZXRob2QKLSNkZWZpbmUgU1NMdjIzX2NsaWVudF9tZXRob2Qg ICAgICAgICAgICAgY2tfU1NMdjIzX2NsaWVudF9tZXRob2QKLSNkZWZpbmUgU1NMdjNfY2xpZW50 X21ldGhvZCAgICAgICAgICAgICAgY2tfU1NMdjNfY2xpZW50X21ldGhvZAotI2RlZmluZSBUTFN2 MV9jbGllbnRfbWV0aG9kICAgICAgICAgICAgICBja19UTFN2MV9jbGllbnRfbWV0aG9kCi0jZGVm aW5lIFNTTHYyM19zZXJ2ZXJfbWV0aG9kICAgICAgICAgICAgIGNrX1NTTHYyM19zZXJ2ZXJfbWV0 aG9kCi0jZGVmaW5lIFNTTHYzX3NlcnZlcl9tZXRob2QgICAgICAgICAgICAgIGNrX1NTTHYzX3Nl cnZlcl9tZXRob2QKLSNkZWZpbmUgVExTdjFfc2VydmVyX21ldGhvZCAgICAgICAgICAgICAgY2tf VExTdjFfc2VydmVyX21ldGhvZAotI2RlZmluZSBTU0xfbGlicmFyeV9pbml0ICAgICAgICAgICAg ICAgICBja19TU0xfbGlicmFyeV9pbml0Ci0jZGVmaW5lIFNTTF9zdGF0ZV9zdHJpbmcgICAgICAg ICAgICAgICAgIGNrX1NTTF9zdGF0ZV9zdHJpbmcKLSNkZWZpbmUgU1NMX3N0YXRlX3N0cmluZ19s b25nICAgICAgICAgICAgY2tfU1NMX3N0YXRlX3N0cmluZ19sb25nCi0jZGVmaW5lIFNTTF9hY2Nl cHQgICAgICAgICAgICAgICAgICAgICAgIGNrX1NTTF9hY2NlcHQKLSNkZWZpbmUgU1NMX3NldF9j aXBoZXJfbGlzdCAgICAgICAgICAgICAgY2tfU1NMX3NldF9jaXBoZXJfbGlzdAotCi0jZGVmaW5l IEVSUl9wcmludF9lcnJvcnMgICAgICAgICAgICAgICAgIGNrX0VSUl9wcmludF9lcnJvcnMKLSNk ZWZpbmUgRVJSX3ByaW50X2Vycm9yc19mcCAgICAgICAgICAgICAgY2tfRVJSX3ByaW50X2Vycm9y c19mcAotI2RlZmluZSBFUlJfZXJyb3Jfc3RyaW5nICAgICAgICAgICAgICAgICBja19FUlJfZXJy b3Jfc3RyaW5nCi0jZGVmaW5lIEVSUl9nZXRfZXJyb3IgICAgICAgICAgICAgICAgICAgIGNrX0VS Ul9nZXRfZXJyb3IKLQotI2RlZmluZSBCSU9fcHJpbnRmICAgICAgICAgICAgICAgICAgICAgICBj a19CSU9fcHJpbnRmCi0jZGVmaW5lIEJJT19jdHJsICAgICAgICAgICAgICAgICAgICAgICAgIGNr X0JJT19jdHJsCi0jZGVmaW5lIEJJT19uZXcgICAgICAgICAgICAgICAgICAgICAgICAgIGNrX0JJ T19uZXcKLSNkZWZpbmUgQklPX3NfZmlsZSAgICAgICAgICAgICAgICAgICAgICAgY2tfQklPX3Nf ZmlsZQotI2RlZmluZSBCSU9fc19tZW0gICAgICAgICAgICAgICAgICAgICAgICBja19CSU9fc19t ZW0KLSNkZWZpbmUgQklPX3NfbnVsbCAgICAgICAgICAgICAgICAgICAgICAgY2tfQklPX3NfbnVs bAotI2RlZmluZSBCSU9fcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICBja19CSU9fcmVhZAot I2RlZmluZSBCSU9fbmV3X2ZpbGUgICAgICAgICAgICAgICAgICAgICBja19CSU9fbmV3X2ZpbGUK LSNkZWZpbmUgQklPX2ZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgY2tfQklPX2ZyZWUKLQot I2RlZmluZSBYNTA5X2dldF9pc3N1ZXJfbmFtZSAgICAgICAgICAgICBja19YNTA5X2dldF9pc3N1 ZXJfbmFtZQotI2RlZmluZSBYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyAgICBja19YNTA5 X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZwotI2RlZmluZSBYNTA5X05BTUVfb25lbGluZSAgICAg ICAgICAgICAgICBja19YNTA5X05BTUVfb25lbGluZQotI2RlZmluZSBYNTA5X2dldF9zdWJqZWN0 X25hbWUgICAgICAgICAgICBja19YNTA5X2dldF9zdWJqZWN0X25hbWUKLSNkZWZpbmUgWDUwOV9T VE9SRV9DVFhfZ2V0X2N1cnJlbnRfY2VydCAgY2tfWDUwOV9TVE9SRV9DVFhfZ2V0X2N1cnJlbnRf Y2VydAotI2RlZmluZSBYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyICAgICAgICBja19YNTA5X2dl dF9kZWZhdWx0X2NlcnRfZGlyCi0jZGVmaW5lIFg1MDlfZnJlZSAgICAgICAgICAgICAgICAgICAg ICAgIGNrX1g1MDlfZnJlZQotCi0jZGVmaW5lIFJTQV9mcmVlICAgICAgICAgICAgICAgICAgICAg ICAgIGNrX1JTQV9mcmVlCi0jZGVmaW5lIFJTQV9nZW5lcmF0ZV9rZXkgICAgICAgICAgICAgICAg IGNrX1JTQV9nZW5lcmF0ZV9rZXkKLQotI2RlZmluZSBESF9uZXcgICAgICAgICAgICAgICAgICAg ICAgICAgICBja19ESF9uZXcKLSNkZWZpbmUgREhfZnJlZSAgICAgICAgICAgICAgICAgICAgICAg ICAgY2tfREhfZnJlZQotI2RlZmluZSBESF9nZW5lcmF0ZV9rZXkgICAgICAgICAgICAgICAgICBj a19ESF9nZW5lcmF0ZV9rZXkKLSNkZWZpbmUgREhfZ2VuZXJhdGVfcGFyYW1ldGVycyAgICAgICAg ICAgY2tfREhfZ2VuZXJhdGVfcGFyYW1ldGVycwotCi0jZGVmaW5lIERTQV9mcmVlICAgICAgICAg ICAgICAgICAgICAgICAgIGNrX0RTQV9mcmVlCi0jZGVmaW5lIERTQV9nZW5lcmF0ZV9rZXkgICAg ICAgICAgICAgICAgIGNrX0RTQV9nZW5lcmF0ZV9rZXkKLSNkZWZpbmUgRFNBX2dlbmVyYXRlX3Bh cmFtZXRlcnMgICAgICAgICAgY2tfRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnMKLQotI2RlZmluZSBQ RU1fcmVhZF9iaW9fREhwYXJhbXMgICAgICAgICAgICBja19QRU1fcmVhZF9iaW9fREhwYXJhbXMK LSNkZWZpbmUgQk5fYmluMmJuICAgICAgICAgICAgICAgICAgICAgICAgY2tfQk5fYmluMmJuCi0j ZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ0tfU1NMICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NzeW0uaCBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjc3ltLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGMzNDBjYTMuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja2NzeW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotLyogVGhp cyBmaWxlIGlzIGZvciB1c2Ugd2l0aCBjb21waWxlcnMgdGhhdCBkb24ndCBoYXZlIHRoZSBjYXBh YmlsaXR5IHRvCi0gKiAjZGVmaW5lIHN5bWJvbHMgb24gdGhlIEMgY29tcGlsZXIgY29tbWFuZCBs aW5lLiAgVGhpcyBmaWxlIG11c3QKLSAqIGJlICNpbmNsdWRlJ2QgYmVmb3JlIGFsbCBvdGhlciBj ayouaCBmaWxlcyBzbyB0aGF0IHRoZSBzeW1ib2xzICNkZWZpbmUnZAotICogaGVyZSBjYW4gYmUg dXNlZCBmb3IgYW55IHN1YnNlcXVlbnQgY29uZGl0aW9uYWwgY29kZS4KLSAqLwoKZGlmZiAtLWdp dCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjdGVsLmMgYi9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3RlbC5jCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBlOWYxMjk1Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjdGVsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MDE1ICsw LDAgQEAKLWNoYXIgKmNrdGVsdiA9ICJUZWxuZXQgc3VwcG9ydCwgOS4wLjI3NCwgMTYgTWFyIDIw MTAiOwotI2RlZmluZSBDS0NURUxfQwotCi1pbnQgc3N0ZWxuZXQgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgLyogRG8gc2VydmVyLXNpZGUgVGVsbmV0IG5lZ290aWF0aW9uICovCi0KLS8qICBD IEsgQyBUIEUgTCAgLS0gIFRlbG5ldCBzdXBwb3J0ICAqLwotCi0vKgotICBBdXRob3JzOgotICAg IFRlbG5ldCBwcm90b2NvbCBieSBGcmFuayBkYSBDcnV6IGFuZCBKZWZmcmV5IEFsdG1hbi4KLSAg ICBUZWxuZXQgRm9yd2FyZCBYIGJ5IEplZmZyZXkgQWx0bWFuCi0gICAgVGVsbmV0IFNUQVJUX1RM UyBzdXBwb3J0IGJ5IEplZmZyZXkgQWx0bWFuCi0gICAgVGVsbmV0IEFVVEggYW5kIEVOQ1JZUFQg c3VwcG9ydCBieSBKZWZmcmV5IEFsdG1hbgotICAgIFRlbG5ldCBDT01QT1JUIHN1cHBvcnQgYnkg SmVmZnJleSBBbHRtYW4KLSAgICBUZWxuZXQgTkVXLUVOVklST05NRU5UIHN1cHBvcnQgYnkgSmVm ZnJleSBBbHRtYW4KLSAgICBUZWxuZXQgTkFXUyBzdXBwb3J0IGJ5IEZyYW5rIGRhIENydXogYW5k IEplZmZyZXkgQWx0bWFuCi0gICAgVGVsbmV0IFRFUk1UWVBFIHN1cHBvcnQgYnkgSmVmZnJleSBB bHRtYW4KLSAgICBUZWxuZXQgS0VSTUlUIHN1cHBvcnQgYnkgSmVmZnJleSBBbHRtYW4KLSAgICBP dGhlciBjb250cmlidXRpb25zIGFzIGluZGljYXRlZCBpbiB0aGUgY29kZS4KLQotICBDb3B5cmln aHQgKEMpIDE5ODUsIDIwMTAsCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBp biB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRo ZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGlu IHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotKi8K LQotLyoKLSAgTk9URSBUTyBDT05UUklCVVRPUlM6IFRoaXMgZmlsZSwgYW5kIGFsbCB0aGUgb3Ro ZXIgc2hhcmVkIChja2MgYW5kIGNrdSkKLSAgQy1LZXJtaXQgc291cmNlIGZpbGVzLCBtdXN0IGJl IGNvbXBhdGlibGUgd2l0aCBDIHByZXByb2Nlc3NvcnMgdGhhdCBzdXBwb3J0Ci0gIG9ubHkgI2lm ZGVmLCAjZWxzZSwgI2VuZGlmLCAjZGVmaW5lLCBhbmQgI3VuZGVmLiAgUGxlYXNlIGRvIG5vdCB1 c2UgI2lmLAotICBsb2dpY2FsIG9wZXJhdG9ycywgb3Igb3RoZXIgcHJlcHJvY2Vzc29yIGZlYXR1 cmVzIGluIHRoaXMgbW9kdWxlLiAgQWxzbywKLSAgZG9uJ3QgdXNlIGFueSBBTlNJIEMgY29uc3Ry dWN0cyBleGNlcHQgd2l0aGluICNpZmRlZiBDS19BTlNJQy4uI2VuZGlmLgotKi8KLQotI2luY2x1 ZGUgImNrY3N5bS5oIgotI2luY2x1ZGUgImNrY2RlYi5oIgotCi0jaWZkZWYgVE5DT0RFCi0jaW5j bHVkZSAiY2tja2VyLmgiCi0jZGVmaW5lIFRFTENNRFMgICAgICAgICAgICAgICAgICAgICAgICAg LyogdG8gZGVmaW5lIG5hbWUgYXJyYXkgKi8KLSNkZWZpbmUgVEVMT1BUUyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0byBkZWZpbmUgbmFtZSBhcnJheSAqLwotI2RlZmluZSBTTENfTkFNRVMg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIGRlZmluZSBuYW1lIGFycmF5ICovCi0jZGVmaW5l IEVOQ1JZUFRfTkFNRVMKLSNkZWZpbmUgQVVUSF9OQU1FUwotI2RlZmluZSBURUxPUFRfU1RBVEVT Ci0jZGVmaW5lIFRFTE9QVF9NT0RFUwotI2RlZmluZSBUTkNfTkFNRVMKLSNpbmNsdWRlICJja2Nu ZXQuaCIKLSNpbmNsdWRlICJja2N0ZWwuaCIKLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotI2lu Y2x1ZGUgImNrdWF0aC5oIgotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0jaWZkZWYg Q0tfU1NMCi0jaW5jbHVkZSAiY2tfc3NsLmgiCi0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSNpZm5k ZWYgTk9URVJNCi0jaWZkZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9y IHRlcm1pbmFsIHR5cGUgbmFtZSBzdHJpbmcgKi8KLSNpbmNsdWRlICJja3V1c3IuaCIKLSNpZm5k ZWYgTlQKLSNpbmNsdWRlIDxvczIuaD4KLSN1bmRlZiBDT01NRU5UCi0jZWxzZQotI2RlZmluZSBp c2FzY2lpIF9faXNhc2NpaQotI2VuZGlmIC8qIE5UICovCi0jaW5jbHVkZSAiY2tvY29uLmgiCi1l eHRlcm4gaW50IHR0X3R5cGUsIG1heF90dDsKLWV4dGVybiBzdHJ1Y3QgdHRfaW5mb19yZWMgdHRf aW5mb1tdOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PVEVSTSAqLwotCi0jaWZkZWYg T1MyCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaWZkZWYgTlQKLSNpbmNsdWRlIDxzZXRqbXBleC5o PgotI2Vsc2UgLyogTlQgKi8KLSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNlbmRpZiAvKiBOVCAqLwot I2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgImNrY3NpZy5oIgotI2luY2x1ZGUgImNrb3N5 bi5oIgotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgQ0tfTkFXUyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTmVnb3RpYXRlIEFib3V0IFdpbmRvdyBTaXplICovCi0jaWZkZWYgUkxPR0NP REUKLV9QUk9UT1RZUCggaW50IHJsb2dfbmF3cywgKHZvaWQpICk7Ci0jZW5kaWYgLyogUkxPR0NP REUgKi8KLSNlbmRpZiAvKiBDS19OQVdTICovCi0KLWludCB0bl9pbml0ID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUZWxuZXQgcHJvdG9jb2wgaW5pdGlhbGl6ZWQgZmxhZyAqLwotaW50 IHRuX2JlZ3VuID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbG5ldCBwcm90b2NvbCBz dGFydGVkIGZsYWcgKi8KLXN0YXRpYyBpbnQgdG5fZmlyc3QgPSAxOyAgICAgICAgICAgICAgICAv KiBGaXJzdCB0aW1lIGluaXQgZmxhZyAqLwotZXh0ZXJuIGludCB0bl9leGl0OyAgICAgICAgICAg ICAgICAgICAgIC8qIEV4aXQgb24gZGlzY29ubmVjdCAqLwotZXh0ZXJuIGludCBuZXR0eXBlOwot ZXh0ZXJuIGludCBpbnNlcnZlcjsgICAgICAgICAgICAgICAgICAgIC8qIFJ1bm5pbmcgYXMgSUtT RCAqLwotY2hhciAqdG5fdGVybSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFs IHR5cGUgb3ZlcnJpZGUgKi8KLQotI2lmZGVmIENLX1NORExPQwotY2hhciAqdG5fbG9jID0gTlVM TDsgICAgICAgICAgICAgICAgICAgIC8qIExvY2F0aW9uIG92ZXJyaWRlICovCi0jZW5kaWYgLyog Q0tfU05ETE9DICovCi1pbnQgdG5fbmxtID0gVE5MX0NSTEY7ICAgICAgICAgICAgICAgICAgLyog VGVsbmV0IENSIC0+IENSIExGIG1vZGUgKi8KLWludCB0bl9iX25sbSA9IFROTF9DUjsgICAgICAg ICAgICAgICAgICAvKiBUZWxuZXQgQmluYXJ5IENSIFJBVyBtb2RlICovCi1pbnQgdG5fYl9tZXUg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogVGVsbmV0IEJpbmFyeSBNRSBtZWFucyBVIHRv byAqLwotaW50IHRuX2JfdW1lID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbG5ldCBC aW5hcnkgVSBtZWFucyBNRSB0b28gKi8KLWludCB0bl93YWl0X2ZsZyA9IDE7ICAgICAgICAgICAg ICAgICAgICAvKiBUZWxuZXQgV2FpdCBmb3IgTmVnb3RpYXRpb25zICovCi1pbnQgdG5faW5maW5p dGUgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogVGVsbmV0IEJ1ZyBJbmZpbml0ZS1Mb29wLUNo ZWNrICovCi1pbnQgdG5fcmVtX2VjaG8gPSAxOyAgICAgICAgICAgICAgICAgICAgLyogV2Ugd2ls bCBlY2hvIGlmIFdJTEwgRUNITyAqLwotaW50IHRuX2JfeGZlciA9IDA7ICAgICAgICAgICAgICAg ICAgICAgIC8qIFRlbG5ldCBCaW5hcnkgZm9yIFhmZXJzPyAqLwotaW50IHRuX3NiX2J1ZyA9IDE7 ICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbG5ldCBCVUcgLSBTQiB3L28gV0lMTCBvciBETyAq LwotaW50IHRuX2F1dGhfa3JiNV9kZXNfYnVnID0gMTsgICAgICAgICAgIC8qIFRlbG5ldCBCVUcg LSBBVVRIIEtSQjUgREVTICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogICAgICAgICAgICAgIHRydW5jYXRlcyBsb25nIGtleXMgKi8KLWludCB0bl9ub19lbmNy eXB0X3hmZXIgPSAwOyAgICAgICAgICAgICAvKiBUdXJuIG9mZiBUZWxuZXQgRW5jcnlwdD8gKi8K LWludCB0bl9kZWxheV9zYiA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBTQnMgdW50 aWwgc2FmZSAqLwotaW50IHRuX2F1dGhfaG93ID0gVE5fQVVUSF9IT1dfQU5ZOwotaW50IHRuX2F1 dGhfZW5jID0gVE5fQVVUSF9FTkNfQU5ZOwotaW50IHRuX2RlYiA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFRlbG5ldCBEZWJ1ZyBtb2RlICovCi1pbnQgdG5fc2Z1ID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTWljcm9zb2Z0IFNGVSBjb21wYXRpYmlsaXR5ICovCi0jaWZk ZWYgQ0tfRk9SV0FSRF9YCi1jaGFyICogdG5fZndkeF94YXV0aG9yaXR5ID0gTlVMTDsgICAgICAg LyogWGF1dGhvcml0eSBGaWxlICovCi1pbnQgICAgZndkeF9ub19lbmNyeXB0ID0gMDsgICAgICAg ICAgICAgLyogRm9yd2FyZC1YIHJlcXVpcmVzIGVuY3J5cHRpb24gKi8KLSNlbmRpZiAvKiBDS19G T1JXQVJEX1ggKi8KLQotI2lmZGVmIE9TMgotaW50IHR0bnVtID0gLTE7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIExhc3QgVGVsbmV0IFRlcm1pbmFsIFR5cGUgc2VudCAqLwotaW50IHR0bnVt ZW5kID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBlbmQgb2YgbGlzdCBiZWVuIGZv dW5kICovCi0jZW5kaWYgLyogT1MyICovCi0KLWNoYXIgdG5fbXNnW1ROX01TR19MRU5dOyAgICAg ICAgICAgICAgICAvKiBUZWxuZXQgZGF0YSBjYW4gYmUgcmF0aGVyIGxvbmcgKi8KLWNoYXIgaGV4 YnVmW1ROX01TR19MRU5dOwotY2hhciB0bl9tc2dfb3V0W1ROX01TR19MRU5dOwotI2lmZGVmIENL X0ZPUldBUkRfWAotQ0hBUiBmd2R4X21zZ19vdXRbVE5fTVNHX0xFTl07Ci0jZW5kaWYgLyogQ0tf Rk9SV0FSRF9YICovCi0KLS8qCi0gIEluIG9yZGVyIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgdGVs bmV0IG5lZ290aWF0aW9uIGxvb3Agd2UgbWFpbnRhaW4gYQotICBjb3VudCBvZiB0aGUgbnVtYmVy IG9mIHRpbWVzIHRoZSBzYW1lIHRlbG5ldCBuZWdvdGlhdGlvbiBtZXNzYWdlIGlzCi0gIHNlbnQu IFdoZW4gdGhpcyBjb3VudCBoaXRzIE1BWFROQ05ULCB3ZSBkbyBub3Qgc2VuZCBhbnkgbW9yZSBv ZiB0aGUKLSAgbWVzc2FnZS4gVGhlIGNvdW50IGlzIHN0b3JlZCBpbiB0aGUgdG5jbnRzW11bXSBh cnJheS4KLQotICBUaGUgdG5jbnRzW11bXSBhcnJheSBpcyBpbmRleGVkIGJ5IG5lZ290aWF0aW9u IG9wdGlvbiAoU1VQUFJFU1MgR08gQUhFQUQsCi0gIFRFUk1JTkFMIFRZUEUsIE5BV1MsIGV0Yy4g LSBzZWUgdGhlIHRub3B0c1tdIGFycmF5KSBhbmQgdGhlIGZvdXIKLSAgbmVnb3RpYXRpb24gbWVz c2FnZSB0eXBlcyAoV0lMTCwgV09OVCwgRE8sIERPTlQpLiAgQWxsIHRlbG5ldCBuZWdvdGlhdGlv bnMKLSAgYXJlIGtlcHQgdHJhY2sgb2YgaW4gdGhpcyB3YXkuCi0KLSAgVGhlIGNvdW50IGZvciBh IG1lc3NhZ2UgaXMgemVyb2VkIHdoZW4gdGhlICJvcHBvc2l0ZSIgbWVzc2FnZSBpcyBzZW50Lgot ICBXSUxMIGlzIHRoZSBvcHBvc2l0ZSBvZiBXT05ULCBhbmQgRE8gaXMgdGhlIG9wcG9zaXRlIG9m IERPTlQuCi0gIEZvciBleGFtcGxlIHNlbmRpbmcgIldJTEwgU0dBIiBpbmNyZW1lbnRzIHRuY250 c1tURUxPUFRfU0dBXVswXQotICBhbmQgemVyb2VzIHRuY250c1tURUxPUFRfU0dBXVsxXS4KLQot ICBUaGUgY29kZSB0aGF0IGRvZXMgdGhpcyBpcyBpbiB0bl9zb3B0KCkuCi0KLSAgcm9nZXJzaEBm c2ouY28uanAsIDE4LzMvMTk5NQotCi0gIDgvMTYvMTk5OCAtIHdpdGggdGhlIHJlY2VudCByZXdy aXRlIG9mIHRoZSB0ZWxuZXQgc3RhdGUgbWFjaGluZSBJIGRvbid0Ci0gIHRoaW5rIHRoaXMgY29k ZSBpcyBuZWNlc3NhcnkgYW55bW9yZS4gIEhvd2V2ZXIsIGl0IGNhbid0IGRvIGFueSBoYXJtIHNv Ci0gIEkgYW0gbGVhdmluZyBpdCBpbi4gICAgLSBKZWZmCi0KLSAgMTIvMjgvMTk5OCAtIGFsbCBy ZWZlcmVuY2VzIHRvIHRuY250c1tdIG11c3QgYmUgZG9uZSB3aXRoIFRFTE9QVF9JTkRFWChvcHQp Ci0gIGJlY2F1c2UgdGhlIFRlbG5ldCBvcHRpb24gbGlzdCBpcyBubyBsb25nZXIgY29udGlndW91 cy4gIFdlIGFsc28gbXVzdAotICBhbGxvY2F0ZSBOVEVMT1BUUyArIDEgYmVjYXVzZSB0aGUgVEVM T1BUX0lOREVYKCkgbWFjcm8gcmV0dXJucyBOVEVMT1BUUwotICBmb3IgYW4gaW52YWxpZCBvcHRp b24gbnVtYmVyLgotKi8KLQotI2RlZmluZSBNQVhUTkNOVCA0ICAgICAgLyogUGVybWl0cyA0IGlu dGVybWVkaWF0ZSB0ZWxuZXQgZmlyZXdhbGxzL2dhdGV3YXlzICovCi0KLWNoYXIgdG5jbnRzW05U RUxPUFRTKzFdWzRdOyAgICAgICAgICAgICAvKiBDb3VudHMgKi8KLWNoYXIgdG5vcHBzWzRdID0g eyAxLDAsMywyIH07ICAgICAgICAgICAvKiBPcHBvc2l0ZXMgKi8KLQotI2lmZGVmIENLX0VOVklS T05NRU5UCi0jaWZkZWYgQ0tfRk9SV0FSRF9YCi0jZGVmaW5lIFRTQlVGU0laIDIwNTYKLSNlbHNl IC8qIENLX0ZPUldBUkRfWCAqLwotI2RlZmluZSBUU0JVRlNJWiAxMDI0Ci0jZW5kaWYgLyogQ0tf Rk9SV0FSRF9YICovCi1jaGFyIHRuX2Vudl9hY2N0WzY0XTsKLWNoYXIgdG5fZW52X2Rpc3BbNjRd OwotY2hhciB0bl9lbnZfam9iWzY0XTsKLWNoYXIgdG5fZW52X3BybnRbNjRdOwotY2hhciB0bl9l bnZfc3lzWzY0XTsKLWNoYXIgKiB0bl9lbnZfdXNlcnZhcls4XVsyXTsKLWludCB0bl9lbnZfZmxn ID0gMTsKLSNlbHNlIC8qIENLX0VOVklST05NRU5UICovCi0jZGVmaW5lIFRTQlVGU0laIDQxCi1p bnQgdG5fZW52X2ZsZyA9IDA7Ci0jZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KLQotI2lmZGVm IENPTU1FTlQKLS8qIFNJR1dJTkNIIGhhbmRsZXIgbW92ZWQgdG8gY2t1dXN4LmMgKi8KLSNpZm5k ZWYgTk9TSUdXSU5DSAotI2lmZGVmIENLX05BV1MgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFdpbmRvdyBzaXplIGJ1c2luZXNzICovCi0jaWZkZWYgVU5JWAotI2luY2x1ZGUgPHNpZ25hbC5o PgotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBDS19OQVdTICovCi0jZW5kaWYgLyogTk9T SUdXSU5DSCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotQ0hBUiBzYltUU0JVRlNJWl07ICAg ICAgICAgICAgICAgICAgICAgIC8qIEJ1ZmZlciAtIGluY29taW5nIHN1Ym5lZ290aWF0aW9ucyAq LwotQ0hBUiBzYl9vdXRbVFNCVUZTSVpdOyAgICAgICAgICAgICAgICAgIC8qIEJ1ZmZlciAtIG91 dGdvaW5nIHN1Ym5lZ290aWF0aW9ucyAqLwotCi1pbnQgdG5fZHVwbGV4ID0gMTsgICAgICAgICAg ICAgICAgICAgICAgLyogTG9jYWwgZWNobyAqLwotCi1leHRlcm4gY2hhciB1aWRidWZbXTsgICAg ICAgICAgICAgICAgICAgLyogVXNlciBJRCBidWZmZXIgKi8KLWV4dGVybiBpbnQgcXVpZXQsIHR0 bmV0LCB0dG5wcm90bywgZGVic2VzLCB3aGF0LCBkdXBsZXgsIG9sZHBsZXgsIGxvY2FsOwotZXh0 ZXJuIGludCBzZXNsb2csIHNlc3NmdCwgd2h5Y2xvc2VkOwotI2lmZGVmIE9TMgotI2lmbmRlZiBO T1RFUk0KLWV4dGVybiBpbnQgdHRfcm93c1tdLCB0dF9jb2xzW107Ci1leHRlcm4gaW50IHR0X3N0 YXR1c1tWTlVNXTsKLWV4dGVybiBpbnQgc2NybmluaXRpYWxpemVkW107Ci0jZW5kaWYgLyogTk9U RVJNICovCi0jZWxzZSAvKiBPUzIgKi8KLWV4dGVybiBpbnQgdHRfcm93cywgdHRfY29sczsgICAg ICAgICAgICAvKiBFdmVyeWJvZHkgaGFzIHRoaXMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLWV4dGVy biBpbnQgY21kX2NvbHMsIGNtZF9yb3dzOwotZXh0ZXJuIGNoYXIgbmFtZWNvcHlbXTsKLWV4dGVy biBjaGFyIG15aXBhZGRyW107ICAgICAgICAgICAgIC8qIEdsb2JhbCBjb3B5IG9mIG15IElQIGFk ZHJlc3MgKi8KLQotI2lmbmRlZiBURUxPUFRfTUFDUk8KLWludAotdGVsb3B0X2luZGV4KG9wdCkg aW50IG9wdDsgewotICAgIGlmIChvcHQgPj0gMCAmJiBvcHQgPD0gVEVMT1BUX1NUREVSUikKLSAg ICAgIHJldHVybihvcHQpOwotICAgIGVsc2UgaWYgKG9wdCA+PSBURUxPUFRfUFJBR01BX0xPR09O ICYmIG9wdCA8PSBURUxPUFRfUFJBR01BX0hFQVJUQkVBVCkKLSAgICAgIHJldHVybihvcHQtODgp OwotICAgIGVsc2UgaWYgKG9wdCA9PSBURUxPUFRfSUJNX1NBSykKLSAgICAgIHJldHVybihvcHQt MTQ3KTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oTlRFTE9QVFMpOwotfQotCi1pbnQKLXRlbG9w dF9vayhvcHQpIGludCBvcHQ7IHsKLSAgICByZXR1cm4oKG9wdCA+PSBURUxPUFRfQklOQVJZICYm IG9wdCA8PSBURUxPUFRfU1RERVJSKSB8fAotICAgICAgICAgICAob3B0ID49IFRFTE9QVF9QUkFH TUFfTE9HT04gJiYgb3B0IDw9IFRFTE9QVF9QUkFHTUFfSEVBUlRCRUFUKSB8fAotICAgICAgICAg ICAob3B0ID09IFRFTE9QVF9JQk1fU0FLKSk7Ci19Ci0KLUNIQVIgKgotdGVsb3B0KG9wdCkgaW50 IG9wdDsgewotICAgIGlmICh0ZWxvcHRfb2sob3B0KSkKLSAgICAgIHJldHVybigoQ0hBUiAqKXRl bG9wdHNbdGVsb3B0X2luZGV4KG9wdCldKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oKENIQVIg KikiVU5LTk9XTiIpOwotfQotCi1pbnQKLXRlbG9wdF9tb2RlX29rKG9wdCkgaW50IG9wdDsgewot ICAgIHJldHVybigodW5zaWduZWQgaW50KShvcHQpIDw9IFROX05HX01VKTsKLX0KLQotQ0hBUiAq Ci10ZWxvcHRfbW9kZShvcHQpIGludCBvcHQ7IHsKLSAgICBpZiAodGVsb3B0X21vZGVfb2sob3B0 KSkKLSAgICAgIHJldHVybigoQ0hBUiAqKXRlbG9wdF9tb2Rlc1tvcHQtVE5fTkdfUkZdKTsKLSAg ICBlbHNlCi0gICAgICByZXR1cm4oKENIQVIgKikiVU5LTk9XTiIpOwotfQotI2VuZGlmIC8qIFRF TE9QVF9NQUNSTyAqLwotCi1zdGF0aWMgaW50Ci10bl9vdXRzdChub3RxdWlldCkgaW50IG5vdHF1 aWV0OyB7Ci0gICAgaW50IG91dHN0YW5kaW5nID0gMDsKLSAgICBpbnQgeCA9IDA7Ci0jaWZkZWYg Q0tfRU5DUllQVElPTgotICAgIGludCBlID0gMDsKLSAgICBpbnQgZCA9IDA7Ci0jZW5kaWYgLyog Q0tfRU5DUllQVElPTiAqLwotCi0gICAgaWYgKHRuX3dhaXRfZmxnKSB7Ci0gICAgICAgIGZvciAo eCA9IFRFTE9QVF9GSVJTVDsgeCA8PSBURUxPUFRfTEFTVDsgeCsrKSB7Ci0gICAgICAgICAgICBp ZiAoVEVMT1BUX09LKHgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVE X1dJTEwoeCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBub3RxdWlldCApCi0gICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIHJlc3BvbnNlIHRvIFdJ TEwgJXNcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKHgpKTsKLSAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwidG5fb3V0c3QiLCJ1bmFuc3dlcmVkIFdJTEwi LHgpOwotICAgICAgICAgICAgICAgICAgICBvdXRzdGFuZGluZyA9IDE7Ci0gICAgICAgICAgICAg ICAgICAgIGlmICggIW5vdHF1aWV0ICkKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RP KHgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggbm90cXVpZXQgKQotICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiP1RlbG5ldCB3YWl0aW5nIGZvciByZXNwb25zZSB0byBETyAlc1xy XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFQoeCkpOwotICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9vdXRzdCIsInVuYW5zd2VyZWQgRE8iLHgpOwotICAg ICAgICAgICAgICAgICAgICBvdXRzdGFuZGluZyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGlm ICggIW5vdHF1aWV0ICkKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQoeCkpIHsK LSAgICAgICAgICAgICAgICAgICAgaWYgKCBub3RxdWlldCApCi0gICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIHJlc3BvbnNlIHRvIFdPTlQgJXNcclxuIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKHgpKTsKLSAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjExMSwidG5fb3V0c3QiLCJ1bmFuc3dlcmVkIFdPTlQiLHgpOwotICAgICAg ICAgICAgICAgICAgICBvdXRzdGFuZGluZyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgg IW5vdHF1aWV0ICkKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQoeCkpIHsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKCBub3RxdWlldCApCi0gICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIHJlc3BvbnNlIHRvIERPTlQgJXNcclxuIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKHgpKTsKLSAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjExMSwidG5fb3V0c3QiLCJ1bmFuc3dlcmVkIERPTlQiLHgpOwotICAgICAgICAg ICAgICAgICAgICBvdXRzdGFuZGluZyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggIW5v dHF1aWV0ICkKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1NCKHgpKSB7Ci0gICAgICAg ICAgICAgICAgICAgIGlmICggbm90cXVpZXQgKQotICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiP1RlbG5ldCB3YWl0aW5nIGZvciByZXNwb25zZSB0byBTQiAlc1xyXG4iLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBURUxPUFQoeCkpOwotICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJ0bl9vdXRzdCIsInVuYW5zd2VyZWQgU0IiLHgpOwotICAgICAgICAgICAgICAgICAg ICBvdXRzdGFuZGluZyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggIW5vdHF1aWV0ICkK LSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgICAgICBpZiAo Y2tfdG5fYXV0aF9pbl9wcm9ncmVzcygpKSB7Ci0gICAgICAgICAgICBpZiAoVEVMT1BUX01FKFRF TE9QVF9BVVRIRU5USUNBVElPTikpIHsKLSAgICAgICAgICAgICAgICBpZiAobm90cXVpZXQpCi0g ICAgICAgICAgICAgICAgICBwcmludGYoIj9UZWxuZXQgd2FpdGluZyBmb3IgV0lMTCAlcyBzdWJu ZWdvdGlhdGlvblxyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRf QVVUSEVOVElDQVRJT04pKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAg ICAgICAgICAgICAgICJ0bl9vdXRzdCIsCi0gICAgICAgICAgICAgICAgICAgICAgIk1FIGF1dGhl bnRpY2F0aW9uIGluIHByb2dyZXNzIiwKLSAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfQVVU SEVOVElDQVRJT04KLSAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIG91 dHN0YW5kaW5nID0gMTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoVEVMT1BUX1UoVEVMT1BUX0FV VEhFTlRJQ0FUSU9OKSkgewotICAgICAgICAgICAgICAgIGlmIChub3RxdWlldCkKLSAgICAgICAg ICAgICAgICAgIHByaW50ZigiP1RlbG5ldCB3YWl0aW5nIGZvciBETyAlcyBzdWJuZWdvdGlhdGlv blxyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfQVVUSEVOVElD QVRJT04pKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAgICAgICAgICAg ICAgICJ0bl9vdXRzdCIsCi0gICAgICAgICAgICAgICAgICAgICAgIlUgYXV0aGVudGljYXRpb24g aW4gcHJvZ3Jlc3MiLAotICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9BVVRIRU5USUNBVElP TgotICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgb3V0c3RhbmRpbmcg PSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJ T04gKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgIGlmICghb3V0c3RhbmRpbmcpIHsK LSAgICAgICAgICAgIGUgPSBja190bl9lbmNyeXB0aW5nKCk7Ci0gICAgICAgICAgICBkID0gY2tf dG5fZGVjcnlwdGluZygpOwotICAgICAgICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfRU5DUllQ VElPTikpIHsKLSAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9O KS5lbmNyeXB0LnN0b3AgJiYgZSB8fAotICAgICAgICAgICAgICAgICAgICAhVEVMT1BUX1NCKFRF TE9QVF9FTkNSWVBUSU9OKS5lbmNyeXB0LnN0b3AgJiYgIWUKLSAgICAgICAgICAgICAgICAgICAg KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggbm90cXVpZXQgKQotICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiP1RlbG5ldCB3YWl0aW5nIGZvciBXSUxMICVzIHN1Ym5lZ290aWF0aW9u XHJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfRU5DUllQ VElPTikpOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAidG5fb3V0c3QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5jcnlw dGlvbiBtb2RlIHN3aXRjaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9FTkNS WVBUSU9OCi0gICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAg IG91dHN0YW5kaW5nID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKSB7Ci0gICAgICAgICAgICAg ICAgaWYgKFRFTE9QVF9TQihURUxPUFRfRU5DUllQVElPTikuZW5jcnlwdC5zdG9wICYmIGQgfHwK LSAgICAgICAgICAgICAgICAgICAgIVRFTE9QVF9TQihURUxPUFRfRU5DUllQVElPTikuZW5jcnlw dC5zdG9wICYmICFkCi0gICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAg ICBpZiAoIG5vdHF1aWV0ICkKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9UZWxuZXQg d2FpdGluZyBmb3IgRE8gJXMgc3VibmVnb3RpYXRpb25cclxuIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9FTkNSWVBUSU9OKSk7Ci0gICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJ0bl9vdXRzdCIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICJkZWNyeXB0aW9uIG1vZGUgc3dpdGNoIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsKLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCi0gICAgfSAvKiBpZiAodG5fd2FpdF9mbGcpICovCi0KLSNpZmRlZiBJS1NfT1BU SU9OCi0gICAgLyogRXZlbiBpZiB3ZSBhcmUgbm90IHdhaXRpbmcgZm9yIFRlbG5ldCBvcHRpb25z IHdlIG11c3Qgd2FpdCBmb3IgKi8KLSAgICAvKiBLZXJtaXQgVGVsbmV0IFN1Ym5lZ290aWF0aW9u cyBpZiB3ZSBoYXZlIHNlbnQgYSByZXF1ZXN0IHRvIHRoZSAqLwotICAgIC8qIG90aGVyIGd1eS4g IE90aGVyd2lzZSB3ZSB3aWxsIGdldCBvdXQgb2Ygc3luYy4gICAgICAgICAgICAgICAgICovCi0g ICAgaWYgKCFvdXRzdGFuZGluZykgewotICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0tFUk1J VCkgJiYKLSAgICAgICAgICAgIChURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3Jl cV9zdGFydCB8fAotICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQu bWVfcmVxX3N0b3AgfHwKLSAgICAgICAgICAgICAhVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtl cm1pdC5zb3ApCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgIGlmICggbm90cXVpZXQgKQot ICAgICAgICAgICAgICBwcmludGYoIj9UZWxuZXQgd2FpdGluZyBmb3IgU0IgJXMgbmVnb3RpYXRp b25cclxuIiwKLSAgICAgICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfS0VSTUlUKSk7Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9vdXRzdCIsIlUga2VybWl0IGluIHByb2dyZXNzIixU RUxPUFRfS0VSTUlUKTsKLSAgICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsKLSAgICAgICAgfQot ICAgIH0KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0KLSNpZmRlZiBUTl9DT01QT1JUCi0gICAg aWYgKCFvdXRzdGFuZGluZykgewotICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9DT01QT1JU KSkgewotICAgICAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53 YWl0X2Zvcl9zYikgewotICAgICAgICAgICAgICAgIGlmIChub3RxdWlldCkKLSAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIFNCICVzIG5lZ290aWF0aW9uXHJc biIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9DT01QT1JUKSk7 Ci0gICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9vdXRzdCIsIkNvbVBvcnQgU0IgaW4gcHJv Z3Jlc3MiLFRFTE9QVF9DT01QT1JUKTsKLSAgICAgICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQp LmNvbXBvcnQud2FpdF9mb3JfbXMpIHsKLSAgICAgICAgICAgICAgICBpZiAobm90cXVpZXQpCi0g ICAgICAgICAgICAgIHByaW50ZigiP1RlbG5ldCB3YWl0aW5nIGZvciBTQiAlcyBNT0RFTV9TVEFU VVMgbmVnb3RpYXRpb25cclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFQo VEVMT1BUX0NPTVBPUlQpKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuX291dHN0IiwiQ29t UG9ydCBTQiBNUyBpbiBwcm9ncmVzcyIsVEVMT1BUX0NPTVBPUlQpOwotICAgICAgICAgICAgICAg b3V0c3RhbmRpbmcgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotI2VuZGlm IC8qIFROX0NPTVBPUlQgKi8KLSAgICByZXR1cm4ob3V0c3RhbmRpbmcpOwotfQotCi1pbnQKLWlz dG5jb21wb3J0KCkgewotI2lmZGVmIFROX0NPTVBPUlQKLSAgICBpZiAoIWxvY2FsKSByZXR1cm4o MCk7Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7Ci0gICAgaWYgKHR0bnBy b3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0NP TVBPUlQpKQotICAgICAgcmV0dXJuKDEpOwotICAgIGVsc2UKLSNlbmRpZiAvKiBUTl9DT01QT1JU ICovCi0gICAgICByZXR1cm4oMCk7Ci19Ci0KLS8qIHRuX3dhaXQoKSAtLSBXYWl0IGZvciByZXNw b25zZSB0byBUZWxuZXQgbmVnb3RpYXRpb24uICovCi0vKgotICBXYWl0IGZvciB1cCB0byA8dGlt ZW91dD4gc2Vjb25kcyBmb3IgdGhlIHJlc3BvbnNlIHRvIGFycml2ZS4KLSAgUGxhY2UgYWxsIG5v bi10ZWxuZXQgZGF0YSBpbnRvIFRlbG5ldCBXYWl0IEJ1ZmZlci4KLSAgSWYgcmVzcG9uc2UgZG9l cyBhcnJpdmUgcmV0dXJuIDEsIGVsc2UgcmV0dXJuIDAuCi0qLwotI2lmbmRlZiBUTl9XQUlUX0JV Rl9TWgotI2RlZmluZSBUTl9XQUlUX0JVRl9TWiA0MDk2Ci0jZW5kaWYgLyogVE5fV0FJVF9CVUZf U1ogKi8KLXN0YXRpYyBjaGFyIHRuX3dhaXRfYnVmW1ROX1dBSVRfQlVGX1NaXTsKLXN0YXRpYyBp bnQgIHRuX3dhaXRfaWR4ID0gMDsKLSNpZm5kZWYgVE5fVElNRU9VVAotI2RlZmluZSBUTl9USU1F T1VUIDEyMAotI2VuZGlmIC8qIFROX1RJTUVPVVQgKi8KLXN0YXRpYyBpbnQgdG5fd2FpdF90bW8g PSBUTl9USU1FT1VUOwotCi0jaWZkZWYgQ0tTUElOTkVSCi1WT0lECi1wcnR3YWl0KHN0YXRlKSBp bnQgc3RhdGU7IHsKLSAgICBzd2l0Y2ggKHN0YXRlICUgNCkgewotICAgICAgY2FzZSAwOgotICAg ICAgICBwcmludGYoIi8iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDE6Ci0gICAgICAg IHByaW50ZigiLSIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMjoKLSAgICAgICAgcHJp bnRmKCJcXCIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMzoKLSAgICAgICAgcHJpbnRm KCJ8Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLSNlbmRpZiAvKiBDS1NQSU5ORVIgKi8K LQotc3RhdGljIGludCBuZmxhZyA9IDA7Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bl93YWl0 KGNoYXIgKiB3aGVyZSkKLSNlbHNlCi10bl93YWl0KHdoZXJlKSBjaGFyICogd2hlcmU7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuX3dhaXQgKi8gewotICAgIGV4dGVybiBpbnQgY2t4ZWNo LCBsb2NhbDsKLSAgICBpbnQgY2ggPSAwLCBjb3VudCA9IDA7Ci0jaWZuZGVmIE5PSElOVFMKLSAg ICBpbnQgbm9oaW50Z2l2ZW4gPSAxOwotICAgIGV4dGVybiBpbnQgaGludHM7Ci0jZW5kaWYgLyog Tk9ISU5UUyAqLwotICAgIGludCBvdXRzdGFuZGluZzsKLSNpZmRlZiBUTl9DT01QT1JUCi0gICAg aW50IHNhdmNhcnI7Ci0gICAgZXh0ZXJuIGludCB0dGNhcnI7Ci0jZW5kaWYgLyogVE5fQ09NUE9S VCAqLwotCi0gICAgLyogaWYgKCFJU19URUxORVQoKSkgcmV0dXJuKDEpOyAqLwotCi0gICAgcnRp bWVyKCk7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJ0bl93YWl0IHdhaXRpbmcgZm9yIix3aGVyZSwwKTsK LSAgICB0bl93YWl0X3RtbyA9IFROX1RJTUVPVVQ7Ci0gICAgZGVidWcoRjExMSwidG5fd2FpdCIs InRpbWVvdXQiLHRuX3dhaXRfdG1vKTsKLSAgICBvdXRzdGFuZGluZyA9IHRuX291dHN0KDApOwot ICAgIGRlYnVnKEYxMTEsInRuX3dhaXQiLCJvdXRzdGFuZGluZyIsb3V0c3RhbmRpbmcpOwotICAg IGRlYnVnKEYxMTEsInRuX3dhaXQiLCJ0bl93YWl0X2ZsZyIsdG5fd2FpdF9mbGcpOwotCi0gICAg LyogVGhlIGZvbGxvd2luZyBpcyBtZWFudCB0byBiZSAhKHx8KS4gIFdlIG9ubHkgd2FudCB0byBy ZXR1cm4gKi8KLSAgICAvKiBpbW1lZGlhdGVseSBpZiBib3RoIHRoZSB0bl93YWl0X2ZsZyAmJiB0 bl9vdXRzdCgpIGFyZSBmYWxzZSAqLwotICAgIGlmICghKG91dHN0YW5kaW5nIHx8IHRuX3dhaXRf ZmxnKSkgIC8qIElmIG5vIG5lZWQgdG8gd2FpdCAqLwotICAgICAgcmV0dXJuKDEpOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIERvbid0LiAqLwotCi0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp IHRuX2RlYnVnKCI8d2FpdCBmb3Igb3V0c3RhbmRpbmcgbmVnb3RpYXRpb25zPiIpOwotCi0jaWZk ZWYgQ0tTUElOTkVSCi0gICAgaWYgKCFzc3RlbG5ldCAmJiAhcXVpZXQpCi0gICAgICAgIHBydHdh aXQoMCk7Ci0jZW5kaWYgLyogQ0tTUElOTkVSICovCi0KLSAgICAvKiBXYWl0IHVwIHRvIFROX1RJ TUVPVVQgc2VjIGZvciByZXNwb25zZXMgdG8gb3V0c3RhbmRpbmcgdGVsbmV0IG5lZ3MgKi8KLSAg ICBkbyB7Ci0jaWZkZWYgTlRTSUcKLSAgICAgICAgY2tfaWgoKTsKLSNlbmRpZiAvKiBOVFNJRyAq LwotICAgICAgICBjaCA9IHR0aW5jKDEpOwotICAgICAgICBpZiAoY2ggPT0gLTEpIHsgICAgICAg ICAgICAgICAgIC8qIFRpbWVkIG91dCAqLwotICAgICAgICAgICAgaWYgKCFzc3RlbG5ldCAmJiAh cXVpZXQpIHsgIC8qIExldCB1c2VyIGtub3cuLi4gKi8KLSNpZmRlZiBDS1NQSU5ORVIKLSAgICAg ICAgICAgICAgICBwcmludGYoIlxiIik7Ci0gICAgICAgICAgICAgICAgcHJ0d2FpdChndGltZXIo KSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGlmIChuZmxhZyA9PSAwKSB7Ci0gICAgICAgICAg ICAgICAgICAgIHByaW50ZigiIE5lZ290aWF0aW9ucy4iKTsKLSAgICAgICAgICAgICAgICAgICAg bmZsYWcrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG5mbGFnID4g MCkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIi4iKTsKLSAgICAgICAgICAgICAgICAg ICAgbmZsYWcrKzsKLSAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgICAg ICAgICAgICAgfQotI2VuZGlmIC8qIENLU1BJTk5FUiAqLwotICAgICAgICAgICAgfQotICAgICAg ICB9IGVsc2UgaWYgKGNoIDwgLTEpIHsKLSAgICAgICAgICAgIHByaW50ZigiXHJcbj9Db25uZWN0 aW9uIGNsb3NlZCBieSBwZWVyLlxyXG4iKTsKLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKSB0bl9kZWJ1ZygiPGNvbm5lY3Rpb24gY2xvc2VkIGJ5IHBlZXI+Iik7Ci0gICAgICAgICAg ICByZXR1cm4oLTEpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgc3dpdGNoIChjaCkgewotICAg ICAgICAgIGNhc2UgSUFDOgotI2lmZGVmIENLU1BJTk5FUgotICAgICAgICAgICAgaWYgKCFzc3Rl bG5ldCAmJiAhcXVpZXQpCi0gICAgICAgICAgICAgIHByaW50ZigiXGIiKTsKLSNlbmRpZiAvKiBD S1NQSU5ORVIgKi8KLSAgICAgICAgICAgIGNoID0gdG5fZG9vcCgoQ0hBUikoY2ggJiAweGZmKSxp bnNlcnZlcj9ja3hlY2g6ZHVwbGV4LHR0aW5jKTsKLSNpZmRlZiBDS1NQSU5ORVIKLSAgICAgICAg ICAgIGlmICghc3N0ZWxuZXQgJiYgIXF1aWV0KSB7Ci0gICAgICAgICAgICAgICAgcHJ0d2FpdChn dGltZXIoKSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTUElOTkVSICovCi0gICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJ0bl93YWl0IHRuX2Rvb3AiLCIiLGNoKTsKLSAgICAgICAgICAgIHN3 aXRjaCAoY2gpIHsKLSAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIGR1cGxl eCA9IDE7ICAgICAgICAgICAgIC8qIFR1cm4gb24gZWNob2luZyAqLwotICAgICAgICAgICAgICAg IGlmIChpbnNlcnZlcikKLSAgICAgICAgICAgICAgICAgIGNreGVjaCA9IDE7Ci0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICBkdXBs ZXggPSAwOyAgICAgICAgICAgICAvKiBUdXJuIG9mZiBlY2hvaW5nICovCi0gICAgICAgICAgICAg ICAgaWYgKGluc2VydmVyKQotICAgICAgICAgICAgICAgICAgY2t4ZWNoID0gMDsKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIHRu X3dhaXRfYnVmW3RuX3dhaXRfaWR4KytdID0gSUFDOwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgICAgIC8qIElLUyBldmVudCAqLwot ICAgICAgICAgICAgICBjYXNlIDY6ICAgICAgICAgICAgICAgICAgIC8qIExvZ291dCAqLwotICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIC0xOgotCQlpZiAoIXF1aWV0 KQotICAgICAgICAgICAgICAgIHByaW50ZigiP1RlbG5ldCBPcHRpb24gbmVnb3RpYXRpb24gZXJy b3IuXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAgICAg ICAgICAgICAgIHRuX2RlYnVnKCI8VGVsbmV0IE9wdGlvbiBuZWdvdGlhdGlvbiBlcnJvcj4iKTsK LSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICBjYXNlIC0yOgotICAg ICAgICAgICAgICAgIHByaW50ZigiP0Nvbm5lY3Rpb24gY2xvc2VkIGJ5IHBlZXIuXG4iKTsKLSAg ICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcoIjxDb25uZWN0aW9u IGNsb3NlZCBieSBwZWVyPiIpOwotCQl0dGNsb3MoMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu KC0yKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2ggPCAw KSB7Ci0gICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcoIjxV bmtub3duIGNvbm5lY3Rpb24gZXJyb3I+Iik7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oY2gp OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gLyogc3dpdGNoICovCi0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotI2lmZGVmIENLU1BJTk5FUgotICAgICAg ICAgICAgaWYgKCFzc3RlbG5ldCAmJiAhcXVpZXQpIHsKLSAgICAgICAgICAgICAgICBwcmludGYo IlxiIik7Ci0gICAgICAgICAgICAgICAgcHJ0d2FpdChndGltZXIoKSk7Ci0gICAgICAgICAgICB9 Ci0jZW5kaWYgLyogQ0tTUElOTkVSICovCi0gICAgICAgICAgICB0bl93YWl0X2J1Zlt0bl93YWl0 X2lkeCsrXSA9IChDSEFSKShjaCAmIDB4ZmYpOwotICAgICAgICB9IC8qIHN3aXRjaCAqLwotCi0g ICAgICAgIG91dHN0YW5kaW5nID0gdG5fb3V0c3QoMCk7Ci0KLSAgICAgICAgaWYgKCBvdXRzdGFu ZGluZyAmJiBjaCAhPSBJQUMgKSB7Ci0gICAgICAgICAgICBpbnQgdGltZXIgPSBndGltZXIoKTsK LSAgICAgICAgICAgIGlmICggdGltZXIgPiB0bl93YWl0X3RtbyApIHsKLSAgICAgICAgICAgICAg ICBpZiAoIXNzdGVsbmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigKLSAgICAgICAg ICAgICAgICAgICAgIlxyXG4/VGVsbmV0IFByb3RvY29sIFRpbWVvdXQgLSBjb25uZWN0aW9uIGNs b3NlZFxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0g ICAgICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygKLSAgICAgICAgICAgICAgICAgICAgICAg ICI8dGVsbmV0IHByb3RvY29sIHRpbWVvdXQgLSBjb25uZWN0aW9uIGNsb3NlZD4iKTsKLSAgICAg ICAgICAgICAgICAgICAgdG5fb3V0c3QoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIC8qIGlmIHdlIGRvIG5vdCBjbG9zZSB0aGUgY29ubmVjdGlvbiwgdGhlbiB3ZSB3aWxs IGJsb2NrICovCi0gICAgICAgICAgICAgICAgLyogdGhlIG5leHQgdGltZSB3ZSBoaXQgYSB3YWl0 LiAgYW5kIGlmIHdlIGRvbid0IHdlIHdpbGwgKi8KLSAgICAgICAgICAgICAgICAvKiBkbyB0aGUg d3JvbmcgdGhpbmcgaWYgdGhlIGhvc3Qgc2VuZHMgMHhGRiBhbmQgZG9lcyAgICAqLwotICAgICAg ICAgICAgICAgIC8qIG5vdCBpbnRlbmQgaXQgdG8gYmUgYW4gSUFDLiAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgdHRjbG9zKDApOwotICAgICAgICAgICAgICAg IHdoeWNsb3NlZCA9IFdDX1RFTE9QVDsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAg ICAgICAgICAgfQotI2lmbmRlZiBOT0hJTlRTCi0gICAgICAgICAgICBlbHNlIGlmICggaGludHMg JiYgdGltZXIgPiAzMCAmJiBub2hpbnRnaXZlbiAmJiAhaW5zZXJ2ZXIgKSB7Ci0jaWZkZWYgQ0tT UElOTkVSCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXGIiKTsKLSNl bHNlIC8qIENLU1BJTk5FUiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIlxyXG4iKTsKLSNlbmRpZiAvKiBDS1NQSU5ORVIgKi8KLSAgICAgIHByaW50ZigiKioqKioq KioqKioqKioqKioqKioqKioqKlxyXG4iKTsKLSAgICAgICAgcHJpbnRmKCJUaGUgVGVsbmV0ICVz IGlzIG5vdCBzZW5kaW5nIHJlcXVpcmVkIHJlc3BvbnNlcy5cclxuXHJcbiIsCi0gICAgICAgICAg ICAgICAgc3N0ZWxuZXQ/ImNsaWVudCI6InNlcnZlciIpOwotICAgICAgdG5fb3V0c3QoMSk7Ci0g ICAgICBwcmludGYoIlxuWW91IGNhbiBjb250aW51ZSB0byB3YWl0IG9yIHlvdSBjYW4gY2FuY2Vs IHdpdGggQ3RybC1DLlxyXG4iKTsKLSAgICAgIHByaW50ZigiSW4gY2FzZSB0aGUgVGVsbmV0IHNl cnZlciBuZXZlciByZXNwb25kcyBhcyByZXF1aXJlZCxcclxuIik7Ci0gICAgICBwcmludGYoInlv dSBjYW4gdHJ5IGNvbm5lY3RpbmcgdG8gdGhpcyBob3N0IHdpdGggVEVMTkVUIC9OT1dBSVQuXHJc biIpOwotICAgICAgcHJpbnRmKCJVc2UgU0VUIEhJTlRTIE9GRiB0byBzdXBwcmVzcyBmdXJ0aGVy IGhpbnRzLlxyXG4iKTsKLSAgICAgIHByaW50ZigiKioqKioqKioqKioqKioqKioqKioqKioqKlxy XG4iKTsKLSAgICAgIG5vaGludGdpdmVuID0gMDsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBO T0hJTlRTICovCi0gICAgICAgIH0KLQotI2lmZGVmIFROX0NPTVBPUlQKLSAgICAgICAgLyogTXVz dCBkaXNhYmxlIGNhcnJpZXIgZGV0ZWN0IGNoZWNrIGlmIHdlIGFyZSB1c2luZyBUZWxuZXQgQ29t cG9ydCAqLwotICAgICAgICBzYXZjYXJyID0gdHRjYXJyOwotICAgICAgICB0dHNjYXJyKENBUl9P RkYpOwotICAgICAgICBjb3VudCA9IHR0Y2hrKCk7Ci0gICAgICAgIHR0c2NhcnIoc2F2Y2Fycik7 Ci0jZWxzZSAvKiBUTl9DT01QT1JUICovCi0gICAgICAgIGNvdW50ID0gdHRjaGsoKTsKLSNlbmRp ZiAvKiBUTl9DT01QT1JUICovCi0gICAgfSB3aGlsZSAoKHRuX3dhaXRfaWR4IDwgVE5fV0FJVF9C VUZfU1opICYmCi0gICAgICAgICAgICAgKG91dHN0YW5kaW5nICYmIGNvdW50ID49IDApKTsKLQot ICAgIGlmICh0bl93YWl0X2lkeCA9PSBUTl9XQUlUX0JVRl9TWikgewotICAgICAgaWYgKHRuX2Rl YiB8fCBkZWJzZXMpIHRuX2RlYnVnKCI8VGVsbmV0IFdhaXQgQnVmZmVyIGZpbGxlZD4iKTsKLSAg ICAgIHJldHVybigwKTsKLSAgICB9Ci0KLSAgICBpZiAoIXNzdGVsbmV0ICYmICFxdWlldCkgewot I2lmZGVmIENLU1BJTk5FUgotICAgICAgICBwcmludGYoIlxiIFxiIik7Ci0jZWxzZQotICAgICAg ICBpZiAobmZsYWcgPiAwKSB7Ci0gICAgICAgICAgICBwcmludGYoIiAoT0spXG4iKTsKLSAgICAg ICAgICAgIG5mbGFnID0gLTE7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS1NQSU5ORVIgKi8KLSAg ICB9Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKCI8bm8gb3V0c3RhbmRpbmcg bmVnb3RpYXRpb25zPiIpOwotICAgIHJldHVybigwKTsKLX0KLQotLyogUHVzaCBkYXRhIGZyb20g dGhlIFRlbG5ldCBXYWl0IEJ1ZmZlciBpbnRvIHRoZSBJL08gUXVldWUgKi8KLS8qIFJldHVybiAx IG9uIHN1Y2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLWlu dAotdG5fcHVzaCgpIHsKLSNpZmRlZiBORVRMRUJVRgotICAgIGV4dGVybiBpbnQgdHRfcHVzaF9p bml0ZWQ7Ci0jZW5kaWYgLyogTkVUTEVCVUYgKi8KLSAgICAvKiBpZiAoIUlTX1RFTE5FVCgpKSBy ZXR1cm4oMSk7ICovCi0KLSAgICBpZiAodG5fd2FpdF9pZHgpIHsKLSAgICAgICAgY2toZXhkdW1w KChDSEFSICopInRuX3B1c2giLHRuX3dhaXRfYnVmLHRuX3dhaXRfaWR4KTsKLSNpZmRlZiBORVRM RUJVRgotICAgICAgICBpZiAoIXR0X3B1c2hfaW5pdGVkKSAgICAgICAgICAgIC8qIExvY2FsIGhh bmRsaW5nICovCi0gICAgICAgICAgbGVfaW5pdCgpOwotICAgICAgICBsZV9wdXRzKChDSEFSICop dG5fd2FpdF9idWYsdG5fd2FpdF9pZHgpOwotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEV4dGVybmFsIGhhbmRsaW5nLi4uICovCi0jaWZkZWYgT1MyICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogSzk1IGhhcyBpdHMgb3duIHdheSAqLwotICAgICAgICBs ZV9wdXRzKChDSEFSICopdG5fd2FpdF9idWYsdG5fd2FpdF9pZHgpOwotI2Vsc2UKLSNpZmRlZiBU VExFQlVGICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVTklYLCBldGMgKi8KLSAgICAgICAg bGVfcHV0cygoQ0hBUiAqKXRuX3dhaXRfYnVmLHRuX3dhaXRfaWR4KTsKLSNlbHNlCi0vKgotICBJ ZiB5b3Ugc2VlIHRoaXMgbWVzc2FnZSBpbiBBT1MvVlMsIE9TLTksIFZPUywgZXRjLCB5b3UgbmVl ZCB0byBjb3B5Ci0gIHRoZSAjaWZkZWYgVFRMRUJVRi4uI2VuZGlmIGNvZGUgZnJvbSBja3V0aW8u YyB0byB0aGUgY29ycmVzcG9uZGluZwotICBwbGFjZXMgaW4geW91ciBjaz90aW8uYyBtb2R1bGUu Ci0qLwotICAgICAgICBwcmludGYoInRuX3B1c2ggY2FsbGVkIGJ1dCBub3QgaW1wbGVtZW50ZWQg LSBkYXRhIGxvc3QuXG4iKTsKLSNlbmRpZiAvKiBUVExFQlVGICovCi0jZW5kaWYgLyogT1MyICov Ci0jZW5kaWYgLyogTkVUTEVCVUYgKi8KLSAgICAgICAgdG5fd2FpdF9pZHggPSAwOwotICAgIH0K LSAgICB0bl93YWl0X3RtbyA9IFROX1RJTUVPVVQ7ICAgICAgICAgICAvKiBSZXNldCB3YWl0IHRp bWVyIHN0YXRzICovCi0gICAgcmV0dXJuKDEpOwotfQotCi0vKiAgVCBOIF8gUyBPIFAgVCAgKi8K LS8qCi0gICBTZW5kcyBhIHRlbG5ldCBvcHRpb24sIGF2b2lkcyBsb29wcy4KLSAgIFJldHVybnMg MSBpZiBjb21tYW5kIHdhcyBzZW50LCAwIGlmIG5vdCwgLTEgb24gZXJyb3IuCi0qLwotaW50Ci10 bl9zb3B0KGNtZCxvcHQpIGludCBjbWQsIG9wdDsgeyAgICAgICAgLyogVEVMTkVUIFNFTkQgT1BU SU9OICovCi0gICAgQ0hBUiBidWZbNV07Ci0gICAgY2hhciBtc2dbMTI4XTsKLSAgICBpbnQgcmM7 Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oLTEpOyAgLyogTXVzdCBiZSBUQ1Av SVAgKi8KLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oLTEpOyAvKiBNdXN0 IGJlIHRlbG5ldCBwcm90b2NvbCAqLwotICAgIGlmICghVEVMQ01EX09LKGNtZCkpIHJldHVybigt MSk7Ci0gICAgaWYgKFRFTE9QVF9PSyhvcHQpKSB7Ci0gICAgICAgIGlmIChjbWQgPT0gRE8gJiYg VEVMT1BUX1VOQU5TV0VSRURfRE8ob3B0KSkgcmV0dXJuKDApOwotICAgICAgICBpZiAoY21kID09 IFdJTEwgJiYgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChvcHQpKSByZXR1cm4oMCk7Ci0gICAgICAg IGlmIChjbWQgPT0gRE9OVCAmJiBURUxPUFRfVU5BTlNXRVJFRF9ET05UKG9wdCkpIHJldHVybigw KTsKLSAgICAgICAgaWYgKGNtZCA9PSBXT05UICYmIFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQob3B0 KSkgcmV0dXJuKDApOwotICAgIH0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRF TE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigw KTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICBpZiAoY21kID09IERPICYmIG9w dCA9PSBURUxPUFRfQVVUSEVOVElDQVRJT04pCi0gICAgICBidWZbMF0gPSAwOwotCi0gICAgaWYg KHRuX2luZmluaXRlICYmIFRFTE9QVF9PSyhvcHQpKSB7IC8qIFNlZSBjb21tZW50IGFib3ZlIGFi b3V0ICAgKi8KLSAgICAgICAgaW50IGluZGV4ID0gVEVMT1BUX0lOREVYKG9wdCk7ICAgLyogcHJl dmVudGluZyBpbmZpbml0ZSBsb29wcyAqLwotICAgICAgICBpbnQgbSA9IGNtZCAtIFdJTEw7Ci0K LSAgICAgICAgaWYgKHRuY250c1tpbmRleF1bbV0gPiBNQVhUTkNOVCkgewotI2lmZGVmIERFQlVH Ci0gICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcyB8fCBkZWJsb2cpIHsKLSAgICAgICAg ICAgICAgICBja21ha21zZyhtc2csc2l6ZW9mKG1zZyksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAiVEVMTkVUIG5lZ290aWF0aW9uIGxvb3AgIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIFRFTENNRChjbWQpLCAiICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFQo b3B0KSk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSxtc2csIiIsb3B0KTsKLSAgICAgICAg ICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcobXNnKTsKLSAgICAgICAgICAg IH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9 Ci0gICAgICAgIHRuY250c1tpbmRleF1bbV0rKzsKLSAgICAgICAgdG5jbnRzW2luZGV4XVt0bm9w cHNbbV1dID0gMDsKLSAgICB9Ci0gICAgYnVmWzBdID0gKENIQVIpIElBQzsKLSAgICBidWZbMV0g PSAoQ0hBUikgKGNtZCAmIDB4ZmYpOwotICAgIGJ1ZlsyXSA9IChDSEFSKSAob3B0ICYgMHhmZik7 Ci0gICAgYnVmWzNdID0gKENIQVIpIDA7Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoKHRuX2RlYiB8 fCBkZWJzZXMgfHwgZGVibG9nKSAmJiBjbWQgIT0gU0IpCi0gICAgICAgIGNrbWFrbXNnKG1zZyxz aXplb2YobXNnKSwiVEVMTkVUIFNFTlQgIixURUxDTUQoY21kKSwiICIsCi0gICAgICAgICAgICAg ICAgICBURUxPUFQob3B0KSk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBPUzIKLSAgICBS ZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotICAgIGRl YnVnKEYxMDEsbXNnLCIiLG9wdCk7Ci0gICAgaWYgKCh0bl9kZWIgfHwgZGVic2VzKSAmJiBjbWQg IT0gU0IpCi0gICAgICB0bl9kZWJ1Zyhtc2cpOwotICAgIHJjID0gKHR0b2woYnVmLDMpIDwgMyk7 Ci0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICBpZiAo cmMpCi0gICAgICAgIHJldHVybigtMSk7Ci0KLQotICAgIGlmIChURUxPUFRfT0sob3B0KSkgewot ICAgICAgICBpZiAoY21kID09IERPTlQgJiYgVEVMT1BUX1VOQU5TV0VSRURfRE8ob3B0KSkKLSAg ICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyhvcHQpID0gMDsKLSAgICAgICAgaWYgKGNtZCA9 PSBXT05UICYmIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwob3B0KSkKLSAgICAgICAgICBURUxPUFRf VU5BTlNXRVJFRF9XSUxMKG9wdCkgPSAwOwotICAgICAgICBpZiAoY21kID09IERPICYmIFRFTE9Q VF9VTkFOU1dFUkVEX0RPTlQob3B0KSkKLSAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ET05U KG9wdCkgPSAwOwotICAgICAgICBpZiAoY21kID09IFdJTEwgJiYgVEVMT1BUX1VOQU5TV0VSRURf V09OVChvcHQpKQotICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQob3B0KSA9IDA7Ci0g ICAgfQotICAgIHJldHVybigxKTsKLX0KLQotLyogU2VuZCBhIHRlbG5ldCBzdWItb3B0aW9uICov Ci0vKiBSZXR1cm5zIDEgaWYgY29tbWFuZCB3YXMgc2VudCwgMCBpZiBub3QsIC0xIG9uIGVycm9y ICovCi0KLWludAotdG5fc3Nib3B0KG9wdCxzdWIsZGF0YSxsZW4pIGludCBvcHQsIHN1YjsgQ0hB UiAqIGRhdGE7IGludCBsZW47IHsKLSAgICBDSEFSIGJ1ZlsyNTZdOwotICAgIGludCBuLG0scmM7 Ci0KLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsgICAvKiBNdXN0IGJlIFRD UC9JUCAqLwotICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsgLyogTXVz dCBiZSB0ZWxuZXQgcHJvdG9jb2wgKi8KLSAgICBpZiAoIVRFTE9QVF9PSyhvcHQpKSByZXR1cm4o LTEpOwotICAgIGlmIChsZW4gPCAwIHx8IGxlbiA+IDI1MCkgewotICAgICAgICBkZWJ1ZyhGMTEx LCJVbmFibGUgdG8gU2VuZCBURUxORVQgU0IgLSBkYXRhIHRvbyBsb25nIiwibGVuIixsZW4pOwot ICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIERhdGEgdG9vIGxvbmcg Ki8KLSAgICB9Ci0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRf VExTKS5zdGFydF90bHMubWVfZm9sbG93cykgewotICAgICAgICBpZiAodHRjaGsoKSA8IDApCi0g ICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybigxKTsK LSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICBpZiAoIWRhdGEpIGxlbiA9IDA7Ci0K LSAgICBidWZbMF0gPSAoQ0hBUikgSUFDOwotICAgIGJ1ZlsxXSA9IChDSEFSKSAoU0IgJiAweGZm KTsKLSAgICBidWZbMl0gPSAoQ0hBUikgKG9wdCAmIDB4ZmYpOwotICAgIGJ1ZlszXSA9IChDSEFS KSAoc3ViICYgMHhmZik7Ci0gICAgaWYgKGRhdGEgJiYgbGVuID4gMCkgewotICAgICAgICBtZW1j cHkoJmJ1Zls0XSxkYXRhLGxlbik7Ci0gICAgfQotICAgIGJ1Zls0K2xlbl0gPSAoQ0hBUikgSUFD OwotICAgIGJ1Zls1K2xlbl0gPSAoQ0hBUikgU0U7Ci0KLSNpZmRlZiBERUJVRwotICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzIHx8IGRlYmxvZykgewotICAgICAgICBpZiAob3B0ID09IFRFTE9QVF9T VEFSVF9UTFMgJiYgc3ViID09IDEpCi0gICAgICAgICAgY2ttYWttc2codG5fbXNnX291dCxUTl9N U0dfTEVOLCJURUxORVQgU0VOVCBTQiAiLAotICAgICAgICAgICAgICAgICAgICBURUxPUFQob3B0 KSwiIEZPTExPV1MgSUFDIFNFIixOVUxMKTsKLSAgICAgICAgZWxzZSBpZiAob3B0ID09IFRFTE9Q VF9UVFlQRSAmJiBzdWIgPT0gMSkKLSAgICAgICAgICBja21ha21zZyh0bl9tc2dfb3V0LFROX01T R19MRU4sIlRFTE5FVCBTRU5UIFNCICIsIFRFTE9QVChvcHQpLAotICAgICAgICAgICAgICAgICAg ICAiIFNFTkQgSUFDIFNFIixOVUxMKTsKLSAgICAgICAgZWxzZSBpZiAob3B0ID09IFRFTE9QVF9U VFlQRSAmJiBzdWIgPT0gMCkKLSAgICAgICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0df TEVOLCJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChvcHQpLCIgSVMgIiwKLSAgICAgICAgICAgICAg ICAgICAgKGNoYXIgKilkYXRhLCIgSUFDIFNFIixOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMKTsKLSAgICAgICAgZWxzZSBpZiAob3B0ID09IFRFTE9QVF9ORVdFTlZJUk9OKSB7Ci0g ICAgICAgICAgICBpbnQgaSwgcXVvdGU7Ci0gICAgICAgICAgICBja21ha21zZyh0bl9tc2dfb3V0 LFROX01TR19MRU4sIlRFTE5FVCBTRU5UIFNCICIsCi0gICAgICAgICAgICAgICAgICAgICBURUxP UFQoVEVMT1BUX05FV0VOVklST04pLCIgIiwKLSAgICAgICAgICAgICAgICAgICAgIHN1YiA9PSBU RUxRVUFMX1NFTkQgPyAiU0VORCIgOgotICAgICAgICAgICAgICAgICAgICAgc3ViID09IFRFTFFV QUxfSVMgPyAiSVMiIDoKLSAgICAgICAgICAgICAgICAgICAgIHN1YiA9PSBURUxRVUFMX0lORk8g PyJJTkZPIiA6ICJVTktOT1dOIiApOwotICAgICAgICAgICAgZm9yIChpID0gMCwgcXVvdGUgPSAw OyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAocXVvdGUpIHsKLSAgICAgICAg ICAgICAgICAgICAgc3ByaW50ZihoZXhidWYsIiUwMngiLGRhdGFbaV0pOyAvKiBzYWZlIGJ1dCB1 Z2x5ICovCi0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2dfb3V0LGhleGJ1ZixU Tl9NU0dfTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgcXVvdGUgPSAwOwotICAgICAgICAgICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YVtpXSkgewotICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgVEVMX0VOVl9VU0VSVkFSOgotICAgICAgICAgICAgICAg ICAgICAgICAgY2tzdHJuY2F0KHRuX21zZ19vdXQsIiBVU0VSVkFSICIsVE5fTVNHX0xFTik7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNl IFRFTF9FTlZfVkFSOgotICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZ19v dXQsIiBWQVIgIixUTl9NU0dfTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVEVMX0VOVl9WQUxVRToKLSAgICAgICAgICAgICAg ICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2dfb3V0LCIgVkFMVUUgIixUTl9NU0dfTEVOKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug VEVMX0VOVl9FU0M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnX291 dCwiIEVTQyAiLFROX01TR19MRU4pOwotICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGUgPSAx OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg Y2FzZSBJQUM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnX291dCwi IElBQyAiLFROX01TR19MRU4pOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwcmlu dGYoaGV4YnVmLCIlYyIsZGF0YVtpXSk7IC8qIHNhZmUgYnV0IHVnbHkgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2dfb3V0LGhleGJ1ZixUTl9NU0dfTEVOKTsKLSAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2dfb3V0LCIgSUFDIFNFIixUTl9NU0dfTEVOKTsKLSAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNwcmludGYoaGV4YnVmLCIlMDJ4IixzdWIpOyAg ICAgICAgICAgICAvKiBzYWZlIGJ1dCB1Z2x5ICovCi0gICAgICAgICAgICBja21ha3htc2codG5f bXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBT QiAiLFRFTE9QVChvcHQpLAotICAgICAgICAgICAgICAgICAgICAgICIgIiwKLSAgICAgICAgICAg ICAgICAgICAgICBoZXhidWYsCi0gICAgICAgICAgICAgICAgICAgICAgIiA8ZGF0YT4gSUFDIFNF IiwKLSAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTAotICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYg LyogREVCVUcgKi8KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRF RklOSVRFX1dBSVQgKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBERUJVRwotICAgIGRlYnVn KEYxMDEsdG5fbXNnX291dCwiIixvcHQpOwotICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAg ICAgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0 dG9sKGJ1Ziw2K2xlbikgPCA2K2xlbik7Ci0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11 dGV4KCk7Ci0jZW5kaWYKLQotICAgIGlmIChyYykKLSAgICAgIHJldHVybigtMSk7Ci0gICAgcmV0 dXJuKDEpOwotfQotCi0vKgotICB0bl9mbHVpKCkgLS0gUHJvY2Vzc2VzIGFsbCB3YWl0aW5nIGRh dGEgZm9yIFRlbG5ldCBjb21tYW5kcy4KLSAgQWxsIG5vbi1UZWxuZXQgZGF0YSBpcyB0byBiZSBz dG9yZWQgaW50byB0aGUgVGVsbmV0IFdhaXQgQnVmZmVyLgotICBSZXR1cm5zIDEgb24gc3VjY2Vz cy4KLSovCi1pbnQKLXRuX2ZsdWkoKSB7Ci0gICAgZXh0ZXJuIGludCBja3hlY2g7Ci0gICAgaW50 IHggPSAwOwotCi0gICAgLyogaWYgKCFJU19URUxORVQoKSkgcmV0dXJuKDApOyAqLwotCi0gICAg LyogV2FpdCB1cCB0byA1IHNlYyBmb3IgcmVzcG9uc2VzIHRvIG91dHN0YW5kaW5nIHRlbG5ldCBu ZWdvdGlhdGlvbnMgKi8KLSAgICB3aGlsZSAoeCA+PSAwICYmIHR0Y2hrKCkgPiAwICAmJiB0bl93 YWl0X2lkeCA8IFROX1dBSVRfQlVGX1NaKSB7Ci0gICAgICAgIHggPSB0dGluYygxKTsKLSAgICAg ICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgY2FzZSBJQUM6Ci0gICAgICAgICAgICB4ID0gdG5f ZG9vcCgoQ0hBUikoeCAmIDB4ZmYpLGluc2VydmVyP2NreGVjaDpkdXBsZXgsdHRpbmMpOwotICAg ICAgICAgICAgZGVidWcoRjEwMSwidG5fZmx1aSB0bl9kb29wIiwiIix4KTsKLSAgICAgICAgICAg IHN3aXRjaCAoeCkgewotICAgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgIC8q IFR1cm4gb24gZWNob2luZyAqLwotICAgICAgICAgICAgICAgIGR1cGxleCA9IDE7Ci0gICAgICAg ICAgICAgICAgaWYgKGluc2VydmVyKQotICAgICAgICAgICAgICAgICAgY2t4ZWNoID0gMTsKLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAg ICAgICAvKiBUdXJuIG9mZiBlY2hvaW5nICovCi0gICAgICAgICAgICAgICAgZHVwbGV4ID0gMDsK LSAgICAgICAgICAgICAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICAgICAgICAgICAgICBja3hlY2gg PSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDM6Ci0gICAg ICAgICAgICAgICAgdG5fd2FpdF9idWZbdG5fd2FpdF9pZHgrK10gPSBJQUM7Ci0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgLyog SUtTIGV2ZW50ICovCi0gICAgICAgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgICAgLyog TG9nb3V0ICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHggPj0gMCkK LSAgICAgICAgICAgICAgdG5fd2FpdF9idWZbdG5fd2FpdF9pZHgrK10gPSB4OwotICAgICAgICB9 Ci0gICAgfQotICAgIHJldHVybigxKTsKLX0KLQotdW5zaWduZWQgY2hhciAqCi10bl9nZXRfZGlz cGxheSgpCi17Ci0gICAgY2hhciAqIGRpc3AgPSBOVUxMOwotICAgIHN0YXRpYyBjaGFyIHRtcGxv Y1syNTZdOwotCi0gICAgLyogTXVzdCBjb21wdXRlIHRoZSBESVNQTEFZIHN0cmluZyB3ZSBhcmUg Z29pbmcgdG8gc2VuZCB0byB0aGUgaG9zdCAqLwotICAgIC8qIElmIG9uZSBpcyBub3QgYXNzaWdu ZWQsIGRvIG5vdCBzZW5kIGEgc3RyaW5nIHVubGVzcyB0aGUgdXNlciBoYXMgKi8KLSAgICAvKiBl eHBsaWNpdGVkbHkgcmVxdWVzdGVkIHdlIHRyeSB0byBzZW5kIG9uZSB2aWEgWC1EaXNwbGF5IExv Y2F0aW9uICovCi0gICAgLyogQnV0IGRvIG5vdCBzZW5kIGEgc3RyaW5nIGF0IGFsbCBpZiBGT1JX QVJEX1ggaXMgaW4gdXNlLiAgICAgICAgICAqLwotCi0gICAgLyogaWYgKCFJU19URUxORVQoKSkg cmV0dXJuKDApOyAqLwotCi0gICAgZGVidWcoRjExMCwidG5fZ2V0X2Rpc3BsYXkoKSBteWlwYWRk ciIsbXlpcGFkZHIsMCk7Ci0jaWZkZWYgQ0tfRU5WSVJPTk1FTlQKLSAgICBkZWJ1ZyhGMTEwLCJ0 bl9nZXRfZGlzcGxheSgpIHRuX2Vudl9kaXNwIix0bl9lbnZfZGlzcCwwKTsKLSAgICBpZiAodG5f ZW52X2Rpc3BbMF0pIHsKLSAgICAgICAgaW50IGNvbG9uID0gY2tpbmRleCgiOiIsdG5fZW52X2Rp c3AsMCwwLDEpOwotICAgICAgICBpZiAoICFjb2xvbiApIHsKLSAgICAgICAgICAgIGNrbWFrbXNn KHRtcGxvYywyNTYsbXlpcGFkZHIsIjoiLHRuX2Vudl9kaXNwLE5VTEwpOwotICAgICAgICAgICAg ZGlzcCA9IHRtcGxvYzsKLSAgICAgICAgfSBlbHNlIGlmICggY2tpbmRleCgibG9jYWxob3N0OiIs dG5fZW52X2Rpc3AsMCwwLDApIHx8Ci0gICAgICAgICAgICAgICAgICAgIGNraW5kZXgoInVuaXg6 Iix0bl9lbnZfZGlzcCwwLDAsMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgY2tpbmRleCgiMTI3 LjAuMC4xOiIsdG5fZW52X2Rpc3AsMCwwLDApIHx8Ci0gICAgICAgICAgICAgICAgICAgICFja3N0 cmNtcCgiMDoiLHRuX2Vudl9kaXNwLDIsMSkgfHwKLSAgICAgICAgICAgICAgICAgICAgdG5fZW52 X2Rpc3BbMF0gPT0gJzonICkgewotICAgICAgICAgICAgY2ttYWttc2codG1wbG9jLDI1NixteWlw YWRkciwiOiIsJnRuX2Vudl9kaXNwW2NvbG9uXSxOVUxMKTsKLSAgICAgICAgICAgIGRpc3AgPSB0 bXBsb2M7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZGlzcCA9IHRuX2Vudl9kaXNwOwot ICAgIH0KLSAgICBlbHNlCi0jZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KLSAgICAgICAgaWYg KFRFTE9QVF9NRShURUxPUFRfWERJU1BMT0MpIHx8Ci0gICAgICAgICAgICAgIFRFTE9QVF9VKFRF TE9QVF9GT1JXQVJEX1gpKSB7Ci0gICAgICAgIGNrbWFrbXNnKHRtcGxvYywyNTYsbXlpcGFkZHIs IjowLjAiLE5VTEwsTlVMTCk7Ci0gICAgICAgIGRpc3AgPSB0bXBsb2M7Ci0gICAgfQotICAgIGRl YnVnKEYxMTAsInRuX2dldF9kaXNwbGF5KCkgcmV0dXJucyIsZGlzcCwwKTsKLSAgICByZXR1cm4o KENIQVIgKilkaXNwKTsKLX0KLQotI2lmZGVmIENLX0ZPUldBUkRfWAotc3RhdGljIFhhdXRoIGZh a2VfeGF1dGggPSB7MCwwLE5VTEwsMCxOVUxMLDAsTlVMTCwwLE5VTEx9Owotc3RhdGljIFhhdXRo ICpyZWFsX3hhdXRoPU5VTEw7Ci0KLS8qCi0gKiBBdXRob3I6ICBKaW0gRnVsdG9uLCBNSVQgWCBD b25zb3J0aXVtCi0gKgotICogZndkeF9wYXJzZV9kaXNwbGF5bmFtZSAtCi0gKiBkaXNwbGF5IGEg ZGlzcGxheSBzdHJpbmcgdXAgaW50byBpdHMgY29tcG9uZW50IHBhcnRzCi0gKi8KLSNpZmRlZiBV TklYCi0jZGVmaW5lIFVOSVhfQ09OTkVDVElPTiAidW5peCIKLSNkZWZpbmUgVU5JWF9DT05ORUNU SU9OX0xFTkdUSCA0Ci0jZW5kaWYKLQotLyoKLSAqIHByaXZhdGUgdXRpbGl0eSByb3V0aW5lcwot ICovCi0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotWG11R2V0SG9zdG5hbWUgKGNoYXIg KmJ1ZiwgaW50IG1heGxlbikKLSNlbHNlCi1YbXVHZXRIb3N0bmFtZSAoYnVmLCBtYXhsZW4pCi0g ICAgY2hhciAqYnVmOwotICAgIGludCBtYXhsZW47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSAgICBpbnQgbGVuOwotCi0jaWZkZWYgTkVFRF9VVFNOQU1FCi0gICAgLyoKLSAgICAgKiBzYW1l IGhvc3QgbmFtZSBjcm9jayBhcyBpbiBzZXJ2ZXIgYW5kIHhpbml0LgotICAgICAqLwotICAgIHN0 cnVjdCB1dHNuYW1lIG5hbWU7Ci0KLSAgICB1bmFtZSAoJm5hbWUpOwotICAgIGxlbiA9IHN0cmxl biAobmFtZS5ub2RlbmFtZSk7Ci0gICAgaWYgKGxlbiA+PSBtYXhsZW4pIGxlbiA9IG1heGxlbiAt IDE7Ci0gICAgc3RybmNweSAoYnVmLCBuYW1lLm5vZGVuYW1lLCBsZW4pOwotICAgIGJ1ZltsZW5d ID0gJ1wwJzsKLSNlbHNlCi0gICAgYnVmWzBdID0gJ1wwJzsKLSAgICAodm9pZCkgZ2V0aG9zdG5h bWUgKGJ1ZiwgbWF4bGVuKTsKLSAgICBidWYgW21heGxlbiAtIDFdID0gJ1wwJzsKLSAgICBsZW4g PSBzdHJsZW4oYnVmKTsKLSNlbmRpZiAvKiBocHV4ICovCi0gICAgcmV0dXJuIGxlbjsKLX0KLQot c3RhdGljIGNoYXIgKgotI2lmZGVmIENLX0FOU0lDCi1jb3B5c3RyaW5nIChjaGFyICpzcmMsIGlu dCBsZW4pCi0jZWxzZQotY29weXN0cmluZyAoc3JjLCBsZW4pCi0gICAgY2hhciAqc3JjOwotICAg IGludCBsZW47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjaGFyICpjcDsKLQotICAg IGlmICghc3JjICYmIGxlbiAhPSAwKSByZXR1cm4gTlVMTDsKLSAgICBjcCA9IG1hbGxvYyAobGVu ICsgMSk7Ci0gICAgaWYgKGNwKSB7Ci0gICAgICAgIGlmIChzcmMpIHN0cm5jcHkgKGNwLCBzcmMs IGxlbik7Ci0gICAgICAgIGNwW2xlbl0gPSAnXDAnOwotICAgIH0KLSAgICByZXR1cm4gY3A7Ci19 Ci0KLXN0YXRpYyBjaGFyICoKLSNpZmRlZiBDS19BTlNJQwotZ2V0X2xvY2FsX2hvc3RuYW1lIChj aGFyICpidWYsIGludCBtYXhsZW4pCi0jZWxzZQotZ2V0X2xvY2FsX2hvc3RuYW1lIChidWYsIG1h eGxlbikKLSAgICBjaGFyICpidWY7Ci0gICAgaW50IG1heGxlbjsKLSNlbmRpZgotewotICAgIGJ1 ZlswXSA9ICdcMCc7Ci0gICAgKHZvaWQpIFhtdUdldEhvc3RuYW1lIChidWYsIG1heGxlbik7Ci0g ICAgcmV0dXJuIChidWZbMF0gPyBidWYgOiBOVUxMKTsKLX0KLQotI2lmbmRlZiBVTklYCi1zdGF0 aWMgY2hhciAqCi1jb3B5aG9zdG5hbWUgKCkKLXsKLSAgICBjaGFyIGJ1ZlsyNTZdOwotCi0gICAg cmV0dXJuIChnZXRfbG9jYWxfaG9zdG5hbWUgKGJ1Ziwgc2l6ZW9mIGJ1ZikgPwotICAgICAgICAg ICAgY29weXN0cmluZyAoYnVmLCBzdHJsZW4gKGJ1ZikpIDogTlVMTCk7Ci19Ci0jZW5kaWYKLQot Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotZndkeF9wYXJzZV9kaXNwbGF5bmFtZSAoY2hhciAqZGlz cGxheW5hbWUsIGludCAqZmFtaWx5cCwgY2hhciAqKmhvc3RwLAotICAgICAgICAgICAgICAgICAg ICAgICAgaW50ICpkcHludW1wLCBpbnQgKnNjcm51bXAsIGNoYXIgKipyZXN0cCkKLSNlbHNlCi1m d2R4X3BhcnNlX2Rpc3BsYXluYW1lIChkaXNwbGF5bmFtZSwgZmFtaWx5cCwgaG9zdHAsIGRweW51 bXAsIHNjcm51bXAsIHJlc3RwKQotICAgIGNoYXIgKmRpc3BsYXluYW1lOwotICAgIGludCAqZmFt aWx5cDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiAqLwotICAgIGNoYXIgKipob3N0 cDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiAqLwotICAgIGludCAqZHB5bnVtcCwg KnNjcm51bXA7ICAgICAgICAgICAgIC8qIHJldHVybiAqLwotICAgIGNoYXIgKipyZXN0cDsgICAg ICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiAqLwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17 Ci0gICAgY2hhciAqcHRyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd29yayB2YXJpYWJs ZXMgKi8KLSAgICBpbnQgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3b3JrIHZh cmlhYmxlICovCi0gICAgaW50IGZhbWlseSA9IC0xOyAgICAgICAgICAgICAgICAgICAgLyogdmFs dWUgdG8gYmUgcmV0dXJuZWQgKi8KLSAgICBjaGFyICpob3N0ID0gTlVMTDsgICAgICAgICAgICAg ICAgICAvKiBtdXN0IGZyZWUgaWYgc2V0IGFuZCBlcnJvciByZXR1cm4gKi8KLSAgICBpbnQgZHB5 bnVtID0gLTE7ICAgICAgICAgICAgICAgICAgICAvKiB2YWx1ZSB0byBiZSByZXR1cm5lZCAqLwot ICAgIGludCBzY3JudW0gPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIHZhbHVlIHRvIGJlIHJl dHVybmVkICovCi0gICAgY2hhciAqcmVzdCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgLyogbXVz dCBmcmVlIGlmIHNldCBhbmQgZXJyb3IgcmV0dXJuICovCi0gICAgaW50IGRuZXQgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgLyogaWYgMSB0aGVuIHVzaW5nIERFQ25ldCAqLwotCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2sgdGhlIG5hbWUgKi8KLSAg ICBpZiAoIWRpc3BsYXluYW1lIHx8ICFkaXNwbGF5bmFtZVswXSkKLSAgICAgICAgcmV0dXJuIDA7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbXVzdCBoYXZlIGF0 IGxlYXN0IDpudW1iZXIgKi8KLSAgICBwdHIgPSAoY2hhciAqKXN0cmNocihkaXNwbGF5bmFtZSwg JzonKTsKLSAgICBpZiAoIXB0ciB8fCAhcHRyWzFdKSByZXR1cm4gMDsKLSAgICBpZiAocHRyWzFd ID09ICc6JykgewotICAgICAgICBpZiAocHRyWzJdID09ICdcMCcpIHJldHVybiAwOwotICAgICAg ICBkbmV0ID0gMTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGdldCB0aGUgaG9zdCBzdHJpbmc7 IGlmIG5vbmUgaXMgZ2l2ZW4sIHVzZSB0aGUgbW9zdCBlZmZpZWNpZW50IHBhdGgKLSAgICAgKi8K LQotICAgIGxlbiA9IChwdHIgLSBkaXNwbGF5bmFtZSk7ICAvKiBsZW5ndGggb2YgaG9zdCBuYW1l ICovCi0gICAgaWYgKGxlbiA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogY2hvb3NlIG1v c3QgZWZmaWNpZW50IHBhdGggKi8KLSNpZmRlZiBVTklYCi0gICAgICAgIGhvc3QgPSBjb3B5c3Ry aW5nIChVTklYX0NPTk5FQ1RJT04sIFVOSVhfQ09OTkVDVElPTl9MRU5HVEgpOwotICAgICAgICBm YW1pbHkgPSBGYW1pbHlMb2NhbDsKLSNlbHNlCi0gICAgICAgIGlmIChkbmV0KSB7Ci0gICAgICAg ICAgICBob3N0ID0gY29weXN0cmluZyAoIjAiLCAxKTsKLSAgICAgICAgICAgIGZhbWlseSA9IEZh bWlseURFQ25ldDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGhvc3QgPSBjb3B5aG9z dG5hbWUgKCk7Ci0gICAgICAgICAgICBmYW1pbHkgPSBGYW1pbHlJbnRlcm5ldDsKLSAgICAgICAg fQotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaG9zdCA9IGNvcHlzdHJpbmcgKGRpc3Bs YXluYW1lLCBsZW4pOwotICAgICAgICBpZiAoZG5ldCkgewotICAgICAgICAgICAgZmFtaWx5ID0g ZG5ldDsKLSAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBVTklYCi0gICAgICAgICAgICBpZiAoaG9z dCAmJiBzdHJjbXAgKGhvc3QsIFVOSVhfQ09OTkVDVElPTikgPT0gMCkKLSAgICAgICAgICAgICAg ZmFtaWx5ID0gRmFtaWx5TG9jYWw7Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAg ICAgICAgZmFtaWx5ID0gRmFtaWx5SW50ZXJuZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp ZiAoIWhvc3QpIHJldHVybiAwOwotCi0KLSAgICAvKgotICAgICAqIGdldCB0aGUgZGlzcGxheSBu dW1iZXI7IHdlIGtub3cgdGhhdCB0aGVyZSBpcyBzb21ldGhpbmcgYWZ0ZXIgdGhlCi0gICAgICog Y29sb24gKG9yIGNvbG9ucykgZnJvbSBhYm92ZS4gIG5vdGUgdGhhdCBob3N0IGlzIG5vdyBzZXQg YW5kIG11c3QKLSAgICAgKiBiZSBmcmVlZCBpZiB0aGVyZSBpcyBhbiBlcnJvci4KLSAgICAgKi8K LQotICAgIGlmIChkbmV0KSBwdHIrKzsgICAgICAgICAgICAgICAgICAgIC8qIHNraXAgdGhlIGV4 dHJhIERFQ25ldCBjb2xvbiAqLwotICAgIHB0cisrOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIG1vdmUgdG8gc3RhcnQgb2YgZGlzcGxheSBudW0gKi8KLSAgICB7Ci0gICAgICAgIHJl Z2lzdGVyIGNoYXIgKmNwOwotCi0gICAgICAgIGZvciAoY3AgPSBwdHI7ICpjcCAmJiBpc2FzY2lp KCpjcCkgJiYgaXNkaWdpdCgqY3ApOyBjcCsrKSA7Ci0gICAgICAgIGxlbiA9IChjcCAtIHB0cik7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2sgcHJlc2Vu dCBhbmQgdmFsaWQgZm9sbG93ICovCi0gICAgICAgIGlmIChsZW4gPT0gMCB8fCAoKmNwICYmICpj cCAhPSAnLicpKSB7Ci0gICAgICAgICAgICBmcmVlIChob3N0KTsKLSAgICAgICAgICAgIHJldHVy biAwOwotICAgICAgICB9Ci0KLSAgICAgICAgZHB5bnVtID0gYXRvaSAocHRyKTsgICAgICAgICAg ICAvKiBpdCB3aWxsIGhhbmRsZSBudW0uIGFzIHdlbGwgKi8KLSAgICAgICAgcHRyID0gY3A7Ci0g ICAgfQotCi0gICAgLyoKLSAgICAgKiBub3cgZ2V0IHNjcmVlbiBudW1iZXIgaWYgZ2l2ZW47IHB0 ciBtYXkgcG9pbnQgdG8gbnVsIGF0IHRoaXMgcG9pbnQKLSAgICAgKi8KLSAgICBpZiAocHRyWzBd ID09ICcuJykgewotICAgICAgICByZWdpc3RlciBjaGFyICpjcDsKLQotICAgICAgICBwdHIrKzsK LSAgICAgICAgZm9yIChjcCA9IHB0cjsgKmNwICYmIGlzYXNjaWkoKmNwKSAmJiBpc2RpZ2l0KCpj cCk7IGNwKyspIDsKLSAgICAgICAgbGVuID0gKGNwIC0gcHRyKTsKLSAgICAgICAgaWYgKGxlbiA9 PSAwIHx8ICgqY3AgJiYgKmNwICE9ICcuJykpIHsgIC8qIGFsbCBwcm9wIG5hbWUgKi8KLSAgICAg ICAgICAgIGZyZWUgKGhvc3QpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQot ICAgICAgICBzY3JudW0gPSBhdG9pIChwdHIpOyAgICAgICAgICAgIC8qIGl0IHdpbGwgaGFuZGxl IG51bS4gYXMgd2VsbCAqLwotICAgICAgICBwdHIgPSBjcDsKLSAgICB9Ci0KLSAgICAvKgotICAg ICAqIGFuZCBmaW5hbGx5LCBnZXQgYW55IGFkZGl0aW9uYWwgc3R1ZmYgdGhhdCBtaWdodCBiZSBm b2xsb3dpbmcgdGhlCi0gICAgICogdGhlIHNjcmVlbiBudW1iZXI7IHB0ciBtdXN0IHBvaW50IHRv IGEgcGVyaW9kIGlmIHRoZXJlIGlzIGFueXRoaW5nCi0gICAgICovCi0KLSAgICBpZiAocHRyWzBd ID09ICcuJykgewotICAgICAgICBwdHIrKzsKLSAgICAgICAgbGVuID0gc3RybGVuIChwdHIpOwot ICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgcmVzdCA9IGNvcHlzdHJpbmcgKHB0 ciwgbGVuKTsKLSAgICAgICAgICAgIGlmICghcmVzdCkgewotICAgICAgICAgICAgICAgIGZyZWUg KGhvc3QpOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBhbmQgd2UgYXJlIGRvbmUhCi0gICAgICovCi0K LSAgICBpZiAoIGZhbWlseXAgKQotICAgICAgICAqZmFtaWx5cCA9IGZhbWlseTsKLSAgICBpZiAo IGhvc3RwICkKLSAgICAgICAgKmhvc3RwID0gaG9zdDsKLSAgICBlbHNlCi0gICAgICAgIGZyZWUo aG9zdCk7Ci0gICAgaWYgKCBkcHludW1wICkKLSAgICAgICAgKmRweW51bXAgPSBkcHludW07Ci0g ICAgaWYgKCBzY3JudW1wICkKLSAgICAgICAgKnNjcm51bXAgPSBzY3JudW07Ci0gICAgaWYgKCBy ZXN0cCApCi0gICAgICAgICpyZXN0cCA9IHJlc3Q7Ci0gICAgZWxzZQotICAgICAgICBmcmVlKHJl c3QpOwotICAgIHJldHVybiAxOwotfQotCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi1md2R4X3Ru X3NiKCB1bnNpZ25lZCBjaGFyICogc2IsIGludCBuICkKLSNlbHNlCi1md2R4X3RuX3NiKCBzYiwg biApIHVuc2lnbmVkIGNoYXIgKiBzYjsgaW50IG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSAgICB1bnNpZ25lZCBzaG9ydCBoY2hhbm5lbCwgbmNoYW5uZWw7Ci0gICAgdW5zaWduZWQgY2hh ciAqIHA7Ci0gICAgaW50IGk7Ci0gICAgaW50IHJjID0gLTE7Ci0KLSAgICAvKiBjaGVjayB0byBl bnN1cmUgd2UgaGF2ZSBuZWdvdGlhdGVkIEZvcndhcmQgWCAqLwotICAgIGlmICggc3N0ZWxuZXQg JiYgIVRFTE9QVF9NRShURUxPUFRfRk9SV0FSRF9YKSB8fAotICAgICAgICAgIXNzdGVsbmV0ICYm ICFURUxPUFRfVShURUxPUFRfRk9SV0FSRF9YKSApIHsKLSAgICAgICAgZGVidWcoRjEwMCwiZndk eF90bl9zYigpIG5vdCBuZWdvdGlhdGVkIiwiIiwwKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAg IH0KLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUyku c3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRp ZiAvKiBDS19TU0wgKi8KLQotICAgIHN3aXRjaCAoc2JbMF0pIHsKLSAgICBjYXNlIEZXRFhfU0NS RUVOOgotICAgICAgICBpZiAoc3N0ZWxuZXQgJiYgbiA9PSA0KQotICAgICAgICAgICAgcmMgPSBm d2R4X2NyZWF0ZV9saXN0ZW5fc29ja2V0KHNiWzFdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSBGV0RYX09QRU46Ci0gICAgICAgIGlmICggIXNzdGVsbmV0ICYmIG4gPj0gNSApIHsKLSAgICAg ICAgICAgIHAgPSAodW5zaWduZWQgY2hhciAqKSAmbmNoYW5uZWw7Ci0gICAgICAgICAgICBpID0g MTsKLSAgICAgICAgICAgIC8qIElBQyBxdW90aW5nIGhhcyBiZWVuIHN0cmlwcGVkIGluIHRuX3Ni KCkgKi8KLSAgICAgICAgICAgIHBbMF0gPSBzYltpKytdOwotICAgICAgICAgICAgcFsxXSA9IHNi W2krK107Ci0gICAgICAgICAgICBoY2hhbm5lbCA9IG50b2hzKG5jaGFubmVsKTsKLSAgICAgICAg ICAgIHJjID0gZndkeF9vcGVuX2NsaWVudF9jaGFubmVsKGhjaGFubmVsKTsKLSAgICAgICAgICAg IGlmICggcmMgPCAwICkgewotICAgICAgICAgICAgICAgIC8qIEZhaWxlZDsgU2VuZCBDTE9TRSBj aGFubmVsICovCi0gICAgICAgICAgICAgICAgZndkeF9zZW5kX2Nsb3NlKGhjaGFubmVsKTsKLSAg ICAgICAgICAgICAgICByYyA9IDA7ICAgICAgICAgLyogRG8gbm90IGNvbnNpZGVyIHRoaXMgdG8g YmUgYSB0ZWxuZXQgZXJyb3IgKi8KLSAgICAgICAgICAgIH0KLSNpZmRlZiBOVAotICAgICAgICAg ICAgaWYgKCAhVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC50aHJlYWRfc3Rh cnRlZCApIHsKLSAgICAgICAgICAgICAgICBja1RocmVhZEJlZ2luKCAmZndkeF90aHJlYWQsMzI2 NTUsIDAsIEZBTFNFLCAwICkgOwotICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9S V0FSRF9YKS5mb3J3YXJkX3gudGhyZWFkX3N0YXJ0ZWQgPSAxOwotICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIE5UICovCi0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGV0RYX0NM T1NFOgotICAgICAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikgJm5jaGFubmVsOwotICAgICAgICBp ID0gMTsKLSAgICAgICAgLyogSUFDIHF1b3RpbmcgaGFzIGJlZW4gc3RyaXBwZWQgaW4gdG5fc2Io KSAqLwotICAgICAgICBwWzBdID0gc2JbaSsrXTsKLSAgICAgICAgcFsxXSA9IHNiW2krK107Ci0g ICAgICAgIGhjaGFubmVsID0gbnRvaHMobmNoYW5uZWwpOwotICAgICAgICBmd2R4X2Nsb3NlX2No YW5uZWwoaGNoYW5uZWwpOwotICAgICAgICByYyA9IDA7IC8qIG5vIGVycm9ycyB3aGVuIGNsb3Np bmcgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGV0RYX0RBVEE6Ci0gICAgICAgIHAgPSAo dW5zaWduZWQgY2hhciAqKSAmbmNoYW5uZWw7Ci0gICAgICAgIGkgPSAxOwotICAgICAgICAvKiBJ QUMgcXVvdGluZyBoYXMgYmVlbiBzdHJpcHBlZCBpbiB0bl9zYigpICovCi0gICAgICAgIHBbMF0g PSBzYltpKytdOwotICAgICAgICBwWzFdID0gc2JbaSsrXTsKLSAgICAgICAgaGNoYW5uZWwgPSBu dG9ocyhuY2hhbm5lbCk7Ci0gICAgICAgIHJjID0gZndkeF9zZW5kX3hhdXRoX3RvX3hzZXJ2ZXIo aGNoYW5uZWwsKENIQVIgKikmc2JbM10sbi01KTsKLSAgICAgICAgaWYgKCByYyA+PSAwICYmIG4t NS1yYyA+IDApIHsKLSAgICAgICAgICAgIHJjID0gZndkeF93cml0ZV9kYXRhX3RvX2NoYW5uZWwo aGNoYW5uZWwsKGNoYXIgKikmc2JbMytyY10sbi01LXJjKTsKLSAgICAgICAgICAgIGlmICggcmMg PCAwICkgewotICAgICAgICAgICAgICAgIC8qIEZhaWxlZDsgU2VuZCBDTE9TRSBjaGFubmVsICov Ci0gICAgICAgICAgICAgICAgcmMgPSBmd2R4X3NlbmRfY2xvc2UoaGNoYW5uZWwpOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRldEWF9PUFRJT05T OgotICAgICAgICBpZiAoIHNzdGVsbmV0ICkgewotI2lmbmRlZiBGV0RYX1NFUlZFUgotICAgICAg ICAgICAgcmMgPSAwOwotI2Vsc2UKLSAgICAgICAgICAgIHJjID0gZndkeF9zZXJ2ZXJfYWNjZXB0 X29wdGlvbnMoKGNoYXIqKSZzYlsyXSxuLTMpOwotI2VuZGlmCi0gICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICByYyA9IGZ3ZHhfY2xpZW50X3JlcGx5X29wdGlvbnMoKGNoYXIgKikmc2JbMl0s bi0zKTsKLSAgICAgICAgICAgIGlmICggcmMgPj0gMCApIHsKLSAgICAgICAgICAgICAgICByYyA9 IHRuX3NuZGZ3ZHgoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsK LSAgICBjYXNlIEZXRFhfT1BUX0RBVEE6Ci0gICAgICAgIHN3aXRjaCAoIHNiWzFdICkgewotICAg ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmMgPSAwOyAgICAgICAgICAgICAvKiB3ZSBkb24n dCByZWNvZ25pemUsIG5vdCBhbiBlcnJvciAqLwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot Ci0gICAgY2FzZSBGV0RYX1hPRkY6Ci0gICAgY2FzZSBGV0RYX1hPTjoKLSAgICAgICAgaWYgKCAh c3N0ZWxuZXQgKSB7Ci0gICAgICAgICAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikgJm5jaGFubmVs OwotICAgICAgICAgICAgaSA9IDE7Ci0gICAgICAgICAgICAvKiBJQUMgcXVvdGluZyBoYXMgYmVl biBzdHJpcHBlZCBpbiB0bl9zYigpICovCi0gICAgICAgICAgICBwWzBdID0gc2JbaSsrXTsKLSAg ICAgICAgICAgIHBbMV0gPSBzYltpKytdOwotICAgICAgICAgICAgaGNoYW5uZWwgPSBudG9ocyhu Y2hhbm5lbCk7Ci0gICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2Fy ZF94LmNoYW5uZWxbaGNoYW5uZWxdLnN1c3BlbmQgPQotICAgICAgICAgICAgICAgIChzYlswXSA9 PSBGV0RYX1hPRkYpOwotICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGJy ZWFrOwotICAgIH0KLSAgICByZXR1cm4ocmMgPCAwID8gLTEgOiAwKTsKLX0KLQotaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLWZ3ZHhfc2VuZF94YXV0aF90b194c2VydmVyKGludCBjaGFubmVsLCB1bnNp Z25lZCBjaGFyICogZGF0YSwgaW50IGxlbikKLSNlbHNlCi1md2R4X3NlbmRfeGF1dGhfdG9feHNl cnZlcihjaGFubmVsLCBkYXRhLCBsZW4pCi0gICAgaW50IGNoYW5uZWw7IHVuc2lnbmVkIGNoYXIg KiBkYXRhOyBpbnQgbGVuOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaW50IG5hbWVf bGVuLCBkYXRhX2xlbiwgaTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBNQVhGV0RYIDsgaSsrKSB7 Ci0gICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5u ZWxbaV0uaWQgPT0gY2hhbm5lbCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAo IGkgPT0gTUFYRldEWCApCi0gICAgICAgIGdvdG8gYXV0aF9lcnI7Ci0KLSAgICBpZiAoIVRFTE9Q VF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtpXS5uZWVkX3RvX3NlbmRf eGF1dGgpCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIGlmIChsZW4gPCAxMikKLSAgICAgICAg Z290byBhdXRoX2VycjsKLQotICAgIC8qIFBhcnNlIHRoZSBsZW5ndGhzIG9mIHZhcmlhYmxlLWxl bmd0aCBmaWVsZHMuICovCi0gICAgaWYgKGRhdGFbMF0gPT0gMHg0MikgeyAgICAgICAgICAgICAg LyogYnl0ZSBvcmRlciBNU0IgZmlyc3QuICovCi0gICAgICAgIC8qIFhhdXRoIHBhY2tldHMgYXBw ZWFyIHRvIGFsd2F5cyBoYXZlIHRoaXMgZm9ybWF0ICovCi0gICAgICAgIGlmICggZGF0YVsxXSAh PSAweDAwIHx8Ci0gICAgICAgICAgICAgZGF0YVsyXSAhPSAweDAwIHx8Ci0gICAgICAgICAgICAg ZGF0YVszXSAhPSAweDBCIHx8Ci0gICAgICAgICAgICAgZGF0YVs0XSAhPSAweDAwIHx8Ci0gICAg ICAgICAgICAgZGF0YVs1XSAhPSAweDAwICkKLSAgICAgICAgICAgIGdvdG8gYXV0aF9lcnI7Ci0K LSAgICAgICAgbmFtZV9sZW4gPSAoZGF0YVs2XSA8PCA4KSArIGRhdGFbN107Ci0gICAgICAgIGRh dGFfbGVuID0gKGRhdGFbOF0gPDwgOCkgKyBkYXRhWzldOwotICAgIH0gZWxzZSBpZiAoZGF0YVsw XSA9PSAweDZjKSB7ICAgICAgIC8qIEJ5dGUgb3JkZXIgTFNCIGZpcnN0LiAqLwotICAgICAgICAv KiBYYXV0aCBwYWNrZXRzIGFwcGVhciB0byBhbHdheXMgaGF2ZSB0aGlzIGZvcm1hdCAqLwotICAg ICAgICBpZiAoIGRhdGFbMV0gIT0gMHgwMCB8fAotICAgICAgICAgICAgIGRhdGFbMl0gIT0gMHgw QiB8fAotICAgICAgICAgICAgIGRhdGFbM10gIT0gMHgwMCB8fAotICAgICAgICAgICAgIGRhdGFb NF0gIT0gMHgwMCB8fAotICAgICAgICAgICAgIGRhdGFbNV0gIT0gMHgwMCApCi0gICAgICAgICAg ICBnb3RvIGF1dGhfZXJyOwotCi0gICAgICAgIG5hbWVfbGVuID0gZGF0YVs2XSArIChkYXRhWzdd IDw8IDgpOwotICAgICAgICBkYXRhX2xlbiA9IGRhdGFbOF0gKyAoZGF0YVs5XSA8PCA4KTsKLSAg ICB9IGVsc2UgewotICAgICAgICAvKiBiYWQgYnl0ZSBvcmRlciBieXRlICovCi0gICAgICAgIGdv dG8gYXV0aF9lcnI7Ci0gICAgfQotCi0gICAgLyogQ2hlY2sgaWYgdGhlIHdob2xlIHBhY2tldCBp cyBpbiBidWZmZXIuICovCi0gICAgaWYgKGxlbiA8IDEyICsgKChuYW1lX2xlbiArIDMpICYgfjMp ICsgKChkYXRhX2xlbiArIDMpICYgfjMpKQotICAgICAgICBnb3RvIGF1dGhfZXJyOwotICAgIC8q IElmIHRoZSBUZWxuZXQgU2VydmVyIGFsbG93cyBhIHJlYWwgWGF1dGggbWVzc2FnZSB0byBiZSBz ZW50ICovCi0gICAgLyogVGhlbiBsZXQgdGhlIG1lc3NhZ2UgYmUgcHJvY2Vzc2VkIGJ5IHRoZSBY c2VydmVyLiAgICAgICAgICAgKi8KLSAgICBpZiAobmFtZV9sZW4gKyBkYXRhX2xlbiA+IDApIHsK LSAgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbaV0u bmVlZF90b19zZW5kX3hhdXRoID0gMDsKLSAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGVs c2UKLSAgICAvKiBJZiBhbiBlbXB0eSBYYXV0aCBtZXNzYWdlIHdhcyByZWNlaXZlZC4gIFdlIGFy ZSBnb2luZyB0byAgICovCi0gICAgLyogc2VuZCBvdXIgb3duIFhhdXRoIG1lc3NhZ2UgdXNpbmcg dGhlIHJlYWwgWGF1dGggZGF0YS4gIEFuZCAqLwotICAgIC8qIHRoZW4gc2VuZCBhbnkgb3RoZXIg ZGF0YSBpbiB0aGUgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgICB7Ci0gICAgICAg IGludCBjLCBlcnIsIGRweW51bSwgc2NybnVtLCBmYW1pbHksIHNiX2xlbjsKLSAgICAgICAgY2hh ciAqZGlzcGxheSwgKmhvc3QgPSBOVUxMLCAqcmVzdCA9IE5VTEw7Ci0gICAgICAgIHVuc2lnbmVk IGNoYXIgKnNiLCAqcDsKLQotICAgICAgICAvKiBwYXJzZSB0aGUgbG9jYWwgRElTUExBWSBlbnYg dmFyICovCi0gICAgICAgIGRpc3BsYXkgPSBnZXRlbnYoIkRJU1BMQVkiKTsKLSAgICAgICAgaWYg KCAhZGlzcGxheSApCi0gICAgICAgICAgICBkaXNwbGF5ID0gIjEyNy4wLjAuMTowLjAiOwotCi0g ICAgICAgIGlmIChmd2R4X3BhcnNlX2Rpc3BsYXluYW1lKGRpc3BsYXksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZmYW1pbHksICZob3N0LCAmZHB5bnVtLCAmc2NybnVtLCAm cmVzdCkpIHsKLSAgICAgICAgICAgIGNoYXIgKiBkaXNwX25vID0gY2tpdG9hKGRweW51bSk7ICAg IC8qIHNob3VsZCBiZSB1bnNpZ25lZCAqLwotICAgICAgICAgICAgaWYgKGZhbWlseSA9PSBGYW1p bHlMb2NhbCkgewotICAgICAgICAgICAgICAgIC8qIGNhbGwgd2l0aCBhZGRyZXNzID0gIjxsb2Nh bCBob3N0IG5hbWU+IiAqLwotICAgICAgICAgICAgICAgIGNoYXIgYWRkcmVzc1szMDBdID0gImxv Y2FsaG9zdCI7Ci0gICAgICAgICAgICAgICAgZ2V0aG9zdG5hbWUoYWRkcmVzcywgc2l6ZW9mKGFk ZHJlc3MpIC0gMSk7Ci0gICAgICAgICAgICAgICAgcmVhbF94YXV0aCA9IFhhdUdldEF1dGhCeUFk ZHIoZmFtaWx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cmxlbihhZGRyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cmxlbihkaXNwX25vKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkaXNwX25vLCAwLCBOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGVsc2UgaWYgKGZhbWlseSA9PSBGYW1pbHlJbnRlcm5ldCkgewotICAgICAgICAgICAgICAg IC8qIGNhbGwgd2l0aCBhZGRyZXNzID0gNCBieXRlcyBudW1lcmljIGlwIGFkZHIgKE1TQikgKi8K LSAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaGk7Ci0gICAgICAgICAgICAgICAgaWYg KGhpID0gZ2V0aG9zdGJ5bmFtZShob3N0KSkKLSAgICAgICAgICAgICAgICAgICAgcmVhbF94YXV0 aCA9IFhhdUdldEF1dGhCeUFkZHIoZmFtaWx5LCA0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBoaS0+aF9hZGRyLCBzdHJsZW4oZGlzcF9ubyksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bfbm8s IDAsIE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChob3N0KSBm cmVlKGhvc3QpOwotICAgICAgICBpZiAocmVzdCkgZnJlZShyZXN0KTsKLSAgICAgICAgaWYgKCFy ZWFsX3hhdXRoKSB7Ci0gICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5j aGFubmVsW2ldLm5lZWRfdG9fc2VuZF94YXV0aCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4oMCk7 Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXN0cm5jbXAocmVhbF94YXV0aC0+bmFtZSwKLSAg ICAgICAgICAgICAgICAgICAgICJNSVQtTUFHSUMtQ09PS0lFLTEiLAotICAgICAgICAgICAgICAg ICAgICAgcmVhbF94YXV0aC0+bmFtZV9sZW5ndGgpKSB7Ci0gICAgICAgICAgICBjaGFyIG1zZ1s2 NF07Ci0KLSAgICAgICAgICAgIG5hbWVfbGVuID0gcmVhbF94YXV0aC0+bmFtZV9sZW5ndGg7Ci0g ICAgICAgICAgICBkYXRhX2xlbiA9IDE2OwotCi0gICAgICAgICAgICBpZiAoIGRhdGFbMF0gPT0g MHg0MiApIHsKLSAgICAgICAgICAgICAgICBtc2dbMF0gPSAweDQyOyAvKiBNU0Igb3JkZXIgKi8K LSAgICAgICAgICAgICAgICBtc2dbMV0gPSBtc2dbMl0gPSAwOwotICAgICAgICAgICAgICAgIG1z Z1szXSA9IDB4MEI7Ci0gICAgICAgICAgICAgICAgbXNnWzRdID0gbXNnWzVdID0gMDsKLSAgICAg ICAgICAgICAgICBtc2dbNl0gPSAobmFtZV9sZW4gPj4gOCk7Ci0gICAgICAgICAgICAgICAgbXNn WzddID0gKG5hbWVfbGVuICYgMHhGRik7Ci0gICAgICAgICAgICAgICAgbXNnWzhdID0gKGRhdGFf bGVuID4+IDgpOwotICAgICAgICAgICAgICAgIG1zZ1s5XSA9IChkYXRhX2xlbiAmIDB4RkYpOwot ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtc2dbMF0gPSAweDZjOyAvKiBM U0Igb3JkZXIgKi8KLSAgICAgICAgICAgICAgICBtc2dbMV0gPSAwOwotICAgICAgICAgICAgICAg IG1zZ1syXSA9IDB4MEI7Ci0gICAgICAgICAgICAgICAgbXNnWzNdID0gbXNnWzRdID0gbXNnWzVd ID0gMDsKLSAgICAgICAgICAgICAgICBtc2dbNl0gPSAobmFtZV9sZW4gJiAweEZGKTsKLSAgICAg ICAgICAgICAgICBtc2dbN10gPSAobmFtZV9sZW4gPj4gOCk7Ci0gICAgICAgICAgICAgICAgbXNn WzhdID0gKGRhdGFfbGVuICYgMHhGRik7Ci0gICAgICAgICAgICAgICAgbXNnWzldID0gKGRhdGFf bGVuID4+IDgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbXNnWzEwXSA9IG1zZ1sxMV0g PSAwOwotICAgICAgICAgICAgbWVtY3B5KCZtc2dbMTJdLHJlYWxfeGF1dGgtPm5hbWUsMTgpOwot ICAgICAgICAgICAgbXNnWzMwXSA9IG1zZ1szMV0gPSAwOwotICAgICAgICAgICAgbWVtY3B5KCZt c2dbMzJdLHJlYWxfeGF1dGgtPmRhdGEsMTYpOwotCi0gICAgICAgICAgICBpZiAoZndkeF93cml0 ZV9kYXRhX3RvX2NoYW5uZWwoY2hhbm5lbCwoY2hhciAqKW1zZyw0OCkgPCAwKSB7Ci0gIFRFTE9Q VF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtpXS5uZWVkX3RvX3NlbmRf eGF1dGggPSAwOwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9IGVs c2UgewotICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbaV0u bmVlZF90b19zZW5kX3hhdXRoID0gMDsKLSAgICAgICAgICAgICAgICByZXR1cm4oMTIpOwotICAg ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRf WCkuZm9yd2FyZF94LmNoYW5uZWxbaV0ubmVlZF90b19zZW5kX3hhdXRoID0gMDsKLSAgICAgICAg ICAgIHJldHVybigwKTsgICAgICAgIC8qIHdlIGRvIG5vdCBrbm93IGhvdyB0byBoYW5kbGUgdGhp cyB0eXBlIHlldCAqLwotICAgICAgICB9Ci0gICAgfQotCi0gIGF1dGhfZXJyOgotICAgICAgICBk ZWJ1ZyhGMTAwLCJmd2R4X3NlbmRfeGF1dGhfdG9feHNlcnZlciBlcnJvciIsIiIsMCk7Ci0gICAg cmV0dXJuKC0xKTsKLX0KLQotCi0jaWZkZWYgQ09NTUVOVAotaW50Ci0jaWZkZWYgQ0tfQU5TSUMK LWZ3ZHhfYXV0aG9yaXplX2NoYW5uZWwoaW50IGNoYW5uZWwsIHVuc2lnbmVkIGNoYXIgKiBkYXRh LCBpbnQgbGVuKQotI2Vsc2UKLWZ3ZHhfYXV0aG9yaXplX2NoYW5uZWwoY2hhbm5lbCwgZGF0YSwg bGVuKQotICAgIGludCBjaGFubmVsOyB1bnNpZ25lZCBjaGFyICogZGF0YTsgaW50IGxlbjsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIC8qIFhYWCBtYXliZSB3ZSBzaG91bGQgaGF2ZSBz b21lIHJldHJ5IGhhbmRsaW5nIGlmIG5vdCB0aGUgd2hvbGUgZmlyc3QKLSAgICAqIGF1dGhvcml6 YXRpb24gcGFja2V0IGFycml2ZXMgY29tcGxldGUKLSAgICAqLwotICAgIGlmICggIVRFTE9QVF9T QihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtjaGFubmVsXS5hdXRob3JpemVk ICkgewotICAgICAgICBpbnQgbmFtZV9sZW4sIGRhdGFfbGVuOwotCi0gICAgICAgIGlmIChsZW4g PCAxMikKLSAgICAgICAgICAgIGdvdG8gYXV0aF9lcnI7Ci0KLSAgICAgICAgLyogUGFyc2UgdGhl IGxlbmd0aHMgb2YgdmFyaWFibGUtbGVuZ3RoIGZpZWxkcy4gKi8KLSAgICAgICAgaWYgKGRhdGFb MF0gPT0gMHg0MikgeyAgICAgICAgICAvKiBieXRlIG9yZGVyIE1TQiBmaXJzdC4gKi8KLSAgICAg ICAgICAgIC8qIFhhdXRoIHBhY2tldHMgYXBwZWFyIHRvIGFsd2F5cyBoYXZlIHRoaXMgZm9ybWF0 ICovCi0gICAgICAgICAgICBpZiAoIGRhdGFbMV0gIT0gMHgwMCB8fAotICAgICAgICAgICAgICAg ICBkYXRhWzJdICE9IDB4MDAgfHwKLSAgICAgICAgICAgICAgICAgZGF0YVszXSAhPSAweDBCIHx8 Ci0gICAgICAgICAgICAgICAgIGRhdGFbNF0gIT0gMHgwMCB8fAotICAgICAgICAgICAgICAgICBk YXRhWzVdICE9IDB4MDAgKQotICAgICAgICAgICAgICAgIGdvdG8gYXV0aF9lcnI7Ci0KLSAgICAg ICAgICAgIG5hbWVfbGVuID0gKGRhdGFbNl0gPDwgOCkgKyBkYXRhWzddOwotICAgICAgICAgICAg ZGF0YV9sZW4gPSAoZGF0YVs4XSA8PCA4KSArIGRhdGFbOV07Ci0gICAgICAgIH0gZWxzZSBpZiAo ZGF0YVswXSA9PSAweDZjKSB7ICAgLyogQnl0ZSBvcmRlciBMU0IgZmlyc3QuICovCi0gICAgICAg ICAgICAvKiBYYXV0aCBwYWNrZXRzIGFwcGVhciB0byBhbHdheXMgaGF2ZSB0aGlzIGZvcm1hdCAq LwotICAgICAgICAgICAgaWYgKCBkYXRhWzFdICE9IDB4MDAgfHwKLSAgICAgICAgICAgICAgICAg ZGF0YVsyXSAhPSAweDBCIHx8Ci0gICAgICAgICAgICAgICAgIGRhdGFbM10gIT0gMHgwMCB8fAot ICAgICAgICAgICAgICAgICBkYXRhWzRdICE9IDB4MDAgfHwKLSAgICAgICAgICAgICAgICAgZGF0 YVs1XSAhPSAweDAwICkKLSAgICAgICAgICAgICAgICBnb3RvIGF1dGhfZXJyOwotCi0gICAgICAg ICAgICBuYW1lX2xlbiA9IGRhdGFbNl0gKyAoZGF0YVs3XSA8PCA4KTsKLSAgICAgICAgICAgIGRh dGFfbGVuID0gZGF0YVs4XSArIChkYXRhWzldIDw8IDgpOwotICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgLyogYmFkIGJ5dGUgb3JkZXIgYnl0ZSAqLwotICAgICAgICAgICAgZ290byBhdXRo X2VycjsKLSAgICAgICAgfQotICAgICAgICAvKiBDaGVjayBpZiBhdXRoZW50aWNhdGlvbiBwcm90 b2NvbCBtYXRjaGVzLiAqLwotICAgICAgICBpZiAobmFtZV9sZW4gIT0gZmFrZV94YXV0aC5uYW1l X2xlbmd0aCB8fAotICAgICAgICAgICAgIG1lbWNtcChkYXRhICsgMTIsIGZha2VfeGF1dGgubmFt ZSwgbmFtZV9sZW4pICE9IDApIHsKLSAgICAgICAgICAgIC8qIGNvbm5lY3Rpb24gdXNlcyBkaWZm ZXJlbnQgYXV0aGVudGljYXRpb24gcHJvdG9jb2wgKi8KLSAgICAgICAgICAgIGdvdG8gYXV0aF9l cnI7Ci0gICAgICAgIH0KLSAgICAgICAgLyogQ2hlY2sgaWYgYXV0aGVudGljYXRpb24gZGF0YSBt YXRjaGVzIG91ciBmYWtlIGRhdGEuICovCi0gICAgICAgIGlmIChkYXRhX2xlbiAhPSBmYWtlX3hh dXRoLmRhdGFfbGVuZ3RoIHx8Ci0gICAgICAgICAgICAgbWVtY21wKGRhdGEgKyAxMiArICgobmFt ZV9sZW4gKyAzKSAmIH4zKSwKLSAgICAgICAgICAgICAgICAgICAgIGZha2VfeGF1dGguZGF0YSwg ZmFrZV94YXV0aC5kYXRhX2xlbmd0aCkgIT0gMCkgewotICAgICAgICAgICAgLyogYXV0aCBkYXRh IGRvZXMgbm90IG1hdGNoIGZha2UgZGF0YSAqLwotICAgICAgICAgICAgZ290byBhdXRoX2VycjsK LSAgICAgICAgfQotICAgICAgICAvKiBzdWJzdGl0dXRlIHRoZSBmYWtlIGRhdGEgd2l0aCByZWFs IGRhdGEgaWYgd2UgaGF2ZSBhbnkgKi8KLSAgICAgICAgaWYgKHJlYWxfeGF1dGggJiYgcmVhbF94 YXV0aC0+ZGF0YSkKLSAgICAgICAgICAgIG1lbWNweShkYXRhICsgMTIgKyAoKG5hbWVfbGVuICsg MykgJiB+MyksCi0gICAgICAgICAgICAgICAgICAgcmVhbF94YXV0aC0+ZGF0YSwgZGF0YV9sZW4p OwotCi0gICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5l bFtjaGFubmVsXS5hdXRob3JpemVkID0gMTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotICBhdXRo X2VycjoKLSAgICByZXR1cm4oLTEpOwotfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotaW50Ci0j aWZkZWYgQ0tfQU5TSUMKLWZ3ZHhfc2VuZF9jbG9zZShpbnQgY2hhbm5lbCkKLSNlbHNlCi1md2R4 X3NlbmRfY2xvc2UoY2hhbm5lbCkgaW50IGNoYW5uZWw7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsKLSAgICB1bnNpZ25lZCBzaG9ydCBuY2hhbm5lbDsKLSAgICBpbnQgaSxyYzsKLSAgICBDSEFS ICogcDsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RM Uykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNl bmRpZiAvKiBDS19TU0wgKi8KLQotICAgIG5jaGFubmVsID0gaHRvbnMoY2hhbm5lbCk7Ci0gICAg cCA9ICh1bnNpZ25lZCBjaGFyICopICZuY2hhbm5lbDsKLQotICAgIGkgPSAwOwotICAgIHNiX291 dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLwot ICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlh dGlvbiAqLwotICAgIHNiX291dFtpKytdID0gVEVMT1BUX0ZPUldBUkRfWDsgICAgICAgICAvKiBG b3J3YXJkIFggKi8KLSAgICBzYl9vdXRbaSsrXSA9IEZXRFhfQ0xPU0U7ICAgICAgICAgICAgICAg LyogT3BlbiAqLwotICAgIHNiX291dFtpKytdID0gcFswXTsgICAgICAgICAgICAgICAgICAgICAv KiBGaXJzdCBCeXRlIG9mIENoYW5uZWwgKi8KLSAgICBpZiAoIHBbMF0gPT0gSUFDICkKLSAgICAg ICAgc2Jfb3V0W2krK10gPSBJQUM7Ci0gICAgc2Jfb3V0W2krK10gPSBwWzFdOyAgICAgICAgICAg ICAgICAgICAgIC8qIFNlY29uZCBCeXRlIG9mIENoYW5uZWwgKi8KLSAgICBpZiAoIHBbMV0gPT0g SUFDICkKLSAgICAgICAgc2Jfb3V0W2krK10gPSBJQUM7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgSUFDOyAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNi X291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNF ICovCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsK LSAgICAgICAgY2ttYWt4bXNnKChjaGFyICopZndkeF9tc2dfb3V0LFROX01TR19MRU4sIlRFTE5F VCBTRU5UIFNCICIsCi0gICAgICAgICAgICAgICAgICBURUxPUFQoVEVMT1BUX0ZPUldBUkRfWCks Ci0gICAgICAgICAgICAgICAgICAiIENMT1NFIENIQU5ORUw9Iixja2l0b2EoY2hhbm5lbCksIiBJ QUMgU0UiLAotICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTAotICAgICAgICAgICAgICAgICAgKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNp ZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsK LSNlbmRpZgotI2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCwoY2hhciAqKWZ3ZHhfbXNnX291 dCwiIiwwKTsKLSAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcoKGNoYXIgKilmd2R4 X21zZ19vdXQpOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNi X291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVsZWFz ZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICBpZiAocmMpCi0gICAgICByZXR1cm4oLTEpOwot ICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWZ3ZHhfc2VuZF9vcGVu KGludCBjaGFubmVsKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWZ3ZHhfc2VuZF9vcGVuKGNoYW5u ZWwpIGludCBjaGFubmVsOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgdW5zaWduZWQg c2hvcnQgbmNoYW5uZWw7Ci0gICAgaW50IGksIHJjOwotICAgIENIQVIgKiBwOwotCi0jaWZkZWYg Q0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVf Zm9sbG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAq LwotCi0gICAgbmNoYW5uZWwgPSBodG9ucyhjaGFubmVsKTsKLSAgICBwID0gKHVuc2lnbmVkIGNo YXIgKikgJm5jaGFubmVsOwotCi0gICAgaSA9IDA7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikg SUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KLSAgICBzYl9vdXRbaSsr XSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLwotICAg IHNiX291dFtpKytdID0gVEVMT1BUX0ZPUldBUkRfWDsgICAgICAgICAgIC8qIEZvcndhcmQgWCAq LwotICAgIHNiX291dFtpKytdID0gRldEWF9PUEVOOyAgICAgICAgICAgICAgICAgIC8qIE9wZW4g Ki8KLSAgICBzYl9vdXRbaSsrXSA9IHBbMF07ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaXJz dCBCeXRlIG9mIENoYW5uZWwgKi8KLSAgICBpZiAoIHBbMF0gPT0gSUFDICkKLSAgICAgICAgc2Jf b3V0W2krK10gPSBJQUM7Ci0gICAgc2Jfb3V0W2krK10gPSBwWzFdOyAgICAgICAgICAgICAgICAg ICAgICAgLyogU2Vjb25kIEJ5dGUgb2YgQ2hhbm5lbCAqLwotICAgIGlmICggcFsxXSA9PSBJQUMg KQotICAgICAgICBzYl9vdXRbaSsrXSA9IElBQzsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJ QUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9v dXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNF ICovCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsK LSAgICAgICAgY2ttYWt4bXNnKChjaGFyICopZndkeF9tc2dfb3V0LFROX01TR19MRU4sIlRFTE5F VCBTRU5UIFNCICIsCi0gICAgICAgICAgICAgICAgICBURUxPUFQoVEVMT1BUX0ZPUldBUkRfWCks Ci0gICAgICAgICAgICAgICAgICAiIE9QRU4gQ0hBTk5FTD0iLGNraXRvYShjaGFubmVsKSwiIElB QyBTRSIsCi0gICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0 VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotI2lmZGVmIERFQlVH Ci0gICAgZGVidWcoRjEwMCwoY2hhciAqKWZ3ZHhfbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykgdG5fZGVidWcoKGNoYXIgKilmd2R4X21zZ19vdXQpOwotI2VuZGlmIC8q IERFQlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgICAg LyogU2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNl bmRpZgotICAgIGlmIChyYykKLSAgICAgIHJldHVybigtMSk7Ci0gICAgcmV0dXJuKDApOwotfQot Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotZndkeF9jbGllbnRfcmVwbHlfb3B0aW9ucyhjaGFyICpv cHRzLCBpbnQgbikKLSNlbHNlCi1md2R4X2NsaWVudF9yZXBseV9vcHRpb25zKG9wdHMsIG4pIGNo YXIgKm9wdHM7IGludCBuOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaW50IGksaixy YzsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUyku c3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRp ZiAvKiBDS19TU0wgKi8KLQotICAgIGkgPSAwOwotICAgIHNiX291dFtpKytdID0gKENIQVIpIElB QzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAgc2Jfb3V0W2krK10g PSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBz Yl9vdXRbaSsrXSA9IFRFTE9QVF9GT1JXQVJEX1g7ICAgICAgICAgICAvKiBGb3J3YXJkIFggKi8K LSAgICBzYl9vdXRbaSsrXSA9IEZXRFhfT1BUSU9OUzsgICAgICAgICAgICAgICAvKiBPcHRpb25z ICovCi0KLSAgICAvKiBMb29rIGZvciB0aGUgb3B0aW9ucyB3ZSByZWNvZ25pemUgYW5kIHdpbGwg c3VwcG9ydCBmb3IgdGhpcyBzZXNzaW9uICovCi0gICAgLyogYW5kIHJlcGx5IHdpdGggdGhlaXIg Ynl0ZXMgc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGZv ciAoaj0wOyBqPG47IGorKyxpKyspIHsKLSAgICAgICAgc2Jfb3V0W2ldID0gRldEWF9PUFRfTk9O RTsgICAgICAgICAgLyogQWRkIHplcm8gYnl0ZSAtIG5vIG9wdGlvbnMgKi8KLSNpZmRlZiBDT01N RU5UCi0gICAgICAgIC8qIElmIHdlIGhhZCBhbnkgb3B0aW9ucyB0byBzdXBwb3J0LCB0aGlzIGlz IGhvdyB3ZSB3b3VsZCBkbyBpdCAqLwotICAgICAgICBpZiAoIGogPT0gMCApIHsKLSAgICAgICAg ICAgIGlmIChvcHRzW2pdICYgRldEWF9PUFRfWFhYWCkgewotICAgICAgICAgICAgICAgIC8qIHNl dCBmbGFnIHRvIHJlbWVtYmVyIG9wdGlvbiBpcyBpbiB1c2UgKi8KLSAgICAgICAgICAgICAgICBm bGFnID0gMTsKLSAgICAgICAgICAgICAgICBzYl9vdXRbaV0gfD0gRldEWF9PUFRfWFhYWDsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9Ci0gICAg c2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5l Z290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAg ICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyB8 fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGNrbWFreG1zZygoY2hhciAqKWZ3ZHhfbXNn X291dCxUTl9NU0dfTEVOLCJURUxORVQgU0VOVCBTQiAiLAotICAgICAgICAgICAgICAgICAgVEVM T1BUKFRFTE9QVF9GT1JXQVJEX1gpLAotICAgICAgICAgICAgICAgICAgIiBPUFRJT05TICIsY2tj dG94KHNiX291dFs0XSwxKSwiIElBQyBTRSIsCi0gICAgICAgICAgICAgICAgICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNp ZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsK LSNlbmRpZgotI2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCwoY2hhciAqKWZ3ZHhfbXNnX291 dCwiIiwwKTsKLSAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcoKGNoYXIgKilmd2R4 X21zZ19vdXQpOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNi X291dCxpKSA8IDApOyAgICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICBSZWxl YXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlmIChyYykKLSAgICAgIHJldHVybigtMSk7 Ci0gICAgcmV0dXJuKDApOwotfQotCi0KLWludAotZndkeF9zZW5kX29wdGlvbnMoKSB7Ci0gICAg aW50IGksIHJjOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RB UlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAg fQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgaSA9IDA7Ci0gICAgc2Jfb3V0W2krK10gPSAo Q0hBUikgSUFDOyAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAgc2Jfb3V0 W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCi0g ICAgc2Jfb3V0W2krK10gPSBURUxPUFRfRk9SV0FSRF9YOyAgICAgICAgIC8qIEZvcndhcmQgWCAq LwotICAgIHNiX291dFtpKytdID0gRldEWF9PUFRJT05TOyAgICAgICAgICAgICAvKiBPcHRpb25z ICovCi0gICAgc2Jfb3V0W2ldICAgPSBGV0RYX09QVF9OT05FOwotICAgIC8qIGFjdGl2YXRlIG9w dGlvbnMgaGVyZSAqLwotICAgIGkrKzsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAg ICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsr XSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0K LSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAg ICAgICBja21ha21zZygoY2hhciAqKWZ3ZHhfbXNnX291dCxUTl9NU0dfTEVOLCJURUxORVQgU0VO VCBTQiAiLAotICAgICAgICAgICAgICAgICBURUxPUFQoVEVMT1BUX0ZPUldBUkRfWCksCi0gICAg ICAgICAgICAgICAgICIgT1BUSU9OUyAwMCBJQUMgU0UiLE5VTEwpOwotICAgIH0KLSNlbmRpZiAv KiBERUJVRyAqLwotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVG SU5JVEVfV0FJVCApOwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLChjaGFy ICopZndkeF9tc2dfb3V0LCIiLDApOwotICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1 ZygoY2hhciAqKWZ3ZHhfbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0 dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgICAvKiBTZW5kIGl0LiAqLwotI2lmZGVm IE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgaWYgKHJjKQotICAg ICAgcmV0dXJuKC0xKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lD Ci1md2R4X3NlbmRfZGF0YV9mcm9tX2NoYW5uZWwoaW50IGNoYW5uZWwsIGNoYXIgKiBkYXRhLCBp bnQgbGVuKQotI2Vsc2UKLWZ3ZHhfc2VuZF9kYXRhX2Zyb21fY2hhbm5lbChjaGFubmVsLCBkYXRh LCBsZW4pCi0gICAgaW50IGNoYW5uZWw7IGNoYXIgKiBkYXRhOyBpbnQgbGVuOwotI2VuZGlmCi17 Ci0gICAgdW5zaWduZWQgc2hvcnQgbmNoYW5uZWw7Ci0gICAgLyogc3RhdGljICovIENIQVIgc2Jf cHJpdlsyMDQ4XTsKLSAgICBDSEFSICogcDsKLSAgICBpbnQgaSwgaiwgal9zYXYsIHJjOwotICAg IHVuc2lnbmVkIGludCB0bXA7Ci0KLSAgICBkZWJ1ZyhGMTExLCJmd2R4X3NlbmRfZGF0YV9mcm9t X2NoYW5uZWwoKSIsImNoYW5uZWwiLGNoYW5uZWwpOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYg KFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgewotICAg ICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgbmNoYW5u ZWwgPSBodG9ucyhjaGFubmVsKTsKLSAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikgJm5jaGFubmVs OwotCi0gICAgaiA9IDA7Ci0gICAgc2JfcHJpdltqKytdID0gKENIQVIpIElBQzsgICAgICAgICAg ICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAgc2JfcHJpdltqKytdID0gKENIQVIpIFNC OyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2JfcHJpdltqKytd ID0gVEVMT1BUX0ZPUldBUkRfWDsgICAgICAgICAgIC8qIEZvcndhcmQgWCAqLwotICAgIHNiX3By aXZbaisrXSA9IEZXRFhfREFUQTsgICAgICAgICAgICAgICAgICAvKiBEYXRhICovCi0gICAgc2Jf cHJpdltqKytdID0gcFswXTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IEJ5dGUgb2Yg Q2hhbm5lbCAqLwotICAgIGlmICggcFswXSA9PSBJQUMgKQotICAgICAgICBzYl9wcml2W2orK10g PSBJQUM7Ci0gICAgc2JfcHJpdltqKytdID0gcFsxXTsgICAgICAgICAgICAgICAgICAgICAgIC8q IFNlY29uZCBCeXRlIG9mIENoYW5uZWwgKi8KLSAgICBpZiAoIHBbMV0gPT0gSUFDICkKLSAgICAg ICAgc2JfcHJpdltqKytdID0gSUFDOwotICAgIGpfc2F2ID0gajsKLQotICAgIGZvciAoaSA9IDA7 IGkgPCBsZW47IGkrKykgewotICAgICAgICB0bXAgPSAodW5zaWduZWQgaW50KWRhdGFbaV07Ci0g ICAgICAgIGlmICggdG1wID09IElBQyApIHsKLSAgICAgICAgICAgIHNiX3ByaXZbaisrXSA9IElB QzsKLSAgICAgICAgICAgIHNiX3ByaXZbaisrXSA9IElBQzsKLSAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgIHNiX3ByaXZbaisrXSA9IHRtcDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIGog Pj0gMjA0NSAmJiAoaSA8IGxlbi0xKSApIHsKLSAgICAgICAgICAgIHNiX3ByaXZbaisrXSA9IChD SEFSKSBJQUM7ICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICAgICAgICAgIHNiX3By aXZbaisrXSA9IChDSEFSKSBTRTsgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBE RUJVRwotICAgICAgICAgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAg ICAgICAgICAgICAgY2ttYWt4bXNnKCAoY2hhciAqKWZ3ZHhfbXNnX291dCxUTl9NU0dfTEVOLCJU RUxORVQgU0VOVCBTQiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9Q VF9GT1JXQVJEX1gpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBEQVRBIENIQU5ORUw9 Iixja2l0b2EoY2hhbm5lbCksIiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCApOwotICAgICAgICAgICAgICAgIHRuX2hleCgo Q0hBUiAqKWZ3ZHhfbXNnX291dCwKLQkJICAgICAgIFROX01TR19MRU4sJnNiX3ByaXZbal9zYXZd LGotKGpfc2F2KzIpKTsKLSAgICAgICAgICAgICAgICBja3N0cm5jYXQoKGNoYXIgKilmd2R4X21z Z19vdXQsIiBJQUMgU0UiLFROX01TR19MRU4pOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIERF QlVHICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9J TkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICBkZWJ1 ZyhGMTAwLChjaGFyICopZndkeF9tc2dfb3V0LCIiLDApOwotICAgICAgICAgICAgaWYgKHRuX2Rl YiB8fCBkZWJzZXMpIHRuX2RlYnVnKChjaGFyICopZndkeF9tc2dfb3V0KTsKLSNlbmRpZiAvKiBE RUJVRyAqLwotICAgICAgICAgICAgcmMgPSAodHRvbChzYl9wcml2LGopIDwgMCk7ICAgICAgICAg ICAgICAgIC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICBSZWxlYXNlVGVs bmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKHJjKSB7Ci0gICAgICAgICAgICAg ICAgZGVidWcoRjExMCwiZndkeF9zZW5kX2RhdGFfZnJvbV9jaGFubmVsKCkiLCJ0dG9sKCkgZmFp bGVkIiwwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgfQotCi0g ICAgICAgICAgICBqID0gMDsKLSAgICAgICAgICAgIHNiX3ByaXZbaisrXSA9IChDSEFSKSBJQUM7 ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLwotICAgICAgICAgICAgc2JfcHJp dltqKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICov Ci0gICAgICAgICAgICBzYl9wcml2W2orK10gPSBURUxPUFRfRk9SV0FSRF9YOyAgICAgICAgICAg LyogRm9yd2FyZCBYICovCi0gICAgICAgICAgICBzYl9wcml2W2orK10gPSBGV0RYX0RBVEE7ICAg ICAgICAgICAgICAgICAgLyogRGF0YSAqLwotICAgICAgICAgICAgc2JfcHJpdltqKytdID0gcFsw XTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IEJ5dGUgb2YgQ2hhbm5lbCAqLwotICAg ICAgICAgICAgaWYgKCBwWzBdID09IElBQyApCi0gICAgICAgICAgICAgICAgc2JfcHJpdltqKytd ID0gSUFDOwotICAgICAgICAgICAgc2JfcHJpdltqKytdID0gcFsxXTsgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNlY29uZCBCeXRlIG9mIENoYW5uZWwgKi8KLSAgICAgICAgICAgIGlmICggcFsx XSA9PSBJQUMgKQotICAgICAgICAgICAgICAgIHNiX3ByaXZbaisrXSA9IElBQzsKLSAgICAgICAg fQotICAgIH0KLQotICAgIHNiX3ByaXZbaisrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAg ICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9wcml2W2orK10gPSAoQ0hBUikg U0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYgREVC VUcKLSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWt4 bXNnKCAoY2hhciAqKWZ3ZHhfbXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAg ICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfRk9SV0FSRF9YKSwKLSAgICAgICAgICAg ICAgICAgICAiIERBVEEgIixja2N0b3gocFswXSwxKSwiICIsY2tjdG94KHBbMV0sMSksIiAiLAot ICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgIHRu X2hleCgoQ0hBUiAqKWZ3ZHhfbXNnX291dCxUTl9NU0dfTEVOLCZzYl9wcml2WzZdLGotOCk7Ci0g ICAgICAgIGNrc3RybmNhdCgoY2hhciAqKWZ3ZHhfbXNnX291dCwiIElBQyBTRSIsVE5fTVNHX0xF Tik7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRl bG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwot ICAgIGRlYnVnKEYxMDAsKGNoYXIgKilmd2R4X21zZ19vdXQsIiIsMCk7Ci0gICAgaWYgKHRuX2Rl YiB8fCBkZWJzZXMpIHRuX2RlYnVnKChjaGFyICopZndkeF9tc2dfb3V0KTsKLSNlbmRpZiAvKiBE RUJVRyAqLwotICAgIHJjID0gKHR0b2woc2JfcHJpdixqKSA8IDApOyAgICAgICAgICAgICAgICAv KiBTZW5kIGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2Vu ZGlmCi0gICAgaWYgKCByYyApIHsKLSAgICAgICAgZGVidWcoRjExMCwiZndkeF9zZW5kX2RhdGFf ZnJvbV9jaGFubmVsKCkiLCJ0dG9sKCkgZmFpbGVkIiwwKTsKLSAgICAgICAgcmV0dXJuKC0xKTsK LSAgICB9Ci0KLQotICAgIHJldHVybigwKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgKgot I2lmZGVmIENLX0FOU0lDCi1md2R4X2FkZF9xdW90ZWRfdHdvYnl0ZSh1bnNpZ25lZCBjaGFyICpw LCB1bnNpZ25lZCBzaG9ydCB0d29ieXRlKQotI2Vsc2UKLWZ3ZHhfYWRkX3F1b3RlZF90d29ieXRl KHAsIHR3b2J5dGUpCi0gICAgdW5zaWduZWQgY2hhciAqcDsgdW5zaWduZWQgc2hvcnQgdHdvYnl0 ZTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogYWRkcyB0aGUgSUFDIHF1b3RlZCAoTVNCKSBy ZXByZXNlbnRhdGlvbiBvZiAnY2hhbm5lbCcgYXQgYnVmZmVyIHBvaW50ZXIgJ3AnLAotICogcmV0 dXJuaW5nIHBvaW50ZXIgdG8gbmV3IGJ1ZmZlciBwb3NpdGlvbi4gTk8gT1ZFUkZMT1cgQ0hFQ0sh Ci0gKi8KLXsKLSAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCh0d29ieXRlID4+IDgpICYgMHhG Rik7Ci0gICAgaWYgKCoocCAtIDEpID09IDB4RkYpCi0gICAgICAgICpwKysgPSAweEZGOwotICAg ICpwKysgPSAodW5zaWduZWQgY2hhcikodHdvYnl0ZSAmIDB4RkYpOwotICAgIGlmICgqKHAgLSAx KSA9PSAweEZGKQotICAgICAgICAqcCsrID0gMHhGRjsKLSAgICByZXR1cm4gcDsKLX0KLQotaW50 Ci0jaWZkZWYgQ0tfQU5TSUMKLWZ3ZHhfY3JlYXRlX2Zha2VfeGF1dGgoY2hhciAqbmFtZSwgaW50 IG5hbWVfbGVuLCBpbnQgZGF0YV9sZW4pCi0jZWxzZQotZndkeF9jcmVhdGVfZmFrZV94YXV0aChu YW1lLCBuYW1lX2xlbiwgZGF0YV9sZW4pCi0gICAgY2hhciAqbmFtZTsgaW50IG5hbWVfbGVuOyBp bnQgZGF0YV9sZW47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjaGFyIHN0YWNrZGF0 YVsyNTZdOwotICAgIHVuc2lnbmVkIGludCBjLCBuOwotCi0gICAgaWYgKCFuYW1lX2xlbiB8fCAh ZGF0YV9sZW4pCi0gICAgICAgIHJldHVybiAxOwotICAgIGZha2VfeGF1dGgubmFtZSA9IG1hbGxv YyhuYW1lX2xlbik7Ci0gICAgZmFrZV94YXV0aC5kYXRhID0gbWFsbG9jKGRhdGFfbGVuKTsKLSAg ICBpZiAoIWZha2VfeGF1dGgubmFtZSB8fCAhZmFrZV94YXV0aC5kYXRhKQotICAgICAgICByZXR1 cm4gMjsKLSAgICBmYWtlX3hhdXRoLm5hbWVfbGVuZ3RoID0gbmFtZV9sZW47Ci0gICAgbWVtY3B5 KGZha2VfeGF1dGgubmFtZSwgbmFtZSwgbmFtZV9sZW4pOwotICAgIGZha2VfeGF1dGguZGF0YV9s ZW5ndGggPSBkYXRhX2xlbjsKLQotICAgIC8qIHRyeSB0byBtYWtlIGEgcmFuZG9tIHVuc2lnbmVk IGludCB0byBmZWVkIHNyYW5kKCkgKi8KLSAgICBjID0gdGltZShOVUxMKTsKLSAgICBjICo9IGdl dHBpZCgpOwotICAgIGZvciAobiA9IDA7IG4gPCBzaXplb2Yoc3RhY2tkYXRhKTsgbisrKQotICAg ICAgICBjICs9IHN0YWNrZGF0YVtuXTsKLSAgICBzcmFuZCgodW5zaWduZWQgaW50KWMpOwotICAg IGZvciAoYyA9IDA7IGMgPCBkYXRhX2xlbjsgYysrKQotICAgICAgICBmYWtlX3hhdXRoLmRhdGFb Y10gPSAodW5zaWduZWQgY2hhcilyYW5kKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBD T01NRU5UCi0vKiBObyBsb25nZXIgdXNlZCAqLwotaW50Ci1md2R4X3NlbmRfeGF1dGgodm9pZCkK LXsKLSAgICBpbnQgYywgZXJyLCBkcHludW0sIGZhbWlseSwgc2JfbGVuLCByYzsKLSAgICBjaGFy ICpkaXNwbGF5LCAqaG9zdCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqc2JfcHJpdiwgKnA7 Ci0KLSAgICAvKiBwYXJzZSB0aGUgbG9jYWwgRElTUExBWSBlbnYgdmFyICovCi0gICAgaWYgKCEo ZGlzcGxheSA9IHRuX2dldF9kaXNwbGF5KCkpKQotICAgICAgICByZXR1cm4gKC0xKTsKLSAgICBp ZiAoZndkeF9wYXJzZV9kaXNwbGF5bmFtZShkaXNwbGF5LCAmZmFtaWx5LCAmaG9zdCwgJmRweW51 bSwgTlVMTCwgTlVMTCkpIHsKLSAgICAgICAgY2hhciAqIGRpc3Bfbm8gPSBja2l0b2EoZHB5bnVt KTsKLSAgICAgICAgaWYgKGZhbWlseSA9PSBGYW1pbHlMb2NhbCkgewotICAgICAgICAgICAgLyog Y2FsbCB3aXRoIGFkZHJlc3MgPSAiPGxvY2FsIGhvc3QgbmFtZT4iICovCi0gICAgICAgICAgICBj aGFyIGFkZHJlc3NbMzAwXSA9ICJsb2NhbGhvc3QiOwotICAgICAgICAgICAgZ2V0aG9zdG5hbWUo YWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpIC0gMSk7Ci0gICAgICAgICAgICByZWFsX3hhdXRoID0g WGF1R2V0QXV0aEJ5QWRkcihmYW1pbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJsZW4oYWRkcmVzcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RybGVuKGRpc3Bfbm8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGlzcF9ubywgMCwgTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChmYW1pbHkgPT0g RmFtaWx5SW50ZXJuZXQpIHsKLSAgICAgICAgICAgIC8qIGNhbGwgd2l0aCBhZGRyZXNzID0gNCBi eXRlcyBudW1lcmljIGlwIGFkZHIgKE1TQikgKi8KLSAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50 ICpoaTsKLSAgICAgICAgICAgIGlmIChoaSA9IGdldGhvc3RieW5hbWUoaG9zdCkpCi0gICAgICAg ICAgICAgICAgcmVhbF94YXV0aCA9IFhhdUdldEF1dGhCeUFkZHIoZmFtaWx5LCA0LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpLT5oX2FkZHIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGRpc3Bfbm8p LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bfbm8s IDAsIE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChob3N0KSB7Ci0gICAgICAgIGZyZWUoaG9zdCk7 Ci0gICAgICAgIGhvc3QgPSBOVUxMOwotICAgIH0KLSAgICBpZiAocmVhbF94YXV0aCkKLSAgICAg ICAgZXJyID0gZndkeF9jcmVhdGVfZmFrZV94YXV0aChyZWFsX3hhdXRoLT5uYW1lLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxfeGF1dGgtPm5hbWVfbGVuZ3RoLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxfeGF1dGgtPmRhdGFfbGVu Z3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBlbHNlCi0g ICAgICBlcnIgPSBmd2R4X2NyZWF0ZV9mYWtlX3hhdXRoKCJNSVQtTUFHSUMtQ09PS0lFLTEiLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIk1JVC1NQUdJQy1DT09L SUUtMSIpLCAxNik7Ci0gICAgaWYgKGVycikKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotICAgIC8q IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFNCIGJsb2NrLCBhbGxvYyBmb3Igd29yc3QgY2FzZSAg ICAgICAgICAgICAgKi8KLSAgICAvKiB0aGUgZm9sbG93aW5nIHNwcmludGYoKSBjYWxscyBhcmUg c2FmZSBkdWUgdG8gbGVuZ3RoIGNoZWNraW5nICAgICAgICovCi0gICAgLyogYnVmZmVyIGlzIHR3 aWNlIGFzIGJpZyBhcyB0aGUgaW5wdXQganVzdCBpbiBjYXNlIGV2ZXJ5IGJ5dGUgd2FzIElBQyAq LwotICAgIHNiX2xlbiA9IDUgKyAyICsgMiArIGZha2VfeGF1dGgubmFtZV9sZW5ndGggKyBmYWtl X3hhdXRoLmRhdGFfbGVuZ3RoICsgMjsKLSAgICBpZiAoIShzYl9wcml2ID0gbWFsbG9jKDIgKiBz Yl9sZW4pKSkKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICBwID0gc2JfcHJpdjsKLSAgICBzcHJp bnRmKHAsICIlYyVjJWMlYyVjIiwgSUFDLCBTQiwgVEVMT1BUX0ZPUldBUkRfWCwKLSAgICAgICAg ICAgIEZXRFhfT1BUX0RBVEEsIEZXRFhfT1BUX1hBVVRIKTsKLSAgICBwICs9IDU7Ci0gICAgcCA9 IGZ3ZHhfYWRkX3F1b3RlZF90d29ieXRlKHAsIGZha2VfeGF1dGgubmFtZV9sZW5ndGgpOwotICAg IHAgPSBmd2R4X2FkZF9xdW90ZWRfdHdvYnl0ZShwLCBmYWtlX3hhdXRoLmRhdGFfbGVuZ3RoKTsK LSAgICBmb3IgKGMgPSAwOyBjIDwgZmFrZV94YXV0aC5uYW1lX2xlbmd0aDsgYysrKSB7Ci0gICAg ICAgICpwKysgPSBmYWtlX3hhdXRoLm5hbWVbY107Ci0gICAgICAgIGlmICgodW5zaWduZWQgY2hh cilmYWtlX3hhdXRoLm5hbWVbY10gPT0gMHhGRikKLSAgICAgICAgICAgICpwKysgPSAweEZGOwot ICAgIH0KLSAgICBmb3IgKGMgPSAwOyBjIDwgZmFrZV94YXV0aC5kYXRhX2xlbmd0aDsgYysrKSB7 Ci0gICAgICAgICpwKysgPSBmYWtlX3hhdXRoLmRhdGFbY107Ci0gICAgICAgIGlmICgodW5zaWdu ZWQgY2hhcilmYWtlX3hhdXRoLmRhdGFbY10gPT0gMHhGRikKLSAgICAgICAgICAgICpwKysgPSAw eEZGOwotICAgIH0KLSAgICBzcHJpbnRmKHAsICIlYyVjIiwgSUFDLCBTRSk7Ci0gICAgcCArPSAy OwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsK LSAgICAgICAgc3ByaW50ZigoY2hhciAqKWZ3ZHhfbXNnX291dCwiVEVMTkVUIFNFTlQgU0IgJXMg T1BUSU9OX0RBVEEgWEFVVEggIiwKLSAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9GT1JX QVJEX1gpKTsKLSAgICAgICAgdG5faGV4KChjaGFyICopZndkeF9tc2dfb3V0LFROX01TR19MRU4s JnNiX3ByaXZbNV0sKHAtc2JfcHJpdiktNyk7Ci0gICAgICAgIGNrc3RybmNhdCgoY2hhciAqKWZ3 ZHhfbXNnX291dCwiIElBQyBTRSIsVE5fTVNHX0xFTik7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVH ICovCi0KLSAgICAvKiBBZGQgVGVsbmV0IERlYnVnIGluZm8gaGVyZSAqLwotI2lmZGVmIE9TMgot ICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0j aWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLChjaGFyICopZndkeF9tc2dfb3V0LCIiLDApOwot ICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1ZygoY2hhciAqKWZ3ZHhfbXNnX291dCk7 Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICggdHRvbChzYl9wcml2LHAtc2JfcHJpdikg PCAwICk7ICAgICAgICAgICAgICAgIC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVs ZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICBpZiAocmMpIHsKLSAgICAgICAgZGVidWco RjExMCwiZndkeF9zZW5kX3hhdXRoKCkiLCJ0dG9sKCkgZmFpbGVkIiwwKTsKLSAgICAgICAgcmV0 dXJuKC0xKTsKLSAgICB9Ci0KLQotICAgIGZyZWUoc2JfcHJpdik7Ci0gICAgcmV0dXJuKDApOwot fQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZmRlZiBGV0RYX1NFUlZFUgotLyogT25seSBpZiB3 ZSBldmVyIGJlY29tZSBhIHNlcnZlciAtIG5vdCB5ZXQgcG9ydGVkIHRvIEtlcm1pdCAgICovCi0v KiBBbmQgZXZlbiBzbyBtb3N0IG9mIHRoaXMgY29kZSBkb2VzIG5vdCBiZWxvbmcgaW4gdGhpcyBt b2R1bGUgKi8KLQotaW50Ci1md2R4X3dyaXRlX3hhdXRoZmlsZSh2b2lkKQotewotICAgIGludCBk cHludW0sIHNjcm51bSwgZmFtaWx5OwotICAgIGNoYXIgbXlob3N0WzMwMF0sICpob3N0LCAqcmVz dCA9IE5VTEw7Ci0gICAgRklMRSAqZmlsZTsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FkZHI7 Ci0gICAgc3RydWN0IGhvc3RlbnQgKmhpOwotCi0gICAgaWYgKCFmd2R4X2Rpc3BsYXkgJiYgIWZ3 ZHhfeGF1dGhmaWxlKQotICAgICAgICByZXR1cm4gMTsKLSAgICBpZiAoIXBhcnNlX2Rpc3BsYXlu YW1lKGZ3ZHhfZGlzcGxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZmYW1pbHksICZo b3N0LCAmZHB5bnVtLCAmc2NybnVtLCAmcmVzdCkpCi0gICAgICAgIHJldHVybiAyOwotICAgIGlm IChyZXN0KSBmcmVlKHJlc3QpOwotICAgIGlmIChob3N0KSBmcmVlKGhvc3QpOwotICAgIGlmIChm YW1pbHkgIT0gRmFtaWx5SW50ZXJuZXQpCi0gICAgICAgIHJldHVybiAzOyAvKiBldmVyeSB0aGlu ZyBidXQgRmFtaWx5SW50ZXJuZXQgaXMgdW5leHBlY3RlZCAqLwotCi0gICAgLyogWCBjb25uZWN0 aW9ucyB0byBsb2NhbGhvc3Q6MSBpcyBhY3R1YWxseSB0cmVhdGVkIGFzIGxvY2FsIHVuaXggc29j a2V0cywKLSAgICAgKiBzZWUgdGhlICd4YXV0aCcgbWFuIHBhZ2UuCi0gICAgICovCi0gICAgeGF1 dGguZmFtaWx5ID0gRmFtaWx5TG9jYWw7Ci0gICAgaWYgKGdldGhvc3RuYW1lKG15aG9zdCwgc2l6 ZW9mKG15aG9zdCkgLSAxKSkKLSAgICAgICAgcmV0dXJuIDU7Ci0gICAgeGF1dGguYWRkcmVzc19s ZW5ndGggPSBzdHJsZW4obXlob3N0KTsKLSAgICBpZiAoISh4YXV0aC5hZGRyZXNzID0gbWFsbG9j KHhhdXRoLmFkZHJlc3NfbGVuZ3RoKSkpCi0gICAgICAgIHJldHVybiA1OwotICAgIG1lbWNweSh4 YXV0aC5hZGRyZXNzLCBteWhvc3QsIHhhdXRoLmFkZHJlc3NfbGVuZ3RoKTsKLQotICAgIC8qIHRo ZSBkaXNwbGF5IG51bWJlciBpcyB3cml0dGVuIGFzIGEgc3RyaW5nLCBub3QgbnVtZXJpYyAqLwot ICAgIGlmICghKHhhdXRoLm51bWJlciA9IG1hbGxvYyg2KSkpCi0gICAgICAgIHJldHVybiA2Owot ICAgIHNucHJpbnRmKHhhdXRoLm51bWJlciwgNSwgIiV1IiwgZHB5bnVtKTsKLSAgICB4YXV0aC5u dW1iZXJfbGVuZ3RoID0gc3RybGVuKHhhdXRoLm51bWJlcik7Ci0gICAgaWYgKCEoZmlsZSA9IGZv cGVuKGZ3ZHhfeGF1dGhmaWxlLCAid2IiKSkpCi0gICAgICAgIHJldHVybiA3OwotICAgIGlmICgh WGF1V3JpdGVBdXRoKGZpbGUsICZ4YXV0aCkpCi0gICAgICAgIHJldHVybiA4OwotICAgIGZjbG9z ZShmaWxlKTsKLSAgICBzZXRlbnYoIlhBVVRIT1JJVFkiLCBmd2R4X3hhdXRoZmlsZSwgMSk7Ci0g ICAgcmV0dXJuIDA7Ci19Ci0KLWludAotZndkeF9zZXR1cF94YXV0aCh1bnNpZ25lZCBjaGFyICpz cCwgaW50IGxlbikKLS8qIGNhbGxlZCB3aXRoICdsZW4nIHhhdXRoIGJ5dGVzLCBzdGFydGluZyBh dCAnc3AnCi0gKiB0aGUgZGF0YSBmb3JtYXQgaXM6IDx1aW50MTYgbmFtZV9sZW5ndGg+IDx1aW50 MTYgZGF0YV9sZW5ndGg+IDxuYW1lPiA8ZGF0YT4KLSAqLwotewotICAgIGludCB4YXV0aGZkOwot Ci0gICAgaWYgKCFmd2R4X29wdGlvbnNbRldEWF9PUFRfWEFVVEhdKQotICAgICAgICByZXR1cm4g MTsKLSAgICBpZiAobGVuIDwgNCkKLSAgICAgICAgcmV0dXJuIDI7Ci0KLSAgICAvKiBzZXR1cCB0 aGUgeGF1dGggc3RydWN0ICovCi0gICAgeGF1dGgubmFtZV9sZW5ndGggPSAoc3BbMF0gPDwgOCkg KyBzcFsxXTsKLSAgICB4YXV0aC5kYXRhX2xlbmd0aCA9IChzcFsyXSA8PCA4KSArIHNwWzNdOwot ICAgIGlmIChsZW4gIT0gNCArIHhhdXRoLm5hbWVfbGVuZ3RoICsgeGF1dGguZGF0YV9sZW5ndGgp Ci0gICAgICAgIHJldHVybiAzOwotICAgIHhhdXRoLm5hbWUgPSBtYWxsb2MoeGF1dGgubmFtZV9s ZW5ndGgpOwotICAgIHhhdXRoLmRhdGEgPSBtYWxsb2MoeGF1dGguZGF0YV9sZW5ndGgpOwotICAg IGlmICgheGF1dGgubmFtZSB8fCAheGF1dGguZGF0YSkKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAg bWVtY3B5KHhhdXRoLm5hbWUsIHNwICsgNCwgeGF1dGgubmFtZV9sZW5ndGgpOwotICAgIG1lbWNw eSh4YXV0aC5kYXRhLCBzcCArIDQgKyB4YXV0aC5uYW1lX2xlbmd0aCwgeGF1dGguZGF0YV9sZW5n dGgpOwotCi0gICAgLyogU2V0dXAgdG8gYWx3YXlzIGhhdmUgYSBsb2NhbCAuWGF1dGhvcml0eS4g Ki8KLSAgICBmd2R4X3hhdXRoZmlsZSA9IG1hbGxvYyhNQVhQQVRITEVOKzEpOwotICAgIHNucHJp bnRmKGZ3ZHhfeGF1dGhmaWxlLCBNQVhQQVRITEVOLCAiL3RtcC9YYXV0aFhYWFhYWCIpOwotICAg IGlmICgoeGF1dGhmZCA9IG1rc3RlbXAoZndkeF94YXV0aGZpbGUpKSAhPSAtMSkKLSAgICAgICAg Lyogd2UgY2hhbmdlIGZpbGUgb3duZXJzaGlwIGxhdGVyLCB3aGVuIHdlIGtub3cgd2hvIGlzIHRv IGJlIG93bmVyISAqLwotICAgICAgICBjbG9zZSh4YXV0aGZkKTsKLSAgICBlbHNlIHsKLSAgICAg ICAgZnJlZShmd2R4X3hhdXRoZmlsZSk7Ci0gICAgICAgIGZ3ZHhfeGF1dGhmaWxlID0gTlVMTDsK LSAgICAgICAgcmV0dXJuIDU7Ci0gICAgfQotLyogTXVzdCBoYXZlIHRoZSBzdWJzaGVsbCdzIG5l dyBESVNQTEFZIGVudiB2YXIgdG8gd3JpdGUgeGF1dGggdG8geGF1dGhmaWxlICovCi0gICAgaWYg KGZ3ZHhfZGlzcGxheSkKLSAgICAgICAgaWYgKGZ3ZHhfd3JpdGVfeGF1dGhmaWxlKCkpCi0gICAg ICAgICAgICByZXR1cm4gNjsKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIGZ3ZHhfc2V0X3hh dXRoZmlsZV9vd25lcihpbnQgdWlkKQotewotICAgIHN0cnVjdCBwYXNzd2QgKnB3ZDsKLQotICAg IGlmICghZndkeF94YXV0aGZpbGUgfHwgIShwd2QgPSBnZXRwd3VpZCh1aWQpKSkKLSAgICAgICAg cmV0dXJuOwotICAgIGNob3duKGZ3ZHhfeGF1dGhmaWxlLCBwd2QtPnB3X3VpZCwgcHdkLT5wd19n aWQpOwotfQotCi1pbnQKLWZ3ZHhfc2VydmVyX2FjY2VwdF9vcHRpb25zKHVuc2lnbmVkIGNoYXIg KnNwLCBpbnQgbGVuKQotLyogY2FsbGVkIHdpdGggJ2xlbicgb3B0aW9uIGJ5dGVzLCBzdGFydGlu ZyBhdCAnc3AnICovCi17Ci0gICAgaW50IGM7Ci0KLSAgICBmb3IgKGMgPSAwOyBjIDwgbGVuLTI7 IGMrKykgewotICAgICAgICBpZiAoYyA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoc3BbY10gJiBG V0RYX09QVF9YQVVUSCkKLSAgICAgICAgICAgICAgICBmbGFnID0gMTsKLSAgICAgICAgfQotICAg IH0KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogRldEWF9TRVJWRVIgKi8KLSNlbmRpZiAv KiBDS19GT1JXQVJEX1ggKi8KLQotI2lmZGVmIElLU19PUFRJT04KLS8qCi0gIGlrc193YWl0KCkg LS0gV2FpdCBmb3IgYW4gSUtTIHN1Ym5lZ290aWF0aW9uIHJlc3BvbnNlLgotICBzYiAtIGlzIGVp dGhlciBLRVJNSVRfUkVRX1NUQVJUIG9yIEtFUk1JVF9SRVFfU1RPUCBkZXBlbmRpbmcgb24gdGhl IGRlc2lyZWQKLSAgICAgICBzdGF0ZSBvZiB0aGUgcGVlcidzIEtlcm1pdCBzZXJ2ZXIuCi0gIGZs dXNob2sgLSBzcGVjaWZpZXMgd2hldGhlciBpdCBpcyBvayB0byB0aHJvdyBhd2F5IG5vbi1UZWxu ZXQgZGF0YQotICAgICAgIGlmIHNvLCB0aGVuIHdlIGNhbGwgdHRmbHVpKCkgaW5zdGVhZCBvZiB0 bl9mbHVpKCkuCi0gIFJldHVybnM6Ci0gICAxIGlmIHRoZSBkZXNpcmVkIHN0YXRlIGlzIGFjaGll dmVkIG9yIGlmIGl0IGlzIHVua25vd24uCi0gICAwIGlmIHRoZSBkZXNpcmVkIHN0YXRlIGlzIG5v dCBhY2hpZXZlZC4KLSovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotaWtzX3dhaXQoaW50IHNiLCBp bnQgZmx1c2hvaykKLSNlbHNlIC8qIENLX0FOU0lDICovCi1pa3Nfd2FpdChzYixmbHVzaG9rKSBp bnQgc2I7IGludCBmbHVzaG9rOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaW50IHRu X3dhaXRfc2F2ZSA9IHRuX3dhaXRfZmxnOwotICAgIGludCB4OwotCi0gICAgaWYgKFRFTE9QVF9V KFRFTE9QVF9LRVJNSVQpKSB7Ci0gICAgICAgIHN3aXRjaCAoc2IpIHsKLSAgICAgICAgICBjYXNl IEtFUk1JVF9SRVFfU1RBUlQ6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAgICAg ICAgICAgImlrc193YWl0IEtFUk1JVF9SRVFfU1RBUlQiLAotICAgICAgICAgICAgICAgICAgInVf c3RhcnQiLAotICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1p dC51X3N0YXJ0Ci0gICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgdG5fc2lrcyhLRVJN SVRfUkVRX1NUQVJUKTsKLSAgICAgICAgICAgIHRuX3dhaXRfZmxnID0gMTsgICAgICAgICAgICAv KiBLZXJtaXQgT3B0aW9uIE1VU1Qgd2FpdCAqLwotICAgICAgICAgICAgZG8gewotICAgICAgICAg ICAgICAgIGlmIChmbHVzaG9rKQotICAgICAgICAgICAgICAgICAgdG5fd2FpdF9pZHggPSAwOwot ICAgICAgICAgICAgICAgIHggPSB0bl93YWl0KCJpa3Nfd2FpdCgpIG1lX2lrc19yZXFfc3RhcnQi KTsKLSAgICAgICAgICAgIH0gd2hpbGUgKHggPT0gMCAmJiBmbHVzaG9rICYmIHRuX3dhaXRfaWR4 ID09IFROX1dBSVRfQlVGX1NaKTsKLSAgICAgICAgICAgIHRuX3dhaXRfZmxnID0gdG5fd2FpdF9z YXZlOwotICAgICAgICAgICAgaWYgKGZsdXNob2spCi0gICAgICAgICAgICAgIHRuX3dhaXRfaWR4 ID0gMDsKLSAgICAgICAgICAgIGlmICh0bl93YWl0X2lkeCA9PSBUTl9XQUlUX0JVRl9TWikgewot ICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogV2UgYXJlIGF0dGVtcHRpbmcg dG8gc3RhcnQgYSBrZXJtaXQgc2VydmVyIG9uIHRoZSBwZWVyCi0gICAgICAgICAgICAgICAgICog dGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBpcyBiZWNhdXNlIHdlIHdhbnQgdG8gcGVyZm9ybSBhCi0g ICAgICAgICAgICAgICAgICogZmlsZSB0cmFuc2Zlci4gIEJ1dCB0aGVyZSBpcyBhIGh1Z2UgYW1v dW50IG9mIG5vbiB0ZWxuZXQKLSAgICAgICAgICAgICAgICAgKiBuZWdvdGlhdGlvbiBkYXRhIGNv bWluZyBpbiBhbmQgc28gd2UgaGF2ZSBub3QgYmVlbiBhYmxlCi0gICAgICAgICAgICAgICAgICog dG8gZmluZCB0aGUgcmVzcG9uc2UuICBTbyB3ZSB3aWxsIGxpZSBhbmQgYXNzdW1lIHRoYXQKLSAg ICAgICAgICAgICAgICAgKiByZXNwb25zZSBpcyAneWVzJy4gIFRoZSB3b3JzZSB0aGF0IHdpbGwg aGFwcGVuIGlzIHRoYXQKLSAgICAgICAgICAgICAgICAgKiBhIFJFU1BfU1RPUCBpcyByZWNlaXZl ZCBhZnRlciB3ZSBlbnRlciBwcm90b2NvbCBtb2RlLgotICAgICAgICAgICAgICAgICAqIEFuZCB0 aGUgcHJvdG9jb2wgb3BlcmF0aW9uIHdpbGwgYmUgY2FuY2VsZWQuCi0gICAgICAgICAgICAgICAg ICovCi0gICAgICAgICAgICAgICAgdG5fcHVzaCgpOwotICAgICAgICAgICAgICAgIHJldHVybigx KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdG5fcHVzaCgpOwotICAg ICAgICAgICAgICAgIHJldHVybihURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3Rh cnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgIGNhc2UgS0VSTUlUX1JFUV9TVE9QOgotICAg ICAgICAgICAgZGVidWcoRjExMSwKLSAgICAgICAgICAgICAgICAgICJpa3Nfd2FpdCBLRVJNSVRf UkVRX1NUT1AiLAotICAgICAgICAgICAgICAgICAgInVfc3RhcnQiLAotICAgICAgICAgICAgICAg ICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0Ci0gICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfUkVRX1NUT1ApOwotICAgICAgICAg ICAgdG5fd2FpdF9mbGcgPSAxOyAgICAgICAgICAgIC8qIEtlcm1pdCBPcHRpb24gTVVTVCB3YWl0 ICovCi0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgaWYgKGZsdXNob2spCi0gICAg ICAgICAgICAgICAgICB0bl93YWl0X2lkeCA9IDA7Ci0gICAgICAgICAgICAgICAgeCA9IHRuX3dh aXQoImlrc193YWl0KCkgbWVfaWtzX3JlcV9zdG9wIik7Ci0gICAgICAgICAgICB9IHdoaWxlICh4 ID09IDAgJiYgZmx1c2hvayAmJiB0bl93YWl0X2lkeCA9PSBUTl9XQUlUX0JVRl9TWik7Ci0gICAg ICAgICAgICB0bl93YWl0X2ZsZyA9IHRuX3dhaXRfc2F2ZTsKLSAgICAgICAgICAgIGlmIChmbHVz aG9rKQotICAgICAgICAgICAgICB0bl93YWl0X2lkeCA9IDA7Ci0KLSAgICAgICAgICAgIGlmICh0 bl93YWl0X2lkeCA9PSBUTl9XQUlUX0JVRl9TWikgewotICAgICAgICAgICAgICAgIC8qCi0gICAg ICAgICAgICAgICAgICogV2UgYXJlIGF0dGVtcHRpbmcgdG8gc3RvcCBhIGtlcm1pdCBzZXJ2ZXIg b24gdGhlIHBlZXIKLSAgICAgICAgICAgICAgICAgKiB0aGUgbW9zdCBsaWtlbHkgcmVhc29uIGJl aW5nIHRoYXQgd2Ugd2FudCB0byBlbnRlcgotICAgICAgICAgICAgICAgICAqIENPTk5FQ1QgbW9k ZS4gIEJ1dCB0aGVyZSBpcyBhIGh1Z2UgYW1vdW50IG9mIG5vbiB0ZWxuZXQKLSAgICAgICAgICAg ICAgICAgKiBuZWdvdGlhdGlvbiBkYXRhIGNvbWluZyBpbiBhbmQgc28gd2UgaGF2ZSBub3QgYmVl biBhYmxlCi0gICAgICAgICAgICAgICAgICogdG8gZmluZCB0aGUgcmVzcG9uc2UuICBTbyB3ZSB3 aWxsIGxpZSBhbmQgYXNzdW1lIHRoYXQKLSAgICAgICAgICAgICAgICAgKiB0aGUgYW5zd2VyIGlz ICd5ZXMnIGFuZCBhbGxvdyB0aGUgQ09OTkVDVCBjb21tYW5kIHRvCi0gICAgICAgICAgICAgICAg ICogc3VjY2VlZC4gIFRoZSB3b3JzdCB0aGF0IGhhcHBlbnMgaXMgdGhhdCBDT05ORUNUIG1vZGUK LSAgICAgICAgICAgICAgICAgKiBzd2FsbG93cyB0aGUgaW5jb21pbmcgZGF0YSBkaXNwbGF5aW5n IGl0IHRvIHRoZSB1c2VyCi0gICAgICAgICAgICAgICAgICogYW5kIHRoZW4gaXQgcmVzdW1lcyBL ZXJtaXQgY2xpZW50IG1vZGUuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAg dG5fcHVzaCgpOwotICAgICAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgdG5fcHVzaCgpOwotICAgICAgICAgICAgICAgIHJldHVybigh VEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0KTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotICAgICAgICB0bl9wdXNoKCk7Ci0gICAgfQotICAgIHJldHVybigxKTsKLX0K LQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWlrc190bl9zYihDSEFSICogc2IsIGludCBuKQotI2Vs c2UKLWlrc190bl9zYihzYiwgbikgQ0hBUiAqIHNiOyBpbnQgbjsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotewotICAgIGV4dGVybiBpbnQgc2VydmVyOwotICAgIGV4dGVybiBDSEFSIHNzdGF0ZTsK LSNpZmRlZiBOT0lDUAotICAgIGV4dGVybiBpbnQgYXV0b2RsOwotICAgIGludCBpbmF1dG9kbCA9 IDAsIGNtZGFkbCA9IDE7Ci0jZWxzZQotI2lmZGVmIENLX0FVVE9ETAotICAgIGV4dGVybiBpbnQg YXV0b2RsLCBpbmF1dG9kbCwgY21kYWRsOwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotI2VuZGlm IC8qIE5PSUNQICovCi0gICAgc3dpdGNoIChzYlswXSkgewotICAgICAgY2FzZSBLRVJNSVRfU1RB UlQ6ICAgICAgICAgICAgICAgIC8qIFNUQVJUICovCi0gICAgICAgIFRFTE9QVF9TQihURUxPUFRf S0VSTUlUKS5rZXJtaXQudV9zdGFydCA9IDE7Ci0gICAgICAgIHJldHVybig0KTsKLQotICAgICAg Y2FzZSBLRVJNSVRfU1RPUDogICAgICAgICAgICAgICAgIC8qIFNUT1AgKi8KLSAgICAgICAgVEVM T1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ID0gMDsKLSAgICAgICAgcmV0dXJu KDQpOwotCi0gICAgICBjYXNlIEtFUk1JVF9SRVFfU1RBUlQ6ICAgICAgICAgICAgLyogUkVRLVNU QVJUICovCi0jaWZuZGVmIE5PWEZFUgotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKLSNpZmRlZiBD S19BVVRPREwKLSAgICAgICAgICAgIGNtZGFkbCA9IDE7ICAgICAgICAgICAgICAgICAvKiBUdXJu IG9uIHBhY2tldCBkZXRlY3Rpb24gKi8KLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSAgICAgICAg ICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgPSAxOwotICAgICAg ICAgICAgdG5fc2lrcyhLRVJNSVRfUkVTUF9TVEFSVCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoVEVM T1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkgewotICAgICAgICAgICAgdG5f c2lrcyhLRVJNSVRfUkVTUF9TVEFSVCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0jaWZuZGVmIElLU0RP TkxZCi0jaWZkZWYgQ0tfQVVUT0RMCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICBpZiAobG9jYWwg JiYgKElzQ29ubmVjdE1vZGUoKSAmJiBhdXRvZGwpIHx8Ci0gICAgICAgICAgICAgICAgKCFJc0Nv bm5lY3RNb2RlKCkgJiYgCi0gICAgICAgICAgICAgICAgICAoaW5hdXRvZGwgfHwgc3N0YXRlID09 ICd4JyB8fCBzc3RhdGUgPT0gJ3YnKSkKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAg IHRuX3Npa3MoS0VSTUlUX1JFU1BfU1RBUlQpOyAvKiBTVEFSVCAqLwotICAgICAgICAgICAgZWxz ZQotCi0jZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgICAgIGlmICgobG9jYWwgJiYgd2hhdCA9PSBX X0NPTk5FQ1QgJiYgYXV0b2RsKSB8fAotICAgICAgICAgICAgICAgIChsb2NhbCAmJiB3aGF0ICE9 IFdfQ09OTkVDVCAmJgotICAgICAgICAgICAgICAgICAgKGluYXV0b2RsIHx8IHNzdGF0ZSA9PSAn eCcgfHwgc3N0YXRlID09ICd2JykKLSAgICAgICAgICAgICAgICApKQotICAgICAgICAgICAgICB0 bl9zaWtzKEtFUk1JVF9SRVNQX1NUQVJUKTsgLyogU1RBUlQgKi8KLSAgICAgICAgICAgIGVsc2UK LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSNlbmRpZiAvKiBJS1NE T05MWSAqLwotICAgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVNQX1NUT1ApOwotICAgICAg ICB9Ci0jZWxzZSAvKiBOT1hGRVIgKi8KLSAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVNQX1NU T1ApOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAgICByZXR1cm4oNCk7Ci0KLSAgICAgIGNh c2UgS0VSTUlUX1JFUV9TVE9QOiAgICAgICAgICAgICAvKiBSRVEtU1RPUCAqLwotICAgICAgICAv KiBUaGUgcHJvdG9jb2wgcmVxdWlyZXMgdGhhdCB0aGUgcmVxdWVzdCBiZSByZXNwb25kZWQgdG8g Ki8KLSAgICAgICAgLyogZWl0aGVyIGJ5IGNoYW5naW5nIHN0YXRlcyBvciBieSByZXBvcnRpbmcg dGhlIGN1cnJlbnQgICovCi0gICAgICAgIC8qIHN0YXRlLiAgKi8KLQotICAgICAgICAvKiBXZSBu ZWVkIHRvIHByb3ZpZGUgdGhlIHVzZXIgc29tZSB3YXkgb2YgZGljdGF0aW5nIHdoYXQgKi8KLSAg ICAgICAgLyogdGhlIHBvbGljaWVzIHNob3VsZCBiZS4gIEZvciBpbnN0YW5jZSwgaWYgd2UgYXJl IGluICAgICovCi0gICAgICAgIC8qIENPTk5FQ1QgbW9kZSB3aXRoIGF1dG9kb3dubG9hZCBPTiBh bmQgd2UgZ2V0IGEgUkVRLVNUT1AqLwotICAgICAgICAvKiB3aGF0IHNob3VsZCB0aGUgcHJvcGVy IHJlc3BvbnNlIGJlPyAgICAgICAgICAgICAgICAgICAgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAg ICAgIGlmIChpbnNlcnZlcgotI2lmZGVmIENLX0FVVE9ETAotICAgICAgICAgICAgfHwgIWxvY2Fs ICYmIGNtZGFkbAotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotICAgICAgICAgICAgKSB7Ci0jaWZk ZWYgQ0tfQVVUT0RMCi0gICAgICAgICAgICBjbWRhZGwgPSAwOyAgICAgICAgICAgICAgICAgLyog VHVybiBvZmYgcGFja2V0IGRldGVjdGlvbiAqLwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotICAg ICAgICAgICAgdG5fc2lrcyhLRVJNSVRfUkVTUF9TVE9QKTsKLSAgICAgICAgfSBlbHNlIGlmIChz ZXJ2ZXIpIHsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgZW5fZmluOwotICAgICAgICAgICAgaWYg KGVuX2ZpbikgeyAgICAgICAgICAgICAgIC8qIElmIHRoZSBzZXJ2ZXIgaXMgYWxsb3dlZCB0byBz dG9wICovCi0gICAgICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfUkVTUF9TVE9QKTsKLSAgICAg ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBXZSBhcmUgbm90IGFsbG93ZWQg dG8gc3RvcCAqLwotICAgICAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1JFU1BfU1RBUlQpOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0jaWZuZGVmIElLU0RPTkxZCi0jaWZkZWYgQ0tfQVVU T0RMCi0jaWZkZWYgT1MyCi0gICAgICAgIGVsc2UgaWYgKGxvY2FsICYmIChJc0Nvbm5lY3RNb2Rl KCkgJiYgYXV0b2RsKSB8fAotICAgICAgICAgICAgICAgICAgICghSXNDb25uZWN0TW9kZSgpICYm IGluYXV0b2RsKQotICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgLyogSWYgd2Ug YXJlIGEgcHNldWRvLXNlcnZlciBhbmQgdGhlIG90aGVyIHNpZGUgcmVxdWVzdHMgKi8KLSAgICAg ICAgICAgIC8qIHRoYXQgd2Ugc3RvcCwgdGVsbCB0aGVuIHRoYXQgd2UgaGF2ZSBldmVuIHRob3Vn aCB3ZSAgICovCi0gICAgICAgICAgICAvKiBoYXZlIG5vdC4gIE90aGVyd2lzZSwgdGhlIG90aGVy IHNpZGUgbWlnaHQgcmVmdXNlIHRvICAqLwotICAgICAgICAgICAgLyogZW50ZXIgU0VSVkVSIG1v ZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAg dG5fc2lrcyhLRVJNSVRfUkVTUF9TVE9QKTsgIC8qIFNUT1AgKi8KLSAgICAgICAgfQotI2Vsc2Ug LyogT1MyICovCi0gICAgICAgIGVsc2UgaWYgKChsb2NhbCAmJiB3aGF0ID09IFdfQ09OTkVDVCAm JiBhdXRvZGwpIHx8Ci0gICAgICAgICAgICAgICAgICAgKGxvY2FsICYmIHdoYXQgIT0gV19DT05O RUNUICYmIGluYXV0b2RsKQotICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgLyog SWYgd2UgYXJlIGEgcHNldWRvLXNlcnZlciBhbmQgdGhlIG90aGVyIHNpZGUgcmVxdWVzdHMgKi8K LSAgICAgICAgICAgIC8qIHRoYXQgd2Ugc3RvcCwgdGVsbCB0aGVuIHRoYXQgd2UgaGF2ZSBldmVu IHRob3VnaCB3ZSAgICovCi0gICAgICAgICAgICAvKiBoYXZlIG5vdC4gIE90aGVyd2lzZSwgdGhl IG90aGVyIHNpZGUgbWlnaHQgcmVmdXNlIHRvICAqLwotICAgICAgICAgICAgLyogZW50ZXIgU0VS VkVSIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAg ICAgICAgdG5fc2lrcyhLRVJNSVRfUkVTUF9TVE9QKTsgIC8qIFNUT1AgKi8KLSAgICAgICAgfQot I2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotI2VuZGlmIC8qIElLU0RP TkxZICovCi0gICAgICAgIGVsc2UKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgewotICAg ICAgICAgICAgLyogSWYgd2UgYXJlIG5vdCBjdXJyZW50bHkgaW4gYW55IG1vZGUgdGhhdCBhY2Nl cHRzICovCi0gICAgICAgICAgICAvKiBLZXJtaXQgcGFja2V0cyB0aGVuIG9mIGNvdXJzZSByZXBv cnQgdGhhdCB3ZSBhcmUgKi8KLSAgICAgICAgICAgIC8qIG5vdCBiZWluZyBhIEtlcm1pdCBzZXJ2 ZXIuICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICB0bl9zaWtzKEtFUk1J VF9SRVNQX1NUT1ApOyAgLyogU1RPUCAqLwotICAgICAgICB9Ci0gICAgICAgIHJldHVybig0KTsK LQotICAgICAgY2FzZSBLRVJNSVRfU09QOiB7ICAgICAgICAgICAgICAgIC8qIFNPUCAqLwotI2lm bmRlZiBOT1hGRVIKLSAgICAgICAgICBleHRlcm4gQ0hBUiBzdGNocjsgICAgICAgICAgICAvKiBJ bmNvbWluZyBTT1AgY2hhcmFjdGVyICovCi0gICAgICAgICAgc3RjaHIgPSBzYlsxXTsKLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0 LnNvcCA9IDE7Ci0gICAgICAgICAgcmV0dXJuKDQpOwotICAgICAgfQotCi0gICAgICBjYXNlIEtF Uk1JVF9SRVNQX1NUQVJUOiAgICAgICAgICAgLyogU1RBUlQgKi8KLSAgICAgICAgVEVMT1BUX1NC KFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ID0gMTsKLSAgICAgICAgaWYgKFRFTE9QVF9T QihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfcmVxX3N0YXJ0KSB7Ci0gICAgICAgICAgICBURUxP UFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3JlcV9zdGFydCA9IDA7Ci0gICAgICAgIH0g ZWxzZSBpZiAoVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RvcCkgewot ICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBpc3N1ZWQgYSByZXF1ZXN0IHRvIHN0b3AgYSBLZXJt aXQgU2VydmVyICovCi0gICAgICAgICAgICAvKiBhbmQgdGhlIHJlc3BvbnNlIGlzIFN0YXJ0LCB0 aGVuIHdlIG11c3QgcmVwb3J0IHRoaXMgKi8KLSAgICAgICAgICAgIC8qIHRvIHRoZSBjYWxsZXIu ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgVEVM T1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RvcCA9IDA7Ci0gICAgICAgIH0K LSAgICAgICAgcmV0dXJuKDQpOwotCi0gICAgICBjYXNlIEtFUk1JVF9SRVNQX1NUT1A6ICAgICAg ICAgICAgLyogU1RPUCAqLwotICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0 LnVfc3RhcnQgPSAwOwotICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1p dC5tZV9yZXFfc3RhcnQpIHsKLSAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5r ZXJtaXQubWVfcmVxX3N0YXJ0ID0gMDsKLSAgICAgICAgICAgIC8qIElmIHdlIGhhdmUgaXNzdWVk IGEgcmVxdWVzdCB0byBzdGFydCBhIEtlcm1pdCBTZXJ2ZXIgKi8KLSAgICAgICAgICAgIC8qIGFu ZCB0aGUgcmVzcG9uc2UgaXMgU3RvcCwgdGhlbiB3ZSBtdXN0IHJlcG9ydCB0aGlzICAgKi8KLSAg ICAgICAgICAgIC8qIHRvIHRoZSBjYWxsZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi8KLSAgICAgICAgfSBlbHNlIGlmIChURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCku a2VybWl0Lm1lX3JlcV9zdG9wKSB7Ci0gICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1J VCkua2VybWl0Lm1lX3JlcV9zdG9wID0gMDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4oNCk7 Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybigwKTsKLQotICAgIH0gLyogc3dpdGNo IChzYlswXSkgKi8KLX0KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0KLS8qIEluaXRpYWxpemUg dGVsbmV0IHNldHRpbmdzIC0gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBNRSBhbmQgVSBtb2RlcyAq LwotaW50Ci10bl9zZXRfbW9kZXMoKSB7Ci0gICAgaW50IG9wdCxjbWQ7Ci0jaWZkZWYgQ0tfRk9S V0FSRF9YCi0gICAgaW50IHg7Ci0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0jaWZkZWYgQ0tf RU5WSVJPTk1FTlQKLSAgICB7Ci0gICAgICAgIGludCBpLGo7Ci0gICAgICAgIGZvciAoaSA9IDA7 IGkgPCA4OyBpKyspIHsKLSAgICAgICAgICAgIHRuX2Vudl91c2VydmFyW2ldWzBdID0gTlVMTDsK LSAgICAgICAgICAgIHRuX2Vudl91c2VydmFyW2ldWzFdID0gTlVMTDsKLSAgICAgICAgfQotICAg IH0KLSNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotCi0gICAgLyogaW5pdGlhbGl6ZSBhbGwg b3B0aW9ucyB0byByZWZ1c2UgaW4gYm90aCBkaXJlY3Rpb25zICovCi0gICAgZm9yIChvcHQgPSAw OyBvcHQgPCBOVEVMT1BUUzsgb3B0KyspIHsKLSAgICAgICAgVEVMT1BUX01FKG9wdCkgPSAwOwot ICAgICAgICBURUxPUFRfVShvcHQpICA9IDA7Ci0gICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJ TEwob3B0KSA9IDA7Ci0gICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKG9wdCkgICA9IDA7Ci0g ICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQob3B0KSA9IDA7Ci0gICAgICAgIFRFTE9QVF9V TkFOU1dFUkVEX0RPTlQob3B0KSAgID0gMDsKLSAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfU0Io b3B0KSAgID0gMDsKLSAgICAgICAgVEVMT1BUX01FX01PREUob3B0KSA9IFROX05HX1JGOwotICAg ICAgICBURUxPUFRfVV9NT0RFKG9wdCkgPSBUTl9OR19SRjsKLSAgICAgICAgVEVMT1BUX0RFRl9T X01FX01PREUob3B0KSA9IFROX05HX1JGOwotICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKG9w dCkgPSBUTl9OR19SRjsKLSAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUob3B0KSA9IFROX05H X1JGOwotICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKG9wdCkgPSBUTl9OR19SRjsKLSAgICAg ICAgZm9yIChjbWQgPSAwOyBjbWQgPCA0OyBjbWQgKyspCi0gICAgICAgICAgdG5jbnRzW1RFTE9Q VF9JTkRFWChvcHQpXVtjbWRdID0gMDsKLSAgICB9Ci0jaWZkZWYgSUtTX09QVElPTgotICAgIFRF TE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgPSAwOwotICAgIFRFTE9QVF9T QihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCA9IDA7Ci0gICAgVEVMT1BUX1NCKFRFTE9Q VF9LRVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RhcnQgPSAwOwotICAgIFRFTE9QVF9TQihURUxPUFRf S0VSTUlUKS5rZXJtaXQubWVfcmVxX3N0b3AgPSAwOwotICAgIFRFTE9QVF9TQihURUxPUFRfS0VS TUlUKS5rZXJtaXQuc29wID0gMDsKLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0KLSNpZmRlZiBD S19FTkNSWVBUSU9OCi0gICAgVEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNyeXB0LnN0 b3AgPSAwOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQotI2lmZGVmICBDS19OQVdTCi0g ICAgVEVMT1BUX1NCKFRFTE9QVF9OQVdTKS5uYXdzLnggPSAwOwotICAgIFRFTE9QVF9TQihURUxP UFRfTkFXUykubmF3cy55ID0gMDsKLSNlbmRpZiAvKiBDS19OQVdTICovCi0KLSNpZmRlZiBDS19T U0wKLSAgICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLnVfZm9sbG93cyA9 IDA7Ci0gICAgVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dz ID0gMDsKLSAgICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLmF1dGhfcmVx dWVzdCA9IDA7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICAvKiBOb3cgc2V0IHRoZSBvbmVz IHdlIHdhbnQgdG8gYWNjZXB0IHRvIHRoZSBwcm9wZXIgdmFsdWVzICovCi0gICAgVEVMT1BUX0RF Rl9TX01FX01PREUoVEVMT1BUX1NHQSkgPSBUTl9OR19SUTsKLSAgICBURUxPUFRfREVGX1NfVV9N T0RFKFRFTE9QVF9TR0EpID0gVE5fTkdfUlE7Ci0gICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVM T1BUX1NHQSkgPSBUTl9OR19BQzsKLSAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9TR0Ep ID0gVE5fTkdfQUM7Ci0KLSAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfQklOQVJZKSA9 IFROX05HX0FDOwotICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0JJTkFSWSkgPSBUTl9O R19BQzsKLSAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQklOQVJZKSA9IFROX05HX0FD OwotICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0JJTkFSWSkgPSBUTl9OR19BQzsKLQot ICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9MT0dPVVQpID0gVE5fTkdfQUM7Ci0gICAg VEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfTE9HT1VUKSA9IFROX05HX0FDOwotICAgIFRFTE9Q VF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9MT0dPVVQpID0gVE5fTkdfQUM7Ci0gICAgVEVMT1BUX0RF Rl9DX1VfTU9ERShURUxPUFRfTE9HT1VUKSA9IFROX05HX0FDOwotCi0jaWZkZWYgSUtTX09QVElP TgotICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9LRVJNSVQpID0gVE5fTkdfUlE7Ci0g ICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfS0VSTUlUKSA9IFROX05HX1JROwotICAgIFRF TE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9LRVJNSVQpID0gVE5fTkdfUlE7Ci0gICAgVEVMT1BU X0RFRl9DX1VfTU9ERShURUxPUFRfS0VSTUlUKSA9IFROX05HX1JROwotI2VuZGlmIC8qIElLU19P UFRJT04gKi8KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICBURUxPUFRfREVGX1NfVV9NT0RF KFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JROwotICAgIFRFTE9QVF9ERUZfU19NRV9NT0RF KFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JROwotICAgIFRFTE9QVF9ERUZfQ19VX01PREUo VEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUlE7Ci0gICAgVEVMT1BUX0RFRl9DX01FX01PREUo VEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUlE7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LwotCi0gICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX0VDSE8pID0gVE5fTkdfUlE7Ci0j aWZkZWYgSUtTRAotICAgIGlmICggIWluc2VydmVyICkKLSNlbmRpZiAvKiBJS1NEICovCi0gICAg ICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9UVFlQRSkgPSBUTl9OR19SUTsKLQotI2lmZGVm IENLX0VOVklST05NRU5UCi0gICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfTkVXRU5WSVJP TikgPSBUTl9OR19SUTsKLSNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotCi0jaWZkZWYgQ0tf QVVUSEVOVElDQVRJT04KLSAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5USUNB VElPTikgPSBUTl9OR19SUTsKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotCi0jaWZk ZWYgQ0tfU1NMCi0gICAgaWYgKGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSkgewotICAgICAgICBU RUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUlE7Ci0gICAgICAg IFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfQUM7Ci0gICAg fQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0jaWZkZWYgQ0tfTkFXUwotICAgIFRFTE9QVF9ERUZf U19VX01PREUoVEVMT1BUX05BV1MpID0gVE5fTkdfUlE7Ci0jZW5kaWYgLyogQ0tfTkFXUyAqLwot Ci0gICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRUNITykgPSBUTl9OR19BQzsKLSAgICBU RUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfVFRZUEUpID0gVE5fTkdfUlE7Ci0KLSNpZmRlZiBD S19FTlZJUk9OTUVOVAotICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9ORVdFTlZJUk9O KSA9IFROX05HX1JROwotI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCi0KLSNpZmRlZiBDS19B VVRIRU5USUNBVElPTgotICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNB VElPTikgPSBUTl9OR19SUTsKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotCi0jaWZk ZWYgQ0tfTkFXUwotICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9OQVdTKSA9IFROX05H X1JROwotI2VuZGlmIC8qIENLX05BV1MgKi8KLQotI2lmZGVmIENLX1NORExPQwotICAgIFRFTE9Q VF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9TTkRMT0MpID0gVE5fTkdfUlE7Ci0jZW5kaWYgLyogQ0tf U05ETE9DICovCi0KLSNpZmRlZiBDS19GT1JXQVJEX1gKLSAgICBURUxPUFRfREVGX0NfVV9NT0RF KFRFTE9QVF9GT1JXQVJEX1gpID0gVE5fTkdfQUM7Ci0gICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JX QVJEX1gpLmZvcndhcmRfeC5saXN0ZW5fc29ja2V0ID0gLTE7Ci0gICAgZm9yICh4ID0gMDsgeCA8 IE1BWEZXRFg7IHgrKykgewotICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3 YXJkX3guY2hhbm5lbFt4XS5mZCA9IC0xOwotICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FS RF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5pZCA9IC0xOwotICAgICAgIFRFTE9QVF9TQihURUxP UFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5uZWVkX3RvX3NlbmRfeGF1dGggPSAw OwotICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4 XS5zdXNwZW5kID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0KLSNpZmRl ZiBUTl9DT01QT1JUCi0gICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0NPTVBPUlQpID0g VE5fTkdfUlE7Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotCi0gICAgLyogU2V0IHRoZSBpbml0 aWFsIHZhbHVlcyBmb3IgY3VycmVudGx5IGtub3duIG1vZGUgKi8KLSAgICBmb3IgKG9wdCA9IFRF TE9QVF9GSVJTVDsgb3B0IDw9IFRFTE9QVF9MQVNUOyBvcHQrKykgewotICAgICAgICBpZiAoVEVM T1BUX09LKG9wdCkpIHsKLSAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKG9wdCkgPSBzc3RlbG5l dCA/Ci0gICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKG9wdCkgOgotICAgICAgICAg ICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKG9wdCk7Ci0gICAgICAgICAgICBURUxPUFRfVV9N T0RFKG9wdCkgPSBzc3RlbG5ldCA/Ci0gICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUo b3B0KSA6Ci0gICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShvcHQpOwotICAgICAg ICB9Ci0gICAgfQotICAgIHJldHVybigxKTsKLX0KLQotCi0vKiBTZW5kIERlbGF5ZWQgU3VibmVn b3RpYXRpb25zICovCi0KLVZPSUQKLXRuX3Nkc2IoKSB7Ci0gICAgLyogaWYgKCFJU19URUxORVQo KSkgcmV0dXJuOyAqLwotCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfVFRZUEUpLnRlcm0ubmVl ZF90b19zZW5kKSB7Ci0gICAgICAgIHRuX3N0dHlwKCk7Ci0gICAgICAgIFRFTE9QVF9TQihURUxP UFRfVFRZUEUpLnRlcm0ubmVlZF90b19zZW5kID0gMDsKLSAgICB9Ci0jaWZkZWYgQ0tfRU5WSVJP Tk1FTlQKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYubmVlZF90b19z ZW5kICYmCi0gICAgICAgIFRFTE9QVF9TQihURUxPUFRfTkVXRU5WSVJPTikuZW52LnN0cikgewot ICAgICAgICB0bl9zbmVudigoQ0hBUiAqKVRFTE9QVF9TQihURUxPUFRfTkVXRU5WSVJPTikuZW52 LnN0ciwKLSAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYu bGVuKTsKLSAgICAgICAgZnJlZShURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVudi5zdHIp OwotICAgICAgICBURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVudi5zdHI9TlVMTDsKLSAg ICAgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYubGVuPTA7Ci0gICAgICAgIFRF TE9QVF9TQihURUxPUFRfTkVXRU5WSVJPTikuZW52Lm5lZWRfdG9fc2VuZCA9IDA7Ci0gICAgfQot I2lmZGVmIENLX1hESVNQTE9DCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfWERJU1BMT0MpLnhk aXNwLm5lZWRfdG9fc2VuZCkgewotICAgICAgICB0bl9zeGRpc3Bsb2MoKTsKLSAgICAgICAgVEVM T1BUX1NCKFRFTE9QVF9YRElTUExPQykueGRpc3AubmVlZF90b19zZW5kID0gMDsKLSAgICB9Ci0j ZW5kaWYgLyogQ0tfWERJU1BMT0MgKi8KLSNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotI2lm ZGVmIENLX05BV1MKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9OQVdTKS5uYXdzLm5lZWRfdG9f c2VuZCkgewotICAgICAgICB0bl9zbmF3cygpOwotICAgICAgICBURUxPUFRfU0IoVEVMT1BUX05B V1MpLm5hd3MubmVlZF90b19zZW5kID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfTkFXUyAqLwot I2lmZGVmIENLX1NORExPQwotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NORExPQykuc25kbG9j Lm5lZWRfdG9fc2VuZCkgewotICAgICAgICB0bl9zbmRsb2MoKTsKLSAgICAgICAgVEVMT1BUX1NC KFRFTE9QVF9TTkRMT0MpLnNuZGxvYy5uZWVkX3RvX3NlbmQgPSAwOwotICAgIH0KLSNlbmRpZiAv KiBDS19TTkRMT0MgKi8KLSNpZmRlZiBDS19GT1JXQVJEX1gKLSAgICBpZiAoVEVMT1BUX1NCKFRF TE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5uZWVkX3RvX3NlbmQpIHsKLSAgICAgICAgaWYgKCBz c3RlbG5ldCApCi0gICAgICAgICAgICBmd2R4X3NlbmRfb3B0aW9ucygpOwotICAgICAgICBURUxP UFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lm5lZWRfdG9fc2VuZCA9IDA7Ci0gICAg fQotI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLwotI2lmZGVmIFROX0NPTVBPUlQKLSAgICBpZiAo VEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0Lm5lZWRfdG9fc2VuZCkgewotICAgICAg ICB0bl9zbmRjb21wb3J0KCk7Ci0gICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29t cG9ydC5uZWVkX3RvX3NlbmQgPSAwOwotICAgIH0KLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0K LX0KLQotaW50Ci10bl9yZXNldCgpIHsKLSAgICBpbnQgeCxvcHQsY21kOwotCi0gICAgLyogaWYg KCFJU19URUxORVQoKSkgcmV0dXJuKDEpOyAqLwotCi0gICAgdG5fd2FpdF9pZHggPSAwOyAgICAg ICAgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIHRuX3B1c2goKSBidWZmZXIgKi8KLSAgICB0bl93 YWl0X3RtbyA9IFROX1RJTUVPVVQ7ICAgICAgICAgICAvKiBSZXNldCB3YWl0IHRpbWVyIHN0YXRz ICovCi0KLSAgICBuZmxhZyA9IDA7Ci0KLSAgICAvKiBSZXNldCB0aGUgVEVMTkVUIE9QVElPTlMg Y291bnRzICovCi0gICAgZm9yIChvcHQgPSBURUxPUFRfRklSU1Q7IG9wdCA8PSBURUxPUFRfTEFT VDsgb3B0KyspIHsKLSAgICAgICAgaWYgKFRFTE9QVF9PSyhvcHQpKSB7Ci0gICAgICAgICAgICBU RUxPUFRfTUUob3B0KSA9IDA7Ci0gICAgICAgICAgICBURUxPUFRfVShvcHQpICA9IDA7Ci0gICAg ICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKG9wdCkgPSAwOwotICAgICAgICAgICAgVEVM T1BUX1VOQU5TV0VSRURfRE8ob3B0KSAgID0gMDsKLSAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dF UkVEX1dPTlQob3B0KSA9IDA7Ci0gICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ET05UKG9w dCkgICA9IDA7Ci0gICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9TQihvcHQpICAgPSAwOwot ICAgICAgICAgICAgVEVMT1BUX01FX01PREUob3B0KSA9IHNzdGVsbmV0ID8KLSAgICAgICAgICAg ICAgVEVMT1BUX0RFRl9TX01FX01PREUob3B0KSA6Ci0gICAgICAgICAgICAgICAgVEVMT1BUX0RF Rl9DX01FX01PREUob3B0KTsKLSAgICAgICAgICAgIFRFTE9QVF9VX01PREUob3B0KSA9IHNzdGVs bmV0ID8KLSAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShvcHQpIDoKLSAgICAgICAg ICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKG9wdCk7Ci0KLSNpZmRlZiBERUJVRwotICAgICAg ICAgICAgaWYgKGRlYmxvZykgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoVEVMT1BUX01FX01P REUob3B0KSkgewotICAgICAgICAgICAgICAgICAgY2FzZSBUTl9OR19SRjoKLSAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjExMCwidG5faW5pIE1FIFJFRlVTRSAiLFRFTE9QVChvcHQpLDApOwot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVE5fTkdf QUM6Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInRuX2luaSBNRSBBQ0NFUFQgIixU RUxPUFQob3B0KSwwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICBjYXNlIFROX05HX1JROgotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bl9p bmkgTUUgUkVRVUVTVCIsVEVMT1BUKG9wdCksMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgY2FzZSBUTl9OR19NVToKLSAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMCwidG5faW5pIE1FIFJFUVVJUkUiLFRFTE9QVChvcHQpLDApOwotICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3dp dGNoIChURUxPUFRfVV9NT0RFKG9wdCkpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVE5fTkdf UkY6Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInRuX2luaSBVICBSRUZVU0UgIixU RUxPUFQob3B0KSwwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICBjYXNlIFROX05HX0FDOgotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bl9p bmkgVSAgQUNDRVBUICIsVEVMT1BUKG9wdCksMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgY2FzZSBUTl9OR19SUToKLSAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMCwidG5faW5pIFUgIFJFUVVFU1QiLFRFTE9QVChvcHQpLDApOwotICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVE5fTkdfTVU6Ci0gICAg ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInRuX2luaSBVICBSRVFVSVJFIixURUxPUFQob3B0 KSwwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgICAgICBmb3IgKGNtZCA9IDA7 IGNtZCA8IDQ7IGNtZCArKykKLSAgICAgICAgICAgICAgdG5jbnRzW1RFTE9QVF9JTkRFWChvcHQp XVtjbWRdID0gMDsKLSAgICAgICAgfQotICAgIH0KLSNpZmRlZiBDS19FTlZJUk9OTUVOVAotICAg IGlmICghdG5fZW52X2ZsZykgewotICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfTkVXRU5W SVJPTikgPSBUTl9OR19SRjsKLSAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfTkVXRU5WSVJP TikgPSBUTl9OR19SRjsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KLSNpZmRl ZiBDS19TTkRMT0MKLSAgICBpZiAoIXRuX2xvYykKLSAgICAgICAgVEVMT1BUX0RFRl9DX01FX01P REUoVEVMT1BUX1NORExPQykgPSBUTl9OR19SRjsKLSNlbmRpZiAvKiBDS19TTkRMT0MgKi8KLSNp ZmRlZiBJS1NfT1BUSU9OCi0gICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9z dGFydCA9IDA7Ci0gICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ID0g MDsKLSAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3JlcV9zdGFydCA9IDA7 Ci0gICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RvcCA9IDA7Ci0g ICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5zb3AgPSAwOwotI2VuZGlmIC8qIElL U19PUFRJT04gKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgVEVMT1BUX1NCKFRFTE9QVF9F TkNSWVBUSU9OKS5lbmNyeXB0LnN0b3AgPSAwOwotICAgIFRFTE9QVF9TQihURUxPUFRfRU5DUllQ VElPTikuZW5jcnlwdC5uZWVkX3RvX3NlbmQgPSAwOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04g Ki8KLSNpZmRlZiAgQ0tfTkFXUwotICAgIFRFTE9QVF9TQihURUxPUFRfTkFXUykubmF3cy5uZWVk X3RvX3NlbmQgPSAwOwotICAgIFRFTE9QVF9TQihURUxPUFRfTkFXUykubmF3cy54ID0gMDsKLSAg ICBURUxPUFRfU0IoVEVMT1BUX05BV1MpLm5hd3MueSA9IDA7Ci0jZW5kaWYgLyogQ0tfTkFXUyAq LwotICAgIFRFTE9QVF9TQihURUxPUFRfVFRZUEUpLnRlcm0ubmVlZF90b19zZW5kID0gMDsKLSAg ICBURUxPUFRfU0IoVEVMT1BUX1RUWVBFKS50ZXJtLnR5cGVbMF0gPSAnXDAnOwotI2lmZGVmIENL X0VOVklST05NRU5UCi0gICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYubmVlZF90 b19zZW5kID0gMDsKLSAgICBpZiAodG5fZmlyc3QpCi0gICAgICAgIFRFTE9QVF9TQihURUxPUFRf TkVXRU5WSVJPTikuZW52LnN0cj1OVUxMOwotICAgIGVsc2UgaWYgKFRFTE9QVF9TQihURUxPUFRf TkVXRU5WSVJPTikuZW52LnN0cikgewotICAgICAgICBmcmVlKFRFTE9QVF9TQihURUxPUFRfTkVX RU5WSVJPTikuZW52LnN0cik7Ci0gICAgICAgIFRFTE9QVF9TQihURUxPUFRfTkVXRU5WSVJPTiku ZW52LnN0cj1OVUxMOwotICAgIH0KLSAgICBURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVu di5sZW49MDsKLSNpZmRlZiBDS19YRElTUExPQwotICAgIFRFTE9QVF9TQihURUxPUFRfWERJU1BM T0MpLnhkaXNwLm5lZWRfdG9fc2VuZCA9IDA7Ci0jZW5kaWYgLyogQ0tfWERJU1BMT0MgKi8KLSNl bmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotI2lmZGVmIENLX1NORExPQwotICAgIFRFTE9QVF9T QihURUxPUFRfU05ETE9DKS5zbmRsb2MubmVlZF90b19zZW5kID0gMDsKLSNlbmRpZiAvKiBDS19T TkRMT0MgKi8KLSNpZmRlZiBDS19GT1JXQVJEX1gKLSAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldB UkRfWCkuZm9yd2FyZF94Lm5lZWRfdG9fc2VuZCA9IDA7Ci0gICAgVEVMT1BUX1NCKFRFTE9QVF9G T1JXQVJEX1gpLmZvcndhcmRfeC5saXN0ZW5fc29ja2V0ID0gLTE7Ci0gICAgZm9yICh4ID0gMDsg eCA8IE1BWEZXRFg7IHgrKykgewotICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5m b3J3YXJkX3guY2hhbm5lbFt4XS5mZCA9IC0xOwotICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9S V0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5pZCA9IC0xOwotICAgICAgIFRFTE9QVF9TQihU RUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5uZWVkX3RvX3NlbmRfeGF1dGgg PSAwOwotICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5l bFt4XS5zdXNwZW5kID0gMDsKLSAgICB9Ci0gICAgLyogUmVzZXQgWGF1dGggZGF0YSAqLwotICAg IGlmICggcmVhbF94YXV0aCApIHsKLSAgICAgICAgWGF1RGlzcG9zZUF1dGgocmVhbF94YXV0aCk7 Ci0gICAgICAgIHJlYWxfeGF1dGggPSBOVUxMOwotICAgIH0KLSAgICBpZiAoIGZha2VfeGF1dGgu bmFtZSApCi0gICAgICAgIGZyZWUoZmFrZV94YXV0aC5uYW1lKTsKLSAgICBpZiAoIGZha2VfeGF1 dGguZGF0YSApCi0gICAgICAgIGZyZWUoZmFrZV94YXV0aC5kYXRhKTsKLSAgICBpZiAoIGZha2Vf eGF1dGguYWRkcmVzcyApCi0gICAgICAgIGZyZWUoZmFrZV94YXV0aC5hZGRyZXNzKTsKLSAgICBp ZiAoIGZha2VfeGF1dGgubnVtYmVyICkKLSAgICAgICAgZnJlZShmYWtlX3hhdXRoLm51bWJlcik7 Ci0gICAgbWVtc2V0KCZmYWtlX3hhdXRoLDAsc2l6ZW9mKGZha2VfeGF1dGgpKTsKLSNpZmRlZiBO VAotICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gudGhyZWFkX3N0YXJ0 ZWQgPSAwOwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0jaWZk ZWYgQ0tfU1NMCi0gICAgaWYgKHRsc19vbmx5X2ZsYWcgfHwgc3NsX29ubHlfZmxhZykgewotICAg ICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOwotICAgICAg ICBURUxPUFRfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7Ci0gICAgfQotICAg IFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMudV9mb2xsb3dzID0gMDsKLSAg ICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MgPSAwOwot ICAgIFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMuYXV0aF9yZXF1ZXN0ID0g MDsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICBpZiAo IWNrX2NyeXB0X2lzX2luc3RhbGxlZCgpCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIHx8IHRsc19v bmx5X2ZsYWcgfHwgc3NsX29ubHlfZmxhZwotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAp IHsKLSAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7 Ci0gICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0g ICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQotI2lmZGVmIFROX0NPTVBPUlQKLSAg ICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQubmVlZF90b19zZW5kID0gMDsKLSAg ICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOwotICAg IFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9tcyA9IDA7Ci0gICAg dG5jX2luaXQoKTsKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0KLSAgICB0bl9maXJzdCA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBsb25nZXIgdGhlIGZpcnN0IHRpbWUgaW5pdCAq LwotCi0jaWZkZWYgT1MyCi0gICAgdHRudW0gPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAg LyogUmVzZXQgVGVybVR5cGUgbmVnb3RpYXRpb24gKi8KLSAgICB0dG51bWVuZCA9IDA7Ci0jZW5k aWYgLyogT1MyICovCi0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotdG5fc3RhcnQoKSB7Ci0g ICAgaW50IHdhaXQsIHgsIG9wdDsKLQotICAgIC8qIGlmICghSVNfVEVMTkVUKCkpIHJldHVybigw KTsgKi8KLQotICAgIGlmICh0bl9pbml0ICYmIHRuX2JlZ3VuKQotICAgICAgICByZXR1cm4oMCk7 Ci0gICAgdG5fYmVndW4gPSAxOwotCi0gICAgZGVidWcoRjExMSwidG5fc3RhcnQiLCJzc3RlbG5l dCIsc3N0ZWxuZXQpOwotICAgIHdhaXQgPSAwOwotICAgIGlmICh0bl9kdXBsZXgpICB7Ci0gICAg ICAgIG9sZHBsZXggPSBkdXBsZXg7ICAgICAgICAgICAgICAgLyogc2F2ZSBvbGQgZHVwbGV4IHZh bHVlICovCi0gICAgICAgIGR1cGxleCA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHNl dCB0byBoYWxmIGR1cGxleCBmb3IgdGVsbmV0ICovCi0gICAgfQotI2lmZGVmIENLX1NTTAotICAg IGlmICghVEVMT1BUX01FKFRFTE9QVF9TVEFSVF9UTFMpICYmCi0gICAgICAgIFRFTE9QVF9NRV9N T0RFKFRFTE9QVF9TVEFSVF9UTFMpID49IFROX05HX1JRKSB7Ci0gICAgICAgIGlmICh0bl9zb3B0 KFdJTEwsIFRFTE9QVF9TVEFSVF9UTFMpIDwgMCkKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAg ICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKFRFTE9QVF9TVEFSVF9UTFMpID0gMTsKLSAgICAg ICAgd2FpdCA9IDE7Ci0gICAgfQotICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX1NUQVJUX1RMUykg JiYKLSAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSA+PSBUTl9OR19SUSkg ewotICAgICAgICBpZiAodG5fc29wdChETywgVEVMT1BUX1NUQVJUX1RMUykgPCAwKQotICAgICAg ICAgIHJldHVybigtMSk7Ci0gICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKFRFTE9QVF9TVEFS VF9UTFMpID0gMTsKLSAgICAgICAgd2FpdCA9IDE7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAq LwotCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICBkZWJ1ZyhGMTEwLCJ0bl9pbmkoKSBD S19BVVRIRU5USUNBVElPTiIsIiIsMCk7Ci0gICAgaWYgKHRuX2luaXQpICAgICAgICAgICAgICAg IC8qIHRuX2luaSgpIG1pZ2h0IGJlIGNhbGxlZCByZWN1cnNpdmVseSAqLwotICAgICAgcmV0dXJu KDApOwotICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9BVVRIRU5USUNBVElPTikgJiYKLSAgICAg ICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA+PSBUTl9OR19SUSkgewot ICAgICAgICBpZiAodG5fc29wdChXSUxMLCBURUxPUFRfQVVUSEVOVElDQVRJT04pIDwgMCkKLSAg ICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKFRFTE9Q VF9BVVRIRU5USUNBVElPTikgPSAxOwotICAgICAgICB3YWl0ID0gMTsKLSAgICB9Ci0gICAgaWYg KCFURUxPUFRfVShURUxPUFRfQVVUSEVOVElDQVRJT04pICYmCi0gICAgICAgIFRFTE9QVF9VX01P REUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA+PSBUTl9OR19SUSkgewotICAgICAgICBpZiAodG5f c29wdChETywgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA8IDApCi0gICAgICAgICAgcmV0dXJuKC0x KTsKLSAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9 IDE7Ci0gICAgICAgIHdhaXQgPSAxOwotICAgIH0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAg aWYgKFRFTE9QVF9VX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9PSBUTl9OR19SRiAmJgot ICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9PSBUTl9OR19S RikgewotICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19S RjsKLSAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsK LSAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJ Q0FUSU9OICovCi0KLSNpZmRlZiBDS19OQVdTCi0jaWZuZGVmIE5PTE9DQUwKLSAgICBkZWJ1ZyhG MTEwLCJ0bl9pbmkoKSBDS19OQVdTICFOT0xPQ0FMIiwiIiwwKTsKLSAgICBpZiAoIXNzdGVsbmV0 KSB7Ci0gICAgICAgIC8qIENvbnNvbGUgdGVybWluYWwgc2NyZWVuIHJvd3MgYW5kIGNvbHVtbnMg Ki8KLSNpZmRlZiBPUzIKLSAgICAgICAgZGVidWcoRjEwMSwKLSAgICAgICAgICAgICAgInRuX2lu aSB0dF9yb3dzIDEiLAotICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgVnNjcm5HZXRI ZWlnaHQoVlRFUk0pLSh0dF9zdGF0dXNbVlRFUk1dPzE6MCkKLSAgICAgICAgICAgICAgKTsKLSAg ICAgICAgZGVidWcoRjEwMSwidG5faW5pIHR0X2NvbHMgMSIsIiIsVnNjcm5HZXRXaWR0aChWVEVS TSkpOwotICAgICAgICAvKiBOb3Qga25vd24geWV0ICovCi0gICAgICAgIGlmIChWc2NybkdldFdp ZHRoKFZURVJNKSA8IDAgfHwKLSAgICAgICAgICAgIFZzY3JuR2V0SGVpZ2h0KFZURVJNKS0odHRf c3RhdHVzW1ZURVJNXT8xOjApIDwgMCkgewotICAgICAgICAgICAgdHRnd3NpeigpOyAgICAgICAg ICAgICAgICAgIC8qIFRyeSB0byBmaW5kIG91dCAqLwotICAgICAgICB9Ci0gICAgICAgIGRlYnVn KEYxMDEsCi0gICAgICAgICAgICAgICJ0bl9pbmkgdHRfcm93cyAyIiwKLSAgICAgICAgICAgICAg IiIsCi0gICAgICAgICAgICAgIFZzY3JuR2V0SGVpZ2h0KFZURVJNKS0odHRfc3RhdHVzW1ZURVJN XT8xOjApCi0gICAgICAgICAgICAgICk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInRuX2luaSB0dF9j b2xzIDIiLCIiLFZzY3JuR2V0V2lkdGgoVlRFUk0pKTsKLSAgICAgICAgLyogTm93IGRvIHdlIGtu b3c/ICovCi0gICAgICAgIGlmIChWc2NybkdldFdpZHRoKFZURVJNKSA+IDAgJiYKLSAgICAgICAg ICAgIFZzY3JuR2V0SGVpZ2h0KFZURVJNKS0odHRfc3RhdHVzW1ZURVJNXT8xOjApID4gMCkgewot ICAgICAgICAgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX05BV1MpICYmCi0gICAgICAgICAgICAg ICAgVEVMT1BUX01FX01PREUoVEVMT1BUX05BV1MpID49IFROX05HX1JRKSB7Ci0gICAgICAgICAg ICAgICAgaWYgKHRuX3NvcHQoV0lMTCwgVEVMT1BUX05BV1MpIDwgMCkKLSAgICAgICAgICAgICAg ICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChU RUxPUFRfTkFXUykgPSAxOwotICAgICAgICAgICAgICAgIHdhaXQgPSAxOwotICAgICAgICAgICAg fQotICAgICAgICB9Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgZGVidWcoRjEwMSwidG5faW5p IHR0X3Jvd3MgMSIsIiIsdHRfcm93cyk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInRuX2luaSB0dF9j b2xzIDEiLCIiLHR0X2NvbHMpOwotICAgICAgICBpZiAodHRfcm93cyA8IDAgfHwgdHRfY29scyA8 IDApIHsgLyogTm90IGtub3duIHlldCAqLwotICAgICAgICAgICAgdHRnd3NpeigpOyAgICAgICAg ICAgICAgICAgIC8qIFRyeSB0byBmaW5kIG91dCAqLwotICAgICAgICB9Ci0gICAgICAgIGRlYnVn KEYxMDEsInRuX2luaSB0dF9yb3dzIDIiLCIiLHR0X3Jvd3MpOwotICAgICAgICBkZWJ1ZyhGMTAx LCJ0bl9pbmkgdHRfY29scyAyIiwiIix0dF9jb2xzKTsKLSAgICAgICAgaWYgKHR0X3Jvd3MgPiAw ICYmIHR0X2NvbHMgPiAwKSB7IC8qIE5vdyBkbyB3ZSBrbm93PyAqLwotICAgICAgICAgICAgaWYg KCFURUxPUFRfTUUoVEVMT1BUX05BV1MpICYmCi0gICAgICAgICAgICAgICAgVEVMT1BUX01FX01P REUoVEVMT1BUX05BV1MpID49IFROX05HX1JRKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRuX3Nv cHQoV0lMTCwgVEVMT1BUX05BV1MpIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7 Ci0gICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChURUxPUFRfTkFXUykgPSAx OwotICAgICAgICAgICAgICAgIHdhaXQgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgfSBlbHNlCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIHsK LSAgICAgICAgaWYgKCFURUxPUFRfVShURUxPUFRfTkFXUykgJiYKLSAgICAgICAgICAgIFRFTE9Q VF9VX01PREUoVEVMT1BUX05BV1MpID49IFROX05HX1JRKSB7Ci0gICAgICAgICAgICBpZiAodG5f c29wdChETywgVEVMT1BUX05BV1MpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKFRFTE9QVF9OQVdTKSA9IDE7Ci0gICAgICAg ICAgICB3YWl0ID0gMTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBDS19OQVdTICovCi0K LSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfU0dBKSAmJgotICAgICAgICBURUxPUFRfTUVfTU9E RShURUxPUFRfU0dBKSA+PSBUTl9OR19SUSkgewotICAgICAgICBpZiAodG5fc29wdChXSUxMLCBU RUxPUFRfU0dBKSA8IDApCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgVEVMT1BUX1VO QU5TV0VSRURfV0lMTChURUxPUFRfU0dBKSA9IDE7Ci0gICAgICAgIHdhaXQgPSAxOwotICAgIH0K LSAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9TR0EpICYmCi0gICAgICAgIFRFTE9QVF9VX01PREUo VEVMT1BUX1NHQSkgPj0gVE5fTkdfUlEpIHsKLSAgICAgICAgaWYgKHRuX3NvcHQoRE8sIFRFTE9Q VF9TR0EpIDwgMCkKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBURUxPUFRfVU5BTlNX RVJFRF9ETyhURUxPUFRfU0dBKSA9IDE7Ci0gICAgICAgIHdhaXQgPSAxOwotICAgIH0KLSAgICBp ZiAoIXRuX2R1cGxleCkgewotICAgICAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9FQ0hPKSAmJgot ICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRUNITykgPj0gVE5fTkdfUlEpIHsKLSAg ICAgICAgICAgIGlmICh0bl9zb3B0KERPLCBURUxPUFRfRUNITykgPCAwKQotICAgICAgICAgICAg ICByZXR1cm4oLTEpOwotICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX0VD SE8pID0gMTsKLSAgICAgICAgICAgIHdhaXQgPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm ICghVEVMT1BUX01FKFRFTE9QVF9FQ0hPKSAmJgotICAgICAgICBURUxPUFRfTUVfTU9ERShURUxP UFRfRUNITykgPj0gVE5fTkdfUlEpIHsKLSAgICAgICAgaWYgKHRuX3NvcHQoV0lMTCwgVEVMT1BU X0VDSE8pIDwgMCkKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBURUxPUFRfVU5BTlNX RVJFRF9XSUxMKFRFTE9QVF9FQ0hPKSA9IDE7Ci0gICAgICAgIHdhaXQgPSAxOwotICAgIH0KLQot ICAgIGRlYnVnKEYxMDAsInRuX2luaSBhYm91dCB0byBzZW5kIFdJTEwgVFRZUEUgaWYgcmVxdWVz dGVkIiwiIiwwKTsKLS8qCi0gIFRhbGtpbmcgdG8gVEVMTkVUIHBvcnQsIHNvIHNlbmQgV0lMTCBU RVJNSU5BTCBUWVBFIGFuZCBETyBTR0EuCi0gIEFsc28gc2VuZCBXSUxMIE5BV1MgaWYgd2Uga25v dyBvdXIgc2NyZWVuIGRpbWVuc2lvbnMuCi0qLwotICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9U VFlQRSkgJiYKLSAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX1RUWVBFKSA+PSBUTl9OR19S USkgewotICAgICAgICBpZiAoKHggPSB0bl9zb3B0KFdJTEwsVEVMT1BUX1RUWVBFKSkgPCAwKSB7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0bl9pbmkgdG5fc29wdCBXSUxMIFRUWVBFIGZhaWxl ZCIsIiIseCk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAgIFRF TE9QVF9VTkFOU1dFUkVEX1dJTEwoVEVMT1BUX1RUWVBFKSA9IDE7Ci0gICAgICAgIHdhaXQgPSAx OwotICAgICAgICBkZWJ1ZyhGMTAwLCJ0bl9pbmkgc2VudCBXSUxMIFRUWVBFIG9rIiwiIiwwKTsK LSAgICB9Ci0gICAgaWYgKCFURUxPUFRfVShURUxPUFRfVFRZUEUpICYmCi0gICAgICAgIFRFTE9Q VF9VX01PREUoVEVMT1BUX1RUWVBFKSA+PSBUTl9OR19SUSkgewotICAgICAgICBpZiAoKHggPSB0 bl9zb3B0KERPLFRFTE9QVF9UVFlQRSkpIDwgMCkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwi dG5faW5pIHRuX3NvcHQgRE8gVFRZUEUgZmFpbGVkIiwiIix4KTsKLSAgICAgICAgICAgIHJldHVy bigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX1RU WVBFKSA9IDE7Ci0gICAgICAgIHdhaXQgPSAxOwotICAgICAgICBkZWJ1ZyhGMTAwLCJ0bl9pbmkg c2VudCBETyBUVFlQRSBvayIsIiIsMCk7Ci0gICAgfQotICAgIGlmICghVEVMT1BUX01FKFRFTE9Q VF9CSU5BUlkpICYmCi0gICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9CSU5BUlkpID49IFRO X05HX1JRKSB7Ci0gICAgICAgIGlmICh0bl9zb3B0KFdJTEwsIFRFTE9QVF9CSU5BUlkpIDwgMCkK LSAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKFRF TE9QVF9CSU5BUlkpID0gMTsKLSAgICAgICAgd2FpdCA9IDE7Ci0gICAgfQotICAgIGlmICghVEVM T1BUX1UoVEVMT1BUX0JJTkFSWSkgJiYKLSAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfQklO QVJZKSA+PSBUTl9OR19SUSkgewotICAgICAgICBpZiAodG5fc29wdChETywgVEVMT1BUX0JJTkFS WSkgPCAwKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIFRFTE9QVF9VTkFOU1dFUkVE X0RPKFRFTE9QVF9CSU5BUlkpID0gMTsKLSAgICAgICAgd2FpdCA9IDE7Ci0gICAgfQotI2lmZGVm IENLX1NORExPQwotICAgIGlmICh0bl9sb2MpIHsKLSAgICAgICAgaWYgKCFURUxPUFRfTUUoVEVM T1BUX1NORExPQykgJiYKLSAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9TTkRMT0Mp ID49IFROX05HX1JRKSB7Ci0gICAgICAgICAgICBpZiAodG5fc29wdChXSUxMLCBURUxPUFRfU05E TE9DKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICBURUxPUFRf VU5BTlNXRVJFRF9XSUxMKFRFTE9QVF9TTkRMT0MpID0gMTsKLSAgICAgICAgICAgIHdhaXQgPSAx OwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENLX1NORExPQyAqLwotI2lmZGVmIENLX0VO VklST05NRU5UCi0jaWZkZWYgQ0tfRk9SV0FSRF9YCi0gICAgaWYgKCFURUxPUFRfVShURUxPUFRf Rk9SV0FSRF9YKSAmJgotICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRk9SV0FSRF9YKSA+ PSBUTl9OR19SUSkgewotICAgICAgICBpZiAodG5fc29wdChXSUxMLCBURUxPUFRfRk9SV0FSRF9Y KSA8IDApCi0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBURUxPUFRfVU5BTlNXRVJF RF9XSUxMKFRFTE9QVF9GT1JXQVJEX1gpID0gMTsKLSAgICAgICAgd2FpdCA9IDE7Ci0gICAgfQot I2VuZGlmIC8qIEZPUldBUkRfWCAqLwotI2lmZGVmIENLX1hESVNQTE9DCi0gICAgaWYgKCFURUxP UFRfTUUoVEVMT1BUX1hESVNQTE9DKSAmJgotICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BU X1hESVNQTE9DKSA+PSBUTl9OR19SUSkgewotICAgICAgICBpZiAodG5fc29wdChXSUxMLCBURUxP UFRfWERJU1BMT0MpIDwgMCkKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIFRFTE9Q VF9VTkFOU1dFUkVEX1dJTEwoVEVMT1BUX1hESVNQTE9DKSA9IDE7Ci0gICAgICAgIHdhaXQgPSAx OwotICAgIH0KLSNlbmRpZiAvKiBDS19YRElTUExPQyAqLwotICAgIC8qIFdpbGwgc2VuZCB0ZXJt aW5hbCBlbnZpcm9ubWVudC4gKi8KLSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfTkVXRU5WSVJP TikgJiYKLSAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX05FV0VOVklST04pID49IFROX05H X1JRKSB7Ci0gICAgICAgIGlmICh0bl9zb3B0KFdJTEwsIFRFTE9QVF9ORVdFTlZJUk9OKSA8IDAp Ci0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChU RUxPUFRfTkVXRU5WSVJPTikgPSAxOwotICAgICAgICB3YWl0ID0gMTsKLSAgICB9Ci0gICAgaWYg KCFURUxPUFRfVShURUxPUFRfTkVXRU5WSVJPTikgJiYKLSAgICAgICAgVEVMT1BUX1VfTU9ERShU RUxPUFRfTkVXRU5WSVJPTikgPj0gVE5fTkdfUlEpIHsKLSAgICAgICAgaWYgKHRuX3NvcHQoRE8s IFRFTE9QVF9ORVdFTlZJUk9OKSA8IDApCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAg VEVMT1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX05FV0VOVklST04pID0gMTsKLSAgICAgICAgd2Fp dCA9IDE7Ci0gICAgfQotI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCi0KLSAgICAvKiBUYWtl IGNhcmUgb2YgYW55IG90aGVyIHRlbG5ldCBvcHRpb25zIHRoYXQgcmVxdWlyZSBoYW5kbGluZy4g Ki8KLQotICAgIGZvciAob3B0ID0gVEVMT1BUX0ZJUlNUOyBvcHQgPD0gVEVMT1BUX0xBU1Q7IG9w dCsrKSB7Ci0gICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAgICAgY2FzZSBURUxPUFRfQVVU SEVOVElDQVRJT046Ci0gICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoKLSAgICAgICAg ICBjYXNlIFRFTE9QVF9UVFlQRToKLSAgICAgICAgICBjYXNlIFRFTE9QVF9OQVdTOgotICAgICAg ICAgIGNhc2UgVEVMT1BUX0JJTkFSWToKLSAgICAgICAgICBjYXNlIFRFTE9QVF9ORVdFTlZJUk9O OgotICAgICAgICAgIGNhc2UgVEVMT1BUX1NORExPQzoKLSAgICAgICAgICBjYXNlIFRFTE9QVF9Y RElTUExPQzoKLSAgICAgICAgICBjYXNlIFRFTE9QVF9TR0E6Ci0gICAgICAgICAgY2FzZSBURUxP UFRfRUNITzoKLSAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6Ci0gICAgICAgICAgY2FzZSBU RUxPUFRfU1RBUlRfVExTOgotICAgICAgICAgIGNhc2UgVEVMT1BUX0ZPUldBUkRfWDoKLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6 Ci0gICAgICAgICAgICBpZiAoVEVMT1BUX09LKG9wdCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo IVRFTE9QVF9NRShvcHQpICYmCi0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKG9w dCkgPj0gVE5fTkdfUlEpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoV0lMTCwg b3B0KSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAg ICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChvcHQpID0gMTsKLSAgICAgICAgICAgICAg ICAgICAgd2FpdCA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgh VEVMT1BUX1Uob3B0KSAmJgotICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKG9wdCkg Pj0gVE5fTkdfUlEpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoRE8sIG9wdCkg PCAwKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAg ICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKG9wdCkgPSAxOwotICAgICAgICAgICAgICAgICAgICB3 YWl0ID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgaWYgKHdhaXQpIHsKLSAgICAgICAgaWYgKHRuX3dhaXQoInByZS1lbmNyeXB0Iikg PCAwKSB7Ci0gICAgICAgICAgICB0bl9wdXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwot ICAgICAgICB9Ci0gICAgICAgIHdhaXQgPSAwOwotICAgIH0KLQotI2lmZGVmIENLX0VOQ1JZUFRJ T04KLSAgICBpZiAodG5faW5pdCkgICAgICAgICAgICAgICAgLyogdG5faW5pKCkgbWF5IGJlIGNh bGxlZCByZWN1cnNpdmVseSAqLwotICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKCFURUxPUFRf TUUoVEVMT1BUX0VOQ1JZUFRJT04pICYmCi0gICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9F TkNSWVBUSU9OKSA+PSBUTl9OR19SUSkgewotICAgICAgICBpZiAodG5fc29wdChXSUxMLCBURUxP UFRfRU5DUllQVElPTikgPCAwKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIFRFTE9Q VF9VTkFOU1dFUkVEX1dJTEwoVEVMT1BUX0VOQ1JZUFRJT04pID0gMTsKLSAgICAgICAgd2FpdCA9 IDE7Ci0gICAgfQotICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pICYmCi0gICAg ICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID49IFROX05HX1JRKSB7Ci0gICAg ICAgIGlmICh0bl9zb3B0KERPLCBURUxPUFRfRU5DUllQVElPTikgPCAwKQotICAgICAgICAgIHJl dHVybigtMSk7Ci0gICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKFRFTE9QVF9FTkNSWVBUSU9O KSA9IDE7Ci0gICAgICAgIHdhaXQgPSAxOwotICAgIH0KLQotICAgIC8qIElmIHdlIGFyZSBnb2lu ZyB0byBlbmNyeXB0LCB3ZSB3YW50IHRvIGRvIGl0IGJlZm9yZSB3ZSBzZW5kIGFueSBtb3JlICov Ci0gICAgLyogZGF0YSwgZXNwZWNpYWxseSB0aGUgdGVybWluYWwgdHlwZSBhbmQgZW52aXJvbm1l bnQgdmFyaWFibGVzLiAgICAgICAgKi8KLSAgICBpZiAod2FpdCkgewotICAgICAgICBpZiAodG5f d2FpdCgicG9zdC1lbmNyeXB0IikgPCAwKSB7Ci0gICAgICAgICAgICB0bl9wdXNoKCk7Ci0gICAg ICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAgIHdhaXQgPSAwOwotICAgIH0K LSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0KLSAgICB0bl9zZHNiKCk7Ci0KLSAgICBpZiAo dG5faW5pdCkgICAgICAgICAgICAgICAgICAgLyogdG5faW5pKCkgbWF5IGJlIGNhbGxlZCByZWN1 cnNpdmVseSAqLwotICAgICAgICByZXR1cm4oMCk7Ci0KLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAg LyogS2VybWl0IFNlcnZlciBuZWdvdGlhdGlvbiBtdXN0IGdvIGxhc3QgKi8KLSAgICAvKiBTZW5k IFUgYmVmb3JlIE1FICovCi0KLSAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpICYmCi0g ICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0tFUk1JVCkgPj0gVE5fTkdfUlEpIHsKLSAgICAg ICAgaWYgKHRuX3NvcHQoRE8sIFRFTE9QVF9LRVJNSVQpIDwgMCkKLSAgICAgICAgICByZXR1cm4o LTEpOwotICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyhURUxPUFRfS0VSTUlUKSA9IDE7Ci0g ICAgICAgIHdhaXQgPSAxOwotICAgIH0KLSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfS0VSTUlU KSAmJgotICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfS0VSTUlUKSA+PSBUTl9OR19SUSkg ewotICAgICAgICBpZiAodG5fc29wdChXSUxMLCBURUxPUFRfS0VSTUlUKSA8IDApCi0gICAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChURUxPUFRfS0VS TUlUKSA9IDE7Ci0gICAgICAgIHdhaXQgPSAxOwotICAgIH0KLSNlbmRpZiAvKiBJS1NfT1BUSU9O ICovCi0KLSAgICBpZiAod2FpdCkgewotICAgICAgICBpZiAodG5fd2FpdCgiZW5kIG9mIHRlbG5l dCBuZWdvdGlhdGlvbnMiKSA8IDApIHsKLSAgICAgICAgICAgIHRuX3B1c2goKTsKLSAgICAgICAg ICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgd2FpdCA9IDA7Ci0gICAgfQotCi0g ICAgdG5fc2RzYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBkZWxheWVkIHN1 Ym5lZ290aWF0aW9ucyAqLwotICAgIHRuX3B1c2goKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8q IFN0YXJ0IGEgdGVsbmV0IGNvbm5lY3Rpb24uICovCi0vKiBSZXR1cm5zIC0xIG9uIGVycm9yLCAw IGlmIG5vdGhpbmcgaGFwcGVucywgMSBpZiBpbml0IG1zZ3Mgc2VudCBvayAqLwotCi1pbnQKLXRu X2luaSgpIHsKLSAgICBpbnQgeDsKLQotICAgIGRlYnVnKEYxMDEsInRuX2luaSB0dG5wcm90byIs IiIsdHRucHJvdG8pOwotICAgIGRlYnVnKEYxMDEsInRuX2luaSB0bl9pbml0IiwiIix0bl9pbml0 KTsKLQotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgICAgICAgICAgICAgIC8qIE1ha2Ugc3Vy ZSBjb25uZWN0aW9uIGlzIFRDUC9JUCAqLwotICAgICAgcmV0dXJuKDApOwotLyoKLSAgICBpZiAo IUlTX1RFTE5FVCgpKQotICAgICAgcmV0dXJuKDApOwotKi8KLSAgICBpZiAodG5faW5pdCkgICAg ICAgICAgICAgICAgICAgICAgICAvKiBIYXZlIHdlIGRvbmUgdGhpcyBhbHJlYWR5PyAqLwotICAg ICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGRvIGl0IGFnYWlu LiAqLwotCi0gICAgdG5fcmVzZXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQg dGVsbmV0IHBhcmFtZXRlcnMgKi8KLSAgICB0bl9iZWd1biA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBSZXNldDsgd2lsbCBiZSBzZXQgYnkgdG5fc3RhcnQoKSAqLwotCi0gICAgc3dpdGNo ICggdHRucHJvdG8gKSB7Ci0gICAgICBjYXNlIE5QX1JMT0dJTjoKLSAgICAgIGNhc2UgTlBfSzRM T0dJTjoKLSAgICAgIGNhc2UgTlBfRUs0TE9HSU46Ci0gICAgICBjYXNlIE5QX0s1TE9HSU46Ci0g ICAgICBjYXNlIE5QX0VLNUxPR0lOOgotICAgICAgY2FzZSBOUF9LNVUyVToKLSAgICAgICAgdG5f aW5pdCA9IDE7Ci0gICAgICAgIGRlYnVnKEYxMDAsInRuX2luaSB0ZWxuZXQgbmVnb3RpYXRpb25z IGlnbm9yZWQiLCJ0bl9pbml0Iix0bl9pbml0KTsKLSAgICAgICAgcmV0dXJuKDApOwotI2lmZGVm IENPTU1FTlQKLSAgICAgIC8qIEplZmYncyBjb2RlIGZyb20gMzAgRGVjIDIwMDUgLSBkb2Vzbid0 IHdvcmsgd2l0aCBTU0wgUE9QIHNlcnZlciAqLwotICAgICAgY2FzZSBOUF9OT05FOgotICAgICAg Y2FzZSBOUF9TU0w6Ci0gICAgICBjYXNlIE5QX1RMUzoKLSAgICAgICAgdHRucHJvdG8gPSBOUF9U RUxORVQ7ICAgICAgICAgICAvKiBwcmV0ZW5kIGl0J3MgdGVsbmV0IGFueXdheSwgKi8KLSAgICAg ICAgb2xkcGxleCA9IGR1cGxleDsgICAgICAgICAgICAgICAvKiBzYXZlIG9sZCBkdXBsZXggdmFs dWUgKi8KLSAgICAgICAgZHVwbGV4ID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgc2V0 IHRvIGhhbGYgZHVwbGV4IGZvciB0ZWxuZXQgKi8KLSAgICAgICAgaWYgKGluc2VydmVyKQotICAg ICAgICAgIGRlYnVnKEYxMDAsInRuX2luaSBza2lwcGluZyB0ZWxuZXQgbmVnb3RpYXRpb25zIiwi IiwwKTsKLQllbHNlCi0JICB0bl93YWl0KCJ0bl9pbmkgLSB3YWl0aW5nIHRvIHNlZSBpZiB0ZWxu ZXQgbmVnb3RpYXRpb25zIHdlcmUgc2VudCIpOwotCXRuX3B1c2goKTsKLSAgICAgICAgcmV0dXJu KDApOwotICAgICAgY2FzZSBOUF9TU0xfUkFXOgotICAgICAgY2FzZSBOUF9UTFNfUkFXOgotICAg ICAgY2FzZSBOUF9UQ1BSQVc6ICAgICAgICAgICAgICAgICAgIC8qIFJhdyBzb2NrZXQgcmVxdWVz dGVkLiAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJ0bl9pbmkgdGVsbmV0IG5lZ290aWF0aW9ucyBp Z25vcmVkIiwidG5faW5pdCIsdG5faW5pdCk7Ci0gICAgICAgIHJldHVybigwKTsKLSNlbHNlCi0g ICAgICAvKiBNeSBjb2RlIGZyb20gNCBEZWMgMjAwNSAtIHdvcmtzIHdpdGggU1NMIFBPUCBzZXJ2 ZXIgKi8KLSAgICAgIGNhc2UgTlBfTk9ORToKLSAgICAgIGNhc2UgTlBfU1NMOgotICAgICAgY2Fz ZSBOUF9UTFM6ICAgICAgICAgICAgICAgICAgICAgIC8qIElmIG5vdCB0YWxraW5nIHRvIGEgdGVs bmV0IHBvcnQsICovCi0gICAgICBjYXNlIE5QX1NTTF9SQVc6CQkJLyogU1NMIGFuZCBUTFMgd2l0 aCBUZWxuZXQgKi8KLSAgICAgIGNhc2UgTlBfVExTX1JBVzoJCQkvKiBuZWdvdGlhdGlvbnMgZGlz YWJsZWQuICovCi0gICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOyAgICAgICAgICAgLyogcHJl dGVuZCBpdCdzIHRlbG5ldCBhbnl3YXksICovCi0gICAgICAgIG9sZHBsZXggPSBkdXBsZXg7ICAg ICAgICAgICAgICAgLyogc2F2ZSBvbGQgZHVwbGV4IHZhbHVlICovCi0gICAgICAgIGR1cGxleCA9 IDE7ICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHNldCB0byBoYWxmIGR1cGxleCBmb3IgdGVs bmV0ICovCi0gICAgICAgIGlmIChpbnNlcnZlcikKLSAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0bl9p bmkgc2tpcHBpbmcgdGVsbmV0IG5lZ290aWF0aW9ucyIsIiIsMCk7Ci0JZWxzZQotCSAgdG5fd2Fp dCgidG5faW5pIC0gd2FpdGluZyB0byBzZWUgaWYgdGVsbmV0IG5lZ290aWF0aW9ucyB3ZXJlIHNl bnQiKTsKLQl0bl9wdXNoKCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICAgIGNhc2UgTlBfVENQ UkFXOiAgICAgICAgICAgICAgICAgICAvKiBSYXcgc29ja2V0IHJlcXVlc3RlZC4gKi8KLSAgICAg ICAgZGVidWcoRjEwMCwidG5faW5pIHRlbG5ldCBuZWdvdGlhdGlvbnMgaWdub3JlZCIsInRuX2lu aXQiLHRuX2luaXQpOwotICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwot ICAgICAgY2FzZSBOUF9LRVJNSVQ6ICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaGluZyB0byBU ZWxuZXQgcHJvdG9jb2wgKi8KLSAgICAgIGNhc2UgTlBfU1NMX1RFTE5FVDoKLSAgICAgIGNhc2Ug TlBfVExTX1RFTE5FVDoKLSAgICAgICAgZGVidWcoRjEwMSwidG5faW5pIHN3aXRjaGluZyBmcm9t IFhYWCB0byBUZWxuZXQiLCIiLHR0bnByb3RvKTsKLSAgICAgICAgdHRucHJvdG8gPSBOUF9URUxO RVQ7Ci0gICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg LyogV2UgYXJlIGFscmVhZHkgdXNpbmcgYSB2YXJpYXRpb24gb24gVGVsbmV0IHByb3RvY29sICov Ci0gICAgICAgIDsKLSAgICB9Ci0KLSAgICB4ID0gdG5fc3RhcnQoKTsKLSAgICB0bl9pbml0ID0g MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciBzdWNjZXNzZnVsIGNvbXBsZXRp b24uICovCi0KLSAgICAvKiBEb24ndCBzZW5kIGFueXRoaW5nIGVsc2UhICovCi0gICAgZGVidWco RjEwMSwidG5faW5pIGR1cGxleCIsIiIsZHVwbGV4KTsKLSAgICBkZWJ1ZyhGMTAxLCJ0bl9pbmkg ZG9uZSwgdG5faW5pdCIsIiIsdG5faW5pdCk7Ci0gICAgcmV0dXJuKHgpOwotfQotCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotdG5faGV4KENIQVIgKiBidWYsIGludCBidWZsZW4sIENIQVIgKiBkYXRh LCBpbnQgZGF0YWxlbikKLSNlbHNlIC8qIENLX0FOU0lDICovCi10bl9oZXgoYnVmLCBidWZsZW4s IGRhdGEsIGRhdGFsZW4pCi0gICAgQ0hBUiAqIGJ1ZjsKLSAgICBpbnQgYnVmbGVuOwotICAgIENI QVIgKiBkYXRhOwotICAgIGludCBkYXRhbGVuOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0g ICAgaW50IGkgPSAwLCBqID0gMCwgayA9IDA7Ci0gICAgQ0hBUiB0bXBbMTZdOwkJLyogaW4gY2Fz ZSB2YWx1ZSBpcyB0cmVhdGVkIGFzIG5lZ2F0aXZlICovCi0jaWZkZWYgQ09NTUVOVAotICAgIGlu dCB3YXNfaGV4ID0gMTsKLQotICAgIGZvciAoaz0wOyBrIDwgZGF0YWxlbjsgaysrKSB7Ci0gICAg ICAgIGlmIChkYXRhW2tdIDwgMzIgfHwgZGF0YVtrXSA+PSAxMjcpIHsKLSAgICAgICAgICAgIHNw cmludGYodG1wLCIlcyUwMlggIix3YXNfaGV4PyIiOiJcIiAiLGRhdGFba10pOwotICAgICAgICAg ICAgd2FzX2hleCA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzcHJpbnRmKHRt cCwiJXMlYyIsd2FzX2hleD8iXCIiOiIiLGRhdGFba10pOwotICAgICAgICAgICAgd2FzX2hleCA9 IDA7Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY2F0KChjaGFyICopYnVmLHRtcCxidWZsZW4p OwotICAgIH0KLSAgICBpZiAoIXdhc19oZXgpCi0gICAgICAgIGNrc3RybmNhdCgoY2hhciAqKWJ1 ZiwiXCIgIixidWZsZW4pOwotI2Vsc2UgLyogQ09NTUVOVCAqLwotICAgIGlmIChkYXRhbGVuIDw9 IDAgfHwgZGF0YSA9PSBOVUxMIHx8IGJ1ZiA9PSBOVUxMIHx8IGJ1ZmxlbiA8PSAwKQotICAgICAg ICByZXR1cm4oMCk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YWxlbjsgaSsrKSB7Ci0gICAg ICAgIGNrc3RybmNhdCgoY2hhciAqKWJ1ZiwiXHJcbiAgIixidWZsZW4pOwotICAgICAgICBmb3Ig KGogPSAwIDsgKGogPCAxNik7IGorKykgewotICAgICAgICAgICAgaWYgKChpICsgaikgPCBkYXRh bGVuKQotICAgICAgICAgICAgICBzcHJpbnRmKChjaGFyICopdG1wLAotICAgICAgICAgICAgICAg ICAgICAgICIlcyUwMnggIiwKLSAgICAgICAgICAgICAgICAgICAgICAoaiA9PSA4ID8gInwgIiA6 ICIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBkYXRhW2kgKyBqXQot ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg IHNwcmludGYoKGNoYXIgKil0bXAsCi0gICAgICAgICAgICAgICAgICAgICAgIiVzICAgIiwKLSAg ICAgICAgICAgICAgICAgICAgICAoaiA9PSA4ID8gInwgIiA6ICIiKQotICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgICAgICAgICBja3N0cm5jYXQoKGNoYXIgKilidWYsKGNoYXIgKil0bXAs YnVmbGVuKTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jYXQoKGNoYXIgKilidWYsIiAiLGJ1 Zmxlbik7Ci0gICAgICAgIGZvciAoayA9IDA7IChrIDwgMTYpICYmICgoaSArIGspIDwgZGF0YWxl bik7IGsrKykgewotICAgICAgICAgICAgc3ByaW50ZigoY2hhciAqKXRtcCwKLSAgICAgICAgICAg ICAgICAgICAgICIlcyVjIiwKLSAgICAgICAgICAgICAgICAgICAgIChrID09IDggPyAiICIgOiAi IiksCi0gICAgICAgICAgICAgICAgICAgICBpc3ByaW50KChjaGFyKShkYXRhW2kra10pKSA/IGRh dGFbaStrXSA6ICcuJwotICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGNrc3Ry bmNhdCgoY2hhciAqKWJ1ZiwoY2hhciAqKXRtcCxidWZsZW4pOwotICAgICAgICB9Ci0gICAgICAg IGkgKz0gaiAtIDE7Ci0gICAgfSAvKiBlbmQgZm9yICovCi0gICAgY2tzdHJuY2F0KChjaGFyICop YnVmLCJcclxuICAiLGJ1Zmxlbik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHJldHVybihz dHJsZW4oKGNoYXIgKilidWYpKTsKLX0KLQotVk9JRAotdG5fZGVidWcocykgY2hhciAqczsgewot I2lmZGVmIE5PTE9DQUwKLSAgICByZXR1cm47Ci0jZWxzZSAvKiBOT0xPQ0FMICovCi0jaWZkZWYg T1MyCi0gICAgdm9pZCBjd3JpdGUodW5zaWduZWQgc2hvcnQpOwotICAgIGNoYXIgKnAgPSBzOwot ICAgIF9QUk9UT1RZUCAodm9pZCBvczJib2xkLCAodm9pZCkpOwotICAgIGV4dGVybiBpbnQgdHRf dHlwZV9tb2RlOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKCEodG5fZGViIHx8IGRlYnNl cykpCi0gICAgICByZXR1cm47Ci0gICAgZGVidWcoRjExMSwidG5fZGVidWciLHMsd2hhdCk7Ci0j aWZkZWYgT1MyCi0gICAgaWYgKDEpIHsKLSAgICAgICAgZXh0ZXJuIHVuc2lnbmVkIGNoYXIgY29s b3JjbWQ7Ci0gICAgICAgIGNvbG9yY21kIF49IDB4OCA7Ci0gICAgICAgIHByaW50ZigiJXNcclxu IixzKTsKLSAgICAgICAgY29sb3JjbWQgXj0gMHg4IDsKLSAgICB9Ci0gICAgaWYgKCFzY3JuaW5p dGlhbGl6ZWRbVlRFUk1dKSB7Ci0gICAgICAgIFVTSE9SVCB4LHk7Ci0gICAgICAgIGNoZWNrc2Ny ZWVubW9kZSgpOwotICAgICAgICBHZXRDdXJQb3MoJnksICZ4KTsKLSAgICAgICAgU2F2ZUNtZE1v ZGUoeCsxLHkrMSk7Ci0gICAgICAgIHNjcm5pbml0KCk7Ci0gICAgICAgIFJlc3RvcmVDbWRNb2Rl KCk7Ci0gICAgfQotCi0gICAgaWYgKCBJU1ZUTlQodHRfdHlwZV9tb2RlKSAmJiB0dG51bSAhPSAt MSAmJiAhZGVic2VzICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVxdWVzdFZzY3JuTXV0ZXgo IFZURVJNLCBTRU1fSU5ERUZJTklURV9XQUlUICkgOwotCi0gICAgb3MyYm9sZCgpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVG9nZ2xlIGJvbGRuZXNzICovCi0gICAgd2hpbGUgKCpwKQot ICAgICAgY3dyaXRlKChDSEFSKSAqcCsrKTsgICAgICAgICAgICAgIC8qIEdvIGJvbGRseSAuLi4g Ki8KLSAgICBvczJib2xkKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUb2dnbGUgYm9s ZG5lc3MgYmFjayAqLwotICAgIGlmIChkZWJzZXMpIHsKLSAgICAgICAgZGVic2VzID0gMDsKLSAg ICAgICAgY3dyaXRlKChDSEFSKSAnXDAxNScpOwotICAgICAgICBjd3JpdGUoKENIQVIpICdcMDEy Jyk7Ci0gICAgICAgIGRlYnNlcyA9IDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY3dyaXRlKChD SEFSKSAnXDAxNScpOwotICAgICAgICBjd3JpdGUoKENIQVIpICdcMDEyJyk7Ci0gICAgfQotICAg IFJlbGVhc2VWc2Nybk11dGV4KFZURVJNKSA7Ci0jZWxzZQotICAgIGlmICh3aGF0ICE9IFdfQ09O TkVDVCAmJiB3aGF0ICE9IFdfRElBTElORyAmJiAKLSAgICAgICAgd2hhdCAhPSBXX0NPTU1BTkQg JiYgd2hhdCAhPSBXX05PVEhJTkcpCi0gICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ09OTkVDVC9jb21tYW5kIG11c3QgYmUgYWN0aXZlICovCi0gICAgY29ub2xsKHMp OwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLX0KLQotLyoKLSAgUHJv Y2VzcyBpbi1iYW5kIFRlbG5ldCBuZWdvdGlhdGlvbiBjaGFyYWN0ZXJzIGZyb20gdGhlIHJlbW90 ZSBob3N0LgotICBDYWxsIHdpdGggdGhlIHRlbG5ldCBJQUMgY2hhcmFjdGVyIGFuZCB0aGUgY3Vy cmVudCBkdXBsZXggc2V0dGluZwotICAoMCA9IHJlbW90ZSBlY2hvLCAxID0gbG9jYWwgZWNobyks IGFuZCBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0byBjYWxsCi0gIHRvIHJlYWQgbW9yZSBjaGFy YWN0ZXJzLiAgUmV0dXJuczoKLSAgICA2IGlmIERPIExPR09VVCB3YXMgcmVjZWl2ZWQgYW5kIGFj Y2VwdGVkCi0gICAgNSBpZiB0aGUgS2VybWl0IHN0YXJ0IG9mIHBhY2tldCBjaGFyYWN0ZXIgaGFz IGNoYW5nZWQKLSAgICA0IGlmIHN0YXRlIG9mIHJlbW90ZSBJbnRlcm5ldCBLZXJtaXQgU2Vydmlj ZSBoYXMgY2hhbmdlZAotICAgIDMgaWYgYSBxdW90ZWQgSUFDIHdhcyByZWNlaXZlZAotICAgIDIg aWYgbG9jYWwgZWNobyBtdXN0IGJlIGNoYW5nZWQgdG8gcmVtb3RlCi0gICAgMSBpZiByZW1vdGUg ZWNobyBtdXN0IGJlIGNoYW5nZWQgdG8gbG9jYWwKLSAgICAwIGlmIG5vdGhpbmcgaGFwcGVucyBv ciBubyBhY3Rpb24gbmVjZXNzYXJ5Ci0gICAtMSBvbiBmYWlsdXJlICg9IGludGVybmFsIG9yIGkv byBlcnJvcikKLSovCi0jaWZkZWYgSUtTX09QVElPTgotaW50Ci10bl9zaWtzKGNtZCkgaW50IGNt ZDsgeyAgICAgICAgIC8qIFRFTE5FVCBTRU5EIElLUyBTVUIgKi8KLSAgICBDSEFSIGJ1Zls4XTsK LSNpZm5kZWYgTk9YRkVSCi0gICAgZXh0ZXJuIENIQVIgbXlzdGNoOyAgICAgICAgICAgICAgICAg LyogT3V0Z29pbmcgU3RhcnQgb2YgUGFja2V0IENoYXIgKi8KLSNlbHNlCi0gICAgQ0hBUiBteXN0 Y2ggPSAnXDEnOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIGludCBuLG0scmM7Ci0KLSAgICBp ZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsgICAvKiBNdXN0IGJlIFRDUC9JUCAqLwot ICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsgLyogTXVzdCBiZSB0ZWxu ZXQgcHJvdG9jb2wgKi8KLQotICAgIGlmIChjbWQgPCBLRVJNSVRfU1RBUlQgfHwgY21kID4gS0VS TUlUX1JFU1BfU1RPUCkgLyogSWxsZWdhbCBzdWJjb21tYW5kICovCi0gICAgICByZXR1cm4oLTEp OwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5z dGFydF90bHMubWVfZm9sbG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlm IC8qIENLX1NTTCAqLwotICAgIGlmIChjbWQgPT0gS0VSTUlUX1NUQVJUIHx8IGNtZCA9PSBLRVJN SVRfUkVTUF9TVEFSVCkgewotICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0 Lm1lX3N0YXJ0ID0gMTsKLSAgICB9IGVsc2UgaWYgKGNtZCA9PSBLRVJNSVRfU1RPUCB8fCBjbWQg PT0gS0VSTUlUX1JFU1BfU1RPUCkgewotICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCku a2VybWl0Lm1lX3N0YXJ0ID0gMDsKLSAgICB9IGVsc2UgaWYgKGNtZCA9PSBLRVJNSVRfUkVRX1NU T1ApCi0gICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3JlcV9zdG9wID0g MTsKLSAgICBlbHNlIGlmIChjbWQgPT0gS0VSTUlUX1JFUV9TVEFSVCkKLSAgICAgIFRFTE9QVF9T QihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfcmVxX3N0YXJ0ID0gMTsKLQotICAgIGlmIChjbWQg PT0gS0VSTUlUX1NPUCkgewotICAgICAgICBidWZbMF0gPSAoQ0hBUikgSUFDOwotICAgICAgICBi dWZbMV0gPSAoQ0hBUikgU0I7Ci0gICAgICAgIGJ1ZlsyXSA9IChDSEFSKSBURUxPUFRfS0VSTUlU OwotICAgICAgICBidWZbM10gPSAoQ0hBUikgKGNtZCAmIDB4ZmYpOwotICAgICAgICBidWZbNF0g PSAoQ0hBUikgbXlzdGNoOwotICAgICAgICBidWZbNV0gPSAoQ0hBUikgSUFDOwotICAgICAgICBi dWZbNl0gPSAoQ0hBUikgU0U7Ci0gICAgICAgIGJ1Zls3XSA9IChDSEFSKSAwOwotI2lmZGVmIERF QlVHCi0gICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzIHx8IGRlYmxvZykKLSAgICAgICAgICAg IGNrbWFrbXNnKCB0bl9tc2dfb3V0LFROX01TR19MRU4sIlRFTE5FVCBTRU5UIFNCIEtFUk1JVCBT T1AgIiwKLSAgICAgICAgICAgICAgICAgICAgICBja2N0b3gobXlzdGNoLDEpLCIgSUFDIFNFIixO VUxMKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIE9TMgotICAgICAgICBSZXF1ZXN0VGVs bmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotI2lmZGVmIERFQlVHCi0g ICAgICAgIGRlYnVnKEYxMDEsdG5fbXNnX291dCwiIixjbWQpOwotICAgICAgICBpZiAodG5fZGVi IHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAg ICAgICAgcmMgPSAoIHR0b2woYnVmLDcpIDwgNyApOyAgICAgICAgICAgICAgICAvKiBTZW5kIGl0 LiAqLwotI2lmZGVmIE9TMgotICAgICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgot ICAgIGlmIChyYykKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9IGVsc2UgewotICAgICAgICBi dWZbMF0gPSAoQ0hBUikgSUFDOwotICAgICAgICBidWZbMV0gPSAoQ0hBUikgU0I7Ci0gICAgICAg IGJ1ZlsyXSA9IChDSEFSKSBURUxPUFRfS0VSTUlUOwotICAgICAgICBidWZbM10gPSAoQ0hBUikg KGNtZCAmIDB4ZmYpOwotICAgICAgICBidWZbNF0gPSAoQ0hBUikgSUFDOwotICAgICAgICBidWZb NV0gPSAoQ0hBUikgU0U7Ci0gICAgICAgIGJ1Zls2XSA9IChDSEFSKSAwOwotCi0jaWZkZWYgREVC VUcKLSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMgfHwgZGVibG9nKSB7Ci0gICAgICAgICAg ICBjaGFyICogcyA9IDA7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNtZCkgewotICAgICAgICAgICAg ICBjYXNlIEtFUk1JVF9TVEFSVDogcyA9ICJTVEFSVCI7IGJyZWFrOwotICAgICAgICAgICAgICBj YXNlIEtFUk1JVF9TVE9QOiBzID0gIlNUT1AiOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBL RVJNSVRfUkVRX1NUQVJUOiBzID0gIlJFUS1TVEFSVCI7IGJyZWFrOwotICAgICAgICAgICAgICBj YXNlIEtFUk1JVF9SRVFfU1RPUDogcyA9ICJSRVEtU1RPUCI7IGJyZWFrOwotICAgICAgICAgICAg ICBjYXNlIEtFUk1JVF9SRVNQX1NUQVJUOiBzID0gIlJFU1AtU1RBUlQiOyBicmVhazsKLSAgICAg ICAgICAgICAgY2FzZSBLRVJNSVRfUkVTUF9TVE9QOiAgcyA9ICJSRVNQLVNUT1AiOyBicmVhazsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNrbWFrbXNnKCB0bl9tc2dfb3V0LFROX01TR19M RU4sCi0gICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCIGtlcm1pdCAiLHMsIiBJ QUMgU0UiLE5VTEwpOwotICAgICAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBPUzIK LSAgICAgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5k aWYKLSNpZmRlZiBERUJVRwotICAgICAgICBkZWJ1ZyhGMTAxLHRuX21zZ19vdXQsIiIsY21kKTsK LSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwotI2Vu ZGlmIC8qIERFQlVHICovCi0gICAgICAgIHJjID0gKCB0dG9sKGJ1Ziw2KSA8IDYgKTsgICAgICAg ICAgICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgUmVsZWFzZVRlbG5l dE11dGV4KCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKHJjKQotICAgICAgICAgICAgcmV0dXJuKC0x KTsKLSAgICB9Ci0gICAgcmV0dXJuKDEpOwotfQotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLQot LyogdG5fc2IoKSBwZXJmb3JtcyBUZWxuZXQgU3VibmVnb3RpYXRpb24gUGFyc2luZyBhbmQgRGVi dWdnaW5nICovCi0vKiByZXR1cm5zIDw9IDAgb24gZXJyb3IsIDEgb24gc3VjY2VzcyAqLwotLyog dGhlIGxlbmd0aCByZXR1cm5lZCBpbmNsdWRlcyB0aGUgSUFDIFNFIGJ5dGVzICovCi0KLWludAot I2lmZGVmIENLX0FOU0lDICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRFTE5FVCBTQiAqLwot dG5fc2IoIGludCBvcHQsIGludCAqIGxlbiwgaW50ICgqZm4pKGludCkgKQotI2Vsc2UKLXRuX3Ni KCBvcHQsIGxlbiwgZm4gKSBpbnQgb3B0OyBpbnQgKiBsZW47IGludCAoKmZuKSgpOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi0vKiB0bl9zYiAqLyB7Ci0gICAgaW50IGMsIHgsIHksIG4sIG0sIGZs YWc7Ci0gICAgLyogaWYgKCFJU19URUxORVQoKSkgcmV0dXJuKDEpOyAqLwotCi0gICAgZGVidWco RjEwMCwiRW50ZXJpbmcgdG5fc2IoKSIsIiIsMCk7Ci0gICAgKmxlbiA9IDA7ICAgICAgICAgICAg ICAgICAgIC8qIEluaXRpYWxpemUgTGVuIHRvIDAgKi8KLSAgICBuID0gZmxhZyA9IDA7ICAgICAg ICAgICAgICAgLyogRmxhZyBmb3Igd2hlbiBkb25lIHJlYWRpbmcgU0IgKi8KLSAgICB3aGlsZSAo biA8IFRTQlVGU0laKSB7ICAgICAgLyogTG9vcCBsb29raW5nIGZvciBJQUMgU0UgKi8KLSAgICAg ICAgaWYgKCh5ID0gKCpmbikoMCkpIDwgMCkgLyogUmVhZCBhIGJ5dGUgKi8KLSAgICAgICAgICBy ZXR1cm4oeSk7Ci0gICAgICAgIHkgJj0gMHhmZjsgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBp dCdzIGp1c3QgOCBiaXRzLiAqLwotICAgICAgICBzYltuKytdID0gKGNoYXIpIHk7ICAgICAvKiBE ZXBvc2l0IGluIGJ1ZmZlci4gKi8KLSAgICAgICAgaWYgKHNlc2xvZyAmJiBzZXNzZnQgPT0gWFlG VF9EKSB7IC8qIFRha2UgY2FyZSBvZiBzZXNzaW9uIGxvZyAqLwotICAgICAgICAgICAgbG9nY2hh cigoY2hhcikgeSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHkgPT0gSUFDKSB7ICAgICAgICAg LyogSWYgdGhpcyBpcyBhbiBJQUMgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChm bGFnKSB7ICAgICAgICAgLyogSWYgcHJldmlvdXMgY2hhciB3YXMgSUFDICAgICAgICAgKi8KLSAg ICAgICAgICAgICAgICBuLS07ICAgICAgICAgICAgLyogaXQncyBxdW90ZWQsIGtlZXAgb25lIElB QyAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBmbGFnID0gMDsgICAgICAgLyogYW5kIHR1cm4g b2ZmIHRoZSBmbGFnLiAgICAgICAgICAgKi8KLSAgICAgICAgICAgIH0gZWxzZSBmbGFnID0gMTsg ICAgLyogT3RoZXJ3aXNlIHNldCB0aGUgZmxhZy4gICAgICAgICAgKi8KLSAgICAgICAgfSBlbHNl IGlmIChmbGFnKSB7ICAgICAgLyogU29tZXRoaW5nIGVsc2UgZm9sbG93aW5nIElBQyAgICAgKi8K LSAgICAgICAgICAgIGlmICh5ID09IFNFKSAgICAgICAgLyogSWYgbm90IFNFLCBpdCdzIGEgcHJv dG9jb2wgZXJyb3IgKi8KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbHNlIGlm ICh5ID09IERPTlQpIHsgLyogVXNlZCBET05UIGluc3RlYWQgb2YgU0UgKi8KLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAwLAotICAgICAgICAgICAgICAgICAgICAgICJURUxORVQgU3VibmVnb3Rp YXRpb24gZXJyb3IgLSB1c2VkIERPTlQgaW5zdGVhZCBvZiBTRSEiLAotICAgICAgICAgICAgICAg ICAgICAgICIiCi0gICAgICAgICAgICAgICAgICAgICAgLDAKLSAgICAgICAgICAgICAgICAgICAg ICApOwotICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAg ICAgICAgdG5fZGVidWcoCi0gICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIFN1Ym5lZ290aWF0 aW9uIGVycm9yIC0gdXNlZCBET05UIGluc3RlYWQgb2YgU0UhIik7Ci0gICAgICAgICAgICAgICAg ZmxhZyA9IDM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UgeyAg ICAgICAgICAgIC8qIE90aGVyIHByb3RvY29sIGVycm9yICovCi0gICAgICAgICAgICAgICAgZmxh ZyA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LQotI2lmZGVmIENLX0ZPUldBUkRfWAotICAgICAgICBpZiAoIG9wdCA9PSBURUxPUFRfRk9SV0FS RF9YICYmIHNiWzBdID09IEZXRFhfREFUQSAmJgotICAgICAgICAgICAgIG4gPj0gKFRTQlVGU0la LTQpICYmICFmbGFnICkgewotICAgICAgICAgICAgLyogZG8gbm90IGxldCB0aGUgYnVmZmVyIG92 ZXIgZmxvdyAqLwotICAgICAgICAgICAgLyogd3JpdGUgdGhlIGRhdGEgdG8gdGhlIGNoYW5uZWwg YW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgKi8KLSAgICAgICAgICAgIC8qIHRoZSBpbmNvbWluZyBk YXRhIHVudGlsIElBQyBTRSBpcyByZWFjaGVkLiAqLwotICAgICAgICAgICAgc2JbbisrXSA9IElB QzsKLSAgICAgICAgICAgIHNiW24rK10gPSBTRTsKLQotI2lmZGVmIERFQlVHCi0gICAgICAgICAg ICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkgewotICAgICAgICAgICAgICAgIGlu dCBpOwotICAgICAgICAgICAgICAgIGNrbWFrbXNnKCB0bl9tc2csVE5fTVNHX0xFTiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBSQ1ZEIFNCICIsVEVMT1BUKG9wdCksCi0JCQkg ICIgREFUQShidWZmZXItZnVsbCkgIixOVUxMKTsKLSAgICAgICAgICAgICAgICB0bl9oZXgoKENI QVIgKil0bl9tc2csVE5fTVNHX0xFTiwmc2JbMV0sbi0zKTsKLSAgICAgICAgICAgICAgICBpZiAo ZmxhZyA9PSAyKQotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCIgU0UiLFRO X01TR19MRU4pOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWcgPT0gMykKLSAgICAgICAg ICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiIElBQyBET05UIixUTl9NU0dfTEVOKTsKLSAg ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2cs IiBJQUMgU0UiLFROX01TR19MRU4pOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNn LCIiLDApOwotICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAg ICAgICAgICAgICB0bl9kZWJ1Zyh0bl9tc2cpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIERF QlVHICovCi0KLSAgICAgICAgICAgIGlmICggZndkeF90bl9zYihzYixuKSA8IDAgKSB7Ci0gICAg ICAgICAgICAgICAgZGVidWcoRjEwMCwiZnhkeF90bl9zYigpIGZhaWxlZCIsIiIsMCk7Ci0gICAg ICAgICAgICAgICAgLyogV2UgY2FuJ3QgcmV0dXJuIHRob3VnaCBiZWNhdXNlIHRoYXQgd291bGQg bGVhdmUgICovCi0gICAgICAgICAgICAgICAgLyogZGF0YSB0byBiZSBmb3J3YXJkZWQgaW4gdGhl IHF1ZXVlIHRvIHRoZSBiZSBzZW50ICovCi0gICAgICAgICAgICAgICAgLyogdG8gdGhlIHRlcm1p bmFsIGVtdWxhdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICAvKiByZXNldCBsZWF2ZSB0aGUgbXNnIHR5cGUgYW5kIGNoYW5uZWwgbnVtYmVy IGluIHBsYWNlICovCi0gICAgICAgICAgICBuID0gMzsKLSAgICAgICAgfQotI2VuZGlmIC8qIENL X0ZPUldBUkRfWCAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0bl9zYiBlbmQgb2Ygd2hpbGUg bG9vcCIsImZsYWciLGZsYWcpOwotICAgIGlmICghZmxhZykgeyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE1ha2Ugc3VyZSB3ZSBnb3QgYSB2YWxpZCBTQiAqLwotICAgICAgICBkZWJ1ZyhGMTEx LCAiVEVMTkVUIFN1Ym5lZ290aWF0aW9uIHByZW1hdHVyZWx5IGJyb2tlbiIsIm9wdCIsb3B0KTsK LSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgICAgIGNrbWFrbXNnKCB0 bl9tc2csIFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCAiLCBURUxP UFQob3B0KSwKLSAgICAgICAgICAgICAgICAgICAgICAiIFN1Ym5lZ290aWF0aW9uIHByZW1hdHVy ZWx5IGJyb2tlbiIsTlVMTAotICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICAgICAgICB0 bl9kZWJ1Zyh0bl9tc2cpOwotICAgICAgICB9Ci0gICAgICAgIC8qIFdhcyAtMSBidXQgdGhhdCB3 b3VsZCBiZSBhbiBJL08gZXJyb3IsIHNvIGFic29yYiBpdCBhbmQgZ28gb24uICovCi0gICAgICAg IHJldHVybigwKTsKLSAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nIHx8IHRuX2Rl YiB8fCBkZWJzZXMpIHsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIGNoYXIgKiBzWzE2XTsKLSAg ICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0gICAgICAgICAgc1tpXSA9ICIiOwotICAg ICAgICBpZiAob3B0ID09IFRFTE9QVF9OQVdTKSB7Ci0gICAgICAgICAgICBpID0gMDsKLSAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGkgPSAxOwotICAgICAgICAgICAgc1swXSA9ICJVTktO T1dOIjsKLQotICAgICAgICAgICAgc3dpdGNoIChzYlswXSkgewotICAgICAgICAgICAgICBjYXNl IDA6Ci0gICAgICAgICAgICAgICAgaWYgKG9wdCA9PSBURUxPUFRfRk9SV0FSRF9YKQotICAgICAg ICAgICAgICAgICAgc1swXSA9ICJTQ1JFRU4iOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9w dCA9PSBURUxPUFRfS0VSTUlUKQotICAgICAgICAgICAgICAgICAgc1swXSA9ICJTVEFSVCI7Ci0g ICAgICAgICAgICAgICAgZWxzZSBpZiAob3B0ID09IFRFTE9QVF9MRkxPVykKLSAgICAgICAgICAg ICAgICAgIHNbMF0gPSAiT0ZGIjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChvcHQgPT0gVEVM T1BUX0NPTVBPUlQpCi0gICAgICAgICAgICAgICAgICBzWzBdID0gIlNJR05BVFVSRSI7Ci0gICAg ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgc1swXSA9ICJJUyI7Ci0gICAgICAg ICAgICAgICAgaWYgKG9wdCA9PSBURUxPUFRfRU5DUllQVElPTikgewotICAgICAgICAgICAgICAg ICAgICBpKys7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzYlsxXSA8IEVOQ1RZUEVfQ05UKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBzWzFdID0gZW5jdHlwZV9uYW1lc1tzYlsxXV07Ci0g ICAgICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0 Y2goc2JbMl0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNbMl0gPSAiRkI2NF9JViI7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzWzJdID0gIkZCNjRfSVZfT0siOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc1syXSA9ICJGQjY0X0lWX0JBRCI7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgNDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzJdID0gIkZCNjRfQ0hBTExF TkdFIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbMl0gPSAi RkI2NF9SRVNQT05TRSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBzWzFdID0gIlVOS05PV04iOwotICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChvcHQgPT0gVEVMT1BU X0FVVEhFTlRJQ0FUSU9OKSB7Ci0gICAgICAgICAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAg ICAgICAgICAgICAgc1sxXSA9IEFVVEhUWVBFX05BTUUoc2JbMV0pOwotICAgICAgICAgICAgICAg ICAgICBzWzJdID0gQVVUSE1PREVfTkFNRShzYlsyXSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm IChzYlsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAg ICAgICAgICAgc3dpdGNoIChzYlszXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgewotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9OVExNOgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzWzNdID0gIk5UTE1fQVVUSCI7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJBVVRIIjsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIEFVVEhUWVBFX1NTTDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c1szXSA9ICJTVEFSVCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9OVExNOgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIk5UTE1fQ0hBTExFTkdFIjsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0g IlJFSkVDVCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgewotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9OVExNOgotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzWzNdID0gIk5UTE1fUkVTUE9OU0UiOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1 bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiQUNDRVBUIjsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIEFVVEhUWVBFX05UTE06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNbM10gPSAiTlRMTV9BQ0NFUFQiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogICAvKiBLRVJCRVJP U192NCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiAgIC8qIFNSUCAq LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIkNIQUxMRU5HRSI7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSAyOiAgIC8qIEtFUkJFUk9TX3Y1ICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNbM10gPSAiUkVTUE9OU0UiOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQVVU SFRZUEVfU1NMOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIlJFSkVD VCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN3aXRjaCAoc2JbMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug QVVUSFRZUEVfTlRMTToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJO VExNX1JFSkVDVCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiAgIC8qIEtFUkJFUk9TX1Y0ICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6ICAgLyogU1JQICovCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiUkVTUE9OU0UiOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgMjogICAvKiBLRVJCRVJPU19WNSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzWzNdID0gIkZPUldBUkQiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNToKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIDU6ICAgLyogU1JQICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNbM10gPSAiRk9SV0FSRCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiAgIC8qIEtF UkJFUk9TX1Y1ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiRk9S V0FSRF9BQ0NFUFQiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIDU6ICAgLyogU1JQICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNbM10gPSAiRk9SV0FSRF9BQ0NFUFQiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogLyogS0VSQkVS T1NfVjUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJGT1JXQVJE X1JFSkVDVCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgNTogICAvKiBTUlAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1sz XSA9ICJGT1JXQVJEX1JFSkVDVCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiAvKiBLRVJCRVJPU19W NSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIlRMU19WRVJJRlki OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN3aXRjaCAoc2JbMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug NTogLyogU1JQICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiRVhQ IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3dpdGNoIChzYlsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1 OiAvKiBTUlAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJQQVJB TVMiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMToK LSAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgewotICAgICAgICAgICAgICAgICAgY2FzZSBU RUxPUFRfRk9SV0FSRF9YOgotICAgICAgICAgICAgICAgICAgICBzWzBdID0gIk9QRU4iOwotICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0xG TE9XOgotICAgICAgICAgICAgICAgICAgICBzWzBdID0gIk9OIjsKLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6Ci0gICAgICAg ICAgICAgICAgICAgIHNbMF0gPSAiU1RPUCI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAgICAgICAgICAg ICAgc1swXSA9ICJTRVQtQkFVRFJBVEUiOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQVVUSEVOVElDQVRJT046Ci0gICAgICAgICAg ICAgICAgICAgIHNbMF0gPSAiU0VORCI7Ci0gICAgICAgICAgICAgICAgICAgIGhleGJ1ZlswXSA9 ICdcMCc7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgbi0yOyBpICs9IDIpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmICggQVVUSFRZUEVfTkFNRV9PSyhzYltpXSkgJiYKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSE1PREVfTkFNRV9PSyhzYltpXSkpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coIHRuX21zZywgVE5fTVNHX0xFTiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShzYltpXSks IiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRITU9ERV9OQU1F KHNiW2krMV0pLCIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICBj a21ha3htc2codG5fbXNnLCBUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQVVUSFRZUEVfTkFNRShzYltpXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiPSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2l0 b2Eoc2JbaV0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSE1PREVfTkFNRShzYltpKzFdKSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9IiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShzYltpKzFdKSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICIgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQoaGV4YnVmLHRuX21zZyxz aXplb2YoaGV4YnVmKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgc1sxXSA9IGhleGJ1ZjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg ICAgICAgICAgIGNhc2UgVEVMT1BUX0VOQ1JZUFRJT046Ci0gICAgICAgICAgICAgICAgICAgIHNb MF0gPSAiU1VQUE9SVCI7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgbi0yKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBzW2ldID0gZW5jdHlwZV9uYW1lc1tzYltpXV07Ci0gICAg ICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX1NUQVJU X1RMUzoKLSAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJGT0xMT1dTIjsKLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg ICAgICAgICBzWzBdID0gIlNFTkQiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICBicmVhazsKLQotICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgc3dpdGNo IChvcHQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9GT1JXQVJEX1g6Ci0gICAgICAg ICAgICAgICAgICAgIHNbMF0gPSAiQ0xPU0UiOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0xGTE9XOgotICAgICAgICAgICAgICAgICAg ICBzWzBdID0gIlJFU1RBUlQtQU5ZIjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6Ci0gICAgICAgICAgICAgICAgICAgIHNb MF0gPSAiUkVRLVNUQVJUIjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgotICAgICAgICAgICAgICAgICAgICBzWzBdID0g IlNFVC1EQVRBU0laRSI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgY2FzZSBURUxPUFRfTkVXRU5WSVJPTjoKLSAgICAgICAgICAgICAgICAgICAgc1swXSA9 ICJJTkZPIjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBj YXNlIFRFTE9QVF9BVVRIRU5USUNBVElPTjoKLSAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJS RVBMWSI7Ci0gICAgICAgICAgICAgICAgICAgIGk9NDsKLSAgICAgICAgICAgICAgICAgICAgc1sx XSA9IEFVVEhUWVBFX05BTUUoc2JbMV0pOwotICAgICAgICAgICAgICAgICAgICBzWzJdID0gQVVU SE1PREVfTkFNRShzYlsyXSk7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbM10pIHsK LSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBz d2l0Y2ggKHNiWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQVVUSFRZUEVf TlRMTToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIk5UTE1fQVVUSCI7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJBVVRIIjsK LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgICAg IHN3aXRjaCAoc2JbMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQ RV9OVExNOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiTlRMTV9DSEFMTEVO R0UiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAi UkVKRUNUIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAg ICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSBBVVRIVFlQRV9OVExNOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiTlRM TV9SRVNQT05TRSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg c1szXSA9ICJBQ0NFUFQiOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgotICAgICAg ICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgewotICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIEFVVEhUWVBFX05UTE06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc1sz XSA9ICJOVExNX0FDQ0VQVCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjQ6Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQVVUSFRZUEVfU1JQOgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNbM10gPSAiQ0hBTExFTkdFIjsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9LRVJC RVJPU19WNToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIlJFU1BPTlNFIjsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9OVExNOgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNbM10gPSAiTlRMTV9SRUpFQ1QiOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBF X0tFUkJFUk9TX1Y0OgotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX1NS UDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIlJFU1BPTlNFIjsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz WzNdID0gIkZPUldBUkQiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgICAgICAgICAgICAgc3dp dGNoIChzYlsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX1NS UDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIkZPUldBUkQiOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICBj YXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y1OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNb M10gPSAiRk9SV0FSRF9BQ0NFUFQiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgICAgICAgICAg ICAgc3dpdGNoIChzYlsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhU WVBFX1NSUDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIkZPUldBUkRfQUND RVBUIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNToKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzWzNdID0gIkZPUldBUkRfUkVKRUNUIjsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzoKLSAgICAgICAg ICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSBBVVRIVFlQRV9TUlA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9 ICJGT1JXQVJEX1JFSkVDVCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjU6Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJUTFNfVkVSSUZZIjsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODoK LSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9TUlA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgc1szXSA9ICJFWFAiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OgotICAgICAgICAgICAgICAgICAgICAgICAgc3dp dGNoIChzYlsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX1NS UDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIlBBUkFNUyI7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0VO Q1JZUFRJT046Ci0gICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiUkVQTFkiOwotICAgICAgICAg ICAgICAgICAgICBzWzFdID0gZW5jdHlwZV9uYW1lc1tzYlsxXV07Ci0gICAgICAgICAgICAgICAg ICAgIGkrKzsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsyXSkgewotICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKLSAgICAg ICAgICAgICAgICAgICAgICAgIHNbMl0gPSAiRkI2NF9JViI7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAg ICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzWzJdID0gIkZCNjRfSVZf T0siOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg ICAgY2FzZSAzOgotICAgICAgICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAg ICAgICAgICAgc1syXSA9ICJGQjY0X0lWX0JBRCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgICAg ICAgICBpKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzWzJdID0gIkZCNjRfQ0hBTExFTkdF IjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg IGNhc2UgNToKLSAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHNbMl0gPSAiRkI2NF9SRVNQT05TRSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg IGNhc2UgMzoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgewotICAgICAgICAgICAgICAg ICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgotICAgICAgICAgICAgICAgICAgICBzWzBdID0gIkRB VEEiOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug VEVMT1BUX0xGTE9XOgotICAgICAgICAgICAgICAgICAgICBzWzBdID0gIlJFU1RBUlQtWE9OIjsK LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRFTE9Q VF9LRVJNSVQ6Ci0gICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiUkVRLVNUT1AiOwotICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBP UlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTRVQtUEFSSVRZIjsKLSAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0FVVEhF TlRJQ0FUSU9OOgotICAgICAgICAgICAgICAgICAgICBzWzBdID0gIk5BTUUiOwotICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0VOQ1JZUFRJ T046Ci0gICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU1RBUlQiOwotICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgewotICAg ICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgotICAgICAgICAgICAgICAgICAg ICBzWzBdID0gIk9QVElPTlMiOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKLSAgICAgICAgICAgICAgICAgICAgc1swXSA9 ICJTT1AiOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNh c2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTRVQtU1RP UFNJWkUiOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg Y2FzZSBURUxPUFRfRU5DUllQVElPTjoKLSAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJFTkQi OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICBz d2l0Y2ggKG9wdCkgewotICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0ZPUldBUkRfWDoKLSAg ICAgICAgICAgICAgICAgICAgc1swXSA9ICJPUFRJT05fREFUQSI7Ci0gICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0VOQ1JZUFRJT046Ci0gICAg ICAgICAgICAgICAgICAgIHNbMF0gPSAiUkVRVUVTVC1TVEFSVCI7Ci0gICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAg ICAgICAgICAgICAgIHNbMF0gPSAiU0VULUNPTlRST0wiOwotICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgewotICAgICAgICAg ICAgICAgICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgotICAgICAgICAgICAgICAgICAgICBzWzBd ID0gIlhPRkYiOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg IGNhc2UgVEVMT1BUX0VOQ1JZUFRJT046Ci0gICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiUkVR VUVTVC1FTkQiOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg IGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJOT1RJ RlktTElORVNUQVRFIjsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSA3Ogot ICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRF TE9QVF9GT1JXQVJEX1g6Ci0gICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiWE9OIjsKLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9FTkNS WVBUSU9OOgotICAgICAgICAgICAgICAgICAgICBzWzBdID0gIkVOQy1LRVlJRCI7Ci0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9S VDoKLSAgICAgICAgICAgICAgICAgICAgICBzWzBdID0gIk5PVElGWS1NT0RFTVNUQVRFIjsKLSAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSA4OgotICAgICAgICAgICAgICAgIHN3 aXRjaCAob3B0KSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6Ci0gICAg ICAgICAgICAgICAgICAgIHNbMF0gPSAiUkVTUC1TVEFSVCI7Ci0gICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoKLSAgICAg ICAgICAgICAgICAgICAgc1swXSA9ICJERUMtS0VZSUQiOwotICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAg ICAgICAgICAgICAgc1swXSA9ICJGTE9XQ09OVFJPTC1TVVNQRU5EIjsKLSAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgY2FzZSA5OgotICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7 Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6Ci0gICAgICAgICAgICAgICAg ICAgIHNbMF0gPSAiUkVTUC1TVE9QIjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgotICAgICAgICAgICAgICAgICAgICAg IHNbMF0gPSAiRkxPV0NPTlRST0wtUkVTVU1FIjsKLSAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgY2FzZSAxMDoKLSAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAg ICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgotICAgICAgICAgICAgICAgICAgICBzWzBd ID0gIlNFVC1MSU5FU1RBVEUtTUFTSyI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj YXNlIDExOgotICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKLSAgICAgICAgICAgICAg ICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJT RVQtTU9ERU1TVEFURS1NQVNLIjsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz ZSAxMjoKLSAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAgICAgICAgICAg ICBjYXNlIFRFTE9QVF9DT01QT1JUOgotICAgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiUFVS R0UtREFUQSI7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLQotCi0gICAgICAgICAgICBjYXNlIDEwMDoK LSAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAgICAgICAgICAgICBjYXNl IFRFTE9QVF9DT01QT1JUOgotICAgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU19TSUdOQVRV UkUiOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDEwMToKLSAgICAgICAg ICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9D T01QT1JUOgotICAgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU19TRVQtQkFVRFJBVEUiOwot ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDEwMjoKLSAgICAgICAgICAgICAg ICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JU OgotICAgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU19TRVQtREFUQVNJWkUiOwotICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDEwMzoKLSAgICAgICAgICAgICAgICAgIHN3 aXRjaCAob3B0KSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgotICAg ICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU19TRVQtUEFSSVRZIjsKLSAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgY2FzZSAxMDQ6Ci0gICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9w dCkgewotICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAgICAg ICAgICAgICAgICBzWzBdID0gIlNfU0VULVNUT1BTSVpFIjsKLSAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgY2FzZSAxMDU6Ci0gICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgewot ICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAgICAgICAgICAg ICAgICBzWzBdID0gIlNfU0VULUNPTlRST0wiOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICBjYXNlIDEwNjoKLSAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAg ICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgotICAgICAgICAgICAgICAgICAgICAgIHNb MF0gPSAiU19OT1RJRlktTElORVNUQVRFIjsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgY2FzZSAxMDc6Ci0gICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgewotICAgICAgICAg ICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAgICAgICAgICAgICAgICBzWzBd ID0gIlNfTk9USUZZLU1PREVNU1RBVEUiOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICBjYXNlIDEwODoKLSAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAgICAg ICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgotICAgICAgICAgICAgICAgICAgICAgIHNbMF0g PSAiU19GTE9XQ09OVFJPTC1TVVNQRU5EIjsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgY2FzZSAxMDk6Ci0gICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgewotICAgICAgICAg ICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAgICAgICAgICAgICAgICBzWzBd ID0gIlNfRkxPV0NPTlRST0wtUkVTVU1FIjsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgY2FzZSAxMTA6Ci0gICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgewotICAgICAgICAg ICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAgICAgICAgICAgICAgICBzWzBd ID0gIlNfU0VULUxJTkVTVEFURS1NQVNLIjsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgY2FzZSAxMTE6Ci0gICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgewotICAgICAgICAg ICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAgICAgICAgICAgICAgICBzWzBd ID0gIlNfU0VULU1PREVNU1RBVEUtTUFTSyI7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgIGNhc2UgMTEyOgotICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKLSAgICAgICAg ICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgc1sw XSA9ICJTX1BVUkdFLURBVEEiOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0K LSAgICAgICAgfQotI2lmZGVmIE1fWEVOSVgKLSAgICAgICAgewotICAgICAgICAgIGludCBsZW4s IHBhcmFtLCBwYXJhbV9sZW47Ci0gICAgICAgICAgY2ttYWttc2coIHRuX21zZywgVE5fTVNHX0xF TiwKLSAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBSQ1ZEIFNCICIsCi0gICAgICAgICAgICAg ICAgICAgIFRFTE9QVChvcHQpLCIgIixOVUxMKTsKLSAgICAgICAgICBsZW4gPSBzdHJsZW4odG5f bXNnKTsKLSAgICAgICAgICBmb3IgKHBhcmFtID0gMDsgcGFyYW0gPD0gMTU7IHBhcmFtKyspIHsK LSAgICAgICAgICAgIHBhcmFtX2xlbiA9IHN0cmxlbihzW3BhcmFtXSk7Ci0gICAgICAgICAgICBp ZiAocGFyYW1fbGVuID4gMCkgewotICAgICAgICAgICAgICBzdHJjcHkoJnRuX21zZ1tsZW5dLCBz W3BhcmFtXSk7Ci0gICAgICAgICAgICAgIGxlbiArPSBwYXJhbV9sZW47Ci0gICAgICAgICAgICAg IHRuX21zZ1tsZW4rK10gPSAnICc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAg ICAgIHRuX21zZ1tsZW5dID0gJ1wwJzsKLSAgICAgICAgfQotI2Vsc2UgLyogTV9YRU5JWCAqLwot ICAgICAgICBja21ha3htc2codG5fbXNnLFROX01TR19MRU4sIlRFTE5FVCBSQ1ZEIFNCICIsVEVM T1BUKG9wdCksIiAiLAotICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaTsKLSAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYg KHNbaV1bMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZyxzW2ldLFRO X01TR19MRU4pOwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCIgIixUTl9N U0dfTEVOKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNl bmRpZiAvKiBNX1hFTklYICovCi0gICAgICAgIHRuX2hleCgoQ0hBUiAqKXRuX21zZyxUTl9NU0df TEVOLCZzYltpXSxuLTItaSk7Ci0gICAgICAgIGlmIChmbGFnID09IDIpCi0gICAgICAgICAgY2tz dHJuY2F0KHRuX21zZywiIFNFIixUTl9NU0dfTEVOKTsKLSAgICAgICAgZWxzZSBpZiAoZmxhZyA9 PSAzKQotICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIiBJQUMgRE9OVCIsVE5fTVNHX0xFTik7 Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCIgSUFDIFNFIixUTl9N U0dfTEVOKTsKLSAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7Ci0gICAgICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgIHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgfQotICAg IGRlYnVnKEYxMTEsInRuX3NiIiwibGVuIixuKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgICps ZW4gPSBuOyAgICAgICAgICAgLyogcmV0dXJuIGxlbmd0aCAqLwotICAgIHJldHVybigxKTsgICAg ICAgICAgLyogc3VjY2VzcyAqLwotfQotCi1zdGF0aWMgY2hhciByb3dzX2J1ZlsxNl0gPSB7IDAs IDAgfTsgLyogTElORVMgRW52aXJvbm1lbnQgdmFyaWFibGUgKi8KLXN0YXRpYyBjaGFyIGNvbHNf YnVmWzE2XSA9IHsgMCwgMCB9OyAvKiBDT0xVTU5TIEVudmlvcm5tZW50IHZhcmlhYmxlICovCi1z dGF0aWMgY2hhciB0ZXJtX2J1Zls2NF0gPSB7IDAsIDAgfTsgLyogVEVSTSBFbnZpcm9ubWVudCB2 YXJpYWJsZSAqLwotCi0jaWZkZWYgQ0tfQ1VSU0VTCi0jaWZuZGVmIFZNUwotI2lmbmRlZiBDT0hF UkVOVAotX1BST1RPVFlQKGludCB0Z2V0ZW50LChjaGFyICosIGNoYXIgKikpOwotI2VuZGlmIC8q IENPSEVSRU5UICovCi0jZWxzZQotI2lmZGVmIF9fREVDQwotX1BST1RPVFlQKGludCB0Z2V0ZW50 LChjaGFyICosIGNoYXIgKikpOwotI2VuZGlmIC8qIF9fREVDQyAqLwotI2VuZGlmIC8qIFZNUyAq LwotZXh0ZXJuIGNoYXIgKiB0cm1idWY7ICAgICAgICAgICAgICAgICAgIC8qIFJlYWwgY3Vyc2Vz ICovCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi1zdGF0 aWMgaW50Ci10bl9ub19lbmNyeXB0KCkKLXsKLSAgICAvKiBQcmV2ZW50IEVuY3J5cHRpb24gZnJv bSBiZWluZyBuZWdvdGlhdGVkICovCi0gICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJ T04pID0gVE5fTkdfUkY7Ci0gICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBU Tl9OR19SRjsKLQotICAgIC8qIENhbmNlbCBhbnkgbmVnb3RpYXRpb24gdGhhdCBtaWdodCBoYXZl IHN0YXJ0ZWQgKi8KLSAgICBja190bl9lbmNfc3RvcCgpOwotCi0gICAgaWYgKFRFTE9QVF9NRShU RUxPUFRfRU5DUllQVElPTikgfHwKLSAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoVEVM T1BUX0VOQ1JZUFRJT04pKSB7Ci0gICAgICAgIFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikg PSAwOwotICAgICAgICBpZiAodG5fc29wdChXT05ULFRFTE9QVF9FTkNSWVBUSU9OKSA8IDApCi0g ICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XT05UKFRF TE9QVF9FTkNSWVBUSU9OKSA9IDE7Ci0gICAgfQotICAgIGlmIChURUxPUFRfVShURUxPUFRfRU5D UllQVElPTikgfHwKLSAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKFRFTE9QVF9FTkNSWVBU SU9OKSkgewotICAgICAgICBURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikgPSAwOwotICAgICAg ICBpZiAodG5fc29wdChET05ULFRFTE9QVF9FTkNSWVBUSU9OKSA8IDApCi0gICAgICAgICAgICBy ZXR1cm4oLTEpOwotICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ET05UKFRFTE9QVF9FTkNSWVBU SU9OKSA9IDE7Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBDS19FTkNSWVBU SU9OICovCi0KLS8qIFRoZSBmb2xsb3dpbmcgbm90ZSBjYW1lIGZyb20gdGhlIG9sZCBTR0EgbmVn b3RpYXRpb24gY29kZS4gIFRoaXMgc2hvdWxkICovCi0vKiBubyBsb25nZXIgYmUgbmVjZXNzYXJ5 IHdpdGggdGhlIE5ldyBUZWxuZXQgbmVnb3RpYXRpb24gc3RhdGUgbWFjaGluZS4gICAqLwotLyoK LSAgTm90ZTogVGhlIGZvbGxvd2luZyBpcyBwcm9wZXIgYmVoYXZpb3IsIGFuZCByZXF1aXJlZCBm b3IgdGFsa2luZyB0byB0aGUKLSAgQXBlcnR1cyBpbnRlcmZhY2UgdG8gdGhlIE5PVElTIGxpYnJh cnkgc3lzdGVtLCBlLmcuIGF0IElvd2EgU3RhdGUgVToKLSAgc2Nob2xhci5pYXN0YXRlLmVkdS4g IFdpdGhvdXQgdGhpcyByZXBseSwgdGhlIHNlcnZlciBoYW5ncyBmb3JldmVyLiAgVGhpcwotICBj b2RlIHNob3VsZCBub3QgYmUgbG9vcC1pbmR1Y2luZywgc2luY2UgQy1LZXJtaXQgbmV2ZXIgc2Vu ZHMgV0lMTCBTR0EgYXMKLSAgYW4gaW5pdGlhbCBiaWQsIHNvIGlmIERPIFNHQSBjb21lcywgaXQg aXMgbmV2ZXIgYW4gQUNLLgotKi8KLS8qCi0gIFJldHVybiB2YWx1ZXM6Ci0gIC0xID0gVGVsbmV0 IE9wdGlvbiBuZWdvdGlhdGlvbiBlcnJvcgotICAtMiA9IENvbm5lY3Rpb24gY2xvc2VkIGJ5IHBl ZXIKLSAgLTMgPSBDb25uZWN0aW9uIGNsb3NlZCBieSB1cwotICAwICA9IFN1Y2Nlc3MKLSAgMSAg PSBFY2hvaW5nIG9uCi0gIDIgID0gRWNob2luZyBvZmYKLSAgMyAgPSBRdW90ZWQgSUFDCi0gIDQg ID0gSUtTIEV2ZW50Ci0gIDUgID0gKHVuYXNzaWduZWQpCi0gIDYgID0gTG9nb3V0Ci0qLwotCi1z dGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMgICAgICAgICAgICAgICAgICAgICAgICAgLyogVEVM TkVUIERPIE9QVElPTiAqLwotdG5feGRvb3AoQ0hBUiB6LCBpbnQgZWNobywgaW50ICgqZm4pKGlu dCkpCi0jZWxzZQotdG5feGRvb3AoeiwgZWNobywgZm4pIENIQVIgejsgaW50IGVjaG87IGludCAo KmZuKSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bl94ZG9vcCAqLyB7Ci0gICAgaW50 IGMsIHgsIHksIG4sIG07Ci0jaWZkZWYgSUtTX09QVElPTgotICAgIGV4dGVybiBpbnQgc2VydmVy OwotI2lmZGVmIE5PSUNQCi0gICAgZXh0ZXJuIGludCBhdXRvZGw7Ci0gICAgaW50IGluYXV0b2Rs ID0gMCwgY21kYWRsID0gMTsKLSNlbHNlCi0jaWZkZWYgQ0tfQVVUT0RMCi0gICAgZXh0ZXJuIGlu dCBhdXRvZGwsIGluYXV0b2RsLCBjbWRhZGw7Ci0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0jZW5k aWYgLyogTk9JQ1AgKi8KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0KLSAgICAvKiBpZiAoIUlT X1RFTE5FVCgpKSByZXR1cm4oNyk7ICovCi0KLS8qIEhhdmUgSUFDLCByZWFkIGNvbW1hbmQgY2hh cmFjdGVyLiAqLwotCi0gICAgd2hpbGUgKChjID0gKCpmbikoMCkpID09IC0xKTsgICAgICAgLyog UmVhZCBjb21tYW5kIGNoYXJhY3RlciAqLwotICAgIGlmIChjIDwgMCkKLSAgICAgIHJldHVybihj KTsKLSAgICBjICY9IDB4RkY7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJpcCBoaWdo IGJpdHMgKi8KLQotICAgIGlmICghVEVMQ01EX09LKGMpKSB7Ci0jaWZkZWYgREVCVUcKLSAgICAg ICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMgfHwgZGVibG9nKSB7Ci0gICAgICAgICAgICBja21ha21z Zyh0bl9tc2csVE5fTVNHX0xFTiwiVEVMTkVUIFJDVkQgVU5LTk9XTiAoIiwKLSAgICAgICAgICAg ICAgICAgICAgIGNraXRvYShjKSwiKSIsTlVMTCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLHRu X21zZywiIixjKTsKLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAg ICAgICB0bl9kZWJ1Zyh0bl9tc2cpOwotICAgICAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAg ICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAodHRucHJvdG8gPT0gTlBfTk9ORSkgewot ICAgICAgICBkZWJ1ZyhGMTAwLCJ0bl9kb29wIGRpc2NvdmVyZWQgYSBUZWxuZXQgY29tbWFuZCIs Ci0gICAgICAgICAgICAgICJ0dG5wcm90byA9IE5QX1RFTE5FVCIsMCk7Ci0gICAgICAgIHR0bnBy b3RvID0gTlBfVEVMTkVUOwotICAgIH0KLSAgICBpZiAoc2VzbG9nICYmIHNlc3NmdCA9PSBYWUZU X0QpIHsgICAvKiBDb3B5IHRvIHNlc3Npb24gbG9nLCBpZiBhbnkuICovCi0gICAgICAgIGxvZ2No YXIoKGNoYXIpeik7Ci0gICAgICAgIGxvZ2NoYXIoKGNoYXIpYyk7Ci0gICAgfQotCi0gICAgaWYg KGMgPT0gKENIQVIpIElBQykgICAgICAgICAgICAgICAgLyogUXVvdGVkIElBQyAqLwotICAgICAg cmV0dXJuKDMpOwotCi0gICAgaWYgKGMgPCBTQikgeyAgICAgICAgICAgICAgICAgICAgICAgLyog T3RoZXIgY29tbWFuZCB3aXRoIG5vIGFyZ3VtZW50cy4gKi8KLSNpZmRlZiBERUJVRwotICAgICAg ICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgICAgIGNrbWFrbXNn KHRuX21zZyxUTl9NU0dfTEVOLCJURUxORVQgUkNWRCAiLFRFTENNRChjKSxOVUxMLE5VTEwpOwot ICAgICAgICAgICAgZGVidWcoRjEwMSx0bl9tc2csIiIsYyk7Ci0gICAgICAgICAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIERF QlVHICovCi0gICAgICAgIHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAgICAgLyogV2hhdCB3 ZSB3b3VsZCBsaWtlIHRvIGRvIGhlcmUgICAgKi8KLSAgICAgICAgICBjYXNlIFROX0dBOiAgICAg ICAgICAgICAgICAgICAvKiBJcyBzdWJzdGl0dXRlIEFTQ0lJIGNoYXJhY3RlcnMgICAqLwotICAg ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciB0aGUgVGVsbmV0IENv bW1hbmQgc28gdGhhdCAgICovCi0gICAgICAgICAgY2FzZSBUTl9FTDogICAgICAgICAgICAgICAg ICAgLyogdGhlIGNvbW1hbmQgbWF5IGJlIHByb2Nlc3NlZCBieSAgKi8KLSAgICAgICAgICAgIGJy ZWFrOyAgICAgICAgICAgICAgICAgICAgICAvKiBlaXRoZXIgdGhlIGludGVybmFsIGVtdWxhdG9y IG9yICAqLwotICAgICAgICAgIGNhc2UgVE5fRUM6ICAgICAgICAgICAgICAgICAgIC8qIGJ5IHRo ZSBzdXBlcmlvciBwcm9jZXNzIG9yIHNoZWxsICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICBjYXNlIFROX0FZVDoKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIFJlcXVlc3RUZWxuZXRN dXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0gICAgICAgICAgICB0dG9sKChD SEFSICopIltZZXNdXDAxNVwwMTIiLDcpOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgUmVsZWFz ZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh c2UgVE5fQU86Ci0jaWZkZWYgQkVUQURFQlVHCi0gICAgICAgICAgICBibGVlcChCUF9OT1RFKTsK LSNlbmRpZiAvKiBCRVRBREVCVUcgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh c2UgVE5fSVA6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEJSRUFLOgotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBUTl9ETToKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgIGNhc2UgVE5fTk9QOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSBTRToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVE5fRU9SOgotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBUTl9BQk9SVDoKLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgIGNhc2UgVE5fU1VTUDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgIGNhc2UgVE5fRU9GOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBUTl9T QUs6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4oMCk7Ci0g ICAgfQotCi0vKiBTQiwgV0lMTCwgV09OVCwgRE8sIG9yIERPTlQgbmVlZCBtb3JlIGJ5dGVzLi4u ICovCi0KLSAgICBpZiAoKHggPSAoKmZuKSgwKSkgPCAwKSAgICAgICAgICAgICAvKiBHZXQgdGhl IG9wdGlvbi4gKi8KLSAgICAgIHJldHVybih4KTsKLSAgICB4ICY9IDB4ZmY7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUcmltIHRvIDggYml0cy4gKi8KLQotICAgIGlmIChzZXNsb2cgJiYg c2Vzc2Z0ID09IFhZRlRfRCkgeyAgIC8qIFNlc3Npb24gbG9nICovCi0gICAgICAgIGxvZ2NoYXIo KGNoYXIpIHgpOwotICAgIH0KLSNpZmRlZiBERUJVRwotICAgIGlmICgoZGVibG9nIHx8IHRuX2Rl YiB8fCBkZWJzZXMpICYmIGMgIT0gU0IpIHsKLSAgICAgICAgY2ttYWttc2codG5fbXNnLFROX01T R19MRU4sIlRFTE5FVCBSQ1ZEICIsVEVMQ01EKGMpLCIgIixURUxPUFQoeCkpOwotICAgICAgICBk ZWJ1ZyhGMTAxLHRuX21zZywiIix4KTsKLSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRu X2RlYnVnKHRuX21zZyk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgLyogTm93IGhh bmRsZSB0aGUgY29tbWFuZCAqLwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSBXSUxMOgot I2lmZGVmIENLX1NTTAotICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0 YXJ0X3Rscy5tZV9mb2xsb3dzKQotICAgICAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIENL X1NTTCAqLwotI2lmZGVmIENLX0ZPUldBUkRfWAotICAgICAgICAgIGlmICh4ID09IFRFTE9QVF9G T1JXQVJEX1gpIHsKLSAgICAgICAgICAgICAgaWYgKCFmd2R4X3NlcnZlcl9hdmFpbCgpIHx8ICEo ZndkeF9ub19lbmNyeXB0IHx8Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAgICAgIChzc2xf YWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKQotI2Vsc2UgLyogQ0tfU1NMICovCi0gICAg ICAgICAgICAgICAgIDAKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICAgfHwK LSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgIChja190bl9lbmNyeXB0aW5n KCkgJiYgY2tfdG5fZGVjcnlwdGluZygpKQotI2Vsc2UgLyogQ0tfRU5DUllQVElPTiAqLwotICAg ICAgICAgICAgICAgICAwCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAgICAg ICAgICApKSB7Ci0gICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9GT1JXQVJE X1gpID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRf Rk9SV0FSRF9YKSA9IFROX05HX1JGOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotI2Vu ZGlmIC8qIENLX0ZPUldBUkRfWCAqLwotICAgICAgICBpZiAoIVRFTE9QVF9PSyh4KSB8fCBURUxP UFRfVV9NT0RFKHgpID09IFROX05HX1JGKSB7Ci0gICAgICAgICAgICBpZiAodG5fc29wdChET05U LHgpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIGlmIChURUxP UFRfVU5BTlNXRVJFRF9ETyh4KSkKLSAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9E Tyh4KSA9IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoIVRFTE9QVF9VKHgpKSB7Ci0gICAgICAgICAg ICBpZiAoIVRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRu X3NvcHQoRE8seCkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpKQotICAgICAgICAg ICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpID0gMDsKLSAgICAgICAgICAgIFRFTE9QVF9V KHgpID0gMTsKLQotICAgICAgICAgICAgc3dpdGNoICh4KSB7Ci0jaWZkZWYgQ0tfU1NMCi0gICAg ICAgICAgICAgIGNhc2UgVEVMT1BUX1NUQVJUX1RMUzoKLSAgICAgICAgICAgICAgICAvKgotICAg ICAgICAgICAgICAgICAgIElmIG15IHByb3Bvc2FsIGlzIGFjY2VwdGVkLCBhdCB0aGlzIHBvaW50 IHRoZSBUZWxuZXQKLSAgICAgICAgICAgICAgICAgICBwcm90b2NvbCBpcyB0dXJuZWQgb2ZmIGFu ZCBhIFRMUyBuZWdvdGlhdGlvbiB0YWtlcwotICAgICAgICAgICAgICAgICAgIHBsYWNlLgotCi0g ICAgICAgICAgICAgICAgICAgU3RhcnQgYnkgc2VuZGluZyBTQiBTVEFSVF9UTFMgRk9MTE9XUyAg dG8gc2lnbmFsCi0gICAgICAgICAgICAgICAgICAgd2UgYXJlIHJlYWR5LiAgV2FpdCBmb3IgdGhl IHBlZXIgdG8gc2VuZCB0aGUgc2FtZQotICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIHN0YXJ0 IHRoZSBUTFMgbmVnb3RpYXRpb24uCi0KLSAgICAgICAgICAgICAgICAgICBJZiB0aGUgVExTIG5l Z290aWF0aW9uIHN1Y2NlZWRzIHdlIGNhbGwgdG5faW5pKCkKLSAgICAgICAgICAgICAgICAgICBh Z2FpbiB0byByZXNldCB0aGUgdGVsbmV0IHN0YXRlIG1hY2hpbmUgYW5kIHJlc3RhcnQKLSAgICAg ICAgICAgICAgICAgICB0aGUgbmVnb3RpYXRpb24gcHJvY2VzcyBvdmVyIHRoZSBub3cgc2VjdXJl IGxpbmsuCi0KLSAgICAgICAgICAgICAgICAgICBJZiB0aGUgVExTIG5lZ290aWF0aW9uIGZhaWxz LCB3ZSBjYWxsIHR0Y2xvcygpCi0gICAgICAgICAgICAgICAgICAgdG8gdGVybWluYXRlIHRoZSBj b25uZWN0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgT25seSB0aGUgc2VydmVyIHNob3VsZCBy ZWNlaXZlIGEgV0lMTCBTVEFSVF9UTFMKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg ICAgICB0bl9zc2JvcHQoVEVMT1BUX1NUQVJUX1RMUywxLE5VTEwsMCk7Ci0gICAgICAgICAgICAg ICAgVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzID0gMTsK LSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lmZGVmIENL X0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0FVVEhFTlRJQ0FUSU9O OiB7Ci0gICAgICAgICAgICAgICAgICAvKiBXZSBub3cgaGF2ZSB0byBwZXJmb3JtIGEgU0IgU0VO RCB0byBpZGVudGlmeSB0aGUgICovCi0gICAgICAgICAgICAgICAgICAvKiBzdXBwb3J0ZWQgYXV0 aGVudGljYXRpb24gdHlwZXMgdG8gdGhlIG90aGVyIHNpZGUuICovCi0gICAgICAgICAgICAgICAg ICBleHRlcm4gaW50IGF1dGhlbnRpY2F0aW9uX3ZlcnNpb247Ci0KLSNpZmRlZiBDS19TU0wKLSAg ICAgICAgICAgICAgICAgIC8qIGlmIHdlIGhhdmUgYW4gb3V0c3RhbmRpbmcgRE8gU1RBUlRfVExT IHRoZW4gd2UgbXVzdCAKLSAgICAgICAgICAgICAgICAgICAqIHdhaXQgZm9yIHRoZSByZXNwb25z ZSBiZWZvcmUgd2UgZGV0ZXJtaW5lIHdoYXQgdG8gZG8KLSAgICAgICAgICAgICAgICAgICAqLwot ICAgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPKFRFTE9QVF9TVEFSVF9U TFMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMp LnN0YXJ0X3Rscy5hdXRoX3JlcXVlc3QgPSAxOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAg ICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX0FVVE87Ci0gICAgICAgICAg ICAgICAgICBja190bl9hdXRoX3JlcXVlc3QoKTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNpZmRlZiBD S19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0VOQ1JZUFRJT046Ci0gICAg ICAgICAgICAgICAgaWYgKCEoVEVMT1BUX01FKFRFTE9QVF9BVVRIRU5USUNBVElPTikgfHwKLSAg ICAgICAgICAgICAgICAgICAgICBURUxPUFRfVShURUxPUFRfQVVUSEVOVElDQVRJT04pKQotICAg ICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoRE9O VCx4KSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAg ICAgICAgICAgVEVMT1BUX1UoeCkgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgICAgIGlmIChja190bl9hdXRoX2luX3Byb2dyZXNzKCkpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfRU5DUllQVElPTikuZW5jcnlwdC5uZWVk X3RvX3NlbmQgPSAxOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgICAgICAgICAgLyogUGVyZm9ybSBzdWJuZWdvdGlhdGlvbiAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgY2tfZW5jcnlwdF9zZW5kX3N1cHBvcnQoKTsKLSAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICBpZiAoIShURUxPUFRfTUUoeCkgfHwgVEVMT1BUX1VOQU5T V0VSRURfV0lMTCh4KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIFRFTE9QVF9NRV9NT0RF KHgpICE9IFROX05HX1JGKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG5fc29wdChX SUxMLCB4KSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgpID0gMTsKLSAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh azsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgSUtTX09QVElPTgotICAgICAg ICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFURUxPUFRf TUUoeCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogVGVsbCB0aGUgb3RoZXIgc2lkZSB3aGF0 IFN0YXJ0IG9mIFBhY2tldCBDaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgdG5fc2lr cyhLRVJNSVRfU09QKTsgLyogU09QICovCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFURUxP UFRfVU5BTlNXRVJFRF9XSUxMKHgpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRf TUVfTU9ERSh4KSAhPSBUTl9OR19SRikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRu X3NvcHQoV0lMTCwgeCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEp OwotICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSA9IDE7 Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgICAgICAgICAgICBjYXNlIFRF TE9QVF9CSU5BUlk6Ci0gICAgICAgICAgICAgICAgaWYgKCFURUxPUFRfTUUoeCkpIHsKLSAgICAg ICAgICAgICAgICAgICAgaWYgKCFURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgpICYmCi0gICAgICAg ICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERSh4KSA+PSBUTl9OR19SUSkgewotICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoV0lMTCwgeCkgPCAwKQotICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BU X1VOQU5TV0VSRURfV0lMTCh4KSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVEVM T1BUX0VDSE86Ci0gICAgICAgICAgICAgICAgaWYgKGVjaG8pIHsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpKQotICAgICAgICAgICAgICAgICAgICAgIFRF TE9QVF9VTkFOU1dFUkVEX0RPKHgpID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDIp OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgY2FzZSBURUxPUFRfVFRZUEU6Ci0gICAgICAgICAgICAgICAgLyogU0IgVFRZUEUgU0VORCAq LwotICAgICAgICAgICAgICAgIHRuX3NzYm9wdChURUxPUFRfVFRZUEUsVEVMUVVBTF9TRU5ELE5V TEwsMCk7Ci0gICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfU0IoVEVMT1BUX1RUWVBF KT0xOwotICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIENLX0VOVklST05NRU5UCi0gICAg ICAgICAgICAgIGNhc2UgVEVMT1BUX05FV0VOVklST046ICAgLyogU0IgTkVXLUVOVklST04gU0VO RCAqLwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNoYXIgcmVxdWVzdFs2 XTsgICAgICAvKiByZXF1ZXN0IGl0ICovCi0gICAgICAgICAgICAgICAgICBzcHJpbnRmKHJlcXVl c3QsIiVjVVNFUiIsVEVMX0VOVl9WQVIpOyAgICAgICAgLyogc2FmZSAqLwotICAgICAgICAgICAg ICAgICAgdG5fc3Nib3B0KFRFTE9QVF9ORVdFTlZJUk9OLFRFTFFVQUxfU0VORCxyZXF1ZXN0LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihyZXF1ZXN0KSk7Ci0gICAgICAgICAg ICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9TQihURUxPUFRfTkVXRU5WSVJPTik9MTsKLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfRU5WSVJP Tk1FTlQgKi8KLSAgICAgICAgICAgIH0gLyogc3dpdGNoICovCi0gICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkpCi0gICAgICAgICAgICAgICAg VEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot ICAgICAgY2FzZSBXT05UOgotI2lmZGVmIENLX1NTTAotICAgICAgICBpZiAoVEVMT1BUX1NCKFRF TE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKQotICAgICAgICAgICAgcmV0dXJu KDApOwotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICBpZiAoVEVMT1BUX1UoeCkgfHwgVEVM T1BUX1VOQU5TV0VSRURfRE8oeCkpIHsKLSAgICAgICAgICAgIC8qIERhdmlkIEJvcm1hbiBzYXlz IHdlIHNob3VsZCBub3QgcmVzcG9uZCBET05UIHdoZW4KLSAgICAgICAgICAgICAqIHRoZSBXT05U IGlzIGEgcmVzcG9uc2UgdG8gYSBETyB0aGF0IHdlIHNlbnQuCi0gICAgICAgICAgICAgKiBOb3Ig c2hvdWxkIHdlIHNlbmQgb25lIGlmIHRoZSBzdGF0ZSBpcyBhbHJlYWR5IFdPTlQKLSAgICAgICAg ICAgICAqIHN1Y2ggYXMgd2hlbiB3ZSBkbyBub3QgcmVjb2duaXplIHRoZSBvcHRpb24gc2luY2UK LSAgICAgICAgICAgICAqIG9wdGlvbnMgYXJlIGluaXRpYWxpemVkIGluIHRoZSBXT05UL0RPTlQg c3RhdGUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICghKFRFTE9QVF9VTkFOU1dF UkVEX0RPKHgpIHx8IFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQoeCkpKQotICAgICAgICAgICAgICBp ZiAodG5fc29wdChET05ULHgpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAg ICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQoeCkpCi0gICAgICAgICAgICAgICAg VEVMT1BUX1VOQU5TV0VSRURfRE9OVCh4KSA9IDA7Ci0gICAgICAgICAgICBpZiAoVEVMT1BUX1VO QU5TV0VSRURfRE8oeCkpCi0gICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkg PSAwOwotICAgICAgICAgICAgaWYgKFRFTE9QVF9VKHgpKSB7Ci0gICAgICAgICAgICAgICAgVEVM T1BUX1UoeCkgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3dpdGNoKHgpIHsKLSNp ZmRlZiBDS19TU0wKLSAgICAgICAgICAgIGNhc2UgVEVMT1BUX1NUQVJUX1RMUzoKLSAgICAgICAg ICAgICAgICBpZiAoc3N0ZWxuZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9V X01PREUoeCkgPT0gVE5fTkdfTVUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi VGVsbmV0IFN0YXJ0LVRMUyByZWZ1c2VkLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0 dGNsb3MoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7 Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTMpOwotICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChURUxPUFRfU0IoeCkuc3RhcnRfdGxzLmF1dGhf cmVxdWVzdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBhdXRoZW50aWNh dGlvbl92ZXJzaW9uOwotICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKHgpLnN0YXJ0 X3Rscy5hdXRoX3JlcXVlc3QgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGVudGlj YXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX0FVVE87Ci0gICAgICAgICAgICAgICAgICAgICAgICBj a190bl9hdXRoX3JlcXVlc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRl ZiBDS19BVVRIRU5USUNBVElPTgotICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9BVVRIRU5USUNB VElPTjoKLSAgICAgICAgICAgICAgICBpZiAoc3N0ZWxuZXQgJiYgVEVMT1BUX1VfTU9ERSh4KSA9 PSBUTl9OR19NVSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIlRlbG5ldCBhdXRoZW50 aWNhdGlvbiByZWZ1c2VkLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHR0Y2xvcygwKTsKLSAg ICAgICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfVEVMT1BUOwotICAgICAgICAgICAgICAg ICAgICByZXR1cm4oLTMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVEVMT1BUX1VfTU9E RSh4KSA9PSBUTl9OR19SUSkgewotICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKHgp ID0gVE5fTkdfQUM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChja190 bl9hdXRoX2luX3Byb2dyZXNzKCkpCi0gICAgICAgICAgICAgICAgICBwcmludGYoIlRlbG5ldCBh dXRoZW50aWNhdGlvbiByZWZ1c2VkLlxuIik7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAg ICAgICAgICAgIGlmIChzc3RlbG5ldCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG5fbm9f ZW5jcnlwdCgpPDApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAg ICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgICAg YnJlYWs7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNpZmRlZiBDS19FTkNSWVBU SU9OCi0gICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0VOQ1JZUFRJT046Ci0gICAgICAgICAgICAg ICAgY2tfdG5fZW5jX3N0b3AoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBD S19FTkNSWVBUSU9OICovCi0jaWZkZWYgSUtTX09QVElPTgotICAgICAgICAgICAgICBjYXNlIFRF TE9QVF9LRVJNSVQ6Ci0gICAgICAgICAgICAgICAgVEVMT1BUX1NCKHgpLmtlcm1pdC51X3N0YXJ0 ID0gMDsKLSAgICAgICAgICAgICAgICBURUxPUFRfU0IoeCkua2VybWl0Lm1lX3JlcV9zdGFydCA9 IDA7Ci0gICAgICAgICAgICAgICAgVEVMT1BUX1NCKHgpLmtlcm1pdC5tZV9yZXFfc3RvcCA9IDA7 Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgICAg ICAgICAgICBjYXNlIFRFTE9QVF9OQVdTOiB7Ci0gICAgICAgICAgICAgICAgICAvKiBUaGUgY2xp ZW50IGRvZXMgbm90IHN1cHBvcnQgTkFXUy4gKi8KLSAgICAgICAgICAgICAgICAgIC8qIEFzc3Vt ZSBhIGhlaWdodCBvZiAyNCBhbmQgYSB3aWR0aCBvZiA4MCAqLwotICAgICAgICAgICAgICAgICAg aWYgKHNzdGVsbmV0Ci0jaWZkZWYgSUtTRAotICAgICAgICAgICAgICAgICAgIHx8IGluc2VydmVy Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAg ICAgICAgICAgIGludCB3ID0gODAsIGggPSAyNDsKLSNpZm5kZWYgTk9MT0NBTAotICAgICAgICAg ICAgICAgICAgICAgIGlmICh0Y3BfaW5jb21pbmcpIHsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgdHRfY29sc1tWVEVSTV0gPSB3OwotICAgICAgICAgICAgICAgICAgICAg ICAgICB0dF9yb3dzW1ZURVJNXSA9IGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFZzY3Ju U2V0V2lkdGgoVlRFUk0sIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBWc2NyblNldEhl aWdodChWVEVSTSwgaCsodHRfc3RhdHVzW1ZURVJNXT8xOjApKTsKLSNlbHNlIC8qIE9TMiAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgICB0dF9jb2xzID0gdzsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgdHRfcm93cyA9IGg7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIHsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdHRf Y29sc1tWQ01EXSA9IHc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHR0X3Jvd3NbVkNNRF0g PSBoOwotICAgICAgICAgICAgICAgICAgICAgICAgICBWc2NyblNldFdpZHRoKFZDTUQsIHcpOwot ICAgICAgICAgICAgICAgICAgICAgICAgICBWc2NyblNldEhlaWdodChWQ01ELCBoKTsKLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgY21kX2NvbHMgPSB3OwotICAg ICAgICAgICAgICAgICAgICAgICAgICBjbWRfcm93cyA9IGg7Ci0gICAgICAgICAgICAgICAgICAg ICAgfQotI2Vsc2UgLyogTk9MT0NBTCAqLwotICAgICAgICAgICAgICAgICAgICAgIGNtZF9jb2xz ID0gdzsKLSAgICAgICAgICAgICAgICAgICAgICBjbWRfcm93cyA9IGg7Ci0jZW5kaWYgLyogTk9M T0NBTCAqLwotICAgICAgICAgICAgICAgICAgICAgIC8qIEFkZCBMSU5FUyBhbmQgQ09MVU1OUyB0 byB0aGUgZW52aXJvbm1lbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICBja21ha21zZygoY2hh ciAqKXJvd3NfYnVmLDE2LCJMSU5FUz0iLGNraXRvYShoKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICBja21ha21zZygo Y2hhciAqKWNvbHNfYnVmLDE2LCJDT0xVTU5TPSIsY2tpdG9hKHcpLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLE5VTEwpOwotI2lmZGVmIE9TMk9SVU5JWAotI2lmbmRlZiBO T1BVVEVOVgotICAgICAgICAgICAgICAgICAgICAgIHB1dGVudihyb3dzX2J1Zik7Ci0gICAgICAg ICAgICAgICAgICAgICAgcHV0ZW52KGNvbHNfYnVmKTsKLSNlbmRpZiAvKiBOT1BVVEVOViAqLwot I2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2FzZSBURUxPUFRf RUNITzoKLSAgICAgICAgICAgICAgICBpZiAoIWVjaG8pIHsKLSAgICAgICAgICAgICAgICAgICAg aWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpKQotICAgICAgICAgICAgICAgICAgICAgIFRFTE9Q VF9VTkFOU1dFUkVEX0RPKHgpID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDEpOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9ET05U KHgpKQotICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQoeCkgPSAwOwotICAg ICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpKQotICAgICAgICAgICAgICAgIFRF TE9QVF9VTkFOU1dFUkVEX0RPKHgpID0gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoVEVMT1BU X1VfTU9ERSh4KSA9PSBUTl9OR19NVSkgewotICAgICAgICAgICAgY2ttYWttc2coIHRuX21zZyxU Tl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgICAgICJQZWVyIHJlZnVzZXMgVEVMTkVUIERP ICIsVEVMT1BUKHgpLAotICAgICAgICAgICAgICAgICAgICAgICIgbmVnb3RpYXRpb25zIC0gdGVy bWluYXRpbmcgY29ubmVjdGlvbiIsTlVMTAotICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7Ci0gICAgICAgICAgICBpZiAodG5fZGViIHx8 IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICAgICAgICAgIHByaW50ZigiJXNcbiIsdG5f bXNnKTsKLSAgICAgICAgICAgIHR0Y2xvcygwKTsKLSAgICAgICAgICAgIHdoeWNsb3NlZCA9IFdD X1RFTE9QVDsKLSAgICAgICAgICAgIHJldHVybigtMyk7Ci0gICAgICAgIH0KLSNpZmRlZiBDT01N RU5UCi0gICAgICAgIGlmICh4ID09IFRFTE9QVF9FQ0hPICYmICFlY2hvKSAvKiBTcGVjaWFsIGhh bmRsaW5nIGZvciBlY2hvICovCi0gICAgICAgICAgcmV0dXJuKDEpOyAgICAgICAgICAgICAgICAg ICAvKiBiZWNhdXNlIHdlIGFsbG93ICdkdXBsZXgnICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBETzoKLSNpZmRlZiBDS19TU0wKLSAgICAgICAg aWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykKLSAg ICAgICAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgaWYgKCFU RUxPUFRfT0soeCkgfHwgVEVMT1BUX01FX01PREUoeCkgPT0gVE5fTkdfUkYpIHsKLSAgICAgICAg ICAgIGlmICh0bl9zb3B0KFdPTlQseCkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oLTEpOwot ICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkpCi0gICAgICAgICAgICAg ICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSA9IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoIVRF TE9QVF9NRSh4KSkgewotICAgICAgICAgICAgaWYgKCFURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgp KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoV0lMTCx4KSA8IDApCi0gICAgICAgICAg ICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFRFTE9Q VF9VTkFOU1dFUkVEX1dJTEwoeCkpCi0gICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURf V0lMTCh4KSA9IDA7Ci0gICAgICAgICAgICBURUxPUFRfTUUoeCkgPSAxOwotCi0gICAgICAgICAg ICBzd2l0Y2ggKHgpIHsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAgY2FzZSBURUxPUFRf U1RBUlRfVExTOgotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgSWYgbXkg cHJvcG9zYWwgaXMgYWNjZXB0ZWQgYXQgdGhpcyBwb2ludCB0aGUgVGVsbmV0Ci0gICAgICAgICAg ICAgICAgICAgcHJvdG9jb2wgaXMgdHVybmVkIG9mZiBhbmQgYSBUTFMgbmVnb3RpYXRpb24gdGFr ZXMKLSAgICAgICAgICAgICAgICAgICBwbGFjZS4KLQotICAgICAgICAgICAgICAgICAgIFN0YXJ0 IGJ5IHNlbmRpbmcgU0IgU1RBUlRfVExTIEZPTExPV1MgIHRvIHNpZ25hbAotICAgICAgICAgICAg ICAgICAgIHdlIGFyZSByZWFkeS4gIFdhaXQgZm9yIHRoZSBwZWVyIHRvIHNlbmQgdGhlIHNhbWUK LSAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBzdGFydCB0aGUgVExTIG5lZ290aWF0aW9uLgot Ci0gICAgICAgICAgICAgICAgICAgSWYgdGhlIFRMUyBuZWdvdGlhdGlvbiBzdWNjZWVkcyB3ZSBj YWxsIHRuX2luaSgpCi0gICAgICAgICAgICAgICAgICAgYWdhaW4gdG8gcmVzZXQgdGhlIHRlbG5l dCBzdGF0ZSBtYWNoaW5lIGFuZCByZXN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgdGhlIG5lZ290 aWF0aW9uIHByb2Nlc3Mgb3ZlciB0aGUgbm93IHNlY3VyZSBsaW5rLgotCi0gICAgICAgICAgICAg ICAgICAgSWYgdGhlIFRMUyBuZWdvdGlhdGlvbiBmYWlscywgd2UgY2FsbCB0dGNsb3MoKQotICAg ICAgICAgICAgICAgICAgIHRvIHRlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbi4gIFRoZW4gd2Ugc2V0 IHRoZQotICAgICAgICAgICAgICAgICAgIFVfTU9ERSBhbmQgTUVfTU9ERSBmb3IgVEVMT1BUX1NU QVJUX1RMUyB0byBSRUZVU0UKLSAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBjYWxsIHR0b3Bl bigpIHRvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgdG8gdGhl IHNhbWUgaG9zdCBidXQgdGhpcyB0aW1lIGRvIG5vdCBhdHRlbXB0Ci0gICAgICAgICAgICAgICAg ICAgVExTIHNlY3VyaXR5LgotCi0gICAgICAgICAgICAgICAgICAgT25seSB0aGUgY2xpZW50IHNo b3VsZCByZWNlaXZlIERPIFNUQVJUX1RMUy4KLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAg ICAgICAgIHRuX3NzYm9wdChURUxPUFRfU1RBUlRfVExTLDEsTlVMTCwwKTsKLSAgICAgICAgICAg ICAgICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MgPSAx OwotICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0jaWZkZWYg Q0tfQVVUSEVOVElDQVRJT04KLSAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQVVUSEVOVElDQVRJ T046IHsKLSAgICAgICAgICAgICAgICAgIC8qIFdlIGRvbid0IGtub3cgd2hhdCBhdXRoZW50aWNh dGlvbiB3ZSBhcmUgdXNpbmcgeWV0ICovCi0gICAgICAgICAgICAgICAgICAvKiBidXQgaXQgaXMg bm90IE5VTEwgdW50aWwgYSBmYWlsdXJlIGlzIGRldGVjdGVkIHNvICovCi0gICAgICAgICAgICAg ICAgICAvKiB1c2UgQVVUTyBpbiB0aGUgbWVhbnRpbWUuICovCi0gICAgICAgICAgICAgICAgICBl eHRlcm4gaW50IGF1dGhlbnRpY2F0aW9uX3ZlcnNpb247Ci0gICAgICAgICAgICAgICAgICBhdXRo ZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfQVVUTzsKLSAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNp ZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0VOQ1JZUFRJT046 Ci0gICAgICAgICAgICAgICAgaWYgKCEoVEVMT1BUX01FKFRFTE9QVF9BVVRIRU5USUNBVElPTikg fHwKLSAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVShURUxPUFRfQVVUSEVOVElDQVRJT04p KQotICAgICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRuX3Nv cHQoV09OVCx4KSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAg ICAgICAgICAgICAgICAgVEVMT1BUX01FKHgpID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgICAgICBpZiAoIShURUxPUFRfVSh4KSB8fCBURUxPUFRfVU5BTlNX RVJFRF9ETyh4KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIFRFTE9QVF9VX01PREUoeCkg IT0gVE5fTkdfUkYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9zb3B0KERPLCB4 KSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyh4KSA9IDE7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVmIElLU19PUFRJT04KLSAgICAgICAgICAgICAg Y2FzZSBURUxPUFRfS0VSTUlUOgotLyogSWYgY3VycmVudGx5IHByb2Nlc3NpbmcgS2VybWl0IHNl cnZlciBwYWNrZXRzLCBtdXN0IHRlbGwgdGhlIG90aGVyIHNpZGUgKi8KLQotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsInRuX2Rvb3AiLCJ3aGF0Iix3aGF0KTsKLSAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTExLCJ0bl9kb29wIiwic2VydmVyIixzZXJ2ZXIpOwotI2lmZGVmIENLX0FVVE9ETAot ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuX2Rvb3AiLCJhdXRvZGwiLGF1dG9kbCk7Ci0g ICAgICAgICAgICAgICAgZGVidWcoRjExMSwidG5fZG9vcCIsImluYXV0b2RsIixpbmF1dG9kbCk7 Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwidG5fZG9vcCIsImNtZGFkbCIsY21kYWRsKTsK LSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLQotICAgICAgICAgICAgICAgIGlmIChzZXJ2ZXIKLSNp ZmRlZiBDS19BVVRPREwKLSAgICAgICAgICAgICAgICAgICAgfHwgKGxvY2FsICYmICgod2hhdCA9 PSBXX0NPTk5FQ1QgJiYgYXV0b2RsKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICh3aGF0ICE9IFdfQ09OTkVDVCAmJiBpbmF1dG9kbCkpKQotICAgICAgICAgICAgICAgICAg ICB8fCAoIWxvY2FsICYmIGNtZGFkbCkKLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSAgICAgICAg ICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1NUQVJU KTsgICAgICAvKiBTVEFSVCAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp ZiAoIVRFTE9QVF9VKHgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFRlbGwgdGhlIG90aGVy IHNpZGUgd2hhdCBTdGFydCBvZiBQYWNrZXQgQ2hhcmFjdGVyICovCi0gICAgICAgICAgICAgICAg ICAgIHRuX3Npa3MoS0VSTUlUX1NPUCk7ICAgICAgICAgICAgIC8qIFNPUCAqLwotICAgICAgICAg ICAgICAgICAgICBpZiAoIVRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpICYmCi0gICAgICAgICAgICAg ICAgICAgICAgICBURUxPUFRfVV9NT0RFKHgpICE9IFROX05HX1JGKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBpZiAodG5fc29wdChETywgeCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VS RURfRE8oeCkgPSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLQotICAgICAg ICAgICAgICBjYXNlIFRFTE9QVF9CSU5BUlk6Ci0gICAgICAgICAgICAgICAgaWYgKCFURUxPUFRf VSh4KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9VTkFOU1dFUkVEX0RPKHgp ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKHgpID49IFROX05HX1JR KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG5fc29wdChETywgeCkgPCAwKQotICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICAgICAgICAg ICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgPSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj YXNlIFRFTE9QVF9OQVdTOgotI2lmZGVmIENLX05BV1MKLSAgICAgICAgICAgICAgICBpZiAoICF0 bl9kZWxheV9zYiB8fCAhdG5fb3V0c3QoMCkgfHwgdG5faW5pdCApIHsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKHRuX3NuYXdzKCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu KC0xKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBURUxP UFRfU0IoVEVMT1BUX05BV1MpLm5hd3MubmVlZF90b19zZW5kID0gMTsKLSAgICAgICAgICAgICAg ICB9Ci0jZW5kaWYgLyogQ0tfTkFXUyAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICBjYXNlIFRFTE9QVF9MT0dPVVQ6Ci0gICAgICAgICAgICAgICAgdHRjbG9zKDApOyAg ICAgICAgICAgICAgLyogQW5kIHRoZW4gaGFuZ3VwICovCi0gICAgICAgICAgICAgICAgd2h5Y2xv c2VkID0gV0NfVEVMT1BUOwotICAgICAgICAgICAgICAgIHJldHVybig2KTsKLSNpZmRlZiBDS19T TkRMT0MKLSAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX1NORExPQzoKLSAgICAgICAgICAgICAg ICAgIGlmICggIXRuX2RlbGF5X3NiIHx8ICF0bl9vdXRzdCgwKSB8fCB0bl9pbml0ICkgewotICAg ICAgICAgICAgICAgICAgICAgIGlmICh0bl9zbmRsb2MoKSA8IDApCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfU05ETE9DKS5zbmRsb2MubmVlZF90b19z ZW5kID0gMTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGJyZWFrOwot I2VuZGlmIC8qIENLX1NORExPQyAqLwotI2lmZGVmIENLX0ZPUldBUkRfWAotICAgICAgICAgICAg ICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgotICAgICAgICAgICAgICAgICAgaWYgKCAhdG5fZGVs YXlfc2IgfHwgIXRuX291dHN0KDApIHx8IHRuX2luaXQgKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgaWYgKGZ3ZHhfc2VuZF9vcHRpb25zKCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICh0bl9zb3B0KERPTlQseCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VS RURfRE9OVCh4KSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldB UkRfWCkuZm9yd2FyZF94Lm5lZWRfdG9fc2VuZCA9IDE7Ci0gICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KLSNpZmRl ZiBUTl9DT01QT1JUCi0gICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6IHsKLSAgICAg ICAgICAgICAgICBleHRlcm4gaW50IHJlbGlhYmxlOwotICAgICAgICAgICAgICAgIGlmICghdG5f ZGVsYXlfc2IgfHwgIXRuX291dHN0KDApIHx8IHRuX2luaXQpIHsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKHRuX3NuZGNvbXBvcnQoKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJu KC0xKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBURUxP UFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQubmVlZF90b19zZW5kID0gMTsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogVGVsbmV0IC0+IFNlcmlhbCAtPiA/Pz8gaXMg bm90IGEgcmVsaWFibGUgY29ubmVjdGlvbi4gKi8KLSAgICAgICAgICAgICAgICByZWxpYWJsZSA9 IFNFVF9PRkY7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSNlbmRp ZiAvKiBUTl9DT01QT1JUICovCi0gICAgICAgICAgICB9IC8qIHN3aXRjaCAqLwotICAgICAgICB9 IGVsc2UgewotICAgICAgICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgpKQotICAgICAg ICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAg YnJlYWs7Ci0KLSAgICAgIGNhc2UgRE9OVDoKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgaWYgKFRF TE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykKLSAgICAgICAg ICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgaWYgKFRFTE9QVF9N RSh4KSB8fCBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgpKSB7Ci0gICAgICAgICAgICAvKiBEYXZp ZCBCb3JtYW4gc2F5cyB3ZSBzaG91bGQgbm90IHJlc3BvbmQgV09OVCB3aGVuCi0gICAgICAgICAg ICAgKiB0aGUgRE9OVCBpcyBhIHJlc3BvbnNlIHRvIGEgV0lMTCB0aGF0IHdlIHNlbnQuCi0gICAg ICAgICAgICAgKiBOb3Igc2hvdWxkIHdlIHNlbmQgb25lIGlmIHRoZSBzdGF0ZSBpcyBhbHJlYWR5 IFdPTlQKLSAgICAgICAgICAgICAqIHN1Y2ggYXMgd2hlbiB3ZSBkbyBub3QgcmVjb2duaXplIHRo ZSBvcHRpb24gc2luY2UKLSAgICAgICAgICAgICAqIG9wdGlvbnMgYXJlIGluaXRpYWxpemVkIGlu IHRoZSBXT05UL0RPTlQgc3RhdGUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICgh KFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkgfHwgVEVMT1BUX1VOQU5TV0VSRURfV09OVCh4KSkp Ci0gICAgICAgICAgICAgIGlmICh0bl9zb3B0KFdPTlQseCkgPCAwKQotICAgICAgICAgICAgICAg IHJldHVybigtMSk7Ci0KLSAgICAgICAgICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgp KQotICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkgPSAwOwotICAgICAg ICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQoeCkpCi0gICAgICAgICAgICAgICAgVEVM T1BUX1VOQU5TV0VSRURfV09OVCh4KSA9IDA7Ci0gICAgICAgICAgICBpZiAoVEVMT1BUX01FKHgp KQotICAgICAgICAgICAgICBURUxPUFRfTUUoeCkgPSAwOwotCi0gICAgICAgICAgICBzd2l0Y2gg KHgpIHsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgIGNhc2UgVEVMT1BUX1NUQVJUX1RMUzoK LSAgICAgICAgICAgICAgICBpZiAoIXNzdGVsbmV0ICYmIFRFTE9QVF9NRV9NT0RFKHgpID09IFRO X05HX01VKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiVGVsbmV0IFN0YXJ0LVRMUyBy ZWZ1c2VkLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHR0Y2xvcygwKTsKLSAgICAgICAgICAg ICAgICAgICAgd2h5Y2xvc2VkID0gV0NfVEVMT1BUOwotICAgICAgICAgICAgICAgICAgICByZXR1 cm4oLTMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRp ZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgICAgICAgICAgICBj YXNlIFRFTE9QVF9BVVRIRU5USUNBVElPTjoKLSAgICAgICAgICAgICAgICBpZiAoIXNzdGVsbmV0 ICYmIFRFTE9QVF9NRV9NT0RFKHgpID09IFROX05HX01VKSB7Ci0jaWZkZWYgQ0tfU1NMCi0gICAg ICAgICAgICAgICAgICAgIGlmICh0bHNfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIFRFTE9QVF9NRV9NT0RFKHgpID0gVE5fTkdfQUM7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NM ICovCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiVGVsbmV0IGF1dGhlbnRpY2F0aW9uIHJlZnVzZWQuXG4iKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHR0Y2xvcygwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoeWNsb3NlZCA9IFdD X1RFTE9QVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMyk7Ci0gICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFRFTE9QVF9NRV9NT0RFKHgp ID09IFROX05HX1JRKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKHgpID0g VE5fTkdfQUM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChja190bl9h dXRoX2luX3Byb2dyZXNzKCkpCi0gICAgICAgICAgICAgICAgICBwcmludGYoIlRlbG5ldCBhdXRo ZW50aWNhdGlvbiByZWZ1c2VkLlxuIik7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAg ICAgICAgIGlmICghc3N0ZWxuZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRuX25vX2Vu Y3J5cHQoKTwwKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAg ICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAgICAgICAgIGJy ZWFrOwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0gICAgICAgICAgICAgIGNhc2Ug VEVMT1BUX0VOQ1JZUFRJT046Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAg IGNrX3RuX2VuY19zdG9wKCk7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6Ci0jaWZkZWYg SUtTX09QVElPTgotICAgICAgICAgICAgICAgIFRFTE9QVF9TQih4KS5rZXJtaXQubWVfc3RhcnQg PSAwOwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg IH0gLyogc3dpdGNoICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKFRFTE9QVF9V TkFOU1dFUkVEX1dJTEwoeCkpCi0gICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwo eCkgPSAwOwotICAgICAgICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9XT05UKHgpKQotICAgICAg ICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XT05UKHgpID0gMDsKLSAgICAgICAgfQotICAgICAg ICBpZiAoVEVMT1BUX01FX01PREUoeCkgPT0gVE5fTkdfTVUpIHsKLSAgICAgICAgICAgIGNrbWFr bXNnKCB0bl9tc2csVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICAgICAiUGVlciByZWZ1 c2VzIFRFTE5FVCBXSUxMICIsVEVMT1BUKHgpLAotICAgICAgICAgICAgICAgICAgICAgICIgbmVn b3RpYXRpb25zIC0gdGVybWluYXRpbmcgY29ubmVjdGlvbiIsCi0gICAgICAgICAgICAgICAgICAg ICAgTlVMTAotICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAw LHRuX21zZywiIiwwKTsKLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1 Zyh0bl9tc2cpOwotICAgICAgICAgICAgcHJpbnRmKCIlc1xuIix0bl9tc2cpOwotICAgICAgICAg ICAgdHRjbG9zKDApOwotICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfVEVMT1BUOwotICAgICAg ICAgICAgcmV0dXJuKC0zKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug U0I6Ci0gICAgICAgIGlmICgoeSA9IHRuX3NiKHgsJm4sZm4pKSA8PSAwKQotICAgICAgICAgIHJl dHVybih5KTsKLQotI2lmZGVmIENLX1NTTAotICAgICAgICAvKiBEbyBub3QgcHJvY2VzcyBzdWJu ZWdvdGlhdGlvbnMgb3RoZXIgdGhhbiBTVEFSVF9UTFMgYWZ0ZXIgd2UgKi8KLSAgICAgICAgLyog aGF2ZSBhZ3JlZWQgdG8gYmVnaW4gdGhlIFRMUyBuZWdvdGlhdGlvbiBzZXF1ZW5jZS4gICAgICAg ICAgICovCi0gICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxz Lm1lX2ZvbGxvd3MgJiYKLSAgICAgICAgICAgICB4ICE9IFRFTE9QVF9TVEFSVF9UTFMpCi0gICAg ICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgICAgICBpZiAoIVRFTE9Q VF9PSyh4KSkgewotICAgICAgICAgICAgY2toZXhkdW1wKCJ1bmtub3duIHRlbG5ldCBzdWJuZWdv dGlhdGlvbiIsc2Isbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmICgg IShURUxPUFRfTUUoeCkgfHwgVEVMT1BUX1UoeCkpICkgewotICAgICAgICAgICAgY2toZXhkdW1w KCJ0ZWxuZXQgb3B0aW9uIG5vdCBuZWdvdGlhdGVkIixzYixuKTsKLSAgICAgICAgICAgIGlmICgh dG5fc2JfYnVnKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKFRFTE9Q VF9VTkFOU1dFUkVEX1dJTEwoeCkpIHsKLSAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJF RF9XSUxMKHgpID0gMDsKLSAgICAgICAgICAgICAgICBURUxPUFRfVSh4KSA9IDE7Ci0gICAgICAg ICAgICAgICAgY2ttYWttc2codG5fbXNnLFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIlRFTE5FVCBETyAiLFRFTE9QVCh4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAi KGltcGxpZWQgYnkgcmVjZWlwdCBvZiBTQiAtIHByb3RvY29sIGVycm9yIGlnbm9yZWQpIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAgICAgICAg ICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9ETyh4KSkgewotICAgICAgICAgICAg ICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpID0gMDsKLSAgICAgICAgICAgICAgICBURUxPUFRf TUUoeCkgPSAxOwotICAgICAgICAgICAgICAgIGNrbWFrbXNnKHRuX21zZyxUTl9NU0dfTEVOLCJU RUxORVQgV0lMTCAiLFRFTE9QVCh4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICIgKGltcGxp ZWQgYnkgcmVjZWlwdCBvZiBTQiAtIHByb3RvY29sIGVycm9yIGlnbm9yZWQpIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNn LCIiLDApOwotICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0 bl9tc2cpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFRFTE9QVF9VTkFO U1dFUkVEX1NCKHgpPTA7Ci0gICAgICAgIHN3aXRjaCAoeCkgewotI2lmZGVmIENLX0ZPUldBUkRf WAotICAgICAgICAgIGNhc2UgVEVMT1BUX0ZPUldBUkRfWDoKLSAgICAgICAgICAgIHJldHVybihm d2R4X3RuX3NiKHNiLCBuKSk7Ci0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0jaWZkZWYgQ0tf U1NMCi0gICAgICAgICAgY2FzZSBURUxPUFRfU1RBUlRfVExTOiB7Ci0gICAgICAgICAgICAgIC8q Ci0gICAgICAgICAgICAgICAgIHRoZSBvdGhlciBzaWRlIGlzIHNheWluZyBTQiBTVEFSVF9UTFMg Rk9MTE9XUwotICAgICAgICAgICAgICAgICB0aGUgaW5jb21pbmcgY2hhbm5lbCBpcyBub3cgcmVh ZHkgZm9yIHN0YXJ0aW5nIHRoZQotICAgICAgICAgICAgICAgICBUTFMgbmVnb3RpYXRpb24uCi0g ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgIGludCBkZWZfdGxzX3VfbW9kZSwgZGVm X3Rsc19tZV9tb2RlOwotICAgICAgICAgICAgICBpbnQgZGVmX2VuY191X21vZGUsIGRlZl9lbmNf bWVfbW9kZTsKLSAgICAgICAgICAgICAgaW50IHJjID0gMDsKLQotICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoc2JbMF0gIT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg VEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy51X2ZvbGxvd3MgPSAxOwotICAg ICAgICAgICAgICAvKiBQcmVzZXJ2ZSB0aGUgZGVmYXVsdCBtb2RlcyBhbmQgbWFrZSBzdXJlIHdl IHdpbGwgKi8KLSAgICAgICAgICAgICAgLyogcmVmdXNlIFNUQVJUX1RMUyB3aGVuIHdlIHJldHJ5 LiAqLwotICAgICAgICAgICAgICBpZiAoc3N0ZWxuZXQpIHsKLSAgICAgICAgICAgICAgICAgIGRl Zl90bHNfdV9tb2RlID0gVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKTsKLSAg ICAgICAgICAgICAgICAgIGRlZl90bHNfbWVfbW9kZSA9IFRFTE9QVF9ERUZfU19NRV9NT0RFKFRF TE9QVF9TVEFSVF9UTFMpOwotICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShU RUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOwotICAgICAgICAgICAgICAgICAgVEVMT1BUX0RF Rl9TX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUyk9IFROX05HX1JGOwotI2lmZGVmIENLX0VOQ1JZ UFRJT04KLSAgICAgICAgICAgICAgICAgIGRlZl9lbmNfdV9tb2RlID0gVEVMT1BUX0RFRl9TX1Vf TU9ERShURUxPUFRfRU5DUllQVElPTik7Ci0gICAgICAgICAgICAgICAgICBkZWZfZW5jX21lX21v ZGUgPSBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTik7Ci0gICAgICAgICAg ICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JG OwotICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJ T04pPSBUTl9OR19SRjsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBkZWZfdGxzX3VfbW9kZSA9IFRFTE9QVF9ERUZf Q19VX01PREUoVEVMT1BUX1NUQVJUX1RMUyk7Ci0gICAgICAgICAgICAgICAgICBkZWZfdGxzX21l X21vZGUgPSBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKTsKLSAgICAgICAg ICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19S RjsKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9TVEFSVF9U TFMpPSBUTl9OR19SRjsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgICBk ZWZfZW5jX3VfbW9kZSA9IFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pOwot ICAgICAgICAgICAgICAgICAgZGVmX2VuY19tZV9tb2RlID0gVEVMT1BUX0RFRl9DX01FX01PREUo VEVMT1BUX0VOQ1JZUFRJT04pOwotICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9E RShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICAgIFRFTE9Q VF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKT0gVE5fTkdfUkY7Ci0jZW5kaWYgLyog Q0tfRU5DUllQVElPTiAqLwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIC8qIE5lZ290 aWF0ZSBUTFMgKi8KLSAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9UTFM7Ci0gICAgICAgICAg ICAgIHRuX2luaXQgPSAwOwotICAgICAgICAgICAgICB0bl9iZWd1biA9IDA7Ci0gICAgICAgICAg ICAgIGlmIChja190bl90bHNfbmVnb3RpYXRlKCk8MCkgewotICAgICAgICAgICAgICAgICAgLyog d2UgZmFpbGVkLiAgZGlzY29ubmVjdCBhbmQgaWYgd2UgYXJlIHRoZSBjbGllbnQgKi8KLSAgICAg ICAgICAgICAgICAgIC8qIHRoZW4gcmVjb25uZWN0IGFuZCB0cnkgd2l0aG91dCBTVEFSVF9UTFMu ICAgICAgICovCi0gICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciAqIGxpbmU7Ci0gICAgICAg ICAgICAgICAgICBpbnQgeCA9IC0xOwotICAgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBtZG10 eXA7Ci0KLSAgICAgICAgICAgICAgICAgIGlmIChzc3RlbG5ldCkgewotICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiVExTIGZhaWxlZDogIERpc2Nvbm5lY3RpbmcuXG4iKTsKLSAgICAgICAg ICAgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICA9IGRl Zl90bHNfdV9tb2RlOwotICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RF KFRFTE9QVF9TVEFSVF9UTFMpID0gZGVmX3Rsc19tZV9tb2RlOwotI2lmZGVmIENLX0VOQ1JZUFRJ T04KLSAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0VOQ1JZ UFRJT04pICA9IGRlZl9lbmNfdV9tb2RlOwotICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RF Rl9TX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gZGVmX2VuY19tZV9tb2RlOwotI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgICAgICAgICAgICAgICB0dGNsb3MoMCk7Ci0g ICAgICAgICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfVEVMT1BUOwotICAgICAgICAgICAg ICAgICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOwotICAgICAgICAgICAgICAgICAgICAgIHJj ID0gLTM7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgewotI2lmbmRlZiBOT0xPQ0FMCi0gICAg ICAgICAgICAgICAgICAgICAgZXh0ZXJuIGludCB0bHNfbm9yZXN0b3JlOwotI2VuZGlmIC8qIE5P TE9DQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlRMUyBmYWlsZWQ6ICBEaXNj b25uZWN0aW5nLi4uXG4iKTsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAg ICAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAgPSBkZWZfZW5jX3Vf bW9kZTsKLSAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9F TkNSWVBUSU9OKSA9IGRlZl9lbmNfbWVfbW9kZTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICov Ci0gICAgICAgICAgICAgICAgICAgICAgLyogaWYgU1RBUlRfVExTIGlzIG5vdCBSRVFVSVJFRCwg dGhlbiByZXRyeSB3aXRob3V0IGl0ICovCi0gICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZf dGxzX21lX21vZGUgIT0gVE5fTkdfTVUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGV4 dGVybiBjaGFyIHR0bmFtZVtdOwotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIHRsc19ub3Jlc3RvcmUgPSAxOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgdHRjbG9zKDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICB3 aHljbG9zZWQgPSBXQ19URUxPUFQ7Ci0jaWZuZGVmIE5PTE9DQUwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgdGxzX25vcmVzdG9yZSA9IDA7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX1RFTE5FVDsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCJSZWNvbm5lY3Rpbmcgd2l0aG91dCBUTFMuXG4iKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgc2xlZXAoMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg IGlmICh0dG9wZW4odHRuYW1lLCZ4LG1kbXR5cCwwKTwwKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmMgPSAtMzsKLSAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMp ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZfdGxzX3VfbW9kZTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykg PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZl90bHNfbWVfbW9kZTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgdHRjbG9zKDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICB3 aHljbG9zZWQgPSBXQ19URUxPUFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHR0bnByb3Rv ID0gTlBfVEVMTkVUOwotICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IC0zOwotICAgICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSBl bHNlIHsKLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgICAgICAgICAgICAgICAgLyogd2Ug c3VjY2VlZGVkLiAgcmVzdGFydCB0ZWxuZXQgbmVnb3RpYXRpb25zIGZyb20gKi8KLSAgICAgICAg ICAgICAgICAgIC8qIHRoZSBiZWdpbm5pbmcuICBIb3dldmVyLCBpZiB3ZSBoYXZlIHJlY2VpdmVk IGEgICovCi0gICAgICAgICAgICAgICAgICAvKiBjbGllbnQgY2VydGlmaWNhdGUgYW5kIHdlIGFy ZSBhIHNlcnZlciwgdGhlbiBkbyAqLwotICAgICAgICAgICAgICAgICAgLyogbm90IG9mZmVyIFRF TE9QVF9BVVRILiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAg IGlmICggY2tfdG5fYXV0aF92YWxpZCgpID09IEFVVEhfVkFMSUQgKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5f TkdfQUM7Ci0gICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BU X0FVVEhFTlRJQ0FUSU9OKT0gVE5fTkdfQUM7Ci0gICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYg LyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICAgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBf VEVMTkVUOwotICAgICAgICAgICAgICAgICAgaWYgKHRuX2luaSgpIDwgMCkKLSAgICAgICAgICAg ICAgICAgICAgaWYgKHR0Y2hrKCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7 Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLyogUmVzdG9yZSB0aGUgZGVmYXVsdCBt b2RlcyAqLwotICAgICAgICAgICAgICBpZiAoc3N0ZWxuZXQpIHsKLSAgICAgICAgICAgICAgICAg IFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgID0gZGVmX3Rsc191X21vZGU7 Ci0gICAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExT KSA9IGRlZl90bHNfbWVfbW9kZTsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAg ICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAgPSBkZWZfZW5jX3Vf bW9kZTsKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9FTkNS WVBUSU9OKSA9IGRlZl9lbmNfbWVfbW9kZTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0g ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9N T0RFKFRFTE9QVF9TVEFSVF9UTFMpICA9IGRlZl90bHNfdV9tb2RlOwotICAgICAgICAgICAgICAg ICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBkZWZfdGxzX21lX21v ZGU7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9D X1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgID0gZGVmX2VuY191X21vZGU7Ci0gICAgICAgICAg ICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBkZWZfZW5j X21lX21vZGU7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgIHJldHVybihyYyk7Ci0gICAgICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAq LwotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgICAgY2FzZSBURUxPUFRfQVVUSEVO VElDQVRJT046Ci0gICAgICAgICAgICBpZiAoY2tfdG5fc2JfYXV0aCgoY2hhciAqKXNiLG4pIDwg MCkgewotICAgICAgICAgICAgICAgIGlmIChzc3RlbG5ldCAmJiBURUxPUFRfVV9NT0RFKHgpID09 IFROX05HX01VKSB7Ci0gICAgICAgICAgICAgICAgICAgIHR0Y2xvcygwKTsKLSAgICAgICAgICAg ICAgICAgICAgd2h5Y2xvc2VkID0gV0NfVEVMT1BUOwotICAgICAgICAgICAgICAgICAgICByZXR1 cm4oLTMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNzdGVsbmV0ICYmIFRFTE9QVF9N RV9NT0RFKHgpID09IFROX05HX01VKSB7Ci0gICAgICAgICAgICAgICAgICAgIHR0Y2xvcygwKTsK LSAgICAgICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfVEVMT1BUOwotICAgICAgICAgICAg ICAgICAgICByZXR1cm4oLTMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgICAgIGlmIChURUxPUFRfTUVfTU9ERSh4KSA9PSBUTl9OR19SUSkKLSAgICAgICAgICAg ICAgICAgICAgICBURUxPUFRfTUVfTU9ERSh4KSA9IFROX05HX0FDOwotICAgICAgICAgICAgICAg ICAgICBpZiAoVEVMT1BUX1VfTU9ERSh4KSA9PSBUTl9OR19SUSkKLSAgICAgICAgICAgICAgICAg ICAgICBURUxPUFRfVV9NT0RFKHgpID0gVE5fTkdfQUM7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgIGlmIChURUxPUFRfTUUoeCkpIHsKLSAgICAgICAgICAgICAgICAgICAgVEVM T1BUX01FKHgpID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoV09OVCx4KSA8 IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9VKHgpKSB7Ci0gICAgICAgICAgICAgICAgICAg IFRFTE9QVF9VKHgpID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoRE9OVCx4 KSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAg ICB9Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgIGlmICh0bl9ub19lbmNy eXB0KCk8MCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBDS19F TkNSWVBUSU9OICovCi0gICAgICAgICAgICB9IGVsc2UgewotI2lmZGVmIENLX0VOQ1JZUFRJT04K LSAgICAgICAgICAgICAgICBpZiAoIWNrX3RuX2F1dGhfaW5fcHJvZ3Jlc3MoKSkgeyAvKiB3ZSBh cmUgZmluaXNoZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNrX3RuX2F1dGhlbnRpY2F0 ZWQoKSA9PSBBVVRIVFlQRV9TU0wpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRMUyB3 YXMgc3VjY2Vzc2Z1bC4gIERpc2FibGUgRU5DUllQVElPTiAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAgICAg ICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFRO X05HX1JGOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChU RUxPUFRfU0IoVEVMT1BUX0VOQ1JZUFRJT04pLmVuY3J5cHQubmVlZF90b19zZW5kKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBja19lbmNyeXB0X3NlbmRfc3VwcG9ydCgpOwotICAgICAgICAg ICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNyeXB0Lm5lZWRf dG9fc2VuZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0j ZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl YWs7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9O Ci0gICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoKLSAgICAgICAgICAgIGlmIChja190 bl9zYl9lbmNyeXB0KChjaGFyICopc2IsIG4pIDwgMCkgewotICAgICAgICAgICAgICAgIGlmIChU RUxPUFRfVV9NT0RFKHgpID09IFROX05HX01VIHx8Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9Q VF9NRV9NT0RFKHgpID09IFROX05HX01VKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAg ICAgICAgICAgICAgIHR0Y2xvcygwKTsKLSAgICAgICAgICAgICAgICAgICAgICB3aHljbG9zZWQg PSBXQ19URUxPUFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0zKTsKLSAgICAgICAg ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX01FX01PREUo eCkgPT0gVE5fTkdfUlEpCi0gICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoeCkg PSBUTl9OR19BQzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9VX01PREUoeCkgPT0g VE5fTkdfUlEpCi0gICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERSh4KSA9IFROX05H X0FDOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX01FKHgp KSB7Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRSh4KSA9IDA7Ci0gICAgICAgICAgICAg ICAgICAgIGlmICh0bl9zb3B0KFdPTlQseCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgIHJl dHVybigtMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChURUxPUFRf VSh4KSkgewotICAgICAgICAgICAgICAgICAgICBURUxPUFRfVSh4KSA9IDA7Ci0gICAgICAgICAg ICAgICAgICAgIGlmICh0bl9zb3B0KERPTlQseCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAg IHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg ICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVmIElLU19PUFRJT04K LSAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6Ci0gICAgICAgICAgICByZXR1cm4oaWtzX3Ru X3NiKHNiLCBuLTIpKTsKLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0jaWZkZWYgVE5fQ09NUE9S VAotICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAgICByZXR1cm4odG5j X3RuX3NiKHNiLCBuLTIpKTsKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0gICAgICAgICAgY2Fz ZSBURUxPUFRfVFRZUEU6Ci0gICAgICAgICAgICBzd2l0Y2ggKHNiWzBdKSB7Ci0gICAgICAgICAg ICAgIGNhc2UgVEVMUVVBTF9TRU5EOiAgICAgICAgLyogU0VORCB0ZXJtaW5hbCB0eXBlPyAqLwot ICAgICAgICAgICAgICAgIGlmICggIXRuX2RlbGF5X3NiIHx8ICF0bl9vdXRzdCgwKSB8fCB0bl9p bml0ICkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG5fc3R0eXAoKSA8IDApIC8qIFllcywg c28gc2VuZCBpdC4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAg ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9Q VF9UVFlQRSkudGVybS5uZWVkX3RvX3NlbmQgPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBURUxRVUFMX0lTOiB7ICAgICAg ICAvKiBJUyB0ZXJtaW5hbCB0eXBlPyAqLwotICAgICAgICAgICAgICAgICAgLyogSVMgdGVybWlu YWwgdHlwZSAtLSByZW1vdGUgZ2F2ZSB1cyBpdHMgY3VycmVudCB0eXBlICovCi0gICAgICAgICAg ICAgICAgICBpbnQgaSA9IDA7Ci0jaWZuZGVmIE9TMgotICAgICAgICAgICAgICAgICAgQ0hBUiBv bGR0ZXJtWzY0XSwgKnA7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICAvKiBJ c29sYXRlIHRoZSBzcGVjaWZpZWQgdGVybWluYWwgdHlwZSBzdHJpbmcgKi8KLSAgICAgICAgICAg ICAgICAgIHdoaWxlIChzYltpKytdICE9IElBQykgewotICAgICAgICAgICAgICAgICAgICAgIGlm IChpID09IDQwIHx8ICAgIC8qIG1heCBsZW4gb2YgdGVybSBzdHJpbmcgLSBSRkMgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgc2JbaV0gPT0gSUFDKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIHNiW2ldID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIE9TMgot I2lmbmRlZiBOT1RFUk0KLSAgICAgICAgICAgICAgICAgIHN0cnVwcigmKHNiWzFdKSk7ICAgICAv KiBVcHBlciBjYXNlIGl0ICovCi0gICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IG1h eF90dDsgaSsrKSB7IC8qIGZpbmQgaXQgaW4gb3VyIGxpc3QgKi8KLSAgICAgICAgICAgICAgICAg ICAgICBpZiAoIXN0cmNtcCgmKHNiWzFdKSx0dF9pbmZvW2ldLnhfbmFtZSkKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgJiYgaSAhPSBUVF9WVE5UKSAvKiBjYW4ndCBzdXBwb3J0IFZUTlQgYXMg c2VydmVyICovCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNldCB0ZXJtaW5hbCB0eXBlIHRvIHRoZSBvbmUgY2hvc2VuICovCi0gICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChpICE9IHR0X3R5cGUpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2V0dGVybXR5cGUoaSwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgaWYgKGkgPiBtYXhfdHQgJiYKLSAgICAgICAgICAgICAgICAgICAgICBzdHJj bXAoJihzYlsxXSksVEVMT1BUX1NCKFRFTE9QVF9UVFlQRSkudGVybS50eXBlKSkgewotICAgICAg ICAgICAgICAgICAgICAgIC8qIENvdWxkbid0IGZpbmQgdGhlIHNwZWNpZmllZCB0ZXJtIHR5cGUg Ki8KLSAgICAgICAgICAgICAgICAgICAgICBzYls0MF0gPSAnXDAnOwotICAgICAgICAgICAgICAg ICAgICAgIHN0cmNweShURUxPUFRfU0IoVEVMT1BUX1RUWVBFKS50ZXJtLnR5cGUsJihzYlsxXSkp OwotICAgICAgICAgICAgICAgICAgICAgIC8qIFNCIFRUWVBFIFNFTkQgKi8KLSAgICAgICAgICAg ICAgICAgICAgICB0bl9zc2JvcHQoVEVMT1BUX1RUWVBFLFRFTFFVQUxfU0VORCxOVUxMLDApOwot ICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1NCKFRFTE9QVF9UVFlQRSk9 MTsKLSAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT1RFUk0gKi8KLSNlbHNlIC8qIE9T MiAqLwotICAgICAgICAgICAgICAgICAgcCA9IChDSEFSICopIGdldGVudigiVEVSTSIpOwotICAg ICAgICAgICAgICAgICAgaWYgKHApCi0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSgoY2hh ciAqKW9sZHRlcm0sKGNoYXIgKilwLDYzKTsKLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg ICAgICAgICAgICAgICAgb2xkdGVybVswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgICBja2xv d2VyKChjaGFyICopJihzYlsxXSkpOyAvKiBMb3dlciBjYXNlIG5ldyB0ZXJtICovCi0gICAgICAg ICAgICAgICAgICBja21ha21zZyh0ZXJtX2J1Ziw2NCwiVEVSTT0iLChjaGFyICopJihzYlsxXSks TlVMTCxOVUxMKTsKLSNpZmRlZiBPUzJPUlVOSVgKLSNpZm5kZWYgTk9QVVRFTlYKLSAgICAgICAg ICAgICAgICAgIHB1dGVudih0ZXJtX2J1Zik7Ci0jZW5kaWYgLyogTk9QVVRFTlYgKi8KLSNlbmRp ZiAvKiBPUzJPUlVOSVggKi8KLSNpZmRlZiBDS19DVVJTRVMKLSNpZm5kZWYgTVlDVVJTRVMKLSNp Zm5kZWYgQ09IRVJFTlQKLSAgICAgICAgICAgICAgICAgIGlmICh0cm1idWYpIHsKLSAgICAgICAg ICAgICAgICAgICAgICBpZiAodGdldGVudCh0cm1idWYsKGNoYXIgKikmc2JbMV0pIDwgMSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbnN1cHBvcnRlZCB0ZXJtaW5hbC4gIElmIG5l dyBhbmQgb2xkIHRlcm1pbmFsICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHR5cGVz IGRvIG5vdCBtYXRjaCwgYXNrIGZvciBhbm90aGVyIHR5cGUuICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChzdHJjbXAoKGNoYXIgKilvbGR0ZXJtLChjaGFyICopJnNiWzFdKSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0IgVFRZUEUgU0VORCAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdG5fc3Nib3B0KFRFTE9QVF9UVFlQRSxURUxRVUFMX1NF TkQsTlVMTCwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dF UkVEX1NCKFRFTE9QVF9UVFlQRSk9MTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDT0hF UkVOVCAqLwotI2VuZGlmIC8qIE1ZQ1VSU0VTICovCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0j ZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGJyZWFrOwotI2lmZGVmIENLX0VOVklST05NRU5UCi0jaWZkZWYgQ0tfWERJU1BMT0MKLSAg ICAgICAgICBjYXNlIFRFTE9QVF9YRElTUExPQzogICAgICAgICAvKiBTZW5kIFgtRGlzcGxheSBM b2NhdGlvbiAqLwotICAgICAgICAgICAgaWYgKHNiWzBdID09IFRFTFFVQUxfU0VORCkgey8qIFNF TkQgWC1EaXNwbGF5IExvYz8gKi8KLSAgICAgICAgICAgICAgICBpZiAoICF0bl9kZWxheV9zYiB8 fCAhdG5fb3V0c3QoMCkgfHwgdG5faW5pdCApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRu X3N4ZGlzcGxvYygpIDwgMCkgICAgIC8qIFllcywgc28gc2VuZCBpdC4gKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9YRElTUExPQykueGRpc3AubmVlZF90b19z ZW5kID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAv KiBJUyAtLSBYIERpc3BsYXkgTG9jYXRpb24gKG5vdCBzdXBwb3J0ZWQpICovCi0gICAgICAgICAg ICBlbHNlIGlmIChzYlswXSA9PSBURUxRVUFMX0lTKSB7Ci0gICAgICAgICAgICAgICAgaW50IGkg PSAwOwotICAgICAgICAgICAgICAgIC8qIElzb2xhdGUgdGhlIHNwZWNpZmllZCBYLWRpc3BsYXkg c3RyaW5nICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKHNiW2krK10gIT0gSUFDKSB7Ci0gICAg ICAgICAgICAgICAgICAgIGlmIChpID49IFRTQlVGU0laKQotICAgICAgICAgICAgICAgICAgICAg IHJldHVybiAoLTEpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2JbaV0gPT0gSUFDKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBzYltpXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJURUxORVQgU0IgWERJU1BMT0MgSVMiLCZzYlsxXSww KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX1hESVNQ TE9DICovCi0jZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KLSAgICAgICAgICBjYXNlIFRFTE9Q VF9OQVdTOgotICAgICAgICAgICAgICBpZiAoc3N0ZWxuZXQKLSNpZmRlZiBJS1NECi0gICAgICAg ICAgICAgICAgICAgfHwgaW5zZXJ2ZXIKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICAgICAg ICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgICBpbnQgdyA9IDAsIGggPSAwOwotICAgICAgICAg ICAgICAgICAgaW50IGkgPSAwOwotICAgICAgICAgICAgICAgICAgLyogQXQgdGhpcyBwb2ludCBz YltdIHNob3VsZCBjb250YWluIHdpZHRoIGFuZCBoZWlnaHQgKi8KLSAgICAgICAgICAgICAgICAg IGlmIChzYltpXSA9PSBJQUMpIGkrKzsKLSAgICAgICAgICAgICAgICAgIHcgPSAoc2JbaSsrXSA8 PCA4KTsgICAvKiBzYXZlIHVwcGVyIGhlaWdodCAqLwotICAgICAgICAgICAgICAgICAgaWYgKHNi W2ldID09IElBQykgaSsrOwotICAgICAgICAgICAgICAgICAgdyArPSBzYltpKytdOyAgICAgICAg IC8qIHNhdmUgdGhlIHdpZHRoICovCi0gICAgICAgICAgICAgICAgICBpZiAoc2JbaV0gPT0gSUFD KSBpKys7Ci0gICAgICAgICAgICAgICAgICBoID0gKHNiW2krK10gPDwgOCk7ICAgLyogc2F2ZSB1 cHBlciBoZWlnaHQgKi8KLSAgICAgICAgICAgICAgICAgIGlmIChzYltpXSA9PSBJQUMpIGkrKzsK LSAgICAgICAgICAgICAgICAgIGggKz0gc2JbaSsrXTsKLSAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMTEsInRuX2Rvb3AgTkFXUyBTQiIsIndpZHRoIix3KTsKLSAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsInRuX2Rvb3AgTkFXUyBTQiIsImhlaWdodCIsaCk7Ci0KLSAgICAgICAgICAgICAg ICAgIGlmICh3ID09IDApCi0gICAgICAgICAgICAgICAgICAgIHcgPSA4MDsKLSAgICAgICAgICAg ICAgICAgIGlmIChoID09IDApCi0gICAgICAgICAgICAgICAgICAgIGggPSAyNDsKLSNpZm5kZWYg Tk9MT0NBTAotICAgICAgICAgICAgICAgICAgaWYgKHRjcF9pbmNvbWluZyB8fCBpbnNlcnZlcikg ewotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICAgIHR0X2NvbHNbVlRFUk1dID0gdzsK LSAgICAgICAgICAgICAgICAgICAgICB0dF9yb3dzW1ZURVJNXSA9IGg7Ci0gICAgICAgICAgICAg ICAgICAgICAgVnNjcm5TZXRXaWR0aChWVEVSTSwgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAg VnNjcm5TZXRIZWlnaHQoVlRFUk0sIGgrKHR0X3N0YXR1c1tWVEVSTV0/MTowKSk7Ci0jaWZkZWYg SUtTRAotICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAg ICAgICAgICAgICAgICBjbWRfY29scyA9IHR0X2NvbHNbVkNNRF0gPSB3OwotICAgICAgICAgICAg ICAgICAgICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3NbVkNNRF0gPSBoOwotICAgICAgICAgICAg ICAgICAgICAgICAgICBWc2NyblNldFdpZHRoKFZDTUQsIHcpOwotICAgICAgICAgICAgICAgICAg ICAgICAgICBWc2NyblNldEhlaWdodChWQ01ELCBoKTsKLSAgICAgICAgICAgICAgICAgICAgICB9 Ci0jZW5kaWYgLyogSUtTRCAqLwotI2Vsc2UgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICAg ICAgdHRfY29scyA9IHc7Ci0gICAgICAgICAgICAgICAgICAgICAgdHRfcm93cyA9IGg7Ci0jZW5k aWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICB9IGVsc2UgewotI2lmZGVmIE9TMgotICAg ICAgICAgICAgICAgICAgICAgIHR0X2NvbHNbVkNNRF0gPSB3OwotICAgICAgICAgICAgICAgICAg ICAgIHR0X3Jvd3NbVkNNRF0gPSBoOwotICAgICAgICAgICAgICAgICAgICAgIFZzY3JuU2V0V2lk dGgoVkNNRCwgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgVnNjcm5TZXRIZWlnaHQoVkNNRCwg aCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICAgICAgY21kX2NvbHMgPSB3 OwotICAgICAgICAgICAgICAgICAgICAgIGNtZF9yb3dzID0gaDsKLSAgICAgICAgICAgICAgICAg IH0KLSNlbHNlIC8qIE5PTE9DQUwgKi8KLSAgICAgICAgICAgICAgICAgIGNtZF9jb2xzID0gdzsK LSAgICAgICAgICAgICAgICAgIGNtZF9yb3dzID0gaDsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0K LSAgICAgICAgICAgICAgICAgIC8qIEFkZCBMSU5FUyBhbmQgQ09MVU1OUyB0byB0aGUgZW52aXJv bm1lbnQgKi8KLSAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKChjaGFyICopcm93c19idWYsMTYs IkxJTkVTPSIsY2tpdG9hKGgpLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAgICAgICBja21ha21z ZygoY2hhciAqKWNvbHNfYnVmLDE2LCJDT0xVTU5TPSIsY2tpdG9hKHcpLE5VTEwsTlVMTCk7Ci0j aWZkZWYgT1MyT1JVTklYCi0jaWZuZGVmIE5PUFVURU5WCi0gICAgICAgICAgICAgICAgICBwdXRl bnYocm93c19idWYpOwotICAgICAgICAgICAgICAgICAgcHV0ZW52KGNvbHNfYnVmKTsKLSNlbmRp ZiAvKiBOT1BVVEVOViAqLwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIENLX0VOVklST05NRU5UCi0gICAgICAgICAg Y2FzZSBURUxPUFRfTkVXRU5WSVJPTjoKLSAgICAgICAgICAgIHN3aXRjaCAoc2JbMF0pIHsKLSAg ICAgICAgICAgICAgY2FzZSBURUxRVUFMX0lTOiAgICAgICAgICAgICAgICAgIC8qIElTICovCi0g ICAgICAgICAgICAgIGNhc2UgVEVMUVVBTF9JTkZPOiAgICAgICAgICAgICAgICAvKiBJTkZPICov Ci0gICAgICAgICAgICAgICAgaWYgKHNiWzBdID09IFRFTFFVQUxfSVMpCi0gICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJ0bl9kb29wIE5FVy1FTlYgU0IgSVMiLCIiLG4tMyk7Ci0gICAgICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwidG5fZG9vcCBORVct RU5WIFNCIElORk8iLCIiLG4tMyk7Ci0gICAgICAgICAgICAgICAgaWYgKHNzdGVsbmV0IHx8IGlu c2VydmVyKSB7IC8qIFllcywgcmVjZWl2ZSBpdC4gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYg KHRuX3JuZW52KChDSEFSICopJnNiWzFdLG4tMykgPCAwKQotICAgICAgICAgICAgICAgICAgICAg IHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICBjYXNlIFRFTFFVQUxfU0VORDogICAgICAgIC8qIFNFTkQgKi8KLSAgICAg ICAgICAgICAgICBpZiAoIHNzdGVsbmV0IHx8IGluc2VydmVyICkgICAgICAgICAvKiBpZ25vcmUg aWYgc2VydmVyICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg IC8qIFdlIG5lZWQgdG8gdGFrZSB0aGUgc2JbXSBhbmQgYnVpbGQgYSBzdHJ1Y3R1cmUgKi8KLSAg ICAgICAgICAgICAgICAvKiBjb250YWluaW5nIGFsbCBvZiB0aGUgdmFyaWFibGVzIGFuZCB0eXBl cyB0aGF0ICovCi0gICAgICAgICAgICAgICAgLyogd2UgYXJlIHN1cHBvc2VkIHRvIGtlZXAgdHJh Y2sgb2YgYW5kIHNlbmQgdG8gICAqLwotICAgICAgICAgICAgICAgIC8qIHRoZSBob3N0LCB0aGVu IGNhbGwgdG5fc25lbnYoKS4gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIC8q IE9yIHdlIGNhbiBwdW50IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAg ICAgICAgICAgICAgIGlmICggIXRuX2RlbGF5X3NiIHx8ICF0bl9vdXRzdCgwKSB8fCB0bl9pbml0 ICkgewotICAgICAgICAgICAgICAgICAgaWYgKHRuX3NuZW52KChDSEFSICopJnNiWzFdLG4tMykg PCAwKSAvKiBZZXMsIHNlbmQgaXQuICovCi0gICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEp OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0jaWZuZGVmIFZNUwotICAgICAgICAgICAgICAg ICAgQ0hBUiAqIHh4eDsKLSAgICAgICAgICAgICAgICAgIHh4eCA9IChDSEFSICopIG1hbGxvYyhu LTEpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiB4eHg7Ci0gICAg ICAgICAgICAgICAgICB4eHggPSAodW5zaWduZWQgY2hhciAqKSBtYWxsb2Mobi0xKTsKLSNlbmRp ZiAvKiBWTVMgKi8KLSAgICAgICAgICAgICAgICAgIC8qIFBvc3Rwb25lIHNlbmRpbmcgdW50aWwg ZW5kIG9mIHRuX2luaSgpICovCi0gICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX05F V0VOVklST04pLmVudi5zdHIgPSB4eHg7Ci0gICAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1NC KFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYuc3RyKSB7Ci0gICAgICAgICAgICAgICAgICBtZW1jcHko KGNoYXIgKilURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVudi5zdHIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNoYXIgKikmc2JbMV0sbi0zKTsKLSAgICAgICAgICAgICAgICAg IFRFTE9QVF9TQihURUxPUFRfTkVXRU5WSVJPTikuZW52LnN0cltuLTNdID0gSUFDOwotICAgICAg ICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYuc3RyW24tMl0gPSAn XDAnOwotICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYu bGVuID0gbi0zOwotICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9O KS5lbnYubmVlZF90b19zZW5kID0gMTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KLSNpZmRlZiBDS19TTkRM T0MKLSAgICAgICAgICBjYXNlIFRFTE9QVF9TTkRMT0M6IHsKLSAgICAgICAgICAgICAgaWYgKCBk ZWJsb2cgKSB7Ci0gICAgICAgICAgICAgICAgICBzYltuLTJdID0gJ1wwJzsKLSAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTAsIlRFTE5FVCBTZW5kLUxvY2F0aW9uIixzYiwwKTsKLSAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tf U05ETE9DICovCi0gICAgICAgICAgfSAvKiBzd2l0Y2ggKi8KLSAgICAgICAgYnJlYWs7Ci0gICAg fQotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMgICAgICAgICAgICAg ICAgICAgICAgICAgLyogVEVMTkVUIERPIE9QVElPTiAqLwotdG5fZG9vcChDSEFSIHosIGludCBl Y2hvLCBpbnQgKCpmbikoaW50KSkKLSNlbHNlCi10bl9kb29wKHosIGVjaG8sIGZuKSBDSEFSIHo7 IGludCBlY2hvOyBpbnQgKCpmbikoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5fZG9v cCAqLyB7Ci0gICAgaW50IHg9MCwgeT0wOwotCi0gICAgZGVidWcoRjEwMSwidG5fZG9vcCBjaGFy IiwiIix6KTsKLSAgICBkZWJ1ZyhGMTAxLCJ0bl9kb29wIHR0bnByb3RvIiwiIix0dG5wcm90byk7 Ci0KLSAgICBpZiAoIUlTX1RFTE5FVCgpKSByZXR1cm4oMyk7Ci0KLSNpZmRlZiBDS19TU0wKLSAg ICBkZWJ1ZyhGMTAxLCJ0bl9kb29wIHNzbF9yYXdfZmxhZyIsIiIsc3NsX3Jhd19mbGFnKTsKLSAg ICBpZiAoc3NsX3Jhd19mbGFnIHx8IHRsc19yYXdfZmxhZykgcmV0dXJuKDcpOwotI2VuZGlmCS8q IENLX1NTTCAqLwotICAgIGRlYnVnKEYxMDAsInRuX2Rvb3AgdHRucHJvdG8gcHJvY2VlZGluZy4u LiIsIiIsMCk7Ci0KLSAgICBpZiAoeiAhPSAoQ0hBUikgSUFDKSB7Ci0gICAgICAgIGRlYnVnKEYx MDEsInRuX2Rvb3AgYmFkIGNhbGwiLCIiLHopOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0K LSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpICAgICAgICAgICAgICAvKiBDaGVjayBuZXR3b3Jr IHR5cGUgKi8KLSAgICAgIHJldHVybigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVU ICYmCi0gICAgICAgICB0dG5wcm90byAhPSBOUF9OT05FKSAgICAgICAgICAgLyogQ2hlY2sgcHJv dG9jb2wgKi8KLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgeCA9IHRuX3hkb29wKHosZWNobyxm bik7Ci0gICAgaWYgKHggPj0gMCAmJiAhdG5fYmVndW4pIHsKLSAgICAgICAgeSA9IHRuX3N0YXJ0 KCk7Ci0gICAgfQotICAgIHJldHVybih5IDwgMCA/IHkgOiB4KTsKLX0KLQotI2lmZGVmIENLX0VO VklST05NRU5UCi0KLS8qIFRlbG5ldCByZWNlaXZlIG5ldyBlbnZpcm9ubWVudCAqLwotLyogUmV0 dXJucyAtMSBvbiBlcnJvciwgMCBpZiBub3RoaW5nIGhhcHBlbnMsIDEgb24gc3VjY2VzcyAqLwot LyogSW4gb3JkZXIgZm9yIHRoaXMgY29kZSB0byB3b3JrLCBzYltsZW5dID09IElBQyAgICAgICAg ICAqLwotLyogV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCB0aGUgVVNFUiBlbnZpcm9ubWVudCB2 YXJpYWJsZSAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5fcm5lbnYoQ0hBUiAqIHNiLCBp bnQgbGVuKQotI2Vsc2UKLXRuX3JuZW52KHNiLCBsZW4pIENIQVIgKiBzYjsgaW50IGxlbjsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5fcm5lbnYgKi8geyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJlY2VpdmUgbmV3IGVudmlyb25tZW50ICovCi0gICAgY2hhciB2YXJuYW1lWzE3XTsK LSAgICBjaGFyIHZhbHVlWzY1XTsKLSAgICBjaGFyICogcmVwbHkgPSAwLCAqIHMgPSAwOwotICAg IGludCBpLGosayxuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VyLiAq LwotICAgIGludCB0eXBlID0gMDsgLyogMCBmb3IgTk9ORSwgMSBmb3IgVkFSLCAyIGZvciBVU0VS VkFSLCAqLwotICAgICAgICAgICAgICAgICAgLyogMyBmb3IgVkFMVUUgaW4gcHJvZ3Jlc3MgKi8K LQotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOwotICAgIGlmICh0dG5wcm90 byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKLSAgICBpZiAoc2IgPT0gTlVMTCkgcmV0dXJuKC0x KTsKLQotICAgIGlmIChsZW4gPT0gMCkgcmV0dXJuKDEpOwotCi0gICAgLyoKLSAgICBQYWlycyBv ZiA8dHlwZT4gW1ZBUj0wLCBWQUxVRT0xLCBFU0M9MiwgVVNFUlZBUj0zXSA8dmFsdWU+ICJ1bnRl cm1pbmF0ZWQiCi0gICAgZm9sbG93IGhlcmUgdW50aWwgZG9uZS4uLgotICAgICovCi0gICAgZm9y IChpID0gMCwgaiA9IDAsIGsgPSAwLCB0eXBlID0gMCwgdmFybmFtZVswXT0gJ1wwJzsgaSA8PSBs ZW47IGkrKykgewotICAgICAgICBzd2l0Y2ggKHNiW2ldKSB7Ci0gICAgICAgIGNhc2UgVEVMX0VO Vl9WQVI6ICAgICAgICAgICAgICAgLyogVkFSICovCi0gICAgICAgIGNhc2UgVEVMX0VOVl9VU0VS VkFSOiAgICAgICAgICAgLyogVVNFUlZBUiAqLwotICAgICAgICBjYXNlIElBQzogICAgICAgICAg ICAgICAgICAgICAgIC8qIEVuZCBvZiB0aGUgbGlzdCAqLwotICAgICAgICAgICAgc3dpdGNoICh0 eXBlKSB7Ci0gICAgICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgLyogTm90aGlu ZyBpbiBwcm9ncmVzcyAqLwotICAgICAgICAgICAgICAgIC8qIElmIHdlIGdldCBJQUMgb25seSwg dGhlbiB0aGF0IG1lYW5zIHRoZXJlIHdlcmUgKi8KLSAgICAgICAgICAgICAgICAvKiBubyBlbnZp cm9ubWVudCB2YXJpYWJsZXMgdG8gc2VuZC4gIHdlIGFyZSBkb25lICovCi0gICAgICAgICAgICAg ICAgaWYgKGogPT0gMCAmJiBzYltpXSA9PSBJQUMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy bigxKTsKLSAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAvKiBWQVIgaW4g cHJvZ3Jlc3MgKi8KLSAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAvKiBV U0VSVkFSIGluIHByb2dyZXNzICovCi0gICAgICAgICAgICAgIGNhc2UgMzogICAgICAgICAgICAg ICAgICAgLyogVkFMVUUgaW4gcHJvZ3Jlc3MgKi8KLSAgICAgICAgICAgICAgICB2YWx1ZVtrXSA9 ICdcMCc7Ci0gICAgICAgICAgICAgICAgdmFybmFtZVtqXSA9ICdcMCc7Ci0gICAgICAgICAgICAg ICAgZGVidWcoRjExMSwidG5fcm5lbnYgdmFybmFtZSIsdmFybmFtZSx0eXBlKTsKLSAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9ybmVudiB2YWx1ZSIsdmFsdWUsdHlwZSk7Ci0gICAgICAg ICAgICAgICAgaWYgKCFzdHJjbXAodmFybmFtZSwiVVNFUiIpKSB7Ci0jaWZkZWYgQ0tfQVVUSEVO VElDQVRJT04KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNrX3RuX2F1dGhfdmFsaWQoKSAhPSBB VVRIX1ZBTElEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciBzelVzZXJO YW1lUmVxdWVzdGVkW107Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0bl9y bmVudiAhPSBBVVRIX1ZBTElEIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNrc3Ry bmNweShzelVzZXJOYW1lUmVxdWVzdGVkLHZhbHVlLFVJREJVRkxFTik7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBja3N0cm5jcHkodWlkYnVmLHZhbHVlLFVJREJVRkxFTik7Ci0jaWZkZWYgQ0tf U1NMCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bHNfaXNfdXNlcl92YWxpZChzc2xfY29uLCB1 aWRidWYpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciBz elVzZXJOYW1lQXV0aGVudGljYXRlZFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBja3N0cm5jcHkoc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQsdWlkYnVmLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJREJVRkxFTik7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9WQUxJRCk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0 bHNfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRsc19p c191c2VyX3ZhbGlkKHRsc19jb24sIHVpZGJ1ZikgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGV4dGVybiBjaGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzelVzZXJOYW1lQXV0aGVudGljYXRl ZCx1aWRidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlE QlVGTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChB VVRIX1ZBTElEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7ICAgIC8qIEFVVEhfVkFMSUQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB4 ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInRuX3JuZW52IEFVVEhf VkFMSUQgdWlkYnVmIix1aWRidWYsMCk7Ci0KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAg ICAgICAgIHggPSBja3N0cmNtcCh2YWx1ZSx1aWRidWYsLTEsMCk7IC8qIGNhc2UgaW5zZW5zaXRp dmUgKi8KLSNpZmRlZiBOVAotICAgICAgICAgICAgICAgICAgICAgICAgLyogTlRMTSBhdXRoZW50 aWNhdGlvbiByZXR1cm5zIG5hbWVzIG9mIHRoZSBmb3JtICovCi0gICAgICAgICAgICAgICAgICAg ICAgICAvKiBET01BSU5cdXNlci4gIFdlIG5lZWQgdG8gY2hlY2sgdG8gc2VlIG9mIHRoZSAgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTRVIgVkFSIGNvbnRhaW5zIGEgZG9tYWluIG5h bWUgb3Igbm90LiAgSWYgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90LCB0aGVu IHdlIGRvIG5vdCB3YW50IHRvIGNoYW5nZSBzdGF0ZSBpZiAgICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAvKiB0aGUgdWlkYnVmIG1hdGNoZXMgdGhlIFVTRVIgVkFSIHdoZW4gdGhlICAgICAg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIERPTUFJTiBpcyBpZ25vcmVkLiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB4ICYm IGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9OVExNICkgewotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKiBzMT1OVUxMLCAqIHMyPU5VTEw7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICAgIGxlbjEsIGxlbjIsIGk7Ci0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsZW4xID0gc3RybGVuKHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmb3IgKCBpPWxlbjEtMSA7IGk+PTAgOyBpLS0pIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCB2YWx1ZVtpXSA9PSAnXFwnICkgewotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgczEgPSAmdmFsdWVbaSsxXTsgICAvKiBET01BSU4gZm91bmQgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzMSA9PSBOVUxMICkgewotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsZW4yID0gc3RybGVuKHVpZGJ1Zik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGk9bGVuMi0xIDsgaT49MCA7IGktLSkgewotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB1aWRidWZbaV0gPT0gJ1xcJyAp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMiA9ICZ1aWRidWZb aSsxXTsgICAvKiBET01BSU4gZm91bmQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmICggczIgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeCA9IGNrc3RyY21wKHZhbHVlLHMyLC0xLDApOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2Ug LyogT1MyICovCi0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gY2tzdHJjbXAodmFsdWUsdWlk YnVmLC0xLDEpOyAvKiBjYXNlIHNlbnNpdGl2ZSAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCB4ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg IGV4dGVybiBjaGFyIHN6VXNlck5hbWVSZXF1ZXN0ZWRbXTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBja3N0cm5jcHkodWlkYnVmLHZhbHVlLFVJREJVRkxFTik7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWVSZXF1ZXN0ZWQsdmFsdWUsVUlEQlVG TEVOKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVVNF Uik7Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNzbF9h Y3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCB0bHNfaXNfdXNlcl92YWxpZChzc2xfY29uLCB1aWRidWYpICkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9WQUxJRCk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0jZWxzZSAvKiBD S19BVVRIRU5USUNBVElPTiAqLwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodWlkYnVm LHZhbHVlLFVJREJVRkxFTik7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICB2YXJuYW1lWzBdID0gJ1wwJzsKLSAgICAgICAgICAgIHZhbHVlWzBdID0gJ1wwJzsK LSAgICAgICAgICAgIGogPSAwOwotICAgICAgICAgICAgayA9IDA7Ci0gICAgICAgICAgICB0eXBl ID0gKHNiW2ldID09IFRFTF9FTlZfVVNFUlZBUiA/IDIgOiAgICAgIC8qIFVTRVJWQVIgKi8KLSAg ICAgICAgICAgICAgICAgICAgc2JbaV0gPT0gVEVMX0VOVl9WQVIgPyAxIDogIC8qIFZBUiAqLwot ICAgICAgICAgICAgICAgICAgICAgMAotICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRFTF9FTlZfVkFMVUU6IC8qIFZBTFVFICovCi0gICAg ICAgICAgICBpZiAoIHR5cGUgPT0gMSB8fCB0eXBlID09IDIgKQotICAgICAgICAgICAgICAgIHR5 cGUgPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVEVMX0VOVl9FU0M6ICAg ICAgIC8qIEVTQyAqLwotICAgICAgICAgICAgLyogVGFrZSBuZXh0IGNoYXJhY3RlciBsaXRlcmFs bHkgKi8KLSAgICAgICAgICAgIGlmICggKytpID49IGxlbiApCi0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAvKiBvdGhlcndpc2UsIGZhbGx0aHJvdWdoIHNvIGJ5dGUgd2lsbCBi ZSBhZGRlZCB0byBzdHJpbmcuICovCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzd2l0 Y2ggKHR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgMTogICAgIC8qIFZBUiBpbiBwcm9ncmVzcyAq LwotICAgICAgICAgICAgY2FzZSAyOiAgICAgLyogVVNFUlZBUiBpbiBwcm9ncmVzcyAqLwotICAg ICAgICAgICAgICAgIGlmICggaiA8IDE2ICkKLSAgICAgICAgICAgICAgICAgICAgdmFybmFtZVtq KytdID0gc2JbaV07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDM6 Ci0gICAgICAgICAgICAgICAgaWYgKCBrIDwgNjQgKQotICAgICAgICAgICAgICAgICAgICB2YWx1 ZVtrKytdID0gc2JbaV07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKiBUaGVzZSBhcmUgZm9yIE1p Y3Jvc29mdCBTRlUgdmVyc2lvbiAyIFRlbG5ldCBTZXJ2ZXIgKi8KLSNkZWZpbmUgU0ZVVExOVFZF UiAiU0ZVVExOVFZFUiIKLSNkZWZpbmUgU0ZVVExOVE1PREUgIlNGVVRMTlRNT0RFIgotI2RlZmlu ZSBTRlVUTE5UVkVSX1ZBTFVFICAiMiIKLSNkZWZpbmUgU0ZVVExOVE1PREVfVkFMVUUgImNvbnNv bGUiCS8qIFRoZSBvdGhlciB2YWx1ZSBpcyAic3RyZWFtIiAqLwotCi0vKiBUZWxuZXQgc2VuZCBu ZXcgZW52aXJvbm1lbnQgKi8KLS8qIFJldHVybnMgLTEgb24gZXJyb3IsIDAgaWYgbm90aGluZyBo YXBwZW5zLCAxIG9uIHN1Y2Nlc3MgKi8KLS8qIEluIG9yZGVyIGZvciB0aGlzIGNvZGUgdG8gd29y aywgc2JbbGVuXSA9PSBJQUMgICAgICAgICAgKi8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRu X3NuZW52KENIQVIgKiBzYiwgaW50IGxlbikKLSNlbHNlCi10bl9zbmVudihzYiwgbGVuKSBDSEFS ICogc2I7IGludCBsZW47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuX3NuZW52ICovIHsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIG5ldyBlbnZpcm9ubWVudCAqLwotICAgIGNo YXIgdmFybmFtZVsxNl07Ci0gICAgY2hhciAqIHJlcGx5ID0gMCwgKiBzID0gMDsKLSAgICBpbnQg aSxqLG47ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXIuICovCi0gICAgaW50IHR5 cGUgPSAwOyAgICAgICAvKiAwIGZvciBOT05FLCAxIGZvciBWQVIsIDIgZm9yIFVTRVJWQVIgaW4g cHJvZ3Jlc3MgKi8KLSAgICBleHRlcm4gaW50IGNrX2xjbmFtZTsKLSAgICBjaGFyIGxvY2FsdWlk YnVmW1VJREJVRkxFTl07CS8qIChJbml0aWFsaXplZCBqdXN0IGJlbG93KSAqLwotICAgIGNoYXIg KiB1dSA9IHVpZGJ1ZjsKLSAgICBjaGFyICogZGlzcCA9IE5VTEw7Ci0KLSAgICBsb2NhbHVpZGJ1 ZlswXSA9ICdcMCc7Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7Ci0gICAg aWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotICAgIGlmICghc2IpIHJldHVy bigtMSk7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9U TFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0j ZW5kaWYgLyogQ0tfU1NMICovCi0KLSNpZmRlZiBDS19GT1JXQVJEX1gKLSAgICBpZiAoVEVMT1BU X1UoVEVMT1BUX0ZPUldBUkRfWCkpIHsKLSAgICAgICAgZGlzcCA9IE5VTEw7Ci0gICAgfSBlbHNl Ci0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0gICAgICAgIGRpc3AgPSAoY2hhciAqKXRuX2dl dF9kaXNwbGF5KCk7Ci0KLSAgICBpZiAoY2tfbGNuYW1lKSB7Ci0gICAgICAgIGNrc3RybmNweShs b2NhbHVpZGJ1Zix1aWRidWYsVUlEQlVGTEVOKTsKLSAgICAgICAgY2tsb3dlcihsb2NhbHVpZGJ1 Zik7Ci0gICAgICAgIHV1ID0gbG9jYWx1aWRidWY7Ci0gICAgfQotCi0gICAgY2toZXhkdW1wKChD SEFSICopInRuX3NuZW52IHNiW10iLHNiLGxlbik7Ci0gICAgZGVidWcoRjExMCwidG5fc25lbnYg dWlkYnVmIix1aWRidWYsMCk7Ci0gICAgZGVidWcoRjExMCwidG5fc25lbnYgbG9jYWx1aWRidWYi LGxvY2FsdWlkYnVmLDApOwotICAgIGRlYnVnKEYxMTAsInRuX3NuZW52IHRuX2Vudl9zeXMiLHRu X2Vudl9zeXMsMCk7Ci0gICAgZGVidWcoRjExMCwidG5fc25lbnYgdG5fZW52X2Rpc3AiLHRuX2Vu dl9kaXNwLDApOwotICAgIGRlYnVnKEYxMTAsInRuX3NuZW52IGRpc3AiLGRpc3AsMCk7Ci0KLSAg ICAvKiBGaXJzdCBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB3ZSB3aWxsIG5lZWQg Ki8KLSAgICBmb3IgKGkgPSAwLCBqID0gMCwgbiA9IDAsIHR5cGUgPSAwLCB2YXJuYW1lWzBdPSAn XDAnOyBpIDw9IGxlbjsgaSsrKSB7Ci0gICAgICAgIHN3aXRjaCAoc2JbaV0pIHsKLSAgICAgICAg ICBjYXNlIFRFTF9FTlZfVkFSOiAgICAgICAgICAgICAvKiBWQVIgKi8KLSAgICAgICAgICBjYXNl IFRFTF9FTlZfVVNFUlZBUjogICAgICAgICAvKiBVU0VSVkFSICovCi0gICAgICAgIGNhc2UgSUFD OiAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiB0aGUgbGlzdCAqLwotICAgICAgICAgICAg c3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgIC8q IE5vdGhpbmcgaW4gcHJvZ3Jlc3MgKi8KLSAgICAgICAgICAgICAgICAvKiBJZiB3ZSBnZXQgSUFD IG9ubHksIHRoZW4gdGhhdCBtZWFucyBzZW5kIGFsbCAqLwotICAgICAgICAgICAgICAgIC8qIFZB UiBhbmQgVVNFUlZBUi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg ICAgICAgaWYgKCEoaiA9PSAwICYmIHNiW2ldID09IElBQykpCi0gICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgLyogVkFSIGluIHBy b2dyZXNzICovCi0gICAgICAgICAgICAgICAgdmFybmFtZVtqXSA9ICdcMCcgOwotICAgICAgICAg ICAgICAgIGlmICghdmFybmFtZVswXSkgeyAgICAgIC8qIFNlbmQgQWxsICovCi0gICAgICAgICAg ICAgICAgICAgIGlmICh1dVswXSkKLSAgICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbih1 dSkgKyA0ICsgMjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2Vudl9qb2JbMF0pCi0gICAg ICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X2pvYikgKyAzICsgMjsKLSAgICAg ICAgICAgICAgICAgICAgaWYgKHRuX2Vudl9hY2N0WzBdKQotICAgICAgICAgICAgICAgICAgICAg IG4gKz0gc3RybGVuKHRuX2Vudl9hY2N0KSArIDQgKyAyOwotICAgICAgICAgICAgICAgICAgICBp ZiAodG5fZW52X3BybnRbMF0pCi0gICAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5f ZW52X3BybnQpICsgNyArIDI7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bl9lbnZfc3lzWzBd KQotICAgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl9zeXMpICsgMTAgKyAy OwotICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcCkKLSAgICAgICAgICAgICAgICAgICAgICBu ICs9IHN0cmxlbihkaXNwKSArIDcgKyAyOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0 cmNtcCh2YXJuYW1lLCJVU0VSIikgJiYgdXVbMF0pCi0gICAgICAgICAgICAgICAgICBuICs9IHN0 cmxlbih1dSkgKyA0ICsgMjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKHZhcm5h bWUsIkpPQiIpICYmIHRuX2Vudl9qb2JbMF0pCi0gICAgICAgICAgICAgICAgICBuICs9IHN0cmxl bih0bl9lbnZfam9iKSArIDMgKyAyOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAo dmFybmFtZSwiQUNDVCIpICYmIHRuX2Vudl9hY2N0WzBdKQotICAgICAgICAgICAgICAgICAgbiAr PSBzdHJsZW4odG5fZW52X2FjY3QpICsgNCArIDI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo IXN0cmNtcCh2YXJuYW1lLCJQUklOVEVSIikgJiYgdG5fZW52X3BybnRbMF0pCi0gICAgICAgICAg ICAgICAgICBuICs9IHN0cmxlbih0bl9lbnZfcHJudCkgKyA3ICsgMjsKLSAgICAgICAgICAgICAg ICBlbHNlIGlmICghc3RyY21wKHZhcm5hbWUsIlNZU1RFTVRZUEUiKSAmJiB0bl9lbnZfc3lzWzBd KQotICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X3N5cykgKyAxMCArIDI7Ci0g ICAgICAgICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh2YXJuYW1lLCJESVNQTEFZIikgJiYgZGlz cCkKLSAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKGRpc3ApICsgNyArIDI7Ci0gICAgICAg ICAgICAgICAgLyogSWYgd2UgZ2V0IElBQyBvbmx5LCB0aGVuIHRoYXQgbWVhbnMgc2VuZCBhbGwg Ki8KLSAgICAgICAgICAgICAgICAvKiBWQVIgYW5kIFVTRVJWQVIuICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgaWYgKCEoaiA9PSAwICYmIHNiW2ldID09 IElBQykpCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6 ICAgICAgICAgICAgICAgICAgIC8qIFVTRVJWQVIgaW4gcHJvZ3Jlc3MgKi8KLSAgICAgICAgICAg ICAgICB2YXJuYW1lW2pdID0gJ1wwJyA7Ci0gICAgICAgICAgICAgICAgaWYgKCF2YXJuYW1lWzBd KSB7ICAgICAgLyogU2VuZCBBbGwgKi8KLSAgICAgICAgICAgICAgICAgICAgaW50IHg7Ci0gICAg ICAgICAgICAgICAgICAgIGZvciAoIHg9MCA7IHg8OCA7IHgrKyApIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGlmICggdG5fZW52X3VzZXJ2YXJbeF1bMF0gJiYKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdG5fZW52X3VzZXJ2YXJbeF1bMV0gKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl91c2VydmFyW3hdWzBdKQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArIHN0cmxlbih0bl9lbnZfdXNlcnZhclt4XVsxXSkgKyAyOwotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICggdG5fc2Z1ICkgewot ICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBNaWNyb3Nv ZnQgVGVsbmV0IFNlcnZlciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4o U0ZVVExOVFZFUikgKyBzdHJsZW4oU0ZVVExOVFZFUl9WQUxVRSkgKyAyOwotICAgICAgICAgICAg ICAgICAgICAgICAgbiArPSBzdHJsZW4oU0ZVVExOVE1PREUpICsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RybGVuKFNGVVRMTlRNT0RFX1ZBTFVFKSArIDI7Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSNpZmRlZiBDS19TTkRMT0MKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB0bl9sb2Mg JiYgdG5fbG9jWzBdICkKLSAgICAgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKCJMT0NB VElPTiIpICsgc3RybGVuKHRuX2xvYykgKyAyOwotI2VuZGlmIC8qIENLX1NORExPQyAqLwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0bl9zZnUgJiYgIXN0cmNt cCh2YXJuYW1lLFNGVVRMTlRWRVIpKQotICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbihT RlVUTE5UVkVSKSArIHN0cmxlbihTRlVUTE5UVkVSX1ZBTFVFKSArIDI7Ci0gICAgICAgICAgICAg ICAgZWxzZSBpZiAodG5fc2Z1ICYmICFzdHJjbXAodmFybmFtZSxTRlVUTE5UTU9ERSkpCi0gICAg ICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKFNGVVRMTlRNT0RFKSArIHN0cmxlbihTRlVUTE5U TU9ERV9WQUxVRSkgKyAyOwotI2lmZGVmIENLX1NORExPQwotICAgICAgICAgICAgICAgIGVsc2Ug aWYgKCB0bl9sb2MgJiYgdG5fbG9jWzBdICYmICFzdHJjbXAodmFybmFtZSwiTE9DQVRJT04iKSkK LSAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4oIkxPQ0FUSU9OIikgKyBzdHJsZW4odG5f bG9jKSArIDI7Ci0jZW5kaWYgLyogQ0tfU05ETE9DICovCi0gICAgICAgICAgICAgICAgZWxzZSB7 Ci0gICAgICAgICAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgICAgICAgICBmb3IgKCB4 PTAgOyB4PDggOyB4KysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRuX2Vudl91 c2VydmFyW3hdWzBdICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuX2Vudl91c2Vy dmFyW3hdWzFdICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzdHJjbXAodmFybmFt ZSx0bl9lbnZfdXNlcnZhclt4XVswXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiAr PSBzdHJsZW4odG5fZW52X3VzZXJ2YXJbeF1bMF0pCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsgc3RybGVuKHRuX2Vudl91c2VydmFyW3hdWzFdKSArIDI7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICB2YXJuYW1lWzBdID0gJ1wwJzsKLSAgICAgICAgICAgIGog PSAwOwotICAgICAgICAgICAgdHlwZSA9IChzYltpXSA9PSBURUxfRU5WX1VTRVJWQVIgPyAyIDog ICAgICAvKiBVU0VSVkFSICovCi0gICAgICAgICAgICAgICAgICAgIHNiW2ldID09IFRFTF9FTlZf VkFSID8gMSA6ICAgICAgICAgIC8qIFZBUiAqLwotICAgICAgICAgICAgICAgICAgICAwCi0gICAg ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVEVM X0VOVl9WQUxVRTogICAgICAgICAgIC8qIFZBTFVFICovCi0gICAgICAgICAgICAvKiBQcm90b2Nv bCBFcnJvciAqLwotICAgICAgICAgICAgZGVidWcoRjEwMCwgIlRFTE5FVCBTdWJuZWdvdGlhdGlv biBlcnJvciAtIFZBTFVFIGluIFNFTkQiLCAiIiwwKTsKLSAgICAgICAgICAgIGlmICh0bl9kZWIg fHwgZGVic2VzKQotICAgICAgICAgICAgICB0bl9kZWJ1ZygiVEVMTkVUIFN1Ym5lZ290aWF0aW9u IGVycm9yIC0gVkFMVUUgaW4gU0VORCIpOwotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAg ICAgIGNhc2UgVEVMX0VOVl9FU0M6ICAgICAvKiBFU0MgKi8KLSAgICAgICAgICAgIGlmICgrK2kg Pj0gbGVuKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg ICAgICAgaWYgKGogPCAxNiApCi0gICAgICAgICAgICAgIHZhcm5hbWVbaisrXSA9IHNiW2ldOwot ICAgICAgICB9Ci0gICAgfQotICAgIHJlcGx5ID0gbWFsbG9jKG4gKyAxNik7ICAgICAgICAgICAg ICAvKiBMZWF2ZSByb29tIGZvciBJQUMgc3R1ZmYgKi8KLSAgICBpZiAoIXJlcGx5KSB7Ci0gICAg ICAgIGRlYnVnKEYxMDAsICJURUxORVQgU3VibmVnb3RpYXRpb24gZXJyb3IgLSBtYWxsb2MgZmFp bGVkIiwgIiIsMCk7Ci0gICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgIHRu X2RlYnVnKCJURUxORVQgU3VibmVnb3RpYXRpb24gZXJyb3IgLSBtYWxsb2MgZmFpbGVkIik7Ci0K LSAgICAgICAgLyogU2VuZCBhIHJldHVybiBwYWNrZXQgd2l0aCBubyB2YXJpYWJsZXMgc28gdGhh dCB0aGUgaG9zdCAqLwotICAgICAgICAvKiBtYXkgY29udGludWUgd2l0aCBhZGRpdGlvbmFsIG5l Z290aWF0aW9ucyAgICAgICAgICAgICAgICovCi0gICAgICAgIGlmICh0bl9zc2JvcHQoVEVMT1BU X05FV0VOVklST04sVEVMUVVBTF9JUywiIiwwKSA8IDApCi0gICAgICAgICAgcmV0dXJuKC0xKTsK LSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotICAgIC8qIE5vdyBjb25zdHJ1Y3QgdGhlIHJl YWwgcmVwbHkgKi8KLQotICAgIG4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFN0YXJ0IGF0IGJlZ2lubmluZyBvZiBidWZmZXIgKi8KLS8qCi0gIFBhaXJzIG9mIDx0eXBlPiBb VkFSPTAsIFZBTFVFPTEsIEVTQz0yLCBVU0VSVkFSPTNdIDx2YWx1ZT4gInVudGVybWluYXRlZCIK LSAgZm9sbG93IGhlcmUgdW50aWwgZG9uZS4uLgotKi8KLSAgICBmb3IgKGkgPSAwLCBqID0gMCwg dHlwZSA9IDAsIHZhcm5hbWVbMF09ICdcMCc7IGkgPD0gbGVuOyBpKyspIHsKLSAgICAgICAgc3dp dGNoIChzYltpXSkgewotICAgICAgICAgIGNhc2UgVEVMX0VOVl9WQVI6ICAgICAgICAgICAgIC8q IFZBUiAqLwotICAgICAgICAgIGNhc2UgVEVMX0VOVl9VU0VSVkFSOiAgICAgICAgIC8qIFVTRVJW QVIgKi8KLSAgICAgICAgICBjYXNlIElBQzogICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2Yg dGhlIGxpc3QgKi8KLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgICAgICBj YXNlIDA6ICAgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgaW4gcHJvZ3Jlc3MgKi8KLSAgICAg ICAgICAgICAgICAvKiBJZiB3ZSBnZXQgSUFDIG9ubHksIHRoZW4gdGhhdCBtZWFucyBzZW5kIGFs bCAqLwotICAgICAgICAgICAgICAgIC8qIFZBUiBhbmQgVVNFUlZBUi4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKCEoaiA9PSAwICYmIHNiW2ldID09 IElBQykpCi0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAxOiAg ICAgICAgICAgICAgICAgICAvKiBWQVIgaW4gcHJvZ3Jlc3MgKi8KLSAgICAgICAgICAgICAgICB2 YXJuYW1lW2pdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBpZiAoIXZhcm5hbWVbMF0pIHsKLSAg ICAgICAgICAgICAgICAgICAgLyogU2VuZCBBbGwgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYg KHV1WzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9IFRFTF9FTlZfVkFS OyAvKiBWQVIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSwi VVNFUiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbis1XSA9IFRFTF9FTlZfVkFM VUU7ICAgICAgICAgICAgIC8qIFZBTFVFICovCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJj cHkoJnJlcGx5W24rNl0sdXUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4o dXUpICsgNCArIDI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg aWYgKHRuX2Vudl9qb2JbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0g VEVMX0VOVl9WQVI7IC8qIFZBUiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZy ZXBseVtuKzFdLCJKT0IiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W24rNF0gPSBU RUxfRU5WX1ZBTFVFOyAgICAgLyogVkFMVUUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0 cmNweSgmcmVwbHlbbis1XSx0bl9lbnZfam9iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG4g Kz0gc3RybGVuKHRuX2Vudl9qb2IpICsgMyArIDI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgaWYgKHRuX2Vudl9hY2N0WzBdKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICByZXBseVtuXSA9IFRFTF9FTlZfVkFSOyAvKiBWQVIgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSwiQUNDVCIpOwotICAgICAgICAgICAgICAgICAg ICAgICAgcmVwbHlbbis1XSA9IFRFTF9FTlZfVkFMVUU7ICAgICAvKiBWQUxVRSAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzZdLHRuX2Vudl9hY2N0KTsKLSAgICAg ICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl9hY2N0KSArIDQgKyAyOwotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bl9lbnZfcHJudFsw XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbl0gPSBURUxfRU5WX1ZBUjsgLyog VkFSICovCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rMV0sIlBSSU5U RVIiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W24rOF0gPSBURUxfRU5WX1ZBTFVF OyAgICAgLyogVkFMVUUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlb bis5XSx0bl9lbnZfcHJudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbih0 bl9lbnZfcHJudCkgKyA3ICsgMjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICBpZiAodG5fZW52X3N5c1swXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVw bHlbbl0gPSBURUxfRU5WX1ZBUjsgLyogVkFSICovCi0gICAgICAgICAgICAgICAgICAgICAgICBz dHJjcHkoJnJlcGx5W24rMV0sIlNZU1RFTVRZUEUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IHJlcGx5W24rMTFdID0gVEVMX0VOVl9WQUxVRTsgLyogVkFMVUUgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxMl0sdG5fZW52X3N5cyk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBuICs9IHN0cmxlbih0bl9lbnZfc3lzKSArIDEwICsgMjsKLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcCkgewotICAgICAgICAgICAg ICAgICAgICAgICAgcmVwbHlbbl0gPSBURUxfRU5WX1ZBUjsgLyogVkFSICovCi0gICAgICAgICAg ICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rMV0sIkRJU1BMQVkiKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHJlcGx5W24rOF0gPSBURUxfRU5WX1ZBTFVFOyAgICAgLyogVkFMVUUgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbis5XSxkaXNwKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKGRpc3ApICsgNyArIDI7Ci0gICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAodmFybmFtZSwi VVNFUiIpICYmIHV1WzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VO Vl9WQVI7ICAgICAvKiBWQVIgKi8KLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtu KzFdLCJVU0VSIik7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5W24rNV0gPSBURUxfRU5WX1ZB TFVFOyAvKiBWQUxVRSAqLwotICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rNl0s dXUpOwotICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbih1dSkgKyA0ICsgMjsKLSAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAodmFybmFtZSwiSk9CIikgJiYgdG5fZW52X2pv YlswXSkgewotICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9IFRFTF9FTlZfVkFSOyAgICAg LyogVkFSICovCi0gICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSwiSk9CIik7 Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5W24rNF0gPSBURUxfRU5WX1ZBTFVFOyAvKiBWQUxV RSAqLwotICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rNV0sdG5fZW52X2pvYik7 Ci0gICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl9qb2IpICsgMyArIDI7Ci0g ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHZhcm5hbWUsIkFDQ1QiKSAmJiB0bl9l bnZfYWNjdFswXSkgewotICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9IFRFTF9FTlZfVkFS OyAgICAgLyogVkFSICovCi0gICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSwi QUNDVCIpOwotICAgICAgICAgICAgICAgICAgICByZXBseVtuKzVdID0gVEVMX0VOVl9WQUxVRTsg LyogVkFMVUUgKi8KLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzZdLHRuX2Vu dl9hY2N0KTsKLSAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X2FjY3QpICsg NCArIDI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHZhcm5hbWUsIlBSSU5U RVIiKSAmJiB0bl9lbnZfcHJudFswXSkgewotICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9 IFRFTF9FTlZfVkFSOyAgICAgLyogVkFSICovCi0gICAgICAgICAgICAgICAgICAgIHN0cmNweSgm cmVwbHlbbisxXSwiUFJJTlRFUiIpOwotICAgICAgICAgICAgICAgICAgICByZXBseVtuKzhdID0g VEVMX0VOVl9WQUxVRTsgLyogVkFMVUUgKi8KLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZy ZXBseVtuKzldLHRuX2Vudl9wcm50KTsKLSAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4o dG5fZW52X3BybnQpICsgNyArIDI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21w KHZhcm5hbWUsIlNZU1RFTVRZUEUiKSAmJiB0bl9lbnZfc3lzWzBdKSB7Ci0gICAgICAgICAgICAg ICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9WQVI7ICAgICAvKiBWQVIgKi8KLSAgICAgICAgICAg ICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFdLCJTWVNURU1UWVBFIik7Ci0gICAgICAgICAgICAg ICAgICAgIHJlcGx5W24rMTFdID0gVEVMX0VOVl9WQUxVRTsgICAgICAgIC8qIFZBTFVFICovCi0g ICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxMl0sdG5fZW52X3N5cyk7Ci0gICAg ICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl9zeXMpICsgMTAgKyAyOwotICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh2YXJuYW1lLCJESVNQTEFZIikgJiYgZGlzcCkg ewotICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9IFRFTF9FTlZfVkFSOyAgICAgLyogVkFS ICovCi0gICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSwiRElTUExBWSIpOwot ICAgICAgICAgICAgICAgICAgICByZXBseVtuKzhdID0gVEVMX0VOVl9WQUxVRTsgLyogVkFMVUUg Ki8KLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzldLGRpc3ApOwotICAgICAg ICAgICAgICAgICAgICBuICs9IHN0cmxlbihkaXNwKSArIDcgKyAyOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGdldCBJQUMgb25seSwgdGhlbiB0aGF0IG1l YW5zIHNlbmQgYWxsICovCi0gICAgICAgICAgICAgICAgICAvKiBWQVIgYW5kIFVTRVJWQVIuICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgaWYgKCEoaiA9 PSAwICYmIHNiW2ldID09IElBQykpCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICBjYXNlIDI6ICAgICAvKiBVU0VSVkFSIGluIHByb2dyZXNzICovCi0gICAgICAgICAg ICAgICAgICB2YXJuYW1lW2pdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAgIGlmICghdmFybmFt ZVswXSkgewotICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgQWxsICovCi0gICAgICAgICAg ICAgICAgICAgICAgaW50IHgseTsKLSAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB4PTAgOyB4 PDggOyB4KysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdG5fZW52X3VzZXJ2 YXJbeF1bMF0gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9lbnZfdXNlcnZh clt4XVsxXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0gVEVM X0VOVl9VU0VSVkFSOyAgICAgLyogVkFSICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB5ID0gc3RybGVuKHRuX2Vudl91c2VydmFyW3hdWzBdKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSx0bl9lbnZfdXNlcnZhclt4XVswXSk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuK3krMV0gPSBURUxfRU5WX1ZBTFVFOyAv KiBWQUxVRSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtu K3krMl0sdG5fZW52X3VzZXJ2YXJbeF1bMV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbiArPSB5K3N0cmxlbih0bl9lbnZfdXNlcnZhclt4XVsxXSkrMjsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgICBpZiAoIHRuX3NmdSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tcGF0 aWJpbGl0eSB3aXRoIE1pY3Jvc29mdCBUZWxuZXQgU2VydmVyICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9VU0VSVkFSOyAgICAgLyogVkFSICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSxTRlVUTE5UVkVSKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbisxMV0gPSBURUxfRU5WX1ZBTFVFOyAvKiBW QUxVRSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rMTJdLFNG VVRMTlRWRVJfVkFMVUUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbihT RlVUTE5UVkVSKStzdHJsZW4oU0ZVVExOVFZFUl9WQUxVRSkrMjsKLQotICAgICAgICAgICAgICAg ICAgICAgICAgICByZXBseVtuXSA9IFRFTF9FTlZfVVNFUlZBUjsgICAgIC8qIFZBUiAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rMV0sU0ZVVExOVE1PREUpOwot ICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuKzEyXSA9IFRFTF9FTlZfVkFMVUU7IC8q IFZBTFVFICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxM10s U0ZVVExOVE1PREVfVkFMVUUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxl bihTRlVUTE5UTU9ERSkrc3RybGVuKFNGVVRMTlRNT0RFX1ZBTFVFKSsyOwotICAgICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICBpZiAodG5fbG9jICYmIHRuX2xvY1sw XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9IFRFTF9FTlZfVVNFUlZB UjsgICAgIC8qIFZBUiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5 W24rMV0sIkxPQ0FUSU9OIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W24rOV0g PSBURUxfRU5WX1ZBTFVFOyAvKiBWQUxVRSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJjcHkoJnJlcGx5W24rMTBdLHRuX2xvYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIG4g Kz0gc3RybGVuKCJMT0NBVElPTiIpICsgc3RybGVuKHRuX2xvYykgKyAyOwotICAgICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0gIGVsc2UgaWYgKHRuX3NmdSAmJiAhc3Ry Y21wKHZhcm5hbWUsU0ZVVExOVFZFUikpIHsKLSAgICAgICAgICAgICAgICAgICAgICByZXBseVtu XSA9IFRFTF9FTlZfVVNFUlZBUjsgICAgIC8qIFZBUiAqLwotICAgICAgICAgICAgICAgICAgICAg IHN0cmNweSgmcmVwbHlbbisxXSxTRlVUTE5UVkVSKTsKLSAgICAgICAgICAgICAgICAgICAgICBy ZXBseVtuKzExXSA9IFRFTF9FTlZfVkFMVUU7IC8qIFZBTFVFICovCi0gICAgICAgICAgICAgICAg ICAgICAgc3RyY3B5KCZyZXBseVtuKzEyXSxTRlVUTE5UVkVSX1ZBTFVFKTsKLSAgICAgICAgICAg ICAgICAgICAgICBuICs9IHN0cmxlbihTRlVUTE5UVkVSKSArIHN0cmxlbihTRlVUTE5UVkVSX1ZB TFVFKSArIDI7Ci0gICAgICAgICAgICAgICAgICB9ICBlbHNlIGlmICh0bl9zZnUgJiYgIXN0cmNt cCh2YXJuYW1lLFNGVVRMTlRNT0RFKSkgewotICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W25d ID0gVEVMX0VOVl9VU0VSVkFSOyAgICAgLyogVkFSICovCi0gICAgICAgICAgICAgICAgICAgICAg c3RyY3B5KCZyZXBseVtuKzFdLFNGVVRMTlRNT0RFKTsKLSAgICAgICAgICAgICAgICAgICAgICBy ZXBseVtuKzEyXSA9IFRFTF9FTlZfVkFMVUU7IC8qIFZBTFVFICovCi0gICAgICAgICAgICAgICAg ICAgICAgc3RyY3B5KCZyZXBseVtuKzEzXSxTRlVUTE5UTU9ERV9WQUxVRSk7Ci0gICAgICAgICAg ICAgICAgICAgICAgbiArPSBzdHJsZW4oU0ZVVExOVE1PREUpICsgc3RybGVuKFNGVVRMTlRNT0RF X1ZBTFVFKSArIDI7Ci0gICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgQ0tfU05ETE9DCi0gICAg ICAgICAgICAgICAgICBlbHNlIGlmICh0bl9sb2MgJiYgdG5fbG9jWzBdICYmICFzdHJjbXAodmFy bmFtZSwiTE9DQVRJT04iKSl7Ci0gICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbl0gPSBURUxf RU5WX1VTRVJWQVI7ICAgICAvKiBWQVIgKi8KLSAgICAgICAgICAgICAgICAgICAgICBzdHJjcHko JnJlcGx5W24rMV0sIkxPQ0FUSU9OIik7Ci0gICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbis5 XSA9IFRFTF9FTlZfVkFMVUU7IC8qIFZBTFVFICovCi0gICAgICAgICAgICAgICAgICAgICAgc3Ry Y3B5KCZyZXBseVtuKzEwXSx0bl9sb2MpOwotICAgICAgICAgICAgICAgICAgICAgIG4gKz0gc3Ry bGVuKCJMT0NBVElPTiIpICsgc3RybGVuKHRuX2xvYykgKyAyOwotICAgICAgICAgICAgICAgICAg fQotI2VuZGlmIC8qIENLX1NORExPQyAqLwotICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgaW50IHgseTsKLSAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB4 PTAgOyB4PDggOyB4KysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdG5fZW52 X3VzZXJ2YXJbeF1bMF0gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9lbnZf dXNlcnZhclt4XVsxXSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzdHJjbXAo dmFybmFtZSx0bl9lbnZfdXNlcnZhclt4XVswXSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9VU0VSVkFSOyAgICAgLyogVkFSICovCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB5ID0gc3RybGVuKHRuX2Vudl91c2VydmFyW3hdWzBdKTsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSx0bl9lbnZf dXNlcnZhclt4XVswXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuK3kr MV0gPSBURUxfRU5WX1ZBTFVFOyAvKiBWQUxVRSAqLwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RyY3B5KCZyZXBseVtuK3krMl0sdG5fZW52X3VzZXJ2YXJbeF1bMV0pOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbiArPSB5K3N0cmxlbih0bl9lbnZfdXNlcnZhclt4XVsx XSkrMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIHZhcm5hbWVbMF0gPSAnXDAnOwotICAgICAgICAgICAgaiA9IDA7 Ci0gICAgICAgICAgICB0eXBlID0gKHNiW2ldID09IFRFTF9FTlZfVVNFUlZBUiA/IDIgOiAgICAg IC8qIFVTRVJWQVIgKi8KLSAgICAgICAgICAgICAgICAgICAgc2JbaV0gPT0gVEVMX0VOVl9WQVIg PyAxIDogIC8qIFZBUiAqLwotICAgICAgICAgICAgICAgICAgICAwCi0gICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVEVMX0VOVl9WQUxVRTog LyogVkFMVUUgKi8KLSAgICAgICAgICAgIC8qIFByb3RvY29sIEVycm9yICovCi0gICAgICAgICAg ICBkZWJ1ZyhGMTAwLCAiVEVMTkVUIFN1Ym5lZ290aWF0aW9uIGVycm9yIC0gVkFMVUUgaW4gU0VO RCIsICIiLDApOwotICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAg ICAgIHRuX2RlYnVnKCJURUxORVQgU3VibmVnb3RpYXRpb24gZXJyb3IgLSBWQUxVRSBpbiBTRU5E Iik7Ci0gICAgICAgICAgICByZXR1cm4oMCk7ICAvKiBXYXMgLTEgYnV0IHRoYXQgd291bGQgYmUg dGFrZW4gYXMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuIEkvTyBlcnJvciwgc28g YWJzb3JiIGl0IGFuZCBnbyBvbi4gKi8KLSAgICAgICAgICBjYXNlIFRFTF9FTlZfRVNDOiAgICAg LyogRVNDICovCi0gICAgICAgICAgICAvKiBOb3Qgc3VyZSB3aGF0IHRoaXMgZm9yLiAgUXVvdGUg bmV4dCBjaGFyYWN0ZXI/ICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0 OgotICAgICAgICAgICAgdmFybmFtZVtqKytdID0gc2JbaV07Ci0gICAgICAgIH0KLSAgICB9Ci0g ICAgaWYgKHRuX3NzYm9wdChURUxPUFRfTkVXRU5WSVJPTixURUxRVUFMX0lTLHJlcGx5LG4pIDwg MCkgewotICAgICAgICBmcmVlKHJlcGx5KTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0g ICAgZnJlZShyZXBseSk7Ci0gICAgcmV0dXJuKDEpOwotfQotI2VuZGlmIC8qIENLX0VOVklST05N RU5UICovCi0KLS8qIFRlbG5ldCBzZW5kIHRlcm1pbmFsIHR5cGUgKi8KLS8qIFJldHVybnMgLTEg b24gZXJyb3IsIDAgaWYgbm90aGluZyBoYXBwZW5zLCAxIGlmIHR5cGUgc2VudCBzdWNjZXNzZnVs bHkgKi8KLQotaW50Ci10bl9zdHR5cCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog U2VuZCB0ZWxuZXQgdGVybWluYWwgdHlwZS4gKi8KLSAgICBjaGFyICp0dG47ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBOYW1lIG9mIHRlcm1pbmFsIHR5cGUuICovCi0jaWZkZWYgT1MyCi0g ICAgc3RhdGljIGludCBhbGlhcyA9IC0xOyAgICAgICAgICAgICAgLyogd2hpY2ggYWxpYXMgYXJl IHdlIHVzaW5nID8gKi8KLSAgICBpbnQgc2V0dHlwZSA9IDA7Ci0jZW5kaWYgLyogT1MyICovCi0g ICAgaW50IGksIHJjOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VyLiAqLwotICAg IGludCB0bnRlcm1mbGcgPSAwOwotCi0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4o MCk7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotCi0gICAgaWYg KCFURUxPUFRfTUUoVEVMT1BUX1RUWVBFKSkgcmV0dXJuKDApOwotCi0jaWZkZWYgQ0tfU1NMCi0g ICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykg ewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgIHR0 biA9IE5VTEw7Ci0KLSNpZm5kZWYgTk9URVJNCi0jaWZkZWYgT1MyCi0gICAgaWYgKCF0bl90ZXJt KSB7Ci0gICAgICAgIGlmICh0dG51bSA9PSAtMSkgewotICAgICAgICAgICAgdHRudW0gPSB0dF90 eXBlOwotICAgICAgICAgICAgc2V0dHlwZSA9IDA7Ci0gICAgICAgICAgICBhbGlhcyA9IC0xOwot ICAgICAgICB9IGVsc2UgaWYgKHR0bnVtZW5kKSB7Ci0gICAgICAgICAgICB0dG51bWVuZCA9IDA7 Ci0gICAgICAgICAgICBzZXR0eXBlID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg IGlmICh0dF9pbmZvW3R0X3R5cGVdLnhfYWxpYXNlc1srK2FsaWFzXSA9PSBOVUxMKSAgewotICAg ICAgICAgICAgICAgIGlmICgtLXR0X3R5cGUgPCAwKQotICAgICAgICAgICAgICAgICAgdHRfdHlw ZSA9IG1heF90dDsKLSAgICAgICAgICAgICAgICBpZiAodHRudW0gPT0gdHRfdHlwZSkKLSAgICAg ICAgICAgICAgICAgIHR0bnVtZW5kID0gMTsKLSAgICAgICAgICAgICAgICBzZXR0eXBlID0gMTsK LSAgICAgICAgICAgICAgICBhbGlhcyA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g ICAgICAgIGlmICh0dF90eXBlID49IDAgJiYgdHRfdHlwZSA8PSBtYXhfdHQpIHsKLSAgICAgICAg ICAgIGlmIChhbGlhcyA9PSAtMSkKLSAgICAgICAgICAgICAgdHRuID0gdHRfaW5mb1t0dF90eXBl XS54X25hbWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHR0biA9IHR0X2luZm9b dHRfdHlwZV0ueF9hbGlhc2VzW2FsaWFzXTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgdHRu ID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBzZXR0eXBlID0gMDsKLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBOT1RFUk0gKi8KLQotICAgIGlmICh0bl90ZXJtKSB7ICAgICAgICAgICAgICAg ICAgICAgIC8qIFRlcm1pbmFsIHR5cGUgb3ZlcnJpZGU/ICovCi0gICAgICAgIGRlYnVnKEYxMTAs InRuX3N0dHlwIix0bl90ZXJtLDApOwotICAgICAgICBpZiAoKnRuX3Rlcm0pIHsKLSAgICAgICAg ICAgIHR0biA9IHRuX3Rlcm07Ci0gICAgICAgICAgICB0bnRlcm1mbGcgPSAxOwotICAgICAgICB9 Ci0gICAgfSBlbHNlIGRlYnVnKEYxMDAsInRuX3N0dHlwIG5vIHRlcm0gb3ZlcnJpZGUiLCIiLDAp OwotCi0jaWZuZGVmIGRhdGFnZW5lcmFsCi0gICAgaWYgKCF0dG4pIHsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSWYgbm8gb3ZlcnJpZGUsICovCi0gICAgICAgIHR0biA9IGdldGVudigiVEVS TSIpOyAgICAgICAgICAgLyogZ2V0IGl0IGZyb20gdGhlIGVudmlyb25tZW50LiAqLwotICAgIH0K LSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotICAgIGlmICgodHRuID09ICgoY2hhciAqKTApKSB8 fCAoKGludClzdHJsZW4odHRuKSA+PSBUU0JVRlNJWikpCi0gICAgICB0dG4gPSAiVU5LTk9XTiI7 Ci0gICAgc2Jfb3V0WzBdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBD b21tYW5kICovCi0gICAgc2Jfb3V0WzFdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8q IFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0WzJdID0gVEVMT1BUX1RUWVBFOyAgICAgICAg ICAgICAgIC8qIFRlcm1pbmFsIFR5cGUgKi8KLSAgICBzYl9vdXRbM10gPSAoQ0hBUikgMDsgICAg ICAgICAgICAgICAgICAgLyogSXMuLi4gKi8KLSAgICBmb3IgKGkgPSA0OyAqdHRuOyB0dG4rKyxp KyspIHsgICAgICAvKiBDb3B5IGFuZCB1cHBlcmNhc2UgaXQgKi8KLSNpZmRlZiBWTVMKLSAgICAg ICAgaWYgKCF0bnRlcm1mbGcgJiYgKnR0biA9PSAnLScgJiYKLSAgICAgICAgICAgICghc3RyY21w KHR0biwiLTgwIikgfHwgIXN0cmNtcCh0dG4sIi0xMzIiKSkpCi0gICAgICAgICAgYnJlYWs7Ci0g ICAgICAgIGVsc2UKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgICBzYl9vdXRbaV0gPSAoY2hh cikgKCghdG50ZXJtZmxnICYmIGlzbG93ZXIoKnR0bikpID8KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRvdXBwZXIoKnR0bikgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KnR0bik7Ci0gICAgfQotICAgIHR0biA9IChjaGFyICopc2Jfb3V0OyAgICAgICAgICAgICAgICAg ICAvKiBQb2ludCBiYWNrIHRvIGJlZ2lubmluZyAqLwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRl YmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIHNiX291dFtpXSA9ICdcMCc7ICAg ICAgICAgICAgICAgICAgIC8qIEZvciBkZWJ1Z2dpbmcgKi8KLSAgICAgICAgY2ttYWt4bXNnKHRu X21zZ19vdXQsVE5fTVNHX0xFTiwiVEVMTkVUIFNFTlQgU0IgIiwKLSAgICAgICAgICAgICAgICAg VEVMT1BUKFRFTE9QVF9UVFlQRSksIiBJUyAiLChjaGFyICopc2Jfb3V0KzQsIiBJQUMgU0UiLAot ICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAg ICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAg ICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10g PSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KLSNpZmRl ZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNl bmRpZgotI2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwotICAg IGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBE RUJVRyAqLwotICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAgLyog U2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRp ZgotICAgIGlmIChyYykKLSAgICAgICAgcmV0dXJuKC0xKTsKLSNpZm5kZWYgTk9URVJNCi0jaWZk ZWYgT1MyCi0gICAgaWYgKHNldHR5cGUpCi0gICAgICAgIHNldHRlcm10eXBlKHR0X3R5cGUsMCk7 Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlwYWRsMjUoKTsKLSAgICAgICAgVnNjcm5Jc0RpcnR5KFZU RVJNKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9URVJNICovCi0gICAg cmV0dXJuKDEpOwotfQotCi0jaWZkZWYgQ0tfRU5WSVJPTk1FTlQKLSNpZmRlZiBDS19YRElTUExP QwotCi0vKiBUZWxuZXQgc2VuZCB4ZGlzcGxheSBsb2NhdGlvbiAqLwotLyogUmV0dXJucyAtMSBv biBlcnJvciwgMCBpZiBub3RoaW5nIGhhcHBlbnMsIDEgaWYgdHlwZSBzZW50IHN1Y2Nlc3NmdWxs eSAqLwotCi1pbnQKLXRuX3N4ZGlzcGxvYygpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBT ZW5kIHRlbG5ldCBYIGRpc3BsYXkgbG9jYXRpb24uICovCi0gICAgY2hhciAqIGRpc3A9TlVMTDsK LSAgICBpbnQgaSxyYzsKLQotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOwot ICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKLQotICAgIGlmICghVEVM T1BUX01FKFRFTE9QVF9YRElTUExPQykpIHJldHVybigwKTsKLQotI2lmZGVmIENLX1NTTAotICAg IGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsK LSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lmZGVm IENLX0ZPUldBUkRfWAotICAgIGlmIChURUxPUFRfVShURUxPUFRfRk9SV0FSRF9YKSkgewotICAg ICAgICBkaXNwID0gTlVMTDsKLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8K LSAgICAgICAgZGlzcCA9IChjaGFyICopdG5fZ2V0X2Rpc3BsYXkoKTsKLSAgICBkZWJ1ZyhGMTEw LCJ0bl9zeGRpc3Bsb2MiLGRpc3AsMCk7Ci0KLSAgICBpZiAoIWRpc3ApIHsKLSAgICAgICAgLyog Q2FuJ3QgZG8gYm90aCwgc2VuZCBXT05UICovCi0gICAgICAgIGlmICh0bl9zb3B0KFdPTlQsVEVM T1BUX1hESVNQTE9DKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBURUxP UFRfVU5BTlNXRVJFRF9XT05UKFRFTE9QVF9YRElTUExPQykgPSAxOwotICAgICAgICByZXR1cm4o MCk7Ci0gICAgfQotCi0gICAgc2Jfb3V0WzBdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAg IC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAgc2Jfb3V0WzFdID0gKENIQVIpIFNCOyAgICAgICAg ICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0WzJdID0gVEVMT1BUX1hE SVNQTE9DOyAgICAgICAgICAgIC8qIFgtRGlzcGxheSBMb2NhdGlvbiAqLwotICAgIHNiX291dFsz XSA9IChDSEFSKSAwOyAgICAgICAgICAgICAgICAgICAvKiBJcy4uLiAqLwotICAgIGZvciAoaSA9 IDQ7ICpkaXNwOyBkaXNwKyssaSsrKSB7ICAgICAgLyogQ29weSBhbmQgdXBwZXJjYXNlIGl0ICov Ci0gICAgICAgIHNiX291dFtpXSA9IChjaGFyKSAqZGlzcDsKLSAgICB9Ci0jaWZkZWYgREVCVUcK LSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgc2Jfb3V0W2ld ID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgLyogRm9yIGRlYnVnZ2luZyAqLwotICAgICAgICBj a21ha3htc2coIHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJURUxO RVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfWERJU1BMT0MpLAotICAgICAgICAgICAgICAgICAg IiBJUyAiLChjaGFyICopc2Jfb3V0KzQsIiBJQUMgU0UiLAotICAgICAgICAgICAgICAgICAgTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVH ICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgIC8qIEVuZCBv ZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAg ICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRl bG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwot ICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5fZGViIHx8IGRlYnNl cykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0 dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBP UzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlmIChyYykKLSAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYgLyogQ0tfWERJU1BMT0Mg Ki8KLSNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotCi0jaWZkZWYgQ0tfRk9SV0FSRF9YCi1p bnQKLXRuX3NuZGZ3ZHgoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIEZ3ZCBY IFNjcmVlbiBudW1iZXIgdG8gaG9zdCAqLwotICAgIHVuc2lnbmVkIGNoYXIgc2NyZWVuID0gMDsK LSAgICBjaGFyICogZGlzcDsKLSAgICBpbnQgaSxyYzsKLQotICAgIC8qIGlmICghSVNfVEVMTkVU KCkpIHJldHVybigwKTsgKi8KLQotICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX0ZPUldBUkRfWCkp IHJldHVybigwKTsKLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFS VF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9 Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICAvKgotICAgICAqIFRoZSBmb3JtYXQgb2YgdGhl IERJU1BMQVkgdmFyaWFibGUgaXMgWzxob3N0PjpdPGRpc3BsYXk+Wy48c2NyZWVuPl0KLSAgICAg KiB3aGVyZSA8aG9zdD4gaXMgYW4gb3B0aW9uYWwgRE5TIG5hbWUgb3IgaXAgYWRkcmVzcyB3aXRo IGEgZGVmYXVsdCBvZgotICAgICAqIHRoZSBsb2NhbGhvc3Q7IHRoZSBzY3JlZW4gZGVmYXVsdHMg dG8gMAotICAgICAqLwotCi0gICAgZGlzcCA9IChjaGFyICopdG5fZ2V0X2Rpc3BsYXkoKTsKLSAg ICBpZiAoZGlzcCkgewotICAgICAgICBpbnQgY29sb24sZG90OwotICAgICAgICBjb2xvbiA9IGNr aW5kZXgoIjoiLGRpc3AsMCwwLDEpOwotICAgICAgICBkb3QgICA9IGNraW5kZXgoIi4iLCZkaXNw W2NvbG9uXSwwLDAsMSk7Ci0KLSAgICAgICAgaWYgKCBkb3QgKSB7Ci0gICAgICAgICAgICBzY3Jl ZW4gPSBhdG9pKCZkaXNwW2NvbG9uK2RvdF0pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg ICAgICAgc2NyZWVuID0gMDsKLSAgICB9Ci0KLSAgICBpID0gMDsKLSAgICBzYl9vdXRbaSsrXSA9 IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLwotICAgIHNi X291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9u ICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxPUFRfRk9SV0FSRF9YOyAgICAgICAgICAgLyogRm9y d2FyZCBYICovCi0gICAgc2Jfb3V0W2krK10gPSBGV0RYX1NDUkVFTjsgICAgICAgICAgICAgICAg LyogU2NyZWVuICovCi0gICAgc2Jfb3V0W2krK10gPSBzY3JlZW47Ci0gICAgaWYgKCBzY3JlZW4g PT0gSUFDICkKLSAgICAgICAgc2Jfb3V0W2krK10gPSBJQUM7Ci0gICAgc2Jfb3V0W2krK10gPSAo Q0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCi0g ICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5 IElBQyBTRSAqLwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVi c2VzKSB7Ci0gICAgICAgIGNrbWFreG1zZyggdG5fbXNnX291dCxUTl9NU0dfTEVOLAotICAgICAg ICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfRk9SV0FSRF9YKSwK LSAgICAgICAgICAgICAgICAgICAiIFNDUkVFTiAiLGNrY3RveChzY3JlZW4sMSksIiBJQUMgU0Ui LAotICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwp OwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxu ZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAg ICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp IHRuX2RlYnVnKHRuX21zZ19vdXQpOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgcmMgPSAodHRv bCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1My Ci0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICBpZiAocmMpCi0gICAgICAg IHJldHVybigtMSk7Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAq LwotCi0jaWZkZWYgQ0tfU05ETE9DCi1pbnQKLXRuX3NuZGxvYygpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTZW5kIGxvY2F0aW9uLiAqLwotICAgIGludCBpLHJjOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlci4gKi8KLSAgICBjaGFyICp0dGxvYzsKLQotICAg IC8qIGlmICghSVNfVEVMTkVUKCkpIHJldHVybigwKTsgKi8KLQotICAgIGlmICghVEVMT1BUX01F KFRFTE9QVF9TTkRMT0MpKSByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVM T1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0gICAgICAg IHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgdHRsb2MgPSAodG5f bG9jID8gdG5fbG9jIDogIiIpOyAgICAgLyogSW4gY2FzZSB3ZSBhcmUgYmVpbmcgY2FsbGVkIGV2 ZW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aG91Z2gg dGhlcmUgaXMgbm8gbG9jYXRpb24uICovCi0gICAgc2Jfb3V0WzBdID0gKENIQVIpIElBQzsgICAg ICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAgc2Jfb3V0WzFdID0gKENIQVIp IFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0WzJd ID0gVEVMT1BUX1NORExPQzsgICAgICAgICAgICAgIC8qIExvY2F0aW9uICovCi0gICAgZm9yIChp ID0gMzsgKnR0bG9jICYmIGkgPCBUU0JVRlNJWjsgdHRsb2MrKyxpKyspIC8qIENvcHkgaXQgKi8K LSAgICAgIHNiX291dFtpXSA9IChjaGFyKSAqdHRsb2M7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgSUFDOyAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNi X291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNF ICovCi0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykg ewotICAgICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAg ICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9TTkRMT0MpLCIgIiwoY2hhciAq KXNiX291dCszLAotICAgICAgICAgICAgICAgICAgIiBJQUMgU0UiLCBOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBP UzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRp ZgotI2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwotICAgIGlm ICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJV RyAqLwotICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5k IGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0g ICAgaWYgKHJjKQotICAgICAgICByZXR1cm4oLTEpOwotICAgIHNiX291dFtpLTJdID0gJ1wwJzsg ICAgICAgICAgICAgICAgICAgICAvKiBGb3IgZGVidWdnaW5nICovCi0gICAgcmV0dXJuKDApOwot fQotI2VuZGlmIC8qIENLX1NORExPQyAqLwotCi0jaWZkZWYgQ0tfTkFXUyAgICAgICAgICAgICAg ICAgIC8qICBOQVdTID0gTmVnb3RpYXRlIEFib3V0IFdpbmRvdyBTaXplICAqLwotaW50Ci10bl9z bmF3cygpIHsgICAgICAgICAgICAgICAgICAgIC8qICBTZW5kIHRlcm1pbmFsIHdpZHRoIGFuZCBo ZWlnaHQsIFJGQyAxMDczICovCi0jaWZuZGVmIE5PTE9DQUwKLSAgICBDSEFSIHNiX291dFsyNF07 ICAgICAgICAgICAgLyogIG11bHRpcGxlIHRocmVhZHMgKi8KLSAgICBpbnQgaSA9IDAscmM7Ci0j aWZkZWYgT1MyCi0gICAgaW50IHggPSBWc2NybkdldFdpZHRoKFZURVJNKSwKLSAgICB5ID0gVnNj cm5HZXRIZWlnaHQoVlRFUk0pIC0gKHR0X3N0YXR1c1tWVEVSTV0gPyAxIDogMCk7Ci0jZWxzZSAv KiBPUzIgKi8KLSAgICBpbnQgeCA9IHR0X2NvbHMsIHkgPSB0dF9yb3dzOwotI2VuZGlmIC8qIE9T MiAqLwotCi0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7Ci0gICAgaWYgKHR0 bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotICAgIGlmICghVEVMT1BUX01FKFRFTE9Q VF9OQVdTKSkgcmV0dXJuKDApOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihU RUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgewotICAgICAgICByZXR1cm4o MCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgIGlmICh4IDwgMCkgeCA9IDA7Ci0g ICAgaWYgKHkgPCAwKSB5ID0gMDsKLQotICAgIGlmICh4ID09IFRFTE9QVF9TQihURUxPUFRfTkFX UykubmF3cy54ICYmIC8qIE9ubHkgc2VuZCBpZiBjaGFuZ2VkICovCi0gICAgICAgIHkgPT0gVEVM T1BUX1NCKFRFTE9QVF9OQVdTKS5uYXdzLnkKLSAgICAgICAgKQotICAgICAgcmV0dXJuKDApOwot ICAgIFRFTE9QVF9TQihURUxPUFRfTkFXUykubmF3cy54ID0geDsgIC8qIFJlbWVtYmVyIHRoZSBz aXplICAgICAqLwotICAgIFRFTE9QVF9TQihURUxPUFRfTkFXUykubmF3cy55ID0geTsKLQotICAg IHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAvKiBTZW5kIHRoZSBzdWJu ZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOwotICAgIHNiX291dFtp KytdID0gVEVMT1BUX05BV1M7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgKHggPj4gOCkgJiAw eGZmOwotICAgIGlmICgoQ0hBUikgc2Jfb3V0W2ktMV0gPT0gKENIQVIpIElBQykgICAvKiBJQUMg aW4gZGF0YSBtdXN0IGJlIGRvdWJsZWQgKi8KLSAgICAgIHNiX291dFtpKytdID0gKENIQVIpIElB QzsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSAoeCAmIDB4ZmYpOwotICAgIGlmICgoQ0hBUikg c2Jfb3V0W2ktMV0gPT0gKENIQVIpIElBQykKLSAgICAgIHNiX291dFtpKytdID0gKENIQVIpIElB QzsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSAoeSA+PiA4KSAmIDB4ZmY7Ci0gICAgaWYgKChD SEFSKSBzYl9vdXRbaS0xXSA9PSAoQ0hBUikgSUFDKQotICAgICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgSUFDOwotICAgIHNiX291dFtpKytdID0gKENIQVIpICh5ICYgMHhmZik7Ci0gICAgaWYgKChD SEFSKSBzYl9vdXRbaS0xXSA9PSAoQ0hBUikgSUFDKQotICAgICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgSUFDOwotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsKLSAgICBzYl9vdXRbaSsrXSA9 IChDSEFSKSBTRTsKLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRl YnNlcykgewotICAgICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLCJURUxORVQg U0VOVCBTQiBOQVdTICIsCi0gICAgICAgICAgICAgICAgICBja2l0b2EoeCksIiAiLGNraXRvYSh5 KSwiIElBQyBTRSIsCi0gICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0gICAg UmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNpZmRl ZiBERUJVRwotICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5fZGVi IHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAg ICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8K LSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlmIChy YykKLSAgICAgICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgcmV0dXJu ICgwKTsKLX0KLSNlbmRpZiAvKiBDS19OQVdTICovCi0KLSNpZmRlZiBUTl9DT01QT1JUCi1zdGF0 aWMgY2hhciAqIHRuY19zaWduYXR1cmUgPSBOVUxMOwotc3RhdGljIGludCB0bmNfbHNfbWFzayA9 IDA7Ci1zdGF0aWMgaW50IHRuY19scyA9IDA7Ci1zdGF0aWMgaW50IHRuY19tc19tYXNrID0gMjU1 Owotc3RhdGljIGludCB0bmNfbXMgPSAwOwotc3RhdGljIGludCB0bmNfb2Zsb3cgPSAwOwotc3Rh dGljIGludCB0bmNfaWZsb3cgPSAwOwotc3RhdGljIGludCB0bmNfYnBzID0gMDsKLXN0YXRpYyBp bnQgdG5jX2RhdGFzaXplID0gMDsKLXN0YXRpYyBpbnQgdG5jX3Bhcml0eSA9IDA7Ci1zdGF0aWMg aW50IHRuY19zdG9wYml0ID0gMDsKLXN0YXRpYyBpbnQgdG5jX2JyZWFrID0gMDsKLXN0YXRpYyBp bnQgdG5jX2R0ciA9IDA7Ci1zdGF0aWMgaW50IHRuY19ydHMgPSAwOwotc3RhdGljIGludCB0bmNf c3VzcGVuZF94bWl0ID0gMDsKLXN0YXRpYyBpbnQgdG5jX2Jwc19pbmRleCA9IC0xOwotCi1pbnQK LSNpZmRlZiBDS19BTlNJQwotdG5jX2luaXQodm9pZCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi10 bmNfaW5pdCgpCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuY19pbml0ICovIHsKLSAgICBk ZWJ1ZyhGMTAwLCJ0bmNfaW5pdCIsIiIsMCk7Ci0KLSAgICAvKiBpZiAoIUlTX1RFTE5FVCgpKSBy ZXR1cm4oMCk7ICovCi0KLSAgICBpZiAodG5jX3NpZ25hdHVyZSkgewotICAgICAgICBmcmVlKHRu Y19zaWduYXR1cmUpOwotICAgICAgICB0bmNfc2lnbmF0dXJlID0gTlVMTDsKLSAgICB9Ci0gICAg dG5jX2xzX21hc2sgPSAwOwotICAgIHRuY19scyA9IDA7Ci0gICAgdG5jX21zX21hc2sgPSAyNTU7 Ci0gICAgdG5jX21zID0gMDsKLSAgICB0bmNfb2Zsb3cgPSAwOwotICAgIHRuY19pZmxvdyA9IDA7 Ci0gICAgdG5jX2JwcyA9IDA7Ci0gICAgdG5jX2RhdGFzaXplID0gMDsKLSAgICB0bmNfcGFyaXR5 ID0gMDsKLSAgICB0bmNfc3RvcGJpdCA9IDA7Ci0gICAgdG5jX2JyZWFrID0gMDsKLSAgICB0bmNf ZHRyID0gMDsKLSAgICB0bmNfcnRzID0gMDsKLSAgICB0bmNfc3VzcGVuZF94bWl0ID0gMDsKLSAg ICB0bmNfYnBzX2luZGV4ID0gLTE7Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLSNpZmRlZiBD S19BTlNJQwotdG5fc25kY29tcG9ydCh2b2lkKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuX3Nu ZGNvbXBvcnQoKQotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bl9zbmRjb21wb3J0ICovIHsK LSAgICBpbnQgYmF1ZCwgZGF0YXNpemUsIHBhcml0eSwgc3RvcHNpemUsIG9mbG93LCBpZmxvdzsK LSAgICBDT05TVCBjaGFyICogc2lnbmF0dXJlOwotCi0gICAgLyogaWYgKCFJU19URUxORVQoKSkg cmV0dXJuKDApOyAqLwotCi0gICAgZGVidWcoRjEwMCwidG5jX3NuZGNvbXBvcnQiLCIiLDApOwot ICAgIHNpZ25hdHVyZSA9IHRuY19nZXRfc2lnbmF0dXJlKCk7Ci0gICAgYmF1ZCA9IHRuY19nZXRf YmF1ZCgpOwotICAgIGRhdGFzaXplID0gdG5jX2dldF9kYXRhc2l6ZSgpOwotICAgIHBhcml0eSA9 IHRuY19nZXRfcGFyaXR5KCk7Ci0gICAgc3RvcHNpemUgPSB0bmNfZ2V0X3N0b3BzaXplKCk7Ci0g ICAgb2Zsb3cgPSB0bmNfZ2V0X29mbG93KCk7Ci0gICAgaWZsb3cgPSB0bmNfZ2V0X2lmbG93KCk7 Ci0gICAgdG5jX3NldF9sc19tYXNrKDI1NSk7Ci0gICAgdG5jX3NldF9tc19tYXNrKDI1NSk7Ci0g ICAgcmV0dXJuKDApOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5jX3dhaXQoQ0hBUiAq IG1zZywgaW50IG1zKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuY193YWl0KG1zZywgbXMpIENI QVIgKiBtc2c7IGludCBtczsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX3dhaXQgKi8g ewotICAgIGludCByYywgdG5fd2FpdF9zYXZlID0gdG5fd2FpdF9mbGc7Ci0KLSAgICAvKiBpZiAo IUlTX1RFTE5FVCgpKSByZXR1cm4oMCk7ICovCi0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNfd2FpdCIs ImJlZ2luIixtcyk7Ci0gICAgaWYgKCBtcyApCi0gICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09N UE9SVCkuY29tcG9ydC53YWl0X2Zvcl9tcyA9IDE7Ci0gICAgZWxzZQotICAgICAgICBURUxPUFRf U0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAxOwotICAgIHRuX3dhaXRf ZmxnID0gMTsKLSAgICByYyA9IHRuX3dhaXQoKGNoYXIgKiltc2cpOwotICAgIHRuX3B1c2goKTsK LSAgICBkZWJ1ZyhGMTEwLCJ0bmNfd2FpdCIsImVuZCIsMCk7Ci0gICAgdG5fd2FpdF9mbGcgPSB0 bl93YWl0X3NhdmU7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotLyogUmV0dXJucyAtMSBvbiBlcnJv ciwgMCBvbiBzdWNjZXNzICovCi0vKiBJbiBvcmRlciBmb3IgdGhpcyBjb2RlIHRvIHdvcmssIHNi W2xlbl0gPT0gSUFDICAgICAgICAgICovCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bmNfdG5f c2IoQ0hBUiAqIHNiLCBpbnQgbGVuKQotI2Vsc2UKLXRuY190bl9zYihzYiwgbGVuKSBDSEFSICog c2I7IGludCBsZW47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuY190bl9zYiAqLyB7Ci0g ICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7Ci0gICAgaWYgKHR0bnByb3RvICE9 IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JU KSkgcmV0dXJuKDApOwotCi0gICAgaWYgKCFzYikgcmV0dXJuKC0xKTsKLQotI2lmZGVmIENLX1NT TAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxv d3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQot ICAgIGRlYnVnKEYxMTEsInRuY190bl9zYiIsInNiWzBdIixzYlswXSk7Ci0gICAgZGVidWcoRjEx MSwidG5jX3RuX3NiIiwibGVuIixsZW4pOwotCi0gICAgc3dpdGNoIChzYlswXSkgewotICAgICAg Y2FzZSBUTkNfQzJTX1NJR05BVFVSRToKLSAgICAgIGNhc2UgVE5DX1MyQ19TSUdOQVRVUkU6Ci0g ICAgICAgIGRlYnVnKEYxMTEsInRuY190bl9zYiIsInNpZ25hdHVyZSIsbGVuKTsKLSAgICAgICAg aWYgKGxlbiA9PSAxKSB7Ci0gICAgICAgICAgICB0bmNfc2VuZF9zaWduYXR1cmUoIktlcm1pdCBU ZWxuZXQgQ29tIFBvcnQgT3B0aW9uIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBU RUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOwotICAgICAg ICAgICAgaWYgKHRuY19zaWduYXR1cmUpCi0gICAgICAgICAgICAgIGZyZWUodG5jX3NpZ25hdHVy ZSk7Ci0gICAgICAgICAgICB0bmNfc2lnbmF0dXJlID0gbWFsbG9jKGxlbik7Ci0gICAgICAgICAg ICBpZiAodG5jX3NpZ25hdHVyZSkgewotICAgICAgICAgICAgICAgIG1lbWNweSh0bmNfc2lnbmF0 dXJlLCZzYlsxXSxsZW4tMSk7Ci0gICAgICAgICAgICAgICAgdG5jX3NpZ25hdHVyZVtsZW4tMV0g PSAnXDAnOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg ICBjYXNlIFROQ19DMlNfU0VUX0JBVURSQVRFOgotICAgICAgY2FzZSBUTkNfUzJDX1NFVF9CQVVE UkFURTogewotICAgICAgICAgIGxvbmcgYmF1ZHJhdGU7Ci0gICAgICAgICAgY2hhciAqIGJyID0g KGNoYXIgKikmYmF1ZHJhdGU7Ci0gICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5j b21wb3J0LndhaXRfZm9yX3NiID0gMDsKLSAgICAgICAgICBpZiAobGVuID09IDIpIHsKLSAgICAg ICAgICAgIC8qIEFjdHVhbCBiZWhhdmlvciBvZiB0aGUgQWNjZXNzIFNlcnZlci4uLiAqLwotICAg ICAgICAgICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwiYmF1ZHJhdGUgaW5kZXgiLHNiWzFdKTsK LSAgICAgICAgICAgIHRuY19icHNfaW5kZXggPSAxOwotICAgICAgICAgICAgc3dpdGNoIChzYlsx XSkgewotICAgICAgICAgICAgY2FzZSBUTkNfQlBTXzMwMDoKLSAgICAgICAgICAgICAgdG5jX2Jw cyA9IDMwMDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFROQ19CUFNf NjAwOgotICAgICAgICAgICAgICB0bmNfYnBzID0gNjAwOwotICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgIGNhc2UgVE5DX0JQU18xMjAwOgotICAgICAgICAgICAgICB0bmNfYnBzID0g MTIwMDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFROQ19CUFNfMjQw MDoKLSAgICAgICAgICAgICAgdG5jX2JwcyA9IDI0MDA7Ci0gICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgY2FzZSBUTkNfQlBTXzQ4MDA6Ci0gICAgICAgICAgICAgIHRuY19icHMgPSA0 ODAwOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVE5DX0JQU185NjAw OgotICAgICAgICAgICAgICB0bmNfYnBzID0gOTYwMDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICBjYXNlIFROQ19CUFNfMTQ0MDA6Ci0gICAgICAgICAgICAgIHRuY19icHMgPSAx NDQwMDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFROQ19CUFNfMTky MDA6Ci0gICAgICAgICAgICAgIHRuY19icHMgPSAxOTIwMDsKLSAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICBjYXNlIFROQ19CUFNfMjg4MDA6Ci0gICAgICAgICAgICAgIHRuY19icHMg PSAyODgwMDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFROQ19CUFNf Mzg0MDA6Ci0gICAgICAgICAgICAgIHRuY19icHMgPSAzODQwMDsKLSAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICBjYXNlIFROQ19CUFNfNTc2MDA6Ci0gICAgICAgICAgICAgIHRuY19i cHMgPSA1NzYwMDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFROQ19C UFNfMTE1MjAwOgotICAgICAgICAgICAgICB0bmNfYnBzID0gMTE1MjAwOwotICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVE5DX0JQU18yMzA0MDA6Ci0gICAgICAgICAgICAg IHRuY19icHMgPSAyMzA0MDA7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz ZSBUTkNfQlBTXzQ2MDgwMDoKLSAgICAgICAgICAgICAgdG5jX2JwcyA9IDQ2MDgwMDsKLSAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICB0bmNf YnBzID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIGlmIChsZW4gPT0gNSkg ewotICAgICAgICAgICAgLyogVGhpcyBzZWN0aW9uIGF0dGVtcHRzIHRvIGZvbGxvdyBSRkMgMjIx NyAqLwotICAgICAgICAgICAgICB0bmNfYnBzX2luZGV4ID0gMDsKLSAgICAgICAgICAgICAgYnJb MF0gPSBzYlsxXTsKLSAgICAgICAgICAgICAgYnJbMV0gPSBzYlsyXTsKLSAgICAgICAgICAgICAg YnJbMl0gPSBzYlszXTsKLSAgICAgICAgICAgICAgYnJbM10gPSBzYls0XTsKLSNpZmRlZiBkYXRh Z2VuZXJhbAotICAgICAgICAgICAgICAvKiBBT1MvVlMgZG9lc24ndCBoYXZlIG50b2hsKCkgYnV0 IE1WJ3MgYXJlIGJpZy1lbmRpYW4gKi8KLSAgICAgICAgICAgICAgdG5jX2JwcyA9IGJhdWRyYXRl OwotI2Vsc2UKLSAgICAgICAgICAgICAgdG5jX2JwcyA9IG50b2hsKGJhdWRyYXRlKTsKLSNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLwotICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bmNfdG5fc2Ii LCJiYXVkcmF0ZSByZmMiLHRuY19icHMpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgIGRlYnVnKEYxMTEsInRuY190bl9zYiIsImJhdWRyYXRlIGludmFsaWQgbGVuIixsZW4pOwot ICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsK LSAgICAgIH0KLSAgICAgIGNhc2UgVE5DX0MyU19TRVRfREFUQVNJWkU6Ci0gICAgICBjYXNlIFRO Q19TMkNfU0VUX0RBVEFTSVpFOgotICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNv bXBvcnQud2FpdF9mb3Jfc2IgPSAwOwotICAgICAgICBpZiAobGVuIDwgMikKLSAgICAgICAgICBy ZXR1cm4oLTEpOwotICAgICAgICB0bmNfZGF0YXNpemUgPSBzYlsxXTsKLSAgICAgICAgZGVidWco RjExMSwidG5jX3RuX3NiIiwiZGF0YXNpemUiLHNiWzFdKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg ICAgIGNhc2UgVE5DX0MyU19TRVRfUEFSSVRZOgotICAgICAgY2FzZSBUTkNfUzJDX1NFVF9QQVJJ VFk6Ci0gICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9z YiA9IDA7Ci0gICAgICAgIGlmIChsZW4gPCAyKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAg ICAgIHRuY19wYXJpdHkgPSBzYlsxXTsKLSAgICAgICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwi cGFyaXR5IixzYlsxXSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFROQ19DMlNfU0VU X1NUT1BTSVpFOgotICAgICAgY2FzZSBUTkNfUzJDX1NFVF9TVE9QU0laRToKLSAgICAgICAgVEVM T1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9yX3NiID0gMDsKLSAgICAgICAg aWYgKGxlbiA8IDIpCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgdG5jX3N0b3BiaXQg PSBzYlsxXTsKLSAgICAgICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwic3RvcHNpemUiLHNiWzFd KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgVE5DX0MyU19TRVRfQ09OVFJPTDoKLSAg ICAgIGNhc2UgVE5DX1MyQ19TRVRfQ09OVFJPTDoKLSAgICAgICAgaWYgKGxlbiA8IDIpIHsKLSAg ICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9 IDA7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0KLSNpZmRlZiBDT01NRU5U Ci0gICAgICAgIC8qIFRoaXMgbGluZSBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHRlc3RpbmcgaXMg Y29tcGxldGUuICovCi0gICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53 YWl0X2Zvcl9zYiA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgICAgIHN3aXRjaCAo IHNiWzFdICkgewotICAgICAgICAgIGNhc2UgVE5DX0NUTF9PRkxPV19SRVFVRVNUOgotICAgICAg ICAgICAgLyogZGV0ZXJtaW5lIGxvY2FsIG91dGJvdW5kIGZsb3cgY29udHJvbCBhbmQgc2VuZCB0 byBwZWVyICovCi0JICAgIC8qIENpc2NvIElPUyByZXR1cm5zIDAgKFROQ19DVExfT0ZMT1dfUkVR VUVTVCkgd2hlbiBhdHRlbXB0aW5nICovCi0JICAgIC8qIHRvIHNldCB0aGUgaW5ib3VuZCBmbG93 IGNvbnRyb2wgaWYgaXQgaXMgbm90IHN1cHBvcnRlZCAgICAgICovCi0JICAgIC8qIHNlcGFyYXRl bHkgZnJvbSBvdXRib3VuZCBmbG93IGNvbnRyb2wuICBTbyBtdXN0IHJlc2V0ICAgICAgICovCi0J ICAgIC8qIHdhaXQgZm9yIHNiIGZsYWcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bmNfdG5fc2IiLCJvZmxvdyBy ZXF1ZXN0IiwwKTsKLSAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9y dC53YWl0X2Zvcl9zYiA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFRO Q19DVExfT0ZMT1dfTk9ORToKLSAgICAgICAgICBjYXNlIFROQ19DVExfT0ZMT1dfWE9OX1hPRkY6 Ci0gICAgICAgICAgY2FzZSBUTkNfQ1RMX09GTE9XX1JUU19DVFM6Ci0gICAgICAgICAgY2FzZSBU TkNfQ1RMX09GTE9XX0RDRDoKLSAgICAgICAgICBjYXNlIFROQ19DVExfT0ZMT1dfRFNSOgotICAg ICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9yX3NiID0g MDsKLSAgICAgICAgICAgIHRuY19vZmxvdyA9IHNiWzFdOwotICAgICAgICAgICAgZGVidWcoRjEx MSwidG5jX3RuX3NiIiwib2Zsb3ciLHNiWzFdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgIGNhc2UgVE5DX0NUTF9CUkVBS19SRVFVRVNUOgotICAgICAgICAgICAgLyogZGV0ZXJtaW5l IGxvY2FsIGJyZWFrIHN0YXRlIGFuZCBzZW5kIHRvIHBlZXIgKi8KLSAgICAgICAgICAgIGRlYnVn KEYxMTAsInRuY190bl9zYiIsImJyZWFrIHJlcXVlc3QiLDApOwotICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgY2FzZSBUTkNfQ1RMX0JSRUFLX09OOgotICAgICAgICAgICAgVEVMT1BUX1NC KFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9yX3NiID0gMDsKLSAgICAgICAgICAgIHRu Y19icmVhayA9IDE7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bmNfdG5fc2IiLCJicmVhayBv biIsMCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgVE5DX0NUTF9CUkVB S19PRkY6Ci0gICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2Fp dF9mb3Jfc2IgPSAwOwotICAgICAgICAgICAgdG5jX2JyZWFrID0gMDsKLSAgICAgICAgICAgIGRl YnVnKEYxMTAsInRuY190bl9zYiIsImJyZWFrIG9mZiIsMCk7Ci0gICAgICAgICAgICBicmVhazsK LQotICAgICAgICAgIGNhc2UgVE5DX0NUTF9EVFJfUkVRVUVTVDoKLSAgICAgICAgICAgIC8qIGRl dGVybWluZSBsb2NhbCBkdHIgc3RhdGUgYW5kIHNlbmQgdG8gcGVlciAqLwotICAgICAgICAgICAg ZGVidWcoRjExMCwidG5jX3RuX3NiIiwiZHRyIHJlcXVlc3QiLDApOwotICAgICAgICAgICAgYnJl YWs7Ci0KLSAgICAgICAgICBjYXNlIFROQ19DVExfRFRSX09OOgotICAgICAgICAgICAgVEVMT1BU X1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9yX3NiID0gMDsKLSAgICAgICAgICAg IHRuY19kdHIgPSAxOwotICAgICAgICAgICAgZGVidWcoRjExMCwidG5jX3RuX3NiIiwiZHRyIG9u IiwwKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBUTkNfQ1RMX0RUUl9P RkY6Ci0gICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9m b3Jfc2IgPSAwOwotICAgICAgICAgICAgdG5jX2R0ciA9IDA7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTEwLCJ0bmNfdG5fc2IiLCJkdHIgb2ZmIiwwKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg ICAgICAgY2FzZSBUTkNfQ1RMX1JUU19SRVFVRVNUOgotICAgICAgICAgICAgLyogZGV0ZXJtaW5l IGxvY2FsIHJ0cyBzdGF0ZSBhbmQgc2VuZCB0byBwZWVyICovCi0gICAgICAgICAgICBkZWJ1ZyhG MTEwLCJ0bmNfdG5fc2IiLCJydHMgcmVxdWVzdCIsMCk7Ci0gICAgICAgICAgICBicmVhazsKLQot ICAgICAgICAgIGNhc2UgVE5DX0NUTF9SVFNfT046Ci0gICAgICAgICAgICBURUxPUFRfU0IoVEVM T1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOwotICAgICAgICAgICAgdG5jX3J0 cyA9IDE7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bmNfdG5fc2IiLCJydHMgb24iLDApOwot ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFROQ19DVExfUlRTX09GRjoKLSAg ICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9 IDA7Ci0gICAgICAgICAgICB0bmNfcnRzID0gMDsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInRu Y190bl9zYiIsInJ0cyBvZmYiLDApOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBj YXNlIFROQ19DVExfSUZMT1dfUkVRVUVTVDoKLSAgICAgICAgICAgIC8qIGRldGVybWluZSBsb2Nh bCBpbmJvdW5kIGZsb3cgY29udHJvbCBhbmQgc2VuZCB0byBwZWVyICovCi0gICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJ0bmNfdG5fc2IiLCJpZmxvdyByZXF1ZXN0IiwwKTsKLSAgICAgICAgICAgIGJy ZWFrOwotCi0gICAgICAgICAgY2FzZSBUTkNfQ1RMX0lGTE9XX05PTkU6Ci0gICAgICAgICAgY2Fz ZSBUTkNfQ1RMX0lGTE9XX1hPTl9YT0ZGOgotICAgICAgICAgIGNhc2UgVE5DX0NUTF9JRkxPV19S VFNfQ1RTOgotICAgICAgICAgIGNhc2UgVE5DX0NUTF9JRkxPV19EVFI6Ci0gICAgICAgICAgICBU RUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOwotICAgICAg ICAgICAgdG5jX2lmbG93ID0gc2JbMV07Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bmNfdG5f c2IiLCJpZmxvdyIsc2JbMV0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVs dDoKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0K LSAgICAgIGNhc2UgVE5DX0MyU19OT1RJRllfTElORVNUQVRFOgotICAgICAgY2FzZSBUTkNfUzJD X1NFTkRfTFM6Ci0gICAgICAgIGlmIChsZW4gPCAyKQotICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgIHRuY19scyA9IHNiWzFdOwotICAgICAgICBkZWJ1ZyhGMTExLCJ0bmNfdG5fc2IiLCJs aW5lc3RhdGUiLHNiWzFdKTsKLSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAg ICAgICAgIGlmICh0bmNfbHMgJiBUTkNfTVNfREFUQV9SRUFEWSApCi0gICAgICAgICAgICAgIHRu X2RlYnVnKCIgIENvbVBvcnQgTGluZXN0YXRlIERhdGEgUmVhZHkiKTsKLSAgICAgICAgICAgIGlm ICh0bmNfbHMgJiBUTkNfTVNfT1ZFUlJVTl9FUlJPUiApCi0gICAgICAgICAgICAgIHRuX2RlYnVn KCIgIENvbVBvcnQgTGluZXN0YXRlIE92ZXJydW4gRXJyb3IiKTsKLSAgICAgICAgICAgIGlmICh0 bmNfbHMgJiBUTkNfTVNfUEFSSVRZX0VSUk9SICkKLSAgICAgICAgICAgICAgdG5fZGVidWcoIiAg Q29tUG9ydCBMaW5lc3RhdGUgUGFyaXR5IEVycm9yIik7Ci0gICAgICAgICAgICBpZiAodG5jX2xz ICYgVE5DX01TX0ZSQU1FX0VSUk9SICkKLSAgICAgICAgICAgICAgdG5fZGVidWcoIiAgQ29tUG9y dCBMaW5lc3RhdGUgRnJhbWluZyBFcnJvciIpOwotICAgICAgICAgICAgaWYgKHRuY19scyAmIFRO Q19NU19CUkVBS19FUlJPUiApCi0gICAgICAgICAgICAgIHRuX2RlYnVnKCIgIENvbVBvcnQgTGlu ZXN0YXRlIEJyZWFrIERldGVjdCBFcnJvciIpOwotICAgICAgICAgICAgaWYgKHRuY19scyAmIFRO Q19NU19IUl9FTVBUWSApCi0gICAgICAgICAgICAgIHRuX2RlYnVnKCIgIENvbVBvcnQgTGluZXN0 YXRlIEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkiKTsKLSAgICAgICAgICAgIGlmICh0bmNfbHMgJiBU TkNfTVNfU1JfRU1QVFkgKQotICAgICAgICAgICAgICB0bl9kZWJ1ZygiICBDb21Qb3J0IExpbmVz dGF0ZSBTaGlmdCBSZWdpc3RlciBFbXB0eSIpOwotICAgICAgICAgICAgaWYgKHRuY19scyAmIFRO Q19NU19USU1FT1VUX0VSUk9SICkKLSAgICAgICAgICAgICAgdG5fZGVidWcoIiAgQ29tUG9ydCBM aW5lc3RhdGUgVGltZW91dCBFcnJvciIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g ICAgICBjYXNlIFROQ19DMlNfTk9USUZZX01PREVNU1RBVEU6Ci0gICAgICBjYXNlIFROQ19TMkNf U0VORF9NUzoKLSAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRf Zm9yX21zID0gMDsKLSAgICAgICAgaWYgKGxlbiA8IDIpCi0gICAgICAgICAgcmV0dXJuKC0xKTsK LSAgICAgICAgdG5jX21zID0gc2JbMV07Ci0gICAgICAgIGRlYnVnKEYxMTEsInRuY190bl9zYiIs Im1vZGVtc3RhdGUiLHNiWzFdKTsKLSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAg ICAgICAgICAgIGlmICh0bmNfbXMgJiBUTkNfTVNfQ1RTX0RFTFRBICkKLSAgICAgICAgICAgICAg dG5fZGVidWcoIiAgQ29tUG9ydCBNb2RlbXN0YXRlIENUUyBTdGF0ZSBDaGFuZ2UiKTsKLSAgICAg ICAgICAgIGlmICh0bmNfbXMgJiBUTkNfTVNfRFNSX0RFTFRBICkKLSAgICAgICAgICAgICAgdG5f ZGVidWcoIiAgQ29tUG9ydCBNb2RlbXN0YXRlIERTUiBTdGF0ZSBDaGFuZ2UiKTsKLSAgICAgICAg ICAgIGlmICh0bmNfbXMgJiBUTkNfTVNfRURHRV9SSU5HICkKLSAgICAgICAgICAgICAgdG5fZGVi dWcoIiAgQ29tUG9ydCBNb2RlbXN0YXRlIFRyYWlsaW5nIEVkZ2UgUmluZyBEZXRlY3RvciBPbiIp OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB0bl9kZWJ1ZygiICBDb21Qb3J0IE1v ZGVtc3RhdGUgVHJhaWxpbmcgRWRnZSBSaW5nIERldGVjdG9yIE9mZiIpOwotICAgICAgICAgICAg aWYgKHRuY19tcyAmIFROQ19NU19STFNEX0RFTFRBICkKLSAgICAgICAgICAgICAgdG5fZGVidWco IiAgQ29tUG9ydCBNb2RlbXN0YXRlIFJMU0QgU3RhdGUgQ2hhbmdlIik7Ci0gICAgICAgICAgICBp ZiAodG5jX21zICYgVE5DX01TX0NUU19TSUcgKQotICAgICAgICAgICAgICB0bl9kZWJ1ZygiICBD b21Qb3J0IE1vZGVtc3RhdGUgQ1RTIFNpZ25hbCBPbiIpOwotICAgICAgICAgICAgZWxzZQotICAg ICAgICAgICAgICB0bl9kZWJ1ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgQ1RTIFNpZ25hbCBPZmYi KTsKLSAgICAgICAgICAgIGlmICh0bmNfbXMgJiBUTkNfTVNfRFNSX1NJRyApCi0gICAgICAgICAg ICAgIHRuX2RlYnVnKCIgIENvbVBvcnQgTW9kZW1zdGF0ZSBEU1IgU2lnbmFsIE9uIik7Ci0gICAg ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHRuX2RlYnVnKCIgIENvbVBvcnQgTW9kZW1zdGF0 ZSBEU1IgU2lnbmFsIE9mZiIpOwotICAgICAgICAgICAgaWYgKHRuY19tcyAmIFROQ19NU19SSV9T SUcgKQotICAgICAgICAgICAgICB0bl9kZWJ1ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgUmluZyBJ bmRpY2F0b3IgT24iKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgdG5fZGVidWco IiAgQ29tUG9ydCBNb2RlbXN0YXRlIFJpbmcgSW5kaWNhdG9yIE9mZiIpOwotICAgICAgICAgICAg aWYgKHRuY19tcyAmIFROQ19NU19STFNEX1NJRyApCi0gICAgICAgICAgICAgIHRuX2RlYnVnKCIg IENvbVBvcnQgTW9kZW1zdGF0ZSBSTFNEIFNpZ25hbCBPbiIpOwotICAgICAgICAgICAgZWxzZQot ICAgICAgICAgICAgICB0bl9kZWJ1ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgUkxTRCBTaWduYWwg T2ZmIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgVE5DX0MyU19G TE9XX1NVU1BFTkQ6Ci0gICAgICBjYXNlIFROQ19TMkNfRkxPV19TVVNQRU5EOgotICAgICAgICBk ZWJ1ZyhGMTEwLCJ0bmNfdG5fc2IiLCJmbG93IHN1c3BlbmQiLDApOwotICAgICAgICB0bmNfc3Vz cGVuZF94bWl0ID0gMTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgVE5DX0MyU19GTE9X X1JFU1VNRToKLSAgICAgIGNhc2UgVE5DX1MyQ19GTE9XX1JFU1VNRToKLSAgICAgICAgZGVidWco RjExMCwidG5jX3RuX3NiIiwiZmxvdyByZXN1bWUiLDApOwotICAgICAgICB0bmNfc3VzcGVuZF94 bWl0ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgVE5DX0MyU19TRVRfTFNfTUFT SzoKLSAgICAgIGNhc2UgVE5DX1MyQ19TRVRfTFNfTUFTSzoKLSAgICAgICAgICBURUxPUFRfU0Io VEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOwotICAgICAgICAgIGlmIChs ZW4gPCAyKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsInRuY190 bl9zYiIsImxpbmVzdGF0ZSBtYXNrIixzYlsxXSk7Ci0gICAgICAgIHRuY19sc19tYXNrID0gc2Jb MV07Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFROQ19DMlNfU0VUX01TX01BU0s6Ci0g ICAgICBjYXNlIFROQ19TMkNfU0VUX01TX01BU0s6Ci0gICAgICAgICAgVEVMT1BUX1NCKFRFTE9Q VF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9yX3NiID0gMDsKLSAgICAgICAgICBpZiAobGVuIDwg MikKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBkZWJ1ZyhGMTExLCJ0bmNfdG5fc2Ii LCJtb2RlbXN0YXRlIG1hc2siLHNiWzFdKTsKLSAgICAgICAgdG5jX2xzX21hc2sgPSBzYlsxXTsK LSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgVE5DX0MyU19QVVJHRToKLSAgICAgIGNhc2Ug VE5DX1MyQ19QVVJHRToKLSAgICAgICAgaWYgKGxlbiA8IDIpCi0gICAgICAgICAgcmV0dXJuKC0x KTsKLSAgICAgICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwicHVyZ2UiLHNiWzFdKTsKLSAgICAg ICAgc3dpdGNoICggc2JbMV0gKSB7Ci0gICAgICAgICAgY2FzZSBUTkNfUFVSR0VfUkVDRUlWRToK LSAgICAgICAgICBjYXNlIFROQ19QVVJHRV9UUkFOU01JVDoKLSAgICAgICAgICBjYXNlIFROQ19Q VVJHRV9CT1RIOgotICAgICAgICAgICAgLyogcHVyZ2UgbG9jYWwgYnVmZmVycyAqLwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybigtMSk7 Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1 cm4oLTEpOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLUNPTlNUIGNoYXIgKgotI2lmZGVm IENLX0FOU0lDCi10bmNfZ2V0X3NpZ25hdHVyZSh2b2lkKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8K LXRuY19nZXRfc2lnbmF0dXJlKCkKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX2dldF9z aWduYXR1cmUgKi8gewotICAgIC8qIHNlbmQgSUFDIFNCIENPTS1QT1JUIFNJR05BVFVSRSBJQUMg U0UgKi8KLSAgICAvKiB3YWl0IGZvciByZXNwb25zZSAqLwotICAgIGludCBpID0gMCwgcmM7Ci0K LSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybihOVUxMKTsKLSAgICBpZiAodHRucHJv dG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oTlVMTCk7Ci0KLSAgICBpZiAoIVRFTE9QVF9NRShURUxP UFRfQ09NUE9SVCkpIHJldHVybihOVUxMKTsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxP UFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAg cmV0dXJuKE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIGlmICggdG5j X3NpZ25hdHVyZSApCi0gICAgICAgIHJldHVybih0bmNfc2lnbmF0dXJlKTsKLQotICAgIHNiX291 dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAg c2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8K LSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAgICAgIC8qIENvbVBv cnQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0lHTkFUVVJFOyAgICAvKiBTaWduYXR1 cmUgKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgLyogRW5k IG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAg ICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYg KGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGNrbWFrbXNnKHRuX21zZ19v dXQsVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BU KFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAgIiBTSUdOQVRVUkUgSUFDIFNFIiwg TlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVz dFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBERUJV RwotICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5fZGViIHx8IGRl YnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9 ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRl ZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlmIChyYykKLSAg ICAgICAgcmV0dXJuKE5VTEwpOwotCi0gICAgaWYgKHRuY193YWl0KChDSEFSICopImNvbXBvcnQg c2lnbmF0dXJlIHJlcXVlc3QiLDApIDwgMCkgewotICAgICAgICB0bl9wdXNoKCk7Ci0gICAgICAg IHJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwidG5jX2dldF9zaWduYXR1cmUi LHRuY19zaWduYXR1cmUsMCk7Ci0gICAgcmV0dXJuKHRuY19zaWduYXR1cmUpOwotfQotCi1pbnQK LSNpZmRlZiBDS19BTlNJQwotdG5jX3NlbmRfc2lnbmF0dXJlKGNoYXIgKiBzaWduYXR1cmUpCi0j ZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX3NlbmRfc2lnbmF0dXJlKHNpZ25hdHVyZSkgY2hhciAq IHNpZ25hdHVyZTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX3NlbmRfc2lnbmF0dXJl ICovIHsKLSAgICAvKiBzZW5kIElBQyBTQiBDT00tUE9SVCBTSUdOQVRVUkUgPHRleHQ+IElBQyBT RSAqLwotICAgIGludCBpID0gMCwgaiA9IDAsIHJjOwotCi0gICAgZGVidWcoRjExMCwidG5jX3Nl bmRfc2lnbmF0dXJlIixzaWduYXR1cmUsMCk7Ci0KLSAgICBpZiAoIXNpZ25hdHVyZSB8fCAhc2ln bmF0dXJlWzBdKQotICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BC KSByZXR1cm4oMCk7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwot Ci0gICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7Ci0KLSNpZmRl ZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5t ZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NM ICovCi0KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJ IEFtIGEgQ29tbWFuZCAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAg ICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09N UE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0My U19TSUdOQVRVUkU7ICAgICAgLyogU2lnbmF0dXJlICovCi0gICAgZm9yICg7IHNpZ25hdHVyZVtq XTsgaSsrLGorKykKLSAgICAgIHNiX291dFtpXSA9IHNpZ25hdHVyZVtqXTsKLSAgICBzYl9vdXRb aSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9u ICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgIC8qIG1hcmtl ZCBieSBJQUMgU0UgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIg fHwgZGVic2VzKSB7Ci0gICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCi0g ICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQp LAotICAgICAgICAgICAgICAgICAgIiBTSUdOQVRVUkUgIiwgc2lnbmF0dXJlLCAiIElBQyBTRSIs IE5VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7 Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5l dE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwotICAg IGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5fZGViIHx8IGRlYnNlcykg dG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0dG9s KChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIK LSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlmIChyYykKLSAgICAgICAg cmV0dXJuKC0xKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi10 bmNfc2V0X2JhdWQoIGxvbmcgYmF1ZCApCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX3NldF9i YXVkKGJhdWQpIGxvbmcgYmF1ZDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX3NldF9i YXVkICovIHsKLSAgICAvKiBzZW5kIElBQyBTQiBDT00tUE9SVCBTRVQtQkFVRCA8dmFsdWUoNCk+ IElBQyBTRSAgKi8KLSAgICAvKiB3YWl0IGZvciByZXNwb25zZSAqLwotICAgIC8qIDAgaXMgdXNl ZCB0byByZXF1ZXN0IHRoZSBjdXJyZW50IGJhdWQgcmF0ZSBhbmQgKi8KLSAgICAvKiBtYXkgbm90 IGJlIHNlbnQgYnkgdGhpcyBmdW5jICovCi0gICAgLyogcmV0dXJuIG5ldyBob3N0IHZhbHVlICov Ci0KLSAgICAvKgotICAgICAqICAgdGhlIGFib3ZlIGNvbWVzIGZyb20gdGhlIFJGQy4gIEJ1dCB0 aGF0IGlzIG5vdCB3aGF0IEkgYW0gc2VlaW5nCi0gICAgICogICBpbnN0ZWFkIEkgYXBwZWFyIHRv IGJlIHNlZWluZyB0byBmb2xsb3dpbmc6Ci0gICAgICoKLSAgICAgKiAgICAgIFZhbHVlICAgICAg ICAgICAgICAgQmF1ZAotICAgICAqICAgICAgICAgIDEgICAgICAgICAgICAgICA/Ci0gICAgICog ICAgICAgICAgMiAgICAgICAgICAgICAgID8KLSAgICAgKiAgICAgICAgICAzICAgICAgICAgICAg ICAgMzAwCi0gICAgICogICAgICAgICAgNCAgICAgICAgICAgICAgIDYwMAotICAgICAqICAgICAg ICAgIDUgICAgICAgICAgICAgICAxMjAwCi0gICAgICogICAgICAgICAgNiAgICAgICAgICAgICAg IDI0MDAKLSAgICAgKiAgICAgICAgICA3ICAgICAgICAgICAgICAgNDgwMCAgICAgID8KLSAgICAg KiAgICAgICAgICA4ICAgICAgICAgICAgICAgOTYwMAotICAgICAqICAgICAgICAgIDkgICAgICAg ICAgICAgICAgICAgICAgICAgPwotICAgICAqICAgICAgICAgIDEwICAgICAgICAgICAgICAxOTIw MCAgICAgPwotICAgICAqICAgICAgICAgIDExICAgICAgICAgICAgICAgICAgICAgICAgPwotICAg ICAqICAgICAgICAgIDEyICAgICAgICAgICAgICAzODQwMAotICAgICAqICAgICAgICAgIDEzICAg ICAgICAgICAgICA1NzYwMCAgICAgPwotICAgICAqICAgICAgICAgIDE0ICAgICAgICAgICAgICAx MTUyMDAKLSAgICAgKiAgICAgICAgICAxNSAgICAgICAgICAgICAgMjMwNDAwICAgID8KLSAgICAg KiAgICAgICAgICAxNiAgICAgICAgICAgICAgNDYwODAwICAgID8KLSAgICAgKi8KLQotICAgIGlu dCBpID0gMCwgcmM7Ci0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICAvKiBBT1MvVlMgZG9lc24ndCBo YXZlIGh0b25sKCkgYnV0IE1WJ3MgYXJlIGJpZy1lbmRpYW4gKi8KLSAgICBsb25nIG5ldF9iYXVk ID0gYmF1ZDsKLSNlbHNlCi0gICAgbG9uZyBuZXRfYmF1ZCA9IGh0b25sKGJhdWQpOwotI2VuZGlm IC8qIGRhdGFnZW5lcmFsICovCi0gICAgQ0hBUiBiOwotCi0gICAgZGVidWcoRjExMSwidG5jX3Nl dF9iYXVkIiwiYmVnaW4iLGJhdWQpOwotCi0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1 cm4oMCk7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotCi0gICAg aWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDS19T U0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xs b3dzKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0K LSAgICBpZiAoYmF1ZCA8PSAwKQotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIG5ldF9i YXVkICE9IDAgJiYgbmV0X2JhdWQgPT0gdG5jX2JwcykKLSAgICAgICAgcmV0dXJuKHRuY19icHMp OwotCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBB bSBhIENvbW1hbmQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAg ICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBP UlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNf U0VUX0JBVURSQVRFOyAgIC8qIFNldCBCYXVkIFJhdGUgKi8KLQotICAgIGlmICh0bmNfYnBzX2lu ZGV4KSB7Ci0gICAgICAgIC8qIElPUyBBY2Nlc3MgU2VydmVyICovCi0gICAgICAgIGlmIChiYXVk IDw9IDMwMCkKLSAgICAgICAgICAgIGIgPSBUTkNfQlBTXzMwMDsKLSAgICAgICAgZWxzZSBpZiAo YmF1ZCA8PSA2MDApCi0gICAgICAgICAgICBiID0gVE5DX0JQU182MDA7Ci0gICAgICAgIGVsc2Ug aWYgKGJhdWQgPD0gMTIwMCkKLSAgICAgICAgICAgIGIgPSBUTkNfQlBTXzEyMDA7Ci0gICAgICAg IGVsc2UgaWYgKGJhdWQgPD0gMjQwMCkKLSAgICAgICAgICAgIGIgPSBUTkNfQlBTXzI0MDA7Ci0g ICAgICAgIGVsc2UgaWYgKGJhdWQgPD0gNDgwMCkKLSAgICAgICAgICAgIGIgPSBUTkNfQlBTXzQ4 MDA7Ci0gICAgICAgIGVsc2UgaWYgKGJhdWQgPD0gOTYwMCkKLSAgICAgICAgICAgIGIgPSBUTkNf QlBTXzk2MDA7Ci0gICAgICAgIGVsc2UgaWYgKGJhdWQgPD0gMTQ0MDApCi0gICAgICAgICAgICBi ID0gVE5DX0JQU18xNDQwMDsKLSAgICAgICAgZWxzZSBpZiAoYmF1ZCA8PSAxOTIwMCkKLSAgICAg ICAgICAgIGIgPSBUTkNfQlBTXzE5MjAwOwotICAgICAgICBlbHNlIGlmIChiYXVkIDw9IDI4ODAw KQotICAgICAgICAgICAgYiA9IFROQ19CUFNfMjg4MDA7Ci0gICAgICAgIGVsc2UgaWYgKGJhdWQg PD0gMzg0MDApCi0gICAgICAgICAgICBiID0gVE5DX0JQU18zODQwMDsKLSAgICAgICAgZWxzZSBp ZiAoYmF1ZCA8PSA1NzYwMCkKLSAgICAgICAgICAgIGIgPSBUTkNfQlBTXzU3NjAwOwotICAgICAg ICBlbHNlIGlmIChiYXVkIDw9IDExNTIwMCkKLSAgICAgICAgICAgIGIgPSBUTkNfQlBTXzExNTIw MDsKLSAgICAgICAgZWxzZSBpZiAoYmF1ZCA8PSAyMzA0MDApCi0gICAgICAgICAgICBiID0gVE5D X0JQU18yMzA0MDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGIgPSBUTkNfQlBTXzQ2MDgw MDsKLSAgICAgICAgc2Jfb3V0W2krK10gPSBiOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIFJG QyAyMjE3ICovCi0gICAgICAgIHNiX291dFtpKytdID0gKChjaGFyICopJm5ldF9iYXVkKVswXTsK LSAgICAgICAgc2Jfb3V0W2krK10gPSAoKGNoYXIgKikmbmV0X2JhdWQpWzFdOwotICAgICAgICBz Yl9vdXRbaSsrXSA9ICgoY2hhciAqKSZuZXRfYmF1ZClbMl07Ci0gICAgICAgIHNiX291dFtpKytd ID0gKChjaGFyICopJm5ldF9iYXVkKVszXTsKLSAgICB9Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgSUFDOyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAg c2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElB QyBTRSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJz ZXMpIHsKLSAgICAgICAgY2ttYWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKLSAgICAgICAg ICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCi0gICAg ICAgICAgICAgICAgICAiIFNFVC1CQVVELVJBVEUgIiwgY2tsdG9hKGJhdWQpLCIgSUFDIFNFIiwg TlVMTCwKLSAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsK LSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxu ZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAg ICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp IHRuX2RlYnVnKHRuX21zZ19vdXQpOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgcmMgPSAodHRv bCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1My Ci0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICBpZiAocmMpCi0gICAgICAg IHJldHVybigtMSk7Ci0KLSAgICBpZiAodG5jX3dhaXQoKENIQVIgKikiY29tcG9ydCBzZXQgYmF1 ZCByYXRlIiwwKSA8IDApIHsKLSAgICAgICAgdG5fcHVzaCgpOwotICAgICAgICByZXR1cm4oLTEp OwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X2JhdWQiLCJlbmQiLHRuY19icHMpOwot ICAgIHJldHVybih0bmNfYnBzKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuY19nZXRf YmF1ZCh2b2lkKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuY19nZXRfYmF1ZCgpCi0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLS8qIHRuY19nZXRfYmF1ZCAqLyB7Ci0gICAgLyogc2VuZCBJQUMgU0Ig Q09NLVBPUlQgU0VULUJBVUQgPHZhbHVlKDQpPTA+IElBQyBTRSAgKi8KLSAgICAvKiB3YWl0IGZv ciByZXNwb25zZSAqLwotICAgIGludCBpID0gMCwgcmM7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJ0bmNf Z2V0X2JhdWQiLCJiZWdpbiIsMCk7Ci0KLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVy bigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0KLSAgICBp ZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKLQotI2lmZGVmIENLX1NT TAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxv d3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQot ICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBD b21tYW5kICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAg LyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAg ICAgICAgICAgICAvKiBDb21Qb3J0ICovCi0gICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9C QVVEUkFURTsgICAvKiBTZXQgQmF1ZCBSYXRlICovCi0KLSAgICBpZiAodG5jX2Jwc19pbmRleCA+ IDApIHsKLSAgICAgICAgLyogQWNjZXNzIFNlcnZlciAqLwotICAgICAgICBzYl9vdXRbaSsrXSA9 IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogUkZDIDIyMTcgKi8KLSAgICAgICAgc2Jfb3V0 W2krK10gPSAwOwotICAgICAgICBzYl9vdXRbaSsrXSA9IDA7Ci0gICAgICAgIHNiX291dFtpKytd ID0gMDsKLSAgICAgICAgc2Jfb3V0W2krK10gPSAwOwotICAgIH0KLSAgICBzYl9vdXRbaSsrXSA9 IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8K LSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQg YnkgSUFDIFNFICovCi0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8 IGRlYnNlcykgewotICAgICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAotICAg ICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwK LSAgICAgICAgICAgICAgICAgICIgU0VULUJBVUQtUkFURSAiLCBja2x0b2EoMCksIiBJQUMgU0Ui LCBOVUxMLAotICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwp OwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxu ZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAg ICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp IHRuX2RlYnVnKHRuX21zZ19vdXQpOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgcmMgPSAodHRv bCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1My Ci0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICBpZiAocmMpCi0gICAgICAg IHJldHVybigtMSk7Ci0KLSAgICBpZiAodG5jX3dhaXQoKENIQVIgKikiY29tcG9ydCBnZXQgYmF1 ZCByYXRlIiwwKSA8IDApIHsKLSAgICAgICAgdG5fcHVzaCgpOwotICAgICAgICByZXR1cm4oLTEp OwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNfZ2V0X2JhdWQiLCJlbmQiLHRuY19icHMpOwot ICAgIHJldHVybih0bmNfYnBzKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuY19zZXRf ZGF0YXNpemUoaW50IGRhdGFzaXplKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuY19zZXRfZGF0 YXNpemUoZGF0YXNpemUpIGludCBkYXRhc2l6ZTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyog dG5jX3NldF9kYXRhc2l6ZSAqLyB7Ci0gICAgLyogSUFDIFNCIENPTS1QT1JUIFNFVF9EQVRBU0la RSA8dmFsdWUoMSk+IElBQyBTRSAqLwotICAgIC8qIFZhbGlkIDx2YWx1ZT5zIGFyZSA1IHRocm91 Z2ggOCAqLwotICAgIC8qIFdhaXQgZm9yIHJlc3BvbnNlICovCi0gICAgLyogcmV0dXJuIG5ldyBo b3N0IHZhbHVlICovCi0KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAgZGVidWcoRjExMSwidG5j X3NldF9kYXRhc2l6ZSIsImJlZ2luIixkYXRhc2l6ZSk7Ci0KLSAgICBpZiAodHRuZXQgIT0gTkVU X1RDUEIpIHJldHVybigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4o MCk7Ci0KLSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKLQot I2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRf dGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBD S19TU0wgKi8KLQotICAgIGlmICggIShkYXRhc2l6ZSA+PSA1ICYmIGRhdGFzaXplIDw9IDgpICkK LSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKCBkYXRhc2l6ZSAgIT0gMCAmJiAgZGF0YXNp emUgPT0gdG5jX2RhdGFzaXplICkKLSAgICAgICAgcmV0dXJuKHRuY19kYXRhc2l6ZSk7Ci0KLSAg ICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29t bWFuZCAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8q IFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAg ICAgICAgICAgLyogQ29tUG9ydCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TRVRfREFU QVNJWkU7ICAgLyogU2V0IERhdGFTaXplICovCi0gICAgc2Jfb3V0W2krK10gPSAodW5zaWduZWQg Y2hhcikoZGF0YXNpemUgJiAweEZGKTsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAg ICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsr XSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0K LSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAg ICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAg IlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAg ICAgICIgU0VULURBVEFTSVpFICIsIGNraXRvYShkYXRhc2l6ZSksIiBJQUMgU0UiLCBOVUxMLAot ICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIH0K LSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCgg U0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhG MTAwLHRuX21zZ19vdXQsIiIsMCk7Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVn KHRuX21zZ19vdXQpOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAq KXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVs ZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICBpZiAocmMpCi0gICAgICAgIHJldHVybigt MSk7Ci0KLSAgICBpZiAodG5jX3dhaXQoKENIQVIgKikiY29tcG9ydCBzZXQgZGF0YXNpemUiLDAp IDwgMCkgewotICAgICAgICB0bl9wdXNoKCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQot ICAgIGRlYnVnKEYxMTEsInRuY19zZXRfZGF0YXNpemUiLCJlbmQiLHRuY19kYXRhc2l6ZSk7Ci0g ICAgcmV0dXJuKHRuY19kYXRhc2l6ZSk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bmNf Z2V0X2RhdGFzaXplKHZvaWQpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX2dldF9kYXRhc2l6 ZSgpCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuY19nZXRfZGF0YXNpemUgKi8gewotICAg IC8qIElBQyBTQiBDT00tUE9SVCBTRVRfREFUQVNJWkUgPHZhbHVlKDEpPTA+IElBQyBTRSAqLwot ICAgIC8qIFdhaXQgZm9yIHJlc3BvbnNlICovCi0gICAgaW50IGkgPSAwLCByYzsKLQotICAgIGRl YnVnKEYxMTAsInRuY19nZXRfZGF0YXNpemUiLCJiZWdpbiIsMCk7Ci0KLSAgICBpZiAodHRuZXQg IT0gTkVUX1RDUEIpIHJldHVybigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSBy ZXR1cm4oMCk7Ci0KLSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigw KTsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUyku c3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRp ZiAvKiBDS19TU0wgKi8KLQotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAg ICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7 ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9 IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCi0gICAgc2Jfb3V0W2kr K10gPSBUTkNfQzJTX1NFVF9EQVRBU0laRTsgICAvKiBTZXQgRGF0YVNpemUgKi8KLSAgICBzYl9v dXRbaSsrXSA9IDA7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAg ICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikg U0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYgREVC VUcKLSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWt4 bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJURUxORVQgU0VO VCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCi0gICAgICAgICAgICAgICAgICAiIFNFVC1E QVRBU0laRSAiLCBja2x0b2EoMCksIiBJQUMgU0UiLCBOVUxMLAotICAgICAgICAgICAgICAgICAg TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAq LwotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJ VCApOwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIs MCk7Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwotI2Vu ZGlmIC8qIERFQlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAg ICAgIC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7 Ci0jZW5kaWYKLSAgICBpZiAocmMpCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAodG5j X3dhaXQoKENIQVIgKikiY29tcG9ydCBnZXQgZGF0YXNpemUiLDApIDwgMCkgewotICAgICAgICB0 bl9wdXNoKCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInRu Y19nZXRfZGF0YXNpemUiLCJlbmQiLHRuY19kYXRhc2l6ZSk7Ci0gICAgcmV0dXJuKHRuY19kYXRh c2l6ZSk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bmNfc2V0X3Bhcml0eShpbnQgcGFy aXR5KQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuY19zZXRfcGFyaXR5KHBhcml0eSkgaW50IHBh cml0eTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX3NldF9wYXJpdHkgKi8gewotICAg IC8qIElBQyBTQiBDT00tUE9SVCBTRVRfUEFSSVRZIDx2YWx1ZSgxKT4gSUFDIFNFICovCi0gICAg LyogICAgICAgIFZhbHVlICAgICBQYXJpdHkKLSAgICAgKiAgICAgICAgICAxICAgICAgIE5vbmUK LSAgICAgKiAgICAgICAgICAyICAgICAgIE9kZAotICAgICAqICAgICAgICAgIDMgICAgICAgRXZl bgotICAgICAqICAgICAgICAgIDQgICAgICAgTWFyawotICAgICAqICAgICAgICAgIDUgICAgICAg U3BhY2UKLSAgICAgKi8KLSAgICAvKiBXYWl0IGZvciByZXNwb25zZS4gIFJldHVybiBuZXcgaG9z dCB2YWx1ZS4gKi8KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAgZGVidWcoRjExMCwidG5jX3Nl dF9wYXJpdHkiLCJiZWdpbiIscGFyaXR5KTsKLQotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikg cmV0dXJuKDApOwotICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKLQot ICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOwotCi0jaWZkZWYg Q0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVf Zm9sbG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAq LwotCi0gICAgaWYgKCAhKHBhcml0eSA+PSAxICYmIHBhcml0eSA8PSA1KSApCi0gICAgICAgIHJl dHVybigwKTsKLQotICAgIGlmICggcGFyaXR5ICE9IDAgJiYgcGFyaXR5ID09IHRuY19wYXJpdHkg KQotICAgICAgICByZXR1cm4odG5jX3Bhcml0eSk7Ci0KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFS KSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLwotICAgIHNiX291dFtp KytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCi0g ICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAq LwotICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TRVRfUEFSSVRZOyAgICAgLyogU2V0IFBhcml0 eSAqLwotICAgIHNiX291dFtpKytdID0gKHVuc2lnbmVkIGNoYXIpKHBhcml0eSAmIDB4RkYpOwot ICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBT dWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAg ICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRl YmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0 LFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQo VEVMT1BUX0NPTVBPUlQpLAotICAgICAgICAgICAgICAgICAgIiBTRVQtUEFSSVRZICIsIGNraXRv YShwYXJpdHkpLCIgSUFDIFNFIiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBP UzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRp ZgotI2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwotICAgIGlm ICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJV RyAqLwotICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5k IGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0g ICAgaWYgKHJjKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKHRuY193YWl0KChDSEFS ICopImNvbXBvcnQgc2V0IHBhcml0eSIsMCkgPCAwKSB7Ci0gICAgICAgIHRuX3B1c2goKTsKLSAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwidG5jX3NldF9wYXJpdHki LCJlbmQiLHRuY19wYXJpdHkpOwotICAgIHJldHVybih0bmNfcGFyaXR5KTsKLX0KLQotaW50Ci0j aWZkZWYgQ0tfQU5TSUMKLXRuY19nZXRfcGFyaXR5KHZvaWQpCi0jZWxzZSAvKiBDS19BTlNJQyAq LwotdG5jX2dldF9wYXJpdHkoKQotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfZ2V0X3Bh cml0eSAqLyB7Ci0gICAgLyogSUFDIFNCIENPTS1QT1JUIFNFVF9QQVJJVFkgPHZhbHVlKDEpPTA+ IElBQyBTRSAqLwotICAgIC8qIHdhaXQgZm9yIHJlc3BvbnNlICovCi0gICAgaW50IGkgPSAwLCBy YzsKLQotICAgIGRlYnVnKEYxMTAsInRuY19nZXRfcGFyaXR5IiwiYmVnaW4iLDApOwotICAgIGlm ICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOwotICAgIGlmICh0dG5wcm90byAhPSBOUF9U RUxORVQpIHJldHVybigwKTsKLQotICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkg cmV0dXJuKDApOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RB UlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAg fQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAg ICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IChD SEFSKSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291 dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KLSAgICBz Yl9vdXRbaSsrXSA9IFROQ19DMlNfU0VUX1BBUklUWTsgICAgIC8qIFNldCBQYXJpdHkgKi8KLSAg ICBzYl9vdXRbaSsrXSA9IDA7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAg ICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAo Q0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZk ZWYgREVCVUcKLSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAg Y2ttYWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJURUxO RVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCi0gICAgICAgICAgICAgICAgICAi IFNFVC1QQVJJVFkgIiwgY2tpdG9hKDApLCIgSUFDIFNFIiwgTlVMTCwKLSAgICAgICAgICAgICAg ICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVC VUcgKi8KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRF X1dBSVQgKTsKLSNlbmRpZgotI2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0 LCIiLDApOwotICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsK LSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAw KTsgICAgICAvKiBTZW5kIGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRl eCgpOwotI2VuZGlmCi0gICAgaWYgKHJjKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYg KHRuY193YWl0KChDSEFSICopImNvbXBvcnQgZ2V0IHBhcml0eSIsMCkgPCAwKSB7Ci0gICAgICAg IHRuX3B1c2goKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwi dG5jX2dldF9wYXJpdHkiLCJlbmQiLHRuY19wYXJpdHkpOwotICAgIHJldHVybih0bmNfcGFyaXR5 KTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuY19zZXRfc3RvcHNpemUoaW50IHN0b3Bz aXplKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuY19zZXRfc3RvcHNpemUoc3RvcHNpemUpIGlu dCBzdG9wc2l6ZTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX3NldF9zdG9wc2l6ZSAq LyB7Ci0gICAgLyogSUFDIFNCIENPTS1QT1JUIFNFVF9TVE9QU0laRSA8dmFsdWUoMSk+IElBQyBT RSAqLwotICAgIC8qICAgICAgICBWYWx1ZSAgICAgU3RvcCBCaXQgU2l6ZQotICAgICAqICAgICAg ICAgIDEgICAgICAgMQotICAgICAqICAgICAgICAgIDIgICAgICAgMgotICAgICAqICAgICAgICAg IDMgICAgICAgMS41Ci0gICAgICovCi0gICAgLyogV2FpdCBmb3IgcmVzcG9uc2UuICBSZXR1cm4g bmV3IGhvc3QgdmFsdWUuICovCi0gICAgaW50IGkgPSAwLCByYzsKLQotICAgIGRlYnVnKEYxMTEs InRuY19zZXRfc3RvcHNpemUiLCJiZWdpbiIsc3RvcHNpemUpOwotICAgIGlmICh0dG5ldCAhPSBO RVRfVENQQikgcmV0dXJuKDApOwotICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVy bigwKTsKLQotICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOwot Ci0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFy dF90bHMubWVfZm9sbG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8q IENLX1NTTCAqLwotCi0gICAgaWYgKCEoc3RvcHNpemUgPj0gMSAmJiBzdG9wc2l6ZSA8PSAzKSAp Ci0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIHN0b3BzaXplICE9IDAgJiYgc3RvcHNpemUg PT0gdG5jX3N0b3BiaXQgKQotICAgICAgICByZXR1cm4odG5jX3N0b3BiaXQpOwotCi0gICAgc2Jf b3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQg Ki8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJu ZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAg ICAgIC8qIENvbVBvcnQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0VUX1NUT1BTSVpF OyAgIC8qIFNldCBTdG9wIEJpdHMgKi8KLSAgICBzYl9vdXRbaSsrXSA9ICh1bnNpZ25lZCBjaGFy KShzdG9wc2l6ZSAmIDB4RkYpOwotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAg ICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0g KENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KLQotI2lm ZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAg IGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAiVEVM TkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAotICAgICAgICAgICAgICAgICAg IiBTRVQtU1RPUFNJWkUgIiwgY2tpdG9hKHN0b3BzaXplKSwiIElBQyBTRSIsIE5VTEwsCi0gICAg ICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgfQotI2Vu ZGlmIC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1f SU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwotICAgIGRlYnVnKEYxMDAs dG5fbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5f bXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0dG9sKChDSEFSICopc2Jf b3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNl VGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlmIChyYykKLSAgICAgICAgcmV0dXJuKC0xKTsK LQotICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IHNldCBzdG9wc2l6ZSIsMCkgPCAw KSB7Ci0gICAgICAgIHRuX3B1c2goKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAg ZGVidWcoRjExMSwidG5jX3NldF9zdG9wc2l6ZSIsImVuZCIsdG5jX3N0b3BiaXQpOwotICAgIHJl dHVybih0bmNfc3RvcGJpdCk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bmNfZ2V0X3N0 b3BzaXplKHZvaWQpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX2dldF9zdG9wc2l6ZSgpCi0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuY19nZXRfc3RvcHNpemUgKi8gewotICAgIC8qIElB QyBTQiBDT00tUE9SVCBTRVRfU1RPUFNJWkUgPHZhbHVlKDEpPTA+IElBQyBTRSAqLwotICAgIC8q IFdhaXQgZm9yIHJlc3BvbnNlICovCi0gICAgaW50IGkgPSAwLCByYzsKLQotICAgIGRlYnVnKEYx MTAsInRuY19nZXRfc3RvcHNpemUiLCJiZWdpbiIsMCk7Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9U Q1BCKSByZXR1cm4oMCk7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDAp OwotCi0gICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7Ci0KLSNp ZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rs cy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tf U1NMICovCi0KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAv KiBJIEFtIGEgQ29tbWFuZCAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAg ICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxPUFRf Q09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLwotICAgIHNiX291dFtpKytdID0gVE5D X0MyU19TRVRfU1RPUFNJWkU7ICAgLyogU2V0IFN0b3AgQml0cyAqLwotICAgIHNiX291dFtpKytd ID0gMDsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBF bmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAg ICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBERUJVRwotICAg IGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBja21ha3htc2codG5f bXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIs VEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAgICIgU0VULVNUT1BTSVpF ICIsIGNraXRvYSgwKSwiIElBQyBTRSIsIE5VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZk ZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0j ZW5kaWYKLSNpZmRlZiBERUJVRwotICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAg ICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyog REVCVUcgKi8KLSAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyog U2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRp ZgotICAgIGlmIChyYykKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmICh0bmNfd2FpdCgo Q0hBUiAqKSJjb21wb3J0IHNldCBzdG9wc2l6ZSIsMCkgPCAwKSB7Ci0gICAgICAgIHRuX3B1c2go KTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwidG5jX2dldF9z dG9wc2l6ZSIsImVuZCIsdG5jX3N0b3BiaXQpOwotICAgIHJldHVybih0bmNfc3RvcGJpdCk7Ci19 Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bmNfc2V0X29mbG93KGludCBjb250cm9sKQotI2Vs c2UgLyogQ0tfQU5TSUMgKi8KLXRuY19zZXRfb2Zsb3coY29udHJvbCkgaW50IGNvbnRyb2w7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuY19zZXRfb2Zsb3cgKi8gewotICAgIC8qIElBQyBT QiBDT01fUE9SVCBTRVRfQ09OVFJPTCA8dmFsdWUoMSk+IElBQyBTRSAqLwotICAgIC8qICAgICAg ICBWYWx1ZSAgICAgRmxvdyBDb250cm9sCi0gICAgICogICAgICAgICAgMSAgICAgICBObyBGbG93 IENvbnRyb2wKLSAgICAgKiAgICAgICAgICAyICAgICAgIFhvbi9Yb2ZmCi0gICAgICogICAgICAg ICAgMyAgICAgICBSdHMvQ3RzCi0gICAgICogICAgICAgICAxNyAgICAgICBEQ0QKLSAgICAgKiAg ICAgICAgIDE5ICAgICAgIERTUgotICAgICAqLwotICAgIC8qIHdhaXQgZm9yIHJlc3BvbnNlLCBy ZXR1cm4gbmV3IGhvc3QgdmFsdWUuICovCi0gICAgaW50IGkgPSAwLCByYzsKLQotICAgIGRlYnVn KEYxMTEsInRuY19zZXRfb2Zsb3ciLCJiZWdpbiIsY29udHJvbCk7Ci0gICAgaWYgKHR0bmV0ICE9 IE5FVF9UQ1BCKSByZXR1cm4oMCk7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0 dXJuKDApOwotCi0gICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7 Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0 YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYg LyogQ0tfU1NMICovCi0KLSAgICBpZiAoY29udHJvbCAhPSAxICYmIGNvbnRyb2wgIT0gMiAmJiBj b250cm9sICE9IDMgJiYKLSAgICAgICAgY29udHJvbCAhPSAxNyAmJiBjb250cm9sICE9IDE5KQot ICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKCBjb250cm9sICE9IDAgJiYgY29udHJvbCA9PSB0 bmNfb2Zsb3cgKQotICAgICAgICByZXR1cm4odG5jX29mbG93KTsKLQotICAgIHNiX291dFtpKytd ID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAg c2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRp b24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAgICAvKiBD b21Qb3J0ICovCi0gICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9DT05UUk9MOyAgICAvKiBT ZXQgQ29udHJvbCAqLwotICAgIHNiX291dFtpKytdID0gKHVuc2lnbmVkIGNoYXIpKGNvbnRyb2wg JiAweEZGKTsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAv KiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsg ICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBERUJVRwot ICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBja21ha3htc2co dG5fbXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNC ICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAgICIgU0VULUNPTlRS T0wgIiwgY2tpdG9hKGNvbnRyb2wpLCIgSUFDIFNFIiwgTlVMTCwKLSAgICAgICAgICAgICAgICAg IE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcg Ki8KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dB SVQgKTsKLSNlbmRpZgotI2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIi LDApOwotICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNl bmRpZiAvKiBERUJVRyAqLwotICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsg ICAgICAvKiBTZW5kIGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgp OwotI2VuZGlmCi0gICAgaWYgKHJjKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKHRu Y193YWl0KChDSEFSICopImNvbXBvcnQgc2V0IG91dGJvdW5kIGZsb3cgY29udHJvbCIsMCkgPCAw KSB7Ci0gICAgICAgIHRuX3B1c2goKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAg ZGVidWcoRjExMSwidG5jX3NldF9vZmxvdyIsImVuZCIsdG5jX29mbG93KTsKLSAgICByZXR1cm4o dG5jX29mbG93KTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuY19nZXRfb2Zsb3codm9p ZCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi10bmNfZ2V0X29mbG93KCkKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotLyogdG5jX2dldF9vZmxvdyAqLyB7Ci0gICAgLyogSUFDIFNCIENPTV9QT1JUIFNF VF9DT05UUk9MIDx2YWx1ZSgxKT0wPiBJQUMgU0UgKi8KLSAgICAvKiB3YWl0IGZvciByZXNwb25z ZSAqLwotICAgIGludCBpID0gMCwgcmM7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJ0bmNfZ2V0X29mbG93 IiwiYmVnaW4iLDApOwotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOwotICAg IGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKLQotICAgIGlmICghVEVMT1BU X01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYg KFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgewotICAg ICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgc2Jfb3V0 W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8K LSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdv dGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAgICAg IC8qIENvbVBvcnQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0VUX0NPTlRST0w7ICAg IC8qIFNldCBDb250cm9sICovCi0gICAgc2Jfb3V0W2krK10gPSBUTkNfQ1RMX09GTE9XX1JFUVVF U1Q7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogRW5k IG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAg ICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBp ZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWt4bXNnKHRuX21z Z19vdXQsVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRF TE9QVChURUxPUFRfQ09NUE9SVCksCi0gICAgICAgICAgICAgICAgICAiIFNFVC1DT05UUk9MICIs Ci0gICAgICAgICAgICAgICAgICAgY2tpdG9hKFROQ19DVExfT0ZMT1dfUkVRVUVTVCksCi0gICAg ICAgICAgICAgICAgICAgIiBJQUMgU0UiLCBOVUxMLAotICAgICAgICAgICAgICAgICAgTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lm ZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwot I2VuZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7Ci0g ICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwotI2VuZGlmIC8q IERFQlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8q IFNlbmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5k aWYKLSAgICBpZiAocmMpCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAodG5jX3dhaXQo KENIQVIgKikiY29tcG9ydCBnZXQgb3V0Ym91bmQgZmxvdyBjb250cm9sIiwwKSA8IDApIHsKLSAg ICAgICAgdG5fcHVzaCgpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhG MTExLCJ0bmNfZ2V0X29mbG93IiwiZW5kIix0bmNfb2Zsb3cpOwotICAgIHJldHVybih0bmNfb2Zs b3cpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5jX3NldF9pZmxvdyhpbnQgY29udHJv bCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi10bmNfc2V0X2lmbG93KGNvbnRyb2wpIGludCBjb250 cm9sOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfc2V0X2lmbG93ICovIHsKLSAgICAv KiBJQUMgU0IgQ09NX1BPUlQgU0VUX0NPTlRST0wgPHZhbHVlKDEpPiBJQUMgU0UgKi8KLSAgICAv KiAgICAgICAgVmFsdWUgICAgIEZsb3cgQ29udHJvbAotICAgICAqICAgICAgICAgMTQgICAgICAg Tm8gRmxvdyBDb250cm9sCi0gICAgICogICAgICAgICAxNSAgICAgICBYb24vWG9mZgotICAgICAq ICAgICAgICAgMTYgICAgICAgUnRzL0N0cwotICAgICAqICAgICAgICAgMTggICAgICAgRFRSCi0g ICAgICovCi0gICAgLyogd2FpdCBmb3IgcmVzcG9uc2UsIHJldHVybiBuZXcgaG9zdCB2YWx1ZS4g Ki8KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAgZGVidWcoRjExMSwidG5jX3NldF9pZmxvdyIs ImJlZ2luIixjb250cm9sKTsKLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsK LSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIVRF TE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKLQotI2lmZGVmIENLX1NTTAotICAg IGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsK LSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIGlm IChjb250cm9sICE9IDE0ICYmIGNvbnRyb2wgIT0gMTUgJiYgY29udHJvbCAhPSAxNiAmJiBjb250 cm9sICE9IDE4KQotICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKCBjb250cm9sICE9IDAgJiYg Y29udHJvbCA9PSB0bmNfaWZsb3cgKQotICAgICAgICByZXR1cm4odG5jX2lmbG93KTsKLQotICAg IHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21t YW5kICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyog U3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAg ICAgICAgICAvKiBDb21Qb3J0ICovCi0gICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9DT05U Uk9MOyAgICAvKiBTZXQgQ29udHJvbCAqLwotICAgIHNiX291dFtpKytdID0gKHVuc2lnbmVkIGNo YXIpKGNvbnRyb2wgJiAweEZGKTsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAg ICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9 IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNp ZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAg ICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRF TE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAg ICIgU0VULUNPTlRST0wgIiwgY2tpdG9hKGNvbnRyb2wpLCIgSUFDIFNFIiwgTlVMTCwKLSAgICAg ICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5k aWYgLyogREVCVUcgKi8KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9J TkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotI2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0 bl9tc2dfb3V0LCIiLDApOwotICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9t c2dfb3V0KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9v dXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VU ZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgaWYgKHJjKQotICAgICAgcmV0dXJuKC0xKTsKLQot ICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IHNldCBpbmJvdW5kIGZsb3cgY29udHJv bCIsMCkgPCAwKSB7Ci0gICAgICAgIHRuX3B1c2goKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICB9Ci0gICAgZGVidWcoRjExMSwidG5jX3NldF9pZmxvdyIsImVuZCIsdG5jX2lmbG93KTsKLSAg ICByZXR1cm4odG5jX2lmbG93KTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuY19nZXRf aWZsb3codm9pZCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi10bmNfZ2V0X2lmbG93KCkKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX2dldF9pZmxvdyAqLyB7Ci0gICAgLyogSUFDIFNCIENP TV9QT1JUIFNFVF9DT05UUk9MIDx2YWx1ZSgxKT0xMz4gSUFDIFNFICovCi0gICAgLyogd2FpdCBm b3IgcmVzcG9uc2UgKi8KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAgZGVidWcoRjExMCwidG5j X2dldF9pZmxvdyIsImJlZ2luIiwwKTsKLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVy bigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0KLSAgICBp ZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKLQotI2lmZGVmIENLX1NT TAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxv d3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQot ICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBD b21tYW5kICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAg LyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAg ICAgICAgICAgICAvKiBDb21Qb3J0ICovCi0gICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9D T05UUk9MOyAgICAvKiBTZXQgQ29udHJvbCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0NUTF9J RkxPV19SRVFVRVNUOwotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAg ICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIp IFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KLQotI2lmZGVmIERF QlVHCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGNrbWFr eG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAiVEVMTkVUIFNF TlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAotICAgICAgICAgICAgICAgICAgIiBTRVQt Q09OVFJPTCAiLAotICAgICAgICAgICAgICAgICAgY2tpdG9hKFROQ19DVExfSUZMT1dfUkVRVUVT VCksCi0gICAgICAgICAgICAgICAgICAiIElBQyBTRSIsIE5VTEwsCi0gICAgICAgICAgICAgICAg ICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVH ICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9X QUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwotICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwi IiwwKTsKLSAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0j ZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7 ICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgo KTsKLSNlbmRpZgotICAgIGlmIChyYykKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmICh0 bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IGdldCBpbmJvdW5kIGZsb3cgY29udHJvbCIsMCkgPCAw KSB7Ci0gICAgICAgIHRuX3B1c2goKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAg ZGVidWcoRjExMSwidG5jX2dldF9pZmxvdyIsImVuZCIsdG5jX2lmbG93KTsKLSAgICByZXR1cm4o dG5jX2lmbG93KTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuY19zZXRfYnJlYWtfc3Rh dGUoaW50IG9ub2ZmKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuY19zZXRfYnJlYWtfc3RhdGUo b25vZmYpIGludCBvbm9mZjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX3NldF9icmVh a19zdGF0ZSAqLyB7Ci0gICAgLyogSUFDIFNCIENPTV9QT1JUIFNFVF9DT05UUk9MIDx2YWx1ZSgx KT4gSUFDIFNFICovCi0gICAgLyogICAgICAgIFZhbHVlICAgICBCcmVhayBTdGF0ZQotICAgICAq ICAgICAgICAgIDUgICAgICAgT24KLSAgICAgKiAgICAgICAgICA2ICAgICAgIE9mZgotICAgICAq LwotICAgIC8qIHdhaXQgZm9yIHJlc3BvbnNlLCByZXR1cm4gbmV3IGhvc3QgdmFsdWUuICovCi0g ICAgaW50IGkgPSAwLCByYzsKLQotICAgIGRlYnVnKEYxMTEsInRuY19zZXRfYnJlYWtfc3RhdGUi LCJiZWdpbiIsb25vZmYpOwotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOwot ICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKLQotICAgIGlmICghVEVM T1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAg aWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgewot ICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgaWYg KCBvbm9mZiAhPSAwICYmIG9ub2ZmID09IHRuY19icmVhayApCi0gICAgICAgIHJldHVybih0bmNf YnJlYWspOwotCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAg LyogSSBBbSBhIENvbW1hbmQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAg ICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gVEVMT1BU X0NPTVBPUlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRO Q19DMlNfU0VUX0NPTlRST0w7ICAgIC8qIFNldCBDb250cm9sICovCi0gICAgc2Jfb3V0W2krK10g PSBvbm9mZiA/Ci0gICAgICBUTkNfQ1RMX0JSRUFLX09OIDogVE5DX0NUTF9CUkVBS19PRkY7Ci0g ICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1 Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAg ICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVi bG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWt4bXNnKHRuX21zZ19vdXQs VE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChU RUxPUFRfQ09NUE9SVCksCi0gICAgICAgICAgICAgICAgICAiIFNFVC1DT05UUk9MICIsCi0gICAg ICAgICAgICAgICAgICBvbm9mZiA/ICJCUkVBSy1PTiIgOiAiQlJFQUstT0ZGIiwKLSAgICAgICAg ICAgICAgICAgICIgSUFDIFNFIiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBP UzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRp ZgotI2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwotICAgIGlm ICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJV RyAqLwotICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5k IGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0g ICAgaWYgKHJjKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKHRuY193YWl0KChDSEFS ICopImNvbXBvcnQgc2V0IGJyZWFrIHN0YXRlIiwwKSA8IDApIHsKLSAgICAgICAgdG5fcHVzaCgp OwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X2Jy ZWFrX3N0YXRlIiwiZW5kIix0bmNfYnJlYWspOwotICAgIHJldHVybih0bmNfYnJlYWspOwotfQot Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5jX2dldF9icmVha19zdGF0ZSh2b2lkKQotI2Vsc2Ug LyogQ0tfQU5TSUMgKi8KLXRuY19nZXRfYnJlYWtfc3RhdGUoKQotI2VuZGlmIC8qIENLX0FOU0lD ICovCi0vKiB0bmNfZ2V0X2JyZWFrX3N0YXRlICovIHsKLSAgICAvKiBJQUMgU0IgQ09NX1BPUlQg U0VUX0NPTlRST0wgPHZhbHVlKDEpPTQ+IElBQyBTRSAqLwotICAgIC8qIHdhaXQgZm9yIHJlc3Bv bnNlICovCi0gICAgaW50IGkgPSAwLCByYzsKLQotICAgIGRlYnVnKEYxMTAsInRuY19nZXRfYnJl YWtfc3RhdGUiLCJiZWdpbiIsMCk7Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4o MCk7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotCi0gICAgaWYg KCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDS19TU0wK LSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dz KSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAg ICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29t bWFuZCAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8q IFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAg ICAgICAgICAgLyogQ29tUG9ydCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TRVRfQ09O VFJPTDsgICAgLyogU2V0IENvbnRyb2wgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DVExfQlJF QUtfUkVRVUVTVDsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAg ICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBT RTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBERUJV RwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBja21ha3ht c2codG5fbXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5U IFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAgICIgU0VULUNP TlRST0wgIiwKLSAgICAgICAgICAgICAgICAgICJCUkVBSy1SRVFVRVNUIiwKLSAgICAgICAgICAg ICAgICAgICIgSUFDIFNFIiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBPUzIK LSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgot I2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwotICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJVRyAq LwotICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0 LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAg aWYgKHJjKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKHRuY193YWl0KChDSEFSICop ImNvbXBvcnQgZ2V0IGJyZWFrIHN0YXRlIiwwKSA8IDApIHsKLSAgICAgICAgdG5fcHVzaCgpOwot ICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNfZ2V0X2JyZWFr X3N0YXRlIiwiZW5kIix0bmNfYnJlYWspOwotICAgIHJldHVybih0bmNfYnJlYWspOwotfQotCi1p bnQKLSNpZmRlZiBDS19BTlNJQwotdG5jX3NldF9kdHJfc3RhdGUoaW50IG9ub2ZmKQotI2Vsc2Ug LyogQ0tfQU5TSUMgKi8KLXRuY19zZXRfZHRyX3N0YXRlKG9ub2ZmKSBpbnQgb25vZmY7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuY19zZXRfZHRyX3N0YXRlICovIHsKLSAgICAvKiBJQUMg U0IgQ09NX1BPUlQgU0VUX0NPTlRST0wgPHZhbHVlKDEpPiBJQUMgU0UgKi8KLSAgICAvKiAgICAg ICAgVmFsdWUgICAgIER0ciBTdGF0ZQotICAgICAqICAgICAgICAgIDggICAgICAgT24KLSAgICAg KiAgICAgICAgICA5ICAgICAgIE9mZgotICAgICAqLwotICAgIC8qIHdhaXQgZm9yIHJlc3BvbnNl LCByZXR1cm4gbmV3IGhvc3QgdmFsdWUuICovCi0gICAgaW50IGkgPSAwLCByYzsKLQotICAgIGRl YnVnKEYxMTEsInRuY19zZXRfZHRyX3N0YXRlIiwiYmVnaW4iLG9ub2ZmKTsKLSAgICBpZiAodHRu ZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVU KSByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVy bigwKTsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RM Uykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNl bmRpZiAvKiBDS19TU0wgKi8KLQotICAgIGlmICggb25vZmYgIT0gMCAmJiBvbm9mZiA9PSB0bmNf ZHRyICkKLSAgICAgICAgcmV0dXJuKHRuY19kdHIpOwotCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KLSAgICBzYl9vdXRb aSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLwot ICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQg Ki8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0VUX0NPTlRST0w7ICAgIC8qIFNldCBDb250 cm9sICovCi0gICAgc2Jfb3V0W2krK10gPSBvbm9mZiA/Ci0gICAgICAgIFROQ19DVExfRFRSX09O IDogVE5DX0NUTF9EVFJfT0ZGOwotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAg ICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0g KENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KLQotI2lm ZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAg IGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAiVEVM TkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAotICAgICAgICAgICAgICAgICAg IiBTRVQtQ09OVFJPTCAiLAotICAgICAgICAgICAgICAgICAgb25vZmYgPyAiRFRSLU9OIiA6ICJE VFItT0ZGIiwKLSAgICAgICAgICAgICAgICAgICIgSUFDIFNFIiwgTlVMTCwKLSAgICAgICAgICAg ICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyog REVCVUcgKi8KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklO SVRFX1dBSVQgKTsKLSNlbmRpZgotI2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2df b3V0LCIiLDApOwotICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0 KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkg PCAwKTsgICAgICAvKiBTZW5kIGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRN dXRleCgpOwotI2VuZGlmCi0gICAgaWYgKHJjKQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlm ICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IHNldCBkdHIgc3RhdGUiLDApIDwgMCkgewotICAg ICAgICB0bl9wdXNoKCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGRlYnVnKEYx MTEsInRuY19zZXRfZHRyX3N0YXRlIiwiZW5kIix0bmNfZHRyKTsKLSAgICByZXR1cm4odG5jX2R0 cik7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bmNfZ2V0X2R0cl9zdGF0ZSh2b2lkKQot I2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuY19nZXRfZHRyX3N0YXRlKCkKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotLyogdG5jX2dldF9kdHJfc3RhdGUgKi8gewotICAgIC8qIElBQyBTQiBDT01fUE9S VCBTRVRfQ09OVFJPTCA8dmFsdWUoMSk9Nz4gSUFDIFNFICovCi0gICAgLyogd2FpdCBmb3IgcmVz cG9uc2UgKi8KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAgZGVidWcoRjExMCwidG5jX2dldF9k dHJfc3RhdGUiLCJiZWdpbiIsMCk7Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4o MCk7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotCi0gICAgaWYg KCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDS19TU0wK LSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dz KSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAg ICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29t bWFuZCAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8q IFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAg ICAgICAgICAgLyogQ29tUG9ydCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TRVRfQ09O VFJPTDsgICAgLyogU2V0IENvbnRyb2wgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DVExfRFRS X1JFUVVFU1Q7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAg LyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7 ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYgREVCVUcK LSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWt4bXNn KHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBT QiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCi0gICAgICAgICAgICAgICAgICAiIFNFVC1DT05U Uk9MICIsCi0gICAgICAgICAgICAgICAgICAiRFRSLVJFUVVFU1QiLAotICAgICAgICAgICAgICAg ICAgIiBJQUMgU0UiLCBOVUxMLAotICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIE9TMgotICAg IFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0jaWZk ZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7Ci0gICAgaWYgKHRuX2Rl YiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwotI2VuZGlmIC8qIERFQlVHICovCi0g ICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICov Ci0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICBpZiAo cmMpCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKHRuY193YWl0KChDSEFSICopImNvbXBv cnQgZ2V0IGR0ciBzdGF0ZSIsMCkgPCAwKSB7Ci0gICAgICAgIHRuX3B1c2goKTsKLSAgICAgICAg cmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwidG5jX2dldF9kdHJfc3RhdGUiLCJl bmQiLHRuY19kdHIpOwotICAgIHJldHVybih0bmNfZHRyKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tf QU5TSUMKLXRuY19zZXRfcnRzX3N0YXRlKGludCBvbm9mZikKLSNlbHNlIC8qIENLX0FOU0lDICov Ci10bmNfc2V0X3J0c19zdGF0ZShvbm9mZikgaW50IG9ub2ZmOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi0vKiB0bmNfc2V0X3J0c19zdGF0ZSAqLyB7Ci0gICAgLyogSUFDIFNCIENPTV9QT1JUIFNF VF9DT05UUk9MIDx2YWx1ZSgxKT4gSUFDIFNFICovCi0gICAgLyogICAgICAgIFZhbHVlICAgICBS dHMgU3RhdGUKLSAgICAgKiAgICAgICAgICA1ICAgICAgIE9uCi0gICAgICogICAgICAgICAgNiAg ICAgICBPZmYKLSAgICAgKi8KLSAgICAvKiB3YWl0IGZvciByZXNwb25zZSwgcmV0dXJuIG5ldyBo b3N0IHZhbHVlLiAqLwotICAgIGludCBpID0gMCwgcmM7Ci0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNf c2V0X3J0c19zdGF0ZSIsImJlZ2luIixvbm9mZik7Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BC KSByZXR1cm4oMCk7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwot Ci0gICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7Ci0KLSNpZmRl ZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5t ZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NM ICovCi0KLSAgICBpZiAoIG9ub2ZmICE9IDAgJiYgb25vZmYgPT0gdG5jX3J0cyApCi0gICAgICAg IHJldHVybih0bmNfcnRzKTsKLQotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAg ICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikg U0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsr XSA9IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCi0gICAgc2Jfb3V0 W2krK10gPSBUTkNfQzJTX1NFVF9DT05UUk9MOyAgICAvKiBTZXQgQ29udHJvbCAqLwotICAgIHNi X291dFtpKytdID0gb25vZmYgPwotICAgICAgVE5DX0NUTF9SVFNfT04gOiBUTkNfQ1RMX1JUU19P RkY7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogRW5k IG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAg ICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBp ZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWt4bXNnKHRuX21z Z19vdXQsVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRF TE9QVChURUxPUFRfQ09NUE9SVCksCi0gICAgICAgICAgICAgICAgICAiIFNFVC1DT05UUk9MICIs Ci0gICAgICAgICAgICAgICAgICBvbm9mZiA/ICJSVFMtT04iIDogIlJUUy1PRkYiLAotICAgICAg ICAgICAgICAgICAgIiBJQUMgU0UiLCBOVUxMLAotICAgICAgICAgICAgICAgICAgTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVm IE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2Vu ZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7Ci0gICAg aWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwotI2VuZGlmIC8qIERF QlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNl bmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYK LSAgICBpZiAocmMpCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKHRuY193YWl0KChDSEFS ICopImNvbXBvcnQgc2V0IHJ0cyBzdGF0ZSIsMCkgPCAwKSB7Ci0gICAgICAgIHRuX3B1c2goKTsK LSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwidG5jX3NldF9ydHNf c3RhdGUiLCJlbmQiLHRuY19ydHMpOwotICAgIHJldHVybih0bmNfcnRzKTsKLX0KLQotaW50Ci0j aWZkZWYgQ0tfQU5TSUMKLXRuY19nZXRfcnRzX3N0YXRlKHZvaWQpCi0jZWxzZSAvKiBDS19BTlNJ QyAqLwotdG5jX2dldF9ydHNfc3RhdGUoKQotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNf Z2V0X3J0c19zdGF0ZSAqLyB7Ci0gICAgLyogSUFDIFNCIENPTV9QT1JUIFNFVF9DT05UUk9MIDx2 YWx1ZSgxKT0xMD4gSUFDIFNFICovCi0gICAgLyogd2FpdCBmb3IgcmVzcG9uc2UgKi8KLSAgICBp bnQgaSA9IDAsIHJjOwotCi0gICAgZGVidWcoRjExMCwidG5jX2dldF9ydHNfc3RhdGUiLCJiZWdp biIsMCk7Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7Ci0gICAgaWYgKHR0 bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotCi0gICAgaWYgKCFURUxPUFRfTUUoVEVM T1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BU X1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJl dHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICBzYl9vdXRbaSsrXSA9 IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLwotICAgIHNi X291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9u ICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29t UG9ydCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TRVRfQ09OVFJPTDsgICAgLyogU2V0 IENvbnRyb2wgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DVExfUlRTX1JFUVVFU1Q7Ci0gICAg c2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5l Z290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAg ICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9n IHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWt4bXNnKHRuX21zZ19vdXQsVE5f TVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxP UFRfQ09NUE9SVCksCi0gICAgICAgICAgICAgICAgICAiIFNFVC1DT05UUk9MICIsCi0gICAgICAg ICAgICAgICAgICAiUlRTLVJFUVVFU1QiLAotICAgICAgICAgICAgICAgICAgIiBJQUMgU0UiLCBO VUxMLAotICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwot ICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRN dXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAgICBk ZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRu X2RlYnVnKHRuX21zZ19vdXQpOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgcmMgPSAodHRvbCgo Q0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1MyCi0g ICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICBpZiAocmMpCi0gICAgICAgIHJl dHVybigtMSk7Ci0KLSAgICBpZiAodG5jX3dhaXQoKENIQVIgKikiY29tcG9ydCBnZXQgcnRzIHN0 YXRlIiwwKSA8IDApIHsKLSAgICAgICAgdG5fcHVzaCgpOwotICAgICAgICByZXR1cm4oLTEpOwot ICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNfZ2V0X3J0c19zdGF0ZSIsImVuZCIsdG5jX3J0cyk7 Ci0gICAgcmV0dXJuKHRuY19ydHMpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5jX3Nl dF9sc19tYXNrKGludCBtYXNrKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuY19zZXRfbHNfbWFz ayhtYXNrKSBpbnQgbWFzazsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX3NldF9sc19t YXNrICovIHsKLSAgICAvKiBJQUMgU0IgQ09NX1BPUlQgU0VUX0xJTkVTVEFURV9NQVNLIDx2YWx1 ZSgxKT4gSUFDIFNFICovCi0gICAgLyogICAgICAgIEJpdCAgICAgICBNZWFuaW5nCi0gICAgICog ICAgICAgICAgMCAgICAgICBEYXRhIFJlYWR5Ci0gICAgICogICAgICAgICAgMSAgICAgICBPdmVy cnVuIEVycm9yCi0gICAgICogICAgICAgICAgMiAgICAgICBQYXJpdHkgRXJyb3IKLSAgICAgKiAg ICAgICAgICAzICAgICAgIEZyYW1pbmcgRXJyb3IKLSAgICAgKiAgICAgICAgICA0ICAgICAgIEJy ZWFrIERldGVjdCBFcnJvcgotICAgICAqICAgICAgICAgIDUgICAgICAgVHJhbnNmZXIgSG9sZGlu ZyBSZWdpc3RlciBFbXB0eQotICAgICAqICAgICAgICAgIDYgICAgICAgVHJhbnNmZXIgU2hpZnQg UmVnaXN0ZXIgRW1wdHkKLSAgICAgKiAgICAgICAgICA3ICAgICAgIFRpbWVvdXQgRXJyb3IKLSAg ICAgKi8KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAgZGVidWcoRjExMSwidG5jX3NldF9sc19t YXNrIiwiYmVnaW4iLG1hc2spOwotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDAp OwotICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKLQotICAgIGlmICgh VEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOwotCi0jaWZkZWYgQ0tfU1NMCi0g ICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykg ewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAg aWYgKCBtYXNrICE9IDAgJiYgbWFzayA9PSB0bmNfbHNfbWFzayApCi0gICAgICAgIHJldHVybih0 bmNfbHNfbWFzayk7Ci0KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAg ICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAg ICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSBU RUxPUFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLwotICAgIHNiX291dFtpKytd ID0gVE5DX0MyU19TRVRfTFNfTUFTSzsKLSAgICBzYl9vdXRbaSsrXSA9ICh1bnNpZ25lZCBjaGFy KShtYXNrICYgMHhGRik7Ci0gICAgaWYgKHNiX291dFtpLTFdID09IElBQyApCi0gICAgICBzYl9v dXRbaSsrXSA9IElBQzsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAg ICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFS KSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBE RUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBja21h a3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRFTE5FVCBT RU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAgICIgU0VU LUxJTkVTVEFURS1NQVNLICIsCi0gICAgICAgICAgICAgICAgICBja2l0b2EobWFzayAmIDB4RkYp LAotICAgICAgICAgICAgICAgICAgIiBJQUMgU0UiLCBOVUxMLAotICAgICAgICAgICAgICAgICAg TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAq LwotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJ VCApOwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIs MCk7Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwotI2Vu ZGlmIC8qIERFQlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAg ICAgIC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7 Ci0jZW5kaWYKLSAgICBpZiAocmMpCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgdG5jX2xzX21h c2sgPSBtYXNrOwotICAgIGRlYnVnKEYxMTEsInRuY19zZXRfbHNfbWFzayIsImVuZCIsdG5jX2xz X21hc2spOwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuY19n ZXRfbHNfbWFzayh2b2lkKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuY19nZXRfbHNfbWFzaygp Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuY19nZXRfbHNfbWFzayAqLyB7Ci0gICAgZGVi dWcoRjEwMSwidG5jX2dldF9sc19tYXNrIiwiIix0bmNfbHNfbWFzayk7Ci0gICAgcmV0dXJuKHRu Y19sc19tYXNrKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuY19nZXRfbHModm9pZCkK LSNlbHNlIC8qIENLX0FOU0lDICovCi10bmNfZ2V0X2xzKCkKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotLyogdG5jX2dldF9scyAqLyB7Ci0gICAgaW50IGxzID0gdG5jX2xzOwotICAgIGRlYnVnKEYx MDEsInRuY19nZXRfbHMiLCIiLHRuY19scyk7Ci0gICAgcmV0dXJuKGxzKTsKLX0KLQotaW50Ci0j aWZkZWYgQ0tfQU5TSUMKLXRuY19zZXRfbXNfbWFzayhpbnQgbWFzaykKLSNlbHNlIC8qIENLX0FO U0lDICovCi10bmNfc2V0X21zX21hc2sobWFzaykgaW50IG1hc2s7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLS8qIHRuY19zZXRfbXNfbWFzayAqLyB7Ci0gICAgLyogSUFDIFNCIENPTV9QT1JUIFNF VF9NT0RFTVNUQVRFX01BU0sgPHZhbHVlKDEpPiBJQUMgU0UgKi8KLSAgICAvKiAgICAgICAgQml0 ICAgICAgIE1lYW5pbmcKLSAgICAgKiAgICAgICAgICAwICAgICAgIERlbHRhIENsZWFyIFRvIFNl bmQKLSAgICAgKiAgICAgICAgICAxICAgICAgIERlbHRhIERhdGEgU2V0IFJlYWR5Ci0gICAgICog ICAgICAgICAgMiAgICAgICBUcmFpbGluZyBFZGdlIFJpbmcgRGV0ZWN0b3IKLSAgICAgKiAgICAg ICAgICAzICAgICAgIERlbHRhIFJlY2VpdmUgTGluZSBTaWduYWwgKENhcnJpZXIpIERldGVjdAot ICAgICAqICAgICAgICAgIDQgICAgICAgQ2xlYXIgVG8gU2VuZCBTaWduYWwgU3RhdGUKLSAgICAg KiAgICAgICAgICA1ICAgICAgIERhdGEtU2V0LVJlYWR5IFNpZ25hbCBTdGF0ZQotICAgICAqICAg ICAgICAgIDYgICAgICAgUmluZyBJbmRpY2F0b3IKLSAgICAgKiAgICAgICAgICA3ICAgICAgIFJl Y2VpdmUgTGluZSBTaWduYWwgKENhcnJpZXIpIERldGVjdAotICAgICAqLwotCi0gICAgaW50IGkg PSAwLCByYzsKLQotICAgIGRlYnVnKEYxMTEsInRuY19zZXRfbXNfbWFzayIsImJlZ2luIixtYXNr KTsKLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKLSAgICBpZiAodHRucHJv dG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRf Q09NUE9SVCkpIHJldHVybigwKTsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0Io VEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJu KDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIGlmICggbWFzayAhPSAwICYm IG1hc2sgPT0gdG5jX21zX21hc2sgKQotICAgICAgICByZXR1cm4odG5jX21zX21hc2spOwotCi0g ICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENv bW1hbmQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAv KiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAg ICAgICAgICAgIC8qIENvbVBvcnQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0VUX01T X01BU0s7Ci0gICAgc2Jfb3V0W2krK10gPSAodW5zaWduZWQgY2hhcikobWFzayAmIDB4RkYpOwot ICAgIGlmIChzYl9vdXRbaS0xXSA9PSBJQUMgKQotICAgICAgc2Jfb3V0W2krK10gPSBJQUM7Ci0g ICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1 Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAg ICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVi bG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWt4bXNnKHRuX21zZ19vdXQs VE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChU RUxPUFRfQ09NUE9SVCksCi0gICAgICAgICAgICAgICAgICAiIFNFVC1NT0RFTVNUQVRFLU1BU0sg IiwKLSAgICAgICAgICAgICAgICAgIGNraXRvYShtYXNrICYgMHhGRiksCi0gICAgICAgICAgICAg ICAgICAiIElBQyBTRSIsIE5VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0g ICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNp ZmRlZiBERUJVRwotICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8K LSAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4g Ki8KLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlm IChyYykKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICB0bmNfbXNfbWFzayA9IG1hc2s7Ci0gICAg ZGVidWcoRjExMSwidG5jX3NldF9tc19tYXNrIiwiZW5kIix0bmNfbXNfbWFzayk7Ci0gICAgcmV0 dXJuKDApOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5jX2dldF9tc19tYXNrKHZvaWQp Ci0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX2dldF9tc19tYXNrKCkKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotLyogdG5jX2dldF9tc19tYXNrICovIHsKLSAgICBkZWJ1ZyhGMTAxLCJ0bmNfZ2V0 X2dzX21hc2siLCIiLHRuY19tc19tYXNrKTsKLSAgICByZXR1cm4odG5jX21zX21hc2spOwotfQot Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5jX2dldF9tcyh2b2lkKQotI2Vsc2UgLyogQ0tfQU5T SUMgKi8KLXRuY19nZXRfbXMoKQotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfZ2V0X21z ICovIHsKLSAgICBpbnQgbXMgPSB0bmNfbXM7Ci0gICAgZGVidWcoRjEwMSwidG5jX2dldF9tcyIs IiIsdG5jX21zKTsKLSAgICByZXR1cm4obXMpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwot dG5jX3NlbmRfcHVyZ2VfZGF0YShpbnQgbW9kZSkKLSNlbHNlIC8qIENLX0FOU0lDICovCi10bmNf c2VuZF9wdXJnZV9kYXRhKG1vZGUpIGludCBtb2RlOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0v KiB0bmNfc2VuZF9wdXJnZV9kYXRhICovIHsKLSAgICAvKiBJQUMgU0IgQ09NX1BPUlQgUFVSR0Vf REFUQSA8dmFsdWUoMSk+IElBQyBTRSAqLwotICAgIC8qICAgICAgICBWYWx1ZSAgICAgTWVhbmlu ZwotICAgICAqICAgICAgICAgIDEgICAgICAgUHVyZ2UgYWNjZXNzIHNlcnZlciByZWNlaXZlIGRh dGEgYnVmZmVyCi0gICAgICogICAgICAgICAgMiAgICAgICBQdXJnZSBhY2Nlc3Mgc2VydmVyIHRy YW5zbWl0IGRhdGEgYnVmZmVyCi0gICAgICogICAgICAgICAgMyAgICAgICBQdXJnZSBhY2Nlc3Mg c2VydmVyIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGRhdGEgYnVmZmVycwotICAgICAqLwotICAgIC8q IE5vIHJlc3BvbnNlICovCi0gICAgaW50IGkgPSAwLCByYzsKLQotICAgIGRlYnVnKEYxMTEsInRu Y19zZW5kX3B1cmdlX2RhdGEiLCJiZWdpbiIsbW9kZSk7Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9U Q1BCKSByZXR1cm4oMCk7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDAp OwotCi0gICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7Ci0KLSNp ZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rs cy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tf U1NMICovCi0KLSAgICBpZiAoICEobW9kZSA+PSAxICYmIG1vZGUgPD0gMykgKQotICAgICAgICBy ZXR1cm4oMCk7Ci0KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAg ICAvKiBJIEFtIGEgQ29tbWFuZCAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAg ICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxP UFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLwotICAgIHNiX291dFtpKytdID0g VE5DX0MyU19QVVJHRTsKLSAgICBzYl9vdXRbaSsrXSA9ICh1bnNpZ25lZCBjaGFyKShtb2RlICYg MHhGRik7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyog RW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAg ICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYgREVCVUcKLSAg ICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWt4bXNnKHRu X21zZ19vdXQsVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAi LFRFTE9QVChURUxPUFRfQ09NUE9SVCksCi0gICAgICAgICAgICAgICAgICAiIFBVUkdFLURBVEEg IiwKLSAgICAgICAgICAgICAgICAgIGNraXRvYShtb2RlICYgMHhGRiksCi0gICAgICAgICAgICAg ICAgICAiIElBQyBTRSIsIE5VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0g ICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNp ZmRlZiBERUJVRwotICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8K LSAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4g Ki8KLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlm IChyYykKLSAgICAgIHJldHVybigtMSk7Ci0gICAgZGVidWcoRjExMCwidG5jX3NlbmRfcHVyZ2Vf ZGF0YSIsImVuZCIsMCk7Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJ QwotdG5jX2Zsb3dfc3VzcGVuZGVkKHZvaWQpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX2Zs b3dfc3VzcGVuZGVkKCkKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX2Zsb3dfc3VzcGVu ZGVkICovIHsKLSAgICBkZWJ1ZyhGMTExLCJ0bmNfZmxvd19zdXNwZW5kZWQiLCIiLHRuY19zdXNw ZW5kX3htaXQpOwotICAgIHJldHVybih0bmNfc3VzcGVuZF94bWl0KTsKLX0KLQotaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLXRuY19zdXNwZW5kX2Zsb3codm9pZCkKLSNlbHNlIC8qIENLX0FOU0lDICov Ci10bmNfc3VzcGVuZF9mbG93KCkKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX3N1c3Bl bmRfZmxvdyAqLyB7Ci0gICAgLyogSUFDIFNCIENPTV9QT1JUIEZMT1dDT05UUk9MX1NVU1BFTkQg SUFDIFNFICovCi0gICAgaW50IGkgPSAwLCByYzsKLQotICAgIGRlYnVnKEYxMTAsInRuY19zdXNw ZW5kX2Zsb3ciLCJiZWdpbiIsMCk7Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4o MCk7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotCi0gICAgaWYg KCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDS19TU0wK LSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dz KSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAg ICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29t bWFuZCAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8q IFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAg ICAgICAgICAgLyogQ29tUG9ydCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0MyU19GTE9XX1NV U1BFTkQ7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyog RW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAg ICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYgREVCVUcKLSAg ICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWttc2codG5f bXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixU RUxPUFQoVEVMT1BUX0NPTVBPUlQpLAotICAgICAgICAgICAgICAgICAiIEZMT1dDT05UUk9MLVNV U1BFTkQgSUFDIFNFIiwgTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYg T1MyCi0gICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5k aWYKLSNpZmRlZiBERUJVRwotICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAgICBp ZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVC VUcgKi8KLSAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2Vu ZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgot ICAgIGlmIChyYykKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICBkZWJ1ZyhGMTEwLCJ0bmNfc3Vz cGVuZF9mbG93IiwiZW5kIiwwKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotI2lmZGVmIENL X0FOU0lDCi10bmNfcmVzdW1lX2Zsb3codm9pZCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi10bmNf cmVzdW1lX2Zsb3coKQotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfcmVzdW1lX2Zsb3cg Ki8gewotICAgIC8qIElBQyBTQiBDT01fUE9SVCBGTE9XQ09OVFJPTF9SRVNVTUUgSUFDIFNFICov Ci0gICAgaW50IGkgPSAwLCByYzsKLQotICAgIGRlYnVnKEYxMTAsInRuY19yZXN1bWVfZmxvdyIs ImJlZ2luIiwwKTsKLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKLSAgICBp ZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIVRFTE9QVF9N RShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChU RUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAg ICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIHNiX291dFtp KytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0g ICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3Rp YXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAgICAv KiBDb21Qb3J0ICovCi0gICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX0ZMT1dfUkVTVU1FOwotICAg IHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJu ZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAg ICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxv ZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGNrbWFrbXNnKHRuX21zZ19vdXQsVE5f TVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9Q VF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAgIiBGTE9XQ09OVFJPTC1SRVNVTUUgSUFDIFNF IiwgTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0gICAgUmVx dWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBE RUJVRwotICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5fZGViIHx8 IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBy YyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KLSNp ZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlmIChyYykK LSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICBkZWJ1ZyhGMTEwLCJ0bmNfcmVzdW1lX2Zsb3ciLCJl bmQiLDApOwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuc2V0 ZmxvdyhpbnQgbmZsb3cpCi0jZWxzZQotdG5zZXRmbG93KG5mbG93KSBpbnQgbmZsb3c7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuc2V0ZmxvdyAqLyB7Ci0KLSAgICBpbnQgcmMgPSAtMTsK LQotICAgIGRlYnVnKEYxMTEsInRuc2V0ZmxvdyIsImJlZ2luIixuZmxvdyk7Ci0gICAgaWYgKHR0 bmV0ICE9IE5FVF9UQ1BCIHx8IHR0bnByb3RvICE9IE5QX1RFTE5FVCkKLSAgICAgICAgcmV0dXJu KC0xKTsKLQotICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSB7Ci0gICAgICAgIHN3 aXRjaChuZmxvdykgewotICAgICAgICAgIGNhc2UgRkxPX1hPTlg6Ci0gICAgICAgICAgICByYyA9 IHRuY19zZXRfb2Zsb3coCi0gICAgICAgICAgICAgICAgIFROQ19DVExfT0ZMT1dfWE9OX1hPRkYK LSAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGlmIChyYyA+PSAwKQotICAgICAgICAg ICAgICByYyA9IHRuY19zZXRfaWZsb3coCi0gICAgICAgICAgICAgICAgICAgVE5DX0NUTF9JRkxP V19YT05fWE9GRgotICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICBjYXNlIEZMT19SVFNDOgotICAgICAgICAgICAgcmMgPSB0bmNfc2V0X29mbG93KAot ICAgICAgICAgICAgICAgICBUTkNfQ1RMX09GTE9XX1JUU19DVFMKLSAgICAgICAgICAgICAgICAg KTsKLSAgICAgICAgICAgIGlmIChyYyA+PSAwKQotICAgICAgICAgICAgICByYyA9IHRuY19zZXRf aWZsb3coCi0gICAgICAgICAgICAgICAgICAgVE5DX0NUTF9JRkxPV19SVFNfQ1RTCi0gICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRkxPX0tF RVA6Ci0gICAgICAgICAgICAvKiBsZWF2ZSB0aGluZ3MgZXhhY3RseSBhcyB0aGV5IGFyZSAqLwot ICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBG TE9fTk9ORToKLSAgICAgICAgICBjYXNlIEZMT19ESUFMOiAgLyogZGlhbGluZyBoYWNrICovCi0g ICAgICAgICAgY2FzZSBGTE9fRElBWDogIC8qIGNhbmNlbCBkaWFsaW5nIGhhY2sgKi8KLSAgICAg ICAgICAgIHJjID0gdG5jX3NldF9vZmxvdygKLSAgICAgICAgICAgICAgICAgVE5DX0NUTF9PRkxP V19OT05FCi0gICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBpZiAocmMgPj0gMCkKLSAg ICAgICAgICAgICAgcmMgPSB0bmNfc2V0X2lmbG93KAotICAgICAgICAgICAgICAgICAgIFROQ19D VExfSUZMT1dfTk9ORQotICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgICBjYXNlIEZMT19EVFJDOgotICAgICAgICAgIGNhc2UgRkxPX0VUWEE6Ci0gICAg ICAgICAgY2FzZSBGTE9fU1RSRzoKLSAgICAgICAgICBjYXNlIEZMT19EVFJUOgotICAgICAgICAg IGRlZmF1bHQ6Ci0gICAgICAgICAgICAvKiBub3Qgc3VwcG9ydGVkICovCi0gICAgICAgICAgICBy YyA9IC0xOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVidWco RjExMSwidG5zZXRmbG93IiwiZW5kIixyYyk7Ci0gICAgcmV0dXJuKHJjID49IDAgPyAwIDogLTEp OwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5zZXR0aW5ncyhpbnQgcGFyLCBpbnQgc3Rv cCkKLSNlbHNlCi10bnNldHRpbmdzKHBhciwgc3RvcCkgaW50IHBhciwgc3RvcDsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotLyogdG5zZXR0aW5ncyAqLyB7Ci0gICAgaW50IHJjID0gLTE7Ci0gICAg aW50IGRhdGFzaXplID0gMDsKLSAgICBleHRlcm4gaW50IGh3cGFyaXR5OwotCi0gICAgZGVidWco RjExMSwidG5zZXR0aW5ncyBiZWdpbiIsInBhciIscGFyKTsKLSAgICBkZWJ1ZyhGMTExLCJ0bnNl dHRpbmdzIGJlZ2luIiwic3RvcCIsc3RvcCk7Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCIHx8 IHR0bnByb3RvICE9IE5QX1RFTE5FVCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBkYXRhc2l6 ZSA9IHBhciA/IFROQ19EU183IDogVE5DX0RTXzg7Ci0gICAgaWYgKCFwYXIpIHBhciA9IGh3cGFy aXR5OwotCi0gICAgaWYgKFRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHsKLSAgICAgICAgc3dp dGNoIChwYXIpIHsKLSAgICAgICAgICBjYXNlICdlJzoKLSAgICAgICAgICAgIHJjID0gdG5jX3Nl dF9wYXJpdHkoVE5DX1BBUl9FVkVOKTsKLSAgICAgICAgICAgIGlmIChyYyA+PSAwKQotICAgICAg ICAgICAgICByYyA9IHRuY19zZXRfZGF0YXNpemUoZGF0YXNpemUpOwotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgY2FzZSAnbyc6Ci0gICAgICAgICAgICByYyA9IHRuY19zZXRfcGFyaXR5 KFROQ19QQVJfT0REKTsKLSAgICAgICAgICAgIGlmIChyYyA+PSAwKQotICAgICAgICAgICAgICBy YyA9IHRuY19zZXRfZGF0YXNpemUoZGF0YXNpemUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgY2FzZSAnbSc6Ci0gICAgICAgICAgICByYyA9IHRuY19zZXRfcGFyaXR5KFROQ19QQVJf TUFSSyk7Ci0gICAgICAgICAgICBpZiAocmMgPj0gMCkKLSAgICAgICAgICAgICAgcmMgPSB0bmNf c2V0X2RhdGFzaXplKGRhdGFzaXplKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh c2UgJ3MnOgotICAgICAgICAgICAgcmMgPSB0bmNfc2V0X3Bhcml0eShUTkNfUEFSX1NQQUNFKTsK LSAgICAgICAgICAgIGlmIChyYyA+PSAwKQotICAgICAgICAgICAgICByYyA9IHRuY19zZXRfZGF0 YXNpemUoZGF0YXNpemUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAwOgot ICAgICAgICAgIGNhc2UgJ24nOgotICAgICAgICAgICAgcmMgPSB0bmNfc2V0X3Bhcml0eShUTkNf UEFSX05PTkUpOwotICAgICAgICAgICAgaWYgKHJjID49IDApCi0gICAgICAgICAgICAgIHJjID0g dG5jX3NldF9kYXRhc2l6ZShkYXRhc2l6ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICBkZWZhdWx0OgotICAgICAgICAgICAgLyogbm8gY2hhbmdlICovCi0gICAgICAgICAgICByYyA9 IDA7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoKHN0b3ApIHsKLSAgICAgICAgICBjYXNlIDI6 Ci0gICAgICAgICAgICBpZiAocmMgPj0gMCkKLSAgICAgICAgICAgICAgcmMgPSB0bmNfc2V0X3N0 b3BzaXplKFROQ19TQl8yKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMToK LSAgICAgICAgICAgIGlmIChyYyA+PSAwKQotICAgICAgICAgICAgICByYyA9IHRuY19zZXRfc3Rv cHNpemUoVE5DX1NCXzEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK LSAgICAgICAgICAgIC8qIG5vIGNoYW5nZSAqLwotICAgICAgICAgICAgaWYgKHJjID49IDApCi0g ICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0 bnNldHRpbmdzIiwiZW5kIixyYyk7Ci0gICAgcmV0dXJuKChyYyA+PSAwKSA/IDAgOiAtMSk7Ci19 Ci0KLS8qICBUIE4gRyBNIEQgTSAgLS0gIFRlbG5ldCBHZXQgbW9kZW0gc2lnbmFscyAgKi8KLS8q Ci0gTG9va3MgZm9yIHRoZSBtb2RlbSBzaWduYWxzIENUUywgRFNSLCBhbmQgQ1RTLCBhbmQgcmV0 dXJucyB0aG9zZSB0aGF0IGFyZQotIG9uIGluIGFzIGl0cyByZXR1cm4gdmFsdWUsIGluIGEgYml0 IG1hc2sgYXMgZGVzY3JpYmVkIGZvciB0dHdtZG0uCi0gUmV0dXJuczoKLSAgLTMgTm90IGltcGxl bWVudGVkCi0gIC0yIGlmIHRoZSBsaW5lIGRvZXMgbm90IGhhdmUgbW9kZW0gY29udHJvbAotICAt MSBvbiBlcnJvci4KLSAgPj0gMCBvbiBzdWNjZXNzLCB3aXRoIGEgYml0IG1hc2sgY29udGFpbmlu ZyB0aGUgbW9kZW0gc2lnbmFscyB0aGF0IGFyZSBvbi4KLSovCi1pbnQKLSNpZmRlZiBDS19BTlNJ QwotdG5nbWRtKHZvaWQpCi0jZWxzZQotdG5nbWRtKCkKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot LyogdG5nbWRtICovIHsKLQotICAgIGludCByYyA9IC0xOwotCi0gICAgZGVidWcoRjExMCwidG5n bWRtIiwiYmVnaW4iLDApOwotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQiB8fCB0dG5wcm90byAh PSBOUF9URUxORVQpCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKFRFTE9QVF9NRShURUxP UFRfQ09NUE9SVCkpIHsKLSAgICAgICAgaW50IG1vZGVtc3RhdGUgPSB0bmNfZ2V0X21zKCk7Ci0g ICAgICAgIGludCBtb2RlbSA9IDA7Ci0gICAgICAgIGlmIChtb2RlbXN0YXRlICYgVE5DX01TX0NU U19TSUcpCi0gICAgICAgICAgbW9kZW0gfD0gQk1fQ1RTOwotICAgICAgICBpZiAobW9kZW1zdGF0 ZSAmIFROQ19NU19EU1JfU0lHKQotICAgICAgICAgIG1vZGVtIHw9IEJNX0RTUjsKLSAgICAgICAg aWYgKG1vZGVtc3RhdGUgJiBUTkNfTVNfUklfU0lHKQotICAgICAgICAgIG1vZGVtIHw9IEJNX1JO RzsKLSAgICAgICAgaWYgKG1vZGVtc3RhdGUgJiBUTkNfTVNfUkxTRF9TSUcpCi0gICAgICAgICAg bW9kZW0gfD0gQk1fRENEOwotICAgICAgICBkZWJ1ZyhGMTExLCJ0bmdtZG0iLCJlbmQiLG1vZGVt KTsKLSAgICAgICAgcmV0dXJuKG1vZGVtKTsKLSAgICB9IGVsc2UgewotICAgICAgICBkZWJ1ZyhG MTExLCJ0bmdtZG0iLCJlbmQiLC0yKTsKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci19Ci0K LWludAotI2lmZGVmIENLX0FOU0lDCi10bnNuZGIobG9uZyB3YWl0KQotI2Vsc2UKLXRuc25kYih3 YWl0KSBsb25nIHdhaXQ7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuc25kYiAqLyB7Ci0g ICAgaW50IHJjID0gLTE7Ci0KLSAgICBkZWJ1ZyhGMTExLCJ0bnNuZGIiLCJiZWdpbiIsd2FpdCk7 Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCIHx8IHR0bnByb3RvICE9IE5QX1RFTE5FVCkKLSAg ICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgewot ICAgICAgICByYyAgPSB0bmNfc2V0X2JyZWFrX3N0YXRlKDEpOwotICAgICAgICBpZiAocmMgPj0g MCkgewotICAgICAgICAgICAgbXNsZWVwKHdhaXQpOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBaWlp6enogKi8KLSAgICAgICAgICAgIHJjID0gdG5jX3NldF9icmVha19zdGF0ZSgwKTsKLSAg ICAgICAgfQotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0bnNuZGIiLCJlbmQiLHJjKTsKLSAgICBy ZXR1cm4oKHJjID49IDApID8gMCA6IC0xKTsKLX0KLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0j ZW5kaWYgLyogVE5DT0RFICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja2N0ZWwuaCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2tjdGVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MmUzOTYuLjAw MDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N0ZWwu aAorKysgL2Rldi9udWxsCkBAIC0xLDEzMzYgKzAsMCBAQAotLyogY2tjdGVsLmggLS0gU3ltYm9s IGFuZCBtYWNybyBkZWZpbml0aW9ucyBmb3IgQy1LZXJtaXQgdGVsbmV0IHN1cHBvcnQgKi8KLQot LyoKLSAgQXV0aG9yczogSmVmZnJleSBFIEFsdG1hbiA8amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRz LmNvbT4sCi0gICAgICAgICAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0 eQotICAgICAgICAgICBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PgotICBDb2x1bWJp YSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHku Ci0KLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA5LAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlh IFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNl cnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5 cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJt aXNzaW9ucy4KLQotICBOb3RlczoKLSAgLiBUaGlzIGZpbGUgc2hvdWxkIGJlIHVzZWQgaW4gcGxh Y2Ugb2YgImFycGEvdGVsbmV0LmgiCi0gIC4gT25seSBvbmUgc291cmNlIGZpbGUgc2hvdWxkIGlu Y2x1ZGUgI2RlZmluZXMgZm9yCi0gICAgVEVMQ01EUywgVEVMT1BUUywgVEVMT1BUX1NUQVRFUywg U0xDX05BTUVTLCBhbmQgQVVUSF9OQU1FUy4KLSovCi0KLSNpZm5kZWYgQ0tDVEVMX0gKLSNkZWZp bmUgQ0tDVEVMX0gKLSNpZmRlZiBUTkNPREUKLS8qCi0gIERlZmluaXRpb25zIGZvciB0aGUgVEVM TkVUIHByb3RvY29sLgotICBjYW4ndCByZWx5IG9uIGxpYnJhcnkgaGVhZGVyIGZpbGVzIGZvciBh bnkgb2YgdGhlbS4KLSovCi0jaWZkZWYgQ09NTUVOVAotLyogSW4gc29tZSBjb21waWxlcnMgdGhl c2UgYXJlIHByb25lIHRvIHNpZ24gZXh0ZW5zaW9uICovCi0KLSNpZm5kZWYgSUFDICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCB0aGUgdGVsbmV0IGNvbW1hbmRzICovCi0jZGVm aW5lIElBQyAyNTUKLSNlbmRpZiAvKiBJQUMgKi8KLSNpZm5kZWYgRE9OVAotI2RlZmluZSBET05U IDI1NAotI2VuZGlmIC8qIERPTlQgKi8KLSNpZm5kZWYgRE8KLSNkZWZpbmUgRE8gMjUzCi0jZW5k aWYgLyogRE8gKi8KLSNpZm5kZWYgV09OVAotI2RlZmluZSBXT05UIDI1MgotI2VuZGlmIC8qIFdP TlQgKi8KLSNpZm5kZWYgV0lMTAotI2RlZmluZSBXSUxMIDI1MQotI2VuZGlmIC8qIFdJTEwgKi8K LSNpZm5kZWYgU0IKLSNkZWZpbmUgU0IgMjUwCi0jZW5kaWYgLyogU0IgKi8KLSNpZm5kZWYgVE5f R0EKLSNkZWZpbmUgVE5fR0EgMjQ5Ci0jZW5kaWYgLyogVE5fR0EgKi8KLSNpZm5kZWYgVE5fRUwK LSNkZWZpbmUgVE5fRUwgMjQ4Ci0jZW5kaWYgLyogVE5fRUwgKi8KLSNpZm5kZWYgVE5fRUMKLSNk ZWZpbmUgVE5fRUMgMjQ3Ci0jZW5kaWYgLyogVE5fRUMgKi8KLSNpZm5kZWYgVE5fQVlUCi0jZGVm aW5lIFROX0FZVCAyNDYKLSNlbmRpZiAvKiBUTl9BWVQgKi8KLSNpZm5kZWYgVE5fQU8KLSNkZWZp bmUgVE5fQU8gMjQ1Ci0jZW5kaWYgLyogVE5fQU8gKi8KLSNpZm5kZWYgVE5fSVAKLSNkZWZpbmUg VE5fSVAgMjQ0Ci0jZW5kaWYgLyogVE5fSVAgKi8KLSNpZm5kZWYgQlJFQUsKLSNkZWZpbmUgQlJF QUsgMjQzCi0jZW5kaWYgLyogQlJFQUsgKi8KLSNpZm5kZWYgVE5fRE0KLSNkZWZpbmUgVE5fRE0g MjQyCi0jZW5kaWYgLyogVE5fRE0gKi8KLSNpZm5kZWYgVE5fTk9QCi0jZGVmaW5lIFROX05PUCAy NDEKLSNlbmRpZiAvKiBUTl9OT1AgKi8KLSNpZm5kZWYgU0UKLSNkZWZpbmUgU0UgMjQwCi0jZW5k aWYgLyogU0UgKi8KLSNpZm5kZWYgVE5fRU9SCi0jZGVmaW5lIFROX0VPUiAyMzkKLSNlbmRpZiAv KiBUTl9FT1IgKi8KLSNpZm5kZWYgVE5fQUJPUlQKLSNkZWZpbmUgVE5fQUJPUlQgMjM4Ci0jZW5k aWYgLyogVE5fQUJPUlQgKi8KLSNpZm5kZWYgVE5fU1VTUAotI2RlZmluZSBUTl9TVVNQIDIzNwot I2VuZGlmIC8qIFROX1NVU1AgKi8KLSNpZm5kZWYgVE5fRU9GCi0jZGVmaW5lIFROX0VPRiAyMzYK LSNlbmRpZiAvKiBUTl9FT0YgKi8KLSNpZm5kZWYgTEFTVF9UTl9DTUQKLSNkZWZpbmUgTEFTVF9U Tl9DTUQgMjM2Ci0KLSNkZWZpbmUgVE5fU0FLIDIwMCAgICAgICAgICAgICAgLyogSUJNIFNlY3Vy ZSBBdHRlbnRpb24gS2V5ICovCi0jZW5kaWYgLyogTEFTVF9UTl9DTUQgKi8KLSNkZWZpbmUgU1lO Q0ggICAyNDIgICAgICAgICAgICAgLyogZm9yIHRlbGZ1bmMgY2FsbHMgKi8KLQotI2Vsc2UKLS8q IEhleCBub3RhdGlvbiBzZWVtcyB0byBzdXBwcmVzcyB0aGUgc3VnbiBleHRlbnNpb24gZWZmZWN0 ICovCi0KLQotI2lmbmRlZiBJQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0 IHRoZSB0ZWxuZXQgY29tbWFuZHMgKi8KLSNkZWZpbmUgSUFDIDB4ZmYKLSNlbmRpZiAvKiBJQUMg Ki8KLSNpZm5kZWYgRE9OVAotI2RlZmluZSBET05UIDB4ZmUJCQkvKiAyNTQgKi8KLSNlbmRpZiAv KiBET05UICovCi0jaWZuZGVmIERPCi0jZGVmaW5lIERPIDB4ZmQJCQkJLyogMjUzICovCi0jZW5k aWYgLyogRE8gKi8KLSNpZm5kZWYgV09OVAotI2RlZmluZSBXT05UIDB4ZmMJCQkvKiAyNTIgKi8K LSNlbmRpZiAvKiBXT05UICovCi0jaWZuZGVmIFdJTEwKLSNkZWZpbmUgV0lMTCAweGZiCQkJLyog MjUxICovCi0jZW5kaWYgLyogV0lMTCAqLwotI2lmbmRlZiBTQgotI2RlZmluZSBTQiAweGZhCQkJ CS8qIDI1MCAqLwotI2VuZGlmIC8qIFNCICovCi0jaWZuZGVmIFROX0dBCi0jZGVmaW5lIFROX0dB IDB4ZjkJCQkvKiAyNDkgKi8KLSNlbmRpZiAvKiBUTl9HQSAqLwotI2lmbmRlZiBUTl9FTAotI2Rl ZmluZSBUTl9FTCAweGY4CQkJLyogMjQ4ICovCi0jZW5kaWYgLyogVE5fRUwgKi8KLSNpZm5kZWYg VE5fRUMKLSNkZWZpbmUgVE5fRUMgMHhmNwkJCS8qIDI0NyAqLwotI2VuZGlmIC8qIFROX0VDICov Ci0jaWZuZGVmIFROX0FZVAotI2RlZmluZSBUTl9BWVQgMHhmNgkJCS8qIDI0NiAqLwotI2VuZGlm IC8qIFROX0FZVCAqLwotI2lmbmRlZiBUTl9BTwotI2RlZmluZSBUTl9BTyAweGY1CQkJLyogMjQ1 ICovCi0jZW5kaWYgLyogVE5fQU8gKi8KLSNpZm5kZWYgVE5fSVAKLSNkZWZpbmUgVE5fSVAgMHhm NAkJCS8qIDI0NCAqLwotI2VuZGlmIC8qIFROX0lQICovCi0jaWZuZGVmIEJSRUFLCi0jZGVmaW5l IEJSRUFLIDB4ZjMJCQkvKiAyNDMgKi8KLSNlbmRpZiAvKiBCUkVBSyAqLwotI2lmbmRlZiBUTl9E TQotI2RlZmluZSBUTl9ETSAweGYyCQkJLyogMjQyICovCi0jZW5kaWYgLyogVE5fRE0gKi8KLSNp Zm5kZWYgVE5fTk9QCi0jZGVmaW5lIFROX05PUCAweGYxCQkJLyogMjQxICovCi0jZW5kaWYgLyog VE5fTk9QICovCi0jaWZuZGVmIFNFCi0jZGVmaW5lIFNFIDB4ZjAJCQkJLyogMjQwICovCi0jZW5k aWYgLyogU0UgKi8KLSNpZm5kZWYgVE5fRU9SCi0jZGVmaW5lIFROX0VPUiAweGVmCQkJLyogMjM5 ICovCi0jZW5kaWYgLyogVE5fRU9SICovCi0jaWZuZGVmIFROX0FCT1JUCi0jZGVmaW5lIFROX0FC T1JUIDB4ZWUJCQkvKiAyMzggKi8KLSNlbmRpZiAvKiBUTl9BQk9SVCAqLwotI2lmbmRlZiBUTl9T VVNQCi0jZGVmaW5lIFROX1NVU1AgMHhlZAkJCS8qIDIzNyAqLwotI2VuZGlmIC8qIFROX1NVU1Ag Ki8KLSNpZm5kZWYgVE5fRU9GCi0jZGVmaW5lIFROX0VPRiAweGVjCQkJLyogMjM2ICovCi0jZW5k aWYgLyogVE5fRU9GICovCi0jaWZuZGVmIExBU1RfVE5fQ01ECi0jZGVmaW5lIExBU1RfVE5fQ01E IDB4ZWMJCS8qIDIzNiAqLwotCi0jZGVmaW5lIFROX1NBSyAweGM4CQkJLyogMjAwIC0gSUJNIFNl Y3VyZSBBdHRlbnRpb24gS2V5ICovCi0jZW5kaWYgLyogTEFTVF9UTl9DTUQgKi8KLSNkZWZpbmUg U1lOQ0ggMHhmMgkJCS8qIDI0MiAtIGZvciB0ZWxmdW5jIGNhbGxzICovCi0KLSNlbmRpZgkvKiBD T01NRU5UICovCi0KLSNpZmRlZiBURUxDTURTCi1jaGFyICp0ZWxjbWRzW10gPSB7Ci0gICAgICAg ICJFT0YiLCAiU1VTUCIsICJBQk9SVCIsICJFT1IiLAotICAgICAgICAiU0UiLCAiTk9QIiwgIkRN QVJLIiwgIkJSSyIsICJJUCIsICJBTyIsICJBWVQiLCAiRUMiLAotICAgICAgICAiRUwiLCAiR0Ei LCAiU0IiLCAiV0lMTCIsICJXT05UIiwgIkRPIiwgIkRPTlQiLCAiSUFDIiwgMAotfTsKLSNlbHNl IC8qIFRFTENNRFMgKi8KLWV4dGVybiBjaGFyICp0ZWxjbWRzW107Ci0jZW5kaWYgLyogVEVMQ01E UyAqLwotCi0jZGVmaW5lIFRFTENNRF9GSVJTVCAgICBUTl9FT0YKLSNkZWZpbmUgVEVMQ01EX0xB U1QgICAgIElBQwotI2RlZmluZSBURUxDTURfT0soeCkgICAgKCh1bnNpZ25lZCBpbnQpKHgpIDw9 IFRFTENNRF9MQVNUICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50 KSh4KSA+PSBURUxDTURfRklSU1QgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAodW5z aWduZWQgaW50KSh4KSA9PSBUTl9TQUspCi0jZGVmaW5lIFRFTENNRCh4KSAgICAgICAoVEVMQ01E X09LKHgpPyAoKHgpID09IFROX1NBSz8iU0FLIjogXAotICAgICAgICAgICAgICAgICAgICAgICAg IHRlbGNtZHNbKHgpLVRFTENNRF9GSVJTVF0pOiJVTktOT1dOIikKLQotLyogVGhlbiB0aGUgb3B0 aW9ucyAqLwotLyogTkI6IHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zIGhhdmUgVEVMT1BUX0FVVEhF TlRJQ0FUSU9OIGRlZmluZWQgYXMgKi8KLS8qIDQ1IGluc3RlYWQgb2YgMzcuICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWZkZWYgVEVMT1BUX0FV VEhFTlRJQ0FUSU9OCi0jaWZkZWYgX19vc2ZfXwotI3VuZGVmIFRFTE9QVF9BVVRIRU5USUNBVElP TgotI2VuZGlmIC8qIF9fb3NmX18gKi8KLSNpZm5kZWYgSVJJWAotI3VuZGVmIFRFTE9QVF9BVVRI RU5USUNBVElPTgotI2VuZGlmIC8qIElSSVggKi8KLSNpZm5kZWYgdWx0cml4Ci0jdW5kZWYgVEVM T1BUX0FVVEhFTlRJQ0FUSU9OCi0jZW5kaWYgLyogdWx0cml4ICovCi0jZW5kaWYgLyogVEVMT1BU X0FVVEhFTlRJQ0FUSU9OICovCi0KLS8qIHRlbG5ldCBvcHRpb25zICovCi0jaWZuZGVmIFRFTE9Q VF9CSU5BUlkKLSNkZWZpbmUgVEVMT1BUX0JJTkFSWSAgIDAgICAgICAgLyogOC1iaXQgZGF0YSBw YXRoIChSRkMgODU2KSovCi0jZW5kaWYKLSNpZm5kZWYgVEVMT1BUX0VDSE8KLSNkZWZpbmUgVEVM T1BUX0VDSE8gICAgIDEgICAgICAgLyogZWNobyAoUkZDIDg1NykqLwotI2VuZGlmCi0jaWZuZGVm IFRFTE9QVF9SQ1AKLSNkZWZpbmUgVEVMT1BUX1JDUCAgICAgIDIgICAgICAgLyogcHJlcGFyZSB0 byByZWNvbm5lY3QgKE5JQyA1MDAwNSkqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9TR0EKLSNk ZWZpbmUgVEVMT1BUX1NHQSAgICAgIDMgICAgICAgLyogc3VwcHJlc3MgZ28gYWhlYWQgKFJGQyA4 NTgpICovCi0jZW5kaWYKLSNpZm5kZWYgVEVMT1BUX05BTVMKLSNkZWZpbmUgVEVMT1BUX05BTVMg ICAgIDQgICAgICAgLyogYXBwcm94aW1hdGUgbWVzc2FnZSBzaXplIChFVEhFUk5FVCkgKi8KLSNl bmRpZgotI2lmbmRlZiBURUxPUFRfU1RBVFVTCi0jZGVmaW5lIFRFTE9QVF9TVEFUVVMgICA1ICAg ICAgIC8qIGdpdmUgc3RhdHVzIChSRkMgODU5KSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9U TQotI2RlZmluZSBURUxPUFRfVE0gICAgICAgNiAgICAgICAvKiB0aW1pbmcgbWFyayAoUkZDIDg2 MCkgKi8KLSNlbmRpZgotI2lmbmRlZiBURUxPUFRfUkNURQotI2RlZmluZSBURUxPUFRfUkNURSAg ICAgNyAgICAgICAvKiByZW1vdGUgY29udHJvbGxlZCB0cmFuc21pc3Npb24gYW5kIGVjaG8gKi8K LSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKFJGQyA3MjYpICovCi0jaWZuZGVm IFRFTE9QVF9OQU9MCi0jZGVmaW5lIFRFTE9QVF9OQU9MICAgICA4ICAgICAgIC8qIG5lZ290aWF0 ZSBhYm91dCBvdXRwdXQgbGluZSB3aWR0aCAqLwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAoTklDIDUwMDA1KSAqLwotI2lmbmRlZiBURUxPUFRfTkFPUAotI2RlZmluZSBURUxP UFRfTkFPUCAgICAgOSAgICAgICAvKiBuZWdvdGlhdGUgYWJvdXQgb3V0cHV0IHBhZ2Ugc2l6ZSAq LwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoTklDIDUwMDA1KSAqLwotI2lm bmRlZiBURUxPUFRfTkFPQ1JECi0jZGVmaW5lIFRFTE9QVF9OQU9DUkQgICAxMCAgICAgIC8qIG5l Z290aWF0ZSBhYm91dCBDUiBkaXNwb3NpdGlvbiAoUkZDIDY1MikgKi8KLSNlbmRpZiAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogW0hpc3RvcmljXSAqLwotI2lmbmRlZiBURUxPUFRfTkFPSFRT Ci0jZGVmaW5lIFRFTE9QVF9OQU9IVFMgICAxMSAgICAgIC8qIG5lZ290aWF0ZSBhYm91dCBob3Jp em9udGFsIHRhYnN0b3BzICovCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChS RkMgNjUzKSBbSGlzdG9yaWNdICovCi0jaWZuZGVmIFRFTE9QVF9OQU9IVEQKLSNkZWZpbmUgVEVM T1BUX05BT0hURCAgIDEyICAgICAgLyogbmVnb3RpYXRlIGFib3V0IGhvcml6IHRhYiBkaXNwb3Np dGlvbiAqLwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoUkZDIDY1NCkgW0hp c3RvcmljXSAqLwotI2lmbmRlZiBURUxPUFRfTkFPRkZECi0jZGVmaW5lIFRFTE9QVF9OQU9GRkQg ICAxMyAgICAgIC8qIG5lZ290aWF0ZSBhYm91dCBmb3JtZmVlZCBkaXNwb3NpdGlvbiAqLwotI2Vu ZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoUkZDIDY1NSkgW0hpc3RvcmljXSAqLwot I2lmbmRlZiBURUxPUFRfTkFPVlRTCi0jZGVmaW5lIFRFTE9QVF9OQU9WVFMgICAxNCAgICAgIC8q IG5lZ290aWF0ZSBhYm91dCB2ZXJ0aWNhbCB0YWIgc3RvcHMgKi8KLSNlbmRpZiAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogKFJGQyA2NTYpIFtIaXN0b3JpY10gKi8KLSNpZm5kZWYgVEVMT1BU X05BT1ZURAotI2RlZmluZSBURUxPUFRfTkFPVlREICAgMTUgICAgICAvKiBuZWdvdGlhdGUgYWJv dXQgdmVydGljYWwgdGFiIGRpc3Bvc2l0aW9uICovCi0jZW5kaWYgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIChSRkMgNjU3KSBbSGlzdG9yaWNdICovCi0jaWZuZGVmIFRFTE9QVF9OQU9MRkQK LSNkZWZpbmUgVEVMT1BUX05BT0xGRCAgIDE2ICAgICAgLyogbmVnb3RpYXRlIGFib3V0IG91dHB1 dCBMRiBkaXNwb3NpdGlvbiAqLwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAo UkZDIDY1OCkgW0hpc3RvcmljXSAqLwotI2lmbmRlZiBURUxPUFRfWEFTQ0lJCi0jZGVmaW5lIFRF TE9QVF9YQVNDSUkgICAxNyAgICAgIC8qIGV4dGVuZGVkIGFzY2lpIGNoYXJhY3RlciBzZXQgKi8K LSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKFJGQyA2OTgpICovCi0jaWZuZGVm IFRFTE9QVF9MT0dPVVQKLSNkZWZpbmUgVEVMT1BUX0xPR09VVCAgIDE4ICAgICAgLyogZm9yY2Ug bG9nb3V0IChSRkMgNzI3KSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9CTQotI2RlZmluZSBU RUxPUFRfQk0gICAgICAgMTkgICAgICAvKiBieXRlIG1hY3JvIChSRkMgNzM1KSAqLwotI2VuZGlm Ci0jaWZuZGVmIFRFTE9QVF9ERVQKLSNkZWZpbmUgVEVMT1BUX0RFVCAgICAgIDIwICAgICAgLyog ZGF0YSBlbnRyeSB0ZXJtaW5hbCAoUkZDIDEwNDMsIDczMikgKi8KLSNlbmRpZgotI2lmbmRlZiBU RUxPUFRfU1VQRFVQCi0jZGVmaW5lIFRFTE9QVF9TVVBEVVAgICAyMSAgICAgIC8qIHN1cGR1cCBw cm90b2NvbCAoUkZDIDczNiwgNzM0KSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9TVVBEVVBP VVRQVVQKLSNkZWZpbmUgVEVMT1BUX1NVUERVUE9VVFBVVCAyMiAgLyogc3VwZHVwIG91dHB1dCAo UkZDIDc0OSkgKi8KLSNlbmRpZgotI2lmbmRlZiBURUxPUFRfU05ETE9DCi0jZGVmaW5lIFRFTE9Q VF9TTkRMT0MgICAyMyAgICAgIC8qIHNlbmQgbG9jYXRpb24gKFJGQyA3NzkpICovCi0jZW5kaWYK LSNpZm5kZWYgVEVMT1BUX1RUWVBFCi0jZGVmaW5lIFRFTE9QVF9UVFlQRSAgICAyNCAgICAgIC8q IHRlcm1pbmFsIHR5cGUgKFJGQyAxMDkxKSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9FT1IK LSNkZWZpbmUgVEVMT1BUX0VPUiAgICAgIDI1ICAgICAgLyogZW5kIG9mIHJlY29yZCAoUkZDIDg4 NSkgKi8KLSNlbmRpZgotI2lmbmRlZiBURUxPUFRfVFVJRAotI2RlZmluZSBURUxPUFRfVFVJRCAg ICAgMjYgICAgICAvKiBUQUNBQ1MgdXNlciBpZGVudGlmaWNhdGlvbiAoUkZDIDkyNykgKi8KLSNl bmRpZgotI2lmbmRlZiBURUxPUFRfT1VUTVJLCi0jZGVmaW5lIFRFTE9QVF9PVVRNUksgICAyNyAg ICAgIC8qIG91dHB1dCBtYXJraW5nIChSRkMgOTMzKSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9Q VF9UVFlMT0MKLSNkZWZpbmUgVEVMT1BUX1RUWUxPQyAgIDI4ICAgICAgLyogdGVybWluYWwgbG9j YXRpb24gbnVtYmVyIChSRkMgOTQ2KSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF8zMjcwUkVH SU1FCi0jZGVmaW5lIFRFTE9QVF8zMjcwUkVHSU1FIDI5ICAgIC8qIDMyNzAgcmVnaW1lIChSRkMg MTA0MSkgKi8KLSNlbmRpZgotI2lmbmRlZiBURUxPUFRfWDNQQUQKLSNkZWZpbmUgVEVMT1BUX1gz UEFEICAgIDMwICAgICAgLyogWC4zIFBBRCAoUkZDIDEwNTMpICovCi0jZW5kaWYKLSNpZm5kZWYg VEVMT1BUX05BV1MKLSNkZWZpbmUgVEVMT1BUX05BV1MgICAgIDMxICAgICAgLyogd2luZG93IHNp emUgKFJGQyAxMDczKSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9UU1BFRUQKLSNkZWZpbmUg VEVMT1BUX1RTUEVFRCAgIDMyICAgICAgLyogdGVybWluYWwgc3BlZWQgKFJGQyAxMDc5KSAqLwot I2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9MRkxPVwotI2RlZmluZSBURUxPUFRfTEZMT1cgICAgMzMg ICAgICAvKiByZW1vdGUgZmxvdyBjb250cm9sIChSRkMgMTM3MikgKi8KLSNlbmRpZgotI2lmbmRl ZiBURUxPUFRfTElORU1PREUKLSNkZWZpbmUgVEVMT1BUX0xJTkVNT0RFIDM0ICAgICAgLyogTGlu ZW1vZGUgb3B0aW9uIChSRkMgMTE4NCkgKi8KLSNlbmRpZgotI2lmbmRlZiBURUxPUFRfWERJU1BM T0MKLSNkZWZpbmUgVEVMT1BUX1hESVNQTE9DIDM1ICAgICAgLyogWCBEaXNwbGF5IExvY2F0aW9u IChSRkMgMTA5NikgKi8KLSNlbmRpZgotI2lmbmRlZiBURUxPUFRfT0xEX0VOVklST04KLSNkZWZp bmUgVEVMT1BUX09MRF9FTlZJUk9OIDM2ICAgLyogT2xkIC0gRW52aXJvbm1lbnQgdmFyaWFibGVz IChSRkMgMTQwOCkgKi8KLSNlbmRpZgotI2lmbmRlZiBURUxPUFRfQVVUSEVOVElDQVRJT04KLSNk ZWZpbmUgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OIDM3LyogQXV0aGVudGljYXRlIChSRkMgMjk0MSkg Ki8KLSNlbmRpZgotI2lmbmRlZiBURUxPUFRfRU5DUllQVElPTgotI2RlZmluZSBURUxPUFRfRU5D UllQVElPTiAzOCAgICAvKiBFbmNyeXB0aW9uIG9wdGlvbiAoUkZDIDI5NDYpICovCi0jZW5kaWYK LSNpZm5kZWYgVEVMT1BUX05FV0VOVklST04KLSNkZWZpbmUgVEVMT1BUX05FV0VOVklST04gMzkg ICAgLyogTmV3IC0gRW52aXJvbm1lbnQgdmFyaWFibGVzIChSRkMgMTU3MikgKi8KLSNlbmRpZgot I2lmbmRlZiBURUxPUFRfMzI3MEUKLSNkZWZpbmUgVEVMT1BUXzMyNzBFICAgIDQwICAgICAgLyog MzI3MCBFeHRlbmRlZCAoUkZDIDE2NDcpICovCi0jZW5kaWYKLSNpZm5kZWYgVEVMT1BUX1hBVVRI Ci0jZGVmaW5lIFRFTE9QVF9YQVVUSCAgICA0MSAgICAgIC8qID8/PyAoRWFyaGFydCkgKi8KLSNl bmRpZgotI2lmbmRlZiBURUxPUFRfQ0hBUlNFVAotI2RlZmluZSBURUxPUFRfQ0hBUlNFVCAgNDIg ICAgICAvKiBDaGFyYWN0ZXItc2V0IChSRkMgMjA2NikgKi8KLSNlbmRpZgotI2lmbmRlZiBURUxP UFRfUlNQCi0jZGVmaW5lIFRFTE9QVF9SU1AgICAgICA0MyAgICAgIC8qIFJlbW90ZSBTZXJpYWwg UG9ydCAoQmFybmVzKSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9DT01QT1JUCi0jZGVmaW5l IFRFTE9QVF9DT01QT1JUICA0NCAgICAgIC8qIENvbSBQb3J0IENvbnRyb2wgKFJGQyAyMjE3KSAq LwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9TTEUKLSNkZWZpbmUgVEVMT1BUX1NMRSAgICAgIDQ1 ICAgICAgLyogU3VwcHJlc3MgTG9jYWwgRWNobyAoQXRtYXIpIC0gW3JlamVjdGVkXSAqLwotI2Vu ZGlmCi0jaWZuZGVmIFRFTE9QVF9TVEFSVF9UTFMKLSNkZWZpbmUgVEVMT1BUX1NUQVJUX1RMUyA0 NiAgICAgLyogVGVsbmV0IG92ZXIgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5ICovCi0jZW5kaWYg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChCb2UpICovCi0jaWZuZGVmIFRFTE9QVF9LRVJN SVQKLSNkZWZpbmUgVEVMT1BUX0tFUk1JVCAgIDQ3ICAgICAgLyogS2VybWl0IChSRkMgMjg0MCkg Ki8KLSNlbmRpZgotI2lmbmRlZiBURUxPUFRfU0VORF9VUkwKLSNkZWZpbmUgVEVMT1BUX1NFTkRf VVJMIDQ4ICAgICAgLyogU2VuZCBVUkwgKi8KLSNlbmRpZgotCi0jaWZuZGVmIFRFTE9QVF9GT1JX QVJEX1gKLSNkZWZpbmUgVEVMT1BUX0ZPUldBUkRfWCA0OSAgICAgLyogWCBXaW5kb3dzIEZvcndh cmRpbmcgKEFsdG1hbikgKi8KLSNlbmRpZiAvKiBURUxPUFRfRk9SV0FSRF9YICovCi0KLSNpZm5k ZWYgVEVMT1BUX1NUREVSUgotI2RlZmluZSBURUxPUFRfU1RERVJSICAgIDUwICAgIC8qIFJlZGly ZWN0ZWQgU3RkZXJyIChBbHRtYW4pICovCi0jZW5kaWYgLyogVEVMT1BUX1NUREVSUiAqLwotCi0j aWZuZGVmIFRFTE9QVF9QUkFHTUFfTE9HT04KLSNkZWZpbmUgVEVMT1BUX1BSQUdNQV9MT0dPTiAx MzggLyogRW5jcnlwdGVkIExvZ29uIG9wdGlvbiAoUHJhZ21hU3lzKSAqLwotI2VuZGlmCi0jaWZu ZGVmIFRFTE9QVF9TU1BJX0xPR09OCi0jZGVmaW5lIFRFTE9QVF9TU1BJX0xPR09OIDEzOSAgIC8q IE1TIFNTUEkgTG9nb24gb3B0aW9uIChQcmFnbWFTeXMpICovCi0jZW5kaWYKLSNpZm5kZWYgVEVM T1BUX1BSQUdNQV9IRUFSVEJFQVQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog U2VydmVyIFNlbmQgSGVhcnRiZWF0IG9wdGlvbiAoUHJhZ21hU3lzKSAqLwotI2RlZmluZSBURUxP UFRfUFJBR01BX0hFQVJUQkVBVCAxNDAKLSNlbmRpZgotCi0jZGVmaW5lIFRFTE9QVF9JQk1fU0FL IDIwMCAgICAgIC8qIElCTSBTZWN1cmUgQXR0ZW50aW9uIEtleSAqLwotCi0vKgotICBJQk0gU2Vj dXJlIEF0dGVudGlvbiBLZXkgKFNBSykgT3B0aW9uCi0KLSAgSW4gYWRkaXRpb24gdG8gdGVybWlu YWwgbmVnb3RpYXRpb24sIHRoZSB0ZWxuZXQgY29tbWFuZCBhbGxvd3MKLSAgbmVnb3RpYXRpb24g Zm9yIHRoZSBTZWN1cmUgQXR0ZW50aW9uIEtleSAoU0FLKQotICBvcHRpb24uIFRoaXMgb3B0aW9u LCB3aGVuIHN1cHBvcnRlZCwgcHJvdmlkZXMgdGhlIGxvY2FsIHVzZXIgd2l0aAotICBhIHNlY3Vy ZSBjb21tdW5pY2F0aW9uIHBhdGggdG8gdGhlIHJlbW90ZQotICBob3N0IGZvciB0YXNrcyBzdWNo IGFzIGNoYW5naW5nIHVzZXIgSURzIG9yIHBhc3N3b3Jkcy4gSWYgdGhlIHJlbW90ZQotICBob3N0 IHN1cHBvcnRzIHRoZSBTQUsgZnVuY3Rpb24sIGEgdHJ1c3RlZAotICBzaGVsbCBpcyBvcGVuZWQg b24gdGhlIHJlbW90ZSBob3N0IHdoZW4gdGhlIHRlbG5ldCBzZW5kIHNhawotICBzdWJjb21tYW5k IGlzIGlzc3VlZC4gVGhlIFNBSyBmdW5jdGlvbiBjYW4KLSAgYWxzbyBiZSBhc3NpZ25lZCB0byBh IHNpbmdsZSBrZXkgYXZhaWxhYmxlIGluIHRlbG5ldCBpbnB1dCBtb2RlLAotICB1c2luZyB0aGUg c2V0IHNhayBzdWJjb21tYW5kLgotCi0gIFROX1NBSwotCi0gIFNlbmRzIHRoZSBURUxORVQgU0FL IChTZWN1cmUgQXR0ZW50aW9uIEtleSkgc2VxdWVuY2UsIHdoaWNoIGNhdXNlcwotICB0aGUgcmVt b3RlIHN5c3RlbSB0byBpbnZva2UgdGhlIHRydXN0ZWQgc2hlbGwuIElmIHRoZSBTQUsgaXMgbm90 Ci0gIHN1cHBvcnRlZCwgdGhlbiBhbiBlcnJvciBtZXNzYWdlIGlzIGRpc3BsYXllZCB0aGF0IHJl YWRzOgotICAgIFJlbW90ZSBzaWRlIGRvZXMgbm90IHN1cHBvcnQgU0FLLgotKi8KLQotI2lmbmRl ZiBURUxPUFRfRVhPUEwKLSNkZWZpbmUgVEVMT1BUX0VYT1BMICAgIDI1NSAgICAgLyogRXh0ZW5k ZWQtb3B0aW9ucy1saXN0IChSRkMgODYxKSAqLwotI2VuZGlmCi0KLSNpZmRlZiBOVEVMT1BUUwot I3VuZGVmIE5URUxPUFRTCi0jZW5kaWYgLyogTlRFTE9QVFMgKi8KLS8qIFRoZSBUZWxuZXQgT3B0 aW9uIHNwYWNlIGlzIG5vIGxvbmdlciBiZWluZyBhbGxvY2F0ZWQgYnkgSUNBTk4gYXMgYSAqLwot LyogY29udGludW91cyBsaXN0LiAgSW4gb3RoZXIgd29yZHMgaXQgaXMgYmVjb21pbmcgc3BhcnNl LiAgQnV0IHdlIGRvICovCi0vKiBub3Qgd2FudCB0byBoYXZlIHRvIGFsbG9jYXRlIG1lbW9yeSBm b3IgYSBsb25nIGxpc3Qgb2Ygc3RyaW5ncyBhbmQgKi8KLS8qIHN0cnVjdHMgd2hpY2ggd2lsbCBu ZXZlciBiZSB1c2VkLiAgVGhlcmVmb3JlLCB0aGUgTlRFTE9QVFMgZGVmaW5lICAqLwotLyogY2Fu IG5vIGxvbmdlciBiZSBlcXVhbCB0byBURUxPUFRfTEFTVCsxLiAgSW4gZmFjdCwgdGhlIG5vdGlv biBvZiAgICovCi0vKiBURUxPUFRfRklSU1QgYW5kIFRFTE9QVF9MQVNUIG5vIGxvbmdlciBtYWtl IHNlbnNlLiAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTlRFTE9QVFMgICAgICAgIDU1Ci0K LSNkZWZpbmUgVEVMT1BUX0ZJUlNUICAgICBURUxPUFRfQklOQVJZCi0jZGVmaW5lIFRFTE9QVF9M QVNUICAgICAgVEVMT1BUX0lCTV9TQUsKLQotLyoKLSAgVGhlIGZvbGxvd2luZyBtYWNyb3Mgc3Bl ZWQgdXMgdXAgYXQgcnVudGltZSBidXQgYXJlIHRvbyBjb21wbGV4Ci0gIGZvciBzb21lIHByZXBy b2Nlc3NvcnMgLyBjb21waWxlcnM7IGlmIHlvdXIgY29tcGlsZXIgYm9tYnMgb24gY2tjdGVsLmMK LSAgd2l0aCAiSW5zdHJ1Y3Rpb24gdGFibGUgb3ZlcmZsb3ciIG9yIHNvbWVzdWNoLCByZWJ1aWxk IHdpdGggLUROT1RPTUFDUk9TLgotKi8KLSNpZm5kZWYgTk9UT01BQ1JPUwotI2lmbmRlZiBURUxP UFRfTUFDUk8KLSNkZWZpbmUgVEVMT1BUX01BQ1JPCi0jZW5kaWYgLyogVEVMT1BUX01BQ1JPICov Ci0jZW5kaWYgLyogTk9UT01BQ1JPUyAqLwotCi0jaWZkZWYgVEVMT1BUX01BQ1JPCi0jZGVmaW5l IFRFTE9QVF9JTkRFWCh4KSAoKCh4KT49MCAmJiAoeCk8PSBURUxPUFRfU1RERVJSKT8oeCk6XAot ICAgICAgICAoKHgpPj1URUxPUFRfUFJBR01BX0xPR09OICYmICh4KTw9VEVMT1BUX1BSQUdNQV9I RUFSVEJFQVQpPyh4KS04NzogXAotICAgICAgICAoKHgpID09IFRFTE9QVF9JQk1fU0FLKT8oeCkt MTQ2OiBOVEVMT1BUUykKLQotI2RlZmluZSBURUxPUFRfT0soeCkgICAgKCgoeCkgPj0gVEVMT1BU X0JJTkFSWSAmJiAoeCkgPD0gVEVMT1BUX1NUREVSUikgfHxcCi0gICAgICAgICAgICAgKCh4KSA+ PSBURUxPUFRfUFJBR01BX0xPR09OICYmICh4KSA8PSBURUxPUFRfUFJBR01BX0hFQVJUQkVBVCkg fHxcCi0gICAgICAgICAgICAgKCh4KSA9PSBURUxPUFRfSUJNX1NBSykpCi0jZGVmaW5lIFRFTE9Q VCh4KSAgICAgICAoVEVMT1BUX09LKHgpP3RlbG9wdHNbVEVMT1BUX0lOREVYKHgpXToiVU5LTk9X TiIpCi0jZWxzZSAvKiBURUxPUFRfTUFDUk8gKi8KLV9QUk9UT1RZUChpbnQgdGVsb3B0X2luZGV4 LChpbnQpKTsKLV9QUk9UT1RZUChpbnQgdGVsb3B0X29rLChpbnQpKTsKLV9QUk9UT1RZUChDSEFS ICogdGVsb3B0LCAoaW50KSk7Ci0KLSNkZWZpbmUgVEVMT1BUX0lOREVYKHgpIHRlbG9wdF9pbmRl eCh4KQotI2RlZmluZSBURUxPUFRfT0soeCkgICAgdGVsb3B0X29rKHgpCi0jZGVmaW5lIFRFTE9Q VCh4KSAgICAgICB0ZWxvcHQoeCkKLSNlbmRpZiAvKiBURUxPUFRfTUFDUk8gKi8KLQotI2lmZGVm IFRFTE9QVFMKLWNoYXIgKnRlbG9wdHNbTlRFTE9QVFMrMl0gPSB7Ci0vKiAgIDAgKi8gIkJJTkFS WSIsICAgIkVDSE8iLCAgICAgICAgICJSQ1AiLCAgIlNVUFBSRVNTLUdPLUFIRUFEIiwKLS8qICAg NCAqLyAiTkFNRSIsICAgIlNUQVRVUyIsICJUSU1JTkctTUFSSyIsICJSQ1RFIiwKLS8qICAgOCAq LyAiTkFPTCIsICJOQU9QIiwgICJOQU9DUkQiLCAiTkFPSFRTIiwKLS8qICAxMiAqLyAiTkFPSFRE IiwgIk5BT0ZGRCIsICJOQU9WVFMiLCAgIk5BT1ZURCIsCi0vKiAgMTYgKi8gIk5BT0xGRCIsICJF WFRFTkQtQVNDSUkiLCAiTE9HT1VUIiwgIkJZVEUtTUFDUk8iLAotLyogIDIwICovICJEQVRBLUVO VFJZLVRFUk1JTkFMIiwgIlNVUERVUCIsICJTVVBEVVAtT1VUUFVUIiwgICJTRU5ELUxPQ0FUSU9O IiwKLS8qICAyNCAqLyAiVEVSTUlOQUwtVFlQRSIsICAiRU5ELU9GLVJFQ09SRCIsICJUQUNBQ1Mt VUlEIiwgIk9VVFBVVC1NQVJLSU5HIiwKLS8qICAyOCAqLyAiVFRZTE9DIiwgIjMyNzAtUkVHSU1F IiwgIlguMy1QQUQiLCAiTkFXUyIsCi0vKiAgMzIgKi8gIlRTUEVFRCIsICJMRkxPVyIsICJMSU5F TU9ERSIsICJYRElTUExPQyIsCi0vKiAgMzYgKi8gIk9MRC1FTlZJUk9OIiwgIkFVVEhFTlRJQ0FU SU9OIiwgIkVOQ1JZUFRJT04iLCAiTkVXLUVOVklST05NRU5UIiwKLS8qICA0MCAqLyAiVE4zMjcw RSIsInhhdXRoIiwiQ0hBUlNFVCIsICJyZW1vdGUtc2VyaWFsLXBvcnQiLAotLyogIDQ0ICovICJD T00tUE9SVC1DT05UUk9MIiwic3VwcHJlc3MtbG9jYWwtZWNobyIsIlNUQVJULVRMUyIsIktFUk1J VCIsCi0vKiAgNDggKi8gInNlbmQtdXJsIiwiRk9SV0FSRC1YIiwic3RkZXJyIiwKLS8qIDEzOCAq LyAicHJhZ21hLWxvZ29uIiwgInNzcGktbG9nb24iLCAicHJhZ21hLWhlYXJ0YmVhdCIsCi0vKiAy MDAgKi8gImlibS1zYWsiLAotICAgICAgICAgICJ1bmtub3duIiwKLSAgICAgICAgMAotfTsKLSNl bHNlIC8qVEVMT1BUUyAqLwotZXh0ZXJuIGNoYXIgKiB0ZWxvcHRzW107Ci0jZW5kaWYgLyogVEVM T1BUUyAqLwotCi0vKiBURUxORVQgTmV3bGluZSBNb2RlICovCi0KLSNkZWZpbmUgVE5MX0NSICAg ICAwICAgICAgICAgICAgICAgICAgICAvKiBDUiBzZW5kcyBiYXJlIGNhcnJpYWdlIHJldHVybiAq LwotI2RlZmluZSBUTkxfQ1JOVUwgIDEgICAgICAgICAgICAgICAgICAgIC8qIENSIGFuZCBOVUwg Ki8KLSNkZWZpbmUgVE5MX0NSTEYgICAyICAgICAgICAgICAgICAgICAgICAvKiBDUiBhbmQgTEYg Ki8KLSNkZWZpbmUgVE5MX0xGICAgICAzICAgICAgICAgICAgICAgICAgICAvKiBMRiBpbnN0ZWFk IG9mIENSICovCi0KLS8qIFRFTE5FVCBOZWdvdGlhdGlvbiBNb2RlICovCi0KLSNkZWZpbmUgICAg VE5fTkdfUkYgIDAgICAgICAgICAgICAgICAgICAvKiAgTmVnb3RpYXRpb24gUkVGVVNFRCAqLwot I2RlZmluZSAgICBUTl9OR19BQyAgMSAgICAgICAgICAgICAgICAgIC8qICBOZWdvdGlhdGlvbiBB Q0NFUFRFRCAqLwotI2RlZmluZSAgICBUTl9OR19SUSAgMiAgICAgICAgICAgICAgICAgIC8qICBO ZWdvdGlhdGlvbiBSRVFVRVNURUQgKi8KLSNkZWZpbmUgICAgVE5fTkdfTVUgIDMgICAgICAgICAg ICAgICAgICAvKiAgTmVnb3RpYXRpb24gUkVRVUlSRUQgKG11c3QpICovCi0KLQotLyogU3lzdGVt cyB3aGVyZSB3ZSBrbm93IHdlIGNhbiBkZWZpbmUgVEVMTkVUIE5BV1MgYXV0b21hdGljYWxseS4g Ki8KLQotI2lmbmRlZiBDS19OQVdTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluIG90aGVy IHdvcmRzLCBpZiBib3RoICovCi0jaWZkZWYgQ0tfVFRHV1NJWiAgICAgICAgICAgICAgICAgICAg ICAgLyogVE5DT0RFIGFuZCBUVEdXU0laIGFyZSBkZWZpbmVkICovCi0jZGVmaW5lIENLX05BV1Mg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlbiB3ZSBjYW4gZG8gTkFXUy4gKi8KLSNlbmRp ZiAvKiBDS19UVEdXU0laICovCi0jZW5kaWYgLyogQ0tfTkFXUyAqLwotCi0jaWZkZWYgQ0tfRk9S V0FSRF9YCi0jaWZuZGVmIE1BWEZXRFgKLSNkZWZpbmUgTUFYRldEWCA2NCAgICAgICAgICAgICAg ICAgICAgICAvKiBOdW0gb2YgWCB3aW5kb3dzIHRvIGJlIGZ3ZCdkICovCi0jZW5kaWYgLyogTUFY RldEWCAqLwotI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLwotCi0vKiBUZWxuZXQgU3RhdGUgc3Ry dWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgKi8KLXN0cnVjdCBfdGVsb3B0X3N0YXRlIHsKLSAgdW5z aWduZWQgY2hhciBkZWZfc2VydmVyX21lX21vZGU7ICAgLyogRGVmYXVsdCBOZWdvdGlhdGlvbiBN b2RlICovCi0gIHVuc2lnbmVkIGNoYXIgZGVmX3NlcnZlcl91X21vZGU7ICAgIC8qIERlZmF1bHQg TmVnb3RpYXRpb24gTW9kZSAqLwotICB1bnNpZ25lZCBjaGFyIGRlZl9jbGllbnRfbWVfbW9kZTsg ICAvKiBEZWZhdWx0IE5lZ290aWF0aW9uIE1vZGUgKi8KLSAgdW5zaWduZWQgY2hhciBkZWZfY2xp ZW50X3VfbW9kZTsgICAgLyogRGVmYXVsdCBOZWdvdGlhdGlvbiBNb2RlICovCi0gIHVuc2lnbmVk IGNoYXIgbWVfbW9kZTsgICAgICAgICAgICAgIC8qIFRlbG5ldCBOZWdvdGlhdGlvbiBNb2RlICov Ci0gIHVuc2lnbmVkIGNoYXIgdV9tb2RlOyAgICAgICAgICAgICAgIC8qIFRlbG5ldCBOZWdvdGlh dGlvbiBNb2RlICovCi0gIHVuc2lnbmVkIGNoYXIgbWU7ICAgICAgICAgICAgICAgICAgIC8qIEFt IEkgPyAgICAgICAgICAgICAgICAgICovCi0gIHVuc2lnbmVkIGNoYXIgdTsgICAgICAgICAgICAg ICAgICAgIC8qIEFyZSB5b3U/ICAgICAgICAgICAgICAgICovCi0gIHVuc2lnbmVkIGNoYXIgdW5h bnN3ZXJlZF93aWxsOyAgICAgIC8qIFNlbnQgV2lsbCwgV2FpdGluZyBmb3IgRE8vRE9OVCAqLwot ICB1bnNpZ25lZCBjaGFyIHVuYW5zd2VyZWRfZG87ICAgICAgICAvKiBTZW5kIERPLCBXYWl0aW5n IGZvciBXSUxML1dPTlQgKi8KLSAgdW5zaWduZWQgY2hhciB1bmFuc3dlcmVkX3dvbnQ7ICAgICAg LyogU2VudCBXT05ULCBXYWl0aW5nIGZvciBET05UICovCi0gIHVuc2lnbmVkIGNoYXIgdW5hbnN3 ZXJlZF9kb250OyAgICAgIC8qIFNlbnQgRE9OVCwgV2FpdGluZyBmb3IgV09OVCAqLwotICB1bnNp Z25lZCBjaGFyIHVuYW5zd2VyZWRfc2I7ICAgICAgICAvKiBTZW50IFNCLCAgIFdhaXRpbmcgZm9y IFNCIChzZXJ2ZXIpICovCi0gIHVuaW9uIHsKLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAgc3RydWN0 IF90ZWxvcHRfa2VybWl0IHsgICAgICAgICAvKiBLZXJtaXQgT3B0aW9uIFN0YXRlcyAqLwotICAg ICAgdW5zaWduZWQgY2hhciBtZV9zdGFydDsgICAgICAgLyogSSBoYXZlIGEgU2VydmVyIGFjdGl2 ZSAqLwotICAgICAgdW5zaWduZWQgY2hhciBtZV9yZXFfc3RhcnQ7ICAgLyogU2VudCBSZXEtU3Rh cnQsIFdhaXRpbmcgZm9yIHJlc3BvbnNlICovCi0gICAgICB1bnNpZ25lZCBjaGFyIG1lX3JlcV9z dG9wOyAgICAvKiBTZW50IFJlcS1TdG9wLCBXYWl0aW5nIGZvciByZXNwb25zZSAgKi8KLSAgICAg IHVuc2lnbmVkIGNoYXIgdV9zdGFydDsgICAgICAgIC8qIFlvdSBoYXZlIGEgU2VydmVyIGFjdGl2 ZSAqLwotICAgICAgdW5zaWduZWQgY2hhciBzb3A7ICAgICAgICAgICAgLyogSGF2ZSB3ZSByZWNl aXZlZCB0aGUgU09QIGNoYXI/ICovCi0gICAgfSBrZXJtaXQ7Ci0jZW5kaWYgLyogSUtTX09QVElP TiAqLwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICBzdHJ1Y3QgX3RlbG9wdF9lbmNyeXB0IHsg ICAgICAgIC8qIEVuY3J5cHRpb24gT3B0aW9uIFN0YXRlcyAqLwotICAgICAgdW5zaWduZWQgY2hh ciBuZWVkX3RvX3NlbmQ7Ci0gICAgICB1bnNpZ25lZCBjaGFyICBzdG9wOyAgICAgICAgICAvKiBJ cyBlbmNyeXB0aW9uIHN0b3BwZWQ/ICAgKi8KLSAgICB9IGVuY3J5cHQ7Ci0jZW5kaWYgLyogQ0tf RU5DUllQVElPTiAqLwotI2lmZGVmIENLX05BV1MKLSAgICBzdHJ1Y3QgX3RlbG9wdF9uYXdzIHsg ICAgICAgICAgIC8qIE5BV1MgT3B0aW9uIEluZm9ybWF0aW9uICAqLwotICAgICAgdW5zaWduZWQg Y2hhciBuZWVkX3RvX3NlbmQ7Ci0gICAgICBpbnQgeDsgICAgICAgICAgICAgICAgICAgICAgICAv KiBMYXN0IFdpZHRoICAgICAgICAgICAgICAgKi8KLSAgICAgIGludCB5OyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIExhc3QgSGVpZ2h0ICAgICAgICAgICAgICAqLwotICAgIH0gbmF3czsKLSNl bmRpZiAvKiBDS19OQVdTICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgc3RydWN0IF90ZWxvcHRfc3Rh cnRfdGxzIHsgICAgICAvKiBTdGFydCBUTFMgT3B0aW9uICAgICAgICAgICAgICovCi0gICAgICAg dW5zaWduZWQgY2hhciB1X2ZvbGxvd3M7ICAgICAvKiB1IHJlYWR5IGZvciBUTFMgbmVnb3RpYXRp b24gICovCi0gICAgICAgdW5zaWduZWQgY2hhciBtZV9mb2xsb3dzOyAgICAvKiBtZSByZWFkeSBm b3IgVExTIG5lZ290aWF0aW9uICovCi0gICAgICAgdW5zaWduZWQgY2hhciBhdXRoX3JlcXVlc3Q7 ICAvKiBSY3ZkIFdJTEwgQVVUSCBiZWZvcmUgV09OVCBTVEFSVF9UTFMgKi8KLSAgICB9IHN0YXJ0 X3RsczsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICBzdHJ1Y3QgX3RlbG9wdF90ZXJtIHsgICAg ICAgICAgLyogVGVybWluYWwgVHlwZSAgICAgICAgICAgICovCi0gICAgICAgdW5zaWduZWQgY2hh ciBuZWVkX3RvX3NlbmQ7Ci0gICAgICAgdW5zaWduZWQgY2hhciB0eXBlWzQxXTsgICAgIC8qIExh c3QgdGVybWluYWwgdHlwZSAgICAgICAqLwotICAgIH0gdGVybTsKLSNpZmRlZiBDS19FTlZJUk9O TUVOVAotICAgIHN0cnVjdCBfdGVsb3B0X25ld19lbnYgewotICAgICAgIHVuc2lnbmVkIGNoYXIg bmVlZF90b19zZW5kOwotICAgICAgIHVuc2lnbmVkIGNoYXIgKiBzdHI7Ci0gICAgICAgaW50ICAg ICAgICAgICAgIGxlbjsKLSAgICB9IGVudjsKLSNpZmRlZiBDS19YRElTUExPQwotICAgIHN0cnVj dCBfdGVsb3B0X3hkaXNwIHsKLSAgICAgICB1bnNpZ25lZCBjaGFyIG5lZWRfdG9fc2VuZDsKLSAg ICB9IHhkaXNwOwotI2VuZGlmIC8qIENLX1hESVNQTE9DICovCi0jZW5kaWYgLyogQ0tfRU5WSVJP Tk1FTlQgKi8KLSNpZmRlZiBDS19TTkRMT0MKLSAgICBzdHJ1Y3QgX3RlbG9wdF9zbmRsb2Mgewot ICAgICAgIHVuc2lnbmVkIGNoYXIgbmVlZF90b19zZW5kOwotICAgIH0gc25kbG9jOwotI2VuZGlm IC8qIENLX1NORExPQyAqLwotI2lmZGVmIENLX0ZPUldBUkRfWAotICAgIHN0cnVjdCBfdGVsb3B0 X2Z3ZF94IHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBuZWVkX3RvX3NlbmQ7Ci0gICAgICAgIGlu dCBsaXN0ZW5fc29ja2V0OwotICAgICAgICBzdHJ1Y3QgX2NoYW5uZWwgewotICAgICAgICAgICAg aW50IGZkOwotICAgICAgICAgICAgaW50IGlkOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBu ZWVkX3RvX3NlbmRfeGF1dGg7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHN1c3BlbmQ7Ci0g ICAgICAgIH0gY2hhbm5lbFtNQVhGV0RYXTsKLSNpZmRlZiBOVAotICAgICAgICBpbnQgdGhyZWFk X3N0YXJ0ZWQ7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICB9IGZvcndhcmRfeDsKLSNlbmRpZiAvKiBD S19GT1JXQVJEX1ggKi8KLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICBzdHJ1Y3QgX3RlbG9wdF9j b21wb3J0IHsKLSAgICAgICAgICB1bnNpZ25lZCBjaGFyIG5lZWRfdG9fc2VuZDsKLSAgICAgICAg ICB1bnNpZ25lZCBjaGFyIHdhaXRfZm9yX3NiOwotICAgICAgICAgIHVuc2lnbmVkIGNoYXIgd2Fp dF9mb3JfbXM7Ci0gICAgICB9IGNvbXBvcnQ7Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotICAg IC8qIGFkZGl0aW9uYWwgb3B0aW9ucyBzdWNoIGFzIE5ldyBFbnZpcm9ubWVudCBvciBTZW5kIExv Y2F0aW9uICovCi0gIH0gc2I7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgX3RlbG9wdF9zdGF0ZSB0ZWxv cHRfc3RhdGUsICpwX3RlbG9wdF9zdGF0ZTsKLQotLyogdGVsb3B0X3N0YXRlc1tdIGlzIHRoZSBh cnJheSBvZiBzdHJ1Y3RzIHdoaWNoIHRoZSBzdGF0ZSBvZiBlYWNoIHRlbG5ldCAqLwotLyogb3B0 aW9uIGlzIHN0b3JlZC4gIFdlIGFsbG9jYXRlIG9uZSBtb3JlIHRoYW4gd2UgbmVlZCBpbiBjYXNl IHdlIGFyZSAgICAqLwotLyogc2VudCB0ZWxuZXQgb3B0aW9ucyB0aGF0IHdlIGRvIG5vdCByZWNv Z25pemUuICBJZiBieSBzb21lIGNoYW5jZSB0aGUgICAqLwotLyogVEVMT1BUX09LKCkgY2hlY2sg aXMgc2tpcHBlZCwgVEVMT1BUX0lOREVYKCkgd2lsbCBmb3JjZSB0aGUgb3B0aW9uIHRvICAqLwot LyogdXNlIHRoZSBleHRyYSBjZWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLwotCi0jaWZkZWYgVEVMT1BUX1NUQVRFUwotdGVsb3B0X3N0YXRl IHRlbG9wdF9zdGF0ZXNbTlRFTE9QVFMrMV07Ci0jZWxzZSAvKiBURUxPUFRfU1RBVEVTICovCi1l eHRlcm4gdGVsb3B0X3N0YXRlIHRlbG9wdF9zdGF0ZXNbXTsKLSNlbmRpZiAvKiBURUxPUFRfU1RB VEVTICovCi0KLSNkZWZpbmUgVEVMT1BUX01FKHgpICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9JTkRF WCh4KV0ubWUpCi0jZGVmaW5lIFRFTE9QVF9VKHgpICAodGVsb3B0X3N0YXRlc1tURUxPUFRfSU5E RVgoeCldLnUpCi0jZGVmaW5lIFRFTE9QVF9NRV9NT0RFKHgpIFwKLSAgICAgICAgKHRlbG9wdF9z dGF0ZXNbVEVMT1BUX0lOREVYKHgpXS5tZV9tb2RlKQotI2RlZmluZSBURUxPUFRfVV9NT0RFKHgp ICBcCi0gICAgICAgICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9JTkRFWCh4KV0udV9tb2RlKQotI2Rl ZmluZSBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgpIFwKLSAgICAgICAgKHRlbG9wdF9zdGF0ZXNb VEVMT1BUX0lOREVYKHgpXS51bmFuc3dlcmVkX3dpbGwpCi0jZGVmaW5lIFRFTE9QVF9VTkFOU1dF UkVEX0RPKHgpICAgXAotICAgICAgICAodGVsb3B0X3N0YXRlc1tURUxPUFRfSU5ERVgoeCldLnVu YW5zd2VyZWRfZG8pCi0jZGVmaW5lIFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQoeCkgXAotICAgICAg ICAodGVsb3B0X3N0YXRlc1tURUxPUFRfSU5ERVgoeCldLnVuYW5zd2VyZWRfd29udCkKLSNkZWZp bmUgVEVMT1BUX1VOQU5TV0VSRURfRE9OVCh4KSAgIFwKLSAgICAgICAgKHRlbG9wdF9zdGF0ZXNb VEVMT1BUX0lOREVYKHgpXS51bmFuc3dlcmVkX2RvbnQpCi0jZGVmaW5lIFRFTE9QVF9VTkFOU1dF UkVEX1NCKHgpICAgXAotICAgICAgICAodGVsb3B0X3N0YXRlc1tURUxPUFRfSU5ERVgoeCldLnVu YW5zd2VyZWRfc2IpCi0jZGVmaW5lIFRFTE9QVF9TQih4KSBcCi0gICAgICAgICh0ZWxvcHRfc3Rh dGVzW1RFTE9QVF9JTkRFWCh4KV0uc2IpCi0jZGVmaW5lIFRFTE9QVF9ERUZfU19NRV9NT0RFKHgp IFwKLSAgICAgICAgKHRlbG9wdF9zdGF0ZXNbVEVMT1BUX0lOREVYKHgpXS5kZWZfc2VydmVyX21l X21vZGUpCi0jZGVmaW5lIFRFTE9QVF9ERUZfU19VX01PREUoeCkgIFwKLSAgICAgICAgKHRlbG9w dF9zdGF0ZXNbVEVMT1BUX0lOREVYKHgpXS5kZWZfc2VydmVyX3VfbW9kZSkKLSNkZWZpbmUgVEVM T1BUX0RFRl9DX01FX01PREUoeCkgXAotICAgICAgICAodGVsb3B0X3N0YXRlc1tURUxPUFRfSU5E RVgoeCldLmRlZl9jbGllbnRfbWVfbW9kZSkKLSNkZWZpbmUgVEVMT1BUX0RFRl9DX1VfTU9ERSh4 KSAgXAotICAgICAgICAodGVsb3B0X3N0YXRlc1tURUxPUFRfSU5ERVgoeCldLmRlZl9jbGllbnRf dV9tb2RlKQotCi0jaWZkZWYgVEVMT1BUX01PREVTCi1jaGFyICogdGVsb3B0X21vZGVzWzRdID0g ewotICAgICJSRUZVU0VEIiwgIkFDQ0VQVEVEIiwgIlJFUVVFU1RFRCIsICJSRVFVSVJFRCIKLX07 Ci0jZWxzZSAvKiBURUxPUFRfTU9ERVMgKi8KLWV4dGVybiBjaGFyICogdGVsb3B0X21vZGVzW107 Ci0jZW5kaWYgLyogVEVMT1BUX01PREVTICovCi0KLSNpZmRlZiBURUxPUFRfTUFDUk8KLSNkZWZp bmUgVEVMT1BUX01PREVfT0soeCkgKCh1bnNpZ25lZCBpbnQpKHgpIDw9IFROX05HX01VKQotI2Rl ZmluZSBURUxPUFRfTU9ERSh4KSAoVEVMT1BUX01PREVfT0soeCk/dGVsb3B0X21vZGVzWyh4KS1U Tl9OR19SRl06IlVOS05PV04iKQotI2Vsc2UgLyogVEVMT1BUX01BQ1JPICovCi1fUFJPVE9UWVAo aW50IHRlbG9wdF9tb2RlX29rLChpbnQpKTsKLV9QUk9UT1RZUChDSEFSICogdGVsb3B0X21vZGUs KGludCkpOwotCi0jZGVmaW5lIFRFTE9QVF9NT0RFX09LKHgpIHRlbG9wdF9tb2RlX29rKHgpCi0j ZGVmaW5lIFRFTE9QVF9NT0RFKHgpICAgIHRlbG9wdF9tb2RlKHgpCi0jZW5kaWYgLyogVEVMT1BU X01BQ1JPICovCi0KLS8qIFN1Yi1vcHRpb24gcXVhbGlmaWVycyAqLwotI2RlZmluZSBURUxRVUFM X0lTICAgICAgMCAgICAgICAvKiBvcHRpb24gaXMuLi4gKi8KLSNkZWZpbmUgVEVMUVVBTF9TRU5E ICAgIDEgICAgICAgLyogc2VuZCBvcHRpb24gKi8KLSNkZWZpbmUgVEVMUVVBTF9JTkZPICAgIDIg ICAgICAgLyogRU5WSVJPTjogaW5mb3JtYXRpb25hbCB2ZXJzaW9uIG9mIElTICovCi0jZGVmaW5l IFRFTFFVQUxfUkVQTFkgICAyICAgICAgIC8qIEFVVEhFTlRJQ0FUSU9OOiBjbGllbnQgdmVyc2lv biBvZiBJUyAqLwotI2RlZmluZSBURUxRVUFMX05BTUUgICAgMyAgICAgICAvKiBBVVRIRU5USUNB VElPTjogY2xpZW50IHZlcnNpb24gb2YgSVMgKi8KLQotI2RlZmluZSBURUxfRU5WX1ZBUiAgICAg MAotI2RlZmluZSBURUxfRU5WX1ZBTFVFICAgMQotI2RlZmluZSBURUxfRU5WX0VTQyAgICAgMgot I2RlZmluZSBURUxfRU5WX1VTRVJWQVIgMwotCi0jZGVmaW5lIExGTE9XX09GRiAgICAgICAgICAg ICAgIDAgICAgICAgLyogRGlzYWJsZSByZW1vdGUgZmxvdyBjb250cm9sICovCi0jZGVmaW5lIExG TE9XX09OICAgICAgICAgICAgICAgIDEgICAgICAgLyogRW5hYmxlIHJlbW90ZSBmbG93IGNvbnRy b2wgKi8KLSNkZWZpbmUgTEZMT1dfUkVTVEFSVF9BTlkgICAgICAgMiAgICAgICAvKiBSZXN0YXJ0 IG91dHB1dCBvbiBhbnkgY2hhciAqLwotI2RlZmluZSBMRkxPV19SRVNUQVJUX1hPTiAgICAgICAz ICAgICAgIC8qIFJlc3RhcnQgb3V0cHV0IG9ubHkgb24gWE9OICovCi0KLS8qCi0gKiBMSU5FTU9E RSBzdWJvcHRpb25zCi0gKi8KLQotI2RlZmluZSBMTV9NT0RFICAgICAgICAgMQotI2RlZmluZSBM TV9GT1JXQVJETUFTSyAgMgotI2RlZmluZSBMTV9TTEMgICAgICAgICAgMwotCi0jZGVmaW5lIE1P REVfRURJVCAgICAgICAweDAxCi0jZGVmaW5lIE1PREVfVFJBUFNJRyAgICAweDAyCi0jZGVmaW5l IE1PREVfQUNLICAgICAgICAweDA0Ci0jZGVmaW5lIE1PREVfU09GVF9UQUIgICAweDA4Ci0jZGVm aW5lIE1PREVfTElUX0VDSE8gICAweDEwCi0KLSNkZWZpbmUgTU9ERV9NQVNLICAgICAgIDB4MWYK LQotLyogTm90IHBhcnQgb2YgcHJvdG9jb2wsIGJ1dCBuZWVkZWQgdG8gc2ltcGxpZnkgdGhpbmdz Li4uICovCi0jZGVmaW5lIE1PREVfRkxPVyAgICAgICAgICAgICAgIDB4MDEwMAotI2RlZmluZSBN T0RFX0VDSE8gICAgICAgICAgICAgICAweDAyMDAKLSNkZWZpbmUgTU9ERV9JTkJJTiAgICAgICAg ICAgICAgMHgwNDAwCi0jZGVmaW5lIE1PREVfT1VUQklOICAgICAgICAgICAgIDB4MDgwMAotI2Rl ZmluZSBNT0RFX0ZPUkNFICAgICAgICAgICAgICAweDEwMDAKLQotI2RlZmluZSBTTENfU1lOQ0gg ICAgICAgMQotI2RlZmluZSBTTENfQlJLICAgICAgICAgMgotI2RlZmluZSBTTENfSVAgICAgICAg ICAgMwotI2RlZmluZSBTTENfQU8gICAgICAgICAgNAotI2RlZmluZSBTTENfQVlUICAgICAgICAg NQotI2RlZmluZSBTTENfRU9SICAgICAgICAgNgotI2RlZmluZSBTTENfQUJPUlQgICAgICAgNwot I2RlZmluZSBTTENfRU9GICAgICAgICAgOAotI2RlZmluZSBTTENfU1VTUCAgICAgICAgOQotI2Rl ZmluZSBTTENfRUMgICAgICAgICAgMTAKLSNkZWZpbmUgU0xDX0VMICAgICAgICAgIDExCi0jZGVm aW5lIFNMQ19FVyAgICAgICAgICAxMgotI2RlZmluZSBTTENfUlAgICAgICAgICAgMTMKLSNkZWZp bmUgU0xDX0xORVhUICAgICAgIDE0Ci0jZGVmaW5lIFNMQ19YT04gICAgICAgICAxNQotI2RlZmlu ZSBTTENfWE9GRiAgICAgICAgMTYKLSNkZWZpbmUgU0xDX0ZPUlcxICAgICAgIDE3Ci0jZGVmaW5l IFNMQ19GT1JXMiAgICAgICAxOAotI2RlZmluZSBTTENfTUNMICAgICAgICAgMTkKLSNkZWZpbmUg U0xDX01DUiAgICAgICAgIDIwCi0jZGVmaW5lIFNMQ19NQ1dMICAgICAgICAyMQotI2RlZmluZSBT TENfTUNXUiAgICAgICAgMjIKLSNkZWZpbmUgU0xDX01DQk9MICAgICAgIDIzCi0jZGVmaW5lIFNM Q19NQ0VPTCAgICAgICAyNAotI2RlZmluZSBTTENfSU5TUlQgICAgICAgMjUKLSNkZWZpbmUgU0xD X09WRVIgICAgICAgIDI2Ci0jZGVmaW5lIFNMQ19FQ1IgICAgICAgICAyNwotI2RlZmluZSBTTENf RVdSICAgICAgICAgMjgKLSNkZWZpbmUgU0xDX0VCT0wgICAgICAgIDI5Ci0jZGVmaW5lIFNMQ19F RU9MICAgICAgICAzMAotCi0jZGVmaW5lIE5TTEMgICAgICAgICAgICAzMAotCi0vKgotICogRm9y IGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5LCB3ZSBkZWZpbmUgU0xDX05BTUVTIHRvIGJlIHRoZQot ICogbGlzdCBvZiBuYW1lcyBpZiBTTENfTkFNRVMgaXMgbm90IGRlZmluZWQuCi0gKi8KLSNkZWZp bmUgU0xDX05BTUVMSVNUICAgICIwIiwgIlNZTkNIIiwgIkJSSyIsICJJUCIsICJBTyIsICJBWVQi LCAiRU9SIiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIkFCT1JUIiwgIkVPRiIsICJTVVNQ IiwgIkVDIiwgIkVMIiwgIkVXIiwgIlJQIiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIkxO RVhUIiwgIlhPTiIsICJYT0ZGIiwgIkZPUlcxIiwgIkZPUlcyIiwgXAotICAgICAgICAgICAgICAg ICAgICAgICAgIk1DTCIsICJNQ1IiLCAiTUNXTCIsICJNQ1dSIiwgIk1DQk9MIiwgIk1DRU9MIiwg XAotICAgICAgICAgICAgICAgICAgICAgICAgIklOU1JUIiwgIk9WRVIiLCAiRUNSIiwgIkVXUiIs ICJFQk9MIiwgIkVFT0wiLCAwCi0jaWZkZWYgIFNMQ19OQU1FUwotY2hhciAqc2xjX25hbWVzW10g PSB7Ci0gICAgICAgIFNMQ19OQU1FTElTVAotfTsKLSNlbHNlCi1leHRlcm4gY2hhciAqc2xjX25h bWVzW107Ci0jZGVmaW5lIFNMQ19OQU1FUyBTTENfTkFNRUxJU1QKLSNlbmRpZgotCi0jZGVmaW5l IFNMQ19OQU1FX09LKHgpICAoKHVuc2lnbmVkIGludCkoeCkgPD0gTlNMQykKLSNkZWZpbmUgU0xD X05BTUUoeCkgICAgIChTTENfTkFNRV9PSyh4KT9zbGNfbmFtZXNbeF06IlVOS05PV04iKQotCi0j ZGVmaW5lIFNMQ19OT1NVUFBPUlQgICAgICAgMAotI2RlZmluZSBTTENfQ0FOVENIQU5HRSAgICAg IDEKLSNkZWZpbmUgU0xDX1ZBUklBQkxFICAgICAgICAyCi0jZGVmaW5lIFNMQ19ERUZBVUxUICAg ICAgICAgMwotI2RlZmluZSBTTENfTEVWRUxCSVRTICAgICAgIDB4MDMKLQotI2RlZmluZSBTTENf RlVOQyAgICAgICAgICAgIDAKLSNkZWZpbmUgU0xDX0ZMQUdTICAgICAgICAgICAxCi0jZGVmaW5l IFNMQ19WQUxVRSAgICAgICAgICAgMgotCi0jZGVmaW5lIFNMQ19BQ0sgICAgICAgICAgICAgMHg4 MAotI2RlZmluZSBTTENfRkxVU0hJTiAgICAgICAgIDB4NDAKLSNkZWZpbmUgU0xDX0ZMVVNIT1VU ICAgICAgICAweDIwCi0KLSNkZWZpbmUgT0xEX0VOVl9WQVIgICAgICAgICAxCi0jZGVmaW5lIE9M RF9FTlZfVkFMVUUgICAgICAgMAotI2RlZmluZSBORVdfRU5WX1ZBUiAgICAgICAgIDAKLSNkZWZp bmUgTkVXX0VOVl9WQUxVRSAgICAgICAxCi0jZGVmaW5lIEVOVl9FU0MgICAgICAgICAgICAgMgot I2RlZmluZSBFTlZfVVNFUlZBUiAgICAgICAgIDMKLQotI2RlZmluZSBGV0RYX1NDUkVFTiAgICAg ICAgIDAKLSNkZWZpbmUgRldEWF9PUEVOICAgICAgICAgICAxCi0jZGVmaW5lIEZXRFhfQ0xPU0Ug ICAgICAgICAgMgotI2RlZmluZSBGV0RYX0RBVEEgICAgICAgICAgIDMKLSNkZWZpbmUgRldEWF9P UFRJT05TICAgICAgICA0Ci0jZGVmaW5lIEZXRFhfT1BUX0RBVEEgICAgICAgNQotI2RlZmluZSBG V0RYX1hPRkYgICAgICAgICAgIDYKLSNkZWZpbmUgRldEWF9YT04gICAgICAgICAgICA3Ci0KLSNk ZWZpbmUgRldEWF9PUFRfTk9ORSAgICAgICAwCi0jZGVmaW5lIEZXRFhfT1BUX1hBVVRIICAgICAg MQotCi0vKgotICogQVVUSEVOVElDQVRJT04gc3Vib3B0aW9ucwotICovCi0KLS8qCi0gKiBXaG8g aXMgYXV0aGVudGljYXRpbmcgd2hvIC4uLgotICovCi0jZGVmaW5lIEFVVEhfQ0xJRU5UX1RPX1NF UlZFUiAgIDAgICAgICAgLyogQ2xpZW50IGF1dGhlbnRpY2F0aW5nIHNlcnZlciAqLwotI2RlZmlu ZSBBVVRIX1NFUlZFUl9UT19DTElFTlQgICAxICAgICAgIC8qIFNlcnZlciBhdXRoZW50aWNhdGlu ZyBjbGllbnQgKi8KLSNkZWZpbmUgQVVUSF9XSE9fTUFTSyAgICAgICAgICAgMQotCi0vKgotICog YW1vdW50IG9mIGF1dGhlbnRpY2F0aW9uIGRvbmUKLSAqLwotI2RlZmluZSBBVVRIX0hPV19PTkVf V0FZICAgICAgICAwCi0jZGVmaW5lIEFVVEhfSE9XX01VVFVBTCAgICAgICAgIDIKLSNkZWZpbmUg QVVUSF9IT1dfTUFTSyAgICAgICAgICAgMgotCi0vKgotICogc2hvdWxkIHdlIGJlIGVuY3J5cHRp bmc/Ci0gKi8KLSNkZWZpbmUgQVVUSF9FTkNSWVBUX09GRiAgICAgICAgICAgICAwCi0jZGVmaW5l IEFVVEhfRU5DUllQVF9VU0lOR19URUxPUFQgICAgNAotI2RlZmluZSBBVVRIX0VOQ1JZUFRfQUZU RVJfRVhDSEFOR0UgMTYKLSNkZWZpbmUgQVVUSF9FTkNSWVBUX1NUQVJUX1RMUyAgICAgIDIwCi0j ZGVmaW5lIEFVVEhfRU5DUllQVF9NQVNLICAgICAgICAgICAyMAotCi0vKgotICogd2lsbCB3ZSBi ZSBmb3J3YXJkaW5nPwotICogaWYgd2Ugd2FudCB0byBhY3RpdmF0ZSB0aGUgdXNlIG9mIHRoaXMg ZmxhZyB0aGVuCi0gKiAgICNkZWZpbmUgVVNFX0lOSV9DUkVEX0ZXRAotICovCi0jZGVmaW5lIElO SV9DUkVEX0ZXRF9PRkYgICAgICAgIDAKLSNkZWZpbmUgSU5JX0NSRURfRldEX09OICAgICAgICAg OAotI2RlZmluZSBJTklfQ1JFRF9GV0RfTUFTSyAgICAgICA4Ci0jZGVmaW5lIFVTRV9JTklfQ1JF RF9GV0QKLQotI2RlZmluZSBBVVRIVFlQRV9OVUxMICAgICAgICAgICAwCi0jZGVmaW5lIEFVVEhU WVBFX0tFUkJFUk9TX1Y0ICAgIDEKLSNkZWZpbmUgQVVUSFRZUEVfS0VSQkVST1NfVjUgICAgMgot I2RlZmluZSBBVVRIVFlQRV9TUFggICAgICAgICAgICAzCi0jZGVmaW5lIEFVVEhUWVBFX01JTksg ICAgICAgICAgIDQKLSNkZWZpbmUgQVVUSFRZUEVfU1JQICAgICAgICAgICAgNQotI2RlZmluZSBB VVRIVFlQRV9SU0EgICAgICAgICAgICA2Ci0jZGVmaW5lIEFVVEhUWVBFX1NTTCAgICAgICAgICAg IDcKLSNkZWZpbmUgQVVUSFRZUEVfTE9LSSAgICAgICAgICAxMAotI2RlZmluZSBBVVRIVFlQRV9T U0EgICAgICAgICAgIDExCi0jZGVmaW5lIEFVVEhUWVBFX0tFQV9TSiAgICAgICAgMTIKLSNkZWZp bmUgQVVUSFRZUEVfS0VBX0lOVEVHICAgICAxMwotI2RlZmluZSBBVVRIVFlQRV9EU1MgICAgICAg ICAgIDE0Ci0jZGVmaW5lIEFVVEhUWVBFX05UTE0gICAgICAgICAgMTUKLSNkZWZpbmUgQVVUSFRZ UEVfR1NTQVBJX0tSQjUgICAxNiAgICAgICAgICAgICAgIC8qIE5vdCBhbGxvY2F0ZWQgYnkgSUFO QSAqLwotI2lmZGVmIEFVVEhUWVBFX0NOVAotI3VuZGVmIEFVVEhUWVBFX0NOVAotI2VuZGlmIC8q IEFVVEhUWVBFX0NOVCAqLwotI2RlZmluZSBBVVRIVFlQRV9DTlQgICAgICAgICAgIDE3Ci0KLS8q Ci0gKiBBVVRIVFlQRXMgTGFzdCB1cGRhdGVkIDIxIE1hcmNoIDE5OTkKLSAqIGZyb20gaHR0cDov L3d3dy5pc2kuZWR1L2luLW5vdGVzL2lhbmEvYXNzaWdubWVudHMvdGVsbmV0LW9wdGlvbnMKLSAq LwotCi0jZGVmaW5lIEFVVEhUWVBFX0FVVE8gICAgICAgICAgIDk5Ci0KLSNpZmRlZiAgQVVUSF9O QU1FUwotY2hhciAqYXV0aHR5cGVfbmFtZXNbXSA9IHsKLSAgICAiTlVMTCIsICAgICAgICAgICAg ICAgICAgICAgLyogUkZDIDI5NDEgKi8KLSAgICAiS0VSQkVST1NfVjQiLCAgICAgICAgICAgICAg LyogUkZDIDI5NDEgLyAxNDExICovCi0gICAgIktFUkJFUk9TX1Y1IiwgICAgICAgICAgICAgIC8q IFJGQyAyOTQxICovCi0gICAgIlNQWCIsICAgICAgICAgICAgICAgICAgICAgIC8qIFJGQyAyOTQx IChub3QgSW50ZXJuZXQgU3RhbmRhcmQpICovCi0gICAgIk1JTksiLCAgICAgICAgICAgICAgICAg ICAgIC8qIFJGQyAyOTQxIChub3QgSW50ZXJuZXQgU3RhbmRhcmQpICovCi0gICAgIlNSUCIsICAg ICAgICAgICAgICAgICAgICAgIC8qIFJGQyAyOTQ0ICovCi0gICAgIlJTQSIsICAgICAgICAgICAg ICAgICAgICAgIC8qIFJGQyAyOTQxIChub3QgSW50ZXJuZXQgU3RhbmRhcmQpICovCi0gICAgIlNT TCIsICAgICAgICAgICAgICAgICAgICAgIC8qIFJGQyAyOTQxIChub3QgSW50ZXJuZXQgU3RhbmRh cmQpICovCi0gICAgIklBTkFfOCIsICAgICAgICAgICAgICAgICAgIC8qIG5vdCBhc3NpZ25lZCBi eSBJQU5BICovCi0gICAgIklBTkFfOSIsICAgICAgICAgICAgICAgICAgIC8qIG5vdCBhc3NpZ25l ZCBieSBJQU5BICovCi0gICAgIkxPS0kiLCAgICAgICAgICAgICAgICAgICAgIC8qIFJGQyAyOTQx IChub3QgSW50ZXJuZXQgU3RhbmRhcmQpICovCi0gICAgIlNTQSIsICAgICAgICAgICAgICAgICAg ICAgIC8qIFNjaG9jaCAqLwotICAgICJLRUFfU0oiLCAgICAgICAgICAgICAgICAgICAvKiBSRkMg Mjk1MSAqLwotICAgICJLRUFfU0pfSU5URUciLCAgICAgICAgICAgICAvKiBSRkMgMjk1MSAqLwot ICAgICJEU1MiLCAgICAgICAgICAgICAgICAgICAgICAvKiBSRkMgMjk0MyAqLwotICAgICJOVExN IiwgICAgICAgICAgICAgICAgICAgICAvKiBLYWhuIDxsb3Vpc2tAbWljcm9zb2Z0LmNvbT4gKi8K LSAgICAiR1NTQVBJLUtSQjUiLCAgICAgICAgICAgICAgLyogZXhwZXJpbWVudGFsIC0gYWx0bWFu ICovCi0gICAgMAotfTsKLWNoYXIgKiBhdXRobW9kZV9uYW1lc1tdID0gewotICAgICJDTElFTlRf VE9fU0VSVkVSfE9ORV9XQVkiLAotICAgICJTRVJWRVJfVE9fQ0xJRU5UfE9ORV9XQVkiLAotICAg ICJDTElFTlRfVE9fU0VSVkVSfE1VVFVBTCIsCi0gICAgIlNFUlZFUl9UT19DTElFTlR8TVVUVUFM IiwKLSAgICAiQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZfEVOQ1JZUFRfVVNJTkdfVEVMT1BUIiwK LSAgICAiU0VSVkVSX1RPX0NMSUVOVHxPTkVfV0FZfEVOQ1JZUFRfVVNJTkdfVEVMT1BUIiwKLSAg ICAiQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQVF9VU0lOR19URUxPUFQiLAotICAgICJT RVJWRVJfVE9fQ0xJRU5UfE1VVFVBTHxFTkNSWVBUX1VTSU5HX1RFTE9QVCIsCi0gICAgIkNMSUVO VF9UT19TRVJWRVJ8T05FX1dBWXxDUkVEX0ZXRCIsCi0gICAgIlNFUlZFUl9UT19DTElFTlR8T05F X1dBWXxDUkVEX0ZXRCIsCi0gICAgIkNMSUVOVF9UT19TRVJWRVJ8TVVUVUFMfENSRURfRldEIiwK LSAgICAiU0VSVkVSX1RPX0NMSUVOVHxNVVRVQUx8Q1JFRF9GV0QiLAotICAgICJDTElFTlRfVE9f U0VSVkVSfE9ORV9XQVl8RU5DUllQVF9VU0lOR19URUxPUFR8Q1JFRF9GV0QiLAotICAgICJTRVJW RVJfVE9fQ0xJRU5UfE9ORV9XQVl8RU5DUllQVF9VU0lOR19URUxPUFR8Q1JFRF9GV0QiLAotICAg ICJDTElFTlRfVE9fU0VSVkVSfE1VVFVBTHxFTkNSWVBUX1VTSU5HX1RFTE9QVHxDUkVEX0ZXRCIs Ci0gICAgIlNFUlZFUl9UT19DTElFTlR8TVVUVUFMfEVOQ1JZUFRfVVNJTkdfVEVMT1BUfENSRURf RldEIiwKLSAgICAiQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZfEVOQ1JZUFRfQUZURVJfRVhDSEFO R0UiLAotICAgICJTRVJWRVJfVE9fQ0xJRU5UfE9ORV9XQVl8RU5DUllQVF9BRlRFUl9FWENIQU5H RSIsCi0gICAgIkNMSUVOVF9UT19TRVJWRVJ8TVVUVUFMfEVOQ1JZUFRfQUZURVJfRVhDSEFOR0Ui LAotICAgICJTRVJWRVJfVE9fQ0xJRU5UfE1VVFVBTHxFTkNSWVBUX0FGVEVSX0VYQ0hBTkdFIiwK LSAgICAiQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZfEVOQ1JZUFRfU1RBUlRfVExTIiwKLSAgICAi U0VSVkVSX1RPX0NMSUVOVHxPTkVfV0FZfEVOQ1JZUFRfU1RBUlRfVExTIiwKLSAgICAiQ0xJRU5U X1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQVF9TVEFSVF9UTFMiLAotICAgICJTRVJWRVJfVE9fQ0xJ RU5UfE1VVFVBTHxFTkNSWVBUX1NUQVJUX1RMUyIsCi0gICAgIkNMSUVOVF9UT19TRVJWRVJ8T05F X1dBWXxFTkNSWVBUX0FGVEVSX0VYQ0hBTkdFfENSRURfRldEIiwKLSAgICAiU0VSVkVSX1RPX0NM SUVOVHxPTkVfV0FZfEVOQ1JZUFRfQUZURVJfRVhDSEFOR0V8Q1JFRF9GV0QiLAotICAgICJDTElF TlRfVE9fU0VSVkVSfE1VVFVBTHxFTkNSWVBUX0FGVEVSX0VYQ0hBTkdFfENSRURfRldEIiwKLSAg ICAiU0VSVkVSX1RPX0NMSUVOVHxNVVRVQUx8RU5DUllQVF9BRlRFUl9FWENIQU5HRXxDUkVEX0ZX RCIsCi0gICAgIkNMSUVOVF9UT19TRVJWRVJ8T05FX1dBWXxFTkNSWVBUX1NUQVJUX1RMU3xDUkVE X0ZXRCIsCi0gICAgIlNFUlZFUl9UT19DTElFTlR8T05FX1dBWXxFTkNSWVBUX1NUQVJUX1RMU3xD UkVEX0ZXRCIsCi0gICAgIkNMSUVOVF9UT19TRVJWRVJ8TVVUVUFMfEVOQ1JZUFRfU1RBUlRfVExT fENSRURfRldEIiwKLSAgICAiU0VSVkVSX1RPX0NMSUVOVHxNVVRVQUx8RU5DUllQVF9TVEFSVF9U TFN8Q1JFRF9GV0QiLAotICAgIDAKLX07Ci0jZWxzZQotZXh0ZXJuIGNoYXIgKmF1dGh0eXBlX25h bWVzW107Ci1leHRlcm4gY2hhciAqYXV0aG1vZGVfbmFtZXNbXTsKLSNlbmRpZgotI2RlZmluZSBB VVRITU9ERV9DTlQgIDMyCi0KLSNkZWZpbmUgQVVUSFRZUEVfTkFNRV9PSyh4KSAgICAgKCh1bnNp Z25lZCBpbnQpKHgpIDwgQVVUSFRZUEVfQ05UKQotI2RlZmluZSBBVVRIVFlQRV9OQU1FKHgpICAg ICAgKEFVVEhUWVBFX05BTUVfT0soeCk/YXV0aHR5cGVfbmFtZXNbeF06IlVOS05PV04iKQotCi0j ZGVmaW5lIEFVVEhNT0RFX05BTUVfT0soeCkgICAgICgodW5zaWduZWQgaW50KSh4KSA8IEFVVEhN T0RFX0NOVCkKLSNkZWZpbmUgQVVUSE1PREVfTkFNRSh4KSAgICAgIChBVVRITU9ERV9OQU1FX09L KHgpP2F1dGhtb2RlX25hbWVzW3hdOiJVTktOT1dOIikKLQotLyogS2VyYmVyb3MgQXV0aGVudGlj YXRpb24gTWVzc2FnZSBJZGVudGlmaWVycyAqLwotI2RlZmluZSBLUkJfQVVUSCAgICAgICAgICAg ICAgICAwICAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIGRhdGEgZm9sbG93cyAqLwotI2RlZmluZSBL UkJfUkVKRUNUICAgICAgICAgICAgICAxICAgICAgIC8qIFJlamVjdGVkIChyZWFzb24gbWlnaHQg Zm9sbG93KSAqLwotI2RlZmluZSBLUkJfQUNDRVBUICAgICAgICAgICAgICAyICAgICAgIC8qIEFj Y2VwdGVkICovCi0jZGVmaW5lIEtSQjRfQ0hBTExFTkdFICAgICAgICAgIDMKLSNkZWZpbmUgS1JC NF9SRVNQT05TRSAgICAgICAgICAgNAotI2RlZmluZSBLUkI1X1JFU1BPTlNFICAgICAgICAgICAz ICAgICAgIC8qIFJlc3BvbnNlIGZvciBtdXR1YWwgYXV0aC4gKi8KLSNkZWZpbmUgS1JCNV9GT1JX QVJEICAgICAgICAgICAgNCAgICAgICAvKiBGb3J3YXJkZWQgY3JlZGVudGlhbHMgZm9sbG93ICov Ci0jZGVmaW5lIEtSQjVfRk9SV0FSRF9BQ0NFUFQgICAgIDUgICAgICAgLyogRm9yd2FyZGVkIGNy ZWRlbnRpYWxzIGFjY2VwdGVkICovCi0jZGVmaW5lIEtSQjVfRk9SV0FSRF9SRUpFQ1QgICAgIDYg ICAgICAgLyogRm9yd2FyZGVkIGNyZWRlbnRpYWxzIHJlamVjdGVkICovCi0jZGVmaW5lIEtSQjVf VExTX1ZFUklGWSAgICAgICAgIDcgICAgICAgLyogVExTIEZpbmlzaGVkIE1zZyB2ZXJpZmllciAq LwotCi0vKiBHU1NBUEktS1JCNSBBdXRoZW50aWNhdGlvbiBNZXNzYWdlIElkZW50aWZpZXJzICov Ci0jZGVmaW5lIEdTU19BVVRIX0RBVEEgICAgICAgICAgIDAgICAgICAgLyogQXV0aGVudGljYXRp b24gZGF0YSBmb2xsb3dzICovCi0jZGVmaW5lIEdTU19SRUpFQ1QgICAgICAgICAgICAgIDEgICAg ICAgLyogUmVqZWN0ZWQgKHJlYXNvbiBtaWdodCBmb2xsb3cpICovCi0jZGVmaW5lIEdTU19BQ0NF UFQgICAgICAgICAgICAgIDIgICAgICAgLyogQWNjZXB0ZWQgKHVzZXJuYW1lIG1pZ2h0IGZvbGxv dykgKi8KLSNkZWZpbmUgR1NTX0NPTlRJTlVFICAgICAgICAgICAgMwotCi0vKiBTZWN1cmUgUmVt b3RlIFBhc3N3b3JkIEF1dGhlbnRpY2F0aW9uIE1lc3NhZ2UgSWRlbnRpZmllcnMgKi8KLSNkZWZp bmUgU1JQX0FVVEggICAgICAgICAgICAgICAgMCAgICAgICAvKiBBdXRoZW50aWNhdGlvbiBkYXRh IGZvbGxvd3MgKi8KLSNkZWZpbmUgU1JQX1JFSkVDVCAgICAgICAgICAgICAgMSAgICAgICAvKiBS ZWplY3RlZCAocmVhc29uIG1pZ2h0IGZvbGxvdykgKi8KLSNkZWZpbmUgU1JQX0FDQ0VQVCAgICAg ICAgICAgICAgMiAgICAgICAvKiBBY2NlcHRlZCAqLwotI2RlZmluZSBTUlBfQ0hBTExFTkdFICAg ICAgICAgICAzCi0jZGVmaW5lIFNSUF9SRVNQT05TRSAgICAgICAgICAgIDQKLSNkZWZpbmUgU1JQ X0VYUCAgICAgICAgICAgICAgICAgOCAgICAgICAvKiAqLwotI2RlZmluZSBTUlBfUEFSQU1TICAg ICAgICAgICAgICA5ICAgICAgIC8qICovCi0KLS8qIFRlbG5ldCBBdXRoIHVzaW5nIEtFQSBhbmQg U0tJUEpBQ0sgKi8KLQotI2RlZmluZSBLRUFfQ0VSVEFfUkEgICAgICAgICAgICAgIDEKLSNkZWZp bmUgS0VBX0NFUlRCX1JCX0lWQl9OT05DRUIgICAyCi0jZGVmaW5lIEtFQV9JVkFfUkVTUE9OU0VC X05PTkNFQSAgMwotI2RlZmluZSBLRUFfUkVTUE9OU0VBICAgICAgICAgICAgIDQKLQotLyogVGlt IEh1ZHNvbidzIFNTTCBBdXRoZW50aWNhdGlvbiBNZXNzYWdlIElkZW50aWZpZXJzICovCi0jZGVm aW5lIFNTTF9TVEFSVCAgICAgMQotI2RlZmluZSBTU0xfQUNDRVBUICAgIDIKLSNkZWZpbmUgU1NM X1JFSkVDVCAgICAzCi0KLS8qIE1pY3Jvc29mdCBOVExNIEF1dGhlbnRpY2F0aW9uIE1lc3NhZ2Ug SWRlbnRpZmllcnMgKi8KLSNkZWZpbmUgTlRMTV9BVVRIICAgMAotI2RlZmluZSBOVExNX0NIQUxM RU5HRSAxCi0jZGVmaW5lIE5UTE1fUkVTUE9OU0UgIDIKLSNkZWZpbmUgTlRMTV9BQ0NFUFQgMwot I2RlZmluZSBOVExNX1JFSkVDVCA0Ci0KLS8qIEdlbmVyaWMgQ29uc3RhbnRzICovCi0jZGVmaW5l IEFVVEhfU1VDQ0VTUyAgICAwCi0jZGVmaW5lIEFVVEhfRkFJTFVSRSAgICAyNTUKLQotLyoKLSAq IEVOQ1JZUFRpb24gc3Vib3B0aW9ucwotICovCi0jZGVmaW5lIEVOQ1JZUFRfSVMgICAgICAgICAg ICAgIDAgICAgICAgLyogSSBwaWNrIGVuY3J5cHRpb24gdHlwZSAuLi4gKi8KLSNkZWZpbmUgRU5D UllQVF9TVVBQT1JUICAgICAgICAgMSAgICAgICAvKiBJIHN1cHBvcnQgZW5jcnlwdGlvbiB0eXBl cyAuLi4gKi8KLSNkZWZpbmUgRU5DUllQVF9SRVBMWSAgICAgICAgICAgMiAgICAgICAvKiBJbml0 aWFsIHNldHVwIHJlc3BvbnNlICovCi0jZGVmaW5lIEVOQ1JZUFRfU1RBUlQgICAgICAgICAgIDMg ICAgICAgLyogQW0gc3RhcnRpbmcgdG8gc2VuZCBlbmNyeXB0ZWQgKi8KLSNkZWZpbmUgRU5DUllQ VF9FTkQgICAgICAgICAgICAgNCAgICAgICAvKiBBbSBlbmRpbmcgZW5jcnlwdGVkICovCi0jZGVm aW5lIEVOQ1JZUFRfUkVRU1RBUlQgICAgICAgIDUgICAgICAgLyogUmVxdWVzdCB5b3Ugc3RhcnQg ZW5jcnlwdGluZyAqLwotI2RlZmluZSBFTkNSWVBUX1JFUUVORCAgICAgICAgICA2ICAgICAgIC8q IFJlcXVlc3QgeW91IHNlbmQgZW5jcnlwdGluZyAqLwotI2RlZmluZSBFTkNSWVBUX0VOQ19LRVlJ RCAgICAgICA3Ci0jZGVmaW5lIEVOQ1JZUFRfREVDX0tFWUlEICAgICAgIDgKLSNkZWZpbmUgRU5D UllQVF9DTlQgICAgICAgICAgICAgOQotCi0jZGVmaW5lIEVOQ1RZUEVfQU5ZICAgICAgICAgICAg IDAKLSNkZWZpbmUgRU5DVFlQRV9ERVNfQ0ZCNjQgICAgICAgMQotI2RlZmluZSBFTkNUWVBFX0RF U19PRkI2NCAgICAgICAyCi0jZGVmaW5lIEVOQ1RZUEVfREVTM19DRkI2NCAgICAgIDMKLSNkZWZp bmUgRU5DVFlQRV9ERVMzX09GQjY0ICAgICAgNAotI2RlZmluZSBFTkNUWVBFX0NBU1Q1XzQwX0NG QjY0ICA4Ci0jZGVmaW5lIEVOQ1RZUEVfQ0FTVDVfNDBfT0ZCNjQgIDkKLSNkZWZpbmUgRU5DVFlQ RV9DQVNUMTI4X0NGQjY0ICAgMTAKLSNkZWZpbmUgRU5DVFlQRV9DQVNUMTI4X09GQjY0ICAgMTEK LSNpZmRlZiBFTkNUWVBFX0NOVAotI3VuZGVmIEVOQ1RZUEVfQ05UCi0jZW5kaWYKLSNkZWZpbmUg RU5DVFlQRV9DTlQgICAgICAgICAgICAgMTIKLQotI2lmZGVmICBFTkNSWVBUX05BTUVTCi1jaGFy ICplbmNyeXB0X25hbWVzW10gPSB7Ci0gICAgICAgICJJUyIsICJTVVBQT1JUIiwgIlJFUExZIiwg IlNUQVJUIiwgIkVORCIsCi0gICAgICAgICJSRVFVRVNULVNUQVJUIiwgIlJFUVVFU1QtRU5EIiwg IkVOQy1LRVlJRCIsICJERUMtS0VZSUQiLAotICAgICAgICAwCi19OwotY2hhciAqZW5jdHlwZV9u YW1lc1tdID0gewotICAgICJBTlkiLAotICAgICJERVNfQ0ZCNjQiLCAgICAgICAgICAgICAgICAv KiBSRkMgMjk1MiAqLwotICAgICJERVNfT0ZCNjQiLCAgICAgICAgICAgICAgICAvKiBSRkMgMjk1 MyAqLwotICAgICJERVMzX0NGQjY0IiwgICAgICAgICAgICAgICAvKiBSRkMgMjk0NyAqLwotICAg ICJERVMzX09GQjY0IiwgICAgICAgICAgICAgICAvKiBSRkMgMjk0OCAqLwotICAgICJVTktOT1dO LTUiLAotICAgICJVTktOT1dOLTYiLAotICAgICJVTktOT1dOLTciLAotICAgICJDQVNUNV80MF9D RkI2NCIsICAgICAgICAgICAvKiBSRkMgMjk1MCAqLwotICAgICJDQVNUNV80MF9PRkI2NCIsICAg ICAgICAgICAvKiBSRkMgMjk0OSAqLwotICAgICJDQVNUMTI4X0NGQjY0IiwgICAgICAgICAgICAv KiBSRkMgMjk1MCovCi0gICAgIkNBU1QxMjhfT0ZCNjQiLCAgICAgICAgICAgIC8qIFJGQyAyOTQ5 ICovCi0gICAgMAotfTsKLSNlbHNlCi1leHRlcm4gY2hhciAqZW5jcnlwdF9uYW1lc1tdOwotZXh0 ZXJuIGNoYXIgKmVuY3R5cGVfbmFtZXNbXTsKLSNlbmRpZgotCi0jZGVmaW5lIEVOQ1JZUFRfTkFN RV9PSyh4KSAgICAgICgodW5zaWduZWQgaW50KSh4KSA8IEVOQ1JZUFRfQ05UKQotI2RlZmluZSBF TkNSWVBUX05BTUUoeCkgICAgICAoRU5DUllQVF9OQU1FX09LKHgpP2VuY3J5cHRfbmFtZXNbeF06 IlVOS05PV04iKQotCi0jZGVmaW5lIEVOQ1RZUEVfTkFNRV9PSyh4KSAgICAgICgodW5zaWduZWQg aW50KSh4KSA8IEVOQ1RZUEVfQ05UKQotI2RlZmluZSBFTkNUWVBFX05BTUUoeCkgICAgICAoRU5D VFlQRV9OQU1FX09LKHgpP2VuY3R5cGVfbmFtZXNbeF06IlVOS05PV04iKQotCi0vKiBGb3Igc2V0 dGluZyB0aGUgc3RhdGUgb2YgdmFsaWRVc2VyICovCi0KLSNkZWZpbmUgQVVUSF9SRUpFQ1QgICAg IDAgICAgICAgLyogUmVqZWN0ZWQgKi8KLSNkZWZpbmUgQVVUSF9VTktOT1dOICAgIDEgICAgICAg LyogV2UgZG9uJ3Qga25vdyB3aG8gaGUgaXMsIGJ1dCBoZSdzIG9rYXkgKi8KLSNkZWZpbmUgQVVU SF9PVEhFUiAgICAgIDIgICAgICAgLyogV2Uga25vdyBoaW0sIGJ1dCBub3QgaGlzIG5hbWUgKi8K LSNkZWZpbmUgQVVUSF9VU0VSICAgICAgIDMgICAgICAgLyogV2Uga25vdyBoZSBuYW1lICovCi0j ZGVmaW5lIEFVVEhfVkFMSUQgICAgICA0ICAgICAgIC8qIFdlIGtub3cgaGltLCBhbmQgaGUgbmVl ZHMgbm8gcGFzc3dvcmQgKi8KLQotLyogS2VybWl0IE9wdGlvbiBTdWJuZWdvdGlhdGlvbnMgKi8K LQotI2RlZmluZSBLRVJNSVRfU1RBUlQgICAgICAwCi0jZGVmaW5lIEtFUk1JVF9TVE9QICAgICAg IDEKLSNkZWZpbmUgS0VSTUlUX1JFUV9TVEFSVCAgMgotI2RlZmluZSBLRVJNSVRfUkVRX1NUT1Ag ICAzCi0jZGVmaW5lIEtFUk1JVF9TT1AgICAgICAgIDQKLSNkZWZpbmUgS0VSTUlUX1JFU1BfU1RB UlQgOAotI2RlZmluZSBLRVJNSVRfUkVTUF9TVE9QICA5Ci0KLS8qIEZvciBTRVQgVEVMTkVUIEFV VEggSE9XICAqLwotI2RlZmluZSBUTl9BVVRIX0hPV19BTlkgICAgIDAKLSNkZWZpbmUgVE5fQVVU SF9IT1dfT05FX1dBWSAxCi0jZGVmaW5lIFROX0FVVEhfSE9XX01VVFVBTCAgMgotCi0vKiBGb3Ig U0VUIFRFTE5FVCBBVVRIIEVOQ1JZUFQgKi8KLSNkZWZpbmUgVE5fQVVUSF9FTkNfQU5ZICAgICAw Ci0jZGVmaW5lIFROX0FVVEhfRU5DX05PTkUgICAgMQotI2RlZmluZSBUTl9BVVRIX0VOQ19URUxP UFQgIDIKLSNkZWZpbmUgVE5fQVVUSF9FTkNfRVhDSCAgICAzICAvKiBub3QgdXNlZCBpbiBLZXJt aXQgKi8KLSNkZWZpbmUgVE5fQVVUSF9FTkNfVExTICAgICA0Ci0KLS8qIFRlbG5ldCBwcm90b2Nv bCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBDLUtlcm1pdCAqLwotCi1fUFJPVE9UWVAoIGludCB0bl9p bmksICh2b2lkKSApOyAgICAgICAgLyogVGVsbmV0IHByb3RvY29sIHN1cHBvcnQgKi8KLV9QUk9U T1RZUCggaW50IHRuX3Jlc2V0LCAodm9pZCkpOwotX1BST1RPVFlQKCBpbnQgdG5fc2V0X21vZGVz LCAodm9pZCkpOwotX1BST1RPVFlQKCBpbnQgdG5fc29wdCwgKGludCwgaW50KSApOwotX1BST1RP VFlQKCBpbnQgdG5fZG9vcCwgKENIQVIsIGludCwgaW50ICgqKShpbnQpICkgKTsKLV9QUk9UT1RZ UCggaW50IHRuX3N0dHlwLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHRuX3NuZW52LCAoQ0hB UiAqLCBpbnQpICkgOwotX1BST1RPVFlQKCBpbnQgdG5fcm5lbnYsIChDSEFSICosIGludCkgKSA7 Ci1fUFJPVE9UWVAoIGludCB0bl93YWl0LCAoY2hhciAqKSApIDsKLV9QUk9UT1RZUCggaW50IHRu X3B1c2gsICh2b2lkKSApIDsKLV9QUk9UT1RZUCggaW50IHRuc25kYnJrLCAodm9pZCkgKTsKLV9Q Uk9UT1RZUCggVk9JRCB0bl9kZWJ1ZywgKGNoYXIgKikpOwotX1BST1RPVFlQKCBpbnQgdG5faGV4 LCAoQ0hBUiAqLCBpbnQsIENIQVIgKiwgaW50KSk7Ci1fUFJPVE9UWVAoIHVuc2lnbmVkIGNoYXIg KiB0bl9nZXRfZGlzcGxheSwgKHZvaWQpKTsKLSNpZmRlZiBJS1NfT1BUSU9OCi1fUFJPVE9UWVAo IGludCB0bl9zaWtzLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgaWtzX3dhaXQsIChpbnQsIGlu dCkgKTsKLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0jaWZkZWYgQ0tfTkFXUwotX1BST1RPVFlQ KCBpbnQgdG5fc25hd3MsICh2b2lkKSApOwotI2VuZGlmIC8qIENLX05BV1MgKi8KLSNpZmRlZiBD S19YRElTUExPQwotX1BST1RPVFlQKCBpbnQgdG5fc3hkaXNwbG9jLCAodm9pZCkgKTsKLSNlbmRp ZiAvKiBDS19YRElTUExPQyAqLwotI2lmZGVmIENLX1NORExPQwotX1BST1RPVFlQKCBpbnQgdG5f c25kbG9jLCAodm9pZCkgKTsKLSNlbmRpZiAvKiBDS19TTkRMT0MgKi8KLSNpZmRlZiBDS19GT1JX QVJEX1gKLS8qIEZyb20gWGF1dGguaCAqLwotdHlwZWRlZiBzdHJ1Y3QgeGF1dGggewotICAgIHVu c2lnbmVkIHNob3J0ICAgZmFtaWx5OwotICAgIHVuc2lnbmVkIHNob3J0ICAgYWRkcmVzc19sZW5n dGg7Ci0gICAgY2hhciAgICAgICAgICAgICphZGRyZXNzOwotICAgIHVuc2lnbmVkIHNob3J0ICAg bnVtYmVyX2xlbmd0aDsKLSAgICBjaGFyICAgICAgICAgICAgKm51bWJlcjsKLSAgICB1bnNpZ25l ZCBzaG9ydCAgIG5hbWVfbGVuZ3RoOwotICAgIGNoYXIgICAgICAgICAgICAqbmFtZTsKLSAgICB1 bnNpZ25lZCBzaG9ydCAgIGRhdGFfbGVuZ3RoOwotICAgIGNoYXIgICAgICAgICAgICAqZGF0YTsK LX0gWGF1dGg7Ci0KLSNpbmNsdWRlICAgPHN0ZGlvLmg+Ci0KLS8qIGZyb20gWC5oICovCi0jZGVm aW5lIEZhbWlseUludGVybmV0ICAgICAgICAgIDAKLSNkZWZpbmUgRmFtaWx5REVDbmV0ICAgICAg ICAgICAgMQotI2RlZmluZSBGYW1pbHlDaGFvcyAgICAgICAgICAgICAyCi0KLSMgZGVmaW5lIEZh bWlseUxvY2FsICgyNTYpICAgICAgLyogbm90IHBhcnQgb2YgWCBzdGFuZGFyZCAoaS5lLiBYLmgp ICovCi0jIGRlZmluZSBGYW1pbHlXaWxkICAoNjU1MzUpCi0jIGRlZmluZSBGYW1pbHlOZXRuYW1l ICAgICgyNTQpICAgLyogbm90IHBhcnQgb2YgWCBzdGFuZGFyZCAqLwotIyBkZWZpbmUgRmFtaWx5 S3JiNVByaW5jaXBhbCAoMjUzKSAvKiBLZXJiZXJvcyA1IHByaW5jaXBhbCBuYW1lICovCi0jIGRl ZmluZSBGYW1pbHlMb2NhbEhvc3QgKDI1MikgIC8qIGZvciBsb2NhbCBub24tbmV0IGF1dGhlbnRp Y2F0aW9uICovCi1jaGFyICpYYXVGaWxlTmFtZSgpOwotCi1YYXV0aCAqWGF1UmVhZEF1dGgoCi1G SUxFKiAgIC8qIGF1dGhfZmlsZSAqLwotKTsKLQotaW50IFhhdVdyaXRlQXV0aCgKLUZJTEUqICAg ICAgICAgICAvKiBhdXRoX2ZpbGUgKi8sCi1YYXV0aCogICAgICAgICAgLyogYXV0aCAqLwotKTsK LQotWGF1dGggKlhhdUdldEF1dGhCeU5hbWUoCi1jb25zdCBjaGFyKiAgICAgLyogZGlzcGxheV9u YW1lICovCi0pOwotCi1YYXV0aCAqWGF1R2V0QXV0aEJ5QWRkcigKLXVuc2lnbmVkIGludCAgICAv KiBmYW1pbHkgKi8sCi11bnNpZ25lZCBpbnQgICAgLyogYWRkcmVzc19sZW5ndGggKi8sCi1jb25z dCBjaGFyKiAgICAgLyogYWRkcmVzcyAqLywKLXVuc2lnbmVkIGludCAgICAvKiBudW1iZXJfbGVu Z3RoICovLAotY29uc3QgY2hhciogICAgIC8qIG51bWJlciAqLywKLXVuc2lnbmVkIGludCAgICAv KiBuYW1lX2xlbmd0aCAqLywKLWNvbnN0IGNoYXIqICAgICAvKiBuYW1lICovCi0pOwotCi12b2lk IFhhdURpc3Bvc2VBdXRoKAotWGF1dGgqICAgICAgICAgIC8qIGF1dGggKi8KLSk7Ci0KLQotX1BS T1RPVFlQKCBpbnQgZndkeF9jcmVhdGVfbGlzdGVuX3NvY2tldCwoaW50KSk7Ci1fUFJPVE9UWVAo IGludCBmd2R4X29wZW5fY2xpZW50X2NoYW5uZWwsKGludCkpOwotX1BST1RPVFlQKCBpbnQgZndk eF9vcGVuX3NlcnZlcl9jaGFubmVsLChWT0lEKSk7Ci1fUFJPVE9UWVAoIGludCBmd2R4X2Nsb3Nl X2NoYW5uZWwsKGludCkpOwotX1BST1RPVFlQKCBpbnQgZndkeF93cml0ZV9kYXRhX3RvX2NoYW5u ZWwsKGludCwgY2hhciAqLGludCkpOwotX1BST1RPVFlQKCBpbnQgZndkeF9zZW5kX2RhdGFfZnJv bV9jaGFubmVsLChpbnQsIGNoYXIgKixpbnQpKTsKLV9QUk9UT1RZUCggaW50IGZ3ZHhfY2xvc2Vf YWxsLChWT0lEKSk7Ci1fUFJPVE9UWVAoIGludCBmd2R4X3RuX3NiLCh1bnNpZ25lZCBjaGFyICos IGludCkpOwotX1BST1RPVFlQKCBpbnQgdG5fc25kZndkeCwgKHZvaWQpKTsKLV9QUk9UT1RZUCgg aW50IGZ3ZHhfc2VuZF9jbG9zZSwoaW50KSk7Ci1fUFJPVE9UWVAoIGludCBmd2R4X3NlbmRfb3Bl biwoaW50KSk7Ci1fUFJPVE9UWVAoIGludCBmd2R4X2NsaWVudF9yZXBseV9vcHRpb25zLChjaGFy ICosIGludCkpOwotX1BST1RPVFlQKCBpbnQgZndkeF9zZW5kX29wdGlvbnMsKFZPSUQpKTsKLV9Q Uk9UT1RZUCggVk9JRCBmd2R4X2NoZWNrX3NvY2tldHMsKGZkX3NldCAqKSk7Ci1fUFJPVE9UWVAo IGludCBmd2R4X2luaXRfZmRfc2V0LChmZF9zZXQgKikpOwotX1BST1RPVFlQKCBpbnQgZndkeF9h dXRob3JpemVfY2hhbm5lbCwgKGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLV9QUk9UT1RZ UCggaW50IGZ3ZHhfY3JlYXRlX2Zha2VfeGF1dGgsIChjaGFyICosIGludCwgaW50KSk7Ci1fUFJP VE9UWVAoIGludCBmd2R4X3NlbmRfeGF1dGhfdG9feHNlcnZlciwgKGludCwgdW5zaWduZWQgY2hh ciAqLCBpbnQgbGVuKSk7Ci1fUFJPVE9UWVAoIGludCBmd2R4X3NlcnZlcl9hdmFpbCwgKFZPSUQp KTsKLV9QUk9UT1RZUCggaW50IGZ3ZHhfcGFyc2VfZGlzcGxheW5hbWUsIChjaGFyICosIGludCAq LCBjaGFyICoqLCBpbnQgKiwgaW50ICosIGNoYXIgKiopKTsKLQotI2lmZGVmIE5UCi1fUFJPVE9U WVAoIFZPSUQgZndkeF90aHJlYWQsKFZPSUQgKikpOwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYg LyogQ0tfRk9SV0FSRF9YICovCi0KLSNpZmRlZiBUTl9DT01QT1JUCi0jZGVmaW5lIFROQ19DMlNf U0lHTkFUVVJFICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFROQ19DMlNfU0VUX0JBVURSQVRF ICAgICAgICAgICAgICAxCi0jZGVmaW5lIFROQ19DMlNfU0VUX0RBVEFTSVpFICAgICAgICAgICAg ICAyCi0jZGVmaW5lIFROQ19DMlNfU0VUX1BBUklUWSAgICAgICAgICAgICAgICAzCi0jZGVmaW5l IFROQ19DMlNfU0VUX1NUT1BTSVpFICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFROQ19DMlNfU0VU X0NPTlRST0wgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFROQ19DMlNfTk9USUZZX0xJTkVTVEFU RSAgICAgICAgICA2Ci0jZGVmaW5lIFROQ19DMlNfTk9USUZZX01PREVNU1RBVEUgICAgICAgICA3 Ci0jZGVmaW5lIFROQ19DMlNfRkxPV19TVVNQRU5EICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFRO Q19DMlNfRkxPV19SRVNVTUUgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFROQ19DMlNfU0VUX0xT X01BU0sgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFROQ19DMlNfU0VUX01TX01BU0sgICAgICAg ICAgICAgIDExCi0jZGVmaW5lIFROQ19DMlNfUFVSR0UgICAgICAgICAgICAgICAgICAgIDEyCi0j ZGVmaW5lIFROQ19TMkNfU0lHTkFUVVJFICAgICAgICAgICAgICAgMTAwCi0jZGVmaW5lIFROQ19T MkNfU0VUX0JBVURSQVRFICAgICAgICAgICAgMTAxCi0jZGVmaW5lIFROQ19TMkNfU0VUX0RBVEFT SVpFICAgICAgICAgICAgMTAyCi0jZGVmaW5lIFROQ19TMkNfU0VUX1BBUklUWSAgICAgICAgICAg ICAgMTAzCi0jZGVmaW5lIFROQ19TMkNfU0VUX1NUT1BTSVpFICAgICAgICAgICAgMTA0Ci0jZGVm aW5lIFROQ19TMkNfU0VUX0NPTlRST0wgICAgICAgICAgICAgMTA1Ci0jZGVmaW5lIFROQ19TMkNf U0VORF9MUyAgICAgICAgICAgICAgICAgMTA2Ci0jZGVmaW5lIFROQ19TMkNfU0VORF9NUyAgICAg ICAgICAgICAgICAgMTA3Ci0jZGVmaW5lIFROQ19TMkNfRkxPV19TVVNQRU5EICAgICAgICAgICAg MTA4Ci0jZGVmaW5lIFROQ19TMkNfRkxPV19SRVNVTUUgICAgICAgICAgICAgMTA5Ci0jZGVmaW5l IFROQ19TMkNfU0VUX0xTX01BU0sgICAgICAgICAgICAgMTEwCi0jZGVmaW5lIFROQ19TMkNfU0VU X01TX01BU0sgICAgICAgICAgICAgMTExCi0jZGVmaW5lIFROQ19TMkNfUFVSR0UgICAgICAgICAg ICAgICAgICAgMTEyCi0KLS8qIFRoZSBDT01QT1JUIHZhbHVlcyBhcmUgbm90IGRlZmluZWQgaW4g UkZDIDIyMTcgKi8KLSNkZWZpbmUgVE5DX0JQU19SRVFVRVNUICAgICAgICAgICAgICAgICAgMAot I2RlZmluZSBUTkNfQlBTXzMwMCAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFROQ19C UFNfNjAwICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgVE5DX0JQU18xMjAwICAgICAg ICAgICAgICAgICAgICAgNQotI2RlZmluZSBUTkNfQlBTXzI0MDAgICAgICAgICAgICAgICAgICAg ICA2Ci0jZGVmaW5lIFROQ19CUFNfNDgwMCAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUg VE5DX0JQU185NjAwICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBUTkNfQlBTXzE0NDAw ICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFROQ19CUFNfMTkyMDAgICAgICAgICAgICAg ICAgICAgMTAKLSNkZWZpbmUgVE5DX0JQU18yODgwMCAgICAgICAgICAgICAgICAgICAxMQotI2Rl ZmluZSBUTkNfQlBTXzM4NDAwICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFROQ19CUFNf NTc2MDAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgVE5DX0JQU18xMTUyMDAgICAgICAg ICAgICAgICAgICAxNAotI2RlZmluZSBUTkNfQlBTXzIzMDQwMCAgICAgICAgICAgICAgICAgIDE1 Ci0jZGVmaW5lIFROQ19CUFNfNDYwODAwICAgICAgICAgICAgICAgICAgMTYKLQotI2RlZmluZSBU TkNfRFNfUkVRVUVTVCAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFROQ19EU181ICAgICAg ICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgVE5DX0RTXzYgICAgICAgICAgICAgICAgICAg ICAgICAgNgotI2RlZmluZSBUTkNfRFNfNyAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVm aW5lIFROQ19EU184ICAgICAgICAgICAgICAgICAgICAgICAgIDgKLQotI2RlZmluZSBUTkNfUEFS X1JFUVVFU1QgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFROQ19QQVJfTk9ORSAgICAgICAg ICAgICAgICAgICAgIDEKLSNkZWZpbmUgVE5DX1BBUl9PREQgICAgICAgICAgICAgICAgICAgICAg MgotI2RlZmluZSBUTkNfUEFSX0VWRU4gICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFRO Q19QQVJfTUFSSyAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgVE5DX1BBUl9TUEFDRSAg ICAgICAgICAgICAgICAgICAgNQotCi0jZGVmaW5lIFROQ19TQl9SRVFVRVNUICAgICAgICAgICAg ICAgICAgIDAKLSNkZWZpbmUgVE5DX1NCXzEgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2Rl ZmluZSBUTkNfU0JfMV81ICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFROQ19TQl8y ICAgICAgICAgICAgICAgICAgICAgICAgIDIKLQotI2RlZmluZSBUTkNfQ1RMX09GTE9XX1JFUVVF U1QgICAgICAgICAgICAwCi0jZGVmaW5lIFROQ19DVExfT0ZMT1dfTk9ORSAgICAgICAgICAgICAg IDEKLSNkZWZpbmUgVE5DX0NUTF9PRkxPV19YT05fWE9GRiAgICAgICAgICAgMgotI2RlZmluZSBU TkNfQ1RMX09GTE9XX1JUU19DVFMgICAgICAgICAgICAzCi0jZGVmaW5lIFROQ19DVExfT0ZMT1df RENEICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgVE5DX0NUTF9PRkxPV19EU1IgICAgICAgICAg ICAgICAxOQotCi0jZGVmaW5lIFROQ19DVExfQlJFQUtfUkVRVUVTVCAgICAgICAgICAgIDQKLSNk ZWZpbmUgVE5DX0NUTF9CUkVBS19PTiAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBUTkNfQ1RM X0JSRUFLX09GRiAgICAgICAgICAgICAgICA2Ci0KLSNkZWZpbmUgVE5DX0NUTF9EVFJfUkVRVUVT VCAgICAgICAgICAgICAgNwotI2RlZmluZSBUTkNfQ1RMX0RUUl9PTiAgICAgICAgICAgICAgICAg ICA4Ci0jZGVmaW5lIFROQ19DVExfRFRSX09GRiAgICAgICAgICAgICAgICAgIDkKLQotI2RlZmlu ZSBUTkNfQ1RMX1JUU19SRVFVRVNUICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFROQ19DVExfUlRT X09OICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgVE5DX0NUTF9SVFNfT0ZGICAgICAgICAg ICAgICAgICAxMgotCi0jZGVmaW5lIFROQ19DVExfSUZMT1dfUkVRVUVTVCAgICAgICAgICAgMTMK LSNkZWZpbmUgVE5DX0NUTF9JRkxPV19OT05FICAgICAgICAgICAgICAxNAotI2RlZmluZSBUTkNf Q1RMX0lGTE9XX1hPTl9YT0ZGICAgICAgICAgIDE1Ci0jZGVmaW5lIFROQ19DVExfSUZMT1dfUlRT X0NUUyAgICAgICAgICAgMTYKLSNkZWZpbmUgVE5DX0NUTF9JRkxPV19EVFIgICAgICAgICAgICAg ICAxOAotCi0jZGVmaW5lIFROQ19NU19EQVRBX1JFQURZICAgICAgICAgICAgICAgIDEKLSNkZWZp bmUgVE5DX01TX09WRVJSVU5fRVJST1IgICAgICAgICAgICAgMgotI2RlZmluZSBUTkNfTVNfUEFS SVRZX0VSUk9SICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFROQ19NU19GUkFNRV9FUlJPUiAgICAg ICAgICAgICAgIDgKLSNkZWZpbmUgVE5DX01TX0JSRUFLX0VSUk9SICAgICAgICAgICAgICAxNgot I2RlZmluZSBUTkNfTVNfSFJfRU1QVFkgICAgICAgICAgICAgICAgIDMyCi0jZGVmaW5lIFROQ19N U19TUl9FTVBUWSAgICAgICAgICAgICAgICAgNjQKLSNkZWZpbmUgVE5DX01TX1RJTUVPVVRfRVJS T1IgICAgICAgICAgIDEyOAotCi0jZGVmaW5lIFROQ19NU19DVFNfREVMVEEgICAgICAgICAgICAg ICAgIDEKLSNkZWZpbmUgVE5DX01TX0RTUl9ERUxUQSAgICAgICAgICAgICAgICAgMgotI2RlZmlu ZSBUTkNfTVNfRURHRV9SSU5HICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFROQ19NU19STFNE X0RFTFRBICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgVE5DX01TX0NUU19TSUcgICAgICAgICAg ICAgICAgICAxNgotI2RlZmluZSBUTkNfTVNfRFNSX1NJRyAgICAgICAgICAgICAgICAgIDMyCi0j ZGVmaW5lIFROQ19NU19SSV9TSUcgICAgICAgICAgICAgICAgICAgNjQKLSNkZWZpbmUgVE5DX01T X1JMU0RfU0lHICAgICAgICAgICAgICAgIDEyOAotCi0jZGVmaW5lIFROQ19QVVJHRV9SRUNFSVZF ICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgVE5DX1BVUkdFX1RSQU5TTUlUICAgICAgICAgICAg ICAgMgotI2RlZmluZSBUTkNfUFVSR0VfQk9USCAgICAgICAgICAgICAgICAgICAzCi0KLSNpZmRl ZiAgVE5DX05BTUVTCi1jaGFyICp0bmNfbmFtZXNbXSA9IHsKLSAgICAiU0lHTkFUVVJFIiwgIlNF VC1CQVVEUkFURSIsICJTRVQtREFUQVJBVEUiLCAiU0VULVBBUklUWSIsICJTRVQtU1RPUFNJWkUi LAotICAgICJTRVQtQ09OVFJPTCIsICJOT1RJRlktTElORVNUQVRFIiwgIk5PVElGWS1NT0RFTVNU QVRFIiwKLSAgICAiRkxPV0NPTlRST0wtU1VTUEVORCIsICJGTE9XQ09OVFJPTC1SRVNVTUUiLCAi U0VULUxJTkVTVEFURS1NQVNLIiwKLSAgICAiU0VULU1PREVNU1RBVEUtTUFTSyIsICJQVVJHRS1E QVRBIiwKLSAgICAwCi19OwotI2Vsc2UKLWV4dGVybiBjaGFyICp0bmNfbmFtZXNbXTsKLSNlbmRp ZgotCi0jZGVmaW5lIFROQ19OQU1FX09LKHgpICAoKHgpID49IDAgJiYgKHgpIDw9IDEyIHx8ICh4 KSA+PSAxMDAgJiYgKHgpIDw9IDExMikKLSNkZWZpbmUgVE5DX05BTUUoeCkgXAotICAgICAgICAg ICAgIChUTkNfTkFNRV9PSyh4KT90bmNfbmFtZXNbKHgpPj0xMDA/KHgpLTEwMDooeCldOiJVTktO T1dOIikKLQotX1BST1RPVFlQKGludCB0bmNfaW5pdCwodm9pZCkpOwotX1BST1RPVFlQKGludCB0 bmNfd2FpdCwoQ0hBUiAqLCBpbnQpKTsKLV9QUk9UT1RZUChpbnQgdG5jX3RuX3NiLChDSEFSICos aW50KSk7Ci1fUFJPVE9UWVAoQ09OU1QgY2hhciAqIHRuY19nZXRfc2lnbmF0dXJlLCAodm9pZCkp OwotX1BST1RPVFlQKGludCB0bmNfc2VuZF9zaWduYXR1cmUsIChjaGFyICopKTsKLV9QUk9UT1RZ UChpbnQgdG5jX3NldF9iYXVkLChsb25nKSk7Ci1fUFJPVE9UWVAoaW50IHRuY19nZXRfYmF1ZCwo dm9pZCkpOwotX1BST1RPVFlQKGludCB0bmNfc2V0X2RhdGFzaXplLChpbnQpKTsKLV9QUk9UT1RZ UChpbnQgdG5jX2dldF9kYXRhc2l6ZSwodm9pZCkpOwotX1BST1RPVFlQKGludCB0bmNfc2V0X3Bh cml0eSwoaW50KSk7Ci1fUFJPVE9UWVAoaW50IHRuY19nZXRfcGFyaXR5LCh2b2lkKSk7Ci1fUFJP VE9UWVAoaW50IHRuY19zZXRfc3RvcHNpemUsKGludCkpOwotX1BST1RPVFlQKGludCB0bmNfZ2V0 X3N0b3BzaXplLCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IHRuY19zZXRfb2Zsb3csKGludCkpOwot X1BST1RPVFlQKGludCB0bmNfZ2V0X29mbG93LCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IHRuY19z ZXRfaWZsb3csKGludCkpOwotX1BST1RPVFlQKGludCB0bmNfZ2V0X2lmbG93LCh2b2lkKSk7Ci1f UFJPVE9UWVAoaW50IHRuY19zZXRfYnJlYWtfc3RhdGUsKGludCkpOwotX1BST1RPVFlQKGludCB0 bmNfZ2V0X2JyZWFrX3N0YXRlLCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IHRuY19zZXRfZHRyX3N0 YXRlLChpbnQpKTsKLV9QUk9UT1RZUChpbnQgdG5jX2dldF9kdHJfc3RhdGUsKHZvaWQpKTsKLV9Q Uk9UT1RZUChpbnQgdG5jX3NldF9ydHNfc3RhdGUsKGludCkpOwotX1BST1RPVFlQKGludCB0bmNf Z2V0X3J0c19zdGF0ZSwodm9pZCkpOwotX1BST1RPVFlQKGludCB0bmNfc2V0X2xzX21hc2ssKGlu dCkpOwotX1BST1RPVFlQKGludCB0bmNfZ2V0X2xzX21hc2ssKHZvaWQpKTsKLV9QUk9UT1RZUChp bnQgdG5jX2dldF9scywodm9pZCkpOwotX1BST1RPVFlQKGludCB0bmNfc2V0X21zX21hc2ssKGlu dCkpOwotX1BST1RPVFlQKGludCB0bmNfZ2V0X21zX21hc2ssKHZvaWQpKTsKLV9QUk9UT1RZUChp bnQgdG5jX2dldF9tcywodm9pZCkpOwotX1BST1RPVFlQKGludCB0bmNfc2VuZF9wdXJnZV9kYXRh LChpbnQpKTsKLV9QUk9UT1RZUChpbnQgdG5jX2Zsb3dfc3VzcGVuZGVkLCh2b2lkKSk7Ci1fUFJP VE9UWVAoaW50IHRuY19zdXNwZW5kX2Zsb3csKHZvaWQpKTsKLV9QUk9UT1RZUChpbnQgdG5jX3Jl c3VtZV9mbG93LCh2b2lkKSk7Ci0KLS8qIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgdG8gYmUg Y2FsbGVkIGJ5IGNrP3Rpby5jIHJvdXRpbmVzICovCi1fUFJPVE9UWVAoaW50IHRuc2V0Zmxvdywo aW50KSk7Ci1fUFJPVE9UWVAoaW50IHRuc2V0dGluZ3MsKGludCxpbnQpKTsKLV9QUk9UT1RZUChp bnQgdG5nbWRtLCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IHRuc25kYiwobG9uZykpOwotX1BST1RP VFlQKGludCBpc3RuY29tcG9ydCwodm9pZCkpOwotX1BST1RPVFlQKGludCB0bl9zbmRjb21wb3J0 LCh2b2lkKSk7Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotCi0jaWZuZGVmIENLQ1RFTF9DICAg ICAgICAgICAgICAgICAgICAgICAgLyogVGhlc2UgYXJlIGRlY2xhcmVkIGluIGNrY3RlbC5jICov Ci1leHRlcm4gaW50IHRuX2luaXQ7ICAgICAgICAgICAgICAgICAgICAgLyogVGVsbmV0IHByb3Rv Y29sIGluaXRpYWxpemVkIGZsYWcgKi8KLWV4dGVybiBjaGFyICp0bl90ZXJtOyAgICAgICAgICAg ICAgICAgICAvKiBUZXJtaW5hbCB0eXBlIG92ZXJyaWRlICovCi1leHRlcm4gaW50IHNzdGVsbmV0 OyAgICAgICAgICAgICAgICAgICAgLyogU2VydmVyIHNpZGUgdGVsbmV0PyAqLwotZXh0ZXJuIGlu dCB0bl9kZWI7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbG5ldCBvcHRpb24gZGVidWdnaW5n IGZsYWcgKi8KLWV4dGVybiBpbnQgdG5fYXV0aF9rcmI1X2Rlc19idWc7ICAgICAgICAvKiBUZWxu ZXQgQlVHICovCi0jZW5kaWYgLyogQ0tDVEVMX0MgKi8KLQotI2RlZmluZSBUTl9NU0dfTEVOIDEy MjkyCi0jZW5kaWYgLyogVE5DT0RFICovCi0jZW5kaWYgLyogQ0tDVEVMX0ggKi8KCmRpZmYgLS1n aXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3VuaS5jIGIvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N1bmkuYwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMWY1ODU0OC4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3VuaS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYxNzMg KzAsMCBAQAotY2hhciAqIGNrY3VuaSA9ICJVbmljb2RlIHN1cHBvcnQgOS4wLjExNSwgMTYgT2N0 IDIwMDkiOwotCi0jaWZkZWYgT1MyCi0jZGVmaW5lIEtFUk1JVEZPTlQKLSNlbmRpZiAvKiBPUzIg Ki8KLQotLyogIEMgSyBDIFUgTiBJIC4gQyAgLS0gIFVuaWNvZGUvVGVybWluYWwgY2hhcmFjdGVy LXNldCB0cmFuc2xhdGlvbnMgICovCi0KLS8qCi0gIENvcHlyaWdodCAoQykgMTk5OSwgMjAwOSwK LSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZ b3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcu VFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVs ZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0KLSAgQXV0aG9yczoKLSAgICBGcmFu ayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PgotICAgICAgVGhlIEtlcm1pdCBQcm9qZWN0LCBD b2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5LgotICAgIEplZmZyZXkgRSBBbHRtYW4g PGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+Ci0gICAgICBTZWN1cmUgRW5kcG9pbnRzIElu Yy4sIE5ldyBZb3JrIENpdHkKLQotICBGdW5jdGlvbnMgdV9ibGFoKCkgdHJhbnNsYXRlIGZyb20g YmxhaCB0byBVbmljb2RlIChpbmNvbWluZyBtYXRlcmlhbCkuCi0gIEZ1bmN0aW9ucyB0eF9ibGFo KCkgdHJhbnNsYXRlIGZyb20gVW5pY29kZSB0byBibGFoIChrZXlzdHJva2VzKS4KLSAgRnVuY3Rp b24gcG9pbnRlcnMgYXJlIGtlcHQgaW4gcGFyYWxsZWwgYXJyYXlzIGluZGV4ZWQgYnkgVFhfYmxh aCB2YWx1ZXMKLSAgZGVmaW5lZCBpbiBja2N1bmkuaC4gICBOT1RFOiB0eF9kZWNzcGVjIGFuZCB0 eF9kZWN0ZWNoIGFyZSB1bmRlZmluZWQgc2luY2UKLSAgdGhlc2UgY2hhcmFjdGVyIHNldHMgYXJl IG5ldmVyIHR5cGVkLCBvbmx5IGRpc3BsYXllZC4KLQotICBUaGUgYmxhaF91KCkgcm91dGluZXMg YWNjZXB0IGFuIHVuc2lnbmVkIGNoYXJhY3RlciB2YWx1ZSBpbiBjaGFyYWN0ZXItc2V0Ci0gIGJs YWgsIGFuZCByZXR1cm4gdGhlIFVuaWNvZGUgdHJhbnNsYXRpb24sIG9yIDB4ZmZmZCBpZiB0aGUg Y2hhcmFjdGVyIGlzIG5vdAotICBkZWZpbmVkIGluIFVuaWNvZGUuICBUaGUgOHRoIGJpdCBvZiB0 aGUgYXJndW1lbnQgc2hvdWxkIGJlIGlnbm9yZWQsIGFgbGEgSVNPCi0gIDQ4NzMgYW5kIDIwMjIu Ci0KLSAgVGhlIHR4X2JsYWgoKSByb3V0aW5lcyBhY2NlcHQgYSB1bmljb2RlIHZhbHVlIGFuZCBy ZXR1cm4gdGhlIHZhbHVlIG9mIHRoZQotICBjb3JyZXNwb25kaW5nIGNoYXJhY3RlciBpbiBjaGFy YWN0ZXItc2V0IGJsYWgsIG9yIGVsc2UgLTEgaWYgdGhlIGNoYXJhY3RlcgotICBkb2VzIG5vdCBl eGlzdCBpbiBibGFoLiAgSW4gdGhpcyBjYXNlLCB0aGUgZnVsbCA4LWJpdCB2YWx1ZSBpcyByZXR1 cm5lZCwKLSAgc2luY2UgSVNPIDIwMjIgb25seSB3b3JrcyBpbiB0aGUgaG9zdC10by10ZXJtaW5h bCBkaXJlY3Rpb24uCi0KLSAgTk9URTogS0VSTUlURk9OVCBzaG91bGQgYmUgZGVmaW5lZCBvbmx5 IGlmIHdlIGFyZSB1c2luZyB0aGUgbmV3IChzdGlsbAotICBoeXBvdGhldGljYWwpIEtlcm1pdCBm b250IHRoYXQgaGFzIGFsbCB0aGUgVlQvSGVhdGgvV3lzZS9UVkkgZ3JhcGhpYwotICBjaGFyYWN0 ZXJzIGluIGl0LiAgSU1QT1JUQU5UOiBhbGwgS2VybWl0Zm9udCBjb2RlIHBvaW50cyBuZWVkIHVw ZGF0aW5nIHRvCi0gIHRoZSB2YWx1ZXMgaW4gdGhlIGZpbmFsIHByb3Bvc2FsIHRvIHRoZSBVVEMu Ci0KLSAgTEFURVIgTk9URTogVGhlIG5lZWRlZCBjaGFyYWN0ZXJzIHdlcmUgYXBwcm92ZWQgZm9y IFVuaWNvZGUgMy4xLCBhbmQKLSAgdGhlcmVmb3JlIG5vdGhpbmcgc3BlY2lhbCBzaG91bGQgYmUg cmVxdWlyZWQgdG8gdXNlIHRoZW0sIGV4Y2VwdCB0aGF0IGl0Ci0gIHdpbGwgdGFrZSBzb21lIHRp bWUgZm9yIHRoZW0gdG8gc2hvdyB1cCBpbiBjb21tZXJjaWFsIGZvbnRzLgotCi0gIFRPIERPOiBB IGxvdCBvZiB0aGUgZnVuY3Rpb25zIGNhbiBiZSB0aWdodGVuZWQgdXAgLS0gdXNlIHJhbmdlcyB3 aGVuCi0gIHBvc3NpYmxlLCBzb3J0IHN3aXRjaCBzdGF0ZW1lbnRzIGluIG9yZGVyIG9mIGZyZXF1 ZW5jeSwgZXRjLgotKi8KLSNpbmNsdWRlICJja2NzeW0uaCIgICAgICAgICAgICAgICAgICAgICAv KiBJbmNsdWRlcy4uLiAqLwotI2luY2x1ZGUgImNrY2RlYi5oIgotI2luY2x1ZGUgImNrY2tlci5o IgotI2luY2x1ZGUgImNrdWNtZC5oIgotI2luY2x1ZGUgImNrY3hsYS5oIgotI2luY2x1ZGUgImNr dXhsYS5oIgotCi0jaWZkZWYgVU5JQ09ERQotCi0jaWZkZWYgT1MyCi0vKgotICBUaGlzIG1hdGVy aWFsIGlzIG5lZWRlZCBmb3IgdGhlIGludGVncmF0aW9uIG9mIFRleHRQUyBpbnRvIEtlcm1pdCA5 NS4KLSAgV2hlbiBwcmludGluZyBhIGZpbGUgd2UgdXNlIHRoZSBTRVQgRklMRSBDSEFSQUNURVIt U0VUIHZhbHVlIGFzIHRoZSBpbnB1dAotICBjaGFyYWN0ZXItc2V0IGFuZCB0aGVuIGNvbnZlcnQg aXQgdG8gdGhlIHNwZWNpYWwgTGF0aW4xIHNldCBjYWxsZWQKLSAgQ291cmllckxhdGluMSB1c2lu ZyB0aGUgVW5pY29kZSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuCi0qLwotc3RydWN0IF9wYWlyIHsg aW50IHR4OyBpbnQgZmM7IH0gVFhGQ1tdID0gewotICAgIFRYX0FTQ0lJLCAgICAgICBGQ19VU0FT Q0lJLAotICAgIFRYX0JSSVRJU0gsICAgICBGQ19VS0FTQ0lJLAotICAgIFRYX0NOX0ZSRU5DSCwg ICBGQ19GQ0FTQ0lJLAotICAgIFRYX0NQNDM3LCAgICAgICBGQ19DUDQzNywKLSAgICBUWF9DUDg1 MCwgICAgICAgRkNfQ1A4NTAsCi0gICAgVFhfQ1A4NTIsICAgICAgIEZDX0NQODUyLAotICAgIFRY X0NQODU3LCAgICAgICAtMiwKLSAgICBUWF9DUDg2MiwgICAgICAgRkNfQ1A4NjIsCi0gICAgVFhf Q1A4NjQsICAgICAgIC0yLAotICAgIFRYX0NQODY2LCAgICAgICBGQ19DUDg2NiwKLSAgICBUWF9D UDg2OSwgICAgICAgLTIsCi0gICAgVFhfQ1VCQU4sICAgICAgIC0yLAotICAgIFRYX0NaRUNILCAg ICAgICAtMiwKLSAgICBUWF9EQU5JU0gsICAgICAgLTIsCi0gICAgVFhfREVDTUNTLCAgICAgIEZD X0RFQ01DUywKLSAgICBUWF9ERUNTUEVDLCAgICAgLTIsICAgICAgICAgICAgIC8qIHdoaWxlIGRl ZmluZWQsIG5vdCBpbiBmY3MgdGFibGVzICovCi0gICAgVFhfREVDVEVDSCwgICAgIC0yLCAgICAg ICAgICAgICAvKiB3aGlsZSBkZWZpbmVkLCBub3QgaW4gZmNzIHRhYmxlcyAqLwotICAgIFRYX0RH SSwgICAgICAgICBGQ19ER01DUywKLSAgICBUWF9EVVRDSCwgICAgICAgRkNfRFVBU0NJSSwKLSAg ICBUWF9GSU5OSVNILCAgICAgRkNfRklBU0NJSSwKLSAgICBUWF9GUkVOQ0gsICAgICAgRkNfRlJB U0NJSSwKLSAgICBUWF9HRVJNQU4sICAgICAgRkNfR0VBU0NJSSwKLSAgICBUWF9IRTcsICAgICAg ICAgRkNfSEU3LAotICAgIFRYX0hQUjgsICAgICAgICBGQ19IUFI4LAotICAgIFRYX0hVTkdBUklB TiwgICBGQ19IVUFTQ0lJLAotICAgIFRYX0lUQUxJQU4sICAgICBGQ19JVEFTQ0lJLAotICAgIFRY X0oyMDFSLCAgICAgICAtMiwKLSAgICBUWF9KMjAxSywgICAgICAgLTIsCi0gICAgVFhfS09JNywg ICAgICAgIEZDX0tPSTcsCi0gICAgVFhfS09JOCwgICAgICAgIEZDX0tPSTgsCi0gICAgVFhfS09J OFIsICAgICAgIEZDX0tPSThSLAotICAgIFRYX0tPSThVLCAgICAgICBGQ19LT0k4VSwKLSAgICBU WF84ODU5XzEsICAgICAgRkNfMUxBVElOLAotICAgIFRYXzg4NTlfMiwgICAgICBGQ18yTEFUSU4s Ci0gICAgVFhfODg1OV8zLCAgICAgIC0yLAotICAgIFRYXzg4NTlfNCwgICAgICAtMiwKLSAgICBU WF84ODU5XzUsICAgICAgRkNfQ1lSSUxMLAotICAgIFRYXzg4NTlfNiwgICAgICAtMiwKLSAgICBU WF84ODU5XzcsICAgICAgLTIsCi0gICAgVFhfODg1OV84LCAgICAgIEZDX0hFQlJFVywKLSAgICBU WF84ODU5XzksICAgICAgLTIsCi0gICAgVFhfODg1OV8xMCwgICAgIC0yLAotICAgIFRYXzg4NTlf MTUsICAgICAtMiwKLSAgICBUWF9NQUNMMSwgICAgICAgRkNfQVBQUUQsCi0gICAgVFhfTkVYVCwg ICAgICAgIEZDX05FWFQsCi0gICAgVFhfTk9SV0VHSUFOLCAgIEZDX05PQVNDSUksCi0gICAgVFhf UE9SVFVHVUVTRSwgIEZDX1BPQVNDSUksCi0gICAgVFhfU1BBTklTSCwgICAgIEZDX1NQQVNDSUks Ci0gICAgVFhfU1dFRElTSCwgICAgIEZDX1NXQVNDSUksCi0gICAgVFhfU1dJU1MsICAgICAgIEZD X0NIQVNDSUksCi0gICAgVFhfSUNFTEFORElDLCAgIC0yLAotICAgIFRYX0pJUzcsICAgICAgICAt MiwKLSAgICBUWF9TSEpJUywgICAgICAgRkNfU0hKSVMsCi0gICAgVFhfSkVVQywgICAgICAgIEZD X0pFVUMsCi0gICAgVFhfSkRFQywgICAgICAgIEZDX0pERUMsCi0gICAgVFhfRUxPVDkyNywgICAg IEZDX0VMT1QsCi0gICAgVFhfREdQQ0dSUEgsICAgIC0yLAotICAgIFRYX0RHTERHUlBILCAgICAt MiwKLSAgICBUWF9ER1dQR1JQSCwgICAgLTIsCi0gICAgVFhfSFBMSU5FLCAgICAgIC0yLAotICAg IFRYX0hQTUFUSCwgICAgICAtMiwKLSAgICBUWF9RTlhHUlBILCAgICAgLTIsCi0gICAgVFhfU05J QlJBQ0ssICAgIC0yLAotICAgIFRYX1NOSUVVUk8sICAgICAtMiwKLSAgICBUWF9TTklGQUNFVCwg ICAgLTIsCi0gICAgVFhfU05JSUJNLCAgICAgIC0yLAotICAgIFRYX1NOSUJMQU5LLCAgICAtMiwK LSAgICBUWF9DUDEyNTIsICAgICAgLTIsCi0gICAgVFhfQ1AxMjUwLCAgICAgIEZDX0NQMTI1MCwK LSAgICBUWF9DUDEyNTEsICAgICAgRkNfQ1AxMjUxLAotICAgIFRYX0NQMTI1MywgICAgICAtMiwK LSAgICBUWF9DUDEyNTQsICAgICAgLTIsCi0gICAgVFhfQ1AxMjU3LCAgICAgIC0yLAotICAgIFRY X0NQODU2LCAgICAgICAtMiwKLSAgICBUWF9DUDg1NSwgICAgICAgRkNfQ1A4NTUsCi0gICAgVFhf Q1A4MTksICAgICAgIEZDXzFMQVRJTiwKLSAgICBUWF9DUDkxMiwgICAgICAgRkNfMkxBVElOLAot ICAgIFRYX0NQOTEzLCAgICAgICAtMiwKLSAgICBUWF9DUDkxNCwgICAgICAgLTIsCi0gICAgVFhf Q1A5MTUsICAgICAgIEZDX0NZUklMTCwKLSAgICBUWF9DUDEwODksICAgICAgLTIsCi0gICAgVFhf Q1A4MTMsICAgICAgIEZDX0dSRUVLLAotICAgIFRYX0NQOTE2LCAgICAgICBGQ19IRUJSRVcsCi0g ICAgVFhfQ1A5MjAsICAgICAgIC0yLAotICAgIFRYX0NQMTA1MSwgICAgICAtMiwKLSAgICBUWF9D UDg1OCwgICAgICAgRkNfQ1A4NTgsCi0gICAgVFhfODg1OV8xNSwgICAgIEZDXzlMQVRJTiwKLSAg ICBUWF9DUDkyMywgICAgICAgRkNfQ1A5MjMsCi0gICAgVFhfRUxPVDkyOCwgICAgIC0yLAotICAg IFRYX0NQMTAwMDAsICAgICAtMiwKLSAgICBUWF9DUDM3LCAgICAgICAgLTIsCi0gICAgVFhfQ1Ax MjU1LCAgICAgIC0yLAotICAgIFRYX0NQMTI1NiwgICAgICAtMiwKLSAgICBUWF9DUDEyNTgsICAg ICAgLTIsCi0gICAgVFhfTUFaT1ZJQSwgICAgIEZDX01BWk9WSUEsCi0gICAgVFhfQVBMMSwgICAg ICAgIC0yLAotICAgIFRYX0FQTDIsICAgICAgICAtMiwKLSAgICBUWF9BUEwzLCAgICAgICAgLTIs Ci0gICAgVFhfQVBMNCwgICAgICAgIC0yLAotICAgIFRYX0FQTDUsICAgICAgICAtMiwKLSAgICBU WF9UUkFOU1AsICAgICAgRkNfVFJBTlNQCi19OwotaW50IG5UWEZDID0gc2l6ZW9mKFRYRkMpIC8g c2l6ZW9mKHN0cnVjdCBfcGFpcik7Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1mYzJ0eChpbnQg ZmMpCi0jZWxzZQotZmMydHgoaW50IGMpIGludCBmYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuVFhGQyA7IGkrKykKLSAgICAgIGlm IChUWEZDW2ldLmZjID09IGZjICYmIFRYRkNbaV0udHggPj0gMCkKLSAgICAgICAgcmV0dXJuKFRY RkNbaV0udHgpOwotICAgIHJldHVybihUWF9BU0NJSSk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FO U0lDCi10eDJmYyhpbnQgdHgpCi0jZWxzZQotdHgyZmMoaW50IHgpIGludCB0eDsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotewotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuVFhGQyA7 IGkrKykKLSAgICAgIGlmIChUWEZDW2ldLnR4ID09IHR4ICYmIFRYRkNbaV0uZmMgPj0gMCkKLSAg ICAgICAgcmV0dXJuKFRYRkNbaV0uZmMpOwotICAgIHJldHVybihGQ19VU0FTQ0lJKTsKLX0KLQot LyogU0VUIFRFUk1JTkFMIFJFTU9URSBDSEFSQUNURVItU0VUIGtleXdvcmQgdGFibGUgKi8KLQot c3RydWN0IGtleXRhYiB0eHJ0YWJbXSA9IHsKLSAgICAiYXBsMi1pYm0iLCAgICAgICAgIFRYX0FQ TDQsICAgICAgIDAsCi0gICAgImFwbC0yNzQxIiwgICAgICAgICBUWF9BUEw1LCAgICAgICAwLAot ICAgICJhcGwtZHlhZGljIiwgICAgICAgVFhfQVBMMiwgICAgICAgMCwKLSAgICAiYXBsLWlzbyIs ICAgICAgICAgIFRYX0FQTDEsICAgICAgIDAsCi0gICAgImFwbC1wbHVzLTIwMDAiLCAgICBUWF9B UEwzLCAgICAgICAwLCAvKiA9IEFQTC0yMDAwICovCi0gICAgImFyYWJpYy1pc28iLCAgICAgICBU WF84ODU5XzYsICAgICAwLAotICAgICJhc2NpaSIsICAgICAgICAgICAgVFhfQVNDSUksICAgICAg MCwKLSAgICAiYnJpdGlzaCIsICAgICAgICAgIFRYX0JSSVRJU0gsICAgIDAsCi0gICAgImNhbmFk aWFuLWZyZW5jaCIsICBUWF9DTl9GUkVOQ0gsICAwLAotICAgICJidWxnYXJpYS1wYyIsICAgICAg VFhfQ1A4NTYsICAgICAgMCwKLSNpZmRlZiBDT01NRU5UCi0gICAgImNwMDM3IiwgICAgICAgICAg ICBUWF9DUDM3LCAgICAgICAwLCAvKiBVLlMuIEVCQ0RJQyAqLwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLSAgICAiY3AxMDAwMCIsICAgICAgICAgIFRYX0NQMTAwMDAsICAgIDAsIC8qIEFwcGxlIFF1 aWNrZHJhdyAqLwotICAgICJjcDEwNTEiLCAgICAgICAgICAgVFhfQ1AxMDUxLCAgICAgMCwgLyog U2FtZSBhcyBIUCBSb21hbiA4ICovCi0gICAgImNwMTA4OSIsICAgICAgICAgICBUWF9DUDEwODks ICAgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5LTYgKi8KLSAgICAiY3AxMjUwIiwgICAgICAgICAg IFRYX0NQMTI1MCwgICAgIDAsIC8qIExhdGluLTIgV2luZG93cyAqLwotICAgICJjcDEyNTEiLCAg ICAgICAgICAgVFhfQ1AxMjUxLCAgICAgMCwgLyogQ3lyaWxsaWMgV2luZG93cyAqLwotICAgICJj cDEyNTIiLCAgICAgICAgICAgVFhfQ1AxMjUyLCAgICAgMCwgLyogTGF0aW4tMSBXaW5kb3dzICov Ci0gICAgImNwMTI1MyIsICAgICAgICAgICBUWF9DUDEyNTMsICAgICAwLCAvKiBHcmVlayBXaW5k b3dzICovCi0gICAgImNwMTI1NCIsICAgICAgICAgICBUWF9DUDEyNTQsICAgICAwLCAvKiBUdXJr ZXkgV2luZG93cyAqLwotICAgICJjcDEyNTUiLCAgICAgICAgICAgVFhfQ1AxMjU1LCAgICAgMCwg LyogSGVicmV3IFdpbmRvd3MgKi8KLSAgICAiY3AxMjU2IiwgICAgICAgICAgIFRYX0NQMTI1Niwg ICAgIDAsIC8qIEFyYWJpYyBXaW5kb3dzICovCi0gICAgImNwMTI1NyIsICAgICAgICAgICBUWF9D UDEyNTcsICAgICAwLCAvKiBMYXRpbi00IFdpbmRvd3MgKi8KLSAgICAiY3AxMjU4IiwgICAgICAg ICAgIFRYX0NQMTI1OCwgICAgIDAsIC8qIFZpZXQgTmFtIFdpbmRvd3MgKi8KLSAgICAiY3A0Mzci LCAgICAgICAgICAgIFRYX0NQNDM3LCAgICAgIDAsCi0gICAgImNwODEzIiwgICAgICAgICAgICBU WF9DUDgxMywgICAgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5LTcgKi8KLSAgICAiY3A4MTkiLCAg ICAgICAgICAgIFRYX0NQODE5LCAgICAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4NTktMSAqLwotICAg ICJjcDg1MCIsICAgICAgICAgICAgVFhfQ1A4NTAsICAgICAgMCwKLSAgICAiY3A4NTIiLCAgICAg ICAgICAgIFRYX0NQODUyLCAgICAgIDAsCi0gICAgImNwODU1IiwgICAgICAgICAgICBUWF9DUDg1 NSwgICAgICAwLCAvKiBDeXJpbGxpYyAqLwotICAgICJjcDg1NiIsICAgICAgICAgICAgVFhfQ1A4 NTYsICAgICAgQ01fSU5WLCAvKiBCdWxnYXJpYSAqLwotICAgICJjcDg1NyIsICAgICAgICAgICAg VFhfQ1A4NTcsICAgICAgMCwgLyogTGF0aW4tNSAqLwotICAgICJjcDg1OCIsICAgICAgICAgICAg VFhfQ1A4NTgsICAgICAgMCwgLyogRXVybyBtb2RpZmllZCBjcDg1MCAqLwotICAgICJjcDg2Mi1o ZWJyZXciLCAgICAgVFhfQ1A4NjIsICAgICAgMCwgLyogSGVicmV3ICovCi0gICAgImNwODY0Iiwg ICAgICAgICAgICBUWF9DUDg2NCwgICAgICAwLCAvKiBBcmFiaWMgKi8KLSAgICAiY3A4NjYiLCAg ICAgICAgICAgIFRYX0NQODY2LCAgICAgIDAsIC8qIEN5cmlsbGljICovCi0gICAgImNwODY5Iiwg ICAgICAgICAgICBUWF9DUDg2OSwgICAgICAwLCAvKiBHcmVlayAqLwotICAgICJjcDkxMiIsICAg ICAgICAgICAgVFhfQ1A5MTIsICAgICAgMCwgLyogU2FtZSBhcyBJU08gODg1OS0yICovCi0gICAg ImNwOTEzIiwgICAgICAgICAgICBUWF9DUDkxMywgICAgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5 LTMgKi8KLSAgICAiY3A5MTQiLCAgICAgICAgICAgIFRYX0NQOTE0LCAgICAgIDAsIC8qIFNhbWUg YXMgSVNPIDg4NTktNCAqLwotICAgICJjcDkxNSIsICAgICAgICAgICAgVFhfQ1A5MTUsICAgICAg MCwgLyogU2FtZSBhcyBJU08gODg1OS01ICovCi0gICAgImNwOTE2IiwgICAgICAgICAgICBUWF9D UDkxNiwgICAgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5LTggKi8KLSAgICAiY3A5MjAiLCAgICAg ICAgICAgIFRYX0NQOTIwLCAgICAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4NTktOSAqLwotICAgICJj cDkyMyIsICAgICAgICAgICAgVFhfQ1A5MjMsICAgICAgMCwgLyogU2FtZSBhcyBJU08gODg1OS0x NSAqLwotI2lmZGVmIENPTU1FTlQKLS8qIE5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KLSAgICAiY3Vi YW4iLCAgICAgICAgICAgIFRYX0NVQkFOLCAgICAgIDAsCi0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICJjeXJpbGxpYy1pc28iLCAgICAgVFhfODg1OV81LCAgICAgMCwKLSNpZmRlZiBDT01NRU5U Ci0vKiBOb3QgaW1wbGVtZW50ZWQgeWV0ICovCi0gICAgImN6ZWNoIiwgICAgICAgICAgICBUWF9D WkVDSCwgICAgICAwLAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAiZGFuaXNoIiwgICAgICAg ICAgIFRYX0RBTklTSCwgICAgIDAsCi0gICAgImRlYy1tIiwgICAgICAgICAgICBUWF9ERUNNQ1Ms ICAgICBDTV9BQlJ8Q01fSU5WLAotICAgICJkZWMtbWNzIiwgICAgICAgICAgVFhfREVDTUNTLCAg ICAgQ01fSU5WLAotICAgICJkZWMtbXVsdGluYXRpb25hbCIsVFhfREVDTUNTLCAgICAgMCwKLSNp ZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgaW1wbGVtZW50ZWQg eWV0ICovCi0gICAgImRlYy1rYW5qaSIsICAgICAgICBUWF9KREVDLCAgICAgICAwLAotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSAgICAiZGVjLXNwZWNpYWwiLCAgICAgIFRYX0RFQ1NQRUMsICAgIDAs Ci0gICAgImRlYy10ZWNobmljYWwiLCAgICBUWF9ERUNURUNILCAgICAwLAotICAgICJkZy1pbnRl cm5hdGlvbmFsIiwgVFhfREdJLCAgICAgICAgMCwKLSAgICAiZGctbGluZWRyYXdpbmciLCAgIFRY X0RHTERHUlBILCAgIDAsCi0gICAgImRnLXNwZWNpYWxncmFwaGNzIixUWF9ER1BDR1JQSCwgICAw LAotICAgICJkZy13b3JkcHJvY2Vzc2luZyIsVFhfREdXUEdSUEgsICAgMCwKLSAgICAiZHV0Y2gi LCAgICAgICAgICAgIFRYX0RVVENILCAgICAgIDAsCi0gICAgImVsb3Q5MjctZ3JlZWsiLCAgICBU WF9FTE9UOTI3LCAgICAwLAotICAgICJlbG90OTI4LWdyZWVrIiwgICAgVFhfRUxPVDkyOCwgICAg MCwKLSAgICAiZmlubmlzaCIsICAgICAgICAgIFRYX0ZJTk5JU0gsICAgIDAsCi0gICAgImZyZW5j aCIsICAgICAgICAgICBUWF9GUkVOQ0gsICAgICAwLAotICAgICJnZXJtYW4iLCAgICAgICAgICAg VFhfR0VSTUFOLCAgICAgMCwKLSAgICAiZ3JlZWstaXNvIiwgICAgICAgIFRYXzg4NTlfNywgICAg IDAsCi0gICAgImhlYnJldy03IiwgICAgICAgICBUWF9IRTcsICAgICAgICAwLAotICAgICJoZWJy ZXctaXNvIiwgICAgICAgVFhfODg1OV84LCAgICAgMCwKLSAgICAiaHAtbGluZS1kcmF3aW5nIiwg IFRYX0hQTElORSwgICAgIDAsCi0gICAgImhwLW1hdGgvdGVjaG5pY2FsIixUWF9IUE1BVEgsICAg ICAwLAotICAgICJocC1yb21hbjgiLCAgICAgICAgVFhfSFBSOCwgICAgICAgMCwKLSAgICAiaHVu Z2FyaWFuIiwgICAgICAgIFRYX0hVTkdBUklBTiwgIDAsCi0gICAgIml0YWxpYW4iLCAgICAgICAg ICBUWF9JVEFMSUFOLCAgICAwLAotICAgICJqYXBhbmVzZS1yb21hbiIsICAgVFhfSjIwMVIsICAg ICAgMCwKLSNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgaW1w bGVtZW50ZWQgeWV0ICovCi0gICAgImphcGFuZXNlLWV1YyIsICAgICBUWF9KRVVDLCAgICAgICAw LAotICAgICJqaXM3LWthbmppIiwgICAgICAgVFhfSklTNywgICAgICAgMCwKLSNlbmRpZiAvKiBD T01NRU5UICovCi0gICAgImthdGFrYW5hIiwgICAgICAgICBUWF9KMjAxSywgICAgICAwLAotICAg ICJrbyIsICAgICAgICAgICAgICAgVFhfS09JOCwgICAgICAgQ01fQUJSfENNX0lOViwKLSAgICAi a29pIiwgICAgICAgICAgICAgIFRYX0tPSTgsICAgICAgIENNX0FCUnxDTV9JTlYsCi0gICAgImtv aTgiLCAgICAgICAgICAgICBUWF9LT0k4LCAgICAgICAwLAotICAgICJrb2k4LWN5cmlsbGljIiwg ICAgVFhfS09JOCwgICAgICAgQ01fSU5WLAotICAgICJrb2k4ciIsICAgICAgICAgICAgVFhfS09J OFIsICAgICAgMCwKLSAgICAia29pOHUiLCAgICAgICAgICAgIFRYX0tPSThVLCAgICAgIDAsCi0g ICAgImwiLCAgICAgICAgICAgICAgICBUWF84ODU5XzEsICAgICBDTV9BQlJ8Q01fSU5WLAotICAg ICJsYSIsICAgICAgICAgICAgICAgVFhfODg1OV8xLCAgICAgQ01fQUJSfENNX0lOViwKLSAgICAi bGF0IiwgICAgICAgICAgICAgIFRYXzg4NTlfMSwgICAgIENNX0FCUnxDTV9JTlYsCi0gICAgImxh dGkiLCAgICAgICAgICAgICBUWF84ODU5XzEsICAgICBDTV9BQlJ8Q01fSU5WLAotICAgICJsYXRp biIsICAgICAgICAgICAgVFhfODg1OV8xLCAgICAgQ01fQUJSfENNX0lOViwKLSAgICAibGF0aW4x LWlzbyIsICAgICAgIFRYXzg4NTlfMSwgICAgIDAsCi0gICAgImxhdGluMi1pc28iLCAgICAgICBU WF84ODU5XzIsICAgICAwLAotICAgICJsYXRpbjMtaXNvIiwgICAgICAgVFhfODg1OV8zLCAgICAg MCwKLSAgICAibGF0aW40LWlzbyIsICAgICAgIFRYXzg4NTlfNCwgICAgIDAsCi0gICAgImxhdGlu NS1pc28iLCAgICAgICBUWF84ODU5XzksICAgICAwLAotICAgICJsYXRpbjYtaXNvIiwgICAgICAg VFhfODg1OV8xMCwgICAgMCwKLSAgICAibGF0aW45LWlzbyIsICAgICAgIFRYXzg4NTlfMTUsICAg IDAsCi0gICAgIm1hY2ludG9zaC1sYXRpbiIsICBUWF9NQUNMMSwgICAgICAwLAotICAgICJtYXpv dmlhLXBjIiwgICAgICAgVFhfTUFaT1ZJQSwgICAgMCwKLSAgICAibmV4dC1tdWx0aW5hdGlvbmFs IixUWF9ORVhULCAgICAgIDAsCi0gICAgIm5vcndlZ2lhbiIsICAgICAgICBUWF9OT1JXRUdJQU4s ICAwLAotICAgICJwb3J0dWd1ZXNlIiwgICAgICAgVFhfUE9SVFVHVUVTRSwgMCwKLSAgICAicW54 LWNvbnNvbGUiLCAgICAgIFRYX1FOWEdSUEgsICAgIDAsCi0jaWZkZWYgQ09NTUVOVCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTm90IGltcGxlbWVudGVkIHlldCAqLwotICAgICJzaGlmdC1q aXMiLCAgICAgICAgVFhfU0hKSVMsICAgICAgMCwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg InNob3J0LWtvaSIsICAgICAgICBUWF9LT0k3LCAgICAgICAwLAotICAgICJzbmktYmxhbmtzIiwg ICAgICAgVFhfU05JQkxBTkssICAgMCwKLSAgICAic25pLWJyYWNrZXRzIiwgICAgIFRYX1NOSUJS QUNLLCAgIDAsCi0gICAgInNuaS1ldXJvIiwgICAgICAgICBUWF9TTklFVVJPLCAgICAwLAotICAg ICJzbmktZmFjZXQiLCAgICAgICAgVFhfU05JRkFDRVQsICAgMCwKLSAgICAic25pLWlibSIsICAg ICAgICAgIFRYX1NOSUlCTSwgICAgIDAsCi0gICAgInNwYW5pc2giLCAgICAgICAgICBUWF9TUEFO SVNILCAgICAwLAotICAgICJzd2VkaXNoIiwgICAgICAgICAgVFhfU1dFRElTSCwgICAgMCwKLSAg ICAic3dpc3MiLCAgICAgICAgICAgIFRYX1NXSVNTLCAgICAgIDAsCi0gICAgInRyYW5zcGFyZW50 IiwgICAgICBUWF9UUkFOU1AsICAgICAwLAotI2lmZGVmIENPTU1FTlQKLSAgICAidXRmNyIsICAg ICAgICAgICAgIFRYX1VURjcsICAgICAgIDAsCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICJ1 dGY4IiwgICAgICAgICAgICAgVFhfVVRGOCwgICAgICAgMCwKLSAgICAiIiwgMCwgMAotfTsKLWlu dCBudHhydGFiID0gc2l6ZW9mKHR4cnRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKLSNl bmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIEtBTkpJCi0vKgotICBBbGwgS2FuamkvVW5pY29kZSB0 cmFuc2xhdGlvbnMgYXJlIGJhc2VkIG9uIHRoZSBVbmljb2RlIDMuMAotICBTaGlmdC1KSVMgbWFw cGluZy4gIE90aGVyIGNoYXJhY3RlciBzZXRzLCBsaWtlIEVVQy1KUCwgSklTLTcsIGV0YywKLSAg YXJlIHRyYW5zZm9ybWVkIGFsZ29yaXRobWljYWxseSB0by9mcm9tIFNoaWZ0LUpJUyBiZWZvcmUv YWZ0ZXIKLSAgY29udmVyc2lvbiB0by9mcm9tIFVuaWNvZGUuICBUaGlzIGlzIGJlY2F1c2UgS2Fu amkvVW5pY29kZSBtYXBwaW5nCi0gIHRhYmxlcyBhZGQgYWJvdXQgMTIwSyB0byB0aGUgcHJvZ3Jh bSwgYW5kIHdlIGRvbid0IHdhbnQgdG8gZG8gdGhpcwotICBmb3IgZWFjaCBLYW5qaSBjaGFyYWN0 ZXIgc2V0LgotKi8KLXN0YXRpYyBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBT aGlmdC1KSVMgdG8gVW5pY29kZSAqLwotc2p1XzgxNDBbXSA9IHsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDB4ODE0MCB0aHJ1IDB4OWZmYyAqLwotICAgIDB4MzAwMCwgMHgzMDAxLCAweDMw MDIsIDB4ZmYwYywgMHhmZjBlLCAweDMwZmIsIDB4ZmYxYSwgMHhmZjFiLAotICAgIDB4ZmYxZiwg MHhmZjAxLCAweDMwOWIsIDB4MzA5YywgMHgwMGI0LCAweGZmNDAsIDB4MDBhOCwgMHhmZjNlLAot ICAgIDB4ZmZlMywgMHhmZjNmLCAweDMwZmQsIDB4MzBmZSwgMHgzMDlkLCAweDMwOWUsIDB4MzAw MywgMHg0ZWRkLAotICAgIDB4MzAwNSwgMHgzMDA2LCAweDMwMDcsIDB4MzBmYywgMHgyMDE1LCAw eDIwMTAsIDB4ZmYwZiwgMHgwMDVjLAotICAgIDB4MzAxYywgMHgyMDE2LCAweGZmNWMsIDB4MjAy NiwgMHgyMDI1LCAweDIwMTgsIDB4MjAxOSwgMHgyMDFjLAotICAgIDB4MjAxZCwgMHhmZjA4LCAw eGZmMDksIDB4MzAxNCwgMHgzMDE1LCAweGZmM2IsIDB4ZmYzZCwgMHhmZjViLAotICAgIDB4ZmY1 ZCwgMHgzMDA4LCAweDMwMDksIDB4MzAwYSwgMHgzMDBiLCAweDMwMGMsIDB4MzAwZCwgMHgzMDBl LAotICAgIDB4MzAwZiwgMHgzMDEwLCAweDMwMTEsIDB4ZmYwYiwgMHgyMjEyLCAweDAwYjEsIDB4 MDBkNywgMHhmZmZkLAotICAgIDB4MDBmNywgMHhmZjFkLCAweDIyNjAsIDB4ZmYxYywgMHhmZjFl LCAweDIyNjYsIDB4MjI2NywgMHgyMjFlLAotICAgIDB4MjIzNCwgMHgyNjQyLCAweDI2NDAsIDB4 MDBiMCwgMHgyMDMyLCAweDIwMzMsIDB4MjEwMywgMHhmZmU1LAotICAgIDB4ZmYwNCwgMHgwMGEy LCAweDAwYTMsIDB4ZmYwNSwgMHhmZjAzLCAweGZmMDYsIDB4ZmYwYSwgMHhmZjIwLAotICAgIDB4 MDBhNywgMHgyNjA2LCAweDI2MDUsIDB4MjVjYiwgMHgyNWNmLCAweDI1Y2UsIDB4MjVjNywgMHgy NWM2LAotICAgIDB4MjVhMSwgMHgyNWEwLCAweDI1YjMsIDB4MjViMiwgMHgyNWJkLCAweDI1YmMs IDB4MjAzYiwgMHgzMDEyLAotICAgIDB4MjE5MiwgMHgyMTkwLCAweDIxOTEsIDB4MjE5MywgMHgz MDEzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4MjIwOCwgMHgy MjBiLCAweDIyODYsIDB4MjI4NywgMHgyMjgyLCAweDIyODMsIDB4MjIyYSwgMHgyMjI5LAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4MjIyNywgMHgyMjI4LCAweDAwYWMsIDB4MjFkMiwgMHgyMWQ0LCAweDIy MDAsIDB4MjIwMywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDIy MjAsIDB4MjJhNSwgMHgyMzEyLCAweDIyMDIsIDB4MjIwNywgMHgyMjYxLAotICAgIDB4MjI1Miwg MHgyMjZhLCAweDIyNmIsIDB4MjIxYSwgMHgyMjNkLCAweDIyMWQsIDB4MjIzNSwgMHgyMjJiLAot ICAgIDB4MjIyYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4MjEyYiwgMHgyMDMwLCAweDI2NmYsIDB4MjY2ZCwgMHgyNjZhLCAw eDIwMjAsIDB4MjAyMSwgMHgwMGI2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHgyNWVmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZjEwLAotICAgIDB4ZmYxMSwgMHhm ZjEyLCAweGZmMTMsIDB4ZmYxNCwgMHhmZjE1LCAweGZmMTYsIDB4ZmYxNywgMHhmZjE4LAotICAg IDB4ZmYxOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmYyMSwgMHhmZjIyLCAweGZmMjMsIDB4ZmYyNCwgMHhmZjI1LCAweGZm MjYsIDB4ZmYyNywgMHhmZjI4LAotICAgIDB4ZmYyOSwgMHhmZjJhLCAweGZmMmIsIDB4ZmYyYywg MHhmZjJkLCAweGZmMmUsIDB4ZmYyZiwgMHhmZjMwLAotICAgIDB4ZmYzMSwgMHhmZjMyLCAweGZm MzMsIDB4ZmYzNCwgMHhmZjM1LCAweGZmMzYsIDB4ZmYzNywgMHhmZjM4LAotICAgIDB4ZmYzOSwg MHhmZjNhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZjQxLCAweGZmNDIsIDB4ZmY0MywgMHhmZjQ0LCAweGZmNDUsIDB4ZmY0 NiwgMHhmZjQ3LAotICAgIDB4ZmY0OCwgMHhmZjQ5LCAweGZmNGEsIDB4ZmY0YiwgMHhmZjRjLCAw eGZmNGQsIDB4ZmY0ZSwgMHhmZjRmLAotICAgIDB4ZmY1MCwgMHhmZjUxLCAweGZmNTIsIDB4ZmY1 MywgMHhmZjU0LCAweGZmNTUsIDB4ZmY1NiwgMHhmZjU3LAotICAgIDB4ZmY1OCwgMHhmZjU5LCAw eGZmNWEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgzMDQxLAotICAgIDB4MzA0 MiwgMHgzMDQzLCAweDMwNDQsIDB4MzA0NSwgMHgzMDQ2LCAweDMwNDcsIDB4MzA0OCwgMHgzMDQ5 LAotICAgIDB4MzA0YSwgMHgzMDRiLCAweDMwNGMsIDB4MzA0ZCwgMHgzMDRlLCAweDMwNGYsIDB4 MzA1MCwgMHgzMDUxLAotICAgIDB4MzA1MiwgMHgzMDUzLCAweDMwNTQsIDB4MzA1NSwgMHgzMDU2 LCAweDMwNTcsIDB4MzA1OCwgMHgzMDU5LAotICAgIDB4MzA1YSwgMHgzMDViLCAweDMwNWMsIDB4 MzA1ZCwgMHgzMDVlLCAweDMwNWYsIDB4MzA2MCwgMHgzMDYxLAotICAgIDB4MzA2MiwgMHgzMDYz LCAweDMwNjQsIDB4MzA2NSwgMHgzMDY2LCAweDMwNjcsIDB4MzA2OCwgMHgzMDY5LAotICAgIDB4 MzA2YSwgMHgzMDZiLCAweDMwNmMsIDB4MzA2ZCwgMHgzMDZlLCAweDMwNmYsIDB4MzA3MCwgMHgz MDcxLAotICAgIDB4MzA3MiwgMHgzMDczLCAweDMwNzQsIDB4MzA3NSwgMHgzMDc2LCAweDMwNzcs IDB4MzA3OCwgMHgzMDc5LAotICAgIDB4MzA3YSwgMHgzMDdiLCAweDMwN2MsIDB4MzA3ZCwgMHgz MDdlLCAweDMwN2YsIDB4MzA4MCwgMHgzMDgxLAotICAgIDB4MzA4MiwgMHgzMDgzLCAweDMwODQs IDB4MzA4NSwgMHgzMDg2LCAweDMwODcsIDB4MzA4OCwgMHgzMDg5LAotICAgIDB4MzA4YSwgMHgz MDhiLCAweDMwOGMsIDB4MzA4ZCwgMHgzMDhlLCAweDMwOGYsIDB4MzA5MCwgMHgzMDkxLAotICAg IDB4MzA5MiwgMHgzMDkzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4MzBhMSwgMHgzMGEyLCAweDMwYTMsIDB4MzBhNCwgMHgzMGE1LCAweDMwYTYsIDB4 MzBhNywgMHgzMGE4LAotICAgIDB4MzBhOSwgMHgzMGFhLCAweDMwYWIsIDB4MzBhYywgMHgzMGFk LCAweDMwYWUsIDB4MzBhZiwgMHgzMGIwLAotICAgIDB4MzBiMSwgMHgzMGIyLCAweDMwYjMsIDB4 MzBiNCwgMHgzMGI1LCAweDMwYjYsIDB4MzBiNywgMHgzMGI4LAotICAgIDB4MzBiOSwgMHgzMGJh LCAweDMwYmIsIDB4MzBiYywgMHgzMGJkLCAweDMwYmUsIDB4MzBiZiwgMHgzMGMwLAotICAgIDB4 MzBjMSwgMHgzMGMyLCAweDMwYzMsIDB4MzBjNCwgMHgzMGM1LCAweDMwYzYsIDB4MzBjNywgMHgz MGM4LAotICAgIDB4MzBjOSwgMHgzMGNhLCAweDMwY2IsIDB4MzBjYywgMHgzMGNkLCAweDMwY2Us IDB4MzBjZiwgMHgzMGQwLAotICAgIDB4MzBkMSwgMHgzMGQyLCAweDMwZDMsIDB4MzBkNCwgMHgz MGQ1LCAweDMwZDYsIDB4MzBkNywgMHgzMGQ4LAotICAgIDB4MzBkOSwgMHgzMGRhLCAweDMwZGIs IDB4MzBkYywgMHgzMGRkLCAweDMwZGUsIDB4MzBkZiwgMHhmZmZkLAotICAgIDB4MzBlMCwgMHgz MGUxLCAweDMwZTIsIDB4MzBlMywgMHgzMGU0LCAweDMwZTUsIDB4MzBlNiwgMHgzMGU3LAotICAg IDB4MzBlOCwgMHgzMGU5LCAweDMwZWEsIDB4MzBlYiwgMHgzMGVjLCAweDMwZWQsIDB4MzBlZSwg MHgzMGVmLAotICAgIDB4MzBmMCwgMHgzMGYxLCAweDMwZjIsIDB4MzBmMywgMHgzMGY0LCAweDMw ZjUsIDB4MzBmNiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgwMzkxLAotICAgIDB4MDM5MiwgMHgwMzkzLCAweDAz OTQsIDB4MDM5NSwgMHgwMzk2LCAweDAzOTcsIDB4MDM5OCwgMHgwMzk5LAotICAgIDB4MDM5YSwg MHgwMzliLCAweDAzOWMsIDB4MDM5ZCwgMHgwMzllLCAweDAzOWYsIDB4MDNhMCwgMHgwM2ExLAot ICAgIDB4MDNhMywgMHgwM2E0LCAweDAzYTUsIDB4MDNhNiwgMHgwM2E3LCAweDAzYTgsIDB4MDNh OSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHgwM2IxLAotICAgIDB4MDNiMiwgMHgwM2IzLCAweDAzYjQsIDB4MDNi NSwgMHgwM2I2LCAweDAzYjcsIDB4MDNiOCwgMHgwM2I5LAotICAgIDB4MDNiYSwgMHgwM2JiLCAw eDAzYmMsIDB4MDNiZCwgMHgwM2JlLCAweDAzYmYsIDB4MDNjMCwgMHgwM2MxLAotICAgIDB4MDNj MywgMHgwM2M0LCAweDAzYzUsIDB4MDNjNiwgMHgwM2M3LCAweDAzYzgsIDB4MDNjOSwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4MDQxMCwg MHgwNDExLCAweDA0MTIsIDB4MDQxMywgMHgwNDE0LCAweDA0MTUsIDB4MDQwMSwgMHgwNDE2LAot ICAgIDB4MDQxNywgMHgwNDE4LCAweDA0MTksIDB4MDQxYSwgMHgwNDFiLCAweDA0MWMsIDB4MDQx ZCwgMHgwNDFlLAotICAgIDB4MDQxZiwgMHgwNDIwLCAweDA0MjEsIDB4MDQyMiwgMHgwNDIzLCAw eDA0MjQsIDB4MDQyNSwgMHgwNDI2LAotICAgIDB4MDQyNywgMHgwNDI4LCAweDA0MjksIDB4MDQy YSwgMHgwNDJiLCAweDA0MmMsIDB4MDQyZCwgMHgwNDJlLAotICAgIDB4MDQyZiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4MDQzMCwgMHgwNDMxLCAweDA0MzIsIDB4MDQzMywgMHgwNDM0LCAweDA0MzUsIDB4 MDQ1MSwgMHgwNDM2LAotICAgIDB4MDQzNywgMHgwNDM4LCAweDA0MzksIDB4MDQzYSwgMHgwNDNi LCAweDA0M2MsIDB4MDQzZCwgMHhmZmZkLAotICAgIDB4MDQzZSwgMHgwNDNmLCAweDA0NDAsIDB4 MDQ0MSwgMHgwNDQyLCAweDA0NDMsIDB4MDQ0NCwgMHgwNDQ1LAotICAgIDB4MDQ0NiwgMHgwNDQ3 LCAweDA0NDgsIDB4MDQ0OSwgMHgwNDRhLCAweDA0NGIsIDB4MDQ0YywgMHgwNDRkLAotICAgIDB4 MDQ0ZSwgMHgwNDRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHgyNTAwLAotICAgIDB4MjUwMiwgMHgyNTBjLCAweDI1MTAsIDB4MjUxOCwgMHgy NTE0LCAweDI1MWMsIDB4MjUyYywgMHgyNTI0LAotICAgIDB4MjUzNCwgMHgyNTNjLCAweDI1MDEs IDB4MjUwMywgMHgyNTBmLCAweDI1MTMsIDB4MjUxYiwgMHgyNTE3LAotICAgIDB4MjUyMywgMHgy NTMzLCAweDI1MmIsIDB4MjUzYiwgMHgyNTRiLCAweDI1MjAsIDB4MjUyZiwgMHgyNTI4LAotICAg IDB4MjUzNywgMHgyNTNmLCAweDI1MWQsIDB4MjUzMCwgMHgyNTI1LCAweDI1MzgsIDB4MjU0Miwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg0ZTljLAotICAgIDB4NTUxNiwgMHg1YTAzLCAweDk2M2YsIDB4NTRjMCwgMHg2MTFi LCAweDYzMjgsIDB4NTlmNiwgMHg5MDIyLAotICAgIDB4ODQ3NSwgMHg4MzFjLCAweDdhNTAsIDB4 NjBhYSwgMHg2M2UxLCAweDZlMjUsIDB4NjVlZCwgMHg4NDY2LAotICAgIDB4ODJhNiwgMHg5YmY1 LCAweDY4OTMsIDB4NTcyNywgMHg2NWExLCAweDYyNzEsIDB4NWI5YiwgMHg1OWQwLAotICAgIDB4 ODY3YiwgMHg5OGY0LCAweDdkNjIsIDB4N2RiZSwgMHg5YjhlLCAweDYyMTYsIDB4N2M5ZiwgMHg4 OGI3LAotICAgIDB4NWI4OSwgMHg1ZWI1LCAweDYzMDksIDB4NjY5NywgMHg2ODQ4LCAweDk1Yzcs IDB4OTc4ZCwgMHg2NzRmLAotICAgIDB4NGVlNSwgMHg0ZjBhLCAweDRmNGQsIDB4NGY5ZCwgMHg1 MDQ5LCAweDU2ZjIsIDB4NTkzNywgMHg1OWQ0LAotICAgIDB4NWEwMSwgMHg1YzA5LCAweDYwZGYs IDB4NjEwZiwgMHg2MTcwLCAweDY2MTMsIDB4NjkwNSwgMHg3MGJhLAotICAgIDB4NzU0ZiwgMHg3 NTcwLCAweDc5ZmIsIDB4N2RhZCwgMHg3ZGVmLCAweDgwYzMsIDB4ODQwZSwgMHg4ODYzLAotICAg IDB4OGIwMiwgMHg5MDU1LCAweDkwN2EsIDB4NTMzYiwgMHg0ZTk1LCAweDRlYTUsIDB4NTdkZiwg MHg4MGIyLAotICAgIDB4OTBjMSwgMHg3OGVmLCAweDRlMDAsIDB4NThmMSwgMHg2ZWEyLCAweDkw MzgsIDB4N2EzMiwgMHg4MzI4LAotICAgIDB4ODI4YiwgMHg5YzJmLCAweDUxNDEsIDB4NTM3MCwg MHg1NGJkLCAweDU0ZTEsIDB4NTZlMCwgMHg1OWZiLAotICAgIDB4NWYxNSwgMHg5OGYyLCAweDZk ZWIsIDB4ODBlNCwgMHg4NTJkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTY2MiwgMHg5NjcwLCAweDk2YTAsIDB4 OTdmYiwgMHg1NDBiLCAweDUzZjMsIDB4NWI4NywgMHg3MGNmLAotICAgIDB4N2ZiZCwgMHg4ZmMy LCAweDk2ZTgsIDB4NTM2ZiwgMHg5ZDVjLCAweDdhYmEsIDB4NGUxMSwgMHg3ODkzLAotICAgIDB4 ODFmYywgMHg2ZTI2LCAweDU2MTgsIDB4NTUwNCwgMHg2YjFkLCAweDg1MWEsIDB4OWMzYiwgMHg1 OWU1LAotICAgIDB4NTNhOSwgMHg2ZDY2LCAweDc0ZGMsIDB4OTU4ZiwgMHg1NjQyLCAweDRlOTEs IDB4OTA0YiwgMHg5NmYyLAotICAgIDB4ODM0ZiwgMHg5OTBjLCAweDUzZTEsIDB4NTViNiwgMHg1 YjMwLCAweDVmNzEsIDB4NjYyMCwgMHg2NmYzLAotICAgIDB4NjgwNCwgMHg2YzM4LCAweDZjZjMs IDB4NmQyOSwgMHg3NDViLCAweDc2YzgsIDB4N2E0ZSwgMHg5ODM0LAotICAgIDB4ODJmMSwgMHg4 ODViLCAweDhhNjAsIDB4OTJlZCwgMHg2ZGIyLCAweDc1YWIsIDB4NzZjYSwgMHg5OWM1LAotICAg IDB4NjBhNiwgMHg4YjAxLCAweDhkOGEsIDB4OTViMiwgMHg2OThlLCAweDUzYWQsIDB4NTE4Niwg MHhmZmZkLAotICAgIDB4NTcxMiwgMHg1ODMwLCAweDU5NDQsIDB4NWJiNCwgMHg1ZWY2LCAweDYw MjgsIDB4NjNhOSwgMHg2M2Y0LAotICAgIDB4NmNiZiwgMHg2ZjE0LCAweDcwOGUsIDB4NzExNCwg MHg3MTU5LCAweDcxZDUsIDB4NzMzZiwgMHg3ZTAxLAotICAgIDB4ODI3NiwgMHg4MmQxLCAweDg1 OTcsIDB4OTA2MCwgMHg5MjViLCAweDlkMWIsIDB4NTg2OSwgMHg2NWJjLAotICAgIDB4NmM1YSwg MHg3NTI1LCAweDUxZjksIDB4NTkyZSwgMHg1OTY1LCAweDVmODAsIDB4NWZkYywgMHg2MmJjLAot ICAgIDB4NjVmYSwgMHg2YTJhLCAweDZiMjcsIDB4NmJiNCwgMHg3MzhiLCAweDdmYzEsIDB4ODk1 NiwgMHg5ZDJjLAotICAgIDB4OWQwZSwgMHg5ZWM0LCAweDVjYTEsIDB4NmM5NiwgMHg4MzdiLCAw eDUxMDQsIDB4NWM0YiwgMHg2MWI2LAotICAgIDB4ODFjNiwgMHg2ODc2LCAweDcyNjEsIDB4NGU1 OSwgMHg0ZmZhLCAweDUzNzgsIDB4NjA2OSwgMHg2ZTI5LAotICAgIDB4N2E0ZiwgMHg5N2YzLCAw eDRlMGIsIDB4NTMxNiwgMHg0ZWVlLCAweDRmNTUsIDB4NGYzZCwgMHg0ZmExLAotICAgIDB4NGY3 MywgMHg1MmEwLCAweDUzZWYsIDB4NTYwOSwgMHg1OTBmLCAweDVhYzEsIDB4NWJiNiwgMHg1YmUx LAotICAgIDB4NzlkMSwgMHg2Njg3LCAweDY3OWMsIDB4NjdiNiwgMHg2YjRjLCAweDZjYjMsIDB4 NzA2YiwgMHg3M2MyLAotICAgIDB4Nzk4ZCwgMHg3OWJlLCAweDdhM2MsIDB4N2I4NywgMHg4MmIx LCAweDgyZGIsIDB4ODMwNCwgMHg4Mzc3LAotICAgIDB4ODNlZiwgMHg4M2QzLCAweDg3NjYsIDB4 OGFiMiwgMHg1NjI5LCAweDhjYTgsIDB4OGZlNiwgMHg5MDRlLAotICAgIDB4OTcxZSwgMHg4Njhh LCAweDRmYzQsIDB4NWNlOCwgMHg2MjExLCAweDcyNTksIDB4NzUzYiwgMHg4MWU1LAotICAgIDB4 ODJiZCwgMHg4NmZlLCAweDhjYzAsIDB4OTZjNSwgMHg5OTEzLCAweDk5ZDUsIDB4NGVjYiwgMHg0 ZjFhLAotICAgIDB4ODllMywgMHg1NmRlLCAweDU4NGEsIDB4NThjYSwgMHg1ZWZiLCAweDVmZWIs IDB4NjAyYSwgMHg2MDk0LAotICAgIDB4NjA2MiwgMHg2MWQwLCAweDYyMTIsIDB4NjJkMCwgMHg2 NTM5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4OWI0MSwgMHg2NjY2LCAweDY4YjAsIDB4NmQ3NywgMHg3MDcwLCAw eDc1NGMsIDB4NzY4NiwgMHg3ZDc1LAotICAgIDB4ODJhNSwgMHg4N2Y5LCAweDk1OGIsIDB4OTY4 ZSwgMHg4YzlkLCAweDUxZjEsIDB4NTJiZSwgMHg1OTE2LAotICAgIDB4NTRiMywgMHg1YmIzLCAw eDVkMTYsIDB4NjE2OCwgMHg2OTgyLCAweDZkYWYsIDB4Nzg4ZCwgMHg4NGNiLAotICAgIDB4ODg1 NywgMHg4YTcyLCAweDkzYTcsIDB4OWFiOCwgMHg2ZDZjLCAweDk5YTgsIDB4ODZkOSwgMHg1N2Ez LAotICAgIDB4NjdmZiwgMHg4NmNlLCAweDkyMGUsIDB4NTI4MywgMHg1Njg3LCAweDU0MDQsIDB4 NWVkMywgMHg2MmUxLAotICAgIDB4NjRiOSwgMHg2ODNjLCAweDY4MzgsIDB4NmJiYiwgMHg3Mzcy LCAweDc4YmEsIDB4N2E2YiwgMHg4OTlhLAotICAgIDB4ODlkMiwgMHg4ZDZiLCAweDhmMDMsIDB4 OTBlZCwgMHg5NWEzLCAweDk2OTQsIDB4OTc2OSwgMHg1YjY2LAotICAgIDB4NWNiMywgMHg2OTdk LCAweDk4NGQsIDB4OTg0ZSwgMHg2MzliLCAweDdiMjAsIDB4NmEyYiwgMHhmZmZkLAotICAgIDB4 NmE3ZiwgMHg2OGI2LCAweDljMGQsIDB4NmY1ZiwgMHg1MjcyLCAweDU1OWQsIDB4NjA3MCwgMHg2 MmVjLAotICAgIDB4NmQzYiwgMHg2ZTA3LCAweDZlZDEsIDB4ODQ1YiwgMHg4OTEwLCAweDhmNDQs IDB4NGUxNCwgMHg5YzM5LAotICAgIDB4NTNmNiwgMHg2OTFiLCAweDZhM2EsIDB4OTc4NCwgMHg2 ODJhLCAweDUxNWMsIDB4N2FjMywgMHg4NGIyLAotICAgIDB4OTFkYywgMHg5MzhjLCAweDU2NWIs IDB4OWQyOCwgMHg2ODIyLCAweDgzMDUsIDB4ODQzMSwgMHg3Y2E1LAotICAgIDB4NTIwOCwgMHg4 MmM1LCAweDc0ZTYsIDB4NGU3ZSwgMHg0ZjgzLCAweDUxYTAsIDB4NWJkMiwgMHg1MjBhLAotICAg IDB4NTJkOCwgMHg1MmU3LCAweDVkZmIsIDB4NTU5YSwgMHg1ODJhLCAweDU5ZTYsIDB4NWI4Yywg MHg1Yjk4LAotICAgIDB4NWJkYiwgMHg1ZTcyLCAweDVlNzksIDB4NjBhMywgMHg2MTFmLCAweDYx NjMsIDB4NjFiZSwgMHg2M2RiLAotICAgIDB4NjU2MiwgMHg2N2QxLCAweDY4NTMsIDB4NjhmYSwg MHg2YjNlLCAweDZiNTMsIDB4NmM1NywgMHg2ZjIyLAotICAgIDB4NmY5NywgMHg2ZjQ1LCAweDc0 YjAsIDB4NzUxOCwgMHg3NmUzLCAweDc3MGIsIDB4N2FmZiwgMHg3YmExLAotICAgIDB4N2MyMSwg MHg3ZGU5LCAweDdmMzYsIDB4N2ZmMCwgMHg4MDlkLCAweDgyNjYsIDB4ODM5ZSwgMHg4OWIzLAot ICAgIDB4OGFjYywgMHg4Y2FiLCAweDkwODQsIDB4OTQ1MSwgMHg5NTkzLCAweDk1OTEsIDB4OTVh MiwgMHg5NjY1LAotICAgIDB4OTdkMywgMHg5OTI4LCAweDgyMTgsIDB4NGUzOCwgMHg1NDJiLCAw eDVjYjgsIDB4NWRjYywgMHg3M2E5LAotICAgIDB4NzY0YywgMHg3NzNjLCAweDVjYTksIDB4N2Zl YiwgMHg4ZDBiLCAweDk2YzEsIDB4OTgxMSwgMHg5ODU0LAotICAgIDB4OTg1OCwgMHg0ZjAxLCAw eDRmMGUsIDB4NTM3MSwgMHg1NTljLCAweDU2NjgsIDB4NTdmYSwgMHg1OTQ3LAotICAgIDB4NWIw OSwgMHg1YmM0LCAweDVjOTAsIDB4NWUwYywgMHg1ZTdlLCAweDVmY2MsIDB4NjNlZSwgMHg2NzNh LAotICAgIDB4NjVkNywgMHg2NWUyLCAweDY3MWYsIDB4NjhjYiwgMHg2OGM0LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4NmE1ZiwgMHg1ZTMwLCAweDZiYzUsIDB4NmMxNywgMHg2YzdkLCAweDc1N2YsIDB4Nzk0OCwg MHg1YjYzLAotICAgIDB4N2EwMCwgMHg3ZDAwLCAweDVmYmQsIDB4ODk4ZiwgMHg4YTE4LCAweDhj YjQsIDB4OGQ3NywgMHg4ZWNjLAotICAgIDB4OGYxZCwgMHg5OGUyLCAweDlhMGUsIDB4OWIzYywg MHg0ZTgwLCAweDUwN2QsIDB4NTEwMCwgMHg1OTkzLAotICAgIDB4NWI5YywgMHg2MjJmLCAweDYy ODAsIDB4NjRlYywgMHg2YjNhLCAweDcyYTAsIDB4NzU5MSwgMHg3OTQ3LAotICAgIDB4N2ZhOSwg MHg4N2ZiLCAweDhhYmMsIDB4OGI3MCwgMHg2M2FjLCAweDgzY2EsIDB4OTdhMCwgMHg1NDA5LAot ICAgIDB4NTQwMywgMHg1NWFiLCAweDY4NTQsIDB4NmE1OCwgMHg4YTcwLCAweDc4MjcsIDB4Njc3 NSwgMHg5ZWNkLAotICAgIDB4NTM3NCwgMHg1YmEyLCAweDgxMWEsIDB4ODY1MCwgMHg5MDA2LCAw eDRlMTgsIDB4NGU0NSwgMHg0ZWM3LAotICAgIDB4NGYxMSwgMHg1M2NhLCAweDU0MzgsIDB4NWJh ZSwgMHg1ZjEzLCAweDYwMjUsIDB4NjU1MSwgMHhmZmZkLAotICAgIDB4NjczZCwgMHg2YzQyLCAw eDZjNzIsIDB4NmNlMywgMHg3MDc4LCAweDc0MDMsIDB4N2E3NiwgMHg3YWFlLAotICAgIDB4N2Iw OCwgMHg3ZDFhLCAweDdjZmUsIDB4N2Q2NiwgMHg2NWU3LCAweDcyNWIsIDB4NTNiYiwgMHg1YzQ1 LAotICAgIDB4NWRlOCwgMHg2MmQyLCAweDYyZTAsIDB4NjMxOSwgMHg2ZTIwLCAweDg2NWEsIDB4 OGEzMSwgMHg4ZGRkLAotICAgIDB4OTJmOCwgMHg2ZjAxLCAweDc5YTYsIDB4OWI1YSwgMHg0ZWE4 LCAweDRlYWIsIDB4NGVhYywgMHg0ZjliLAotICAgIDB4NGZhMCwgMHg1MGQxLCAweDUxNDcsIDB4 N2FmNiwgMHg1MTcxLCAweDUxZjYsIDB4NTM1NCwgMHg1MzIxLAotICAgIDB4NTM3ZiwgMHg1M2Vi LCAweDU1YWMsIDB4NTg4MywgMHg1Y2UxLCAweDVmMzcsIDB4NWY0YSwgMHg2MDJmLAotICAgIDB4 NjA1MCwgMHg2MDZkLCAweDYzMWYsIDB4NjU1OSwgMHg2YTRiLCAweDZjYzEsIDB4NzJjMiwgMHg3 MmVkLAotICAgIDB4NzdlZiwgMHg4MGY4LCAweDgxMDUsIDB4ODIwOCwgMHg4NTRlLCAweDkwZjcs IDB4OTNlMSwgMHg5N2ZmLAotICAgIDB4OTk1NywgMHg5YTVhLCAweDRlZjAsIDB4NTFkZCwgMHg1 YzJkLCAweDY2ODEsIDB4Njk2ZCwgMHg1YzQwLAotICAgIDB4NjZmMiwgMHg2OTc1LCAweDczODks IDB4Njg1MCwgMHg3YzgxLCAweDUwYzUsIDB4NTJlNCwgMHg1NzQ3LAotICAgIDB4NWRmZSwgMHg5 MzI2LCAweDY1YTQsIDB4NmIyMywgMHg2YjNkLCAweDc0MzQsIDB4Nzk4MSwgMHg3OWJkLAotICAg IDB4N2I0YiwgMHg3ZGNhLCAweDgyYjksIDB4ODNjYywgMHg4ODdmLCAweDg5NWYsIDB4OGIzOSwg MHg4ZmQxLAotICAgIDB4OTFkMSwgMHg1NDFmLCAweDkyODAsIDB4NGU1ZCwgMHg1MDM2LCAweDUz ZTUsIDB4NTMzYSwgMHg3MmQ3LAotICAgIDB4NzM5NiwgMHg3N2U5LCAweDgyZTYsIDB4OGVhZiwg MHg5OWM2LCAweDk5YzgsIDB4OTlkMiwgMHg1MTc3LAotICAgIDB4NjExYSwgMHg4NjVlLCAweDU1 YjAsIDB4N2E3YSwgMHg1MDc2LCAweDViZDMsIDB4OTA0NywgMHg5Njg1LAotICAgIDB4NGUzMiwg MHg2YWRiLCAweDkxZTcsIDB4NWM1MSwgMHg1YzQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4NjM5OCwgMHg3YTlm LCAweDZjOTMsIDB4OTc3NCwgMHg4ZjYxLCAweDdhYWEsIDB4NzE4YSwgMHg5Njg4LAotICAgIDB4 N2M4MiwgMHg2ODE3LCAweDdlNzAsIDB4Njg1MSwgMHg5MzZjLCAweDUyZjIsIDB4NTQxYiwgMHg4 NWFiLAotICAgIDB4OGExMywgMHg3ZmE0LCAweDhlY2QsIDB4OTBlMSwgMHg1MzY2LCAweDg4ODgs IDB4Nzk0MSwgMHg0ZmMyLAotICAgIDB4NTBiZSwgMHg1MjExLCAweDUxNDQsIDB4NTU1MywgMHg1 NzJkLCAweDczZWEsIDB4NTc4YiwgMHg1OTUxLAotICAgIDB4NWY2MiwgMHg1Zjg0LCAweDYwNzUs IDB4NjE3NiwgMHg2MTY3LCAweDYxYTksIDB4NjNiMiwgMHg2NDNhLAotICAgIDB4NjU2YywgMHg2 NjZmLCAweDY4NDIsIDB4NmUxMywgMHg3NTY2LCAweDdhM2QsIDB4N2NmYiwgMHg3ZDRjLAotICAg IDB4N2Q5OSwgMHg3ZTRiLCAweDdmNmIsIDB4ODMwZSwgMHg4MzRhLCAweDg2Y2QsIDB4OGEwOCwg MHg4YTYzLAotICAgIDB4OGI2NiwgMHg4ZWZkLCAweDk4MWEsIDB4OWQ4ZiwgMHg4MmI4LCAweDhm Y2UsIDB4OWJlOCwgMHhmZmZkLAotICAgIDB4NTI4NywgMHg2MjFmLCAweDY0ODMsIDB4NmZjMCwg MHg5Njk5LCAweDY4NDEsIDB4NTA5MSwgMHg2YjIwLAotICAgIDB4NmM3YSwgMHg2ZjU0LCAweDdh NzQsIDB4N2Q1MCwgMHg4ODQwLCAweDhhMjMsIDB4NjcwOCwgMHg0ZWY2LAotICAgIDB4NTAzOSwg MHg1MDI2LCAweDUwNjUsIDB4NTE3YywgMHg1MjM4LCAweDUyNjMsIDB4NTVhNywgMHg1NzBmLAot ICAgIDB4NTgwNSwgMHg1YWNjLCAweDVlZmEsIDB4NjFiMiwgMHg2MWY4LCAweDYyZjMsIDB4NjM3 MiwgMHg2OTFjLAotICAgIDB4NmEyOSwgMHg3MjdkLCAweDcyYWMsIDB4NzMyZSwgMHg3ODE0LCAw eDc4NmYsIDB4N2Q3OSwgMHg3NzBjLAotICAgIDB4ODBhOSwgMHg4OThiLCAweDhiMTksIDB4OGNl MiwgMHg4ZWQyLCAweDkwNjMsIDB4OTM3NSwgMHg5NjdhLAotICAgIDB4OTg1NSwgMHg5YTEzLCAw eDllNzgsIDB4NTE0MywgMHg1MzlmLCAweDUzYjMsIDB4NWU3YiwgMHg1ZjI2LAotICAgIDB4NmUx YiwgMHg2ZTkwLCAweDczODQsIDB4NzNmZSwgMHg3ZDQzLCAweDgyMzcsIDB4OGEwMCwgMHg4YWZh LAotICAgIDB4OTY1MCwgMHg0ZTRlLCAweDUwMGIsIDB4NTNlNCwgMHg1NDdjLCAweDU2ZmEsIDB4 NTlkMSwgMHg1YjY0LAotICAgIDB4NWRmMSwgMHg1ZWFiLCAweDVmMjcsIDB4NjIzOCwgMHg2NTQ1 LCAweDY3YWYsIDB4NmU1NiwgMHg3MmQwLAotICAgIDB4N2NjYSwgMHg4OGI0LCAweDgwYTEsIDB4 ODBlMSwgMHg4M2YwLCAweDg2NGUsIDB4OGE4NywgMHg4ZGU4LAotICAgIDB4OTIzNywgMHg5NmM3 LCAweDk4NjcsIDB4OWYxMywgMHg0ZTk0LCAweDRlOTIsIDB4NGYwZCwgMHg1MzQ4LAotICAgIDB4 NTQ0OSwgMHg1NDNlLCAweDVhMmYsIDB4NWY4YywgMHg1ZmExLCAweDYwOWYsIDB4NjhhNywgMHg2 YThlLAotICAgIDB4NzQ1YSwgMHg3ODgxLCAweDhhOWUsIDB4OGFhNCwgMHg4Yjc3LCAweDkxOTAs IDB4NGU1ZSwgMHg5YmM5LAotICAgIDB4NGVhNCwgMHg0ZjdjLCAweDRmYWYsIDB4NTAxOSwgMHg1 MDE2LCAweDUxNDksIDB4NTE2YywgMHg1MjlmLAotICAgIDB4NTJiOSwgMHg1MmZlLCAweDUzOWEs IDB4NTNlMywgMHg1NDExLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4NTQwZSwgMHg1NTg5LCAweDU3NTEsIDB4NTdh MiwgMHg1OTdkLCAweDViNTQsIDB4NWI1ZCwgMHg1YjhmLAotICAgIDB4NWRlNSwgMHg1ZGU3LCAw eDVkZjcsIDB4NWU3OCwgMHg1ZTgzLCAweDVlOWEsIDB4NWViNywgMHg1ZjE4LAotICAgIDB4NjA1 MiwgMHg2MTRjLCAweDYyOTcsIDB4NjJkOCwgMHg2M2E3LCAweDY1M2IsIDB4NjYwMiwgMHg2NjQz LAotICAgIDB4NjZmNCwgMHg2NzZkLCAweDY4MjEsIDB4Njg5NywgMHg2OWNiLCAweDZjNWYsIDB4 NmQyYSwgMHg2ZDY5LAotICAgIDB4NmUyZiwgMHg2ZTlkLCAweDc1MzIsIDB4NzY4NywgMHg3ODZj LCAweDdhM2YsIDB4N2NlMCwgMHg3ZDA1LAotICAgIDB4N2QxOCwgMHg3ZDVlLCAweDdkYjEsIDB4 ODAxNSwgMHg4MDAzLCAweDgwYWYsIDB4ODBiMSwgMHg4MTU0LAotICAgIDB4ODE4ZiwgMHg4MjJh LCAweDgzNTIsIDB4ODg0YywgMHg4ODYxLCAweDhiMWIsIDB4OGNhMiwgMHg4Y2ZjLAotICAgIDB4 OTBjYSwgMHg5MTc1LCAweDkyNzEsIDB4NzgzZiwgMHg5MmZjLCAweDk1YTQsIDB4OTY0ZCwgMHhm ZmZkLAotICAgIDB4OTgwNSwgMHg5OTk5LCAweDlhZDgsIDB4OWQzYiwgMHg1MjViLCAweDUyYWIs IDB4NTNmNywgMHg1NDA4LAotICAgIDB4NThkNSwgMHg2MmY3LCAweDZmZTAsIDB4OGM2YSwgMHg4 ZjVmLCAweDllYjksIDB4NTE0YiwgMHg1MjNiLAotICAgIDB4NTQ0YSwgMHg1NmZkLCAweDdhNDAs IDB4OTE3NywgMHg5ZDYwLCAweDllZDIsIDB4NzM0NCwgMHg2ZjA5LAotICAgIDB4ODE3MCwgMHg3 NTExLCAweDVmZmQsIDB4NjBkYSwgMHg5YWE4LCAweDcyZGIsIDB4OGZiYywgMHg2YjY0LAotICAg IDB4OTgwMywgMHg0ZWNhLCAweDU2ZjAsIDB4NTc2NCwgMHg1OGJlLCAweDVhNWEsIDB4NjA2OCwg MHg2MWM3LAotICAgIDB4NjYwZiwgMHg2NjA2LCAweDY4MzksIDB4NjhiMSwgMHg2ZGY3LCAweDc1 ZDUsIDB4N2QzYSwgMHg4MjZlLAotICAgIDB4OWI0MiwgMHg0ZTliLCAweDRmNTAsIDB4NTNjOSwg MHg1NTA2LCAweDVkNmYsIDB4NWRlNiwgMHg1ZGVlLAotICAgIDB4NjdmYiwgMHg2Yzk5LCAweDc0 NzMsIDB4NzgwMiwgMHg4YTUwLCAweDkzOTYsIDB4ODhkZiwgMHg1NzUwLAotICAgIDB4NWVhNywg MHg2MzJiLCAweDUwYjUsIDB4NTBhYywgMHg1MThkLCAweDY3MDAsIDB4NTRjOSwgMHg1ODVlLAot ICAgIDB4NTliYiwgMHg1YmIwLCAweDVmNjksIDB4NjI0ZCwgMHg2M2ExLCAweDY4M2QsIDB4NmI3 MywgMHg2ZTA4LAotICAgIDB4NzA3ZCwgMHg5MWM3LCAweDcyODAsIDB4NzgxNSwgMHg3ODI2LCAw eDc5NmQsIDB4NjU4ZSwgMHg3ZDMwLAotICAgIDB4ODNkYywgMHg4OGMxLCAweDhmMDksIDB4OTY5 YiwgMHg1MjY0LCAweDU3MjgsIDB4Njc1MCwgMHg3ZjZhLAotICAgIDB4OGNhMSwgMHg1MWI0LCAw eDU3NDIsIDB4OTYyYSwgMHg1ODNhLCAweDY5OGEsIDB4ODBiNCwgMHg1NGIyLAotICAgIDB4NWQw ZSwgMHg1N2ZjLCAweDc4OTUsIDB4OWRmYSwgMHg0ZjVjLCAweDUyNGEsIDB4NTQ4YiwgMHg2NDNl LAotICAgIDB4NjYyOCwgMHg2NzE0LCAweDY3ZjUsIDB4N2E4NCwgMHg3YjU2LCAweDdkMjIsIDB4 OTMyZiwgMHg2ODVjLAotICAgIDB4OWJhZCwgMHg3YjM5LCAweDUzMTksIDB4NTE4YSwgMHg1MjM3 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4NWJkZiwgMHg2MmY2LCAweDY0YWUsIDB4NjRlNiwgMHg2NzJkLCAweDZi YmEsIDB4ODVhOSwgMHg5NmQxLAotICAgIDB4NzY5MCwgMHg5YmQ2LCAweDYzNGMsIDB4OTMwNiwg MHg5YmFiLCAweDc2YmYsIDB4NjY1MiwgMHg0ZTA5LAotICAgIDB4NTA5OCwgMHg1M2MyLCAweDVj NzEsIDB4NjBlOCwgMHg2NDkyLCAweDY1NjMsIDB4Njg1ZiwgMHg3MWU2LAotICAgIDB4NzNjYSwg MHg3NTIzLCAweDdiOTcsIDB4N2U4MiwgMHg4Njk1LCAweDhiODMsIDB4OGNkYiwgMHg5MTc4LAot ICAgIDB4OTkxMCwgMHg2NWFjLCAweDY2YWIsIDB4NmI4YiwgMHg0ZWQ1LCAweDRlZDQsIDB4NGYz YSwgMHg0ZjdmLAotICAgIDB4NTIzYSwgMHg1M2Y4LCAweDUzZjIsIDB4NTVlMywgMHg1NmRiLCAw eDU4ZWIsIDB4NTljYiwgMHg1OWM5LAotICAgIDB4NTlmZiwgMHg1YjUwLCAweDVjNGQsIDB4NWUw MiwgMHg1ZTJiLCAweDVmZDcsIDB4NjAxZCwgMHg2MzA3LAotICAgIDB4NjUyZiwgMHg1YjVjLCAw eDY1YWYsIDB4NjViZCwgMHg2NWU4LCAweDY3OWQsIDB4NmI2MiwgMHhmZmZkLAotICAgIDB4NmI3 YiwgMHg2YzBmLCAweDczNDUsIDB4Nzk0OSwgMHg3OWMxLCAweDdjZjgsIDB4N2QxOSwgMHg3ZDJi LAotICAgIDB4ODBhMiwgMHg4MTAyLCAweDgxZjMsIDB4ODk5NiwgMHg4YTVlLCAweDhhNjksIDB4 OGE2NiwgMHg4YThjLAotICAgIDB4OGFlZSwgMHg4Y2M3LCAweDhjZGMsIDB4OTZjYywgMHg5OGZj LCAweDZiNmYsIDB4NGU4YiwgMHg0ZjNjLAotICAgIDB4NGY4ZCwgMHg1MTUwLCAweDViNTcsIDB4 NWJmYSwgMHg2MTQ4LCAweDYzMDEsIDB4NjY0MiwgMHg2YjIxLAotICAgIDB4NmVjYiwgMHg2Y2Ji LCAweDcyM2UsIDB4NzRiZCwgMHg3NWQ0LCAweDc4YzEsIDB4NzkzYSwgMHg4MDBjLAotICAgIDB4 ODAzMywgMHg4MWVhLCAweDg0OTQsIDB4OGY5ZSwgMHg2YzUwLCAweDllN2YsIDB4NWYwZiwgMHg4 YjU4LAotICAgIDB4OWQyYiwgMHg3YWZhLCAweDhlZjgsIDB4NWI4ZCwgMHg5NmViLCAweDRlMDMs IDB4NTNmMSwgMHg1N2Y3LAotICAgIDB4NTkzMSwgMHg1YWM5LCAweDViYTQsIDB4NjA4OSwgMHg2 ZTdmLCAweDZmMDYsIDB4NzViZSwgMHg4Y2VhLAotICAgIDB4NWI5ZiwgMHg4NTAwLCAweDdiZTAs IDB4NTA3MiwgMHg2N2Y0LCAweDgyOWQsIDB4NWM2MSwgMHg4NTRhLAotICAgIDB4N2UxZSwgMHg4 MjBlLCAweDUxOTksIDB4NWMwNCwgMHg2MzY4LCAweDhkNjYsIDB4NjU5YywgMHg3MTZlLAotICAg IDB4NzkzZSwgMHg3ZDE3LCAweDgwMDUsIDB4OGIxZCwgMHg4ZWNhLCAweDkwNmUsIDB4ODZjNywg MHg5MGFhLAotICAgIDB4NTAxZiwgMHg1MmZhLCAweDVjM2EsIDB4Njc1MywgMHg3MDdjLCAweDcy MzUsIDB4OTE0YywgMHg5MWM4LAotICAgIDB4OTMyYiwgMHg4MmU1LCAweDViYzIsIDB4NWYzMSwg MHg2MGY5LCAweDRlM2IsIDB4NTNkNiwgMHg1Yjg4LAotICAgIDB4NjI0YiwgMHg2NzMxLCAweDZi OGEsIDB4NzJlOSwgMHg3M2UwLCAweDdhMmUsIDB4ODE2YiwgMHg4ZGEzLAotICAgIDB4OTE1Miwg MHg5OTk2LCAweDUxMTIsIDB4NTNkNywgMHg1NDZhLCAweDViZmYsIDB4NjM4OCwgMHg2YTM5LAot ICAgIDB4N2RhYywgMHg5NzAwLCAweDU2ZGEsIDB4NTNjZSwgMHg1NDY4LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 NWI5NywgMHg1YzMxLCAweDVkZGUsIDB4NGZlZSwgMHg2MTAxLCAweDYyZmUsIDB4NmQzMiwgMHg3 OWMwLAotICAgIDB4NzljYiwgMHg3ZDQyLCAweDdlNGQsIDB4N2ZkMiwgMHg4MWVkLCAweDgyMWYs IDB4ODQ5MCwgMHg4ODQ2LAotICAgIDB4ODk3MiwgMHg4YjkwLCAweDhlNzQsIDB4OGYyZiwgMHg5 MDMxLCAweDkxNGIsIDB4OTE2YywgMHg5NmM2LAotICAgIDB4OTE5YywgMHg0ZWMwLCAweDRmNGYs IDB4NTE0NSwgMHg1MzQxLCAweDVmOTMsIDB4NjIwZSwgMHg2N2Q0LAotICAgIDB4NmM0MSwgMHg2 ZTBiLCAweDczNjMsIDB4N2UyNiwgMHg5MWNkLCAweDkyODMsIDB4NTNkNCwgMHg1OTE5LAotICAg IDB4NWJiZiwgMHg2ZGQxLCAweDc5NWQsIDB4N2UyZSwgMHg3YzliLCAweDU4N2UsIDB4NzE5Ziwg MHg1MWZhLAotICAgIDB4ODg1MywgMHg4ZmYwLCAweDRmY2EsIDB4NWNmYiwgMHg2NjI1LCAweDc3 YWMsIDB4N2FlMywgMHg4MjFjLAotICAgIDB4OTlmZiwgMHg1MWM2LCAweDVmYWEsIDB4NjVlYywg MHg2OTZmLCAweDZiODksIDB4NmRmMywgMHhmZmZkLAotICAgIDB4NmU5NiwgMHg2ZjY0LCAweDc2 ZmUsIDB4N2QxNCwgMHg1ZGUxLCAweDkwNzUsIDB4OTE4NywgMHg5ODA2LAotICAgIDB4NTFlNiwg MHg1MjFkLCAweDYyNDAsIDB4NjY5MSwgMHg2NmQ5LCAweDZlMWEsIDB4NWViNiwgMHg3ZGQyLAot ICAgIDB4N2Y3MiwgMHg2NmY4LCAweDg1YWYsIDB4ODVmNywgMHg4YWY4LCAweDUyYTksIDB4NTNk OSwgMHg1OTczLAotICAgIDB4NWU4ZiwgMHg1ZjkwLCAweDYwNTUsIDB4OTJlNCwgMHg5NjY0LCAw eDUwYjcsIDB4NTExZiwgMHg1MmRkLAotICAgIDB4NTMyMCwgMHg1MzQ3LCAweDUzZWMsIDB4NTRl OCwgMHg1NTQ2LCAweDU1MzEsIDB4NTYxNywgMHg1OTY4LAotICAgIDB4NTliZSwgMHg1YTNjLCAw eDViYjUsIDB4NWMwNiwgMHg1YzBmLCAweDVjMTEsIDB4NWMxYSwgMHg1ZTg0LAotICAgIDB4NWU4 YSwgMHg1ZWUwLCAweDVmNzAsIDB4NjI3ZiwgMHg2Mjg0LCAweDYyZGIsIDB4NjM4YywgMHg2Mzc3 LAotICAgIDB4NjYwNywgMHg2NjBjLCAweDY2MmQsIDB4NjY3NiwgMHg2NzdlLCAweDY4YTIsIDB4 NmExZiwgMHg2YTM1LAotICAgIDB4NmNiYywgMHg2ZDg4LCAweDZlMDksIDB4NmU1OCwgMHg3MTNj LCAweDcxMjYsIDB4NzE2NywgMHg3NWM3LAotICAgIDB4NzcwMSwgMHg3ODVkLCAweDc5MDEsIDB4 Nzk2NSwgMHg3OWYwLCAweDdhZTAsIDB4N2IxMSwgMHg3Y2E3LAotICAgIDB4N2QzOSwgMHg4MDk2 LCAweDgzZDYsIDB4ODQ4YiwgMHg4NTQ5LCAweDg4NWQsIDB4ODhmMywgMHg4YTFmLAotICAgIDB4 OGEzYywgMHg4YTU0LCAweDhhNzMsIDB4OGM2MSwgMHg4Y2RlLCAweDkxYTQsIDB4OTI2NiwgMHg5 MzdlLAotICAgIDB4OTQxOCwgMHg5NjljLCAweDk3OTgsIDB4NGUwYSwgMHg0ZTA4LCAweDRlMWUs IDB4NGU1NywgMHg1MTk3LAotICAgIDB4NTI3MCwgMHg1N2NlLCAweDU4MzQsIDB4NThjYywgMHg1 YjIyLCAweDVlMzgsIDB4NjBjNSwgMHg2NGZlLAotICAgIDB4Njc2MSwgMHg2NzU2LCAweDZkNDQs IDB4NzJiNiwgMHg3NTczLCAweDdhNjMsIDB4ODRiOCwgMHg4YjcyLAotICAgIDB4OTFiOCwgMHg5 MzIwLCAweDU2MzEsIDB4NTdmNCwgMHg5OGZlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4NjJlZCwgMHg2OTBkLCAw eDZiOTYsIDB4NzFlZCwgMHg3ZTU0LCAweDgwNzcsIDB4ODI3MiwgMHg4OWU2LAotICAgIDB4OThk ZiwgMHg4NzU1LCAweDhmYjEsIDB4NWMzYiwgMHg0ZjM4LCAweDRmZTEsIDB4NGZiNSwgMHg1NTA3 LAotICAgIDB4NWEyMCwgMHg1YmRkLCAweDViZTksIDB4NWZjMywgMHg2MTRlLCAweDYzMmYsIDB4 NjViMCwgMHg2NjRiLAotICAgIDB4NjhlZSwgMHg2OTliLCAweDZkNzgsIDB4NmRmMSwgMHg3NTMz LCAweDc1YjksIDB4NzcxZiwgMHg3OTVlLAotICAgIDB4NzllNiwgMHg3ZDMzLCAweDgxZTMsIDB4 ODJhZiwgMHg4NWFhLCAweDg5YWEsIDB4OGEzYSwgMHg4ZWFiLAotICAgIDB4OGY5YiwgMHg5MDMy LCAweDkxZGQsIDB4OTcwNywgMHg0ZWJhLCAweDRlYzEsIDB4NTIwMywgMHg1ODc1LAotICAgIDB4 NThlYywgMHg1YzBiLCAweDc1MWEsIDB4NWMzZCwgMHg4MTRlLCAweDhhMGEsIDB4OGZjNSwgMHg5 NjYzLAotICAgIDB4OTc2ZCwgMHg3YjI1LCAweDhhY2YsIDB4OTgwOCwgMHg5MTYyLCAweDU2ZjMs IDB4NTNhOCwgMHhmZmZkLAotICAgIDB4OTAxNywgMHg1NDM5LCAweDU3ODIsIDB4NWUyNSwgMHg2 M2E4LCAweDZjMzQsIDB4NzA4YSwgMHg3NzYxLAotICAgIDB4N2M4YiwgMHg3ZmUwLCAweDg4NzAs IDB4OTA0MiwgMHg5MTU0LCAweDkzMTAsIDB4OTMxOCwgMHg5NjhmLAotICAgIDB4NzQ1ZSwgMHg5 YWM0LCAweDVkMDcsIDB4NWQ2OSwgMHg2NTcwLCAweDY3YTIsIDB4OGRhOCwgMHg5NmRiLAotICAg IDB4NjM2ZSwgMHg2NzQ5LCAweDY5MTksIDB4ODNjNSwgMHg5ODE3LCAweDk2YzAsIDB4ODhmZSwg MHg2Zjg0LAotICAgIDB4NjQ3YSwgMHg1YmY4LCAweDRlMTYsIDB4NzAyYywgMHg3NTVkLCAweDY2 MmYsIDB4NTFjNCwgMHg1MjM2LAotICAgIDB4NTJlMiwgMHg1OWQzLCAweDVmODEsIDB4NjAyNywg MHg2MjEwLCAweDY1M2YsIDB4NjU3NCwgMHg2NjFmLAotICAgIDB4NjY3NCwgMHg2OGYyLCAweDY4 MTYsIDB4NmI2MywgMHg2ZTA1LCAweDcyNzIsIDB4NzUxZiwgMHg3NmRiLAotICAgIDB4N2NiZSwg MHg4MDU2LCAweDU4ZjAsIDB4ODhmZCwgMHg4OTdmLCAweDhhYTAsIDB4OGE5MywgMHg4YWNiLAot ICAgIDB4OTAxZCwgMHg5MTkyLCAweDk3NTIsIDB4OTc1OSwgMHg2NTg5LCAweDdhMGUsIDB4ODEw NiwgMHg5NmJiLAotICAgIDB4NWUyZCwgMHg2MGRjLCAweDYyMWEsIDB4NjVhNSwgMHg2NjE0LCAw eDY3OTAsIDB4NzdmMywgMHg3YTRkLAotICAgIDB4N2M0ZCwgMHg3ZTNlLCAweDgxMGEsIDB4OGNh YywgMHg4ZDY0LCAweDhkZTEsIDB4OGU1ZiwgMHg3OGE5LAotICAgIDB4NTIwNywgMHg2MmQ5LCAw eDYzYTUsIDB4NjQ0MiwgMHg2Mjk4LCAweDhhMmQsIDB4N2E4MywgMHg3YmMwLAotICAgIDB4OGFh YywgMHg5NmVhLCAweDdkNzYsIDB4ODIwYywgMHg4NzQ5LCAweDRlZDksIDB4NTE0OCwgMHg1MzQz LAotICAgIDB4NTM2MCwgMHg1YmEzLCAweDVjMDIsIDB4NWMxNiwgMHg1ZGRkLCAweDYyMjYsIDB4 NjI0NywgMHg2NGIwLAotICAgIDB4NjgxMywgMHg2ODM0LCAweDZjYzksIDB4NmQ0NSwgMHg2ZDE3 LCAweDY3ZDMsIDB4NmY1YywgMHg3MTRlLAotICAgIDB4NzE3ZCwgMHg2NWNiLCAweDdhN2YsIDB4 N2JhZCwgMHg3ZGRhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4N2U0YSwgMHg3ZmE4LCAweDgxN2EsIDB4ODIxYiwg MHg4MjM5LCAweDg1YTYsIDB4OGE2ZSwgMHg4Y2NlLAotICAgIDB4OGRmNSwgMHg5MDc4LCAweDkw NzcsIDB4OTJhZCwgMHg5MjkxLCAweDk1ODMsIDB4OWJhZSwgMHg1MjRkLAotICAgIDB4NTU4NCwg MHg2ZjM4LCAweDcxMzYsIDB4NTE2OCwgMHg3OTg1LCAweDdlNTUsIDB4ODFiMywgMHg3Y2NlLAot ICAgIDB4NTY0YywgMHg1ODUxLCAweDVjYTgsIDB4NjNhYSwgMHg2NmZlLCAweDY2ZmQsIDB4Njk1 YSwgMHg3MmQ5LAotICAgIDB4NzU4ZiwgMHg3NThlLCAweDc5MGUsIDB4Nzk1NiwgMHg3OWRmLCAw eDdjOTcsIDB4N2QyMCwgMHg3ZDQ0LAotICAgIDB4ODYwNywgMHg4YTM0LCAweDk2M2IsIDB4OTA2 MSwgMHg5ZjIwLCAweDUwZTcsIDB4NTI3NSwgMHg1M2NjLAotICAgIDB4NTNlMiwgMHg1MDA5LCAw eDU1YWEsIDB4NThlZSwgMHg1OTRmLCAweDcyM2QsIDB4NWI4YiwgMHg1YzY0LAotICAgIDB4NTMx ZCwgMHg2MGUzLCAweDYwZjMsIDB4NjM1YywgMHg2MzgzLCAweDYzM2YsIDB4NjNiYiwgMHhmZmZk LAotICAgIDB4NjRjZCwgMHg2NWU5LCAweDY2ZjksIDB4NWRlMywgMHg2OWNkLCAweDY5ZmQsIDB4 NmYxNSwgMHg3MWU1LAotICAgIDB4NGU4OSwgMHg3NWU5LCAweDc2ZjgsIDB4N2E5MywgMHg3Y2Rm LCAweDdkY2YsIDB4N2Q5YywgMHg4MDYxLAotICAgIDB4ODM0OSwgMHg4MzU4LCAweDg0NmMsIDB4 ODRiYywgMHg4NWZiLCAweDg4YzUsIDB4OGQ3MCwgMHg5MDAxLAotICAgIDB4OTA2ZCwgMHg5Mzk3 LCAweDk3MWMsIDB4OWExMiwgMHg1MGNmLCAweDU4OTcsIDB4NjE4ZSwgMHg4MWQzLAotICAgIDB4 ODUzNSwgMHg4ZDA4LCAweDkwMjAsIDB4NGZjMywgMHg1MDc0LCAweDUyNDcsIDB4NTM3MywgMHg2 MDZmLAotICAgIDB4NjM0OSwgMHg2NzVmLCAweDZlMmMsIDB4OGRiMywgMHg5MDFmLCAweDRmZDcs IDB4NWM1ZSwgMHg4Y2NhLAotICAgIDB4NjVjZiwgMHg3ZDlhLCAweDUzNTIsIDB4ODg5NiwgMHg1 MTc2LCAweDYzYzMsIDB4NWI1OCwgMHg1YjZiLAotICAgIDB4NWMwYSwgMHg2NDBkLCAweDY3NTEs IDB4OTA1YywgMHg0ZWQ2LCAweDU5MWEsIDB4NTkyYSwgMHg2YzcwLAotICAgIDB4OGE1MSwgMHg1 NTNlLCAweDU4MTUsIDB4NTlhNSwgMHg2MGYwLCAweDYyNTMsIDB4NjdjMSwgMHg4MjM1LAotICAg IDB4Njk1NSwgMHg5NjQwLCAweDk5YzQsIDB4OWEyOCwgMHg0ZjUzLCAweDU4MDYsIDB4NWJmZSwg MHg4MDEwLAotICAgIDB4NWNiMSwgMHg1ZTJmLCAweDVmODUsIDB4NjAyMCwgMHg2MTRiLCAweDYy MzQsIDB4NjZmZiwgMHg2Y2YwLAotICAgIDB4NmVkZSwgMHg4MGNlLCAweDgxN2YsIDB4ODJkNCwg MHg4ODhiLCAweDhjYjgsIDB4OTAwMCwgMHg5MDJlLAotICAgIDB4OTY4YSwgMHg5ZWRiLCAweDli ZGIsIDB4NGVlMywgMHg1M2YwLCAweDU5MjcsIDB4N2IyYywgMHg5MThkLAotICAgIDB4OTg0Yywg MHg5ZGY5LCAweDZlZGQsIDB4NzAyNywgMHg1MzUzLCAweDU1NDQsIDB4NWI4NSwgMHg2MjU4LAot ICAgIDB4NjI5ZSwgMHg2MmQzLCAweDZjYTIsIDB4NmZlZiwgMHg3NDIyLCAweDhhMTcsIDB4OTQz OCwgMHg2ZmMxLAotICAgIDB4OGFmZSwgMHg4MzM4LCAweDUxZTcsIDB4ODZmOCwgMHg1M2VhLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4NTNlOSwgMHg0ZjQ2LCAweDkwNTQsIDB4OGZiMCwgMHg1OTZhLCAweDgxMzEs IDB4NWRmZCwgMHg3YWVhLAotICAgIDB4OGZiZiwgMHg2OGRhLCAweDhjMzcsIDB4NzJmOCwgMHg5 YzQ4LCAweDZhM2QsIDB4OGFiMCwgMHg0ZTM5LAotICAgIDB4NTM1OCwgMHg1NjA2LCAweDU3NjYs IDB4NjJjNSwgMHg2M2EyLCAweDY1ZTYsIDB4NmI0ZSwgMHg2ZGUxLAotICAgIDB4NmU1YiwgMHg3 MGFkLCAweDc3ZWQsIDB4N2FlZiwgMHg3YmFhLCAweDdkYmIsIDB4ODAzZCwgMHg4MGM2LAotICAg IDB4ODZjYiwgMHg4YTk1LCAweDkzNWIsIDB4NTZlMywgMHg1OGM3LCAweDVmM2UsIDB4NjVhZCwg MHg2Njk2LAotICAgIDB4NmE4MCwgMHg2YmI1LCAweDc1MzcsIDB4OGFjNywgMHg1MDI0LCAweDc3 ZTUsIDB4NTczMCwgMHg1ZjFiLAotICAgIDB4NjA2NSwgMHg2NjdhLCAweDZjNjAsIDB4NzVmNCwg MHg3YTFhLCAweDdmNmUsIDB4ODFmNCwgMHg4NzE4LAotICAgIDB4OTA0NSwgMHg5OWIzLCAweDdi YzksIDB4NzU1YywgMHg3YWY5LCAweDdiNTEsIDB4ODRjNCwgMHhmZmZkLAotICAgIDB4OTAxMCwg MHg3OWU5LCAweDdhOTIsIDB4ODMzNiwgMHg1YWUxLCAweDc3NDAsIDB4NGUyZCwgMHg0ZWYyLAot ICAgIDB4NWI5OSwgMHg1ZmUwLCAweDYyYmQsIDB4NjYzYywgMHg2N2YxLCAweDZjZTgsIDB4ODY2 YiwgMHg4ODc3LAotICAgIDB4OGEzYiwgMHg5MTRlLCAweDkyZjMsIDB4OTlkMCwgMHg2YTE3LCAw eDcwMjYsIDB4NzMyYSwgMHg4MmU3LAotICAgIDB4ODQ1NywgMHg4Y2FmLCAweDRlMDEsIDB4NTE0 NiwgMHg1MWNiLCAweDU1OGIsIDB4NWJmNSwgMHg1ZTE2LAotICAgIDB4NWUzMywgMHg1ZTgxLCAw eDVmMTQsIDB4NWYzNSwgMHg1ZjZiLCAweDVmYjQsIDB4NjFmMiwgMHg2MzExLAotICAgIDB4NjZh MiwgMHg2NzFkLCAweDZmNmUsIDB4NzI1MiwgMHg3NTNhLCAweDc3M2EsIDB4ODA3NCwgMHg4MTM5 LAotICAgIDB4ODE3OCwgMHg4Nzc2LCAweDhhYmYsIDB4OGFkYywgMHg4ZDg1LCAweDhkZjMsIDB4 OTI5YSwgMHg5NTc3LAotICAgIDB4OTgwMiwgMHg5Y2U1LCAweDUyYzUsIDB4NjM1NywgMHg3NmY0 LCAweDY3MTUsIDB4NmM4OCwgMHg3M2NkLAotICAgIDB4OGNjMywgMHg5M2FlLCAweDk2NzMsIDB4 NmQyNSwgMHg1ODljLCAweDY5MGUsIDB4NjljYywgMHg4ZmZkLAotICAgIDB4OTM5YSwgMHg3NWRi LCAweDkwMWEsIDB4NTg1YSwgMHg2ODAyLCAweDYzYjQsIDB4NjlmYiwgMHg0ZjQzLAotICAgIDB4 NmYyYywgMHg2N2Q4LCAweDhmYmIsIDB4ODUyNiwgMHg3ZGI0LCAweDkzNTQsIDB4NjkzZiwgMHg2 ZjcwLAotICAgIDB4NTc2YSwgMHg1OGY3LCAweDViMmMsIDB4N2QyYywgMHg3MjJhLCAweDU0MGEs IDB4OTFlMywgMHg5ZGI0LAotICAgIDB4NGVhZCwgMHg0ZjRlLCAweDUwNWMsIDB4NTA3NSwgMHg1 MjQzLCAweDhjOWUsIDB4NTQ0OCwgMHg1ODI0LAotICAgIDB4NWI5YSwgMHg1ZTFkLCAweDVlOTUs IDB4NWVhZCwgMHg1ZWY3LCAweDVmMWYsIDB4NjA4YywgMHg2MmI1LAotICAgIDB4NjMzYSwgMHg2 M2QwLCAweDY4YWYsIDB4NmM0MCwgMHg3ODg3LCAweDc5OGUsIDB4N2EwYiwgMHg3ZGUwLAotICAg IDB4ODI0NywgMHg4YTAyLCAweDhhZTYsIDB4OGU0NCwgMHg5MDEzLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTBi OCwgMHg5MTJkLCAweDkxZDgsIDB4OWYwZSwgMHg2Y2U1LCAweDY0NTgsIDB4NjRlMiwgMHg2NTc1 LAotICAgIDB4NmVmNCwgMHg3Njg0LCAweDdiMWIsIDB4OTA2OSwgMHg5M2QxLCAweDZlYmEsIDB4 NTRmMiwgMHg1ZmI5LAotICAgIDB4NjRhNCwgMHg4ZjRkLCAweDhmZWQsIDB4OTI0NCwgMHg1MTc4 LCAweDU4NmIsIDB4NTkyOSwgMHg1YzU1LAotICAgIDB4NWU5NywgMHg2ZGZiLCAweDdlOGYsIDB4 NzUxYywgMHg4Y2JjLCAweDhlZTIsIDB4OTg1YiwgMHg3MGI5LAotICAgIDB4NGYxZCwgMHg2YmJm LCAweDZmYjEsIDB4NzUzMCwgMHg5NmZiLCAweDUxNGUsIDB4NTQxMCwgMHg1ODM1LAotICAgIDB4 NTg1NywgMHg1OWFjLCAweDVjNjAsIDB4NWY5MiwgMHg2NTk3LCAweDY3NWMsIDB4NmUyMSwgMHg3 NjdiLAotICAgIDB4ODNkZiwgMHg4Y2VkLCAweDkwMTQsIDB4OTBmZCwgMHg5MzRkLCAweDc4MjUs IDB4NzgzYSwgMHg1MmFhLAotICAgIDB4NWVhNiwgMHg1NzFmLCAweDU5NzQsIDB4NjAxMiwgMHg1 MDEyLCAweDUxNWEsIDB4NTFhYywgMHhmZmZkLAotICAgIDB4NTFjZCwgMHg1MjAwLCAweDU1MTAs IDB4NTg1NCwgMHg1ODU4LCAweDU5NTcsIDB4NWI5NSwgMHg1Y2Y2LAotICAgIDB4NWQ4YiwgMHg2 MGJjLCAweDYyOTUsIDB4NjQyZCwgMHg2NzcxLCAweDY4NDMsIDB4NjhiYywgMHg2OGRmLAotICAg IDB4NzZkNywgMHg2ZGQ4LCAweDZlNmYsIDB4NmQ5YiwgMHg3MDZmLCAweDcxYzgsIDB4NWY1Mywg MHg3NWQ4LAotICAgIDB4Nzk3NywgMHg3YjQ5LCAweDdiNTQsIDB4N2I1MiwgMHg3Y2Q2LCAweDdk NzEsIDB4NTIzMCwgMHg4NDYzLAotICAgIDB4ODU2OSwgMHg4NWU0LCAweDhhMGUsIDB4OGIwNCwg MHg4YzQ2LCAweDhlMGYsIDB4OTAwMywgMHg5MDBmLAotICAgIDB4OTQxOSwgMHg5Njc2LCAweDk4 MmQsIDB4OWEzMCwgMHg5NWQ4LCAweDUwY2QsIDB4NTJkNSwgMHg1NDBjLAotICAgIDB4NTgwMiwg MHg1YzBlLCAweDYxYTcsIDB4NjQ5ZSwgMHg2ZDFlLCAweDc3YjMsIDB4N2FlNSwgMHg4MGY0LAot ICAgIDB4ODQwNCwgMHg5MDUzLCAweDkyODUsIDB4NWNlMCwgMHg5ZDA3LCAweDUzM2YsIDB4NWY5 NywgMHg1ZmIzLAotICAgIDB4NmQ5YywgMHg3Mjc5LCAweDc3NjMsIDB4NzliZiwgMHg3YmU0LCAw eDZiZDIsIDB4NzJlYywgMHg4YWFkLAotICAgIDB4NjgwMywgMHg2YTYxLCAweDUxZjgsIDB4N2E4 MSwgMHg2OTM0LCAweDVjNGEsIDB4OWNmNiwgMHg4MmViLAotICAgIDB4NWJjNSwgMHg5MTQ5LCAw eDcwMWUsIDB4NTY3OCwgMHg1YzZmLCAweDYwYzcsIDB4NjU2NiwgMHg2YzhjLAotICAgIDB4OGM1 YSwgMHg5MDQxLCAweDk4MTMsIDB4NTQ1MSwgMHg2NmM3LCAweDkyMGQsIDB4NTk0OCwgMHg5MGEz LAotICAgIDB4NTE4NSwgMHg0ZTRkLCAweDUxZWEsIDB4ODU5OSwgMHg4YjBlLCAweDcwNTgsIDB4 NjM3YSwgMHg5MzRiLAotICAgIDB4Njk2MiwgMHg5OWI0LCAweDdlMDQsIDB4NzU3NywgMHg1MzU3 LCAweDY5NjAsIDB4OGVkZiwgMHg5NmUzLAotICAgIDB4NmM1ZCwgMHg0ZThjLCAweDVjM2MsIDB4 NWYxMCwgMHg4ZmU5LCAweDUzMDIsIDB4OGNkMSwgMHg4MDg5LAotICAgIDB4ODY3OSwgMHg1ZWZm LCAweDY1ZTUsIDB4NGU3MywgMHg1MTY1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4NTk4MiwgMHg1YzNmLCAweDk3 ZWUsIDB4NGVmYiwgMHg1OThhLCAweDVmY2QsIDB4OGE4ZCwgMHg2ZmUxLAotICAgIDB4NzliMCwg MHg3OTYyLCAweDViZTcsIDB4ODQ3MSwgMHg3MzJiLCAweDcxYjEsIDB4NWU3NCwgMHg1ZmY1LAot ICAgIDB4NjM3YiwgMHg2NDlhLCAweDcxYzMsIDB4N2M5OCwgMHg0ZTQzLCAweDVlZmMsIDB4NGU0 YiwgMHg1N2RjLAotICAgIDB4NTZhMiwgMHg2MGE5LCAweDZmYzMsIDB4N2QwZCwgMHg4MGZkLCAw eDgxMzMsIDB4ODFiZiwgMHg4ZmIyLAotICAgIDB4ODk5NywgMHg4NmE0LCAweDVkZjQsIDB4NjI4 YSwgMHg2NGFkLCAweDg5ODcsIDB4Njc3NywgMHg2Y2UyLAotICAgIDB4NmQzZSwgMHg3NDM2LCAw eDc4MzQsIDB4NWE0NiwgMHg3Zjc1LCAweDgyYWQsIDB4OTlhYywgMHg0ZmYzLAotICAgIDB4NWVj MywgMHg2MmRkLCAweDYzOTIsIDB4NjU1NywgMHg2NzZmLCAweDc2YzMsIDB4NzI0YywgMHg4MGNj LAotICAgIDB4ODBiYSwgMHg4ZjI5LCAweDkxNGQsIDB4NTAwZCwgMHg1N2Y5LCAweDVhOTIsIDB4 Njg4NSwgMHhmZmZkLAotICAgIDB4Njk3MywgMHg3MTY0LCAweDcyZmQsIDB4OGNiNywgMHg1OGYy LCAweDhjZTAsIDB4OTY2YSwgMHg5MDE5LAotICAgIDB4ODc3ZiwgMHg3OWU0LCAweDc3ZTcsIDB4 ODQyOSwgMHg0ZjJmLCAweDUyNjUsIDB4NTM1YSwgMHg2MmNkLAotICAgIDB4NjdjZiwgMHg2Y2Nh LCAweDc2N2QsIDB4N2I5NCwgMHg3Yzk1LCAweDgyMzYsIDB4ODU4NCwgMHg4ZmViLAotICAgIDB4 NjZkZCwgMHg2ZjIwLCAweDcyMDYsIDB4N2UxYiwgMHg4M2FiLCAweDk5YzEsIDB4OWVhNiwgMHg1 MWZkLAotICAgIDB4N2JiMSwgMHg3ODcyLCAweDdiYjgsIDB4ODA4NywgMHg3YjQ4LCAweDZhZTgs IDB4NWU2MSwgMHg4MDhjLAotICAgIDB4NzU1MSwgMHg3NTYwLCAweDUxNmIsIDB4OTI2MiwgMHg2 ZThjLCAweDc2N2EsIDB4OTE5NywgMHg5YWVhLAotICAgIDB4NGYxMCwgMHg3ZjcwLCAweDYyOWMs IDB4N2I0ZiwgMHg5NWE1LCAweDljZTksIDB4NTY3YSwgMHg1ODU5LAotICAgIDB4ODZlNCwgMHg5 NmJjLCAweDRmMzQsIDB4NTIyNCwgMHg1MzRhLCAweDUzY2QsIDB4NTNkYiwgMHg1ZTA2LAotICAg IDB4NjQyYywgMHg2NTkxLCAweDY3N2YsIDB4NmMzZSwgMHg2YzRlLCAweDcyNDgsIDB4NzJhZiwg MHg3M2VkLAotICAgIDB4NzU1NCwgMHg3ZTQxLCAweDgyMmMsIDB4ODVlOSwgMHg4Y2E5LCAweDdi YzQsIDB4OTFjNiwgMHg3MTY5LAotICAgIDB4OTgxMiwgMHg5OGVmLCAweDYzM2QsIDB4NjY2OSwg MHg3NTZhLCAweDc2ZTQsIDB4NzhkMCwgMHg4NTQzLAotICAgIDB4ODZlZSwgMHg1MzJhLCAweDUz NTEsIDB4NTQyNiwgMHg1OTgzLCAweDVlODcsIDB4NWY3YywgMHg2MGIyLAotICAgIDB4NjI0OSwg MHg2Mjc5LCAweDYyYWIsIDB4NjU5MCwgMHg2YmQ0LCAweDZjY2MsIDB4NzViMiwgMHg3NmFlLAot ICAgIDB4Nzg5MSwgMHg3OWQ4LCAweDdkY2IsIDB4N2Y3NywgMHg4MGE1LCAweDg4YWIsIDB4OGFi OSwgMHg4Y2JiLAotICAgIDB4OTA3ZiwgMHg5NzVlLCAweDk4ZGIsIDB4NmEwYiwgMHg3YzM4LCAw eDUwOTksIDB4NWMzZSwgMHg1ZmFlLAotICAgIDB4Njc4NywgMHg2YmQ4LCAweDc0MzUsIDB4Nzcw OSwgMHg3ZjhlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWYzYiwgMHg2N2NhLCAweDdhMTcsIDB4NTMzOSwgMHg3 NThiLCAweDlhZWQsIDB4NWY2NiwgMHg4MTlkLAotICAgIDB4ODNmMSwgMHg4MDk4LCAweDVmM2Ms IDB4NWZjNSwgMHg3NTYyLCAweDdiNDYsIDB4OTAzYywgMHg2ODY3LAotICAgIDB4NTllYiwgMHg1 YTliLCAweDdkMTAsIDB4NzY3ZSwgMHg4YjJjLCAweDRmZjUsIDB4NWY2YSwgMHg2YTE5LAotICAg IDB4NmMzNywgMHg2ZjAyLCAweDc0ZTIsIDB4Nzk2OCwgMHg4ODY4LCAweDhhNTUsIDB4OGM3OSwg MHg1ZWRmLAotICAgIDB4NjNjZiwgMHg3NWM1LCAweDc5ZDIsIDB4ODJkNywgMHg5MzI4LCAweDky ZjIsIDB4ODQ5YywgMHg4NmVkLAotICAgIDB4OWMyZCwgMHg1NGMxLCAweDVmNmMsIDB4NjU4Yywg MHg2ZDVjLCAweDcwMTUsIDB4OGNhNywgMHg4Y2QzLAotICAgIDB4OTgzYiwgMHg2NTRmLCAweDc0 ZjYsIDB4NGUwZCwgMHg0ZWQ4LCAweDU3ZTAsIDB4NTkyYiwgMHg1YTY2LAotICAgIDB4NWJjYywg MHg1MWE4LCAweDVlMDMsIDB4NWU5YywgMHg2MDE2LCAweDYyNzYsIDB4NjU3NywgMHhmZmZkLAot ICAgIDB4NjVhNywgMHg2NjZlLCAweDZkNmUsIDB4NzIzNiwgMHg3YjI2LCAweDgxNTAsIDB4ODE5 YSwgMHg4Mjk5LAotICAgIDB4OGI1YywgMHg4Y2EwLCAweDhjZTYsIDB4OGQ3NCwgMHg5NjFjLCAw eDk2NDQsIDB4NGZhZSwgMHg2NGFiLAotICAgIDB4NmI2NiwgMHg4MjFlLCAweDg0NjEsIDB4ODU2 YSwgMHg5MGU4LCAweDVjMDEsIDB4Njk1MywgMHg5OGE4LAotICAgIDB4ODQ3YSwgMHg4NTU3LCAw eDRmMGYsIDB4NTI2ZiwgMHg1ZmE5LCAweDVlNDUsIDB4NjcwZCwgMHg3OThmLAotICAgIDB4ODE3 OSwgMHg4OTA3LCAweDg5ODYsIDB4NmRmNSwgMHg1ZjE3LCAweDYyNTUsIDB4NmNiOCwgMHg0ZWNm LAotICAgIDB4NzI2OSwgMHg5YjkyLCAweDUyMDYsIDB4NTQzYiwgMHg1Njc0LCAweDU4YjMsIDB4 NjFhNCwgMHg2MjZlLAotICAgIDB4NzExYSwgMHg1OTZlLCAweDdjODksIDB4N2NkZSwgMHg3ZDFi LCAweDk2ZjAsIDB4NjU4NywgMHg4MDVlLAotICAgIDB4NGUxOSwgMHg0Zjc1LCAweDUxNzUsIDB4 NTg0MCwgMHg1ZTYzLCAweDVlNzMsIDB4NWYwYSwgMHg2N2M0LAotICAgIDB4NGUyNiwgMHg4NTNk LCAweDk1ODksIDB4OTY1YiwgMHg3YzczLCAweDk4MDEsIDB4NTBmYiwgMHg1OGMxLAotICAgIDB4 NzY1NiwgMHg3OGE3LCAweDUyMjUsIDB4NzdhNSwgMHg4NTExLCAweDdiODYsIDB4NTA0ZiwgMHg1 OTA5LAotICAgIDB4NzI0NywgMHg3YmM3LCAweDdkZTgsIDB4OGZiYSwgMHg4ZmQ0LCAweDkwNGQs IDB4NGZiZiwgMHg1MmM5LAotICAgIDB4NWEyOSwgMHg1ZjAxLCAweDk3YWQsIDB4NGZkZCwgMHg4 MjE3LCAweDkyZWEsIDB4NTcwMywgMHg2MzU1LAotICAgIDB4NmI2OSwgMHg3NTJiLCAweDg4ZGMs IDB4OGYxNCwgMHg3YTQyLCAweDUyZGYsIDB4NTg5MywgMHg2MTU1LAotICAgIDB4NjIwYSwgMHg2 NmFlLCAweDZiY2QsIDB4N2MzZiwgMHg4M2U5LCAweDUwMjMsIDB4NGZmOCwgMHg1MzA1LAotICAg IDB4NTQ0NiwgMHg1ODMxLCAweDU5NDksIDB4NWI5ZCwgMHg1Y2YwLCAweDVjZWYsIDB4NWQyOSwg MHg1ZTk2LAotICAgIDB4NjJiMSwgMHg2MzY3LCAweDY1M2UsIDB4NjViOSwgMHg2NzBiLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4NmNkNSwgMHg2Y2UxLCAweDcwZjksIDB4NzgzMiwgMHg3ZTJiLCAweDgwZGUsIDB4 ODJiMywgMHg4NDBjLAotICAgIDB4ODRlYywgMHg4NzAyLCAweDg5MTIsIDB4OGEyYSwgMHg4YzRh LCAweDkwYTYsIDB4OTJkMiwgMHg5OGZkLAotICAgIDB4OWNmMywgMHg5ZDZjLCAweDRlNGYsIDB4 NGVhMSwgMHg1MDhkLCAweDUyNTYsIDB4NTc0YSwgMHg1OWE4LAotICAgIDB4NWUzZCwgMHg1ZmQ4 LCAweDVmZDksIDB4NjIzZiwgMHg2NmI0LCAweDY3MWIsIDB4NjdkMCwgMHg2OGQyLAotICAgIDB4 NTE5MiwgMHg3ZDIxLCAweDgwYWEsIDB4ODFhOCwgMHg4YjAwLCAweDhjOGMsIDB4OGNiZiwgMHg5 MjdlLAotICAgIDB4OTYzMiwgMHg1NDIwLCAweDk4MmMsIDB4NTMxNywgMHg1MGQ1LCAweDUzNWMs IDB4NThhOCwgMHg2NGIyLAotICAgIDB4NjczNCwgMHg3MjY3LCAweDc3NjYsIDB4N2E0NiwgMHg5 MWU2LCAweDUyYzMsIDB4NmNhMSwgMHg2Yjg2LAotICAgIDB4NTgwMCwgMHg1ZTRjLCAweDU5NTQs IDB4NjcyYywgMHg3ZmZiLCAweDUxZTEsIDB4NzZjNiwgMHhmZmZkLAotICAgIDB4NjQ2OSwgMHg3 OGU4LCAweDliNTQsIDB4OWViYiwgMHg1N2NiLCAweDU5YjksIDB4NjYyNywgMHg2NzlhLAotICAg IDB4NmJjZSwgMHg1NGU5LCAweDY5ZDksIDB4NWU1NSwgMHg4MTljLCAweDY3OTUsIDB4OWJhYSwg MHg2N2ZlLAotICAgIDB4OWM1MiwgMHg2ODVkLCAweDRlYTYsIDB4NGZlMywgMHg1M2M4LCAweDYy YjksIDB4NjcyYiwgMHg2Y2FiLAotICAgIDB4OGZjNCwgMHg0ZmFkLCAweDdlNmQsIDB4OWViZiwg MHg0ZTA3LCAweDYxNjIsIDB4NmU4MCwgMHg2ZjJiLAotICAgIDB4ODUxMywgMHg1NDczLCAweDY3 MmEsIDB4OWI0NSwgMHg1ZGYzLCAweDdiOTUsIDB4NWNhYywgMHg1YmM2LAotICAgIDB4ODcxYywg MHg2ZTRhLCAweDg0ZDEsIDB4N2ExNCwgMHg4MTA4LCAweDU5OTksIDB4N2M4ZCwgMHg2YzExLAot ICAgIDB4NzcyMCwgMHg1MmQ5LCAweDU5MjIsIDB4NzEyMSwgMHg3MjVmLCAweDc3ZGIsIDB4OTcy NywgMHg5ZDYxLAotICAgIDB4NjkwYiwgMHg1YTdmLCAweDVhMTgsIDB4NTFhNSwgMHg1NDBkLCAw eDU0N2QsIDB4NjYwZSwgMHg3NmRmLAotICAgIDB4OGZmNywgMHg5Mjk4LCAweDljZjQsIDB4NTll YSwgMHg3MjVkLCAweDZlYzUsIDB4NTE0ZCwgMHg2OGM5LAotICAgIDB4N2RiZiwgMHg3ZGVjLCAw eDk3NjIsIDB4OWViYSwgMHg2NDc4LCAweDZhMjEsIDB4ODMwMiwgMHg1OTg0LAotICAgIDB4NWI1 ZiwgMHg2YmRiLCAweDczMWIsIDB4NzZmMiwgMHg3ZGIyLCAweDgwMTcsIDB4ODQ5OSwgMHg1MTMy LAotICAgIDB4NjcyOCwgMHg5ZWQ5LCAweDc2ZWUsIDB4Njc2MiwgMHg1MmZmLCAweDk5MDUsIDB4 NWMyNCwgMHg2MjNiLAotICAgIDB4N2M3ZSwgMHg4Y2IwLCAweDU1NGYsIDB4NjBiNiwgMHg3ZDBi LCAweDk1ODAsIDB4NTMwMSwgMHg0ZTVmLAotICAgIDB4NTFiNiwgMHg1OTFjLCAweDcyM2EsIDB4 ODAzNiwgMHg5MWNlLCAweDVmMjUsIDB4NzdlMiwgMHg1Mzg0LAotICAgIDB4NWY3OSwgMHg3ZDA0 LCAweDg1YWMsIDB4OGEzMywgMHg4ZThkLCAweDk3NTYsIDB4NjdmMywgMHg4NWFlLAotICAgIDB4 OTQ1MywgMHg2MTA5LCAweDYxMDgsIDB4NmNiOSwgMHg3NjUyLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGFlZCwg MHg4ZjM4LCAweDU1MmYsIDB4NGY1MSwgMHg1MTJhLCAweDUyYzcsIDB4NTNjYiwgMHg1YmE1LAot ICAgIDB4NWU3ZCwgMHg2MGEwLCAweDYxODIsIDB4NjNkNiwgMHg2NzA5LCAweDY3ZGEsIDB4NmU2 NywgMHg2ZDhjLAotICAgIDB4NzMzNiwgMHg3MzM3LCAweDc1MzEsIDB4Nzk1MCwgMHg4OGQ1LCAw eDhhOTgsIDB4OTA0YSwgMHg5MDkxLAotICAgIDB4OTBmNSwgMHg5NmM0LCAweDg3OGQsIDB4NTkx NSwgMHg0ZTg4LCAweDRmNTksIDB4NGUwZSwgMHg4YTg5LAotICAgIDB4OGYzZiwgMHg5ODEwLCAw eDUwYWQsIDB4NWU3YywgMHg1OTk2LCAweDViYjksIDB4NWViOCwgMHg2M2RhLAotICAgIDB4NjNm YSwgMHg2NGMxLCAweDY2ZGMsIDB4Njk0YSwgMHg2OWQ4LCAweDZkMGIsIDB4NmViNiwgMHg3MTk0 LAotICAgIDB4NzUyOCwgMHg3YWFmLCAweDdmOGEsIDB4ODAwMCwgMHg4NDQ5LCAweDg0YzksIDB4 ODk4MSwgMHg4YjIxLAotICAgIDB4OGUwYSwgMHg5MDY1LCAweDk2N2QsIDB4OTkwYSwgMHg2MTdl LCAweDYyOTEsIDB4NmIzMiwgMHhmZmZkLAotICAgIDB4NmM4MywgMHg2ZDc0LCAweDdmY2MsIDB4 N2ZmYywgMHg2ZGMwLCAweDdmODUsIDB4ODdiYSwgMHg4OGY4LAotICAgIDB4Njc2NSwgMHg4M2Ix LCAweDk4M2MsIDB4OTZmNywgMHg2ZDFiLCAweDdkNjEsIDB4ODQzZCwgMHg5MTZhLAotICAgIDB4 NGU3MSwgMHg1Mzc1LCAweDVkNTAsIDB4NmIwNCwgMHg2ZmViLCAweDg1Y2QsIDB4ODYyZCwgMHg4 OWE3LAotICAgIDB4NTIyOSwgMHg1NDBmLCAweDVjNjUsIDB4Njc0ZSwgMHg2OGE4LCAweDc0MDYs IDB4NzQ4MywgMHg3NWUyLAotICAgIDB4ODhjZiwgMHg4OGUxLCAweDkxY2MsIDB4OTZlMiwgMHg5 Njc4LCAweDVmOGIsIDB4NzM4NywgMHg3YWNiLAotICAgIDB4ODQ0ZSwgMHg2M2EwLCAweDc1NjUs IDB4NTI4OSwgMHg2ZDQxLCAweDZlOWMsIDB4NzQwOSwgMHg3NTU5LAotICAgIDB4Nzg2YiwgMHg3 YzkyLCAweDk2ODYsIDB4N2FkYywgMHg5ZjhkLCAweDRmYjYsIDB4NjE2ZSwgMHg2NWM1LAotICAg IDB4ODY1YywgMHg0ZTg2LCAweDRlYWUsIDB4NTBkYSwgMHg0ZTIxLCAweDUxY2MsIDB4NWJlZSwg MHg2NTk5LAotICAgIDB4Njg4MSwgMHg2ZGJjLCAweDczMWYsIDB4NzY0MiwgMHg3N2FkLCAweDdh MWMsIDB4N2NlNywgMHg4MjZmLAotICAgIDB4OGFkMiwgMHg5MDdjLCAweDkxY2YsIDB4OTY3NSwg MHg5ODE4LCAweDUyOWIsIDB4N2RkMSwgMHg1MDJiLAotICAgIDB4NTM5OCwgMHg2Nzk3LCAweDZk Y2IsIDB4NzFkMCwgMHg3NDMzLCAweDgxZTgsIDB4OGYyYSwgMHg5NmEzLAotICAgIDB4OWM1Nywg MHg5ZTlmLCAweDc0NjAsIDB4NTg0MSwgMHg2ZDk5LCAweDdkMmYsIDB4OTg1ZSwgMHg0ZWU0LAot ICAgIDB4NGYzNiwgMHg0ZjhiLCAweDUxYjcsIDB4NTJiMSwgMHg1ZGJhLCAweDYwMWMsIDB4NzNi MiwgMHg3OTNjLAotICAgIDB4ODJkMywgMHg5MjM0LCAweDk2YjcsIDB4OTZmNiwgMHg5NzBhLCAw eDllOTcsIDB4OWY2MiwgMHg2NmE2LAotICAgIDB4NmI3NCwgMHg1MjE3LCAweDUyYTMsIDB4NzBj OCwgMHg4OGMyLCAweDVlYzksIDB4NjA0YiwgMHg2MTkwLAotICAgIDB4NmYyMywgMHg3MTQ5LCAw eDdjM2UsIDB4N2RmNCwgMHg4MDZmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ODRlZSwgMHg5MDIzLCAweDkzMmMs IDB4NTQ0MiwgMHg5YjZmLCAweDZhZDMsIDB4NzA4OSwgMHg4Y2MyLAotICAgIDB4OGRlZiwgMHg5 NzMyLCAweDUyYjQsIDB4NWE0MSwgMHg1ZWNhLCAweDVmMDQsIDB4NjcxNywgMHg2OTdjLAotICAg IDB4Njk5NCwgMHg2ZDZhLCAweDZmMGYsIDB4NzI2MiwgMHg3MmZjLCAweDdiZWQsIDB4ODAwMSwg MHg4MDdlLAotICAgIDB4ODc0YiwgMHg5MGNlLCAweDUxNmQsIDB4OWU5MywgMHg3OTg0LCAweDgw OGIsIDB4OTMzMiwgMHg4YWQ2LAotICAgIDB4NTAyZCwgMHg1NDhjLCAweDhhNzEsIDB4NmI2YSwg MHg4Y2M0LCAweDgxMDcsIDB4NjBkMSwgMHg2N2EwLAotICAgIDB4OWRmMiwgMHg0ZTk5LCAweDRl OTgsIDB4OWMxMCwgMHg4YTZiLCAweDg1YzEsIDB4ODU2OCwgMHg2OTAwLAotICAgIDB4NmU3ZSwg MHg3ODk3LCAweDgxNTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg1ZjBj LAotICAgIDB4NGUxMCwgMHg0ZTE1LCAweDRlMmEsIDB4NGUzMSwgMHg0ZTM2LCAweDRlM2MsIDB4 NGUzZiwgMHg0ZTQyLAotICAgIDB4NGU1NiwgMHg0ZTU4LCAweDRlODIsIDB4NGU4NSwgMHg4YzZi LCAweDRlOGEsIDB4ODIxMiwgMHg1ZjBkLAotICAgIDB4NGU4ZSwgMHg0ZTllLCAweDRlOWYsIDB4 NGVhMCwgMHg0ZWEyLCAweDRlYjAsIDB4NGViMywgMHg0ZWI2LAotICAgIDB4NGVjZSwgMHg0ZWNk LCAweDRlYzQsIDB4NGVjNiwgMHg0ZWMyLCAweDRlZDcsIDB4NGVkZSwgMHg0ZWVkLAotICAgIDB4 NGVkZiwgMHg0ZWY3LCAweDRmMDksIDB4NGY1YSwgMHg0ZjMwLCAweDRmNWIsIDB4NGY1ZCwgMHg0 ZjU3LAotICAgIDB4NGY0NywgMHg0Zjc2LCAweDRmODgsIDB4NGY4ZiwgMHg0Zjk4LCAweDRmN2Is IDB4NGY2OSwgMHg0ZjcwLAotICAgIDB4NGY5MSwgMHg0ZjZmLCAweDRmODYsIDB4NGY5NiwgMHg1 MTE4LCAweDRmZDQsIDB4NGZkZiwgMHg0ZmNlLAotICAgIDB4NGZkOCwgMHg0ZmRiLCAweDRmZDEs IDB4NGZkYSwgMHg0ZmQwLCAweDRmZTQsIDB4NGZlNSwgMHg1MDFhLAotICAgIDB4NTAyOCwgMHg1 MDE0LCAweDUwMmEsIDB4NTAyNSwgMHg1MDA1LCAweDRmMWMsIDB4NGZmNiwgMHg1MDIxLAotICAg IDB4NTAyOSwgMHg1MDJjLCAweDRmZmUsIDB4NGZlZiwgMHg1MDExLCAweDUwMDYsIDB4NTA0Mywg MHg1MDQ3LAotICAgIDB4NjcwMywgMHg1MDU1LCAweDUwNTAsIDB4NTA0OCwgMHg1MDVhLCAweDUw NTYsIDB4NTA2YywgMHg1MDc4LAotICAgIDB4NTA4MCwgMHg1MDlhLCAweDUwODUsIDB4NTBiNCwg MHg1MGIyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4NTBjOSwgMHg1MGNhLCAweDUwYjMsIDB4NTBjMiwgMHg1MGQ2 LCAweDUwZGUsIDB4NTBlNSwgMHg1MGVkLAotICAgIDB4NTBlMywgMHg1MGVlLCAweDUwZjksIDB4 NTBmNSwgMHg1MTA5LCAweDUxMDEsIDB4NTEwMiwgMHg1MTE2LAotICAgIDB4NTExNSwgMHg1MTE0 LCAweDUxMWEsIDB4NTEyMSwgMHg1MTNhLCAweDUxMzcsIDB4NTEzYywgMHg1MTNiLAotICAgIDB4 NTEzZiwgMHg1MTQwLCAweDUxNTIsIDB4NTE0YywgMHg1MTU0LCAweDUxNjIsIDB4N2FmOCwgMHg1 MTY5LAotICAgIDB4NTE2YSwgMHg1MTZlLCAweDUxODAsIDB4NTE4MiwgMHg1NmQ4LCAweDUxOGMs IDB4NTE4OSwgMHg1MThmLAotICAgIDB4NTE5MSwgMHg1MTkzLCAweDUxOTUsIDB4NTE5NiwgMHg1 MWE0LCAweDUxYTYsIDB4NTFhMiwgMHg1MWE5LAotICAgIDB4NTFhYSwgMHg1MWFiLCAweDUxYjMs IDB4NTFiMSwgMHg1MWIyLCAweDUxYjAsIDB4NTFiNSwgMHg1MWJkLAotICAgIDB4NTFjNSwgMHg1 MWM5LCAweDUxZGIsIDB4NTFlMCwgMHg4NjU1LCAweDUxZTksIDB4NTFlZCwgMHhmZmZkLAotICAg IDB4NTFmMCwgMHg1MWY1LCAweDUxZmUsIDB4NTIwNCwgMHg1MjBiLCAweDUyMTQsIDB4NTIwZSwg MHg1MjI3LAotICAgIDB4NTIyYSwgMHg1MjJlLCAweDUyMzMsIDB4NTIzOSwgMHg1MjRmLCAweDUy NDQsIDB4NTI0YiwgMHg1MjRjLAotICAgIDB4NTI1ZSwgMHg1MjU0LCAweDUyNmEsIDB4NTI3NCwg MHg1MjY5LCAweDUyNzMsIDB4NTI3ZiwgMHg1MjdkLAotICAgIDB4NTI4ZCwgMHg1Mjk0LCAweDUy OTIsIDB4NTI3MSwgMHg1Mjg4LCAweDUyOTEsIDB4OGZhOCwgMHg4ZmE3LAotICAgIDB4NTJhYywg MHg1MmFkLCAweDUyYmMsIDB4NTJiNSwgMHg1MmMxLCAweDUyY2QsIDB4NTJkNywgMHg1MmRlLAot ICAgIDB4NTJlMywgMHg1MmU2LCAweDk4ZWQsIDB4NTJlMCwgMHg1MmYzLCAweDUyZjUsIDB4NTJm OCwgMHg1MmY5LAotICAgIDB4NTMwNiwgMHg1MzA4LCAweDc1MzgsIDB4NTMwZCwgMHg1MzEwLCAw eDUzMGYsIDB4NTMxNSwgMHg1MzFhLAotICAgIDB4NTMyMywgMHg1MzJmLCAweDUzMzEsIDB4NTMz MywgMHg1MzM4LCAweDUzNDAsIDB4NTM0NiwgMHg1MzQ1LAotICAgIDB4NGUxNywgMHg1MzQ5LCAw eDUzNGQsIDB4NTFkNiwgMHg1MzVlLCAweDUzNjksIDB4NTM2ZSwgMHg1OTE4LAotICAgIDB4NTM3 YiwgMHg1Mzc3LCAweDUzODIsIDB4NTM5NiwgMHg1M2EwLCAweDUzYTYsIDB4NTNhNSwgMHg1M2Fl LAotICAgIDB4NTNiMCwgMHg1M2I2LCAweDUzYzMsIDB4N2MxMiwgMHg5NmQ5LCAweDUzZGYsIDB4 NjZmYywgMHg3MWVlLAotICAgIDB4NTNlZSwgMHg1M2U4LCAweDUzZWQsIDB4NTNmYSwgMHg1NDAx LCAweDU0M2QsIDB4NTQ0MCwgMHg1NDJjLAotICAgIDB4NTQyZCwgMHg1NDNjLCAweDU0MmUsIDB4 NTQzNiwgMHg1NDI5LCAweDU0MWQsIDB4NTQ0ZSwgMHg1NDhmLAotICAgIDB4NTQ3NSwgMHg1NDhl LCAweDU0NWYsIDB4NTQ3MSwgMHg1NDc3LCAweDU0NzAsIDB4NTQ5MiwgMHg1NDdiLAotICAgIDB4 NTQ4MCwgMHg1NDc2LCAweDU0ODQsIDB4NTQ5MCwgMHg1NDg2LCAweDU0YzcsIDB4NTRhMiwgMHg1 NGI4LAotICAgIDB4NTRhNSwgMHg1NGFjLCAweDU0YzQsIDB4NTRjOCwgMHg1NGE4LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4NTRhYiwgMHg1NGMyLCAweDU0YTQsIDB4NTRiZSwgMHg1NGJjLCAweDU0ZDgsIDB4NTRl NSwgMHg1NGU2LAotICAgIDB4NTUwZiwgMHg1NTE0LCAweDU0ZmQsIDB4NTRlZSwgMHg1NGVkLCAw eDU0ZmEsIDB4NTRlMiwgMHg1NTM5LAotICAgIDB4NTU0MCwgMHg1NTYzLCAweDU1NGMsIDB4NTUy ZSwgMHg1NTVjLCAweDU1NDUsIDB4NTU1NiwgMHg1NTU3LAotICAgIDB4NTUzOCwgMHg1NTMzLCAw eDU1NWQsIDB4NTU5OSwgMHg1NTgwLCAweDU0YWYsIDB4NTU4YSwgMHg1NTlmLAotICAgIDB4NTU3 YiwgMHg1NTdlLCAweDU1OTgsIDB4NTU5ZSwgMHg1NWFlLCAweDU1N2MsIDB4NTU4MywgMHg1NWE5 LAotICAgIDB4NTU4NywgMHg1NWE4LCAweDU1ZGEsIDB4NTVjNSwgMHg1NWRmLCAweDU1YzQsIDB4 NTVkYywgMHg1NWU0LAotICAgIDB4NTVkNCwgMHg1NjE0LCAweDU1ZjcsIDB4NTYxNiwgMHg1NWZl LCAweDU1ZmQsIDB4NTYxYiwgMHg1NWY5LAotICAgIDB4NTY0ZSwgMHg1NjUwLCAweDcxZGYsIDB4 NTYzNCwgMHg1NjM2LCAweDU2MzIsIDB4NTYzOCwgMHhmZmZkLAotICAgIDB4NTY2YiwgMHg1NjY0 LCAweDU2MmYsIDB4NTY2YywgMHg1NjZhLCAweDU2ODYsIDB4NTY4MCwgMHg1NjhhLAotICAgIDB4 NTZhMCwgMHg1Njk0LCAweDU2OGYsIDB4NTZhNSwgMHg1NmFlLCAweDU2YjYsIDB4NTZiNCwgMHg1 NmMyLAotICAgIDB4NTZiYywgMHg1NmMxLCAweDU2YzMsIDB4NTZjMCwgMHg1NmM4LCAweDU2Y2Us IDB4NTZkMSwgMHg1NmQzLAotICAgIDB4NTZkNywgMHg1NmVlLCAweDU2ZjksIDB4NTcwMCwgMHg1 NmZmLCAweDU3MDQsIDB4NTcwOSwgMHg1NzA4LAotICAgIDB4NTcwYiwgMHg1NzBkLCAweDU3MTMs IDB4NTcxOCwgMHg1NzE2LCAweDU1YzcsIDB4NTcxYywgMHg1NzI2LAotICAgIDB4NTczNywgMHg1 NzM4LCAweDU3NGUsIDB4NTczYiwgMHg1NzQwLCAweDU3NGYsIDB4NTc2OSwgMHg1N2MwLAotICAg IDB4NTc4OCwgMHg1NzYxLCAweDU3N2YsIDB4NTc4OSwgMHg1NzkzLCAweDU3YTAsIDB4NTdiMywg MHg1N2E0LAotICAgIDB4NTdhYSwgMHg1N2IwLCAweDU3YzMsIDB4NTdjNiwgMHg1N2Q0LCAweDU3 ZDIsIDB4NTdkMywgMHg1ODBhLAotICAgIDB4NTdkNiwgMHg1N2UzLCAweDU4MGIsIDB4NTgxOSwg MHg1ODFkLCAweDU4NzIsIDB4NTgyMSwgMHg1ODYyLAotICAgIDB4NTg0YiwgMHg1ODcwLCAweDZi YzAsIDB4NTg1MiwgMHg1ODNkLCAweDU4NzksIDB4NTg4NSwgMHg1OGI5LAotICAgIDB4NTg5Ziwg MHg1OGFiLCAweDU4YmEsIDB4NThkZSwgMHg1OGJiLCAweDU4YjgsIDB4NThhZSwgMHg1OGM1LAot ICAgIDB4NThkMywgMHg1OGQxLCAweDU4ZDcsIDB4NThkOSwgMHg1OGQ4LCAweDU4ZTUsIDB4NThk YywgMHg1OGU0LAotICAgIDB4NThkZiwgMHg1OGVmLCAweDU4ZmEsIDB4NThmOSwgMHg1OGZiLCAw eDU4ZmMsIDB4NThmZCwgMHg1OTAyLAotICAgIDB4NTkwYSwgMHg1OTEwLCAweDU5MWIsIDB4Njhh NiwgMHg1OTI1LCAweDU5MmMsIDB4NTkyZCwgMHg1OTMyLAotICAgIDB4NTkzOCwgMHg1OTNlLCAw eDdhZDIsIDB4NTk1NSwgMHg1OTUwLCAweDU5NGUsIDB4NTk1YSwgMHg1OTU4LAotICAgIDB4NTk2 MiwgMHg1OTYwLCAweDU5NjcsIDB4NTk2YywgMHg1OTY5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4NTk3OCwgMHg1 OTgxLCAweDU5OWQsIDB4NGY1ZSwgMHg0ZmFiLCAweDU5YTMsIDB4NTliMiwgMHg1OWM2LAotICAg IDB4NTllOCwgMHg1OWRjLCAweDU5OGQsIDB4NTlkOSwgMHg1OWRhLCAweDVhMjUsIDB4NWExZiwg MHg1YTExLAotICAgIDB4NWExYywgMHg1YTA5LCAweDVhMWEsIDB4NWE0MCwgMHg1YTZjLCAweDVh NDksIDB4NWEzNSwgMHg1YTM2LAotICAgIDB4NWE2MiwgMHg1YTZhLCAweDVhOWEsIDB4NWFiYywg MHg1YWJlLCAweDVhY2IsIDB4NWFjMiwgMHg1YWJkLAotICAgIDB4NWFlMywgMHg1YWQ3LCAweDVh ZTYsIDB4NWFlOSwgMHg1YWQ2LCAweDVhZmEsIDB4NWFmYiwgMHg1YjBjLAotICAgIDB4NWIwYiwg MHg1YjE2LCAweDViMzIsIDB4NWFkMCwgMHg1YjJhLCAweDViMzYsIDB4NWIzZSwgMHg1YjQzLAot ICAgIDB4NWI0NSwgMHg1YjQwLCAweDViNTEsIDB4NWI1NSwgMHg1YjVhLCAweDViNWIsIDB4NWI2 NSwgMHg1YjY5LAotICAgIDB4NWI3MCwgMHg1YjczLCAweDViNzUsIDB4NWI3OCwgMHg2NTg4LCAw eDViN2EsIDB4NWI4MCwgMHhmZmZkLAotICAgIDB4NWI4MywgMHg1YmE2LCAweDViYjgsIDB4NWJj MywgMHg1YmM3LCAweDViYzksIDB4NWJkNCwgMHg1YmQwLAotICAgIDB4NWJlNCwgMHg1YmU2LCAw eDViZTIsIDB4NWJkZSwgMHg1YmU1LCAweDViZWIsIDB4NWJmMCwgMHg1YmY2LAotICAgIDB4NWJm MywgMHg1YzA1LCAweDVjMDcsIDB4NWMwOCwgMHg1YzBkLCAweDVjMTMsIDB4NWMyMCwgMHg1YzIy LAotICAgIDB4NWMyOCwgMHg1YzM4LCAweDVjMzksIDB4NWM0MSwgMHg1YzQ2LCAweDVjNGUsIDB4 NWM1MywgMHg1YzUwLAotICAgIDB4NWM0ZiwgMHg1YjcxLCAweDVjNmMsIDB4NWM2ZSwgMHg0ZTYy LCAweDVjNzYsIDB4NWM3OSwgMHg1YzhjLAotICAgIDB4NWM5MSwgMHg1Yzk0LCAweDU5OWIsIDB4 NWNhYiwgMHg1Y2JiLCAweDVjYjYsIDB4NWNiYywgMHg1Y2I3LAotICAgIDB4NWNjNSwgMHg1Y2Jl LCAweDVjYzcsIDB4NWNkOSwgMHg1Y2U5LCAweDVjZmQsIDB4NWNmYSwgMHg1Y2VkLAotICAgIDB4 NWQ4YywgMHg1Y2VhLCAweDVkMGIsIDB4NWQxNSwgMHg1ZDE3LCAweDVkNWMsIDB4NWQxZiwgMHg1 ZDFiLAotICAgIDB4NWQxMSwgMHg1ZDE0LCAweDVkMjIsIDB4NWQxYSwgMHg1ZDE5LCAweDVkMTgs IDB4NWQ0YywgMHg1ZDUyLAotICAgIDB4NWQ0ZSwgMHg1ZDRiLCAweDVkNmMsIDB4NWQ3MywgMHg1 ZDc2LCAweDVkODcsIDB4NWQ4NCwgMHg1ZDgyLAotICAgIDB4NWRhMiwgMHg1ZDlkLCAweDVkYWMs IDB4NWRhZSwgMHg1ZGJkLCAweDVkOTAsIDB4NWRiNywgMHg1ZGJjLAotICAgIDB4NWRjOSwgMHg1 ZGNkLCAweDVkZDMsIDB4NWRkMiwgMHg1ZGQ2LCAweDVkZGIsIDB4NWRlYiwgMHg1ZGYyLAotICAg IDB4NWRmNSwgMHg1ZTBiLCAweDVlMWEsIDB4NWUxOSwgMHg1ZTExLCAweDVlMWIsIDB4NWUzNiwg MHg1ZTM3LAotICAgIDB4NWU0NCwgMHg1ZTQzLCAweDVlNDAsIDB4NWU0ZSwgMHg1ZTU3LCAweDVl NTQsIDB4NWU1ZiwgMHg1ZTYyLAotICAgIDB4NWU2NCwgMHg1ZTQ3LCAweDVlNzUsIDB4NWU3Niwg MHg1ZTdhLCAweDllYmMsIDB4NWU3ZiwgMHg1ZWEwLAotICAgIDB4NWVjMSwgMHg1ZWMyLCAweDVl YzgsIDB4NWVkMCwgMHg1ZWNmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4NWVkNiwgMHg1ZWUzLCAweDVlZGQsIDB4 NWVkYSwgMHg1ZWRiLCAweDVlZTIsIDB4NWVlMSwgMHg1ZWU4LAotICAgIDB4NWVlOSwgMHg1ZWVj LCAweDVlZjEsIDB4NWVmMywgMHg1ZWYwLCAweDVlZjQsIDB4NWVmOCwgMHg1ZWZlLAotICAgIDB4 NWYwMywgMHg1ZjA5LCAweDVmNWQsIDB4NWY1YywgMHg1ZjBiLCAweDVmMTEsIDB4NWYxNiwgMHg1 ZjI5LAotICAgIDB4NWYyZCwgMHg1ZjM4LCAweDVmNDEsIDB4NWY0OCwgMHg1ZjRjLCAweDVmNGUs IDB4NWYyZiwgMHg1ZjUxLAotICAgIDB4NWY1NiwgMHg1ZjU3LCAweDVmNTksIDB4NWY2MSwgMHg1 ZjZkLCAweDVmNzMsIDB4NWY3NywgMHg1ZjgzLAotICAgIDB4NWY4MiwgMHg1ZjdmLCAweDVmOGEs IDB4NWY4OCwgMHg1ZjkxLCAweDVmODcsIDB4NWY5ZSwgMHg1Zjk5LAotICAgIDB4NWY5OCwgMHg1 ZmEwLCAweDVmYTgsIDB4NWZhZCwgMHg1ZmJjLCAweDVmZDYsIDB4NWZmYiwgMHg1ZmU0LAotICAg IDB4NWZmOCwgMHg1ZmYxLCAweDVmZGQsIDB4NjBiMywgMHg1ZmZmLCAweDYwMjEsIDB4NjA2MCwg MHhmZmZkLAotICAgIDB4NjAxOSwgMHg2MDEwLCAweDYwMjksIDB4NjAwZSwgMHg2MDMxLCAweDYw MWIsIDB4NjAxNSwgMHg2MDJiLAotICAgIDB4NjAyNiwgMHg2MDBmLCAweDYwM2EsIDB4NjA1YSwg MHg2MDQxLCAweDYwNmEsIDB4NjA3NywgMHg2MDVmLAotICAgIDB4NjA0YSwgMHg2MDQ2LCAweDYw NGQsIDB4NjA2MywgMHg2MDQzLCAweDYwNjQsIDB4NjA0MiwgMHg2MDZjLAotICAgIDB4NjA2Yiwg MHg2MDU5LCAweDYwODEsIDB4NjA4ZCwgMHg2MGU3LCAweDYwODMsIDB4NjA5YSwgMHg2MDg0LAot ICAgIDB4NjA5YiwgMHg2MDk2LCAweDYwOTcsIDB4NjA5MiwgMHg2MGE3LCAweDYwOGIsIDB4NjBl MSwgMHg2MGI4LAotICAgIDB4NjBlMCwgMHg2MGQzLCAweDYwYjQsIDB4NWZmMCwgMHg2MGJkLCAw eDYwYzYsIDB4NjBiNSwgMHg2MGQ4LAotICAgIDB4NjE0ZCwgMHg2MTE1LCAweDYxMDYsIDB4NjBm NiwgMHg2MGY3LCAweDYxMDAsIDB4NjBmNCwgMHg2MGZhLAotICAgIDB4NjEwMywgMHg2MTIxLCAw eDYwZmIsIDB4NjBmMSwgMHg2MTBkLCAweDYxMGUsIDB4NjE0NywgMHg2MTNlLAotICAgIDB4NjEy OCwgMHg2MTI3LCAweDYxNGEsIDB4NjEzZiwgMHg2MTNjLCAweDYxMmMsIDB4NjEzNCwgMHg2MTNk LAotICAgIDB4NjE0MiwgMHg2MTQ0LCAweDYxNzMsIDB4NjE3NywgMHg2MTU4LCAweDYxNTksIDB4 NjE1YSwgMHg2MTZiLAotICAgIDB4NjE3NCwgMHg2MTZmLCAweDYxNjUsIDB4NjE3MSwgMHg2MTVm LCAweDYxNWQsIDB4NjE1MywgMHg2MTc1LAotICAgIDB4NjE5OSwgMHg2MTk2LCAweDYxODcsIDB4 NjFhYywgMHg2MTk0LCAweDYxOWEsIDB4NjE4YSwgMHg2MTkxLAotICAgIDB4NjFhYiwgMHg2MWFl LCAweDYxY2MsIDB4NjFjYSwgMHg2MWM5LCAweDYxZjcsIDB4NjFjOCwgMHg2MWMzLAotICAgIDB4 NjFjNiwgMHg2MWJhLCAweDYxY2IsIDB4N2Y3OSwgMHg2MWNkLCAweDYxZTYsIDB4NjFlMywgMHg2 MWY2LAotICAgIDB4NjFmYSwgMHg2MWY0LCAweDYxZmYsIDB4NjFmZCwgMHg2MWZjLCAweDYxZmUs IDB4NjIwMCwgMHg2MjA4LAotICAgIDB4NjIwOSwgMHg2MjBkLCAweDYyMGMsIDB4NjIxNCwgMHg2 MjFiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4NjIxZSwgMHg2MjIxLCAweDYyMmEsIDB4NjIyZSwgMHg2MjMwLCAw eDYyMzIsIDB4NjIzMywgMHg2MjQxLAotICAgIDB4NjI0ZSwgMHg2MjVlLCAweDYyNjMsIDB4NjI1 YiwgMHg2MjYwLCAweDYyNjgsIDB4NjI3YywgMHg2MjgyLAotICAgIDB4NjI4OSwgMHg2MjdlLCAw eDYyOTIsIDB4NjI5MywgMHg2Mjk2LCAweDYyZDQsIDB4NjI4MywgMHg2Mjk0LAotICAgIDB4NjJk NywgMHg2MmQxLCAweDYyYmIsIDB4NjJjZiwgMHg2MmZmLCAweDYyYzYsIDB4NjRkNCwgMHg2MmM4 LAotICAgIDB4NjJkYywgMHg2MmNjLCAweDYyY2EsIDB4NjJjMiwgMHg2MmM3LCAweDYyOWIsIDB4 NjJjOSwgMHg2MzBjLAotICAgIDB4NjJlZSwgMHg2MmYxLCAweDYzMjcsIDB4NjMwMiwgMHg2MzA4 LCAweDYyZWYsIDB4NjJmNSwgMHg2MzUwLAotICAgIDB4NjMzZSwgMHg2MzRkLCAweDY0MWMsIDB4 NjM0ZiwgMHg2Mzk2LCAweDYzOGUsIDB4NjM4MCwgMHg2M2FiLAotICAgIDB4NjM3NiwgMHg2M2Ez LCAweDYzOGYsIDB4NjM4OSwgMHg2MzlmLCAweDYzYjUsIDB4NjM2YiwgMHhmZmZkLAotICAgIDB4 NjM2OSwgMHg2M2JlLCAweDYzZTksIDB4NjNjMCwgMHg2M2M2LCAweDYzZTMsIDB4NjNjOSwgMHg2 M2QyLAotICAgIDB4NjNmNiwgMHg2M2M0LCAweDY0MTYsIDB4NjQzNCwgMHg2NDA2LCAweDY0MTMs IDB4NjQyNiwgMHg2NDM2LAotICAgIDB4NjUxZCwgMHg2NDE3LCAweDY0MjgsIDB4NjQwZiwgMHg2 NDY3LCAweDY0NmYsIDB4NjQ3NiwgMHg2NDRlLAotICAgIDB4NjUyYSwgMHg2NDk1LCAweDY0OTMs IDB4NjRhNSwgMHg2NGE5LCAweDY0ODgsIDB4NjRiYywgMHg2NGRhLAotICAgIDB4NjRkMiwgMHg2 NGM1LCAweDY0YzcsIDB4NjRiYiwgMHg2NGQ4LCAweDY0YzIsIDB4NjRmMSwgMHg2NGU3LAotICAg IDB4ODIwOSwgMHg2NGUwLCAweDY0ZTEsIDB4NjJhYywgMHg2NGUzLCAweDY0ZWYsIDB4NjUyYywg MHg2NGY2LAotICAgIDB4NjRmNCwgMHg2NGYyLCAweDY0ZmEsIDB4NjUwMCwgMHg2NGZkLCAweDY1 MTgsIDB4NjUxYywgMHg2NTA1LAotICAgIDB4NjUyNCwgMHg2NTIzLCAweDY1MmIsIDB4NjUzNCwg MHg2NTM1LCAweDY1MzcsIDB4NjUzNiwgMHg2NTM4LAotICAgIDB4NzU0YiwgMHg2NTQ4LCAweDY1 NTYsIDB4NjU1NSwgMHg2NTRkLCAweDY1NTgsIDB4NjU1ZSwgMHg2NTVkLAotICAgIDB4NjU3Miwg MHg2NTc4LCAweDY1ODIsIDB4NjU4MywgMHg4YjhhLCAweDY1OWIsIDB4NjU5ZiwgMHg2NWFiLAot ICAgIDB4NjViNywgMHg2NWMzLCAweDY1YzYsIDB4NjVjMSwgMHg2NWM0LCAweDY1Y2MsIDB4NjVk MiwgMHg2NWRiLAotICAgIDB4NjVkOSwgMHg2NWUwLCAweDY1ZTEsIDB4NjVmMSwgMHg2NzcyLCAw eDY2MGEsIDB4NjYwMywgMHg2NWZiLAotICAgIDB4Njc3MywgMHg2NjM1LCAweDY2MzYsIDB4NjYz NCwgMHg2NjFjLCAweDY2NGYsIDB4NjY0NCwgMHg2NjQ5LAotICAgIDB4NjY0MSwgMHg2NjVlLCAw eDY2NWQsIDB4NjY2NCwgMHg2NjY3LCAweDY2NjgsIDB4NjY1ZiwgMHg2NjYyLAotICAgIDB4NjY3 MCwgMHg2NjgzLCAweDY2ODgsIDB4NjY4ZSwgMHg2Njg5LCAweDY2ODQsIDB4NjY5OCwgMHg2Njlk LAotICAgIDB4NjZjMSwgMHg2NmI5LCAweDY2YzksIDB4NjZiZSwgMHg2NmJjLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4NjZjNCwgMHg2NmI4LCAweDY2ZDYsIDB4NjZkYSwgMHg2NmUwLCAweDY2M2YsIDB4NjZlNiwg MHg2NmU5LAotICAgIDB4NjZmMCwgMHg2NmY1LCAweDY2ZjcsIDB4NjcwZiwgMHg2NzE2LCAweDY3 MWUsIDB4NjcyNiwgMHg2NzI3LAotICAgIDB4OTczOCwgMHg2NzJlLCAweDY3M2YsIDB4NjczNiwg MHg2NzQxLCAweDY3MzgsIDB4NjczNywgMHg2NzQ2LAotICAgIDB4Njc1ZSwgMHg2NzYwLCAweDY3 NTksIDB4Njc2MywgMHg2NzY0LCAweDY3ODksIDB4Njc3MCwgMHg2N2E5LAotICAgIDB4Njc3Yywg MHg2NzZhLCAweDY3OGMsIDB4Njc4YiwgMHg2N2E2LCAweDY3YTEsIDB4Njc4NSwgMHg2N2I3LAot ICAgIDB4NjdlZiwgMHg2N2I0LCAweDY3ZWMsIDB4NjdiMywgMHg2N2U5LCAweDY3YjgsIDB4Njdl NCwgMHg2N2RlLAotICAgIDB4NjdkZCwgMHg2N2UyLCAweDY3ZWUsIDB4NjdiOSwgMHg2N2NlLCAw eDY3YzYsIDB4NjdlNywgMHg2YTljLAotICAgIDB4NjgxZSwgMHg2ODQ2LCAweDY4MjksIDB4Njg0 MCwgMHg2ODRkLCAweDY4MzIsIDB4Njg0ZSwgMHhmZmZkLAotICAgIDB4NjhiMywgMHg2ODJiLCAw eDY4NTksIDB4Njg2MywgMHg2ODc3LCAweDY4N2YsIDB4Njg5ZiwgMHg2ODhmLAotICAgIDB4Njhh ZCwgMHg2ODk0LCAweDY4OWQsIDB4Njg5YiwgMHg2ODgzLCAweDZhYWUsIDB4NjhiOSwgMHg2ODc0 LAotICAgIDB4NjhiNSwgMHg2OGEwLCAweDY4YmEsIDB4NjkwZiwgMHg2ODhkLCAweDY4N2UsIDB4 NjkwMSwgMHg2OGNhLAotICAgIDB4NjkwOCwgMHg2OGQ4LCAweDY5MjIsIDB4NjkyNiwgMHg2OGUx LCAweDY5MGMsIDB4NjhjZCwgMHg2OGQ0LAotICAgIDB4NjhlNywgMHg2OGQ1LCAweDY5MzYsIDB4 NjkxMiwgMHg2OTA0LCAweDY4ZDcsIDB4NjhlMywgMHg2OTI1LAotICAgIDB4NjhmOSwgMHg2OGUw LCAweDY4ZWYsIDB4NjkyOCwgMHg2OTJhLCAweDY5MWEsIDB4NjkyMywgMHg2OTIxLAotICAgIDB4 NjhjNiwgMHg2OTc5LCAweDY5NzcsIDB4Njk1YywgMHg2OTc4LCAweDY5NmIsIDB4Njk1NCwgMHg2 OTdlLAotICAgIDB4Njk2ZSwgMHg2OTM5LCAweDY5NzQsIDB4NjkzZCwgMHg2OTU5LCAweDY5MzAs IDB4Njk2MSwgMHg2OTVlLAotICAgIDB4Njk1ZCwgMHg2OTgxLCAweDY5NmEsIDB4NjliMiwgMHg2 OWFlLCAweDY5ZDAsIDB4NjliZiwgMHg2OWMxLAotICAgIDB4NjlkMywgMHg2OWJlLCAweDY5Y2Us IDB4NWJlOCwgMHg2OWNhLCAweDY5ZGQsIDB4NjliYiwgMHg2OWMzLAotICAgIDB4NjlhNywgMHg2 YTJlLCAweDY5OTEsIDB4NjlhMCwgMHg2OTljLCAweDY5OTUsIDB4NjliNCwgMHg2OWRlLAotICAg IDB4NjllOCwgMHg2YTAyLCAweDZhMWIsIDB4NjlmZiwgMHg2YjBhLCAweDY5ZjksIDB4NjlmMiwg MHg2OWU3LAotICAgIDB4NmEwNSwgMHg2OWIxLCAweDZhMWUsIDB4NjllZCwgMHg2YTE0LCAweDY5 ZWIsIDB4NmEwYSwgMHg2YTEyLAotICAgIDB4NmFjMSwgMHg2YTIzLCAweDZhMTMsIDB4NmE0NCwg MHg2YTBjLCAweDZhNzIsIDB4NmEzNiwgMHg2YTc4LAotICAgIDB4NmE0NywgMHg2YTYyLCAweDZh NTksIDB4NmE2NiwgMHg2YTQ4LCAweDZhMzgsIDB4NmEyMiwgMHg2YTkwLAotICAgIDB4NmE4ZCwg MHg2YWEwLCAweDZhODQsIDB4NmFhMiwgMHg2YWEzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4NmE5NywgMHg4NjE3 LCAweDZhYmIsIDB4NmFjMywgMHg2YWMyLCAweDZhYjgsIDB4NmFiMywgMHg2YWFjLAotICAgIDB4 NmFkZSwgMHg2YWQxLCAweDZhZGYsIDB4NmFhYSwgMHg2YWRhLCAweDZhZWEsIDB4NmFmYiwgMHg2 YjA1LAotICAgIDB4ODYxNiwgMHg2YWZhLCAweDZiMTIsIDB4NmIxNiwgMHg5YjMxLCAweDZiMWYs IDB4NmIzOCwgMHg2YjM3LAotICAgIDB4NzZkYywgMHg2YjM5LCAweDk4ZWUsIDB4NmI0NywgMHg2 YjQzLCAweDZiNDksIDB4NmI1MCwgMHg2YjU5LAotICAgIDB4NmI1NCwgMHg2YjViLCAweDZiNWYs IDB4NmI2MSwgMHg2Yjc4LCAweDZiNzksIDB4NmI3ZiwgMHg2YjgwLAotICAgIDB4NmI4NCwgMHg2 YjgzLCAweDZiOGQsIDB4NmI5OCwgMHg2Yjk1LCAweDZiOWUsIDB4NmJhNCwgMHg2YmFhLAotICAg IDB4NmJhYiwgMHg2YmFmLCAweDZiYjIsIDB4NmJiMSwgMHg2YmIzLCAweDZiYjcsIDB4NmJiYywg MHg2YmM2LAotICAgIDB4NmJjYiwgMHg2YmQzLCAweDZiZGYsIDB4NmJlYywgMHg2YmViLCAweDZi ZjMsIDB4NmJlZiwgMHhmZmZkLAotICAgIDB4OWViZSwgMHg2YzA4LCAweDZjMTMsIDB4NmMxNCwg MHg2YzFiLCAweDZjMjQsIDB4NmMyMywgMHg2YzVlLAotICAgIDB4NmM1NSwgMHg2YzYyLCAweDZj NmEsIDB4NmM4MiwgMHg2YzhkLCAweDZjOWEsIDB4NmM4MSwgMHg2YzliLAotICAgIDB4NmM3ZSwg MHg2YzY4LCAweDZjNzMsIDB4NmM5MiwgMHg2YzkwLCAweDZjYzQsIDB4NmNmMSwgMHg2Y2QzLAot ICAgIDB4NmNiZCwgMHg2Y2Q3LCAweDZjYzUsIDB4NmNkZCwgMHg2Y2FlLCAweDZjYjEsIDB4NmNi ZSwgMHg2Y2JhLAotICAgIDB4NmNkYiwgMHg2Y2VmLCAweDZjZDksIDB4NmNlYSwgMHg2ZDFmLCAw eDg4NGQsIDB4NmQzNiwgMHg2ZDJiLAotICAgIDB4NmQzZCwgMHg2ZDM4LCAweDZkMTksIDB4NmQz NSwgMHg2ZDMzLCAweDZkMTIsIDB4NmQwYywgMHg2ZDYzLAotICAgIDB4NmQ5MywgMHg2ZDY0LCAw eDZkNWEsIDB4NmQ3OSwgMHg2ZDU5LCAweDZkOGUsIDB4NmQ5NSwgMHg2ZmU0LAotICAgIDB4NmQ4 NSwgMHg2ZGY5LCAweDZlMTUsIDB4NmUwYSwgMHg2ZGI1LCAweDZkYzcsIDB4NmRlNiwgMHg2ZGI4 LAotICAgIDB4NmRjNiwgMHg2ZGVjLCAweDZkZGUsIDB4NmRjYywgMHg2ZGU4LCAweDZkZDIsIDB4 NmRjNSwgMHg2ZGZhLAotICAgIDB4NmRkOSwgMHg2ZGU0LCAweDZkZDUsIDB4NmRlYSwgMHg2ZGVl LCAweDZlMmQsIDB4NmU2ZSwgMHg2ZTJlLAotICAgIDB4NmUxOSwgMHg2ZTcyLCAweDZlNWYsIDB4 NmUzZSwgMHg2ZTIzLCAweDZlNmIsIDB4NmUyYiwgMHg2ZTc2LAotICAgIDB4NmU0ZCwgMHg2ZTFm LCAweDZlNDMsIDB4NmUzYSwgMHg2ZTRlLCAweDZlMjQsIDB4NmVmZiwgMHg2ZTFkLAotICAgIDB4 NmUzOCwgMHg2ZTgyLCAweDZlYWEsIDB4NmU5OCwgMHg2ZWM5LCAweDZlYjcsIDB4NmVkMywgMHg2 ZWJkLAotICAgIDB4NmVhZiwgMHg2ZWM0LCAweDZlYjIsIDB4NmVkNCwgMHg2ZWQ1LCAweDZlOGYs IDB4NmVhNSwgMHg2ZWMyLAotICAgIDB4NmU5ZiwgMHg2ZjQxLCAweDZmMTEsIDB4NzA0YywgMHg2 ZWVjLCAweDZlZjgsIDB4NmVmZSwgMHg2ZjNmLAotICAgIDB4NmVmMiwgMHg2ZjMxLCAweDZlZWYs IDB4NmYzMiwgMHg2ZWNjCi19OwotCi1zdGF0aWMgVVNIT1JUICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU2hpZnQtSklTIHRvIFVuaWNvZGUgKi8KLXNqdV9lMDQwW10gPSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAweGUwNDAgdGhydSAweGVhYTQgKi8KLSAgICAweDZmM2UsIDB4 NmYxMywgMHg2ZWY3LCAweDZmODYsIDB4NmY3YSwgMHg2Zjc4LCAweDZmODEsIDB4NmY4MCwKLSAg ICAweDZmNmYsIDB4NmY1YiwgMHg2ZmYzLCAweDZmNmQsIDB4NmY4MiwgMHg2ZjdjLCAweDZmNTgs IDB4NmY4ZSwKLSAgICAweDZmOTEsIDB4NmZjMiwgMHg2ZjY2LCAweDZmYjMsIDB4NmZhMywgMHg2 ZmExLCAweDZmYTQsIDB4NmZiOSwKLSAgICAweDZmYzYsIDB4NmZhYSwgMHg2ZmRmLCAweDZmZDUs IDB4NmZlYywgMHg2ZmQ0LCAweDZmZDgsIDB4NmZmMSwKLSAgICAweDZmZWUsIDB4NmZkYiwgMHg3 MDA5LCAweDcwMGIsIDB4NmZmYSwgMHg3MDExLCAweDcwMDEsIDB4NzAwZiwKLSAgICAweDZmZmUs IDB4NzAxYiwgMHg3MDFhLCAweDZmNzQsIDB4NzAxZCwgMHg3MDE4LCAweDcwMWYsIDB4NzAzMCwK LSAgICAweDcwM2UsIDB4NzAzMiwgMHg3MDUxLCAweDcwNjMsIDB4NzA5OSwgMHg3MDkyLCAweDcw YWYsIDB4NzBmMSwKLSAgICAweDcwYWMsIDB4NzBiOCwgMHg3MGIzLCAweDcwYWUsIDB4NzBkZiwg MHg3MGNiLCAweDcwZGQsIDB4ZmZmZCwKLSAgICAweDcwZDksIDB4NzEwOSwgMHg3MGZkLCAweDcx MWMsIDB4NzExOSwgMHg3MTY1LCAweDcxNTUsIDB4NzE4OCwKLSAgICAweDcxNjYsIDB4NzE2Miwg MHg3MTRjLCAweDcxNTYsIDB4NzE2YywgMHg3MThmLCAweDcxZmIsIDB4NzE4NCwKLSAgICAweDcx OTUsIDB4NzFhOCwgMHg3MWFjLCAweDcxZDcsIDB4NzFiOSwgMHg3MWJlLCAweDcxZDIsIDB4NzFj OSwKLSAgICAweDcxZDQsIDB4NzFjZSwgMHg3MWUwLCAweDcxZWMsIDB4NzFlNywgMHg3MWY1LCAw eDcxZmMsIDB4NzFmOSwKLSAgICAweDcxZmYsIDB4NzIwZCwgMHg3MjEwLCAweDcyMWIsIDB4NzIy OCwgMHg3MjJkLCAweDcyMmMsIDB4NzIzMCwKLSAgICAweDcyMzIsIDB4NzIzYiwgMHg3MjNjLCAw eDcyM2YsIDB4NzI0MCwgMHg3MjQ2LCAweDcyNGIsIDB4NzI1OCwKLSAgICAweDcyNzQsIDB4NzI3 ZSwgMHg3MjgyLCAweDcyODEsIDB4NzI4NywgMHg3MjkyLCAweDcyOTYsIDB4NzJhMiwKLSAgICAw eDcyYTcsIDB4NzJiOSwgMHg3MmIyLCAweDcyYzMsIDB4NzJjNiwgMHg3MmM0LCAweDcyY2UsIDB4 NzJkMiwKLSAgICAweDcyZTIsIDB4NzJlMCwgMHg3MmUxLCAweDcyZjksIDB4NzJmNywgMHg1MDBm LCAweDczMTcsIDB4NzMwYSwKLSAgICAweDczMWMsIDB4NzMxNiwgMHg3MzFkLCAweDczMzQsIDB4 NzMyZiwgMHg3MzI5LCAweDczMjUsIDB4NzMzZSwKLSAgICAweDczNGUsIDB4NzM0ZiwgMHg5ZWQ4 LCAweDczNTcsIDB4NzM2YSwgMHg3MzY4LCAweDczNzAsIDB4NzM3OCwKLSAgICAweDczNzUsIDB4 NzM3YiwgMHg3MzdhLCAweDczYzgsIDB4NzNiMywgMHg3M2NlLCAweDczYmIsIDB4NzNjMCwKLSAg ICAweDczZTUsIDB4NzNlZSwgMHg3M2RlLCAweDc0YTIsIDB4NzQwNSwgMHg3NDZmLCAweDc0MjUs IDB4NzNmOCwKLSAgICAweDc0MzIsIDB4NzQzYSwgMHg3NDU1LCAweDc0M2YsIDB4NzQ1ZiwgMHg3 NDU5LCAweDc0NDEsIDB4NzQ1YywKLSAgICAweDc0NjksIDB4NzQ3MCwgMHg3NDYzLCAweDc0NmEs IDB4NzQ3NiwgMHg3NDdlLCAweDc0OGIsIDB4NzQ5ZSwKLSAgICAweDc0YTcsIDB4NzRjYSwgMHg3 NGNmLCAweDc0ZDQsIDB4NzNmMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK LSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweDc0ZTAsIDB4NzRlMywgMHg3NGU3LCAw eDc0ZTksIDB4NzRlZSwgMHg3NGYyLCAweDc0ZjAsIDB4NzRmMSwKLSAgICAweDc0ZjgsIDB4NzRm NywgMHg3NTA0LCAweDc1MDMsIDB4NzUwNSwgMHg3NTBjLCAweDc1MGUsIDB4NzUwZCwKLSAgICAw eDc1MTUsIDB4NzUxMywgMHg3NTFlLCAweDc1MjYsIDB4NzUyYywgMHg3NTNjLCAweDc1NDQsIDB4 NzU0ZCwKLSAgICAweDc1NGEsIDB4NzU0OSwgMHg3NTViLCAweDc1NDYsIDB4NzU1YSwgMHg3NTY5 LCAweDc1NjQsIDB4NzU2NywKLSAgICAweDc1NmIsIDB4NzU2ZCwgMHg3NTc4LCAweDc1NzYsIDB4 NzU4NiwgMHg3NTg3LCAweDc1NzQsIDB4NzU4YSwKLSAgICAweDc1ODksIDB4NzU4MiwgMHg3NTk0 LCAweDc1OWEsIDB4NzU5ZCwgMHg3NWE1LCAweDc1YTMsIDB4NzVjMiwKLSAgICAweDc1YjMsIDB4 NzVjMywgMHg3NWI1LCAweDc1YmQsIDB4NzViOCwgMHg3NWJjLCAweDc1YjEsIDB4NzVjZCwKLSAg ICAweDc1Y2EsIDB4NzVkMiwgMHg3NWQ5LCAweDc1ZTMsIDB4NzVkZSwgMHg3NWZlLCAweDc1ZmYs IDB4ZmZmZCwKLSAgICAweDc1ZmMsIDB4NzYwMSwgMHg3NWYwLCAweDc1ZmEsIDB4NzVmMiwgMHg3 NWYzLCAweDc2MGIsIDB4NzYwZCwKLSAgICAweDc2MDksIDB4NzYxZiwgMHg3NjI3LCAweDc2MjAs IDB4NzYyMSwgMHg3NjIyLCAweDc2MjQsIDB4NzYzNCwKLSAgICAweDc2MzAsIDB4NzYzYiwgMHg3 NjQ3LCAweDc2NDgsIDB4NzY0NiwgMHg3NjVjLCAweDc2NTgsIDB4NzY2MSwKLSAgICAweDc2NjIs IDB4NzY2OCwgMHg3NjY5LCAweDc2NmEsIDB4NzY2NywgMHg3NjZjLCAweDc2NzAsIDB4NzY3MiwK LSAgICAweDc2NzYsIDB4NzY3OCwgMHg3NjdjLCAweDc2ODAsIDB4NzY4MywgMHg3Njg4LCAweDc2 OGIsIDB4NzY4ZSwKLSAgICAweDc2OTYsIDB4NzY5MywgMHg3Njk5LCAweDc2OWEsIDB4NzZiMCwg MHg3NmI0LCAweDc2YjgsIDB4NzZiOSwKLSAgICAweDc2YmEsIDB4NzZjMiwgMHg3NmNkLCAweDc2 ZDYsIDB4NzZkMiwgMHg3NmRlLCAweDc2ZTEsIDB4NzZlNSwKLSAgICAweDc2ZTcsIDB4NzZlYSwg MHg4NjJmLCAweDc2ZmIsIDB4NzcwOCwgMHg3NzA3LCAweDc3MDQsIDB4NzcyOSwKLSAgICAweDc3 MjQsIDB4NzcxZSwgMHg3NzI1LCAweDc3MjYsIDB4NzcxYiwgMHg3NzM3LCAweDc3MzgsIDB4Nzc0 NywKLSAgICAweDc3NWEsIDB4Nzc2OCwgMHg3NzZiLCAweDc3NWIsIDB4Nzc2NSwgMHg3NzdmLCAw eDc3N2UsIDB4Nzc3OSwKLSAgICAweDc3OGUsIDB4Nzc4YiwgMHg3NzkxLCAweDc3YTAsIDB4Nzc5 ZSwgMHg3N2IwLCAweDc3YjYsIDB4NzdiOSwKLSAgICAweDc3YmYsIDB4NzdiYywgMHg3N2JkLCAw eDc3YmIsIDB4NzdjNywgMHg3N2NkLCAweDc3ZDcsIDB4NzdkYSwKLSAgICAweDc3ZGMsIDB4Nzdl MywgMHg3N2VlLCAweDc3ZmMsIDB4NzgwYywgMHg3ODEyLCAweDc5MjYsIDB4NzgyMCwKLSAgICAw eDc5MmEsIDB4Nzg0NSwgMHg3ODhlLCAweDc4NzQsIDB4Nzg4NiwgMHg3ODdjLCAweDc4OWEsIDB4 Nzg4YywKLSAgICAweDc4YTMsIDB4NzhiNSwgMHg3OGFhLCAweDc4YWYsIDB4NzhkMSwgMHg3OGM2 LCAweDc4Y2IsIDB4NzhkNCwKLSAgICAweDc4YmUsIDB4NzhiYywgMHg3OGM1LCAweDc4Y2EsIDB4 NzhlYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK LSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKLSAgICAweDc4ZTcsIDB4NzhkYSwgMHg3OGZkLCAweDc4ZjQsIDB4NzkwNywg MHg3OTEyLCAweDc5MTEsIDB4NzkxOSwKLSAgICAweDc5MmMsIDB4NzkyYiwgMHg3OTQwLCAweDc5 NjAsIDB4Nzk1NywgMHg3OTVmLCAweDc5NWEsIDB4Nzk1NSwKLSAgICAweDc5NTMsIDB4Nzk3YSwg MHg3OTdmLCAweDc5OGEsIDB4Nzk5ZCwgMHg3OWE3LCAweDlmNGIsIDB4NzlhYSwKLSAgICAweDc5 YWUsIDB4NzliMywgMHg3OWI5LCAweDc5YmEsIDB4NzljOSwgMHg3OWQ1LCAweDc5ZTcsIDB4Nzll YywKLSAgICAweDc5ZTEsIDB4NzllMywgMHg3YTA4LCAweDdhMGQsIDB4N2ExOCwgMHg3YTE5LCAw eDdhMjAsIDB4N2ExZiwKLSAgICAweDc5ODAsIDB4N2EzMSwgMHg3YTNiLCAweDdhM2UsIDB4N2Ez NywgMHg3YTQzLCAweDdhNTcsIDB4N2E0OSwKLSAgICAweDdhNjEsIDB4N2E2MiwgMHg3YTY5LCAw eDlmOWQsIDB4N2E3MCwgMHg3YTc5LCAweDdhN2QsIDB4N2E4OCwKLSAgICAweDdhOTcsIDB4N2E5 NSwgMHg3YTk4LCAweDdhOTYsIDB4N2FhOSwgMHg3YWM4LCAweDdhYjAsIDB4ZmZmZCwKLSAgICAw eDdhYjYsIDB4N2FjNSwgMHg3YWM0LCAweDdhYmYsIDB4OTA4MywgMHg3YWM3LCAweDdhY2EsIDB4 N2FjZCwKLSAgICAweDdhY2YsIDB4N2FkNSwgMHg3YWQzLCAweDdhZDksIDB4N2FkYSwgMHg3YWRk LCAweDdhZTEsIDB4N2FlMiwKLSAgICAweDdhZTYsIDB4N2FlZCwgMHg3YWYwLCAweDdiMDIsIDB4 N2IwZiwgMHg3YjBhLCAweDdiMDYsIDB4N2IzMywKLSAgICAweDdiMTgsIDB4N2IxOSwgMHg3YjFl LCAweDdiMzUsIDB4N2IyOCwgMHg3YjM2LCAweDdiNTAsIDB4N2I3YSwKLSAgICAweDdiMDQsIDB4 N2I0ZCwgMHg3YjBiLCAweDdiNGMsIDB4N2I0NSwgMHg3Yjc1LCAweDdiNjUsIDB4N2I3NCwKLSAg ICAweDdiNjcsIDB4N2I3MCwgMHg3YjcxLCAweDdiNmMsIDB4N2I2ZSwgMHg3YjlkLCAweDdiOTgs IDB4N2I5ZiwKLSAgICAweDdiOGQsIDB4N2I5YywgMHg3YjlhLCAweDdiOGIsIDB4N2I5MiwgMHg3 YjhmLCAweDdiNWQsIDB4N2I5OSwKLSAgICAweDdiY2IsIDB4N2JjMSwgMHg3YmNjLCAweDdiY2Ys IDB4N2JiNCwgMHg3YmM2LCAweDdiZGQsIDB4N2JlOSwKLSAgICAweDdjMTEsIDB4N2MxNCwgMHg3 YmU2LCAweDdiZTUsIDB4N2M2MCwgMHg3YzAwLCAweDdjMDcsIDB4N2MxMywKLSAgICAweDdiZjMs IDB4N2JmNywgMHg3YzE3LCAweDdjMGQsIDB4N2JmNiwgMHg3YzIzLCAweDdjMjcsIDB4N2MyYSwK LSAgICAweDdjMWYsIDB4N2MzNywgMHg3YzJiLCAweDdjM2QsIDB4N2M0YywgMHg3YzQzLCAweDdj NTQsIDB4N2M0ZiwKLSAgICAweDdjNDAsIDB4N2M1MCwgMHg3YzU4LCAweDdjNWYsIDB4N2M2NCwg MHg3YzU2LCAweDdjNjUsIDB4N2M2YywKLSAgICAweDdjNzUsIDB4N2M4MywgMHg3YzkwLCAweDdj YTQsIDB4N2NhZCwgMHg3Y2EyLCAweDdjYWIsIDB4N2NhMSwKLSAgICAweDdjYTgsIDB4N2NiMywg MHg3Y2IyLCAweDdjYjEsIDB4N2NhZSwgMHg3Y2I5LCAweDdjYmQsIDB4N2NjMCwKLSAgICAweDdj YzUsIDB4N2NjMiwgMHg3Y2Q4LCAweDdjZDIsIDB4N2NkYywgMHg3Y2UyLCAweDliM2IsIDB4N2Nl ZiwKLSAgICAweDdjZjIsIDB4N2NmNCwgMHg3Y2Y2LCAweDdjZmEsIDB4N2QwNiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAg ICAweDdkMDIsIDB4N2QxYywgMHg3ZDE1LCAweDdkMGEsIDB4N2Q0NSwgMHg3ZDRiLCAweDdkMmUs IDB4N2QzMiwKLSAgICAweDdkM2YsIDB4N2QzNSwgMHg3ZDQ2LCAweDdkNzMsIDB4N2Q1NiwgMHg3 ZDRlLCAweDdkNzIsIDB4N2Q2OCwKLSAgICAweDdkNmUsIDB4N2Q0ZiwgMHg3ZDYzLCAweDdkOTMs IDB4N2Q4OSwgMHg3ZDViLCAweDdkOGYsIDB4N2Q3ZCwKLSAgICAweDdkOWIsIDB4N2RiYSwgMHg3 ZGFlLCAweDdkYTMsIDB4N2RiNSwgMHg3ZGM3LCAweDdkYmQsIDB4N2RhYiwKLSAgICAweDdlM2Qs IDB4N2RhMiwgMHg3ZGFmLCAweDdkZGMsIDB4N2RiOCwgMHg3ZDlmLCAweDdkYjAsIDB4N2RkOCwK LSAgICAweDdkZGQsIDB4N2RlNCwgMHg3ZGRlLCAweDdkZmIsIDB4N2RmMiwgMHg3ZGUxLCAweDdl MDUsIDB4N2UwYSwKLSAgICAweDdlMjMsIDB4N2UyMSwgMHg3ZTEyLCAweDdlMzEsIDB4N2UxZiwg MHg3ZTA5LCAweDdlMGIsIDB4N2UyMiwKLSAgICAweDdlNDYsIDB4N2U2NiwgMHg3ZTNiLCAweDdl MzUsIDB4N2UzOSwgMHg3ZTQzLCAweDdlMzcsIDB4ZmZmZCwKLSAgICAweDdlMzIsIDB4N2UzYSwg MHg3ZTY3LCAweDdlNWQsIDB4N2U1NiwgMHg3ZTVlLCAweDdlNTksIDB4N2U1YSwKLSAgICAweDdl NzksIDB4N2U2YSwgMHg3ZTY5LCAweDdlN2MsIDB4N2U3YiwgMHg3ZTgzLCAweDdkZDUsIDB4N2U3 ZCwKLSAgICAweDhmYWUsIDB4N2U3ZiwgMHg3ZTg4LCAweDdlODksIDB4N2U4YywgMHg3ZTkyLCAw eDdlOTAsIDB4N2U5MywKLSAgICAweDdlOTQsIDB4N2U5NiwgMHg3ZThlLCAweDdlOWIsIDB4N2U5 YywgMHg3ZjM4LCAweDdmM2EsIDB4N2Y0NSwKLSAgICAweDdmNGMsIDB4N2Y0ZCwgMHg3ZjRlLCAw eDdmNTAsIDB4N2Y1MSwgMHg3ZjU1LCAweDdmNTQsIDB4N2Y1OCwKLSAgICAweDdmNWYsIDB4N2Y2 MCwgMHg3ZjY4LCAweDdmNjksIDB4N2Y2NywgMHg3Zjc4LCAweDdmODIsIDB4N2Y4NiwKLSAgICAw eDdmODMsIDB4N2Y4OCwgMHg3Zjg3LCAweDdmOGMsIDB4N2Y5NCwgMHg3ZjllLCAweDdmOWQsIDB4 N2Y5YSwKLSAgICAweDdmYTMsIDB4N2ZhZiwgMHg3ZmIyLCAweDdmYjksIDB4N2ZhZSwgMHg3ZmI2 LCAweDdmYjgsIDB4OGI3MSwKLSAgICAweDdmYzUsIDB4N2ZjNiwgMHg3ZmNhLCAweDdmZDUsIDB4 N2ZkNCwgMHg3ZmUxLCAweDdmZTYsIDB4N2ZlOSwKLSAgICAweDdmZjMsIDB4N2ZmOSwgMHg5OGRj LCAweDgwMDYsIDB4ODAwNCwgMHg4MDBiLCAweDgwMTIsIDB4ODAxOCwKLSAgICAweDgwMTksIDB4 ODAxYywgMHg4MDIxLCAweDgwMjgsIDB4ODAzZiwgMHg4MDNiLCAweDgwNGEsIDB4ODA0NiwKLSAg ICAweDgwNTIsIDB4ODA1OCwgMHg4MDVhLCAweDgwNWYsIDB4ODA2MiwgMHg4MDY4LCAweDgwNzMs IDB4ODA3MiwKLSAgICAweDgwNzAsIDB4ODA3NiwgMHg4MDc5LCAweDgwN2QsIDB4ODA3ZiwgMHg4 MDg0LCAweDgwODYsIDB4ODA4NSwKLSAgICAweDgwOWIsIDB4ODA5MywgMHg4MDlhLCAweDgwYWQs IDB4NTE5MCwgMHg4MGFjLCAweDgwZGIsIDB4ODBlNSwKLSAgICAweDgwZDksIDB4ODBkZCwgMHg4 MGM0LCAweDgwZGEsIDB4ODBkNiwgMHg4MTA5LCAweDgwZWYsIDB4ODBmMSwKLSAgICAweDgxMWIs IDB4ODEyOSwgMHg4MTIzLCAweDgxMmYsIDB4ODE0YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK LSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweDk2OGIsIDB4ODE0 NiwgMHg4MTNlLCAweDgxNTMsIDB4ODE1MSwgMHg4MGZjLCAweDgxNzEsIDB4ODE2ZSwKLSAgICAw eDgxNjUsIDB4ODE2NiwgMHg4MTc0LCAweDgxODMsIDB4ODE4OCwgMHg4MThhLCAweDgxODAsIDB4 ODE4MiwKLSAgICAweDgxYTAsIDB4ODE5NSwgMHg4MWE0LCAweDgxYTMsIDB4ODE1ZiwgMHg4MTkz LCAweDgxYTksIDB4ODFiMCwKLSAgICAweDgxYjUsIDB4ODFiZSwgMHg4MWI4LCAweDgxYmQsIDB4 ODFjMCwgMHg4MWMyLCAweDgxYmEsIDB4ODFjOSwKLSAgICAweDgxY2QsIDB4ODFkMSwgMHg4MWQ5 LCAweDgxZDgsIDB4ODFjOCwgMHg4MWRhLCAweDgxZGYsIDB4ODFlMCwKLSAgICAweDgxZTcsIDB4 ODFmYSwgMHg4MWZiLCAweDgxZmUsIDB4ODIwMSwgMHg4MjAyLCAweDgyMDUsIDB4ODIwNywKLSAg ICAweDgyMGEsIDB4ODIwZCwgMHg4MjEwLCAweDgyMTYsIDB4ODIyOSwgMHg4MjJiLCAweDgyMzgs IDB4ODIzMywKLSAgICAweDgyNDAsIDB4ODI1OSwgMHg4MjU4LCAweDgyNWQsIDB4ODI1YSwgMHg4 MjVmLCAweDgyNjQsIDB4ZmZmZCwKLSAgICAweDgyNjIsIDB4ODI2OCwgMHg4MjZhLCAweDgyNmIs IDB4ODIyZSwgMHg4MjcxLCAweDgyNzcsIDB4ODI3OCwKLSAgICAweDgyN2UsIDB4ODI4ZCwgMHg4 MjkyLCAweDgyYWIsIDB4ODI5ZiwgMHg4MmJiLCAweDgyYWMsIDB4ODJlMSwKLSAgICAweDgyZTMs IDB4ODJkZiwgMHg4MmQyLCAweDgyZjQsIDB4ODJmMywgMHg4MmZhLCAweDgzOTMsIDB4ODMwMywK LSAgICAweDgyZmIsIDB4ODJmOSwgMHg4MmRlLCAweDgzMDYsIDB4ODJkYywgMHg4MzA5LCAweDgy ZDksIDB4ODMzNSwKLSAgICAweDgzMzQsIDB4ODMxNiwgMHg4MzMyLCAweDgzMzEsIDB4ODM0MCwg MHg4MzM5LCAweDgzNTAsIDB4ODM0NSwKLSAgICAweDgzMmYsIDB4ODMyYiwgMHg4MzE3LCAweDgz MTgsIDB4ODM4NSwgMHg4MzlhLCAweDgzYWEsIDB4ODM5ZiwKLSAgICAweDgzYTIsIDB4ODM5Niwg MHg4MzIzLCAweDgzOGUsIDB4ODM4NywgMHg4MzhhLCAweDgzN2MsIDB4ODNiNSwKLSAgICAweDgz NzMsIDB4ODM3NSwgMHg4M2EwLCAweDgzODksIDB4ODNhOCwgMHg4M2Y0LCAweDg0MTMsIDB4ODNl YiwKLSAgICAweDgzY2UsIDB4ODNmZCwgMHg4NDAzLCAweDgzZDgsIDB4ODQwYiwgMHg4M2MxLCAw eDgzZjcsIDB4ODQwNywKLSAgICAweDgzZTAsIDB4ODNmMiwgMHg4NDBkLCAweDg0MjIsIDB4ODQy MCwgMHg4M2JkLCAweDg0MzgsIDB4ODUwNiwKLSAgICAweDgzZmIsIDB4ODQ2ZCwgMHg4NDJhLCAw eDg0M2MsIDB4ODU1YSwgMHg4NDg0LCAweDg0NzcsIDB4ODQ2YiwKLSAgICAweDg0YWQsIDB4ODQ2 ZSwgMHg4NDgyLCAweDg0NjksIDB4ODQ0NiwgMHg4NDJjLCAweDg0NmYsIDB4ODQ3OSwKLSAgICAw eDg0MzUsIDB4ODRjYSwgMHg4NDYyLCAweDg0YjksIDB4ODRiZiwgMHg4NDlmLCAweDg0ZDksIDB4 ODRjZCwKLSAgICAweDg0YmIsIDB4ODRkYSwgMHg4NGQwLCAweDg0YzEsIDB4ODRjNiwgMHg4NGQ2 LCAweDg0YTEsIDB4ODUyMSwKLSAgICAweDg0ZmYsIDB4ODRmNCwgMHg4NTE3LCAweDg1MTgsIDB4 ODUyYywgMHg4NTFmLCAweDg1MTUsIDB4ODUxNCwKLSAgICAweDg0ZmMsIDB4ODU0MCwgMHg4NTYz LCAweDg1NTgsIDB4ODU0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK LSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweDg1NDEsIDB4ODYwMiwgMHg4NTRiLCAweDg1 NTUsIDB4ODU4MCwgMHg4NWE0LCAweDg1ODgsIDB4ODU5MSwKLSAgICAweDg1OGEsIDB4ODVhOCwg MHg4NTZkLCAweDg1OTQsIDB4ODU5YiwgMHg4NWVhLCAweDg1ODcsIDB4ODU5YywKLSAgICAweDg1 NzcsIDB4ODU3ZSwgMHg4NTkwLCAweDg1YzksIDB4ODViYSwgMHg4NWNmLCAweDg1YjksIDB4ODVk MCwKLSAgICAweDg1ZDUsIDB4ODVkZCwgMHg4NWU1LCAweDg1ZGMsIDB4ODVmOSwgMHg4NjBhLCAw eDg2MTMsIDB4ODYwYiwKLSAgICAweDg1ZmUsIDB4ODVmYSwgMHg4NjA2LCAweDg2MjIsIDB4ODYx YSwgMHg4NjMwLCAweDg2M2YsIDB4ODY0ZCwKLSAgICAweDRlNTUsIDB4ODY1NCwgMHg4NjVmLCAw eDg2NjcsIDB4ODY3MSwgMHg4NjkzLCAweDg2YTMsIDB4ODZhOSwKLSAgICAweDg2YWEsIDB4ODY4 YiwgMHg4NjhjLCAweDg2YjYsIDB4ODZhZiwgMHg4NmM0LCAweDg2YzYsIDB4ODZiMCwKLSAgICAw eDg2YzksIDB4ODgyMywgMHg4NmFiLCAweDg2ZDQsIDB4ODZkZSwgMHg4NmU5LCAweDg2ZWMsIDB4 ZmZmZCwKLSAgICAweDg2ZGYsIDB4ODZkYiwgMHg4NmVmLCAweDg3MTIsIDB4ODcwNiwgMHg4NzA4 LCAweDg3MDAsIDB4ODcwMywKLSAgICAweDg2ZmIsIDB4ODcxMSwgMHg4NzA5LCAweDg3MGQsIDB4 ODZmOSwgMHg4NzBhLCAweDg3MzQsIDB4ODczZiwKLSAgICAweDg3MzcsIDB4ODczYiwgMHg4NzI1 LCAweDg3MjksIDB4ODcxYSwgMHg4NzYwLCAweDg3NWYsIDB4ODc3OCwKLSAgICAweDg3NGMsIDB4 ODc0ZSwgMHg4Nzc0LCAweDg3NTcsIDB4ODc2OCwgMHg4NzZlLCAweDg3NTksIDB4ODc1MywKLSAg ICAweDg3NjMsIDB4ODc2YSwgMHg4ODA1LCAweDg3YTIsIDB4ODc5ZiwgMHg4NzgyLCAweDg3YWYs IDB4ODdjYiwKLSAgICAweDg3YmQsIDB4ODdjMCwgMHg4N2QwLCAweDk2ZDYsIDB4ODdhYiwgMHg4 N2M0LCAweDg3YjMsIDB4ODdjNywKLSAgICAweDg3YzYsIDB4ODdiYiwgMHg4N2VmLCAweDg3ZjIs IDB4ODdlMCwgMHg4ODBmLCAweDg4MGQsIDB4ODdmZSwKLSAgICAweDg3ZjYsIDB4ODdmNywgMHg4 ODBlLCAweDg3ZDIsIDB4ODgxMSwgMHg4ODE2LCAweDg4MTUsIDB4ODgyMiwKLSAgICAweDg4MjEs IDB4ODgzMSwgMHg4ODM2LCAweDg4MzksIDB4ODgyNywgMHg4ODNiLCAweDg4NDQsIDB4ODg0MiwK LSAgICAweDg4NTIsIDB4ODg1OSwgMHg4ODVlLCAweDg4NjIsIDB4ODg2YiwgMHg4ODgxLCAweDg4 N2UsIDB4ODg5ZSwKLSAgICAweDg4NzUsIDB4ODg3ZCwgMHg4OGI1LCAweDg4NzIsIDB4ODg4Miwg MHg4ODk3LCAweDg4OTIsIDB4ODhhZSwKLSAgICAweDg4OTksIDB4ODhhMiwgMHg4ODhkLCAweDg4 YTQsIDB4ODhiMCwgMHg4OGJmLCAweDg4YjEsIDB4ODhjMywKLSAgICAweDg4YzQsIDB4ODhkNCwg MHg4OGQ4LCAweDg4ZDksIDB4ODhkZCwgMHg4OGY5LCAweDg5MDIsIDB4ODhmYywKLSAgICAweDg4 ZjQsIDB4ODhlOCwgMHg4OGYyLCAweDg5MDQsIDB4ODkwYywgMHg4OTBhLCAweDg5MTMsIDB4ODk0 MywKLSAgICAweDg5MWUsIDB4ODkyNSwgMHg4OTJhLCAweDg5MmIsIDB4ODk0MSwgMHg4OTQ0LCAw eDg5M2IsIDB4ODkzNiwKLSAgICAweDg5MzgsIDB4ODk0YywgMHg4OTFkLCAweDg5NjAsIDB4ODk1 ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKLSAgICAweDg5NjYsIDB4ODk2NCwgMHg4OTZkLCAweDg5NmEsIDB4ODk2ZiwgMHg4 OTc0LCAweDg5NzcsIDB4ODk3ZSwKLSAgICAweDg5ODMsIDB4ODk4OCwgMHg4OThhLCAweDg5OTMs IDB4ODk5OCwgMHg4OWExLCAweDg5YTksIDB4ODlhNiwKLSAgICAweDg5YWMsIDB4ODlhZiwgMHg4 OWIyLCAweDg5YmEsIDB4ODliZCwgMHg4OWJmLCAweDg5YzAsIDB4ODlkYSwKLSAgICAweDg5ZGMs IDB4ODlkZCwgMHg4OWU3LCAweDg5ZjQsIDB4ODlmOCwgMHg4YTAzLCAweDhhMTYsIDB4OGExMCwK LSAgICAweDhhMGMsIDB4OGExYiwgMHg4YTFkLCAweDhhMjUsIDB4OGEzNiwgMHg4YTQxLCAweDhh NWIsIDB4OGE1MiwKLSAgICAweDhhNDYsIDB4OGE0OCwgMHg4YTdjLCAweDhhNmQsIDB4OGE2Yywg MHg4YTYyLCAweDhhODUsIDB4OGE4MiwKLSAgICAweDhhODQsIDB4OGFhOCwgMHg4YWExLCAweDhh OTEsIDB4OGFhNSwgMHg4YWE2LCAweDhhOWEsIDB4OGFhMywKLSAgICAweDhhYzQsIDB4OGFjZCwg MHg4YWMyLCAweDhhZGEsIDB4OGFlYiwgMHg4YWYzLCAweDhhZTcsIDB4ZmZmZCwKLSAgICAweDhh ZTQsIDB4OGFmMSwgMHg4YjE0LCAweDhhZTAsIDB4OGFlMiwgMHg4YWY3LCAweDhhZGUsIDB4OGFk YiwKLSAgICAweDhiMGMsIDB4OGIwNywgMHg4YjFhLCAweDhhZTEsIDB4OGIxNiwgMHg4YjEwLCAw eDhiMTcsIDB4OGIyMCwKLSAgICAweDhiMzMsIDB4OTdhYiwgMHg4YjI2LCAweDhiMmIsIDB4OGIz ZSwgMHg4YjI4LCAweDhiNDEsIDB4OGI0YywKLSAgICAweDhiNGYsIDB4OGI0ZSwgMHg4YjQ5LCAw eDhiNTYsIDB4OGI1YiwgMHg4YjVhLCAweDhiNmIsIDB4OGI1ZiwKLSAgICAweDhiNmMsIDB4OGI2 ZiwgMHg4Yjc0LCAweDhiN2QsIDB4OGI4MCwgMHg4YjhjLCAweDhiOGUsIDB4OGI5MiwKLSAgICAw eDhiOTMsIDB4OGI5NiwgMHg4Yjk5LCAweDhiOWEsIDB4OGMzYSwgMHg4YzQxLCAweDhjM2YsIDB4 OGM0OCwKLSAgICAweDhjNGMsIDB4OGM0ZSwgMHg4YzUwLCAweDhjNTUsIDB4OGM2MiwgMHg4YzZj LCAweDhjNzgsIDB4OGM3YSwKLSAgICAweDhjODIsIDB4OGM4OSwgMHg4Yzg1LCAweDhjOGEsIDB4 OGM4ZCwgMHg4YzhlLCAweDhjOTQsIDB4OGM3YywKLSAgICAweDhjOTgsIDB4NjIxZCwgMHg4Y2Fk LCAweDhjYWEsIDB4OGNiZCwgMHg4Y2IyLCAweDhjYjMsIDB4OGNhZSwKLSAgICAweDhjYjYsIDB4 OGNjOCwgMHg4Y2MxLCAweDhjZTQsIDB4OGNlMywgMHg4Y2RhLCAweDhjZmQsIDB4OGNmYSwKLSAg ICAweDhjZmIsIDB4OGQwNCwgMHg4ZDA1LCAweDhkMGEsIDB4OGQwNywgMHg4ZDBmLCAweDhkMGQs IDB4OGQxMCwKLSAgICAweDlmNGUsIDB4OGQxMywgMHg4Y2NkLCAweDhkMTQsIDB4OGQxNiwgMHg4 ZDY3LCAweDhkNmQsIDB4OGQ3MSwKLSAgICAweDhkNzMsIDB4OGQ4MSwgMHg4ZDk5LCAweDhkYzIs IDB4OGRiZSwgMHg4ZGJhLCAweDhkY2YsIDB4OGRkYSwKLSAgICAweDhkZDYsIDB4OGRjYywgMHg4 ZGRiLCAweDhkY2IsIDB4OGRlYSwgMHg4ZGViLCAweDhkZGYsIDB4OGRlMywKLSAgICAweDhkZmMs IDB4OGUwOCwgMHg4ZTA5LCAweDhkZmYsIDB4OGUxZCwgMHg4ZTFlLCAweDhlMTAsIDB4OGUxZiwK LSAgICAweDhlNDIsIDB4OGUzNSwgMHg4ZTMwLCAweDhlMzQsIDB4OGU0YSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAw eDhlNDcsIDB4OGU0OSwgMHg4ZTRjLCAweDhlNTAsIDB4OGU0OCwgMHg4ZTU5LCAweDhlNjQsIDB4 OGU2MCwKLSAgICAweDhlMmEsIDB4OGU2MywgMHg4ZTU1LCAweDhlNzYsIDB4OGU3MiwgMHg4ZTdj LCAweDhlODEsIDB4OGU4NywKLSAgICAweDhlODUsIDB4OGU4NCwgMHg4ZThiLCAweDhlOGEsIDB4 OGU5MywgMHg4ZTkxLCAweDhlOTQsIDB4OGU5OSwKLSAgICAweDhlYWEsIDB4OGVhMSwgMHg4ZWFj LCAweDhlYjAsIDB4OGVjNiwgMHg4ZWIxLCAweDhlYmUsIDB4OGVjNSwKLSAgICAweDhlYzgsIDB4 OGVjYiwgMHg4ZWRiLCAweDhlZTMsIDB4OGVmYywgMHg4ZWZiLCAweDhlZWIsIDB4OGVmZSwKLSAg ICAweDhmMGEsIDB4OGYwNSwgMHg4ZjE1LCAweDhmMTIsIDB4OGYxOSwgMHg4ZjEzLCAweDhmMWMs IDB4OGYxZiwKLSAgICAweDhmMWIsIDB4OGYwYywgMHg4ZjI2LCAweDhmMzMsIDB4OGYzYiwgMHg4 ZjM5LCAweDhmNDUsIDB4OGY0MiwKLSAgICAweDhmM2UsIDB4OGY0YywgMHg4ZjQ5LCAweDhmNDYs IDB4OGY0ZSwgMHg4ZjU3LCAweDhmNWMsIDB4ZmZmZCwKLSAgICAweDhmNjIsIDB4OGY2MywgMHg4 ZjY0LCAweDhmOWMsIDB4OGY5ZiwgMHg4ZmEzLCAweDhmYWQsIDB4OGZhZiwKLSAgICAweDhmYjcs IDB4OGZkYSwgMHg4ZmU1LCAweDhmZTIsIDB4OGZlYSwgMHg4ZmVmLCAweDkwODcsIDB4OGZmNCwK LSAgICAweDkwMDUsIDB4OGZmOSwgMHg4ZmZhLCAweDkwMTEsIDB4OTAxNSwgMHg5MDIxLCAweDkw MGQsIDB4OTAxZSwKLSAgICAweDkwMTYsIDB4OTAwYiwgMHg5MDI3LCAweDkwMzYsIDB4OTAzNSwg MHg5MDM5LCAweDhmZjgsIDB4OTA0ZiwKLSAgICAweDkwNTAsIDB4OTA1MSwgMHg5MDUyLCAweDkw MGUsIDB4OTA0OSwgMHg5MDNlLCAweDkwNTYsIDB4OTA1OCwKLSAgICAweDkwNWUsIDB4OTA2OCwg MHg5MDZmLCAweDkwNzYsIDB4OTZhOCwgMHg5MDcyLCAweDkwODIsIDB4OTA3ZCwKLSAgICAweDkw ODEsIDB4OTA4MCwgMHg5MDhhLCAweDkwODksIDB4OTA4ZiwgMHg5MGE4LCAweDkwYWYsIDB4OTBi MSwKLSAgICAweDkwYjUsIDB4OTBlMiwgMHg5MGU0LCAweDYyNDgsIDB4OTBkYiwgMHg5MTAyLCAw eDkxMTIsIDB4OTExOSwKLSAgICAweDkxMzIsIDB4OTEzMCwgMHg5MTRhLCAweDkxNTYsIDB4OTE1 OCwgMHg5MTYzLCAweDkxNjUsIDB4OTE2OSwKLSAgICAweDkxNzMsIDB4OTE3MiwgMHg5MThiLCAw eDkxODksIDB4OTE4MiwgMHg5MWEyLCAweDkxYWIsIDB4OTFhZiwKLSAgICAweDkxYWEsIDB4OTFi NSwgMHg5MWI0LCAweDkxYmEsIDB4OTFjMCwgMHg5MWMxLCAweDkxYzksIDB4OTFjYiwKLSAgICAw eDkxZDAsIDB4OTFkNiwgMHg5MWRmLCAweDkxZTEsIDB4OTFkYiwgMHg5MWZjLCAweDkxZjUsIDB4 OTFmNiwKLSAgICAweDkyMWUsIDB4OTFmZiwgMHg5MjE0LCAweDkyMmMsIDB4OTIxNSwgMHg5MjEx LCAweDkyNWUsIDB4OTI1NywKLSAgICAweDkyNDUsIDB4OTI0OSwgMHg5MjY0LCAweDkyNDgsIDB4 OTI5NSwgMHg5MjNmLCAweDkyNGIsIDB4OTI1MCwKLSAgICAweDkyOWMsIDB4OTI5NiwgMHg5Mjkz LCAweDkyOWIsIDB4OTI1YSwgMHg5MmNmLCAweDkyYjksIDB4OTJiNywKLSAgICAweDkyZTksIDB4 OTMwZiwgMHg5MmZhLCAweDkzNDQsIDB4OTMyZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK LSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweDkzMTksIDB4OTMyMiwg MHg5MzFhLCAweDkzMjMsIDB4OTMzYSwgMHg5MzM1LCAweDkzM2IsIDB4OTM1YywKLSAgICAweDkz NjAsIDB4OTM3YywgMHg5MzZlLCAweDkzNTYsIDB4OTNiMCwgMHg5M2FjLCAweDkzYWQsIDB4OTM5 NCwKLSAgICAweDkzYjksIDB4OTNkNiwgMHg5M2Q3LCAweDkzZTgsIDB4OTNlNSwgMHg5M2Q4LCAw eDkzYzMsIDB4OTNkZCwKLSAgICAweDkzZDAsIDB4OTNjOCwgMHg5M2U0LCAweDk0MWEsIDB4OTQx NCwgMHg5NDEzLCAweDk0MDMsIDB4OTQwNywKLSAgICAweDk0MTAsIDB4OTQzNiwgMHg5NDJiLCAw eDk0MzUsIDB4OTQyMSwgMHg5NDNhLCAweDk0NDEsIDB4OTQ1MiwKLSAgICAweDk0NDQsIDB4OTQ1 YiwgMHg5NDYwLCAweDk0NjIsIDB4OTQ1ZSwgMHg5NDZhLCAweDkyMjksIDB4OTQ3MCwKLSAgICAw eDk0NzUsIDB4OTQ3NywgMHg5NDdkLCAweDk0NWEsIDB4OTQ3YywgMHg5NDdlLCAweDk0ODEsIDB4 OTQ3ZiwKLSAgICAweDk1ODIsIDB4OTU4NywgMHg5NThhLCAweDk1OTQsIDB4OTU5NiwgMHg5NTk4 LCAweDk1OTksIDB4ZmZmZCwKLSAgICAweDk1YTAsIDB4OTVhOCwgMHg5NWE3LCAweDk1YWQsIDB4 OTViYywgMHg5NWJiLCAweDk1YjksIDB4OTViZSwKLSAgICAweDk1Y2EsIDB4NmZmNiwgMHg5NWMz LCAweDk1Y2QsIDB4OTVjYywgMHg5NWQ1LCAweDk1ZDQsIDB4OTVkNiwKLSAgICAweDk1ZGMsIDB4 OTVlMSwgMHg5NWU1LCAweDk1ZTIsIDB4OTYyMSwgMHg5NjI4LCAweDk2MmUsIDB4OTYyZiwKLSAg ICAweDk2NDIsIDB4OTY0YywgMHg5NjRmLCAweDk2NGIsIDB4OTY3NywgMHg5NjVjLCAweDk2NWUs IDB4OTY1ZCwKLSAgICAweDk2NWYsIDB4OTY2NiwgMHg5NjcyLCAweDk2NmMsIDB4OTY4ZCwgMHg5 Njk4LCAweDk2OTUsIDB4OTY5NywKLSAgICAweDk2YWEsIDB4OTZhNywgMHg5NmIxLCAweDk2YjIs IDB4OTZiMCwgMHg5NmI0LCAweDk2YjYsIDB4OTZiOCwKLSAgICAweDk2YjksIDB4OTZjZSwgMHg5 NmNiLCAweDk2YzksIDB4OTZjZCwgMHg4OTRkLCAweDk2ZGMsIDB4OTcwZCwKLSAgICAweDk2ZDUs IDB4OTZmOSwgMHg5NzA0LCAweDk3MDYsIDB4OTcwOCwgMHg5NzEzLCAweDk3MGUsIDB4OTcxMSwK LSAgICAweDk3MGYsIDB4OTcxNiwgMHg5NzE5LCAweDk3MjQsIDB4OTcyYSwgMHg5NzMwLCAweDk3 MzksIDB4OTczZCwKLSAgICAweDk3M2UsIDB4OTc0NCwgMHg5NzQ2LCAweDk3NDgsIDB4OTc0Miwg MHg5NzQ5LCAweDk3NWMsIDB4OTc2MCwKLSAgICAweDk3NjQsIDB4OTc2NiwgMHg5NzY4LCAweDUy ZDIsIDB4OTc2YiwgMHg5NzcxLCAweDk3NzksIDB4OTc4NSwKLSAgICAweDk3N2MsIDB4OTc4MSwg MHg5NzdhLCAweDk3ODYsIDB4OTc4YiwgMHg5NzhmLCAweDk3OTAsIDB4OTc5YywKLSAgICAweDk3 YTgsIDB4OTdhNiwgMHg5N2EzLCAweDk3YjMsIDB4OTdiNCwgMHg5N2MzLCAweDk3YzYsIDB4OTdj OCwKLSAgICAweDk3Y2IsIDB4OTdkYywgMHg5N2VkLCAweDlmNGYsIDB4OTdmMiwgMHg3YWRmLCAw eDk3ZjYsIDB4OTdmNSwKLSAgICAweDk4MGYsIDB4OTgwYywgMHg5ODM4LCAweDk4MjQsIDB4OTgy MSwgMHg5ODM3LCAweDk4M2QsIDB4OTg0NiwKLSAgICAweDk4NGYsIDB4OTg0YiwgMHg5ODZiLCAw eDk4NmYsIDB4OTg3MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweDk4NzEsIDB4OTg3NCwgMHg5ODczLCAweDk4YWEs IDB4OThhZiwgMHg5OGIxLCAweDk4YjYsIDB4OThjNCwKLSAgICAweDk4YzMsIDB4OThjNiwgMHg5 OGU5LCAweDk4ZWIsIDB4OTkwMywgMHg5OTA5LCAweDk5MTIsIDB4OTkxNCwKLSAgICAweDk5MTgs IDB4OTkyMSwgMHg5OTFkLCAweDk5MWUsIDB4OTkyNCwgMHg5OTIwLCAweDk5MmMsIDB4OTkyZSwK LSAgICAweDk5M2QsIDB4OTkzZSwgMHg5OTQyLCAweDk5NDksIDB4OTk0NSwgMHg5OTUwLCAweDk5 NGIsIDB4OTk1MSwKLSAgICAweDk5NTIsIDB4OTk0YywgMHg5OTU1LCAweDk5OTcsIDB4OTk5OCwg MHg5OWE1LCAweDk5YWQsIDB4OTlhZSwKLSAgICAweDk5YmMsIDB4OTlkZiwgMHg5OWRiLCAweDk5 ZGQsIDB4OTlkOCwgMHg5OWQxLCAweDk5ZWQsIDB4OTllZSwKLSAgICAweDk5ZjEsIDB4OTlmMiwg MHg5OWZiLCAweDk5ZjgsIDB4OWEwMSwgMHg5YTBmLCAweDlhMDUsIDB4OTllMiwKLSAgICAweDlh MTksIDB4OWEyYiwgMHg5YTM3LCAweDlhNDUsIDB4OWE0MiwgMHg5YTQwLCAweDlhNDMsIDB4ZmZm ZCwKLSAgICAweDlhM2UsIDB4OWE1NSwgMHg5YTRkLCAweDlhNWIsIDB4OWE1NywgMHg5YTVmLCAw eDlhNjIsIDB4OWE2NSwKLSAgICAweDlhNjQsIDB4OWE2OSwgMHg5YTZiLCAweDlhNmEsIDB4OWFh ZCwgMHg5YWIwLCAweDlhYmMsIDB4OWFjMCwKLSAgICAweDlhY2YsIDB4OWFkMSwgMHg5YWQzLCAw eDlhZDQsIDB4OWFkZSwgMHg5YWRmLCAweDlhZTIsIDB4OWFlMywKLSAgICAweDlhZTYsIDB4OWFl ZiwgMHg5YWViLCAweDlhZWUsIDB4OWFmNCwgMHg5YWYxLCAweDlhZjcsIDB4OWFmYiwKLSAgICAw eDliMDYsIDB4OWIxOCwgMHg5YjFhLCAweDliMWYsIDB4OWIyMiwgMHg5YjIzLCAweDliMjUsIDB4 OWIyNywKLSAgICAweDliMjgsIDB4OWIyOSwgMHg5YjJhLCAweDliMmUsIDB4OWIyZiwgMHg5YjMy LCAweDliNDQsIDB4OWI0MywKLSAgICAweDliNGYsIDB4OWI0ZCwgMHg5YjRlLCAweDliNTEsIDB4 OWI1OCwgMHg5Yjc0LCAweDliOTMsIDB4OWI4MywKLSAgICAweDliOTEsIDB4OWI5NiwgMHg5Yjk3 LCAweDliOWYsIDB4OWJhMCwgMHg5YmE4LCAweDliYjQsIDB4OWJjMCwKLSAgICAweDliY2EsIDB4 OWJiOSwgMHg5YmM2LCAweDliY2YsIDB4OWJkMSwgMHg5YmQyLCAweDliZTMsIDB4OWJlMiwKLSAg ICAweDliZTQsIDB4OWJkNCwgMHg5YmUxLCAweDljM2EsIDB4OWJmMiwgMHg5YmYxLCAweDliZjAs IDB4OWMxNSwKLSAgICAweDljMTQsIDB4OWMwOSwgMHg5YzEzLCAweDljMGMsIDB4OWMwNiwgMHg5 YzA4LCAweDljMTIsIDB4OWMwYSwKLSAgICAweDljMDQsIDB4OWMyZSwgMHg5YzFiLCAweDljMjUs IDB4OWMyNCwgMHg5YzIxLCAweDljMzAsIDB4OWM0NywKLSAgICAweDljMzIsIDB4OWM0NiwgMHg5 YzNlLCAweDljNWEsIDB4OWM2MCwgMHg5YzY3LCAweDljNzYsIDB4OWM3OCwKLSAgICAweDljZTcs IDB4OWNlYywgMHg5Y2YwLCAweDlkMDksIDB4OWQwOCwgMHg5Y2ViLCAweDlkMDMsIDB4OWQwNiwK LSAgICAweDlkMmEsIDB4OWQyNiwgMHg5ZGFmLCAweDlkMjMsIDB4OWQxZiwgMHg5ZDQ0LCAweDlk MTUsIDB4OWQxMiwKLSAgICAweDlkNDEsIDB4OWQzZiwgMHg5ZDNlLCAweDlkNDYsIDB4OWQ0OCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKLSAgICAweDlkNWQsIDB4OWQ1ZSwgMHg5ZDY0LCAweDlkNTEsIDB4OWQ1MCwgMHg5ZDU5 LCAweDlkNzIsIDB4OWQ4OSwKLSAgICAweDlkODcsIDB4OWRhYiwgMHg5ZDZmLCAweDlkN2EsIDB4 OWQ5YSwgMHg5ZGE0LCAweDlkYTksIDB4OWRiMiwKLSAgICAweDlkYzQsIDB4OWRjMSwgMHg5ZGJi LCAweDlkYjgsIDB4OWRiYSwgMHg5ZGM2LCAweDlkY2YsIDB4OWRjMiwKLSAgICAweDlkZDksIDB4 OWRkMywgMHg5ZGY4LCAweDlkZTYsIDB4OWRlZCwgMHg5ZGVmLCAweDlkZmQsIDB4OWUxYSwKLSAg ICAweDllMWIsIDB4OWUxZSwgMHg5ZTc1LCAweDllNzksIDB4OWU3ZCwgMHg5ZTgxLCAweDllODgs IDB4OWU4YiwKLSAgICAweDllOGMsIDB4OWU5MiwgMHg5ZTk1LCAweDllOTEsIDB4OWU5ZCwgMHg5 ZWE1LCAweDllYTksIDB4OWViOCwKLSAgICAweDllYWEsIDB4OWVhZCwgMHg5NzYxLCAweDllY2Ms IDB4OWVjZSwgMHg5ZWNmLCAweDllZDAsIDB4OWVkNCwKLSAgICAweDllZGMsIDB4OWVkZSwgMHg5 ZWRkLCAweDllZTAsIDB4OWVlNSwgMHg5ZWU4LCAweDllZWYsIDB4ZmZmZCwKLSAgICAweDllZjQs IDB4OWVmNiwgMHg5ZWY3LCAweDllZjksIDB4OWVmYiwgMHg5ZWZjLCAweDllZmQsIDB4OWYwNywK LSAgICAweDlmMDgsIDB4NzZiNywgMHg5ZjE1LCAweDlmMjEsIDB4OWYyYywgMHg5ZjNlLCAweDlm NGEsIDB4OWY1MiwKLSAgICAweDlmNTQsIDB4OWY2MywgMHg5ZjVmLCAweDlmNjAsIDB4OWY2MSwg MHg5ZjY2LCAweDlmNjcsIDB4OWY2YywKLSAgICAweDlmNmEsIDB4OWY3NywgMHg5ZjcyLCAweDlm NzYsIDB4OWY5NSwgMHg5ZjljLCAweDlmYTAsIDB4NTgyZiwKLSAgICAweDY5YzcsIDB4OTA1OSwg MHg3NDY0LCAweDUxZGMsIDB4NzE5OQotfTsKLQotLyogVW5pY29kZS10by1LYW5qaSB0YWJsZXMu Li4gKi8KLQotc3RhdGljIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuaWNv ZGUgdG8gU2hpZnQtSklTICovCi11c2pfMDM5MVtdID0geyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogMHgwMzkxIHRocnUgMHgwMzljICovCi0gICAgMHg4MzlmLCAweDgzYTAsIDB4ODNhMSwg MHg4M2EyLCAweDgzYTMsIDB4ODNhNCwgMHg4M2E1LCAweDgzYTYsCi0gICAgMHg4M2E3LCAweDgz YTgsIDB4ODNhOSwgMHg4M2FhLCAweDgzYWIsIDB4ODNhYywgMHg4M2FkLCAweDgzYWUsCi0gICAg MHg4M2FmLCAweGZmZmQsIDB4ODNiMCwgMHg4M2IxLCAweDgzYjIsIDB4ODNiMywgMHg4M2I0LCAw eDgzYjUsCi0gICAgMHg4M2I2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4M2JmLCAweDgzYzAsIDB4ODNjMSwgMHg4M2MyLCAw eDgzYzMsIDB4ODNjNCwgMHg4M2M1LCAweDgzYzYsCi0gICAgMHg4M2M3LCAweDgzYzgsIDB4ODNj OSwgMHg4M2NhLCAweDgzY2IsIDB4ODNjYywgMHg4M2NkLCAweDgzY2UsCi0gICAgMHg4M2NmLCAw eGZmZmQsIDB4ODNkMCwgMHg4M2QxLCAweDgzZDIsIDB4ODNkMywgMHg4M2Q0LCAweDgzZDUsIDB4 ODNkNgotfTsKLQotc3RhdGljIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVu aWNvZGUgdG8gU2hpZnQtSklTICovCi11c2pfMDQwMVtdID0geyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogMHgwNDAxIHRocnUgMHgwNDUxICovCi0gICAgMHg4NDQ2LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg0NDAsCi0g ICAgMHg4NDQxLCAweDg0NDIsIDB4ODQ0MywgMHg4NDQ0LCAweDg0NDUsIDB4ODQ0NywgMHg4NDQ4 LCAweDg0NDksCi0gICAgMHg4NDRhLCAweDg0NGIsIDB4ODQ0YywgMHg4NDRkLCAweDg0NGUsIDB4 ODQ0ZiwgMHg4NDUwLCAweDg0NTEsCi0gICAgMHg4NDUyLCAweDg0NTMsIDB4ODQ1NCwgMHg4NDU1 LCAweDg0NTYsIDB4ODQ1NywgMHg4NDU4LCAweDg0NTksCi0gICAgMHg4NDVhLCAweDg0NWIsIDB4 ODQ1YywgMHg4NDVkLCAweDg0NWUsIDB4ODQ1ZiwgMHg4NDYwLCAweDg0NzAsCi0gICAgMHg4NDcx LCAweDg0NzIsIDB4ODQ3MywgMHg4NDc0LCAweDg0NzUsIDB4ODQ3NywgMHg4NDc4LCAweDg0Nzks Ci0gICAgMHg4NDdhLCAweDg0N2IsIDB4ODQ3YywgMHg4NDdkLCAweDg0N2UsIDB4ODQ4MCwgMHg4 NDgxLCAweDg0ODIsCi0gICAgMHg4NDgzLCAweDg0ODQsIDB4ODQ4NSwgMHg4NDg2LCAweDg0ODcs IDB4ODQ4OCwgMHg4NDg5LCAweDg0OGEsCi0gICAgMHg4NDhiLCAweDg0OGMsIDB4ODQ4ZCwgMHg4 NDhlLCAweDg0OGYsIDB4ODQ5MCwgMHg4NDkxLCAweGZmZmQsIDB4ODQ3NgotfTsKLQotc3RhdGlj IFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuaWNvZGUgdG8gU2hpZnQtSklT ICovCi11c2pfMzAwMFtdID0geyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgzMDAwIHRo cnUgMHgzMGZmICovCi0gICAgMHg4MTQwLCAweDgxNDEsIDB4ODE0MiwgMHg4MTU2LCAweGZmZmQs IDB4ODE1OCwgMHg4MTU5LCAweDgxNWEsCi0gICAgMHg4MTcxLCAweDgxNzIsIDB4ODE3MywgMHg4 MTc0LCAweDgxNzUsIDB4ODE3NiwgMHg4MTc3LCAweDgxNzgsCi0gICAgMHg4MTc5LCAweDgxN2Es IDB4ODFhNywgMHg4MWFjLCAweDgxNmIsIDB4ODE2YywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDgxNjAsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweDgyOWYsIDB4ODJhMCwgMHg4MmExLCAweDgyYTIsIDB4ODJhMywgMHg4MmE0LCAw eDgyYTUsCi0gICAgMHg4MmE2LCAweDgyYTcsIDB4ODJhOCwgMHg4MmE5LCAweDgyYWEsIDB4ODJh YiwgMHg4MmFjLCAweDgyYWQsCi0gICAgMHg4MmFlLCAweDgyYWYsIDB4ODJiMCwgMHg4MmIxLCAw eDgyYjIsIDB4ODJiMywgMHg4MmI0LCAweDgyYjUsCi0gICAgMHg4MmI2LCAweDgyYjcsIDB4ODJi OCwgMHg4MmI5LCAweDgyYmEsIDB4ODJiYiwgMHg4MmJjLCAweDgyYmQsCi0gICAgMHg4MmJlLCAw eDgyYmYsIDB4ODJjMCwgMHg4MmMxLCAweDgyYzIsIDB4ODJjMywgMHg4MmM0LCAweDgyYzUsCi0g ICAgMHg4MmM2LCAweDgyYzcsIDB4ODJjOCwgMHg4MmM5LCAweDgyY2EsIDB4ODJjYiwgMHg4MmNj LCAweDgyY2QsCi0gICAgMHg4MmNlLCAweDgyY2YsIDB4ODJkMCwgMHg4MmQxLCAweDgyZDIsIDB4 ODJkMywgMHg4MmQ0LCAweDgyZDUsCi0gICAgMHg4MmQ2LCAweDgyZDcsIDB4ODJkOCwgMHg4MmQ5 LCAweDgyZGEsIDB4ODJkYiwgMHg4MmRjLCAweDgyZGQsCi0gICAgMHg4MmRlLCAweDgyZGYsIDB4 ODJlMCwgMHg4MmUxLCAweDgyZTIsIDB4ODJlMywgMHg4MmU0LCAweDgyZTUsCi0gICAgMHg4MmU2 LCAweDgyZTcsIDB4ODJlOCwgMHg4MmU5LCAweDgyZWEsIDB4ODJlYiwgMHg4MmVjLCAweDgyZWQs Ci0gICAgMHg4MmVlLCAweDgyZWYsIDB4ODJmMCwgMHg4MmYxLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4MTRhLCAweDgxNGIs IDB4ODE1NCwgMHg4MTU1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDgzNDAsIDB4ODM0MSwgMHg4 MzQyLCAweDgzNDMsIDB4ODM0NCwgMHg4MzQ1LCAweDgzNDYsCi0gICAgMHg4MzQ3LCAweDgzNDgs IDB4ODM0OSwgMHg4MzRhLCAweDgzNGIsIDB4ODM0YywgMHg4MzRkLCAweDgzNGUsCi0gICAgMHg4 MzRmLCAweDgzNTAsIDB4ODM1MSwgMHg4MzUyLCAweDgzNTMsIDB4ODM1NCwgMHg4MzU1LCAweDgz NTYsCi0gICAgMHg4MzU3LCAweDgzNTgsIDB4ODM1OSwgMHg4MzVhLCAweDgzNWIsIDB4ODM1Yywg MHg4MzVkLCAweDgzNWUsCi0gICAgMHg4MzVmLCAweDgzNjAsIDB4ODM2MSwgMHg4MzYyLCAweDgz NjMsIDB4ODM2NCwgMHg4MzY1LCAweDgzNjYsCi0gICAgMHg4MzY3LCAweDgzNjgsIDB4ODM2OSwg MHg4MzZhLCAweDgzNmIsIDB4ODM2YywgMHg4MzZkLCAweDgzNmUsCi0gICAgMHg4MzZmLCAweDgz NzAsIDB4ODM3MSwgMHg4MzcyLCAweDgzNzMsIDB4ODM3NCwgMHg4Mzc1LCAweDgzNzYsCi0gICAg MHg4Mzc3LCAweDgzNzgsIDB4ODM3OSwgMHg4MzdhLCAweDgzN2IsIDB4ODM3YywgMHg4MzdkLCAw eDgzN2UsCi0gICAgMHg4MzgwLCAweDgzODEsIDB4ODM4MiwgMHg4MzgzLCAweDgzODQsIDB4ODM4 NSwgMHg4Mzg2LCAweDgzODcsCi0gICAgMHg4Mzg4LCAweDgzODksIDB4ODM4YSwgMHg4MzhiLCAw eDgzOGMsIDB4ODM4ZCwgMHg4MzhlLCAweDgzOGYsCi0gICAgMHg4MzkwLCAweDgzOTEsIDB4ODM5 MiwgMHg4MzkzLCAweDgzOTQsIDB4ODM5NSwgMHg4Mzk2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4MTQ1LCAweDgxNWIsIDB4ODE1MiwgMHg4MTUzLCAweGZmZmQKLX07 Ci0KLXN0YXRpYyBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmljb2RlIHRv IFNoaWZ0LUpJUyAqLwotdXNqX2ZmMDBbXSA9IHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDB4ZmYwMCB0aHJ1IDB4MGZmOWYgKi8KLSAgICAweGZmZmQsIDB4ODE0OSwgMHhmZmZkLCAweDgx OTQsIDB4ODE5MCwgMHg4MTkzLCAweDgxOTUsIDB4ZmZmZCwKLSAgICAweDgxNjksIDB4ODE2YSwg MHg4MTk2LCAweDgxN2IsIDB4ODE0MywgMHhmZmZkLCAweDgxNDQsIDB4ODE1ZSwKLSAgICAweDgy NGYsIDB4ODI1MCwgMHg4MjUxLCAweDgyNTIsIDB4ODI1MywgMHg4MjU0LCAweDgyNTUsIDB4ODI1 NiwKLSAgICAweDgyNTcsIDB4ODI1OCwgMHg4MTQ2LCAweDgxNDcsIDB4ODE4MywgMHg4MTgxLCAw eDgxODQsIDB4ODE0OCwKLSAgICAweDgxOTcsIDB4ODI2MCwgMHg4MjYxLCAweDgyNjIsIDB4ODI2 MywgMHg4MjY0LCAweDgyNjUsIDB4ODI2NiwKLSAgICAweDgyNjcsIDB4ODI2OCwgMHg4MjY5LCAw eDgyNmEsIDB4ODI2YiwgMHg4MjZjLCAweDgyNmQsIDB4ODI2ZSwKLSAgICAweDgyNmYsIDB4ODI3 MCwgMHg4MjcxLCAweDgyNzIsIDB4ODI3MywgMHg4Mjc0LCAweDgyNzUsIDB4ODI3NiwKLSAgICAw eDgyNzcsIDB4ODI3OCwgMHg4Mjc5LCAweDgxNmQsIDB4ZmZmZCwgMHg4MTZlLCAweDgxNGYsIDB4 ODE1MSwKLSAgICAweDgxNGQsIDB4ODI4MSwgMHg4MjgyLCAweDgyODMsIDB4ODI4NCwgMHg4Mjg1 LCAweDgyODYsIDB4ODI4NywKLSAgICAweDgyODgsIDB4ODI4OSwgMHg4MjhhLCAweDgyOGIsIDB4 ODI4YywgMHg4MjhkLCAweDgyOGUsIDB4ODI4ZiwKLSAgICAweDgyOTAsIDB4ODI5MSwgMHg4Mjky LCAweDgyOTMsIDB4ODI5NCwgMHg4Mjk1LCAweDgyOTYsIDB4ODI5NywKLSAgICAweDgyOTgsIDB4 ODI5OSwgMHg4MjlhLCAweDgxNmYsIDB4ODE2MiwgMHg4MTcwLCAweGZmZmQsIDB4ZmZmZCwKLSAg ICAweGZmZmQsIDB4MDBhMSwgMHgwMGEyLCAweDAwYTMsIDB4MDBhNCwgMHgwMGE1LCAweDAwYTYs IDB4MDBhNywKLSAgICAweDAwYTgsIDB4MDBhOSwgMHgwMGFhLCAweDAwYWIsIDB4MDBhYywgMHgw MGFkLCAweDAwYWUsIDB4MDBhZiwKLSAgICAweDAwYjAsIDB4MDBiMSwgMHgwMGIyLCAweDAwYjMs IDB4MDBiNCwgMHgwMGI1LCAweDAwYjYsIDB4MDBiNywKLSAgICAweDAwYjgsIDB4MDBiOSwgMHgw MGJhLCAweDAwYmIsIDB4MDBiYywgMHgwMGJkLCAweDAwYmUsIDB4MDBiZiwKLSAgICAweDAwYzAs IDB4MDBjMSwgMHgwMGMyLCAweDAwYzMsIDB4MDBjNCwgMHgwMGM1LCAweDAwYzYsIDB4MDBjNywK LSAgICAweDAwYzgsIDB4MDBjOSwgMHgwMGNhLCAweDAwY2IsIDB4MDBjYywgMHgwMGNkLCAweDAw Y2UsIDB4MDBjZiwKLSAgICAweDAwZDAsIDB4MDBkMSwgMHgwMGQyLCAweDAwZDMsIDB4MDBkNCwg MHgwMGQ1LCAweDAwZDYsIDB4MDBkNywKLSAgICAweDAwZDgsIDB4MDBkOSwgMHgwMGRhLCAweDAw ZGIsIDB4MDBkYywgMHgwMGRkLCAweDAwZGUsIDB4MDBkZgotfTsKLQotLyogTm93IG9uZSBodW1v bmdvdXMgdGFibGUgZm9yIEthbmppICovCi0KLXN0YXRpYyBVU0hPUlQgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBVbmljb2RlIHRvIFNoaWZ0LUpJUyAqLwotdXNqXzRlMDBbXSA9IHsgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4NGUwMCB0aHJ1IDB4OWZhMCAqLwotICAgIDB4ODhl YSwgMHg5MjlhLCAweGZmZmQsIDB4OGViNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Njlj LAotICAgIDB4OGZlNCwgMHg4ZTRmLCAweDhmZTMsIDB4ODliYSwgMHhmZmZkLCAweDk1NzMsIDB4 OTc1ZSwgMHhmZmZkLAotICAgIDB4OThhMCwgMHg4OTRlLCAweGZmZmQsIDB4ZmZmZCwgMHg4YThl LCAweDk4YTEsIDB4OTBhMiwgMHg5OWMwLAotICAgIDB4OGI3NSwgMHg5NWI4LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGZlNSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5N2Jj LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVjMCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDk4YTIsIDB4ZmZmZCwgMHhmZmZkLCAweDkyODYsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHg5OGEzLCAweDhiZjgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OThhNCwgMHhmZmZkLAotICAgIDB4OGFkYiwgMHg5MjRmLCAweGZmZmQsIDB4OGVlNSwgMHg5 OGE1LCAweGZmZmQsIDB4ZmZmZCwgMHg5OGE2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk4YTcs IDB4OTQ1NCwgMHhmZmZkLCAweDhiNzYsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTQ1NiwgMHhmZmZkLCAweDkzZTEsIDB4OGNjMSwgMHg5NjUyLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NjgsIDB4OThhOCwg MHg4ZmU2LAotICAgIDB4OThhOSwgMHg4OWIzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhi ZTMsIDB4OGNlZSwgMHg5NmU3LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliYTQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg5NzkwLCAweGZmZmQsIDB4OTNmYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFh MywgMHhmZmZkLAotICAgIDB4OGI1NCwgMHhmZmZkLCAweDk4YWEsIDB4ZmZmZCwgMHhmZmZkLCAw eDk4YWIsIDB4OTdiOSwgMHhmZmZkLAotICAgIDB4OTc1YywgMHg5MTg4LCAweDk4YWQsIDB4OGU5 NiwgMHg5M2YxLCAweGZmZmQsIDB4OThiMCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4OTVkLCAw eDhjZGQsIDB4ZmZmZCwgMHg4Y2RjLCAweDg4ZTQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTg2 YSwgMHg5ODY5LCAweGZmZmQsIDB4OGRiMSwgMHg4ODlmLCAweGZmZmQsIDB4OThiMSwgMHg5OGIy LAotICAgIDB4OThiMywgMHg5NjUzLCAweDk4YjQsIDB4ZmZmZCwgMHg4Y2YwLCAweDg4ZTUsIDB4 OTY5MiwgMHhmZmZkLAotICAgIDB4OGI5YywgMHhmZmZkLCAweGZmZmQsIDB4OGI5ZCwgMHg4Yjll LCAweDkyZTAsIDB4OTdiYSwgMHhmZmZkLAotICAgIDB4OThiNSwgMHhmZmZkLCAweGZmZmQsIDB4 OThiNiwgMHhmZmZkLCAweGZmZmQsIDB4OThiNywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDkwNmMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OGY1OSwgMHg5MDZkLCAweDk4YmMsIDB4ZmZmZCwgMHg5OGJhLCAweGZmZmQsIDB4OThiYiwgMHg4 Yjc3LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhkYTEsIDB4ODllZSwgMHhmZmZkLCAweDk4Yjks IDB4OThiOCwgMHg5NWE3LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 ZTY1LCAweDhlNjQsIDB4OTFiYywgMHg5OGJkLAotICAgIDB4OTU3NCwgMHg5MGU1LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDgxNTcsIDB4OThiZSwgMHg5OGMwLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTFlMywgMHg5N2RmLCAweDg4YzgsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4YmYsIDB4ODliYywg MHhmZmZkLAotICAgIDB4OGJjMiwgMHhmZmZkLCAweDkyODcsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGM4ZiwgMHg5OGMxLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTQ0Mywg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4YWU5LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg5OGMyLCAweDg4YzksIDB4ZmZmZCwgMHhmZmZkLCAweDhjZGUsIDB4OGFlYSwgMHg5NTlhLAot ICAgIDB4OTRiMCwgMHg4Yjc4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5ZWYsIDB4ZmZmZCwgMHg5OGU1LCAw eDkzNjAsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDhjLAotICAgIDB4OThj NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGJhLCAweGZmZmQsIDB4OTdlMCwgMHhmZmZk LAotICAgIDB4OTA0YywgMHhmZmZkLCAweDhlNjYsIDB4ZmZmZCwgMHg4ZTk3LCAweDg5YmUsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTJjZiwgMHhmZmZk LCAweGZmZmQsIDB4OTI0MSwgMHg5OGM4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDg4Y2EsIDB4OTJlMSwgMHg4ZjVhLAotICAgIDB4OGRiMiwgMHg5NzQz LCAweGZmZmQsIDB4OTFjYywgMHhmZmZkLCAweDg5YmQsIDB4ZmZmZCwgMHg5OGM3LAotICAgIDB4 ZmZmZCwgMHg5NzVkLCAweDk4YzMsIDB4OThjNSwgMHg4ZGVjLCAweDk4YzYsIDB4OWI0MywgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5OGNlLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OGQxLAotICAgIDB4OThjZiwgMHhmZmZkLCAweGZmZmQs IDB4ODljMCwgMHhmZmZkLCAweDk1YjksIDB4OThjOSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OThjZCwgMHg4Y2YxLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTY3LAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFhNCwgMHhmZmZkLCAweGZmZmQsIDB4OThkMiwg MHhmZmZkLAotICAgIDB4OThjYSwgMHhmZmZkLCAweGZmZmQsIDB4OTdlMSwgMHhmZmZkLCAweDhl OTgsIDB4ZmZmZCwgMHg5OGNiLAotICAgIDB4ZmZmZCwgMHg5OGQwLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OThkMywgMHhmZmZkLAotICAgIDB4OThjYywgMHhmZmZkLCAweGZm ZmQsIDB4OGI5ZiwgMHhmZmZkLCAweDg4Y2IsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGJhMCwg MHg4OWJmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWI0NCwgMHhmZmZkLCAweDk2OTksIDB4OTU4 ZSwgMHg4Y2YyLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDkwNGUsIDB4OTdiNSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWQ2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDhjNTcsIDB4OTFhMywgMHg4OWUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDhmNzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OThkNywgMHhmZmZk LAotICAgIDB4OThkYywgMHg5OGRhLCAweGZmZmQsIDB4ZmZmZCwgMHg5OGQ1LCAweGZmZmQsIDB4 ZmZmZCwgMHg5MWFkLAotICAgIDB4OThkOCwgMHhmZmZkLCAweDk4ZGIsIDB4OThkOSwgMHhmZmZk LCAweDk1ZGIsIDB4ZmZmZCwgMHg5OGQ2LAotICAgIDB4ZmZmZCwgMHg5MDRkLCAweGZmZmQsIDB4 OTY5MywgMHg5OGRkLCAweDk4ZGUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY0MywgMHg5OGViLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTQ2ZiwgMHhmZmZkLCAweDk1NTUsIDB4OThlNiwgMHhm ZmZkLAotICAgIDB4OTVlZSwgMHhmZmZkLCAweDg5YjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OThlYSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk4ZTQsIDB4OThlZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5MTcxLCAweGZmZmQs IDB4OGNjMiwgMHhmZmZkLCAweDk0N2IsIDB4ZmZmZCwgMHhlMGM1LAotICAgIDB4ZmZmZCwgMHg5 OGVjLCAweDkzN2MsIDB4ZmZmZCwgMHg5OGUxLCAweGZmZmQsIDB4OGNmNCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHg4Y2YzLCAweDk4ZGYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4ZWQ4LAotICAgIDB4ZmZmZCwgMHg5OGU3LCAweGZmZmQsIDB4OTVlZCwgMHg5MjZjLCAweDk4 ZTMsIDB4OGM5MSwgMHhmZmZkLAotICAgIDB4OThlMCwgMHg5OGU4LCAweDk4ZTIsIDB4OTdjZiwg MHg5OGU5LCAweDk4NjAsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGJlNCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg4YzkwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OThlZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5OGVmLAotICAgIDB4OThmMywgMHg4OGNjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5NWNlLAotICAgIDB4OThmMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDk4ZjEsIDB4OThmNSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDk4ZjQsIDB4ZmZmZCwgMHg5MmUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjOTIsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OGY2LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhlYzMsIDB4ZmZmZCwgMHg5MWE0 LCAweDkyZTMsIDB4OGJmNCwgMHhmZmZkLAotICAgIDB4OThmNywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDhiNTUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OThmOCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4ZmEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2NTQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHg4Yzg2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGU1MCwgMHg5NGY1LCAweDk4ZjksIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGMzLCAweDk3NjIsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweDk4ZmMsIDB4OTk0MiwgMHg5OGZiLCAweDhkYzIsIDB4ZmZmZCwg MHg4ZjlkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGM1OCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk5NDMsIDB4ZmZmZCwg MHhmZmZkLCAweDhiY2QsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5OTQwLCAweDk5 NDEsIDB4ZmZmZCwgMHhmZmZkLCAweDkzYWQsIDB4ZmZmZCwgMHg5MTljLAotICAgIDB4ZmZmZCwg MHg4YmExLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2NmMsIDB4OTk0NCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3YmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTk0 NSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTk0OCwgMHhmZmZkLCAw eDk5NDYsIDB4ZmZmZCwgMHg5MTZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDk5NDcsIDB4OTk0OSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5NGIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHg5OTRhLCAweGZmZmQsIDB4OTVjNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4OGI1NiwgMHg5OTRkLCAweDk5NGUsIDB4ZmZmZCwgMHg4OWFkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5OTRjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhlZjIsIDB4 ZmZmZCwgMHg5OTUxLCAweDk5NTAsIDB4OTk0ZiwgMHhmZmZkLAotICAgIDB4OThkNCwgMHhmZmZk LCAweDk5NTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjllLAotICAgIDB4 ZmZmZCwgMHg5OTUzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3NDQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2ZDcsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OTU1LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk5NTQs IDB4OTk1NywgMHg5OTU2LCAweGZmZmQsIDB4ZmZmZCwgMHg5OTU4LAotICAgIDB4OTk1OSwgMHg4 OGYyLCAweGZmZmQsIDB4OGNiMywgMHg4YzVhLCAweDhmNWIsIDB4OTI5YiwgMHg4YmEyLAotICAg IDB4OTBlNiwgMHg4Y2Y1LCAweGZmZmQsIDB4OGQ4ZSwgMHg5OTViLCAweDk2YzYsIDB4OTM2NSwg MHhmZmZkLAotICAgIDB4OGU5OSwgMHhmZmZkLCAweDk5NWEsIDB4ZmZmZCwgMHg5OTVjLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkzN2QsIDB4ZmZmZCwg MHg4YTk1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk5 NWQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzZmMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTE1Mywg MHg5OTVmLCAweDk5NjAsIDB4OTRhYSwgMHg4Y2Y2LCAweDk4NWEsIDB4OTk2MSwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHg4YmE0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1YmEsIDB4OTFi NCwgMHg4YmVmLAotICAgIDB4OTM1NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YzkzLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTk2MiwgMHhmZmZkLCAweDk5NjMsIDB4ZmZm ZCwgMHhmZmZkLCAweDkzZTAsIDB4ODk3ZSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5OTY2LCAw eDhkZmIsIDB4ZmZmZCwgMHg5OTY1LCAweDhkYzQsIDB4ZmZmZCwgMHg5OTY3LAotICAgIDB4ZTNl YywgMHg5OTY4LCAweDk2NjAsIDB4OTk2OSwgMHhmZmZkLCAweDk5NmEsIDB4OTk2YiwgMHg4ZmU3 LAotICAgIDB4ZmZmZCwgMHg4ZWNhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4OGFhNSwgMHhmZmZkLCAweDk5NmUsIDB4ZmZmZCwgMHg5OTZj LCAweDk2YmIsIDB4OTk2ZCwgMHhmZmZkLAotICAgIDB4OTU3OSwgMHg5OTZmLCAweDk5NzAsIDB4 OTk3MSwgMHg5MzdlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTk3NSwgMHg5OTcz LCAweDk5NzQsIDB4OTk3MiwgMHg4ZGUxLCAweDk5NzYsIDB4OTZlOCwgMHg5N2UyLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5NzcsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGE2LCAweDk5Nzgs IDB4OGY3OSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5OTc5LCAweGZmZmQsIDB4OTI5YywgMHg5 N2JkLCAweDkzODAsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTljMywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTk3YSwgMHhlYWEzLCAweDhiYzMsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4OTk3YiwgMHg5NjdkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY4OCwg MHg5MWZhLAotICAgIDB4ZmZmZCwgMHg5OTdkLCAweDkzZTIsIDB4ZmZmZCwgMHhmZmZkLCAweDk5 N2UsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTk4MCwgMHg4YTRkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDk5ODEsIDB4OGJhNSwgMHhmZmZkLAotICAgIDB4OTNjYSwgMHg4OTlhLCAweDhm NmYsIDB4ZmZmZCwgMHhmZmZkLCAweDk0OWYsIDB4OTk4MiwgMHhmZmZkLAotICAgIDB4OTM4MSwg MHhmZmZkLCAweGZmZmQsIDB4OTA2ZSwgMHg5OTgzLCAweGZmZmQsIDB4OTVhYSwgMHg5MGQ4LAot ICAgIDB4OGFhMCwgMHhmZmZkLCAweDhhYTcsIDB4OTk4NCwgMHhmZmZkLCAweGZmZmQsIDB4OTk4 NiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4YzU5LCAweGZmZmQsIDB4ZmZmZCwgMHg5OTg1LCAw eGZmZmQsIDB4ZmZmZCwgMHg5N2YxLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDhmODksIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5NGJiLCAweDk1Y2EsIDB4ZmZmZCwgMHg5OTg3LAotICAgIDB4ZmZm ZCwgMHg5Nzk4LCAweDk5ODgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTk4OSwgMHhmZmZk LAotICAgIDB4OTM5ZSwgMHhmZmZkLCAweGZmZmQsIDB4OTk4YSwgMHhmZmZkLCAweGZmZmQsIDB4 OTBhNywgMHg4ZGZjLAotICAgIDB4OGM5NCwgMHg5OThiLCAweDhlNjgsIDB4OGQ4ZiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTJlNCwgMHg5OThkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWE1LAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDhkZWQsIDB4OTk4ZSwgMHg5OThmLCAweDkxNGYsIDB4ZmZmZCwgMHg5OThjLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OTkxLCAweGZmZmQsIDB4OTY1NSwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGQ4NCwgMHhmZmZkLCAweGZmZmQs IDB4OTk5MCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM5NSwgMHg4 ZGRjLCAweDk0OGQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5OTk0LCAweDk5OTIs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTliLAotICAgIDB4OGZlOCwgMHg5 OTliLCAweDhhODQsIDB4OTk5NSwgMHg5OTkzLCAweDkxNmUsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5OTcsIDB4ZmZmZCwg MHg5OTk2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE2MywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4YzgwLAotICAgIDB4OTk5YywgMHg5N2FiLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDk5OTgsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5OTlkLCAweDk5 OWEsIDB4ZmZmZCwgMHg5OTk5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTdjZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2Y3LAot ICAgIDB4ODljMSwgMHhmZmZkLCAweGZmZmQsIDB4OTdmMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4Zjk1LCAweDkzNzcsIDB4OGQ4NSwgMHg5OWEwLCAw eDk5YTEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5N2UzLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ODRhLCAweDk5YTMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4Y2Y4LCAw eGZmZmQsIDB4ZmZmZCwgMHg5OWEyLCAweGZmZmQsIDB4OGE0ZSwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHg5OWE0LCAweGZmZmQsIDB4OTY3NSwgMHhmZmZkLCAweDkyYmEsIDB4ZmZmZCwgMHg5NzQ1 LAotICAgIDB4ZmZmZCwgMHg5NWQ3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5YTUsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZDMsIDB4ZmZmZCwgMHhmZmZk LCAweDkzYWUsIDB4ZmZmZCwgMHg5OWE2LAotICAgIDB4OGFhOCwgMHg5NmIxLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDhmOWYsIDB4OTlhNywgMHg5NWU1LAotICAgIDB4OTlhYiwgMHhmZmZk LCAweDkwYTgsIDB4OTlhOCwgMHg4YmNlLCAweGZmZmQsIDB4OTlhOSwgMHg4YWE5LAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhjNGQsIDB4OTlhYywgMHhmZmZkLCAweDk5YWQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTlhZSwgMHg5OWFmLCAweDhlZDksIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OGNmOSwgMHg5NmRjLAotICAgIDB4ZmZmZCwgMHg5NmU2LCAweDkzZjUs IDB4ZmZmZCwgMHhmZmZkLCAweDk1ZWYsIDB4OTliMCwgMHhmZmZkLAotICAgIDB4OTliMSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5YjMsIDB4ZmZmZCwgMHg5OWI1LAotICAg IDB4OTliNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5YjYsIDB4ODliYiwg MHg5NjZiLAotICAgIDB4ZmZmZCwgMHg4ZGZhLCAweDk5YjcsIDB4ZmZmZCwgMHhmZmZkLCAweDkx NzgsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGZhMCwgMHg4YmE3LCAweGZmZmQsIDB4OTliOCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk0 ZDksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWI5LAotICAgIDB4ZmZmZCwg MHg5OWJhLCAweGZmZmQsIDB4OTliYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4OTliYywgMHg5NTQzLCAweDhiZTYsIDB4ODhlMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5M2JkLAotICAgIDB4OTliZCwgMHg4ZjVjLCAweGZmZmQsIDB4OTBlNywgMHhmZmZkLCAw eDk5YmYsIDB4OTliZSwgMHg4ZmExLAotICAgIDB4OGNkZiwgMHg5OWMxLCAweDk0YmMsIDB4ZmZm ZCwgMHhmZmZkLCAweDk5YzIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NGRhLCAw eDkxYjIsIDB4OTFlYywgMHg4YmE2LCAweGZmZmQsIDB4ZmZmZCwgMHg5M2VjLAotICAgIDB4OTI1 MCwgMHhmZmZkLCAweDk0OGUsIDB4ZmZmZCwgMHg5NjZkLCAweGZmZmQsIDB4OTljNCwgMHhmZmZk LAotICAgIDB4OTBlOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OGM1NCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5OWM1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTljNiwgMHg4OTRiLAotICAgIDB4ODhmMywgMHg4YWViLCAweGZmZmQsIDB4 OTFhNiwgMHg4YjcwLCAweDk3OTEsIDB4ZmZmZCwgMHg5OWM5LAotICAgIDB4ODliNSwgMHhmZmZk LCAweGZmZmQsIDB4OTljOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YmE4LAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDk5Y2EsIDB4ZmZmZCwgMHg5NmVmLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTljYiwgMHhmZmZkLAotICAgIDB4OTdkMCwgMHhmZmZkLCAweDhjZmEs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2I0LAotICAgIDB4OTljYywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5Y2UsIDB4OTljZCwgMHhmZmZkLAotICAg IDB4OTA3ZSwgMHg4OTU4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5N2QsIDB4OTljZiwg MHhmZmZkLAotICAgIDB4OTlkMCwgMHhmZmZkLCAweGZmZmQsIDB4OGNiNSwgMHhmZmZkLCAweGZm ZmQsIDB4OTlkMSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI4ZSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhl NTEsIDB4OTlkMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTY5NCwg MHg4ZGIzLCAweDhiNzksIDB4OTc0NiwgMHg5MTZmLCAweDk0YmQsIDB4OGVmYiwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjY2LCAweGZmZmQsIDB4OGVl NiwgMHg4ZWYzLAotICAgIDB4ZmZmZCwgMHg4Zjk2LCAweGZmZmQsIDB4OTRiZSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5OWQ1LAotICAgIDB4ZmZmZCwgMHg4OTYyLCAweDkxNzAsIDB4OGNm YiwgMHg4Y2MzLCAweDhiZTUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTlkOSwgMHg5MjQwLCAw eDkxZmMsIDB4OGJhOSwgMHg4ZmEyLCAweDk5ZGEsIDB4OTlkOCwgMHg4OWMyLAotICAgIDB4OTFl NCwgMHg4ZWI2LCAweDhlNmEsIDB4ODk0NSwgMHhmZmZkLCAweGZmZmQsIDB4OGE5MCwgMHg4ZDg2 LAotICAgIDB4OGU2OSwgMHhmZmZkLCAweDk5ZGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5OWRjLCAweGZmZmQsIDB4OGI2OCwgMHg4YTY1 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGQ4NywgMHg4YjY3LCAweDkyZGQsIDB4 ODk0NCwgMHg5M2FmLCAweDk2YmMsIDB4OGQ0MCwgMHg5Nzk5LAotICAgIDB4OTM2NiwgMHg4Y2Zj LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM0ZSwgMHhmZmZkLCAweDk5ZTUsIDB4ZmZmZCwgMHg4 YmUxLAotICAgIDB4OTY2OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTRkYiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5OWU0LCAweGZmZmQsIDB4OGFkYywgMHg5 OWRmLCAweDk5ZTAsIDB4OTllMiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTllMywgMHhmZmZkLAotICAgIDB4OGI3YSwgMHg5 MDgxLCAweGZmZmQsIDB4OTVhYiwgMHg5OWUxLCAweDk5ZGQsIDB4OGNlMSwgMHhmZmZkLAotICAg IDB4OTlkZSwgMHhmZmZkLCAweDk4NDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVmMCwg MHhmZmZkLAotICAgIDB4OTJlNiwgMHg4Y2UwLCAweDhkOTAsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTllNiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5M2RiLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWVhLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4OGVmYywgMHhmZmZkLCAweDhlZjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4OTllZCwgMHg5OWViLCAweGZmZmQsIDB4OTZhMSwgMHhmZmZkLCAw eDk5ZTgsIDB4OTlmMSwgMHg5OWVjLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTll ZiwgMHg4Y2M0LCAweDk2YmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTlmMCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5OWYyLCAweGZmZmQsIDB4OTlmNCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGRlZSwgMHg5ODYxLCAweGZmZmQsIDB4OTllOSwgMHg5OWU3 LAotICAgIDB4OTlmMywgMHhmZmZkLCAweDk5ZWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk5ZjYsIDB4 ZmZmZCwgMHg5YTQyLCAweDk5ZjgsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTlmYywgMHhmZmZk LCAweGZmZmQsIDB4OWE0MCwgMHg5OWY5LCAweGZmZmQsIDB4ZmZmZCwgMHg5YTVkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDhkZTcsIDB4OGE1MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4OTlmNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTQ0LCAweDg4ZjQs IDB4OWE0MywgMHhmZmZkLAotICAgIDB4ODhhMywgMHg5NTY5LCAweDlhNDEsIDB4ZmZmZCwgMHg5 OWZhLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWY1LAotICAgIDB4OTlmYiwgMHg4ZGM2LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4OWE0NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4OGY1LCAweDlhNGUsIDB4ZmZmZCwgMHhmZmZkLCAweDlh NDYsIDB4OWE0NywgMHhmZmZkLAotICAgIDB4OGZhMywgMHg5Njg5LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDlhNGMsIDB4OWE0YiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkz NGUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweDlhNGQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhNGEsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTUzLCAweGZmZmQsIDB4OGRi NCwgMHg5MDRmLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5YTQ4LAotICAgIDB4OTM4MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5YTQ5LCAweGZmZmQsIDB4ODhhMCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OWE1MywgMHg5NzQyLAotICAgIDB4ZmZmZCwgMHg4ZmE1LCAweGZmZmQsIDB4OWE1OSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWE1OCwgMHg5YTRmLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFjMSwgMHhmZmZkLAotICAgIDB4OWE1MCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5MWVkLCAweDlhNTUsIDB4OGZhNCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTUyLCAweGZmZmQsIDB4ZmZmZCwgMHg5 NmUyLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM1YiwgMHhmZmZkLCAweGZmZmQs IDB4OWE1NiwgMHg5YTU3LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 YTU0LCAweDlhNWEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWE1MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE2MCwgMHg5YTY1LCAweGZm ZmQsIDB4OWE2MSwgMHhmZmZkLAotICAgIDB4OWE1YywgMHhmZmZkLCAweGZmZmQsIDB4OWE2Niwg MHg5MTUwLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTY4LAotICAgIDB4ZmZmZCwgMHg4ZDQxLCAweDlh NWUsIDB4OTI5ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4OWE2MiwgMHg5YTViLCAweDhhYWIsIDB4ZmZmZCwgMHg4YWVjLCAweDhhODUsIDB4OWE2 MywgMHg5YTVmLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4Yzk2LAotICAgIDB4OWE2OSwgMHg5YTY3LCAweDkxNzIsIDB4OGI2 OSwgMHg4YmFhLCAweGZmZmQsIDB4OWE2NCwgMHhmZmZkLAotICAgIDB4OGJmMiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk2MywgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTZkLCAweDlhNmIsIDB4 ZmZmZCwgMHg5YWE1LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5YTcwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDlhNmEsIDB4ZmZmZCwgMHg5YTZlLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTZjLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGU2YiwgMHg5YTZmLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTcyLAotICAgIDB4ZmZmZCwgMHg5YTc3LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDlhNzUsIDB4OWE3NCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTI1MSwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHg4OWMzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTcxLCAweGZm ZmQsIDB4OWE3MywgMHg4ZmE2LAotICAgIDB4ODk1MiwgMHhmZmZkLCAweGZmZmQsIDB4OWE3Niwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg4OWRjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTgyLAot ICAgIDB4ZmZmZCwgMHg4ZmZhLCAweDlhN2QsIDB4ZmZmZCwgMHg5YTdiLCAweGZmZmQsIDB4OWE3 YywgMHhmZmZkLAotICAgIDB4OWE3ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5NWMsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MTU4LCAweGZmZmQsIDB4OWE3OCwgMHhmZmZkLAotICAgIDB4OWE3 OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE5YSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTgx LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGFlZCwgMHhmZmZkLCAweDlhODQsIDB4 OWE4MCwgMHg5YTgzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5NWFjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OTNkMywgMHhmZmZkLCAweDk0YjYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4OWE4NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWE4NSwgMHg4YTY0LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlhODcsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YThhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5YTg5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4OWE4OCwgMHhmZmZkLCAweDk0NTgsIDB4ZmZmZCwgMHhmZmZkLCAweDlhOGIsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWE4YywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5YThlLCAweGZmZmQsIDB4OWE4ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5YTkwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWE5Mywg MHg5YTkxLCAweDlhOGYsIDB4OWE5MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4OWE5NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE5 NSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YTk2LCAweGZmZmQsIDB4OWE5NywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5YTk4LAotICAgIDB4OTk2NCwgMHhmZmZkLCAweDhlZmEsIDB4OGU2 YywgMHhmZmZkLCAweGZmZmQsIDB4ODlmMSwgMHhmZmZkLAotICAgIDB4ODhmNiwgMHhmZmZkLCAw eGZmZmQsIDB4OTI2MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE5OSwgMHhmZmZk LAotICAgIDB4OGRhMiwgMHhmZmZkLCAweDg4Y2QsIDB4OTA3ZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YTlhLCAweDhjYzUsIDB4ZmZmZCwgMHhmZmZk LCAweDhkOTEsIDB4ZmZmZCwgMHg5YTljLAotICAgIDB4OWE5YiwgMHhmZmZkLCAweGZmZmQsIDB4 OTVkZSwgMHg5YTlkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWE5ZiwgMHg5YTll LCAweGZmZmQsIDB4OWFhMCwgMHhmZmZkLCAweDlhYTEsIDB4ZmZmZCwgMHg4Yzk3LAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDg5ODAsIDB4OWFhMiwgMHhmZmZkLCAweGZmZmQsIDB4OWFhNCwgMHhm ZmZkLAotICAgIDB4OWFhMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWE2LCAweGZmZmQs IDB4ZmZmZCwgMHg5Mzc5LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OWFhNywgMHg4OGIzLAotICAgIDB4OGRkZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDhjNWMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTI2ZSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWE4LAotICAg IDB4OWFhOSwgMHhmZmZkLCAweGZmZmQsIDB4OWFhYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4OWFhYywgMHhmZmZkLCAweDhkZTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4YmNmLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2NTYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OWFhYSwgMHg5YWFkLAotICAgIDB4OGRiZiwgMHg4ZDQyLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHg5YWIxLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGEzLCAweGZmZmQsIDB4OTI1 MiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YWFlLCAweDkyZDgsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWIyLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDkwODIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4OWFiMCwgMHg5YWIzLCAweGZmZmQsIDB4OGM1ZSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWFiNCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWFiNSwgMHhmZmZk LCAweDhkNDMsIDB4OGE1ZiwgMHg5YWI3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDlhYjgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4OWFiOSwgMHhmZmZkLCAweGZmZmQsIDB4OWFiNiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWFhZiwgMHhmZmZkLCAweGZmZmQs IDB4OWFiYSwgMHhmZmZkLCAweGZmZmQsIDB4OWFiYiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTY4NCwgMHhmZmZkLCAweGZmZmQsIDB4OGZlOSwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweDlhYmQsIDB4OWFiZSwgMHg5YWJjLCAweGZmZmQsIDB4OWFjMCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDU3LCAweGZm ZmQsIDB4ZmZmZCwgMHg4OGU2LAotICAgIDB4OTU3NSwgMHhmZmZkLCAweGZmZmQsIDB4OWFjMSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmZiLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZWI3LAot ICAgIDB4ZmZmZCwgMHg5NDdjLCAweDhhZWUsIDB4ZmZmZCwgMHg4ZGU5LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4OTY3OCwgMHhmZmZkLCAweDkzYjAsIDB4ZmZmZCwgMHhmZmZkLCAw eDhjOTgsIDB4OTFjZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlhYmYsIDB4OWFj MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxYzIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHg5YWMzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhYzQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHg5YWM2LCAweGZmZmQsIDB4ZmZmZCwgMHg5MmU3LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhhYWMsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlYTlmLAotICAgIDB4ODk4MSwgMHg5NWYxLCAweGZmZmQsIDB4 ZmZmZCwgMHg4ZmVhLCAweDkzNjcsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDhkZTQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhY2MsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OTViYiwgMHg5N2RiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5ZjIsIDB4OWFjOCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5MTU5LCAweDlhY2IsIDB4ZmZmZCwgMHg5 MzgzLCAweGZmZmQsIDB4ZmZmZCwgMHg5MzY4LAotICAgIDB4OTM4NCwgMHg5NGI3LCAweDkyY2Is IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGRjNywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDlhYzcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHg4OTk2LCAweGZmZmQsIDB4OTM1NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4OWFjOSwgMHhmZmZkLCAweDlhYzUsIDB4ZmZmZCwgMHhmZmZkLCAweDkw NmYsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YWNkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OGY2ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGJhYiwgMHhmZmZkLCAweDlhY2UsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVlNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5MTlkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MmM0LCAw eGZmZmQsIDB4ZmZmZCwgMHg5YWQwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTY2ZSwgMHhmZmZkLCAw eGZmZmQsIDB4OWFkMSwgMHhmZmZkLCAweGZmZmQsIDB4OWFkNiwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVhZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4OWFkNSwgMHg5YWNmLCAweDlhZDIsIDB4OWFkNCwgMHhmZmZkLCAweGZmZmQsIDB4 OGRhNCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NWM3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDlhZDcsIDB4ZmZmZCwgMHg5MjY0LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5ZjMsIDB4 ZmZmZCwgMHg4ZmViLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YWQ5 LCAweGZmZmQsIDB4OWFkOCwgMHhmZmZkLCAweDhkODgsIDB4ZmZmZCwgMHg5YWRhLAotICAgIDB4 OWFkYywgMHg5YWRiLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWRlLCAweGZmZmQsIDB4OWFkMywgMHg5 YWUwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWRmLCAweDlhZGQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGU2ZCwgMHg5 MDcwLCAweGZmZmQsIDB4OTE3MywgMHg5YWUxLAotICAgIDB4OTBiYSwgMHg4OGViLCAweDk0ODQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MmQ5LAotICAgIDB4ZmZmZCwgMHg5 YWUzLCAweDlhZTIsIDB4OWFlNCwgMHg5YWU1LCAweDlhZTYsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweDlhZTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NWNmLCAweDlhZTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4OWM0LAotICAgIDB4OWFlOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDk3NWIsIDB4OGE0ZiwgMHhmZmZkLAotICAgIDB4OTljNywgMHg4ZjY3LCAweDkx YmQsIDB4OWFlYSwgMHg5NmU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweDk2YjIsIDB4ZmZmZCwgMHhmZmZkLCAweDlhZWMsIDB4ZmZmZCwgMHg5MWU1LAot ICAgIDB4ZmZmZCwgMHg5MzU2LCAweDkxYmUsIDB4OTU3NiwgMHg5YWVkLCAweDlhZWUsIDB4ODk5 YiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4ZWI4LCAweDlhZWYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4OGNlLAotICAgIDB4OWFmMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWFmMSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4OTgyLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWVmLAotICAgIDB4OTNk ZSwgMHg5NWYyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWFmNSwgMHg5MTc0 LAotICAgIDB4OWFmNCwgMHg4YzVmLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjdhLCAweDlhZjMsIDB4 ZmZmZCwgMHg5Mzg1LAotICAgIDB4OWFmNywgMHhmZmZkLCAweDlhZjYsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWFmOSwgMHhmZmZkLCAweDlhZjgsIDB4 ZmZmZCwgMHhmZmZkLCAweDg5OWMsIDB4ZmZmZCwgMHg5YWZhLAotICAgIDB4OGZhNywgMHg5YWZj LCAweDkyNDQsIDB4ZmZmZCwgMHg5YWZiLCAweGZmZmQsIDB4OTViMSwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY5NywgMHg5MzdhLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4OWI0MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhkNDQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YjQxLCAweDk0NDAsIDB4OTRkYywgMHg5 NmNmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk0NDQs IDB4ZmZmZCwgMHhmZmZkLCAweDliNGEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OGI1NywgMHhmZmZkLCAweGZmZmQsIDB4OTc2NCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHg5NmFkLCAweGZmZmQsIDB4OWJhYSwgMHhmZmZkLCAweDliNDIsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWI0NSwgMHhmZmZkLCAweDkx YzMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTY1NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5MzY5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDli NDYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg5Njg1LCAweGZmZmQsIDB4OGRjOCwgMHhmZmZkLCAweGZmZmQsIDB4OGZhOCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWI0 NywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4ZTZmLCAweGZmZmQsIDB4OGU2ZSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ODhiNywgMHg4Y2M2LCAweGZmZmQsIDB4OTBh OSwgMHg4OGNmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YjRiLCAw eDliNGMsIDB4ZmZmZCwgMHg5YjQ5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5NTcsIDB4OGFhZCwgMHhmZmZk LAotICAgIDB4OWI0OCwgMHhmZmZkLCAweDk2YzMsIDB4OTU1MCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ODhhNiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ODhmNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTcwLAotICAgIDB4ZmZmZCwgMHg4OGQw LCAweGZmZmQsIDB4ODhhMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHg5YjUxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHg5YjRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTZiYSwgMHhmZmZkLCAweDliNTIsIDB4ZmZmZCwgMHg5 YjUwLCAweGZmZmQsIDB4ZmZmZCwgMHg5YjRlLAotICAgIDB4OTA1MCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDliNGQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5 NWQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2UyLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliNTYsIDB4OWI1Nywg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmE5LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWI1MywgMHg5ODRiLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTQ2YiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YjU1LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhkYTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliNTgsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTU3NywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliNTksIDB4ZmZm ZCwgMHg5YjU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NmI5 LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk0N2QsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDliNWEsIDB4OTU1MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5YjViLCAweDliNWYsIDB4OWI1YywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4 OWM1LCAweDliNWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHg4ZWI5LCAweGZmZmQsIDB4OWI1ZCwgMHg4Yzk5LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4OWI2YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWI2NCwgMHg5YjYxLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5Mjg0LCAweGZm ZmQsIDB4OWI2MCwgMHhmZmZkLCAweGZmZmQsIDB4OWI2MiwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg5YjYzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliNjUsIDB4OWI2NiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4YWYwLCAw eGZmZmQsIDB4OWI2OCwgMHg5YjY3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWI2OSwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhmZWMsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliNmMsIDB4 ZmZmZCwgMHg5MmRhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ODk2NCwgMHhmZmZk LCAweDliNmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWI2ZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWI2ZSwgMHhm ZmZkLAotICAgIDB4OWI3MSwgMHhmZmZkLCAweGZmZmQsIDB4OWI2ZiwgMHhmZmZkLCAweDliNzAs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGU3MSwgMHg5YjcyLCAweGZmZmQs IDB4ZmZmZCwgMHg4ZDQ1LCAweDliNzMsIDB4ZmZmZCwgMHg4ZTlhLAotICAgIDB4OTFiNiwgMHhm ZmZkLCAweDliNzQsIDB4OWI3NSwgMHg4ZTc5LCAweDhkNDYsIDB4ZmZmZCwgMHg5NmQwLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI0NywgMHg4Y2M3LCAweDliNzYsIDB4OGE3Nywg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5Yjc3LCAweGZmZmQsIDB4OTFiNywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWI3OCwgMHg5YmExLCAweGZmZmQsIDB4OWI3OSwg MHhmZmZkLCAweDliN2EsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWI3YiwgMHhmZmZkLCAweDli N2QsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWI3ZSwg MHhmZmZkLCAweGZmZmQsIDB4OWI4MCwgMHhmZmZkLCAweDkxZWUsIDB4ZmZmZCwgMHg4OTQ2LAot ICAgIDB4OGVlNywgMHg4OGMwLCAweGZmZmQsIDB4OTE3NiwgMHg4YWFlLCAweDhlYjMsIDB4ZmZm ZCwgMHg4ZDQ3LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDkzODYsIDB4ZmZmZCwgMHg4ZjQwLAotICAgIDB4OGFhZiwgMHg5Mjg4LCAweDkyZTgsIDB4ODhi NiwgMHg4YjU4LCAweDk1ZjMsIDB4ZmZmZCwgMHg4ZWMwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDhiNzEsIDB4OTBlOSwgMHg4ZWJhLCAweDk3NDcsIDB4OWI4MSwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI3YiwgMHhmZmZk LAotICAgIDB4OGRjOSwgMHhmZmZkLCAweGZmZmQsIDB4OGE1MSwgMHg4OTgzLCAweDhmYWEsIDB4 ODljNiwgMHhmZmZkLAotICAgIDB4OWI4MiwgMHg5NzY1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjY4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhlZTIsIDB4 OWI4MywgMHg4YWYxLCAweDkzZDAsIDB4OTZhNywgMHg5Yjg0LAotICAgIDB4ZmZmZCwgMHg5Yjg1 LCAweGZmZmQsIDB4ZmZmZCwgMHg5NTc4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OWI4NywgMHhmZmZkLCAweDhhYTYsIDB4OGJmNSwgMHg5Yjg2LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFiMCwgMHhmZmZkLCAweDkwNTEs IDB4OWI4YiwgMHg4ZTQwLAotICAgIDB4ZmZmZCwgMHg4OWM3LCAweDliOGEsIDB4ZmZmZCwgMHg5 Yjg4LCAweDliOGMsIDB4OWI4OSwgMHg5NDRhLAotICAgIDB4OWVjYiwgMHg5MDUyLCAweGZmZmQs IDB4OWI4ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTdiZSwgMHhmZmZkLAotICAgIDB4OWI4ZSwgMHhm ZmZkLCAweGZmZmQsIDB4OWI5MCwgMHhmZmZkLCAweDkyOWUsIDB4OWI4ZiwgMHhmZmZkLAotICAg IDB4OTBhMSwgMHhmZmZkLCAweDhlOWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFjZSwg MHg4ZWY1LAotICAgIDB4ZmZmZCwgMHg5NTk1LCAweDkwZWEsIDB4ZmZmZCwgMHg4ZWNiLCAweDli OTEsIDB4OGZhYiwgMHg5YjkyLAotICAgIDB4OWI5MywgMHg4OGQxLCAweDkxYjgsIDB4OTA3MSwg MHhmZmZkLCAweDliOTQsIDB4OTNiMSwgMHg4ZmFjLAotICAgIDB4ZmZmZCwgMHg4ZmFkLCAweGZm ZmQsIDB4OWI5NSwgMHhmZmZkLCAweGZmZmQsIDB4OTBlYiwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweDhmYWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4OWI5NiwgMHhmZmZkLCAweDliOTcsIDB4ZmZmZCwgMHg5NmRlLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4OWI5OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDhiYzQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4ZjQxLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWI5OSwgMHg5YjlhLCAw eDhlZGEsIDB4OTA0YiwgMHg5M2YyLCAweDkwNzMsIDB4OTRmNiwgMHg5NDQxLAotICAgIDB4OGJj NywgMHg5YjliLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiOGYsIDB4OWI5YywgMHhmZmZk LAotICAgIDB4OGJmYywgMHhmZmZkLCAweDkzY2QsIDB4ODlhZSwgMHhmZmZkLCAweDhlNzIsIDB4 OWI5ZCwgMHg5YmEwLAotICAgIDB4OWI5ZiwgMHg4YmZiLCAweGZmZmQsIDB4OWI5ZSwgMHhmZmZk LCAweDkzNTcsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFhZSwgMHhmZmZkLAotICAgIDB4OTM2YSwgMHg4ZWM2 LCAweGZmZmQsIDB4ZmZmZCwgMHg5MTc3LCAweDk3OWEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmEyLCAweGZmZmQsIDB4OWJhMywgMHg5 M2Q0LAotICAgIDB4ZmZmZCwgMHg4ZTUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWJhNSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YmE2LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmE3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4OGFmMiwgMHg5YmE4LCAweGZmZmQsIDB4ZmZmZCwgMHg5YmE5LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4OWFhLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTE1YSwgMHg4YWUyLCAweGZm ZmQsIDB4OWJhYiwgMHg5NmE2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg5MWQwLCAweGZmZmQsIDB4OGE3OCwgMHhmZmZkLCAweGZmZmQsIDB4OWJhZCwgMHg5YmFmLAot ICAgIDB4OGFkZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJhYywgMHg5YmFlLCAweGZmZmQsIDB4OWJi MSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDliYjAsIDB4ZmZmZCwgMHg5YmIyLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHg5YmIzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4OTNiYiwgMHg4YmFjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ODllMywgMHg5YmI0LCAweDliYjksIDB4ZmZmZCwgMHhmZmZk LCAweDliYjcsIDB4ZmZmZCwgMHg5NWY1LAotICAgIDB4OTVmNCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTM4NywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDliYjYsIDB4OGY3MywgMHhmZmZkLCAweDliYjUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 MDkyLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJiYSwgMHhmZmZkLCAweGZmZmQs IDB4OGRlOCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YmMwLCAweGZmZmQsIDB4ZmZmZCwgMHg5 YmMxLCAweDliYmIsIDB4OGE1MiwgMHg5YmJjLAotICAgIDB4OWJjNSwgMHg5YmM0LCAweDliYzMs IDB4OWJiZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmJlLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDliYzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHg5NWY2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OWJjOSwgMHg5YmM2LCAweGZmZmQsIDB4OWJjOCwgMHhmZmZkLAot ICAgIDB4OTc5MiwgMHhmZmZkLCAweDliYzcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmJkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5MDkzLCAw eGZmZmQsIDB4ZmZmZCwgMHg5YmNhLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGI1LAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJjYiwgMHhmZmZkLCAweGZmZmQsIDB4OWJjYywgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliY2YsIDB4ZmZmZCwgMHg5YmNl LCAweGZmZmQsIDB4ZmZmZCwgMHg5YmNkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTM4OCwgMHg5YmI4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWJkNSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliZDEsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliZDAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 YmQyLCAweGZmZmQsIDB4OWJkMywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmQ2LAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDk3ZTQsIDB4ZmZmZCwgMHg5YmQ3LCAweDliZDQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YmQ4LCAweGZmZmQsIDB4ZmZmZCwgMHg4YWRlLCAweDli ZDksIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliZGIsIDB4OWJkYSwg MHhmZmZkLCAweGZmZmQsIDB4OWJkYywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWJkZCwgMHhmZmZkLCAweDkwZWMsIDB4OGY0MiwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg4Zjg0LCAweGZmZmQsIDB4OTE4MywgMHhmZmZkLCAweDhkNDgsIDB4OGRiNiwgMHg4ZDQ5LAot ICAgIDB4OGI5MCwgMHhmZmZkLCAweGZmZmQsIDB4OWJkZSwgMHhmZmZkLCAweGZmZmQsIDB4OGRi NywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4Y2M4LCAweDliZGYsIDB4OTZhNCwgMHg5NDYyLCAw eDliZTAsIDB4ZmZmZCwgMHg4ZDRhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFh YSwgMHhmZmZkLCAweDkyNDYsIDB4OGJkMCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDhlNzMsIDB4OTU3YSwgMHhmZmZkLCAweGZmZmQsIDB4OTRiZiwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJlMSwgMHg4YWYzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHg5YmU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTI5ZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YmUzLCAweDliZTIsIDB4OWJlNSwgMHhmZmZk LCAweDkyZTksIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDkwODMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OGU3NCwgMHhmZmZkLCAweDkwYzgsIDB4ZmZmZCwgMHg5MWQxLAotICAgIDB4 OGI0MSwgMHhmZmZkLCAweGZmZmQsIDB4OTJhMCwgMHhmZmZkLCAweGZmZmQsIDB4OWJlNiwgMHg5 YmU3LAotICAgIDB4OGZlZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2NTgs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWJlYSwgMHhmZmZkLCAweGZmZmQsIDB4OWJlOSwgMHg5 YmU4LCAweDk1OWQsIDB4ZmZmZCwgMHg5YmYxLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5Njc5LCAweGZmZmQsIDB4OWJlYiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmVkLCAweDk2OGIsIDB4ZmZmZCwgMHg5YmVjLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5YmVlLAotICAgIDB4ZmZmZCwgMHg5NGE2LCAweDliZWYsIDB4OTViYywgMHg5YmYwLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhh YjEsIDB4OTViZCwgMHg5NDRlLCAweDliZjIsIDB4OWJmMywgMHhmZmZkLAotICAgIDB4OGQ0Yiwg MHg4YWIyLCAweDliZjQsIDB4OGNiNiwgMHg5NzYzLCAweDk3NDgsIDB4OGFmNCwgMHg5YmY2LAot ICAgIDB4ZmZmZCwgMHg5MmExLCAweGZmZmQsIDB4OGQ0YywgMHg4ZmFmLCAweGZmZmQsIDB4ZmZm ZCwgMHg5NGRkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhmYjAsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4Zjk4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDkyZWEsIDB4OTVmNywgMHg5MzU4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDhkNGQsIDB4ZmZmZCwgMHg5NTdiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWJm NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTM3OCwgMHg4ZGMw LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNjOSwgMHhmZmZkLCAweDkyZWIsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDg4YzEsIDB4OGY4ZSwgMHg4ZDRlLAotICAgIDB4OTc2NiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YmY4 LCAweDliZjksIDB4OTQ3MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OWJmYSwgMHg5N2Y1LCAweDk4NGMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 YmZjLAotICAgIDB4OWJmYiwgMHhmZmZkLCAweGZmZmQsIDB4OGE2NiwgMHhmZmZkLCAweGZmZmQs IDB4OWM0MCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDljNDMsIDB4OWM0NCwgMHhm ZmZkLCAweDljNDIsIDB4ZmZmZCwgMHg5NTVmLAotICAgIDB4OGZiMSwgMHg5YzQ2LCAweDljNDUs IDB4OWM0MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWM0NywgMHg5 YzQ4LCAweGZmZmQsIDB4ZmZmZCwgMHg5YzQ5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4OWM0YywgMHg5YzRhLCAweGZmZmQsIDB4OWM0YiwgMHg5YzRkLCAweGZmZmQsIDB4ODk4NCwg MHg5MmVjLAotICAgIDB4OWM0ZSwgMHhmZmZkLCAweDhjOWEsIDB4ODlmNCwgMHg5NDU1LCAweGZm ZmQsIDB4OWM0ZiwgMHg5M2Y5LAotICAgIDB4ZmZmZCwgMHg5NWQ5LCAweGZmZmQsIDB4OWM1MCwg MHg5ODRkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YzUxLCAweDk1 YmUsIDB4OWM1NCwgMHg5ODlmLCAweDk4YWYsIDB4ZmZmZCwgMHg4ZWFlLAotICAgIDB4OTNmMywg MHg5YzU1LCAweGZmZmQsIDB4OGI3YywgMHg5MmEyLCAweDg4ZjgsIDB4OWM1NiwgMHg5NWE0LAot ICAgIDB4OGQ0ZiwgMHhmZmZkLCAweGZmZmQsIDB4OTI2ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5MmVkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDk2ZWQsIDB4OGNiNywgMHg4Y2NhLAotICAgIDB4ZmZmZCwgMHg5YzU3LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDljNTgsIDB4ZmZmZCwgMHg5YzVlLAotICAgIDB4ZmZmZCwgMHg4ZWUzLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyYTMsIDB4ZmZmZCwgMHg4YmFkLAotICAgIDB4OWM1 OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTRhLCAweGZmZmQsIDB4OTI2NSwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHg5YzVhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4OWM1YiwgMHhmZmZkLCAweDhiYWUsIDB4ZmZmZCwgMHg5YzVj LCAweGZmZmQsIDB4OWM1ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YzVmLCAweGZmZmQsIDB4 OTM5NiwgMHhmZmZkLCAweGZmZmQsIDB4OWM2MCwgMHg5YzYxLAotICAgIDB4ZmZmZCwgMHg5YzYy LCAweGZmZmQsIDB4ZmZmZCwgMHg5YzUzLCAweDljNTIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHg5YzYzLCAweDhjNjAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTU0NiwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHg4ZGNhLCAweDk1NTYsIDB4OTJhNCwgMHg5NTZhLCAweDljNjQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGZiMiwgMHg4OTY1LCAweGZmZmQsIDB4OWM2NSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YzY2LAotICAgIDB4ZmZmZCwgMHg5NmYwLCAweGZmZmQs IDB4ZmZmZCwgMHg5NGRlLCAweGZmZmQsIDB4ZmZmZCwgMHg5YzY5LAotICAgIDB4ODk5ZCwgMHg5 MGFhLCAweDljNjgsIDB4OWM2NywgMHg4YzYxLCAweDkxZDIsIDB4ZmZmZCwgMHg5YzZkLAotICAg IDB4OWM2YiwgMHhmZmZkLCAweDljNmEsIDB4OTdhNSwgMHg4Y2UzLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4OGY5OSwgMHg5YzZjLCAweDkzNmIsIDB4OGY1ZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5M2JlLAotICAgIDB4OWM3MCwgMHg5YzZmLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OWM2ZSwgMHhmZmZkLAotICAgIDB4OWM3MSwgMHg4Y2U0LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWM3Miwg MHg5NTljLCAweDhmN2EsIDB4ZmZmZCwgMHhmZmZkLCAweDljNzMsIDB4OTRmNywgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTNiZiwgMHg5MmE1LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5MzRmLCAweGZmZmQsIDB4ZmZmZCwgMHg5Yzc0LCAw eDhiNGEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTA1 MywgMHhmZmZkLCAweDk1NGIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4YWY1LCAweDk0NDUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWM3NSwgMHg4ZTc1 LAotICAgIDB4OTY1OSwgMHg5NjVhLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTllLCAweDljN2EsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4OTI4OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Yzc3 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ODlmNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWNhYiwgMHg5Yzc5 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0NGYsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OWM3OCwgMHhmZmZkLCAweGZmZmQsIDB4OWM3NiwgMHhmZmZkLCAweDhkOWEsIDB4ZmZmZCwgMHg5 YzdjLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OWM4MywgMHg5Yzg5LAotICAgIDB4OWM4MSwgMHhmZmZkLCAweDkzN2Is IDB4ZmZmZCwgMHhmZmZkLCAweDljODYsIDB4OTU3YywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5 YzgwLCAweGZmZmQsIDB4OWM4NSwgMHg5N2U1LCAweDhlNzYsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4OTFkMywgMHg5YzdkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiN2QsIDB4OWM4OCwg MHg5MGFiLAotICAgIDB4ODk4NSwgMHg5YzgyLCAweDg5ZjYsIDB4OWM4NywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4YmFmLAotICAgIDB4ZmZmZCwgMHg5Yzg0LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlj OGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg5YzhjLCAweDljOTYsIDB4OWM5NCwgMHhmZmZkLCAweGZmZmQsIDB4OWM5MSwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDljOTAsIDB4OTdmNiwgMHhmZmZkLCAweDljOTIsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4OGJiMCwgMHhmZmZkLCAweDhkNTAsIDB4ZmZmZCwgMHhmZmZkLCAw eDhmOWEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5Yzk5LCAweDljOGIsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YzhmLAotICAgIDB4OWM3ZSwgMHhmZmZkLCAw eDg5ZjgsIDB4OWM5MywgMHg5Yzk1LCAweDkyNzAsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGRh NiwgMHg4OWI2LCAweDljOGQsIDB4OWM5OCwgMHg5Yzk3LCAweDhiYjEsIDB4ZmZmZCwgMHg5MWE3 LAotICAgIDB4OGE4NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjNjIsIDB4 ZmZmZCwgMHg5YzhlLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5YzlhLCAweGZmZmQsIDB4 OWM5ZCwgMHg5YzlmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4ZWJi LCAweGZmZmQsIDB4OWNhNSwgMHg5MmVlLCAweDljOWIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDljYTMsIDB4ZmZmZCwgMHg4OWY3LCAweGZmZmQsIDB4OWNhMSwgMHg5 Y2EyLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDljOWUsIDB4OWNhMCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg4Y2U1LAotICAgIDB4OTc0OSwgMHhmZmZkLCAweGZmZmQsIDB4OGFiMywgMHhm ZmZkLCAweGZmZmQsIDB4ODk3OCwgMHg5Y2E0LAotICAgIDB4ZmZmZCwgMHg5NDU5LCAweDg4YWIs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDk0ZGYsIDB4OWM3YiwgMHg5Y2FhLCAweDljYWUsIDB4OTZlMywgMHhmZmZkLAotICAg IDB4OWNhNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Mzg5LCAweDljYWMsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhm ZWUsIDB4OWNhZCwgMHg5M2Q1LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ODY2LCAweGZm ZmQsIDB4OWNhOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWNhZiwg MHhmZmZkLCAweDhkOWIsIDB4ZmZmZCwgMHg5MGM5LCAweGZmZmQsIDB4ZmZmZCwgMHg4OGQyLAot ICAgIDB4OWNhOCwgMHg5Y2E2LCAweGZmZmQsIDB4OTE3OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5YzljLAotICAgIDB4OGU1MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTFjNCwgMHg5Y2JiLCAweGZmZmQsIDB4OTE3 YSwgMHg5Y2I2LCAweGZmZmQsIDB4OWNiMywgMHg5Y2I0LAotICAgIDB4ZmZmZCwgMHg4ZWU0LCAw eDljYjcsIDB4OWNiYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWNi NSwgMHg4ZjQ0LCAweGZmZmQsIDB4OWNiOCwgMHhmZmZkLCAweGZmZmQsIDB4OWNiMiwgMHhmZmZk LAotICAgIDB4OTZmYSwgMHg5NmY5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDljYmMsIDB4 OWNiZCwgMHg4OGQzLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDljYjEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhiZjAsIDB4 ODhhNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWI0LAotICAgIDB4ZmZmZCwgMHg5Y2I5 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2MxLAotICAgIDB4 OWNjMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2M1LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2M2LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 Y2M0LCAweDljYzcsIDB4OWNiZiwgMHg5Y2MzLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDljYzgs IDB4ZmZmZCwgMHg5Y2M5LCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2JlLAotICAgIDB4OGU5YywgMHhm ZmZkLCAweDljYzIsIDB4OTFkNCwgMHg4ZDUxLCAweDljYjAsIDB4OTA1NCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWNkNiwgMHhmZmZkLCAweDk1ZTcsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4OWNjYywgMHg5Y2NkLCAweDljY2UsIDB4ZmZmZCwgMHhmZmZkLCAweDlj ZDUsIDB4ZmZmZCwgMHg5Y2Q0LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2OWQsIDB4OGFiNSwg MHhmZmZkLCAweDljZDIsIDB4ZmZmZCwgMHg4YzY0LAotICAgIDB4OGE1MywgMHhmZmZkLCAweGZm ZmQsIDB4OWNjZiwgMHhmZmZkLCAweGZmZmQsIDB4OTdiNiwgMHg5Y2QxLAotICAgIDB4ODhkNCwg MHg5Y2QzLCAweGZmZmQsIDB4OWNjYSwgMHg5Y2QwLCAweDljZDcsIDB4OGM2MywgMHg5Y2NiLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTc3 YywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3NGEsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5Y2RhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDljZGUsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE5ZSwgMHhmZmZkLAotICAgIDB4OTdmNywgMHg5Y2RmLCAw eGZmZmQsIDB4ZmZmZCwgMHg5Y2RjLCAweGZmZmQsIDB4OWNkOSwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHg5Y2Q4LCAweDljZGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWFlLCAweGZmZmQsIDB4 ZmZmZCwgMHg5M2IyLAotICAgIDB4ZmZmZCwgMHg4YzY1LCAweGZmZmQsIDB4OWNlMCwgMHg5Y2Ri LCAweGZmZmQsIDB4OWNlMSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhjOWIsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODlhZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDljZTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFiNiwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWNlNywgMHhmZmZkLCAweGZmZmQsIDB4OWNlOCwgMHg4 ZGE3LAotICAgIDB4OWNlNiwgMHg5Y2U0LCAweDljZTMsIDB4OWNlYSwgMHg5Y2UyLCAweDljZWMs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ODlmOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OWNlZSwgMHhmZmZkLCAweGZmZmQsIDB4OWNlZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkyYTYsIDB4ZmZmZCwgMHg5Y2YxLCAweGZm ZmQsIDB4OWNlZiwgMHg5Y2U1LAotICAgIDB4OGM5YywgMHhmZmZkLCAweDljZjAsIDB4ZmZmZCwg MHg5Y2Y0LCAweDljZjMsIDB4OWNmNSwgMHg5Y2YyLAotICAgIDB4OWNmNiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWNmNywg MHg5Y2Y4LCAweDk1ZTgsIDB4ZmZmZCwgMHg5Y2ZhLCAweDljZjksIDB4OGY1ZSwgMHhmZmZkLAot ICAgIDB4OTBhYywgMHg4OWU0LCAweDg5ZmEsIDB4ZmZmZCwgMHg5Y2ZiLCAweGZmZmQsIDB4ODhi ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkwY2EsIDB4OWNmYywgMHhmZmZkLCAw eGU2YzEsIDB4OWQ0MCwgMHg4YzgxLAotICAgIDB4ZmZmZCwgMHg5ZDQxLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBlZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDlkNDIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWQ0MywgMHg4YjU5LAotICAgIDB4OWQ0 NCwgMHhmZmZkLCAweDlkNDUsIDB4OWQ0NiwgMHg5MWQ1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4OGNjYiwgMHhmZmZkLCAweGZmZmQsIDB4OTZkZiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5NjViLAotICAgIDB4OGY4YSwgMHg5ZDQ3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5MGVlLAotICAgIDB4ZTdiYiwgMHg5NGUwLCAweGZmZmQsIDB4 OGVlOCwgMHhmZmZkLCAweDhkY2IsIDB4OWQ0OCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTFjNSwgMHhmZmZkLCAweDk1YTUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OTFlZiwgMHhmZmZkLCAweGZmZmQsIDB4OWQ0YiwgMHhmZmZkLCAweGZmZmQsIDB4OWQ0OSwgMHhm ZmZkLAotICAgIDB4OWQ0YywgMHhmZmZkLCAweGZmZmQsIDB4OWQ0YSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWQ0ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTVhZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4OGI1LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTU3ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5 NGUxLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDRlLCAweGZmZmQsIDB4OWQ1MSwgMHg4ZmIzLAotICAg IDB4OGI1YSwgMHhmZmZkLCAweDlkNGYsIDB4OWQ1NiwgMHg4ZmI0LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZDUwLCAweDk0NjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NzdkLCAweDlkNTIsIDB4OWQ1Mywg MHg5ZDU3LCAweDkzOGEsIDB4OWQ1NCwgMHg4ZDUyLAotICAgIDB4OTBkYywgMHhmZmZkLCAweGZm ZmQsIDB4OWQ2NSwgMHg5NGIyLCAweGZmZmQsIDB4OTFmMCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRlMiwgMHg5ZGFiLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NWY4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDkyZWYsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5Njk1LCAweGZmZmQsIDB4OWQ1 YSwgMHg4OTlmLCAweDkyOGEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDlkNjMsIDB4ZmZmZCwgMHhmZmZkLCAweDkyNTMsIDB4OWQ1ZCwgMHg5ZDY0LAotICAgIDB4OWQ1 ZiwgMHg5ZDY2LCAweDlkNjIsIDB4ZmZmZCwgMHg5ZDYxLCAweDk0OGYsIDB4ZmZmZCwgMHg5ZDVi LAotICAgIDB4ODlmYiwgMHg5ZDU5LCAweDhiOTEsIDB4OTFmMSwgMHg5ZDU1LCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZDU4LAotICAgIDB4OGQ1MywgMHg5MGQ5LCAweGZmZmQsIDB4OGZiNSwgMHg5ZDYw LCAweDk0NzEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGI5MiwgMHg4YTY3LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4YTg3LCAweDkwNDAsIDB4OWQ2OCwgMHg5ZDZkLAotICAgIDB4 ZmZmZCwgMHg5ZDY5LCAweGZmZmQsIDB4OGM5ZCwgMHhmZmZkLCAweDlkNmUsIDB4OGU0MSwgMHg4 ZDg5LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGY0NSwgMHg5ZDVjLAotICAgIDB4ZmZmZCwgMHg4ZTlkLCAweDlkNmIsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTc3LAotICAgIDB4OWQ2YywgMHg4OGMyLCAweGZmZmQs IDB4ZmZmZCwgMHg5ZDY3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5 MmE3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHg4YjkzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4YmIyLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5ZDZhLAotICAgIDB4ODhhNSwgMHhmZmZkLCAweGZmZmQsIDB4OGRjMSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MDU1LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweDkyZjAsIDB4ZmZmZCwgMHhmZmZkLCAweDk0ZDIsIDB4OWQ3MCwgMHg5MTdkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5MWE4LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTRhLCAw eDlkNzEsIDB4ZmZmZCwgMHg5ZDczLAotICAgIDB4OWQ2ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDk1ZGYsIDB4ZmZmZCwgMHg5MmJiLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MTdiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWY5 LAotICAgIDB4OGVjYywgMHg5ZDgwLCAweGZmZmQsIDB4OWQ3ZSwgMHhmZmZkLCAweGZmZmQsIDB4 OTA5OCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhjOWUsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OWQ3OCwgMHg4ZmI3LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkzZTYsIDB4 OTQ1MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWQ3NiwgMHhmZmZk LCAweGZmZmQsIDB4OTE3YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OGVmNiwgMHg5ZDdiLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmI2LCAweGZmZmQsIDB4OWQ3NSwgMHg5 ZDdhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk0NzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWQ3NCwgMHhmZmZkLAotICAgIDB4OGM0MCwgMHhmZmZkLCAweGZmZmQsIDB4OGE3YywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDdjLAotICAgIDB4OTdhOSwgMHg4ZGNjLCAweDkyNTQs IDB4OWQ3OSwgMHhmZmZkLCAweDkwZGEsIDB4ZmZmZCwgMHg4ZDU0LAotICAgIDB4OTA4NCwgMHg4 OTg2LCAweDkxNWIsIDB4OWQ3NywgMHg4YjY0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweDhjNjYsIDB4ZmZmZCwgMHg5MmNkLCAweDlkN2QsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE3ZSwgMHhmZmZkLCAweGZm ZmQsIDB4OWQ4MSwgMHhmZmZkLAotICAgIDB4OWQ4MywgMHhmZmZkLCAweGZmZmQsIDB4OTFiNSwg MHg5ZDg5LCAweGZmZmQsIDB4OWQ4NCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZDg2LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTYwLAotICAgIDB4OTJmMSwg MHhmZmZkLCAweDlkODcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTc0YiwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3NjcsIDB4OGFiNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4OGFjLCAweGZmZmQsIDB4OWQ4NSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZDgyLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFmNiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4OTg3LCAweGZmZmQsIDB4OWQ4OCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDk3NjgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OWQ4YywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDkxYjksIDB4ZmZmZCwgMHg5ZDkzLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OWQ4ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWQ4YSwgMHg5ZDkxLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDcyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWQ4ZSwgMHhm ZmZkLAotICAgIDB4OWQ5MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGMwLCAweDkzOGIs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 ZDhiLCAweGZmZmQsIDB4OWQ4ZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhjNjcs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGRlZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDkwZGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWQ5Nywg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTM0NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDk0LAotICAgIDB4ZmZmZCwg MHg5NjgwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDk1LAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWQ5 NiwgMHhmZmZkLAotICAgIDB4OTZjYywgMHhmZmZkLCAweDkwYTAsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM4 MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWQ5ZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDhlNTQsIDB4OWQ5YSwgMHhmZmZkLCAweDlkOTksIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk0NTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTNiMywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MzUw LCAweDlkOWIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZDljLCAweGZmZmQsIDB4 OTU4ZiwgMHhmZmZkLCAweDk0NjQsIDB4OGU0MiwgMHhmZmZkLAotICAgIDB4OTBlZiwgMHhmZmZk LCAweDk2NmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHg4YTY4LCAweGZmZmQsIDB4OWRhMywgMHg5ZDllLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHg5NzY5LCAweDlkYTUsIDB4ZmZmZCwgMHhmZmZkLCAweDlkYTEs IDB4ZmZmZCwgMHg5ZGEyLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDkxODAsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlkYTAs IDB4ZmZmZCwgMHg5ZDVlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWRhNCwgMHhm ZmZkLCAweDlkOWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4OWRhOSwgMHg5ZGFhLCAweDkzNDYsIDB4OWRhYywgMHhmZmZkLCAweGZmZmQsIDB4OGU0Mywg MHg5ZGE3LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjViLCAweGZm ZmQsIDB4ZmZmZCwgMHg5ZGFkLAotICAgIDB4ZmZmZCwgMHg5ZGE2LCAweDlkYjEsIDB4ZmZmZCwg MHg5ZGIwLCAweGZmZmQsIDB4OWRhZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlk YjIsIDB4ZmZmZCwgMHhmZmZkLCAweDlkYjQsIDB4OGZlZiwgMHhmZmZkLAotICAgIDB4OWRiMywg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkYjcsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWRiNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZGI2LCAweDlkOTAsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWRiOSwgMHg5ZGI4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDlkOTgsIDB4OWRiYSwgMHg5ZGFlLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTc4 LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGJiLCAweDlkYmMsIDB4 OWRiZSwgMHg5ZGJkLAotICAgIDB4OWRiZiwgMHg4OWZjLCAweGZmZmQsIDB4OGQ1NSwgMHhmZmZk LCAweGZmZmQsIDB4OTVmYSwgMHg5MGFkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDhjY2MsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWRjMSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkYzQsIDB4ZmZmZCwgMHg5NTcxLAotICAgIDB4 ZmZmZCwgMHg4YjdlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkYzMsIDB4OWRjMiwgMHg5 NDczLAotICAgIDB4OWRjNSwgMHg4YmIzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkYzcs IDB4OWRjNiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhhYjgsIDB4OGU1NSwgMHhm ZmZkLCAweGZmZmQsIDB4OTNkNiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg4YzY4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTA5NCwgMHhm ZmZkLCAweDlkYzgsIDB4ZmZmZCwgMHg5MGFlLCAweDkzNDcsIDB4ZmZmZCwgMHg5NTdlLAotICAg IDB4OWRjOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlkY2EsIDB4OWRjYiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5NWI2LAotICAgIDB4OWI3YywgMHg5MGM0LCAweGZmZmQsIDB4ZmZmZCwg MHg5NTZiLCAweGZmZmQsIDB4OGRkNiwgMHhmZmZkLAotICAgIDB4OTRlMywgMHg5NGMxLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MzZjLAotICAgIDB4ZmZmZCwg MHg5N2JmLCAweGZmZmQsIDB4OWRjZCwgMHg4ZWNlLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGNlLAot ICAgIDB4ZmZmZCwgMHg4OGI0LCAweGZmZmQsIDB4ZmZmZCwgMHg4YmQyLCAweDkwY2IsIDB4ZmZm ZCwgMHg5NTgwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWRjZiwgMHg4ZTYxLCAw eDkyNjYsIDB4ZmZmZCwgMHg4ZTdhLAotICAgIDB4OTA1NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGQwLAotICAgIDB4ZmZmZCwgMHg5NWZiLCAw eGZmZmQsIDB4ZmZmZCwgMHg4OTk3LCAweDhlN2IsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHg5ZGQzLCAweGZmZmQsIDB4OWRkMSwgMHg5ZGQ0LCAweDk3YjcsIDB4OWRkMiwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBmOSwgMHg5ZGQ1LCAweGZmZmQsIDB4 ZmZmZCwgMHg5MWIwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlkZDYsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4YWY4LAotICAgIDB4ZmZmZCwgMHg5ZGQ4LCAweGZmZmQsIDB4 OWRkNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWRkOSwgMHg5ZGRh LCAweDhhZjksIDB4ZmZmZCwgMHhmZmZkLCAweDkzZmEsIDB4OTI1NSwgMHg4YjhjLAotICAgIDB4 OGU3YywgMHg5MTgxLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjdiLCAweDg4YWUsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHg5ZGRiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5YTAsIDB4OWRkZiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhkNTYs IDB4OWRkZSwgMHhmZmZkLCAweGZmZmQsIDB4OGRhOSwgMHg4ZmI4LAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDlkZGQsIDB4ZmZmZCwgMHg4ZmI5LCAweGZmZmQsIDB4OTZiZSwgMHg4ZGE4LAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODhkNSwgMHg5MGNjLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGU0LCAweGZm ZmQsIDB4ZmZmZCwgMHg5MGFmLAotICAgIDB4ODk2NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDhmNzQsIDB4ZmZmZCwgMHg5Njg2LAotICAgIDB4OGRmMCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmYmEsIDB4ZmZmZCwgMHg5MGE1LAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGUzLCAweDlkZTEsIDB4OWRlMiwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MjhiLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZTQ1LAotICAgIDB4ZmZmZCwgMHg5ZGU4LCAweDhlOWUsIDB4OGQ1NywgMHg5ZGU2LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZGU3LCAweGZmZmQsIDB4OTA1 NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGU1LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDhlNGUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkZWEsIDB4OWRlOSwgMHg5ZGVl LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlkZWYsIDB4ZmZmZCwgMHg5ZGViLCAweGZmZmQsIDB4 OGE0MSwgMHg5ZGVjLAotICAgIDB4OWRlZCwgMHg5NGQzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTU4MSwgMHg4YzY5LAotICAgIDB4OWRmMCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5MGIwLCAweGZmZmQsIDB4OGZiYiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDkyNzEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHg4YmM1LCAweGZmZmQsIDB4OWRmMSwgMHg5ZGY1LCAweGZmZmQsIDB4ZmZmZCwgMHg4 OWM5LAotICAgIDB4OWRmMiwgMHg5ZGY0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWRmMywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4ZjhiLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTI2NywgMHg4OGMzLAotICAgIDB4OWRmNiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDlkZjcsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDkyYTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTdlZiwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGU2MiwgMHhmZmZkLCAweGZmZmQsIDB4OTVlOSwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjVjLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWU0MSwgMHg5ZGY5LCAweGZmZmQsIDB4ZmZmZCwg MHg5ZGZjLCAweGZmZmQsIDB4OWRmYiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZGY4LCAweGZm ZmQsIDB4ZmZmZCwgMHg5ZTQwLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2RjLAotICAgIDB4ZmZmZCwg MHg5ZGZhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU0 MiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4ZjhjLCAweDllNDMsIDB4ZmZmZCwgMHg5NzZhLCAw eDk0OTgsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWU0NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU0NiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZTQ3LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWU0 OCwgMHhmZmZkLCAweDhiYzgsIDB4ODk2NywgMHg4ZDU4LCAweDllNDksIDB4ZmZmZCwgMHg5ZTRh LAotICAgIDB4OGY5MSwgMHg5MTgyLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWQ2LCAweDkxNWQsIDB4 OTE1YywgMHg5MWQ2LAotICAgIDB4OGRjNSwgMHhmZmZkLCAweGZmZmQsIDB4OThmMCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGM4ZSwgMHg5NzRjLCAweGZmZmQsIDB4 OTVmYywgMHhmZmZkLCAweDk1OWUsIDB4ZmZmZCwgMHg5ZTRiLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGYxLCAweDkyYmQsIDB4OWU0YywgMHg5ODRlLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY1ZCwgMHhmZmZkLCAweDkyYTksIDB4OWU0ZCwgMHg4 YWZhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWU0ZSwgMHg5ZTRmLAotICAgIDB4OTZkOCwgMHhmZmZkLCAweDk2YTIsIDB4OTY5NiwgMHg5 NjdiLCAweDhlNDQsIDB4OWU1MSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4ZWU5LCAweGZmZmQs IDB4ZmZmZCwgMHg5NjcwLCAweGZmZmQsIDB4OWU1MywgMHg5ZTU2LAotICAgIDB4OWU1NSwgMHhm ZmZkLCAweDhhZjcsIDB4ZmZmZCwgMHhmZmZkLCAweDhiODAsIDB4ZmZmZCwgMHg5ZTUyLAotICAg IDB4ZmZmZCwgMHg5ZTU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU1Nywg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5MDk5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTc5YiwgMHg4OGM3LAotICAgIDB4OGRkZSwgMHg5MWJhLCAweGZmZmQsIDB4OGVkYiwg MHhmZmZkLCAweGZmZmQsIDB4OGZmMSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZTVhLCAweGZm ZmQsIDB4ZmZmZCwgMHg5MzZkLCAweGZmZmQsIDB4OWU1OCwgMHg5MWE5LAotICAgIDB4OWU1OSwg MHg4ZmYwLCAweDk2ZGIsIDB4OWU1YiwgMHg5ZTVjLCAweDk3ODgsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllNjEsIDB4ZmZmZCwgMHhmZmZkLCAweDhkNTksIDB4ZmZm ZCwgMHg5NDc0LAotICAgIDB4OWU1ZSwgMHg5MzhjLCAweDlkZGMsIDB4OWRlMCwgMHhmZmZkLCAw eDhiNmUsIDB4ZmZmZCwgMHg5NDY2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZTYwLCAweGZmZmQsIDB4OGZiYywgMHg5NGMyLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllNjYsIDB4ZmZmZCwgMHg5NGY4LAotICAgIDB4ZmZm ZCwgMHg5ZTVkLCAweGZmZmQsIDB4OWU2MywgMHg5ZTYyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4OTBjZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2OGQsIDB4 ZmZmZCwgMHg5N2QxLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2ODcsIDB4ZmZmZCwgMHg4OWNh LCAweDhlN2QsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTg2NywgMHg5ZTY1LCAweDkwOTUsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU2NCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZTVm LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2NkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU2YiwgMHg5ZTY5LCAweGZmZmQsIDB4ODljYiwgMHg5 ZTY3LAotICAgIDB4OWU2ZCwgMHg5ZTczLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5MWM2LCAweGZmZmQsIDB4ZmZmZCwgMHg5 NWJmLCAweGZmZmQsIDB4OWU3NSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk1NDEs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU3NCwgMHg5NDkwLAotICAgIDB4OTY1ZSwgMHg4 YWI5LCAweGZmZmQsIDB4OTBmNSwgMHg4ZjVmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4OTJkMSwgMHhmZmZkLCAweDk3NGQsIDB4ZmZmZCwgMHhmZmZkLCAweDllNzAsIDB4OWU2Ziwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllNzEsIDB4ZmZmZCwgMHg5ZTZlLCAweGZm ZmQsIDB4ZmZmZCwgMHg5ZTc2LAotICAgIDB4ZmZmZCwgMHg5ZTZjLCAweGZmZmQsIDB4ZmZmZCwg MHg5ZTZhLCAweGZmZmQsIDB4OWU3MiwgMHg5ZTY4LAotICAgIDB4ZmZmZCwgMHg5MjhjLCAweGZm ZmQsIDB4OTZmNiwgMHg4ZWM0LCAweDhkZjIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OGRiOCwgMHhmZmZkLCAweGZmZmQsIDB4OTY4ZiwgMHg4YTYwLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkyY2MsIDB4OTNjOCwgMHg4OTY4LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBm MCwgMHhmZmZkLCAweGZmZmQsIDB4OTBiMiwgMHg4YzQ5LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU3OCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHg4ZDVhLCAweDhhOWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHg5ZTdhLCAweDhhOTQsIDB4OWU4MSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllN2QsIDB4ZmZmZCwgMHg5MGYx LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGE2YSwgMHg4ZGFhLCAweGZmZmQsIDB4 ZmZmZCwgMHg4YTY5LCAweDhkY2QsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWU3YiwgMHg4Yzg1 LCAweDhjNmEsIDB4OTM4ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU3OSwgMHhmZmZkLAotICAgIDB4 ODhjNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllN2MsIDB4OWU3ZSwgMHhm ZmZkLAotICAgIDB4OGJjYiwgMHg4YzRiLCAweGZmZmQsIDB4OGFiYSwgMHg4YjZhLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZTgyLCAweGZmZmQsIDB4ZmZmZCwgMHg4 ZGY3LCAweDk2OTEsIDB4ZmZmZCwgMHg4ZTU2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWU4MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTRmLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZThmLCAweGZmZmQsIDB4ODliMSwg MHg5ZTg0LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWU5NSwgMHg5ZTg1LAotICAgIDB4ZmZmZCwgMHg5N2MwLCAweGZmZmQsIDB4OWU4Yywg MHhmZmZkLCAweDk0N2UsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllOTQsIDB4ZmZmZCwgMHg5ZTg3LAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ODhiMiwgMHg5ZTg5LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZDViLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU4YiwgMHhmZmZkLCAweDllOGEsIDB4ZmZm ZCwgMHg5ZTg2LAotICAgIDB4OWU5MSwgMHhmZmZkLCAweDhmYmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWFlYiwgMHg4Y2U2LAotICAgIDB4OTc5YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDllODgsIDB4ZmZmZCwgMHg5MmYyLAotICAgIDB4OGE0MiwgMHg4ZGFiLCAw eGZmZmQsIDB4OWU4MCwgMHhmZmZkLCAweDllOTAsIDB4OGE4MSwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHg5ZThlLCAweDllOTIsIDB4ZmZmZCwgMHg5MzhlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWZjLCAweGZmZmQsIDB4 OWViMCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NmM3LCAweDllOTcsIDB4OGFmYiwgMHhmZmZk LCAweDllOWUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2NWYsIDB4 ZmZmZCwgMHg5ZTlmLCAweDllYTEsIDB4ZmZmZCwgMHg5ZWE1LAotICAgIDB4OWU5OSwgMHhmZmZk LCAweDkyNDksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MzhmLAotICAgIDB4 OWVhOSwgMHg5ZTljLCAweGZmZmQsIDB4OWVhNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 ZWEwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTA1OCwgMHg5ZWFhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkwYjEsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZWE4LCAweDhhYmIs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTg2ZiwgMHg5 ZTk2LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWE0LCAweDg4ZDYsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4OWU5OCwgMHhmZmZkLCAweGZmZmQsIDB4OTZiOCwgMHg5ZTlkLCAweDkwNDEsIDB4OTJjNSwg MHg5ZTkzLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllYTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5MDlhLCAweDllYWQsIDB4OGE5MSwg MHg4YzlmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZWFmLCAweDll OWEsIDB4OWVhZSwgMHhmZmZkLCAweDllYTcsIDB4OWU5YiwgMHhmZmZkLAotICAgIDB4OWVhYiwg MHhmZmZkLCAweDllYWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4OWViZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2NjLCAweGZmZmQsIDB4OWVh MiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZWI5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDllYmIsIDB4ZmZmZCwgMHg5MmQ2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDk3NmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTU5NiwgMHg5ZWI2LCAweDkxYzgsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHg5ZWJjLCAweDkxNWUsIDB4ZmZmZCwgMHg5ZWIzLCAweDllYzAsIDB4 OWViZiwgMHhmZmZkLAotICAgIDB4OTNlZCwgMHg5ZWJlLCAweDkzZTgsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllYzIsIDB4 OWViNSwgMHhmZmZkLCAweDhiYzYsIDB4OWViOCwgMHg4ZjdjLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTQ4MCwgMHg5ZWJhLCAweDhiYzksIDB4ZmZmZCwgMHg5ZWIyLAotICAgIDB4 OWViNCwgMHg5ZWIxLCAweGZmZmQsIDB4ZmZmZCwgMHg5ODRmLCAweDhhNzksIDB4OWViNywgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHg5ZWMxLCAweDhhNTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhkZTUsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ODk3YywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZWQyLCAweGZmZmQs IDB4ZmZmZCwgMHg5ODUwLCAweDllZDUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTA1OSwgMHg5ZWQ0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4OWVkMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5ZWQwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWVjNCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZWUxLCAweDllYzMsIDB4ZmZmZCwg MHg5ZWQ2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWVjZSwgMHhmZmZkLCAweGZmZmQsIDB4OWVjOSwgMHg5ZWM2LAotICAgIDB4ZmZmZCwg MHg5ZWM3LCAweGZmZmQsIDB4OWVjZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYWEwLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllY2MsIDB4OGQ1YywgMHg5MmM2LCAweDkxODQsIDB4OWVj YSwgMHhmZmZkLAotICAgIDB4OWVjNSwgMHhmZmZkLCAweGZmZmQsIDB4OWVjOCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTc2YywgMHg5NjhhLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDllY2QsIDB4OWVkNywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWRmLAotICAgIDB4OWVk OCwgMHhmZmZkLCAweGZmZmQsIDB4OWVlNSwgMHhmZmZkLCAweDllZTMsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllZGUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZWRkLCAweGZmZmQsIDB4OTJjZSwgMHhmZmZk LCAweDkxODUsIDB4ZmZmZCwgMHg5ZWRiLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllZDksIDB4 ZmZmZCwgMHhmZmZkLCAweDllZTAsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDllZTYsIDB4OTRmMywgMHg5ZWVjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDllZTcsIDB4OWVlYSwgMHg5ZWU0LCAweGZmZmQsIDB4ZmZmZCwgMHg5 Mjk0LAotICAgIDB4ZmZmZCwgMHg5NTU3LCAweGZmZmQsIDB4OWVkYSwgMHhmZmZkLCAweGZmZmQs IDB4OWVlMiwgMHg4ZmJlLAotICAgIDB4ZmZmZCwgMHg5NmNkLCAweDllZjYsIDB4OWVlOSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4Y2EwLCAweDg5YTEs IDB4OGE3ZSwgMHhmZmZkLCAweGZmZmQsIDB4OWVkMSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmYmYsIDB4OWVlZSwgMHhmZmZkLAotICAg IDB4OWVmNSwgMHg4ZWY3LCAweDhhOTIsIDB4ZmZmZCwgMHhmZmZkLCAweDkyNGQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWViLCAweGZm ZmQsIDB4ZmZmZCwgMHg5ZWYwLAotICAgIDB4OWVmNCwgMHhmZmZkLCAweGZmZmQsIDB4OGJiNCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGI2Yiwg MHg5ZWYyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjQwLAot ICAgIDB4ZmZmZCwgMHg5M2M5LCAweDllZjEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWVm MywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllZWQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWVlZiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTgwLAotICAgIDB4OTI2 OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWZhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllZjgsIDB4 OGNlNywgMHhmZmZkLAotICAgIDB4OWVmNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjQwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZTc3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWVmOSwgMHhmZmZk LCAweDllZmIsIDB4OWVmYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDlmNGIsIDB4ZmZmZCwgMHg5ZjQ3LCAweGZmZmQsIDB4OWU4ZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY0NiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWY0NSwgMHhmZmZkLCAweGZmZmQsIDB4OWY0MiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZWU4LCAweDlmNDQs IDB4OWY0MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHg5ZjQ5LCAweGZmZmQsIDB4OTg0NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlmNGMsIDB4OGJmOSwgMHhmZmZkLCAweGZm ZmQsIDB4OWY0OCwgMHg5ZjRhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTRhNSwgMHhmZmZkLCAweDlm NGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlmNTEsIDB4OWY0ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NzkzLCAw eDlmNGYsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllZGMsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDlmNTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY1MywgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5NTQsIDB4ZmZmZCwgMHg5ZjU1 LAotICAgIDB4OGM4NywgMHg4ZTlmLCAweGZmZmQsIDB4OGJkMywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4OWEyLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3N2UsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjU3LAotICAgIDB4OWY1NiwgMHg5ZjU5 LCAweDhiNWMsIDB4ZmZmZCwgMHhmZmZkLCAweDhiZDQsIDB4OGFiYywgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY1YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 ZjViLAotICAgIDB4ZmZmZCwgMHg5ZjVkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OWNjLCAweGZmZmQs IDB4OTI1NiwgMHhmZmZkLAotICAgIDB4OWY1ZSwgMHhmZmZkLCAweGZmZmQsIDB4OGFiZCwgMHg5 ZjYwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZjVmLCAweGZmZmQs IDB4OWY2MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjYyLAotICAgIDB4ZmZmZCwgMHg5 ZjYzLCAweDhlN2UsIDB4OTBiMywgMHg4ZDlmLCAweGZmZmQsIDB4OTU5MCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHg5NWUwLCAweDk4NjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4ZTk1LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGRjZSwgMHg5N2YwLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWY2NCwgMHg5ZjY1LCAweGZmZmQsIDB4OGU4MCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjY2LAotICAgIDB4OWY2NywgMHhmZmZkLCAweGZm ZmQsIDB4OWY2OSwgMHg5ZjY4LCAweGZmZmQsIDB4OTY3NywgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg4ZjdkLCAweDhlZWEsIDB4OGU2MywgMHhmZmZkLCAweDlmNmEsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmNmMsIDB4OTA0 MiwgMHhmZmZkLAotICAgIDB4OWY2YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWY2ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZjZlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDlmNmYsIDB4OWY3MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjcxLAotICAgIDB4ZmZm ZCwgMHg5ZjczLCAweDlmNzIsIDB4OWY3NCwgMHg4OWEzLCAweDkyNjksIDB4ZmZmZCwgMHg5Zjc1 LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhlNDUsIDB4OGE2YiwgMHg5Zjc2LCAweGZmZmQsIDB4 ZmZmZCwgMHg5MzYxLAotICAgIDB4OWFjYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDhiNDIsIDB4OWY3NywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OWY3OCwgMHhmZmZkLCAweDk1ZWEsIDB4OTY4OCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDkzYzUsIDB4OWY3OSwgMHg5NGU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OTRmOSwgMHhmZmZkLCAweGZmZmQsIDB4OTZkMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 ZjdhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY3YywgMHg5 ZjdiLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjdlLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWY3ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4OWY4MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4ZTgxLAotICAgIDB4ZmZmZCwgMHg5NmFmLCAweGZmZmQsIDB4OWY4Miwg MHg5ZjgzLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjQzLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWY4NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OWY4NiwgMHg5Zjg1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MDg1LCAw eGZmZmQsIDB4ZmZmZCwgMHg5NTU4LAotICAgIDB4ODk2OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRjMywgMHhmZmZkLAotICAgIDB4OTJmMywgMHg4ZjYwLCAw eDhiODEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRjNCwgMHhmZmZk LAotICAgIDB4OGVhYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmODgsIDB4 ZmZmZCwgMHg4YWJlLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5OTgsIDB4ZmZmZCwgMHhmZmZk LCAweDkzZjAsIDB4OWY4NywgMHg4ZDVkLAotICAgIDB4OTI3MiwgMHhmZmZkLCAweDlmODksIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWY5MSwgMHhmZmZk LCAweDlmOGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OTFiZiwgMHhmZmZkLCAweDhiODIsIDB4OWY5MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhjODgsIDB4ZmZmZCwgMHhmZmZkLCAweDhiNDQs IDB4OWY5MCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZjhlLCAweDlmOGIsIDB4OTc4MCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTJiZSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5M2Q3LCAweDlmOGMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWY5NCwgMHhm ZmZkLCAweDlmOTMsIDB4OGM0MiwgMHhmZmZkLCAweGZmZmQsIDB4ODlhYiwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHg4ZGI5LCAweDlmOGQsIDB4OWY4ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5Njc2LCAweDkxZjIsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY5Nywg MHhmZmZkLCAweGZmZmQsIDB4OWY5YywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZjlkLCAweGZm ZmQsIDB4ODljZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTVhNiwg MHg5NmZiLCAweDlmOWYsIDB4OGVhMSwgMHg4ZmMwLCAweDlmOTgsIDB4OWY5ZSwgMHg4OTg4LAot ICAgIDB4ZmZmZCwgMHg4YmI1LCAweGZmZmQsIDB4ZmZmZCwgMHg5Zjk1LCAweDlmOWEsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5MGYyLCAweDk0OTEsIDB4ZmZmZCwgMHg5NGU1LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY5 NywgMHhmZmZkLCAweDk2NDAsIDB4ZmZmZCwgMHg5Zjk5LAotICAgIDB4ZmZmZCwgMHg5ZmEyLCAw eGZmZmQsIDB4OWZhMCwgMHhmZmZkLCAweDlmOWIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHg5NjQxLCAweDk0NjcsIDB4OGI4MywgMHhmZmZkLCAweDkzNDQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4OTI4ZCwgMHhmZmZkLCAweDlmYTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZmExLAotICAgIDB4OTFkNywgMHg5Zjk2LCAweGZmZmQsIDB4ODk2YSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTc2ZCwgMHg5ZmFlLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlmYWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5MGY0LAotICAgIDB4ZmZmZCwgMHg5ZmFhLCAweGZmZmQsIDB4OTc4YywgMHhm ZmZkLCAweGZmZmQsIDB4OTNiNCwgMHg5ZmE0LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDkyYzMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4 OTZiLCAweDhkNWUsIDB4OWZhNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweDhmNDYsIDB4OWZhYywgMHhmZmZkLCAweDlmYWIsIDB4OWZhNiwg MHhmZmZkLAotICAgIDB4OWZhOSwgMHhmZmZkLCAweGZmZmQsIDB4OGE4OCwgMHhmZmZkLCAweDlm YTgsIDB4OTQ2OCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5N2FjLCAweGZmZmQsIDB4ZmZmZCwg MHg4ZmYyLCAweDkwZjMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHg5ZmI0LCAweDlmYjIsIDB4ZmZmZCwgMHg5NTZjLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZhZiwgMHg5ZmIxLCAw eGZmZmQsIDB4ODk1OSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4ZDVmLCAweDk4NTEsIDB4ZmZm ZCwgMHg4YTVjLCAweGZmZmQsIDB4OTU4MiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5NzgxLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTQzLAotICAgIDB4OTA1 YSwgMHg5ZmIzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmYjgsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4OGZjMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NzRm LCAweGZmZmQsIDB4OWZiNSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OWZiMCwgMHhmZmZkLCAweDlmYjYsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5N2Rj LCAweGZmZmQsIDB4OTM5MywgMHg5M2MwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg4YTU1LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5NzQsIDB4ZmZmZCwgMHhm ZmZkLCAweDlmYmMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OWZiZiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5N2MxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTc4NCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmYzYsIDB4OWZjMCwgMHg5ZmJkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTdkMiwgMHg5ZmMzLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4ZjY5LCAweDlmYzUsIDB4ZmZmZCwgMHhmZmZkLCAweDlm Y2EsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTM5MSwgMHg5ZmM4LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OWZjMiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5MjU3LCAweGZm ZmQsIDB4ZmZmZCwgMHg5ZmM5LCAweGZmZmQsIDB4OWZiZSwgMHhmZmZkLAotICAgIDB4OWZjNCwg MHhmZmZkLCAweDlmY2IsIDB4ODhmYSwgMHg5ZmMxLCAweGZmZmQsIDB4OWZjYywgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHg5MDViLCAweGZmZmQsIDB4OGY3ZSwgMHhmZmZkLCAweDk1YTMsIDB4ZmZm ZCwgMHg4ZGFjLAotICAgIDB4ZmZmZCwgMHg5ZmI5LCAweDlmYzcsIDB4OTM1OSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDkwYjQsIDB4ZmZmZCwgMHg4YTg5LAotICAgIDB4OGRjZiwgMHg4ZmMyLCAw eDlmYmIsIDB4OGY2MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM2YiwgMHhmZmZkLCAweDlmYmEsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHg5ZmQwLCAweDhmOGQsIDB4OGNiOCwgMHhmZmZkLCAweDlmZGYsIDB4 ZmZmZCwgMHg5ZmQ5LAotICAgIDB4OGI5NCwgMHg5MzZlLCAweGZmZmQsIDB4OWZkNCwgMHg5ZmRk LCAweDg4YWQsIDB4ODk1MSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4OWI3LCAweGZmZmQsIDB4 OWZkNiwgMHg5MWFhLCAweDlmY2QsIDB4OWZjZiwgMHg4ZDYwLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OWZlMCwgMHhmZmZkLCAweDlmZGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZkMywgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZkYSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2YTksIDB4ZmZmZCwgMHhm ZmZkLCAweDlmZDgsIDB4OWZkYywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNjZSwgMHhmZmZkLAotICAgIDB4OGZjMywgMHhm ZmZkLCAweGZmZmQsIDB4OTI1OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmQyLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5NzRlLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZkNSwgMHhmZmZkLCAweGZm ZmQsIDB4OWZjZSwgMHg5MzkyLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlmZDEsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OWZkNywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTg3MCwgMHg4ZWJjLAotICAgIDB4OTY5ZSwg MHhmZmZkLCAweDlmZTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGFjLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZmVkLAotICAgIDB4OGNiOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OGY4MCwgMHhmZmZkLAotICAgIDB4OWZlMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5N2FkLCAweDhkNjEsIDB4ZmZmZCwgMHg5ZmYwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDg4ZWMsIDB4ZmZmZCwgMHhmZmZkLCAweDlmZWUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDlmZTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmU4 LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlmZWEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTc2ZSwgMHg5ZmU1LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkzNGQsIDB4ZmZmZCwgMHhmZmZk LCAweDlmZTcsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlmZWYsIDB4 ZmZmZCwgMHg5ZmU5LCAweDk2YzUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZmU0 LCAweGZmZmQsIDB4OGVhMCwgMHg5ZmZjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHg4YThhLCAweGZmZmQsIDB4OWZlNiwgMHg5ZmViLCAweDlmZWMsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxZWEs IDB4OTFkOCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5ZmY0LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmZhLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDlmZjgsIDB4ZmZmZCwgMHg5MzQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhlMDQyLAotICAg IDB4OWZmNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZmNiwg MHg5ZmRlLAotICAgIDB4ZmZmZCwgMHg4Yjk5LCAweDk1NTksIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGViZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4ZDk3LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ODUyLAotICAgIDB4ZmZmZCwgMHg5ZmYyLCAweGZm ZmQsIDB4ZTA0MSwgMHg4OTg5LCAweDkxODYsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4OTQ5OSwgMHhmZmZkLCAweDhhYmYsIDB4OTdmOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY5ZiwgMHg5MmQwLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ZmY5LCAweDlmZmIsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTE1MSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA0MCwgMHg5ZmY3LAotICAgIDB4ZmZm ZCwgMHg5ZmYxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhYzEsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Yzg5 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTA0ZSwgMHhmZmZkLCAweGZmZmQsIDB4 ZTA0OSwgMHg5MGY2LCAweGZmZmQsIDB4ZmZmZCwgMHg4YTgzLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjgxLCAweGZmZmQsIDB4ZTA1MiwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwNGIsIDB4OTJhYSwgMHhl MDQ4LAotICAgIDB4OTJkNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDZiLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTA0NSwgMHhmZmZkLCAweGUwNDQsIDB4ZmZmZCwgMHhl MDRkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTA0NywgMHhlMDQ2LCAweGUwNGMs IDB4ZmZmZCwgMHg5MDlmLCAweGZmZmQsIDB4ZTA0MywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA0ZiwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhlMDUwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4YWMwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMDU1LCAweGZmZmQsIDB4ZTA1NCwg MHhlMDU2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUw NTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg5MzYyLCAweGZmZmQsIDB4ZTA1MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhlMDU3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4OGM4MywgMHg5MWY3LCAweGUwNTEsIDB4OTQ1YSwgMHhmZmZkLCAw eGZmZmQsIDB4ZTA1OCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMDVkLCAweGUwNWIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTA1 ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZTA2MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDVh LAotICAgIDB4OGQ4YSwgMHg5NDQ3LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmI3LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTc5NCwgMHhlMDVj LCAweGZmZmQsIDB4ZTA2MCwgMHg5MWYzLAotICAgIDB4ZmZmZCwgMHhlMDVmLCAweGZmZmQsIDB4 ZTA0YSwgMHhmZmZkLCAweGZmZmQsIDB4ZTg4OSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGUwNjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA2OCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhlMDY2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhlMDYyLCAweGZmZmQsIDB4ZTA2MywgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlMDY3LAotICAgIDB4ZmZmZCwgMHhlMDY1LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk1NmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTA2ZCwgMHhmZmZkLCAweGUwNmEs IDB4ZTA2OSwgMHhmZmZkLCAweGUwNmMsIDB4OTNkMiwgMHhlMDZlLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTI5NSwgMHg5MWViLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGEzLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZTA2ZiwgMHhmZmZkLCAweGUwNzEsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTA3MCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmYzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhlMDcyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4OTNlNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA3 MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ODljZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Mzk0LAotICAgIDB4OGE0 NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4OGI4NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZWRjLCAweDhkZDAsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ODQ2LCAweDkwODYsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk4YSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGUwNzUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhlMDc0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl MDc4LCAweDkyNTksIDB4ZTA3YiwgMHhlMDc2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTA3YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTA3OSwgMHg5 MzVmLCAweDg4ZDcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4OTdmMywgMHhmZmZkLCAweGZmZmQsIDB4ZTA3ZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4OTQ3LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMDgwLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwN2UsIDB4ZmZmZCwgMHhlMDdjLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMDc3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NjQyLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGUwODIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhlMDgxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OThiLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMDg0LCAweDk1YjAsIDB4ZmZmZCwgMHhlMDgz LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NmIzLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGZjNSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE1MiwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmM0LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5N2Y5LCAweGZmZmQs IDB4ZmZmZCwgMHhlMDhhLCAweGZmZmQsIDB4OTBmNywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwODYsIDB4ZTA4YiwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHg4OThjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwODksIDB4ZmZmZCwgMHg5NDgxLCAweGUw ODUsIDB4ZTA4OCwgMHg4ZmM2LAotICAgIDB4ZmZmZCwgMHg5NGNmLCAweGZmZmQsIDB4ZmZmZCwg MHhlMDhjLCAweGZmZmQsIDB4OGVjZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwZjgsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDhmLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZTA4NywgMHhmZmZkLCAweDhjNDYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMDhkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5NzZmLCAweGUwOTAsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlYWE0LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjZlLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZTA5MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDkyLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NDRkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMDk0LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA5NSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTQ1MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OTM5NSwgMHhlMDk3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA5OSwgMHhm ZmZkLAotICAgIDB4OTdkMywgMHhmZmZkLCAweGUwOTYsIDB4ZmZmZCwgMHhlMDk4LCAweDg5OGQs IDB4ZmZmZCwgMHhlMDkzLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTdhLAotICAgIDB4ZTA5YSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDkxODcsIDB4OGU1NywgMHhlMDljLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDliLCAweDkwNDMsIDB4OTlkNywgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwOWQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMDlmLCAweGZmZmQsIDB4ZTA4ZSwgMHhlMDllLCAweGZm ZmQsIDB4ZmZmZCwgMHhlMGEwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTQ5YSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwYTEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTBhMiwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBhMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTBhNCwgMHhmZmZkLCAweDkyZGMsIDB4ZmZm ZCwgMHhlMGE2LCAweGUwYTUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTBhNywgMHhmZmZkLCAw eGUwYTgsIDB4ZmZmZCwgMHhmZmZkLCAweDhlZGQsIDB4OTU4MywgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDk2ZWEsIDB4ZTBhOSwgMHhlMGFhLCAweDkxNzUsIDB4OGVhMiwgMHhlMGFi LAotICAgIDB4ZTBhYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTBhZCwgMHg5NWQwLAotICAgIDB4OTRjNSwgMHhmZmZkLCAweGZmZmQsIDB4ZTBhZSwgMHg5NDc2 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkyYWIsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTBhZiwgMHg4OWU1 LCAweGZmZmQsIDB4OGI4ZCwgMHhmZmZkLCAweDk2YzQsIDB4ZmZmZCwgMHg5NmI0LAotICAgIDB4 ZmZmZCwgMHg4OWIyLCAweDk4NTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 NjcxLAotICAgIDB4ZmZmZCwgMHg5NWE4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkwYjUsIDB4ZmZmZCwgMHhl MGIwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5M2MxLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDhjYTEsIDB4ZTBiMSwgMHhmZmZkLAotICAgIDB4OGRkMiwgMHhl MGIzLCAweGUwYjIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGI0LAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwYjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTBiNiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGI1ZCwgMHhmZmZkLCAweGUw YjcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGI4LAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2EyLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGM2LAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwYmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGZm MywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMGI5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhiYjYsIDB4ZTBi YiwgMHhlMGJkLCAweGZmZmQsIDB4ZTBiYywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBiZSwgMHhmZmZkLAotICAgIDB4OGNj ZiwgMHhmZmZkLCAweGUwYmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YmU3 LAotICAgIDB4ZmZmZCwgMHg5MTVmLCAweGZmZmQsIDB4OGQ5ZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTBjMSwgMHhlMGMyLCAweGUwYzAsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4ZWViLCAweGZmZmQsIDB4 ZmZmZCwgMHg5M2M2LCAweDhiYjcsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGM0LAotICAgIDB4 OTI0YiwgMHhlMGMzLCAweGZmZmQsIDB4ZmZmZCwgMHg5ODU0LCAweDk0ODIsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwYzcsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBjOSwgMHhlMGM2LAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTZkMiwgMHhlMGM4LCAweGUwY2EsIDB4ZmZmZCwgMHg5N2MyLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwY2UsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMGNkLCAweDkyOTYsIDB4OTQ0YywgMHhmZmZkLCAweGZm ZmQsIDB4OGNhMywgMHhlMGNjLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlMGNiLCAweGZmZmQsIDB4OTc1MCwgMHg5NzUxLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBjZiwgMHg4OThlLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZDk2LCAweDhlODIsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBk MCwgMHhlMGQxLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMGQzLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OGY2MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTBk NSwgMHhmZmZkLCAweGUwZDQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZTBkNiwgMHhmZmZkLCAweDhhNmMsIDB4ZmZmZCwgMHhmZmZkLCAweGUwZDgsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTBkNywgMHhmZmZkLCAweGUwZGEsIDB4ZTBkOSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4Y2JhLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2E2LAotICAgIDB4ZmZmZCwgMHg4YmNh LCAweGZmZmQsIDB4ODlhNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGJlOCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4YWRmLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDk3ZTYsIDB4ZTBkYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBkZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZTBkZiwgMHhmZmZkLCAweDg5Y2YsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTBkYiwgMHhmZmZkLCAweDhlNTgsIDB4ZmZmZCwg MHhmZmZkLCAweDkyYmYsIDB4ZTBkZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBlMiwgMHhmZmZkLAot ICAgIDB4OGVlYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwZTAsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhjNWQsIDB4ZmZmZCwgMHhmZmZkLCAw eDk0YzcsIDB4ZTBlMSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMGZjLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTBlNywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNiYiwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI4NSwgMHhmZmZkLCAweGUwZTQsIDB4OTc5ZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHg5N2FlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDkxZjQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwZTYsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwZTgsIDB4OTdkNCwgMHg4YmQ1LCAweDk0ZmEs IDB4OTQ2OSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwZTksIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGViLAotICAgIDB4ZmZmZCwgMHhlMGVlLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwZWEsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMGVkLCAweDhjZTgsIDB4ODk2YywgMHhlMGVmLCAweGZm ZmQsIDB4OTA5MCwgMHhlMGVjLAotICAgIDB4OTdkYSwgMHhmZmZkLCAweGZmZmQsIDB4ZTBmMiwg MHhlYWEyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMGYwLCAweGUw ZjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGU1LAotICAgIDB4ZTBmMSwg MHhmZmZkLCAweGZmZmQsIDB4OGRiYSwgMHhmZmZkLCAweGZmZmQsIDB4ZTBmNCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBm NSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTc5ZSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBm NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBmNywgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwZTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMGY4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGFjMiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlYTMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwZjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlMGZhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl MGZiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg4OTVhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTE0MCwgMHhm ZmZkLCAweDk1NWEsIDB4ZTE0MSwgMHhmZmZkLCAweGZmZmQsIDB4OGFhMiwgMHhlMTQyLAotICAg IDB4ZmZmZCwgMHhlMTQzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTE0NCwg MHhmZmZkLAotICAgIDB4ZTE0NiwgMHhlMTQ3LCAweGUxNDUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTU3MiwgMHhlMTQ5LAotICAgIDB4ZTE0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTE0YiwgMHhlMTRhLCAweGUxNGMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMTRkLCAweGUxNGYsIDB4ZTE0ZSwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHg4ZDk5LCAweGZmZmQsIDB4ZTE1MSwgMHhmZmZkLCAweGUxNTAsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4OGFjMywgMHhmZmZkLCAweDkwNzIsIDB4ZmZmZCwgMHg5MzViLCAw eGZmZmQsIDB4ZTE1MiwgMHg5MGI2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGU1 OSwgMHhmZmZkLCAweDg5OTksIDB4ZTE1MywgMHhmZmZkLAotICAgIDB4OTc3MCwgMHhmZmZkLCAw eGZmZmQsIDB4OTVlMSwgMHhlMTU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTM2 MywgMHg5NzUyLCAweDhkNjIsIDB4OTA1YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MjZh LAotICAgIDB4OTliMiwgMHhmZmZkLCAweDkyYWMsIDB4ODllNiwgMHhlMTU1LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMTU2 LCAweGZmZmQsIDB4ZTE1YiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMTU5LCAweGUxNTgsIDB4 OWRjMCwgMHg4YTQ1LCAweGUxNTcsIDB4ZmZmZCwgMHg4OGQ4LAotICAgIDB4ZmZmZCwgMHg5NGE4 LCAweGZmZmQsIDB4ZmZmZCwgMHg5NGM4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHg5N2FmLCAweGUxNWMsIDB4ZTE1YSwgMHg5MjdiLCAweDkwYTQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4OTRhOSwgMHhmZmZkLCAweDk1NGMsIDB4ZmZmZCwgMHhlMTVlLCAweDk3YWEs IDB4OGM2YywgMHhlMTVmLAotICAgIDB4ZmZmZCwgMHhlMTVkLCAweDk0ZDQsIDB4ZTE2MCwgMHhm ZmZkLCAweGUxNjEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ODhkOSwgMHhmZmZkLCAweGZmZmQs IDB4OGZmNCwgMHhlMTY2LCAweGZmZmQsIDB4ZTE2MywgMHg5M2ViLAotICAgIDB4ZTE2MiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjQ1LAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGUxNjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTE2NCwg MHhlMTY1LAotICAgIDB4ZmZmZCwgMHhlMTY4LCAweGUxNjcsIDB4OTU0NCwgMHhmZmZkLCAweGZm ZmQsIDB4OTE2MSwgMHg5MTYwLAotICAgIDB4ZmZmZCwgMHg4YjVlLCAweGZmZmQsIDB4ZmZmZCwg MHhlMTZhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUx NmIsIDB4ZmZmZCwgMHhmZmZkLCAweGUxNmMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTE2ZSwgMHhmZmZkLCAweGUxNmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk3NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMTc2LCAweDk0ZTYsIDB4ZTE3MCwgMHhmZmZkLCAw eGUxNzIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTE3NCwgMHg5MDVkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlMTc1LCAweGUxNzMsIDB4OGViZSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGUxNmYsIDB4ZTE3MSwgMHhmZmZkLCAweDk1NjEsIDB4ZmZmZCwgMHg4ZmM3LAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGUxNzgsIDB4ZmZmZCwgMHhmZmZkLCAweGUxNzcsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxNzksIDB4ZmZmZCwgMHg4ZWE0LCAweDhkYWQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4OTM5NywgMHhlMTdhLCAweGZmZmQsIDB4OTJjOSwgMHhmZmZk LCAweGZmZmQsIDB4ZTE3YywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3OWYsIDB4 ZTE3YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5MTg5 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZTE4MiwgMHhmZmZkLCAweGUxODQsIDB4ZTE4NSwgMHg5MjczLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxODMsIDB4ZmZmZCwgMHhlMTgwLCAweGZmZmQs IDB4ZTE3ZCwgMHhlMTdlLAotICAgIDB4ZmZmZCwgMHhlMTgxLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMTg4LCAweGZmZmQs IDB4ZTE4NiwgMHhmZmZkLCAweGUxODcsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlMTg5LAotICAgIDB4ZTE4YiwgMHhlMThjLCAweGUxOGQsIDB4ZmZmZCwgMHhlMThlLCAweGZm ZmQsIDB4ZmZmZCwgMHhlMThhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTE5MCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlMThmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTE5MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3YzMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTE5 NCwgMHhlMTkyLAotICAgIDB4ZTE5MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWUwLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2ZmMsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVjOCwgMHhmZmZkLAotICAgIDB4ZTE5NiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMTk1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhlMTk3LCAweGUxOTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMTlj LAotICAgIDB4ZTE5OSwgMHhlMTlhLCAweGUxOWIsIDB4ZmZmZCwgMHhlMTlkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTE5ZSwgMHhmZmZkLCAweGUxOWYsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTFhMCwgMHhmZmZkLAotICAgIDB4ZTFhMSwgMHhmZmZkLCAweDk0YWQsIDB4 OTM2ZiwgMHhlMWEyLCAweDk0OTIsIDB4OTU1MywgMHhmZmZkLAotICAgIDB4ZTFhMywgMHhmZmZk LCAweGZmZmQsIDB4ZTFhNCwgMHg5MzQ5LCAweGZmZmQsIDB4OGE0NiwgMHg4ZDYzLAotICAgIDB4 ZTFhNSwgMHhmZmZkLCAweGZmZmQsIDB4ZTFhNiwgMHhmZmZkLCAweGZmZmQsIDB4ZTFhNywgMHhm ZmZkLAotICAgIDB4OGU0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFhOSwgMHhmZmZkLCAweGZmZmQs IDB4ZTFhOCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMWFhLCAweGUxYWIsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRlNywgMHhmZmZkLAotICAg IDB4ZTFhYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWFkLCAweGZmZmQsIDB4ZmZmZCwg MHhlYTg5LAotICAgIDB4ZTFhZSwgMHhlMWFmLCAweGUxYjAsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4ZTRkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxYjEsIDB4OTQ3NSwg MHhmZmZkLCAweGZmZmQsIDB4OTY3ZSwgMHhmZmZkLAotICAgIDB4ODk2ZCwgMHhmZmZkLCAweDg5 NzYsIDB4ZmZmZCwgMHhmZmZkLCAweGUxYjIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGUxYjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFiMywgMHg5MzkwLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBiNywgMHg5ZjU4LCAweGZmZmQsIDB4ZTFi NSwgMHg5NmJmLAotICAgIDB4ZmZmZCwgMHhlMWI2LCAweGZmZmQsIDB4OGFjNCwgMHg5NGQ1LCAw eGUxYjcsIDB4ZmZmZCwgMHhlMWI4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxYjksIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTZkYSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDk2ZDMsIDB4ZmZmZCwgMHg5MmJjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTE4 YSwgMHhmZmZkLCAweGZmZmQsIDB4ZTFiYiwgMHhmZmZkLCAweGZmZmQsIDB4OGY4MiwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHg4ZmM4LCAweGZmZmQsIDB4ZmZmZCwgMHhlMWJlLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMWJkLAotICAgIDB4ZTFiYywgMHg5NGZiLCAweGZmZmQsIDB4OGFjNSwgMHg4Y2E3 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTFjNCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFjMSwgMHg5MDVlLAotICAgIDB4 OTZiMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWMwLCAweGUxYzIsIDB4ZTFjMywgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhlMWJmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWM1LAotICAgIDB4ZTFjNiwgMHhmZmZkLCAweDkyYWQs IDB4ZmZmZCwgMHg4YWUxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTI4NSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWM3LAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxYzgsIDB4ZTFjYiwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5MDg3LCAweGZm ZmQsIDB4OTNjMiwgMHhmZmZkLCAweGUxY2MsIDB4OTY3MiwgMHhmZmZkLAotICAgIDB4ZTFjOSwg MHhmZmZkLCAweGZmZmQsIDB4ZTFjYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMWNmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTFjZSwgMHhlMWNkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTFkMSwgMHhmZmZkLCAweGZmZmQsIDB4ZTFkMCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhlMWQyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTFkNCwgMHhmZmZkLAotICAgIDB4ZTFkMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDk1Y2IsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4Zjc1LCAweDk3YzQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTFkNSwgMHhmZmZk LCAweGZmZmQsIDB4OTNiNSwgMHhmZmZkLCAweGZmZmQsIDB4ZTFkNiwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhlMWQ3LCAweGZmZmQsIDB4ZTFkYiwgMHhlMWQ5LCAweGUxZGEsIDB4ZmZmZCwgMHhl MWQ4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlMWRjLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGUxZGQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWRlLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGUxZGYsIDB4OTZiNSwgMHhlMWUwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweDk2ZWUsIDB4ZTFlMSwgMHhmZmZkLCAweDkyNmQsIDB4ZmZmZCwg MHg5NDhhLAotICAgIDB4ZmZmZCwgMHg4YmU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDky NWEsIDB4ZTFlMiwgMHg4YmI4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBjZSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlMWUzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweDhkYmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWU0LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxZTUsIDB4ZmZmZCwgMHg4Y2E0LCAw eDhkZDMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTFlNywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzNzUsIDB4OGRkNCwgMHg4YjZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2NDMsIDB4ZmZmZCwgMHg5NDZhLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkzNzYsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZDdiLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGUxZTksIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmYzks IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTdiMCwgMHg4ZDY0LCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2E1LAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDk0YTEsIDB4ZmZmZCwgMHhlMWViLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWVkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4Y2U5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTFlYywgMHg5MmY0LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlMWVmLCAweDhhNTYsIDB4ZTFlYSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NGU4LCAweGZm ZmQsIDB4ODk0ZiwgMHhmZmZkLCAweDhkZWEsIDB4ZmZmZCwgMHg5ODcxLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGUxZWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFmMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5NWM5LAotICAgIDB4ZmZmZCwgMHg5MGQ3LCAweGUxZjIsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMWYzLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGUxZjEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDhhNmQsIDB4ZmZmZCwgMHhlMWY5LCAweGZmZmQsIDB4ZTFmOCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHg4ZWE1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxZmEsIDB4ZTFmNSwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxZmIsIDB4ZTFmNiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4OTRkNiwgMHhlMWY0LCAweGZmZmQsIDB4ZmZmZCwgMHhlMWY3 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUyNDEsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjQwLAotICAgIDB4 OTY4MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWZjLCAweGZmZmQsIDB4ZmZmZCwgMHg4 OGU5LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjQzLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGUyNDIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4ZmNhLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjQ0LAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE2MiwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhlMjQ2LCAweGUyNDUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMjQ3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTFlNiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUx ZTgsIDB4ZTI0OSwgMHhlMjQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhlYTYsIDB4ZmZmZCwgMHg5N2U3LCAweGZmZmQsIDB4OGVk MCwgMHhmZmZkLAotICAgIDB4ZTI0YSwgMHg4YzU2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4YjVmLAotICAgIDB4OGI0NiwgMHg4ZTgzLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTc1MywgMHhmZmZkLCAw eGZmZmQsIDB4ZTI1MCwgMHhmZmZkLCAweGUyNGYsIDB4OTE2MywgMHhlMjRjLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGUyNGUsIDB4ZmZmZCwgMHhmZmZkLCAweDhmNmEsIDB4OTA1ZiwgMHhlMjRk LAotICAgIDB4ZTI0YiwgMHhmZmZkLCAweDk0NDksIDB4ZmZmZCwgMHhmZmZkLCAweDhmY2IsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4OTU1YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDhkZDUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Mzk4LAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGUyNTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjUyLAotICAgIDB4 ZTI2OCwgMHg4YmQ2LCAweGZmZmQsIDB4ZmZmZCwgMHg5ODVjLCAweDkxNTQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUyNTMsIDB4ZmZmZCwgMHhmZmZkLCAweDg5ZDAs IDB4OTJmNSwgMHg5NTlmLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGUyNTQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI5YSwgMHhlMjU1LAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGUyNTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI1OCwg MHhmZmZkLAotICAgIDB4OTQ0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI1OSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMjVhLCAweGUyNWIsIDB4ZmZmZCwg MHhmZmZkLCAweDhiZDcsIDB4ODlkMSwgMHg5M2MzLAotICAgIDB4OGY0NywgMHg4ZTg0LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhlMjVjLCAweGZmZmQsIDB4OGY0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHg4OWM4LCAweDk1NjIsIDB4ZmZmZCwgMHhmZmZkLCAweGUyNWQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4OTRlOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MTY0LAotICAgIDB4ZmZmZCwgMHhlMjYwLCAweGZmZmQsIDB4ZTI2 MSwgMHg5NDg5LCAweGZmZmQsIDB4OTA2MCwgMHhlMjVlLAotICAgIDB4ZmZmZCwgMHg5MjgxLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMjVmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGZj YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODhkYSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4OGI0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTI2MiwgMHhmZmZkLCAweGZmZmQsIDB4 OTJmNiwgMHhmZmZkLCAweGUyNjMsIDB4OTBjNSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5NmFiLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTQyLAotICAgIDB4 ZTI2NCwgMHhlMjY1LCAweDkyNzQsIDB4ZmZmZCwgMHg5N2M1LCAweGZmZmQsIDB4ZmZmZCwgMHhl MjY3LAotICAgIDB4ZTI2NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OGVlZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMjY5LCAweDg4ZWUs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjZjLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTI2YSwgMHg4OWQyLCAweDhjNmQsIDB4ZTI2YiwgMHg4ZDY1LAotICAg IDB4OGQ5MiwgMHhmZmZkLCAweDk1ZTQsIDB4ZTI2ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY3Mywg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMjZmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkw Y2YsIDB4ODk2ZSwgMHg4OWI4LAotICAgIDB4ODhhYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjZlLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhlMjcwLCAweGUyNzEsIDB4OGZmNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhlMjcyLCAweGZmZmQsIDB4OGE2ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZTI3NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YzhhLCAw eGZmZmQsIDB4OGI4NiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMjc1LCAweDhiZjMsIDB4ZmZm ZCwgMHhmZmZkLCAweGUyNzYsIDB4ZmZmZCwgMHg5MGZhLAotICAgIDB4ZmZmZCwgMHg5M2NiLCAw eGZmZmQsIDB4OTBkZSwgMHg4ZGYzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTI3 NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkyODIsIDB4OTE4YiwgMHhmZmZkLCAweGUyNzksIDB4 ZTI3YiwgMHhlMjc4LAotICAgIDB4ZTI3YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4YzQxLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMjdj LCAweDhjNDUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI4NywgMHg5NzcxLAotICAgIDB4 ZTI3ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI4MCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5NGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlMjgzLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE5NiwgMHhl MjgyLCAweGUyODEsIDB4ZmZmZCwgMHhlMjg1LAotICAgIDB4ZTI3ZCwgMHhmZmZkLCAweGUyODYs IDB4OTdhNywgMHhmZmZkLCAweGUyODcsIDB4ZmZmZCwgMHhlMjg4LAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDlhZjIsIDB4ZTI4YSwgMHhmZmZkLCAweGUyODksIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhlMjhiLCAweGUyOGMsIDB4ZmZmZCwgMHg5N2IzLCAweGUyOGQsIDB4ZmZmZCwg MHhlOGVkLAotICAgIDB4OGZjZCwgMHhlMjhlLCAweGUyOGYsIDB4OGY3NiwgMHhmZmZkLCAweDkz YjYsIDB4ZTI5MCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkyNDcsIDB4ZmZmZCwg MHhmZmZkLCAweGUyOTEsIDB4ZmZmZCwgMHg5MjViLAotICAgIDB4ZTI5MiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGJhMywgMHhmZmZkLAotICAgIDB4OTk1ZSwg MHg5MjdjLCAweDhlYjEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWM2LAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUyOTMsIDB4ZmZmZCwgMHhlMmEwLCAweGZmZmQsIDB4ZTI5 NiwgMHhmZmZkLAotICAgIDB4OGI4OCwgMHhmZmZkLCAweGUyOTUsIDB4ZTJhMiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMjk0LAotICAgIDB4ZmZmZCwgMHg4ZmNlLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTI5OCwgMHhlMjk5LCAw eGZmZmQsIDB4OTM0YSwgMHhmZmZkLCAweGZmZmQsIDB4ZTI5YSwgMHhmZmZkLAotICAgIDB4OGE3 ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwNzksIDB4OTU4NCwgMHhmZmZk LAotICAgIDB4ZTI5YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWU2LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI5NywgMHhmZmZk LCAweGUyOWIsIDB4ZTI5ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4ZGY5LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyYTQsIDB4OTU0ZCwgMHhmZmZkLAotICAgIDB4 OTRhNCwgMHg5Mzk5LCAweGZmZmQsIDB4OGJkOCwgMHhlMmEzLCAweGUyYTEsIDB4ZmZmZCwgMHg5 NGIzLAotICAgIDB4ZTI5ZSwgMHg5MjdkLCAweDkzOWIsIDB4ZmZmZCwgMHg5MzlhLCAweGZmZmQs IDB4OGRmNCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGUyYjYsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGUyYTYsIDB4ZmZmZCwgMHhlMmE4LAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmFiLCAweGZmZmQsIDB4ZTJhYywgMHhmZmZkLAotICAg IDB4ZTJhOSwgMHhlMmFhLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmE3LCAweGUyYTUsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUyOWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTVjZCwgMHg4OWQzLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTJiMywgMHhmZmZkLCAweGUyYjAsIDB4ZmZmZCwgMHhlMmI1LAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGUyYjQsIDB4ZmZmZCwgMHg5NDkzLCAweDk2YTUsIDB4ZmZmZCwgMHg4ZTVhLAot ICAgIDB4ZTJhZSwgMHhlMmI3LCAweGUyYjIsIDB4ZmZmZCwgMHhlMmIxLCAweGUyYWQsIDB4ZmZm ZCwgMHhlMmFmLAotICAgIDB4ZmZmZCwgMHg4YWM3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkyNWMsIDB4ZmZm ZCwgMHhmZmZkLCAweDkwZmIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NGEwLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMmJjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTRh MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4OTBkZiwgMHhlMmI5LCAweGZmZmQsIDB4ZmZmZCwgMHg5NGNkLCAweGZmZmQsIDB4 ZTJiZCwgMHg5NWQxLAotICAgIDB4ZmZmZCwgMHg5MjdhLCAweGZmZmQsIDB4ZTJiOCwgMHhlMmJh LCAweGZmZmQsIDB4ZmZmZCwgMHhlMmJiLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyYmUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OGVjMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2M0LCAweGUyYzMsIDB4ZTJjMiwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhlMmJmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4NTUs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJjOCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTJjYywgMHhlMmM5LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTJjNSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmM2LAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyY2IsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMmMwLCAweDk5ZDMsIDB4ZTJjNywgMHhlMmMxLCAweGZm ZmQsIDB4ZmZmZCwgMHhlMmNhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmQwLAotICAgIDB4ZmZmZCwgMHg4YWM4LCAweGZm ZmQsIDB4ZTJjZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmNlLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGUyY2YsIDB4ZTJkMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlMmQxLAotICAgIDB4OTRmNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGUyZDMsIDB4OTdmYSwgMHg5NWViLAotICAgIDB4ZTJkOCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJk NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMmQ0LCAweDkwZDAsIDB4ZmZmZCwgMHhlMmQ3LAotICAgIDB4ZTJk OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmQ2LCAweGZmZmQsIDB4ZTJkZCwgMHhmZmZk LAotICAgIDB4ZTJkYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMmRiLAotICAgIDB4ZTJjNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmRj LCAweGUyZGUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMmRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTVjNCwgMHhmZmZkLCAweGUyZTAsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTZlMCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHg4YmNjLCAweDhjNDgsIDB4ZTJlMSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NWIyLCAweGZmZmQsIDB4OTA4OCwgMHhm ZmZkLCAweDk2YWUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTJlMiwgMHhmZmZkLCAweDk3YjEs IDB4ZmZmZCwgMHhmZmZkLCAweDk0OTQsIDB4ZmZmZCwgMHg5MTY1LAotICAgIDB4OTQ1MywgMHhm ZmZkLCAweGZmZmQsIDB4OGY2YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OGJlLAotICAg IDB4ZmZmZCwgMHhlMmU3LCAweGUyZTUsIDB4ZmZmZCwgMHhlMmUzLCAweDhhOWYsIDB4ZmZmZCwg MHg4ZmNmLAotICAgIDB4ZTJlOCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJlNiwgMHhmZmZkLCAweGUy ZTQsIDB4ZTJlYywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMmViLCAweGUyZWEsIDB4ZTJlOSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMmVkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyZWUsIDB4OTBiOCwgMHhmZmZkLAotICAgIDB4ZTJlZiwg MHhmZmZkLCAweGUyZjEsIDB4ZmZmZCwgMHhmZmZkLCAweGUyZjAsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhjZDAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE1 NywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUyZjMsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTM5YywgMHhmZmZkLAotICAgIDB4ZTJmMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlMmY0LCAweGZmZmQsIDB4OTViMywgMHg5MThjLAotICAgIDB4OGQ2NiwgMHhmZmZkLCAw eGUyZjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2M2LAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmY3 LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUyZjgsIDB4ZmZmZCwgMHhlMmY5LCAweGZmZmQsIDB4 ZTJmYSwgMHhmZmZkLAotICAgIDB4OGU4NSwgMHhmZmZkLCAweGUyZmIsIDB4OGM2ZSwgMHhmZmZk LCAweGZmZmQsIDB4OGI4YSwgMHhmZmZkLAotICAgIDB4OGI0OSwgMHhmZmZkLCAweGUzNDAsIDB4 ZmZmZCwgMHg5NmYxLCAweDhkNjcsIDB4ZTJmYywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGUzNDMsIDB4OTZlNCwgMHhmZmZkLCAweDk0NWIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OTU1MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjgzLCAweGUzNDIsIDB4ZmZmZCwgMHg4 ZWQxLAotICAgIDB4OGQ2OCwgMHg4ZTg2LCAweDhiODksIDB4OTViNCwgMHhlMzQxLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTE2NiwgMHg5NjYxLCAweDhkZjUsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGU4NywgMHg5MmRiLCAweGZmZmQsIDB4ZTM0NiwgMHg5N2RkLAotICAgIDB4OGRkNywgMHhm ZmZkLCAweGUzNDcsIDB4OTA2MSwgMHhmZmZkLCAweGUzNDksIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHg4ZmQwLCAweDhkYWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlMzQ4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhmNDksIDB4OGNiYywgMHg5MTY3LCAweGUz NDQsIDB4ZTM0YSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM0NSwg MHg4YzZmLCAweGZmZmQsIDB4ZTM0ZCwgMHhlMzUxLAotICAgIDB4OGM4YiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM0YywgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTM1NSwgMHhmZmZkLCAweGZmZmQsIDB4OGQ2OSwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHg5NzhkLCAweDg4YmEsIDB4ZTM1MiwgMHhmZmZkLCAweGZmZmQsIDB4OGI4 YiwgMHhmZmZkLAotICAgIDB4ZTM0ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTM1MCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5MzlkLCAweGUzNGUsIDB4ZTM0 YiwgMHhmZmZkLCAweDhhNDcsIDB4OTBlMiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4Y2E2LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzNTcsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhlMzU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMzU2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM1MywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4YzcwLCAweDkxYjEsIDB4 ZTM1OCwgMHg5MThlLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzY1LAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGUzNjEsIDB4ZTM1YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM1ZiwgMHg4ZWY4LCAweDg4ZGIsIDB4ZTM1YSwgMHhl MzYyLAotICAgIDB4ZTM2NiwgMHg4ZDZhLCAweDk2ZDQsIDB4ZmZmZCwgMHg5MmQ0LCAweGUzNWMs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTM2NCwgMHhmZmZkLCAweGUzNTksIDB4OTI1ZCwgMHhm ZmZkLCAweGUzNWUsIDB4ODhiYiwgMHg5NmM4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzVkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDhiZDksIDB4OTRlYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MThkLAotICAg IDB4ZmZmZCwgMHg5N2NlLCAweDhmOGYsIDB4ZmZmZCwgMHhmZmZkLCAweGUzOGUsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZTM2NywgMHhmZmZkLCAweDkwZmMsIDB4ZmZmZCwgMHhlMzYzLCAweGUz NjgsIDB4ZTM2YSwgMHhmZmZkLAotICAgIDB4OTJmNywgMHhlMzZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlMzY5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTVkMiwgMHg4YWM5LCAweGZm ZmQsIDB4ZmZmZCwgMHg5NmM5LCAweGZmZmQsIDB4ZmZmZCwgMHg4OGRjLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGUzNmMsIDB4ZmZmZCwgMHg5N2ZiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM2YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4OThmLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2VhLCAw eGUzNmUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMzc1LCAweGUzNmYsIDB4ZTM3 NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGUzNzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTQ5YiwgMHhmZmZkLCAweGZmZmQsIDB4OGVjOCwgMHhlMzc0 LAotICAgIDB4ZmZmZCwgMHhlMzcxLCAweGUzNzcsIDB4ZTM3MCwgMHhmZmZkLCAweGZmZmQsIDB4 OGY2MywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY0NCwgMHhmZmZk LCAweGZmZmQsIDB4OGY2YiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMzczLCAweGUzODAsIDB4 ZmZmZCwgMHhmZmZkLCAweGUzN2IsIDB4ZmZmZCwgMHhlMzdlLAotICAgIDB4ZmZmZCwgMHhlMzdj LCAweGUzODEsIDB4ZTM3YSwgMHhmZmZkLCAweGUzNjAsIDB4OTBkMSwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHg5NGM5LCAweGZmZmQsIDB4ZTM3ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM3OCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkxNDAsIDB4OGM3MSwgMHhmZmZkLCAweDhmNGEs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 MDQ0LCAweDkxNTUsIDB4ZTM4NCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMzg2LCAweGUzODcs IDB4ZmZmZCwgMHhmZmZkLCAweGUzODMsIDB4ZTM4NSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM3OSwgMHhlMzgyLAotICAg IDB4ZmZmZCwgMHhlMzhhLCAweGUzODksIDB4ZmZmZCwgMHhmZmZkLCAweDk2OWEsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4OGM0YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlMzg4LCAweGZmZmQsIDB4ZTM4Yywg MHhlMzhiLCAweGUzOGYsIDB4ZmZmZCwgMHhlMzkxLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhl NWIsIDB4ZTM4ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTM5Miwg MHhlMzkzLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzk0LCAweGZmZmQsIDB4ZTM5YSwgMHg5MzVhLAot ICAgIDB4ZTM5NiwgMHhmZmZkLCAweGUzOTUsIDB4ZTM5NywgMHhlMzk4LCAweGZmZmQsIDB4ZTM5 OSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM5YiwgMHhlMzljLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OGFjYSwgMHhmZmZkLAotICAgIDB4ZTM5ZCwgMHhmZmZkLCAweGUzOWUsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzOWYsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2EwLCAweGUzYTEsIDB4ZTNhMiwgMHhmZmZk LAotICAgIDB4ZTNhMywgMHhlM2E0LCAweGZmZmQsIDB4ZmZmZCwgMHhlM2E2LCAweGUzYTUsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTNhNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlM2E4LAotICAgIDB4ZTNhOSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2FjLAotICAgIDB4ZTNhYSwgMHhlM2Fi LCAweDhkZGYsIDB4OGM3MiwgMHhmZmZkLCAweGZmZmQsIDB4OTI3NSwgMHhmZmZkLAotICAgIDB4 OTRiMSwgMHhmZmZkLCAweDhmOTAsIDB4ZmZmZCwgMHhmZmZkLCAweDk0NmMsIDB4ZmZmZCwgMHg5 NGViLAotICAgIDB4ZTNhZCwgMHg5Y2ViLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUzYWUsIDB4ZTNiMCwgMHhm ZmZkLCAweDk3ODUsIDB4ZTNhZiwgMHhlM2IyLAotICAgIDB4ZTNiMSwgMHhmZmZkLCAweDk3NzIs IDB4ZmZmZCwgMHhlM2IzLCAweGZmZmQsIDB4OTRmYywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2I0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGUzYjcsIDB4ZmZmZCwgMHhmZmZkLCAweGUzYjYsIDB4ZTNiNSwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNiOCwgMHg4YzUxLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTE0MSwgMHg4YjYwLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTNiYywgMHhlM2I5LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUz YmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNiZCwgMHhmZmZkLAotICAgIDB4ZTNiZSwg MHhlM2JiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5NDgsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHg4OWE1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzYzAsIDB4ZTNj MSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUzYzIsIDB4ZmZmZCwgMHg5NzgyLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhmNGIsIDB4ZmZm ZCwgMHhlM2M0LCAweGUzYzMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTA4 OSwgMHhlM2M1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNjNiwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhlM2M3LCAweGZmZmQsIDB4OGFlMywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4OGFjYiwgMHhmZmZkLCAweGZmZmQsIDB4ZTNjOCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlM2M5LCAweGZmZmQsIDB4 OTY3YywgMHg5NzgzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTc3MywgMHg5ODU2 LCAweGZmZmQsIDB4OGQ2YywgMHhlM2NjLCAweDhlZDIsIDB4ZTNjYiwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNjZCwgMHg4ZWE3LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4OTFjZiwgMHhmZmZkLCAweGUzY2UsIDB4ZmZmZCwgMHhmZmZkLCAweDhkNmIs IDB4ZmZmZCwgMHg5NmQ1LAotICAgIDB4ZTNjZiwgMHhlM2QwLCAweGZmZmQsIDB4ZmZmZCwgMHhl M2QxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlM2QyLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTNkMywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGVhOCwgMHhmZmZkLCAweGZmZmQsIDB4OTZlYiwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNkNSwgMHhmZmZkLCAweDky NWUsIDB4ZmZmZCwgMHhlM2Q0LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTNkNywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUz ZDYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGUzZDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBiOSwgMHhmZmZkLAot ICAgIDB4ZTNkOSwgMHhmZmZkLCAweGUzZGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVi NywgMHhlM2RiLAotICAgIDB4ZmZmZCwgMHg5MThmLCAweGUzZGMsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTNkZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2ZjLAotICAgIDB4ZTNlMCwgMHhmZmZkLCAw eGUzZGYsIDB4ZTNkZSwgMHg5MmFlLCAweGZmZmQsIDB4ZTNlMSwgMHg5MDQ1LAotICAgIDB4ZmZm ZCwgMHhlM2UyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzZTMsIDB4OTg1NywgMHhlM2U0 LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2U1LCAweGUzZTcsIDB4 ZTNlNiwgMHg5NGEzLAotICAgIDB4ZmZmZCwgMHg5M2Y3LCAweGZmZmQsIDB4OTg1ZCwgMHg5NGE3 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTNlOSwgMHhmZmZkLCAweGZmZmQsIDB4OGZkMSwgMHhmZmZkLAotICAgIDB4OTU0OSwgMHhmZmZk LCAweGUzZWEsIDB4ZTNlOCwgMHhmZmZkLCAweDhhY2MsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHg4Y2QyLCAweDhlODgsIDB4ZmZmZCwgMHhmZmZkLCAweDk0ZWMsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHg4Y2E4LCAweDk2NjIsIDB4ZmZmZCwgMHhlM2VkLCAweGUzZWIs IDB4ZmZmZCwgMHg4ZDZkLAotICAgIDB4ZmZmZCwgMHg4ZDZlLCAweDg4ZTcsIDB4ZmZmZCwgMHg4 ZGU2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk0Nzgs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ODhkZCwgMHhlM2YyLCAweGZmZmQsIDB4OTI1ZiwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDc3LCAweGZmZmQsIDB4OTFkOSwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTNmNCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlM2YwLCAweGUzZjMsIDB4ZTNlZSwg MHhmZmZkLCAweGUzZjEsIDB4OTY0NSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4Y2QzLCAweGZm ZmQsIDB4ZmZmZCwgMHg4OGZiLCAweGUzZWYsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2Y2LAot ICAgIDB4ZmZmZCwgMHhlM2Y3LCAweGZmZmQsIDB4ZmZmZCwgMHg5M2I3LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4OGJiOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNDQ1LCAw eDk0NWMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhlODksIDB4ZmZm ZCwgMHhmZmZkLCAweDhiYmEsIDB4OTBjNiwgMHg5ODY1LAotICAgIDB4OTZhYywgMHhlM2Y1LCAw eDkwZDIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhiNzIsIDB4ZTNmOCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNmYSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlM2Y5LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2ZiLAotICAgIDB4ZmZmZCwgMHg5MjQ1 LCAweGZmZmQsIDB4OTQ1ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHg5MmFmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTQ0MiwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTQ0MSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNmYywgMHhm ZmZkLCAweGZmZmQsIDB4OTA3NCwgMHhmZmZkLAotICAgIDB4OTU4NSwgMHhlNDQ0LCAweGZmZmQs IDB4ZTQ0MywgMHg4ZDZmLCAweDk4NzIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNDU0LAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0NDgsIDB4ZTQ0OSwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGVlZSwgMHhmZmZkLCAweGZm ZmQsIDB4ZTQ0NywgMHhmZmZkLAotICAgIDB4OGQ5OCwgMHhlNDQ2LCAweGZmZmQsIDB4ZmZmZCwg MHhlNDRhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTJiMCwgMHg5NWEwLCAweDkx NDIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWRhLAotICAgIDB4ZTQ0ZSwg MHhmZmZkLCAweGU0NGYsIDB4ZTQ0YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZTQ0YywgMHhmZmZkLCAweGU0NGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4ZDcwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTQ1NSwgMHhmZmZkLCAw eGU0NTEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk1ODYsIDB4ZmZm ZCwgMHg5NjhjLCAweDk1NDcsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTQ1MCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTQ1MywgMHhlNDUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTY2 MywgMHhlNDU2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZTQ1NywgMHhmZmZkLCAweGZmZmQsIDB4OTE1NiwgMHhmZmZkLCAweGU0NTgsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTQ1YSwgMHhmZmZkLCAweGU0NWUsIDB4ZmZmZCwgMHhmZmZk LCAweGU0NWIsIDB4ZTQ1OSwgMHg5NDVlLAotICAgIDB4ZTQ1YywgMHhmZmZkLCAweGU0NWQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODliMCwgMHhmZmZkLAotICAgIDB4ZTQ2NCwgMHhlNDVm LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0NjAsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhlNDYxLCAweGZmZmQsIDB4OTE5ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZTQ2MywgMHhlNDYyLCAweGU0NjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlNDY2LAotICAgIDB4ZTQ2NywgMHhmZmZkLCAweGZmZmQsIDB4OTA2MiwgMHhm ZmZkLCAweDg5ZTcsIDB4ZmZmZCwgMHhlNDY4LAotICAgIDB4OTdkNSwgMHhmZmZkLCAweDhlYTks IDB4ZmZmZCwgMHhmZmZkLCAweDhmNGMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OGU4YSwgMHg5Mjc2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGU0NjksIDB4ZTQ2YSwgMHg4OTUwLCAweGZmZmQsIDB4ZTQ2Yiwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNDZjLCAweGU0NmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0 NmUsIDB4ZmZmZCwgMHhlNDZmLAotICAgIDB4OGJiYiwgMHg5ZGE4LCAweGU0NzAsIDB4ZmZmZCwg MHg5MGUzLCAweGU0NzEsIDB4OGVjOSwgMHhmZmZkLAotICAgIDB4ZTQ3MiwgMHhmZmZkLCAweDk4 YWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTQ3MywgMHg5NWRjLAotICAgIDB4OGFkYSwg MHhmZmZkLCAweGZmZmQsIDB4OTE0MywgMHg4Zjc3LCAweGZmZmQsIDB4OTU5MSwgMHg4ZjRkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNDc0LCAweDhkNzEsIDB4ZTQ3NSwgMHg5NGNhLCAw eGZmZmQsIDB4ZTQ4NCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTQ3 NywgMHhmZmZkLCAweDkxYzcsIDB4OTQ5NSwgMHg4Y2JkLAotICAgIDB4ZTQ3NiwgMHg5MTQ0LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTQ3 OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MmY4 LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTQ3YSwgMHhlNDc5LCAweGU0N2MsIDB4 ZmZmZCwgMHhmZmZkLCAweGU0N2IsIDB4ZmZmZCwgMHhlNDdkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGU0ODAsIDB4ZmZmZCwgMHhlNDdlLCAweGZmZmQsIDB4OGFjZCwgMHhmZmZkLAotICAgIDB4 ZTQ4MSwgMHhmZmZkLCAweGU0ODIsIDB4ZTQ4MywgMHhmZmZkLCAweGZmZmQsIDB4OGRhZiwgMHg5 N2M3LAotICAgIDB4ZmZmZCwgMHhlNDg1LCAweDkwNDYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ODk5MCwgMHhlNDg2LAotICAgIDB4ZTQ4NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTQ4OCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ODhmMCwgMHhmZmZkLCAweGU0ODksIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGU0OGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NTg3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhl YzUsIDB4ZmZmZCwgMHhlNDhjLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDhhNDgsIDB4ODhiMCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTQ4YiwgMHhlNDhlLCAweDk0NmQsIDB4ZmZmZCwgMHg5MDYzLAotICAgIDB4ZmZmZCwg MHg4OWQ0LCAweGZmZmQsIDB4OTY0NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4OGM3YywgMHg4YmRhLCAweGZmZmQsIDB4ZTQ4ZCwgMHhmZmZkLCAweDg5ZTgsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDhhYTEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4OTkxLCAw eGU0OTIsIDB4OTdlOCwgMHg5MWRiLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTYzLAotICAgIDB4ZmZm ZCwgMHhlNDllLCAweGZmZmQsIDB4ODlkNSwgMHhlNDljLCAweGZmZmQsIDB4ZTQ5YSwgMHhlNDkx LAotICAgIDB4ZmZmZCwgMHhlNDhmLCAweGZmZmQsIDB4ZTQ5MCwgMHhmZmZkLCAweDhlZTEsIDB4 OGJlYSwgMHg5Mjk3LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTNjZiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4OTcwLCAweGZmZmQsIDB4 ZTQ5NCwgMHhlNDkzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNDk5 LCAweGU0OTUsIDB4ZTQ5OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDk2Y2UsIDB4ZTQ5NywgMHg4OWQ2LCAweDhhOWQsIDB4ZTQ5YiwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhlNDlkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGM3MywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTRhMSwgMHhlNGFhLAotICAgIDB4ZTRhYiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg4OGE5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTRiMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ODhlZiwgMHhmZmZkLCAweGZmZmQsIDB4ZTRhOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlNGE4LAotICAgIDB4ZmZmZCwgMHhlNGEzLCAweGU0YTIsIDB4ZmZmZCwgMHhlNGEwLCAweGU0 OWYsIDB4OTI4MywgMHhmZmZkLAotICAgIDB4OTFmOSwgMHhlNGE1LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTRhNCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0YTcsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg5MTkwLCAweDhjNzQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTYwLAot ICAgIDB4ZTRhNiwgMHhmZmZkLCAweDhkNzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4OTE5MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRiOCwgMHhmZmZkLCAweGU0YjksIDB4ZmZmZCwgMHg4OWQ3 LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODlhYywgMHhlNGI2LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGU0YWMsIDB4ZmZmZCwgMHhlNGI0LAotICAgIDB4ZmZmZCwgMHhlNGJiLCAweGU0YjUsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRiMywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTQ5NiwgMHhmZmZkLCAweGZmZmQsIDB4ZTRiMSwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGU0YWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFjZSwgMHhl NGFmLAotICAgIDB4ZTRiYSwgMHhmZmZkLCAweGU0YjAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTRiYywgMHhmZmZkLCAweGU0YWUsIDB4OTQ5YywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5Nzg5LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU0YjcsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0Y2QsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhlNGM1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwOWIsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhiNjUsIDB4ZmZmZCwgMHg4YmRiLCAweGZm ZmQsIDB4ZTRjMCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODlkOSwg MHhmZmZkLCAweGZmZmQsIDB4OGZkMiwgMHhmZmZkLAotICAgIDB4ZTRjMywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4ZGQ4LCAweGZmZmQsIDB4ZmZmZCwgMHg5MzcwLAotICAgIDB4ZTRjOCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHg5NWVjLCAweGZmZmQsIDB4ZTRiZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4OWQ4LAotICAgIDB4OGNkNCwgMHg5NTQ4LCAweGU0YzksIDB4ZmZmZCwgMHhlNGJkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlNGM2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRk MCwgMHhmZmZkLCAweGU0YzEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTRjMiwgMHg5M2I4LCAweGZmZmQsIDB4ZmZmZCwgMHhlNGM3LAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRjNCwgMHg5NjQ3LCAweGU0Y2EsIDB4ODhkZSwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRiZSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTRjYywgMHhmZmZkLCAweGU0Y2IsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NDhi LCAweGU0ZDIsIDB4ZmZmZCwgMHhlNGRkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHg4YTllLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0ZTAsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZTRjZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGQzLCAweDk3OGUs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTRkYywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5Nzc0LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTdhOCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Mjk4LAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE4YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NTkyLCAweGU0ZTIsIDB4OTM5ZiwgMHhmZmZkLCAweGZm ZmQsIDB4ODhhZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNGRiLCAweGZmZmQsIDB4ZTRkNywg MHg5MTkyLCAweGU0ZDEsIDB4ZTRkOSwgMHhlNGRlLAotICAgIDB4ZmZmZCwgMHg5NDRiLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg4YTgsIDB4ZmZmZCwgMHhlNGQ2LAotICAgIDB4ZmZmZCwg MHhlNGRmLCAweDk1OTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU0ZGEsIDB4ZmZmZCwgMHhlNGQ1LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGZkMywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGY0ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4ZWFhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NmQ2LCAw eGZmZmQsIDB4ZmZmZCwgMHg5NTY2LCAweGZmZmQsIDB4ZmZmZCwgMHhlNGU1LAotICAgIDB4ZmZm ZCwgMHhlNGVlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0ZDgsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhhOTcsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGZmNiwgMHhlNGUzLCAweGZmZmQsIDB4 ZTRlOCwgMHg5MTkzLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGU0LAotICAgIDB4ZmZmZCwgMHhlNGVi LCAweGZmZmQsIDB4ZmZmZCwgMHg5MjdlLCAweGZmZmQsIDB4ZTRlYywgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHg5Nzc1LCAweGU0ZTEsIDB4OGE1NywgMHhmZmZkLCAweGU0ZTcsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZTRlYSwgMHg5NmFhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTRlZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNGU2LCAweGU0ZTksIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjQ4LCAweGZmZmQsIDB4OTg0MCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGYxLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGY4LCAweGZm ZmQsIDB4ZmZmZCwgMHhlNGYwLAotICAgIDB4OGVjMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTRjZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg5NWNjLCAweGZmZmQsIDB4OTZhMCwgMHhlNGY3LCAweGU0ZjYsIDB4ZmZmZCwgMHhlNGYyLAot ICAgIDB4ZTRmMywgMHhmZmZkLCAweDg5NTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlNGY1LAotICAgIDB4ZmZmZCwgMHhlNGVmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTJkMywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlNGY0LCAweDg4ZmMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxYTAsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1YzEsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZTRmOSwgMHhlNTQwLCAweGZmZmQsIDB4OTRkNywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTRmYywgMHg4ZmQ0LCAweDhlYzcsIDB4ZTU0MiwgMHhmZmZk LCAweGZmZmQsIDB4OGJiYywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU1NDMsIDB4ZmZmZCwgMHg5NTk5LAotICAgIDB4ZTRmYiwgMHhmZmZk LCAweGU0ZDQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRmYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4OTg2ZSwgMHg5M2EwLCAweDk1OTMsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NGEs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTUwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU1MSwgMHhmZmZkLAotICAgIDB4ZTU0NCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDk2LCAweGZmZmQsIDB4ZmZmZCwgMHhlNTRlLAotICAg IDB4ZTU0NiwgMHhmZmZkLCAweGU1NDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZTU1MiwgMHhlNTQ3LCAweGZmZmQsIDB4ZmZmZCwgMHhlNTRiLCAweGZm ZmQsIDB4ZmZmZCwgMHg4OTkyLAotICAgIDB4ZmZmZCwgMHg5M2UzLCAweGZmZmQsIDB4ZTU0Yywg MHhlNTRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlNTQ1LCAweGZmZmQsIDB4OTE0NSwgMHhmZmZkLAotICAgIDB4ZTU0OSwg MHg4ZTQ2LCAweDkwNjQsIDB4OGM0ZiwgMHg5NmYyLCAweGZmZmQsIDB4OTZmNywgMHg4ZjkyLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNTU2LCAweGU1NTQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5ODZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNTUzLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3OTUsIDB4ZmZmZCwgMHhlNTU1LAotICAgIDB4ZTU1 NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NTgsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTViLCAweGU1NTksIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2Ex LCAweGU1NWEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NGNiLCAweGU1NGQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjkzLAotICAgIDB4 ZmZmZCwgMHhlNTVjLCAweGU1NjEsIDB4OTE5NCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU2MCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1NDEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTU2MiwgMHg5MTY4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1NWQsIDB4ZTU1ZiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTU1ZSwgMHhmZmZkLCAweGZmZmQsIDB4OWY1MCwgMHg5ZjQxLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGU1NjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGU1NjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3 OTYsIDB4ZmZmZCwgMHhlMWJhLAotICAgIDB4ZTU2NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTY2LAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NjcsIDB4OGNk NSwgMHhmZmZkLAotICAgIDB4OGI3MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTY5LCAw eDk5N2MsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhiOTUsIDB4ZmZm ZCwgMHg5N2I4LCAweGZmZmQsIDB4OGJmMSwgMHhlNTZhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTZiLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTI4ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhlNTZjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5M2Y4LCAweGZmZmQsIDB4ODhiOCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDg5ZTEsIDB4ZTU3MSwgMHhlNTcyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU2ZCwgMHhmZmZkLCAweDhlNWMsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU2ZSwgMHg5 NDYxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNTZmLCAweGU1NzAs IDB4ZTU3YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTc0LAotICAgIDB4ZTU3NywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU3MywgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTc1LCAweGZm ZmQsIDB4ZTU3NiwgMHg4ZWQ2LAotICAgIDB4ZmZmZCwgMHhlNTc4LCAweGZmZmQsIDB4OTI2MCwg MHhmZmZkLCAweDhjNzUsIDB4OGE2MSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlNTdiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg4YTVlLCAweGZmZmQsIDB4ZTU4MSwgMHhmZmZkLCAweGZmZmQsIDB4ZTU3YywgMHhlNTgwLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGI4LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNTdkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTdlLCAw eDk1NjcsIDB4OTRkOCwgMHhlNTgyLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTFmYiwgMHhlNThjLCAw eGZmZmQsIDB4ZTU4OCwgMHhmZmZkLCAweGZmZmQsIDB4ODllOSwgMHhmZmZkLAotICAgIDB4ZTU4 NiwgMHhmZmZkLCAweDk2NDksIDB4ZTU4NywgMHhmZmZkLCAweGZmZmQsIDB4ZTU4NCwgMHhmZmZk LAotICAgIDB4ZTU4NSwgMHhlNThhLCAweGU1OGQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1OGIsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNTg5LCAweGU1ODMsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTI3NywgMHhmZmZkLCAweGU1OTQsIDB4 ZmZmZCwgMHg5NmE4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1OTIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhlNTkzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNThlLCAweGZmZmQs IDB4ZmZmZCwgMHhlNTkwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU5MSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNThmLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5 MGU0LCAweGZmZmQsIDB4OTg1OCwgMHhlNTk4LCAweGZmZmQsIDB4ZTU5OSwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU5ZiwgMHhmZmZkLCAweDkwNDksIDB4ZmZmZCwg MHhlNTliLAotICAgIDB4ZmZmZCwgMHhlNTllLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlNTk2LAotICAgIDB4ZTU5NSwgMHhmZmZkLCAweGZmZmQsIDB4ZTVhMCwg MHhmZmZkLCAweGZmZmQsIDB4ODlkYSwgMHhmZmZkLAotICAgIDB4ZTU5YywgMHhmZmZkLCAweGU1 YTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU5ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTlhLCAweGZmZmQsIDB4OTJiMSwgMHhmZmZkLAot ICAgIDB4ZTU5NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5NDg4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1YTUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDk3NWEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWE0 LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1YTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVhYywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlNWE2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTVhZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDk3ODYsIDB4ZTViMSwgMHhmZmZkLCAweGU1YTgsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZTVhOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWFkLCAweGZmZmQsIDB4ZTViMCwgMHhl NWFmLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVhNywgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTVhYSwgMHhmZmZkLCAweGU1YmIsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTViNCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlNWIyLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1YjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTViOCwgMHhlNWI5LAotICAgIDB4ZmZmZCwgMHg4YTQ5LCAweGZmZmQsIDB4OGI2MSwg MHhmZmZkLCAweGZmZmQsIDB4ZTViNywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1YTIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1YjYsIDB4ZTViYSwgMHhlNWI1LAot ICAgIDB4ZmZmZCwgMHhlNWJjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1YmUsIDB4ZTVi ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNWMwLCAweGU1YmYsIDB4ZTU3 OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWM0LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhlNWMxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVjMiwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhlNWMzLCAweGZmZmQsIDB4ZTVjNSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4OGM4YywgMHhmZmZkLCAweGU1YzcsIDB4ZmZmZCwgMHhlNWM2 LCAweGZmZmQsIDB4OGY0ZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4ZDczLCAweDlmYTUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGU1YzgsIDB4OGY3MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTU4LAotICAgIDB4 ZmZmZCwgMHhlNWM5LCAweGZmZmQsIDB4ODk3MSwgMHhmZmZkLCAweDhmZDUsIDB4ZTVjYSwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHg4ZDc0LCAweGU1Y2IsIDB4ODhkZiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTU1YywgMHhmZmZkLCAweGZmZmQsIDB4ZTVjYywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTA4YSwgMHhmZmZkLCAweGU1ZDMs IDB4ZmZmZCwgMHhmZmZkLCAweGU1ZDAsIDB4ZmZmZCwgMHg5MjhmLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZDEsIDB4ZTVjZSwgMHg4YmRjLAotICAg IDB4ZmZmZCwgMHhlNWNkLCAweGU1ZDQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4OGM1NSwgMHhmZmZkLCAweGZmZmQsIDB4OTFkYywgMHhmZmZkLCAweGU1 ZGEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZDYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTFiMywgMHhlNWQ1LAotICAgIDB4ZmZmZCwgMHhlNWQ4LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVjZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGU1ZDksIDB4ZmZmZCwgMHhlNWRiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRlZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVk NywgMHhmZmZkLAotICAgIDB4ZTVkYywgMHhlNWRlLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2QxLCAw eGU1ZDIsIDB4ZmZmZCwgMHg4OGJmLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWRkLAotICAgIDB4ZmZmZCwgMHg4ZGQ5LCAw eDk3ZjQsIDB4ZTVkZiwgMHhlNWUwLCAweDkxOTUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2Ew LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWUxLCAweDk3NTQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTVlMiwgMHhlNWUzLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWUy LCAweGU1ZTQsIDB4ZmZmZCwgMHg4ZGJlLAotICAgIDB4ZmZmZCwgMHg5N2ExLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTVlOSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGU1ZWEsIDB4OGZkNiwgMHhlNWU4LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4OTc4NywgMHhlNWU1LCAweGZmZmQsIDB4ZmZmZCwgMHhlNWU3LCAweDkwYmIs IDB4OTA5ZSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZTYsIDB4ZmZmZCwgMHhl NWViLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWExLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZWQs IDB4ZmZmZCwgMHhlNWVjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGE4YywgMHhm ZmZkLCAweDk2NGEsIDB4ZTVlZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZmEsIDB4ZTVmMCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1 ZjEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZjIsIDB4ZTVmMywg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVmNywgMHhmZmZkLAotICAgIDB4ZTVmOCwg MHhmZmZkLCAweGZmZmQsIDB4ZTVmNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhlNWY0LCAweGZmZmQsIDB4ZTVlZiwgMHhlNWY1LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWY5LCAw eGU4YjUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ODlhNiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVmYywgMHg4YmRkLAotICAgIDB4ZTVm YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjQxLCAweGZmZmQsIDB4ZTY0MCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2NDMsIDB4ZmZmZCwgMHhmZmZkLCAweGU2NDIsIDB4 ZmZmZCwgMHhlNjQ0LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhmNTAsIDB4ZmZmZCwgMHhlNjQ1 LCAweGZmZmQsIDB4ZmZmZCwgMHhlNjQ2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY0NywgMHg5MGJjLAotICAgIDB4ZmZmZCwgMHg5Nzc2 LCAweGZmZmQsIDB4ZTY0OCwgMHhmZmZkLCAweGZmZmQsIDB4OTVhMiwgMHg5NDY1LAotICAgIDB4 ZTY0OSwgMHhmZmZkLCAweGU2NGEsIDB4OGNhOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 YjRiLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY0YiwgMHhmZmZkLCAweGZmZmQs IDB4OGU4YiwgMHg5NDYwLAotICAgIDB4ZTY0YywgMHhmZmZkLCAweDhhNmYsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNjRkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY0ZiwgMHg5Nzk3LAotICAgIDB4ZmZmZCwgMHhl NjRlLCAweDkwNjUsIDB4ZmZmZCwgMHhlNjUwLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjUxLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGU2NTIsIDB4OGFjZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2NTMsIDB4ZmZmZCwgMHhmZmZkLCAweGU2 NTQsIDB4ZmZmZCwgMHhlNjU1LAotICAgIDB4ZTY1NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweDhhNzAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2NTcsIDB4ZmZmZCwgMHhlNjU4LCAweGU2NTksIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODlmMCwgMHhmZmZkLCAw eGZmZmQsIDB4OTA0NywgMHhlNjVhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlNjViLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTY1 YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4OGNiZSwgMHhmZmZkLCAweDkyZjksIDB4ZTY1ZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4OGM3NiwgMHhmZmZkLCAweDkwNzUsIDB4ZmZmZCwgMHhlNjYw LCAweGZmZmQsIDB4OTNhMiwgMHhmZmZkLAotICAgIDB4ZTY1ZiwgMHhmZmZkLCAweGZmZmQsIDB4 OGM1MCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY1ZSwgMHg5MWY1LAotICAgIDB4OGI0YywgMHhmZmZk LCAweGZmZmQsIDB4ZTY2MSwgMHhmZmZkLCAweGU2NjIsIDB4ZmZmZCwgMHg4ZmQ3LAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM4ZCwgMHhmZmZkLCAweGU2NjMsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2NGIsIDB4ZmZmZCwgMHhmZmZkLCAweDkwZGQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4Yjk2LCAweGZmZmQsIDB4OTZmMywgMHg5 MTY5LCAweGZmZmQsIDB4ZTY2NCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkwNjYs IDB4OTI5MCwgMHg4ZmQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhl NjY1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY2OCwgMHhmZmZkLAotICAg IDB4ZTY2OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4OGRiYywgMHg5MWMwLCAweGU2NjcsIDB4ZmZmZCwgMHg4ZmQ5LCAweDk1 NWQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY2Niwg MHhmZmZkLCAweGZmZmQsIDB4OGU4YywgMHhmZmZkLAotICAgIDB4ODk3MiwgMHhmZmZkLCAweGU2 NmQsIDB4OGM3NywgMHhmZmZkLCAweGZmZmQsIDB4OGU4ZSwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg4ZThkLCAweGZmZmQsIDB4OTg2YywgMHhlNjZjLCAweGU2NmIsIDB4OTE0NiwgMHhmZmZkLAot ICAgIDB4OGI2YywgMHg5ODYyLCAweDhhNTksIDB4OGZkYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjZhLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2NmYsIDB4ZmZm ZCwgMHhlNjcwLCAweGU2NmUsIDB4ZmZmZCwgMHg4Y2Q2LAotICAgIDB4ZmZmZCwgMHg5NzVmLCAw eGZmZmQsIDB4ZmZmZCwgMHg4ZThmLCAweDk0NDYsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhlNjczLCAweGZmZmQsIDB4OTBiZSwgMHhmZmZkLCAweDkyNjEsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4OTc1NSwgMHhmZmZkLCAweGU2NzYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OGNlYSwgMHhmZmZkLAotICAgIDB4OTBiZCwgMHhlNjcyLCAweGZmZmQsIDB4ZTY3NywgMHg4Y2Vi LCAweGU2NzQsIDB4ZTY3NSwgMHhmZmZkLAotICAgIDB4ZTY3MSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5MGUwLCAweDkzYzcsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTI0ZSwgMHhmZmZk LCAweDg5ZGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHg5NGVlLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjYyLCAweGZmZmQsIDB4ZmZmZCwgMHg5 MmIyLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2N2EsIDB4ZmZmZCwgMHhlNjc4LCAweGZmZmQs IDB4ZmZmZCwgMHg5MjZiLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBiZiwgMHg4 YWQwLCAweGU2NzksIDB4ZmZmZCwgMHg5MDdhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3Yzgs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTg1ZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGU2N2IsIDB4ZTY4NywgMHg5MmIzLCAweGZmZmQsIDB4ZTY4NiwgMHhmZmZkLAotICAg IDB4ZTY4MywgMHhlNjhiLCAweGU2ODQsIDB4ZmZmZCwgMHhlNjgwLCAweGZmZmQsIDB4OTJmYSwg MHhlNjdlLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY3YywgMHhmZmZkLCAweDk3 NDAsIDB4OGU5MCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNjgxLCAweGZmZmQsIDB4ZTY3ZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjg1LAotICAgIDB4OGY5NCwgMHhmZmZkLCAweDhj YmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFmOCwgMHhmZmZkLAotICAgIDB4OTY2NCwg MHg4OTc5LCAweDg4ZTAsIDB4ZmZmZCwgMHg5M2EzLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjg5LAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjg4LCAweGZmZmQsIDB4OTNl NCwgMHhmZmZkLAotICAgIDB4ZTY4ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjgyLCAw eGZmZmQsIDB4ZTY4YywgMHhlNjhlLAotICAgIDB4ZmZmZCwgMHg4Y2FhLCAweGU2OGEsIDB4OGQ3 NSwgMHhmZmZkLCAweDhlZDMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTY4ZiwgMHg5Nzc3LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY5MiwgMHhmZmZkLAotICAgIDB4ZTY5 NSwgMHhmZmZkLCAweGZmZmQsIDB4ZTY5MywgMHg5NTU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY5MCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4YmRlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTY5NCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNjk2LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNjlh LCAweGZmZmQsIDB4ZmZmZCwgMHhlNjk3LCAweGZmZmQsIDB4ZTY5OSwgMHhlNjk4LAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY5YiwgMHhm ZmZkLAotICAgIDB4OGVhZiwgMHhmZmZkLCAweGU2OWQsIDB4ZTY5YywgMHg5NTg4LCAweGZmZmQs IDB4ZmZmZCwgMHhlNjlmLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OGM3OCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTY5ZSwgMHhlNmEwLCAweGZmZmQsIDB4ZmZmZCwgMHhlNmExLAotICAgIDB4OGI2MywgMHhl M2JmLCAweDhmZjcsIDB4ZmZmZCwgMHhlNmEyLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2VjLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2YTMsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZTZhNCwgMHhmZmZkLCAweGZmZmQsIDB4OGU1ZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlkY2MsIDB4ZmZmZCwg MHhlNmE1LCAweGZmZmQsIDB4ZTZhNiwgMHhmZmZkLAotICAgIDB4OGY1MSwgMHhmZmZkLCAweGU2 YTcsIDB4ZTZhOCwgMHhmZmZkLCAweGZmZmQsIDB4ZTZhOSwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhlNmFhLCAweGU2YWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MjRhLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2YWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlNmFlLAotICAgIDB4ZmZmZCwgMHhlNmFkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTNhNCwgMHhmZmZkLAotICAgIDB4ZTZhZiwgMHhmZmZkLCAweDk2NGMsIDB4ZmZm ZCwgMHhlNmIwLCAweGZmZmQsIDB4ZTZiMSwgMHhmZmZkLAotICAgIDB4ZTZiMiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2YjMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDkzZDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHg4ZmRiLCAweGU2YjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhkOGIsIDB4OThhYywgMHhlNmI1 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTZiNiwgMHg5NTVl LCAweGU2YjcsIDB4ZmZmZCwgMHhlNmJmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGU2YjgsIDB4ZmZmZCwgMHhmZmZkLCAweGU2YmEsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhlNmI5LCAweGU2YmIsIDB4ZmZmZCwgMHg5NjY1LCAweGU2YmMs IDB4ZTZiZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl NmJlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTZjMCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDhhNGMsIDB4OTJlNSwgMHhmZmZkLAotICAgIDB4OTU4OSwgMHg4 ZGUwLCAweDhkNzYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTZlLAotICAg IDB4ODlkZCwgMHg5NGNjLCAweGU2YzMsIDB4OGFkMSwgMHg5MGQzLCAweGU2YzIsIDB4ZTZjNywg MHg5Mjk5LAotICAgIDB4OTZlMSwgMHhmZmZkLCAweGU2YzUsIDB4ZTZjNiwgMHg4YjRkLCAweGZm ZmQsIDB4ZTZjOCwgMHg5NDgzLAotICAgIDB4OTFkZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRlZiwg MHg5MzVjLCAweGU2YzQsIDB4ZmZmZCwgMHg5NjY2LAotICAgIDB4ODllYSwgMHhlNmNhLCAweDk4 NDcsIDB4OTJjMCwgMHg5ODY0LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTkxLAotICAgIDB4ZTZjOSwg MHhmZmZkLCAweDkxYWYsIDB4ZmZmZCwgMHhmZmZkLCAweGU2ZGEsIDB4OTE0NywgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHg5M2Y2LCAweGZmZmQsIDB4OTU2ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2Y2QsIDB4OGU1ZSwgMHg4ZTkyLCAw eGZmZmQsIDB4OGZkYywgMHhmZmZkLAotICAgIDB4OTQ4NSwgMHhmZmZkLCAweDhjYWIsIDB4ZTZj YywgMHhlNmNiLCAweGZmZmQsIDB4OTU4YSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDhlYmYsIDB4ZmZmZCwgMHhmZmZkLCAweDkzNzEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2Y2YsIDB4ZTZkMCwgMHg4ZDc3LCAweGU2Y2UsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNmQx LCAweGU2ZDIsIDB4ZmZmZCwgMHhlNmQ0LAotICAgIDB4OTFhMSwgMHhmZmZkLCAweGU2ZDMsIDB4 OGFlNCwgMHhmZmZkLCAweGU2ZDYsIDB4ZmZmZCwgMHhlNmQ1LAotICAgIDB4ZTZkNywgMHhmZmZk LCAweGZmZmQsIDB4ZTZkOSwgMHhlNmRiLCAweGZmZmQsIDB4ZTZkYywgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGQ0LCAweGZmZmQsIDB4OGVjZCwgMHhlNmRkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE3MSwgMHhmZmZkLCAweGU2ZGUsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4OTE5NiwgMHhlNmRmLCAweGZmZmQsIDB4ZTZlMCwgMHg5NThiLCAw eGZmZmQsIDB4ZmZmZCwgMHg4YjRlLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNmUxLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyYjQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDg5N2EsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNmUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OGVlZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTA5NiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFhYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2ZTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTZlNCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2ZTMsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTZlYiwgMHhlNmU5LCAweGZmZmQsIDB4ZmZmZCwgMHhlNmU2LAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTZlOCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGU2ZTcsIDB4ZTZlYSwgMHhmZmZkLCAweDhiOTcsIDB4ZmZmZCwg MHhlNmVlLAotICAgIDB4ZmZmZCwgMHg5MGQ1LCAweGZmZmQsIDB4ZTZlZiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGNkNywgMHhmZmZkLCAweGU2ZWMsIDB4ZTZlZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ODQ4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTJiNSwgMHhmZmZkLCAweDkxNDgsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNmYwLCAweGZmZmQsIDB4ZmZmZCwgMHhlNmYzLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZTZmMSwgMHhlNmYyLCAweDk3NzgsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5M2E1LAotICAgIDB4ZTZmNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2ZjQsIDB4ZTZmNSwgMHhlNmY3LAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3NDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTZmYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNmZi LCAweGU2ZjksIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGU2ZjgsIDB4ZmZmZCwgMHg5MmZiLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzQwLAotICAgIDB4 ZTc0NCwgMHhlNzQxLCAweGU2ZmMsIDB4ZmZmZCwgMHhlNzQyLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZTc0MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3NGEs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNzQ1LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGQ2LAotICAgIDB4ZTc0NywgMHhmZmZkLCAweGZmZmQs IDB4ZTc0OSwgMHhlNzQ2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGU3NGMsIDB4ZmZmZCwgMHg4ZjUyLCAweGZmZmQsIDB4ZTc0Yiwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzRkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNzRlLCAweGZmZmQsIDB4ZmZmZCwg MHhlNzUxLCAweGU3NTAsIDB4ZmZmZCwgMHhlNzRmLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3 NTMsIDB4ZTc1MiwgMHhmZmZkLCAweDk2ZjQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhlNzU1LCAweGZmZmQsIDB4ZTc1NCwgMHhlNzU2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhlNzU3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNzU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3NTgsIDB4OTA2 NywgMHhlNzVhLCAweGZmZmQsIDB4ZmZmZCwgMHg4YmViLAotICAgIDB4ZTc1YiwgMHhlNzVkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc1ZSwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3NWYsIDB4 ZTc1YywgMHhmZmZkLAotICAgIDB4ZTc2MCwgMHhmZmZkLCAweDhlZDQsIDB4ZTc2MSwgMHg4YjRm LCAweDhjNTIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhjYWMsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTc2MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2VlLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDkzNWQsIDB4ZTc2MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc2NiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGViMiwgMHhmZmZkLCAweGZmZmQs IDB4ZTc2NSwgMHhlNzY0LCAweDhjNzksIDB4ZTc2NywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OGE3MiwgMHhmZmZkLCAweGU3NjksIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHg4ZGRhLCAweGU3NjgsIDB4ZmZmZCwgMHhlNzcxLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3NmIsIDB4ZTc2ZCwgMHg5NWUzLCAweGU3 NmEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNzZjLCAweGZmZmQsIDB4ZTc3MCwg MHhlNzZlLCAweDhiNTAsIDB4ZmZmZCwgMHhlNzZmLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc3MiwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg5NDc5LCAweDk3ZDYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjUzLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc3MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4OTc0MSwgMHhlNzc1LCAweGZmZmQsIDB4ZTc3NCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTc3OCwgMHg5NzYwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3NzcsIDB4ZmZm ZCwgMHg4YThkLCAweGU3NzYsIDB4ZTc3YiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlNzdhLCAw eGZmZmQsIDB4ZmZmZCwgMHhlNzc5LCAweDkzNTEsIDB4ZTc3YywgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzdk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzdlLCAweGZmZmQsIDB4 ZmZmZCwgMHg4ZDhjLAotICAgIDB4ZmZmZCwgMHg4YzQ0LCAweGU3ODAsIDB4ZTc4MSwgMHhlNzgy LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTA2OCwgMHhlNzgzLCAweGZmZmQsIDB4OGVhYiwgMHhlNzg0LAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc4NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5OTlmLAotICAgIDB4OTk5ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3 ODYsIDB4ZTM5MCwgMHhlNzg3LAotICAgIDB4OTI0MywgMHg5MDRhLCAweDk0NWYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzg4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk1 ZDMsIDB4OTJkMiwgMHg4ZDllLCAweGZmZmQsIDB4ZmZmZCwgMHg5MjQ4LAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweDg5NDksIDB4ZmZmZCwgMHg5Njk4LCAweDkwNzYsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM3 ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4YmRmLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWQ0LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3ODksIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGU3OGIsIDB4ZmZmZCwgMHhmZmZkLCAweGU3OGEsIDB4ODlkZSwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHg5M2Y0LCAweGU3OGMsIDB4OTQ5NywgMHhmZmZkLCAweDkzNTIsIDB4ZmZmZCwgMHhlNzhk LAotICAgIDB4OGY3MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzhmLCAweGZmZmQsIDB4 ZmZmZCwgMHg5NmMwLAotICAgIDB4ZTc5ZSwgMHhlNzkxLCAweGU3OTIsIDB4ZmZmZCwgMHhmZmZk LCAweDkyYzcsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTFkZSwgMHg5MTk3LCAweGZmZmQsIDB4 OTNhNiwgMHhmZmZkLCAweGU3OTAsIDB4OGI3NCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTc5OSwgMHhmZmZkLCAweGU3OTYsIDB4ZTdhMywgMHg5M2E3LAotICAgIDB4 OTI4MCwgMHhlNzkzLCAweGZmZmQsIDB4OTJmYywgMHg5MzcyLCAweGU3OTQsIDB4ZTc5OCwgMHg5 MDgwLAotICAgIDB4ZmZmZCwgMHg5NDg3LCAweDkyY2EsIDB4ZmZmZCwgMHhmZmZkLCAweDkwYzAs IDB4ZTc5NywgMHg5MWFjLAotICAgIDB4OTFhMiwgMHhlNzk1LCAweDg4YTcsIDB4OTg0MSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzlhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFkZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4 ZjU0LCAweDkwNjksIDB4ZmZmZCwgMHhmZmZkLCAweGU3OWMsIDB4ZTc5YiwgMHhmZmZkLAotICAg IDB4ODhlZCwgMHhlNzlkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTRlLCAweGZmZmQsIDB4ZTdhNSwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5M2Q5LCAweDkwOGIsIDB4ZmZmZCwgMHhmZmZkLCAweDky NzgsIDB4ZmZmZCwgMHg4YmY2LAotICAgIDB4ZmZmZCwgMHhlN2E0LCAweDk3NTYsIDB4ODk1ZSwg MHhmZmZkLCAweDk1ZDUsIDB4ODlkZiwgMHhlNzlmLAotICAgIDB4ZTdhMCwgMHhlN2ExLCAweGU3 YTIsIDB4OTNiOSwgMHg5MjQyLCAweDg4ZTEsIDB4ZTdhNiwgMHhmZmZkLAotICAgIDB4ZTdhNywg MHhlYWExLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWJiLCAweGZmZmQsIDB4ZTdhOCwgMHhmZmZkLAot ICAgIDB4ODk5MywgMHg5MTZiLCAweGZmZmQsIDB4OGNhZCwgMHhmZmZkLCAweDk3NzksIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZTdhOSwgMHg5MzRiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDkxOTgsIDB4OGVkNSwgMHhlN2FhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3YWQsIDB4ZmZm ZCwgMHhmZmZkLCAweDhmODUsIDB4ZTdhYiwgMHg5MTRhLAotICAgIDB4OTE0OSwgMHhmZmZkLCAw eDg4ZTIsIDB4ZmZmZCwgMHg5N2M5LCAweGU3YWYsIDB4ZmZmZCwgMHg5NGYwLAotICAgIDB4ZTdi MSwgMHhlN2IwLCAweGU3YWUsIDB4ZTI4NCwgMHg4YWQyLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzhl LAotICAgIDB4ZmZmZCwgMHhlN2IzLCAweGU3YjIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlN2I0LAotICAgIDB4ZmZmZCwgMHg5NzU3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTNkZiwgMHhmZmZkLCAweGZmZmQsIDB4OTY0ZCwgMHhmZmZkLAotICAgIDB4 ZTdiNSwgMHhmZmZkLCAweDhlZDcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl N2I2LAotICAgIDB4ZmZmZCwgMHhlN2I3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3Yjgs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTM0MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4OGU4LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDhkNzgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTg1OSwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdiYywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4YzUzLCAweGU3YjksIDB4ZmZmZCwg MHhlN2JhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTU5NCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhNzMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3NTgsIDB4ZmZmZCwgMHg4YmJkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzNzMsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3YmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGU3YmUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhlN2JmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDkzNDEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTdjMSwgMHhmZmZkLCAweGU3YzAsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHg5M2QxLCAweGU3YzIsIDB4OGY1NSwgMHg4ZWRlLCAweDk0N2Es IDB4OTI5MSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhlZjAsIDB4ZmZmZCwgMHg5 MDhjLCAweGZmZmQsIDB4ZTdjMywgMHhmZmZkLAotICAgIDB4ZTdjNCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDkwN2MsIDB4ZTdjNSwgMHhmZmZkLCAweGU3YzYsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhlN2M3LCAweDk3OGYsIDB4ZmZmZCwgMHg4ZjU2LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3YzksIDB4ZTdjOCwgMHhmZmZkLCAweDhk NzksIDB4ZmZmZCwgMHg4ZDkzLAotICAgIDB4OGU1ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3 Y2MsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Zjg2LAotICAgIDB4ZmZmZCwg MHhlN2NiLCAweGZmZmQsIDB4ZTdjYSwgMHhmZmZkLCAweDkxZTcsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4OGNlZCwgMHhmZmZkLCAweDkwYzEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5NGFlLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjU4LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3Y2QsIDB4ZmZm ZCwgMHg4ZmRkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGU3ZDAsIDB4ZTdjZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2NmLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2QyLCAweGU3ZDEsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4OGZmOCwgMHhmZmZkLCAweGU3ZDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTdkNCwgMHhlN2Q1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTRjZSwgMHg4ZGQxLAotICAgIDB4OGVkZiwgMHhlN2Q2LCAweGZmZmQsIDB4 ZTdkNywgMHg5N2EyLCAweDhmNjQsIDB4OTZlYywgMHg5N2NhLAotICAgIDB4ZTdkOCwgMHg4YmUw LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdkOSwgMHhmZmZkLAotICAgIDB4 OTM0MiwgMHhmZmZkLCAweGZmZmQsIDB4ZTdkYywgMHg4YTk4LCAweDkwNmEsIDB4ZmZmZCwgMHhl N2RhLAotICAgIDB4ZmZmZCwgMHhlN2RiLCAweGZmZmQsIDB4OTJkZSwgMHhmZmZkLCAweGZmZmQs IDB4OTY3NCwgMHg4YmZhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU3ZGUsIDB4ZTdkZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2RkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2UxLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkz ZGQsIDB4OGE2MiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlN2U1LCAweGZmZmQsIDB4ZmZmZCwg MHhlN2UyLCAweGU3ZTQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdlMCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhlODZlLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2UzLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2U5LCAw eGZmZmQsIDB4ZmZmZCwgMHg4Y2Q4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2VkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MzUzLCAweGU3ZTgsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTdl YiwgMHhlN2U5LCAweGZmZmQsIDB4ZTdlZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZTdlZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlN2U3LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3ZjQsIDB4ODk5NCwgMHhmZmZk LCAweGZmZmQsIDB4ZTdlNiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk0YWIsIDB4 ZmZmZCwgMHhlN2VhLCAweGZmZmQsIDB4OGZkZSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHg4ZDdhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTY2NywgMHhmZmZkLAotICAgIDB4OGJlMiwgMHhmZmZkLCAweGZmZmQsIDB4OGY2NSwgMHhm ZmZkLCAweDkzYmEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5 MTRjLCAweGZmZmQsIDB4ZTdmMiwgMHhmZmZkLCAweGU3ZWMsIDB4ZTdmMSwgMHhmZmZkLAotICAg IDB4OTZjMSwgMHhmZmZkLCAweDkyYjYsIDB4ZTdmMywgMHhlN2YwLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDkxNGIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2Y3LAotICAgIDB4ZmZmZCwg MHhlN2Y2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlN2Y1LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2NGUsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjliLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhlN2Y4LCAweDk1ZGQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5NzMsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk1NjUsIDB4OTI5MiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGI5OCwgMHhmZmZkLCAweGU3ZmEsIDB4 ZmZmZCwgMHg4ZDdjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGU0YiwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl N2Y5LAotICAgIDB4OTA4ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTA4ZSwgMHhlODQwLCAweGU4NDIsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGZmOSwgMHhmZmZkLCAweGU4NDEs IDB4ZTg0MywgMHhmZmZkLCAweGZmZmQsIDB4OGJkMSwgMHhmZmZkLAotICAgIDB4OTU2NCwgMHhm ZmZkLCAweGZmZmQsIDB4OGVlMCwgMHg5ODQyLCAweGZmZmQsIDB4ZTdmYywgMHg4ZGY2LAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweDk4NWUsIDB4ZmZmZCwgMHhmZmZkLCAweGU4NDUsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU4NDQsIDB4ZTg0NiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlN2ZiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTNlNywgMHhmZmZkLCAweDkzNzQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MmQ1LCAweGZmZmQsIDB4ZTg0YiwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTI2MiwgMHhlODQ3LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZTg0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4YzRjLCAweGZmZmQsIDB4ZTg0YSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjYWUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODQ5LCAweGZmZmQsIDB4OGZkZiwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTk5 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlODRmLCAweGZmZmQsIDB4OGRiZCwgMHg5MTk5LAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDkyYzgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 YTVhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODRkLCAweGU4NGUs IDB4OTJjMSwgMHhmZmZkLAotICAgIDB4ZTg0YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlODUwLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTg1NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZTg1OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZTg1OCwgMHg5MzRjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTg1MSwgMHhlODUyLAotICAgIDB4ZTg1NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGU4NTcsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4YmJlLCAweGZm ZmQsIDB4ZmZmZCwgMHhlODVhLCAweGU4NTQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTg1Mywg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg1 ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODVmLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTg2 MCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg1ZCwgMHhlODVjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4OGZlMCwgMHg5M2E4LCAweGU4NWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlODY0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTg2MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4NjMsIDB4ZTg2MSwgMHhmZmZkLAotICAgIDB4 OTFmNiwgMHhmZmZkLCAweGU4NjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhlODY2LCAweGZmZmQsIDB4ZmZmZCwgMHhlODY4LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4YWQzLCAweGU4Njcs IDB4OTZmOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGU4NzMsIDB4ZTg2OSwgMHhmZmZkLCAweGZmZmQsIDB4ZTg2YywgMHhmZmZkLAotICAg IDB4ZTg2YSwgMHhmZmZkLCAweGU4NmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU4NmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTg2ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGU4NzAsIDB4ZmZmZCwgMHhlODcxLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlODc0LCAweGU4NzIsIDB4ZTg3NSwgMHhlODc3LAotICAgIDB4ZmZmZCwg MHhlODc2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5MmI3LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTZlNSwgMHhmZmZkLCAweGU4Nzgs IDB4OTE0ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODc5LAotICAgIDB4ZmZmZCwgMHg5 NWMyLCAweGU4N2EsIDB4OGE0YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTViLAotICAg IDB4ZmZmZCwgMHg4YWQ1LCAweGZmZmQsIDB4OGFkNCwgMHhlODdiLCAweGZmZmQsIDB4ZTg3Yywg MHhmZmZkLAotICAgIDB4ZTg3ZCwgMHhlODdlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTg4MCwgMHhmZmZkLCAweDhhZDYsIDB4OGE3NCwg MHg4ZDdkLCAweDk0YjQsIDB4ZmZmZCwgMHhlODgyLAotICAgIDB4ZTg4MSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ODMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweDg5N2IsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhlODg2LCAweGZmZmQsIDB4ZTg4NSwgMHhlODg0LCAweGZmZmQsIDB4ZTg4 NywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg4YSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4OGM1LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU4ODgsIDB4ZmZm ZCwgMHhlODhjLCAweGU4OGIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlODhlLCAweGU4OGQsIDB4ZTg4ZiwgMHhmZmZkLAotICAgIDB4OTNh YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODkwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhlODkxLCAweGU4OTMsIDB4ZmZmZCwgMHhmZmZkLCAweGU4OTIsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5NThjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhl ODk0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZTg5NSwgMHhmZmZkLCAweDhkZTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg5Niwg MHhlODk3LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2NjgsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE2YSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OGEyLAotICAgIDB4OTFjOSwgMHhmZmZkLCAweGU4 OTgsIDB4ZmZmZCwgMHg5NThkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTg5YiwgMHhlODk5LCAweDhkN2UsIDB4ZmZmZCwgMHhlODlhLAot ICAgIDB4OGNjMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVjMywgMHhlODlkLCAw eGU4OWYsIDB4ZTg5ZSwgMHhlOGEwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5NDAsIDB4OTA3 NywgMHg4ZjljLCAweDhhZDcsIDB4ZThhMSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDk0ODYsIDB4ZmZmZCwgMHhlOGEzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ODk0 MSwgMHhmZmZkLCAweGU4YTIsIDB4OTJjMiwgMHhmZmZkLCAweDk3Y2IsIDB4OTNhOSwgMHhlODlj LAotICAgIDB4OTdhNCwgMHhmZmZkLCAweDhjYWYsIDB4ZmZmZCwgMHhmZmZkLCAweDk3N2EsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDhiZjcsIDB4OTdiMiwgMHhmZmZkLAotICAgIDB4OGM0NywgMHhmZmZkLCAweDkxZTAsIDB4 ZTQ0MCwgMHhmZmZkLCAweGU4YTQsIDB4OGE0YiwgMHg5MDhmLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4YTc1LCAweGU4YTYsIDB4ZmZmZCwgMHhlOGE3LAotICAgIDB4 ZThhNSwgMHg4Yzg0LCAweGZmZmQsIDB4OGRkYiwgMHg4ZmUxLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ODk0MiwgMHhmZmZkLCAweGZmZmQsIDB4OTdkNywgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlOGE5LAotICAgIDB4ZTdhYywgMHhmZmZkLCAweGU4YTgsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZThhYywgMHhlOGFhLCAweGU4YWIs IDB4ZmZmZCwgMHhlOGFkLCAweGZmZmQsIDB4ZThhZSwgMHg5N2VhLAotICAgIDB4ZThhZiwgMHhl OGIwLCAweGZmZmQsIDB4OTBjNywgMHg5NGI5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4OTA5ZCwgMHg4YWU1LCAweGZmZmQsIDB4ZmZmZCwgMHg5NzU5LCAweDg5ZWIsIDB4OGY1Nywg MHg4Y2Q5LAotICAgIDB4ZmZmZCwgMHhlOGIzLCAweGZmZmQsIDB4ZThiMiwgMHg4ZTkzLCAweGU4 YjQsIDB4ZThiMSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4ZTQ3LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGU4YjgsIDB4ZTVhYiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5OWQ0LCAweGZm ZmQsIDB4OTA5NywgMHhlOGI2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweDk3YTMsIDB4OTNlZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ODk0YSwgMHhmZmZkLCAweDkwZTEsIDB4OGViNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4OTViNSwgMHhmZmZkLCAweDg5NWYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTdlYiwgMHg5NzhiLAotICAgIDB4ZmZmZCwgMHhlOGI5LCAweGZmZmQsIDB4OTM2 NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGVmOSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlOGJhLCAweGZmZmQsIDB4ZThiYiwgMHg5MDZiLAotICAgIDB4ZThi YywgMHhmZmZkLCAweDk3ZWMsIDB4ZmZmZCwgMHhmZmZkLCAweGU4YjcsIDB4ZThiZSwgMHhlOGMw LAotICAgIDB4ZmZmZCwgMHhlOGJmLCAweGZmZmQsIDB4ZThiZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZThjMSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlOGMyLCAweGZmZmQsIDB4ZmZmZCwgMHg5MTlh LCAweGZmZmQsIDB4ODllMCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlOGMzLCAweGZmZmQsIDB4ZmZmZCwgMHg5NmI2LAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGU4YzQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZThjNSwgMHhmZmZkLCAweDk4NDksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4OWU1MCwgMHhlOGM2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4Yzcs IDB4ZThjOCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU4Y2MsIDB4ZmZmZCwgMHhl OGM5LCAweGZmZmQsIDB4ZThjYSwgMHhmZmZkLAotICAgIDB4ZThjYiwgMHhlOGNkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDkwYzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTZmNSwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHg5MGMzLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGNlLCAweGZmZmQsIDB4OTRmMSwg MHhmZmZkLAotICAgIDB4ZThjZiwgMHhlYTcyLCAweDk2Y2EsIDB4ZmZmZCwgMHhlOGQwLCAweGZm ZmQsIDB4ZThkMSwgMHhmZmZkLAotICAgIDB4ZThkMiwgMHg4YTc2LCAweGZmZmQsIDB4ZThkNCwg MHhmZmZkLCAweDkwNzgsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlOGQ1LCAweGZm ZmQsIDB4ZmZmZCwgMHg4YzQzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhlOGQ2LCAweGU4ZGEsIDB4ZmZmZCwgMHhlOGQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhlOGQ5LCAweGZmZmQsIDB4ZmZmZCwgMHg4YTkzLCAweGU4ZDcsIDB4ZThk YiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZThkYywgMHhmZmZkLCAw eDg4YzYsIDB4ZmZmZCwgMHhlOGRkLAotICAgIDB4ZThkZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGZlMiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlOGRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGI2 NiwgMHhmZmZkLCAweGZmZmQsIDB4ZThlMiwgMHhmZmZkLCAweGZmZmQsIDB4ZThlMSwgMHhmZmZk LAotICAgIDB4ZThlMCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY5MSwgMHhmZmZkLCAweDk1ZGEsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZThlMywgMHhlOGU0 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZThlNSwgMHhmZmZkLCAweGZmZmQsIDB4ZThlNiwgMHhmZmZkLAotICAgIDB4 ZThlNywgMHhmZmZkLCAweGZmZmQsIDB4ZThlOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFkOCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl OGU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZWEsIDB4OTQ0MiwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGU4ZWMsIDB4ODliOSwgMHhmZmZkLCAweGU4ZWYsIDB4ZThlZSwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk0MywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4YmJmLAotICAgIDB4ZmZmZCwgMHg5NWM1LCAweDkyYjgsIDB4OGRhMCwg MHhmZmZkLCAweDhkODAsIDB4OGY4NywgMHhmZmZkLAotICAgIDB4OTA3YiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlOGYxLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGYwLAotICAgIDB4OTc2MSwg MHg4YWU2LCAweDk0ZDAsIDB4OTNkYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MDljLAot ICAgIDB4OTdjYywgMHhmZmZkLCAweDhjN2EsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlOGY0LCAweGZmZmQsIDB4ZmZmZCwgMHhlOGYzLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5NjZhLCAweDkzYWEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4OTZmLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGY1LAotICAgIDB4ZThm MiwgMHhmZmZkLCAweGZmZmQsIDB4OTU3MCwgMHg5NzhhLCAweGU4ZjYsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZThmNywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZThmOSwgMHg5MWU4 LCAweDhhN2EsIDB4OGE3YiwgMHhlOGY4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4YWU3LCAweDhjYjAsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGFlOCwgMHhmZmZk LCAweGZmZmQsIDB4OTM1ZSwgMHhmZmZkLCAweGZmZmQsIDB4OTdkZSwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 Y2RhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZThmYSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlOGZiLAotICAgIDB4ZThmYywgMHhlOTQwLCAweGZmZmQsIDB4ZTk0MiwgMHhl OTQxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTU5Nywg MHhmZmZkLCAweGU5NDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTQ0LAot ICAgIDB4ZmZmZCwgMHhlOTQ1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk0 NiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk0 OCwgMHhlOTQ3LCAweGZmZmQsIDB4ZTk0OSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRmMiwgMHhlM2NhLCAweGZmZmQsIDB4 ZmZmZCwgMHg5MDQ4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhiNTEsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlOTRhLCAweGZmZmQsIDB4 ZTk0YiwgMHhmZmZkLCAweDk5YWEsIDB4OWY1YSwgMHg5NGQxLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweDg4ZjksIDB4ZmZmZCwgMHg4OGI5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTk0LCAweDk2NGYsIDB4OGZmYywgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk0YywgMHhmZmZkLCAweDk2ZGQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlOTRkLCAweDk3N2IsIDB4ZmZmZCwgMHg4 OTYxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGU2MCwgMHhmZmZkLCAweGU5NGUs IDB4ODllYywgMHhlOTRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTk1MCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NTIsIDB4ZTk1MywgMHhmZmZkLAotICAg IDB4ZTk1NSwgMHhlOTUxLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTU0LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4OGFkOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTU2LCAweGZm ZmQsIDB4ZTk1NywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NTgsIDB4ZTk1OSwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGU5NWEsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NWMsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhlOTViLCAweGZmZmQsIDB4ZTk1ZSwgMHhlOTYxLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZTk1ZCwgMHhlOTVmLCAweGU5NjAsIDB4ZmZmZCwgMHhmZmZkLCAw eGU5NjIsIDB4ZmZmZCwgMHg4YmMwLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGVmMSwgMHhl OTYzLAotICAgIDB4ZTk2NCwgMHg4ZDgxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGU5NjUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGE1ZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5NDZlLCAweGU5NjYsIDB4ZTk2NywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTI3OSwgMHg5M2U5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTY4LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHg5NDlkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWNhLCAweDg5 NzcsIDB4OGJlYywgMHhmZmZkLAotICAgIDB4OGJlZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTI5MywgMHhlOTZkLCAweDhi ZWUsIDB4ZmZmZCwgMHhmZmZkLCAweDg5ZWQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTk2Yywg MHhmZmZkLCAweGZmZmQsIDB4ZTk2YSwgMHhmZmZkLCAweGU5NmIsIDB4ZmZmZCwgMHhlOTY5LAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU5NzcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU5NmUsIDB4ZTk2ZiwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlOTcwLCAweGU5NzEsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTk3MywgMHhmZmZkLCAw eGZmZmQsIDB4ZTk3MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Zjc4LAotICAgIDB4ZmZm ZCwgMHhlOTc0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NzYsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OGI1MiwgMHhlOTc1LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkxOWIsIDB4OGNiMSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlOTc4LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 OTFjYiwgMHhmZmZkLCAweGZmZmQsIDB4ZTk3OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4OTNhYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlOTdhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTk4MCwgMHhmZmZkLAotICAgIDB4ZTk3ZCwgMHhmZmZkLCAweGU5N2Ms IDB4ZTk3ZSwgMHhmZmZkLCAweGU5N2IsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ODIsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ODEsIDB4ZmZmZCwg MHhlOTg0LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhiYzEsIDB4ZTk4MywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlOTg1LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU5ODYsIDB4ZmZmZCwg MHhlOTg4LCAweGU5ODcsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlOTg5LCAweGU5 OGIsIDB4ZTk4YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4OGQ5YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGU5OGMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTk4ZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGE1YiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlOThlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZTk4ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MDkxLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlOTkwLAotICAgIDB4ZmZmZCwgMHhlOTkxLCAweGZmZmQsIDB4ZTk5MiwgMHhl OTkzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGQ4MiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk5NCwgMHhlOTk1LAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGU5OTYsIDB4ZTk5NywgMHhmZmZkLCAweGZmZmQsIDB4ZTk5OCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweDk0YWYsIDB4ZTk5YSwgMHhmZmZkLCAweDk1NDUsIDB4ZTk5Yiwg MHhlOTk5LAotICAgIDB4ZmZmZCwgMHhlOTlkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTljLCAweGZm ZmQsIDB4ZmZmZCwgMHhlOTllLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk5Ziwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTlhMCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZTlhMSwgMHhmZmZkLCAweGU5YTIsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlOWEzLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU5YTQsIDB4ZTlh NSwgMHhmZmZkLCAweGU5YTYsIDB4ZmZmZCwgMHhlOWE3LAotICAgIDB4ZTlhOCwgMHhlOWE5LCAw eGU5YWEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTlhYiwgMHhlOWFjLAotICAgIDB4ZmZm ZCwgMHg5ZjU0LCAweGU5YWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJmNiwgMHg4YjUzLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHg4YTQwLCAweDhkYjAsIDB4ZTlhZiwgMHhlOWFl LCAweDk2YTMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU5YjEsIDB4ZTliMiwgMHhlOWIwLAotICAgIDB4ZmZmZCwgMHhlOWIz LCAweGZmZmQsIDB4ZmZmZCwgMHg5NjgyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZTliNCwgMHhmZmZkLCAweDhiOWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ODQ0LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlOWI1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTliNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ODhiYywgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlOWI4LCAweDk1YTksIDB4ZTliNiwg MHhmZmZkLCAweGZmZmQsIDB4ZTliOSwgMHhlOWJhLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWJiLAotICAgIDB4ZTliYywg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZTliZCwgMHhmZmZkLCAweDk2OGUsIDB4OGU0YywgMHhmZmZkLCAweDhkZjgsIDB4OTE0 ZSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWJlLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlOWMxLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTliZiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTljMiwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHg4Y2VmLCAweGU5YzAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWMz LAotICAgIDB4ZmZmZCwgMHhlOWM0LCAweGU5YzUsIDB4ZmZmZCwgMHhlOWM5LCAweGZmZmQsIDB4 OGU0OSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFlMiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlOWNhLCAweGU5YzcsIDB4 ZTljNiwgMHhlOWM4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OGM3ZSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZTljZSwgMHhlOWNkLCAweGU5Y2MsIDB4ZmZmZCwgMHhmZmZkLCAweDg4YjEsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl OWQ4LCAweGZmZmQsIDB4ZTlkNCwgMHhmZmZkLAotICAgIDB4ZTlkNSwgMHhlOWQxLCAweGU5ZDcs IDB4ZmZmZCwgMHhlOWQzLCAweDhhODIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTg2YiwgMHhm ZmZkLCAweGU5ZDYsIDB4ZTlkMiwgMHhlOWQwLCAweGU5Y2YsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTlkYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlOWRkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWRjLCAweGU5 ZGIsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDk1NjgsIDB4ZTlkOSwgMHg4OGYxLAotICAgIDB4ZTlkZSwgMHhmZmZkLCAweGU5 ZTAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHg4YThmLCAweGU5Y2IsIDB4ODk1NiwgMHhmZmZkLCAweGZmZmQsIDB4ZTllMiwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTll MSwgMHhlOWRmLAotICAgIDB4OTI0YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2OTAsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2Q4LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGU5ZTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTll NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWU1 LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTllNiwgMHhmZmZkLAotICAgIDB4ZTllNywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDkyYjksIDB4ZmZmZCwgMHhlOWU4LAotICAgIDB4ZmZmZCwgMHg5NGI1LCAweGZmZmQsIDB4ZTll ZCwgMHhlOWU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTllYSwgMHhmZmZkLCAw eGZmZmQsIDB4OTY1MCwgMHg5NmMyLCAweGZmZmQsIDB4OTNjZSwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTllZSwgMHhmZmZkLCAweGZmZmQsIDB4 ZTllZiwgMHg5M2JjLAotICAgIDB4ZTllYywgMHhlOWViLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ODlhOCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU5ZjcsIDB4 ZmZmZCwgMHhmZmZkLCAweGU5ZjYsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ODk5NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWY0LAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTlmMywgMHhmZmZkLCAweGZmZmQsIDB4ZTlmMSwgMHhm ZmZkLAotICAgIDB4OGE5YiwgMHhmZmZkLCAweGU5ZjAsIDB4OGViMCwgMHg4OWE3LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGQ4MywgMHhmZmZkLCAweGZmZmQsIDB4ZTlmYSwgMHhlOWY5LAotICAgIDB4ZmZmZCwgMHhl OWY4LCAweGZmZmQsIDB4ZmZmZCwgMHhlOWY1LCAweGZmZmQsIDB4ZTlmYiwgMHhmZmZkLAotICAg IDB4ZTlmYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZWE0NCwgMHhlYTQzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlYTQ1LCAweGZmZmQsIDB4ZmZmZCwg MHg4OTRjLCAweGVhNDAsIDB4ZWE0MSwgMHhmZmZkLAotICAgIDB4OGQ5NCwgMHg5NmI3LCAweGZm ZmQsIDB4ZmZmZCwgMHhlYTQyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjUxLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTRhLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGVhNDYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGVhNGIsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTQ4LAotICAgIDB4ZmZmZCwgMHhlYTQ3LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YzdiLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGVhNGMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTRk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlYTRlLCAweGZmZmQsIDB4 ZWE0OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWYyLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGVhNGYsIDB4ZmZmZCwgMHg5MmRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZWE1MywgMHhmZmZkLCAweGVhNTQsIDB4ZWE1MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhlYTUxLCAweGVhNTcsIDB4ZmZmZCwgMHhlYTUwLCAweGZmZmQs IDB4ZWE1NSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTU2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZWE1OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhl YTU4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE1Yiwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVh NWMsIDB4ZmZmZCwgMHhlYTVkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk4NjgsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZWE1YSwgMHg5MWU5LCAweDhk ZWIsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNWUsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGVhNWYsIDB4ZWE2 MCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE2MSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNjIsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4OGNiMiwgMHhlYTYzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNjQsIDB4ZmZmZCwg MHg4ZWFkLAotICAgIDB4ZmZmZCwgMHhlYTY1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZWE2NiwgMHhmZmZkLCAweGZmZmQsIDB4ZWE2Nywg MHhlYTY4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlYTZiLCAweGVh NjksIDB4OTg1YiwgMHhmZmZkLCAweGVhNmEsIDB4ZmZmZCwgMHg5N2VkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNmMsIDB4ZmZmZCwgMHg5N2Q5LAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNmQsIDB4OTQ5 ZSwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhlYTZlLCAweGVhNzAsIDB4ZmZmZCwgMHhmZmZkLCAw eGVhNzEsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZWE2ZiwgMHg4ZDhkLCAw eDk2Y2IsIDB4OTY4MywgMHg5YmY1LCAweGZmZmQsIDB4OWY4MCwgMHg5NjliLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OWE5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTczLCAweDhiNmYsIDB4 ZWE3NCwgMHhlYTc1LAotICAgIDB4ZWE3NiwgMHhmZmZkLCAweDhkOTUsIDB4ZmZmZCwgMHhlYTc3 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZTBkMiwgMHg5NmQ5LCAweGZmZmQsIDB4 OTFlMSwgMHhlYTc4LCAweGVhN2EsIDB4ZWE3OSwgMHhmZmZkLAotICAgIDB4ZWE3YiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhN2MsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZWE3ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl YTdlLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTgwLCAweGZmZmQs IDB4ZWE4MSwgMHhlYTgyLAotICAgIDB4ZmZmZCwgMHhlYTgzLCAweGZmZmQsIDB4ZWE4NCwgMHhl YTg1LCAweGVhODYsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTg3LAotICAgIDB4ZWE4OCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTM0MywgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNkYiwgMHhmZmZkLCAweGVhOGEsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTE2YywgMHhlYThiLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlYThjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTU0MCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE4 ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGVhOGUsIDB4ZTI1 NiwgMHhmZmZkLCAweGZmZmQsIDB4ZTZkOCwgMHhlOGViLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGVhOGYsIDB4ZmZmZCwgMHhlYTkwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTky LAotICAgIDB4ZWE5MywgMHhlYTk0LCAweDk3ZWUsIDB4ZWE5MSwgMHhmZmZkLCAweGZmZmQsIDB4 ZWE5NSwgMHhlYTk2LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGVhOTgsIDB4ZmZmZCwgMHhlYTk3 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGVhOWEsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE5YiwgMHhlYTk5LAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3YjQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGVhOWMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlYTlkLCAweGUyNzMsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZWE5ZSwgMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwCi19Owot Ci0jZW5kaWYgLyogS0FOSkkgKi8KLQotLyogQmxhaC10by1Vbmljb2RlIHRyYW5zbGF0aW9uIHRh YmxlcyAqLwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfdHJhbnNwYXJlbnQgPSB7Ci0gICAgMjU2 LCBYMlVfQ1hHLCAwLCAwLCAiVHJhbnNwYXJlbnQiLCAidHJhbnNwYXJlbnQiLCAwLCAiIiwKLSAg ICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotICAgIDB4 MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCi0gICAgMHgxMCwg MHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLSAgICAweDE4LCAweDE5 LCAweDFBLCAweDFCLCAweDFDLCAweDFELCAweDFFLCAweDFGLAotICAgIDB4MjAsIDB4MjEsIDB4 MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjcsCi0gICAgMHgyOCwgMHgyOSwgMHgyQSwg MHgyQiwgMHgyQywgMHgyRCwgMHgyRSwgMHgyRiwKLSAgICAweDMwLCAweDMxLCAweDMyLCAweDMz LCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotICAgIDB4MzgsIDB4MzksIDB4M0EsIDB4M0IsIDB4 M0MsIDB4M0QsIDB4M0UsIDB4M0YsCi0gICAgMHg0MCwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwg MHg0NSwgMHg0NiwgMHg0NywKLSAgICAweDQ4LCAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRE LCAweDRFLCAweDRGLAotICAgIDB4NTAsIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4 NTYsIDB4NTcsCi0gICAgMHg1OCwgMHg1OSwgMHg1QSwgMHg1QiwgMHg1QywgMHg1RCwgMHg1RSwg MHg1RiwKLSAgICAweDYwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3 LAotICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsCi0g ICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywKLSAgICAw eDc4LCAweDc5LCAweDdBLCAweDdCLCAweDdDLCAweDdELCAweDdFLCAweDdGLAotICAgIDB4ODAs IDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCi0gICAgMHg4OCwgMHg4 OSwgMHg4QSwgMHg4QiwgMHg4QywgMHg4RCwgMHg4RSwgMHg4RiwKLSAgICAweDkwLCAweDkxLCAw eDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAotICAgIDB4OTgsIDB4OTksIDB4OUEs IDB4OUIsIDB4OUMsIDB4OUQsIDB4OUUsIDB4OUYsCi0gICAgMHhBMCwgMHhBMSwgMHhBMiwgMHhB MywgMHhBNCwgMHhBNSwgMHhBNiwgMHhBNywKLSAgICAweEE4LCAweEE5LCAweEFBLCAweEFCLCAw eEFDLCAweEFELCAweEFFLCAweEFGLAotICAgIDB4QjAsIDB4QjEsIDB4QjIsIDB4QjMsIDB4QjQs IDB4QjUsIDB4QjYsIDB4QjcsCi0gICAgMHhCOCwgMHhCOSwgMHhCQSwgMHhCQiwgMHhCQywgMHhC RCwgMHhCRSwgMHhCRiwKLSAgICAweEMwLCAweEMxLCAweEMyLCAweEMzLCAweEM0LCAweEM1LCAw eEM2LCAweEM3LAotICAgIDB4QzgsIDB4QzksIDB4Q0EsIDB4Q0IsIDB4Q0MsIDB4Q0QsIDB4Q0Us IDB4Q0YsCi0gICAgMHhEMCwgMHhEMSwgMHhEMiwgMHhEMywgMHhENCwgMHhENSwgMHhENiwgMHhE NywKLSAgICAweEQ4LCAweEQ5LCAweERBLCAweERCLCAweERDLCAweERELCAweERFLCAweERGLAot ICAgIDB4RTAsIDB4RTEsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsIDB4RTcsCi0gICAg MHhFOCwgMHhFOSwgMHhFQSwgMHhFQiwgMHhFQywgMHhFRCwgMHhFRSwgMHhFRiwKLSAgICAweEYw LCAweEYxLCAweEYyLCAweEYzLCAweEY0LCAweEY1LCAweEY2LCAweEY3LAotICAgIDB4RjgsIDB4 RjksIDB4RkEsIDB4RkIsIDB4RkMsIDB4RkQsIDB4RkUsIDB4RkYKLX07Ci0KLS8qIDctYml0IGNo YXJhY3RlciBzZXRzOiBJU08gNjQ2LCBERUMgTlJDcywgU2hvcnQgS09JLCBhbmQgSGVicmV3LTcg Ki8KLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2FzY2lpID0gewotICAgIDk0LCAzMywgWDJVX0lT T3xYMlVfU1RELCBBTF9ST01BTiwgIlVTIEFTQ0lJIiwgImFzY2lpIiwgNiwgIkIiLAotICAgICAg ICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgw MDI3LAotICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQs IDB4MDAyZSwgMHgwMDJmLAotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgw MDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAotICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2Es IDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAotICAgIDB4MDA0MCwgMHgw MDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAotICAg IDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwg MHgwMDRmLAotICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAw NTUsIDB4MDA1NiwgMHgwMDU3LAotICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDA1Yiwg MHgwMDVjLCAweDAwNWQsIDB4MDA1ZSwgMHgwMDVmLAotICAgIDB4MDA2MCwgMHgwMDYxLCAweDAw NjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAotICAgIDB4MDA2OCwg MHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2ZSwgMHgwMDZmLAot ICAgIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3 NiwgMHgwMDc3LAotICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDA3YiwgMHgwMDdjLCAw eDAwN2QsIDB4MDA3ZQotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2JyaXRpc2ggPSB7Ci0g ICAgOTQsIDMzLCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiQnJpdGlzaCBJU08gNjQ2Iiwg ImJyaXRpc2giLCAxLCAiQSIsCi0gICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMGEzLCAw eDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAy YSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMwLCAw eDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCi0g ICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNl LCAweDAwM2YsCi0gICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4 MDA0NSwgMHgwMDQ2LCAweDAwNDcsCi0gICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRi LCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4 MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCi0gICAgMHgwMDU4 LCAweDAwNTksIDB4MDA1YSwgMHgwMDViLCAweDAwNWMsIDB4MDA1ZCwgMHgwMDVlLCAweDAwNWYs Ci0gICAgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgw MDY2LCAweDAwNjcsCi0gICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMs IDB4MDA2ZCwgMHgwMDZlLCAweDAwNmYsCi0gICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgw MDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCi0gICAgMHgwMDc4LCAweDAwNzks IDB4MDA3YSwgMHgwMDdiLCAweDAwN2MsIDB4MDA3ZCwgMHgwMDdlCi19OwotCi1zdHJ1Y3QgeF90 b191bmljb2RlIHVfZHV0Y2ggPSB7Ci0gICAgOTQsIDMzLCBYMlVfREVDfFgyVV9TVEQsIEFMX1JP TUFOLCAiRHV0Y2ggTlJDIiwgImR1dGNoIiwgMCwgIjQiLAotICAgICAgICAgICAgMHgwMDIxLCAw eDAwMjIsIDB4MDBhMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAotICAgIDB4MDAy OCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJm LAotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4 MDAzNiwgMHgwMDM3LAotICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNj LCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAotICAgIDB4MDBiZSwgMHgwMDQxLCAweDAwNDIsIDB4 MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAotICAgIDB4MDA0OCwgMHgwMDQ5 LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAotICAgIDB4 MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgw MDU3LAotICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDBmZiwgMHgwMGJkLCAweDAwN2Ms IDB4MDA1ZSwgMHgwMDVmLAotICAgIDB4MDA2MCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgw MDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAotICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEs IDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2ZSwgMHgwMDZmLAotICAgIDB4MDA3MCwgMHgw MDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LAotICAg IDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDBhOCwgMHgwMGE0LCAweDAwYmMsIDB4MDAyNwot fTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2Zpbm5pc2ggPSB7Ci0gICAgOTQsIDMzLCBYMlVf REVDfFgyVV9TVEQsIEFMX1JPTUFOLCAiRmlubmlzaCBOUkMiLCAiZmlubmlzaCIsIDAsICI1QyIs Ci0gICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgw MDI2LCAweDAwMjcsCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMs IDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgw MDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAweDAwMzks IDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0gICAgMHgw MDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAw NDcsCi0gICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwg MHgwMDRlLCAweDAwNGYsCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAw NTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwg MHgwMGM0LCAweDAwZDYsIDB4MDBjNSwgMHgwMGRjLCAweDAwNWYsCi0gICAgMHgwMGU5LCAweDAw NjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCi0gICAg MHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAw eDAwNmYsCi0gICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3 NSwgMHgwMDc2LCAweDAwNzcsCi0gICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMGU0LCAw eDAwZjYsIDB4MDBlNSwgMHgwMGZjCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfZnJlbmNo ID0gewotICAgIDk0LCAzMywgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIkZyZW5jaCBJU08g NjQ2IiwgImZyZW5jaCIsIDAsICJmUiIsCi0gICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgw MGEzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCi0gICAgMHgwMDI4LCAweDAwMjks IDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgw MDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAw MzcsCi0gICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwg MHgwMDNlLCAweDAwM2YsCi0gICAgMHgwMGUwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAw NDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCi0gICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwg MHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCi0gICAgMHgwMDUwLCAweDAw NTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCi0gICAg MHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMGIwLCAweDAwZTcsIDB4MDBhNywgMHgwMDVlLCAw eDAwNWYsCi0gICAgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2 NSwgMHgwMDY2LCAweDAwNjcsCi0gICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAw eDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAwNmYsCi0gICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3 MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCi0gICAgMHgwMDc4LCAw eDAwNzksIDB4MDA3YSwgMHgwMGU5LCAweDAwZjksIDB4MDBlOCwgMHgwMGE4Ci19OwotCi1zdHJ1 Y3QgeF90b191bmljb2RlIHVfZnJfY2FuYWRpYW4gPSB7Ci0gOTQsMzMsWDJVX0RFQ3xYMlVfU1RE LEFMX1JPTUFOLCJGcmVuY2ggQ2FuYWRpYW4gTlJDIiwiY2FuYWRpYW4tZnJlbmNoIiwwLCI5USIs Ci0gICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgw MDI2LCAweDAwMjcsCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMs IDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgw MDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAweDAwMzks IDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0gICAgMHgw MGUwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAw NDcsCi0gICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwg MHgwMDRlLCAweDAwNGYsCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAw NTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwg MHgwMGUyLCAweDAwZTcsIDB4MDBlYSwgMHgwMGVlLCAweDAwNWYsCi0gICAgMHgwMGY0LCAweDAw NjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCi0gICAg MHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAw eDAwNmYsCi0gICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3 NSwgMHgwMDc2LCAweDAwNzcsCi0gICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMGU5LCAw eDAwZjksIDB4MDBlOCwgMHgwMGZiCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfZ2VybWFu ID0gewotICAgIDk0LCAzMywgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIkdlcm1hbiBJU08g NjQ2IiwgImdlcm1hbiIsIDIxLCAiSyIsCi0gICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgw MDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCi0gICAgMHgwMDI4LCAweDAwMjks IDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgw MDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAw MzcsCi0gICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwg MHgwMDNlLCAweDAwM2YsCi0gICAgMHgwMGE3LCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAw NDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCi0gICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwg MHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCi0gICAgMHgwMDUwLCAweDAw NTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCi0gICAg MHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMGM0LCAweDAwZDYsIDB4MDBkYywgMHgwMDVlLCAw eDAwNWYsCi0gICAgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2 NSwgMHgwMDY2LCAweDAwNjcsCi0gICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAw eDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAwNmYsCi0gICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3 MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCi0gICAgMHgwMDc4LCAw eDAwNzksIDB4MDA3YSwgMHgwMGU0LCAweDAwZjYsIDB4MDBmYywgMHgwMGRmCi19OwotCi1zdHJ1 Y3QgeF90b191bmljb2RlIHVfaHVuZ2FyaWFuID0gewotICAgIDk0LCAzMywgWDJVX0lTT3xYMlVf U1RELCBBTF9ST01BTiwgIkh1bmdhcmlhbiBJU08gNjQ2IiwiaHVuZ2FyaWFuIiw4NiwiaSIsCi0g ICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwYTQsIDB4MDAyNSwgMHgwMDI2 LCAweDAwMjcsCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4 MDAyZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMz LCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAweDAwMzksIDB4 MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0gICAgMHgwMGMx LCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcs Ci0gICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgw MDRlLCAweDAwNGYsCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQs IDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgw MGM5LCAweDAwZDYsIDB4MDBkYywgMHgwMDVlLCAweDAwNWYsCi0gICAgMHgwMGUxLCAweDAwNjEs IDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCi0gICAgMHgw MDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAw NmYsCi0gICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwg MHgwMDc2LCAweDAwNzcsCi0gICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMGU5LCAweDAw ZjYsIDB4MDBmYywgMHgwMDIyLCAweDAyZGQKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9p dGFsaWFuID0gewotICAgIDk0LCAzMywgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIkl0YWxp YW4gSVNPIDY0NiIsICJpdGFsaWFuIiwgMTUsICJZIiwKLSAgICAgICAgICAgIDB4MDAyMSwgMHgw MDIyLCAweDAwYTMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKLSAgICAweDAwMjgs IDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwK LSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAw MzYsIDB4MDAzNywKLSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywg MHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKLSAgICAweDAwYTcsIDB4MDA0MSwgMHgwMDQyLCAweDAw NDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKLSAgICAweDAwNDgsIDB4MDA0OSwg MHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKLSAgICAweDAw NTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1 NywKLSAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwYjAsIDB4MDBlNywgMHgwMGU5LCAw eDAwNWUsIDB4MDA1ZiwKLSAgICAweDAwZjksIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2 NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywKLSAgICAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAw eDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUsIDB4MDA2ZiwKLSAgICAweDAwNzAsIDB4MDA3 MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywKLSAgICAw eDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwZTAsIDB4MDBmMiwgMHgwMGU4LCAweDAwZWMKLX07 Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9pY2VsYW5kaWMgPSB7Ci0gICAgOTQsIDMzLCBYMlVf REVDfFgyVV9TVEQsIEFMX1JPTUFOLCAiSWNlbGFuZGljIE5SQyIsICJpY2VsYW5kaWMiLCAwLCBO VUxMLAotICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUs IDB4MDAyNiwgMHgwMDI3LAotICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgw MDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIs IDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAotICAgIDB4MDAzOCwgMHgw MDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAotICAg IDB4MDBkZSwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0Niwg MHgwMDQ3LAotICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAw NGQsIDB4MDA0ZSwgMHgwMDRmLAotICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1Mywg MHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAotICAgIDB4MDA1OCwgMHgwMDU5LCAweDAw NWEsIDB4MDBmMCwgMHgwMGQ4LCAweDAwYzYsIDB4MDBkNiwgMHgwMDVmLAotICAgIDB4MDBmZSwg MHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAot ICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2 ZSwgMHgwMDZmLAotICAgIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAw eDAwNzUsIDB4MDA3NiwgMHgwMDc3LAotICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDBm MCwgMHgwMDdjLCAweDAwZTYsIDB4MDBmNgotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2pp czAyMDFyID0gewotICAgIDk0LCAzMywgWDJVX0lTT3xYMlVfU1RELEFMX1JPTUFOLCJKYXBhbmVz ZSBSb21hbiIsImphcGFuZXNlLXJvbWFuIiwxNCwiSiIsCi0gICAgICAgICAgICAweDAwMjEsIDB4 MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCi0gICAgMHgwMDI4 LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYs Ci0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgw MDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2Ms IDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0gICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgw MDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCi0gICAgMHgwMDQ4LCAweDAwNDks IDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCi0gICAgMHgw MDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAw NTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMDViLCAweDAwYTUsIDB4MDA1ZCwg MHgwMDVlLCAweDAwNWYsCi0gICAgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAw NjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCi0gICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwg MHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAwNmYsCi0gICAgMHgwMDcwLCAweDAw NzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCi0gICAg MHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMDdiLCAweDAwN2MsIDB4MDA3ZCwgMHgyMDNlCi19 OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfamlzMDIwMWsgPSB7Ci0gICAgOTQsIDMzLCBYMlVf SVNPfFgyVV9TVEQsQUxfS0FOQSwiSmFwYW5lc2UgS2F0YWthbmEiLCAia2F0YWthbmEiLCAxMywg IkkiLAotICAgICAgICAgICAgMHhmZjYxLCAweGZmNjIsIDB4ZmY2MywgMHhmZjY0LCAweGZmNjUs IDB4ZmY2NiwgMHhmZjY3LAotICAgIDB4ZmY2OCwgMHhmZjY5LCAweGZmNmEsIDB4ZmY2YiwgMHhm ZjZjLCAweGZmNmQsIDB4ZmY2ZSwgMHhmZjZmLAotICAgIDB4ZmY3MCwgMHhmZjcxLCAweGZmNzIs IDB4ZmY3MywgMHhmZjc0LCAweGZmNzUsIDB4ZmY3NiwgMHhmZjc3LAotICAgIDB4ZmY3OCwgMHhm Zjc5LCAweGZmN2EsIDB4ZmY3YiwgMHhmZjdjLCAweGZmN2QsIDB4ZmY3ZSwgMHhmZjdmLAotICAg IDB4ZmY4MCwgMHhmZjgxLCAweGZmODIsIDB4ZmY4MywgMHhmZjg0LCAweGZmODUsIDB4ZmY4Niwg MHhmZjg3LAotICAgIDB4ZmY4OCwgMHhmZjg5LCAweGZmOGEsIDB4ZmY4YiwgMHhmZjhjLCAweGZm OGQsIDB4ZmY4ZSwgMHhmZjhmLAotICAgIDB4ZmY5MCwgMHhmZjkxLCAweGZmOTIsIDB4ZmY5Mywg MHhmZjk0LCAweGZmOTUsIDB4ZmY5NiwgMHhmZjk3LAotICAgIDB4ZmY5OCwgMHhmZjk5LCAweGZm OWEsIDB4ZmY5YiwgMHhmZjljLCAweGZmOWQsIDB4ZmY5ZSwgMHhmZjlmLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZAotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X25v cndlZ2lhbiA9IHsgICAgIC8qIFNhbWUgYXMgRGFuaXNoICovCi0gICAgOTQsMzMsWDJVX0lTT3xY MlVfU1RELEFMX1JPTUFOLCJOb3J3ZWdpYW4gSVNPIDY0NiIsICJub3J3ZWdpYW4iLCA2MCwgImBF NiIsCi0gICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwg MHgwMDI2LCAweDAwMjcsCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAw MmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwg MHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAweDAw MzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0gICAg MHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAw eDAwNDcsCi0gICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0 ZCwgMHgwMDRlLCAweDAwNGYsCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAw eDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1 YSwgMHgwMGM2LCAweDAwZDgsIDB4MDBjNSwgMHgwMDVlLCAweDAwNWYsCi0gICAgMHgwMDYwLCAw eDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCi0g ICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZl LCAweDAwNmYsCi0gICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4 MDA3NSwgMHgwMDc2LCAweDAwNzcsCi0gICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMGU2 LCAweDAwZjgsIDB4MDBlNSwgMHgwMDdlCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfZGFu aXNoID0geyAgICAgICAgLyogU2FtZSBhcyBOb3J3ZWdpYW4gKi8KLSAgICA5NCwgMzMsIFgyVV9J U098WDJVX1NURCwgQUxfUk9NQU4sICJEYW5pc2ggSVNPIDY0NiIsICJkYW5pc2giLCA2MCwgImBF NiIsCi0gICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwg MHgwMDI2LCAweDAwMjcsCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAw MmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwg MHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAweDAw MzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0gICAg MHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAw eDAwNDcsCi0gICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0 ZCwgMHgwMDRlLCAweDAwNGYsCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAw eDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1 YSwgMHgwMGM2LCAweDAwZDgsIDB4MDBjNSwgMHgwMDVlLCAweDAwNWYsCi0gICAgMHgwMDYwLCAw eDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCi0g ICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZl LCAweDAwNmYsCi0gICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4 MDA3NSwgMHgwMDc2LCAweDAwNzcsCi0gICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMGU2 LCAweDAwZjgsIDB4MDBlNSwgMHgwMDdlCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfcG9y dHVndWVzZSA9IHsKLSAgICA5NCwzMyxYMlVfSVNPfFgyVV9TVEQsQUxfUk9NQU4sIlBvcnR1Z3Vl c2UgSVNPIDY0NiIsInBvcnR1Z3Vlc2UiLDE2LCJMJTYiLAotICAgICAgICAgICAgMHgwMDIxLCAw eDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAotICAgIDB4MDAy OCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJm LAotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4 MDAzNiwgMHgwMDM3LAotICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNj LCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAotICAgIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4 MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAotICAgIDB4MDA0OCwgMHgwMDQ5 LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAotICAgIDB4 MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgw MDU3LAotICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDBjNiwgMHgwMGQ4LCAweDAwYzUs IDB4MDA1ZSwgMHgwMDVmLAotICAgIDB4MDA2MCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgw MDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAotICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEs IDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2ZSwgMHgwMDZmLAotICAgIDB4MDA3MCwgMHgw MDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LAotICAg IDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDBlNiwgMHgwMGY4LCAweDAwZTUsIDB4MDA3ZQot fTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X3NwYW5pc2ggPSB7Ci0gICAgOTQsIDMzLCBYMlVf SVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiU3BhbmlzaCBJU08gNjQ2IiwgInNwYW5pc2giLCAxNywg IloiLAotICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDBhMywgMHgwMDI0LCAweDAwMjUs IDB4MDAyNiwgMHgwMDI3LAotICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgw MDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIs IDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAotICAgIDB4MDAzOCwgMHgw MDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAotICAg IDB4MDBhNywgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0Niwg MHgwMDQ3LAotICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAw NGQsIDB4MDA0ZSwgMHgwMDRmLAotICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1Mywg MHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAotICAgIDB4MDA1OCwgMHgwMDU5LCAweDAw NWEsIDB4MDBhMSwgMHgwMGQxLCAweDAwYmYsIDB4MDA1ZSwgMHgwMDVmLAotICAgIDB4MDA2MCwg MHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAot ICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2 ZSwgMHgwMDZmLAotICAgIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAw eDAwNzUsIDB4MDA3NiwgMHgwMDc3LAotICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDBi MCwgMHgwMGYxLCAweDAwZTcsIDB4MDA3ZQotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X3N3 ZWRpc2ggPSB7Ci0gICAgOTQsIDMzLCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiU3dlZGlz aCBJU08gNjQ2IiwgInN3ZWRpc2giLCAxMSwgIkhHIiwKLSAgICAgICAgICAgIDB4MDAyMSwgMHgw MDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKLSAgICAweDAwMjgs IDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwK LSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAw MzYsIDB4MDAzNywKLSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywg MHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKLSAgICAweDAwYzksIDB4MDA0MSwgMHgwMDQyLCAweDAw NDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKLSAgICAweDAwNDgsIDB4MDA0OSwg MHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKLSAgICAweDAw NTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1 NywKLSAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwYzQsIDB4MDBkNiwgMHgwMGM1LCAw eDAwZGMsIDB4MDA1ZiwKLSAgICAweDAwZTksIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2 NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywKLSAgICAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAw eDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUsIDB4MDA2ZiwKLSAgICAweDAwNzAsIDB4MDA3 MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywKLSAgICAw eDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwZTQsIDB4MDBmNiwgMHgwMGU1LCAweDAwZmMKLX07 Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9zd2lzcyA9IHsKLSAgICA5NCwgMzMsIFgyVV9ERUN8 WDJVX1NURCwgQUxfUk9NQU4sICJTd2lzcyBOUkMiLCAic3dpc3MiLCAwLCAiPSIsCi0gICAgICAg ICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMGY5LCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAw MjcsCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwg MHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAw MzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwg MHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0gICAgMHgwMGUwLCAweDAw NDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCi0gICAg MHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAw eDAwNGYsCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1 NSwgMHgwMDU2LCAweDAwNTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMGU5LCAw eDAwZTcsIDB4MDBlYSwgMHgwMGVlLCAweDAwZTgsCi0gICAgMHgwMGY0LCAweDAwNjEsIDB4MDA2 MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCi0gICAgMHgwMDY4LCAw eDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAwNmYsCi0g ICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2 LCAweDAwNzcsCi0gICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMGU0LCAweDAwZjYsIDB4 MDBmYywgMHgwMGZiCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfa29pNyA9IHsKLSAgICA5 NCwgMzMsIFgyVV9TVEQsIEFMX0NZUklMLCAiU2hvcnQgS09JIiwgInNob3J0LWtvaSIsIDAsIE5V TEwsCi0gICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwg MHgwMDI2LCAweDAwMjcsCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAw MmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwg MHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAweDAw MzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0gICAg MHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAw eDAwNDcsCi0gICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0 ZCwgMHgwMDRlLCAweDAwNGYsCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAw eDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1 YSwgMHgwMDViLCAweDAwNWMsIDB4MDA1ZCwgMHgwMDVlLCAweDAwNWYsCi0gICAgMHgwNDJlLCAw eDA0MTAsIDB4MDQxMSwgMHgwNDI2LCAweDA0MTQsIDB4MDQxNSwgMHgwNDI0LCAweDA0MTMsCi0g ICAgMHgwNDI1LCAweDA0MTgsIDB4MDQxOSwgMHgwNDFhLCAweDA0MWIsIDB4MDQxYywgMHgwNDFk LCAweDA0MWUsCi0gICAgMHgwNDFmLCAweDA0MmYsIDB4MDQyMCwgMHgwNDIxLCAweDA0MjIsIDB4 MDQyMywgMHgwNDE2LCAweDA0MTIsCi0gICAgMHgwNDJjLCAweDA0MmIsIDB4MDQxNywgMHgwNDI4 LCAweDA0MmQsIDB4MDQyOSwgMHgwNDI3Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfZWxv dDkyNyA9IHsKLSAgICA5NCwgMzMsIFgyVV9TVEQsIEFMX0dSRUVLLCAiRUxPVCA5MjciLCAiZWxv dDkyNy1ncmVlayIsIDAsIE5VTEwsCi0gICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIz LCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCi0gICAgMHgwMDI4LCAweDAwMjksIDB4 MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMw LCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcs Ci0gICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgw MDNlLCAweDAwM2YsCi0gICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQs IDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCi0gICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgw MDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCi0gICAgMHgwMDUwLCAweDAwNTEs IDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCi0gICAgMHgw MDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMDViLCAweDAwNWMsIDB4MDA1ZCwgMHgwMDVlLCAweDAw NWYsCi0gICAgMHgwMDYwLCAweDAzOTEsIDB4MDM5MiwgMHgwMzkzLCAweDAzOTQsIDB4MDM5NSwg MHgwMzk2LCAweDAzOTcsCi0gICAgMHgwMzk4LCAweDAzOTksIDB4MDM5YSwgMHgwMzliLCAweDAz OWMsIDB4MDM5ZCwgMHgwMzllLCAweDAzOWYsCi0gICAgMHgwM2EwLCAweDAzYTEsIDB4MDNhMywg MHgwM2E0LCAweDAzYTUsIDB4MDNhNiwgMHgwM2E3LCAweDAzYTgsCi0gICAgMHgwM2E5LCAweDAw MjAsIDB4MDAyMCwgMHgwMDdiLCAweDAwN2MsIDB4MDA3ZCwgMHgwMDdlCi19OwotCi0KLXN0cnVj dCB4X3RvX3VuaWNvZGUgdV9oZWJyZXc3ID0gewotICAgIDk0LCAzMywgWDJVX1NURCwgQUxfSEVC UkVXLCAiSGVicmV3LTciLCAiaGVicmV3LTciLCAwLCBOVUxMLAotICAgICAgICAgICAgMHgwMDIx LCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAotICAgIDB4 MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgw MDJmLAotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUs IDB4MDAzNiwgMHgwMDM3LAotICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgw MDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAotICAgIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIs IDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAotICAgIDB4MDA0OCwgMHgw MDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAotICAg IDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1Niwg MHgwMDU3LAotICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDA1YiwgMHgwMDVjLCAweDAw NWQsIDB4MDA1ZSwgMHgwMDVmLAotICAgIDB4MDVkMCwgMHgwNWQxLCAweDA1ZDIsIDB4MDVkMywg MHgwNWQ0LCAweDA1ZDUsIDB4MDVkNiwgMHgwNWQ3LAotICAgIDB4MDVkOCwgMHgwNWQ5LCAweDA1 ZGEsIDB4MDVkYiwgMHgwNWRjLCAweDA1ZGQsIDB4MDVkZSwgMHgwNWRmLAotICAgIDB4MDVlMCwg MHgwNWUxLCAweDA1ZTIsIDB4MDVlMywgMHgwNWU0LCAweDA1ZTUsIDB4MDVlNiwgMHgwNWU3LAot ICAgIDB4MDVlOCwgMHgwNWU5LCAweDA1ZWEsIDB4MDA3YiwgMHgwMDdjLCAweDAwN2QsIDB4MDA3 ZQotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2FwbDEgPSB7Ci0gICAgOTQsIDMzLCBYMlVf SVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiQVBMIElTTyIsICJhcGwtaXNvIiwgNjgsICJlIiwKLSAg ICAgICAgICAgIDB4MDBhOCwgMHgwMDI5LCAweDAwM2MsIDB4MjI2NCwgMHgwMDNkLCAweDAwM2Us IDB4MDA1ZCwKLSAgICAweDIyMjgsIDB4MjIyNywgMHgyMjYwLCAweDAwZjcsIDB4MDAyYywgMHgw MDJiLCAweDAwMmUsIDB4MDAyZiwKLSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMs IDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKLSAgICAweDAwMzgsIDB4MDAzOSwgMHgw MDI4LCAweDAwNWIsIDB4MDAzYiwgMHgwMGQ3LCAweDAwM2EsIDB4MDA1YywKLSAgICAweDAwYWYs IDB4MjM3YSwgMHgyMmE1LCAweDIyYzIsIDB4MjMwYSwgMHgyMjBhLCAweDAwNWYsIDB4MjIwNywK LSAgICAweDIyMDYsIDB4MjM3MywgMHgyMjE4LCAweDAwMjcsIDB4MjVhZiwgMHgwMDdjLCAweDIy YTQsIDB4MjVjYiwKLSAgICAweDIyYzYsIDB4MDAzZiwgMHgyMzc0LCAweDIzMDgsIDB4MjIzYywg MHgyMTkzLCAweDIyMmEsIDB4MjM3NSwKLSAgICAweDIyODMsIDB4MjE5MSwgMHgyMjgyLCAweDIx OTAsIDB4MjJhMiwgMHgyMTkyLCAweDIyNjUsIDB4MDAyZCwKLSAgICAweDIyYzQsIDB4MDA0MSwg MHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKLSAgICAweDAw NDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0 ZiwKLSAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAw eDAwNTYsIDB4MDA1NywKLSAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwN2IsIDB4MjJh MywgMHgwMDdkLCAweDAwMjQKLX07Ci0KLS8qIElTTyA4ODU5IExhdGluIEFscGhhYmV0cyAqLwot Ci1zdHJ1Y3QgeF90b191bmljb2RlIHVfODg1OV8xID0gewotICAgIDk2LCAzMiwgWDJVX0lTT3xY MlVfU1RELCBBTF9ST01BTiwgIklTTyBMYXRpbi0xIiwgImxhdGluMSIsIDEwMCwgIkEiLAotICAg IDB4MDBBMCwgMHgwMEExLCAweDAwQTIsIDB4MDBBMywgMHgwMEE0LCAweDAwQTUsIDB4MDBBNiwg MHgwMEE3LAotICAgIDB4MDBBOCwgMHgwMEE5LCAweDAwQUEsIDB4MDBBQiwgMHgwMEFDLCAweDAw QUQsIDB4MDBBRSwgMHgwMEFGLAotICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBCMywg MHgwMEI0LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LAotICAgIDB4MDBCOCwgMHgwMEI5LCAweDAw QkEsIDB4MDBCQiwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgwMEJGLAotICAgIDB4MDBDMCwg MHgwMEMxLCAweDAwQzIsIDB4MDBDMywgMHgwMEM0LCAweDAwQzUsIDB4MDBDNiwgMHgwMEM3LAot ICAgIDB4MDBDOCwgMHgwMEM5LCAweDAwQ0EsIDB4MDBDQiwgMHgwMENDLCAweDAwQ0QsIDB4MDBD RSwgMHgwMENGLAotICAgIDB4MDBEMCwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywgMHgwMEQ0LCAw eDAwRDUsIDB4MDBENiwgMHgwMEQ3LAotICAgIDB4MDBEOCwgMHgwMEQ5LCAweDAwREEsIDB4MDBE QiwgMHgwMERDLCAweDAwREQsIDB4MDBERSwgMHgwMERGLAotICAgIDB4MDBFMCwgMHgwMEUxLCAw eDAwRTIsIDB4MDBFMywgMHgwMEU0LCAweDAwRTUsIDB4MDBFNiwgMHgwMEU3LAotICAgIDB4MDBF OCwgMHgwMEU5LCAweDAwRUEsIDB4MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBFRSwgMHgwMEVG LAotICAgIDB4MDBGMCwgMHgwMEYxLCAweDAwRjIsIDB4MDBGMywgMHgwMEY0LCAweDAwRjUsIDB4 MDBGNiwgMHgwMEY3LAotICAgIDB4MDBGOCwgMHgwMEY5LCAweDAwRkEsIDB4MDBGQiwgMHgwMEZD LCAweDAwRkQsIDB4MDBGRSwgMHgwMEZGCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfODg1 OV8yID0gewotICAgIDk2LCAzMiwgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIklTTyBMYXRp bi0yIiwgImxhdGluMiIsIDEwMSwgIkIiLAotICAgIDB4MDBBMCwgMHgwMTA0LCAweDAyRDgsIDB4 MDE0MSwgMHgwMEE0LCAweDAxM0QsIDB4MDE1QSwgMHgwMEE3LAotICAgIDB4MDBBOCwgMHgwMTYw LCAweDAxNUUsIDB4MDE2NCwgMHgwMTc5LCAweDAwQUQsIDB4MDE3RCwgMHgwMTdCLAotICAgIDB4 MDBCMCwgMHgwMTA1LCAweDAyREIsIDB4MDE0MiwgMHgwMEI0LCAweDAxM0UsIDB4MDE1QiwgMHgw MkM3LAotICAgIDB4MDBCOCwgMHgwMTYxLCAweDAxNUYsIDB4MDE2NSwgMHgwMTdBLCAweDAyREQs IDB4MDE3RSwgMHgwMTdDLAotICAgIDB4MDE1NCwgMHgwMEMxLCAweDAwQzIsIDB4MDEwMiwgMHgw MEM0LCAweDAxMzksIDB4MDEwNiwgMHgwMEM3LAotICAgIDB4MDEwQywgMHgwMEM5LCAweDAxMTgs IDB4MDBDQiwgMHgwMTFBLCAweDAwQ0QsIDB4MDBDRSwgMHgwMTBFLAotICAgIDB4MDExMCwgMHgw MTQzLCAweDAxNDcsIDB4MDBEMywgMHgwMEQ0LCAweDAxNTAsIDB4MDBENiwgMHgwMEQ3LAotICAg IDB4MDE1OCwgMHgwMTZFLCAweDAwREEsIDB4MDE3MCwgMHgwMERDLCAweDAwREQsIDB4MDE2Miwg MHgwMERGLAotICAgIDB4MDE1NSwgMHgwMEUxLCAweDAwRTIsIDB4MDEwMywgMHgwMEU0LCAweDAx M0EsIDB4MDEwNywgMHgwMEU3LAotICAgIDB4MDEwRCwgMHgwMEU5LCAweDAxMTksIDB4MDBFQiwg MHgwMTFCLCAweDAwRUQsIDB4MDBFRSwgMHgwMTBGLAotICAgIDB4MDExMSwgMHgwMTQ0LCAweDAx NDgsIDB4MDBGMywgMHgwMEY0LCAweDAxNTEsIDB4MDBGNiwgMHgwMEY3LAotICAgIDB4MDE1OSwg MHgwMTZGLCAweDAwRkEsIDB4MDE3MSwgMHgwMEZDLCAweDAwRkQsIDB4MDE2MywgMHgwMkQ5Ci19 OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfODg1OV8zID0gewotICAgIDk2LCAzMiwgWDJVX0lT T3xYMlVfU1RELCBBTF9ST01BTiwgIklTTyBMYXRpbi0zIiwgImxhdGluMyIsIDEwOSwgIkMiLAot ICAgIDB4MDBBMCwgMHgwMTI2LCAweDAyRDgsIDB4MDBBMywgMHgwMEE0LCAweGZmZmQsIDB4MDEy NCwgMHgwMEE3LAotICAgIDB4MDBBOCwgMHgwMTMwLCAweDAxNUUsIDB4MDExRSwgMHgwMTM0LCAw eDAwQUQsIDB4ZmZmZCwgMHgwMTdCLAotICAgIDB4MDBCMCwgMHgwMTI3LCAweDAwQjIsIDB4MDBC MywgMHgwMEI0LCAweDAwQjUsIDB4MDEyNSwgMHgwMEI3LAotICAgIDB4MDBCOCwgMHgwMTMxLCAw eDAxNUYsIDB4MDExRiwgMHgwMTM1LCAweDAwQkQsIDB4ZmZmZCwgMHgwMTdDLAotICAgIDB4MDBD MCwgMHgwMEMxLCAweDAwQzIsIDB4ZmZmZCwgMHgwMEM0LCAweDAxMEEsIDB4MDEwOCwgMHgwMEM3 LAotICAgIDB4MDBDOCwgMHgwMEM5LCAweDAwQ0EsIDB4MDBDQiwgMHgwMENDLCAweDAwQ0QsIDB4 MDBDRSwgMHgwMENGLAotICAgIDB4ZmZmZCwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywgMHgwMEQ0 LCAweDAxMjAsIDB4MDBENiwgMHgwMEQ3LAotICAgIDB4MDExQywgMHgwMEQ5LCAweDAwREEsIDB4 MDBEQiwgMHgwMERDLCAweDAxNkMsIDB4MDE1QywgMHgwMERGLAotICAgIDB4MDBFMCwgMHgwMEUx LCAweDAwRTIsIDB4ZmZmZCwgMHgwMEU0LCAweDAxMEIsIDB4MDEwOSwgMHgwMEU3LAotICAgIDB4 MDBFOCwgMHgwMEU5LCAweDAwRUEsIDB4MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBFRSwgMHgw MEVGLAotICAgIDB4ZmZmZCwgMHgwMEYxLCAweDAwRjIsIDB4MDBGMywgMHgwMEY0LCAweDAxMjEs IDB4MDBGNiwgMHgwMEY3LAotICAgIDB4MDExRCwgMHgwMEY5LCAweDAwRkEsIDB4MDBGQiwgMHgw MEZDLCAweDAxNkQsIDB4MDE1RCwgMHgwMkQ5Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVf ODg1OV80ID0gewotICAgIDk2LCAzMiwgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIklTTyBM YXRpbi00IiwgImxhdGluNCIsIDExMCwgIkQiLAotICAgIDB4MDBBMCwgMHgwMTA0LCAweDAxMzgs IDB4MDE1NiwgMHgwMEE0LCAweDAxMjgsIDB4MDEzQiwgMHgwMEE3LAotICAgIDB4MDBBOCwgMHgw MTYwLCAweDAxMTIsIDB4MDEyMiwgMHgwMTY2LCAweDAwQUQsIDB4MDE3RCwgMHgwMEFGLAotICAg IDB4MDBCMCwgMHgwMTA1LCAweDAyREIsIDB4MDE1NywgMHgwMEI0LCAweDAxMjksIDB4MDEzQywg MHgwMkM3LAotICAgIDB4MDBCOCwgMHgwMTYxLCAweDAxMTMsIDB4MDEyMywgMHgwMTY3LCAweDAx NEEsIDB4MDE3RSwgMHgwMTRCLAotICAgIDB4MDEwMCwgMHgwMEMxLCAweDAwQzIsIDB4MDBDMywg MHgwMEM0LCAweDAwQzUsIDB4MDBDNiwgMHgwMTJFLAotICAgIDB4MDEwQywgMHgwMEM5LCAweDAx MTgsIDB4MDBDQiwgMHgwMTE2LCAweDAwQ0QsIDB4MDBDRSwgMHgwMTJBLAotICAgIDB4MDExMCwg MHgwMTQ1LCAweDAxNEMsIDB4MDEzNiwgMHgwMEQ0LCAweDAwRDUsIDB4MDBENiwgMHgwMEQ3LAot ICAgIDB4MDBEOCwgMHgwMTcyLCAweDAwREEsIDB4MDBEQiwgMHgwMERDLCAweDAxNjgsIDB4MDE2 QSwgMHgwMERGLAotICAgIDB4MDEwMSwgMHgwMEUxLCAweDAwRTIsIDB4MDBFMywgMHgwMEU0LCAw eDAwRTUsIDB4MDBFNiwgMHgwMTJGLAotICAgIDB4MDEwRCwgMHgwMEU5LCAweDAxMTksIDB4MDBF QiwgMHgwMTE3LCAweDAwRUQsIDB4MDBFRSwgMHgwMTJCLAotICAgIDB4MDExMSwgMHgwMTQ2LCAw eDAxNEQsIDB4MDEzNywgMHgwMEY0LCAweDAwRjUsIDB4MDBGNiwgMHgwMEY3LAotICAgIDB4MDBG OCwgMHgwMTczLCAweDAwRkEsIDB4MDBGQiwgMHgwMEZDLCAweDAxNjksIDB4MDE2QiwgMHgwMkQ5 Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfODg1OV81ID0gewotICAgIDk2LDMyLFgyVV9J U098WDJVX1NURCxBTF9DWVJJTCwiSVNPIExhdGluL0N5cmlsbGljIiwiY3lyaWxsaWMtaXNvIiwx NDQsIkwiLAotICAgIDB4MDBBMCwgMHgwNDAxLCAweDA0MDIsIDB4MDQwMywgMHgwNDA0LCAweDA0 MDUsIDB4MDQwNiwgMHgwNDA3LAotICAgIDB4MDQwOCwgMHgwNDA5LCAweDA0MEEsIDB4MDQwQiwg MHgwNDBDLCAweDAwQUQsIDB4MDQwRSwgMHgwNDBGLAotICAgIDB4MDQxMCwgMHgwNDExLCAweDA0 MTIsIDB4MDQxMywgMHgwNDE0LCAweDA0MTUsIDB4MDQxNiwgMHgwNDE3LAotICAgIDB4MDQxOCwg MHgwNDE5LCAweDA0MUEsIDB4MDQxQiwgMHgwNDFDLCAweDA0MUQsIDB4MDQxRSwgMHgwNDFGLAot ICAgIDB4MDQyMCwgMHgwNDIxLCAweDA0MjIsIDB4MDQyMywgMHgwNDI0LCAweDA0MjUsIDB4MDQy NiwgMHgwNDI3LAotICAgIDB4MDQyOCwgMHgwNDI5LCAweDA0MkEsIDB4MDQyQiwgMHgwNDJDLCAw eDA0MkQsIDB4MDQyRSwgMHgwNDJGLAotICAgIDB4MDQzMCwgMHgwNDMxLCAweDA0MzIsIDB4MDQz MywgMHgwNDM0LCAweDA0MzUsIDB4MDQzNiwgMHgwNDM3LAotICAgIDB4MDQzOCwgMHgwNDM5LCAw eDA0M0EsIDB4MDQzQiwgMHgwNDNDLCAweDA0M0QsIDB4MDQzRSwgMHgwNDNGLAotICAgIDB4MDQ0 MCwgMHgwNDQxLCAweDA0NDIsIDB4MDQ0MywgMHgwNDQ0LCAweDA0NDUsIDB4MDQ0NiwgMHgwNDQ3 LAotICAgIDB4MDQ0OCwgMHgwNDQ5LCAweDA0NEEsIDB4MDQ0QiwgMHgwNDRDLCAweDA0NEQsIDB4 MDQ0RSwgMHgwNDRGLAotICAgIDB4MjExNiwgMHgwNDUxLCAweDA0NTIsIDB4MDQ1MywgMHgwNDU0 LCAweDA0NTUsIDB4MDQ1NiwgMHgwNDU3LAotICAgIDB4MDQ1OCwgMHgwNDU5LCAweDA0NUEsIDB4 MDQ1QiwgMHgwNDVDLCAweDAwQTcsIDB4MDQ1RSwgMHgwNDVGCi19OwotCi1zdHJ1Y3QgeF90b191 bmljb2RlIHVfODg1OV82ID0gewotICAgIDk2LCAzMiwgWDJVX0lTT3xYMlVfU1RELEFMX0FSQUJJ QywiSVNPIExhdGluL0FyYWJpYyIsImFyYWJpYy1pc28iLDEyNywiRyIsCi0gICAgMHgwMEEwLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDAwQTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDA2MEMsIDB4MDBBRCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgwNjFC LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDA2MUYsCi0gICAgMHhmZmZkLCAweDA2MjEsIDB4 MDYyMiwgMHgwNjIzLCAweDA2MjQsIDB4MDYyNSwgMHgwNjI2LCAweDA2MjcsCi0gICAgMHgwNjI4 LCAweDA2MjksIDB4MDYyQSwgMHgwNjJCLCAweDA2MkMsIDB4MDYyRCwgMHgwNjJFLCAweDA2MkYs Ci0gICAgMHgwNjMwLCAweDA2MzEsIDB4MDYzMiwgMHgwNjMzLCAweDA2MzQsIDB4MDYzNSwgMHgw NjM2LCAweDA2MzcsCi0gICAgMHgwNjM4LCAweDA2MzksIDB4MDYzQSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHgwNjQwLCAweDA2NDEsIDB4MDY0MiwgMHgw NjQzLCAweDA2NDQsIDB4MDY0NSwgMHgwNjQ2LCAweDA2NDcsCi0gICAgMHgwNjQ4LCAweDA2NDks IDB4MDY0QSwgMHgwNjRCLCAweDA2NEMsIDB4MDY0RCwgMHgwNjRFLCAweDA2NEYsCi0gICAgMHgw NjUwLCAweDA2NTEsIDB4MDY1MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV84ODU5XzcgPSB7Ci0g ICAgOTYsIDMyLCBYMlVfSVNPfFgyVV9TVEQsQUxfR1JFRUssIklTTyBMYXRpbi9HcmVlayIsICJn cmVlay1pc28iLCAxMjYsICJGIiwKLSAgICAweDAwQTAsIDB4MjAxOCwgMHgyMDE5LCAweDAwQTMs IDB4RkZGRCwgMHhGRkZELCAweDAwQTYsIDB4MDBBNywKLSAgICAweDAwQTgsIDB4MDBBOSwgMHhG RkZELCAweDAwQUIsIDB4MDBBQywgMHgwMEFELCAweEZGRkQsIDB4MjAxNSwKLSAgICAweDAwQjAs IDB4MDBCMSwgMHgwMEIyLCAweDAwQjMsIDB4MDM4NCwgMHgwMzg1LCAweDAzODYsIDB4MDBCNywK LSAgICAweDAzODgsIDB4MDM4OSwgMHgwMzhBLCAweDAwQkIsIDB4MDM4QywgMHgwMEJELCAweDAz OEUsIDB4MDM4RiwKLSAgICAweDAzOTAsIDB4MDM5MSwgMHgwMzkyLCAweDAzOTMsIDB4MDM5NCwg MHgwMzk1LCAweDAzOTYsIDB4MDM5NywKLSAgICAweDAzOTgsIDB4MDM5OSwgMHgwMzlBLCAweDAz OUIsIDB4MDM5QywgMHgwMzlELCAweDAzOUUsIDB4MDM5RiwKLSAgICAweDAzQTAsIDB4MDNBMSwg MHhmZmZkLCAweDAzQTMsIDB4MDNBNCwgMHgwM0E1LCAweDAzQTYsIDB4MDNBNywKLSAgICAweDAz QTgsIDB4MDNBOSwgMHgwM0FBLCAweDAzQUIsIDB4MDNBQywgMHgwM0FELCAweDAzQUUsIDB4MDNB RiwKLSAgICAweDAzQjAsIDB4MDNCMSwgMHgwM0IyLCAweDAzQjMsIDB4MDNCNCwgMHgwM0I1LCAw eDAzQjYsIDB4MDNCNywKLSAgICAweDAzQjgsIDB4MDNCOSwgMHgwM0JBLCAweDAzQkIsIDB4MDNC QywgMHgwM0JELCAweDAzQkUsIDB4MDNCRiwKLSAgICAweDAzQzAsIDB4MDNDMSwgMHgwM0MyLCAw eDAzQzMsIDB4MDNDNCwgMHgwM0M1LCAweDAzQzYsIDB4MDNDNywKLSAgICAweDAzQzgsIDB4MDND OSwgMHgwM0NBLCAweDAzQ0IsIDB4MDNDQywgMHgwM0NELCAweDAzQ0UsIDB4ZmZmZAotfTsKLQot c3RydWN0IHhfdG9fdW5pY29kZSB1Xzg4NTlfOCA9IHsKLSAgICA5NiwgMzIsIFgyVV9JU098WDJV X1NURCxBTF9IRUJSRVcsIklTTyBMYXRpbi9IZWJyZXciLCJoZWJyZXctaXNvIiwxMjEsIkgiLAot ICAgIDB4MDBBMCwgMHhmZmZkLCAweDAwQTIsIDB4MDBBMywgMHgwMEE0LCAweDAwQTUsIDB4MDBB NiwgMHgwMEE3LAotICAgIDB4MDBBOCwgMHgwMEE5LCAweDAwRDcsIDB4MDBBQiwgMHgwMEFDLCAw eDAwQUQsIDB4MDBBRSwgMHgyMDNFLAotICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBC MywgMHgwMEI0LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LAotICAgIDB4MDBCOCwgMHgwMEI5LCAw eDAwRjcsIDB4MDBCQiwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgyMDE3LAotICAgIDB4MDVEMCwgMHgwNUQx LCAweDA1RDIsIDB4MDVEMywgMHgwNUQ0LCAweDA1RDUsIDB4MDVENiwgMHgwNUQ3LAotICAgIDB4 MDVEOCwgMHgwNUQ5LCAweDA1REEsIDB4MDVEQiwgMHgwNURDLCAweDA1REQsIDB4MDVERSwgMHgw NURGLAotICAgIDB4MDVFMCwgMHgwNUUxLCAweDA1RTIsIDB4MDVFMywgMHgwNUU0LCAweDA1RTUs IDB4MDVFNiwgMHgwNUU3LAotICAgIDB4MDVFOCwgMHgwNUU5LCAweDA1RUEsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVf ODg1OV85ID0gewotICAgIDk2LCAzMiwgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIklTTyBM YXRpbi01IiwgImxhdGluNSIsIDE0OCwgIk0iLAotICAgIDB4MDBBMCwgMHgwMEExLCAweDAwQTIs IDB4MDBBMywgMHgwMEE0LCAweDAwQTUsIDB4MDBBNiwgMHgwMEE3LAotICAgIDB4MDBBOCwgMHgw MEE5LCAweDAwQUEsIDB4MDBBQiwgMHgwMEFDLCAweDAwQUQsIDB4MDBBRSwgMHgwMEFGLAotICAg IDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBCMywgMHgwMEI0LCAweDAwQjUsIDB4MDBCNiwg MHgwMEI3LAotICAgIDB4MDBCOCwgMHgwMEI5LCAweDAwQkEsIDB4MDBCQiwgMHgwMEJDLCAweDAw QkQsIDB4MDBCRSwgMHgwMEJGLAotICAgIDB4MDBDMCwgMHgwMEMxLCAweDAwQzIsIDB4MDBDMywg MHgwMEM0LCAweDAwQzUsIDB4MDBDNiwgMHgwMEM3LAotICAgIDB4MDBDOCwgMHgwMEM5LCAweDAw Q0EsIDB4MDBDQiwgMHgwMENDLCAweDAwQ0QsIDB4MDBDRSwgMHgwMENGLAotICAgIDB4MDExRSwg MHgwMEQxLCAweDAwRDIsIDB4MDBEMywgMHgwMEQ0LCAweDAwRDUsIDB4MDBENiwgMHgwMEQ3LAot ICAgIDB4MDBEOCwgMHgwMEQ5LCAweDAwREEsIDB4MDBEQiwgMHgwMERDLCAweDAxMzAsIDB4MDE1 RSwgMHgwMERGLAotICAgIDB4MDBFMCwgMHgwMEUxLCAweDAwRTIsIDB4MDBFMywgMHgwMEU0LCAw eDAwRTUsIDB4MDBFNiwgMHgwMEU3LAotICAgIDB4MDBFOCwgMHgwMEU5LCAweDAwRUEsIDB4MDBF QiwgMHgwMEVDLCAweDAwRUQsIDB4MDBFRSwgMHgwMEVGLAotICAgIDB4MDExRiwgMHgwMEYxLCAw eDAwRjIsIDB4MDBGMywgMHgwMEY0LCAweDAwRjUsIDB4MDBGNiwgMHgwMEY3LAotICAgIDB4MDBG OCwgMHgwMEY5LCAweDAwRkEsIDB4MDBGQiwgMHgwMEZDLCAweDAxMzEsIDB4MDE1RiwgMHgwMEZG Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfODg1OV8xMCA9IHsKLSAgICA5NiwgMzIsIFgy VV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJJU08gTGF0aW4tNiIsICJsYXRpbjYiLCAxNTcsICJW IiwKLSAgICAweDAwYTAsIDB4MDEwNCwgMHgwMTEyLCAweDAxMjIsIDB4MDEyYSwgMHgwMTI4LCAw eDAxMzYsIDB4MDEzYiwKLSAgICAweDAxNDMsIDB4MDE1NiwgMHgwMTYwLCAweDAxNjYsIDB4MDE3 ZCwgMHgwMGFkLCAweDAxMzgsIDB4MDE0YSwKLSAgICAweDAxMTEsIDB4MDEwNSwgMHgwMTEzLCAw eDAxMjMsIDB4MDEyYiwgMHgwMTI5LCAweDAxMzcsIDB4MDEzYywKLSAgICAweDAxNDQsIDB4MDE1 NywgMHgwMTYxLCAweDAxNjcsIDB4MDE3ZSwgMHgwMGJkLCAweDAwYmUsIDB4MDE0YiwKLSAgICAw eDAxMDAsIDB4MDBjMSwgMHgwMGMyLCAweDAwYzMsIDB4MDBjNCwgMHgwMGM1LCAweDAwYzYsIDB4 MDEyZSwKLSAgICAweDAxMGMsIDB4MDBjOSwgMHgwMTE4LCAweDAwY2IsIDB4MDExNiwgMHgwMGNk LCAweDAwY2UsIDB4MDBjZiwKLSAgICAweDAxMTAsIDB4MDE0NSwgMHgwMTRjLCAweDAwZGUsIDB4 MDBkNCwgMHgwMGQ1LCAweDAwZDYsIDB4MDE2OCwKLSAgICAweDAwZDgsIDB4MDE3MiwgMHgwMGRh LCAweDAwZGIsIDB4MDBkYywgMHgwMGRkLCAweDAwZGUsIDB4MDE2YSwKLSAgICAweDAxMDEsIDB4 MDBlMSwgMHgwMGUyLCAweDAwZDMsIDB4MDBlNCwgMHgwMGU1LCAweDAwZTYsIDB4MDEyZiwKLSAg ICAweDAxMGQsIDB4MDBlOSwgMHgwMTE5LCAweDAwZWIsIDB4MDExNywgMHgwMGVkLCAweDAwZWUs IDB4MDBlZiwKLSAgICAweDAwZjAsIDB4MDBmMSwgMHgwMTRkLCAweDAwZjMsIDB4MDBmNCwgMHgw MGY1LCAweDAwZjYsIDB4MDE2OSwKLSAgICAweDAwZjgsIDB4MDE3MywgMHgwMGZhLCAweDAwZmIs IDB4MDBmYywgMHgwMGZkLCAweDAwZmUsIDB4MDE2YgotfTsKLQotLyogTGF0aW4tOSAoSVNPIDg4 NTktMTUpIGlzIHRoZSBzYW1lIGFzIExhdGluLTEgd2l0aCB0aGUgZm9sbG93aW5nIGNoYW5nZXM6 Ci0gKiAgIEE0IGlzIEV1cm8gU3ltYm9sICAgICAgICAgICAyMEFDCi0gKiAgIEE2IGlzIENhcGl0 YWwgUyBDYXJvbiAgICAgICAwMTYwCi0gKiAgIEE4IGlzIFNtYWxsIHMgY2Fyb24gICAgICAgICAw MTYxCi0gKiAgIEI0IGlzIENhcGl0YWwgWiBjYXJvbiAgICAgICAwMTdECi0gKiAgIEI4IGlzIFNt YWxsIHogY2Fyb24gICAgICAgICAwMTdFCi0gKiAgIEJDIGlzIENhcGl0YWwgT0UgbGlnYXR1cmUg ICAwMTUyCi0gKiAgIEJEIGlzIFNtYWxsIG9lIGxpZ2F0dXJlICAgICAwMTUzCi0gKiAgIEJFIGlz IENhcGl0YWwgWSBkaWFlcmVzaXMgICAwMTc4Ci0gKi8KLQotc3RydWN0IHhfdG9fdW5pY29kZSB1 Xzg4NTlfMTUgPSB7Ci0gICAgOTYsIDMyLCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiSVNP IExhdGluLTkiLCAibGF0aW45IiwgMCwgTlVMTCwKLSAgICAweDAwQTAsIDB4MDBBMSwgMHgwMEEy LCAweDAwQTMsIDB4MjBBQywgMHgwMEE1LCAweDAxNjAsIDB4MDBBNywKLSAgICAweDAxNjEsIDB4 MDBBOSwgMHgwMEFBLCAweDAwQUIsIDB4MDBBQywgMHgwMEFELCAweDAwQUUsIDB4MDBBRiwKLSAg ICAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAweDAwQjMsIDB4MDE3RCwgMHgwMEI1LCAweDAwQjYs IDB4MDBCNywKLSAgICAweDAxN0UsIDB4MDBCOSwgMHgwMEJBLCAweDAwQkIsIDB4MDE1MiwgMHgw MTUzLCAweDAxNzgsIDB4MDBCRiwKLSAgICAweDAwQzAsIDB4MDBDMSwgMHgwMEMyLCAweDAwQzMs IDB4MDBDNCwgMHgwMEM1LCAweDAwQzYsIDB4MDBDNywKLSAgICAweDAwQzgsIDB4MDBDOSwgMHgw MENBLCAweDAwQ0IsIDB4MDBDQywgMHgwMENELCAweDAwQ0UsIDB4MDBDRiwKLSAgICAweDAwRDAs IDB4MDBEMSwgMHgwMEQyLCAweDAwRDMsIDB4MDBENCwgMHgwMEQ1LCAweDAwRDYsIDB4MDBENywK LSAgICAweDAwRDgsIDB4MDBEOSwgMHgwMERBLCAweDAwREIsIDB4MDBEQywgMHgwMERELCAweDAw REUsIDB4MDBERiwKLSAgICAweDAwRTAsIDB4MDBFMSwgMHgwMEUyLCAweDAwRTMsIDB4MDBFNCwg MHgwMEU1LCAweDAwRTYsIDB4MDBFNywKLSAgICAweDAwRTgsIDB4MDBFOSwgMHgwMEVBLCAweDAw RUIsIDB4MDBFQywgMHgwMEVELCAweDAwRUUsIDB4MDBFRiwKLSAgICAweDAwRjAsIDB4MDBGMSwg MHgwMEYyLCAweDAwRjMsIDB4MDBGNCwgMHgwMEY1LCAweDAwRjYsIDB4MDBGNywKLSAgICAweDAw RjgsIDB4MDBGOSwgMHgwMEZBLCAweDAwRkIsIDB4MDBGQywgMHgwMEZELCAweDAwRkUsIDB4MDBG RgotfTsKLQotLyogRHlhZGljIFN5c3RlbXMgRHlhbG9nL1ggQVBMLCBjb3JyZXNwb25kcyB0byBB UExURVJNSS5UVEYuICovCi0vKiBVbmljb2RlIG1hcHBpbmdzIGFjY29yZGluZyB0byBJU08tSUVD IC8gSlRDIDEgLyBTQyAyMiBOIDMwNjcsIDE5OTktMTItMjguICovCi0KLXN0cnVjdCB4X3RvX3Vu aWNvZGUgdV9hcGwyID0geyAgICAgICAgICAvKiBEeWFkaWMgU3lzdGVtcyBBUEwgKyBib3ggZHJh d2luZ3MgKi8KLSAgICA5NiwgMzIsIFgyVV9TVEQsIEFMX1JPTUFOLCAiRHlhZGljIFN5c3RlbXMg QVBMIiwgImFwbC1keWFkaWMiLCAwLCBOVUxMLAotICAgIDB4MDBhMCwgMHgwMGQ3LCAweDI1MDIs IDB4MjUyNCwgMHgwMGEyLCAweDI1MTAsIDB4MjUxNCwgMHgyNTM0LAotICAgIDB4MjUyYywgMHgy NTFjLCAweDI1MDAsIDB4MjUzYywgMHgyNTE4LCAweDI1MGMsIDB4MjIwNiwgMHgwMGY3LAotICAg IDB4MjI2MCwgMHgyMmM0LCAweDIzNzUsIDB4MjM3NCwgMHgyMzdhLCAweDIyMGEsIDB4MjI2MSwg MHgyMjY1LAotICAgIDB4MjI2NCwgMHgyMmE1LCAweDIyYTQsIDB4MjE5MCwgMHgyMjE4LCAweDIz NWQsIDB4MjMzZiwgMHgyMzQwLAotICAgIDB4MjM0ZSwgMHgyMzU1LCAweDIzNGIsIDB4MjM1Miwg MHgyMzcyLCAweDIzNzEsIDB4MjM2OCwgMHgyMzVmLAotICAgIDB4MjVhZiwgMHgyMzVlLCAweDIz MzksIDB4MjM2YiwgMHgyMzZhLCAweDIyNjIsIDB4MjMwYSwgMHgyMzA4LAotICAgIDB4MjM0OSwg MHgyMjI5LCAweDIyMmEsIDB4MjM2YywgMHgwMGEzLCAweDIzM2QsIDB4MjI5NiwgMHgyMmEyLAot ICAgIDB4MjJhMywgMHgyMzM3LCAweDAwYWYsIDB4MjM3MywgMHgwMGE4LCAweDI1Y2IsIDB4MjE5 MiwgMHgyMjI4LAotICAgIDB4MjI4MiwgMHgyMjgzLCAweDIzNTksIDB4MDA0MSwgMHgwMDQyLCAw eDAwNDMsIDB4MDA0NCwgMHgwMDQ1LAotICAgIDB4MDA0NiwgMHgwMDQ3LCAweDAwNDgsIDB4MDA0 OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLAotICAgIDB4MDA0ZSwgMHgwMDRmLCAw eDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LAotICAgIDB4MDA1 NiwgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDIyMDcsIDB4MjE5MSwgMHgyMTkz Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfYXBsMyA9IHsgICAgICAgICAgLyogQVBMLVBs dXMgPSBBUEwtMjAwMCAqLwotICAgIDEyOCwgMCwgWDJVX0NYRywgQUxfUk9NQU4sICJBUEwtMjAw MCIsICJhcGwtMjAwMCIsIDAsIE5VTEwsCi0gICAgMHgyMGFjLCAweDIyYTMsIDB4MjJhNCwgMHgy MmE1LCAweDIxOTAsIDB4MjE5MiwgMHgyMTkxLCAweDIxOTMsCi0gICAgMHgyMjY0LCAweDIyNjUs IDB4MjM3MiwgMHgyMzcxLCAweDI1YWYsIDB4MjM1ZSwgMHgyMzM5LCAweDIzNTksCi0gICAgMHgy MzZiLCAweDIyMDYsIDB4MjIwNywgMHgyMzRiLCAweDIzNTIsIDB4MjM1NSwgMHgyMzRlLCAweDIz MDgsCi0gICAgMHgyMzBhLCAweDIzNDAsIDB4MjMzZiwgMHgyMjgyLCAweDIyODMsIDB4MjIyOSwg MHgyMjJhLCAweDIyMjgsCi0gICAgMHgwMGEwLCAweDAwYTEsIDB4MDBhMiwgMHgwMGEzLCAweDIy YTIsIDB4MDBhNSwgMHgwMGE2LCAweDAwYTcsCi0gICAgMHgwMGE4LCAweDIzNWQsIDB4MjJjNCwg MHgwMGFiLCAweDIyNjAsIDB4MjI2MSwgMHgyMzZhLCAweDAwYWYsCi0gICAgMHgyMjE4LCAweDI1 Y2IsIDB4MjMzZCwgMHgyMzQ5LCAweDIyOTYsIDB4MjM1ZiwgMHgwMGI2LCAweDAwYjcsCi0gICAg MHgyMzdhLCAweDIyMGEsIDB4MjM3NywgMHgwMGJiLCAweDIzNzMsIDB4MjM3NCwgMHgyMzc1LCAw eDAwYmYsCi0gICAgMHgwMGMwLCAweDAwYzEsIDB4MDBjMiwgMHgwMGMzLCAweDAwYzQsIDB4MDBj NSwgMHgwMGM2LCAweDAwYzcsCi0gICAgMHgwMGM4LCAweDAwYzksIDB4MDBjYSwgMHgwMGNiLCAw eDAwY2MsIDB4MDBjZCwgMHgwMGNlLCAweDAwY2YsCi0gICAgMHgyMzZjLCAweDAwZDEsIDB4MDBk MiwgMHgwMGQzLCAweDAwZDQsIDB4MDBkNSwgMHgwMGQ2LCAweDAwZDcsCi0gICAgMHgwMGQ4LCAw eDAwZDksIDB4MDBkYSwgMHgwMGRiLCAweDAwZGMsIDB4MDBkZCwgMHgyMzM3LCAweDAwZGYsCi0g ICAgMHgwMGUwLCAweDAwZTEsIDB4MDBlMiwgMHgwMGUzLCAweDAwZTQsIDB4MDBlNSwgMHgwMGU2 LCAweDAwZTcsCi0gICAgMHgwMGU4LCAweDAwZTksIDB4MDBlYSwgMHgwMGViLCAweDAwZWMsIDB4 MDBlZCwgMHgwMGVlLCAweDAwZWYsCi0gICAgMHgyMzY0LCAweDAwZjEsIDB4MDBmMiwgMHgwMGYz LCAweDAwZjQsIDB4MDBmNSwgMHgwMGY2LCAweDAwZjcsCi0gICAgMHgyMjA1LCAweDAwZjksIDB4 MDBmYSwgMHgwMGZiLCAweDAwZmMsIDB4MDBmZCwgMHgyMzY4LCAweDAwZmYKLX07Ci0KLXN0cnVj dCB4X3RvX3VuaWNvZGUgdV9hcGw0ID0geyAgICAgICAgICAvKiBJQk0gQVBMMiAqLwotICAgIDEy OCwgMCwgWDJVX0NYRywgQUxfUk9NQU4sICJJQk0gQVBMMiIsICJhcGwyLWlibSIsIDAsIE5VTEws Ci0gICAgMHgwMGM3LCAweDAwZmMsIDB4MDBlOSwgMHgwMGUyLCAweDAwZTQsIDB4MDBlMCwgMHgw MGU1LCAweDAwZTcsCi0gICAgMHgwMGVhLCAweDAwZWIsIDB4MDBlOCwgMHgwMGVmLCAweDAwZWUs IDB4MDBlYywgMHgwMGM0LCAweDAwYzUsCi0gICAgMHgyNWFmLCAweDIzNWUsIDB4MjMzOSwgMHgw MGY0LCAweDAwZjYsIDB4MDBmMiwgMHgwMGZiLCAweDAwZjksCi0gICAgMHgyMmE0LCAweDAwZDYs IDB4MDBkYywgMHgwMGY4LCAweDAwYTMsIDB4MjJhNSwgMHgyMTkwLCAweDIzMzYsCi0gICAgMHgw MGUxLCAweDAwZWQsIDB4MDBmMywgMHgwMGZhLCAweDAwZjEsIDB4MDBkMSwgMHgwMGFhLCAweDAw YmEsCi0gICAgMHgwMGJmLCAweDIzMDgsIDB4MDBhYywgMHgyMTkyLCAweDIyMmEsIDB4MDBhMSwg MHgyMzU1LCAweDIzNGUsCi0gICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyNTAyLCAweDI1 MjQsIDB4MjM1ZiwgMHgyMjA2LCAweDIyMDcsCi0gICAgMHgyMTkyLCAweDI1NjMsIDB4MjU1MSwg MHgyNTU3LCAweDI1NWQsIDB4MjE5MCwgMHgyMzBhLCAweDI1MTAsCi0gICAgMHgyNTE0LCAweDI1 MzQsIDB4MjUyYywgMHgyNTFjLCAweDI1MDAsIDB4MjUzYywgMHgyMTkxLCAweDIxOTMsCi0gICAg MHgyNTVhLCAweDI1NTQsIDB4MjU2OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1MCwgMHgyNTZjLCAw eDIyNjEsCi0gICAgMHgyMzc4LCAweDIzNzcsIDB4MjIzNSwgMHgyMzM3LCAweDIzNDIsIDB4MjMz YiwgMHgyMmEyLCAweDIyYTMsCi0gICAgMHgyMmM0LCAweDI1MTgsIDB4MjUwYywgMHgyNTg4LCAw eDI1ODQsIDB4MDBhNiwgMHgwMGNjLCAweDI1ODAsCi0gICAgMHgyMzdhLCAweDAwZGYsIDB4MjI4 MiwgMHgyMjgzLCAweDIzNWQsIDB4MjM3MiwgMHgyMzc0LCAweDIzNzEsCi0gICAgMHgyMzNkLCAw eDIyOTYsIDB4MjVjYiwgMHgyMjI4LCAweDIzNzMsIDB4MjM0OSwgMHgwMGM1LCAweDIyMjksCi0g ICAgMHgyMzNmLCAweDIzNDAsIDB4MjI2NSwgMHgyMjY0LCAweDIyNjAsIDB4MDBkNywgMHgwMGY3 LCAweDIzNTksCi0gICAgMHgyMjE4LCAweDIzNzUsIDB4MjM2YiwgMHgyMzRiLCAweDIzNTIsIDB4 MDBhZiwgMHgwMGE4LCAweDAwYTAKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9hcGw1ID0g eyAgICAgICAgICAvKiBBUEwtMjc0MSAqLwotICAgIDEyOCwgMCwgWDJVX0NYRywgQUxfUk9NQU4s ICJBUEwtMjc0MSIsICJhcGwtMjc0MSIsIDAsIE5VTEwsCi0gICAgMHgyMGFjLCAweDIyYTMsIDB4 MjJhNCwgMHgyMmE1LCAweDIxOTAsIDB4MjE5MiwgMHgyMTkxLCAweDIxOTMsCi0gICAgMHgyMjY0 LCAweDIyNjUsIDB4MjM3MiwgMHgyMzcxLCAweDI1YWYsIDB4MjM1ZSwgMHgyMzM5LCAweDIzNTks Ci0gICAgMHgyMzZiLCAweDIyMDYsIDB4MjIwNywgMHgyMzRiLCAweDIzNTIsIDB4MjM1NSwgMHgy MzRlLCAweDIzMDgsCi0gICAgMHgyMzBhLCAweDIzNDAsIDB4MjMzZiwgMHgyMjgyLCAweDIyODMs IDB4MjIyOSwgMHgyMjJhLCAweDIyMjgsCi0gICAgMHgwMGEwLCAweDAwYTEsIDB4MDBhMiwgMHgw MGEzLCAweDIyYTIsIDB4MjM3OCwgMHgyMjYxLCAweDIzMzYsCi0gICAgMHgwMGE4LCAweDIzNWQs IDB4MjJjNCwgMHgyMzZjLCAweDIyNjAsIDB4MjI2MSwgMHgyMzZhLCAweDAwYWYsCi0gICAgMHgy MjE4LCAweDI1Y2IsIDB4MjMzZCwgMHgyMzQ5LCAweDIyOTYsIDB4MjM1ZiwgMHgwMGI2LCAweDAw YjcsCi0gICAgMHgyMzdhLCAweDIyMGEsIDB4MjM3NywgMHgyMjYyLCAweDIzNzMsIDB4MjM3NCwg MHgyMzc1LCAweDAwYmYsCi0gICAgMHgyNTE0LCAweDI1MzQsIDB4MjUyYywgMHgyNTFjLCAweDAw YzQsIDB4MDBjNSwgMHgwMGM2LCAweDAwYzcsCi0gICAgMHgwMGM4LCAweDAwYzksIDB4MjM0Miwg MHgyMzNiLCAweDI1MTAsIDB4MDBjZCwgMHgyNTAwLCAweDI1M2MsCi0gICAgMHgyMzZjLCAweDAw ZDEsIDB4MjM1MCwgMHgyMzU3LCAweDIzNDcsIDB4MjM0OCwgMHgwMGQ2LCAweDAwZDcsCi0gICAg MHgwMGQ4LCAweDI1MTgsIDB4MjUwYywgMHgyNTAyLCAweDAwZGMsIDB4MjUyNCwgMHgyMzM3LCAw eDAwZGYsCi0gICAgMHgwMGUwLCAweDAwZTEsIDB4MDBlMiwgMHgwMGUzLCAweDAwZTQsIDB4MDBl NSwgMHgwMGU2LCAweDAwZTcsCi0gICAgMHgwMGU4LCAweDAwZTksIDB4MDBlYSwgMHgwMGViLCAw eDAwZWMsIDB4MDBlZCwgMHgwMGVlLCAweDAwZWYsCi0gICAgMHgyMzY0LCAweDAwZjEsIDB4MDBm MiwgMHgwMGYzLCAweDAwZjQsIDB4MDBmNSwgMHgwMGY2LCAweDAwZjcsCi0gICAgMHgyMjA1LCAw eDAwZjksIDB4MDBmYSwgMHgwMGZiLCAweDAwZmMsIDB4MjIzNSwgMHgyMzY4LCAweDIzNjUKLX07 Ci0KLS8qIDgtYml0IEdPU1Qgc3RhbmRhcmQgc2V0cyAqLwotCi1zdHJ1Y3QgeF90b191bmljb2Rl IHVfa29pOCA9IHsKLSAgICA5NiwgMzIsIFgyVV9TVEQsIEFMX0NZUklMLCAiS09JLTgiLCAia29p OCIsIDAsIE5VTEwsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHgwNDRFLCAweDA0MzAsIDB4MDQzMSwgMHgwNDQ2LCAweDA0MzQsIDB4MDQzNSwg MHgwNDQ0LCAweDA0MzMsCi0gICAgMHgwNDQ1LCAweDA0MzgsIDB4MDQzOSwgMHgwNDNBLCAweDA0 M0IsIDB4MDQzQywgMHgwNDNELCAweDA0M0UsCi0gICAgMHgwNDNGLCAweDA0NEYsIDB4MDQ0MCwg MHgwNDQxLCAweDA0NDIsIDB4MDQ0MywgMHgwNDM2LCAweDA0MzIsCi0gICAgMHgwNDRDLCAweDA0 NEIsIDB4MDQzNywgMHgwNDQ4LCAweDA0NEQsIDB4MDQ0OSwgMHgwNDQ3LCAweDA0NEEsCi0gICAg MHgwNDJFLCAweDA0MTAsIDB4MDQxMSwgMHgwNDI2LCAweDA0MTQsIDB4MDQxNSwgMHgwNDI0LCAw eDA0MTMsCi0gICAgMHgwNDI1LCAweDA0MTgsIDB4MDQxOSwgMHgwNDFBLCAweDA0MUIsIDB4MDQx QywgMHgwNDFELCAweDA0MUUsCi0gICAgMHgwNDFGLCAweDA0MkYsIDB4MDQyMCwgMHgwNDIxLCAw eDA0MjIsIDB4MDQyMywgMHgwNDE2LCAweDA0MTIsCi0gICAgMHgwNDJDLCAweDA0MkIsIDB4MDQx NywgMHgwNDI4LCAweDA0MkQsIDB4MDQyOSwgMHgwNDI3LCAweGZmZmQKLX07Ci0KLS8qIE90aGVy IEtPSS04IGJhc2VkIHNldHMgKi8KLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2tvaThyID0geyAg ICAgICAgIC8qIChSdXNzaWEpIFRhYmxlIGZyb20gUkZDMTQ4OSAqLwotICAgIDEyOCwgMCwgWDJV X0NQLCBBTF9DWVJJTCwgIktPSTgtUiIsICJrb2k4ciIsIDAsIE5VTEwsCi0gICAgMHgyNTAwLCAw eDI1MDIsIDB4MjUwQywgMHgyNTEwLCAweDI1MTQsIDB4MjUxOCwgMHgyNTFDLCAweDI1MjQsCi0g ICAgMHgyNTJDLCAweDI1MzQsIDB4MjUzQywgMHgyNTgwLCAweDI1ODQsIDB4MjU4OCwgMHgyNThD LCAweDI1OTAsCi0gICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyMzIwLCAweDI1QTAsIDB4 MjIxOSwgMHgyMjFBLCAweDIyNDgsCi0gICAgMHgyMjY0LCAweDIyNjUsIDB4MDBBMCwgMHgyMzIx LCAweDAwQjAsIDB4MDBCMiwgMHgwMEI3LCAweDAwRjcsCi0gICAgMHgyNTUwLCAweDI1NTEsIDB4 MjU1MiwgMHgwNDUxLCAweDI1NTMsIDB4MjU1NCwgMHgyNTU1LCAweDI1NTYsCi0gICAgMHgyNTU3 LCAweDI1NTgsIDB4MjU1OSwgMHgyNTVBLCAweDI1NUIsIDB4MjU1QywgMHgyNTVELCAweDI1NUUs Ci0gICAgMHgyNTVGLCAweDI1NjAsIDB4MjU2MSwgMHgwNDAxLCAweDI1NjIsIDB4MjU2MywgMHgy NTY0LCAweDI1NjUsCi0gICAgMHgyNTY2LCAweDI1NjcsIDB4MjU2OCwgMHgyNTY5LCAweDI1NkEs IDB4MjU2QiwgMHgyNTZDLCAweDAwQTksCi0gICAgMHgwNDRFLCAweDA0MzAsIDB4MDQzMSwgMHgw NDQ2LCAweDA0MzQsIDB4MDQzNSwgMHgwNDQ0LCAweDA0MzMsCi0gICAgMHgwNDQ1LCAweDA0Mzgs IDB4MDQzOSwgMHgwNDNBLCAweDA0M0IsIDB4MDQzQywgMHgwNDNELCAweDA0M0UsCi0gICAgMHgw NDNGLCAweDA0NEYsIDB4MDQ0MCwgMHgwNDQxLCAweDA0NDIsIDB4MDQ0MywgMHgwNDM2LCAweDA0 MzIsCi0gICAgMHgwNDRDLCAweDA0NEIsIDB4MDQzNywgMHgwNDQ4LCAweDA0NEQsIDB4MDQ0OSwg MHgwNDQ3LCAweDA0NEEsCi0gICAgMHgwNDJFLCAweDA0MTAsIDB4MDQxMSwgMHgwNDI2LCAweDA0 MTQsIDB4MDQxNSwgMHgwNDI0LCAweDA0MTMsCi0gICAgMHgwNDI1LCAweDA0MTgsIDB4MDQxOSwg MHgwNDFBLCAweDA0MUIsIDB4MDQxQywgMHgwNDFELCAweDA0MUUsCi0gICAgMHgwNDFGLCAweDA0 MkYsIDB4MDQyMCwgMHgwNDIxLCAweDA0MjIsIDB4MDQyMywgMHgwNDE2LCAweDA0MTIsCi0gICAg MHgwNDJDLCAweDA0MkIsIDB4MDQxNywgMHgwNDI4LCAweDA0MkQsIDB4MDQyOSwgMHgwNDI3LCAw eDA0MkEKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9rb2k4dSA9IHsgICAgICAgICAvKiAo VWtyYWluZSkgRnJvbSBSRkMyMzE5ICovCi0gICAxMjgsIDAsIFgyVV9DUCwgQUxfQ1lSSUwsICJL T0k4LVUiLCAia29pOHUiLCAwLCBOVUxMLAotICAgIDB4MjUwMCwgMHgyNTAyLCAweDI1MEMsIDB4 MjUxMCwgMHgyNTE0LCAweDI1MTgsIDB4MjUxQywgMHgyNTI0LAotICAgIDB4MjUyQywgMHgyNTM0 LCAweDI1M0MsIDB4MjU4MCwgMHgyNTg0LCAweDI1ODgsIDB4MjU4QywgMHgyNTkwLAotICAgIDB4 MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4MjMyMCwgMHgyNUEwLCAweDIyMTksIDB4MjIxQSwgMHgy MjQ4LAotICAgIDB4MjI2NCwgMHgyMjY1LCAweDAwQTAsIDB4MjMyMSwgMHgwMEIwLCAweDAwQjIs IDB4MDBCNywgMHgwMEY3LAotICAgIDB4MjU1MCwgMHgyNTUxLCAweDI1NTIsIDB4MDQ1MSwgMHgw NDU0LCAweDI1NTQsIDB4MDQ1NiwgMHgwNDU3LAotICAgIDB4MjU1NywgMHgyNTU4LCAweDI1NTks IDB4MjU1QSwgMHgyNTVCLCAweDA0OTEsIDB4MjU1RCwgMHgyNTVFLAotICAgIDB4MjU1RiwgMHgy NTYwLCAweDI1NjEsIDB4MDQwMSwgMHgwNDA0LCAweDI1NjMsIDB4MDQwNiwgMHgwNDA3LAotICAg IDB4MjU2NiwgMHgyNTY3LCAweDI1NjgsIDB4MjU2OSwgMHgyNTZBLCAweDA0OTAsIDB4MjU2Qywg MHgwMEE5LAotICAgIDB4MDQ0RSwgMHgwNDMwLCAweDA0MzEsIDB4MDQ0NiwgMHgwNDM0LCAweDA0 MzUsIDB4MDQ0NCwgMHgwNDMzLAotICAgIDB4MDQ0NSwgMHgwNDM4LCAweDA0MzksIDB4MDQzQSwg MHgwNDNCLCAweDA0M0MsIDB4MDQzRCwgMHgwNDNFLAotICAgIDB4MDQzRiwgMHgwNDRGLCAweDA0 NDAsIDB4MDQ0MSwgMHgwNDQyLCAweDA0NDMsIDB4MDQzNiwgMHgwNDMyLAotICAgIDB4MDQ0Qywg MHgwNDRCLCAweDA0MzcsIDB4MDQ0OCwgMHgwNDRELCAweDA0NDksIDB4MDQ0NywgMHgwNDRBLAot ICAgIDB4MDQyRSwgMHgwNDEwLCAweDA0MTEsIDB4MDQyNiwgMHgwNDE0LCAweDA0MTUsIDB4MDQy NCwgMHgwNDEzLAotICAgIDB4MDQyNSwgMHgwNDE4LCAweDA0MTksIDB4MDQxQSwgMHgwNDFCLCAw eDA0MUMsIDB4MDQxRCwgMHgwNDFFLAotICAgIDB4MDQxRiwgMHgwNDJGLCAweDA0MjAsIDB4MDQy MSwgMHgwNDIyLCAweDA0MjMsIDB4MDQxNiwgMHgwNDEyLAotICAgIDB4MDQyQywgMHgwNDJCLCAw eDA0MTcsIDB4MDQyOCwgMHgwNDJELCAweDA0MjksIDB4MDQyNywgMHgwNDJBCi19OwotCi0vKiBQ QyBDb2RlIFBhZ2VzICovCi0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDQzNyA9IHsKLSAgICAx MjgsIDAsIFgyVV9DUCwgQUxfUk9NQU4sIlBDIENvZGUgUGFnZSA0MzciLCJjcDQzNyIsIDAsIE5V TEwsCi0gICAgMHgwMGM3LCAweDAwZmMsIDB4MDBlOSwgMHgwMGUyLCAweDAwZTQsIDB4MDBlMCwg MHgwMGU1LCAweDAwZTcsCi0gICAgMHgwMGVhLCAweDAwZWIsIDB4MDBlOCwgMHgwMGVmLCAweDAw ZWUsIDB4MDBlYywgMHgwMGM0LCAweDAwYzUsCi0gICAgMHgwMGM5LCAweDAwZTYsIDB4MDBjNiwg MHgwMGY0LCAweDAwZjYsIDB4MDBmMiwgMHgwMGZiLCAweDAwZjksCi0gICAgMHgwMGZmLCAweDAw ZDYsIDB4MDBkYywgMHgwMGEyLCAweDAwYTMsIDB4MDBhNSwgMHgyMGE3LCAweDAxOTIsCi0gICAg MHgwMGUxLCAweDAwZWQsIDB4MDBmMywgMHgwMGZhLCAweDAwZjEsIDB4MDBkMSwgMHgwMGFhLCAw eDAwYmEsCi0gICAgMHgwMGJmLCAweDIzMTAsIDB4MDBhYywgMHgwMGJkLCAweDAwYmMsIDB4MDBh MSwgMHgwMGFiLCAweDAwYmIsCi0gICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyNTAyLCAw eDI1MjQsIDB4MjU2MSwgMHgyNTYyLCAweDI1NTYsCi0gICAgMHgyNTU1LCAweDI1NjMsIDB4MjU1 MSwgMHgyNTU3LCAweDI1NWQsIDB4MjU1YywgMHgyNTViLCAweDI1MTAsCi0gICAgMHgyNTE0LCAw eDI1MzQsIDB4MjUyYywgMHgyNTFjLCAweDI1MDAsIDB4MjUzYywgMHgyNTVlLCAweDI1NWYsCi0g ICAgMHgyNTVhLCAweDI1NTQsIDB4MjU2OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1MCwgMHgyNTZj LCAweDI1NjcsCi0gICAgMHgyNTY4LCAweDI1NjQsIDB4MjU2NSwgMHgyNTU5LCAweDI1NTgsIDB4 MjU1MiwgMHgyNTUzLCAweDI1NmIsCi0gICAgMHgyNTZhLCAweDI1MTgsIDB4MjUwYywgMHgyNTg4 LCAweDI1ODQsIDB4MjU4YywgMHgyNTkwLCAweDI1ODAsCi0gICAgMHgwM2IxLCAweDAwZGYsIDB4 MDM5MywgMHgwM2MwLCAweDAzYTMsIDB4MDNjMywgMHgwMGI1LCAweDAzYzQsCi0gICAgMHgwM2E2 LCAweDAzOTgsIDB4MDNhOSwgMHgwM2I0LCAweDIyMWUsIDB4MDNjNiwgMHgwM2I1LCAweDIyMjks Ci0gICAgMHgyMjYxLCAweDAwYjEsIDB4MjI2NSwgMHgyMjY0LCAweDIzMjAsIDB4MjMyMSwgMHgw MGY3LCAweDIyNDgsCi0gICAgMHgwMGIwLCAweDIyMTksIDB4MDBiNywgMHgyMjFhLCAweDIwN2Ys IDB4MDBiMiwgLyogMHgyNWFlICovIDB4MjVhMCwgMHgwMGEwCi19OwotCi1zdHJ1Y3QgeF90b191 bmljb2RlIHVfbWF6b3ZpYSA9IHsKLSAgICAxMjgsIDAsIFgyVV9DUCwgQUxfUk9NQU4sIlBvbGlz aCBNYXpvdmlhIFBDIENvZGUgUGFnZSIsIm1hem92aWEiLCAwLCBOVUxMLAotICAgIDB4MDBjNywg MHgwMGZjLCAweDAwZTksIDB4MDBlMiwgMHgwMGU0LCAweDAwZTAsIDB4MDEwNSwgMHgwMGU3LCAv KiA4MCAqLwotICAgIDB4MDBlYSwgMHgwMGViLCAweDAwZTgsIDB4MDBlZiwgMHgwMGVlLCAweDAx MDcsIDB4MDBjNCwgMHgwMTA0LCAvKiA4OCAqLwotICAgIDB4MDExOCwgMHgwMTE5LCAweDAxNDIs IDB4MDBmNCwgMHgwMGY2LCAweDAxMDYsIDB4MDBmYiwgMHgwMGY5LCAvKiA5MCAqLwotICAgIDB4 MDE1YSwgMHgwMGQ2LCAweDAwZGMsIDB4MDBhMiwgMHgwMTQxLCAweDAwYTUsIDB4MDE1YiwgMHgw MTkyLCAvKiA5OCAqLwotICAgIDB4MDE3OSwgMHgwMTdiLCAweDAwZjMsIDB4MDBkMywgMHgwMTQ0 LCAweDAxNDMsIDB4MDE3YSwgMHgwMTdjLCAvKiBhMCAqLwotICAgIDB4MDBiZiwgMHgyMzEwLCAw eDAwYWMsIDB4MDBiZCwgMHgwMGJjLCAweDAwYTEsIDB4MDBhYiwgMHgwMGJiLCAvKiBhOCAqLwot ICAgIDB4MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4MjUwMiwgMHgyNTI0LCAweDI1NjEsIDB4MjU2 MiwgMHgyNTU2LCAvKiBiMCAqLwotICAgIDB4MjU1NSwgMHgyNTYzLCAweDI1NTEsIDB4MjU1Nywg MHgyNTVkLCAweDI1NWMsIDB4MjU1YiwgMHgyNTEwLCAvKiBiOCAqLwotICAgIDB4MjUxNCwgMHgy NTM0LCAweDI1MmMsIDB4MjUxYywgMHgyNTAwLCAweDI1M2MsIDB4MjU1ZSwgMHgyNTVmLCAvKiBj MCAqLwotICAgIDB4MjU1YSwgMHgyNTU0LCAweDI1NjksIDB4MjU2NiwgMHgyNTYwLCAweDI1NTAs IDB4MjU2YywgMHgyNTY3LCAvKiBjOCAqLwotICAgIDB4MjU2OCwgMHgyNTY0LCAweDI1NjUsIDB4 MjU1OSwgMHgyNTU4LCAweDI1NTIsIDB4MjU1MywgMHgyNTZiLCAvKiBkMCAqLwotICAgIDB4MjU2 YSwgMHgyNTE4LCAweDI1MGMsIDB4MjU4OCwgMHgyNTg0LCAweDI1OGMsIDB4MjU5MCwgMHgyNTgw LCAvKiBkOCAqLwotICAgIDB4MDNiMSwgMHgwMGRmLCAweDAzOTMsIDB4MDNjMCwgMHgwM2EzLCAw eDAzYzMsIDB4MDBiNSwgMHgwM2M0LCAvKiBlMCAqLwotICAgIDB4MDNhNiwgMHgwMzk4LCAweDAz YTksIDB4MDNiNCwgMHgyMjFlLCAweDAzYzYsIDB4MDNiNSwgMHgyMjI5LCAvKiBlOCAqLwotICAg IDB4MjI2MSwgMHgwMGIxLCAweDIyNjUsIDB4MjI2NCwgMHgyMzIwLCAweDIzMjEsIDB4MDBmNywg MHgyMjQ4LCAvKiBmMCAqLwotICAgIDB4MDBiMCwgMHgyMjE5LCAweDAwYjcsIDB4MjIxYSwgMHgy MDdmLCAweDAwYjIsIDB4MjVhMCwgMHgwMGEwICAvKiBmOCAqLwotfTsKLQotc3RydWN0IHhfdG9f dW5pY29kZSB1X2NwODUwID0gewotICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9ST01BTiwiUEMgQ29k ZSBQYWdlIDg1MCIsImNwODUwIiwgMCwgTlVMTCwKLSAgICAweDAwYzcsIDB4MDBmYywgMHgwMGU5 LCAweDAwZTIsIDB4MDBlNCwgMHgwMGUwLCAweDAwZTUsIDB4MDBlNywKLSAgICAweDAwZWEsIDB4 MDBlYiwgMHgwMGU4LCAweDAwZWYsIDB4MDBlZSwgMHgwMGVjLCAweDAwYzQsIDB4MDBjNSwKLSAg ICAweDAwYzksIDB4MDBlNiwgMHgwMGM2LCAweDAwZjQsIDB4MDBmNiwgMHgwMGYyLCAweDAwZmIs IDB4MDBmOSwKLSAgICAweDAwZmYsIDB4MDBkNiwgMHgwMGRjLCAweDAwZjgsIDB4MDBhMywgMHgw MGQ4LCAweDAwZDcsIDB4MDE5MiwKLSAgICAweDAwZTEsIDB4MDBlZCwgMHgwMGYzLCAweDAwZmEs IDB4MDBmMSwgMHgwMGQxLCAweDAwYWEsIDB4MDBiYSwKLSAgICAweDAwYmYsIDB4MDBhZSwgMHgw MGFjLCAweDAwYmQsIDB4MDBiYywgMHgwMGExLCAweDAwYWIsIDB4MDBiYiwKLSAgICAweDI1OTEs IDB4MjU5MiwgMHgyNTkzLCAweDI1MDIsIDB4MjUyNCwgMHgwMGMxLCAweDAwYzIsIDB4MDBjMCwK LSAgICAweDAwYTksIDB4MjU2MywgMHgyNTUxLCAweDI1NTcsIDB4MjU1ZCwgMHgwMGEyLCAweDAw YTUsIDB4MjUxMCwKLSAgICAweDI1MTQsIDB4MjUzNCwgMHgyNTJjLCAweDI1MWMsIDB4MjUwMCwg MHgyNTNjLCAweDAwZTMsIDB4MDBjMywKLSAgICAweDI1NWEsIDB4MjU1NCwgMHgyNTY5LCAweDI1 NjYsIDB4MjU2MCwgMHgyNTUwLCAweDI1NmMsIDB4MDBhNCwKLSAgICAweDAwZjAsIDB4MDBkMCwg MHgwMGNhLCAweDAwY2IsIDB4MDBjOCwgMHgwMTMxLCAweDAwY2QsIDB4MDBjZSwKLSAgICAweDAw Y2YsIDB4MjUxOCwgMHgyNTBjLCAweDI1ODgsIDB4MjU4NCwgMHgwMGE2LCAweDAwY2MsIDB4MjU4 MCwKLSAgICAweDAwZDMsIDB4MDBkZiwgMHgwMGQ0LCAweDAwZDIsIDB4MDBmNSwgMHgwMGQ1LCAw eDAwYjUsIDB4MDBmZSwKLSAgICAweDAwZGUsIDB4MDBkYSwgMHgwMGRiLCAweDAwZDksIDB4MDBm ZCwgMHgwMGRkLCAweDAwYWYsIDB4MDBiNCwKLSAgICAweDAwYWQsIDB4MDBiMSwgMHgyMDE3LCAw eDAwYmUsIDB4MDBiNiwgMHgwMGE3LCAweDAwZjcsIDB4MDBiOCwKLSAgICAweDAwYjAsIDB4MDBh OCwgMHgwMGI3LCAweDAwYjksIDB4MDBiMywgMHgwMGIyLCAweDI1YTAsIDB4MDBhMAotfTsKLQot c3RydWN0IHhfdG9fdW5pY29kZSB1X2NwODUyID0gewotICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9S T01BTiwiUEMgQ29kZSBQYWdlIDg1MiIsImNwODUyIiwgMCwgTlVMTCwKLSAgICAweDAwYzcsIDB4 MDBmYywgMHgwMGU5LCAweDAwZTIsIDB4MDBlNCwgMHgwMTZmLCAweDAxMDcsIDB4MDBlNywKLSAg ICAweDAxNDIsIDB4MDBlYiwgMHgwMTUwLCAweDAxNTEsIDB4MDBlZSwgMHgwMTc5LCAweDAwYzQs IDB4MDEwNiwKLSAgICAweDAwYzksIDB4MDEzOSwgMHgwMTNhLCAweDAwZjQsIDB4MDBmNiwgMHgw MTNkLCAweDAxM2UsIDB4MDE1YSwKLSAgICAweDAxNWIsIDB4MDBkNiwgMHgwMGRjLCAweDAxNjQs IDB4MDE2NSwgMHgwMTQxLCAweDAwZDcsIDB4MDEwZCwKLSAgICAweDAwZTEsIDB4MDBlZCwgMHgw MGYzLCAweDAwZmEsIDB4MDEwNCwgMHgwMTA1LCAweDAxN2QsIDB4MDE3ZSwKLSAgICAweDAxMTgs IDB4MDExOSwgMHgwMGFjLCAweDAxN2EsIDB4MDEwYywgMHgwMTVmLCAweDAwYWIsIDB4MDBiYiwK LSAgICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDI1MDIsIDB4MjUyNCwgMHgwMGMxLCAweDAw YzIsIDB4MDExYSwKLSAgICAweDAxNWUsIDB4MjU2MywgMHgyNTUxLCAweDI1NTcsIDB4MjU1ZCwg MHgwMTdiLCAweDAxN2MsIDB4MjUxMCwKLSAgICAweDI1MTQsIDB4MjUzNCwgMHgyNTJjLCAweDI1 MWMsIDB4MjUwMCwgMHgyNTNjLCAweDAxMDIsIDB4MDEwMywKLSAgICAweDI1NWEsIDB4MjU1NCwg MHgyNTY5LCAweDI1NjYsIDB4MjU2MCwgMHgyNTUwLCAweDI1NmMsIDB4MDBhNCwKLSAgICAweDAx MTEsIDB4MDExMCwgMHgwMTBlLCAweDAwY2IsIDB4MDEwZiwgMHgwMTQ3LCAweDAwY2QsIDB4MDBj ZSwKLSAgICAweDAxMWIsIDB4MjUxOCwgMHgyNTBjLCAweDI1ODgsIDB4MjU4NCwgMHgwMTYyLCAw eDAxNmUsIDB4MjU4MCwKLSAgICAweDAwZDMsIDB4MDBkZiwgMHgwMGQ0LCAweDAxNDMsIDB4MDE0 NCwgMHgwMTQ4LCAweDAxNjAsIDB4MDE2MSwKLSAgICAweDAxNTQsIDB4MDBkYSwgMHgwMTU1LCAw eDAxNzAsIDB4MDBmZCwgMHgwMGRkLCAweDAxNjMsIDB4MDBiNCwKLSAgICAweDAwYWQsIDB4MDJk ZCwgMHgwMmRiLCAweDAyYzcsIDB4MDJkOCwgMHgwMGE3LCAweDAwZjcsIDB4MDBiOCwKLSAgICAw eDAwYjAsIDB4MDBhOCwgMHgwMmQ5LCAweDAxNzEsIDB4MDE1OCwgMHgwMTU5LCAweDI1YTAsIDB4 MDBhMAotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwODU1ID0geyAgICAgICAgIC8qIENQ ODU1IEN5cmlsbGljIHRvIFVuaWNvZGUgKi8KLSAgICAxMjgsIDAsIFgyVV9DUCwgQUxfQ1lSSUws IlBDIENvZGUgUGFnZSA4NTUiLCJjcDg1NSIsIDAsIE5VTEwsCi0gICAgMHgwNDUyLCAweDA0MDIs IDB4MDQ1MywgMHgwNDAzLCAweDA0NTEsIDB4MDQwMSwgMHgwNDU0LCAweDA0MDQsCi0gICAgMHgw NDU1LCAweDA0MDUsIDB4MDQ1NiwgMHgwNDA2LCAweDA0NTcsIDB4MDQwNywgMHgwNDU4LCAweDA0 MDgsCi0gICAgMHgwNDU5LCAweDA0MDksIDB4MDQ1YSwgMHgwNDBhLCAweDA0NWIsIDB4MDQwYiwg MHgwNDVjLCAweDA0MGMsCi0gICAgMHgwNDVlLCAweDA0MGUsIDB4MDQ1ZiwgMHgwNDBmLCAweDA0 NGUsIDB4MDQyZSwgMHgwNDRhLCAweDA0MmEsCi0gICAgMHgwNDMwLCAweDA0MTAsIDB4MDQzMSwg MHgwNDExLCAweDA0NDYsIDB4MDQyNiwgMHgwNDM0LCAweDA0MTQsCi0gICAgMHgwNDM1LCAweDA0 MTUsIDB4MDQ0NCwgMHgwNDI0LCAweDA0MzMsIDB4MDQxMywgMHgwMGFiLCAweDAwYmIsCi0gICAg MHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyNTAyLCAweDI1MjQsIDB4MDQ0NSwgMHgwNDI1LCAw eDA0MzgsCi0gICAgMHgwNDE4LCAweDI1NjMsIDB4MjU1MSwgMHgyNTU3LCAweDI1NWQsIDB4MDQz OSwgMHgwNDE5LCAweDI1MTAsCi0gICAgMHgyNTE0LCAweDI1MzQsIDB4MjUyYywgMHgyNTFjLCAw eDI1MDAsIDB4MjUzYywgMHgwNDNhLCAweDA0MWEsCi0gICAgMHgyNTVhLCAweDI1NTQsIDB4MjU2 OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1MCwgMHgyNTZjLCAweDAwYTQsCi0gICAgMHgwNDNiLCAw eDA0MWIsIDB4MDQzYywgMHgwNDFjLCAweDA0M2QsIDB4MDQxZCwgMHgwNDNlLCAweDA0MWUsCi0g ICAgMHgwNDNmLCAweDI1MTgsIDB4MjUwYywgMHgyNTg4LCAweDI1ODQsIDB4MDQxZiwgMHgwNDRm LCAweDI1ODAsCi0gICAgMHgwNDJmLCAweDA0NDAsIDB4MDQyMCwgMHgwNDQxLCAweDA0MjEsIDB4 MDQ0MiwgMHgwNDIyLCAweDA0NDMsCi0gICAgMHgwNDIzLCAweDA0MzYsIDB4MDQxNiwgMHgwNDMy LCAweDA0MTIsIDB4MDQ0YywgMHgwNDJjLCAweDIxMTYsCi0gICAgMHgwMDJkLCAweDA0NGIsIDB4 MDQyYiwgMHgwNDM3LCAweDA0MTcsIDB4MDQ0OCwgMHgwNDI4LCAweDA0NGQsCi0gICAgMHgwNDJk LCAweDA0NDksIDB4MDQyOSwgMHgwNDQ3LCAweDA0MjcsIDB4MDBhNywgMHgyNWEwLCAweDAwMjAK LX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDg1NiA9IHsgICAgICAgICAvKiBDUDg1NiAo QnVsZ2FyaWEpIHRvIFVuaWNvZGUgKi8KLSAgICAxMjgsIDAsIFgyVV9DUCwgQUxfQ1lSSUwsIlBD IENvZGUgUGFnZSA4NTYiLCJjcDg1NiIsIDAsIE5VTEwsCi0gICAgMHgwNDEwLCAweDA0MTEsIDB4 MDQxMiwgMHgwNDEzLCAweDA0MTQsIDB4MDQxNSwgMHgwNDE2LCAweDA0MTcsCi0gICAgMHgwNDE4 LCAweDA0MTksIDB4MDQxYSwgMHgwNDFiLCAweDA0MWMsIDB4MDQxZCwgMHgwNDFlLCAweDA0MWYs Ci0gICAgMHgwNDIwLCAweDA0MjEsIDB4MDQyMiwgMHgwNDIzLCAweDA0MjQsIDB4MDQyNSwgMHgw NDI2LCAweDA0MjcsCi0gICAgMHgwNDI4LCAweDA0MjksIDB4MDQyYSwgMHgwNDJiLCAweDA0MmMs IDB4MDQyZCwgMHgwNDJlLCAweDA0MmYsCi0gICAgMHgwNDMwLCAweDA0MzEsIDB4MDQzMiwgMHgw NDMzLCAweDA0MzQsIDB4MDQzNSwgMHgwNDM2LCAweDA0MzcsCi0gICAgMHgwNDM4LCAweDA0Mzks IDB4MDQzYSwgMHgwNDNiLCAweDA0M2MsIDB4MDQzZCwgMHgwNDNlLCAweDA0M2YsCi0gICAgMHgw NDQwLCAweDA0NDEsIDB4MDQ0MiwgMHgwNDQzLCAweDA0NDQsIDB4MDQ0NSwgMHgwNDQ2LCAweDA0 NDcsCi0gICAgMHgwNDQ4LCAweDA0NDksIDB4MDQ0YSwgMHgwNDRiLCAweDA0NGMsIDB4MDQ0ZCwg MHgwNDRlLCAweDA0NGYsCi0gICAgMHgyNTE0LCAweDI1MzQsIDB4MjUyYywgMHgyNTFjLCAweDI1 MDAsIDB4MjUzYywgMHgyNTYzLCAweDI1NTEsCi0gICAgMHgyNTVhLCAweDI1NTQsIDB4MjU2OSwg MHgyNTY2LCAweDI1NjAsIDB4MjU1MCwgMHgyNTZjLCAweDI1MTAsCi0gICAgMHgyNTkxLCAweDI1 OTIsIDB4MjU5MywgMHgyNTAyLCAweDI1MjQsIDB4MjExNiwgMHgwMGE3LCAweDI1NTcsCi0gICAg MHgyNTVkLCAweDI1MTgsIDB4MjUwYywgMHgyNTg4LCAweDI1ODQsIDB4MjU4YywgMHgyNTkwLCAw eDI1ODAsCi0gICAgMHgwM2IxLCAweDAwZGYsIDB4MDM5MywgMHgwM2MwLCAweDAzYTMsIDB4MDNj MywgMHgwMGI1LCAweDAzYzQsCi0gICAgMHgwM2E2LCAweDAzOTgsIDB4MDNhOSwgMHgwM2I0LCAw eDIyMWUsIDB4MDNjNiwgMHgwM2I1LCAweDIyMjksCi0gICAgMHgyMjYxLCAweDAwYjEsIDB4MjI2 NSwgMHgyMjY0LCAweDIzMjAsIDB4MjMyMSwgMHgwMGY3LCAweDIyNDgsCi0gICAgMHgwMGIwLCAw eDIyMTksIDB4MDBiNywgMHgyMjFhLCAweDIwN2YsIDB4MDBiMiwgMHgyNWEwLCAweDAwYTAKLX07 Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDg1NyA9IHsKLSAgICAxMjgsIDAsIFgyVV9DUCwg QUxfUk9NQU4sIlBDIENvZGUgUGFnZSA4NTciLCJjcDg1NyIsIDAsIE5VTEwsCi0gICAgMHgwMGM3 LCAweDAwZmMsIDB4MDBlOSwgMHgwMGUyLCAweDAwZTQsIDB4MDBlMCwgMHgwMGU1LCAweDAwZTcs IC8qIDB4ODAgKi8KLSAgICAweDAwZWEsIDB4MDBlYiwgMHgwMGU4LCAweDAwZWYsIDB4MDBlZSwg MHgwMTMxLCAweDAwYzQsIDB4MDBjNSwgLyogMHg4OCAqLwotICAgIDB4MDBjOSwgMHgwMGU2LCAw eDAwYzYsIDB4MDBmNCwgMHgwMGY2LCAweDAwZjIsIDB4MDBmYiwgMHgwMGY5LCAvKiAweDkwICov Ci0gICAgMHgwMTMwLCAweDAwZDYsIDB4MDBkYywgMHgwMGY4LCAweDAwYTMsIDB4MDBkOCwgMHgw MTVlLCAweDAxNWYsIC8qIDB4OTggKi8KLSAgICAweDAwZTEsIDB4MDBlZCwgMHgwMGYzLCAweDAw ZmEsIDB4MDBmMSwgMHgwMGQxLCAweDAxMWUsIDB4MDExZiwgLyogMHhhMCAqLwotICAgIDB4MDBi ZiwgMHgwMGFlLCAweDAwYWMsIDB4MDBiZCwgMHgwMGJjLCAweDAwYTEsIDB4MDBhYiwgMHgwMGJi LCAvKiAweGE4ICovCi0gICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyNTAyLCAweDI1MjQs IDB4MDBjMSwgMHgwMGMyLCAweDAwYzAsIC8qIDB4YjAgKi8KLSAgICAweDAwYTksIDB4MjU2Mywg MHgyNTUxLCAweDI1NTcsIDB4MjU1ZCwgMHgwMGEyLCAweDAwYTUsIDB4MjUxMCwgLyogMHhiOCAq LwotICAgIDB4MjUxNCwgMHgyNTM0LCAweDI1MmMsIDB4MjUxYywgMHgyNTAwLCAweDI1M2MsIDB4 MDBlMywgMHgwMGMzLCAvKiAweGMwICovCi0gICAgMHgyNTVhLCAweDI1NTQsIDB4MjU2OSwgMHgy NTY2LCAweDI1NjAsIDB4MjU1MCwgMHgyNTZjLCAweDAwYTQsIC8qIDB4YzggKi8KLSAgICAweDAw YmEsIDB4MDBhYSwgMHgwMGNhLCAweDAwY2IsIDB4MDBjOCwgMHgyMGFjLCAweDAwY2QsIDB4MDBj ZSwgLyogMHhkMCAqLwotICAgIDB4MDBjZiwgMHgyNTE4LCAweDI1MGMsIDB4MjU4OCwgMHgyNTg0 LCAweDAwYTYsIDB4MDBjYywgMHgyNTgwLCAvKiAweGQ4ICovCi0gICAgMHgwMGQzLCAweDAwZGYs IDB4MDBkNCwgMHgwMGQyLCAweDAwZjUsIDB4MDBkNSwgMHgwMGI1LCAweGZmZmQsIC8qIDB4ZTAg Ki8KLSAgICAweDAwZDcsIDB4MDBkYSwgMHgwMGRiLCAweDAwZDksIDB4MDBlYywgMHgwMGZmLCAw eDAwYWYsIDB4MDBiNCwgLyogMHhlOCAqLwotICAgIDB4MDBhZCwgMHgwMGIxLCAweGZmZmQsIDB4 MDBiZSwgMHgwMGI2LCAweDAwYTcsIDB4MDBmNywgMHgwMGI4LCAvKiAweGYwICovCi0gICAgMHgw MGIwLCAweDAwYTgsIDB4MDBiNywgMHgwMGI5LCAweDAwYjMsIDB4MDBiMiwgMHgyNWEwLCAweDAw YTAgIC8qIDB4ZjggKi8KLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDg1OCA9IHsKLSAg ICAxMjgsIDAsIFgyVV9DUCwgQUxfUk9NQU4sIlBDIENvZGUgUGFnZSA4NTgiLCJjcDg1OCIsIDAs IE5VTEwsCi0gICAgMHgwMGM3LCAweDAwZmMsIDB4MDBlOSwgMHgwMGUyLCAweDAwZTQsIDB4MDBl MCwgMHgwMGU1LCAweDAwZTcsCi0gICAgMHgwMGVhLCAweDAwZWIsIDB4MDBlOCwgMHgwMGVmLCAw eDAwZWUsIDB4MDBlYywgMHgwMGM0LCAweDAwYzUsCi0gICAgMHgwMGM5LCAweDAwZTYsIDB4MDBj NiwgMHgwMGY0LCAweDAwZjYsIDB4MDBmMiwgMHgwMGZiLCAweDAwZjksCi0gICAgMHgwMGZmLCAw eDAwZDYsIDB4MDBkYywgMHgwMGY4LCAweDAwYTMsIDB4MDBkOCwgMHgwMGQ3LCAweDAxOTIsCi0g ICAgMHgwMGUxLCAweDAwZWQsIDB4MDBmMywgMHgwMGZhLCAweDAwZjEsIDB4MDBkMSwgMHgwMGFh LCAweDAwYmEsCi0gICAgMHgwMGJmLCAweDAwYWUsIDB4MDBhYywgMHgwMGJkLCAweDAwYmMsIDB4 MDBhMSwgMHgwMGFiLCAweDAwYmIsCi0gICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyNTAy LCAweDI1MjQsIDB4MDBjMSwgMHgwMGMyLCAweDAwYzAsCi0gICAgMHgwMGE5LCAweDI1NjMsIDB4 MjU1MSwgMHgyNTU3LCAweDI1NWQsIDB4MDBhMiwgMHgwMGE1LCAweDI1MTAsCi0gICAgMHgyNTE0 LCAweDI1MzQsIDB4MjUyYywgMHgyNTFjLCAweDI1MDAsIDB4MjUzYywgMHgwMGUzLCAweDAwYzMs Ci0gICAgMHgyNTVhLCAweDI1NTQsIDB4MjU2OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1MCwgMHgy NTZjLCAweDAwYTQsCi0gICAgMHgwMGYwLCAweDAwZDAsIDB4MDBjYSwgMHgwMGNiLCAweDAwYzgs IDB4MjBhYywgMHgwMGNkLCAweDAwY2UsCi0gICAgMHgwMGNmLCAweDI1MTgsIDB4MjUwYywgMHgy NTg4LCAweDI1ODQsIDB4MDBhNiwgMHgwMGNjLCAweDI1ODAsCi0gICAgMHgwMGQzLCAweDAwZGYs IDB4MDBkNCwgMHgwMGQyLCAweDAwZjUsIDB4MDBkNSwgMHgwMGI1LCAweDAwZmUsCi0gICAgMHgw MGRlLCAweDAwZGEsIDB4MDBkYiwgMHgwMGQ5LCAweDAwZmQsIDB4MDBkZCwgMHgwMGFmLCAweDAw YjQsCi0gICAgMHgwMGFkLCAweDAwYjEsIDB4MjAxNywgMHgwMGJlLCAweDAwYjYsIDB4MDBhNywg MHgwMGY3LCAweDAwYjgsCi0gICAgMHgwMGIwLCAweDAwYTgsIDB4MDBiNywgMHgwMGI5LCAweDAw YjMsIDB4MDBiMiwgMHgyNWEwLCAweDAwYTAKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9j cDg2MiA9IHsKLSAgICAxMjgsIDAsIFgyVV9DUCwgQUxfSEVCUkVXLCJQQyBDb2RlIFBhZ2UgODYy IiwiY3A4NjIiLCAwLCBOVUxMLAotICAgIDB4MDVkMCwgMHgwNWQxLCAweDA1ZDIsIDB4MDVkMywg MHgwNWQ0LCAweDA1ZDUsIDB4MDVkNiwgMHgwNWQ3LAotICAgIDB4MDVkOCwgMHgwNWQ5LCAweDA1 ZGEsIDB4MDVkYiwgMHgwNWRjLCAweDA1ZGQsIDB4MDVkZSwgMHgwNWRmLAotICAgIDB4MDVlMCwg MHgwNWUxLCAweDA1ZTIsIDB4MDVlMywgMHgwNWU0LCAweDA1ZTUsIDB4MDVlNiwgMHgwNWU3LAot ICAgIDB4MDVlOCwgMHgwNWU5LCAweDA1ZWEsIDB4MDBhMiwgMHgwMGEzLCAweDAwYTUsIDB4MjBh NywgMHgwMTkyLAotICAgIDB4MDBlMSwgMHgwMGVkLCAweDAwZjMsIDB4MDBmYSwgMHgwMGYxLCAw eDAwZDEsIDB4MDBhYSwgMHgwMGJhLAotICAgIDB4MDBiZiwgMHgyMzEwLCAweDAwYWMsIDB4MDBi ZCwgMHgwMGJjLCAweDAwYTEsIDB4MDBhYiwgMHgwMGJiLAotICAgIDB4MjU5MSwgMHgyNTkyLCAw eDI1OTMsIDB4MjUwMiwgMHgyNTI0LCAweDI1NjEsIDB4MjU2MiwgMHgyNTU2LAotICAgIDB4MjU1 NSwgMHgyNTYzLCAweDI1NTEsIDB4MjU1NywgMHgyNTVkLCAweDI1NWMsIDB4MjU1YiwgMHgyNTEw LAotICAgIDB4MjUxNCwgMHgyNTM0LCAweDI1MmMsIDB4MjUxYywgMHgyNTAwLCAweDI1M2MsIDB4 MjU1ZSwgMHgyNTVmLAotICAgIDB4MjU1YSwgMHgyNTU0LCAweDI1NjksIDB4MjU2NiwgMHgyNTYw LCAweDI1NTAsIDB4MjU2YywgMHgyNTY3LAotICAgIDB4MjU2OCwgMHgyNTY0LCAweDI1NjUsIDB4 MjU1OSwgMHgyNTU4LCAweDI1NTIsIDB4MjU1MywgMHgyNTZiLAotICAgIDB4MjU2YSwgMHgyNTE4 LCAweDI1MGMsIDB4MjU4OCwgMHgyNTg0LCAweDI1OGMsIDB4MjU5MCwgMHgyNTgwLAotICAgIDB4 MDNiMSwgMHgwMGRmLCAweDAzOTMsIDB4MDNjMCwgMHgwM2EzLCAweDAzYzMsIDB4MDBiNSwgMHgw M2M0LAotICAgIDB4MDNhNiwgMHgwMzk4LCAweDAzYTksIDB4MDNiNCwgMHgyMjFlLCAweDAzYzYs IDB4MDNiNSwgMHgyMjI5LAotICAgIDB4MjI2MSwgMHgwMGIxLCAweDIyNjUsIDB4MjI2NCwgMHgy MzIwLCAweDIzMjEsIDB4MDBmNywgMHgyMjQ4LAotICAgIDB4MDBiMCwgMHgyMjE5LCAweDAwYjcs IDB4MjIxYSwgMHgyMDdmLCAweDAwYjIsIDB4MjVhMCwgMHgwMGEwCi19OwotCi1zdHJ1Y3QgeF90 b191bmljb2RlIHVfY3A4NjQgPSB7Ci0gICAgMTI4LCAwLCBYMlVfQ1AsIEFMX0FSQUJJQywiUEMg Q29kZSBQYWdlIDg2NCIsImNwODY0IiwgMCwgTlVMTCwKLSAgICAweDAwYjAsIDB4MDBiNywgMHgy MjE5LCAweDIyMWEsIDB4MjU5MiwgMHgyNTAwLCAweDI1MDIsIDB4MjUzYywKLSAgICAweDI1MjQs IDB4MjUyYywgMHgyNTFjLCAweDI1MzQsIDB4MjUxMCwgMHgyNTBjLCAweDI1MTQsIDB4MjUxOCwK LSAgICAweDAzYjIsIDB4MjIxZSwgMHgwM2M2LCAweDAwYjEsIDB4MDBiZCwgMHgwMGJjLCAweDIy NDgsIDB4MDBhYiwKLSAgICAweDAwYmIsIDB4ZmVmNywgMHhmZWY4LCAweGZmZmQsIDB4ZmZmZCwg MHhmZWZiLCAweGZlZmMsIDB4ZmZmZCwKLSAgICAweDAwYTAsIDB4MDBhZCwgMHhmZTgyLCAweDAw YTMsIDB4MDBhNCwgMHhmZTg0LCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZlOGUsIDB4ZmU4Ziwg MHhmZTk1LCAweGZlOTksIDB4MDYwYywgMHhmZTlkLCAweGZlYTEsIDB4ZmVhNSwKLSAgICAweDA2 NjAsIDB4MDY2MSwgMHgwNjYyLCAweDA2NjMsIDB4MDY2NCwgMHgwNjY1LCAweDA2NjYsIDB4MDY2 NywKLSAgICAweDA2NjgsIDB4MDY2OSwgMHhmZWQxLCAweDA2MWIsIDB4ZmViMSwgMHhmZWI1LCAw eGZlYjksIDB4MDYxZiwKLSAgICAweDAwYTIsIDB4ZmU4MCwgMHhmZTgxLCAweGZlODMsIDB4ZmU4 NSwgMHhmZWNhLCAweGZlOGIsIDB4ZmU4ZCwKLSAgICAweGZlOTEsIDB4ZmU5MywgMHhmZTk3LCAw eGZlOWIsIDB4ZmU5ZiwgMHhmZWEzLCAweGZlYTcsIDB4ZmVhOSwKLSAgICAweGZlYWIsIDB4ZmVh ZCwgMHhmZWFmLCAweGZlYjMsIDB4ZmViNywgMHhmZWJiLCAweGZlYmYsIDB4ZmVjMSwKLSAgICAw eGZlYzUsIDB4ZmVjYiwgMHhmZWNmLCAweDAwYTYsIDB4MDBhYywgMHgwMGY3LCAweDAwZDcsIDB4 ZmVjOSwKLSAgICAweDA2NDAsIDB4ZmVkMywgMHhmZWQ3LCAweGZlZGIsIDB4ZmVkZiwgMHhmZWUz LCAweGZlZTcsIDB4ZmVlYiwKLSAgICAweGZlZWQsIDB4ZmVlZiwgMHhmZWYzLCAweGZlYmQsIDB4 ZmVjYywgMHhmZWNlLCAweGZlY2QsIDB4ZmVlMSwKLSAgICAweGZlN2QsIDB4MDY1MSwgMHhmZWU1 LCAweGZlZTksIDB4ZmVlYywgMHhmZWYwLCAweGZlZjIsIDB4ZmVkMCwKLSAgICAweGZlZDUsIDB4 ZmVmNSwgMHhmZWY2LCAweGZlZGQsIDB4ZmVkOSwgMHhmZWYxLCAweDI1YTAsIDB4ZmZmZAotfTsK LQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwODY2ID0gewotICAgIDEyOCwgMCwgWDJVX0NQLCBB TF9DWVJJTCwiUEMgQ29kZSBQYWdlIDg2NiIsImNwODY2IiwgMCwgTlVMTCwKLSAgICAweDA0MTAs IDB4MDQxMSwgMHgwNDEyLCAweDA0MTMsIDB4MDQxNCwgMHgwNDE1LCAweDA0MTYsIDB4MDQxNywK LSAgICAweDA0MTgsIDB4MDQxOSwgMHgwNDFhLCAweDA0MWIsIDB4MDQxYywgMHgwNDFkLCAweDA0 MWUsIDB4MDQxZiwKLSAgICAweDA0MjAsIDB4MDQyMSwgMHgwNDIyLCAweDA0MjMsIDB4MDQyNCwg MHgwNDI1LCAweDA0MjYsIDB4MDQyNywKLSAgICAweDA0MjgsIDB4MDQyOSwgMHgwNDJhLCAweDA0 MmIsIDB4MDQyYywgMHgwNDJkLCAweDA0MmUsIDB4MDQyZiwKLSAgICAweDA0MzAsIDB4MDQzMSwg MHgwNDMyLCAweDA0MzMsIDB4MDQzNCwgMHgwNDM1LCAweDA0MzYsIDB4MDQzNywKLSAgICAweDA0 MzgsIDB4MDQzOSwgMHgwNDNhLCAweDA0M2IsIDB4MDQzYywgMHgwNDNkLCAweDA0M2UsIDB4MDQz ZiwKLSAgICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDI1MDIsIDB4MjUyNCwgMHgyNTYxLCAw eDI1NjIsIDB4MjU1NiwKLSAgICAweDI1NTUsIDB4MjU2MywgMHgyNTUxLCAweDI1NTcsIDB4MjU1 ZCwgMHgyNTVjLCAweDI1NWIsIDB4MjUxMCwKLSAgICAweDI1MTQsIDB4MjUzNCwgMHgyNTJjLCAw eDI1MWMsIDB4MjUwMCwgMHgyNTNjLCAweDI1NWUsIDB4MjU1ZiwKLSAgICAweDI1NWEsIDB4MjU1 NCwgMHgyNTY5LCAweDI1NjYsIDB4MjU2MCwgMHgyNTUwLCAweDI1NmMsIDB4MjU2NywKLSAgICAw eDI1NjgsIDB4MjU2NCwgMHgyNTY1LCAweDI1NTksIDB4MjU1OCwgMHgyNTUyLCAweDI1NTMsIDB4 MjU2YiwKLSAgICAweDI1NmEsIDB4MjUxOCwgMHgyNTBjLCAweDI1ODgsIDB4MjU4NCwgMHgyNThj LCAweDI1OTAsIDB4MjU4MCwKLSAgICAweDA0NDAsIDB4MDQ0MSwgMHgwNDQyLCAweDA0NDMsIDB4 MDQ0NCwgMHgwNDQ1LCAweDA0NDYsIDB4MDQ0NywKLSAgICAweDA0NDgsIDB4MDQ0OSwgMHgwNDRh LCAweDA0NGIsIDB4MDQ0YywgMHgwNDRkLCAweDA0NGUsIDB4MDQ0ZiwKLSAgICAweDA0MDEsIDB4 MDQ1MSwgMHgwNDA0LCAweDA0NTQsIDB4MDQwNywgMHgwNDU3LCAweDA0MGUsIDB4MDQ1ZSwKLSAg ICAweDAwYjAsIDB4MjIxOSwgMHgwMGI3LCAweDIyMWEsIDB4MjExNiwgMHgwMGE0LCAweDI1YTAs IDB4MDBhMAotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwODY5ID0gewotICAgIDEyOCwg MCwgWDJVX0NQLCBBTF9HUkVFSywiUEMgQ29kZSBQYWdlIDg2OSIsImNwODY5IiwgMCwgTlVMTCwK LSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDAz ODYsIDB4ZmZmZCwKLSAgICAweDAwYjcsIDB4MDBhYywgMHgwMGE2LCAweDIwMTgsIDB4MjAxOSwg MHgwMzg4LCAweDIwMTUsIDB4MDM4OSwKLSAgICAweDAzOGEsIDB4MDNhYSwgMHgwMzhjLCAweGZm ZmQsIDB4ZmZmZCwgMHgwMzhlLCAweDAzYWIsIDB4MDBhOSwKLSAgICAweDAzOGYsIDB4MDBiMiwg MHgwMGIzLCAweDAzYWMsIDB4MDBhMywgMHgwM2FkLCAweDAzYWUsIDB4MDNhZiwKLSAgICAweDAz Y2EsIDB4MDM5MCwgMHgwM2NjLCAweDAzY2QsIDB4MDM5MSwgMHgwMzkyLCAweDAzOTMsIDB4MDM5 NCwKLSAgICAweDAzOTUsIDB4MDM5NiwgMHgwMzk3LCAweDAwYmQsIDB4MDM5OCwgMHgwMzk5LCAw eDAwYWIsIDB4MDBiYiwKLSAgICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDI1MDIsIDB4MjUy NCwgMHgwMzlhLCAweDAzOWIsIDB4MDM5YywKLSAgICAweDAzOWQsIDB4MjU2MywgMHgyNTUxLCAw eDI1NTcsIDB4MjU1ZCwgMHgwMzllLCAweDAzOWYsIDB4MjUxMCwKLSAgICAweDI1MTQsIDB4MjUz NCwgMHgyNTJjLCAweDI1MWMsIDB4MjUwMCwgMHgyNTNjLCAweDAzYTAsIDB4MDNhMSwKLSAgICAw eDI1NWEsIDB4MjU1NCwgMHgyNTY5LCAweDI1NjYsIDB4MjU2MCwgMHgyNTUwLCAweDI1NmMsIDB4 MDNhMywKLSAgICAweDAzYTQsIDB4MDNhNSwgMHgwM2E2LCAweDAzYTcsIDB4MDNhOCwgMHgwM2E5 LCAweDAzYjEsIDB4MDNiMiwKLSAgICAweDAzYjMsIDB4MjUxOCwgMHgyNTBjLCAweDI1ODgsIDB4 MjU4NCwgMHgwM2I0LCAweDAzYjUsIDB4MjU4MCwKLSAgICAweDAzYjYsIDB4MDNiNywgMHgwM2I4 LCAweDAzYjksIDB4MDNiYSwgMHgwM2JiLCAweDAzYmMsIDB4MDNiZCwKLSAgICAweDAzYmUsIDB4 MDNiZiwgMHgwM2MwLCAweDAzYzEsIDB4MDNjMywgMHgwM2MyLCAweDAzYzQsIDB4MDM4NCwKLSAg ICAweDAwYWQsIDB4MDBiMSwgMHgwM2M1LCAweDAzYzYsIDB4MDNjNywgMHgwMGE3LCAweDAzYzgs IDB4MDM4NSwKLSAgICAweDAwYjAsIDB4MDBhOCwgMHgwM2M5LCAweDAzY2IsIDB4MDNiMCwgMHgw M2NlLCAweDI1YTAsIDB4MDBhMAotfTsKLQotLyogV2luZG93cyBjb2RlIHBhZ2VzICovCi0KLXN0 cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDEyNTAgPSB7ICAgICAgICAvKiBXaW5kb3dzIExhdGluLTIg Ki8KLSAgICAxMjgsIDAsIFgyVV9DUCwgQUxfUk9NQU4sIldpbmRvd3MgQ29kZSBQYWdlIDEyNTAi LCJjcDEyNTAiLCAwLCBOVUxMLAotICAgIDB4MjBhYywgMHhmZmZkLCAweDIwMWEsIDB4MDE5Miwg MHgyMDFlLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLCAvKiA4MCAqLwotICAgIDB4MDA1ZSwgMHgy MDMxLCAweDAxNjAsIDB4MDAzYywgMHgwMTVhLCAweDAxNjQsIDB4MDE3ZCwgMHgwMTc5LCAvKiA4 OCAqLwotICAgIDB4ZmZmZCwgMHgyMDE4LCAweDIwMTksIDB4MjAxYywgMHgyMDFkLCAweDIwMjIs IDB4MjAxMiwgMHgyMDE0LCAvKiA5MCAqLwotICAgIDB4ZmZmZCwgMHgyMTIyLCAweDAxNjEsIDB4 MDAzZSwgMHgwMTViLCAweDAxNjUsIDB4MDE3ZSwgMHgwMTdhLCAvKiA5OCAqLwotICAgIDB4MDBB MCwgMHgwMmM3LCAweDAyZDgsIDB4MDE0MSwgMHgwMEE0LCAweDAxMDQsIDB4MDBBNiwgMHgwMEE3 LCAvKiBBMCAqLwotICAgIDB4MDBBOCwgMHgwMGE5LCAweDAxNUUsIDB4MDBhYiwgMHgwMGFjLCAw eDAwMkQsIDB4MDBhZSwgMHgwMTdCLCAvKiBBOCAqLwotICAgIDB4MDBCMCwgMHgwMGIxLCAweDAy REIsIDB4MDE0MiwgMHgwMEI0LCAweDAwYjUsIDB4MDBiNiwgMHgwMGI3LCAvKiBCMCAqLwotICAg IDB4MDBCOCwgMHgwMTA1LCAweDAxNUYsIDB4MDBiYiwgMHgwMTNkLCAweDAyREQsIDB4MDEzRSwg MHgwMTdDLCAvKiBCOCAqLwotICAgIDB4MDE1NCwgMHgwMEMxLCAweDAwQzIsIDB4MDEwMiwgMHgw MEM0LCAweDAxMzksIDB4MDEwNiwgMHgwMEM3LCAvKiBDMCAqLwotICAgIDB4MDEwQywgMHgwMEM5 LCAweDAxMTgsIDB4MDBDQiwgMHgwMTFBLCAweDAwQ0QsIDB4MDBDRSwgMHgwMTBFLAotICAgIDB4 MDExMCwgMHgwMTQzLCAweDAxNDcsIDB4MDBEMywgMHgwMEQ0LCAweDAxNTAsIDB4MDBENiwgMHgw MEQ3LAotICAgIDB4MDE1OCwgMHgwMTZFLCAweDAwREEsIDB4MDE3MCwgMHgwMERDLCAweDAwREQs IDB4MDE2MiwgMHgwMERGLAotICAgIDB4MDE1NSwgMHgwMEUxLCAweDAwRTIsIDB4MDEwMywgMHgw MEU0LCAweDAxM0EsIDB4MDEwNywgMHgwMEU3LAotICAgIDB4MDEwRCwgMHgwMEU5LCAweDAxMTks IDB4MDBFQiwgMHgwMTFCLCAweDAwRUQsIDB4MDBFRSwgMHgwMTBGLAotICAgIDB4MDExMSwgMHgw MTQ0LCAweDAxNDgsIDB4MDBGMywgMHgwMEY0LCAweDAxNTEsIDB4MDBGNiwgMHgwMEY3LAotICAg IDB4MDE1OSwgMHgwMTZGLCAweDAwRkEsIDB4MDE3MSwgMHgwMEZDLCAweDAwRkQsIDB4MDE2Mywg MHgwMkQ5Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfY3AxMjUxID0geyAgICAgICAgLyog V2luZG93cyBDeXJpbGxpYyAqLwotICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9DWVJJTCwiV2luZG93 cyBDb2RlIFBhZ2UgMTI1MSIsImNwMTI1MSIsIDAsIE5VTEwsCi0gICAgMHgwNDAyLCAweDA0MDMs IDB4MjAxYSwgMHgwNDUzLCAweDIwMWUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsIC8qIDgwICov Ci0gICAgMHgyMGFjLCAweDIwMzEsIDB4MDQwOSwgMHgwMDNjLCAweDA0MGEsIDB4MDQwYywgMHgw NDBiLCAweDA0MGYsIC8qIDg4ICovCi0gICAgMHgwNDUyLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFj LCAweDIwMWQsIDB4MjAyMiwgMHgyMDEyLCAweDIwMTQsIC8qIDkwICovCi0gICAgMHgwMDdlLCAw eDIxMjIsIDB4MDQ1OSwgMHgwMDNlLCAweDA0NWEsIDB4MDQ1YywgMHgwNDViLCAweDA0NWYsIC8q IDk4ICovCi0gICAgMHgwMEEwLCAweDA0MGUsIDB4MDQ1ZSwgMHgwNDA4LCAweDAwQTQsIDB4MDQ5 MCwgMHgwMEE2LCAweDAwQTcsIC8qIGEwICovCi0gICAgMHgwNDAxLCAweDAwQTksIDB4MDQwNCwg MHgwMEFCLCAweDAwQUMsIDB4MDBBRCwgMHgwMEFFLCAweDA0MDcsIC8qIGE4ICovCi0gICAgMHgw MGIwLCAweDAwYjEsIDB4MDQwNiwgMHgwNDU2LCAweDA0OTEsIDB4MDBCNSwgMHgwMEI2LCAweDAw QjcsIC8qIGIwICovCi0gICAgMHgwNDUxLCAweDIxMTYsIDB4MDQ1NCwgMHgwMEJCLCAweDA0NTgs IDB4MDQwNSwgMHgwNDU1LCAweDA0NTcsIC8qIGI4ICovCi0gICAgMHgwNDEwLCAweDA0MTEsIDB4 MDQxMiwgMHgwNDEzLCAweDA0MTQsIDB4MDQxNSwgMHgwNDE2LCAweDA0MTcsIC8qIGMwICovCi0g ICAgMHgwNDE4LCAweDA0MTksIDB4MDQxYSwgMHgwNDFiLCAweDA0MWMsIDB4MDQxZCwgMHgwNDFl LCAweDA0MWYsIC8qIGM4ICovCi0gICAgMHgwNDIwLCAweDA0MjEsIDB4MDQyMiwgMHgwNDIzLCAw eDA0MjQsIDB4MDQyNSwgMHgwNDI2LCAweDA0MjcsIC8qIGQwICovCi0gICAgMHgwNDI4LCAweDA0 MjksIDB4MDQyYSwgMHgwNDJiLCAweDA0MmMsIDB4MDQyZCwgMHgwNDJlLCAweDA0MmYsIC8qIGQ4 ICovCi0gICAgMHgwNDMwLCAweDA0MzEsIDB4MDQzMiwgMHgwNDMzLCAweDA0MzQsIDB4MDQzNSwg MHgwNDM2LCAweDA0MzcsIC8qIGUwICovCi0gICAgMHgwNDM4LCAweDA0MzksIDB4MDQzYSwgMHgw NDNiLCAweDA0M2MsIDB4MDQzZCwgMHgwNDNlLCAweDA0M2YsIC8qIGU4ICovCi0gICAgMHgwNDQw LCAweDA0NDEsIDB4MDQ0MiwgMHgwNDQzLCAweDA0NDQsIDB4MDQ0NSwgMHgwNDQ2LCAweDA0NDcs IC8qIGYwICovCi0gICAgMHgwNDQ4LCAweDA0NDksIDB4MDQ0YSwgMHgwNDRiLCAweDA0NGMsIDB4 MDQ0ZCwgMHgwNDRlLCAweDA0NGYgIC8qIGY4ICovCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2Rl IHVfY3AxMjUyID0geyAgICAgICAgLyogV2luZG93cyBMYXRpbi0xICovCi0vKgotICBUaGUgZm9s bG93aW5nIGNvZGUgcG9pbnRzIGFkZGVkIFNlcHRlbWJlciAxOTk4OgotICAweDgwOiBFdXJvCi0g IDB4OEU6IExhdGluIENhcGl0YWwgTGV0dGVyIFogd2l0aCBDYXJvbgotICAweDlFOiBMYXRpbiBT bWFsbCBMZXR0ZXIgWiB3aXRoIENhcm9uCi0gIEFubm91bmNlZCBieSBNdXJyYXkgU2FyZ2VudCA8 bXVycmF5c0BtaWNyb3NvZnQuY29tPiB0byBVbmljb2RlIGNvbnNvcnRpdW0sCi0gIGVtYWlsLCAz IFNlcHRlbWJlciAxOTk4LiAgVGhlIGNvZGUgcGFnZSB3YXMgY2hhbmdlZCBpbiBKdW5lIDE5OTgu ICBUaGUKLSAgY2hhbmdlIGlzIHJlZmxlY3RlZCBpbiBXaW5kb3dzIDk4IGFuZCAicmVjZW50IHNl cnZpY2UgcGFja3MiIGZvciBXaW5kb3cgOTUKLSAgYW5kIFdpbmRvd3MgTlQgNC4wLgotKi8KLSAg ICAxMjgsIDAsIFgyVV9DUCwgQUxfUk9NQU4sIldpbmRvd3MgQ29kZSBQYWdlIDEyNTIiLCJjcDEy NTIiLCAwLCBOVUxMLAotICAgIDB4MjBhYywgMHhmZmZkLCAweDIwMWEsIDB4MDE5MiwgMHgyMDFl LCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLAotICAgIDB4MDA1ZSwgMHgyMDMxLCAweDAxNjAsIDB4 MDAzYywgMHgwMTUyLCAweGZmZmQsIDB4MDE3RCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHgyMDE4 LCAweDIwMTksIDB4MjAxYywgMHgyMDFkLCAweDIwMjIsIDB4MjAxMiwgMHgyMDE0LAotICAgIDB4 MDA3ZSwgMHgyMTIyLCAweDAxNjEsIDB4MDAzZSwgMHgwMTUzLCAweGZmZmQsIDB4MDE3RSwgMHgw MTc4LAotICAgIDB4MDBBMCwgMHgwMEExLCAweDAwQTIsIDB4MDBBMywgMHgwMEE0LCAweDAwQTUs IDB4MDBBNiwgMHgwMEE3LAotICAgIDB4MDBBOCwgMHgwMEE5LCAweDAwQUEsIDB4MDBBQiwgMHgw MEFDLCAweDAwQUQsIDB4MDBBRSwgMHgwMEFGLAotICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIs IDB4MDBCMywgMHgwMEI0LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LAotICAgIDB4MDBCOCwgMHgw MEI5LCAweDAwQkEsIDB4MDBCQiwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgwMEJGLAotICAg IDB4MDBDMCwgMHgwMEMxLCAweDAwQzIsIDB4MDBDMywgMHgwMEM0LCAweDAwQzUsIDB4MDBDNiwg MHgwMEM3LAotICAgIDB4MDBDOCwgMHgwMEM5LCAweDAwQ0EsIDB4MDBDQiwgMHgwMENDLCAweDAw Q0QsIDB4MDBDRSwgMHgwMENGLAotICAgIDB4MDBEMCwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywg MHgwMEQ0LCAweDAwRDUsIDB4MDBENiwgMHgwMEQ3LAotICAgIDB4MDBEOCwgMHgwMEQ5LCAweDAw REEsIDB4MDBEQiwgMHgwMERDLCAweDAwREQsIDB4MDBERSwgMHgwMERGLAotICAgIDB4MDBFMCwg MHgwMEUxLCAweDAwRTIsIDB4MDBFMywgMHgwMEU0LCAweDAwRTUsIDB4MDBFNiwgMHgwMEU3LAot ICAgIDB4MDBFOCwgMHgwMEU5LCAweDAwRUEsIDB4MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBF RSwgMHgwMEVGLAotICAgIDB4MDBGMCwgMHgwMEYxLCAweDAwRjIsIDB4MDBGMywgMHgwMEY0LCAw eDAwRjUsIDB4MDBGNiwgMHgwMEY3LAotICAgIDB4MDBGOCwgMHgwMEY5LCAweDAwRkEsIDB4MDBG QiwgMHgwMEZDLCAweDAwRkQsIDB4MDBGRSwgMHgwMEZGCi19OwotCi1zdHJ1Y3QgeF90b191bmlj b2RlIHVfY3AxMjUzID0geyAgICAgICAgLyogV2luZG93cyBHcmVlY2UgKi8KLSAgICAxMjgsIDAs IFgyVV9DUCwgQUxfR1JFRUssIldpbmRvd3MgQ29kZSBQYWdlIDEyNTMiLCJjcDEyNTMiLCAwLCBO VUxMLAotICAgIDB4MjBhYywgMHhmZmZkLCAweDIwMWEsIDB4MDE5MiwgMHgyMDFlLCAweDIwMjYs IDB4MjAyMCwgMHgyMDIxLCAvKiA4MCAqLwotICAgIDB4ZmZmZCwgMHgyMDMxLCAweGZmZmQsIDB4 MDAzYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAvKiA4OCAqLwotICAgIDB4ZmZm ZCwgMHgyMDE4LCAweDIwMTksIDB4MjAxYywgMHgyMDFkLCAweDIwMjIsIDB4MjAxMiwgMHgyMDE0 LCAvKiA5MCAqLwotICAgIDB4ZmZmZCwgMHgyMTIyLCAweGZmZmQsIDB4MDAzZSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAvKiA5OCAqLwotICAgIDB4MDBBMCwgMHgwMGI3LCAweDAz ODYsIDB4MDBBMywgMHgwMEE0LCAweDAwQTUsIDB4MDBBNiwgMHgwMEE3LCAvKiBhMCAqLwotICAg IDB4MDBBOCwgMHgwMEE5LCAweDAwQUEsIDB4MDBBQiwgMHgwMEFDLCAweDAwQUQsIDB4MDBBRSwg MHgwMEFGLCAvKiBhOCAqLwotICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBCMywgMHgw MEI3LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LCAvKiBiMCAqLwotICAgIDB4MDM4OCwgMHgwMzg5 LCAweDAzOEEsIDB4MDBCQiwgMHgwMzhDLCAweDAwQkQsIDB4MDM4RSwgMHgwMzhGLCAvKiBiOCAq LwotICAgIDB4MDM5MCwgMHgwMzkxLCAweDAzOTIsIDB4MDM5MywgMHgwMzk0LCAweDAzOTUsIDB4 MDM5NiwgMHgwMzk3LCAvKiBjMCAqLwotICAgIDB4MDM5OCwgMHgwMzk5LCAweDAzOUEsIDB4MDM5 QiwgMHgwMzlDLCAweDAzOUQsIDB4MDM5RSwgMHgwMzlGLCAvKiBjOCAqLwotICAgIDB4MDNhMCwg MHgwM2ExLCAweGZmZmQsIDB4MDNhMywgMHgwM2E0LCAweDAzYTUsIDB4MDNhNiwgMHgwM2E3LCAv KiBkMCAqLwotICAgIDB4MDNhOCwgMHgwM2E5LCAweDAzYUEsIDB4MDNhQiwgMHgwM2FDLCAweDAz YUQsIDB4MDNhRSwgMHgwM2FGLCAvKiBkOCAqLwotICAgIDB4MDNiMCwgMHgwM2IxLCAweDAzYjIs IDB4MDNiMywgMHgwM2I0LCAweDAzYjUsIDB4MDNiNiwgMHgwM2I3LCAvKiBlMCAqLwotICAgIDB4 MDNiOCwgMHgwM2I5LCAweDAzYkEsIDB4MDNiQiwgMHgwM2JDLCAweDAzYkQsIDB4MDNiRSwgMHgw M2JGLCAvKiBlOCAqLwotICAgIDB4MDNjMCwgMHgwM2MxLCAweDAzYzIsIDB4MDNjMywgMHgwM2M0 LCAweDAzYzUsIDB4MDNjNiwgMHgwM2M3LCAvKiBmMCAqLwotICAgIDB4MDNjOCwgMHgwM2M5LCAw eDAzY0EsIDB4MDNjQiwgMHgwM2NDLCAweDAzY0QsIDB4MDNjRSwgMHhmZmZkICAvKiBmOCAqLwot fTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwMTI1NCA9IHsgICAgICAgIC8qIFdpbmRvd3Mg VHVya2V5ICovCi0gICAgMTI4LCAwLCBYMlVfQ1AsIEFMX1JPTUFOLCJXaW5kb3dzIENvZGUgUGFn ZSAxMjU0IiwiY3AxMjU0IiwgMCwgTlVMTCwKLSAgICAweDIwYWMsIDB4ZmZmZCwgMHgyMDFhLCAw eDAxOTIsIDB4MjAxZSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwgLyogODAgKi8KLSAgICAweDAw NWUsIDB4MjAzMSwgMHgwMTYwLCAweDAwM2MsIDB4MDE1MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgLyogODggKi8KLSAgICAweGZmZmQsIDB4MjAxOCwgMHgyMDE5LCAweDIwMWMsIDB4MjAxZCwg MHgyMDIyLCAweDIwMTIsIDB4MjAxNCwgLyogOTAgKi8KLSAgICAweDAwN2UsIDB4MjEyMiwgMHgw MTYxLCAweDAwM2UsIDB4MDE1MywgMHhmZmZkLCAweGZmZmQsIDB4MDE3OCwgLyogOTggKi8KLSAg ICAweDAwQTAsIDB4MDBBMSwgMHgwMEEyLCAweDAwQTMsIDB4MDBBNCwgMHgwMEE1LCAweDAwQTYs IDB4MDBBNywKLSAgICAweDAwQTgsIDB4MDBBOSwgMHgwMEFBLCAweDAwQUIsIDB4MDBBQywgMHgw MEFELCAweDAwQUUsIDB4MDBBRiwKLSAgICAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAweDAwQjMs IDB4MDBCNCwgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywKLSAgICAweDAwQjgsIDB4MDBCOSwgMHgw MEJBLCAweDAwQkIsIDB4MDBCQywgMHgwMEJELCAweDAwQkUsIDB4MDBCRiwKLSAgICAweDAwQzAs IDB4MDBDMSwgMHgwMEMyLCAweDAwQzMsIDB4MDBDNCwgMHgwMEM1LCAweDAwQzYsIDB4MDBDNywK LSAgICAweDAwQzgsIDB4MDBDOSwgMHgwMENBLCAweDAwQ0IsIDB4MDBDQywgMHgwMENELCAweDAw Q0UsIDB4MDBDRiwKLSAgICAweDAxMWUsIDB4MDBEMSwgMHgwMEQyLCAweDAwRDMsIDB4MDBENCwg MHgwMEQ1LCAweDAwRDYsIDB4MDBENywKLSAgICAweDAwRDgsIDB4MDBEOSwgMHgwMERBLCAweDAw REIsIDB4MDBEQywgMHgwMTMwLCAweDAxNWUsIDB4MDBERiwKLSAgICAweDAwRTAsIDB4MDBFMSwg MHgwMEUyLCAweDAwRTMsIDB4MDBFNCwgMHgwMEU1LCAweDAwRTYsIDB4MDBFNywKLSAgICAweDAw RTgsIDB4MDBFOSwgMHgwMEVBLCAweDAwRUIsIDB4MDBFQywgMHgwMEVELCAweDAwRUUsIDB4MDBF RiwKLSAgICAweDAxMWYsIDB4MDBGMSwgMHgwMEYyLCAweDAwRjMsIDB4MDBGNCwgMHgwMEY1LCAw eDAwRjYsIDB4MDBGNywKLSAgICAweDAwRjgsIDB4MDBGOSwgMHgwMEZBLCAweDAwRkIsIDB4MDBG QywgMHgwMTMxLCAweDAxNWYsIDB4MDBGRgotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2Nw MTI1NSA9IHsgICAgICAgIC8qIFdpbmRvd3MgSGVicmV3ICovCi0gICAgMTI4LCAwLCBYMlVfQ1As IEFMX1JPTUFOLCJXaW5kb3dzIENvZGUgUGFnZSAxMjU1IChIZWJyZXcpIiwiY3AxMjU1IiwKLSAg ICAwLCBOVUxMLAotICAgIDB4MjBBQywgMHhGRkZELCAweDIwMWEsIDB4MDE5MiwgMHgyMDFlLCAw eDIwMjYsIDB4MjAyMCwgMHgyMDIxLAotICAgIDB4MDJjNiwgMHgyMDMwLCAweGZmZmQsIDB4MjAz OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHgyMDE4LCAw eDIwMTksIDB4MjAxYywgMHgyMDFkLCAweDIwMjIsIDB4MjAxMywgMHgyMDE0LAotICAgIDB4MDJk YywgMHgyMTIyLCAweGZmZmQsIDB4MjAzYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4MDBhMCwgMHgwMGExLCAweDAwYTIsIDB4MDBhMywgMHgyMGFhLCAweDAwYTUsIDB4 MDBhNiwgMHgwMGE3LAotICAgIDB4MDBhOCwgMHgwMGE5LCAweDAwZDcsIDB4MDBhYiwgMHgwMGFj LCAweDAwYWQsIDB4MDBhZSwgMHgwMGFmLAotICAgIDB4MDBiMCwgMHgwMGIxLCAweDAwYjIsIDB4 MDBiMywgMHgwMGI0LCAweDAwYjUsIDB4MDBiNiwgMHgwMGI3LAotICAgIDB4MDBiOCwgMHgwMGI5 LCAweDAwZjcsIDB4MDBiYiwgMHgwMGJjLCAweDAwYmQsIDB4MDBiZSwgMHgwMGJmLAotICAgIDB4 MDViMCwgMHgwNWIxLCAweDA1YjIsIDB4MDViMywgMHgwNWI0LCAweDA1YjUsIDB4MDViNiwgMHgw NWI3LAotICAgIDB4MDViOCwgMHgwNWI5LCAweGZmZmQsIDB4MDViYiwgMHgwNWJjLCAweDA1YmQs IDB4MDViZSwgMHgwNWJmLAotICAgIDB4MDVjMCwgMHgwNWMxLCAweDA1YzIsIDB4MDVjMywgMHgw NWYwLCAweDA1ZjEsIDB4MDVmMiwgMHgwNWYzLAotICAgIDB4MDVmNCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4MDVkMCwgMHgw NWQxLCAweDA1ZDIsIDB4MDVkMywgMHgwNWQ0LCAweDA1ZDUsIDB4MDVkNiwgMHgwNWQ3LAotICAg IDB4MDVkOCwgMHgwNWQ5LCAweDA1ZGEsIDB4MDVkYiwgMHgwNWRjLCAweDA1ZGQsIDB4MDVkZSwg MHgwNWRmLAotICAgIDB4MDVlMCwgMHgwNWUxLCAweDA1ZTIsIDB4MDVlMywgMHgwNWU0LCAweDA1 ZTUsIDB4MDVlNiwgMHgwNWU3LAotICAgIDB4MDVlOCwgMHgwNWU5LCAweDA1ZWEsIDB4ZmZmZCwg MHhmZmZkLCAweDIwMGUsIDB4MjAwZiwgMHhmZmZkCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2Rl IHVfY3AxMjU2ID0geyAgICAgICAgLyogV2luZG93cyBBcmFiaWMgKi8KLSAgICAxMjgsIDAsIFgy VV9DUCwgQUxfUk9NQU4sIldpbmRvd3MgQ29kZSBQYWdlIDEyNTYgKEFyYWJpYykiLCJjcDEyNTYi LAotICAgIDAsIE5VTEwsCi0gICAgMHgyMGFjLCAweDA2N2UsIDB4MjAxYSwgMHgwMTkyLCAweDIw MWUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsCi0gICAgMHgwMmM2LCAweDIwMzAsIDB4ZmZmZCwg MHgyMDM5LCAweDAxNTIsIDB4MDY4NiwgMHgwNjk4LCAweGZmZmQsIC8qIDg4ICovCi0gICAgMHgw NmFmLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFjLCAweDIwMWQsIDB4MjAyMiwgMHgyMDEzLCAweDIw MTQsIC8qIDkwICovCi0gICAgMHhmZmZkLCAweDIxMjIsIDB4ZmZmZCwgMHgwMDNhLCAweDAxNTMs IDB4MjAwYywgMHgyMDBkLCAweGZmZmQsIC8qIDk4ICovCi0gICAgMHgwMEEwLCAweDA2MGMsIDB4 MDBBMiwgMHgwMEEzLCAweDAwQTQsIDB4MDBhNSwgMHgwMEE2LCAweDAwQTcsIC8qIGEwICovCi0g ICAgMHgwMGE4LCAweDAwQTksIDB4ZmZmZCwgMHgwMEFCLCAweDAwQUMsIDB4MDBBRCwgMHgwMEFF LCAweDAwYWYsIC8qIGE4ICovCi0gICAgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwgMHgwMEIzLCAw eDAwYjQsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsIC8qIGIwICovCi0gICAgMHgwMGI4LCAweDAw QjksIDB4MDYxYiwgMHgwMEJCLCAweDAwQkMsIDB4MDBCRCwgMHgwMEJFLCAweDA2MWYsIC8qIGI4 ICovCi0gICAgMHhmZmZkLCAweDA2MjEsIDB4MDYyMiwgMHgwNjIzLCAweDA2MjQsIDB4MDYyNSwg MHgwNjI2LCAweDA2MjcsIC8qIGMwICovCi0gICAgMHgwNjI4LCAweDA2MjksIDB4MDYyYSwgMHgw NjJiLCAweDA2MmMsIDB4MDYyZCwgMHgwNjJlLCAweDA2MmYsIC8qIGM4ICovCi0gICAgMHgwNjMw LCAweDA2MzEsIDB4MDYzMiwgMHgwNjMzLCAweDA2MzQsIDB4MDYzNSwgMHgwNjM2LCAweDAwRDcs IC8qIGQwICovCi0gICAgMHgwNjM3LCAweDA2MzgsIDB4MDYzOSwgMHgwNjNhLCAweDA2NDAsIDB4 MDY0MSwgMHgwNjQyLCAweDA2NDMsIC8qIGQ4ICovCi0gICAgMHgwMGUwLCAweDA2NDQsIDB4MDBl MiwgMHgwNjQ1LCAweDA2NDYsIDB4MDY0NywgMHgwNjQ4LCAweDAwZTcsIC8qIGUwICovCi0gICAg MHgwMGU4LCAweDAwRTksIDB4MDBlYSwgMHgwMGViLCAweDA2NDksIDB4MDY0YSwgMHgwMGVlLCAw eDAwZWYsIC8qIGU4ICovCi0gICAgMHgwNjRiLCAweDA2NGMsIDB4MDY0ZCwgMHgwNjRlLCAweDAw ZjQsIDB4MDY0ZiwgMHgwNjUwLCAweDAwRjcsIC8qIGYwICovCi0gICAgMHgwNjUxLCAweDAwZjks IDB4MDY1MiwgMHgwMGZiLCAweDAwZmMsIDB4MjAwZSwgMHgyMDBmLCAweGZmZmQgIC8qIGY4ICov Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfY3AxMjU3ID0geyAgICAgICAgLyogV2luZG93 cyBMYXRpbi00ICovCi0gICAgMTI4LCAwLCBYMlVfQ1AsIEFMX1JPTUFOLCJXaW5kb3dzIENvZGUg UGFnZSAxMjU3IiwiY3AxMjU3IiwgMCwgTlVMTCwKLSAgICAweDIwYWMsIDB4ZmZmZCwgMHgyMDFh LCAweGZmZmQsIDB4MjAxZSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwgLyogODAgKi8KLSAgICAw eGZmZmQsIDB4MjAzMSwgMHhmZmZkLCAweDAwM2MsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgLyogODggKi8KLSAgICAweGZmZmQsIDB4MjAxOCwgMHgyMDE5LCAweDIwMWMsIDB4MjAx ZCwgMHgyMDIyLCAweDIwMTIsIDB4MjAxNCwgLyogOTAgKi8KLSAgICAweGZmZmQsIDB4MjEyMiwg MHhmZmZkLCAweDAwM2UsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgLyogOTggKi8K LSAgICAweDAwQTAsIDB4ZmZmZCwgMHgwMEEyLCAweDAwQTMsIDB4MDBBNCwgMHhmZmZkLCAweDAw QTYsIDB4MDBBNywgLyogYTAgKi8KLSAgICAweDAwZDgsIDB4MDBBOSwgMHgwMTU2LCAweDAwQUIs IDB4MDBBQywgMHgwMEFELCAweDAwQUUsIDB4MDBjNiwgLyogYTggKi8KLSAgICAweDAwQjAsIDB4 MDBCMSwgMHgwMEIyLCAweDAwQjMsIDB4ZmZmZCwgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywgLyog YjAgKi8KLSAgICAweDAwZjgsIDB4MDBCOSwgMHgwMTU3LCAweDAwQkIsIDB4MDBCQywgMHgwMEJE LCAweDAwQkUsIDB4MDBlNiwgLyogYjggKi8KLSAgICAweDAxMDQsIDB4MDEyZSwgMHgwMTAwLCAw eDAxMDYsIDB4MDBDNCwgMHgwMEM1LCAweDAxMTgsIDB4MDExMiwgLyogYzAgKi8KLSAgICAweDAx MEMsIDB4MDBDOSwgMHgwMTc5LCAweDAxMTYsIDB4MDEyMiwgMHgwMTM2LCAweDAxMmEsIDB4MDBi NywgLyogYzggKi8KLSAgICAweDAxNjAsIDB4MDE0MywgMHgwMTQ1LCAweDAwZDMsIDB4MDE0Yywg MHgwMEQ1LCAweDAwRDYsIDB4MDBENywgLyogZDAgKi8KLSAgICAweDAxNzIsIDB4MDE0MSwgMHgw MTVBLCAweDAxNmEsIDB4MDBEQywgMHgwMTdiLCAweDAxN2QsIDB4MDBERiwgLyogZDggKi8KLSAg ICAweDAxMDUsIDB4MDEyZiwgMHgwMTAxLCAweDAxMDcsIDB4MDBFNCwgMHgwMEU1LCAweDAxMTks IDB4MDExMywgLyogZTAgKi8KLSAgICAweDAxMEQsIDB4MDBFOSwgMHgwMTdhLCAweDAxMTcsIDB4 MDEyMywgMHgwMTM3LCAweDAxMmIsIDB4MDEzYywgLyogZTggKi8KLSAgICAweDAxNjEsIDB4MDE0 NCwgMHgwMTQ2LCAweDAwZjMsIDB4MDE0ZCwgMHgwMEY1LCAweDAwRjYsIDB4MDBGNywgLyogZjAg Ki8KLSAgICAweDAxNzMsIDB4MDE0MiwgMHgwMTViLCAweDAxNmIsIDB4MDBmYywgMHgwMTdjLCAw eDAxN2UsIDB4ZmZmZCAgLyogZjggKi8KLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDEy NTggPSB7ICAgICAgICAvKiBXaW5kb3dzIFZpZXQgTmFtICovCi0gICAgMTI4LCAwLCBYMlVfQ1As IEFMX1JPTUFOLCJXaW5kb3dzIENvZGUgUGFnZSAxMjU4IChWaWV0IE5hbSkiLCJjcDEyNTgiLAot ICAgIDAsIE5VTEwsCi0gICAgMHgyMGFjLCAweGZmZmQsIDB4MjAxYSwgMHgwMTkyLCAweDIwMWUs IDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsIC8qIDgwICovCi0gICAgMHgwMmM2LCAweDIwMzAsIDB4 ZmZmZCwgMHgyMDM5LCAweDAxNTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIC8qIDg4ICovCi0g ICAgMHhmZmZkLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFjLCAweDIwMWQsIDB4MjAyMiwgMHgyMDEz LCAweDIwMTQsIC8qIDkwICovCi0gICAgMHgwMmRjLCAweDIxMjIsIDB4ZmZmZCwgMHgyMDNhLCAw eDAxNTMsIDB4ZmZmZCwgMHhmZmZkLCAweDAxNzgsIC8qIDk4ICovCi0gICAgMHgwMEEwLCAweDAw YTEsIDB4MDBBMiwgMHgwMEEzLCAweDAwQTQsIDB4MDBhNSwgMHgwMEE2LCAweDAwQTcsIC8qIGEw ICovCi0gICAgMHgwMGE4LCAweDAwQTksIDB4MDBhYSwgMHgwMEFCLCAweDAwQUMsIDB4MDBBRCwg MHgwMEFFLCAweDAwYWYsIC8qIGE4ICovCi0gICAgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwgMHgw MEIzLCAweDAwYjQsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsIC8qIGIwICovCi0gICAgMHgwMGI4 LCAweDAwQjksIDB4MDBiYSwgMHgwMEJCLCAweDAwQkMsIDB4MDBCRCwgMHgwMEJFLCAweDAwYmYs IC8qIGI4ICovCi0gICAgMHgwMGMwLCAweDAwYzEsIDB4MDBjMiwgMHgwMTAyLCAweDAwQzQsIDB4 MDBDNSwgMHgwMGM2LCAweDAwYzcsIC8qIGMwICovCi0gICAgMHgwMGM4LCAweDAwQzksIDB4MDBj YSwgMHgwMGNiLCAweDAzMDAsIDB4MDBjZCwgMHgwMGNlLCAweDAwY2YsIC8qIGM4ICovCi0gICAg MHgwMTEwLCAweDAwZDEsIDB4MDMwOSwgMHgwMGQzLCAweDAwZDQsIDB4MDFhMCwgMHgwMEQ2LCAw eDAwRDcsIC8qIGQwICovCi0gICAgMHgwMGQ4LCAweDAwZDksIDB4MDBkYSwgMHgwMGRiLCAweDAw REMsIDB4MDFhZiwgMHgwMzAzLCAweDAwREYsIC8qIGQ4ICovCi0gICAgMHgwMGUwLCAweDAwZTEs IDB4MDBlMiwgMHgwMTAzLCAweDAwRTQsIDB4MDBFNSwgMHgwMGU2LCAweDAwZDcsIC8qIGUwICov Ci0gICAgMHgwMGU4LCAweDAwRTksIDB4MDBlYSwgMHgwMGViLCAweDAzMDEsIDB4MDBlZCwgMHgw MGVlLCAweDAwZWYsIC8qIGU4ICovCi0gICAgMHgwMTExLCAweDAwZjEsIDB4MDMyMywgMHgwMGYz LCAweDAwZjQsIDB4MDFhMSwgMHgwMEY2LCAweDAwRjcsIC8qIGYwICovCi0gICAgMHgwMGY4LCAw eDAwZjksIDB4MDBmYSwgMHgwMGZiLCAweDAwZmMsIDB4MDFiMCwgMHgyMGFiLCAweDAwZmYgIC8q IGY4ICovCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfY3AzNyA9IHsgIC8qIEVCQ0RJQyBV LlMuICovCi0gICAgMjU2LCAwLCBYMlVfQ1AsIEFMX1JPTUFOLCJDb2RlIFBhZ2UgMDM3IEVCQ0RJ QyAoVS5TLikiLCJjcDAzNyIsIDAsIE5VTEwsCi0gICAgMHgwMDAwLCAweDAwMDEsIDB4MDAwMiwg MHgwMDAzLCAweDAwOUMsIDB4MDAwOSwgMHgwMDg2LCAweDAwN0YsCi0gICAgMHgwMDk3LCAweDAw OEQsIDB4MDA4RSwgMHgwMDBCLCAweDAwMEMsIDB4MDAwRCwgMHgwMDBFLCAweDAwMEYsCi0gICAg MHgwMDEwLCAweDAwMTEsIDB4MDAxMiwgMHgwMDEzLCAweDAwOUQsIDB4MDA4NSwgMHgwMDA4LCAw eDAwODcsCi0gICAgMHgwMDE4LCAweDAwMTksIDB4MDA5MiwgMHgwMDhGLCAweDAwMUMsIDB4MDAx RCwgMHgwMDFFLCAweDAwMUYsCi0gICAgMHgwMDgwLCAweDAwODEsIDB4MDA4MiwgMHgwMDgzLCAw eDAwODQsIDB4MDAwQSwgMHgwMDE3LCAweDAwMUIsCi0gICAgMHgwMDg4LCAweDAwODksIDB4MDA4 QSwgMHgwMDhCLCAweDAwOEMsIDB4MDAwNSwgMHgwMDA2LCAweDAwMDcsCi0gICAgMHgwMDkwLCAw eDAwOTEsIDB4MDAxNiwgMHgwMDkzLCAweDAwOTQsIDB4MDA5NSwgMHgwMDk2LCAweDAwMDQsCi0g ICAgMHgwMDk4LCAweDAwOTksIDB4MDA5QSwgMHgwMDlCLCAweDAwMTQsIDB4MDAxNSwgMHgwMDlF LCAweDAwMUEsCi0gICAgMHgwMDIwLCAweDAwQTAsIDB4MDBFMiwgMHgwMEU0LCAweDAwRTAsIDB4 MDBFMSwgMHgwMEUzLCAweDAwRTUsCi0gICAgMHgwMEU3LCAweDAwRjEsIDB4MDBBMiwgMHgwMDJF LCAweDAwM0MsIDB4MDAyOCwgMHgwMDJCLCAweDAwN0MsCi0gICAgMHgwMDI2LCAweDAwRTksIDB4 MDBFQSwgMHgwMEVCLCAweDAwRTgsIDB4MDBFRCwgMHgwMEVFLCAweDAwRUYsCi0gICAgMHgwMEVD LCAweDAwREYsIDB4MDAyMSwgMHgwMDI0LCAweDAwMkEsIDB4MDAyOSwgMHgwMDNCLCAweDAwQUMs Ci0gICAgMHgwMDJELCAweDAwMkYsIDB4MDBDMiwgMHgwMEM0LCAweDAwQzAsIDB4MDBDMSwgMHgw MEMzLCAweDAwQzUsCi0gICAgMHgwMEM3LCAweDAwRDEsIDB4MDBBNiwgMHgwMDJDLCAweDAwMjUs IDB4MDA1RiwgMHgwMDNFLCAweDAwM0YsCi0gICAgMHgwMEY4LCAweDAwQzksIDB4MDBDQSwgMHgw MENCLCAweDAwQzgsIDB4MDBDRCwgMHgwMENFLCAweDAwQ0YsCi0gICAgMHgwMENDLCAweDAwNjAs IDB4MDAzQSwgMHgwMDIzLCAweDAwNDAsIDB4MDAyNywgMHgwMDNELCAweDAwMjIsCi0gICAgMHgw MEQ4LCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAw NjcsCi0gICAgMHgwMDY4LCAweDAwNjksIDB4MDBBQiwgMHgwMEJCLCAweDAwRjAsIDB4MDBGRCwg MHgwMEZFLCAweDAwQjEsCi0gICAgMHgwMEIwLCAweDAwNkEsIDB4MDA2QiwgMHgwMDZDLCAweDAw NkQsIDB4MDA2RSwgMHgwMDZGLCAweDAwNzAsCi0gICAgMHgwMDcxLCAweDAwNzIsIDB4MDBBQSwg MHgwMEJBLCAweDAwRTYsIDB4MDBCOCwgMHgwMEM2LCAweDAwQTQsCi0gICAgMHgwMEI1LCAweDAw N0UsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LCAweDAwNzgsCi0gICAg MHgwMDc5LCAweDAwN0EsIDB4MDBBMSwgMHgwMEJGLCAweDAwRDAsIDB4MDBERCwgMHgwMERFLCAw eDAwQUUsCi0gICAgMHgwMDVFLCAweDAwQTMsIDB4MDBBNSwgMHgwMEI3LCAweDAwQTksIDB4MDBB NywgMHgwMEI2LCAweDAwQkMsCi0gICAgMHgwMEJELCAweDAwQkUsIDB4MDA1QiwgMHgwMDVELCAw eDAwQUYsIDB4MDBBOCwgMHgwMEI0LCAweDAwRDcsCi0gICAgMHgwMDdCLCAweDAwNDEsIDB4MDA0 MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCi0gICAgMHgwMDQ4LCAw eDAwNDksIDB4MDBBRCwgMHgwMEY0LCAweDAwRjYsIDB4MDBGMiwgMHgwMEYzLCAweDAwRjUsCi0g ICAgMHgwMDdELCAweDAwNEEsIDB4MDA0QiwgMHgwMDRDLCAweDAwNEQsIDB4MDA0RSwgMHgwMDRG LCAweDAwNTAsCi0gICAgMHgwMDUxLCAweDAwNTIsIDB4MDBCOSwgMHgwMEZCLCAweDAwRkMsIDB4 MDBGOSwgMHgwMEZBLCAweDAwRkYsCi0gICAgMHgwMDVDLCAweDAwRjcsIDB4MDA1MywgMHgwMDU0 LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsCi0gICAgMHgwMDU5LCAweDAwNUEsIDB4 MDBCMiwgMHgwMEQ0LCAweDAwRDYsIDB4MDBEMiwgMHgwMEQzLCAweDAwRDUsCi0gICAgMHgwMDMw LCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcs Ci0gICAgMHgwMDM4LCAweDAwMzksIDB4MDBCMywgMHgwMERCLCAweDAwREMsIDB4MDBEOSwgMHgw MERBLCAweDAwOUYKLX07Ci0KLS8qIE90aGVyIHByb3ByaWV0YXJ5IDgtYml0IHNldHMgKi8KLQot c3RydWN0IHhfdG9fdW5pY29kZSB1X2RlY21jcyA9IHsKLSAgICA5NiwgMzIsIFgyVV9ERUN8WDJV X1NURCwgQUxfUk9NQU4sICJERUMgTXVsdGluYXRpb25hbCIsICJkZWMtbWNzIiwgMCwgIiU1IiwK LSAgICAweDAwQTAsIDB4MDBBMSwgMHgwMEEyLCAweDAwQTMsIDB4ZmZmZCwgMHgwMEE1LCAweGZm ZmQsIDB4MDBBNywKLSAgICAweDAwQTQsIDB4MDBBOSwgMHgwMEFBLCAweDAwQUIsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAweDAw QjMsIDB4ZmZmZCwgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywKLSAgICAweGZmZmQsIDB4MDBCOSwg MHgwMEJBLCAweDAwQkIsIDB4MDBCQywgMHgwMEJELCAweGZmZmQsIDB4MDBCRiwKLSAgICAweDAw QzAsIDB4MDBDMSwgMHgwMEMyLCAweDAwQzMsIDB4MDBDNCwgMHgwMEM1LCAweDAwQzYsIDB4MDBD NywKLSAgICAweDAwQzgsIDB4MDBDOSwgMHgwMENBLCAweDAwQ0IsIDB4MDBDQywgMHgwMENELCAw eDAwQ0UsIDB4MDBDRiwKLSAgICAweGZmZmQsIDB4MDBEMSwgMHgwMEQyLCAweDAwRDMsIDB4MDBE NCwgMHgwMEQ1LCAweDAwRDYsIDB4MDE1MiwKLSAgICAweDAwRDgsIDB4MDBEOSwgMHgwMERBLCAw eDAwREIsIDB4MDBEQywgMHgwMERELCAweGZmZmQsIDB4MDBERiwKLSAgICAweDAwRTAsIDB4MDBF MSwgMHgwMEUyLCAweDAwRTMsIDB4MDBFNCwgMHgwMEU1LCAweDAwRTYsIDB4MDBFNywKLSAgICAw eDAwRTgsIDB4MDBFOSwgMHgwMEVBLCAweDAwRUIsIDB4MDBFQywgMHgwMEVELCAweDAwRUUsIDB4 MDBFRiwKLSAgICAweGZmZmQsIDB4MDBGMSwgMHgwMEYyLCAweDAwRjMsIDB4MDBGNCwgMHgwMEY1 LCAweDAwRjYsIDB4MDE1MywKLSAgICAweDAwRjgsIDB4MDBGOSwgMHgwMEZBLCAweDAwRkIsIDB4 MDBGQywgMHgwMEZELCAweGZmZmQsIDB4MDBGRgotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1 X2hwcm9tYW44ID0gewotICAgIDk2LCAzMiwgWDJVX1NURCwgQUxfUk9NQU4sICJIZXdsZXR0IFBh Y2thcmQgUm9tYW4gOCIsICJocC1yb21hbjgiLCAwLCBOVUxMLAotICAgIDB4MDBhMCwgMHgwMGMw LCAweDAwYzIsIDB4MDBjOCwgMHgwMGNhLCAweDAwY2IsIDB4MDBjZSwgMHgwMGNmLAotICAgIDB4 MDBiNCwgMHgwMGE2LCAweDAwYTksIDB4MDBhOCwgMHgwMGFjLCAweDAwZDksIDB4MDBkYiwgMHgy MGE0LAotICAgIDB4MDBhZiwgMHgwMGRkLCAweDAwZmQsIDB4MDBiMCwgMHgwMGM3LCAweDAwZTcs IDB4MDBkMSwgMHgwMGYxLAotICAgIDB4MDBhMSwgMHgwMGJmLCAweDAwYTQsIDB4MDBhMywgMHgw MGE1LCAweDAwYTcsIDB4MDE5MiwgMHgwMGEyLAotICAgIDB4MDBlMiwgMHgwMGVhLCAweDAwZjQs IDB4MDBmYiwgMHgwMGUxLCAweDAwZTksIDB4MDBmMywgMHgwMGZhLAotICAgIDB4MDBlMCwgMHgw MGU4LCAweDAwZjIsIDB4MDBmOSwgMHgwMGU0LCAweDAwZWIsIDB4MDBmNiwgMHgwMGZjLAotICAg IDB4MDBjNSwgMHgwMGVlLCAweDAwZDgsIDB4MDBjNiwgMHgwMGU1LCAweDAwZWQsIDB4MDBmOCwg MHgwMGU2LAotICAgIDB4MDBjNCwgMHgwMGVjLCAweDAwZDYsIDB4MDBkYywgMHgwMGM5LCAweDAw ZWYsIDB4MDBkZiwgMHgwMGQ0LAotICAgIDB4MDBjMSwgMHgwMGMzLCAweDAwZTMsIDB4MDBkMCwg MHgwMGYwLCAweDAwY2QsIDB4MDBjYywgMHgwMGQzLAotICAgIDB4MDBkMiwgMHgwMGQ1LCAweDAw ZjUsIDB4MDE2MCwgMHgwMTYxLCAweDAwZGEsIDB4MDBiOCwgMHgwMGZmLAotICAgIDB4MDBkZSwg MHgwMGZlLCAweDAwYjcsIDB4MDBiNSwgMHgwMGI2LCAweDAwYmUsIDB4MjAxNSwgMHgwMGJjLAot ICAgIDB4MDBiZCwgMHgwMGFhLCAweDAwYmEsIDB4MDBhYiwgMHgyNTg4LCAweDAwYmIsIDB4MDBi MSwgMHhmZmZkCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfZGdpID0gewotIDk2LDMyLFgy VV9TVEQsQUxfUk9NQU4sIkRhdGEgR2VuZXJhbCBJbnRlcm5hdGlvbmFsIiwiZGctaW50ZXJuYXRp b25hbCIsMCxOVUxMLAotICAgIDB4MDBhMCwgMHgwMGFjLCAweDAwYmQsIDB4MDBiNSwgMHgwMGIy LCAweDAwYjMsIDB4MDBhNCwgMHgwMGEyLAotICAgIDB4MDBhMywgMHgwMGFhLCAweDAwYmEsIDB4 MDBhMSwgMHgwMGJmLCAweDAwYTksIDB4MDBhZSwgMHgyMDIxLAotICAgIDB4MDBiYiwgMHgwMGFi LCAweDAwYjYsIDB4MjEyMiwgMHgwMTkyLCAweDAwYTUsIDB4MDBiMSwgMHgyMjY0LAotICAgIDB4 MjI2NSwgMHgwMGI3LCAweDAwYjgsIDB4MDBhNywgMHgwMGIwLCAweDAwYTgsIDB4MDBiNCwgMHgy MTkxLAotICAgIDB4MDBjMSwgMHgwMGMwLCAweDAwYzIsIDB4MDBjNCwgMHgwMGMzLCAweDAwYzUs IDB4MDBjNiwgMHgwMGM3LAotICAgIDB4MDBjOSwgMHgwMGM4LCAweDAwY2EsIDB4MDBjYiwgMHgw MGNkLCAweDAwY2MsIDB4MDBjZSwgMHgwMGNmLAotICAgIDB4MDBkMSwgMHgwMGQzLCAweDAwZDIs IDB4MDBkNCwgMHgwMGQ2LCAweDAwZDUsIDB4MDBkOCwgMHgwMjc2LAotICAgIDB4MDBkYSwgMHgw MGQ5LCAweDAwZGIsIDB4MDBkYywgMHhmZmZkLCAweDAxNzgsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4MDBlMSwgMHgwMGUwLCAweDAwZTIsIDB4MDBlNCwgMHgwMGUzLCAweDAwZTUsIDB4MDBlNiwg MHgwMGU3LAotICAgIDB4MDBlOSwgMHgwMGU4LCAweDAwZWEsIDB4MDBlYiwgMHgwMGVkLCAweDAw ZWMsIDB4MDBlZSwgMHgwMGVmLAotICAgIDB4MDBmMSwgMHgwMGYzLCAweDAwZjIsIDB4MDBmNCwg MHgwMGY2LCAweDAwZjUsIDB4MDBmOCwgMHgwMTUzLAotICAgIDB4MDBmYSwgMHgwMGY5LCAweDAw ZmIsIDB4MDBmYywgMHgwMGRmLCAweDAwZmYsIDB4ZmZmZCwgMHgyNTg4Ci19OwotCi1zdHJ1Y3Qg eF90b191bmljb2RlIHVfbmV4dHN0ZXAgPSB7Ci0gICAgMTI4LCAwLCAwLCBBTF9ST01BTiwiTmVY VFNURVAgTXVsdGluYXRpb25hbCIsIm5leHQtbXVsdGluYXRpb25hbCIsMCxOVUxMLAotICAgIDB4 MDBhMCwgMHgwMGMwLCAweDAwYzEsIDB4MDBjMiwgMHgwMGMzLCAweDAwYzQsIDB4MDBjNSwgMHgw MGM3LAotICAgIDB4MDBjOCwgMHgwMGM5LCAweDAwY2EsIDB4MDBjYiwgMHgwMGNjLCAweDAwY2Qs IDB4MDBjZSwgMHgwMGNmLAotICAgIDB4MDBkMCwgMHgwMGQxLCAweDAwZDIsIDB4MDBkMywgMHgw MGQ0LCAweDAwZDUsIDB4MDBkNiwgMHgwMGQ5LAotICAgIDB4MDBkYSwgMHgwMGRiLCAweDAwZGMs IDB4MDBkZCwgMHgwMGRlLCAweDAwYjUsIDB4MDBkNywgMHgwMGY3LAotICAgIDB4MDBhOSwgMHgw MGExLCAweDAwYTIsIDB4MDBhMywgMHgyMDQ0LCAweDAwYTUsIDB4MDE5MiwgMHgwMGE3LAotICAg IDB4MDBhNCwgMHgyMDE5LCAweDIwMWMsIDB4MDBhYiwgMHgyMDM5LCAweDIwM2EsIDB4ZmIwMSwg MHhmYjAyLAotICAgIDB4MDBhZSwgMHgyMDEzLCAweDIwMjAsIDB4MjAyMSwgMHgwMGI3LCAweDAw YTYsIDB4MDBiNiwgMHgyMDIyLAotICAgIDB4MjAxYSwgMHgyMDFlLCAweDIwMWQsIDB4MDBiYiwg MHgyMDI2LCAweDIwMzAsIDB4MDBhYywgMHgwMGJmLAotICAgIDB4MDBiOSwgMHgwMmNiLCAweDAw YjQsIDB4MDJjNiwgMHgwMmRjLCAweDAwYWYsIDB4MDJkOCwgMHgwMmQ5LAotICAgIDB4MDBhOCwg MHgwMGIyLCAweDAyZGEsIDB4MDBiOCwgMHgwMGIzLCAweDAyZGQsIDB4MDJkYiwgMHgwMmM3LAot ICAgIDB4MjAxNCwgMHgwMGIxLCAweDAwYmMsIDB4MDBiZCwgMHgwMGJlLCAweDAwZTAsIDB4MDBl MSwgMHgwMGUyLAotICAgIDB4MDBlMywgMHgwMGU0LCAweDAwZTUsIDB4MDBlNywgMHgwMGU4LCAw eDAwZTksIDB4MDBlYSwgMHgwMGViLAotICAgIDB4MDBlYywgMHgwMGM2LCAweDAwZWQsIDB4MDBh YSwgMHgwMGVlLCAweDAwZWYsIDB4MDBmMCwgMHgwMGYxLAotICAgIDB4MDE0MSwgMHgwMGQ4LCAw eDAxNTIsIDB4MDBiYSwgMHgwMGYyLCAweDAwZjMsIDB4MDBmNCwgMHgwMGY1LAotICAgIDB4MDBm NiwgMHgwMGU2LCAweDAwZjksIDB4MDBmYSwgMHgwMGZiLCAweDAxMzEsIDB4MDBmYywgMHgwMGZk LAotICAgIDB4MDE0MiwgMHgwMGY4LCAweDAxNTMsIDB4MDBkZiwgMHgwMGZlLCAweDAwZmYsIDB4 ZmZmZCwgMHhmZmZkCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfbWFjbGF0aW4gPSB7Ci0g ICAgMTI4LCAwLCAwLCBBTF9ST01BTiwiTWFjaW50b3NoIExhdGluIiwibWFjbGF0aW4iLCAwLCBO VUxMLAotICAgIDB4MDBDNCwgMHgwMEM1LCAweDAwQzcsIDB4MDBDOSwgMHgwMEQxLCAweDAwRDYs IDB4MDBEQywgMHgwMEUxLAotICAgIDB4MDBFMCwgMHgwMEUyLCAweDAwRTQsIDB4MDBFMywgMHgw MEU1LCAweDAwRTcsIDB4MDBFOSwgMHgwMEU4LAotICAgIDB4MDBFQSwgMHgwMEVCLCAweDAwRUQs IDB4MDBFQywgMHgwMEVFLCAweDAwRUYsIDB4MDBGMSwgMHgwMEYzLAotICAgIDB4MDBGMiwgMHgw MEY0LCAweDAwRjYsIDB4MDBGNSwgMHgwMEZBLCAweDAwRjksIDB4MDBGQiwgMHgwMEZDLAotICAg IDB4MDBERCwgMHgwMEIwLCAweDAwQTIsIDB4MDBBMywgMHgwMEE3LCAweDIwMjIsIDB4MDBCNiwg MHgwMERGLAotICAgIDB4MDBBRSwgMHgwMEE5LCAweDIxMjIsIDB4MDBCNCwgMHgwMEE4LCAweDIy NjAsIDB4MDBDNiwgMHgwMEQ4LAotICAgIDB4MjIxRSwgMHgwMEIxLCAweDIyNjQsIDB4MjI2NSwg MHgwMEE1LCAweDAwQjUsIDB4MjIwMiwgMHgyMjExLAotICAgIDB4MjIwRiwgMHgwM0MwLCAweDIy MkIsIDB4MDBBQSwgMHgwMEJBLCAweDIxMjYsIDB4MDBFNiwgMHgwMEY4LAotICAgIDB4MDBCRiwg MHgwMEExLCAweDAwQUMsIDB4MjIxQSwgMHgwMTkyLCAweDIyNDgsIDB4MjIwNiwgMHgwMEFCLAot ICAgIDB4MDBCQiwgMHgyMDI2LCAweDAwQTAsIDB4MDBDMCwgMHgwMEMzLCAweDAwRDUsIDB4MDE1 MiwgMHgwMTUzLAotICAgIDB4MjAxMywgMHgyMDE0LCAweDIwMUMsIDB4MjAxRCwgMHgyMDE4LCAw eDIwMTksIDB4MDBGNywgMHgyNUNBLAotICAgIDB4MDBGRiwgMHgwMTc4LCAweDIwNDQsIDB4MDBB NCwgMHgwMEQwLCAweDAwRjAsIDB4MDBERSwgMHgwMEZFLAotICAgIDB4MDBGRCwgMHgwMEI3LCAw eDIwMUEsIDB4MjAxRSwgMHgyMDMwLCAweDAwQzIsIDB4MDBDQSwgMHgwMEMxLAotICAgIDB4MDBD QiwgMHgwMEM4LCAweDAwQ0QsIDB4MDBDRSwgMHgwMENGLCAweDAwQ0MsIDB4MDBEMywgMHgwMEQ0 LAotICAgIDB4RjhGRiwgMHgwMEQyLCAweDAwREEsIDB4MDBEQiwgMHgwMEQ5LCAweDAxMzEsIDB4 MDJDNiwgMHgwMkRDLAotICAgIDB4MDBBRiwgMHgwMkQ4LCAweDAyRDksIDB4MDJEQSwgMHgwMEI4 LCAweDAyREQsIDB4MDJEQiwgMHgwMkM3Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfcXVp Y2tkcmF3ID0gewotICAgIDEyOCwgMCwgMCwgQUxfUk9NQU4sIlF1aWNrRHJhdyIsInF1aWNrZHJh dyIsIDAsIE5VTEwsCi0gICAgMHgwMEM0LCAweDAwQzUsIDB4MDBDNywgMHgwMEM5LCAweDAwRDEs IDB4MDBENiwgMHgwMERDLCAweDAwRTEsCi0gICAgMHgwMEUwLCAweDAwRTIsIDB4MDBFNCwgMHgw MEUzLCAweDAwRTUsIDB4MDBFNywgMHgwMEU5LCAweDAwRTgsCi0gICAgMHgwMEVBLCAweDAwRUIs IDB4MDBFRCwgMHgwMEVDLCAweDAwRUUsIDB4MDBFRiwgMHgwMEYxLCAweDAwRjMsCi0gICAgMHgw MEYyLCAweDAwRjQsIDB4MDBGNiwgMHgwMEY1LCAweDAwRkEsIDB4MDBGOSwgMHgwMEZCLCAweDAw RkMsCi0gICAgMHgyMDIwLCAweDAwQjAsIDB4MDBBMiwgMHgwMEEzLCAweDAwQTcsIDB4MjAyMiwg MHgwMEI2LCAweDAwREYsCi0gICAgMHgwMEFFLCAweDAwQTksIDB4MjEyMiwgMHgwMEI0LCAweDAw QTgsIDB4MjI2MCwgMHgwMEM2LCAweDAwRDgsCi0gICAgMHgyMjFFLCAweDAwQjEsIDB4MjI2NCwg MHgyMjY1LCAweDAwQTUsIDB4MDBCNSwgMHgyMjAyLCAweDIyMTEsCi0gICAgMHgyMjBGLCAweDAz QzAsIDB4MjIyQiwgMHgwMEFBLCAweDAwQkEsIDB4MDNBOSwgMHgwMEU2LCAweDAwRjgsCi0gICAg MHgwMEJGLCAweDAwQTEsIDB4MDBBQywgMHgyMjFBLCAweDAxOTIsIDB4MjI0OCwgMHgyMjA2LCAw eDAwQUIsCi0gICAgMHgwMEJCLCAweDIwMjYsIDB4MDBBMCwgMHgwMEMwLCAweDAwQzMsIDB4MDBE NSwgMHgwMTUyLCAweDAxNTMsCi0gICAgMHgyMDEzLCAweDIwMTQsIDB4MjAxQywgMHgyMDFELCAw eDIwMTgsIDB4MjAxOSwgMHgwMEY3LCAweDI1Q0EsCi0gICAgMHgwMEZGLCAweDAxNzgsIDB4MjA0 NCwgMHgwMEE0LCAweDIwMzksIDB4MjAzQSwgMHhGQjAxLCAweEZCMDIsCi0gICAgMHgyMDIxLCAw eDAwQjcsIDB4MjAxQSwgMHgyMDFFLCAweDIwMzAsIDB4MDBDMiwgMHgwMENBLCAweDAwQzEsCi0g ICAgMHgwMENCLCAweDAwQzgsIDB4MDBDRCwgMHgwMENFLCAweDAwQ0YsIDB4MDBDQywgMHgwMEQz LCAweDAwRDQsCi0gICAgMHhGOEZGLCAweDAwRDIsIDB4MDBEQSwgMHgwMERCLCAweDAwRDksIDB4 MDEzMSwgMHgwMkM2LCAweDAyREMsCi0gICAgMHgwMEFGLCAweDAyRDgsIDB4MDJEOSwgMHgwMkRB LCAweDAwQjgsIDB4MDJERCwgMHgwMkRCLCAweDAyQzcKLX07Ci0KLS8qIERFQyBzcGVjaWFsIGdy YXBoaWNzIC8gdGVjaG5pY2FsIHNldHMgZm9yIFZUIGVtdWxhdGlvbiAqLwotCi0jaWZkZWYgS0VS TUlURk9OVAotc3RydWN0IHhfdG9fdW5pY29kZSB1X2RlY3RlY2ggPSB7Ci0gICAgOTQsIDMzLCBY MlVfREVDfFgyVV9TVEQsQUxfUk9NQU4sIkRFQyBUZWNobmljYWwiLCAiZGVjLXRlY2huaWNhbCIs IDAsICI+IiwKLSAgICAgICAgICAgIDB4RTQwMCwgMHgyNTBjLCAweDI1MDAsIDB4MjMyMCwgMHgy MzIxLCAweDI1MDIsIDB4RTIwNCwKLSAgICAweEUyMDMsIDB4RTIwOSwgMHhFMjA4LCAweEUyMDIs IDB4RTIwMSwgMHhFMjA3LCAweEUyMDYsIDB4RTIwMCwKLSAgICAweEUyMDUsIDB4RTIwRCwgMHhF MjBDLCAweDI1NzIsIDB4MjU3MSwgMHhFMjBFLCAweEUyMEYsIDB4MjMyYSwKLSAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4MjI2NCwgMHgyMjYwLCAweDIyNjUsIDB4MjIyYiwK LSAgICAweDIyMzQsIDB4MjIxZCwgMHgyMjFlLCAweDAwZjcsIDB4MjIwNiwgMHgyMjA3LCAweDAz YTYsIDB4MDM5MywKLSAgICAweDIyM2MsIDB4MjI0MywgMHgwMzk4LCAweDAwZDcsIDB4MDM5Yiwg MHgyMWQ0LCAweDIxZDIsIDB4MjI2MSwKLSAgICAweDIyMGYsIDB4MDNhOCwgMHhFNDAxLCAweDAz YTMsIDB4RkZGRCwgMHhmZmZkLCAweDIyMWEsIDB4MDNhOSwKLSAgICAweDAzOWUsIDB4MDNkMiwg MHgyMjgyLCAweDIyODMsIDB4MjIyOSwgMHgyMjJhLCAweDIyMjcsIDB4MjIyOCwKLSAgICAweDAw YWMsIDB4MDNiMSwgMHgwM2IyLCAweDAzYzcsIDB4MDNiNCwgMHgwM2I1LCAweDAzYzYsIDB4MDNi MywKLSAgICAweDAzYjcsIDB4MDNiOSwgMHgwM2I4LCAweDAzYmEsIDB4MDNiYiwgMHhGRkZELCAw eDAzYmQsIDB4MjIwMiwKLSAgICAweDAzYzAsIDB4MDNjOCwgMHgwM2MxLCAweDAzYzMsIDB4MDNj NCwgMHhGRkZELCAweDAxOTIsIDB4MDNjOSwKLSAgICAweDAzYmUsIDB4MDNjNSwgMHgwM2I2LCAw eDIxOTAsIDB4MjE5MSwgMHgyMTkyLCAweDIxOTMKLX07Ci0jZWxzZQotc3RydWN0IHhfdG9fdW5p Y29kZSB1X2RlY3RlY2ggPSB7Ci0gICAgOTQsIDMzLCBYMlVfREVDfFgyVV9TVEQsQUxfUk9NQU4s IkRFQyBUZWNobmljYWwiLCAiZGVjLXRlY2huaWNhbCIsIDAsICI+IiwKLSAgICAgICAgICAgIDB4 MjIxYSwgMHgyNTBjLCAweDI1MDAsIDB4MjMyMCwgMHgyMzIxLCAweDI1MDIsIDB4MjMwOCwgLyog MjEtMjcgKi8KLSAgICAweDIzMGEsIDB4MjMwOSwgMHgyMzBiLCAweDI1NmQsIDB4MjU3MCwgMHgy NTZlLCAweDI1NmYsIDB4MjUyNSwgLyogMjgtMmYgKi8KLSAgICAweDI1MWQsIDB4MjIxMSwgMHgy MjExLCAweDI1NzIsIDB4MjU3MSwgMHgyMzFkLCAweDIzMWYsIDB4MjMyYSwgLyogMzAtMzcgKi8K LSAgICAweDAwNWIsIDB4MjAyMiwgMHgwMDVkLCAweDAwYjEsIDB4MjI2NCwgMHgyMjYwLCAweDIy NjUsIDB4MjIyYiwgLyogMzgtM2YgKi8KLSAgICAweDIyMzQsIDB4MjIxZCwgMHgyMjFlLCAweDAw ZjcsIDB4MjViMywgMHgyNWJkLCAweDAzYTYsIDB4MDM5MywgLyogNDAtNDcgKi8KLSAgICAweDIy M2MsIDB4MjI0MywgMHgwMzk4LCAweDAwZDcsIDB4MDM5YiwgMHgyMWQ0LCAweDIxZDIsIDB4MjI2 MSwgLyogNDgtNGYgKi8KLSAgICAweDIyMGYsIDB4MDNhOCwgMHgyMjE4LCAweDIyMTEsIDB4MDBh NywgMHgwMGI2LCAweDIyMWEsIDB4MDNhOSwgLyogNTAtNTcgKi8KLSAgICAweDAzOWUsIDB4MDNk MiwgMHgyMjgyLCAweDIyODMsIDB4MjIyOSwgMHgyMjJhLCAweDIyMjcsIDB4MjIyOCwgLyogNTgt NWYgKi8KLSAgICAweDAwYWMsIDB4MDNiMSwgMHgwM2IyLCAweDAzYzcsIDB4MDNiNCwgMHgwM2I1 LCAweDAzYzYsIDB4MDNiMywgLyogNjAtNjcgKi8KLSAgICAweDAzYjcsIDB4MDNiOSwgMHgwM2I4 LCAweDAzYmEsIDB4MDNiYiwgMHgwM2JjLCAweDAzYmQsIDB4MjIwMiwgLyogNjgtNmYgKi8KLSAg ICAweDAzYzAsIDB4MDNjOCwgMHgwM2MxLCAweDAzYzMsIDB4MDNjNCwgMHgwMDIwLCAweDAxOTIs IDB4MDNjOSwgLyogNzAtNzcgKi8KLSAgICAweDAzYmUsIDB4MDNjNSwgMHgwM2I2LCAweDIxOTAs IDB4MjE5MSwgMHgyMTkyLCAweDIxOTMgICAgICAgICAgLyogNzgtN2UgKi8KLX07Ci0jZW5kaWYg LyogS0VSTUlURk9OVCAqLwotCi0jaWZkZWYgS0VSTUlURk9OVAotc3RydWN0IHhfdG9fdW5pY29k ZSB1X2RlY3NwZWMgPSB7Ci0gICAgOTQsMzMsWDJVX0RFQ3xYMlVfU1RELEFMX1JPTUFOLCJERUMg U3BlY2lhbCBHcmFwaGljcyIsImRlYy1zcGVjaWFsIiwwLCIwIiwKLSAgICAgICAgICAgIDB4MDAy MSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKLSAgICAw eDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4 MDAyZiwKLSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1 LCAweDAwMzYsIDB4MDAzNywKLSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4 MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKLSAgICAweDAwNDAsIDB4MDA0MSwgMHgwMDQy LCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKLSAgICAweDAwNDgsIDB4 MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKLSAg ICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYs IDB4MDA1NywKLSAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwNWIsIDB4MDA1YywgMHgw MDVkLCAweDAwNWUsIDB4MDA1ZiwKLSAgICAweDI2NjYsIDB4MjU5MSwgMHgyNDA5LCAweDI0MGMs IDB4MjQwZCwgMHgyNDBhLCAweDAwYjAsIDB4MDBiMSwKLSAgICAweDI0MjQsIDB4MjQwYiwgMHgy NTE4LCAweDI1MTAsIDB4MjUwYywgMHgyNTE0LCAweDI1M2MsIDB4MjNCQSwKLSAgICAweDIzQkIs IDB4MjUwMCwgMHgyM0JDLCAweDIzQkQsIDB4MjUxYywgMHgyNTI0LCAweDI1MzQsIDB4MjUyYywK LSAgICAweDI1MDIsIDB4MjI2NCwgMHgyMjY1LCAweDAzYzAsIDB4MjI2MCwgMHgwMGEzLCAweDAw QjcKLX07Ci0jZWxzZQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2RlY3NwZWMgPSB7Ci0gICAgOTQs MzMsWDJVX0RFQ3xYMlVfU1RELEFMX1JPTUFOLCJERUMgU3BlY2lhbCBHcmFwaGljcyIsImRlYy1z cGVjaWFsIiwwLCIwIiwKLSAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAy NCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKLSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAw eDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKLSAgICAweDAwMzAsIDB4MDAz MSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKLSAgICAw eDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4 MDAzZiwKLSAgICAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1 LCAweDAwNDYsIDB4MDA0NywKLSAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4 MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKLSAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUy LCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKLSAgICAweDAwNTgsIDB4 MDA1OSwgMHgwMDVhLCAweDAwNWIsIDB4MDA1YywgMHgwMDVkLCAweDAwNWUsIDB4MDA1ZiwKLSAg ICAweDI2NjYsIDB4MjU5MSwgMHgyNDA5LCAweDI0MGMsIDB4MjQwZCwgMHgyNDBhLCAweDAwYjAs IDB4MDBiMSwKLSAgICAweDI0MjQsIDB4MjQwYiwgMHgyNTE4LCAweDI1MTAsIDB4MjUwYywgMHgy NTE0LCAweDI1M2MsIDB4MjU5NCwKLSAgICAweDI1MDAsIDB4MjUwMCwgMHgyNTAwLCAweDI1MDAs IDB4MjUxYywgMHgyNTI0LCAweDI1MzQsIDB4MjUyYywKLSAgICAweDI1MDIsIDB4MjI2NCwgMHgy MjY1LCAweDAzYTAsIDB4MjI2MCwgMHgwMGEzLCAweDAwQjcKLX07Ci0jZW5kaWYgLyogS0VSTUlU Rk9OVCAqLwotCi0vKgotICBIYXplbHRpbmUgMTUwMC8xNTIwIGdyYXBoaWMgc2V0LiAgSW5jbHVk ZXMgc2V2ZXJhbCBhcHByb3hpbWF0aW9uczoKLSAgIC4gKDAsOSkgc2hvdWxkIGJlIGhlYXZ5IGJs YWNrIHJpZ2h0IGFycm93LiAgVW5pY29kZSBoYXMgb25lIG9mIHRoZXNlCi0gICAgIGF0IFUrMjdB MSBidXQuLi4KLSAgIC4gKDMsOSkgc2hvdWxkIGJlIGhlYXZ5IGJsYWNrIGRvd24gYXJyb3c7IFVu aWNvZGUgZG9lc24ndCBoYXZlIG9uZS4KLSAgICAgU28gd2UgdXNlIHRoZSB3aGl0ZSB2ZXJzaW9u cyBvZiB0aGUgaGVhdnkgYXJyb3dzIGluc3RlYWQuCi0gICAuICgxLDkpIHRoZSBsZXR0ZXJzICJQ ZSIgaW4gb25lIGNlbGwsIGRvZXNuJ3QgZXhpc3QgaW4gVW5pY29kZS4KLSAgICAgU3Vic3RpdHV0 aW9uIGlzIGp1c3QgIlAiLgotKi8KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9oejE1MDAgPSB7Ci0g ICAgOTQsMzMsWDJVX1NURCxBTF9ST01BTiwiSGF6ZWx0aW1lIEdyYXBoaWNzIiwiaHoxNTAwLWdy YXBoaWNzIiwwLCIwIiwKLS8qICAgICAwICAgICAgIDEgICAgICAgMiAgICAgICAzICAgICAgIDQg ICAgICAgNSAgICAgICA2ICAgICAgIDcgICAgICAgICAqLwotICAgICAgICAgICAgMHgwMDIxLCAw eDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LCAvKiAwICovCi0g ICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJl LCAweDAwMmYsIC8qIDEgKi8KLSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4 MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgLyogMiAqLwotICAgIDB4MDAzOCwgMHgwMDM5 LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLCAvKiAzICov Ci0gICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgw MDQ2LCAweDAwNDcsIC8qIDQgKi8KLSAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIs IDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwgLyogNSAqLwotICAgIDB4MDA1MCwgMHgw MDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAvKiA2 ICovCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMDViLCAweDAwNWMsIDB4MDA1ZCwg MHgwMDVlLCAweDAwNWYsIC8qIDcgKi8KLSAgICAweDI1MDAsIDB4MjUwMiwgMHgyNTNjLCAweDI1 MzQsIDB4MjUyYywgMHgyNTE0LCAweDI1MGMsIDB4MDBiMSwgLyogOCAqLwotICAgIDB4MjFlOCwg MHgwMDUwLCAweDAwZjcsIDB4MjFlOSwgMHgyNTEwLCAweDI1MTgsIDB4MjUxYywgMHgyNTI0LCAv KiA5ICovCi0gICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgyNTBjLCAweDAwNzQsIDB4MDA3 NSwgMHgwMDc2LCAweDAwNzcsIC8qIGEgKi8KLSAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAw eDAwN2IsIDB4MDA3YywgMHgwMDdkLCAweDAwN2UgICAgICAgICAgLyogYiAqLwotCi19OwotCi0j aWZkZWYgS0VSTUlURk9OVAotc3RydWN0IHhfdG9fdW5pY29kZSB1X2hlYXRoMTlnID0gewotICAg IDk0LDMzLFgyVV9TVEQsQUxfUk9NQU4sIkhlYXRoLTE5IFNwZWNpYWwgR3JhcGhpY3MiLCJoMTkt c3BlY2lhbCIsMCxOVUxMLAotICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgw MDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAotICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEs IDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAotICAgIDB4MDAzMCwgMHgw MDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAotICAg IDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwg MHgwMDNmLAotICAgIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAw NDUsIDB4MDA0NiwgMHgwMDQ3LAotICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0Yiwg MHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAotICAgIDB4MDA1MCwgMHgwMDUxLCAweDAw NTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAotICAgIDB4MDA1OCwg MHgwMDU5LCAweDAwNWEsIDB4MDA1YiwgMHgwMDVjLCAweDAwNWQsIDB4MjVjZiwgMHhlMzBiLAot ICAgIDB4MjUwMiwgMHgyNTAwLCAweDI1M2MsIDB4MjUxMCwgMHgyNTE4LCAweDI1MTQsIDB4MjUw YywgMHgwMGIxLAotICAgIDB4MjE5MiwgMHgyNTkyLCAweDAwZjcsIDB4MjE5MywgMHhlMzIxLCAw eGUzMjAsIDB4ZTMyMiwgMHhlMzI4LAotICAgIDB4MjU4MCwgMHhlMzI1LCAweGUzMGEsIDB4MjUy YywgMHgyNTI0LCAweDI1MzQsIDB4MjUxYywgMHgyNTczLAotICAgIDB4MjU3MSwgMHgyNTcyLCAw eGUzMTEsIDB4ZTMxOSwgMHhlMzAwLCAweGUzMDksIDB4MDBiNgotfTsKLSNlbHNlCi1zdHJ1Y3Qg eF90b191bmljb2RlIHVfaGVhdGgxOWcgPSB7Ci0gICAgOTQsMzMsWDJVX1NURCxBTF9ST01BTiwi SGVhdGgtMTkgU3BlY2lhbCBHcmFwaGljcyIsImgxOS1zcGVjaWFsIiwwLE5VTEwsCi0gICAgICAg ICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAw MjcsCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwg MHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAw MzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwg MHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0gICAgMHgwMDQwLCAweDAw NDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCi0gICAg MHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAw eDAwNGYsCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1 NSwgMHgwMDU2LCAweDAwNTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMDViLCAw eDAwNWMsIDB4MDA1ZCwgMHgyNWNmLCAweDI1ZTUsCi0gICAgMHgyNTAyLCAweDI1MDAsIDB4MjUz YywgMHgyNTEwLCAweDI1MTgsIDB4MjUxNCwgMHgyNTBjLCAweDAwYjEsCi0gICAgMHgyMTkyLCAw eDI1OTIsIDB4MDBmNywgMHgyMTkzLCAweDI1OTAsIDB4MjU4YywgMHgyNThjLCAweDI1OTAsCi0g ICAgMHgyNTgwLCAweDI1OTAsIDB4MjVlNCwgMHgyNTJjLCAweDI1MjQsIDB4MjUzNCwgMHgyNTFj LCAweDI1NzMsCi0gICAgMHgyNTcxLCAweDI1NzIsIDB4MjUwMCwgMHgyNTAwLCAweDI1MDIsIDB4 MjUwMiwgMHgwMGI2Ci19OwotI2VuZGlmIC8qIEtFUk1JVEZPTlQgKi8KLQotLyogREcgR3JhcGhp YyBzZXRzIC0gIktFUk1JVEZPTlQiIHRoZXNlIGxhdGVyLi4uICovCi0KLS8qIE1pc3NpbmcsICAg IGJhY2t3YXJkcyBxdWVzdGlvbiBtYXJrCi0gICBlaWdodGggbm90ZQotICAgIkRUIiBjb250cm9s IHBpYwotICAgaG9yaXpvbnRhbCBzY2FuIGxpbmVzCi0qLwotc3RydWN0IHhfdG9fdW5pY29kZSB1 X2Rnc3BlYyA9IHsgICAgICAgIC8qIE5lZWRzIHRvIGJlIGNoZWNrZWQgKi8KLSAgICA5NCwgMzMs IFgyVV9TVEQsQUxfUk9NQU4sIkRHIFNwZWNpYWwgR3JhcGhpY3MiLCJkZy1zcGVjaWFsZ3JhcGhp Y3MiLDAsTlVMTCwKLSAgICAgICAgICAgIDB4ZmZmZCwgMHhmZmZkLCAweDI0MjQsIDB4MjU5NCwg MHgyNTk0LCAweDI1ODEsIDB4MjU4MSwKLSAgICAweDI1YTEsIDB4MjYzYSwgMHgyNjNiLCAweDI2 NjUsIDB4MjY2MywgMHgyNjYwLCAweDI1Y2YsIDB4MjVkOCwKLSAgICAweDI1Y2IsIDB4MjVkOSwg MHgyNjQyLCAweDI2NDAsIDB4MjY2YSwgMHgyNjZjLCAweDI2M2MsIDB4MjE5NSwKLSAgICAweDI1 ODMsIDB4MjFhOCwgMHgyMzFlLCAweDIxOTQsIDB4MjIwNywgMHgwMGZmLCAweDIwYTcsIDB4MDBh YSwKLSAgICAweDAwYmEsIDB4MjMxYywgMHgyMzFkLCAweDI1OTEsIDB4MjU5MSwgMHgyNTkzLCAw eDI1NjEsIDB4MjU2MiwKLSAgICAweDI1NTYsIDB4MjU1NSwgMHgyNTYzLCAweDI1NTEsIDB4MjU1 NywgMHgyNTVkLCAweDI1NWMsIDB4MjU1YiwKLSAgICAweDI1NWUsIDB4MjU1ZiwgMHgyNTVhLCAw eDI1NTQsIDB4MjU2OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1MCwKLSAgICAweDI1NmMsIDB4MjU2 NywgMHgyNTY4LCAweDI1NjQsIDB4MjU2NSwgMHgyNTU5LCAweDI1NTgsIDB4MjU1MiwKLSAgICAw eDI1NTMsIDB4MjU2YiwgMHgyNTZhLCAweDI1ODgsIDB4MjU4NCwgMHgyNThjLCAweDI1OTAsIDB4 MjU4MCwKLSAgICAweDAzOTMsIDB4MDNjMCwgMHgwM2EzLCAweDAzYTYsIDB4MDM5OCwgMHgwM2Q1 LCAweDAzYjUsIDB4MDNhMCwKLSAgICAweDAzOWUsIDB4MDBiNywgMHgwM2I3LCAweDI1YTAsIDB4 MDE3OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQKLX07Ci0KLS8qIE1pc3Npbmc6IGFycm93 LXRvLWxpbmUsIHZhcmlvdXMgb3JpZW50YXRpb25zICovCi0KLXN0cnVjdCB4X3RvX3VuaWNvZGUg dV9kZ2xpbmUgPSB7Ci0gICAgOTQsIDMzLCBYMlVfU1RELEFMX1JPTUFOLCJERyBMaW5lIERyYXdp bmciLCJkZy1saW5lZHJhd2luZyIsMCxOVUxMLAotICAgICAgICAgICAgMHgyNTBjLCAweDI1MTAs IDB4MjUxNCwgMHgyNTE4LCAweDI1MmMsIDB4MjUyNCwgMHgyNTFjLAotICAgIDB4MjUzNCwgMHgy NTNjLCAweDI1MDIsIDB4MjUwMCwgMHgyMTlmLCAweDIxZTUsIDB4MjFlNCwgMHgyMWExLAotICAg IDB4MjUwNiwgMHgyNTBmLCAweDI1MTMsIDB4MjUxNywgMHgyNTFiLCAweDI1MzMsIDB4MjUyYiwg MHgyNTIzLAotICAgIDB4MjUzYiwgMHgyNTRiLCAweDI1MDMsIDB4MjUwMSwgMHgyNTA0LCAweDAw ZjcsIDB4MDBhMiwgMHgyMTIyLAotICAgIDB4MDBhZSwgMHgwMGE5LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZAotfTsKLQot c3RydWN0IHhfdG9fdW5pY29kZSB1X2Rnd29yZCA9IHsKLSAgICA5NCwgMzMsIFgyVV9TVEQsQUxf Uk9NQU4sIkRHIFdvcmQgUHJvY2Vzc2luZyIsImRnLXdvcmRwcm9jZXNzaW5nIiwwLE5VTEwsCi0g ICAgICAgICAgICAweDIzMDgsIDB4MjMwYSwgMHgyMzA5LCAweDIzMGIsIDB4MDE5MiwgMHgyMjNj LCAweDIyMDIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4MjMyMCwgMHgyMzIxLCAweDIyMWEsIDB4 ZmZmZCwgMHgyMjFlLCAweDIyMWQsCi0gICAgMHgyMDcwLCAweDAwYjksIDB4MDBiMiwgMHgwMGIz LCAweDIwNzQsIDB4MjA3NSwgMHgyMDc2LCAweDIwNzcsCi0gICAgMHgyMDc4LCAweDIwNzksIDB4 MjI2MCwgMHhmZmZkLCAweDIxZWYsIDB4ZmZmZCwgMHgyMWU1LCAweDAwYjcsCi0gICAgMHgyMDNj LCAweDAzYjEsIDB4MDNiMiwgMHgwM2IzLCAweDAzYjQsIDB4MDNiNSwgMHgwM2I2LCAweDAzYjcs Ci0gICAgMHgwM2I4LCAweDAzYjksIDB4MDNiYSwgMHgwM2JiLCAweDAzYmMsIDB4MDNiZCwgMHgw M2JlLCAweDAzYmYsCi0gICAgMHgwM2MwLCAweDAzYzEsIDB4MDNjMywgMHgwM2M0LCAweDAzYzUs IDB4MDNjNiwgMHgwM2M3LCAweDAzYzgsCi0gICAgMHgwM2M5LCAweDAzYTksIDB4MDM5NCwgMHgw MGI2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHgyMmE2LCAweDI1YzYs IDB4MjViNiwgMHgyNWI3LCAweDI1YzAsIDB4MjViMiwgMHgyNWJjLCAweDIzMjcsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgyNWUzLCAweDI1 ZTIsCi0gICAgMHgyMDgwLCAweDIwODEsIDB4MjA4MiwgMHgyMDgzLCAweDIwODQsIDB4MjA4NSwg MHgyMDg2LCAweDIwODcsCi0gICAgMHgyMDg4LCAweDIwODksIDB4ZmZmZCwgMHgyMTkxLCAweDIx OTIsIDB4MjE5MCwgMHgyMTkzCi19OwotCi0vKiBIUCBHcmFwaGljIHNldHMgLSAiS0VSTUlURk9O VCIgdGhlc2UgbGF0ZXIuLi4gKi8KLQotLyoKLSAgTWFueSBhcmUgbWlzc2luZyBmcm9tIFVuaWNv ZGUsCi0gIFNpbmdsZS10by10cmlwbGUtbGluZSBib3gtZHJhd2luZyBjaGFyYWN0ZXJzLgotICBE b3VibGUvZG91YmxlIGNyb3NzICYgc29tZSBvdGhlcnMuCi0qLwotc3RydWN0IHhfdG9fdW5pY29k ZSB1X2hwbGluZSA9IHsgICAgICAgIC8qIE5lZWRzIHRvIGJlIGNoZWNrZWQgKi8KLSAgICA5NCwg MzMsIFgyVV9TVEQsQUxfUk9NQU4sIkhQIExpbmUgRHJhd2luZyBHcmFwaGljcyIsCi0gICAgImhw LWxpbmUtZHJhd2luZyIsMCxOVUxMLAotICAgICAgICAgICAgMHgyNTIwLCAweDI1MjgsIDB4MjUy ZiwgMHgyNTM3LCAweDI1NWYsIDB4MjU2MiwgMHgyNTY0LAotICAgIDB4MjU2NywgMHgyNTUxLCAw eDI1NDIsIDB4MjUzZiwgMHgyNTUwLCAweDIzMGEsIDB4MjUwMiwgMHgyNTNjLAotICAgIDB4MjU0 YiwgMHgyNTIzLCAweDI1MmIsIDB4MjUzMywgMHgyNTNiLCAweDI1MWMsIDB4MjUyNCwgMHgyNTJj LAotICAgIDB4MjUzNCwgMHgyNTUwLCAweDI1MDMsIDB4MjUwMSwgMHgyNTZiLCAweDIzMDgsIDB4 MjU2YSwgMHgyNTZjLAotICAgIDB4MjU1ZSwgMHgyNTE3LCAweDI1NDksIDB4MjU4OCwgMHgyNThj LCAweDI1OGUsIDB4MjUxNCwgMHgyNTE4LAotICAgIDB4MjUxMCwgMHgyNTU1LCAweDI1MmMsIDB4 MjU1NiwgMHgyNTU2LCAweDI1NDcsIDB4MjU0OCwgMHgyNTU1LAotICAgIDB4MjMwYiwgMHgyNTBm LCAweDI1MGMsIDB4MjUxYiwgMHgyNTEwLCAweDI1MjQsIDB4MjU0YSwgMHgyNTEzLAotICAgIDB4 MjU4NCwgMHgyMzA5LCAweDI1ODIsIDB4MjU2MSwgMHgyNTA0LCAweDI1NTksIDB4MjU3NiwgMHgy NTY1LAotICAgIDB4MjU1ZSwgMHgyNTE3LCAweDI1NDksIDB4MjU4OCwgMHgyNThjLCAweDI1OGUs IDB4MjUxNCwgMHgyNTE4LAotICAgIDB4MjUxMCwgMHgyNTU1LCAweDI1MmMsIDB4MjU1NiwgMHgy NTU2LCAweDI1NDcsIDB4MjU0OCwgMHgyNTU1LAotICAgIDB4MjMwYiwgMHgyNTBmLCAweDI1MGMs IDB4MjUxYiwgMHgyNTEwLCAweDI1MjQsIDB4MjU0YSwgMHgyNTEzLAotICAgIDB4MjU4NCwgMHgy MzA5LCAweDI1ODIsIDB4MjU2MSwgMHgyNTA0LCAweDI1NTksIDB4MjU3NgotfTsKLQotc3RydWN0 IHhfdG9fdW5pY29kZSB1X2hwbWF0aCA9IHsKLSAgICA5NCwgMzMsIFgyVV9TVEQsQUxfUk9NQU4s IkhQIE1hdGgvVGVjaG5pY2FsIiwiaHAtbWF0aC90ZWNobmljYWwiLDAsTlVMTCwKLSAgICAgICAg ICAgIDB4MjIxYSwgMHgyMjIzLCAweDAwYTcsIDB4MjIwNywgMHgwMGIxLCAweDAzYjEsIDB4MjMy MCwKLSAgICAweDAwZjcsIDB4MjI0MywgMHgwM2EwLCAweDAzOTMsIDB4MDNjOCwgMHgyMjYxLCAw eDAzYTYsIDB4MDM5ZSwKLSAgICAweDIwNzAsIDB4MDBiOSwgMHgwMGIyLCAweDAwYjMsIDB4MjA3 NCwgMHgyMDc1LCAweDIwNzYsIDB4MjA3NywKLSAgICAweDIwNzgsIDB4MjA3OSwgMHgwM2E5LCAw eDAzOWIsIDB4MjIxZSwgMHgyMzIxLCAweDIwMjAsIDB4MDNhMywKLSAgICAweDAwYjYsIDB4MDNi MSwgMHgwM2IyLCAweDAzYzgsIDB4MDNkNSwgMHgwM2I1LCAweDIyMDIsIDB4MDNiYiwKLSAgICAw eDAzYjcsIDB4MDNiOSwgMHgwMzk4LCAweDAzYmEsIDB4MDNjOSwgMHgwM2JjLCAweDAzYmQsIDB4 MDNjMSwKLSAgICAweDAzYzAsIDB4MDNiMywgMHgwM2I4LCAweDAzYzMsIDB4MDNjNCwgMHgwM2Jl LCAweDAzOTQsIDB4MDNiNCwKLSAgICAweDAwZDcsIDB4MDNjNSwgMHgwM2I2LCAweDIxOTEsIDB4 MjE5MiwgMHgwM2QyLCAweDIxOTAsIDB4MjE5MywKLSAgICAweDAwYjYsIDB4MDNiMSwgMHgwM2Iy LCAweDAzYzgsIDB4MDNkNSwgMHgwM2I1LCAweDIyMDIsIDB4MDNiYiwKLSAgICAweDAzYjcsIDB4 MDNiOSwgMHgwMzk4LCAweDAzYmEsIDB4MDNjOSwgMHgwM2JjLCAweDAzYmQsIDB4MDNjMSwKLSAg ICAweDAzYzAsIDB4MDNiMywgMHgwM2I4LCAweDAzYzMsIDB4MDNjNCwgMHgwM2JlLCAweDAzOTQs IDB4MDNiNCwKLSAgICAweDAwZDcsIDB4MDNjNSwgMHgwM2I2LCAweDIxOTEsIDB4MjE5MiwgMHgw M2QyLCAweDIxOTAKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV90dmlnID0gewotICAgIDE1 LDY1LDAsMCwiVGVsZXZpZGVvIFNwZWNpYWwgR3JhcGhpY3MiLCJ0dmktc3BlY2lhbCIsMCxOVUxM LAotICAgICAgICAgICAgMHgyNTcwLCAweDI1NkQsIDB4MjU2RSwgMHgyNTZGLCAweDI1MTQsIDB4 MjUwQywgMHgyNTEwLAotICAgIDB4MjUxOCwgMHgyNTNDLCAweDI1MDIsIDB4MjUwMCwgMHgyNTI0 LCAweDI1MUMsIDB4MjUyQywgMHgyNTM0Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfd3lz ZV9nbiA9IHsKLSNpZmRlZiBDT01NRU5UCi0gICAgMTYsMTYsMCwwLCJXeXNlIE5vcm1hbC1Nb2Rl IEdyYXBoaWNzIiwid3ktZ3JhcGhpY3Mtbm9ybWFsIiwwLE5VTEwsCi0gICAgMHgyNTJDLCAweDI1 MTQsIDB4MjUwQywgMHgyNTEwLCAweDI1MUMsIDB4MjUxOCwgMHgyNTAyLCAweDI1ODgsCi0gICAg MHgyNTNDLCAweDI1MjQsIDB4MjUwMCwgMHgyNTkyLCAweDI1NTAsIDB4MjUzNCwgMHgyNTUxLCAw eDI1OTEKLSNlbHNlCi0gICAgODAsNDgsMCwwLCJXeXNlIE5vcm1hbC1Nb2RlIEdyYXBoaWNzIiwi d3ktZ3JhcGhpY3Mtbm9ybWFsIiwwLE5VTEwsCi0gICAgMHgyNTJDLCAweDI1MTQsIDB4MjUwQywg MHgyNTEwLCAweDI1MUMsIDB4MjUxOCwgMHgyNTAyLCAweDI1ODgsCi0gICAgMHgyNTNDLCAweDI1 MjQsIDB4MjUwMCwgMHgyNTkyLCAweDI1NTAsIDB4MjUzNCwgMHgyNTUxLCAweDI1OTEsCi0gICAg MHgyNTJDLCAweDI1MTQsIDB4MjUwQywgMHgyNTEwLCAweDI1MUMsIDB4MjUxOCwgMHgyNTAyLCAw eDI1ODgsCi0gICAgMHgyNTNDLCAweDI1MjQsIDB4MjUwMCwgMHgyNTkyLCAweDI1NTAsIDB4MjUz NCwgMHgyNTUxLCAweDI1OTEsCi0gICAgMHgyNTJDLCAweDI1MTQsIDB4MjUwQywgMHgyNTEwLCAw eDI1MUMsIDB4MjUxOCwgMHgyNTAyLCAweDI1ODgsCi0gICAgMHgyNTNDLCAweDI1MjQsIDB4MjUw MCwgMHgyNTkyLCAweDI1NTAsIDB4MjUzNCwgMHgyNTUxLCAweDI1OTEsCi0gICAgMHgyNTJDLCAw eDI1MTQsIDB4MjUwQywgMHgyNTEwLCAweDI1MUMsIDB4MjUxOCwgMHgyNTAyLCAweDI1ODgsCi0g ICAgMHgyNTNDLCAweDI1MjQsIDB4MjUwMCwgMHgyNTkyLCAweDI1NTAsIDB4MjUzNCwgMHgyNTUx LCAweDI1OTEsCi0gICAgMHgyNTJDLCAweDI1MTQsIDB4MjUwQywgMHgyNTEwLCAweDI1MUMsIDB4 MjUxOCwgMHgyNTAyLCAweDI1ODgsCi0gICAgMHgyNTNDLCAweDI1MjQsIDB4MjUwMCwgMHgyNTky LCAweDI1NTAsIDB4MjUzNCwgMHgyNTUxLCAweDI1OTEKLSNlbmRpZiAvKiBDT01NRU5UICovCi19 OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfd3lzZV9nMSA9IHsKLSAgICA3OSw0OCwwLDAsIld5 c2UgR3JhcGhpY3MgMSIsInd5LWdyYXBoaWNzLTEiLDAsTlVMTCwKLSAgICAweDIwNzAsIDB4MDBC OSwgMHgwMEIyLCAweDAwQjMsIDB4MjA3NCwgMHgyMDc1LCAweDIwNzUsIDB4MjA3NywKLSAgICAw eDIwNzgsIDB4MjA3OSwgMHhGRkZELCAweEZGRkQsIDB4MjVCQSwgMHgyNUM0LCAweDI1QjIsIDB4 MjVCQywKLSAgICAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHhGRkZE LCAweEZGRkQsIDB4RkZGRCwKLSAgICAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4 RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwKLSAgICAweEZGRkQsIDB4RkZGRCwgMHhGRkZE LCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwKLSAgICAweEZGRkQsIDB4 RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwKLSAg ICAweDIwODAsIDB4MjA4MSwgMHgyMDgyLCAweDIwODMsIDB4MjA4NCwgMHgyMDg1LCAweDIwODYs IDB4MjA4NywKLSAgICAweDIwODgsIDB4MjA4OSwgMHgyNTE4LCAweDI1MTAsIDB4MjUwQywgMHgy NTE0LCAweDI1M0MsIDB4MjU4QywKLSAgICAweDI1OTAsIDB4MjUwMCwgMHgyNTg0LCAweDI1ODAs IDB4MjUxQywgMHgyNTI0LCAweDI1MzQsIDB4MjUyQywKLSAgICAweDI1MDIsIDB4RkZGRCwgMHgy NTZFLCAweDI1NkYsIDB4MjU3MCwgMHgyNTZELCAweDI1OEMKLX07Ci0KLXN0cnVjdCB4X3RvX3Vu aWNvZGUgdV93eXNlX2cyID0gewotICAgIDQxLDY0LDAsMCwiV3lzZSBHcmFwaGljcyAyIiwid3kt Z3JhcGhpY3MtMiIsMCxOVUxMLAotICAgIDB4MjUwQywgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwg MHgyNTEwLCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELAotICAgIDB4MjUxNCwgMHhGRkZELCAweEZG RkQsIDB4RkZGRCwgMHgyNTE4LCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELAotICAgIDB4MjUyQywg MHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHgyNTI0LCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELAot ICAgIDB4MjUxQywgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHgyNTM0LCAweEZGRkQsIDB4RkZG RCwgMHhGRkZELAotICAgIDB4MjUwMCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHgyNTAyLCAw eEZGRkQsIDB4RkZGRCwgMHhGRkZELAotICAgIDB4MjUzQwotfTsKLQotI2lmZGVmIEtFUk1JVEZP TlQKLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV93eXNlX2czID0gewotICAgIDMxLDY1LDAsMCwiV3lz ZSBHcmFwaGljcyAzIiwid3ktZ3JhcGhpY3MtMyIsMCxOVUxMLAotICAgICAgICAgICAgMHgyNTcw LCAweDI1NkQsIDB4MjU2RSwgMHgyNTZGLCAweDI1MTQsIDB4MjUwQywgMHgyNTEwLAotICAgIDB4 MjUxOCwgMHgyNTNDLCAweDI1MDIsIDB4MjUwMCwgMHgyNTI0LCAweDI1MUMsIDB4MjUyQywgMHgy NTM0LAotICAgIDB4MjNCQSwgMHgyM0JELCAweDI2NjYsIDB4RTMyOCwgMHhFMzIxLCAweEUzMjAs IDB4RTMyMiwgMHgyNTkwLAotICAgIDB4MjU4NCwgMHgyNThDLCAweDI1ODAsIDB4RTMyMywgMHhF MzI2LCAweEUzMjcsIDB4RTMyOSwgMHgyNThDCi19OwotI2Vsc2UKLXN0cnVjdCB4X3RvX3VuaWNv ZGUgdV93eXNlX2czID0gewotICAgIDMxLDY1LDAsMCwiV3lzZSBHcmFwaGljcyAzIiwid3ktZ3Jh cGhpY3MtMyIsMCxOVUxMLAotICAgICAgICAgICAgMHgyNTcwLCAweDI1NkQsIDB4MjU2RSwgMHgy NTZGLCAweDI1MTQsIDB4MjUwQywgMHgyNTEwLAotICAgIDB4MjUxOCwgMHgyNTNDLCAweDI1MDIs IDB4MjUwMCwgMHgyNTI0LCAweDI1MUMsIDB4MjUyQywgMHgyNTM0LAotICAgIDB4MjUwMCwgMHgy NTAwLCAweDI2NjYsIDB4MjU5MCwgMHgyNTkwLCAweDI1OGMsIDB4MjU4YywgMHgyNTkwLAotICAg IDB4MjU4NCwgMHgyNThDLCAweDI1ODAsIDB4MjU4OCwgMHgyNTg4LCAweDI1ODgsIDB4MjU4OCwg MHgyNThDCi19OwotI2VuZGlmIC8qIEtFUk1JVEZPTlQgKi8KLS8qCi0gIFFOWCBDb25zb2xlICAt LSAgVGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIENQNDM3IGV4Y2VwdCBmb3IgdGhlIGNvZGUK LSAgcG9pbnQgYXQgMHhFRSAoZXBzaWxvbiB2cyBlbGVtZW50LW9mKSwgd2hpY2ggSSB0aGluayB3 YXMganVzdCBhIG1pc3Rha2UKLSAgaW4gcmVhZGluZyBnbHlwaHMgYnkgdGhlIFFOWCBwZW9wbGUs IGJ1dCB3aG8ga25vd3MuICBBbHNvIHRoZSBnbHlwaCBhdAotICAweEVEIG1pZ2h0IGJlIGEgZmkg KGFzIGl0IGlzIGluIENQNDM3LCBhbmQgYXMgSSBoYXZlIGl0IGhlcmUpIG9yIGl0IG1pZ2h0Ci0g IGJlIGEgbnVsbC1zZXQgc3ltYm9sLgotKi8KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9xbnhncnBo ID0gewotICAgIDEyOCwwLDAsMCwiUU5YIENvbnNvbGUiLCJxbngtY29uc29sZSIsMCxOVUxMLAot ICAgIDB4MDBjNywgMHgwMGZjLCAweDAwZTksIDB4MDBlMiwgMHgwMGU0LCAweDAwZTAsIDB4MDBl NSwgMHgwMGU3LCAvKiAxMjggKi8KLSAgICAweDAwZWEsIDB4MDBlYiwgMHgwMGU4LCAweDAwZWYs IDB4MDBlZSwgMHgwMGVjLCAweDAwYzQsIDB4MDBjNSwgLyogMTM2ICovCi0gICAgMHgwMGM5LCAw eDAwZTYsIDB4MDBjNiwgMHgwMGY0LCAweDAwZjYsIDB4MDBmMiwgMHgwMGZiLCAweDAwZjksIC8q IDE0NCAqLwotICAgIDB4MDBmZiwgMHgwMGQ2LCAweDAwZGMsIDB4MDBhMiwgMHgwMGEzLCAweDAw YTUsIDB4MjBhNywgMHgwMTkyLCAvKiAxNTIgKi8KLSAgICAweDAwZTEsIDB4MDBlZCwgMHgwMGYz LCAweDAwZmEsIDB4MDBmMSwgMHgwMGQxLCAweDAwYWEsIDB4MDBiYSwgLyogMTYwICovCi0gICAg MHgwMGJmLCAweDIzMTAsIDB4MDBhYywgMHgwMGJkLCAweDAwYmMsIDB4MDBhMSwgMHgwMGFiLCAw eDAwYmIsIC8qIDE2OCAqLwotICAgIDB4MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4MjUwMiwgMHgy NTI0LCAweDI1NjEsIDB4MjU2MiwgMHgyNTU2LCAvKiAxNzYgKi8KLSAgICAweDI1NTUsIDB4MjU2 MywgMHgyNTUxLCAweDI1NTcsIDB4MjU1ZCwgMHgyNTVjLCAweDI1NWIsIDB4MjUxMCwgLyogMTg0 ICovCi0gICAgMHgyNTE0LCAweDI1MzQsIDB4MjUyYywgMHgyNTFjLCAweDI1MDAsIDB4MjUzYywg MHgyNTVlLCAweDI1NWYsIC8qIDE5MiAqLwotICAgIDB4MjU1YSwgMHgyNTU0LCAweDI1NjksIDB4 MjU2NiwgMHgyNTYwLCAweDI1NTAsIDB4MjU2YywgMHgyNTY3LCAvKiAyMDAgKi8KLSAgICAweDI1 NjgsIDB4MjU2NCwgMHgyNTY1LCAweDI1NTksIDB4MjU1OCwgMHgyNTUyLCAweDI1NTMsIDB4MjU2 YiwgLyogMjA4ICovCi0gICAgMHgyNTZhLCAweDI1MTgsIDB4MjUwYywgMHgyNTg4LCAweDI1ODQs IDB4MjU4YywgMHgyNTkwLCAweDI1ODAsIC8qIDIxNiAqLwotICAgIDB4MjIxZCwgMHgwMGRmLCAw eDAzOTMsIDB4MDNjMCwgMHgwM2EzLCAweDAzYzMsIDB4MDBiNSwgMHgwM2M0LCAvKiAyMjQgKi8K LSAgICAweDAzYTYsIDB4MDM5OCwgMHgwM2E5LCAweDAzYjQsIDB4MjIxZSwgMHgwM2M2LCAweDIy MDgsIDB4MjIyOSwgLyogMjMyICovCi0gICAgMHgyMjYxLCAweDAwYjEsIDB4MjI2NSwgMHgyMjY0 LCAweDIzMjAsIDB4MjMyMSwgMHgwMGY3LCAweDIyNDgsIC8qIDI0MCAqLwotICAgIDB4MDBiMCwg MHgyMjE5LCAweDAwYjcsIDB4MjIxYSwgMHgyMDdmLCAweDAwYjIsIDB4MjVhZSwgMHgwMGEwICAv KiAyNDggKi8KLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9zbmlicmFjayA9IHsKLSAgICA5 NCwgMzMsIDAsIDAsIlNpZW1lbnMgTml4ZG9yZiA5NzgwMSBCcmFja2V0cyIsInNuaS1icmFja2V0 cyIsMCwidyIsCi0gICAgICAgICAgICAweDI1OTAsIDB4MjU4YywgMHgyNTg0LCAweDI1ODAsIDB4 MjU5MCwgMHgyNThjLCAweDI1ODQsIC8qIGEwLTcgKi8KLSAgICAweDI1ODAsIDB4MjMyOSwgMHgy MzI3LCAweDI1YWYsIDB4MDBiNywgMHgyNWI5LCAweDI1YzEsIDB4MDAzYywgLyogYTgtZiAqLwot ICAgIDB4MjUzYiwgMHgyNTMzLCAweDI1MjMsIDB4MjUyYiwgMHgyMzI5LCAweDIzMmEsIDB4MjMw NCwgMHgyMzAzLCAvKiBiMC03ICovCi0gICAgMHgyNWU0LCAweDI1ZTUsIDB4MjVlMywgMHgyNWUy LCAweDI1M2YsIDB4MjMxYiwgMHgyNWNmLCAweDI1Y2IsIC8qIGI4LWYgKi8KLSAgICAweDI1MDIs IDB4MjUwMCwgMHgyNTBjLCAweDI1MTAsIDB4MjUxNCwgMHgyNTE4LCAweDI1MWMsIDB4MjUyNCwg LyogYzAtNyAqLwotICAgIDB4MjUyYywgMHgyNTM0LCAweDI1M2MsIDB4MjE5MiwgMHgyMTkwLCAw eDIxOTEsIDB4MjE5MywgMHgyNTc1LCAvKiBjOC1mICovCi0gICAgMHgyNTc3LCAweDI1ZDQsIDB4 MjU2ZCwgMHgyNTZlLCAweDI1NzAsIDB4MjU2ZiwgMHgyNTFjLCAweDI1MjQsIC8qIGQwLTcgKi8K LSAgICAweDI1MmMsIDB4MjUzNCwgMHgyNTNjLCAweDI1M2MsIDB4MjU5MiwgMHgyNTkxLCAweDI1 OTIsIDB4MjU5MywgLyogZDgtZiAqLwotICAgIDB4MjUwMywgMHgyNTAxLCAweDI1MGYsIDB4MjUx MywgMHgyNTE3LCAweDI1MWIsIDB4MjUyMywgMHgyNTJiLCAvKiBlMC03ICovCi0gICAgMHgyNTMz LCAweDI1M2IsIDB4MjU0YiwgMHgyNzllLCAweDIxOTAsIDB4MjE5MSwgMHgyMTkzLCAweDI1Nzks IC8qIGU4LWYgKi8KLSAgICAweDI1N2IsIDB4MjI2MSwgMHgyNTU0LCAweDI1NTcsIDB4MjU1YSwg MHgyNTVkLCAweDI1MjMsIDB4MjUyYiwgLyogZjAtNyAqLwotICAgIDB4MjUzMywgMHgyNTNiLCAw eDI1NGIsIDB4MjU0YiwgMHgwMzkzLCAweDAzYzMsIDB4MDNjNCAgICAgICAgICAvKiBmOC1mICov Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfc25pYmxhbmtzID0gewotICAgIDk0LCAzMywg MCwgMCwiU2llbWVucyBOaXhkb3JmIDk3ODAxIEJsYW5rcyIsInNuaS1ibGFua3MiLDAsInkiLAot ICAgICAgICAgICAgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAy MCwgMHgwMDIwLCAvKiBhMC03ICovCi0gICAgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIw LCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIC8qIGE4LWYgKi8KLSAgICAweDAwMjAs IDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwg LyogYjAtNyAqLwotICAgIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAw eDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAvKiBiOC1mICovCi0gICAgMHgwMDIwLCAweDAwMjAsIDB4 MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIC8qIGMwLTcgKi8K LSAgICAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAw MjAsIDB4MDAyMCwgLyogYzgtZiAqLwotICAgIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAy MCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAvKiBkMC03ICovCi0gICAgMHgwMDIw LCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAs IC8qIGQ4LWYgKi8KLSAgICAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwg MHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgLyogZTAtNyAqLwotICAgIDB4MDAyMCwgMHgwMDIwLCAw eDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAvKiBlOC1mICov Ci0gICAgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgw MDIwLCAweDAwMjAsIC8qIGYwLTcgKi8KLSAgICAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAw MjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAgICAgICAgICAgLyogZjgtZiAqLwotfTsKLQotc3Ry dWN0IHhfdG9fdW5pY29kZSB1X3NuaWZhY2V0ID0gewotICAgIDk0LCAzMywgMCwgMCwiU2llbWVu cyBOaXhkb3JmIDk3ODAxIEZhY2V0Iiwic25pLWZhY2V0IiwwLCJjIiwKLSAgICAgICAgICAgIDB4 MDAyMCwgMHgyNTgxLCAweDI1ODIsIDB4MjU4MywgMHgyNTg0LCAweDI1ODUsIDB4MjU4NywgLyog YTEtYTcgKi8KLSAgICAweDAwNWYsIDB4MjU4MSwgMHgyNTgyLCAweDI1ODMsIDB4MjU4NCwgMHgy NTg1LCAweDI1ODYsIDB4MjU4NywgLyogYTgtYWYgKi8KLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgLyogYjAtYjcgKi8K LSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgLyogYjgtYmYgKi8KLSAgICAweDI1MDMsIDB4MjUwMSwgMHgyNTBmLCAweDI1 MTMsIDB4MjUxNywgMHgyNTFiLCAweDI1MjMsIDB4MjUyYiwgLyogYzAtYzcgKi8KLSAgICAweDI1 MzMsIDB4MjUzYiwgMHgyNTRiLCAweDI1OGYsIDB4MjU5NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgLyogYzgtY2YgKi8KLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgLyogZDAtZDcgKi8KLSAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgyNTkxLCAweDI1OTEsIDB4MjU4OCwgLyogZDgt ZGYgKi8KLSAgICAweDI1MDMsIDB4MjUwMSwgMHgyNTBmLCAweDI1MTMsIDB4MjUxNywgMHgyNTFi LCAweDI1MjMsIDB4MjUyYiwgLyogZTAtZTcgKi8KLSAgICAweDI1MzMsIDB4MjUzYiwgMHgyNTRi LCAweGZmZmQsIDB4ZmZmZCwgMHgyNTkzLCAweDI1OTMsIDB4MDAyMCwgLyogZTgtZWYgKi8KLSAg ICAweDI1ODUsIDB4MjU4NiwgMHgyNTg3LCAweDI1ODgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgLyogZjAtZjcgKi8KLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4MjU5NCwgMHgyNTk0LCAweGZmZmQgICAgICAgICAgLyogZjgtZmUgKi8KLX07Ci0KLXN0cnVj dCB4X3RvX3VuaWNvZGUgdV9zbmlpYm0gPSB7Ci0gICAgOTQsIDMzLCAwLCAwLCJTaWVtZW5zIE5p eGRvcmYgOTc4MDEgSUJNIiwic25pLWlibSIsMCwidiIsCi0gICAgICAgICAgICAweDI2M2EsIDB4 MjYzYiwgMHgyNjY1LCAweDI2NjYsIDB4MjY2MywgMHgyNjYwLCAweDI1Y2YsCi0gICAgMHgyNWQ4 LCAweDI1Y2IsIDB4MjVkOSwgMHgyNjQyLCAweDI2NDAsIDB4MjY2YSwgMHgyNjZiLCAweDI2M2Ms Ci0gICAgMHgyNWJhLCAweDI1YzQsIDB4MjE5NSwgMHgyMDNjLCAweDAwYjYsIDB4MjVjMSwgMHgy NTgyLCAweDIxYTgsCi0gICAgMHgyMTkxLCAweDIxOTMsIDB4MjE5MiwgMHgyMTkwLCAweDIzMTks IDB4MjE5NCwgMHgyNWI0LCAweDI1YmUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIC8qIEhleCAqLwotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAvKiBieXRlcyAqLwotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4MjA3MCwgMHgwMGI5 LCAweDAwYjIsIDB4MDBiMywgMHgyMDc0LCAweDIwNzUsIDB4MjA3NiwgMHgyMDc3LAotICAgIDB4 MjA3OCwgMHgyMDc5LCAweDIwN2IsIDB4MjA3YSwgMHhmZmZkLCAweGZmZmQsIDB4MjMyMCwgMHgy MzIxLAotICAgIDB4MjA4MCwgMHgyMDgxLCAweDIwODIsIDB4MjA4MywgMHgyMDg0LCAweDIwODUs IDB4MjA4NiwgMHgyMDg3LAotICAgIDB4MjA4OCwgMHgyMDg5LCAweDIwOGIsIDB4MjA4YSwgMHgy MjFlLCAweDAzYjEsIDB4MDNhNgotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X3NuaWV1cm8g PSB7Ci0gICAgOTQsIDMzLCAwLCAwLCJTaWVtZW5zIE5peGRvcmYgOTc4MDEgRXVybyIsInNuaS1l dXJvIiwwLCJ1IiwKLSAgICAgICAgICAgIDB4MDBlMCwgMHgwMGUxLCAweDAwZTIsIDB4MDBlNCwg MHgwMGU1LCAweDAxMDUsIDB4MDBlMywKLSAgICAweDAxMDMsIDB4MDBlNiwgMHgwMGU3LCAweDAx MGQsIDB4MDEwNywgMHgwMGYwLCAweDAxMTEsIDB4MDEwZiwKLSAgICAweDAwZTgsIDB4MDBlOSwg MHgwMGVhLCAweDAwZWIsIDB4MDExYiwgMHgwMTE5LCAweDAxMWYsIDB4MDEzMSwKLSAgICAweDAw ZWUsIDB4MDBlYywgMHgwMWQwLCAweDAwZWYsIDB4MDEzMywgMHgwMTNhLCAweDAxNDIsIDB4MDEz ZSwKLSAgICAweDAxNDgsIDB4MDE0NCwgMHgwMGYxLCAweDAwZjIsIDB4MDBmMywgMHgwMGY0LCAw eDAwZjYsIDB4MDBmNSwKLSAgICAweDAwZjgsIDB4MDE1MSwgMHgwMTUzLCAweDAwZmUsIDB4MDE1 OSwgMHgwMTU1LCAweDAxNjEsIDB4MDE1YiwKLSAgICAweDAxNWYsIDB4MDBkZiwgMHgwMTYzLCAw eDAxNjUsIDB4MDBmOSwgMHgwMGZhLCAweDAwZmIsIDB4MDBmYywKLSAgICAweDAxNmYsIDB4MDE3 MSwgMHgwMGZkLCAweDAwZmYsIDB4MDE3ZSwgMHgwMTdhLCAweDAxN2MsIDB4MDBjOSwKLSAgICAw eDAwYzUsIDB4MDBjNiwgMHgwMGQwLCAweDAxMzAsIDB4MDEzMiwgMHgwMTY3LCAweDAwZDgsIDB4 MDE1MiwKLSAgICAweDAwZGUsIDB4MDBjNCwgMHgwMGQ2LCAweDAwZGMsIDB4MDBhNywgMHgwMDI0 LCAweDAwYTMsIDB4MDBhZSwKLSAgICAweDAwYTksIDB4MDNhOSwgMHgwMGI1LCAweDAwYjAsIDB4 MDBjNywgMHgyMGE3LCAweDAzYzAsIDB4MDJkOCwKLSAgICAweDAwYjQsIDB4MDJkZCwgMHgwMGQx LCAweDI1MTQsIDB4MjUxOCwgMHgwMDdlLCAweDAyYzcKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNv ZGUgdV9zbWlsZXkgPSB7Ci0gICAgMzIsMCxYMlVfQ1hHLDAsIlBDIEMwIEdyYXBoaWNzIiwic21p bGV5LWZhY2VzIiwwLE5VTEwsCi0gICAgMHgwMGEwLCAweDI2M2EsIDB4MjYzYiwgMHgyNjY1LCAw eDI2NjYsIDB4MjY2MywgMHgyNjYwLCAweDIwMjIsCi0gICAgMHgyNWQ4LCAweDI1ZWYsIDB4MjVk OSwgMHgyNjQyLCAweDI2NDAsIDB4MjY2YSwgMHgyNjZjLCAweDI2M2MsCi0gICAgMHgyNWJhLCAw eDI1YzQsIDB4MjE5NSwgMHgyMDNjLCAweDAwYjYsIDB4MDBhNywgMHgyNWFjLCAweDIxYTgsCi0g ICAgMHgyMTkxLCAweDIxOTMsIDB4MjE5MiwgMHgyMTkwLCAweDIzMTksIDB4MjE5NCwgMHgyNWIy LCAweDI1YmMKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9jMHBpY3MgPSB7Ci0gICAgMTI4 LDAsWDJVX0NYRywwLCJDMC9DMSBEaXNwbGF5IENvbnRyb2xzIiwiZGlzcGxheS1jb250cm9scyIs MCxOVUxMLAotICAgIDB4MjQwMCwgMHgyNDAxLCAweDI0MDIsIDB4MjQwMywgMHgyNDA0LCAweDI0 MDUsIDB4MjQwNiwgMHgyNDA3LAotICAgIDB4MjQwOCwgMHgyNDA5LCAweDI0MGEsIDB4MjQwYiwg MHgyNDBjLCAweDI0MGQsIDB4MjQwZSwgMHgyNDBmLAotICAgIDB4MjQxMCwgMHgyNDExLCAweDI0 MTIsIDB4MjQxMywgMHgyNDE0LCAweDI0MTUsIDB4MjQxNiwgMHgyNDE3LAotICAgIDB4MjQxOCwg MHgyNDE5LCAweDI0MWEsIDB4MjQxYiwgMHgyNDFjLCAweDI0MWQsIDB4MjQxZSwgMHgyNDFmLAot ICAgIDB4MjQyMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgyNDIxCi19OwotCi0jaWZkZWYgS0VSTUlURk9OVAotc3Ry dWN0IHhfdG9fdW5pY29kZSB1X2MxcGljcyA9IHsKLSAgICAzMiwwLFgyVV9DWEcsMCwiQzEgRGlz cGxheSBDb250cm9scyIsImMxLWRpc3BsYXktY29udHJvbHMiLDAsTlVMTCwKLSAgICAweGUwODAs IDB4ZTA4MSwgMHhlMDgyLCAweGUwODMsIDB4ZTA4NCwgMHhlMDg1LCAweGUwODYsIDB4ZTA4NywK LSAgICAweGUwODgsIDB4ZTA4OSwgMHhlMDhhLCAweGUwOGIsIDB4ZTA4YywgMHhlMDhkLCAweGUw OGUsIDB4ZTA4ZiwKLSAgICAweGUwOTAsIDB4ZTA5MSwgMHhlMDkyLCAweGUwOTMsIDB4ZTA5NCwg MHhlMDk1LCAweGUwOTYsIDB4ZTA5NywKLSAgICAweGUwOTgsIDB4ZTA5OSwgMHhlMDlhLCAweGUw OWIsIDB4ZTA5YywgMHhlMDlkLCAweGUwOWUsIDB4ZTA5ZgotfTsKLSNlbHNlCi1zdHJ1Y3QgeF90 b191bmljb2RlIHVfYzFwaWNzID0gewotICAgIDMyLDAsWDJVX0NYRywwLCJDMSBEaXNwbGF5IENv bnRyb2xzIiwiYzEtZGlzcGxheS1jb250cm9scyIsMCxOVUxMLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkCi19OwotI2VuZGlmIC8qIEtFUk1JVEZPTlQgKi8K LQotCi0vKiBCbGFoLXRvLVVuaWNvZGUgZnVuY3Rpb25zICovCi0KLVVTSE9SVAotI2lmZGVmIENL X0FOU0lDCi1hc2NpaV91KENIQVIgYykKLSNlbHNlCi1hc2NpaV91KGMpIENIQVIgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTksp OwotLyoKLSAgTk9URTogU3RyaWN0IEFOU0kgY29tcGlsZXJzIGNvbXBsYWluIGFib3V0ICI8IiBh bmQgc2ltaWxhciBjb21wYXJpc29ucwotICBiZXR3ZWVuIHVuc2lnbmVkIGFuZCBzaWduZWQgcXVh bnRpdGllcywgYXMgZm91bmQgaW4gYWxsIHRoZSByb3V0aW5lcyBvZgotICB0aGUgImJsYWhfdSgp IiBjbGFzcyAtLSBjYXN0cyBtdXN0IGJlIGFkZGVkIHRvIHNxdWVsY2ggdGhlIHdhcm5pbmdzLgot Ki8KLSAgICBpZiAoYyA8IHVfYXNjaWkub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVs c2UgaWYgKGMgPj0gdV9hc2NpaS5vZmZzZXQgKyB1X2FzY2lpLnNpemUpCi0gICAgICByZXR1cm4o Yyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfYXNjaWkubWFwW2MgLSB1X2FzY2lpLm9mZnNl dF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotYnJpdGlzaF91KENIQVIgYykKLSNl bHNlCi1icml0aXNoX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAg aWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgaWYgKGMgPCB1X2JyaXRpc2gu b2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV9icml0aXNoLm9m ZnNldCArIHVfYnJpdGlzaC5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAg IHJldHVybih1X2JyaXRpc2gubWFwW2MgLSB1X2JyaXRpc2gub2Zmc2V0XSk7Ci19Ci0KLVVTSE9S VAotI2lmZGVmIENLX0FOU0lDCi1kdXRjaF91KENIQVIgYykKLSNlbHNlCi1kdXRjaF91KGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjICYgMHg4MCkKLSAgICAg IHJldHVybihVTkspOwotICAgIGlmIChjIDwgdV9kdXRjaC5vZmZzZXQpCi0gICAgICByZXR1cm4o Yyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X2R1dGNoLm9mZnNldCArIHVfZHV0Y2guc2l6ZSkKLSAg ICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV9kdXRjaC5tYXBbYyAtIHVf ZHV0Y2gub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1maW5uaXNoX3Uo Q0hBUiBjKQotI2Vsc2UKLWZpbm5pc2hfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLXsKLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBpZiAoYyA8 IHVfZmlubmlzaC5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1 X2Zpbm5pc2gub2Zmc2V0ICsgdV9maW5uaXNoLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAg ZWxzZQotICAgICAgcmV0dXJuKHVfZmlubmlzaC5tYXBbYyAtIHVfZmlubmlzaC5vZmZzZXRdKTsK LX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWZyZW5jaF91KENIQVIgYykKLSNlbHNlCi1m cmVuY2hfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyAm IDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBpZiAoYyA8IHVfZnJlbmNoLm9mZnNldCkK LSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfZnJlbmNoLm9mZnNldCArIHVf ZnJlbmNoLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVf ZnJlbmNoLm1hcFtjIC0gdV9mcmVuY2gub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENL X0FOU0lDCi1mcl9jYW5hZGlhbl91KENIQVIgYykKLSNlbHNlCi1mcl9jYW5hZGlhbl91KGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjICYgMHg4MCkKLSAgICAg IHJldHVybihVTkspOwotICAgIGlmIChjIDwgdV9mcl9jYW5hZGlhbi5vZmZzZXQpCi0gICAgICBy ZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X2ZyX2NhbmFkaWFuLm9mZnNldCArIHVfZnJf Y2FuYWRpYW4uc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4o dV9mcl9jYW5hZGlhbi5tYXBbYyAtIHVfZnJfY2FuYWRpYW4ub2Zmc2V0XSk7Ci19Ci0KLVVTSE9S VAotI2lmZGVmIENLX0FOU0lDCi1nZXJtYW5fdShDSEFSIGMpCi0jZWxzZQotZ2VybWFuX3UoYykg Q0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgJiAweDgwKQotICAg ICAgcmV0dXJuKFVOSyk7Ci0gICAgaWYgKGMgPCB1X2dlcm1hbi5vZmZzZXQpCi0gICAgICByZXR1 cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X2dlcm1hbi5vZmZzZXQgKyB1X2dlcm1hbi5zaXpl KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1X2dlcm1hbi5tYXBb YyAtIHVfZ2VybWFuLm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotaHVu Z2FyaWFuX3UoQ0hBUiBjKQotI2Vsc2UKLWh1bmdhcmlhbl91KGMpIENIQVIgYzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotewotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwot ICAgIGlmIChjIDwgdV9odW5nYXJpYW4ub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVs c2UgaWYgKGMgPj0gdV9odW5nYXJpYW4ub2Zmc2V0ICsgdV9odW5nYXJpYW4uc2l6ZSkKLSAgICAg IHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV9odW5nYXJpYW4ubWFwW2MgLSB1 X2h1bmdhcmlhbi5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWl0YWxp YW5fdShDSEFSIGMpCi0jZWxzZQotaXRhbGlhbl91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotewotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIGlm IChjIDwgdV9pdGFsaWFuLm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChj ID49IHVfaXRhbGlhbi5vZmZzZXQgKyB1X2l0YWxpYW4uc2l6ZSkKLSAgICAgIHJldHVybihjKTsK LSAgICBlbHNlCi0gICAgICByZXR1cm4odV9pdGFsaWFuLm1hcFtjIC0gdV9pdGFsaWFuLm9mZnNl dF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotaWNlbGFuZGljX3UoQ0hBUiBjKQot I2Vsc2UKLWljZWxhbmRpY191KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewot ICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIGlmIChjIDwgdV9pY2Vs YW5kaWMub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV9pY2Vs YW5kaWMub2Zmc2V0ICsgdV9pY2VsYW5kaWMuc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAgICBl bHNlCi0gICAgICByZXR1cm4odV9pY2VsYW5kaWMubWFwW2MgLSB1X2ljZWxhbmRpYy5vZmZzZXRd KTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWppczAyMDFyX3UoQ0hBUiBjKQotI2Vs c2UKLWppczAyMDFyX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAg aWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgaWYgKGMgPCB1X2ppczAyMDFy Lm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfamlzMDIwMXIu b2Zmc2V0ICsgdV9qaXMwMjAxci5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAg ICAgIHJldHVybih1X2ppczAyMDFyLm1hcFtjIC0gdV9qaXMwMjAxci5vZmZzZXRdKTsKLX0KLQot VVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWppczAyMDFrX3UoQ0hBUiBjKQotI2Vsc2UKLWppczAy MDFrX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgJiAw eDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgaWYgKGMgPCB1X2ppczAyMDFrLm9mZnNldCkK LSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfamlzMDIwMWsub2Zmc2V0ICsg dV9qaXMwMjAxay5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVy bih1X2ppczAyMDFrLm1hcFtjIC0gdV9qaXMwMjAxay5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0j aWZkZWYgQ0tfQU5TSUMKLW5vcndlZ2lhbl91KENIQVIgYykKLSNlbHNlCi1ub3J3ZWdpYW5fdShj KSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyAmIDB4ODApCi0g ICAgICByZXR1cm4oVU5LKTsKLSAgICBpZiAoYyA8IHVfbm9yd2VnaWFuLm9mZnNldCkKLSAgICAg IHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfbm9yd2VnaWFuLm9mZnNldCArIHVfbm9y d2VnaWFuLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVf bm9yd2VnaWFuLm1hcFtjIC0gdV9ub3J3ZWdpYW4ub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lm ZGVmIENLX0FOU0lDCi1kYW5pc2hfdShDSEFSIGMpCi0jZWxzZQotZGFuaXNoX3UoYykgQ0hBUiBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0 dXJuKFVOSyk7Ci0gICAgaWYgKGMgPCB1X2RhbmlzaC5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7 Ci0gICAgZWxzZSBpZiAoYyA+PSB1X2RhbmlzaC5vZmZzZXQgKyB1X2RhbmlzaC5zaXplKQotICAg ICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1X2RhbmlzaC5tYXBbYyAtIHVf ZGFuaXNoLm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotcG9ydHVndWVz ZV91KENIQVIgYykKLSNlbHNlCi1wb3J0dWd1ZXNlX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi17Ci0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAg aWYgKGMgPCB1X3BvcnR1Z3Vlc2Uub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2Ug aWYgKGMgPj0gdV9wb3J0dWd1ZXNlLm9mZnNldCArIHVfcG9ydHVndWVzZS5zaXplKQotICAgICAg cmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1X3BvcnR1Z3Vlc2UubWFwW2MgLSB1 X3BvcnR1Z3Vlc2Uub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1zcGFu aXNoX3UoQ0hBUiBjKQotI2Vsc2UKLXNwYW5pc2hfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsKLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBp ZiAoYyA8IHVfc3BhbmlzaC5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAo YyA+PSB1X3NwYW5pc2gub2Zmc2V0ICsgdV9zcGFuaXNoLnNpemUpCi0gICAgICByZXR1cm4oYyk7 Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfc3BhbmlzaC5tYXBbYyAtIHVfc3BhbmlzaC5vZmZz ZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLXN3ZWRpc2hfdShDSEFSIGMpCi0j ZWxzZQotc3dlZGlzaF91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAg IGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIGlmIChjIDwgdV9zd2VkaXNo Lm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfc3dlZGlzaC5v ZmZzZXQgKyB1X3N3ZWRpc2guc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0gICAg ICByZXR1cm4odV9zd2VkaXNoLm1hcFtjIC0gdV9zd2VkaXNoLm9mZnNldF0pOwotfQotCi1VU0hP UlQKLSNpZmRlZiBDS19BTlNJQwotc3dpc3NfdShDSEFSIGMpCi0jZWxzZQotc3dpc3NfdShjKSBD SEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyAmIDB4ODApCi0gICAg ICByZXR1cm4oVU5LKTsKLSAgICBpZiAoYyA8IHVfc3dpc3Mub2Zmc2V0KQotICAgICAgcmV0dXJu KGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV9zd2lzcy5vZmZzZXQgKyB1X3N3aXNzLnNpemUpCi0g ICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfc3dpc3MubWFwW2MgLSB1 X3N3aXNzLm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotYXBsMV91KENI QVIgYykKLSNlbHNlCi1hcGwxX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17 Ci0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgaWYgKGMgPCB1X2Fw bDEub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV9hcGwxLm9m ZnNldCArIHVfYXBsMS5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJl dHVybih1X2FwbDEubWFwW2MgLSB1X2FwbDEub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVm IENLX0FOU0lDCi1pZGVudF91KENIQVIgYykKLSNlbHNlIC8qIENLX0FOU0lDICovCi1pZGVudF91 KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHJldHVybigoVVNIT1JU KWMpOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotaXNvXzg4NTlfMV91KENIQVIgYykK LSNlbHNlCi1pc29fODg1OV8xX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17 Ci0gICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKLSAgICAgIHJldHVybihjKTsKLSAgICBj ICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1Xzg4NTlfMS5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7 Ci0gICAgZWxzZSBpZiAoYyA+PSB1Xzg4NTlfMS5vZmZzZXQgKyB1Xzg4NTlfMS5zaXplKQotICAg ICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1Xzg4NTlfMS5tYXBbYyAtIHVf ODg1OV8xLm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotaXNvXzg4NTlf Ml91KENIQVIgYykKLSNlbHNlCi1pc29fODg1OV8yX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi17Ci0gICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKLSAgICAgIHJldHVy bihjKTsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1Xzg4NTlfMi5vZmZzZXQpCi0gICAg ICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1Xzg4NTlfMi5vZmZzZXQgKyB1Xzg4NTlf Mi5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1Xzg4NTlf Mi5tYXBbYyAtIHVfODg1OV8yLm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJ QwotaXNvXzg4NTlfM191KENIQVIgYykKLSNlbHNlCi1pc29fODg1OV8zX3UoYykgQ0hBUiBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkK LSAgICAgIHJldHVybihjKTsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1Xzg4NTlfMy5v ZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1Xzg4NTlfMy5vZmZz ZXQgKyB1Xzg4NTlfMy5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJl dHVybih1Xzg4NTlfMy5tYXBbYyAtIHVfODg1OV8zLm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNp ZmRlZiBDS19BTlNJQwotaXNvXzg4NTlfNF91KENIQVIgYykKLSNlbHNlCi1pc29fODg1OV80X3Uo YykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPj0gMHg4MCAm JiBjIDwgMHhhMCkKLSAgICAgIHJldHVybihjKTsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMg PCB1Xzg4NTlfNC5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1 Xzg4NTlfNC5vZmZzZXQgKyB1Xzg4NTlfNC5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVs c2UKLSAgICAgIHJldHVybih1Xzg4NTlfNC5tYXBbYyAtIHVfODg1OV80Lm9mZnNldF0pOwotfQot Ci1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotaXNvXzg4NTlfNV91KENIQVIgYykKLSNlbHNlCi1p c29fODg1OV81X3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYg KGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKLSAgICAgIHJldHVybihjKTsKLSAgICBjICY9IDB4N2Y7 Ci0gICAgaWYgKGMgPCB1Xzg4NTlfNS5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxz ZSBpZiAoYyA+PSB1Xzg4NTlfNS5vZmZzZXQgKyB1Xzg4NTlfNS5zaXplKQotICAgICAgcmV0dXJu KGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1Xzg4NTlfNS5tYXBbYyAtIHVfODg1OV81Lm9m ZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwota29pOF91KENIQVIgYykKLSNl bHNlCi1rb2k4X3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYg KGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKLSAgICAgIHJldHVybihjKTsKLSAgICBjICY9IDB4N2Y7 Ci0gICAgaWYgKGMgPCB1X2tvaTgub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2Ug aWYgKGMgPj0gdV9rb2k4Lm9mZnNldCArIHVfa29pOC5zaXplKQotICAgICAgcmV0dXJuKGMpOwot ICAgIGVsc2UKLSAgICAgIHJldHVybih1X2tvaTgubWFwW2MgLSB1X2tvaTgub2Zmc2V0XSk7Ci19 Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1rb2k4cl91KENIQVIgYykgICAgICAgICAgICAg ICAgICAgICAgICAgLyogS09JOC1SIHRvIFVuaWNvZGUgKi8KLSNlbHNlCi1rb2k4cl91KGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAo YyA8IHVfa29pOHIub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0g dV9rb2k4ci5vZmZzZXQgKyB1X2tvaThyLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxz ZQotICAgICAgcmV0dXJuKHVfa29pOHIubWFwW2MgLSB1X2tvaThyLm9mZnNldF0pOwotfQotCi1V U0hPUlQKLSNpZmRlZiBDS19BTlNJQwota29pOHVfdShDSEFSIGMpCi0jZWxzZQota29pOHVfdShj KSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0gICAg aWYgKGMgPCB1X2tvaTh1Lm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChj ID49IHVfa29pOHUub2Zmc2V0ICsgdV9rb2k4dS5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAg IGVsc2UKLSAgICAgIHJldHVybih1X2tvaTh1Lm1hcFtjIC0gdV9rb2k4dS5vZmZzZXRdKTsKLX0K LQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWlzb184ODU5XzZfdShDSEFSIGMpCi0jZWxzZQot aXNvXzg4NTlfNl91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlm IChjID49IDB4ODAgJiYgYyA8IDB4YTApCi0gICAgICByZXR1cm4oYyk7Ci0gICAgYyAmPSAweDdm OwotICAgIGlmIChjIDwgdV84ODU5XzYub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVs c2UgaWYgKGMgPj0gdV84ODU5XzYub2Zmc2V0ICsgdV84ODU5XzYuc2l6ZSkKLSAgICAgIHJldHVy bihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV84ODU5XzYubWFwW2MgLSB1Xzg4NTlfNi5v ZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWlzb184ODU5XzdfdShDSEFS IGMpCi0jZWxzZQotaXNvXzg4NTlfN191KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotewotICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4YTApCi0gICAgICByZXR1cm4oYyk7Ci0g ICAgYyAmPSAweDdmOwotICAgIGlmIChjIDwgdV84ODU5Xzcub2Zmc2V0KQotICAgICAgcmV0dXJu KGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV84ODU5Xzcub2Zmc2V0ICsgdV84ODU5Xzcuc2l6ZSkK LSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV84ODU5XzcubWFwW2Mg LSB1Xzg4NTlfNy5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWlzb184 ODU5XzhfdShDSEFSIGMpCi0jZWxzZQotaXNvXzg4NTlfOF91KGMpIENIQVIgYzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotewotICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4YTApCi0gICAgICBy ZXR1cm4oYyk7Ci0gICAgYyAmPSAweDdmOwotICAgIGlmIChjIDwgdV84ODU5Xzgub2Zmc2V0KQot ICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV84ODU5Xzgub2Zmc2V0ICsgdV84 ODU5Xzguc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV84 ODU5XzgubWFwW2MgLSB1Xzg4NTlfOC5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tf QU5TSUMKLWhlYnJldzdfdShDSEFSIGMpCi0jZWxzZQotaGVicmV3N191KGMpIENIQVIgYzsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfaGVi cmV3Ny5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X2hlYnJl dzcub2Zmc2V0ICsgdV9oZWJyZXc3LnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQot ICAgICAgcmV0dXJuKHVfaGVicmV3Ny5tYXBbYyAtIHVfaGVicmV3Ny5vZmZzZXRdKTsKLX0KLQot VVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWVsb3Q5MjdfdShDSEFSIGMpCi0jZWxzZQotZWxvdDky N191KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsK LSAgICBpZiAoYyA8IHVfZWxvdDkyNy5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxz ZSBpZiAoYyA+PSB1X2Vsb3Q5Mjcub2Zmc2V0ICsgdV9lbG90OTI3LnNpemUpCi0gICAgICByZXR1 cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfZWxvdDkyNy5tYXBbYyAtIHVfZWxvdDky Ny5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWlzb184ODU5XzlfdShD SEFSIGMpCi0jZWxzZQotaXNvXzg4NTlfOV91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotewotICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4YTApCi0gICAgICByZXR1cm4oYyk7 Ci0gICAgYyAmPSAweDdmOwotICAgIGlmIChjIDwgdV84ODU5Xzkub2Zmc2V0KQotICAgICAgcmV0 dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV84ODU5Xzkub2Zmc2V0ICsgdV84ODU5Xzkuc2l6 ZSkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV84ODU5XzkubWFw W2MgLSB1Xzg4NTlfOS5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWlz b184ODU5XzEwX3UoQ0hBUiBjKQotI2Vsc2UKLWlzb184ODU5XzEwX3UoYykgQ0hBUiBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKLSAg ICAgIHJldHVybihjKTsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1Xzg4NTlfMTAub2Zm c2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV84ODU5XzEwLm9mZnNl dCArIHVfODg1OV8xMC5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJl dHVybih1Xzg4NTlfMTAubWFwW2MgLSB1Xzg4NTlfMTAub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAot I2lmZGVmIENLX0FOU0lDCi1pc29fODg1OV8xNV91KENIQVIgYykKLSNlbHNlCi1pc29fODg1OV8x NV91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjID49IDB4 ODAgJiYgYyA8IDB4YTApCi0gICAgICByZXR1cm4oYyk7Ci0gICAgYyAmPSAweDdmOwotICAgIGlm IChjIDwgdV84ODU5XzE1Lm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChj ID49IHVfODg1OV8xNS5vZmZzZXQgKyB1Xzg4NTlfMTUuc2l6ZSkKLSAgICAgIHJldHVybihjKTsK LSAgICBlbHNlCi0gICAgICByZXR1cm4odV84ODU5XzE1Lm1hcFtjIC0gdV84ODU5XzE1Lm9mZnNl dF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotYXBsMl91KENIQVIgYykKLSNlbHNl Ci1hcGwyX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMg Pj0gMHg4MCAmJiBjIDwgMHhhMCkKLSAgICAgIHJldHVybihjKTsKLSAgICBjICY9IDB4N2Y7Ci0g ICAgaWYgKGMgPCB1X2FwbDIub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYg KGMgPj0gdV9hcGwyLm9mZnNldCArIHVfYXBsMi5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAg IGVsc2UKLSAgICAgIHJldHVybih1X2FwbDIubWFwW2MgLSB1X2FwbDIub2Zmc2V0XSk7Ci19Ci0K LVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1hcGwzX3UoQ0hBUiBjKQotI2Vsc2UKLWFwbDNfdShj KSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0gICAg aWYgKGMgPCB1X2FwbDMub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMg Pj0gdV9hcGwzLm9mZnNldCArIHVfYXBsMy5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVs c2UKLSAgICAgIHJldHVybih1X2FwbDMubWFwW2MgLSB1X2FwbDMub2Zmc2V0XSk7Ci19Ci0KLVVT SE9SVAotI2lmZGVmIENLX0FOU0lDCi1hcGw0X3UoQ0hBUiBjKQotI2Vsc2UKLWFwbDRfdShjKSBD SEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYg KGMgPCB1X2FwbDQub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0g dV9hcGw0Lm9mZnNldCArIHVfYXBsNC5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UK LSAgICAgIHJldHVybih1X2FwbDQubWFwW2MgLSB1X2FwbDQub2Zmc2V0XSk7Ci19Ci0KLVVTSE9S VAotI2lmZGVmIENLX0FOU0lDCi1hcGw1X3UoQ0hBUiBjKQotI2Vsc2UKLWFwbDVfdShjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMg PCB1X2FwbDUub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV9h cGw1Lm9mZnNldCArIHVfYXBsNS5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAg ICAgIHJldHVybih1X2FwbDUubWFwW2MgLSB1X2FwbDUub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAot I2lmZGVmIENLX0FOU0lDCi1rb2k3X3UoQ0hBUiBjKQotI2Vsc2UKLWtvaTdfdShjKSBDSEFSIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1 cm4oVU5LKTsKLSAgICBpZiAoYyA8IHVfa29pNy5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0g ICAgZWxzZSBpZiAoYyA+PSB1X2tvaTcub2Zmc2V0ICsgdV9rb2k3LnNpemUpCi0gICAgICByZXR1 cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfa29pNy5tYXBbYyAtIHVfa29pNy5vZmZz ZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWRlY21jc191KENIQVIgYykKLSNl bHNlCi1kZWNtY3NfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBp ZiAoYyA+PSAweDgwICYmIGMgPCAweGEwKQotICAgICAgcmV0dXJuKGMpOwotICAgIGMgJj0gMHg3 ZjsKLSAgICBpZiAoYyA8IHVfZGVjbWNzLm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBl bHNlIGlmIChjID49IHVfZGVjbWNzLm9mZnNldCArIHVfZGVjbWNzLnNpemUpCi0gICAgICByZXR1 cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfZGVjbWNzLm1hcFtjIC0gdV9kZWNtY3Mu b2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1uZXh0c3RlcF91KENIQVIg YykKLSNlbHNlCi1uZXh0c3RlcF91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotICAgIHJldHVybih1X25leHRzdGVwLm1hcFsoYyAmIDB4N2YpIC0gdV9uZXh0c3RlcC5vZmZz ZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWRnaV91KENIQVIgYykKLSNlbHNl Ci1kZ2lfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA+ PSAweDgwICYmIGMgPCAweGEwKQotICAgICAgcmV0dXJuKGMpOwotICAgIHJldHVybih1X2RnaS5t YXBbKGMgJiAweDdmKSAtIHVfZGdpLm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19B TlNJQwotaHByb21hbjhfdShDSEFSIGMpCi0jZWxzZQotaHByb21hbjhfdShjKSBDSEFSIGM7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA+PSAweDgwICYmIGMgPCAweGEwKQot ICAgICAgcmV0dXJuKGMpOwotICAgIHJldHVybih1X2hwcm9tYW44Lm1hcFsoYyAmIDB4N2YpIC0g dV9ocHJvbWFuOC5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWNwMzdf dShDSEFSIGMpCi0jZWxzZQotY3AzN191KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotewotICAgIHJldHVybih1X2NwMzcubWFwW2MgJiAweDdmXSk7Ci19Ci0KLVVTSE9SVAotI2lm ZGVmIENLX0FOU0lDCi1jcDQzN191KENIQVIgYykKLSNlbHNlCi1jcDQzN191KGMpIENIQVIgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHJldHVybih1X2NwNDM3Lm1hcFtjICYgMHg3 Zl0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotbWF6b3ZpYV91KENIQVIgYykgLyog TWF6b3ZpYSA9IENQNDM3IHdpdGggc3Vic3RpdHV0aW9ucyAqLwotI2Vsc2UKLW1hem92aWFfdShj KSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICByZXR1cm4odV9tYXpvdmlh Lm1hcFtjICYgMHg3Zl0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotY3A4NTBfdShD SEFSIGMpCi0jZWxzZQotY3A4NTBfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsKLSAgICByZXR1cm4odV9jcDg1MC5tYXBbYyAmIDB4N2ZdKTsKLX0KLQotVVNIT1JUCi0jaWZk ZWYgQ0tfQU5TSUMKLWNwODU4X3UoQ0hBUiBjKQotI2Vsc2UKLWNwODU4X3UoYykgQ0hBUiBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgcmV0dXJuKHVfY3A4NTgubWFwW2MgJiAweDdm XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1jcDEyNTBfdShDSEFSIGMpCi0jZWxz ZQotY3AxMjUwX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgcmV0 dXJuKHVfY3AxMjUwLm1hcFtjICYgMHg3Zl0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJ QwotY3AxMjUxX3UoQ0hBUiBjKQotI2Vsc2UKLWNwMTI1MV91KGMpIENIQVIgYzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotewotICAgIHJldHVybih1X2NwMTI1MS5tYXBbYyAmIDB4N2ZdKTsKLX0K LQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWNwMTI1Ml91KENIQVIgYykKLSNlbHNlCi1jcDEy NTJfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICByZXR1cm4odV9j cDEyNTIubWFwW2MgJiAweDdmXSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1jcDEy NTNfdShDSEFSIGMpCi0jZWxzZQotY3AxMjUzX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17Ci0gICAgcmV0dXJuKHVfY3AxMjUzLm1hcFtjICYgMHg3Zl0pOwotfQotCi1VU0hP UlQKLSNpZmRlZiBDS19BTlNJQwotY3AxMjU0X3UoQ0hBUiBjKQotI2Vsc2UKLWNwMTI1NF91KGMp IENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHJldHVybih1X2NwMTI1NC5t YXBbYyAmIDB4N2ZdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWNwMTI1NV91KENI QVIgYykKLSNlbHNlCi1jcDEyNTVfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsKLSAgICByZXR1cm4odV9jcDEyNTUubWFwW2MgJiAweDdmXSk7Ci19Ci0KLVVTSE9SVAotI2lm ZGVmIENLX0FOU0lDCi1jcDEyNTZfdShDSEFSIGMpCi0jZWxzZQotY3AxMjU2X3UoYykgQ0hBUiBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgcmV0dXJuKHVfY3AxMjU2Lm1hcFtjICYg MHg3Zl0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotY3AxMjU3X3UoQ0hBUiBjKQot I2Vsc2UKLWNwMTI1N191KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAg IHJldHVybih1X2NwMTI1Ny5tYXBbYyAmIDB4N2ZdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tf QU5TSUMKLWNwMTI1OF91KENIQVIgYykKLSNlbHNlCi1jcDEyNThfdShjKSBDSEFSIGM7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICByZXR1cm4odV9jcDEyNTgubWFwW2MgJiAweDdmXSk7 Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1jcDg1Ml91KENIQVIgYykKLSNlbHNlCi1j cDg1Ml91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHJldHVybih1 X2NwODUyLm1hcFtjICYgMHg3Zl0pOwotfQotCi1VU0hPUlQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ3lyaWxsaWMgKi8KLSNpZmRlZiBDS19BTlNJQwotY3A4NTVfdShDSEFS IGMpCi0jZWxzZQotY3A4NTVfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSAgICByZXR1cm4odV9jcDg1NS5tYXBbYyAmIDB4N2ZdKTsKLX0KLQotVVNIT1JUICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1bGdhcmlhICovCi0jaWZkZWYgQ0tfQU5TSUMK LWNwODU2X3UoQ0hBUiBjKQotI2Vsc2UKLWNwODU2X3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi17Ci0gICAgcmV0dXJuKHVfY3A4NTYubWFwW2MgJiAweDdmXSk7Ci19Ci0KLVVT SE9SVAotI2lmZGVmIENLX0FOU0lDCi1jcDg1N191KENIQVIgYykKLSNlbHNlCi1jcDg1N191KGMp IENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHJldHVybih1X2NwODU3Lm1h cFtjICYgMHg3Zl0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotY3A4NjJfdShDSEFS IGMpCi0jZWxzZQotY3A4NjJfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSAgICByZXR1cm4odV9jcDg2Mi5tYXBbYyAmIDB4N2ZdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYg Q0tfQU5TSUMKLWNwODY0X3UoQ0hBUiBjKQotI2Vsc2UKLWNwODY0X3UoYykgQ0hBUiBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgcmV0dXJuKHVfY3A4NjQubWFwW2MgJiAweDdmXSk7 Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1jcDg2Nl91KENIQVIgYykKLSNlbHNlCi1j cDg2Nl91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHJldHVybih1 X2NwODY2Lm1hcFtjICYgMHg3Zl0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotY3A4 NjlfdShDSEFSIGMpCi0jZWxzZQotY3A4NjlfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsKLSAgICByZXR1cm4odV9jcDg2OS5tYXBbYyAmIDB4N2ZdKTsKLX0KLQotVVNIT1JU Ci0jaWZkZWYgQ0tfQU5TSUMKLW1hY2xhdGluX3UoQ0hBUiBjKQotI2Vsc2UKLW1hY2xhdGluX3Uo YykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgcmV0dXJuKHVfbWFjbGF0 aW4ubWFwW2MgJiAweDdmXSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1xdWlja2Ry YXdfdShDSEFSIGMpCi0jZWxzZQotcXVpY2tkcmF3X3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi17Ci0gICAgcmV0dXJuKHVfcXVpY2tkcmF3Lm1hcFtjICYgMHg3Zl0pOwotfQot Ci1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotZGVjc3BlY191KENIQVIgYykKLSNlbHNlCi1kZWNz cGVjX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgYyAmPSAweDdm OwotICAgIGlmIChjIDwgdV9kZWNzcGVjLm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBl bHNlIGlmIChjID49IHVfZGVjc3BlYy5vZmZzZXQgKyB1X2RlY3NwZWMuc2l6ZSkKLSAgICAgIHJl dHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gKHVfZGVjc3BlYy5tYXBbYyAtIHVfZGVj c3BlYy5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWRlY3RlY2hfdShD SEFSIGMpCi0jZWxzZQotZGVjdGVjaF91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfZGVjdGVjaC5vZmZzZXQpCi0gICAg ICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X2RlY3RlY2gub2Zmc2V0ICsgdV9kZWN0 ZWNoLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfZGVj dGVjaC5tYXBbYyAtIHVfZGVjdGVjaC5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tf QU5TSUMKLWRnc3BlY191KENIQVIgYykKLSNlbHNlCi1kZ3NwZWNfdShjKSBDSEFSIGM7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1X2Rnc3Bl Yy5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X2Rnc3BlYy5v ZmZzZXQgKyB1X2Rnc3BlYy5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAg IHJldHVybih1X2Rnc3BlYy5tYXBbYyAtIHVfZGdzcGVjLm9mZnNldF0pOwotfQotCi1VU0hPUlQK LSNpZmRlZiBDS19BTlNJQwotZGdsaW5lX3UoQ0hBUiBjKQotI2Vsc2UKLWRnbGluZV91KGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAo YyA8IHVfZGdsaW5lLm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49 IHVfZGdsaW5lLm9mZnNldCArIHVfZGdsaW5lLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAg ZWxzZQotICAgICAgcmV0dXJuKHVfZGdsaW5lLm1hcFtjIC0gdV9kZ2xpbmUub2Zmc2V0XSk7Ci19 Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1kZ3dvcmRfdShDSEFSIGMpCi0jZWxzZQotZGd3 b3JkX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgYyAmPSAweDdm OwotICAgIGlmIChjIDwgdV9kZ3dvcmQub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVs c2UgaWYgKGMgPj0gdV9kZ3dvcmQub2Zmc2V0ICsgdV9kZ3dvcmQuc2l6ZSkKLSAgICAgIHJldHVy bihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV9kZ3dvcmQubWFwW2MgLSB1X2Rnd29yZC5v ZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWhwbGluZV91KENIQVIgYykK LSNlbHNlCi1ocGxpbmVfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAg ICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1X2hwbGluZS5vZmZzZXQpCi0gICAgICByZXR1cm4o Yyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X2hwbGluZS5vZmZzZXQgKyB1X2hwbGluZS5zaXplKQot ICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1X2hwbGluZS5tYXBbYyAt IHVfaHBsaW5lLm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotaHBtYXRo X3UoQ0hBUiBjKQotI2Vsc2UKLWhwbWF0aF91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfaHBtYXRoLm9mZnNldCkKLSAg ICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfaHBtYXRoLm9mZnNldCArIHVfaHBt YXRoLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfaHBt YXRoLm1hcFtjIC0gdV9ocG1hdGgub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FO U0lDCi1xbnhncnBoX3UoQ0hBUiBjKQotI2Vsc2UKLXFueGdycGhfdShjKSBDSEFSIGM7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1X3FueGdy cGgub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV9xbnhncnBo Lm9mZnNldCArIHVfcW54Z3JwaC5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAg ICAgIHJldHVybih1X3FueGdycGgubWFwW2MgLSB1X3FueGdycGgub2Zmc2V0XSk7Ci19Ci0KLVVT SE9SVAotI2lmZGVmIENLX0FOU0lDCi1oejE1MDBfdShDSEFSIGMpCi0jZWxzZQotaHoxNTAwX3Uo YykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgYyAmPSAweDdmOwotICAg IGlmIChjIDwgdV9oejE1MDAub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYg KGMgPj0gdV9oejE1MDAub2Zmc2V0ICsgdV9oejE1MDAuc2l6ZSkKLSAgICAgIHJldHVybihjKTsK LSAgICBlbHNlCi0gICAgICByZXR1cm4odV9oejE1MDAubWFwW2MgLSB1X2h6MTUwMC5vZmZzZXRd KTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLXNuaWJsYW5rc191KENIQVIgYykKLSNl bHNlCi1zbmlibGFua3NfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAg ICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1X3NuaWJsYW5rcy5vZmZzZXQpCi0gICAgICByZXR1 cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X3NuaWJsYW5rcy5vZmZzZXQgKyB1X3NuaWJsYW5r cy5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1X3NuaWJs YW5rcy5tYXBbYyAtIHVfc25pYmxhbmtzLm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBD S19BTlNJQwotc25pYnJhY2tfdShDSEFSIGMpCi0jZWxzZQotc25pYnJhY2tfdShjKSBDSEFSIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1 X3NuaWJyYWNrLm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVf c25pYnJhY2sub2Zmc2V0ICsgdV9zbmlicmFjay5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAg IGVsc2UKLSAgICAgIHJldHVybih1X3NuaWJyYWNrLm1hcFtjIC0gdV9zbmlicmFjay5vZmZzZXRd KTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLXNuaWZhY2V0X3UoQ0hBUiBjKQotI2Vs c2UKLXNuaWZhY2V0X3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAg YyAmPSAweDdmOwotICAgIGlmIChjIDwgdV9zbmlmYWNldC5vZmZzZXQpCi0gICAgICByZXR1cm4o Yyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X3NuaWZhY2V0Lm9mZnNldCArIHVfc25pZmFjZXQuc2l6 ZSkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV9zbmlmYWNldC5t YXBbYyAtIHVfc25pZmFjZXQub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lD Ci1zbmlpYm1fdShDSEFSIGMpCi0jZWxzZQotc25paWJtX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi17Ci0gICAgYyAmPSAweDdmOwotICAgIGlmIChjIDwgdV9zbmlpYm0ub2Zm c2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV9zbmlpYm0ub2Zmc2V0 ICsgdV9zbmlpYm0uc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1 cm4odV9zbmlpYm0ubWFwW2MgLSB1X3NuaWlibS5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZk ZWYgQ0tfQU5TSUMKLXNuaWV1cm9fdShDSEFSIGMpCi0jZWxzZQotc25pZXVyb191KGMpIENIQVIg YzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8 IHVfc25pZXVyby5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1 X3NuaWV1cm8ub2Zmc2V0ICsgdV9zbmlldXJvLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAg ZWxzZQotICAgICAgcmV0dXJuKHVfc25pZXVyby5tYXBbYyAtIHVfc25pZXVyby5vZmZzZXRdKTsK LX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWhlYXRoMTlnX3UoQ0hBUiBjKQotI2Vsc2UK LWhlYXRoMTlnX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgYyAm PSAweDdmOwotICAgIGlmIChjIDwgdV9oZWF0aDE5Zy5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7 Ci0gICAgZWxzZSBpZiAoYyA+PSB1X2hlYXRoMTlnLm9mZnNldCArIHVfaGVhdGgxOWcuc2l6ZSkK LSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV9oZWF0aDE5Zy5tYXBb YyAtIHVfaGVhdGgxOWcub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi10 dmlnX3UoQ0hBUiBjKQotI2Vsc2UKLXR2aWdfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1X3R2aWcub2Zmc2V0KQotICAg ICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV90dmlnLm9mZnNldCArIHVfdHZpZy5z aXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1X3R2aWcubWFw W2MgLSB1X3R2aWcub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi13eXNl X2duX3UoQ0hBUiBjKQotI2Vsc2UKLXd5c2VfZ25fdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1X3d5c2VfZ24ub2Zmc2V0 KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV93eXNlX2duLm9mZnNldCAr IHVfd3lzZV9nbi5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVy bih1X3d5c2VfZ24ubWFwW2MgLSB1X3d5c2VfZ24ub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lm ZGVmIENLX0FOU0lDCi13eXNlX2cxX3UoQ0hBUiBjKQotI2Vsc2UKLXd5c2VfZzFfdShjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMg PCB1X3d5c2VfZzEub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0g dV93eXNlX2cxLm9mZnNldCArIHVfd3lzZV9nMS5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAg IGVsc2UKLSAgICAgIHJldHVybih1X3d5c2VfZzEubWFwW2MgLSB1X3d5c2VfZzEub2Zmc2V0XSk7 Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi13eXNlX2cyX3UoQ0hBUiBjKQotI2Vsc2UK LXd5c2VfZzJfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9 IDB4N2Y7Ci0gICAgaWYgKGMgPCB1X3d5c2VfZzIub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwot ICAgIGVsc2UgaWYgKGMgPj0gdV93eXNlX2cyLm9mZnNldCArIHVfd3lzZV9nMi5zaXplKQotICAg ICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1X3d5c2VfZzIubWFwW2MgLSB1 X3d5c2VfZzIub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi13eXNlX2cz X3UoQ0hBUiBjKQotI2Vsc2UKLXd5c2VfZzNfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1X3d5c2VfZzMub2Zmc2V0KQot ICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV93eXNlX2czLm9mZnNldCArIHVf d3lzZV9nMy5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1 X3d5c2VfZzMubWFwW2MgLSB1X3d5c2VfZzMub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVm IENLX0FOU0lDCi1zbWlsZXlfdShDSEFSIGMpCi0jZWxzZQotc21pbGV5X3UoYykgQ0hBUiBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgYyAmPSAweDdmOwotICAgIGlmIChjIDwgdV9z bWlsZXkub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV9zbWls ZXkub2Zmc2V0ICsgdV9zbWlsZXkuc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0g ICAgICByZXR1cm4odV9zbWlsZXkubWFwW2MgLSB1X3NtaWxleS5vZmZzZXRdKTsKLX0KLQotVVNI T1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWMwcGljc191KENIQVIgYykKLSNlbHNlCi1jMHBpY3NfdShj KSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0gICAg aWYgKGMgPCB1X2MwcGljcy5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAo YyA+PSB1X2MwcGljcy5vZmZzZXQgKyB1X2MwcGljcy5zaXplKQotICAgICAgcmV0dXJuKGMpOwot ICAgIGVsc2UKLSAgICAgIHJldHVybih1X2MwcGljcy5tYXBbYyAtIHVfYzBwaWNzLm9mZnNldF0p OwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotYzFwaWNzX3UoQ0hBUiBjKQotI2Vsc2UK LWMxcGljc191KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0g MHg3ZjsKLSAgICBpZiAoYyA8IHVfYzFwaWNzLm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAg ICBlbHNlIGlmIChjID49IHVfYzFwaWNzLm9mZnNldCArIHVfYzFwaWNzLnNpemUpCi0gICAgICBy ZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfYzFwaWNzLm1hcFtjIC0gdV9jMXBp Y3Mub2Zmc2V0XSk7Ci19Ci0KLSNpZmRlZiBLQU5KSSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBLYW5qaS9Vbmljb2RlIGZ1bmN0aW9ucyAqLwotCi1zdGF0aWMgbG9uZyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogU3RhdGlzdGljcyBjb3VudGVycyAqLwotICBiYWQgPSAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFTU9WRSBUSEVTRSBMQVRFUi4uLiAqLwot ICBrYW5qaSA9IDAsCi0gIGthbmEgPSAwLAotICBncmVlayA9IDAsCi0gIGN5cmlsbGljID0gMCwK LSAgc3BlY2lhbCA9IDAsCi0gIHJvbWFuID0gMDsKLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMK LXNqX3RvX3VuKFVTSE9SVCBzaikgICAgICAgICAgICAgICAgICAgICAvKiBTaGlmdC1KSVMgdG8g VW5pY29kZSAqLwotI2Vsc2UKLXNqX3RvX3VuKHNqKSBVU0hPUlQgc2o7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsKLQotLyogS2FuamkgYmxvY2tzICovCi0KLSAgICBpZiAoc2ogPj0gMHg4MTQw KSB7ICAgICAgICAgICAgICAgICAvKiBBbGwgcG9zc2libGUgS2FuamlzICovCi0gICAgICAgIGth bmppKys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogT3B0aW1pc3RpY2FsbHkgY291bnQgYSBL YW5qaSAqLwotICAgICAgICBpZiAoc2ogPD0gMHg5ZmZjKSB7ICAgICAgICAgICAgIC8qIDc4Njkt ZWxlbWVudCB0YWJsZSAqLwotICAgICAgICAgICAgcmV0dXJuKHNqdV84MTQwW3NqIC0gMHg4MTQw XSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2ogPj0gMHhlMDQwICYmIHNqIDw9IDB4ZWFhNCkgeyAv KiAyNjYwLWVsZW1lbnQgdGFibGUgKi8KLSAgICAgICAgICAgIHJldHVybihzanVfZTA0MFtzaiAt IDB4ZTA0MF0pOwotICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4ZjA0MCkgeyAgICAgIC8qIFVz ZXItZGVmaW5lZCBhcmVhcyAqLwotICAgICAgICAgICAgaWYgKHNqIDw9IDB4ZjBmYykgeyAgICAg ICAgIC8qIHRlbiAxODktY2hhciBjaHVua3MgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4oMHhl MDAwICsgKHNqIC0gMHhmMDQwKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4ZjE0 MCAmJiBzaiA8PSAweGYxZmMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4oMHhlMGJjICsgKHNq IC0gMHhmMTQwKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4ZjI0MCAmJiBzaiA8 PSAweGYyZmMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4oMHhlMTc4ICsgKHNqIC0gMHhmMjQw KSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4ZjM0MCAmJiBzaiA8PSAweGYzZmMp IHsKLSAgICAgICAgICAgICAgICByZXR1cm4oMHhlMjM0ICsgKHNqIC0gMHhmMzQwKSk7Ci0gICAg ICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4ZjQ0MCAmJiBzaiA8PSAweGY0ZmMpIHsKLSAgICAg ICAgICAgICAgICByZXR1cm4oMHhlMmYwICsgKHNqIC0gMHhmNDQwKSk7Ci0gICAgICAgICAgICB9 IGVsc2UgaWYgKHNqID49IDB4ZjU0MCAmJiBzaiA8PSAweGY1ZmMpIHsKLSAgICAgICAgICAgICAg ICByZXR1cm4oMHhlM2FjICsgKHNqIC0gMHhmNTQwKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg KHNqID49IDB4ZjY0MCAmJiBzaiA8PSAweGY2ZmMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4o MHhlNDY4ICsgKHNqIC0gMHhmNjQwKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4 Zjc0MCAmJiBzaiA8PSAweGY3ZmMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4oMHhlNTI0ICsg KHNqIC0gMHhmNzQwKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4Zjg0MCAmJiBz aiA8PSAweGY4ZmMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4oMHhlNWUwICsgKHNqIC0gMHhm ODQwKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4Zjk0MCAmJiBzaiA8PSAweGY5 ZmMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4oMHhlNjljICsgKHNqIC0gMHhmOTQwKSk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAga2FuamktLTsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBOb25lIG9mIHRoZSBhYm92ZSwgdW5jb3VudCAqLwotICAgIH0KLQotLyogQzAg LyBIYWxmd2lkdGgtUm9tYW4gLyBDMSBibG9jayAoMHgwMC0weDlmLCBubyBob2xlcykgKi8KLQot ICAgIGVsc2UgaWYgKHNqIDwgMHgwMGEwKSB7Ci0gICAgICAgIHJvbWFuKys7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ291bnQgYSBSb21hbiAqLwotICAgICAgICBpZiAoc2ogPT0gMHg1Yykg eyAgICAgICAgICAgICAgIC8qIFllbiBzaWduICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMGE1 KTsKLSAgICAgICAgfSBlbHNlIGlmIChzaiA9PSAweDdlKSB7ICAgICAgICAvKiBPdmVybGluZSAo bWFjcm9uKSAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MjAzZSk7Ci0gICAgICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBvciBIYWxmd2lkdGggUm9tYW4gKi8K LSAgICAgICAgICAgIHJldHVybihzaik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLS8qIEhhbGZ3aWR0 aCBLYXRha2FuYSBibG9jayAoMHhhMC0weGRmLCBubyBob2xlcykgKi8KLQotICAgIGVsc2UgaWYg KHNqID49IDB4YTEgJiYgc2ogPD0gMHhkZikgewotICAgICAgICBrYW5hKys7Ci0gICAgICAgIHJl dHVybihzaiArIDB4ZmVjMCk7Ci0gICAgfQotCi0vKiBDYXRjaC1hbGwgbXVzdCBiZSBmaW5hbCAq LwotCi0gICAgYmFkKys7Ci0gICAgcmV0dXJuKDB4ZmZmZCk7Ci19Ci0KLVVTSE9SVAotI2lmZGVm IENLX0FOU0lDCi11bl90b19zaihVU0hPUlQgdW4pICAgICAgICAgICAgICAgICAgICAgLyogVW5p Y29kZSB0byBTaGlmdC1KSVMgKi8KLSNlbHNlCi11bl90b19zaih1bikgVVNIT1JUIHVuOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17Ci0KLSAgICBpZiAodW4gPCAweDAwYTApIHsKLSAgICAgICAg c3dpdGNoICh1bikgewotICAgICAgICAgIGNhc2UgMHgwMDVjOiByb21hbisrOyByZXR1cm4oMHg4 MTVmKTsgLyogQmFja3NsYXNoICovCi0gICAgICAgICAgY2FzZSAweDAwN2U6IGJhZCsrOyAgIHJl dHVybigweGZmZmQpOyAvKiBObyB0aWxkZSBpbiBTaGlmdC1KSVMgKi8KLSAgICAgICAgICBkZWZh dWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIG9yIEMwL0MxIGNvbnRy b2wgKi8KLSAgICAgICAgICAgIHJvbWFuKys7Ci0gICAgICAgICAgICByZXR1cm4odW4pOwotICAg ICAgICB9Ci0gICAgfQotICAgIGlmICh1biA+PSAweDAwYTAgJiYgdW4gPCAweDAzOTEpIHsgLyog TGF0aW4tMSBzeW1ib2xzICovCi0gICAgICAgIHJvbWFuKys7Ci0gICAgICAgIHN3aXRjaCh1bikg ewotICAgICAgICAgIGNhc2UgMHgwMEEyOiByZXR1cm4oMHg4MTkxKTsKLSAgICAgICAgICBjYXNl IDB4MDBBMzogcmV0dXJuKDB4ODE5Mik7Ci0gICAgICAgICAgY2FzZSAweDAwQTU6IHJldHVybigw eDAwNUMpOyAgLyogWWVuICovCi0gICAgICAgICAgY2FzZSAweDAwQTc6IHJldHVybigweDgxOTgp OwotICAgICAgICAgIGNhc2UgMHgwMEE4OiByZXR1cm4oMHg4MTRFKTsKLSAgICAgICAgICBjYXNl IDB4MDBBQzogcmV0dXJuKDB4ODFDQSk7Ci0gICAgICAgICAgY2FzZSAweDAwQjA6IHJldHVybigw eDgxOEIpOwotICAgICAgICAgIGNhc2UgMHgwMEIxOiByZXR1cm4oMHg4MTdEKTsKLSAgICAgICAg ICBjYXNlIDB4MDBCNDogcmV0dXJuKDB4ODE0Qyk7Ci0gICAgICAgICAgY2FzZSAweDAwQjY6IHJl dHVybigweDgxRjcpOwotICAgICAgICAgIGNhc2UgMHgwMEQ3OiByZXR1cm4oMHg4MTdFKTsKLSAg ICAgICAgICBjYXNlIDB4MDBGNzogcmV0dXJuKDB4ODE4MCk7Ci0gICAgICAgICAgZGVmYXVsdDoK LSAgICAgICAgICAgIHJvbWFuLS07Ci0gICAgICAgICAgICBiYWQrKzsKLSAgICAgICAgICAgIHJl dHVybigweGZmZmQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICh1biA+PSAweDAzOTEgJiYg dW4gPCAweDA0MDEpIHsgIC8qIEdyZWVrICovCi0gICAgICAgIGdyZWVrKys7Ci0gICAgICAgIGlm ICh1biA8PSAweDAzOWMpCi0gICAgICAgICAgcmV0dXJuKHVzal8wMzkxW3VuLTB4MDM5MV0pOwot ICAgICAgICBncmVlay0tOwotICAgICAgICBiYWQrKzsKLSAgICAgICAgcmV0dXJuKDB4ZmZmZCk7 Ci0gICAgfQotICAgIGlmICh1biA+PSAweDA0MDEgJiYgdW4gPCAweDIwMTApIHsgIC8qIEN5cmls bGljICovCi0gICAgICAgIGN5cmlsbGljKys7Ci0gICAgICAgIGlmICh1biA8PSAweDA0NTEpCi0g ICAgICAgICAgcmV0dXJuKHVzal8wNDAxW3VuLTB4MDQwMV0pOwotICAgICAgICBjeXJpbGxpYy0t OwotICAgICAgICBiYWQrKzsKLSAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0gICAgfQotICAgIGlm ICh1biA+PSAweDIwMTAgJiYgdW4gPCAweDI1MDApIHsgIC8qIEdlbmVyYWwgcHVuY3R1YXRpb24g Ki8KLSAgICAgICAgc3BlY2lhbCsrOwotICAgICAgICBzd2l0Y2godW4pIHsKLSAgICAgICAgICBj YXNlIDB4MjAxMDogcmV0dXJuKDB4ODE1RCk7Ci0gICAgICAgICAgY2FzZSAweDIwMTU6IHJldHVy bigweDgxNUMpOwotICAgICAgICAgIGNhc2UgMHgyMDE2OiByZXR1cm4oMHg4MTYxKTsKLSAgICAg ICAgICBjYXNlIDB4MjAxODogcmV0dXJuKDB4ODE2NSk7Ci0gICAgICAgICAgY2FzZSAweDIwMTk6 IHJldHVybigweDgxNjYpOwotICAgICAgICAgIGNhc2UgMHgyMDFDOiByZXR1cm4oMHg4MTY3KTsK LSAgICAgICAgICBjYXNlIDB4MjAxRDogcmV0dXJuKDB4ODE2OCk7Ci0gICAgICAgICAgY2FzZSAw eDIwMjA6IHJldHVybigweDgxRjUpOwotICAgICAgICAgIGNhc2UgMHgyMDIxOiByZXR1cm4oMHg4 MUY2KTsKLSAgICAgICAgICBjYXNlIDB4MjAyNTogcmV0dXJuKDB4ODE2NCk7Ci0gICAgICAgICAg Y2FzZSAweDIwMjY6IHJldHVybigweDgxNjMpOwotICAgICAgICAgIGNhc2UgMHgyMDMwOiByZXR1 cm4oMHg4MUYxKTsKLSAgICAgICAgICBjYXNlIDB4MjAzMjogcmV0dXJuKDB4ODE4Qyk7Ci0gICAg ICAgICAgY2FzZSAweDIwMzM6IHJldHVybigweDgxOEQpOwotICAgICAgICAgIGNhc2UgMHgyMDNC OiByZXR1cm4oMHg4MUE2KTsKLSAgICAgICAgICBjYXNlIDB4MjAzRTogcmV0dXJuKDB4MDA3RSk7 Ci0gICAgICAgICAgY2FzZSAweDIxMDM6IHJldHVybigweDgxOEUpOyAgLyogTGV0dGVybGlrZSBz eW1ib2xzICovCi0gICAgICAgICAgY2FzZSAweDIxMkI6IHJldHVybigweDgxRjApOwotICAgICAg ICAgIGNhc2UgMHgyMTkwOiByZXR1cm4oMHg4MUE5KTsgIC8qIEFycm93cyAqLwotICAgICAgICAg IGNhc2UgMHgyMTkxOiByZXR1cm4oMHg4MUFBKTsKLSAgICAgICAgICBjYXNlIDB4MjE5MjogcmV0 dXJuKDB4ODFBOCk7Ci0gICAgICAgICAgY2FzZSAweDIxOTM6IHJldHVybigweDgxQUIpOwotICAg ICAgICAgIGNhc2UgMHgyMUQyOiByZXR1cm4oMHg4MUNCKTsKLSAgICAgICAgICBjYXNlIDB4MjFE NDogcmV0dXJuKDB4ODFDQyk7Ci0gICAgICAgICAgY2FzZSAweDIyMDA6IHJldHVybigweDgxQ0Qp OyAgLyogTWF0aCAqLwotICAgICAgICAgIGNhc2UgMHgyMjAyOiByZXR1cm4oMHg4MUREKTsKLSAg ICAgICAgICBjYXNlIDB4MjIwMzogcmV0dXJuKDB4ODFDRSk7Ci0gICAgICAgICAgY2FzZSAweDIy MDc6IHJldHVybigweDgxREUpOwotICAgICAgICAgIGNhc2UgMHgyMjA4OiByZXR1cm4oMHg4MUI4 KTsKLSAgICAgICAgICBjYXNlIDB4MjIwQjogcmV0dXJuKDB4ODFCOSk7Ci0gICAgICAgICAgY2Fz ZSAweDIyMTI6IHJldHVybigweDgxN0MpOwotICAgICAgICAgIGNhc2UgMHgyMjFBOiByZXR1cm4o MHg4MUUzKTsKLSAgICAgICAgICBjYXNlIDB4MjIxRDogcmV0dXJuKDB4ODFFNSk7Ci0gICAgICAg ICAgY2FzZSAweDIyMUU6IHJldHVybigweDgxODcpOwotICAgICAgICAgIGNhc2UgMHgyMjIwOiBy ZXR1cm4oMHg4MURBKTsKLSAgICAgICAgICBjYXNlIDB4MjIyNzogcmV0dXJuKDB4ODFDOCk7Ci0g ICAgICAgICAgY2FzZSAweDIyMjg6IHJldHVybigweDgxQzkpOwotICAgICAgICAgIGNhc2UgMHgy MjI5OiByZXR1cm4oMHg4MUJGKTsKLSAgICAgICAgICBjYXNlIDB4MjIyQTogcmV0dXJuKDB4ODFC RSk7Ci0gICAgICAgICAgY2FzZSAweDIyMkI6IHJldHVybigweDgxRTcpOwotICAgICAgICAgIGNh c2UgMHgyMjJDOiByZXR1cm4oMHg4MUU4KTsKLSAgICAgICAgICBjYXNlIDB4MjIzNDogcmV0dXJu KDB4ODE4OCk7Ci0gICAgICAgICAgY2FzZSAweDIyMzU6IHJldHVybigweDgxRTYpOwotICAgICAg ICAgIGNhc2UgMHgyMjNEOiByZXR1cm4oMHg4MUU0KTsKLSAgICAgICAgICBjYXNlIDB4MjI1Mjog cmV0dXJuKDB4ODFFMCk7Ci0gICAgICAgICAgY2FzZSAweDIyNjA6IHJldHVybigweDgxODIpOwot ICAgICAgICAgIGNhc2UgMHgyMjYxOiByZXR1cm4oMHg4MURGKTsKLSAgICAgICAgICBjYXNlIDB4 MjI2NjogcmV0dXJuKDB4ODE4NSk7Ci0gICAgICAgICAgY2FzZSAweDIyNjc6IHJldHVybigweDgx ODYpOwotICAgICAgICAgIGNhc2UgMHgyMjZBOiByZXR1cm4oMHg4MUUxKTsKLSAgICAgICAgICBj YXNlIDB4MjI2QjogcmV0dXJuKDB4ODFFMik7Ci0gICAgICAgICAgY2FzZSAweDIyODI6IHJldHVy bigweDgxQkMpOwotICAgICAgICAgIGNhc2UgMHgyMjgzOiByZXR1cm4oMHg4MUJEKTsKLSAgICAg ICAgICBjYXNlIDB4MjI4NjogcmV0dXJuKDB4ODFCQSk7Ci0gICAgICAgICAgY2FzZSAweDIyODc6 IHJldHVybigweDgxQkIpOwotICAgICAgICAgIGNhc2UgMHgyMkE1OiByZXR1cm4oMHg4MURCKTsK LSAgICAgICAgICBjYXNlIDB4MjMxMjogcmV0dXJuKDB4ODFEQyk7ICAvKiBBcmMgKi8KLSAgICAg ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3BlY2lhbC0tOwotICAgICAgICAgICAgYmFkKys7 Ci0gICAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo dW4gPj0gMHgyNTAwICYmIHVuIDwgMHgzMDAwKSB7ICAvKiBCb3ggZHJhd2luZyAqLwotICAgICAg ICBzcGVjaWFsKys7Ci0gICAgICAgIHN3aXRjaCh1bikgewotICAgICAgICAgIGNhc2UgMHgyNTAw OiByZXR1cm4oMHg4NDlGKTsKLSAgICAgICAgICBjYXNlIDB4MjUwMTogcmV0dXJuKDB4ODRBQSk7 Ci0gICAgICAgICAgY2FzZSAweDI1MDI6IHJldHVybigweDg0QTApOwotICAgICAgICAgIGNhc2Ug MHgyNTAzOiByZXR1cm4oMHg4NEFCKTsKLSAgICAgICAgICBjYXNlIDB4MjUwQzogcmV0dXJuKDB4 ODRBMSk7Ci0gICAgICAgICAgY2FzZSAweDI1MEY6IHJldHVybigweDg0QUMpOwotICAgICAgICAg IGNhc2UgMHgyNTEwOiByZXR1cm4oMHg4NEEyKTsKLSAgICAgICAgICBjYXNlIDB4MjUxMzogcmV0 dXJuKDB4ODRBRCk7Ci0gICAgICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigweDg0QTQpOwotICAg ICAgICAgIGNhc2UgMHgyNTE3OiByZXR1cm4oMHg4NEFGKTsKLSAgICAgICAgICBjYXNlIDB4MjUx ODogcmV0dXJuKDB4ODRBMyk7Ci0gICAgICAgICAgY2FzZSAweDI1MUI6IHJldHVybigweDg0QUUp OwotICAgICAgICAgIGNhc2UgMHgyNTFDOiByZXR1cm4oMHg4NEE1KTsKLSAgICAgICAgICBjYXNl IDB4MjUxRDogcmV0dXJuKDB4ODRCQSk7Ci0gICAgICAgICAgY2FzZSAweDI1MjA6IHJldHVybigw eDg0QjUpOwotICAgICAgICAgIGNhc2UgMHgyNTIzOiByZXR1cm4oMHg4NEIwKTsKLSAgICAgICAg ICBjYXNlIDB4MjUyNDogcmV0dXJuKDB4ODRBNyk7Ci0gICAgICAgICAgY2FzZSAweDI1MjU6IHJl dHVybigweDg0QkMpOwotICAgICAgICAgIGNhc2UgMHgyNTI4OiByZXR1cm4oMHg4NEI3KTsKLSAg ICAgICAgICBjYXNlIDB4MjUyQjogcmV0dXJuKDB4ODRCMik7Ci0gICAgICAgICAgY2FzZSAweDI1 MkM6IHJldHVybigweDg0QTYpOwotICAgICAgICAgIGNhc2UgMHgyNTJGOiByZXR1cm4oMHg4NEI2 KTsKLSAgICAgICAgICBjYXNlIDB4MjUzMDogcmV0dXJuKDB4ODRCQik7Ci0gICAgICAgICAgY2Fz ZSAweDI1MzM6IHJldHVybigweDg0QjEpOwotICAgICAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4o MHg4NEE4KTsKLSAgICAgICAgICBjYXNlIDB4MjUzNzogcmV0dXJuKDB4ODRCOCk7Ci0gICAgICAg ICAgY2FzZSAweDI1Mzg6IHJldHVybigweDg0QkQpOwotICAgICAgICAgIGNhc2UgMHgyNTNCOiBy ZXR1cm4oMHg4NEIzKTsKLSAgICAgICAgICBjYXNlIDB4MjUzQzogcmV0dXJuKDB4ODRBOSk7Ci0g ICAgICAgICAgY2FzZSAweDI1M0Y6IHJldHVybigweDg0QjkpOwotICAgICAgICAgIGNhc2UgMHgy NTQyOiByZXR1cm4oMHg4NEJFKTsKLSAgICAgICAgICBjYXNlIDB4MjU0QjogcmV0dXJuKDB4ODRC NCk7Ci0gICAgICAgICAgY2FzZSAweDI1QTA6IHJldHVybigweDgxQTEpOyAgLyogR2VvbWV0cmlj IHNoYXBlcyAqLwotICAgICAgICAgIGNhc2UgMHgyNUExOiByZXR1cm4oMHg4MUEwKTsKLSAgICAg ICAgICBjYXNlIDB4MjVCMjogcmV0dXJuKDB4ODFBMyk7Ci0gICAgICAgICAgY2FzZSAweDI1QjM6 IHJldHVybigweDgxQTIpOwotICAgICAgICAgIGNhc2UgMHgyNUJDOiByZXR1cm4oMHg4MUE1KTsK LSAgICAgICAgICBjYXNlIDB4MjVCRDogcmV0dXJuKDB4ODFBNCk7Ci0gICAgICAgICAgY2FzZSAw eDI1QzY6IHJldHVybigweDgxOUYpOwotICAgICAgICAgIGNhc2UgMHgyNUM3OiByZXR1cm4oMHg4 MTlFKTsKLSAgICAgICAgICBjYXNlIDB4MjVDQjogcmV0dXJuKDB4ODE5Qik7Ci0gICAgICAgICAg Y2FzZSAweDI1Q0U6IHJldHVybigweDgxOUQpOwotICAgICAgICAgIGNhc2UgMHgyNUNGOiByZXR1 cm4oMHg4MTlDKTsKLSAgICAgICAgICBjYXNlIDB4MjVFRjogcmV0dXJuKDB4ODFGQyk7Ci0gICAg ICAgICAgY2FzZSAweDI2MDU6IHJldHVybigweDgxOUEpOyAgLyogTWlzYyBzeW1ib2xzICovCi0g ICAgICAgICAgY2FzZSAweDI2MDY6IHJldHVybigweDgxOTkpOwotICAgICAgICAgIGNhc2UgMHgy NjQwOiByZXR1cm4oMHg4MThBKTsKLSAgICAgICAgICBjYXNlIDB4MjY0MjogcmV0dXJuKDB4ODE4 OSk7Ci0gICAgICAgICAgY2FzZSAweDI2NkE6IHJldHVybigweDgxRjQpOwotICAgICAgICAgIGNh c2UgMHgyNjZEOiByZXR1cm4oMHg4MUYzKTsKLSAgICAgICAgICBjYXNlIDB4MjY2RjogcmV0dXJu KDB4ODFGMik7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHNwZWNpYWwtLTsKLSAg ICAgICAgICAgIGJhZCsrOwotICAgICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0gICAgICAgIH0K LSAgICB9Ci0gICAgaWYgKHVuID49IDB4MzAwMCAmJiB1biA8IDB4NGUwMCkgeyAgLyogQ0pLIHN5 bWJvbHMgJiBwdW5jICovCi0gICAgICAgIGthbmppKys7Ci0gICAgICAgIGlmICh1biA8PSAweDMw ZmYpCi0gICAgICAgICAgcmV0dXJuKHVzal8zMDAwW3VuLTB4MzAwMF0pOwotICAgICAgICBrYW5q aS0tOwotICAgICAgICBiYWQrKzsKLSAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0gICAgfQotICAg IGlmICh1biA+PSAweGZmMDAgJiYgdW4gPCAweGZmZmYpIHsgIC8qIEhhbGYvZnVsbC13aWR0aCBS b21hbiAmIEthdGFrYW5hICovCi0gICAgICAgIGlmICh1biA8PSAweGZmOWYpIHsKLSAgICAgICAg ICAgIGlmICh1biA+IDB4ZmY2MCkKLSAgICAgICAgICAgICAga2FuYSsrOwotICAgICAgICAgICAg cmV0dXJuKHVzal9mZjAwW3VuLTB4ZmYwMF0pOwotICAgICAgICB9Ci0gICAgICAgIGJhZCsrOwot ICAgICAgICByZXR1cm4oMHhmZmZkKTsKLSAgICB9Ci0gICAgaWYgKHVuID49IDB4NGUwMCAmJiB1 biA8IDB4ZTAwMCkgeyAgLyogS2FuamkgKi8KLSAgICAgICAga2FuamkrKzsKLSAgICAgICAgaWYg KHVuIDw9IDB4OWZhMCkKLSAgICAgICAgICByZXR1cm4odXNqXzRlMDBbdW4tMHg0ZTAwXSk7Ci0g ICAgICAgIGthbmppLS07Ci0gICAgICAgIGJhZCsrOwotICAgICAgICByZXR1cm4oMHhmZmZkKTsK LSAgICB9Ci0gICAgaWYgKHVuID49IDB4ZTAwMCAmJiB1biA8IDB4ZmYwMCkgeyAgLyogVXNlci1k ZWZpbmVkIChHYWlqaSkgKi8KLSAgICAgICAga2FuamkrKzsKLSAgICAgICAgaWYgKHVuIDw9IDB4 ZTBiYikgeyAgICAgICAgICAgICAvKiB0ZW4gMTg5LWNoYXIgY2h1bmtzICovCi0gICAgICAgICAg ICByZXR1cm4oMHhmMDQwICsgKHVuIC0gMHhlMDAwKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodW4g Pj0gMHhlMGJjICYmIHVuIDw9IDB4ZTE3NykgewotICAgICAgICAgICAgcmV0dXJuKDB4ZjE0MCAr ICh1biAtIDB4ZTBiYykpOwotICAgICAgICB9IGVsc2UgaWYgKHVuID49IDB4ZTE3OCAmJiB1biA8 PSAweGUyMzMpIHsKLSAgICAgICAgICAgIHJldHVybigweGYyNDAgKyAodW4gLSAweGUxNzgpKTsK LSAgICAgICAgfSBlbHNlIGlmICh1biA+PSAweGUyMzQgJiYgdW4gPD0gMHhlMmVmKSB7Ci0gICAg ICAgICAgICByZXR1cm4oMHhmMzQwICsgKHVuIC0gMHhlMjM0KSk7Ci0gICAgICAgIH0gZWxzZSBp ZiAodW4gPj0gMHhlMmYwICYmIHVuIDw9IDB4ZTNhYikgewotICAgICAgICAgICAgcmV0dXJuKDB4 ZjQ0MCArICh1biAtIDB4ZTJmMCkpOwotICAgICAgICB9IGVsc2UgaWYgKHVuID49IDB4ZTNhYyAm JiB1biA8PSAweGU0NjcpIHsKLSAgICAgICAgICAgIHJldHVybigweGY1NDAgKyAodW4gLSAweGUz YWMpKTsKLSAgICAgICAgfSBlbHNlIGlmICh1biA+PSAweGU0NjggJiYgdW4gPD0gMHhlNTIzKSB7 Ci0gICAgICAgICAgICByZXR1cm4oMHhmNjQwICsgKHVuIC0gMHhlNDY4KSk7Ci0gICAgICAgIH0g ZWxzZSBpZiAodW4gPj0gMHhlNTI0ICYmIHVuIDw9IDB4ZTVkZikgewotICAgICAgICAgICAgcmV0 dXJuKDB4Zjc0MCArICh1biAtIDB4ZTUyNCkpOwotICAgICAgICB9IGVsc2UgaWYgKHVuID49IDB4 ZTVlMCAmJiB1biA8PSAweGU2OWIpIHsKLSAgICAgICAgICAgIHJldHVybigweGY4NDAgKyAodW4g LSAweGU1ZTApKTsKLSAgICAgICAgfSBlbHNlIGlmICh1biA+PSAweGU2OWMgJiYgdW4gPD0gMHhl NzU3KSB7Ci0gICAgICAgICAgICByZXR1cm4oMHhmOTQwICsgKHVuIC0gMHhlNjljKSk7Ci0gICAg ICAgIH0KLSAgICAgICAgYmFkKys7Ci0gICAgICAgIHJldHVybigweGZmZmQpOwotICAgIH0KLSAg ICAvKiBOT1RSRUFDSEVEICovCi0gICAgLyogU29tZSBjb21waWxlcnMgKGNvcnJlY3RseSkgd2Fy biBvZiAic3RhdGVtZW50IG5vdCByZWFjaGVkIiBoZXJlLiAqLwotICAgIC8qIEJ1dCBvdGhlcnMg Z2l2ZSB1cCB0aGUgZ2hvc3Qgd2l0aCAibm8gcmV0dXJuIHZhbHVlIi4gIFRoZSBmb3JtZXIgKi8K LSAgICAvKiBpcyB0aGUgbGVzc2VyIG9mIHR3byBldmlscy4gKi8KLSAgICBiYWQrKzsKLSAgICBy ZXR1cm4oMHhmZmZkKTsKLX0KLSNlbmRpZiAvKiBLQU5KSSAqLwotCi0vKiBVbmljb2RlLXRvLWJs YWggZnVuY3Rpb25zLCB0eF9ibGFoKCkuICovCi0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJ QwotdHhfcHVuYyhVU0hPUlQgYykKLSNlbHNlCi10eF9wdW5jKGMpIFVTSE9SVCBjOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPj0gMHgyMDAwICYmIGMgPD0gMHgyMDBhKSAg ICAgLyogVmFyaW91cy13aWR0aCBzcGFjZXMgKi8KLSAgICAgIHJldHVybigoQ0hBUikoMHgyMCkp OwotICAgIGVsc2UgaWYgKGMgPj0gMHgyMDEwICYmIGMgPD0gMHgyMDE1KSAvKiBWYXJpb3VzLXdp ZHRoIGRhc2hlcyAqLwotICAgICAgcmV0dXJuKChDSEFSKSctJyk7Ci0gICAgZWxzZSBpZiAoYyA+ PSAweDIwMTggJiYgYyA8PSAweDIwMWIpIC8qIEFzc29ydGVkIHNpbmdsZSBxdW90ZXMgKi8KLSAg ICAgIHJldHVybigoQ0hBUikweDI3KTsKLSAgICBlbHNlIGlmIChjID49IDB4MjAxYyAmJiBjIDw9 IDB4MjAxZikgLyogQXNzb3J0ZWQgZG91YmxlIHF1b3RlcyAqLwotICAgICAgcmV0dXJuKChDSEFS KTB4MjIpOwotICAgIGVsc2UgaWYgKChjID49IDB4MjAyMiAmJiBjIDw9IDB4MjAyNCkgfHwgYyA9 PSAweDIwNDMpIC8qIEJ1bGxldHMgKi8KLSAgICAgIHJldHVybigoQ0hBUikweGI3KTsKLSAgICBz d2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHgyMDM5OiAgICAgICAgICAgICAgICAgICAgICAvKiBM ZXNzLXRoYW4gc2lnbiAqLwotICAgICAgICByZXR1cm4oKENIQVIpMHgzYyk7Ci0gICAgICBjYXNl IDB4MjAzYTogICAgICAgICAgICAgICAgICAgICAgLyogR3JlYXRlci10aGFuIHNpZ24gKi8KLSAg ICAgICAgcmV0dXJuKChDSEFSKTB4M2UpOwotICAgICAgY2FzZSAweDIwNDQ6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFNvbGlkdXMgLT4gU2xhc2ggKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKTB4 MmYpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci19Ci0KLQot aW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBMYXRpbi0xICov Ci0jaWZkZWYgQ0tfQU5TSUMKLXR4X2lkZW50KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2lkZW50KGMp IFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPT0gMHgyMDNl KSAgICAgICAgICAgICAgICAgICAgLyogT3ZlcmxpbmUgLT4gTWFjcm9uICovCi0gICAgICByZXR1 cm4oKENIQVIpMHhhZik7Ci0gICAgZWxzZSBpZiAoYyA8IDB4MTAwKSAgICAgICAgICAgICAgICAg LyogTGF0aW4tMSByYW5nZSAqLwotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAg IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9yIG1heWJlIGZyb20gcHVu Y3R1YXRpb24gYmxvY2sgKi8KLSAgICAgIHJldHVybih0eF9wdW5jKGMpKTsKLX0KLQotaW50Ci0j aWZkZWYgQ0tfQU5TSUMKLXR4X3VzYXNjaWkoVVNIT1JUIGMpCi0jZWxzZQotdHhfdXNhc2NpaShj KSBVU0hPUlQgYzsgICAgICAgICAgICAgICAgIC8qIFVTIEFTQ0lJICovCi0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4ODApCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAw eGZmKSk7Ci0gICAgZWxzZSBpZiAoYyA+PSAweDIwMDAgJiYgYyA8PSAweDIwMGEpIC8qIFZhcmlv dXMtd2lkdGggc3BhY2VzICovCi0gICAgICByZXR1cm4oKENIQVIpKDB4MjApKTsKLSAgICBlbHNl IGlmIChjID49IDB4MjAxMCAmJiBjIDw9IDB4MjAxNSkgLyogVmFyaW91cy13aWR0aCBkYXNoZXMg Ki8KLSAgICAgIHJldHVybigoQ0hBUiknLScpOwotICAgIGVsc2UgaWYgKGMgPj0gMHgyMDE4ICYm IGMgPD0gMHgyMDFiKSAvKiBBc3NvcnRlZCBzaW5nbGUgcXVvdGVzICovCi0gICAgICByZXR1cm4o KENIQVIpMHgyNyk7Ci0gICAgZWxzZSBpZiAoYyA+PSAweDIwMWMgJiYgYyA8PSAweDIwMWYpIC8q IEFzc29ydGVkIGRvdWJsZSBxdW90ZXMgKi8KLSAgICAgIHJldHVybigoQ0hBUikweDIyKTsKLSAg ICBlbHNlIGlmICgoYyA+PSAweDIwMjIgJiYgYyA8PSAweDIwMjQpIHx8IGMgPT0gMHgyMDQzKSAv KiBCdWxsZXRzICovCi0gICAgICByZXR1cm4oKENIQVIpMHhiNyk7Ci0gICAgc3dpdGNoIChjKSB7 Ci0gICAgICBjYXNlIDB4MjAzOTogICAgICAgICAgICAgICAgICAgICAgLyogTGVzcy10aGFuIHNp Z24gKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKTB4M2MpOwotICAgICAgY2FzZSAweDIwM2E6ICAg ICAgICAgICAgICAgICAgICAgIC8qIEdyZWF0ZXItdGhhbiBzaWduICovCi0gICAgICAgIHJldHVy bigoQ0hBUikweDNlKTsKLSAgICAgIGNhc2UgMHgyMDQ0OiAgICAgICAgICAgICAgICAgICAgICAv KiBTb2xpZHVzIC0+IFNsYXNoICovCi0gICAgICAgIHJldHVybigoQ0hBUikweDJmKTsKLSAgICB9 Ci0gICAgLyoKLSAgICAgIEhlcmUgd2UgbWlnaHQgYWxzbyAoYSkgbWFwIGFjY2VudGVkIFJvbWFu IGxldHRlcnMgdG8gdW5hY2NlbnRlZCBvbmVzOwotICAgICAgKGIpIG1hcCBHcmVlay9DeXJpbGxp YyBBIChldGMpIHRvIFJvbWFuLCBhbmQgc28gb24uCi0gICAgKi8KLSAgICByZXR1cm4oKGMgJiAw eGZmODApID8gLTEgOiAoQ0hBUikoYyAmIDB4N2YpKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5T SUMKLXR4X2JyaXRpc2goVVNIT1JUIGMpCi0jZWxzZQotdHhfYnJpdGlzaChjKSBVU0hPUlQgYzsg ICAgICAgICAgICAgICAgIC8qIEJyaXRpc2ggKi8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewot ICAgIGlmIChjICYgMHhmZjAwKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBlbHNlIGlmIChjID09 IChVU0hPUlQpIDB4MDBhMykgICAgICAvKiBQb3VuZCBzaWduICovCi0gICAgICByZXR1cm4oMHgy Yik7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHR4X3VzYXNjaWkoYykpOwotfQotCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotdHhfYXBsMShVU0hPUlQgYykKLSNlbHNlCi10eF9hcGwxKGMpIFVTSE9S VCBjOyAgICAgICAgICAgICAgICAgICAgLyogQXBsMSAqLwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17Ci0gICAgaWYgKGMgPj0gMHgwMDQxICYmIGMgPD0gMHgwMDVhKSAgICAgLyogTGV0dGVycyAq LwotICAgICAgcmV0dXJuKGMgKyAweDIwKTsKLSAgICBzd2l0Y2ggKGMpIHsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBPdGhlcnMgKi8KLSAgICAgIGNhc2UgMHgwMDI0OiByZXR1cm4oKENIQVIp MHg3ZSk7Ci0gICAgICBjYXNlIDB4MDAyNzogcmV0dXJuKChDSEFSKTB4NGIpOwotICAgICAgY2Fz ZSAweDAwMjg6IHJldHVybigoQ0hBUikweDNhKTsKLSAgICAgIGNhc2UgMHgwMDI5OiByZXR1cm4o KENIQVIpMHgyMik7Ci0gICAgICBjYXNlIDB4MDAyYjogcmV0dXJuKChDSEFSKTB4MmQpOwotICAg ICAgY2FzZSAweDAwMmM6IHJldHVybigoQ0hBUikweDJjKTsKLSAgICAgIGNhc2UgMHgwMDJkOiBy ZXR1cm4oKENIQVIpMHg1Zik7Ci0gICAgICBjYXNlIDB4MDAyZTogcmV0dXJuKChDSEFSKTB4MmUp OwotICAgICAgY2FzZSAweDAwMmY6IHJldHVybigoQ0hBUikweDJmKTsKLSAgICAgIGNhc2UgMHgw MDMwOiByZXR1cm4oKENIQVIpMHgzMCk7Ci0gICAgICBjYXNlIDB4MDAzMTogcmV0dXJuKChDSEFS KTB4MzEpOwotICAgICAgY2FzZSAweDAwMzI6IHJldHVybigoQ0hBUikweDMyKTsKLSAgICAgIGNh c2UgMHgwMDMzOiByZXR1cm4oKENIQVIpMHgzMyk7Ci0gICAgICBjYXNlIDB4MDAzNDogcmV0dXJu KChDSEFSKTB4MzQpOwotICAgICAgY2FzZSAweDAwMzU6IHJldHVybigoQ0hBUikweDM1KTsKLSAg ICAgIGNhc2UgMHgwMDM2OiByZXR1cm4oKENIQVIpMHgzNik7Ci0gICAgICBjYXNlIDB4MDAzNzog cmV0dXJuKChDSEFSKTB4MzcpOwotICAgICAgY2FzZSAweDAwMzg6IHJldHVybigoQ0hBUikweDM4 KTsKLSAgICAgIGNhc2UgMHgwMDM5OiByZXR1cm4oKENIQVIpMHgzOSk7Ci0gICAgICBjYXNlIDB4 MDAzYTogcmV0dXJuKChDSEFSKTB4M2UpOwotICAgICAgY2FzZSAweDAwM2I6IHJldHVybigoQ0hB UikweDNjKTsKLSAgICAgIGNhc2UgMHgwMDNjOiByZXR1cm4oKENIQVIpMHgyMyk7Ci0gICAgICBj YXNlIDB4MDAzZDogcmV0dXJuKChDSEFSKTB4MjUpOwotICAgICAgY2FzZSAweDAwM2U6IHJldHVy bigoQ0hBUikweDI2KTsKLSAgICAgIGNhc2UgMHgwMDNmOiByZXR1cm4oKENIQVIpMHg1MSk7Ci0g ICAgICBjYXNlIDB4MDA1YjogcmV0dXJuKChDSEFSKTB4M2IpOwotICAgICAgY2FzZSAweDAwNWM6 IHJldHVybigoQ0hBUikweDNmKTsKLSAgICAgIGNhc2UgMHgwMDVkOiByZXR1cm4oKENIQVIpMHgy Nyk7Ci0gICAgICBjYXNlIDB4MDA1ZjogcmV0dXJuKChDSEFSKTB4NDYpOwotICAgICAgY2FzZSAw eDAwN2I6IHJldHVybigoQ0hBUikweDdiKTsKLSAgICAgIGNhc2UgMHgwMDdjOiByZXR1cm4oKENI QVIpMHg0ZCk7Ci0gICAgICBjYXNlIDB4MDA3ZDogcmV0dXJuKChDSEFSKTB4N2QpOwotICAgICAg Y2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikweDIxKTsKLSAgICAgIGNhc2UgMHgwMGFmOiByZXR1 cm4oKENIQVIpMHg0MCk7Ci0gICAgICBjYXNlIDB4MDBkNzogcmV0dXJuKChDSEFSKTB4M2QpOwot ICAgICAgY2FzZSAweDAwZjc6IHJldHVybigoQ0hBUikweDJiKTsKLSAgICAgIGNhc2UgMHgyMTkw OiByZXR1cm4oKENIQVIpMHg1Yik7Ci0gICAgICBjYXNlIDB4MjE5MTogcmV0dXJuKChDSEFSKTB4 NTkpOwotICAgICAgY2FzZSAweDIxOTI6IHJldHVybigoQ0hBUikweDVkKTsKLSAgICAgIGNhc2Ug MHgyMTkzOiByZXR1cm4oKENIQVIpMHg1NSk7Ci0gICAgICBjYXNlIDB4MjIwNjogcmV0dXJuKChD SEFSKTB4NDgpOwotICAgICAgY2FzZSAweDIyMDc6IHJldHVybigoQ0hBUikweDQ3KTsKLSAgICAg IGNhc2UgMHgyMjBhOiByZXR1cm4oKENIQVIpMHg0NSk7Ci0gICAgICBjYXNlIDB4MjIxODogcmV0 dXJuKChDSEFSKTB4NGEpOwotICAgICAgY2FzZSAweDIyMjc6IHJldHVybigoQ0hBUikweDI5KTsK LSAgICAgIGNhc2UgMHgyMjI4OiByZXR1cm4oKENIQVIpMHgyOCk7Ci0gICAgICBjYXNlIDB4MjIy YTogcmV0dXJuKChDSEFSKTB4NTYpOwotICAgICAgY2FzZSAweDIyM2M6IHJldHVybigoQ0hBUikw eDU0KTsKLSAgICAgIGNhc2UgMHgyMjYwOiByZXR1cm4oKENIQVIpMHgyYSk7Ci0gICAgICBjYXNl IDB4MjI2NDogcmV0dXJuKChDSEFSKTB4MjQpOwotICAgICAgY2FzZSAweDIyNjU6IHJldHVybigo Q0hBUikweDVlKTsKLSAgICAgIGNhc2UgMHgyMjgyOiByZXR1cm4oKENIQVIpMHg1YSk7Ci0gICAg ICBjYXNlIDB4MjI4MzogcmV0dXJuKChDSEFSKTB4NTgpOwotICAgICAgY2FzZSAweDIyYTI6IHJl dHVybigoQ0hBUikweDVjKTsKLSAgICAgIGNhc2UgMHgyMmEzOiByZXR1cm4oKENIQVIpMHg3Yyk7 Ci0gICAgICBjYXNlIDB4MjJhNDogcmV0dXJuKChDSEFSKTB4NGUpOwotICAgICAgY2FzZSAweDIy YTU6IHJldHVybigoQ0hBUikweDQyKTsKLSAgICAgIGNhc2UgMHgyMmMyOiByZXR1cm4oKENIQVIp MHg0Myk7Ci0gICAgICBjYXNlIDB4MjJjNDogcmV0dXJuKChDSEFSKTB4NjApOwotICAgICAgY2Fz ZSAweDIyYzY6IHJldHVybigoQ0hBUikweDUwKTsKLSAgICAgIGNhc2UgMHgyMzA4OiByZXR1cm4o KENIQVIpMHg1Myk7Ci0gICAgICBjYXNlIDB4MjMwYTogcmV0dXJuKChDSEFSKTB4NDQpOwotICAg ICAgY2FzZSAweDIzNzM6IHJldHVybigoQ0hBUikweDQ5KTsKLSAgICAgIGNhc2UgMHgyMzc0OiBy ZXR1cm4oKENIQVIpMHg1Mik7Ci0gICAgICBjYXNlIDB4MjM3NTogcmV0dXJuKChDSEFSKTB4NTcp OwotICAgICAgY2FzZSAweDIzN2E6IHJldHVybigoQ0hBUikweDQxKTsKLSAgICAgIGNhc2UgMHgy NWFmOiByZXR1cm4oKENIQVIpMHg0Yyk7Ci0gICAgICBjYXNlIDB4MjVjYjogcmV0dXJuKChDSEFS KTB4NGYpOwotICAgICAgZGVmYXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7Ci0gICAgfQot fQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FuYWRpYW4g RnJlbmNoICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2ZyX2NhbmFkaWFuKFVTSE9SVCBjKQotI2Vs c2UKLXR4X2ZyX2NhbmFkaWFuKGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17 Ci0gICAgaWYgKGMgJiAweGZmMDApICAgICAgICAgICAgICAgICAgICAgLyogT3V0IG9mIHJhbmdl ICovCi0gICAgICByZXR1cm4oLTEpOwotICAgIHN3aXRjaChjKSB7Ci0gICAgICBjYXNlIDB4ZTA6 IHJldHVybigweDQwKTsgICAgICAgICAgLyogYSBncmF2ZSAqLwotICAgICAgY2FzZSAweGUyOiBy ZXR1cm4oMHg1Yik7ICAgICAgICAgIC8qIGEgY2lyY3VtZmxleCAqLwotICAgICAgY2FzZSAweGU3 OiByZXR1cm4oMHg1Yyk7ICAgICAgICAgIC8qIGMgY2VkaWxsYSAqLwotICAgICAgY2FzZSAweGU4 OiByZXR1cm4oMHg3ZCk7ICAgICAgICAgIC8qIGUgZ3JhdmUgKi8KLSAgICAgIGNhc2UgMHhlOTog cmV0dXJuKDB4N2IpOyAgICAgICAgICAvKiBlIGFjdXRlICovCi0gICAgICBjYXNlIDB4ZWE6IHJl dHVybigweDVkKTsgICAgICAgICAgLyogZSBjaXJjdW1mbGV4ICovCi0gICAgICBjYXNlIDB4ZWU6 IHJldHVybigweDVlKTsgICAgICAgICAgLyogaSBjaXJjdW1mbGV4ICovCi0gICAgICBjYXNlIDB4 ZjQ6IHJldHVybigweDYwKTsgICAgICAgICAgLyogbyBjaXJjdW1mbGV4ICovCi0gICAgICBjYXNl IDB4Zjk6IHJldHVybigweDdjKTsgICAgICAgICAgLyogdSBncmF2ZSAqLwotICAgICAgY2FzZSAw eGZiOiByZXR1cm4oMHg2ZSk7ICAgICAgICAgIC8qIHUgY2lyY3VtZmxleCAqLwotICAgICAgZGVm YXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGFuaXNoL05vcndlZ2lhbiAqLwotI2lmZGVm IENLX0FOU0lDCi10eF9kYW5pc2goVVNIT1JUIGMpCi0jZWxzZQotdHhfZGFuaXNoKGMpIFVTSE9S VCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgJiAweGZmMDApICAgICAg ICAgICAgICAgICAgICAgLyogT3V0IG9mIHJhbmdlICovCi0gICAgICByZXR1cm4oLTEpOwotICAg IHN3aXRjaChjKSB7Ci0gICAgICBjYXNlIDB4YzY6IHJldHVybigweDViKTsgICAgICAgICAgLyog QUUgKi8KLSAgICAgIGNhc2UgMHhkODogcmV0dXJuKDB4NWMpOyAgICAgICAgICAvKiBPIHN0cm9r ZSAqLwotICAgICAgY2FzZSAweGU2OiByZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGFlICovCi0g ICAgICBjYXNlIDB4Zjg6IHJldHVybigweDdjKTsgICAgICAgICAgLyogbyBzdHJva2UgKi8KLSAg ICAgIGNhc2UgMHhlNTogcmV0dXJuKDB4N2QpOyAgICAgICAgICAvKiBhIHJpbmcgKi8KLSAgICAg IGNhc2UgMHhhZjogcmV0dXJuKDB4N2UpOyAgICAgICAgICAvKiBtYWNyb24gKi8KLSAgICAgIGRl ZmF1bHQ6ICAgcmV0dXJuKHR4X3VzYXNjaWkoYykpOwotICAgIH0KLX0KLQotaW50ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIER1dGNoICovCi0jaWZkZWYgQ0tfQU5TSUMK LXR4X2R1dGNoKFVTSE9SVCBjKQotI2Vsc2UKLXR4X2R1dGNoKGMpIFVTSE9SVCBjOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgJiAweGZlMDApICAgICAgICAgICAgICAgICAg ICAgLyogT3V0IG9mIHJhbmdlICovCi0gICAgICByZXR1cm4oLTEpOwotICAgIHN3aXRjaChjKSB7 Ci0gICAgICBjYXNlIDB4MDA3YzogcmV0dXJuKDB4NWQpOyAgICAgICAgLyogdmVydGljYWwgYmFy ICovCi0gICAgICBjYXNlIDB4MDBhMzogcmV0dXJuKDB4MjMpOyAgICAgICAgLyogcG91bmQgc2ln biAqLwotICAgICAgY2FzZSAweDAwYWI6IHJldHVybigweDdiKTsgICAgICAgIC8qIGRpYWVyZXNp cyAqLwotICAgICAgY2FzZSAweDAwYjQ6IHJldHVybigweDdlKTsgICAgICAgIC8qIGFjdXRlIGFj Y2VudCAqLwotICAgICAgY2FzZSAweDAwYmM6IHJldHVybigweDdkKTsgICAgICAgIC8qIDEvNCAq LwotICAgICAgY2FzZSAweDAwYmU6IHJldHVybigweDQwKTsgICAgICAgIC8qIDMvNCAqLwotICAg ICAgY2FzZSAweDAwYmQ6IHJldHVybigweDVjKTsgICAgICAgIC8qIDEvMiAqLwotICAgICAgY2Fz ZSAweDAwZmY6IHJldHVybigweDViKTsgICAgICAgIC8qIHkgZGlhZXJlc2lzIChpaikgKi8KLSAg ICAgIGNhc2UgMHgwMTkyOiByZXR1cm4oMHg3Yyk7ICAgICAgICAvKiBGbG9yaW4gKi8KLSAgICAg IGRlZmF1bHQ6ICAgcmV0dXJuKChjICYgMHg4MCkgPyAtMSA6IChDSEFSKShjICYgMHg3ZikpOwot ICAgIH0KLX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZp bm5pc2ggKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfZmlubmlzaChVU0hPUlQgYykKLSNlbHNlCi10 eF9maW5uaXNoKGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYg KGMgJiAweGZmMDApICAgICAgICAgICAgICAgICAgICAgLyogT3V0IG9mIHJhbmdlICovCi0gICAg ICByZXR1cm4oLTEpOwotICAgIHN3aXRjaChjKSB7Ci0gICAgICBjYXNlIDB4YzQ6IHJldHVybigw eDViKTsgICAgICAgICAgLyogQSBkaWFlcmVzaXMgKi8KLSAgICAgIGNhc2UgMHhkNjogcmV0dXJu KDB4NWMpOyAgICAgICAgICAvKiBPIGRpYWVyZXNpcyAqLwotICAgICAgY2FzZSAweGM1OiByZXR1 cm4oMHg1ZCk7ICAgICAgICAgIC8qIEEgcmluZyAqLwotICAgICAgY2FzZSAweGRjOiByZXR1cm4o MHg1ZSk7ICAgICAgICAgIC8qIFUgZGlhZXJlc2lzICovCi0gICAgICBjYXNlIDB4ZTk6IHJldHVy bigweDYwKTsgICAgICAgICAgLyogZSBhY3V0ZSAqLwotICAgICAgY2FzZSAweGU0OiByZXR1cm4o MHg3Yik7ICAgICAgICAgIC8qIGEgZGlhZXJlc2lzICovCi0gICAgICBjYXNlIDB4ZjY6IHJldHVy bigweDdjKTsgICAgICAgICAgLyogbyBkaWFlcmVzaXMgKi8KLSAgICAgIGNhc2UgMHhlNTogcmV0 dXJuKDB4N2QpOyAgICAgICAgICAvKiBhIHJpbmcgKi8KLSAgICAgIGNhc2UgMHhmYzogcmV0dXJu KDB4N2UpOyAgICAgICAgICAvKiB1IGRpYWVyZXNpcyAqLwotICAgICAgZGVmYXVsdDogICByZXR1 cm4odHhfdXNhc2NpaShjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRnJlbmNoICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2ZyZW5jaChV U0hPUlQgYykKLSNlbHNlCi10eF9mcmVuY2goYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsKLSAgICBpZiAoYyAmIDB4ZmYwMCkgICAgICAgICAgICAgICAgICAgICAvKiBPdXQg b2YgcmFuZ2UgKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAgc3dpdGNoKGMpIHsKLSAgICAgIGNh c2UgMHhhMzogcmV0dXJuKDB4MjMpOyAgICAgICAgICAvKiBwb3VuZCBzaWduICovCi0gICAgICBj YXNlIDB4YTc6IHJldHVybigweDVkKTsgICAgICAgICAgLyogc2VjdGlvbiBzaWduICovCi0gICAg ICBjYXNlIDB4YTg6IHJldHVybigweDdlKTsgICAgICAgICAgLyogZGlhZXJlc2lzICovCi0gICAg ICBjYXNlIDB4YjA6IHJldHVybigweDViKTsgICAgICAgICAgLyogcmluZyAqLwotICAgICAgY2Fz ZSAweGI1OiByZXR1cm4oMHg2MCk7ICAgICAgICAgIC8qIG1pY3JvbiBzaWduIChtdSkgKi8KLSAg ICAgIGNhc2UgMHhlMDogcmV0dXJuKDB4NDApOyAgICAgICAgICAvKiBhIGdyYXZlICovCi0gICAg ICBjYXNlIDB4ZTc6IHJldHVybigweDVjKTsgICAgICAgICAgLyogYyBjZWRpbGxhICovCi0gICAg ICBjYXNlIDB4ZTg6IHJldHVybigweDdkKTsgICAgICAgICAgLyogZSBncmF2ZSAqLwotICAgICAg Y2FzZSAweGU5OiByZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGUgYWN1dGUgKi8KLSAgICAgIGNh c2UgMHhmOTogcmV0dXJuKDB4N2MpOyAgICAgICAgICAvKiB1IGdyYXZlICovCi0gICAgICBkZWZh dWx0OiAgIHJldHVybih0eF91c2FzY2lpKGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXJtYW4gKi8KLSNpZmRlZiBDS19BTlNJQwot dHhfZ2VybWFuKFVTSE9SVCBjKQotI2Vsc2UKLXR4X2dlcm1hbihjKSBVU0hPUlQgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjICYgMHhmZjAwKSAgICAgICAgICAgICAgICAg ICAgIC8qIE91dCBvZiByYW5nZSAqLwotICAgICAgcmV0dXJuKC0xKTsKLSAgICBzd2l0Y2goYykg ewotICAgICAgY2FzZSAweGE3OiByZXR1cm4oMHg0MCk7ICAgICAgICAgIC8qIHNlY3Rpb24gc2ln biAqLwotICAgICAgY2FzZSAweGM0OiByZXR1cm4oMHg1Yik7ICAgICAgICAgIC8qIEEgdW1sYXV0 ICovCi0gICAgICBjYXNlIDB4ZDY6IHJldHVybigweDVjKTsgICAgICAgICAgLyogTyB1bWxhdXQg Ki8KLSAgICAgIGNhc2UgMHhkYzogcmV0dXJuKDB4NWQpOyAgICAgICAgICAvKiBVIHVtbGF1dCAq LwotICAgICAgY2FzZSAweGRmOiByZXR1cm4oMHg3ZSk7ICAgICAgICAgIC8qIGVzcy16ZXQgKi8K LSAgICAgIGNhc2UgMHhlNDogcmV0dXJuKDB4N2IpOyAgICAgICAgICAvKiBhIHVtbGF1dCAqLwot ICAgICAgY2FzZSAweGY2OiByZXR1cm4oMHg3Yyk7ICAgICAgICAgIC8qIG8gdW1sYXV0ICovCi0g ICAgICBjYXNlIDB4ZmM6IHJldHVybigweDdkKTsgICAgICAgICAgLyogdSB1bWxhdXQqLwotICAg ICAgZGVmYXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7Ci0gICAgfQotfQotCi1pbnQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSGVicmV3LTcgKi8KLSNpZmRlZiBD S19BTlNJQwotdHhfaGVicmV3NyhVU0hPUlQgYykKLSNlbHNlCi10eF9oZWJyZXc3KGMpIFVTSE9S VCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweDYwKSAgICAgICAg ICAgICAgICAgICAgICAgLyogQVNDSUkgKi8KLSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4N2Yp KTsKLSAgICBlbHNlIGlmIChjID49IDEyMyAmJiBjIDwgMTI4KSAgICAgICAvKiBBU0NJSSAqLwot ICAgICAgcmV0dXJuKChDSEFSKShjICYgMHg3ZikpOwotICAgIGVsc2UgaWYgKGMgPj0gMHgwNWQw ICYmIGMgPD0gMHgwNWVhKSAvKiBIZWJyZXcgMjcgY29udGlndW91cyBjaGFyYWN0ZXJzICovCi0g ICAgICByZXR1cm4oKENIQVIpKChpbnQpYyAtIDB4NWQwICsgOTYpKTsKLSAgICBlbHNlIHJldHVy bigtMSk7Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBH cmVlayBFTE9UIDkyNyAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9lbG90OTI3KFVTSE9SVCBjKQot I2Vsc2UKLXR4X2Vsb3Q5MjcoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSAgICBpZiAoYyA8PSAweDgwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBBU0NJSSAqLwotICAg ICAgICBpZiAoaXNsb3dlcihjKSkgYyA9IHRvdXBwZXIoYyk7IC8qIFNlbmQgYWxsIGxldHRlcnMg aW4gdXBwZXJjYXNlICovCi0gICAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4N2YpKTsKLSAgICB9 Ci0KLS8qIEdyZWVrIC0tIG1hcCBhbGwgR3JlZWsgY2hhcmFjdGVycyB0byB1bmFjY2VudGVkIHVw cGVyY2FzZSAqLwotCi0gICAgaWYgKGMgPj0gMHgwMzkxICYmIGMgPD0gMHgwM2ExKSAvKiBBbHBo YSB0aHJ1IFJobyAtIHVwcGVyY2FzZSAqLwotICAgICAgcmV0dXJuKChDSEFSKSgoaW50KWMgLSAw eDAzOTEgKyA5NykpOwotICAgIGVsc2UgaWYgKGMgPj0gMHgwM2EzICYmIGMgPD0gMHgwM2E5KSAv KiBTaWdtYSB0aHJ1IE9tZWdhIC0gdXBwZXJjYXNlICovCi0gICAgICByZXR1cm4oKENIQVIpKChp bnQpYyAtIDB4MDM5MSArIDk2KSk7Ci0gICAgZWxzZSBpZiAoYyA+PSAweDAzYjEgJiYgYyA8PSAw eDAzYzEpIC8qIEFscGhhIHRocnUgUmhvIC0gbG93ZXJjYXNlICovCi0gICAgICByZXR1cm4oKENI QVIpKChpbnQpYyAtIDB4MDM5MSArIDk3KSk7Ci0gICAgZWxzZSBpZiAoYyA+PSAweDAzYzMgJiYg YyA8PSAweDAzYzkpIC8qIFNpZ21hIHRocnUgT21lZ2EgLSB1cHBlcmNhc2UgKi8KLSAgICAgIHJl dHVybigoQ0hBUikoKGludCljIC0gMHgwMzkxICsgOTYpKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAg ICAgIGNhc2UgMHgwM2MyOiByZXR1cm4oKENIQVIpMTE0KTsgICAvKiBUZXJtaW5hbCBzaWdtYSAq LwotICAgICAgY2FzZSAweDAzODY6IHJldHVybigoQ0hBUik5Nyk7ICAgIC8qIEFscGhhIFRvbm9z ICovCi0gICAgICBjYXNlIDB4MDNhYzogcmV0dXJuKChDSEFSKTk3KTsgICAgLyogYWxwaGEgVG9u b3MgKi8KLSAgICAgIGNhc2UgMHgwMzg4OiByZXR1cm4oKENIQVIpMTAxKTsgICAvKiBFcHNpbG9u IFRvbm9zICovCi0gICAgICBjYXNlIDB4MDNhZDogcmV0dXJuKChDSEFSKTEwMSk7ICAgLyogZXBz aWxvbiBUb25vcyAqLwotICAgICAgY2FzZSAweDAzODk6IHJldHVybigoQ0hBUikxMDMpOyAgIC8q IEV0YSBUb25vcyAqLwotICAgICAgY2FzZSAweDAzYWU6IHJldHVybigoQ0hBUikxMDMpOyAgIC8q IGV0YSBUb25vcyAqLwotICAgICAgY2FzZSAweDAzOGE6IHJldHVybigoQ0hBUikxMDUpOyAgIC8q IElvdGEgVG9ub3MgKi8KLSAgICAgIGNhc2UgMHgwM2FmOiByZXR1cm4oKENIQVIpMTA1KTsgICAv KiBpb3RhIFRvbm9zICovCi0gICAgICBjYXNlIDB4MDNjYTogcmV0dXJuKChDSEFSKTEwNSk7ICAg LyogaW90YSBEaWFseXRpa2EgKi8KLSAgICAgIGNhc2UgMHgwMzhjOiByZXR1cm4oKENIQVIpMTEx KTsgICAvKiBPbWljcm9uIFRvbm9zICovCi0gICAgICBjYXNlIDB4MDNjYzogcmV0dXJuKChDSEFS KTExMSk7ICAgLyogb21pY3JvbiBUb25vcyAqLwotICAgICAgY2FzZSAweDAzOGU6IHJldHVybigo Q0hBUikxMTYpOyAgIC8qIFVwc2lsb24gVG9ub3MgKi8KLSAgICAgIGNhc2UgMHgwM2QzOiByZXR1 cm4oKENIQVIpMTE2KTsgICAvKiBVcHNpbG9uIFRvbm9zICovCi0gICAgICBjYXNlIDB4MDNjZDog cmV0dXJuKChDSEFSKTExNik7ICAgLyogdXBzaWxvbiBUb25vcyAqLwotICAgICAgY2FzZSAweDAz Y2I6IHJldHVybigoQ0hBUikxMTYpOyAgIC8qIHVwc2lsb24gRGlhbHl0aWthICovCi0gICAgICBj YXNlIDB4MDNiMDogcmV0dXJuKChDSEFSKTExNik7ICAgLyogdXBzaWxvbiBEaWFseXRpa2ErVG9u b3MgKi8KLSAgICAgIGNhc2UgMHgwMzhmOiByZXR1cm4oKENIQVIpMTIwKTsgICAvKiBPbWVnYSBU b25vcyAqLwotICAgICAgY2FzZSAweDAzY2U6IHJldHVybigoQ0hBUikxMjApOyAgIC8qIG9tZWdh IFRvbm9zICovCi0gICAgICBjYXNlIDB4MDM5MDogcmV0dXJuKChDSEFSKTEwNSk7ICAgLyogaW90 YSBEaWFseXRpa2ErVG9ub3MgKi8KLSAgICAgIGNhc2UgMHgwM2FhOiByZXR1cm4oKENIQVIpMTA1 KTsgICAvKiBJb3RhIERpYWx5dGlrYSAqLwotICAgICAgY2FzZSAweDAzYWI6IHJldHVybigoQ0hB UikxMTYpOyAgIC8qIFVwc2lsb24gRGlhbHl0aWthICovCi0gICAgICBjYXNlIDB4MDNkNDogcmV0 dXJuKChDSEFSKTExNik7ICAgLyogVXBzaWxvbiBEaWFseXRpa2EgKi8KLSAgICAgIGNhc2UgMHgw M2QwOiByZXR1cm4oKENIQVIpOTgpOyAgICAvKiBBbHRlcm5hdGl2ZSBiZXRhICovCi0gICAgICBj YXNlIDB4MDNkMTogcmV0dXJuKChDSEFSKTEwNCk7ICAgLyogT3BlbiB0aGV0YSAqLwotICAgICAg Y2FzZSAweDAzZDU6IHJldHVybigoQ0hBUikxMTcpOyAgIC8qIE9wZW4gcGhpICovCi0gICAgICBj YXNlIDB4MDNkNjogcmV0dXJuKChDSEFSKTExMik7ICAgLyogQWx0ZXJuYXRpdmUgUGkgKi8KLSAg ICAgIGRlZmF1bHQ6IHJldHVybigtMSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogSHVuZ2FyaWFuICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4 X2h1bmdhcmlhbihVU0hPUlQgYykKLSNlbHNlCi10eF9odW5nYXJpYW4oYykgVVNIT1JUIGM7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA9PSAweDAyZGQgfHwgYyA9PSAweDIw MzMpCi0gICAgICByZXR1cm4oMHg3ZSk7ICAgICAgICAgICAgICAgICAgICAgLyogZG91YmxlIGFj dXRlIGFjY2VudCAqLwotICAgIGVsc2UgaWYgKGMgJiAweGZmMDApICAgICAgICAgICAgICAgIC8q IE91dCBvZiByYW5nZSAqLwotICAgICAgcmV0dXJuKC0xKTsKLSAgICBzd2l0Y2goYykgewotICAg ICAgY2FzZSAweGMxOiByZXR1cm4oMHg0MCk7ICAgICAgICAgIC8qIEEgYWN1dGUgKi8KLSAgICAg IGNhc2UgMHhjOTogcmV0dXJuKDB4NWIpOyAgICAgICAgICAvKiBFIGFjdXRlICovCi0gICAgICBj YXNlIDB4ZDY6IHJldHVybigweDVjKTsgICAgICAgICAgLyogTyB1bWxhdXQgKi8KLSAgICAgIGNh c2UgMHhkYzogcmV0dXJuKDB4NWQpOyAgICAgICAgICAvKiBVIHVtbGF1dCAqLwotICAgICAgY2Fz ZSAweGU5OiByZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGUgYWN1dGUgKi8KLSAgICAgIGNhc2Ug MHhmNjogcmV0dXJuKDB4N2MpOyAgICAgICAgICAvKiBvIHVtbGF1dCAqLwotICAgICAgY2FzZSAw eGZhOiByZXR1cm4oMHg2MCk7ICAgICAgICAgIC8qIHUgYWN1dGUgKi8KLSAgICAgIGNhc2UgMHhm YzogcmV0dXJuKDB4N2QpOyAgICAgICAgICAvKiB1IHVtbGF1dCAqLwotICAgICAgZGVmYXVsdDog ICByZXR1cm4odHhfdXNhc2NpaShjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogSWNlbGFuZGljICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4 X2ljZWxhbmRpYyhVU0hPUlQgYykKLSNlbHNlCi10eF9pY2VsYW5kaWMoYykgVVNIT1JUIGM7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyAmIDB4ZmYwMCkgICAgICAgICAgICAg ICAgICAgICAvKiBPdXQgb2YgcmFuZ2UgKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAgc3dpdGNo KGMpIHsKLSAgICAgIGNhc2UgMHhkZTogcmV0dXJuKDB4NDApOyAgICAgICAgICAvKiBUaG9ybiAq LwotICAgICAgY2FzZSAweGQwOiByZXR1cm4oMHg1Yik7ICAgICAgICAgIC8qIEV0aCAqLwotICAg ICAgY2FzZSAweGM2OiByZXR1cm4oMHg1ZCk7ICAgICAgICAgIC8qIEFFICovCi0gICAgICBjYXNl IDB4ZDY6IHJldHVybigweDVlKTsgICAgICAgICAgLyogTyB1bWxhdXQgKi8KLSAgICAgIGNhc2Ug MHhmZTogcmV0dXJuKDB4NjApOyAgICAgICAgICAvKiB0aG9ybiAqLwotICAgICAgY2FzZSAweGYw OiByZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGV0aCAqLwotICAgICAgY2FzZSAweGU2OiByZXR1 cm4oMHg3ZCk7ICAgICAgICAgIC8qIGFlICovCi0gICAgICBjYXNlIDB4ZjY6IHJldHVybigweDdl KTsgICAgICAgICAgLyogbyB1bWxhdXQgKi8KLSAgICAgIGRlZmF1bHQ6ICAgcmV0dXJuKHR4X3Vz YXNjaWkoYykpOwotICAgIH0KLX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEl0YWxpYW4gKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfaXRhbGlhbihVU0hPUlQg YykKLSNlbHNlCi10eF9pdGFsaWFuKGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17Ci0gICAgaWYgKGMgJiAweGZmMDApICAgICAgICAgICAgICAgICAgICAgLyogT3V0IG9mIHJh bmdlICovCi0gICAgICByZXR1cm4oLTEpOwotICAgIHN3aXRjaChjKSB7Ci0gICAgICBjYXNlIDB4 YTM6IHJldHVybigweDIzKTsgICAgICAgICAgLyogcG91bmQgc2lnbiAqLwotICAgICAgY2FzZSAw eGE3OiByZXR1cm4oMHg0MCk7ICAgICAgICAgIC8qIHNlY3Rpb24gc2lnbiAqLwotICAgICAgY2Fz ZSAweGIwOiByZXR1cm4oMHg1Yik7ICAgICAgICAgIC8qIHJpbmcgKi8KLSAgICAgIGNhc2UgMHhl NzogcmV0dXJuKDB4NWMpOyAgICAgICAgICAvKiBjIGNlZGlsbGEgKi8KLSAgICAgIGNhc2UgMHhl OTogcmV0dXJuKDB4NWQpOyAgICAgICAgICAvKiBlIGFjdXRlICovCi0gICAgICBjYXNlIDB4Zjk6 IHJldHVybigweDYwKTsgICAgICAgICAgLyogdSBncmF2ZSAqLwotICAgICAgY2FzZSAweGUwOiBy ZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGEgZ3JhdmUgKi8KLSAgICAgIGNhc2UgMHhmMjogcmV0 dXJuKDB4N2MpOyAgICAgICAgICAvKiBvIGdyYXZlICovCi0gICAgICBjYXNlIDB4ZTg6IHJldHVy bigweDdkKTsgICAgICAgICAgLyogZSBncmF2ZSAqLwotICAgICAgY2FzZSAweGVjOiByZXR1cm4o MHg3ZSk7ICAgICAgICAgIC8qIGkgZ3JhdmUgKi8KLSAgICAgIGRlZmF1bHQ6ICAgcmV0dXJuKHR4 X3VzYXNjaWkoYykpOwotICAgIH0KLX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEpJUyAwMjAxIFJvbWFuICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2ppczAy MDFyKFVTSE9SVCBjKQotI2Vsc2UKLXR4X2ppczAyMDFyKGMpIFVTSE9SVCBjOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgJiYgMHhmZjgwKSAgICAgICAgICAgICAgICAgICAg LyogNyBiaXRzICovCi0gICAgICByZXR1cm4oLTEpOwotICAgIHN3aXRjaCAoYykgeyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIExpa2UgQVNDSUkgd2l0aCAqLwotICAgICAgY2FzZSAweDAwYTU6 IHJldHVybig5Mik7ICAgICAgICAgIC8qIHR3byBleGNlcHRpb25zICovCi0gICAgICBjYXNlIDB4 MDBhZjogcmV0dXJuKDEyNik7Ci0gICAgICBjYXNlIDB4MjAzZTogcmV0dXJuKDEyNik7Ci0gICAg ICBkZWZhdWx0OiAgIHJldHVybih0eF91c2FzY2lpKGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBKSVMgMDIwMSBLYXRha2FuYSAqLwot I2lmZGVmIENLX0FOU0lDCi10eF9qaXMwMjAxayhVU0hPUlQgYykKLSNlbHNlCi10eF9qaXMwMjAx ayhjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHhm ZjYxIHx8IGMgPiAweGZmOWYpCi0gICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAg ICAgLyogT3V0IG9mIHJhbmdlICovCi0gICAgZWxzZQotICAgICAgcmV0dXJuKChpbnQpYyAtIDB4 ZmVjMCk7ICAgICAgICAgIC8qIDB4ZmY2MSAtIGEwID0gMHhmZWMwICovCi19Ci0KLWludCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaG9ydCBLT0kgKi8KLSNpZmRlZiBD S19BTlNJQwotdHhfa29pNyhVU0hPUlQgYykKLSNlbHNlCi10eF9rb2k3KGMpIFVTSE9SVCBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweDUwKQotICAgICAgcmV0dXJu KChDSEFSKShjICYgMHg3ZikpOwotICAgIGVsc2UgaWYgKGMgPiAweDdmKQotICAgICAgcmV0dXJu KC0xKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dCBvZiByYW5nZSAqLwotICAgIHN3aXRj aChjKSB7Ci0gICAgICBjYXNlIDB4MDQxMDogcmV0dXJuKChDSEFSKTk3KTsKLSAgICAgIGNhc2Ug MHgwNDExOiByZXR1cm4oKENIQVIpOTgpOwotICAgICAgY2FzZSAweDA0MTI6IHJldHVybigoQ0hB UikxMTkpOwotICAgICAgY2FzZSAweDA0MTM6IHJldHVybigoQ0hBUikxMDMpOwotICAgICAgY2Fz ZSAweDA0MTQ6IHJldHVybigoQ0hBUikxMDApOwotICAgICAgY2FzZSAweDA0MTU6IHJldHVybigo Q0hBUikxMDEpOwotICAgICAgY2FzZSAweDA0MTY6IHJldHVybigoQ0hBUikxMTgpOwotICAgICAg Y2FzZSAweDA0MTc6IHJldHVybigoQ0hBUikxMjIpOwotICAgICAgY2FzZSAweDA0MTg6IHJldHVy bigoQ0hBUikxMDUpOwotICAgICAgY2FzZSAweDA0MTk6IHJldHVybigoQ0hBUikxMDYpOwotICAg ICAgY2FzZSAweDA0MWE6IHJldHVybigoQ0hBUikxMDcpOwotICAgICAgY2FzZSAweDA0MWI6IHJl dHVybigoQ0hBUikxMDgpOwotICAgICAgY2FzZSAweDA0MWM6IHJldHVybigoQ0hBUikxMDkpOwot ICAgICAgY2FzZSAweDA0MWQ6IHJldHVybigoQ0hBUikxMTApOwotICAgICAgY2FzZSAweDA0MWU6 IHJldHVybigoQ0hBUikxMTEpOwotICAgICAgY2FzZSAweDA0MWY6IHJldHVybigoQ0hBUikxMTIp OwotICAgICAgY2FzZSAweDA0MjA6IHJldHVybigoQ0hBUikxMTQpOwotICAgICAgY2FzZSAweDA0 MjE6IHJldHVybigoQ0hBUikxMTUpOwotICAgICAgY2FzZSAweDA0MjI6IHJldHVybigoQ0hBUikx MTYpOwotICAgICAgY2FzZSAweDA0MjM6IHJldHVybigoQ0hBUikxMTcpOwotICAgICAgY2FzZSAw eDA0MjQ6IHJldHVybigoQ0hBUikxMDIpOwotICAgICAgY2FzZSAweDA0MjU6IHJldHVybigoQ0hB UikxMDQpOwotICAgICAgY2FzZSAweDA0MjY6IHJldHVybigoQ0hBUik5OSk7Ci0gICAgICBjYXNl IDB4MDQyNzogcmV0dXJuKChDSEFSKTEyNik7Ci0gICAgICBjYXNlIDB4MDQyODogcmV0dXJuKChD SEFSKTEyMyk7Ci0gICAgICBjYXNlIDB4MDQyOTogcmV0dXJuKChDSEFSKTEyNSk7Ci0gICAgICBj YXNlIDB4MDQyYjogcmV0dXJuKChDSEFSKTEyMSk7Ci0gICAgICBjYXNlIDB4MDQyYzogcmV0dXJu KChDSEFSKTEyMCk7Ci0gICAgICBjYXNlIDB4MDQyZDogcmV0dXJuKChDSEFSKTEyNCk7Ci0gICAg ICBjYXNlIDB4MDQyZTogcmV0dXJuKChDSEFSKTk2KTsKLSAgICAgIGNhc2UgMHgwNDJmOiByZXR1 cm4oKENIQVIpMTEzKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybigtMSk7Ci0gICAgfQotfQotCi1p bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9ydHVndWVzZSAqLwot I2lmZGVmIENLX0FOU0lDCi10eF9wb3J0dWd1ZXNlKFVTSE9SVCBjKQotI2Vsc2UKLXR4X3BvcnR1 Z3Vlc2UoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyAm IDB4ZmYwMCkgICAgICAgICAgICAgICAgICAgICAvKiBPdXQgb2YgcmFuZ2UgKi8KLSAgICAgIHJl dHVybigtMSk7Ci0gICAgc3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgMHhlMDogcmV0dXJuKDB4YTcp OyAgICAgICAgICAvKiBzZWN0aW9uIHNpZ24gKi8KLSAgICAgIGNhc2UgMHhiMDogcmV0dXJuKDB4 YzMpOyAgICAgICAgICAvKiBBIHRpbGRlICovCi0gICAgICBjYXNlIDB4ZTc6IHJldHVybigweGM3 KTsgICAgICAgICAgLyogQyBjZWRpbGxhICovCi0gICAgICBjYXNlIDB4YTc6IHJldHVybigweGQ1 KTsgICAgICAgICAgLyogTyB0aWxkZSAqLwotICAgICAgY2FzZSAweGU5OiByZXR1cm4oMHhlMyk7 ICAgICAgICAgIC8qIGEgdGlsZGUgKi8KLSAgICAgIGNhc2UgMHhmOTogcmV0dXJuKDB4ZTcpOyAg ICAgICAgICAvKiBjIGNlZGlsbGEgKi8KLSAgICAgIGNhc2UgMHhlODogcmV0dXJuKDB4ZjUpOyAg ICAgICAgICAvKiBvIHRpbGRlICovCi0gICAgICBjYXNlIDB4YTg6IHJldHVybigweGIwKTsgICAg ICAgICAgLyogcmluZyAqLwotICAgICAgZGVmYXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7 Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog U3BhbmlzaCAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9zcGFuaXNoKFVTSE9SVCBjKQotI2Vsc2UK LXR4X3NwYW5pc2goYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBp ZiAoYyAmIDB4ZmYwMCkgICAgICAgICAgICAgICAgICAgICAvKiBPdXQgb2YgcmFuZ2UgKi8KLSAg ICAgIHJldHVybigtMSk7Ci0gICAgc3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgMHhhMzogcmV0dXJu KDB4MjMpOyAgICAgICAgICAvKiBwb3VuZCBzaWduICovCi0gICAgICBjYXNlIDB4YTc6IHJldHVy bigweDQwKTsgICAgICAgICAgLyogc2VjdGlvbiAqLwotICAgICAgY2FzZSAweGExOiByZXR1cm4o MHg1Yik7ICAgICAgICAgIC8qIGludmVydGVkIGV4Y2xhbWF0aW9uICovCi0gICAgICBjYXNlIDB4 ZDE6IHJldHVybigweDVjKTsgICAgICAgICAgLyogTiB0aWxkZSAqLwotICAgICAgY2FzZSAweGJm OiByZXR1cm4oMHg1ZCk7ICAgICAgICAgIC8qIGludmVydGVkIHF1ZXN0aW9uIG1hcmsgKi8KLSAg ICAgIGNhc2UgMHhiMDogcmV0dXJuKDB4N2IpOyAgICAgICAgICAvKiByaW5nICovCi0gICAgICBj YXNlIDB4ZjE6IHJldHVybigweDdjKTsgICAgICAgICAgLyogbiB0aWxkZSAqLwotICAgICAgY2Fz ZSAweGU3OiByZXR1cm4oMHg3ZCk7ICAgICAgICAgIC8qIGMgY2VkaWxsYSAqLwotICAgICAgZGVm YXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3dlZGlzaCAqLwotI2lmZGVmIENLX0FOU0lD Ci10eF9zd2VkaXNoKFVTSE9SVCBjKQotI2Vsc2UKLXR4X3N3ZWRpc2goYykgVVNIT1JUIGM7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyAmIDB4ZmYwMCkgICAgICAgICAgICAg ICAgICAgICAvKiBPdXQgb2YgcmFuZ2UgKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAgc3dpdGNo KGMpIHsKLSAgICAgIGNhc2UgMHhjOTogcmV0dXJuKDB4NDApOyAgICAgICAgICAvKiBFIGFjdXRl ICovCi0gICAgICBjYXNlIDB4YzQ6IHJldHVybigweDViKTsgICAgICAgICAgLyogQSB1bWxhdXQq LwotICAgICAgY2FzZSAweGQ2OiByZXR1cm4oMHg1Yyk7ICAgICAgICAgIC8qIE8gdW1sYXV0ICov Ci0gICAgICBjYXNlIDB4YzU6IHJldHVybigweDVkKTsgICAgICAgICAgLyogQSByaW5nICovCi0g ICAgICBjYXNlIDB4ZGM6IHJldHVybigweDVlKTsgICAgICAgICAgLyogVSB1bWxhdXQgKi8KLSAg ICAgIGNhc2UgMHhlOTogcmV0dXJuKDB4NjApOyAgICAgICAgICAvKiBlIGFjdXRlICovCi0gICAg ICBjYXNlIDB4ZTQ6IHJldHVybigweDdiKTsgICAgICAgICAgLyogYSB1bWxhdXQgKi8KLSAgICAg IGNhc2UgMHhmNjogcmV0dXJuKDB4N2MpOyAgICAgICAgICAvKiBvIHVtbGF1dCAqLwotICAgICAg Y2FzZSAweGU1OiByZXR1cm4oMHg3ZCk7ICAgICAgICAgIC8qIGEgcmluZyAqLwotICAgICAgY2Fz ZSAweGZjOiByZXR1cm4oMHg3ZSk7ICAgICAgICAgIC8qIHUgdW1sYXV0ICovCi0gICAgICBkZWZh dWx0OiAgIHJldHVybih0eF91c2FzY2lpKGMpKTsKLSAgICB9Ci19Ci0KLQotaW50ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN3aXNzIE5SQyAqLwotI2lmZGVmIENLX0FO U0lDCi10eF9zd2lzcyhVU0hPUlQgYykKLSNlbHNlCi10eF9zd2lzcyhjKSBVU0hPUlQgYzsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjICYgMHhmZjAwKSAgICAgICAgICAgICAg ICAgICAgIC8qIE91dCBvZiByYW5nZSAqLwotICAgICAgcmV0dXJuKC0xKTsKLSAgICBzd2l0Y2go YykgewotICAgICAgY2FzZSAweGY5OiByZXR1cm4oMHgyMyk7ICAgICAgICAgIC8qIHUgZ3JhdmUg Ki8KLSAgICAgIGNhc2UgMHhlMDogcmV0dXJuKDB4NDApOyAgICAgICAgICAvKiBhIGdyYXZlICov Ci0gICAgICBjYXNlIDB4ZTk6IHJldHVybigweDViKTsgICAgICAgICAgLyogZSBhY3V0ZSAqLwot ICAgICAgY2FzZSAweGU3OiByZXR1cm4oMHg1Yyk7ICAgICAgICAgIC8qIGMgY2VkaWxsYSAqLwot ICAgICAgY2FzZSAweGVhOiByZXR1cm4oMHg1ZCk7ICAgICAgICAgIC8qIGUgY2lyY3VtZmxleCAq LwotICAgICAgY2FzZSAweGVlOiByZXR1cm4oMHg1ZSk7ICAgICAgICAgIC8qIGkgY2lyY3VtZmxl eCAqLwotICAgICAgY2FzZSAweGU4OiByZXR1cm4oMHg1Zik7ICAgICAgICAgIC8qIGUgZ3JhdmUg Ki8KLSAgICAgIGNhc2UgMHhmNDogcmV0dXJuKDB4NjApOyAgICAgICAgICAvKiBvIGNpcmN1bWZs ZXggKi8KLSAgICAgIGNhc2UgMHhlNDogcmV0dXJuKDB4N2IpOyAgICAgICAgICAvKiBhIHVtbGF1 dCAqLwotICAgICAgY2FzZSAweGY2OiByZXR1cm4oMHg3Yyk7ICAgICAgICAgIC8qIG8gdW1sYXV0 ICovCi0gICAgICBjYXNlIDB4ZmM6IHJldHVybigweDdkKTsgICAgICAgICAgLyogdSB1bWxhdXQg Ki8KLSAgICAgIGNhc2UgMHhmYjogcmV0dXJuKDB4N2UpOyAgICAgICAgICAvKiB1IGNpcmN1bWZs ZXggKi8KLSAgICAgIGRlZmF1bHQ6ICAgcmV0dXJuKHR4X3VzYXNjaWkoYykpOwotICAgIH0KLX0K LQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIER5YWRpYyBBUEwg Ki8KLSNpZmRlZiBDS19BTlNJQwotdHhfYXBsMihVU0hPUlQgYykKLSNlbHNlCi10eF9hcGwyKGMp IFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPj0gMHgwMDQx ICYmIGMgPD0gMHgwMDVhKSAgICAgLyogTGV0dGVycyAqLwotICAgICAgcmV0dXJuKGMgLSAweGEy KTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpMHhh MCk7Ci0gICAgICBjYXNlIDB4MDBhMjogcmV0dXJuKChDSEFSKTB4YTQpOwotICAgICAgY2FzZSAw eDAwYTM6IHJldHVybigoQ0hBUikweGQ0KTsKLSAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENI QVIpMHhkYyk7Ci0gICAgICBjYXNlIDB4MDBhZjogcmV0dXJuKChDSEFSKTB4ZGEpOwotICAgICAg Y2FzZSAweDAwZDc6IHJldHVybigoQ0hBUikweGExKTsKLSAgICAgIGNhc2UgMHgwMGY3OiByZXR1 cm4oKENIQVIpMHhhZik7Ci0gICAgICBjYXNlIDB4MjE5MDogcmV0dXJuKChDSEFSKTB4YmIpOwot ICAgICAgY2FzZSAweDIxOTE6IHJldHVybigoQ0hBUikweGZlKTsKLSAgICAgIGNhc2UgMHgyMTky OiByZXR1cm4oKENIQVIpMHhkZSk7Ci0gICAgICBjYXNlIDB4MjE5MzogcmV0dXJuKChDSEFSKTB4 ZmYpOwotICAgICAgY2FzZSAweDIyMDY6IHJldHVybigoQ0hBUikweGFlKTsKLSAgICAgIGNhc2Ug MHgyMjA3OiByZXR1cm4oKENIQVIpMHhmZCk7Ci0gICAgICBjYXNlIDB4MjIwYTogcmV0dXJuKChD SEFSKTB4YjUpOwotICAgICAgY2FzZSAweDIyMTg6IHJldHVybigoQ0hBUikweGJjKTsKLSAgICAg IGNhc2UgMHgyMjI4OiByZXR1cm4oKENIQVIpMHhkZik7Ci0gICAgICBjYXNlIDB4MjIyOTogcmV0 dXJuKChDSEFSKTB4ZDEpOwotICAgICAgY2FzZSAweDIyMmE6IHJldHVybigoQ0hBUikweGQyKTsK LSAgICAgIGNhc2UgMHgyMjYwOiByZXR1cm4oKENIQVIpMHhiMCk7Ci0gICAgICBjYXNlIDB4MjI2 MTogcmV0dXJuKChDSEFSKTB4YjYpOwotICAgICAgY2FzZSAweDIyNjI6IHJldHVybigoQ0hBUikw eGNkKTsKLSAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENIQVIpMHhiOCk7Ci0gICAgICBjYXNl IDB4MjI2NTogcmV0dXJuKChDSEFSKTB4YjcpOwotICAgICAgY2FzZSAweDIyODI6IHJldHVybigo Q0hBUikweGUwKTsKLSAgICAgIGNhc2UgMHgyMjgzOiByZXR1cm4oKENIQVIpMHhlMSk7Ci0gICAg ICBjYXNlIDB4MjI5NjogcmV0dXJuKChDSEFSKTB4ZDYpOwotICAgICAgY2FzZSAweDIyYTI6IHJl dHVybigoQ0hBUikweGQ3KTsKLSAgICAgIGNhc2UgMHgyMmEzOiByZXR1cm4oKENIQVIpMHhkOCk7 Ci0gICAgICBjYXNlIDB4MjJhNDogcmV0dXJuKChDSEFSKTB4YmEpOwotICAgICAgY2FzZSAweDIy YTU6IHJldHVybigoQ0hBUikweGI5KTsKLSAgICAgIGNhc2UgMHgyMmM0OiByZXR1cm4oKENIQVIp MHhiMSk7Ci0gICAgICBjYXNlIDB4MjMwODogcmV0dXJuKChDSEFSKTB4Y2YpOwotICAgICAgY2Fz ZSAweDIzMGE6IHJldHVybigoQ0hBUikweGNlKTsKLSAgICAgIGNhc2UgMHgyMzM3OiByZXR1cm4o KENIQVIpMHhkOSk7Ci0gICAgICBjYXNlIDB4MjMzOTogcmV0dXJuKChDSEFSKTB4Y2EpOwotICAg ICAgY2FzZSAweDIzM2Q6IHJldHVybigoQ0hBUikweGQ1KTsKLSAgICAgIGNhc2UgMHgyMzNmOiBy ZXR1cm4oKENIQVIpMHhiZSk7Ci0gICAgICBjYXNlIDB4MjM0MDogcmV0dXJuKChDSEFSKTB4YmYp OwotICAgICAgY2FzZSAweDIzNDk6IHJldHVybigoQ0hBUikweGQwKTsKLSAgICAgIGNhc2UgMHgy MzRiOiByZXR1cm4oKENIQVIpMHhjMik7Ci0gICAgICBjYXNlIDB4MjM0ZTogcmV0dXJuKChDSEFS KTB4YzApOwotICAgICAgY2FzZSAweDIzNTI6IHJldHVybigoQ0hBUikweGMzKTsKLSAgICAgIGNh c2UgMHgyMzU1OiByZXR1cm4oKENIQVIpMHhjMSk7Ci0gICAgICBjYXNlIDB4MjM1OTogcmV0dXJu KChDSEFSKTB4ZTIpOwotICAgICAgY2FzZSAweDIzNWQ6IHJldHVybigoQ0hBUikweGJkKTsKLSAg ICAgIGNhc2UgMHgyMzVlOiByZXR1cm4oKENIQVIpMHhjOSk7Ci0gICAgICBjYXNlIDB4MjM1Zjog cmV0dXJuKChDSEFSKTB4YzcpOwotICAgICAgY2FzZSAweDIzNjg6IHJldHVybigoQ0hBUikweGM2 KTsKLSAgICAgIGNhc2UgMHgyMzZhOiByZXR1cm4oKENIQVIpMHhjYyk7Ci0gICAgICBjYXNlIDB4 MjM2YjogcmV0dXJuKChDSEFSKTB4Y2IpOwotICAgICAgY2FzZSAweDIzNmM6IHJldHVybigoQ0hB UikweGQzKTsKLSAgICAgIGNhc2UgMHgyMzcxOiByZXR1cm4oKENIQVIpMHhjNSk7Ci0gICAgICBj YXNlIDB4MjM3MjogcmV0dXJuKChDSEFSKTB4YzQpOwotICAgICAgY2FzZSAweDIzNzM6IHJldHVy bigoQ0hBUikweGRiKTsKLSAgICAgIGNhc2UgMHgyMzc0OiByZXR1cm4oKENIQVIpMHhiMyk7Ci0g ICAgICBjYXNlIDB4MjM3NTogcmV0dXJuKChDSEFSKTB4YjIpOwotICAgICAgY2FzZSAweDIzN2E6 IHJldHVybigoQ0hBUikweGI0KTsKLSAgICAgIGNhc2UgMHgyNTAwOiByZXR1cm4oKENIQVIpMHhh YSk7Ci0gICAgICBjYXNlIDB4MjUwMjogcmV0dXJuKChDSEFSKTB4YTIpOwotICAgICAgY2FzZSAw eDI1MGM6IHJldHVybigoQ0hBUikweGFkKTsKLSAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENI QVIpMHhhNSk7Ci0gICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKTB4YTYpOwotICAgICAg Y2FzZSAweDI1MTg6IHJldHVybigoQ0hBUikweGFjKTsKLSAgICAgIGNhc2UgMHgyNTFjOiByZXR1 cm4oKENIQVIpMHhhOSk7Ci0gICAgICBjYXNlIDB4MjUyNDogcmV0dXJuKChDSEFSKTB4YTMpOwot ICAgICAgY2FzZSAweDI1MmM6IHJldHVybigoQ0hBUikweGE4KTsKLSAgICAgIGNhc2UgMHgyNTM0 OiByZXR1cm4oKENIQVIpMHhhNyk7Ci0gICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChDSEFSKTB4 YWIpOwotICAgICAgY2FzZSAweDI1YWY6IHJldHVybigoQ0hBUikweGM4KTsKLSAgICAgIGNhc2Ug MHgyNWNiOiByZXR1cm4oKENIQVIpMHhkZCk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAo YyA8IDB4YTApCi0gICAgICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgICAgICBy ZXR1cm4odHhfcHVuYyhjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQVBMLVBsdXMgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfYXBsMyhV U0hPUlQgYykKLSNlbHNlCi10eF9hcGwzKGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFS KTB4YTApOwotICAgICAgY2FzZSAweDAwYTE6IHJldHVybigoQ0hBUikweGExKTsKLSAgICAgIGNh c2UgMHgwMGEyOiByZXR1cm4oKENIQVIpMHhhMik7Ci0gICAgICBjYXNlIDB4MDBhMzogcmV0dXJu KChDSEFSKTB4YTMpOwotICAgICAgY2FzZSAweDAwYTU6IHJldHVybigoQ0hBUikweGE1KTsKLSAg ICAgIGNhc2UgMHgwMGE2OiByZXR1cm4oKENIQVIpMHhhNik7Ci0gICAgICBjYXNlIDB4MDBhNzog cmV0dXJuKChDSEFSKTB4YTcpOwotICAgICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikweGE4 KTsKLSAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpMHhhYik7Ci0gICAgICBjYXNlIDB4 MDBhZjogcmV0dXJuKChDSEFSKTB4YWYpOwotICAgICAgY2FzZSAweDAwYjY6IHJldHVybigoQ0hB UikweGI2KTsKLSAgICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpMHhiNyk7Ci0gICAgICBj YXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKTB4YmIpOwotICAgICAgY2FzZSAweDAwYmY6IHJldHVy bigoQ0hBUikweGJmKTsKLSAgICAgIGNhc2UgMHgwMGMwOiByZXR1cm4oKENIQVIpMHhjMCk7Ci0g ICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFSKTB4YzEpOwotICAgICAgY2FzZSAweDAwYzI6 IHJldHVybigoQ0hBUikweGMyKTsKLSAgICAgIGNhc2UgMHgwMGMzOiByZXR1cm4oKENIQVIpMHhj Myk7Ci0gICAgICBjYXNlIDB4MDBjNDogcmV0dXJuKChDSEFSKTB4YzQpOwotICAgICAgY2FzZSAw eDAwYzU6IHJldHVybigoQ0hBUikweGM1KTsKLSAgICAgIGNhc2UgMHgwMGM2OiByZXR1cm4oKENI QVIpMHhjNik7Ci0gICAgICBjYXNlIDB4MDBjNzogcmV0dXJuKChDSEFSKTB4YzcpOwotICAgICAg Y2FzZSAweDAwYzg6IHJldHVybigoQ0hBUikweGM4KTsKLSAgICAgIGNhc2UgMHgwMGM5OiByZXR1 cm4oKENIQVIpMHhjOSk7Ci0gICAgICBjYXNlIDB4MDBjYTogcmV0dXJuKChDSEFSKTB4Y2EpOwot ICAgICAgY2FzZSAweDAwY2I6IHJldHVybigoQ0hBUikweGNiKTsKLSAgICAgIGNhc2UgMHgwMGNj OiByZXR1cm4oKENIQVIpMHhjYyk7Ci0gICAgICBjYXNlIDB4MDBjZDogcmV0dXJuKChDSEFSKTB4 Y2QpOwotICAgICAgY2FzZSAweDAwY2U6IHJldHVybigoQ0hBUikweGNlKTsKLSAgICAgIGNhc2Ug MHgwMGNmOiByZXR1cm4oKENIQVIpMHhjZik7Ci0gICAgICBjYXNlIDB4MDBkMTogcmV0dXJuKChD SEFSKTB4ZDEpOwotICAgICAgY2FzZSAweDAwZDI6IHJldHVybigoQ0hBUikweGQyKTsKLSAgICAg IGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIpMHhkMyk7Ci0gICAgICBjYXNlIDB4MDBkNDogcmV0 dXJuKChDSEFSKTB4ZDQpOwotICAgICAgY2FzZSAweDAwZDU6IHJldHVybigoQ0hBUikweGQ1KTsK LSAgICAgIGNhc2UgMHgwMGQ2OiByZXR1cm4oKENIQVIpMHhkNik7Ci0gICAgICBjYXNlIDB4MDBk NzogcmV0dXJuKChDSEFSKTB4ZDcpOwotICAgICAgY2FzZSAweDAwZDg6IHJldHVybigoQ0hBUikw eGQ4KTsKLSAgICAgIGNhc2UgMHgwMGQ5OiByZXR1cm4oKENIQVIpMHhkOSk7Ci0gICAgICBjYXNl IDB4MDBkYTogcmV0dXJuKChDSEFSKTB4ZGEpOwotICAgICAgY2FzZSAweDAwZGI6IHJldHVybigo Q0hBUikweGRiKTsKLSAgICAgIGNhc2UgMHgwMGRjOiByZXR1cm4oKENIQVIpMHhkYyk7Ci0gICAg ICBjYXNlIDB4MDBkZDogcmV0dXJuKChDSEFSKTB4ZGQpOwotICAgICAgY2FzZSAweDAwZGY6IHJl dHVybigoQ0hBUikweGRmKTsKLSAgICAgIGNhc2UgMHgwMGUwOiByZXR1cm4oKENIQVIpMHhlMCk7 Ci0gICAgICBjYXNlIDB4MDBlMTogcmV0dXJuKChDSEFSKTB4ZTEpOwotICAgICAgY2FzZSAweDAw ZTI6IHJldHVybigoQ0hBUikweGUyKTsKLSAgICAgIGNhc2UgMHgwMGUzOiByZXR1cm4oKENIQVIp MHhlMyk7Ci0gICAgICBjYXNlIDB4MDBlNDogcmV0dXJuKChDSEFSKTB4ZTQpOwotICAgICAgY2Fz ZSAweDAwZTU6IHJldHVybigoQ0hBUikweGU1KTsKLSAgICAgIGNhc2UgMHgwMGU2OiByZXR1cm4o KENIQVIpMHhlNik7Ci0gICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFSKTB4ZTcpOwotICAg ICAgY2FzZSAweDAwZTg6IHJldHVybigoQ0hBUikweGU4KTsKLSAgICAgIGNhc2UgMHgwMGU5OiBy ZXR1cm4oKENIQVIpMHhlOSk7Ci0gICAgICBjYXNlIDB4MDBlYTogcmV0dXJuKChDSEFSKTB4ZWEp OwotICAgICAgY2FzZSAweDAwZWI6IHJldHVybigoQ0hBUikweGViKTsKLSAgICAgIGNhc2UgMHgw MGVjOiByZXR1cm4oKENIQVIpMHhlYyk7Ci0gICAgICBjYXNlIDB4MDBlZDogcmV0dXJuKChDSEFS KTB4ZWQpOwotICAgICAgY2FzZSAweDAwZWU6IHJldHVybigoQ0hBUikweGVlKTsKLSAgICAgIGNh c2UgMHgwMGVmOiByZXR1cm4oKENIQVIpMHhlZik7Ci0gICAgICBjYXNlIDB4MDBmMTogcmV0dXJu KChDSEFSKTB4ZjEpOwotICAgICAgY2FzZSAweDAwZjI6IHJldHVybigoQ0hBUikweGYyKTsKLSAg ICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpMHhmMyk7Ci0gICAgICBjYXNlIDB4MDBmNDog cmV0dXJuKChDSEFSKTB4ZjQpOwotICAgICAgY2FzZSAweDAwZjU6IHJldHVybigoQ0hBUikweGY1 KTsKLSAgICAgIGNhc2UgMHgwMGY2OiByZXR1cm4oKENIQVIpMHhmNik7Ci0gICAgICBjYXNlIDB4 MDBmNzogcmV0dXJuKChDSEFSKTB4ZjcpOwotICAgICAgY2FzZSAweDAwZjk6IHJldHVybigoQ0hB UikweGY5KTsKLSAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpMHhmYSk7Ci0gICAgICBj YXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKTB4ZmIpOwotICAgICAgY2FzZSAweDAwZmM6IHJldHVy bigoQ0hBUikweGZjKTsKLSAgICAgIGNhc2UgMHgwMGZkOiByZXR1cm4oKENIQVIpMHhmZCk7Ci0g ICAgICBjYXNlIDB4MDBmZjogcmV0dXJuKChDSEFSKTB4ZmYpOwotICAgICAgY2FzZSAweDIwYWM6 IHJldHVybigoQ0hBUikweDgwKTsKLSAgICAgIGNhc2UgMHgyMTkwOiByZXR1cm4oKENIQVIpMHg4 NCk7Ci0gICAgICBjYXNlIDB4MjE5MTogcmV0dXJuKChDSEFSKTB4ODYpOwotICAgICAgY2FzZSAw eDIxOTI6IHJldHVybigoQ0hBUikweDg1KTsKLSAgICAgIGNhc2UgMHgyMTkzOiByZXR1cm4oKENI QVIpMHg4Nyk7Ci0gICAgICBjYXNlIDB4MjIwNTogcmV0dXJuKChDSEFSKTB4ZjgpOwotICAgICAg Y2FzZSAweDIyMDY6IHJldHVybigoQ0hBUikweDkxKTsKLSAgICAgIGNhc2UgMHgyMjA3OiByZXR1 cm4oKENIQVIpMHg5Mik7Ci0gICAgICBjYXNlIDB4MjIwYTogcmV0dXJuKChDSEFSKTB4YjkpOwot ICAgICAgY2FzZSAweDIyMTg6IHJldHVybigoQ0hBUikweGIwKTsKLSAgICAgIGNhc2UgMHgyMjI4 OiByZXR1cm4oKENIQVIpMHg5Zik7Ci0gICAgICBjYXNlIDB4MjIyOTogcmV0dXJuKChDSEFSKTB4 OWQpOwotICAgICAgY2FzZSAweDIyMmE6IHJldHVybigoQ0hBUikweDllKTsKLSAgICAgIGNhc2Ug MHgyMjYwOiByZXR1cm4oKENIQVIpMHhhYyk7Ci0gICAgICBjYXNlIDB4MjI2MTogcmV0dXJuKChD SEFSKTB4YWQpOwotICAgICAgY2FzZSAweDIyNjQ6IHJldHVybigoQ0hBUikweDg4KTsKLSAgICAg IGNhc2UgMHgyMjY1OiByZXR1cm4oKENIQVIpMHg4OSk7Ci0gICAgICBjYXNlIDB4MjI4MjogcmV0 dXJuKChDSEFSKTB4OWIpOwotICAgICAgY2FzZSAweDIyODM6IHJldHVybigoQ0hBUikweDljKTsK LSAgICAgIGNhc2UgMHgyMjk2OiByZXR1cm4oKENIQVIpMHhiNCk7Ci0gICAgICBjYXNlIDB4MjJh MjogcmV0dXJuKChDSEFSKTB4YTQpOwotICAgICAgY2FzZSAweDIyYTM6IHJldHVybigoQ0hBUikw eDgxKTsKLSAgICAgIGNhc2UgMHgyMmE0OiByZXR1cm4oKENIQVIpMHg4Mik7Ci0gICAgICBjYXNl IDB4MjJhNTogcmV0dXJuKChDSEFSKTB4ODMpOwotICAgICAgY2FzZSAweDIyYzQ6IHJldHVybigo Q0hBUikweGFhKTsKLSAgICAgIGNhc2UgMHgyMzA4OiByZXR1cm4oKENIQVIpMHg5Nyk7Ci0gICAg ICBjYXNlIDB4MjMwYTogcmV0dXJuKChDSEFSKTB4OTgpOwotICAgICAgY2FzZSAweDIzMzc6IHJl dHVybigoQ0hBUikweGRlKTsKLSAgICAgIGNhc2UgMHgyMzM5OiByZXR1cm4oKENIQVIpMHg4ZSk7 Ci0gICAgICBjYXNlIDB4MjMzZDogcmV0dXJuKChDSEFSKTB4YjIpOwotICAgICAgY2FzZSAweDIz M2Y6IHJldHVybigoQ0hBUikweDlhKTsKLSAgICAgIGNhc2UgMHgyMzQwOiByZXR1cm4oKENIQVIp MHg5OSk7Ci0gICAgICBjYXNlIDB4MjM0OTogcmV0dXJuKChDSEFSKTB4YjMpOwotICAgICAgY2Fz ZSAweDIzNGI6IHJldHVybigoQ0hBUikweDkzKTsKLSAgICAgIGNhc2UgMHgyMzRlOiByZXR1cm4o KENIQVIpMHg5Nik7Ci0gICAgICBjYXNlIDB4MjM1MjogcmV0dXJuKChDSEFSKTB4OTQpOwotICAg ICAgY2FzZSAweDIzNTU6IHJldHVybigoQ0hBUikweDk1KTsKLSAgICAgIGNhc2UgMHgyMzU5OiBy ZXR1cm4oKENIQVIpMHg4Zik7Ci0gICAgICBjYXNlIDB4MjM1ZDogcmV0dXJuKChDSEFSKTB4YTkp OwotICAgICAgY2FzZSAweDIzNWU6IHJldHVybigoQ0hBUikweDhkKTsKLSAgICAgIGNhc2UgMHgy MzVmOiByZXR1cm4oKENIQVIpMHhiNSk7Ci0gICAgICBjYXNlIDB4MjM2NDogcmV0dXJuKChDSEFS KTB4ZjApOwotICAgICAgY2FzZSAweDIzNjg6IHJldHVybigoQ0hBUikweGZlKTsKLSAgICAgIGNh c2UgMHgyMzZhOiByZXR1cm4oKENIQVIpMHhhZSk7Ci0gICAgICBjYXNlIDB4MjM2YjogcmV0dXJu KChDSEFSKTB4OTApOwotICAgICAgY2FzZSAweDIzNmM6IHJldHVybigoQ0hBUikweGQwKTsKLSAg ICAgIGNhc2UgMHgyMzcxOiByZXR1cm4oKENIQVIpMHg4Yik7Ci0gICAgICBjYXNlIDB4MjM3Mjog cmV0dXJuKChDSEFSKTB4OGEpOwotICAgICAgY2FzZSAweDIzNzM6IHJldHVybigoQ0hBUikweGJj KTsKLSAgICAgIGNhc2UgMHgyMzc0OiByZXR1cm4oKENIQVIpMHhiZCk7Ci0gICAgICBjYXNlIDB4 MjM3NTogcmV0dXJuKChDSEFSKTB4YmUpOwotICAgICAgY2FzZSAweDIzNzc6IHJldHVybigoQ0hB UikweGJhKTsKLSAgICAgIGNhc2UgMHgyMzdhOiByZXR1cm4oKENIQVIpMHhiOCk7Ci0gICAgICBj YXNlIDB4MjVhZjogcmV0dXJuKChDSEFSKTB4OGMpOwotICAgICAgY2FzZSAweDI1Y2I6IHJldHVy bigoQ0hBUikweGIxKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybih0eF9wdW5jKGMp KTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBJQk0gQVBMMiAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9hcGw0KFVTSE9SVCBjKQotI2Vsc2UK LXR4X2FwbDQoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBzd2l0 Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpMHhmZik7Ci0gICAgICBj YXNlIDB4MDBhMTogcmV0dXJuKChDSEFSKTB4YWQpOwotICAgICAgY2FzZSAweDAwYTM6IHJldHVy bigoQ0hBUikweDljKTsKLSAgICAgIGNhc2UgMHgwMGE2OiByZXR1cm4oKENIQVIpMHhkZCk7Ci0g ICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKTB4ZmUpOwotICAgICAgY2FzZSAweDAwYWE6 IHJldHVybigoQ0hBUikweGE2KTsKLSAgICAgIGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIpMHhh YSk7Ci0gICAgICBjYXNlIDB4MDBhZjogcmV0dXJuKChDSEFSKTB4ZmQpOwotICAgICAgY2FzZSAw eDAwYmE6IHJldHVybigoQ0hBUikweGE3KTsKLSAgICAgIGNhc2UgMHgwMGJmOiByZXR1cm4oKENI QVIpMHhhOCk7Ci0gICAgICBjYXNlIDB4MDBjNDogcmV0dXJuKChDSEFSKTB4OGUpOwotICAgICAg Y2FzZSAweDAwYzU6IHJldHVybigoQ0hBUikweGVlKTsgIC8qIGFuZCAweDhmICovCi0gICAgICBj YXNlIDB4MDBjNzogcmV0dXJuKChDSEFSKTB4ODApOwotICAgICAgY2FzZSAweDAwY2M6IHJldHVy bigoQ0hBUikweGRlKTsKLSAgICAgIGNhc2UgMHgwMGQxOiByZXR1cm4oKENIQVIpMHhhNSk7Ci0g ICAgICBjYXNlIDB4MDBkNjogcmV0dXJuKChDSEFSKTB4OTkpOwotICAgICAgY2FzZSAweDAwZDc6 IHJldHVybigoQ0hBUikweGY1KTsKLSAgICAgIGNhc2UgMHgwMGRjOiByZXR1cm4oKENIQVIpMHg5 YSk7Ci0gICAgICBjYXNlIDB4MDBkZjogcmV0dXJuKChDSEFSKTB4ZTEpOwotICAgICAgY2FzZSAw eDAwZTA6IHJldHVybigoQ0hBUikweDg1KTsKLSAgICAgIGNhc2UgMHgwMGUxOiByZXR1cm4oKENI QVIpMHhhMCk7Ci0gICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFSKTB4ODMpOwotICAgICAg Y2FzZSAweDAwZTQ6IHJldHVybigoQ0hBUikweDg0KTsKLSAgICAgIGNhc2UgMHgwMGU1OiByZXR1 cm4oKENIQVIpMHg4Nik7Ci0gICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFSKTB4ODcpOwot ICAgICAgY2FzZSAweDAwZTg6IHJldHVybigoQ0hBUikweDhhKTsKLSAgICAgIGNhc2UgMHgwMGU5 OiByZXR1cm4oKENIQVIpMHg4Mik7Ci0gICAgICBjYXNlIDB4MDBlYTogcmV0dXJuKChDSEFSKTB4 ODgpOwotICAgICAgY2FzZSAweDAwZWI6IHJldHVybigoQ0hBUikweDg5KTsKLSAgICAgIGNhc2Ug MHgwMGVjOiByZXR1cm4oKENIQVIpMHg4ZCk7Ci0gICAgICBjYXNlIDB4MDBlZDogcmV0dXJuKChD SEFSKTB4YTEpOwotICAgICAgY2FzZSAweDAwZWU6IHJldHVybigoQ0hBUikweDhjKTsKLSAgICAg IGNhc2UgMHgwMGVmOiByZXR1cm4oKENIQVIpMHg4Yik7Ci0gICAgICBjYXNlIDB4MDBmMTogcmV0 dXJuKChDSEFSKTB4YTQpOwotICAgICAgY2FzZSAweDAwZjI6IHJldHVybigoQ0hBUikweDk1KTsK LSAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpMHhhMik7Ci0gICAgICBjYXNlIDB4MDBm NDogcmV0dXJuKChDSEFSKTB4OTMpOwotICAgICAgY2FzZSAweDAwZjY6IHJldHVybigoQ0hBUikw eDk0KTsKLSAgICAgIGNhc2UgMHgwMGY3OiByZXR1cm4oKENIQVIpMHhmNik7Ci0gICAgICBjYXNl IDB4MDBmODogcmV0dXJuKChDSEFSKTB4OWIpOwotICAgICAgY2FzZSAweDAwZjk6IHJldHVybigo Q0hBUikweDk3KTsKLSAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpMHhhMyk7Ci0gICAg ICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKTB4OTYpOwotICAgICAgY2FzZSAweDAwZmM6IHJl dHVybigoQ0hBUikweDgxKTsKLSAgICAgIGNhc2UgMHgyMTkwOiByZXR1cm4oKENIQVIpMHg5ZSk7 Ci0gICAgICBjYXNlIDB4MjE5MTogcmV0dXJuKChDSEFSKTB4YzYpOwotICAgICAgY2FzZSAweDIx OTI6IHJldHVybigoQ0hBUikweGFiKTsKLSAgICAgIGNhc2UgMHgyMTkzOiByZXR1cm4oKENIQVIp MHhjNyk7Ci0gICAgICBjYXNlIDB4MjIwNjogcmV0dXJuKChDSEFSKTB4YjYpOwotICAgICAgY2Fz ZSAweDIyMDc6IHJldHVybigoQ0hBUikweGI3KTsKLSAgICAgIGNhc2UgMHgyMjE4OiByZXR1cm4o KENIQVIpMHhmOCk7Ci0gICAgICBjYXNlIDB4MjIyODogcmV0dXJuKChDSEFSKTB4ZWIpOwotICAg ICAgY2FzZSAweDIyMjk6IHJldHVybigoQ0hBUikweGVmKTsKLSAgICAgIGNhc2UgMHgyMjJhOiBy ZXR1cm4oKENIQVIpMHhhYyk7Ci0gICAgICBjYXNlIDB4MjIzNTogcmV0dXJuKChDSEFSKTB4ZDIp OwotICAgICAgY2FzZSAweDIyNjA6IHJldHVybigoQ0hBUikweGY0KTsKLSAgICAgIGNhc2UgMHgy MjYxOiByZXR1cm4oKENIQVIpMHhjZik7Ci0gICAgICBjYXNlIDB4MjI2NDogcmV0dXJuKChDSEFS KTB4ZjMpOwotICAgICAgY2FzZSAweDIyNjU6IHJldHVybigoQ0hBUikweGYyKTsKLSAgICAgIGNh c2UgMHgyMjgyOiByZXR1cm4oKENIQVIpMHhlMik7Ci0gICAgICBjYXNlIDB4MjI4MzogcmV0dXJu KChDSEFSKTB4ZTMpOwotICAgICAgY2FzZSAweDIyOTY6IHJldHVybigoQ0hBUikweGU5KTsKLSAg ICAgIGNhc2UgMHgyMmEyOiByZXR1cm4oKENIQVIpMHhkNik7Ci0gICAgICBjYXNlIDB4MjJhMzog cmV0dXJuKChDSEFSKTB4ZDcpOwotICAgICAgY2FzZSAweDIyYTQ6IHJldHVybigoQ0hBUikweDk4 KTsKLSAgICAgIGNhc2UgMHgyMmE1OiByZXR1cm4oKENIQVIpMHg5ZCk7Ci0gICAgICBjYXNlIDB4 MjJjNDogcmV0dXJuKChDSEFSKTB4ZDgpOwotICAgICAgY2FzZSAweDIzMDg6IHJldHVybigoQ0hB UikweGE5KTsKLSAgICAgIGNhc2UgMHgyMzBhOiByZXR1cm4oKENIQVIpMHhiZSk7Ci0gICAgICBj YXNlIDB4MjMzNjogcmV0dXJuKChDSEFSKTB4OWYpOwotICAgICAgY2FzZSAweDIzMzc6IHJldHVy bigoQ0hBUikweGQzKTsKLSAgICAgIGNhc2UgMHgyMzM5OiByZXR1cm4oKENIQVIpMHg5Mik7Ci0g ICAgICBjYXNlIDB4MjMzYjogcmV0dXJuKChDSEFSKTB4ZDUpOwotICAgICAgY2FzZSAweDIzM2Q6 IHJldHVybigoQ0hBUikweGU4KTsKLSAgICAgIGNhc2UgMHgyMzNmOiByZXR1cm4oKENIQVIpMHhm MCk7Ci0gICAgICBjYXNlIDB4MjM0MDogcmV0dXJuKChDSEFSKTB4ZjEpOwotICAgICAgY2FzZSAw eDIzNDI6IHJldHVybigoQ0hBUikweGQ0KTsKLSAgICAgIGNhc2UgMHgyMzQ5OiByZXR1cm4oKENI QVIpMHhlZCk7Ci0gICAgICBjYXNlIDB4MjM0YjogcmV0dXJuKChDSEFSKTB4ZmIpOwotICAgICAg Y2FzZSAweDIzNGU6IHJldHVybigoQ0hBUikweGFmKTsKLSAgICAgIGNhc2UgMHgyMzUyOiByZXR1 cm4oKENIQVIpMHhmYyk7Ci0gICAgICBjYXNlIDB4MjM1NTogcmV0dXJuKChDSEFSKTB4YWUpOwot ICAgICAgY2FzZSAweDIzNTk6IHJldHVybigoQ0hBUikweGY3KTsKLSAgICAgIGNhc2UgMHgyMzVk OiByZXR1cm4oKENIQVIpMHhlNCk7Ci0gICAgICBjYXNlIDB4MjM1ZTogcmV0dXJuKChDSEFSKTB4 OTEpOwotICAgICAgY2FzZSAweDIzNWY6IHJldHVybigoQ0hBUikweGI1KTsKLSAgICAgIGNhc2Ug MHgyMzZiOiByZXR1cm4oKENIQVIpMHhmYSk7Ci0gICAgICBjYXNlIDB4MjM3MTogcmV0dXJuKChD SEFSKTB4ZTcpOwotICAgICAgY2FzZSAweDIzNzI6IHJldHVybigoQ0hBUikweGU1KTsKLSAgICAg IGNhc2UgMHgyMzczOiByZXR1cm4oKENIQVIpMHhlYyk7Ci0gICAgICBjYXNlIDB4MjM3NDogcmV0 dXJuKChDSEFSKTB4ZTYpOwotICAgICAgY2FzZSAweDIzNzU6IHJldHVybigoQ0hBUikweGY5KTsK LSAgICAgIGNhc2UgMHgyMzc3OiByZXR1cm4oKENIQVIpMHhkMSk7Ci0gICAgICBjYXNlIDB4MjM3 ODogcmV0dXJuKChDSEFSKTB4ZDApOwotICAgICAgY2FzZSAweDIzN2E6IHJldHVybigoQ0hBUikw eGUwKTsKLSAgICAgIGNhc2UgMHgyNTAwOiByZXR1cm4oKENIQVIpMHhjNCk7Ci0gICAgICBjYXNl IDB4MjUwMjogcmV0dXJuKChDSEFSKTB4YjMpOwotICAgICAgY2FzZSAweDI1MGM6IHJldHVybigo Q0hBUikweGRhKTsKLSAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENIQVIpMHhiZik7Ci0gICAg ICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKTB4YzApOwotICAgICAgY2FzZSAweDI1MTg6IHJl dHVybigoQ0hBUikweGQ5KTsKLSAgICAgIGNhc2UgMHgyNTFjOiByZXR1cm4oKENIQVIpMHhjMyk7 Ci0gICAgICBjYXNlIDB4MjUyNDogcmV0dXJuKChDSEFSKTB4YjQpOwotICAgICAgY2FzZSAweDI1 MmM6IHJldHVybigoQ0hBUikweGMyKTsKLSAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4oKENIQVIp MHhjMSk7Ci0gICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChDSEFSKTB4YzUpOwotICAgICAgY2Fz ZSAweDI1NTA6IHJldHVybigoQ0hBUikweGNkKTsKLSAgICAgIGNhc2UgMHgyNTUxOiByZXR1cm4o KENIQVIpMHhiYSk7Ci0gICAgICBjYXNlIDB4MjU1NDogcmV0dXJuKChDSEFSKTB4YzkpOwotICAg ICAgY2FzZSAweDI1NTc6IHJldHVybigoQ0hBUikweGJiKTsKLSAgICAgIGNhc2UgMHgyNTVhOiBy ZXR1cm4oKENIQVIpMHhjOCk7Ci0gICAgICBjYXNlIDB4MjU1ZDogcmV0dXJuKChDSEFSKTB4YmMp OwotICAgICAgY2FzZSAweDI1NjA6IHJldHVybigoQ0hBUikweGNjKTsKLSAgICAgIGNhc2UgMHgy NTYzOiByZXR1cm4oKENIQVIpMHhiOSk7Ci0gICAgICBjYXNlIDB4MjU2NjogcmV0dXJuKChDSEFS KTB4Y2IpOwotICAgICAgY2FzZSAweDI1Njk6IHJldHVybigoQ0hBUikweGNhKTsKLSAgICAgIGNh c2UgMHgyNTZjOiByZXR1cm4oKENIQVIpMHhjZSk7Ci0gICAgICBjYXNlIDB4MjU4MDogcmV0dXJu KChDSEFSKTB4ZGYpOwotICAgICAgY2FzZSAweDI1ODQ6IHJldHVybigoQ0hBUikweGRjKTsKLSAg ICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oKENIQVIpMHhkYik7Ci0gICAgICBjYXNlIDB4MjU5MTog cmV0dXJuKChDSEFSKTB4YjApOwotICAgICAgY2FzZSAweDI1OTI6IHJldHVybigoQ0hBUikweGIx KTsKLSAgICAgIGNhc2UgMHgyNTkzOiByZXR1cm4oKENIQVIpMHhiMik7Ci0gICAgICBjYXNlIDB4 MjVhZjogcmV0dXJuKChDSEFSKTB4OTApOwotICAgICAgY2FzZSAweDI1Y2I6IHJldHVybigoQ0hB UikweGVhKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybih0eF9wdW5jKGMpKTsKLSAg ICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBUEwt Mjc0MSAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9hcGw1KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2Fw bDUoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBzd2l0Y2ggKGMp IHsKLSAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpMHhhMCk7Ci0gICAgICBjYXNlIDB4 MDBhMTogcmV0dXJuKChDSEFSKTB4YTEpOwotICAgICAgY2FzZSAweDAwYTI6IHJldHVybigoQ0hB UikweGEyKTsKLSAgICAgIGNhc2UgMHgwMGEzOiByZXR1cm4oKENIQVIpMHhhMyk7Ci0gICAgICBj YXNlIDB4MDBhODogcmV0dXJuKChDSEFSKTB4YTgpOwotICAgICAgY2FzZSAweDAwYWY6IHJldHVy bigoQ0hBUikweGFmKTsKLSAgICAgIGNhc2UgMHgwMGI2OiByZXR1cm4oKENIQVIpMHhiNik7Ci0g ICAgICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKTB4YjcpOwotICAgICAgY2FzZSAweDAwYmY6 IHJldHVybigoQ0hBUikweGJmKTsKLSAgICAgIGNhc2UgMHgwMGM0OiByZXR1cm4oKENIQVIpMHhj NCk7Ci0gICAgICBjYXNlIDB4MDBjNTogcmV0dXJuKChDSEFSKTB4YzUpOwotICAgICAgY2FzZSAw eDAwYzY6IHJldHVybigoQ0hBUikweGM2KTsKLSAgICAgIGNhc2UgMHgwMGM3OiByZXR1cm4oKENI QVIpMHhjNyk7Ci0gICAgICBjYXNlIDB4MDBjODogcmV0dXJuKChDSEFSKTB4YzgpOwotICAgICAg Y2FzZSAweDAwYzk6IHJldHVybigoQ0hBUikweGM5KTsKLSAgICAgIGNhc2UgMHgwMGNkOiByZXR1 cm4oKENIQVIpMHhjZCk7Ci0gICAgICBjYXNlIDB4MDBkMTogcmV0dXJuKChDSEFSKTB4ZDEpOwot ICAgICAgY2FzZSAweDAwZDY6IHJldHVybigoQ0hBUikweGQ2KTsKLSAgICAgIGNhc2UgMHgwMGQ3 OiByZXR1cm4oKENIQVIpMHhkNyk7Ci0gICAgICBjYXNlIDB4MDBkODogcmV0dXJuKChDSEFSKTB4 ZDgpOwotICAgICAgY2FzZSAweDAwZGM6IHJldHVybigoQ0hBUikweGRjKTsKLSAgICAgIGNhc2Ug MHgwMGRmOiByZXR1cm4oKENIQVIpMHhkZik7Ci0gICAgICBjYXNlIDB4MDBlMDogcmV0dXJuKChD SEFSKTB4ZTApOwotICAgICAgY2FzZSAweDAwZTE6IHJldHVybigoQ0hBUikweGUxKTsKLSAgICAg IGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIpMHhlMik7Ci0gICAgICBjYXNlIDB4MDBlMzogcmV0 dXJuKChDSEFSKTB4ZTMpOwotICAgICAgY2FzZSAweDAwZTQ6IHJldHVybigoQ0hBUikweGU0KTsK LSAgICAgIGNhc2UgMHgwMGU1OiByZXR1cm4oKENIQVIpMHhlNSk7Ci0gICAgICBjYXNlIDB4MDBl NjogcmV0dXJuKChDSEFSKTB4ZTYpOwotICAgICAgY2FzZSAweDAwZTc6IHJldHVybigoQ0hBUikw eGU3KTsKLSAgICAgIGNhc2UgMHgwMGU4OiByZXR1cm4oKENIQVIpMHhlOCk7Ci0gICAgICBjYXNl IDB4MDBlOTogcmV0dXJuKChDSEFSKTB4ZTkpOwotICAgICAgY2FzZSAweDAwZWE6IHJldHVybigo Q0hBUikweGVhKTsKLSAgICAgIGNhc2UgMHgwMGViOiByZXR1cm4oKENIQVIpMHhlYik7Ci0gICAg ICBjYXNlIDB4MDBlYzogcmV0dXJuKChDSEFSKTB4ZWMpOwotICAgICAgY2FzZSAweDAwZWQ6IHJl dHVybigoQ0hBUikweGVkKTsKLSAgICAgIGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIpMHhlZSk7 Ci0gICAgICBjYXNlIDB4MDBlZjogcmV0dXJuKChDSEFSKTB4ZWYpOwotICAgICAgY2FzZSAweDAw ZjE6IHJldHVybigoQ0hBUikweGYxKTsKLSAgICAgIGNhc2UgMHgwMGYyOiByZXR1cm4oKENIQVIp MHhmMik7Ci0gICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKTB4ZjMpOwotICAgICAgY2Fz ZSAweDAwZjQ6IHJldHVybigoQ0hBUikweGY0KTsKLSAgICAgIGNhc2UgMHgwMGY1OiByZXR1cm4o KENIQVIpMHhmNSk7Ci0gICAgICBjYXNlIDB4MDBmNjogcmV0dXJuKChDSEFSKTB4ZjYpOwotICAg ICAgY2FzZSAweDAwZjc6IHJldHVybigoQ0hBUikweGY3KTsKLSAgICAgIGNhc2UgMHgwMGY5OiBy ZXR1cm4oKENIQVIpMHhmOSk7Ci0gICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKTB4ZmEp OwotICAgICAgY2FzZSAweDAwZmI6IHJldHVybigoQ0hBUikweGZiKTsKLSAgICAgIGNhc2UgMHgw MGZjOiByZXR1cm4oKENIQVIpMHhmYyk7Ci0gICAgICBjYXNlIDB4MjBhYzogcmV0dXJuKChDSEFS KTB4ODApOwotICAgICAgY2FzZSAweDIxOTA6IHJldHVybigoQ0hBUikweDg0KTsKLSAgICAgIGNh c2UgMHgyMTkxOiByZXR1cm4oKENIQVIpMHg4Nik7Ci0gICAgICBjYXNlIDB4MjE5MjogcmV0dXJu KChDSEFSKTB4ODUpOwotICAgICAgY2FzZSAweDIxOTM6IHJldHVybigoQ0hBUikweDg3KTsKLSAg ICAgIGNhc2UgMHgyMjA1OiByZXR1cm4oKENIQVIpMHhmOCk7Ci0gICAgICBjYXNlIDB4MjIwNjog cmV0dXJuKChDSEFSKTB4OTEpOwotICAgICAgY2FzZSAweDIyMDc6IHJldHVybigoQ0hBUikweDky KTsKLSAgICAgIGNhc2UgMHgyMjBhOiByZXR1cm4oKENIQVIpMHhiOSk7Ci0gICAgICBjYXNlIDB4 MjIxODogcmV0dXJuKChDSEFSKTB4YjApOwotICAgICAgY2FzZSAweDIyMjg6IHJldHVybigoQ0hB UikweDlmKTsKLSAgICAgIGNhc2UgMHgyMjI5OiByZXR1cm4oKENIQVIpMHg5ZCk7Ci0gICAgICBj YXNlIDB4MjIyYTogcmV0dXJuKChDSEFSKTB4OWUpOwotICAgICAgY2FzZSAweDIyMzU6IHJldHVy bigoQ0hBUikweGZkKTsKLSAgICAgIGNhc2UgMHgyMjYwOiByZXR1cm4oKENIQVIpMHhhYyk7Ci0g ICAgICBjYXNlIDB4MjI2MTogcmV0dXJuKChDSEFSKTB4YTYpOwotICAgICAgY2FzZSAweDIyNjI6 IHJldHVybigoQ0hBUikweGJiKTsKLSAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENIQVIpMHg4 OCk7Ci0gICAgICBjYXNlIDB4MjI2NTogcmV0dXJuKChDSEFSKTB4ODkpOwotICAgICAgY2FzZSAw eDIyODI6IHJldHVybigoQ0hBUikweDliKTsKLSAgICAgIGNhc2UgMHgyMjgzOiByZXR1cm4oKENI QVIpMHg5Yyk7Ci0gICAgICBjYXNlIDB4MjI5NjogcmV0dXJuKChDSEFSKTB4YjQpOwotICAgICAg Y2FzZSAweDIyYTI6IHJldHVybigoQ0hBUikweGE0KTsKLSAgICAgIGNhc2UgMHgyMmEzOiByZXR1 cm4oKENIQVIpMHg4MSk7Ci0gICAgICBjYXNlIDB4MjJhNDogcmV0dXJuKChDSEFSKTB4ODIpOwot ICAgICAgY2FzZSAweDIyYTU6IHJldHVybigoQ0hBUikweDgzKTsKLSAgICAgIGNhc2UgMHgyMmM0 OiByZXR1cm4oKENIQVIpMHhhYSk7Ci0gICAgICBjYXNlIDB4MjMwODogcmV0dXJuKChDSEFSKTB4 OTcpOwotICAgICAgY2FzZSAweDIzMGE6IHJldHVybigoQ0hBUikweDk4KTsKLSAgICAgIGNhc2Ug MHgyMzM2OiByZXR1cm4oKENIQVIpMHhhNyk7Ci0gICAgICBjYXNlIDB4MjMzNzogcmV0dXJuKChD SEFSKTB4ZGUpOwotICAgICAgY2FzZSAweDIzMzk6IHJldHVybigoQ0hBUikweDhlKTsKLSAgICAg IGNhc2UgMHgyMzNiOiByZXR1cm4oKENIQVIpMHhjYik7Ci0gICAgICBjYXNlIDB4MjMzZDogcmV0 dXJuKChDSEFSKTB4YjIpOwotICAgICAgY2FzZSAweDIzM2Y6IHJldHVybigoQ0hBUikweDlhKTsK LSAgICAgIGNhc2UgMHgyMzQwOiByZXR1cm4oKENIQVIpMHg5OSk7Ci0gICAgICBjYXNlIDB4MjM0 MjogcmV0dXJuKChDSEFSKTB4Y2EpOwotICAgICAgY2FzZSAweDIzNDc6IHJldHVybigoQ0hBUikw eGQ0KTsKLSAgICAgIGNhc2UgMHgyMzQ4OiByZXR1cm4oKENIQVIpMHhkNSk7Ci0gICAgICBjYXNl IDB4MjM0OTogcmV0dXJuKChDSEFSKTB4YjMpOwotICAgICAgY2FzZSAweDIzNGI6IHJldHVybigo Q0hBUikweDkzKTsKLSAgICAgIGNhc2UgMHgyMzRlOiByZXR1cm4oKENIQVIpMHg5Nik7Ci0gICAg ICBjYXNlIDB4MjM1MDogcmV0dXJuKChDSEFSKTB4ZDIpOwotICAgICAgY2FzZSAweDIzNTI6IHJl dHVybigoQ0hBUikweDk0KTsKLSAgICAgIGNhc2UgMHgyMzU1OiByZXR1cm4oKENIQVIpMHg5NSk7 Ci0gICAgICBjYXNlIDB4MjM1NzogcmV0dXJuKChDSEFSKTB4ZDMpOwotICAgICAgY2FzZSAweDIz NTk6IHJldHVybigoQ0hBUikweDhmKTsKLSAgICAgIGNhc2UgMHgyMzVkOiByZXR1cm4oKENIQVIp MHhhOSk7Ci0gICAgICBjYXNlIDB4MjM1ZTogcmV0dXJuKChDSEFSKTB4OGQpOwotICAgICAgY2Fz ZSAweDIzNWY6IHJldHVybigoQ0hBUikweGI1KTsKLSAgICAgIGNhc2UgMHgyMzY0OiByZXR1cm4o KENIQVIpMHhmMCk7Ci0gICAgICBjYXNlIDB4MjM2NTogcmV0dXJuKChDSEFSKTB4ZmYpOwotICAg ICAgY2FzZSAweDIzNjg6IHJldHVybigoQ0hBUikweGZlKTsKLSAgICAgIGNhc2UgMHgyMzZhOiBy ZXR1cm4oKENIQVIpMHhhZSk7Ci0gICAgICBjYXNlIDB4MjM2YjogcmV0dXJuKChDSEFSKTB4OTAp OwotICAgICAgY2FzZSAweDIzNmM6IHJldHVybigoQ0hBUikweGFiKTsKLSAgICAgIGNhc2UgMHgy MzcxOiByZXR1cm4oKENIQVIpMHg4Yik7Ci0gICAgICBjYXNlIDB4MjM3MjogcmV0dXJuKChDSEFS KTB4OGEpOwotICAgICAgY2FzZSAweDIzNzM6IHJldHVybigoQ0hBUikweGJjKTsKLSAgICAgIGNh c2UgMHgyMzc0OiByZXR1cm4oKENIQVIpMHhiZCk7Ci0gICAgICBjYXNlIDB4MjM3NTogcmV0dXJu KChDSEFSKTB4YmUpOwotICAgICAgY2FzZSAweDIzNzc6IHJldHVybigoQ0hBUikweGJhKTsKLSAg ICAgIGNhc2UgMHgyMzc4OiByZXR1cm4oKENIQVIpMHhhNSk7Ci0gICAgICBjYXNlIDB4MjM3YTog cmV0dXJuKChDSEFSKTB4YjgpOwotICAgICAgY2FzZSAweDI1MDA6IHJldHVybigoQ0hBUikweGNl KTsKLSAgICAgIGNhc2UgMHgyNTAyOiByZXR1cm4oKENIQVIpMHhkYik7Ci0gICAgICBjYXNlIDB4 MjUwYzogcmV0dXJuKChDSEFSKTB4ZGEpOwotICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hB UikweGNjKTsKLSAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENIQVIpMHhjMCk7Ci0gICAgICBj YXNlIDB4MjUxODogcmV0dXJuKChDSEFSKTB4ZDkpOwotICAgICAgY2FzZSAweDI1MWM6IHJldHVy bigoQ0hBUikweGMzKTsKLSAgICAgIGNhc2UgMHgyNTI0OiByZXR1cm4oKENIQVIpMHhkZCk7Ci0g ICAgICBjYXNlIDB4MjUyYzogcmV0dXJuKChDSEFSKTB4YzIpOwotICAgICAgY2FzZSAweDI1MzQ6 IHJldHVybigoQ0hBUikweGMxKTsKLSAgICAgIGNhc2UgMHgyNTNjOiByZXR1cm4oKENIQVIpMHhj Zik7Ci0gICAgICBjYXNlIDB4MjVhZjogcmV0dXJuKChDSEFSKTB4OGMpOwotICAgICAgY2FzZSAw eDI1Y2I6IHJldHVybigoQ0hBUikweGIxKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy bih0eF9wdW5jKGMpKTsKLSAgICB9Ci19Ci0KLS8qIEZvciBMYXRpbi0xLCB1c2UgdHhfaWRlbnQo KSAqLwotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGF0aW4t MiAqLwotI2lmZGVmIENLX0FOU0lDCi10eF84ODU5XzIoVVNIT1JUIGMpCi0jZWxzZQotdHhfODg1 OV8yKGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAw eGEwKQotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgIHN3aXRjaChjKSB7Ci0g ICAgICBjYXNlIDB4MDBBMDogcmV0dXJuKChDSEFSKTE2MCk7Ci0gICAgICBjYXNlIDB4MDBBNDog cmV0dXJuKChDSEFSKTE2NCk7Ci0gICAgICBjYXNlIDB4MDBBNzogcmV0dXJuKChDSEFSKTE2Nyk7 Ci0gICAgICBjYXNlIDB4MDBBODogcmV0dXJuKChDSEFSKTE2OCk7Ci0gICAgICBjYXNlIDB4MDBB RDogcmV0dXJuKChDSEFSKTE3Myk7Ci0gICAgICBjYXNlIDB4MDBCMDogcmV0dXJuKChDSEFSKTE3 Nik7Ci0gICAgICBjYXNlIDB4MDBCNDogcmV0dXJuKChDSEFSKTE4MCk7Ci0gICAgICBjYXNlIDB4 MDBCODogcmV0dXJuKChDSEFSKTE4NCk7Ci0gICAgICBjYXNlIDB4MDBDMTogcmV0dXJuKChDSEFS KTE5Myk7Ci0gICAgICBjYXNlIDB4MDBDMjogcmV0dXJuKChDSEFSKTE5NCk7Ci0gICAgICBjYXNl IDB4MDBDNDogcmV0dXJuKChDSEFSKTE5Nik7Ci0gICAgICBjYXNlIDB4MDBDNzogcmV0dXJuKChD SEFSKTE5OSk7Ci0gICAgICBjYXNlIDB4MDBDOTogcmV0dXJuKChDSEFSKTIwMSk7Ci0gICAgICBj YXNlIDB4MDBDQjogcmV0dXJuKChDSEFSKTIwMyk7Ci0gICAgICBjYXNlIDB4MDBDRDogcmV0dXJu KChDSEFSKTIwNSk7Ci0gICAgICBjYXNlIDB4MDBDRTogcmV0dXJuKChDSEFSKTIwNik7Ci0gICAg ICBjYXNlIDB4MDBEMzogcmV0dXJuKChDSEFSKTIxMSk7Ci0gICAgICBjYXNlIDB4MDBENDogcmV0 dXJuKChDSEFSKTIxMik7Ci0gICAgICBjYXNlIDB4MDBENjogcmV0dXJuKChDSEFSKTIxNCk7Ci0g ICAgICBjYXNlIDB4MDBENzogcmV0dXJuKChDSEFSKTIxNSk7Ci0gICAgICBjYXNlIDB4MDBEQTog cmV0dXJuKChDSEFSKTIxOCk7Ci0gICAgICBjYXNlIDB4MDBEQzogcmV0dXJuKChDSEFSKTIyMCk7 Ci0gICAgICBjYXNlIDB4MDBERDogcmV0dXJuKChDSEFSKTIyMSk7Ci0gICAgICBjYXNlIDB4MDBE RjogcmV0dXJuKChDSEFSKTIyMyk7Ci0gICAgICBjYXNlIDB4MDBFMTogcmV0dXJuKChDSEFSKTIy NSk7Ci0gICAgICBjYXNlIDB4MDBFMjogcmV0dXJuKChDSEFSKTIyNik7Ci0gICAgICBjYXNlIDB4 MDBFNDogcmV0dXJuKChDSEFSKTIyOCk7Ci0gICAgICBjYXNlIDB4MDBFNzogcmV0dXJuKChDSEFS KTIzMSk7Ci0gICAgICBjYXNlIDB4MDBFOTogcmV0dXJuKChDSEFSKTIzMyk7Ci0gICAgICBjYXNl IDB4MDBFQjogcmV0dXJuKChDSEFSKTIzNSk7Ci0gICAgICBjYXNlIDB4MDBFRDogcmV0dXJuKChD SEFSKTIzNyk7Ci0gICAgICBjYXNlIDB4MDBFRTogcmV0dXJuKChDSEFSKTIzOCk7Ci0gICAgICBj YXNlIDB4MDBGMzogcmV0dXJuKChDSEFSKTI0Myk7Ci0gICAgICBjYXNlIDB4MDBGNDogcmV0dXJu KChDSEFSKTI0NCk7Ci0gICAgICBjYXNlIDB4MDBGNjogcmV0dXJuKChDSEFSKTI0Nik7Ci0gICAg ICBjYXNlIDB4MDBGNzogcmV0dXJuKChDSEFSKTI0Nyk7Ci0gICAgICBjYXNlIDB4MDBGQTogcmV0 dXJuKChDSEFSKTI1MCk7Ci0gICAgICBjYXNlIDB4MDBGQzogcmV0dXJuKChDSEFSKTI1Mik7Ci0g ICAgICBjYXNlIDB4MDBGRDogcmV0dXJuKChDSEFSKTI1Myk7Ci0gICAgICBjYXNlIDB4MDEwMjog cmV0dXJuKChDSEFSKTE5NSk7Ci0gICAgICBjYXNlIDB4MDEwMzogcmV0dXJuKChDSEFSKTIyNyk7 Ci0gICAgICBjYXNlIDB4MDEwNDogcmV0dXJuKChDSEFSKTE2MSk7Ci0gICAgICBjYXNlIDB4MDEw NTogcmV0dXJuKChDSEFSKTE3Nyk7Ci0gICAgICBjYXNlIDB4MDEwNjogcmV0dXJuKChDSEFSKTE5 OCk7Ci0gICAgICBjYXNlIDB4MDEwNzogcmV0dXJuKChDSEFSKTIzMCk7Ci0gICAgICBjYXNlIDB4 MDEwQzogcmV0dXJuKChDSEFSKTIwMCk7Ci0gICAgICBjYXNlIDB4MDEwRDogcmV0dXJuKChDSEFS KTIzMik7Ci0gICAgICBjYXNlIDB4MDEwRTogcmV0dXJuKChDSEFSKTIwNyk7Ci0gICAgICBjYXNl IDB4MDEwRjogcmV0dXJuKChDSEFSKTIzOSk7Ci0gICAgICBjYXNlIDB4MDExMDogcmV0dXJuKChD SEFSKTIwOCk7Ci0gICAgICBjYXNlIDB4MDExMTogcmV0dXJuKChDSEFSKTI0MCk7Ci0gICAgICBj YXNlIDB4MDExODogcmV0dXJuKChDSEFSKTIwMik7Ci0gICAgICBjYXNlIDB4MDExOTogcmV0dXJu KChDSEFSKTIzNCk7Ci0gICAgICBjYXNlIDB4MDExQTogcmV0dXJuKChDSEFSKTIwNCk7Ci0gICAg ICBjYXNlIDB4MDExQjogcmV0dXJuKChDSEFSKTIzNik7Ci0gICAgICBjYXNlIDB4MDEzOTogcmV0 dXJuKChDSEFSKTE5Nyk7Ci0gICAgICBjYXNlIDB4MDEzQTogcmV0dXJuKChDSEFSKTIyOSk7Ci0g ICAgICBjYXNlIDB4MDEzRDogcmV0dXJuKChDSEFSKTE2NSk7Ci0gICAgICBjYXNlIDB4MDEzRTog cmV0dXJuKChDSEFSKTE4MSk7Ci0gICAgICBjYXNlIDB4MDE0MTogcmV0dXJuKChDSEFSKTE2Myk7 Ci0gICAgICBjYXNlIDB4MDE0MjogcmV0dXJuKChDSEFSKTE3OSk7Ci0gICAgICBjYXNlIDB4MDE0 MzogcmV0dXJuKChDSEFSKTIwOSk7Ci0gICAgICBjYXNlIDB4MDE0NDogcmV0dXJuKChDSEFSKTI0 MSk7Ci0gICAgICBjYXNlIDB4MDE0NzogcmV0dXJuKChDSEFSKTIxMCk7Ci0gICAgICBjYXNlIDB4 MDE0ODogcmV0dXJuKChDSEFSKTI0Mik7Ci0gICAgICBjYXNlIDB4MDE1MDogcmV0dXJuKChDSEFS KTIxMyk7Ci0gICAgICBjYXNlIDB4MDE1MTogcmV0dXJuKChDSEFSKTI0NSk7Ci0gICAgICBjYXNl IDB4MDE1NDogcmV0dXJuKChDSEFSKTE5Mik7Ci0gICAgICBjYXNlIDB4MDE1NTogcmV0dXJuKChD SEFSKTIyNCk7Ci0gICAgICBjYXNlIDB4MDE1ODogcmV0dXJuKChDSEFSKTIxNik7Ci0gICAgICBj YXNlIDB4MDE1OTogcmV0dXJuKChDSEFSKTI0OCk7Ci0gICAgICBjYXNlIDB4MDE1QTogcmV0dXJu KChDSEFSKTE2Nik7Ci0gICAgICBjYXNlIDB4MDE1QjogcmV0dXJuKChDSEFSKTE4Mik7Ci0gICAg ICBjYXNlIDB4MDE1RTogcmV0dXJuKChDSEFSKTE3MCk7Ci0gICAgICBjYXNlIDB4MDE1RjogcmV0 dXJuKChDSEFSKTE4Nik7Ci0gICAgICBjYXNlIDB4MDE2MDogcmV0dXJuKChDSEFSKTE2OSk7Ci0g ICAgICBjYXNlIDB4MDE2MTogcmV0dXJuKChDSEFSKTE4NSk7Ci0gICAgICBjYXNlIDB4MDE2Mjog cmV0dXJuKChDSEFSKTIyMik7Ci0gICAgICBjYXNlIDB4MDE2MzogcmV0dXJuKChDSEFSKTI1NCk7 Ci0gICAgICBjYXNlIDB4MDE2NDogcmV0dXJuKChDSEFSKTE3MSk7Ci0gICAgICBjYXNlIDB4MDE2 NTogcmV0dXJuKChDSEFSKTE4Nyk7Ci0gICAgICBjYXNlIDB4MDE2RTogcmV0dXJuKChDSEFSKTIx Nyk7Ci0gICAgICBjYXNlIDB4MDE2RjogcmV0dXJuKChDSEFSKTI0OSk7Ci0gICAgICBjYXNlIDB4 MDE3MDogcmV0dXJuKChDSEFSKTIxOSk7Ci0gICAgICBjYXNlIDB4MDE3MTogcmV0dXJuKChDSEFS KTI1MSk7Ci0gICAgICBjYXNlIDB4MDE3OTogcmV0dXJuKChDSEFSKTE3Mik7Ci0gICAgICBjYXNl IDB4MDE3QTogcmV0dXJuKChDSEFSKTE4OCk7Ci0gICAgICBjYXNlIDB4MDE3QjogcmV0dXJuKChD SEFSKTE3NSk7Ci0gICAgICBjYXNlIDB4MDE3QzogcmV0dXJuKChDSEFSKTE5MSk7Ci0gICAgICBj YXNlIDB4MDE3RDogcmV0dXJuKChDSEFSKTE3NCk7Ci0gICAgICBjYXNlIDB4MDE3RTogcmV0dXJu KChDSEFSKTE5MCk7Ci0gICAgICBjYXNlIDB4MDJDNzogcmV0dXJuKChDSEFSKTE4Myk7Ci0gICAg ICBjYXNlIDB4MDJEODogcmV0dXJuKChDSEFSKTE2Mik7Ci0gICAgICBjYXNlIDB4MDJEOTogcmV0 dXJuKChDSEFSKTI1NSk7Ci0gICAgICBjYXNlIDB4MDJEQjogcmV0dXJuKChDSEFSKTE3OCk7Ci0g ICAgICBjYXNlIDB4MDJERDogcmV0dXJuKChDSEFSKTE4OSk7Ci0gICAgICBkZWZhdWx0OiByZXR1 cm4odHhfcHVuYyhjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTGF0aW4tMyAqLwotI2lmZGVmIENLX0FOU0lDCi10eF84ODU5XzMoVVNI T1JUIGMpCi0jZWxzZQotdHhfODg1OV8zKGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17Ci0gICAgaWYgKGMgPCAweGEwKQotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikp OwotICAgIHN3aXRjaChjKSB7Ci0gICAgICBjYXNlIDB4MDBBMDogcmV0dXJuKChDSEFSKTE2MCk7 Ci0gICAgICBjYXNlIDB4MDBBMzogcmV0dXJuKChDSEFSKTE2Myk7Ci0gICAgICBjYXNlIDB4MDBB NDogcmV0dXJuKChDSEFSKTE2NCk7Ci0gICAgICBjYXNlIDB4MDBBNzogcmV0dXJuKChDSEFSKTE2 Nyk7Ci0gICAgICBjYXNlIDB4MDBBODogcmV0dXJuKChDSEFSKTE2OCk7Ci0gICAgICBjYXNlIDB4 MDBBRDogcmV0dXJuKChDSEFSKTE3Myk7Ci0gICAgICBjYXNlIDB4MDBCMDogcmV0dXJuKChDSEFS KTE3Nik7Ci0gICAgICBjYXNlIDB4MDBCMjogcmV0dXJuKChDSEFSKTE3OCk7Ci0gICAgICBjYXNl IDB4MDBCMzogcmV0dXJuKChDSEFSKTE3OSk7Ci0gICAgICBjYXNlIDB4MDBCNDogcmV0dXJuKChD SEFSKTE4MCk7Ci0gICAgICBjYXNlIDB4MDBCNTogcmV0dXJuKChDSEFSKTE4MSk7Ci0gICAgICBj YXNlIDB4MDBCNzogcmV0dXJuKChDSEFSKTE4Myk7Ci0gICAgICBjYXNlIDB4MDBCODogcmV0dXJu KChDSEFSKTE4NCk7Ci0gICAgICBjYXNlIDB4MDBCRDogcmV0dXJuKChDSEFSKTE4OSk7Ci0gICAg ICBjYXNlIDB4MDBDMDogcmV0dXJuKChDSEFSKTE5Mik7Ci0gICAgICBjYXNlIDB4MDBDMTogcmV0 dXJuKChDSEFSKTE5Myk7Ci0gICAgICBjYXNlIDB4MDBDMjogcmV0dXJuKChDSEFSKTE5NCk7Ci0g ICAgICBjYXNlIDB4MDBDNDogcmV0dXJuKChDSEFSKTE5Nik7Ci0gICAgICBjYXNlIDB4MDBDNzog cmV0dXJuKChDSEFSKTE5OSk7Ci0gICAgICBjYXNlIDB4MDBDODogcmV0dXJuKChDSEFSKTIwMCk7 Ci0gICAgICBjYXNlIDB4MDBDOTogcmV0dXJuKChDSEFSKTIwMSk7Ci0gICAgICBjYXNlIDB4MDBD QTogcmV0dXJuKChDSEFSKTIwMik7Ci0gICAgICBjYXNlIDB4MDBDQjogcmV0dXJuKChDSEFSKTIw Myk7Ci0gICAgICBjYXNlIDB4MDBDQzogcmV0dXJuKChDSEFSKTIwNCk7Ci0gICAgICBjYXNlIDB4 MDBDRDogcmV0dXJuKChDSEFSKTIwNSk7Ci0gICAgICBjYXNlIDB4MDBDRTogcmV0dXJuKChDSEFS KTIwNik7Ci0gICAgICBjYXNlIDB4MDBDRjogcmV0dXJuKChDSEFSKTIwNyk7Ci0gICAgICBjYXNl IDB4MDBEMTogcmV0dXJuKChDSEFSKTIwOSk7Ci0gICAgICBjYXNlIDB4MDBEMjogcmV0dXJuKChD SEFSKTIxMCk7Ci0gICAgICBjYXNlIDB4MDBEMzogcmV0dXJuKChDSEFSKTIxMSk7Ci0gICAgICBj YXNlIDB4MDBENDogcmV0dXJuKChDSEFSKTIxMik7Ci0gICAgICBjYXNlIDB4MDBENjogcmV0dXJu KChDSEFSKTIxNCk7Ci0gICAgICBjYXNlIDB4MDBENzogcmV0dXJuKChDSEFSKTIxNSk7Ci0gICAg ICBjYXNlIDB4MDBEOTogcmV0dXJuKChDSEFSKTIxNyk7Ci0gICAgICBjYXNlIDB4MDBEQTogcmV0 dXJuKChDSEFSKTIxOCk7Ci0gICAgICBjYXNlIDB4MDBEQjogcmV0dXJuKChDSEFSKTIxOSk7Ci0g ICAgICBjYXNlIDB4MDBEQzogcmV0dXJuKChDSEFSKTIyMCk7Ci0gICAgICBjYXNlIDB4MDBERjog cmV0dXJuKChDSEFSKTIyMyk7Ci0gICAgICBjYXNlIDB4MDBFMDogcmV0dXJuKChDSEFSKTIyNCk7 Ci0gICAgICBjYXNlIDB4MDBFMTogcmV0dXJuKChDSEFSKTIyNSk7Ci0gICAgICBjYXNlIDB4MDBF MjogcmV0dXJuKChDSEFSKTIyNik7Ci0gICAgICBjYXNlIDB4MDBFNDogcmV0dXJuKChDSEFSKTIy OCk7Ci0gICAgICBjYXNlIDB4MDBFNzogcmV0dXJuKChDSEFSKTIzMSk7Ci0gICAgICBjYXNlIDB4 MDBFODogcmV0dXJuKChDSEFSKTIzMik7Ci0gICAgICBjYXNlIDB4MDBFOTogcmV0dXJuKChDSEFS KTIzMyk7Ci0gICAgICBjYXNlIDB4MDBFQTogcmV0dXJuKChDSEFSKTIzNCk7Ci0gICAgICBjYXNl IDB4MDBFQjogcmV0dXJuKChDSEFSKTIzNSk7Ci0gICAgICBjYXNlIDB4MDBFQzogcmV0dXJuKChD SEFSKTIzNik7Ci0gICAgICBjYXNlIDB4MDBFRDogcmV0dXJuKChDSEFSKTIzNyk7Ci0gICAgICBj YXNlIDB4MDBFRTogcmV0dXJuKChDSEFSKTIzOCk7Ci0gICAgICBjYXNlIDB4MDBFRjogcmV0dXJu KChDSEFSKTIzOSk7Ci0gICAgICBjYXNlIDB4MDBGMTogcmV0dXJuKChDSEFSKTI0MSk7Ci0gICAg ICBjYXNlIDB4MDBGMjogcmV0dXJuKChDSEFSKTI0Mik7Ci0gICAgICBjYXNlIDB4MDBGMzogcmV0 dXJuKChDSEFSKTI0Myk7Ci0gICAgICBjYXNlIDB4MDBGNDogcmV0dXJuKChDSEFSKTI0NCk7Ci0g ICAgICBjYXNlIDB4MDBGNjogcmV0dXJuKChDSEFSKTI0Nik7Ci0gICAgICBjYXNlIDB4MDBGNzog cmV0dXJuKChDSEFSKTI0Nyk7Ci0gICAgICBjYXNlIDB4MDBGOTogcmV0dXJuKChDSEFSKTI0OSk7 Ci0gICAgICBjYXNlIDB4MDBGQTogcmV0dXJuKChDSEFSKTI1MCk7Ci0gICAgICBjYXNlIDB4MDBG QjogcmV0dXJuKChDSEFSKTI1MSk7Ci0gICAgICBjYXNlIDB4MDBGQzogcmV0dXJuKChDSEFSKTI1 Mik7Ci0gICAgICBjYXNlIDB4MDEwODogcmV0dXJuKChDSEFSKTE5OCk7Ci0gICAgICBjYXNlIDB4 MDEwOTogcmV0dXJuKChDSEFSKTIzMCk7Ci0gICAgICBjYXNlIDB4MDEwQTogcmV0dXJuKChDSEFS KTE5Nyk7Ci0gICAgICBjYXNlIDB4MDEwQjogcmV0dXJuKChDSEFSKTIyOSk7Ci0gICAgICBjYXNl IDB4MDExQzogcmV0dXJuKChDSEFSKTIxNik7Ci0gICAgICBjYXNlIDB4MDExRDogcmV0dXJuKChD SEFSKTI0OCk7Ci0gICAgICBjYXNlIDB4MDExRTogcmV0dXJuKChDSEFSKTE3MSk7Ci0gICAgICBj YXNlIDB4MDExRjogcmV0dXJuKChDSEFSKTE4Nyk7Ci0gICAgICBjYXNlIDB4MDEyMDogcmV0dXJu KChDSEFSKTIxMyk7Ci0gICAgICBjYXNlIDB4MDEyMTogcmV0dXJuKChDSEFSKTI0NSk7Ci0gICAg ICBjYXNlIDB4MDEyNDogcmV0dXJuKChDSEFSKTE2Nik7Ci0gICAgICBjYXNlIDB4MDEyNTogcmV0 dXJuKChDSEFSKTE4Mik7Ci0gICAgICBjYXNlIDB4MDEyNjogcmV0dXJuKChDSEFSKTE2MSk7Ci0g ICAgICBjYXNlIDB4MDEyNzogcmV0dXJuKChDSEFSKTE3Nyk7Ci0gICAgICBjYXNlIDB4MDEzMDog cmV0dXJuKChDSEFSKTE2OSk7Ci0gICAgICBjYXNlIDB4MDEzMTogcmV0dXJuKChDSEFSKTE4NSk7 Ci0gICAgICBjYXNlIDB4MDEzNDogcmV0dXJuKChDSEFSKTE3Mik7Ci0gICAgICBjYXNlIDB4MDEz NTogcmV0dXJuKChDSEFSKTE4OCk7Ci0gICAgICBjYXNlIDB4MDE1QzogcmV0dXJuKChDSEFSKTIy Mik7Ci0gICAgICBjYXNlIDB4MDE1RDogcmV0dXJuKChDSEFSKTI1NCk7Ci0gICAgICBjYXNlIDB4 MDE1RTogcmV0dXJuKChDSEFSKTE3MCk7Ci0gICAgICBjYXNlIDB4MDE1RjogcmV0dXJuKChDSEFS KTE4Nik7Ci0gICAgICBjYXNlIDB4MDE2QzogcmV0dXJuKChDSEFSKTIyMSk7Ci0gICAgICBjYXNl IDB4MDE2RDogcmV0dXJuKChDSEFSKTI1Myk7Ci0gICAgICBjYXNlIDB4MDE3QjogcmV0dXJuKChD SEFSKTE3NSk7Ci0gICAgICBjYXNlIDB4MDE3QzogcmV0dXJuKChDSEFSKTE5MSk7Ci0gICAgICBj YXNlIDB4MDJEODogcmV0dXJuKChDSEFSKTE2Mik7Ci0gICAgICBjYXNlIDB4MDJEOTogcmV0dXJu KChDSEFSKTI1NSk7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4odHhfcHVuYyhjKSk7Ci0gICAgfQot fQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGF0aW4tNCAq LwotI2lmZGVmIENLX0FOU0lDCi10eF84ODU5XzQoVVNIT1JUIGMpCi0jZWxzZQotdHhfODg1OV80 KGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweGEw KQotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgIHN3aXRjaChjKSB7Ci0gICAg ICBjYXNlIDB4MDBBMDogcmV0dXJuKChDSEFSKTE2MCk7Ci0gICAgICBjYXNlIDB4MDBBNDogcmV0 dXJuKChDSEFSKTE2NCk7Ci0gICAgICBjYXNlIDB4MDBBNzogcmV0dXJuKChDSEFSKTE2Nyk7Ci0g ICAgICBjYXNlIDB4MDBBODogcmV0dXJuKChDSEFSKTE2OCk7Ci0gICAgICBjYXNlIDB4MDBBRDog cmV0dXJuKChDSEFSKTE3Myk7Ci0gICAgICBjYXNlIDB4MDBBRjogcmV0dXJuKChDSEFSKTE3NSk7 Ci0gICAgICBjYXNlIDB4MDBCMDogcmV0dXJuKChDSEFSKTE3Nik7Ci0gICAgICBjYXNlIDB4MDBC NDogcmV0dXJuKChDSEFSKTE4MCk7Ci0gICAgICBjYXNlIDB4MDBCODogcmV0dXJuKChDSEFSKTE4 NCk7Ci0gICAgICBjYXNlIDB4MDBDMTogcmV0dXJuKChDSEFSKTE5Myk7Ci0gICAgICBjYXNlIDB4 MDBDMjogcmV0dXJuKChDSEFSKTE5NCk7Ci0gICAgICBjYXNlIDB4MDBDMzogcmV0dXJuKChDSEFS KTE5NSk7Ci0gICAgICBjYXNlIDB4MDBDNDogcmV0dXJuKChDSEFSKTE5Nik7Ci0gICAgICBjYXNl IDB4MDBDNTogcmV0dXJuKChDSEFSKTE5Nyk7Ci0gICAgICBjYXNlIDB4MDBDNjogcmV0dXJuKChD SEFSKTE5OCk7Ci0gICAgICBjYXNlIDB4MDBDOTogcmV0dXJuKChDSEFSKTIwMSk7Ci0gICAgICBj YXNlIDB4MDBDQjogcmV0dXJuKChDSEFSKTIwMyk7Ci0gICAgICBjYXNlIDB4MDBDRDogcmV0dXJu KChDSEFSKTIwNSk7Ci0gICAgICBjYXNlIDB4MDBDRTogcmV0dXJuKChDSEFSKTIwNik7Ci0gICAg ICBjYXNlIDB4MDBENDogcmV0dXJuKChDSEFSKTIxMik7Ci0gICAgICBjYXNlIDB4MDBENTogcmV0 dXJuKChDSEFSKTIxMyk7Ci0gICAgICBjYXNlIDB4MDBENjogcmV0dXJuKChDSEFSKTIxNCk7Ci0g ICAgICBjYXNlIDB4MDBENzogcmV0dXJuKChDSEFSKTIxNSk7Ci0gICAgICBjYXNlIDB4MDBEODog cmV0dXJuKChDSEFSKTIxNik7Ci0gICAgICBjYXNlIDB4MDBEQTogcmV0dXJuKChDSEFSKTIxOCk7 Ci0gICAgICBjYXNlIDB4MDBEQjogcmV0dXJuKChDSEFSKTIxOSk7Ci0gICAgICBjYXNlIDB4MDBE QzogcmV0dXJuKChDSEFSKTIyMCk7Ci0gICAgICBjYXNlIDB4MDBERjogcmV0dXJuKChDSEFSKTIy Myk7Ci0gICAgICBjYXNlIDB4MDBFMTogcmV0dXJuKChDSEFSKTIyNSk7Ci0gICAgICBjYXNlIDB4 MDBFMjogcmV0dXJuKChDSEFSKTIyNik7Ci0gICAgICBjYXNlIDB4MDBFMzogcmV0dXJuKChDSEFS KTIyNyk7Ci0gICAgICBjYXNlIDB4MDBFNDogcmV0dXJuKChDSEFSKTIyOCk7Ci0gICAgICBjYXNl IDB4MDBFNTogcmV0dXJuKChDSEFSKTIyOSk7Ci0gICAgICBjYXNlIDB4MDBFNjogcmV0dXJuKChD SEFSKTIzMCk7Ci0gICAgICBjYXNlIDB4MDBFOTogcmV0dXJuKChDSEFSKTIzMyk7Ci0gICAgICBj YXNlIDB4MDBFQjogcmV0dXJuKChDSEFSKTIzNSk7Ci0gICAgICBjYXNlIDB4MDBFRDogcmV0dXJu KChDSEFSKTIzNyk7Ci0gICAgICBjYXNlIDB4MDBFRTogcmV0dXJuKChDSEFSKTIzOCk7Ci0gICAg ICBjYXNlIDB4MDBGNDogcmV0dXJuKChDSEFSKTI0NCk7Ci0gICAgICBjYXNlIDB4MDBGNTogcmV0 dXJuKChDSEFSKTI0NSk7Ci0gICAgICBjYXNlIDB4MDBGNjogcmV0dXJuKChDSEFSKTI0Nik7Ci0g ICAgICBjYXNlIDB4MDBGNzogcmV0dXJuKChDSEFSKTI0Nyk7Ci0gICAgICBjYXNlIDB4MDBGODog cmV0dXJuKChDSEFSKTI0OCk7Ci0gICAgICBjYXNlIDB4MDBGQTogcmV0dXJuKChDSEFSKTI1MCk7 Ci0gICAgICBjYXNlIDB4MDBGQjogcmV0dXJuKChDSEFSKTI1MSk7Ci0gICAgICBjYXNlIDB4MDBG QzogcmV0dXJuKChDSEFSKTI1Mik7Ci0gICAgICBjYXNlIDB4MDEwMDogcmV0dXJuKChDSEFSKTE5 Mik7Ci0gICAgICBjYXNlIDB4MDEwMTogcmV0dXJuKChDSEFSKTIyNCk7Ci0gICAgICBjYXNlIDB4 MDEwNDogcmV0dXJuKChDSEFSKTE2MSk7Ci0gICAgICBjYXNlIDB4MDEwNTogcmV0dXJuKChDSEFS KTE3Nyk7Ci0gICAgICBjYXNlIDB4MDEwQzogcmV0dXJuKChDSEFSKTIwMCk7Ci0gICAgICBjYXNl IDB4MDEwRDogcmV0dXJuKChDSEFSKTIzMik7Ci0gICAgICBjYXNlIDB4MDExMDogcmV0dXJuKChD SEFSKTIwOCk7Ci0gICAgICBjYXNlIDB4MDExMTogcmV0dXJuKChDSEFSKTI0MCk7Ci0gICAgICBj YXNlIDB4MDExMjogcmV0dXJuKChDSEFSKTE3MCk7Ci0gICAgICBjYXNlIDB4MDExMzogcmV0dXJu KChDSEFSKTE4Nik7Ci0gICAgICBjYXNlIDB4MDExNjogcmV0dXJuKChDSEFSKTIwNCk7Ci0gICAg ICBjYXNlIDB4MDExNzogcmV0dXJuKChDSEFSKTIzNik7Ci0gICAgICBjYXNlIDB4MDExODogcmV0 dXJuKChDSEFSKTIwMik7Ci0gICAgICBjYXNlIDB4MDExOTogcmV0dXJuKChDSEFSKTIzNCk7Ci0g ICAgICBjYXNlIDB4MDEyMjogcmV0dXJuKChDSEFSKTE3MSk7Ci0gICAgICBjYXNlIDB4MDEyMzog cmV0dXJuKChDSEFSKTE4Nyk7Ci0gICAgICBjYXNlIDB4MDEyODogcmV0dXJuKChDSEFSKTE2NSk7 Ci0gICAgICBjYXNlIDB4MDEyOTogcmV0dXJuKChDSEFSKTE4MSk7Ci0gICAgICBjYXNlIDB4MDEy QTogcmV0dXJuKChDSEFSKTIwNyk7Ci0gICAgICBjYXNlIDB4MDEyQjogcmV0dXJuKChDSEFSKTIz OSk7Ci0gICAgICBjYXNlIDB4MDEyRTogcmV0dXJuKChDSEFSKTE5OSk7Ci0gICAgICBjYXNlIDB4 MDEyRjogcmV0dXJuKChDSEFSKTIzMSk7Ci0gICAgICBjYXNlIDB4MDEzNjogcmV0dXJuKChDSEFS KTIxMSk7Ci0gICAgICBjYXNlIDB4MDEzNzogcmV0dXJuKChDSEFSKTI0Myk7Ci0gICAgICBjYXNl IDB4MDEzODogcmV0dXJuKChDSEFSKTE2Mik7Ci0gICAgICBjYXNlIDB4MDEzQjogcmV0dXJuKChD SEFSKTE2Nik7Ci0gICAgICBjYXNlIDB4MDEzQzogcmV0dXJuKChDSEFSKTE4Mik7Ci0gICAgICBj YXNlIDB4MDE0NTogcmV0dXJuKChDSEFSKTIwOSk7Ci0gICAgICBjYXNlIDB4MDE0NjogcmV0dXJu KChDSEFSKTI0MSk7Ci0gICAgICBjYXNlIDB4MDE0QTogcmV0dXJuKChDSEFSKTE4OSk7Ci0gICAg ICBjYXNlIDB4MDE0QjogcmV0dXJuKChDSEFSKTE5MSk7Ci0gICAgICBjYXNlIDB4MDE0QzogcmV0 dXJuKChDSEFSKTIxMCk7Ci0gICAgICBjYXNlIDB4MDE0RDogcmV0dXJuKChDSEFSKTI0Mik7Ci0g ICAgICBjYXNlIDB4MDE1NjogcmV0dXJuKChDSEFSKTE2Myk7Ci0gICAgICBjYXNlIDB4MDE1Nzog cmV0dXJuKChDSEFSKTE3OSk7Ci0gICAgICBjYXNlIDB4MDE2MDogcmV0dXJuKChDSEFSKTE2OSk7 Ci0gICAgICBjYXNlIDB4MDE2MTogcmV0dXJuKChDSEFSKTE4NSk7Ci0gICAgICBjYXNlIDB4MDE2 NjogcmV0dXJuKChDSEFSKTE3Mik7Ci0gICAgICBjYXNlIDB4MDE2NzogcmV0dXJuKChDSEFSKTE4 OCk7Ci0gICAgICBjYXNlIDB4MDE2ODogcmV0dXJuKChDSEFSKTIyMSk7Ci0gICAgICBjYXNlIDB4 MDE2OTogcmV0dXJuKChDSEFSKTI1Myk7Ci0gICAgICBjYXNlIDB4MDE2QTogcmV0dXJuKChDSEFS KTIyMik7Ci0gICAgICBjYXNlIDB4MDE2QjogcmV0dXJuKChDSEFSKTI1NCk7Ci0gICAgICBjYXNl IDB4MDE3MjogcmV0dXJuKChDSEFSKTIxNyk7Ci0gICAgICBjYXNlIDB4MDE3MzogcmV0dXJuKChD SEFSKTI0OSk7Ci0gICAgICBjYXNlIDB4MDE3RDogcmV0dXJuKChDSEFSKTE3NCk7Ci0gICAgICBj YXNlIDB4MDE3RTogcmV0dXJuKChDSEFSKTE5MCk7Ci0gICAgICBjYXNlIDB4MDJDNzogcmV0dXJu KChDSEFSKTE4Myk7Ci0gICAgICBjYXNlIDB4MDJEOTogcmV0dXJuKChDSEFSKTI1NSk7Ci0gICAg ICBjYXNlIDB4MDJEQjogcmV0dXJuKChDSEFSKTE3OCk7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4o dHhfcHVuYyhjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSVNPIDg4NTktNSAoTGF0aW4vQ3lyaWxsaWMpICovCi0jaWZkZWYgQ0tfQU5T SUMKLXR4Xzg4NTlfNShVU0hPUlQgYykKLSNlbHNlCi10eF84ODU5XzUoYykgVVNIT1JUIGM7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4YTApICAgICAgICAgICAgICAg ICAgICAgICAvKiAoODg1OS01IGlzIG5vdCBMYXRpbi01ISkgKi8KLSAgICAgIHJldHVybigoQ0hB UikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2goYykgewotICAgICAgY2FzZSAweDAwQTA6IHJldHVy bigoQ0hBUikxNjApOwotICAgICAgY2FzZSAweDAwQTc6IHJldHVybigoQ0hBUikyNTMpOwotICAg ICAgY2FzZSAweDAwQUQ6IHJldHVybigoQ0hBUikxNzMpOwotICAgICAgY2FzZSAweDA0MDE6IHJl dHVybigoQ0hBUikxNjEpOwotICAgICAgY2FzZSAweDA0MDI6IHJldHVybigoQ0hBUikxNjIpOwot ICAgICAgY2FzZSAweDA0MDM6IHJldHVybigoQ0hBUikxNjMpOwotICAgICAgY2FzZSAweDA0MDQ6 IHJldHVybigoQ0hBUikxNjQpOwotICAgICAgY2FzZSAweDA0MDU6IHJldHVybigoQ0hBUikxNjUp OwotICAgICAgY2FzZSAweDA0MDY6IHJldHVybigoQ0hBUikxNjYpOwotICAgICAgY2FzZSAweDA0 MDc6IHJldHVybigoQ0hBUikxNjcpOwotICAgICAgY2FzZSAweDA0MDg6IHJldHVybigoQ0hBUikx NjgpOwotICAgICAgY2FzZSAweDA0MDk6IHJldHVybigoQ0hBUikxNjkpOwotICAgICAgY2FzZSAw eDA0MEE6IHJldHVybigoQ0hBUikxNzApOwotICAgICAgY2FzZSAweDA0MEI6IHJldHVybigoQ0hB UikxNzEpOwotICAgICAgY2FzZSAweDA0MEM6IHJldHVybigoQ0hBUikxNzIpOwotICAgICAgY2Fz ZSAweDA0MEU6IHJldHVybigoQ0hBUikxNzQpOwotICAgICAgY2FzZSAweDA0MEY6IHJldHVybigo Q0hBUikxNzUpOwotICAgICAgY2FzZSAweDA0MTA6IHJldHVybigoQ0hBUikxNzYpOwotICAgICAg Y2FzZSAweDA0MTE6IHJldHVybigoQ0hBUikxNzcpOwotICAgICAgY2FzZSAweDA0MTI6IHJldHVy bigoQ0hBUikxNzgpOwotICAgICAgY2FzZSAweDA0MTM6IHJldHVybigoQ0hBUikxNzkpOwotICAg ICAgY2FzZSAweDA0MTQ6IHJldHVybigoQ0hBUikxODApOwotICAgICAgY2FzZSAweDA0MTU6IHJl dHVybigoQ0hBUikxODEpOwotICAgICAgY2FzZSAweDA0MTY6IHJldHVybigoQ0hBUikxODIpOwot ICAgICAgY2FzZSAweDA0MTc6IHJldHVybigoQ0hBUikxODMpOwotICAgICAgY2FzZSAweDA0MTg6 IHJldHVybigoQ0hBUikxODQpOwotICAgICAgY2FzZSAweDA0MTk6IHJldHVybigoQ0hBUikxODUp OwotICAgICAgY2FzZSAweDA0MUE6IHJldHVybigoQ0hBUikxODYpOwotICAgICAgY2FzZSAweDA0 MUI6IHJldHVybigoQ0hBUikxODcpOwotICAgICAgY2FzZSAweDA0MUM6IHJldHVybigoQ0hBUikx ODgpOwotICAgICAgY2FzZSAweDA0MUQ6IHJldHVybigoQ0hBUikxODkpOwotICAgICAgY2FzZSAw eDA0MUU6IHJldHVybigoQ0hBUikxOTApOwotICAgICAgY2FzZSAweDA0MUY6IHJldHVybigoQ0hB UikxOTEpOwotICAgICAgY2FzZSAweDA0MjA6IHJldHVybigoQ0hBUikxOTIpOwotICAgICAgY2Fz ZSAweDA0MjE6IHJldHVybigoQ0hBUikxOTMpOwotICAgICAgY2FzZSAweDA0MjI6IHJldHVybigo Q0hBUikxOTQpOwotICAgICAgY2FzZSAweDA0MjM6IHJldHVybigoQ0hBUikxOTUpOwotICAgICAg Y2FzZSAweDA0MjQ6IHJldHVybigoQ0hBUikxOTYpOwotICAgICAgY2FzZSAweDA0MjU6IHJldHVy bigoQ0hBUikxOTcpOwotICAgICAgY2FzZSAweDA0MjY6IHJldHVybigoQ0hBUikxOTgpOwotICAg ICAgY2FzZSAweDA0Mjc6IHJldHVybigoQ0hBUikxOTkpOwotICAgICAgY2FzZSAweDA0Mjg6IHJl dHVybigoQ0hBUikyMDApOwotICAgICAgY2FzZSAweDA0Mjk6IHJldHVybigoQ0hBUikyMDEpOwot ICAgICAgY2FzZSAweDA0MkE6IHJldHVybigoQ0hBUikyMDIpOwotICAgICAgY2FzZSAweDA0MkI6 IHJldHVybigoQ0hBUikyMDMpOwotICAgICAgY2FzZSAweDA0MkM6IHJldHVybigoQ0hBUikyMDQp OwotICAgICAgY2FzZSAweDA0MkQ6IHJldHVybigoQ0hBUikyMDUpOwotICAgICAgY2FzZSAweDA0 MkU6IHJldHVybigoQ0hBUikyMDYpOwotICAgICAgY2FzZSAweDA0MkY6IHJldHVybigoQ0hBUiky MDcpOwotICAgICAgY2FzZSAweDA0MzA6IHJldHVybigoQ0hBUikyMDgpOwotICAgICAgY2FzZSAw eDA0MzE6IHJldHVybigoQ0hBUikyMDkpOwotICAgICAgY2FzZSAweDA0MzI6IHJldHVybigoQ0hB UikyMTApOwotICAgICAgY2FzZSAweDA0MzM6IHJldHVybigoQ0hBUikyMTEpOwotICAgICAgY2Fz ZSAweDA0MzQ6IHJldHVybigoQ0hBUikyMTIpOwotICAgICAgY2FzZSAweDA0MzU6IHJldHVybigo Q0hBUikyMTMpOwotICAgICAgY2FzZSAweDA0MzY6IHJldHVybigoQ0hBUikyMTQpOwotICAgICAg Y2FzZSAweDA0Mzc6IHJldHVybigoQ0hBUikyMTUpOwotICAgICAgY2FzZSAweDA0Mzg6IHJldHVy bigoQ0hBUikyMTYpOwotICAgICAgY2FzZSAweDA0Mzk6IHJldHVybigoQ0hBUikyMTcpOwotICAg ICAgY2FzZSAweDA0M0E6IHJldHVybigoQ0hBUikyMTgpOwotICAgICAgY2FzZSAweDA0M0I6IHJl dHVybigoQ0hBUikyMTkpOwotICAgICAgY2FzZSAweDA0M0M6IHJldHVybigoQ0hBUikyMjApOwot ICAgICAgY2FzZSAweDA0M0Q6IHJldHVybigoQ0hBUikyMjEpOwotICAgICAgY2FzZSAweDA0M0U6 IHJldHVybigoQ0hBUikyMjIpOwotICAgICAgY2FzZSAweDA0M0Y6IHJldHVybigoQ0hBUikyMjMp OwotICAgICAgY2FzZSAweDA0NDA6IHJldHVybigoQ0hBUikyMjQpOwotICAgICAgY2FzZSAweDA0 NDE6IHJldHVybigoQ0hBUikyMjUpOwotICAgICAgY2FzZSAweDA0NDI6IHJldHVybigoQ0hBUiky MjYpOwotICAgICAgY2FzZSAweDA0NDM6IHJldHVybigoQ0hBUikyMjcpOwotICAgICAgY2FzZSAw eDA0NDQ6IHJldHVybigoQ0hBUikyMjgpOwotICAgICAgY2FzZSAweDA0NDU6IHJldHVybigoQ0hB UikyMjkpOwotICAgICAgY2FzZSAweDA0NDY6IHJldHVybigoQ0hBUikyMzApOwotICAgICAgY2Fz ZSAweDA0NDc6IHJldHVybigoQ0hBUikyMzEpOwotICAgICAgY2FzZSAweDA0NDg6IHJldHVybigo Q0hBUikyMzIpOwotICAgICAgY2FzZSAweDA0NDk6IHJldHVybigoQ0hBUikyMzMpOwotICAgICAg Y2FzZSAweDA0NEE6IHJldHVybigoQ0hBUikyMzQpOwotICAgICAgY2FzZSAweDA0NEI6IHJldHVy bigoQ0hBUikyMzUpOwotICAgICAgY2FzZSAweDA0NEM6IHJldHVybigoQ0hBUikyMzYpOwotICAg ICAgY2FzZSAweDA0NEQ6IHJldHVybigoQ0hBUikyMzcpOwotICAgICAgY2FzZSAweDA0NEU6IHJl dHVybigoQ0hBUikyMzgpOwotICAgICAgY2FzZSAweDA0NEY6IHJldHVybigoQ0hBUikyMzkpOwot ICAgICAgY2FzZSAweDA0NTE6IHJldHVybigoQ0hBUikyNDEpOwotICAgICAgY2FzZSAweDA0NTI6 IHJldHVybigoQ0hBUikyNDIpOwotICAgICAgY2FzZSAweDA0NTM6IHJldHVybigoQ0hBUikyNDMp OwotICAgICAgY2FzZSAweDA0NTQ6IHJldHVybigoQ0hBUikyNDQpOwotICAgICAgY2FzZSAweDA0 NTU6IHJldHVybigoQ0hBUikyNDUpOwotICAgICAgY2FzZSAweDA0NTY6IHJldHVybigoQ0hBUiky NDYpOwotICAgICAgY2FzZSAweDA0NTc6IHJldHVybigoQ0hBUikyNDcpOwotICAgICAgY2FzZSAw eDA0NTg6IHJldHVybigoQ0hBUikyNDgpOwotICAgICAgY2FzZSAweDA0NTk6IHJldHVybigoQ0hB UikyNDkpOwotICAgICAgY2FzZSAweDA0NUE6IHJldHVybigoQ0hBUikyNTApOwotICAgICAgY2Fz ZSAweDA0NUI6IHJldHVybigoQ0hBUikyNTEpOwotICAgICAgY2FzZSAweDA0NUM6IHJldHVybigo Q0hBUikyNTIpOwotICAgICAgY2FzZSAweDA0NUU6IHJldHVybigoQ0hBUikyNTQpOwotICAgICAg Y2FzZSAweDA0NUY6IHJldHVybigoQ0hBUikyNTUpOwotICAgICAgY2FzZSAweDIxMTY6IHJldHVy bigoQ0hBUikyNDApOwotICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X3B1bmMoYykpOwotICAgIH0K LX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElTTyA4ODU5 LTYgKExhdGluL0FyYWJpYykgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfODg1OV82KFVTSE9SVCBj KQotI2Vsc2UKLXR4Xzg4NTlfNihjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotICAgIGlmIChjIDwgMHhhMCkgICAgICAgICAgICAgICAgICAgICAgIC8qICg4ODU5LTYgIT0g TGF0aW4tNikgKi8KLSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2go YykgewotICAgICAgY2FzZSAweDAwQTA6IHJldHVybigoQ0hBUikxNjApOwotICAgICAgY2FzZSAw eDAwQTQ6IHJldHVybigoQ0hBUikxNjQpOwotICAgICAgY2FzZSAweDAwQUQ6IHJldHVybigoQ0hB UikxNzMpOwotICAgICAgY2FzZSAweDA2MEM6IHJldHVybigoQ0hBUikxNzIpOwotICAgICAgY2Fz ZSAweDA2MUI6IHJldHVybigoQ0hBUikxODcpOwotICAgICAgY2FzZSAweDA2MUY6IHJldHVybigo Q0hBUikxOTEpOwotICAgICAgY2FzZSAweDA2MjE6IHJldHVybigoQ0hBUikxOTMpOwotICAgICAg Y2FzZSAweDA2MjI6IHJldHVybigoQ0hBUikxOTQpOwotICAgICAgY2FzZSAweDA2MjM6IHJldHVy bigoQ0hBUikxOTUpOwotICAgICAgY2FzZSAweDA2MjQ6IHJldHVybigoQ0hBUikxOTYpOwotICAg ICAgY2FzZSAweDA2MjU6IHJldHVybigoQ0hBUikxOTcpOwotICAgICAgY2FzZSAweDA2MjY6IHJl dHVybigoQ0hBUikxOTgpOwotICAgICAgY2FzZSAweDA2Mjc6IHJldHVybigoQ0hBUikxOTkpOwot ICAgICAgY2FzZSAweDA2Mjg6IHJldHVybigoQ0hBUikyMDApOwotICAgICAgY2FzZSAweDA2Mjk6 IHJldHVybigoQ0hBUikyMDEpOwotICAgICAgY2FzZSAweDA2MkE6IHJldHVybigoQ0hBUikyMDIp OwotICAgICAgY2FzZSAweDA2MkI6IHJldHVybigoQ0hBUikyMDMpOwotICAgICAgY2FzZSAweDA2 MkM6IHJldHVybigoQ0hBUikyMDQpOwotICAgICAgY2FzZSAweDA2MkQ6IHJldHVybigoQ0hBUiky MDUpOwotICAgICAgY2FzZSAweDA2MkU6IHJldHVybigoQ0hBUikyMDYpOwotICAgICAgY2FzZSAw eDA2MkY6IHJldHVybigoQ0hBUikyMDcpOwotICAgICAgY2FzZSAweDA2MzA6IHJldHVybigoQ0hB UikyMDgpOwotICAgICAgY2FzZSAweDA2MzE6IHJldHVybigoQ0hBUikyMDkpOwotICAgICAgY2Fz ZSAweDA2MzI6IHJldHVybigoQ0hBUikyMTApOwotICAgICAgY2FzZSAweDA2MzM6IHJldHVybigo Q0hBUikyMTEpOwotICAgICAgY2FzZSAweDA2MzQ6IHJldHVybigoQ0hBUikyMTIpOwotICAgICAg Y2FzZSAweDA2MzU6IHJldHVybigoQ0hBUikyMTMpOwotICAgICAgY2FzZSAweDA2MzY6IHJldHVy bigoQ0hBUikyMTQpOwotICAgICAgY2FzZSAweDA2Mzc6IHJldHVybigoQ0hBUikyMTUpOwotICAg ICAgY2FzZSAweDA2Mzg6IHJldHVybigoQ0hBUikyMTYpOwotICAgICAgY2FzZSAweDA2Mzk6IHJl dHVybigoQ0hBUikyMTcpOwotICAgICAgY2FzZSAweDA2M0E6IHJldHVybigoQ0hBUikyMTgpOwot ICAgICAgY2FzZSAweDA2NDA6IHJldHVybigoQ0hBUikyMjQpOwotICAgICAgY2FzZSAweDA2NDE6 IHJldHVybigoQ0hBUikyMjUpOwotICAgICAgY2FzZSAweDA2NDI6IHJldHVybigoQ0hBUikyMjYp OwotICAgICAgY2FzZSAweDA2NDM6IHJldHVybigoQ0hBUikyMjcpOwotICAgICAgY2FzZSAweDA2 NDQ6IHJldHVybigoQ0hBUikyMjgpOwotICAgICAgY2FzZSAweDA2NDU6IHJldHVybigoQ0hBUiky MjkpOwotICAgICAgY2FzZSAweDA2NDY6IHJldHVybigoQ0hBUikyMzApOwotICAgICAgY2FzZSAw eDA2NDc6IHJldHVybigoQ0hBUikyMzEpOwotICAgICAgY2FzZSAweDA2NDg6IHJldHVybigoQ0hB UikyMzIpOwotICAgICAgY2FzZSAweDA2NDk6IHJldHVybigoQ0hBUikyMzMpOwotICAgICAgY2Fz ZSAweDA2NEE6IHJldHVybigoQ0hBUikyMzQpOwotICAgICAgY2FzZSAweDA2NEI6IHJldHVybigo Q0hBUikyMzUpOwotICAgICAgY2FzZSAweDA2NEM6IHJldHVybigoQ0hBUikyMzYpOwotICAgICAg Y2FzZSAweDA2NEQ6IHJldHVybigoQ0hBUikyMzcpOwotICAgICAgY2FzZSAweDA2NEU6IHJldHVy bigoQ0hBUikyMzgpOwotICAgICAgY2FzZSAweDA2NEY6IHJldHVybigoQ0hBUikyMzkpOwotICAg ICAgY2FzZSAweDA2NTA6IHJldHVybigoQ0hBUikyNDApOwotICAgICAgY2FzZSAweDA2NTE6IHJl dHVybigoQ0hBUikyNDEpOwotICAgICAgY2FzZSAweDA2NTI6IHJldHVybigoQ0hBUikyNDIpOwot ICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X3B1bmMoYykpOwotICAgIH0KLX0KLQotaW50ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElTTyA4ODU5LTcgKExhdGluL0dyZWVr KSAqLwotI2lmZGVmIENLX0FOU0lDCi10eF84ODU5XzcoVVNIT1JUIGMpCi0jZWxzZQotdHhfODg1 OV83KGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAw eGEwKQotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgIHN3aXRjaChjKSB7Ci0g ICAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpMTYwKTsKLSAgICAgICAgY2FzZSAweDAw YTM6IHJldHVybigoQ0hBUikxNjMpOwotICAgICAgICBjYXNlIDB4MDBhNjogcmV0dXJuKChDSEFS KTE2Nik7Ci0gICAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpMTY3KTsKLSAgICAgICAg Y2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikxNjgpOwotICAgICAgICBjYXNlIDB4MDBhOTogcmV0 dXJuKChDSEFSKTE2OSk7Ci0gICAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpMTcxKTsK LSAgICAgICAgY2FzZSAweDAwYWM6IHJldHVybigoQ0hBUikxNzIpOwotICAgICAgICBjYXNlIDB4 MDBhZDogcmV0dXJuKChDSEFSKTE3Myk7Ci0gICAgICAgIGNhc2UgMHgwMGIwOiByZXR1cm4oKENI QVIpMTc2KTsKLSAgICAgICAgY2FzZSAweDAwYjE6IHJldHVybigoQ0hBUikxNzcpOwotICAgICAg ICBjYXNlIDB4MDBiMjogcmV0dXJuKChDSEFSKTE3OCk7Ci0gICAgICAgIGNhc2UgMHgwMGIzOiBy ZXR1cm4oKENIQVIpMTc5KTsKLSAgICAgICAgY2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikxODMp OwotICAgICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKTE4Nyk7Ci0gICAgICAgIGNhc2Ug MHgwMGJkOiByZXR1cm4oKENIQVIpMTg5KTsKLSAgICAgICAgY2FzZSAweDAyYmM6IHJldHVybigo Q0hBUikxNjIpOwotICAgICAgICBjYXNlIDB4MDJiZDogcmV0dXJuKChDSEFSKTE2MSk7Ci0gICAg ICAgIGNhc2UgMHgwMzg0OiByZXR1cm4oKENIQVIpMTgwKTsKLSAgICAgICAgY2FzZSAweDAzODU6 IHJldHVybigoQ0hBUikxODEpOwotICAgICAgICBjYXNlIDB4MDM4NjogcmV0dXJuKChDSEFSKTE4 Mik7Ci0gICAgICAgIGNhc2UgMHgwMzg4OiByZXR1cm4oKENIQVIpMTg0KTsKLSAgICAgICAgY2Fz ZSAweDAzODk6IHJldHVybigoQ0hBUikxODUpOwotICAgICAgICBjYXNlIDB4MDM4YTogcmV0dXJu KChDSEFSKTE4Nik7Ci0gICAgICAgIGNhc2UgMHgwMzhjOiByZXR1cm4oKENIQVIpMTg4KTsKLSAg ICAgICAgY2FzZSAweDAzOGU6IHJldHVybigoQ0hBUikxOTApOwotICAgICAgICBjYXNlIDB4MDM4 ZjogcmV0dXJuKChDSEFSKTE5MSk7Ci0gICAgICAgIGNhc2UgMHgwMzkwOiByZXR1cm4oKENIQVIp MTkyKTsKLSAgICAgICAgY2FzZSAweDAzOTE6IHJldHVybigoQ0hBUikxOTMpOwotICAgICAgICBj YXNlIDB4MDM5MjogcmV0dXJuKChDSEFSKTE5NCk7Ci0gICAgICAgIGNhc2UgMHgwMzkzOiByZXR1 cm4oKENIQVIpMTk1KTsKLSAgICAgICAgY2FzZSAweDAzOTQ6IHJldHVybigoQ0hBUikxOTYpOwot ICAgICAgICBjYXNlIDB4MDM5NTogcmV0dXJuKChDSEFSKTE5Nyk7Ci0gICAgICAgIGNhc2UgMHgw Mzk2OiByZXR1cm4oKENIQVIpMTk4KTsKLSAgICAgICAgY2FzZSAweDAzOTc6IHJldHVybigoQ0hB UikxOTkpOwotICAgICAgICBjYXNlIDB4MDM5ODogcmV0dXJuKChDSEFSKTIwMCk7Ci0gICAgICAg IGNhc2UgMHgwMzk5OiByZXR1cm4oKENIQVIpMjAxKTsKLSAgICAgICAgY2FzZSAweDAzOWE6IHJl dHVybigoQ0hBUikyMDIpOwotICAgICAgICBjYXNlIDB4MDM5YjogcmV0dXJuKChDSEFSKTIwMyk7 Ci0gICAgICAgIGNhc2UgMHgwMzljOiByZXR1cm4oKENIQVIpMjA0KTsKLSAgICAgICAgY2FzZSAw eDAzOWQ6IHJldHVybigoQ0hBUikyMDUpOwotICAgICAgICBjYXNlIDB4MDM5ZTogcmV0dXJuKChD SEFSKTIwNik7Ci0gICAgICAgIGNhc2UgMHgwMzlmOiByZXR1cm4oKENIQVIpMjA3KTsKLSAgICAg ICAgY2FzZSAweDAzYTA6IHJldHVybigoQ0hBUikyMDgpOwotICAgICAgICBjYXNlIDB4MDNhMTog cmV0dXJuKChDSEFSKTIwOSk7Ci0gICAgICAgIGNhc2UgMHgwM2EzOiByZXR1cm4oKENIQVIpMjEx KTsKLSAgICAgICAgY2FzZSAweDAzYTQ6IHJldHVybigoQ0hBUikyMTIpOwotICAgICAgICBjYXNl IDB4MDNhNTogcmV0dXJuKChDSEFSKTIxMyk7Ci0gICAgICAgIGNhc2UgMHgwM2E2OiByZXR1cm4o KENIQVIpMjE0KTsKLSAgICAgICAgY2FzZSAweDAzYTc6IHJldHVybigoQ0hBUikyMTUpOwotICAg ICAgICBjYXNlIDB4MDNhODogcmV0dXJuKChDSEFSKTIxNik7Ci0gICAgICAgIGNhc2UgMHgwM2E5 OiByZXR1cm4oKENIQVIpMjE3KTsKLSAgICAgICAgY2FzZSAweDAzYWE6IHJldHVybigoQ0hBUiky MTgpOwotICAgICAgICBjYXNlIDB4MDNhYjogcmV0dXJuKChDSEFSKTIxOSk7Ci0gICAgICAgIGNh c2UgMHgwM2FjOiByZXR1cm4oKENIQVIpMjIwKTsKLSAgICAgICAgY2FzZSAweDAzYWQ6IHJldHVy bigoQ0hBUikyMjEpOwotICAgICAgICBjYXNlIDB4MDNhZTogcmV0dXJuKChDSEFSKTIyMik7Ci0g ICAgICAgIGNhc2UgMHgwM2FmOiByZXR1cm4oKENIQVIpMjIzKTsKLSAgICAgICAgY2FzZSAweDAz YjA6IHJldHVybigoQ0hBUikyMjQpOwotICAgICAgICBjYXNlIDB4MDNiMTogcmV0dXJuKChDSEFS KTIyNSk7Ci0gICAgICAgIGNhc2UgMHgwM2IyOiByZXR1cm4oKENIQVIpMjI2KTsKLSAgICAgICAg Y2FzZSAweDAzYjM6IHJldHVybigoQ0hBUikyMjcpOwotICAgICAgICBjYXNlIDB4MDNiNDogcmV0 dXJuKChDSEFSKTIyOCk7Ci0gICAgICAgIGNhc2UgMHgwM2I1OiByZXR1cm4oKENIQVIpMjI5KTsK LSAgICAgICAgY2FzZSAweDAzYjY6IHJldHVybigoQ0hBUikyMzApOwotICAgICAgICBjYXNlIDB4 MDNiNzogcmV0dXJuKChDSEFSKTIzMSk7Ci0gICAgICAgIGNhc2UgMHgwM2I4OiByZXR1cm4oKENI QVIpMjMyKTsKLSAgICAgICAgY2FzZSAweDAzYjk6IHJldHVybigoQ0hBUikyMzMpOwotICAgICAg ICBjYXNlIDB4MDNiYTogcmV0dXJuKChDSEFSKTIzNCk7Ci0gICAgICAgIGNhc2UgMHgwM2JiOiBy ZXR1cm4oKENIQVIpMjM1KTsKLSAgICAgICAgY2FzZSAweDAzYmM6IHJldHVybigoQ0hBUikyMzYp OwotICAgICAgICBjYXNlIDB4MDNiZDogcmV0dXJuKChDSEFSKTIzNyk7Ci0gICAgICAgIGNhc2Ug MHgwM2JlOiByZXR1cm4oKENIQVIpMjM4KTsKLSAgICAgICAgY2FzZSAweDAzYmY6IHJldHVybigo Q0hBUikyMzkpOwotICAgICAgICBjYXNlIDB4MDNjMDogcmV0dXJuKChDSEFSKTI0MCk7Ci0gICAg ICAgIGNhc2UgMHgwM2MxOiByZXR1cm4oKENIQVIpMjQxKTsKLSAgICAgICAgY2FzZSAweDAzYzI6 IHJldHVybigoQ0hBUikyNDIpOwotICAgICAgICBjYXNlIDB4MDNjMzogcmV0dXJuKChDSEFSKTI0 Myk7Ci0gICAgICAgIGNhc2UgMHgwM2M0OiByZXR1cm4oKENIQVIpMjQ0KTsKLSAgICAgICAgY2Fz ZSAweDAzYzU6IHJldHVybigoQ0hBUikyNDUpOwotICAgICAgICBjYXNlIDB4MDNjNjogcmV0dXJu KChDSEFSKTI0Nik7Ci0gICAgICAgIGNhc2UgMHgwM2M3OiByZXR1cm4oKENIQVIpMjQ3KTsKLSAg ICAgICAgY2FzZSAweDAzYzg6IHJldHVybigoQ0hBUikyNDgpOwotICAgICAgICBjYXNlIDB4MDNj OTogcmV0dXJuKChDSEFSKTI0OSk7Ci0gICAgICAgIGNhc2UgMHgwM2NhOiByZXR1cm4oKENIQVIp MjUwKTsKLSAgICAgICAgY2FzZSAweDAzY2I6IHJldHVybigoQ0hBUikyNTEpOwotICAgICAgICBj YXNlIDB4MDNjYzogcmV0dXJuKChDSEFSKTI1Mik7Ci0gICAgICAgIGNhc2UgMHgwM2NkOiByZXR1 cm4oKENIQVIpMjUzKTsKLSAgICAgICAgY2FzZSAweDAzY2U6IHJldHVybigoQ0hBUikyNTQpOwot ICAgICAgICBjYXNlIDB4MjAxNTogcmV0dXJuKChDSEFSKTE3NSk7Ci0gICAgICAgIGNhc2UgMHgy MDE4OiByZXR1cm4oKENIQVIpMTYxKTsKLSAgICAgICAgY2FzZSAweDIwMTk6IHJldHVybigoQ0hB UikxNjIpOwotICAgICAgICBkZWZhdWx0OiByZXR1cm4odHhfcHVuYyhjKSk7Ci0gICAgfQotfQot Ci1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVNPIDg4NTktOCAo TGF0aW4vSGVicmV3KSAqLwotI2lmZGVmIENLX0FOU0lDCi10eF84ODU5XzgoVVNIT1JUIGMpCi0j ZWxzZQotdHhfODg1OV84KGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0g ICAgaWYgKGMgPCAweGEwKQotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgIHN3 aXRjaChjKSB7Ci0gICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKTE2MCk7Ci0gICAgICBj YXNlIDB4MDBhMjogcmV0dXJuKChDSEFSKTE2Mik7Ci0gICAgICBjYXNlIDB4MDBhMzogcmV0dXJu KChDSEFSKTE2Myk7Ci0gICAgICBjYXNlIDB4MDBhNDogcmV0dXJuKChDSEFSKTE2NCk7Ci0gICAg ICBjYXNlIDB4MDBhNTogcmV0dXJuKChDSEFSKTE2NSk7Ci0gICAgICBjYXNlIDB4MDBhNjogcmV0 dXJuKChDSEFSKTE2Nik7Ci0gICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKTE2Nyk7Ci0g ICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKTE2OCk7Ci0gICAgICBjYXNlIDB4MDBhOTog cmV0dXJuKChDSEFSKTE2OSk7Ci0gICAgICBjYXNlIDB4MDBkNzogcmV0dXJuKChDSEFSKTE3MCk7 Ci0gICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKChDSEFSKTE3MSk7Ci0gICAgICBjYXNlIDB4MDBh YzogcmV0dXJuKChDSEFSKTE3Mik7Ci0gICAgICBjYXNlIDB4MDBhZDogcmV0dXJuKChDSEFSKTE3 Myk7Ci0gICAgICBjYXNlIDB4MDBhZTogcmV0dXJuKChDSEFSKTE3NCk7Ci0gICAgICBjYXNlIDB4 MjAzZTogcmV0dXJuKChDSEFSKTE3NSk7Ci0gICAgICBjYXNlIDB4MDBiMDogcmV0dXJuKChDSEFS KTE3Nik7Ci0gICAgICBjYXNlIDB4MDBiMTogcmV0dXJuKChDSEFSKTE3Nyk7Ci0gICAgICBjYXNl IDB4MDBiMjogcmV0dXJuKChDSEFSKTE3OCk7Ci0gICAgICBjYXNlIDB4MDBiMzogcmV0dXJuKChD SEFSKTE3OSk7Ci0gICAgICBjYXNlIDB4MDBiNDogcmV0dXJuKChDSEFSKTE4MCk7Ci0gICAgICBj YXNlIDB4MDBiNTogcmV0dXJuKChDSEFSKTE4MSk7Ci0gICAgICBjYXNlIDB4MDBiNjogcmV0dXJu KChDSEFSKTE4Mik7Ci0gICAgICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKTE4Myk7Ci0gICAg ICBjYXNlIDB4MDBiODogcmV0dXJuKChDSEFSKTE4NCk7Ci0gICAgICBjYXNlIDB4MDBiOTogcmV0 dXJuKChDSEFSKTE4NSk7Ci0gICAgICBjYXNlIDB4MDBmNzogcmV0dXJuKChDSEFSKTE4Nik7Ci0g ICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKTE4Nyk7Ci0gICAgICBjYXNlIDB4MDBiYzog cmV0dXJuKChDSEFSKTE4OCk7Ci0gICAgICBjYXNlIDB4MDBiZDogcmV0dXJuKChDSEFSKTE4OSk7 Ci0gICAgICBjYXNlIDB4MDBiZTogcmV0dXJuKChDSEFSKTE5MCk7Ci0gICAgICBjYXNlIDB4MjAx NzogcmV0dXJuKChDSEFSKTIyMyk7Ci0gICAgICBjYXNlIDB4MDVkMDogcmV0dXJuKChDSEFSKTIy NCk7Ci0gICAgICBjYXNlIDB4MDVkMTogcmV0dXJuKChDSEFSKTIyNSk7Ci0gICAgICBjYXNlIDB4 MDVkMjogcmV0dXJuKChDSEFSKTIyNik7Ci0gICAgICBjYXNlIDB4MDVkMzogcmV0dXJuKChDSEFS KTIyNyk7Ci0gICAgICBjYXNlIDB4MDVkNDogcmV0dXJuKChDSEFSKTIyOCk7Ci0gICAgICBjYXNl IDB4MDVkNTogcmV0dXJuKChDSEFSKTIyOSk7Ci0gICAgICBjYXNlIDB4MDVkNjogcmV0dXJuKChD SEFSKTIzMCk7Ci0gICAgICBjYXNlIDB4MDVkNzogcmV0dXJuKChDSEFSKTIzMSk7Ci0gICAgICBj YXNlIDB4MDVkODogcmV0dXJuKChDSEFSKTIzMik7Ci0gICAgICBjYXNlIDB4MDVkOTogcmV0dXJu KChDSEFSKTIzMyk7Ci0gICAgICBjYXNlIDB4MDVkYTogcmV0dXJuKChDSEFSKTIzNCk7Ci0gICAg ICBjYXNlIDB4MDVkYjogcmV0dXJuKChDSEFSKTIzNSk7Ci0gICAgICBjYXNlIDB4MDVkYzogcmV0 dXJuKChDSEFSKTIzNik7Ci0gICAgICBjYXNlIDB4MDVkZDogcmV0dXJuKChDSEFSKTIzNyk7Ci0g ICAgICBjYXNlIDB4MDVkZTogcmV0dXJuKChDSEFSKTIzOCk7Ci0gICAgICBjYXNlIDB4MDVkZjog cmV0dXJuKChDSEFSKTIzOSk7Ci0gICAgICBjYXNlIDB4MDVlMDogcmV0dXJuKChDSEFSKTI0MCk7 Ci0gICAgICBjYXNlIDB4MDVlMTogcmV0dXJuKChDSEFSKTI0MSk7Ci0gICAgICBjYXNlIDB4MDVl MjogcmV0dXJuKChDSEFSKTI0Mik7Ci0gICAgICBjYXNlIDB4MDVlMzogcmV0dXJuKChDSEFSKTI0 Myk7Ci0gICAgICBjYXNlIDB4MDVlNDogcmV0dXJuKChDSEFSKTI0NCk7Ci0gICAgICBjYXNlIDB4 MDVlNTogcmV0dXJuKChDSEFSKTI0NSk7Ci0gICAgICBjYXNlIDB4MDVlNjogcmV0dXJuKChDSEFS KTI0Nik7Ci0gICAgICBjYXNlIDB4MDVlNzogcmV0dXJuKChDSEFSKTI0Nyk7Ci0gICAgICBjYXNl IDB4MDVlODogcmV0dXJuKChDSEFSKTI0OCk7Ci0gICAgICBjYXNlIDB4MDVlOTogcmV0dXJuKChD SEFSKTI0OSk7Ci0gICAgICBjYXNlIDB4MDVlYTogcmV0dXJuKChDSEFSKTI1MCk7Ci0gICAgICBk ZWZhdWx0OiByZXR1cm4odHhfcHVuYyhjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogSVNPIDg4NTktOSAoTGF0aW4tNCkgKi8KLSNpZmRl ZiBDS19BTlNJQwotdHhfODg1OV85KFVTSE9SVCBjKQotI2Vsc2UKLXR4Xzg4NTlfOShjKSBVU0hP UlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHhhMCkKLSAgICAg IHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2goYykgewotICAgICAgY2FzZSAw eDAxMUU6IHJldHVybigoQ0hBUikyMDgpOyAgIC8qIERpZmZlcnMgZnJvbSBMYXRpbi0xIGluICov Ci0gICAgICBjYXNlIDB4MDExRjogcmV0dXJuKChDSEFSKTI0MCk7ICAgLyogb25seSBzaXggcGxh Y2VzICovCi0gICAgICBjYXNlIDB4MDEzMDogcmV0dXJuKChDSEFSKTIyMSk7Ci0gICAgICBjYXNl IDB4MDEzMTogcmV0dXJuKChDSEFSKTI1Myk7Ci0gICAgICBjYXNlIDB4MDE1RTogcmV0dXJuKChD SEFSKTIyMik7Ci0gICAgICBjYXNlIDB4MDE1RjogcmV0dXJuKChDSEFSKTI1NCk7Ci0gICAgICBk ZWZhdWx0OiByZXR1cm4odHhfaWRlbnQoYykpOwotICAgIH0KLX0KLQotaW50ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExhdGluLTYgKi8KLSNpZmRlZiBDS19BTlNJQwot dHhfODg1OV8xMChVU0hPUlQgYykKLSNlbHNlCi10eF84ODU5XzEwKGMpIFVTSE9SVCBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweGEwKQotICAgICAgcmV0dXJuKChD SEFSKShjICYgMHhmZikpOwotICAgIHN3aXRjaChjKSB7Ci0gICAgICBjYXNlIDB4MDBhMDogcmV0 dXJuKChDSEFSKTE2MCk7Ci0gICAgICBjYXNlIDB4MDBhZDogcmV0dXJuKChDSEFSKTE3Myk7Ci0g ICAgICBjYXNlIDB4MDBiZDogcmV0dXJuKChDSEFSKTE4OSk7Ci0gICAgICBjYXNlIDB4MDBiZTog cmV0dXJuKChDSEFSKTE5MCk7Ci0gICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFSKTE5Myk7 Ci0gICAgICBjYXNlIDB4MDBjMjogcmV0dXJuKChDSEFSKTE5NCk7Ci0gICAgICBjYXNlIDB4MDBj MzogcmV0dXJuKChDSEFSKTE5NSk7Ci0gICAgICBjYXNlIDB4MDBjNDogcmV0dXJuKChDSEFSKTE5 Nik7Ci0gICAgICBjYXNlIDB4MDBjNTogcmV0dXJuKChDSEFSKTE5Nyk7Ci0gICAgICBjYXNlIDB4 MDBjNjogcmV0dXJuKChDSEFSKTE5OCk7Ci0gICAgICBjYXNlIDB4MDBjOTogcmV0dXJuKChDSEFS KTIwMSk7Ci0gICAgICBjYXNlIDB4MDBjYjogcmV0dXJuKChDSEFSKTIwMyk7Ci0gICAgICBjYXNl IDB4MDBjZDogcmV0dXJuKChDSEFSKTIwNSk7Ci0gICAgICBjYXNlIDB4MDBjZTogcmV0dXJuKChD SEFSKTIwNik7Ci0gICAgICBjYXNlIDB4MDBjZjogcmV0dXJuKChDSEFSKTIwNyk7Ci0gICAgICBj YXNlIDB4MDBkMzogcmV0dXJuKChDSEFSKTIxMSk7Ci0gICAgICBjYXNlIDB4MDBkNDogcmV0dXJu KChDSEFSKTIxMik7Ci0gICAgICBjYXNlIDB4MDBkNTogcmV0dXJuKChDSEFSKTIxMyk7Ci0gICAg ICBjYXNlIDB4MDBkNjogcmV0dXJuKChDSEFSKTIxNCk7Ci0gICAgICBjYXNlIDB4MDBkODogcmV0 dXJuKChDSEFSKTIxNik7Ci0gICAgICBjYXNlIDB4MDBkYTogcmV0dXJuKChDSEFSKTIxOCk7Ci0g ICAgICBjYXNlIDB4MDBkYjogcmV0dXJuKChDSEFSKTIxOSk7Ci0gICAgICBjYXNlIDB4MDBkYzog cmV0dXJuKChDSEFSKTIyMCk7Ci0gICAgICBjYXNlIDB4MDBkZDogcmV0dXJuKChDSEFSKTIyMSk7 Ci0gICAgICBjYXNlIDB4MDBkZTogcmV0dXJuKChDSEFSKTIyMik7Ci0gICAgICBjYXNlIDB4MDBl MTogcmV0dXJuKChDSEFSKTIyNSk7Ci0gICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFSKTIy Nik7Ci0gICAgICBjYXNlIDB4MDBlMzogcmV0dXJuKChDSEFSKTIyNyk7Ci0gICAgICBjYXNlIDB4 MDBlNDogcmV0dXJuKChDSEFSKTIyOCk7Ci0gICAgICBjYXNlIDB4MDBlNTogcmV0dXJuKChDSEFS KTIyOSk7Ci0gICAgICBjYXNlIDB4MDBlNjogcmV0dXJuKChDSEFSKTIzMCk7Ci0gICAgICBjYXNl IDB4MDBlOTogcmV0dXJuKChDSEFSKTIzMyk7Ci0gICAgICBjYXNlIDB4MDBlYjogcmV0dXJuKChD SEFSKTIzNSk7Ci0gICAgICBjYXNlIDB4MDBlZDogcmV0dXJuKChDSEFSKTIzNyk7Ci0gICAgICBj YXNlIDB4MDBlZTogcmV0dXJuKChDSEFSKTIzOCk7Ci0gICAgICBjYXNlIDB4MDBlZjogcmV0dXJu KChDSEFSKTIzOSk7Ci0gICAgICBjYXNlIDB4MDBmMDogcmV0dXJuKChDSEFSKTI0MCk7Ci0gICAg ICBjYXNlIDB4MDBmMTogcmV0dXJuKChDSEFSKTI0MSk7Ci0gICAgICBjYXNlIDB4MDBmMzogcmV0 dXJuKChDSEFSKTI0Myk7Ci0gICAgICBjYXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKTI0NCk7Ci0g ICAgICBjYXNlIDB4MDBmNTogcmV0dXJuKChDSEFSKTI0NSk7Ci0gICAgICBjYXNlIDB4MDBmNjog cmV0dXJuKChDSEFSKTI0Nik7Ci0gICAgICBjYXNlIDB4MDBmODogcmV0dXJuKChDSEFSKTI0OCk7 Ci0gICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKTI1MCk7Ci0gICAgICBjYXNlIDB4MDBm YjogcmV0dXJuKChDSEFSKTI1MSk7Ci0gICAgICBjYXNlIDB4MDBmYzogcmV0dXJuKChDSEFSKTI1 Mik7Ci0gICAgICBjYXNlIDB4MDBmZDogcmV0dXJuKChDSEFSKTI1Myk7Ci0gICAgICBjYXNlIDB4 MDBmZTogcmV0dXJuKChDSEFSKTI1NCk7Ci0gICAgICBjYXNlIDB4MDEwMDogcmV0dXJuKChDSEFS KTE5Mik7Ci0gICAgICBjYXNlIDB4MDEwMTogcmV0dXJuKChDSEFSKTIyNCk7Ci0gICAgICBjYXNl IDB4MDEwNDogcmV0dXJuKChDSEFSKTE2MSk7Ci0gICAgICBjYXNlIDB4MDEwNTogcmV0dXJuKChD SEFSKTE3Nyk7Ci0gICAgICBjYXNlIDB4MDEwYzogcmV0dXJuKChDSEFSKTIwMCk7Ci0gICAgICBj YXNlIDB4MDEwZDogcmV0dXJuKChDSEFSKTIzMik7Ci0gICAgICBjYXNlIDB4MDExMDogcmV0dXJu KChDSEFSKTIwOCk7Ci0gICAgICBjYXNlIDB4MDExMTogcmV0dXJuKChDSEFSKTE3Nik7Ci0gICAg ICBjYXNlIDB4MDExMjogcmV0dXJuKChDSEFSKTE2Mik7Ci0gICAgICBjYXNlIDB4MDExMzogcmV0 dXJuKChDSEFSKTE3OCk7Ci0gICAgICBjYXNlIDB4MDExNjogcmV0dXJuKChDSEFSKTIwNCk7Ci0g ICAgICBjYXNlIDB4MDExNzogcmV0dXJuKChDSEFSKTIzNik7Ci0gICAgICBjYXNlIDB4MDExODog cmV0dXJuKChDSEFSKTIwMik7Ci0gICAgICBjYXNlIDB4MDExOTogcmV0dXJuKChDSEFSKTIzNCk7 Ci0gICAgICBjYXNlIDB4MDEyMjogcmV0dXJuKChDSEFSKTE2Myk7Ci0gICAgICBjYXNlIDB4MDEy MzogcmV0dXJuKChDSEFSKTE3OSk7Ci0gICAgICBjYXNlIDB4MDEyODogcmV0dXJuKChDSEFSKTE2 NSk7Ci0gICAgICBjYXNlIDB4MDEyOTogcmV0dXJuKChDSEFSKTE4MSk7Ci0gICAgICBjYXNlIDB4 MDEyYTogcmV0dXJuKChDSEFSKTE2NCk7Ci0gICAgICBjYXNlIDB4MDEyYjogcmV0dXJuKChDSEFS KTE4MCk7Ci0gICAgICBjYXNlIDB4MDEyZTogcmV0dXJuKChDSEFSKTE5OSk7Ci0gICAgICBjYXNl IDB4MDEyZjogcmV0dXJuKChDSEFSKTIzMSk7Ci0gICAgICBjYXNlIDB4MDEzNjogcmV0dXJuKChD SEFSKTE2Nik7Ci0gICAgICBjYXNlIDB4MDEzNzogcmV0dXJuKChDSEFSKTE4Mik7Ci0gICAgICBj YXNlIDB4MDEzODogcmV0dXJuKChDSEFSKTE3NCk7Ci0gICAgICBjYXNlIDB4MDEzYjogcmV0dXJu KChDSEFSKTE2Nyk7Ci0gICAgICBjYXNlIDB4MDEzYzogcmV0dXJuKChDSEFSKTE4Myk7Ci0gICAg ICBjYXNlIDB4MDE0MzogcmV0dXJuKChDSEFSKTE2OCk7Ci0gICAgICBjYXNlIDB4MDE0NDogcmV0 dXJuKChDSEFSKTE4NCk7Ci0gICAgICBjYXNlIDB4MDE0NTogcmV0dXJuKChDSEFSKTIwOSk7Ci0g ICAgICBjYXNlIDB4MDE0YTogcmV0dXJuKChDSEFSKTE3NSk7Ci0gICAgICBjYXNlIDB4MDE0Yjog cmV0dXJuKChDSEFSKTE5MSk7Ci0gICAgICBjYXNlIDB4MDE0YzogcmV0dXJuKChDSEFSKTIxMCk7 Ci0gICAgICBjYXNlIDB4MDE0ZDogcmV0dXJuKChDSEFSKTI0Mik7Ci0gICAgICBjYXNlIDB4MDE1 NjogcmV0dXJuKChDSEFSKTE2OSk7Ci0gICAgICBjYXNlIDB4MDE1NzogcmV0dXJuKChDSEFSKTE4 NSk7Ci0gICAgICBjYXNlIDB4MDE2MDogcmV0dXJuKChDSEFSKTE3MCk7Ci0gICAgICBjYXNlIDB4 MDE2MTogcmV0dXJuKChDSEFSKTE4Nik7Ci0gICAgICBjYXNlIDB4MDE2NjogcmV0dXJuKChDSEFS KTE3MSk7Ci0gICAgICBjYXNlIDB4MDE2NzogcmV0dXJuKChDSEFSKTE4Nyk7Ci0gICAgICBjYXNl IDB4MDE2ODogcmV0dXJuKChDSEFSKTIxNSk7Ci0gICAgICBjYXNlIDB4MDE2OTogcmV0dXJuKChD SEFSKTI0Nyk7Ci0gICAgICBjYXNlIDB4MDE2YTogcmV0dXJuKChDSEFSKTIyMyk7Ci0gICAgICBj YXNlIDB4MDE2YjogcmV0dXJuKChDSEFSKTI1NSk7Ci0gICAgICBjYXNlIDB4MDE3MjogcmV0dXJu KChDSEFSKTIxNyk7Ci0gICAgICBjYXNlIDB4MDE3MzogcmV0dXJuKChDSEFSKTI0OSk7Ci0gICAg ICBjYXNlIDB4MDE3ZDogcmV0dXJuKChDSEFSKTE3Mik7Ci0gICAgICBjYXNlIDB4MDE3ZTogcmV0 dXJuKChDSEFSKTE4OCk7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4odHhfaWRlbnQoYykpOwotICAg IH0KLX0KLQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVNP IDg4NTktMTUgTGF0aW4tOSAqLwotI2lmZGVmIENLX0FOU0lDCi10eF84ODU5XzE1KFVTSE9SVCBj KQotI2Vsc2UKLXR4Xzg4NTlfMTUoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsKLSAgICBpZiAoYyA8IDB4YTApCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0g ICAgc3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgMHgyMEFDOiByZXR1cm4oKENIQVIpMHhBNCk7ICAv KiBEaWZmZXJzIGZyb20gTGF0aW4tMSBpbiAqLwotICAgICAgY2FzZSAweDAxNjA6IHJldHVybigo Q0hBUikweEFDKTsgIC8qIG9ubHkgZWlnaHQgcGxhY2VzICovCi0gICAgICBjYXNlIDB4MDE2MTog cmV0dXJuKChDSEFSKTB4QTgpOwotICAgICAgY2FzZSAweDAxN0Q6IHJldHVybigoQ0hBUikweEI0 KTsKLSAgICAgIGNhc2UgMHgwMTdFOiByZXR1cm4oKENIQVIpMHhCOCk7Ci0gICAgICBjYXNlIDB4 MDE1MjogcmV0dXJuKChDSEFSKTB4QkMpOwotICAgICAgY2FzZSAweDAxNTM6IHJldHVybigoQ0hB UikweEJEKTsKLSAgICAgIGNhc2UgMHgwMTc4OiByZXR1cm4oKENIQVIpMHhCRSk7Ci0gICAgICBk ZWZhdWx0OiByZXR1cm4odHhfaWRlbnQoYykpOwotICAgIH0KLX0KLQotaW50ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9sZCBLT0ktOCAoRUNNQSAxMTMgRmlyc3QgRWQu KSAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9rb2k4KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2tvaTgo YykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4YTAp Ci0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoKGMpIHsKLSAgICAg IGNhc2UgMHgwNDEwOiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDExOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDEyOiByZXR1 cm4oKENIQVIpKDI0NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDEzOiByZXR1cm4oKENIQVIp KDIzMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE0OiByZXR1cm4oKENIQVIpKDIyOCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE1OiByZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDE2OiByZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDE3OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE4OiBy ZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE5OiByZXR1cm4oKENI QVIpKDIzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFhOiByZXR1cm4oKENIQVIpKDIzNSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFiOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDFjOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDFkOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFl OiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFmOiByZXR1cm4o KENIQVIpKDI0MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDIwOiByZXR1cm4oKENIQVIpKDI0 MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDIxOiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDIyOiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDIzOiByZXR1cm4oKENIQVIpKDI0NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDI0OiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI1OiByZXR1 cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI2OiByZXR1cm4oKENIQVIp KDIyNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI3OiByZXR1cm4oKENIQVIpKDI1NCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI4OiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDI5OiByZXR1cm4oKENIQVIpKDI1MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDJiOiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJjOiBy ZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJkOiByZXR1cm4oKENI QVIpKDI1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJlOiByZXR1cm4oKENIQVIpKDIyNCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJmOiByZXR1cm4oKENIQVIpKDI0MSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDMwOiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDMxOiByZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDMy OiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDMzOiByZXR1cm4o KENIQVIpKDE5OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM0OiByZXR1cm4oKENIQVIpKDE5 NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM1OiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDM2OiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDM3OiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDM4OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM5OiByZXR1 cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNhOiByZXR1cm4oKENIQVIp KDIwMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNiOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNjOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDNkOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDNlOiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNmOiBy ZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQwOiByZXR1cm4oKENI QVIpKDIxMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQxOiByZXR1cm4oKENIQVIpKDIxMSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQyOiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDQzOiByZXR1cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDQ0OiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ1 OiByZXR1cm4oKENIQVIpKDIwMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ2OiByZXR1cm4o KENIQVIpKDE5NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ3OiByZXR1cm4oKENIQVIpKDIy MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ4OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDQ5OiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDRhOiByZXR1cm4oKENIQVIpKDIyMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDRiOiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRjOiByZXR1 cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRkOiByZXR1cm4oKENIQVIp KDIyMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRlOiByZXR1cm4oKENIQVIpKDE5MiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRmOiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKLSAg ICAgIGRlZmF1bHQ6IHJldHVybih0eF9pZGVudChjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVUNTLTIgdG8gS09JOC1SIChSdXNzaWEp ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2tvaThyKFVTSE9SVCBjKQotI2Vsc2UKLXR4X2tvaThy KGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweDAw QTApCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoKGMpIHsKLSAg ICAgIGNhc2UgMHgwMEEwOiByZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMEE5OiByZXR1cm4oKENIQVIpKDE5MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEIwOiBy ZXR1cm4oKENIQVIpKDE1NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEIyOiByZXR1cm4oKENI QVIpKDE1NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEI3OiByZXR1cm4oKENIQVIpKDE1OCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEY3OiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDAxOiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDEwOiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDEx OiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDEyOiByZXR1cm4o KENIQVIpKDI0NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDEzOiByZXR1cm4oKENIQVIpKDIz MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE0OiByZXR1cm4oKENIQVIpKDIyOCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDE1OiByZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDE2OiByZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDE3OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE4OiByZXR1 cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE5OiByZXR1cm4oKENIQVIp KDIzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFBOiByZXR1cm4oKENIQVIpKDIzNSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFCOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDFDOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDFEOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFFOiBy ZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFGOiByZXR1cm4oKENI QVIpKDI0MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDIwOiByZXR1cm4oKENIQVIpKDI0MiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDIxOiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDIyOiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDIzOiByZXR1cm4oKENIQVIpKDI0NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI0 OiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI1OiByZXR1cm4o KENIQVIpKDIzMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI2OiByZXR1cm4oKENIQVIpKDIy NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI3OiByZXR1cm4oKENIQVIpKDI1NCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDI4OiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDI5OiByZXR1cm4oKENIQVIpKDI1MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDJBOiByZXR1cm4oKENIQVIpKDI1NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJCOiByZXR1 cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJDOiByZXR1cm4oKENIQVIp KDI0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJEOiByZXR1cm4oKENIQVIpKDI1MiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJFOiByZXR1cm4oKENIQVIpKDIyNCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDJGOiByZXR1cm4oKENIQVIpKDI0MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDMwOiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDMxOiBy ZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDMyOiByZXR1cm4oKENI QVIpKDIxNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDMzOiByZXR1cm4oKENIQVIpKDE5OSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM0OiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDM1OiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDM2OiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM3 OiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM4OiByZXR1cm4o KENIQVIpKDIwMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM5OiByZXR1cm4oKENIQVIpKDIw MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNBOiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDNCOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDNDOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDNEOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNFOiByZXR1 cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNGOiByZXR1cm4oKENIQVIp KDIwOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQwOiByZXR1cm4oKENIQVIpKDIxMCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQxOiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDQyOiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDQzOiByZXR1cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ0OiBy ZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ1OiByZXR1cm4oKENI QVIpKDIwMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ2OiByZXR1cm4oKENIQVIpKDE5NSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ3OiByZXR1cm4oKENIQVIpKDIyMiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDQ4OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDQ5OiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRB OiByZXR1cm4oKENIQVIpKDIyMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRCOiByZXR1cm4o KENIQVIpKDIxNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRDOiByZXR1cm4oKENIQVIpKDIx NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDREOiByZXR1cm4oKENIQVIpKDIyMCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDRFOiByZXR1cm4oKENIQVIpKDE5MiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDRGOiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDUxOiByZXR1cm4oKENIQVIpKDE2MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjE5OiByZXR1 cm4oKENIQVIpKDE0OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjFBOiByZXR1cm4oKENIQVIp KDE1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjQ4OiByZXR1cm4oKENIQVIpKDE1MSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENIQVIpKDE1MiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyMjY1OiByZXR1cm4oKENIQVIpKDE1MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyMzIwOiByZXR1cm4oKENIQVIpKDE0NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMzIxOiBy ZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTAwOiByZXR1cm4oKENI QVIpKDEyOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTAyOiByZXR1cm4oKENIQVIpKDEyOSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTBDOiByZXR1cm4oKENIQVIpKDEzMCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENIQVIpKDEzMSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTE0OiByZXR1cm4oKENIQVIpKDEzMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTE4 OiByZXR1cm4oKENIQVIpKDEzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTFDOiByZXR1cm4o KENIQVIpKDEzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTI0OiByZXR1cm4oKENIQVIpKDEz NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTJDOiByZXR1cm4oKENIQVIpKDEzNiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTNDOiByZXR1cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTUwOiByZXR1cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUxOiByZXR1 cm4oKENIQVIpKDE2MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUyOiByZXR1cm4oKENIQVIp KDE2MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUzOiByZXR1cm4oKENIQVIpKDE2NCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU0OiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyNTU1OiByZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNTU2OiByZXR1cm4oKENIQVIpKDE2NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU3OiBy ZXR1cm4oKENIQVIpKDE2OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU4OiByZXR1cm4oKENI QVIpKDE2OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU5OiByZXR1cm4oKENIQVIpKDE3MCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVBOiByZXR1cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTVCOiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTVDOiByZXR1cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVE OiByZXR1cm4oKENIQVIpKDE3NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVFOiByZXR1cm4o KENIQVIpKDE3NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVGOiByZXR1cm4oKENIQVIpKDE3 NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTYwOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTYxOiByZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTYyOiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTYzOiByZXR1cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY0OiByZXR1 cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY1OiByZXR1cm4oKENIQVIp KDE4MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY2OiByZXR1cm4oKENIQVIpKDE4NCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY3OiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyNTY4OiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNTY5OiByZXR1cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTZBOiBy ZXR1cm4oKENIQVIpKDE4OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTZCOiByZXR1cm4oKENI QVIpKDE4OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTZDOiByZXR1cm4oKENIQVIpKDE5MCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTgwOiByZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTg0OiByZXR1cm4oKENIQVIpKDE0MCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTg4OiByZXR1cm4oKENIQVIpKDE0MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNThD OiByZXR1cm4oKENIQVIpKDE0MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTkwOiByZXR1cm4o KENIQVIpKDE0MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTkxOiByZXR1cm4oKENIQVIpKDE0 NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTkyOiByZXR1cm4oKENIQVIpKDE0NSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTkzOiByZXR1cm4oKENIQVIpKDE0NiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNUEwOiByZXR1cm4oKENIQVIpKDE0OCAmIDB4ZmYpKTsKLSAgICAgIGRlZmF1bHQ6 IHJldHVybih0eF9pZGVudChjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogS09JOC1VIChVa3JhaW5lKSAqLwotI2lmZGVmIENLX0FOU0lD Ci10eF9rb2k4dShVU0hPUlQgYykKLSNlbHNlCi10eF9rb2k4dShjKSBVU0hPUlQgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHhhMCkKLSAgICAgIHJldHVybigoQ0hB UikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2goYykgewotICAgICAgY2FzZSAweDAwQTA6IHJldHVy bigoQ0hBUikoMTU0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQTk6IHJldHVybigoQ0hBUiko MTkxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQjA6IHJldHVybigoQ0hBUikoMTU2ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwQjI6IHJldHVybigoQ0hBUikoMTU3ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwQjc6IHJldHVybigoQ0hBUikoMTU4ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwRjc6IHJldHVybigoQ0hBUikoMTU5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MDE6IHJl dHVybigoQ0hBUikoMTc5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MDQ6IHJldHVybigoQ0hB UikoMTgwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MDY6IHJldHVybigoQ0hBUikoMTgyICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0MDc6IHJldHVybigoQ0hBUikoMTgzICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0MTA6IHJldHVybigoQ0hBUikoMjI1ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0MTE6IHJldHVybigoQ0hBUikoMjI2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTI6 IHJldHVybigoQ0hBUikoMjQ3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTM6IHJldHVybigo Q0hBUikoMjMxICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTQ6IHJldHVybigoQ0hBUikoMjI4 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTU6IHJldHVybigoQ0hBUikoMjI5ICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0MTY6IHJldHVybigoQ0hBUikoMjQ2ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0MTc6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 MTg6IHJldHVybigoQ0hBUikoMjMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTk6IHJldHVy bigoQ0hBUikoMjM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MUE6IHJldHVybigoQ0hBUiko MjM1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MUI6IHJldHVybigoQ0hBUikoMjM2ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0MUM6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0MUQ6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0MUU6IHJldHVybigoQ0hBUikoMjM5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MUY6IHJl dHVybigoQ0hBUikoMjQwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjA6IHJldHVybigoQ0hB UikoMjQyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjE6IHJldHVybigoQ0hBUikoMjQzICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0MjI6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0MjM6IHJldHVybigoQ0hBUikoMjQ1ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0MjQ6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjU6 IHJldHVybigoQ0hBUikoMjMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjY6IHJldHVybigo Q0hBUikoMjI3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0Mjc6IHJldHVybigoQ0hBUikoMjU0 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0Mjg6IHJldHVybigoQ0hBUikoMjUxICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0Mjk6IHJldHVybigoQ0hBUikoMjUzICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0MkE6IHJldHVybigoQ0hBUikoMjU1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 MkI6IHJldHVybigoQ0hBUikoMjQ5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MkM6IHJldHVy bigoQ0hBUikoMjQ4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MkQ6IHJldHVybigoQ0hBUiko MjUyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MkU6IHJldHVybigoQ0hBUikoMjI0ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0MkY6IHJldHVybigoQ0hBUikoMjQxICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0MzA6IHJldHVybigoQ0hBUikoMTkzICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0MzE6IHJldHVybigoQ0hBUikoMTk0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MzI6IHJl dHVybigoQ0hBUikoMjE1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MzM6IHJldHVybigoQ0hB UikoMTk5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MzQ6IHJldHVybigoQ0hBUikoMTk2ICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0MzU6IHJldHVybigoQ0hBUikoMTk3ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0MzY6IHJldHVybigoQ0hBUikoMjE0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0Mzc6IHJldHVybigoQ0hBUikoMjE4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0Mzg6 IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0Mzk6IHJldHVybigo Q0hBUikoMjAyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0M0E6IHJldHVybigoQ0hBUikoMjAz ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0M0I6IHJldHVybigoQ0hBUikoMjA0ICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0M0M6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0M0Q6IHJldHVybigoQ0hBUikoMjA2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 M0U6IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0M0Y6IHJldHVy bigoQ0hBUikoMjA4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDA6IHJldHVybigoQ0hBUiko MjEwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDE6IHJldHVybigoQ0hBUikoMjExICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0NDI6IHJldHVybigoQ0hBUikoMjEyICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0NDM6IHJldHVybigoQ0hBUikoMjEzICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0NDQ6IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDU6IHJl dHVybigoQ0hBUikoMjAwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDY6IHJldHVybigoQ0hB UikoMTk1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDc6IHJldHVybigoQ0hBUikoMjIyICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0NDg6IHJldHVybigoQ0hBUikoMjE5ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0NDk6IHJldHVybigoQ0hBUikoMjIxICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0NEE6IHJldHVybigoQ0hBUikoMjIzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NEI6 IHJldHVybigoQ0hBUikoMjE3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NEM6IHJldHVybigo Q0hBUikoMjE2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NEQ6IHJldHVybigoQ0hBUikoMjIw ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NEU6IHJldHVybigoQ0hBUikoMTkyICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0NEY6IHJldHVybigoQ0hBUikoMjA5ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0NTE6IHJldHVybigoQ0hBUikoMTYzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 NTQ6IHJldHVybigoQ0hBUikoMTY0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NTY6IHJldHVy bigoQ0hBUikoMTY2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NTc6IHJldHVybigoQ0hBUiko MTY3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0OTA6IHJldHVybigoQ0hBUikoMTg5ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0OTE6IHJldHVybigoQ0hBUikoMTczICYgMHhmZikpOwotICAg ICAgY2FzZSAweDIyMTk6IHJldHVybigoQ0hBUikoMTQ5ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDIyMUE6IHJldHVybigoQ0hBUikoMTUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNDg6IHJl dHVybigoQ0hBUikoMTUxICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNjQ6IHJldHVybigoQ0hB UikoMTUyICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNjU6IHJldHVybigoQ0hBUikoMTUzICYg MHhmZikpOwotICAgICAgY2FzZSAweDIzMjA6IHJldHVybigoQ0hBUikoMTQ3ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDIzMjE6IHJldHVybigoQ0hBUikoMTU1ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1MDA6IHJldHVybigoQ0hBUikoMTI4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MDI6 IHJldHVybigoQ0hBUikoMTI5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MEM6IHJldHVybigo Q0hBUikoMTMwICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hBUikoMTMx ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikoMTMyICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1MTg6IHJldHVybigoQ0hBUikoMTMzICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1MUM6IHJldHVybigoQ0hBUikoMTM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 MjQ6IHJldHVybigoQ0hBUikoMTM1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MkM6IHJldHVy bigoQ0hBUikoMTM2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigoQ0hBUiko MTM3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1M0M6IHJldHVybigoQ0hBUikoMTM4ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDI1NTA6IHJldHVybigoQ0hBUikoMTYwICYgMHhmZikpOwotICAg ICAgY2FzZSAweDI1NTE6IHJldHVybigoQ0hBUikoMTYxICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1NTI6IHJldHVybigoQ0hBUikoMTYyICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTQ6IHJl dHVybigoQ0hBUikoMTY1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTc6IHJldHVybigoQ0hB UikoMTY4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTg6IHJldHVybigoQ0hBUikoMTY5ICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1NTk6IHJldHVybigoQ0hBUikoMTcwICYgMHhmZikpOwot ICAgICAgY2FzZSAweDI1NUE6IHJldHVybigoQ0hBUikoMTcxICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1NUI6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NUQ6 IHJldHVybigoQ0hBUikoMTc0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NUU6IHJldHVybigo Q0hBUikoMTc1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NUY6IHJldHVybigoQ0hBUikoMTc2 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NjA6IHJldHVybigoQ0hBUikoMTc3ICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1NjE6IHJldHVybigoQ0hBUikoMTc4ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1NjM6IHJldHVybigoQ0hBUikoMTgxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 NjY6IHJldHVybigoQ0hBUikoMTg0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1Njc6IHJldHVy bigoQ0hBUikoMTg1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1Njg6IHJldHVybigoQ0hBUiko MTg2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1Njk6IHJldHVybigoQ0hBUikoMTg3ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDI1NkE6IHJldHVybigoQ0hBUikoMTg4ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDI1NkM6IHJldHVybigoQ0hBUikoMTkwICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1ODA6IHJldHVybigoQ0hBUikoMTM5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1ODQ6IHJl dHVybigoQ0hBUikoMTQwICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1ODg6IHJldHVybigoQ0hB UikoMTQxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OEM6IHJldHVybigoQ0hBUikoMTQyICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1OTA6IHJldHVybigoQ0hBUikoMTQzICYgMHhmZikpOwot ICAgICAgY2FzZSAweDI1OTE6IHJldHVybigoQ0hBUikoMTQ0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1OTI6IHJldHVybigoQ0hBUikoMTQ1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OTM6 IHJldHVybigoQ0hBUikoMTQ2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1QTA6IHJldHVybigo Q0hBUikoMTQ4ICYgMHhmZikpOwotICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X2lkZW50KGMpKTsK LSAgICB9Ci19Ci0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IERFQyBNQ1MgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfZGVjbWNzKFVTSE9SVCBjKQotI2Vsc2UK LXR4X2RlY21jcyhjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlm IChjIDwgMHhhMCkKLSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2go YykgewotICAgICAgY2FzZSAweDAwYTY6Ci0gICAgICBjYXNlIDB4MDBhODoKLSAgICAgIGNhc2Ug MHgwMGFjOgotICAgICAgY2FzZSAweDAwYWU6Ci0gICAgICBjYXNlIDB4MDBhZjoKLSAgICAgIGNh c2UgMHgwMGI0OgotICAgICAgY2FzZSAweDAwYjg6Ci0gICAgICBjYXNlIDB4MDBiZToKLSAgICAg IGNhc2UgMHgwMGQwOgotICAgICAgY2FzZSAweDAwZGU6Ci0gICAgICBjYXNlIDB4MDBmMDoKLSAg ICAgIGNhc2UgMHgwMGZlOgotICAgICAgY2FzZSAweDAwZmY6Ci0gICAgICAgIHJldHVybigtMSk7 ICAgICAgICAgICAgICAgICAgICAgLyogVGhlc2UgYXJlIGFsbCB1bmRlZmluZWQgaW4gREVDTUNT ICovCi0gICAgICBjYXNlIDB4MDBhNDogICAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVuY3kg c2lnbiAqLwotICAgICAgICByZXR1cm4oKENIQVIpMHhhOCk7Ci0gICAgICBjYXNlIDB4MDE1Mjog ICAgICAgICAgICAgICAgICAgICAgLyogT0UgKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKTB4ZDcp OwotICAgICAgY2FzZSAweDAxNTM6ICAgICAgICAgICAgICAgICAgICAgIC8qIG9lICovCi0gICAg ICAgIHJldHVybigoQ0hBUikweGY3KTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9pZGVudChj KSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTmVYVFNURVAgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfbmV4dHN0ZXAoVVNIT1JUIGMpCi0j ZWxzZQotdHhfbmV4dHN0ZXAoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSAgICBpZiAoYyA8IDB4ODApICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhp Y3MgKi8KLSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2ggKGMpIHsK LSAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpKDEyOCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGExOiByZXR1cm4oKENIQVIpKDE2MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGEy OiByZXR1cm4oKENIQVIpKDE2MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGEzOiByZXR1cm4o KENIQVIpKDE2MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE0OiByZXR1cm4oKENIQVIpKDE2 OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE1OiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGE2OiByZXR1cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpKDE2NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGE4OiByZXR1cm4oKENIQVIpKDIwMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE5OiByZXR1 cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFhOiByZXR1cm4oKENIQVIp KDIyNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpKDE3MSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGFlOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGFmOiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIxOiBy ZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIyOiByZXR1cm4oKENI QVIpKDIwMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIzOiByZXR1cm4oKENIQVIpKDIwNCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI0OiByZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGI1OiByZXR1cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGI2OiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI3 OiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI4OiByZXR1cm4o KENIQVIpKDIwMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI5OiByZXR1cm4oKENIQVIpKDE5 MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJhOiByZXR1cm4oKENIQVIpKDIzNSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGJjOiByZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGJkOiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJlOiByZXR1 cm4oKENIQVIpKDIxMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJmOiByZXR1cm4oKENIQVIp KDE5MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMwOiByZXR1cm4oKENIQVIpKDEyOSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMxOiByZXR1cm4oKENIQVIpKDEzMCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGMyOiByZXR1cm4oKENIQVIpKDEzMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGMzOiByZXR1cm4oKENIQVIpKDEzMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM0OiBy ZXR1cm4oKENIQVIpKDEzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM1OiByZXR1cm4oKENI QVIpKDEzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM2OiByZXR1cm4oKENIQVIpKDIyNSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM3OiByZXR1cm4oKENIQVIpKDEzNSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGM4OiByZXR1cm4oKENIQVIpKDEzNiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGM5OiByZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNh OiByZXR1cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNiOiByZXR1cm4o KENIQVIpKDEzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNjOiByZXR1cm4oKENIQVIpKDE0 MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNkOiByZXR1cm4oKENIQVIpKDE0MSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGNlOiByZXR1cm4oKENIQVIpKDE0MiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGNmOiByZXR1cm4oKENIQVIpKDE0MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGQwOiByZXR1cm4oKENIQVIpKDE0NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQxOiByZXR1 cm4oKENIQVIpKDE0NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQyOiByZXR1cm4oKENIQVIp KDE0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIpKDE0NyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ0OiByZXR1cm4oKENIQVIpKDE0OCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGQ1OiByZXR1cm4oKENIQVIpKDE0OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGQ2OiByZXR1cm4oKENIQVIpKDE1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ3OiBy ZXR1cm4oKENIQVIpKDE1OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ4OiByZXR1cm4oKENI QVIpKDIzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ5OiByZXR1cm4oKENIQVIpKDE1MSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRhOiByZXR1cm4oKENIQVIpKDE1MiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGRiOiByZXR1cm4oKENIQVIpKDE1MyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGRjOiByZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRk OiByZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRlOiByZXR1cm4o KENIQVIpKDE1NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRmOiByZXR1cm4oKENIQVIpKDI1 MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUwOiByZXR1cm4oKENIQVIpKDIxMyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGUxOiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGUzOiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU0OiByZXR1 cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU1OiByZXR1cm4oKENIQVIp KDIxOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU2OiByZXR1cm4oKENIQVIpKDI0MSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU3OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGU4OiByZXR1cm4oKENIQVIpKDIyMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGU5OiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVhOiBy ZXR1cm4oKENIQVIpKDIyMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGViOiByZXR1cm4oKENI QVIpKDIyMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVjOiByZXR1cm4oKENIQVIpKDIyNCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGVmOiByZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYw OiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYxOiByZXR1cm4o KENIQVIpKDIzMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYyOiByZXR1cm4oKENIQVIpKDIz NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGY0OiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGY1OiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGY2OiByZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY3OiByZXR1 cm4oKENIQVIpKDE1OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY4OiByZXR1cm4oKENIQVIp KDI0OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY5OiByZXR1cm4oKENIQVIpKDI0MiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGZiOiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGZjOiByZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZkOiBy ZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZlOiByZXR1cm4oKENI QVIpKDI1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZmOiByZXR1cm4oKENIQVIpKDI1MyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTMxOiByZXR1cm4oKENIQVIpKDI0NSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMTQxOiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMTQyOiByZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTUy OiByZXR1cm4oKENIQVIpKDIzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTUzOiByZXR1cm4o KENIQVIpKDI1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTkyOiByZXR1cm4oKENIQVIpKDE2 NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmM2OiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMmM3OiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMmNiOiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MmQ4OiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmQ5OiByZXR1 cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmRhOiByZXR1cm4oKENIQVIp KDIwMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmRiOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmRjOiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMmRkOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyMDEzOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDE0OiBy ZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDE5OiByZXR1cm4oKENI QVIpKDE2OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFhOiByZXR1cm4oKENIQVIpKDE4NCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFjOiByZXR1cm4oKENIQVIpKDE3MCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyMDFkOiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyMDFlOiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDIw OiByZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDIxOiByZXR1cm4o KENIQVIpKDE3OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDIyOiByZXR1cm4oKENIQVIpKDE4 MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDI2OiByZXR1cm4oKENIQVIpKDE4OCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyMDMwOiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyMDM5OiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy MDNhOiByZXR1cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDQ0OiByZXR1 cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHhmYjAxOiByZXR1cm4oKENIQVIp KDE3NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHhmYjAyOiByZXR1cm4oKENIQVIpKDE3NSAmIDB4 ZmYpKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9wdW5jKGMpKTsKLSAgICB9Ci19Ci0KLWlu dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERyBJbnRlcm5hdGlvbmFs ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2RnaShVU0hPUlQgYykKLSNlbHNlCi10eF9kZ2koYykg VVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4YTApCi0g ICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoKGMpIHsKLSAgICAgIGNh c2UgMHgwMGEwOiByZXR1cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGEx OiByZXR1cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGEyOiByZXR1cm4o KENIQVIpKDE2NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGEzOiByZXR1cm4oKENIQVIpKDE2 OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE0OiByZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGE1OiByZXR1cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGE4OiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE5OiByZXR1 cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFhOiByZXR1cm4oKENIQVIp KDE2OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIpKDE2MSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGFlOiByZXR1cm4oKENIQVIpKDE3NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGIwOiByZXR1cm4oKENIQVIpKDE4OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIxOiBy ZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIyOiByZXR1cm4oKENI QVIpKDE2NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIzOiByZXR1cm4oKENIQVIpKDE2NSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI0OiByZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGI1OiByZXR1cm4oKENIQVIpKDE2MyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGI2OiByZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI3 OiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI4OiByZXR1cm4o KENIQVIpKDE4NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJhOiByZXR1cm4oKENIQVIpKDE3 MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGJkOiByZXR1cm4oKENIQVIpKDE2MiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGJmOiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGMwOiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMxOiByZXR1 cm4oKENIQVIpKDE5MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMyOiByZXR1cm4oKENIQVIp KDE5NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMzOiByZXR1cm4oKENIQVIpKDE5NiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM0OiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGM1OiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGM2OiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM3OiBy ZXR1cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM4OiByZXR1cm4oKENI QVIpKDIwMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM5OiByZXR1cm4oKENIQVIpKDIwMCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNhOiByZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGNiOiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGNjOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNk OiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNlOiByZXR1cm4o KENIQVIpKDIwNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNmOiByZXR1cm4oKENIQVIpKDIw NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQxOiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGQyOiByZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGQ0OiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ1OiByZXR1 cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ2OiByZXR1cm4oKENIQVIp KDIxMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ4OiByZXR1cm4oKENIQVIpKDIxNCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ5OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGRhOiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGRiOiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRjOiBy ZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRmOiByZXR1cm4oKENI QVIpKDI1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUwOiByZXR1cm4oKENIQVIpKDIyNSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUxOiByZXR1cm4oKENIQVIpKDIyNCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGUzOiByZXR1cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU0 OiByZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU1OiByZXR1cm4o KENIQVIpKDIyOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU2OiByZXR1cm4oKENIQVIpKDIz MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU3OiByZXR1cm4oKENIQVIpKDIzMSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGU4OiByZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGU5OiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGVhOiByZXR1cm4oKENIQVIpKDIzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGViOiByZXR1 cm4oKENIQVIpKDIzNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVjOiByZXR1cm4oKENIQVIp KDIzNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGVmOiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGYxOiByZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYyOiBy ZXR1cm4oKENIQVIpKDI0MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENI QVIpKDI0MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY0OiByZXR1cm4oKENIQVIpKDI0MyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY1OiByZXR1cm4oKENIQVIpKDI0NSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGY2OiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGY4OiByZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY5 OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4o KENIQVIpKDI0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZiOiByZXR1cm4oKENIQVIpKDI1 MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZjOiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGZmOiByZXR1cm4oKENIQVIpKDI1MyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMTUzOiByZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MTc4OiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTkyOiByZXR1 cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMjc2OiByZXR1cm4oKENIQVIp KDIxNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDIxOiByZXR1cm4oKENIQVIpKDE3NSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyMTIyOiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyMTkxOiByZXR1cm4oKENIQVIpKDE5MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyMjY0OiByZXR1cm4oKENIQVIpKDE4MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjY1OiBy ZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oKENI QVIpKDI1NSAmIDB4ZmYpKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9wdW5jKGMpKTsKLSAg ICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNp bnRvc2ggTGF0aW4gKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfbWFjbGF0aW4oVVNIT1JUIGMpCi0j ZWxzZQotdHhfbWFjbGF0aW4oYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSAgICBpZiAoYyA8IDB4ODApICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhp Y3MgKi8KLSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2ggKGMpIHsK LSAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGExOiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGEy OiByZXR1cm4oKENIQVIpKDE2MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGEzOiByZXR1cm4o KENIQVIpKDE2MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE0OiByZXR1cm4oKENIQVIpKDIx OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE1OiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGE5OiByZXR1cm4oKENIQVIpKDE2OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFhOiByZXR1 cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIp KDE5OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIpKDE5NCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFlOiByZXR1cm4oKENIQVIpKDE2OCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGFmOiByZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGIwOiByZXR1cm4oKENIQVIpKDE2MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIxOiBy ZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI0OiByZXR1cm4oKENI QVIpKDE3MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI1OiByZXR1cm4oKENIQVIpKDE4MSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI2OiByZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGI4OiByZXR1cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJh OiByZXR1cm4oKENIQVIpKDE4OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJiOiByZXR1cm4o KENIQVIpKDIwMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJmOiByZXR1cm4oKENIQVIpKDE5 MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMwOiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGMxOiByZXR1cm4oKENIQVIpKDIzMSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGMyOiByZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGMzOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM0OiByZXR1 cm4oKENIQVIpKDEyOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM1OiByZXR1cm4oKENIQVIp KDEyOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM2OiByZXR1cm4oKENIQVIpKDE3NCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM3OiByZXR1cm4oKENIQVIpKDEzMCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGM4OiByZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGM5OiByZXR1cm4oKENIQVIpKDEzMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNhOiBy ZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNiOiByZXR1cm4oKENI QVIpKDIzMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNjOiByZXR1cm4oKENIQVIpKDIzNyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNkOiByZXR1cm4oKENIQVIpKDIzNCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGNlOiByZXR1cm4oKENIQVIpKDIzNSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGNmOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQw OiByZXR1cm4oKENIQVIpKDIyMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQxOiByZXR1cm4o KENIQVIpKDEzMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQyOiByZXR1cm4oKENIQVIpKDI0 MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGQ0OiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGQ1OiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGQ2OiByZXR1cm4oKENIQVIpKDEzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ4OiByZXR1 cm4oKENIQVIpKDE3NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ5OiByZXR1cm4oKENIQVIp KDI0NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRhOiByZXR1cm4oKENIQVIpKDI0MiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRiOiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGRjOiByZXR1cm4oKENIQVIpKDEzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGRkOiByZXR1cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRlOiBy ZXR1cm4oKENIQVIpKDIyMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRmOiByZXR1cm4oKENI QVIpKDE2NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUwOiByZXR1cm4oKENIQVIpKDEzNiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUxOiByZXR1cm4oKENIQVIpKDEzNSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGUzOiByZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU0 OiByZXR1cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU1OiByZXR1cm4o KENIQVIpKDE0MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU2OiByZXR1cm4oKENIQVIpKDE5 MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU3OiByZXR1cm4oKENIQVIpKDE0MSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGU4OiByZXR1cm4oKENIQVIpKDE0MyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGU5OiByZXR1cm4oKENIQVIpKDE0MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGVhOiByZXR1cm4oKENIQVIpKDE0NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGViOiByZXR1 cm4oKENIQVIpKDE0NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVjOiByZXR1cm4oKENIQVIp KDE0NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENIQVIpKDE0NiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIpKDE0OCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGVmOiByZXR1cm4oKENIQVIpKDE0OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGYwOiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYxOiBy ZXR1cm4oKENIQVIpKDE1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYyOiByZXR1cm4oKENI QVIpKDE1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpKDE1MSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY0OiByZXR1cm4oKENIQVIpKDE1MyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGY1OiByZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGY2OiByZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY3 OiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY4OiByZXR1cm4o KENIQVIpKDE5MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY5OiByZXR1cm4oKENIQVIpKDE1 NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpKDE1NiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGZiOiByZXR1cm4oKENIQVIpKDE1OCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGZjOiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGZkOiByZXR1cm4oKENIQVIpKDIyNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZlOiByZXR1 cm4oKENIQVIpKDIyMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZmOiByZXR1cm4oKENIQVIp KDIxNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTMxOiByZXR1cm4oKENIQVIpKDI0NSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTUyOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMTUzOiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMTc4OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTkyOiBy ZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmM2OiByZXR1cm4oKENI QVIpKDI0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmM3OiByZXR1cm4oKENIQVIpKDI1NSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmQ4OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMmQ5OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMmRhOiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmRi OiByZXR1cm4oKENIQVIpKDI1NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmRjOiByZXR1cm4o KENIQVIpKDI0NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmRkOiByZXR1cm4oKENIQVIpKDI1 MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2MwOiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyMDEzOiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyMDE0OiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy MDE4OiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDE5OiByZXR1 cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFhOiByZXR1cm4oKENIQVIp KDIyNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFjOiByZXR1cm4oKENIQVIpKDIxMCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFkOiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyMDFlOiByZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyMDIyOiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDI2OiBy ZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDMwOiByZXR1cm4oKENI QVIpKDIyOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDQ0OiByZXR1cm4oKENIQVIpKDIxOCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMTIyOiByZXR1cm4oKENIQVIpKDE3MCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyMTI2OiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyMjAyOiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjA2 OiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjBmOiByZXR1cm4o KENIQVIpKDE4NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjExOiByZXR1cm4oKENIQVIpKDE4 MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjFhOiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyMjFlOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyMjJiOiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy MjQ4OiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjYwOiByZXR1 cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENIQVIp KDE3OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjY1OiByZXR1cm4oKENIQVIpKDE3OSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyNWNhOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHhmOGZmOiByZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKLSAgICAgIGRlZmF1 bHQ6IHJldHVybih0eF9wdW5jKGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBBcHBsZSBRdWlja0RyYXcgLyBDUDEwMDAwICovCi0jaWZk ZWYgQ0tfQU5TSUMKLXR4X3F1aWNrZHJhdyhVU0hPUlQgYykKLSNlbHNlCi10eF9xdWlja2RyYXco YykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4ODAp ICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8KLSAgICAgIHJldHVy bigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHgwMGEw OiByZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGExOiByZXR1cm4o KENIQVIpKDE5MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGEyOiByZXR1cm4oKENIQVIpKDE2 MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGEzOiByZXR1cm4oKENIQVIpKDE2MyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGE0OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGE1OiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGE3OiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE4OiByZXR1 cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE5OiByZXR1cm4oKENIQVIp KDE2OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFhOiByZXR1cm4oKENIQVIpKDE4NyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGFlOiByZXR1cm4oKENIQVIpKDE2OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFmOiBy ZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIwOiByZXR1cm4oKENI QVIpKDE2MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIxOiByZXR1cm4oKENIQVIpKDE3NyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI0OiByZXR1cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGI1OiByZXR1cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGI2OiByZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI3 OiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI4OiByZXR1cm4o KENIQVIpKDI1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJhOiByZXR1cm4oKENIQVIpKDE4 OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpKDIwMCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGJmOiByZXR1cm4oKENIQVIpKDE5MiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGMwOiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGMxOiByZXR1cm4oKENIQVIpKDIzMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMyOiByZXR1 cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMzOiByZXR1cm4oKENIQVIp KDIwNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM0OiByZXR1cm4oKENIQVIpKDEyOCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM1OiByZXR1cm4oKENIQVIpKDEyOSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGM2OiByZXR1cm4oKENIQVIpKDE3NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGM3OiByZXR1cm4oKENIQVIpKDEzMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM4OiBy ZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM5OiByZXR1cm4oKENI QVIpKDEzMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNhOiByZXR1cm4oKENIQVIpKDIzMCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNiOiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGNjOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGNkOiByZXR1cm4oKENIQVIpKDIzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNl OiByZXR1cm4oKENIQVIpKDIzNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNmOiByZXR1cm4o KENIQVIpKDIzNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDM5OiByZXR1cm4oKENIQVIpKDIy MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQxOiByZXR1cm4oKENIQVIpKDEzMiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGQyOiByZXR1cm4oKENIQVIpKDI0MSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGQ0OiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ1OiByZXR1 cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ2OiByZXR1cm4oKENIQVIp KDEzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ4OiByZXR1cm4oKENIQVIpKDE3NSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ5OiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGRhOiByZXR1cm4oKENIQVIpKDI0MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGRiOiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRjOiBy ZXR1cm4oKENIQVIpKDEzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDIwOiByZXR1cm4oKENI QVIpKDE2MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHhmYjAxOiByZXR1cm4oKENIQVIpKDIyMiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRmOiByZXR1cm4oKENIQVIpKDE2NyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGUwOiByZXR1cm4oKENIQVIpKDEzNiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGUxOiByZXR1cm4oKENIQVIpKDEzNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUy OiByZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUzOiByZXR1cm4o KENIQVIpKDEzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU0OiByZXR1cm4oKENIQVIpKDEz OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU1OiByZXR1cm4oKENIQVIpKDE0MCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGU2OiByZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGU3OiByZXR1cm4oKENIQVIpKDE0MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGU4OiByZXR1cm4oKENIQVIpKDE0MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU5OiByZXR1 cm4oKENIQVIpKDE0MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVhOiByZXR1cm4oKENIQVIp KDE0NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGViOiByZXR1cm4oKENIQVIpKDE0NSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVjOiByZXR1cm4oKENIQVIpKDE0NyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENIQVIpKDE0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGVlOiByZXR1cm4oKENIQVIpKDE0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVmOiBy ZXR1cm4oKENIQVIpKDE0OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDNhOiByZXR1cm4oKENI QVIpKDIyMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYxOiByZXR1cm4oKENIQVIpKDE1MCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYyOiByZXR1cm4oKENIQVIpKDE1MiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpKDE1MSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGY0OiByZXR1cm4oKENIQVIpKDE1MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY1 OiByZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY2OiByZXR1cm4o KENIQVIpKDE1NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY3OiByZXR1cm4oKENIQVIpKDIx NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY4OiByZXR1cm4oKENIQVIpKDE5MSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGY5OiByZXR1cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpKDE1NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGZiOiByZXR1cm4oKENIQVIpKDE1OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZjOiByZXR1 cm4oKENIQVIpKDE1OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDIxOiByZXR1cm4oKENIQVIp KDIyNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHhmYjAyOiByZXR1cm4oKENIQVIpKDIyMyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZmOiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMTMxOiByZXR1cm4oKENIQVIpKDI0NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMTUyOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTUzOiBy ZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTc4OiByZXR1cm4oKENI QVIpKDIxNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTkyOiByZXR1cm4oKENIQVIpKDE5NiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmM2OiByZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMmM3OiByZXR1cm4oKENIQVIpKDI1NSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMmQ4OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmQ5 OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmRhOiByZXR1cm4o KENIQVIpKDI1MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmRiOiByZXR1cm4oKENIQVIpKDI1 NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmRjOiByZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMmRkOiByZXR1cm4oKENIQVIpKDI1MyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwM2MwOiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy MDEzOiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDE0OiByZXR1 cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDE4OiByZXR1cm4oKENIQVIp KDIxMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDE5OiByZXR1cm4oKENIQVIpKDIxMyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFhOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyMDFjOiByZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyMDFkOiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFlOiBy ZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDIyOiByZXR1cm4oKENI QVIpKDE2NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDI2OiByZXR1cm4oKENIQVIpKDIwMSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDMwOiByZXR1cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyMDQ0OiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyMTIyOiByZXR1cm4oKENIQVIpKDE3MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2E5 OiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjAyOiByZXR1cm4o KENIQVIpKDE4MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjA2OiByZXR1cm4oKENIQVIpKDE5 OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjBmOiByZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyMjExOiByZXR1cm4oKENIQVIpKDE4MyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyMjFhOiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy MjFlOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjJiOiByZXR1 cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjQ4OiByZXR1cm4oKENIQVIp KDE5NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjYwOiByZXR1cm4oKENIQVIpKDE3MyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyMjY1OiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNWNhOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHhmOGZmOiBy ZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9wdW5j KGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBIUCBSb21hbi04ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2hwcm9tYW44KFVTSE9SVCBj KQotI2Vsc2UKLXR4X2hwcm9tYW44KGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17Ci0gICAgaWYgKGMgPCAweGEwKQotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwot ICAgIHN3aXRjaChjKSB7Ci0gICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKSgxNjAgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhMTogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBhMjogcmV0dXJuKChDSEFSKSgxNjcgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBhMzogcmV0dXJuKChDSEFSKSgxNjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNDog cmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNTogcmV0dXJuKChD SEFSKSgxODEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKSgxODcg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKSgxODkgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBhOTogcmV0dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBhYTogcmV0dXJuKChDSEFSKSgxNjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBh YjogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhYzogcmV0dXJu KChDSEFSKSgxNjEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhZTogcmV0dXJuKChDSEFSKSgx NzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiMDogcmV0dXJuKChDSEFSKSgxODggJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBiMTogcmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBiMjogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBiMzogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiNDogcmV0 dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiNTogcmV0dXJuKChDSEFS KSgxNjMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiNjogcmV0dXJuKChDSEFSKSgxNzggJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBiODogcmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBiYTogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiYjog cmV0dXJuKChDSEFSKSgxNzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiZDogcmV0dXJuKChD SEFSKSgxNjIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiZjogcmV0dXJuKChDSEFSKSgxNzIg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjMDogcmV0dXJuKChDSEFSKSgxOTMgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFSKSgxOTIgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBjMjogcmV0dXJuKChDSEFSKSgxOTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBj MzogcmV0dXJuKChDSEFSKSgxOTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjNDogcmV0dXJu KChDSEFSKSgxOTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjNTogcmV0dXJuKChDSEFSKSgx OTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjNjogcmV0dXJuKChDSEFSKSgxOTggJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBjNzogcmV0dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBjODogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBjOTogcmV0dXJuKChDSEFSKSgyMDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjYTogcmV0 dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjYjogcmV0dXJuKChDSEFS KSgyMDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjYzogcmV0dXJuKChDSEFSKSgyMDUgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjZDogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBjZTogcmV0dXJuKChDSEFSKSgyMDYgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBjZjogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkMTog cmV0dXJuKChDSEFSKSgyMDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkMjogcmV0dXJuKChD SEFSKSgyMTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkMzogcmV0dXJuKChDSEFSKSgyMDkg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkNDogcmV0dXJuKChDSEFSKSgyMTEgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBkNTogcmV0dXJuKChDSEFSKSgyMTMgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBkNjogcmV0dXJuKChDSEFSKSgyMTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBk ODogcmV0dXJuKChDSEFSKSgyMTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkOTogcmV0dXJu KChDSEFSKSgyMTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkYTogcmV0dXJuKChDSEFSKSgy MTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkYjogcmV0dXJuKChDSEFSKSgyMTggJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBkYzogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBkZjogcmV0dXJuKChDSEFSKSgyNTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBlMDogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlMTogcmV0 dXJuKChDSEFSKSgyMjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFS KSgyMjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlMzogcmV0dXJuKChDSEFSKSgyMjggJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlNDogcmV0dXJuKChDSEFSKSgyMjcgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBlNTogcmV0dXJuKChDSEFSKSgyMjkgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBlNjogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlNzog cmV0dXJuKChDSEFSKSgyMzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlODogcmV0dXJuKChD SEFSKSgyMzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlOTogcmV0dXJuKChDSEFSKSgyMzIg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlYTogcmV0dXJuKChDSEFSKSgyMzQgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBlYjogcmV0dXJuKChDSEFSKSgyMzUgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBlYzogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBl ZDogcmV0dXJuKChDSEFSKSgyMzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlZTogcmV0dXJu KChDSEFSKSgyMzggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlZjogcmV0dXJuKChDSEFSKSgy MzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmMTogcmV0dXJuKChDSEFSKSgyNDAgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBmMjogcmV0dXJuKChDSEFSKSgyNDIgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKSgyNDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBmNDogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmNTogcmV0 dXJuKChDSEFSKSgyNDUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmNjogcmV0dXJuKChDSEFS KSgyNDQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmODogcmV0dXJuKChDSEFSKSgyNDYgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmOTogcmV0dXJuKChDSEFSKSgyNDkgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBmYjogcmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmYzog cmV0dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmZjogcmV0dXJuKChD SEFSKSgyNTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE1MzogcmV0dXJuKChDSEFSKSgyNDcg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE3ODogcmV0dXJuKChDSEFSKSgyMjEgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDE5MjogcmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDI3NjogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAy MTogcmV0dXJuKChDSEFSKSgxNzUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjEyMjogcmV0dXJu KChDSEFSKSgxNzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjE5MTogcmV0dXJuKChDSEFSKSgx OTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjI2NDogcmV0dXJuKChDSEFSKSgxODMgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjI2NTogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjU4ODogcmV0dXJuKChDSEFSKSgyNTUgJiAweGZmKSk7Ci0gICAgICBkZWZhdWx0 OiByZXR1cm4odHhfcHVuYyhjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogUEMgQ29kZSBQYWdlIDQzNyAqLwotI2lmZGVmIENLX0FOU0lD Ci10eF9jcDQzNyhVU0hPUlQgYykKLSNlbHNlCi10eF9jcDQzNyhjKSBVU0hPUlQgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHg4MCkgICAgICAgICAgICAgICAgICAg ICAgIC8qIEhhcyBDMSBncmFwaGljcyAqLwotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikp OwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikoMjU1 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTE6IHJldHVybigoQ0hBUikoMTczICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYTI6IHJldHVybigoQ0hBUikoMTU1ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYTM6IHJldHVybigoQ0hBUikoMTU2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YTQ6IHJldHVybigoQ0hBUikoMTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNTogcmV0dXJu KChDSEFSKSgxNTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNjogcmV0dXJuKChDSEFSKSgx MjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKSgyMSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpKDM0ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYTk6IHJldHVybigoQ0hBUikoNjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBh YTogcmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhYjogcmV0dXJu KChDSEFSKSgxNzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhYzogcmV0dXJuKChDSEFSKSgx NzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhZDogcmV0dXJuKChDSEFSKSg0NSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGFlOiByZXR1cm4oKENIQVIpKDg0ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYWY6IHJldHVybigoQ0hBUikoMjIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBi MDogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiMTogcmV0dXJu KChDSEFSKSgyNDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiMjogcmV0dXJuKChDSEFSKSgy NTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiMzogcmV0dXJuKChDSEFSKSg1MSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGI0OiByZXR1cm4oKENIQVIpKDM5ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYjU6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YjY6IHJldHVybigoQ0hBUikoMjAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiNzogcmV0dXJu KChDSEFSKSgyNTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiODogcmV0dXJuKChDSEFSKSg0 NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI5OiByZXR1cm4oKENIQVIpKDQ5ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYmE6IHJldHVybigoQ0hBUikoMTY3ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYmI6IHJldHVybigoQ0hBUikoMTc1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YmM6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmQ6IHJldHVy bigoQ0hBUikoMTcxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmU6IHJldHVybigoQ0hBUiko MTkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiZjogcmV0dXJuKChDSEFSKSgxNjggJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBjMDogcmV0dXJuKChDSEFSKSg2NSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGMxOiByZXR1cm4oKENIQVIpKDY1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YzI6IHJldHVybigoQ0hBUikoNjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjMzogcmV0dXJu KChDSEFSKSg2NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM0OiByZXR1cm4oKENIQVIpKDE0 MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM1OiByZXR1cm4oKENIQVIpKDE0MyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGM2OiByZXR1cm4oKENIQVIpKDE0NiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGM3OiByZXR1cm4oKENIQVIpKDEyOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGM4OiByZXR1cm4oKENIQVIpKDY5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzk6IHJldHVy bigoQ0hBUikoMTQ0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2E6IHJldHVybigoQ0hBUiko NjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjYjogcmV0dXJuKChDSEFSKSg2OSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGNjOiByZXR1cm4oKENIQVIpKDczICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwY2Q6IHJldHVybigoQ0hBUikoNzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBj ZTogcmV0dXJuKChDSEFSKSg3MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNmOiByZXR1cm4o KENIQVIpKDczICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDA6IHJldHVybigoQ0hBUikoMTkg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkMTogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBkMjogcmV0dXJuKChDSEFSKSg3OSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGQzOiByZXR1cm4oKENIQVIpKDc5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDQ6 IHJldHVybigoQ0hBUikoNzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkNTogcmV0dXJuKChD SEFSKSg3OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ2OiByZXR1cm4oKENIQVIpKDE1MyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ3OiByZXR1cm4oKENIQVIpKDEyMCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGQ4OiByZXR1cm4oKENIQVIpKDc5ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZDk6IHJldHVybigoQ0hBUikoODUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkYTog cmV0dXJuKChDSEFSKSg4NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRiOiByZXR1cm4oKENI QVIpKDg1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGM6IHJldHVybigoQ0hBUikoMTU0ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZGQ6IHJldHVybigoQ0hBUikoODkgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBkZTogcmV0dXJuKChDSEFSKSgxOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGRmOiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUwOiBy ZXR1cm4oKENIQVIpKDEzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUxOiByZXR1cm4oKENI QVIpKDE2MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIpKDEzMSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUzOiByZXR1cm4oKENIQVIpKDk3ICYgMHhmZikpOyAv KiBhLXRpbGRlIC0+IGEgKG5vdCAxMDEgPSBlKSAqLwotICAgICAgY2FzZSAweDAwZTQ6IHJldHVy bigoQ0hBUikoMTMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTU6IHJldHVybigoQ0hBUiko MTM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTY6IHJldHVybigoQ0hBUikoMTQ1ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZTc6IHJldHVybigoQ0hBUikoMTM1ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZTg6IHJldHVybigoQ0hBUikoMTM4ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZTk6IHJldHVybigoQ0hBUikoMTMwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWE6IHJl dHVybigoQ0hBUikoMTM2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWI6IHJldHVybigoQ0hB UikoMTM3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWM6IHJldHVybigoQ0hBUikoMTQxICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZWQ6IHJldHVybigoQ0hBUikoMTYxICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwZWU6IHJldHVybigoQ0hBUikoMTQwICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZWY6IHJldHVybigoQ0hBUikoMTM5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjA6 IHJldHVybigoQ0hBUikoMTkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmMTogcmV0dXJuKChD SEFSKSgxNjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmMjogcmV0dXJuKChDSEFSKSgxNDkg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKSgxNjIgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKSgxNDcgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBmNTogcmV0dXJuKChDSEFSKSgxMTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBm NjogcmV0dXJuKChDSEFSKSgxNDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmNzogcmV0dXJu KChDSEFSKSgyNDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmODogcmV0dXJuKChDSEFSKSgx MTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmOTogcmV0dXJuKChDSEFSKSgxNTEgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKSgxNjMgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKSgxNTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBmYzogcmV0dXJuKChDSEFSKSgxMjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmZDogcmV0 dXJuKChDSEFSKSgxMjEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmZTogcmV0dXJuKChDSEFS KSgxOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZmOiByZXR1cm4oKENIQVIpKDE1MiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTkyOiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMzkzOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMzk4OiByZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2EzOiBy ZXR1cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2E2OiByZXR1cm4oKENI QVIpKDIzMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2E5OiByZXR1cm4oKENIQVIpKDIzNCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2IxOiByZXR1cm4oKENIQVIpKDIyNCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwM2I0OiByZXR1cm4oKENIQVIpKDIzNSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwM2I1OiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2Mw OiByZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2MzOiByZXR1cm4o KENIQVIpKDIyOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2M0OiByZXR1cm4oKENIQVIpKDIz MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2M2OiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyMDdmOiByZXR1cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyMGE3OiByZXR1cm4oKENIQVIpKDE1OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy MjE5OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjFhOiByZXR1 cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjFlOiByZXR1cm4oKENIQVIp KDIzNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjI5OiByZXR1cm4oKENIQVIpKDIzOSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjQ4OiByZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyMjYxOiByZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyMjY0OiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjY1OiBy ZXR1cm4oKENIQVIpKDI0MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMzEwOiByZXR1cm4oKENI QVIpKDE2OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMzIwOiByZXR1cm4oKENIQVIpKDI0NCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMzIxOiByZXR1cm4oKENIQVIpKDI0NSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTAwOiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTAyOiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTBj OiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4o KENIQVIpKDE5MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENIQVIpKDE5 MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTFjOiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTI0OiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTJjOiByZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTM0OiByZXR1 cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTNjOiByZXR1cm4oKENIQVIp KDE5NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUwOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUxOiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyNTUyOiByZXR1cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNTUzOiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU0OiBy ZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU1OiByZXR1cm4oKENI QVIpKDE4NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU2OiByZXR1cm4oKENIQVIpKDE4MyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU3OiByZXR1cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTU4OiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTU5OiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVh OiByZXR1cm4oKENIQVIpKDIwMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTViOiByZXR1cm4o KENIQVIpKDE5MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVjOiByZXR1cm4oKENIQVIpKDE4 OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVkOiByZXR1cm4oKENIQVIpKDE4OCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTVlOiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTVmOiByZXR1cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTYwOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTYxOiByZXR1 cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTYyOiByZXR1cm4oKENIQVIp KDE4MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTYzOiByZXR1cm4oKENIQVIpKDE4NSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY0OiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyNTY1OiByZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNTY2OiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY3OiBy ZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY4OiByZXR1cm4oKENI QVIpKDIwOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY5OiByZXR1cm4oKENIQVIpKDIwMiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTZhOiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTZiOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTZjOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTgw OiByZXR1cm4oKENIQVIpKDIyMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTg0OiByZXR1cm4o KENIQVIpKDIyMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oKENIQVIpKDIx OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNThjOiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTkwOiByZXR1cm4oKENIQVIpKDIyMiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTkxOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTkyOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTkzOiByZXR1 cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNWEwOiByZXR1cm4oKENIQVIp KDI1NCAmIDB4ZmYpKTsgLyogQmxhY2sgc3F1YXJlICovCi0gICAgICBkZWZhdWx0OiByZXR1cm4o dHhfY3BzdWIoYykpOyAgICAgLyogRm9yIGJveCBjaGFyYWN0ZXJzIGV0YyAqLwotICAgIH0KLX0K LQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hem92aWEgKi8K LSNpZmRlZiBDS19BTlNJQwotdHhfbWF6b3ZpYShVU0hPUlQgYykKLSNlbHNlCi10eF9tYXpvdmlh KGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweDgw KSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICovCi0gICAgICByZXR1 cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDB4MDBk MzogcmV0dXJuKChDSEFSKTB4YTMgJiAweGZmKTsgICAvKiBPIGFjdXRlICovCi0gICAgICBjYXNl IDB4MDBmMzogcmV0dXJuKChDSEFSKTB4YTIgJiAweGZmKTsgICAvKiBPIGFjdXRlICovCi0gICAg ICBjYXNlIDB4MDEwNDogcmV0dXJuKChDSEFSKTB4OGYgJiAweGZmKTsgICAvKiBBIE9nb25layAq LwotICAgICAgY2FzZSAweDAxMDU6IHJldHVybigoQ0hBUikweDg2ICYgMHhmZik7ICAgLyogYSBP Z29uZWsgKi8KLSAgICAgIGNhc2UgMHgwMTA2OiByZXR1cm4oKENIQVIpMHg5NSAmIDB4ZmYpOyAg IC8qIEMgYWN1dGUgKi8KLSAgICAgIGNhc2UgMHgwMTA3OiByZXR1cm4oKENIQVIpMHg4ZCAmIDB4 ZmYpOyAgIC8qIGMgYWN1dGUgKi8KLSAgICAgIGNhc2UgMHgwMTE4OiByZXR1cm4oKENIQVIpMHg5 MCAmIDB4ZmYpOyAgIC8qIEUgT2dvbmVrICovCi0gICAgICBjYXNlIDB4MDExOTogcmV0dXJuKChD SEFSKTB4OTEgJiAweGZmKTsgICAvKiBFIE9nb25layAqLwotICAgICAgY2FzZSAweDAxNDE6IHJl dHVybigoQ0hBUikweDljICYgMHhmZik7ICAgLyogTCBzdHJva2UgKi8KLSAgICAgIGNhc2UgMHgw MTQyOiByZXR1cm4oKENIQVIpMHg5MiAmIDB4ZmYpOyAgIC8qIEwgc3Ryb2tlICovCi0gICAgICBj YXNlIDB4MDE0MzogcmV0dXJuKChDSEFSKTB4YTUgJiAweGZmKTsgICAvKiBOIGFjdXRlICovCi0g ICAgICBjYXNlIDB4MDE0NDogcmV0dXJuKChDSEFSKTB4YTQgJiAweGZmKTsgICAvKiBOIGFjdXRl ICovCi0gICAgICBjYXNlIDB4MDE1YTogcmV0dXJuKChDSEFSKTB4OTggJiAweGZmKTsgICAvKiBT IGFjdXRlICovCi0gICAgICBjYXNlIDB4MDE1YjogcmV0dXJuKChDSEFSKTB4OWUgJiAweGZmKTsg ICAvKiBTIGFjdXRlICovCi0gICAgICBjYXNlIDB4MDE3OTogcmV0dXJuKChDSEFSKTB4YTAgJiAw eGZmKTsgICAvKiBaIGFjdXRlICovCi0gICAgICBjYXNlIDB4MDE3YTogcmV0dXJuKChDSEFSKTB4 YTYgJiAweGZmKTsgICAvKiBaIGFjdXRlICovCi0gICAgICBjYXNlIDB4MDE3YjogcmV0dXJuKChD SEFSKTB4YTEgJiAweGZmKTsgICAvKiBaIGRvdCBhYm92ZSAqLwotICAgICAgY2FzZSAweDAxN2M6 IHJldHVybigoQ0hBUikweGE3ICYgMHhmZik7ICAgLyogWiBkb3QgYWJvdmUgKi8KLSAgICAgIGRl ZmF1bHQ6IHJldHVybih0eF9jcDQzNyhjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUEMgQ29kZSBQYWdlIDg1MCAqLwotI2lmZGVmIENL X0FOU0lDCi10eF9jcDg1MChVU0hPUlQgYykKLSNlbHNlCi10eF9jcDg1MChjKSBVU0hPUlQgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHg4MCkgICAgICAgICAgICAg ICAgICAgICAgIC8qIEhhcyBDMSBncmFwaGljcyAqLwotICAgICAgcmV0dXJuKChDSEFSKShjICYg MHhmZikpOwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hB UikoMjU1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTE6IHJldHVybigoQ0hBUikoMTczICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYTI6IHJldHVybigoQ0hBUikoMTg5ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwYTM6IHJldHVybigoQ0hBUikoMTU2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwYTQ6IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTU6 IHJldHVybigoQ0hBUikoMTkwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTY6IHJldHVybigo Q0hBUikoMjIxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTc6IHJldHVybigoQ0hBUikoMjQ1 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikoMjQ5ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYTk6IHJldHVybigoQ0hBUikoMTg0ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYWE6IHJldHVybigoQ0hBUikoMTY2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YWI6IHJldHVybigoQ0hBUikoMTc0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWM6IHJldHVy bigoQ0hBUikoMTcwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWQ6IHJldHVybigoQ0hBUiko MjQwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWU6IHJldHVybigoQ0hBUikoMTY5ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYWY6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYjA6IHJldHVybigoQ0hBUikoMjQ4ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwYjE6IHJldHVybigoQ0hBUikoMjQxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjI6IHJl dHVybigoQ0hBUikoMjUzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjM6IHJldHVybigoQ0hB UikoMjUyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjQ6IHJldHVybigoQ0hBUikoMjM5ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYjU6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwYjY6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwYjc6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjg6 IHJldHVybigoQ0hBUikoMjQ3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjk6IHJldHVybigo Q0hBUikoMjUxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmE6IHJldHVybigoQ0hBUikoMTY3 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmI6IHJldHVybigoQ0hBUikoMTc1ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYmM6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYmQ6IHJldHVybigoQ0hBUikoMTcxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YmU6IHJldHVybigoQ0hBUikoMjQzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmY6IHJldHVy bigoQ0hBUikoMTY4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzA6IHJldHVybigoQ0hBUiko MTgzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzE6IHJldHVybigoQ0hBUikoMTgxICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYzI6IHJldHVybigoQ0hBUikoMTgyICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYzM6IHJldHVybigoQ0hBUikoMTk5ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwYzQ6IHJldHVybigoQ0hBUikoMTQyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzU6IHJl dHVybigoQ0hBUikoMTQzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzY6IHJldHVybigoQ0hB UikoMTQ2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzc6IHJldHVybigoQ0hBUikoMTI4ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYzg6IHJldHVybigoQ0hBUikoMjEyICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwYzk6IHJldHVybigoQ0hBUikoMTQ0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwY2E6IHJldHVybigoQ0hBUikoMjEwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2I6 IHJldHVybigoQ0hBUikoMjExICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2M6IHJldHVybigo Q0hBUikoMjIyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2Q6IHJldHVybigoQ0hBUikoMjE0 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2U6IHJldHVybigoQ0hBUikoMjE1ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwY2Y6IHJldHVybigoQ0hBUikoMjE2ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwZDA6IHJldHVybigoQ0hBUikoMjA5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw ZDE6IHJldHVybigoQ0hBUikoMTY1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDI6IHJldHVy bigoQ0hBUikoMjI3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDM6IHJldHVybigoQ0hBUiko MjI0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDQ6IHJldHVybigoQ0hBUikoMjI2ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZDU6IHJldHVybigoQ0hBUikoMjI5ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZDY6IHJldHVybigoQ0hBUikoMTUzICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZDc6IHJldHVybigoQ0hBUikoMTU4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDg6IHJl dHVybigoQ0hBUikoMTU3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDk6IHJldHVybigoQ0hB UikoMjM1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGE6IHJldHVybigoQ0hBUikoMjMzICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZGI6IHJldHVybigoQ0hBUikoMjM0ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwZGM6IHJldHVybigoQ0hBUikoMTU0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZGQ6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGU6 IHJldHVybigoQ0hBUikoMjMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGY6IHJldHVybigo Q0hBUikoMjI1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTA6IHJldHVybigoQ0hBUikoMTMz ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTE6IHJldHVybigoQ0hBUikoMTYwICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwZTI6IHJldHVybigoQ0hBUikoMTMxICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwZTM6IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw ZTQ6IHJldHVybigoQ0hBUikoMTMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTU6IHJldHVy bigoQ0hBUikoMTM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTY6IHJldHVybigoQ0hBUiko MTQ1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTc6IHJldHVybigoQ0hBUikoMTM1ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZTg6IHJldHVybigoQ0hBUikoMTM4ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZTk6IHJldHVybigoQ0hBUikoMTMwICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZWE6IHJldHVybigoQ0hBUikoMTM2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWI6IHJl dHVybigoQ0hBUikoMTM3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWM6IHJldHVybigoQ0hB UikoMTQxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWQ6IHJldHVybigoQ0hBUikoMTYxICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZWU6IHJldHVybigoQ0hBUikoMTQwICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwZWY6IHJldHVybigoQ0hBUikoMTM5ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZjA6IHJldHVybigoQ0hBUikoMjA4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjE6 IHJldHVybigoQ0hBUikoMTY0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjI6IHJldHVybigo Q0hBUikoMTQ5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjM6IHJldHVybigoQ0hBUikoMTYy ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjQ6IHJldHVybigoQ0hBUikoMTQ3ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwZjU6IHJldHVybigoQ0hBUikoMjI4ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwZjY6IHJldHVybigoQ0hBUikoMTQ4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw Zjc6IHJldHVybigoQ0hBUikoMjQ2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjg6IHJldHVy bigoQ0hBUikoMTU1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjk6IHJldHVybigoQ0hBUiko MTUxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmE6IHJldHVybigoQ0hBUikoMTYzICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZmI6IHJldHVybigoQ0hBUikoMTUwICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZmM6IHJldHVybigoQ0hBUikoMTI5ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZmQ6IHJldHVybigoQ0hBUikoMjM2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmU6IHJl dHVybigoQ0hBUikoMjMxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmY6IHJldHVybigoQ0hB UikoMTUyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxMzE6IHJldHVybigoQ0hBUikoMjEzICYg MHhmZikpOwotICAgICAgY2FzZSAweDAxOTI6IHJldHVybigoQ0hBUikoMTU5ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDIwMTc6IHJldHVybigoQ0hBUikoMjQyICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1MDA6IHJldHVybigoQ0hBUikoMTk2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MDI6 IHJldHVybigoQ0hBUikoMTc5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MGM6IHJldHVybigo Q0hBUikoMjE4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hBUikoMTkx ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikoMTkyICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1MTg6IHJldHVybigoQ0hBUikoMjE3ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1MWM6IHJldHVybigoQ0hBUikoMTk1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 MjQ6IHJldHVybigoQ0hBUikoMTgwICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MmM6IHJldHVy bigoQ0hBUikoMTk0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigoQ0hBUiko MTkzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1M2M6IHJldHVybigoQ0hBUikoMTk3ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDI1NTA6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDI1NTE6IHJldHVybigoQ0hBUikoMTg2ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1NTQ6IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTc6IHJl dHVybigoQ0hBUikoMTg3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NWE6IHJldHVybigoQ0hB UikoMjAwICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NWQ6IHJldHVybigoQ0hBUikoMTg4ICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1NjA6IHJldHVybigoQ0hBUikoMjA0ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDI1NjM6IHJldHVybigoQ0hBUikoMTg1ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1NjY6IHJldHVybigoQ0hBUikoMjAzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1Njk6 IHJldHVybigoQ0hBUikoMjAyICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NmM6IHJldHVybigo Q0hBUikoMjA2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1ODA6IHJldHVybigoQ0hBUikoMjIz ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1ODQ6IHJldHVybigoQ0hBUikoMjIwICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1ODg6IHJldHVybigoQ0hBUikoMjE5ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1OTE6IHJldHVybigoQ0hBUikoMTc2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 OTI6IHJldHVybigoQ0hBUikoMTc3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OTM6IHJldHVy bigoQ0hBUikoMTc4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1YTA6IHJldHVybigoQ0hBUiko MjU0ICYgMHhmZikpOwotICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X2Nwc3ViKGMpKTsgICAgIC8q IEZvciBib3ggY2hhcmFjdGVycyBldGMgKi8KLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBQQyBDb2RlIFBhZ2UgODU4ICovCi0jaWZkZWYgQ0tf QU5TSUMKLXR4X2NwODU4KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2NwODU4KGMpIFVTSE9SVCBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAgICAg ICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICovCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAw eGZmKSk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFS KSgyNTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhMTogcmV0dXJuKChDSEFSKSgxNzMgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhMjogcmV0dXJuKChDSEFSKSgxODkgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBhMzogcmV0dXJuKChDSEFSKSgxNTYgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBhNDogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNTog cmV0dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNjogcmV0dXJuKChD SEFSKSgyMjEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKSgyNDUg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKSgyNDkgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBhOTogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBhYTogcmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBh YjogcmV0dXJuKChDSEFSKSgxNzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhYzogcmV0dXJu KChDSEFSKSgxNzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhZDogcmV0dXJuKChDSEFSKSgy NDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhZTogcmV0dXJuKChDSEFSKSgxNjkgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBhZjogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBiMDogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBiMTogcmV0dXJuKChDSEFSKSgyNDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiMjogcmV0 dXJuKChDSEFSKSgyNTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiMzogcmV0dXJuKChDSEFS KSgyNTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiNDogcmV0dXJuKChDSEFSKSgyMzkgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiNTogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBiNjogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBiNzogcmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiODog cmV0dXJuKChDSEFSKSgyNDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiOTogcmV0dXJuKChD SEFSKSgyNTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiYTogcmV0dXJuKChDSEFSKSgxNjcg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKSgxNzUgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBiYzogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBiZDogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBi ZTogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiZjogcmV0dXJu KChDSEFSKSgxNjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjMDogcmV0dXJuKChDSEFSKSgx ODMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFSKSgxODEgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBjMjogcmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBjMzogcmV0dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBjNDogcmV0dXJuKChDSEFSKSgxNDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjNTogcmV0 dXJuKChDSEFSKSgxNDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjNjogcmV0dXJuKChDSEFS KSgxNDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjNzogcmV0dXJuKChDSEFSKSgxMjggJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjODogcmV0dXJuKChDSEFSKSgyMTIgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBjOTogcmV0dXJuKChDSEFSKSgxNDQgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBjYTogcmV0dXJuKChDSEFSKSgyMTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjYjog cmV0dXJuKChDSEFSKSgyMTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjYzogcmV0dXJuKChD SEFSKSgyMjIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjZDogcmV0dXJuKChDSEFSKSgyMTQg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjZTogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBjZjogcmV0dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBkMDogcmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBk MTogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkMjogcmV0dXJu KChDSEFSKSgyMjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkMzogcmV0dXJuKChDSEFSKSgy MjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkNDogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBkNTogcmV0dXJuKChDSEFSKSgyMjkgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBkNjogcmV0dXJuKChDSEFSKSgxNTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBkNzogcmV0dXJuKChDSEFSKSgxNTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkODogcmV0 dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkOTogcmV0dXJuKChDSEFS KSgyMzUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkYTogcmV0dXJuKChDSEFSKSgyMzMgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkYjogcmV0dXJuKChDSEFSKSgyMzQgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBkYzogcmV0dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBkZDogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkZTog cmV0dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkZjogcmV0dXJuKChD SEFSKSgyMjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlMDogcmV0dXJuKChDSEFSKSgxMzMg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlMTogcmV0dXJuKChDSEFSKSgxNjAgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFSKSgxMzEgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBlMzogcmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBl NDogcmV0dXJuKChDSEFSKSgxMzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlNTogcmV0dXJu KChDSEFSKSgxMzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlNjogcmV0dXJuKChDSEFSKSgx NDUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFSKSgxMzUgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBlODogcmV0dXJuKChDSEFSKSgxMzggJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBlOTogcmV0dXJuKChDSEFSKSgxMzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBlYTogcmV0dXJuKChDSEFSKSgxMzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlYjogcmV0 dXJuKChDSEFSKSgxMzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlYzogcmV0dXJuKChDSEFS KSgxNDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlZDogcmV0dXJuKChDSEFSKSgxNjEgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlZTogcmV0dXJuKChDSEFSKSgxNDAgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBlZjogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBmMDogcmV0dXJuKChDSEFSKSgyMDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmMTog cmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmMjogcmV0dXJuKChD SEFSKSgxNDkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKSgxNjIg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKSgxNDcgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBmNTogcmV0dXJuKChDSEFSKSgyMjggJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBmNjogcmV0dXJuKChDSEFSKSgxNDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBm NzogcmV0dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmODogcmV0dXJu KChDSEFSKSgxNTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmOTogcmV0dXJuKChDSEFSKSgx NTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKSgxNjMgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKSgxNTAgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBmYzogcmV0dXJuKChDSEFSKSgxMjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBmZDogcmV0dXJuKChDSEFSKSgyMzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmZTogcmV0 dXJuKChDSEFSKSgyMzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmZjogcmV0dXJuKChDSEFS KSgxNTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjBhYzogcmV0dXJuKChDSEFSKSgyMTMgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDE5MjogcmV0dXJuKChDSEFSKSgxNTkgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjAxNzogcmV0dXJuKChDSEFSKSgyNDIgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjUwMDogcmV0dXJuKChDSEFSKSgxOTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUwMjog cmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUwYzogcmV0dXJuKChD SEFSKSgyMTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFSKSgxOTEg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKSgxOTIgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjUxODogcmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjUxYzogcmV0dXJuKChDSEFSKSgxOTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUy NDogcmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUyYzogcmV0dXJu KChDSEFSKSgxOTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUzNDogcmV0dXJuKChDSEFSKSgx OTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChDSEFSKSgxOTcgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjU1MDogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjU1MTogcmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjU1NDogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1NzogcmV0 dXJuKChDSEFSKSgxODcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1YTogcmV0dXJuKChDSEFS KSgyMDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1ZDogcmV0dXJuKChDSEFSKSgxODggJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2MDogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjU2MzogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjU2NjogcmV0dXJuKChDSEFSKSgyMDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2OTog cmV0dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2YzogcmV0dXJuKChD SEFSKSgyMDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4MDogcmV0dXJuKChDSEFSKSgyMjMg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4NDogcmV0dXJuKChDSEFSKSgyMjAgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjU4ODogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjU5MTogcmV0dXJuKChDSEFSKSgxNzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5 MjogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5MzogcmV0dXJu KChDSEFSKSgxNzggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjVhMDogcmV0dXJuKChDSEFSKSgy NTQgJiAweGZmKSk7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4odHhfY3BzdWIoYykpOyAgICAgLyog Rm9yIGJveCBjaGFyYWN0ZXJzIGV0YyAqLwotICAgIH0KLX0KLQotaW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvd3MgQ29kZSBQYWdlIDEyNTAgKExhdGluLTIp ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2NwMTI1MChVU0hPUlQgYykKLSNlbHNlCi10eF9jcDEy NTAoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4 ODAgfHwgKGMgPiAweGJmICYmIGMgPD0gMHhmZikpIC8qIEhhcyBDMSBncmFwaGljcyAqLwotICAg ICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2Fz ZSAweDAwMkQ6IHJldHVybigoQ0hBUikoMHhhZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEEw OiByZXR1cm4oKENIQVIpKDB4YTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBNDogcmV0dXJu KChDSEFSKSgweGE0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQTY6IHJldHVybigoQ0hBUiko MHhhNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEE3OiByZXR1cm4oKENIQVIpKDB4YTcgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBODogcmV0dXJuKChDSEFSKSgweGE4ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwQTk6IHJldHVybigoQ0hBUikoMHhhOSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMEFCOiByZXR1cm4oKENIQVIpKDB4YWIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBB QzogcmV0dXJuKChDSEFSKSgweGFjICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQUU6IHJldHVy bigoQ0hBUikoMHhhZSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEIwOiByZXR1cm4oKENIQVIp KDB4YjAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCMTogcmV0dXJuKChDSEFSKSgweGIxICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwQjQ6IHJldHVybigoQ0hBUikoMHhiNCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMEI1OiByZXR1cm4oKENIQVIpKDB4YjUgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBCNjogcmV0dXJuKChDSEFSKSgweGI2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw Qjc6IHJldHVybigoQ0hBUikoMHhiNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEI4OiByZXR1 cm4oKENIQVIpKDB4YjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCQjogcmV0dXJuKChDSEFS KSgweGJiICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxMDQ6IHJldHVybigoQ0hBUikoMHhhNSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTA1OiByZXR1cm4oKENIQVIpKDB4YjkgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDEzRDogcmV0dXJuKChDSEFSKSgweGJjICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAxM0U6IHJldHVybigoQ0hBUikoMHhiZSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MTQxOiByZXR1cm4oKENIQVIpKDB4YTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE0MjogcmV0 dXJuKChDSEFSKSgweGIzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNUE6IHJldHVybigoQ0hB UikoMHg4YyAmIDB4ZmYpKTsgLyogUyBhY3V0ZSAqLwotICAgICAgY2FzZSAweDAxNUU6IHJldHVy bigoQ0hBUikoMHhhYSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTVGOiByZXR1cm4oKENIQVIp KDB4YmEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE1YjogcmV0dXJuKChDSEFSKSgweDljICYg MHhmZikpOyAvKiBzIGFjdXRlICovCi0gICAgICBjYXNlIDB4MDE2NDogcmV0dXJuKChDSEFSKSgw eDhkICYgMHhmZikpOyAvKiBUIGNhcm9uICovCi0gICAgICBjYXNlIDB4MDE2NTogcmV0dXJuKChD SEFSKSgweDlkICYgMHhmZikpOyAvKiB0IGNhcm9uICovCi0gICAgICBjYXNlIDB4MDE3MzogcmV0 dXJuKChDSEFSKSgweDllICYgMHhmZikpOyAvKiB6IGNhcm9uICovCi0gICAgICBjYXNlIDB4MDE3 OTogcmV0dXJuKChDSEFSKSgweDhmICYgMHhmZikpOyAvKiBaIGFjdXRlICovCi0gICAgICBjYXNl IDB4MDE3QTogcmV0dXJuKChDSEFSKSgweDlmICYgMHhmZikpOyAvKiB6IGFjdXRlICovCi0gICAg ICBjYXNlIDB4MDE3QjogcmV0dXJuKChDSEFSKSgweGFmICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAxN0M6IHJldHVybigoQ0hBUikoMHhiZiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTdEOiBy ZXR1cm4oKENIQVIpKDB4OGUgJiAweGZmKSk7IC8qIFogY2Fyb24gKi8KLSAgICAgIGNhc2UgMHgw MkM3OiByZXR1cm4oKENIQVIpKDB4YTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDJEODogcmV0 dXJuKChDSEFSKSgweGEyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyREI6IHJldHVybigoQ0hB UikoMHhiMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMkREOiByZXR1cm4oKENIQVIpKDB4YmQg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAxMDogY2FzZSAweDIwMTE6ICAgICAgICAgLyogSHlw aGVucyAqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4MmQgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjAxMjogY2FzZSAweDIwMTM6ICAgICAgICAgLyogZW4tZGFzaGVzICovCi0gICAgICAgIHJl dHVybigoQ0hBUikoMHg5NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDE0OiBjYXNlIDB4MjAx NTogICAgICAgICAvKiBlbS1kYXNoZXMgKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDk3ICYg MHhmZikpOwotICAgICAgY2FzZSAweDIwMTg6ICAgICAgICAgICAgICAgICAgICAgIC8qIFZhcmlv dXMgcXVvdGF0aW9uIG1hcmtzLi4uICovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHg5MSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDE5OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTIgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjAxYzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDkzICYg MHhmZikpOwotICAgICAgY2FzZSAweDIwMWQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5NCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFlOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4ODQg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAyMDogICAgICAgICAgICAgICAgICAgICAgLyogRGFn Z2VyICovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHg4NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyMDIxOiAgICAgICAgICAgICAgICAgICAgICAvKiBEb3VibGUgRGFnZ2VyICovCi0gICAgICAg IHJldHVybigoQ0hBUikoMHg4NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDIyOiAgICAgICAg ICAgICAgICAgICAgICAvKiBCdWxsZXQgKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDk1ICYg MHhmZikpOwotICAgICAgY2FzZSAweDIwMjY6ICAgICAgICAgICAgICAgICAgICAgIC8qIEVsbGlw c2lzICovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHg4NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyMDMwOiAgICAgICAgICAgICAgICAgICAgICAvKiBQZXIgbWlsICovCi0gICAgICAgIHJldHVy bigoQ0hBUikoMHg4OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMEFDOiAgICAgICAgICAgICAg ICAgICAgICAvKiBFdXJvICovCi0gICAgICAgICAgcmV0dXJuKChDSEFSKSgweDgwICYgMHhmZikp OwotICAgICAgY2FzZSAweDIxMjI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYWRlIE1hcmsg Ki8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDk5ICYgMHhmZikpOwotICAgICAgZGVmYXVsdDog cmV0dXJuKDB4MDAzZik7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogV2luZG93cyBDb2RlIFBhZ2UgMTI1MSAoQ3lyaWxsaWMpICovCi0jaWZk ZWYgQ0tfQU5TSUMKLXR4X2NwMTI1MShVU0hPUlQgYykKLSNlbHNlCi10eF9jcDEyNTEoYykgVVNI T1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4ODApICAgICAg ICAgICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8KLSAgICAgIHJldHVybigoQ0hB UikoYyAmIDB4ZmYpKTsKLSAgICAvKiBUaGlzIGlzIHNpbXBseSB0aGUgaW52ZXJzZSBvZiB1X2Nw MTI1MS5tYXAgKi8KLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHgwMDNjOiByZXR1cm4o KENIQVIpKDB4OGIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDAzZTogcmV0dXJuKChDSEFSKSgw eDliICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwN2U6IHJldHVybigoQ0hBUikoMHg5OCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEEwOiByZXR1cm4oKENIQVIpKDB4YTAgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBBNDogcmV0dXJuKChDSEFSKSgweGE0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwQTY6IHJldHVybigoQ0hBUikoMHhhNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEE3 OiByZXR1cm4oKENIQVIpKDB4YTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBOTogcmV0dXJu KChDSEFSKSgweGE5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQUI6IHJldHVybigoQ0hBUiko MHhhYiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEFDOiByZXR1cm4oKENIQVIpKDB4YWMgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBRDogcmV0dXJuKChDSEFSKSgweGFkICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwQUU6IHJldHVybigoQ0hBUikoMHhhZSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGIwOiByZXR1cm4oKENIQVIpKDB4YjAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBi MTogcmV0dXJuKChDSEFSKSgweGIxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQjU6IHJldHVy bigoQ0hBUikoMHhiNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEI2OiByZXR1cm4oKENIQVIp KDB4YjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCNzogcmV0dXJuKChDSEFSKSgweGI3ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwQkI6IHJldHVybigoQ0hBUikoMHhiYiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDAxOiByZXR1cm4oKENIQVIpKDB4YTggJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQwMjogcmV0dXJuKChDSEFSKSgweDgwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 MDM6IHJldHVybigoQ0hBUikoMHg4MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDA0OiByZXR1 cm4oKENIQVIpKDB4YWEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwNTogcmV0dXJuKChDSEFS KSgweGJkICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MDY6IHJldHVybigoQ0hBUikoMHhiMiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDA3OiByZXR1cm4oKENIQVIpKDB4YWYgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQwODogcmV0dXJuKChDSEFSKSgweGEzICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0MDk6IHJldHVybigoQ0hBUikoMHg4YSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDBhOiByZXR1cm4oKENIQVIpKDB4OGMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwYjogcmV0 dXJuKChDSEFSKSgweDhlICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MGM6IHJldHVybigoQ0hB UikoMHg4ZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDBlOiByZXR1cm4oKENIQVIpKDB4YTEg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwZjogcmV0dXJuKChDSEFSKSgweDhmICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0MTA6IHJldHVybigoQ0hBUikoMHhjMCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDExOiByZXR1cm4oKENIQVIpKDB4YzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQxMjogcmV0dXJuKChDSEFSKSgweGMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTM6IHJl dHVybigoQ0hBUikoMHhjMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE0OiByZXR1cm4oKENI QVIpKDB4YzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxNTogcmV0dXJuKChDSEFSKSgweGM1 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTY6IHJldHVybigoQ0hBUikoMHhjNiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDE3OiByZXR1cm4oKENIQVIpKDB4YzcgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQxODogcmV0dXJuKChDSEFSKSgweGM4ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0MTk6IHJldHVybigoQ0hBUikoMHhjOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFhOiBy ZXR1cm4oKENIQVIpKDB4Y2EgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxYjogcmV0dXJuKChD SEFSKSgweGNiICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MWM6IHJldHVybigoQ0hBUikoMHhj YyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFkOiByZXR1cm4oKENIQVIpKDB4Y2QgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQxZTogcmV0dXJuKChDSEFSKSgweGNlICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0MWY6IHJldHVybigoQ0hBUikoMHhjZiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDIwOiByZXR1cm4oKENIQVIpKDB4ZDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyMTog cmV0dXJuKChDSEFSKSgweGQxICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjI6IHJldHVybigo Q0hBUikoMHhkMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDIzOiByZXR1cm4oKENIQVIpKDB4 ZDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyNDogcmV0dXJuKChDSEFSKSgweGQ0ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0MjU6IHJldHVybigoQ0hBUikoMHhkNSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDI2OiByZXR1cm4oKENIQVIpKDB4ZDYgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQyNzogcmV0dXJuKChDSEFSKSgweGQ3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0Mjg6 IHJldHVybigoQ0hBUikoMHhkOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI5OiByZXR1cm4o KENIQVIpKDB4ZDkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyYTogcmV0dXJuKChDSEFSKSgw eGRhICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MmI6IHJldHVybigoQ0hBUikoMHhkYiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJjOiByZXR1cm4oKENIQVIpKDB4ZGMgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQyZDogcmV0dXJuKChDSEFSKSgweGRkICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0MmU6IHJldHVybigoQ0hBUikoMHhkZSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJm OiByZXR1cm4oKENIQVIpKDB4ZGYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzMDogcmV0dXJu KChDSEFSKSgweGUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MzE6IHJldHVybigoQ0hBUiko MHhlMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDMyOiByZXR1cm4oKENIQVIpKDB4ZTIgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzMzogcmV0dXJuKChDSEFSKSgweGUzICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0MzQ6IHJldHVybigoQ0hBUikoMHhlNCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDM1OiByZXR1cm4oKENIQVIpKDB4ZTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQz NjogcmV0dXJuKChDSEFSKSgweGU2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0Mzc6IHJldHVy bigoQ0hBUikoMHhlNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM4OiByZXR1cm4oKENIQVIp KDB4ZTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzOTogcmV0dXJuKChDSEFSKSgweGU5ICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0M2E6IHJldHVybigoQ0hBUikoMHhlYSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDNiOiByZXR1cm4oKENIQVIpKDB4ZWIgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQzYzogcmV0dXJuKChDSEFSKSgweGVjICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 M2Q6IHJldHVybigoQ0hBUikoMHhlZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNlOiByZXR1 cm4oKENIQVIpKDB4ZWUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzZjogcmV0dXJuKChDSEFS KSgweGVmICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDA6IHJldHVybigoQ0hBUikoMHhmMCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQxOiByZXR1cm4oKENIQVIpKDB4ZjEgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQ0MjogcmV0dXJuKChDSEFSKSgweGYyICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0NDM6IHJldHVybigoQ0hBUikoMHhmMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDQ0OiByZXR1cm4oKENIQVIpKDB4ZjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0NTogcmV0 dXJuKChDSEFSKSgweGY1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDY6IHJldHVybigoQ0hB UikoMHhmNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ3OiByZXR1cm4oKENIQVIpKDB4Zjcg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0ODogcmV0dXJuKChDSEFSKSgweGY4ICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0NDk6IHJldHVybigoQ0hBUikoMHhmOSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDRhOiByZXR1cm4oKENIQVIpKDB4ZmEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQ0YjogcmV0dXJuKChDSEFSKSgweGZiICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NGM6IHJl dHVybigoQ0hBUikoMHhmYyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRkOiByZXR1cm4oKENI QVIpKDB4ZmQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0ZTogcmV0dXJuKChDSEFSKSgweGZl ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NGY6IHJldHVybigoQ0hBUikoMHhmZiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDUxOiByZXR1cm4oKENIQVIpKDB4YjggJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQ1MjogcmV0dXJuKChDSEFSKSgweDkwICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0NTM6IHJldHVybigoQ0hBUikoMHg4MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDU0OiBy ZXR1cm4oKENIQVIpKDB4YmEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1NTogcmV0dXJuKChD SEFSKSgweGJlICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NTY6IHJldHVybigoQ0hBUikoMHhi MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDU3OiByZXR1cm4oKENIQVIpKDB4YmYgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQ1ODogcmV0dXJuKChDSEFSKSgweGJjICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0NTk6IHJldHVybigoQ0hBUikoMHg5YSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDVhOiByZXR1cm4oKENIQVIpKDB4OWMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1Yjog cmV0dXJuKChDSEFSKSgweDllICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NWM6IHJldHVybigo Q0hBUikoMHg5ZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDVlOiByZXR1cm4oKENIQVIpKDB4 YTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1ZjogcmV0dXJuKChDSEFSKSgweDlmICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0OTA6IHJldHVybigoQ0hBUikoMHhhNSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDkxOiByZXR1cm4oKENIQVIpKDB4YjQgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjAxMjogcmV0dXJuKChDSEFSKSgweDk2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTQ6 IHJldHVybigoQ0hBUikoMHg5NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDE4OiByZXR1cm4o KENIQVIpKDB4OTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAxOTogcmV0dXJuKChDSEFSKSgw eDkyICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMWE6IHJldHVybigoQ0hBUikoMHg4MiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFjOiByZXR1cm4oKENIQVIpKDB4OTMgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjAxZDogcmV0dXJuKChDSEFSKSgweDk0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDIwMWU6IHJldHVybigoQ0hBUikoMHg4NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDIw OiByZXR1cm4oKENIQVIpKDB4ODYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAyMTogcmV0dXJu KChDSEFSKSgweDg3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjI6IHJldHVybigoQ0hBUiko MHg5NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDI2OiByZXR1cm4oKENIQVIpKDB4ODUgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjAzMTogcmV0dXJuKChDSEFSKSgweDg5ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDIwQUM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEV1cm8gKi8KLSAgICAg ICAgICByZXR1cm4oKENIQVIpKDB4ODggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjExNjogcmV0 dXJuKChDSEFSKSgweGI5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIxMjI6IHJldHVybigoQ0hB UikoMHg5OSAmIDB4ZmYpKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybigweDAwM2YpOwotICAgIH0K LX0KLQotaW50IC8qIFVuaWNvZGUgdG8gV2luZG93cyBDb2RlIFBhZ2UgMTI1MiAoTGF0aW4tMSkg Ki8KLSNpZmRlZiBDS19BTlNJQwotdHhfY3AxMjUyKFVTSE9SVCBjKQotI2Vsc2UKLXR4X2NwMTI1 MihjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHg4 MCB8fCAoYyA+IDB4OWYgJiYgYyA8PSAweGZmKSkgLyogSGFzIEMxIGdyYXBoaWNzICovCi0gICAg ICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNl IDB4MDE1MjogICAgICAgICAgICAgICAgICAgICAgLyogT0UgKi8KLSAgICAgICAgcmV0dXJuKChD SEFSKSgweDhjICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNTM6ICAgICAgICAgICAgICAgICAg ICAgIC8qIG9lICovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHg5YyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMTYwOiAgICAgICAgICAgICAgICAgICAgICAvKiBTIGNhcm9uICovCi0gICAgICAg IHJldHVybigoQ0hBUikoMHg4YSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTYxOiAgICAgICAg ICAgICAgICAgICAgICAvKiBzIGNhcm9uICovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHg5YSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTc4OiAgICAgICAgICAgICAgICAgICAgICAvKiBZIGRp YWVyZXNpcyAqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4OWYgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDE3RDogICAgICAgICAgICAgICAgICAgICAgLyogWiBjYXJvbiAqLwotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4OGUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE3RTogICAgICAgICAg ICAgICAgICAgICAgLyogeiBjYXJvbiAqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4OWUgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDE5MjogICAgICAgICAgICAgICAgICAgICAgLyogRmxvcmlu ICovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHg4MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy MDEwOiBjYXNlIDB4MjAxMTogICAgICAgICAvKiBIeXBoZW5zICovCi0gICAgICAgIHJldHVybigo Q0hBUikoMHgyZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDEyOiBjYXNlIDB4MjAxMzogICAg ICAgICAvKiBlbi1kYXNoZXMgKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDk2ICYgMHhmZikp OwotICAgICAgY2FzZSAweDIwMTQ6IGNhc2UgMHgyMDE1OiAgICAgICAgIC8qIGVtLWRhc2hlcyAq LwotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAx ODogICAgICAgICAgICAgICAgICAgICAgLyogVmFyaW91cyBxdW90YXRpb24gbWFya3MuLi4gKi8K LSAgICAgICAgcmV0dXJuKChDSEFSKSgweDkxICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTk6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFj OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAx ZDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDk0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIw MWU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy MDIwOiAgICAgICAgICAgICAgICAgICAgICAvKiBEYWdnZXIgKi8KLSAgICAgICAgcmV0dXJuKChD SEFSKSgweDg2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjE6ICAgICAgICAgICAgICAgICAg ICAgIC8qIERvdWJsZSBEYWdnZXIgKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDg3ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDIwMjI6ICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1bGxldCAq LwotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAy NjogICAgICAgICAgICAgICAgICAgICAgLyogRWxsaXBzaXMgKi8KLSAgICAgICAgcmV0dXJuKChD SEFSKSgweDg1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMzA6ICAgICAgICAgICAgICAgICAg ICAgIC8qIFBlciBtaWwgKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDg5ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDIwQUM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEV1cm8gKi8KLSAgICAg ICAgICByZXR1cm4oKENIQVIpKDB4ODAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjEyMjogICAg ICAgICAgICAgICAgICAgICAgLyogVHJhZGUgTWFyayAqLwotICAgICAgICByZXR1cm4oKENIQVIp KDB4OTkgJiAweGZmKSk7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4oMHgwMDNmKTsKLSAgICB9Ci19 Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQQyBDb2RlIFBh Z2UgODUyICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2NwODUyKFVTSE9SVCBjKQotI2Vsc2UKLXR4 X2NwODUyKGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMg PCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICovCi0gICAg ICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNl IDB4MDBhMDogcmV0dXJuKChDSEFSKSgyNTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNDog cmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChD SEFSKSgyNDUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKSgyNDkg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKChDSEFSKSgxNzQgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBhYzogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBhZDogcmV0dXJuKChDSEFSKSgyNDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBi MDogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiNDogcmV0dXJu KChDSEFSKSgyMzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiODogcmV0dXJuKChDSEFSKSgy NDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKSgxNzUgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFSKSgxODEgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBjMjogcmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBjNDogcmV0dXJuKChDSEFSKSgxNDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjNzogcmV0 dXJuKChDSEFSKSgxMjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjOTogcmV0dXJuKChDSEFS KSgxNDQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjYjogcmV0dXJuKChDSEFSKSgyMTEgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjZDogcmV0dXJuKChDSEFSKSgyMTQgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBjZTogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBkMzogcmV0dXJuKChDSEFSKSgyMjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkNDog cmV0dXJuKChDSEFSKSgyMjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkNjogcmV0dXJuKChD SEFSKSgxNTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkNzogcmV0dXJuKChDSEFSKSgxNTgg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkYTogcmV0dXJuKChDSEFSKSgyMzMgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBkYzogcmV0dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBkZDogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBk ZjogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlMTogcmV0dXJu KChDSEFSKSgxNjAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFSKSgx MzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlNDogcmV0dXJuKChDSEFSKSgxMzIgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFSKSgxMzUgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBlOTogcmV0dXJuKChDSEFSKSgxMzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBlYjogcmV0dXJuKChDSEFSKSgxMzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlZDogcmV0 dXJuKChDSEFSKSgxNjEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlZTogcmV0dXJuKChDSEFS KSgxNDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKSgxNjIgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKSgxNDcgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBmNjogcmV0dXJuKChDSEFSKSgxNDggJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBmNzogcmV0dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmYTog cmV0dXJuKChDSEFSKSgxNjMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmYzogcmV0dXJuKChD SEFSKSgxMjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmZDogcmV0dXJuKChDSEFSKSgyMzYg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEwMjogcmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDEwMzogcmV0dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDEwNDogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEw NTogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEwNjogcmV0dXJu KChDSEFSKSgxNDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEwNzogcmV0dXJuKChDSEFSKSgx MzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEwYzogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDEwZDogcmV0dXJuKChDSEFSKSgxNTkgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDEwZTogcmV0dXJuKChDSEFSKSgyMTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDEwZjogcmV0dXJuKChDSEFSKSgyMTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDExMDogcmV0 dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDExMTogcmV0dXJuKChDSEFS KSgyMDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDExODogcmV0dXJuKChDSEFSKSgxNjggJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDExOTogcmV0dXJuKChDSEFSKSgxNjkgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDExYTogcmV0dXJuKChDSEFSKSgxODMgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDExYjogcmV0dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEzOTog cmV0dXJuKChDSEFSKSgxNDUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEzYTogcmV0dXJuKChD SEFSKSgxNDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEzZDogcmV0dXJuKChDSEFSKSgxNDkg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEzZTogcmV0dXJuKChDSEFSKSgxNTAgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDE0MTogcmV0dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDE0MjogcmV0dXJuKChDSEFSKSgxMzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE0 MzogcmV0dXJuKChDSEFSKSgyMjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE0NDogcmV0dXJu KChDSEFSKSgyMjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE0NzogcmV0dXJuKChDSEFSKSgy MTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE0ODogcmV0dXJuKChDSEFSKSgyMjkgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDE1MDogcmV0dXJuKChDSEFSKSgxMzggJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDE1MTogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDE1NDogcmV0dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE1NTogcmV0 dXJuKChDSEFSKSgyMzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE1ODogcmV0dXJuKChDSEFS KSgyNTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE1OTogcmV0dXJuKChDSEFSKSgyNTMgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDE1YTogcmV0dXJuKChDSEFSKSgxNTEgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDE1YjogcmV0dXJuKChDSEFSKSgxNTIgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDE1ZTogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE1Zjog cmV0dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE2MDogcmV0dXJuKChD SEFSKSgyMzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE2MTogcmV0dXJuKChDSEFSKSgyMzEg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE2MjogcmV0dXJuKChDSEFSKSgyMjEgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDE2MzogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDE2NDogcmV0dXJuKChDSEFSKSgxNTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE2 NTogcmV0dXJuKChDSEFSKSgxNTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE2ZTogcmV0dXJu KChDSEFSKSgyMjIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE2ZjogcmV0dXJuKChDSEFSKSgx MzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE3MDogcmV0dXJuKChDSEFSKSgyMzUgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDE3MTogcmV0dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDE3OTogcmV0dXJuKChDSEFSKSgxNDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDE3YTogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE3YjogcmV0 dXJuKChDSEFSKSgxODkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE3YzogcmV0dXJuKChDSEFS KSgxOTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE3ZDogcmV0dXJuKChDSEFSKSgxNjYgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDE3ZTogcmV0dXJuKChDSEFSKSgxNjcgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDJjNzogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDJkODogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDJkOTog cmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDJkYjogcmV0dXJuKChD SEFSKSgyNDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDJkZDogcmV0dXJuKChDSEFSKSgyNDEg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUwMDogcmV0dXJuKChDSEFSKSgxOTYgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjUwMjogcmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjUwYzogcmV0dXJuKChDSEFSKSgyMTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUx MDogcmV0dXJuKChDSEFSKSgxOTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxNDogcmV0dXJu KChDSEFSKSgxOTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxODogcmV0dXJuKChDSEFSKSgy MTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxYzogcmV0dXJuKChDSEFSKSgxOTUgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjUyNDogcmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjUyYzogcmV0dXJuKChDSEFSKSgxOTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjUzNDogcmV0dXJuKChDSEFSKSgxOTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUzYzogcmV0 dXJuKChDSEFSKSgxOTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1MDogcmV0dXJuKChDSEFS KSgyMDUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1MTogcmV0dXJuKChDSEFSKSgxODYgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1NDogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjU1NzogcmV0dXJuKChDSEFSKSgxODcgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjU1YTogcmV0dXJuKChDSEFSKSgyMDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1ZDog cmV0dXJuKChDSEFSKSgxODggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2MDogcmV0dXJuKChD SEFSKSgyMDQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2MzogcmV0dXJuKChDSEFSKSgxODUg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2NjogcmV0dXJuKChDSEFSKSgyMDMgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjU2OTogcmV0dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjU2YzogcmV0dXJuKChDSEFSKSgyMDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4 MDogcmV0dXJuKChDSEFSKSgyMjMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4NDogcmV0dXJu KChDSEFSKSgyMjAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4ODogcmV0dXJuKChDSEFSKSgy MTkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5MTogcmV0dXJuKChDSEFSKSgxNzYgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjU5MjogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjU5MzogcmV0dXJuKChDSEFSKSgxNzggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjVhMDogcmV0dXJuKChDSEFSKSgyNTQgJiAweGZmKSk7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4o dHhfY3BzdWIoYykpOyAgICAgLyogRm9yIGJveCBjaGFyYWN0ZXJzIGV0YyAqLwotICAgIH0KLX0K LQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvd3MgQ29k ZSBQYWdlIDEyNTMgKEdyZWVrKSAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9jcDEyNTMoVVNIT1JU IGMpCi0jZWxzZQotdHhfY3AxMjUzKGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17Ci0gICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdy YXBoaWNzICovCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoIChj KSB7Ci0gICAgICBjYXNlIDB4MDAzYzogcmV0dXJuKChDSEFSKSgweDhiICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwM2U6IHJldHVybigoQ0hBUikoMHg5YiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMEEwOiByZXR1cm4oKENIQVIpKDB4YTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBMzog cmV0dXJuKChDSEFSKSgweGEzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQTQ6IHJldHVybigo Q0hBUikoMHhhNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEE1OiByZXR1cm4oKENIQVIpKDB4 YTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBNjogcmV0dXJuKChDSEFSKSgweGE2ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwQTc6IHJldHVybigoQ0hBUikoMHhhNyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMEE4OiByZXR1cm4oKENIQVIpKDB4YTggJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBBOTogcmV0dXJuKChDSEFSKSgweGE5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQUE6 IHJldHVybigoQ0hBUikoMHhhYSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEFCOiByZXR1cm4o KENIQVIpKDB4YWIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBQzogcmV0dXJuKChDSEFSKSgw eGFjICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQUQ6IHJldHVybigoQ0hBUikoMHhhZCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEFFOiByZXR1cm4oKENIQVIpKDB4YWUgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBBRjogcmV0dXJuKChDSEFSKSgweGFmICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwQjA6IHJldHVybigoQ0hBUikoMHhiMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEIx OiByZXR1cm4oKENIQVIpKDB4YjEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCMjogcmV0dXJu KChDSEFSKSgweGIyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQjM6IHJldHVybigoQ0hBUiko MHhiMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEI1OiByZXR1cm4oKENIQVIpKDB4YjUgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCNjogcmV0dXJuKChDSEFSKSgweGI2ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikoMHhhMSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMEJCOiByZXR1cm4oKENIQVIpKDB4YmIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBC RDogcmV0dXJuKChDSEFSKSgweGJkICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxOTI6IHJldHVy bigoQ0hBUikoMHg4MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzg2OiByZXR1cm4oKENIQVIp KDB4YTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDM4ODogcmV0dXJuKChDSEFSKSgweGI4ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAzODk6IHJldHVybigoQ0hBUikoMHhiOSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMzhBOiByZXR1cm4oKENIQVIpKDB4YmEgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDM4QzogcmV0dXJuKChDSEFSKSgweGJjICYgMHhmZikpOwotICAgICAgY2FzZSAweDAz OEU6IHJldHVybigoQ0hBUikoMHhiZSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzhGOiByZXR1 cm4oKENIQVIpKDB4YmYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDM5MDogcmV0dXJuKChDSEFS KSgweGMwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOTE6IHJldHVybigoQ0hBUikoMHhjMSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzkyOiByZXR1cm4oKENIQVIpKDB4YzIgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDM5MzogcmV0dXJuKChDSEFSKSgweGMzICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAzOTQ6IHJldHVybigoQ0hBUikoMHhjNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw Mzk1OiByZXR1cm4oKENIQVIpKDB4YzUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDM5NjogcmV0 dXJuKChDSEFSKSgweGM2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOTc6IHJldHVybigoQ0hB UikoMHhjNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzk4OiByZXR1cm4oKENIQVIpKDB4Yzgg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDM5OTogcmV0dXJuKChDSEFSKSgweGM5ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAzOUE6IHJldHVybigoQ0hBUikoMHhjYSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMzlCOiByZXR1cm4oKENIQVIpKDB4Y2IgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDM5QzogcmV0dXJuKChDSEFSKSgweGNjICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOUQ6IHJl dHVybigoQ0hBUikoMHhjZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzlFOiByZXR1cm4oKENI QVIpKDB4Y2UgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDM5RjogcmV0dXJuKChDSEFSKSgweGNm ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTA6IHJldHVybigoQ0hBUikoMHhkMCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwM2ExOiByZXR1cm4oKENIQVIpKDB4ZDEgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDNhMzogcmV0dXJuKChDSEFSKSgweGQzICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAzYTQ6IHJldHVybigoQ0hBUikoMHhkNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2E1OiBy ZXR1cm4oKENIQVIpKDB4ZDUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNhNjogcmV0dXJuKChD SEFSKSgweGQ2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTc6IHJldHVybigoQ0hBUikoMHhk NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2E4OiByZXR1cm4oKENIQVIpKDB4ZDggJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDNhOTogcmV0dXJuKChDSEFSKSgweGQ5ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAzYUE6IHJldHVybigoQ0hBUikoMHhkYSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwM2FCOiByZXR1cm4oKENIQVIpKDB4ZGIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNhQzog cmV0dXJuKChDSEFSKSgweGRjICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYUQ6IHJldHVybigo Q0hBUikoMHhkZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2FFOiByZXR1cm4oKENIQVIpKDB4 ZGUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNhRjogcmV0dXJuKChDSEFSKSgweGRmICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAzYjA6IHJldHVybigoQ0hBUikoMHhlMCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwM2IxOiByZXR1cm4oKENIQVIpKDB4ZTEgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDNiMjogcmV0dXJuKChDSEFSKSgweGUyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYjM6 IHJldHVybigoQ0hBUikoMHhlMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2I0OiByZXR1cm4o KENIQVIpKDB4ZTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNiNTogcmV0dXJuKChDSEFSKSgw eGU1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYjY6IHJldHVybigoQ0hBUikoMHhlNiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2I3OiByZXR1cm4oKENIQVIpKDB4ZTcgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDNiODogcmV0dXJuKChDSEFSKSgweGU4ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAzYjk6IHJldHVybigoQ0hBUikoMHhlOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2JB OiByZXR1cm4oKENIQVIpKDB4ZWEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNiQjogcmV0dXJu KChDSEFSKSgweGViICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYkM6IHJldHVybigoQ0hBUiko MHhlYyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2JEOiByZXR1cm4oKENIQVIpKDB4ZWQgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDNiRTogcmV0dXJuKChDSEFSKSgweGVlICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAzYkY6IHJldHVybigoQ0hBUikoMHhlZiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwM2MwOiByZXR1cm4oKENIQVIpKDB4ZjAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNj MTogcmV0dXJuKChDSEFSKSgweGYxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzI6IHJldHVy bigoQ0hBUikoMHhmMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2MzOiByZXR1cm4oKENIQVIp KDB4ZjMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNjNDogcmV0dXJuKChDSEFSKSgweGY0ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAzYzU6IHJldHVybigoQ0hBUikoMHhmNSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwM2M2OiByZXR1cm4oKENIQVIpKDB4ZjYgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDNjNzogcmV0dXJuKChDSEFSKSgweGY3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAz Yzg6IHJldHVybigoQ0hBUikoMHhmOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2M5OiByZXR1 cm4oKENIQVIpKDB4ZjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNjQTogcmV0dXJuKChDSEFS KSgweGZhICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzY0I6IHJldHVybigoQ0hBUikoMHhmYiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2NDOiByZXR1cm4oKENIQVIpKDB4ZmMgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDNjRDogcmV0dXJuKChDSEFSKSgweGZkICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAzY0U6IHJldHVybigoQ0hBUikoMHhmZSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy MDEyOiByZXR1cm4oKENIQVIpKDB4OTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAxNDogcmV0 dXJuKChDSEFSKSgweDk3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTg6IHJldHVybigoQ0hB UikoMHg5MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDE5OiByZXR1cm4oKENIQVIpKDB4OTIg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAxYTogcmV0dXJuKChDSEFSKSgweDgyICYgMHhmZikp OwotICAgICAgY2FzZSAweDIwMWM6IHJldHVybigoQ0hBUikoMHg5MyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyMDFkOiByZXR1cm4oKENIQVIpKDB4OTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjAxZTogcmV0dXJuKChDSEFSKSgweDg0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjA6IHJl dHVybigoQ0hBUikoMHg4NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDIxOiByZXR1cm4oKENI QVIpKDB4ODcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAyMjogcmV0dXJuKChDSEFSKSgweDk1 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjY6IHJldHVybigoQ0hBUikoMHg4NSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyMDMxOiByZXR1cm4oKENIQVIpKDB4ODkgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjBBQzogICAgICAgICAgICAgICAgICAgICAgLyogRXVybyAqLwotICAgICAgICAg IHJldHVybigoQ0hBUikoMHg4MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMTIyOiByZXR1cm4o KENIQVIpKDB4OTkgJiAweGZmKSk7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4oMHgwMDNmKTsKLSAg ICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5k b3dzIENvZGUgUGFnZSAxMjU0IChUdXJraXNoKSAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9jcDEy NTQoVVNIT1JUIGMpCi0jZWxzZQotdHhfY3AxMjU0KGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweDgwKQotICAgICAgcmV0dXJuKChDSEFSKShjICYg MHhmZikpOwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSAweDAxMWU6IHJldHVybigoQ0hB UikoMHhkMCAmIDB4ZmYpKTsgLyogRyBicmV2ZSAgICAqLwotICAgICAgY2FzZSAweDAxMzA6IHJl dHVybigoQ0hBUikoMHhkZCAmIDB4ZmYpKTsgLyogSSB3aXRoIGRvdCAqLwotICAgICAgY2FzZSAw eDAxNWU6IHJldHVybigoQ0hBUikoMHhkZSAmIDB4ZmYpKTsgLyogUyBjZWRpbGxhICAqLwotICAg ICAgY2FzZSAweDAxMWY6IHJldHVybigoQ0hBUikoMHhmMCAmIDB4ZmYpKTsgLyogZyBicmV2ZSAg ICAqLwotICAgICAgY2FzZSAweDAxMzE6IHJldHVybigoQ0hBUikoMHhmZCAmIDB4ZmYpKTsgLyog aSBkb3RsZXNzICovCi0gICAgICBjYXNlIDB4MDE1ZjogcmV0dXJuKChDSEFSKSgweGZlICYgMHhm ZikpOyAvKiBzIGNlZGlsbGEgKi8KLSAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9jcDEyNTIoYykp OyAgICAvKiBUaGUgcmVzdCBpcyBsaWtlIFdpbmRvd3MgTGF0aW4tMSAqLwotICAgIH0KLX0KLQot aW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXR4X2NwMTI1NShVU0hPUlQgYykKLSNlbHNlCi10eF9jcDEy NTUoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4 MDgwKQotICAgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoIChjKSB7 Ci0gICAgICBjYXNlIDB4MjBBQzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDgwICYgMHhmZikp OyAgICAvKiBFVVJPIFNJR04gKi8KLSAgICAgIGNhc2UgMHgyMDFBOgotICAgICAgICByZXR1cm4o KENIQVIpKDB4ODIgJiAweGZmKSk7ICAgIC8qIFNJTkdMRSBMT1ctOSBRVU9UQVRJT04gTUFSSyAq LwotICAgICAgY2FzZSAweDAxOTI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4MyAmIDB4ZmYp KTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEYgV0lUSCBIT09LICovCi0gICAgICBjYXNlIDB4 MjAxRToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDg0ICYgMHhmZikpOyAgICAvKiBET1VCTEUg TE9XLTkgUVVPVEFUSU9OIE1BUksgKi8KLSAgICAgIGNhc2UgMHgyMDI2OgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4ODUgJiAweGZmKSk7ICAgIC8qIEhPUklaT05UQUwgRUxMSVBTSVMgKi8KLSAg ICAgIGNhc2UgMHgyMDIwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4ODYgJiAweGZmKSk7ICAg IC8qIERBR0dFUiAqLwotICAgICAgY2FzZSAweDIwMjE6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHg4NyAmIDB4ZmYpKTsgICAgLyogRE9VQkxFIERBR0dFUiAqLwotICAgICAgY2FzZSAweDAyQzY6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4OCAmIDB4ZmYpKTsgICAgLyogTU9ESUZJRVIgTEVU VEVSIENJUkNVTUZMRVggQUNDRU5UICovCi0gICAgICBjYXNlIDB4MjAzMDoKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweDg5ICYgMHhmZikpOyAgICAvKiBQRVIgTUlMTEUgU0lHTiAqLwotICAgICAg Y2FzZSAweDIwMzk6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4QiAmIDB4ZmYpKTsgICAgLyog U0lOR0xFIExFRlQtUE9JTlRJTkcgQU5HTEUgUVVPVEUgKi8KLSAgICAgIGNhc2UgMHgyMDE4Ogot ICAgICAgICByZXR1cm4oKENIQVIpKDB4OTEgJiAweGZmKSk7ICAgIC8qIExFRlQgU0lOR0xFIFFV T1RBVElPTiBNQVJLICovCi0gICAgICBjYXNlIDB4MjAxOToKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweDkyICYgMHhmZikpOyAgICAvKiBSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksgKi8KLSAg ICAgIGNhc2UgMHgyMDFDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTMgJiAweGZmKSk7ICAg IC8qIExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLICovCi0gICAgICBjYXNlIDB4MjAxRDoKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweDk0ICYgMHhmZikpOyAgICAvKiBSSUdIVCBET1VCTEUgUVVP VEFUSU9OIE1BUksgKi8KLSAgICAgIGNhc2UgMHgyMDIyOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4OTUgJiAweGZmKSk7ICAgIC8qIEJVTExFVCAqLwotICAgICAgY2FzZSAweDIwMTM6Ci0gICAg ICAgIHJldHVybigoQ0hBUikoMHg5NiAmIDB4ZmYpKTsgICAgLyogRU4gREFTSCAqLwotICAgICAg Y2FzZSAweDIwMTQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5NyAmIDB4ZmYpKTsgICAgLyog RU0gREFTSCAqLwotICAgICAgY2FzZSAweDAyREM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5 OCAmIDB4ZmYpKTsgICAgLyogU01BTEwgVElMREUgKi8KLSAgICAgIGNhc2UgMHgyMTIyOgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4OTkgJiAweGZmKSk7ICAgIC8qIFRSQURFIE1BUksgU0lHTiAq LwotICAgICAgY2FzZSAweDIwM0E6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5QiAmIDB4ZmYp KTsgICAgLyogU0lOR0xFIFJJR0hULVBPSU5USU5HIEFOR0xFIFFVT1RFICovCi0gICAgICBjYXNl IDB4MDBBMDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEEwICYgMHhmZikpOyAgICAvKiBOTy1C UkVBSyBTUEFDRSAqLwotICAgICAgY2FzZSAweDAwQTE6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHhBMSAmIDB4ZmYpKTsgICAgLyogSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSSyAqLwotICAgICAg Y2FzZSAweDAwQTI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBMiAmIDB4ZmYpKTsgICAgLyog Q0VOVCBTSUdOICovCi0gICAgICBjYXNlIDB4MDBBMzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eEEzICYgMHhmZikpOyAgICAvKiBQT1VORCBTSUdOICovCi0gICAgICBjYXNlIDB4MjBBQToKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweEE0ICYgMHhmZikpOyAgICAvKiBORVcgU0hFUUVMIFNJR04g Ki8KLSAgICAgIGNhc2UgMHgwMEE1OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTUgJiAweGZm KSk7ICAgIC8qIFlFTiBTSUdOICovCi0gICAgICBjYXNlIDB4MDBBNjoKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweEE2ICYgMHhmZikpOyAgICAvKiBCUk9LRU4gQkFSICovCi0gICAgICBjYXNlIDB4 MDBBNzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEE3ICYgMHhmZikpOyAgICAvKiBTRUNUSU9O IFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEE4OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTgg JiAweGZmKSk7ICAgIC8qIERJQUVSRVNJUyAqLwotICAgICAgY2FzZSAweDAwQTk6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHhBOSAmIDB4ZmYpKTsgICAgLyogQ09QWVJJR0hUIFNJR04gKi8KLSAg ICAgIGNhc2UgMHgwMEQ3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QUEgJiAweGZmKSk7ICAg IC8qIE1VTFRJUExJQ0FUSU9OIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEFCOgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4QUIgJiAweGZmKSk7ICAgIC8qIExFRlQtUE9JTlRJTkcgRE9VQkxFIEFO R0xFIFFVT1RFICovCi0gICAgICBjYXNlIDB4MDBBQzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eEFDICYgMHhmZikpOyAgICAvKiBOT1QgU0lHTiAqLwotICAgICAgY2FzZSAweDAwQUQ6Ci0gICAg ICAgIHJldHVybigoQ0hBUikoMHhBRCAmIDB4ZmYpKTsgICAgLyogU09GVCBIWVBIRU4gKi8KLSAg ICAgIGNhc2UgMHgwMEFFOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QUUgJiAweGZmKSk7ICAg IC8qIFJFR0lTVEVSRUQgU0lHTiAqLwotICAgICAgY2FzZSAweDAwQUY6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhBRiAmIDB4ZmYpKTsgICAgLyogTUFDUk9OICovCi0gICAgICBjYXNlIDB4MDBC MDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEIwICYgMHhmZikpOyAgICAvKiBERUdSRUUgU0lH TiAqLwotICAgICAgY2FzZSAweDAwQjE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCMSAmIDB4 ZmYpKTsgICAgLyogUExVUy1NSU5VUyBTSUdOICovCi0gICAgICBjYXNlIDB4MDBCMjoKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweEIyICYgMHhmZikpOyAgICAvKiBTVVBFUlNDUklQVCBUV08gKi8K LSAgICAgIGNhc2UgMHgwMEIzOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QjMgJiAweGZmKSk7 ICAgIC8qIFNVUEVSU0NSSVBUIFRIUkVFICovCi0gICAgICBjYXNlIDB4MDBCNDoKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweEI0ICYgMHhmZikpOyAgICAvKiBBQ1VURSBBQ0NFTlQgKi8KLSAgICAg IGNhc2UgMHgwMEI1OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QjUgJiAweGZmKSk7ICAgIC8q IE1JQ1JPIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEI2OgotICAgICAgICByZXR1cm4oKENIQVIp KDB4QjYgJiAweGZmKSk7ICAgIC8qIFBJTENST1cgU0lHTiAqLwotICAgICAgY2FzZSAweDAwQjc6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCNyAmIDB4ZmYpKTsgICAgLyogTUlERExFIERPVCAq LwotICAgICAgY2FzZSAweDAwQjg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCOCAmIDB4ZmYp KTsgICAgLyogQ0VESUxMQSAqLwotICAgICAgY2FzZSAweDAwQjk6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHhCOSAmIDB4ZmYpKTsgICAgLyogU1VQRVJTQ1JJUFQgT05FICovCi0gICAgICBjYXNl IDB4MDBGNzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEJBICYgMHhmZikpOyAgICAvKiBESVZJ U0lPTiBTSUdOICovCi0gICAgICBjYXNlIDB4MDBCQjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eEJCICYgMHhmZikpOyAgICAvKiBSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEUgKi8K LSAgICAgIGNhc2UgMHgwMEJDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QkMgJiAweGZmKSk7 ICAgIC8qIFZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUiAqLwotICAgICAgY2FzZSAweDAwQkQ6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCRCAmIDB4ZmYpKTsgICAgLyogVlVMR0FSIEZSQUNU SU9OIE9ORSBIQUxGICovCi0gICAgICBjYXNlIDB4MDBCRToKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEJFICYgMHhmZikpOyAgICAvKiBWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMgKi8K LSAgICAgIGNhc2UgMHgwMEJGOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QkYgJiAweGZmKSk7 ICAgIC8qIElOVkVSVEVEIFFVRVNUSU9OIE1BUksgKi8KLSAgICAgIGNhc2UgMHgwNUIwOgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4QzAgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBTSEVW QSAqLwotICAgICAgY2FzZSAweDA1QjE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDMSAmIDB4 ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIEhBVEFGIFNFR09MICovCi0gICAgICBjYXNlIDB4MDVC MjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEMyICYgMHhmZikpOyAgICAvKiBIRUJSRVcgUE9J TlQgSEFUQUYgUEFUQUggKi8KLSAgICAgIGNhc2UgMHgwNUIzOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4QzMgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBIQVRBRiBRQU1BVFMgKi8KLSAg ICAgIGNhc2UgMHgwNUI0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QzQgJiAweGZmKSk7ICAg IC8qIEhFQlJFVyBQT0lOVCBISVJJUSAqLwotICAgICAgY2FzZSAweDA1QjU6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHhDNSAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIFRTRVJFICovCi0g ICAgICBjYXNlIDB4MDVCNjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEM2ICYgMHhmZikpOyAg ICAvKiBIRUJSRVcgUE9JTlQgU0VHT0wgKi8KLSAgICAgIGNhc2UgMHgwNUI3OgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4QzcgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBQQVRBSCAqLwot ICAgICAgY2FzZSAweDA1Qjg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDOCAmIDB4ZmYpKTsg ICAgLyogSEVCUkVXIFBPSU5UIFFBTUFUUyAqLwotICAgICAgY2FzZSAweDA1Qjk6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHhDOSAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIEhPTEFNICov Ci0gICAgICBjYXNlIDB4MDVCQjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweENCICYgMHhmZikp OyAgICAvKiBIRUJSRVcgUE9JTlQgUVVCVVRTICovCi0gICAgICBjYXNlIDB4MDVCQzoKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweENDICYgMHhmZikpOyAgICAvKiBIRUJSRVcgUE9JTlQgREFHRVNI IE9SIE1BUElRICovCi0gICAgICBjYXNlIDB4MDVCRDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eENEICYgMHhmZikpOyAgICAvKiBIRUJSRVcgUE9JTlQgTUVURUcgKi8KLSAgICAgIGNhc2UgMHgw NUJFOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0UgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQ VU5DVFVBVElPTiBNQVFBRiAqLwotICAgICAgY2FzZSAweDA1QkY6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHhDRiAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIFJBRkUgKi8KLSAgICAgIGNh c2UgMHgwNUMwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RDAgJiAweGZmKSk7ICAgIC8qIEhF QlJFVyBQVU5DVFVBVElPTiBQQVNFUSAqLwotICAgICAgY2FzZSAweDA1QzE6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHhEMSAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIFNISU4gRE9UICov Ci0gICAgICBjYXNlIDB4MDVDMjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQyICYgMHhmZikp OyAgICAvKiBIRUJSRVcgUE9JTlQgU0lOIERPVCAqLwotICAgICAgY2FzZSAweDA1QzM6Ci0gICAg ICAgIHJldHVybigoQ0hBUikoMHhEMyAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBVTkNUVUFUSU9O IFNPRiBQQVNVUSAqLwotICAgICAgY2FzZSAweDA1RjA6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHhENCAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExJRy4gWUlERElTSCBET1VCTEUgVkFWICovCi0g ICAgICBjYXNlIDB4MDVGMToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ1ICYgMHhmZikpOyAg ICAvKiBIRUJSRVcgTElHQVRVUkUgWUlERElTSCBWQVYgWU9EICovCi0gICAgICBjYXNlIDB4MDVG MjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ2ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTElH LiBZSURESVNIIERPVUJMRSBZT0QgKi8KLSAgICAgIGNhc2UgMHgwNUYzOgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4RDcgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQVU5DVFVBVElPTiBHRVJFU0gg Ki8KLSAgICAgIGNhc2UgMHgwNUY0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RDggJiAweGZm KSk7ICAgIC8qIEhFQlJFVyBQVU5DVFVBVElPTiBHRVJTSEFZSU0gKi8KLSAgICAgIGNhc2UgMHgw NUQwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTAgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBM RVRURVIgQUxFRiAqLwotICAgICAgY2FzZSAweDA1RDE6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHhFMSAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBCRVQgKi8KLSAgICAgIGNhc2UgMHgw NUQyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTIgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBM RVRURVIgR0lNRUwgKi8KLSAgICAgIGNhc2UgMHgwNUQzOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4RTMgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgREFMRVQgKi8KLSAgICAgIGNhc2Ug MHgwNUQ0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTQgJiAweGZmKSk7ICAgIC8qIEhFQlJF VyBMRVRURVIgSEUgKi8KLSAgICAgIGNhc2UgMHgwNUQ1OgotICAgICAgICByZXR1cm4oKENIQVIp KDB4RTUgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgVkFWICovCi0gICAgICBjYXNlIDB4 MDVENjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEU2ICYgMHhmZikpOyAgICAvKiBIRUJSRVcg TEVUVEVSIFpBWUlOICovCi0gICAgICBjYXNlIDB4MDVENzoKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEU3ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIEhFVCAqLwotICAgICAgY2FzZSAw eDA1RDg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFOCAmIDB4ZmYpKTsgICAgLyogSEVCUkVX IExFVFRFUiBURVQgKi8KLSAgICAgIGNhc2UgMHgwNUQ5OgotICAgICAgICByZXR1cm4oKENIQVIp KDB4RTkgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgWU9EICovCi0gICAgICBjYXNlIDB4 MDVEQToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEVBICYgMHhmZikpOyAgICAvKiBIRUJSRVcg TEVUVEVSIEZJTkFMIEtBRiAqLwotICAgICAgY2FzZSAweDA1REI6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHhFQiAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBLQUYgKi8KLSAgICAgIGNh c2UgMHgwNURDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RUMgJiAweGZmKSk7ICAgIC8qIEhF QlJFVyBMRVRURVIgTEFNRUQgKi8KLSAgICAgIGNhc2UgMHgwNUREOgotICAgICAgICByZXR1cm4o KENIQVIpKDB4RUQgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgRklOQUwgTUVNICovCi0g ICAgICBjYXNlIDB4MDVERToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEVFICYgMHhmZikpOyAg ICAvKiBIRUJSRVcgTEVUVEVSIE1FTSAqLwotICAgICAgY2FzZSAweDA1REY6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHhFRiAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBGSU5BTCBOVU4g Ki8KLSAgICAgIGNhc2UgMHgwNUUwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RjAgJiAweGZm KSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgTlVOICovCi0gICAgICBjYXNlIDB4MDVFMToKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweEYxICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIFNBTUVL SCAqLwotICAgICAgY2FzZSAweDA1RTI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGMiAmIDB4 ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBBWUlOICovCi0gICAgICBjYXNlIDB4MDVFMzoKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweEYzICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIEZJ TkFMIFBFICovCi0gICAgICBjYXNlIDB4MDVFNDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEY0 ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIFBFICovCi0gICAgICBjYXNlIDB4MDVFNToK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEY1ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVS IEZJTkFMIFRTQURJICovCi0gICAgICBjYXNlIDB4MDVFNjoKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEY2ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIFRTQURJICovCi0gICAgICBjYXNl IDB4MDVFNzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEY3ICYgMHhmZikpOyAgICAvKiBIRUJS RVcgTEVUVEVSIFFPRiAqLwotICAgICAgY2FzZSAweDA1RTg6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHhGOCAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBSRVNIICovCi0gICAgICBjYXNl IDB4MDVFOToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEY5ICYgMHhmZikpOyAgICAvKiBIRUJS RVcgTEVUVEVSIFNISU4gKi8KLSAgICAgIGNhc2UgMHgwNUVBOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4RkEgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgVEFWICovCi0gICAgICBjYXNl IDB4MjAwRToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEZEICYgMHhmZikpOyAgICAvKiBMRUZU LVRPLVJJR0hUIE1BUksgKi8KLSAgICAgIGNhc2UgMHgyMDBGOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4RkUgJiAweGZmKSk7ICAgIC8qIFJJR0hULVRPLUxFRlQgTUFSSyAqLwotICAgICAgZGVm YXVsdDogcmV0dXJuKDB4MDAzZik7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogV2luZG93cyBBcmFiaWMgKi8KLSNpZmRlZiBDS19BTlNJQwot dHhfY3AxMjU2KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2NwMTI1NihjKSBVU0hPUlQgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHg4MCkKLSAgICAgIHJldHVybigoQ0hB UikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHgyMEFDOgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4ODAgJiAweGZmKSk7ICAgIC8qIEVVUk8gU0lHTiAqLwotICAg ICAgY2FzZSAweDA2N0U6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4MSAmIDB4ZmYpKTsgICAg LyogQVJBQklDIExFVFRFUiBQRUggKi8KLSAgICAgIGNhc2UgMHgyMDFBOgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4ODIgJiAweGZmKSk7ICAgIC8qIFNJTkdMRSBMT1ctOSBRVU9UQVRJT04gTUFS SyAqLwotICAgICAgY2FzZSAweDAxOTI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4MyAmIDB4 ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEYgV0lUSCBIT09LICovCi0gICAgICBjYXNl IDB4MjAxRToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDg0ICYgMHhmZikpOyAgICAvKiBET1VC TEUgTE9XLTkgUVVPVEFUSU9OIE1BUksgKi8KLSAgICAgIGNhc2UgMHgyMDI2OgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4ODUgJiAweGZmKSk7ICAgIC8qIEhPUklaT05UQUwgRUxMSVBTSVMgKi8K LSAgICAgIGNhc2UgMHgyMDIwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4ODYgJiAweGZmKSk7 ICAgIC8qIERBR0dFUiAqLwotICAgICAgY2FzZSAweDIwMjE6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHg4NyAmIDB4ZmYpKTsgICAgLyogRE9VQkxFIERBR0dFUiAqLwotICAgICAgY2FzZSAweDAy QzY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4OCAmIDB4ZmYpKTsgICAgLyogTU9ESUZJRVIg TEVUVEVSIENJUkNVTUZMRVggQUNDRU5UICovCi0gICAgICBjYXNlIDB4MjAzMDoKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweDg5ICYgMHhmZikpOyAgICAvKiBQRVIgTUlMTEUgU0lHTiAqLwotICAg ICAgY2FzZSAweDIwMzk6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4QiAmIDB4ZmYpKTsgICAg LyogU0lOR0xFIExFRlQtUE9JTlRJTkcgQU5HTEUgUVVPVEUgKi8KLSAgICAgIGNhc2UgMHgwMTUy OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OEMgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElU QUwgTElHQVRVUkUgT0UgKi8KLSAgICAgIGNhc2UgMHgwNjg2OgotICAgICAgICByZXR1cm4oKENI QVIpKDB4OEQgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgVENIRUggKi8KLSAgICAgIGNh c2UgMHgwNjk4OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OEUgJiAweGZmKSk7ICAgIC8qIEFS QUJJQyBMRVRURVIgSkVIICovCi0gICAgICBjYXNlIDB4MDZBRjoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweDkwICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIEdBRiAqLwotICAgICAgY2Fz ZSAweDIwMTg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5MSAmIDB4ZmYpKTsgICAgLyogTEVG VCBTSU5HTEUgUVVPVEFUSU9OIE1BUksgKi8KLSAgICAgIGNhc2UgMHgyMDE5OgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4OTIgJiAweGZmKSk7ICAgIC8qIFJJR0hUIFNJTkdMRSBRVU9UQVRJT04g TUFSSyAqLwotICAgICAgY2FzZSAweDIwMUM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5MyAm IDB4ZmYpKTsgICAgLyogTEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUksgKi8KLSAgICAgIGNhc2Ug MHgyMDFEOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTQgJiAweGZmKSk7ICAgIC8qIFJJR0hU IERPVUJMRSBRVU9UQVRJT04gTUFSSyAqLwotICAgICAgY2FzZSAweDIwMjI6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHg5NSAmIDB4ZmYpKTsgICAgLyogQlVMTEVUICovCi0gICAgICBjYXNlIDB4 MjAxMzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDk2ICYgMHhmZikpOyAgICAvKiBFTiBEQVNI ICovCi0gICAgICBjYXNlIDB4MjAxNDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDk3ICYgMHhm ZikpOyAgICAvKiBFTSBEQVNIICovCi0gICAgICBjYXNlIDB4MjEyMjoKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweDk5ICYgMHhmZikpOyAgICAvKiBUUkFERSBNQVJLIFNJR04gKi8KLSAgICAgIGNh c2UgMHgyMDNBOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OUIgJiAweGZmKSk7ICAgIC8qIFNJ TkdMRSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9URSAqLwotICAgICAgY2FzZSAweDAxNTM6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHg5QyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTElH QVRVUkUgT0UgKi8KLSAgICAgIGNhc2UgMHgyMDBDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 OUQgJiAweGZmKSk7ICAgIC8qIFpFUk8gV0lEVEggTk9OLUpPSU5FUiAqLwotICAgICAgY2FzZSAw eDIwMEQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5RSAmIDB4ZmYpKTsgICAgLyogWkVSTyBX SURUSCBKT0lORVIgKi8KLSAgICAgIGNhc2UgMHgwMEEwOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4QTAgJiAweGZmKSk7ICAgIC8qIE5PLUJSRUFLIFNQQUNFICovCi0gICAgICBjYXNlIDB4MDYw QzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEExICYgMHhmZikpOyAgICAvKiBBUkFCSUMgQ09N TUEgKi8KLSAgICAgIGNhc2UgMHgwMEEyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTIgJiAw eGZmKSk7ICAgIC8qIENFTlQgU0lHTiAqLwotICAgICAgY2FzZSAweDAwQTM6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHhBMyAmIDB4ZmYpKTsgICAgLyogUE9VTkQgU0lHTiAqLwotICAgICAgY2Fz ZSAweDAwQTQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBNCAmIDB4ZmYpKTsgICAgLyogQ1VS UkVOQ1kgU0lHTiAqLwotICAgICAgY2FzZSAweDAwQTU6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHhBNSAmIDB4ZmYpKTsgICAgLyogWUVOIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEE2OgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4QTYgJiAweGZmKSk7ICAgIC8qIEJST0tFTiBCQVIgKi8KLSAg ICAgIGNhc2UgMHgwMEE3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTcgJiAweGZmKSk7ICAg IC8qIFNFQ1RJT04gU0lHTiAqLwotICAgICAgY2FzZSAweDAwQTg6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHhBOCAmIDB4ZmYpKTsgICAgLyogRElBRVJFU0lTICovCi0gICAgICBjYXNlIDB4MDBB OToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEE5ICYgMHhmZikpOyAgICAvKiBDT1BZUklHSFQg U0lHTiAqLwotICAgICAgY2FzZSAweDAwQUI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBQiAm IDB4ZmYpKTsgICAgLyogTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEUgKi8KLSAgICAg IGNhc2UgMHgwMEFDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QUMgJiAweGZmKSk7ICAgIC8q IE5PVCBTSUdOICovCi0gICAgICBjYXNlIDB4MDBBRDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eEFEICYgMHhmZikpOyAgICAvKiBTT0ZUIEhZUEhFTiAqLwotICAgICAgY2FzZSAweDAwQUU6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHhBRSAmIDB4ZmYpKTsgICAgLyogUkVHSVNURVJFRCBTSUdO ICovCi0gICAgICBjYXNlIDB4MDBBRjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEFGICYgMHhm ZikpOyAgICAvKiBNQUNST04gKi8KLSAgICAgIGNhc2UgMHgwMEIwOgotICAgICAgICByZXR1cm4o KENIQVIpKDB4QjAgJiAweGZmKSk7ICAgIC8qIERFR1JFRSBTSUdOICovCi0gICAgICBjYXNlIDB4 MDBCMToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEIxICYgMHhmZikpOyAgICAvKiBQTFVTLU1J TlVTIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEIyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 QjIgJiAweGZmKSk7ICAgIC8qIFNVUEVSU0NSSVBUIFRXTyAqLwotICAgICAgY2FzZSAweDAwQjM6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCMyAmIDB4ZmYpKTsgICAgLyogU1VQRVJTQ1JJUFQg VEhSRUUgKi8KLSAgICAgIGNhc2UgMHgwMEI0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QjQg JiAweGZmKSk7ICAgIC8qIEFDVVRFIEFDQ0VOVCAqLwotICAgICAgY2FzZSAweDAwQjU6Ci0gICAg ICAgIHJldHVybigoQ0hBUikoMHhCNSAmIDB4ZmYpKTsgICAgLyogTUlDUk8gU0lHTiAqLwotICAg ICAgY2FzZSAweDAwQjY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCNiAmIDB4ZmYpKTsgICAg LyogUElMQ1JPVyBTSUdOICovCi0gICAgICBjYXNlIDB4MDBCNzoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweEI3ICYgMHhmZikpOyAgICAvKiBNSURETEUgRE9UICovCi0gICAgICBjYXNlIDB4MDBC ODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEI4ICYgMHhmZikpOyAgICAvKiBDRURJTExBICov Ci0gICAgICBjYXNlIDB4MDBCOToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEI5ICYgMHhmZikp OyAgICAvKiBTVVBFUlNDUklQVCBPTkUgKi8KLSAgICAgIGNhc2UgMHgwNjFCOgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4QkEgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBTRU1JQ09MT04gKi8KLSAg ICAgIGNhc2UgMHgwMEJCOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QkIgJiAweGZmKSk7ICAg IC8qIFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9URSAqLwotICAgICAgY2FzZSAweDAw QkM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCQyAmIDB4ZmYpKTsgICAgLyogVlVMR0FSIEZS QUNUSU9OIE9ORSBRVUFSVEVSICovCi0gICAgICBjYXNlIDB4MDBCRDoKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweEJEICYgMHhmZikpOyAgICAvKiBWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEYgKi8K LSAgICAgIGNhc2UgMHgwMEJFOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QkUgJiAweGZmKSk7 ICAgIC8qIFZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSUyAqLwotICAgICAgY2FzZSAweDA2 MUY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCRiAmIDB4ZmYpKTsgICAgLyogQVJBQklDIFFV RVNUSU9OIE1BUksgKi8KLSAgICAgIGNhc2UgMHgwNjIxOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4QzEgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgSEFNWkEgKi8KLSAgICAgIGNhc2Ug MHgwNjIyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QzIgJiAweGZmKSk7ICAgIC8qIEFSQUJJ QyBMVFIuIEFMRUYgV0lUSCBNQUREQSBBQk9WRSAqLwotICAgICAgY2FzZSAweDA2MjM6Ci0gICAg ICAgIHJldHVybigoQ0hBUikoMHhDMyAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExUUi4gQUxFRiBX SVRIIEhBTVpBIEFCT1ZFICovCi0gICAgICBjYXNlIDB4MDYyNDoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweEM0ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTFRSLiBXQVcgV0lUSCBIQU1aQSBBQk9W RSAqLwotICAgICAgY2FzZSAweDA2MjU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDNSAmIDB4 ZmYpKTsgICAgLyogQVJBQklDIExUUi4gQUxFRiBXSVRIIEhBTVpBIEJFTE9XICovCi0gICAgICBj YXNlIDB4MDYyNjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEM2ICYgMHhmZikpOyAgICAvKiBB UkFCSUMgTFRSLiBZRUggV0lUSCBIQU1aQSBBQk9WRSAqLwotICAgICAgY2FzZSAweDA2Mjc6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHhDNyAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExUUi4gQUxF RiAqLwotICAgICAgY2FzZSAweDA2Mjg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDOCAmIDB4 ZmYpKTsgICAgLyogQVJBQklDIExUUi4gQkVIICovCi0gICAgICBjYXNlIDB4MDYyOToKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweEM5ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIFRFSCBN QVJCVVRBICovCi0gICAgICBjYXNlIDB4MDYyQToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweENB ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIFRFSCAqLwotICAgICAgY2FzZSAweDA2MkI6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDQiAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRF UiBUSEVIICovCi0gICAgICBjYXNlIDB4MDYyQzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEND ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIEpFRU0gKi8KLSAgICAgIGNhc2UgMHgwNjJE OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0QgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRU RVIgSEFIICovCi0gICAgICBjYXNlIDB4MDYyRToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweENF ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIEtIQUggKi8KLSAgICAgIGNhc2UgMHgwNjJG OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0YgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRU RVIgREFMICovCi0gICAgICBjYXNlIDB4MDYzMDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQw ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIFRIQUwgKi8KLSAgICAgIGNhc2UgMHgwNjMx OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RDEgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRU RVIgUkVIICovCi0gICAgICBjYXNlIDB4MDYzMjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQy ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIFpBSU4gKi8KLSAgICAgIGNhc2UgMHgwNjMz OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RDMgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRU RVIgU0VFTiAqLwotICAgICAgY2FzZSAweDA2MzQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhE NCAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBTSEVFTiAqLwotICAgICAgY2FzZSAweDA2 MzU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhENSAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExF VFRFUiBTQUQgKi8KLSAgICAgIGNhc2UgMHgwNjM2OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 RDYgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgREFEICovCi0gICAgICBjYXNlIDB4MDBE NzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ3ICYgMHhmZikpOyAgICAvKiBNVUxUSVBMSUNB VElPTiBTSUdOICovCi0gICAgICBjYXNlIDB4MDYzNzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eEQ4ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIFRBSCAqLwotICAgICAgY2FzZSAweDA2 Mzg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEOSAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExF VFRFUiBaQUggKi8KLSAgICAgIGNhc2UgMHgwNjM5OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 REEgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgQUlOICovCi0gICAgICBjYXNlIDB4MDYz QToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweERCICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVU VEVSIEdIQUlOICovCi0gICAgICBjYXNlIDB4MDY0MDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eERDICYgMHhmZikpOyAgICAvKiBBUkFCSUMgVEFUV0VFTCAqLwotICAgICAgY2FzZSAweDA2NDE6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhERCAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRF UiBGRUggKi8KLSAgICAgIGNhc2UgMHgwNjQyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4REUg JiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgUUFGICovCi0gICAgICBjYXNlIDB4MDY0MzoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweERGICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVS IEtBRiAqLwotICAgICAgY2FzZSAweDAwRTA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFMCAm IDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRSAqLwotICAgICAg Y2FzZSAweDA2NDQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFMSAmIDB4ZmYpKTsgICAgLyog QVJBQklDIExFVFRFUiBMQU0gKi8KLSAgICAgIGNhc2UgMHgwMEUyOgotICAgICAgICByZXR1cm4o KENIQVIpKDB4RTIgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxF WCAqLwotICAgICAgY2FzZSAweDA2NDU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFMyAmIDB4 ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBNRUVNICovCi0gICAgICBjYXNlIDB4MDY0NjoKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweEU0ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIE5P T04gKi8KLSAgICAgIGNhc2UgMHgwNjQ3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTUgJiAw eGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgSEVIICovCi0gICAgICBjYXNlIDB4MDY0ODoKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweEU2ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIFdB VyAqLwotICAgICAgY2FzZSAweDAwRTc6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFNyAmIDB4 ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBICovCi0gICAgICBj YXNlIDB4MDBFODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEU4ICYgMHhmZikpOyAgICAvKiBM QVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFICovCi0gICAgICBjYXNlIDB4MDBFOToKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweEU5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRU RVIgRSBXSVRIIEFDVVRFICovCi0gICAgICBjYXNlIDB4MDBFQToKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweEVBICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgg Ki8KLSAgICAgIGNhc2UgMHgwMEVCOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RUIgJiAweGZm KSk7ICAgIC8qIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTICovCi0gICAgICBjYXNlIDB4 MDY0OToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEVDICYgMHhmZikpOyAgICAvKiBBUkFCSUMg TEVUVEVSIEFMRUYgTUFLU1VSQSAqLwotICAgICAgY2FzZSAweDA2NEE6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhFRCAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBZRUggKi8KLSAgICAg IGNhc2UgMHgwMEVFOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RUUgJiAweGZmKSk7ICAgIC8q IFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWCAqLwotICAgICAgY2FzZSAweDAwRUY6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHhFRiAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIEkg V0lUSCBESUFFUkVTSVMgKi8KLSAgICAgIGNhc2UgMHgwNjRCOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4RjAgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBGQVRIQVRBTiAqLwotICAgICAgY2FzZSAw eDA2NEM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGMSAmIDB4ZmYpKTsgICAgLyogQVJBQklD IERBTU1BVEFOICovCi0gICAgICBjYXNlIDB4MDY0RDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eEYyICYgMHhmZikpOyAgICAvKiBBUkFCSUMgS0FTUkFUQU4gKi8KLSAgICAgIGNhc2UgMHgwNjRF OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RjMgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBGQVRI QSAqLwotICAgICAgY2FzZSAweDAwRjQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGNCAmIDB4 ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYICovCi0gICAgICBjYXNl IDB4MDY0RjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEY1ICYgMHhmZikpOyAgICAvKiBBUkFC SUMgREFNTUEgKi8KLSAgICAgIGNhc2UgMHgwNjUwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 RjYgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBLQVNSQSAqLwotICAgICAgY2FzZSAweDAwRjc6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHhGNyAmIDB4ZmYpKTsgICAgLyogRElWSVNJT04gU0lHTiAq LwotICAgICAgY2FzZSAweDA2NTE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGOCAmIDB4ZmYp KTsgICAgLyogQVJBQklDIFNIQUREQSAqLwotICAgICAgY2FzZSAweDAwRjk6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHhGOSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lU SCBHUkFWRSAqLwotICAgICAgY2FzZSAweDA2NTI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhG QSAmIDB4ZmYpKTsgICAgLyogQVJBQklDIFNVS1VOICovCi0gICAgICBjYXNlIDB4MDBGQjoKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweEZCICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgVSBX SVRIIENJUkNVTUZMRVggKi8KLSAgICAgIGNhc2UgMHgwMEZDOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4RkMgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTICov Ci0gICAgICBjYXNlIDB4MjAwRToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEZEICYgMHhmZikp OyAgICAvKiBMRUZULVRPLVJJR0hUIE1BUksgKi8KLSAgICAgIGNhc2UgMHgyMDBGOgotICAgICAg ICByZXR1cm4oKENIQVIpKDB4RkUgJiAweGZmKSk7ICAgIC8qIFJJR0hULVRPLUxFRlQgTUFSSyAq LwotICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MDAzZik7Ci0gICAgfQotfQotCi1pbnQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93cyBDb2RlIFBhZ2UgMTI1NyAo TGF0aW4tNCkgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfY3AxMjU3KFVTSE9SVCBjKQotI2Vsc2UK LXR4X2NwMTI1NyhjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlm IChjIDwgMHg4MCkKLSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2gg KGMpIHsKLSAgICAgIGNhc2UgMHgwMDNjOiByZXR1cm4oKENIQVIpKDB4OGIgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDAzZTogcmV0dXJuKChDSEFSKSgweDliICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwQTA6IHJldHVybigoQ0hBUikoMHhhMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEEy OiByZXR1cm4oKENIQVIpKDB4YTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBMzogcmV0dXJu KChDSEFSKSgweGEzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQTQ6IHJldHVybigoQ0hBUiko MHhhNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEE2OiByZXR1cm4oKENIQVIpKDB4YTYgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBNzogcmV0dXJuKChDSEFSKSgweGE3ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwQTk6IHJldHVybigoQ0hBUikoMHhhOSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMEFCOiByZXR1cm4oKENIQVIpKDB4YWIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBB QzogcmV0dXJuKChDSEFSKSgweGFjICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQUQ6IHJldHVy bigoQ0hBUikoMHhhZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEFFOiByZXR1cm4oKENIQVIp KDB4YWUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCMDogcmV0dXJuKChDSEFSKSgweGIwICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwQjE6IHJldHVybigoQ0hBUikoMHhiMSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMEIyOiByZXR1cm4oKENIQVIpKDB4YjIgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBCMzogcmV0dXJuKChDSEFSKSgweGIzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw QjU6IHJldHVybigoQ0hBUikoMHhiNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEI2OiByZXR1 cm4oKENIQVIpKDB4YjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCNzogcmV0dXJuKChDSEFS KSgweGI3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQjk6IHJldHVybigoQ0hBUikoMHhiOSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEJCOiByZXR1cm4oKENIQVIpKDB4YmIgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBCQzogcmV0dXJuKChDSEFSKSgweGJjICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwQkQ6IHJldHVybigoQ0hBUikoMHhiZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MEJFOiByZXR1cm4oKENIQVIpKDB4YmUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBDNDogcmV0 dXJuKChDSEFSKSgweGM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQzU6IHJldHVybigoQ0hB UikoMHhjNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM2OiByZXR1cm4oKENIQVIpKDB4YWYg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBDOTogcmV0dXJuKChDSEFSKSgweGM5ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwZDM6IHJldHVybigoQ0hBUikoMHhkMyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMEQ1OiByZXR1cm4oKENIQVIpKDB4ZDUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBENjogcmV0dXJuKChDSEFSKSgweGQ2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwRDc6IHJl dHVybigoQ0hBUikoMHhkNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ4OiByZXR1cm4oKENI QVIpKDB4YTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBEQzogcmV0dXJuKChDSEFSKSgweGRj ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwREY6IHJldHVybigoQ0hBUikoMHhkZiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMEU0OiByZXR1cm4oKENIQVIpKDB4ZTQgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBFNTogcmV0dXJuKChDSEFSKSgweGU1ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZTY6IHJldHVybigoQ0hBUikoMHhiZiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEU5OiBy ZXR1cm4oKENIQVIpKDB4ZTkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChD SEFSKSgweGYzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwRjU6IHJldHVybigoQ0hBUikoMHhm NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEY2OiByZXR1cm4oKENIQVIpKDB4ZjYgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBGNzogcmV0dXJuKChDSEFSKSgweGY3ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZjg6IHJldHVybigoQ0hBUikoMHhiOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGZjOiByZXR1cm4oKENIQVIpKDB4ZmMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEwMDog cmV0dXJuKChDSEFSKSgweGMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxMDE6IHJldHVybigo Q0hBUikoMHhlMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTA0OiByZXR1cm4oKENIQVIpKDB4 YzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEwNTogcmV0dXJuKChDSEFSKSgweGUwICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAxMDY6IHJldHVybigoQ0hBUikoMHhjMyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMTA3OiByZXR1cm4oKENIQVIpKDB4ZTMgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDEwQzogcmV0dXJuKChDSEFSKSgweGM4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxMEQ6 IHJldHVybigoQ0hBUikoMHhlOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTEyOiByZXR1cm4o KENIQVIpKDB4YzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDExMzogcmV0dXJuKChDSEFSKSgw eGU3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxMTY6IHJldHVybigoQ0hBUikoMHhjYiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTE3OiByZXR1cm4oKENIQVIpKDB4ZWIgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDExODogcmV0dXJuKChDSEFSKSgweGM2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAxMTk6IHJldHVybigoQ0hBUikoMHhlNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTIy OiByZXR1cm4oKENIQVIpKDB4Y2MgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEyMzogcmV0dXJu KChDSEFSKSgweGVjICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxMmE6IHJldHVybigoQ0hBUiko MHhjZSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTJiOiByZXR1cm4oKENIQVIpKDB4ZWUgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDEyZTogcmV0dXJuKChDSEFSKSgweGMxICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAxMmY6IHJldHVybigoQ0hBUikoMHhlMSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMTM2OiByZXR1cm4oKENIQVIpKDB4Y2QgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEz NzogcmV0dXJuKChDSEFSKSgweGVkICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxM2M6IHJldHVy bigoQ0hBUikoMHhlZiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTQxOiByZXR1cm4oKENIQVIp KDB4ZDkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE0MjogcmV0dXJuKChDSEFSKSgweGY5ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAxNDM6IHJldHVybigoQ0hBUikoMHhkMSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMTQ0OiByZXR1cm4oKENIQVIpKDB4ZjEgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDE0NTogcmV0dXJuKChDSEFSKSgweGQyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAx NDY6IHJldHVybigoQ0hBUikoMHhmMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTRjOiByZXR1 cm4oKENIQVIpKDB4ZDQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE0ZDogcmV0dXJuKChDSEFS KSgweGY0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNTY6IHJldHVybigoQ0hBUikoMHhhYSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTU3OiByZXR1cm4oKENIQVIpKDB4YmEgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDE1QTogcmV0dXJuKChDSEFSKSgweGRhICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAxNWI6IHJldHVybigoQ0hBUikoMHhmYSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MTYwOiByZXR1cm4oKENIQVIpKDB4ZDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE2MTogcmV0 dXJuKChDSEFSKSgweGYwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNmE6IHJldHVybigoQ0hB UikoMHhkYiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTZiOiByZXR1cm4oKENIQVIpKDB4ZmIg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE3MjogcmV0dXJuKChDSEFSKSgweGQ4ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAxNzM6IHJldHVybigoQ0hBUikoMHhmOCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMTc5OiByZXR1cm4oKENIQVIpKDB4Y2EgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDE3YTogcmV0dXJuKChDSEFSKSgweGVhICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxN2I6IHJl dHVybigoQ0hBUikoMHhkZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTdjOiByZXR1cm4oKENI QVIpKDB4ZmQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE3ZDogcmV0dXJuKChDSEFSKSgweGRl ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxN2U6IHJldHVybigoQ0hBUikoMHhmZSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyMDEyOiByZXR1cm4oKENIQVIpKDB4OTYgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjAxNDogcmV0dXJuKChDSEFSKSgweDk3ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDIwMTg6IHJldHVybigoQ0hBUikoMHg5MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDE5OiBy ZXR1cm4oKENIQVIpKDB4OTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAxYTogcmV0dXJuKChD SEFSKSgweDgyICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMWM6IHJldHVybigoQ0hBUikoMHg5 MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFkOiByZXR1cm4oKENIQVIpKDB4OTQgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjAxZTogcmV0dXJuKChDSEFSKSgweDg0ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDIwMjA6IHJldHVybigoQ0hBUikoMHg4NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyMDIxOiByZXR1cm4oKENIQVIpKDB4ODcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAyMjog cmV0dXJuKChDSEFSKSgweDk1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjY6IHJldHVybigo Q0hBUikoMHg4NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDMxOiByZXR1cm4oKENIQVIpKDB4 ODkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjBBQzogICAgICAgICAgICAgICAgICAgICAgLyog RXVybyAqLwotICAgICAgICAgIHJldHVybigoQ0hBUikoMHg4MCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyMTIyOiByZXR1cm4oKENIQVIpKDB4OTkgJiAweGZmKSk7Ci0gICAgICBkZWZhdWx0OiBy ZXR1cm4oMHgwMDNmKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBXaW5kb3dzIENvZGUgUGFnZSAxMjU4IChWaWV0IE5hbSkgKi8KLSNpZmRl ZiBDS19BTlNJQwotdHhfY3AxMjU4KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2NwMTI1OChjKSBVU0hP UlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHg4MCkgICAgICAg ICAgICAgICAgICAgICAgIC8qIEhhcyBDMSBncmFwaGljcyAqLwotICAgICAgcmV0dXJuKChDSEFS KShjICYgMHhmZikpOwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSAweDIwQUM6Ci0gICAg ICAgIHJldHVybigoQ0hBUikoMHg4MCAmIDB4ZmYpKTsgICAgLyogRVVSTyBTSUdOICovCi0gICAg ICBjYXNlIDB4MjAxQToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDgyICYgMHhmZikpOyAgICAv KiBTSU5HTEUgTE9XLTkgUVVPVEFUSU9OIE1BUksgKi8KLSAgICAgIGNhc2UgMHgwMTkyOgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4ODMgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRF UiBGIFdJVEggSE9PSyAqLwotICAgICAgY2FzZSAweDIwMUU6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHg4NCAmIDB4ZmYpKTsgICAgLyogRE9VQkxFIExPVy05IFFVT1RBVElPTiBNQVJLICovCi0g ICAgICBjYXNlIDB4MjAyNjogcmV0dXJuKChDSEFSKSgweDg1ICYgMHhmZikpOyAvKiBIT1JJWk9O VEFMIEVMTElQU0lTICovCi0gICAgICBjYXNlIDB4MjAyMDogcmV0dXJuKChDSEFSKSgweDg2ICYg MHhmZikpOyAvKiBEQUdHRVIgKi8KLSAgICAgIGNhc2UgMHgyMDIxOiByZXR1cm4oKENIQVIpKDB4 ODcgJiAweGZmKSk7IC8qIERPVUJMRSBEQUdHRVIgKi8KLSAgICAgIGNhc2UgMHgwMkM2OgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4ODggJiAweGZmKSk7ICAgIC8qIE1PRElGSUVSIExFVFRFUiBD SVJDVU1GTEVYIEFDQ0VOVCAqLwotICAgICAgY2FzZSAweDIwMzA6IHJldHVybigoQ0hBUikoMHg4 OSAmIDB4ZmYpKTsgLyogUEVSIE1JTExFIFNJR04gKi8KLSAgICAgIGNhc2UgMHgyMDM5OgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4OEIgJiAweGZmKSk7ICAgIC8qIFNJTkdMRSBMRUZUIEFOR0xF IFFVT1RBVElPTiBNQVJLICovCi0gICAgICBjYXNlIDB4MDE1MjogcmV0dXJuKChDSEFSKSgweDhD ICYgMHhmZikpOyAvKiBMQVRJTiBDQVBJVEFMIExJR0FUVVJFIE9FICovCi0gICAgICBjYXNlIDB4 MjAxODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDkxICYgMHhmZikpOyAgICAvKiBMRUZUIFNJ TkdMRSBRVU9UQVRJT04gTUFSSyAqLwotICAgICAgY2FzZSAweDIwMTk6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHg5MiAmIDB4ZmYpKTsgICAgLyogUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJL ICovCi0gICAgICBjYXNlIDB4MjAxQzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDkzICYgMHhm ZikpOyAgICAvKiBMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyAqLwotICAgICAgY2FzZSAweDIw MUQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5NCAmIDB4ZmYpKTsgICAgLyogUklHSFQgRE9V QkxFIFFVT1RBVElPTiBNQVJLICovCi0gICAgICBjYXNlIDB4MjAyMjoKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweDk1ICYgMHhmZikpOyAgICAvKiBCVUxMRVQgKi8KLSAgICAgIGNhc2UgMHgyMDEz OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTYgJiAweGZmKSk7ICAgIC8qIEVOIERBU0ggKi8K LSAgICAgIGNhc2UgMHgyMDE0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTcgJiAweGZmKSk7 ICAgIC8qIEVNIERBU0ggKi8KLSAgICAgIGNhc2UgMHgwMkRDOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4OTggJiAweGZmKSk7ICAgIC8qIFNNQUxMIFRJTERFICovCi0gICAgICBjYXNlIDB4MjEy MjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDk5ICYgMHhmZikpOyAgICAvKiBUUkFERSBNQVJL IFNJR04gKi8KLSAgICAgIGNhc2UgMHgyMDNBOgotICAgICAgICAvKiBTSU5HTEUgUklHSFQtUE9J TlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUiBLKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDlC ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNTM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5 QyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTElHQVRVUkUgT0UgKi8KLSAgICAgIGNhc2Ug MHgwMTc4OgotICAgICAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggRElBRVJFU0lT ICovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHg5RiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MEEwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTAgJiAweGZmKSk7ICAgIC8qIE5PLUJSRUFL IFNQQUNFICovCi0gICAgICBjYXNlIDB4MDBBMToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEEx ICYgMHhmZikpOyAgICAvKiBJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLICovCi0gICAgICBjYXNl IDB4MDBBMjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEEyICYgMHhmZikpOyAgICAvKiBDRU5U IFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEEzOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTMg JiAweGZmKSk7ICAgIC8qIFBPVU5EIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEE0OgotICAgICAg ICByZXR1cm4oKENIQVIpKDB4QTQgJiAweGZmKSk7ICAgIC8qIENVUlJFTkNZIFNJR04gKi8KLSAg ICAgIGNhc2UgMHgwMEE1OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTUgJiAweGZmKSk7ICAg IC8qIFlFTiBTSUdOICovCi0gICAgICBjYXNlIDB4MDBBNjoKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEE2ICYgMHhmZikpOyAgICAvKiBCUk9LRU4gQkFSICovCi0gICAgICBjYXNlIDB4MDBBNzoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEE3ICYgMHhmZikpOyAgICAvKiBTRUNUSU9OIFNJR04g Ki8KLSAgICAgIGNhc2UgMHgwMEE4OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTggJiAweGZm KSk7ICAgIC8qIERJQUVSRVNJUyAqLwotICAgICAgY2FzZSAweDAwQTk6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhBOSAmIDB4ZmYpKTsgICAgLyogQ09QWVJJR0hUIFNJR04gKi8KLSAgICAgIGNh c2UgMHgwMEFBOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QUEgJiAweGZmKSk7ICAgIC8qIEZF TUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SICovCi0gICAgICBjYXNlIDB4MDBBQjoKLSAgICAgICAg LyogTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksgKi8KLSAgICAgICAg cmV0dXJuKChDSEFSKSgweEFCICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQUM6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHhBQyAmIDB4ZmYpKTsgICAgLyogTk9UIFNJR04gKi8KLSAgICAgIGNh c2UgMHgwMEFEOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QUQgJiAweGZmKSk7ICAgIC8qIFNP RlQgSFlQSEVOICovCi0gICAgICBjYXNlIDB4MDBBRToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eEFFICYgMHhmZikpOyAgICAvKiBSRUdJU1RFUkVEIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEFG OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QUYgJiAweGZmKSk7ICAgIC8qIE1BQ1JPTiAqLwot ICAgICAgY2FzZSAweDAwQjA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCMCAmIDB4ZmYpKTsg ICAgLyogREVHUkVFIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEIxOgotICAgICAgICByZXR1cm4o KENIQVIpKDB4QjEgJiAweGZmKSk7ICAgIC8qIFBMVVMtTUlOVVMgU0lHTiAqLwotICAgICAgY2Fz ZSAweDAwQjI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCMiAmIDB4ZmYpKTsgICAgLyogU1VQ RVJTQ1JJUFQgVFdPICovCi0gICAgICBjYXNlIDB4MDBCMzoKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEIzICYgMHhmZikpOyAgICAvKiBTVVBFUlNDUklQVCBUSFJFRSAqLwotICAgICAgY2FzZSAw eDAwQjQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCNCAmIDB4ZmYpKTsgICAgLyogQUNVVEUg QUNDRU5UICovCi0gICAgICBjYXNlIDB4MDBCNToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEI1 ICYgMHhmZikpOyAgICAvKiBNSUNSTyBTSUdOICovCi0gICAgICBjYXNlIDB4MDBCNjoKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweEI2ICYgMHhmZikpOyAgICAvKiBQSUxDUk9XIFNJR04gKi8KLSAg ICAgIGNhc2UgMHgwMEI3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QjcgJiAweGZmKSk7ICAg IC8qIE1JRERMRSBET1QgKi8KLSAgICAgIGNhc2UgMHgwMEI4OgotICAgICAgICByZXR1cm4oKENI QVIpKDB4QjggJiAweGZmKSk7ICAgIC8qIENFRElMTEEgKi8KLSAgICAgIGNhc2UgMHgwMEI5Ogot ICAgICAgICByZXR1cm4oKENIQVIpKDB4QjkgJiAweGZmKSk7ICAgIC8qIFNVUEVSU0NSSVBUIE9O RSAqLwotICAgICAgY2FzZSAweDAwQkE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCQSAmIDB4 ZmYpKTsgICAgLyogTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SICovCi0gICAgICBjYXNlIDB4 MDBCQjoKLSAgICAgICAgLyogUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBN QVIgSyovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHhCQiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMEJDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QkMgJiAweGZmKSk7ICAgIC8qIFZVTEdB UiBGUkFDVElPTiBPTkUgUVVBUlRFUiAqLwotICAgICAgY2FzZSAweDAwQkQ6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHhCRCAmIDB4ZmYpKTsgICAgLyogVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxG ICovCi0gICAgICBjYXNlIDB4MDBCRToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEJFICYgMHhm ZikpOyAgICAvKiBWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMgKi8KLSAgICAgIGNhc2Ug MHgwMEJGOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QkYgJiAweGZmKSk7ICAgIC8qIElOVkVS VEVEIFFVRVNUSU9OIE1BUksgKi8KLSAgICAgIGNhc2UgMHgwMEMwOgotICAgICAgICByZXR1cm4o KENIQVIpKDB4QzAgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBH UkFWRSAqLwotICAgICAgY2FzZSAweDAwQzE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDMSAm IDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFICovCi0gICAg ICBjYXNlIDB4MDBDMjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEMyICYgMHhmZikpOyAgICAv KiBBIENJUkNVTUZMRVggKi8KLSAgICAgIGNhc2UgMHgwMTAyOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4QzMgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBCUkVW RSAqLwotICAgICAgY2FzZSAweDAwQzQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDNCAmIDB4 ZmYpKTsgICAgLyogQSBESUFFUkVTSVMgKi8KLSAgICAgIGNhc2UgMHgwMEM1OgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4QzUgJiAweGZmKSk7ICAgIC8qIEEgUklORyAqLwotICAgICAgY2FzZSAw eDAwQzY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDNiAmIDB4ZmYpKTsgICAgLyogTEFUSU4g Q0FQSVRBTCBMRVRURVIgQUUgKi8KLSAgICAgIGNhc2UgMHgwMEM3OgotICAgICAgICByZXR1cm4o KENIQVIpKDB4QzcgJiAweGZmKSk7ICAgIC8qIEMgQ0VESUxMQSAqLwotICAgICAgY2FzZSAweDAw Qzg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDOCAmIDB4ZmYpKTsgICAgLyogRSBHUkFWRSAq LwotICAgICAgY2FzZSAweDAwQzk6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDOSAmIDB4ZmYp KTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFICovCi0gICAgICBjYXNl IDB4MDBDQToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweENBICYgMHhmZikpOyAgICAvKiBFIFdJ VEggQ0lSQ1VNRkxFWCAqLwotICAgICAgY2FzZSAweDAwQ0I6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHhDQiAmIDB4ZmYpKTsgICAgLyogRSBXSVRIIERJQUVSRVNJUyAqLwotICAgICAgY2FzZSAw eDAzMDA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDQyAmIDB4ZmYpKTsgICAgLyogQ09NQklO SU5HIEdSQVZFIEFDQ0VOVCAqLwotICAgICAgY2FzZSAweDAwQ0Q6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHhDRCAmIDB4ZmYpKTsgICAgLyogSSBXSVRIIEFDVVRFICovCi0gICAgICBjYXNlIDB4 MDBDRToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweENFICYgMHhmZikpOyAgICAvKiBJIFdJVEgg Q0lSQ1VNRkxFWCAqLwotICAgICAgY2FzZSAweDAwQ0Y6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHhDRiAmIDB4ZmYpKTsgICAgLyogSSBXSVRIIERJQUVSRVNJUyAqLwotICAgICAgY2FzZSAweDAx MTA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEMCAmIDB4ZmYpKTsgICAgLyogRCBXSVRIIFNU Uk9LRSAqLwotICAgICAgY2FzZSAweDAwRDE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEMSAm IDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFICovCi0gICAg ICBjYXNlIDB4MDMwOToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQyICYgMHhmZikpOyAgICAv KiBDT01CSU5JTkcgSE9PSyBBQk9WRSAqLwotICAgICAgY2FzZSAweDAwRDM6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHhEMyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBX SVRIIEFDVVRFICovCi0gICAgICBjYXNlIDB4MDBENDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eEQ0ICYgMHhmZikpOyAgICAvKiBPIFdJVEggQ0lSQ1VNRkxFWCAqLwotICAgICAgY2FzZSAweDAx QTA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhENSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQ SVRBTCBMRVRURVIgTyBXSVRIIEhPUk4gKi8KLSAgICAgIGNhc2UgMHgwMEQ2OgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4RDYgJiAweGZmKSk7ICAgIC8qIE8gV0lUSCBESUFFUkVTSVMgKi8KLSAg ICAgIGNhc2UgMHgwMEQ3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RDcgJiAweGZmKSk7ICAg IC8qIE1VTFRJUExJQ0FUSU9OIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEQ4OgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4RDggJiAweGZmKSk7ICAgIC8qIE8gV0lUSCBTVFJPS0UgKi8KLSAgICAg IGNhc2UgMHgwMEQ5OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RDkgJiAweGZmKSk7ICAgIC8q IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRSAqLwotICAgICAgY2FzZSAweDAwREE6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEQSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRB TCBMRVRURVIgVSBXSVRIIEFDVVRFICovCi0gICAgICBjYXNlIDB4MDBEQjoKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweERCICYgMHhmZikpOyAgICAvKiBVIFdJVEggQ0lSQ1VNRkxFWCAqLwotICAg ICAgY2FzZSAweDAwREM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEQyAmIDB4ZmYpKTsgICAg LyogVSBXSVRIIERJQUVSRVNJUyAqLwotICAgICAgY2FzZSAweDAxQUY6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhERCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRI IEhPUk4gKi8KLSAgICAgIGNhc2UgMHgwMzAzOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4REUg JiAweGZmKSk7ICAgIC8qIENPTUJJTklORyBUSUxERSAqLwotICAgICAgY2FzZSAweDAwREY6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHhERiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVU VEVSIFNIQVJQIFMgKi8KLSAgICAgIGNhc2UgMHgwMEUwOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4RTAgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkUgKi8K LSAgICAgIGNhc2UgMHgwMEUxOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTEgJiAweGZmKSk7 ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEUgKi8KLSAgICAgIGNhc2UgMHgw MEUyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTIgJiAweGZmKSk7ICAgIC8qIFNNQUxMIEEg V0lUSCBDSVJDVU1GTEVYICovCi0gICAgICBjYXNlIDB4MDEwMzoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweEUzICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEJSRVZF ICovCi0gICAgICBjYXNlIDB4MDBFNDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEU0ICYgMHhm ZikpOyAgICAvKiBTTUFMTCBBIFdJVEggRElBRVJFU0lTICovCi0gICAgICBjYXNlIDB4MDBFNToK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEU1ICYgMHhmZikpOyAgICAvKiBTTUFMTCBBIFdJVEgg UklORyBBQk9WRSAqLwotICAgICAgY2FzZSAweDAwRTY6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHhFNiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEFFICovCi0gICAgICBjYXNl IDB4MDBFNzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEU3ICYgMHhmZikpOyAgICAvKiBMQVRJ TiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEgKi8KLSAgICAgIGNhc2UgMHgwMEU4OgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4RTggJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRF UiBFIFdJVEggR1JBVkUgKi8KLSAgICAgIGNhc2UgMHgwMEU5OgotICAgICAgICByZXR1cm4oKENI QVIpKDB4RTkgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUg Ki8KLSAgICAgIGNhc2UgMHgwMEVBOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RUEgJiAweGZm KSk7ICAgIC8qIFNNQUxMIEUgV0lUSCBDSVJDVU1GTEVYICovCi0gICAgICBjYXNlIDB4MDBFQjoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEVCICYgMHhmZikpOyAgICAvKiBTTUFMTCBFIFdJVEgg RElBRVJFU0lTICovCi0gICAgICBjYXNlIDB4MDMwMToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eEVDICYgMHhmZikpOyAgICAvKiBDT01CSU5JTkcgQUNVVEUgQUNDRU5UICovCi0gICAgICBjYXNl IDB4MDBFRDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEVEICYgMHhmZikpOyAgICAvKiBMQVRJ TiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFICovCi0gICAgICBjYXNlIDB4MDBFRToKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweEVFICYgMHhmZikpOyAgICAvKiBTTUFMTCBJIFdJVEggQ0lSQ1VN RkxFWCAqLwotICAgICAgY2FzZSAweDAwRUY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFRiAm IDB4ZmYpKTsgICAgLyogU01BTEwgSSBXSVRIIERJQUVSRVNJUyAqLwotICAgICAgY2FzZSAweDAx MTE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGMCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01B TEwgTEVUVEVSIEQgV0lUSCBTVFJPS0UgKi8KLSAgICAgIGNhc2UgMHgwMEYxOgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4RjEgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBOIFdJ VEggVElMREUgKi8KLSAgICAgIGNhc2UgMHgwMzIzOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 RjIgJiAweGZmKSk7ICAgIC8qIENPTUJJTklORyBET1QgQkVMT1cgKi8KLSAgICAgIGNhc2UgMHgw MEYzOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RjMgJiAweGZmKSk7ICAgIC8qIExBVElOIFNN QUxMIExFVFRFUiBPIFdJVEggQUNVVEUgKi8KLSAgICAgIGNhc2UgMHgwMEY0OgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4RjQgJiAweGZmKSk7ICAgIC8qIFNNQUxMIE8gV0lUSCBDSVJDVU1GTEVY ICovCi0gICAgICBjYXNlIDB4MDFBMToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEY1ICYgMHhm ZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEhPUk4gKi8KLSAgICAgIGNhc2Ug MHgwMEY2OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RjYgJiAweGZmKSk7ICAgIC8qIFNNQUxM IE8gV0lUSCBESUFFUkVTSVMgKi8KLSAgICAgIGNhc2UgMHgwMEY3OgotICAgICAgICByZXR1cm4o KENIQVIpKDB4RjcgJiAweGZmKSk7ICAgIC8qIERJVklTSU9OIFNJR04gKi8KLSAgICAgIGNhc2Ug MHgwMEY4OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RjggJiAweGZmKSk7ICAgIC8qIExBVElO IFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFICovCi0gICAgICBjYXNlIDB4MDBGOToKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweEY5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIg VSBXSVRIIEdSQVZFICovCi0gICAgICBjYXNlIDB4MDBGQToKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEZBICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFICov Ci0gICAgICBjYXNlIDB4MDBGQjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEZCICYgMHhmZikp OyAgICAvKiBTTUFMTCBVIFdJVEggQ0lSQ1VNRkxFWCAqLwotICAgICAgY2FzZSAweDAwRkM6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHhGQyAmIDB4ZmYpKTsgICAgLyogU01BTEwgVSBXSVRIIERJ QUVSRVNJUyAqLwotICAgICAgY2FzZSAweDAxQjA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhG RCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBIT1JOICovCi0gICAg ICBjYXNlIDB4MjBBQjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEZFICYgMHhmZikpOyAgICAv KiBET05HIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEZGOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4RkYgJiAweGZmKSk7ICAgIC8qIFNNQUxMIFkgV0lUSCBESUFFUkVTSVMgKi8KLSAgICBkZWZh dWx0OiByZXR1cm4oMHgwMDNmKTsKLSAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ29kZSBQYWdlIDAzNyAtIEVCQ0RJQyAoVS5TLikgKi8KLSNpZmRl ZiBDS19BTlNJQwotdHhfY3AzNyhVU0hPUlQgYykKLSNlbHNlCi10eF9jcDM3KGMpIFVTSE9SVCBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNl IDB4MDAwMDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDAwICYgMHhmZikpOyAgICAvKiBOVUxM ICovCi0gICAgICBjYXNlIDB4MDAwMToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDAxICYgMHhm ZikpOyAgICAvKiBTVEFSVCBPRiBIRUFESU5HICovCi0gICAgICBjYXNlIDB4MDAwMjoKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweDAyICYgMHhmZikpOyAgICAvKiBTVEFSVCBPRiBURVhUICovCi0g ICAgICBjYXNlIDB4MDAwMzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDAzICYgMHhmZikpOyAg ICAvKiBFTkQgT0YgVEVYVCAqLwotICAgICAgY2FzZSAweDAwOUM6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHgwNCAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLwotICAgICAgY2FzZSAweDAwMDk6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgwNSAmIDB4ZmYpKTsgICAgLyogSE9SSVpPTlRBTCBU QUJVTEFUSU9OICovCi0gICAgICBjYXNlIDB4MDA4NjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eDA2ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCi0gICAgICBjYXNlIDB4MDA3RjoKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweDA3ICYgMHhmZikpOyAgICAvKiBERUxFVEUgKi8KLSAgICAgIGNh c2UgMHgwMDk3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MDggJiAweGZmKSk7ICAgIC8qIENP TlRST0wgKi8KLSAgICAgIGNhc2UgMHgwMDhEOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MDkg JiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICAgIGNhc2UgMHgwMDhFOgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4MEEgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICAgIGNhc2Ug MHgwMDBCOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MEIgJiAweGZmKSk7ICAgIC8qIFZFUlRJ Q0FMIFRBQlVMQVRJT04gKi8KLSAgICAgIGNhc2UgMHgwMDBDOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4MEMgJiAweGZmKSk7ICAgIC8qIEZPUk0gRkVFRCAqLwotICAgICAgY2FzZSAweDAwMEQ6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgwRCAmIDB4ZmYpKTsgICAgLyogQ0FSUklBR0UgUkVU VVJOICovCi0gICAgICBjYXNlIDB4MDAwRToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDBFICYg MHhmZikpOyAgICAvKiBTSElGVCBPVVQgKi8KLSAgICAgIGNhc2UgMHgwMDBGOgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4MEYgJiAweGZmKSk7ICAgIC8qIFNISUZUIElOICovCi0gICAgICBjYXNl IDB4MDAxMDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDEwICYgMHhmZikpOyAgICAvKiBEQVRB IExJTksgRVNDQVBFICovCi0gICAgICBjYXNlIDB4MDAxMToKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweDExICYgMHhmZikpOyAgICAvKiBERVZJQ0UgQ09OVFJPTCBPTkUgKi8KLSAgICAgIGNhc2Ug MHgwMDEyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MTIgJiAweGZmKSk7ICAgIC8qIERFVklD RSBDT05UUk9MIFRXTyAqLwotICAgICAgY2FzZSAweDAwMTM6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHgxMyAmIDB4ZmYpKTsgICAgLyogREVWSUNFIENPTlRST0wgVEhSRUUgKi8KLSAgICAgIGNh c2UgMHgwMDlEOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MTQgJiAweGZmKSk7ICAgIC8qIENP TlRST0wgKi8KLSAgICAgIGNhc2UgMHgwMDg1OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MTUg JiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICAgIGNhc2UgMHgwMDA4OgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4MTYgJiAweGZmKSk7ICAgIC8qIEJBQ0tTUEFDRSAqLwotICAgICAgY2Fz ZSAweDAwODc6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgxNyAmIDB4ZmYpKTsgICAgLyogQ09O VFJPTCAqLwotICAgICAgY2FzZSAweDAwMTg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgxOCAm IDB4ZmYpKTsgICAgLyogQ0FOQ0VMICovCi0gICAgICBjYXNlIDB4MDAxOToKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweDE5ICYgMHhmZikpOyAgICAvKiBFTkQgT0YgTUVESVVNICovCi0gICAgICBj YXNlIDB4MDA5MjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDFBICYgMHhmZikpOyAgICAvKiBD T05UUk9MICovCi0gICAgICBjYXNlIDB4MDA4RjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDFC ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCi0gICAgICBjYXNlIDB4MDAxQzoKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweDFDICYgMHhmZikpOyAgICAvKiBGSUxFIFNFUEFSQVRPUiAqLwotICAg ICAgY2FzZSAweDAwMUQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgxRCAmIDB4ZmYpKTsgICAg LyogR1JPVVAgU0VQQVJBVE9SICovCi0gICAgICBjYXNlIDB4MDAxRToKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweDFFICYgMHhmZikpOyAgICAvKiBSRUNPUkQgU0VQQVJBVE9SICovCi0gICAgICBj YXNlIDB4MDAxRjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDFGICYgMHhmZikpOyAgICAvKiBV TklUIFNFUEFSQVRPUiAqLwotICAgICAgY2FzZSAweDAwODA6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHgyMCAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLwotICAgICAgY2FzZSAweDAwODE6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHgyMSAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLwotICAg ICAgY2FzZSAweDAwODI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgyMiAmIDB4ZmYpKTsgICAg LyogQ09OVFJPTCAqLwotICAgICAgY2FzZSAweDAwODM6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHgyMyAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLwotICAgICAgY2FzZSAweDAwODQ6Ci0gICAg ICAgIHJldHVybigoQ0hBUikoMHgyNCAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLwotICAgICAg Y2FzZSAweDAwMEE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgyNSAmIDB4ZmYpKTsgICAgLyog TElORSBGRUVEICovCi0gICAgICBjYXNlIDB4MDAxNzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eDI2ICYgMHhmZikpOyAgICAvKiBFTkQgT0YgVFJBTlNNSVNTSU9OIEJMT0NLICovCi0gICAgICBj YXNlIDB4MDAxQjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDI3ICYgMHhmZikpOyAgICAvKiBF U0NBUEUgKi8KLSAgICAgIGNhc2UgMHgwMDg4OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4Mjgg JiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICAgIGNhc2UgMHgwMDg5OgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4MjkgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICAgIGNhc2Ug MHgwMDhBOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MkEgJiAweGZmKSk7ICAgIC8qIENPTlRS T0wgKi8KLSAgICAgIGNhc2UgMHgwMDhCOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MkIgJiAw eGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICAgIGNhc2UgMHgwMDhDOgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4MkMgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICAgIGNhc2UgMHgw MDA1OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MkQgJiAweGZmKSk7ICAgIC8qIEVOUVVJUlkg Ki8KLSAgICAgIGNhc2UgMHgwMDA2OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MkUgJiAweGZm KSk7ICAgIC8qIEFDS05PV0xFREdFICovCi0gICAgICBjYXNlIDB4MDAwNzoKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweDJGICYgMHhmZikpOyAgICAvKiBCRUxMICovCi0gICAgICBjYXNlIDB4MDA5 MDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDMwICYgMHhmZikpOyAgICAvKiBDT05UUk9MICov Ci0gICAgICBjYXNlIDB4MDA5MToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDMxICYgMHhmZikp OyAgICAvKiBDT05UUk9MICovCi0gICAgICBjYXNlIDB4MDAxNjoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweDMyICYgMHhmZikpOyAgICAvKiBTWU5DSFJPTk9VUyBJRExFICovCi0gICAgICBjYXNl IDB4MDA5MzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDMzICYgMHhmZikpOyAgICAvKiBDT05U Uk9MICovCi0gICAgICBjYXNlIDB4MDA5NDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDM0ICYg MHhmZikpOyAgICAvKiBDT05UUk9MICovCi0gICAgICBjYXNlIDB4MDA5NToKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweDM1ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCi0gICAgICBjYXNlIDB4 MDA5NjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDM2ICYgMHhmZikpOyAgICAvKiBDT05UUk9M ICovCi0gICAgICBjYXNlIDB4MDAwNDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDM3ICYgMHhm ZikpOyAgICAvKiBFTkQgT0YgVFJBTlNNSVNTSU9OICovCi0gICAgICBjYXNlIDB4MDA5ODoKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweDM4ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCi0gICAg ICBjYXNlIDB4MDA5OToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDM5ICYgMHhmZikpOyAgICAv KiBDT05UUk9MICovCi0gICAgICBjYXNlIDB4MDA5QToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eDNBICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCi0gICAgICBjYXNlIDB4MDA5QjoKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweDNCICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCi0gICAgICBj YXNlIDB4MDAxNDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDNDICYgMHhmZikpOyAgICAvKiBE RVZJQ0UgQ09OVFJPTCBGT1VSICovCi0gICAgICBjYXNlIDB4MDAxNToKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweDNEICYgMHhmZikpOyAgICAvKiBORUdBVElWRSBBQ0tOT1dMRURHRSAqLwotICAg ICAgY2FzZSAweDAwOUU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgzRSAmIDB4ZmYpKTsgICAg LyogQ09OVFJPTCAqLwotICAgICAgY2FzZSAweDAwMUE6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHgzRiAmIDB4ZmYpKTsgICAgLyogU1VCU1RJVFVURSAqLwotICAgICAgY2FzZSAweDAwMjA6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHg0MCAmIDB4ZmYpKTsgICAgLyogU1BBQ0UgKi8KLSAgICAg IGNhc2UgMHgwMEEwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NDEgJiAweGZmKSk7ICAgIC8q IE5PLUJSRUFLIFNQQUNFICovCi0gICAgICBjYXNlIDB4MDBFMjoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweDQyICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgg Ki8KLSAgICAgIGNhc2UgMHgwMEU0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NDMgJiAweGZm KSk7ICAgIC8qIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTICovCi0gICAgICBjYXNlIDB4 MDBFMDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDQ0ICYgMHhmZikpOyAgICAvKiBMQVRJTiBT TUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFICovCi0gICAgICBjYXNlIDB4MDBFMToKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweDQ1ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgQSBX SVRIIEFDVVRFICovCi0gICAgICBjYXNlIDB4MDBFMzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eDQ2ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFICovCi0g ICAgICBjYXNlIDB4MDBFNToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDQ3ICYgMHhmZikpOyAg ICAvKiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUgKi8KLSAgICAgIGNhc2UgMHgwMEU3 OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NDggJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxM IExFVFRFUiBDIFdJVEggQ0VESUxMQSAqLwotICAgICAgY2FzZSAweDAwRjE6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHg0OSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lU SCBUSUxERSAqLwotICAgICAgY2FzZSAweDAwQTI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg0 QSAmIDB4ZmYpKTsgICAgLyogQ0VOVCBTSUdOICovCi0gICAgICBjYXNlIDB4MDAyRToKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweDRCICYgMHhmZikpOyAgICAvKiBGVUxMIFNUT1AgKi8KLSAgICAg IGNhc2UgMHgwMDNDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NEMgJiAweGZmKSk7ICAgIC8q IExFU1MtVEhBTiBTSUdOICovCi0gICAgICBjYXNlIDB4MDAyODoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweDREICYgMHhmZikpOyAgICAvKiBMRUZUIFBBUkVOVEhFU0lTICovCi0gICAgICBjYXNl IDB4MDAyQjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDRFICYgMHhmZikpOyAgICAvKiBQTFVT IFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMDdDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NEYg JiAweGZmKSk7ICAgIC8qIFZFUlRJQ0FMIExJTkUgKi8KLSAgICAgIGNhc2UgMHgwMDI2OgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4NTAgJiAweGZmKSk7ICAgIC8qIEFNUEVSU0FORCAqLwotICAg ICAgY2FzZSAweDAwRTk6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg1MSAmIDB4ZmYpKTsgICAg LyogU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURSAqLwotICAgICAgY2FzZSAweDAwRUE6Ci0gICAg ICAgIHJldHVybigoQ0hBUikoMHg1MiAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIEUgV0lU SCBDSVJDVU1GTEVYICovCi0gICAgICBjYXNlIDB4MDBFQjoKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweDUzICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUyAqLwot ICAgICAgY2FzZSAweDAwRTg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg1NCAmIDB4ZmYpKTsg ICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRSAqLwotICAgICAgY2FzZSAweDAw RUQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg1NSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01B TEwgTEVUVEVSIEkgV0lUSCBBQ1VURSAqLwotICAgICAgY2FzZSAweDAwRUU6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHg1NiAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJD VU1GTEVYICovCi0gICAgICBjYXNlIDB4MDBFRjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDU3 ICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUyAqLwotICAgICAg Y2FzZSAweDAwRUM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg1OCAmIDB4ZmYpKTsgICAgLyog TEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRSAqLwotICAgICAgY2FzZSAweDAwREY6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHg1OSAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIFNI QVJQIFMgKEdFUk1BTikgKi8KLSAgICAgIGNhc2UgMHgwMDIxOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4NUEgJiAweGZmKSk7ICAgIC8qIEVYQ0xBTUFUSU9OIE1BUksgKi8KLSAgICAgIGNhc2Ug MHgwMDI0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NUIgJiAweGZmKSk7ICAgIC8qIERPTExB UiBTSUdOICovCi0gICAgICBjYXNlIDB4MDAyQToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDVD ICYgMHhmZikpOyAgICAvKiBBU1RFUklTSyAqLwotICAgICAgY2FzZSAweDAwMjk6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHg1RCAmIDB4ZmYpKTsgICAgLyogUklHSFQgUEFSRU5USEVTSVMgKi8K LSAgICAgIGNhc2UgMHgwMDNCOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NUUgJiAweGZmKSk7 ICAgIC8qIFNFTUlDT0xPTiAqLwotICAgICAgY2FzZSAweDAwQUM6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHg1RiAmIDB4ZmYpKTsgICAgLyogTk9UIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMDJE OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NjAgJiAweGZmKSk7ICAgIC8qIEhZUEhFTi1NSU5V UyAqLwotICAgICAgY2FzZSAweDAwMkY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg2MSAmIDB4 ZmYpKTsgICAgLyogU09MSURVUyAqLwotICAgICAgY2FzZSAweDAwQzI6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHg2MiAmIDB4ZmYpKTsgICAgLyogQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNV TUZMRVggKi8KLSAgICAgIGNhc2UgMHgwMEM0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NjMg JiAweGZmKSk7ICAgIC8qIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMgKi8KLSAgICAg IGNhc2UgMHgwMEMwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NjQgJiAweGZmKSk7ICAgIC8q IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRSAqLwotICAgICAgY2FzZSAweDAwQzE6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg2NSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRB TCBMRVRURVIgQSBXSVRIIEFDVVRFICovCi0gICAgICBjYXNlIDB4MDBDMzoKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweDY2ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJ VEggVElMREUgKi8KLSAgICAgIGNhc2UgMHgwMEM1OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 NjcgJiAweGZmKSk7ICAgIC8qIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFICovCi0g ICAgICBjYXNlIDB4MDBDNzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDY4ICYgMHhmZikpOyAg ICAvKiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQSAqLwotICAgICAgY2FzZSAweDAwRDE6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg2OSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRB TCBMRVRURVIgTiBXSVRIIFRJTERFICovCi0gICAgICBjYXNlIDB4MDBBNjoKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweDZBICYgMHhmZikpOyAgICAvKiBCUk9LRU4gQkFSICovCi0gICAgICBjYXNl IDB4MDAyQzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDZCICYgMHhmZikpOyAgICAvKiBDT01N QSAqLwotICAgICAgY2FzZSAweDAwMjU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg2QyAmIDB4 ZmYpKTsgICAgLyogUEVSQ0VOVCBTSUdOICovCi0gICAgICBjYXNlIDB4MDA1RjoKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweDZEICYgMHhmZikpOyAgICAvKiBMT1cgTElORSAqLwotICAgICAgY2Fz ZSAweDAwM0U6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg2RSAmIDB4ZmYpKTsgICAgLyogR1JF QVRFUi1USEFOIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMDNGOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4NkYgJiAweGZmKSk7ICAgIC8qIFFVRVNUSU9OIE1BUksgKi8KLSAgICAgIGNhc2UgMHgw MEY4OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NzAgJiAweGZmKSk7ICAgIC8qIExBVElOIFNN QUxMIExFVFRFUiBPIFdJVEggU1RST0tFICovCi0gICAgICBjYXNlIDB4MDBDOToKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweDcxICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBF IFdJVEggQUNVVEUgKi8KLSAgICAgIGNhc2UgMHgwMENBOgotICAgICAgICAvKiBMQVRJTiBDQVBJ VEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWCAqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4 NzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBDQjoKLSAgICAgICAgLyogTEFUSU4gQ0FQSVRB TCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUyAqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4NzMg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBDODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDc0 ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkUgKi8KLSAg ICAgIGNhc2UgMHgwMENEOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NzUgJiAweGZmKSk7ICAg IC8qIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURSAqLwotICAgICAgY2FzZSAweDAw Q0U6Ci0gICAgICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYICov Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg3NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMENG OgotICAgICAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTICovCi0g ICAgICAgIHJldHVybigoQ0hBUikoMHg3NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMENDOgot ICAgICAgICByZXR1cm4oKENIQVIpKDB4NzggJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwg TEVUVEVSIEkgV0lUSCBHUkFWRSAqLwotICAgICAgY2FzZSAweDAwNjA6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHg3OSAmIDB4ZmYpKTsgICAgLyogR1JBVkUgQUNDRU5UICovCi0gICAgICBjYXNl IDB4MDAzQToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDdBICYgMHhmZikpOyAgICAvKiBDT0xP TiAqLwotICAgICAgY2FzZSAweDAwMjM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg3QiAmIDB4 ZmYpKTsgICAgLyogTlVNQkVSIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMDQwOgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4N0MgJiAweGZmKSk7ICAgIC8qIENPTU1FUkNJQUwgQVQgKi8KLSAgICAg IGNhc2UgMHgwMDI3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4N0QgJiAweGZmKSk7ICAgIC8q IEFQT1NUUk9QSEUgKi8KLSAgICAgIGNhc2UgMHgwMDNEOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4N0UgJiAweGZmKSk7ICAgIC8qIEVRVUFMUyBTSUdOICovCi0gICAgICBjYXNlIDB4MDAyMjoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweDdGICYgMHhmZikpOyAgICAvKiBRVU9UQVRJT04gTUFS SyAqLwotICAgICAgY2FzZSAweDAwRDg6Ci0gICAgICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVS IE8gV0lUSCBTVFJPS0UgKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDgwICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwNjE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4MSAmIDB4ZmYpKTsg ICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEEgKi8KLSAgICAgIGNhc2UgMHgwMDYyOgotICAgICAg ICByZXR1cm4oKENIQVIpKDB4ODIgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBC ICovCi0gICAgICBjYXNlIDB4MDA2MzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDgzICYgMHhm ZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgQyAqLwotICAgICAgY2FzZSAweDAwNjQ6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHg4NCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVU VEVSIEQgKi8KLSAgICAgIGNhc2UgMHgwMDY1OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4ODUg JiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBFICovCi0gICAgICBjYXNlIDB4MDA2 NjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDg2ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFM TCBMRVRURVIgRiAqLwotICAgICAgY2FzZSAweDAwNjc6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHg4NyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEcgKi8KLSAgICAgIGNhc2Ug MHgwMDY4OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4ODggJiAweGZmKSk7ICAgIC8qIExBVElO IFNNQUxMIExFVFRFUiBIICovCi0gICAgICBjYXNlIDB4MDA2OToKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweDg5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgSSAqLwotICAgICAg Y2FzZSAweDAwQUI6Ci0gICAgICAgIC8qIExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RB VElPTiBNQVJLICovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHg4QSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMEJCOgotICAgICAgICAvKiBSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVP VEFUSU9OIE1BUiBLKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDhCICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwRjA6Ci0gICAgICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBFVEggKElDRUxB TkRJQykgKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDhDICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwRkQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4RCAmIDB4ZmYpKTsgICAgLyogTEFU SU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURSAqLwotICAgICAgY2FzZSAweDAwRkU6Ci0gICAg ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBUSE9STiAoSUNFTEFORElDKSAqLwotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4OEUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCMToKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweDhGICYgMHhmZikpOyAgICAvKiBQTFVTLU1JTlVTIFNJR04gKi8KLSAg ICAgIGNhc2UgMHgwMEIwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTAgJiAweGZmKSk7ICAg IC8qIERFR1JFRSBTSUdOICovCi0gICAgICBjYXNlIDB4MDA2QToKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweDkxICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgSiAqLwotICAgICAg Y2FzZSAweDAwNkI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5MiAmIDB4ZmYpKTsgICAgLyog TEFUSU4gU01BTEwgTEVUVEVSIEsgKi8KLSAgICAgIGNhc2UgMHgwMDZDOgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4OTMgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBMICovCi0g ICAgICBjYXNlIDB4MDA2RDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDk0ICYgMHhmZikpOyAg ICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgTSAqLwotICAgICAgY2FzZSAweDAwNkU6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHg5NSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIE4g Ki8KLSAgICAgIGNhc2UgMHgwMDZGOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTYgJiAweGZm KSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBPICovCi0gICAgICBjYXNlIDB4MDA3MDoKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweDk3ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRU RVIgUCAqLwotICAgICAgY2FzZSAweDAwNzE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5OCAm IDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIFEgKi8KLSAgICAgIGNhc2UgMHgwMDcy OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTkgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxM IExFVFRFUiBSICovCi0gICAgICBjYXNlIDB4MDBBQToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eDlBICYgMHhmZikpOyAgICAvKiBGRU1JTklORSBPUkRJTkFMIElORElDQVRPUiAqLwotICAgICAg Y2FzZSAweDAwQkE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5QiAmIDB4ZmYpKTsgICAgLyog TUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SICovCi0gICAgICBjYXNlIDB4MDBFNjoKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweDlDICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMSUdBVFVS RSBBRSAqLwotICAgICAgY2FzZSAweDAwQjg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5RCAm IDB4ZmYpKTsgICAgLyogQ0VESUxMQSAqLwotICAgICAgY2FzZSAweDAwQzY6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHg5RSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMSUdBVFVSRSBB RSAqLwotICAgICAgY2FzZSAweDAwQTQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5RiAmIDB4 ZmYpKTsgICAgLyogQ1VSUkVOQ1kgU0lHTiAqLwotICAgICAgY2FzZSAweDAwQjU6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHhBMCAmIDB4ZmYpKTsgICAgLyogTUlDUk8gU0lHTiAqLwotICAgICAg Y2FzZSAweDAwN0U6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBMSAmIDB4ZmYpKTsgICAgLyog VElMREUgKi8KLSAgICAgIGNhc2UgMHgwMDczOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTIg JiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBTICovCi0gICAgICBjYXNlIDB4MDA3 NDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEEzICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFM TCBMRVRURVIgVCAqLwotICAgICAgY2FzZSAweDAwNzU6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHhBNCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIFUgKi8KLSAgICAgIGNhc2Ug MHgwMDc2OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTUgJiAweGZmKSk7ICAgIC8qIExBVElO IFNNQUxMIExFVFRFUiBWICovCi0gICAgICBjYXNlIDB4MDA3NzoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweEE2ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgVyAqLwotICAgICAg Y2FzZSAweDAwNzg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBNyAmIDB4ZmYpKTsgICAgLyog TEFUSU4gU01BTEwgTEVUVEVSIFggKi8KLSAgICAgIGNhc2UgMHgwMDc5OgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4QTggJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBZICovCi0g ICAgICBjYXNlIDB4MDA3QToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEE5ICYgMHhmZikpOyAg ICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgWiAqLwotICAgICAgY2FzZSAweDAwQTE6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHhBQSAmIDB4ZmYpKTsgICAgLyogSU5WRVJURUQgRVhDTEFNQVRJT04g TUFSSyAqLwotICAgICAgY2FzZSAweDAwQkY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBQiAm IDB4ZmYpKTsgICAgLyogSU5WRVJURUQgUVVFU1RJT04gTUFSSyAqLwotICAgICAgY2FzZSAweDAw RDA6Ci0gICAgICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEVUSCAoSUNFTEFORElDKSAqLwot ICAgICAgICByZXR1cm4oKENIQVIpKDB4QUMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBERDoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEFEICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFM IExFVFRFUiBZIFdJVEggQUNVVEUgKi8KLSAgICAgIGNhc2UgMHgwMERFOgotICAgICAgICAvKiBM QVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STiAoSUNFTEFORElDKSAqLwotICAgICAgICByZXR1cm4o KENIQVIpKDB4QUUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBRToKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweEFGICYgMHhmZikpOyAgICAvKiBSRUdJU1RFUkVEIFNJR04gKi8KLSAgICAgIGNh c2UgMHgwMDVFOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QjAgJiAweGZmKSk7ICAgIC8qIENJ UkNVTUZMRVggQUNDRU5UICovCi0gICAgICBjYXNlIDB4MDBBMzoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweEIxICYgMHhmZikpOyAgICAvKiBQT1VORCBTSUdOICovCi0gICAgICBjYXNlIDB4MDBB NToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEIyICYgMHhmZikpOyAgICAvKiBZRU4gU0lHTiAq LwotICAgICAgY2FzZSAweDAwQjc6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCMyAmIDB4ZmYp KTsgICAgLyogTUlERExFIERPVCAqLwotICAgICAgY2FzZSAweDAwQTk6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhCNCAmIDB4ZmYpKTsgICAgLyogQ09QWVJJR0hUIFNJR04gKi8KLSAgICAgIGNh c2UgMHgwMEE3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QjUgJiAweGZmKSk7ICAgIC8qIFNF Q1RJT04gU0lHTiAqLwotICAgICAgY2FzZSAweDAwQjY6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHhCNiAmIDB4ZmYpKTsgICAgLyogUElMQ1JPVyBTSUdOICovCi0gICAgICBjYXNlIDB4MDBCQzoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEI3ICYgMHhmZikpOyAgICAvKiBWVUxHQVIgRlJBQ1RJ T04gT05FIFFVQVJURVIgKi8KLSAgICAgIGNhc2UgMHgwMEJEOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4QjggJiAweGZmKSk7ICAgIC8qIFZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRiAqLwotICAg ICAgY2FzZSAweDAwQkU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCOSAmIDB4ZmYpKTsgICAg LyogVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTICovCi0gICAgICBjYXNlIDB4MDA1QjoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEJBICYgMHhmZikpOyAgICAvKiBMRUZUIFNRVUFSRSBC UkFDS0VUICovCi0gICAgICBjYXNlIDB4MDA1RDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEJC ICYgMHhmZikpOyAgICAvKiBSSUdIVCBTUVVBUkUgQlJBQ0tFVCAqLwotICAgICAgY2FzZSAweDAw QUY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCQyAmIDB4ZmYpKTsgICAgLyogTUFDUk9OICov Ci0gICAgICBjYXNlIDB4MDBBODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEJEICYgMHhmZikp OyAgICAvKiBESUFFUkVTSVMgKi8KLSAgICAgIGNhc2UgMHgwMEI0OgotICAgICAgICByZXR1cm4o KENIQVIpKDB4QkUgJiAweGZmKSk7ICAgIC8qIEFDVVRFIEFDQ0VOVCAqLwotICAgICAgY2FzZSAw eDAwRDc6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCRiAmIDB4ZmYpKTsgICAgLyogTVVMVElQ TElDQVRJT04gU0lHTiAqLwotICAgICAgY2FzZSAweDAwN0I6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHhDMCAmIDB4ZmYpKTsgICAgLyogTEVGVCBDVVJMWSBCUkFDS0VUICovCi0gICAgICBjYXNl IDB4MDA0MToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEMxICYgMHhmZikpOyAgICAvKiBMQVRJ TiBDQVBJVEFMIExFVFRFUiBBICovCi0gICAgICBjYXNlIDB4MDA0MjoKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweEMyICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBCICovCi0g ICAgICBjYXNlIDB4MDA0MzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEMzICYgMHhmZikpOyAg ICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBDICovCi0gICAgICBjYXNlIDB4MDA0NDoKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweEM0ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRF UiBEICovCi0gICAgICBjYXNlIDB4MDA0NToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEM1ICYg MHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFICovCi0gICAgICBjYXNlIDB4MDA0 NjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEM2ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJ VEFMIExFVFRFUiBGICovCi0gICAgICBjYXNlIDB4MDA0NzoKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEM3ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBHICovCi0gICAgICBj YXNlIDB4MDA0ODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEM4ICYgMHhmZikpOyAgICAvKiBM QVRJTiBDQVBJVEFMIExFVFRFUiBIICovCi0gICAgICBjYXNlIDB4MDA0OToKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweEM5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJICov Ci0gICAgICBjYXNlIDB4MDBBRDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweENBICYgMHhmZikp OyAgICAvKiBTT0ZUIEhZUEhFTiAqLwotICAgICAgY2FzZSAweDAwRjQ6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhDQiAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1G TEVYICovCi0gICAgICBjYXNlIDB4MDBGNjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweENDICYg MHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUyAqLwotICAgICAgY2Fz ZSAweDAwRjI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDRCAmIDB4ZmYpKTsgICAgLyogTEFU SU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRSAqLwotICAgICAgY2FzZSAweDAwRjM6Ci0gICAg ICAgIHJldHVybigoQ0hBUikoMHhDRSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVS IE8gV0lUSCBBQ1VURSAqLwotICAgICAgY2FzZSAweDAwRjU6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHhDRiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERSAq LwotICAgICAgY2FzZSAweDAwN0Q6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEMCAmIDB4ZmYp KTsgICAgLyogUklHSFQgQ1VSTFkgQlJBQ0tFVCAqLwotICAgICAgY2FzZSAweDAwNEE6Ci0gICAg ICAgIHJldHVybigoQ0hBUikoMHhEMSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRU RVIgSiAqLwotICAgICAgY2FzZSAweDAwNEI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEMiAm IDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgSyAqLwotICAgICAgY2FzZSAweDAw NEM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEMyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQ SVRBTCBMRVRURVIgTCAqLwotICAgICAgY2FzZSAweDAwNEQ6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHhENCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgTSAqLwotICAgICAg Y2FzZSAweDAwNEU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhENSAmIDB4ZmYpKTsgICAgLyog TEFUSU4gQ0FQSVRBTCBMRVRURVIgTiAqLwotICAgICAgY2FzZSAweDAwNEY6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHhENiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyAq LwotICAgICAgY2FzZSAweDAwNTA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhENyAmIDB4ZmYp KTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgUCAqLwotICAgICAgY2FzZSAweDAwNTE6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHhEOCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBM RVRURVIgUSAqLwotICAgICAgY2FzZSAweDAwNTI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhE OSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgUiAqLwotICAgICAgY2FzZSAw eDAwQjk6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEQSAmIDB4ZmYpKTsgICAgLyogU1VQRVJT Q1JJUFQgT05FICovCi0gICAgICBjYXNlIDB4MDBGQjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eERCICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVggKi8KLSAg ICAgIGNhc2UgMHgwMEZDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4REMgJiAweGZmKSk7ICAg IC8qIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTICovCi0gICAgICBjYXNlIDB4MDBGOToK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEREICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIg VSBXSVRIIEdSQVZFICovCi0gICAgICBjYXNlIDB4MDBGQToKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweERFICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFICovCi0gICAg ICBjYXNlIDB4MDBGRjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweERGICYgMHhmZikpOyAgICAv KiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUyAqLwotICAgICAgY2FzZSAweDAwNUM6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHhFMCAmIDB4ZmYpKTsgICAgLyogUkVWRVJTRSBTT0xJRFVT ICovCi0gICAgICBjYXNlIDB4MDBGNzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEUxICYgMHhm ZikpOyAgICAvKiBESVZJU0lPTiBTSUdOICovCi0gICAgICBjYXNlIDB4MDA1MzoKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweEUyICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBT ICovCi0gICAgICBjYXNlIDB4MDA1NDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEUzICYgMHhm ZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBUICovCi0gICAgICBjYXNlIDB4MDA1NToK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEU0ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFM IExFVFRFUiBVICovCi0gICAgICBjYXNlIDB4MDA1NjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eEU1ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBWICovCi0gICAgICBjYXNl IDB4MDA1NzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEU2ICYgMHhmZikpOyAgICAvKiBMQVRJ TiBDQVBJVEFMIExFVFRFUiBXICovCi0gICAgICBjYXNlIDB4MDA1ODoKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweEU3ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBYICovCi0g ICAgICBjYXNlIDB4MDA1OToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEU4ICYgMHhmZikpOyAg ICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZICovCi0gICAgICBjYXNlIDB4MDA1QToKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweEU5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRF UiBaICovCi0gICAgICBjYXNlIDB4MDBCMjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEVBICYg MHhmZikpOyAgICAvKiBTVVBFUlNDUklQVCBUV08gKi8KLSAgICAgIGNhc2UgMHgwMEQ0OgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4RUIgJiAweGZmKSk7ICAgIC8qIENBUElUQUwgTEVUVEVSIE8g V0lUSCBDSVJDVU1GTEVYICovCi0gICAgICBjYXNlIDB4MDBENjoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweEVDICYgMHhmZikpOyAgICAvKiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lT ICovCi0gICAgICBjYXNlIDB4MDBEMjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEVEICYgMHhm ZikpOyAgICAvKiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkUgKi8KLSAgICAgIGNhc2UgMHgw MEQzOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RUUgJiAweGZmKSk7ICAgIC8qIENBUElUQUwg TEVUVEVSIE8gV0lUSCBBQ1VURSAqLwotICAgICAgY2FzZSAweDAwRDU6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhFRiAmIDB4ZmYpKTsgICAgLyogQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERF ICovCi0gICAgICBjYXNlIDB4MDAzMDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEYwICYgMHhm ZikpOyAgICAvKiBESUdJVCBaRVJPICovCi0gICAgICBjYXNlIDB4MDAzMToKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweEYxICYgMHhmZikpOyAgICAvKiBESUdJVCBPTkUgKi8KLSAgICAgIGNhc2Ug MHgwMDMyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RjIgJiAweGZmKSk7ICAgIC8qIERJR0lU IFRXTyAqLwotICAgICAgY2FzZSAweDAwMzM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGMyAm IDB4ZmYpKTsgICAgLyogRElHSVQgVEhSRUUgKi8KLSAgICAgIGNhc2UgMHgwMDM0OgotICAgICAg ICByZXR1cm4oKENIQVIpKDB4RjQgJiAweGZmKSk7ICAgIC8qIERJR0lUIEZPVVIgKi8KLSAgICAg IGNhc2UgMHgwMDM1OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RjUgJiAweGZmKSk7ICAgIC8q IERJR0lUIEZJVkUgKi8KLSAgICAgIGNhc2UgMHgwMDM2OgotICAgICAgICByZXR1cm4oKENIQVIp KDB4RjYgJiAweGZmKSk7ICAgIC8qIERJR0lUIFNJWCAqLwotICAgICAgY2FzZSAweDAwMzc6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHhGNyAmIDB4ZmYpKTsgICAgLyogRElHSVQgU0VWRU4gKi8K LSAgICAgIGNhc2UgMHgwMDM4OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RjggJiAweGZmKSk7 ICAgIC8qIERJR0lUIEVJR0hUICovCi0gICAgICBjYXNlIDB4MDAzOToKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweEY5ICYgMHhmZikpOyAgICAvKiBESUdJVCBOSU5FICovCi0gICAgICBjYXNlIDB4 MDBCMzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEZBICYgMHhmZikpOyAgICAvKiBTVVBFUlND UklQVCBUSFJFRSAqLwotICAgICAgY2FzZSAweDAwREI6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHhGQiAmIDB4ZmYpKTsgICAgLyogQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVggKi8K LSAgICAgIGNhc2UgMHgwMERDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RkMgJiAweGZmKSk7 ICAgIC8qIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMgKi8KLSAgICAgIGNhc2UgMHgw MEQ5OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RkQgJiAweGZmKSk7ICAgIC8qIExBVElOIENB UElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRSAqLwotICAgICAgY2FzZSAweDAwREE6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHhGRSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIg VSBXSVRIIEFDVVRFICovCi0gICAgICBjYXNlIDB4MDA5RjoKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEZGICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCi0gICAgZGVmYXVsdDogcmV0dXJuKDB4 MDAzZik7Ci0gICAgfQotfQotCi0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQQyBDb2RlIFBhZ2UgODU1ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2NwODU1KFVT SE9SVCBjKQotI2Vsc2UKLXR4X2NwODU1KGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17Ci0gICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMx IGdyYXBoaWNzICovCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNo IChjKSB7Ci0gICAgICBjYXNlIDB4MDBhNDogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKSgyNTMgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBhYjogcmV0dXJuKChDSEFSKSgxNzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiYjog cmV0dXJuKChDSEFSKSgxNzUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwMTogcmV0dXJuKChD SEFSKSgxMzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwMjogcmV0dXJuKChDSEFSKSgxMjkg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwMzogcmV0dXJuKChDSEFSKSgxMzEgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQwNDogcmV0dXJuKChDSEFSKSgxMzUgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQwNTogcmV0dXJuKChDSEFSKSgxMzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQw NjogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwNzogcmV0dXJu KChDSEFSKSgxNDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwODogcmV0dXJuKChDSEFSKSgx NDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwOTogcmV0dXJuKChDSEFSKSgxNDUgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQwYTogcmV0dXJuKChDSEFSKSgxNDcgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQwYjogcmV0dXJuKChDSEFSKSgxNDkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQwYzogcmV0dXJuKChDSEFSKSgxNTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwZTogcmV0 dXJuKChDSEFSKSgxNTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwZjogcmV0dXJuKChDSEFS KSgxNTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxMDogcmV0dXJuKChDSEFSKSgxNjEgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxMTogcmV0dXJuKChDSEFSKSgxNjMgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQxMjogcmV0dXJuKChDSEFSKSgyMzYgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQxMzogcmV0dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxNDog cmV0dXJuKChDSEFSKSgxNjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxNTogcmV0dXJuKChD SEFSKSgxNjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxNjogcmV0dXJuKChDSEFSKSgyMzQg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxNzogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQxODogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQxOTogcmV0dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQx YTogcmV0dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxYjogcmV0dXJu KChDSEFSKSgyMDkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxYzogcmV0dXJuKChDSEFSKSgy MTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxZDogcmV0dXJuKChDSEFSKSgyMTMgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQxZTogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQxZjogcmV0dXJuKChDSEFSKSgyMjEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQyMDogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyMTogcmV0 dXJuKChDSEFSKSgyMjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyMjogcmV0dXJuKChDSEFS KSgyMzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyMzogcmV0dXJuKChDSEFSKSgyMzIgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyNDogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQyNTogcmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQyNjogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyNzog cmV0dXJuKChDSEFSKSgyNTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyODogcmV0dXJuKChD SEFSKSgyNDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyOTogcmV0dXJuKChDSEFSKSgyNTAg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyYTogcmV0dXJuKChDSEFSKSgxNTkgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQyYjogcmV0dXJuKChDSEFSKSgyNDIgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQyYzogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQy ZDogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyZTogcmV0dXJu KChDSEFSKSgxNTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyZjogcmV0dXJuKChDSEFSKSgy MjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzMDogcmV0dXJuKChDSEFSKSgxNjAgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQzMTogcmV0dXJuKChDSEFSKSgxNjIgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQzMjogcmV0dXJuKChDSEFSKSgyMzUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQzMzogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzNDogcmV0 dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzNTogcmV0dXJuKChDSEFS KSgxNjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzNjogcmV0dXJuKChDSEFSKSgyMzMgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzNzogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQzODogcmV0dXJuKChDSEFSKSgxODMgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQzOTogcmV0dXJuKChDSEFSKSgxODkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzYTog cmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzYjogcmV0dXJuKChD SEFSKSgyMDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzYzogcmV0dXJuKChDSEFSKSgyMTAg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzZDogcmV0dXJuKChDSEFSKSgyMTIgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQzZTogcmV0dXJuKChDSEFSKSgyMTQgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQzZjogcmV0dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0 MDogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0MTogcmV0dXJu KChDSEFSKSgyMjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0MjogcmV0dXJuKChDSEFSKSgy MjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0MzogcmV0dXJuKChDSEFSKSgyMzEgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQ0NDogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQ0NTogcmV0dXJuKChDSEFSKSgxODEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQ0NjogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0NzogcmV0 dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0ODogcmV0dXJuKChDSEFS KSgyNDUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0OTogcmV0dXJuKChDSEFSKSgyNDkgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0YTogcmV0dXJuKChDSEFSKSgxNTggJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQ0YjogcmV0dXJuKChDSEFSKSgyNDEgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQ0YzogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0ZDog cmV0dXJuKChDSEFSKSgyNDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0ZTogcmV0dXJuKChD SEFSKSgxNTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0ZjogcmV0dXJuKChDSEFSKSgyMjIg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1MTogcmV0dXJuKChDSEFSKSgxMzIgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQ1MjogcmV0dXJuKChDSEFSKSgxMjggJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQ1MzogcmV0dXJuKChDSEFSKSgxMzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1 NDogcmV0dXJuKChDSEFSKSgxMzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1NTogcmV0dXJu KChDSEFSKSgxMzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1NjogcmV0dXJuKChDSEFSKSgx MzggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1NzogcmV0dXJuKChDSEFSKSgxNDAgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQ1ODogcmV0dXJuKChDSEFSKSgxNDIgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQ1OTogcmV0dXJuKChDSEFSKSgxNDQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQ1YTogcmV0dXJuKChDSEFSKSgxNDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1YjogcmV0 dXJuKChDSEFSKSgxNDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1YzogcmV0dXJuKChDSEFS KSgxNTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1ZTogcmV0dXJuKChDSEFSKSgxNTIgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1ZjogcmV0dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjExNjogcmV0dXJuKChDSEFSKSgyMzkgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjUwMDogcmV0dXJuKChDSEFSKSgxOTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUwMjog cmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUwYzogcmV0dXJuKChD SEFSKSgyMTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFSKSgxOTEg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKSgxOTIgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjUxODogcmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjUxYzogcmV0dXJuKChDSEFSKSgxOTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUy NDogcmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUyYzogcmV0dXJu KChDSEFSKSgxOTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUzNDogcmV0dXJuKChDSEFSKSgx OTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChDSEFSKSgxOTcgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjU1MDogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjU1MTogcmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjU1NDogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1NzogcmV0 dXJuKChDSEFSKSgxODcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1YTogcmV0dXJuKChDSEFS KSgyMDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1ZDogcmV0dXJuKChDSEFSKSgxODggJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2MDogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjU2MzogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjU2NjogcmV0dXJuKChDSEFSKSgyMDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2OTog cmV0dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2YzogcmV0dXJuKChD SEFSKSgyMDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4MDogcmV0dXJuKChDSEFSKSgyMjMg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4NDogcmV0dXJuKChDSEFSKSgyMjAgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjU4ODogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjU5MTogcmV0dXJuKChDSEFSKSgxNzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5 MjogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5MzogcmV0dXJu KChDSEFSKSgxNzggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjVhMDogcmV0dXJuKChDSEFSKSgy NTQgJiAweGZmKSk7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4odHhfY3BzdWIoYykpOyAgICAgLyog Rm9yIGJveCBjaGFyYWN0ZXJzIGV0YyAqLwotICAgIH0KLX0KLQotaW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFBDIENvZGUgUGFnZSA4NTYgKi8KLSNpZmRlZiBDS19B TlNJQwotdHhfY3A4NTYoVVNIT1JUIGMpCi0jZWxzZQotdHhfY3A4NTYoYykgVVNIT1JUIGM7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4ODApICAgICAgICAgICAgICAg ICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8KLSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4 ZmYpKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIp KDB4ZmYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKSgweGQ2ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYjA6IHJldHVybigoQ0hBUikoMHhmOCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGIxOiByZXR1cm4oKENIQVIpKDB4ZjEgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBiMjogcmV0dXJuKChDSEFSKSgweGZkICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YjU6IHJldHVybigoQ0hBUikoMHhlNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI3OiByZXR1 cm4oKENIQVIpKDB4ZmEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkZjogcmV0dXJuKChDSEFS KSgweGUxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjc6IHJldHVybigoQ0hBUikoMHhmNiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzkzOiByZXR1cm4oKENIQVIpKDB4ZTIgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDM5ODogcmV0dXJuKChDSEFSKSgweGU5ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAzYTM6IHJldHVybigoQ0hBUikoMHhlNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw M2E2OiByZXR1cm4oKENIQVIpKDB4ZTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNhOTogcmV0 dXJuKChDSEFSKSgweGVhICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYjE6IHJldHVybigoQ0hB UikoMHhlMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2I0OiByZXR1cm4oKENIQVIpKDB4ZWIg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNiNTogcmV0dXJuKChDSEFSKSgweGVlICYgMHhmZikp OwotICAgICAgY2FzZSAweDAzYzA6IHJldHVybigoQ0hBUikoMHhlMyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwM2MzOiByZXR1cm4oKENIQVIpKDB4ZTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDNjNDogcmV0dXJuKChDSEFSKSgweGU3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzY6IHJl dHVybigoQ0hBUikoMHhlZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDEwOiByZXR1cm4oKENI QVIpKDB4ODAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxMTogcmV0dXJuKChDSEFSKSgweDgx ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTI6IHJldHVybigoQ0hBUikoMHg4MiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDEzOiByZXR1cm4oKENIQVIpKDB4ODMgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQxNDogcmV0dXJuKChDSEFSKSgweDg0ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0MTU6IHJldHVybigoQ0hBUikoMHg4NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE2OiBy ZXR1cm4oKENIQVIpKDB4ODYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxNzogcmV0dXJuKChD SEFSKSgweDg3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTg6IHJldHVybigoQ0hBUikoMHg4 OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE5OiByZXR1cm4oKENIQVIpKDB4ODkgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQxYTogcmV0dXJuKChDSEFSKSgweDhhICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0MWI6IHJldHVybigoQ0hBUikoMHg4YiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDFjOiByZXR1cm4oKENIQVIpKDB4OGMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxZDog cmV0dXJuKChDSEFSKSgweDhkICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MWU6IHJldHVybigo Q0hBUikoMHg4ZSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFmOiByZXR1cm4oKENIQVIpKDB4 OGYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyMDogcmV0dXJuKChDSEFSKSgweDkwICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0MjE6IHJldHVybigoQ0hBUikoMHg5MSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDIyOiByZXR1cm4oKENIQVIpKDB4OTIgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQyMzogcmV0dXJuKChDSEFSKSgweDkzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjQ6 IHJldHVybigoQ0hBUikoMHg5NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI1OiByZXR1cm4o KENIQVIpKDB4OTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyNjogcmV0dXJuKChDSEFSKSgw eDk2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0Mjc6IHJldHVybigoQ0hBUikoMHg5NyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI4OiByZXR1cm4oKENIQVIpKDB4OTggJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQyOTogcmV0dXJuKChDSEFSKSgweDk5ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0MmE6IHJldHVybigoQ0hBUikoMHg5YSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJi OiByZXR1cm4oKENIQVIpKDB4OWIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyYzogcmV0dXJu KChDSEFSKSgweDljICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MmQ6IHJldHVybigoQ0hBUiko MHg5ZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJlOiByZXR1cm4oKENIQVIpKDB4OWUgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyZjogcmV0dXJuKChDSEFSKSgweDlmICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0MzA6IHJldHVybigoQ0hBUikoMHhhMCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDMxOiByZXR1cm4oKENIQVIpKDB4YTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQz MjogcmV0dXJuKChDSEFSKSgweGEyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MzM6IHJldHVy bigoQ0hBUikoMHhhMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM0OiByZXR1cm4oKENIQVIp KDB4YTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzNTogcmV0dXJuKChDSEFSKSgweGE1ICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0MzY6IHJldHVybigoQ0hBUikoMHhhNiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDM3OiByZXR1cm4oKENIQVIpKDB4YTcgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQzODogcmV0dXJuKChDSEFSKSgweGE4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 Mzk6IHJldHVybigoQ0hBUikoMHhhOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNhOiByZXR1 cm4oKENIQVIpKDB4YWEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzYjogcmV0dXJuKChDSEFS KSgweGFiICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0M2M6IHJldHVybigoQ0hBUikoMHhhYyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNkOiByZXR1cm4oKENIQVIpKDB4YWQgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQzZTogcmV0dXJuKChDSEFSKSgweGFlICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0M2Y6IHJldHVybigoQ0hBUikoMHhhZiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDQwOiByZXR1cm4oKENIQVIpKDB4YjAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0MTogcmV0 dXJuKChDSEFSKSgweGIxICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDI6IHJldHVybigoQ0hB UikoMHhiMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQzOiByZXR1cm4oKENIQVIpKDB4YjMg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0NDogcmV0dXJuKChDSEFSKSgweGI0ICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0NDU6IHJldHVybigoQ0hBUikoMHhiNSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDQ2OiByZXR1cm4oKENIQVIpKDB4YjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQ0NzogcmV0dXJuKChDSEFSKSgweGI3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDg6IHJl dHVybigoQ0hBUikoMHhiOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ5OiByZXR1cm4oKENI QVIpKDB4YjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0YTogcmV0dXJuKChDSEFSKSgweGJh ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NGI6IHJldHVybigoQ0hBUikoMHhiYiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDRjOiByZXR1cm4oKENIQVIpKDB4YmMgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQ0ZDogcmV0dXJuKChDSEFSKSgweGJkICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0NGU6IHJldHVybigoQ0hBUikoMHhiZSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRmOiBy ZXR1cm4oKENIQVIpKDB4YmYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjA3ZjogcmV0dXJuKChD SEFSKSgweGZjICYgMHhmZikpOwotICAgICAgY2FzZSAweDIxMTY6IHJldHVybigoQ0hBUikoMHhk NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjE5OiByZXR1cm4oKENIQVIpKDB4ZjkgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjIxYTogcmV0dXJuKChDSEFSKSgweGZiICYgMHhmZikpOwotICAg ICAgY2FzZSAweDIyMWU6IHJldHVybigoQ0hBUikoMHhlYyAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyMjI5OiByZXR1cm4oKENIQVIpKDB4ZWYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjI0ODog cmV0dXJuKChDSEFSKSgweGY3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNjE6IHJldHVybigo Q0hBUikoMHhmMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENIQVIpKDB4 ZjMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjI2NTogcmV0dXJuKChDSEFSKSgweGYyICYgMHhm ZikpOwotICAgICAgY2FzZSAweDIzMjA6IHJldHVybigoQ0hBUikoMHhmNCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyMzIxOiByZXR1cm4oKENIQVIpKDB4ZjUgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjUwMDogcmV0dXJuKChDSEFSKSgweGM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MDI6 IHJldHVybigoQ0hBUikoMHhkMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTBjOiByZXR1cm4o KENIQVIpKDB4ZGEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFSKSgw eGNmICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikoMHhjMCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIpKDB4ZDkgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjUxYzogcmV0dXJuKChDSEFSKSgweGMzICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1MjQ6IHJldHVybigoQ0hBUikoMHhkNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTJj OiByZXR1cm4oKENIQVIpKDB4YzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUzNDogcmV0dXJu KChDSEFSKSgweGMxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1M2M6IHJldHVybigoQ0hBUiko MHhjNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUwOiByZXR1cm4oKENIQVIpKDB4Y2QgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1MTogcmV0dXJuKChDSEFSKSgweGM3ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDI1NTQ6IHJldHVybigoQ0hBUikoMHhjOSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTU3OiByZXR1cm4oKENIQVIpKDB4ZDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1 YTogcmV0dXJuKChDSEFSKSgweGM4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NWQ6IHJldHVy bigoQ0hBUikoMHhkOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTYwOiByZXR1cm4oKENIQVIp KDB4Y2MgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2MzogcmV0dXJuKChDSEFSKSgweGM2ICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1NjY6IHJldHVybigoQ0hBUikoMHhjYiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTY5OiByZXR1cm4oKENIQVIpKDB4Y2EgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjU2YzogcmV0dXJuKChDSEFSKSgweGNlICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 ODA6IHJldHVybigoQ0hBUikoMHhkZiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTg0OiByZXR1 cm4oKENIQVIpKDB4ZGMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4ODogcmV0dXJuKChDSEFS KSgweGRiICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OGM6IHJldHVybigoQ0hBUikoMHhkZCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTkwOiByZXR1cm4oKENIQVIpKDB4ZGUgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjU5MTogcmV0dXJuKChDSEFSKSgweGQwICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1OTI6IHJldHVybigoQ0hBUikoMHhkMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTkzOiByZXR1cm4oKENIQVIpKDB4ZDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjVhMDogcmV0 dXJuKChDSEFSKSgweGZlICYgMHhmZikpOwotICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X2Nwc3Vi KGMpKTsgICAgIC8qIEZvciBib3ggY2hhcmFjdGVycyBldGMgKi8KLSAgICB9Ci19Ci0KLWludCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQQyBDb2RlIFBhZ2UgODU3ICov Ci0jaWZkZWYgQ0tfQU5TSUMKLXR4X2NwODU3KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2NwODU3KGMp IFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweDgwKSAg ICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICovCi0gICAgICByZXR1cm4o KENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDB4MDBjNzog cmV0dXJuKChDSEFSKSgxMjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmYzogcmV0dXJuKChD SEFSKSgxMjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlOTogcmV0dXJuKChDSEFSKSgxMzAg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFSKSgxMzEgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBlNDogcmV0dXJuKChDSEFSKSgxMzIgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBlMDogcmV0dXJuKChDSEFSKSgxMzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBl NTogcmV0dXJuKChDSEFSKSgxMzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlNzogcmV0dXJu KChDSEFSKSgxMzUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlYTogcmV0dXJuKChDSEFSKSgx MzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlYjogcmV0dXJuKChDSEFSKSgxMzcgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBlODogcmV0dXJuKChDSEFSKSgxMzggJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBlZjogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBlZTogcmV0dXJuKChDSEFSKSgxNDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEzMTogcmV0 dXJuKChDSEFSKSgxNDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjNDogcmV0dXJuKChDSEFS KSgxNDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjNTogcmV0dXJuKChDSEFSKSgxNDMgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjOTogcmV0dXJuKChDSEFSKSgxNDQgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBlNjogcmV0dXJuKChDSEFSKSgxNDUgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBjNjogcmV0dXJuKChDSEFSKSgxNDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmNDog cmV0dXJuKChDSEFSKSgxNDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmNjogcmV0dXJuKChD SEFSKSgxNDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmMjogcmV0dXJuKChDSEFSKSgxNDkg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKSgxNTAgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBmOTogcmV0dXJuKChDSEFSKSgxNTEgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDEzMDogcmV0dXJuKChDSEFSKSgxNTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBk NjogcmV0dXJuKChDSEFSKSgxNTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkYzogcmV0dXJu KChDSEFSKSgxNTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmODogcmV0dXJuKChDSEFSKSgx NTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhMzogcmV0dXJuKChDSEFSKSgxNTYgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBkODogcmV0dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDE1ZTogcmV0dXJuKChDSEFSKSgxNTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDE1ZjogcmV0dXJuKChDSEFSKSgxNTkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlMTogcmV0 dXJuKChDSEFSKSgxNjAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlZDogcmV0dXJuKChDSEFS KSgxNjEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKSgxNjIgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKSgxNjMgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBmMTogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBkMTogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDExZTog cmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDExZjogcmV0dXJuKChD SEFSKSgxNjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiZjogcmV0dXJuKChDSEFSKSgxNjgg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhZTogcmV0dXJuKChDSEFSKSgxNjkgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBhYzogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBiZDogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBi YzogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhMTogcmV0dXJu KChDSEFSKSgxNzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKChDSEFSKSgx NzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKSgxNzUgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjBhYzogcmV0dXJuKChDSEFSKSgyMTMgJiAweGZmKSk7IC8qIEV1 cm8gKi8KLSAgICAgIGNhc2UgMHgyNTkxOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyNTkyOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNTkzOiByZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTAyOiBy ZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTI0OiByZXR1cm4oKENI QVIpKDE4MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMxOiByZXR1cm4oKENIQVIpKDE4MSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMyOiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGMwOiByZXR1cm4oKENIQVIpKDE4MyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGE5OiByZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTYz OiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUxOiByZXR1cm4o KENIQVIpKDE4NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU3OiByZXR1cm4oKENIQVIpKDE4 NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVkOiByZXR1cm4oKENIQVIpKDE4OCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGEyOiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGE1OiByZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTEwOiByZXR1cm4oKENIQVIpKDE5MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTE0OiByZXR1 cm4oKENIQVIpKDE5MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4oKENIQVIp KDE5MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTJjOiByZXR1cm4oKENIQVIpKDE5NCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTFjOiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyNTAwOiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNTNjOiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUzOiBy ZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMzOiByZXR1cm4oKENI QVIpKDE5OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVhOiByZXR1cm4oKENIQVIpKDIwMCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU0OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTY5OiByZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTY2OiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTYw OiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUwOiByZXR1cm4o KENIQVIpKDIwNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTZjOiByZXR1cm4oKENIQVIpKDIw NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE0OiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGJhOiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGFhOiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGNhOiByZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNiOiByZXR1 cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM4OiByZXR1cm4oKENIQVIp KDIxMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNkOiByZXR1cm4oKENIQVIpKDIxNCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNlOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGNmOiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNTE4OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTBjOiBy ZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oKENI QVIpKDIxOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTg0OiByZXR1cm4oKENIQVIpKDIyMCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE2OiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGNjOiByZXR1cm4oKENIQVIpKDIyMiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTgwOiByZXR1cm4oKENIQVIpKDIyMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQz OiByZXR1cm4oKENIQVIpKDIyNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRmOiByZXR1cm4o KENIQVIpKDIyNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ0OiByZXR1cm4oKENIQVIpKDIy NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQyOiByZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGY1OiByZXR1cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGQ1OiByZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGI1OiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ3OiByZXR1 cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRhOiByZXR1cm4oKENIQVIp KDIzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRiOiByZXR1cm4oKENIQVIpKDIzNCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ5OiByZXR1cm4oKENIQVIpKDIzNSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGVjOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGZmOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFmOiBy ZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI0OiByZXR1cm4oKENI QVIpKDIzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFkOiByZXR1cm4oKENIQVIpKDI0MCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIxOiByZXR1cm4oKENIQVIpKDI0MSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGJlOiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGI2OiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE3 OiByZXR1cm4oKENIQVIpKDI0NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY3OiByZXR1cm4o KENIQVIpKDI0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI4OiByZXR1cm4oKENIQVIpKDI0 NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIwOiByZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGI5OiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIzOiByZXR1 cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIyOiByZXR1cm4oKENIQVIp KDI1MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNWEwOiByZXR1cm4oKENIQVIpKDI1NCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpKDI1NSAmIDB4ZmYpKTsKLSAg ICAgIGRlZmF1bHQ6IHJldHVybih0eF9jcHN1YihjKSk7ICAgICAvKiBGb3IgYm94IGNoYXJhY3Rl cnMgZXRjICovCi0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUEMgQ29kZSBQYWdlIDg2MiAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9jcDg2MihV U0hPUlQgYykKLSNlbHNlCi10eF9jcDg2MihjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotewotICAgIGlmIChjIDwgMHg4MCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBD MSBncmFwaGljcyAqLwotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgIHN3aXRj aCAoYykgewotICAgICAgY2FzZSAweDA1ZDA6IHJldHVybigoQ0hBUikoMTI4ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA1ZDE6IHJldHVybigoQ0hBUikoMTI5ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA1ZDI6IHJldHVybigoQ0hBUikoMTMwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1ZDM6 IHJldHVybigoQ0hBUikoMTMxICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1ZDQ6IHJldHVybigo Q0hBUikoMTMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1ZDU6IHJldHVybigoQ0hBUikoMTMz ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1ZDY6IHJldHVybigoQ0hBUikoMTM0ICYgMHhmZikp OwotICAgICAgY2FzZSAweDA1ZDc6IHJldHVybigoQ0hBUikoMTM1ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA1ZDg6IHJldHVybigoQ0hBUikoMTM2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1 ZDk6IHJldHVybigoQ0hBUikoMTM3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1ZGE6IHJldHVy bigoQ0hBUikoMTM4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1ZGI6IHJldHVybigoQ0hBUiko MTM5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1ZGM6IHJldHVybigoQ0hBUikoMTQwICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA1ZGQ6IHJldHVybigoQ0hBUikoMTQxICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA1ZGU6IHJldHVybigoQ0hBUikoMTQyICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA1ZGY6IHJldHVybigoQ0hBUikoMTQzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1ZTA6IHJl dHVybigoQ0hBUikoMTQ0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1ZTE6IHJldHVybigoQ0hB UikoMTQ1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1ZTI6IHJldHVybigoQ0hBUikoMTQ2ICYg MHhmZikpOwotICAgICAgY2FzZSAweDA1ZTM6IHJldHVybigoQ0hBUikoMTQ3ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA1ZTQ6IHJldHVybigoQ0hBUikoMTQ4ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA1ZTU6IHJldHVybigoQ0hBUikoMTQ5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1ZTY6 IHJldHVybigoQ0hBUikoMTUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1ZTc6IHJldHVybigo Q0hBUikoMTUxICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1ZTg6IHJldHVybigoQ0hBUikoMTUy ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA1ZTk6IHJldHVybigoQ0hBUikoMTUzICYgMHhmZikp OwotICAgICAgY2FzZSAweDA1ZWE6IHJldHVybigoQ0hBUikoMTU0ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYTI6IHJldHVybigoQ0hBUikoMTU1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YTM6IHJldHVybigoQ0hBUikoMTU2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTU6IHJldHVy bigoQ0hBUikoMTU3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwYTc6IHJldHVybigoQ0hBUiko MTU4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxOTI6IHJldHVybigoQ0hBUikoMTU5ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZTE6IHJldHVybigoQ0hBUikoMTYwICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZWQ6IHJldHVybigoQ0hBUikoMTYxICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZjM6IHJldHVybigoQ0hBUikoMTYyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmE6IHJl dHVybigoQ0hBUikoMTYzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjE6IHJldHVybigoQ0hB UikoMTY0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDE6IHJldHVybigoQ0hBUikoMTY1ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYWE6IHJldHVybigoQ0hBUikoMTY2ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwYmE6IHJldHVybigoQ0hBUikoMTY3ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwYmY6IHJldHVybigoQ0hBUikoMTY4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIzMTA6 IHJldHVybigoQ0hBUikoMTY5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWM6IHJldHVybigo Q0hBUikoMTcwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmQ6IHJldHVybigoQ0hBUikoMTcx ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmM6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYTE6IHJldHVybigoQ0hBUikoMTczICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYWI6IHJldHVybigoQ0hBUikoMTc0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YmI6IHJldHVybigoQ0hBUikoMTc1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OTE6IHJldHVy bigoQ0hBUikoMTc2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OTI6IHJldHVybigoQ0hBUiko MTc3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OTM6IHJldHVybigoQ0hBUikoMTc4ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDI1MDI6IHJldHVybigoQ0hBUikoMTc5ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDI1MjQ6IHJldHVybigoQ0hBUikoMTgwICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1NjE6IHJldHVybigoQ0hBUikoMTgxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NjI6IHJl dHVybigoQ0hBUikoMTgyICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTY6IHJldHVybigoQ0hB UikoMTgzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTU6IHJldHVybigoQ0hBUikoMTg0ICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1NjM6IHJldHVybigoQ0hBUikoMTg1ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDI1NTE6IHJldHVybigoQ0hBUikoMTg2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1NTc6IHJldHVybigoQ0hBUikoMTg3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NWQ6 IHJldHVybigoQ0hBUikoMTg4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NWM6IHJldHVybigo Q0hBUikoMTg5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NWI6IHJldHVybigoQ0hBUikoMTkw ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hBUikoMTkxICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikoMTkyICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1MzQ6IHJldHVybigoQ0hBUikoMTkzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 MmM6IHJldHVybigoQ0hBUikoMTk0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MWM6IHJldHVy bigoQ0hBUikoMTk1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MDA6IHJldHVybigoQ0hBUiko MTk2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1M2M6IHJldHVybigoQ0hBUikoMTk3ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDI1NWU6IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDI1NWY6IHJldHVybigoQ0hBUikoMTk5ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1NWE6IHJldHVybigoQ0hBUikoMjAwICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTQ6IHJl dHVybigoQ0hBUikoMjAxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1Njk6IHJldHVybigoQ0hB UikoMjAyICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NjY6IHJldHVybigoQ0hBUikoMjAzICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1NjA6IHJldHVybigoQ0hBUikoMjA0ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDI1NTA6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1NmM6IHJldHVybigoQ0hBUikoMjA2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1Njc6 IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1Njg6IHJldHVybigo Q0hBUikoMjA4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NjQ6IHJldHVybigoQ0hBUikoMjA5 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NjU6IHJldHVybigoQ0hBUikoMjEwICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1NTk6IHJldHVybigoQ0hBUikoMjExICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1NTg6IHJldHVybigoQ0hBUikoMjEyICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 NTI6IHJldHVybigoQ0hBUikoMjEzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTM6IHJldHVy bigoQ0hBUikoMjE0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NmI6IHJldHVybigoQ0hBUiko MjE1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NmE6IHJldHVybigoQ0hBUikoMjE2ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDI1MTg6IHJldHVybigoQ0hBUikoMjE3ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDI1MGM6IHJldHVybigoQ0hBUikoMjE4ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1ODg6IHJldHVybigoQ0hBUikoMjE5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1ODQ6IHJl dHVybigoQ0hBUikoMjIwICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OGM6IHJldHVybigoQ0hB UikoMjIxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OTA6IHJldHVybigoQ0hBUikoMjIyICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1ODA6IHJldHVybigoQ0hBUikoMjIzICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAzYjE6IHJldHVybigoQ0hBUikoMjI0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZGY6IHJldHVybigoQ0hBUikoMjI1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOTM6 IHJldHVybigoQ0hBUikoMjI2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzA6IHJldHVybigo Q0hBUikoMjI3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTM6IHJldHVybigoQ0hBUikoMjI4 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzM6IHJldHVybigoQ0hBUikoMjI5ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYjU6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAzYzQ6IHJldHVybigoQ0hBUikoMjMxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAz YTY6IHJldHVybigoQ0hBUikoMjMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOTg6IHJldHVy bigoQ0hBUikoMjMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTk6IHJldHVybigoQ0hBUiko MjM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYjQ6IHJldHVybigoQ0hBUikoMjM1ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDIyMWU6IHJldHVybigoQ0hBUikoMjM2ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAzYzY6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAzYjU6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyMjk6IHJl dHVybigoQ0hBUikoMjM5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNjE6IHJldHVybigoQ0hB UikoMjQwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjE6IHJldHVybigoQ0hBUikoMjQxICYg MHhmZikpOwotICAgICAgY2FzZSAweDIyNjU6IHJldHVybigoQ0hBUikoMjQyICYgMHhmZikpOwot ICAgICAgY2FzZSAweDIyNjQ6IHJldHVybigoQ0hBUikoMjQzICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDIzMjA6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIzMjE6 IHJldHVybigoQ0hBUikoMjQ1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjc6IHJldHVybigo Q0hBUikoMjQ2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNDg6IHJldHVybigoQ0hBUikoMjQ3 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjA6IHJldHVybigoQ0hBUikoMjQ4ICYgMHhmZikp OwotICAgICAgY2FzZSAweDIyMTk6IHJldHVybigoQ0hBUikoMjQ5ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDIy MWE6IHJldHVybigoQ0hBUikoMjUxICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwN2Y6IHJldHVy bigoQ0hBUikoMjUyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjI6IHJldHVybigoQ0hBUiko MjUzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1YTA6IHJldHVybigoQ0hBUikoMjU0ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikoMjU1ICYgMHhmZikpOwotICAg ICAgZGVmYXVsdDogcmV0dXJuKHR4X2Nwc3ViKGMpKTsgICAgIC8qIEZvciBib3ggY2hhcmFjdGVy cyBldGMgKi8KLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQQyBDb2RlIFBhZ2UgODY0ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2NwODY0KFVT SE9SVCBjKQotI2Vsc2UKLXR4X2NwODY0KGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17Ci0gICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMx IGdyYXBoaWNzICovCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNo IChjKSB7Ci0gICAgICBjYXNlIDB4MDBiMDogcmV0dXJuKChDSEFSKTB4ODAgJiAweGZmKTsKLSAg ICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpMHg4MSAmIDB4ZmYpOwotICAgICAgY2FzZSAw eDIyMTk6IHJldHVybigoQ0hBUikweDgyICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MjIxYTogcmV0 dXJuKChDSEFSKTB4ODMgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgyNTkyOiByZXR1cm4oKENIQVIp MHg4NCAmIDB4ZmYpOwotICAgICAgY2FzZSAweDI1MDA6IHJldHVybigoQ0hBUikweDg1ICYgMHhm Zik7Ci0gICAgICBjYXNlIDB4MjUwMjogcmV0dXJuKChDSEFSKTB4ODYgJiAweGZmKTsKLSAgICAg IGNhc2UgMHgyNTNjOiByZXR1cm4oKENIQVIpMHg4NyAmIDB4ZmYpOwotICAgICAgY2FzZSAweDI1 MjQ6IHJldHVybigoQ0hBUikweDg4ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MjUyYzogcmV0dXJu KChDSEFSKTB4ODkgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgyNTFjOiByZXR1cm4oKENIQVIpMHg4 YSAmIDB4ZmYpOwotICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigoQ0hBUikweDhiICYgMHhmZik7 Ci0gICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFSKTB4OGMgJiAweGZmKTsKLSAgICAgIGNh c2UgMHgyNTBjOiByZXR1cm4oKENIQVIpMHg4ZCAmIDB4ZmYpOwotICAgICAgY2FzZSAweDI1MTQ6 IHJldHVybigoQ0hBUikweDhlICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MjUxODogcmV0dXJuKChD SEFSKTB4OGYgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgwM2IyOiByZXR1cm4oKENIQVIpMHg5MCAm IDB4ZmYpOwotICAgICAgY2FzZSAweDIyMWU6IHJldHVybigoQ0hBUikweDkxICYgMHhmZik7Ci0g ICAgICBjYXNlIDB4MDNjNjogcmV0dXJuKChDSEFSKTB4OTIgJiAweGZmKTsKLSAgICAgIGNhc2Ug MHgwMGIxOiByZXR1cm4oKENIQVIpMHg5MyAmIDB4ZmYpOwotICAgICAgY2FzZSAweDAwYmQ6IHJl dHVybigoQ0hBUikweDk0ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MDBiYzogcmV0dXJuKChDSEFS KTB4OTUgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgyMjQ4OiByZXR1cm4oKENIQVIpMHg5NiAmIDB4 ZmYpOwotICAgICAgY2FzZSAweDAwYWI6IHJldHVybigoQ0hBUikweDk3ICYgMHhmZik7Ci0gICAg ICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKTB4OTggJiAweGZmKTsKLSAgICAgIGNhc2UgMHhm ZWY3OiByZXR1cm4oKENIQVIpMHg5OSAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlZjg6IHJldHVy bigoQ0hBUikweDlhICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVmYjogcmV0dXJuKChDSEFSKTB4 OWQgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWZjOiByZXR1cm4oKENIQVIpMHg5ZSAmIDB4ZmYp OwotICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikweGEwICYgMHhmZik7Ci0gICAgICBj YXNlIDB4MDBhZDogcmV0dXJuKChDSEFSKTB4YTEgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZTgy OiByZXR1cm4oKENIQVIpMHhhMiAmIDB4ZmYpOwotICAgICAgY2FzZSAweDAwYTM6IHJldHVybigo Q0hBUikweGEzICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MDBhNDogcmV0dXJuKChDSEFSKTB4YTQg JiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZTg0OiByZXR1cm4oKENIQVIpMHhhNSAmIDB4ZmYpOwot ICAgICAgY2FzZSAweGZlOGU6IHJldHVybigoQ0hBUikweGE4ICYgMHhmZik7Ci0gICAgICBjYXNl IDB4ZmU4ZjogcmV0dXJuKChDSEFSKTB4YTkgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZTk1OiBy ZXR1cm4oKENIQVIpMHhhYSAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlOTk6IHJldHVybigoQ0hB UikweGFiICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MDYwYzogcmV0dXJuKChDSEFSKTB4YWMgJiAw eGZmKTsKLSAgICAgIGNhc2UgMHhmZTlkOiByZXR1cm4oKENIQVIpMHhhZCAmIDB4ZmYpOwotICAg ICAgY2FzZSAweGZlYTE6IHJldHVybigoQ0hBUikweGFlICYgMHhmZik7Ci0gICAgICBjYXNlIDB4 ZmVhNTogcmV0dXJuKChDSEFSKTB4YWYgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgwNjYwOiByZXR1 cm4oKENIQVIpMHhiMCAmIDB4ZmYpOwotICAgICAgY2FzZSAweDA2NjE6IHJldHVybigoQ0hBUikw eGIxICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MDY2MjogcmV0dXJuKChDSEFSKTB4YjIgJiAweGZm KTsKLSAgICAgIGNhc2UgMHgwNjYzOiByZXR1cm4oKENIQVIpMHhiMyAmIDB4ZmYpOwotICAgICAg Y2FzZSAweDA2NjQ6IHJldHVybigoQ0hBUikweGI0ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MDY2 NTogcmV0dXJuKChDSEFSKTB4YjUgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgwNjY2OiByZXR1cm4o KENIQVIpMHhiNiAmIDB4ZmYpOwotICAgICAgY2FzZSAweDA2Njc6IHJldHVybigoQ0hBUikweGI3 ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MDY2ODogcmV0dXJuKChDSEFSKTB4YjggJiAweGZmKTsK LSAgICAgIGNhc2UgMHgwNjY5OiByZXR1cm4oKENIQVIpMHhiOSAmIDB4ZmYpOwotICAgICAgY2Fz ZSAweGZlZDE6IHJldHVybigoQ0hBUikweGJhICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MDYxYjog cmV0dXJuKChDSEFSKTB4YmIgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWIxOiByZXR1cm4oKENI QVIpMHhiYyAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlYjU6IHJldHVybigoQ0hBUikweGJkICYg MHhmZik7Ci0gICAgICBjYXNlIDB4ZmViOTogcmV0dXJuKChDSEFSKTB4YmUgJiAweGZmKTsKLSAg ICAgIGNhc2UgMHgwNjFmOiByZXR1cm4oKENIQVIpMHhiZiAmIDB4ZmYpOwotICAgICAgY2FzZSAw eDAwYTI6IHJldHVybigoQ0hBUikweGMwICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmU4MDogcmV0 dXJuKChDSEFSKTB4YzEgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZTgxOiByZXR1cm4oKENIQVIp MHhjMiAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlODM6IHJldHVybigoQ0hBUikweGMzICYgMHhm Zik7Ci0gICAgICBjYXNlIDB4ZmU4NTogcmV0dXJuKChDSEFSKTB4YzQgJiAweGZmKTsKLSAgICAg IGNhc2UgMHhmZWNhOiByZXR1cm4oKENIQVIpMHhjNSAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZl OGI6IHJldHVybigoQ0hBUikweGM2ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmU4ZDogcmV0dXJu KChDSEFSKTB4YzcgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZTkxOiByZXR1cm4oKENIQVIpMHhj OCAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlOTM6IHJldHVybigoQ0hBUikweGM5ICYgMHhmZik7 Ci0gICAgICBjYXNlIDB4ZmU5NzogcmV0dXJuKChDSEFSKTB4Y2EgJiAweGZmKTsKLSAgICAgIGNh c2UgMHhmZTliOiByZXR1cm4oKENIQVIpMHhjYiAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlOWY6 IHJldHVybigoQ0hBUikweGNjICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVhMzogcmV0dXJuKChD SEFSKTB4Y2QgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWE3OiByZXR1cm4oKENIQVIpMHhjZSAm IDB4ZmYpOwotICAgICAgY2FzZSAweGZlYTk6IHJldHVybigoQ0hBUikweGNmICYgMHhmZik7Ci0g ICAgICBjYXNlIDB4ZmVhYjogcmV0dXJuKChDSEFSKTB4ZDAgJiAweGZmKTsKLSAgICAgIGNhc2Ug MHhmZWFkOiByZXR1cm4oKENIQVIpMHhkMSAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlYWY6IHJl dHVybigoQ0hBUikweGQyICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmViMzogcmV0dXJuKChDSEFS KTB4ZDMgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWI3OiByZXR1cm4oKENIQVIpMHhkNCAmIDB4 ZmYpOwotICAgICAgY2FzZSAweGZlYmI6IHJldHVybigoQ0hBUikweGQ1ICYgMHhmZik7Ci0gICAg ICBjYXNlIDB4ZmViZjogcmV0dXJuKChDSEFSKTB4ZDYgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhm ZWMxOiByZXR1cm4oKENIQVIpMHhkNyAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlYzU6IHJldHVy bigoQ0hBUikweGQ4ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVjYjogcmV0dXJuKChDSEFSKTB4 ZDkgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWNmOiByZXR1cm4oKENIQVIpMHhkYSAmIDB4ZmYp OwotICAgICAgY2FzZSAweDAwYTY6IHJldHVybigoQ0hBUikweGRiICYgMHhmZik7Ci0gICAgICBj YXNlIDB4MDBhYzogcmV0dXJuKChDSEFSKTB4ZGMgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgwMGY3 OiByZXR1cm4oKENIQVIpMHhkZCAmIDB4ZmYpOwotICAgICAgY2FzZSAweDAwZDc6IHJldHVybigo Q0hBUikweGRlICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVjOTogcmV0dXJuKChDSEFSKTB4ZGYg JiAweGZmKTsKLSAgICAgIGNhc2UgMHgwNjQwOiByZXR1cm4oKENIQVIpMHhlMCAmIDB4ZmYpOwot ICAgICAgY2FzZSAweGZlZDM6IHJldHVybigoQ0hBUikweGUxICYgMHhmZik7Ci0gICAgICBjYXNl IDB4ZmVkNzogcmV0dXJuKChDSEFSKTB4ZTIgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWRiOiBy ZXR1cm4oKENIQVIpMHhlMyAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlZGY6IHJldHVybigoQ0hB UikweGU0ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVlMzogcmV0dXJuKChDSEFSKTB4ZTUgJiAw eGZmKTsKLSAgICAgIGNhc2UgMHhmZWU3OiByZXR1cm4oKENIQVIpMHhlNiAmIDB4ZmYpOwotICAg ICAgY2FzZSAweGZlZWI6IHJldHVybigoQ0hBUikweGU3ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4 ZmVlZDogcmV0dXJuKChDSEFSKTB4ZTggJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWVmOiByZXR1 cm4oKENIQVIpMHhlOSAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlZjM6IHJldHVybigoQ0hBUikw eGVhICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmViZDogcmV0dXJuKChDSEFSKTB4ZWIgJiAweGZm KTsKLSAgICAgIGNhc2UgMHhmZWNjOiByZXR1cm4oKENIQVIpMHhlYyAmIDB4ZmYpOwotICAgICAg Y2FzZSAweGZlY2U6IHJldHVybigoQ0hBUikweGVkICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVj ZDogcmV0dXJuKChDSEFSKTB4ZWUgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWUxOiByZXR1cm4o KENIQVIpMHhlZiAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlN2Q6IHJldHVybigoQ0hBUikweGYw ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MDY1MTogcmV0dXJuKChDSEFSKTB4ZjEgJiAweGZmKTsK LSAgICAgIGNhc2UgMHhmZWU1OiByZXR1cm4oKENIQVIpMHhmMiAmIDB4ZmYpOwotICAgICAgY2Fz ZSAweGZlZTk6IHJldHVybigoQ0hBUikweGYzICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVlYzog cmV0dXJuKChDSEFSKTB4ZjQgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWYwOiByZXR1cm4oKENI QVIpMHhmNSAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlZjI6IHJldHVybigoQ0hBUikweGY2ICYg MHhmZik7Ci0gICAgICBjYXNlIDB4ZmVkMDogcmV0dXJuKChDSEFSKTB4ZjcgJiAweGZmKTsKLSAg ICAgIGNhc2UgMHhmZWQ1OiByZXR1cm4oKENIQVIpMHhmOCAmIDB4ZmYpOwotICAgICAgY2FzZSAw eGZlZjU6IHJldHVybigoQ0hBUikweGY5ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVmNjogcmV0 dXJuKChDSEFSKTB4ZmEgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWRkOiByZXR1cm4oKENIQVIp MHhmYiAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlZDk6IHJldHVybigoQ0hBUikweGZjICYgMHhm Zik7Ci0gICAgICBjYXNlIDB4ZmVmMTogcmV0dXJuKChDSEFSKTB4ZmQgJiAweGZmKTsKLSAgICAg IGNhc2UgMHgyNWEwOiByZXR1cm4oKENIQVIpMHhmZSAmIDB4ZmYpOwotICAgICAgZGVmYXVsdDog cmV0dXJuKHR4X2Nwc3ViKGMpKTsgICAgIC8qIEZvciBib3ggY2hhcmFjdGVycyBldGMgKi8KLSAg ICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQQyBD b2RlIFBhZ2UgODY2ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2NwODY2KFVTSE9SVCBjKQotI2Vs c2UKLXR4X2NwODY2KGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAg aWYgKGMgPCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICov Ci0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAg ICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKSgyNTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBhNDogcmV0dXJuKChDSEFSKSgyNTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiMDogcmV0 dXJuKChDSEFSKSgyNDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFS KSgyNTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwMTogcmV0dXJuKChDSEFSKSgyNDAgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwNDogcmV0dXJuKChDSEFSKSgyNDIgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQwNzogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQwZTogcmV0dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxMDog cmV0dXJuKChDSEFSKSgxMjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxMTogcmV0dXJuKChD SEFSKSgxMjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxMjogcmV0dXJuKChDSEFSKSgxMzAg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxMzogcmV0dXJuKChDSEFSKSgxMzEgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQxNDogcmV0dXJuKChDSEFSKSgxMzIgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQxNTogcmV0dXJuKChDSEFSKSgxMzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQx NjogcmV0dXJuKChDSEFSKSgxMzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxNzogcmV0dXJu KChDSEFSKSgxMzUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxODogcmV0dXJuKChDSEFSKSgx MzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxOTogcmV0dXJuKChDSEFSKSgxMzcgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQxYTogcmV0dXJuKChDSEFSKSgxMzggJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQxYjogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQxYzogcmV0dXJuKChDSEFSKSgxNDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxZDogcmV0 dXJuKChDSEFSKSgxNDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxZTogcmV0dXJuKChDSEFS KSgxNDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxZjogcmV0dXJuKChDSEFSKSgxNDMgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyMDogcmV0dXJuKChDSEFSKSgxNDQgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQyMTogcmV0dXJuKChDSEFSKSgxNDUgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQyMjogcmV0dXJuKChDSEFSKSgxNDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyMzog cmV0dXJuKChDSEFSKSgxNDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyNDogcmV0dXJuKChD SEFSKSgxNDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyNTogcmV0dXJuKChDSEFSKSgxNDkg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyNjogcmV0dXJuKChDSEFSKSgxNTAgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQyNzogcmV0dXJuKChDSEFSKSgxNTEgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQyODogcmV0dXJuKChDSEFSKSgxNTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQy OTogcmV0dXJuKChDSEFSKSgxNTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyYTogcmV0dXJu KChDSEFSKSgxNTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyYjogcmV0dXJuKChDSEFSKSgx NTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyYzogcmV0dXJuKChDSEFSKSgxNTYgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQyZDogcmV0dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQyZTogcmV0dXJuKChDSEFSKSgxNTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQyZjogcmV0dXJuKChDSEFSKSgxNTkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzMDogcmV0 dXJuKChDSEFSKSgxNjAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzMTogcmV0dXJuKChDSEFS KSgxNjEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzMjogcmV0dXJuKChDSEFSKSgxNjIgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzMzogcmV0dXJuKChDSEFSKSgxNjMgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQzNDogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQzNTogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzNjog cmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzNzogcmV0dXJuKChD SEFSKSgxNjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzODogcmV0dXJuKChDSEFSKSgxNjgg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzOTogcmV0dXJuKChDSEFSKSgxNjkgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQzYTogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQzYjogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQz YzogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzZDogcmV0dXJu KChDSEFSKSgxNzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzZTogcmV0dXJuKChDSEFSKSgx NzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzZjogcmV0dXJuKChDSEFSKSgxNzUgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQ0MDogcmV0dXJuKChDSEFSKSgyMjQgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQ0MTogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQ0MjogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0MzogcmV0 dXJuKChDSEFSKSgyMjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0NDogcmV0dXJuKChDSEFS KSgyMjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0NTogcmV0dXJuKChDSEFSKSgyMjkgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0NjogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQ0NzogcmV0dXJuKChDSEFSKSgyMzEgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQ0ODogcmV0dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0OTog cmV0dXJuKChDSEFSKSgyMzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0YTogcmV0dXJuKChD SEFSKSgyMzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0YjogcmV0dXJuKChDSEFSKSgyMzUg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0YzogcmV0dXJuKChDSEFSKSgyMzYgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQ0ZDogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQ0ZTogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0 ZjogcmV0dXJuKChDSEFSKSgyMzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1MTogcmV0dXJu KChDSEFSKSgyNDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1NDogcmV0dXJuKChDSEFSKSgy NDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1NzogcmV0dXJuKChDSEFSKSgyNDUgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQ1ZTogcmV0dXJuKChDSEFSKSgyNDcgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjExNjogcmV0dXJuKChDSEFSKSgyNTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjIxOTogcmV0dXJuKChDSEFSKSgyNDkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjIxYTogcmV0 dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUwMDogcmV0dXJuKChDSEFS KSgxOTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUwMjogcmV0dXJuKChDSEFSKSgxNzkgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjUwYzogcmV0dXJuKChDSEFSKSgyMTggJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFSKSgxOTEgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjUxNDogcmV0dXJuKChDSEFSKSgxOTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxODog cmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxYzogcmV0dXJuKChD SEFSKSgxOTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUyNDogcmV0dXJuKChDSEFSKSgxODAg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUyYzogcmV0dXJuKChDSEFSKSgxOTQgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjUzNDogcmV0dXJuKChDSEFSKSgxOTMgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjUzYzogcmV0dXJuKChDSEFSKSgxOTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1 MDogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1MTogcmV0dXJu KChDSEFSKSgxODYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1MjogcmV0dXJuKChDSEFSKSgy MTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1MzogcmV0dXJuKChDSEFSKSgyMTQgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjU1NDogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjU1NTogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjU1NjogcmV0dXJuKChDSEFSKSgxODMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1NzogcmV0 dXJuKChDSEFSKSgxODcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1ODogcmV0dXJuKChDSEFS KSgyMTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1OTogcmV0dXJuKChDSEFSKSgyMTEgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1YTogcmV0dXJuKChDSEFSKSgyMDAgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjU1YjogcmV0dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjU1YzogcmV0dXJuKChDSEFSKSgxODkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1ZDog cmV0dXJuKChDSEFSKSgxODggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1ZTogcmV0dXJuKChD SEFSKSgxOTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1ZjogcmV0dXJuKChDSEFSKSgxOTkg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2MDogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjU2MTogcmV0dXJuKChDSEFSKSgxODEgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjU2MjogcmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2 MzogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2NDogcmV0dXJu KChDSEFSKSgyMDkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2NTogcmV0dXJuKChDSEFSKSgy MTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2NjogcmV0dXJuKChDSEFSKSgyMDMgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjU2NzogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjU2ODogcmV0dXJuKChDSEFSKSgyMDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjU2OTogcmV0dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2YTogcmV0 dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2YjogcmV0dXJuKChDSEFS KSgyMTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2YzogcmV0dXJuKChDSEFSKSgyMDYgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4MDogcmV0dXJuKChDSEFSKSgyMjMgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjU4NDogcmV0dXJuKChDSEFSKSgyMjAgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjU4ODogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4Yzog cmV0dXJuKChDSEFSKSgyMjEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5MDogcmV0dXJuKChD SEFSKSgyMjIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5MTogcmV0dXJuKChDSEFSKSgxNzYg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5MjogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjU5MzogcmV0dXJuKChDSEFSKSgxNzggJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjVhMDogcmV0dXJuKChDSEFSKSgyNTQgJiAweGZmKSk7Ci0gICAgICBkZWZhdWx0OiBy ZXR1cm4odHhfY3BzdWIoYykpOyAgICAgLyogRm9yIGJveCBjaGFyYWN0ZXJzIGV0YyAqLwotICAg IH0KLX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBDIENv ZGUgUGFnZSA4NjkgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfY3A4NjkoVVNIT1JUIGMpCi0jZWxz ZQotdHhfY3A4NjkoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBp ZiAoYyA8IDB4ODApICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8K LSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAg IGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpKDI1NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGEzOiByZXR1cm4oKENIQVIpKDE1NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE2OiByZXR1 cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIp KDI0NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE5OiByZXR1cm4oKENIQVIpKDE1MSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpKDE3NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGFjOiByZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFkOiBy ZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIwOiByZXR1cm4oKENI QVIpKDI0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIxOiByZXR1cm4oKENIQVIpKDI0MSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIyOiByZXR1cm4oKENIQVIpKDE1MyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGIzOiByZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGI3OiByZXR1cm4oKENIQVIpKDEzNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJi OiByZXR1cm4oKENIQVIpKDE3NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJkOiByZXR1cm4o KENIQVIpKDE3MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzg0OiByZXR1cm4oKENIQVIpKDIz OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzg1OiByZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMzg2OiByZXR1cm4oKENIQVIpKDEzNCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMzg4OiByZXR1cm4oKENIQVIpKDE0MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw Mzg5OiByZXR1cm4oKENIQVIpKDE0MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzhhOiByZXR1 cm4oKENIQVIpKDE0NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzhjOiByZXR1cm4oKENIQVIp KDE0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzhlOiByZXR1cm4oKENIQVIpKDE0OSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzhmOiByZXR1cm4oKENIQVIpKDE1MiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMzkwOiByZXR1cm4oKENIQVIpKDE2MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMzkxOiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzkyOiBy ZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzkzOiByZXR1cm4oKENI QVIpKDE2NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzk0OiByZXR1cm4oKENIQVIpKDE2NyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzk1OiByZXR1cm4oKENIQVIpKDE2OCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMzk2OiByZXR1cm4oKENIQVIpKDE2OSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMzk3OiByZXR1cm4oKENIQVIpKDE3MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzk4 OiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzk5OiByZXR1cm4o KENIQVIpKDE3MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzlhOiByZXR1cm4oKENIQVIpKDE4 MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzliOiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMzljOiByZXR1cm4oKENIQVIpKDE4MyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMzlkOiByZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MzllOiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzlmOiByZXR1 cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2EwOiByZXR1cm4oKENIQVIp KDE5OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2ExOiByZXR1cm4oKENIQVIpKDE5OSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2EzOiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwM2E0OiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwM2E1OiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2E2OiBy ZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2E3OiByZXR1cm4oKENI QVIpKDIxMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2E4OiByZXR1cm4oKENIQVIpKDIxMiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2E5OiByZXR1cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwM2FhOiByZXR1cm4oKENIQVIpKDE0NSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwM2FiOiByZXR1cm4oKENIQVIpKDE1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2Fj OiByZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2FkOiByZXR1cm4o KENIQVIpKDE1NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2FlOiByZXR1cm4oKENIQVIpKDE1 OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2FmOiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwM2IwOiByZXR1cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwM2IxOiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw M2IyOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2IzOiByZXR1 cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2I0OiByZXR1cm4oKENIQVIp KDIyMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2I1OiByZXR1cm4oKENIQVIpKDIyMiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2I2OiByZXR1cm4oKENIQVIpKDIyNCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwM2I3OiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwM2I4OiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2I5OiBy ZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2JhOiByZXR1cm4oKENI QVIpKDIyOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2JiOiByZXR1cm4oKENIQVIpKDIyOSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2JjOiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwM2JkOiByZXR1cm4oKENIQVIpKDIzMSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwM2JlOiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2Jm OiByZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2MwOiByZXR1cm4o KENIQVIpKDIzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2MxOiByZXR1cm4oKENIQVIpKDIz NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2MyOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwM2MzOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwM2M0OiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw M2M1OiByZXR1cm4oKENIQVIpKDI0MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2M2OiByZXR1 cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2M3OiByZXR1cm4oKENIQVIp KDI0NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2M4OiByZXR1cm4oKENIQVIpKDI0NiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2M5OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwM2NhOiByZXR1cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwM2NiOiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2NjOiBy ZXR1cm4oKENIQVIpKDE2MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2NkOiByZXR1cm4oKENI QVIpKDE2MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2NlOiByZXR1cm4oKENIQVIpKDI1MyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDE1OiByZXR1cm4oKENIQVIpKDE0MiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyMDE4OiByZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyMDE5OiByZXR1cm4oKENIQVIpKDE0MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTAw OiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTAyOiByZXR1cm4o KENIQVIpKDE3OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTBjOiByZXR1cm4oKENIQVIpKDIx OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENIQVIpKDE5MSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENIQVIpKDE5MiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTFjOiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTI0OiByZXR1 cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTJjOiByZXR1cm4oKENIQVIp KDE5NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4oKENIQVIpKDE5MyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTNjOiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyNTUwOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNTUxOiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU0OiBy ZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU3OiByZXR1cm4oKENI QVIpKDE4NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVhOiByZXR1cm4oKENIQVIpKDIwMCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVkOiByZXR1cm4oKENIQVIpKDE4OCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTYwOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTYzOiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY2 OiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY5OiByZXR1cm4o KENIQVIpKDIwMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTZjOiByZXR1cm4oKENIQVIpKDIw NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTgwOiByZXR1cm4oKENIQVIpKDIyMyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTg0OiByZXR1cm4oKENIQVIpKDIyMCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTg4OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTkxOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTkyOiByZXR1 cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTkzOiByZXR1cm4oKENIQVIp KDE3OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNWEwOiByZXR1cm4oKENIQVIpKDI1NCAmIDB4 ZmYpKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9jcHN1YihjKSk7ICAgICAvKiBGb3IgYm94 IGNoYXJhY3RlcnMgZXRjICovCi0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUEMgQ29kZSBQYWdlIEMwIGdyYXBoaWNzICovCi0jaWZkZWYgQ0tf QU5TSUMKLXR4X3NtaWxleShVU0hPUlQgYykKLSNlbHNlCi10eF9zbWlsZXkoYykgVVNIT1JUIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA+IDB4MWYpCi0gICAgICByZXR1 cm4oLTEpOwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hB UikwICYgMHg3Zik7Ci0gICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKTIxICYgMHg3Zik7 Ci0gICAgICBjYXNlIDB4MDBiNjogcmV0dXJuKChDSEFSKTIwICYgMHg3Zik7Ci0gICAgICBjYXNl IDB4MjAyMjogcmV0dXJuKChDSEFSKTcgJiAweDdmKTsKLSAgICAgIGNhc2UgMHgyMDNjOiByZXR1 cm4oKENIQVIpMTkgJiAweDdmKTsKLSAgICAgIGNhc2UgMHgyMTkwOiByZXR1cm4oKENIQVIpMjcg JiAweDdmKTsKLSAgICAgIGNhc2UgMHgyMTkxOiByZXR1cm4oKENIQVIpMjQgJiAweDdmKTsKLSAg ICAgIGNhc2UgMHgyMTkyOiByZXR1cm4oKENIQVIpMjYgJiAweDdmKTsKLSAgICAgIGNhc2UgMHgy MTkzOiByZXR1cm4oKENIQVIpMjUgJiAweDdmKTsKLSAgICAgIGNhc2UgMHgyMTk0OiByZXR1cm4o KENIQVIpMjkgJiAweDdmKTsKLSAgICAgIGNhc2UgMHgyMTk1OiByZXR1cm4oKENIQVIpMTggJiAw eDdmKTsKLSAgICAgIGNhc2UgMHgyMWE4OiByZXR1cm4oKENIQVIpMjMgJiAweDdmKTsKLSAgICAg IGNhc2UgMHgyMzE5OiByZXR1cm4oKENIQVIpMjggJiAweDdmKTsKLSAgICAgIGNhc2UgMHgyNWFj OiByZXR1cm4oKENIQVIpMjIgJiAweDdmKTsKLSAgICAgIGNhc2UgMHgyNWIyOiByZXR1cm4oKENI QVIpMzAgJiAweDdmKTsKLSAgICAgIGNhc2UgMHgyNWJhOiByZXR1cm4oKENIQVIpMTYgJiAweDdm KTsKLSAgICAgIGNhc2UgMHgyNWJjOiByZXR1cm4oKENIQVIpMzEgJiAweDdmKTsKLSAgICAgIGNh c2UgMHgyNWM0OiByZXR1cm4oKENIQVIpMTcgJiAweDdmKTsKLSAgICAgIGNhc2UgMHgyNWQ4OiBy ZXR1cm4oKENIQVIpOCAmIDB4N2YpOwotICAgICAgY2FzZSAweDI1ZDk6IHJldHVybigoQ0hBUikx MCAmIDB4N2YpOwotICAgICAgY2FzZSAweDI1ZWY6IHJldHVybigoQ0hBUik5ICYgMHg3Zik7Ci0g ICAgICBjYXNlIDB4MjYzYTogcmV0dXJuKChDSEFSKTEgJiAweDdmKTsKLSAgICAgIGNhc2UgMHgy NjNiOiByZXR1cm4oKENIQVIpMiAmIDB4N2YpOwotICAgICAgY2FzZSAweDI2M2M6IHJldHVybigo Q0hBUikxNSAmIDB4N2YpOwotICAgICAgY2FzZSAweDI2NDA6IHJldHVybigoQ0hBUikxMiAmIDB4 N2YpOwotICAgICAgY2FzZSAweDI2NDI6IHJldHVybigoQ0hBUikxMSAmIDB4N2YpOwotICAgICAg Y2FzZSAweDI2NjA6IHJldHVybigoQ0hBUik2ICYgMHg3Zik7Ci0gICAgICBjYXNlIDB4MjY2Mzog cmV0dXJuKChDSEFSKTUgJiAweDdmKTsKLSAgICAgIGNhc2UgMHgyNjY1OiByZXR1cm4oKENIQVIp MyAmIDB4N2YpOwotICAgICAgY2FzZSAweDI2NjY6IHJldHVybigoQ0hBUik0ICYgMHg3Zik7Ci0g ICAgICBjYXNlIDB4MjY2YTogcmV0dXJuKChDSEFSKTEzICYgMHg3Zik7Ci0gICAgICBjYXNlIDB4 MjY2YzogcmV0dXJuKChDSEFSKTE0ICYgMHg3Zik7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4oLTEp OwotICAgIH0KLX0KLQotVVNIT1JUICAvKiBIb3Jpem9udGFsIFNjYW4gTGluZXMgVW5pY29kZSBz dWJzdGl0dXRpb25zICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2hzbHN1YihVU0hPUlQgYykKLSNl bHNlCi10eF9oc2xzdWIoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAg ICBpZiAoYyA+PSAweDIzQkEgJiYgYyA8PSAweDIzQkQgKQotICAgIHN3aXRjaCAoYykgewotICAg ICAgY2FzZSAweDIzQkE6IHJldHVybigweDI1MDApOyAgICAgIC8qIEggbGluZSAtIFNjYW4gMSAq LwotICAgICAgY2FzZSAweDIzQkI6IHJldHVybigweDI1MDApOyAgICAgIC8qIEggbGluZSAtIFNj YW4gMyAqLwotICAgICAgY2FzZSAweDIzQkM6IHJldHVybigweDI1MDApOyAgICAgIC8qIEggbGlu ZSAtIFNjYW4gNyAqLwotICAgICAgY2FzZSAweDIzQkQ6IHJldHVybigweDI1MDApOyAgICAgIC8q IEggbGluZSAtIFNjYW4gOSAqLwotICAgIH0KLSAgICByZXR1cm4oYyk7Ci19Ci0KLVVTSE9SVCAg LyogS2VybWl0IGZvbnQgMHhFPz8/IFVuaWNvZGUgc3Vic3RpdHV0aW9ucyAqLwotI2lmZGVmIENL X0FOU0lDCi10eF91c3ViKFVTSE9SVCBjKQotI2Vsc2UKLXR4X3VzdWIoYykgVVNIT1JUIGM7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4RTAwMCB8fCBjID4gMHhFRkZG KQotICAgICAgcmV0dXJuKGMpOwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSAweEUyMDA6 IHJldHVybigweDI1MjQpOyAgICAgIC8qIEV4dGVuc2libGUgTGVmdCBCcmFjZSBNaWRkbGUgKi8K LSAgICAgIGNhc2UgMHhFMjAxOiByZXR1cm4oMHgyNTcwKTsgICAgICAvKiBFeHRlbnNpYmxlIExl ZnQgUGFyZW50aGVzaXMgYm90ICovCi0gICAgICBjYXNlIDB4RTIwMjogcmV0dXJuKDB4MjU2ZCk7 ICAgICAgLyogRXh0ZW5zaWJsZSBsZWZ0IHBhcmVudGhlc2lzIHRvcCAqLwotICAgICAgY2FzZSAw eEUyMDM6IHJldHVybigweDI1MTQpOyAgICAgIC8qIEV4dGVuc2libGUgbGVmdCBTQiBib3QgKi8K LSAgICAgIGNhc2UgMHhFMjA0OiByZXR1cm4oMHgyNTBjKTsgICAgICAvKiBFeHRlbnNpYmxlIGxl ZnQgU0IgdG9wICovCi0gICAgICBjYXNlIDB4RTIwNTogcmV0dXJuKDB4MjUxYyk7ICAgICAgLyog RXh0ZW5zaWJsZSByaWdodCBicmFjZSBtaWRkbGUgKi8KLSAgICAgIGNhc2UgMHhFMjA2OiByZXR1 cm4oMHgyNTZmKTsgICAgICAvKiBFeHRlbnNpYmxlIHJpZ2h0IHBhcmVudGhlc2lzIGJvdCAqLwot ICAgICAgY2FzZSAweEUyMDc6IHJldHVybigweDI1NmUpOyAgICAgIC8qIEV4dGVuc2libGUgcmln aHQgcGFyZW50aGVzaXMgdG9wICovCi0gICAgICBjYXNlIDB4RTIwODogcmV0dXJuKDB4MjUxOCk7 ICAgICAgLyogRXh0ZW5zaWJsZSByaWdodCBTQiBib3QgKi8KLSAgICAgIGNhc2UgMHhFMjA5OiBy ZXR1cm4oMHgyNTEwKTsgICAgICAvKiBFeHRlbnNpYmxlIHJpZ2h0IFNCIHRvcCAqLwotICAgICAg Y2FzZSAweEUyMEM6IHJldHVybigweDAzYTMpOyAgICAgIC8qIFN1bW1hdGlvbiBzeW1ib2wgYm90 ICovCi0gICAgICBjYXNlIDB4RTIwRDogcmV0dXJuKDB4MDNhMyk7ICAgICAgLyogU3VtbWF0aW9u IHN5bWJvbCB0b3AgKi8KLSAgICAgIGNhc2UgMHhFMjBFOiByZXR1cm4oMHgyNTEwKTsgICAgICAv KiBSaWdodCBjZWlsaW5nIGNvcm5lciAqLwotICAgICAgY2FzZSAweEUyMEY6IHJldHVybigweDI1 MTgpOyAgICAgIC8qIFJpZ2h0IGZsb29yIGNvcm5lciAqLwotICAgICAgY2FzZSAweEUzMDA6IHJl dHVybigweDI1MDIpOyAgICAgIC8qIFYgYm94IGxpbmUsIGV4dGVuc2libGUsIGxlZnQgKi8KLSAg ICAgIGNhc2UgMHhFMzA5OiByZXR1cm4oMHgyNTAyKTsgICAgICAvKiBWIGJveCBsaW5lLCBleHRl bnNpYmxlLCByaWdodCAqLwotICAgICAgY2FzZSAweEUzMEE6IHJldHVybigweDI1OGMpOyAgICAg IC8qIERpYWdvbmFsIGZpbGwsIGRhcmssIFVMICovCi0gICAgICBjYXNlIDB4RTMwQjogcmV0dXJu KDB4MjU5MCk7ICAgICAgLyogRGlhZ29uYWwgZmlsbCwgZGFyaywgVVIgKi8KLSAgICAgIGNhc2Ug MHhFMzIwOiByZXR1cm4oMHgyNTgzKTsgICAgICAvKiBRdWFkcmFudCBMTCAqLwotICAgICAgY2Fz ZSAweEUzMjE6IHJldHVybigweDI0OTApOyAgICAgIC8qIFF1YWRyYW50IExSICovCi0gICAgICBj YXNlIDB4RTMyMjogcmV0dXJuKDB4MjU4Yyk7ICAgICAgLyogUXVhZHJhbnQgVUwgKi8KLSAgICAg IGNhc2UgMHhFMzIzOiByZXR1cm4oMHgyNTg4KTsgICAgICAvKiBRdWFkcmFudCBVTCBhbmQgTEwg YW5kIExSICovCi0gICAgICBjYXNlIDB4RTMyNDogcmV0dXJuKDB4MjU4OCk7ICAgICAgLyogUXVh ZHJhbnQgVUwgYW5kIExSICovCi0gICAgICBjYXNlIDB4RTMyNTogcmV0dXJuKDB4MjU4OCk7ICAg ICAgLyogUXVhZHJhbnQgVUwgYW5kIExSICovCi0gICAgICBjYXNlIDB4RTMyNjogcmV0dXJuKDB4 MjU4OCk7ICAgICAgLyogUXVhZHJhbnQgVUwgYW5kIFVSIGFuZCBMTCAqLwotICAgICAgY2FzZSAw eEUzMjc6IHJldHVybigweDI1ODgpOyAgICAgIC8qIFF1YWRyYW50IFVMIGFuZCBVUiBhbmQgTFIg Ki8KLSAgICAgIGNhc2UgMHhFMzI4OiByZXR1cm4oMHgyNTkwKTsgICAgICAvKiBRdWFkcmFudCBV UiAqLwotICAgICAgY2FzZSAweEUzMjk6IHJldHVybigweDI1ODgpOyAgICAgIC8qIFF1YWRyYW50 IFVSIGFuZCBMTCBhbmQgTFIgKi8KLSAgICAgIGNhc2UgMHhFNDAwOiByZXR1cm4oMHgyMjFhKTsg ICAgICAvKiBSYWRpY2FsIHN5bWJvbCwgc21hbGwgKi8KLSAgICAgIGNhc2UgMHhFNDAxOiByZXR1 cm4oMHgwMGJmKTsgICAgICAvKiBSZXZlcnNlIHF1ZXN0aW9uIG1hcmsgKi8KLSAgICAgIGRlZmF1 bHQ6IHJldHVybigodW5zaWduZWQpMHhmZmZkKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmljb2RlIHRvIENQNDM3IHN1YnN0aXR1dGlv bnMgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfY3BzdWIoVVNIT1JUIGMpCi0jZWxzZQotdHhfY3Bz dWIoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpbnQgeDsKLSAg ICBpZiAoYyA8IDB4MDA4MCkgICAgICAgICAgICAgICAgICAgICAvKiBBU0NJSSAqLwotICAgICAg cmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotCi0gICAgaWYgKGMgPj0gMHgwMDgwICYmIGMgPD0g MHgwMTAwKSB7Ci0gICAgICAgIHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAgICAgLyogTGF0 aW4tMSAqLwotICAgICAgICAgIGNhc2UgMHgwMEEyOiByZXR1cm4oMHg5Yik7ICAgIC8qIENlbnQg c2lnbiAqLwotICAgICAgICAgIGNhc2UgMHgwMEEzOiByZXR1cm4oMTU2KTsgICAgIC8qIFBvdW5k IHNpZ24gKi8KLSAgICAgICAgICBjYXNlIDB4MDBBQzogcmV0dXJuKDE3MCk7ICAgICAvKiBOb3Qg c3ltYm9sICovCi0gICAgICAgICAgY2FzZSAweDAwQjA6IHJldHVybigyNDgpOyAgICAgLyogRGVn cmVlIHN5bWJvbCAqLwotICAgICAgICAgIGNhc2UgMHgwMEIxOiByZXR1cm4oMjQxKTsgICAgIC8q IFBsdXMgb3IgbWludXMgc3ltYm9sICovCi0gICAgICAgICAgY2FzZSAweDAwQjI6IHJldHVybigy NTMpOyAgICAgLyogU3VwZXJzY3JpcHQgMiAqLwotICAgICAgICAgIGNhc2UgMHgwMEIzOiByZXR1 cm4oNTEpOyAgICAgIC8qIFN1cGVyc2NyaXB0IDMgKi8KLSAgICAgICAgICBjYXNlIDB4MDBCNjog cmV0dXJuKDE0KTsgICAgICAvKiBQaWxjcm93IHN5bWJvbCAqLwotICAgICAgICAgIGNhc2UgMHgw MEI3OiByZXR1cm4oMjUwKTsgICAgIC8qIENlbnRlciBkb3QsIHNtYWxsICovCi0gICAgICAgICAg Y2FzZSAweDAwQjk6IHJldHVybig0OSk7ICAgICAgLyogU3VwZXJzY3JpcHQgMSAqLwotICAgICAg ICAgIGNhc2UgMHgwMEQwOiByZXR1cm4oNjgpOyAgICAgIC8qIEV0aCAtPiBEICovCi0gICAgICAg ICAgY2FzZSAweDAwRDc6IHJldHVybigxMjApOyAgICAgLyogTXVsdGlwbGljYXRpb24gc3ltYm9s ICovCi0gICAgICAgICAgY2FzZSAweDAwREU6IHJldHVybig4NCk7ICAgICAgLyogVGhvcm4gLT4g VCAqLwotICAgICAgICAgIGNhc2UgMHgwMEYwOiByZXR1cm4oMTAwKTsgICAgIC8qIGV0aCAtPiBl dGggKi8KLSAgICAgICAgICBjYXNlIDB4MDBGNzogcmV0dXJuKDI0Nik7ICAgICAvKiBEaXZpc2lv biBzeW1ib2wgKi8KLSAgICAgICAgICBjYXNlIDB4MDBGRTogcmV0dXJuKDExNik7ICAgICAvKiB0 aG9ybiAtPiB0ICovCi0gICAgICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MTMpOwotICAgICAgICB9 Ci0gICAgfSBlbHNlIGlmIChjID49IDB4MDEwMCAmJiBjIDw9IDB4MDJmZikgeyAvKiBMYXRpbi0y IGV0YyAqLwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICBjYXNlIDB4MDEwMzogcmV0 dXJuKDk3KTsgICAgICAvKiBhIGJyZXZlICovCi0gICAgICAgICAgY2FzZSAweDAxMDU6IHJldHVy big5Nyk7ICAgICAgLyogYSBvZ29uZWsgKi8KLSAgICAgICAgICBjYXNlIDB4MDEwNzogICAgICAg ICAgICAgICAgICAvKiBjIGFjdXRlICovCi0gICAgICAgICAgY2FzZSAweDAxMGQ6IHJldHVybig5 OSk7ICAgICAgLyogYyBjYXJvbiAqLwotICAgICAgICAgIGNhc2UgMHgwMTBmOiAgICAgICAgICAg ICAgICAgIC8qIGQgY2Fyb24gKi8KLSAgICAgICAgICBjYXNlIDB4MDExMTogcmV0dXJuKDEwMCk7 ICAgICAvKiBkIHdpdGggc3Ryb2tlICovCi0gICAgICAgICAgY2FzZSAweDAxMTk6ICAgICAgICAg ICAgICAgICAgLyogZSBvZ29uZWsgKi8KLSAgICAgICAgICBjYXNlIDB4MDExYjogcmV0dXJuKDEw MSk7ICAgICAvKiBlIGNhcm9uICovCi0gICAgICAgICAgY2FzZSAweDAxMWY6IHJldHVybigxMDMp OyAgICAgLyogZyBicmV2ZSAqLwotICAgICAgICAgIGNhc2UgMHgwMTMwOiByZXR1cm4oNzMpOyAg ICAgIC8qIENhcGl0YWwgSSB3aXRoIERvdCAqLwotICAgICAgICAgIGNhc2UgMHgwMTMxOiByZXR1 cm4oMTA1KTsgICAgIC8qIERvdGxlc3MgaSAqLwotICAgICAgICAgIGNhc2UgMHgwMTMyOiByZXR1 cm4oODkpOyAgICAgIC8qIElKID0+IFkgKi8KLSAgICAgICAgICBjYXNlIDB4MDEzMzogcmV0dXJu KDE1Mik7ICAgICAvKiBpaiAtPiB5IGRpYWVyZXNpcyAqLwotICAgICAgICAgIGNhc2UgMHgwMTNh OiAgICAgICAgICAgICAgICAgIC8qIGwgYWN1dGUgKi8KLSAgICAgICAgICBjYXNlIDB4MDEzZTog ICAgICAgICAgICAgICAgICAvKiBsIGNhcm9uICovCi0gICAgICAgICAgY2FzZSAweDAxNDI6IHJl dHVybigxMDgpOyAgICAgLyogbCB3aXRoIHN0cm9rZSAqLwotICAgICAgICAgIGNhc2UgMHgwMTQ0 OiAgICAgICAgICAgICAgICAgIC8qIG4gYWN1dGUgKi8KLSAgICAgICAgICBjYXNlIDB4MDE0ODog cmV0dXJuKDExMCk7ICAgICAvKiBuIGNhcm9uICovCi0gICAgICAgICAgY2FzZSAweDAxNTE6IHJl dHVybigxMTEpOyAgICAgLyogbyBkb3VibGUgYWN1dGUgKi8KLSAgICAgICAgICBjYXNlIDB4MDE1 MjogcmV0dXJuKDc5KTsgICAgICAvKiBPRSAqLwotICAgICAgICAgIGNhc2UgMHgwMTUzOiByZXR1 cm4oMTExKTsgICAgIC8qIG9lICovCi0gICAgICAgICAgY2FzZSAweDAxNTU6ICAgICAgICAgICAg ICAgICAgLyogciBhY3V0ZSAqLwotICAgICAgICAgIGNhc2UgMHgwMTU5OiByZXR1cm4oMTE0KTsg ICAgIC8qIHIgY2Fyb24gKi8KLSAgICAgICAgICBjYXNlIDB4MDE1YjogICAgICAgICAgICAgICAg ICAvKiBzIGFjdXRlICovCi0gICAgICAgICAgY2FzZSAweDAxNWY6ICAgICAgICAgICAgICAgICAg LyogcyBvZ29uZWsgKi8KLSAgICAgICAgICBjYXNlIDB4MDE2MTogcmV0dXJuKDExNSk7ICAgICAv KiBzIGNhcm9uICovCi0gICAgICAgICAgY2FzZSAweDAxNjM6ICAgICAgICAgICAgICAgICAgLyog dCBvZ29uZWsgKi8KLSAgICAgICAgICBjYXNlIDB4MDE2NTogICAgICAgICAgICAgICAgICAvKiB0 IGNhcm9uICovCi0gICAgICAgICAgY2FzZSAweDAxNjc6IHJldHVybigxMTYpOyAgICAgLyogdCB3 aXRoIHN0cm9rZSAqLwotICAgICAgICAgIGNhc2UgMHgwMTZmOiAgICAgICAgICAgICAgICAgIC8q IHUgcmluZyAqLwotICAgICAgICAgIGNhc2UgMHgwMTcxOiByZXR1cm4oMTE3KTsgICAgIC8qIHUg ZG91YmxlIGFjdXRlICovCi0gICAgICAgICAgY2FzZSAweDAxN2E6ICAgICAgICAgICAgICAgICAg LyogeiBhY3V0ZSAqLwotICAgICAgICAgIGNhc2UgMHgwMTdjOiAgICAgICAgICAgICAgICAgIC8q IHogZG90IGFib3ZlICovCi0gICAgICAgICAgY2FzZSAweDAxN2U6IHJldHVybigxMjIpOyAgICAg LyogeiBjYXJvbiAqLwotICAgICAgICAgIGNhc2UgMHgwMTkyOiByZXR1cm4oMTU5KTsgICAgIC8q IEZ1bmN0aW9uLW9mIHN5bWJvbCwgU2NyaXB0IGYgKi8KLSAgICAgICAgICBjYXNlIDB4MDFkMDog cmV0dXJuKDEwNSk7ICAgICAvKiBpIGNhcm9uICovCi0gICAgICAgICAgY2FzZSAweDAyYzc6ICAg ICAgICAgICAgICAgICAgLyogY2Fyb24gLT4gVU5LICovCi0gICAgICAgICAgY2FzZSAweDAyZDg6 IHJldHVybigweDEzKTsgICAgLyogYnJldmUgLT4gVU5LICovCi0gICAgICAgICAgY2FzZSAweDAy ZGQ6IHJldHVybigzNCk7ICAgICAgLyogRG91YmxlIGFjdXRlIC0+IERvdWJsZXF1b3RlICovCi0g ICAgICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MTMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlm IChjID49IDB4MDMwMCAmJiBjIDw9IDB4MDNmZikgeyAvKiBHcmVlayAqLwotICAgICAgICBzd2l0 Y2ggKGMpIHsKLSAgICAgICAgICBjYXNlIDB4MDM5MzogcmV0dXJuKDIyNik7ICAgICAvKiBVcHBl cmNhc2UgR3JlZWsgR2FtbWEgKi8KLSAgICAgICAgICBjYXNlIDB4MDM5ODogcmV0dXJuKDIzMyk7 ICAgICAvKiBVcHBlcmNhc2UgR3JlZWsgVGhldGEgKi8KLSAgICAgICAgICBjYXNlIDB4MDM5Qjog cmV0dXJuKDIzNSk7ICAgICAvKiBVcHBlcmNhc2UgR3JlZWsgTGFtYmRhICovCi0gICAgICAgICAg Y2FzZSAweDAzQTA6IHJldHVybigyMjcpOyAgICAgLyogVXBwZXJjYXNlIEdyZWVrIFBpICovCi0g ICAgICAgICAgY2FzZSAweDAzQTM6IHJldHVybigyMjgpOyAgICAgLyogVXBwZXJjYXNlIEdyZWVr IFNpZ21hICovCi0gICAgICAgICAgY2FzZSAweDAzQTQ6IHJldHVybigweEVBKTsgICAgLyogT21l Z2EgKi8KLSAgICAgICAgICBjYXNlIDB4MDNBNjogcmV0dXJuKDIzMik7ICAgICAvKiBVcHBlcmNh c2UgR3JlZWsgUGhpICovCi0gICAgICAgICAgY2FzZSAweDAzQTk6IHJldHVybigyMzQpOyAgICAg LyogVXBwZXJjYXNlIEdyZWVrIE9tZWdhICovCi0gICAgICAgICAgY2FzZSAweDAzQjE6IHJldHVy bigweEUwKTsgICAgLyogYWxwaGEgKi8KLSAgICAgICAgICBjYXNlIDB4MDNCMjogcmV0dXJuKDB4 RTEpOyAgICAvKiBiZXRhICovCi0gICAgICAgICAgY2FzZSAweDAzQjM6IHJldHVybigyMjYpOyAg ICAgLyogTG93ZXJjYXNlIEdyZWVrIGdhbW1hICovCi0gICAgICAgICAgY2FzZSAweDAzQjQ6IHJl dHVybigweEVCKTsgICAgLyogZGVsdGEgKi8KLSAgICAgICAgICBjYXNlIDB4MDNCNTogcmV0dXJu KDIzOCk7ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsgZXBzaWxvbiAqLwotICAgICAgICAgIGNhc2Ug MHgwM0I3OiByZXR1cm4oMjM4KTsgICAgIC8qIExvd2VyY2FzZSBHcmVlayBldGEgKi8KLSAgICAg ICAgICBjYXNlIDB4MDNCODogcmV0dXJuKDIzMyk7ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsgdGhl dGEgKi8KLSAgICAgICAgICBjYXNlIDB4MDNCOTogcmV0dXJuKDEwNSk7ICAgICAvKiBMb3dlcmNh c2UgR3JlZWsgaW90YSAqLwotICAgICAgICAgIGNhc2UgMHgwM0JBOiByZXR1cm4oMTA3KTsgICAg IC8qIExvd2VyY2FzZSBHcmVlayBrYXBwYSAqLwotICAgICAgICAgIGNhc2UgMHgwM0JCOiByZXR1 cm4oMjM1KTsgICAgIC8qIExvd2VyY2FzZSBHcmVlayBsYW1iZGEgKi8KLSAgICAgICAgICBjYXNl IDB4MDNCQzogcmV0dXJuKDIzMCk7ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsgbXUgKi8KLSAgICAg ICAgICBjYXNlIDB4MDNDMDogcmV0dXJuKDIyNyk7ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsgcGkg Ki8KLSAgICAgICAgICBjYXNlIDB4MDNDMzogcmV0dXJuKDIyOSk7ICAgICAvKiBMb3dlcmNhc2Ug R3JlZWsgc2lnbWEgKi8KLSAgICAgICAgICBjYXNlIDB4MDNDNDogcmV0dXJuKDIzMSk7ICAgICAv KiBMb3dlcmNhc2UgR3JlZWsgdGF1ICovCi0gICAgICAgICAgY2FzZSAweDAzQzY6IHJldHVybigy MzcpOyAgICAgLyogTG93ZXJjYXNlIEdyZWVrIHBoaSAqLwotICAgICAgICAgIGNhc2UgMHgwM0M3 OiByZXR1cm4oMTIwKTsgICAgIC8qIExvd2VyY2FzZSBHcmVlayBjaGkgKi8KLSAgICAgICAgICBj YXNlIDB4MDNDOTogcmV0dXJuKDIzNCk7ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsgb21lZ2EgKi8K LSAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oMHgxMyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug aWYgKGMgPj0gMHgyMDAwICYmIGMgPD0gMHgyMGZmKSB7IC8qIFN1YitTdXBlcnNjcmlwdHMgJiBD dXJyZW5jeSAqLwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICBjYXNlIDB4MjAzQzog cmV0dXJuKDB4MTMpOyAgICAvKiAhISAqLwotICAgICAgICAgIGNhc2UgMHgyMDcwOiByZXR1cm4o NDgpOyAgICAgIC8qIFN1cGVyc2NyaXB0IDAgKi8KLSAgICAgICAgICBjYXNlIDB4MjA3NDogcmV0 dXJuKDUyKTsgICAgICAvKiBTdXBlcnNjcmlwdCA0ICovCi0gICAgICAgICAgY2FzZSAweDIwNzU6 IHJldHVybig1Myk7ICAgICAgLyogU3VwZXJzY3JpcHQgNSAqLwotICAgICAgICAgIGNhc2UgMHgy MDc2OiByZXR1cm4oNTQpOyAgICAgIC8qIFN1cGVyc2NyaXB0IDYgKi8KLSAgICAgICAgICBjYXNl IDB4MjA3NzogcmV0dXJuKDU1KTsgICAgICAvKiBTdXBlcnNjcmlwdCA3ICovCi0gICAgICAgICAg Y2FzZSAweDIwNzg6IHJldHVybig1Nik7ICAgICAgLyogU3VwZXJzY3JpcHQgOCAqLwotICAgICAg ICAgIGNhc2UgMHgyMDc5OiByZXR1cm4oNTcpOyAgICAgIC8qIFN1cGVyc2NyaXB0IDkgKi8KLSAg ICAgICAgICBjYXNlIDB4MjA3YTogcmV0dXJuKDQzKTsgICAgICAvKiBTdXBlcnNjcmlwdCArICov Ci0gICAgICAgICAgY2FzZSAweDIwN2I6IHJldHVybig0NSk7ICAgICAgLyogU3VwZXJzY3JpcHQg LSAqLwotICAgICAgICAgIGNhc2UgMHgyMDdGOiByZXR1cm4oMjUyKTsgICAgIC8qIFN1cGVyc2Ny aXB0IG4gKi8KLSAgICAgICAgICBjYXNlIDB4MjA4MDogcmV0dXJuKDQ4KTsgICAgICAvKiBTdWJz Y3JpcHQgMCAqLwotICAgICAgICAgIGNhc2UgMHgyMDgxOiByZXR1cm4oNDkpOyAgICAgIC8qIFN1 YnNjcmlwdCAxICovCi0gICAgICAgICAgY2FzZSAweDIwODI6IHJldHVybig1MCk7ICAgICAgLyog U3Vic2NyaXB0IDIgKi8KLSAgICAgICAgICBjYXNlIDB4MjA4MzogcmV0dXJuKDUxKTsgICAgICAv KiBTdWJzY3JpcHQgMyAqLwotICAgICAgICAgIGNhc2UgMHgyMDg0OiByZXR1cm4oNTIpOyAgICAg IC8qIFN1YnNjcmlwdCA0ICovCi0gICAgICAgICAgY2FzZSAweDIwODU6IHJldHVybig1Myk7ICAg ICAgLyogU3Vic2NyaXB0IDUgKi8KLSAgICAgICAgICBjYXNlIDB4MjA4NjogcmV0dXJuKDU0KTsg ICAgICAvKiBTdWJzY3JpcHQgNiAqLwotICAgICAgICAgIGNhc2UgMHgyMDg3OiByZXR1cm4oNTUp OyAgICAgIC8qIFN1YnNjcmlwdCA3ICovCi0gICAgICAgICAgY2FzZSAweDIwODg6IHJldHVybig1 Nik7ICAgICAgLyogU3Vic2NyaXB0IDggKi8KLSAgICAgICAgICBjYXNlIDB4MjA4OTogcmV0dXJu KDU3KTsgICAgICAvKiBTdWJzY3JpcHQgOSAqLwotICAgICAgICAgIGNhc2UgMHgyMDhhOiByZXR1 cm4oNDMpOyAgICAgIC8qIFN1YnNjcmlwdCArICovCi0gICAgICAgICAgY2FzZSAweDIwOGI6IHJl dHVybig0NSk7ICAgICAgLyogU3Vic2NyaXB0IC0gKi8KLSAgICAgICAgICBjYXNlIDB4MjBhNzog cmV0dXJuKDB4OTMpOyAgICAvKiBQZXNldGEgKi8KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg ICAgICAgeCA9IHR4X3B1bmMoYyk7ICAgICAgICAgICAgIC8qIFZhcmlvdXMgc3BhY2VzLCBkYXNo ZXMsIGV0YyAqLwotICAgICAgICAgICAgcmV0dXJuKCh4IDwgMCkgPyAweDEzIDogeCk7Ci0gICAg ICAgIH0KLSAgICB9IGVsc2UgaWYgKGMgPj0gMHgyMTAwICYmIGMgPD0gMHgyMWZmKSB7IC8qIEFy cm93cyAqLwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICBjYXNlIDB4MjE5MDogcmV0 dXJuKDI3KTsgICAgICAvKiBBcnJvdywgbGVmdC1wb2ludGluZyAqLwotICAgICAgICAgIGNhc2Ug MHgyMTkxOiByZXR1cm4oMjQpOyAgICAgIC8qIEFycm93LCB1cC1wb2ludGluZyAqLwotICAgICAg ICAgIGNhc2UgMHgyMTkyOiByZXR1cm4oMjYpOyAgICAgIC8qIEFycm93LCByaWdodC1wb2ludGlu ZyAqLwotICAgICAgICAgIGNhc2UgMHgyMTkzOiByZXR1cm4oMjUpOyAgICAgIC8qIEFycm93LCBk b3duLXBvaW50aW5nICovCi0gICAgICAgICAgY2FzZSAweDIxOTQ6IHJldHVybigweDFkKTsgICAg LyogQXJyb3csIGxlZnQtcmlnaHQgKi8KLSAgICAgICAgICBjYXNlIDB4MjE5NTogcmV0dXJuKDB4 MTIpOyAgICAvKiBBcnJvdywgdXAtZG93biAqLwotICAgICAgICAgIGNhc2UgMHgyMTlGOiByZXR1 cm4oMHgxOCk7ICAgIC8qIEFycm93LCB1cCwgZG91YmxlaGVhZCAqLwotICAgICAgICAgIGNhc2Ug MHgyMUExOiByZXR1cm4oMHgxOSk7ICAgIC8qIEFycm93LCBkb3duLCBkb3VibGVoZWFkICovCi0g ICAgICAgICAgY2FzZSAweDIxQTg6IHJldHVybigweDE3KTsgICAgLyogQXJyb3csIHVwLWRvd24g d2l0aCBiYXNlICovCi0gICAgICAgICAgY2FzZSAweDIxRDI6IHJldHVybigyNik7ICAgICAgLyog SW1wbGllcyBzeW1ib2wgKi8KLSAgICAgICAgICBjYXNlIDB4MjFENDogcmV0dXJuKDI5KTsgICAg ICAvKiBJZiBhbmQgb25seSBpZiBzeW1ib2wgKi8KLSAgICAgICAgICBjYXNlIDB4MjFFNDogcmV0 dXJuKDB4MUIpOyAgICAvKiBBcnJvdywgbGVmdCwgdG8gYmFyICovCi0gICAgICAgICAgY2FzZSAw eDIxRTU6IHJldHVybigweDFBKTsgICAgLyogQXJyb3csIHJpZ2h0LCB0byBiYXIgKi8KLSAgICAg ICAgICBjYXNlIDB4MjFFODogcmV0dXJuKDB4MTApOyAgICAvKiBPdXRsaW5lIHdoaXRlIHJpZ2h0 IGFycm93ICovCi0gICAgICAgICAgY2FzZSAweDIxRTk6IHJldHVybigweDBmKTsgICAgLyogT3V0 bGluZSB3aGl0ZSBkb3duIGFycm93ICovCi0gICAgICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MTMp OwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChjID49IDB4MjIwMCAmJiBjIDw9IDB4MjJmZikg eyAvKiBNYXRoICovCi0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgIGNhc2UgMHgyMjAy OiByZXR1cm4oMjM1KTsgICAgIC8qIFBhcnRpYWwgZGlmZmVyZW50aWFsIHN5bWJvbCAqLwotICAg ICAgICAgIGNhc2UgMHgyMjA3OiByZXR1cm4oMzEpOyAgICAgIC8qIE5hYmxhLCBMYXBsYWNlIG9w ZXJhdG9yICovCi0gICAgICAgICAgY2FzZSAweDIyMDg6IHJldHVybigweDMzKTsgICAgLyogKGJl Y2F1c2Ugb2YgUU5YIG1pc3VuZGVyc3RhbmRpbmcpICovCi0gICAgICAgICAgY2FzZSAweDIyMUE6 IHJldHVybigyNTEpOyAgICAgLyogUmFkaWNhbCBzeW1ib2wgKi8KLSAgICAgICAgICBjYXNlIDB4 MjIxRDogcmV0dXJuKDIzNik7ICAgICAvKiBQcm9wb3J0aW9uYWwtdG8gKi8KLSAgICAgICAgICBj YXNlIDB4MjIxRTogcmV0dXJuKDIzNik7ICAgICAvKiBJbmZpbml0eSBzeW1ib2wgKi8KLSAgICAg ICAgICBjYXNlIDB4MjIyNzogcmV0dXJuKDMwKTsgICAgICAvKiBMb2dpY2FsIEFORCAqLwotICAg ICAgICAgIGNhc2UgMHgyMjI4OiByZXR1cm4oMzEpOyAgICAgIC8qIExvZ2ljYWwgT1IgKi8KLSAg ICAgICAgICBjYXNlIDB4MjIyOTogcmV0dXJuKDIzOSk7ICAgICAvKiBJbnRlcnNlY3Rpb24gc3lt Ym9sICovCi0gICAgICAgICAgY2FzZSAweDIyMkE6IHJldHVybig4NSk7ICAgICAgLyogVW5pb24g c3ltYm9sICovCi0gICAgICAgICAgY2FzZSAweDIyMkI6IHJldHVybigyNDQpOyAgICAgLyogSW50 ZWdyYWwgc3ltYm9sICovCi0gICAgICAgICAgY2FzZSAweDIyMzQ6IHJldHVybigyNTQpOyAgICAg LyogVGhlcmVmb3JlIHN5bWJvbCAqLwotICAgICAgICAgIGNhc2UgMHgyMjNDOiByZXR1cm4oMTI2 KTsgICAgIC8qIENlbnRlcmVkIHRpbGRlIG9wZXJhdG9yICovCi0gICAgICAgICAgY2FzZSAweDIy NDM6IHJldHVybigyNDcpOyAgICAgLyogQXN5bXB0b3RpY2FsbHkgZXF1YWxzICovCi0gICAgICAg ICAgY2FzZSAweDIyNDg6IHJldHVybigyNDcpOyAgICAgLyogQWxtb3N0IGVxdWFsIHRvIHN5bWJv bCAqLwotICAgICAgICAgIGNhc2UgMHgyMjYwOiByZXR1cm4oODgpOyAgICAgIC8qIE5vdCBlcXVh bCBzeW1ib2wgKi8KLSAgICAgICAgICBjYXNlIDB4MjI2MTogcmV0dXJuKDI0MCk7ICAgICAvKiBJ ZGVudGl0eSBzeW1ib2wgKi8KLSAgICAgICAgICBjYXNlIDB4MjI2NDogcmV0dXJuKDI0Myk7ICAg ICAvKiBMZXNzIHRoYW4gb3IgZXF1YWwgc3ltYm9sICovCi0gICAgICAgICAgY2FzZSAweDIyNjU6 IHJldHVybigyNDIpOyAgICAgLyogR3JlYXRlciB0aGFuIG9yIGVxdWFsIHN5bWJvbCAqLwotICAg ICAgICAgIGNhc2UgMHgyMjgyOiByZXR1cm4oNDApOyAgICAgIC8qIFN1YnNldCBzeW1ib2wgKi8K LSAgICAgICAgICBjYXNlIDB4MjI4MzogcmV0dXJuKDQxKTsgICAgICAvKiBTdXBlcnNldCBzeW1i b2wgKi8KLSAgICAgICAgICBjYXNlIDB4MjJBNjogcmV0dXJuKDB4QzMpOyAgICAvKiBBc3NlcnRp b24gc3ltYm9sICovCi0gICAgICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MTMpOwotICAgICAgICB9 Ci0gICAgfSBlbHNlIGlmIChjID49IDB4MjNCQSAmJiBjIDw9IDB4MjNCRCApIHsKLSAgICAgICAg c3dpdGNoIChjKSB7Ci0gICAgICAgIGNhc2UgMHgyM0JBOiByZXR1cm4oMHgyNTAwKTsgICAgICAv KiBIIGxpbmUgLSBTY2FuIDEgKi8KLSAgICAgICAgY2FzZSAweDIzQkI6IHJldHVybigweDI1MDAp OyAgICAgIC8qIEggbGluZSAtIFNjYW4gMyAqLwotICAgICAgICBjYXNlIDB4MjNCQzogcmV0dXJu KDB4MjUwMCk7ICAgICAgLyogSCBsaW5lIC0gU2NhbiA3ICovCi0gICAgICAgIGNhc2UgMHgyM0JE OiByZXR1cm4oMHgyNTAwKTsgICAgICAvKiBIIGxpbmUgLSBTY2FuIDkgKi8KLSAgICAgICAgfQot ICAgIH0gZWxzZSBpZiAoYyA+PSAweDIzMDAgJiYgYyA8PSAweDI0ZmYpIHsgLyogVGVjaCAqLwot ICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICBjYXNlIDB4MjMwODogcmV0dXJuKDB4REEp OyAgICAvKiBMZWZ0IGNlaWxpbmcgKi8KLSAgICAgICAgICBjYXNlIDB4MjMwOTogcmV0dXJuKDB4 QkYpOyAgICAvKiBSaWdodCBjZWlsaW5nICovCi0gICAgICAgICAgY2FzZSAweDIzMEE6IHJldHVy bigweEMwKTsgICAgLyogTGVmdCBmbG9vciAqLwotICAgICAgICAgIGNhc2UgMHgyMzBCOiByZXR1 cm4oMHhEOSk7ICAgIC8qIFJpZ2h0IGZsb29yICovCi0gICAgICAgICAgY2FzZSAweDIzMTk6IHJl dHVybigweDFDKTsgICAgLyogVHVybmVkIE5vdCBzaWduICovCi0gICAgICAgICAgY2FzZSAweDIz MjA6IHJldHVybigyNDQpOyAgICAgLyogSW50ZWdyYWwgc3ltYm9sIHRvcCAqLwotICAgICAgICAg IGNhc2UgMHgyMzIxOiByZXR1cm4oMjQ1KTsgICAgIC8qIEludGVncmFsIHN5bWJvbCBib3QgKi8K LSAgICAgICAgICBjYXNlIDB4MjMyOTogcmV0dXJuKDYwKTsgICAgICAvKiBCUkEsIGxhcmdlIGxl ZnQgYW5nbGUgYnJhY2tldCAqLwotICAgICAgICAgIGNhc2UgMHgyMzJBOiByZXR1cm4oNjIpOyAg ICAgIC8qIEtFVCwgbGFyZ2UgcmlnaHQgYW5nbGUgYnJhY2tldCAqLwotICAgICAgICAgIGNhc2Ug MHgyNDA5OiByZXR1cm4oMjYpOyAgICAgIC8qICJIVCIgYmVjb21lcyByaWdodCBhcnJvdyAqLwot ICAgICAgICAgIGNhc2UgMHgyNDBBOiByZXR1cm4oMjUpOyAgICAgIC8qICJMRiIgYmVjb21lcyBk b3duIGFycm93ICovCi0gICAgICAgICAgY2FzZSAweDI0MEI6IHJldHVybigyMyk7ICAgICAgLyog IlZUIiBiZWNvbWVzIHVwLWRvd24gYXJyb3cgKi8KLSAgICAgICAgICBjYXNlIDB4MjQwQzogcmV0 dXJuKDI0KTsgICAgICAvKiAiRkYiIGJlY29tZXMgdXAgYXJyb3cgKi8KLSAgICAgICAgICBjYXNl IDB4MjQwRDogcmV0dXJuKDI3KTsgICAgICAvKiAiQ1IiIGJlY29tZXMgbGVmdCBhcnJvdyAqLwot ICAgICAgICAgIGNhc2UgMHgyNDI0OiByZXR1cm4oMzEpOyAgICAgIC8qICJOTCIgYmVjb21lcyBk b3duIHRyaWFuZ2xlICovCi0gICAgICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MTMpOwotICAgICAg ICB9Ci0gICAgfSBlbHNlIGlmIChjID49IDB4MjUwMCAmJiBjIDw9IDB4MjU1MikgeyAvKiBCb3gg ZHJhd2luZyAqLwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICBjYXNlIDB4MjUwMDog cmV0dXJuKDE5Nik7ICAgICAvKiBDZW50ZXIgYm94IGJhciBob3Jpem9udGFsICovCi0gICAgICAg ICAgY2FzZSAweDI1MDE6IHJldHVybigweENEKTsgICAgLyogQm9sZCAtPiBEb3VibGUgKi8KLSAg ICAgICAgICBjYXNlIDB4MjUwMjogcmV0dXJuKDE3OSk7ICAgICAvKiBDZW50ZXIgYm94IGJhciB2 ZXJ0aWNhbCAqLwotICAgICAgICAgIGNhc2UgMHgyNTAzOiByZXR1cm4oMHhCQSk7ICAgIC8qIEJv bGQgKi8KLSAgICAgICAgICBjYXNlIDB4MjUwNDogcmV0dXJuKDQ1KTsgICAgICAvKiBEYXNoZWQg bGluZSAqLwotICAgICAgICAgIGNhc2UgMHgyNTA2OiByZXR1cm4oMTI0KTsgICAgIC8qIEJyb2tl biB2ZXJ0aWNhbCBiYXIgKi8KLSAgICAgICAgICBjYXNlIDB4MjUwQzogcmV0dXJuKDIxOCk7ICAg ICAvKiBVTCBib3ggY29ybmVyICovCi0gICAgICAgICAgY2FzZSAweDI1MEY6IHJldHVybigweEM5 KTsgICAgLyogQm9sZCAqLwotICAgICAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oMTkxKTsgICAg IC8qIFVSIEJveCBDb3JuZXIgKi8KLSAgICAgICAgICBjYXNlIDB4MjUxMzogcmV0dXJuKDB4QkIp OyAgICAvKiBCb2xkICovCi0gICAgICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigxOTIpOyAgICAg LyogTEwgYm94IGNvcm5lciAqLwotICAgICAgICAgIGNhc2UgMHgyNTE3OiByZXR1cm4oMHhDOCk7 ICAgIC8qIEJvbGQgKi8KLSAgICAgICAgICBjYXNlIDB4MjUxODogcmV0dXJuKDIxNyk7ICAgICAv KiBMUiBib3ggY29ybmVyICovCi0gICAgICAgICAgY2FzZSAweDI1MUI6IHJldHVybigweEJDKTsg ICAgLyogQm9sZCAqLwotICAgICAgICAgIGNhc2UgMHgyNTFDOiByZXR1cm4oMTk1KTsgICAgIC8q IExlZnQgbWlkZGxlIGJveCBzaWRlICovCi0gICAgICAgICAgY2FzZSAweDI1MjA6IHJldHVybigw eEMzKTsKLSAgICAgICAgICBjYXNlIDB4MjUyMzogcmV0dXJuKDB4Q0MpOyAgICAvKiBCb2xkICov Ci0gICAgICAgICAgY2FzZSAweDI1MjQ6IHJldHVybigxODApOyAgICAgLyogUmlnaHQgbWlkZGxl IGJveCBzaWRlICovCi0gICAgICAgICAgY2FzZSAweDI1Mjg6IHJldHVybigxODApOwotICAgICAg ICAgIGNhc2UgMHgyNTJCOiByZXR1cm4oMHhCOSk7ICAgIC8qIEJvbGQgKi8KLSAgICAgICAgICBj YXNlIDB4MjUyQzogcmV0dXJuKDE5NCk7ICAgICAvKiBNaWRkbGUgYm94IHRvcCAqLwotICAgICAg ICAgIGNhc2UgMHgyNTJGOiByZXR1cm4oMTk0KTsKLSAgICAgICAgICBjYXNlIDB4MjUzMzogcmV0 dXJuKDB4Q0IpOyAgICAvKiBCb2xkICovCi0gICAgICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigx OTMpOyAgICAgLyogTWlkZGxlIGJveCBib3QgKi8KLSAgICAgICAgICBjYXNlIDB4MjUzNzogcmV0 dXJuKDE5Myk7Ci0gICAgICAgICAgY2FzZSAweDI1M0I6IHJldHVybigweENBKTsgICAgLyogQm9s ZCAqLwotICAgICAgICAgIGNhc2UgMHgyNTNDOiByZXR1cm4oMTk3KTsgICAgIC8qIEJveCBpbnRl cnNlY3Rpb24gKi8KLSAgICAgICAgICBjYXNlIDB4MjUzRjogcmV0dXJuKDE5Nyk7Ci0gICAgICAg ICAgY2FzZSAweDI1NDI6IHJldHVybigxOTcpOwotICAgICAgICAgIGNhc2UgMHgyNTQ3OiByZXR1 cm4oMTk3KTsKLSAgICAgICAgICBjYXNlIDB4MjU0ODogcmV0dXJuKDE5Nyk7Ci0gICAgICAgICAg Y2FzZSAweDI1NDk6IHJldHVybigxOTcpOwotICAgICAgICAgIGNhc2UgMHgyNTRBOiByZXR1cm4o MTk3KTsKLSAgICAgICAgICBjYXNlIDB4MjU0QjogcmV0dXJuKDB4Q0UpOyAgICAvKiBCb2xkICov Ci0gICAgICAgICAgY2FzZSAweDI1NTA6IHJldHVybigyMDUpOyAgICAgLyogQ2VudGVyIGJveCBi YXIgaG9yaXpvbnRhbCBkb3VibGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjU1MTogcmV0dXJuKDE4 Nik7ICAgICAvKiBDZW50ZXIgYm94IGJhciB2ZXJ0aWNhbCBkb3VibGUgKi8KLSAgICAgICAgICBj YXNlIDB4MjU1MjogcmV0dXJuKDIxMyk7ICAgICAvKiBVTCBib3ggY29ybmVyIHNpbmdsZSB0byBk b3VibGUgKi8KLSAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oMHgxMyk7Ci0gICAgICAgIH0KLSAg ICB9IGVsc2UgaWYgKGMgPj0gMHgyNTUzICYmIGMgPD0gMHgyNTc5KSB7IC8qIE1vcmUgYm94IGRy YXdpbmcgKi8KLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgY2FzZSAweDI1NTM6IHJl dHVybigyMTQpOyAgICAgLyogVUwgYm94IGNvcm5lciBkb3VibGUgdG8gc2luZ2xlICovCi0gICAg ICAgICAgY2FzZSAweDI1NTQ6IHJldHVybigyMDEpOyAgICAgLyogVUwgYm94IGNvcm5lciBkb3Vi bGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjU1NTogcmV0dXJuKDE4NCk7ICAgICAvKiBVUiBib3gg Y29ybmVyIGRvdWJsZSB0byBzaW5nbGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjU1NjogcmV0dXJu KDE4Myk7ICAgICAvKiBVUiBib3ggY29ybmVyIHNpbmdsZSB0byBkb3VibGUgKi8KLSAgICAgICAg ICBjYXNlIDB4MjU1NzogcmV0dXJuKDE4Nyk7ICAgICAvKiBVUiBib3ggY29ybmVyIGRvdWJsZSAq LwotICAgICAgICAgIGNhc2UgMHgyNTU4OiByZXR1cm4oMjEyKTsgICAgIC8qIExMIGJveCBjb3Ju ZXIgc2luZ2xlIHRvIGRvdWJsZSAqLwotICAgICAgICAgIGNhc2UgMHgyNTU5OiByZXR1cm4oMjEx KTsgICAgIC8qIExMIGJveCBjb3JuZXIgZG91YmxlIHRvIHNpbmdsZSAqLwotICAgICAgICAgIGNh c2UgMHgyNTVBOiByZXR1cm4oMjAwKTsgICAgIC8qIExMIGJveCBjb3JuZXIgZG91YmxlICovCi0g ICAgICAgICAgY2FzZSAweDI1NUI6IHJldHVybigxOTApOyAgICAgLyogTFIgYm94IGNvcm5lciBk b3VibGUgdG8gc2luZ2xlICovCi0gICAgICAgICAgY2FzZSAweDI1NUM6IHJldHVybigxODkpOyAg ICAgLyogTFIgYm94IGNvcm5lciBzaW5nbGUgdG8gZG91YmxlICovCi0gICAgICAgICAgY2FzZSAw eDI1NUQ6IHJldHVybigxODgpOyAgICAgLyogTFIgYm94IGNvcm5lciBkb3VibGUgKi8KLSAgICAg ICAgICBjYXNlIDB4MjU1RTogcmV0dXJuKDE5OCk7ICAgICAvKiBMZWZ0IG1pZCBib3ggc2lkZSBz aW5nbGUgdG8gZG91YmwgKi8KLSAgICAgICAgICBjYXNlIDB4MjU1RjogcmV0dXJuKDE5OSk7ICAg ICAvKiBMZWZ0IG1pZCBib3ggc2lkZSBkb3VibGUgdG8gc2luZ2wgKi8KLSAgICAgICAgICBjYXNl IDB4MjU2MDogcmV0dXJuKDIwNCk7ICAgICAvKiBMZWZ0IG1pZGRsZSBib3ggc2lkZSBkb3VibGUg Ki8KLSAgICAgICAgICBjYXNlIDB4MjU2MTogcmV0dXJuKDE4MSk7ICAgICAvKiBSaWdodCBib3gg c2lkZSBkb3VibGUgdG8gc2luZ2xlICovCi0gICAgICAgICAgY2FzZSAweDI1NjI6IHJldHVybigx ODIpOyAgICAgLyogUmlnaHQgYm94IHNpZGUgc2luZ2xlIHRvIGRvdWJsZSAqLwotICAgICAgICAg IGNhc2UgMHgyNTYzOiByZXR1cm4oMTg1KTsgICAgIC8qIFJpZ2h0IG1pZGRsZSBib3ggc2lkZSBk b3VibGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjU2NDogcmV0dXJuKDIwOSk7ICAgICAvKiBNaWRk bGUgYm94IHRvcCBkb3VibGUgdG8gc2luZ2xlICovCi0gICAgICAgICAgY2FzZSAweDI1NjU6IHJl dHVybigyMTApOyAgICAgLyogTWlkZGxlIGJveCB0b3Agc2luZ2xlIHRvIGRvdWJsZSAqLwotICAg ICAgICAgIGNhc2UgMHgyNTY2OiByZXR1cm4oMjAzKTsgICAgIC8qIE1pZGRsZSBib3ggdG9wIGRv dWJsZSAqLwotICAgICAgICAgIGNhc2UgMHgyNTY3OiByZXR1cm4oMjA3KTsgICAgIC8qIE1pZGRs ZSBib3ggYm90IHNpbmdsZSB0byBkb3VibGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjU2ODogcmV0 dXJuKDIwOCk7ICAgICAvKiBNaWRkbGUgYm94IGJvdCBkb3VibGUgdG8gc2luZ2xlICovCi0gICAg ICAgICAgY2FzZSAweDI1Njk6IHJldHVybigyMDIpOyAgICAgLyogTWlkZGxlIGJveCBib3QgZG91 YmxlICovCi0gICAgICAgICAgY2FzZSAweDI1NkE6IHJldHVybigyMTYpOyAgICAgLyogQm94IGlu dGVyc2VjdGlvbiBkb3VibGUgdG8gc2luZ2xlICovCi0gICAgICAgICAgY2FzZSAweDI1NkI6IHJl dHVybigyMTUpOyAgICAgLyogQm94IGludGVyc2VjdGlvbiBzaW5nbGUgdG8gZG91YmxlICovCi0g ICAgICAgICAgY2FzZSAweDI1NkM6IHJldHVybigyMDYpOyAgICAgLyogQm94IGludGVyc2VjdGlv biBkb3VibGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjU2RDogcmV0dXJuKDIxOCk7ICAgICAvKiBV TCBhcmMgKi8KLSAgICAgICAgICBjYXNlIDB4MjU2RTogcmV0dXJuKDE5MSk7ICAgICAvKiBVUiBh cmMgKi8KLSAgICAgICAgICBjYXNlIDB4MjU2RjogcmV0dXJuKDIxNyk7ICAgICAvKiBMUiBhcmMg Ki8KLSAgICAgICAgICBjYXNlIDB4MjU3MDogcmV0dXJuKDE5Mik7ICAgICAvKiBMTCBhcmMgKi8K LSAgICAgICAgICBjYXNlIDB4MjU3MTogcmV0dXJuKDE3OSk7ICAgICAvKiBEaWFnb25hbCBsaW5l IExMIHRvIFVSICovCi0gICAgICAgICAgY2FzZSAweDI1NzI6IHJldHVybigxOTYpOyAgICAgLyog RGlhZ29uYWwgbGluZSBVTCB0byBMUiAqLwotICAgICAgICAgIGNhc2UgMHgyNTczOiByZXR1cm4o ODgpOyAgICAgIC8qIERpYWdvbmFsIGxpbmVzIGNyb3NzZWQgKi8KLSAgICAgICAgICBjYXNlIDB4 MjU3NTogcmV0dXJuKDB4YjMpOyAgICAvKiBIaWdoIHZlcnRpY2FsIGxpbmUgKi8KLSAgICAgICAg ICBjYXNlIDB4MjU3NjogcmV0dXJuKDQ1KTsgICAgICAvKiBTaG9ydCBob3Jpem9udGFsIGxpbmUg Ki8KLSAgICAgICAgICBjYXNlIDB4MjU3NzogcmV0dXJuKDB4YjMpOyAgICAvKiBMb3cgdmVydGlj YWwgbGluZSAqLwotICAgICAgICAgIGNhc2UgMHgyNTc5OiByZXR1cm4oMHhiMyk7ICAgIC8qIEhp Z2ggdmVydGljYWwgbGluZSBib2xkICovCi0gICAgICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MTMp OwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChjID49IDB4MjU3YSAmJiBjIDw9IDB4MjVmZikg eyAvKiBTdGlsbCBtb3JlIGJveCBkcmF3aW5nICovCi0gICAgICAgIHN3aXRjaCAoYykgewotICAg ICAgICAgIGNhc2UgMHgyNTdiOiByZXR1cm4oMHhiMyk7ICAgIC8qIExvdyB2ZXJ0aWNhbCBsaW5l IGJvbGQgKi8KLSAgICAgICAgICBjYXNlIDB4MjU4MDogcmV0dXJuKDIyMyk7ICAgICAvKiBRdWFk cmFudCBVTCBhbmQgVVIgKHRvcCBoYWxmKSAqLwotICAgICAgICAgIGNhc2UgMHgyNTgxOiByZXR1 cm4oMHhjNCk7ICAgIC8qIFNjYW4gbGluZSA5ICovCi0gICAgICAgICAgY2FzZSAweDI1ODI6IHJl dHVybigweERDKTsgICAgLyogQmxhY2sgYmxvYiBsb3dlciBoYWxmICovCi0gICAgICAgICAgY2Fz ZSAweDI1ODQ6IHJldHVybigyMjApOyAgICAgLyogUXVhZHJhbnQgTEwgYW5kIExSIChsb3dlciBo YWxmKSAqLwotICAgICAgICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oMjE5KTsgICAgIC8qIEZpbGwg Y2hhcmFjdGVyIGRhcmsgKi8KLSAgICAgICAgICBjYXNlIDB4MjU4QzogcmV0dXJuKDIyMSk7ICAg ICAvKiBRdWFkcmFudCBVTCBhbmQgTEwgKGxlZnQgaGFsZikgKi8KLSAgICAgICAgICBjYXNlIDB4 MjU4RTogcmV0dXJuKDB4REQpOwotICAgICAgICAgIGNhc2UgMHgyNTkwOiByZXR1cm4oMjIyKTsg ICAgIC8qIFF1YWRyYW50IFVSIGFuZCBMUiAocmlnaHQgaGFsZikgKi8KLSAgICAgICAgICBjYXNl IDB4MjU5MTogcmV0dXJuKDE3Nik7ICAgICAvKiBGaWxsIGNoYXJhY3RlciBsaWdodCAqLwotICAg ICAgICAgIGNhc2UgMHgyNTkyOiByZXR1cm4oMTc3KTsgICAgIC8qIEZpbGwgY2hhcmFjdGVyIG1l ZGl1bSAqLwotICAgICAgICAgIGNhc2UgMHgyNTkzOiByZXR1cm4oMTc4KTsgICAgIC8qIEZpbGwg Y2hhcmFjdGVyIGhlYXZ5ICovCi0gICAgICAgICAgY2FzZSAweDI1OTQ6IHJldHVybigweGM0KTsg ICAgLyogU2NhbiBsaW5lIDEgKi8KLSAgICAgICAgICBjYXNlIDB4MjVBMDogcmV0dXJuKDI1NCk7 ICAgICAvKiBTb2xpZCBzcXVhcmUsIGNlbnRlciAqLwotICAgICAgICAgIGNhc2UgMHgyNUE2OiBy ZXR1cm4oMTc3KTsgICAgIC8qIEJsb3RjaCAqLwotICAgICAgICAgIGNhc2UgMHgyNUFDOiAgICAg ICAgICAgICAgICAgIC8qIEJsYWNrIHJlY3RhbmdsZSAqLwotICAgICAgICAgIGNhc2UgMHgyNUFG OiByZXR1cm4oMHgxNik7ICAgIC8qIFdoaXRlIHJlY3RhbmdsZSAqLwotICAgICAgICAgIGNhc2Ug MHgyNUIyOiAgICAgICAgICAgICAgICAgIC8qIFRyaWFuZ2xlLCB1cC1wb2ludGluZyAqLwotICAg ICAgICAgIGNhc2UgMHgyNUI0OiByZXR1cm4oMHgxZSk7ICAgIC8qIFRyaWFuZ2xlLCB1cC1wb2lu dGluZyAqLwotICAgICAgICAgIGNhc2UgMHgyNUI2OiAgICAgICAgICAgICAgICAgIC8qIFRyaWFu Z2xlLCByaWdodC1wb2ludGluZywgZGFyayAqLwotICAgICAgICAgIGNhc2UgMHgyNUI3OiAgICAg ICAgICAgICAgICAgIC8qIFRyaWFuZ2xlLCByaWdodC1wb2ludGluZywgbGlnaHQgKi8KLSAgICAg ICAgICBjYXNlIDB4MjVCOTogICAgICAgICAgICAgICAgICAvKiBUcmlhbmdsZSwgcmlnaHQtcG9p bnRpbmcsIGxpZ2h0ICovCi0gICAgICAgICAgY2FzZSAweDI1QkE6IHJldHVybigweDEwKTsgICAg LyogVHJpYW5nbGUsIHJpZ2h0LXBvaW50aW5nLCBuYXJyb3cgKi8KLSAgICAgICAgICBjYXNlIDB4 MjVCQzogICAgICAgICAgICAgICAgICAvKiBUcmlhbmdsZSwgZG93bi1wb2ludGluZyAqLwotICAg ICAgICAgIGNhc2UgMHgyNUJFOiByZXR1cm4oMHgxZik7ICAgIC8qIFRyaWFuZ2xlLCBkb3duLXBv aW50aW5nICovCi0gICAgICAgICAgY2FzZSAweDI1QzA6ICAgICAgICAgICAgICAgICAgLyogVHJp YW5nbGUsIGxlZnQtcG9pbnRpbmcsIGRhcmsgKi8KLSAgICAgICAgICBjYXNlIDB4MjVDMTogICAg ICAgICAgICAgICAgICAvKiBUcmlhbmdsZSwgbGVmdC1wb2ludGluZywgZGFyayAqLwotICAgICAg ICAgIGNhc2UgMHgyNUM0OiByZXR1cm4oMHgxMSk7ICAgIC8qIFRyaWFuZ2xlLCBsZWZ0LXBvaW50 aW5nLCBuYXJyb3cgKi8KLSAgICAgICAgICBjYXNlIDB4MjVDNjogcmV0dXJuKDQpOyAgICAgICAv KiBEaWFtb25kLCBjZW50ZXIsIHNvbGlkICovCi0gICAgICAgICAgY2FzZSAweDI1Q0I6IHJldHVy bigweDA5KTsgICAgLyogQ2lyY2xlICovCi0gICAgICAgICAgY2FzZSAweDI1Q0Y6IHJldHVybigy NDkpOyAgICAgLyogQ2VudGVyIGRvdCwgbGFyZ2UgKi8KLSAgICAgICAgICBjYXNlIDB4MjVkODog cmV0dXJuKDB4MDgpOyAgICAvKiBJbnZlcnNlIGJ1bGxldCAqLwotICAgICAgICAgIGNhc2UgMHgy NWQ5OiByZXR1cm4oMHgwYSk7ICAgIC8qIEludmVyc2Ugd2hpdGUgY2lyY2xlICovCi0gICAgICAg ICAgY2FzZSAweDI1RTI6IHJldHVybigweEQ5KTsgICAgLyogTG93ZXIgcmlnaHQgdHJpYW5nbGUg Ki8KLSAgICAgICAgICBjYXNlIDB4MjVFMzogcmV0dXJuKDB4QzApOyAgICAvKiBMb3dlciBsZWZ0 IHRyaWFuZ2xlICovCi0gICAgICAgICAgY2FzZSAweDI1RTQ6IHJldHVybigweERBKTsgICAgLyog VXBwZXIgbGVmdCB0cmlhbmdsZSAqLwotICAgICAgICAgIGNhc2UgMHgyNUU1OiByZXR1cm4oMHhC Zik7ICAgIC8qIFVwcGVyIHJpZ2h0IHRyaWFuZ2xlICovCi0gICAgICAgICAgZGVmYXVsdDogcmV0 dXJuKDB4MTMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChjID49IDB4MjYwMCkgeyAgICAg ICAgICAgLyogQWxsIHRoZSByZXN0ICovCi0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAg IGNhc2UgMHgyNjNhOiByZXR1cm4oMHgwMSk7ICAgIC8qIFNtaWxleSAqLwotICAgICAgICAgIGNh c2UgMHgyNjNiOiByZXR1cm4oMHgwMik7ICAgIC8qIEludmVyc2UgU21pbGV5ICovCi0gICAgICAg ICAgY2FzZSAweDI2M2M6IHJldHVybigweDBmKTsgICAgLyogV2hpdGUgU3VuIHdpdGggUmF5cyAq LwotICAgICAgICAgIGNhc2UgMHgyNjQwOiByZXR1cm4oMHgwYyk7ICAgIC8qIE1hbGUgc2lnbiAq LwotICAgICAgICAgIGNhc2UgMHgyNjQyOiByZXR1cm4oMHgwYik7ICAgIC8qIEZlbWFsZSBzaWdu ICovCi0gICAgICAgICAgY2FzZSAweDI2NjA6IHJldHVybigweDA2KTsgICAgLyogU3BhZGUgKi8K LSAgICAgICAgICBjYXNlIDB4MjY2MzogcmV0dXJuKDB4MDUpOyAgICAvKiBDbHViICovCi0gICAg ICAgICAgY2FzZSAweDI2NjU6IHJldHVybigweDAzKTsgICAgLyogSGVhcnQgKi8KLSAgICAgICAg ICBjYXNlIDB4MjY2NjogcmV0dXJuKDB4MDQpOyAgICAvKiBEaWFtb25kLCBjZW50ZXIsIHNvbGlk ICovCi0gICAgICAgICAgY2FzZSAweDI2NmE6IHJldHVybigweDBkKTsgICAgLyogUXVhcnRlciBu b3RlICovCi0gICAgICAgICAgY2FzZSAweDI2NmI6ICAgICAgICAgICAgICAgICAgLyogQmVhbWVk IHF1YXJ0ZXIgbm90ZXMgKi8KLSAgICAgICAgICBjYXNlIDB4MjY2YzogcmV0dXJuKDB4MGUpOyAg ICAvKiBCZWFtZWQgOHRoIG5vdGVzICovCi0gICAgICAgICAgY2FzZSAweDI3OWU6IHJldHVybigw eDFhKTsgICAgLyogQm9sZCByaWdodCBhcnJvdyAqLwotICAgICAgICAgIGNhc2UgMHgyN2ExOiBy ZXR1cm4oMHgxYSk7ICAgIC8qIEhlYXZ5IGJsYWNrIHJpZ2h0IGFycm93LiAqLwotICAgICAgICAg IGNhc2UgMHhFMjAwOiByZXR1cm4oMTgwKTsgICAgIC8qIEV4dGVuc2libGUgbGVmdCBicmFjZSBt aWRkbGUgKi8KLSAgICAgICAgICBjYXNlIDB4RTIwMTogcmV0dXJuKDE5Mik7ICAgICAvKiBFeHRl bnNpYmxlIExlZnQgcGFyZW50aGVzaXMgYm90ICovCi0gICAgICAgICAgY2FzZSAweEUyMDI6IHJl dHVybigyMTgpOyAgICAgLyogRXh0ZW5zaWJsZSBsZWZ0IHBhcmVudGhlc2lzIHRvcCAqLwotICAg ICAgICAgIGNhc2UgMHhFMjAzOiByZXR1cm4oMTkyKTsgICAgIC8qIEV4dGVuc2libGUgbGVmdCBT QiBib3QgKi8KLSAgICAgICAgICBjYXNlIDB4RTIwNDogcmV0dXJuKDIxOCk7ICAgICAvKiBFeHRl bnNpYmxlIGxlZnQgU0IgdG9wICovCi0gICAgICAgICAgY2FzZSAweEUyMDU6IHJldHVybigxOTUp OyAgICAgLyogRXh0ZW5zaWJsZSByaWdodCBicmFjZSBtaWRkbGUgKi8KLSAgICAgICAgICBjYXNl IDB4RTIwNjogcmV0dXJuKDIxNyk7ICAgICAvKiBFeHRlbnNpYmxlIHJpZ2h0IHBhcmVudGhlc2lz IGJvdCAqLwotICAgICAgICAgIGNhc2UgMHhFMjA3OiByZXR1cm4oMTkxKTsgICAgIC8qIEV4dGVu c2libGUgcmlnaHQgcGFyZW50aGVzaXMgdG9wICovCi0gICAgICAgICAgY2FzZSAweEUyMDg6IHJl dHVybigyMTcpOyAgICAgLyogRXh0ZW5zaWJsZSByaWdodCBTQiBib3QgKi8KLSAgICAgICAgICBj YXNlIDB4RTIwOTogcmV0dXJuKDE5MSk7ICAgICAvKiBFeHRlbnNpYmxlIHJpZ2h0IFNCIHRvcCAq LwotICAgICAgICAgIGNhc2UgMHhFMjBDOiByZXR1cm4oMjI4KTsgICAgIC8qIFN1bW1hdGlvbiBz eW1ib2wgYm90ICovCi0gICAgICAgICAgY2FzZSAweEUyMEQ6IHJldHVybigyMjgpOyAgICAgLyog U3VtbWF0aW9uIHN5bWJvbCB0b3AgKi8KLSAgICAgICAgICBjYXNlIDB4RTIwRTogcmV0dXJuKDE5 MSk7ICAgICAvKiBSaWdodCBjZWlsaW5nIGNvcm5lciAqLwotICAgICAgICAgIGNhc2UgMHhFMjBG OiByZXR1cm4oMjE3KTsgICAgIC8qIFJpZ2h0IGZsb29yIGNvcm5lciAqLwotICAgICAgICAgIGNh c2UgMHhFMzAwOiByZXR1cm4oMTc5KTsgICAgIC8qIFYgYm94IGxpbmUsIGV4dGVuc2libGUsIGxl ZnQgKi8KLSAgICAgICAgICBjYXNlIDB4RTMwOTogcmV0dXJuKDE3OSk7ICAgICAvKiBWIGJveCBs aW5lLCBleHRlbnNpYmxlLCByaWdodCAqLwotICAgICAgICAgIGNhc2UgMHhFMzBBOiByZXR1cm4o MjIxKTsgICAgIC8qIERpYWdvbmFsIGZpbGwsIGRhcmssIFVMICovCi0gICAgICAgICAgY2FzZSAw eEUzMEI6IHJldHVybigyMjIpOyAgICAgLyogRGlhZ29uYWwgZmlsbCwgZGFyaywgVVIgKi8KLSAg ICAgICAgICBjYXNlIDB4RTMyMDogcmV0dXJuKDIyMSk7ICAgICAvKiBRdWFkcmFudCBMTCAqLwot ICAgICAgICAgIGNhc2UgMHhFMzIxOiByZXR1cm4oMjIyKTsgICAgIC8qIFF1YWRyYW50IExSICov Ci0gICAgICAgICAgY2FzZSAweEUzMjI6IHJldHVybigyMjEpOyAgICAgLyogUXVhZHJhbnQgVUwg Ki8KLSAgICAgICAgICBjYXNlIDB4RTMyMzogcmV0dXJuKDIxOSk7ICAgICAvKiBRdWFkcmFudCBV TCBhbmQgTEwgYW5kIExSICovCi0gICAgICAgICAgY2FzZSAweEUzMjQ6IHJldHVybigyMTkpOyAg ICAgLyogUXVhZHJhbnQgVUwgYW5kIExSICovCi0gICAgICAgICAgY2FzZSAweEUzMjU6IHJldHVy bigyMTkpOyAgICAgLyogUXVhZHJhbnQgVUwgYW5kIExSICovCi0gICAgICAgICAgY2FzZSAweEUz MjY6IHJldHVybigyMTkpOyAgICAgLyogUXVhZHJhbnQgVUwgYW5kIFVSIGFuZCBMTCAqLwotICAg ICAgICAgIGNhc2UgMHhFMzI3OiByZXR1cm4oMjE5KTsgICAgIC8qIFF1YWRyYW50IFVMIGFuZCBV UiBhbmQgTFIgKi8KLSAgICAgICAgICBjYXNlIDB4RTMyODogcmV0dXJuKDIyMik7ICAgICAvKiBR dWFkcmFudCBVUiAqLwotICAgICAgICAgIGNhc2UgMHhFMzI5OiByZXR1cm4oMjE5KTsgICAgIC8q IFF1YWRyYW50IFVSIGFuZCBMTCBhbmQgTFIgKi8KLSAgICAgICAgICBjYXNlIDB4RTQwMDogcmV0 dXJuKDI1MSk7ICAgICAvKiBSYWRpY2FsIHN5bWJvbCwgc21hbGwgKi8KLSAgICAgICAgICBjYXNl IDB4RTQwMTogcmV0dXJuKDE2OCk7ICAgICAvKiBSZXZlcnNlIHF1ZXN0aW9uIG1hcmsgKi8KLSAg ICAgICAgICBjYXNlIDB4RkZGRDogcmV0dXJuKDB4MTMpOyAgICAvKiAhISBmb3IgdW5rbm93biAq LwotICAgICAgICAgIGRlZmF1bHQ6IHJldHVybigweDEzKTsKLSAgICAgICAgfQotICAgIH0KLSAg ICByZXR1cm4oMHgxMyk7Ci19Ci0KLSNpZmRlZiBPUzIKLS8qCi0gIEx1Y2lkYSBDb25zb2xlIGlz IGEgVW5pY29kZSBmb250LCBidXQgaXQgaXMgdmVyeSBzcGFyc2VseSBwb3B1bGF0ZWQuCi0gIFNp bmNlIGl0IGlzIHRoZSBvbmx5IG1vbm9zcGFjZSBVbmljb2RlIGZvbnQgbW9zdCBwZW9wbGUgaGF2 ZSwgd2UgaGF2ZQotICB0byBtYWtlIHJlYXNvbmFibGUgc3Vic3RpdHV0aW9ucyBvciBlbHNlIDMv NCBvZiB0aGUgZ2x5cGhzIHdpbGwgc2hvdwotICB1cCBhcyBibG9icyBvbiB0aGUgc2NyZWVuLgot Ki8KLVVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmljb2RlIHRv IEx1Y2lkYSBDb25zb2xlICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2x1Y2lkYXN1YihVU0hPUlQg YykKLSNlbHNlCi10eF9sdWNpZGFzdWIoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLXsKLSAgICBpZiAoYyA8IDB4MDE4MCkgICAgICAgICAgICAgICAgICAgICAvKiBMYXRpbi0x IGFuZCBFeHRlbmRlZCBBICovCi0gICAgICByZXR1cm4oYyk7Ci0KLS8qIEZvciBlZmZpY2llbmN5 IHdlIHRyeSB0byBhcnJhbmdlIHRoZSBzZWN0aW9ucyBieSBmcmVxdWVuY3kgb2YgdXNlLiAqLwot ICAgIGlmIChjID49IDB4MjNCQSAmJiBjIDw9IDB4MjNCRCkgewotICAgICAgICBzd2l0Y2goYykg ewotICAgICAgICAgIGNhc2UgMHgyM0JBOiAgICAgICAgICAgICAgICAgICAgLyogSCBsaW5lIC0g U2NhbiAxICovCi0gICAgICAgICAgY2FzZSAweDIzQkI6ICAgICAgICAgICAgICAgICAgICAvKiBI IGxpbmUgLSBTY2FuIDMgKi8KLSAgICAgICAgICBjYXNlIDB4MjNCQzogICAgICAgICAgICAgICAg ICAgIC8qIEggbGluZSAtIFNjYW4gNyAqLwotICAgICAgICAgIGNhc2UgMHgyM0JEOiAgICAgICAg ICAgICAgICAgICAgLyogSCBsaW5lIC0gU2NhbiA5ICovCi0gICAgICAgICAgICByZXR1cm4oMHgy NTAwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYyA+PSAweDI1MDAgJiYgYyA8PSAweDI1 N2YpIHsgICAvKiBCb3ggZHJhd2luZyAqLwotICAgICAgICBpZiAoYyA+PSAweDI1NTAgJiYgYyA8 PSAweDI1NmMpCi0gICAgICAgICAgcmV0dXJuKGMpOwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAg ICAgICAgICAvKiBUaGVtc2VsdmVzICovCi0gICAgICAgIGNhc2UgMHgyNTAwOgotICAgICAgICBj YXNlIDB4MjUwMjoKLSAgICAgICAgY2FzZSAweDI1MGM6Ci0gICAgICAgIGNhc2UgMHgyNTEwOgot ICAgICAgICBjYXNlIDB4MjUxNDoKLSAgICAgICAgY2FzZSAweDI1MTg6Ci0gICAgICAgIGNhc2Ug MHgyNTFjOgotICAgICAgICBjYXNlIDB4MjUyNDoKLSAgICAgICAgY2FzZSAweDI1MmM6Ci0gICAg ICAgIGNhc2UgMHgyNTM0OgotICAgICAgICBjYXNlIDB4MjUzYzoKLSAgICAgICAgICAgIHJldHVy bihjKTsKLSAgICAgICAgICAvKiBIb3Jpem9udGFsIGxpbmVzICovCi0gICAgICAgIGNhc2UgMHgy NTAxOiAgICAgICAgICAgICAgICAgICAgLyogQm9sZCAqLwotICAgICAgICAgICAgcmV0dXJuKDB4 MjU1MCk7ICAgICAgICAgICAgIC8qIFVzZSBkb3VibGUgKi8KLSAgICAgICAgY2FzZSAweDI1MDQ6 Ci0gICAgICAgIGNhc2UgMHgyNTA1OgotICAgICAgICBjYXNlIDB4MjUwODoKLSAgICAgICAgY2Fz ZSAweDI1MDk6Ci0gICAgICAgIGNhc2UgMHgyNTRjOgotICAgICAgICBjYXNlIDB4MjU0ZDoKLSAg ICAgICAgY2FzZSAweDI1N2M6Ci0gICAgICAgIGNhc2UgMHgyNTdlOgotICAgICAgICAgICAgcmV0 dXJuKDB4MjUwMCk7Ci0gICAgICAgICAgLyogVmVydGljYWwgbGluZXMgKi8KLSAgICAgICAgY2Fz ZSAweDI1MDM6ICAgICAgICAgICAgICAgICAgICAvKiBCb2xkICovCi0gICAgICAgICAgICByZXR1 cm4oMHgyNTUxKTsgICAgICAgICAgICAgLyogVXNlIGRvdWJsZSAqLwotICAgICAgICBjYXNlIDB4 MjUwNjoKLSAgICAgICAgY2FzZSAweDI1MDc6Ci0gICAgICAgIGNhc2UgMHgyNTBhOgotICAgICAg ICBjYXNlIDB4MjUwYjogLyogT3RoZXIgKi8KLSAgICAgICAgY2FzZSAweDI1NGU6Ci0gICAgICAg IGNhc2UgMHgyNTRmOgotICAgICAgICBjYXNlIDB4MjU3ZDoKLSAgICAgICAgY2FzZSAweDI1N2Y6 Ci0gICAgICAgIGNhc2UgMHgyNTc1OgotICAgICAgICBjYXNlIDB4MjU3NzoKLSAgICAgICAgY2Fz ZSAweDI1Nzk6Ci0gICAgICAgIGNhc2UgMHgyNTdiOgotICAgICAgICAgICAgcmV0dXJuKDB4MjUw Mik7Ci0gICAgICAgICAgICAvKiBVcHBlciBsZWZ0IGJveCBjb3JuZXIgKi8KLSAgICAgICAgY2Fz ZSAweDI1MGY6ICAgICAgICAgICAgICAgICAgICAvKiBCb2xkICovCi0gICAgICAgICAgICByZXR1 cm4oMHgyNTU0KTsgICAgICAgICAgICAgLyogVXNlIGRvdWJsZSAqLwotICAgICAgICBjYXNlIDB4 MjUwZDogY2FzZSAweDI1MGU6ICAgICAgIC8qIE90aGVyICovCi0gICAgICAgICAgICByZXR1cm4o MHgyNTBjKTsKLSAgICAgICAgICAvKiBVcHBlciByaWdodCBib3ggY29ybmVyICovCi0gICAgICAg IGNhc2UgMHgyNTEzOiAgICAgICAgICAgICAgICAgICAgLyogQm9sZCAqLwotICAgICAgICAgICAg cmV0dXJuKDB4MjU1Nyk7Ci0gICAgICAgIGNhc2UgMHgyNTExOgotICAgICAgICBjYXNlIDB4MjUx MjogICAgLyogT3RoZXIgKi8KLSAgICAgICAgICAgIHJldHVybigweDI1MTApOwotICAgICAgICAg IC8qIExvd2VyIGxlZnQgYm94IGNvcm5lciAqLwotICAgICAgICBjYXNlIDB4MjUxNzogICAgICAg ICAgICAgICAgICAgIC8qIEJvbGQgKi8KLSAgICAgICAgICAgIHJldHVybigweDI1NWEpOwotICAg ICAgICBjYXNlIDB4MjUxNToKLSAgICAgICAgY2FzZSAweDI1MTY6ICAgIC8qIE90aGVyICovCi0g ICAgICAgICAgICByZXR1cm4oMHgyNTE0KTsKLSAgICAgICAgICAvKiBMb3dlciByaWdodCBib3gg Y29ybmVyICovCi0gICAgICAgIGNhc2UgMHgyNTFiOiAgICAgICAgICAgICAgICAgICAgLyogQm9s ZCAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MjU1ZCk7Ci0gICAgICAgIGNhc2UgMHgyNTE5Ogot ICAgICAgICBjYXNlIDB4MjUxYTogICAgLyogT3RoZXIgKi8KLSAgICAgICAgICAgIHJldHVybigw eDI1MTgpOwotICAgICAgICAgIC8qIFZlcnRpY2FsIGFuZCByaWdodCAqLwotICAgICAgICBjYXNl IDB4MjUyMzogICAgICAgICAgICAgICAgICAgIC8qIEJvbGQgKi8KLSAgICAgICAgICAgIHJldHVy bigweDI1NjApOwotICAgICAgICBjYXNlIDB4MjUxZDoKLSAgICAgICAgY2FzZSAweDI1MWU6Ci0g ICAgICAgIGNhc2UgMHgyNTFmOgotICAgICAgICBjYXNlIDB4MjUyMDoKLSAgICAgICAgY2FzZSAw eDI1MjE6Ci0gICAgICAgIGNhc2UgMHgyNTIyOgotICAgICAgICAgICAgcmV0dXJuKDB4MjUxYyk7 Ci0gICAgICAgICAgLyogVmVydGljYWwgYW5kIGxlZnQgKi8KLSAgICAgICAgY2FzZSAweDI1MmI6 ICAgICAgICAgICAgICAgICAgICAvKiBCb2xkICovCi0gICAgICAgICAgICByZXR1cm4oMHgyNTYz KTsKLSAgICAgICAgY2FzZSAweDI1MjU6Ci0gICAgICAgIGNhc2UgMHgyNTI2OgotICAgICAgICBj YXNlIDB4MjUyNzoKLSAgICAgICAgY2FzZSAweDI1Mjg6Ci0gICAgICAgIGNhc2UgMHgyNTI5Ogot ICAgICAgICBjYXNlIDB4MjUyYToKLSAgICAgICAgICAgIHJldHVybigweDI1MjQpOwotICAgICAg ICAgIC8qIEhvcml6b250YWwgYW5kIGRvd24gKi8KLSAgICAgICAgICBjYXNlIDB4MjUzMzogICAg ICAgICAgICAgICAgICAvKiBCb2xkICovCi0gICAgICAgICAgICByZXR1cm4oMHgyNTY2KTsKLSAg ICAgICAgY2FzZSAweDI1MmQ6Ci0gICAgICAgIGNhc2UgMHgyNTJlOgotICAgICAgICBjYXNlIDB4 MjUyZjoKLSAgICAgICAgY2FzZSAweDI1MzA6Ci0gICAgICAgIGNhc2UgMHgyNTMxOgotICAgICAg ICBjYXNlIDB4MjUzMjoKLSAgICAgICAgICAgIHJldHVybigweDI1MmMpOwotICAgICAgICAgICAg LyogSG9yaXpvbnRhbCBhbmQgdXAgKi8KLSAgICAgICAgY2FzZSAweDI1M2I6ICAgICAgICAgICAg ICAgICAgICAvKiBCb2xkICovCi0gICAgICAgICAgICByZXR1cm4oMHgyNTY5KTsKLSAgICAgICAg Y2FzZSAweDI1MzU6IGNhc2UgMHgyNTM2OiBjYXNlIDB4MjUzNzoKLSAgICAgICAgY2FzZSAweDI1 Mzg6IGNhc2UgMHgyNTM5OiBjYXNlIDB4MjUzYToKLSAgICAgICAgICAgIHJldHVybigweDI1MzQp OwotICAgICAgICAgIC8qIEhvcml6b250YWwgYW5kIFZlcnRpY2FsICovCi0gICAgICAgICAgY2Fz ZSAweDI1NGI6ICAgICAgICAgICAgICAgICAgLyogQm9sZCAqLwotICAgICAgICAgICAgcmV0dXJu KDB4MjU2Yyk7Ci0gICAgICAgICAgY2FzZSAweDI1M2Q6IGNhc2UgMHgyNTNlOiBjYXNlIDB4MjUz ZjoKLSAgICAgICAgY2FzZSAweDI1NDA6IGNhc2UgMHgyNTQxOiBjYXNlIDB4MjU0MjogY2FzZSAw eDI1NDM6Ci0gICAgICAgIGNhc2UgMHgyNTQ0OiBjYXNlIDB4MjU0NTogY2FzZSAweDI1NDY6IGNh c2UgMHgyNTQ3OgotICAgICAgICBjYXNlIDB4MjU0ODogY2FzZSAweDI1NDk6IGNhc2UgMHgyNTRh OgotICAgICAgICAgICAgcmV0dXJuKDB4MjUzYyk7Ci0gICAgICAgICAgLyogQ3VydmVkIGNvcm5l cnMgKi8KLSAgICAgICAgICBjYXNlIDB4MjU2ZDogICAgICAgICAgICAgICAgICAvKiBVTCAqLwot ICAgICAgICAgICAgcmV0dXJuKDB4MjUwYyk7Ci0gICAgICAgICAgY2FzZSAweDI1NmU6ICAgICAg ICAgICAgICAgICAgLyogVVIgKi8KLSAgICAgICAgICAgIHJldHVybigweDI1MTApOwotICAgICAg ICAgIGNhc2UgMHgyNTZmOiAgICAgICAgICAgICAgICAgIC8qIExMICovCi0gICAgICAgICAgICBy ZXR1cm4oMHgyNTE4KTsKLSAgICAgICAgICBjYXNlIDB4MjU3MDogICAgICAgICAgICAgICAgICAv KiBMUiAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MjUxNCk7Ci0gICAgICAgICAgY2FzZSAweDI1 NzE6ICAgICAgICAgICAgICAgICAgLyogRGlhZ29uYWwgKi8KLSAgICAgICAgICAgIHJldHVybigw eDAwMmYpOwotICAgICAgICAgIGNhc2UgMHgyNTcyOiAgICAgICAgICAgICAgICAgIC8qIE90aGVy IGRpYWdvbmFsICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDVjKTsKLSAgICAgICAgICBjYXNl IDB4MjU3MzogICAgICAgICAgICAgICAgICAvKiBEaWFnb25hbCBjcm9zcyAqLwotICAgICAgICAg ICAgcmV0dXJuKDB4MDBkNyk7Ci0gICAgICAgICAgLyogUGFydGlhbCBob3Jpem9udGFsIGxpbmVz ICovCi0gICAgICAgIGNhc2UgMHgyNTc0OiBjYXNlIDB4MjU3NjogY2FzZSAweDI1Nzg6IGNhc2Ug MHgyNTdhOgotICAgICAgICAgICAgcmV0dXJuKDB4MDAyZCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g ICAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYyA+ PSAweDIxOTAgJiYgYyA8PSAweDIxZmYpIHsgICAvKiBBcnJvd3MgKi8KLSAgICAgICAgaWYgKGMg Pj0gMHgyMTkwICYmIGMgPD0gMHgyMTk1IHx8IGMgPT0gMHgyMWE4KQotICAgICAgICAgIHJldHVy bihjKTsKLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgLyogTGVmdC1hcnJvdyBmb3Jt cyAqLwotICAgICAgICBjYXNlIDB4MjE5ZTogY2FzZSAweDIxYTI6IGNhc2UgMHgyMWE0OiBjYXNl IDB4MjFhOToKLSAgICAgICAgY2FzZSAweDIxYmM6IGNhc2UgMHgyMWQwOiBjYXNlIDB4MjFkYTog Y2FzZSAweDIxZGM6Ci0gICAgICAgIGNhc2UgMHgyMWUwOiBjYXNlIDB4MjFlNDogY2FzZSAweDIx ZTY6IGNhc2UgMHgyMWM3OgotICAgICAgICAgICAgcmV0dXJuKDB4MjE5MCk7Ci0gICAgICAgICAg LyogUmlnaHQtYXJyb3cgZm9ybXMgKi8KLSAgICAgICAgY2FzZSAweDIxYTA6IGNhc2UgMHgyMWEz OiBjYXNlIDB4MjFhNjogY2FzZSAweDIxYWE6Ci0gICAgICAgIGNhc2UgMHgyMWMwOiBjYXNlIDB4 MjFjMTogY2FzZSAweDIxYzk6IGNhc2UgMHgyMWQyOgotICAgICAgICBjYXNlIDB4MjFkYjogY2Fz ZSAweDIxZGQ6IGNhc2UgMHgyMWUyOiBjYXNlIDB4MjFlNToKLSAgICAgICAgY2FzZSAweDIxZTg6 Ci0gICAgICAgICAgICByZXR1cm4oMHgyMTkyKTsKLSAgICAgICAgICAvKiBVcC1hcnJvdyBmb3Jt cyAqLwotICAgICAgICBjYXNlIDB4MjE5ZjogY2FzZSAweDIxYTU6IGNhc2UgMHgyMWJlOiBjYXNl IDB4MjFiZjoKLSAgICAgICAgY2FzZSAweDIxYzg6IGNhc2UgMHgyMWQxOiBjYXNlIDB4MjFkZTog Y2FzZSAweDIxZTE6Ci0gICAgICAgIGNhc2UgMHgyMWU3OiBjYXNlIDB4MjFlYToKLSAgICAgICAg ICAgIHJldHVybigweDIxOTEpOwotICAgICAgICAgIC8qIERvd24tYXJyb3cgZm9ybXMgKi8KLSAg ICAgICAgY2FzZSAweDIxYTE6IGNhc2UgMHgyMWE3OiBjYXNlIDB4MjFhZjogY2FzZSAweDIxYzI6 Ci0gICAgICAgIGNhc2UgMHgyMWNlOiBjYXNlIDB4MjFjYTogY2FzZSAweDIxZDM6IGNhc2UgMHgy MWRmOgotICAgICAgICBjYXNlIDB4MjFlMzogY2FzZSAweDIxZTk6Ci0gICAgICAgICAgICByZXR1 cm4oMHgyMTkzKTsKLSAgICAgICAgICAvKiBVcC1kb3duLWFycm93IGZvcm1zICovCi0gICAgICAg IGNhc2UgMHgyMWM1OiBjYXNlIDB4MjFkNToKLSAgICAgICAgICAgIHJldHVybigweDIxOTUpOwot ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0gICAgICAgIH0K LSAgICB9Ci0gICAgaWYgKGMgPj0gMHgyNTgwICYmIGMgPD0gMHgyNTlmKSB7ICAgLyogQmxvY2sg ZWxlbWVudHMgKi8KLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgIGNhc2UgMHgyNTgwOiBj YXNlIDB4MjU4NDogY2FzZSAweDI1ODg6IGNhc2UgMHgyNThjOgotICAgICAgICBjYXNlIDB4MjU5 MDogY2FzZSAweDI1OTE6IGNhc2UgMHgyNTkyOiBjYXNlIDB4MjU5MzoKLSAgICAgICAgICAgIHJl dHVybihjKTsKLSAgICAgICAgY2FzZSAweDI1ODE6IGNhc2UgMHgyNTgyOiBjYXNlIDB4MjU4MzoK LSAgICAgICAgY2FzZSAweDI1ODU6IGNhc2UgMHgyNTg2OiBjYXNlIDB4MjU4NzoKLSAgICAgICAg ICAgIHJldHVybigweDI1ODQpOwotICAgICAgICBjYXNlIDB4MjU4OTogY2FzZSAweDI1OGE6IGNh c2UgMHgyNThiOgotICAgICAgICBjYXNlIDB4MjU4ZDogY2FzZSAweDI1OGU6IGNhc2UgMHgyNThm OgotICAgICAgICAgICAgcmV0dXJuKDB4MjU4Yyk7Ci0gICAgICAgIGNhc2UgMHgyNTk1OgotICAg ICAgICAgICAgcmV0dXJuKDB4MjUwMik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy ZXR1cm4oMHhmZmZkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYyA+PSAweDIyMDAgJiYg YyA8PSAweDIyZmYpIHsgICAvKiBNYXRoZW1hdGljYWwgb3BlcmF0b3JzICovCi0gICAgICAgIHN3 aXRjaCAoYykgewotICAgICAgICBjYXNlIDB4MjIwMjogY2FzZSAweDIyMDY6IGNhc2UgMHgyMjBm OiBjYXNlIDB4MjIxMTogY2FzZSAweDIyMTI6Ci0gICAgICAgIGNhc2UgMHgyMjE5OiBjYXNlIDB4 MjIyMDogY2FzZSAweDIyMWU6IGNhc2UgMHgyMjFmOiBjYXNlIDB4MjIyOToKLSAgICAgICAgY2Fz ZSAweDIyMmI6IGNhc2UgMHgyMjQ4OiBjYXNlIDB4MjI2MDogY2FzZSAweDIyNjE6IGNhc2UgMHgy MjY0OgotICAgICAgICBjYXNlIDB4MjI2NToKLSAgICAgICAgICAgIHJldHVybihjKTsKLSAgICAg ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybigweGZmZmQpOwotICAgICAgICB9Ci0gICAg fQotICAgIGlmIChjID49IDB4MjMwMCAmJiBjIDw9IDB4MjM3ZikgeyAgIC8qIE1pc2NlbGxhbmVv dXMgVGVjaG5pY2FsICovCi0gICAgICAgIGlmIChjID09IDB4MjMwMiB8fCBjID09IDB4MjMxMCB8 fCBjID09IDB4MjMyMCB8fCBjID09IDB4MjMyMSkKLSAgICAgICAgICByZXR1cm4oYyk7Ci0gICAg ICAgIHN3aXRjaCAoYykgewotICAgICAgICAgIGNhc2UgMHgyMzI5OiAgICAgICAgICAgICAgICAg IC8qIEJSQSAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDAzYyk7Ci0gICAgICAgICAgY2FzZSAw eDIzMmE6ICAgICAgICAgICAgICAgICAgLyogS0VUICovCi0gICAgICAgICAgICByZXR1cm4oMHgw MDNlKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0g ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGMgPj0gMHgyNWEwICYmIGMgPD0gMHgyNWZmKSB7ICAg LyogR2VvbWV0cmljIHNoYXBlcyAqLwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAv KiBUaGVtc2VsdmVzICovCi0gICAgICAgIGNhc2UgMHgyNWEwOiBjYXNlIDB4MjVhYzogY2FzZSAw eDI1YjI6IGNhc2UgMHgyNWJhOgotICAgICAgICBjYXNlIDB4MjViYzogY2FzZSAweDI1YzQ6IGNh c2UgMHgyNWNhOiBjYXNlIDB4MjVjYjoKLSAgICAgICAgY2FzZSAweDI1ZDg6IGNhc2UgMHgyNWQ5 OgotICAgICAgICAgICAgcmV0dXJuKGMpOwotICAgICAgICAgIC8qIFNxdWFyZXMgKi8KLSAgICAg ICAgICBjYXNlIDB4MjVhMTogY2FzZSAweDI1YTI6IGNhc2UgMHgyNWEzOiBjYXNlIDB4MjVhNDoK LSAgICAgICAgICBjYXNlIDB4MjVhNTogY2FzZSAweDI1YTY6IGNhc2UgMHgyNWE3OiBjYXNlIDB4 MjVhODoKLSAgICAgICAgY2FzZSAweDI1YTk6IGNhc2UgMHgyNWFhOiBjYXNlIDB4MjVhYjoKLSAg ICAgICAgY2FzZSAweDI1ZTc6IGNhc2UgMHgyNWU4OiBjYXNlIDB4MjVlOTogY2FzZSAweDI1ZWE6 IGNhc2UgMHgyNWViOgotICAgICAgICAgICAgcmV0dXJuKDB4MjVhMCk7Ci0gICAgICAgICAgY2Fz ZSAweDI1YWQ6IGNhc2UgMHgyNWFlOiBjYXNlIDB4MjVhZjogLyogUmVjdGFuZ2xlcyAqLwotICAg ICAgICBjYXNlIDB4MjViMDogY2FzZSAweDI1YjE6Ci0gICAgICAgICAgICByZXR1cm4oMHgyNWFj KTsKLSAgICAgICAgICBjYXNlIDB4MjViMzogY2FzZSAweDI1YjQ6IGNhc2UgMHgyNWI1OiAvKiBV cHJpZ2h0IHRyaWFuZ2xlcyAqLwotICAgICAgICBjYXNlIDB4MjVlYzogY2FzZSAweDI1ZWQ6IGNh c2UgMHgyNWVlOgotICAgICAgICAgICAgcmV0dXJuKDB4MjViMik7Ci0gICAgICAgIGNhc2UgMHgy NWI2OiBjYXNlIDB4MjViNzogY2FzZSAweDI1Yjg6IGNhc2UgMHgyNWI5OiBjYXNlIDB4MjViYjoK LSAgICAgICAgICAgIHJldHVybigweDI1YmEpOyAgICAgICAgICAgICAgICAgICAgICAvKiBSaWdo dC1wb2ludGluZyB0cmlhbmdsZXMgKi8KLSAgICAgICAgICBjYXNlIDB4MjViZDogY2FzZSAweDI1 YmU6IGNhc2UgMHgyNWJmOiAvKiBEb3duLXBvaW50aW5nIHRyaWFuZ2xlcyAqLwotICAgICAgICAg ICAgcmV0dXJuKDB4MjViYyk7Ci0gICAgICAgIGNhc2UgMHgyNWMwOiBjYXNlIDB4MjVjMTogY2Fz ZSAweDI1YzI6IGNhc2UgMHgyNWMzOiBjYXNlIDB4MjVjNToKLSAgICAgICAgICAgIHJldHVybigw eDI1YzQpOyAgICAgICAgICAgICAgICAgICAgICAvKiBMZWZ0LXBvaW50aW5nIHRyaWFuZ2xlcyAq LwotICAgICAgICAgIGNhc2UgMHgyNWM2OiBjYXNlIDB4MjVjNzogY2FzZSAweDI1Yzg6IC8qIERp YW1vbmRzICovCi0gICAgICAgICAgICByZXR1cm4oMHgyNjY2KTsKLSAgICAgICAgICAvKiBDaXJj bGVzICovCi0gICAgICAgIGNhc2UgMHgyNWM5OiBjYXNlIDB4MjVjYzogY2FzZSAweDI1Y2Q6IGNh c2UgMHgyNWNlOiBjYXNlIDB4MjVjZjoKLSAgICAgICAgY2FzZSAweDI1ZDA6IGNhc2UgMHgyNWQx OiBjYXNlIDB4MjVkMjogY2FzZSAweDI1ZDM6IGNhc2UgMHgyNWQ0OgotICAgICAgICBjYXNlIDB4 MjVkNTogY2FzZSAweDI1ZTY6IGNhc2UgMHgyNWVmOgotICAgICAgICAgICAgcmV0dXJuKDB4MjVj Yik7Ci0gICAgICAgICAgLyogQ3VydmVzIGFuZCBjb3JuZXIgdHJpYW5nbGVzICovCi0gICAgICAg ICAgY2FzZSAweDI1ZGM6IGNhc2UgMHgyNWU0OiAgICAgLyogVUwgKi8KLSAgICAgICAgICAgIHJl dHVybigweDI1MGMpOwotICAgICAgICAgIGNhc2UgMHgyNWRkOiBjYXNlIDB4MjVlNTogICAgIC8q IFVSICovCi0gICAgICAgICAgICByZXR1cm4oMHgyNTEwKTsKLSAgICAgICAgICBjYXNlIDB4MjVk ZjogY2FzZSAweDI1ZTM6ICAgICAvKiBMTCAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MjUxNCk7 Ci0gICAgICAgICAgY2FzZSAweDI1ZGU6IGNhc2UgMHgyNWUyOiAgICAgLyogTFIgKi8KLSAgICAg ICAgICAgIHJldHVybigweDI1MTgpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0 dXJuKDB4ZmZmZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGMgPj0gMHgyNjAwICYmIGMg PD0gMHgyNmZmKSB7ICAgLyogTWlzYyBzeW1ib2xzICovCi0gICAgICAgIHN3aXRjaCAoYykgewot ICAgICAgICAgIC8qIFRoZW1zZWx2ZXMgKi8KLSAgICAgICAgY2FzZSAweDI2M2E6IGNhc2UgMHgy NjNiOiBjYXNlIDB4MjYzYzogY2FzZSAweDI2NDA6Ci0gICAgICAgIGNhc2UgMHgyNjQyOiBjYXNl IDB4MjY2MDogY2FzZSAweDI2NjM6IGNhc2UgMHgyNjY1OgotICAgICAgICBjYXNlIDB4MjY2Njog Y2FzZSAweDI2NmE6IGNhc2UgMHgyNjZiOgotICAgICAgICAgICAgcmV0dXJuKGMpOwotICAgICAg ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0gICAgICAgIH0KLSAgICB9 Ci0gICAgaWYgKGMgPj0gMHgyNzk0ICYmIGMgPD0gMHgyN2JlKSAgICAgLyogUmlnaHQtYXJyb3cg RGluZ2JhdHMgKi8KLSAgICAgIHJldHVybigweDIxOTIpOwotICAgIGlmIChjID49IDB4MjA3MCAm JiBjIDw9IDB4MjA5ZikgeyAgIC8qIFN1cGVyICYgc3Vic2NyaXB0cyAqLwotICAgICAgICBpZiAo YyA9PSAweDIwN2YpICAgICAgICAgICAgICAgIC8qIG4gKi8KLSAgICAgICAgICByZXR1cm4oYyk7 Ci0gICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMDcwKSAgICAgICAgICAgLyogMCAqLwotICAgICAg ICAgIHJldHVybigweDAwMzApOwotICAgICAgICBlbHNlIGlmIChjID49IDB4MjA3NCAmJiBjIDw9 IDB4MjA3OSkKLSAgICAgICAgICByZXR1cm4oYyAtIDB4MjA0MCk7Ci0gICAgICAgIGVsc2UgaWYg KGMgPj0gMHgyMDgwICYmIGMgPD0gMHgyMDg5KQotICAgICAgICAgIHJldHVybihjIC0gMHgyMDUw KTsKLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgIGNhc2UgMHgyMDdhOiBjYXNlIDB4MjA4 YToKLSAgICAgICAgICAgIHJldHVybigweDAwMmIpOwotICAgICAgICBjYXNlIDB4MjA3YjogY2Fz ZSAweDIwOGI6Ci0gICAgICAgICAgICByZXR1cm4oMHgwMDJkKTsKLSAgICAgICAgY2FzZSAweDIw N2M6IGNhc2UgMHgyMDhjOgotICAgICAgICAgICAgcmV0dXJuKDB4MDAzZCk7Ci0gICAgICAgIGNh c2UgMHgyMDdkOiBjYXNlIDB4MjA4ZDoKLSAgICAgICAgICAgIHJldHVybigweDAwMjgpOwotICAg ICAgICBjYXNlIDB4MjA3ZTogY2FzZSAweDIwOGU6Ci0gICAgICAgICAgICByZXR1cm4oMHgwMDI5 KTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybigweGZmZmQpOwotICAgICAg ICB9Ci0gICAgfQotICAgIGlmIChjID49IDB4MDE4MCAmJiBjIDw9IDB4MDI0ZikgeyAgIC8qIExh dGluIEV4dGVuZGVkIEIsIFBhcnQgSSAqLwotICAgICAgICBpZiAoYyA9PSAweDAxOTIgfHwgYyA+ PSAweDAxZmEgJiYgYyA8PSAweDAxZmYpCi0gICAgICAgICAgcmV0dXJuKGMpOyAgICAgICAgICAg ICAgICAgICAgLyogTGF0aW4gRXh0ZW5kZWQgQiAqLwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAg ICAgICAgY2FzZSAweDAxODA6IGNhc2UgMHgwMTgzOiBjYXNlIDB4MDE4NDogY2FzZSAweDAxODU6 Ci0gICAgICAgICAgICByZXR1cm4oMHgwMDYyKTsgICAgICAgICAgICAgLyogTG93ZXJjYXNlIGIg dmFyaWFudHMgKi8KLSAgICAgICAgY2FzZSAweDAxODE6IGNhc2UgMHgwMTgyOgotICAgICAgICAg ICAgcmV0dXJuKDB4MDA0Mik7ICAgICAgICAgICAgIC8qIFVwcGVyY2FzZSBCIHZhcmlhbnRzICov Ci0gICAgICAgIGNhc2UgMHgwMTg2OiBjYXNlIDB4MDE4NzoKLSAgICAgICAgICAgIHJldHVybigw eDAwNDMpOyAgICAgICAgICAgICAvKiBVcHBlcmNhc2UgQyB2YXJpYW50cyAqLwotICAgICAgICAg IGNhc2UgMHgwMTg5OiAgICAgICAgICAgICAgICAgIC8qIEQgd2l0aCBzdHJva2UgKi8KLSAgICAg ICAgICAgIHJldHVybigweDAwRDApOyAgICAgICAgICAgICAvKiBMb29rcyBqdXN0IGxpa2UgRXRo ICovCi0gICAgICAgICAgY2FzZSAweDAxOGE6ICAgICAgICAgICAgICAgICAgLyogRCB3aXRoIGhv b2sgKi8KLSAgICAgICAgICAgIHJldHVybigweDAwNDQpOwotICAgICAgICAgIGNhc2UgMHgwMThl OiBjYXNlIDB4MDE5MDogICAgIC8qIEUtbGlrZSBsZXR0ZXJzICovCi0gICAgICAgICAgICByZXR1 cm4oMHgwMDQ1KTsKLSAgICAgICAgICBjYXNlIDB4MDE4ZjogICAgICAgICAgICAgICAgICAvKiBl LWxpa2UgbGV0dGVycyAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA2NSk7Ci0gICAgICAgICAg Y2FzZSAweDAxOTE6ICAgICAgICAgICAgICAgICAgLyogRi1saWtlICovCi0gICAgICAgICAgICBy ZXR1cm4oMHgwMDQ2KTsKLSAgICAgICAgICBjYXNlIDB4MDE5MzogICAgICAgICAgICAgICAgICAv KiBHLWxpa2UgKi8KLSAgICAgICAgICAgIHJldHVybigweDAwNDcpOwotICAgICAgICAgIGNhc2Ug MHgwMTk0OiAgICAgICAgICAgICAgICAgIC8qIExhdGluIENhcGl0YWwgR2FtbWEgKi8KLSAgICAg ICAgICAgIHJldHVybigweDAzOTMpOyAgICAgICAgICAgICAvKiBVc2UgR3JlZWsgKi8KLSAgICAg ICAgICBjYXNlIDB4MDE5NTogICAgICAgICAgICAgICAgICAvKiBHb3RoaWMgaHYgKi8KLSAgICAg ICAgICAgIHJldHVybigweDAwNjgpOyAgICAgICAgICAgICAvKiBVc2UgaCAqLwotICAgICAgICAg IGNhc2UgMHgwMTk2OiAgICAgICAgICAgICAgICAgIC8qIExhdGluIENhcGl0YWwgSW90YSAqLwot ICAgICAgICAgICAgcmV0dXJuKDB4MDM5OSk7ICAgICAgICAgICAgIC8qIFVzZSBHcmVlayAqLwot ICAgICAgICAgIGNhc2UgMHgwMTk3OiAgICAgICAgICAgICAgICAgIC8qIEkgd2l0aCBiYXIgKi8K LSAgICAgICAgICAgIHJldHVybigweDAwNjkpOwotICAgICAgICAgIGNhc2UgMHgwMTk4OiAgICAg ICAgICAgICAgICAgIC8qIEsgd2l0aCBob29rICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDRC KTsKLSAgICAgICAgICBjYXNlIDB4MDE5OTogICAgICAgICAgICAgICAgICAvKiBrIHdpdGggaG9v ayAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA2Qik7Ci0gICAgICAgICAgY2FzZSAweDAxOUE6 ICAgICAgICAgICAgICAgICAgLyogbCB3aXRoIGJhciAqLwotICAgICAgICAgICAgcmV0dXJuKDB4 MDA2Qyk7Ci0gICAgICAgICAgY2FzZSAweDAxOUI6ICAgICAgICAgICAgICAgICAgLyogbGFtYmRh IHdpdGggYmFyICovCi0gICAgICAgICAgICByZXR1cm4oMHgwM2JiKTsgICAgICAgICAgICAgLyog VXNlIEdyZWVrICovCi0gICAgICAgICAgY2FzZSAweDAxOUM6ICAgICAgICAgICAgICAgICAgLyog VXBzaWRlIGRvd24gbSAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA2ZCk7Ci0gICAgICAgICAg Y2FzZSAweDAxOUQ6ICAgICAgICAgICAgICAgICAgLyogTiB3aXRoIGxlZnQgaG9vayAqLwotICAg ICAgICAgICAgcmV0dXJuKDB4MDA0ZSk7Ci0gICAgICAgICAgY2FzZSAweDAxOUU6ICAgICAgICAg ICAgICAgICAgLyogbiB3aXRoIGxvbmcgcmlnaHQgbGVnICovCi0gICAgICAgICAgICByZXR1cm4o MHgwMDZlKTsKLSAgICAgICAgICBjYXNlIDB4MDE5RjogY2FzZSAweDAxYTA6IGNhc2UgMHgwMWEy OiAvKiBPLWxpa2UgbGV0dGVycyAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA0Zik7Ci0gICAg ICAgICAgY2FzZSAweDAxYTE6IGNhc2UgMHgwMWEzOiAgICAgLyogby1saWtlICovCi0gICAgICAg ICAgICByZXR1cm4oMHgwMDZmKTsKLSAgICAgICAgICBjYXNlIDB4MDFBNDogICAgICAgICAgICAg ICAgICAvKiBQIHdpdGggaG9vayAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA1MCk7Ci0gICAg ICAgICAgY2FzZSAweDAxQTU6ICAgICAgICAgICAgICAgICAgLyogcCB3aXRoIGhvb2sgKi8KLSAg ICAgICAgICAgIHJldHVybigweDAwNzApOwotICAgICAgICAgIGNhc2UgMHgwMUE2OiAgICAgICAg ICAgICAgICAgIC8qIE9sZCBOb3JzZSBZUiAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA1Mik7 Ci0gICAgICAgICAgY2FzZSAweDAxQTc6ICAgICAgICAgICAgICAgICAgLyogQmFja3dhcmRzIFMg Ki8KLSAgICAgICAgICAgIHJldHVybigweDAwNTMpOwotICAgICAgICAgIGNhc2UgMHgwMUE4OiBj YXNlIDB4MDFBQTogICAgIC8qIHMtbGlrZSBsZXR0ZXJzICovCi0gICAgICAgICAgICByZXR1cm4o MHgwMDczKTsKLSAgICAgICAgICBjYXNlIDB4MDFBOTogICAgICAgICAgICAgICAgICAvKiBFc2gg Ki8KLSAgICAgICAgICAgIHJldHVybigweDAzYTMpOyAgICAgICAgICAgICAvKiBMb29rcyBqdXN0 IGxpa2UgU2lnbWEgKi8KLSAgICAgICAgICBjYXNlIDB4MDFBQjogY2FzZSAweDAxQUQ6ICAgICAv KiB0LWxpa2UgKi8KLSAgICAgICAgICAgIHJldHVybigweDAwNzQpOwotICAgICAgICAgIGNhc2Ug MHgwMUFDOiBjYXNlIDB4MDFBRTogICAgIC8qIFQtbGlrZSAqLwotICAgICAgICAgICAgcmV0dXJu KDB4MDA1NCk7Ci0gICAgICAgICAgY2FzZSAweDAxQUY6IGNhc2UgMHgwMUIxOiAgICAgLyogVS1s aWtlICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDU1KTsKLSAgICAgICAgICBjYXNlIDB4MDFC MDogICAgICAgICAgICAgICAgICAvKiB1LWxpa2UgKi8KLSAgICAgICAgICAgIHJldHVybigweDAw NzUpOwotICAgICAgICAgIGNhc2UgMHgwMUIyOiAgICAgICAgICAgICAgICAgIC8qIFYtbGlrZSAq LwotICAgICAgICAgICAgcmV0dXJuKDB4MDA1Nik7Ci0gICAgICAgICAgY2FzZSAweDAxQjM6ICAg ICAgICAgICAgICAgICAgLyogWS1saWtlICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDU5KTsK LSAgICAgICAgICBjYXNlIDB4MDFCNDogICAgICAgICAgICAgICAgICAvKiB5LWxpa2UgKi8KLSAg ICAgICAgICAgIHJldHVybigweDAwNzkpOwotICAgICAgICAgIGNhc2UgMHgwMUI1OiAgICAgICAg ICAgICAgICAgIC8qIFotbGlrZSAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA1YSk7Ci0gICAg ICAgICAgY2FzZSAweDAxQjY6ICAgICAgICAgICAgICAgICAgLyogei1saWtlICovCi0gICAgICAg ICAgICByZXR1cm4oMHgwMDdhKTsKLSAgICAgICAgICBjYXNlIDB4MDFCNzogICAgICAgICAgICAg ICAgICAvKiBZb2doICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDMzKTsgICAgICAgICAgICAg LyogVXNlICIzIiAqLwotICAgICAgICAgIGNhc2UgMHgwMUJGOiAgICAgICAgICAgICAgICAgIC8q IFd5bm4gKi8KLSAgICAgICAgICAgIHJldHVybigweDAwNzcpOyAgICAgICAgICAgICAvKiBVc2Ug InciICovCi0gICAgICAgICAgY2FzZSAweDAxQ0Q6ICAgICAgICAgICAgICAgICAgLyogQSBjYXJv biAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA0MSk7Ci0gICAgICAgICAgY2FzZSAweDAxQ0U6 ICAgICAgICAgICAgICAgICAgLyogYSBjYXJvbiAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA2 MSk7Ci0gICAgICAgICAgY2FzZSAweDAxQ0Y6ICAgICAgICAgICAgICAgICAgLyogSSBjYXJvbiAq LwotICAgICAgICAgICAgcmV0dXJuKDB4MDA0OSk7Ci0gICAgICAgICAgY2FzZSAweDAxRDA6ICAg ICAgICAgICAgICAgICAgLyogaSBjYXJvbiAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA2OSk7 Ci0gICAgICAgICAgY2FzZSAweDAxRDE6ICAgICAgICAgICAgICAgICAgLyogTyBjYXJvbiAqLwot ICAgICAgICAgICAgcmV0dXJuKDB4MDA0Zik7Ci0gICAgICAgICAgY2FzZSAweDAxRDI6ICAgICAg ICAgICAgICAgICAgLyogbyBjYXJvbiAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA2Zik7Ci0g ICAgICAgICAgY2FzZSAweDAxRDM6ICAgICAgICAgICAgICAgICAgLyogVSBjYXJvbiAqLwotICAg ICAgICAgICAgcmV0dXJuKDB4MDA1NSk7Ci0gICAgICAgICAgY2FzZSAweDAxRDQ6ICAgICAgICAg ICAgICAgICAgLyogdSBjYXJvbiAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA3NSk7Ci0gICAg ICAgICAgLyogVSBkaWFlcmVzaXMgKyBvdGhlciB0aGluZ3MgKi8KLSAgICAgICAgY2FzZSAweDAx RDU6IGNhc2UgMHgwMUQ3OiBjYXNlIDB4MDFEOTogY2FzZSAweDAxREI6Ci0gICAgICAgICAgICBy ZXR1cm4oMHgwMGRjKTsKLSAgICAgICAgICAvKiB1IGRpYWVyZXNpcyArIG90aGVyIHRoaW5ncyAq LwotICAgICAgICBjYXNlIDB4MDFENjogY2FzZSAweDAxRGE6IGNhc2UgMHgwMURjOgotICAgICAg ICAgICAgcmV0dXJuKDB4MDBmYyk7Ci0KLSAgICAgICAgICAvKiBGaWxsIGluIG1vcmUgaGVyZSBp ZiBhbnlib2R5IGFza3MgKi8KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu KDB4ZmZmZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGMgPj0gMHgxZTAwICYmIGMgPD0g MHgxZWZmKSB7ICAgLyogTGF0aW4gRXh0ZW5kZWQgQWRkaXRpb25hbCAqLwotICAgICAgICBpZiAo YyA+PSAweDFlODAgJiYgYyA8PSAweDFlODUpCi0gICAgICAgICAgcmV0dXJuKGMpOwotICAgICAg ICBlbHNlCi0gICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0gICAgfQotICAgIGlmIChjID49IDB4 MDQwMCAmJiBjIDw9IDB4MDRmZikgeyAgIC8qIEN5cmlsbGljICovCi0gICAgICAgIGlmIChjID49 IDB4MDQwMCAmJiBjIDw9IDB4MDQ1ZiB8fCBjID09IDB4MDQ5MCAgfHwgYyA9PSAweDA0OTEpCi0g ICAgICAgICAgcmV0dXJuKGMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuKDB4ZmZm ZCk7Ci0gICAgfQotICAgIGlmIChjID49IDB4MDM3MCAmJiBjIDw9IDB4MDNmZikgeyAgIC8qIEdy ZWVrICovCi0gICAgICAgIGlmIChjID09IDB4MDM3ZSB8fCBjID49IDB4MDM4NCAmJiBjIDw9IDB4 MDNjZSkKLSAgICAgICAgICByZXR1cm4oYyk7Ci0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAg ICBjYXNlIDB4MDM3NDogY2FzZSAweDAzNzU6Ci0gICAgICAgICAgICByZXR1cm4oMHgwMDI3KTsK LSAgICAgICAgY2FzZSAweDAzN2E6Ci0gICAgICAgICAgICByZXR1cm4oMHgwMDJjKTsKLSAgICAg ICAgICAvKiBGaWxsIGluIG1vcmUgaGVyZSBpZiBuZWVkZWQgKi8KLSAgICAgICAgZGVmYXVsdDoK LSAgICAgICAgICAgIHJldHVybigweGZmZmQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChj ID49IDB4MWYwMCAmJiBjIDw9IDB4MWZmZikgeyAgIC8qIEdyZWVrIEV4dGVuZGVkICovCi0gICAg ICAgIC8qIEZpbGwgaW4gaWYgYXNrZWQgKi8KLSAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0gICAg fQotICAgIGlmIChjID49IDB4MjBhMCAmJiBjIDw9IDB4MjBjZikgeyAgIC8qIEN1cnJlbmN5IHN5 bWJvbHMgKi8KLSAgICAgICAgaWYgKGMgPT0gMHgyMGEzIHx8IGMgPT0gMHgyMGE0IHx8IGMgPT0g MHgyMGE3IHx8IGMgPT0gMHgyMGFjKQotICAgICAgICAgIHJldHVybihjKTsKLSAgICAgICAgZWxz ZQotICAgICAgICAgIHJldHVybigweGZmZmQpOwotICAgIH0KLSAgICBpZiAoYyA+PSAweDIxMDAg JiYgYyA8PSAweDIxNGYpIHsgICAvKiBMZXR0ZXJsaWtlIHN5bWJvbHMgKi8KLSAgICAgICAgaWYg KGMgPT0gMHgyMTE2IHx8IGMgPT0gMHgyMTIyIHx8IGMgPT0gMHgyMTI2KQotICAgICAgICAgIHJl dHVybihjKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybigweGZmZmQpOwotICAgIH0K LSAgICBpZiAoYyA+PSAweDIxNTAgJiYgYyA8PSAweDIxOGYpIHsgICAvKiBOdW1iZXIgZm9ybXMg Ki8KLSAgICAgICAgaWYgKGMgPj0gMHgyMTViICYmIGMgPD0gMHgyMTVlKSAvKiBSb21hbiBudW1l cmFscyBldGMgKi8KLSAgICAgICAgICByZXR1cm4oYyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg ICByZXR1cm4oMHhmZmZkKTsKLSAgICB9Ci0gICAgaWYgKGMgPj0gMHgwMmIwICYmIGMgPD0gMHgw MmZmKSB7ICAgLyogU3BhY2luZyBtb2RpZmllciBsZXR0ZXJzICovCi0gICAgICAgIGlmIChjID09 IDB4MDJjNiB8fCBjID09IDB4MDJjNyB8fCBjID09IDB4MDJjOSB8fAotICAgICAgICAgICAgYyA+ PSAweDAyZDggJiYgYyA8PSAweDAyZGQpCi0gICAgICAgICAgcmV0dXJuKGMpOwotICAgICAgICBz d2l0Y2ggKGMpIHsKLSAgICAgICAgY2FzZSAweDAyYjA6IGNhc2UgMHgwMmIxOgotICAgICAgICAg ICAgcmV0dXJuKDB4MDA2OCk7Ci0gICAgICAgIGNhc2UgMHgwMmIyOgotICAgICAgICAgICAgICBy ZXR1cm4oMHgwMDZhKTsKLSAgICAgICAgY2FzZSAweDAyYjM6IGNhc2UgMHgwMmI0OiBjYXNlIDB4 MDJiNToKLSAgICAgICAgICAgIHJldHVybigweDAwNzIpOwotICAgICAgICBjYXNlIDB4MDJiNzoK LSAgICAgICAgICAgIHJldHVybigweDAwNzcpOwotICAgICAgICBjYXNlIDB4MDJiODoKLSAgICAg ICAgICAgIHJldHVybigweDAwNzkpOwotICAgICAgICBjYXNlIDB4MDJiOToKLSAgICAgICAgICAg IHJldHVybigweDAwYjQpOwotICAgICAgICBjYXNlIDB4MDJiYToKLSAgICAgICAgICAgIHJldHVy bigweDAwMjIpOwotICAgICAgICBjYXNlIDB4MDJiYjogY2FzZSAweDAyYmM6IGNhc2UgMHgwMmJk OiBjYXNlIDB4MDJiZTogY2FzZSAweDAyYmY6Ci0gICAgICAgICAgICByZXR1cm4oMHgwMDI3KTsK LSAgICAgICAgICBjYXNlIDB4MDJjMjogICAgICByZXR1cm4oMHgwMDNjKTsKLSAgICAgICAgICBj YXNlIDB4MDJjMzogICAgICByZXR1cm4oMHgwMDNlKTsKLSAgICAgICAgICBjYXNlIDB4MDJkYTog ICAgICByZXR1cm4oMHgwMGIwKTsKLSAgICAgICAgICBjYXNlIDB4MDJkYzogICAgICByZXR1cm4o MHgwMDdlKTsKLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKLSAg ICAgICAgfQotICAgIH0KLSAgICBpZiAoYyA+PSAweDIwMDAgJiYgYyA8PSAweDIwNmYpIHsgICAv KiBHZW5lcmFsIFB1bmN0dWF0aW9uICovCi0gICAgICAgIGlmIChjID49IDB4MjAxMyAmJiBjIDw9 IDB4MjAxNSB8fAotICAgICAgICAgICAgYyA+PSAweDIwMTcgJiYgYyA8PSAweDIwMWEgfHwKLSAg ICAgICAgICAgIGMgPj0gMHgyMDFjICYmIGMgPD0gMHgyMDFlIHx8Ci0gICAgICAgICAgICBjID49 IDB4MjAyMCAmJiBjIDw9IDB4MjAyMiB8fCBjID09IDB4MjAyNiB8fCBjID09IDB4MjAzMCB8fAot ICAgICAgICAgICAgYyA+PSAweDIwMzkgJiYgYyA8PSAweDIwM2EgfHwgYyA9PSAweDIwM2MgfHwg YyA9PSAweDIwM2UgfHwKLSAgICAgICAgICAgIGMgPT0gMHgyMDQ0KQotICAgICAgICAgIHJldHVy bihjKTsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIwMTYpCi0gICAgICAgICAgcmV0dXJuKDB4 MjU1MSk7Ci0gICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMDE3KQotICAgICAgICAgIHJldHVybigw eDI1NTApOwotICAgICAgICBlbHNlIGlmIChjID09IDB4MjA0NCkKLSAgICAgICAgICByZXR1cm4o MHgwMDJmKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybigweGZmZmQpOwotICAgIH0K LSAgICBpZiAoYyA9PSAweGZiMDEgfHwgYyA9PSAweGZiMDIpICAgICAvKiBBbHBoYWJldGljIFBy ZXNlbnRhdGlvbiBGb3JtcyAqLwotICAgICAgcmV0dXJuKGMpOwotICAgIHJldHVybigweGZmZmQp OyAgICAgICAgICAgICAgICAgICAgIC8qIENhdGNoLWFsbCAqLwotfQotI2VuZGlmIC8qIE9TMiAq LwotCi0KLS8qCi0gIFRhYmxlIG9mIEJsYWgtdG8tVW5pY29kZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1 cmVzLgotICBLRUVQIFRISVMgSU4gU1lOQyBXSVRIIFRIRSBUWF9ibGFoIERFRklOSVRJT05TIGlu IGNrY3VuaS5oLgotKi8KLXN0cnVjdCB4X3RvX3VuaWNvZGUgKgotdHhyaW5mb1tNQVhUWFNFVFMr MV0gPSB7Ci0gICAgJnVfYXNjaWksICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDAgVVMg SVNPIDY0NiAoQVNDSUkpICovCi0gICAgJnVfYnJpdGlzaCwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogIDEgVUsgSVNPIDY0NiAqLwotICAgICZ1X2ZyX2NhbmFkaWFuLCAgICAgICAgICAgICAg ICAgICAgIC8qICAyIENhbmFkaWFuIEZyZW5jaCBOUkMgKi8KLSAgICBOVUxMLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAgMyBDdWJhICovCi0gICAgTlVMTCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogIDQgQ3plY2hvICovCi0gICAgJnVfZGFuaXNoLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogIDUgRGFuaXNoL05vcndlZ2lhbiBJU08gNjQ2ICovCi0gICAg JnVfZHV0Y2gsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDYgRHV0Y2ggTlJDICovCi0g ICAgJnVfZmlubmlzaCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDcgRmlubmlzaCBOUkMg ICovCi0gICAgJnVfZnJlbmNoLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDggRnJlbmNo IElTTyA2NDYgKi8KLSAgICAmdV9nZXJtYW4sICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAg OSBHZXJtYW4gSVNPIDY0NiAqLwotICAgICZ1X2hlYnJldzcsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDEwIEhlYnJldy03IChERUMpICovCi0gICAgJnVfaHVuZ2FyaWFuLCAgICAgICAgICAg ICAgICAgICAgICAgLyogMTEgSHVuZ2FyaWFuIElTTyA2NDYgKi8KLSAgICAmdV9pY2VsYW5kaWMs ICAgICAgICAgICAgICAgICAgICAgICAvKiAxMiBJY2VsYW5kaWMgTlJDICovCi0gICAgJnVfaXRh bGlhbiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTMgSXRhbGlhbiBJU08gNjQ2ICovCi0g ICAgJnVfamlzMDIwMXIsICAgICAgICAgICAgICAgICAgICAgICAgLyogMTQgSmFwYW5lc2UgUm9t YW4gSVNPIDY0NiAqLwotICAgICZ1X2ppczAyMDFrLCAgICAgICAgICAgICAgICAgICAgICAgIC8q IDE1IEphcGFuZXNlIEthdGFrYW5hICovCi0gICAgJnVfa29pNywgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogMTYgU2hvcnQgS09JICovCi0gICAgJnVfZGFuaXNoLCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMTcgTm9yd2VnaWFuL0RhbmlzaCBJU08gNjQ2ICovCi0gICAgJnVfcG9y dHVndWVzZSwgICAgICAgICAgICAgICAgICAgICAgLyogMTggUG9ydHVndWVzZSBJU08gNjQ2ICov Ci0gICAgJnVfc3BhbmlzaCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTkgc3BhbmlzaCBJ U08gNjQ2ICovCi0gICAgJnVfc3dlZGlzaCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjAg U3dlZGlzaCBJU08gNjQ2ICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogMjEgU3dlZGlzaCBJU08gNjQ2IGZvciBuYW1lcyAqLwotICAgICZ1X3N3aXNzLCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDIyIFN3aXNzIE5SQyAgICovCi0gICAgJnVfODg1OV8x LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjMgSVNPIDg4NTktMSAgKi8KLSAgICAmdV84 ODU5XzIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyNCBJU08gODg1OS0yICAqLwotICAg ICZ1Xzg4NTlfMywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI1IElTTyA4ODU5LTMgICov Ci0gICAgJnVfODg1OV80LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjYgSVNPIDg4NTkt NCAgKi8KLSAgICAmdV84ODU5XzUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyNyBJU08g ODg1OS01ICAqLyAvKiBDeXJpbGxpYyAqLwotICAgICZ1Xzg4NTlfNiwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDI4IElTTyA4ODU5LTYgICovIC8qIEFyYWJpYyAqLwotICAgICZ1Xzg4NTlf NywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI5IElTTyA4ODU5LTcgICovIC8qIEdyZWVr ICovCi0gICAgJnVfODg1OV84LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzAgSVNPIDg4 NTktOCAgKi8gLyogSGVicmV3ICovCi0gICAgJnVfODg1OV85LCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogMzEgSVNPIDg4NTktOSAgKi8KLSAgICAmdV84ODU5XzEwLCAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAzMiBJU08gODg1OS0xMCAqLwotICAgICZ1X2tvaTgsICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDMzIEtPSS04ICAgICAgICovCi0gICAgTlVMTCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogMzQgSklTLTcgICAgICAgKi8KLSAgICBOVUxMLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzNSBTaGlmdCBKSVMgICAqLwotICAgIE5VTEws ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM2IEphcGFuZXNlIEVVQyAoSkFFKSAq LwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM3IEphcGFuZXNl IERFQyBLYW5qaSAqLwotICAgICZ1X2RlY21jcywgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDM4IERFQyBNQ1MgKi8KLSAgICAmdV9uZXh0c3RlcCwgICAgICAgICAgICAgICAgICAgICAgICAv KiAzOSBOZVhUICAgICovCi0gICAgJnVfZGdpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogNDAgREdJICAgICAqLwotICAgICZ1X21hY2xhdGluLCAgICAgICAgICAgICAgICAgICAgICAg IC8qIDQxIE1hY2ludG9zaCBMYXRpbiAgKi8KLSAgICAmdV9ocHJvbWFuOCwgICAgICAgICAgICAg ICAgICAgICAgICAvKiA0MiBIUCBSb21hbiA4ICAgICAgICovCi0gICAgJnVfY3A0MzcsICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogNDMgQ1A0MzcgLSBPcmlnaW5hbCAqLwotICAgICZ1X2Nw ODUwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ0IENQODUwIC0gVyBFdXJvcGUgKi8K LSAgICAmdV9jcDg1MiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0NSBDUDg1MiAtIEUg RXVyb3BlICovCi0gICAgJnVfY3A4NTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDYg Q1A4NTcgLSBUdXJraXNoICAqLwotICAgICZ1X2NwODYyLCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDQ3IENQODYyIC0gSGVicmV3ICAgKi8KLSAgICAmdV9jcDg2NCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiA0OCBDUDg2NCAtIEFyYWJpYyAgICovCi0gICAgJnVfY3A4NjYsICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogNDkgQ1A4NjYgLSBDeXJpbGxpYyAqLwotICAgICZ1 X2NwODY5LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUwIENQODY5IC0gR3JlZWsgICAg Ki8KLSAgICAmdV9kZWNzcGVjLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1MSBERUMgU3Bl Y2lhbCBHcmFwaGljcyAqLwotICAgICZ1X2RlY3RlY2gsICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDUyIERFQyBUZWNobmljYWwgKi8KLSAgICAmdV9jMHBpY3MsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiA1MyBDMCBQaWN0dXJlcyAqLwotICAgICZ1X2MxcGljcywgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDU0IEMxIFBpY3R1cmVzICovCi0gICAgJnVfc21pbGV5LCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogNTUgSUJNIEMwIEdyYXBoaWNzICovCi0gICAgJnVfaGVhdGgx OWcsICAgICAgICAgICAgICAgICAgICAgICAgLyogNTYgSGVhdGggMTkgR3JhcGhpY3MgKi8KLSAg ICAmdV90dmlnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1NyBUVkkgR3JhcGhpY3Mg Ki8KLSAgICAmdV93eXNlX2duLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1OCBXeXNlIDYw IEdyYXBoaWNzIE5vcm1hbCAqLwotICAgICZ1X3d5c2VfZzEsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDU5IFd5c2UgNjAgR3JhcGhpY3MgMSAqLwotICAgICZ1X3d5c2VfZzIsICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDYwIFd5c2UgNjAgR3JhcGhpY3MgMiAqLwotICAgICZ1X3d5c2Vf ZzMsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDYxIFd5c2UgNjAgR3JhcGhpY3MgMyAqLwot ICAgICZ1X2Vsb3Q5MjcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDYyIEdyZWVrIEVMT1Qg OTI3ICovCi0gICAgJnVfZGdzcGVjLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjMgREcg U3BlY2lhbCBncmFwaGljcyAqLwotICAgICZ1X2RnbGluZSwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDY0IERHIExpbmUgZHJhd2luZyAqLwotICAgICZ1X2Rnd29yZCwgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDY1IERHIFdvcmQgcHJvY2Vzc2luZyAqLwotICAgICZ1X2hwbGluZSwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDY2IEhQIExpbmUgZHJhd2luZyAqLwotICAgICZ1 X2hwbWF0aCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDY3IEhQIE1hdGgvVGVjaG5pY2Fs ICovCi0gICAgJnVfcW54Z3JwaCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjggUU5YIEdy YXBoaWNzICovCi0gICAgJnVfc25pYnJhY2ssICAgICAgICAgICAgICAgICAgICAgICAgLyogNjkg U05JIEJyYWNrZXRzICovCi0gICAgJnVfc25pZXVybywgICAgICAgICAgICAgICAgICAgICAgICAg LyogNzAgU05JIEV1cm8gKi8KLSAgICAmdV9zbmlmYWNldCwgICAgICAgICAgICAgICAgICAgICAg ICAvKiA3MSBTTkkgRmFjZXQgKi8KLSAgICAmdV9zbmlpYm0sICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiA3MiBTTkkgSUJNICovCi0gICAgJnVfc25pYmxhbmtzLCAgICAgICAgICAgICAgICAg ICAgICAgLyogNzMgU05JIEJsYW5rcyAqLwotICAgICZ1X2NwMTI1MiwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDc0IFdpbmRvd3MgTGF0aW4tMSAqLwotICAgICZ1X2NwMTI1MCwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDc1IFdpbmRvd3MgTGF0aW4tMiAqLwotICAgICZ1X2NwMTI1 MSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDc2IFdpbmRvd3MgQ3lyaWxsaWMgKi8KLSAg ICAmdV9jcDEyNTMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3NyBXaW5kb3dzIEdyZWVr ICovCi0gICAgJnVfY3AxMjU0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzggV2luZG93 cyBUdXJraXNoICovCi0gICAgJnVfY3AxMjU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog NzkgV2luZG93cyBMYXRpbi00ICovCi0gICAgJnVfY3A4NTYsICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogODAgQ3lyaWxsaWMgUEMgQ29kZSBQYWdlIDg1NiAqLwotICAgICZ1X2NwODU1LCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDgxIEN5cmlsbGljIFBDIENvZGUgUGFnZSA4NTUg Ki8KLSAgICAmdV84ODU5XzEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4MiBDUDgxOSAt IFNhbWUgYXMgODg1OS0xICovCi0gICAgJnVfODg1OV8yLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogODMgQ1A5MTIgLSBTYW1lIGFzIDg4NTktMiAqLwotICAgICZ1Xzg4NTlfMywgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDg0IENQOTEzIC0gU2FtZSBhcyA4ODU5LTMgKi8KLSAgICAm dV84ODU5XzQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4NSBDUDkxNCAtIFNhbWUgYXMg ODg1OS00ICovCi0gICAgJnVfODg1OV81LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODYg Q1A5MTUgLSBTYW1lIGFzIDg4NTktNSAqLwotICAgICZ1Xzg4NTlfNiwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDg3IENQMTA4OSAtIFNhbWUgYXMgODg1OS02ICovCi0gICAgJnVfODg1OV83 LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODggQ1A4MTMgLSBTYW1lIGFzIDg4NTktNyAq LwotICAgICZ1Xzg4NTlfOCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDg5IENQOTE2IC0g U2FtZSBhcyA4ODU5LTggKi8KLSAgICAmdV84ODU5XzksICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiA5MCBDUDkyMCAtIFNhbWUgYXMgODg1OS05ICovCi0gICAgJnVfaHByb21hbjgsICAgICAg ICAgICAgICAgICAgICAgICAgLyogOTEgQ1AxMDUxIC0gU2FtZSBhcyBIUCBSb21hbiA4ICovCi0g ICAgJnVfY3A4NTgsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOTIgQ1A4NTggLSBXIEV1 cm9wZSB3L0V1cm8gKi8KLSAgICAmdV84ODU5XzE1LCAgICAgICAgICAgICAgICAgICAgICAgICAv KiA5MyBJU08gODg1OS0xNSBMYXRpbi0xNSAqLwotICAgICZ1Xzg4NTlfMTUsICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDk0IENQOTIzIC0gU2FtZSBhcyA4ODU5LTE1ICAqLwotICAgICZ1Xzg4 NTlfNywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDk1IEVMT1Q5MjggLSBTYW1lIGFzIDg4 NTktNyAqLwotICAgICZ1X3F1aWNrZHJhdywgICAgICAgICAgICAgICAgICAgICAgIC8qIDk2IENQ MTAwMDAgLSBBcHBsZSBRdWlja2RyYXcgKi8KLSAgICAmdV9jcDM3LCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA5NyBDUDM3IC0gVS5TLiBFQkNESUMgKi8KLSAgICAmdV9jcDEyNTUsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA5OCBDUDEyNTUgLSBXaW5kb3dzIEhlYnJldyAqLwot ICAgICZ1X2NwMTI1NiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDk5IENQMTI1NiAtIFdp bmRvd3MgQXJhYmljICovCi0gICAgJnVfY3AxMjU4LCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogMTAwIENQMTI1OCAtIFdpbmRvd3MgVmlldCBOYW0gKi8KLSAgICAmdV9tYXpvdmlhLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAxMDEgTWF6b3ZpYSBQb2xpc2ggY29kZSBwYWdlICovCi0g ICAgJnVfdHJhbnNwYXJlbnQsICAgICAgICAgICAgICAgICAgICAgLyogMTAyIFRyYW5zcGFyZW50 ICovCi0gICAgJnVfaHoxNTAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAzIEhhemVs dGluZSAxNTAwLzE1MjAgZ3JhcGhpY3MgKi8KLSAgICAmdV9rb2k4ciwgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAxMDQgS09JOC1SICovCi0gICAgJnVfa29pOHUsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMTA1IEtPSTgtVSAqLwotICAgICZ1X2FwbDEsICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDEwNiBBUEwgMSAoSVNPKSAqLwotICAgICZ1X2FwbDIsICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDEwNyBBUEwgMiAoRHlhZGljKSAqLwotICAgICZ1X2FwbDMs ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwOCBBUEwgMyAoUGx1cykgKi8KLSAgICAm dV9hcGw0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDggQVBMIDQgKElCTSkgKi8K LSAgICAmdV9hcGw1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMTAgQVBMIDUgKDI3 NDEpICovCi19OwotCi0vKgotICBUYWJsZSBvZiBCbGFoLXRvLVVuaWNvZGUgdHJhbnNsYXRpb24g ZnVuY3Rpb25zLgotICBLRUVQIFRISVMgSU4gU1lOQyBXSVRIIFRIRSBUWF9ibGFoIERFRklOSVRJ VElPTlMgaW4gY2tjdW5pLmguCi0qLwotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLSgqeGxfdVtN QVhUWFNFVFMrMV0pKENIQVIpCi0jZWxzZQotKCp4bF91W01BWFRYU0VUUysxXSkoKQotI2VuZGlm IC8qIENLX0FOU0lDICovCi09IHsKLSAgICBhc2NpaV91LCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAgMCBVUyBJU08gNjQ2IChBU0NJSSkgKi8KLSAgICBicml0aXNoX3UsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAgMSBVSyBJU08gNjQ2ICovCi0gICAgZnJfY2FuYWRpYW5fdSwg ICAgICAgICAgICAgICAgICAgICAgLyogIDIgQ2FuYWRpYW4gRnJlbmNoIE5SQyAqLwotICAgIE5V TEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAzIEN1YmEgKi8KLSAgICBOVUxM LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNCBDemVjaG8gKi8KLSAgICBkYW5p c2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNSBEYW5pc2gvTm9yd2VnaWFuIElT TyA2NDYgKi8KLSAgICBkdXRjaF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNiBE dXRjaCBOUkMgKi8KLSAgICBmaW5uaXNoX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAg NyBGaW5uaXNoIE5SQyAgKi8KLSAgICBmcmVuY2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAgOCBGcmVuY2ggSVNPIDY0NiAqLwotICAgIGdlcm1hbl91LCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qICA5IEdlcm1hbiBJU08gNjQ2ICovCi0gICAgaGVicmV3N191LCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMTAgSGVicmV3LTcgKERFQykgKi8KLSAgICBodW5nYXJpYW5f dSwgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMSBIdW5nYXJpYW4gSVNPIDY0NiAqLwotICAg IGljZWxhbmRpY191LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEyIEljZWxhbmRpYyAqLwot ICAgIGl0YWxpYW5fdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEzIEl0YWxpYW4gSVNP IDY0NiAqLwotICAgIGppczAyMDFyX3UsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE0IEph cGFuZXNlIFJvbWFuIElTTyA2NDYgKi8KLSAgICBqaXMwMjAxa191LCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAxNSBKYXBhbmVzZSBLYXRha2FuYSAqLwotICAgIGtvaTdfdSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDE2IFNob3J0IEtPSSAqLwotICAgIGRhbmlzaF91LCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDE3IE5vcndlZ2lhbi9EYW5pc2ggSVNPIDY0NiAqLwot ICAgIHBvcnR1Z3Vlc2VfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDE4IFBvcnR1Z3Vlc2Ug SVNPIDY0NiAqLwotICAgIHNwYW5pc2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE5 IHNwYW5pc2ggSVNPIDY0NiAqLwotICAgIHN3ZWRpc2hfdSwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDIwIFN3ZWRpc2ggSVNPIDY0NiAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDIxIFN3ZWRpc2ggSVNPIDY0NiBmb3IgbmFtZXMgKi8KLSAgICBzd2lz c191LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMiBTd2lzcyBOUkMgICAqLwotICAg IGlzb184ODU5XzFfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDIzIElTTyA4ODU5LTEgICov Ci0gICAgaXNvXzg4NTlfMl91LCAgICAgICAgICAgICAgICAgICAgICAgLyogMjQgSVNPIDg4NTkt MiAgKi8KLSAgICBpc29fODg1OV8zX3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAyNSBJU08g ODg1OS0zICAqLwotICAgIGlzb184ODU5XzRfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDI2 IElTTyA4ODU5LTQgICovCi0gICAgaXNvXzg4NTlfNV91LCAgICAgICAgICAgICAgICAgICAgICAg LyogMjcgSVNPIDg4NTktNSAgKi8gLyogQ3lyaWxsaWMgKi8KLSAgICBpc29fODg1OV82X3UsICAg ICAgICAgICAgICAgICAgICAgICAvKiAyOCBJU08gODg1OS02ICAqLyAvKiBBcmFiaWMgKi8KLSAg ICBpc29fODg1OV83X3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAyOSBJU08gODg1OS03ICAq LyAvKiBHcmVlayAqLwotICAgIGlzb184ODU5XzhfdSwgICAgICAgICAgICAgICAgICAgICAgIC8q IDMwIElTTyA4ODU5LTggICovIC8qIEhlYnJldyAqLwotICAgIGlzb184ODU5XzlfdSwgICAgICAg ICAgICAgICAgICAgICAgIC8qIDMxIElTTyA4ODU5LTkgICovIC8qIExhdGluLTUgKi8KLSAgICBp c29fODg1OV8xMF91LCAgICAgICAgICAgICAgICAgICAgICAvKiAzMiBJU08gODg1OS0xMCAqLwot ICAgIGtvaThfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMzIEtPSS04ICAgICAg ICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzQgSklTLTcg ICAgICAgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzNSBT aGlmdCBKSVMgICAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDM2IEphcGFuZXNlIEVVQyAoSkFFKSAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDM3IEphcGFuZXNlIERFQyBLYW5qaSAqLwotICAgIGRlY21jc191LCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDM4IERFQyBNQ1MgKi8KLSAgICBuZXh0c3RlcF91LCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAzOSBOZVhUICAgICovCi0gICAgZGdpX3UsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogNDAgREdJICAgICAqLwotICAgIG1hY2xhdGluX3Us ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQxIE1hY2ludG9zaCBMYXRpbiAgKi8KLSAgICBo cHJvbWFuOF91LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0MiBIUCBSb21hbiA4ICAgICAg ICovCi0gICAgY3A0MzdfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDMgQ1A0Mzcg LSBPcmlnaW5hbCAqLwotICAgIGNwODUwX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDQ0IENQODUwIC0gVyBFdXJvcGUgKi8KLSAgICBjcDg1Ml91LCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiA0NSBDUDg1MiAtIEUgRXVyb3BlICovCi0gICAgY3A4NTdfdSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogNDYgQ1A4NTcgLSBUdXJraXNoICAqLwotICAgIGNwODYyX3Us ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ3IENQODYyIC0gSGVicmV3ICAgKi8KLSAg ICBjcDg2NF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0OCBDUDg2NCAtIEFyYWJp YyAgICovCi0gICAgY3A4NjZfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDkgQ1A4 NjYgLSBDeXJpbGxpYyAqLwotICAgIGNwODY5X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDUwIENQODY5IC0gR3JlZWsgICAgKi8KLSAgICBkZWNzcGVjX3UsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA1MSBERUMgU3BlY2lhbCBHcmFwaGljcyAqLwotICAgIGRlY3RlY2hfdSwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUyIERFQyBUZWNobmljYWwgKi8KLSAgICBjMHBp Y3NfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1MyBDMCBQaWN0dXJlcyAqLwotICAg IGMxcGljc191LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDU0IEMxIFBpY3R1cmVzICov Ci0gICAgc21pbGV5X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTUgSUJNIEMwIEdy YXBoaWNzICovCi0gICAgaGVhdGgxOWdfdSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTYg SGVhdGggMTkgZ3JhcGhpY3MgKi8KLSAgICB0dmlnX3UsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiA1NyBUVkkgZ3JhcGhpY3MgKi8KLSAgICB3eXNlX2duX3UsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA1OCBXeXNlIDYwIG5vcm1hbC1tb2RlIGdyYXBoaWNzICovCi0gICAgd3lz ZV9nMV91LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTkgV3lzZSA2MCBncmFwaGljcyAx ICovCi0gICAgd3lzZV9nMl91LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjAgV3lzZSA2 MCBncmFwaGljcyAyICovCi0gICAgd3lzZV9nM191LCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogNjEgV3lzZSA2MCBncmFwaGljcyAzICovCi0gICAgZWxvdDkyN191LCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogNjIgR3JlZWsgRUxPVCA5MjcgKi8KLSAgICBkZ3NwZWNfdSwgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiA2MyBERyBTcGVjaWFsIGdyYXBoaWNzICovCi0gICAgZGds aW5lX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjQgREcgTGluZSBkcmF3aW5nICov Ci0gICAgZGd3b3JkX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjUgREcgV29yZCBw cm9jZXNzaW5nICovCi0gICAgaHBsaW5lX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog NjYgSFAgTGluZSBkcmF3aW5nICovCi0gICAgaHBtYXRoX3UsICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogNjcgSFAgTWF0aC9UZWNobmljYWwgKi8KLSAgICBxbnhncnBoX3UsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA2OCBRTlggR3JhcGhpY3MgKi8KLSAgICBzbmlicmFja191LCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA2OSBTTkkgQnJhY2tldHMgKi8KLSAgICBzbmlldXJv X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3MCBTTkkgRXVybyAqLwotICAgIHNuaWZh Y2V0X3UsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcxIFNOSSBGYWNldCAqLwotICAgIHNu aWlibV91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcyIFNOSSBJQk0gKi8KLSAgICBz bmlibGFua3NfdSwgICAgICAgICAgICAgICAgICAgICAgICAvKiA3MyBTTkkgQmxhbmtzICovCi0g ICAgY3AxMjUyX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzQgV2luZG93cyBMYXRp bi0xICovCi0gICAgY3AxMjUwX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzUgV2lu ZG93cyBMYXRpbi0yICovCi0gICAgY3AxMjUxX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogNzYgV2luZG93cyBDeXJpbGxpYyAqLwotICAgIGNwMTI1M191LCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDc3IFdpbmRvd3MgR3JlZWsgKi8KLSAgICBjcDEyNTRfdSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA3OCBXaW5kb3dzIFR1cmtpc2ggKi8KLSAgICBjcDEyNTdfdSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3OSBXaW5kb3dzIExhdGluLTQgKi8KLSAgICBj cDg1Nl91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4MCBDeXJpbGxpYyBQQyBDb2Rl IFBhZ2UgODU2ICovCi0gICAgY3A4NTVfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog ODEgQ3lyaWxsaWMgUEMgQ29kZSBQYWdlIDg1NiAqLwotICAgIGlzb184ODU5XzFfdSwgICAgICAg ICAgICAgICAgICAgICAgIC8qIDgyIENQODE5IC0gU2FtZSBhcyA4ODU5LTEgKi8KLSAgICBpc29f ODg1OV8yX3UsICAgICAgICAgICAgICAgICAgICAgICAvKiA4MyBDUDkxMiAtIFNhbWUgYXMgODg1 OS0yICovCi0gICAgaXNvXzg4NTlfM191LCAgICAgICAgICAgICAgICAgICAgICAgLyogODQgQ1A5 MTMgLSBTYW1lIGFzIDg4NTktMyAqLwotICAgIGlzb184ODU5XzRfdSwgICAgICAgICAgICAgICAg ICAgICAgIC8qIDg1IENQOTE0IC0gU2FtZSBhcyA4ODU5LTQgKi8KLSAgICBpc29fODg1OV81X3Us ICAgICAgICAgICAgICAgICAgICAgICAvKiA4NiBDUDkxNSAtIFNhbWUgYXMgODg1OS01ICovCi0g ICAgaXNvXzg4NTlfNl91LCAgICAgICAgICAgICAgICAgICAgICAgLyogODcgQ1AxMDg5IC0gU2Ft ZSBhcyA4ODU5LTYgKi8KLSAgICBpc29fODg1OV83X3UsICAgICAgICAgICAgICAgICAgICAgICAv KiA4OCBDUDgxMyAtIFNhbWUgYXMgODg1OS03ICovCi0gICAgaXNvXzg4NTlfOF91LCAgICAgICAg ICAgICAgICAgICAgICAgLyogODkgQ1A5MTYgLSBTYW1lIGFzIDg4NTktOCAqLwotICAgIGlzb184 ODU5XzlfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDkwIENQOTIwIC0gU2FtZSBhcyA4ODU5 LTkgKi8KLSAgICBocHJvbWFuOF91LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA5MSBDUDEw NTEgLVNhbWUgYXMgSFAgUm9tYW4gOCAqLwotICAgIGNwODU4X3UsICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDkyIENQODU4IC0gVyBFdXJvcGUgdy9FdXJvICovCi0gICAgaXNvXzg4NTlf MTVfdSwgICAgICAgICAgICAgICAgICAgICAgLyogOTMgSVNPIDg4NTktMTUgTGF0aW4gMTUgKi8K LSAgICBpc29fODg1OV8xNV91LCAgICAgICAgICAgICAgICAgICAgICAvKiA5NCBDUDkyMyAtIFNh bWUgYXMgODg1OS0xNSAqLwotICAgIGlzb184ODU5XzdfdSwgICAgICAgICAgICAgICAgICAgICAg IC8qIDk1IEVMT1Q5MjggLSBTYW1lIGFzIDg4NTktNyAqLwotICAgIHF1aWNrZHJhd191LCAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDk2IENQMTAwMDAgLSBBcHBsZSBRdWlja2RyYXcgKi8KLSAg ICBjcDM3X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA5NyBDUDM3IC0gVS5TLiBF QkNESUMgKi8KLSAgICBjcDEyNTVfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA5OCBD UDEyNTUgLSBXaW5kb3dzIEhlYnJldyAqLwotICAgIGNwMTI1Nl91LCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDk5IENQMTI1NiAtIFdpbmRvd3MgQXJhYmljICovCi0gICAgY3AxMjU4X3Us ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwIENQMTI1OCAtIFdpbmRvd3MgVmlldCBO YW0gKi8KLSAgICBtYXpvdmlhX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDEgTWF6 b3ZpYSBQQyBjb2RlIHBhZ2UgKi8KLSAgICBpZGVudF91LCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAxMDIgVHJhbnNwYXJlbnQgLSBubyB0cmFuc2xhdGlvbiAgKi8KLSAgICBoejE1MDBf dSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDMgSGF6ZWx0aW5lIDE1MDAvMTUyMCBn cmFwaGljcyAqLwotICAgIGtvaThyX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEw NCBLT0k4LVIgKi8KLSAgICBrb2k4dV91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAx MDUgS09JOC1VICovCi0gICAgYXBsMV91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog MTA2IEFQTCAxIChJU08pICovCi0gICAgYXBsMl91LCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogMTA3IEFQTCAyIChBSVgpICovCi0gICAgYXBsM191LCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogMTA4IEFQTCAzIChQbHVzKSAqLwotICAgIGFwbDRfdSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDEwOSBBUEwgNCAoSUJNKSAqLwotICAgIGFwbDVfdSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDExMCBBUEwgNSAoMjc0MSkgKi8KLX07Ci0vKgotICBU YWJsZSBvZiBVbmljb2RlLXRvLUJsYWggdHJhbnNsYXRpb24gZnVuY3Rpb25zLgotICBLRUVQIFRI SVMgSU4gU1lOQyBXSVRIIFRIRSBUWF9ibGFoIERFRklOSVRJVElPTlMgaW4gY2tjdW5pLmgsIGFu ZCBhbHNvCi0gIHdpdGggdGhlIHRhYmxlcyBhYm92ZS4KLSovCi1pbnQKLSNpZmRlZiBDS19BTlNJ QwotKCp4bF90eFtNQVhUWFNFVFMrMV0pKFVTSE9SVCkKLSNlbHNlCi0oKnhsX3R4W01BWFRYU0VU UysxXSkoKQotI2VuZGlmIC8qIENLX0FOU0lDICovCi0gPSB7Ci0gICAgdHhfdXNhc2NpaSwgICAg ICAgICAgICAgICAgICAgICAgICAgLyogIDAgVVMgSVNPIDY0NiAoQVNDSUkpICovCi0gICAgdHhf YnJpdGlzaCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDEgVUsgSVNPIDY0NiAqLwotICAg IHR4X2ZyX2NhbmFkaWFuLCAgICAgICAgICAgICAgICAgICAgIC8qICAyIENhbmFkaWFuIEZyZW5j aCBOUkMgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMyBD dWJhICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDQgQ3pl Y2hvICovCi0gICAgdHhfZGFuaXNoLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDUgRGFu aXNoL05vcndlZ2lhbiBJU08gNjQ2ICovCi0gICAgdHhfZHV0Y2gsICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogIDYgRHV0Y2ggTlJDICovCi0gICAgdHhfZmlubmlzaCwgICAgICAgICAgICAg ICAgICAgICAgICAgLyogIDcgRmlubmlzaCBOUkMgICovCi0gICAgdHhfZnJlbmNoLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogIDggRnJlbmNoIElTTyA2NDYgKi8KLSAgICB0eF9nZXJtYW4s ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgOSBHZXJtYW4gSVNPIDY0NiAqLwotICAgIHR4 X2hlYnJldzcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwIEhlYnJldy03IChERUMpICov Ci0gICAgdHhfaHVuZ2FyaWFuLCAgICAgICAgICAgICAgICAgICAgICAgLyogMTEgSHVuZ2FyaWFu IElTTyA2NDYgKi8KLSAgICB0eF9pY2VsYW5kaWMsICAgICAgICAgICAgICAgICAgICAgICAvKiAx MiBJY2VsYW5kaWMgKi8KLSAgICB0eF9pdGFsaWFuLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiAxMyBJdGFsaWFuIElTTyA2NDYgKi8KLSAgICB0eF9qaXMwMjAxciwgICAgICAgICAgICAgICAg ICAgICAgICAvKiAxNCBKYXBhbmVzZSBSb21hbiBJU08gNjQ2ICovCi0gICAgdHhfamlzMDIwMWss ICAgICAgICAgICAgICAgICAgICAgICAgLyogMTUgSmFwYW5lc2UgS2F0YWthbmEgKi8KLSAgICB0 eF9rb2k3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNiBTaG9ydCBLT0kgKi8KLSAg ICB0eF9kYW5pc2gsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNyBOb3J3ZWdpYW4vRGFu aXNoIElTTyA2NDYgKi8KLSAgICB0eF9wb3J0dWd1ZXNlLCAgICAgICAgICAgICAgICAgICAgICAv KiAxOCBQb3J0dWd1ZXNlIElTTyA2NDYgKi8KLSAgICB0eF9zcGFuaXNoLCAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAxOSBzcGFuaXNoIElTTyA2NDYgKi8KLSAgICB0eF9zd2VkaXNoLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAyMCBTd2VkaXNoIElTTyA2NDYgKi8KLSAgICBOVUxMLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMSBTd2VkaXNoIElTTyA2NDYgZm9yIG5h bWVzICovCi0gICAgdHhfc3dpc3MsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjIgU3dp c3MgTlJDICAgKi8KLSAgICB0eF9pZGVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAy MyBJU08gODg1OS0xICAqLwotICAgIHR4Xzg4NTlfMiwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDI0IElTTyA4ODU5LTIgICovCi0gICAgdHhfODg1OV8zLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogMjUgSVNPIDg4NTktMyAgKi8KLSAgICB0eF84ODU5XzQsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAyNiBJU08gODg1OS00ICAqLwotICAgIHR4Xzg4NTlfNSwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDI3IElTTyA4ODU5LTUgICovIC8qIEN5cmlsbGljICovCi0gICAg dHhfODg1OV82LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjggSVNPIDg4NTktNiAgKi8g LyogQXJhYmljICovCi0gICAgdHhfODg1OV83LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog MjkgSVNPIDg4NTktNyAgKi8gLyogR3JlZWsgKi8KLSAgICB0eF84ODU5XzgsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAzMCBJU08gODg1OS04ICAqLyAvKiBIZWJyZXcgKi8KLSAgICB0eF84 ODU5XzksICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzMSBJU08gODg1OS05ICAqLyAvKiBM YXRpbi01ICovCi0gICAgdHhfODg1OV8xMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzIg SVNPIDg4NTktMTAgKi8gLyogTGF0aW4tNiAqLwotICAgIHR4X2tvaTgsICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDMzIEtPSS04ICAgICAgICovCi0gICAgTlVMTCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMzQgSklTLTcgICAgICAgKi8KLSAgICBOVUxMLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAzNSBTaGlmdCBKSVMgICAqLwotICAgIE5VTEwsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM2IEphcGFuZXNlIEVVQyAoSkFFKSAqLwot ICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM3IEphcGFuZXNlIERF QyBLYW5qaSAqLwotICAgIHR4X2RlY21jcywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM4 IERFQyBNQ1MgKi8KLSAgICB0eF9uZXh0c3RlcCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAz OSBOZVhUICAgICovCi0gICAgdHhfZGdpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog NDAgREdJICAgICAqLwotICAgIHR4X21hY2xhdGluLCAgICAgICAgICAgICAgICAgICAgICAgIC8q IDQxIE1hY2ludG9zaCBMYXRpbiAgKi8KLSAgICB0eF9ocHJvbWFuOCwgICAgICAgICAgICAgICAg ICAgICAgICAvKiA0MiBIUCBSb21hbiA4ICAgICAgICovCi0gICAgdHhfY3A0MzcsICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogNDMgQ1A0MzcgLSBPcmlnaW5hbCAqLwotICAgIHR4X2NwODUw LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ0IENQODUwIC0gVyBFdXJvcGUgKi8KLSAg ICB0eF9jcDg1MiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0NSBDUDg1MiAtIEUgRXVy b3BlICovCi0gICAgdHhfY3A4NTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDYgQ1A4 NTcgLSBUdXJraXNoICAqLwotICAgIHR4X2NwODYyLCAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDQ3IENQODYyIC0gSGVicmV3ICAgKi8KLSAgICB0eF9jcDg2NiwgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA0OCBDUDg2NCAtIEFyYWJpYyAgICovCi0gICAgdHhfY3A4NjYsICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogNDkgQ1A4NjYgLSBDeXJpbGxpYyAqLwotICAgIHR4X2Nw ODY5LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUwIENQODY5IC0gR3JlZWsgICAgKi8K LSAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAgICAvKiA1MSBERUMgU3BlY2lh bCBHcmFwaGljcyAqLwotICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAgICAgIC8q IDUyIERFQyBUZWNobmljYWwgKi8KLSAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8g ICAgICAvKiA1MyBDMCBQaWN0dXJlcyAqLwotICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25s eSAqLyAgICAgIC8qIDU0IEMxIFBpY3R1cmVzICovCi0gICAgTlVMTCwgICAgICAgLyogRGlzcGxh eSBvbmx5ICovICAgICAgLyogNTUgSUJNIEMwIEdyYXBoaWNzICovCi0gICAgTlVMTCwgICAgICAg LyogRGlzcGxheSBvbmx5ICovICAgICAgLyogNTYgSGVhdGggMTkgZ3JhcGhpY3MgKi8KLSAgICBO VUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAgICAvKiA1NyBUVkkgZ3JhcGhpY3MgKi8K LSAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAgICAvKiA1OCBXeXNlIDYwIG5v cm1hbC1tb2RlIGdyYXBoaWNzICovCi0gICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICov ICAgICAgLyogNTkgV3lzZSA2MCBncmFwaGljcyAxICovCi0gICAgTlVMTCwgICAgICAgLyogRGlz cGxheSBvbmx5ICovICAgICAgLyogNjAgV3lzZSA2MCBncmFwaGljcyAyICovCi0gICAgTlVMTCwg ICAgICAgLyogRGlzcGxheSBvbmx5ICovICAgICAgLyogNjEgV3lzZSA2MCBncmFwaGljcyAzICov Ci0gICAgdHhfZWxvdDkyNywgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjIgR3JlZWsgRUxP VCA5MjcgKi8KLSAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAgICAvKiA2MyBE RyBzcGVjaWFsIGdyYXBoaWNzICovCi0gICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICov ICAgICAgLyogNjQgREcgbGluZS1kcmF3aW5nICovCi0gICAgTlVMTCwgICAgICAgLyogRGlzcGxh eSBvbmx5ICovICAgICAgLyogNjUgREcgd29yZC1wcm9jZXNzaW5nICovCi0gICAgTlVMTCwgICAg ICAgLyogRGlzcGxheSBvbmx5ICovICAgICAgLyogNjYgSFAgbGluZS1kcmF3aW5nICovCi0gICAg TlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICovICAgICAgLyogNjcgSFAgbWF0aC90ZWNoaWNh bCAqLwotICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAgICAgIC8qIDY4IFFOWCBH cmFwaGljcyAqLwotICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAgICAgIC8qIDY5 IFNOSSBCcmFja2V0cyAqLwotICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAgICAg IC8qIDcwIFNOSSBFdXJvICovCi0gICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICovICAg ICAgLyogNzEgU05JIEZhY2V0ICovCi0gICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICov ICAgICAgLyogNzIgU05JIElCTSAqLwotICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAq LyAgICAgIC8qIDczIFNOSSBCbGFua3MgKi8KLSAgICB0eF9jcDEyNTIsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA3NCBXaW5kb3dzIExhdGluLTEgKi8KLSAgICB0eF9jcDEyNTAsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiA3NSBXaW5kb3dzIExhdGluLTIgKi8KLSAgICB0eF9jcDEy NTEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3NiBXaW5kb3dzIEN5cmlsbGljICovCi0g ICAgdHhfY3AxMjUzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzcgV2luZG93cyBHcmVl ayAqLwotICAgIHR4X2NwMTI1NCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDc4IFdpbmRv d3MgVHVya2lzaCAqLwotICAgIHR4X2NwMTI1NywgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDc5IFdpbmRvd3MgTGF0aW4tNCAqLwotICAgIHR4X2NwODU2LCAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDgwIEN5cmlsbGljIFBDIENvZGUgUGFnZSA4NTYgKi8KLSAgICB0eF9jcDg1NSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4MSBDeXJpbGxpYyBQQyBDb2RlIFBhZ2UgODU1 ICovCi0gICAgdHhfaWRlbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODIgQ1A4MTkg LSBTYW1lIGFzIDg4NTktMSAqLwotICAgIHR4Xzg4NTlfMiwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDgzIENQOTEyIC0gU2FtZSBhcyA4ODU5LTIgKi8KLSAgICB0eF84ODU5XzMsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiA4NCBDUDkxMyAtIFNhbWUgYXMgODg1OS0zICovCi0gICAg dHhfODg1OV80LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODUgQ1A5MTQgLSBTYW1lIGFz IDg4NTktNCAqLwotICAgIHR4Xzg4NTlfNSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDg2 IENQOTE1IC0gU2FtZSBhcyA4ODU5LTUgKi8KLSAgICB0eF84ODU5XzYsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA4NyBDUDEwODkgLSBTYW1lIGFzIDg4NTktNiAqLwotICAgIHR4Xzg4NTlf NywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDg4IENQODEzIC0gU2FtZSBhcyA4ODU5LTcg Ki8KLSAgICB0eF84ODU5XzgsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4OSBDUDkxNiAt IFNhbWUgYXMgODg1OS04ICovCi0gICAgdHhfODg1OV85LCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogOTAgQ1A5MjAgLSBTYW1lIGFzIDg4NTktOSAqLwotICAgIHR4X2hwcm9tYW44LCAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDkxIENQMTA1MSAtU2FtZSBhcyBIUCBSb21hbiA4ICovCi0g ICAgdHhfY3A4NTgsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOTIgQ1A4NTggLSBXIEV1 cm9wZSB3L0V1cm8gKi8KLSAgICB0eF84ODU5XzE1LCAgICAgICAgICAgICAgICAgICAgICAgICAv KiA5MyBJU08gODg1OS0xNSBMYXRpbiAxNSAqLwotICAgIHR4Xzg4NTlfMTUsICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDk0IENQOTIzIC0gU2FtZSBhcyBMYXRpbiAxNSAqLwotICAgIHR4Xzg4 NTlfNywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDk1IEVMT1Q5MjggLSBTYW1lIGFzIDg4 NTktNyAqLwotICAgIHR4X3F1aWNrZHJhdywgICAgICAgICAgICAgICAgICAgICAgIC8qIDk2IENQ MTAwMDAgLSBBcHBsZSBRdWlja2RyYXcgKi8KLSAgICB0eF9jcDM3LCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA5NyBDUDM3IC0gVS5TLiBFQkNESUMgKi8KLSAgICB0eF9jcDEyNTUsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA5OCBDUDEyNTUgLSBXaW5kb3dzIEhlYnJldyAqLwot ICAgIHR4X2NwMTI1NiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDk5IENQMTI1NiAtIFdp bmRvd3MgQXJhYmljICovCi0gICAgdHhfY3AxMjU4LCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogMTAwIENQMTI1OCAtIFdpbmRvd3MgVmlldCBOYW0gKi8KLSAgICB0eF9tYXpvdmlhLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAxMDEgTWF6b3ZpYSAgUEMgY29kZSBwYWdlICovCi0gICAg dHhfaWRlbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAyIFRyYW5zcGFyZW50IC0g bm8gdHJhbnNsYXRpb24gKi8KLSAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAg ICAvKiAxMDMgSGF6ZWx0aW5lIDE1MDAvMTUyMCBncmFwaGljcyAqLwotICAgIHR4X2tvaThyLCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwNCBLT0k4LVIgKi8KLSAgICB0eF9rb2k4dSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDUgS09JOC1VICovCi0gICAgdHhfYXBsMSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTA2IEFQTCAxIChJU08pICovCi0gICAgdHhf YXBsMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTA3IEFQTCAyIChBSVgpICovCi0g ICAgdHhfYXBsMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTA4IEFQTCAzIChQbHVz KSAqLwotICAgIHR4X2FwbDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwOCBBUEwg NCAoSUJNKSAqLwotICAgIHR4X2FwbDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEx MCBBUEwgNSAoMjc0MSkgKi8KLX07Ci0KLS8qCi0gIFRhYmxlIG9mIEZDUy10by1Vbmljb2RlIHRy YW5zbGF0aW9uIGZ1bmN0aW9ucy4KLSAgS0VFUCBUSElTIElOIFNZTkMgV0lUSCBUSEUgRkNfYmxh aCBERUZJTklUSVRJT05TIGluIGNrdXhsYS5oLgotKi8KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lD Ci0oKnhsX2ZjdVtNQVhGQ1NFVFMrMV0pKENIQVIpCi0jZWxzZQotKCp4bF9mY3VbTUFYRkNTRVRT KzFdKSgpCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLT0gewotICAgIGFzY2lpX3UsICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qICAwIFVTIElTTyA2NDYgKEFTQ0lJKSAqLwotICAgIGJyaXRp c2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAxIFVLIElTTyA2NDYgKi8KLSAgICBk dXRjaF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMiBEdXRjaCBOUkMgKi8KLSAg ICBmaW5uaXNoX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMyBGaW5uaXNoIE5SQyAg Ki8KLSAgICBmcmVuY2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNCBGcmVuY2gg SVNPIDY0NiAqLwotICAgIGZyX2NhbmFkaWFuX3UsICAgICAgICAgICAgICAgICAgICAgIC8qICA1 IENhbmFkaWFuIEZyZW5jaCBOUkMgKi8KLSAgICBnZXJtYW5fdSwgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAgNiBHZXJtYW4gSVNPIDY0NiAqLwotICAgIGh1bmdhcmlhbl91LCAgICAgICAg ICAgICAgICAgICAgICAgIC8qICA3IEh1bmdhcmlhbiBJU08gNjQ2ICovCi0gICAgaXRhbGlhbl91 LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDggSXRhbGlhbiBJU08gNjQ2ICovCi0gICAg ZGFuaXNoX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDkgRGFuaXNoL05vcndlZ2lh biBJU08gNjQ2ICovCi0gICAgcG9ydHVndWVzZV91LCAgICAgICAgICAgICAgICAgICAgICAgLyog MTAgUG9ydHVndWVzZSBJU08gNjQ2ICovCi0gICAgc3BhbmlzaF91LCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogMTEgc3BhbmlzaCBJU08gNjQ2ICovCi0gICAgc3dlZGlzaF91LCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMTIgU3dlZGlzaCBJU08gNjQ2ICovCi0gICAgc3dpc3NfdSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTMgU3dpc3MgTlJDICAgKi8KLSAgICBpc29f ODg1OV8xX3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAxNCBJU08gODg1OS0xIExhdGluLTEg Ki8KLSAgICBpc29fODg1OV8yX3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAxNSBJU08gODg1 OS0yIExhdGluLTIgKi8KLSAgICBkZWNtY3NfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAxNiBERUMgTUNTICovCi0gICAgbmV4dHN0ZXBfdSwgICAgICAgICAgICAgICAgICAgICAgICAg LyogMTcgTmVYVCAqLwotICAgIGNwNDM3X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDE4IENQNDM3IC0gT3JpZ2luYWwgKi8KLSAgICBjcDg1MF91LCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAxOSBDUDg1MCAtIFcgRXVyb3BlICovCi0gICAgY3A4NTJfdSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMjAgQ1A4NTIgLSBFIEV1cm9wZSAqLwotICAgIHF1aWNrZHJh d191LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIxIENQMTAwMDAgLSBBcHBsZSBRdWlja2Ry YXcgKi8KLSAgICBkZ2lfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMiBER0kg Ki8KLSAgICBocHJvbWFuOF91LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMyBIUCBSb21h biA4ICovCi0gICAgaXNvXzg4NTlfNV91LCAgICAgICAgICAgICAgICAgICAgICAgLyogMjQgSVNP IDg4NTktNSBDeXJpbGxpYyAqLwotICAgIGNwODY2X3UsICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDI1IENQODY2IC0gQ3lyaWxsaWMgKi8KLSAgICBrb2k3X3UsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAyNiBTaG9ydCBLT0kgKi8KLSAgICBrb2k4X3UsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAyNyBLT0ktOCAgICAgICAqLwotICAgIE5VTEwsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDI4IEpJUy03ICovCi0gICAgTlVMTCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogMjkgU2hpZnQtSklTICovCi0gICAgTlVMTCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMzAgSmFwYW5lc2UgRVVDICovCi0gICAgTlVMTCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzEgREVDIEthbmppICovCi0gICAgaGVi cmV3N191LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzIgSGVicmV3LTcgKERFQykgKi8K LSAgICBpc29fODg1OV84X3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAzMyBJU08gODg1OS04 IEhlYnJldyAqLwotICAgIGNwODYyX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM0 IENQODYyIEhlYnJldyAqLwotICAgIGVsb3Q5MjdfdSwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDM1IEdyZWVrIEVMT1QgOTI3ICovCi0gICAgaXNvXzg4NTlfN191LCAgICAgICAgICAgICAg ICAgICAgICAgLyogMzYgSVNPIDg4NTktNyBHcmVlayAqLwotICAgIGNwODY5X3UsICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDM3IENQODY5IEdyZWVrICovCi0gICAgaXNvXzg4NTlfMTVf dSwgICAgICAgICAgICAgICAgICAgICAgLyogMzggSVNPIDg4NTktMTUgTGF0aW4tOSAqLwotICAg IGNwODU4X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM5IENQODU4IC0gVyBFdXJv cGUgdy9FdXJvICovCi0gICAgY3A4NTVfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog NDAgQ3lyaWxsaWMgUEMgQ29kZSBQYWdlIDg1NiAqLwotICAgIGNwMTI1MV91LCAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDQxIFdpbmRvd3MgQ3lyaWxsaWMgKi8KLSAgICBjcDg1Nl91LCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0MiBCdWxnYXJpYW4gUEMgQ29kZSBQYWdlIDg1 NiAqLwotICAgIGNwMTI1MF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQzIFdpbmRv d3MgTGF0aW4tMiAqLwotICAgIG1hem92aWFfdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDQ0IE1hem92aWEgUEMgY29kZSBwYWdlICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogNDUgVUNTLTIgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA0NiBVVEYtOCAqLwotICAgIGtvaThyX3UsICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDQ3IEtPSTgtUiAqLwotICAgIGtvaTh1X3UsICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDQ4IEtPSTgtVSAqLwotICAgIGNwMTI1Ml91ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDQ5IENQMTI1MiAqLwotfTsKLQotLyoKLSAgVGFibGUgb2YgVW5pY29kZS10 by1GQ1MgdHJhbnNsYXRpb24gZnVuY3Rpb25zLgotICBLRUVQIFRISVMgSU4gU1lOQyBXSVRIIFRI RSBGQ19ibGFoIERFRklOSVRJVElPTlMgaW4gY2t1eGxhLmguCi0qLwotaW50Ci0jaWZkZWYgQ0tf QU5TSUMKLSgqeGxfdWZjW01BWEZDU0VUUysxXSkoVVNIT1JUKQotI2Vsc2UKLSgqeGxfdWZjW01B WEZDU0VUUysxXSkoKQotI2VuZGlmIC8qIENLX0FOU0lDICovCi09IHsKLSAgICB0eF91c2FzY2lp LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMCBVUyBJU08gNjQ2IChBU0NJSSkgKi8KLSAg ICB0eF9icml0aXNoLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMSBVSyBJU08gNjQ2ICov Ci0gICAgdHhfZHV0Y2gsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDIgRHV0Y2ggTlJD ICovCi0gICAgdHhfZmlubmlzaCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDMgRmlubmlz aCBOUkMgICovCi0gICAgdHhfZnJlbmNoLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDQg RnJlbmNoIElTTyA2NDYgKi8KLSAgICB0eF9mcl9jYW5hZGlhbiwgICAgICAgICAgICAgICAgICAg ICAvKiAgNSBDYW5hZGlhbiBGcmVuY2ggTlJDICovCi0gICAgdHhfZ2VybWFuLCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogIDYgR2VybWFuIElTTyA2NDYgKi8KLSAgICB0eF9odW5nYXJpYW4s ICAgICAgICAgICAgICAgICAgICAgICAvKiAgNyBIdW5nYXJpYW4gSVNPIDY0NiAqLwotICAgIHR4 X2l0YWxpYW4sICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA4IEl0YWxpYW4gSVNPIDY0NiAq LwotICAgIHR4X2RhbmlzaCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA5IERhbmlzaC9O b3J3ZWdpYW4gSVNPIDY0NiAqLwotICAgIHR4X3BvcnR1Z3Vlc2UsICAgICAgICAgICAgICAgICAg ICAgIC8qIDEwIFBvcnR1Z3Vlc2UgSVNPIDY0NiAqLwotICAgIHR4X3NwYW5pc2gsICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDExIHNwYW5pc2ggSVNPIDY0NiAqLwotICAgIHR4X3N3ZWRpc2gs ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEyIFN3ZWRpc2ggSVNPIDY0NiAqLwotICAgIHR4 X3N3aXNzLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEzIFN3aXNzIE5SQyAgICovCi0g ICAgdHhfaWRlbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTQgSVNPIDg4NTktMSBM YXRpbi0xICovCi0gICAgdHhfODg1OV8yLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTUg SVNPIDg4NTktMiBMYXRpbi0yICovCi0gICAgdHhfZGVjbWNzLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogMTYgREVDIE1DUyAqLwotICAgIHR4X25leHRzdGVwLCAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDE3IE5lWFQgKi8KLSAgICB0eF9jcDQzNywgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAxOCBDUDQzNyAtIE9yaWdpbmFsICovCi0gICAgdHhfY3A4NTAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMTkgQ1A4NTAgLSBXIEV1cm9wZSAqLwotICAgIHR4X2NwODUyLCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIwIENQODUyIC0gRSBFdXJvcGUgKi8KLSAgICB0 eF9xdWlja2RyYXcsICAgICAgICAgICAgICAgICAgICAgICAvKiAyMSBDUDEwMDAwIC0gQXBwbGUg UXVpY2tkcmF3ICovCi0gICAgdHhfZGdpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog MjIgREdJICovCi0gICAgdHhfaHByb21hbjgsICAgICAgICAgICAgICAgICAgICAgICAgLyogMjMg SFAgUm9tYW4gOCAqLwotICAgIHR4Xzg4NTlfNSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDI0IElTTyA4ODU5LTUgQ3lyaWxsaWMgKi8KLSAgICB0eF9jcDg2NiwgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAyNSBDUDg2NiAtIEN5cmlsbGljICovCi0gICAgdHhfa29pNywgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogMjYgU2hvcnQgS09JICovCi0gICAgdHhfa29pOCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMjcgS09JLTggICAgICAgKi8KLSAgICBOVUxMLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyOCBKSVMtNyAqLwotICAgIE5VTEwsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI5IFNoaWZ0LUpJUyAqLwotICAgIE5VTEws ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMwIEphcGFuZXNlIEVVQyAqLwotICAg IE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMxIERFQyBLYW5qaSAqLwot ICAgIHR4X2hlYnJldzcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMyIEhlYnJldy03IChE RUMpICovCi0gICAgdHhfODg1OV84LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzMgSVNP IDg4NTktOCBIZWJyZXcgKi8KLSAgICB0eF9jcDg2MiwgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAzNCBDUDg2MiBIZWJyZXcgKi8KLSAgICB0eF9lbG90OTI3LCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAzNSBHcmVlayBFTE9UIDkyNyAqLwotICAgIHR4Xzg4NTlfNywgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDM2IElTTyA4ODU5LTcgR3JlZWsgKi8KLSAgICB0eF9jcDg2OSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzNyBDUDg2OSBHcmVlayAqLwotICAgIHR4Xzg4 NTlfMTUsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM4IElTTyA4ODU5LTE1IExhdGluLTkg Ki8KLSAgICB0eF9jcDg1OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzOSBDUDg1OCAt IFcgRXVyb3BlIHcvRXVybyAqLwotICAgIHR4X2NwODU1LCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDQwIEN5cmlsbGljIFBDIENvZGUgUGFnZSA4NTYgKi8KLSAgICB0eF9jcDEyNTEsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA0MSBXaW5kb3dzIEN5cmlsbGljICovCi0gICAgdHhf Y3A4NTYsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDIgQnVsZ2FyaWFuIFBDIENvZGUg UGFnZSA4NTYgKi8KLSAgICB0eF9jcDEyNTAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0 MyBXaW5kb3dzIExhdGluLTIgKi8KLSAgICB0eF9tYXpvdmlhLCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiA0NCBNYXpvdmlhIFBDIGNvZGUgcGFnZSAqLwotICAgIE5VTEwsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDQ1IFVDUy0yICovCi0gICAgTlVMTCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogNDYgVVRGLTggKi8KLSAgICB0eF9rb2k4ciwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA0NyBLT0k4LVIgKi8KLSAgICB0eF9rb2k4dSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA0OCBLT0k4LVUgKi8KLSAgICB0eF9jcDEyNTIgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA0OSBDUDEyNTIgKi8KLX07Ci0KLS8qCi0gIFRhYmxlIG9mIFRD Uy10by1Vbmljb2RlIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4KLSAgS0VFUCBUSElTIElOIFNZTkMg V0lUSCBUSEUgVENfYmxhaCBERUZJTklUSU9OUyBpbiBja3V4bGEuaC4KLSovCi1VU0hPUlQKLSNp ZmRlZiBDS19BTlNJQwotKCp4bF90Y3VbTUFYVENTRVRTKzFdKShDSEFSKQotI2Vsc2UKLSgqeGxf dGN1W01BWFRDU0VUUysxXSkoKQotI2VuZGlmIC8qIENLX0FOU0lDICovCi09IHsKLSAgICBOVUxM LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMCA9IFRyYW5zcGFyZW50ICovCi0g ICAgYXNjaWlfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDEgPSBBU0NJSSAqLwot ICAgIGlzb184ODU5XzFfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qICAyIElTTyA4ODU5LTEg TGF0aW4tMSAqLwotICAgIGlzb184ODU5XzJfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qICAz IElTTyA4ODU5LTIgTGF0aW4tMiAqLwotICAgIGlzb184ODU5XzVfdSwgICAgICAgICAgICAgICAg ICAgICAgIC8qICA0IElTTyA4ODU5LTUgQ3lyaWxsaWMgKi8KLSAgICBOVUxMLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAgNSBKYXBhbmVzZSBFVUMgKi8KLSAgICBpc29fODg1OV84 X3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAgNiBJU08gODg1OS04IEhlYnJldyAqLwotICAg IGlzb184ODU5XzdfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qICA3IElTTyA4ODU5LTcgR3Jl ZWsgKi8KLSAgICBpc29fODg1OV8xNV91LCAgICAgICAgICAgICAgICAgICAgICAvKiAgOCBJU08g ODg1OS0xNSBMYXRpbi05ICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogIDkgVUNTLTIgKi8KLSAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAxMCBVVEYtOCAqLwotfTsKLQotCi0vKgotICBUYWJsZSBvZiBVbmljb2RlLXRvLVRDUyB0 cmFuc2xhdGlvbiBmdW5jdGlvbnMuCi0gIEtFRVAgVEhJUyBJTiBTWU5DIFdJVEggVEhFIFRDX2Js YWggREVGSU5JVElPTlMgaW4gY2t1eGxhLmguCi0qLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLSgq eGxfdXRjW01BWFRDU0VUUysxXSkoVVNIT1JUKQotI2Vsc2UKLSgqeGxfdXRjW01BWFRDU0VUUysx XSkoKQotI2VuZGlmIC8qIENLX0FOU0lDICovCi09IHsKLSAgICBOVUxMLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAgMCA9IFRyYW5zcGFyZW50ICovCi0gICAgdHhfdXNhc2NpaSwg ICAgICAgICAgICAgICAgICAgICAgICAgLyogIDEgPSBBU0NJSSAqLwotICAgIHR4X2lkZW50LCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAyIElTTyA4ODU5LTEgTGF0aW4tMSAqLwotICAg IHR4Xzg4NTlfMiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAzIElTTyA4ODU5LTIgTGF0 aW4tMiAqLwotICAgIHR4Xzg4NTlfNSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA0IElT TyA4ODU5LTUgQ3lyaWxsaWMgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAgNSBKYXBhbmVzZSBFVUMgKi8KLSAgICB0eF84ODU5XzgsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAgNiBJU08gODg1OS04IEhlYnJldyAqLwotICAgIHR4Xzg4NTlfNywgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qICA3IElTTyA4ODU5LTcgR3JlZWsgKi8KLSAgICB0eF84 ODU5XzE1LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgOCBJU08gODg1OS0xNSBMYXRpbi05 ICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDkgVUNTLTIg Ki8KLSAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMCBVVEYtOCAq LwotfTsKLQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFRoZSBVVEY4IGNvbnZlcnNpb25zIGFyZSBi YXNlZCBvbiB0aGUgQ29udmVydFVURiBmdW5jdGlvbnMgd3JpdHRlbgotICBieSBNYXJrIEUuIERh dmlzLCBjb3B5cmlnaHQgMTk5NCBUYWxpZ2VudCwgSW5jLgotCi0gIFRhYmxlcyBmb3IgdXNlIGlu IGNhbGN1bGF0aW5nIFVURjggY29udmVyc2lvbnMuICBUaGVzZSBjb250YWluCi0gIHN1cHBvcnQg Zm9yIElTTy0xMDY0NiB3aGljaCBzdXBwb3J0cyBhIDMxLWJpdCBjaGFyIHNpemUuCi0KLSAgTk9U RTogMHhubm5VTCBpcyBOT1QgcG9ydGFibGUhCi0qLwotVUxPTkcKLW9mZnNldHNGcm9tVVRGOFs3 XSA9IHsKLSNpZmRlZiBDS19BTlNJQwotICAgIDB4MDAwMDAwMDBVTCwgLyogSWdub3JlZCAqLwot ICAgIDB4MDAwMDAwMDBVTCwgMHgwMDAwMzA4MFVMLCAweDAwMEUyMDgwVUwsCi0gICAgMHgwM0M4 MjA4MFVMLCAweEZBMDgyMDgwVUwsIDB4ODIwODIwODBVTAotI2Vsc2UKLSAgICAweDAwMDAwMDAw TCwgLyogSWdub3JlZCAqLwotICAgIDB4MDAwMDAwMDBMLCAweDAwMDAzMDgwTCwgMHgwMDBFMjA4 MEwsCi0gICAgMHgwM0M4MjA4MEwsICh1bnNpZ25lZCkgMHhGQTA4MjA4MEwsICh1bnNpZ25lZCkg MHg4MjA4MjA4MEwKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotfTsKLQotQ0hBUiBieXRlc0luVVRG OFsyNTZdID0gewotICAgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsIDEsMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCi0gICAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwKLSAgICAxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLCAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAotICAg IDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsCi0gICAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwgMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwKLSAgICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLCAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAotICAgIDIsMiwyLDIsMiwyLDIs MiwyLDIsMiwyLDIsMiwyLDIsIDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsCi0gICAg MywzLDMsMywzLDMsMywzLDMsMywzLDMsMywzLDMsMywgNCw0LDQsNCw0LDQsNCw0LDUsNSw1LDUs Niw2LDYsNgotfTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLUNIQVIgZmlyc3RCeXRlTWFya1s3 XSA9IHsweDAwLCAweDAwLCAweEMwLCAweEUwLCAweEYwLCAweEY4LCAweEZDfTsKLQotLyoKLSAg dXRmOF90b191Y3MyKCkgdGFrZXMgb25lIFVURi04IGJ5dGUgYXQgYSB0aW1lLiAgSXQgcmV0dXJu cyBhIHBvaW50ZXIgdGhlCi0gIFVDUy0yIGNoYXJhY3RlciBpZiBhbmQgb25seSBpZiB0aGUgZW50 aXJlIFVURi04IHN0cmluZyBoYXMgYmVlbiByZWNlaXZlZC4KLSAgUmV0dXJuIHZhbHVlczoKLSAg IDA6IENvbXBsZXRlIFVURi04IHNlcXVlbmNlIHJlY2VpdmVkOyB1Y3MyIHBvaW50cyB0byB2YWxp ZCB1Y3MyIGNoYXJhY3Rlci4KLSAgPjA6IFVURi04IHNlcXVlbmNlIGluY29tcGxldGUsIGlnbm9y ZSB1Y3MyIHZhbHVlLgotICA8MDogVVRGLTggZXJyb3IsIDB4ZmZmZCBzaG91bGQgYmUgaW5zZXJ0 ZWQgQkVGT1JFIHRoZSB1Y3MyIHZhbHVlLgotCi0gIE5PVEU6IEEgbmVnYXRpdmUgdmFsdWUgaXMg cmV0dXJuZWQgb25seSB3aGVuIHR3byByZXR1cm4gdmFsdWVzIGFyZSBpbmRpY2F0ZWQsCi0gIGUu Zy4gd2hlbiBhIFVURi04IHNlcXVlbmNlIGlzIGludGVycnVwdGVkIGJ5IGFuIEFTQ0lJIGNoYXIu ICBJbiB0aGlzIGNhc2UKLSAgdGhlIGluY29tcGxldGUgVVRGLTggc2VxdWVuY2UgbXVzdCBiZSBy ZXBsYWNlZCBieSAweGZmZmQsIGFuZCB0aGVuIHRoZSBBU0NJSQotICBjaGFyYWN0ZXIgaXMga2Vw dCBhcy1pcy4gIEluIG90aGVyIGVycm9yIGNhc2VzLCB1Y3MyIGlzIHNldCB0byAweGZmZmQgYW5k Ci0gIHRoZSByZXR1cm4gdmFsdWUgaXMgMC4KLSovCi0jZGVmaW5lIFVURkJVRlNJWiAxNgotCi1p bnQKLSNpZmRlZiBDS19BTlNJQwotdXRmOF90b191Y3MyKENIQVIgY2gsIFVTSE9SVCAqKiB1Y3My KQotI2Vsc2UKLXV0ZjhfdG9fdWNzMihjaCwgdWNzMikgQ0hBUiBjaDsgVVNIT1JUICoqIHVjczI7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBzdGF0aWMgVVNIT1JUIHVjczJyZXR1cm4g PSAwOwotCi0jaWZkZWYgQ09NTUVOVAotICAgIC8qIFVuaWNvZGUgQ29uc29ydGl1bSBzYW1wbGUg Y29kZSB3b3JrcyBvbmx5IHdpdGggd2VsbC1mb3JtZWQgVVRGOCAqLwotCi0gICAgaW50IGkgPSAw OwotICAgIHN0YXRpYyBpbnQgbGVuID0gMDsKLSAgICBzdGF0aWMgQ0hBUiB1dGY4W1VURkJVRlNJ Wl0gPSB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfTsKLSAgICBVTE9ORyB1Y3M0 ID0gMDsKLQotICAgIHV0ZjhbbGVuKytdID0gY2g7ICAgICAgICAgICAgICAgICAgIC8qIEFkZCBj aGFyIHRvIHN0cmluZyB0byBwcm9jZXNzICovCi0KLSAgICBpZiAobGVuIDwgYnl0ZXNJblVURjhb dXRmOFswXV0pICAgICAvKiBOZWVkIG1vcmUgYnl0ZXMgKi8KLSAgICAgIHJldHVybihieXRlc0lu VVRGOFt1dGY4WzBdXSAtIGxlbik7Ci0KLSAgICBzd2l0Y2ggKGxlbikgeyAgICAgICAgICAgICAg ICAgICAgICAvKiBIYXZlIGNvbXBsZXRlIHNlcXVlbmNlLi4uICovCi0gICAgICBjYXNlIDY6IHVj czQgKz0gdXRmOFtpKytdOyB1Y3M0IDw8PSA2OyAvKiAoZmFsbC10aHJ1IGlzIGludGVudGlvbmFs KSAqLwotICAgICAgY2FzZSA1OiB1Y3M0ICs9IHV0ZjhbaSsrXTsgdWNzNCA8PD0gNjsKLSAgICAg IGNhc2UgNDogdWNzNCArPSB1dGY4W2krK107IHVjczQgPDw9IDY7Ci0gICAgICBjYXNlIDM6IHVj czQgKz0gdXRmOFtpKytdOyB1Y3M0IDw8PSA2OwotICAgICAgY2FzZSAyOiB1Y3M0ICs9IHV0Zjhb aSsrXTsgdWNzNCA8PD0gNjsKLSAgICAgIGNhc2UgMTogdWNzNCArPSB1dGY4W2krK107Ci0gICAg fQotICAgIHVjczQgLT0gb2Zmc2V0c0Zyb21VVEY4W2xlbl07Ci0gICAgdWNzMnJldHVybiA9IChV U0hPUlQpKHVjczQgJiAweEZGRkYpOwotI2lmZGVmIERFQlVHCi0gICAgLyogVGhpcyBzaG93cyB0 aGF0IG91ciByZXR1cm4gdmFsdWUgaXMgaW4gdGhlIHByZXZhaWxpbmcgYnl0ZSBvcmRlcjogKi8K LSAgICAvKiBlLmcuIExFIG9uIFBDLCBCRSBvbiBTcGFyYy4gKi8KLSAgICBpZiAoZGVibG9nKSB7 Ci0gICAgICAgIGNoYXIgYnVmWzE2XTsKLSAgICAgICAgdW5pb24gY2tfc2hvcnQgeHg7Ci0gICAg ICAgIHh4Lnhfc2hvcnQgPSB1Y3MycmV0dXJuOwotICAgICAgICBzcHJpbnRmKGJ1ZiwiJTA0WCIs dWNzMnJldHVybik7Ci0gICAgICAgIGRlYnVnKEYxMTEsInV0ZjhfdG9fdWNzMiBzaG9ydCIsYnVm LHVjczJyZXR1cm4pOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ1dGY4X3RvX3VjczIgY2hhclswXSIs IiIseHgueF9jaGFyWzBdKTsKLSAgICAgICAgZGVidWcoRjEwMSwidXRmOF90b191Y3MyIGNoYXJb MV0iLCIiLHh4LnhfY2hhclsxXSk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgKnVj czIgPSAmdWNzMnJldHVybjsKLSAgICBsZW4gPSAwOwotICAgIHJldHVybigwKTsKLSNlbHNlCi0g ICAgLyoKLSAgICAgICBSb2J1c3RlciBjb2RlIGFkYXB0ZWQgZnJvbSBUaG9tYXMgRGlja2V5LCBY ZnJlZTg2LAotICAgICAgIHJlY29tbWVuZGVkIGJ5IE1hcmt1cyBLdWhuLgotICAgICovCi0gICAg c3RhdGljIGludCB1dGZjb3VudCA9IDA7ICAgICAgICAgICAgLyogUG9zaXRpb24gaW4gVVRGIHNl cXVlbmNlICovCi0gICAgaW50IHV0ZmVycm9yID0gMDsgICAgICAgICAgICAgICAgICAgLyogRmxh ZyBmb3IgbWFsZm9ybWVkIFVURiAqLwotICAgIHVuc2lnbmVkIGMgPSBjaDsgICAgICAgICAgICAg ICAgICAgIC8qIElucHV0IGJ5dGUgKi8KLSAgICBpbnQgaGF2ZXVjczIgPSAwOwotCi0gICAgaWYg KGNoIDwgMHg4MCkgeyAgICAgICAgICAgICAgICAgICAgLyogQVNDSUkgY2hhci4uLiAqLwotICAg ICAgICBpZiAodXRmY291bnQgPiAwKSAgICAgICAgICAgICAgIC8qIE5vdCBsZWdhbCBpbiBVVEYt OCBzZXF1ZW5jZSAqLwotICAgICAgICAgIHV0ZmVycm9yID0gMTsgICAgICAgICAgICAgICAgIC8q IHNvIGZsYWcgKi8KLSAgICAgICAgaGF2ZXVjczIgPSAxOwotICAgICAgICB1Y3MycmV0dXJuID0g Y2g7ICAgICAgICAgICAgICAgIC8qIGJ1dCBhbHNvIHJldHVybiBpdCAqLwotICAgICAgICB1dGZj b3VudCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIHJlc2V0IFVURi04IGNvdW50ICovCi0gICAg fSBlbHNlIGlmIChjaCA8IDB4YzApIHsgICAgICAgICAgICAgLyogMHg4MCA8PSBjIDwgMHhjMC4u LiAqLwotICAgICAgICBpZiAodXRmY291bnQgPCAxKSB7ICAgICAgICAgICAgIC8qIE5vdCB2YWxp ZCBpbiBmaXJzdCBwb3NpdGlvbi4uLiAqLwotICAgICAgICAgICAgdXRmZXJyb3IgPSAxOwotICAg ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heWJlIHZhbGlkICovCi0g ICAgICAgICAgICBpZiAodWNzMnJldHVybiA+IDB4MDNmZikgeyAgLyogVmFsdWUgd291bGQgYmUg PiAweGZmZmYgKi8KLSAgICAgICAgICAgICAgICB1dGZlcnJvciA9IDE7ICAgICAgICAgICAvKiBz byBub3QgdmFsaWQgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAv KiBPSy4uLiAqLwotICAgICAgICAgICAgICAgIHVjczJyZXR1cm4gPDw9IDY7ICAgICAgIC8qIFNo aWZ0IHJlc3VsdCAqLwotICAgICAgICAgICAgICAgIHVjczJyZXR1cm4gfD0gKGNoICYgMHgzZik7 IC8qIGFuZCBPUiBpbiB0aGlzIGJ5dGUgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm ICgtLXV0ZmNvdW50ID09IDApCi0gICAgICAgICAgICAgIGhhdmV1Y3MyID0gMTsKLSAgICAgICAg fQotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGMgPj0gMHhjMC4u LiAqLwotICAgICAgICBpZiAodXRmY291bnQgPiAwKQotICAgICAgICAgIHV0ZmVycm9yID0gMTsK LSAgICAgICAgaWYgKGMgPCAweGUwKSB7Ci0gICAgICAgICAgICB1dGZjb3VudCA9IDE7Ci0gICAg ICAgICAgICB1Y3MycmV0dXJuID0gKGMgJiAweDFmKTsKLSAgICAgICAgICAgIGhhdmV1Y3MyID0g MTsKLSAgICAgICAgfSBlbHNlIGlmIChjIDwgMHhmMCkgewotICAgICAgICAgICAgdXRmY291bnQg PSAyOwotICAgICAgICAgICAgdWNzMnJldHVybiA9IChjICYgMHgwZik7Ci0gICAgICAgICAgICBo YXZldWNzMiA9IDE7Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA8IDB4ZjgpIHsKLSAgICAgICAgICAg IHV0ZmNvdW50ID0gMzsKLSAgICAgICAgICAgIHVjczJyZXR1cm4gPSAoYyAmIDB4MDcpOwotICAg ICAgICAgICAgaGF2ZXVjczIgPSAxOwotICAgICAgICB9IGVsc2UgaWYgKGMgPCAweGZjKSB7Ci0g ICAgICAgICAgICB1dGZjb3VudCA9IDQ7Ci0gICAgICAgICAgICB1Y3MycmV0dXJuID0gKGMgJiAw eDAzKTsKLSAgICAgICAgICAgIGhhdmV1Y3MyID0gMTsKLSAgICAgICAgfSBlbHNlIGlmIChjIDwg MHhmZSkgewotICAgICAgICAgICAgdXRmY291bnQgPSA1OwotICAgICAgICAgICAgdWNzMnJldHVy biA9IChjICYgMHgwMSk7Ci0gICAgICAgICAgICBoYXZldWNzMiA9IDE7Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICB1dGZlcnJvciA9IDE7Ci0gICAgICAgICAgICB1dGZjb3VudCA9IDA7 Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGhhdmV1Y3MyID09IDAgJiYgdXRmZXJyb3IgIT0g MCkgewotICAgICAgICBoYXZldWNzMiA9IDE7Ci0gICAgICAgIHVjczJyZXR1cm4gPSAweGZmZmQ7 Ci0gICAgICAgIHV0ZmVycm9yID0gMDsKLSAgICB9Ci0gICAgaWYgKGhhdmV1Y3MyKSB7Ci0gICAg ICAgICp1Y3MyID0gJnVjczJyZXR1cm47Ci0gICAgICAgIGlmICh1dGZlcnJvcikKLSAgICAgICAg ICB1dGZjb3VudCA9IDAgLSB1dGZjb3VudDsKLSAgICAgICAgcmV0dXJuKHV0ZmNvdW50KTsKLSAg ICB9IGVsc2UgewotICAgICAgICBpZiAodXRmY291bnQgPT0gMCkKLSAgICAgICAgICB1dGZjb3Vu dCsrOwotICAgICAgICByZXR1cm4odXRmY291bnQpOwotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5U ICovCi19Ci0KLS8qCi0gIHVjczJfdG9fdXRmOCgpIHRha2VzIG9uZSB1Y3MyIGNoYXJhY3RlciBh bmQgcmV0dXJucyB0aGUgbGVuZ3RoIGFuZAotICBhbmQgYSBwb2ludGVyIHRvIGFuIGFycmF5IGNv bnRhaW5pbmcgdGhlIGVxdWl2YWxlbnQgdXRmOCBzdHJpbmcuCi0gIFRoaXMgY29kZSBjYW4gZWFz aWx5IGJlIGFsdGVyZWQgdG8gc3VwcG9ydCBVQ1M0IHNpbXBseSBieSBjaGFuZ2luZwotICB0aGUg aW5wdXQgZnJvbSBVU0hPUlQgdG8gVUxPTkcuICBSZXR1cm5zOgotICAgPjA6IE51bWJlciBvZiBi eXRlcyBpbiB0aGUgdXRmOCBzdHJpbmcuCi0gICAgMDogKG9yIGxlc3MpIEVycm9yLgotKi8KLQot aW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXVjczJfdG9fdXRmOChVU0hPUlQgdWNzMiwgQ0hBUiAqKiB1 dGY4KQotI2Vsc2UKLXVjczJfdG9fdXRmOCh1Y3MyLCB1dGY4KSBVU0hPUlQgdWNzMjsgQ0hBUiAq KiB1dGY4OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgc3RhdGljIENIQVIgdXRmOHJl dHVybls4XT17MCwwLDAsMCwwLDAsMCwwfTsKLSAgICByZWdpc3RlciBDT05TVCBVTE9ORyBieXRl TWFzayA9IDB4QkY7Ci0gICAgcmVnaXN0ZXIgQ09OU1QgVUxPTkcgYnl0ZU1hcmsgPSAweDgwOwot ICAgIGludCB1dGY4bGVuID0gMDsKLSAgICBpbnQgaSA9IDA7Ci0KLSAgICBpZiAodWNzMiA8IDB4 ODApIHsKLSAgICAgICAgdXRmOGxlbiA9IDE7Ci0gICAgICAgIGRlYnVnKEYxMDEsInVjczJfdG9f dXRmOCBYMSIsIiIsdXRmOGxlbik7Ci0gICAgfSBlbHNlIGlmICh1Y3MyIDwgMHg4MDApIHsKLSAg ICAgICAgdXRmOGxlbiA9IDI7Ci0gICAgICAgIGRlYnVnKEYxMDEsInVjczJfdG9fdXRmOCBYMiIs IiIsdXRmOGxlbik7Ci0gICAgfSBlbHNlCi0jaWZkZWYgRE9fVUNTNAotICAgICAgLyogVGhpcyBp cyBhbHdheXMgdHJ1ZSBmb3IgVUNTLTIgYnV0IHdvdWxkIGJlIG5lZWRlZCBmb3IgVUNTLTQqLwot ICAgICAgLyogV2hlbiB1Y3MyIGlzIFVTSE9SVCB0aGlzIGdpdmVzIGNvbXBpbGVyIHdhcm5pbmdz LiAqLwotICAgICAgaWYgKHVjczIgPD0gMHhmZmZmKQotI2VuZGlmIC8qIERPX1VDUzQgKi8KLSAg ICB7Ci0gICAgICAgIHV0ZjhsZW4gPSAzOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ1Y3MyX3RvX3V0 ZjggWDMiLCIiLHV0ZjhsZW4pOwotICAgIH0KLSNpZmRlZiBET19VQ1M0Ci0vKiBUaGUgZm9sbG93 aW5nIHdvdWxkIGJlIGZvciBVQ1MtNCAqLwotICAgIGVsc2UgaWYgKHVjczIgPCAweDIwMDAwMCkg ewotICAgICAgICB1dGY4bGVuID0gNDsKLSAgICB9IGVsc2UgaWYgKHVjczIgPCAweDQwMDAwMDAp IHsKLSAgICAgICAgdXRmOGxlbiA9IDU7Ci0gICAgfSBlbHNlIGlmICh1Y3MyIDw9Ci0jaWZkZWYg Q0tfQU5TSUMKLSAgICAgICAgICAgICAgIDB4N0ZGRkZGRkZVTCAgICAgICAgICAgICAvKiAoZG9l c24ndCByZWFsbHkgbmVlZCB0aGUgIlUiKSAqLwotI2Vsc2UKLSAgICAgICAgICAgICAgIDB4N0ZG RkZGRkZMCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSAgICAgICAgICAgICAgICkgeyAgICAgICAg ICAgICAgICAgICAgICAvKiAzMSBiaXRzID0gbWF4IGZvciBVQ1M0ICovCi0gICAgICAgIHV0Zjhs ZW4gPSA2OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHV0ZjhsZW4gPSAyOwotICAgICAgICB1Y3My ID0gMHhGRkZEOyAgICAgICAgICAgICAgICAgIC8qIFJlcGxhY2VtZW50IGZvciBpbnZhbGlkIGNo YXIgKi8KLSAgICB9Ci0jZW5kaWYgLyogRE9fVUNTNCAqLwotICAgIGkgPSB1dGY4bGVuOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGluZGV4IGludG8gdXRmOHJldHVybiAqLwotICAgIHV0Zjhy ZXR1cm5baS0tXSA9IDA7ICAgICAgICAgICAgICAgIC8qIE51bGwgdGVybWluYXRlIHRoZSBzdHJp bmcgKi8KLQotICAgIHN3aXRjaCAodXRmOGxlbikgeyAgICAgICAgICAgICAgICAgIC8qIGNvZGUg ZmFsbHMgdGhyb3VnaCBjYXNlcyEgKi8KLSAgICAgIGNhc2UgNjogdXRmOHJldHVybltpLS1dID0g KHVjczIgfCBieXRlTWFyaykgJiBieXRlTWFzazsgdWNzMiA+Pj0gNjsKLSAgICAgIGNhc2UgNTog dXRmOHJldHVybltpLS1dID0gKHVjczIgfCBieXRlTWFyaykgJiBieXRlTWFzazsgdWNzMiA+Pj0g NjsKLSAgICAgIGNhc2UgNDogdXRmOHJldHVybltpLS1dID0gKHVjczIgfCBieXRlTWFyaykgJiBi eXRlTWFzazsgdWNzMiA+Pj0gNjsKLSAgICAgIGNhc2UgMzogdXRmOHJldHVybltpLS1dID0gKHVj czIgfCBieXRlTWFyaykgJiBieXRlTWFzazsgdWNzMiA+Pj0gNjsKLSAgICAgIGNhc2UgMjogdXRm OHJldHVybltpLS1dID0gKHVjczIgfCBieXRlTWFyaykgJiBieXRlTWFzazsgdWNzMiA+Pj0gNjsK LSAgICAgIGNhc2UgMTogdXRmOHJldHVybltpLS1dID0gIHVjczIgfCBmaXJzdEJ5dGVNYXJrW3V0 ZjhsZW5dOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ1Y3MyX3RvX3V0ZjgiLHV0ZjhyZXR1cm4s dXRmOGxlbik7Ci0gICAgKnV0ZjggPSB1dGY4cmV0dXJuOwotICAgIHJldHVybih1dGY4bGVuKTsK LX0KLQotLyogIFVURi04IGZ1bmN0aW9ucy4uLiAgKi8KLQotI2lmZGVmIENLX0FOU0lDCi1leHRl cm4gaW50ICgqeHVmKShVU0hPUlQpOyAgICAgICAgICAgICAgLyogVHJhbnNsYXRpb24gZnVuY3Rp b24gVUNTIHRvIEZDUyAqLwotZXh0ZXJuIFVTSE9SVCAoKnhmdSkoQ0hBUik7ICAgICAgICAgICAg IC8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9uIEZDUyB0byBVQ1MgKi8KLSNlbHNlCi1leHRlcm4gaW50 ICgqeHVmKSgpOwotZXh0ZXJuIFVTSE9SVCAoKnhmdSkoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotCi0vKiAgdSBfIHQgbyBfIGIgIC0tICBVVEYtOCB0byBCeXRlICAqLwotLyoKLSAgICBDb252 ZXJ0cyBmcm9tIFVURi04IHRvIHRoZSBjdXJyZW50IHRlcm1pbmFsIG9yIGZpbGUgY2hhcmFjdGVy IHNldC4KLSAgICBDYWxsIHdpdGg6Ci0gICAgICBjOiBhIHNpbmdsZSBieXRlLCB3aGljaCBpcyBw YXJ0IG9mIGEgVVRGLTggc3RyZWFtLgotICAgIFJldHVybnM6Ci0gICAgIC05OiBFcnJvciwgd2l0 aCBzZWNvbmQgY2hhciB0byBmb2xsb3cgKGNhbGwgdV90b19iMigpIHRvIGdldCBpdCkuCi0gICAg IC0yOiBVQ1MgbGluZS9wYXJhZ3JhcGggZW5kIChMUyBvciBQUykuCi0gICAgIC0xOiBVVEYtOCBz dHJlYW0gaXMgaW5jb21wbGV0ZSBhbmQgbW9yZSBpbnB1dCBpcyByZXF1aXJlZC4KLSAgICAgPj0w OiBCeXRlIHZhbHVlIG9mIHJlc3VsdCwgcG9zc2libHkgdGhlICJlcnJvciIgYnl0ZSAoZS5nLiAn PycpLgotICAgIFJlcXVpcmVzOgotICAgICAgR2xvYmFsICgqeHVmKSgpIHRvIHBvaW50IHRvIGEg ZnVuY3Rpb24gdGhhdCB0cmFuc2xhdGVzIGZyb20gVUNTLTIgdG8KLSAgICAgIHRoZSBhcHByb3By aWF0ZSB0ZXJtL2ZpbGUgY2hhcmFjdGVyIHNldC4KLSovCi1zdGF0aWMgaW50IHNhdmVkYnl0ZSA9 IDA7Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxsIGlm IHVfdG9fYigpIHJldHVybnMgLTkgKi8KLXVfdG9fYjIoKSB7Ci0gICAgcmV0dXJuKCh1bnNpZ25l ZCkoc2F2ZWRieXRlICYgMHhmZikpOwotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogVVRGLTggdG8gYnl0ZSAqLwotI2lmZGVmIENLX0FOU0lDCi11X3RvX2Io Q0hBUiBjKQotI2Vsc2UKLXVfdG9fYihjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsKLSAgICBpbnQgeDsKLSAgICBVU0hPUlQgKiB1Y3MyLCB1YzsKLSAgICBpZiAoIXh1ZikgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBubyBjb252ZXJzaW9uIGZ1bmN0aW9uICovCi0g ICAgICByZXR1cm4oYyk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgY29udmVydCAo c2hvdWxkbid0IGhhcHBlbikuICovCi0gICAgeCA9IHV0ZjhfdG9fdWNzMihjLCZ1Y3MyKTsgICAg ICAgICAgLyogU2VuZCBmb3IgY29udmVyc2lvbiB0byBVQ1MtMiAqLwotICAgIGlmICh4ID4gMCkg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBkb25lIHlldC4uLiAqLwotICAgICAgcmV0 dXJuKC0xKTsKLSAgICB1YyA9ICh4IDwgMCkgPyAweGZmZmQgOiAqdWNzMjsgICAgICAvKiBEb25l LCBjaGVjayByZXN1bHQgKi8KLSAgICBpZiAodWMgPT0gMHgyMDI4IHx8IHVjID09IDB4MjAyOSkg ICAvKiBMUyBvciBQUyAqLwotICAgICAgcmV0dXJuKC0yKTsKLSAgICByZXR1cm4oKHVuc2lnbmVk KSgoKCp4dWYpKHVjKSkgJiAweGZmKSk7IC8qIENvbnZlcnQgVUNTLTIgdG8gYnl0ZSAqLwotfQot Ci0vKiAgYiBfIHQgbyBfIHUgIC0tICBCeXRlIHRvIFVURi04ICAqLwotLyoKLSAgQ29udmVydHMg YSBieXRlIGZyb20gdGhlIGN1cnJlbnQgdGVybWluYWwgb3IgZmlsZSBjaGFyYWN0ZXIgc2V0IHRv IFVURi04LgotICBDYWxsIHdpdGg6Ci0gICAgYy4uLi4uLi4uIFRoZSBieXRlIHRvIGJlIGNvbnZl cnRlZC4KLSAgICBidWYuLi4uLi4gUG9pbnRlciB0byBidWZmZXIgaW4gd2hpY2ggdG8gcGxhY2Ug dGhlIHJlc3VsdC4KLSAgICBidWZsZW4uLi4gTGVuZ3RoIG9mIHRoZSByZXN1bHQgYnVmZmVyLgot ICAgIHNldHNpemUuLiBUaGUgc2l6ZSBvZiB0aGUgc291cmNlIGNoYXJhY3RlciBzZXQgKDEyOCBv ciAyNTYpLgotICBSZXF1aXJlczoKLSAgICBHbG9iYWwgKCp4ZnUpKCkgdG8gcG9pbnQgdG8gdGhl IGZ1bmN0aW9uIHRvIGNvbnZlcnQgdGhlIGJ5dGUgdG8gVUNTLTIuCi0gIFJldHVybnM6Ci0gICAg LTEgaWYgdGhlIHhmdSBpcyBOVUxMOyBvdGhlcndpc2U6Ci0gICAgPjAgaW5kaWNhdGluZyB0aGUg bGVuZ3RoIChpbiBieXRlcykgb2YgdGhlIFVURi04IHN0cmluZy4KLSAgSWYgdGhlIHRyYW5zbGF0 aW9uIGZhaWxzLCB0aGUgVW5pY29kZSAiUmVwbGFjZW1lbnQgQ2hhcmFjdGVyIiBpcyByZXR1cm5l ZAotICAoMHhGRkZEIHRyYW5zbGF0ZWQgdG8gVVRGLTggPT0gMHhGRkJEKS4KLSovCi1pbnQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnl0ZSB0byBVVEYtOCAqLwotI2lm ZGVmIENLX0FOU0lDCi1iX3RvX3UoQ0hBUiBjLCBDSEFSICogYnVmLCBpbnQgYnVmbGVuLCBpbnQg c2V0c2l6ZSkKLSNlbHNlCi1iX3RvX3UoYywgYnVmLCBidWZsZW4sIHNldHNpemUpIENIQVIgYywg KiBidWY7IGludCBidWZsZW4sIHNldHNpemU7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAg ICBDSEFSICogdG1wID0gTlVMTDsKLSAgICBpbnQgaSwgY291bnQgPSAwOwotICAgIFVTSE9SVCB1 YzsKLSAgICBpZiAoIXhmdSkgewotICAgICAgICBkZWJ1ZyhGMTAwLCJiX3RvX3Ugbm8geGZ1Iiwi IiwwKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgdWMgPSBjOwotICAgIGlmICgo KHNldHNpemUgPiAxMjgpICYmIChjICYgMHg4MCkpIHx8IHNldHNpemUgPD0gMTI4KSB7Ci0gICAg ICAgIGlmICh4ZnUpICAgICAgICAgICAgICAgICAgICAgICAgLyogRkNTLXRvLVVDUyBmdW5jdGlv biAqLwotICAgICAgICAgIHVjID0gKCp4ZnUpKGMpOwotICAgIH0KLSAgICBjb3VudCA9IHVjczJf dG9fdXRmOCh1YywmdG1wKTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgIGJ1ZlswXSA9 IDB4ZWY7ICAgICAgICAgICAgICAgICAgLyogPT0gMHhGRkZEIGluIFVURi04ICovCi0gICAgICAg IGJ1ZlsxXSA9IDB4YmY7Ci0gICAgICAgIGJ1ZlsyXSA9IDB4YmQ7Ci0gICAgICAgIGJ1ZlszXSA9 ICdcMCc7Ci0gICAgICAgIHJldHVybigyKTsKLSAgICB9Ci0gICAgaWYgKGNvdW50ID49IGJ1Zmxl bikgewotICAgICAgICBkZWJ1ZyhGMTAxLCJXQVJOSU5HOiBVVEY4IGJ1ZmZlciBvdmVyZmxvdyIs IiIsY291bnQpOwotICAgICAgICBjb3VudCA9IGJ1ZmxlbiAtIDE7Ci0gICAgfQotICAgIGZvciAo aSA9IDA7IGkgPCBjb3VudDsgaSsrKSAgICAgICAgIC8qIENvcHkgdG8gcmVzdWx0IGJ1ZmZlciAq LwotICAgICAgYnVmW2ldID0gdG1wW2ldOwotICAgIGJ1ZltpXSA9ICdcMCc7Ci0gICAgcmV0dXJu KGNvdW50KTsKLX0KLQotI2lmbmRlZiBPUzIKLWludAotaXN1bmljb2RlKCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFRlbGxzIHdoZXRoZXIgdGhlIGhvc3Qgd2UgYXJlICovCi0jaWZk ZWYgQ0tfQU5TSUMgICAgICAgICAgICAgICAgICAgICAgICAgLyogcnVubmluZyBvbiBzdXBwb3J0 cyBVbmljb2RlICovCi0gICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog ZGlzcGxheSAqLwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0gICAgICAgICAgKSB7Ci0jaWZkZWYg TlQKLSAgICBleHRlcm4gaW50IHR0X3VuaWNvZGU7Ci0jaWZkZWYgS1VJCi0gICAgcmV0dXJuKHR0 X3VuaWNvZGUpOwotI2Vsc2UgLyogS1VJICovCi0gICAgaWYgKHR0X3VuaWNvZGUgJiYgIWlzV2lu OTUoKSkKLSAgICAgIHJldHVybigxKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oMCk7Ci0jZW5k aWYgLyogS1VJICovCi0jZWxzZSAvKiBOVCAqLwotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBO VCAqLwotfQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KCmRpZmYgLS1n aXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3VuaS5oIGIvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N1bmkuaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDZkZmY5Yi4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3VuaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY4ICsw LDAgQEAKLS8qICBDIEsgQyBVIE4gSSAuIEggIC0tICBVbmljb2RlL1Rlcm1pbmFsIGNoYXJhY3Rl ci1zZXQgdHJhbnNsYXRpb25zICAqLwotCi0vKgotICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDks Ci0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcg WW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5H LlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1 bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotCi0gIEF1dGhvcnM6Ci0gICAgRnJh bmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4KLSAgICAgIFRoZSBLZXJtaXQgUHJvamVjdCwg Q29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eS4KLSAgICBKZWZmcmV5IEUgQWx0bWFu IDxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgotICAgICAgU2VjdXJlIEVuZHBvaW50cyBJ bmMuLCBOZXcgWW9yayBDaXR5Ci0KLSovCi0KLS8qIFRlcm1pbmFsIGNoYXJhY3RlciBzZXRzICov Ci0KLSNpZm5kZWYgQ0tPVU5JX0gKLSNkZWZpbmUgQ0tPVU5JX0gKLSNpZmRlZiBPUzIKLSNpZm5k ZWYgQ0tPVU5JCi0jZGVmaW5lIENLT1VOSSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNl IFVOSUNPREUgZm9yIE9TLzIgZnVuY3Rpb25zICovCi0jZW5kaWYgLyogQ0tPVU5JICovCi0jaWZk ZWYgS1VJCi0jZGVmaW5lIFhfQ0tPVU5JX0lOICAgICAgICAgICAgICAgICAgICAgLyogVXNlIFVu aWNvZGUgSW5wdXQgKi8KLSNkZWZpbmUgQ0tPVU5JX09VVAotI2VuZGlmIC8qIEtVSSAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotCi0vKiBUZXJtaW5hbCBDaGFyYWN0ZXIgU2V0cyAqLwotCi0jZGVmaW5l IFRYX0FTQ0lJICAgICAgICAwICAgICAgICAgICAgICAgLyogVVMgQVNDSUkgKi8KLSNkZWZpbmUg VFhfQlJJVElTSCAgICAgIDEgICAgICAgICAgICAgICAvKiBCcml0aXNoIElTTyA2NDYgKi8KLSNk ZWZpbmUgVFhfQ05fRlJFTkNIICAgIDIgICAgICAgICAgICAgICAvKiBDYW5hZGlhbiBGcmVuY2gg TlJDICovCi0jZGVmaW5lIFRYX0NVQkFOICAgICAgICAzICAgICAgICAgICAgICAgLyogQ3ViYSAq LwotI2RlZmluZSBUWF9DWkVDSCAgICAgICAgNCAgICAgICAgICAgICAgIC8qIEN6ZWNoIFJlcHVi bGljICovCi0jZGVmaW5lIFRYX0RBTklTSCAgICAgICA1ICAgICAgICAgICAgICAgLyogRGVubWFy ayAvIE5vcndheSBJU08gNjQ2ICovCi0jZGVmaW5lIFRYX0RVVENIICAgICAgICA2ICAgICAgICAg ICAgICAgLyogRHV0Y2ggTlJDICovCi0jZGVmaW5lIFRYX0ZJTk5JU0ggICAgICA3ICAgICAgICAg ICAgICAgLyogRmlubmlzaCBOUkMgKi8KLSNkZWZpbmUgVFhfRlJFTkNIICAgICAgIDggICAgICAg ICAgICAgICAvKiBGcmVuY2ggSVNPIDY0NiAqLwotI2RlZmluZSBUWF9HRVJNQU4gICAgICAgOSAg ICAgICAgICAgICAgIC8qIEdlcm1hbiBJU08gNjQ2ICovCi0jZGVmaW5lIFRYX0hFNyAgICAgICAg IDEwICAgICAgICAgICAgICAgLyogSGVicmV3IDcgKERFQykgKi8KLSNkZWZpbmUgVFhfSFVOR0FS SUFOICAgMTEgICAgICAgICAgICAgICAvKiBIdW5nYXJpYW4gSVNPIDY0NiAqLwotI2RlZmluZSBU WF9JQ0VMQU5ESUMgICAxMiAgICAgICAgICAgICAgIC8qIEljZWxhbmRpYyBOUkMgKi8KLSNkZWZp bmUgVFhfSVRBTElBTiAgICAgMTMgICAgICAgICAgICAgICAvKiBJdGFsaWFuIElTTyA2NDYgKi8K LSNkZWZpbmUgVFhfSjIwMVIgICAgICAgMTQgICAgICAgICAgICAgICAvKiBKSVMgMDIwMSBKYXBh bmVzZSBSb21hbiAqLwotI2RlZmluZSBUWF9KMjAxSyAgICAgICAxNSAgICAgICAgICAgICAgIC8q IEpJUyAwMjAxIEthdGFrYW5hICovCi0jZGVmaW5lIFRYX0tPSTcgICAgICAgIDE2ICAgICAgICAg ICAgICAgLyogU2hvcnQgS09JICovCi0jZGVmaW5lIFRYX05PUldFR0lBTiAgIDE3ICAgICAgICAg ICAgICAgLyogRGVubWFyayAvIE5vcndheSBJU08gNjQ2ICovCi0jZGVmaW5lIFRYX1BPUlRVR1VF U0UgIDE4ICAgICAgICAgICAgICAgLyogUG9ydHVndWVzZSBJU08gNjQ2ICovCi0jZGVmaW5lIFRY X1NQQU5JU0ggICAgIDE5ICAgICAgICAgICAgICAgLyogU3BhbmlzaCBJU08gNjQ2ICovCi0jZGVm aW5lIFRYX1NXRURJU0ggICAgIDIwICAgICAgICAgICAgICAgLyogU3dlZGlzaCBJU08gNjQ2ICov Ci0jZGVmaW5lIFRYX1NXRV8yICAgICAgIDIxICAgICAgICAgICAgICAgLyogU3dlZGlzaCBmb3Ig bmFtZXMgSVNPIDY0NiAqLwotI2RlZmluZSBUWF9TV0lTUyAgICAgICAyMiAgICAgICAgICAgICAg IC8qIFN3aXNzIE5SQyAqLwotI2RlZmluZSBUWF84ODU5XzEgICAgICAyMyAgICAgICAgICAgICAg IC8qIExhdGluLTEgKi8KLSNkZWZpbmUgVFhfODg1OV8yICAgICAgMjQgICAgICAgICAgICAgICAv KiBMYXRpbi0yICovCi0jZGVmaW5lIFRYXzg4NTlfMyAgICAgIDI1ICAgICAgICAgICAgICAgLyog TGF0aW4tMyAqLwotI2RlZmluZSBUWF84ODU5XzQgICAgICAyNiAgICAgICAgICAgICAgIC8qIExh dGluLTQgKi8KLSNkZWZpbmUgVFhfODg1OV81ICAgICAgMjcgICAgICAgICAgICAgICAvKiBMYXRp bi9DeXJpbGxpYyAqLwotI2RlZmluZSBUWF84ODU5XzYgICAgICAyOCAgICAgICAgICAgICAgIC8q IExhdGluL0FyYWJpYyAqLwotI2RlZmluZSBUWF84ODU5XzcgICAgICAyOSAgICAgICAgICAgICAg IC8qIExhdGluL0dyZWVrICovCi0jZGVmaW5lIFRYXzg4NTlfOCAgICAgIDMwICAgICAgICAgICAg ICAgLyogTGF0aW4vSGVicmV3ICovCi0jZGVmaW5lIFRYXzg4NTlfOSAgICAgIDMxICAgICAgICAg ICAgICAgLyogTGF0aW4tNSAqLwotI2RlZmluZSBUWF84ODU5XzEwICAgICAzMiAgICAgICAgICAg ICAgIC8qIExhdGluLTYgKi8KLQotI2RlZmluZSBUWF9LT0k4ICAgICAgICAzMyAgICAgICAgICAg ICAgIC8qIEdPU1QgMTk3NjgtNzQgS09JLTggKi8KLQotI2RlZmluZSBUWF9KSVM3ICAgICAgICAz NCAgICAgICAgICAgICAgIC8qIEpJUy03ICovCi0jZGVmaW5lIFRYX1NISklTICAgICAgIDM1ICAg ICAgICAgICAgICAgLyogU2hpZnQgSklTICovCi0jZGVmaW5lIFRYX0pFVUMgICAgICAgIDM2ICAg ICAgICAgICAgICAgLyogSmFwYW5lc2UgRVVDICovCi0jZGVmaW5lIFRYX0pERUMgICAgICAgIDM3 ICAgICAgICAgICAgICAgLyogSmFwYW5lc2UgREVDIEthbmppICovCi0KLSNkZWZpbmUgVFhfREVD TUNTICAgICAgMzggICAgICAgICAgICAgICAvKiBERUMgTUNTICovCi0jZGVmaW5lIFRYX05FWFQg ICAgICAgIDM5ICAgICAgICAgICAgICAgLyogTmVYVCAqLwotI2RlZmluZSBUWF9ER0kgICAgICAg ICA0MCAgICAgICAgICAgICAgIC8qIERhdGEgR2VuZXJhbCBJbnRlcm5hdGlvbmFsICovCi0jZGVm aW5lIFRYX01BQ0wxICAgICAgIDQxICAgICAgICAgICAgICAgLyogTWFjaW50b3NoIExhdGluLTEg Ki8KLSNkZWZpbmUgVFhfSFBSOCAgICAgICAgNDIgICAgICAgICAgICAgICAvKiBIUCBSb21hbiA4 ICovCi0KLS8qIENvZGUgcGFnZXMgKi8KLQotI2RlZmluZSBUWF9DUDQzNyAgICAgICA0MyAgICAg ICAgICAgICAgIC8qIE9yaWdpbmFsICovCi0jZGVmaW5lIFRYX0NQODUwICAgICAgIDQ0ICAgICAg ICAgICAgICAgLyogTXVsdGluYXRpb25hbCAoV2VzdGVybiBFdXJvcGUpICovCi0jZGVmaW5lIFRY X0NQODUyICAgICAgIDQ1ICAgICAgICAgICAgICAgLyogRWFzdGVybiBFdXJvcGUgKi8KLSNkZWZp bmUgVFhfQ1A4NTcgICAgICAgNDYgICAgICAgICAgICAgICAvKiBUdXJrZXkgKi8KLSNkZWZpbmUg VFhfQ1A4NjIgICAgICAgNDcgICAgICAgICAgICAgICAvKiBIZWJyZXcgKi8KLSNkZWZpbmUgVFhf Q1A4NjQgICAgICAgNDggICAgICAgICAgICAgICAvKiBBcmFiaWMgKi8KLSNkZWZpbmUgVFhfQ1A4 NjYgICAgICAgNDkgICAgICAgICAgICAgICAvKiBDeXJpbGxpYyAqLwotI2RlZmluZSBUWF9DUDg2 OSAgICAgICA1MCAgICAgICAgICAgICAgIC8qIEdyZWVrICovCi0KLSNkZWZpbmUgVFhfREVDU1BF QyAgICAgNTEgICAgICAgICAgICAgICAvKiBERUMgU3BlY2lhbCBHcmFwaGljcyAqLwotI2RlZmlu ZSBUWF9ERUNURUNIICAgICA1MiAgICAgICAgICAgICAgIC8qIERFQyBUZWNobmljYWwgKi8KLSNk ZWZpbmUgVFhfQzBQSUNUICAgICAgNTMgICAgICAgICAgICAgICAvKiBDMCBEaXNwbGF5IENvbnRy b2xzICovCi0jZGVmaW5lIFRYX0MxUElDVCAgICAgIDU0ICAgICAgICAgICAgICAgLyogQzEgRGlz cGxheSBDb250cm9scyAqLwotI2RlZmluZSBUWF9JQk1DMEdSUEggICA1NSAgICAgICAgICAgICAg IC8qIElCTSBDMCBHcmFwaGljcyAoc21pbGV5cykgKi8KLSNkZWZpbmUgVFhfSDE5R1JBUEggICAg NTYgICAgICAgICAgICAgICAvKiBIZWF0aC9aZW5pdGggMTkgR3JhcGhpY3MgKi8KLSNkZWZpbmUg VFhfVFZJR1JBUEggICAgNTcgICAgICAgICAgICAgICAvKiBUZWxldmlkZW8gR3JhcGhpY3MgKi8K LSNkZWZpbmUgVFhfV1lTRTYwR19OICAgNTggICAgICAgICAgICAgICAvKiBXeXNlIDYwIE5hdGl2 ZSBNb2RlIEdyYXBoaWNzICovCi0jZGVmaW5lIFRYX1dZU0U2MEdfMSAgIDU5ICAgICAgICAgICAg ICAgLyogV3lzZSA2MCBHcmFwaGljcyAxICovCi0jZGVmaW5lIFRYX1dZU0U2MEdfMiAgIDYwICAg ICAgICAgICAgICAgLyogV3lzZSA2MCBHcmFwaGljcyAyICovCi0jZGVmaW5lIFRYX1dZU0U2MEdf MyAgIDYxICAgICAgICAgICAgICAgLyogV3lzZSA2MCBHcmFwaGljcyAzICovCi0KLS8qIE5ldyBv bmVzIHRoYXQgY2FtZSB0b28gbGF0ZSBmb3IgdGhlIG5pY2UgZ3JvdXBpbmcuLi4gKi8KLQotI2Rl ZmluZSBUWF9FTE9UOTI3ICAgICA2MiAgICAgICAgICAgICAgIC8qIEdyZWVrIEVMT1QgOTI3ICov Ci0jZGVmaW5lIFRYX0RHUENHUlBIICAgIDYzICAgICAgICAgICAgICAgLyogREcgUEMgR3JhcGhp Y3MgKi8KLSNkZWZpbmUgVFhfREdMREdSUEggICAgNjQgICAgICAgICAgICAgICAvKiBERyBMaW5l IERyYXdpbmcgR3JhcGhpY3MgKi8KLSNkZWZpbmUgVFhfREdXUEdSUEggICAgNjUgICAgICAgICAg ICAgICAvKiBERyBXb3JkIFByb2Nlc3NpbmcgKGV0YykgR3JhcGhpY3MgKi8KLSNkZWZpbmUgVFhf SFBMSU5FICAgICAgNjYgICAgICAgICAgICAgICAvKiBIUCBMaW5lIERyYXdpbmcgKi8KLSNkZWZp bmUgVFhfSFBNQVRIICAgICAgNjcgICAgICAgICAgICAgICAvKiBIUCBNYXRoL1RlY2huaWNhbCAq LwotI2RlZmluZSBUWF9RTlhHUlBIICAgICA2OCAgICAgICAgICAgICAgIC8qIFFOWCBHcmFwaGlj cyAqLwotCi0vKiBTaWVtZW5zIE5peGRvcmYgY2hhcmFjdGVyIHNldHMgKi8KLQotI2RlZmluZSBU WF9TTklCUkFDSyAgICA2OSAgICAgICAgICAgICAgIC8qIFNOSSA5NzgwMSBCcmFja2V0cyAqLwot I2RlZmluZSBUWF9TTklFVVJPICAgICA3MCAgICAgICAgICAgICAgIC8qIFNOSSA5NzgwMSBFdXJv ICAqLwotI2RlZmluZSBUWF9TTklGQUNFVCAgICA3MSAgICAgICAgICAgICAgIC8qIFNOSSA5Nzgw MSBGYWNldCAqLwotI2RlZmluZSBUWF9TTklJQk0gICAgICA3MiAgICAgICAgICAgICAgIC8qIFNO SSA5NzgwMSAiSUJNIiAqLwotI2RlZmluZSBUWF9TTklCTEFOSyAgICA3MyAgICAgICAgICAgICAg IC8qIFNOSSA5NzgwMSBCbGFua3MgKi8KLQotLyogV2luZG93cyBDb2RlIHBhZ2VzICovCi0KLSNk ZWZpbmUgVFhfQ1AxMjUyICAgICAgNzQgICAgICAgICAgICAgICAvKiBMYXRpbi0xIFdpbmRvd3Mg Ki8KLSNkZWZpbmUgVFhfQ1AxMjUwICAgICAgNzUgICAgICAgICAgICAgICAvKiBMYXRpbi0yIFdp bmRvd3MgKi8KLSNkZWZpbmUgVFhfQ1AxMjUxICAgICAgNzYgICAgICAgICAgICAgICAvKiBDeXJp bGxpYyBXaW5kb3dzICovCi0jZGVmaW5lIFRYX0NQMTI1MyAgICAgIDc3ICAgICAgICAgICAgICAg LyogR3JlZWNlIFdpbmRvd3MgKi8KLSNkZWZpbmUgVFhfQ1AxMjU0ICAgICAgNzggICAgICAgICAg ICAgICAvKiBUdXJrZXkgV2luZG93cyAqLwotI2RlZmluZSBUWF9DUDEyNTcgICAgICA3OSAgICAg ICAgICAgICAgIC8qIExhdGluLTQgV2luZG93cyAqLwotCi0jZGVmaW5lIFRYX0NQODU2ICAgICAg IDgwICAgICAgICAgICAgICAgLyogQnVsZ2FyaWEgQ1A4NTYgKERBVEVDUyBMdGQpICovCi0jZGVm aW5lIFRYX0NQODU1ICAgICAgIDgxCi0jZGVmaW5lIFRYX0NQODE5ICAgICAgIDgyICAgICAgICAg ICAgICAgLyogU2FtZSBhcyBJU08gODg1OS0xICovCi0jZGVmaW5lIFRYX0NQOTEyICAgICAgIDgz ICAgICAgICAgICAgICAgLyogU2FtZSBhcyBJU08gODg1OS0yICovCi0jZGVmaW5lIFRYX0NQOTEz ICAgICAgIDg0ICAgICAgICAgICAgICAgLyogU2FtZSBhcyBJU08gODg1OS0zICovCi0jZGVmaW5l IFRYX0NQOTE0ICAgICAgIDg1ICAgICAgICAgICAgICAgLyogU2FtZSBhcyBJU08gODg1OS00ICov Ci0jZGVmaW5lIFRYX0NQOTE1ICAgICAgIDg2ICAgICAgICAgICAgICAgLyogU2FtZSBhcyBJU08g ODg1OS01ICovCi0jZGVmaW5lIFRYX0NQMTA4OSAgICAgIDg3ICAgICAgICAgICAgICAgLyogU2Ft ZSBhcyBJU08gODg1OS02ICovCi0jZGVmaW5lIFRYX0NQODEzICAgICAgIDg4ICAgICAgICAgICAg ICAgLyogU2FtZSBhcyBJU08gODg1OS03ICovCi0jZGVmaW5lIFRYX0NQOTE2ICAgICAgIDg5ICAg ICAgICAgICAgICAgLyogU2FtZSBhcyBJU08gODg1OS04ICovCi0jZGVmaW5lIFRYX0NQOTIwICAg ICAgIDkwICAgICAgICAgICAgICAgLyogU2FtZSBhcyBJU08gODg1OS05ICovCi0jZGVmaW5lIFRY X0NQMTA1MSAgICAgIDkxICAgICAgICAgICAgICAgLyogU2FtZSBhcyBIUCBSb21hbiA4ICovCi0j ZGVmaW5lIFRYX0NQODU4ICAgICAgIDkyICAgICAgICAgICAgICAgLyogTXVsdGluYXRpb25hbCAo Vy4gRXVyb3BlKSB3L0V1cm8gKi8KLSNkZWZpbmUgVFhfODg1OV8xNSAgICAgOTMgICAgICAgICAg ICAgICAvKiBMYXRpbi05ICovCi0jZGVmaW5lIFRYX0NQOTIzICAgICAgIDk0ICAgICAgICAgICAg ICAgLyogU2FtZSBhcyBJU08gODg1OS0xNSAqLwotCi0jZGVmaW5lIFRYX0VMT1Q5MjggICAgIDk1 ICAgICAgICAgICAgICAgLyogU2FtZSBhcyBJU08gODg1OS03ICovCi0jZGVmaW5lIFRYX0NQMTAw MDAgICAgIDk2ICAgICAgICAgICAgICAgLyogU2FtZSBhcyBvcmlnaW5hbCBBcHBsZSBRdWlja2Ry YXcgKi8KLSNkZWZpbmUgVFhfQ1AzNyAgICAgICAgOTcgICAgICAgICAgICAgICAvKiBFQkNESUMg Ki8KLSNkZWZpbmUgVFhfQ1AxMjU1ICAgICAgOTggICAgICAgICAgICAgICAvKiBJc3JhZWwgV2lu ZG93cyAqLwotI2RlZmluZSBUWF9DUDEyNTYgICAgICA5OSAgICAgICAgICAgICAgIC8qIEFyYWJp YyBXaW5kb3dzICovCi0jZGVmaW5lIFRYX0NQMTI1OCAgICAgMTAwICAgICAgICAgICAgICAgLyog VmlldCBOYW0gV2luZG93cyAqLwotI2RlZmluZSBUWF9NQVpPVklBICAgIDEwMQotI2RlZmluZSBU WF9UUkFOU1AgICAgIDEwMiAgICAgICAgICAgICAgIC8qIFRyYW5zcGFyZW50IC0gbm8gdHJhbnNs YXRpb24gKi8KLSNkZWZpbmUgVFhfSFoxNTAwICAgICAxMDMgICAgICAgICAgICAgICAvKiBIYXpl bHRpbmUgMTUwMCBncmFwaGljcyBzZXQgKi8KLSNkZWZpbmUgVFhfS09JOFIgICAgICAxMDQgICAg ICAgICAgICAgICAvKiBLT0k4UiAtIFJ1c3NpYW4gKi8KLSNkZWZpbmUgVFhfS09JOFUgICAgICAx MDUgICAgICAgICAgICAgICAvKiBLT0k4VSAtIFVrcmFpbmlhbiAqLwotI2RlZmluZSBUWF9BUEwx ICAgICAgIDEwNiAgICAgICAgICAgICAgIC8qIEFQTCBJU08gSVIgNjggKi8KLSNkZWZpbmUgVFhf QVBMMiAgICAgICAxMDcgICAgICAgICAgICAgICAvKiBEeWFkaWMgU3lzdGVtcyBJbmMgQVBMICov Ci0jZGVmaW5lIFRYX0FQTDMgICAgICAgMTA4ICAgICAgICAgICAgICAgLyogQVBMLVBsdXMgKEFQ TC0yMDAwKSAqLwotI2RlZmluZSBUWF9BUEw0ICAgICAgIDEwOSAgICAgICAgICAgICAgIC8qIElC TSBBUEwvMiAqLwotI2RlZmluZSBUWF9BUEw1ICAgICAgIDExMCAgICAgICAgICAgICAgIC8qIEFQ TC0yNzQxICovCi0KLSNkZWZpbmUgTUFYVFhTRVRTICAgICAxMTEgICAgICAgICAgICAgICAvKiBO dW1iZXIgb2YgdGVybWluYWwgY2hhcmFjdGVyIHNldHMgKi8KLQotLyogVGhlIGZvbGxvd2luZyBh cmUgbm90IGltcGxlbWVudGVkIHlldCAqLwotLyogVVRGLTggaXMgc3VwcG9ydGVkIGFzIGEgc3Bl Y2lhbCBtb2RlIGluIEtlcm1pdCA5NSAoc2VlIHV0ZjggZmxhZykgKi8KLQotI2RlZmluZSBUWF9V VEY3ICAgICAgIDEyOAotI2RlZmluZSBUWF9VVEY4ICAgICAgIDEyOQotCi0jZGVmaW5lIFRYX0hF WEJZVEVTICAgMjQyICAgICAgICAgICAgICAgLyogSGV4IGJ5dGVzICovCi0jZGVmaW5lIFRYX0RF QlVHICAgICAgMjQzICAgICAgICAgICAgICAgLyogRGVidWdnaW5nIGJ1dCBub3QgaGV4IGJ5dGVz ICovCi0KLS8qIFRoZXNlIGFyZSBhY3R1YWxseSB1c2VkICovCi0KLSNkZWZpbmUgVFhfVU5ERUYg ICAgICAyNTUgICAgICAgICAgICAgICAvKiBVbmtub3duIGNoYXJhY3Rlci1zZXQgKi8KLQotLyog RmxhZyBiaXQgdmFsdWVzICovCi0KLSNkZWZpbmUgWDJVX1NURCAgIDEgICAgICAgICAgICAgICAg ICAgICAvKiBIYXMgc3RhbmRhcmQgSVNPIDQ4NzMgbGF5b3V0ICovCi0jZGVmaW5lIFgyVV9JU08g ICAyICAgICAgICAgICAgICAgICAgICAgLyogSVNPIHN0YW5kYXJkIGNoYXJhY3RlciBzZXQgKi8K LSNkZWZpbmUgWDJVX0pJUyAgIDQgICAgICAgICAgICAgICAgICAgICAvKiBKYXBhbiBJbmR1c3Ry aWFsIFN0YW5kYXJkICovCi0jZGVmaW5lIFgyVV9DUCAgICA4ICAgICAgICAgICAgICAgICAgICAg LyogUEMgQ29kZSBQYWdlICovCi0jZGVmaW5lIFgyVV9ERUMgIDE2ICAgICAgICAgICAgICAgICAg ICAgLyogREVDIFByaXZhdGUgY2hhcmFjdGVyIHNldCAqLwotI2RlZmluZSBYMlVfQ1hHICAzMiAg ICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgY29kZXMgdXNlZCBmb3IgZ3JhcGhpY3MgKi8K LQotc3RydWN0IHhfdG9fdW5pY29kZSB7Ci0gICAgaW50IHNpemU7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogOTQsIDk2LCAxMjgsIG9yIG90aGVyICovCi0gICAgaW50IG9mZnNldDsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogMCwgMzIsIDMzLCAxMjgsIDE2MCwgLi4uICovCi0gICAg aW50IGZsYWdzOwotICAgIGludCBmYW1pbHk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExh bmd1YWdlIGZhbWlseSwgd3JpdGluZyBzeXN0ZW0gKi8KLSAgICBjaGFyICoga2V5d2Q7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIG5hbWUgKi8KLSAgICBjaGFyICogbmFtZTsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBEZXNjcmlwdGl2ZSBuYW1lICovCi0gICAgaW50IGNvZGU7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVNPIHJlZyBudW1iZXIgaWYgU3RhbmRhcmQg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDUCBudW1iZXIg aWYgQ29kZS1wYWdlLCBldGMuICovCi0gICAgY2hhciAqIGZpbmFsOyAgICAgICAgICAgICAgICAg ICAgICAgLyogRXNjIHNlcSBmaW5hbCBjaGFyKHMpIChJU08sIERFQykgKi8KLSAgICB1bnNpZ25l ZCBzaG9ydCBtYXBbMjU2XTsgICAgICAgICAgICAvKiBNYXBwaW5nIHRhYmxlICovCi19OwotCi1l eHRlcm4gc3RydWN0IGtleXRhYiB0eHJ0YWJbXTsKLWV4dGVybiBpbnQgbnR4cnRhYjsKLQotI2lm bmRlZiBOVUxMCi0jZGVmaW5lIE5VTEwgKGNoYXIgKikwCi0jZW5kaWYgLyogTlVMTCAqLwotCi0j aWZuZGVmIFVTSE9SVAotI2RlZmluZSBVU0hPUlQgdW5zaWduZWQgc2hvcnQKLSNlbmRpZiAvKiBV U0hPUlQgKi8KLQotI2lmbmRlZiBVTE9ORwotI2RlZmluZSBVTE9ORyB1bnNpZ25lZCBsb25nCi0j ZW5kaWYgLyogVUxPTkcgKi8KLQotI2lmbmRlZiBDSEFSCi0jZGVmaW5lIENIQVIgdW5zaWduZWQg Y2hhcgotI2VuZGlmIC8qIENIQVIgKi8KLQotI2lmZGVmIENLX0FOU0lDCi1leHRlcm4gVVNIT1JU ICgqeGxfdVtNQVhUWFNFVFMrMV0pKENIQVIpOyAvKiBCbGFoLXRvLVVuaWNvZGUgZnVuY3Rpb25z ICovCi1leHRlcm4gaW50ICgqeGxfdHhbTUFYVFhTRVRTKzFdKShVU0hPUlQpOyAvKiBVbmljb2Rl LXRvLUJsYWggZnVuY3Rpb25zICovCi0jZWxzZQotZXh0ZXJuIFVTSE9SVCAoKnhsX3VbTUFYVFhT RVRTKzFdKSgpOwotZXh0ZXJuIGludCAoKnhsX3R4W01BWFRYU0VUUysxXSkoKTsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotZXh0ZXJuIHN0cnVjdCB4X3RvX3VuaWNvZGUgKiB0eHJpbmZvW01BWFRY U0VUUysxXTsKLQotX1BST1RPVFlQKGludCBpc3VuaWNvZGUsICh2b2lkKSk7Ci1fUFJPVE9UWVAo aW50IHV0ZjhfdG9fdWNzMiwgKENIQVIsIFVTSE9SVCAqKikpOwotX1BST1RPVFlQKGludCB1Y3My X3RvX3V0ZjgsIChVU0hPUlQsIENIQVIgKiopKTsKLV9QUk9UT1RZUChpbnQgdHhfY3BzdWIsIChV U0hPUlQpKTsKLV9QUk9UT1RZUChpbnQgdV90b19iLCAoQ0hBUikgKTsKLV9QUk9UT1RZUChpbnQg dV90b19iMiwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoaW50IGJfdG9fdSwgKENIQVIsIENIQVIgKiwg aW50LCBpbnQpICk7Ci0KLSNpZmRlZiBLQU5KSQotX1BST1RPVFlQKFVTSE9SVCBzal90b191biwg KFVTSE9SVCkgKTsgIC8qIFNoaWZ0LUpJUyB0byBVbmljb2RlICovCi1fUFJPVE9UWVAoVVNIT1JU IHVuX3RvX3NqLCAoVVNIT1JUKSApOyAgLyogVW5pY29kZSB0byBTaGlmdC1KSVMgKi8KLSNlbmRp ZiAvKiBLQU5KSSAqLwotCi0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLV9pbmxpbmUKLSNlbHNlCi1f SW5saW5lCi0jZW5kaWYgLyogTlQgKi8KLWludAotaXN1bmljb2RlKAotI2lmZGVmIENLX0FOU0lD Ci0gICAgICAgICAgdm9pZAotI2VuZGlmIC8qIENLX0FOU0lDICovCi0gICAgICAgICAgKSB7Ci0g ICAgZXh0ZXJuIGludCB0dF91bmljb2RlOwotI2lmZGVmIE5UCi0jaWZkZWYgS1VJCi0gICAgcmV0 dXJuKHR0X3VuaWNvZGUpOwotI2Vsc2UgLyogS1VJICovCi0gICAgaWYgKHR0X3VuaWNvZGUgJiYg IWlzV2luOTUoKSkKLSAgICAgIHJldHVybigxKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oMCk7 Ci0jZW5kaWYgLyogS1VJICovCi0jZWxzZSAvKiBOVCAqLwotICAgIHJldHVybigwKTsKLSNlbmRp ZiAvKiBOVCAqLwotfQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENLT1VOSV9IICovCgpk aWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N4bGEu aCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjeGxhLmgKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MDNjODEuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N4bGEuaAorKysgL2Rldi9udWxsCkBAIC0x LDMzNyArMCwwIEBACi0vKgotICBGaWxlIENLQ1hMQS5ICi0KLSAgU3lzdGVtLWluZGVwZW5kZW50 IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gaGVhZGVyIGZpbGUgZm9yIEMtS2VybWl0LgotKi8K LQotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKLSAgVGhl IEtlcm1pdCBQcm9qZWN0IC0gQ29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eS4KLQot ICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDksCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5p dmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVk LiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdo dCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Np b25zLgotKi8KLS8qCi0gIE5PVEU6Ci0gIElTTyAyMDQgaXMgTGF0aW4tMSArIEV1cm8uCi0gIElT TyAyMDUgaXMgTGF0aW4tNCArIEV1cm8uCi0gIElTTyAyMDYgaXMgTGF0aW4tNyArIEV1cm8uCi0q LwotI2lmbmRlZiBDS0NYTEFfSCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEd1YXJkIGFnYWlu c3QgbXVsdGlwbGUgaW5jbHVzaW9uICovCi0jZGVmaW5lIENLQ1hMQV9ICi0KLSNpZm5kZWYgS0FO SkkgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTeXN0ZW1zIHN1cHBvcnRpbmcgS2Fuamkg Ki8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgS0FOSkkKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAv KiBLQU5KSSAqLwotCi0jaWZkZWYgTk9LQU5KSSAgICAgICAgICAgICAgICAgICAgICAgICAgLyog RXhjZXB0IGlmIE5PS0FOSkkgaXMgZGVmaW5lZC4gKi8KLSNpZmRlZiBLQU5KSQotI3VuZGVmIEtB TkpJCi0jZW5kaWYgLyogS0FOSkkgKi8KLSNlbmRpZiAvKiBOT0tBTkpJICovCi0KLSNpZm5kZWYg Tk9VTklDT0RFCi0jaWZuZGVmIFVOSUNPREUgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5p Y29kZSBzdXBwb3J0ICovCi0jaWZkZWYgT1MyT1JVTklYICAgICAgICAgICAgICAgICAgICAgICAg LyogT25seSBmb3IgSzk1LCBVTklYLCBWTVMsLi4uICovCi0jZGVmaW5lIFVOSUNPREUKLSNlbHNl Ci0jaWZkZWYgVk1TCi0jZGVmaW5lIFVOSUNPREUKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAv KiBPUzJPUlVOSVggKi8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0jZW5kaWYgLyogTk9VTklDT0RF ICovCi0KLSNkZWZpbmUgWExBX05PTkUgICAgMCAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2xh dGlvbiB0eXBlcyAtIG5vbmUgKi8KLSNkZWZpbmUgWExBX0JZVEUgICAgMSAgICAgICAgICAgICAg ICAgICAvKiBCeXRlLWZvci1ieXRlICovCi0jZGVmaW5lIFhMQV9KQVBBTiAgIDIgICAgICAgICAg ICAgICAgICAgLyogSmFwYW5lc2UgKi8KLSNkZWZpbmUgWExBX1VOSUNPREUgMyAgICAgICAgICAg ICAgICAgICAvKiBVbmljb2RlICovCi0KLSNpZm5kZWYgVU5JT1JLQU5KSSAgICAgICAgICAgICAg ICAgICAgICAvKiBVbmljb2RlIE9SIEthbmppICovCi0jaWZkZWYgVU5JQ09ERSAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogaS5lLiBzb21lIHN1cHBvcnQgZm9yICovCi0jZGVmaW5lIFVOSU9S S0FOSkkgICAgICAgICAgICAgICAgICAgICAgLyogbXVsdGlieXRlIGNoYXJhY3RlciBzZXRzICov Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotI2lmZGVmIEtBTkpJCi0jZGVmaW5lIFVOSU9SS0FOSkkK LSNlbmRpZiAvKiBLQU5KSSAqLwotI2VuZGlmIC8qIFVOSU9SS0FOSkkgKi8KLS8qCi0gICBEaXNh YmxlIGFsbCBzdXBwb3J0IGZvciBhbGwgY2xhc3NlcyBvZiBjaGFyYWN0ZXIgc2V0cwotICAgaWYg Tk9DU0VUUyBpcyBkZWZpbmVkLgotKi8KLSNpZmRlZiBOT0NTRVRTCi0KLSNpZmRlZiBDS09VTkkK LSN1bmRlZiBDS09VTkkKLSNlbmRpZiAvKiBDS09VTkkgKi8KLSNpZmRlZiBLQU5KSQotI3VuZGVm IEtBTkpJCi0jZW5kaWYgLyogS0FOSkkgKi8KLSNpZmRlZiBDWVJJTExJQwotI3VuZGVmIENZUklM TElDCi0jZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSNpZmRlZiBMQVRJTjIKLSN1bmRlZiBMQVRJTjIK LSNlbmRpZiAvKiBMQVRJTjIgKi8KLSNpZmRlZiBIRUJSRVcKLSN1bmRlZiBIRUJSRVcKLSNlbmRp ZiAvKiBIRUJSRVcgKi8KLSNpZmRlZiBVTklDT0RFCi0jdW5kZWYgVU5JQ09ERQotI2VuZGlmIC8q IFVOSUNPREUgKi8KLSNpZm5kZWYgTk9VTklDT0RFCi0jZGVmaW5lIE5PVU5JQ09ERQotI2VuZGlm CS8qIE5PVU5JQ09ERSAqLwotCi0jZWxzZSAvKiBOb3QgTk9DU0VUUyAtIFJlc3Qgb2YgdGhpcyBm aWxlLi4uICovCi0KLSNpZmRlZiBOT1VOSUNPREUgICAgICAgICAgICAgICAgICAgICAgICAvKiBV bmljb2RlICovCi0jaWZkZWYgVU5JQ09ERQotI3VuZGVmIFVOSUNPREUKLSNlbmRpZiAvKiBVTklD T0RFICovCi0jZW5kaWYgLyogTk9VTklDT0RFICovCi0KLSNpZmRlZiBVTklDT0RFCi0jaWZkZWYg T1MyCi0jaWZuZGVmIENLT1VOSQotI2RlZmluZSBDS09VTkkgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNwZWNpYWwgVW5pY29kZSBmZWF0dXJlcyBmb3IgSzk1ICovCi0jZW5kaWYgLyogQ0tP VU5JICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0jaWZuZGVm IE9TMgotI2lmZGVmIENLT1VOSQotI3VuZGVmIENLT1VOSQotI2VuZGlmIC8qIENLT1VOSSAqLwot I2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIE5PTEFUSU4yICAgICAgICAgICAgICAgICAgICAg ICAgLyogSWYgdGhleSBkaWRuJ3Qgc2F5ICJubyBMYXRpbi0yIiAqLwotI2lmbmRlZiBMQVRJTjIg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZW4gaWYgTEFUSU4yIGlzbid0IGFscmVhZHkg Ki8KLSNkZWZpbmUgTEFUSU4yICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZpbmVkLCBk ZWZpbmUgaXQuICovCi0jZW5kaWYgLyogTEFUSU4yICovCi0jZW5kaWYgLyogTk9MQVRJTjIgKi8K LQotI2lmZGVmIE5PQ1lSSUxMSUMgICAgICAgICAgICAgICAgICAgICAgIC8qIChzcGVsbGluZyB2 YXJpYW50Li4uKSAqLwotI2lmbmRlZiBOT0NZUklMCi0jZGVmaW5lIE5PQ1lSSUwKLSNlbmRpZiAv KiBOT0NZUklMICovCi0jZW5kaWYgLyogTk9DWVJJTExJQyAqLwotCi0jaWZuZGVmIE5PQ1lSSUwg ICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhleSBkaWRuJ3Qgc2F5ICJubyBDeXJpbGxp YyIgKi8KLSNpZm5kZWYgQ1lSSUxMSUMgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVuIGlm IENZUklMTElDIGlzbid0IGFscmVhZHkgKi8KLSNkZWZpbmUgQ1lSSUxMSUMgICAgICAgICAgICAg ICAgICAgICAgICAvKiBkZWZpbmVkLCBkZWZpbmUgaXQuICovCi0jZW5kaWYgLyogQ1lSSUxMSUMg Ki8KLSNlbmRpZiAvKiBOT0NZUklMICovCi0KLSNpZm5kZWYgTk9IRUJSRVcgICAgICAgICAgICAg ICAgICAgICAgICAvKiBJZiB0aGV5IGRpZG4ndCBzYXkgIm5vIEhlYnJldyIgKi8KLSNpZm5kZWYg SEVCUkVXICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVuIGlmIEhFQlJFVyBpc24ndCBh bHJlYWR5ICovCi0jZGVmaW5lIEhFQlJFVyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVm aW5lZCwgZGVmaW5lIGl0LiAqLwotI2VuZGlmIC8qIEhFQlJFVyAqLwotI2VuZGlmIC8qIE5PSEVC UkVXICovCi0KLSNpZm5kZWYgTk9HUkVFSyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBu b3Qgbm8gR3JlZWsgKi8KLSNpZm5kZWYgR1JFRUsgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0aGVuIGlmIEdSRUVLIGlzbid0IGFscmVhZHkgKi8KLSNkZWZpbmUgR1JFRUsgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBkZWZpbmVkLCBkZWZpbmUgaXQuICovCi0jZW5kaWYgLyogR1JF RUsgKi8KLSNlbmRpZiAvKiBOT0dSRUVLICovCi0KLSNpZm5kZWYgTk9LQU5KSSAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBJZiBub3Qgbm8gS2FuamkgKi8KLSNpZm5kZWYgS0FOSkkgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0aGVuIGlmIEtBTkpJIGlzbid0IGFscmVhZHkgKi8KLSNk ZWZpbmUgS0FOSkkgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZpbmVkLCBkZWZpbmUg aXQuICovCi0jZW5kaWYgLyogS0FOSkkgKi8KLSNlbmRpZiAvKiBOT0tBTkpJICovCi0KLS8qIEZp bGUgY2tjeGxhLmggLS0gQ2hhcmFjdGVyLXNldC1yZWxhdGVkIGRlZmluaXRpb25zLCBzeXN0ZW0g aW5kZXBlbmRlbnQgKi8KLQotLyogQ29kZXMgZm9yIEtlcm1pdCBUcmFuc2ZlciBTeW50YXggTGV2 ZWwgKG9ic29sZXRlKSAqLwotCi0jZGVmaW5lIFRTX0wwIDAgICAgICAgICAgLyogTGV2ZWwgMCAo VHJhbnNwYXJlbnQpICovCi0jZGVmaW5lIFRTX0wxIDEgICAgICAgICAgLyogTGV2ZWwgMSAob25l IHN0YW5kYXJkIGNoYXJhY3RlciBzZXQpICovCi0jZGVmaW5lIFRTX0wyIDIgICAgICAgICAgLyog TGV2ZWwgMiAobXVsdGlwbGUgY2hhcmFjdGVyIHNldHMgaW4gc2FtZSBmaWxlKSAqLwotCi0jZGVm aW5lIFVOSyA2MyAgICAgICAgICAgLyogU3ltYm9sIHRvIHVzZSBmb3IgdW5rbm93biBjaGFyYWN0 ZXIgKDYzID0gPykgKi8KLQotLyoKLSAgQ29kZXMgZm9yIHRoZSBiYXNlIGFscGhhYmV0IG9mIGEg Z2l2ZW4gY2hhcmFjdGVyIHNldC4KLSAgVGhlc2UgYXJlIGFzc2lnbmVkIGluIHJvdWdobHkgSVNP IDg4NTkgb3JkZXIuCi0gIChFYWNoIGlzIGFzc3VtZWQgdG8gaW5jbHVkZSBBU0NJSS9Sb21hbi4p Ci0qLwotI2RlZmluZSBBTF9VTklWICAgIDAgICAgICAgICAgICAgICAgICAgIC8qIFVuaXZlcnNh bCAobGlrZSBJU08gMTA2NDYpICovCi0jZGVmaW5lIEFMX1JPTUFOICAgMSAgICAgICAgICAgICAg ICAgICAgLyogUm9tYW4gKExhdGluKSBhbHBoYWJldCAqLwotI2RlZmluZSBBTF9DWVJJTCAgIDIg ICAgICAgICAgICAgICAgICAgIC8qIEN5cmlsbGljIGFscGhhYmV0ICovCi0jZGVmaW5lIEFMX0FS QUJJQyAgMyAgICAgICAgICAgICAgICAgICAgLyogQXJhYmljICovCi0jZGVmaW5lIEFMX0dSRUVL ICAgNCAgICAgICAgICAgICAgICAgICAgLyogR3JlZWsgKi8KLSNkZWZpbmUgQUxfSEVCUkVXICA1 ICAgICAgICAgICAgICAgICAgICAvKiBIZWJyZXcgKi8KLSNkZWZpbmUgQUxfS0FOQSAgICA2ICAg ICAgICAgICAgICAgICAgICAvKiBKYXBhbmVzZSBLYXRha2FuYSAqLwotI2RlZmluZSBBTF9KQVBB TiAgIDcgICAgICAgICAgICAgICAgICAgIC8qIEphcGFuZXNlIEthdGFrYW5hK0thbmppIGlkZW9n cmFtcyAqLwotI2RlZmluZSBBTF9IQU4gICAgIDggICAgICAgICAgICAgICAgICAgIC8qIENoaW5l c2UvSmFwYW5lc2UvS29yZWFuIGlkZW9ncmFtcyAqLwotI2RlZmluZSBBTF9JTkRJQSAgIDkgICAg ICAgICAgICAgICAgICAgIC8qIEluZGlhbiBzY3JpcHRzIChJU0NJSSkgKi8KLSNkZWZpbmUgQUxf VklFVCAgIDEwICAgICAgICAgICAgICAgICAgICAvKiBWaWV0bmFtZXNlIChWSVNDSUkpICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWRkIG1vcmUgaGVyZS4u LiAqLwotI2RlZmluZSBBTF9VTksgICA5OTkgICAgICAgICAgICAgICAgICAgIC8qIFVua25vd24g KHRyYW5zcGFyZW50KSAqLwotCi0vKiBDb2RlcyBmb3IgbGFuZ3VhZ2VzICovCi0vKgotICBOT1RF OiBJdCB3b3VsZCBwZXJoYXBzIGJlIGJldHRlciB0byB1c2UgSVNPIDYzOS0xOTg4IDItbGV0dGVy ICJDb2RlcyBmb3IKLSAgUmVwcmVzZW50YXRpb24gb2YgTmFtZXMgb2YgTGFuZ3VhZ2VzIiBoZXJl LCBzaG93biBpbiB0aGUgY29tbWVudHMgYmVsb3cuCi0qLwotI2RlZmluZSBMX0FTQ0lJICAgICAg IDAgIC8qIEVOIEFTQ0lJLCBFbmdsaXNoICovCi0jZGVmaW5lIExfVVNBU0NJSSAgICAgMCAgLyog RU4gQVNDSUksIEVuZ2xpc2ggKi8KLSNkZWZpbmUgTF9EVVRDSCAgICAgICAxICAvKiBOTCBEdXRj aCAqLwotI2RlZmluZSBMX0ZJTk5JU0ggICAgIDIgIC8qIEZJIEZpbm5pc2ggKi8KLSNkZWZpbmUg TF9GUkVOQ0ggICAgICAzICAvKiBGUiBGcmVuY2ggKi8KLSNkZWZpbmUgTF9HRVJNQU4gICAgICA0 ICAvKiBERSBHZXJtYW4gKi8KLSNkZWZpbmUgTF9IVU5HQVJJQU4gICA1ICAvKiBIVSBIdW5nYXJp YW4gKi8KLSNkZWZpbmUgTF9JVEFMSUFOICAgICA2ICAvKiBJVCBJdGFsaWFuICovCi0jZGVmaW5l IExfTk9SV0VHSUFOICAgNyAgLyogTk8gTm9yd2VnaWFuICovCi0jZGVmaW5lIExfUE9SVFVHVUVT RSAgOCAgLyogUFQgUG9ydHVndWVzZSAqLwotI2RlZmluZSBMX1NQQU5JU0ggICAgIDkgIC8qIEVT IFNwYW5pc2ggKi8KLSNkZWZpbmUgTF9TV0VESVNIICAgIDEwICAvKiBTViBTd2VkaXNoICovCi0j ZGVmaW5lIExfU1dJU1MgICAgICAxMSAgLyogUk0gU3dpc3MgKFJoYWV0by1Sb21hbmNlKSAqLwot I2RlZmluZSBMX0RBTklTSCAgICAgMTIgIC8qIERBIERhbmlzaCAqLwotI2RlZmluZSBMX0lDRUxB TkRJQyAgMTMgIC8qIElTIEljZWxhbmRpYyAqLwotI2RlZmluZSBMX1JVU1NJQU4gICAgMTQgIC8q IFJVIFJ1c3NpYW4gKi8KLSNkZWZpbmUgTF9KQVBBTkVTRSAgIDE1ICAvKiBKQSBKYXBhbmVzZSAq LwotI2RlZmluZSBMX0hFQlJFVyAgICAgMTYgIC8qIElXIEhlYnJldyAqLwotI2RlZmluZSBMX0dS RUVLICAgICAgMTcgIC8qICAgIEdyZWVrICovCi0KLSNkZWZpbmUgTUFYTEFORyAgICAgIDE3ICAv KiBOdW1iZXIgb2YgbGFuZ3VhZ2VzICovCi0KLS8qCi0gIEZpbGUgY2hhcmFjdGVyLXNldHMgYXJl IGRlZmluZWQgaW4gdGhlIHN5c3RlbS1zcGVjaWZpYyBjaz94bGEuaCBmaWxlLAotICBleGNlcHQg Zm9yIHRoZSBmb2xsb3dpbmcgb25lcywgd2hpY2ggbXVzdCBiZSBhdmFpbGFibGUgdG8gYWxsIHZl cnNpb25zOgotKi8KLSNkZWZpbmUgRkNfVFJBTlNQICAyNTQgICAgICAgICAgICAgICAgICAvKiBU cmFuc3BhcmVudCAqLwotI2RlZmluZSBGQ19VTkRFRiAgIDI1NSAgICAgICAgICAgICAgICAgIC8q IFVuZGVmaW5lZCAgICovCi0vKgotICBEZXNpZ25hdG9ycyBmb3IgS2VybWl0J3MgdHJhbnNmZXIg Y2hhcmFjdGVyIHNldHMuICBUaGVzZSBhcmUgYWxsIHN0YW5kYXJkCi0gIHNldHMsIG9yIGJhc2Vk IG9uIHRoZW0uICBTeW1ib2xzIG11c3QgYmUgdW5pcXVlIGluIHRoZSBmaXJzdCA4IGNoYXJhY3Rl cnMsCi0gIGJlY2F1c2Ugc29tZSBDIHByZXByb2Nlc3NvcnMgaGF2ZSB0aGlzIGxpbWl0LgotKi8K LS8qIExJU1QxICovCi0jZGVmaW5lIFRDX1RSQU5TUCAgMCAgIC8qIFRyYW5zcGFyZW50LCBubyBj aGFyYWN0ZXIgdHJhbnNsYXRpb24gKi8KLSNkZWZpbmUgVENfVVNBU0NJSSAxICAgLyogSVNPIDY0 NiBJUlYgLyBVUyA3LWJpdCBBU0NJSSAqLwotI2RlZmluZSBUQ18xTEFUSU4gIDIgICAvKiBJU08g ODg1OS0xLCBMYXRpbiBBbHBoYWJldCAxICovCi0jZGVmaW5lIFRDXzJMQVRJTiAgMyAgIC8qIElT TyA4ODU5LTIsIExhdGluIEFscGhhYmV0IDIgKi8KLSNkZWZpbmUgVENfQ1lSSUxMICA0ICAgLyog SVNPIDg4NTktNSwgTGF0aW4vQ3lyaWxsaWMgKi8KLSNkZWZpbmUgVENfSkVVQyAgICA1ICAgLyog SmFwYW5lc2UgRVVDID0gSklTIDAyMDErMDIwMiswMjA4ICovCi0jZGVmaW5lIFRDX0hFQlJFVyAg NiAgIC8qIElTTyA4ODU5LTgsIExhdGluL0hlYnJldyAqLwotI2RlZmluZSBUQ19HUkVFSyAgIDcg ICAvKiBJU08gODg1OS03LCBMYXRpbi9HcmVlayAqLwotI2RlZmluZSBUQ185TEFUSU4gIDggICAv KiBJU08gODg1OS0xNSBMYXRpbiBBbHBoYWJldCA5ICh3aXRoIEV1cm8pICovCi0jZGVmaW5lIFRD X1VDUzIgICAgOSAgIC8qIElTTyAxMDY0NiAvIFVuaWNvZGUgVUNTLTIgKi8KLSNkZWZpbmUgVENf VVRGOCAgIDEwICAgLyogSVNPIDEwNjQ2IC8gVW5pY29kZSBVVEYtOCAqLwotCi0jZGVmaW5lIE1B WFRDU0VUUyAxMCAgIC8qIEhpZ2hlc3QgVHJhbnNmZXIgQ2hhcmFjdGVyIFNldCBOdW1iZXIgKi8K LQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIE5vdCB1c2VkIGFuZCBwcm9iYWJseSB3b24ndCBiZSBk dWUgdG8gSVNPLTEwNjQ2IC8gVW5pY29kZS4KLSovCi0jZGVmaW5lIFRDXzNMQVRJTiAxMSAgLyog SVNPIDg4NTktMywgTGF0aW4tMyAqLwotI2RlZmluZSBUQ180TEFUSU4gMTIgICAvKiBJU08gODg1 OS00LCBMYXRpbi00ICovCi0jZGVmaW5lIFRDXzVMQVRJTiAxMyAgLyogSVNPIDg4NTktOSwgTGF0 aW4tNSAqLwotI2RlZmluZSBUQ19BUkFCSUMgMTQgIC8qIElTTy04ODU5LTYsIExhdGluL0FyYWJp YyAqLwotI2RlZmluZSBUQ19KSVMyMDggMTUgIC8qIEphcGFuZXNlIEpJUyBYIDAyMDggbXVsdGli eXRlIHNldCAqLwotI2RlZmluZSBUQ19DSElORVMgMTYgIC8qIENoaW5lc2UgU3RhbmRhcmQgR0Ig MjMxMi04MCAqLwotI2RlZmluZSBUQ19LT1JFQU4gMTcgIC8qIEtvcmVhbiBLUyBDIDU2MDEtMTk4 NyAqLwotI2RlZmluZSBUQ19JU0NJSSAgMTggIC8qIEluZGlhbiBzdGFuZGFyZCBjb2RlIGZvciBp aS4uLiAqLwotI2RlZmluZSBUQ19WU0NJSSAgMTkgIC8qIFZpZXRuYW0gc3RhbmRhcmQgY29kZSBm b3IgaWkuLi4gKi8KLS8qIGV0Yy4uLiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotLyogU3Ry dWN0dXJlIGZvciBjaGFyYWN0ZXItc2V0IGluZm9ybWF0aW9uICovCi0KLXN0cnVjdCBjc2luZm8g ewotICAgIGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlc2NyaXB0aXZl IG5hbWUgb2YgY2hhcmFjdGVyIHNldCAqLwotICAgIGludCBzaXplOyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNpemUgKGUuZy4gMTI4LCAyNTYsIDE2Mzg0KSAqLwotICAgIGludCBjb2Rl OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExpa2UgVENfMUxBVElOLCBldGMuICAqLwot ICAgIGNoYXIgKmRlc2lnbmF0b3I7ICAgICAgICAgICAgICAgICAgIC8qIERlc2lnbmF0b3IsIGxp a2UgSTIvMTAwID0gTGF0aW4tMSAqLwotICAgIGludCBhbHBoYWJldDsgICAgICAgICAgICAgICAg ICAgICAgIC8qIEJhc2UgYWxwaGFiZXQgKi8KLSAgICBjaGFyICprZXl3b3JkOyAgICAgICAgICAg ICAgICAgICAgICAvKiBLZXl3b3JkIGZvciB0aGlzIGNoYXJhY3Rlci1zZXQgKi8KLX07Ci0KLS8q IFN0cnVjdHVyZSBmb3IgbGFuZ3VhZ2UgaW5mb3JtYXRpb24gKi8KLQotc3RydWN0IGxhbmdpbmZv IHsKLSAgICBpbnQgaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMYW5ndWFnZSBJ RCBjb2RlIChMX3doYXRldmVyKSAqLwotICAgIGludCBmYzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEZpbGUgY2hhcmFjdGVyIHNldCB0byB1c2UgKi8KLSAgICBpbnQgdGM7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBjaGFyYWN0ZXIgc2V0IHRvIHVzZSAq LwotICAgIGNoYXIgKmRlc2NyaXB0aW9uOyAgICAgICAgICAgICAgICAgIC8qIERlc2NyaXB0aW9u IG9mIGxhbmd1YWdlICovCi19OwotCi0vKiBOb3cgdGFrZSBpbiB0aGUgc3lzdGVtLXNwZWNpZmlj IGRlZmluaXRpb25zICovCi0KLSNpZmRlZiBVTklYCi0jaW5jbHVkZSAiY2t1eGxhLmgiCi0jZW5k aWYgLyogVU5JWCAqLwotCi0jaWZkZWYgT1NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogT1MtOSAqLwotI2luY2x1ZGUgImNrdXhsYS5oIgotI2VuZGlmIC8qIE9TLTkgKi8KLQotI2lm ZGVmIFZNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZBWC9WTVMgKi8KLSNpbmNs dWRlICJja3V4bGEuaCIKLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVmIEdFTURPUyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEF0YXJpIFNUICovCi0jaW5jbHVkZSAiY2t1eGxhLmgiCi0j ZW5kaWYgLyogR0VNRE9TICovCi0KLSNpZmRlZiBNQUMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBNYWNpbnRvc2ggKi8KLSNpbmNsdWRlICJja214bGEuaCIKLSNlbmRpZiAvKiBNQUMg Ki8KLQotI2lmZGVmIE9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TLzIgKi8K LSNpbmNsdWRlICJja3V4bGEuaCIgICAgICAgICAgICAgICAgICAgICAvKiBVc2VzIGJpZyBVTklY IHZlcnNpb24gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIEFNSUdBICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENvbW1vZG9yZSBBbWlnYSAqLwotI2luY2x1ZGUgImNrdXhsYS5o IgotI2VuZGlmIC8qIEFNSUdBICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbCAgICAgICAgICAgICAg ICAgICAgICAvKiBEYXRhIEdlbmVyYWwgTVYgQU9TL1ZTICovCi0jaW5jbHVkZSAiY2t1eGxhLmgi Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotI2lmZGVmIFNUUkFUVVMgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFN0cmF0dXMgQ29tcHV0ZXIsIEluYy4gVk9TICovCi0jaW5jbHVkZSAi Y2t1eGxhLmgiCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotCi0jaWZkZWYgVU5JQ09ERQotI2luY2x1 ZGUgImNrY3VuaS5oIiAgICAgICAgICAgICAgICAgICAgIC8qIFVuaWNvZGUgKi8KLSNlbmRpZiAv KiBVTklDT0RFICovCi0KLSNpZmRlZiBLQU5KSQotI2RlZmluZSBVTktTSklTIDB4ODE3ZgotX1BS T1RPVFlQKFVTSE9SVCBldV90b19zaiwgKFVTSE9SVCkgKTsgIC8qIEVVQy1KUCB0byBTaGlmdC1K SVMgICovCi1fUFJPVE9UWVAoVVNIT1JUIHNqX3RvX2V1LCAoVVNIT1JUKSApOyAgLyogU2hpZnQt SklTIHRvIEVVQy1KUCAgKi8KLV9QUk9UT1RZUCggaW50IHhrYW5qZiwgKHZvaWQpICk7Ci1fUFJP VE9UWVAoIGludCB4a2FuamksIChpbnQsIGludCAoKikoY2hhcikpICk7Ci1fUFJPVE9UWVAoIGlu dCB4a2FuanosIChpbnQgKCopKGNoYXIpICkgKTsKLV9QUk9UT1RZUCggaW50IHprYW5qZiwgKHZv aWQpICk7Ci1fUFJPVE9UWVAoIGludCB6a2FuamksIChpbnQgKCopKHZvaWQpKSApOyAvKiBLYW5q aSBmdW5jdGlvbiBwcm90b3R5cGVzICovCi1fUFJPVE9UWVAoIGludCB6a2FuanosICh2b2lkKSAp OwotX1BST1RPVFlQKFZPSUQgajdpbml0LCAoIHZvaWQgKSApOyAgICAgIC8qIEluaXRpYWxpemUg SklTLTcgcGFyc2VyICovCi1fUFJPVE9UWVAoaW50IGdldGo3LCAoIHZvaWQgKSApOyAgICAgICAg LyogR2V0IG5leHQgSklTLTcgY2hhcmFjdGVyICovCi0jZW5kaWYgLyogS0FOSkkgKi8KLQotI2lm bmRlZiBNQUMKLSNpZm5kZWYgTk9MT0NBTAotX1BST1RPVFlQKCBpbnQgY3Nfc2l6ZSwgKGludCkg KTsKLV9QUk9UT1RZUCggaW50IGNzX2lzX3N0ZCwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IGNz X2lzX25yYywgKGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCBzZXRyZW1jaGFyc2V0LCAoaW50LCBp bnQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgc2V0bGNsY2hhcnNldCwgKGludCkgKTsKLSNlbmRpZiAv KiBOT0xPQ0FMICovCi0jZW5kaWYgLyogTUFDICovCi0KLV9QUk9UT1RZUChWT0lEIHNldHhsYXR5 cGUsIChpbnQsIGludCkpOwotCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotI2VuZGlmIC8qIENLQ1hM QV9IICovCi0KLS8qIEVuZCBvZiBja2N4bGEuaCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tlcm1pdC5pbmkgYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtaXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCBiMzBmMzg5Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2Vy bWl0LTkuMC4zMDIvY2tlcm1pdC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLUNP TU1FTlQgLSBTdGFuZGFyZCBDLUtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlCi07Ci1lY2hvCi1l Y2hvIFRoZSB2ZXJ5IGxvbmcgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gZmlsZSB0aGF0IHdhcyBk aXN0cmlidXRlZAotZWNobyB3aXRoIEMtS2VybWl0IDYsIDcsIGFuZCA4IGlzIG5vIGxvbmdlciBy ZWNvbW1lbmRlZCBhcyAic3RhbmRhcmQiLAotZWNobyBzaW5jZSBpdHMgZmVhdHVyZXMgd2VyZSBs aXR0bGUgdXNlZC4gIEl0IGlzIHN0aWxsIGF2YWlsYWJsZSBpbgotZWNobyB0aGUgQy1LZXJtaXQg ZGlzdHJpYnV0aW9uIGFzIG9ja2VybWl0LmluaS4KLWVjaG8KCmRpZmYgLS1naXQgYS9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtaXQ3MC50eHQgYi9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtaXQ3MC50eHQKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGE3OTZjZmQuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2VybWl0NzAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTc2 OTAgKzAsMCBAQAotCi0gICBbMV1UaGUgQ29sdW1iaWEgQ3Jvd24gVGhlIEtlcm1pdCBQcm9qZWN0 IHwgQ29sdW1iaWEgVW5pdmVyc2l0eQotICAgNjEyIFdlc3QgMTE1dGggU3RyZWV0LCBOZXcgWW9y ayBOWSAxMDAyNSBVU0EgbyBbMl1rZXJtaXRAY29sdW1iaWEuZWR1Ci0gICAuLi5zaW5jZSAxOTgx Ci0gICBbM11Ib21lIFs0XUtlcm1pdCA5NSBbNV1DLUtlcm1pdCBbNl1TY3JpcHRzIFs3XUN1cnJl bnQgWzhdTmV3IFs5XUZBUQotICAgWzEwXVN1cHBvcnQKLQotU3VwcGxlbWVudCB0byBbMTFdVXNp bmcgQy1LZXJtaXQgLCAybmQgRWRpdGlvbgotCi1Gb3IgQy1LZXJtaXQgNy4wCi0KLUFzIG9mIEMt S2VybWl0IHZlcnNpb246ICA3LjAuMTk2Ci1UaGlzIGZpbGUgY3JlYXRlZDogIDggRmVicnVhcnkg MjAwMAotVGhpcyBmaWxlIGxhc3QgdXBkYXRlZDoKLU1vbiBBdWcgIDggMTA6Mzk6MTggMjAxMQot Ci0KLUF1dGhvcnM6IEZyYW5rIGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lCi1BZGRy ZXNzOiBUaGUgS2VybWl0IFByb2plY3QKLSAgICAgICAgIENvbHVtYmlhIFVuaXZlcnNpdHkKLSAg ICAgICAgIDYxMiBXZXN0IDExNXRoIFN0cmVldAotICAgICAgICAgTmV3IFlvcmsgTlkgMTAwMjUt Nzc5OQotICAgICAgICAgVVNBCi1GYXg6ICAgICArMSAoMjEyKSA2NjItNjQ0MgotRS1NYWlsOiAg WzEyXWtlcm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdQotV2ViOiAgICAgWzEzXWh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC8KLU9yOiAgICAgIFsxNF1odHRwOi8vd3d3Lmtlcm1pdC1wcm9q ZWN0Lm9yZy8KLU9yOiAgICAgIFsxNV1odHRwOi8vd3d3LmNvbHVtYmlhLm55Yy5ueS51cy9rZXJt aXQvCi0KLU5PVElDRVMKLQotICAgVGhpcyBkb2N1bWVudDoKLSAgICAgICAgICBDb3B5cmlnaHQg 77+9IDE5OTcsIDIwMDAsIEZyYW5rIGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lLgot ICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgIEtlcm1pdCA5NToKLSAgICAgICAg ICBDb3B5cmlnaHQg77+9IDE5OTUsIDIwMDAsIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNp dHkgaW4gdGhlCi0gICAgICAgICAgQ2l0eSBvZiBOZXcgWW9yay4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLQotICAgQy1LZXJtaXQ6Ci0gICAgICAgICAgQ29weXJpZ2h0IO+/vSAxOTg1LCAyMDAwLAot ICAgICAgICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2Yg TmV3IFlvcmsuIEFsbAotICAgICAgICAgIHJpZ2h0cyByZXNlcnZlZC4gU2VlIHRoZSBDLUtlcm1p dCBbMTZdQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICAgICAgICBjb3B5cmlnaHQgdGV4dCBp biB0aGUgWzE3XWNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQKLSAgICAgICAgICBw ZXJtaXNzaW9ucy4KLQotICAgV2hlbiBLZXJiZXJvcyhUTSkgYW5kL29yIFNSUChUTSkgKFNlY3Vy ZSBSZW1vdGUgUGFzc3dvcmQpIGFuZC9vciBTU0wKLSAgICAgICAgICBwcm90b2NvbCBhcmUgaW5j bHVkZWQ6Ci0gICAgICAgICAgUG9ydGlvbnMgQ29weXJpZ2h0IO+/vSAxOTkwLCBNYXNzYWNodXNl dHRzIEluc3RpdHV0ZSBvZgotICAgICAgICAgIFRlY2hub2xvZ3kuCi0gICAgICAgICAgUG9ydGlv bnMgQ29weXJpZ2h0IO+/vSAxOTkxLCAxOTkzIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YK LSAgICAgICAgICBDYWxpZm9ybmlhLgotICAgICAgICAgIFBvcnRpb25zIENvcHlyaWdodCDvv70g MTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSBieSBBVCZULgotICAgICAgICAgIFBvcnRpb25z IENvcHlyaWdodCDvv70gMTk5NywgU3RhbmZvcmQgVW5pdmVyc2l0eS4KLSAgICAgICAgICBQb3J0 aW9ucyBDb3B5cmlnaHQg77+9IDE5OTUtMTk5NywgRXJpYyBZb3VuZyA8ZWF5QGNyeXB0b3NvZnQu Y29tPi4KLQotICAgRm9yIHRoZSBmdWxsIHRleHQgb2YgdGhlIHRoaXJkLXBhcnR5IGNvcHlyaWdo dCBub3RpY2VzLCBzZWUKLSAgIFsxOF1BcHBlbmRpeCBWLgotCi1XSEFUIElTIElOIFRISVMgRklM RQotCi0gICBUaGlzIGZpbGUgbGlzdHMgY2hhbmdlcyBtYWRlIHRvIEMtS2VybWl0IHNpbmNlIHRo ZSBzZWNvbmQgZWRpdGlvbiBvZgotICAgdGhlIGJvb2sgWzE5XVVzaW5nIEMtS2VybWl0IHdhcyBw dWJsaXNoZWQgYW5kIEMtS2VybWl0IDYuMCB3YXMgcmVsZWFzZWQKLSAgIGluIE5vdmVtYmVyIDE5 OTYuIFVzZSB0aGlzIGZpbGUgYXMgYSBzdXBwbGVtZW50IHRvIHRoZSBzZWNvbmQgZWRpdGlvbgot ICAgb2YgVXNpbmcgQy1LZXJtaXQgdW50aWwgdGhlIHRoaXJkIGVkaXRpb24gaXMgcHVibGlzaGVk IHNvbWUgdGltZSBpbgotICAgMjAwMC4gSWYgdGhlICJtb3N0IHJlY2VudCB1cGRhdGUiIHNob3du IGFib3ZlIGlzIGxvbmcgYWdvLCBjb250YWN0Ci0gICBDb2x1bWJpYSBVbml2ZXJzaXR5IHRvIHNl ZSBpZiB0aGVyZSBpcyBhIG5ld2VyIHJlbGVhc2UuCi0KLSAgIEZvciBmdXJ0aGVyIGluZm9ybWF0 aW9uLCBhbHNvIHNlZSB0aGUgWzIwXUNLQ0JXUi5UWFQgKCJDLUtlcm1pdAotICAgYmV3YXJlIikg ZmlsZSBmb3IgaGludHMsIHRpcHMsIHRyaWNrcywgcmVzdHJpY3Rpb25zLCBmcmVxdWVudGx5IGFz a2VkCi0gICBxdWVzdGlvbnMsIGV0YywgcGx1cyB0aGUgc3lzdGVtLXNwZWNpZmljICJiZXdhcmUg ZmlsZSIsIGUuZy4KLSAgIFsyMV1DS1VCV1IuVFhUIGZvciBVTklYLCBbMjJdQ0tWQldSLlRYVCBm b3IgVk1TLCBldGMsIGFuZCBhbHNvIGFueQotICAgc3lzdGVtLXNwZWNpZmljIHVwZGF0ZSBmaWxl cyBzdWNoIGFzIEtFUk1JVDk1LkhUTSBmb3IgS2VybWl0IDk1IChpbiB0aGUKLSAgIERPQ1NcTUFO VUFMXCBzdWJkaXJlY3Rvcnkgb2YgeW91ciBLOTUgZGlyZWN0b3J5KS4KLQotICAgICBUaGlzIFdl Yi1iYXNlZCBjb3B5IG9mIHRoZSBDLUtlcm1pdCA3LjAgdXBkYXRlIG5vdGVzIHN1cGVyc2VkZXMg dGhlCi0gICAgIHBsYWluLXRleHQgQ0tFUk1JVDIuVFhUIGZpbGUuIEFsbCBjaGFuZ2VzIGFmdGVy IDE5IEphbnVhcnkgMjAwMAotICAgICBhcHBlYXIgb25seSBoZXJlIGluIHRoZSBXZWIgdmVyc2lv bi4gSWYgeW91IG5lZWQgYW4gdXAtdG8tZGF0ZQotICAgICBwbGFpbi10ZXh0IGNvcHksIHVzZSB5 b3VyIFdlYiBicm93c2VyIHRvIHNhdmUgdGhpcyBwYWdlIGFzIHBsYWluCi0gICAgIHRleHQuCi0K LUFCT1VUIEZJTEVOQU1FUwotCi0gICBJbiB0aGlzIGRvY3VtZW50LCBmaWxlbmFtZXMgYXJlIGdl bmVyYWxseSBzaG93biBpbiB1cHBlcmNhc2UsIGJ1dCBvbgotICAgZmlsZSBzeXN0ZW1zIHdpdGgg Y2FzZS1zZW5zaXRpdmUgbmFtZXMgc3VjaCBhcyBVTklYLCBPUy05LCBhbmQgQU9TL1ZTLAotICAg bG93ZXJjYXNlIG5hbWVzIGFyZSB1c2VkOiBbMjNdY2t1YndyLnR4dCwgWzI0XWNrZXJtaXQ3MC50 eHQsIGV0Yy4KLQotQURESVRJT05BTCBGSUxFUwotCi0gICBTZXZlcmFsIG90aGVyIGZpbGVzIGFj Y29tcGFueSB0aGlzIG5ldyBLZXJtaXQgcmVsZWFzZToKLQotICAgU0VDVVJJVFkuVFhUCi0gICAg ICAgICAgRGlzY3Vzc2lvbiBvZiBLZXJtaXQncyBuZXcgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5 cHRpb24KLSAgICAgICAgICBmZWF0dXJlczoKLQotICAgICAgICAgICsgWzI1XVBsYWluLXRleHQg dmVyc2lvbgotICAgICAgICAgICsgWzI2XUhUTUwgKGh5cGVydGV4dCkgdmVyc2lvbgotCi0gICBJ S1NELlRYVAotICAgICAgICAgIEhvdyB0byBpbnN0YWxsIGFuZCBtYW5hZ2UgYW4gSW50ZXJuZXQg S2VybWl0IFNlcnZpY2UgRGFlbW9uLgotCi0gICAgICAgICAgKyBbMjddUGxhaW4tdGV4dCB2ZXJz aW9uCi0gICAgICAgICAgKyBbMjhdSFRNTCAoaHlwZXJ0ZXh0KSB2ZXJzaW9uCi0KLSAgICAgICAg ICBBbHNvIHNlZSBbMjldY3Vpa3NkLmh0bSBmb3IgaW5zdHJ1Y3Rpb25zIGZvciB1c2UuCi0KLSAg IFRFTE5FVC5UWFQKLSAgICAgICAgICBBIHRob3JvdWdoIHByZXNlbnRhdGlvbiBvZiBLZXJtaXQn cyBuZXcgYWR2YW5jZWQgVGVsbmV0IGZlYXR1cmVzCi0gICAgICAgICAgYW5kIGNvbnRyb2xzLgot Ci0gICAgICAgICAgKyBbMzBdUGxhaW4tdGV4dCB2ZXJzaW9uCi0gICAgICAgICAgKyBbMzFdSFRN TCAoaHlwZXJ0ZXh0KSB2ZXJzaW9uCi0KLVRIRSBORVcgQy1LRVJNSVQgTElDRU5TRQotCi0gICBU aGUgQy1LZXJtaXQgbGljZW5zZSB3YXMgcmV3cml0dGVuIGZvciB2ZXJzaW9uIDcuMCB0byBncmFu dCBhdXRvbWF0aWMKLSAgIHBlcm1pc3Npb24gdG8gcGFja2FnZXJzIG9mIGZyZWUgb3BlcmF0aW5n LXN5c3RlbSBkaXN0cmlidXRpb25zIHRvCi0gICBpbmNsdWRlIEMtS2VybWl0IDcuMC4gRXhhbXBs ZXMgaW5jbHVkZSBMaW51eCAoR05VL0xpbnV4KSwgRnJlZUJTRCwKLSAgIE5ldEJTRCwgZXRjLiBU aGUgbmV3IGxpY2Vuc2UgaXMgaW4gdGhlIFszMl1DT1BZSU5HLlRYVCBmaWxlLCBhbmQgaXMKLSAg IGFsc28gZGlzcGxheWVkIGJ5IEMtS2VybWl0IGl0c2VsZiB3aGVuIHlvdSBnaXZlIHRoZSBWRVJT SU9OIG9yCi0gICBDT1BZUklHSFQgY29tbWFuZC4gVGhlIG5ldyBDLUtlcm1pdCBsaWNlbnNlIGRv ZXMgbm90IGFwcGx5IHRvCi0gICBbMzNdS2VybWl0IDk1LgotCi1BQ0tOT1dMRURHTUVOVFMKLQot ICAgVGhhbmtzIHRvIEplZmYgQWx0bWFuLCB3aG8gam9pbmVkIHRoZSBLZXJtaXQgUHJvamVjdCBp biAxOTk1LCBmb3IgbXVjaAotICAgb2Ygd2hhdCB5b3Ugc2VlIGluIEMtS2VybWl0IDcuMCwgZXNw ZWNpYWxseSBpbiB0aGUgbmV0d29ya2luZyBhbmQKLSAgIHNlY3VyaXR5IGFyZWFzLCBhbmQgaGlz IGtleSByb2xlIGluIGRlc2lnbmluZyBhbmQgaW1wbGVtZW50aW5nIHRoZQotICAgSW50ZXJuZXQg S2VybWl0IFNlcnZpY2UgRGFlbW9uLiBBbmQgc3BlY2lhbCB0aGFua3MgdG8gTHVjYXMgSGFydCBm b3IKLSAgIGxvdHMgb2YgaGVscCB3aXRoIHRoZSBWTVMgdmVyc2lvbjsgdG8gUGV0ZXIgRWljaGhv cm4gZm9yIGNvbnRpbnVvdXMKLSAgIHRlc3Rpbmcgb24gdGhlIGZ1bGwgcmFuZ2Ugb2YgSFAtVVgg dmVyc2lvbnMgYW5kIGZvciBhIGNvbnNvbGlkYXRlZCBzZXQKLSAgIG9mIEhQLVVYIG1ha2VmaWxl IHRhcmdldHM7IGFuZCB0byBDb2xpbiBBbGxlbiwgTWFyayBBbGxlbiwgUm9nZXIgQWxsZW4sCi0g ICBSaWMgQW5kZXJzb24sIFdpbGxpYW0gQmFkZXIsIE1pdGNoIEJha2VyLCBNaXRjaGVsbCBCYXNz LCBOZWxzb24gQmVlYmUsCi0gICBHZXJyeSBCZWxhbmdlciwgSmVmZiBCZXJuc3RlbiwgTWFyayBC ZXJyeW1hbiwgSm9obiBCaWdnLCBWb2xrZXIKLSAgIEJvcmNoZXJ0LCBKb25hdGhhbiBCb3N3ZWxs LCBUaW0gQm95ZXIsIEZyZWRlcmljayBCcnVja21hbiwgS2VubmV0aAotICAgQ29jaHJhbiwgSmFy ZWQgQ3JhcG8sIEJpbGwgRGVsYW5leSwgSWdvciBTb2JyYWRvIERlbGdhZG8sIENsYXJlbmNlCi0g ICBEb2xkLCBKb2UgRG91cG5paywgSm9obiBEdW5sYXAsIE1heCBFdmFydHMsIFBhdHJpY2sgRnJl bmNoLCBDYXJsCi0gICBGcmllZGJlcmcsIENhcmwgRnJpZW5kLCBIaXJvZnVtaSBGdWppaSwgQW5k cmV3IEdhYnJpZWwsIEdhYmUgR2FyemEsCi0gICBCb3lkIEdlcmJlciwgRGF2aWQgR2VyYmVyLCBH ZW9yZ2UgR2lsbWVyLCBIdW50ZXIgR29hdGxleSwgREogSGFnYmVyZywKLSAgIEtldmluIEhhbmR5 LCBBbmR5IEhhcnBlciwgUmFuZG9scGggSGVyYmVyLCBTdmVuIEhvbHN0cu+/vW0sIE1pY2hhbAot ICAgSmFlZ2VybWFubiwgR3JhaGFtIEplbmtpbnMsIERpY2sgSm9uZXMsIFRlcnJ5IEtlbm5lZHks IFJvYmVydCBEIEtleXMsCi0gICBOaWNrIEtpc3NlYmVydGgsIElnb3IgS292YWxlbmtvLCBEYXZp ZCBMYW5lLCBBZGFtIExhdXJpZSwgSmVmZgotICAgTGllYmVybWFubiwgRXJpYyBMb252aWNrLCBI b2kgV2FuIExvdWlzLCBBcnRodXIgTWFyc2gsIEdyZWdvcmllIE1hcnRpbiwKLSAgIFBldGVyIE1h dXpleSwgRHJhZ2FuIE1pbGljaWMsIFRvZGQgTWlsbGVyLCBDaHJpc3RpYW4gTW9uZHJ1cCwgRGFu aWVsCi0gICBNb3JhdG8sIERhdCBOZ3V5ZW4sIEhlcmIgUGV5ZXJsLCBKZWFuLVBpZXJyZSBSYWRs ZXksIFN0ZXZlIFJhbmNlLAotICAgU3RlcGhlbiBSaWVobSwgTmlnZWwgUm9sZXMsIExhcnJ5IFJv c2VubWFuLCBKYXkgUyBSb3VtYW4sIERhdmlkCi0gICBTYW5kZXJzb24sIEpvaG4gU2FudG9zLCBN aWNoYWVsIFNjaG1pdHosIFN0ZXZlbiBTY2h1bHR6LCBCb2IgU2hhaXIsCi0gICBSaWNoYXJkIFNo dWZvcmQsIEZyZWQgU21pdGgsIE1pY2hhZWwgU29rb2xvdiwgSmltIFNwYXRoLCBQZXRlciBTemVs bCwKLSAgIFRlZCBUJ3NvLCBCcmlhbiBUaWxsbWFuLCBMaW51cyBUb3J2YWxkcywgUGF0cmljayBW b2xrZXJkaW5nLCBNYXJ0aW4KLSAgIFZvcmzvv71uZGVyLCBTdGV2ZSBXYWx0b24sIEtlbiBXZWF2 ZXJsaW5nLCBKb2huIFdlZWtsZXksIE1hcnRpbiBXaGl0YWtlciwKLSAgIEppbSBXaGl0YnksIE1h dHQgV2lsbG1hbiwgSm9lbGxlbiBXaW5kc29yLCBGYXJyZWxsIFdvb2RzLCBhbmQgbWFueQotICAg b3RoZXJzIGZvciBiaW5hcmllcywgaG9zdGluZywgcmV2aWV3cywgc3VnZ2VzdGlvbnMsIGFkdmlj ZSwgYnVnCi0gICByZXBvcnRzLCBhbmQgYWxsIHRoZSByZXN0IG92ZXIgdGhlIDMrIHllYXIgQy1L ZXJtaXQgNy4wIGRldmVsb3BtZW50Ci0gICBjeWNsZS4gVGhhbmtzIHRvIFJ1c3MgTmVsc29uIGFu ZCB0aGUgYm9hcmQgb2YgdGhlIE9wZW4gU29mdHdhcmUKLSAgIEluaXRpYXRpdmUgKFszNF1odHRw Oi8vd3d3Lm9wZW5zb3VyY2Uub3JnKSBmb3IgdGhlaXIgY29vcGVyYXRpb24gaW4KLSAgIGRldmVs b3BpbmcgdGhlIG5ldyBDLUtlcm1pdCBsaWNlbnNlIGFuZCB0byB0aGUgcHJvcHJpZXRvcnMgb2Yg dGhvc2UKLSAgIGZyZWUgVU5JWCBkaXN0cmlidXRpb25zIHRoYXQgaGF2ZSBpbmNvcnBvcmF0ZWQg Qy1LZXJtaXQgNy4wIGZvciB0aGVpcgotICAgY29vcGVyYXRpb24gYW5kIHN1cHBvcnQsIGVzcGVj aWFsbHkgRnJlZUJTRCdzIErvv71yZyBXdW5zY2guCi0KLU5PVEUgVE8gS0VSTUlUIDk1IFVTRVJT Ci0KLSAgIEtlcm1pdCA5NSBhbmQgQy1LZXJtaXQgc2hhcmUgdGhlIHNhbWUgY29tbWFuZCBhbmQg c2NyaXB0aW5nIGxhbmd1YWdlLAotICAgdGhlIHNhbWUgS2VybWl0IGZpbGUtdHJhbnNmZXIgcHJv dG9jb2wgaW1wbGVtZW50YXRpb24sIGFuZCBtdWNoIGVsc2UKLSAgIGJlc2lkZXMuCi0KLSAgIExp a2UgdGhlIGJvb2sgWzM1XVVzaW5nIEMtS2VybWl0LCB0aGlzIGZpbGUgY29uY2VudHJhdGVzIG9u IHRoZSBhc3BlY3RzCi0gICBvZiBDLUtlcm1pdCB0aGF0IGFyZSBjb21tb24gdG8gYWxsIHZlcnNp b25zOiBVTklYLCBWTVMsIFdpbmRvd3MsIE9TLzIsCi0gICBWT1MsIEFPUy9WUywgZXRjLiBQbGVh c2UgcmVmZXIgdG8geW91ciBLZXJtaXQgOTUgZG9jdW1lbnRhdGlvbiBmb3IKLSAgIGluZm9ybWF0 aW9uIHRoYXQgaXMgc3BlY2lmaWMgdG8gS2VybWl0IDk1LgotCi0gICBDLUtlcm1pdCA3LjAgY29y cmVzcG9uZHMgdG8gS2VybWl0IDk1IDEuMS4xOS4KLQotQy1LRVJNSVQgVkVSU0lPTlMgQU5EIFZF UlNJT04gTlVNQkVSUwotCi0gICAiQy1LZXJtaXQiIHJlZmVycyB0byBhbGwgdGhlIG1hbnkgcHJv Z3JhbXMgdGhhdCBhcmUgY29tcGlsZWQgaW4gd2hvbGUKLSAgIG9yIGluIHBhcnQgZnJvbSBjb21t b24gQy1sYW5ndWFnZSBzb3VyY2UgY29kZSwgY29tcHJpc2luZzoKLQotICAgICAqIEEgS2VybWl0 IGZpbGUgdHJhbnNmZXIgcHJvdG9jb2wgbW9kdWxlCi0gICAgICogQSBjb21tYW5kIHBhcnNlciBh bmQgc2NyaXB0IGV4ZWN1dGlvbiBtb2R1bGUKLSAgICAgKiBBIG1vZGVtLWRpYWxpbmcgbW9kdWxl Ci0gICAgICogQSBuZXR3b3JrIHN1cHBvcnQgbW9kdWxlCi0gICAgICogQSBjaGFyYWN0ZXItc2V0 IHRyYW5zbGF0aW9uIG1vZHVsZS4KLQotICAgYW5kIHNldmVyYWwgb3RoZXJzLiBUaGVzZSAic3lz dGVtLWluZGVwZW5kZW50IiBtb2R1bGVzIGFyZSBjb21iaW5lZAotICAgd2l0aCBzeXN0ZW0tZGVw ZW5kZW50IG1vZHVsZXMgZm9yIGVhY2ggcGxhdGZvcm0gdG8gcHJvdmlkZSB0aGUgcmVxdWlyZWQK LSAgIGlucHV0L291dHB1dCBmdW5jdGlvbnMsIGFuZCBhbHNvIGluIHNvbWUgY2FzZXMgb3Zlcmxh aWQgd2l0aCBhbgotICAgYWx0ZXJuYXRpdmUgdXNlciBpbnRlcmZhY2UsIHN1Y2ggYXMgTWFjaW50 b3NoIEtlcm1pdCdzIHBvaW50LWFuZC1jbGljawotICAgaW50ZXJmYWNlLCBhbmQgaW4gc29tZSBj YXNlcyBhbHNvIGEgdGVybWluYWwgZW11bGF0b3IsIGFzIEtlcm1pdCA5NS4KLQotICAgVGhlIEMt S2VybWl0IHZlcnNpb24gbnVtYmVyIHN0YXJ0ZWQgYXMgMS4wLCAuLi4gMy4wLCA0LjAsIDQuMSBh bmQgdGhlbgotICAgKGJlY2F1c2Ugb2YgY29uZnVzaW9uIGF0IHRoZSB0aW1lIHdpdGggQmVya2Vs ZXkgVU5JWCA0LjIpLCA0QiwgNEMsIGFuZAotICAgc28gb24sIHdpdGggdGhlIHNwZWNpZmljIGVk aXQgbnVtYmVyIGluIHBhcmVudGhlc2VzLCBmb3IgZXhhbXBsZQotICAgNEUoMDcyKSBvciA1QSgx ODgpLiBUaGlzIHNjaGVtZSB3YXMgdXNlZCB0aHJvdWdoIDVBKDE5MSksIGJ1dCBub3cgd2UKLSAg IGhhdmUgZ29uZSBiYWNrIHRvIHRoZSB0cmFkaXRpb25hbCBudW1iZXJpbmcgc2NoZW1lIHdpdGgg ZGVjaW1hbCBwb2ludHM6Ci0gICBtYWpvci5taW5vci5lZGl0OyBmb3IgZXhhbXBsZSA3LjAuMTk2 LiBJbnRlcm5hbCB2ZXJzaW9uIG51bWJlcnMgKHRoZQotICAgXHYodmVyc2lvbikgdmFyaWFibGUp LCBob3dldmVyLCBhcmUgY29tcGF0aWJsZSBpbiBDLUtlcm1pdCA1QSB1cHdhcmRzLgotCi0gICBN ZWFud2hpbGUsIEMtS2VybWl0IGRlcml2YXRpdmVzIGZvciBzb21lIHBsYXRmb3JtcyAoV2luZG93 cywgTWFjaW50b3NoKQotICAgbWlnaHQgZ28gdGhyb3VnaCBzZXZlcmFsIHJlbGVhc2VzIHdoaWxl IEMtS2VybWl0IGl0c2VsZiByZW1haW5zIHRoZQotICAgc2FtZS4gVGhlc2UgdmVyc2lvbnMgaGF2 ZSB0aGVpciBvd24gcGxhdGZvcm0tc3BlY2lmaWMgdmVyc2lvbiBudW1iZXJzLAotICAgc3VjaCBh cyBLZXJtaXQgOTUgMS4xLjEsIDEuMS4yLCBhbmQgc28gb24uCi0KLSAgIEMtS2VybWl0IFZlcnNp b24gSGlzdG9yeToKLQotICAxLjAgICAgICAgMTk4MS0xOTgyICAgICAgICAgQ29tbWFuZC1saW5l IG9ubHksIDQuMiBCU0QgVU5JWCBvbmx5Ci0gIDIuMCAgICAgICAoKikgICAgICAgICAgICAgICAo d2hvIHJlbWVtYmVycy4uLikKLSAgMy4wICAgICAgIE1heSAxOTg0ICAgICAgICAgIENvbW1hbmQt bGluZSBvbmx5LCBzdXBwb3J0cyBzZXZlcmFsIHBsYXRmb3JtcwotICA0LjAtNC4xICAgRmViLUFw ciAxOTg1ICgqKSAgRmlyc3QgaW50ZXJhY3RpdmUgYW5kIG1vZHVsYXIgdmVyc2lvbgotICA0Qygw NTApICAgTWF5IDE5ODUKLSAgNEQoMDYwKSAgIEFwcmlsIDE5ODYKLSAgNEUoMDY2KSAgIEF1Z3Vz dCAxOTg3ICAgICAgIExvbmcgcGFja2V0cwotICA0RSgwNjgpICAgSmFudWFyeSAxOTg4Ci0gIDRF KDA3MikgICBKYW51YXJ5IDE5ODkKLSAgNEYoMDk1KSAgIEF1Z3VzdCAxOTg5ICgqKSAgIEF0dHJp YnV0ZSBwYWNrZXRzCi0gIDVBKDE4OCkgICBOb3ZlbWJlciAxOTkyICAgICBTY3JpcHRpbmcsIFRD UC9JUCwgc2xpZGluZyB3aW5kb3dzICgxKQotICA1QSgxODkpICAgU2VwdGVtYmVyIDE5OTMgICAg Q29udHJvbC1jaGFyIHVucHJlZml4aW5nCi0gIDVBKDE5MCkgICBPY3RvYmVyIDE5OTQgICAgICBS ZWNvdmVyeQotICA1QSgxOTEpICAgQXByaWwgMTk5NSAgICAgICAgT1MvMiBvbmx5Ci0gIDYuMC4x OTIgICBTZXB0ZW1iZXIgMTk5NiAgICBJbnRlbGxpZ2VudCBkaWFsaW5nLCBhdXRvZG93bmxvYWQs IGxvdHMgbW9yZSAoMikKLSAgNi4xLjE5MyAgIDE5OTctOTggKCopICAgICAgIERldmVsb3BtZW50 IG9ubHkKLSAgNi4xLjE5NCAgIEp1bmUgMTk5OCAgICAgICAgIEs5NSBvbmx5IC0gc3dpdGNoZXMs IGRpcmVjdG9yeSByZWN1cnNpb24sIG1vcmUKLSAgNy4wLjE5NSAgIEF1Z3VzdCAxOTk5ICAgICAg IElLU0QgKyBtb3JlIChDVSBvbmx5IGFzIEs5NSAxLjEuMTgtQ1UpCi0gIDcuMC4xOTYgICAxIEph bnVhcnkgMjAwMCAgICBVbmljb2RlLCBsb3RzIG1vcmUKLQotICAgKCopIE5ldmVyIGZvcm1hbGx5 IHJlbGVhc2VkICg0LjAgd2FzIGEgdG90YWwgcmV3cml0ZSkKLSAgICgxKSBVc2luZyBDLUtlcm1p dCwgMXN0IEVkaXRpb24KLSAgICgyKSBVc2luZyBDLUtlcm1pdCwgMm5kIEVkaXRpb24KLQotQ09O VEVOVFMKLQotIEkuICBbMzZdQy1LRVJNSVQgRE9DVU1FTlRBVElPTgotCi0gSUkuIFszN11ORVcg RkVBVFVSRVMKLQotICAgICAoMCkgWzM4XUlOQ09NUEFUSUJJTElUSUVTIFdJVEggUFJFVklPVVMg UkVMRUFTRVMKLSAgICAgKDEpIFszOV1QUk9HUkFNIEFORCBGSUxFIE1BTkFHRU1FTlQgQU5EIENP TU1BTkRTCi0gICAgICAgICAxLjAuICBbNDBdQnVnIGZpeGVzCi0gICAgICAgICAxLjEuICBbNDFd Q29tbWFuZCBDb250aW51YXRpb24KLSAgICAgICAgIDEuMi4gIFs0Ml1FZGl0b3IgSW50ZXJmYWNl Ci0gICAgICAgICAxLjMuICBbNDNdV2ViIEJyb3dzZXIgYW5kIEZUUCBJbnRlcmZhY2UKLSAgICAg ICAgIDEuNC4gIFs0NF1Db21tYW5kIEVkaXRpbmcKLSAgICAgICAgIDEuNS4gIFs0NV1Db21tYW5k IFN3aXRjaGVzCi0gICAgICAgICAgICAgICAxLjUuMS4gWzQ2XUdlbmVyYWwgU3dpdGNoIFN5bnRh eAotICAgICAgICAgICAgICAgMS41LjIuIFs0N11PcmRlciBhbmQgRWZmZWN0IG9mIFN3aXRjaGVz Ci0gICAgICAgICAgICAgICAxLjUuMy4gWzQ4XURpc3Rpbmd1aXNoaW5nIFN3aXRjaGVzIGZyb20g T3RoZXIgRmllbGRzCi0gICAgICAgICAgICAgICAxLjUuNC4gWzQ5XVN0YW5kYXJkIEZpbGUgU2Vs ZWN0aW9uIFN3aXRjaGVzCi0gICAgICAgICAgICAgICAxLjUuNS4gWzUwXVNldHRpbmcgUHJlZmVy ZW5jZXMgZm9yIERpZmZlcmVudCBDb21tYW5kcwotICAgICAgICAgMS42LiAgWzUxXURhdGVzIGFu ZCBUaW1lcwotICAgICAgICAgMS43LiAgWzUyXVBhcnRpYWwgQ29tcGxldGlvbiBvZiBLZXl3b3Jk cwotICAgICAgICAgMS44LiAgWzUzXUNvbW1hbmQgUmVjYWxsCi0gICAgICAgICAxLjkuICBbNTRd RVhJVCBNZXNzYWdlcwotICAgICAgICAgMS4xMC4gWzU1XU1hbmFnaW5nIEtleWJvYXJkIEludGVy cnVwdGlvbnMKLSAgICAgICAgIDEuMTEuIFs1Nl1UYW1pbmcgdGhlIFdpbGQgQmFja3NsYXNoIC0t IFBhcnQgRGV1eAotICAgICAgICAgICAgICAgMS4xMS4xLiBbNTddQmFja2dyb3VuZAotICAgICAg ICAgICAgICAgMS4xMS4yLiBbNThdS2VybWl0J3MgUXVvdGluZyBSdWxlcwotICAgICAgICAgICAg ICAgMS4xMS4zLiBbNTldUGFzc2luZyBET1MgRmlsZW5hbWVzIGZyb20gS2VybWl0IHRvIFNoZWxs IENvbW1hbmRzCi0gICAgICAgICAgICAgICAxLjExLjQuIFs2MF1Vc2luZyBWYXJpYWJsZXMgdG8g SG9sZCBET1MgRmlsZW5hbWVzCi0gICAgICAgICAgICAgICAxLjExLjUuIFs2MV1QYXNzaW5nIERP UyBGaWxlbmFtZXMgYXMgUGFyYW1ldGVycyB0byBNYWNyb3MKLSAgICAgICAgICAgICAgIDEuMTEu Ni4gWzYyXVBhc3NpbmcgRE9TIEZpbGUgTmFtZXMgZnJvbSBNYWNybyBQYXJhbWV0ZXJzIHRvIHRo ZSBECi1PUyBTaGVsbAotICAgICAgICAgICAgICAgMS4xMS43LiBbNjNdUGFzc2luZyBET1MgRmls ZW5hbWVzIHRvIEtlcm1pdCBmcm9tIHRoZSBTaGVsbAotICAgICAgICAgMS4xMi4gWzY0XURlYnVn Z2luZwotICAgICAgICAgMS4xMy4gWzY1XUxvZ3MKLSAgICAgICAgIDEuMTQuIFs2Nl1BdXRvbWF0 aWMgRmlsZS1UcmFuc2ZlciBQYWNrZXQgUmVjb2duaXRpb24gYXQgdGhlIENvbW1hbmQgUHJvCi1t cHQKLSAgICAgICAgIDEuMTUuIFs2N11UaGUgVFlQRSBDb21tYW5kCi0gICAgICAgICAxLjE2LiBb NjhdVGhlIFJFU0VUIENvbW1hbmQKLSAgICAgICAgIDEuMTcuIFs2OV1UaGUgQ09QWSBhbmQgUkVO QU1FIENvbW1hbmRzCi0gICAgICAgICAxLjE4LiBbNzBdVGhlIE1BTlVBTCBDb21tYW5kCi0gICAg ICAgICAxLjE5LiBbNzFdU3RyaW5nIGFuZCBGaWxlbmFtZSBNYXRjaGluZyBQYXR0ZXJucwotICAg ICAgICAgMS4yMC4gWzcyXU11bHRpcGxlIENvbW1hbmRzIG9uIE9uZSBMaW5lCi0gICAgICAgICAx LjIxLiBbNzNdV2hhdCBEbyBJIEhhdmU/Ci0gICAgICAgICAxLjIyLiBbNzRdR2VuZXJhbGl6ZWQg RmlsZSBJbnB1dCBhbmQgT3V0cHV0Ci0gICAgICAgICAgICAgICAxLjIyLjEuIFs3NV1XaHkgQW5v dGhlciBJL08gU3lzdGVtPwotICAgICAgICAgICAgICAgMS4yMi4yLiBbNzZdVGhlIEZJTEUgQ29t bWFuZAotICAgICAgICAgICAgICAgMS4yMi4zLiBbNzddRklMRSBDb21tYW5kIEV4YW1wbGVzCi0g ICAgICAgICAgICAgICAxLjIyLjQuIFs3OF1DaGFubmVsIE51bWJlcnMKLSAgICAgICAgICAgICAg IDEuMjIuNS4gWzc5XUZJTEUgQ29tbWFuZCBFcnJvciBDb2RlcwotICAgICAgICAgICAgICAgMS4y Mi42LiBbODBdRmlsZSBJL08gVmFyaWFibGVzCi0gICAgICAgICAgICAgICAxLjIyLjcuIFs4MV1G aWxlIEkvTyBGdW5jdGlvbnMKLSAgICAgICAgICAgICAgIDEuMjIuOC4gWzgyXUZpbGUgSS9PIEZ1 bmN0aW9uIEV4YW1wbGVzCi0gICAgICAgICAxLjIzLiBbODNdVGhlIEVYRUMgQ29tbWFuZAotICAg ICAgICAgMS4yNC4gWzg0XUdldHRpbmcgS2V5d29yZCBMaXN0cyB3aXRoICc/JwotICAgICAoMikg Wzg1XU1BS0lORyBBTkQgVVNJTkcgQ09OTkVDVElPTlMKLSAgICAgICAgIDIuMC4gWzg2XVNFVCBM SU5FIGFuZCBTRVQgSE9TVCBDb21tYW5kIFN3aXRjaGVzCi0gICAgICAgICAyLjEuIFs4N11EaWFs aW5nCi0gICAgICAgICAgICAgIDIuMS4xLiBbODhdVGhlIERpYWwgUmVzdWx0IE1lc3NhZ2UKLSAg ICAgICAgICAgICAgMi4xLjIuIFs4OV1Mb25nLURpc3RhbmNlIERpYWxpbmcgQ2hhbmdlcwotICAg ICAgICAgICAgICAyLjEuMy4gWzkwXUZvcmNpbmcgTG9uZy1EaXN0YW5jZSBEaWFsaW5nCi0gICAg ICAgICAgICAgIDIuMS40LiBbOTFdRXhjaGFuZ2UtU3BlY2lmaWMgRGlhbGluZyBEZWNpc2lvbnMK LSAgICAgICAgICAgICAgMi4xLjUuIFs5Ml1DYXV0aW9ucyBhYm91dCBDaGVhcGVzdC1GaXJzdCBE aWFsaW5nCi0gICAgICAgICAgICAgIDIuMS42LiBbOTNdQmxpbmQgRGlhbGluZyAoRGlhbGluZyB3 aXRoIE5vIERpYWx0b25lKQotICAgICAgICAgICAgICAyLjEuNy4gWzk0XVRyaW1taW5nIHRoZSBE aWFsaW5nIERpYWxvZwotICAgICAgICAgICAgICAyLjEuOC4gWzk1XUNvbnRyb2xsaW5nIHRoZSBE aWFsaW5nIFNwZWVkCi0gICAgICAgICAgICAgIDIuMS45LiBbOTZdUHJldGVzdGluZyBQaG9uZSBO dW1iZXIgQ29udmVyc2lvbnMKLSAgICAgICAgICAgICAgMi4xLjEwLiBbOTddR3JlYXRlciBDb250 cm9sIG92ZXIgUGFydGlhbCBEaWFsaW5nCi0gICAgICAgICAgICAgIDIuMS4xMS4gWzk4XU5ldyBE SUFMLXJlbGF0ZWQgVmFyaWFibGVzIGFuZCBGdW5jdGlvbnMKLSAgICAgICAgICAgICAgMi4xLjEy LiBbOTldSW5jcmVhc2VkIEZsZXhpYmlsaXR5IG9mIFBCWCBEaWFsaW5nCi0gICAgICAgICAgICAg IDIuMS4xMy4gWzEwMF1UaGUgRElBTCBtYWNybyAtIExhc3QtTWludXRlIFBob25lIE51bWJlciBD b252ZXJzaW9ucwotICAgICAgICAgICAgICAyLjEuMTQuIFsxMDFdQXV0b21hdGljIFRvbmUvUHVs c2UgRGlhbGluZyBTZWxlY3Rpb24KLSAgICAgICAgICAgICAgMi4xLjE1LiBbMTAyXURpYWwtTW9k aWZpZXIgVmFyaWFibGVzCi0gICAgICAgICAgICAgIDIuMS4xNi4gWzEwM11HaXZpbmcgTXVsdGlw bGUgTnVtYmVycyB0byB0aGUgRElBTCBDb21tYW5kCi0gICAgICAgICAyLjIuIFsxMDRdTW9kZW1z Ci0gICAgICAgICAgICAgIDIuMi4xLiBbMTA1XU5ldyBNb2RlbSBUeXBlcwotICAgICAgICAgICAg ICAyLjIuMi4gWzEwNl1OZXcgTW9kZW0gQ29udHJvbHMKLSAgICAgICAgIDIuMy4gWzEwN11URUxO RVQgYW5kIFJMT0dJTgotICAgICAgICAgICAgICAyLjMuMC4gWzEwOF1CdWcgRml4ZXMKLSAgICAg ICAgICAgICAgMi4zLjEuIFsxMDldVGVsbmV0IEJpbmFyeSBNb2RlIEJ1ZyBBZGp1c3RtZW50cwot ICAgICAgICAgICAgICAyLjMuMi4gWzExMF1WTVMgVUNYIFRlbG5ldCBQb3J0IEJ1ZyBBZGp1c3Rt ZW50Ci0gICAgICAgICAgICAgIDIuMy4zLiBbMTExXVRlbG5ldCBOZXcgRW52aXJvbm1lbnQgT3B0 aW9uCi0gICAgICAgICAgICAgIDIuMy40LiBbMTEyXVRlbG5ldCBMb2NhdGlvbiBPcHRpb24KLSAg ICAgICAgICAgICAgMi4zLjUuIFsxMTNdQ29ubmVjdGluZyB0byBSYXcgVENQIFNvY2tldHMKLSAg ICAgICAgICAgICAgMi4zLjYuIFsxMTRdSW5jb21pbmcgVENQIENvbm5lY3Rpb25zCi0gICAgICAg ICAyLjQuIFsxMTVdVGhlIEVJR0hUQklUIENvbW1hbmQKLSAgICAgICAgIDIuNS4gWzExNl1UaGUg U2VydmljZXMgRGlyZWN0b3J5Ci0gICAgICAgICAyLjYuIFsxMTddQ2xvc2luZyBDb25uZWN0aW9u cwotICAgICAgICAgMi43LiBbMTE4XVVzaW5nIEMtS2VybWl0IHdpdGggRXh0ZXJuYWwgQ29tbXVu aWNhdGlvbiBQcm9ncmFtcwotICAgICAgICAgICAgICAyLjcuMC4gWzExOV1DLUtlcm1pdCBvdmVy IHRuMzI3MCBhbmQgdG41MjUwCi0gICAgICAgICAgICAgIDIuNy4xLiBbMTIwXUMtS2VybWl0IG92 ZXIgVGVsbmV0Ci0gICAgICAgICAgICAgIDIuNy4yLiBbMTIxXUMtS2VybWl0IG92ZXIgUmxvZ2lu Ci0gICAgICAgICAgICAgIDIuNy4zLiBbMTIyXUMtS2VybWl0IG92ZXIgU2VyaWFsIENvbW11bmlj YXRpb24gUHJvZ3JhbXMKLSAgICAgICAgICAgICAgMi43LjQuIFsxMjNdQy1LZXJtaXQgb3ZlciBT ZWN1cmUgTmV0d29yayBDbGllbnRzCi0gICAgICAgICAgICAgIDIuNy40LjEuIFsxMjRdU1NICi0g ICAgICAgICAgICAgIDIuNy40LjIuIFsxMjVdU1NMCi0gICAgICAgICAgICAgIDIuNy40LjMuIFsx MjZdU1JQCi0gICAgICAgICAgICAgIDIuNy40LjQuIFsxMjddU09DS1MKLSAgICAgICAgICAgICAg Mi43LjQuNS4gWzEyOF1LZXJiZXJvcyBhbmQgU1JQCi0gICAgICAgICAyLjguIFsxMjldU2NyaXB0 aW5nIExvY2FsIFByb2dyYW1zCi0gICAgICAgICAyLjkuIFsxMzBdWC4yNSBOZXR3b3JraW5nCi0g ICAgICAgICAgICAgIDIuOS4xLiBbMTMxXUlCTSBBSVhMaW5rL1guMjUgTmV0d29yayBQcm92aWRl ciBJbnRlcmZhY2UgZm9yIEFJWAotICAgICAgICAgICAgICAyLjkuMi4gWzEzMl1IUC1VWCBYLjI1 Ci0gICAgICAgICAyLjEwLiBbMTMzXUFkZGl0aW9uYWwgU2VyaWFsIFBvcnQgQ29udHJvbHMKLSAg ICAgICAgIDIuMTEuIFsxMzRdR2V0dGluZyBBY2Nlc3MgdG8gdGhlIERpYWxvdXQgRGV2aWNlCi0g ICAgICAgICAyLjEyLiBbMTM1XVRoZSBDb25uZWN0aW9uIExvZwotICAgICAgICAgMi4xMy4gWzEz Nl1BdXRvbWF0aWMgQ29ubmVjdGlvbi1TcGVjaWZpYyBGbG93IENvbnRyb2wgU2VsZWN0aW9uCi0g ICAgICAgICAyLjE0LiBbMTM3XVRyYXBwaW5nIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCBhbmQg TG9zcwotICAgICAgICAgMi4xNS4gWzEzOF1Db250YWN0aW5nIFdlYiBTZXJ2ZXJzIHdpdGggdGhl IEhUVFAgQ29tbWFuZAotICAgICAoMykgWzEzOV1URVJNSU5BTCBDT05ORUNUSU9OCi0gICAgICAg ICAzLjEuIFsxNDBdQ09OTkVDVCBDb21tYW5kIFN3aXRjaGVzCi0gICAgICAgICAzLjIuIFsxNDFd VHJpZ2dlcnMKLSAgICAgICAgIDMuMy4gWzE0Ml1UcmFuc3BhcmVudCBQcmludGluZwotICAgICAg ICAgMy40LiBbMTQzXUJpbmFyeSBhbmQgVGV4dCBTZXNzaW9uIExvZ3MKLSAgICAgKDQpIFsxNDRd RklMRSBUUkFOU0ZFUiBBTkQgTUFOQUdFTUVOVAotICAgICAgICAgNC4wLiBbMTQ1XUJ1ZyBGaXhl cywgTWlub3IgQ2hhbmdlcywgYW5kIENsYXJpZmljYXRpb25zCi0gICAgICAgICA0LjEuIFsxNDZd RmlsZS1UcmFuc2ZlciBGaWxlbmFtZSBUZW1wbGF0ZXMKLSAgICAgICAgIDQuMS4xLiBbMTQ3XVRl bXBsYXRlcyBpbiB0aGUgQXMtTmFtZQotICAgICAgICAgNC4xLjIuIFsxNDhdVGVtcGxhdGVzIG9u IHRoZSBDb21tYW5kIExpbmUKLSAgICAgICAgIDQuMS4zLiBbMTQ5XVBvc3QtVHJhbnNmZXIgUmVu YW1pbmcKLSAgICAgICAgIDQuMi4gWzE1MF1GaWxlLVRyYW5zZmVyIFBpcGVzIGFuZCBGaWx0ZXJz Ci0gICAgICAgICA0LjIuMS4gWzE1MV1JbnRyb2R1Y3Rpb24KLSAgICAgICAgIDQuMi4xLjEuIFsx NTJdVGVybWlub2xvZ3kKLSAgICAgICAgIDQuMi4xLjIuIFsxNTNdTm90YXRpb24KLSAgICAgICAg IDQuMi4xLjMuIFsxNTRdU2VjdXJpdHkKLSAgICAgICAgIDQuMi4yLiBbMTU1XUNvbW1hbmRzIGZv ciBUcmFuc2ZlcnJpbmcgZnJvbSBhbmQgdG8gUGlwZXMKLSAgICAgICAgIDQuMi4yLjEuIFsxNTZd U2VuZGluZyBmcm9tIGEgQ29tbWFuZAotICAgICAgICAgNC4yLjIuMi4gWzE1N11SZWNlaXZpbmcg dG8gYSBDb21tYW5kCi0gICAgICAgICA0LjIuMy4gWzE1OF1Vc2luZyBGaWxlLVRyYW5zZmVyIEZp bHRlcnMKLSAgICAgICAgIDQuMi4zLjEuIFsxNTldVGhlIFNFTkQgRmlsdGVyCi0gICAgICAgICA0 LjIuMy4yLiBbMTYwXVRoZSBSRUNFSVZFIEZpbHRlcgotICAgICAgICAgNC4yLjQuIFsxNjFdSW1w bGljaXQgVXNlIG9mIFBpcGVzCi0gICAgICAgICA0LjIuNS4gWzE2Ml1TdWNjZXNzIGFuZCBGYWls dXJlIG9mIFBpcGVkIENvbW1hbmRzCi0gICAgICAgICA0LjIuNi4gWzE2M11DYXV0aW9ucyBhYm91 dCBVc2luZyBQaXBlcyB0byBUcmFuc2ZlciBEaXJlY3RvcnkgVHJlZXMKLSAgICAgICAgIDQuMi43 LiBbMTY0XVBpcGVzIGFuZCBFbmNyeXB0aW9uCi0gICAgICAgICA0LjIuOC4gWzE2NV1Db21tYW5k cyBhbmQgRnVuY3Rpb25zIFJlbGF0ZWQgdG8gUGlwZXMKLSAgICAgICAgIDQuMi44LjEuIFsxNjZd VGhlIE9QRU4gIVJFQUQgYW5kIE9QRU4gIVdSSVRFIENvbW1hbmRzCi0gICAgICAgICA0LjIuOC4y LiBbMTY3XVRoZSBSRURJUkVDVCBDb21tYW5kCi0gICAgICAgICA0LjIuOC4zLiBbMTY4XVJlY2Vp dmluZyBNYWlsIGFuZCBQcmludCBKb2JzCi0gICAgICAgICA0LjIuOC40LiBbMTY5XVBpcGUtUmVs YXRlZCBGdW5jdGlvbnMKLSAgICAgICAgIDQuMy4gWzE3MF1BdXRvbWF0aWMgUGVyLUZpbGUgVGV4 dC9CaW5hcnkgTW9kZSBTd2l0Y2hpbmcKLSAgICAgICAgIDQuMy4xLiBbMTcxXUV4Y2VwdGlvbnMK LSAgICAgICAgIDQuMy4yLiBbMTcyXU92ZXJ2aWV3Ci0gICAgICAgICA0LjMuMy4gWzE3M11Db21t YW5kcwotICAgICAgICAgNC4zLjQuIFsxNzRdRXhhbXBsZXMKLSAgICAgICAgIDQuNC4gWzE3NV1G aWxlIFBlcm1pc3Npb25zCi0gICAgICAgICA0LjQuMS4gWzE3Nl1XaGVuIEFUVFJJQlVURVMgUFJP VEVDVElPTiBpcyBPRkYKLSAgICAgICAgIDQuNC4xLjEuIFsxNzddVW5peAotICAgICAgICAgNC40 LjEuMi4gWzE3OF1WTVMKLSAgICAgICAgIDQuNC4yLiBbMTc5XVdoZW4gQVRUUklCVVRFUyBQUk9U RUNUSU9OIGlzIE9OCi0gICAgICAgICA0LjQuMi4xLiBbMTgwXVN5c3RlbS1TcGVjaWZpYyBQZXJt aXNzaW9ucwotICAgICAgICAgNC40LjIuMS4xLiBbMTgxXVVOSVgKLSAgICAgICAgIDQuNC4yLjEu Mi4gWzE4Ml1WTVMKLSAgICAgICAgIDQuNC4yLjIuIFsxODNdU3lzdGVtLUluZGVwZW5kZW50IFBl cm1pc3Npb25zCi0gICAgICAgICA0LjUuIFsxODRdRmlsZSBNYW5hZ2VtZW50IENvbW1hbmRzCi0g ICAgICAgICA0LjUuMS4gWzE4NV1UaGUgRElSRUNUT1JZIENvbW1hbmQKLSAgICAgICAgIDQuNS4y LiBbMTg2XVRoZSBDRCBhbmQgQkFDSyBDb21tYW5kcwotICAgICAgICAgNC41LjIuMS4gWzE4N11Q YXJzaW5nIEltcHJvdmVtZW50cwotICAgICAgICAgNC41LjIuMi4gWzE4OF1UaGUgQ0RQQVRICi0g ICAgICAgICA0LjUuMy4gWzE4OV1DcmVhdGluZyBhbmQgUmVtb3ZpbmcgRGlyZWN0b3JpZXMKLSAg ICAgICAgIDQuNS40LiBbMTkwXVRoZSBERUxFVEUgYW5kIFBVUkdFIENvbW1hbmRzCi0gICAgICAg ICA0LjYuIFsxOTFdU3RhcnRpbmcgdGhlIFJlbW90ZSBLZXJtaXQgU2VydmVyIEF1dG9tYXRpY2Fs bHkKLSAgICAgICAgIDQuNy4gWzE5Ml1GaWxlLVRyYW5zZmVyIENvbW1hbmQgU3dpdGNoZXMKLSAg ICAgICAgIDQuNy4xLiBbMTkzXVNFTkQgQ29tbWFuZCBTd2l0Y2hlcwotICAgICAgICAgNC43LjIu IFsxOTRdR0VUIENvbW1hbmQgU3dpdGNoZXMKLSAgICAgICAgIDQuNy4zLiBbMTk1XVJFQ0VJVkUg Q29tbWFuZCBTd2l0Y2hlcwotICAgICAgICAgNC44LiBbMTk2XU1pbm9yIEtlcm1pdCBQcm90b2Nv bCBJbXByb3ZlbWVudHMKLSAgICAgICAgIDQuOC4xLiBbMTk3XU11bHRpcGxlIEF0dHJpYnV0ZSBQ YWNrZXRzCi0gICAgICAgICA0LjguMi4gWzE5OF1WZXJ5IFNob3J0IFBhY2tldHMKLSAgICAgICAg IDQuOS4gWzE5OV1XaWxkY2FyZCAvIEZpbGUgR3JvdXAgRXhwYW5zaW9uCi0gICAgICAgICA0Ljku MS4gWzIwMF1JbiBVTklYIEMtS2VybWl0Ci0gICAgICAgICA0LjkuMi4gWzIwMV1JbiBLZXJtaXQg OTUKLSAgICAgICAgIDQuOS4zLiBbMjAyXUluIFZNUywgQU9TL1ZTLCBPUy05LCBWT1MsIGV0Yy4K LSAgICAgICAgIDQuMTAuIFsyMDNdQWRkaXRpb25hbCBQYXRobmFtZSBDb250cm9scwotICAgICAg ICAgNC4xMS4gWzIwNF1SZWN1cnNpdmUgU0VORCBhbmQgR0VUOiBUcmFuc2ZlcnJpbmcgRGlyZWN0 b3J5IFRyZWVzCi0gICAgICAgICA0LjExLjEuIFsyMDVdQ29tbWFuZC1MaW5lIE9wdGlvbnMKLSAg ICAgICAgIDQuMTEuMi4gWzIwNl1UaGUgU0VORCAvUkVDVVJTSVZFIENvbW1hbmQKLSAgICAgICAg IDQuMTEuMy4gWzIwN11UaGUgR0VUIC9SRUNVUlNJVkUgQ29tbWFuZAotICAgICAgICAgNC4xMS40 LiBbMjA4XU5ldyBhbmQgQ2hhbmdlZCBGaWxlIEZ1bmN0aW9ucwotICAgICAgICAgNC4xMS41LiBb MjA5XU1vdmluZyBEaXJlY3RvcnkgVHJlZXMgQmV0d2VlbiBMaWtlIFN5c3RlbXMKLSAgICAgICAg IDQuMTEuNi4gWzIxMF1Nb3ZpbmcgRGlyZWN0b3J5IFRyZWVzIEJldHdlZW4gVW5saWtlIFN5c3Rl bXMKLSAgICAgICAgIDQuMTIuIFsyMTFdV2hlcmUgRGlkIE15IEZpbGUgR28/Ci0gICAgICAgICA0 LjEzLiBbMjEyXUZpbGUgT3V0cHV0IEJ1ZmZlciBDb250cm9sCi0gICAgICAgICA0LjE0LiBbMjEz XUltcHJvdmVkIFJlc3BvbnNpdmVuZXNzCi0gICAgICAgICA0LjE1LiBbMjE0XURvdWJsaW5nIGFu ZCBJZ25vcmluZyBDaGFyYWN0ZXJzIGZvciBUcmFuc3BhcmVuY3kKLSAgICAgICAgIDQuMTYuIFsy MTVdTmV3IEZpbGUtVHJhbnNmZXIgRGlzcGxheSBGb3JtYXRzCi0gICAgICAgICA0LjE3LiBbMjE2 XU5ldyBUcmFuc2FjdGlvbiBMb2cgRm9ybWF0cwotICAgICAgICAgNC4xNy4xLiBbMjE3XVRoZSBC UklFRiBGb3JtYXQKLSAgICAgICAgIDQuMTcuMi4gWzIxOF1UaGUgRlRQIEZvcm1hdAotICAgICAg ICAgNC4xOC4gWzIxOV1VbnByZWZpeGluZyBOVUwKLSAgICAgICAgIDQuMTkuIFsyMjBdQ2xlYXIt Q2hhbm5lbCBQcm90b2NvbAotICAgICAgICAgNC4yMC4gWzIyMV1TdHJlYW1pbmcgUHJvdG9jb2wK LSAgICAgICAgIDQuMjAuMS4gWzIyMl1Db21tYW5kcyBmb3IgU3RyZWFtaW5nCi0gICAgICAgICA0 LjIwLjIuIFsyMjNdRXhhbXBsZXMgb2YgU3RyZWFtaW5nCi0gICAgICAgICA0LjIwLjIuMS4gWzIy NF1TdHJlYW1pbmcgb24gU29ja2V0LXRvLVNvY2tldCBDb25uZWN0aW9ucwotICAgICAgICAgNC4y MC4yLjIuIFsyMjVdU3RyZWFtaW5nIG9uIFRlbG5ldCBDb25uZWN0aW9ucwotICAgICAgICAgNC4y MC4yLjMuIFsyMjZdU3RyZWFtaW5nIHdpdGggTGltaXRlZCBQYWNrZXQgTGVuZ3RoCi0gICAgICAg ICA0LjIwLjIuNC4gWzIyN11TdHJlYW1pbmcgb24gRGlhbHVwIENvbm5lY3Rpb25zCi0gICAgICAg ICA0LjIwLjIuNS4gWzIyOF1TdHJlYW1pbmcgb24gWC4yNSBDb25uZWN0aW9ucwotICAgICAgICAg NC4yMC4zLiBbMjI5XVN0cmVhbWluZyAtIFByZWxpbWluYXJ5IENvbmNsdXNpb25zCi0gICAgICAg ICA0LjIxLiBbMjMwXVRoZSBUUkFOU01JVCBDb21tYW5kCi0gICAgICAgICA0LjIyLiBbMjMxXUNv cGluZyB3aXRoIEZhdWx0eSBLZXJtaXQgSW1wbGVtZW50YXRpb25zCi0gICAgICAgICA0LjIyLjEu IFsyMzJdRmFpbHVyZSB0byBBY2NlcHQgTW9kZXJuIE5lZ290aWF0aW9uIFN0cmluZ3MKLSAgICAg ICAgIDQuMjIuMi4gWzIzM11GYWlsdXJlIHRvIE5lZ290aWF0ZSA4dGgtYml0IFByZWZpeGluZwot ICAgICAgICAgNC4yMi4zLiBbMjM0XUNvcnJ1cHQgRmlsZXMKLSAgICAgICAgIDQuMjIuNC4gWzIz NV1TcHVyaW91cyBDYW5jZWxsYXRpb25zCi0gICAgICAgICA0LjIyLjUuIFsyMzZdU3B1cmlvdXMg UmVmdXNhbHMKLSAgICAgICAgIDQuMjIuNi4gWzIzN11GYWlsdXJlcyBkdXJpbmcgdGhlIERhdGEg VHJhbnNmZXIgUGhhc2UKLSAgICAgICAgIDQuMjIuNy4gWzIzOF1GcmFjdHVyZWQgRmlsZW5hbWVz Ci0gICAgICAgICA0LjIyLjguIFsyMzldQmFkIEZpbGUgRGF0ZXMKLSAgICAgICAgIDQuMjMuIFsy NDBdRmlsZSBUcmFuc2ZlciBSZWNvdmVyeQotICAgICAgICAgNC4yNC4gWzI0MV1GSUxFIENPTExJ U0lPTiBVUERBVEUgQ2xhcmlmaWNhdGlvbgotICAgICAgICAgNC4yNS4gWzI0Ml1BdXRvZG93bmxv YWQgSW1wcm92ZW1lbnRzCi0gICAgICg1KSBbMjQzXUNMSUVOVC9TRVJWRVIKLSAgICAgICAgIDUu MC4gWzI0NF1IaW50cwotICAgICAgICAgNS4xLiBbMjQ1XU5ldyBDb21tYW5kLUxpbmUgT3B0aW9u cwotICAgICAgICAgNS4yLiBbMjQ2XU5ldyBDbGllbnQgQ29tbWFuZHMKLSAgICAgICAgIDUuMy4g WzI0N11OZXcgU2VydmVyIENhcGFiaWxpdGllcwotICAgICAgICAgNS4zLjEuIFsyNDhdQ3JlYXRp bmcgYW5kIFJlbW92aW5nIERpcmVjdG9yaWVzCi0gICAgICAgICA1LjMuMi4gWzI0OV1EaXJlY3Rv cnkgTGlzdGluZ3MKLSAgICAgICAgIDUuNC4gWzI1MF1TeW50YXggZm9yIFJlbW90ZSBGaWxlbmFt ZXMgd2l0aCBFbWJlZGRlZCBTcGFjZXMKLSAgICAgICAgIDUuNS4gWzI1MV1BdXRvbWF0aWMgT3Jp ZW50YXRpb24gTWVzc2FnZXMgdXBvbiBEaXJlY3RvcnkgQ2hhbmdlCi0gICAgICAgICA1LjYuIFsy NTJdTmV3IFNlcnZlciBDb250cm9scwotICAgICAgICAgNS43LiBbMjUzXVRpbWVvdXRzIGR1cmlu ZyBSRU1PVEUgSE9TVCBDb21tYW5kIEV4ZWN1dGlvbgotICAgICAoNikgWzI1NF1JTlRFUk5BVElP TkFMIENIQVJBQ1RFUiBTRVRTCi0gICAgICAgICA2LjAuIFsyNTVdSVNPIDg4NTktMTUgTGF0aW4g QWxwaGFiZXQgOQotICAgICAgICAgNi4xLiBbMjU2XVRoZSBIUC1Sb21hbjggQ2hhcmFjdGVyIFNl dAotICAgICAgICAgNi4yLiBbMjU3XUdyZWVrIENoYXJhY3RlciBTZXRzCi0gICAgICAgICA2LjMu IFsyNThdQWRkaXRpb25hbCBMYXRpbi0yIENoYXJhY3RlciBTZXRzCi0gICAgICAgICA2LjQuIFsy NTldQWRkaXRpb25hbCBDeXJpbGxpYyBDaGFyYWN0ZXIgU2V0cwotICAgICAgICAgNi41LiBbMjYw XUF1dG9tYXRpYyBDaGFyYWN0ZXItU2V0IFN3aXRjaGluZwotICAgICAgICAgNi42LiBbMjYxXVVu aWNvZGUKLSAgICAgICAgIDYuNi4xLiBbMjYyXU92ZXJ2aWV3IG9mIFVuaWNvZGUKLSAgICAgICAg IDYuNi4yLiBbMjYzXVVDUyBCeXRlIE9yZGVyCi0gICAgICAgICA2LjYuMi4gWzI2NF1VQ1MgVHJh bnNmb3JtYXRpb24gRm9ybWF0cwotICAgICAgICAgNi42LjMuIFsyNjVdQ29uZm9ybWFuY2UgTGV2 ZWxzCi0gICAgICAgICA2LjYuNC4gWzI2Nl1SZWxhdGlvbnNoaXAgb2YgVW5pY29kZSB3aXRoIEtl cm1pdCdzIE90aGVyIENoYXJhY3RlciBTZXRzCi0gICAgICAgICA2LjYuNS4gWzI2N11LZXJtaXQn cyBVbmljb2RlIEZlYXR1cmVzCi0gICAgICAgICA2LjYuNS4xLiBbMjY4XUZpbGUgVHJhbnNmZXIK LSAgICAgICAgIDYuNi41LjIuIFsyNjldVGhlIFRSQU5TTEFURSBDb21tYW5kCi0gICAgICAgICA2 LjYuNS4zLiBbMjcwXVRlcm1pbmFsIENvbm5lY3Rpb24KLSAgICAgICAgIDYuNi41LjQuIFsyNzFd VGhlIFRSQU5TTUlUIENvbW1hbmQKLSAgICAgICAgIDYuNi41LjUuIFsyNzJdU3VtbWFyeSBvZiBL ZXJtaXQgVW5pY29kZSBDb21tYW5kcwotICAgICAgICAgNi43LiBbMjczXUNsaWVudC9TZXJ2ZXIg Q2hhcmFjdGVyLVNldCBTd2l0Y2hpbmcKLSAgICAgKDcpIFsyNzRdU0NSSVBUIFBST0dSQU1NSU5H Ci0gICAgICAgICA3LjAuIFsyNzVdQnVnIEZpeGVzCi0gICAgICAgICA3LjEuIFsyNzZdVGhlIElO UFVUIENvbW1hbmQKLSAgICAgICAgIDcuMS4xLiBbMjc3XUlOUFVUIFRpbWVvdXRzCi0gICAgICAg ICA3LjEuMi4gWzI3OF1OZXcgSU5QVVQgQ29udHJvbHMKLSAgICAgICAgIDcuMS4zLiBbMjc5XUlO UFVUIHdpdGggUGF0dGVybiBNYXRjaGluZwotICAgICAgICAgNy4xLjQuIFsyODBdVGhlIElOUFVU IE1hdGNoIFJlc3VsdAotICAgICAgICAgNy4yLiBbMjgxXU5ldyBvciBJbXByb3ZlZCBCdWlsdC1J biBWYXJpYWJsZXMKLSAgICAgICAgIDcuMy4gWzI4Ml1OZXcgb3IgSW1wcm92ZWQgQnVpbHQtSW4g RnVuY3Rpb25zCi0gICAgICAgICA3LjQuIFsyODNdTmV3IElGIENvbmRpdGlvbnMKLSAgICAgICAg IDcuNS4gWzI4NF1Vc2luZyBNb3JlIHRoYW4gVGVuIE1hY3JvIEFyZ3VtZW50cwotICAgICAgICAg Ny42LiBbMjg1XUNsYXJpZmljYXRpb24gb2YgRnVuY3Rpb24gQ2FsbCBTeW50YXgKLSAgICAgICAg IDcuNy4gWzI4Nl1BdXRvZG93bmxvYWQgZHVyaW5nIElOUFVUIENvbW1hbmQgRXhlY3V0aW9uCi0g ICAgICAgICA3LjguIFsyODddQnVpbHQtaW4gSGVscCBmb3IgRnVuY3Rpb25zLgotICAgICAgICAg Ny45LiBbMjg4XVZhcmlhYmxlIEFzc2lnbm1lbnRzCi0gICAgICAgICA3LjkuMS4gWzI4OV1Bc3Np Z25tZW50IE9wZXJhdG9ycwotICAgICAgICAgNy45LjIuIFsyOTBdTmV3IEFzc2lnbm1lbnQgQ29t bWFuZHMKLSAgICAgICAgIDcuMTAuIFsyOTFdQXJyYXlzCi0gICAgICAgICA3LjEwLjEuIFsyOTJd QXJyYXkgSW5pdGlhbGl6ZXJzCi0gICAgICAgICA3LjEwLjIuIFsyOTNdVHVybmluZyBhIFN0cmlu ZyBpbnRvIGFuIEFycmF5IG9mIFdvcmRzCi0gICAgICAgICA3LjEwLjMuIFsyOTRdQXJyYXlzIG9m IEZpbGVuYW1lcwotICAgICAgICAgNy4xMC40LiBbMjk1XUF1dG9tYXRpYyBBcnJheXMKLSAgICAg ICAgIDcuMTAuNS4gWzI5Nl1Tb3J0aW5nIEFycmF5cwotICAgICAgICAgNy4xMC42LiBbMjk3XURp c3BsYXlpbmcgQXJyYXlzCi0gICAgICAgICA3LjEwLjcuIFsyOThdT3RoZXIgQXJyYXkgT3BlcmF0 aW9ucwotICAgICAgICAgNy4xMC44LiBbMjk5XUhpbnRzIGZvciBVc2luZyBBcnJheXMKLSAgICAg ICAgIDcuMTAuOS4gWzMwMF1Eby1JdC1Zb3Vyc2VsZiBBcnJheXMKLSAgICAgICAgIDcuMTAuMTAu IFszMDFdQXNzb2NpYXRpdmUgQXJyYXlzCi0gICAgICAgICA3LjExLiBbMzAyXU9VVFBVVCBDb21t YW5kIEltcHJvdmVtZW50cwotICAgICAgICAgNy4xMi4gWzMwM11GdW5jdGlvbiBhbmQgVmFyaWFi bGUgRGlhZ25vc3RpY3MKLSAgICAgICAgIDcuMTMuIFszMDRdUmV0dXJuIFZhbHVlIG9mIE1hY3Jv cwotICAgICAgICAgNy4xNC4gWzMwNV1UaGUgQVNTRVJULCBGQUlMLCBhbmQgU1VDQ0VFRCBDb21t YW5kcy4KLSAgICAgICAgIDcuMTUuIFszMDZdVXNpbmcgQWxhcm1zCi0gICAgICAgICA3LjE2LiBb MzA3XVBhc3NpbmcgQXJndW1lbnRzIHRvIENvbW1hbmQgRmlsZXMKLSAgICAgICAgIDcuMTcuIFsz MDhdRGlhbG9ncyB3aXRoIFRpbWVkIFJlc3BvbnNlcwotICAgICAgICAgNy4xOC4gWzMwOV1JbmNy ZWFzZWQgRmxleGliaWxpdHkgb2YgU1dJVENIIENhc2UgTGFiZWxzCi0gICAgICAgICA3LjE5LiAi WzMxMF1LZXJiYW5nIiBTY3JpcHRzCi0gICAgICAgICA3LjIwLiBbMzExXUlGIGFuZCBYSUYgU3Rh dGVtZW50IFN5bnRheAotICAgICAgICAgNy4yMC4xLiBbMzEyXVRoZSBJRi9YSUYgRGlzdGluY3Rp b24KLSAgICAgICAgIDcuMjAuMi4gWzMxM11Cb29sZWFuIEV4cHJlc3Npb25zIChUaGUgSUYvV0hJ TEUgQ29uZGl0aW9uKQotICAgICAgICAgNy4yMS4gWzMxNF1TY3JlZW4gRm9ybWF0dGluZyBhbmQg Q3Vyc29yIENvbnRyb2wKLSAgICAgICAgIDcuMjIuIFszMTVdRXZhbHVhdGluZyBBcml0aG1ldGlj IEV4cHJlc3Npb25zCi0gICAgICAgICA3LjIzLiBbMzE2XUZsb2F0aW5nLVBvaW50IEFyaXRobWV0 aWMKLSAgICAgICAgIDcuMjQuIFszMTddVHJhY2luZyBTY3JpcHQgRXhlY3V0aW9uCi0gICAgICAg ICA3LjI1LiBbMzE4XUNvbXBhY3QgU3Vic3RyaW5nIE5vdGF0aW9uCi0gICAgICAgICA3LjI2LiBb MzE5XU5ldyBXQUlUIENvbW1hbmQgT3B0aW9ucwotICAgICAgICAgNy4yNi4xLiBbMzIwXVdhaXRp bmcgZm9yIE1vZGVtIFNpZ25hbHMKLSAgICAgICAgIDcuMjYuMi4gWzMyMV1XYWl0aW5nIGZvciBG aWxlIEV2ZW50cwotICAgICAgICAgNy4yNy4gWzMyMl1SZWxheGVkIEZPUiBhbmQgU1dJVENIIFN5 bnRheAotICAgICAoOCkgWzMyM11VU0lORyBPVEhFUiBGSUxFIFRSQU5TRkVSIFBST1RPQ09MUwot ICAgICAoOSkgWzMyNF1DT01NQU5ELUxJTkUgT1BUSU9OUwotICAgICAgICAgOS4wLiBbMzI1XUV4 dGVuZGVkLUZvcm1hdCBDb21tYW5kLUxpbmUgT3B0aW9ucwotICAgICAgICAgOS4xLiBbMzI2XUNv bW1hbmQgTGluZSBQZXJzb25hbGl0aWVzCi0gICAgICAgICA5LjIuIFszMjddQnVpbHQtaW4gSGVs cCBmb3IgQ29tbWFuZCBMaW5lIE9wdGlvbnMKLSAgICAgICAgIDkuMy4gWzMyOF1OZXcgQ29tbWFu ZC1MaW5lIE9wdGlvbnMKLSAgICAoMTApIFszMjldQy1LRVJNSVQgQU5EIEctS0VSTUlUCi0KLUlJ SS4gWzMzMF1BUFBFTkRJQ0VTCi0KLUlJSS4xLiBbMzMxXUNoYXJhY3RlciBTZXQgVGFibGVzCi1J SUkuMS4xLiBbMzMyXVRoZSBIZXdsZXR0IFBhY2thcmQgUm9tYW44IENoYXJhY3RlciBTZXQKLUlJ SS4xLjIuIFszMzNdR3JlZWsgQ2hhcmFjdGVyIFNldHMKLUlJSS4xLjIuMS4gWzMzNF1UaGUgSVNP IDg4NTktNyBMYXRpbiAvIEdyZWVrIEFscGhhYmV0Ci1JSUkuMS4yLjIuIFszMzVdVGhlIEVMT1Qg OTI3IENoYXJhY3RlciBTZXQKLUlJSS4xLjIuMy4gWzMzNl1QQyBDb2RlIFBhZ2UgODY5Ci1JSUku Mi4gWzMzN11VcGRhdGVkIENvdW50cnkgQ29kZXMKLQotSVYuIFszMzhdRVJSQVRBICYgQ09SUklH RU5EQTogQ29ycmVjdGlvbnMgdG8gIlVzaW5nIEMtS2VybWl0IiAybmQgRWRpdGlvbi4KLVYuIFsz MzldQURESVRJT05BTCBDT1BZUklHSFQgTk9USUNFUwotCi1JLiBDLUtFUk1JVCBET0NVTUVOVEFU SU9OCi0KLSAgIFRoZSB1c2VyIG1hbnVhbCBmb3IgQy1LZXJtaXQgaXM6Ci0KLSAgICAgRnJhbmsg ZGEgQ3J1eiBhbmQgQ2hyaXN0aW5lIE0uIEdpYW5vbmUsIFszNDBdVXNpbmcgQy1LZXJtaXQsIFNl Y29uZAotICAgICBFZGl0aW9uLCBEaWdpdGFsIFByZXNzIC8gQnV0dGVyd29ydGgtSGVpbmVtYW5u LCBXb2J1cm4sIE1BLCAxOTk3LAotICAgICA2MjIgcGFnZXMsIElTQk4gMS01NTU1OC0xNjQtMS4K LQotICAgWzM0MV1DTElDSyBIRVJFIGZvciByZXZpZXdzLgotCi0gICBUaGUgcHJlc2VudCBkb2N1 bWVudCBpcyBhIHN1cHBsZW1lbnQgdG8gVXNpbmcgQy1LZXJtaXQgMm5kIEVkLCBub3QgYQotICAg cmVwbGFjZW1lbnQgZm9yIGl0LgotCi0gICBVUyBzaW5nbGUtY29weSBwcmljZTogJDUyLjk1OyBx dWFudGl0eSBkaXNjb3VudHMgYXZhaWxhYmxlLiBBdmFpbGFibGUKLSAgIGluIGJvb2tzdG9yZXMg b3IgZGlyZWN0bHkgZnJvbSBDb2x1bWJpYSBVbml2ZXJzaXR5OgotCi0gIFRoZSBLZXJtaXQgUHJv amVjdAotICBDb2x1bWJpYSBVbml2ZXJzaXR5Ci0gIDYxMiBXZXN0IDExNXRoIFN0cmVldAotICBO ZXcgWW9yayBOWSAgMTAwMjUtNzc5OQotICBVU0EKLSAgVGVsZXBob25lOiArMSAoMjEyKSA4NTQt MzcwMwotICBGYXg6ICAgICAgICsxICgyMTIpIDY2Mi02NDQyCi0KLSAgIERvbWVzdGljIGFuZCBv dmVyc2VhcyBvcmRlcnMgYWNjZXB0ZWQuIFByaWNlOiBVUyAkNDQuOTUgKFVTLCBDYW5hZGEsCi0g ICBhbmQgTWV4aWNvKS4gU2hpcHBpbmc6ICQ0LjAwIHdpdGhpbiB0aGUgVVNBOyAkMTUuMDAgdG8g YWxsIG90aGVyCi0gICBjb3VudHJpZXMuIE9yZGVycyBtYXkgYmUgcGFpZCBieSBNYXN0ZXJDYXJk IG9yIFZpc2EsIG9yIHByZXBhaWQgYnkKLSAgIGNoZWNrIGluIFVTIGRvbGxhcnMuIEFkZCAkNjUg YmFuayBmZWUgZm9yIGNoZWNrcyBub3QgZHJhd24gb24gYSBVUwotICAgYmFuay4gRG8gbm90IGlu Y2x1ZGUgc2FsZXMgdGF4LiBJbnF1aXJlIGFib3V0IHF1YW50aXR5IGRpc2NvdW50cy4KLQotICAg WW91IGNhbiBhbHNvIG9yZGVyIGJ5IHBob25lIGZyb20gdGhlIHB1Ymxpc2hlciwgRGlnaXRhbCBQ cmVzcyAvCi0gICBbMzQyXUJ1dHRlcndvcnRoLUhlaW5lbWFubiwgd2l0aCBNYXN0ZXJDYXJkLCBW aXNhLCBvciBBbWVyaWNhbiBFeHByZXNzOgotCi0gICsxIDgwMCAzNjYtMjY2NSAgIChXb2J1cm4s IE1hc3NhY2h1c2V0dHMgb2ZmaWNlIGZvciBVU0EgJiBDYW5hZGEpCi0gICs0NCAxODY1IDMxNDYy NyAgIChPeGZvcmQsIEVuZ2xhbmQgZGlzdHJpYnV0aW9uIGNlbnRyZSBmb3IgVUsgJiBFdXJvcGUp Ci0gICs2MSAwMyA5MjQ1IDcxMTEgIChNZWxib3VybmUsIFZpYywgb2ZmaWNlIGZvciBBdXN0cmFs aWEgJiBOWikKLSAgKzY1IDM1Ni0xOTY4ICAgICAgKFNpbmdhcG9yZSBvZmZpY2UgZm9yIEFzaWEp Ci0gICsyNyAoMzEpIDI2ODMxMTEgIChEdXJiYW4gb2ZmaWNlIGZvciBTb3V0aCBBZnJpY2EpCi0K LSAgIEEgWzM0M11HZXJtYW4tbGFuZ3VhZ2UgZWRpdGlvbiBvZiB0aGUgRmlyc3QgRWRpdGlvbiBp cyBhbHNvIGF2YWlsYWJsZToKLQotICAgICBGcmFuayBkYSBDcnV6IGFuZCBDaHJpc3RpbmUgTS4g R2lhbm9uZSwgQy1LZXJtaXQgLSBFaW5m77+9aHJ1bmcgdW5kCi0gICAgIFJlZmVyZW56LCBWZXJs YWcgSGVpbnogSGVpc2UsIEhhbm5vdmVyLCBHZXJtYW55ICgxOTk0KS4gSVNCTgotICAgICAzLTg4 MjI5LTAyMy00LiBEZXV0c2NoIHZvbiBHaXNiZXJ0IFcuIFNlbGtlLiBQcmljZTogRE0gODgsMDAu IFZlcmxhZwotICAgICBIZWlueiBIZWlzZSBHbWJIICYgQ28uIEtHLCBIZWxzdG9yZmVyIFN0cmFz c2UgNywgRC0zMDYyNSBIYW5ub3Zlci4KLSAgICAgVGVsLiArNDkgKDA1IDExKSA1MyA1Mi0wLCBG YXguICs0OSAoMDUgMTEpIDUzIDUyLTEgMjkuCi0KLSAgIFRoZSBbMzQ0XUtlcm1pdCBmaWxlIHRy YW5zZmVyIHByb3RvY29sIGlzIHNwZWNpZmllZCBpbjoKLQotICAgICBGcmFuayBkYSBDcnV6LCBL ZXJtaXQsIEEgRmlsZSBUcmFuc2ZlciBQcm90b2NvbCwgRGlnaXRhbCBQcmVzcywKLSAgICAgQmVk Zm9yZCwgTUEsIDE5ODcsIDM3OSBwYWdlcywgSVNCTiAwLTkzMjM3Ni04OC02LiBVUyBzaW5nbGUt Y29weQotICAgICBwcmljZTogJDM5Ljk1LiBBdmFpbGFiaWxpdHkgYXMgYWJvdmUuCi0KLSAgIE5l d3MgYW5kIGFydGljbGVzIGFib3V0IEtlcm1pdCBzb2Z0d2FyZSBhbmQgcHJvdG9jb2wgYXJlIHB1 Ymxpc2hlZAotICAgcGVyaW9kaWNhbGx5IGluIHRoZSBqb3VybmFsLCBbMzQ1XUtlcm1pdCBOZXdz LiBTdWJzY3JpcHRpb25zIGFyZSBmcmVlOwotICAgY29udGFjdCBDb2x1bWJpYSBVbml2ZXJzaXR5 IGF0IHRoZSBhZGRyZXNzIGFib3ZlLgotCi0gICBPbmxpbmUgbmV3cyBhYm91dCBLZXJtaXQgaXMg cHVibGlzaGVkIGluIHRoZQotICAgWzM0Nl1jb21wLnByb3RvY29scy5rZXJtaXQuYW5ub3VuY2Ug YW5kIFszNDddY29tcC5wcm90b2NvbHMua2VybWl0Lm1pc2MKLSAgIG5ld3Nncm91cHMuCi0KLUlJ LiBORVcgRkVBVFVSRVMKLQotICAgU3VwcG9ydCBmb3IgdGhlIEJlbGwgTGFicyBQbGFuIDkgb3Bl cmF0aW5nIHN5c3RlbSB3YXMgYWRkZWQgdG8gdmVyc2lvbgotICAgNi4wIHRvbyBsYXRlIHRvIGJl IG1lbnRpb25lZCBpbiB0aGUgYm9vayAoYWx0aG91Z2ggaXQgZG9lcyBhcHBlYXIgb24KLSAgIHRo ZSBjb3ZlcikuCi0KLSAgIFNwZWNpZmljIGNoYW5nZXMgYW5kIGFkZGl0aW9ucyBhcmUgZ3JvdXBl ZCB0b2dldGhlciBieSBtYWpvciB0b3BpYywKLSAgIHJvdWdobHkgY29ycmVzcG9uZGluZyB0byB0 aGUgY2hhcHRlcnMgb2YgWzM0OF1Vc2luZyBDLUtlcm1pdC4KLQotMC4gSU5DT01QQVRJQklMSVRJ RVMgV0lUSCBQUkVWSU9VUyBSRUxFQVNFUwotCi0gICAgMS4gQy1LZXJtaXQgNy4wIHVzZXMgRkFT VCBLZXJtaXQgcHJvdG9jb2wgc2V0dGluZ3MgYnkgZGVmYXVsdC4gVGhpcwotICAgICAgIGluY2x1 ZGVzICJ1bnByZWZpeGluZyIgb2YgY2VydGFpbiBjb250cm9sIGNoYXJhY3RlcnMuIEJlY2F1c2Ug b2YKLSAgICAgICB0aGlzLCBmaWxlIHRyYW5zZmVycyB0aGF0IHdvcmtlZCB3aXRoIHByZXZpb3Vz IHJlbGVhc2VzIG1pZ2h0IG5vdAotICAgICAgIHdvcmsgaW4gdGhlIG5ldyByZWxlYXNlIChidXQg aXQgaXMgbW9yZSBsaWtlbHkgdGhhdCB0aGV5IHdpbGwgd29yaywKLSAgICAgICBhbmQgbXVjaCBm YXN0ZXIpLiBJZiBhIHRyYW5zZmVyIGZhaWxzLCB5b3UnbGwgZ2V0IGEKLSAgICAgICBjb250ZXh0 LXNlbnNpdGl2ZSBoaW50IHN1Z2dlc3RpbmcgcG9zc2libGUgY2F1c2VzIGFuZCBjdXJlcy4KLSAg ICAgICBVc3VhbGx5IFNFVCBQUkVGSVhJTkcgQUxMIGRvZXMgdGhlIHRyaWNrLgotICAgIDIuIEMt S2VybWl0IDcuMCB0cmFuc2ZlcnMgZmlsZXMgaW4gQklOQVJZIG1vZGUgYnkgZGVmYXVsdC4gVG8g cmVzdG9yZQotICAgICAgIHRoZSBwcmV2aW91cyBiZWhhdmlvciwgcHV0IFNFVCBGSUxFIFRZUEUg VEVYVCBpbiB5b3VyIEMtS2VybWl0Ci0gICAgICAgaW5pdGlhbGl6YXRpb24gZmlsZS4KLSAgICAz LiBObyBtYXR0ZXIgd2hldGhlciBGSUxFIFRZUEUgaXMgQklOQVJZIG9yIFRFWFQgYnkgZGVmYXVs dCwgQy1LZXJtaXQKLSAgICAgICA3LjAgbm93IHN3aXRjaGVzIGJldHdlZW4gdGV4dCBhbmQgYmlu YXJ5IG1vZGUgYXV0b21hdGljYWxseSBvbiBhCi0gICAgICAgcGVyLWZpbGUgYmFzaXMgYWNjb3Jk aW5nIHRvIHZhcmlvdXMgY3JpdGVyaWEsIGluY2x1ZGluZyAoYSkgd2hpY2gKLSAgICAgICBraW5k IG9mIHBsYXRmb3JtIGlzIG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24gKGlmIGtu b3duKSwKLSAgICAgICAoYikgdGhlIHZlcnNpb24gb2YgS2VybWl0IG9uIHRoZSBvdGhlciBlbmQs IGFuZCAoYykgdGhlIGZpbGUncyBuYW1lCi0gICAgICAgKHNlZSBbMzQ5XVNlY3Rpb24gNCwgZXNw ZWNpYWxseSBbMzUwXTQuMykuIFRvIGRpc2FibGUgdGhpcwotICAgICAgIGF1dG9tYXRpYyBzd2l0 Y2hpbmcgYW5kIHJlc3RvcmUgdGhlIGVhcmxpZXIgYmVoYXZpb3IsIHB1dCBTRVQKLSAgICAgICBU UkFOU0ZFUiBNT0RFIE1BTlVBTCBpbiB5b3VyIEMtS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUu IFRvCi0gICAgICAgZGlzYWJsZSBhdXRvbWF0aWMgc3dpdGNoaW5nIGZvciBhIHBhcnRpY3VsYXIg dHJhbnNmZXIsIGluY2x1ZGUgYQotICAgICAgIC9URVhUIG9yIC9CSU5BUlkgc3dpdGNoIHdpdGgg eW91ciBTRU5EIG9yIEdFVCBjb21tYW5kLgotICAgIDQuIFRoZSBSRVNFTkQgYW5kIFJFR0VUIGNv bW1hbmRzIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvIGJpbmFyeSBtb2RlOwotICAgICAgIHByZXZp b3VzbHkgaWYgUkVTRU5EIG9yIFJFR0VUIHdlcmUgYXR0ZW1wdGVkIHdoZW4gRklMRSBUWVBFIHdh cwotICAgICAgIFRFWFQsIHRoZXNlIGNvbW1hbmRzIHdvdWxkIGZhaWwgaW1tZWRpYXRlbHksIHdp dGggYSBtZXNzYWdlIHRlbGxpbmcKLSAgICAgICB5b3UgdGhleSB3b3JrIG9ubHkgd2hlbiB0aGUg RklMRSBUWVBFIGlzIEJJTkFSWS4gTm93IHRoZXkgc2ltcGx5IGRvCi0gICAgICAgdGhpcyBmb3Ig eW91LiBTZWUgWzM1MV1TZWN0aW9uIDQuMjMgZm9yIGFkZGl0aW9uYWwgKGltcG9ydGFudCkKLSAg ICAgICBpbmZvcm1hdGlvbi4KLSAgICA1LiBTRVQgUFJFRklYSU5HIENBVVRJT1VTIGFuZCBNSU5J TUFMIG5vdyBib3RoIHByZWZpeCBsaW5lZmVlZCAoMTAgYW5kCi0gICAgICAgMTM4KSBpbiBjYXNl IHJsb2dpbiwgc3NoLCBvciBjdSBhcmUgImluIHRoZSBtaWRkbGUiLCBzaW5jZQotICAgICAgIG90 aGVyd2lzZSA8TEY+fiBtaWdodCBhcHBlYXIgaW4gS2VybWl0IHBhY2tldHMsIGFuZCB0aGlzIHdv dWxkCi0gICAgICAgY2F1c2UgcmxvZ2luLCBzc2gsIG9yIGN1IHRvIGRpc2Nvbm5lY3QsIHN1c3Bl bmQsIGVzY2FwZSBiYWNrLCBvcgotICAgICAgIG90aGVyd2lzZSB3cmVjayB0aGUgZmlsZSB0cmFu c2Zlci4gWG9uIGFuZCBYb2ZmIGFyZSBub3cgYWx3YXlzCi0gICAgICAgcHJlZml4ZWQgdG9vLCBl dmVuIHdoZW4gWG9uL1hvZmYgZmxvdyBjb250cm9sIGlzIG5vdCBpbiBlZmZlY3QsCi0gICAgICAg c2luY2UgdW5wcmVmaXhpbmcgdGhlbSBoYXMgcHJvdmVuIGRhbmdlcm91cyBvbiBUQ1AvSVAgY29u bmVjdGlvbnMuCi0gICAgNi4gSW4gVU5JWCwgVk1TLCBXaW5kb3dzLCBhbmQgT1MvMiwgdGhlIERJ UkVDVE9SWSBjb21tYW5kIGlzIGJ1aWx0Ci0gICAgICAgaW50byBDLUtlcm1pdCBpdHNlbGYgcmF0 aGVyIHRoYW4gaW1wbGVtZW50ZWQgYnkgcnVubmluZyBhbiBleHRlcm5hbAotICAgICAgIGNvbW1h bmQgb3IgcHJvZ3JhbS4gVGhlIGJ1aWx0LWluIGNvbW1hbmQgbWlnaHQgbm90IGJlaGF2ZSB0aGUg d2F5Ci0gICAgICAgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGV4dGVybmFsIG9uZSBkaWQsIGJ1dCBt YW55IG9wdGlvbnMgYXJlCi0gICAgICAgYXZhaWxhYmxlIGZvciBjdXN0b21pemF0aW9uLiBPZiBj b3Vyc2UgdGhlIHVuZGVybHlpbmcKLSAgICAgICBwbGF0Zm9ybS1zcGVjaWZpYyBjb21tYW5kIGNh biBzdGlsbCBiZSBhY2Nlc3NlZCB3aXRoICIhIiwgIkAiLCBvcgotICAgICAgICJSVU4iIHdoZXJl dmVyIHRoZSBpbnN0YWxsYXRpb24gZG9lcyBub3QgZm9yYmlkLiBJbiBVTklYLCB0aGUgImxzIgot ICAgICAgIGNvbW1hbmQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGFzICJscyIgaW4gQy1LZXJt aXQuIFNlZQotICAgICAgIFszNTJdU2VjdGlvbiA0LjUuMSBmb3IgZGV0YWlscy4KLSAgICA3LiBT RU5EID8gcHJpbnRzIGEgbGlzdCBvZiBzd2l0Y2hlcyByYXRoZXIgdGhhbiBhIGxpc3Qgb2YgZmls ZW5hbWVzLgotICAgICAgIElmIHlvdSB3YW50IHRvIHNlZSBhIGxpc3Qgb2YgZmlsZW5hbWVzLCB1 c2UgYSAoc3lzdGVtLWRlcGVuZGVudCkKLSAgICAgICBjb25zdHJ1Y3Rpb24gc3VjaCBhcyBTRU5E IC4vPyAoZm9yIFVOSVgsIFdpbmRvd3MsIG9yIE9TLzIpLCBTRU5ECi0gICAgICAgW10/IChWTVMp LCBldGMuIFNlZSBbMzUzXVNlY3Rpb25zIDEuNSBhbmQgWzM1NF00LjcuMS4KLSAgICA4LiBJbiBV TklYLCBPUy05LCBhbmQgS2VybWl0IDk1LCB0aGUgd2lsZGNhcmQgY2hhcmFjdGVycyBpbiBwcmV2 aW91cwotICAgICAgIHZlcnNpb25zIHdlcmUgKiBhbmQgPy4gSW4gQy1LZXJtaXQgNy4wIHRoZXkg YXJlICosID8sIFssIF0sIHssIGFuZAotICAgICAgIH0sIHdpdGggZGFzaCB1c2VkIGluc2lkZSBb XSdzIHRvIGRlbm90ZSByYW5nZXMgYW5kIGNvbW1hIHVzZWQKLSAgICAgICBpbnNpZGUge30gdG8g c2VwYXJhdGUgbGlzdCBlbGVtZW50cy4gSWYgeW91IG5lZWQgdG8gaW5jbHVkZSBhbnkgb2YKLSAg ICAgICB0aGVzZSBjaGFyYWN0ZXJzIGxpdGVyYWxseSBpbiBhIGZpbGVuYW1lLCBwcmVjZWRlIGVh Y2ggb25lIHdpdGgKLSAgICAgICBiYWNrc2xhc2ggKFwpLiBTZWUgWzM1NV1TZWN0aW9uIDQuOS4K LSAgICA5LiBTRVQgUVVJRVQgeyBPTiwgT0ZGIH0gaXMgbm93IG9uIHRoZSBjb21tYW5kIHN0YWNr LCBqdXN0IGxpa2UgU0VUCi0gICAgICAgSU5QVVQgQ0FTRSwgU0VUIENPVU5ULCBTRVQgTUFDUk8g RVJST1IsIGV0YywgYXMgZGVzY3JpYmVkIG9uIHAuNDU4Ci0gICAgICAgb2YgWzM1Nl1Vc2luZyBD LUtlcm1pdCwgMm5kIEVkaXRpb24uIFRoaXMgYWxsb3dzIGFueSBtYWNybyBvcgotICAgICAgIGNv bW1hbmQgZmlsZSB0byBTRVQgUVVJRVQgT04gb3IgT0ZGIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQg c2F2aW5nCi0gICAgICAgYW5kIHJlc3RvcmluZyB0aGUgZ2xvYmFsIFFVSUVUIHZhbHVlLiBGb3Ig ZXhhbXBsZSwgdGhpcyBsZXRzIHlvdQotICAgICAgIHdyaXRlIGEgc2NyaXB0IHRoYXQgdHJpZXMg U0VUIExJTkUgb24gbG90cyBvZiBkZXZpY2VzIHVudGlsIGl0Ci0gICAgICAgZmluZHMgb25lIGZy ZWUgd2l0aG91dCBzcGV3aW5nIG91dCBsb2FkcyBvZiBlcnJvciBtZXNzYWdlcywgYW5kCi0gICAg ICAgYWxzbyB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIGdsb2JhbCBRVUlFVCBzZXR0aW5nLCB3aGF0 ZXZlciBpdCB3YXMuCi0gICAxMC4gQmVjYXVzZSBvZiB0aGUgbmV3ICIuIiBvcGVyYXRvciAod2hp Y2ggaW50cm9kdWNlcyBhc3NpZ25tZW50cyksCi0gICAgICAgbWFjcm9zIHdob3NlIG5hbWVzIGJl Z2luIHdpdGggIi4iIGNhbiBub3QgYmUgaW52b2tlZCAiYnkgbmFtZSIuCi0gICAgICAgSG93ZXZl ciwgdGhleSBzdGlsbCBjYW4gYmUgaW52b2tlZCB3aXRoIERPLgotICAgMTEuIFRoZSBzeW50YXgg b2YgdGhlIEVWQUxVQVRFIGNvbW1hbmQgaGFzIGNoYW5nZWQuIFNlZSBbMzU3XVNlY3Rpb24KLSAg ICAgICA3LjkuMi4gVG8gcmVzdG9yZSB0aGUgcHJldmlvdXMgc3ludGF4LCB1c2UgU0VUIEVWQUxV QVRFIE9MRC4KLSAgIDEyLiBUaGUgXHYoZGlyZWN0b3J5KSB2YXJpYWJsZSBub3cgaW5jbHVkZXMg dGhlIHRyYWlsaW5nIGRpcmVjdG9yeQotICAgICAgIHNlcGFyYXRvcjsgaW4gcHJldmlvdXMgcmVs ZWFzZXMgaXQgZGlkIG5vdC4gVGhpcyBpcyB0byBhbGxvdwotICAgICAgIGNvbnN0cnVjdGlvbnMg c3VjaCBhczoKLSAgY2QgXHYoZGlyKWRhdGEudG1wCi0KLSAgICAgICB0byB3b3JrIGFjcm9zcyBw bGF0Zm9ybXMgdGhhdCBtaWdodCBoYXZlIGRpZmZlcmVudCBkaXJlY3RvcnkKLSAgICAgICBub3Rh dGlvbiwgc3VjaCBhcyBVTklYLCBXaW5kb3dzLCBhbmQgVk1TLgotICAgMTMuIFByaW9yIHRvIEMt S2VybWl0IDcuMCwgdGhlIEZMT1ctQ09OVFJPTCBzZXR0aW5nIHdhcyBnbG9iYWwgYW5kCi0gICAg ICAgc3RpY2t5LiBJbiBDLUtlcm1pdCA3LjAsIHRoZXJlIGlzIGFuIGFycmF5IG9mIGRlZmF1bHQg Zmxvdy1jb250cm9sCi0gICAgICAgdmFsdWVzIGZvciBlYWNoIGtpbmQgb2YgY29ubmVjdGlvbiwg dGhhdCBhcmUgYXBwbGllZCBhdXRvbWF0aWNhbGx5Ci0gICAgICAgYXQgU0VUIExJTkUvUE9SVC9I T1NUIHRpbWUuIFRodXMgYSBTRVQgRkxPVyBjb21tYW5kIGdpdmVuIGJlZm9yZQotICAgICAgIFNF VCBMSU5FL1BPUlQvSE9TVCBpcyBsaWtlbHkgdG8gYmUgdW5kb25lLiBUaGVyZWZvcmUgU0VUIEZM T1cgY2FuCi0gICAgICAgYmUgZ3VhcmFudGVlZCB0byBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCBv bmx5IGlmIGdpdmVuIGFmdGVyIHRoZQotICAgICAgIFNFVCBMSU5FL1BPUlQvSE9TVCBjb21tYW5k LgotICAgMTQuIENoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gd29ya3MgZGlmZmVyZW50bHkgaW4g dGhlIFRSQU5TTUlUIGNvbW1hbmQKLSAgICAgICB3aGVuIChhKSB0aGUgZmlsZSBjaGFyYWN0ZXIt c2V0IGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgbG9jYWwgZW5kIG9mCi0gICAgICAgdGhlIHRlcm1p bmFsIGNoYXJhY3Rlci1zZXQsIG9yIChiKSB3aGVuIHRoZSB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0 Ci0gICAgICAgaXMgVFJBTlNQQVJFTlQuCi0KLTEuIFBST0dSQU0gQU5EIEZJTEUgTUFOQUdFTUVO VCBBTkQgQ09NTUFORFMKLQotMS4wLiBCdWcgRml4ZXMKLQotICAgVGhlIGZvbGxvd2luZyBwYXRj aGVzIHdlcmUgaXNzdWVkIHRvIGNvcnJlY3QgYnVncyBpbiBDLUtlcm1pdCA2LjAuCi0gICBUaGVz ZSBhcmUgZGVzY3JpYmVkIGluIGRldGFpbCBpbiB0aGUgNi4wIFBBVENIRVMgZmlsZS4gQWxsIG9m IHRoZXNlCi0gICBmaXhlcyBoYXZlIGJlZW4gaW5jb3Jwb3JhdGVkIGluIEMtS2VybWl0IDYuMSAo bmV2ZXIgcmVsZWFzZWQgZXhjZXB0IGFzCi0gICBLOTUgMS4xLjE2LTE3KSBhbmQgNy4wLgotCi0g MDAwMSAgIEFsbCBVTklYICAgICAgICAgQy1LZXJtaXQgbWlzaGFuZGxlcyB0aW1lc3RhbXBzIG9u IGZpbGVzIGJlZm9yZSAxOTcwCi0gMDAwMiAgIFNvbGFyaXMgMi41KysgICAgQ29tcGlsYXRpb24g ZXJyb3Igb24gU29sYXJpcyAyLjUgd2l0aCBQcm8gQwotIDAwMDMgICBBbGwgVk1TICAgICAgICAg IENLRVJNSVQuSU5JIEZpeCBmb3IgVk1TCi0gMDAwNCAgIFZNUy9WQVgvVUNYIDIuMCAgQy1LZXJt aXQgNi4wIGNhbid0IFRFTE5FVCBvbiBWQVgvVk1TIHdpdGggVUNYIDIuMAotIDAwMDUgICBBbGwg ICAgICAgICAgICAgIEMtS2VybWl0IE1pZ2h0IFNlbmQgUGFja2V0cyBPdXRzaWRlIFdpbmRvdwot IDAwMDYgICBBbGwgICAgICAgICAgICAgIE1PVkUgZnJvbSBTRU5ELUxJU1QgZG9lcyBub3QgZGVs ZXRlIG9yaWdpbmFsIGZpbGVzCi0gMDAwNyAgIFNvbGFyaXMgMi41KysgICAgSGlnaGVyIHNlcmlh bCBzcGVlZHMgb24gU29sYXJpcyAyLjUKLSAwMDA4ICAgQWxsICAgICAgICAgICAgICBDLUtlcm1p dCBhcHBsaWNhdGlvbiBmaWxlIG5hbWUgY2FuJ3QgY29udGFpbiBzcGFjZXMKLSAwMDA5ICAgQVQm VCA3MzAwIFVOSVhQQyBzZXR1aWQgYW5kIGhhcmR3YXJlIGZsb3ctY29udHJvbCBwcm9ibGVtcwot IDAwMTAgICBMaW51eCBvbiBBbHBoYSAgIFBhdGNoIHRvIG1ha2UgY2t1dGlvLmMgY29tcGlsZSBv biBMaW51eC9BbHBoYQotIDAwMTEgICBPUy05LzY4MDAwIDIuNCAgIFBhdGNoIHRvIG1ha2UgY2s5 Y29uLmMgY29tcGlsZSBvbiBPUy05LzY4MDAwIDIuNAotIDAwMTIgICBNVyBDb2hlcmVudCA0LjIg IFBhdGNoZXMgZm9yIHN1Y2Nlc3NmdWwgYnVpbGQgb24gQ29oZXJlbnQgNC4yCi0gMDAxMyAgIFNJ TklYLVkgNS40MyAgICAgImRlbGF5IiB2YXJpYWJsZSBjb25mbGljdHMgd2l0aCA8c3lzL2Nsb2Nr Lmg+Ci0gMDAxNCAgIFZNUy9WQVgvQ01VLUlQICAgU3ViamVjdDogUGF0Y2hlcyBmb3IgVkFYL1ZN UyA1LnggKyBDTVUtSVAKLSAwMDE1ICAgQWxsICAgICAgICAgICAgICBYRUNITyBkb2Vzbid0IGZs dXNoIGl0cyBvdXRwdXQKLSAwMDE2ICAgVk1TICAgICAgICAgICAgICBDRCBhbmQgb3RoZXIgZGly ZWN0b3J5IG9wZXJhdGlvbnMgbWlnaHQgbm90IHdvcmsKLSAwMDE3ICAgTGludXggMS4yLngrKyAg ICBVc2Ugc3RhbmRhcmQgUE9TSVggaW50ZXJmYWNlIGZvciBoaWdoIHNlcmlhbCBzcGVlZHMKLSAw MDE4ICAgVU5JWCAgICAgICAgICAgICBTRVQgV0lMRENBUkQtRVhQQU5TSU9OIFNIRUxMIGR1bXBz IGNvcmUKLSAwMDE5ICAgQWxsICAgICAgICAgICAgICBIYXllcyBWLjM0IG1vZGVtIGluaXQgc3Ry aW5nIHByb2JsZW0KLSAwMDIwICAgQWxsICAgICAgICAgICAgICBSRUFEIGNvbW1hbmQgZG9lcyBu b3QgZmFpbCBpZiBmaWxlIG5vdCBvcGVuCi0gMDAyMSAgIEFsbCAgICAgICAgICAgICAgUHJvYmxl bXMgd2l0aCBsb25nIGZ1bmN0aW9uIGFyZ3VtZW50cwotIDAwMjIgICBBbGwgICAgICAgICAgICAg IENlcnRhaW4gXGZ1bmN0aW9uKClzIGNhbiBtaXNiZWhhdmUKLSAwMDIzICAgQWxsICAgICAgICAg ICAgICBYIE1PRCAwIGNyYXNoZXMgcHJvZ3JhbQotIDAwMjQgICBBbGwgICAgICAgICAgICAgIElu dGVybmFsIGJ1bGxldHByb29maW5nIGZvciBsb3dlcigpIGZ1bmN0aW9uCi0gMDAyNSAgIE9wZW5C U0QgICAgICAgICAgUmVhbCBPcGVuQlNEIHN1cHBvcnQgZm9yIEMtS2VybWl0IDYuMAotIDAwMjYg ICBBbGwgICAgICAgICAgICAgIEluY29ycmVjdCBjaGVja3MgZm9yIG1hY3JvL2NvbW1hbmQtZmls ZSBuZXN0aW5nIGRlcHRoCi0gMDAyNyAgIEFsbCAgICAgICAgICAgICAgQU5TV0VSIGRvZXNuJ3Qg YXV0b21hdGljYWxseSBDT05ORUNUCi0gMDAyOCAgIEFsbCAgICAgICAgICAgICAgT3ZlcnplYWxv dXMgRVhJVCB3YXJuaW5nCi0gMDAyOSAgIEFsbCAgICAgICAgICAgICAgT1VUUFVUIGRvZXNuJ3Qg ZWNobyB3aGVuIERVUExFWCBpcyBIQUxGCi0gMDAzMCAgIEFsbCAgICAgICAgICAgICAgTWlub3Ig cHJvYmxlbXMgd2l0aCBSRU1PVEUgRElSRUNUT1JZL0RFTEVURS9ldGMKLSAwMDMxICAgQWxsICAg ICAgICAgICAgICBDSEVDSyBjb21tYW5kIGJyb2tlbgotIDAwMzIgICBBbGwgICAgICAgICAgICAg IFByb2JsZW0gd2l0aCBTRVQgVFJBTlNNSVQgRUNITwotIDAwMzMgICBVTklYLCBWTVMsIGV0YyAg IEhFTFAgU0VUIFNFUlZFUiBzYXlzIHRvbyBtdWNoCi0gMDAzNCAgIEFsbCAgICAgICAgICAgICAg UkVBRCBhbmQgIVJFQUQgdG9vIHBpY2t5IGFib3V0IGxpbmUgdGVybWluYXRvcnMKLSAwMDM1ICAg QWxsICAgICAgICAgICAgICBFTkQgZnJvbSBpbnNpZGUgU1dJVENIIGRvZXNuJ3Qgd29yawotIDAw MzYgICBBbGwgICAgICAgICAgICAgIFByb2JsZW0gdGVsbmV0dGluZyB0byBtdWx0aWhvbWVkIGhv c3RzCi0gMDAzNyAgIEFsbCAgICAgICAgICAgICAgUmVkaXJlY3Rpb24gZmFpbHVyZXMgaW4gUkVN T1RFIHh4eCA+IGZpbGUKLQotICAgUkVESVJFQ1Qgd2FzIG1pc3NpbmcgaW4gbWFueSBVTklYIEMt S2VybWl0IGltcGxlbWVudGF0aW9uczsgaW4gdmVyc2lvbgotICAgNy4wLCBpdCBzaG91bGQgYmUg YXZhaWxhYmxlIGluIGFsbCBvZiB0aGVtLgotCi0xLjEuIENvbW1hbmQgQ29udGludWF0aW9uCi0K LSAgIENvbW1lbnRzIHRoYXQgc3RhcnQgd2l0aCAiOyIgb3IgIiMiIGNhbiBubyBsb25nZXIgYmUg Y29udGludWVkLiBJbjoKLQotICA7IHRoaXMgaXMgYSBjb21tZW50IC0KLSAgZWNobyBibGFoCi0K LSAgIHRoZSBFQ0hPIGNvbW1hbmQgd2lsbCBleGVjdXRlLCByYXRoZXIgdGhhbiBiZWluZyB0YWtl biBhcyBhCi0gICBjb250aW51YXRpb24gb2YgdGhlIHByZWNlZGluZyBjb21tZW50IGxpbmUuIFRo aXMgYWxsb3dzIGVhc3kKLSAgICJjb21tZW50aW5nIG91dCIgb2YgY29tbWFuZHMgZnJvbSBtYWNy byBkZWZpbml0aW9ucy4KLQotICAgSG93ZXZlciwgdGhlIHRleHQgb2YgdGhlIENPTU1FTlQgY29t bWFuZCBjYW4gc3RpbGwgYmUgY29udGludWVkIG9udG8KLSAgIHN1YnNlcXVlbnQgbGluZXM6Ci0K LSAgY29tbWVudCB0aGlzIGlzIGEgY29tbWVudCAtCi0gIGVjaG8gYmxhaAotCi0gICBBcyBvZiB2 ZXJzaW9uIDYuMCwgYmFja3NsYXNoIGlzIG5vIGxvbmdlciBhIHZhbGlkIGNvbnRpbnVhdGlvbgot ICAgY2hhcmFjdGVyLiBPbmx5IGh5cGhlbiBzaG91bGQgYmUgdXNlZCBmb3IgY29tbWFuZCBjb250 aW51YXRpb24uIFRoaXMgaXMKLSAgIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gaXNzdWUgY29tbWFu ZHMgbGlrZSAiY2QgYTpcIiBvbiBET1MtbGlrZQotICAgc3lzdGVtcy4KLQotICAgQXMgb2YgdmVy c2lvbiA3LjA6Ci0KLSAgICAgKiBZb3UgY2FuIHF1b3RlIGEgZmluYWwgZGFzaCB0byBwcmV2ZW50 IGl0IGZyb20gYmVpbmcgYSBjb250aW51YXRpb24KLSAgICAgICBjaGFyYWN0ZXI6Ci0gIGVjaG8g Zm9vXC0KLQotICAgICAgIFRoaXMgcHJpbnRzICJmb28tIi4gVGhlIGNvbW1hbmQgaXMgbm90IGNv bnRpbnVlZC4KLSAgICAgKiBZb3UgY2FuIGVudGVyIGNvbW1hbmRzIHN1Y2ggYXM6Ci0gIGVjaG8g Zm9vIC0gOyB0aGlzIGlzIGEgY29tbWVudAotCi0gICAgICAgaW50ZXJhY3RpdmVseSBhbmQgdGhl eSBhcmUgcHJvcGVybHkgdHJlYXRlZCBhcyBjb250aW51ZWQgY29tbWFuZHMuCi0gICAgICAgUHJl dmlvdXNseSB0aGlzIHdvcmtlZCBvbmx5IGluIGNvbW1hbmQgZmlsZXMuCi0KLTEuMi4gRWRpdG9y IEludGVyZmFjZQotCi0gICBTRVQgRURJVE9SIG5hbWUgWyBvcHRpb25zIF0KLSAgICAgICAgICBM ZXRzIHlvdSBzcGVjaWZ5IGEgdGV4dC1lZGl0aW5nIHByb2dyYW0uIFRoZSBuYW1lIGNhbiBiZSBh IGZ1bGx5Ci0gICAgICAgICAgc3BlY2lmaWVkIHBhdGhuYW1lIGxpa2UgL3Vzci9sb2NhbC9iaW4v ZW1hY3MxOS9lbWFjcywgb3IgaXQgY2FuCi0gICAgICAgICAgYmUgdGhlIG5hbWUgb2YgYW55IHBy b2dyYW0gaW4geW91ciBQQVRILCBlLmcuICJzZXQgZWRpdG9yCi0gICAgICAgICAgZW1hY3MiLiBJ biBWTVMsIGl0IG11c3QgYmUgYSBEQ0wgY29tbWFuZCBsaWtlICJlZGl0IiwKLSAgICAgICAgICAi ZWRpdC90cHUiLCAiZW1hY3MiLCBldGMuIElmIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIEVESVRP UiBpcwotICAgICAgICAgIGRlZmluZWQgd2hlbiBLZXJtaXQgc3RhcnRzLCBpdHMgdmFsdWUgaXMg dGhlIGRlZmF1bHQgZWRpdG9yLiBZb3UKLSAgICAgICAgICBjYW4gYWxzbyBzcGVjaWZ5IG9wdGlv bnMgdG8gYmUgaW5jbHVkZWQgb24gdGhlIGVkaXRvciBjb21tYW5kCi0gICAgICAgICAgbGluZS4g UmV0dXJucyB0byBLZXJtaXQgd2hlbiB0aGUgZWRpdG9yIGV4aXRzLgotCi0gICBFRElUIFsgZmls ZW5hbWUgXQotICAgICAgICAgIElmIHRoZSBFRElUIGNvbW1hbmQgaXMgZ2l2ZW4gd2l0aG91dCBh IGZpbGVuYW1lLCB0aGVuIGlmIGEKLSAgICAgICAgICBwcmV2aW91cyBmaWxlbmFtZSBoYWQgYmVl biBnaXZlbiB0byBhbiBFRElUIGNvbW1hbmQsIGl0IGlzIHVzZWQ7Ci0gICAgICAgICAgaWYgbm90 LCB0aGUgZWRpdG9yIGlzIHN0YXJ0ZWQgd2l0aG91dCBhIGZpbGUuIElmIGEgZmlsZW5hbWUgaXMK LSAgICAgICAgICBnaXZlbiwgdGhlIGVkaXRvciBpcyBzdGFydGVkIG9uIHRoYXQgZmlsZSwgYW5k IHRoZSBmaWxlbmFtZSBpcwotICAgICAgICAgIHJlbWVtYmVyZWQgZm9yIHN1YnNlcXVlbnQgRURJ VCBjb21tYW5kcy4KLQotICAgU0hPVyBFRElUT1IKLSAgICAgICAgICBEaXNwbGF5cyB0aGUgZnVs bCBwYXRobmFtZSBvZiB5b3VyIHRleHQgZWRpdG9yLCBpZiBhbnksIGFsb25nCi0gICAgICAgICAg d2l0aCBhbnkgY29tbWFuZCBsaW5lIG9wdGlvbnMsIGFuZCB0aGUgZmlsZSBtb3N0IHJlY2VudGx5 IGVkaXRlZAotICAgICAgICAgIChhbmQgdGhlcmVmb3JlIHRoZSBkZWZhdWx0IGZpbGVuYW1lIGZv ciB5b3VyIG5leHQgRURJVCBjb21tYW5kKS4KLQotICAgUmVsYXRlZCB2YXJpYWJsZXM6IFx2KGVk aXRvciksIFx2KGVkaXRvcHRzKSwgXHYoZWRpdGZpbGUpLgotCi0xLjMuIFdlYiBCcm93c2VyIGFu ZCBGVFAgSW50ZXJmYWNlCi0KLSAgIEMtS2VybWl0IGluY2x1ZGVzIGFuIEZUUCBjb21tYW5kLCB3 aGljaCBzaW1wbHkgcnVucyB0aGUgRlRQIHByb2dyYW07Ci0gICBDLUtlcm1pdCBkb2VzIG5vdCBp bmNsdWRlIGFueSBidWlsdC1pbiBzdXBwb3J0IGZvciBJbnRlcm5ldCBGaWxlCi0gICBUcmFuc2Zl ciBQcm90b2NvbCwgbm9yIGFueSBtZXRob2QgZm9yIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGgg YW4gRlRQCi0gICBzZXJ2ZXIuIEluIHZlcnNpb24gNy4wLCBob3dldmVyLCBDLUtlcm1pdCBsZXRz IHlvdSBzcGVjaWZ5IHlvdXIgRlRQCi0gICBjbGllbnQ6Ci0KLSAgIFNFVCBGVFAtQ0xJRU5UIFsg bmFtZSBbIG9wdGlvbnMgXSBdCi0gICAgICAgICAgVGhlIG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhl IEZUUCBleGVjdXRhYmxlLiBJbiBVTklYLCBXaW5kb3dzLCBvcgotICAgICAgICAgIE9TLzIsIGl0 IGNhbiBiZSB0aGUgZmlsZW5hbWUgb2YgYW55IGV4ZWN1dGFibGUgcHJvZ3JhbSBpbiB5b3VyCi0g ICAgICAgICAgUEFUSCAoZS5nLiAiZnRwLmV4ZSIgaW4gV2luZG93cywgImZ0cCIgaW4gVU5JWCk7 IGVsc2V3aGVyZSAob3IKLSAgICAgICAgICBpZiB5b3UgZG8gbm90IGhhdmUgYSBQQVRIIGRlZmlu aXRpb24pLCBpdCBtdXN0IGJlIHRoZSBmdWxseQotICAgICAgICAgIHNwZWNpZmllZCBwYXRobmFt ZSBvZiB0aGUgRlRQIHByb2dyYW0uIElmIHRoZSBuYW1lIGNvbnRhaW5zIGFueQotICAgICAgICAg IHNwYWNlcywgZW5jbG9zZSBpdCBicmFjZXMuIEluY2x1ZGUgYW55IG9wdGlvbnMgYWZ0ZXIgdGhl Ci0gICAgICAgICAgZmlsZW5hbWU7IHRoZXNlIGRlcGVuZCB0aGUgcGFydGljdWxhciBmdHAgY2xp ZW50LgotCi0gICBUaGUgV2ViIGJyb3dzZXIgaW50ZXJmYWNlIGlzIGNvdmVyZWQgaW4gdGhlIGZv bGxvd2luZyBzdWJzZWN0aW9ucy4KLQotMS4zLjEuIEludm9raW5nIHlvdXIgQnJvd3NlciBmcm9t IEMtS2VybWl0Ci0KLSAgIEJST1dTRSBbIHVybCBdCi0gICAgICAgICAgU3RhcnRzIHlvdXIgcHJl ZmVycmVkIFdlYiBicm93c2VyIG9uIHRoZSBVUkwsIGlmIG9uZSBpcyBnaXZlbiwKLSAgICAgICAg ICBvdGhlcndpc2Ugb24gdGhlIG1vc3QgcmVjZW50bHkgZ2l2ZW4gVVJMLCBpZiBhbnkuIFJldHVy bnMgdG8KLSAgICAgICAgICBLZXJtaXQgd2hlbiB0aGUgYnJvd3NlciBleGl0cy4KLQotICAgU0VU IEJST1dTRVIgWyBuYW1lIFsgb3B0aW9ucyBdIF0KLSAgICAgICAgICBVc2UgdGhpcyBjb21tYW5k IHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgeW91ciBXZWIgYnJvd3NlcgotICAgICAgICAgIHByb2dy YW0sIGZvciBleGFtcGxlOiAic2V0IGJyb3dzZXIgbHlueCIuIFRoZSBuYW1lIG11c3QgYmUgaW4K LSAgICAgICAgICB5b3VyIFBBVEgsIG9yIGVsc2UgaXQgbXVzdCBiZSBhIGZ1bGx5IHNwZWNpZmll ZCBmaWxlbmFtZTsgaW4gVk1TCi0gICAgICAgICAgaXQgbXVzdCBiZSBhIERDTCBjb21tYW5kLgot Ci0gICBTSE9XIEJST1dTRVIKLSAgICAgICAgICBEaXNwbGF5cyB0aGUgY3VycmVudCBicm93c2Vy LCBvcHRpb25zLCBhbmQgbW9zdCByZWNlbnQgVVJMLgotCi0gICBSZWxhdGVkIHZhcmlhYmxlczog XHYoYnJvd3NlciksIFx2KGJyb3dzb3B0cyksIFx2KGJyb3dzdXJsKS4KLQotICAgQWxzbyBzZWUg WzM1OF1TZWN0aW9uIDIuMTU6IENvbnRhY3RpbmcgV2ViIFNlcnZlcnMgd2l0aCB0aGUgSFRUUAot ICAgQ29tbWFuZC4KLQotMS4zLjIuIEludm9raW5nIEMtS2VybWl0IGZyb20geW91ciBCcm93c2Vy Ci0KLSAgIFRoZSBtZXRob2QgZm9yIGRvaW5nIHRoaXMgZGVwZW5kcywgb2YgY291cnNlLCBvbiB5 b3VyIGJyb3dzZXIuIEhlcmUgYXJlCi0gICBzb21lIGV4YW1wbGVzOgotCi0gICBOZXRzY2FwZSBv biBVTklYIChYLWJhc2VkKQotICAgICAgICAgIEluIHRoZSBPcHRpb25zLT5BcHBsaWNhdGlvbnMg c2VjdGlvbiwgc2V0IHlvdXIgVGVsbmV0Ci0gICAgICAgICAgYXBwbGljYXRpb24gdG86Ci0KLSAg eHRlcm0gLWUgL3Vzci9sb2NhbC9iaW4va2VybWl0L2tlcm1pdCAtSiAlaCAlcAotCi0gICAgICAg ICAgKHJlcGxhY2UgIi91c3IvbG9jYWwvYmluL2tlcm1pdC9rZXJtaXQiIGJ5IEMtS2VybWl0J3Mg YWN0dWFsCi0gICAgICAgICAgcGF0aG5hbWUpLiAtSiBpcyBDLUtlcm1pdCdzIGNvbW1hbmQtbGlu ZSBvcHRpb24gdG8gImJlIGxpa2UKLSAgICAgICAgICBUZWxuZXQiOyAlaCBhbmQgJXAgYXJlIE5l dHNjYXBlIHBsYWNlaG9sZGVycyBmb3IgaG9zdG5hbWUgYW5kCi0gICAgICAgICAgcG9ydC4KLQot ICAgTHlueCBvbiBVTklYCi0gICAgICAgICAgQXMgZmFyIGFzIHdlIGtub3csIHRoaXMgY2FuIGJl IGRvbmUgb25seSBhdCBjb21waWxlIHRpbWUuIEFkZAotICAgICAgICAgIHRoZSBmb2xsb3dpbmcg bGluZSB0byB0aGUgTHlueCB1c2VyZGVmcy5oIGZpbGUgYmVmb3JlIGJ1aWxkaW5nCi0gICAgICAg ICAgdGhlIEx5bnggYmluYXJ5OgotCi0gICNkZWZpbmUgVEVMTkVUX0NPTU1BTkQgIi9vcHQvYmlu L2tlcm1pdCAtSiIKLQotICAgICAgICAgIEFuZCB0aGVuIGFkZCBsaW5lcyBsaWtlIHRoZSBmb2xs b3dpbmcgdG8gdGhlIEx5bnguY2ZnIGZpbGU6Ci0KLSAgRE9XTkxPQURFUjpLZXJtaXQgYmluYXJ5 IGRvd25sb2FkOi9vcHQvYmluL2tlcm1pdCAtaSAtViAtcyAlcyAtYSAlczpUUlVFCi0gIERPV05M T0FERVI6S2VybWl0IHRleHQgZG93bmxvYWQ6L29wdC9iaW4va2VybWl0IC1zICVzIC1hICVzOlRS VUUKLQotICBVUExPQURFUjpLZXJtaXQgYmluYXJ5IHVwbG9hZDovb3B0L2Jpbi9rZXJtaXQgLWkg LXIgLWEgJXM6VFJVRQotICBVUExPQURFUjpLZXJtaXQgdGV4dCB1cGxvYWQ6L29wdC9iaW4va2Vy bWl0IC1yIC1hICVzOlRSVUUKLSAgVVBMT0FERVI6S2VybWl0IHRleHQgZ2V0Oi9vcHQvYmluL2tl cm1pdCAtZyAlczpUUlVFCi0gIFVQTE9BREVSOktlcm1pdCBiaW5hcnkgZ2V0Oi9vcHQvYmluL2tl cm1pdCAtaWcgJXM6VFJVRQotCi0gICBCdXQgbm9uZSBvZiB0aGUgYWJvdmUgaXMgbmVjZXNzYXJ5 IGlmIHlvdSBtYWtlIEMtS2VybWl0IHlvdXIgZGVmYXVsdAotICAgVGVsbmV0IGNsaWVudCwgd2hp Y2ggeW91IGNhbiBkbyBieSBtYWtpbmcgYSBzeW1saW5rIGNhbGxlZCAndGVsbmV0JyB0bwotICAg dGhlIEMtS2VybWl0IDcuMCBiaW5hcnkuIFNlZSBbMzU5XVNlY3Rpb24gOS4xIGZvciBkZXRhaWxz LgotCi0xLjQuIENvbW1hbmQgRWRpdGluZwotCi0gICBDdHJsLVcgKCJXb3JkIGRlbGV0ZSIpIHdh cyBjaGFuZ2VkIGluIDcuMCB0byBkZWxldGUgYmFjayB0byB0aGUKLSAgIHByZXZpb3VzIG5vbi1h bHBoYW51bWVyaWMsIHJhdGhlciB0aGFuIGFsbCB0aGUgd2F5IGJhY2sgdG8gdGhlIHByZXZpb3Vz Ci0gICBzcGFjZS4KLQotMS41LiBDb21tYW5kIFN3aXRjaGVzCi0KLSAgIEFzIG9mIHZlcnNpb24g Ny4wLCBDLUtlcm1pdCdzIGNvbW1hbmQgcGFyc2VyIHN1cHBvcnRzIGEgbmV3IHR5cGUgb2YKLSAg IGZpZWxkLCBjYWxsZWQgYSAic3dpdGNoIi4gVGhpcyBpcyBhbiBvcHRpb25hbCBjb21tYW5kIG1v ZGlmaWVyLgotCi0xLjUuMS4gR2VuZXJhbCBTd2l0Y2ggU3ludGF4Ci0KLSAgIEEgc3dpdGNoIGlz IGEga2V5d29yZCBiZWdpbm5pbmcgd2l0aCBhIHNsYXNoICgvKS4gSWYgaXQgdGFrZXMgYSB2YWx1 ZSwKLSAgIHRoZW4gdGhlIHZhbHVlIGlzIGFwcGVuZGVkIHRvIGl0ICh3aXRoIG5vIGludGVydmVu aW5nIHNwYWNlcyksCi0gICBzZXBhcmF0ZWQgYnkgYSBjb2xvbiAoOikgb3IgZXF1YWwgc2lnbiAo PSkuIERlcGVuZGluZyBvbiB0aGUgc3dpdGNoLAotICAgdGhlIHZhbHVlIG1heSBiZSBhIG51bWJl ciwgYSBrZXl3b3JkLCBhIGZpbGVuYW1lLCBhIGRhdGUvdGltZSwgZXRjLgotICAgRXhhbXBsZXM6 Ci0KLSAgc2VuZCBvb2ZhLnR4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTm8gc3dp dGNoZXMKLSAgc2VuZCAvYmluYXJ5IG9vZmEuemlwICAgICAgICAgICAgICAgICAgICAgIDsgQSBz d2l0Y2ggd2l0aG91dCBhIHZhbHVlCi0gIHNlbmQgL3Byb3RvY29sOnptb2RlbSBvb2ZhLnppcCAg ICAgICAgICAgICA7IEEgc3dpdGNoIHdpdGggYSB2YWx1ZSAoOikKLSAgc2VuZCAvcHJvdG9jb2w9 em1vZGVtIG9vZmEuemlwICAgICAgICAgICAgIDsgQSBzd2l0Y2ggd2l0aCBhIHZhbHVlICg9KQot ICBzZW5kIC90ZXh0IC9kZWxldGUgL2FzLW5hbWU6eC54IG9vZmEudHh0ICAgOyBTZXZlcmFsIHN3 aXRjaGVzCi0KLSAgIExpa2Ugb3RoZXIgY29tbWFuZCBmaWVsZHMsIHN3aXRjaGVzIGFyZSBzZXBh cmF0ZWQgZnJvbSBvdGhlciBmaWVsZHMsCi0gICBhbmQgZnJvbSBlYWNoIG90aGVyLCBieSB3aGl0 ZXNwYWNlLCBhcyBzaG93biBpbiB0aGUgZXhhbXBsZXMganVzdAotICAgYWJvdmUuIFlvdSBjYW4g bm90IHB1dCB0aGVtIHRvZ2V0aGVyIGxpa2Ugc286Ci0KLSAgc2VuZC90ZXh0L2RlbGV0ZS9hcy1u YW1lOngueCBvb2ZhLnR4dAotCi0gICAoYXMgeW91IG1pZ2h0IGRvIGluIFZNUyBvciBET1MsIG9y IGFzIHdlIG1pZ2h0IG9uY2UgaGF2ZSBkb25lIGluCi0gICBUT1BTLTEwIG9yIFRPUFMwLTIwLCBv ciBQSVApLiBUaGlzIGlzIHByaW1hcmlseSBkdWUgdG8gYW1iaWd1aXR5Ci0gICBiZXR3ZWVuICIv IiBhcyBzd2l0Y2ggaW50cm9kdWNlciB2ZXJzdXMgIi8iIGFzIFVOSVggZGlyZWN0b3J5Ci0gICBz ZXBhcmF0b3I7IGUuZy4gaW46Ci0KLSAgc2VuZCAvZGVsZXRlL2FzLW5hbWU6Zm9vL3RleHQgb29m YS50eHQKLQotICAgRG9lcyAiZm9vL3RleHQiIG1lYW4gdGhlIGZpbGVuYW1lIGlzICJmb28iIGFu ZCB0aGUgdHJhbnNmZXIgaXMgdG8gYmUgaW4KLSAgIHRleHQgbW9kZSwgb3IgZG9lcyBpdCBtZWFu IHRoZSBmaWxlbmFtZSBpcyAiZm9vL3RleHQiPyBUaGVyZWZvcmUgd2UKLSAgIHJlcXVpcmUgd2hp dGVzcGFjZSBiZXR3ZWVuIHN3aXRjaGVzIHRvIHJlc29sdmUgdGhlIGFtYmlndWl0eS4gKFRoYXQn cwotICAgb25seSBvbmUgb2Ygc2V2ZXJhbCBwb3NzaWJsZSBhbWJpZ3VpdGllcyAtLSBpdCBpcyBh bHNvIGNvbmNlaXZhYmxlIHRoYXQKLSAgIGEgZmlsZSBjYWxsZWQgInRleHQiIGV4aXN0cyBpbiB0 aGUgcGF0aCAiL2RlbGV0ZS9hcy1uYW1lOmZvby8iKS4KLQotICAgSW4gZ2VuZXJhbCwgaWYgYSBz d2l0Y2ggY2FuIHRha2UgYSB2YWx1ZSwgYnV0IHlvdSBvbWl0IGl0LCB0aGVuIGVpdGhlcgotICAg YSByZWFzb25hYmxlIGRlZmF1bHQgdmFsdWUgaXMgc3VwcGxpZWQsIG9yIGFuIGVycm9yIG1lc3Nh Z2UgaXMgcHJpbnRlZDoKLQotICBzZW5kIC9wcmludDotUGxhc2Vyd3JpdGVyIG9vZmEudHh0ICAg ICAgICAgOyBWYWx1ZSBpbmNsdWRlZCA9IHByaW50IG9wdGlvbnMKLSAgc2VuZCAvcHJpbnQgb29m YS50eHQgICAgICAgICAgICAgICAgICAgICAgIDsgVmFsdWUgb21pdHRlZCwgT0sKLSAgc2VuZCAv bWFpbDprZXJtaXRAY29sdW1iaWEuZWR1IG9vZmEudHh0ICAgIDsgVmFsdWUgaW5jbHVkZWQgPSBh ZGRyZXNzCi0gIHNlbmQgL21haWwgb29mYS50eHQgICAgICAgICAgICAgICAgICAgICAgICA7IE5v dCBPSyAtIGFkZHJlc3MgcmVxdWlyZWQKLSAgP0FkZHJlc3MgcmVxdWlyZWQKLQotICAgQ29udGV4 dC1zZW5zaXRpdmUgaGVscCAoPykgYW5kIGNvbXBsZXRpb24gKEVzYyBvciBUYWIpIGFyZSBhdmFp bGFibGUgaW4KLSAgIHRoZSBub3JtYWwgbWFubmVyOgotCi0gIEMtS2VybWl0PiBzZW5kIC9wcj8g U3dpdGNoLCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAgICAvcHJpbnQgL3Byb3RvY29sCi0gIEMt S2VybWl0PiBzZW5kIC9wcm88RVNDPnRvY29sOj8gIEZpbGUtdHJhbnNmZXIgcHJvdG9jb2wsCi0g ICBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAgICBrZXJtaXQgICB4bW9kZW0gICB5bW9kZW0gICB5 bW9kZW0tZyAgIHptb2RlbQotICBDLUtlcm1pdD4gc2VuZCAvcHJvdG9jb2w6azxUQUI+ZXJtaXQK LQotICAgSWYgYSBzd2l0Y2ggdGFrZXMgYSB2YWx1ZSBhbmQgeW91IHVzZSBjb21wbGV0aW9uIG9u IGl0LCBhIGNvbG9uICg6KSBpcwotICAgcHJpbnRlZCBhdCB0aGUgZW5kIG9mIGl0cyBuYW1lIHRv IGluZGljYXRlIHRoaXMuIElmIGl0IGRvZXMgbm90IHRha2UgYQotICAgdmFsdWUsIGEgc3BhY2Ug aXMgcHJpbnRlZC4KLQotICAgQWxzbywgaWYgeW91IHR5cGUgPyBpbiBhIHN3aXRjaCBmaWVsZCwg c3dpdGNoZXMgdGhhdCB0YWtlIHZhbHVlcyBhcmUKLSAgIHNob3duIHdpdGggYSB0cmFpbGluZyBj b2xvbjsgdGhvc2UgdGhhdCBkb24ndCB0YWtlIHZhbHVlcyBhcmUgc2hvd24KLSAgIHdpdGhvdXQg b25lLgotCi0xLjUuMi4gT3JkZXIgYW5kIEVmZmVjdCBvZiBTd2l0Y2hlcwotCi0gICBUaGUgb3Jk ZXIgb2Ygc3dpdGNoZXMgc2hvdWxkIG5vdCBtYXR0ZXIsIGV4Y2VwdCB0aGF0IHRoZXkgYXJlIGV2 YWx1YXRlZAotICAgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBzbyBpZiB5b3UgZ2l2ZSB0d28gc3dpdGNo ZXMgd2l0aCBvcHBvc2l0ZSBlZmZlY3RzLAotICAgdGhlIHJpZ2h0bW9zdCBvbmUgaXMgdXNlZDoK LQotICBzZW5kIC90ZXh0IC9iaW5hcnkgb29mYS56aXAgICAgICAgICAgICAgICAgOyBTZW5kcyBv b2ZhLnppcCBpbiBiaW5hcnkgbW9kZS4KLQotICAgTGlrZSBvdGhlciBjb21tYW5kIGZpZWxkcywg c3dpdGNoZXMgaGF2ZSBubyBlZmZlY3Qgd2hhdHNvZXZlciB1bnRpbCB0aGUKLSAgIGNvbW1hbmQg aXMgZW50ZXJlZCAoYnkgcHJlc3NpbmcgdGhlIFJldHVybiBvciBFbnRlciBrZXkpLiBFdmVuIHRo ZW4sCi0gICBzd2l0Y2hlcyBhZmZlY3Qgb25seSB0aGUgY29tbWFuZCB3aXRoIHdoaWNoIHRoZXkg YXJlIGluY2x1ZGVkOyB0aGV5IGRvCi0gICBub3QgaGF2ZSBnbG9iYWwgZWZmZWN0IG9yIHNpZGUg ZWZmZWN0cy4KLQotMS41LjMuIERpc3Rpbmd1aXNoaW5nIFN3aXRjaGVzIGZyb20gT3RoZXIgRmll bGRzCi0KLSAgIEFsbCBzd2l0Y2hlcyBhcmUgb3B0aW9uYWwuIEEgY29tbWFuZCB0aGF0IHVzZXMg c3dpdGNoZXMgbGV0cyB5b3UgZ2l2ZQotICAgYW55IG51bWJlciBvZiB0aGVtLCBpbmNsdWRpbmcg bm9uZSBhdCBhbGwuIEV4YW1wbGU6Ci0KLSAgc2VuZCAvYmluYXJ5IG9vZmEuemlwCi0gIHNlbmQg L2JpbiAvZGVsZXRlIG9vZmEuemlwCi0gIHNlbmQgL2JpbiAvYXMtbmFtZTptdXBlZW4uemlwIG9v ZmEuemlwCi0gIHNlbmQgb29mYS56aXAKLQotICAgQnV0IGhvdyBkb2VzIEtlcm1pdCBrbm93IHdo ZW4gdGhlIGZpcnN0ICJub24tc3dpdGNoIiBpcyBnaXZlbj8gSXQgaGFzCi0gICBiZWVuIHRvbGQg dG8gbG9vayBmb3IgYm90aCBhIHN3aXRjaCBhbmQgZm9yIHNvbWV0aGluZyBlbHNlLCB0aGUgZGF0 YQotICAgdHlwZSBvZiB0aGUgbmV4dCBmaWVsZCAoZmlsZW5hbWUsIG51bWJlciwgZXRjKS4gSW4g bW9zdCBjYXNlcywgdGhpcwotICAgd29ya3Mgd2VsbC4gQnV0IGNvbmZsaWN0cyBhcmUgbm90IGlt cG9zc2libGUuIFN1cHBvc2UsIGZvciBleGFtcGxlLCBpbgotICAgVU5JWCB0aGVyZSB3YXMgYSBm aWxlIG5hbWVkICJ0ZXh0IiBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4gVGhlCi0gICBjb21t YW5kIHRvIHNlbmQgaXQgd291bGQgYmU6Ci0KLSAgc2VuZCAvdGV4dAotCi0gICBCdXQgQy1LZXJt aXQgd291bGQgdGhpbmsgdGhpcyB3YXMgdGhlICIvdGV4dCIgc3dpdGNoLiBUbyByZXNvbHZlIHRo ZQotICAgY29uZmxpY3QsIHVzZSBicmFjZXM6Ci0KLSAgc2VuZCB7L3RleHR9Ci0KLSAgIG9yIG90 aGVyIGNpcmN1bWxvY3V0aW9ucyBzdWNoIGFzICJzZW5kIC8vdGV4dCIsICJzZW5kIC8uL3RleHQi LCBldGMuCi0KLSAgIFRoZSBvcHBvc2l0ZSBwcm9ibGVtIGNhbiBvY2N1ciBpZiB5b3UgZ2l2ZSBh biBpbGxlZ2FsIHN3aXRjaCB0aGF0Ci0gICBoYXBwZW5zIHRvIG1hdGNoIGEgZGlyZWN0b3J5IG5h bWUuIEZvciBleGFtcGxlOgotCi0gIHNlbmQgL2Ygb29mYS50eHQKLQotICAgVGhlcmUgaXMgbm8g Ii9mIiBzd2l0Y2ggKHRoZXJlIGFyZSBzZXZlcmFsIHN3aXRjaGVzIHRoYXQgYmVnaW4gd2l0aAot ICAgIi9mIiwgc28gIi9mIiBpcyBhbWJpZ3VvdXMpLiBOb3cgc3VwcG9zZSB0aGVyZSBpcyBhbiAi ZiIgZGlyZWN0b3J5IGluCi0gICB0aGUgcm9vdCBkaXJlY3Rvcnk7IHRoZW4gdGhpcyBjb21tYW5k IHdvdWxkIGJlIGludGVycHJldGVkIGFzOgotCi0gICAgIFNlbmQgYWxsIHRoZSBmaWxlcyBpbiB0 aGUgIi9mIiBkaXJlY3RvcnksIGdpdmluZyBlYWNoIG9uZSBhbiBhcy1uYW1lCi0gICAgIG9mICJv b2ZhLnR4dCIuCi0KLSAgIFRoaXMgY291bGQgYmUgYSBtaXN0YWtlLCBvciBpdCBjb3VsZCBiZSBl eGFjdGx5IHdoYXQgeW91IGludGVuZGVkOwotICAgQy1LZXJtaXQgaGFzIG5vIHdheSBvZiB0ZWxs aW5nIHRoZSBkaWZmZXJlbmNlLiBUbyBhdm9pZCBzaXR1YXRpb25zIGxpa2UKLSAgIHRoaXMsIHNw ZWxsIHN3aXRjaGVzIG91dCBpbiBmdWxsIHVudGlsIHlvdSBhcmUgY29tZm9ydGFibGUgZW5vdWdo IHdpdGgKLSAgIHRoZW0gdG8ga25vdyB0aGUgbWluaW11bSBhYmJyZXZpYXRpb24gZm9yIGVhY2gg b25lLiBIaW50OiB1c2UgPyBhbmQKLSAgIGNvbXBsZXRpb24gd2hpbGUgdHlwaW5nIHN3aXRjaGVz IHRvIG9idGFpbiB0aGUgbmVjZXNzYXJ5IGZlZWRiYWNrLgotCi0xLjUuNC4gU3RhbmRhcmQgRmls ZSBTZWxlY3Rpb24gU3dpdGNoZXMKLQotICAgVGhlIGZvbGxvd2luZyBzd2l0Y2hlcyBhcmUgdXNl ZCBvbiBkaWZmZXJlbnQgZmlsZS1vcmllbnRlZCBjb21tYW5kcwotICAgKHN1Y2ggYXMgU0VORCwg RElSRUNUT1JZLCBERUxFVEUsIFBVUkdFKSB0byByZWZpbmUgdGhlIHNlbGVjdGlvbiBvZgotICAg ZmlsZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gc3BlY2lmaWNhdGlvbi4KLQotICAgL0FGVEVSOmRh dGUtdGltZQotICAgICAgICAgIFNlbGVjdCBvbmx5IHRob3NlIGZpbGVzIGhhdmluZyBhIGRhdGUt dGltZSBsYXRlciB0aGFuIHRoZSBvbmUKLSAgICAgICAgICBnaXZlbi4gU2VlIFszNjBdU2VjdGlv biAxLjYgZm9yIGRhdGUtdGltZSBmb3JtYXRzLiBTeW5vbnltOgotICAgICAgICAgIC9TSU5DRS4K LQotICAgL05PVC1BRlRFUjpkYXRlLXRpbWUKLSAgICAgICAgICBTZWxlY3Qgb25seSB0aG9zZSBm aWxlcyBoYXZpbmcgYSBkYXRlLXRpbWUgbm90IGxhdGVyIHRoYW4gKGkuZS4KLSAgICAgICAgICBl YXJsaWVyIG9yIGVxdWFsIHRvKSB0aGUgb25lIGdpdmVuLiBTeW5vbnltOiAvTk9ULVNJTkNFLgot Ci0gICAvQkVGT1JFOmRhdGUtdGltZQotICAgICAgICAgIFNlbGVjdCBvbmx5IHRob3NlIGZpbGVz IGhhdmluZyBhIGRhdGUtdGltZSBlYXJsaWVyIHRoYW4gdGhlIG9uZQotICAgICAgICAgIGdpdmVu LgotCi0gICAvTk9ULUJFRk9SRTpkYXRlLXRpbWUKLSAgICAgICAgICBTZWxlY3Qgb25seSB0aG9z ZSBmaWxlcyBoYXZpbmcgYSBkYXRlLXRpbWUgbm90IGVhcmxpZXIgdGhhbgotICAgICAgICAgIChp LmUuIGxhdGVyIG9yIGVxdWFsIHRvKSB0aGUgb25lIGdpdmVuLgotCi0gICAvRE9URklMRVMKLSAg ICAgICAgICBVTklYIGFuZCBPUy05IG9ubHk6IFRoZSBmaWxlc3BlYyBpcyBhbGxvd2VkIHRvIG1h dGNoIGZpbGVzIHdob3NlCi0gICAgICAgICAgbmFtZXMgc3RhcnQgd2l0aCAoZG90KSBwZXJpb2Qu IE5vcm1hbGx5IHRoZXNlIGZpbGVzIGFyZSBub3QKLSAgICAgICAgICBzaG93bi4KLQotICAgL05P RE9URklMRVMKLSAgICAgICAgICAoVU5JWCBhbmQgT1MtOSBvbmx5KSBEb24ndCBzaG93IGZpbGVz IHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggZG90Ci0gICAgICAgICAgKHBlcmlvZCkuIFRoaXMgaXMg dGhlIG9wcG9zaXRlIG9mIC9ET1RGSUxFUywgYW5kIGlzIHRoZSBkZWZhdWx0LgotICAgICAgICAg IE5vdGUgdGhhdCB3aGVuIGEgZGlyZWN0b3J5IG5hbWUgc3RhcnRzIHdpdGggYSBwZXJpb2QsIHRo ZQotICAgICAgICAgIGRpcmVjdG9yeSBhbmQgKGluIHJlY3Vyc2l2ZSBvcGVyYXRpb25zKSBhbGwg aXRzIHN1YmRpcmVjdG9yaWVzCi0gICAgICAgICAgYXJlIHNraXBwZWQuCi0KLSAgIC9MQVJHRVIt VEhBTjpudW1iZXIKLSAgICAgICAgICBPbmx5IHNlbGVjdCBmaWxlcyBsYXJnZXIgdGhhbiB0aGUg Z2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLgotCi0gICAvU01BTExFUi1USEFOOm51bWJlcgotICAgICAg ICAgIE9ubHkgc2VsZWN0IGZpbGVzIHNtYWxsZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5 dGVzLgotCi0gICAvRVhDRVBUOnBhdHRlcm4KLSAgICAgICAgICBTcGVjaWZpZXMgdGhhdCBhbnkg ZmlsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4sIHdoaWNoCi0gICAgICAgICAgY2Fu IGJlIGEgcmVndWxhciBmaWxlbmFtZSwgb3IgbWF5IGNvbnRhaW4gIioiIGFuZC9vciAiPyIKLSAg ICAgICAgICBtZXRhY2hhcmFjdGVycyAod2lsZGNhcmRzKSwgYXJlIG5vdCB0byBiZSBzZWxlY3Rl ZC4gRXhhbXBsZToKLQotICBzZW5kIC9leGNlcHQ6Ki5sb2cgKi4qCi0KLSAgICAgICAgICBzZW5k cyBhbGwgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGV4Y2VwdCB0aG9zZSB3aXRoIGEK LSAgICAgICAgICBmaWxldHlwZSBvZiAiLmxvZyIuIEFub3RoZXI6Ci0KLSAgc2VuZCAvZXhjZXB0 Oioufip+ICouKgotCi0gICAgICAgICAgc2VuZHMgYWxsIGZpbGVzIGV4Y2VwdCB0aGUgb25lcyB0 aGF0IGxvb2sgbGlrZSBLZXJtaXQgb3IgRU1BQ1MKLSAgICAgICAgICBiYWNrdXAgZmlsZXMgKHN1 Y2ggYXMgIm9vZmEudHh0Ln4xN34iKSAob2YgY291cnNlIHlvdSBjYW4gYWxzbwotICAgICAgICAg IHVzZSB0aGUgL05PQkFDS1VQIHN3aXRjaCBmb3IgdGhpcykuCi0KLSAgICAgICAgICBUaGUgcGF0 dGVybiBtYXRjaGVyIGlzIHRoZSBzYW1lIG9uZSB1c2VkIGJ5IElGIE1BVENIIHN0cmluZwotICAg ICAgICAgIHBhdHRlcm4gKFszNjFdU2VjdGlvbiA3LjQpLCBzbyB5b3UgY2FuIHRlc3QgeW91ciBw YXR0ZXJucyB1c2luZwotICAgICAgICAgIElGIE1BVENILiBJZiB5b3UgbmVlZCB0byBtYXRjaCBh IGxpdGVyYWwgKiBvciA/IChldGMpLCBwcmVjZWRlCi0gICAgICAgICAgaXQgYnkgYSBiYWNrc2xh c2ggKFwpLiBJZiB0aGUgcGF0dGVybiBjb250YWlucyBhbnkgc3BhY2VzLCBpdAotICAgICAgICAg IG11c3QgYmUgZW5jbG9zZWQgaW4gYnJhY2VzOgotCi0gIHNlbmQgL2V4Y2VwdDp7Rm9vIGJhcn0g Ki4qCi0KLSAgICAgICAgICBUaGUgcGF0dGVybiBjYW4gYWxzbyBiZSBhIGxpc3Qgb2YgdXAgdG8g OCBwYXR0ZXJucy4gSW4gdGhpcwotICAgICAgICAgIGNhc2UsIHRoZSBlbnRpcmUgcGF0dGVybiBt dXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcywgYW5kIGVhY2gKLSAgICAgICAgICBzdWItcGF0dGVy biBtdXN0IGFsc28gYmUgZW5jbG9zZWQgaW4gYnJhY2VzOyB0aGlzIGVsaW1pbmF0ZXMgdGhlCi0g ICAgICAgICAgbmVlZCBmb3IgZGVzaWduYXRpbmcgYSBzZXBhcmF0b3IgY2hhcmFjdGVyLCB3aGlj aCBpcyBsaWtlbHkgdG8KLSAgICAgICAgICBhbHNvIGJlIGEgbGVnYWwgZmlsZW5hbWUgY2hhcmFj dGVyIG9uIHNvbWUgcGxhdGZvcm0gb3Igb3RoZXIsCi0gICAgICAgICAgYW5kIHRoZXJlZm9yZSBh IHNvdXJjZSBvZiBjb25mdXNpb24uIFlvdSBtYXkgaW5jbHVkZSBzcGFjZXMKLSAgICAgICAgICBi ZXR3ZWVuIHRoZSBzdWJwYXR0ZXJucyBidXQgdGhleSBhcmUgbm90IG5lY2Vzc2FyeS4gVGhlCi0g ICAgICAgICAgZm9sbG93aW5nIHR3byBjb21tYW5kcyBhcmUgZXF1aXZhbGVudDoKLQotICBzZW5k IC9leGNlcHQ6e3tjayoub30ge2NrKi5jfX0gY2sqLj8KLSAgc2VuZCAvZXhjZXB0Ont7Y2sqLm99 e2NrKi5jfX0gY2sqLj8KLQotICAgICAgICAgIElmIGEgcGF0dGVybiBpcyB0byBpbmNsdWRlIGEg bGl0ZXJhbCBicmFjZSBjaGFyYWN0ZXIsIHByZWNlZGUgaXQKLSAgICAgICAgICB3aXRoICJcIi4g QWxzbyBub3RlIHRoZSBhcHBhcmVudCBjb25mbGljdCBvZiB0aGlzIGxpc3QgZm9ybWF0Ci0gICAg ICAgICAgYW5kIHRoZSBzdHJpbmctbGlzdCBmb3JtYXQgZGVzY3JpYmVkIGluIFszNjJdU2VjdGlv biA0LjkuMS4gSW4KLSAgICAgICAgICBjYXNlIHlvdSB3YW50IHRvIGluY2x1ZGUgYSB3aWxkY2Fy ZCBzdHJpbmctbGlzdCB3aXRoIGJyYWNlcyBvbgotICAgICAgICAgIGl0cyBvdXRlciBlbmRzIGFz IGFuIC9FWENFUFQ6IGFyZ3VtZW50LCBkbyBpdCBsaWtlIHRoaXM6Ci0KLSAgc2VuZCAvZXhjZXB0 Ont7e2NrdXVzci5jLGNrdXVzMi5jLGNrdXVzNi5jfX19IGNrdXVzKi5jCi0KLTEuNS41LiBTZXR0 aW5nIFByZWZlcmVuY2VzIGZvciBEaWZmZXJlbnQgQ29tbWFuZHMKLQotICAgQ2VydGFpbiBvZnQt dXNlZCBjb21tYW5kcyBvZmZlciBsb3RzIG9mIHN3aXRjaGVzIGJlY2F1c2UgZGlmZmVyZW50Ci0g ICBwZW9wbGUgaGF2ZSBkaWZmZXJlbnQgcmVxdWlyZW1lbnRzIG9yIHByZWZlcmVuY2VzLiBGb3Ig ZXhhbXBsZSwgc29tZQotICAgcGVvcGxlIHdhbnQgdG8gYmUgYWJsZSB0byBkZWxldGUgZmlsZXMg d2l0aG91dCBoYXZpbmcgdG8gd2F0Y2ggYSBsaXN0Ci0gICBvZiB0aGUgZGVsZXRlZCBmaWxlcyBz Y3JvbGwgcGFzdCwgd2hpbGUgb3RoZXJzIHdhbnQgdG8gYmUgcHJvbXB0ZWQgZm9yCi0gICBwZXJt aXNzaW9uIHRvIGRlbGV0ZSBlYWNoIGZpbGUuIERpZmZlcmVudCBwZW9wbGUgcHJlZmVyIGRpZmZl cmVudAotICAgZGlyZWN0b3J5LWxpc3Rpbmcgc3R5bGVzLiBBbmQgc28gb24uIFN1Y2ggY29tbWFu ZHMgY2FuIGJlIHRhaWxvcmVkIHdpdGgKLSAgIHRoZSBTRVQgT1BUSU9OUyBjb21tYW5kOgotCi0g ICBTRVQgT1BUSU9OUyBjb21tYW5kIFsgc3dpdGNoIFsgc3dpdGNoIFsgLi4uIF0gXSBdCi0gICAg ICAgICAgU2V0cyBlYWNoIHN3aXRjaCBhcyB0aGUgZGVmYXVsdCBmb3IgdGhlIGdpdmVuIGNvbW1h bmQsIHJlcGxhY2luZwotICAgICAgICAgIHRoZSAiZmFjdG9yeSBkZWZhdWx0Ii4gT2YgY291cnNl IHlvdSBjYW4gYWxzbyBvdmVycmlkZSBhbnkKLSAgICAgICAgICBkZWZhdWx0cyBlc3RhYmxpc2hl ZCBieSB0aGUgU0VUIE9QVElPTlMgY29tbWFuZCBieSBpbmNsdWRpbmcgdGhlCi0gICAgICAgICAg cmVsZXZhbnQgc3dpdGNoZXMgaW4gdGhlIGFmZmVjdGVkIGNvbW1hbmQgYW55IHRpbWUgeW91IGlz c3VlIGl0LgotCi0gICBTSE9XIE9QVElPTlMKLSAgICAgICAgICBMaXN0cyB0aGUgY29tbWFuZHMg dGhhdCBhbGxvd3Mgb3B0aW9uLXNldHRpbmcsIGFuZCB0aGUgb3B0aW9ucwotICAgICAgICAgIGN1 cnJlbnRseSBpbiBlZmZlY3QsIGlmIGFueSwgZm9yIGVhY2guIFN3aXRjaGVzIHRoYXQgaGF2ZQot ICAgICAgICAgIHN5bm9ueW1zIGFyZSBzaG93biB1bmRlciB0aGVpciBwcmltYXJ5IG5hbWU7IGZv ciBleGFtcGxlLiAvTE9HCi0gICAgICAgICAgYW5kIC9WRVJCT1NFIGFyZSBzaG93biBhcyAvTElT VC4KLQotICAgQ29tbWFuZHMgZm9yIHdoaWNoIG9wdGlvbnMgbWF5IGJlIHNldCBpbmNsdWRlIERJ UkVDVE9SWSwgREVMRVRFLCBQVVJHRSwKLSAgIGFuZCBUWVBFLiBFeGFtcGxlczoKLQotICBTRVQg T1BUSU9OUyBESVJFQ1RPUlkgL1BBR0UgL05PQkFDS1VQIC9IRUFESU5HIC9TT1JUOkRBVEUgL1JF VkVSU0UKLSAgU0VUIE9QVElPTlMgREVMRVRFIC9MSVNUIC9OT0hFQURJTkcgL05PUEFHRSAvTk9B U0sgL05PRE9URklMRVMKLSAgU0VUIE9QVElPTlMgVFlQRSAvUEFHRQotCi0gICBOb3QgbmVjZXNz YXJpbHkgYWxsIG9mIGEgY29tbWFuZCdzIHN3aXRjaGVzIGNhbiBiZSBzZXQgYXMgb3B0aW9ucy4g Rm9yCi0gICBleGFtcGxlLCBmaWxlIHNlbGVjdGlvbiBzd2l0Y2hlcywgc2luY2UgdGhlc2Ugd291 bGQgbm9ybWFsbHkgYmUKLSAgIGRpZmZlcmVudCBmb3IgZWFjaCBjb21tYW5kLgotCi0gICBQdXQg dGhlIGRlc2lyZWQgU0VUIE9QVElPTlMgY29tbWFuZHMgaW4geW91ciBDLUtlcm1pdCBjdXN0b21p emF0aW9uCi0gICBmaWxlIGZvciBlYWNoIGNvbW1hbmQgd2hvc2UgZGVmYXVsdCBzd2l0Y2hlcyB5 b3Ugd2FudCB0byBjaGFuZ2UgZXZlcnkKLSAgIHRpbWUgeW91IHJ1biBDLUtlcm1pdC4KLQotMS42 LiBEYXRlcyBhbmQgVGltZXMKLQotICAgU29tZSBjb21tYW5kcyBhbmQgc3dpdGNoZXMgdGFrZSBk YXRlLXRpbWUgdmFsdWVzLCBzdWNoIGFzOgotCi0gIHNlbmQgL2FmdGVyOns4LUZlYi0yMDAwIDEw OjI4OjAxfQotCi0gICBWYXJpb3VzIGRhdGUtdGltZSBmb3JtYXRzIGFyZSBhY2NlcHRhYmxlLiBU aGUgcnVsZXMgZm9yIHRoZSBkYXRlIGFyZToKLQotICAgICAqIFRoZSB5ZWFyIG11c3QgaGF2ZSA0 IGRpZ2l0cy4KLSAgICAgKiBJZiB0aGUgeWVhciBjb21lcyBmaXJzdCwgdGhlIHNlY29uZCBmaWVs ZCBpcyB0aGUgbW9udGguCi0gICAgICogVGhlIGRheSwgbW9udGgsIGFuZCB5ZWFyIG1heSBiZSBz ZXBhcmF0ZWQgYnkgc3BhY2VzLCAvLCAtLCBvcgotICAgICAgIHVuZGVyc2NvcmUuCi0gICAgICog VGhlIG1vbnRoIG1heSBiZSBudW1lcmljICgxID0gSmFudWFyeSkgb3Igc3BlbGxlZCBvdXQgb3IK LSAgICAgICBhYmJyZXZpYXRlZCBpbiBFbmdsaXNoLgotCi0gICBJZiB0aGUgZGF0ZS10aW1lIHN0 cmluZyBjb250YWlucyBhbnkgc3BhY2VzLCBpdCBtdXN0IGJlIGVuY2xvc2VkIGluCi0gICBicmFj ZXMuIEV4YW1wbGVzIG9mIGxlZ2FsIGRhdGVzOgotCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICBJbnRlcnByZXRhdGlvbjoKLSAgMjAwMC1GZWItOCAgICAgICAgICAgICAgICA4IEZlYnJ1YXJ5 IDIwMDAKLSAgezIwMDAgRmViIDh9ICAgICAgICAgICAgICA4IEZlYnJ1YXJ5IDIwMDAKLSAgMjAw MC9GZWIvOCAgICAgICAgICAgICAgICA4IEZlYnJ1YXJ5IDIwMDAKLSAgMjAwMF9GZWJfOCAgICAg ICAgICAgICAgICA4IEZlYnJ1YXJ5IDIwMDAKLSAgMjAwMC0yLTggICAgICAgICAgICAgICAgICA4 IEZlYnJ1YXJ5IDIwMDAKLSAgMjAwMC0wMi0wOCAgICAgICAgICAgICAgICA4IEZlYnJ1YXJ5IDIw MDAKLSAgOC1GZWItMjAwMCAgICAgICAgICAgICAgICA4IEZlYnJ1YXJ5IDIwMDAKLSAgMDgtRmVi LTIwMDAgICAgICAgICAgICAgICA4IEZlYnJ1YXJ5IDIwMDAKLSAgMTIvMjUvMjAwMCAgICAgICAg ICAgICAgICAyNSBEZWNlbWJlciAyMDAwCi0gIDI1LzEyLzIwMDAgICAgICAgICAgICAgICAgMjUg RGVjZW1iZXIgMjAwMAotCi0gICBUaGUgbGFzdCB0d28gZXhhbXBsZXMgc2hvdyB0aGF0IHdoZW4g dGhlIHllYXIgY29tZXMgbGFzdCwgYW5kIHRoZSBtb250aAotICAgaXMgZ2l2ZW4gbnVtZXJpY2Fs bHksIHRoZSBvcmRlciBvZiB0aGUgZGF5IGFuZCBtb250aCBkb2Vzbid0IG1hdHRlciBhcwotICAg bG9uZyBhcyB0aGUgZGF5IGlzIDEzIG9yIGdyZWF0ZXIgKG1tL2RkL3l5eXkgaXMgY29tbW9ubHkg dXNlZCBpbiB0aGUKLSAgIFVTQSwgd2hlcmVhcyBkZC9tbS95eXl5IGlzIHRoZSBub3JtIGluIEV1 cm9wZSkuIEhvd2V2ZXI6Ci0KLSAgMDgvMDIvMjAwMCAgICAgICAgICAgICAgICBJcyBhbWJpZ3Vv dXMgYW5kIHRoZXJlZm9yZSBub3QgYWNjZXB0ZWQuCi0KLSAgIElmIGEgZGF0ZSBpcyBnaXZlbiwg dGhlIHRpbWUgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIDAwOjAwOjAwLiBJZgotICAgdGhl IHRpbWUgaXMgZ2l2ZW4gd2l0aCBhIGRhdGUsIGl0IG11c3QgZm9sbG93IHRoZSBkYXRlLCBzZXBh cmF0ZWQgYnkKLSAgIHNwYWNlLCAvLCAtLCBvciB1bmRlcnNjb3JlLCBhbmQgd2l0aCBob3Vycywg bWludXRlcywgYW5kIHNlY29uZHMKLSAgIHNlcGFyYXRlZCBieSBjb2xvbiAoOikuIEV4YW1wbGU6 Ci0KLSAgMjAwMC1GZWItOCAxMDoyODowMSAgICAgICBSZXByZXNlbnRzIDggRmVicnVhcnkgMjAw MCwgMTA6Mjg6MDFhbQotCi0gICBJZiBhIGRhdGUgaXMgbm90IGdpdmVuLCB0aGUgY3VycmVudCBk YXRlIGlzIHVzZWQgYW5kIGEgdGltZSBpcwotICAgcmVxdWlyZWQuCi0KLSAgIFRpbWUgZm9ybWF0 IGlzIGhoOm1tOnNzIG9yIGhoOm1tIG9yIGhoIGluIDI0LWhvdXIgZm9ybWF0LCBvciBmb2xsb3dl ZAotICAgYnkgImFtIiBvciAicG0iIChvciAiQU0iIG9yICJQTSIpIHRvIGluZGljYXRlIG1vcm5p bmcgb3IgYWZ0ZXJub29uLgotICAgRXhhbXBsZXMgb2YgdGltZXMgdGhhdCBhcmUgYWNjZXB0YWJs ZToKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJwcmV0YXRpb246Ci0gIDM6MjM6 NTYgICAgICAgICAgICAgICAgICAgIDM6MjM6NTZhbQotICAzOjIzOjU2YW0gICAgICAgICAgICAg ICAgICAzOjIzOjU2YW0KLSAgMzoyMzo1NnBtICAgICAgICAgICAgICAgICAgMzoyMzo1NnBtID0g MTU6MjM6NTYKLSAxNToyMzo1NiAgICAgICAgICAgICAgICAgICAgMzoyMzo1NnBtID0gMTU6MjM6 NTYKLSAgMzoyM3BtICAgICAgICAgICAgICAgICAgICAgMzoyMzowMHBtID0gMTU6MjM6MDAKLSAg MzoyM1BNICAgICAgICAgICAgICAgICAgICAgMzoyMzowMHBtID0gMTU6MjM6MDAKLSAgM3BtICAg ICAgICAgICAgICAgICAgICAgICAgMzowMDowMHBtID0gMTU6MDA6MDAKLQotICAgRXhhbXBsZXMg b2YgbGVnYWwgZGF0ZS10aW1lczoKLQotICBzZW5kIC9hZnRlcjp7OCBGZWIgMjAwMCAxMDoyODow MX0KLSAgc2VuZCAvYWZ0ZXI6OF9GZWJfMjAwMF8xMDoyODowMQotICBzZW5kIC9hZnRlcjo4LUZl Yi0yMDAwLzEwOjI4OjAxCi0gIHNlbmQgL2FmdGVyOjIwMDAvMDIvMDgvMTA6Mjg6MDEKLSAgc2Vu ZCAvYWZ0ZXI6MjAwMC8wMi8wOF8xMDoyODowMQotICBzZW5kIC9hZnRlcjoyMDAwLzAyLzA4XzEw OjI4OjAxYW0KLSAgc2VuZCAvYWZ0ZXI6MjAwMC8wMi8wOF8xMDoyODowMXBtCi0gIHNlbmQgL2Fm dGVyOjIwMDAvMDIvMDhfMTA6MjhwbQotICBzZW5kIC9hZnRlcjoyMDAwLzAyLzA4XzEwcG0KLSAg c2VuZCAvYWZ0ZXI6MTA6MDA6MDBwbQotICBzZW5kIC9hZnRlcjoxMDowMHBtCi0gIHNlbmQgL2Fm dGVyOjEwcG0KLSAgc2VuZCAvYWZ0ZXI6MjIKLQotICAgRmluYWxseSwgdGhlcmUgaXMgYSBzcGVj aWFsIGFsbC1udW1lcmljIGZvcm1hdCB5b3UgY2FuIHVzZToKLQotICB5eXl5bW1kZCBoaDptbTpz cwotCi0gICBGb3IgZXhhbXBsZToKLQotICAyMDAwMDIwOCAxMDoyODowMQotCi0gICBUaGlzIGlz IEtlcm1pdCdzIHN0YW5kYXJkIGRhdGUtdGltZSBmb3JtYXQgKGJhc2VkIG9uIElTTyA4NjAxKSwg YW5kIGlzCi0gICBhY2NlcHRlZCAoYW1vbmcgb3RoZXIgZm9ybWF0cykgYnkgYW55IGNvbW1hbmQg b3Igc3dpdGNoIHRoYXQgcmVxdWlyZXMgYQotICAgZGF0ZS10aW1lLCBhbmQgaXMgb3V0cHV0IGJ5 IGFueSBmdW5jdGlvbiB3aG9zZSByZXN1bHQgaXMgYSBjYWxlbmRhcgotICAgZGF0ZS10aW1lLgot Ci0gICBUaGVyZSBhcmUgbm8gb3B0aW9uYWwgcGFydHMgdG8gdGhpcyBmb3JtYXQgYW5kIGl0IG11 c3QgYmUgZXhhY3RseSAxNwotICAgY2hhcmFjdGVycyBsb25nLCBwdW5jdHVhdGVkIGFzIHNob3du IChleGNlcHQgeW91IGNhbiBzdWJzdGl0dXRlCi0gICB1bmRlcnNjb3JlIGZvciBzcGFjZSBpbiBj b250ZXh0cyB3aGVyZSBhIHNpbmdsZSAid29yZCIgaXMgcmVxdWlyZWQpLgotICAgVGhlIHRpbWUg aXMgaW4gMjQtaG91ciBmb3JtYXQgKDIzOjAwOjAwIGlzIDExOjAwcG0pLiBUaGlzIGlzIHRoZSBm b3JtYXQKLSAgIHJldHVybmVkIGJ5IFxmZGF0ZShmaWxlbmFtZSksIHNvIHlvdSBjYW4gYWxzbyB1 c2UgY29uc3RydWN0aW9ucyBsaWtlCi0gICB0aGlzOgotCi0gIHNlbmQgL2FmdGVyOlxmZGF0ZShv b2ZhLnR4dCkKLQotICAgd2hpY2ggbWVhbnMgImFsbCBmaWxlcyBuZXdlciB0aGFuIG9vZmEudHh0 Ii4KLQotICAgQmVzaWRlcyBleHBsaWNpdCBkYXRlcywgeW91IGNhbiBhbHNvIHVzZSB0aGUgYW55 IG9mIHRoZSBmb2xsb3dpbmcKLSAgIHNob3J0Y3V0czoKLQotICAgVE9EQVkKLSAgICAgICAgICBT dGFuZHMgZm9yIHRoZSBjdXJyZW50IGRhdGUgYXQgMDA6MDA6MDAuCi0KLSAgIFRPREFZIDEyOjM0 OjU2Ci0gICAgICAgICAgU3RhbmRzIGZvciB0aGUgY3VycmVudCBkYXRlIGF0IHRoZSBnaXZlbiB0 aW1lLgotCi0gICBZRVNURVJEQVkKLSAgICAgICAgICBTdGFuZHMgZm9yIHllc3RlcmRheSdzIGRh dGUgYXQgMDA6MDA6MDAuIEEgdGltZSBtYXkgYWxzbyBiZQotICAgICAgICAgIGdpdmVuLgotCi0g ICBUT01PUlJPVwotICAgICAgICAgIFN0YW5kcyBmb3IgdG9tb3Jyb3cncyBkYXRlIGF0IDAwOjAw OjAwLiBBIHRpbWUgbWF5IGFsc28gYmUKLSAgICAgICAgICBnaXZlbi4KLQotICAgKyBudW1iZXIg eyBEQVlTLCBXRUVLUywgTU9OVEhTLCBZRUFSUyB9IFsgdGltZSBdCi0gICAgICAgICAgSXMgcmVw bGFjZWQgYnkgdGhlIGZ1dHVyZSBkYXRlIGluZGljYXRlZCwgcmVsYXRpdmUgdG8gdGhlCi0gICAg ICAgICAgY3VycmVudCBkYXRlLiBJZiB0aGUgdGltZSBpcyBvbWl0dGVkLCAwMDowMDowMCBpcyB1 c2VkLgotICAgICAgICAgIEV4YW1wbGVzOiArM2RheXMsICsyd2Vla3MsICsxeWVhciwgKzM3bW9u dGhzLgotCi0gICAtIG51bWJlciB7IERBWVMsIFdFRUtTLCBNT05USFMsIFlFQVJTIH0gWyB0aW1l IF0KLQotICAgICAgICAgIElzIHJlcGxhY2VkIGJ5IHRoZSBwYXN0IGRhdGUgaW5kaWNhdGVkLCBy ZWxhdGl2ZSB0byB0aGUgY3VycmVudAotICAgICAgICAgIGRhdGUuIElmIHRoZSB0aW1lIGlzIG9t aXR0ZWQsIDAwOjAwOjAwIGlzIHVzZWQuCi0KLSAgIFRoZSB0aW1lIGNhbiBiZSBzZXBhcmF0ZWQg ZnJvbSB0aGUgZGF0ZSBzaG9ydGN1dCBieSBhbnkgb2YgdGhlIHNhbWUKLSAgIHNlcGFyYXRvcnMg dGhhdCBhcmUgYWxsb3dlZCBmb3IgZXhwbGljaXQgZGF0ZS10aW1lczogc3BhY2UsIGh5cGhlbiwK LSAgIHNsYXNoLCBwZXJpb2QsIG9yIHVuZGVyc2NvcmUuIEluIHN3aXRjaGVzIGFuZCBvdGhlciBz cGFjZS1kZWxpbWl0ZWQKLSAgIGZpZWxkcywgdXNlIG5vbi1zcGFjZXMgdG8gc2VwYXJhdGUgZGF0 ZS90aW1lIGZpZWxkcywgb3IgZW5jbG9zZSB0aGUKLSAgIGRhdGUtdGltZSBpbiBicmFjZXMsIGUu Zy46Ci0KLSAgcHVyZ2UgL2JlZm9yZTotNGRheXNfMTI6MDA6MDAKLSAgcHVyZ2UgL2JlZm9yZTp7 LSA0IGRheXMgMTI6MDA6MDB9Ci0KLSAgIE9mIGNvdXJzZSB5b3UgY2FuIGFsc28gdXNlIHZhcmlh YmxlczoKLQotICBkZWZpbmUgXCVuIDQzCi0gIHB1cmdlIC9iZWZvcmU6LVwlbmRheXNfMTI6MDA6 MDAKLQotICAgU2hvcnRjdXQgbmFtZXMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIGFueSBsZW5ndGgg dGhhdCBzdGlsbAotICAgZGlzdGluZ3Vpc2hlcyB0aGVtIGZyb20gYW55IG90aGVyIG5hbWUgdGhh dCBjYW4gYXBwZWFyIGluIHRoZSBzYW1lCi0gICBjb250ZXh0LCBlLmcuICJUT0QiIGZvciB0b2Rh eSwgIlkiIGZvciB5ZXN0ZXJkYXkuIEFsc28sIHRoZSBzcGVjaWFsCi0gICBhYmJyZXZpYXRpb24g IndrcyIgaXMgYWNjZXB0ZWQgZm9yIFdFRUtTLCBhbmQgInlycyIgZm9yICJZRUFSUyIuCi0KLSAg IChUbyBzZWUgaG93IHRvIHNwZWNpZnkgZGF0ZXMgcmVsYXRpdmUgdG8gYSBzcGVjaWZpYyBkYXRl LCByYXRoZXIgdGhhbgotICAgdGhlIGN1cnJlbnQgb25lLCBzZWUgdGhlIFszNjNdXGZtamQoKSBm dW5jdGlvbiBkZXNjcmlwdGlvbiBiZWxvdy4pCi0KLSAgIFlvdSBjYW4gY2hlY2sgZGF0ZSBmb3Jt YXRzIHdpdGggdGhlIERBVEUgY29tbWFuZC4gREFURSBieSBpdHNlbGYgcHJpbnRzCi0gICB0aGUg Y3VycmVudCBkYXRlIGFuZCB0aW1lIGluIHN0YW5kYXJkIGZvcm1hdDogeXl5eW1tZGQgaGg6bW06 c3MuIERBVEUKLSAgIGZvbGxvd2VkIGJ5IGEgZGF0ZSBhbmQvb3IgdGltZSAoaW5jbHVkaW5nIHNo b3J0Y3V0cykgY29udmVydHMgaXQgdG8KLSAgIHN0YW5kYXJkIGZvcm1hdCBpZiBpdCBjYW4gdW5k ZXJzdGFuZCBpdCwgb3RoZXJ3aXNlIGl0IHByaW50cyBhbiBlcnJvcgotICAgbWVzc2FnZS4KLQot ICAgVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBkZWFsIHdpdGggZGF0ZXMg YW5kIHRpbWVzOyBhbnkKLSAgIGZ1bmN0aW9uIGFyZ3VtZW50IGRlc2lnbmF0ZWQgYXMgImRhdGUt dGltZSIgY2FuIGJlIGluIGFueSBvZiB0aGUKLSAgIGZvcm1hdHMgZGVzY3JpYmVkIGFib3ZlLgot Ci0gICBcdihkYXkpCi0gICAgICAgICAgVGhlIGZpcnN0IHRocmVlIGxldHRlcnMgb2YgdGhlIEVu Z2xpc2ggd29yZCBmb3IgdGhlIGN1cnJlbnQgZGF5Ci0gICAgICAgICAgb2YgdGhlIHdlZWssIGUu Zy4gIldlZCIuCi0KLSAgIFxmZGF5KGRhdGUtdGltZSkKLSAgICAgICAgICBUaGUgZmlyc3QgdGhy ZWUgbGV0dGVycyBvZiB0aGUgRW5nbGlzaCB3b3JkIGZvciBkYXkgb2YgdGhlIHdlZWsKLSAgICAg ICAgICBvZiB0aGUgZ2l2ZW4gZGF0ZS4gSWYgYSB0aW1lIGlzIGluY2x1ZGVkLCBpdCBpcyBpZ25v cmVkLgotICAgICAgICAgIEV4YW1wbGU6IFxmZGF5KDggRmViIDE5ODgpID0gIk1vbiIuCi0KLSAg IFx2KG5kYXkpCi0gICAgICAgICAgVGhlIG51bWVyaWMgZGF5IG9mIHRoZSB3ZWVrOiAwID0gU3Vu ZGF5LCAxID0gTW9uZGF5LCAuLi4sIDYgPQotICAgICAgICAgIFNhdHVyZGF5LgotCi0gICBcZm5k YXkoZGF0ZS10aW1lKQotICAgICAgICAgIFRoZSBudW1lcmljIGRheSBvZiB0aGUgd2VlayBmb3Ig dGhlIGdpdmVuIGRhdGUuIElmIGEgdGltZSBpcwotICAgICAgICAgIGluY2x1ZGVkLCBpdCBpcyBp Z25vcmVkLiBFeGFtcGxlOiBcZm5kYXkoOCBGZWIgMTk4OCkgPSAiMSIuCi0KLSAgIFx2KGRhdGUp Ci0gICAgICAgICAgVGhlIGN1cnJlbnQgZGF0ZSBhcyBkZCBtbW0geXl5eSwgZS5nLiAiMDggRmVi IDIwMDAiIChhcyBpbiB0aGlzCi0gICAgICAgICAgZXhhbXBsZSwgYSBsZWFkaW5nIHplcm8gaXMg c3VwcGxpZWQgZm9yIGRheS1vZi1tb250aCBsZXNzIHRoYW4KLSAgICAgICAgICAxMCkuCi0KLSAg IFx2KG5kYXRlKQotICAgICAgICAgIFRoZSBjdXJyZW50IGRhdGUgaW4gbnVtZXJpYyBmb3JtYXQ6 IHl5eXltbWRkLCBlLmcuICIyMDAwMDIwOCIuCi0KLSAgIFx2KHRpbWUpCi0gICAgICAgICAgVGhl IGN1cnJlbnQgdGltZSBhcyBoaDptbTpzcywgZS5nLiAiMTU6Mjc6MTQiLgotCi0gICBcZnRpbWUo dGltZSkKLSAgICAgICAgICBUaGUgZ2l2ZW4gZnJlZS1mb3JtYXQgZGF0ZSBhbmQvb3IgdGltZSAo ZS5nLiAiM3BtIikgcmV0dXJucyB0aGUKLSAgICAgICAgICB0aW1lICh3aXRob3V0IHRoZSBkYXRl KSBjb252ZXJ0ZWQgdG8gaGg6bW06c3MgMjQtaG91ciBmb3JtYXQsCi0gICAgICAgICAgZS5nLiAi MTU6MDA6MDAiICh0aGUgZGF0ZSwgaWYgZ2l2ZW4sIGlzIGlnbm9yZWQpLgotCi0gICBcdihudGlt ZSkKLSAgICAgICAgICBUaGUgY3VycmVudCB0aW1lIGFzIHNlY29uZHMgc2luY2UgbWlkbmlnaHQs IGUuZy4gIjU1NjM0Ii4KLQotICAgXHYodGZ0aW1lKQotICAgICAgICAgIFRoZSBlbGFwc2VkIHRp bWUgb2YgdGhlIG1vc3QgcmVjZW50IGZpbGUtdHJhbnNmZXIgb3BlcmF0aW9uIGluCi0gICAgICAg ICAgc2Vjb25kcy4KLQotICAgXHYoaW50aW1lKQotICAgICAgICAgIFRoZSBlbGFwc2VkIHRpbWUg Zm9yIHRoZSBtb3N0IHJlY2VudCBJTlBVVCBjb21tYW5kIHRvIGNvbXBsZXRlLAotICAgICAgICAg IGluIG1pbGxpc2Vjb25kcy4KLQotICAgXGZudGltZSh0aW1lKQotICAgICAgICAgIFRoZSBnaXZl biBmcmVlLWZvcm1hdCBkYXRlIGFuZC9vciB0aW1lIGlzIGNvbnZlcnRlZCB0byBzZWNvbmRzCi0g ICAgICAgICAgc2luY2UgbWlkbmlnaHQgKHRoZSBkYXRlLCBpZiBnaXZlbiwgaXMgaWdub3JlZCku IFRoaXMgZnVuY3Rpb24KLSAgICAgICAgICByZXBsYWNlcyBcZnRvZDJzZWNzKCksIHdoaWNoIGlz IG5vdyBhIHN5bm9ueW0gZm9yIFxmbnRpbWUoKS4KLSAgICAgICAgICBVbmxpa2UgXGZ0b2Qyc2Vj cygpLCBcZm50aW1lKCkgYWxsb3dzIGEgZGF0ZSB0byBiZSBpbmNsdWRlZCwgYW5kCi0gICAgICAg ICAgaXQgYWxsb3dzIHRoZSB0aW1lIHRvIGJlIGluIGZyZWUgZm9ybWF0IChsaWtlIDNwbSksIGFu ZCBpdAotICAgICAgICAgIGFsbG93cyB0aGUgYW1vdW50IG9mIHRpbWUgdG8gYmUgbW9yZSB0aGFu IDI0IGhvdXJzLiBFLmcuCi0gICAgICAgICAgXGZudGltZSg0ODowMDowMCkgPSAxNzI4MDAuIEV4 YW1wbGUgb2YgdXNlOgotCi0gIHNldCBhbGFybSBcZm50aW1lKDQ4OjAwOjAwKSA7IHNldCBhbGFy bSA0OCBob3VycyBmcm9tIG5vdy4KLQotICAgXGZuMnRpbWUoc2Vjb25kcykKLSAgICAgICAgICBU aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMgaXMgY29udmVydGVkIHRvIGhoOm1tOnNzIGZvcm1h dC4KLQotICAgXGZkYXRlKGZpbGVuYW1lKQotICAgICAgICAgIFJldHVybnMgdGhlIG1vZGlmaWNh dGlvbiBkYXRlLXRpbWUgb2YgdGhlIGdpdmVuIGZpbGUgaW4gc3RhbmRhcmQKLSAgICAgICAgICBm b3JtYXQ6IHl5eXltbWRkIGhoOm1tOnNzLgotCi0gICBcZmN2dGRhdGUoZGF0ZS10aW1lKQotICAg ICAgICAgIENvbnZlcnRzIGEgZnJlZS1mb3JtYXQgZGF0ZSBhbmQvb3IgdGltZSB0byBLZXJtaXQg c3RhbmRhcmQKLSAgICAgICAgICBmb3JtYXQ6IHl5eXltbWRkIGhoOm1tOnNzLiBJZiBubyBhcmd1 bWVudCBpcyBnaXZlbiwgcmV0dXJucyB0aGUKLSAgICAgICAgICBjdXJyZW50IGRhdGUtdGltZSBp biBzdGFuZGFyZCBmb3JtYXQuIElmIGEgZGF0ZSBpcyBnaXZlbiBidXQgbm8KLSAgICAgICAgICB0 aW1lLCB0aGUgY29udmVydGVkIGRhdGUgaXMgcmV0dXJuZWQgd2l0aG91dCBhIHRpbWUuIElmIGEg dGltZQotICAgICAgICAgIGlzIGdpdmVuIHdpdGggbm8gZGF0ZSwgdGhlIGN1cnJlbnQgZGF0ZSBp cyBzdXBwbGllZC4gRXhhbXBsZXM6Ci0KLSAgXGZjdnRkYXRlKDQgSnVsIDIwMDAgMjoyMToxN3Bt KSA9IDIwMDAwNzA0IDE0OjIxOjE3Ci0gIFxmY3Z0ZGF0ZSgpID0gMjAwMDA3MDQgMTQ6MjE6MTcg KG9uIDQgSnVsIDIwMDAgYXQgMjoyMToxN3BtKS4KLSAgXGZjdnRkKDQgSnVsIDIwMDApID0gMjAw MDA3MDQKLSAgXGZjdnRkKDZwbSkgPSAyMDAwMDcwNCAxODowMDowMCAob24gNCBKdWwgMjAwMCBh dCA2OjAwcG0pLgotCi0gICBcZmRheW9meWVhcihkYXRlLXRpbWUpCi0gICBcZmRveShkYXRlLXRp bWUpCi0gICAgICAgICAgQ29udmVydHMgYSBmcmVlLWZvcm1hdCBkYXRlIGFuZC9vciB0aW1lIHRv IHl5eXlkZGQsIHdoZXJlIGRkZCBpcwotICAgICAgICAgIHRoZSAzLWRpZ2l0IGRheSBvZiB0aGUg eWVhciwgYW5kIDEgSmFudWFyeSBpcyBEYXkgMS4gSWYgYSB0aW1lCi0gICAgICAgICAgaXMgaW5j bHVkZWQgd2l0aCB0aGUgZGF0ZSwgaXQgaXMgcmV0dXJuZWQgaW4gc3RhbmRhcmQgZm9ybWF0LiBJ ZgotICAgICAgICAgIGEgZGF0ZSBpcyBpbmNsdWRlZCBidXQgbm8gdGltZSwgdGhlIGRhdGUgaXMg cmV0dXJuZWQgd2l0aG91dCBhCi0gICAgICAgICAgdGltZS4gSWYgYSB0aW1lIGlzIGdpdmVuIHdp dGggbm8gZGF0ZSwgdGhlIHRpbWUgaXMgY29udmVydGVkIGFuZAotICAgICAgICAgIHRoZSBjdXJy ZW50IGRhdGUgaXMgc3VwcGxpZWQuIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUKLSAgICAg ICAgICBjdXJyZW50IGRhdGUtdGltZSBpcyByZXR1cm5lZC4gU3lub255bTogXGZkb3koKS4gRXhh bXBsZXM6Ci0KLSAgXGZkZGF5b2Z5ZWFyKDQgSnVsIDIwMDAgMjoyMToxN3BtKSA9IDIwMDAxODUg MTQ6MjE6MTcKLSAgXGZkb3koKSA9IDIwMDAxODUgMTQ6MjE6MTcgKG9uIDQgSnVsIDIwMDAgYXQg MjoyMToxN3BtKS4KLSAgXGZkb3koNCBKdWwgMjAwMCkgPSAyMDAwMTg1Ci0gIFxmZG95KDZwbSkg PSAyMDAwMTg1IDE4OjAwOjAwIChvbiA0IEp1bCAyMDAwIGF0IDY6MDBwbSkuCi0KLSAgIE5vdGU6 IFRoZSB5eXl5ZGRkIGRheS1vZi15ZWFyIGZvcm1hdCBpcyBvZnRlbiBlcnJvbmVvdXNseSByZWZl cnJlZCB0bwotICAgYXMgYSBKdWxpYW4gZGF0ZS4gSG93ZXZlciwgYSB0cnVlIEp1bGlhbiBkYXRl IGlzIGEgc2ltcGxlIGNvdW50aW5nCi0gICBudW1iZXIsIHRoZSBudW1iZXIgb2YgZGF5cyBzaW5j ZSBhIGNlcnRhaW4gZml4ZWQgZGF5IGluIHRoZSBwYXN0LgotICAgWzM2NF1TZWUgXGZtamQoKSBi ZWxvdy4KLQotICAgXGZkb3kyZGF0ZShkYXRlLXRpbWUpCi0gICAgICAgICAgQ29udmVydHMgYSBk YXRlIG9yIGRhdGUtdGltZSBpbiBkYXktb2YteWVhciBmb3JtYXQgdG8gYSBzdGFuZGFyZAotICAg ICAgICAgIGZvcm1hdCBkYXRlLiBBIHl5eXlkZGQtZm9ybWF0IGRhdGUgbXVzdCBiZSBzdXBwbGll ZDsgdGltZSBpcwotICAgICAgICAgIG9wdGlvbmFsLiBUaGUgZ2l2ZW4gZGF0ZSBpcyBjb252ZXJ0 ZWQgdG8geXl5eW1tZGQgZm9ybWF0LiBJZiBhCi0gICAgICAgICAgdGltZSBpcyBnaXZlbiwgaXQg aXMgY29udmVydGVkIHRvIDI0LWhvdXIgZm9ybWF0LiBFeGFtcGxlczoKLQotICBcZmRveTJkYXRl KDIwMDAxODUpID0gMjAwMDA3MDQKLSAgXGZkb3kyKDIwMDAxODUgM3BtKSA9IDIwMDAwNzA0IDE1 OjAwOjAwCi0KLSAgIFxmbWpkKGRhdGUtdGltZSkKLSAgICAgICAgICBDb252ZXJ0cyBmcmVlLWZv cm1hdCBkYXRlIGFuZC9vciB0aW1lIHRvIGEgTW9kaWZpZWQgSnVsaWFuIERhdGUKLSAgICAgICAg ICAoTUpEKSwgdGhlIG51bWJlciBvZiBkYXlzIHNpbmNlIDE3IE5vdiAxODU4IDAwOjAwOjAwLiBJ ZiBhIHRpbWUKLSAgICAgICAgICBpcyBnaXZlbiwgaXQgaXMgaWdub3JlZC4gRXhhbXBsZXM6Ci0K LSAgXGZtamQoNCBKdWwgMjAwMCkgPSA1MDk5OAotICBcZm1qZCgxNyBOb3YgMTg1OCkgPSAwCi0g IFxmbWpkKDE2IE5vdiAxODU4KSA9IC0xCi0KLSAgIFxmbWpkMmRhdGUobWpkKQotICAgICAgICAg IENvbnZlcnRzIGFuIE1KRCAoaW50ZWdlcikgdG8gc3RhbmRhcmQgZGF0ZSBmb3JtYXQsIHl5eXlt bWRkOgotCi0gIFxmbWpkMig1MDk5OCkgPSA0IEp1bCAxOTk4Ci0gIFxmbWpkMigwKSA9IDE3IE5v diAxODU4Ci0gIFxmbWpkMigtMSkgPSAxNiBOb3YgMTg1OAotICBcZm1qZDIoLTM2NSkgPSAxNyBO b3YgMTg1NwotCi0gICBNSkRzIGFyZSBub3JtYWwgaW50ZWdlcnMgYW5kLCB1bmxpa2UgRE9Zcywg bWF5IGJlIGFkZGVkLCBzdWJ0cmFjdGVkLAotICAgZXRjLCB3aXRoIGVhY2ggb3RoZXIgb3Igd2l0 aCBvdGhlciBpbnRlZ2VycywgdG8gb2J0YWluIG1lYW5pbmdmdWwKLSAgIHJlc3VsdHMuIEZvciBl eGFtcGxlLCB0byBmaW5kIG91dCB0aGUgZGF0ZSAyMTIgZGF5cyBhZ286Ci0KLSAgZWNobyBcZm1q ZDJkYXRlKFxmbWpkKCktMjEyKQotCi0gICBDb25zdHJ1Y3Rpb25zIHN1Y2ggYXMgdGhpcyBjYW4g YmUgdXNlZCBpbiBhbnkgY29tbWFuZCB3aGVyZSBhIGRhdGUtdGltZQotICAgaXMgcmVxdWlyZWQs IGUuZy46Ci0KLSAgc2VuZCAvYWZ0ZXI6XGZtamQyZGF0ZShcZm1qZCgpLTIxMikKLQotICAgdG8g c2VuZCBhbGwgZmlsZXMgdGhhdCBhcmUgbm90IG9sZGVyIHRoYW4gMjEyIGRheXMgKHRoaXMgaXMg ZXF1aXZhbGVudAotICAgdG8gInNlbmQgL2FmdGVyOi0yMTJkYXlzIikuCi0KLSAgIE1KRHMgYWxz byBoYXZlIG90aGVyIHJlZ3VsYXJpdGllcyBub3QgZXhoaWJpdGVkIGJ5IG90aGVyIGRhdGUgZm9y bWF0cy4KLSAgIEZvciBleGFtcGxlLCBcZm1vZHVsdXMoXGZtamQoYW55LWRhdGUpLDcpIGdpdmVz IHRoZSBkYXkgb2YgdGhlIHdlZWsgZm9yCi0gICBhbnkgZGF0ZSAod2hlcmUgND1TdW4sIDU9TW9u LCAuLi4sIDM9U2F0KS4gKEhvd2V2ZXIsIGl0IGlzIGVhc2llciB0bwotICAgdXNlIFxmbmRheSgp IGZvciB0aGlzIHB1cnBvc2UsIGFuZCBpdCBnaXZlcyB0aGUgbW9yZSBjb252ZW50aW9uYWwKLSAg IHJlc3VsdCBvZiAwPVN1biwgMT1Nb24sIC4uLiwgNj1TYXQpLgotCi0gICBOb3RlIHRoYXQgaWYg TUpEcyBhcmUgdG8gYmUgY29tcGFyZWQsIHRoZXkgbXVzdCBiZSBjb21wYXJlZCBudW1lcmljYWxs eQotICAgKElGIDwsID0sID4pIGFuZCBub3QgbGV4aWNhbGx5IChJRiBMTFQsIEVRVUFMLCBMR1Qp LCB3aGVyZWFzIERPWXMgbXVzdAotICAgYmUgY29tcGFyZWQgbGV4aWNhbGx5IGlmIHRoZXkgaW5j bHVkZSBhIHRpbWUgKHdoaWNoIGNvbnRhaW5zICI6IgotICAgY2hhcmFjdGVycyk7IGhvd2V2ZXIs IGlmIERPWXMgZG8gbm90IGluY2x1ZGUgYSB0aW1lLCB0aGV5IG1heSBhbHNvIGJlCi0gICBjb21w YXJlZCBudW1lcmljYWxseS4KLQotICAgSW4gYW55IGNhc2UsIGxleGljYWwgY29tcGFyaXNvbiBv ZiBET1lzIGFsd2F5cyBwcm9kdWNlcyB0aGUgYXBwcm9wcmlhdGUKLSAgIHJlc3VsdCwgYXMgZG9l cyBudW1lcmljIGNvbXBhcmlzb24gb2YgTUpEcy4KLQotICAgVGhlIHNhbWUgY29tbWVudHMgYXBw bHkgdG8gc29ydGluZy4gQWxzbyBub3RlIHRoYXQgRE9ZcyBhcmUgZml4ZWQKLSAgIGxlbmd0aCwg YnV0IE1KRHMgY2FuIHZhcnkgaW4gbGVuZ3RoLiBIb3dldmVyLCBhbGwgTUpEcyBiZXR3ZWVuIDMg QXByaWwKLSAgIDE4ODYgYW5kIDMwIEF1ZyAyMTMyIGFyZSA1IGRlY2ltYWwgZGlnaXRzIGxvbmcu IChNSkRzIGJlY29tZSA2IGRpZ2l0cwotICAgbG9uZyBvbiAzMSBBdWcgMjEzMiwgYW5kIDcgZGln aXRzIGxvbmcgb24gMTMgT2N0IDQ1OTYpLgotCi0xLjcuIFBhcnRpYWwgQ29tcGxldGlvbiBvZiBL ZXl3b3JkcwotCi0gICBQYXJ0aWFsIGNvbXBsZXRpb24gb2Yga2V5d29yZHMgd2FzIGFkZGVkIGlu IEMtS2VybWl0IDcuMC4gSW4gcHJpb3IKLSAgIHZlcnNpb25zLCBpZiBjb21wbGV0aW9uIHdhcyBh dHRlbXB0ZWQgKGJ5IHByZXNzaW5nIHRoZSBFc2Mgb3IgVGFiIGtleSkKLSAgIG9uIGEgc3RyaW5n IHRoYXQgbWF0Y2hlZCBkaWZmZXJlbnQga2V5d29yZHMsIHlvdSdkIGp1c3QgZ2V0IGEgYmVlcC4g Tm93Ci0gICBLZXJtaXQgY29tcGxldGVzIHVwIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgd2hlcmUg dGhlIHBvc3NpYmx5IG1hdGNoaW5nCi0gICBrZXl3b3JkcyBkaWZmZXIgYW5kIHRoZW4gYmVlcHMu IEZvciBleGFtcGxlOgotCi0gIEMtS2VybWl0PiBzZW5kIC9uPFRhYj4KLQotICAgd2hpY2ggbWF0 Y2hlcyAvTk9ULUJFRk9SRSBhbmQgL05PVC1BRlRFUiwgbm93IGNvbXBsZXRlcyB1cCB0byB0aGUg ZGFzaDoKLQotICBDLUtlcm1pdD4gc2VuZCAvbjxUYWI+b3QtPEJlZXA+Ci0KLSAgIFBhcnRpYWwg Y29tcGxldGlvbiB3b3JrcyBmb3IgZmlsZW5hbWVzIHRvbyAoYXMgaXQgaGFzIGZvciBzb21lIHll YXJzKS4KLQotMS44LiBDb21tYW5kIFJlY2FsbAotCi0gICBDLUtlcm1pdCBoYXMgaGFkIGEgY29t bWFuZCBoaXN0b3J5IGJ1ZmZlciBmb3Igc29tZSB0aW1lLCB3aGljaCBjb3VsZCBiZQotICAgc2Ny b2xsZWQgaW50ZXJhY3RpdmVseSB1c2luZyBjb250cm9sIGNoYXJhY3RlcnMgb3IgKGluIEtlcm1p dCA5NSBvbmx5KQotICAgYXJyb3cga2V5cy4gVmVyc2lvbiA3LjAgYWRkcyBhIFJFRE8gY29tbWFu ZCB0aGF0IGFsbG93cyB0aGUgbW9zdCByZWNlbnQKLSAgIGNvbW1hbmQgbWF0Y2hpbmcgYSBnaXZl biBwYXR0ZXJuIHRvIGJlIHJlLWV4ZWN1dGVkOgotCi0gICB7IFJFRE8sIFJSLCBeIH0gWyBwYXR0 ZXJuIF0KLSAgICAgICAgICBTZWFyY2ggdGhlIGNvbW1hbmQgaGlzdG9yeSBsaXN0IGZvciB0aGUg bW9zdCByZWNlbnQgY29tbWFuZCB0aGF0Ci0gICAgICAgICAgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0 dGVybiwgYW5kIGlmIG9uZSBpcyBmb3VuZCwgZXhlY3V0ZSBpdAotICAgICAgICAgIGFnYWluLgot Ci0gICBUaGUgcGF0dGVybiBjYW4gYmUgYSBzaW1wbGUgc3RyaW5nIChsaWtlICJzZW5kIiksIGlu IHdoaWNoIGNhc2UgdGhlCi0gICBsYXN0IFNFTkQgY29tbWFuZCBpcyByZS1leGVjdXRlZC4gT3Ig aXQgY2FuIGNvbnRhaW4gd2lsZGNhcmQgY2hhcmFjdGVycwotICAgIioiIGFuZC9vciAiPyIsIHdo aWNoIG1hdGNoIGFueSBzdHJpbmcgYW5kIGFueSBzaW5nbGUgY2hhcmFjdGVyLAotICAgcmVzcGVj dGl2ZWx5IChub3RlIHRoYXQgIj8iIG11c3QgYmUgcHJlY2VkZWQgYnkgYmFja3NsYXNoIHRvIG92 ZXJyaWRlCi0gICBpdHMgbm9ybWFsIGZ1bmN0aW9uIG9mIGdpdmluZyBoZWxwKSwgYW5kIGluIG1v c3QgQy1LZXJtaXQgdmVyc2lvbnMgbWF5Ci0gICBhbHNvIGluY2x1ZGUgW10gY2hhcmFjdGVyIGxp c3RzIGFuZCB7fSBzdHJpbmcgbGlzdHMgKHNlZSBbMzY1XVNlY3Rpb24KLSAgIDQuOSkuCi0KLSAg IFRoZSBtYXRjaCB3b3JrcyBieSBhcHBlbmRpbmcgIioiIHRvIHRoZSBlbmQgb2YgdGhlIGdpdmVu IHBhdHRlcm4gKGlmCi0gICB5b3UgZGlkbid0IHB1dCBvbmUgdGhlcmUgeW91cnNlbGYpLiBUaHVz ICJyZWRvICpvb2ZhIiBiZWNvbWVzICJyZWRvCi0gICAqb29mYSoiIGFuZCB0aGVyZWZvcmUgbWF0 Y2hlcyB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCB0aGF0IGNvbnRhaW5zCi0gICAib29mYSIgYW55 d2hlcmUgd2l0aGluIHRoZSBjb21tYW5kLiBJZiB5b3Ugd2FudCB0byBpbmhpYml0IHRoZQotICAg YXBwbGljYXRpb24gb2YgdGhlIHRyYWlsaW5nICIqIiwgZS5nLiB0byBmb3JjZSBtYXRjaGluZyBh IHN0cmluZyBhdCB0aGUKLSAgIGVuZCBvZiBhIGNvbW1hbmQsIGVuY2xvc2UgdGhlIHBhdHRlcm4g aW4gYnJhY2VzOgotCi0gIHJlZG8geypvb2ZhfQotCi0gICBtYXRjaGVzIHRoZSBtb3N0IHJlY2Vu dCBjb21tYW5kIHRoYXQgZW5kcyB3aXRoICJvb2ZhIi4KLQotICAgUkVETyBjb21tYW5kcyB0aGVt c2VsdmVzIGFyZSBub3QgZW50ZXJlZCBpbnRvIHRoZSBjb21tYW5kIGhpc3RvcnkgbGlzdC4KLSAg IElmIG5vIHBhdHRlcm4gaXMgZ2l2ZW4sIHRoZSBwcmV2aW91cyAobm9uLVJFRE8pIGNvbW1hbmQg aXMgcmUtZXhlY3V0ZWQuCi0gICBUaGUgUkVET25lIGNvbW1hbmQgaXMgcmVpbnNlcnRlZCBhdCB0 aGUgZW5kIG9mIHRoZSBjb21tYW5kIGhpc3RvcnkKLSAgIGJ1ZmZlciwgc28gdGhlIGNvbW1hbmQg c2Nyb2xsYmFjayBjaGFyYWN0ZXIgKEN0cmwtUCwgQ3RybC1CLCBvcgotICAgVXBhcnJvdykgY2Fu IHJldHJpZXZlIGl0LgotCi0gICBFeGFtcGxlczoKLQotICBDLUtlcm1pdD4gZWNobyBmb28KLSAg Zm9vCi0gIEMtS2VybWl0PiBzaG93IGFsYXJtCi0gIChubyBhbGFybSBzZXQpCi0gIEMtS2VybWl0 PiBlY2hvIGJsYWgKLSAgYmxhaAotICBDLUtlcm1pdD4gcmVkbyAgICAgICAgICA7IE1vc3QgcmVj ZW50IGNvbW1hbmQKLSAgYmxhaAotICBDLUtlcm1pdD4gcmVkbyBzICAgICAgICA7IE1vc3QgcmVj ZW50IGNvbW1hbmQgc3RhcnRpbmcgd2l0aCAicyIKLSAgKG5vIGFsYXJtIHNldCkKLSAgQy1LZXJt aXQ+IHJlZG8gZWNobyBmICAgOyBNb3N0IHJlY2VudCBjb21tYW5kIHN0YXJ0aW5nIHdpdGggImVj aG8gZiIKLSAgZm9vCi0gIEMtS2VybWl0PiByZWRvICpmb28gICAgIDsgTW9zdCByZWNlbnQgY29t bWFuZCB0aGF0IGhhcyAiZm9vIiBpbiBpdAotICBmb28KLSAgQy1LZXJtaXQ+IDxDdHJsLVA+ICAg ICAgOyBTY3JvbGwgYmFjawotICBDLUtlcm1pdD4gZWNobyBmb28gICAgICA7IFRoZSBSRURPbmUg Y29tbWFuZCBpcyB0aGVyZQotICBDLUtlcm1pdD4gcmVkbyB7KmZvb30gICA7IE1vc3QgcmVjZW50 IGNvbW1hbmQgdGhhdCBlbmRzIHdpdGggImZvbyIKLSAgZm9vCi0gIEMtS2VybWl0PgotCi0gICBT aW5jZSBSRURPLCBSRURJQUwsIGFuZCBSRURJUkVDVCBhbGwgc3RhcnQgdGhlIHNhbWUgd2F5LCBh bmQgUkVEIGlzIHRoZQotICAgZGVzaWduYXRlZCBub24tdW5pcXVlIGFiYnJldmlhdGlvbiBmb3Ig UkVESUFMLCBSRURPIG11c3QgYmUgc3BlbGxlZCBvdXQKLSAgIGluIGZ1bGwuIEZvciBjb252ZW5p ZW5jZSwgUlIgaXMgaW5jbHVkZWQgYXMgYW4gaW52aXNpYmxlIGVhc3ktdG8tdHlwZQotICAgc3lu b255bSBmb3IgUkVETy4gWW91IGNhbiBhbHNvIHVzZSB0aGUgIl4iIGNoYXJhY3RlciBmb3IgdGhp czoKLQotICBDLUtlcm1pdD4gXiAgICAgICAgICAgICA7IE1vc3QgcmVjZW50IGNvbW1hbmQKLSAg Qy1LZXJtaXQ+IF4gcyAgICAgICAgICAgOyBNb3N0IHJlY2VudCBjb21tYW5kIHN0YXJ0aW5nIHdp dGggInMiCi0gIEMtS2VybWl0PiBecyAgICAgICAgICAgIDsgRGl0dG8gKHNwYWNlIG5vdCByZXF1 aXJlZCBhZnRlciAiXiIpLgotICBDLUtlcm1pdD4gXipmb28gICAgICAgICA7IE1vc3QgcmVjZW50 IGNvbW1hbmQgdGhhdCBoYXMgImZvbyIgaW4gaXQuCi0gIEMtS2VybWl0PiBeeypmb299ICAgICAg IDsgTW9zdCByZWNlbnQgY29tbWFuZCBlbmRzIHdpdGggImZvbyIuCi0KLSAgIFVubGlrZSB0aGUg bWFudWFsIGNvbW1hbmQtaGlzdG9yeS1zY3JvbGxpbmcga2V5cywgdGhlIFJFRE8gY29tbWFuZCBj YW4KLSAgIGJlIHVzZWQgaW4gYSBzY3JpcHQsIGJ1dCBpdCdzIG5vdCByZWNvbW1lbmRlZCAoc2lu Y2UgdGhlIGNvbW1hbmQgdG8gYmUKLSAgIFJFRE9uZSBtaWdodCBub3QgYmUgZm91bmQsIHNvIGlm IHRoZSBSRURPIGNvbW1hbmQgZmFpbHMsIHlvdSBjYW4ndCB0ZWxsCi0gICB3aGV0aGVyIGl0IHdh cyBiZWNhdXNlIFJFRE8gZmFpbGVkIHRvIGZpbmQgdGhlIHJlcXVlc3RlZCBjb21tYW5kLCBvcgot ICAgYmVjYXVzZSB0aGUgY29tbWFuZCB3YXMgZm91bmQgYnV0IGl0IGZhaWxlZCkuCi0KLTEuOS4g RVhJVCBNZXNzYWdlcwotCi0gICBUaGUgRVhJVCBhbmQgUVVJVCBjb21tYW5kcyBub3cgYWNjZXB0 IGFuIG9wdGlvbmFsIG1lc3NhZ2UgdG8gYmUKLSAgIHByaW50ZWQuIFRoaXMgbWFrZXMgdGhlIHN5 bnRheCBvZiBFWElUIGFuZCBRVUlUIGp1c3QgbGlrZSBFTkQgYW5kIFNUT1A6Ci0KLSAgIHsgRVhJ VCwgUVVJVCwgRU5ELCBTVE9QIH0gWyBzdGF0dXMtY29kZSBbIG1lc3NhZ2UgXSBdCi0KLSAgIHdo ZXJlIHN0YXR1cy1jb2RlIGlzIGEgbnVtYmVyICgwIGluZGljYXRpbmcgc3VjY2Vzcywgbm9uemVy byBpbmRpY2F0aW5nCi0gICBmYWlsdXJlKS4gVGhpcyBpcyBoYW5keSBpbiBzY3JpcHRzIHRoYXQg YXJlIG5ldmVyIHN1cHBvc2VkIHRvIGVudGVyCi0gICBpbnRlcmFjdGl2ZSBtb2RlOgotCi0gIGRp YWwgNzY1NDMyMQotICBpZiBmYWlsIGV4aXQgMSBDYW4ndCBtYWtlIGNvbm5lY3Rpb24gLSB0cnkg YWdhaW4gbGF0ZXIuCi0KLSAgIFByZXZpb3VzbHkgdGhpcyBjb3VsZCBvbmx5IGJlIGRvbmUgaW4g dHdvIHN0ZXBzOgotCi0gIGRpYWwgNzY1NDMyMQotICB4aWYgZmFpbCB7IGVjaG8gQ2FuJ3QgbWFr ZSBjb25uZWN0aW9uIC0gdHJ5IGFnYWluIGxhdGVyLCBleGl0IDEgfQotCi0gICBBIHN0YXR1cyBj b2RlIG11c3QgYmUgaW5jbHVkZWQgaW4gb3JkZXIgdG8gc3BlY2lmeSBhIG1lc3NhZ2UuIEluIHRo ZQotICAgY2FzZSBvZiBFWElUIGFuZCBRVUlULCB0aGUgZGVmYXVsdCBzdGF0dXMgY29kZSBpcyBj b250YWluZWQgaW4gdGhlCi0gICB2YXJpYWJsZSBcdihleGl0c3RhdHVzKSwgYW5kIGlzIHNldCBh dXRvbWF0aWNhbGx5IGJ5IHZhcmlvdXMgZXZlbnRzCi0gICAoZmlsZSB0cmFuc2ZlciBmYWlsdXJl cywgZXRjOyBpdCBjYW4gYWxzbyBiZSBzZXQgZXhwbGljaXRseSB3aXRoIHRoZQotICAgU0VUIEVY SVQgU1RBVFVTIGNvbW1hbmQpLiBJZiB5b3Ugd2FudCB0byBnaXZlIGFuIEVYSVQgb3IgUVVJVCBj b21tYW5kCi0gICB3aXRoIGEgbWVzc2FnZSwgYnV0IHdpdGhvdXQgY2hhbmdpbmcgdGhlIGV4aXQg c3RhdHVzIGZyb20gd2hhdCBpdAotICAgbm9ybWFsbHkgd291bGQgaGF2ZSBiZWVuLCB1c2UgdGhl IFx2KGV4aXRzdGF0dXMpIHZhcmlhYmxlLCBlLmcuOgotCi0gICBleGl0IFx2KGV4aXRzdGF0dXMp IEdvb2RieWUgZnJvbSBcdihjbWRmaWxlKS4KLQotICAgVGhlIEVYSVQgc3RhdHVzIGlzIHJldHVy bmVkIHRvIHRoZSBzeXN0ZW0gc2hlbGwgb3Igd2hhdGV2ZXIgb3RoZXIKLSAgIHByb2Nlc3MgaW52 b2tlZCBDLUtlcm1pdCwgZS5nLiBpbiBVTklYOgotCi0gIEMtS2VybWl0PiBleGl0IDk3IGJ5ZSBi eWUKLSAgYnllIGJ5ZQotICAkIGVjaG8gJD8KLSAgOTcKLSAgJAotCi0xLjEwLiBNYW5hZ2luZyBL ZXlib2FyZCBJbnRlcnJ1cHRpb25zCi0KLSAgIFdoZW4gQy1LZXJtaXQgaXMgaW4gY29tbWFuZCBv ciBmaWxlLXRyYW5zZmVyIG1vZGUgKGFzIG9wcG9zZWQgdG8KLSAgIENPTk5FQ1QgbW9kZSksIGl0 IGNhbiBiZSBpbnRlcnJ1cHRlZCB3aXRoIEN0cmwtQy4gVmVyc2lvbiA3LjAgYWRkcyB0aGUKLSAg IGFiaWxpdHkgdG8gZGlzYXJtIHRoZSBDdHJsLUMgaW50ZXJydXB0OgotCi0gICBTRVQgQ09NTUFO RCBJTlRFUlJVUFQgeyBPTiwgT0ZGIH0KLSAgICAgICAgICBDT01NQU5EIElOVEVSUlVQVCBpcyBP TiBieSBkZWZhdWx0LCBtZWFuaW5nIHRoZSBDdHJsLUMgY2FuIGJlCi0gICAgICAgICAgdXNlZCB0 byBpbnRlcnJ1cHQgYSBjb21tYW5kIG9yIGEgZmlsZSB0cmFuc2ZlciBpbiBwcm9ncmVzcy4gVXNl Ci0gICAgICAgICAgT0ZGIHRvIGRpc2FibGUgdGhlc2UgaW50ZXJydXB0aW9ucywgYW5kIHVzZSBp dCB3aXRoIGdyZWF0Ci0gICAgICAgICAgY2F1dGlvbiBmb3Igb2J2aW91cyByZWFzb25zLgotCi0g ICBTRVQgVFJBTlNGRVIgSU5URVJSVVBUIHsgT04sIE9GRiB9Ci0gICAgICAgICAgVGhpcyBjYW4g YmUgdXNlZCB0byBkaXNhYmxlIGtleWJvYXJkIGludGVycnVwdGlvbiBvZiBmaWxlCi0gICAgICAg ICAgdHJhbnNmZXIgd2hlbiBDLUtlcm1pdCBpcyBpbiBsb2NhbCBtb2RlLCBvciB0byByZS1lbmFi bGUgaXQKLSAgICAgICAgICBhZnRlciBpdCBoYXMgYmVlbiBkaXNhYmxlZC4gVGhpcyBhcHBsaWVz IHRvIHRoZSBYLCBaLCBFLCBhbmQKLSAgICAgICAgICBzaW1pbGFyIGtleXMgYXMgd2VsbCBhcyB0 byB0aGUgc3lzdGVtIGludGVycnVwdCBjaGFyYWN0ZXIsCi0gICAgICAgICAgdXN1YWxseSBDdHJs LUMuIFRoaXMgaXMgZGlzdGluY3QgZnJvbSBTRVQgVFJBTlNGRVIgQ0FOQ0VMTEFUSU9OLAotICAg ICAgICAgIHdoaWNoIHRlbGxzIHdoZXRoZXIgcGFja2V0IG1vZGUgY2FuIGJlIGV4aXRlZCBieSBz ZW5kaW5nIGEKLSAgICAgICAgICBzcGVjaWFsIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMuCi0KLSAg IFNldmVyYWwgb3RoZXIgY29tbWFuZHMgY2FuIGJlIGludGVycnVwdGVkIGJ5IHByZXNzaW5nIGFu eSBrZXkgd2hpbGUKLSAgIHRoZXkgYXJlIGFjdGl2ZS4gVmVyc2lvbiA3LjAgYWRkcyB0aGUgYWJp bGl0eSB0byBkaXNhYmxlIHRoaXMgZm9ybSBvZgotICAgaW50ZXJydXB0aW9uIGFsc286Ci0KLSAg IFNFVCBJTlBVVCBDQU5DRUxMQVRJT04geyBPTiwgT0ZGIH0KLSAgICAgICAgICBXaGV0aGVyIGFu IElOUFVUIGNvbW1hbmQgaW4gcHJvZ3Jlc3MgY2FuIGJlIGludGVycnVwdGVkIGJ5Ci0gICAgICAg ICAgcHJlc3NpbmcgYSBrZXkuIE5vcm1hbGx5IE9OLiBTZXR0aW5nIElOUFVUIENBTkNFTExBVElP TiBPRkYKLSAgICAgICAgICBtYWtlcyBJTlBVVCBjb21tYW5kcyB1bmludGVycnVwdGlibGUgZXhj ZXB0IGJ5IEN0cmwtQyAodW5sZXNzCi0gICAgICAgICAgQ09NTUFORCBJTlRFUlJVUFRJT04gaXMg YWxzbyBPRkYpLgotCi0gICBTRVQgU0xFRVAgQ0FOQ0VMTEFUSU9OIHsgT04sIE9GRiB9Ci0gICAg ICAgICAgV2hldGhlciBhIFNMRUVQLCBQQVVTRSwgb3IgV0FJVCBjb21tYW5kIGluIHByb2dyZXNz IGNhbiBiZQotICAgICAgICAgIGludGVycnVwdGVkIGJ5IHByZXNzaW5nIGEga2V5LiBOb3JtYWxs eSBPTi4gU2V0dGluZyBTTEVFUAotICAgICAgICAgIENBTkNFTExBVElPTiBPRkYgbWFrZXMgdGhl c2UgY29tbWFuZHMgdW5pbnRlcnJ1cHRpYmxlIGV4Y2VwdCBieQotICAgICAgICAgIEN0cmwtQyAo dW5sZXNzIENPTU1BTkQgSU5URVJSVVBUSU9OIGlzIGFsc28gT0ZGKS4gU3lub255bXM6IFNFVAot ICAgICAgICAgIFBBVVNFIENBTkNFTExBVElPTiwgU0VUIFdBSVQgQ0FOQ0VMTEFUSU9OLgotCi0g ICBTbyB0byBtYWtlIGNlcnRhaW4gYSBzY3JpcHQgaXMgbm90IGludGVycnVwdGlibGUgYnkgdGhl IHVzZXIsIGluY2x1ZGUKLSAgIHRoZXNlIGNvbW1hbmRzOgotCi0gIFNFVCBUUkFOU0ZFUiBJTlRF UlJVUFQgT0ZGCi0gIFNFVCBTTEVFUCBDQU5DRUxMQVRJT04gT0ZGCi0gIFNFVCBJTlBVVCBDQU5D RUxMQVRJT04gT0ZGCi0gIFNFVCBDT01NQU5EIElOVEVSUlVQVElPTiBPRkYKLQotICAgTWFrZSBz dXJlIHRvIHR1cm4gdGhlbSBiYWNrIG9uIGFmdGVyd2FyZHMgaWYgaW50ZXJydXB0aW9uIGlzIHRv IGJlCi0gICByZS1lbmFibGVkLgotCi0gICBXaGVuIGEgUEFVU0UsIFNMRUVQLCBXQUlULCBvciBJ TlBVVCBjb21tYW5kIGlzIGludGVycnVwdGVkIGZyb20gdGhlCi0gICBrZXlib2FyZCwgdGhlIG5l dyB2YXJpYWJsZSBcdihrYmNoYXIpIGNvbnRhaW5zIGEgY29weSBvZiB0aGUgKGZpcnN0KQotICAg Y2hhcmFjdGVyIHRoYXQgd2FzIHR5cGVkIGFuZCBjYXVzZWQgdGhlIGludGVycnVwdGlvbiwgcHJv dmlkZWQgaXQgd2FzCi0gICBub3QgdGhlIGNvbW1hbmQgaW50ZXJydXB0IGNoYXJhY3RlciAodXN1 YWxseSBDdHJsLUMpLiBJZiB0aGVzZSBjb21tYW5kcwotICAgY29tcGxldGUgc3VjY2Vzc2Z1bGx5 IG9yIHRpbWUgb3V0IHdpdGhvdXQgYSBrZXlib2FyZCBpbnRlcnJ1cHRpb24sIHRoZQotICAgXHYo a2JjaGFyKSB2YXJpYWJsZSBpcyBlbXB0eS4KLQotICAgVGhlIFx2KGtiY2hhcikgdmFyaWFibGUg KGxpa2UgYW55IG90aGVyIHZhcmlhYmxlKSBjYW4gYmUgdGVzdGVkIHdpdGg6Ci0KLSAgaWYgZGVm aW5lZCBcdihrYmNoYXIpIGNvbW1hbmQKLQotICAgVGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQgaWYg dGhlIHZhcmlhYmxlIGlzIG5vdCBlbXB0eS4KLQotICAgVGhlIFx2KGtiY2hhcikgdmFyaWFibGUg Y2FuIGJlIHJlc2V0IHdpdGggV0FJVCAwIChQQVVTRSAwLCBTTEVFUCAwLAotICAgZXRjKS4KLQot MS4xMS4gVGFtaW5nIFRoZSBXaWxkIEJhY2tzbGFzaCAtLSBQYXJ0IERldXgKLQotICAgWzM2Nl1V c2luZyBDLUtlcm1pdCwgMm5kIEVkaXRpb24sIGNvbnRhaW5zIGEgYnJpZWYgc2VjdGlvbiwgIlRh bWluZyB0aGUKLSAgIFdpbGQgQmFja3NsYXNoIiwgb24gcGFnZSA0OCwgd2hpY2ggc3Vic2VxdWVu dCBleHBlcmllbmNlIGhhcyBzaG93biB0bwotICAgYmUgaW5hZGVxdWF0ZSBmb3IgS2VybWl0IHVz ZXJzIGludGVudCBvbiB3cml0aW5nIHNjcmlwdHMgdGhhdCBkZWFsIHdpdGgKLSAgIFdpbmRvd3Ms IERPUywgYW5kIE9TLzIgZmlsZW5hbWVzLCBpbiB3aGljaCBiYWNrc2xhc2ggKFwpIGlzIHVzZWQg YXMgdGhlCi0gICBkaXJlY3Rvcnkgc2VwYXJhdG9yLiBUaGlzIHNlY3Rpb24gZmlsbHMgaW4gdGhl IGJsYW5rcy4KLQotMS4xMS4xLiBCYWNrZ3JvdW5kCi0KLSAgIFRoZSBLZXJtaXQgY29tbWFuZCBs YW5ndWFnZSBzaGFyZXMgYSBjZXJ0YWluIHVuYXZvaWRhYmxlIGJ1dCBhbm5veWluZwotICAgY2hh cmFjdGVyaXN0aWMgd2l0aCBtb3N0IG90aGVyIGNvbW1hbmQgbGFuZ3VhZ2VzIHRoYXQgYXJlIGNh cGFibGUgb2YKLSAgIHN0cmluZyByZXBsYWNlbWVudCwgbmFtZWx5IHRoZSBuZWNlc3NpdHkgdG8g InF1b3RlIiBjZXJ0YWluIGNoYXJhY3RlcnMKLSAgIHdoZW4geW91IHdhbnQgdGhlbSB0byBiZSB0 YWtlbiBsaXRlcmFsbHkuIFRoaXMgaXMgYSBjb25zZXF1ZW5jZSBvZiB0aGUKLSAgIGZhY3RzIHRo YXQ6Ci0KLSAgICAxLiBPbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIG11c3QgYmUgc2V0IGFzaWRlIHRv IGRlbm90ZSByZXBsYWNlbWVudCwKLSAgICAgICByYXRoZXIgdGhhbiBhY3RpbmcgYXMgbGl0ZXJh bCB0ZXh0LgotICAgIDIuIFdlIGhhdmUgb25seSA5NiBwcmludGFibGUgY2hhcmFjdGVycyB0byB3 b3JrIHdpdGggaW4gQVNDSUksIHdoaWNoCi0gICAgICAgaXMgc3RpbGwgdGhlIG9ubHkgdW5pdmVy c2FsbHkgcG9ydGFibGUgY2hhcmFjdGVyIHNldC4KLSAgICAzLiBUaGVyZSBpcyBubyBzaW5nbGUg cHJpbnRhYmxlIGNoYXJhY3RlciB0aGF0IGlzIHVudXNlZCBldmVyeXdoZXJlLgotICAgIDQuIFZh cmlhYmxlcyBhcmUgbm90IHJlc3RyaWN0ZWQgdG8gY2VydGFpbiBjb250ZXh0cywgYXMgdGhleSBh cmUgaW4KLSAgICAgICBmb3JtYWwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIGxpa2UgQyBhbmQgRm9y dHJhbiwgYnV0IGNhbiBhcHBlYXIKLSAgICAgICBhbnl3aGVyZSBhdCBhbGwgd2l0aGluIGEgY29t bWFuZCwgYW5kIHRoZXJlZm9yZSByZXF1aXJlIHNwZWNpYWwKLSAgICAgICBzeW50YXguCi0KLSAg IFRodXMgdGhlcmUgY2FuIGJlIGNvbmZsaWN0cy4gVG8gaWxsdXN0cmF0ZSwgdGhlIHN0YW5kYXJk IFVOSVggc2hlbGwKLSAgIHVzZXMgZG9sbGFyIHNpZ24gKCQpIHRvIGludHJvZHVjZSB2YXJpYWJs ZXMuIFNvIHRoZSBzaGVsbCBjb21tYW5kOgotCi0gIGVjaG8gJFRFUk0KLQotICAgZGlzcGxheXMg dGhlIHZhbHVlIG9mIHRoZSBURVJNIHZhcmlhYmxlLCBlLmcuIHZ0MzIwLiBCdXQgc3VwcG9zZSB5 b3UKLSAgIHdhbnQgdG8gZGlzcGxheSBhIHJlYWwgZG9sbGFyIHNpZ246Ci0KLSAgZWNobyBUaGUg cHJpY2UgaXMgJDEwLjIwCi0KLSAgIFRoaXMgY2F1c2VzIHRoZSBzaGVsbCB0byBldmFsdWF0ZSB0 aGUgdmFyaWFibGUgIiQxIiwgd2hpY2ggbWlnaHQgb3IKLSAgIG1pZ2h0IG5vdCBleGlzdCwgYW5k IHN1YnN0aXR1dGUgaXRzIHZhbHVlLCBlLmcuOgotCi0gIFRoZSBwcmljZSBpcyAwLjIwCi0KLSAg IChpbiB0aGlzIGNhc2UgdGhlICQxIHZhcmlhYmxlIGhhZCBubyB2YWx1ZS4pIFRoaXMgaXMgcHJv YmFibHkgbm90IHdoYXQKLSAgIHlvdSB3YW50ZWQuIFRvIGZvcmNlIHRoZSBkb2xsYXIgc2lnbiB0 byBiZSB0YWtlbiBsaXRlcmFsbHksIHlvdSBtdXN0Ci0gICBhcHBseSBhICJxdW90aW5nIHJ1bGUi LCBzdWNoIGFzICJwcmVjZWRlIGEgY2hhcmFjdGVyIGJ5IGJhY2tzbGFzaCAoXCkKLSAgIHRvIGZv cmNlIHRoZSBzaGVsbCB0byB0YWtlIHRoZSBjaGFyYWN0ZXIgbGl0ZXJhbGx5IjoKLQotICBlY2hv IFRoZSBwcmljZSBpcyBcJDEwLjIwCi0gIFRoZSBwcmljZSBpcyAkMTAuMjAKLQotICAgQnV0IG5v dyBzdXBwb3NlIHlvdSB3YW50IHRoZSBiYWNrc2xhc2ggQU5EIHRoZSBkb2xsYXIgc2lnbiB0byBi ZSB0YWtlbgotICAgbGl0ZXJhbGx5OgotCi0gIGVjaG8gVGhlIHByaWNlIGlzIFxcJDEwLjIwCi0K LSAgIFRoaXMgZG9lc24ndCB3b3JrLCBzaW5jZSB0aGUgZmlyc3QgYmFja3NsYXNoIHF1b3RlcyB0 aGUgc2Vjb25kIG9uZSwKLSAgIHRoZXJlYnkgbGVhdmluZyB0aGUgZG9sbGFyIHNpZ24gdW5xdW90 ZWQgYWdhaW46Ci0KLSAgVGhlIHByaWNlIGlzIFwwLjIwCi0KLSAgIFF1b3RpbmcgdGhlIGRvbGxh ciBzaWduIHJlcXVpcmVzIGFkZGl0aW9uIG9mIGEgdGhpcmQgYmFja3NsYXNoOgotCi0gIGVjaG8g VGhlIHByaWNlIGlzIFxcXCQxMC4yMAotICBUaGUgcHJpY2UgaXMgXCQxMC4yMAotCi0gICBUaGUg Zmlyc3QgYmFja3NsYXNoIHF1b3RlcyB0aGUgc2Vjb25kIG9uZSwgYW5kIHRoZSB0aGlyZCBiYWNr c2xhc2gKLSAgIHF1b3RlcyB0aGUgZG9sbGFyIHNpZ24uCi0KLSAgIEV2ZXJ5IGNvbW1hbmQgbGFu Z3VhZ2UgLS0gYWxsIFVOSVggc2hlbGxzLCBWTVMgRENMLCBET1MgQmF0Y2gsIEFPUy9WUwotICAg Q0xJLCBldGMgZXRjIC0tIGhhcyBzaW1pbGFyIHJ1bGVzLiBVTklYIHNoZWxsIHJ1bGVzIGFyZSBw cm9iYWJseSB0aGUKLSAgIG1vc3QgY29tcGxpY2F0ZWQsIHNpbmNlIG1hbnkgcHJpbnRhYmxlIGNo YXJhY3RlcnMgLS0gbm90IGp1c3Qgb25lIC0tCi0gICBhcmUgc3BlY2lhbCB0aGVyZTogZG9sbGFy IHNpZ24sIHNpbmdsZSBxdW90ZSwgZG91YmxlIHF1b3RlLCBiYWNrc2xhc2gsCi0gICBhc3Rlcmlz aywgYWNjZW50IGdyYXZlLCBudW1iZXIgc2lnbiwgYW1wZXJzYW5kLCBxdWVzdGlvbiBtYXJrLAot ICAgcGFyZW50aGVzZXMsIGJyYWNrZXRzLCBicmFjZXMsIGV0YyAtLSBwcmFjdGljYWxseSBldmVy eQotICAgbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXIgbmVlZHMgc29tZSBmb3JtIG9mIHF1b3Rp bmcgaWYgaXQgaXMgdG8gYmUKLSAgIHRha2VuIGxpdGVyYWxseS4gQW5kIHRvIGFkZCB0byB0aGUg Y29uZnVzaW9uLCB0aGUgVU5JWCBzaGVsbCBvZmZlcnMKLSAgIG1hbnkgZm9ybXMgb2YgcXVvdGlu ZywgYW5kIG1hbnkgYWx0ZXJuYXRpdmUgVU5JWCBzaGVsbHMgYXJlIGF2YWlsYWJsZSwKLSAgIGVh Y2ggdXNpbmcgc2xpZ2h0bHkgZGlmZmVyZW50IHN5bnRheC4KLQotMS4xMS4yLiBLZXJtaXQncyBR dW90aW5nIFJ1bGVzCi0KLSAgIEtlcm1pdCdzIGJhc2ljIHF1b3RpbmcgcnVsZXMgYXJlIHNpbXBs ZSBieSBjb21wYXJpc29uICh0aGVyZSBhcmUsIG9mCi0gICBjb3Vyc2UsIGFkZGl0aW9uYWwgc3lu dGF4IHJlcXVpcmVtZW50cyBmb3IgbWFjcm8gZGVmaW5pdGlvbnMsIGNvbW1hbmQKLSAgIGJsb2Nr cywgZnVuY3Rpb24gY2FsbHMsIGV0YywgYnV0IHRoZXkgYXJlIG5vdCByZWxldmFudCBoZXJlKS4K LQotICAgVGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGFyZSBzcGVjaWFsIGluIEtlcm1pdCBjb21t YW5kczoKLQotICAgQmFja3NsYXNoIChcKQotICAgICAgICAgIEludHJvZHVjZXMgYSB2YXJpYWJs ZSwgb3IgdGhlIG51bWVyaWMgcmVwcmVzZW50YXRpb24gb2YgYQotICAgICAgICAgIHNwZWNpYWwg Y2hhcmFjdGVyLCBvciBhIGZ1bmN0aW9uLCBvciBvdGhlciBpdGVtIGZvcgotICAgICAgICAgIHN1 YnN0aXR1dGlvbi4gSWYgdGhlIGJhY2tzbGFzaCBpcyBmb2xsb3dlZCBieSBhIGRpZ2l0IG9yIGJ5 IGFueQotICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczoKLQotICB4LCBvLCBk LCBtLCBzLCBmLCB2LCAkLCAlLCAmLCA6LCB7Ci0KLSAgICAgICAgICB0aGlzIGluZGljYXRlcyBh IHNwZWNpYWwgc3Vic3RpdHV0aW9uIGl0ZW07IG90aGVyd2lzZSB0aGUKLSAgICAgICAgICBmb2xs b3dpbmcgY2hhcmFjdGVyIGlzIHRvIGJlIHRha2VuIGxpdGVyYWxseSAoZXhjZXB0aW9uczogXCBh dAotICAgICAgICAgIGVuZCBvZiBsaW5lIGlzIHRha2VuIGxpdGVyYWxseTsgXG4sIFxiLCBhbmQg XG4gYXJlIHNwZWNpYWwgaXRlbXMKLSAgICAgICAgICBpbiB0aGUgT1VUUFVUIGNvbW1hbmQgb25s eSkuCi0KLSAgIFNlbWljb2xvbiAoOykKLSAgICAgICAgICAoT25seSB3aGVuIGF0IHRoZSBiZWdp bm5pbmcgb2YgYSBsaW5lIG9yIHByZWNlZGVkIGJ5IGF0IGxlYXN0Ci0gICAgICAgICAgb25lIHNw YWNlIG9yIHRhYikgSW50cm9kdWNlcyBhIGNvbW1lbnQuCi0KLSAgIE51bWJlciBzaWduICgjKQot ICAgICAgICAgIChPbmx5IHdoZW4gYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgb3IgcHJlY2Vk ZWQgYnkgYXQgbGVhc3QKLSAgICAgICAgICBvbmUgc3BhY2Ugb3IgdGFiKSBKdXN0IGxpa2Ugc2Vt aWNvbG9uOyBpbnRyb2R1Y2VzIGEgY29tbWVudC4KLQotICAgUXVlc3Rpb24gbWFyayAoPykKLSAg ICAgICAgICAoT25seSBhdCB0aGUgY29tbWFuZCBwcm9tcHQgLSBub3QgaW4gY29tbWFuZCBmaWxl cyBvciBtYWNyb3MpCi0gICAgICAgICAgUmVxdWVzdHMgY29udGV4dC1zZW5zaXRpdmUgaGVscC4K LQotICAgVG8gZm9yY2UgS2VybWl0IHRvIHRha2UgYW55IG9mIHRoZXNlIGNoYXJhY3RlcnMgbGl0 ZXJhbGx5LCBzaW1wbHkKLSAgIHByZWNlZGUgaXQgYnkgYSBiYWNrc2xhc2ggKFwpLgotCi0gICBT b3VuZHMgZWFzeSEgQW5kIGl0IGlzLCBleGNlcHQgd2hlbiBiYWNrc2xhc2ggYWxzbyBoYXMgYSBz cGVjaWFsCi0gICBtZWFuaW5nIHRvIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0sIGFz IGl0IGRvZXMgaW4gRE9TLCBXaW5kb3dzLAotICAgYW5kIE9TLzIsIHdoZXJlIGl0IHNlcnZlcyBh cyB0aGUgZGlyZWN0b3J5IHNlcGFyYXRvciBpbiBmaWxlbmFtZXMgc3VjaAotICAgYXM6Ci0KLSAg RDpcSzk1XEtFWU1BUFNcUkVBRC5NRQotCi0gICBVc2luZyBvdXIgcnVsZSwgd2Ugd291bGQgbmVl ZCB0byByZWZlciB0byB0aGlzIGZpbGUgaW4gS2VybWl0IGNvbW1hbmRzCi0gICBhcyBmb2xsb3dz OgotCi0gIEQ6XFxLOTVcXEtFWU1BUFNcXFJFQUQuTUUKLQotICAgQnV0IHRoaXMgd291bGQgbm90 IGJlIG9idmlvdXMgdG8gbmV3IHVzZXJzIG9mIEtlcm1pdCBzb2Z0d2FyZSBvbiBET1MsCi0gICBX aW5kb3dzLCBvciBPUy8yLCBhbmQgaXQgd291bGQgYmUgYW5ub3lpbmcgdG8gc2Vhc29uZWQgb25l cy4gVGh1cwotICAgTVMtRE9TIEtlcm1pdCBhbmQgS2VybWl0IDk1IGdvIHRvIHJhdGhlciBleHRy ZW1lIGxlbmd0aHMgdG8gYWxsb3cgdGhlCi0gICBtb3JlIG5hdHVyYWwgbm90YXRpb24sIGFzIGlu OgotCi0gIHNlbmQgZDpcazk1XGtleW1hcHNccmVhZC5tZQotCi0gICBUaGUgcmVhc29uIHRoaXMg aXMgdHJpY2t5IGlzIHRoYXQgd2UgYWxzbyBuZWVkIHRvIGFsbG93IGZvciB2YXJpYWJsZXMKLSAg IGFuZCBvdGhlciBleHByZXNzaW9ucyBpbnRyb2R1Y2VkIGJ5IGJhY2tzbGFzaCBpbiB0aGUgc2Ft ZSBjb21tYW5kLiBGb3IKLSAgIGV4YW1wbGUsIHN1cHBvc2UgXCVhIGlzIGEgdmFyaWFibGUgd2hv c2UgdmFsdWUgaXMgIm9vZmEiICh3aXRob3V0IHRoZQotICAgcXVvdGVzKS4gV2hhdCBkb2VzIHRo ZSBmb2xsb3dpbmcgY29tbWFuZCBkbz8KLQotICBzZW5kIGQ6XCVhCi0KLSAgIERvZXMgaXQgc2Vu ZCB0aGUgZmlsZSBuYW1lZCAib29mYSIgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9mIHRoZSBE OgotICAgZGlzaywgb3IgZG9lcyBpdCBzZW5kIGEgZmlsZSBuYW1lZCAiJWEiIGluIHRoZSByb290 IGRpcmVjdG9yeSBvZiB0aGUgRDoKLSAgIGRpc2s/IFRoaXMgaXMgdGhlIGtpbmQgb2YgdHJvdWJs ZSB3ZSBnZXQgaW50byB3aGVuIHdlIGF0dGVtcHQgdG8gYmVuZAotICAgdGhlIHJ1bGVzIGluIHRo ZSBpbnRlcmVzdCBvZiB1c2VyIGZyaWVuZGxpbmVzcy4gKFRoZSBhbnN3ZXIgaXM6IGlmIHRoZQot ICAgdmFyaWFibGUgXCVhIGhhcyBkZWZpbml0aW9uIHRoYXQgaXMgdGhlIG5hbWUgb2YgYW4gZXhp c3RpbmcgZmlsZSwgdGhhdAotICAgZmlsZSBpcyBzZW50OyBpZiBhIGZpbGUgZDpcJWEgZXhpc3Rz LCBpdCBpcyBzZW50OyBvdGhlcndpc2UgaWYgYm90aAotICAgY29uZGl0aW9ucyBhcmUgdHJ1ZSwg dGhlIHZhcmlhYmxlIHRha2VzIHByZWNlZGVuY2UsIGFuZCB0aGUgbGl0ZXJhbAotICAgZmlsZW5h bWUgY2FuIGJlIGZvcmNlZCBieSBxdW90aW5nOiBcXCVhLikKLQotICAgSW4gS2VybWl0IDk1IChi dXQgbm90IE1TLURPUyBLZXJtaXQpLCB3ZSBhbHNvIGJlbmQgdGhlIHJ1bGVzIGFub3RoZXIKLSAg IHdheSBieSBhbGxvd2luZyB5b3UgdG8gdXNlIGZvcndhcmQgc2xhc2ggKC8pIHJhdGhlciB0aGFu IGJhY2tzbGFzaCAoXCkKLSAgIGFzIHRoZSBkaXJlY3Rvcnkgc2VwYXJhdG9yOgotCi0gIHNlbmQg ZDovazk1L2tleW1hcHMvcmVhZC5tZQotCi0gICBUaGlzIGxvb2tzIG1vcmUgbmF0dXJhbCB0byBV TklYIHVzZXJzLCBhbmQgaW4gZmFjdCBpcyBwZXJmZWN0bHkKLSAgIGFjY2VwdGFibGUgdG8gdGhl IFdpbmRvd3MgOTUvOTgvTlQgYW5kIE9TLzIgb3BlcmF0aW5nIHN5c3RlbXMgb24gdGhlCi0gICBB UEkgbGV2ZWwuIEJVVCAodGhlcmUgaXMgYWx3YXlzIGEgImJ1dCIpIHRoZSBNaWNyb3NvZnQgc2hl bGwsCi0gICBDT01NQU5ELkNPTSwgZm9yIFdpbmRvd3MgOTUvOTggYW5kIE5UIGRvZXMgbm90IGFs bG93IHRoaXMgbm90YXRpb24sIGFuZAotICAgdGhlcmVmb3JlIGl0IGNhbiBub3QgYmUgdXNlZCBp biBhbnkgS2VybWl0IGNvbW1hbmQgLS0gc3VjaCBhcyBSVU4gLS0KLSAgIHRoYXQgaW52b2tlcyB0 aGUgV2luZG93cyBjb21tYW5kIHNoZWxsIEFORCB5b3VyIGNvbW1hbmQgc2hlbGwgaXMKLSAgIENP TU1BTkQuQ09NIG9yIGFueSBvdGhlciBzaGVsbCB0aGF0IGRvZXMgbm90IGFsbG93IGZvcndhcmQg c2xhc2ggYXMKLSAgIGRpcmVjdG9yeSBzZXBhcmF0b3IgKHNvbWUgYWx0ZXJuYXRpdmUgc2hlbGxz IGRvIGFsbG93IHRoaXMpLgotCi0gICAgIE5PVEU6IFRoZXJlIGV4aXN0cyBhIHdpZGUgdmFyaWV0 eSBvZiBhbHRlcm5hdGl2ZSBzaGVsbHMgZnJvbSB0aGlyZAotICAgICBwYXJ0aWVzIHRoYXQgZG8g bm90IGhhdmUgdGhpcyByZXN0cmljdGlvbi4gSWYgeW91IGFyZSB1c2luZyBhIHNoZWxsCi0gICAg IHRoYXQgYWNjZXB0cyBmb3J3YXJkIHNsYXNoIGFzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciwgeW91 IGNhbiBzdG9wCi0gICAgIHJlYWRpbmcgcmlnaHQgbm93IC0tIFVOTEVTUyAodGhlcmUgaXMgYWx3 YXlzIGFuICJ1bmxlc3MiKSB5b3Ugd2FudAotICAgICB5b3VyIHNjcmlwdHMgdG8gYmUgcG9ydGFi bGUgdG8gc3lzdGVtcyB0aGF0IGhhdmUgb3RoZXIgc2hlbGxzLiBBbHNvCi0gICAgIG5vdGUgdGhh dCBzb21lIFdpbmRvd3Mgc2hlbGxzIG1pZ2h0IGFjdHVhbGx5IFJFUVVJUkUgZm9yd2FyZCBzbGFz aGVzCi0gICAgIChpbnN0ZWFkIG9mIGJhY2tzbGFzaGVzKSBhcyBkaXJlY3Rvcnkgc2VwYXJhdG9y czsgd2UgZG8gbm90IHRyZWF0Ci0gICAgIHRoaXMgc2l0dWF0aW9uIGJlbG93LCBidXQgdGhlIHRy ZWF0bWVudCBpcyBvYnZpb3VzIC0tIHVzZSBzbGFzaAotICAgICByYXRoZXIgYmFja3NsYXNoIGFz IHRoZSBkaXJlY3Rvcnkgc2VwYXJhdG9yLgotCi0xLjExLjMuIFBhc3NpbmcgRE9TIEZpbGVuYW1l cyBmcm9tIEtlcm1pdCB0byBTaGVsbCBDb21tYW5kcwotCi0gICBUaGUgZm9sbG93aW5nIEtlcm1p dCBjb21tYW5kcyBpbnZva2UgdGhlIHN5c3RlbSBjb21tYW5kIHNoZWxsOgotCi0gIFJVTiAoYW5k IGl0cyBzeW5vbnltcyAhIGFuZCBAKQotICBSRURJUkVDVAotICBQSVBFCi0KLSAgIEVhY2ggb2Yg dGhlc2UgY29tbWFuZHMgdGFrZXMgYSBzaGVsbCBjb21tYW5kIGFzIGFuIG9wZXJhbmQuIFRoZXNl IHNoZWxsCi0gICBjb21tYW5kcyBhcmUgbm90LCBhbmQgY2FuIG5vdCBiZSwgcGFyc2VkIGJ5IEtl cm1pdCBzaW5jZSBLZXJtaXQgZG9lcwotICAgbm90IGtub3cgdGhlIHN5bnRheCBvZiBzaGVsbCBj b21tYW5kcywgYW5kIHNvIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UKLSAgIGJldHdlZW4gYSBr ZXl3b3JkLCBhIGZpbGVuYW1lLCBhIHZhcmlhYmxlLCBhIHN3aXRjaCwgb3Igb3RoZXIgaXRlbS4K LSAgIFRoZXJlZm9yZSB0aGUgcnVsZXMgY2FuIG5vdCBiZSBiZW50IHNpbmNlIEtlcm1pdCBkb2Vz bid0IGtub3cgd2hlcmUgb3IKLSAgIGhvdyB0byBiZW5kIHRoZW0uIFRvIGlsbHVzdHJhdGUgKHVz aW5nIHRoZSByZWd1bGFyIFdpbmRvd3Mgc2hlbGwpOgotCi0gIHJ1biBjOlxcd2luZG93c1xcY29t bWFuZFxcY2hrZHNrLmV4ZQotCi0gICB3b3JrcyBPSywgYnV0OgotCi0gIHJ1biBjOi93aW5kb3dz L2NvbW1hbmQvY2hrZHNrLmV4ZQotCi0gICBpcyBub3QgYWNjZXB0ZWQgYnkgQ09NTUFORC5DT00u IEJ1dDoKLQotICBydW4gYzpcd2luZG93c1xjb21tYW5kXGNoa2Rzay5leGUKLQotICAgcmVzdWx0 cyBpbiBLZXJtaXQgYXBwbHlpbmcgaXRzIHF1b3RpbmcgcnVsZXMgYmVmb3JlIHNlbmRpbmcgdGhl IHRleHQgdG8KLSAgIHRoZSBzaGVsbC4gU2luY2UgInciIGFuZCAiYyIgYXJlIG5vdCBpbiB0aGUg bGlzdCBvZiBiYWNrc2xhc2gtaXRlbQotICAgY29kZXMsIHRoZSBiYWNrc2xhc2ggbWVhbnMgInRh a2UgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgbGl0ZXJhbGx5Ii4KLSAgIFRodXMsIGJ5IHRoZSB0 aW1lIHRoaXMgZmlsZW5hbWUgZ2V0cyB0byB0aGUgV2luZG93cyBzaGVsbCwgaXQgaGFzCi0gICBi ZWNvbWU6Ci0KLSAgYzp3aW5kb3dzY29tbWFuZGNoa2Rzay5leGUKLQotICAgd2hpY2ggaXMgcHJv YmFibHkgbm90IHdoYXQgeW91IHdhbnRlZC4gKElmICJ3IiBhbmQgImMiIHdlcmUgaW4gdGhlCi0g ICBsaXN0LCB0aGUgcmVzdWx0cyBjb3VsZCBiZSBldmVuIHN0cmFuZ2VyLikgRXZlbiBtb3JlIGNv bmZ1c2luZyBpcyB0aGUKLSAgIGNhc2Ugd2hlcmUgYSBkaXJlY3Rvcnkgb3IgZmlsZW5hbWUgc3Rh cnRzIHdpdGggb25lIG9yIG1vcmUgZGlnaXRzOgotCi0gIHJ1biBjOlwxMjNcbG90dXMuZXhlCi0K LSAgIGluIHdoaWNoICJcMTIzIiBpcyB0aGUgS2VybWl0IG5vdGF0aW9uIGZvciBBU0NJSSBjaGFy YWN0ZXIgMTIzLCB3aGljaAotICAgaGFwcGVucyB0byBiZSBsZWZ0IGJyYWNlICh7KSwgcmVzdWx0 aW5nIGluICJjOntsb3R1cy5leGUiLgotCi0gICBTbyB3aGVuIHBhc3NpbmcgZmlsZW5hbWVzIHRv IGEgV2luZG93cyBzaGVsbCwgYWx3YXlzIHVzZSBkb3VibGUKLSAgIGJhY2tzbGFzaGVzIGFzIGRp cmVjdG9yeSBzZXBhcmF0b3JzLCB0byBlbnN1cmUgdGhhdCB0aGUgc2hlbGwgZ2V0cwotICAgc2lu Z2xlIGJhY2tzbGFzaGVzOgotCi0gIHJ1biBjOlxcd2luZG93c1xcY29tbWFuZFxcY2hrZHNrLmV4 ZQotICBydW4gYzpcXDEyM1xcbG90dXMuZXhlCi0KLSAgIFNpbWlsYXIgcHJvYmxlbXMgbWlnaHQg b2NjdXIgd2l0aCB0aGUgYnVpbHQtaW4gRURJVCwgQlJPV1NFLCBhbmQgRlRQCi0gICBjb21tYW5k cy4gVGhlc2UgY29tbWFuZHMgcmVzdWx0IGluIEtlcm1pdCBidWlsZGluZyBhIHNoZWxsIGNvbW1h bmQKLSAgIGludGVybmFsbHkgdG8gaW52b2tlIHRoZSBhc3NvY2lhdGVkIGhlbHBlciBwcm9ncmFt OyB0aGUgZm9ybSBvZiB0aGlzCi0gICBjb21tYW5kIG1pZ2h0IGNvbmZsaWN0IHdpdGggdGhlIGZv cm0gZGVtYW5kZWQgYnkgY2VydGFpbiBhbHRlcm5hdGl2ZQotICAgc2hlbGxzLgotCi0xLjExLjQu IFVzaW5nIFZhcmlhYmxlcyB0byBIb2xkIERPUyBGaWxlbmFtZXMKLQotICAgTm93IHRvIHRoZSBu ZXh0IGxldmVsLiBTdXBwb3NlIHlvdSB3YW50IHRvIHdyaXRlIGEgc2NyaXB0IGluIHdoaWNoCi0g ICBmaWxlbmFtZXMgYXJlIHBhcmFtZXRlcnMsIGFuZCB0aGVyZWZvcmUgYXJlIHN0b3JlZCBpbiB2 YXJpYWJsZXMuCi0gICBFeGFtcGxlOgotCi0gIGRlZmluZSBcJWYgYzpcd2luZG93c1xjb21tYW5k XGNoa2Rzay5leGUKLSAgLi4uCi0gIHJ1biBcJWYKLQotICAgT2J2aW91c2x5IHRoaXMgd29uJ3Qg d29yayBmb3IgdGhlIHJlYXNvbnMganVzdCBub3RlZDsgdGhlIFJVTiBjb21tYW5kCi0gICByZXF1 aXJlcyBkaXJlY3Rvcnkgc2VwYXJhdG9ycyBiZSBjb2RlZCBhcyBkb3VibGUgYmFja3NsYXNoZXM6 Ci0KLSAgZGVmaW5lIFwlZiBjOlxcd2luZG93c1xcY29tbWFuZFxcY2hrZHNrLmV4ZQotICAuLi4K LSAgcnVuIFwlZgotCi0gICBUaGlzIHdpbGwgd29yazsgbm8gc3VycHJpc2VzIGhlcmUuIEhvd2V2 ZXIsIGlmIHlvdSBoYWQgdXNlZCBBU1NJR04KLSAgIHJhdGhlciB0aGFuIERFRklORSwgeW91IG1p Z2h0IGhhdmUgYmVlbiBzdXJwcmlzZWQgYWZ0ZXIgYWxsOyByZXZpZXcKLSAgIHBhZ2VzIDM0OC0z NDkgb2YgWzM2N11Vc2luZyBDLUtlcm1pdCAoMm5kIEVkKSBmb3IgdGhlIGRpZmZlcmVuY2UKLSAg IGJldHdlZW4gREVGSU5FIGFuZCBBU1NJR04uCi0KLSAgIFdlIGhhdmUgc2FpZCB0aGF0IGFueSBL ZXJtaXQgOTUgb3IgTVMtRE9TIEtlcm1pdCBjb21tYW5kIHRoYXQgcGFyc2VzCi0gICBmaWxlbmFt ZXMgaXRzZWxmIC0tIFNFTkQsIGZvciBleGFtcGxlIC0tIGRvZXMgbm90IHJlcXVpcmUgZG91Ymxl Ci0gICBiYWNrc2xhc2hlcyBzaW5jZSBpdCBrbm93cyBpdCBpcyBwYXJzaW5nIGEgZmlsZW5hbWUu IFNvIHNpbmNlIHRoZQotICAgZm9sbG93aW5nIHdvcmtzOgotCi0gIHNlbmQgYzpcd2luZG93c1xj b21tYW5kXGNoa2Rzay5leGUKLQotICAgU2hvdWxkIHRoZSBmb2xsb3dpbmcgYWxzbyB3b3JrPwot Ci0gIGRlZmluZSBcJWYgYzpcd2luZG93c1xjb21tYW5kXGNoa2Rzay5leGUKLSAgLi4uCi0gIHNl bmQgXCVmCi0KLSAgIEFuc3dlcjogTm8uIFdoeT8gQmVjYXVzZSBcJWYgaXMgZXZhbHVhdGVkICJy ZWN1cnNpdmVseSIsIHRvIGFsbG93IGZvcgotICAgdGhlIHBvc3NpYmlsaXR5IHRoYXQgaXRzIGRl ZmluaXRpb24gY29udGFpbnMgZnVydGhlciB2YXJpYWJsZQotICAgcmVmZXJlbmNlcy4gVGhpcyBp cyB0cnVlIG9mIGFsbCAiYmFja3NsYXNoLXBlcmNlbnQtbGV0dGVyIiAob3IgLWRpZ2l0KQotICAg dmFyaWFibGVzLCBhbmQgYWxzbyBmb3IgYXJyYXkgcmVmZXJlbmNlcy4gU28gXCVmIGJlY29tZXMK LSAgIGM6XHdpbmRvd3NcY29tbWFuZFxjaGtkc2suZXhlLCB3aGljaCBiZWNvbWVzCi0gICBjOndp bmRvd3Njb21tYW5kY2hrZHNrLmV4ZS4KLQotICAgVGhlIHRyaWNrIGhlcmUgaXMgdG8gdXNlIHRo ZSAib3RoZXIiIGtpbmQgb2YgdmFyaWFibGUsIHRoYXQgaXMKLSAgIGV2YWx1YXRlZCBvbmx5ICJv bmUgbGV2ZWwgZGVlcCIgcmF0aGVyIHRoYW4gcmVjdXJzaXZlbHk6Ci0KLSAgZGVmaW5lIGZpbGVu YW1lIGM6XHdpbmRvd3NcY29tbWFuZFxjaGtkc2suZXhlCi0gIC4uLgotICBzZW5kIFxtKGZpbGVu YW1lKQotCi0gICBTaW1pbGFybHkgaWYgeW91IHdhbnQgdG8gcHJvbXB0IHRoZSB1c2VyIGZvciBh IGZpbGVuYW1lOgotCi0gIGFzayBmaWxlbmFtZSB7IFBsZWFzZSB0eXBlIGEgZmlsZW5hbWU6IH0K LSAgIFBsZWFzZSB0eXBlIGEgZmlsZW5hbWU6IGM6XHdpbmRvd3NcY29tbWFuZFxjaGtkc2suZXhl Ci0gIHNlbmQgXG0oZmlsZW5hbWUpCi0KLTEuMTEuNS4gUGFzc2luZyBET1MgRmlsZW5hbWVzIGFz IFBhcmFtZXRlcnMgdG8gTWFjcm9zCi0KLSAgIFN1cHBvc2UgeW91IHdhbnQgdG8gcGFzcyBhIERP UyBmaWxlbmFtZSBjb250YWluaW5nIGJhY2tzbGFzaGVzIGFzIGEKLSAgIHBhcmFtZXRlciB0byBh IEtlcm1pdCBtYWNyby4gVGhpcyByYWlzZXMgdHdvIGlzc3VlczoKLQotICAgIDEuIFBhcmFtZXRl cnMgdG8gbWFjcm9zIGFyZSAianVzdCB0ZXh0IiBhbmQgc28gYXJlIGZ1bGx5IGV2YWx1YXRlZAot ICAgICAgIGJlZm9yZSB0aGV5IGFyZSBwYXNzZWQgdG8gdGhlIG1hY3JvLgotICAgIDIuIE9uY2Ug aW5zaWRlIHRoZSBtYWNybywgdGhlIGZvcm1hbCBwYXJhbWV0ZXJzIFwlMSwgXCUyLCAuLi4gXCU5 IGFyZQotICAgICAgIHRoZSB0eXBlIG9mIHZhcmlhYmxlIHRoYXQgaXMgZXZhbHVhdGVkIHJlY3Vy c2l2ZWx5LgotCi0gICBUaHVzIGEgRE9TIGZpbGVuYW1lIGlzIHJ1aW5lZCBvbmNlIGluIHRoZSBh Y3Qgb2YgcGFyc2luZyB0aGUgbWFjcm8KLSAgIGludm9jYXRpb24sIGFuZCBhZ2FpbiB3aGVuIHJl ZmVycmluZyB0byBpdCBmcm9tIHdpdGhpbiB0aGUgbWFjcm8uIFRvCi0gICBpbGx1c3RyYXRlLCBz dXBwb3NlICJ0ZXN0IiBpcyBhIG1hY3JvLiBUaGVuIGluIHRoZSBpbnZvY2F0aW9uOgotCi0gIHRl c3QgYzpcbXlkaXJcYmxhaC50eHQKLQotICAgImM6bXlkaXJibGFoLnR4dCIgaXMgYXNzaWduZWQg dG8gXCUxLiBIb3dldmVyLCBpZiB3ZSBkb3VibGUgdGhlCi0gICBiYWNrc2xhc2hlczoKLQotICB0 ZXN0IGM6XFxteWRpclxcYmxhaC50eHQKLQotICAgImM6XG15ZGlyXGJsYWgudHh0IiBpcyBhc3Np Z25lZCB0byBcJTEuIEJ1dCB0aGVuIHdoZW4geW91IHJlZmVyIHRvIFwlMQotICAgaW4gdGhlIG1h Y3JvLCBpdCBpcyBldmFsdWF0ZWQgcmVjdXJzaXZlbHksIHJlc3VsdGluZyBpbgotICAgImM6bXlk aXJibGFoLnR4dCIuIFRvIGlsbHVzdHJhdGU6Ci0KLSAgZGVmaW5lIHRlc3QgZWNobyBcJTEKLSAg dGVzdCBjOlxteWRpclxibGFoLnR4dAotICBjOm15ZGlyYmxhaC50eHQKLSAgdGVzdCBjOlxcbXlk aXJcXGJsYWgudHh0Ci0gIGM6bXlkaXJibGFoLnR4dAotICB0ZXN0IGM6XFxcXG15ZGlyXFxcXGJs YWgudHh0Ci0gIGM6XG15ZGlyXGJsYWgudHh0Ci0KLSAgIExldCdzIGFkZHJlc3MgZWFjaCBwYXJ0 IG9mIHRoZSBwcm9ibGVtIHNlcGFyYXRlbHkuIEZpcnN0LCBpbnNpZGUgdGhlCi0gICBtYWNyby4g WW91IGNhbiB1c2UgdGhlIFxmY29udGVudHMoKSBmdW5jdGlvbiB0byBmb3JjZSBhCi0gICBiYWNr c2xhc2gtcGVyY2VudCB2YXJpYWJsZSAoc3VjaCBhcyBhIG1hY3JvIGFyZ3VtZW50KSB0byBiZSBl dmFsdWF0ZWQKLSAgIG9uZSBsZXZlbCBkZWVwIGluc3RlYWQgb2YgcmVjdXJzaXZlbHksIGZvciBl eGFtcGxlOgotCi0gIGRlZmluZSB0ZXN0IGVjaG8geyBUaGUgZmlsZW5hbWUgaXMgIlxmY29udGVu dHMoXCUxKSJ9Ci0KLSAgdGVzdCBjOlxteWRpclxibGFoLnR4dCAgICAgICAgICAgICAgIDsgV2Ug ZG9uJ3QgZXhwZWN0IHRoaXMgdG8gd29yawotICAgVGhlIGZpbGVuYW1lIGlzICJjOm15ZGlyYmxh aC50eHQiICAgOyBhbmQgaXQgZG9lc24ndC4KLSAgdGVzdCBjOlxcbXlkaXJcXGJsYWgudHh0ICAg ICAgICAgICAgIDsgQnV0IHRoaXMgZG9lcy4uLgotICAgVGhlIGZpbGVuYW1lIGlzICJjOlxteWRp clxibGFoLnR4dCIKLQotICAgVGh1cyBpZiB0aGUgZmlsZW5hbWUgYXJyaXZlcyBpbnNpZGUgdGhl IG1hY3JvIHdpdGggc2luZ2xlIGJhY2tzbGFzaGVzLAotICAgdGhlIGJhY2tzbGFzaGVzIGFyZSBw cmVzZXJ2ZWQgaWYgeW91IGFsd2F5cyByZWZlciB0byB0aGUgcGFyYW1ldGVyCi0gICB0aHJvdWdo IHRoZSBcZmNvbnRlbnRzKCkgZnVuY3Rpb24uCi0KLSAgIE5vdyBob3cgdG8gZW5zdXJlIHRoYXQg YmFja3NsYXNoZXMgYXJlIG5vdCBzdHJpcHBlZCBvciBtaXNpbnRlcnByZXRlZAotICAgd2hlbiBw YXNzaW5nIGEgZmlsZW5hbWUgdG8gYSBtYWNybz8gVGhpcyBicmluZ3MgdXMgYmFjayB0byB3aGF0 IHdlCi0gICBsZWFybmVkIGluIGVhcmxpZXIgc2VjdGlvbnM6Ci0KLSAgICAxLiBJZiBpdCBpcyBh IGxpdGVyYWwgZmlsZW5hbWUsIGVpdGhlciBkb3VibGUgdGhlIGJhY2tzbGFzaGVzLCBvciAoaWYK LSAgICAgICB0aGUgZmlsZW5hbWUgaXMgdG8gYmUgdXNlZCBvbmx5IHdpdGhpbiBLZXJtaXQgaXRz ZWxmIGFuZCBub3QgcGFzc2VkCi0gICAgICAgdG8gYSBET1Mgc2hlbGwsIG9yIGl0IGlzIHRvIGJl IHBhc3NlZCB0byBhbiBhbHRlcm5hdGl2ZSBzaGVsbCB0aGF0Ci0gICAgICAgYWNjZXB0cyBmb3J3 YXJkIHNsYXNoIGFzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciksIHVzZSBmb3J3YXJkIHNsYXNoCi0g ICAgICAgaW5zdGVhZCBvZiBiYWNrc2xhc2ggYXMgdGhlIGRpcmVjdG9yeSBzZXBhcmF0b3IuCi0g ICAgMi4gSWYgaXQgaXMgYSB2YXJpYWJsZSB0aGF0IGNvbnRhaW5zIGEgZmlsZW5hbWUsIG1ha2Ug c3VyZSB5b3UgdXNlIGEKLSAgICAgICBtYWNyby1zdHlsZSB2YXJpYWJsZSBuYW1lLCByYXRoZXIg dGhhbiBhCi0gICAgICAgYmFja3NsYXNoLXBlcmNlbnQtY2hhcmFjdGVyIG5hbWUuCi0KLSAgIEV4 YW1wbGVzOgotCi0gIGRlZmluZSB0ZXN0IGVjaG8gXGZjb250ZW50cyhcJTEpCi0gIGRlZmluZSBm aWxlbmFtZSBjOlxteWRpclxibGFoLnR4dAotCi0gIHRlc3QgYzpcXG15ZGlyXFxibGFoLnR4dCAg OyBMaXRlcmFsIGZpbGVuYW1lIHdpdGggZG91YmxlIGJhY2tzbGFzaGVzCi0gIGM6XG15ZGlyXGJs YWgudHh0Ci0KLSAgdGVzdCBjOi9teWRpci9ibGFoLnR4dCAgICA7IExpdGVyYWwgZmlsZW5hbWUg d2l0aCBmb3J3YXJkIHNsYXNoZXMKLSAgYzovbXlkaXIvYmxhaC50eHQKLQotICB0ZXN0IFxtKGZp bGVuYW1lKSAgICAgICAgIDsgVmFyaWFibGUKLSAgYzpcbXlkaXJcYmxhaC50eHQKLQotICAgQnV0 IHdoYXQgaWYgeW91IGRvbid0IGxpa2UgdGhlc2UgcnVsZXMgYW5kIHlvdSBzdGlsbCB3YW50IHRv IHBhc3MgYQotICAgbGl0ZXJhbCBmaWxlbmFtZSBjb250YWluaW5nIHNpbmdsZSBiYWNrc2xhc2hl cyB0byBhIG1hY3JvPyBUaGlzIGlzCi0gICBwb3NzaWJsZSB0b28sIGJ1dCBhIGJpdCB0cmlja3k6 IHR1cm4gY29tbWFuZCBxdW90aW5nIG9mZiBiZWZvcmUKLSAgIGludm9raW5nIHRoZSBtYWNybywg YW5kIHRoZW4gdHVybiBpdCBiYWNrIG9uIGluc2lkZSB0aGUgbWFjcm8uIEV4YW1wbGU6Ci0KLSAg ZGVmaW5lIHRlc3Qgc2V0IGNvbW1hbmQgcXVvdGluZyBvbiwgZWNobyBcZmNvbnRlbnRzKFwlMSkK LQotICBzZXQgY29tbWFuZCBxdW90aW5nIG9mZgotICB0ZXN0IGM6XG15ZGlyXGJsYWgudHh0Ci0g IGM6XG15ZGlyXGJsYWgudHh0Ci0KLSAgIFVwb24gcmV0dXJuIGZyb20gdGhlIG1hY3JvLCBjb21t YW5kIHF1b3RpbmcgaXMgYmFjayBvbiAoc2luY2UgdGhlIG1hY3JvCi0gICB0dXJuZWQgaXQgb24p LgotCi0gICBPYnZpb3VzbHkgdGhpcyB0cmljayBjYW4gbm90IGJlIHVzZWQgaWYgdGhlIGZpbGVu YW1lIGlzIHN0b3JlZCBpbiBhCi0gICB2YXJpYWJsZSwgc2luY2UgaXQgcHJldmVudHMgdGhlIHZh cmlhYmxlIGZyb20gYmVpbmcgZXZhbHVhdGVkLgotCi0xLjExLjYuIFBhc3NpbmcgRE9TIEZpbGUg TmFtZXMgZnJvbSBNYWNybyBQYXJhbWV0ZXJzIHRvIHRoZSBET1MgU2hlbGwKLQotICAgTm93IHN1 cHBvc2UgeW91IG5lZWQgdG8gcGFzcyBhIERPUyBmaWxlbmFtZSB0byBhIG1hY3JvLCBhbmQgdGhl IG1hY3JvCi0gICBuZWVkcyB0byBwYXNzIGl0LCBpbiB0dXJuLCB0byB0aGUgV2luZG93cyBzaGVs bCB2aWEgKHNheSkgS2VybWl0J3MgUlVOCi0gICBjb21tYW5kLiBUaGlzIHdvcmtzIHRvbzoKLQot ICBkZWZpbmUgeHJ1biBydW4gXGZjb250ZW50cyhcJTEpCi0gIHhydW4gYzpcXHdpbmRvd3NcXGNv bW1hbmRcXGNoa2Rzay5leGUKLQotICAgKG9yIHlvdSBjYW4gdXNlIHRoZSBTRVQgQ09NTUFORCBR VU9USU5HIE9GRiAvIE9OIHRlY2huaXF1ZSBkZXNjcmliZWQKLSAgIGFib3ZlIHRvIGF2b2lkIHRo ZSBkb3VibGUgYmFja3NsYXNoZXMuKSBCdXQuLgotCi0gIHhydW4gYzovd2luZG93cy9jb21tYW5k L2Noa2Rzay5leGUKLQotICAgZG9lcyBub3Qgd29yayBpZiB0aGUgV2luZG93cyBzaGVsbCBkb2Vz IG5vdCByZWNvZ25pemUgIi8iIGFzIGEKLSAgIGRpcmVjdG9yeSBzZXBhcmF0b3IuIElmIHRoZXJl IGlzIGEgY2hhbmNlIHRoYXQgYSBmaWxlbmFtZSBtaWdodCBiZQotICAgcGFzc2VkIHRvIHRoZSBt YWNybyBpbiB0aGlzIGZvcm0sIHRoZSBtYWNybyB3aWxsIG5lZWQgdG8gY29udmVydCBpdCB0bwot ICAgYSBmb3JtIGFjY2VwdGFibGUgdG8gdGhlIHNoZWxsOgotCi0gIGRlZmluZSB4cnVuIHJ1biBc ZnJlcGxhY2UoXGZjb250ZW50cyhcJTEpLC8sXFwpCi0KLSAgIEhlcmUgd2UgcmVwbGFjZSBhbGwg b2NjdXJyZW5jZXMgKGlmIGFueSkgb2YgIi8iIGluIHRoZSBhcmd1bWVudCB3aXRoCi0gICAiXCIg cHJpb3IgdG8gaXNzdWluZyB0aGUgUlVOIGNvbW1hbmQuIE9mIGNvdXJzZSwgaW4gb3JkZXIgdG8g c3BlY2lmeQotICAgIlwiIGFzIGEgbGl0ZXJhbCBjaGFyYWN0ZXIgaW4gdGhlIFxmcmVwbGFjZSgp IGFyZ3VtZW50IGxpc3QsIHdlIGhhdmUgdG8KLSAgIGRvdWJsZSBpdC4KLQotMS4xMS43LiBQYXNz aW5nIERPUyBGaWxlbmFtZXMgdG8gS2VybWl0IGZyb20gdGhlIFNoZWxsCi0KLSAgIEFzIG5vdGVk IGluIHRoZSBtYW51YWwsIHRoZSBcJkBbXSBhcnJheSBjb250YWlucyBLZXJtaXQncyBjb21tYW5k LWxpbmUKLSAgIGFyZ3VtZW50cy4gU3VwcG9zZSBvbmUgb2YgdGhlc2UgYXJndW1lbnRzLCBzYXkg XCZAWzNdLCBpcyBhIERPUwotICAgZmlsZW5hbWUgc3VjaCBhcyBDOlxGT09cQkFSXEJBWlxPT0ZB LlRYVC4gKE5vdGU6IEluIEMtS2VybWl0IDcuMCBhbmQKLSAgIEs5NSAxLjEuMTggYW5kIGxhdGVy LCBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGFmdGVyICI9IiBvciAiLS0iIGFyZSBhbHNvCi0gICBh dmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBcJTEuLjkgdmFyaWFibGVzOyBzZWUgWzM2OF1TZWN0 aW9uIDcuNS4pCi0KLSAgIE9mIGNvdXJzZSB5b3UgY2FuIGVsaW1pbmF0ZSBhbnkgcHJvYmxlbXMg YnkgdXNpbmcgZm9yd2FyZCBzbGFzaGVzCi0gICByYXRoZXIgdGhhbiBiYWNrc2xhc2hlcyBpbiB0 aGUgZmlsZW5hbWUsIGJ1dCBzb21ldGltZXMgdGhpcyBpcyBub3QKLSAgIHBvc3NpYmxlLCBhcyB3 aGVuIHRoZSBLZXJtaXQgY29tbWFuZCBsaW5lIGlzIGJlaW5nIGdlbmVyYXRlZCBieSBhbm90aGVy Ci0gICBwcm9ncmFtIHRoYW4gY2FuIG9ubHkgZ2VuZXJhdGUgIm5hdGl2ZSIgZm9ybWF0IERPUyBm aWxlbmFtZXMuCi0KLSAgIEFzIG5vdGVkIGluIHRoZSBtYW51YWwsICJcJXgiIHZhcmlhYmxlcyBh bmQgXCZ4W10gYXJyYXlzIGFyZSBhbHdheXMKLSAgIGV2YWx1YXRlZCAiYWxsIHRoZSB3YXkiIChy ZWN1cnNpdmVseSkuIElmIHRoZSBjb250ZW50cyBvZiBvbmUgb2YgdGhlc2UKLSAgIHZhcmlhYmxl cyBjb250YWlucyBiYWNrc2xhc2hlcywgdGhpcyBjYXVzZXMgYW5vdGhlciBsZXZlbCBvZgotICAg ZXZhbHVhdGlvbi4KLQotICAgVGhlcmUgaXMgYW5vdGhlciBraW5kIG9mIHZhcmlhYmxlLCB3aGlj aCBpcyBldmFsdWF0ZWQgb25seSAib25lIGxldmVsCi0gICBkZWVwIi4gWW91IGNhbiB1c2UgdGhp cyB0byBwcmV2ZW50IGludGVycHJldGF0aW9uIG9mIHRoZSBiYWNrc2xhc2hlcyBpbgotICAgdGhl IGZpbGVuYW1lcy4gRXhhbXBsZToKLQotICBhc3NpZ24gZmlsZW5hbWUgXGZjb250ZW50cyhcJkBb M10pICA7IFRyYW5zZmVyIGNvbnRlbnRzCi0gIC4uLgotICBzZW5kIFxtKGZpbGVuYW1lKQotCi0g ICBPciwgbW9yZSBzaW1wbHk6Ci0KLSAgc2VuZCBcZmNvbnRlbnRzKFwmQFszXSkKLQotMS4xMi4g RGVidWdnaW5nCi0KLSAgIFRoZSBkZWJ1ZyBsb2cgaXMgcHJvZHVjZWQgd2hlbiB5b3UgZ2l2ZSBh ICJsb2cgZGVidWciIGNvbW1hbmQuIFRoaXMgaXMKLSAgIG5vcm1hbGx5IGRvbmUgYXQgdGhlIHJl cXVlc3Qgb2YgdGhlIEtlcm1pdCBoZWxwIGRlc2ssIGZvciBmb3J3YXJkaW5nIHRvCi0gICB0aGUg S2VybWl0IGRldmVsb3BlcnMgZm9yIGFuYWx5c2lzIGFzIGEgbGFzdCByZXNvcnQgaW4gdHJvdWJs ZXNob290aW5nCi0gICBwcm9ibGVtcy4gKExhc3QgcmVzb3J0IGJlY2F1c2UgaXQgY2FuIGdyb3cg cXVpdGUgaHVnZSBpbiBhIHZlcnkgc2hvcnQKLSAgIHRpbWUuKSBJbiBjYXNlcyB3aGVyZSB0aW1p bmcgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBhCi0gICBwcm9ibGVt LCB5b3UgY2FuIHRlbGwgQy1LZXJtaXQgdG8gcHV0IGEgdGltZXN0YW1wIG9uIGVhY2ggZGVidWcg bG9nCi0gICBsaW5lIGJ5IGdpdmluZyB0aGUgY29tbWFuZDoKLQotICBTRVQgREVCVUcgVElNRVNU QU1QIE9OCi0KLSAgIEF0IGFueSB0aW1lIGJlZm9yZSBvciBhZnRlciBhY3RpdmF0aW5nIHRoZSBk ZWJ1ZyBsb2cgKFNFVCBERUJVRwotICAgVElNRVNUQU1QIE9GRiB0dXJucyBvZmYgdGltZXN0YW1w aW5nKS4gVGltZXN0YW1wcyBjYW4gYmUgdHVybmVkIG9mZiBhbmQKLSAgIG9uIGFzIGRlc2lyZWQg d2hpbGUgbG9nZ2luZy4gT2J2aW91c2x5LCB0aGV5IGluY3JlYXNlIHRoZSBzaXplIGFuZAotICAg Z3Jvd3RoIHJhdGUgb2YgdGhlIGxvZyBzaWduaWZpY2FudGx5LCBhbmQgc28gc2hvdWxkIGJlIHVz ZWQgc3BhcmluZ2x5LgotICAgVGltZXN0YW1wcyBhcmUgb2YgdGhlIGZvcm0gaGg6bW06c3MueHh4 LCB3aGVyZSAueHh4IGlzIHRob3VzYW5kcyBvZiBhCi0gICBzZWNvbmQgKGJ1dCBpcyBpbmNsdWRl ZCBvbmx5IG9uIHBsYXRmb3JtcyB0aGF0IGluY2x1ZGUgdGhpcyBmZWF0dXJlKS4KLQotMS4xMy4g TG9ncwotCi0gICBJbiBVTklYIEMtS2VybWl0IGFuZCBpbiBLLTk1LCB5b3UgY2FuIG5vdyBkaXJl Y3QgYW55IGxvZyB0byBhIHBpcGUuCi0gICBUaGlzIG5vdCBvbmx5IGxldHMgeW91IHNlbmQgeW91 ciBsb2dzIHRvIHBsYWNlcyBvdGhlciB0aGFuIGRpc2sgZmlsZXMsCi0gICBidXQgYWxzbyBsZXRz IHlvdSBjdXN0b21pemUgdGhlbSB0byBhbnkgZGVzaXJlZCBkZWdyZWUuCi0KLSAgIExPRyB7IERF QlVHLCBQQUNLRVRTLCBTRVNTSU9OLCBUUkFOU0FDVElPTiwgQ09OTkVDVElPTiB9IHsgZmlsZSwg cGlwZSB9Ci0gICAgICAgICAgLi4uCi0gICAgICAgICAgQSAicGlwZSIgaXMgdGhlIG5hbWUgb2Yg YSBjb21tYW5kLCBwcmVjZWRlZCBieSBhIHZlcnRpY2FsIGJhci4KLSAgICAgICAgICBJZiB0aGUg cGlwZSBjb250YWlucyBhbnkgc3BhY2VzLCBpdCBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcy4K LQotICAgSGVyZSBhcmUgc29tZSBleGFtcGxlcyBmb3IgVU5JWCAoYWx3YXlzIHJlbWVtYmVyIHRo ZSBpbXBvcnRhbmNlIG9mCi0gICBnZXR0aW5nIHRoZSBVTklYIHNoZWxsIHF1b3RpbmcgcnVsZXMg cmlnaHQpOgotCi0gICBMT0cgVFJBTlNBQ1RJT05TIHxscHIKLSAgICAgICAgICBUaGlzIHNlbmRz IHRoZSB0cmFuc2FjdGlvbiBsb2cgdG8gdGhlIGRlZmF1bHQgVU5JWCBwcmludGVyLAotICAgICAg ICAgIHJhdGhlciB0aGFuIHRvIGEgZmlsZSAodXNlICJscCIgcmF0aGVyIHRoYW4gImxwciIgaWYg bmVjZXNzYXJ5KS4KLQotICAgTE9HIFRSQU5TQUNUSU9OUyB7fCBteWZpbHRlciA+IHQubG9nfQot ICAgICAgICAgIEZvciB0aG9zZSB3aG8gZG9uJ3QgbGlrZSB0aGUgZm9ybWF0IG9mIHRoZSB0cmFu c2FjdGlvbiBsb2csIG9yCi0gICAgICAgICAgd2FudCB0byBleHRyYWN0IGNlcnRhaW4gaW5mb3Jt YXRpb24gZnJvbSBpdDsgd3JpdGUgeW91ciBvd24KLSAgICAgICAgICBvdXRwdXQgZmlsdGVyLgot Ci0gICBMT0cgU0VTU0lPTiB7fCBscHIgLVBsYXNlcndyaXRlcn0KLSAgICAgICAgICBUaGlzIHNl bmRzIHRoZSBzZXNzaW9uIGxvZyB0byBhIHNwZWNpZmljIFVOSVggcHJpbnRlciwgcmF0aGVyCi0g ICAgICAgICAgdGhhbiB0byBhIGZpbGUuIE5vdGUgdGhlIGJyYWNlcyBhcm91bmQgdGhlIHBpcGVs aW5lLiBUaGVzZSBhcmUKLSAgICAgICAgICByZXF1aXJlZCBiZWNhdXNlIGl0IGNvbnRhaW5zIHNw YWNlcy4KLQotICAgTE9HIERFQlVHIHt8IHRhaWwgLTEwMCA+IGRlYnVnLmxvZ30KLSAgICAgICAg ICBUaGlzIGNhdXNlcyB0aGUgZGVidWcgbG9nIGZpbGUgdG8gY29udGFpbiBvbmx5IHRoZSBmaW5h bCAxMDAKLSAgICAgICAgICBsaW5lcy4gU3VwcG9zZSBDLUtlcm1pdCBjcmFzaGVzIHVuZGVyIHNv bWUgdW5wcmVkaWN0YWJsZQotICAgICAgICAgIGNpcmN1bXN0YW5jZXMsIGFuZCB5b3UgbmVlZCBh IGRlYnVnIGxvZyB0byBjYXRjaCBpdCBpbiB0aGUgYWN0LgotICAgICAgICAgIEJ1dCB0aGUgZGVi dWcgbG9nIGNhbiBncm93IHRvIGh1Z2UgcHJvcG9ydGlvbnMgdmVyeSBxdWlja2x5LAotICAgICAg ICAgIHBvc3NpYmx5IGZpbGxpbmcgdXAgdGhlIGRpc2suIFBpcGluZyB0aGUgZGVidWcgbG9nIHRo cm91Z2gKLSAgICAgICAgICAidGFpbCIgcmVzdWx0cyBpbiBrZWVwaW5nIG9ubHkgdGhlIGxhc3Qg MTAwIGxpbmVzIChvciBvdGhlcgotICAgICAgICAgIG51bWJlciBvZiB5b3VyIGNob2ljZSkuCi0K LSAgIExPRyBERUJVRyB7fCBncmVwICJeVEVMTkVUIiA+IGRlYnVnLmxvZ30KLSAgICAgICAgICBU aGlzIG9uZSBzaG93cyBob3cgdG8gbG9nIG9ubHkgVGVsbmV0IG5lZ290aWF0aW9ucy4gUGlwaW5n IHRoZQotICAgICAgICAgIGRlYnVnIGxvZyB0aHJvdWdoIGdyZXAgb3IgZWdyZXAgbGV0cyB5b3Ug bG9nIG9ubHkgc3BlY2lmaWMKLSAgICAgICAgICBpbmZvcm1hdGlvbiwgcmF0aGVyIHRoYW4gZXZl cnl0aGluZy4gIm1hbiBncmVwIiBmb3IgZnVydGhlcgotICAgICAgICAgIGluZm8uCi0KLSAgIExP RyBERUJVRyB7fCBnemlwIC1jID4gZGVidWcubG9nLmd6fQotICAgICAgICAgIENyZWF0ZXMgYSBm dWxsIGRlYnVnIGxvZywgYnV0IGNvbXByZXNzZWQgYnkgZ3ppcCB0byBzYXZlIHNwYWNlLgotCi0g ICBMT0cgUEFDS0VUUyB7fCB0ciAiXFwwMSIgIlgiIHwgY3V0IC1jOS0gPiBwYWNrZXQubG9nfQot ICAgICAgICAgIFRoaXMgb25lIHdyaXRlcyB0aGUgcmVndWxhciBwYWNrZXQgbG9nLCBidXQgdHJh bnNsYXRlcyB0aGUKLSAgICAgICAgICBDdHJsLUEgdGhhdCBzdGFydHMgZWFjaCBwYWNrZXQgdG8g dGhlIGxldHRlciAiWCIgYW5kIHJlbW92ZXMgdGhlCi0gICAgICAgICAgcy1ubi1ubi0gbm90YXRp b24gZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbGluZS4gTm90ZSB0aGUKLSAgICAgICAgICBk b3VibGUgYmFja3NsYXNoIChub3JtYWwgS2VybWl0IHF1b3RpbmcgcnVsZXMpLiAibWFuIHRyIiBh bmQKLSAgICAgICAgICAibWFuIGN1dCIgZm9yIGZ1cnRoZXIgaW5mby4KLQotICAgU2VlIFszNjld U2VjdGlvbiAyLjEyIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbmV3IGNvbm5lY3Rpb24gbG9n LgotCi0xLjE0LiBBdXRvbWF0aWMgRmlsZS1UcmFuc2ZlciBQYWNrZXQgUmVjb2duaXRpb24gYXQg dGhlIENvbW1hbmQgUHJvbXB0Ci0KLSAgIEJlZ2lubmluZyBpbiB2ZXJzaW9uIDcuMCwgQy1LZXJt aXQgY2FuIHJlY29nbml6ZSBLZXJtaXQgKGFuZCBpbiBzb21lCi0gICBjYXNlcyBhbHNvIFptb2Rl bSkgZmlsZS10cmFuc2ZlciBwYWNrZXRzIHdoaWxlIGF0IGl0cyBjb21tYW5kIHByb21wdC4KLSAg IFRoaXMgaXMgY29udmVuaWVudCAoZm9yIGV4YW1wbGUpLCBpZiB5b3UgZXNjYXBlZCBiYWNrIGZy b20gYSByZW1vdGUKLSAgIEtlcm1pdCBwcm9ncmFtIGFuZCB0b2xkIHRoZSBsb2NhbCBLZXJtaXQg cHJvZ3JhbSB0byBzZW5kIGEgZmlsZSwgYnV0Ci0gICBmb3Jnb3QgdG8gdGVsbCB0aGUgcmVtb3Rl IEtlcm1pdCBwcm9ncmFtIHRvIHJlY2VpdmUgaXQgKGFuZCB0aGUgbG9jYWwKLSAgIEtlcm1pdCBk aWQgbm90IGhhdmUgdGhlICJzZW5kIGEgS2VybWl0IHJlY2VpdmUgY29tbWFuZCIgZmVhdHVyZQot ICAgYXZhaWxhYmxlKS4gVGhpcyBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGZvbGxvd2lu ZyBjb21tYW5kOgotCi0gICBTRVQgQ09NTUFORCBBVVRPRE9XTkxPQUQgeyBPTiwgT0ZGIH0KLSAg ICAgICAgICBXaGVuIE9OLCB3aGljaCBpcyB0aGUgZGVmYXVsdCwgdGhlIGNvbW1hbmQgcGFyc2Vy IHJlY29nbml6ZXMKLSAgICAgICAgICBLZXJtaXQgcGFja2V0cyB3aGVuIEtlcm1pdCBpcyBpbiBy ZW1vdGUgbW9kZS4gQW4gUyBwYWNrZXQgbWFrZXMKLSAgICAgICAgICBpdCBnbyBpbnRvIHJlY2Vp dmUgbW9kZSwgYW4gSSBwYWNrZXQgbWFrZXMgaXQgZ28gaW50byBzZXJ2ZXIKLSAgICAgICAgICBt b2RlLiBXaGVuIE9GRiwgcGFja2V0IHJlY29nbml0aW9uIGlzIGRpc2FibGVkIGFuZCB0aGUgYmVo YXZpb3IKLSAgICAgICAgICB3aGVuIGEgcGFja2V0IGlzIHJlY2VpdmVkIGF0IHRoZSBjb21tYW5k IHByb21wdCBpcyBhcyBpdCB3YXMgaW4KLSAgICAgICAgICBDLUtlcm1pdCA2LjEgYW5kIGVhcmxp ZXIgKG5hbWVseSB0byBwcmludCBhbiBlcnJvciBtZXNzYWdlKS4KLQotICAgQ09NTUFORCBBVVRP RE9XTkxPQUQgaXMgdGhlIGNvbW1hbmQtbW9kZSBlcXVpdmFsZW50IG9mIFRFUk1JTkFMCi0gICBB VVRPRE9XTkxPQUQsIHdoaWNoIGlzIGVmZmVjdGl2ZSBkdXJpbmcgQ09OTkVDVCBtb2RlLgotCi0x LjE1LiBUaGUgVFlQRSBDb21tYW5kCi0KLSAgIFRoZSBUWVBFIGNvbW1hbmQgbm93IGFjY2VwdHMg YSBzZWxlY3Rpb24gb2Ygb3B0aW9uYWwgc3dpdGNoZXMKLSAgIChbMzcwXVNlY3Rpb24gMS41KSwg YW5kIGFsc28gc2V0cyBzZXZlcmFsIHZhcmlhYmxlcy4KLQotICAgU3ludGF4OiBUWVBFIFsgc3dp dGNoZXMuLi4gXSBmaWxlbmFtZQotCi0gICBWYXJpYWJsZXM6Ci0KLSAgIFx2KHR5X2xuKQotICAg ICAgICAgIExpbmUgbnVtYmVyIG9mIGN1cnJlbnQgbGluZSAoZHVyaW5nIFRZUEUgY29tbWFuZDsg c2VlIC9QUkVGSVgpCi0KLSAgIFx2KHR5X2xjKQotICAgICAgICAgIExpbmUgY291bnQgb2YgZmls ZSBtb3N0IHJlY2VudGx5IFRZUEVkLgotCi0gICBcdih0eV9tYykKLSAgICAgICAgICBNYXRjaCBj b3VudCBvZiBmaWxlIG1vc3QgcmVjZW50bHkgVFlQRWQgKHNlZSAvTUFUQ0gpLgotCi0gICBTd2l0 Y2hlczoKLQotICAgL1BBR0UKLSAgICAgICAgICBJZiAvUEFHRSBpcyBpbmNsdWRlZCwgS2VybWl0 IHBhdXNlcyBhdCB0aGUgZW5kIG9mIGVhY2ggc2NyZWVuZnVsCi0gICAgICAgICAgYW5kIGlzc3Vl cyBhICJtb3JlPyIgcHJvbXB0LiBZb3UgbWF5IHByZXNzIHRoZSBzcGFjZSBiYXIgdG8gdmlldwot ICAgICAgICAgIHRoZSBuZXh0IHBhZ2UgKHNjcmVlbmZ1bCksIG9yIHByZXNzICJxIiBvciAibiIg dG8gcmV0dXJuIHRvIHRoZQotICAgICAgICAgIEMtS2VybWl0IHByb21wdC4gSWYgdGhpcyBzd2l0 Y2ggaXMgZ2l2ZW4sIGl0IG92ZXJyaWRlcyB0aGUKLSAgICAgICAgICBDT01NQU5EIE1PUkUtUFJP TVBUSU5HIHNldHRpbmcgZm9yIHRoaXMgY29tbWFuZCBvbmx5LiBJZiBpdCBpcwotICAgICAgICAg IG5vdCBnaXZlbiwgcGFnaW5nIGlzIGFjY29yZGluZyB0byBDT01NQU5EIE1PUkUtUFJPTVBUSU5H LgotCi0gICAvTk9QQUdFCi0gICAgICAgICAgRG8gbm90IHBhdXNlIGF0IHRoZSBlbmQgb2YgZWFj aCBzY3JlZW5mdWw7IHNob3cgdGhlIHdob2xlIGZpbGUKLSAgICAgICAgICAob3IgYWxsIHNlbGVj dGVkIGxpbmVzKSBhdCBvbmNlLiBJZiB0aGlzIHN3aXRjaCBpcyBnaXZlbiwgaXQKLSAgICAgICAg ICBvdmVycmlkZXMgdGhlIENPTU1BTkQgTU9SRS1QUk9NUFRJTkcgc2V0dGluZyBmb3IgdGhpcyBj b21tYW5kCi0gICAgICAgICAgb25seS4gSWYgaXQgaXMgbm90IGdpdmVuLCBwYWdpbmcgaXMgYWNj b3JkaW5nIHRvIENPTU1BTkQKLSAgICAgICAgICBNT1JFLVBST01QVElORy4KLQotICAgL0hFQURb Om5dCi0gICAgICAgICAgT25seSBzaG93IHRoZSBmaXJzdCBuIGxpbmVzIG9mIHRoZSBmaWxlICh3 aGVyZSBuIGlzIGEgbnVtYmVyKS4KLSAgICAgICAgICBJZiBuIGlzIG9taXR0ZWQsIDEwIGlzIHVz ZWQuCi0KLSAgIC9UQUlMWzpuXQotICAgICAgICAgIE9ubHkgc2hvdyB0aGUgbGFzdCBuIGxpbmVz IG9mIHRoZSBmaWxlICh3aGVyZSBuIGlzIGEgbnVtYmVyKS4gSWYKLSAgICAgICAgICBuaXMgb21p dHRlZCwgMTAgaXMgdXNlZC4gTm90ZTogL0hFQUQgYW5kIC9UQUlMIGNhbid0IGJlCi0gICAgICAg ICAgY29tYmluZWQ7IGlmIHlvdSBnaXZlIGJvdGggc3dpdGNoZXMsIG9ubHkgdGhlIG1vc3QgcmVj ZW50IG9uZSBpcwotICAgICAgICAgIHVzZWQuCi0KLSAgIC9NQVRDSDpwYXR0ZXJuCi0gICAgICAg ICAgT25seSB0eXBlIGxpbmVzIGZyb20gdGhlIGZpbGUgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0 dGVybiAoc2VlCi0gICAgICAgICAgWzM3MV1TZWN0aW9uIDQuOS4xIGZvciBwYXR0ZXJuIG5vdGF0 aW9uKS4gVU5JWCB1c2VycyBmYW1pbGlhcgotICAgICAgICAgIHdpdGggZ3JlcCBzaG91bGQgbm90 ZSBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2U6IHRoZXJlIGlzIG5vCi0gICAgICAgICAgaW1wbGll ZCAiKiIgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBwYXR0ZXJuLiBUaHVzOgotCi0g IFRZUEUgL01BVENIOmZvbyAgICBMaXN0cyBsaW5lcyB3aG9zZSBlbnRpcmUgY29udGVudHMgYXJl ICJmb28iLgotICBUWVBFIC9NQVRDSDpmb28qICAgTGlzdHMgbGluZXMgdGhhdCBzdGFydCB3aXRo ICJmb28iLgotICBUWVBFIC9NQVRDSDoqZm9vICAgTGlzdHMgbGluZXMgdGhhdCBlbmQgd2l0aCAi Zm9vIi4KLSAgVFlQRSAvTUFUQ0g6KmZvbyogIExpc3RzIGxpbmVzIHRoYXQgaGF2ZSAiZm9vIiBh bnl3aGVyZSBpbiB0aGVtLgotCi0gICAgICAgICAgL0hFQUQgYW5kIC9UQUlMIGFwcGx5IGFmdGVy IC9NQVRDSCwgc28gInR5cGUgL3RhaWw6MjAgL21hdGNoOngqIgotICAgICAgICAgIHNob3dzIHRo ZSBsYXN0IDIwIGxpbmVzIGluIHRoZSBmaWxlIHRoYXQgc3RhcnQgd2l0aCAieCIuCi0KLSAgIC9Q UkVGSVg6c3RyaW5nCi0gICAgICAgICAgUHJpbnQgdGhlIGdpdmVuIHN0cmluZyBhdCB0aGUgYmVn aW5uaW5nIG9mIGVhY2ggbGluZS4gVGhlIHN0cmluZwotICAgICAgICAgIG1heSBiZSBhIGNvbnN0 YW50LCBhIHZhcmlhYmxlLCBvciBhIHF1b3RlZCB2YXJpYWJsZS4gSWYgaXQncyBhbgotICAgICAg ICAgIHVucXVvdGVkIHZhcmlhYmxlLCBpdHMgdmFsdWUgYXQgdGhlIHRpbWUgdGhlIFRZUEUgY29t bWFuZCB3YXMKLSAgICAgICAgICBnaXZlbiBpcyB1c2VkIGFzIGEgY29uc3RhbnQuIElmIGl0IGlz IGEgcXVvdGVkIHZhcmlhYmxlLCBpdCBpcwotICAgICAgICAgIHJlLWV2YWx1YXRlZCBmb3IgZWFj aCBsaW5lOyBhIHVzZWZ1bCB2YXJpYWJsZSBmb3IgdGhpcyBjb250ZXh0Ci0gICAgICAgICAgaXMg XHYodHlfbG4pICh0aGUgbGluZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgbGluZSBiZWluZyB0eXBl ZCkuCi0gICAgICAgICAgSWYgdGhlIHByZWZpeCBpcyB0byBpbmNsdWRlIHNwYWNlcywgaXQgbXVz dCBiZSBlbmNsb3NlZCBpbgotICAgICAgICAgIGJyYWNlcy4gRXhhbXBsZXM6Ci0KLSAgICAgICAg dHlwZSAvcHJlZml4Ontvb2ZhLnR4dDogfSAvbWF0Y2g6KnRoaW5nKiBvb2ZhLnR4dAotICAgICAg ICAgICAgICAgIFByaW50cyBhbGwgbGluZXMgaW4gb29mYS50eHQgdGhhdCBjb250YWluICJ0aGlu ZyIgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSBpdHNlbGYgYXMgdGhlIHByZWZp eCAoc2ltaWxhciB0byBVTklYIGdyZXApLgotCi0gICAgICAgIHR5cGUgL3ByZWZpeDp7XHYodGlt ZSkuIH0gb29mYS50eHQKLSAgICAgICAgICAgICAgICBQcmVmaXhlcyBlYWNoIGxpbmUgb2Ygb29m YS50eHQgd2l0aCB0aGUgdGltZSBhdCB3aGljaCB0aGUKLSAgICAgICAgICAgICAgICBUWVBFIGNv bW1hbmQgd2FzIGdpdmVuIChvbmUgYmFja3NsYXNoKQotCi0gICAgICAgIHR5cGUgL3ByZWZpeDp7 XFx2KHRpbWUpLiB9IG9vZmEudHh0Ci0gICAgICAgICAgICAgICAgUHJlZml4ZXMgZWFjaCBsaW5l IG9mIG9vZmEudHh0IHdpdGggdGhlIHRpbWUgYXQgd2hpY2ggdGhhdAotICAgICAgICAgICAgICAg IGxpbmUgaXMgYmVpbmcgdHlwZWQgKHR3byBiYWNrc2xhc2hlcykuCi0KLSAgICAgICAgdHlwZSAv cHJlZml4OntcXHYodHlfbG4pLiB9IG9vZmEudHh0Ci0gICAgICAgICAgICAgICAgUHJlZml4ZXMg ZWFjaCBsaW5lIG9mIG9vZmEudHh0IHdpdGggaXRzIGxpbmUgbnVtYmVyLgotCi0gICAgICAgIHR5 cGUgL3ByZWZpeDp7XFxmbHBhZChcXHYodHlfbG4pLDQpLiB9IG9vZmEudHh0Ci0gICAgICAgICAg ICAgICAgU2FtZSBhcyB0aGUgcHJldmlvdXMgZXhhbXBsZSwgZXhjZXB0IHRoZSBsaW5lIG51bWJl ciBpcwotICAgICAgICAgICAgICAgIHJpZ2h0LWFkanVzdGVkIGluIGEgNC1jb2x1bW4gZmllbGQu Ci0KLSAgIC9XSURUSFs6bl0KLSAgICAgICAgICBUcnVuY2F0ZXMgZWFjaCBsaW5lIGF0IGNvbHVt biBuICh3aGljaCBtdXN0IGJlIGEgbnVtYmVyKSBwcmlvcgotICAgICAgICAgIHRvIHByaW50aW5n IGl0LiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBmb3IgbG9uZyBsaW5lcyB3aGVuIHlvdQotICAg ICAgICAgIGRvbid0IHdhbnQgdGhlbSB0byB3cmFwLiBJZiBuaXMgb21pdHRlZCwgeW91ciBjdXJy ZW50IHNjcmVlbgotICAgICAgICAgIHdpZHRoIGlzIHVzZWQuCi0KLSAgIC9DT1VOVAotICAgICAg ICAgIENvdW50cyBsaW5lcyBhbmQgLS0gaWYgL01BVENIIHdhcyBpbmNsdWRlZCwgbWF0Y2hlcyAt LSBidXQgZG9lcwotICAgICAgICAgIG5vdCBwcmludCBhbnkgbGluZXMgZnJvbSB0aGUgZmlsZS4g VGhlIGxpbmUgYW5kIG1hdGNoIGNvdW50IGlzCi0gICAgICAgICAgc2hvd24gYXQgdGhlIGVuZCwg YW5kIHRoZSB2YXJpYWJsZXMgXHYodHlfbGMpIGFuZCBcdih0eV9sbSkgYXJlCi0gICAgICAgICAg c2V0IGFjY29yZGluZ2x5LgotCi0gICBTRVQgT1BUSU9OUyBUWVBFIHsgL1BBR0UsIC9OT1BBR0Us IC9XSURUSDpuIH0KLSAgICAgICAgICBTZXRzIHRoZSBwYWdpbmcgZGVmYXVsdCBmb3IgVFlQRSBj b21tYW5kcywgd2hpY2ggY2FuIGJlCi0gICAgICAgICAgb3ZlcnJpZGRlbiBpbiBhbnkgcGFydGlj dWxhciBUWVBFIGNvbW1hbmQgYnkgaW5jbHVkaW5nIHRoZQotICAgICAgICAgIGRlc2lyZWQgc3dp dGNoLgotCi0gICBJZiBhIFRZUEUgY29tbWFuZCBpcyBnaXZlbiB3aXRoIG5vIHN3aXRjaCwgYW5k IG5vIFNFVCBPUFRJT05TIFRZUEUKLSAgIHNlbGVjdGlvbiBpcyBpbiBlZmZlY3QsIHBhZ2luZyBp cyBhY2NvcmRpbmcgdG8geW91ciBDT01NQU5ECi0gICBNT1JFLVBST01QVElORyBzZXR0aW5nIChT SE9XIENPTU1BTkQpLgotCi0xLjE2LiBUaGUgUkVTRVQgQ29tbWFuZAotCi0gICBUaGUgUkVTRVQg Y29tbWFuZCwgYWRkZWQgaW4gNy4wLCBjbG9zZXMgYWxsIG9wZW4gZmlsZXMgYW5kIGxvZ3MsIGJ1 dAotICAgZG9lcyBub3QgYWZmZWN0IHRoZSBvcGVuIGNvbm5lY3Rpb24gKGlmIGFueSkuCi0KLTEu MTcuIFRoZSBDT1BZIGFuZCBSRU5BTUUgQ29tbWFuZHMKLQotICAgQXMgb2YgQy1LZXJtaXQgNy4w LCBpbiB0aGUgVU5JWCB2ZXJzaW9uIG9ubHksIHRoZSBDT1BZIGFuZCBSRU5BTUUKLSAgIGNvbW1h bmRzIGFyZSBidWlsdCBpbiBhbmQgZG8gbm90IGNhbGwgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0n cyBDT1BZIG9yCi0gICBSRU5BTUUgY29tbWFuZC4gVGhpcyBhbGxvd3MgdGhlbSB0byB3b3JrIGlu ICJOT1BVU0giIHZlcnNpb25zIGFuZCBvdGhlcgotICAgY2lyY3Vtc3RhbmNlcyB3aGVyZSBpdCBj YW4ndCBhY2Nlc3Mgc3lzdGVtIGNvbW1hbmRzLCBhbmQgaXQgYWxsb3dzIGZpbGUKLSAgIGNvcHlp bmcgYW5kIHJlbmFtaW5nIHRvIGJlIGRvbmUgcG9ydGFibHkgaW4gc2NyaXB0cy4gVGhlCi0gICBj aGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGJ1aWx0LWluIENPUFkgb3IgUkVOQU1FIGluY2x1ZGU6Ci0g ICAgICogSXQgZmFpbHMgaWYgdGhlIHNvdXJjZSBmaWxlIGlzIGEgZGlyZWN0b3J5IG9yIGlzIHdp bGQgb3IgbGFja3MgcmVhZAotICAgICAgIGFjY2Vzcy4KLSAgICAgKiBJdCBmYWlscyBpZiB0aGUg c291cmNlIGZpbGUgaXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuCi0gICAgICogSXQgYWxsb3dzIHRo ZSBkZXN0aW5hdGlvbiBmaWxlIHRvIGJlIGEgZGlyZWN0b3J5LCBpbiB3aGljaCBjYXNlIHRoZQot ICAgICAgIHNvdXJjZSBmaWxlIGlzIGNvcGllZCAob3IgcmVuYW1lZCkgaW50byBpdCB3aXRoIHRo ZSBzYW1lIG5hbWUuCi0gICAgICogSXQgb3ZlcndyaXRlcyBhbiBleGlzdGluZyBkZXN0aW5hdGlv biBmaWxlIGlmIGl0cyBwZXJtaXNzaW9uCi0gICAgICAgYWxsb3dzLgotICAgICAqIEl0IHNldHMg dGhlIG5ldyBmaWxlJ3MgcGVybWlzc2lvbiBhY2NvcmRpbmcgdG8gdW1hc2sgYnV0IGFsc28KLSAg ICAgICBjYXJyaWVzIGZvcndhcmQgdGhlIHNvdXJjZSBmaWxlJ3MgZXhlY3V0ZSBwZXJtaXNzaW9u IGJpdHMgaWYgdGhlCi0gICAgICAgZGVzdGluYXRpb24gZmlsZSBkaWQgbm90IGFscmVhZHkgZXhp c3QuCi0gICAgICogSXQgZmFpbHMgaWYgaW50ZXJydXB0ZWQgYnkgQ3RybC1DLgotICAgICAqIFVw b24gZXJyb3IsIGl0IHByaW50cyBhbiBhcHByb3ByaWF0ZSBtZXNzYWdlLgotICAgICAqIEl0IHJl dHVybnMgc3RhbmRhcmRpemVkIGVycm9yIGNvZGVzIHRoYXQgY2FuIGJlIHRlc3RlZCBieSBJRgot ICAgICAgIFNVQ0NFU1MgLyBGQUlMLgotCi0gICBUaGVzZSBjb21tYW5kcyBub3cgYWxzbyBhY2Nl cHQgdGhlIGZvbGxvd2luZyBzd2l0Y2hlczoKLQotICAvTElTVCAoL0xPRywgL1ZFUkJPU0UpICAg ID0gUHJpbnQgImZpbGUxID0+IGZpbGUyIChPSykiIChvciBlcnJvciBtZXNzYWdlKS4KLSAgL05P TElTVCAoL05PTE9HLCAvUVVJRVQpICA9IERvbid0IHByaW50IGFueXRoaW5nIChleGNlcHQgZXJy b3IgbWVzc2FnZXMpLgotCi0gICAvTk9MSVNUIGlzIHRoZSBkZWZhdWx0LgotCi0gICBUaGUgc2Ft ZSBidWlsdC1pbiBjb2RlIGlzIHVzZWQgYnkgdGhlIFVOSVggQy1LZXJtaXQgc2VydmVyIHRvIGV4 ZWN1dGUKLSAgIFJFTU9URSBDT1BZIGNvbW1hbmRzIChleGNlcHQgaW4gdGhpcyBjYXNlIG5vIHN3 aXRjaGVzIGFyZSBhdmFpbGFibGUpLgotCi0gICBUaGUgQ09QWSBjb21tYW5kIGFsc28gYWNjZXB0 cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgc3dpdGNoZXMuIFdoZW4KLSAgIGFueSBvZiB0aGVz ZSBhcmUgZ2l2ZW4gKGFuZCB0aGV5IGNhbiBiZSB1c2VkIGluIGFueSBjb21iaW5hdGlvbiBleGNl cHQKLSAgIC9TV0FQIGFuZCAvQVBQRU5EKSwgc29tZSBvZiB0aGUgY2hlY2tzIGxpc3RlZCBhYm92 ZSBhcmUgcmVsYXhlZCwgYW5kCi0gICB0aHVzIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIGdldCBp bnRvIHRyb3VibGUgaW4gY2VydGFpbiBjYXNlcywgZS5nLgotICAgd2hlbiB0aGUgc291cmNlIGFu ZCB0YXJnZXQgZmlsZXMgYXJlIHRoZSBzYW1lIGZpbGU6Ci0KLSAgL0FQUEVORCAgICAgICAgICAg ICAgICAgICA9IEFwcGVuZCBzb3VyY2UgZmlsZSB0byBkZXN0aW5hdGlvbiBmaWxlLgotICAvU1dB UC1CWVRFUyAgICAgICAgICAgICAgID0gU3dhcCBieXRlcyAoc2VlIFszNzJdU2VjdGlvbiA2LjYu NSkuCi0gIC9GUk9NQjY0ICAgICAgICAgICAgICAgICAgPSBEZWNvZGUgdGhlIHNvdXJjZSBmaWxl IGZyb20gQmFzZTY0IGVuY29kaW5nLgotICAvVE9CNjQgICAgICAgICAgICAgICAgICAgID0gRW5j b2RlIHRoZSB0YXJnZXQgZmlsZSBpbiBCYXNlNjQuCi0KLSAgIEJhc2U2NCBpcyB0aGUgZW5jb2Rp bmcgY29tbW9ubHkgdXNlZCBmb3IgZW5jbG9zdXJlcyBpbiBJbnRlcm5ldCBlbWFpbC4KLQotMS4x OC4gVGhlIE1BTlVBTCBDb21tYW5kCi0KLSAgIFRoZSBNQU5VQUwgY29tbWFuZCBjYW4gYmUgdXNl ZCB0byBhY2Nlc3MgdGhlIGFwcHJvcHJpYXRlIEtlcm1pdCBtYW51YWwKLSAgIG9yIG90aGVyIG1h bnVhbC4gVGhlIGdlbmVyYWwgc3ludGF4IGlzOgotCi0gICBNQU5VQUwgWyBzdHJpbmcgXQotICAg ICAgICAgIElmIHRoZSBzdHJpbmcgaXMgb21pdHRlZCwgQy1LZXJtaXQgYXNrcyB0aGUgdW5kZXJs eWluZyBzeXN0ZW0gdG8KLSAgICAgICAgICBhY2Nlc3MgdGhlIEMtS2VybWl0IG1hbnVhbCB1c2lu ZyB3aGF0ZXZlciBtZXRob2QgaXMgYXBwcm9wcmlhdGUKLSAgICAgICAgICBmb3IgdGhlIHN5c3Rl bS4KLQotICAgVGhlIHNwZWNpZmljIGFjdGlvbiBkZXBlbmRzIG9uIHRoZSBzeXN0ZW0uIEluIFVO SVgsIGEgIm1hbiIgY29tbWFuZCBpcwotICAgaXNzdWVkOyAia2VybWl0IiBpcyB0aGUgZGVmYXVs dCBhcmd1bWVudCBidXQgb3RoZXIgbWFudWFsIHRvcGljcyBtYXkgYmUKLSAgIHNwZWNpZmllZC4g SWYgdGhlICJtYW4iIGNvbW1hbmQgYWxsb3dzIGluZGV4IG9yIHN0cmluZyBzZWFyY2hpbmcsIHRo ZQotICAgYXBwcm9wcmlhdGUgc3ludGF4IG1heSBiZSBpbmNsdWRlZC4KLQotICAgSW4gS2VybWl0 IDk1LCB0aGUgTUFOVUFMIGNvbW1hbmQgYnJpbmdzIHVwIHRoZSBIVE1MIG9ubGluZSBLOTUgbWFu dWFsLgotCi0gICBJbiBWTVMgYW5kIGVsc2V3aGVyZSwgIm1hbiIgaXMgc2ltcGx5IHRyYW5zbGF0 ZWQgdG8gImhlbHAiLCB3aXRoIGEKLSAgIGRlZmF1bHQgYXJndW1lbnQgb2YgImtlcm1pdCI7IG90 aGVyIGFuZC9vciBhZGRpdGlvbmFsIGFyZ3VtZW50cyBtYXkgYmUKLSAgIGluY2x1ZGVkIGFjY29y ZGluZyB0byB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3lzdGVtJ3MgImhlbHAiIGNvbW1hbmQuCi0K LSAgIENvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSAibWFuIiBjb21tYW5kIGluIEMtS2VybWl0IGRl cGVuZHMgb24gdGhlCi0gICBhcHByb3ByaWF0ZSBtYW4gcGFnZSBvciBoZWxwIHRvcGljIGhhdmlu ZyBiZWVuIGluc3RhbGxlZCBpbiB0aGUgcmlnaHQKLSAgIHBsYWNlIHdpdGggdGhlIHJpZ2h0IHBl cm1pc3Npb25zIGFuZCBmb3JtYXQuCi0KLTEuMTkuIFN0cmluZyBhbmQgRmlsZW5hbWUgTWF0Y2hp bmcgUGF0dGVybnMKLQotICAgQSBwYXR0ZXJuIGlzIGEgc3RyaW5nIHRoYXQgaW5jbHVkZXMgc3Bl Y2lhbCBub3RhdGlvbiBmb3IgbWF0Y2hpbmcKLSAgIGNsYXNzZXMgb3Igc2VxdWVuY2VzIG9mIGNo YXJhY3RlcnMuIEMtS2VybWl0IDcuMCAvIEs5NSAxLjEuMTkgc3VwcG9ydHMKLSAgIHBhdHRlcm5z IGluIHNldmVyYWwgcGxhY2VzOgotCi0gICAgICogRmlsZW5hbWVzIChbMzczXVNlY3Rpb24gNC45 KQotICAgICAqIFNXSVRDSCBjYXNlIGxhYmVscyAoWzM3NF1TZWN0aW9uIDcuMTgpCi0gICAgICog VGhlIG5ldyBJRiBNQVRDSCBzdGF0ZW1lbnQgKFszNzVdU2VjdGlvbiA3LjQpCi0gICAgICogVFlQ RSAvTUFUQ0ggKFszNzZdU2VjdGlvbiAxLjE1KQotICAgICAqIFNFVCBGSUxFIFRFWFQtUEFUVEVS TlMgYW5kIEJJTkFSWS1QQVRURVJOUyAoWzM3N11TZWN0aW9uIDQuMykKLSAgICAgKiBUaGUgXGZz ZWFyY2goKSBhbmQgXGZhcnJheWxvb2soKSBmdW5jdGlvbnMgKFszNzhdU2VjdGlvbnMgNy4zIGFu ZAotICAgICAgIFszNzldNy4xMC43KQotICAgICAqIFRoZSBcZnBhdHRlcm4oKSBmdW5jdGlvbiB1 c2VkIHdpdGggW00sUkVdSU5QVVQgKFszODBdU2VjdGlvbiA3LjEpCi0KLSAgIFBhdHRlcm5zIGFy ZSBhbHNvIGNhbGxlZCB3aWxkY2FyZHMsIGVzcGVjaWFsbHkgd2hlbiB1c2VkIGZvciBmaWxlbmFt ZQotICAgbWF0Y2hpbmcuIEMtS2VybWl0J3MgcGF0dGVybiBzeW50YXggaXMgZXhwbGFpbmVkIGlu IFszODFdU2VjdGlvbiA0LjkuMSwKLSAgIGFuZCBhbHNvIGJ5IHRoZSBIRUxQIFdJTERDQVJEUyBj b21tYW5kLgotCi0xLjIwLiBNdWx0aXBsZSBDb21tYW5kcyBvbiBPbmUgTGluZQotCi0gICBBcyBv ZiBDLUtlcm1pdCA3LjAsIGNvbW1hbmRzIGNhbiBiZSBncm91cGVkIHRvZ2V0aGVyIG9uIG9uZSBs aW5lIGJ5Ci0gICBzZXBhcmF0aW5nIHRoZSBjb21tYW5kcyB3aXRoIGNvbW1hcyBhbmQgZW5jbG9z aW5nIHRoZSBsaXN0IGluIGJyYWNlcy4KLSAgIEZvciBleGFtcGxlOgotCi0gIEMtS2VybWl0PiB7 IGVjaG8gT25lLCBlY2hvIFR3bywgZWNobyBUaHJlZSB9Ci0gIEMtS2VybWl0PiBkbyB7IGVjaG8g T25lLCBlY2hvIFR3bywgZWNobyBUaHJlZSB9Ci0KLSAgIENvbW1hbmQgbGlzdHMgY2FuIGJlIG5l c3RlZDoKLQotICBbIGRvIF0geyBlY2hvIE9uZSwgZWNobyBUd28sIGlmIHRydWUgeyBlY2hvIEEs IGVjaG8gQn0sIGVjaG8gVGhyZWUgfQotCi0gICBhbmQgdGhlIEVORCBjb21tYW5kIHdvcmtzIGFz IGl0IGRvZXMgaW4gbWFjcm9zOgotCi0gIFsgZG8gXSB7IGVjaG8gT25lLCBlY2hvIFR3bywgaWYg dHJ1ZSBlbmQsIGVjaG8gVGhyZWUgfQotCi0gICBUaGUgIm9uZSBsaW5lIiBzdHJpY3R1cmUgaXMs IG9mIGNvdXJzZSwgcGxpYW50IHRvIGxpbmUtY29udGludWF0aW9uCi0gICBjb252ZW50aW9ucywg bmFtZWx5IHRoYXQgbGluZXMgZW5kaW5nIGluIGh5cGhlbiAoLSkgb3IgbGVmdCBicmFjZSAoeykK LSAgIGFyZSB0byBiZSBjb250aW51ZWQuIFRodXMgdGhlIGZpcnN0IGV4YW1wbGUgY2FuIGFsc28g YmUgcmVuZGVyZWQ6Ci0KLSAgWyBkbyBdIHsKLSAgICAgIGVjaG8gT25lCi0gICAgICBlY2hvIFR3 bwotICAgICAgZWNobyBUaHJlZQotICB9Ci0KLSAgICh0aGUgImRvIiBpcyBvcHRpb25hbCkuCi0K LTEuMjEuIFdoYXQgRG8gSSBIYXZlPwotCi0gICBDLUtlcm1pdCBjYW4gYmUgYnVpbHQgZm9yIGh1 bmRyZWRzIG9mIGRpZmZlcmVudCBwbGF0Zm9ybXMgd2l0aAotICAgcHJhY3RpY2FsbHkgY291bnRs ZXNzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQ2VydGFpbiBjb21tYW5kcyBtaWdodCBub3QKLSAg IGJlIGF2YWlsYWJsZSBpbiBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zLCBldGMuIEV2ZW4gb24gdGhl IHNhbWUgcGxhdGZvcm0sCi0gICBkaWZmZXJlbnQgYnVpbGRzIGFyZSBwb3NzaWJsZTogIm1heGlt dW0gZnVuY3Rpb25hbGl0eSIsICJtaW5pbXVtIHNpemUiLAotICAgIm1heGltdW0gcGVyZm9ybWFu Y2UiLCBhbmQgc28gb24uIFlvdSBjYW4gZmluZCBvdXQgYSBsb3QgYWJvdXQgdGhlCi0gICBjb25m aWd1cmF0aW9uIG9mIHlvdXIgQy1LZXJtaXQgcHJvZ3JhbSB3aXRoIHRoZSBTSE9XIEZFQVRVUkVT IGNvbW1hbmQuCi0gICBPZiBjb3Vyc2UsIGEgbG90IG9mIHdoYXQgaXQgc2F5cywgZXNwZWNpYWxs eSBpbiB0aGUgYm90dG9tIHBhcnQsIG1pZ2h0Ci0gICBzZWVtIGxpa2UgZ2liYmVyaXNoLCBidXQg Y2FuIGJlIGRlY2lwaGVyZWQgd2l0aCBhIFJvc2V0dGEgU3RvbmUgKHN1Y2gKLSAgIGFzIHRoZSBD LUtlcm1pdCBzb3VyY2Ugb3IgdGhlIFszODJdY2tjY2ZnLnR4dCBmaWxlKS4gSW4gYW55IGNhc2Us IHRoZQotICAgb3V0cHV0IGZyb20gU0hPVyBGRUFUVVJFUyBtaWdodCBlYXNpbHkgZXhwbGFpbiB3 aHkgc29tZSBleHBlY3RlZAotICAgZmVhdHVyZSBpcyBtaXNzaW5nLCBvciBzb21lIGJ1ZmZlciBp cyBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQuIEhlcmUncyBhCi0gICBzYW1wbGUgb2YgdGhlIGJvdHRv bSBzZWN0aW9uIGZvciB0aGUgU3VuT1MgdmVyc2lvbjoKLQotQy1LZXJtaXQgNy4wLjE5NiwgMSBK YW4gMjAwMAotCi1NYWpvciBvcHRpb25hbCBmZWF0dXJlcyBpbmNsdWRlZDoKLSBOZXR3b3JrIHN1 cHBvcnQgKHR5cGUgU0hPVyBORVQgZm9yIGZ1cnRoZXIgaW5mbykKLSBUZWxuZXQgS2VybWl0IE9w dGlvbgotIEhhcmR3YXJlIGZsb3cgY29udHJvbAotIEV4dGVybmFsIFhZWk1PREVNIHByb3RvY29s IHN1cHBvcnQKLSBMYXRpbi0xIChXZXN0IEV1cm9wZWFuKSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0 aW9uCi0gTGF0aW4tMiAoRWFzdCBFdXJvcGVhbikgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbgot IEN5cmlsbGljIChSdXNzaWFuLCBVa3JhaW5pYW4sIGV0YykgY2hhcmFjdGVyLXNldCB0cmFuc2xh dGlvbgotIEdyZWVrIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24KLSBIZWJyZXcgY2hhcmFjdGVy LXNldCB0cmFuc2xhdGlvbgotIEphcGFuZXNlIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24KLSBV bmljb2RlIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24KLSBQc2V1ZG90ZXJtaW5hbCBjb250cm9s Ci0gUkVESVJFQ1QgY29tbWFuZAotIFJFU0VORCBjb21tYW5kCi0gRnVsbHNjcmVlbiBmaWxlIHRy YW5zZmVyIGRpc3BsYXkKLSBDb250cm9sLWNoYXJhY3RlciB1bnByZWZpeGluZwotIFN0cmVhbWlu ZwotIEF1dG9kb3dubG9hZAotCi1NYWpvciBvcHRpb25hbCBmZWF0dXJlcyBub3QgaW5jbHVkZWQ6 Ci0gTm8gS2VyYmVyb3MoVE0pIGF1dGhlbnRpY2F0aW9uCi0gTm8gU1JQKFRNKSAoU2VjdXJlIFJl bW90ZSBQYXNzd29yZCkgcHJvdG9jb2wKLSBObyBTZWN1cmUgU29ja2V0cyBMYXllciAoU1NMKSBw cm90b2NvbAotIE5vIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBwcm90b2NvbAotIE5v IGVuY3J5cHRpb24KLSBObyBYIFdpbmRvd3MgZm9yd2FyZGluZwotCi1Ib3N0IGluZm86Ci0gTWFj aGluZTogICAgc3VuNG0KLSBNb2RlbDogICAgICAodW5rbm93bikKLSBPUzogICAgICAgICBTdW5P UwotIE9TIFJlbGVhc2U6IDQuMS4zX1UxCi0gT1MgVmVyc2lvbjogNAotCi1UYXJnZXQ6IHN1bm9z NDFnc2MKLUdDQyB2ZXJzaW9uOiAyLjcuMgotQ29tcGlsZWQgRGVjIDMxIDE5OTkgMTA6Mzg6NTQs IG9wdGlvbnM6Ci0gX19HTlVDX18gX19TVERDX18gX1BPU0lYX0pPQl9DT05UUk9MIF9TQ19KT0Jf Q09OVFJPTCBBUlJBWVJFRkxFTj0xMDI0IEJJR0JVRk9LCi0gQlJPV1NFUiBCU0Q0IENLX0FOU0lD IENLX0FQQyBDS19BVVRPREwgQ0tfQ1VSU0VTIENLX0ROU19TUlYgQ0tfRU5WSVJPTk1FTlQKLSBD S19GQVNUIENLX0xPR0lOIENLX01LRElSIENLX05BV1MgQ0tfUENUX0JBUiBDS19QRVJNUyBDS19S RUNBTEwgQ0tfUlRTQ1RTCi0gQ0tfU1BFRUQgQ0tfVElNRVJTIENLX1RNUERJUiBDS19UVEdXU0la IENLX1RUWUZEIENLX1dSRUZSRVNIIENLRVhFQwotIENLRkxPQVQ9ZG91YmxlIENLR0hOTEhPU1Qg Y2ttYXhmaWxlcz02NCBDS01BWE9QRU49NjQgQ0tNQVhQQVRIPTEwMjMgQ0tSRUFMUEFUSAotIENL UkVHRVggQ0tTWVNMT0cgQ0tUVU5JTkcgQ01EQkw9MzI3NjMgQ01EREVQPTY0IENPTkdTUEQgRENN REJVRiBESVJFTlQgRFlOQU1JQwotIEZORkxPQVQgRk9SREVQVEg9MzIgR0ZUSU1FUiBIQUREUkxJ U1QgSERCVVVDUCBJRkRFQlVHIElLU19PUFRJT04gSUtTREIKLSBJS1NEQ09ORiBJTkJVRlNJWkU9 MzI3NjggSU5QQlVGU0laPTQwOTYgTUFDX01BWD0xNjM4NCBNQUNMRVZFTD0xMjggTUFYRERJUj0z MgotIE1BWEROVU1TPTQwOTUgTUFYR0VUUEFUSD0xMjggTUFYVEFLRT01NCBNQVhXTEQ9MTAyNDAw IE1TRU5ETUFYPTEwMjQgTkVUQ01ECi0gTkVUQ09OTiBORVRQVFkgTk9LVkVSQlMgTk9TRVRCVUYg T0JVRlNJWkU9MzI3NjggUEFSU0VOU0UgUEFUVEVSTlMgUElQRVNFTkQKLSBSRU5BTUUgUkxPR0NP REUgU0FWRURVSUQgU0VMRUNUIFNJR19WIFNPTF9TT0NLRVQgc3BhcmMgU1RSRUFNSU5HIHN1biBT VU5PUzQKLSBTWVNUSU1FSCBUQ1BTT0NLRVQgVElNRUggVExPRyBUTkNPREUgVFRMRUJVRiBUVFNQ RExJU1QgVUlEQlVGTEVOPTI1NiBVTklYCi0gVU5QUkVGSVhaRVJPIFVTRV9MU1RBVCBVU0VfTUVN Q1BZIFZOQU1MPTQwOTYgV0hBVEFNSSBYRlJDQU4gWl9NQVhDSEFOPTQ2Ci0gel9tYXhjaGFuPTQ2 IFpYUkVXSU5ECi0KLSBieXRlIG9yZGVyOiBiaWcgZW5kaWFuCi0KLSBzaXplb2ZzOiBpbnQ9NCBs b25nPTQgc2hvcnQ9MiBjaGFyPTEgY2hhcio9NCBmbG9hdD00IGRvdWJsZT04Ci0KLSBmbG9hdGlu Zy1wb2ludDogcHJlY2lzaW9uPTE2IHJvdW5kaW5nPTEKLQotICAgV2l0aG91dCBnb2luZyBpbnRv IGRldGFpbCBhYm91dCB3aGF0IGFsbCB0aGUgbm90YXRpb24gbWVhbnMsIG5vdGljZSBhCi0gICBj b3VwbGUgdGhpbmdzOgotCi0gICAgICogVGhlIE9wdGlvbnMgc2VjdGlvbiBzaG93cyBzeW1ib2xz ICgibWFjcm9zIikgaW4gZWZmZWN0IGR1cmluZwotICAgICAgIGNvbXBpbGF0aW9uLCB0b2dldGhl ciB3aXRoIHRoZWlyIHZhbHVlcyAoZm9yIHRob3NlIHRoYXQgaGF2ZQotICAgICAgIHZhbHVlcyku IFRoZSBvcHRpb25zIGFyZSBsaXN0ZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIHRvIG1ha2UgYW55 Ci0gICAgICAgcGFydGljdWxhciBvcHRpb24gZWFzaWVyIHRvIGZpbmQuCi0gICAgICogTUFYV0xE IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlcyB0aGF0IGEgd2lsZGNhcmQgY2FuIGV4cGFu ZAotICAgICAgIHRvLgotICAgICAqIEFueXRoaW5nIHN0YXJ0aW5nIHdpdGggIk5PIiBpcyBhIGZl YXR1cmUgKG9yIHNvbWV0aGluZyBvdGhlciB0aGFuIGEKLSAgICAgICBmZWF0dXJlKSB0aGF0IGhh cyBiZWVuIGRlbGliZXJhdGVseSAiY29tcGlsZWQgb3V0Iiwgb3Igb21pdHRlZC4KLSAgICAgKiBJ bXBvcnRhbnQgaXRlbXMgZm9yIHNjcmlwdCB3cml0ZXJzIGluY2x1ZGU6IENNREJMPTMyNzYzICh0 aGUgc2l6ZQotICAgICAgIG9mIHRoZSBjb21tYW5kIGJ1ZmZlciBhbmQgdGhlcmVmb3JlIHRoZSBt YXhpbXVtIGxlbmd0aCBmb3IgYSBtYWNybwotICAgICAgIG9yIHZhcmlhYmxlIGRlZmluaXRpb247 IENNRERFUD02NCAodGhlIGxpbWl0IG9uIHJlY3Vyc2lvbiBkZXB0aCk7Ci0gICAgICAgRk9SREVQ VEg9MzIgKHRoZSBuZXN0aW5nIGxpbWl0IG9uIEZPUiBsb29wcyk7IElOQlVGU0laRT0zMjc2OCAo dGhlCi0gICAgICAgc2l6ZSBvZiB0aGUgSU5QVVQgY29tbWFuZCBjaXJjdWxhciBidWZmZXIpOyBN QUNfTUFYPTE2Mzg0ICh0aGUKLSAgICAgICBtYXhpbXVtIG51bWJlciBvZiBtYWNyb3MpLCBldGMu Ci0KLSAgIFNlZSB0aGUgWzM4M11ja2NjZmcudHh0IGZpbGUgZm9yIGRldGFpbHMuCi0KLTEuMjIu IEdlbmVyYWxpemVkIEZpbGUgSW5wdXQgYW5kIE91dHB1dAotCi0gICBDLUtlcm1pdCA3LjAgYWRk cyBhIG5ldyBnZW5lcmFsaXplZCBJL08gc3lzdGVtIGZvciBzdHJlYW0gZmlsZXMsCi0gICBhdWdt ZW50aW5nIChhbmQgdG8gc29tZSBleHRlbnQsIG92ZXJsYXBwaW5nIHdpdGgpIHRoZSBvbGRlciBP UEVOLCBSRUFELAotICAgV1JJVEUsIGFuZCBDTE9TRSBjb21tYW5kcy4gSW4gdGhlIG5ldyBmaWxl IGkvbyBzeXN0ZW0sIHdoaWNoIGNhbiBiZQotICAgdXNlZCBzaW11bHRhbmVvdXNseSB3aXRoIHRo ZSBvbGQgb25lLCBhbGwgY29tbWFuZHMgYXJlIGdyb3VwZWQgdG9nZXRoZXIKLSAgIHVuZGVyIHRo ZSBuZXcgRklMRSBrZXl3b3JkLCBhbmQgc29tZSByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgdmFyaWFi bGVzCi0gICBhcmUgYWRkZWQuCi0KLTEuMjIuMS4gV2h5IEFub3RoZXIgSS9PIFN5c3RlbT8KLQot ICAgVGhlIHdlbGwta25vd24gTE9HLCBPUEVOLCBSRUFELCBXUklURSwgYW5kIENMT1NFIGNvbW1h bmRzIGhhdmUgdGhlCi0gICBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgotCi0gICAgMS4gT25seSBv bmUgUkVBRCBmaWxlIGFuZCBvbmUgV1JJVEUgZmlsZSBjYW4gYmUgb3BlbiBhdCBhIHRpbWUuCi0g ICAgMi4gVGhlIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGFyZSBzdHJpY3RseSBsaW5lIG9yaWVu dGVkLgotICAgIDMuIFRoZXNlIGNvbW1hbmRzIGNhbiBub3QgYmUgdXNlZCB3aXRoIGJpbmFyeSBm aWxlcy4KLSAgICA0LiBUaGV5IGRvIG5vdCBzdXBwb3J0IHJlYWQvd3JpdGUgYWNjZXNzIG9yIHJh bmRvbSBhY2Nlc3MuCi0gICAgNS4gVGhlIHN5bnRheCBpcyBhIGJpdCBjb3VudGVyaW50dWl0aXZl IGZvciBwcm9ncmFtbWVycy4KLQotICAgVGhlIG5ldyBmaWxlIGkvbyBzeXN0ZW0gYWxsb3dzIG11 bHRpcGxlIGZpbGVzIHRvIGJlIG9wZW4gYXQgb25jZSwgaW4KLSAgIGFueSBkZXNpcmVkIGNvbWJp bmF0aW9uIG9mIG1vZGVzIChyZWFkL3dyaXRlL2FwcGVuZCkgc3VwcG9ydGVkIGJ5IHRoZQotICAg b3BlcmF0aW5nIHN5c3RlbSwgZm9yIGxpbmUsIGJsb2NrIChyZWNvcmQpLCBvciBjaGFyYWN0ZXIg aS9vLCBmb3IKLSAgIHNlcXVlbnRpYWwgb3IgcmFuZG9tIGFjY2VzcywgdXNpbmcgY29uc2lzdGVu dCBzeW50YXggYW5kIGNvbnZlbnRpb25zLgotCi0gICBUaGUgbmV3IHN5c3RlbSwgaG93ZXZlciwg ZG9lcyBub3QgcmVwbGFjZSB0aGUgb2xkIG9uZSwgc2luY2UgdGhlIG9sZAotICAgc3lzdGVtIHN0 aWxsIG11c3QgYmUgdXNlZCBmb3I6Ci0KLSAgICAxLiBUaGUgc2Vzc2lvbiwgcGFja2V0LCBkZWJ1 ZywgdHJhbnNhY3Rpb24sIGFuZCBjb25uZWN0aW9uIGxvZ3MuCi0gICAgMi4gUmVhZGluZyBhbmQg d3JpdGluZyBjb21tYW5kcyByYXRoZXIgdGhhbiBmaWxlcy4KLSAgICAzLiBFeGlzdGluZyBzY3Jp cHRzLgotCi0gICBUaGUgbmV3IHN5c3RlbSB3b3JrcyBvbmx5IHdpdGggcmVndWxhciBmaWxlcywg bm90IHdpdGggY29tbWFuZHMgb3IKLSAgIHBpcGVzIG9yIG1haWxib3hlcyBvciBwc2V1ZG90ZXJt aW5hbHMuIE5vIHNwZWNpYWwgcHJvdmlzaW9ucyBhcmUgbWFkZQotICAgaW4gdGhlIEZJTEUgY29t bWFuZHMgZm9yIGhhbmRsaW5nIGRldmljZXMgb3IgbmV0d29yayBjb25uZWN0aW9ucywgbm9yCi0g ICBmb3IgcHJldmVudGluZyB5b3UgZnJvbSB0cnlpbmcgdG8gb3BlbiB0aGVtOyBpZiB0aGUgdW5k ZXJseWluZwotICAgb3BlcmF0aW5nIHN5c3RlbSB0cmVhdHMgdGhlbSBsaWtlIHJlZ3VsYXIgc3Ry ZWFtIGRpc2sgZmlsZXMsIHRoZSBGSUxFCi0gICBjb21tYW5kcyAoZXhjZXB0LCBvZiBjb3Vyc2Ug U0VFSywgUkVXSU5ELCBhbmQgQ09VTlQpIG1pZ2h0IHdvcmsgd2l0aAotICAgdGhlbS4gKEluIEMg cHJvZ3JhbW1pbmcgdGVybXMsIHRoZSBGSUxFIGNvbW1hbmRzIGFyZSwgYXQgcHJlc2VudCwKLSAg IG5vdGhpbmcgbW9yZSB0aGFuIGEgZnJvbnQgZW5kIHRvIGZvcGVuKCkgLyBmcmVhZCgpIC8gZndy aXRlKCkgLwotICAgZmNsb3NlKCkgYW5kIGZyaWVuZHMsIHdoaWNoIGFyZSBhIHBvcnRhYmxlIEFQ SSB0byBzZXF1ZW50aWFsIGZpbGVzLCBidXQKLSAgIHRoaXMgbWlnaHQgY2hhbmdlIGluIHRoZSBm dXR1cmUgZm9yIHBsYXRmb3JtcyBsaWtlIFZNUyBhbmQgVk9TIHRoYXQKLSAgIGhhdmUgbW9yZSBj b21wbGljYXRlZCBmaWxlIHN5c3RlbXMuKQotCi0gICBEZWZpbml0aW9uczoKLQotICAgQ2hhbm5l bAotICAgICAgICAgIEEgbnVtYmVyIGFzc2lnbmVkIHRvIGEgZmlsZSB3aGVuIGl0IGlzIG9wZW5l ZCwgYnkgd2hpY2ggaXQgbXVzdAotICAgICAgICAgIGJlIHJlZmVycmVkIHRvIGluIGFsbCBpbnB1 dC9vdXRwdXQgb3BlcmF0aW9ucy4KLQotICAgUmVhZC9Xcml0ZSBQb2ludGVyCi0gICAgICAgICAg VGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gYW4gb3BlbiBmaWxlLCBleHByZXNzZWQgYXMgdGhlIDAt YmFzZWQKLSAgICAgICAgICBieXRlIGNvdW50IGZyb20gdGhlIGJlZ2lubmluZy4KLQotMS4yMi4y LiBUaGUgRklMRSBDb21tYW5kCi0KLSAgIEZJTEUga2V5d29yZCBbIHN3aXRjaGVzIF0gY2hhbm5l bCBbIGRhdGEgXQotICAgICAgICAgIFRoZSBrZXl3b3JkIHNwZWNpZmllcyB0aGUgZnVuY3Rpb246 IEZJTEUgT1BFTiwgRklMRSBSRUFELCBGSUxFCi0gICAgICAgICAgV1JJVEUsIEZJTEUgQ0xPU0Us IGV0Yy4gRm9yIGNvbnZlbmllbmNlIChhbmQgZm9yIGZhbWlsaWFyaXR5IHRvCi0gICAgICAgICAg QyBwcm9ncmFtbWVycyksIHRoZSB0d28td29yZCBGSUxFIGNvbW1hbmRzIGNhbiBiZSBzaG9ydGVu ZWQgdG8KLSAgICAgICAgICB0aGUgc2luZ2xlIHdvcmRzIEZPUEVOLCBGUkVBRCwgRldSSVRFLCBG Q0xPU0UsIGFuZCBzbyBvbi4KLSAgICAgICAgICBTd2l0Y2hlcyBhcmUgb3B0aW9uYWwsIGFuZCBt b2RpZnkgb3IgYW1wbGlmeSB0aGUgcmVxdWVzdGVkIGZpbGUKLSAgICAgICAgICBmdW5jdGlvbi4K LQotICAgQXMgaW4gQywgRm9ydHJhbiwgYW5kIG90aGVyIHByb2dyYW1taW5nIGxhbmd1YWdlcywg b3BlbiBmaWxlcyBhcmUKLSAgIHJlZmVycmVkIHRvIGJ5ICJjaGFubmVscyIsIGludGVnZXJzIHN1 Y2ggYXMgMCwgMSwgMiwgMywgYW5kIHNvIG9uLiBBCi0gICBjaGFubmVsIG51bWJlciBpcyBhc3Np Z25lZCB3aGVuIHlvdSBvcGVuIGEgZmlsZS4gVGhlIG51bWJlciBvZgotICAgYXZhaWxhYmxlIGNo YW5uZWxzIGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSwgYW5kIGNh bgotICAgYmUgc2VlbiBpbiB0aGUgdmFyaWFibGU6Ci0KLSAgXHYoZl9tYXgpCi0KLSAgIG9yIGJ5 IGdpdmluZyB0aGUgRklMRSBMSVNUIChGTElTVCkgY29tbWFuZC4gQ2hhbm5lbHMgYXJlIGRpc2N1 c3NlZCBpbgotICAgZ3JlYXRlciBkZXRhaWwgaW4gWzM4NF1TZWN0aW9uIDEuMjIuNC4KLQotICAg RklMRSBjb21tYW5kIGVycm9ycyBjYW4gYmUgY2F1Z2h0IHdpdGggSUYgRkFJTCBhZnRlciB0aGUg RklMRSBjb21tYW5kLgotICAgSW4gYWRkaXRpb24sIHRoZSBcdihmX2Vycm9yKSB2YXJpYWJsZSBp cyBzZXQgdG8gdGhlIGNvbXBsZXRpb24gY29kZSBvZgotICAgdGhlIGNvbW1hbmQ6IDAgaWYgbm8g ZXJyb3IsIG9yIGEgbmVnYXRpdmUgbnVtYmVyIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KLSAgIFRo ZSBlcnJvciBjb2RlcyBhcmUgbGlzdGVkIGluIFszODVdU2VjdGlvbiAxLjIyLjUuCi0KLSAgIFRo ZSBjb21tYW5kIHRvIG9wZW4gYSBmaWxlIGlzOgotCi0gICBGSUxFIE9QRU4gWyBzd2l0Y2hlcyBd IHZhcmlhYmxlIGZpbGVuYW1lCi0gICAgICAgICAgT3BlbnMgYSBmaWxlIGZvciB0aGUgdHlwZSBv ZiBhY2Nlc3Mgc3BlY2lmaWVkIGJ5IHRoZSBzd2l0Y2hlcywKLSAgICAgICAgICBvciBmb3IgcmVh ZC1vbmx5IGFjY2VzcyBpZiBubyBzd2l0Y2hlcyBhcmUgZ2l2ZW4uIFVwb24gc3VjY2VzcywKLSAg ICAgICAgICBhIGNoYW5uZWwgbnVtYmVyIGlzIGFzc2lnbmVkIHRvIHRoaXMgZmlsZSBhbmQgc3Rv cmVkIGluIHRoZQotICAgICAgICAgIGdpdmVuIHZhcmlhYmxlIHNvIHlvdSBjYW4gcmVmZXIgdG8g dGhlIG9wZW4gZmlsZSBpbiBzdWJzZXF1ZW50Ci0gICAgICAgICAgaS9vIGNvbW1hbmRzLiBJZiB0 aGUgZmlsZSBjYW4gbm90IGJlIG9wZW5lZCwgdGhlIEZJTEUgT1BFTgotICAgICAgICAgIGNvbW1h bmQgZmFpbHMuIFN5bm9ueW06IEZPUEVOLgotCi0gICBUaGUgRklMRSBPUEVOIHN3aXRjaGVzIGFy ZToKLQotICAgL1JFQUQKLSAgICAgICAgICBPcGVuIHRoZSBmaWxlIGZvciByZWFkIGFjY2Vzcy4g SWYgbm8gc3dpdGNoZXMgYXJlIGdpdmVuLCAvUkVBRAotICAgICAgICAgIGlzIGFzc3VtZWQuIElm IHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGNhbid0IGJlIG9wZW5lZCBmb3IKLSAgICAgICAg ICByZWFkIGFjY2VzcywgdGhlIEZJTEUgT1BFTiBjb21tYW5kIGZhaWxzLgotCi0gICAvV1JJVEUK LSAgICAgICAgICBBbGxvdyB3cml0aW5nLiBJZiBhIGZpbGUgb2YgdGhlIHNhbWUgbmFtZSBhbHJl YWR5IGV4aXN0cywgaXQgaXMKLSAgICAgICAgICBvdmVyd3JpdHRlbiB1bmxlc3MgL1JFQUQgb3Ig L0FQUEVORCBpcyBhbHNvIGluY2x1ZGVkLiBJZiBhIGZpbGUKLSAgICAgICAgICBvZiB0aGUgZ2l2 ZW4gbmFtZSBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZC4KLQotICAgL0FQUEVORAotICAg ICAgICAgIEVxdWl2YWxlbnQgdG8gL1dSSVRFLCBleGNlcHQgdGhhdCBpZiB0aGUgZmlsZSBleGlz dHMsIGl0IGlzIG5vdAotICAgICAgICAgIGRlc3Ryb3llZC4gVGhlIHJlYWQvd3JpdGUgcG9pbnRl ciBpcyBzZXQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSwKLSAgICAgICAgICBzbyB1bmxlc3MgeW91 IGNoYW5nZSBpdCB3aXRoIEZJTEUgU0VFSyBvciBSRVdJTkQgKHNlZSBiZWxvdyksCi0gICAgICAg ICAgdGhlIGZpcnN0IEZJTEUgV1JJVEUgY29tbWFuZCBhZGRzIHRvIHRoZSBlbmQgb2YgdGhlIGZp bGUsCi0gICAgICAgICAgcHJlc2VydmluZyB3aGF0IHdhcyB0aGVyZSBhbHJlYWR5LiBJZiAvV1JJ VEUgaXMgYWxzbyBnaXZlbiwgaXQKLSAgICAgICAgICBpcyBpZ25vcmVkLgotCi0gICAvQklOQVJZ Ci0gICAgICAgICAgT3BlbiB0aGUgZmlsZSBpbiAiYmluYXJ5IiBtb2RlLCByYXRoZXIgdGhhbiB0 ZXh0IG1vZGUuIFRoaXMKLSAgICAgICAgICBzd2l0Y2ggaXMgbWVhbmluZ2xlc3MgKGJ1dCBzdGls bCBjYW4gYmUgdXNlZCkgaW4gVU5JWC4gSW4gVk1TLAotICAgICAgICAgIFdpbmRvd3MsIGFuZCBP Uy8yLCBpdCBpbmhpYml0cyBlbmQtb2YtbGluZSBwcm9jZXNzaW5nIGFuZAotICAgICAgICAgIGNv bnZlcnNpb24sIGFuZCBzbyBzaG91bGQgYmUgdXNlZCBmb3IgYmluYXJ5IGZpbGVzIGFuZC9vciBm aWxlcwotICAgICAgICAgIHRoYXQgYXJlIHRvIGJlIGFjY2Vzc2VkIGluIHJlY29yZCBvciBjaGFy YWN0ZXIgbW9kZSByYXRoZXIgdGhhbgotICAgICAgICAgIGxpbmUgYnkgbGluZS4KLQotICAgVGhl IHZhcmlhYmxlIGZvciB0aGUgY2hhbm5lbCBudW1iZXIgY2FuIGJlIGFueSBraW5kIG9mIHZhcmlh YmxlOiB0aGUKLSAgIFwleCBraW5kLCBhIG1hY3JvIG5hbWUsIG9yIGFuIGFycmF5IGVsZW1lbnQu IEJ1dCBpdCBtdXN0IGJlIGEgdmFyaWFibGUsCi0gICBub3QgYSBudW1iZXIgLS0gQy1LZXJtaXQg YXNzaWducyB0aGUgY2hhbm5lbCBudW1iZXI7IHlvdSBjYW4ndCB0ZWxsIGl0Ci0gICB3aGF0IG51 bWJlciB0byB1c2UuCi0KLSAgIEV4YW1wbGU6Ci0KLSAgRklMRSBPUEVOIFwlYyBvb2ZhLnR4dCAg ICAgICAgICAgICAgICAgIDsgT3BlbiBvb2ZhLnR4dCBmb3IgcmVhZGluZy4KLSAgSUYgRkFJTCBl eGl0IDEgQ2FuJ3Qgb3BlbiBvb2ZhLnR4dCAgICAgIDsgQWx3YXlzIGNoZWNrIHRvIHNlZSBpZiBp dCB3b3JrZWQuCi0gIEVDSE8gb29mYS50eHQ6IGNoYW5uZWwgPSBcJWMKLQotICAgSWYgdGhlIGZp bGUgb29mYS50eHQgaXMgb3BlbmVkIHN1Y2Nlc3NmdWxseSwgYSBjaGFubmVsIG51bWJlciBpcwot ICAgYXNzaWduZWQgdG8gdGhlIHZhcmlhYmxlIFwlYy4gSGVyZSdzIGFub3RoZXIgZXhhbXBsZSB1 c2luZyBhIG1hY3JvIG5hbWUKLSAgIGZvciB0aGUgY2hhbm5lbCBudW1iZXI6Ci0KLSAgRklMRSBP UEVOIGNoYW5uZWwgb29mYS50eHQgICAgICAgICAgICAgIDsgT3BlbiBvb2ZhLnR4dCBmb3IgcmVh ZGluZy4KLSAgSUYgU1VDQ0VTUyBFQ0hPIG9vZmEudHh0OiBjaGFubmVsID0gXG0oY2hhbm5lbCkK LQotICAgU3dpdGNoZXMgY2FuIGJlIGNvbWJpbmVkIHdoZW4gaXQgbWFrZXMgc2Vuc2UgYW5kIHRo ZSB1bmRlcmx5aW5nCi0gICBvcGVyYXRpbmcgc3lzdGVtIGFsbG93cyBpdC4gRm9yIGV4YW1wbGUs IHRvIG9wZW4gYSBmaWxlIGluIGJpbmFyeSBtb2RlCi0gICBmb3IgcmVhZGluZyBhbmQgd3JpdGlu ZyAoc29tZXRpbWVzIGNhbGxlZCAidXBkYXRlIik6Ci0KLSAgRklMRSBPUEVOIC9SRUFEIC9XUklU RSAvQklOQVJZIFwlYyBidWRnZXQuZGIKLQotICAgU29tZSBjb21iaW5hdGlvbnMgbWlnaHQgYmUg YWxsb3dlZCwgb3RoZXJzIG5vdC4gRm9yIGV4YW1wbGUgL1JFQUQKLSAgIC9BUFBFTkQgd2lsbCB1 c3VhbGx5IG5vdCBiZSBhbGxvd2VkLiAvV1JJVEUgL0FQUEVORCBpcyB0cmVhdGVkIGFzCi0gICAv QVBQRU5ELgotCi0gICBBIG1ham9yIGFkdmFudGFnZSBvZiB0aGUgbmV3IHN5c3RlbSBvdmVyIHRo ZSBvbGRlciBvbmUgaXMgdGhhdCB5b3UgY2FuCi0gICBoYXZlIG11bHRpcGxlIGZpbGVzIG9wZW4g YXQgb25jZS4gU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHRoYXQgeW91IHdhbnQKLSAgIHRvIG9wZW4g YWxsIHRoZSBmaWxlcyBpbiBhIGNlcnRhaW4gZGlyZWN0b3J5IGF0IG9uY2U6Ci0KLSAgLlwlbiA6 PSBcZmZpbGVzKC91c3Ivb2xnYSosJmYpICAgICAgICAgIDsgR2V0IGZpbGUgbGlzdCBpbnRvIGFy cmF5LgotICBpZiAoID4gXCVuIFx2KGZfbWF4KSApIHsgICAgICAgICAgICAgICAgOyBNYWtlIHN1 cmUgdGhlcmUgYXJlbid0IHRvbyBtYW55LgotICAgICAgZXhpdCAxIHtcdihkaXIpOiBcJW4gPSBU b28gbWFueSBmaWxlc30KLSAgfQotICBkZWNsYXJlIFwmY1tcJW5dICAgICAgICAgICAgICAgICAg ICAgICAgOyBNYWtlIGFycmF5IGZvciBjaGFubmVsIG51bWJlcnMuCi0gIGZvciBcJWkgMSBcJW4g MSB7ICAgICAgICAgICAgICAgICAgICAgICA7IExvb3AgdG8gb3BlbiBldmVyeSBmaWxlLi4uCi0g ICAgICBmaWxlIG9wZW4gXCZjW1wlaV0gXCZmW1wlaV0gICAgICAgICA7IFRyeSB0byBvcGVuIHRo aXMgb25lCi0gICAgICBpZiBmYWlsIGV4aXQgMSBPcGVuIGVycm9yOiBcJmZbXCVpXSA7IENoZWNr IGZvciBmYWlsdXJlCi0gIH0KLQotICAgSWYgdGhpcyBsb29wIGNvbXBsZXRlcyBzdWNjZXNzZnVs bHksIHRoZSBcJmNbXSBhcnJheSB3aWxsIGNvbnRhaW4gXCVuCi0gICBjaGFubmVsIG51bWJlcnMg b2Ygb3BlbiBmaWxlcyBpbiBlbGVtZW50cyAxIHRocm91Z2ggXCVuLgotCi0gICBBbnkgZmlsZSB0 aGF0IHlvdSBvcGVuIHdpdGggRklMRSBPUEVOIHN0YXlzIG9wZW4gdW50aWwgS2VybWl0IGV4aXRz LCBvcgotICAgeW91IGNsb3NlIGl0IGV4cGxpY2l0bHkuIFRoZSBjb21tYW5kIHRvIGNsb3NlIGEg ZmlsZSBpczoKLQotICAgRklMRSBDTE9TRSB7IEFMTCwgY2hhbm5lbCB9Ci0gICAgICAgICAgSWYg YSBjaGFubmVsIG51bWJlciBpcyBnaXZlbiBhbmQgdGhlIGNoYW5uZWwgcmVmZXJzIHRvIGFuIG9w ZW4KLSAgICAgICAgICBmaWxlLCB0aGUgZmlsZSBpcyBjbG9zZWQgYW5kIHRoZSBjaGFubmVsIGlz IGZyZWVkIGZvciByZXVzZTsgaWYKLSAgICAgICAgICB0aGUgY2hhbm5lbCBkb2VzIG5vdCByZWZl ciB0byBhbiBvcGVuIGZpbGUsIGFuIGVycm9yIG1lc3NhZ2UgaXMKLSAgICAgICAgICBwcmludGVk IGFuZCB0aGUgY29tbWFuZCBmYWlscy4gSWYgQUxMIGlzIHNwZWNpZmllZCBpbnN0ZWFkIG9mIGEK LSAgICAgICAgICBzcGVjaWZpYyBjaGFubmVsLCBhbGwgZmlsZXMgb3BlbmVkIHdpdGggRklMRSBP UEVOIGFyZSBjbG9zZWQgYW5kCi0gICAgICAgICAgaWYgYWxsIG9wZW4gZmlsZXMgd2VyZSBjbG9z ZWQgc3VjY2Vzc2Z1bGx5IChldmVuIGlmIG5vIGZpbGVzCi0gICAgICAgICAgd2VyZSBvcGVuKSwg dGhlIGNvbW1hbmQgc3VjY2VlZHM7IGlmIGFueSBvcGVuIGZpbGUgY291bGQgbm90IGJlCi0gICAg ICAgICAgY2xvc2VkLCB0aGUgY29tbWFuZCBmYWlsczsgaG93ZXZlciwgYWxsIG9wZW4gZmlsZXMg dGhhdCBjb3VsZCBiZQotICAgICAgICAgIGNsb3NlZCBhcmUgc3RpbGwgY2xvc2VkLiBTeW5vbnlt OiBGQ0xPU0UuCi0KLSAgIEZJTEUgQ0xPU0UgbWlnaHQgZmFpbCBiZWNhdXNlLCBmb3IgZXhhbXBs ZSwgdGhlIGRpc2sgZmlsbGVkIHVwIG9yIGEKLSAgIHF1b3RhIHdhcyBleGNlZWRlZC4gRXhhbXBs ZToKLQotICBmb3BlbiAvd3JpdGUgXCVjIG5ldy50eHQgICAgICAgICAgICAgICAgOyBPcGVuIG5l dy50eHQgZm9yIHdyaXRpbmcuCi0gIGlmIGZhaWwgZXhpdCAxICAgICAgICAgICAgICAgICAgICAg ICAgICA7IENoZWNrIGZvciBlcnJvci4KLSAgZmNsb3NlIFwlYyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsgQ2xvc2UgdGhlIGZpbGUgd2UganVzdCBvcGVuZWQuCi0KLSAgIFRoaXMgY3Jl YXRlcyBhIDAtbGVuZ3RoIGZpbGUgY2FsbGVkIG5ldy50eHQuCi0KLSAgIE5vdGUgdGhhdCBGSUxF IE9QRU4gL1dSSVRFICh3aXRob3V0IC9SRUFEIG9yIC9BUFBFTkQpIGFsd2F5cyBjcmVhdGVzIGEK LSAgIG5ldyBmaWxlLCBhbmQgdGhlcmVmb3JlIGRlc3Ryb3lzIGFueSBmaWxlIHdpdGggdGhlIHNh bWUgbmFtZSB0aGF0IG1pZ2h0Ci0gICBhbHJlYWR5IGV4aXN0IChhc3N1bWluZyB5b3UgaGF2ZSBw ZXJtaXNzaW9uIHRvIGRlbGV0ZSBpdCkuIFRvIGF2b2lkCi0gICBvdmVyd3JpdGluZyBleGlzdGlu ZyBmaWxlcywgc2ltcGx5IGNoZWNrIGZpcnN0OgotCi0gIGlmIGV4aXN0IG5ldy50eHQgZXhpdCAx IHtGYXRhbCAtIG5ldy50eHQgYWxyZWFkeSBleGlzdHN9Ci0gIGZvcGVuIC93cml0ZSBcJWMgbmV3 LnR4dAotICBpZiBmYWlsIC4uLgotCi0gICBUaGUgbmV4dCB0d28gY29tbWFuZHMgZ2l2ZSBpbmZv cm1hdGlvbiBhYm91dCBvcGVuIGZpbGVzOgotCi0gICBGSUxFIFNUQVRVUyBjaGFubmVsCi0gICAg ICAgICAgVGVsbHMgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIGlmIGFueSwgb3BlbiBvbiB0aGUgZ2l2 ZW4gY2hhbm5lbAotICAgICAgICAgIGFuZCB0aGUgc3dpdGNoZXMgaXQgd2FzIG9wZW5lZCB3aXRo LiBUaGUgcmVhZC93cml0ZSBwb2ludGVyIGlzCi0gICAgICAgICAgYWxzbyBzaG93bjsgdGhpcyBp cyB3aGVyZSB0aGUgbmV4dCByZWFkIG9yIHdyaXRlIHdpbGwgb2NjdXI7Ci0gICAgICAgICAgIltF T0ZdIiBpcyBzaG93biBpZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgb3BlbiBmaWxlIGlz IHRoZQotICAgICAgICAgIGVuZCAtLSBpLmUuIHRoZSBuZXh0IHJlYWQgd2lsbCBmYWlsIGlmIHRo ZSBmaWxlIHdhcyBvcGVuZWQgaW4KLSAgICAgICAgICAvUkVBRCBtb2RlOyB0aGUgbmV4dCB3cml0 ZSB3aWxsIGFkZCBtYXRlcmlhbCB0byB0aGUgZW5kLiBUaGUKLSAgICAgICAgICBjdXJyZW50IGxp bmUgbnVtYmVyICgwLWJhc2VkKSBpcyBhbHNvIHNob3duIGlmIGtub3duLiBUaGUgRklMRQotICAg ICAgICAgIFNUQVRVUyBjb21tYW5kIHN1Y2NlZWRzIGlmIHRoZSBjaGFubmVsIGlzIG9wZW4sIGFu ZCBmYWlscyBpZgotICAgICAgICAgIHRoZXJlIGlzIG5vIG9wZW4gZmlsZSBvbiB0aGUgZ2l2ZW4g Y2hhbm5lbCwgb3IgaWYgdGhlIGNoYW5uZWwKLSAgICAgICAgICBudW1iZXIgaXMgaW52YWxpZCBv ciBvdXQgb2YgcmFuZ2UuIFN5bm9ueW06IEZTVEFUVVMuCi0KLSAgIEZJTEUgTElTVAotICAgICAg ICAgIExpc3RzIHRoZSBjaGFubmVsIG51bWJlciBhbmQgbmFtZSBvZiBlYWNoIG9wZW4gZmlsZSwg YWxvbmcgd2l0aAotICAgICAgICAgIGl0cyBPUEVOIG1vZGVzIChSLCBXLCBBLCBCLCBSVywgZXRj KSBhbmQgaXRzIGN1cnJlbnQgcmVhZC93cml0ZQotICAgICAgICAgIHBvaW50ZXIgb3IgIltFT0Zd IiBpZiBpdCBpcyBhdCB0aGUgZW5kLiBBbHNvIHRlbGxzIHRoZSBudW1iZXIgb2YKLSAgICAgICAg ICBmaWxlcyBjdXJyZW50bHkgb3BlbmVkIHdpdGggRklMRSBPUEVOLCBwbHVzIHRoZSBtYXhpbXVt IG51bWJlcgotICAgICAgICAgIG9mIG9wZW4gZmlsZXMgYWxsb3dlZCBieSB0aGUgc3lzdGVtIGFu ZCB0aGUgbWF4aW11bSBudW1iZXIKLSAgICAgICAgICBhbGxvd2VkIGZvciBGSUxFIE9QRU4uIFN5 bm9ueW06IEZMSVNULgotCi0gICBOZXh0IGNvbWUgdGhlIGNvbW1hbmRzIGZvciByZWFkaW5nIGFu ZCB3cml0aW5nIGZpbGVzOgotCi0gICBGSUxFIFJFQUQgWyBzd2l0Y2hlcyBdIGNoYW5uZWwgWyB2 YXJpYWJsZSBdCi0gICAgICAgICAgUmVhZHMgZGF0YSBmcm9tIHRoZSBmaWxlIG9uIHRoZSBnaXZl biBjaGFubmVsIG51bWJlciBpbnRvIHRoZQotICAgICAgICAgIHZhcmlhYmxlLCBpZiBvbmUgd2Fz IGdpdmVuOyBpZiBubyB2YXJpYWJsZSB3YXMgZ2l2ZW4sIHRoZSByZXN1bHQKLSAgICAgICAgICBp cyBwcmludGVkIG9uIHRoZSBzY3JlZW4uIElNUE9SVEFOVDogVGhlIHZhcmlhYmxlIHNob3VsZAot ICAgICAgICAgIG5vcm1hbGx5IGJlIGEgbWFjcm8gbmFtZSByYXRoZXIgdGhhbiBhIFwleCBvciBc JnhbXSB2YXJpYWJsZSBpZgotICAgICAgICAgIHlvdSB3YW50IGJhY2tzbGFzaCBjaGFyYWN0ZXJz IGluIHRoZSBmaWxlIHRvIGJlIHRha2VuIGxpdGVyYWxseQotICAgICAgICAgIChzZWUgcHAuNDA4 LTQxMiBvZiBbMzg2XVVzaW5nIEMtS2VybWl0IGZvciBhbiBleHBsYW5hdGlvbjsgeW91Ci0gICAg ICAgICAgY2FuIGFsc28gcmVhZCBpbnRvIGEgXCV4IG9yIFwmeFtdIHZhcmlhYmxlLCBidXQgdGhl biB5b3UgbXVzdAotICAgICAgICAgIHJlbWVtYmVyIHRvIHByb3RlY3QgZnV0dXJlIHJlZmVyZW5j ZXMgdG8gYnkgXGZjb250ZW50cygpIGlmIHlvdQotICAgICAgICAgIGRvbid0IHdhbnQgQy1LZXJt aXQgdG8gcHJvY2VzcyBhbnkgYmFja3NsYXNoZXMgaXQgbWlnaHQKLSAgICAgICAgICBjb250YWlu KS4gVGhlIGRlc2lyZWQgYW1vdW50IG9mIGRhdGEgKGFjY29yZGluZyB0byB0aGUgc3dpdGNoZXMp Ci0gICAgICAgICAgaXMgcmVhZCBmcm9tIHRoZSBmaWxlIGF0IHRoZSBjdXJyZW50IHJlYWQvd3Jp dGUgcG9pbnRlciwgYW5kCi0gICAgICAgICAgdXBvbiBjb21wbGV0aW9uIHRoZSByZWFkL3dyaXRl IHBvc2l0aW9uIGlzIHVwZGF0ZWQgdG8gZmlyc3QgYnl0ZQotICAgICAgICAgIGFmdGVyIHRoZSBk YXRhIHRoYXQgd2FzIHJlYWQsIG5vIG1hdHRlciB3aGF0IHN3aXRjaGVzIHdlcmUKLSAgICAgICAg ICBnaXZlbi4gU3lub255bTogRlJFQUQuCi0KLSAgIEZJTEUgV1JJVEUgWyBzd2l0Y2hlcyBdIGNo YW5uZWwgdGV4dAotICAgICAgICAgIFdyaXRlcyB0aGUgZ2l2ZW4gdGV4dCB0byB0aGUgZmlsZSBv biB0aGUgZ2l2ZW4gY2hhbm5lbCBudW1iZXIuCi0gICAgICAgICAgVGhlIHRleHQsIG9mIGNvdXJz ZSwgY2FuIGJlIGxpdGVyYWwgdGV4dCBvciBhIHZhcmlhYmxlLCBvciBhbnkKLSAgICAgICAgICBj b21iaW5hdGlvbi4gSWYgdGhlIHRleHQgbWlnaHQgY29udGFpbiBsZWFkaW5nIG9yIHRyYWlsaW5n Ci0gICAgICAgICAgc3BhY2VzLCBpdCBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcyBpZiB5b3Ug d2FudCB0byBwcmVzZXJ2ZQotICAgICAgICAgIHRoZW0uIFN5bm9ueW06IEZXUklURS4KLQotICAg QmVmb3JlIHByb2NlZWRpbmcsIGEgY2F1dGlvbiBhYm91dCB0aGUgTlVMIGNoYXJhY3Rlci4gQy1L ZXJtaXQgaXMgc28KLSAgIG5hbWVkIGJlY2F1c2UgaXQgaXMgYSBLZXJtaXQgcHJvZ3JhbSB3cml0 dGVuIGluIHRoZSBDIGxhbmd1YWdlLiBJbiBDLAotICAgY2hhcmFjdGVyIHN0cmluZ3MgYXJlIHJl cHJlc2VudGVkIGFzIGEgc2VxdWVuY2Ugb2Ygbm9uLU5VTCBieXRlcwotICAgdGVybWluYXRlZCBi eSBhIE5VTCBieXRlIChhIGJ5dGUgaW4gd2hpY2ggYWxsIGJpdHMgYXJlIDApLiBUaHVzIGEgQwot ICAgc3RyaW5nIGNhbiBub3QgY29udGFpbiBOVUwgYnl0ZXM7IGl0IGFsd2F5cyBlbmRzIHdpdGgg dGhlIGZpcnN0IE5VTAotICAgYnl0ZS4gQy1LZXJtaXQgdmFyaWFibGVzIGFyZSBpbXBsZW1lbnRl ZCBhcyBDIHN0cmluZ3MgYW5kIHRoZXJlZm9yZQotICAgY2FuJ3QgY29udGFpbiBOVUwgYnl0ZXMg ZWl0aGVyLCBzbyB0aGUgRklMRSBSRUFEIGFuZCBGSUxFIFdSSVRFCi0gICBjb21tYW5kcyBkbyBu b3QgaGFuZGxlIGZpbGVzIG9yIHN0cmluZ3MgdGhhdCBjb250YWluIE5VTCBieXRlcywgZXhjZXB0 Ci0gICB3aGVuIHRoZSAvQ0hBUkFDVEVSIHN3aXRjaCBpcyBpbmNsdWRlZCB3aXRoIHRoZSBGSUxF IFJFQUQgb3IgV1JJVEUKLSAgIGNvbW1hbmQsIG9yIHdoZW4gL0xQQUQ6MCBvciAvUlBBRDowIGlz IGdpdmVuIHdpdGggdGhlIEZJTEUgV1JJVEUKLSAgIGNvbW1hbmQ7IHRoZXNlIHN3aXRjaGVzIGFy ZSBleHBsYWluZWQgYmVsb3cuCi0KLSAgIEFsc28gbm90ZSB0aGF0IEtlcm1pdCBjYW4gbm90IGJl IHVzZWQgcmVhZCBvciB3cml0ZSBiaW5hcnkgbnVtYmVycyBpbgotICAgdGhlIG1hY2hpbmUncyBp bnRlcm5hbCBmb3JtYXQgKGludGVnZXIgb3IgZmxvYXRpbmctcG9pbnQpOyBpbiBnZW5lcmFsLAot ICAgbnVtYmVycyBjYW4gYmUgcHJvY2Vzc2VkIG9ubHkgd2hlbiByZXByZXNlbnRlZCBhcyBudW1l cmljIG9yCi0gICBmbG9hdGluZy1wb2ludCBzdHJpbmdzLgotCi0gICBGSUxFIFJFQUQgc3dpdGNo ZXMgYXJlOgotCi0gICAvTElORQotICAgICAgICAgIFNwZWNpZmllcyB0aGF0IGEgbGluZSBvZiB0 ZXh0IGlzIHRvIGJlIHJlYWQuIEEgbGluZSBpcyBkZWZpbmVkCi0gICAgICAgICAgYWNjb3JkaW5n IHRvIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0ncyB0ZXh0LWZpbGUgZm9ybWF0Lgot ICAgICAgICAgIEZvciBleGFtcGxlLCBpbiBVTklYIGEgbGluZSBpcyBhIHNlcXVlbmNlIG9mIGNo YXJhY3RlcnMgdXAgdG8KLSAgICAgICAgICBhbmQgaW5jbHVkaW5nIGEgbGluZWZlZWQsIG9yIHRo ZSBlbmQgb2YgdGhlIGZpbGUsIHdoaWNoIGV2ZXIKLSAgICAgICAgICBjb21lcyBmaXJzdC4gVGhl IGxpbmUgdGVybWluYXRvciAoaWYgYW55KSBpcyByZW1vdmVkIGJlZm9yZQotICAgICAgICAgIGFz c2lnbmluZyB0aGUgdGV4dCB0byB0aGUgdmFyaWFibGUuIElmIG5vIHN3aXRjaGVzIGFyZSBpbmNs dWRlZAotICAgICAgICAgIHdpdGggdGhlIEZJTEUgUkVBRCBjb21tYW5kLCAvTElORSBpcyBhc3N1 bWVkLiBOb3JtYWxseSB0aGlzCi0gICAgICAgICAgc3dpdGNoIHNob3VsZCBub3QgYmUgdXNlZCB3 aXRoIGZpbGVzIG9wZW5lZCBpbiAvQklOQVJZIG1vZGUgKGJ1dAotICAgICAgICAgIG5vdGhpbmcg cHJldmVudHMgaXQgZWl0aGVyKS4KLQotICAgL1NJWkU6bnVtYmVyCi0gICAgICAgICAgU3BlY2lm aWVzIHRoYXQgdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcyAoY2hhcmFjdGVycykgaXMgdG8gYmUK LSAgICAgICAgICByZWFkLiBUaGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyByZXR1cm5lZCB3aWxs IGJlIGxlc3MgaWYgdGhlCi0gICAgICAgICAgZW5kIG9mIGZpbGUgaXMgcmVhY2hlZCAob3IgYSBO VUwgYnl0ZSBpcyBlbmNvdW50ZXJlZCkuIEZvcgotICAgICAgICAgIGV4YW1wbGUsIGlmIGEgZmls ZSBpcyA1MTQgYnl0ZXMgbG9uZywgRklMRSBSRUFEIC9TSVpFOjUxMgotICAgICAgICAgIHJldHVy bnMgNTEyIGJ5dGVzIHRoZSBmaXJzdCB0aW1lIGFuZCAyIGJ5dGVzIHRoZSBzZWNvbmQgdGltZS4K LSAgICAgICAgICBGSUxFIFJFQUQgL1NJWkUgcHJvdmlkZXMgYSBraW5kIG9mICJyZWNvcmQgaS9v IiBmb3IgZmlsZXMgdGhhdAotICAgICAgICAgIGRvIG5vdCBuZWNlc3NhcmlseSBjb250YWluIGxp bmVzLiBUaGUgcmVzdWx0aW5nIGJsb2NrIG9mCi0gICAgICAgICAgY2hhcmFjdGVycyBpcyBhc3Np Z25lZCB0byB0aGUgdmFyaWFibGUgd2l0aG91dCBhbnkgZWRpdGluZy4KLSAgICAgICAgICBTeW5v bnltOiAvQkxPQ0suCi0KLSAgIC9DSEFSQUNURVIKLSAgICAgICAgICBFcXVpdmFsZW50IHRvIC9T SVpFOjEuIElmIEZJTEUgUkVBRCAvQ0hBUiBzdWNjZWVkcyBidXQgdGhlCi0gICAgICAgICAgdmFy aWFibGUgaXMgZW1wdHksIHRoaXMgaW5kaWNhdGVzIGEgTlVMIGJ5dGUgd2FzIHJlYWQuIFN5bm9u eW06Ci0gICAgICAgICAgQllURS4KLQotICAgRklMRSBXUklURSBzd2l0Y2hlcyBhcmU6Ci0KLSAg IC9MSU5FCi0gICAgICAgICAgU3BlY2lmaWVzIHRoYXQgYW4gYXBwcm9wcmlhdGUgbGluZSB0ZXJt aW5hdG9yIGlzIHRvIGJlIGFkZGVkIHRvCi0gICAgICAgICAgdGhlIGVuZCBvZiB0aGUgdGV4dC4g SWYgbm8gc3dpdGNoZXMgYXJlIGluY2x1ZGVkLCAvTElORSBpcwotICAgICAgICAgIGFzc3VtZWQu Ci0KLSAgIC9TSVpFOm51bWJlcgotICAgICAgICAgIFNwZWNpZmllcyB0aGF0IHRoZSBnaXZlbiBu dW1iZXIgb2YgYnl0ZXMgKGNoYXJhY3RlcnMpIGlzIHRvIGJlCi0gICAgICAgICAgd3JpdHRlbi4g SWYgdGhlIGdpdmVuIHRleHQgaXMgbG9uZ2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBzaXplLCBpdAot ICAgICAgICAgIGlzIHRydW5jYXRlZDsgaWYgaXMgc2hvcnRlciwgaXQgaXMgcGFkZGVkIGFjY29y ZGluZyAvTFBBRCBhbmQKLSAgICAgICAgICAvUlBBRCBzd2l0Y2hlcy4gU3lub255bTogL0JMT0NL LgotCi0gICAvTFBBRFs6dmFsdWVdCi0gICAgICAgICAgSWYgL1NJWkUgd2FzIGdpdmVuLCBidXQg dGhlIHRleHQgaXMgc2hvcnRlciB0aGFuIHRoZSByZXF1ZXN0ZWQKLSAgICAgICAgICBzaXplLCB0 aGUgdGV4dCBpcyBwYWRkZWQgb24gdGhlIGxlZnQgd2l0aCBzdWZmaWNpZW50IGNvcGllcyBvZgot ICAgICAgICAgIHRoZSBjaGFyYWN0ZXIgd2hvc2UgQVNDSUkgdmFsdWUgaXMgZ2l2ZW4gdG8gd3Jp dGUgdGhlIGdpdmVuCi0gICAgICAgICAgbGVuZ3RoLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQs IDMyICh0aGUgY29kZSBmb3IgU3BhY2UpIGlzCi0gICAgICAgICAgdXNlZC4gVGhlIHZhbHVlIGNh biBhbHNvIGJlIDAgdG8gd3JpdGUgdGhlIGluZGljYXRlZCBudW1iZXIgb2YKLSAgICAgICAgICBO VUwgYnl0ZXMuIElmIC9TSVpFIHdhcyBub3QgZ2l2ZW4sIHRoaXMgc3dpdGNoIGlzIGlnbm9yZWQu Ci0KLSAgIC9SUEFEWzp2YWx1ZV0KLSAgICAgICAgICBMaWtlIExQQUQsIGJ1dCBwYWRzIG9uIHRo ZSByaWdodC4KLQotICAgL0NIQVJBQ1RFUgotICAgICAgICAgIFNwZWNpZmllcyB0aGF0IG9uZSBj aGFyYWN0ZXIgc2hvdWxkIGJlIHdyaXR0ZW4uIElmIHRoZSB0ZXh0IGlzCi0gICAgICAgICAgZW1w dHkgb3Igbm90IGdpdmVuLCBhIE5VTCBjaGFyYWN0ZXIgaXMgd3JpdHRlbjsgb3RoZXJ3aXNlIHRo ZQotICAgICAgICAgIGZpcnN0IGNoYXJhY3RlciBvZiB0ZXh0IGlzIGdpdmVuLiBTeW5vbnltOiAv QllURS4KLQotICAgL1NUUklORwotICAgICAgICAgIFNwZWNpZmllcyB0aGF0IHRoZSB0ZXh0IGlz IHRvIGJlIHdyaXR0ZW4gYXMtaXMsIHdpdGggbm8KLSAgICAgICAgICB0ZXJtaW5hdG9yIGFkZGVk LgotCi0gICBIZXJlJ3MgYW4gZXhhbXBsZSBpbiB3aGljaCB3ZSBjb3B5IGEgdGV4dCBmaWxlIGxp bmUgYnkgbGluZToKLQotICBmaWxlIG9wZW4gL3JlYWQgXCVjIG9vZmEudHh0ICAgICAgICAgICAg OyBPcGVuIGlucHV0IGZpbGUKLSAgaWYgZmFpbCBleGl0IDEgQ2FuJ3Qgb3BlbiBpbnB1dCBmaWxl ICAgIDsgQ2hlY2sgdGhhdCBpdCdzIG9wZW4KLSAgZmlsZSBvcGVuIC93cml0ZSBcJWQgbmV3LnR4 dCAgICAgICAgICAgIDsgT3BlbiBvdXRwdXQgZmlsZQotICBpZiBmYWlsIGV4aXQgMSBDYW4ndCBv cGVuIG91dHB1dCBmaWxlICAgOyBDaGVjawotICB3aGlsZSB0cnVlIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOyBMb29wIHRvIGNvcHkgbGluZXMKLSAgICAgIGZpbGUgcmVhZCAvbGluZSBc JWMgbGluZSAgICAgICAgICAgIDsgUmVhZCBhIGxpbmUKLSAgICAgIGlmIGZhaWwgYnJlYWsgICAg ICAgICAgICAgICAgICAgICAgIDsgQXNzdW1lIGZhaWx1cmUgPSBlbmQgb2YgZmlsZQotICAgICAg ZmlsZSB3cml0ZSAvbGluZSBcJWQge1xtKGxpbmUpfSAgICAgOyBXcml0ZSB0aGUgbGluZSB0byBv dXRwdXQgZmlsZQotICAgICAgaWYgZmFpbCBleGl0IDEgV3JpdGUgZmFpbHVyZSAgICAgICAgOyBG YWlsdXJlIGhlcmUgaXMgZmF0YWwKLSAgfQotICBmaWxlIGNsb3NlIFwlYyAgICAgICAgICAgICAg ICAgICAgICAgICAgOyBDbG9zZSB0aGUgdHdvIGZpbGVzCi0gIGZpbGUgY2xvc2UgXCVkCi0KLSAg IE5vdGUgdGhhdCBzaW5jZSAvTElORSBpcyB0aGUgZGVmYXVsdCBmb3IgYm90aCBGSUxFIFJFQUQg YW5kIEZJTEUgV1JJVEUsCi0gICBpdCBjYW4gYmUgb21pdHRlZCBhcyBpbiB0aGUgZm9sbG93aW5n IGV4YW1wbGUsIHdoZXJlIHdlIGFsc28gdXNlIHRoZQotICAgc2hvcnQgbmFtZXMgZm9yIHRoZSBG SUxFIGNvbW1hbmRzLgotCi0gIGZvcGVuIC9yZWFkIFwlYyBvb2ZhLnR4dCAgICAgICAgICAgICAg ICA7IE9wZW4gaW5wdXQgZmlsZQotICBpZiBmYWlsIGV4aXQgMSBDYW4ndCBvcGVuIGlucHV0IGZp bGUgICAgOyBDaGVjayB0aGF0IGl0J3Mgb3BlbgotICBmb3BlbiAvd3JpdGUgXCVkIG5ldy50eHQg ICAgICAgICAgICAgICAgOyBPcGVuIG91dHB1dCBmaWxlCi0gIGlmIGZhaWwgZXhpdCAxIENhbid0 IG9wZW4gb3V0cHV0IGZpbGUgICA7IENoZWNrCi0gIHdoaWxlIHRydWUgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7IExvb3AgdG8gY29weSBsaW5lcwotICAgICAgZnJlYWQgXCVjIGxpbmUg ICAgICAgICAgICAgICAgICAgICAgOyBSZWFkIGEgbGluZQotICAgICAgaWYgZmFpbCBicmVhayAg ICAgICAgICAgICAgICAgICAgICAgOyBBc3N1bWUgZmFpbHVyZSA9IGVuZCBvZiBmaWxlCi0gICAg ICBmd3JpdGUgXCVkIHtcbShsaW5lKX0gICAgICAgICAgICAgICA7IFdyaXRlIHRoZSBsaW5lIHRv IG91dHB1dCBmaWxlCi0gICAgICBpZiBmYWlsIGV4aXQgMSBXcml0ZSBmYWlsdXJlICAgICAgICA7 IEZhaWx1cmUgaGVyZSBpcyBmYXRhbAotICB9Ci0gIGZjbG9zZSBcJWMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7IENsb3NlIHRoZSB0d28gZmlsZXMKLSAgZmNsb3NlIFwlZAotCi0gICBI ZXJlJ3MgdGhlIHNhbWUgZXhhbXBsZSB1c2luZyAicmVjb3JkIGkvbyIgKHRoZSBvcGVuIGFuZCBj bG9zZQotICAgc2VxdWVuY2VzIGFyZSBhcmUgb21pdHRlZCBzaW5jZSB0aGV5IGFyZSB0aGUgc2Ft ZSBhcyBhYm92ZSkuIFRoZSByZXN1bHQKLSAgIGlzIHRoZSBzYW1lLCBidXQgZXhlY3V0aW9uIGlz IG11Y2ggZmFzdGVyOgotCi0gIHdoaWxlIHRydWUgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7IExvb3AgdG8gY29weSBibG9ja3MKLSAgICAgIGZyZWFkIC9zaXplOjUxMiBcJWMgYmxvY2sg ICAgICAgICAgIDsgUmVhZCBhIGJsb2NrIGludG8gXCVhCi0gICAgICBpZiBmYWlsIGJyZWFrICAg ICAgICAgICAgICAgICAgICAgICA7IEFzc3VtZSBmYWlsdXJlID0gZW5kIG9mIGZpbGUKLSAgICAg IGZ3cml0ZSAvc3RyaW5nIFwlZCB7XG0oYmxvY2spfSAgICAgIDsgV3JpdGUgdGhlIGJsb2NrIHRv IG91dHB1dCBmaWxlCi0gICAgICBpZiBmYWlsIGV4aXQgMSBXcml0ZSBmYWlsdXJlICAgICAgICA7 IEZhaWx1cmUgaGVyZSBpcyBmYXRhbAotICB9Ci0KLSAgIEFsdGhvdWdoIHJlY29yZCBpL28gaXMg ZmFzdGVyLCBpdCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbGluZS1vcmllbnRlZAotICAgYXBwbGlj YXRpb25zLCBzaW5jZSBpdCByZXR1cm5zIGFyYml0cmFyeSBjaHVua3Mgb2YgdGhlIGZpbGUgdG8g eW91cgotICAgc2NyaXB0LCByYXRoZXIgdGhhbiBsaW5lcy4gSW4gdGhpcyBleGFtcGxlLCBGV1JJ VEUgL1NUUklORyBpcyB1c2VkCi0gICByYXRoZXIgdGhhbiBGV1JJVEUgL1NJWkU6NTEyIHRvIGF2 b2lkIHRoZSBsYXN0IG91dHB1dCBibG9jayBiZWluZwotICAgcGFkZGVkIGJleW9uZCB0aGUgb3Jp Z2luYWwgZmlsZSdzIGxlbmd0aC4KLQotICAgQSBmaWxlIGNhbiBhbHNvIGJlIGNvcGllZCBjaGFy YWN0ZXIgYnkgY2hhcmFjdGVyLCBidXQgdGhpcyBpcyBtdWNoCi0gICBzbG93ZXIgdGhhbiBsaW5l IGkvbyBhbmQgVkVSWSBtdWNoIHNsb3dlciB0aGFuIGJsb2NrIGkvbzoKLQotICB3aGlsZSB0cnVl IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBMb29wIHRvIGNvcHkgYmxvY2tzCi0gICAg ICBmcmVhZCAvY2hhciBcJWMgYyAgICAgICAgICAgICAgICAgICA7IFJlYWQgYSBjaGFyYWN0ZXIg aW50byBjCi0gICAgICBpZiBmYWlsIGJyZWFrICAgICAgICAgICAgICAgICAgICAgICA7IEFzc3Vt ZSBmYWlsdXJlID0gZW5kIG9mIGZpbGUKLSAgICAgIGZ3cml0ZSAvY2hhciBcJWQge1xtKGMpfSAg ICAgICAgICAgIDsgV3JpdGUgY2hhcmFjdGVyIHRvIG91dHB1dCBmaWxlCi0gICAgICBpZiBmYWls IGV4aXQgMSBXcml0ZSBmYWlsdXJlICAgICAgICA7IEZhaWx1cmUgaXMgZmF0YWwKLSAgfQotCi0g ICBBbHRob3VnaCBjaGFyYWN0ZXIgaS9vIGlzIHNsb3csIGl0IGlzIHRoZSBvbmx5IHdheSB0byBw cm9jZXNzIGZpbGVzCi0gICB0aGF0IGNvbnRhaW4gTlVMIGNoYXJhY3RlcnMgKGkuZS4gYnl0ZXMg Y29tcG9zZWQgb2Ygb25seSB6ZXJvIGJpdHMpLiBJbgotICAgdGhlIGV4YW1wbGUgYWJvdmUsIHdo ZW4gImZyZWFkIC9jaGFyIFwlYyBjIiByZXR1cm5zIGEgTlVMLCB0aGUgYwotICAgdmFyaWFibGUg aXMgZW1wdHkuIEJ1dCBzaW5jZSB0aGUgRlJFQUQgL0NIQVIgY29tbWFuZCBkaWQgbm90IGZhaWws IHdlCi0gICBrbm93IHRoZSByZXN1bHQgd2FzIHJlYWxseSBhIE5VTC4gRldSSVRFIC9DSEFSLCB3 aGVuIGdpdmVuIGFuIGVtcHR5Ci0gICB2YXJpYWJsZSAob3Igbm8gdmFyaWFibGUgYXQgYWxsKSB3 cml0ZXMgYSBOVUwuIFRodXMgdGhlIGxvb3AgYWJvdmUgd2lsbAotICAgY29weSBhbnkgZmlsZSBh dCBhbGwgKHZlcnkgc2xvd2x5KS4gSW4gbm9uLWNvcHlpbmcgYXBwbGljYXRpb25zLCBOVUxzCi0g ICBhcmUgZGV0ZWN0ZWQgbGlrZSB0aGlzOgotCi0gIGZyZWFkIC9jaGFyIFwlYyBjCi0gIGlmIGZh aWwgKGRvIHNvbWV0aGluZykKLSAgaWYgbm90IGRlZiBjIChhIE5VTCBieXRlIHdhcyByZWFkKQot Ci0gICBGaW5hbGx5IHNvbWUgYWR2YW5jZWQgZmlsZSBvcGVyYXRpb25zOgotCi0gICBGSUxFIEZM VVNIIGNoYW5uZWwKLSAgICAgICAgICBGb3Igb3V0cHV0IGZpbGVzIG9ubHk6IGNvbW1pdHMgYWxs IHByZXZpb3VzIHdyaXRlcyB0byBkaXNrLCBpbgotICAgICAgICAgIGNhc2UgdGhlIGNvbXB1dGVy IHdhcyBidWZmZXJpbmcgdGhlbS4gU3lub255bTogRkZMVVNILgotCi0gICBGSUxFIENPVU5UIFsg eyAvQllURVMsIC9MSU5FUywgL0xJU1QsIC9OT0xJU1QgfSBdIGNoYW5uZWwKLSAgICAgICAgICBC eSBkZWZhdWx0LCBvciBpZiB0aGUgL0JZVEVTIHN3aXRjaCBpcyBnaXZlbiwgY291bnRzIHRoZSBi eXRlcwotICAgICAgICAgIGluIHRoZSBmaWxlLCBpZiBhbnksIG9wZW4gb24gdGhlIGdpdmVuIGNo YW5uZWwuIElmIHRoZSAvTElORVMKLSAgICAgICAgICBzd2l0Y2ggaXMgZ2l2ZW4sIGNvdW50cyBs aW5lcyBpbiB0aGUgZmlsZS4gSWYgdGhlIC9MSVNUIHN3aXRjaAotICAgICAgICAgIGlzIGdpdmVu LCB0aGUgcmVzdWx0IGlzIHByaW50ZWQuIElmIHRoZSAvTk9MSVNUIHN3aXRjaCBpcyBnaXZlbiwK LSAgICAgICAgICB0aGUgcmVzdWx0IGlzIG5vdCBwcmludGVkLiAvUVVJRVQgaXMgYSBzeW5vbnlt IGZvciAvTk9MSVNULiBJZgotICAgICAgICAgIG5laXRoZXIgL0xJU1Qgbm9yIC9OT0xJU1QgaXMg Z2l2ZW4sIHRoZSByZXN1bHQgaXMgcHJpbnRlZCBpZiB0aGUKLSAgICAgICAgICBjb21tYW5kIGlz IGdpdmVuIGF0IHRvcCBsZXZlbCwgaS5lLiBub3QgZnJvbSBhIGNvbW1hbmQgZmlsZSBvcgotICAg ICAgICAgIG1hY3JvLiBJbiBhbGwgY2FzZXMsIHRoZSByZXN1bHQgb2YgdGhlIG1vc3QgcmVjZW50 IEZJTEUgQ09VTlQKLSAgICAgICAgICBjb21tYW5kIGlzIHN0b3JlZCBpbiB0aGUgdmFyaWFibGUg XHYoZl9jb3VudCkuIE5vdGUgdGhhdCBGSUxFCi0gICAgICAgICAgQ09VTlQgL0xJTkUgd29ya3Mg KGFuZCBjYW4gb25seSB3b3JrKSBieSByZWFkaW5nIHRoZSBlbnRpcmUKLSAgICAgICAgICBmaWxl OyBleHBlY3QgaXQgdG8gdGFrZSBzb21lIHRpbWUgaWYgdGhlIGZpbGUgaXMgbGFyZ2UuIFN5bm9u eW06Ci0gICAgICAgICAgRkNPVU5ULgotCi0gICBGSUxFIFJFV0lORCBjaGFubmVsCi0gICAgICAg ICAgTW92ZXMgdGhlIHJlYWQvd3JpdGUgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBm aWxlLgotICAgICAgICAgIEVxdWl2YWxlbnQgdG8gRklMRSBTRUVLIGNoYW5uZWwgMC4gU3lub255 bTogRlJFV0lORC4KLQotICAgRklMRSBTRUVLIFsgc3dpdGNoZXMgXSBjaGFubmVsIHsgW3srLC19 XW51bWJlciwgTEFTVCwgRU9GIH0KLSAgICAgICAgICBNb3ZlcyB0aGUgcmVhZC93cml0ZSBwb2lu dGVyIGZvciB0aGUgZmlsZSBvbiB0aGlzIGNoYW5uZWwgdG8gdGhlCi0gICAgICAgICAgZ2l2ZW4g cG9zaXRpb24sIHdoaWNoIG1heSBiZSBhIGJ5dGUgKGNoYXJhY3RlcikgbnVtYmVyIG9yIGEgbGlu ZQotICAgICAgICAgIG51bWJlciwgZXhwcmVzc2VkIGluIGVpdGhlciBhYnNvbHV0ZSBvciByZWxh dGl2ZSB0ZXJtcy4KLSAgICAgICAgICBTd2l0Y2hlczoKLQotICAgICAgICAvQllURQotICAgICAg ICAgICAgICAgIFRoZSBudW1iZXIgZ2l2ZW4gaXMgYSBieXRlIG51bWJlci4gU3lub255bTogL0NI QVJBQ1RFUi4KLQotICAgICAgICAvTElORQotICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgZ2l2 ZW4gaXMgYSBsaW5lIG51bWJlci4KLQotICAgICAgICAvQUJTT0xVVEUKLSAgICAgICAgICAgICAg ICBUaGUgbnVtYmVyIGdpdmVuIGlzIGFic29sdXRlLgotCi0gICAgICAgIC9SRUxBVElWRQotICAg ICAgICAgICAgICAgIFRoZSBudW1iZXIgZ2l2ZW4gaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQg cG9zaXRpb24uCi0KLSAgICAgICAgICBCeSBkZWZhdWx0LCBvciBpZiB0aGUgL0JZVEUgc3dpdGNo IGlzIGdpdmVuLCB0aGUgbnVtYmVyIGlzIGEKLSAgICAgICAgICBieXRlIG51bWJlciAoMCA9IGZp cnN0IGJ5dGUpLiBJZiAvTElORSBpcyBnaXZlbiwgdGhlIG51bWJlciBpcyBhCi0gICAgICAgICAg bGluZSBudW1iZXIgKDAgPSBmaXJzdCBsaW5lKS4gRU9GIG1lYW5zIHRvIG1vdmUgdG8gdGhlIGVu ZCBvZgotICAgICAgICAgIHRoZSBmaWxlLiBMQVNUIG1lYW5zIHRvIG1vdmUgdG8gdGhlIGxhc3Qg bGluZSBvciBjaGFyYWN0ZXIgb2YKLSAgICAgICAgICB0aGUgZmlsZSwgZGVwZW5kaW5nIG9uIHdo ZXRoZXIgaXQncyBhIGxpbmUgb3IgY2hhcmFjdGVyIHNlZWsuCi0KLSAgICAgICAgICBJZiBuZWl0 aGVyIHRoZSAvUkVMQVRJVkUgbm9yIHRoZSAvQUJTT0xVVEUgc3dpdGNoIGlzIGdpdmVuLCB0aGVu Ci0gICAgICAgICAgaWYgYSBzaWduZWQgbnVtYmVyIGlzIGdpdmVuLCB0aGUgbW90aW9uIGlzIHJl bGF0aXZlIHRvIHRoZQotICAgICAgICAgIGN1cnJlbnQgcG9zaXRpb24uIEFuIGV4cHJlc3Npb24g dGhhdCBldmFsdWF0ZXMgdG8gYSBuZWdhdGl2ZQotICAgICAgICAgIG51bWJlciBpcyBub3QgY29u c2lkZXJlZCBzaWduZWQgZm9yIHRoaXMgcHVycG9zZTsgdGhhdCBpcywgYQotICAgICAgICAgIHNp Z24gKCsgb3IgLSkgbXVzdCBiZSBpbmNsdWRlZCBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRo ZQotICAgICAgICAgIG51bWJlciBpbiB0aGUgY29tbWFuZCBpdHNlbGYgdG8gZm9yY2UgYSByZWxh dGl2ZSBzZWVrIChpbiB0aGUKLSAgICAgICAgICBhYnNlbmNlIG9mIC9SRUxBVElWRSBvciAvQUJT T0xVVEUpLgotCi0gICAgICAgICAgSWYgdGhlIG51bWJlciBoYXMgbm8gc2lnbiwgb3IgaWYgdGhl IC9BQlNPTFVURSBzd2l0Y2ggaXMgZ2l2ZW4sCi0gICAgICAgICAgdGhlIG51bWJlciByZXByZXNl bnRzIGFuIGFic29sdXRlIHBvc2l0aW9uIChyZWxhdGl2ZSB0byB0aGUKLSAgICAgICAgICBiZWdp bm5pbmcgb2YgdGhlIGZpbGUpLiBTdWJzZXF1ZW50IEZJTEUgUkVBRHMgb3IgV1JJVEVzIHdpbGwK LSAgICAgICAgICB0YWtlIHBsYWNlIGF0IHRoZSBuZXcgcG9zaXRpb24uCi0KLSAgICAgICAgICBJ ZiB0aGUgcmVhZC93cml0ZSBwb2ludGVyIGlzIHBsYWNlZCBhZnRlciB0aGUgZW5kIG9mIHRoZSBm aWxlLCBhCi0gICAgICAgICAgc3Vic2VxdWVudCBGSUxFIFJFQUQgd2lsbCBmYWlsLCBidXQgYSBG SUxFIFdSSVRFIHdpbGwgc3VjY2VlZAotICAgICAgICAgIChwb3NzaWJseSBjcmVhdGluZyBhIGZp bGUgd2l0aCAiaG9sZXMiKS4gSWYgYSBGSUxFIFNFRUsgL0JZVEUKLSAgICAgICAgICBjb21tYW5k IGlzIGdpdmVuLCB0aGUgY3VycmVudCBsaW5lIGJlY29tZXMgdW5rbm93biAodW5sZXNzIHRoZQot ICAgICAgICAgIHBvc2l0aW9uIGlzIDApIGFuZCBzdWJzZXF1ZW50IEZJTEUgU0VFSyAvUkVMQVRJ VkUgL0xJTkUgY29tbWFuZHMKLSAgICAgICAgICB3aWxsIGZhaWwgdW50aWwgdGhlIG5leHQgbm9u LXJlbGF0aXZlIEZJTEUgU0VFSyAvTElORSBjb21tYW5kIGlzCi0gICAgICAgICAgZ2l2ZW4uIFN5 bm9ueW06IEZTRUVLLgotCi0gICBBbiBhYnNvbHV0ZSBGSUxFIFNFRUsgdG8gYSBuZWdhdGl2ZSBw b3NpdGlvbiBmYWlscyBzaWxlbnRseSwgYXMgZG9lcyBhCi0gICByZWxhdGl2ZSBzZWVrIHRvIGEg cG9zaXRpb24gYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCi0KLSAgIEEgY2F1dGlv biBhYm91dCByZWxhdGl2ZSBTRUVLczogcmVtZW1iZXIgdGhhdCB0aGUgbnVtYmVyIGlzIHJlbGF0 aXZlIHRvCi0gICB0aGUgY3VycmVudCBwb3NpdGlvbi4gV2hlbmV2ZXIgeW91IHJlYWQgb3Igd3Jp dGUsIHRoaXMgY2hhbmdlcyB0aGUKLSAgIHBvc2l0aW9uLiBJbiBlYWNoIG9mIHRoZSBmb2xsb3dp bmcgZXhhbXBsZXMsIGFzc3VtZSB0aGUgZmlsZSBvcGVuIG9uCi0gICBjaGFubmVsIFwlYyBpcyBw b3NpdGlvbmVkIGF0IGxpbmUgbiAodGhlIEZSRUFEIHRhcmdldCB2YXJpYWJsZSBpcwotICAgb21p dHRlZCBmb3IgbGFjayBvZiBzcGFjZSk6Ci0KLSAgeyBGUkVBRCBcJWMsIEZTRUVLIC9MSU5FIFwl YyAtMSwgRlJFQUQgXCVjIH0gIDwtLSBSZWFkcyBsaW5lIG4gdHdpY2UKLSAgeyBGUkVBRCBcJWMs IEZTRUVLIC9MSU5FIFwlYyArMCwgRlJFQUQgXCVjIH0gIDwtLSBSZWFkcyBsaW5lcyBuIGFuZCBu KzEKLSAgeyBGUkVBRCBcJWMsIEZTRUVLIC9MSU5FIFwlYyArMSwgRlJFQUQgXCVjIH0gIDwtLSBS ZWFkcyBsaW5lcyBuIGFuZCBuKzIKLSAgeyBGUkVBRCBcJWMsIEZTRUVLIC9MSU5FIFwlYyAtMiwg RlJFQUQgXCVjIH0gIDwtLSBSZWFkcyBsaW5lcyBuIGFuZCBuLTEKLSAgeyBGUkVBRCBcJWMsIEZT RUVLIC9MSU5FIFwlYyAtMywgRlJFQUQgXCVjIH0gIDwtLSBSZWFkcyBsaW5lcyBuIGFuZCBuLTIK LQotICAgQW5vdGhlciBjYXV0aW9uOiBVc2luZyBGU0VFSyBhbmQgRlJFQUQgL1NJWkUgdG8gcmVw ZWF0ZWRseSByZWFkIHRoZQotICAgc2FtZSBkaXNrIGJsb2NrIChlLmcuIHdoZW4gc2FtcGxpbmcg YSBkYXRhYmFzZSByZWNvcmQgdGhhdCBpcwotICAgZnJlcXVlbnRseSB1cGRhdGVkKSBtaWdodCBu b3QgZ2l2ZSB5b3UgdXBkYXRlZCBkaXNrIGJsb2NrcyBkdWUgdG8gdGhlCi0gICBpbnRlcm5hbCBi dWZmZXJpbmcgYW5kIGNhY2hpbmcgb2YgdGhlIEMgbGlicmFyeSAodGhpcyBwcm9iYWJseSB2YXJp ZXMKLSAgIGZyb20gb25lIHBsYXRmb3JtL2NvbXBpbGVyIGNvbWJpbmF0aW9uIHRvIGFub3RoZXIp LiBJZiBuZWNlc3NhcnkgeW91Ci0gICBjYW4gZm9yY2UgYSBmcmVzaCBkaXNrIHJlYWQgd2l0aCBh IGNsb3NlL29wZW4gc2VxdWVuY2U6Ci0KLSAgRkNMT1MgXCVjCi0gIEZPUEVOIFwlYyBzYW1lZmls ZW5hbWUKLSAgRlNFRUsgXCVjIHNhbWVzcG90Ci0gIEZSRUFEIC9TSVpFOmhvd21hbnlieXRlcyBc JWMgdmFyaWFibGUKLQotMS4yMi4zLiBGSUxFIENvbW1hbmQgRXhhbXBsZXMKLQotICAgVG8gcmVh ZCB0aGUgbGFzdCAxMCBsaW5lcyBvZiBhIHRleHQgZmlsZSBpbnRvIGFuIGFycmF5OgotCi0gIGZv cGVuIC9yZWFkIFwlYyBvb2ZhLnR4dCAgICAgICAgICAgICAgICA7IE9wZW4gdGhlIGZpbGUKLSAg aWYgZmFpbCBleGl0IDEgQ2FuJ3Qgb3BlbiBvb2ZhLnR4dCAgICAgIDsgQWx3YXlzIGNoZWNrIGZv ciBmYWlsdXJlCi0gIGRjbCBcJmFbMTBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IERl Y2xhcmUgYSAxMC1lbGVtZW50IGFycmF5Ci0gIGZjb3VudCAvbGluZSBcJWMgICAgICAgICAgICAg ICAgICAgICAgICA7IENvdW50IGxpbmVzIGluIHRoZSBmaWxlCi0gIGZzZWVrIC9saW5lIFwlYyBc dihmX2NvdW50KS0xMCAgICAgICAgICA7IFNlZWsgdG8gMTAgbGluZXMgZnJvbSB0aGUgZW5kCi0g IGlmIGZhaWwgZXhpdCAxIENhbid0IHNlZWsgICAgICAgICAgICAgICA7IENoZWNrIGZvciBmYWls dXJlCi0gIGZvciBcJWkgMSAxMCAxIHsgZnJlYWQgXCVjIFwmYVtcJWldIH0gICA7IFJlYWQgdGhl IGxhc3QgMTAgbGluZXMKLSAgZmNsb3NlIFwlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsgQ2xvc2UgdGhlIGZpbGUKLQotICAgTm90ZSB0aGF0IGJsYW5rIGxpbmVzIHNob3cgdXAgYXMg ZW1wdHkgKHVuZGVmaW5lZCkgYXJyYXkgZWxlbWVudHMsIGZvcgotICAgZXhhbXBsZSBpZiB5b3Ug Z2l2ZSBhICJzaG93IGFycmF5IGEiIGNvbW1hbmQgYXQgdGhpcyBwb2ludC4gVGhpcyBpcwotICAg bm9ybWFsLiBZb3UgY2FuIHN0aWxsIHVzZSB0aGVzZSBlbGVtZW50czsgZS5nLjoKLQotICBmb3Ig XCVpIDEgMTAgMSB7IGVjaG8gXCVpLiBcJmFbXCVpXSB9ICAgOyBEaXNwbGF5IHRoZSAxMCBsaW5l cwotCi0gICBIZXJlIGlzIGhvdyB0byByZWFkIHRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIChhbHJl YWR5IG9wZW4gb24gY2hhbm5lbAotICAgXCVjKToKLQotICBmc2VlayAvbGluZSBcJWMgbGFzdCAg ICAgICAgICAgICAgICAgICAgOyBTZWVrIGRpcmVjdGx5IHRvIGxhc3QgbGluZQotCi0gICBBbHRl cm5hdGl2ZWx5OgotCi0gIGZzZWVrIC9saW5lIFwlYyBlb2YgICAgICAgICAgICAgICAgICAgICA7 IFNlZWsgdG8gZW5kIG9mIGZpbGUKLSAgZnNlZWsgL2xpbmUgXCVjIC0xICAgICAgICAgICAgICAg ICAgICAgIDsgU2VlayB0byBiZWdpbm5pbmcgb2YgbGFzdCBsaW5lCi0KLSAgIEFsdGVybmF0aXZl bHk6Ci0KLSAgZmNvdW50IC9saW5lIFwlYyAgICAgICAgICAgICAgICAgICAgICAgIDsgQ291bnQg dGhlIGZpbGUncyBsaW5lcwotICBmc2VlayAvbGluZSBcJWMgXHYoZl9jb3VudCktMSAgICAgICAg ICAgOyBTZWVrIHRvIGxhc3QgbGluZQotICBmcmVhZCBcJWMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOyBSZWFkIGl0Ci0KLSAgIFRvIHJlYWQgZXZlcnkgb3RoZXIgbGluZSBmcm9tIHRo ZSBmaWxlICh1c2luZyByZWxhdGl2ZSBTRUVLKSwgc2tpcHBpbmcKLSAgIHRoZSBmaXJzdCBsaW5l OgotCi0gIGZvcGVuIC9yZWFkIFwlYyBvb2ZhLnR4dCAgICAgICAgICAgICAgICA7IE9wZW4gdGhl IGZpbGUKLSAgd2hpbGUgKCBzdWNjZXNzICkgeyAgICAgICAgICAgICAgICAgICAgIDsgTG9vcCB0 aHJvdWdoIGxpbmVzCi0gICAgICBmc2VlayAvbGluZSBcJWMgKzEgICAgICAgICAgICAgICAgICA7 IFNraXAgYSBsaW5lCi0gICAgICBpZiBzdWNjZXNzIGZyZWFkIFwlYyAgICAgICAgICAgICAgICA7 IFJlYWQgJiBkaXNwbGF5IGEgbGluZQotICB9Ci0gIGZjbG9zZSBcJWMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7IENsb3NlIHRoZSBmaWxlCi0KLSAgIEhlcmUgaXMgaG93IHRvIHJlYWQg dGhlIGxpbmVzIG9mIGEgZmlsZSBpbiByZXZlcnNlIG9yZGVyOgotCi0gIGZvcGVuIC9yZWFkIFwl YyBvb2ZhLnR4dCAgICAgICAgICAgICAgICA7IE9wZW4KLSAgaWYgZmFpbCBleGl0IDEgICAgICAg ICAgICAgICAgICAgICAgICAgIDsgQ2hlY2sKLSAgZnNlZWsgL2xpbmUgXCVjIGxhc3QgICAgICAg ICAgICAgICAgICAgIDsgU2VlayB0byBsYXN0IGxpbmUKLSAgd2hpbGUgc3VjY2VzcyB7ICAgICAg ICAgICAgICAgICAgICAgICAgIDsgTG9vcAotICAgICAgZnJlYWQgXCVjICAgICAgICAgICAgICAg ICAgICAgICAgICAgOyBSZWFkIGxpbmUKLSAgICAgIGZzZWVrIC9saW5lIFwlYyAtMiAgICAgICAg ICAgICAgICAgIDsgU2VlayBiYWNrd2FyZHMgdHdvIGxpbmVzCi0gIH0KLSAgZmNsb3NlIFwlYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ2xvc2UgdGhlIGZpbGUKLQotICAgVGhlIGxv b3Agd29ya3MgYmVjYXVzZSBhIHJlbGF0aXZlIFNFRUsgb3V0c2lkZSB0aGUgZmlsZSBmYWlscy4K LQotICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYmxvY2sgaS9vIHRvIG1hbmFnZSByYW5k b20tYWNjZXNzIGZpbGVzIHdpdGgKLSAgIGZpeGVkLWxlbmd0aCByZWNvcmRzIChhcyBsb25nIGFz IHRoZXkgZG9uJ3QgY29udGFpbiBOVUwgY2hhcmFjdGVycykuCi0gICBTdXBwb3NlLCBmb3IgZXhh bXBsZSwgeW91IGhhdmUgYSBmaWxlIG9mICJjYXJkIGltYWdlIiByZWNvcmRzIHdpdGgKLSAgIGZp eGVkLWZpZWxkIGluZm9ybWF0aW9uIGFib3V0IGN1c3RvbWVycywgc3VjaCBhczoKLQotICBOYW1l OiAgICAgQ29sdW1ucyAgMS0zMiAgKGNvbHVtbiBudW1iZXJzIGFyZSAxLWJhc2VkKQotICBBZGRy ZXNzOiAgQ29sdW1ucyAzMy03MgotICBCYWxhbmNlOiAgQ29sdW1ucyA3My04MAotCi0gICBUaGUg cmVjb3JkcyBhcmUgaW5kZXhlZCBieSBjdXN0b21lciBudW1iZXIsIHN0YXJ0aW5nIHdpdGggMC4g VGhlcmUgYXJlCi0gICBubyBsaW5lIHRlcm1pbmF0b3JzIHNlcGFyYXRpbmcgdGhlbS4gVGhlcmVm b3JlIHRoZSByZWNvcmQgZm9yIGN1c3RvbWVyCi0gICBudW1iZXIgbiBzdGFydHMgYXQgcG9zaXRp b24gbnggODAgKFwlbio4MCkuCi0KLSAgIE5vdyBzdXBwb3NlIHdlIHJlY2VpdmVkIGEgcGF5bWVu dCBmcm9tIGN1c3RvbWVyIG51bWJlciAxNzMgYW5kIHdhbnQgdG8KLSAgIHVwZGF0ZSB0aGUgYmFs YW5jZToKLQotICAuXCVuID0gMTczICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ3Vz dG9tZXIgKHJlY29yZCkgbnVtYmVyCi0gIC5cJWEgPSAxMi43MiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOyBBbW91bnQKLSAgZm9wZW4gL3JlYWQgL3dyaXRlIFwlYyBjdXN0b21lci5kYiAg ICAgICA7IE9wZW4gdGhlIGZpbGUKLSAgaWYgZmFpbCBzdG9wIDEgT1BFTiBGQUlMRUQ6IFxmX2Vy cm1zZygpICA7IENoZWNrCi0gIGZzZWVrIC9ieXRlIFwlYyA4MCpcJW4gICAgICAgICAgICAgICAg ICAgOyBTZWVrIHRvIHJlY29yZAotICBmcmVhZCAvc2l6ZTo4MCBcJWMgciAgICAgICAgICAgICAg ICAgICAgIDsgUmVhZCB0aGUgcmVjb3JkCi0gIGlmIGZhaWwgc3RvcCAxIFJFQUQgRkFJTEVEOiBc Zl9lcnJtc2coKSAgOyBDaGVjayAoSU1QT1JUQU5UKQotICAuXCViIDo9IFxmcmlnaHQoXG0ociks OCkgICAgICAgICAgICAgICAgIDsgRXh0cmFjdCB0aGUgYmFsYW5jZQotICAuXCViIDo9IFxmZnBh ZGQoXCViLFwlYSwyKSAgICAgICAgICAgICAgIDsgQWRkIHRoZSBuZXcgcGF5bWVudAotICBpZiBm YWlsIHN0b3AgMSBBUklUSE1FVElDIEVSUk9SOiBcJWIvXCVhIDsgQ2F0Y2ggYmFkIHJlY29yZHMK LSAgLnIgOj0ge1xmbGVmdChcbShyKSw3MilcZmxwYWQoXCViLDgpfSAgICA7IFVwZGF0ZSB0aGUg cmVjb3JkCi0gIGZzZWVrIC9ieXRlIFwlYyA4MCpcJW4gICAgICAgICAgICAgICAgICAgOyBSZXBv c2l0aW9uIHRvIHNhbWUgc3BvdAotICBmd3JpdGUgL3NpemU6ODAgXCVjIHtcbShyKX0gICAgICAg ICAgICAgIDsgUmVwbGFjZSB0aGUgcmVjb3JkCi0gIGlmIGZhaWwgc3RvcCAxIFdSSVRFIEZBSUxF RDogXGZfZXJybXNnKCkgOyBDaGVjawotICBmY2xvc2UgXCVjICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsgQ2xvc2UgdGhlIGZpbGUKLQotICAgUkVNRU1CRVI6IFVzaW5nIEZJTEUgU0VF SyB0byBtb3ZlIGJleW9uZCB0aGUgZW5kIG9mIGZpbGUgY2FuIHJlc3VsdCBpbgotICAgYSBmaWxl IHdpdGggaG9sZXMgd2hlbiB3cml0aW5nOyB3aGVuIHJlYWRpbmcsIGFuIGVuZC1vZi1maWxlIGVy cm9yIHdpbGwKLSAgIG9jY3VyIC0tIGJlIHN1cmUgdG8gY2hlY2sgZm9yIGl0LgotCi0xLjIyLjQu IENoYW5uZWwgTnVtYmVycwotCi0gICBDLUtlcm1pdCdzIGNoYW5uZWwgbnVtYmVycyBhcmUgaW50 ZWdlcnMgZnJvbSAwIHRvIHNvbWUKLSAgIHBsYXRmb3JtLWRlcGVuZGVudCBsaW1pdCwgc3VjaCBh cyA0NiBvciAxOTg1ICh0aGUgdmFsdWUgb2YgXHYoZl9tYXgpKS4KLSAgIFRoaXMgaXMgdGhlIGxp bWl0IHBsYWNlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB0aGUgbnVtYmVyIG9mIGZpbGVz Ci0gICB0aGF0IG1heSBiZSBvcGVuZWQgYnkgb25lIHByb2Nlc3Mgb3IgdXNlciBvciBqb2IsIG1p bnVzIHRoZSBzdGFuZGFyZAotICAgaW5wdXQsIG91dHB1dCwgYW5kIGVycm9yIGZpbGVzLCBhbmQg bWludXMgdGhlIG51bWJlciBvZiBmaWxlcyByZXNlcnZlZAotICAgYnkgQy1LZXJtaXQgZm9yIGxv Z3MsIE9QRU4gUkVBRCBhbmQgV1JJVEUsIGFuZCBmaWxlIHRyYW5zZmVyIChhbmQgbWF5YmUKLSAg IHNvbWUgY29tbWFuZCBmaWxlcyAtLSB0aGUgXHYoZl9tYXgpIG51bWJlciBjYW4ndCBiZSBleGFj dCkuCi0KLSAgIEFsdGhvdWdoIHlvdSBtdXN0IGluY2x1ZGUgYSB2YXJpYWJsZSBpbiB0aGUgRklM RSBPUEVOIGNvbW1hbmQsIHRvIHdoaWNoCi0gICB0aGUgY2hhbm5lbCBudW1iZXIgaXMgYXNzaWdu ZWQsIHlvdSBkb24ndCBoYXZlIHRvIHVzZSBhIHZhcmlhYmxlIGluIHRoZQotICAgb3RoZXIgRklM RSBjb21tYW5kcyBpZiB5b3Uga25vdyB3aGF0IHRoZSBudW1iZXIgaXMgLS0geW91IGNhbiBqdXN0 IHB1dAotICAgdGhlIG51bWJlci4gVGhpcyBzYXZlcyB5b3UgYSBmZXcga2V5c3Ryb2tlcyB3aGVu IHR5cGluZyBjb21tYW5kcyBhdCB0aGUKLSAgIHByb21wdDoKLQotICBmb3BlbiBcJWMgb29mYS50 eHQKLSAgZmxpc3QKLSAgMC4gL3Vzci9vbGdhLm9vZmEudHh0IChSKSAwCi0KLSAgIFRoaXMgdGVs bHMgdGhlIGNoYW5uZWwgbnVtYmVyIGlzIDAgKHRoZSBudW1iZXIgb24gdGhlIGxlZnQgaXMgdGhl Ci0gICBjaGFubmVsIGZpbGUncyBjaGFubmVsIG51bWJlcikuIE9mIGNvdXJzZSB5b3UgY2FuIGFs c28gZmluZCBpdCBieQotICAgZWNob2luZyB0aGUgdmFyaWFibGU6Ci0KLSAgZWNobyBcJWMKLSAg MAotCi0gICBPciB3aXRoICJmc3RhdHVzIFwlYyIuIE5vdyB5b3UgY2FuIHR5cGUgY29tbWFuZHMg bGlrZToKLQotICBmcmVhZCAwCi0KLSAgIHRvIHJlYWQgYSBsaW5lIGZyb20gdGhlIGZpbGUuIE9i dmlvdXNseSwgaG93ZXZlciwgdXNpbmcgZGlnaXRzIHJhdGhlcgotICAgdGhhbiBhIHZhcmlhYmxl IGZvciB0aGUgY2hhbm5lbCBudW1iZXIgd291bGQgYmUgcG9vciBwcmFjdGljZSBpbiBhCi0gICBz Y3JpcHQuCi0KLSAgIElmIGluIGNvbW1hbmRzIGxpa2U6Ci0KLSAgZnJlYWQgXCVjIFwlYQotCi0g ICB5b3UgaGF2ZSB0cm91YmxlIHJlbWVtYmVyaW5nIHdoaWNoIHZhcmlhYmxlIGlzIHdoaWNoLCBu b3RlIHRoYXQgdGhlCi0gICBjaGFubmVsIG51bWJlciBpcywgaW5kZWVkLCBhIG51bWJlci4gQW55 d2hlcmUgQy1LZXJtaXQgYWNjZXB0cyBhIG51bWJlcgotICAgaXQgY2FuIGFsc28gYWNjZXB0IGFu IGV4cHJlc3Npb24sIHNvIHlvdSBjYW4gcHV0IHBhcmVudGhlc2VzIGFyb3VuZCB0aGUKLSAgIGNo YW5uZWwgbnVtYmVyIHRvIHJlbWluZCB5b3UgaXQncyB0aGUgY2hhbm5lbCBudW1iZXIgYW5kIG5v dCB0aGUKLSAgIHZhcmlhYmxlIGludG8gd2hpY2ggZGF0YSBpcyB0byBiZSByZWFkOgotCi0gIGZy ZWFkIChcJWMpIFwlYQotCi0gICBOb3JtYWxseSBjaGFubmVsIG51bWJlcnMgYXJlIGFzc2lnbmVk IHNlcXVlbnRpYWxseSBhcyAwLCAxLCAyLCAuLi4gdXAKLSAgIHRvIHRoZSBsaW1pdC4gSG93ZXZl ciwgb25jZSB5b3Ugc3RhcnQgY2xvc2luZyBmaWxlcywgdGhlcmUgY2FuIGJlIGhvbGVzCi0gICBp biB0aGUgc2VxdWVuY2UuIE5ldyBjaGFubmVscyBhcmUgYXNzaWduZWQgdG8gZmlsbCBpbiB0aGUg aG9sZXMuIFRodXMKLSAgIHlvdSBjYW4ndCBkZXBlbmQgb24gY2hhbm5lbCBudW1iZXJzIGJlaW5n IGluIGFueSBwYXJ0aWN1bGFyIHNlcXVlbmNlLgotCi0xLjIyLjUuIEZJTEUgQ29tbWFuZCBFcnJv cnMKLQotICAgRWFjaCBGSUxFIGNvbW1hbmQgc2V0cyB0aGUgdmFyaWFibGUgXHYoZl9lcnJvcikg dG8gb25lIG9mIHRoZSBmb2xsb3dpbmcKLSAgIHZhbHVlczoKLQotICAgIDAgPSBObyBlcnJvcgot ICAgLTEgPSBTeXN0ZW0gZXJyb3IKLSAgIC0yID0gQXR0ZW1wdCB0byByZWFkIGFmdGVyIGVuZCBv ZiBmaWxlCi0gICAtMyA9IENoYW5uZWwgbm90IG9wZW4KLSAgIC00ID0gQ2hhbm5lbCBudW1iZXIg b3V0IG9mIHJhbmdlIChuZWdhdGl2ZSBvciB0b28gbGFyZ2UpCi0gICAtNSA9IE51bWVyaWMgYXJn dW1lbnQgKHNpemUsIC4uLikgb3V0IG9mIHJhbmdlCi0gICAtNiA9IEZpbGUgbm90IGZvdW5kCi0g ICAtNyA9IEJhZCBvciBtaXNzaW5nIGZpbGVuYW1lCi0gICAtOCA9IFRvbyBtYW55IGZpbGVzIGFy ZSBhbHJlYWR5IG9wZW4gKEZJTEUgT1BFTiBvbmx5KQotICAgLTkgPSBGb3JiaWRkZW4gb3BlcmF0 aW9uIChlLmcuIHdyaXRlIHRvIGEgcmVhZC1vbmx5IGZpbGUpCi0gIC0xMCA9IEFjY2VzcyBkZW5p ZWQKLSAgLTExID0gSWxsZWdhbCBjb21iaW5hdGlvbiBvZiBPUEVOIG1vZGVzIChGSUxFIE9QRU4g b25seSkKLSAgLTEyID0gQnVmZmVyIG92ZXJmbG93Ci0gIC0xMyA9IEN1cnJlbnQgbGluZSBudW1i ZXIgdW5rbm93biAoZm9yIHJlbGF0aXZlIGxpbmUgc2Vla3MpCi0gIC0xNCB0aHJvdWdoIC05ODog UmVzZXJ2ZWQuCi0gIC05OSA9IFJlcXVlc3RlZCBvcGVyYXRpb24gbm90IGltcGxlbWVudGVkIGlu IHRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdAotIC05OTkgPSBVbmtub3duIGVycm9yCi0KLSAgIFdo ZW4gXHYoZl9lcnJvcikgaXMgLTEsIHRoaXMgbWVhbnMgdGhlIEZJTEUgY29tbWFuZCBmYWlsZWQg YmVjYXVzZQotICAgYmVjYXVzZSBvZiBhIHN5c3RlbSBlcnJvciwgaW4gd2hpY2ggY2FzZSB5b3Ug Y2FuIGV4YW1pbmUgdGhlIGZvbGxvd2luZwotICAgdmFyaWFibGVzOgotCi0gIFx2KGVycm5vKSAg ICAgPSBTeXN0ZW0gZXJyb3IgbnVtYmVyLgotICBcdihlcnJzdHJpbmcpID0gRXJyb3IgbWVzc2Fn ZSBjb3JyZXNwb25kaW5nIHRvIFx2KGVycm5vKS4KLQotICAgQSBzcGVjaWFsIGZ1bmN0aW9uIGlz IGF2YWlsYWJsZSBmb3IgdHJhbnNsYXRpbmcgdGhlIFx2KGZfZXJyb3IpIGNvZGUgdG8KLSAgIGFu IGVycm9yIG1lc3NhZ2Ugc3RyaW5nOgotCi1cZl9lcnJtc2coW2NvZGVdKQotICBJZiB0aGUgY29k ZSBpcyAtMSwgcmV0dXJucyBlcnJvciBtZXNzYWdlIG9mIHRoZSBtb3N0IHJlY2VudCBzeXN0ZW0K LSAgZXJyb3I7IG90aGVyd2lzZSBpZiB0aGUgY29kZSBpcyBhIHZhbGlkIFx2KGZfZXJyb3IpIHZh bHVlLCB0aGUgYXNzb2NpYXRlZAotICBtZXNzYWdlIGlzIHJldHVybmVkLiAgSWYgdGhlIGNvZGUg aXMgb21pdHRlZCwgdGhlIHN0YXR1cyBtZXNzYWdlCi0gIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1 cnJlbnQgXHYoZl9lcnJvcikgdmFsdWUgaXMgcmV0dXJuZWQuCi0KLSAgIEEgRklMRSBjb21tYW5k IHRoYXQgZmFpbHMgcHJpbnRzIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlCi0gICBhdXRv bWF0aWNhbGx5LCBleGNlcHQgd2hlbiB0aGUgY29tbWFuZCBpcyBSRUFEIG9yIFNFRUsgYW5kIHRo ZSBlcnJvciBpcwotICAgLTIgKGVuZCBvZiBmaWxlKTsgaW4gdGhhdCBjYXNlLCB0aGUgY29tbWFu ZCBzdGlsbCBmYWlscywgYnV0IGRvZXMgbm90Ci0gICBwcmludCBhIG1lc3NhZ2UuIFRoaXMgYWxs b3dzIGNvbnN0cnVjdGlvbnMgc3VjaCBhczoKLQotICBmb3BlbiBcJWMgb29mYS50eHQKLSAgd2hp bGUgc3VjY2VzcyB7IGZyZWFkIFwlYyB9Ci0gIGZjbG9zZSBcJWMKLQotICAgdG8gd29yayBhcyBl eHBlY3RlZCwgaS5lLiB3aXRob3V0IGFuIGFubm95aW5nIG1lc3NhZ2Ugd2hlbiB0aGUgZW5kIG9m Ci0gICBmaWxlIGlzIHJlYWNoZWQuCi0KLTEuMjIuNi4gRmlsZSBJL08gVmFyaWFibGVzCi0KLSAg IFRoZSB2YXJpYWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlIGkvbyBwYWNrYWdlIGFyZToK LQotICAgXHYoZl9jb3VudCkKLSAgICAgICAgICBSZXN1bHQgb2YgdGhlIG1vc3QgcmVjZW50IEZJ TEUgQ09VTlQgKEZDT1VOVCkgY29tbWFuZC4KLQotICAgXHYoZl9lcnJvcikKLSAgICAgICAgICBO dW1lcmljIGVycm9yIGNvZGUgb2YgbW9zdCByZWNlbnQgRklMRSBjb21tYW5kICgwID0gbm8gZXJy b3IpLgotCi0gICBcdihmX21heCkKLSAgICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBmaWxlcyBv cGVuIHNpbXVsdGFuZW91c2x5LgotCi0xLjIyLjcuIEZpbGUgSS9PIEZ1bmN0aW9ucwotCi0gICBT b21lIG9mIHRoZSBGSUxFIGNvbW1hbmRzIGNhbiBhbHNvIGJlIGlzc3VlZCBhcyBmdW5jdGlvbiBj YWxscywgd2hpY2gKLSAgIG1ha2VzIHNjcmlwdCB3cml0aW5nIGEgYml0IG1vcmUgY29udmVuaWVu dCwgZXNwZWNpYWxseSBmb3IgQwotICAgcHJvZ3JhbW1lcnMuIEFsc28sIHNldmVyYWwgZnVuY3Rp b25zIGFyZSBwcm92aWRlZCB0aGF0IGRvIG5vdCBoYXZlCi0gICBjb21tYW5kIGVxdWl2YWxlbnRz LiBFYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyB0YWtlcyBhIGNoYW5uZWwgbnVtYmVyIGFzCi0gICB0 aGUgZmlyc3QgYXJndW1lbnQuIFRoZXNlIGZ1bmN0aW9ucyBkbyBub3Qgd29yayBmb3IgT1BFTiB7 IFJFQUQsICFSRUFELAotICAgV1JJVEUsICFXUklURSwgYW5kIEFQUEVORCB9IGZpbGVzLgotCi0g ICBcZl9zdGF0dXMoY2hhbm5lbCkKLSAgICAgICAgICBSZXR1cm5zIDAgaWYgdGhlIGNoYW5uZWwg aXMgbm90IG9wZW4sIG90aGVyd2lzZSBhIG51bWJlciBiZXR3ZWVuCi0gICAgICAgICAgMSBhbmQg MTUgd2hpY2ggaXMgdGhlIHN1bSBvZiB0aGUgT1BFTiBtb2RlczoKLQotICAxID0gL1JFQUQKLSAg MiA9IC9XUklURQotICA0ID0gL0FQUEVORAotICA4ID0gL0JJTkFSWQotCi0gICBUaGUgcmVtYWlu aW5nIGZ1bmN0aW9ucyB3b3JrIG9ubHkgZm9yIG9wZW4gY2hhbm5lbHMuIEVhY2ggb2YgdGhlc2UK LSAgIGZ1bmN0aW9ucyBjYW4gZmFpbCBmb3IgdGhlIGFwcGxpY2FibGUgcmVhc29ucyBsaXN0ZWQg aW4gWzM4N11TZWN0aW9uCi0gICAxLjIyLjUuIEZvciBpbnN0cnVjdGlvbnMgb24gaGFuZGxpbmcg ZnVuY3Rpb24gZXJyb3JzLCBzZWUgWzM4OF1TZWN0aW9uCi0gICA3LjEyLgotCi0gICBcZl9wb3Mo Y2hhbm5lbCkKLSAgICAgICAgICBSZXR1cm5zIHRoZSBmaWxlJ3MgY3VycmVudCByZWFkL3dyaXRl IHBvaW50ZXIgKDAtYmFzZWQpLiBUaGVyZQotICAgICAgICAgIGlzIG5vIEZJTEUgY29tbWFuZCBl cXVpdmFsZW50LgotCi0gICBcZl9saW5lKGNoYW5uZWwpCi0gICAgICAgICAgUmV0dXJucyB0aGUg ZmlsZSdzIGN1cnJlbnQgbGluZSBudW1iZXIgKDAtYmFzZWQpLCBpZiBrbm93biwKLSAgICAgICAg ICBvdGhlcndpc2UgLTEuIFRoZXJlIGlzIG5vIEZJTEUgY29tbWFuZCBlcXVpdmFsZW50LiBUaGUg bGluZQotICAgICAgICAgIG51bWJlciBpcyBrbm93biBhcyBsb25nIGFzIG5vIGNoYXJhY3RlciBv ciBibG9jayBpL28gaGFzIGJlZW4KLSAgICAgICAgICBkb25lIG9uIHRoZSBjaGFubmVsLgotCi0g ICBcZl9oYW5kbGUoY2hhbm5lbCkKLSAgICAgICAgICBSZXR1cm5zIHRoZSAiZmlsZSBoYW5kbGUi IG9mIHRoZSBmaWxlLiBUaGF0IGlzLCBpdCB0cmFuc2xhdGVzCi0gICAgICAgICAgdGhlIHBvcnRh YmxlIEMtS2VybWl0IGNoYW5uZWwgbnVtYmVyIGludG8gYSBzeXN0ZW0tc3BlY2lmaWMgZmlsZQot ICAgICAgICAgIGhhbmRsZSBvciBudW1iZXIgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIG90aGVyIHBy b2dyYW1zIG9uIHRoZQotICAgICAgICAgIHNhbWUgcGxhdGZvcm0uIEluIFVOSVggdGhpcyBpcyBh IGZpbGUgZGVzY3JpcHRvci4gVGhlcmUgaXMgbm8KLSAgICAgICAgICBGSUxFIGNvbW1hbmQgZXF1 aXZhbGVudC4KLQotICAgXGZfZW9mKGNoYW5uZWwpCi0gICAgICAgICAgUmV0dXJucyAxIGlmIHRo ZSByZWFkL3dyaXRlIHBvaW50ZXIgb2YgdGhlIGZpbGUgb24gdGhlIGdpdmVuCi0gICAgICAgICAg Y2hhbm5lbCBpcyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLCAwIG90aGVyd2lzZS4gQ29udmVuaWVu dCBpbgotICAgICAgICAgIFdISUxFIHN0YXRlbWVudHMsIGUuZy46Ci0KLSAgICB3aGlsZSBub3Qg XGZfZW9mKFwlYykgeyBmcmVhZCBcJWMgfQotCi0gICBcZl9nZXRjaGFyKGNoYW5uZWwpCi0gICAg ICAgICAgRXF1aXZhbGVudCB0byBGUkVBRCAvQ0hBUi4gUmV0dXJucyB0aGUgY2hhcmFjdGVyIGFj dHVhbGx5IHJlYWQuCi0gICAgICAgICAgSWYgXGZfZ2V0Y2hhcigpIGRvZXMgbm90IGZhaWwgYnV0 IHRoZSByZXR1cm4gdmFsdWUgaXMgZW1wdHksCi0gICAgICAgICAgdGhpcyBtZWFucyBhIE5VTEwg Y2hhcmFjdGVyIHdhcyByZWFkLgotCi0gICBcZl9nZXRsaW5lKGNoYW5uZWwpCi0gICAgICAgICAg RXF1aXZhbGVudCB0byBGUkVBRCAvTElORS4gUmV0dXJucyB0aGUgbGluZSBhY3R1YWxseSByZWFk LCBidXQKLSAgICAgICAgICB3aXRoIHRoZSBsaW5lIHRlcm1pbmF0b3Igc3RyaXBwZWQuIElmIFxm X2dldGxpbmUoKSBkb2VzIG5vdCBmYWlsCi0gICAgICAgICAgYnV0IHRoZSByZXR1cm4gdmFsdWUg aXMgZW1wdHksIHRoaXMgbm9ybWFsbHkgbWVhbnMgYW4gZW1wdHkgbGluZQotICAgICAgICAgIHdh cyByZWFkLgotCi0gICBcZl9nZXRibG9jayhjaGFubmVsLG4pCi0gICAgICAgICAgRXF1aXZhbGVu dCB0byBGUkVBRCAvU0laRTpuLiBSZXR1cm5zIHRoZSBibG9jayBvZiBjaGFyYWN0ZXJzCi0gICAg ICAgICAgYWN0dWFsbHkgcmVhZC4gSWYgdGhlIHJldHVybmVkIGJsb2NrIGlzIHNtYWxsZXIgdGhh biBuLCBpdAotICAgICAgICAgIGluZGljYXRlcyBlaXRoZXIgdGhhdCB0aGUgZW5kIG9mIGZpbGUg d2FzIHJlYWNoZWQgb3IgYSBOVUwKLSAgICAgICAgICBjaGFyYWN0ZXIgaXMgaW4gdGhlIGJsb2Nr LgotCi0gICBcZl9wdXRjaGFyKGNoYW5uZWwsYykKLSAgICAgICAgICBFcXVpdmFsZW50IHRvIEZX UklURSAvQ0hBUkFDVEVSLiBXcml0ZXMgdGhlIGNoYXJhY3RlciBjLiBJZiBjCi0gICAgICAgICAg Y29udGFpbnMgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIsIG9ubHkgdGhlIGZpcnN0IGlzIHdyaXR0 ZW4uIElmCi0gICAgICAgICAgYyBpcyBlbXB0eSBhIE5VTCBpcyB3cml0dGVuLiBSZXR1cm5zIHRo ZSBudW1iZXIgb2YgY2hhcmFjdGVycwotICAgICAgICAgIHdyaXR0ZW4gb24gc3VjY2Vzcywgb3Ig YSBuZWdhdGl2ZSBlcnJvciBjb2RlIHVwb24gZmFpbHVyZS4KLQotICAgXGZfcHV0bGluZShjaGFu bmVsLHN0cmluZykKLSAgICAgICAgICBFcXVpdmFsZW50IHRvIEZXUklURSAvTElORS4gV3JpdGVz IHRoZSBzdHJpbmcgYW5kIGFkZHMgdGhlCi0gICAgICAgICAgYXBwcm9wcmlhdGUgbGluZSB0ZXJt aW5hdGlvbiBjaGFyYWN0ZXIgb3Igc2VxdWVuY2UuIElmIHRoZQotICAgICAgICAgIHN0cmluZyBp cyBlbXB0eSBvciBvbWl0dGVkLCBhbiBlbXB0eSBsaW5lIGlzIHdyaXR0ZW4uIFJldHVybnMKLSAg ICAgICAgICB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiBvbiBzdWNjZXNzLCBvciBh IG5lZ2F0aXZlIGVycm9yCi0gICAgICAgICAgY29kZSB1cG9uIGZhaWx1cmUuCi0KLSAgIFxmX3B1 dGJsb2NrKGNoYW5uZWwsc3RyaW5nKQotICAgICAgICAgIEVxdWl2YWxlbnQgdG8gRldSSVRFIC9T VFJJTkcuIFdyaXRlcyB0aGUgc3RyaW5nIGFzIGdpdmVuLiBJZiB0aGUKLSAgICAgICAgICBzdHJp bmcgaXMgZW1wdHkgb3Igb21pdHRlZCwgbm90aGluZyBpcyB3cml0dGVuLiBSZXR1cm5zIHRoZQot ICAgICAgICAgIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gb24gc3VjY2Vzcywgb3IgYSBu ZWdhdGl2ZSBlcnJvcgotICAgICAgICAgIGNvZGUgdXBvbiBmYWlsdXJlLgotCi0xLjIyLjguIEZp bGUgSS9PIEZ1bmN0aW9uIEV4YW1wbGVzCi0KLSAgZm9wZW4gL3JlYWQgXCVjIG9vZmEudHh0ICAg ICAgICAgICAgOyBPcGVuIG91ciBmYXZvcml0ZSBmaWxlIGZvciByZWFkaW5nCi0gIGlmIGZhaWx1 cmUgZXhpdCAxICAgICAgICAgICAgICAgICAgIDsgQ2hlY2sgdGhhdCBpdCdzIG9wZW4KLSAgd2hp bGUgbm90IFxmX2VvZihcJWMpIHsgICAgICAgICAgICAgOyBMb29wIHVudGlsIEVPRgotICAgICAg LmxpbmUgOj0gXGZfZ2V0bGluZShcJWMpICAgICAgICA7IEdldCBhIGxpbmUKLSAgICAgIGlmIHN1 Y2Nlc3MgZWNobyB7XG0obGluZSl9ICAgICAgOyBFY2hvIGl0Ci0gIH0KLSAgaWYgbm90IFxmX2Vv ZihcJWMpIHsgICAgICAgICAgICAgICAgOyBDaGVjayByZWFzb24gZm9yIGxvb3AgZXhpdAotICAg ICAgZXhpdCAxIEZpbGUgRXJyb3I6IFxmX2Vycm1zZygpICA7IElmIG5vdCBFT0Ygc2F5IHNvLgot ICB9Ci0KLSAgZnJld2luZCBcJWMgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXdpbmQgdGhl IGZpbGUKLSAgd2hpbGUgbm90IFxmX2VvZihcJWMpIHsgICAgICAgICAgICAgOyBTYW1lIHRoaW5n IGJ1dCB3aXRoIGJsb2NrIGkvbwotICAgICAgLmJsb2NrIDo9IFxmX2dldGJsb2NrKFwlYywyNTYp ICA7IChtdWNoIGZhc3RlciB0aGFuIGxpbmUgaS9vKQotICAgICAgaWYgc3VjY2VzcyB4ZWNobyB7 XG0oYmxvY2spfQotICB9Ci0KLSAgZnJld2luZCBcJWMgICAgICAgICAgICAgICAgICAgICAgICAg OyBSZXdpbmQgYWdhaW4KLSAgd2hpbGUgbm90IFxmX2VvZihcJWMpIHsgICAgICAgICAgICAgOyBT YW1lIGRlYWwgYnV0IHdpdGggY2hhcmFjdGVyIGkvbwotICAgICAgLmMgOj0gXGZfZ2V0Y2hhcihc JWMpICAgICAgICAgICA7IChtdWNoIHNsb3dlciB0aGFuIGxpbmUgaS9vKQotICAgICAgaWYgc3Vj Y2VzcyB4ZWNobyB7XG0oYyl9Ci0gIH0KLSAgY2xvc2UgXCVjCi0KLSAgIFRvIGNsb3NlIGFsbCBv cGVuIGZpbGVzIChlcXVpdmFsZW50IHRvIEZDTE9TRSBBTEwpOgotCi0gIGZvciBcJWkgMCBcdihm X21heCktMSAxIHsKLSAgICAgIGlmIFxmX3N0YXR1cyhcJWkpIGZjbG9zZSBcJWkKLSAgfQotCi0x LjIzLiBUaGUgRVhFQyBDb21tYW5kCi0KLSAgIFRoZSBFWEVDIGNvbW1hbmQgaXMgYXZhaWxhYmxl IG9ubHkgaW4gVU5JWC4KLQotICAgRVhFQyBbIC9SRURJUkVDVCBdIGNvbW1hbmQgWyBhcmcxIFsg YXJnMiBbIC4uLiBdIF0KLSAgICAgICAgICBSdW5zIHRoZSBnaXZlbiBjb21tYW5kIHdpdGggdGhl IGFyZ3VtZW50cyBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlCi0gICAgICAgICAgY29tbWFuZCByZXBs YWNlcyBDLUtlcm1pdCBpbiBtZW1vcnksIGFuZCBDLUtlcm1pdCBjZWFzZXMgdG8KLSAgICAgICAg ICBleGVjdXRlLiBFWEVDIGlzIGxpa2UgUlVOLCBleGNlcHQgaW5zdGVhZCBvZiByZXR1cm5pbmcg dG8KLSAgICAgICAgICBDLUtlcm1pdCB3aGVuIGZpbmlzaGVkLCB0aGUgY29tbWFuZCByZXR1cm5z IHRvIHdoYXRldmVyIHByb2Nlc3MKLSAgICAgICAgICBpbnZva2VkIEtlcm1pdC4KLQotICAgSW4g dGhlIG5vcm1hbCBjYXNlLCBubyBmaWxlcyBhcmUgY2xvc2VkLCBzbyB0aGUgRVhFQydkIGNvbW1h bmQgaW5oZXJpdHMKLSAgIHRoZSBvcGVuIGZpbGVzLCByZWFkL3dyaXRlIHBvaW50ZXJzLCB3b3Jr aW5nIGRpcmVjdG9yeSwgcHJvY2VzcyBJRCwKLSAgIHVzZXIgSUQgKHVubGVzcyBjb21tYW5kIGlz IFNVSUQpLCBncm91cCBJRCAodW5sZXNzIGNvbW1hbmQgaXMgU0dJRCksCi0gICBncm91cHMsIGV0 Yy4gKEluIFVOSVgsIHRoZSBFWEVDIGNvbW1hbmQgaXMgc2ltcGx5IGEgZnJvbnQgZW5kIGZvcgot ICAgZXhlY3ZwKCkuKQotCi0gICBJZiB0aGUgL1JFRElSRUNUIHN3aXRjaCBpcyBpbmNsdWRlZCwg dGhlbiBpZiBhIGNvbm5lY3Rpb24gaXMgb3BlbiAoU0VUCi0gICBMSU5FIG9yIFNFVCBIT1NUKSwg aXQgYmVjb21lcyB0aGUgc3RhbmRhcmQgaW5wdXQgYW5kIG91dHB1dCBvZiB0aGUKLSAgIEVYRUMn ZCBwcm9ncmFtLiBJZiBubyBjb25uZWN0aW9uIGlzIG9wZW4sIHRoZSAvUkVESVJFQ1Qgc3dpdGNo IGhhcyBubwotICAgZWZmZWN0LiBGb3IgZXhhbXBsZSB0byB1c2UgQy1LZXJtaXQgZm9yIFBQUCBk aWFsaW5nIGluIExpbnV4OgotCi0gIHNldCBtb2RlbSB0eXBlIHVzciAgICAgICAgICA7IFNwZWNp ZnkgdGhlIGtpbmQgb2YgbW9kZW0geW91IGhhdmUKLSAgc2V0IGxpbmUgL2Rldi90dHlTMSAgICAg ICAgIDsgU3BlY2lmeSB0aGUgZGV2aWNlIGl0J3MgY29ubmVjdGVkIHRvCi0gIHNldCBzcGVlZCA1 NzYwMCAgICAgICAgICAgICA7IGFuZCB0aGUgc3BlZWQKLSAgc2V0IGZsb3cgcnRzL2N0cyAgICAg ICAgICAgIDsgYW5kIGZsb3cgY29udHJvbC4KLSAgc2V0IGRpYWwgcmV0cmllcyAxMDAgICAgICAg IDsgVHJ5IHRoZSBkaWFsIHNlcXVlbmNlIHVwIHRvIDEwMCB0aW1lcy4KLSAgZGlhbCB7ezktMjEy LTU1NS0xMjEyfXs5LTIxMi01NTUtMTIxM317OS0yMTItNTU1LTEyMTR9ezktMjEyLTU1NS0xMjE1 fX0KLSAgaWYgZmFpbCBleGl0IDEKLSAgZm9yIFwlaSAxIDE2IDEgeyAgICAgICAgICAgIDsgVHJ5 IHVwIHRvIDE2IHRpbWVzIHRvIGdldCBsb2dpbiBwcm9tcHQKLSAgICAgIGlucHV0IDEwIExvZ2lu OiAgICAgICAgIDsgV2FpdCAxMCBzZWMgZm9yIGl0IHRvIGFwcGVhcgotICAgICAgaWYgc3VjY2Vz cyBicmVhayAgICAgICAgOyBHb3QgaXQgLSBwcm9jZWVkLi4uCi0gICAgICBvdXRwdXQgXDEzICAg ICAgICAgICAgICA7IFNlbmQgYSBjYXJyaWFnZSByZXR1cm4gYW5kIHRyeSBhZ2FpbgotICB9Ci0g IGlmICggPiBcJWkgMTYgKSBzdG9wIDEgTk8gTE9HSU4gUFJPTVBUCi0gIGxpbmVvdXQgXChteXVz ZXJpZCkgICAgICAgICA7IFNlbmQgdXNlciBJRAotICBpbnB1dCAzMCBhc3N3b3JkOiAgICAgICAg ICAgOyBXYWl0IGZvciBQYXNzd29yZCBwcm9tcHQKLSAgaWYgZmFpbCBzdG9wIDEgTk8gUEFTU1dP UkQgUFJPTVBUCi0gIGxpbmVvdXQgXG0obXlwYXNzd29yZCkgICAgICA7IFNlbmQgdGhlIHBhc3N3 b3JkLgotICBleGVjIC9yZWRpcmVjdCBwcHBkICAgICAgICAgOyBSZXBsYWNlIG91cnNlbHZlcyB3 aXRoIHBwcGQuCi0KLSAgIEluIHRoaXMgZXhhbXBsZSB3ZSBhc3N1bWUgdGhhdCB0aGUgc2NyaXB0 IGhhcyBhbHJlYWR5IHNldCB1cCB0aGUKLSAgIG15dXNlcmlkIGFuZCBteXBhc3N3b3JkIHZhcmlh YmxlcyAtLSBub3JtYWxseSB0aGUgcGFzc3dvcmQgc2hvdWxkIGJlCi0gICBwcm9tcHRlZCBmb3Is IHJhdGhlciB0aGFuIHN0b3JlZCBvbiBkaXNrLiBOb3RpY2UgdGhlIGFkdmFudGFnZXMgb3Zlcgot ICAgdGhlIHdlbGwta25vd24gImNoYXQgc2NyaXB0IjoKLSAgICAgKiBZb3UgZG9uJ3QgaGF2ZSB0 byBjb250cm9sIHRoZSBtb2RlbSBpdHNlbGYgd2l0aCBBVCBjb21tYW5kczsKLSAgICAgICBLZXJt aXQncyBESUFMIGNvbW1hbmQgZG9lcyB0aGlzIGZvciB5b3UuCi0gICAgICogWW91IGNhbiBoYXZl IEtlcm1pdCBhdXRvbWF0aWNhbGx5IHJlZGlhbCBhcyBtYW55IHRpbWVzIGFzIHlvdSB3YW50Ci0g ICAgICAgdW50aWwgaXQgZ2V0cyBhIGNvbm5lY3Rpb24gKGlmIHRoaXMgaXMgbGVnYWwgaW4geW91 ciBjb3VudHJ5KS4KLSAgICAgKiBZb3UgY2FuIGhhdmUgS2VybWl0IGZldGNoIHRoZSBudW1iZXIg b3IgbnVtYmVycyBmcm9tIGEgZGlhbGluZwotICAgICAgIGRpcmVjdG9yeS4KLSAgICAgKiBZb3Ug Y2FuIGhhdmUgS2VybWl0IGN5Y2xlIHRocm91Z2ggYSBsaXN0IG9mIHBob25lIG51bWJlcnMgKHRo aXMgaXMKLSAgICAgICBuZXcgaW4gQy1LZXJtaXQgNy4wOyBzZWUgWzM4OV1TZWN0aW9uIDIuMS4x Nikgd2l0aG91dCBoYXZpbmcgdG8KLSAgICAgICBlbnRlciB0aGUgbnVtYmVycyBpbiBhIGRpYWxp bmcgZGlyZWN0b3J5LgotICAgICAqIERpYWxpbmcgaXMgbG9jYXRpb24taW5kZXBlbmRlbnQ7IHlv dSBjYW4gdXNlIHRoZSBzYW1lIHNjcmlwdCB0bwotICAgICAgIGRpYWwgZnJvbSBkaWZmZXJlbnQg YXJlYXMgb3IgY291bnRyaWVzLgotICAgICAqIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgbWFkZSwg dGhlIGZ1bGwgcG93ZXIgb2YgS2VybWl0J3Mgc2NyaXB0Ci0gICAgICAgbGFuZ3VhZ2UgaXMgYXZh aWxhYmxlIHRvIG1hbmFnZSB0aGUgZGlhbG9nIHdpdGggdGhlIHRlcm1pbmFsIHNlcnZlcgotICAg ICAgIG9yIG90aGVyIGRldmljZSB0aGF0IGFuc3dlcnMgdGhlIHBob25lIGNhbGwuCi0KLSAgIE5P VEU6IFBQUCBhbmQgU0xJUCBkaWFsaW5nIGFyZSBub3QgYXZhaWxhYmxlIGluIFdpbmRvd3MgOTUv OTgvTlQvMjAwMCwKLSAgIHdob3NlIEFQSXMgZG8gbm90IHByb3ZpZGUgYSBtZXRob2QgZm9yIGFu IGFwcGxpY2F0aW9uIHRvIGhhbmQgb3ZlciBhCi0gICBjb25uZWN0aW9uIHRvIHRoZSBQUFAgb3Ig U0xJUCBkcml2ZXIuCi0KLTEuMjQuIEdldHRpbmcgS2V5d29yZCBMaXN0cyB3aXRoICc/JwotCi0g ICBTdXBwb3NlIHlvdSB0eXBlICJ0ZSIgYXQgdGhlIEMtS2VybWl0PiA2LjAgcHJvbXB0IGFuZCB0 aGVuIEVzYyBvciBUYWIKLSAgIHRvIHJlcXVlc3Qga2V5d29yZCBjb21wbGV0aW9uLiBLZXJtaXQg YmVlcHMsIGluZGljYXRpbmcgdGhhdCBtb3JlIHRoYW4KLSAgIG9uZSBjb21tYW5kIHN0YXJ0cyB3 aXRoICJ0ZSIuIEJ1dCBpZiB5b3UgdHlwZSAnPycgdG8gc2VlIHdoYXQgdGhleSBhcmUsCi0gICBL ZXJtaXQgc2hvd3Mgb25seSAidGVsbmV0Ii4gU28gd2h5IHRoZSBiZWVwPyBCZWNhdXNlIG9mIGlu dmlzaWJsZQotICAga2V5d29yZHMgbGlrZSAidGVsb3B0IiwgInRlcm1pbmFsIiwgYW5kICJ0ZXh0 Ii4gTG90cyBvZiBrZXl3b3JkcyBhcmUKLSAgIGludmlzaWJsZSBiZWNhdXNlIHRoZXkgYXJlIGVp dGhlciBzeW5vbnltcyBmb3Igb3RoZXIga2V5d29yZHMgb3IgZWxzZQotICAgZXNvdGVyaWMgb3B0 aW9ucyB0byBiZSB1c2VkIG9ubHkgaW4gc3BlY2lhbCBjaXJjdW1zdGFuY2VzLCBzbyB3ZSBkb24n dAotICAgd2FudCB0aGVtIGNsdXR0ZXJpbmcgdXAgdGhlIG1lbnVzLgotCi0gICBCdXQgdGhlbiB0 aGVyZSBpcyBubyB3YXkgZm9yIHlvdSB0byBkaXNjb3ZlciB0aGVtLiBTbyBpbiBDLUtlcm1pdCA3 LjAsCi0gICBpZiB5b3UgdHlwZSAnPycgQUZURVIgdGhlIGJlZ2lubmluZyBvZiBhIGtleXdvcmQg ZmllbGQsIHRoZW4gaW52aXNpYmxlCi0gICBrZXl3b3JkcyBhcmUgc2hvd24gdG9vOgotCi0gIEMt S2VybWl0PiB0ZTxFc2M+PEJFRVA+Ci0gIEMtS2VybWl0PiB0ZT8gQ29tbWFuZCwgb25lIG9mIHRo ZSBmb2xsb3dpbmc6Ci0gICB0ZWxuZXQgICAgdGVsb3B0ICAgIHRlcm1pbmFsICB0ZXh0Ci0gIEMt S2VybWl0PnRlCi0KLSAgIEJ1dCBpZiAnPycgaXMgdHlwZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBh IGZpZWxkLCBvbmx5IHZpc2libGUga2V5d29yZHMKLSAgIGFyZSBzaG93biwgYXMgYmVmb3JlIChz bywgaW4gdGhpcyBleGFtcGxlLCBpZiAnPycgaXMgdHlwZWQgYXQgdGhlCi0gICBDLUtlcm1pdD4g cHJvbXB0LCAidGVsbmV0IiBpcyB0aGUgb25seSBjb21tYW5kIHNob3duIHRoYXQgc3RhcnRzIHdp dGgKLSAgICJ0ZSIpLgotCi0yLiBNQUtJTkcgQU5EIFVTSU5HIENPTk5FQ1RJT05TIFRoZSBTRVQg TElORSwgU0VUIEhPU1QsIGFuZCBTRVQgUE9SVCAoYQotc3lub255bSBmb3IgU0VUIExJTkUpIGNv bW1hbmRzIGhhdmUgbmV3IHN5bm9ueW1zLCBpbiB3aGljaCB0aGUgd29yZCBTRVQgaXMKLXJlcGxh Y2VkIGJ5IHRoZSB3b3JkIE9QRU46IE9QRU4gTElORSwgZXRjLiBUaGVyZSBpcyBubyBuZXcgZnVu Y3Rpb25hbGl0eQotaGVyZSwgYnV0IE9QRU4gaXMgYSBiZXR0ZXIgdmVyYiwgc2luY2UgU0VUIGdl bmVyYWxseSB0YWtlcyBubyBhY3Rpb24sIHdoZXJlYXMKLXRoZXNlIGNvbW1hbmRzIGFjdHVhbGx5 IHRyeSB0byBvcGVuIGEgY29ubmVjdGlvbi4gRnVydGhlcm1vcmUsIHRoZXJlIGlzIHRoZQotc3lt bWV0cnkgd2l0aCBDTE9TRS4gMi4wLiBTRVQgTElORSBhbmQgU0VUIEhPU1QgQ29tbWFuZCBTd2l0 Y2hlc1RoZSBTRVQgTElORQotKFNFVCBQT1JUKSBhbmQgU0VUIEhPU1QgY29tbWFuZHMgbm93IGFs bG93IHN3aXRjaGVzIGJlZm9yZSB0aGUgZGV2aWNlIG9yIGhvc3QKLW5hbWUsIGluIG1vc3QgY2Fz ZXMsIGFuZCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsIGFsc28gYXQgdGhlIGVuZC4gVGhl Ci1uZXcgc3ludGF4IGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggdGhlIHByZXZpb3VzIHN5 bnRheDsgdGh1cyBTRVQgTElORSwKLVNFVCBQT1JULCBhbmQgU0VUIEhPU1QgY29tbWFuZHMgaW4g Y29tbWFuZCBmaWxlcyB3cml0dGVuIGZvciBDLUtlcm1pdCA2LjAgb3IKLWVhcmxpZXIgc3RpbGwg d29yay4gVGhlIGV4cGFuZGVkIHN5bnRheCBpczoKLQoteyBPUEVOLCBTRVQgfSB7IExJTkUsIFBP UlQsIEhPU1QgfSBbIHN3aXRjaGVzIF0gZGV2aWNlLW9yLWFkZHJlc3MgWyBzd2l0Y2hlcwotXQot Ci1UaGUgZmlyc3QgZ3JvdXAgb2Ygc3dpdGNoZXMgaXM6Ci0KLSAgIC9ORVRXT1JLLVRZUEU6e1RD UC9JUCxYLjI1LFBJUEUsUFRZLi4ufQotICAgICAgICAgIFdoZW4gbW9yZSB0aGFuIG9uZSBuZXR3 b3JrIHR5cGUgaXMgYXZhaWxhYmxlLCB0aGlzIGxldHMgeW91Ci0gICAgICAgICAgc3BlY2lmeSB0 aGUgdHlwZSBvZiBuZXR3b3JrIHRvIHVzZSBmb3IgdGhpcyBjb25uZWN0aW9uIHdpdGhvdXQKLSAg ICAgICAgICBhZmZlY3RpbmcgeW91ciBnbG9iYWwgU0VUIE5FVFdPUksgVFlQRS4gU2VlIFszOTBd U2VjdGlvbiAyLjcKLSAgICAgICAgICBhYm91dCBwaXBlcyBhbmQgcHR5cy4KLQotICAgL1VTRVJJ RDpbc3RyaW5nXQotICAgICAgICAgIFRoaXMgc3dpdGNoIGlzIGVxdWl2YWxlbnQgdG8gU0VUIExP R0lOIFVTRVJJRC4gSWYgYSBzdHJpbmcgaXMKLSAgICAgICAgICBnaXZlbiwgaXQgc2VudCB0byBo b3N0IGR1cmluZyBUZWxuZXQgbmVnb3RpYXRpb25zOyBpZiB0aGlzCi0gICAgICAgICAgc3dpdGNo IGlzIGdpdmVuIGJ1dCB0aGUgc3RyaW5nIGlzIG9taXR0ZWQsIG5vIHVzZXIgSUQgaXMgc2VudCB0 bwotICAgICAgICAgIHRoZSBob3N0LiBJZiB0aGlzIHN3aXRjaCBpcyBub3QgZ2l2ZW4sIHlvdXIg Y3VycmVudCBMT0dJTiBVU0VSSUQKLSAgICAgICAgICAoXHYodXNlcmlkKSB2YWx1ZSksIGlmIGFu eSwgaXMgc2VudC4gVW5saWtlIG1vc3Qgb3RoZXIgc3dpdGNoZXMsCi0gICAgICAgICAgdGhpcyBv bmUgaXMgInN0aWNreSIsIHNpbmNlIHRoZSB2YWx1ZSBtdXN0IHBlcnNpc3QgdGhyb3VnaG91dAot ICAgICAgICAgIHRoZSBzZXNzaW9uIGluIGNhc2UgdGhlIHNlcnZlciByZXF1ZXN0cyB0aGUgSUQg c3RyaW5nIGF0IGEgbGF0ZXIKLSAgICAgICAgICB0aW1lLgotCi0gICAvQ09OTkVDVAotICAgICAg ICAgIEVudGVyIENPTk5FQ1QgbW9kZSBpbW1lZGlhdGVseSBhbmQgYXV0b21hdGljYWxseSBhZnRl ciB0aGUKLSAgICAgICAgICBkZXZpY2Ugb3IgY29ubmVjdGlvbiBpcyBvcGVuLiBPbiBzZXJpYWwg ZGV2aWNlcywgaG93ZXZlciwgd2hlbgotICAgICAgICAgIENBUlJJRVItV0FUQ0ggaXMgbm90IE9G Riwgd2FpdCB1cCB0byAxIHNlY29uZCBmb3IgdGhlIENhcnJpZXIKLSAgICAgICAgICBEZXRlY3Qg c2lnbmFsIHRvIGFwcGVhciBiZWZvcmUgdHJ5aW5nIHRvIGNvbm5lY3QsIHRvIGdpdmUgdGhlCi0g ICAgICAgICAgZGV2aWNlIHRpbWUgdG8gcmVhY3QgRFRSLCB3aGljaCBtaWdodCBoYXZlIGJlZW4g b2ZmIHByaW9yIHRvCi0gICAgICAgICAgb3BlbmluZyB0aGUgZGV2aWNlLgotCi0gICAvU0VSVkVS Ci0gICAgICAgICAgRW50ZXIgc2VydmVyIG1vZGUgaW1tZWRpYXRlbHkgYW5kIGF1dG9tYXRpY2Fs bHkgYWZ0ZXIgdGhlIGRldmljZQotICAgICAgICAgIG9yIGNvbm5lY3Rpb24gaXMgb3Blbi4gVHJl YXRtZW50IG9mIGNhcnJpZXIgaXMgdGhlIHNhbWUgYXMgZm9yCi0gICAgICAgICAgL0NPTk5FQ1Qu Ci0KLSAgIC9XQUlUCi0gICAvTk9XQUlUCi0gICAgICAgICAgRm9yIFRlbG5ldCBjb25uZWN0aW9u cyBvbmx5OiBMaWtlIFNFVCBURUxORVQgV0FJVCB7IE9OLCBPRkYgfSwKLSAgICAgICAgICBidXQg YXBwbGllcyBvbmx5IHRvIHRoaXMgY29ubmVjdGlvbiwgYW5kIGluIGZhY3QgYXBwbGllcyBvbmx5 Ci0gICAgICAgICAgd2hlbiBPUEVOaW5nIHRoaXMgY29ubmVjdGlvbiAod2hpY2ggaXMgdXN1YWxs eSB0aGUgb25seSBwbGFjZSBpdAotICAgICAgICAgIG1hdHRlcnMpLiBUeXBpY2FsbHkgeW91IHdv dWxkIHVzZSBURUxORVQgL05PV0FJVCB0byBtYWtlIGEKLSAgICAgICAgICBjb25uZWN0aW9uIHRv IGEgbWlzYmVoYXZpbmcgVGVsbmV0IHNlcnZlciB0aGF0IGRvZXMgbm90IHJlcGx5IHRvCi0gICAg ICAgICAgbmVnb3RpYXRpb25zIGFzIHJlcXVpcmVkIGJ5IHRoZSBUZWxuZXQgcHJvdG9jb2wgZGVm aW5pdGlvbi4KLQotICAgTm90ZTogL0NPTk5FQ1QgYW5kIC9TRVJWRVIgc3dpdGNoZXMgYXJlIG5v dCBhdmFpbGFibGUgaW4gdGhlIFJMT0dJTiBhbmQKLSAgIFRFTE5FVCBjb21tYW5kcywgc2luY2Ug dGhlc2UgY29tbWFuZHMgYWxyZWFkeSBpbmNsdWRlIGFuIGltcGxpY2l0Ci0gICAvQ09OTkVDVCBh bmQgcHJlY2x1ZGUgYXV0b21hdGljIGVudHJ5IGludG8gc2VydmVyIG1vZGUuCi0KLSAgIFRoZSAv Q09OTkVDVCBhbmQgL1NFUlZFUiBzd2l0Y2hlcyBhcmUgZXNwZWNpYWxseSB1c2VmdWwgd2l0aCAi c2V0IGhvc3QKLSAgICoiIGNvbm5lY3Rpb25zLiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3Ugd2Fu dCB0byBzdGFydCBhIEtlcm1pdCBzZXJ2ZXIKLSAgIG9uIHNvY2tldCAzMDAwIG9mIHlvdXIgVENQ IGhvc3QuIE5vcm1hbGx5IHlvdSB3b3VsZCBoYXZlIHRvIGdpdmUgdGhlCi0gICBjb21tYW5kOgot Ci0gIHNldCBob3N0ICogMzAwMAotCi0gICBhbmQgdGhlbiB3YWl0IGZvciBhIGNvbm5lY3Rpb24g dG8gY29tZSBpbiwgYW5kIG9ubHkgdGhlbiBjb3VsZCB5b3UgZ2l2ZQotICAgdGhlIFNFUlZFUiBj b21tYW5kIChvciBlbHNlIGRlZmluZSBhIG1hY3JvIHRvIGRvIHRoaXMsIGFuZCB0aGVuIGV4ZWN1 dGUKLSAgIHRoZSBtYWNybykuIE5vdyB5b3UgY2FuIGRvIGl0IGluIG9uZSBzdGVwOgotCi0gIHNl dCBob3N0IC9zZXJ2ZXIgKiAzMDAwCi0KLSAgIFRoaXMgdGVsbHMgQy1LZXJtaXQgdG8gd2FpdCBm b3IgdGhlIGNvbm5lY3Rpb24gYW5kIHRoZW4gZW50ZXIgc2VydmVyCi0gICBtb2RlIG9uY2UgaXQg Y29tZXMgaW4sIG5vIG1hdHRlciBob3cgbG9uZyBpdCB0YWtlcy4gU2ltaWxhcmx5LCAic2V0Ci0g ICBob3N0IC9jb25uICoiIGNhbiBiZSB1c2VkIHRvIHdhaXQgZm9yIGEgImNoYXQiIGNvbm5lY3Rp b24gdG8gY29tZSBpbi4KLQotICAgQW5vdGhlciBzZXQgb2Ygc3dpdGNoZXMgaXMgYXZhaWxhYmxl IGluIFZNUyBvbmx5LCBmb3IgdXNlIG9ubHkgd2l0aCBTRVQKLSAgIExJTkU6Ci0KLSAgIC9TSEFS RQotICAgICAgICAgIEFsbG93cyB0aGUgU0VUIExJTkUgZGV2aWNlIHRvIGJlIG9wZW5lZCBpbiBz aGFyZWQgbW9kZS4gTm9ybWFsbHkKLSAgICAgICAgICBpdCBtYWtlcyBubyBzZW5zZSB0byBvcGVu IGEgc2VyaWFsIGRldmljZSBpbiBzaGFyZWQgbW9kZSwgYnV0Ci0gICAgICAgICAgaXQncyBuZWNl c3Nhcnkgd2hlbiBDLUtlcm1pdCBpcyBydW5uaW5nIGluIGFuIGVudmlyb25tZW50IHN1Y2gKLSAg ICAgICAgICBhcyBERUNJbnRhY3QsIHRoYXQgb3BlbnMgeW91ciBqb2IncyBjb250cm9sbGluZyB0 ZXJtaW5hbCBpbiBzdWNoCi0gICAgICAgICAgYSB3YXkgdGhhdCBDLUtlcm1pdCBjYW4ndCBvcGVu IGl0IHRvbywgdW5sZXNzIGl0IGVuYWJsZXMgU0hBUkUKLSAgICAgICAgICBwcml2aWxlZ2UuIE5v dGU6IFNIQVJFIHByaXZpbGVnZSBpcyByZXF1aXJlZC4KLQotICAgL05PU0hBUkUKLSAgICAgICAg ICBSZXF1aXJlcyB0aGF0IHRoZSBTRVQgTElORSBkZXZpY2Ugbm90IGJlIGluIHVzZSBieSBhbnkg b3RoZXIKLSAgICAgICAgICBwcm9jZXNzIGluIG9yZGVyIGZvciBpdCB0byBiZSBzdWNjZXNzZnVs bHkgb3BlbmVkIGJ5IEMtS2VybWl0LgotICAgICAgICAgIElmIG5laXRoZXIgL1NIQVJFIG5vciAv Tk9TSEFSRSBpcyBzcGVjaWZpZWQsIC9OT1NIQVJFIGlzIHVzZWQuCi0KLSAgIFRoZSBzZWNvbmQg Z3JvdXAgb2Ygc3dpdGNoZXMgaXM6Ci0KLSAgIC9OTy1URUxORVQtSU5JVAotICAgICAgICAgIERv IG5vdCBzZW5kIGluaXRpYWwgVGVsbmV0IG5lZ290aWF0aW9ucyBldmVuIGlmIHRoaXMgaXMgYSBU ZWxuZXQKLSAgICAgICAgICBwb3J0LgotCi0gICAvUkFXLVNPQ0tFVAotICAgICAgICAgIFRoaXMg aXMgYSBjb25uZWN0aW9uIHRvIGEgcmF3IFRDUCBzb2NrZXQgKFszOTFdU2VjdGlvbiAyLjMuNSku Ci0KLSAgIC9STE9HSU4KLSAgICAgICAgICBVc2UgUmxvZ2luIHByb3RvY29sIGV2ZW4gaWYgdGhp cyBpcyBub3QgYW4gUmxvZ2luIHBvcnQuCi0KLSAgIC9URUxORVQKLSAgICAgICAgICBTZW5kIGlu aXRpYWwgVGVsbmV0IG5lZ290aWF0aW9ucyBldmVuIGlmIHRoaXMgaXMgbm90IGEgVGVsbmV0Ci0g ICAgICAgICAgcG9ydC4KLQotICAgQXMgb2YgQy1LZXJtaXQgNy4wIGFuZCBLOTUgMS4xLjE5LCB0 aGUgVEVMTkVUIGNvbW1hbmQgaW5jbHVkZXMgYW4KLSAgIGltcGxpY2l0IC9URUxORVQgc3dpdGNo LiBTbyBpZiB5b3UgVEVMTkVUIHRvIGEgbm9uLVRFTE5FVCBwb3J0LCBLZXJtaXQKLSAgIHNlbmRz IGluaXRpYWwgVGVsbmV0IG5lZ290aWF0aW9ucy4gVGhpcyBtYWtlcyBzZW5zZSwgc2luY2UgdGhh dCdzIHdoYXQKLSAgICJ0ZWxuZXQiIG1lYW5zLgotCi0gICBJZiB5b3Ugd2FudCB0byBtYWtlIGEg Y29ubmVjdGlvbiB0byBhIG5vbi1UZWxuZXQgcG9ydCB3aXRob3V0IHNlbmRpbmcKLSAgIGluaXRp YWwgVGVsbmV0IG5lZ290aWF0aW9ucywgdXNlOgotCi0gIHNldCBob3N0IFsgL2Nvbm5lY3QgXSBu YW1lLW9yLWFkZHJlc3MgcG9ydAotCi0gICBvcjoKLQotICB0ZWxuZXQgbmFtZS1vci1hZGRyZXNz IHBvcnQgL25vLXRlbG5ldC1pbml0Ci0KLSAgIEFkZGl0aW9uYWwgc3dpdGNoZXMgbWlnaHQgYmUg YWRkZWQgaW4gdGhlIGZ1dHVyZTsgdHlwZSAic2V0IGhvc3QgPyIgb3IKLSAgICJzZXQgbGluZSA/ IiB0byBzZWUgYSBjdXJyZW50IGxpc3QuCi0KLTIuMS4gRGlhbGluZwotCi0gICBBdXRvbWF0aWMg cmVkaWFsaW5nIGlzIGlsbGVnYWwgb3IgcmVzdHJpY3RlZCBpbiBtYW55IGNvdW50cmllcywgc28K LSAgIHVudGlsIEMtS2VybWl0IDcuMCwgaXQgd2FzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGkuZS4g dW50aWwgYSBTRVQgRElBTAotICAgUkVUUklFUyBjb21tYW5kIHdhcyBnaXZlbi4gSW4gQy1LZXJt aXQgNy4wLCBpZiBubyBTRVQgRElBTCBSRVRSSUVTCi0gICBjb21tYW5kIGhhcyBiZWVuIGdpdmVu LCBhIGRlZmF1bHQgaXMgcGlja2VkIGR5bmFtaWNhbGx5IGF0IERJQUwgdGltZQotICAgYmFzZWQg b24gdGhlIGNhbGxpbmcgY291bnRyeSBjb2RlLCBpZiBrbm93bi4gQXQgdGhpcyB3cml0aW5nLCB0 aGUgb25seQotICAgY291bnRyeSBjb2RlIGtub3duIHRvIGhhdmUgbm8gcmVzdHJpY3Rpb25zIG9u IGF1dG9tYXRpYyByZWRpYWxpbmcgaXMgMS4KLSAgIFNvIGluIHRoaXMgY2FzZSBhIGxpbWl0IG9m IDEwIGlzIGNob3Nlbjsgb3RoZXJ3aXNlIDEuIElmIHlvdSBoYXZlIG5vdAotICAgZ2l2ZW4gYW4g ZXhwbGljaXQgU0VUIERJQUwgUkVUUklFUyBjb21tYW5kLCBTSE9XIERJQUwgc2hvd3MgdGhlIHZh bHVlCi0gICBhcyAiKGF1dG8pIiwgYW5kIHRoZW4gdGhlIHZhbHVlIGFjdHVhbGx5IHVzZWQgaXMg c2hvd24gd2hlbiB5b3UgZ2l2ZQotICAgdGhlIERJQUwgY29tbWFuZC4KLQotICAgQXMgb2YgQy1L ZXJtaXQgNy4wLCBhdXRvbWF0aWMgcmVkaWFsaW5nIGlzIGF1dG9tYXRpY2FsbHkgY2FuY2VsZWQg aWYKLSAgIHRoZSBjYWxsIGNvdWxkIG5vdCBiZSBwbGFjZWQgYmVjYXVzZSBubyBkaWFsdG9uZSB3 YXMgZGV0ZWN0ZWQuCi0KLTIuMS4xLiBUaGUgRGlhbCBSZXN1bHQgTWVzc2FnZQotCi0gICBJZiBE SUFMIERJU1BMQVkgaXMgbm90IE9OLCB0aGUgIkNhbGwgY29tcGxldGUiIG1lc3NhZ2Ugbm93IHNo b3dzIHRoZQotICAgbW9kZW0ncyBjYWxsIHJlc3VsdCBtZXNzYWdlLCBmb3IgZXhhbXBsZToKLQot ICBEaWFsaW5nOiAuLi4KLSAgQ2FsbCBjb21wbGV0ZTogIkNPTk5FQ1QgMzEyMDAvQVJRL1YzMi9M QVBNL1Y0MkJJUyIKLQotICAgVGhlIGV4YWN0IGZvcm1hdCBhbmQgY29udGVudHMgb2YgdGhpcyBt ZXNzYWdlLCBvZiBjb3Vyc2UsIGRlcGVuZHMgb24KLSAgIHRoZSBtYWtlLCBtb2RlbCwgYW5kIGNv bmZpZ3VyYXRpb24gb2YgeW91ciBtb2RlbSwgc28gdXNlIHlvdXIgbW9kZW0KLSAgIG1hbnVhbCB0 byBpbnRlcnByZXQgaXQuIFRoZSBjYWxsIHJlc3VsdCBtZXNzYWdlIGlzIGFsc28gYXZhaWxhYmxl IGluCi0gICBDLUtlcm1pdCdzIFx2KGRpYWxyZXN1bHQpIHZhcmlhYmxlLgotCi0gIEMtS2VybWl0 PiBlY2hvIFx2KGRpYWxyZXN1bHQpCi0gIENPTk5FQ1QgMzEyMDAvQVJRL1YzMi9MQVBNL1Y0MkJJ UwotICBDLUtlcm1pdD4gZWNobyBTcGVlZCA9IFxmd29yZChcdihkaWFscmVzdWx0KSwyKQotICBT cGVlZCA9IDMxMjAwCi0gIEMtS2VybWl0PgotCi0gICBTdXBwb3NlIHlvdXIgbW9kZW0gcmVwb3J0 cyB0aGUgbW9kdWxhdGlvbiBzcGVlZCBhcyBzaG93biBhYm92ZSBhbmQgeW91Ci0gICB3YW50IHRv IGVuc3VyZSB5b3VyIGNhbGwgaXMgY29tcGxldGVkIGF0IChzYXkpIDI0MDAwIGJwcyBvciBtb3Jl LiBZb3UKLSAgIGNhbiB1c2UgYSBsaXR0bGUgbWFjcm8gdG8gZG8gdGhlIGpvYjoKLQotZGVmaW5l IEhTRElBTCB7ICAgICAgICAgICAgICAgIDsgSGlnaCBTcGVlZCBESUFMCi0gICAgbG9jYWwgXCVz Ci0gICAgaWYgPCBcdihhcmdjKSAxIGlmIG5vdCBkZWYgXHYoZGlhbG51bWJlcikgZW5kIDEgVXNh Z2U6IFwlMCBudW1iZXIKLSAgICBzZXQgZGlhbCByZXRyaWVzIDEwMAotICAgIHNldCBkaWFsIGlu dGVydmFsIDEKLSAgICB3aGlsZSB0cnVlIHsKLSAgICAgICAgZGlhbCBcJSoKLSAgICAgICAgaWYg ZmFpbCBlbmQgMSBESUFMIGZhaWxlZC4KLSAgICAgICAgYXNnIFwlcyBcZndvcmQoXHYoZGlhbHJl c3VsdCksMikKLSAgICAgICAgaWYgZGVmIFwlcyBpZiBudW1lcmljIFwlcyBpZiBub3QgPCBcJXMg MjQwMDAgYnJlYWsKLSAgICB9Ci19Ci0KLSAgIChTZWUgWzM5Ml1TZWN0aW9uIDcuNSBhYm91dCB0 aGUgXCUqIHZhcmlhYmxlLikKLQotMi4xLjIuIExvbmctRGlzdGFuY2UgRGlhbGluZyBDaGFuZ2Vz Ci0KLSAgIER1ZSB0byB0aGUgZ2x1dCBvZiBjZWxsIHBob25lcywgcGFnZXJzLCBmYXggbWFjaGlu ZXMsIElTUHMsIGV0YywgYXJlYQotICAgY29kZXMgYW5kIGRpYWxpbmcgcnVsZXMgYXJlIGNoYW5n aW5nIGFsbCB0aGUgdGltZS4gSW4gdGhlIE5vcnRoCi0gICBBbWVyaWNhbiBOdW1iZXJpbmcgUGxh biAoTkFOUCkgY291bnRyaWVzIChVU0EsIENhbmFkYSwgZXRjKSwgYXJlYSBjb2RlcwotICAgYXJl IHNwbGl0IG9yIG92ZXJsYXllZCB3aXRoIGluY3JlYXNpbmcgZnJlcXVlbmN5LCBhbmQgMTAtIGFu ZCAxMS1kaWdpdAotICAgZGlhbGluZyBpcyBncmFkdWFsbHkgYmVjb21pbmcgdGhlIG5vcm0gZm9y IGxvY2FsIGNhbGxzLiBDaGFuZ2VzIGFyZQotICAgb2NjdXJyaW5nIEluIEV1cm9wZSwgdG9vLCBw YXJ0bHkgZm9yIHRoZXNlIHJlYXNvbnMgYW5kIHBhcnRseSBiZWNhdXNlCi0gICBvZiBzb21lIG5l dyBFQyBydWxlcy4KLQotICAgSW4gRnJhbmNlLCBlZmZlY3RpdmUgMTggT2N0b2JlciAxOTk2LCBh bGwgY2FsbHMsIGV2ZW4gbG9jYWwgb25lcywgbXVzdAotICAgYmUgZGlhbGVkIHdpdGggYW4gYXJl YSBjb2RlLiBGcmVuY2ggYXJlYSBjb2RlcyBhcmUgcHJlc2VudGx5IDEtZGlnaXQKLSAgIG51bWJl cnMsIDEtNiwgYW5kIHRoZSBsb25nLWRpc3RhbmNlIGRpYWxpbmcgcHJlZml4IGlzIDAuIEFsbCBj YWxscwotICAgd2l0aGluIEZyYW5jZSBhcmUgY29uc2lkZXJlZCBsb25nIGRpc3RhbmNlIGFuZCBi ZWdpbiB3aXRoIDAxLCAwMiwgLi4uLAotICAgMDYuCi0KLSAgIEVmZmVjdGl2ZSAxIE1heSAxOTk3 LCBhbGwgY2FsbHMgd2l0aGluIHRoZSBVUyBzdGF0ZSBvZiBNYXJ5bGFuZCwgZXZlbgotICAgbG9j YWwgb25lcywgbXVzdCBiZSBkaWFsZWQgd2l0aCBhbiBhcmVhIGNvZGUgYnV0IHdpdGhvdXQgdGhl Ci0gICBsb25nLWRpc3RhbmNlIHByZWZpeCAtLSB0aGlzIGlzIHRoZSBub3cgd2lkZWx5LWtub3du IE5vcnRoIEFtZXJpY2FuCi0gICBwaGVub21lbm9uIG9mICJ0ZW4gZGlnaXQgZGlhbGluZyIuIFRo ZSBzYW1lIGlzIGhhcHBlbmluZyBlbHNld2hlcmUgLS0KLSAgIG1hbnkgY2l0aWVzIGluIEZsb3Jp ZGEgYWRvcHRlZCAxMC1kaWdpdCBkaWFsaW5nIGluIDE5OTguCi0KLSAgIEluIEl0YWx5IGJlZ2lu bmluZyAxOSBKdW5lIDE5OTgsIGFsbCBjYWxscyB0byBmaXhlZCAoYXMgb3Bwb3NlZCB0bwotICAg bW9iaWxlKSBudW1iZXJzIG11c3QgYmUgcHJlZml4ZWQgYnkgMC4gV2hlbiBjYWxsaW5nIGludG8g SXRhbHkgZnJvbQotICAgb3V0c2lkZSwgdGhlIDAgbXVzdCBmb2xsb3cgdGhlIGNvdW50cnkgY29k ZSAoMzkpLiBDYWxscyB0byBjZWxsIHBob25lcywKLSAgIGhvd2V2ZXIsIG11c3QgYmUgcGxhY2Vk IHdpdGhvdXQgdGhlIDAuIFRoZW4gb24gMjkgRGVjZW1iZXIgMjAwMCwgdGhlIDAKLSAgIHdpbGwg YmVjb21lIGEgNCAoZm9yIGNhbGxpbmcgZml4ZWQgbnVtYmVycykgYW5kIGEgcHJlZml4IG9mIDMg bXVzdCB1c2VkCi0gICBmb3IgY2FsbGluZyBtb2JpbGUgcGhvbmVzLiBNb3JlIGluZm8gYXQ6Ci0g ICBodHRwOi8vd3d3LnRlbGVjb21pdGFsaWEuaXQvbnBubi8uCi0KLSAgIEluIFNwYWluLCBlZmZl Y3RpdmUgNCBBcHJpbCAxOTk4LCB3aXRoIGhhcmQgY3V0b3ZlciBvbiAxOCBKdWx5IDE5OTgsCi0g ICBhbGwgY2FsbHMgd2l0aGluIHRoZSBjb3VudHJ5IG11c3QgYmUgZGlhbGVkIHdpdGggOSBkaWdp dHMsIGFuZCBhbGwKLSAgIGNhbGxzIGZyb20gb3V0c2lkZSBTcGFpbiBtdXN0IGFsc28gYmUgZGlh bGVkIHdpdGggOSBkaWdpdHMgKGFmdGVyIHRoZQotICAgY291bnRyeSBjb2RlLCAzNCkuIFRoZSBu ZXcgOS1kaWdpdCBudW1iZXJzIGFsbCBiZWdpbiB3aXRoICI5Ii4gTW9yZQotICAgaW5mbyBhdDog WzM5M11odHRwOi8vd3d3LnRlbGVmb25pY2EuZXMvY2FtYmlvZGVudW1lcmFjaW9uLwotCi0gICBT ZXZlcmFsIG5ldyBkaWFsaW5nIGZlYXR1cmVzIGFuZCBjb21tYW5kcyBoYXZlIGJlZW4gYWRkZWQg aW4gdmVyc2lvbgotICAgNi4xIGFuZCA3LjAgdG8gYWRkcmVzcyB0aGVzZSBjaGFuZ2VzLgotCi0g ICBDLUtlcm1pdCA2LjAgYW5kIEtlcm1pdCA5NSAxLjEuMTEgYW5kIGVhcmxpZXIgaGFuZGxlIHRo ZSBGcmVuY2gKLSAgIHNpdHVhdGlvbiB2aWEgYSByZWFzb25hYmxlIHN1YnRlcmZ1Z2UgKHNldHRp bmcgdGhlIGxvY2FsIGFyZWEgY29kZSB0byBhCi0gICBub25leGlzdGVudCBvbmUpLCBidXQgZGlk IG5vdCBoYW5kbGUgInRlbi1kaWdpdCBkaWFsaW5nIiB3ZWxsIGF0IGFsbDsKLSAgIHRoZSByZWNv bW1lbmRlZCB0ZWNobmlxdWUgd2FzIHRvIGNoYW5nZSB0aGUgbG9uZy1kaXN0YW5jZSBkaWFsaW5n Ci0gICBwcmVmaXggdG8gbm90aGluZywgYnV0IHRoaXMgZGVmZWF0ZWQgS2VybWl0J3MgImxpc3Qg bnVtYmVycyBmb3Igb25lCi0gICBuYW1lIiBmZWF0dXJlIHdoZW4gdGhlIG51bWJlcnMgd2VyZSBp biBkaWZmZXJlbnQgbG9jYXRpb25zLiBGb3IKLSAgIGV4YW1wbGU6Ci0KLSAgc2V0IGRpYWwgbGQt cHJlZml4Ci0gIGRpYWwgb25saW5lc2VydmljZQotCi0gICB3aGVyZSAib25saW5lc2VydmljZSIg aXMgYSBkaWFsaW5nIGRpcmVjdG9yeSBlbnRyeSBuYW1lIGNvcnJlc3BvbmRpbmcKLSAgIHRvIGVu dHJpZXMgdGhhdCBhcmUgaW4gKHNheSkgTWFyeWxhbmQgYXMgd2VsbCBhcyBvdGhlciBzdGF0ZXMs IHdvdWxkCi0gICBub3QgY29ycmVjdGx5IGRpYWwgdGhlIG51bWJlcnMgbm90IGluIE1hcnlsYW5k LgotCi0gICBBIG5ldyBjb21tYW5kIGxldHMgeW91IHNwZWNpZnkgYSBsaXN0IG9mIGFyZWEgY29k ZXMgdG8gYmUgY29uc2lkZXJlZAotICAgbG9jYWwsIGV4Y2VwdCB0aGF0IHRoZSBhcmVhIGNvZGUg bXVzdCBiZSBkaWFsZWQ6Ci0KLSAgIFNFVCBESUFMIExDLUFSRUEtQ09ERVMgWyBhcmVhY29kZSBb IGFyZWFjb2RlIFsgYXJlYWNvZGUgWyAuLi4gXSBdIF0gXQotICAgICAgICAgIFRoZSBsaXN0IG1h eSBpbmNsdWRlIHVwIHRvIDMyIGFyZWEgY29kZXMuIElmIGEgbnVtYmVyIGlzIGNhbGxlZAotICAg ICAgICAgIHdob3NlIGFyZWEgY29kZSBpcyBpbiB0aGlzIGxpc3QsIGl0IGlzIGRpYWxlZCBXSVRI T1VUIHRoZQotICAgICAgICAgIGxvbmctZGlzdGFuY2UgcHJlZml4LCBidXQgV0lUSCB0aGUgYXJl YSBjb2RlLgotCi0gICBTbyBpbiBNYXJ5bGFuZCwgd2hpY2ggKGxhc3QgdGltZSB3ZSBsb29rZWQp IGhhcyB0d28gYXJlYSBjb2RlcywgNDEwIGFuZAotICAgMzAxLCB0aGUgc2V0dXAgd291bGQgYmU6 Ci0KLSAgU0VUIERJQUwgTEMtQVJFQS1DT0RFUyA0MTAgMzAxCi0KLSAgIEV4YW1wbGU6Ci0KLSAg U0VUIERJQUwgTEQtUFJFRklYIDEKLSAgU0VUIERJQUwgQVJFQS1DT0RFIDMwMQotICBTRVQgRElB TCBMQy1BUkVBLUNPREVTIDQxMCAzMDEgPC0tIEFyZWEgY29kZXMgaW4gMTAtZGlnaXQgZGlhbGlu ZyByZWdpb24KLSAgRElBTCArMSAoMzAxKSA3NjUtNDMyMSAgICAgICAgIDwtLSBEaWFscyAzMDE3 NjU0MzIxICAobG9jYWwgd2l0aCBhcmVhIGNvZGUpCi0gIERJQUwgKzEgKDQxMCkgNzY1LTQzMjEg ICAgICAgICA8LS0gRGlhbHMgNDEwNzY1NDMyMSAgKGxvY2FsIHdpdGggYXJlYSBjb2RlKQotICBE SUFMICsxICgyMTIpIDc2NS00MzIxICAgICAgICAgPC0tIERpYWxzIDEyMTI3NjU0MzIxIChsb25n IGRpc3RhbmNlKQotCi0gICBUaGUgU0VUIERJQUwgTEMtQVJFQS1DT0RFUyBjb21tYW5kIGRvZXMg bm90IHJlcGxhY2UgdGhlIFNFVCBESUFMCi0gICBBUkVBLUNPREUgY29tbWFuZC4gVGhlIGxhdHRl ciBzcGVjaWZpZXMgdGhlIGFyZWEgY29kZSB5b3UgYXJlIGRpYWxpbmcKLSAgIGZyb20uIElmIHRo ZSBjYWxsZWQgbnVtYmVyIGlzIGluIHRoZSBzYW1lIGFyZWEgY29kZSwgdGhlbiB0aGUgYXJlYSBj b2RlCi0gICBpcyBkaWFsZWQgaWYgaXQgaXMgYWxzbyBpbiB0aGUgTEMtQVJFQS1DT0RFUyBsaXN0 LCBhbmQgaXQgaXMgbm90IGRpYWxlZAotICAgb3RoZXJ3aXNlLiBTbyBpZiAiMzAxIiBoYWQgbm90 IGFwcGVhcmVkIGluIHRoZSBMQy1BUkVBLUNPREVTIGxpc3QgaW4KLSAgIHRoZSBwcmV2aW91cyBl eGFtcGxlOgotCi0gIFNFVCBESUFMIExELVBSRUZJWCAxCi0gIFNFVCBESUFMIEFSRUEtQ09ERSAz MDEKLSAgU0VUIERJQUwgTEMtQVJFQS1DT0RFUyA0MTAgICAgIDwtLSBBcmVhIGNvZGVzIGluIDEw LWRpZ2l0IGRpYWxpbmcgcmVnaW9uCi0gIERJQUwgKzEgKDMwMSkgNzY1LTQzMjEgICAgICAgICA8 LS0gRGlhbHMgNzY1NDMyMSAgICAgKGxvY2FsKQotICBESUFMICsxICg0MTApIDc2NS00MzIxICAg ICAgICAgPC0tIERpYWxzIDQxMDc2NTQzMjEgIChsb2NhbCB3aXRoIGFyZWEgY29kZSkKLSAgRElB TCArMSAoMjEyKSA3NjUtNDMyMSAgICAgICAgIDwtLSBEaWFscyAxMjEyNzY1NDMyMSAobG9uZyBk aXN0YW5jZSkKLQotICAgVGhlIG5ldyBLZXJtaXQgdmVyc2lvbnMgYWxzbyBhZGQgYSBMb2NhbCBD YWxsIFByZWZpeCBhbmQgTG9jYWwgQ2FsbAotICAgU3VmZml4LCBpbiBjYXNlIHlvdSBoYXZlIGFu eSBuZWVkIGZvciBpdC4gVGhlc2UgYXJlIGFkZGVkIHRvIHRoZQotICAgYmVnaW5uaW5nIGFuZCBv ZiBsb2NhbCBwaG9uZSBudW1iZXJzIChpLmUuIG51bWJlcnMgdGhhdCBhcmUgbm90Ci0gICBsb25n LWRpc3RhbmNlIG9yIGludGVybmF0aW9uYWwpLiBFeGFtcGxlczoKLQotICBTRVQgRElBTCBMRC1Q UkVGSVggMQotICBTRVQgRElBTCBMQy1QUkVGSVggOQotICBTRVQgRElBTCBMQy1TVUZGSVggKgot ICBTRVQgRElBTCBMQy1BUkVBLUNPREVTIDQxMCAgICAgPC0tIEFyZWEgY29kZXMgaW4gMTAtZGln aXQgZGlhbGluZyByZWdpb24KLSAgU0VUIERJQUwgQVJFQS1DT0RFIDMwMQotICBESUFMICsxICgz MDEpIDc2NS00MzIxICAgICAgICAgPC0tIERpYWxzIDk3NjU0MzIxKiAgICAgKGxvY2FsKQotICBE SUFMICsxICg0MTApIDc2NS00MzIxICAgICAgICAgPC0tIERpYWxzIDk0MTA3NjU0MzIxKiAgKGxv Y2FsIHdpdGggYXJlYSBjb2RlKQotICBESUFMICsxICgyMTIpIDc2NS00MzIxICAgICAgICAgPC0t IERpYWxzIDEyMTI3NjU0MzIxICAgKGxvbmcgZGlzdGFuY2UpCi0KLTIuMS4zLiBGb3JjaW5nIExv bmctRGlzdGFuY2UgRGlhbGluZwotCi0gICBTdXBwb3NlIGEgbnVtYmVyIGlzIGluIHlvdXIgY291 bnRyeSBhbmQgYXJlYSwgYnV0IGZvciBzb21lIHJlYXNvbiB5b3UKLSAgIG5lZWQgdG8gZGlhbCBp dCBsb25nLWRpc3RhbmNlIGFueXdheSAoYXMgaXMgYWx3YXlzIHRoZSBjYXNlIGluIEZyYW5jZSku Ci0gICBUaGVyZSBoYXZlIGFsd2F5cyBiZWVuIHZhcmlvdXMgd2F5cyB0byBoYW5kbGUgdGhpczoK LQotICAgIDEuIFRlbXBvcmFyaWx5IHNldCB5b3VyIGFyZWEgY29kZSB0byBhIGRpZmZlcmVudCAo b3Igbm9uZXhpc3RlbnQgb3IKLSAgICAgICBpbXBvc3NpYmxlKSBvbmUgKGJ1dCB0aGlzIHJlcXVp cmVkIGtub3dsZWRnZSBvZiB3aGljaCBhcmVhIGNvZGVzCi0gICAgICAgd2VyZSBub25leGlzdGVu dCBvciBpbXBvc3NpYmxlIGluIGVhY2ggY291bnRyeSkuCi0gICAgMi4gRGlhbCB0aGUgbnVtYmVy IGxpdGVyYWxseSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBwb3J0YWJsZSBmb3JtYXQsIGJ1dAotICAg ICAgIHRoaXMgZGVmZWF0cyB0aGUgcHVycG9zZSBvZiB0aGUgcG9ydGFibGUgZGlhbGluZyBkaXJl Y3RvcnkuCi0KLSAgIE5vdyB0aGVyZSBpcyBhbHNvIGEgbmV3IGNvbW1hbmQgdGhhdCwgdmVyeSBz aW1wbHksIGNhbiBmb3JjZQotICAgbG9uZy1kaXN0YW5jZSBkaWFsaW5nOgotCi0gICBTRVQgRElB TCBGT1JDRS1MT05HLURJU1RBTkNFIHsgT04sIE9GRiB9Ci0gICAgICAgICAgSWYgYSBjYWxsIGlz IHBsYWNlZCB0byBhIHBvcnRhYmxlIHBob25lIG51bWJlciB3aXRoaW4gdGhlIHNhbWUKLSAgICAg ICAgICBjb3VudHJ5IGNvZGUgYXMgdGhlIGNhbGxpbmcgbnVtYmVyLCBpdCBpcyBkaWFsZWQgd2l0 aCB0aGUKLSAgICAgICAgICBsb25nLWRpc3RhbmNlIHByZWZpeCBhbmQgdGhlIGFyZWEgY29kZSBp ZiBGT1JDRS1MT05HLURJU1RBTkNFIGlzCi0gICAgICAgICAgT04uIElmIE9GRiwgdGhlIHJlZ3Vs YXIgcnVsZXMgYW5kIHByb2NlZHVyZXMgYXBwbHkuCi0KLSAgIEV4YW1wbGUgKEZyYW5jZSk6Ci0K LSAgU0VUIERJQUwgQ09VTlRSWS1DT0RFIDMzCi0gIFNFVCBESUFMIEFSRUEtQ09ERSA2Ci0gIFNF VCBESUFMIEZPUkNFLUxPTkctRElTVEFOQ0UgT04KLQotICAgKEluIGZhY3QsIFNFVCBESUFMIENP VU5UUlktQ09ERSAzMyBhdXRvbWF0aWNhbGx5IHNldHMgRElBTAotICAgRk9SQ0UtTE9ORy1ESVNU QU5DRSBPTi4uLikKLQotICAgRXhhbXBsZSAoVVNBLCBmb3IgYSBjZXJ0YWluIHR5cGUgb2YgcmV2 ZXJzZS1jaGFyZ2UgY2FsbGluZyBpbiB3aGljaCB0aGUKLSAgIGNhbGxlZCBudW1iZXIgbXVzdCBh bHdheXMgYmUgZnVsbHkgc3BlY2lmaWVkKToKLQotICBTRVQgRElBTCBQUkVGSVggMTgwMDI2NjYz MjgkICAgICA7IDEtODAwLUNPTExFQ1QKLSAgU0VUIERJQUwgQ09VTlRSWS1DT0RFIDEKLSAgU0VU IERJQUwgQVJFQS1DT0RFIDIxMgotICBTRVQgRElBTCBGT1JDRS1MT05HLURJU1RBTkNFIE9OCi0K LSAgIEV4YW1wbGUgKFRvcm9udG8sIHdoZXJlIGNhbGxzIHRvIGV4Y2hhbmdlIDk3NiB3aXRoaW4g YXJlYSBjb2RlIDQxNiBtdXN0Ci0gICBiZSBkaWFsZWQgYXMgbG9uZyBkaXN0YW5jZSwgZXZlbiB3 aGVuIHlvdSBhcmUgZGlhbGluZyBmcm9tIGFyZWEgY29kZQotICAgNDE2KToKLQotICBTRVQgRElB TCBDT1VOVFJZLUNPREUgMQotICBTRVQgRElBTCBBUkVBLUNPREUgNDE2Ci0gIFNFVCBESUFMIEZP UkNFLUxPTkctRElTVEFOQ0UgT04KLSAgRElBTCArMSAoNDE2KSA5NzYteHh4eAotCi0gICBJZiBk aWFsaW5nIG1ldGhvZHMgd2VyZSBjb25zaXN0ZW50IGFuZCBzZW5zaWJsZSwgb2YgY291cnNlIGl0 IHdvdWxkIGJlCi0gICBwb3NzaWJsZSB0byBhbHdheXMgZGlhbCBldmVyeSBkb21lc3RpYyBjYWxs IGFzIGlmIGl0IHdlcmUgbG9uZwotICAgZGlzdGFuY2UuIEJ1dCBpbiBtYW55IGxvY2F0aW9ucyB0 aGlzIGRvZXNuJ3Qgd29yayBvciBpZiBpdCBkb2VzLCBpdAotICAgY29zdHMgZXh0cmEuIFRoZSBm b2xsb3dpbmcgbWFjcm8gY2FuIGJlIHVzZWQgZm9yIGRpYWxpbmcgYW55IGdpdmVuCi0gICBudW1i ZXIgd2l0aCBmb3JjZWQgbG9uZy1kaXN0YW5jZSBmb3JtYXQ6Ci0KLSAgZGVmaW5lIExESUFMIHsK LSAgICAgIGxvY2FsIFwleAotICAgICAgc2V0IGRpYWwgZm9yY2UtbG9uZy1kaXN0YW5jZSBvbgot ICAgICAgZGlhbCBcJSoKLSAgICAgIGFzZyBcJXggXHYoc3VjY2VzcykKLSAgICAgIHNldCBkaWFs IGZvcmNlLWxvbmctZGlzdGFuY2Ugb2ZmCi0gICAgICBlbmQgXCV4Ci0gIH0KLQotICAgKFNlZSBb Mzk0XVNlY3Rpb24gNy41IGFib3V0IHRoZSBcJSogdmFyaWFibGUuKQotCi0yLjEuNC4gRXhjaGFu Z2UtU3BlY2lmaWMgRGlhbGluZyBEZWNpc2lvbnMKLQotICAgVGhpcyBhcHBsaWVzIG1haW5seSB0 byB0aGUgTm9ydGggQW1lcmljYW4gTnVtYmVyaW5nIFBsYW4gKE5BTlApLiBSZWZlcgotICAgdG8g dGhlIHNlY3Rpb24gIkFsdGVybmF0aXZlIG5vdGF0aW9ucyIgaW4gWzM5NV1Vc2luZyBDLUtlcm1p dCAybmQKLSAgIEVkaXRpb24sIHBhZ2VzIDEwNi0xMDcsIGFuZCB0aGUgc3RvcnkgYWJvdXQgVG9y b250byBvbiBwYWdlIDExMC4gVXNpbmcKLSAgIHRoZSBuZXcgTEMtQVJFQS1DT0RFUyBsaXN0LCB3 ZSBjYW4gYWRkcmVzcyB0aGUgcHJvYmxlbSBieSB0cmVhdGluZyB0aGUKLSAgIGV4Y2hhbmdlIGFz IHBhcnQgb2YgdGhlIGFyZWEgY29kZToKLQotICBTRVQgRElBTCBMRC1QUkVGSVggMQotICBTRVQg RElBTCBBUkVBLUNPREUgNDE2Ci0gIFNFVCBESUFMIExDLUFSRUEtQ09ERVMgOTA1Mjc2Ci0gIERJ QUwgKzEgNDE2IDc2NSA0MzIxICAgICAgICAgICAgICAgPC0tIDc2NTQzMjEgICAgICAobG9jYWwp Ci0gIERJQUwgKzEgOTA1IDI3NiA0MzIxICAgICAgICAgICAgICAgPC0tIDkwNTI3NjQzMjEgICAo bG9jYWwgd2l0aCBhcmVhIGNvZGUpCi0gIERJQUwgKzEgOTA1IDUyOCA0MzIxICAgICAgICAgICAg ICAgPC0tIDE5MDU1Mjg0MzIxICAobG9uZyBkaXN0YW5jZSkKLQotICAgVGhlIHNhbWUgdGVjaG5p cXVlIGNhbiBiZSB1c2VkIGluIE1hc3NhY2h1c2V0dHMgKHN0b3J5IGF0IHRvcCBvZiBwYWdlCi0g ICAxMTEpIGFuZCBpbiBhbnkgb3RoZXIgcGxhY2Ugd2hlcmUgZGlhbGluZyB0byBzb21lIGV4Y2hh bmdlcyB3aXRoaW4gYQotICAgcGFydGljdWxhciBhcmVhIGNvZGUgaXMgbG9jYWwsIGJ1dCB0byBv dGhlcnMgaW4gdGhlIHNhbWUgYXJlYSBjb2RlIGlzCi0gICBsb25nIGRpc3RhbmNlLgotCi0yLjEu NS4gQ2F1dGlvbnMgYWJvdXQgQ2hlYXBlc3QtRmlyc3QgRGlhbGluZwotCi0gICBLZXJtaXQgZG9l cyBub3QgbWFpbnRhaW4gYSBrbm93bGVkZ2UgYmFzZSBvZiB0ZWxlcGhvbnkgaW5mb3JtYXRpb247 IGl0Ci0gICBvbmx5IHByb3ZpZGVzIHRoZSB0b29scyB0byBsZXQgeW91IGVudGVyIGEgcGhvbmUg bnVtYmVyIGluIGEgc3RhbmRhcmQKLSAgIGZvcm1hdCBhbmQgZGlhbCBpdCBjb3JyZWN0bHkgZnJv bSBhbnkgbG9jYXRpb24gaW4gbW9zdCBjYXNlcy4KLQotICAgSW4gcGFydGljdWxhciwgS2VybWl0 IGRvZXMgbm90IGRpZmZlcmVudGlhdGUgdGhlIGNoYXJnaW5nIG1ldGhvZCBmcm9tCi0gICB0aGUg ZGlhbGluZyBtZXRob2QuIElmIGEgY2FsbCB0aGF0IGlzIERJQUxFRCBhcyBsb25nLWRpc3RhbmNl IChlLmcuCi0gICBmcm9tIDIxMiB0byA3MTggaW4gY291bnRyeSBjb2RlIDEpIGlzIG5vdCBDSEFS R0VEIGFzIGxvbmcgZGlzdGFuY2UsIHdlCi0gICBoYXZlIG5vIHdheSBvZiBrbm93aW5nIHRoYXQg d2l0aG91dCBrZWVwaW5nIGEgbWF0cml4IG9mIGNoYXJnaW5nCi0gICBpbmZvcm1hdGlvbiBmb3Ig ZXZlcnkgYXJlYS1jb2RlIGNvbWJpbmF0aW9uIHdpdGhpbiBldmVyeSBjb3VudHJ5LCBhbmQKLSAg IGFueSBzdWNoIG1hdHJpeCB3b3VsZCBiZSBvYnNvbGV0ZSBmaXZlIG1pbnV0ZXMgYWZ0ZXIgaXQg d2FzCi0gICBjb25zdHJ1Y3RlZC4gVGh1cywgImNoZWFwZXN0LWZpcnN0IiBzb3J0aW5nIGlzIG9u bHkgYXMgcmVsaWFibGUgYXMgb3VyCi0gICBhc3N1bXB0aW9uIHRoYXQgdGhlIGNoYXJnaW5nIG1l dGhvZCBmb2xsb3dzIHRoZSBkaWFsaW5nIG1ldGhvZC4gQSBnb29kCi0gICBpbGx1c3RyYXRpb24g d291bGQgYmUgY2VydGFpbiBvbmxpbmUgc2VydmljZXMgdGhhdCBoYXZlIHRvbGwtZnJlZQotICAg ZGlhbHVwIG51bWJlcnMgd2hpY2ggdGhleSBjaGFyZ2UgeW91IGEgcHJlbWl1bSAoaW4geW91ciBv bmxpbmUgc2VydmljZQotICAgYmlsbCkgZm9yIHVzaW5nLgotCi0yLjEuNi4gQmxpbmQgRGlhbGlu ZyAoRGlhbGluZyB3aXRoIE5vIERpYWx0b25lKQotCi0gICBDLUtlcm1pdCdzIGluaXQgc3RyaW5n IGZvciBIYXllcy1saWtlIG1vZGVtcyBnZW5lcmFsbHkgaW5jbHVkZXMgYW4gWDQKLSAgIGNvbW1h bmQgdG8gZW5hYmxlIGFzIG1hbnkgcmVzdWx0IGNvZGVzIGFzIHBvc3NpYmxlLCBzbyB0aGF0IEtl cm1pdCBjYW4KLSAgIHJlYWN0IGFwcHJvcHJpYXRlbHkgdG8gZGlmZmVyZW50IGZhaWx1cmUgcmVh c29ucy4gT25lIG9mIHRoZSByZXN1bHQKLSAgIGNvZGVzIHRoYXQgWDQgZW5hYmxlcyBpcyAiTk8g RElBTFRPTkUiLiBBIHBlcmhhcHMgbm90IG9idmlvdXMgc2lkZQotICAgZWZmZWN0IG9mIGVuYWJs aW5nIHRoaXMgcmVzdWx0IGNvZGUgdGhhdCB0aGUgbW9kZW0gbXVzdCBoZWFyIGRpYWx0b25lCi0g ICBiZWZvcmUgaXQgd2lsbCBkaWFsLgotCi0gICBJdCBpcyBiZWNvbWluZyBpbmNyZWFzaW5nbHkg bmVjZXNzYXJ5IHRvIGZvcmNlIGEgbW9kZW0gdG8gZGlhbCBldmVuCi0gICB0aG91Z2ggaXQgZG9l cyBub3QgaGVhciBhIGRpYWx0b25lIG9uIHRoZSBwaG9uZSBsaW5lOyBmb3IgZXhhbXBsZSwgd2l0 aAotICAgUEJYcyB0aGF0IGhhdmUgc3RyYW5nZSBkaWFsdG9uZXMsIG9yIHdpdGggcGhvbmUgc3lz dGVtcyBpbiBkaWZmZXJlbnQKLSAgIGNvdW50cmllcywgb3Igd2l0aCBJU0ROIHBob25lcywgZXRj LiBUaGlzIGlzIGNhbGxlZCAiYmxpbmQgZGlhbGluZyIuCi0KLSAgIEMtS2VybWl0IDcuMCBoYXMg dHdvIG5ldyBjb21tYW5kcyB0byBjb3BlIHdpdGggdGhpcyBzaXR1YXRpb246Ci0KLSAgIFNFVCBE SUFMIElHTk9SRS1ESUFMVE9ORSB7IE9OLCBPRkYgfQotICAgICAgICAgIE9GRiAodGhlIGRlZmF1 bHQpIG1lYW5zIHRvIHRlbGwgdGhlIG1vZGVtIHRvIHdhaXQgZm9yIGRpYWx0b25lCi0gICAgICAg ICAgYmVmb3JlIGRpYWxpbmcuIE9OIG1lYW5zIHRvIGVuYWJsZSAiYmxpbmQgZGlhbGluZyIsIGku ZS4gdGVsbAotICAgICAgICAgIHRoZSBtb2RlbSBOT1QgdG8gd2FpdCBmb3IgZGlhbHRvbmUgYmVm b3JlIGRpYWxpbmcuIEdlbmVyYWxseQotICAgICAgICAgIHRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5 IHNlbmRpbmcgQVRYMyB0byB0aGUgbW9kZW0ganVzdCBwcmlvciB0bwotICAgICAgICAgIGRpYWxp bmcuIFNFVCBNT0RFTSBUWVBFIHh4eCBhbmQgdGhlbiBTSE9XIE1PREVNIGRpc3BsYXlzCi0gICAg ICAgICAgS2VybWl0J3MgYnVpbHQtaW4gImlnbm9yZSBkaWFsdG9uZSIgY29tbWFuZC4KLQotICAg U0VUIERJQUwgQ09NTUFORCBJR05PUkUtRElBTFRPTkUgdGV4dAotICAgICAgICAgIFRoaXMgbGV0 cyB5b3UgY2hhbmdlIHRoZSBidWlsdC1pbiBpZ25vcmUtZGlhbHRvbmUgY29tbWFuZCAoc3VjaAot ICAgICAgICAgIGFzIEFUWDMpIHRvIHdoYXRldmVyIHlvdSBjaG9vc2UsIGluIGNhc2UgdGhlIGJ1 aWx0LWluIG9uZSBkb2VzCi0gICAgICAgICAgbm90IHdvcmssIG9yIGFub3RoZXIgY29tbWFuZCB3 b3JrcyBiZXR0ZXIuCi0KLSAgIE5vdGVzOgotICAgIDEuIFRoZSBpZ25vcmUtZGlhbHRvbmUgY29t bWFuZCBpcyBub3Qgc2VudCB1bmxlc3MgU0VUIERJQUwKLSAgICAgICBJR05PUkUtRElBTFRPTkUg aXMgT04uCi0gICAgMi4gVGhlIEFUWDMgY29tbWFuZCBnZW5lcmFsbHkgZGlzYWJsZXMgbm90IG9u bHkgTk8gRElBTFRPTkUsIGJ1dCBhbHNvCi0gICAgICAgQlVTWS4gU28gdGhpcyB3aWxsIHByZXZl bnQgS2VybWl0IGZyb20gZGV0ZWN0aW5nIHdoZW4gdGhlIGxpbmUgaXMKLSAgICAgICBidXN5LiBU aGlzIGlzIGEgcHJvcGVydHkgb2YgdGhlIG1vZGVtLCBub3Qgb2YgS2VybWl0LgotCi0yLjEuNy4g VHJpbW1pbmcgdGhlIERpYWxpbmcgRGlhbG9nCi0KLSAgIFRoZSBjb21tYW5kOgotCi0gIFNFVCBN T0RFTSBDT01NQU5EIGFjdGlvbiBbIGNvbW1hbmQgXQotCi0gICBpcyB1c2VkIHRvIG92ZXJyaWRl IEtlcm1pdCdzIGJ1aWx0LWluIG1vZGVtIGNvbW1hbmRzIGZvciBlYWNoIGFjdGlvbiwKLSAgIGZv ciBlYWNoIGtpbmQgb2YgbW9kZW0gaW4gaXRzIGludGVybmFsIGRhdGFiYXNlLiBJZiB5b3UgaW5j bHVkZSBhCi0gICBjb21tYW5kLCB0aGlzIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgYnVpbHQtaW4g b25lLiBJZiB5b3Ugb21pdCB0aGUKLSAgIGNvbW1hbmQsIHRoaXMgcmVzdG9yZXMgdGhlIG9yaWdp bmFsIGJ1aWx0LWluIGNvbW1hbmQuCi0KLSAgIElmIHlvdSB3YW50IHRvIG9taXQgdGhlIGNvbW1h bmQgYWx0b2dldGhlciwgc28gS2VybWl0IGRvZXNuJ3Qgc2VuZCB0aGUKLSAgIGNvbW1hbmQgYXQg YWxsLCBvciB3YWl0IGZvciBhIHJlc3BvbnNlLCB1c2U6Ci0KLSAgU0VUIE1PREVNIENPTU1BTkQg YWN0aW9uIHt9Ci0KLSAgIFRoYXQgaXMsIHNwZWNpZnkgYSBwYWlyIG9mIGVtcHR5IGJyYWNlcyBh cyB0aGUgY29tbWFuZCwgZm9yIGV4YW1wbGU6Ci0KLSAgU0VUIE1PREVNIENPTU1BTkQgRVJST1It Q09SUkVDVElPTiBPTiB7fQotCi0yLjEuOC4gQ29udHJvbGxpbmcgdGhlIERpYWxpbmcgU3BlZWQK LQotICAgVGhlIHJhdGUgYXQgd2hpY2ggY2hhcmFjdGVycyBhcmUgc2VudCB0byB0aGUgbW9kZW0g ZHVyaW5nIGRpYWxpbmcgaXMKLSAgIG5vcm1hbGx5IGNvbnRyb2xsZWQgYnkgdGhlIGJ1aWx0LWlu IG1vZGVtIGRhdGFiYXNlLiBZb3UgbWlnaHQgd2FudCB0bwotICAgb3ZlcnJpZGUgdGhpcyBpZiBL ZXJtaXQgc2VlbXMgdG8gYmUgZGlhbGluZyB0b28gc2xvd2x5LCBvciBpdCBpcwotICAgc2VuZGlu ZyBjaGFyYWN0ZXJzIHRvIHRoZSBtb2RlbSBmYXN0ZXIgdGhhbiB0aGUgbW9kZW0gaGFuZGxlIHRo ZW0uIEEKLSAgIG5ldyBjb21tYW5kIHdhcyBhZGRlZCBmb3IgdGhpcyBpbiBDLUtlcm1pdCA3LjA6 Ci0KLSAgIFNFVCBESUFMIFBBQ0lORyBudW1iZXIKLSAgICAgICAgICBTcGVjaWZpZXMgdGhlIG51 bWJlciBvZiBtaWxsaXNlY29uZHMgKHRob3VzYW5kdGhzIG9mIHNlY29uZHMpIHRvCi0gICAgICAg ICAgcGF1c2UgYmV0d2VlbiBlYWNoIGNoYXJhY3RlciB3aGVuIHNlbmRpbmcgY29tbWFuZHMgdG8g dGhlIG1vZGVtCi0gICAgICAgICAgZHVyaW5nIERJQUwgb3IgQU5TV0VSIGNvbW1hbmQgZXhlY3V0 aW9uLiAwIG1lYW5zIG5vIHBhdXNlIGF0Ci0gICAgICAgICAgYWxsLCAtMSAodGhlIGRlZmF1bHQp IG9yIGFueSBvdGhlciBuZWdhdGl2ZSBudW1iZXIgbWVhbnMgdG8gdXNlCi0gICAgICAgICAgdGhl IHZhbHVlIGZyb20gdGhlIGRhdGFiYXNlLiBBbnkgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwIGlzIHRo ZQotICAgICAgICAgIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gcGF1c2UuCi0KLSAgIEhJTlQ6 IFlvdSBtaWdodCBhbHNvIG5lZWQgdG8gY29udHJvbCB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgbW9k ZW0KLSAgIGdlbmVyYXRlcyBUb3VjaCBUb25lcyBkdXJpbmcgZGlhbGluZywgZm9yIGV4YW1wbGUg d2hlbiBzZW5kaW5nIGEKLSAgIG51bWVyaWMgcGFnZS4gVGhlcmUgYXJlIHR3byB3YXlzIHRvIGRv IHRoaXMuIE9uZSB3YXkgaXMgdG8gaW5zZXJ0IHBhdXNlCi0gICBjaGFyYWN0ZXJzIGludG8gdGhl IGRpYWxpbmcgc3RyaW5nLiBGb3IgbW9kZW1zIHRoYXQgdXNlIHRoZSBBVCBjb21tYW5kCi0gICBz ZXQsIHRoZSBwYXVzZSBjaGFyYWN0ZXIgaXMgY29tbWEgKCwpIGFuZCBjYXVzZXMgYSAyLXNlY29u ZCBwYXVzZS4gT24KLSAgIG1vc3QgbW9kZW1zLCB5b3UgY2FuIHVzZSB0aGUgUzggcmVnaXN0ZXIg dG8gY2hhbmdlIHRoZSBwYXVzZSBpbnRlcnZhbAotICAgY2F1c2VkIGJ5IGNvbW1hIGluIHRoZSBk aWFsaW5nIHN0cmluZy4gVGhlIG90aGVyIHdheSBpcyB0byBzZXQgeW91cgotICAgbW9kZW0ncyB0 b25lIGdlbmVyYXRpb24gaW50ZXJ2YWwsIGlmIGl0IGhhcyBhIGNvbW1hbmQgZm9yIHRoYXQuIE1v c3QKLSAgIEFULWNvbW1hbmQtc2V0IG1vZGVtcyB1c2UgUzExIGZvciB0aGlzOyB0aGUgdmFsdWUg aXMgaW4gbWlsbGlzZWNvbmRzLgotICAgRm9yIGV4YW1wbGUgb24gVVNSIG1vZGVtczoKLQotICBB VFMxMT0yMDAKLQotICAgc2VsZWN0cyBhbiBpbnRlcnZhbCBvZiAyMDAgbWlsbGlzZWNvbmRzIHRv IHNlcGFyYXRlIGVhY2ggZGlhbGluZyB0b25lLgotCi0gICBIaW50OiBUbyBhZGQgUy1SZWdpc3Rl ciBzZXR0aW5ncyBvciBvdGhlciBjb21tYW5kcyB0byB5b3VyIGRpYWxpbmcKLSAgIHByb2NlZHVy ZSwgdXNlIHRoZSBuZXcgU0VUIE1PREVNIENPTU1BTkQgUFJFRElBTC1JTklUIGNvbW1hbmQKLSAg IChbMzk2XVNlY3Rpb24gMi4yLjIpLgotCi0yLjEuOS4gUHJldGVzdGluZyBQaG9uZSBOdW1iZXIg Q29udmVyc2lvbnMKLQotICAgVGhlIExPT0tVUCBjb21tYW5kIG5vdyBhY2NlcHRzIHRlbGVwaG9u ZSBudW1iZXJzIGFzIHdlbGwgYXMKLSAgIGRpcmVjdG9yeS1lbnRyeSBuYW1lcywgZm9yIGV4YW1w bGU6Ci0KLSAgTE9PS1VQICsxICgyMTIpIDc2NTQzMjEKLQotICAgV2hlbiBnaXZlbiBhIHBob25l IG51bWJlciwgTE9PS1VQIHByaW50cyB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgdGhlCi0gICBw aG9uZSBudW1iZXIgZm9yIGRpYWxpbmcgdW5kZXIgdGhlIGN1cnJlbnQgZGlhbGluZyBydWxlcy4g Rm9yIGV4YW1wbGUsCi0gICBpZiBteSBjb3VudHJ5IGNvZGUgaXMgMSBhbmQgbXkgYXJlYSBjb2Rl IGlzIDIxMiwgYW5kIEkgYW0gZGlhbGluZyBvdXQKLSAgIGZyb20gYSBQQlggd2hvc2Ugb3V0c2lk ZS1saW5lIHByZWZpeCBpcyAiOTMsIjoKLQotICBDLUtlcm1pdD4gbG9va3VwICsxICgyMTIpIDc2 NTQzMjEKLSAgKzEgKDIxMikgNzY1NDMyMSA9PiA5Myw3NjU0MzIxCi0gIEMtS2VybWl0PgotCi0g ICBZb3UgY2FuIGFsc28gdXNlIHRoZSBcZmRpYWxjb252ZXJ0KHBob25lLW51bWJlcikgZnVuY3Rp b24gKFszOTddU2VjdGlvbgotICAgMi4xLjExKSB0byBkbyB0aGlzIHByb2dyYW1tYXRpY2FsbHk6 Ci0KLSAgQy1LZXJtaXQ+IGVjaG8gIlxmZGlhbGNvbnZlcnQoKzEgKDIxMikgNzY1NDMyMSkiCi0g ICI5Myw3NjU0MzIxIgotICBDLUtlcm1pdD4KLQotICAgU28gdGhlIG5ldyBMT09LVVAgYmVoYXZl cyBhcyBmb2xsb3dzOgotCi0gICBMT09LVVAgcG9ydGFibGUtZm9ybWF0LXBob25lLW51bWJlcgot ICAgICAgICAgIERpc3BsYXlzIGhvdyB0aGUgbnVtYmVyIHdvdWxkIGFjdHVhbGx5IGJlIGRpYWxl ZCBTZXRzIEZBSUxVUkUgaWYKLSAgICAgICAgICB0aGVyZSB3YXMgYSBjb252ZXJzaW9uIGVycm9y LCBvdGhlcndpc2UgU1VDQ0VTUy4KLQotICAgTE9PS1VQIGxpdGVyYWwtZm9ybWF0LXBob25lLW51 bWJlcgotICAgICAgICAgIERpc3BsYXlzIHRoZSBzYW1lIGxpdGVyYWwtZm9ybWF0LXBob25lLW51 bWJlciBBbHdheXMgc2V0cwotICAgICAgICAgIFNVQ0NFU1MuCi0KLSAgIExPT0tVUCBkaWFsaW5n LWRpcmVjdG9yeS1uYW1lCi0gICAgICAgICAgRGlzcGxheXMgYWxsIG1hdGNoaW5nIGVudHJpZXMg YW5kIGNvbnZlcnRzIHBvcnRhYmxlIHBob25lCi0gICAgICAgICAgbnVtYmVycy4gU2V0cyBTVUND RVNTIGlmIGF0IGxlYXN0IG9uZSBlbnRyeSB3YXMgZm91bmQsIG90aGVyd2lzZQotICAgICAgICAg IEZBSUxVUkUuCi0KLSAgIExPT0tVUCA9YW55dGhpbmcKLSAgICAgICAgICBEaXNwbGF5cyAiPWFu eXRoaW5nIiBhbmQgc2V0cyBTVUNDRVNTLgotCi0gICBUaGVyZSBpcywgYXQgcHJlc2VudCwgbm8g cHJvZ3JhbW1hdGljIHdheSB0byBmZXRjaCBudW1iZXJzIGZyb20gdGhlCi0gICBkaWFsaW5nIGRp cmVjdG9yeS4gVGhpcyB3aWxsIGJlIGNvbnNpZGVyZWQgZm9yIGEgZnV0dXJlIHJlbGVhc2UuCi0K LTIuMS4xMC4gR3JlYXRlciBDb250cm9sIG92ZXIgUGFydGlhbCBEaWFsaW5nCi0KLSAgIFRoZSBm b2xsb3dpbmcgcnVsZXMgbm93IGFwcGx5IHRvIHBhcnRpYWwgZGlhbGluZzoKLQotICAgICAqIFBo b25lIG51bWJlciB0cmFuc2Zvcm1hdGlvbnMgYmFzZWQgb24gY291bnRyeSBhbmQgYXJlYSBjb2Rl LAotICAgICAgIGFwcGxpY2F0aW9uIG9mIHByZWZpeGVzLCBldGMsIGFyZSBwZXJmb3JtZWQgb25s eSBvbiB0aGUgZmlyc3QKLSAgICAgICBQRElBTC4KLSAgICAgKiBFYWNoIFBESUFMIGFyZ3VtZW50 IGlzIGxvb2tlZCB1cCBpbiB0aGUgZGlhbGluZyBkaXJlY3RvcnksIHNvIGl0IGlzCi0gICAgICAg cG9zc2libGUgaGF2ZSBkaXJlY3RvcnkgZW50cmllcyBmb3IgcGllY2VzIG9mIHBob25lIG51bWJl cnMgb3IKLSAgICAgICBvdGhlciBpbmZvcm1hdGlvbi4KLSAgICAgKiBTdWZmaXhlcyBhcmUgbm90 IGFwcGxpZWQgYXV0b21hdGljYWxseSwgc2luY2UgdGhlcmUgaXMgbm8gd2F5IGZvcgotICAgICAg IEMtS2VybWl0IHRvIGtub3cgaW4gd2hpY2ggUERJQUwgc2VnbWVudCB5b3Ugd2FudCB0aGVtIHRv IGJlCi0gICAgICAgYXBwbGllZC4KLQotICAgSG93ZXZlciwgdGhlIHN1ZmZpeCB0aGF0ICp3b3Vs ZCogaGF2ZSBiZWVuIGFwcGxpZWQsIGJhc2VkIG9uIHRoZQotICAgZGlhbGluZyBydWxlcyB0aGF0 IHdlcmUgaW52b2tlZCB3aGVuIHByb2Nlc3NpbmcgdGhlIGZpcnN0IFBESUFMCi0gICBjb21tYW5k LCBpcyBzdG9yZWQgaW4gdGhlIHZhcmlhYmxlOgotCi0gIFx2KGRpYWxzdWZmaXgpCi0KLSAgIHdo aWNoIHlvdSBjYW4gaW5jbHVkZSBpbiBhbnkgc3Vic2VxdWVudCBQRElBTCBvciBESUFMIGNvbW1h bmRzLgotCi0gICBFeGFtcGxlOgotCi0gIHBkaWFsIHtcbShteV9sb25nX2Rpc3RhbmNlX3BhZ2Vy X251bWJlcl9wYXJ0XzEpfQotICBwZGlhbCB7XG0obXlfbG9uZ19kaXN0YW5jZV9wYWdlcl9udW1i ZXJfcGFydF8yKX0KLSAgcGRpYWwge1x2KGRpYWxzdWZmaXgpfQotICBwZGlhbCB7XG0obXlfbG9u Z19kaXN0YW5jZV9wYWdlcl9udW1iZXJfcGFydF8zKX0KLSAgcGRpYWwge0BcbShudW1lcmljX3Bh Z2VyX2NvZGUpI30KLQotMi4xLjExLiBOZXcgRElBTC1yZWxhdGVkIFZhcmlhYmxlcyBhbmQgRnVu Y3Rpb25zCi0KLSAgIFxmZGlhbGNvbnZlcnQocykKLSAgICAgICAgICBzIGlzIGEgcGhvbmUgbnVt YmVyIGluIGVpdGhlciBsaXRlcmFsIG9yIHBvcnRhYmxlIGZvcm1hdCAobm90IGEKLSAgICAgICAg ICBkaWFsaW5nIGRpcmVjdG9yeSBlbnRyeSBuYW1lKS4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhl IGRpYWwKLSAgICAgICAgICBzdHJpbmcgdGhhdCB3b3VsZCBhY3R1YWxseSBiZSB1c2VkIGJ5IHRo ZSBESUFMIGNvbW1hbmQgd2hlbgotICAgICAgICAgIGRpYWxpbmcgZnJvbSB0aGUgY3VycmVudCBs b2NhdGlvbiwgYWZ0ZXIgcHJvY2Vzc2luZyBjb3VudHJ5Ci0gICAgICAgICAgY29kZSwgYXJlYSBj b2RlLCBhbmQgb3RoZXIgU0VUIERJQUwgdmFsdWVzLCBhbmQgc2hvdWxkIGJlIHRoZQotICAgICAg ICAgIHNhbWUgYXMgdGhlIHJlc3VsdCBvZiBMT09LVVAgd2hlbiBnaXZlbiBhIHRlbGVwaG9uZSBu dW1iZXIuCi0KLSAgIFx2KGRpYWxzdWZmaXgpCi0gICAgICAgICAgQ29udGFpbnMgdGhlIHN1ZmZp eCwgaWYgYW55LCB0aGF0IHdhcyBhcHBsaWVkIGluIHRoZSBtb3N0IHJlY2VudAotICAgICAgICAg IERJQUwgY29tbWFuZCwgb3IgdGhlIHN1ZmZpeCB0aGF0IHdvdWxkIGhhdmUgYmVlbiBhcHBsaWVk IGluIHRoZQotICAgICAgICAgIG1vc3QgcmVjZW50IFBESUFMIGNvbW1hbmQuIFVzZSB0aGlzIHZh cmlhYmxlIHRvIHNlbmQgdGhlIGRpYWwKLSAgICAgICAgICBzdWZmaXggYXQgYW55IGRlc2lyZWQg cG9pbnQgaW4gYSBQRElBTCBzZXF1ZW5jZS4KLQotICAgXHYoZGlhbHR5cGUpCi0gICAgICAgICAg QSBudW1iZXIgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBjYWxsIHRoYXQgd2FzIG1vc3QgcmVjZW50 bHkKLSAgICAgICAgICBwbGFjZWQuIENhbiBiZSB1c2VkIGFmdGVyIGEgbm9ybWFsIERJQUwgY29t bWFuZCwgb3IgYWZ0ZXIgdGhlCi0gICAgICAgICAgZmlyc3QgUERJQUwgY29tbWFuZCBpbiBhIFBE SUFMIHNlcXVlbmNlLiBWYWx1ZXMgYXJlOgotCi0gIC0yOiBVbmtub3duIGJlY2F1c2UgVEFQSSBo YW5kbGVkIHRoZSBwaG9uZSBudW1iZXIgdHJhbnNsYXRpb24uCi0gIC0xOiBVbmtub3duIGJlY2F1 c2Ugc29tZSBraW5kIG9mIGVycm9yIG9jY3VycmVkLgotICAgMDogSW50ZXJuYWwgd2l0aGluIFBC WC4KLSAgIDE6IFRvbGwtZnJlZS4KLSAgIDI6IExvY2FsIHdpdGhpbiBjYWxsaW5nIGFyZWEuCi0g ICAzOiBVbmtub3duIChlLmcuIGJlY2F1c2UgYSBsaXRlcmFsLWZvcm1hdCBwaG9uZSBudW1iZXIg d2FzIGdpdmVuKS4KLSAgIDQ6IExvbmcgZGlzdGFuY2Ugd2l0aGluIGNvdW50cnkuCi0gICA1OiBJ bnRlcm5hdGlvbmFsCi0KLSAgIFx2KGRpYWxjb3VudCkKLSAgICAgICAgICBUaGUgY3VycmVudCB2 YWx1ZSBvZiB0aGUgRElBTCByZXRyeSBjb3VudGVyLCBmb3IgdXNlIGluIGEgRElBTAotICAgICAg ICAgIG1hY3JvIChbMzk4XVNlY3Rpb24gMi4xLjEzKS4KLQotICAgXHYoZCRweCkKLSAgICAgICAg ICBQQlggRXhjaGFuZ2UgKHNlZSBbMzk5XVNlY3Rpb24gMi4xLjEyKS4KLQotICAgT3RoZXIgZGlh bC1yZWxhdGVkIHZhcmlhYmxlcywgYWxyZWFkeSBkb2N1bWVudGVkIGluIFs0MDBdVXNpbmcgQy1L ZXJtaXQKLSAgIChvciBvdGhlciBzZWN0aW9ucyBvZiB0aGlzIGRvY3VtZW50LCBlLmcuIFs0MDFd U2VjdGlvbiAyLjEuMSksIGluY2x1ZGUKLSAgIFx2KGRpYWxudW1iZXIpLCBcdihkaWFsc3RhdHVz KSwgZXRjLiBBIGNvbnZlbmllbnQgd2F5IHRvIGRpc3BsYXkgYWxsIG9mCi0gICB0aGVtIGlzOgot Ci0gIHNob3cgdmFyaWFibGUgZGlhbCAgOyBoaW50OiBhYmJyZXZpYXRlICJzaG8gdmFyIGRpYWwi Ci0KLSAgIFRoaXMgc2hvd3MgdGhlIHZhbHVlcyBvZiBhbGwgdGhlIHZhcmlhYmxlcyB3aG9zZSBu YW1lcyBzdGFydCB3aXRoCi0gICAiZGlhbCIuIEFsc28gInNob3cgdmFyaWFibGUgZCQiICh0byBz aG93IHRoZSBcdihkJC4uLikgdmFyaWFibGVzKS4KLQotMi4xLjEyLiBJbmNyZWFzZWQgRmxleGli aWxpdHkgb2YgUEJYIERpYWxpbmcKLQotICAgUmVmZXIgdG8gWzQwMl1Vc2luZyBDLUtlcm1pdCwg Mm5kIEVkaXRpb24sIHBhZ2VzIDEwNy0xMDguIFJlY2FsbCB0aGF0Ci0gICB0aHJlZSBjb21tYW5k cyBhcmUgbmVlZGVkIHRvIGNvbmZpZ3VyZSBDLUtlcm1pdCBmb3IgZGlhbGluZyBmcm9tIGEgUEJY OgotCi0gIFNFVCBESUFMIFBCWC1FWENIQU5HRSBudW1iZXIKLSAgU0VUIERJQUwgUEJYLUlOU0lE RS1QUkVGSVggbnVtYmVyCi0gIFNFVCBESUFMIFBCWC1PVVRTSURFLVBSRUZJWCBudW1iZXIKLQot ICAgVW5mb3J0dW5hdGVseSwgdGhpcyBtb2RlbCBkb2VzIG5vdCBhY2NvbW1vZGF0ZSBQQlhzIHRo YXQgaGF2ZSBtb3JlIHRoYW4KLSAgIG9uZSBleGNoYW5nZS4gRm9yIGV4YW1wbGUgb3VyIFBCWCBh dCBDb2x1bWJpYSBVbml2ZXJzaXR5ICh3aGljaCBtdXN0Ci0gICBoYW5kbGUgbW9yZSB0aGFuIDEw LDAwMCBwaG9uZXMpIGhhcyA4NTMteHh4eCBhbmQgODU0LXh4eHggZXhjaGFuZ2VzLgotCi0gICBC ZWdpbm5pbmcgaW4gQy1LZXJtaXQgNy4wLCB0aGUgU0VUIERJQUwgUEJYLUVYQ0hBTkdFIGNvbW1h bmQgYWNjZXB0cyBhCi0gICBsaXN0IG9mIGV4Y2hhbmdlcywgZS5nLjoKLQotICBTRVQgRElBTCBQ QlgtRVhDSEFOR0UgODUzIDg1NAotCi0gICAobXVsdGlwbGUgZXhjaGFuZ2VzIGFyZSBzZXBhcmF0 ZWQgYnkgc3BhY2VzLCBub3QgY29tbWFzKS4KLQotICAgU28gbm93IHdoZW4gZGlhbGluZyBhIHBv cnRhYmxlLWZvcm1hdCBudW1iZXIgdGhhdCBoYXMgdGhlIHNhbWUgY291bnRyeQotICAgYW5kIGFy ZWEgY29kZXMgYXMgdGhvc2Ugb2YgeW91ciBkaWFsaW5nIGxvY2F0aW9uLCBDLUtlcm1pdCBjb21w YXJlcyB0aGUKLSAgIGV4Y2hhbmdlIG9mIHRoZSBkaWFsZWQgbnVtYmVyIHdpdGggZWFjaCBudW1i ZXIgaW4gdGhlIFBCWCBFeGNoYW5nZSBsaXN0Ci0gICAocmF0aGVyIHRoYW4gd2l0aCBhIHNpbmds ZSBQQlggRXhjaGFuZ2UgbnVtYmVyLCBhcyBpdCBkaWQgZm9ybWVybHkpIHRvCi0gICBkZXRlcm1p bmUgd2hldGhlciB0aGlzIGlzIGFuIGludGVybmFsIFBCWCBudW1iZXIgb3IgYW4gZXh0ZXJuYWwg Y2FsbC4KLSAgIElmIGl0IGlzIGFuIGV4dGVybmFsIGNhbGwsIHRoZW4gdGhlIFBCWCBPdXRzaWRl IFByZWZpeCBpcyBhcHBsaWVkLCBhbmQKLSAgIHRoZW4gdGhlIG5vcm1hbCBkaWFsaW5nIHJ1bGVz IGZvciBsb2NhbCBvciBsb25nLWRpc3RhbmNlIGNhbGxzLgotCi0gICBJZiBpdCBpcyBhbiBpbnNp ZGUgY2FsbCwgdGhlIGV4Y2hhbmdlIGlzIHJlcGxhY2VkIGJ5IHRoZSBQQlggSW5zaWRlCi0gICBQ cmVmaXguIEJ1dCBpZiB0aGUgUEJYIGhhcyBtb3JlIHRoYW4gb25lIGV4Y2hhbmdlLCBhIHNpbmds ZSBmaXhlZCBQQlgKLSAgIEluc2lkZSBQcmVmaXggaXMgcHJvYmFibHkgbm90IHN1ZmZpY2llbnQu IEZvciBleGFtcGxlLCBhdCBDb2x1bWJpYQotICAgVW5pdmVyc2l0eSwgd2UgbXVzdCBkaWFsIDMt eHh4eCBmb3IgYW4gaW50ZXJuYWwgY2FsbCB0byA4NTMteHh4eCwgYnV0Ci0gICA0LXh4eHggZm9y IGEgY2FsbCB0byA4NTQteHh4eC4gVGhhdCBpcywgdGhlIGluc2lkZSBwcmVmaXggaXMgdGhlIGZp bmFsCi0gICBkaWdpdCBvZiB0aGUgZXhjaGFuZ2Ugd2UgYXJlIGRpYWxpbmcuIEZvciB0aGlzIHJl YXNvbiwgQy1LZXJtaXQgNy4wCi0gICBwcm92aWRlcyBhIG1ldGhvZCB0byBkZXRlcm1pbmUgdGhl IGluc2lkZSBwcmVmaXggZHluYW1pY2FsbHkgYXQgZGlhbGluZwotICAgdGltZSwgY29uc2lzdGlu ZyBvZiBhIG5ldyB2YXJpYWJsZSBhbmQgbmV3IHN5bnRheCBmb3IgdGhlIFNFVCBESUFMCi0gICBQ QlgtSU5TSURFLVBSRUZJWCBjb21tYW5kOgotCi0gICBcdihkJHB4KQotICAgICAgICAgIFRoaXMg dmFyaWFibGUgY29udGFpbnMgdGhlIGV4Y2hhbmdlIHRoYXQgd2FzIG1hdGNoZWQgd2hlbiBhIFBC WAotICAgICAgICAgIGludGVybmFsIGNhbGwgd2FzIGRldGVjdGVkLiBGb3IgZXhhbXBsZSwgaWYg dGhlIFBCWCBleGNoYW5nZQotICAgICAgICAgIGxpc3QgaXMgIjg1MyA4NTQiIGFuZCBhIGNhbGwg aXMgcGxhY2VkIHRvICsxICgyMTIpIDg1NC05OTk5LAotICAgICAgICAgIFx2KGQkcHgpIGlzIHNl dCB0byA4NTQuCi0KLSAgIFNFVCBESUFMIFBCWC1JTlNJREUtUFJFRklYIFxmeHh4KC4uLikKLSAg ICAgICAgICBJZiB0aGUgUEJYIEluc2lkZSBQcmVmaXggaXMgZGVmaW5lZCB0byBiZSBhIGZ1bmN0 aW9uLCBpdHMKLSAgICAgICAgICBldmFsdWF0aW9uIGlzIGRlZmVycmVkIHVudGlsIGRpYWxpbmcg dGltZS4gTm9ybWFsbHksIHRoaXMgd291bGQKLSAgICAgICAgICBiZSBhIHN0cmluZyBmdW5jdGlv biBoYXZpbmcgXHYoZCRweCkgYXMgYW4gb3BlcmFuZC4gT2YgY291cnNlLAotICAgICAgICAgIHlv dSBjYW4gc3RpbGwgc3BlY2lmeSBhIGNvbnN0YW50IHN0cmluZywgYXMgYmVmb3JlLgotCi0gICBT byBnaXZlbiB0aGUgZm9sbG93aW5nIHNldHVwOgotCi0gIFNFVCBESUFMIENPVU5UUlktQ09ERSAx Ci0gIFNFVCBESUFMIEFSRUEtQ09ERSAyMTIKLSAgU0VUIERJQUwgUEJYLU9VVFNJREUtUFJFRklY IDkzLAotICBTRVQgRElBTCBQQlgtRVhDSEFOR0UgODUzIDg1NAotICBTRVQgRElBTCBQQlgtSU5T SURFLVBSRUZJWCBcZnJpZ2h0KFx2KGQkcHgpLDEpCi0KLSAgIFRoZSBmb2xsb3dpbmcgbnVtYmVy cyBnaXZlIHRoZSByZXN1bHRzIGluZGljYXRlZDoKLQotIE51bWJlciAgICAgICAgICAgICAgICAg ICBSZXN1bHQKLSAgKzEgKDIxMikgODU0LTk4NzYgICAgICAgIDQtOTg3NgotICArMSAoMjEyKSA4 NTMtMTIzNCAgICAgICAgMy0xMjM0Ci0gICsxICgyMTIpIDc2NS00MzIxICAgICAgICA5Myw3NjUt NDMyMQotICArMSAoMzMzKSA3NjUtNDMyMSAgICAgICAgOTMsMTMzMzc2NS00MzIxCi0KLSAgIEZ1 cnRoZXJtb3JlLCB0aGUgS19QQlhfWENIIGVudmlyb25tZW50IHZhcmlhYmxlIG1heSBub3cgYmUg c2V0IHRvIGEKLSAgIGxpc3Qgb2YgZXhjaGFuZ2VzIHRvIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6 ZSBDLUtlcm1pdCdzIFBCWCBleGNoYW5nZQotICAgbGlzdCwgZm9yIGV4YW1wbGUgKGluIFVOSVgg a3NoIG9yIGJhc2gpOgotCi0gIGV4cG9ydCBLX1BCWF9YQ0g9Ijg1MyA4NTQiCi0KLSAgIChRdW90 ZXMgcmVxdWlyZWQgYmVjYXVzZSBvZiB0aGUgc3BhY2UuKSBPZiBjb3Vyc2UsIHRoaXMgdmFyaWFi bGUgY2FuCi0gICBhbHNvIGJlIHNldCB0byBhIHNpbmdsZSBleGNoYW5nZSwgYXMgYmVmb3JlOgot Ci0gIGV4cG9ydCBLX1BCWF9YQ0g9ODUzCi0KLTIuMS4xMy4gVGhlIERJQUwgbWFjcm8gLSBMYXN0 LU1pbnV0ZSBQaG9uZSBOdW1iZXIgQ29udmVyc2lvbnMKLQotICAgQWZ0ZXIgYSBESUFMIG9yIExP T0tVUCBjb21tYW5kIGlzIGdpdmVuLCBhIGxpc3Qgb2YgcGhvbmUgbnVtYmVycyBpcwotICAgYXNz ZW1ibGVkIGZyb20gdGhlIGRpYWxpbmcgZGlyZWN0b3J5IChpZiBhbnkpLCB3aXRoIGFsbAotICAg bG9jYXRpb24tZGVwZW5kZW50IGNvbnZlcnNpb24gcnVsZXMgYXBwbGllZCBhcyBkZXNjcmliZWQg aW4gQ2hhcHRlciA1Ci0gICBvZiBbNDAzXVVzaW5nIEMtS2VybWl0LgotCi0gICBIb3dldmVyLCBh ZGRpdGlvbmFsIGNvbnZlcnNpb25zIG1pZ2h0IHN0aWxsIGJlIHJlcXVpcmVkIGF0IHRoZSBsYXN0 Ci0gICBtaW51dGUgYmFzZWQgb24gbG9jYWwgb3IgZXBoZW1lcmFsIGNvbmRpdGlvbnMuIFNvIHRo YXQgeW91IGNhbiBoYXZlIHRoZQotICAgZmluYWwgd29yZCBvbiB0aGUgZXhhY3QgZm9ybWF0IG9m IHRoZSBkaWFsIHN0cmluZywgQy1LZXJtaXQgNy4wIGxldHMKLSAgIHlvdSBwYXNzIHRoZSBjb252 ZXJ0ZWQgc3RyaW5nIHRocm91Z2ggYSBtYWNybyBvZiB5b3VyIG93biBkZXNpZ24gZm9yCi0gICBm aW5hbCBwcm9jZXNzaW5nIGJlZm9yZSBkaWFsaW5nLiBUaGUgcmVsZXZhbnQgY29tbWFuZCBpczoK LQotICAgU0VUIERJQUwgTUFDUk8gWyBuYW1lIF0KLSAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5h bWUgb2YgYSBtYWNybyB0byBiZSBydW4gb24gZWFjaCBwaG9uZSBudW1iZXIKLSAgICAgICAgICBh ZnRlciBhbGwgYnVpbHQtaW4gY29udmVyc2lvbnMgaGF2ZSBiZWVuIGFwcGxpZWQsIGp1c3QgYmVm b3JlCi0gICAgICAgICAgdGhlIG51bWJlciBpcyBkaWFsZWQuIElmIG5vIG5hbWUgaXMgZ2l2ZW4s IG5vIG1hY3JvIGlzIHJ1bi4gVGhlCi0gICAgICAgICAgcGhvbmUgbnVtYmVyLCBhcyBpdCB3b3Vs ZCBoYXZlIGJlZW4gZGlhbGVkIGlmIHRoZXJlIHdlcmUgbm8gZGlhbAotICAgICAgICAgIG1hY3Jv LCBpcyBwYXNzZWQgdG8gdGhlIG1hY3JvLgotCi0gICBUaGUgZGlhbCBtYWNybyBjYW4gZG8gYW55 dGhpbmcgYXQgYWxsIChleGNlcHQgc3RhcnQgYSBmaWxlIHRyYW5zZmVyKS4KLSAgIEhvd2V2ZXIs IHRoZSBub3JtYWwgdXNlIGZvciB0aGUgbWFjcm8gd291bGQgYmUgdG8gbW9kaWZ5IHRoZSBwaG9u ZQotICAgbnVtYmVyLiBGb3IgdGhpcyByZWFzb24gdGhlIHBob25lIG51bWJlciBpcyBwYXNzZWQg dG8gdGhlIG1hY3JvIGFzCi0gICBhcmd1bWVudCBudW1iZXIgMSAoXCUxKS4gVG8gY2F1c2UgYSBt b2RpZmllZCBudW1iZXIgdG8gYmUgZGlhbGVkLCB0aGUKLSAgIG1hY3JvIHNob3VsZCB0ZXJtaW5h dGUgd2l0aCBhIFJFVFVSTiBzdGF0ZW1lbnQgc3BlY2lmeWluZyBhIHJldHVybgotICAgdmFsdWUu IFRvIGxlYXZlIHRoZSBudW1iZXIgYWxvbmUsIHRoZSBtYWNybyBzaG91bGQgc2ltcGx5IGVuZC4g RXhhbXBsZToKLQotICBkZWZpbmUgeHh4IHJldHVybiAxMDEwODg4OTk5OSRcJTEKLSAgc2V0IGRp YWwgbWFjcm8geHh4Ci0gIGRpYWwgeHl6Y29ycAotCi0gICBUaGlzIGRlZmluZXMgYSBESUFMIE1B Q1JPIGNhbGxlZCB4eHgsIHdoaWNoIHB1dHMgYW4gYWNjZXNzIGNvZGUgb24gdGhlCi0gICBmcm9u dCBvZiB0aGUgbnVtYmVyLiBBbm90aGVyIGV4YW1wbGUgbWlnaHQgYmU6Ci0KLSAgZGVmIHh4eCBp ZiBlcXVhbCAiXHYobW9kZW0pIiAiaGF5ZXMtMTIwMCIgcmV0dXJuIFxmcmVwbGFjZShcJTEsJCx7 LCwsLCx9KQotICBzZXQgZGlhbCBtYWNybyB4eHgKLSAgZGlhbCB4eXpjb3JwCi0KLSAgIHdoaWNo IHJlcGxhY2VzIGFueSBkb2xsYXItc2lnbiBpbiB0aGUgZGlhbCBzdHJpbmcgYnkgYSBzZXJpZXMg b2YgZml2ZQotICAgY29tbWFzLCBlLmcuIGJlY2F1c2UgdGhpcyBwYXJ0aWN1bGFyIG1vZGVtIGRv ZXMgbm90IHN1cHBvcnQgdGhlICJ3YWl0Ci0gICBmb3IgYm9uZyIgZmVhdHVyZSAocmVtZW1iZXIg dGhhdCBjb21tYXMgdGhhdCBhcmUgdG8gYmUgaW5jbHVkZWQKLSAgIGxpdGVyYWxseSBpbiBmdW5j dGlvbiBhcmd1bWVudHMgbXVzdCBiZSBlbmNsb3NlZCBpbiBicmFjZXMgdG8KLSAgIGRpc3Rpbmd1 aXNoIHRoZW0gZnJvbSB0aGUgY29tbWFzIHRoYXQgc2VwYXJhdGUgdGhlIGFyZ3VtZW50cykgYW5k IHdoZW4KLSAgIHRoZSBJRiBjb25kaXRpb24gaXMgbm90IHNhdGlzZmllZCwgdGhlIG1hY3JvIGRv ZXMgbm90IHJldHVybiBhIHZhbHVlLAotICAgYW5kIHNvIHRoZSBudW1iZXIgaXMgbm90IG1vZGlm aWVkLiBUaGVuIHdoZW4gYSBESUFMIGNvbW1hbmQgaXMgZ2l2ZW4KLSAgIHJlZmVyZW5jaW5nIGEg ZGlhbGluZyBkaXJlY3RvcnkgZW50cnksICJ4eXpjb3JwIi4gVGhlIG1hY3JvIGlzCi0gICBhdXRv bWF0aWNhbGx5IGFwcGxpZWQgdG8gZWFjaCBtYXRjaGluZyBudW1iZXIuCi0KLSAgIE51bWVyb3Vz IGRpYWwtLCBtb2RlbS0sIGNvbW11bmljYXRpb25zLSwgYW5kIHRpbWUtcmVsYXRlZCB2YXJpYWJs ZXMgYXJlCi0gICBhdmFpbGFibGUgZm9yIGRlY2lzaW9uIG1ha2luZyB5b3VyIGRpYWwgbWFjcm8u IFR5cGUgU0hPVyBWQVJJQUJMRVMgZm9yCi0gICBhIGxpc3QuIE9mIHBhcnRpY3VsYXIgaW50ZXJl c3QgaXMgdGhlIFx2KGRpYWxjb3VudCkgdmFyaWFibGUsIHdoaWNoCi0gICB0ZWxscyBob3cgbWFu eSB0aW1lcyB0aGUgRElBTCBjb21tYW5kIGdvbmUgdGhyb3VnaCBpdHMgcmV0cnkgbG9vcDogMSBv bgotICAgdGhlIGZpcnN0IHRyeSwgMiBvbiB0aGUgc2Vjb25kLCAzIG9uIHRoZSB0aGlyZCwgYW5k IHNvIG9uLCBhbmQgdGhlCi0gICBcdihkaWFscmVzdWx0KSBhbmQgXHYoZGlhbHN0YXR1cykgdmFy aWFibGVzLgotCi0gICBIZXJlIGFyZSBzb21lIG90aGVyIGFwcGxpY2F0aW9ucyBmb3IgdGhlIERJ QUwgTUFDUk8gKGZyb20gdXNlcnMpOgotCi0gICAgICogUGhvbmUgbnVtYmVycyBpbiB0aGUgZGlh bGluZyBkaXJlY3RvcnkgYXJlIGZvcm1hdHRlZCB3aXRoICctJyBmb3IKLSAgICAgICByZWFkYWJp bGl0eSwgYnV0IHNvbWUgbW9kZW1zIGRvbid0IGxpa2UgdGhlIGh5cGhlbnMsIHNvIHRoZSBESUFM Ci0gICAgICAgbWFjcm8gaXMgdXNlZCB0byByZW1vdmUgdGhlbSBiZWZvcmUgZGlhbGluZzsgZS5n IDAwOTAtMTIzLTQ1Ni03OC05OQotICAgICAgIGJlY29tZXMgMDA5MDEyMzQ1Njc4OTk6ICJkZWYg eHh4IHJldHVybiBcZnJlcGxhY2UoXCUxLC0pIi4KLSAgICAgKiBUbyBzZXQgc29tZSBzcGVjaWZp YyBtb2RlbSAob3Igb3RoZXIpIG9wdGlvbnMgZGVwZW5kaW5nIG9uIHRoZQotICAgICAgIGNhbGxl ZCBjdXN0b21lciBvciB0ZWxlcGhvbmUgbnVtYmVyLgotICAgICAqIENob29zaW5nIHRoZSBtb3N0 IGFwcHJvcHJpYXRlIHByb3ZpZGVyIGJhc2VkIG9uIChlLmcuKSB0aW1lIG9mIGRheSwKLSAgICAg ICBvciBjeWNsaW5nIHRocm91Z2ggYSBsaXN0IG9mIHByb3ZpZGVycyBpbiBjYXNlIHNvbWUgcHJv dmlkZXJzIG1pZ2h0Ci0gICAgICAgYmUgYnVzeS4KLQotICAgVG8gaWxsdXN0cmF0ZSB0aGUgZmlu YWwgaXRlbSwgc3VwcG9zZSB5b3UgaGF2ZSBhIGNob2ljZSBhbW9uZyBtYW55Ci0gICBwaG9uZSBz ZXJ2aWNlIHByb3ZpZGVyczsgdGhlIHByb3ZpZGVyIGlzIGNob3NlbiBieSBkaWFsaW5nIGFuIGFj Y2VzcwotICAgY29kZSBiZWZvcmUgdGhlIG51bWJlci4gRGlmZmVyZW50IHByb3ZpZGVycyBtaWdo dCBiZSBiZXR0ZXIgKGUuZy4KLSAgIGNoZWFwZXIpIGZvciBjZXJ0YWluIHRpbWVzIG9mIGRheSBv ciBkYXlzIG9mIHRoZSB3ZWVrLCBvciBmb3IgZGlhbGluZwotICAgY2VydGFpbiBsb2NhdGlvbnM7 IHlvdSBjYW4gdXNlIHRoZSBESUFMIG1hY3JvIHRvIGFkZCB0aGUgYWNjZXNzIGZvciB0aGUKLSAg IG1vc3QgZGVzaXJhYmxlIHByb3ZpZGVyLgotCi0gICBTaW1pbGFybHksIHdoZW4gdGhlIHNhbWUg bnVtYmVyIG1pZ2h0IGJlIHJlYWNoZWQgdGhyb3VnaCBtdWx0aXBsZQotICAgcHJvdmlkZXJzLCBp dCdzIHBvc3NpYmxlIHRoYXQgb25lIHByb3ZpZGVyIG1pZ2h0IG5vdCBiZSBhYmxlIHRvCi0gICBj b21wbGV0ZSB0aGUgY2FsbCwgYnV0IGFub3RoZXIgb25lIGNhbi4gSW4gdGhhdCBjYXNlLCB5b3Ug Y2FuIHVzZSB0aGUKLSAgIERJQUwgbWFjcm8gdG8gc3dpdGNoIHByb3ZpZGVycyBlYWNoIHRpbWUg dGhyb3VnaCB0aGUgRElBTCBsb29wIC0tCi0gICB0aGF0J3Mgd2hlcmUgdGhlIFx2KGRpYWxjb3Vu dCkgdmFyaWFibGUgY29tZXMgaW4gaGFuZHkuCi0KLSAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBj YW4gYmUgdXNlZCB0byBkZWJ1ZyB0aGUgRElBTCBtYWNybzoKLQotICAgU0VUIERJQUwgVEVTVCB7 IE9OLCBPRkYgfQotICAgICAgICAgIE5vcm1hbGx5IE9GRiwgc28gdGhlIERJQUwgY29tbWFuZCBh Y3R1YWxseSBkaWFscy4gV2hlbiBPTiwgdGhlCi0gICAgICAgICAgRElBTCBjb21tYW5kIHBlcmZv cm1zIGFsbCBsb29rdXBzIGFuZCBudW1iZXIgY29udmVyc2lvbnMsIGFuZAotICAgICAgICAgIHRo ZW4gZ29lcyB0aHJvdWdoIHRoZSBudW1iZXIgbGlzdCBhbmQgcmV0cnkgbG9vcCwgYnV0IGluc3Rl YWQgb2YKLSAgICAgICAgICBhY3R1YWxseSBkaWFsaW5nLCBsaXN0cyB0aGUgbnVtYmVycyBpdCB3 b3VsZCBoYXZlIGNhbGxlZCBpZiBub25lCi0gICAgICAgICAgb2YgdGhlIERJQUwgYXR0ZW1wdHMg c3VjY2VlZGVkIChvciBtb3JlIHByZWNpc2VseSwgZXZlcnkgbnVtYmVyCi0gICAgICAgICAgd2Fz IGFsd2F5cyBidXN5KS4KLQotMi4xLjE0LiBBdXRvbWF0aWMgVG9uZS9QdWxzZSBEaWFsaW5nIFNl bGVjdGlvbgotCi0gICBTRVQgRElBTCBNRVRIT0QgeyBBVVRPLCBERUZBVUxULCBQVUxTRSwgVE9O RSB9Ci0gICAgICAgICAgQ2hvb3NlcyB0aGUgZGlhbGluZyBtZXRob2QgZm9yIHN1YnNlcXVlbnQg Y2FsbHMuCi0KLSAgIFByaW9yIHRvIHZlcnNpb24gNy4wLCBDLUtlcm1pdCdzIERJQUwgTUVUSE9E IHdhcyBERUZBVUxUIGJ5IGRlZmF1bHQsCi0gICBtZWFuaW5nIGl0IGRvZXMgbm90IHNwZWNpZnkg YSBkaWFsaW5nIG1ldGhvZCB0byB0aGUgbW9kZW0sIGJ1dCByZWxpZXMKLSAgIG9uIHRoZSBtb2Rl bSB0byBoYXZlIGFuIGFwcHJvcHJpYXRlIGRlZmF1bHQgZGlhbGluZyBtZXRob2Qgc2V0LiBTbywg Zm9yCi0gICBleGFtcGxlLCB3aGVuIHVzaW5nIEhheWVzIGNvbXBhdGlibGUgbW9kZW1zLCB0aGUg ZGlhbCBzdHJpbmcgd291bGQgYmUKLSAgIHNvbWV0aGluZyBsaWtlIEFURDc2NTQzMjEsIHJhdGhl ciB0aGFuIEFURFQ3NjU0MzIxIG9yIEFURFA3NjU0MzIxLgotCi0gICBJbiBDLUtlcm1pdCA3LjAg YW5kIEs5NSAxLjEuMTksIHRoZSBkaWFsIG1ldGhvZCBjYW4gYmUgc2V0IGZyb20gdGhlCi0gICBl bnZpcm9ubWVudCB2YXJpYWJsZToKLQotICBLX0RJQUxfTUVUSE9ECi0KLSAgIHdoZW4gS2VybWl0 IHN0YXJ0cy4gVGhlIHZhbHVlcyBjYW4gYmUgVE9ORSwgUFVMU0UsIG9yIERFRkFVTFQsIGUuZy4K LSAgIChVTklYKToKLQotICBzZXQgS19ESUFMX01FVEhPRD1UT05FOyBleHBvcnQgS19ESUFMX01F VEhPRAotCi0gICBJbiB0aGUgYWJzZW5jZSBvZiBhIEtfRElBTF9NRVRIT0QgZGVmaW5pdGlvbiwg dGhlIG5ldyBkZWZhdWx0IFNFVCBESUFMCi0gICBNRVRIT0QgaXMgQVVUTyByYXRoZXIgdGhhbiBE RUZBVUxULiBXaGVuIERJQUwgTUVUSE9EIGlzIEFVVE8gYW5kIHRoZQotICAgbG9jYWwgY291bnRy eSBjb2RlIGlzIGtub3duLCB0aGVuIGlmIHRvbmUgZGlhbGluZyBpcyB1bml2ZXJzYWxseQotICAg YXZhaWxhYmxlIGluIHRoZSBjb3JyZXNwb25kaW5nIGFyZWEsIHRvbmUgZGlhbGluZyBpcyB1c2Vk OyBpZiBkaWFsaW5nCi0gICBmcm9tIGEgbG9jYXRpb24gd2hlcmUgcHVsc2UgZGlhbGluZyBpcyBt YW5kYXRvcnksIHB1bHNlIGRpYWxpbmcgaXMKLSAgIHVzZWQuCi0KLSAgIFRoZSAidG9uZSBjb3Vu dHJ5IiBhbmQgInB1bHNlIGNvdW50cnkiIGxpc3RzIGFyZSBwcmVsb2FkZWQgYWNjb3JkaW5nIHRv Ci0gICBvdXIga25vd2xlZGdlIGF0IHRoZSB0aW1lIG9mIHJlbGVhc2UuIFlvdSBjYW4gc2VlIHRo ZWlyIGNvbnRlbnRzIGluIHRoZQotICAgU0hPVyBESUFMIGxpc3RpbmcuIFlvdSBjYW4gY2hhbmdl IHRoZSBsaXN0cyB3aXRoOgotCi0gICBTRVQgRElBTCBUT05FLUNPVU5UUklFUyBbIGNjIFsgY2Mg WyAuLi4gXSBdIF0KLSAgICAgICAgICBSZXBsYWNlcyB0aGUgY3VycmVudCBUT05FLUNPVU5UUklF UyBsaXN0IHdpdGggdGhlIG9uZSBnaXZlbi4KLSAgICAgICAgICBFYWNoIGNjIGlzIGEgY291bnRy eSBjb2RlOyBzZXBhcmF0ZSB0aGVtIHdpdGggc3BhY2VzIChub3QKLSAgICAgICAgICBjb21tYXMp LiBFeGFtcGxlOgotCi0gIHNldCBkaWFsIHRvbmUtY291bnRyaWVzIDEgMzU4IDQ0IDQ2IDQ5Ci0K LSAgICAgICAgICBJZiBubyBjb3VudHJ5IGNvZGVzIGFyZSBnaXZlbiwgdGhlIGN1cnJlbnQgbGlz dCwgaWYgYW55LCBpcwotICAgICAgICAgIHJlbW92ZWQsIGluIHdoaWNoIGNhc2UgU0VUIERJQUwg TUVUSE9EIEFVVE8gaXMgZXF1aXZhbGVudCB0byBTRVQKLSAgICAgICAgICBESUFMIE1FVEhPRCBE RUZBVUxULgotCi0gICBTRVQgRElBTCBQVUxTRS1DT1VOVFJJRVMgWyBjYyBbIGNjIFsgLi4uIF0g XSBdCi0gICAgICAgICAgUmVwbGFjZXMgdGhlIGN1cnJlbnQgUFVMU0UtQ09VTlRSSUVTIGxpc3Qg d2l0aCB0aGUgb25lIGdpdmUuCi0gICAgICAgICAgU3ludGF4IGFuZCBvcGVyYXRpb24gaXMgbGlr ZSBTRVQgRElBTCBUT05FLUNPVU5UUklFUy4KLQotICAgSWYgdGhlIHNhbWUgY291bnRyeSBjb2Rl IGFwcGVhcnMgaW4gYm90aCBsaXN0cywgUHVsc2UgdGFrZXMgcHJlY2VkZW5jZS4KLQotICAgVGhl IFNFVCBESUFMIFRPTkUtIGFuZCBQVUxTRS1DT1VOVFJJRVMgY29tbWFuZHMgcGVyZm9ybSBubyB2 ZXJpZmljYXRpb24KLSAgIHdoYXRzb2V2ZXIgb24gdGhlIGNjJ3MsIHNpbmNlIGFsbW9zdCBhbnkg c3ludGF4IG1pZ2h0IGJlIGxlZ2FsIGluIHNvbWUKLSAgIHNldHRpbmdzLiBGdXJ0aGVybW9yZSwg dGhlcmUgaXMgbm8gZmFjaWxpdHkgdG8gZWRpdCB0aGUgbGlzdHM7IHlvdSBjYW4KLSAgIG9ubHkg cmVwbGFjZSB0aGUgd2hvbGUgbGlzdC4gSG93ZXZlciwgc2luY2UgdGhlIG9ubHkgcHVycG9zZSBv ZiB0aGVzZQotICAgbGlzdHMgaXMgdG8gZXN0YWJsaXNoIGEgYmFzaXMgZm9yIHBpY2tpbmcgdG9u ZSBvciBwdWxzZSBkaWFsaW5nCi0gICBhdXRvbWF0aWNhbGx5LCBhbGwgeW91IG5lZWQgdG8gb3Zl cnJpZGUgdGhlIGVmZmVjdCBvZiB0aGUgbGlzdCBpcyB0bwotICAgc2V0IGEgc3BlY2lmaWMgZGlh bGluZyBtZXRob2Qgd2l0aCBTRVQgRElBTCBNRVRIT0QgVE9ORSBvciBTRVQgRElBTAotICAgTUVU SE9EIFBVTFNFLgotCi0yLjEuMTUuIERpYWwtTW9kaWZpZXIgVmFyaWFibGVzCi0KLSAgIEFzIG9m IEMtS2VybWl0IDcuMCwgZGlhbCBtb2RpZmllcnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgZm9sbG93 aW5nCi0gICB2YXJpYWJsZXM6Ci0KLSBcdihkbV9scCkgTG9uZyBwYXVzZQotIFx2KGRtX3NwKSBT aG9ydCBwYXVzZQotIFx2KGRtX3BkKSBQdWxzZSBkaWFsCi0gXHYoZG1fdGQpIFRvbmUgZGlhbAot IFx2KGRtX3dhKSBXYWl0IGZvciBhbnN3ZXIKLSBcdihkbV93ZCkgV2FpdCBmb3IgZGlhbHRvbmUK LSBcdihkbV9yYykgUmV0dXJuIHRvIGNvbW1hbmQgbW9kZQotCi0gICBZb3UgY2FuIHVzZSB0aGVz ZSBpbiB5b3VyIGRpYWwgc3RyaW5ncyBpbiBwbGFjZSBvZiBoYXJkd2lyZWQgbW9kaWZpZXJzCi0g ICBsaWtlICJAIiwgIiwiLCBldGMsIGZvciBpbmNyZWFzZWQgcG9ydGFiaWxpdHkgb2Ygc2NyaXB0 cy4gRXhhbXBsZToKLQotICBDLUtlcm1pdD5zZXQgbW9kZW0gdHlwZSB1c3JvYm90aWNzCi0gIEMt S2VybWl0PnNobyB2YXJpYWJsZXMgZG0KLSAgIFx2KGRtX2xwKSA9ICwKLSAgIFx2KGRtX3NwKSA9 IC8KLSAgIFx2KGRtX3BkKSA9IFAKLSAgIFx2KGRtX3RkKSA9IFQKLSAgIFx2KGRtX3dhKSA9IEAK LSAgIFx2KGRtX3dkKSA9IFcKLSAgIFx2KGRtX3JjKSA9IDsKLSAgQy1LZXJtaXQ+ZXhpdAotCi0y LjEuMTYuIEdpdmluZyBNdWx0aXBsZSBOdW1iZXJzIHRvIHRoZSBESUFMIENvbW1hbmQKLQotICAg UHJpb3IgdG8gQy1LZXJtaXQgNy4wLCB0aGUgb25seSB3YXkgdG8gZ2l2ZSBhIERJQUwgY29tbWFu ZCBhIGxpc3Qgb2YKLSAgIHBob25lIG51bWJlcnMgdG8gdHJ5IHVudGlsIG9uZSBhbnN3ZXJzIHdh cyB0byBjcmVhdGUgYSBkaWFsaW5nCi0gICBkaXJlY3RvcnkgdGhhdCBoYWQgbXVsdGlwbGUgZW50 cmllcyB1bmRlciB0aGUgc2FtZSBuYW1lLCBhbmQgdGhlbiB1c2UKLSAgIHRoYXQgZW50cnkgbmFt ZSBpbiB0aGUgRElBTCBjb21tYW5kLiBOb3cgYSBsaXN0IG9mIG51bWJlcnMgY2FuIGJlIGdpdmVu Ci0gICB0byB0aGUgRElBTCBjb21tYW5kIGRpcmVjdGx5IGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0 OgotCi0gIGRpYWwge3tudW1iZXIxfXtudW1iZXIyfXtudW1iZXIzfS4uLn0KLQotICAgVGhpcyBp cyB0aGUgc2FtZSBsaXN0IGZvcm1hdCB1c2VkIGJ5IFNFTkQgL0VYQ0VQVDogYW5kIG90aGVyIGNv bW1hbmRzCi0gICB0aGF0IGFsbG93IGEgbGlzdCB3aGVyZSBub3JtYWxseSBhIHNpbmdsZSBpdGVt IGlzIGdpdmVuLiBSZXN0cmljdGlvbnMKLSAgIG9uIHRoaXMgZm9ybSBvZiB0aGUgRElBTCBjb21t YW5kIGFyZToKLQotICAgICAqIFRoZSBmaXJzdCB0d28gYnJhY2VzIG11c3QgYmUgYWRqYWNlbnQ7 IHNwYWNpbmcgaXMgb3B0aW9uYWwKLSAgICAgICB0aGVyZWFmdGVyLgotICAgICAqIEVhY2ggbnVt YmVyIG11c3QgYmUgYW4gYWN0dWFsIG51bWJlciB0byBkaWFsLCBub3QgYSBkaWFsaW5nCi0gICAg ICAgZGlyZWN0b3J5IGVudHJ5LgotICAgICAqIERpYWxpbmcgZGlyZWN0b3J5IGVudHJpZXMgbWF5 IG5vdCBjb250YWluIG51bWJlciBsaXN0cyBpbiB0aGlzCi0gICAgICAgZm9ybWF0LgotCi0gICBJ biBhbGwgb3RoZXIgcmVzcGVjdHMsIHRoZSBudW1iZXJzIGFyZSB0cmVhdGVkIGFzIGlmIHRoZXkg aGFkIGJlZW4KLSAgIGZldGNoZWQgZnJvbSB0aGUgZGlhbGluZyBkaXJlY3Rvcnk7IHRoZXkgY2Fu IGJlIGluIGxpdGVyYWwgb3IgcG9ydGFibGUKLSAgIGZvcm1hdCwgZXRjLiBFeGFtcGxlOgotCi0g IGRpYWwge3s3NjU0MzIxfSB7KzEgKDIxMikgNTU1MTIxMn0geyAxLTIxMi01NTU2Nzg5IH19Ci0K LSAgIFRoZSBsaXN0IGNhbiBiZSBhbnkgbGVuZ3RoIGF0IGFsbCwgd2l0aGluIHJlYXNvbi4KLQot ICAgVGhpcyBmZWF0dXJlIGlzIGVzcGVjaWFsbHkgaGFuZHkgZm9yIHVzZSB3aXRoIHRoZSBLOTUg RGlhbGVyLCBhbGxvd2luZwotICAgYSBsaXN0IG9mIHBob25lIG51bWJlcnMgdG8gYmUgc3BlY2lm aWVkIGluIHRoZSBUZWxlcGhvbmUgTnVtYmVyIGJveAotICAgd2l0aG91dCBoYXZpbmcgdG8gc2V0 IHVwIG9yIHJlZmVyZW5jZSBhIHNlcGFyYXRlIGRpYWxpbmcgZGlyZWN0b3J5LgotCi0gICBZb3Ug Y2FuIGFsc28gdXNlIGl0IHRvIGFkZCBjb21tb25seS1kaWFsZWQgc2VxdWVuY2VzIGFzIHZhcmlh YmxlcyBpbgotICAgeW91ciBDLUtlcm1pdCBjdXN0b21pemF0aW9uIGZpbGUsIGUuZy46Ci0KLSAg ZGVmaW5lIHdvcmsge3s3NjU0MzIxfXs3NjU0MzIyfXs3NjU0MzIzfX0KLQotICAgYW5kIHRoZW46 Ci0KLSAgZGlhbCB7XG0od29yayl9Ci0KLSAgICh0aGUgdmFyaWFibGUgbmFtZSBtdXN0IGJlIGVu Y2xvc2VkIGluIGJyYWNlcykuCi0KLSAgIE9yIG1vcmUgc2ltcGx5OgotCi0gIGRlZmluZSB3b3Jr IGRpYWwge3s3NjU0MzIxfXs3NjU0MzIyfXs3NjU0MzIzfX0KLQotICAgYW5kIHRoZW46Ci0KLSAg d29yawotCi0yLjIuIE1vZGVtcwotCi0yLjIuMS4gTmV3IE1vZGVtIFR5cGVzCi0KLSAgIFNpbmNl IEMtS2VybWl0IDYuMDoKLQotICBhdGxhcy1uZXdjb20tMzM2MDBpZnhDIEF0bGFzL05ld2NvbSAz MzYwMAotICBhdHQta2VlcGludG91Y2ggICAgICAgIEFUJlQgS2VlcGluVG91Y2ggUENNQ0lBIFYu MzJiaXMgQ2FyZCBNb2RlbQotICBhdHQtMTkwMC1zdHUtaWlpICAgICAgIEFUJlQgU2VjdXJlIERh dGEgU1RVLUlJSSBNb2RlbCAxOTAwCi0gIGF0dC0xOTEwLXN0dS1paWkgICAgICAgQVQmVCBTZWN1 cmUgRGF0YSBTVFUtSUlJIE1vZGVsIDE5MTAKLSAgYmVzdGRhdGEgICAgICAgICAgICAgICBCZXN0 IERhdGEKLSAgY2FyZGluYWwgICAgICAgICAgICAgICBDYXJkaW5hbCBWLjM0IE1WUDI4OFggc2Vy aWVzLgotICBjb21wYXEgICAgICAgICAgICAgICAgIENvbXBhcSBEYXRhK0ZheCAoZS5nLiBpbiBQ cmVzYXJpbykKLSAgZnVqaXRzdSAgICAgICAgICAgICAgICBGdWppdHN1IEZheC9Nb2RlbSBBZGFw dGVyCi0gIGdlbmVyaWMtaGlnaC1zcGVlZCAgICAgQW55IG1vZGVybiBlcnJvci1jb3JyZWN0aW5n IGRhdGEtY29tcHJlc3NpbmcgbW9kZW0KLSAgaXR1LXQtdjI1dGVyL3YyNTAgICAgICBJVFUtVCAo Q0NJVFQpIFYuMjV0ZXIgKFYuMjUwKSBzdGFuZGFyZCBjb21tYW5kIHNldAotICBtZWdhaGVydHot YXR0LXYzNCAgICAgIE1lZ2FoZXJ0eiBBVCZUIFYuMzQKLSAgbWVnYWhlcnR6LXhqYWNrICAgICAg ICBNZWdhaGVydHogWC1KYWNrCi0gIG1vdG9yb2xhLWNvZGV4ICAgICAgICAgTW90b3JvbGEgQ29k ZXggMzI2WCBTZXJpZXMKLSAgbW90b3JvbGEtbW9udGFuYSAgICAgICBNb3Rvcm9sYSBNb250YW5h Ci0gIG10NTYzNHpweCAgICAgICAgICAgICAgTXVsdGl0ZWNoIE1UNTYzNFpQWAotICByb2Nrd2Vs bC12OTAgICAgICAgICAgIFJvY2t3ZWxsIFYuOTAgNTZLCi0gIHJvbG0tMjQ0cGMgICAgICAgICAg ICAgU2llbWVucy9Sb2xtIDI0NFBDIChBVCBjb21tYW5kIHNldCkKLSAgcm9sbS02MDAtc2VyaWVz ICAgICAgICBTaWVtZW5zL1JvbG0gNjAwIFNlcmllcyAoQVQgY29tbWFuZCBzZXQpCi0gIHNwaXJp dC1paSAgICAgICAgICAgICAgUXVpY2tDb21tIFNwaXJpdCBJSQotICBzdXByYXNvbmljICAgICAg ICAgICAgIFN1cHJhU29uaWMgVjI4OCsKLSAgc3VwcmEtZXhwcmVzcy12OTAgICAgICBTdXByYSBF eHByZXNzIFYuOTAKLQotICAgT25lIG9mIHRoZSBuZXcgdHlwZXMsICJnZW5lcmljLWhpZ2gtc3Bl ZWQiIG5lZWRzIGEgYml0IG9mIGV4cGxhbmF0aW9uLgotICAgVGhpcyB0eXBlIHdhcyBhZGRlZCB0 byBlYXNpbHkgaGFuZGxlIG90aGVyIHR5cGVzIHRoYXQgYXJlIG5vdAotICAgZXhwbGljaXRseSBj b3ZlcmVkLCB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIGJvdGhlciBvZiBhZGRpbmcgYQotICAg Y29tcGxldGUgdXNlci1kZWZpbmVkIG1vZGVtIHR5cGUuIFRoaXMgb25lIHdvcmtzIGZvciBtb2Rl cm4gbW9kZW1zIHRoYXQKLSAgIHVzZSB0aGUgQVQgY29tbWFuZCBzZXQsIG9uIHRoZSBhc3N1bXB0 aW9uIHRoYXQgYWxsIHRoZSBkZWZhdWx0Ci0gICAoImZhY3RvcnkiKSBzZXR0aW5ncyBvZiB0aGUg bW9kZW0gKGEpIGFyZSBhcHByb3ByaWF0ZSBmb3IgS2VybWl0LCAoYikKLSAgIGluY2x1ZGUgZXJy b3IgY29ycmVjdGlvbiwgZGF0YSBjb21wcmVzc2lvbiwgYW5kIHNwZWVkIGJ1ZmZlcmluZzsgYW5k Ci0gICAoYykgYXJlIHJlY2FsbGFibGUgd2l0aCB0aGUgY29tbWFuZCBBVCZGLgotCi0gICBJZiB0 aGUgY29tbWFuZCB0byByZWNhbGwgeW91ciBtb2RlbSdzIHByb2ZpbGUgaXMgbm90IEFUJkYsIHVz ZSB0aGUgU0VUCi0gICBNT0RFTSBDT01NQU5EIElOSVQtU1RSSU5HIGNvbW1hbmQgdG8gc3BlY2lm eSB0aGUgYXBwcm9wcmlhdGUgbW9kZW0KLSAgIGNvbW1hbmQuIFRoZSBkZWZhdWx0IGluaXQtc3Ry aW5nIGlzIEFUJkZcMTMgKHRoYXQgaXMsIEFULCBhbXBlcnNhbmQsIEYsCi0gICBhbmQgdGhlbiBj YXJyaWFnZSByZXR1cm4pOyBhIHN1cnZleSBvZiBhYm91dCAyMCBtb2Rlcm4gbW9kZW0gdHlwZXMK LSAgIHNob3dzIHRoZXkgYWxsIHN1cHBvcnQgdGhpcywgYnV0IHRoZXkgbWlnaHQgbWVhbiBkaWZm ZXJlbnQgdGhpbmdzIGJ5Ci0gICBpdC4gRm9yIGV4YW1wbGUsIHRoZSBVU1IgU3BvcnRzdGVyIG9y IENvdXJpZXIgbmVlZHMgQVQmRjEgKG5vdCBBVCZGLAotICAgd2hpY2ggaXMgZXF1aXZhbGVudCB0 byBBVCZGMCwgd2hpY2ggcmVjYWxscyBhbiBpbmFwcHJvcHJpYXRlIHByb2ZpbGUpLAotICAgc28g Zm9yIFVTUiBtb2RlbXM6Ci0KLSAgc2V0IG1vZGVtIHR5cGUgZ2VuZXJpYy1oaWdoLXNwZWVkCi0g IHNldCBtb2RlbSBjb21tYW5kIGluaXQgQVQmRjFcMTMKLQotICAgT2YgY291cnNlLCBVU1IgbW9k ZW1zIGFscmVhZHkgaGF2ZSB0aGVpciBvd24gYnVpbHQtaW4gbW9kZW0gdHlwZS4gQnV0Ci0gICBp ZiB5b3UgdXNlIHRoaXMgb25lIGluc3RlYWQsIGl0IHdpbGwgZGlhbCBmYXN0ZXIgYmVjYXVzZSBp dCBoYXMgZmV3ZXIKLSAgIGNvbW1hbmRzIHRvIGdpdmUgdG8gdGhlIG1vZGVtOyBpbiB0aGF0IHNl bnNlICImRjEiIGlzIGxpa2UgYSBtYWNybyB0aGF0Ci0gICBidW5kbGVzIG51bWVyb3VzIGNvbW1h bmRzIGludG8gYSBzaW5nbGUgb25lLiBTZWUgeW91ciBtb2RlbSBtYW51YWwgZm9yCi0gICBkZXRh aWxzIGFib3V0IGZhY3RvcnkgcHJvZmlsZXMgYW5kIGNvbW1hbmRzIHRvIHJlY2FsbCB0aGVtLgot Ci0gICBXQVJOSU5HOiBEbyBub3QgdXNlIHRoZSBnZW5lcmljLWhpZ2gtc3BlZWQgbW9kZW0gdHlw ZSBpbiBvcGVyYXRpbmcKLSAgIHN5c3RlbXMgbGlrZSBWTVMgd2hlcmUgaGFyZHdhcmUgZmxvdyBj b250cm9sIGlzIG5vdCBhdmFpbGFibGUsIGF0IGxlYXN0Ci0gICBub3QgdW5sZXNzIHlvdSBjaGFu Z2UgdGhlIGluaXQgc3RyaW5nIGZyb20gQVQmRlwxMyB0byBzb21ldGhpbmcgZWxzZQotICAgdGhh dCBlbmFibGVzIGxvY2FsIFhvbi9Yb2ZmIG9yIG90aGVyIGFwcHJvcHJpYXRlIHR5cGUgb2YgZmxv dyBjb250cm9sLgotCi0gICBBbHNvIHNlZSBbNDA0XVNlY3Rpb24gMi4xLjcgZm9yIGFkZGl0aW9u YWwgaGludHMgYWJvdXQgbWFraW5nIGRpYWxpbmcKLSAgIGdvIGZhc3Rlci4KLQotMi4yLjIuIE5l dyBNb2RlbSBDb250cm9scwotCi0gICBTRVQgTU9ERU0gQ0FQQUJJTElUSUVTIGxpc3QKLSAgICAg ICAgICBJbiBDLUtlcm1pdCA3LjAsIHRoaXMgY29tbWFuZCBhdXRvbWF0aWNhbGx5IHR1cm5zIE1P REVNCi0gICAgICAgICAgU1BFRUQtTUFUQ0hJTkcgT0ZGIGlmIFNCIChTcGVlZCBCdWZmZXJpbmcp IGlzIGluIHRoZSBsaXN0LCBhbmQKLSAgICAgICAgICB0dXJucyBpdCBPTiBpZiBTQiBpcyBhYnNl bnQuCi0KLSAgIFNFVCBNT0RFTSBDT01NQU5EIFBSRURJQUwtSU5JVCBbIHRleHQgXQotICAgICAg ICAgIENvbW1hbmRzIHRvIGJlIHNlbnQgdG8gdGhlIG1vZGVtIGp1c3QgcHJpb3IgdG8gZGlhbGlu Zy4gTm9ybWFsbHkKLSAgICAgICAgICBub25lLgotCi0gICBTRVQgTU9ERU0gU1BFQUtFUiB7IE9O LCBPRkYgfQotICAgICAgICAgIERldGVybWluZXMgd2hldGhlciBtb2RlbSBzcGVha2VyIGlzIG9u IG9yIG9mZiB3aGlsZSBjYWxsIGlzCi0gICAgICAgICAgYmVpbmcgcGxhY2VkLiBPTiBieSBkZWZh dWx0LiBOb3RlOiBUaGlzIGNvbW1hbmQgZG9lcyBub3QgcHJvdmlkZQotICAgICAgICAgIGZpbmUt Z3JhaW5lZCBjb250cm9sIG92ZXIgd2hlbiB0aGUgc3BlYWtlciBpcyBvbiBvciBvZmYuCi0gICAg ICAgICAgTm9ybWFsbHksIE9OIG1lYW5zIHdoaWxlIHRoZSBjYWxsIGlzIGJlaW5nIHBsYWNlZCwg dW50aWwgdGhlCi0gICAgICAgICAgcG9pbnQgYXQgd2hpY2ggY2FycmllciBpcyBzdWNjZXNzZnVs bHkgZXN0YWJsaXNoZWQuIElmIHlvdXIKLSAgICAgICAgICBtb2RlbSBoYXMgYSBkaWZmZXJlbnQg c3BlYWtlciBvcHRpb24gdGhhdCB5b3Ugd2FudCB0byBjaG9vc2UsCi0gICAgICAgICAgdGhlbiB1 c2UgdGhlIFNFVCBNT0RFTSBDT01NQU5EIFNQRUFLRVIgT04gdGV4dCBjb21tYW5kIHRvCi0gICAg ICAgICAgc3BlY2lmeSB0aGlzIG9wdGlvbi4KLQotICAgU0VUIE1PREVNIENPTU1BTkQgU1BFQUtF UiB7IE9OLCBPRkYgfSBbIHRleHQgXQotICAgICAgICAgIFNwZWNpZnkgb3Igb3ZlcnJpZGUgdGhl IGNvbW1hbmRzIHRvIHR1cm4geW91ciBtb2RlbSdzIHNwZWFrZXIgb24KLSAgICAgICAgICBhbmQg b2ZmLgotCi0gICBTRVQgTU9ERU0gVk9MVU1FIHsgTE9XLCBNRURJVU0sIEhJR0ggfQotICAgICAg ICAgIFdoZW4gTU9ERU0gU1BFQUtFUiBpcyBvbiwgc2VsZWN0IHZvbHVtZS4gTm90ZTogSW4gc29t ZSBtb2RlbXMsCi0gICAgICAgICAgZXNwZWNpYWxseSBpbnRlcm5hbCBvbmVzLCB0aGVzZSBjb21t YW5kcyBoYXZlIG5vIGVmZmVjdDsgdGhpcyBpcwotICAgICAgICAgIGEgbGltaXRhdGlvbiBvZiB0 aGUgcGFydGljdWxhciBtb2RlbSwgbm90IG9mIEtlcm1pdC4KLQotICAgU0VUIE1PREVNIENPTU1B TkQgVk9MVU1FIHsgTE9XLCBNRURJVU0sIEhJR0ggfSBbIHRleHQgXQotICAgICAgICAgIFNwZWNp Znkgb3Igb3ZlcnJpZGUgdGhlIGNvbW1hbmRzIHRvIHNldCB5b3VyIG1vZGVtJ3Mgc3BlYWtlcgot ICAgICAgICAgIHZvbHVtZS4KLQotICAgU0VUIE1PREVNIENPTU1BTkQgSUdOT1JFLURJQUxUT05F IFsgdGV4dCBdCi0gICAgICAgICAgVGhlIGNvbW1hbmQgdG8gZW5hYmxlIGJsaW5kIGRpYWxpbmcg KFs0MDVdU2VjdGlvbiAyLjEuNikuCi0KLSAgIFNFVCBNT0RFTSBFU0NBUEUtQ0hBUkFDVEVSIGNv ZGUKLSAgICAgICAgICBIYXMgYmVlbiBhdWdtZW50ZWQgdG8gYWxsb3cgY29kZXMgb2YgMCBvciBs ZXNzOiA8IDAgbWVhbnMgdGhlCi0gICAgICAgICAgZXNjYXBlIG1lY2hhbmlzbSBpcyBkaXNhYmxl ZC4gPSAwIG1lYW5zIHRvIHVzZSAocmVzdG9yZSkgdGhlCi0gICAgICAgICAgZGVmYXVsdCB2YWx1 ZSBmcm9tIHRoZSBtb2RlbSBkYXRhYmFzZS4gPiAwIGFuZCA8IDEyOCBpcyBhCi0gICAgICAgICAg bGl0ZXJhbCB2YWx1ZSB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgb25lLiA+IDEy NyBtZWFucwotICAgICAgICAgIHRoZSBlc2NhcGUgbWVjaGFuaXNtIGlzIGRpc2FibGVkLiBUaGlz IGFmZmVjdHMgIm1vZGVtIGhhbmd1cCIuCi0gICAgICAgICAgV2hlbiB0aGUgZXNjYXBlIG1lY2hh bmlzbSBpcyBkaXNhYmxlZCwgYnV0IFNFVCBNT0RFTQotICAgICAgICAgIEhBTkdVUC1NRVRIT0Qg aXMgTU9ERU0tQ09NTUFORCwgaXQgc2VuZHMgdGhlIGhhbmd1cCBjb21tYW5kCi0gICAgICAgICAg aW1tZWRpYXRlbHksIHdpdGhvdXQgdGhlIDxwYXVzZT4rKys8cGF1c2U+IGJ1c2luZXNzIGZpcnN0 LiBUaGlzCi0gICAgICAgICAgaXMgdXNlZnVsIChmb3IgZXhhbXBsZSkgd2hlbiBzZW5kaW5nIGxv dHMgb2YgbnVtZXJpYyBwYWdlcywgYQotICAgICAgICAgIHByb2Nlc3MgaW4gd2hpY2ggbmV2ZXIg d2UgZ28gb25saW5lLCBhbmQgc28gbmV2ZXIgbmVlZCB0byBlc2NhcGUKLSAgICAgICAgICBiYWNr LiBFbGltaW5hdGluZyB0aGUgdW5uZWNlc3NhcnkgcGF1c2VzIGFuZCBlc2NhcGUgc2VxdWVuY2UK LSAgICAgICAgICBhbGxvd3MgYSBsb3QgbW9yZSBwYWdlcyB0byBiZSBzZW50IHBlciB1bml0IHRp bWUuCi0KLSAgIFJlY2FsbCB0aGF0IEMtS2VybWl0IGNhbiBkaWFsIG1vZGVtcyB0byB3aGljaCBp dCBpcyBjb25uZWN0ZWQgdmlhCi0gICBUQ1AvSVAgKFRlbG5ldCBvciBSbG9naW4pIGFzIGRlc2Ny aWJlZCBvbiBwYWdlIDEyNiBvZiBbNDA2XVVzaW5nCi0gICBDLUtlcm1pdCwgMm5kIEVkLiBJbiB0 aGlzIGNhc2UgdGhlIE1PREVNIEhBTkdVUC1NRVRIT0Qgc2hvdWxkIGJlCi0gICBNT0RFTS1DT01N QU5ELCBzaW5jZSBSUy0yMzIgc2lnbmFscyBkb24ndCB3b3JrIG92ZXIgVENQL0lQIGNvbm5lY3Rp b25zLgotICAgQXMgbm90ZWQgaW4gdGhlIG1hbnVhbCwgc3VjaCBjb25uZWN0aW9ucyBhcmUgc2V0 IHVwIGJ5IHRoZSBmb2xsb3dpbmcKLSAgIHNlcXVlbmNlOgotCi0gIHNldCBob3N0IGhvc3QgWyBw b3J0IF0KLSAgc2V0IG1vZGVtIHR5cGUgbmFtZQotICBkaWFsIG51bWJlcgotCi0gICBCdXQgdGhp cyBjYW4gY2F1c2UgY29tcGxpY2F0aW9ucyB3aGVuIHlvdSB1c2UgS2VybWl0IHRvIHN3aXRjaCBi ZXR3ZWVuCi0gICBzZXJpYWwgYW5kIFRDUC9JUCBjb25uZWN0aW9ucy4gSW4gdGhlIGZvbGxvd2lu ZyBzZXF1ZW5jZToKLQotICBzZXQgaG9zdCBuYW1lCi0gIHNldCBtb2RlbSB0eXBlIG5hbWUKLSAg c2V0IHBvcnQgbmFtZQotCi0gICB0aGUgZmlyc3QgdHdvIGNvbW1hbmRzIG9iZXkgdGhlIHJ1bGVz IGZvciBkaWFsaW5nIG91dCBvdmVyIFRlbG5ldC4KLSAgIEhvd2V2ZXIsIHRoZSBTRVQgUE9SVCBj b21tYW5kIHJlcXVpcmVzIHRoYXQgS2VybWl0IGNsb3NlIGl0cyBjdXJyZW50Ci0gICAoVGVsbmV0 KSBjb25uZWN0aW9uIGJlZm9yZSBpdCBjYW4gb3BlbiB0aGUgc2VyaWFsIHBvcnQgKHNpbmNlIEtl cm1pdAotICAgY2FuIG9ubHkgaGF2ZSBvbmUgY29ubmVjdGlvbiBvcGVuIGF0IGEgdGltZSkuIEJ1 dCBzaW5jZSBhIG1vZGVtIHR5cGUKLSAgIHdhcyBzZXQgYWZ0ZXIgdGhlICJzZXQgaG9zdCIgY29t bWFuZCB3YXMgZ2l2ZW4sIEtlcm1pdCBhc3N1bWVzIGl0IGlzIGEKLSAgIFRlbG5ldCBkaWFsb3V0 IGNvbm5lY3Rpb24gYW5kIHNvIHNlbmRzIHRoZSBtb2RlbSdzIGhhbmd1cCBzZXF1ZW5jZSBpcwot ICAgc2VudCB0byB0aGUgVGVsbmV0IGhvc3QuIFRvIGF2b2lkIHRoaXMsIGNsb3NlIHRoZSBuZXR3 b3JrIGNvbm5lY3Rpb24KLSAgIGV4cGxpY2l0bHkgYmVmb3JlIG9wZW5pbmcgdGhlIHNlcmlhbCBv bmU6Ci0KLSAgc2V0IGhvc3QgbmFtZQotICBjbG9zZQotICBzZXQgbW9kZW0gdHlwZSBuYW1lCi0g IHNldCBwb3J0IG5hbWUKLQotMi4zLiBURUxORVQgYW5kIFJMT0dJTgotCi0gICBGb3IgYWRkaXRp b25hbCBiYWNrZ3JvdW5kLCBwbGVhc2UgYWxzbyByZWFkIHRoZSBbNDA3XVRFTE5FVC5UWFQgZmls ZSwKLSAgIGFsc28gYXZhaWxhYmxlIG9uIHRoZSBXZWIgaW4gWzQwOF1IVE1MIGZvcm1hdC4KLQot ICAgQ2F1dGlvbnM6Ci0KLSAgICAgKiBJZiBtYWtpbmcgYSBUZWxuZXQgY29ubmVjdGlvbiB3aXRo IEMtS2VybWl0IHRha2VzIGEgdmVyeSBsb25nIHRpbWUsCi0gICAgICAgbGlrZSBvdmVyIGEgbWlu dXRlLCB3aGVyZWFzIHRoZSBzeXN0ZW0gVGVsbmV0IHByb2dyYW0gbWFrZXMgdGhlCi0gICAgICAg c2FtZSBjb25uZWN0aW9uIGltbWVkaWF0ZWx5LCB0cnkgaW5jbHVkaW5nIHRoZSAvTk9XQUlUIHN3 aXRjaDoKLSAgQy1LZXJtaXQ+IHRlbG5ldCAvbm93YWl0IGhvc3RuYW1lCi0KLSAgICAgICBTZWUg WzQwOV1URUxORVQuVFhUIG9yIFs0MTBdVEVMTkVULkhUTSBmb3IgZGV0YWlscy4gSWYgaXQgYWxz bwotICAgICAgIHRha2VzIGEgdmVyeSBsb25nIHRpbWUgdG8gbWFrZSBhIFRlbG5ldCBjb25uZWN0 aW9uIHdpdGggc3lzdGVtCi0gICAgICAgVGVsbmV0LCB0aGVuIHRoZSBkZWxheSBpcyBtb3N0IGxp a2VseSBjYXVzZWQgYnkgcmV2ZXJzZSBETlMgbG9va3VwcwotICAgICAgIHdoZW4geW91ciBob3N0 IGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkIGluIEROUy4KLSAgICAgKiBXaGVuIHN1cHBseWlu ZyBudW1lcmljIElQIGFkZHJlc3NlcyB0byBDLUtlcm1pdCBvciB0byBhbnkgb3RoZXIKLSAgICAg ICBhcHBsaWNhdGlvbiAocmVndWxhciBUZWxuZXQsIFJsb2dpbiwgZXRjKSwgZG8gbm90IGluY2x1 ZGUgbGVhZGluZwotICAgICAgIDAncyBpbiBhbnkgZmllbGRzIHVubGVzcyB5b3UgaW50ZW5kIGZv ciB0aG9zZSBmaWVsZHMgdG8gYmUKLSAgICAgICBpbnRlcnByZXRlZCBhcyBvY3RhbCAob3IgaGV4 KSBudW1iZXJzLiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlCi0gICAgICAgSW50ZXJuZXQgYWRkcmVz cyBpbnRlcnByZXRlciAodGhlIHNvY2tldHMgbGlicmFyeSBpbmV0X2FkZHIoKQotICAgICAgIHJv dXRpbmUpIGluY2x1ZGVzIHRoZXNlIHdvcmRzOgotCi0gICAgIEFsbCBudW1iZXJzIHN1cHBsaWVk IGFzICJwYXJ0cyIgaW4gYSAiLiIgbm90YXRpb24gbWF5IGJlIGRlY2ltYWwsCi0gICAgIG9jdGFs LCBvciBoZXhhZGVjaW1hbCwgYXMgc3BlY2lmaWVkIGluIHRoZSBDIGxhbmd1YWdlICh0aGF0IGlz LCBhCi0gICAgIGxlYWRpbmcgMHggb3IgMFggaW1wbGllcyBoZXhhZGVjaW1hbDsgb3RoZXJ3aXNl LCBhIGxlYWRpbmcgMCBpbXBsaWVzCi0gICAgIG9jdGFsOyBvdGhlcndpc2UsIHRoZSBudW1iZXIg aXMgaW50ZXJwcmV0ZWQgYXMgZGVjaW1hbCkuCi0gICAgICAgVG8gaWxsdXN0cmF0ZSwgMTI4LjU5 LjM5LjIgYW5kIDEyOC4wNTkuMDM5LjAwMiBhcmUgbm90IHRoZSBzYW1lCi0gICAgICAgaG9zdCEg RXZlbiB0aG91Z2ggbW9zdCBvZiB0aGUgZmllbGRzIGNvbnRhaW4gbm9uLW9jdGFsIGRpZ2l0cy4K LSAgICAgICBVc2luZyBzeXN0ZW0gVGVsbmV0IChub3QgS2VybWl0KToKLSAgJCB0ZWxuZXQgMTI4 LjA1OS4wMzkuMDAyCi0gIFRyeWluZyAxMjguNDkuMzMuMiAuLi4KLQotICAgICAgIE9mIGNvdXJz ZSB0aGUgc2FtZSB0aGluZyBoYXBwZW5zIHdpdGggS2VybWl0IGJlY2F1c2UgaXQgdXNlcyAoYXMg aXQKLSAgICAgICBtdXN0KSB0aGUgc2FtZSBzeXN0ZW0gc2VydmljZSBmb3IgcmVzb2x2aW5nIG5l dHdvcmsgYWRkcmVzc2VzIHRoYXQKLSAgICAgICBUZWxuZXQsIEZUUCwgYW5kIGFsbCBvdGhlciBU Q1AvSVAgYXBwbGljYXRpb25zIHVzZS4KLSAgICAgKiBUaGUgUkxPR0lOIHNlY3Rpb24gb24gcGFn ZSAxMjMgZG9lcyBub3QgbWFrZSBpdCBjbGVhciB0aGF0IHlvdSBjYW4KLSAgICAgICB1c2UgdGhl IFNFVCBURUxORVQgVEVSTUlOQUwtVFlQRSBjb21tYW5kIHRvIGdvdmVybiB0aGUgdGVybWluYWwK LSAgICAgICB0eXBlIHRoYXQgaXMgcmVwb3J0ZWQgYnkgQy1LZXJtaXQgdG8gdGhlIFJMT0dJTiBz ZXJ2ZXIuCi0gICAgICogTm90ZSB0aGF0IHRoZSBTRVQgVENQIGNvbW1hbmRzIGRlc2NyaWJlZCBv biBwYWdlcyAxMjItMTIzIG1pZ2h0IGJlCi0gICAgICAgYWJzZW50OyBzb21lIHBsYXRmb3JtcyB0 aGF0IHN1cHBvcnQgVENQL0lQIGRvIG5vdCBzdXBwb3J0IHRoZXNlCi0gICAgICAgcGFydGljdWxh ciBjb250cm9scy4KLQotICAgTmV3IGNvbW1hbmRzOgotCi0gICBURUxPUFQgeyBBTywgQVlULCBC UkVBSywgQ0FOQ0VMLCBFQywgRUwsIEVPRiwgRU9SLCBHQSwgSVAsIERNQVJLLAotICAgICAgICAg IERPLCBET05ULCBOT1AsIFNCLCBTRSwgU1VTUCwgV0lMTCwgV09OVCB9Ci0gICAgICAgICAgVGhp cyBjb21tYW5kIHdhcyBhdmFpbGFibGUgcHJldmlvdXNseSwgYnV0IHN1cHBvcnRlZCBvbmx5IERP LAotICAgICAgICAgIERPTlQsIFdJTEwsIGFuZCBXT05ULiBOb3cgaXQgbGV0cyB5b3Ugc2VuZCBh bGwgdGhlIFRlbG5ldAotICAgICAgICAgIHByb3RvY29sIGNvbW1hbmRzLiBOb3RlIHRoYXQgY2Vy dGFpbiBjb21tYW5kcyBkbyBub3QgcmVxdWlyZSBhCi0gICAgICAgICAgcmVzcG9uc2UsIGFuZCB0 aGVyZWZvcmUgY2FuIGJlIHVzZWQgYXMgbm9uZGVzdHJ1Y3RpdmUgInByb2JlcyIKLSAgICAgICAg ICB0byBzZWUgaWYgdGhlIFRlbG5ldCBzZXNzaW9uIGlzIHN0aWxsIG9wZW47IGUuZy46Ci0KLSAg c2V0IGhvc3QgeHl6Y29ycC5jb20KLSAgLi4uCi0gIHRlbG9wdCBub3AKLSAgaWYgZmFpbCBzdG9w IDEgQ29ubmVjdGlvbiBsb3N0Ci0KLSAgIFNFVCBUQ1AgQUREUkVTUyBbIGlwLWFkZHJlc3MgXQot ICAgICAgICAgIFNwZWNpZmllcyB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgY29tcHV0ZXIgdGhhdCBD LUtlcm1pdCBpcwotICAgICAgICAgIHJ1bm5pbmcgb24uIE5vcm1hbGx5IHRoaXMgaXMgbm90IG5l Y2Vzc2FyeS4gVGhlIGV4Y2VwdGlvbiB3b3VsZAotICAgICAgICAgIGJlIGlmIHlvdXIgbWFjaGlu ZSBoYXMgbXVsdGlwbGUgbmV0d29yayBhZGFwdGVycyAocGh5c2ljYWwgb3IKLSAgICAgICAgICB2 aXJ0dWFsKSB3aXRoIGEgZGlmZmVyZW50IGFkZHJlc3MgZm9yIGVhY2ggYWRhcHRlciBBTkQgeW91 IHdhbnQKLSAgICAgICAgICBDLUtlcm1pdCB0byB1c2UgYSBzcGVjaWZpYyBhZGRyZXNzIHdoZW4g bWFraW5nIG91dGdvaW5nCi0gICAgICAgICAgY29ubmVjdGlvbnMgb3IgYWNjZXB0aW5nIGluY29t aW5nIGNvbm5lY3Rpb25zLgotCi0gICBTRVQgVENQIEROUy1TRVJWSUNFLVJFQ09SRFMgeyBPTiwg T0ZGIH0KLSAgICAgICAgICBUZWxscyBDLUtlcm1pdCB3aGV0aGVyIHRvIHRyeSB0byB1c2UgRE5T IFNSViByZWNvcmRzIHRvCi0gICAgICAgICAgZGV0ZXJtaW5lIHRoZSBob3N0IGFuZCBwb3J0IG51 bWJlciB1cG9uIHdoaWNoIHRvIGZpbmQgYW4KLSAgICAgICAgICBhZHZlcnRpc2VkIHNlcnZpY2Uu IEZvciBleGFtcGxlLCBpZiBhIGhvc3Qgd2FudHMgcmVndWxhciBUZWxuZXQKLSAgICAgICAgICBj b25uZWN0aW9ucyByZWRpcmVjdGVkIHRvIHNvbWUgcG9ydCBvdGhlciB0aGFuIDIzLCB0aGlzIGZl YXR1cmUKLSAgICAgICAgICBhbGxvd3MgQy1LZXJtaXQgdG8gYXNrIHRoZSBob3N0IHdoaWNoIHBv cnQgaXQgc2hvdWxkIHVzZS4gU2luY2UKLSAgICAgICAgICBub3QgYWxsIGRvbWFpbiBzZXJ2ZXJz IGFyZSBzZXQgdXAgdG8gYW5zd2VyIHN1Y2ggcmVxdWVzdHMsIHRoaXMKLSAgICAgICAgICBmZWF0 dXJlIGlzIE9GRiBieSBkZWZhdWx0LgotCi0gICBTRVQgVENQIFJFVkVSU0UtRE5TLUxPT0tVUCB7 IE9OLCBPRkYsIEFVVE8gfQotICAgICAgICAgIFRlbGxzIEtlcm1pdCB3aGV0aGVyIHRvIHBlcmZv cm0gYSByZXZlcnNlIEROUyBsb29rdXAgb24gVENQL0lQCi0gICAgICAgICAgY29ubmVjdGlvbnMu IFRoaXMgYWxsb3dzIEtlcm1pdCB0byBkZXRlcm1pbmUgdGhlIGFjdHVhbCBob3N0bmFtZQotICAg ICAgICAgIG9mIHRoZSBob3N0IGl0IGlzIGNvbm5lY3RlZCB0bywgd2hpY2ggaXMgdXNlZnVsIGZv ciBjb25uZWN0aW9ucwotICAgICAgICAgIHRvIGhvc3QgcG9vbHMsIGFuZCBpcyByZXF1aXJlZCBm b3IgS2VyYmVyb3MgY29ubmVjdGlvbnMgdG8gaG9zdAotICAgICAgICAgIHBvb2xzIGFuZCBmb3Ig aW5jb21pbmcgY29ubmVjdGlvbnMuIElmIHRoZSBvdGhlciBob3N0IGRvZXMgbm90Ci0gICAgICAg ICAgaGF2ZSBhIEROUyBlbnRyeSwgdGhlIHJldmVyc2UgbG9va3VwIGNvdWxkIHRha2UgYSBsb25n IHRpbWUKLSAgICAgICAgICAobWludXRlcykgdG8gZmFpbCwgYnV0IHRoZSBjb25uZWN0aW9uIHdp bGwgc3RpbGwgYmUgbWFkZS4gVHVybgotICAgICAgICAgIHRoaXMgb3B0aW9uIE9GRiBmb3Igc3Bl ZWRpZXIgY29ubmVjdGlvbnMgaWYgeW91IGRvIG5vdCBuZWVkIHRvCi0gICAgICAgICAga25vdyBl eGFjdGx5IHdoaWNoIGhvc3QgeW91IGFyZSBjb25uZWN0ZWQgdG8gYW5kIHlvdSBhcmUgbm90Ci0g ICAgICAgICAgdXNpbmcgS2VyYmVyb3MuIEFVVE8sIHRoZSBkZWZhdWx0LCBtZWFucyB0aGUgbG9v a3VwIGlzIGRvbmUgb24KLSAgICAgICAgICBob3N0bmFtZXMsIGJ1dCBub3Qgb24gbnVtZXJpYyBJ UCBhZGRyZXNzZXMuCi0KLSAgIFNFVCBURUxORVQgV0FJVC1GT1ItTkVHT1RJQVRJT05TIHsgT04s IE9GRiB9Ci0gICAgICAgICAgRWFjaCBUZWxuZXQgb3B0aW9uIG11c3QgYmUgZnVsbHkgbmVnb3Rp YXRlZCBlaXRoZXIgT24gb3IgT2ZmCi0gICAgICAgICAgYmVmb3JlIHRoZSBzZXNzaW9uIGNhbiBj b250aW51ZS4gVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgd2l0aAotICAgICAgICAgIG9wdGlvbnMg dGhhdCByZXF1aXJlIHN1Yi1uZWdvdGlhdGlvbnMgc3VjaCBhcyBBdXRoZW50aWNhdGlvbiwKLSAg ICAgICAgICBFbmNyeXB0aW9uLCBhbmQgS2VybWl0OyBmb3IgcHJvcGVyIHN1cHBvcnQgb2YgdGhl c2Ugb3B0aW9ucwotICAgICAgICAgIEtlcm1pdCBtdXN0IHdhaXQgZm9yIHRoZSBuZWdvdGlhdGlv bnMgdG8gY29tcGxldGUuIE9mIGNvdXJzZSwKLSAgICAgICAgICBLZXJtaXQgaGFzIG5vIHdheSBv ZiBrbm93aW5nIHdoZXRoZXIgYSByZXBseSBpcyBkZWxheWVkIG9yIG5vdAotICAgICAgICAgIGNv bWluZyBhdCBhbGwsIGFuZCBzbyB3aWxsIHdhaXQgYSBtaW51dGUgb3IgbW9yZSBmb3IgcmVxdWly ZWQKLSAgICAgICAgICByZXBsaWVzIGJlZm9yZSBjb250aW51aW5nIHRoZSBzZXNzaW9uLiBJZiB5 b3Uga25vdyB0aGF0IEtlcm1pdCdzCi0gICAgICAgICAgVGVsbmV0IHBhcnRuZXIgd2lsbCBub3Qg YmUgc2VuZGluZyB0aGUgcmVxdWlyZWQgcmVwbGllcywgeW91IGNhbgotICAgICAgICAgIHNldCB0 aGlzIG9wdGlvbiBvZiBPRkYgdG8gYXZvaWQgdGhlIGxvbmcgdGltZW91dHMuIE9yIHlvdSBjYW4K LSAgICAgICAgICBpbnN0cnVjdCBLZXJtaXQgdG8gUkVGVVNFIHNwZWNpZmljIG9wdGlvbnMgd2l0 aCB0aGUgU0VUIFRFTE9QVAotICAgICAgICAgIGNvbW1hbmQuCi0KLSAgIFNFVCBURUxPUFQgWyB7 IC9DTElFTlQsIC9TRVJWRVIgfSBdIG9wdGlvbgotICAgICAgICAgIHsgQUNDRVBURUQsIFJFRlVT RUQsIFJFUVVFU1RFRCwgUkVRVUlSRUQgfQotICAgICAgICAgIFsgeyBBQ0NFUFRFRCwgUkVGVVNF RCwgUkVRVUVTVEVELCBSRVFVSVJFRCB9IF0KLSAgICAgICAgICBTRVQgVEVMT1BUIGxldHMgeW91 IHNwZWNpZnkgcG9saWN5IHJlcXVpcmVtZW50cyBmb3IgS2VybWl0J3MKLSAgICAgICAgICBoYW5k bGluZyBvZiBUZWxuZXQgb3B0aW9uIG5lZ290aWF0aW9ucy4gU2V0dGluZyBhbiBvcHRpb24gaXMK LSAgICAgICAgICBSRVFVSVJFRCBjYXVzZXMgS2VybWl0IHRvIG9mZmVyIHRoZSBvcHRpb24gdG8g dGhlIHBlZXIgYW5kCi0gICAgICAgICAgZGlzY29ubmVjdCBpZiB0aGUgb3B0aW9uIGlzIHJlZnVz ZWQuIFJFUVVFU1RFRCBjYXVzZXMgS2VybWl0IHRvCi0gICAgICAgICAgb2ZmZXIgYW4gb3B0aW9u IHRvIHRoZSBwZWVyLiBBQ0NFUFRFRCByZXN1bHRzIGluIG5vIG9mZmVyIGJ1dAotICAgICAgICAg IEtlcm1pdCB3aWxsIGF0dGVtcHQgdG8gbmVnb3RpYXRlIHRoZSBvcHRpb24gaWYgaXQgaXMgcmVx dWVzdGVkLgotICAgICAgICAgIFJFRlVTRUQgaW5zdHJ1Y3RzIEtlcm1pdCB0byByZWZ1c2UgdGhl IG9wdGlvbiBpZiBpdCBpcyByZXF1ZXN0ZWQKLSAgICAgICAgICBieSB0aGUgcGVlci4KLQotICAg ICAgICAgIFNvbWUgb3B0aW9ucyBhcmUgbmVnb3RpYXRlZCBpbiB0d28gZGlyZWN0aW9ucyBhbmQg YWNjZXB0Ci0gICAgICAgICAgc2VwYXJhdGUgcG9saWNpZXMgZm9yIGVhY2ggZGlyZWN0aW9uOyB0 aGUgZmlyc3Qga2V5d29yZCBhcHBsaWVzCi0gICAgICAgICAgdG8gS2VybWl0IGl0c2VsZiwgdGhl IHNlY29uZCBhcHBsaWVzIHRvIEtlcm1pdCdzIFRlbG5ldCBwYXJ0bmVyOwotICAgICAgICAgIGlm IHRoZSBzZWNvbmQga2V5d29yZCBpcyBvbWl0dGVkLCBhbiBhcHByb3ByaWF0ZQotICAgICAgICAg IChvcHRpb24tc3BlY2lmaWMpIGRlZmF1bHQgaXMgYXBwbGllZC4gWW91IGNhbiBhbHNvIGluY2x1 ZGUgYQotICAgICAgICAgIC9DTElFTlQgb3IgL1NFUlZFUiBzd2l0Y2ggdG8gaW5kaWNhdGUgd2hl dGhlciB0aGUgZ2l2ZW4gcG9saWNpZXMKLSAgICAgICAgICBhcHBseSB3aGVuIEtlcm1pdCBpcyB0 aGUgVGVsbmV0IGNsaWVudCBvciB0aGUgVGVsbmV0IHNlcnZlcjsgaWYKLSAgICAgICAgICBubyBz d2l0Y2ggaXMgZ2l2ZW4sIHRoZSBjb21tYW5kIGFwcGxpZXMgdG8gdGhlIGNsaWVudC4KLQotICAg ICAgICAgIE5vdGUgdGhhdCBzb21lIG9mIEtlcm1pdCdzIFRlbG5ldCBwYXJ0bmVycyBmYWlsIHRv IHJlZnVzZQotICAgICAgICAgIG9wdGlvbnMgdGhhdCB0aGV5IGRvIG5vdCByZWNvZ25pemUgYW5k IGluc3RlYWQgZG8gbm90IHJlc3BvbmQgYXQKLSAgICAgICAgICBhbGwuIEluIHRoaXMgY2FzZSBp dCBpcyBwb3NzaWJsZSB0byB1c2UgU0VUIFRFTE9QVCB0byBpbnN0cnVjdAotICAgICAgICAgIEtl cm1pdCB0byBSRUZVU0UgdGhlIG9wdGlvbiBiZWZvcmUgY29ubmVjdGluZyB0byB0aGUgcHJvYmxl bQotICAgICAgICAgIGhvc3QsIHRodXMgc2tpcHBpbmcgdGhlIHByb2JsZW1hdGljIG5lZ290aWF0 aW9uLgotCi0gICAgICAgICAgVXNlIFNIT1cgVEVMT1BUIHRvIHZpZXcgY3VycmVudCBUZWxuZXQg T3B0aW9uIG5lZ290aWF0aW9uCi0gICAgICAgICAgc2V0dGluZ3MuIFNIT1cgVEVMTkVUIGRpc3Bs YXlzIGN1cnJlbnQgVGVsbmV0IHNldHRpbmdzLgotCi0yLjMuMC4gQnVnIEZpeGVzCi0KLSAgIElm ICJzZXQgaG9zdCBub25leGlzdGVudC1ob3N0IiB3YXMgZ2l2ZW4gKGFuZCBpdCBwcm9wZXJseSBm YWlsZWQpLAotICAgZm9sbG93ZWQgYnkgY2VydGFpbiBjb21tYW5kcyBsaWtlIFNFTkQsIHRoZSBv cmlnaW5hbCBsaW5lIGFuZCBtb2RlbQotICAgdHlwZSB3ZXJlIG5vdCByZXN0b3JlZCBhbmQgQy1L ZXJtaXQgdGhvdWdodCB0aGF0IGl0IHN0aWxsIGhhZCBhIG5ldHdvcmsKLSAgIGhvc3RuYW1lOyBm aXhlZCBpbiA3LjAuCi0KLTIuMy4xLiBUZWxuZXQgQmluYXJ5IE1vZGUgQnVnIEFkanVzdG1lbnRz Ci0KLSAgIFNFVCBURUxORVQgQlVHIEJJTkFSWS1NRS1NRUFOUy1VLVRPTyB7IE9OLCBPRkYgfSB3 YXMgYWRkZWQgdG8gZWRpdCAxOTIKLSAgIGFmdGVyIHRoZSBib29rIHdhcyBwcmludGVkLiBBbHNv IFNFVCBURUxORVQgQlVHIEJJTkFSWS1VLU1FQU5TLU1FLVRPTy4KLSAgIFRoZSBkZWZhdWx0IGZv ciBib3RoIGlzIE9GRi4gT04gc2hvdWxkIGJlIHVzZWQgd2hlbiBjb21tdW5pY2F0aW5nIHdpdGgK LSAgIGEgVGVsbmV0IHBhcnRuZXIgKGNsaWVudCBvciBzZXJ2ZXIpIHRoYXQgbWlzdGFrZW5seSBi ZWxpZXZlcyB0aGF0Ci0gICB0ZWxsaW5nIEMtS2VybWl0IHRvIGVudGVyIFRlbG5ldCBiaW5hcnkg bW9kZSBhbHNvIG1lYW5zIHRoYXQgaXQsIHRvbywKLSAgIGlzIGluIGJpbmFyeSBtb2RlLCBjb250 cmFyeSB0byB0aGUgVGVsbmV0IHNwZWNpZmljYXRpb24sIHdoaWNoIHNheXMKLSAgIHRoYXQgYmlu YXJ5IG1vZGUgbXVzdCBiZSBuZWdvdGlhdGVkIGluIGVhY2ggZGlyZWN0aW9uIHNlcGFyYXRlbHku Ci0KLTIuMy4yLiBWTVMgVUNYIFRlbG5ldCBQb3J0IEJ1ZyBBZGp1c3RtZW50Ci0KLSAgIEEgbmV3 IGNvbW1hbmQsIFNFVCBUQ1AgVUNYLVBPUlQtQlVHLCB3YXMgYWRkZWQgZm9yIFZNUyB2ZXJzaW9u cyB3aXRoCi0gICBVQ1ggKERFQyBUQ1AvSVApLCBhcHBseWluZyBvbmx5IHRvIGVhcmx5IHZlcnNp b25zIG9mIFVDWCwgbGlrZSAyLjIgb3IKLSAgIGVhcmxpZXIuIElmIHlvdSB0cnkgdG8gdXNlIFZN UyBDLUtlcm1pdCB0byBtYWtlIGEgVGVsbmV0IGNvbm5lY3Rpb24KLSAgIHVzaW5nIGEgcG9ydCBu YW1lIChsaWtlICJ0ZWxuZXQiLCB3aGljaCBpcyB1c2VkIGJ5IGRlZmF1bHQpLCB0aGUKLSAgIHVu ZGVybHlpbmcgVUNYIGdldHNlcnZieW5hbWUoKSBmdW5jdGlvbiBtaWdodCByZXR1cm4gdGhlIHNl cnZpY2UgbnVtYmVyCi0gICB3aXRoIGl0cyBieXRlcyBzd2FwcGVkIGFuZCB0aGUgY29ubmVjdGlv biB3aWxsIGZhaWwuIElmICJ0ZWxuZXQKLSAgIGhvc3RuYW1lIDIzIiB3b3JrcywgdGhlbiB5b3Vy IHZlcnNpb24gb2YgVUNYIGhhcyB0aGlzIGJ1ZyBhbmQgeW91IGNhbgotICAgcHV0ICJzZXQgdGNw IHVjeC1wb3J0LWJ1ZyBvbiIgaW4geW91ciBDS0VSTUlULklOSSBmaWxlIHRvIGdldCBhcm91bmQK LSAgIGl0LgotCi0yLjMuMy4gVGVsbmV0IE5ldyBFbnZpcm9ubWVudCBPcHRpb24KLQotICAgVGhl IFRFTE5FVCBORVctRU5WSVJPTk1FTlQgb3B0aW9uIChbNDExXVJGQyAxNTcyKSBpcyBzdXBwb3J0 ZWQgYXMgNy4wLgotICAgVGhpcyBvcHRpb24gYWxsb3dzIHRoZSBDLUtlcm1pdCBUZWxuZXQgY2xp ZW50IHRvIHNlbmQgY2VydGFpbgotICAgd2VsbC1rbm93biB2YXJpYWJsZXMgdG8gdGhlIFRlbG5l dCBzZXJ2ZXIsIGluY2x1ZGluZyBVU0VSLCBQUklOVEVSLAotICAgRElTUExBWSwgYW5kIHNldmVy YWwgb3RoZXJzLiBUaGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluCi0gICBXaW5k b3dzIGFuZCBPUy8yLCBkaXNhYmxlZCBieSBkZWZhdWx0IGVsc2V3aGVyZS4gVGhlIGNvbW1hbmQg dG8gZW5hYmxlCi0gICBhbmQgZGlzYWJsZSBpdCBpczoKLQotICBTRVQgVEVMTkVUIEVOVklST05N RU5UIHsgT04sIE9GRiB9Ci0KLSAgIFdoZW4gT04sIGFuZCB5b3UgVGVsbmV0IHRvIGFub3RoZXIg Y29tcHV0ZXIsIHlvdSBtaWdodCAob3IgbWlnaHQgbm90KQotICAgbm90aWNlIHRoYXQgdGhlICJs b2dpbjoiIG9yICJVc2VybmFtZToiIHByb21wdCBkb2VzIG5vdCBhcHBlYXIgLS0KLSAgIHRoYXQn cyBiZWNhdXNlIHlvdXIgdXNlcm5hbWUgd2FzIHNlbnQgYWhlYWQsIGluIHdoaWNoIGNhc2UgdGhl IHJlbW90ZQotICAgc3lzdGVtIG1pZ2h0IHByb21wdCB5b3Ugb25seSBmb3IgeW91ciBwYXNzd29y ZCAoc2ltaWxhciB0byBSbG9naW4pLiBVc2UKLSAgICJzZXQgdGVsbmV0IGVudmlyb25tZW50IG9m ZiIgdG8gZGVmZWF0IHRoaXMgZmVhdHVyZSwgcGFydGljdWxhcmx5IGluCi0gICBzY3JpcHRzIHdo ZXJlIHRoZSBkaWFsb2cgbXVzdCBiZSBwcmVkaWN0YWJsZS4gWW91IGNhbiBhbHNvIHVzZSB0aGlz Ci0gICBjb21tYW5kIHRvIHNwZWNpZnkgb3Igb3ZlcnJpZGUgc3BlY2lmaWMgd2VsbC1rbm93biBl bnZpcm9ubWVudCB2YXJpYWJsZQotICAgdmFsdWVzOgotCi0gU0VUIFRFTE5FVCBFTlZJUk9OTUVO VCB7IEFDQ1QsRElTUExBWSxKT0IsUFJJTlRFUixTWVNURU1UWVBFLFVTRVIgfSBbIHRleHQgXQot Ci0yLjMuNC4gVGVsbmV0IExvY2F0aW9uIE9wdGlvbgotCi0gICBUaGUgVEVMTkVUIExPQ0FUSU9O IG9wdGlvbiAoWzQxMl1SRkMgNzc5KSBpcyBzdXBwb3J0ZWQgaW4gNy4wLiBUaGlzCi0gICBvcHRp b24gYWxsb3dzIHRoZSBDLUtlcm1pdCBUZWxuZXQgY2xpZW50IHRvIHNlbmQgYSBsb2NhdGlvbiBz dHJpbmcgdG8KLSAgIHRoZSBzZXJ2ZXIgaWYgdGhlIHNlcnZlciBpbmRpY2F0ZXMgaXRzIHdpbGxp bmduZXNzIHRvIGFjY2VwdCBvbmUuIElmIGFuCi0gICBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1l ZCBMT0NBVElPTiBleGlzdHMgYXQgdGhlIHRpbWUgQy1LZXJtaXQgc3RhcnRzLAotICAgaXRzIHZh bHVlIGlzIHVzZWQgYXMgdGhlIGxvY2F0aW9uIHN0cmluZy4gSWYgeW91IHdhbnQgdG8gY2hhbmdl IGl0LAotICAgdXNlOgotCi0gIFNFVCBURUxORVQgTE9DQVRJT04gdGV4dAotCi0gICBJZiB5b3Ug b21pdCB0aGUgdGV4dCBmcm9tIHRoaXMgY29tbWFuZCwgdGhlIFRlbG5ldCBsb2NhdGlvbiBmZWF0 dXJlIGlzCi0gICBkaXNhYmxlZC4KLQotICAgU0VUIFRFTE5FVCBFTlZJUk9OTUVOVCBESVNQTEFZ IGlzIHVzZWQgdG8gc2V0IHRoZSBESVNQTEFZIHZhcmlhYmxlIHRoYXQKLSAgIGlzIHNlbnQgdG8g dGhlIGhvc3QsIGFzIHdlbGwgYXMgdGhlIFhESVNQTEFZIGxvY2F0aW9uLgotCi0yLjMuNS4gQ29u bmVjdGluZyB0byBSYXcgVENQIFNvY2tldHMKLQotICAgVGhlIFNFVCBIT1NUIGFuZCBURUxORVQg Y29tbWFuZHMgbm93IGFjY2VwdCBhbiBvcHRpb25hbCBzd2l0Y2gsCi0gICAvUkFXLVNPQ0tFVCwg YXQgdGhlIGVuZCwgb25seSBpZiB5b3UgZmlyc3QgZ2l2ZSBhIGhvc3QgYW5kIGEgcG9ydC4KLSAg IEV4YW1wbGU6Ci0KLSAgc2V0IGhvc3QgeHl6Y29ycC5jb20gMjMgL3Jhdy1zb2NrZXQKLSAgc2V0 IGhvc3QgMTI4LjQ5LjM5LjI6MjAwMCAvcmF3LXNvY2tldAotICB0ZWxuZXQgeHl6Y29ycC5jb20g MzAwMCAvcmF3Ci0KLSAgIFdpdGhvdXQgdGhpcyBzd2l0Y2gsIEMtS2VybWl0IGJlaGF2ZXMgYXMg YSBUZWxuZXQgY2xpZW50IHdoZW4gKGEpIHRoZQotICAgcG9ydCBpcyAyMyBvciAxNjQ5LCBvciAo YikgdGhlIHBvcnQgaXMgbm90IDUxMyBhbmQgdGhlIHNlcnZlciBzZW50IHdoYXQKLSAgIGFwcGVh cmVkIHRvIGJlIFRlbG5ldCBuZWdvdGlhdGlvbnMgLS0gdGhhdCBpcywgbWVzc2FnZXMgc3RhcnRp bmcgd2l0aAotICAgMHhGRiAoSUFDKS4gV2l0aCB0aGlzIHN3aXRjaCwgS2VybWl0IHNob3VsZCB0 cmVhdCBhbGwgaW5jb21pbmcgYnl0ZXMgYXMKLSAgIHJhdyBkYXRhLCBhbmQgd2lsbCBub3QgZW5n YWdlIGluIGFueSBUZWxuZXQgbmVnb3RpYXRpb25zIG9yIE5WVCBDUkxGCi0gICBtYW5pcHVsYXRp b25zLiBUaGlzIGFsbG93cyB0cmFuc3BhcmVudCBvcGVyYXRpb24gdGhyb3VnaCAoZS5nLikgcmF3 IFRDUAotICAgcG9ydHMgb24gQ2lzY28gdGVybWluYWwgc2VydmVycywgdGhyb3VnaCB0aGUgJ21v ZGVtZCcgbW9kZW0gc2VydmVyLAotICAgZXRjLgotCi0yLjMuNi4gSW5jb21pbmcgVENQIENvbm5l Y3Rpb25zCi0KLSAgIEFjY29tcGxpc2hlZCB2aWEgU0VUIEhPU1QgKiBwb3J0LCB3ZXJlIGludHJv ZHVjZWQgaW4gQy1LZXJtaXQgNi4wLCBidXQKLSAgIGZvciBVTklYIG9ubHkuIEluIFZlcnNpb24g Ny4wLCB0aGV5IGFyZSBhbHNvIGF2YWlsYWJsZSBmb3IgVk1TLgotCi0yLjQuIFRoZSBFSUdIVEJJ VCBDb21tYW5kCi0KLSAgIEVJR0hUQklUIGlzIHNpbXBseSBhIHNob3J0aGFuZCBmb3I6IFNFVCBQ QVJJVFkgTk9ORSwgU0VUIFRFUk1JTkFMCi0gICBCWVRFU0laRSA4LCBTRVQgQ09NTUFORCBCWVRF U0laRSA4OyB0aGF0IGlzLCBhIHdheSB0byBzZXQgdXAgYW4gOC1iaXQKLSAgIGNsZWFuIGNvbm5l Y3Rpb24gaW4gYSBzaW5nbGUgY29tbWFuZC4KLQotMi41LiBUaGUgU2VydmljZXMgRGlyZWN0b3J5 Ci0KLSAgIENoYXB0ZXIgNyBvZiBbNDEzXVVzaW5nIEMtS2VybWl0IGRvZXMgbm90IG1lbnRpb24g dGhlIFVMT0dJTiBtYWNybywKLSAgIHdoaWNoIGlzIHVzZWQgYnkgb3VyIHNhbXBsZSBzZXJ2aWNl cyBkaXJlY3RvcnksIENLRVJNSVQuS05ELiBVbmxpa2UKLSAgIFVOSVhMT0dJTiwgVk1TTE9HSU4s IGV0YywgdGhpcyBvbmUgaXMgZm9yIHVzZSB3aXRoIHN5c3RlbXMgdGhhdCByZXF1aXJlCi0gICBh IHVzZXIgSUQgYnV0IG5vIHBhc3N3b3JkLiBUaGVyZWZvcmUgaXQgZG9lc24ndCBwcm9tcHQgZm9y IGEgcGFzc3dvcmQKLSAgIG9yIHdhaXQgZm9yIGEgcGFzc3dvcmQgcHJvbXB0IGZyb20gdGhlIHJl bW90ZSBzZXJ2aWNlLgotCi0gICBJbiB2ZXJzaW9uIDcuMCwgdGhlIENBTEwgbWFjcm8gd2FzIGNo YW5nZWQgdG8gbm90IGV4ZWN1dGUgYSBTRVQgTU9ERU0KLSAgIFRZUEUgY29tbWFuZCBpZiB0aGUg Z2l2ZW4gbW9kZW0gdHlwZSB3YXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgb25lOwotICAgb3Ro ZXJ3aXNlIHRoZSBuZXcgU0VUIE1PREVNIFRZUEUgY29tbWFuZCB3b3VsZCBvdmVyd3JpdGUgYW55 Ci0gICBjdXN0b21pemF0aW9ucyB0aGF0IHRoZSB1c2VyIGhhZCBtYWRlIHRvIHRoZSBtb2RlbSBz ZXR0aW5ncy4gRGl0dG8gZm9yCi0gICBTRVQgTElORSAvIFNFVCBQT1JUIGFuZCBTRVQgU1BFRUQu Ci0KLTIuNi4gQ2xvc2luZyBDb25uZWN0aW9ucwotCi0gICBVbnRpbCB2ZXJzaW9uIDcuMCwgdGhl cmUgd2FzIG5ldmVyIGFuIG9idmlvdXMgYW5kIGdlbmVyYWwgd2F5IHRvIGNsb3NlCi0gICBhIGNv bm5lY3Rpb24uIElmIGEgc2VyaWFsIGNvbm5lY3Rpb24gd2FzIG9wZW4sIGl0IGNvdWxkIGJlIGNs b3NlZCBieQotICAgInNldCBsaW5lIiBvciAic2V0IHBvcnQiIChnaXZpbmcgbm8gZGV2aWNlIG5h bWUpOyBpZiBhIG5ldHdvcmsKLSAgIGNvbm5lY3Rpb24gd2FzIG9wZW4sIGl0IGNvdWxkIGJlIGNs b3NlZCBieSAic2V0IGhvc3QiIChubyBob3N0IG5hbWUpLgotCi0gICBJbiB2ZXJzaW9uIDcuMCwg YSBuZXcgY29tbWFuZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gaW4gYW4gb2J2aW91cyBhbmQKLSAg IHN0cmFpZ2h0Zm9yd2FyZCB3YXksIG5vIG1hdHRlciB3aGF0IHRoZSBjb25uZWN0aW9uIHR5cGU6 Ci0KLSAgQ0xPU0UgWyBDT05ORUNUSU9OIF0KLQotICAgVGhlIENMT1NFIGNvbW1hbmQgd2FzIGFs cmVhZHkgcHJlc2VudCwgYW5kIHJlcXVpcmVkIGFuIG9wZXJhbmQgc3VjaCBhcwotICAgREVCVUct TE9HLCBXUklURS1GSUxFLCBldGMsIGFuZCBzbyBjb3VsZCBuZXZlciBiZSBnaXZlbiBieSBpdHNl bGYuIFRoZQotICAgbmV3IENPTk5FQ1RJT04gb3BlcmFuZCBpcyBub3cgdGhlIGRlZmF1bHQgb3Bl cmFuZCBmb3IgQ0xPU0UsIHNvIENMT1NFCi0gICBieSBpdHNlbGYgY2xvc2VzIHRoZSBjb25uZWN0 aW9uLCBpZiBvbmUgaXMgb3BlbiwganVzdCBhcyB5b3Ugd291bGQKLSAgIGV4cGVjdCwgZXNwZWNp YWxseSBpZiB5b3UgYXJlIGEgVGVsbmV0IG9yIEZ0cCB1c2VyLgotCi0gICBBbHNvIHNlZSB0aGUg ZGVzY3JpcHRpb24gb2YgdGhlIG5ldyBTRVQgQ0xPU0UtT04tRElTQ09OTkVDVCBjb21tYW5kIGlu Ci0gICBbNDE0XVNlY3Rpb24gMi4xMC4KLQotMi43LiBVc2luZyBDLUtlcm1pdCB3aXRoIEV4dGVy bmFsIENvbW11bmljYXRpb24gUHJvZ3JhbXMKLQotICAgQy1LZXJtaXQgNy4wIGluY2x1ZGVzIGEg bmV3IGFiaWxpdHkgdG8gY3JlYXRlIGFuZCBjb25kdWN0IHNlc3Npb25zCi0gICB0aHJvdWdoIG90 aGVyIGNvbW11bmljYXRpb25zIHByb2dyYW1zLiBUd28gbWV0aG9kcyBhcmUgYXZhaWxhYmxlOgot Ci0gICAgMS4gUHR5IChwc2V1ZG90ZXJtaW5hbCk6IFRoZSBleHRlcm5hbCBwcm9ncmFtIGlzIHJ1 biBvbiBhCi0gICAgICAgInBzZXVkb3Rlcm1pbmFsIiwgd2hpY2ggaXMgY29udHJvbGxlZCBieSBL ZXJtaXQuIFRoaXMgbWV0aG9kIHdvcmtzCi0gICAgICAgd2l0aCBwcmFjdGljYWxseSBhbnkgZXh0 ZXJuYWwgcHJvZ3JhbSwgYnV0IGl0IGlzIG5vdCBwb3J0YWJsZS4gQXQKLSAgICAgICB0aGlzIHdy aXRpbmcsIGl0IHdvcmtzIG9ubHkgb24gc29tZSAobm90IGFsbCkgVU5JWCB2ZXJzaW9ucywgYW5k Ci0gICAgICAgbm90IG9uIGFueSBub24tVU5JWCBwbGF0Zm9ybXMuCi0gICAgMi4gUGlwZTogVGhl IGV4dGVybmFsIHByb2dyYW0ncyBzdGFuZGFyZCBpbnB1dCBhbmQgb3V0cHV0IGFyZQotICAgICAg IHJlZGlyZWN0ZWQgdGhyb3VnaCBhICJwaXBlIiBjb250cm9sbGVkIGJ5IEtlcm1pdC4gVGhpcyBt ZXRob2QgaXMKLSAgICAgICByZWxhdGl2ZWx5IHBvcnRhYmxlIC0tIGl0IHNob3VsZCB3b3JrIGFj cm9zcyBhbGwgVU5JWCB2ZXJzaW9ucywgYW5kCi0gICAgICAgaXQgYWxzbyB3b3JrcyBpbiBXaW5k b3dzIGFuZCBPUy8yIC0tIGJ1dCBpdCBpcyBlZmZlY3RpdmUgb25seSB3aGVuCi0gICAgICAgdGhl IGV4dGVybmFsIHByb2dyYW0gYWN0dWFsbHkgdXNlcyBzdGFuZGFyZCBpL28gKGFuZCBtYW55IGRv bid0KS4KLQotICAgVGhlIHR3byBtZXRob2RzIGFyZSBzdGFydGVkIGRpZmZlcmVudGx5IGJ1dCBh cmUgdXNlZCB0aGUgc2FtZSB3YXkKLSAgIHRoZXJlYWZ0ZXIuCi0KLSAgIFRoZSBwdXJwb3NlIG9m IHRoaXMgZmVhdHVyZSBpcyB0byBsZXQgeW91IHVzZSBDLUtlcm1pdCBzZXJ2aWNlcyBsaWtlCi0g ICBmaWxlIHRyYW5zZmVyLCBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uLCBzY3JpcHRpbmcsIGF1 dG9tYXRpYyBkaWFsaW5nLAotICAgZXRjLCBvbiBjb25uZWN0aW9ucyB0aGF0IEtlcm1pdCBjYW4n dCBvdGhlcndpc2UgbWFrZSBpdHNlbGYuCi0KLSAgIFRoaXMgZmVhdHVyZSBpcyB0aGUgb3Bwb3Np dGUgb2YgdGhlIFJFRElSRUNUIGZlYXR1cmUsIGluIHdoaWNoIEMtS2VybWl0Ci0gICBtYWtlcyB0 aGUgY29ubmVjdGlvbiwgYW5kIHJlZGlyZWN0cyBhbiBleHRlcm5hbCAobG9jYWwpIGNvbW1hbmQg b3IKLSAgIHByb2dyYW0gb3ZlciB0aGlzIGNvbm5lY3Rpb24uIEluIGEgcHR5IG9yIHBpcGUgY29u bmVjdGlvbiwgQy1LZXJtaXQKLSAgIHJ1bnMgYW5kIGNvbnRyb2xzIGEgbG9jYWwgY29tbWFuZCBv ciBwcm9ncmFtLCB3aGljaCBtYWtlcyB0aGUKLSAgIGNvbm5lY3Rpb24uIChUaGUgc2FtZSBtZXRo b2QgY2FuIGJlIHVzZWQgdG8gc2ltcGx5IHRvIGNvbnRyb2wgYSBsb2NhbAotICAgcHJvZ3JhbSB3 aXRob3V0IG1ha2luZyBhIGNvbm5lY3Rpb247IHNlZSBbNDE1XVNlY3Rpb24gMi44LikKLQotICAg VG8gZmluZCBvdXQgaWYgeW91ciB2ZXJzaW9uIG9mIEtlcm1pdCBpbmNsdWRlcyBQVFkgc3VwcG9y dCwgdHlwZSAic2hvdwotICAgZmVhdHVyZXMiIGFuZCBsb29rIGZvciBORVRQVFkgaW4gdGhlIGFs cGhhYmV0aWNhbCBsaXN0IG9mIG9wdGlvbnMuIEZvcgotICAgcGlwZXMsIGxvb2sgZm9yIE5FVENN RC4KLQotICAgVGhlIGNvbW1hbmRzIGFyZToKLQotICAgU0VUIE5FVFdPUksgVFlQRSBQVFkgb3Ig U0VUIE5FVFdPUksgVFlQRSBQSVBFCi0gICBTRVQgSE9TVCBjb21tYW5kCi0gICAgICAgICAgd2hl cmUgY29tbWFuZCBpcyBhbnkgaW50ZXJhY3RpdmUgY29tbWFuZC4gSWYgdGhlIGNvbW1hbmQgZG9l cwotICAgICAgICAgIG5vdCB1c2Ugc3RhbmRhcmQgaS9vLCB5b3UgbXVzdCB1c2UgU0VUIE5FVFdP UksgVFlQRSBQVFkuCi0KLSAgIE5vdGVzOgotCi0gICAgICogQ09NTUFORCBpcyBhbiBpbnZpc2li bGUgc3lub255bSBmb3IgUElQRS4KLSAgICAgKiBUaGUgY29tbWFuZCBhbmQgaXRzIGFyZ3VtZW50 cyBhcmUgY2FzZS1zZW5zaXRpdmUgaW4gVU5JWC4KLQotICAgVGhlIFNFVCBORVRXT1JLIFRZUEUs IFNFVCBIT1NUIHNlcXVlbmNlIHNldHMgdGhlIGdpdmVuIG5ldHdvcmsgdHlwZSBmb3IKLSAgIGFs bCBzdWJzZXF1ZW50IFNFVCBIT1NUIGNvbW1hbmRzIHVudGlsIGFub3RoZXIgU0VUIE5FVFdPUksg VFlQRSBjb21tYW5kCi0gICBpcyBnaXZlbiB0byBjaGFuZ2UgaXQuCi0KLSAgIFlvdSBjYW4gYWxz byB1c2UgdGhlIG5ldyAvTkVUV09SSy1UWVBFOlBUWSBvciAvTkVUV09SSy1UWVBFOlBJUEUgKG9y Ci0gICBzaW1wbHkgL1BJUEUgb3IgL1BUWSkgc3dpdGNoZXMgb24gdGhlIFNFVCBIT1NUIGNvbW1h bmQgaXRzZWxmOgotCi0gIFNFVCBIT1NUIC9ORVRXT1JLLVRZUEU6UElQRSBjb21tYW5kICA7IFRo ZXNlIHR3byBhcmUgdGhlIHNhbWUKLSAgU0VUIEhPU1QgL1BJUEUgY29tbWFuZAotCi0gIFNFVCBI T1NUIC9ORVRXT1JLLVRZUEU6UFRZIGNvbW1hbmQgICA7IERpdHRvCi0gIFNFVCBIT1NUIC9QVFkg Y29tbWFuZAotCi0gICBUaGVzZSBhcmUgbGlrZSBTRVQgTkVUV09SSyBUWVBFIGZvbGxvd2VkIGJ5 IFNFVCBIT1NULCBleGNlcHQgdGhleSBhcHBseQotICAgb25seSB0byB0aGUgY29ubmVjdGlvbiBi ZWluZyBtYWRlIGFuZCBkbyBub3QgY2hhbmdlIHRoZSBnbG9iYWwgbmV0d29yawotICAgdHlwZSBz ZXR0aW5nIChzZWUgWzQxNl1TZWN0aW9uIDEuNSBhYm91dCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVu Ci0gICBzd2l0Y2hlcyBhbmQgU0VUIGNvbW1hbmRzKS4KLQotICAgSW5jbHVkZSBhbnkgY29tbWFu ZC1saW5lIG9wdGlvbnMgd2l0aCB0aGUgY29tbWFuZCB0aGF0IG1pZ2h0IGJlIG5lZWRlZCwKLSAg IGFzIGluIHRoaXMgZXhhbXBsZSB3aGVyZSBDLUtlcm1pdCB1c2VzIGFub3RoZXIgY29weSBvZiBp dHNlbGYgYXMgdGhlCi0gICBjb21tdW5pY2F0aW9ucyBwcm9ncmFtOgotCi0gIFNFVCBIT1NUIC9Q SVBFIC9DT05ORUNUIGtlcm1pdCAtWVFKIHh5emNvcnAuY29tCi0KLSAgICAgSU1QT1JUQU5UOiBJ biBVbml4LCB3aWxkY2FyZHMgYW5kIHJlZGlyZWN0b3JzIGFyZSBpbnRlcnByZXRlZCBieSB0aGUK LSAgICAgc2hlbGwuIElmIHlvdSB3YW50IHRvIHJ1biBhIHByb2dyYW0gd2l0aCAoc2F5KSBTRVQg SE9TVCAvUFRZIHdpdGgKLSAgICAgaXRzIGkvbyByZWRpcmVjdGVkIG9yIHdpdGggd2lsZGNhcmQg ZmlsZSBhcmd1bWVudHMsIHlvdSB3aWxsIG5lZWQgdG8KLSAgICAgaW52b2tlIHRoZSBzaGVsbCB0 b28uIEV4YW1wbGU6Ci0KLVNFVCBIT1NUIC9QVFkge3NoIC1jICJjcnlwdCA8IGZvby54In0KLVNF VCBIT1NUIC9QVFkge3NoIC1jICJncmVwIHNvbWVzdHJpbmcgKi50eHQifQotCi0gICBBcyB1c3Vh bCwgaWYgeW91IGluY2x1ZGUgdGhlIC9DT05ORUNUIHN3aXRjaCwgU0VUIEhPU1QgZW50ZXJzIENP Tk5FQ1QKLSAgIG1vZGUgaW1tZWRpYXRlbHkgdXBvbiBzdWNjZXNzZnVsIGV4ZWN1dGlvbiBvZiB0 aGUgZ2l2ZW4gY29tbWFuZC4KLSAgIFRoZXJlZm9yZSBuZXcgY29tbWFuZHMgYXJlIGF2YWlsYWJs ZSBhcyBhIHNob3J0aGFuZCBmb3IgU0VUIEhPU1QKLSAgIC9DT05ORUNUIC9QVFkgYW5kIC9QSVBF OgotCi0gICBQVFkgWyBjb21tYW5kIF0KLSAgIFBJUEUgWyBjb21tYW5kIF0KLSAgICAgICAgICBU aGUgUFRZIGFuZCBQSVBFIGNvbW1hbmRzIHdvcmsgbGlrZSB0aGUgVEVMTkVUIGFuZCBSTE9HSU4K LSAgICAgICAgICBjb21tYW5kczogdGhleSBzZXQgdXAgdGhlIGNvbm5lY3Rpb24gKGluIHRoaXMg Y2FzZSwgdXNpbmcgdGhlCi0gICAgICAgICAgZ2l2ZW4gY29tbWFuZCkgYW5kIHRoZW4gZW50ZXIg Q09OTkVDVCBtb2RlIGF1dG9tYXRpY2FsbHkgKGlmIHRoZQotICAgICAgICAgIFBJUEUgb3IgUFRZ IGNvbW1hbmQgaXMgZ2l2ZW4gd2l0aG91dCBhIGNvbW1hbmQsIGl0IGNvbnRpbnVlcyB0aGUKLSAg ICAgICAgICBjdXJyZW50IHNlc3Npb24gaWYgb25lIGlzIGFjdGl2ZTsgb3RoZXJ3aXNlIGl0IGdp dmVzIGFuIGVycm9yCi0gICAgICAgICAgbWVzc2FnZSkuCi0KLSAgIFRoZSBQSVBFIGNvbW1hbmQg aXMgbmFtZWQgYWZ0ZXIgdGhlIG1lY2hhbmlzbSBieSB3aGljaCBDLUtlcm1pdAotICAgY29tbXVu aWNhdGVzIHdpdGggdGhlIGNvbW1hbmQ6IFVOSVggcGlwZXMuIEMtS2VybWl0J3MgaS9vIGlzICJw aXBlZCIKLSAgIHRocm91Z2ggdGhlIGdpdmVuIGNvbW1hbmQuIEhlcmUgaXMgYSB0eXBpY2FsIGV4 YW1wbGU6Ci0KLSAgUElQRSBybG9naW4gLTggeHl6Y29ycC5jb20KLQotICAgVGhpcyBpcyBlcXVp dmFsZW50IHRvOgotCi0gIFNFVCBIT1NUIC9QSVBFIHJsb2dpbiAtOCB4eXpjb3JwLmNvbQotICBD T05ORUNUCi0KLSAgIGFuZCB0bzoKLQotICBTRVQgSE9TVCAvUElQRSAvQ09OTkVDVCBybG9naW4g LTggeHl6Y29ycC5jb20KLQotICAgSU1QT1JUQU5UOgotICAgICAgICAgIElmIHlvdSBhcmUgd3Jp dGluZyBhIHNjcmlwdCwgZG8gbm90IHVzZSB0aGUgUElQRSwgUFRZLCBURUxORVQsCi0gICAgICAg ICAgb3IgUkxPR0lOIGNvbW1hbmQgdW5sZXNzIHlvdSByZWFsbHkgd2FudCBDLUtlcm1pdCB0byBl bnRlcgotICAgICAgICAgIENPTk5FQ1QgbW9kZSBhdCB0aGF0IHBvaW50LiBOb3JtYWxseSBTRVQg SE9TVCBpcyB1c2VkIGluIHNjcmlwdHMKLSAgICAgICAgICB0byBhbGxvdyB0aGUgbG9naW4gYW5k IG90aGVyIGRpYWxvZ3MgdG8gYmUgY29udHJvbGxlZCBieSB0aGUKLSAgICAgICAgICBzY3JpcHQg aXRzZWxmLCByYXRoZXIgdGhhbiBieSBhbiBhY3RpdmVseSBwYXJ0aWNpcGF0aW5nIGh1bWFuIGF0 Ci0gICAgICAgICAgdGhlIGtleWJvYXJkLgotCi0gICBUaHJvdWdocHV0IG9mIHB0eSBhbmQgcGlw ZSBjb25uZWN0aW9ucyBpcyBsaW1pdGVkIGJ5IHRoZSBwZXJmb3JtYW5jZSBvZgotICAgdGhlIGNo b3NlbiBjb21tYW5kIG9yIHByb2dyYW0gYW5kIGJ5IHRoZSBpbnRlcnByb2Nlc3MgY29tbXVuaWNh dGlvbgotICAgKElQQykgbWV0aG9kIHVzZWQgYW5kL29yIGJ1ZmZlcmluZyBjYXBhY2l0eSBvZiB0 aGUgcGlwZSBvciBwdHksIHdoaWNoCi0gICBpbiB0dXJuIGRlcGVuZHMgb24gdGhlIHVuZGVybHlp bmcgb3BlcmF0aW5nIHN5c3RlbS4KLQotICAgSW4gb25lIHRyaWFsIChvbiBTdW5PUyA0LjEuMyks IHdlIG9ic2VydmVkIGZpbGUgdHJhbnNmZXIgcmF0ZXMgb3ZlciBhbgotICAgcmxvZ2luIGNvbm5l Y3Rpb24gcHJvY2VlZGluZyBhdCAyMDBLY3BzIGZvciBkb3dubG9hZHMsIGJ1dCBvbmx5IDEwS2Nw cwotICAgZm9yIHVwbG9hZHMgb24gdGhlIHNhbWUgY29ubmVjdGlvbiB3aXRoIHRoZSBzYW1lIHNl dHRpbmdzIChzaW1pbGFyCi0gICBkaXNwYXJpdGllcyB3ZXJlIG5vdGVkIGluIEhQLVVYKS4gRXhh bWluYXRpb24gb2YgdGhlIGxvZ3MgcmV2ZWFsZWQgdGhhdAotICAgYSB3cml0ZSB0byB0aGUgcGlw ZSBjb3VsZCB0YWtlIGFzIGxvbmcgYXMgNSBzZWNvbmRzLCB3aGVyZWFzIHJlYWRzIHdlcmUKLSAg IHByYWN0aWNhbGx5IGluc3RhbnRhbmVvdXMuIE9uIHRoZSBvdGhlciBoYW5kLCB1c2luZyBUZWxu ZXQgYXMgdGhlCi0gICBleHRlcm5hbCBwcm9ncmFtIHJhdGhlciB0aGFuIHJsb2dpbiwgZG93bmxv YWRzIGFuZCB1cGxvYWRzIHdlcmUgYmV0dGVyCi0gICBtYXRjaGVkIGF0IGFib3V0IDE3N0sgZWFj aC4KLQotICAgTW9zdCBleHRlcm5hbCBjb21tdW5pY2F0aW9uIHByb2dyYW1zLCBsaWtlIEMtS2Vy bWl0IGl0c2VsZiwgaGF2ZSBlc2NhcGUKLSAgIGNoYXJhY3RlcnMgb3Igc2VxdWVuY2VzLiBOb3Jt YWxseSB0aGVzZSBiZWdpbiB3aXRoIChvciBjb25zaXN0IGVudGlyZWx5Ci0gICBvZikgYSBjb250 cm9sIGNoYXJhY3Rlci4gWW91IG11c3QgYmUgc3VyZSB0aGF0IHRoaXMgY29udHJvbCBjaGFyYWN0 ZXIKLSAgIGlzIG5vdCAidW5wcmVmaXhlZCIgd2hlbiB1cGxvYWRpbmcgZmlsZXMsIG90aGVyd2lz ZSB0aGUgZXh0ZXJuYWwKLSAgIHByb2dyYW0gd2lsbCAiZXNjYXBlIGJhY2siIHRvIGl0cyBwcm9t cHQsIG9yIGNsb3NlIHRoZSBjb25uZWN0aW9uLCBvcgotICAgdGFrZSBzb21lIG90aGVyIHVud2Fu dGVkIGFjdGlvbi4gV2hlbiBpbiBDT05ORUNUIG1vZGUsIG9ic2VydmUgdGhlCi0gICBwcm9ncmFt J3Mgbm9ybWFsIGludGVyYWN0aW9uIHJ1bGVzLiBPZiBjb3Vyc2UgQy1LZXJtaXQncyBvd24gZXNj YXBlCi0gICBjaGFyYWN0ZXIgKG5vcm1hbGx5IEN0cmwtXCkgaXMgYWN0aXZlIHRvbywgdW5sZXNz IHlvdSBoYXZlIHRha2VuIHNvbWUKLSAgIGFjdGlvbiB0byBkaXNhYmxlIGl0LgotCi0gICBPbiBQ VFkgY29ubmVjdGlvbnMsIHRoZSB1bmRlcmx5aW5nIFBUWSBkcml2ZXIgaXMgbm90IGd1YXJhbnRl ZWQgdG8gYmUKLSAgIHRyYW5zcGFyZW50IHRvIGNvbnRyb2wgY2hhcmFjdGVycyAtLSBmb3IgZXhh bXBsZSwgaXQgbWlnaHQgZXhwYW5kIHRhYnMsCi0gICB0cmFuc2xhdGUgY2FycmlhZ2UgcmV0dXJu cywgZ2VuZXJhdGUgc2lnbmFscyBpZiBpdCBzZWVzIGFuIGludGVycnVwdAotICAgY2hhcmFjdGVy LCBhbmQgc28gb24uIFNpbWlsYXIgdGhpbmdzIG1pZ2h0IGhhcHBlbiBvbiBhIFBJUEUgY29ubmVj dGlvbi4KLSAgIEZvciB0aGlzIHJlYXNvbiwgaWYgeW91IHBsYW4gdG8gdHJhbnNmZXIgZmlsZXMg b3ZlciBhIFBUWSBvciBQSVBFCi0gICBjb25uZWN0aW9uLCB0ZWxsIHRoZSBmaWxlIHNlbmRlciB0 bzoKLQotICAgU0VUIFBSRUZJWElORyBBTEwKLSAgICAgICAgICBUaGlzIGNhdXNlcyBhbGwgY29u dHJvbCBjaGFyYWN0ZXJzIHRvIGJlIHByZWZpeGVkIGFuZAotICAgICAgICAgIHRyYW5zbWl0dGVk IGFzIHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzLgotCi0gICBJZiB0aGUgZXh0ZXJuYWwgY29u bmVjdGlvbiBwcm9ncmFtIGlzIG5vdCA4LWJpdCBjbGVhbiwgeW91IHNob3VsZCBhbHNvOgotCi0g ICBTRVQgUEFSSVRZIFNQQUNFCi0gICAgICAgICAgVGhpcyBjYXVzZXMgOC1iaXQgZGF0YSB0byBi ZSBlbmNvZGVkIGluIDcgYml0cyB1c2luZyBzaW5nbGUKLSAgICAgICAgICBhbmQvb3IgbG9ja2lu ZyBzaGlmdHMuCi0KLSAgIEFuZCBpZiBpdCBkb2VzIG5vdCBtYWtlIGEgcmVsaWFibGUgY29ubmVj dGlvbiAoc3VjaCBhcyB0aG9zZSBtYWRlIGJ5Ci0gICBUZWxuZXQsIFJsb2dpbiwgU3NoLCBldGMp LCB5b3Ugc2hvdWxkOgotCi0gICBTRVQgU1RSRUFNSU5HIE9GRgotICAgICAgICAgIFRoaXMgZm9y Y2VzIEMtS2VybWl0IHRvIHRyZWF0IHRoZSBjb25uZWN0aW9uIGFzIHVucmVsaWFibGUgYW5kCi0g ICAgICAgICAgdG8gZW5nYWdlIGluIGl0cyBub3JtYWwgQUNLL05BSyBwcm90b2NvbCBmb3IgZXJy b3IgZGV0ZWN0aW9uIGFuZAotICAgICAgICAgIGNvcnJlY3Rpb24sIHJhdGhlciB0aGFuICJzdHJl YW1pbmciIGl0cyBwYWNrZXRzLCBhcyBpdCBub3JtYWxseQotICAgICAgICAgIGRvZXMgb24gYSBu ZXR3b3JrIGNvbm5lY3Rpb24gKFs0MTddU2VjdGlvbiA0LjIwKS4KLQotICAgSW4gc29tZSBjYXNl cywgYnVmZmVyIHNpemVzIG1pZ2h0IGJlIHJlc3RyaWN0ZWQsIHNvIHlvdSBtaWdodCBhbHNvIG5l ZWQKLSAgIHRvIHJlZHVjZSB0aGUgS2VybWl0IHBhY2tldCBsZW5ndGggdG8gZml0OyB0aGlzIGlz IGEgdHJpYWwtYW5kLWVycm9yCi0gICBhZmZhaXIuIEZvciBleGFtcGxlLCBpZiB0cmFuc2ZlcnMg YWx3YXlzIGZhaWwgd2l0aCA0MDAwLWJ5dGUgcGFja2V0cywKLSAgIHRyeSAyMDAwLiBJZiB0aGF0 IGZhaWxzIHRvbywgdHJ5IDEwMDAsIGFuZCBzbyBvbi4gVGhlIGNvbW1hbmRzIGFyZToKLQotICAg U0VUIFJFQ0VJVkUgUEFDS0VULUxFTkdUSCBudW1iZXIKLSAgICAgICAgICBUaGlzIHRlbGxzIHRo ZSBmaWxlIHJlY2VpdmVyIHRvIHRlbGwgdGhlIGZpbGUgc2VuZGVyIHRoZSBsb25nZXN0Ci0gICAg ICAgICAgcGFja2V0IGxlbmd0aCBpdCBjYW4gYWNjZXB0LgotCi0gICBTRVQgU0VORCBQQUNLRVQt TEVOR1RIIG51bWJlcgotICAgICAgICAgIFRoaXMgdGVsbHMgdGhlIGZpbGUgc2VuZGVyIG5vdCB0 byBzZW5kIHBhY2tldHMgbG9uZ2VyIHRoYW4gdGhlCi0gICAgICAgICAgZ2l2ZW4gbGVuZ3RoLCBl dmVuIGlmIHRoZSByZWNlaXZlciBzYXlzIGxvbmdlciBvbmVzIGFyZSBPSy4gT2YKLSAgICAgICAg ICBjb3Vyc2UsIGlmIHRoZSByZWNlaXZlcidzIGxlbmd0aCBpcyBzaG9ydGVyLCB0aGUgc2hvcnRl ciBsZW5ndGgKLSAgICAgICAgICBpcyB1c2VkLgotCi0gICBJZiBub25lIG9mIHRoaXMgc2VlbXMg dG8gaGVscCwgdHJ5IGZhbGxpbmcgYmFjayB0byB0aGUgYmFyZSBtaW5pbXVtLAotICAgbG93ZXN0 LWNvbW1vbi1kZW5vbWluYXRvciBwcm90b2NvbCBzZXR0aW5nczoKLQotICAgUk9CVVNUCi0gICAg ICAgICAgTm8gc2xpZGluZyB3aW5kb3dzLCBubyBzdHJlYW1pbmcsIG5vIGNvbnRyb2wtY2hhcmFj dGVyCi0gICAgICAgICAgdW5wcmVmaXhpbmcsIHBhY2tldCBsZW5ndGggOTAuCi0KLSAgIEFuZCB0 aGVuIHdvcmsgeW91ciB3YXkgYmFjayB1cCBieSB0cmlhbCBhbmQgZXJyb3IgdG8gZ2V0IGdyZWF0 ZXIKLSAgIHRocm91Z2hwdXQuCi0KLSAgIE5vdGUgdGhhdCB3aGVuIHN0YXJ0aW5nIGEgUElQRSBj b25uZWN0aW9uLCBhbmQgdGhlIGNvbm5lY3Rpb24gcHJvZ3JhbQotICAgKHN1Y2ggYXMgdGVsbmV0 IG9yIHJsb2dpbikgcHJpbnRzIHNvbWUgZ3JlZXRpbmcgb3IgaW5mb3JtYXRpb24gbWVzc2FnZXMK LSAgIGJlZm9yZSBzdGFydGluZyB0aGUgY29ubmVjdGlvbiwgdGhlc2UgYXJlIHF1aXRlIGxpa2Vs eSB0byBiZSBwcmludGVkCi0gICB3aXRoIGEgc3RhaXJzdGVwIGVmZmVjdCAobGluZWZlZWQgd2l0 aG91dCBjYXJyaWFnZSByZXR1cm4pLiBUaGlzIGlzCi0gICBiZWNhdXNlIHRoZSBwcm9ncmFtIGlz IG5vdCBjb25uZWN0ZWQgd2l0aCB0aGUgVU5JWCB0ZXJtaW5hbCBkcml2ZXI7Ci0gICB0aGVyZSdz IG5vdCBtdWNoIEtlcm1pdCBjYW4gZG8gYWJvdXQgaXQuIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMg bWFkZSwKLSAgIGV2ZXJ5dGhpbmcgc2hvdWxkIGdvIGJhY2sgdG8gbm9ybWFsLiBUaGlzIHNob3Vs ZG4ndCBoYXBwZW4gb24gYSBQVFkKLSAgIGNvbm5lY3Rpb24gYmVjYXVzZSBhIFBUWSBpcywgaW5k ZWVkLCBhIHRlcm1pbmFsLgotCi0gICBPbiBhIHNpbWlsYXIgbm90ZSwgc29tZSBjb25uZWN0aW9u IHByb2dyYW1zIChsaWtlIFNvbGFyaXMgMi41IHJsb2dpbikKLSAgIG1pZ2h0IHByaW50IGxvdHMg b2YgZXJyb3IgbWVzc2FnZXMgbGlrZSAiaW9jdGwgVElPQ0dFVFA6IGludmFsaWQKLSAgIGFyZ3Vt ZW50IiB3aGVuIHVzZWQgdGhyb3VnaCBhIHBpcGUuIFRoZXkgYXJlIGFubm95aW5nIGJ1dCB1c3Vh bGx5Ci0gICBoYXJtbGVzcy4gSWYgeW91IHdhbnQgdG8gYXZvaWQgdGhlc2UgbWVzc2FnZXMsIGFu ZCB5b3VyIHNoZWxsIGFsbG93cwotICAgcmVkaXJlY3Rpb24gb2Ygc3RkZXJyLCB5b3UgY2FuIHJl ZGlyZWN0IHN0ZGVyciBpbiB5b3VyIHBpcGUgY29tbWFuZCwgYXMKLSAgIGluIHRoaXMgZXhhbXBs ZSB3aGVyZSB0aGUgdXNlcidzIHNoZWxsIGlzIGJhc2g6Ci0KLSAgUElQRSBybG9naW4geHl6Y29y cC5jb20gMj4gL2Rldi9udWxsCi0KLSAgIE9yIHVzZSBQVFkgcmF0aGVyIHRoYW4gUElQRSwgc2lu Y2UgUFRZIGlzIGF2YWlsYWJsZSBvbiBTb2xhcmlzLgotCi0yLjcuMC4gQy1LZXJtaXQgb3ZlciB0 bjMyNzAgYW5kIHRuNTI1MAotCi0gICBOb3cgeW91IGNhbiBtYWtlIGEgY29ubmVjdGlvbiBmcm9t IEMtS2VybWl0ICJkaXJlY3RseSIgdG8gYW4gSUJNCi0gICBtYWluZnJhbWUgYW5kIHRyYW5zZmVy IGZpbGVzIHdpdGggaXQsIGFzc3VtaW5nIGl0IGhhcyBLZXJtaXQtMzcwCi0gICBpbnN0YWxsZWQu IEJlY2F1c2UgdG4zMjcwIGlzIG5laXRoZXIgOC1iaXQgY2xlYW4gbm9yIHRyYW5zcGFyZW50IHRv Ci0gICBjb250cm9sIGNoYXJhY3RlcnMsIHlvdSBtdXN0IGdpdmUgdGhlc2UgY29tbWFuZHM6Ci0K LSAgU0VUIFBSRUZJWElORyBBTEwgICA7IFByZWZpeCBhbGwgY29udHJvbCBjaGFyYWN0ZXJzCi0g IFNFVCBQQVJJVFkgU1BBQ0UgICAgOyBUZWxuZXQgY29ubmVjdGlvbnMgYXJlIHVzdWFsbHkgbm90 IDgtYml0IGNsZWFuCi0KLSAgIGFuZCB0aGVuOgotCi0gIFNFVCBIT1NUIC9QVFkgL0NPTk5FQ1Qg dG4zMjcwIGFiY2NvcnAuY29tCi0KLSAgIG9yIHNpbXBseToKLQotICBwdHkgdG4zMjcwIGFiY2Nv cnAuY29tCi0KLSAgIFNFVCBIT1NUIC9QSVBFIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBjYXNlLCBh dCBsZWFzdCBub3QgZm9yIGZpbGUKLSAgIHRyYW5zZmVyLiBGaWxlIHRyYW5zZmVyIGRvZXMgd29y aywgaG93ZXZlciwgd2l0aCBTRVQgSE9TVCAvUFRZLAotICAgcHJvdmlkZWQgeW91IHVzZSB0aGUg ZGVmYXVsdCBwYWNrZXQgbGVuZ3RoIG9mIDkwIGJ5dGVzOyBhbnl0aGluZyBsb25nZXIKLSAgIHNl ZW1zIHRvIGtpbGwgdGhlIHNlc3Npb24uCi0KLSAgIFlvdSBjYW4gYWxzbyBtYWtlIGNvbm5lY3Rp b25zIHRvIElCTSBBUy80MDAgY29tcHV0ZXJzIGlmIHlvdSBoYXZlIGEKLSAgIHRuNTI1MCBwcm9n cmFtIGluc3RhbGxlZDoKLQotICBwdHkgdG41MjUwIGhvc3RuYW1lCi0KLSAgIEluIHRoaXMgY2Fz ZSwgaG93ZXZlciwgZmlsZSB0cmFuc2ZlciBpcyBwcm9iYWJseSBub3QgaW4gdGhlIGNhcmRzIHNp bmNlCi0gICBub2JvZHkgaGFzIGV2ZXIgc3VjY2VlZGVkIGluIHdyaXRpbmcgYSBLZXJtaXQgcHJv Z3JhbSBmb3IgdGhlIEFTLzQwMC4KLSAgIEhpbnQ6Ci0KLSAgZGVmaW5lIHRuMzI3MCB7Ci0gICAg ICBjaGVjayBwdHkKLSAgICAgIGlmIGZhaWwgZW5kIDEgU29ycnkgLSBubyBQVFkgc3VwcG9ydC4u LgotICAgICAgcHR5IHRuMzI3MCBcJSoKLSAgfQotCi0gICBTaW1pbGFybHkgZm9yIHRuNTI1MC4g Tm90ZSB0aGF0IENIRUNLIFBUWSBhbmQgQ0hFQ0sgUElQRSBjYW4gYmUgdXNlZCBpbgotICAgbWFj cm9zIGFuZCBzY3JpcHRzIHRvIHRlc3Qgd2hldGhlciBQVFkgb3IgUElQRSBzdXBwb3J0IGlzIGF2 YWlsYWJsZS4KLQotMi43LjEuIEMtS2VybWl0IG92ZXIgVGVsbmV0Ci0KLSAgIEFsdGhvdWdoIEMt S2VybWl0IGluY2x1ZGVzIGl0cyBvd24gVGVsbmV0IGltcGxlbWVudGF0aW9uLCB5b3UgbWlnaHQK LSAgIG5lZWQgdG8gdXNlIGFuIGV4dGVybmFsIFRlbG5ldCBwcm9ncmFtIHRvIG1ha2UgY2VydGFp biBjb25uZWN0aW9uczsKLSAgIHBlcmhhcHMgYmVjYXVzZSBpdCBoYXMgYWNjZXNzIG9yIHNlY3Vy aXR5IGZlYXR1cmVzIG5vdCBhdmFpbGFibGUgaW4KLSAgIEMtS2VybWl0IGl0c2VsZi4gQXMgbm90 ZWQgYWJvdmUsIHRoZSBvbmx5IHByZWNhdXRpb25zIG5lY2Vzc2FyeSBhcmUKLSAgIHVzdWFsbHk6 Ci0KLSAgU0VUIFBSRUZJWElORyBBTEwgICA7IFByZWZpeCBhbGwgY29udHJvbCBjaGFyYWN0ZXJz Ci0gIFNFVCBQQVJJVFkgU1BBQ0UgICAgOyBUZWxuZXQgY29ubmVjdGlvbnMgbWlnaHQgbm90IGJl IDgtYml0IGNsZWFuCi0KLSAgIGFuZCB0aGVuOgotCi0gIFNFVCBIT1NUIC9QVFkgKG9yIC9QSVBF KSAvQ09OTkVDVCB0ZWxuZXQgYWJjY29ycC5jb20KLQotICAgb3IsIGVxdWl2YWxlbnRseToKLQot ICBQVFkgKG9yIFBJUEUpIHRlbG5ldCBhYmNjb3JwLmNvbQotCi0yLjcuMi4gQy1LZXJtaXQgb3Zl ciBSbG9naW4KLQotICAgQy1LZXJtaXQgaW5jbHVkZXMgaXRzIG93biBSbG9naW4gY2xpZW50LCBi dXQgdGhpcyBjYW4gbm9ybWFsbHkgYmUgdXNlZAotICAgb25seSBpZiB5b3UgYXJlIHJvb3QsIHNp bmNlIHRoZSBybG9naW4gVENQIHBvcnQgaXMgcHJpdmlsZWdlZC4gQnV0IHB0eXMKLSAgIGFuZCBw aXBlcyBsZXQgeW91IG1ha2UgcmxvZ2luIGNvbm5lY3Rpb25zIHdpdGggQy1LZXJtaXQgdGhyb3Vn aCB5b3VyCi0gICBjb21wdXRlcidzIGV4dGVybmFsIHJsb2dpbiBwcm9ncmFtLCB3aGljaCBpcyBu b3JtYWxseSBpbnN0YWxsZWQgYXMgYQotICAgcHJpdmlsZWdlZCBwcm9ncmFtOgotCi0gIFNFVCBQ UkVGSVhJTkcgQUxMCi0KLSAgIGFuZCB0aGVuOgotCi0gIFNFVCBIT1NUIC9QVFkgKG9yIC9QSVBF KSAvQ09OTkVDVCBybG9naW4gLTggYWJjY29ycC5jb20KLQotICAgb3IsIGVxdWl2YWxlbnRseToK LQotICBQVFkgKG9yIFBJUEUpIHJsb2dpbiAtOCBhYmNjb3JwLmNvbQotCi0gICBUaGUgIi04IiBv cHRpb24gdG8gcmxvZ2luIGVuYWJsZXMgdHJhbnNtaXNzaW9uIG9mIDgtYml0IGRhdGEuIElmIHRo aXMKLSAgIGlzIG5vdCBhdmFpbGFibGUsIHRoZW4gaW5jbHVkZSBTRVQgUEFSSVRZIFNQQUNFIGlm IHlvdSBpbnRlbmQgdG8KLSAgIHRyYW5zZmVyIGZpbGVzLgotCi0gICBOb3RlIHRoYXQgdGhlIG5v cm1hbCBlc2NhcGUgc2VxdWVuY2UgZm9yIHJsb2dpbiBpcyBDYXJyaWFnZSBSZXR1cm4KLSAgIGZv bGxvd2VkIGJ5IFRpbGRlICh+KSwgYnV0IG9ubHkgd2hlbiB0aGUgdGlsZGUgaXMgZm9sbG93ZWQg YnkgY2VydGFpbgotICAgb3RoZXIgY2hhcmFjdGVyczsgdGhlIGV4YWN0IGJlaGF2aW9yIGRlcGVu ZHMgb24geW91ciBybG9naW4gY2xpZW50LCBzbwotICAgcmVhZCBpdHMgZG9jdW1lbnRhdGlvbi4K LQotMi43LjMuIEMtS2VybWl0IG92ZXIgU2VyaWFsIENvbW11bmljYXRpb24gUHJvZ3JhbXMKLQot ICAgUHR5cyBhbmQgcGlwZXMgYWxzbyBsZXQgeW91IHVzZSBwcm9ncmFtcyB0aGF0IG1ha2Ugc2Vy aWFsIGNvbm5lY3Rpb25zLAotICAgc3VjaCBhcyBjdSBvciB0aXAuIEZvciBleGFtcGxlLCBDLUtl cm1pdCBjYW4gYmUgdXNlZCB0aHJvdWdoIGN1IHRvIG1ha2UKLSAgIGNvbm5lY3Rpb25zIHRoYXQg b3RoZXJ3aXNlIG1pZ2h0IG5vdCBiZSBhbGxvd2VkLCBlLmcuIGJlY2F1c2UgQy1LZXJtaXQKLSAg IGlzIG5vdCBpbnN0YWxsZWQgd2l0aCB0aGUgcmVxdWlyZWQgd3JpdGUgcGVybWlzc2lvbnMgdG8g dGhlIGRpYWxvdXQKLSAgIGRldmljZSBhbmQgdGhlIFVVQ1AgbG9ja2ZpbGUgZGlyZWN0b3J5Lgot Ci0gICBTdXBwb3NlIHlvdXIgVVVDUCBEZXZpY2VzIGZpbGUgY29udGFpbnMgYW4gZW50cnkgZm9y IGEgc2VyaWFsIGRldmljZQotICAgdHR5MDQgdG8gYmUgdXNlZCBmb3IgZGlyZWN0IGNvbm5lY3Rp b25zLCBidXQgdGhpcyBkZXZpY2UgaXMgcHJvdGVjdGVkCi0gICBhZ2FpbnN0IHlvdSAoYW5kIEtl cm1pdCB3aGVuIHlvdSBydW4gaXQpLiBJbiB0aGlzIGNhc2UgeW91IGNhbjoKLQotICBTRVQgQ09O VFJPTCBQUkVGSVggQUxMCi0gIFBUWSAob3IgUElQRSkgY3UgLWwgdHR5MDQKLQotICAgKFNpbWls YXJseSBmb3IgZGlhbG91dCBkZXZpY2VzLCBleGNlcHQgdGhlbiB5b3UgYWxzbyBuZWVkIHRvIGlu Y2x1ZGUKLSAgIHRoZSBwaG9uZSBudW1iZXIgaW4gdGhlICJjdSIgY29tbWFuZC4pCi0KLSAgIEFz IHdpdGggb3RoZXIgY29tbXVuaWNhdGlvbiBwcm9ncmFtcywgd2F0Y2ggb3V0IGZvciBjdSdzIGVz Y2FwZQotICAgc2VxdWVuY2UsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZSBybG9naW4gcHJvZ3Jh bSdzOiBDYXJyaWFnZSBSZXR1cm4KLSAgIGZvbGxvd2VkIGJ5IFRpbGRlIChmb2xsb3dlZCBieSBh bm90aGVyIGNoYXJhY3RlciB0byBzcGVjaWZ5IGFuIGFjdGlvbiwKLSAgIGxpa2UgIi4iIGZvciBj bG9zaW5nIHRoZSBjb25uZWN0aW9uIGFuZCBleGl0aW5nIGZyb20gY3UpLgotCi0yLjcuNC4gQy1L ZXJtaXQgb3ZlciBTZWN1cmUgTmV0d29yayBDbGllbnRzCi0KLSAgICAgRElTQ0xBSU1FUjogVGhl cmUgYXJlIGxhd3MgaW4gdGhlIFVTQSBhbmQgb3RoZXIgY291bnRyaWVzIHJlZ2FyZGluZwotICAg ICB1c2UsIGltcG9ydCwgYW5kL29yIGV4cG9ydCBvZiBlbmNyeXB0aW9uIGFuZC9vciBkZWNyeXB0 aW9uIG9yIG90aGVyCi0gICAgIGZvcm1zIG9mIHNlY3VyaXR5IHNvZnR3YXJlLCBhbGdvcml0aG1z LCB0ZWNobm9sb2d5LCBhbmQgaW50ZWxsZWN0dWFsCi0gICAgIHByb3BlcnR5LiBUaGUgS2VybWl0 IFByb2plY3QgYXR0ZW1wdHMgdG8gZm9sbG93IGFsbCBrbm93biBzdGF0dXRlcywKLSAgICAgYW5k IG5laXRoZXIgaW50ZW5kcyBub3Igc3VnZ2VzdHMgdGhhdCBLZXJtaXQgc29mdHdhcmUgY2FuIG9y IHNob3VsZAotICAgICBiZSB1c2VkIGluIGFueSB3YXksIGluIGFueSBsb2NhdGlvbiwgdGhhdCBj aXJjdW12ZW50cyBhbnkKLSAgICAgcmVndWxhdGlvbnMsIGxhd3MsIHRyZWF0aWVzLCBjb3ZlbmFu dHMsIG9yIG90aGVyIGxlZ2l0aW1hdGUgY2Fub25zCi0gICAgIG9yIGluc3RydW1lbnRzIG9mIGxh dywgaW50ZXJuYXRpb25hbCByZWxhdGlvbnMsIHRyYWRlLCBldGhpY3MsIG9yCi0gICAgIHByb3By aWV0eS4KLQotICAgRm9yIHNlY3VyZSBjb25uZWN0aW9ucyBvciBjb25uZWN0aW9ucyB0aHJvdWdo IGZpcmV3YWxscywgQy1LZXJtaXQgNy4wCi0gICBjYW4gYmUgYSBLZXJiZXJvcywgU1JQLCBhbmQv b3IgU09DS1MgY2xpZW50IHdoZW4gYnVpbHQgd2l0aCB0aGUKLSAgIGFwcHJvcHJpYXRlIG9wdGlv bnMgYW5kIGxpYnJhcmllcy4gQnV0IG90aGVyIGFwcGxpY2F0aW9uLWxldmVsIHNlY3VyaXR5Ci0g ICBhY3JvbnltcyBhbmQgbWV0aG9kcyAtLSBTU0gsIFNTTCwgU1JQLCBUTFMgLS0gcG9wIHVwIGF0 IGFuIGFsYXJtaW5nCi0gICByYXRlIGFuZCBhcmUgKGEpIGltcG9zc2libGUgdG8ga2VlcCB1cCB3 aXRoLCAoYikgdXN1YWxseSBtdXR1YWxseQotICAgaW5jb21wYXRpYmxlLCBhbmQgKGMpIGhhdmUg cmVzdHJpY3Rpb25zIG9uIGV4cG9ydCBvciByZWRpc3RyaWJ1dGlvbiBhbmQKLSAgIHNvIGNhbm5v dCBiZSBpbmNsdWRlZCBpbiBDLUtlcm1pdCBpdHNlbGYuCi0KLSAgIEhvd2V2ZXIsIGlmIHlvdSBo YXZlIGEgc2VjdXJlIHRleHQtYmFzZWQgVGVsbmV0IChvciBvdGhlcikgY2xpZW50IHRoYXQKLSAg IGVtcGxveXMgb25lIG9mIHRoZXNlIHNlY3VyaXR5IG1ldGhvZHMsIHlvdSBjYW4gdXNlIEMtS2Vy bWl0ICJ0aHJvdWdoIgotICAgaXQgdmlhIGEgcHR5IG9yIHBpcGUuCi0KLTIuNy40LjEuIFNTSAot Ci0gICBDLUtlcm1pdCBkb2VzIG5vdCBhbmQgY2FuIG5vdCBpbmNvcnBvcmF0ZSBTU0ggZHVlIHRv IGxpY2Vuc2luZywgcGF0ZW50LAotICAgYW5kIFVTQSBleHBvcnQgbGF3IHJlc3RyaWN0aW9ucy4K LQotICAgVGhlIFVOSVggU1NIIGNsaWVudCBkb2VzIG5vdCB1c2Ugc3RhbmRhcmQgaW5wdXQvb3V0 cHV0LCBhbmQgdGhlcmVmb3JlCi0gICBjYW4gYmUgdXNlZCBvbmx5IGJ5IEtlcm1pdCdzIFBUWSBp bnRlcmZhY2UsIGlmIG9uZSBpcyBwcmVzZW50LiBUaGUKLSAgIGNhdXRpb25zIGFib3V0IGZpbGUg dHJhbnNmZXIsIGV0YywgYXJlIHRoZSBzYW1lIGFzIGZvciBSbG9naW4uIEV4YW1wbGU6Ci0KLSAg U0VUIFBSRUZJWElORyBBTEwKLSAgUFRZIHNzaCBYWVpDT1JQLkNPTQotCi0gICBPciwgZm9yIGEg c2NyaXB0ZWQgc2Vzc2lvbjoKLQotICBTRVQgUFJFRklYSU5HIEFMTAotICBTRVQgSE9TVCAvUFRZ IHNzaCBYWVpDT1JQLkNPTQotCi0gICBIaW50OgotCi0gIGRlZmluZSBzc2ggewotICAgICAgY2hl Y2sgcHR5Ci0gICAgICBpZiBmYWlsIGVuZCAxIFNvcnJ5IC0gbm8gUFRZIHN1cHBvcnQuLi4KLSAg ICAgIHB0eSBzc2ggXCUqCi0gIH0KLQotMi43LjQuMi4gU1NMCi0KLSAgIFNlY3VyZSBTb2NrZXRz IExheWVyIChTU0wpIGlzIGFub3RoZXIgVENQL0lQIHNlY3VyaXR5IG92ZXJsYXksIHRoaXMgb25l Ci0gICBkZXNpZ25lZCBieSBhbmQgZm9yIE5ldHNjYXBlLiBBbiBTU0wgVGVsbmV0IGNsaWVudCBp cyBhdmFpbGFibGUgZm9yCi0gICBVTklYIGZyb20gdGhlIFVuaXZlcnNpdHkgb2YgUXVlZW5zbGFu ZC4gTW9yZSBpbmZvIGF0OgotCi0gIFs0MThdaHR0cDovL3d3dy5wc3kudXEub3ouYXUvfmZ0cC9D cnlwdG8vCi0KLSAgIEludGVyb3BlcmFiaWxpdHkgd2l0aCBDLUtlcm1pdCBpcyB1bmtub3duLiBD LUtlcm1pdCBhbHNvIGluY2x1ZGVzIGl0cwotICAgb3duIGJ1aWx0LWluIFNTTC9UTFMgc3VwcG9y dCwgYnV0IGl0IGlzIG5vdCBleHBvcnRhYmxlOyBbNDE5XUNMSUNLIEhFUkUKLSAgIGZpbGUgZm9y IGRldGFpbHMuCi0KLTIuNy40LjMuIFNSUAotCi0gICBTUlAoVE0pIGlzIFN0YW5mb3JkIFVuaXZl cnNpdHkncyBTZWN1cmUgUmVtb3RlIFBhc3N3b3JkIHByb3RvY29sLiBBbgotICAgU1JQIFRlbG5l dCBjbGllbnQgaXMgYXZhaWxhYmxlIGZyb20gU3RhbmZvcmQ6Ci0KLSAgWzQyMF1odHRwOi8vc3Jw LnN0YW5mb3JkLmVkdS9zcnAvCi0KLSAgIFN0YW5mb3JkJ3MgU1JQIFRlbG5ldCBjbGllbnQgZm9y IFVOSVggaGFzIGJlZW4gdGVzdGVkIG9uIFN1bk9TIGFuZAotICAgd29ya3MgZmluZSB3aXRoIEMt S2VybWl0LCBhcyBkZXNjcmliZWQgaW4gWzQyMV1TZWN0aW9uIDIuNy4xLCBlLmcuCi0KLSAgU0VU IFBSRUZJWCBBTEwKLSAgUFRZIChvciBQSVBFKSBzcnAtdGVsbmV0IHhlbm9uLnN0YW5mb3JkLmVk dQotCi0gICBDLUtlcm1pdCBpdHNlbGYgY2FuIGJlIGJ1aWx0IGFzIGFuIFNSUCBUZWxuZXQgY2xp ZW50IG9uIHN5c3RlbXMgdGhhdAotICAgaGF2ZSBsaWJzcnAuYSBpbnN0YWxsZWQ7IHRoZSBDLUtl cm1pdCBzdXBwb3J0IGNvZGUsIGhvd2V2ZXIsIG1heSBub3QgYmUKLSAgIGV4cG9ydGVkIG91dHNp ZGUgdGhlIFVTQSBvciBDYW5hZGEuCi0KLTIuNy40LjQuIFNPQ0tTCi0KLSAgIEMtS2VybWl0IGNh biBiZSBidWlsdCBhcyBhIFNPQ0tTLWF3YXJlIGNsaWVudCBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBh Ci0gICBTT0NLUyBsaWJyYXJ5LiBTZWUgc2VjdGlvbiA4LjEuMSBvZiB0aGUgWzQyMl1ja2NjZmcu dHh0IGZpbGUuCi0KLSAgIEMtS2VybWl0IDcuMCBjYW4gYWxzbyBiZSBydW4gb3ZlciBTT0NLU2lm aWVkIFRlbG5ldCBvciBybG9naW4gY2xpZW50cwotICAgd2l0aCBTRVQgTkVUV09SSyBUWVBFIENP TU1BTkQuIFN1cHBvc2UgdGhlIFRlbG5ldCBwcm9ncmFtIG9uIHlvdXIKLSAgIHN5c3RlbSBpcyBT T0NLUyBlbmFibGVkIGJ1dCBDLUtlcm1pdCBpcyBub3QuIE1ha2UgS2VybWl0IGNvbm5lY3Rpb25z Ci0gICBsaWtlIHRoaXM6Ci0KLSAgU0VUIFBSRUZJWCBBTEwKLSAgUFRZIChvciBQSVBFKSB0ZWxu ZXQgenp6LmNvbQotCi0yLjcuNC41LiBLZXJiZXJvcwotCi0gICBVTklYIEMtS2VybWl0IGNhbiBi ZSBidWlsdCB3aXRoIE1JVCBLZXJiZXJvcyBJViBvciBWIGF1dGhlbnRpY2F0aW9uIGFuZAotICAg ZW5jcnlwdGlvbi4gSW5zdHJ1Y3Rpb25zIGFyZSBhdmFpbGFibGUgaW4gYSBbNDIzXXNlcGFyYXRl IGRvY3VtZW50LgotICAgQWRkaXRpb25hbCBtb2R1bGVzIGFyZSByZXF1aXJlZCB0aGF0IGNhbiBu b3QgYmUgZXhwb3J0ZWQgZnJvbSB0aGUgVVNBCi0gICB0byBhbnkgY291bnRyeSBleGNlcHQgQ2Fu YWRhLCBieSBVUyBsYXcuCi0KLSAgIElmIHlvdSBoYXZlIEtlcmJlcm9zIGluc3RhbGxlZCBidXQg eW91IGRvbid0IGhhdmUgYSBLZXJiZXJpemVkIHZlcnNpb24KLSAgIG9mIEMtS2VybWl0LCB5b3Ug Y2FuIHVzZSBrdGVsbmV0IGFzIEMtS2VybWl0J3MgZXh0ZXJuYWwgY29tbXVuaWNhdGlvbnMKLSAg IHByb2dyYW0gdG8gbWFrZSBzZWN1cmUgY29ubmVjdGlvbnMgd2l0aG91dCBnaXZpbmcgdXAgQy1L ZXJtaXQncwotICAgc2VydmljZXM6Ci0KLSAgU0VUIFBSRUZJWCBBTEwKLSAgUFRZIChvciBQSVBF KSBrdGVsbmV0IGNpYS5nb3YKLQotMi44LiBTY3JpcHRpbmcgTG9jYWwgUHJvZ3JhbXMKLQotICAg SWYgeW91ciB2ZXJzaW9uIG9mIEtlcm1pdCBoYXMgUFRZIHN1cHBvcnQgYnVpbHQgaW4sIHRoZW4g YW55IHRleHQtYmFzZWQKLSAgIHByb2dyYW0gY2FuIGJlIGludm9rZWQgd2l0aCBTRVQgSE9TVCAv UFRZIG9yIGVxdWl2YWxlbnQgY29tbWFuZCBhbmQKLSAgIGNvbnRyb2xsZWQgdXNpbmcgdGhlIG5v cm1hbCBzZXF1ZW5jZSBvZiBPVVRQVVQsIElOUFVULCBJRiBTVUNDRVNTCi0gICBjb21tYW5kcyAo dGhpcyBpcyB0aGUgc2FtZSBzZXJ2aWNlIHRoYXQgaXMgcHJvdmlkZWQgYnkgdGhlICdleHBlY3Qn Ci0gICBwcm9ncmFtLCBidXQgY29udHJvbGxlZCBieSB0aGUgS2VybWl0IHNjcmlwdCBsYW5ndWFn ZSByYXRoZXIgdGhhbiBUY2wpLgotCi0gICBXaGVuIFBUWSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFi bGUsIHRoZW4gYW55IHByb2dyYW0gdGhhdCB1c2VzIHN0YW5kYXJkCi0gICBpbnB1dCBhbmQgb3V0 cHV0IGNhbiBiZSBpbnZva2VkIHdpdGggU0VUIEhPU1QgL1BJUEUuCi0KLSAgIEhlcmUncyBhbiBl eGFtcGxlIGluIHdoaWNoIHdlIHN0YXJ0IGFuIGV4dGVybmFsIEtlcm1pdCBwcm9ncmFtLCB3YWl0 Ci0gICBmb3IgaXRzIHByb21wdCwgZ2l2ZSBpdCBhIFZFUlNJT04gY29tbWFuZCwgYW5kIHRoZW4g ZXh0cmFjdCB0aGUgbnVtZXJpYwotICAgdmVyc2lvbiBudW1iZXIgZnJvbSBpdHMgcmVzcG9uc2U6 Ci0KLSAgc2V0IGhvc3QgL3B0eSBrZXJtaXQgLVkKLSAgaWYgZmFpbCBzdG9wIDEge0Nhbid0IHN0 YXJ0IGV4dGVybmFsIGNvbW1hbmR9Ci0gIGlucHV0IDEwIEMtS2VybWl0PgotICBpZiBmYWlsIHN0 b3AgMSB7Tm8gQy1LZXJtaXQ+IHByb21wdH0KLSAgb3V0cHV0IHZlcnNpb25cMTMKLSAgaW5wdXQg MTAge051bWVyaWM6IH0KLSAgaWYgZmFpbCBzdG9wIDEge05vIG1hdGNoIGZvciAiTnVtZXJpYzoi fQotICBjbGVhciBpbnB1dAotICBpbnB1dCAxMCBcMTAKLSAgZWNobyBWRVJTSU9OID0gIlxmc3Vi c3RyKFx2KGlucHV0KSwxLDYpIgotICBvdXRwdXQgZXhpdFwxMwotCi0gICBUaGlzIHRlY2huaXF1 ZSBjb3VsZCBiZSB1c2VkIHRvIGNvbnRyb2wgYW55IG90aGVyIGludGVyYWN0aXZlIHByb2dyYW0s Ci0gICBldmVuIHRob3NlIHRoYXQgZG8gc2NyZWVuIGZvcm1hdHRpbmcgKGxpa2UgRW1hY3Mgb3Ig VmkpLCBpZiB5b3UgY2FuCi0gICBmaWd1cmUgb3V0IHRoZSBzZXF1ZW5jZSBvZiBldmVudHMuIElm IHlvdXIgS2VybWl0IHByb2dyYW0gZG9lc24ndCBoYXZlCi0gICBQVFkgc3VwcG9ydCwgdGhlbiB0 aGUgY29tbWFuZHMgYXJlIHJlc3RyaWN0ZWQgdG8gdGhvc2UgdXNpbmcgc3RhbmRhcmQKLSAgIGkv bywgaW5jbHVkaW5nIGNlcnRhaW4gc2hlbGxzLCBpbnRlcmFjdGl2ZSB0ZXh0LW1vZGUgImhhcmRj b3B5IiBlZGl0b3JzCi0gICBsaWtlIGV4LCBhbmQgc28gb24uCi0KLSAgIElmIHlvdSBhcmUgdXNp bmcgdGhlIFBUWSBpbnRlcmZhY2UsIHlvdSBzaG91bGQgYmUgYXdhcmUgdGhhdCBpdCBydW5zCi0g ICB0aGUgZ2l2ZW4gcHJvZ3JhbSBvciBjb21tYW5kIGRpcmVjdGx5IG9uIHRoZSBwdHksIHdpdGhv dXQgYW55Ci0gICBpbnRlcnZlbmluZyBzaGVsbCB0byBpbnRlcnByZXQgbWV0YWNoYXJhY3RlcnMs IHJlZGlyZWN0b3JzLCBldGMuIElmIHlvdQotICAgbmVlZCB0aGlzIHNvcnQgb2YgdGhpbmcsIGlu Y2x1ZGUgdGhlIGFwcHJvcHJpYXRlIHNoZWxsIGludm9jYXRpb24gYXMKLSAgIHBhcnQgb2YgeW91 ciBjb21tYW5kOyBmb3IgZXhhbXBsZToKLQotICBwdHkgZWNobyAqCi0KLSAgIGp1c3QgZWNob2Vz ICIqIjsgd2hlcmVhczoKLQotICBwdHkga3NoIC1jICJlY2hvICoiCi0KLSAgIGVjaG9lcyBhbGwg dGhlIGZpbGVuYW1lcyB0aGF0IGtzaCBmaW5kcyBtYXRjaGluZyAiKiIuCi0KLSAgIFNpbWlsYXJs eSBmb3IgcmVkaXJlY3Rpb246Ci0KLSAgc2V0IGhvc3QgL3B0eSBrc2ggLWMgImNhdCA+IGZvbyIg IDsgTm90ZTogdXNlIHNoZWxsIHF1b3RpbmcgcnVsZXMgaGVyZQotICBzZXQgdHJhbnNtaXQgZW9m IFw0Ci0gIHRyYW5zbWl0IGJhcgotCi0gICBBbmQgZm9yIHRoYXQgbWF0dGVyLCBmb3IgYnVpbHQt aW4gc2hlbGwgY29tbWFuZHM6Ci0KLSAgc2V0IGhvc3QgL3B0eSBrc2ggLWMgImZvciBpIGluICo7 IGRvIGVjaG8gJGk7IGRvbmUiCi0KLSAgIFRoZSBQSVBFIGludGVyZmFjZSwgb24gdGhlIG90aGVy IGhhbmQsIGludm9rZXMgdGhlIHNoZWxsIGF1dG9tYXRpY2FsbHksCi0gICBzbzoKLQotICBwaXBl IGVjaG8gKgotCi0gICBwcmludHMgZmlsZW5hbWVzLCBub3QgIioiLgotCi0yLjkuIFguMjUgTmV0 d29ya2luZwotCi0gICBYLjI1IG5ldHdvcmtpbmcgaXMgZG9jdW1lbnRlZCBpbiBbNDI0XVVzaW5n IEMtS2VybWl0LCAybmQgRWRpdGlvbi4gV2hlbgotICAgdGhlIGJvb2sgd2FzIHB1Ymxpc2hlZCwg WC4yNSB3YXMgYXZhaWxhYmxlIG9ubHkgaW4gU3VuT1MsIFNvbGFyaXMsIGFuZAotICAgU3RyYXR1 cyBWT1MuIFVubGlrZSBUQ1AvSVAsIFguMjUgQVBJcyBhcmUgbm90IHN0YW5kYXJkaXplZDsgZWFj aAotICAgdmVuZG9yJ3MgWC4yNSBsaWJyYXJpZXMgYW5kIHNlcnZpY2VzIChpZiB0aGV5IGhhdmUg dGhlbSBhdCBhbGwpIGFyZQotICAgdW5pcXVlLgotCi0gICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVz IG5ldyBhZGRpdGlvbnMuCi0KLTIuOS4xLiBJQk0gQUlYTGluay9YLjI1IE5ldHdvcmsgUHJvdmlk ZXIgSW50ZXJmYWNlIGZvciBBSVgKLQotICAgU3VwcG9ydCBmb3IgWC4yNSB3YXMgYWRkZWQgdmlh IElCTSdzIE5ldHdvcmsgUHJvdmlkZXIgSW50ZXJmYWNlIChOUEkpLAotICAgQUlYTGluay9YLjI1 IDEuMSwgdG8gdGhlIEFJWCA0LnggdmVyc2lvbiBvZiBDLUtlcm1pdCA3LjAuCi0gICBVbmZvcnR1 bmF0ZWx5LCBBSVhMaW5rL1guMjUgaXMgYSByYXRoZXIgYmFyZS1ib25lcyBmYWNpbGl0eSwgbGFj a2luZyBpbgotICAgcGFydGljdWxhciBhbnkgZm9ybSBvZiBQQUQgc3VwcG9ydCAoWC4zLCBYLjI4 LCBYLjI5KS4gVGh1cywgdGhlIEFJWAotICAgdmVyc2lvbiBvZiBDLUtlcm1pdCwgd2hlbiBidWls dCB0byBpbmNsdWRlIFguMjUgbmV0d29ya2luZywgaGFzIG5laXRoZXIKLSAgIGEgUEFEIGNvbW1h bmQsIG5vciBhIFNFVCBQQUQgY29tbWFuZC4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlCi0gICB1 bmRlcmx5aW5nIEFJWCBzeXN0ZW06IG5vIFBBRCBzdXBwb3J0LiBUaHVzIGl0IGlzIG5vdCBwb3Nz aWJsZSB0byBoYXZlCi0gICBhbiBpbnRlcmFjdGl2ZSBzaGVsbCBzZXNzaW9uIG92ZXIgYW4gWC4y NSBjb25uZWN0aW9uIGludG8gYW4gQUlYIHN5c3RlbQotICAgKGFzIGZhciBhcyB3ZSBrbm93KSwg ZXZlbiBmcm9tIFguMjUtY2FwYWJsZSBLZXJtaXQgdmVyc2lvbnMgKHN1Y2ggYXMKLSAgIFNvbGFy aXMgb3IgVk9TKSB0aGF0IGRvIGluY2x1ZGUgUEFEIHN1cHBvcnQuCi0KLSAgIFRodXMgdGhlIFgu MjUgY2FwYWJpbGl0aWVzIGluIEFJWCBDLUtlcm1pdCBhcmUgbGltaXRlZCB0byBwZWVyLXRvLXBl ZXIKLSAgIGNvbm5lY3Rpb25zLCBlLmcuIGZyb20gYSBDLUtlcm1pdCBjbGllbnQgdG8gYSBDLUtl cm1pdCBzZXJ2ZXIuIFVubGlrZQotICAgdGhlIFNvbGFyaXMsIFN1bk9TLCBhbmQgVk9TIHZlcnNp b25zLCB0aGUgQUlYIHZlcnNpb24gY2FuIGFjY2VwdAotICAgaW5jb21pbmcgWC4yNSBjb25uZWN0 aW9uczoKLQotICBzZXQgbmV0d29yayB0eXBlIHguMjUKLSAgaWYgZmFpbCBzdG9wIDEgU29ycnkg LSBubyBYLjI1IHN1cHBvcnQKLSAgOyBQdXQgYW55IGRlc2lyZWQgRElTQUJMRSBvciBFTkFCTEUg b3IgU0VUIGNvbW1hbmRzIGhlcmUuCi0gIHNldCBob3N0IC9zZXJ2ZXIgKgotICBpZiBmYWlsIHN0 b3AgMSBYLjI1ICJzZXQgaG9zdCAqIiBmYWlsZWQKLQotICAgQW5kIHRoZW4gYWNjZXNzIGl0IGZy b20gdGhlIGNsaWVudCBhcyBmb2xsb3dzOgotCi0gIHNldCBuZXR3b3JrIHR5cGUgeC4yNQotICBp ZiBmYWlsIHN0b3AgMSBTb3JyeSAtIG5vIFguMjUgc3VwcG9ydAotICBzZXQgaG9zdCB4eHh4eHh4 IDsgU3BlY2lmeSB0aGUgWC4yNS9YLjEyMSBhZGRyZXNzCi0gIGlmIGZhaWwgc3RvcCAxIENhbid0 IG9wZW4gY29ubmVjdGlvbgotCi0gICBBbmQgYXQgdGhpcyBwb2ludCB0aGUgY2xpZW50IGNhbiB1 c2UgdGhlIGZ1bGwgcmFuZ2Ugb2YgY2xpZW50IGNvbW1hbmRzOgotICAgU0VORCwgR0VULCBSRU1P VEUgeHh4LCBGSU5JU0gsIEJZRS4KLQotICAgVGhlIEFJWCB2ZXJzaW9uIGFsc28gYWRkcyB0d28g bmV3IHZhcmlhYmxlczoKLQotICAgXHYoeDI1bG9jYWxfbnVhKQotICAgICAgICAgIFRoZSBsb2Nh bCBYLjI1IGFkZHJlc3MuCi0KLSAgIFx2KHgyNXJlbW90ZV9udWEpCi0gICAgICAgICAgVGhlIFgu MjUgYWRkcmVzcyBvZiB0aGUgaG9zdCBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9u LgotCi0gICBDLUtlcm1pdCdzIEFJWCBYLjI1IGNsaWVudCBoYXMgbm90IGJlZW4gdGVzdGVkIGFn YWluc3QgYW55dGhpbmcgb3RoZXIKLSAgIHRoYW4gYSBDLUtlcm1pdCBYLjI1IHNlcnZlciBvbiBB SVguIEl0IGlzIG5vdCBrbm93biBpZiBpdCB3aWxsCi0gICBpbnRlcm9wZXJhdGUgd2l0aCBDLUtl cm1pdCBzZXJ2ZXJzIG9uIFNvbGFyaXMsIFN1bk9TLCBvciBWT1MuCi0KLSAgIFRvIG1ha2UgYW4g WC4yNSBjb25uZWN0aW9uIGZyb20gQUlYIEMtS2VybWl0LCB5b3UgbXVzdDoKLQotICBzZXQgeDI1 IGNhbGwtdXNlci1kYXRhIHh4eHgKLQotICAgd2hlcmUgeHh4eCBjYW4gYmUgYW55IGV2ZW4tbGVu Z3RoIHN0cmluZyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMsIGUuZy4KLSAgIDEyM0FCQy4KLQotMi45 LjIuIEhQLVVYIFguMjUKLQotICAgQWx0aG91Z2ggQy1LZXJtaXQgcHJlc2VudGx5IGRvZXMgbm90 IGluY2x1ZGUgYnVpbHQtaW4gc3VwcG9ydCBmb3IgSFAtVVgKLSAgIFguMjUsIGl0IGNhbiBzdGls bCBiZSB1c2VkIHRvIG1ha2UgWC4yNSBjb25uZWN0aW9ucyBhcyBmb2xsb3dzOiBzdGFydAotICAg S2VybWl0IGFuZCB0ZWxsIGl0IHRvOgotCi0gIHNldCBwcmVmaXhpbmcgYWxsCi0gIHNldCBwYXJp dHkgc3BhY2UKLSAgcHR5IHBhZGVtIGFkZHJlc3MKLQotICAgVGhpcyBzaG91bGQgd29yayBpbiBI UC1VWCA5LjAwIGFuZCBsYXRlciAoc2VlIFs0MjVdU2VjdGlvbiAyLjcpLiBJZiB5b3UKLSAgIGhh dmUgYW4gZWFybGllciBIUC1VWCB2ZXJzaW9uLCBvciB0aGUgUFRZIGludGVyZmFjZSBkb2Vzbid0 IHdvcmsgb3IKLSAgIGlzbid0IGF2YWlsYWJsZSwgdHJ5OgotCi0gIHNldCBwcmVmaXhpbmcgYWxs Ci0gIHNldCBwYXJpdHkgc3BhY2UKLSAgcGlwZSBwYWRlbSBhZGRyZXNzCi0KLSAgIEZhaWxpbmcg dGhhdCwgdXNlIEtlcm1pdCB0byB0ZWxuZXQgdG8gbG9jYWxob3N0IGFuZCB0aGVuIGFmdGVyIGxv Z2dpbmcKLSAgIGJhY2sgaW4sIHN0YXJ0IHBhZGVtIGFzIHlvdSB3b3VsZCBub3JtYWxseSBkbyB0 byBjb25uZWN0IG92ZXIgWC4yNS4KLQotMi4xMC4gQWRkaXRpb25hbCBTZXJpYWwgUG9ydCBDb250 cm9scwotCi0gICBDLUtlcm1pdCA3LjAgYWRkcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZvciBn cmVhdGVyIGNvbnRyb2wgb3ZlcgotICAgc2VyaWFsIHBvcnRzLiBUaGVzZSBjb21tYW5kcyBhcmUg YXZhaWxhYmxlIG9ubHkgaW4gQy1LZXJtaXQgdmVyc2lvbnMKLSAgIHdob3NlIHVuZGVybHlpbmcg b3BlcmF0aW5nIHN5c3RlbXMgcHJvdmlkZSB0aGUgY29ycmVzcG9uZGluZyBzZXJ2aWNlcwotICAg KHN1Y2ggYXMgUE9TSVggYW5kIFVOSVggU3lzdGVtIFYpLCBhbmQgZXZlbiB0aGVuIHRoZWlyIHN1 Y2Nlc3NmdWwKLSAgIG9wZXJhdGlvbiBkZXBlbmRzIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhl IHNwZWNpZmljIGRldmljZSBhbmQKLSAgIGRyaXZlci4KLQotICAgU0VUIERJU0NPTk5FQ1QgeyBP TiwgT0ZGIH0KLSAgICAgICAgICBPbiBhIFNFVCBMSU5FIG9yIFNFVCBQT1JUIGNvbm5lY3Rpb24g d2l0aCBTRVQgQ0FSUklFUiBPTiBvcgotICAgICAgICAgIEFVVE8sIGlmIHRoZSBjYXJyaWVyIHNp Z25hbCBkcm9wcyBkdXJpbmcgdGhlIGNvbm5lY3Rpb24sCi0gICAgICAgICAgaW5kaWNhdGluZyB0 aGF0IHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGxvc3QsIGFuZCBDLUtlcm1pdAotICAgICAgICAg IG5vdGljZXMgaXQsIHRoaXMgc2V0dGluZyBnb3Zlcm5zIHdoYXQgaGFwcGVucyBuZXh0LiBXaXRo IFNFVAotICAgICAgICAgIERJU0NPTk5FQ1QgT0ZGLCB3aGljaCBpcyBjb25zaXN0ZW50IHdpdGgg cHJldmlvdXMgYmVoYXZpb3IsIGFuZAotICAgICAgICAgIHRoZXJlZm9yZSB0aGUgZGVmYXVsdCwg Qy1LZXJtaXQgY29udGludWVzIHRvIGtlZXAgdGhlIGRldmljZQotICAgICAgICAgIG9wZW4gYW5k IGFsbG9jYXRlZC4gV2l0aCBTRVQgRElTQ09OTkVDVCBPTiwgQy1LZXJtaXQKLSAgICAgICAgICBh dXRvbWF0aWNhbGx5IGNsb3NlcyBhbmQgcmVsZWFzZXMgdGhlIGRldmljZSB3aGVuIGl0IHNlbnNl cyBhCi0gICAgICAgICAgY2FycmllciBvbi10by1vZmYgdHJhbnNpdGlvbiwgdGh1cyBhbGxvd2lu ZyBvdGhlcnMgdG8gdXNlIGl0LgotICAgICAgICAgIEhvd2V2ZXIsIGl0IHJlbWFpbnMgdGhlIGRl ZmF1bHQgZGV2aWNlIGZvciBpL28gKERJQUwsIFJFRElBTCwKLSAgICAgICAgICBJTlBVVCwgU0VO RCwgQ09OTkVDVCwgZXRjKSwgc28gaWYgYSBzdWJzZXF1ZW50IGkvbyBjb21tYW5kIGlzCi0gICAg ICAgICAgZ2l2ZW4sIHRoZSBkZXZpY2UgaXMgcmVvcGVuZWQgaWYgaXQgaXMgc3RpbGwgYXZhaWxh YmxlLiBXaGVuIGl0Ci0gICAgICAgICAgaGFzIGJlZW4gYXV0b21hdGljYWxseSBjbG9zZWQgaW4g dGhpcyBtYW5uZXIsIFNIT1cKLSAgICAgICAgICBDT01NVU5JQ0FUSU9OUyBwdXRzICIoY2xvc2Vk KSIgYWZ0ZXIgaXRzIG5hbWUsIGFuZCBpbiBVTklYLCB0aGUKLSAgICAgICAgICBsb2NrZmlsZSBk aXNhcHBlYXJzIC0tIGJvdGggZnJvbSBTSE9XIENPTU0gYW5kIGZyb20gdGhlIGxvY2tmaWxlCi0g ICAgICAgICAgZGlyZWN0b3J5IGl0c2VsZi4gU3lub255bTogU0VUIENMT1NFLU9OLURJU0NPTk5F Q1QuCi0KLSAgIFNFVCBFWElUIE9OLURJU0NPTk5FQ1QgeyBPTiwgT0ZGIH0KLSAgICAgICAgICBM aWtlIERJU0NPTk5FQ1QsIGJ1dCBtYWtlcyB0aGUgcHJvZ3JhbSBleGl0IGlmIGEgY29ubmVjdGlv bgotICAgICAgICAgIGRyb3BzLgotCi0gICBOb3RlIHRoYXQgU0VUIENMT1NFLU9OLURJU0NPTk5F Q1QgYW5kIFNFVCBFWElUIE9OLURJU0NPTk5FQ1QgYXBwbHkgb25seQotICAgdG8gY29ubmVjdGlv bnMgdGhhdCBkcm9wOyB0aGV5IGRvIG5vdCBhcHBseSB0byBjb25uZWN0aW9ucyB0aGF0IGNhbid0 Ci0gICBiZSBtYWRlIGluIHRoZSBmaXJzdCBwbGFjZS4gRm9yIGV4YW1wbGUsIHRoZXkgaGF2ZSBu byBlZmZlY3Qgd2hlbiBhIFNFVAotICAgTElORSwgU0VUIEhPU1QsIFRFTE5FVCwgb3IgRElBTCBj b21tYW5kIGZhaWxzLgotCi0gICBIQU5HVVAKLSAgICAgICAgICBJZiBbQ0xPU0UtT04tXURJU0NP Tk5FQ1QgaXMgT04sIGFuZCB0aGUgSEFOR1VQIGNvbW1hbmQgaXMgZ2l2ZW4KLSAgICAgICAgICBv biBhIHNlcmlhbCBkZXZpY2UsIGFuZCB0aGUgY2FycmllciBzaWduYWwgaXMgbm8gbG9uZ2VyIHBy ZXNlbnQKLSAgICAgICAgICBhZnRlciB0aGUgSEFOR1VQIGNvbW1hbmQsIHRoZSBkZXZpY2UgaXMg Y2xvc2VkIGFuZCByZWxlYXNlZC4KLQotICAgU0VUIFBBUklUWSBIQVJEV0FSRSB7IEVWRU4sIE9E RCB9Ci0gICAgICAgICAgVW5saWtlIFNFVCBQQVJJVFkgeyBFVkVOLCBPREQsIE1BUkssIFNQQUNF IH0sIHdoaWNoIHNlbGVjdHMgNwotICAgICAgICAgIGRhdGEgYml0cyBwbHVzIHRoZSBpbmRpY2F0 ZWQga2luZCBvZiBwYXJpdHkgKHRvIGJlIGRvbmUgaW4KLSAgICAgICAgICBzb2Z0d2FyZSBieSBL ZXJtaXQgaXRzZWxmKSwgU0VUIFBBUklUWSBIQVJEV0FSRSBzZWxlY3RzIDggZGF0YQotICAgICAg ICAgIGJpdHMgcGx1cyBldmVuIG9yIG9kZCBwYXJpdHksIHRvIGJlIGRvbmUgYnkgdGhlIHVuZGVy bHlpbmcKLSAgICAgICAgICBoYXJkd2FyZSwgb3BlcmF0aW5nIHN5c3RlbSwgb3IgZGV2aWNlIGRy aXZlci4gVGhpcyBjb21tYW5kIGlzCi0gICAgICAgICAgZWZmZWN0aXZlIG9ubHkgd2l0aCBhIFNF VCBMSU5FIG9yIFNFVCBQT1JUIGRldmljZS4gVGhhdCBpcywgaXQKLSAgICAgICAgICBoYXMgbm8g ZWZmZWN0IGluIHJlbW90ZSBtb2RlLCBub3Igb24gbmV0d29yayBjb25uZWN0aW9ucy4gVGhlcmUK LSAgICAgICAgICBpcyBwcmVzZW50bHkgbm8gbWV0aG9kIGZvciBzZWxlY3RpbmcgOCBkYXRhIGJp dHMgcGx1cyBtYXJrIG9yCi0gICAgICAgICAgc3BhY2UgcGFyaXR5LiBJZiBoYXJkd2FyZSBwYXJp dHkgaXMgaW4gZWZmZWN0LCB0aGUgdmFyaWFibGUKLSAgICAgICAgICBcdihod3Bhcml0eSkgaXMg c2V0IHRvICJldmVuIiBvciAib2RkIi4gTm90ZTogc29tZSBwbGF0Zm9ybXMKLSAgICAgICAgICBt aWdodCBhbHNvIHN1cHBvcnQgc2V0dGluZ3Mgb2YgU1BBQ0UsIE1BUkssIG9yIE5PTkUuCi0KLSAg IFNFVCBTVE9QLUJJVFMgeyAxLCAyIH0KLSAgICAgICAgICBUaGlzIHRlbGxzIHRoZSBudW1iZXIg b2YgMS1iaXRzIHRvIGluc2VydCBhZnRlciBhbiBvdXRib3VuZAotICAgICAgICAgIGNoYXJhY3Rl cidzIGRhdGEgYW5kIHBhcml0eSBiaXRzLCB0byBzZXBhcmF0ZSBpdCBmcm9tIHRoZSBuZXh0Ci0g ICAgICAgICAgY2hhcmFjdGVyLiBOb3JtYWxseSAxLiBDaG9vc2luZyAyIHN0b3AgYml0cyBzaG91 bGQgZG8gbm8gaGFybSwKLSAgICAgICAgICBidXQgd2lsbCBzbG93IGRvd24gc2VyaWFsIHRyYW5z bWlzc2lvbiBieSBhcHByb3hpbWF0ZWx5IDEwCi0gICAgICAgICAgcGVyY2VudC4gSGlzdG9yaWNh bGx5LCAyIHN0b3AgYml0cyB3ZXJlIHVzZWQgd2l0aCBUZWxldHlwZXMgKGF0Ci0gICAgICAgICAg MTEwIGJwcyBvciBiZWxvdykgZm9yIHByaW50LWhlYWQgcmVjb3ZlcnkgdGltZS4gVGhlcmUgaXMK LSAgICAgICAgICBwcmVzZW50bHkgbm8gbWV0aG9kIGZvciBjaG9vc2luZyBhbnkgbnVtYmVyIG9m IHN0b3AgYml0cyBiZXNpZGVzCi0gICAgICAgICAgMSBhbmQgMi4KLQotICAgU0VUIFNFUklBTCBb IGRwcyBdCi0gICAgICAgICAgZHBzIHN0YW5kcyBmb3IgRGF0YS1iaXRzLCBQYXJpdHksIFN0b3At Yml0cy4gVGhpcyBpcyB0aGUKLSAgICAgICAgICBub3RhdGlvbiBmYW1pbGlhciB0byBtYW55IHBl b3BsZSBmb3Igc2VyaWFsIHBvcnQgY29uZmlndXJhdGlvbjoKLSAgICAgICAgICA3RTEsIDhOMSwg N08yLCBldGMuIFRoZSBkYXRhIGJpdHMgbnVtYmVyIGFsc28gYmVjb21lcyB0aGUKLSAgICAgICAg ICBURVJNSU5BTCBCWVRFU0laRSBzZXR0aW5nLiBUaGUgc2Vjb25kIGNoYXJhY3RlciBpcyBFIGZv ciBFdmVuLCBPCi0gICAgICAgICAgZm9yIE9kZCwgTSBmb3IgTWFyaywgUyBmb3IgU3BhY2UsIG9y IE4gZm9yIE5vbmUuIFRoZSBsaXN0IG9mCi0gICAgICAgICAgYXZhaWxhYmxlIG9wdGlvbnMgZGVw ZW5kcyBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBzcGVjaWZpYwotICAgICAgICAgIHBsYXRm b3JtLiBJZiBkcHMgaXMgb21pdHRlZCwgOE4xIGlzIHVzZWQuIFR5cGUgInNldCBzZXJpYWwgPyIK LSAgICAgICAgICBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBjaG9pY2VzLiBFeGFtcGxlczoKLQot ICAgICAgICBTRVQgU0VSSUFMIDdFMQotICAgICAgICAgICAgICAgIEVxdWl2YWxlbnQgdG8gU0VU IFBBUklUWSBFVkVOLCBTRVQgU1RPUC1CSVRTIDEsIFNFVCBURVJNCi0gICAgICAgICAgICAgICAg QllURSA3LgotCi0gICAgICAgIFNFVCBTRVJJQUwgOE4xCi0gICAgICAgICAgICAgICAgRXF1aXZh bGVudCB0byBTRVQgUEFSSVRZIE5PTkUsIFNFVCBTVE9QLUJJVFMgMSwgU0VUIFRFUk0KLSAgICAg ICAgICAgICAgICBCWVRFIDguCi0KLSAgICAgICAgU0VUIFNFUklBTCA3RTIKLSAgICAgICAgICAg ICAgICBFcXVpdmFsZW50IHRvIFNFVCBQQVJJVFkgRVZFTiBhbmQgU0VUIFNUT1AtQklUUyAyLCBT RVQKLSAgICAgICAgICAgICAgICBURVJNIEJZVEUgNy4KLQotICAgICAgICBTRVQgU0VSSUFMIDhF MgotICAgICAgICAgICAgICAgIFNhbWUgYXMgU0VUIFBBUklUWSBIQVJEV0FSRSBFVkVOLCBTRVQg U1RPUC1CSVRTIDIsIFNFVAotICAgICAgICAgICAgICAgIFRFUk0gQllURSA4LgotCi0gICAgICAg IFNFVCBTRVJJQUwKLSAgICAgICAgICAgICAgICBTYW1lIGFzIFNFVCBQQVJJVFkgTk9ORSBhbmQg U0VUIFNUT1AtQklUUyAxLCBTRVQgVEVSTSBCWVRFCi0gICAgICAgICAgICAgICAgOC4KLQotICAg Tm90ZXM6Ci0KLSAgICAgKiBUaGUgU0VUIFNFUklBTCB4eDIgb3B0aW9ucyBhcmUgYXZhaWxhYmxl IG9ubHkgaW4gS2VybWl0IHZlcnNpb25zCi0gICAgICAgd2hlcmUgdGhlIFNFVCBQQVJJVFkgSEFS RFdBUkUgY29tbWFuZCBpcyBhbHNvIGF2YWlsYWJsZS4gKFNIT1cKLSAgICAgICBGRUFUVVJFUyBp bmNsdWRlcyAiSFdQQVJJVFkiIGluIGl0cyBvcHRpb25zIGxpc3QuKQotICAgICAqIFRoZSBTRVQg U0VSSUFMIDd4eCBhbmQgOE4xIG9wdGlvbnMgYWZmZWN0IHRoZSBzb2Z0d2FyZSBwYXJpdHkKLSAg ICAgICBzZXR0aW5nLCBldmVuIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zLgotICAgICAqIEFzIG5v dGVkIGluIHRoZSBtYW51YWwsIHNlbGVjdGluZyA4IGRhdGEgYml0cyBkb2VzIG5vdCBnaXZlIHlv dQotICAgICAgIDgtYml0IHRlcm1pbmFsIHNlc3Npb25zIGluIENPTk5FQ1QgbW9kZSB1bmxlc3Mg eW91IGFsc28gU0VUCi0gICAgICAgVEVSTUlOQUwgQllURVNJWkUgOC4gVGhlIGRlZmF1bHQgdGVy bWluYWwgYnl0ZXNpemUgcmVtYWlucyA3LCB0bwotICAgICAgIHByb3RlY3QgYWdhaW5zdCB0aGUg c2l0dWF0aW9uIHdoZXJlIHRoZSByZW1vdGUgaG9zdCBpcyBnZW5lcmF0aW5nCi0gICAgICAgcGFy aXR5IGJ1dCB5b3UgZG9uJ3Qga25vdyBhYm91dCBpdC4gSWYgdGhlIHRlcm1pbmFsIGJ5dGVzaXpl IHdhcyA4Ci0gICAgICAgYnkgZGVmYXVsdCBhbmQgeW91IENPTk5FQ1RlZCB0byBzdWNoIGEgaG9z dCwgeW91IHdvdWxkIHNlZSBvbmx5Ci0gICAgICAgZ2FyYmFnZSBvbiB5b3VyIHNjcmVlbi4KLSAg ICAgKiBJZiB5b3UgZG8gbm90IGdpdmUgYSBTRVQgU1RPUC1CSVRTIG9yIFNFVCBTRVQgU0VSSUFM IGNvbW1hbmQsCi0gICAgICAgQy1LZXJtaXQgZG9lcyBub3QgYXR0ZW1wdCB0byBzZXQgdGhlIGRl dmljZSdzIHN0b3AgYml0czsgaW5zdGVhZCwKLSAgICAgICBpdCB1c2VzIHdoYXRldmVyIHNldHRp bmcgdGhlIGRldmljZSB1c2VzIHdoZW4gbm90IGdpdmVuIGV4cGxpY2l0Ci0gICAgICAgaW5zdHJ1 Y3Rpb25zIGFib3V0IHN0b3AgYml0cy4KLQotICAgU0hPVyBDT01NVU5JQ0FUSU9OUyBkaXNwbGF5 cyB0aGUgY3VycmVudCBzZXR0aW5ncy4gU3RvcCBiaXRzIGFuZAotICAgaGFyZHdhcmUgcGFyaXR5 IGFyZSBzaG93biBvbmx5IGZvciBTRVQgUE9SVCAvIFNFVCBMSU5FIChzZXJpYWwpCi0gICBkZXZp Y2VzLCBzaW5jZSB0aGV5IGRvIG5vdCBhcHBseSB0byBuZXR3b3JrIGNvbm5lY3Rpb25zIG9yIHRv IHJlbW90ZQotICAgbW9kZS4gU1RPUC1CSVRTIGlzIHNob3duIGFzICIoZGVmYXVsdCkiIGlmIHlv dSBoYXZlIG5vdCBnaXZlbiBhbgotICAgZXhwbGljaXQgU0VUIFNUT1AtQklUUyBvciBTRVQgU0VS SUFMIGNvbW1hbmQuCi0KLSAgIFRoZSBcdihzZXJpYWwpIHZhcmlhYmxlIHNob3dzIHRoZSBTRVQg U0VSSUFMIHNldHRpbmcgKDhOMSwgN0UxLCBldGMpLgotCi0yLjExLiBHZXR0aW5nIEFjY2VzcyB0 byB0aGUgRGlhbG91dCBEZXZpY2UKLQotICAgICBUaGlzIHNlY3Rpb24gaXMgZm9yIFVOSVggb25s eTsgbm90ZSB0aGUgc3BlY2lhbCB3b3JkcyBhYm91dCBRTlggYXQKLSAgICAgdGhlIGVuZC4gQWxz byBzZWUgWzQyNl1TZWN0aW9uIDIuMCBmb3IgU0VUIExJTkUgc3dpdGNoZXMsCi0gICAgIHBhcnRp Y3VsYXJseSB0aGUgL1NIQVJFIHN3aXRjaCBmb3IgVk1TIG9ubHkuCi0KLSAgIEMtS2VybWl0IGRv ZXMgaXRzIGJlc3QgdG8gb2JleSB0aGUgVVVDUCBsb2NrZmlsZSBjb252ZW50aW9ucyBvZiBlYWNo Ci0gICBwbGF0Zm9ybSAobWFjaGluZSwgb3BlcmF0aW5nIHN5c3RlbSwgT1MgdmVyc2lvbikgd2hl cmUgaXQgcnVucywgaWYgdGhhdAotICAgcGxhdGZvcm0gdXNlcyBVVUNQLgotCi0gICBCdXQgc2lt cGx5IG9iZXlpbmcgdGhlIGNvbnZlbnRpb25zIGlzIG9mdGVuIG5vdCBnb29kIGVub3VnaCwgZHVl IHRvIHRoZQotICAgaW5jcmVhc2luZyBsaWtlbGlob29kIHRoYXQgYSBwYXJ0aWN1bGFyIHNlcmlh bCBkZXZpY2UgbWlnaHQgaGF2ZSBtb3JlCi0gICB0aGFuIG9uZSBuYW1lIChlLmcuIC9kZXYvdHR5 MDAgYW5kIC9kZXYvdGVybS8wMCBhcmUgdGhlIHNhbWUgZGV2aWNlIGluCi0gICBVbml4d2FyZSA3 OyAvZGV2L2N1YSBhbmQgL2Rldi9jdWZhIGFyZSB0aGUgc2FtZSBkZXZpY2UgaW4gTmVYVFNURVAp LAotICAgcGx1cyB0aGUgaW5jcmVhc2luZ2x5IHdpZGVzcHJlYWQgdXNlIG9mIHN5bWxpbmtzIGZv ciBkZXZpY2UgbmFtZXMsIHN1Y2gKLSAgIGFzIC9kZXYvbW9kZW0uCi0KLSAgIEMtS2VybWl0IDcu MCBnb2VzIHRvIGdyZWF0ZXIgbGVuZ3RocyB0aGFuIHByZXZpb3VzIHZlcnNpb25zIHRvCi0gICBz dWNjZXNzZnVsbHkgaW50ZXJsb2NrIHdpdGggb3RoZXIgY29tbXVuaWNhdGlvbnMgcHJvZ3JhbSAo YW5kIG90aGVyCi0gICBpbnN0YW5jZXMgb2YgS2VybWl0IGl0c2VsZik7IGZvciBleGFtcGxlLCBi eToKLQotICAgICAqIENyZWF0aW9uIG9mIGR1YWwgbG9ja2ZpbGVzIHdoZW5ldmVyIGEgc3ltbGlu ayBpcyB1c2VkOyBvbmUgZm9yIHRoZQotICAgICAgIGxpbmsgbmFtZSBhbmQgb25lIGZvciB0aGUg cmVhbCBuYW1lLgotICAgICAqIENyZWF0aW9uIG9mIGR1YWwgbG9ja2ZpbGVzIGluIEhQLVVYIGFj Y29yZGluZyB0byBIUCBydWxlcy4KLSAgICAgKiBDcmVhdGlvbiBvZiBkdWFsIHVwcGVyY2FzZS9s b3dlcmNhc2UgbG9ja2ZpbGUgbmFtZXMgaW4gU0NPCi0gICAgICAgVU5JWC9PRFQvT1NSNS4KLSAg ICAgKiBUaGUgdXNlIG9mIHR0eWxvY2soKSBpbiB2ZXJzaW9ucyBvZiBBSVggd2hlcmUgaXQgd29y a3MuCi0gICAgICogVGhlIHVzZSwgd2hlcmV2ZXIgcG9zc2libGUsIG9mIGxvY2tmaWxlIG5hbWVz IGJhc2VkIG9uCi0gICAgICAgaW5vZGUvbWFqb3IvbWlub3IgZGV2aWNlIG51bWJlciByYXRoZXIg dGhhbiBkZXZpY2UgbmFtZS4KLQotICAgU2VlIHRoZSBbNDI3XWNrdWlucy50eHQgYW5kIFs0Mjhd Y2t1YndyLnR4dCBmaWxlcyBmb3IgZGV0YWlscy4KLQotICAgUU5YIGlzIGFsbW9zdCB1bmlxdWUg YW1vbmcgVU5JWCB2YXJpZXRpZXMgaW4gaGF2aW5nIG5vIFVVQ1AgcHJvZ3JhbXMKLSAgIG5vciBV VUNQLW9yaWVudGVkIGRpYWxvdXQtZGV2aWNlIGxvY2tpbmcgY29udmVudGlvbnMuIFFOWCBkb2Vz LAotICAgaG93ZXZlciwgYWxsb3cgYSBwcm9ncmFtIHRvIGdldCB0aGUgZGV2aWNlIG9wZW4gY291 bnQuIFRoaXMgY2FuIG5vdCBiZQotICAgYSByZWxpYWJsZSBmb3JtIG9mIGxvY2tpbmcgdW5sZXNz IGFsbCBhcHBsaWNhdGlvbnMgZG8gaXQgKGFuZCB0aGV5Ci0gICBkb24ndCksIHNvIGJ5IGRlZmF1 bHQsIEtlcm1pdCB1c2VzIHRoaXMgaW5mb3JtYXRpb24gb25seSBmb3IgcHJpbnRpbmcgYQotICAg d2FybmluZyBtZXNzYWdlIHN1Y2ggYXM6Ci0KLSAgQy1LZXJtaXQ+c2V0IGxpbmUgL2Rldi9zZXIx Ci0gIFdBUk5JTkcgLSAiL2Rldi9zZXIxIiBsb29rcyBidXN5Li4uCi0KLSAgIEhvd2V2ZXIsIGlm IHlvdSB3YW50IHRvIHVzZSBpdCBhcyBhIGxvY2ssIHlvdSBjYW4gZG8gc28gd2l0aDoKLQotICBT RVQgUU5YLVBPUlQtTE9DSyB7IE9OLCBPRkYgfQotCi0gICBRTlgtUE9SVC1MT0NLIGlzIE9GRiBi eSBkZWZhdWx0OyBpZiB5b3Ugc2V0IGluIE9OLCBDLUtlcm1pdCBmYWlscyB0bwotICAgb3BlbiBh bnkgZGlhbG91dCBkZXZpY2Ugd2hlbiBpdHMgb3BlbiBjb3VudCBpbmRpY2F0ZXMgdGhhdCBhbm90 aGVyCi0gICBwcm9jZXNzIGhhcyBpdCBvcGVuLiBTSE9XIENPTU0gKGluIFFOWCBvbmx5KSBkaXNw bGF5cyB0aGUgc2V0dGluZywgYW5kCi0gICBpZiB5b3UgaGF2ZSBhIHBvcnQgb3BlbiwgaXQgYWxz byBzaG93cyB0aGUgY3VycmVudCBvcGVuIGNvdW50ICh3aXRoCi0gICBDLUtlcm1pdCdzIG93biBh Y2Nlc3MgYWx3YXlzIGNvdW50aW5nIGFzIDEpLgotCi0yLjEyLiBUaGUgQ29ubmVjdGlvbiBMb2cK LQotICAgQy1LZXJtaXQgNy4wIGFkZHMgdGhlIGFiaWxpdHkgdG8gbG9nIGNvbm5lY3Rpb25zLCBz byB5b3UgY2FuIHNlZSB3aGVyZQotICAgeW91J3ZlIGJlZW4gYW5kIGhhdmUgYSByZWNvcmQgb2Yg Y2FsbHMgeW91J3ZlIG1hZGUuIEEgY29ubmVjdGlvbiBpcwotICAgZGVmaW5lZCBhcyBhbnkgY29t bXVuaWNhdGlvbnMgc2Vzc2lvbiB0aGF0IGlzIGJlZ3VuIGJ5IFNFVCBMSU5FLCBTRVQKLSAgIFBP UlQsIERJQUwsIFNFVCBIT1NULCBURUxORVQsIG9yIFJMT0dJTi4gQ29ubmVjdGlvbnMgYXJlIG5v dCBsb2dnZWQKLSAgIHVubGVzcyB5b3UgcmVxdWVzdCBpdDsgdGhlIGNvbW1hbmQgaXM6Ci0KLSAg IExPRyBDWCBbIGZpbGVuYW1lIFsgeyBORVcsIEFQUEVORCB9IF0gXQotICAgICAgICAgIEVuYWJs ZXMgbG9nZ2luZyBvZiBjb25uZWN0aW9ucyBpbiB0aGUgZ2l2ZW4gZmlsZS4gSWYgdGhlCi0gICAg ICAgICAgdHJhaWxpbmcgeyBORVcsIEFQUEVORCB9IGtleXdvcmQgaXMgb21pdHRlZCwgdGhlIGZp bGUgaXMgb3BlbmVkCi0gICAgICAgICAgZm9yIGFwcGVuZGluZzsgaS5lLiBuZXcgcmVjb3JkcyBh cmUgd3JpdHRlbiB0byB0aGUgZW5kLiBJZiBORVcKLSAgICAgICAgICBpcyBzcGVjaWZpZWQsIGEg bmV3IGZpbGUgaXMgY3JlYXRlZDsgaWYgYSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUKLSAgICAgICAg ICBhbHJlYWR5IGV4aXN0ZWQsIGl0IGlzIG92ZXJ3cml0dGVuLiBJZiB0aGUgZmlsZW5hbWUgaXMg b21pdHRlZCwKLSAgICAgICAgICBDWC5MT0cgaW4geW91ciBob21lIChsb2dpbikgZGlyZWN0b3J5 IGlzIHVzZWQgKG5vdGU6IHVwcGVyY2FzZSkuCi0gICAgICAgICAgVG8gYWNjZXB0IGFsbCBkZWZh dWx0cywganVzdCB1c2UgImxvZyBjb25uZWN0aW9ucyIgKG9yICJsIGMiIGZvcgotICAgICAgICAg IHNob3J0KS4gU3lub255bTogTE9HIENPTk5FQ1RJT05TLgotCi0gICBDTE9TRSBDWC1MT0cKLSAg ICAgICAgICBUaGlzIGNsb3NlcyB0aGUgY29ubmVjdGlvbiBsb2cgaWYgaXQgd2FzIG9wZW4uIChO b3RlLCB0aGUgQ0xPU0UKLSAgICAgICAgICBDT05ORUNUSU9OIGNvbW1hbmQgY2xvc2VzIHRoZSBj b25uZWN0aW9uIGl0c2VsZikuCi0KLSAgIFNIT1cgQ1gKLSAgICAgICAgICBUaGlzIHNob3dzIHlv dXIgY3VycmVudCBjb25uZWN0aW9uLCBpZiBhbnksIGluY2x1ZGluZyB0aGUKLSAgICAgICAgICBl bGFwc2VkIHRpbWUgKHNpbmNlIHlvdSBvcGVuZWQgaXQpLiBTeW5vbnltOiBTSE9XIENPTk5FQ1RJ T04uCi0KLSAgIFx2KGN4X3RpbWUpCi0gICAgICAgICAgVGhpcyB2YXJpYWJsZSBzaG93cyB0aGUg ZWxhcHNlZCB0aW1lIG9mIHlvdXIgY3VycmVudCBjb25uZWN0aW9uLAotICAgICAgICAgIG9yIGlm IHRoZXJlIGlzIG5vIGN1cnJlbnQgY29ubmVjdGlvbiwgb2YgeW91ciBtb3N0IHJlY2VudAotICAg ICAgICAgIGNvbm5lY3Rpb24sIG9mIGlmIHRoZXJlIGhhdmUgYmVlbiBubyBjb25uZWN0aW9ucywg MC4KLQotICAgVGhlIGNvbm5lY3Rpb24gY29udGFpbnMgb25lIGxpbmUgcGVyIGNvbm5lY3Rpb24s IG9mIHRoZSBmb3JtOgotCi0gIHl5eXltbWRkIGhoOm1tOnNzIHVzZXJuYW1lIHBpZCBwPXYgWyBw PXYgWyAuLi4gXSBdCi0KLSAgIHdoZXJlIHRoZSB0aW1lc3RhbXAgKGluIGNvbHVtbnMgMS0xOCkg c2hvd3Mgd2hlbiB0aGUgY29ubmVjdGlvbiB3YXMKLSAgIG1hZGU7IHVzZXJuYW1lIGlzIHRoZSBs b2dpbiBpZGVudGl0eSBvZiB0aGUgcGVyc29uIHdobyBtYWRlIHRoZQotICAgY29ubmVjdGlvbjsg cGlkIGlzIEtlcm1pdCdzIHByb2Nlc3MgSUQgd2hlbiBpdCBtYWRlIHRoZSBjb25uZWN0aW9uLiBU aGUKLSAgIHAncyBhcmUgcGFyYW1ldGVycyB0aGF0IGRlcGVuZCBvbiB0aGUgdHlwZSBvZiBjb25u ZWN0aW9uLCBhbmQgdGhlIHYncwotICAgYXJlIHRoZWlyIHZhbHVlczoKLQotICBUID0gQ29ubmVj dGlvbiBUeXBlIChUQ1AsIFNFUklBTCwgRElBTCwgREVDTkVULCBldGMpLgotICBIID0gVGhlIG5h bWUgb2YgdGhlIEhvc3QgZnJvbSB3aGljaCB0aGUgY29ubmVjdGlvbiB3YXMgbWFkZS4KLSAgTiA9 IERlc3RpbmF0aW9uIHBob25lIE51bWJlciBvciBOZXR3b3JrIGhvc3QgbmFtZSBvciBhZGRyZXNz LgotICBEID0gU2VyaWFsIGNvbm5lY3Rpb25zIG9ubHk6IERldmljZSBuYW1lLgotICBPID0gRGlh bGVkIGNhbGxzIG9ubHk6IE9yaWdpbmF0aW5nIGNvdW50cnkgY29kZSAmIGFyZWEgY29kZSBpZiBr bm93bi4KLSAgRSA9IEVsYXBzZWQgdGltZSBpbiBoaDptbTpzcyBmb3JtYXQgKG9yIGhoaDptbTpz cywgZXRjKS4KLQotICAgSWYgeW91IGFsd2F5cyB3YW50IHRvIGtlZXAgYSBjb25uZWN0aW9uIGxv Zywgc2ltcGx5IGFkZDoKLQotICBsb2cgY29ubmVjdGlvbnMKLQotICAgdG8geW91ciBDLUtlcm1p dCBjdXN0b21pemF0aW9uIGZpbGUuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgaWYgeW91IG1ha2UgYQot ICAgbG90IG9mIGNvbm5lY3Rpb25zLCB5b3VyIENYLkxPRyB3aWxsIGdyb3cgYW5kIGdyb3cuIFlv dSBjYW4gaGFuZGxlIHRoaXMKLSAgIGJ5IGFkZGluZyBhICJsb2dyb3RhdGUiIHByb2NlZHVyZSBs aWtlIHRoZSBmb2xsb3dpbmcgdG8geW91cgotICAgY3VzdG9taXphdGlvbiBmaWxlLCBiZWZvcmUg dGhlICJsb2cgY29ubmVjdGlvbnMiIGNvbW1hbmQ6Ci0KLSAgZGVmaW5lIExPR1JPVEFURSB7ICAg ICAgICAgICAgICAgICAgICA7IERlZmluZSBMT0dST1RBVEUgbWFjcm8KLSAgICAgIGxvY2FsIFwl aSBcJW0gXCVkIFwlbiBcJWYgTUFYCi0gICAgICBkZWYgTUFYIDQgICAgICAgICAgICAgICAgICAg ICAgICAgOyBIb3cgbWFueSBtb250aHMgdG8ga2VlcAotICAgICAgaWYgbm90IGRlZiBcJTEgLSAg ICAgICAgICAgICAgICAgIDsgTm8gYXJndW1lbnQgZ2l2ZW4KLSAgICAgICAgZW5kIDEgXCUwOiBO byBmaWxlbmFtZSBnaXZlbgotICAgICAgaWYgbm90ID0gMSBcZmZpbGVzKFwlMSkgLSAgICAgICAg IDsgRXhhY3RseSAxIGZpbGUgbXVzdCBtYXRjaAotICAgICAgICBlbmQgMSBcJTA6IFwlMSAtIEZp bGUgbm90IGZvdW5kCi0gICAgICAuXCVkIDo9IFxmc3Vic3RyKFxmZGF0ZShcJTEpLDEsNikgOyBB cmcgT0sgLSBnZXQgZmlsZSB5ZWFyICYgbW9udGgKLSAgICAgIGlmID0gXCVkIC0gICAgICAgICAg ICAgICAgICAgICAgICA7IENvbXBhcmUgZmlsZSB5ZWFyICYgbW9udGgKLSAgICAgICAgXGZzdWJz dHIoXHYobmRhdGUpLDEsNikgLSAgICAgICA7IHdpdGggY3VycmVudCB5ZWFyICYgbW9udGgKLSAg ICAgICAgICBlbmQgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFNhbWUgeWVhciAmIG1vbnRo IC0gZG9uZQotICAgICAgcmVuYW1lIFwlMSBcJTEuXCVkICAgICAgICAgICAgICAgIDsgRGlmZmVy ZW50IC0gcmVuYW1lIGZpbGUKLSAgICAgIC5cJW4gOj0gXGZmaWxlcyhcJTEuKikgICAgICAgICAg ICA7IEhvdyBtYW55IG9sZCBmaWxlcwotICAgICAgaWYgPCBcJW4gXG0oTUFYKSBlbmQgMCAgICAg ICAgICAgIDsgTm90IGVub3VnaCB0byByb3RhdGUKLSAgICAgIC5cJW0gOj0gXCUxLjk5OTk5OSAg ICAgICAgICAgICAgICA7IEluaXRpYWwgY29tcGFyZSBzdHJpbmcKLSAgICAgIGZvciBcJWkgMSBc JW4gMSB7ICAgICAgICAgICAgICAgICA7IExvb3AgdGhydSBvbGQgbG9ncwotICAgICAgICAgLlwl ZiA6PSBcZm5leHRmaWxlKCkgICAgICAgICAgIDsgR2V0IG5leHQgZmlsZSBuYW1lCi0gICAgICAg ICBpZiBsbHQgXCVmIFwlbSAuXCVtIDo9IFwlZiAgICAgOyBJZiB0aGlzIG9uZSBvbGRlciByZW1l bWJlciBpdAotICAgICAgfQotICAgICAgZGVsZXRlIFwlbSAgICAgICAgICAgICAgICAgICAgICAg IDsgRGVsZXRlIHRoZSBvbGRlc3Qgb25lCi0gIH0KLSAgbG9nIGNvbm5lY3Rpb25zICAgICAgICAg ICAgICAgICAgICAgICA7IE5vdyBvcGVuIHRoZSAocG9zc2libHkgbmV3KSBsb2cKLSAgbG9ncm90 YXRlIFx2KGhvbWUpQ1guTE9HICAgICAgICAgICAgICA7IFJ1biB0aGUgTE9HUk9UQVRFIG1hY3Jv Ci0KLSAgIEFzIHlvdSBjYW4gc2VlLCB0aGlzIGNvbXBhcmVzIHRoZSB5eXl5bW0gcG9ydGlvbiBv ZiB0aGUgbW9kaWZpY2F0aW9uCi0gICBkYXRlIChcZmRhdGUoKSkgb2YgdGhlIGdpdmVuIGZpbGUg KFwlMSkgd2l0aCB0aGUgY3VycmVudCB5eXl5bW0uIElmCi0gICB0aGV5IGRpZmZlciwgdGhlIGN1 cnJlbnQgZmlsZSBoYXMgdGhlIHl5eXltbSBzdWZmaXggKGZyb20gaXRzIG1vc3QKLSAgIHJlY2Vu dCBtb2RpZmljYXRpb24gZGF0ZSkgYXBwZW5kZWQgdG8gaXRzIG5hbWUuIFRoZW4gd2Ugc2VhcmNo IHRocm91Z2gKLSAgIGFsbCBvdGhlciBzdWNoIGZpbGVzLCBmaW5kIHRoZSBvbGRlc3Qgb25lLCBh bmQgZGVsZXRlIGl0LiBUaHVzIHRoZQotICAgY3VycmVudCBsb2csIHBsdXMgdGhlIGxvZ3MgZnJv bSB0aGUgbW9zdCByZWNlbnQgZm91ciBtb250aHMsIGFyZSBrZXB0LgotICAgVGhpcyBpcyBhbGwg ZG9uZSBhdXRvbWF0aWNhbGx5IGV2ZXJ5IHRpbWUgeW91IHN0YXJ0IEMtS2VybWl0LgotCi0gICBP biBtdWx0aXVzZXIgc3lzdGVtcywgaXQgaXMgcG9zc2libGUgdG8ga2VlcCBhIHNpbmdsZSwgc2hh cmVkLAotICAgc3lzdGVtLXdpZGUgY29ubmVjdGlvbiBsb2csIGJ1dCB0aGlzIGlzIG5vdCByZWNv bW1lbmRlZCBzaW5jZSAoYSkgaXQKLSAgIHJlcXVpcmVzIHlvdSBrZWVwIGEgcHVibGljbHkgd3Jp dGUtYWNjZXNzaWJsZSBsb2dmaWxlIChhIGdsYXJpbmcgdGFyZ2V0Ci0gICBmb3IgbWlzY2hpZWYp LCBhbmQgKGIpIGl0IHdvdWxkIHJlcXVpcmUgZWFjaCB1c2VyIHRvIGxvZyB0byB0aGF0IGZpbGUK LSAgIGFuZCBub3QgZGlzYWJsZSBsb2dnaW5nLiBBIGJldHRlciBtZXRob2QgZm9yIGxvZ2dpbmcg Y29ubmVjdGlvbnMsIGluCi0gICBVTklYIGF0IGxlYXN0LCBpcyBzeXNsb2dnaW5nIChzZWUgWzQy OV1ja3VpbnMudHh0IFNlY3Rpb24gMTUgYW5kCi0gICBbNDMwXVNlY3Rpb24gNC4yIG9mIHRoZSBb NDMxXUlLU0QgQWRtaW5pc3RyYXRpb24gR3VpZGUgZm9yIGRldGFpbHMpLgotCi0yLjEzLiBBdXRv bWF0aWMgQ29ubmVjdGlvbi1TcGVjaWZpYyBGbG93IENvbnRyb2wgU2VsZWN0aW9uCi0KLSAgIEJl Z2lubmluZyBpbiBDLUtlcm1pdCA3LjAsIHRoZSBhcHByb3ByaWF0ZSBmbG93LWNvbnRyb2wgbWV0 aG9kIGZvciBlYWNoCi0gICBjb25uZWN0aW9uIHR5cGUgaXMga2VwdCBpbiBhIHRhYmxlLCBmb3Ig ZXhhbXBsZToKLQotICBSZW1vdGU6ICAgICAgICAgICBOT05FCi0gIE1vZGVtOiAgICAgICAgICAg IFJUUy9DVFMKLSAgRGlyZWN0LVNlcmlhbDogICAgTk9ORQotICBUQ1BJUDogICAgICAgICAgICBO T05FCi0KLSAgIFRoZSBzaXplIG9mIHRoZSB0YWJsZSBhbmQgdmFsdWVzIGZvciBlYWNoIGNvbm5l Y3Rpb24gdHlwZSBjYW4gdmFyeSBmcm9tCi0gICBwbGF0Zm9ybSB0byBwbGF0Zm9ybS4gVHlwZSAi c2V0IGZsb3cgPyIgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUKLSAgIGZsb3ctY29udHJvbCB0eXBl cy4KLQotICAgVGhlIHRhYmxlIGlzIHVzZWQgdG8gYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIGFw cHJvcHJpYXRlIGtpbmQgb2YgZmxvdwotICAgY29udHJvbCB3aGVuZXZlciB5b3UgbWFrZSBhIGNv bm5lY3Rpb24uIFlvdSBjYW4gZGlzcGxheSB0aGUgdGFibGUgd2l0aDoKLQotICBTSE9XIEZMT1ct Q09OVFJPTAotCi0gICBUaGUgZGVmYXVsdHMgYXJlIGFzIGZvbGxvd3M6Ci0KLSAgIFJlbW90ZToK LSAgICAgICAgICBOT05FIG9yIFhPTi9YT0ZGLiBUaGlzIGlzIGJlY2F1c2UgQy1LZXJtaXQgaXMg bm90IGFsbG93ZWQgdG8KLSAgICAgICAgICBmaW5kIG91dCB3aGF0IHR5cGUgb2YgY29ubmVjdGlv biB0aGUgaW5jb21pbmcgdXNlciBoYXMgKCopLiBObwotICAgICAgICAgIGtpbmQgb2YgZmxvdyBj b250cm9sIHdpbGwgd29yayBvbiBldmVyeSBraW5kIG9mIGNvbm5lY3Rpb24sCi0gICAgICAgICAg aW5jbHVkaW5nICh1bmV4cGVjdGVkbHkpIEtFRVAsIHdoaWNoIHdlIHdvdWxkIGhhdmUgbGlrZWQg dG8gdXNlLAotICAgICAgICAgIGJ1dCBub3QgdHVybmluZyBvZmYgZmxvdyBjb250cm9sIGF0IHRo ZSByZW1vdGUgZW5kIGR1cmluZyBmaWxlCi0gICAgICAgICAgdHJhbnNmZXIgb24gVENQL0lQIGNv bm5lY3Rpb25zIGlzIGZhdGFsIHRvIHRoZSB0cmFuc2ZlciAoZXhjZXB0Ci0gICAgICAgICAgaW4g Vk1TIGFuZCBIUC1VWCwgd2hlcmUgaXQgbXVzdCBiZSBzZXQgdG8gWG9uL1hvZmYhKSBUaGVyZWZv cmUKLSAgICAgICAgICBpZiB5b3UgYXJlIGRpYWxpbmcgaW4gdG8gYSBzZXJpYWwgcG9ydCBvbiBh IHNlcnZlciAoVU5JWCBvciBWTVMpCi0gICAgICAgICAgd2hlcmUgQy1LZXJtaXQgaXMgcnVubmlu ZywgeW91IHdpbGwgbmVlZCB0byB0ZWxsIEMtS2VybWl0IHRvCi0gICAgICAgICAgInNldCBmbG93 IGtlZXAiIGJlZm9yZSB0cmFuc2ZlcnJpbmcgZmlsZXMgKGFzc3VtaW5nIHRoZSBtb2RlbQotICAg ICAgICAgIGFuZCBwb3J0IGFyZSBjb25maWd1cmVkIGNvcnJlY3RseSBieSB0aGUgc3lzdGVtIGFk bWluaXN0cmF0b3I7Ci0gICAgICAgICAgb3RoZXJ3aXNlIHlvdSdsbCBuZWVkIHRvIGdpdmUgYSBz cGVjaWZpYyBraW5kIG9mIGZsb3cgY29udHJvbCwKLSAgICAgICAgICBlLmcuICJzZXQgZmxvdyB4 b24veG9mZiIpLCBzbyBpbiB0aGlzIGNhc2UgQy1LZXJtaXQgd2lsbCBub3QKLSAgICAgICAgICBk aXNhYmxlIGZsb3cgY29udHJvbCwgYXMgaXQgbXVzdCBkbyB3aGVuIHlvdSBhcmUgY29taW5nIHZp YQotICAgICAgICAgIFRlbG5ldCAoZGlyZWN0bHkgb3IgdGhyb3VnaCBhIHRlcm1pbmFsIHNlcnZl ciwgZXhjZXB0IG9uIFZNUyBhbmQKLSAgICAgICAgICBIUC1VWCkuCi0KLSAgIE1vZGVtOgotICAg ICAgICAgIFRoaXMgYXBwbGllcyB3aGVuIHlvdSBkaWFsIG91dCB3aXRoIGEgbW9kZW0uIEluIHRo aXMgY2FzZSwgdGhlCi0gICAgICAgICAgTU9ERU0gRkxPVy1DT05UUk9MIHNldHRpbmcgdGFrZXMg YWZmZWN0IGFmdGVyIHRoZSBTRVQgRkxPVwotICAgICAgICAgIHNldHRpbmcsIHNvIGl0IGNhbiBw aWNrIHRoZSBtb3N0IGFwcHJvcHJpYXRlIGZsb3cgY29udHJvbCBmb3IKLSAgICAgICAgICB0aGUg Y29tYmluYXRpb24gb2YgdGhlIHBhcnRpY3VsYXIgbW9kZW0gYW5kIHRoZQotICAgICAgICAgIGNv bXB1dGVyL3BvcnQvZHJpdmVyIHRoYXQgaXMgZGlhbGluZy4KLQotICAgRGlyZWN0LVNlcmlhbDoK LSAgICAgICAgICBUaGUgZGVmYXVsdCBoZXJlIGlzIE5PTkUgYmVjYXVzZSBDLUtlcm1pdCBoYXMg bm8gd2F5IG9mIGtub3dpbmcKLSAgICAgICAgICB3aGF0IGtpbmQgb2YgZmxvdyBjb250cm9sLCBp ZiBhbnksIGlzIG9yIGNhbiBiZSBkb25lIGJ5IHRoZQotICAgICAgICAgIGRldmljZSBhdCB0aGUg b3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLiBSVFMvQ1RTIHdvdWxkIGJlIGEKLSAgICAgICAg ICBiYWQgY2hvaWNlIGhlcmUsIGJlY2F1c2UgaWYgdGhlIENUUyBzaWduYWwgaXMgbm90IGFzc2Vy dGVkLCB0aGUKLSAgICAgICAgICBjb25uZWN0aW9uIHdpbGwgaGFuZy4gQW5kIHNpbmNlIGRpcmVj dCBjb25uZWN0aW9ucyBhcmUgb2Z0ZW4KLSAgICAgICAgICBtYWRlIHdpdGggMy13aXJlIGNhYmxl cywgdGhlcmUgaXMgYSBnb29kIGNoYW5jZSB0aGUgQ1RTIHNpZ25hbAotICAgICAgICAgIHdpbGwg bm90IGJlIHJlY2VpdmVkLgotCi0gICBUQ1BJUDoKLSAgICAgICAgICBOT05FLCBzaW5jZSBUQ1Ag YW5kIElQIHByb3ZpZGUgdGhlaXIgb3duIGZsb3cgY29udHJvbAotICAgICAgICAgIHRyYW5zcGFy ZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9uLCBleGNlcHQgaW4gVk1TLCB3aGVyZSBYb24vWG9mZgot ICAgICAgICAgIGlzIHRoZSBkZWZhdWx0IGR1ZSB0byB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBW TVMgVENQL0lQCi0gICAgICAgICAgcHJvZHVjdHMuCi0KLSAgIE90aGVyIG5ldHdvcmtzOgotICAg ICAgICAgIE5PTkUsIHNpbmNlIG5ldHdvcmtzIHNob3VsZCBwcm92aWRlIHRoZWlyIGZsb3cgY29u dHJvbAotICAgICAgICAgIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9uLgotCi0gICAo KikgVGhpcyBpcyBwb3NzaWJseSB0aGUgd29yc3QgZmVhdHVyZSBvZiBVTklYLCBWTVMsIGFuZCBv dGhlcgotICAgcGxhdGZvcm1zIHdoZXJlIEMtS2VybWl0IHJ1bnMuIElmIEMtS2VybWl0IHdhcyBh YmxlIHRvIGFzayB0aGUKLSAgIG9wZXJhdGluZyBzeXN0ZW0gd2hhdCBraW5kIG9mIGNvbm5lY3Rp b24gaXQgaGFkIHRvIHRoZSB1c2VyLCBpdCBjb3VsZAotICAgc2V0IHVwIG1hbnkgdGhpbmdzIGZv ciB5b3UgYXV0b21hdGljYWxseS4KLQotICAgWW91IGNhbiBtb2RpZnkgdGhlIGRlZmF1bHQtZmxv dy1jb250cm9sIHRhYmxlIHdpdGg6Ci0KLSAgU0VUIEZMT1ctQ09OVFJPTCAveHh4IHsgTk9ORSwg S0VFUCwgUlRTL0NUUywgWE9OL1hPRkYsIC4uLiB9Ci0KLSAgIHdoZXJlICJ4eHgiIGlzIHRoZSBj b25uZWN0aW9uIHR5cGUsIGUuZy4KLQotICBTRVQgRkxPVyAvUkVNT1RFIE5PTkUKLSAgU0VUIEZM T1cgL0RJUkVDVCBSVFMvQ1RTCi0KLSAgIElmIHlvdSBsZWF2ZSBvdXQgdGhlIHN3aXRjaCwgU0VU IEZMT1cgd29ya3MgYXMgYmVmb3JlLCBjaG9vc2luZyB0aGUKLSAgIGZsb3cgY29udHJvbCBtZXRo b2QgdG8gYmUgdXNlZCBvbiB0aGUgY3VycmVudCBjb25uZWN0aW9uOgotCi0gIFNFVCBGTE9XIFhP Ti9YT0ZGCi0KLSAgIFRodXMsIHdoZW5ldmVyIHlvdSBtYWtlIGEgY29ubmVjdGlvbiB3aXRoIFNF VCBQT1JULCBTRVQgTElORSwgRElBTCwgU0VUCi0gICBIT1NULCBURUxORVQsIFJMT0dJTiwgZXRj LCBhbiBhcHByb3ByaWF0ZSBmb3JtIG9mIGZsb3cgY29udHJvbCBpcwotICAgc2VsZWN0ZWQgYXV0 b21hdGljYWxseS4gWW91IGNhbiBvdmVycmlkZSB0aGUgYXV0b21hdGljIHNlbGVjdGlvbiB3aXRo IGEKLSAgIHN1YnNlcXVlbnQgU0VUIEZMT1cgY29tbWFuZCwgc3VjaCBhcyBTRVQgRkxPVyBOT05F IChubyBzd2l0Y2gKLSAgIGluY2x1ZGVkKS4KLQotICAgVGhlIGZsb3cgY29udHJvbCBpcyBjaGFu Z2VkIGF1dG9tYXRpY2FsbHkgdG9vIHdoZW4geW91IGdpdmUgYSBTRVQgTU9ERU0KLSAgIFRZUEUg Y29tbWFuZC4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91ciBvcGVyYXRpbmcgc3lzdGVtIChzYXkg TGludXgpCi0gICBzdXBwb3J0cyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKFJUUy9DVFMpLiBOb3cg c3VwcG9zZSB5b3UgZ2l2ZSB0aGUKLSAgIGZvbGxvd2luZyBjb21tYW5kczoKLQotICBzZXQgbGlu ZSAvZGV2L3R0eVMyICAgIDsgQXV0b21hdGljYWxseSBzZXRzIGZsb3cgdG8gTk9ORQotICBzZXQg bW9kZW0gdHlwZSB1c3IgICAgIDsgQXV0b21hdGljYWxseSBzZXRzIGZsb3cgdG8gUlRTL0NUUwot ICBzZXQgbW9kZW0gdHlwZSByb2xtICAgIDsgRG9lc24ndCBzdXBwb3J0IFJUUy9DVFMgc28gbm93 IGZsb3cgaXMgWE9OL1hPRkYKLQotICAgSU1QT1JUQU5UOiBUaGlzIG5ldyBmZWF0dXJlIHRlbmRz IHRvIG1ha2UgdGhlIG9yZGVyIG9mIFNFVCBMSU5FL0hPU1QKLSAgIGFuZCBTRVQgRkxPVyBjb21t YW5kcyBtYXR0ZXIsIHdoZXJlIGl0IGRpZG4ndCBiZWZvcmUuIEZvciBleGFtcGxlLCBpbgotICAg Vk1TOgotCi0gIFNFVCBGTE9XIEtFRVAKLSAgU0VUIExJTkUgVFRBMDoKLQotICAgdGhlIFNFVCBM SU5FIHVuZG9lcyB0aGUgU0VUIEZMT1cgS0VFUCBjb21tYW5kOyB0aGUgc2VxdWVuY2Ugbm93IG11 c3QKLSAgIGJlOgotCi0gIFNFVCBGTE9XIC9ESVJFQ1QgS0VFUAotICBTRVQgTElORSBUVEEwOgot Ci0gICBvcjoKLQotICBTRVQgTElORSBUVEEwOgotICBTRVQgRkxPVyBLRUVQCi0KLTIuMTQuIFRy YXBwaW5nIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCBhbmQgTG9zcwotCi0gICBJZiB5b3UgZGVm aW5lIGEgbWFjcm8gY2FsbGVkIE9OX09QRU4sIGl0IGlzIGV4ZWN1dGVkIGFueSB0aW1lIHRoYXQg YQotICAgU0VUIExJTkUsIFNFVCBQT1JULCBTRVQgSE9TVCwgVEVMTkVULCBSTE9HSU4gb3Igc2lt aWxhciBjb21tYW5kCi0gICBzdWNjZWVkcyBpbiBvcGVuaW5nIGEgY29ubmVjdGlvbi4gVGhlIGFy Z3VtZW50IGlzIHRoZSBob3N0IG9yIGRldmljZQotICAgbmFtZSAoYXMgc2hvd24gYnkgU0hPVyBD T01NVU5JQ0FUSU9OUywgYW5kIHRoZSBzYW1lIGFzIFx2KGxpbmUpKS4gVGhpcwotICAgbWFjcm8g Y2FuIGJlIHVzZWQgZm9yIGFsbCBzb3J0cyBvZiB0aGluZ3MsIGxpa2UgYXV0b21hdGljYWxseSBz ZXR0aW5nCi0gICBjb25uZWN0aW9uLSBvciBob3N0LXNwZWNpZmljIHBhcmFtZXRlcnMgd2hlbiB0 aGUgY29ubmVjdGlvbiBpcyBvcGVuZWQuCi0gICBFeGFtcGxlOgotCi0gIGRlZiBPTl9PUEVOIHsK LSAgICAgIHN3aXRjaCBcJTEgewotICAgICAgICA6YWJjY29ycC5jb20sIHNldCByZWxpYWJsZSBv ZmYsIGJyZWFrCi0gICAgICAgIDp4eXpjb3JwLmNvbSwgc2V0IHJlY2VpdmUgcGFja2V0LWxlbmd0 aCAxMDAwLCBicmVhawotICAgICAgICBldGMgZXRjLi4uCi0gICAgICB9Ci0gIH0KLQotICAgSWYg eW91IGRlZmluZSBhIG1hY3JvIGNhbGxlZCBPTl9DTE9TRSwgaXQgd2lsbCBiZSBleGVjdXRlZCBh bnkgdGltZQotICAgdGhhdCBhIFNFVCBMSU5FLCBTRVQgUE9SVCwgU0VUIEhPU1QsIFRFTE5FVCwg UkxPR0lOIG9yIGFueSBvdGhlciBraW5kCi0gICBvZiBjb25uZWN0aW9uIHRoYXQgQy1LZXJtaXQg aGFzIG1hZGUgaXMgY2xvc2VkLCBlaXRoZXIgYnkgdGhlIHJlbW90ZSBvcgotICAgYnkgYSBsb2Nh bCBDTE9TRSwgSEFOR1VQLCBvciBFWElUIGNvbW1hbmQgb3Igb3RoZXIgbG9jYWwgYWN0aW9uLCBz dWNoCi0gICBhcyB3aGVuIGEgbmV3IGNvbm5lY3Rpb24gaXMgb3BlbmVkIGJlZm9yZSBhbiBvbGQg b25lIHdhcyBleHBsaWNpdGx5Ci0gICBjbG9zZWQuCi0KLSAgIEFzIHNvb24gYXMgQy1LZXJtaXQg bm90aWNlcyB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBjbG9zZWQsIHRoZQotICAgT05fQ0xPU0Ug bWFjcm8gaXMgaW52b2tlZCBhdCAoYSkgdGhlIHRvcCBvZiB0aGUgY29tbWFuZCBwYXJzaW5nIGxv b3AsCi0gICBvciAoYikgd2hlbiBhIGNvbm5lY3Rpb24gaXMgY2xvc2VkIGltcGxpY2l0bHkgYnkg YSBjb21tYW5kIHN1Y2ggYXMgU0VUCi0gICBMSU5FIHRoYXQgY2xvc2VzIGFueSBvcGVuIGNvbm5l Y3Rpb24gcHJpb3IgdG8gbWFraW5nIGEgbmV3IGNvbm5lY3Rpb24sCi0gICBvciAoYykgd2hlbiBD LUtlcm1pdCBjbG9zZXMgYW4gb3BlbiBjb25uZWN0aW9uIGluIHRoZSBhY3Qgb2YgZXhpdGluZy4K LQotICAgVGhlIE9OX0NMT1NFIG1hY3JvIHdhcyBpbnNwaXJlZCBieSB0aGUgbmV2ZXJlbmRpbmcg cXVlc3QgdG8gdW5pdGUKLSAgIEtlcm1pdCBhbmQgU1NILiBJbiB0aGlzIGNhc2UgdXNpbmcgdGhl ICJ0dW5uZWwiIG1lY2hhbmlzbToKLQotICBkZWYgVFVOTkVMIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsgXCUxID0gaG9zdCB0byB0dW5uZWwgdG8KLSAgICAgIGxvY2FsIFwlcAot ICAgICAgaWYgbm90IGRlZiBcJTEgc3RvcCAxCi0gICAgICBhc3NpZ24gdHVubmVsaG9zdCBcJTEg ICAgICAgICAgICAgICAgICAgOyBNYWtlIGdsb2JhbCBjb3B5Ci0gICAgICB1bmRlZiBvbl9jbG9z ZQotICAgICAgc2V0IG1hY3JvIGVycm9yIG9mZgotICAgICAgY2xvc2UgY29ubmVjdGlvbiAgICAg ICAgICAgICAgICAgICAgICAgIDsgSWdub3JlIGFueSBlcnJvcgotICAgICAgb3BlbiAhcmVhZCB0 dW5uZWwgc3RhcnQgXCUxCi0gICAgICByZWFkIFwlcCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOyBHZXQgcG9ydCBudW1iZXIKLSAgICAgIGlmIGZhaWwgc3RvcCAxIFR1bm5lbCBmYWls dXJlOiBcJTEKLSAgICAgIGNsb3NlIHJlYWQKLSAgICAgIGlmIGZhaWwgc3RvcCAxIFR1bm5lbCBm YWlsdXJlOiBcJTEgICAgICA7IFNlZSBbNDMyXVNlY3Rpb24gNC4yLjguMQotICAgICAgYXNzaWdu IG9uX2Nsb3NlIHsgICAgICAgICAgICAgICAgICAgICAgIDsgU2V0IHVwIGNsb3NlIGhhbmRsZXIK LSAgICAgICAgICBlY2hvIENsb3NpbmcgdHVubmVsOiBcbSh0dW5uZWxob3N0KQotICAgICAgICAg ICF0dW5uZWwgc3RvcCBcbSh0dW5uZWxob3N0KQotICAgICAgICAgIHVuZGVmIG9uX2Nsb3NlCi0g ICAgICB9Ci0gICAgICBzZXQgaG9zdCBsb2NhbGhvc3Q6XCVwIC90ZWxuZXQKLSAgICAgIGlmIHN1 Y2Nlc3MgZW5kIDAKLSAgICAgIHVuZGVmIG9uX2Nsb3NlCi0gICAgICBzdG9wIDEgQ29ubmVjdGlv biBmYWlsdXJlOiBcJTEKLSAgfQotCi0gICBJbiB0aGlzIGNhc2UsIHdoZW4gdGhlIGNvbm5lY3Rp b24gc3RvcHMsIHdlIGFsc28gbmVlZCB0byBzaHV0IGRvd24gdGhlCi0gICB0dW5uZWwsIGV2ZW4g aWYgaXQgaXMgYXQgYSBsYXRlciB0aW1lIGFmdGVyIFRVTk5FTCBoYXMgZmluaXNoZWQKLSAgIGV4 ZWN1dGluZy4gVGhpcyB3YXkgd2UgY2FuIGVzY2FwZSBiYWNrLCByZWNvbm5lY3QsIHRyYW5zZmVy IGZpbGVzLCBhbmQKLSAgIHNvIG9uIHVudGlsIHRoZSBjb25uZWN0aW9uIGlzIGJyb2tlbiBieSBs b2dnaW5nIG91dCBmcm9tIHRoZSByZW1vdGUsIG9yCi0gICBieSBleHBsaWNpdGx5IGNsb3Npbmcg aXQsIG9yIGJ5IEVYSVRpbmcgZnJvbSBDLUtlcm1pdCwgYXQgd2hpY2ggdGltZQotICAgdGhlIHR1 bm5lbCBpcyBzaHV0IGRvd24uCi0KLSAgIFdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLCBu byBtYXR0ZXIgaG93LCB0aGUgT05fQ0xPU0UgbWFjcm8KLSAgIGV4ZWN1dGVzIGFuZCB0aGVuIHVu ZGVmaW5lcyAoZGVzdHJveXMpIGl0c2VsZiwgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0bwotICAgYmUg Y2xvc2luZyB0dW5uZWxzIGluIHRoZSBmdXR1cmUgd2hlbiB3ZSBjbG9zZSBzdWJzZXF1ZW50IGNv bm5lY3Rpb25zLgotCi0gICBPdGhlciBzdWNoIHRyaWNrcyBjYW4gYmUgaW1hZ2luZWQsIGluY2x1 ZGluZyBlbmRpbmcgT05fQ0xPU0Ugd2l0aCBhCi0gICBTVE9QIGNvbW1hbmQgdG8gZm9yY2UgdGhl IGNvbW1hbmQgc3RhY2sgdG8gYmUgcGVlbGVkIGFsbCB0aGUgd2F5IGJhY2sKLSAgIHRvIHRoZSB0 b3AsIGZvciBleGFtcGxlIGluIGEgZGVlcGx5IG5lc3RlZCBzY3JpcHQgdGhhdCBkZXBlbmRzIG9u IHRoZQotICAgY29ubmVjdGlvbiBiZWluZyBvcGVuOgotCi0gIGRlZiBvbl9jbG9zZSB7IHN0b3Ag MSBDT05ORUNUSU9OIExPU1QgfQotCi0gICBXaGVuIEMtS2VybWl0IGludm9rZXMgdGhlIE9OX0NM T1NFIG1hY3JvLCBpdCBzdXBwbGllcyBvbmUgYXJndW1lbnQKLSAgIChcJTEpOiB0aGUgcmVhc29u IHRoZSBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYXMgYSBudW1iZXIsIG9uZSBvZiB0aGUKLSAgIGZv bGxvd2luZzoKLQotICAyIC0gRmF0YWwgZmFpbHVyZSB0byBuZWdvdGlhdGUgYSByZXF1aXJlZCBp dGVtIG9uIGEgbmV0d29yayBjb25uZWN0aW9uLgotICAxIC0gQ2xvc2VkIGJ5IEMtS2VybWl0IGNv bW1hbmQuCi0gIDAgLSBBbGwgb3RoZXJzIChub3JtYWxseSBjbG9zZWQgYnkgcmVtb3RlKS4KLQot ICAgd2hpY2ggbWF5IGJlIHVzZWQgZm9yIGFueSBwdXJwb3NlOyBmb3IgZXhhbXBsZSwgdG8gYWRk IGEgY29tbWVudCB0byB0aGUKLSAgIGNvbm5lY3Rpb24gbG9nOgotCi0gIGRlZiBvbl9jbG9zZSB7 Ci0gICAgICBsb2NhbCBcJW0KLSAgICAgIGlmIG5vdCBvcGVuIGN4IGVuZCAwCi0gICAgICBzd2l0 Y2ggXCUxIHsKLSAgICAgICAgOjAsIC5cJW0gPSBDbG9zZWQgYnkgcmVtb3RlLCBicmVhawotICAg ICAgICA6MSwgLlwlbSA9IENsb3NlZCBieSBtZSwgYnJlYWsKLSAgICAgICAgOjIsIC5cJW0gPSBO ZXR3b3JrIHByb3RvY29sIG5lZ290aWF0aW9uIGZhaWx1cmUsIGJyZWFrCi0gICAgICB9Ci0gICAg ICBpZiBkZWYgXCVtIHdyaXRlbG4gY3ggeyMgXCVtfQotICB9Ci0KLTIuMTUuIENvbnRhY3Rpbmcg V2ViIFNlcnZlcnMgd2l0aCB0aGUgSFRUUCBDb21tYW5kCi0KLSAgIEMtS2VybWl0IDcuMCAoYXQg dGhpcyB3cml0aW5nLCB0aGUgVU5JWCB2ZXJzaW9uIG9ubHkpIHN1cHBvcnRzIGRpcmVjdAotICAg Y29udGFjdCBhbmQgaW50ZXJhY3Rpb24gd2l0aCBXZWIgc2VydmVycyB2aWEgSFRUUCAxLjAgcHJv dG9jb2wuIFRvIG1ha2UKLSAgIGEgY29ubmVjdGlvbiwgdXNlIEtlcm1pdCdzIG5vcm1hbCBtZXRo b2QgZm9yIG1ha2luZyBhIFRDUC9JUAotICAgY29ubmVjdGlvbiwgYnV0IHNwZWNpZnkgdGhlIEhU VFAgcG9ydDoKLQotICBTRVQgSE9TVCBob3N0IGh0dHAgWyBzd2l0Y2hlcyBdCi0KLSAgIHdoZXJl IGhvc3QgaXMgdGhlIElQIGhvc3RuYW1lIG9yIGFkZHJlc3MsIGFuZCBodHRwIGlzIHRoZSBuYW1l IG9mIHRoZQotICAgVENQIHBvcnQgZm9yIHRoZSBXZWIgc2VydmVyLiBSZWxldmFudCBzd2l0Y2hl cyBpbmNsdWRlOgotCi0gICAvUkFXCi0gICAgICAgICAgVHJlYXQgdGhlIGNvbm5lY3Rpb24gYXMg YSB0cmFuc3BhcmVudCBiaW5hcnkgcGlwZS4gVGhpcyBzd2l0Y2gKLSAgICAgICAgICBtYXkgYmUg cmVxdWlyZWQgaWYgYSBwb3J0IG90aGVyIHRoYW4gJ2h0dHAnIGlzIHVzZWQuCi0KLSAgIC9TU0wK LSAgICAgICAgICBNYWtlIGFuIHNlY3VyZSBwcml2YXRlIGNvbm5lY3Rpb24gd2l0aCBTU0wgKG9u bHkgaWYgU1NMIHN1cHBvcnQKLSAgICAgICAgICBpcyBpbmNsdWRlZCBpbiB5b3VyIHZlcnNpb24g b2YgS2VybWl0KS4gSW4gdGhpcyBjYXNlIHRoZSBwb3J0Ci0gICAgICAgICAgbmFtZSBtaWdodCBu ZWVkIHRvIGJlIGh0dHBzIHJhdGhlciB0aGFuIGh0dHAsIGUuZy4gInNldCBob3N0Ci0gICAgICAg ICAgc2VjdXJlc2VydmVyLnh5emNvcnAuY29tIGh0dHBzIC9zc2wiLgotCi0gICAvVExTCi0gICAg ICAgICAgTWFrZSBhbiBzZWN1cmUgcHJpdmF0ZSBjb25uZWN0aW9uIHdpdGggVExTIChvbmx5IGlm IFRMUyBzdXBwb3J0Ci0gICAgICAgICAgaXMgaW5jbHVkZWQgaW4geW91ciB2ZXJzaW9uIG9mIEtl cm1pdCkuIEluIHRoaXMgY2FzZSB0aGUgcG9ydAotICAgICAgICAgIG5hbWUgd291bGQgYmUgaHR0 cHMgcmF0aGVyIHRoYW4gaHR0cC4KLQotICAgVGhlbiB5b3UgY2FuIGlzc3VlIGFuIEhUVFAgY29t bWFuZC4gSW4gbW9zdCBjYXNlcywgdGhlIHNlcnZlciBjbG9zZXMKLSAgIHRoZSBjb25uZWN0aW9u IHdoZW4gdGhlIGNvbW1hbmQgaXMgY29tcGxldGUuIEV4YW1wbGU6Ci0KLSAgU0VUIEhPU1Qgd3d3 LmNvbHVtYmlhLmVkdSBodHRwCi0gIElGIEZBSUwgRVhJVCAxIENhbid0IGNvbnRhY3Qgc2VydmVy Ci0gIEhUVFAgR0VUIGtlcm1pdC9pbmRleC5odG1sCi0KLSAgIEF0IHRoaXMgcG9pbnQgdGhlIGNv bm5lY3Rpb24gaXMgY2xvc2VkLCBzaW5jZSB0aGF0J3MgaG93IEhUVFAgMS4wCi0gICB3b3Jrcy4g SWYgeW91IHdhbnQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIG9wZXJhdGlvbnMsIHlvdSBtdXN0IGVz dGFibGlzaAotICAgYSBuZXcgY29ubmVjdGlvbiB3aXRoIGFub3RoZXIgU0VUIEhPU1QgY29tbWFu ZC4KLQotICAgVGhlIEhUVFAgY29tbWFuZCBhY3RzIGFzIGEgY2xpZW50IHRvIHRoZSBXZWIgc2Vy dmVyLCBleGNlcHQgaW5zdGVhZCBvZgotICAgZGlzcGxheWluZyB0aGUgcmVzdWx0cyBsaWtlIGEg V2ViIGJyb3dzZXIgd291bGQsIGl0IHN0b3JlcyB0aGVtLiBBbnkKLSAgIEhUVFAgY29tbWFuZCBj YW4gKGJ1dCBuZWVkIG5vdCkgaW5jbHVkZSBhbnkgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcKLSAg IHN3aXRjaGVzOgotCi0gICAvQUdFTlQ6dXNlci1hZ2VudAotICAgICAgICAgIElkZW50aWZpZXMg dGhlIGNsaWVudCB0byB0aGUgc2VydmVyOyAiQy1LZXJtaXQiIG9yICJLZXJtaXQtOTUiCi0gICAg ICAgICAgYnkgZGVmYXVsdC4KLQotICAgL0hFQURFUjpoZWFkZXItbGluZQotICAgICAgICAgIFVz ZWQgZm9yIHNwZWNpZnlpbmcgYW55IG9wdGlvbmFsIGhlYWRlcnMuIEEgbGlzdCBvZiBoZWFkZXJz IGlzCi0gICAgICAgICAgcHJvdmlkZWQgdXNpbmcgYnJhY2VzIGZvciBncm91cGluZzoKLQotICAv SEVBREVSOnt7dGFnOnZhbHVlfXt0YWc6dmFsdWV9Li4ufQotCi0gICAgICAgICAgRm9yIGEgbGlz dGluZyBvZiB2YWxpZCB0YWcgdmFsdWUgYW5kIHZhbHVlIGZvcm1hdHMgc2VlIFs0MzNdUkZDCi0g ICAgICAgICAgMTk0NTogSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sIC0tIEhUVFAvMS4wLiBB IG1heGltdW0gb2YKLSAgICAgICAgICBlaWdodCBoZWFkZXJzIG1heSBiZSBzcGVjaWZpZWQuCi0K LSAgIC9VU0VSOm5hbWUKLSAgICAgICAgICBJbiBjYXNlIGEgcGFnZSByZXF1aXJlcyBhIHVzZXJu YW1lIGZvciBhY2Nlc3MuCi0KLSAgIC9QQVNTV09SRDpwYXNzd29yZAotICAgICAgICAgIEluIGNh c2UgYSBwYWdlIHJlcXVpcmVzIGEgcGFzc3dvcmQgZm9yIGFjY2Vzcy4KLQotICAgL0FSUkFZOmFy cmF5bmFtZQotICAgICAgICAgIFRlbGxzIEtlcm1pdCB0byBzdG9yZSB0aGUgcmVzcG9uc2UgaGVh ZGVycyBpbiB0aGUgZ2l2ZW4gYXJyYXksCi0gICAgICAgICAgb25lIGxpbmUgcGVyIGVsZW1lbnQu IFRoZSBhcnJheSBuZWVkIG5vdCBiZSBkZWNsYXJlZCBpbiBhZHZhbmNlLgotICAgICAgICAgIEV4 YW1wbGU6Ci0KLSAgQy1LZXJtaXQ/IGh0dHAgL2FycmF5OmMgZ2V0IGtlcm1pdC9pbmRleC5odG1s Ci0gIEMtS2VybWl0PyBzaG93IGFycmF5IGMKLSAgRGltZW5zaW9uID0gOQotICAxLiBEYXRlOiBG cmksIDI2IE5vdiAxOTk5IDIzOjEyOjIyIEdNVAotICAyLiBTZXJ2ZXI6IEFwYWNoZS8xLjMuNCAo VW5peCkKLSAgMy4gTGFzdC1Nb2RpZmllZDogTW9uLCAwNiBTZXAgMTk5OSAyMjozNTo1OCBHTVQK LSAgNC4gRVRhZzogImJjMDQ5LWY3Mi0zN2Q0NDFjZSIKLSAgNS4gQWNjZXB0LVJhbmdlczogYnl0 ZXMKLSAgNi4gQ29udGVudC1MZW5ndGg6IDM5NTQKLSAgNy4gQ29ubmVjdGlvbjogY2xvc2UKLSAg OC4gQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKLQotICAgQXMgeW91IGNhbiBzZWUsIHRoZSBoZWFk ZXIgbGluZXMgYXJlIGxpa2UgTUlNRSBlLW1haWwgaGVhZGVyIGxpbmVzOgotICAgaWRlbnRpZmll ciwgY29sb24sIHZhbHVlLiBUaGUgL0FSUkFZIHN3aXRjaCBpcyB0aGUgb25seSBtZXRob2QKLSAg IGF2YWlsYWJsZSB0byBhIHNjcmlwdCB0byBwcm9jZXNzIHRoZSBzZXJ2ZXIgcmVzcG9uc2VzIGZv ciBhIFBPU1Qgb3IgUFVUCi0gICBjb21tYW5kLgotCi0gICBUaGUgSFRUUCBjb21tYW5kcyBhcmU6 Ci0KLSAgIEhUVFAgWyBzd2l0Y2hlcyBdIEdFVCByZW1vdGUtZmlsZW5hbWUgWyBsb2NhbC1maWxl bmFtZSBdCi0gICAgICAgICAgUmV0cmlldmVzIHRoZSBuYW1lZCBmaWxlLiBJZiBhIGxvY2FsLWZp bGVuYW1lIGlzIGdpdmVuLCB0aGUgZmlsZQotICAgICAgICAgIGlzIHN0b3JlZCBsb2NhbGx5IHVu ZGVyIHRoYXQgbmFtZTsgb3RoZXJ3aXNlIGl0IGlzIHN0b3JlZCB3aXRoCi0gICAgICAgICAgaXRz IG93biBuYW1lLgotCi0gICBIVFRQIFsgc3dpdGNoZXMgXSBIRUFEIHJlbW90ZS1maWxlbmFtZSBs b2NhbC1maWxlbmFtZQotICAgICAgICAgIExpa2UgR0VUIGV4Y2VwdCB3aXRob3V0IGFjdHVhbGx5 IGdldHRpbmcgdGhlIGZpbGU7IGluc3RlYWQgaXQKLSAgICAgICAgICBnZXRzIG9ubHkgdGhlIGhl YWRlcnMsIHN0b3JpbmcgdGhlbSBpbnRvIHRoZSBnaXZlbiBmaWxlLCB3aG9zZQotICAgICAgICAg IG5hbWUgbXVzdCBiZSBnaXZlbiwgb25lIGxpbmUgcGVyIGhlYWRlciBpdGVtLCBhcyBzaG93biBh Ym92ZSBpbgotICAgICAgICAgIHRoZSAvQVJSQVk6IHN3aXRjaCBkZXNjcmlwdGlvbi4KLQotICAg SFRUUCBbIHN3aXRjaGVzIF0gSU5ERVggcmVtb3RlLWRpcmVjdG9yeSBbIGxvY2FsLWZpbGVuYW1l IF0KLSAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGZpbGUgbGlzdGluZyBmb3IgdGhlIGdpdmVuIHNl cnZlciBkaXJlY3RvcnkuIE5PVEU6Ci0gICAgICAgICAgVGhpcyBjb21tYW5kIGlzIG5vdCBzdXBw b3J0ZWQgYnkgbW9zdCBXZWIgc2VydmVycy4KLQotICAgSFRUUCBbIHN3aXRjaGVzIF0gUE9TVCBb IC9NSU1FLVRZUEU6dHlwZSBdIGxvY2FsLWZpbGUgcmVtb3RlLWZpbGUKLSAgICAgICAgICBVc2Vk IHRvIHNlbmQgYSByZXNwb25zZSBhcyBpZiBpdCB3ZXJlIHNlbnQgZnJvbSBhIGZvcm0uIFRoZSBk YXRhCi0gICAgICAgICAgdG8gYmUgcG9zdGVkIG11c3QgYmUgcmVhZCBmcm9tIGEgZmlsZS4KLQot ICAgSFRUUCBbIHN3aXRjaGVzIF0gUFVUIFsgL01JTUUtVFlQRTp0eXBlIF0gbG9jYWwtZmlsZSBy ZW1vdGUtZmlsZQotICAgICAgICAgIFVwbG9hZHMgYSBsb2NhbCBmaWxlIHRvIGEgc2VydmVyIGZp bGUuCi0KLSAgIEhUVFAgWyBzd2l0Y2hlcyBdIERFTEVURSByZW1vdGUtZmlsZW5hbWUKLSAgICAg ICAgICBJbnN0cnVjdHMgdGhlIHNlcnZlciB0byBkZWxldGUgdGhlIHNwZWNpZmllZCBmaWxlbmFt ZS4KLQotMy4gVEVSTUlOQUwgQ09OTkVDVElPTgotCi0zLjEuIENPTk5FQ1QgQ29tbWFuZCBTd2l0 Y2hlcwotCi0gICBUaGUgZm9sbG93aW5nIHN3aXRjaGVzIChzZWUgWzQzNF1TZWN0aW9uIDEuNSkg d2VyZSBhZGRlZCB0byB0aGUgQ09OTkVDVAotICAgY29tbWFuZCBpbiA3LjA6Ci0KLSAgIC9RVUlF VExZCi0gICAgICAgICAgRG9uJ3QgcHJpbnQgdGhlICJDb25uZWN0aW5nIHRvLi4uIiBvciAiQmFj ayBhdC4uLiIgbWVzc2FnZXMuIENRCi0gICAgICAgICAgaXMgYW4gaW52aXNpYmxlIGNvbW1hbmQg c3lub255bSBmb3IgQ09OTkVDVCAvUVVJRVRMWS4KLQotICAgL1RSSUdHRVI6c3RyaW5nCi0gICAg ICAgICAgU3BlY2lmeSBhIHRyaWdnZXIgb3IgdHJpZ2dlcnMgKFs0MzVdU2VjdGlvbiAzLjIpIGVm ZmVjdGl2ZSBmb3IKLSAgICAgICAgICB0aGlzIENPTk5FQ1QgY29tbWFuZCBvbmx5LCB0ZW1wb3Jh cmlseSBvdmVycmlkaW5nIGFueSBjdXJyZW50Ci0gICAgICAgICAgU0VUIFRFUk1JTkFMIFRSSUdH RVIgdmFsdWVzIChbNDM2XVNlY3Rpb24gMy4yKS4KLQotICAgTm90ZTogT3RoZXIgc3dpdGNoZXMg bWlnaHQgYWxzbyBiZSBhdmFpbGFibGU7IHR5cGUgImNvbm5lY3QgPyIgZm9yIGEKLSAgIGxpc3Qs ICJoZWxwIGNvbm5lY3QiIGZvciBhIGRlc2NyaXB0aW9uIG9mIGVhY2guCi0KLTMuMi4gVHJpZ2dl cnMKLQotICAgVHJpZ2dlcnMgd2VyZSBhZGRlZCBmb3IgVU5JWCwgVk1TLCBBT1MvVlMsIGFuZCBL OTUgaW4gQy1LZXJtaXQgNy4wLgotCi0gICBTRVQgVEVSTUlOQUwgVFJJR0dFUiBzdHJpbmcKLSAg ICAgICAgICBUZWxscyBDLUtlcm1pdCB0byBsb29rIGZvciB0aGUgZ2l2ZW4gc3RyaW5nIGR1cmlu ZyBhbGwKLSAgICAgICAgICBzdWJzZXF1ZW50IENPTk5FQ1Qgc2Vzc2lvbnMsIGFuZCBpZiBzZWVu LCB0byByZXR1cm4gdG8gY29tbWFuZAotICAgICAgICAgIG1vZGUgYXV0b21hdGljYWxseSwgYXMg aWYgeW91IGhhZCBlc2NhcGVkIGJhY2sgbWFudWFsbHkuIElmIHRoZQotICAgICAgICAgIHN0cmlu ZyBpbmNsdWRlcyBhbnkgc3BhY2VzLCB5b3UgbXVzdCBlbmNsb3NlIGl0IGluIGJyYWNlcy4KLSAg ICAgICAgICBFeGFtcGxlOgotCi0gIHNldCB0ZXJtaW5hbCB0cmlnZ2VyIHtOTyBDQVJSSUVSfQot Ci0gICBDb21wYXJpc29ucyBhcmUgbWFkZSBhZnRlciBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9u LgotCi0gICBJZiBhIHN0cmluZyBpcyB0byBpbmNsdWRlIGEgbGl0ZXJhbCBicmFjZSBjaGFyYWN0 ZXIsIHByZWNlZGUgaXQgd2l0aCBhCi0gICBiYWNrc2xhc2g6Ci0KLSAgOyBNeSBtb2RlbSBhbHdh eXMgbWFrZXMgdGhpcyBub2lzZSB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGxvc3Q6Ci0gIHNldCB0 ZXJtaW5hbCB0cmlnZ2VyIHx8fHBwcFx7XHtce1x7VVVVVVVVVQotCi0gICBJZiB5b3Ugd2FudCBL ZXJtaXQgdG8gbG9vayBmb3IgbW9yZSB0aGFuIG9uZSBzdHJpbmcgc2ltdWx0YW5lb3VzbHksIHVz ZQotICAgdGhlIGZvbGxvd2luZyBzeW50YXg6Ci0KLSAgc2V0IHRlcm1pbmFsIHRyaWdnZXIge3tz dHJpbmcxfXtzdHJpbmcyfS4uLntzdHJpbmdufX0KLQotICAgSW4gdGhpcyBjYXNlLCBDLUtlcm1p dCB3aWxsIHJldHVybiB0byBjb21tYW5kIG1vZGUgYXV0b21hdGljYWxseSBpZiBhbnkKLSAgIG9m IHRoZSBnaXZlbiBzdHJpbmdzIGlzIGVuY291bnRlcmVkLiBVcCB0byA4IHN0cmluZ3MgbWF5IGJl IHNwZWNpZmllZC4KLQotICAgSWYgdGhlIG1vc3QgcmVjZW50IHJldHVybiB0byBjb21tYW5kIG1v ZGUgd2FzIGNhdXNlZCBieSBhIHRyaWdnZXIsIHRoZQotICAgbmV3IHZhcmlhYmxlLCBcdih0cmln Z2VyKSwgc2hvd3MgdGhlIHRyaWdnZXIgdmFsdWU7IG90aGVyd2lzZQotICAgXHYodHJpZ2dlcikg aXMgZW1wdHkuCi0KLSAgIFRoZSBTSE9XIFRSSUdHRVIgY29tbWFuZCBkaXNwbGF5cyB0aGUgU0VU IFRFUk1JTkFMIFRSSUdHRVIgdmFsdWVzIGFzCi0gICB3ZWxsIGFzIHRoZSBcdih0cmlnZ2VyKSB2 YWx1ZS4KLQotMy4zLiBUcmFuc3BhcmVudCBQcmludGluZwotCi0gICBBcyBub3RlZCBpbiB0aGUg bWFudWFsLCBDLUtlcm1pdCdzIENPTk5FQ1QgY29tbWFuZCBvbiBVTklYIGlzIG5vdCBhCi0gICB0 ZXJtaW5hbCBlbXVsYXRvciwgYnV0IHJhdGhlciBhICJzZW1pdHJhbnNwYXJlbnQgcGlwZSIgYmV0 d2VlbiB0aGUKLSAgIHRlcm1pbmFsIG9yIGVtdWxhdG9yIHlvdSBhcmUgdXNpbmcgdG8gYWNjZXNz IEMtS2VybWl0LCBhbmQgdGhlIHJlbW90ZQotICAgaG9zdCB0byB3aGljaCBDLUtlcm1pdCBpcyBj b25uZWN0ZWQuIFRoZSAic2VtaXRyYW5zcGFyZW50IiBxdWFsaWZpZXIgaXMKLSAgIGJlY2F1c2Ug b2YgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiBhcyB3ZWxsIGFzIHNldmVyYWwgYWN0aW9ucyB0 YWtlbgotICAgYnkgdGhlIGVtdWxhdG9yIGluIHJlc3BvbnNlIHRvIHRoZSBjaGFyYWN0ZXJzIG9y IHN0cmluZ3MgdGhhdCBwYXNzCi0gICB0aHJvdWdoIGl0LCBzdWNoIGFzIEFQQ3MsIEtlcm1pdCBw YWNrZXRzIChhdXRvZG93bmxvYWQpLCB0cmlnZ2VycywgZXRjLgotCi0gICBUaGUgVU5JWCB2ZXJz aW9uIG9mIEMtS2VybWl0IDcuMCBhZGRzIGFub3RoZXIgc3VjaCBhY3Rpb246IFRyYW5zcGFyZW50 Ci0gICBwcmludGluZywgYWxzbyBjYWxsZWQgQ29udHJvbGxlciBwcmludGluZyAoYXMgZGlzdGlu Y3QgZnJvbSBBdXRvcHJpbnQKLSAgIG9yIGxpbmUgb3Igc2NyZWVuIHByaW50KS4gSXQgaXMgaW50 ZW5kZWQgbWFpbmx5IGZvciB1c2Ugb24gVU5JWAotICAgd29ya3N0YXRpb24gY29uc29sZXMgKGFz IG9wcG9zZWQgdG8gcmVtb3RlIGxvZ2lucyksIGJ1dCB3aXRoIHNvbWUgY2FyZQotICAgY2FuIGFs c28gYmUgdXNlZCB3aGVuIGFjY2Vzc2luZyBDLUtlcm1pdCByZW1vdGVseS4KLQotICAgVHJhbnNw YXJlbnQgcHJpbnRpbmcgaXMgcmVsYXRlZCB0byBBUEMgYnkgc2hhcmluZyBDLUtlcm1pdCdzIGJ1 aWx0LWluCi0gICBBTlNJIGVzY2FwZS1zZXF1ZW5jZSBwYXJzZXIgdG8gZGV0ZWN0ICJwcmludGVy IG9uIiBhbmQgInByaW50ZXIgb2ZmIgotICAgc2VxdWVuY2VzIGZyb20gdGhlIGhvc3QuIFdoZW4g dGhlIHByaW50ZXItb24gc2VxdWVuY2UgaXMgcmVjZWl2ZWQsIGFsbAotICAgc3Vic2VxdWVudCBh cnJpdmluZyBjaGFyYWN0ZXJzIC0tIGluY2x1ZGluZyBOVUwsIGNvbnRyb2wgY2hhcmFjdGVycywK LSAgIGFuZCBlc2NhcGUgc2VxdWVuY2VzIC0tIGFyZSBzZW50IHRvIHRoZSBTRVQgUFJJTlRFUiBk ZXZpY2UgaW5zdGVhZCBvZgotICAgdG8geW91ciBzY3JlZW4gdW50aWwgdGhlIHByaW50ZXItb2Zm IHNlcXVlbmNlIGlzIHJlY2VpdmVkLCBvciB5b3UKLSAgIGVzY2FwZSBiYWNrLCB3aGljaGV2ZXIg aGFwcGVucyBmaXJzdC4gVGhlc2UgYnl0ZXMgYXJlIG5vdCB0cmFuc2xhdGVkIG9yCi0gICBtb2Rp ZmllZCBvciBmaWx0ZXJlZCBpbiBhbnkgd2F5IGJ5IEtlcm1pdCAoZXhjZXB0IGZvciBwb3NzaWJs eQotICAgc3RyaXBwaW5nIG9mIHRoZSA4dGggYml0LCBhcyBub3RlZCBiZWxvdyksIGJ1dCBpZiBm aWx0ZXJpbmcgb3IKLSAgIHRyYW5zbGF0aW9uIGlzIGRlc2lyZWQsIHRoaXMgY2FuIGJlIGFjY29t cGxpc2hlZCBieSB5b3VyIFNFVCBQUklOVEVSCi0gICBzZWxlY3Rpb24gKGUuZy4gYnkgY2hvb3Np bmcgYSBwaXBlbGluZSBvZiBmaWx0ZXJzKS4KLQotICAgQnkgZGVmYXVsdCwgeW91ciBTRVQgUFJJ TlRFUiBkZXZpY2UgaXMgeW91ciBkZWZhdWx0IFVOSVggcHJpbnRlciwgYnV0Ci0gICBpdCBjYW4g YWxzbyBiZSBhIGZpbGUsIGEgY29tbWFuZCwgb3IgdGhlIG51bGwgZGV2aWNlICh3aGljaCBjYXVz ZXMgYWxsCi0gICBwcmludGVyIG1hdGVyaWFsIHRvIGJlIGRpc2NhcmRlZCkuIFNlZSBbNDM3XVVz aW5nIEMtS2VybWl0LCAybmQgRWQuLAotICAgcC40MSBmb3IgZGV0YWlscy4KLQotICAgVHJhbnNw YXJlbnQgcHJpbnRpbmcgaXMgY29udHJvbGxlZCBieSB0aGUgY29tbWFuZDoKLQotICAgU0VUIFRF Uk1JTkFMIFBSSU5UIHsgT04sIE9GRiB9Ci0gICAgICAgICAgV2hlbiBPTiwgdHJhbnNwYXJlbnQt cHJpbnQgc2VxdWVuY2VzIGFyZSBvYmV5ZWQsIGFuZCBwcmludGluZwotICAgICAgICAgIG9jY3Vy cyBvbiB0aGUgc3lzdGVtIHdoZXJlIEMtS2VybWl0IGlzIHJ1bm5pbmcuIFdoZW4gT0ZGLAotICAg ICAgICAgIHRyYW5zcGFyZW50IHByaW50IHNlcXVlbmNlcyBhcmUgaWdub3JlZCBhbmQgcGFzc2Vk IHRocm91Z2ggdG8KLSAgICAgICAgICB5b3VyIGFjdHVhbCB0ZXJtaW5hbCBvciBlbXVsYXRvciwg YWxvbmcgd2l0aCB0aGUgZGF0YSB0aGV5Ci0gICAgICAgICAgZW5jbG9zZS4gT0ZGIGlzIHRoZSBk ZWZhdWx0LCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIKLSAgICAgICAgICBDLUtlcm1p dCByZWxlYXNlcy4gQXMgbm90ZWQgaW4gdGhlIG1hbnVhbCwgd2hlbiB0aGUgY3VycmVudCBTRVQK LSAgICAgICAgICBQUklOVEVSIGRldmljZSBpcyBhIGZpbGUsIHRyYW5zcGFyZW50LXByaW50IG1h dGVyaWFsIGlzIGFwcGVuZGVkCi0gICAgICAgICAgdG8gaXQ7IHRoZSBmaWxlIGlzIG5vdCBvdmVy d3JpdHRlbi4KLQotICAgU0VUIFRFUk1JTkFMIEJZVEVTSVpFIHsgNywgOCB9Ci0gICBTRVQgUEFS SVRZIHsgRVZFTiwgT0RELCBNQVJLLCBTUEFDRSwgTk9ORSB9Ci0gICAgICAgICAgSWYgdGhlIHRl cm1pbmFsIGJ5dGVzaXplIGlzIDcsIG9yIFBBUklUWSBpcyBub3QgTk9ORSwgdGhlIDh0aAotICAg ICAgICAgIGJpdCBvZiBlYWNoIGJ5dGUgaXMgc3RyaXBwZWQgcHJpb3IgdG8gcHJpbnRpbmcuCi0K LSAgIFRoZSB0cmFuc3BhcmVudC1wcmludCBlc2NhcGUgc2VxdWVuY2VzIGFyZToKLQotICAgPEVT Qz5bNWkKLSAgICAgICAgICBQcmludGVyIE9uLiBTZW5kIGFsbCBzdWJzZXF1ZW50IGluY29taW5n IGJ5dGVzIHRvIHRoZSBwcmludGVyCi0gICAgICAgICAgd2l0aG91dCBhbnkga2luZCBvZiBmaWx0 ZXJpbmcsIHRyYW5zbGF0aW9uLCBvciBhbHRlcmF0aW9uLiBOb3RlOgotICAgICAgICAgIDxFU0M+ IHN0YW5kcyBmb3IgQVNDSUkgY2hhcmFjdGVyIG51bWJlciAyNyAoZGVjaW1hbCksIEVzY2FwZS4K LQotICAgPEVTQz5bNGkKLSAgICAgICAgICBQcmludGVyIE9mZi4gUmVzdW1lIGRpc3BsYXlpbmcg aW5jb21pbmcgYnl0ZXMgb24gdGhlIHNjcmVlbi4KLQotICAgVGhlc2UgYXJlIHRoZSBzYW1lIHNl cXVlbmNlcyB1c2VkIGJ5IERFQyBWVDEwMCBhbmQgaGlnaGVyIHRlcm1pbmFscyBhbmQKLSAgIG90 aGVyIEFOU0kgWDMuNjQgYW5kIElTTyA2NDI5IGNvbXBhdGlibGUgdGVybWluYWxzLiBUaGVyZSBp cyBubwotICAgcHJvdmlzaW9uIGZvciBzZWxlY3Rpbmcgb3RoZXIgcHJpbnRlci1jb250cm9sIHNl cXVlbmNlcy4KLQotICAgUmVzdHJpY3Rpb25zOgotCi0gICAgMS4gWW91IG11c3QgU0VUIFRFUk0g VFJBTlNQQVJFTlQtUFJJTlQgT04gYmVmb3JlIHlvdSBjYW4gdXNlIHRoaXMKLSAgICAgICBmZWF0 dXJlLgotICAgIDIuIE9ubHkgdGhlIDctYml0IGZvcm1zIG9mIHRoZSBlc2NhcGUgc2VxdWVuY2Vz IGFyZSBzdXBwb3J0ZWQuIFRoZQotICAgICAgIDgtYml0IENTSSBDMSBjb250cm9sIGlzIG5vdCBy ZWNvZ25pemVkLgotICAgIDMuIEF1dG9wcmludCBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSB0aGlz IHJlcXVpcmVzIGEgZnVsbC1mbGVkZ2VkCi0gICAgICAgdGVybWluYWwgZW11bGF0b3Igd2l0aCBk aXJlY3QgYWNjZXNzIHRvIHRoZSBzY3JlZW4uCi0gICAgNC4gVGhlIHN0YXJ0LXByaW50IGFuZCBz dG9wLXByaW50IHNlcXVlbmNlcyBwYXNzIHRocm91Z2ggdG8gdGhlIHNjcmVlbgotICAgICAgICh0 aGVyZSBpcyBubyB3YXkgdG8gYXZvaWQgdGhpcyB3aXRob3V0IGNhdXNpbmcgdW5hY2NlcHRhYmxl IGRlbGF5cwotICAgICAgIG9yIGRlYWRsb2NrcyBpbiBDT05ORUNUIG1vZGUpLiBUaHVzIGlmIHlv dXIgdGVybWluYWwgb3IgZW11bGF0b3IKLSAgICAgICBhbHNvIHN1cHBvcnRzIHRyYW5zcGFyZW50 IHByaW50aW5nIHZpYSB0aGVzZSBzYW1lIHNlcXVlbmNlcywgYW4KLSAgICAgICBlbXB0eSBmaWxl IHdpbGwgYmUgc2VudCB0byBpdHMgcHJpbnRlci4gTm9ybWFsbHkgdGhpcyBoYXMgbm8KLSAgICAg ICBlZmZlY3QuCi0KLSAgIFBvaW50ICg0KSBpcyBzaW1pbGFyIHRvIHRoZSBzaXR1YXRpb24gd2l0 aCBhdXRvZG93bmxvYWQgYW5kIEFQQyAtLSB3aGVuCi0gICB5b3UgaGF2ZSBzZXZlcmFsIEtlcm1p dCBjbGllbnRzIGluIGEgY2hhaW4sIHlvdSBzaG91bGQgdGFrZSBjYXJlIHRoYXQKLSAgIHRoZXNl IGZlYXR1cmVzIGFyZSBlbmFibGVkIGluIG9ubHkgb25lIG9mIHRoZW0uCi0KLSAgIEV4YW1wbGUg MToKLQotICBzZXQgcHJpbnRlciB7fGxwciAtUGxhc2VyfSAgOyBTcGVjaWZ5IHRoZSBwcmludGVy IChpZiBub3QgZGVmYXVsdCkuCi0gIHNldCB0ZXJtIHByaW50IG9uICAgICAgICAgICA7IEVuYWJs ZSB0cmFuc3BhcmVudCBwcmludGluZy4KLSAgc2V0IHRlcm0gYnl0ZSA4ICAgICAgICAgICAgIDsg RW5hYmxlIDgtYml0IGNoYXJhY3RlcnMuCi0gIGNvbm5lY3QgICAgICAgICAgICAgICAgICAgICA7 IEVudGVyIENPTk5FQ1QgbW9kZS4KLQotICAgRXhhbXBsZSAyOgotCi0gIHNldCBwcmludGVyIC9o b21lL3VzZXJzL29sZ2EvcHJpbnRlci5sb2cgIDsgU2VuZCBwcmludGVyIG1hdGVyaWFsIHRvIGEg ZmlsZS4KLQotICAgRXhhbXBsZSAzOgotCi0gIHNldCBwcmludGVyIHt8IGdyZXAgLXYgXlJlY2Vp dmVkIHwgbHByfSAgIDsgRmlsdGVyIG91dCBzb21lIGxpbmVzCi0KLSAgIFRoZW4gdXNlICJwY3By aW50IiBvciAidnRwcmludCIgY29tbWFuZHMgb24gdGhlIGhvc3QgdG8gaW5pdGlhdGUKLSAgIHRy YW5zcGFyZW50IHByaW50IG9wZXJhdGlvbnMuIFNlZSBbNDM4XVVzaW5nIEMtS2VybWl0LCAybmQg RWQuLCBwLjQwNgotICAgZm9yIGRldGFpbHMuCi0KLSAgIEhlcmUgaXMgYSBzYW1wbGUgInBjcHJp bnQiIHNoZWxsIHNjcmlwdCBmb3IgVU5JWDoKLQotICAjIS9iaW4vc2gKLSAgZWNobyAtbiAnPEVT Qz5bNWknCi0gIGlmIFsgJCMgLWVxIDAgXTsgdGhlbgotICAgIGNhdAotICBlbHNlCi0gICAgY2F0 ICQqCi0gIGZpCi0gIGVjaG8gLW4gJzxGRj48RVNDPls0aScKLSAgIyAoZW5kKQotCi0gICAoUmVw bGFjZSAiPEVTQz4iIGJ5IHRoZSBhY3R1YWwgQVNDSUkgRXNjYXBlIGNoYXJhY3RlciBhbmQgIjxG Rj4iIGJ5IHRoZQotICAgQVNDSUkgRm9ybWZlZWQgY2hhcmFjdGVyKS4KLQotICAgSWYgeW91IGFs d2F5cyB3YW50IHRyYW5zcGFyZW50IHByaW50aW5nIGVuYWJsZWQsIHB1dCAic2V0IHRlcm0gcHJp bnQKLSAgIG9uIiBpbiB5b3VyIEMtS2VybWl0IGN1c3RvbWl6YXRpb24gZmlsZSAofi8ubXlrZXJt cmMgaW4gVU5JWCkuIFRoZSAic2V0Ci0gICB0ZXJtIGJ5dGVzaXplIiBzZWxlY3Rpb24sIGhvd2V2 ZXIsIGlzIGEgcHJvcGVydHkgb2YgZWFjaCBzZXBhcmF0ZQotICAgY29ubmVjdGlvbi4KLQotMy40 LiBCaW5hcnkgYW5kIFRleHQgU2Vzc2lvbiBMb2dzCi0KLSAgIEMtS2VybWl0IDcuMCBjb3JyZWN0 cyBhbiBvdmVyc2lnaHQgaW4gZWFybGllciByZWxlYXNlcywgaW4gd2hpY2ggYmluYXJ5Ci0gICBz ZXNzaW9uIGxvZ3MgKFNFVCBTRVNTSU9OLUxPRyBCSU5BUlkpIHRyYW5zbGF0ZWQgY2hhcmFjdGVy IHNldHMgYW5kCi0gICBwZXJmb3JtZWQgdmFyaW91cyBmb3JtYXR0aW5nIHRyYW5zZm9ybWF0aW9u cyAoZS5nLiAibmV3bGluZSBtb2RlIikKLSAgIGJlZm9yZSB3cml0aW5nIGNoYXJhY3RlcnMgdG8g dGhlIHNlc3Npb24gbG9nLiBJbiBDLUtlcm1pdCA3LjAsCi0gICBiaW5hcnktbW9kZSBzZXNzaW9u IGxvZ2dpbmcgd3JpdGVzIGNoYXJhY3RlcnMgYXMgdGhleSBjb21lIGluLCBiZWZvcmUKLSAgIGFu eXRoaW5nIChvdGhlciB0aGF0IHBhcml0eS1iaXQgc3RyaXBwaW5nKSBpcyBkb25lIHRvIHRoZW0u IFRleHQtbW9kZQotICAgc2Vzc2lvbiBsb2dnaW5nIHJlY29yZHMgdGhlIGNoYXJhY3RlcnMgYWZ0 ZXIgcHJvY2Vzc2luZy4KLQotNC4gRklMRSBUUkFOU0ZFUgotCi0gICBFdmVyeSBmaWxlIGlzIHRy YW5zZmVycmVkIGVpdGhlciBpbiB0ZXh0IG1vZGUgKHdoaWNoIGltcGxpZXMKLSAgIHJlY29yZC1m b3JtYXQgYW5kIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24pIG9yIGJpbmFyeSBtb2RlIChpbiB3 aGljaAotICAgZWFjaCBieXRlIGlzIHNlbnQgbGl0ZXJhbGx5IHdpdGhvdXQgYW55IGtpbmQgb2Yg Y29udmVyc2lvbikuIFRoZSBtb2RlCi0gICBpbiB3aGljaCBhIGZpbGUgaXMgdHJhbnNmZXJyZWQg aXMgY29udHJvbGxlZCBieSAoYSkgdGhlIGRlZmF1bHQgbW9kZSwKLSAgIGluIHRoZSBhYnNlbmNl IG9mIGFueSBvdGhlciBpbmRpY2F0aW9uczsgKGIpIHRoZSBTRVQgRklMRSBUWVBFIGNvbW1hbmQ7 Ci0gICAoYykgdmFyaW91cyBhdXRvbWF0aWMgbWVjaGFuaXNtcyBiYXNlZCBvbiBjbGllbnQvc2Vy dmVyIG5lZ290aWF0aW9ucywKLSAgIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiBvciBmaWxlbmFtZSBw YXR0ZXJucywgZXRjLgotCi0gICBUaGUgZGVmYXVsdCBGSUxFIFRZUEUgd2FzIGNoYW5nZWQgZnJv bSBURVhUIHRvIEJJTkFSWSBpbiBDLUtlcm1pdCA3LjAKLSAgIGJlY2F1c2U6Ci0KLSAgICAgKiBU cmFuc2ZlcnJpbmcgYSB0ZXh0IGZpbGUgaW4gYmluYXJ5IG1vZGUgZG9lcyBsZXNzIGRhbWFnZSB0 aGFuCi0gICAgICAgdHJhbnNmZXJyaW5nIGEgYmluYXJ5IGZpbGUgaW4gdGV4dCBtb2RlLgotICAg ICAqIE9ubHkgYmluYXJ5LW1vZGUgdHJhbnNmZXJzIGNhbiBiZSByZWNvdmVyZWQgZnJvbSB0aGUg cG9pbnQgb2YKLSAgICAgICBmYWlsdXJlLgotICAgICAqIFRoZSBhdXRvbWF0aWMgdHJhbnNmZXIt bW9kZSBtZWNoYW5pc21zIHN3aXRjaCB0byB0ZXh0IG1vZGUgb24gYQotICAgICAgIHBlci1maWxl IGJhc2lzIGFueXdheSwgc28gb25seSB0aG9zZSBmaWxlcyB0aGF0IGFyZSBub3QgY292ZXJlZCBi eQotICAgICAgIHRoZSBhdXRvbWF0aWMgbWVjaGFuaXNtcyBhcmUgYWZmZWN0ZWQuCi0gICAgICog QWxsIGZpbGUgdHJhbnNmZXJzIG9uIHRoZSBXZWIgYXJlIGRvbmUgaW4gYmluYXJ5IG1vZGUsIHNv IHBlb3BsZQotICAgICAgIGFyZSBhY2N1c3RvbWVkIHRvIGl0IGFuZCBleHBlY3QgaXQuCi0KLTQu MC4gQlVHIEZJWEVTLCBNSU5PUiBDSEFOR0VTLCBBTkQgQ0xBUklGSUNBVElPTlMKLQotNC4wLjAu IEZpbGVuYW1lcyB3aXRoIFNwYWNlcwotCi0gICBGaWxlbmFtZXMgdGhhdCBjb250YWluIHNwYWNl cyBhcmUgYSBtYWpvciBudWlzYW5jZSB0byBhIHByb2dyYW0gbGlrZQotICAgS2VybWl0LCB3aG9z ZSBjb21tYW5kIGxhbmd1YWdlIGlzIGxpbmUtIGFuZCB3b3JkLW9yaWVudGVkLCBpbiB3aGljaAot ICAgd29yZHMgYXJlIHNlcGFyYXRlZCBieSBzcGFjZXMgYW5kIGEgZmlsZW5hbWUgaXMgYXNzdW1l ZCB0byBiZSBhICJ3b3JkIi4KLSAgIEluIGdlbmVyYWwgKHVubGVzcyBub3RlZCBvdGhlcndpc2Ug aW4gdGhlIGRlc2NyaXB0aW9uIG9mIGEgcGFydGljdWxhcgotICAgY29tbWFuZCksIHRoZXJlIGlz IG9ubHkgb25lIHdheSB0byByZWZlciB0byBzdWNoIGZpbGVzIGluIEtlcm1pdAotICAgY29tbWFu ZHMsIGFuZCB0aGF0IGlzIHRvIGVuY2xvc2UgdGhlIG5hbWUgaW4gYnJhY2VzOgotCi0gIHNlbmQg e3RoaXMgZmlsZX0KLQotICAgVGVsbHMgS2VybWl0IHRvIHNlbmQgdGhlIGZpbGUgd2hvc2UgbmFt ZSBpcyAidGhpcyBmaWxlIiAodHdvIHdvcmRzLCBubwotICAgcXVvdGVzKS4gT2YgY291cnNlLCB2 YXJpb3VzIGNpcmN1bWxvY3V0aW9ucyBhcmUgYWxzbyBwb3NzaWJsZSwgc3VjaCBhczoKLQotICBk ZWZpbmUgXCVhIHRoaXMgZmlsZQotICBzZW5kIFwlYQotCi0gICBCVVQsIHBlcmhhcHMgY29udHJh cnkgdG8gZXhwZWN0YXRpb24sIHlvdSBjYW4ndCB1c2UgIlwzMiIgdG8gcmVwcmVzZW50Ci0gICB0 aGUgc3BhY2U6Ci0KLSAgc2VuZCB0aGlzXDMyZmlsZQotCi0gICBkb2VzIG5vdCB3b3JrLiBXaHk/ IEJlY2F1c2UgdGhlIEtlcm1pdCBwYXJzZXIsIHdoaWNoIG11c3Qgd29yayBvbiBtYW55Ci0gICBv cGVyYXRpbmcgc3lzdGVtcyBpbmNsdWRpbmcgV2luZG93cywgaGFzIG5vIHdheSBvZiBrbm93aW5n IHdoYXQgeW91Ci0gICBtZWFuIGJ5ICJ0aGlzXDMyZmlsZSIuIERvIHlvdSBtZWFuIGEgZmlsZSB3 aG9zZSBuYW1lIGlzICJ0aGlzIGZpbGUiIGluCi0gICB0aGUgY3VycmVudCBkaXJlY3Rvcnk/IE9y IGRvIHlvdSBtZWFuIGEgZmlsZSB3aG9zZSBuYW1lIGlzICIzMmZpbGUiIGluCi0gICB0aGUgInRo aXMiIHN1YmRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCBkaXJlY3Rvcnk/IEd1ZXNzaW5nIHdvbid0 IGRvCi0gICBoZXJlOyBLZXJtaXQgbXVzdCBiZWhhdmUgY29uc2lzdGVudGx5IGFuZCBkZXRlcm1p bmlzdGljYWxseSBpbiBhbGwKLSAgIGNhc2VzIG9uIGFsbCBwbGF0Zm9ybXMuCi0KLSAgIE5vdGUg dGhhdCB5b3UgY2FuJ3QgdXNlIEVzYyBvciBUYWIgd2l0aGluIHsuLi59IGZvciBmaWxlbmFtZQot ICAgY29tcGxldGlvbiwgb3IgcXVlc3Rpb24gbWFyayB0byBnZXQgYSBmaWxlbmFtZSBsaXN0LiBI b3dldmVyLCB5b3UgY2FuCi0gICBpbmNsdWRlIHdpbGRjYXJkczsgZm9yIGV4YW1wbGU6Ci0KLSAg c2VuZCB7KiAqfQotCi0gICBzZW5kcyBhbGwgZmlsZXMgd2hvc2UgbmFtZSBjb250YWlucyBhIHNw YWNlLgotCi0gICBBbGwgdGhpbmdzIGNvbnNpZGVyZWQsIGl0IGlzIGJlc3QgdG8gYXZvaWQgc3Bh Y2VzIGluIGZpbGUgYW5kIGRpcmVjdG9yeQotICAgbmFtZXMgaWYgeW91IGNhbi4gQWxzbyBzZWUg WzQzOV1TZWN0aW9uIDUuNCBvbiB0aGlzIHRvcGljLgotCi00LjAuMS4gUGFja2V0IG91dCBvZiBX aW5kb3cKLQotICAgQy1LZXJtaXQgNi4wIGNvdWxkIHNlbmQgcGFja2V0cyAib3V0IG9mIHdpbmRv dyIgaWYgdGhlIHdpbmRvdyBzaXplIHdhcwotICAgZ3JlYXRlciB0aGFuIDEgYW5kIEFDS3MgaGFk IGFycml2ZWQgb3V0IG9mIG9yZGVyLiBGaXhlZCBpbiA2LjEuCi0KLTQuMC4yLiBNT1ZFIGFmdGVy IEFERCBTRU5ELUxJU1QKLQotICAgQUREIFNFTkQtTElTVCBmb2xsb3dlZCBieSBNT1ZFIGRpZCBu b3QgZGVsZXRlIG9yaWdpbmFsIGZpbGVzOyBmaXhlZCBpbgotICAgNi4xLiBDYXJyaWVyIGxvc3Mg d2FzIG5vdCBkZXRlY3RlZCBkdXJpbmcgdHJhbnNmZXI7IGluIDcuMCBDLUtlcm1pdAotICAgY2hl Y2tzIGZvciB0aGlzIChidXQgcmVzdWx0cyBjYW4gbm90IGJlIGd1YXJhbnRlZWQpLiBJbiBhbnkg Y2FzZSwgdGhlCi0gICBwcm90b2NvbCB3aWxsIGV2ZW50dWFsbHkgdGltZSBvdXQgaWYgdGhlIGNv bm5lY3Rpb24gaXMgbG9zdC4KLQotNC4wLjMuIEdFVCBhbmQgUkVDRUlWRSBBcy1OYW1lcwotCi0g ICBJbiA1QSgxOTApIHRocm91Z2ggNi4wLjE5MiwgdGhlIEdFVCBhbmQgUkVDRUlWRSBhcy1uYW1l IGRpZCBub3QKLSAgIHByb3Blcmx5IG92ZXJyaWRlIHRoZSBSRUNFSVZFIFBBVEhOQU1FUyBzZXR0 aW5nLiBJbiA3LjAgaXQgZG9lcy4KLQotNC4wLjQuIE5ldyBCcmllZiBTdGF0aXN0aWNzIExpc3Rp bmcKLQotICAgVmVyc2lvbiA3LjAgYWRkcyBhIC9CUklFRiBzd2l0Y2ggdG8gdGhlIFNUQVRJU1RJ Q1MgY29tbWFuZCwgdG8gZGlzcGxheQotICAgYSBzaG9ydCBmaWxlLXRyYW5zZmVyIHN0YXRpc3Rp Y3MgcmVwb3J0LiAvQlJJRUYgaXMgbm93IHRoZSBkZWZhdWx0LiBVc2UKLSAgIC9WRVJCT1NFIHRv IHNlZSB0aGUgZnVsbCBkaXNwbGF5LCB3aGljaCBpcyBhYm91dCAyNSBsaW5lcyBsb25nLgotCi00 LjAuNS4gSW1wcm92ZWQgRkFTVCBDb21tYW5kCi0KLSAgIFRoZSBwcmVpbnN0YWxsZWQgZGVmaW5p dGlvbiBvZiB0aGUgRkFTVCBtYWNybyBkaWQgbm90IHRha2UgZW5vdWdoCi0gICBmYWN0b3JzIGlu dG8gYWNjb3VudC4gTm93IGl0IHNldHMgcGFja2V0IGxlbmd0aHMgYW5kIHdpbmRvdyBzaXplcwot ICAgYXBwcm9wcmlhdGUgdG8gdGhlIGNvbmZpZ3VyYXRpb24uIEZ1cnRoZXJtb3JlLCBpbiBJUklY IG9ubHksIGl0IG1pZ2h0Ci0gICByZXN0cmljdCB0aGUgU0VORCBwYWNrZXQgbGVuZ3RoIHRvIDQw MDAsIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIHRoZQotICAgSVJJWCBUZWxuZXQgc2VydmVyLCBk ZXBlbmRpbmcgb24gdGhlIElSSVggdmVyc2lvbiAoc2VlIFs0NDBdY2t1YndyLnR4dCwKLSAgIElS SVggc2VjdGlvbikuIFRvIHNlZSB0aGUgYnVpbHQtaW4gZGVmaW5pdGlvbiBvZiB0aGUgRkFTVCBt YWNybywgdHlwZQotICAgInNob3cgbWFjcm8gZmFzdCIuIFRvIGNoYW5nZSBpdCwgc2ltcGx5IGRl ZmluZSBpdCB0byBiZSB3aGF0ZXZlciB5b3UKLSAgIHdhbnQgLS0gaXQncyBqdXN0IGEgbWFjcm8s IGxpa2UgYW55IG90aGVyLgotCi00LjAuNi4gVGhlIFNFVCBTRU5EIEJBQ0tVUCBDb21tYW5kCi0K LSAgIFZlcnNpb24gNy4wIGFkZHMgU0VUIFNFTkQgQkFDS1VQIHsgT04sIE9GRiB9LiBUaGlzIHRl bGxzIHdoZXRoZXIgYmFja3VwCi0gICBmaWxlcyBzaG91bGQgYmUgc2VudC4gQmFja3VwIGZpbGVz IGFyZSB0aGUgb25lcyBjcmVhdGVkIGJ5IEtlcm1pdCAoYW5kCi0gICBFTUFDUywgYW5kIHBvc3Np Ymx5IG90aGVyIGFwcGxpY2F0aW9ucykgdG8gcHJlc2VydmUgb2xkIGNvcGllcyBvZiBmaWxlcwot ICAgd2hlbiBjcmVhdGluZyBuZXcgb25lcyB3aXRoIHRoZSBzYW1lIG5hbWUuIEtlcm1pdCBkb2Vz IHRoaXMgd2hlbgotICAgcmVjZWl2aW5nIGEgZmlsZSBhbmQgaXRzIEZJTEUgQ09MTElTSU9OIHNl dHRpbmcgaXMgQkFDS1VQIChvciBSRU5BTUUsCi0gICBpbiB3aGljaCBjYXNlIGl0IHRoZSBuZXcg ZmlsZSBnZXRzIHRoZSBiYWNrdXAgbmFtZSkuIE9uIG1vc3QgcGxhdGZvcm1zLAotICAgdGhlIGJh Y2t1cCBuYW1lIGlzIGZvcm1lZCBieSBhZGRpbmc6Ci0KLSAgLn5ufgotCi0gICB0byB0aGUgZW5k IG9mIHRoZSBmaWxlbmFtZSwgd2hlcmUgIm4iIGlzIGEgbnVtYmVyLiBGb3IgZXhhbXBsZSwgaWYg dGhlCi0gICBvcmlnaW5hbCBmaWxlIGlzIG9vZmEudHh0LCBhIGJhY2t1cCBmaWxlIG1pZ2h0IGJl IGNhbGxlZDoKLQotICBvb2ZhLnR4dC5+MX4KLQotICAgKG9yIG9vZmEudHh0Ln4yfiwgZXRjKS4g SWYgeW91IFNFVCBTRU5EIEJBQ0tVUCBPRkYsIHRoaXMgdGVsbHMgS2VybWl0Ci0gICBub3QgdG8g c2VuZCBmaWxlcyB0aGF0IGhhdmUgYmFja3VwIG5hbWVzLiBOb3JtYWxseSwgU0VUIFNFTkQgQkFD S1VQIGlzCi0gICBPTiAoYXMgc2hvd24gYnkgU0hPVyBQUk9UT0NPTCksIGFuZCBiYWNrdXAgZmls ZXMgYXJlIHNlbnQgaWYgdGhlaXIKLSAgIG5hbWVzIG1hdGNoIHRoZSBTRU5EIGZpbGUgc3BlY2lm aWNhdGlvbi4KLQotICAgQWxzbyBzZWUgUFVSR0UsIFNFVCBGSUxFIENPTExJU0lPTiwgU0VORCAv Tk9CQUNLVVAsIERJUkVDVE9SWQotICAgL1tOT11CQUNLVVAuCi0KLTQuMC43LiBUaGUgU0VUIHsg U0VORCwgUkVDRUlWRSB9IFZFUlNJT04tTlVNQkVSUyBDb21tYW5kCi0KLSAgIFZNUyBPbmx5LiBO b3JtYWxseSB3aGVuIHNlbmRpbmcgZmlsZXMsIFZNUyBDLUtlcm1pdCBzdHJpcHMgdGhlIHZlcnNp b24KLSAgIG51bWJlci4gRm9yIGV4YW1wbGUsIGlmIHRoZSBmaWxlIGlzIEZPTy5CQVI7MzQsIHRo ZSBuYW1lIGlzIHNlbnQgYXMKLSAgIEZPTy5CQVIgKHdpdGhvdXQgdGhlICI7MzQiKS4gSWYgeW91 IHdhbnQgdG8ga2VlcCB2ZXJzaW9uIG51bWJlcnMgb24KLSAgIHdoZW4gc2VuZGluZyBmaWxlcywg dXNlIFNFVCBTRU5EIFZFUlNJT04tTlVNQkVSUyBPTi4gVGhlIGVmZmVjdCBkZXBlbmRzCi0gICBv biB0aGUgcmVjZWl2ZXIuCi0KLSAgIE5vcm1hbGx5IHdoZW4gcmVjZWl2aW5nIGZpbGVzLCBhbmQg YW4gaW5jb21pbmcgZmlsZW5hbWUgaW5jbHVkZXMgYQotICAgVk1TLXN0eWxlIHZlcnNpb24gbnVt YmVyIChzdWNoIGFzIEZPTy5CQVI7MzQpIFZNUyBDLUtlcm1pdCBzdHJpcHMgaXQKLSAgIGJlZm9y ZSB0cnlpbmcgdG8gY3JlYXRlIHRoZSBuZXcgZmlsZTsgdGhpcyB3YXkgdGhlIG5ldyBmaWxlIHJl Y2VpdmVzCi0gICB0aGUgbmV4dCBoaWdoZXN0IHZlcnNpb24gbnVtYmVyIGluIHRoZSBjdXN0b21h cnkgbWFubmVyIGZvciBWTVMuIElmIHlvdQotICAgd2FudCB2ZXJzaW9uIG51bWJlcnMgb24gaW5j b21pbmcgZmlsZW5hbWVzIHRvIGJlIHVzZWQgaW4gY3JlYXRpbmcgdGhlCi0gICBuZXcgZmlsZXMs IHVzZSBTRVQgUkVDRUlWRSBWRVJTSU9OLU5VTUJFUlMgT04uCi0KLSAgIE5vcm1hbGx5IHRoZXNl IGNvbW1hbmRzIHdvdWxkIGJlIGVmZmVjdGl2ZSBvbmx5IHdoZW4gVk1TIEMtS2VybWl0IGlzCi0g ICBleGNoYW5naW5nIGZpbGVzIHdpdGggYSBub24tVk1TIEtlcm1pdCBwcm9ncmFtLCBzaW5jZSBW TVMtdG8tVk1TCi0gICB0cmFuc2ZlcnMgdXNlIGxhYmVsZWQgbW9kZSB1bmxlc3MgeW91IGhhdmUg Z29uZSBvdXQgb2YgeW91ciB3YXkgdG8KLSAgIGRlZmVhdCBpdC4KLQotICAgRXhhbXBsZTogWW91 IHdhbnQgdG8gc2VuZCBhbGwgdmVyc2lvbnMgb2YgYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50Ci0g ICBkaXJlY3RvcnkgZnJvbSBhIFZNUyBDLUtlcm1pdCBjbGllbnQgdG8gYSBVTklYIEMtS2VybWl0 IHNlcnZlci4gVXNlOgotCi0gIHNldCBzZW5kIHZlcnNpb24tbnVtYmVycyBvbgotICBzZW5kICou KjsqCi0KLSAgIFRoZSByZXN1bHRpbmcgVW5peCBmaWxlcyB3aWxsIGhhdmUgVk1TLXN0eWxlIHZl cnNpb24gbnVtYmVycyBhcyBwYXJ0IG9mCi0gICB0aGVpciBuYW1lLCBmb3IgZXhhbXBsZSAiZm9v LmJhcjsxIiwgImZvby5iYXI7MiIsIGV0Yy4KLQotICAgTm93IHN1cHBvc2UgeW91IHdhbnQgdG8g c2VuZCB0aGVzZSBmaWxlcyBmcm9tIFVuaXggdG8gYW5vdGhlciBWTVMKLSAgIHN5c3RlbSBhbmQg cHJlc2VydmUgdGhlIHZlcnNpb24gbnVtYmVycy4gQWdhaW4gd2UgaGF2ZSBhIFVuaXggQy1LZXJt aXQKLSAgIHNlcnZlciBhbmQgVk1TIEMtS2VybWl0IGNsaWVudC4gR2l2ZSB0aGVzZSBjb21tYW5k cyB0byB0aGUgY2xpZW50OgotCi0gIHNldCByZWNlaXZlIHZlcnNpb24tbnVtYmVycyBvbgotICBn ZXQgKgotCi00LjAuOC4gVGhlIFNFVCB7IFNFTkQsIFJFQ0VJVkUgfSB7IE1PVkUtVE8sIFJFTkFN RS1UTyB9IENvbW1hbmRzCi0KLSAgIFRoZXNlIGNvbW1hbmRzIGFyZSBwZXJzaXN0ZW50IGdsb2Jh bCB2ZXJzaW9ucyBvZiB0aGUgL01PVkUtVE86IGFuZAotICAgL1JFTkFNRS1UTzogc3dpdGNoZXMg b2YgdGhlIFNFTkQsIEdFVCwgYW5kIFJFQ0VJVkUgY29tbWFuZHMuIFRoZXkKLSAgIHNob3VsZCBu b3JtYWxseSBiZSB1c2VkIG9ubHkgd2hlbiBzZXR0aW5nIHVwIGEgZGVkaWNhdGVkCi0gICB0cmFu c2FjdGlvbi1wcm9jZXNzaW5nIGFwcGxpY2F0aW9uLCBpbiB3aGljaCBlYWNoIGZpbGUgaXMgdG8g YmUgbW92ZWQKLSAgIG9yIHJlbmFtZWQgaW1tZWRpYXRlbHkgYWZ0ZXIsIGFuZCBvbmx5IGlmLCBp dCBpcyB0cmFuc2ZlcnJlZAotICAgc3VjY2Vzc2Z1bGx5LCBzbyB0aGF0IChmb3IgZXhhbXBsZSkg YW4gaW5kZXBlbmRlbnQsIGNvbmN1cnJlbnQgcHJvY2VzcwotICAgY2FuIG5vdGljZSB3aGVuIG5l dyBmaWxlcyBhcHBlYXIgYW5kIHByb2Nlc3MgdGhlbSBpbW1lZGlhdGVseSB3aXRob3V0Ci0gICBo YXZpbmcgdG8gZ3Vlc3Mgd2hldGhlciB0aGV5IGFyZSBjb21wbGV0ZS4KLQotNC4wLjkuIFNFVCBG SUxFIElOQ09NUExFVEUgQVVUTwotCi0gICBTRVQgRklMRSBJTkNPTVBMRVRFIHsgS0VFUCwgRElT Q0FSRCB9LCB3aGljaCB0ZWxscyB3aGV0aGVyIHRvIGtlZXAgb3IKLSAgIGRpc2NhcmQgaW5jb21w bGV0ZWx5IHJlY2VpdmVkIGZpbGVzLCBoYXMgYSBuZXcgb3B0aW9uLCBBVVRPLCB3aGljaCBpcwot ICAgYWxzbyB0aGUgZGVmYXVsdC4gSXQgbWVhbnMgS0VFUCB0aGUgaW5jb21wbGV0ZSBmaWxlIGlm IHRoZSB0cmFuc2ZlciBpcwotICAgaW4gYmluYXJ5IG1vZGUsIG90aGVyd2lzZSBESVNDQVJEIGl0 LiBUaGlzIHJlZHVjZXMgdGhlIGNoYW5jZXMgdGhhdCBhCi0gICBzdWJzZXF1ZW50IHJlY292ZXJ5 IG9wZXJhdGlvbiAoUkVTRU5ELCBSRUdFVCwgZXRjKSBjb3VsZCBwcm9kdWNlIGEKLSAgIGNvcnJ1 cHQgZmlsZSwgc2luY2UgcmVjb3Zlcnkgd29ya3Mgb25seSBmb3IgYmluYXJ5LW1vZGUgdHJhbnNm ZXJzLgotCi00LjEuIEZJTEUtVFJBTlNGRVIgRklMRU5BTUUgVEVNUExBVEVTCi0KLSAgIEZpbGUt dHJhbnNmZXIgZmlsZW5hbWUgdGVtcGxhdGVzIGFsbG93IGZpbGVzIHRvIGJlIHJlbmFtZWQKLSAg IGF1dG9tYXRpY2FsbHkgYnkgdGhlIGZpbGUgc2VuZGVyLCB0aGUgcmVjZWl2ZXIsIG9yIGJvdGgs IGR1cmluZwotICAgdHJhbnNmZXIgb2YgZ3JvdXBzIG9mIGZpbGVzLgotCi00LjEuMS4gVGVtcGxh dGVzIGluIHRoZSBBcy1OYW1lCi0KLSAgIFByaW9yIHRvIEMtS2VybWl0IDYuMSBhbmQgS2VybWl0 IDk1IDEuMS4xMiB0aGUgb25seSBvcHRpb25zIHRoYXQgY291bGQKLSAgIGJlIHVzZWQgdG8gYWZm ZWN0IHRoZSBuYW1lcyBvZiBmaWxlcyBiZWluZyB0cmFuc2ZlcnJlZCB3ZXJlIFNFVAotICAgRklM RU5BTUVTIHsgTElURVJBTCwgQ09OVkVSVEVEIH0gYW5kIFNFVCB7IFNFTkQsIFJFQ0VJVkUgfSBQ QVRITkFNRVMgewotICAgT04sIE9GRiB9LCBwbHVzIHRoZSAiYXMtbmFtZSIgZmVhdHVyZSBvZiB0 aGUgU0VORCAoTU9WRSwgZXRjKSBhbmQKLSAgIFJFQ0VJVkUgY29tbWFuZHMuCi0KLSAgIFByZXZp b3VzbHksIHRoZSBhcy1uYW1lIGNvdWxkIGJlIHVzZWQgb25seSBmb3IgYSBzaW5nbGUgZmlsZS4g Rm9yCi0gICBleGFtcGxlOgotCi0gIFNFTkQgRk9PIEJBUgotCi0gICB3b3VsZCBzZW5kIHRoZSBm aWxlIEZPTyB1bmRlciB0aGUgbmFtZSBCQVIsIGJ1dDoKLQotICBTRU5EICouVFhUIGFueXRoaW5n Ci0KLSAgIHdhcyBub3QgYWxsb3dlZCwgc2luY2UgaXQgd291bGQgZ2l2ZSB0aGUgc2FtZSBuYW1l IHRvIGVhY2ggZmlsZSB0aGF0Ci0gICB3YXMgc2VudC4gV2hlbiByZWNlaXZpbmc6Ci0KLSAgUkVD RUlWRSBGT08KLQotICAgd291bGQgcmVuYW1lIHRoZSBmaXJzdCBpbmNvbWluZyBmaWxlIHRvIEZP TyBiZWZvcmUgc3RvcmluZyBpdCBvbiB0aGUKLSAgIGRpc2ssIGJ1dCBzdWJzZXF1ZW50IGZpbGVz IHdvdWxkIG5vdCBiZSByZW5hbWVkIHRvIEZPTywgc2luY2UgdGhpcwotICAgd291bGQgcmVzdWx0 IGluIG92ZXJ3cml0aW5nIHRoZSBzYW1lIGZpbGUgcmVwZWF0ZWRseS4gSW5zdGVhZCwgdGhleQot ICAgd2VyZSBzdG9yZWQgdW5kZXIgdGhlIG5hbWVzIHRoZXkgYXJyaXZlZCB3aXRoLgotCi0gICBC ZWdpbm5pbmcgaW4gQy1LZXJtaXQgNi4xIGFuZCBLZXJtaXQgOTUgMS4xLjEyLCBpdCBpcyBwb3Nz aWJsZSB0bwotICAgc3BlY2lmeSBhcy1uYW1lcyBpbiBTRU5ELCBSRUNFSVZFLCBhbmQgcmVsYXRl ZCBjb21tYW5kcyBldmVuIGZvciBmaWxlCi0gICBncm91cHMuIFRoaXMgaXMgYWNjb21wbGlzaGVk IGJ5IHVzaW5nIHJlcGxhY2VtZW50IHZhcmlhYmxlcyBpbiB0aGUKLSAgIGFzLW5hbWUsIGFsb25n IHdpdGggb3B0aW9uYWwgbWF0ZXJpYWwgc3VjaCBjaGFyYWN0ZXItc3RyaW5nIGZ1bmN0aW9ucwot ICAgYW5kL29yIGNvbnN0YW50IHN0cmluZ3MuIEFuIGFzLW5hbWUgY29udGFpbmluZyByZXBsYWNl bWVudCB2YXJpYWJsZXMgaXMKLSAgIGNhbGxlZCBhIGZpbGVuYW1lIHRlbXBsYXRlLgotCi0gICBU aGUga2V5IHRvIGZpbGVuYW1lIHRlbXBsYXRlcyBpcyB0aGUgbmV3IHZhcmlhYmxlOgotCi0gIFx2 KGZpbGVuYW1lKQotCi0gICBEdXJpbmcgZmlsZSB0cmFuc2ZlciBpdCBpcyByZXBsYWNlZCBieSB0 aGUgbmFtZSBvZiBlYWNoIGZpbGUgY3VycmVudGx5Ci0gICBiZWluZyB0cmFuc2ZlcnJlZCAoYWZ0 ZXIgdHJhbnNmZXIsIGl0IGlzIHRoZSBuYW1lIG9mIHRoZSBsYXN0IGZpbGUKLSAgIHRyYW5zZmVy cmVkKS4KLQotICAgU28sIGZvciBleGFtcGxlOgotCi0gIHNlbmQgKi50eHQgXHYoZmlsZW5hbWUp Lm5ldwotCi0gICBzZW5kcyBlYWNoIGZpbGUgd2l0aCBpdHMgb3duIG5hbWUsIGJ1dCB3aXRoICIu bmV3IiBhcHBlbmRlZCB0byBpdC4gT2YKLSAgIGNvdXJzZSBpZiB0aGUgbmFtZSBhbHJlYWR5IGNv bnRhaW5zIHBlcmlvZHMsIHRoaXMgY291bGQgY29uZnVzZSB0aGUKLSAgIGZpbGUgcmVjZWl2ZXIs IHNvIHlvdSBjYW4gYWxzbyBhY2hpZXZlIGZhbmNpZXIgZWZmZWN0cyB3aXRoCi0gICBjb25zdHJ1 Y3Rpb25zIGxpa2U6Ci0KLSAgc2VuZCAqLnR4dCBcZnJlcGxhY2UoXHYoZmlsZW5hbWUpLC4sXyku bmV3Ci0KLSAgIHdoaWNoIHJlcGxhY2VzIGFsbCBwZXJpb2RzIGluIHRoZSBvcmlnaW5hbCBmaWxl bmFtZSBieSB1bmRlcnNjb3JlcywgYW5kCi0gICB0aGVuIGFwcGVuZHMgIi5uZXciIHRvIHRoZSBy ZXN1bHQuIFNvLCBmb3IgZXhhbXBsZSwgb29mYS50eHQgd291bGQgYmUKLSAgIHNlbnQgYXMgb29m YV90eHQubmV3LgotCi0gICBBbm90aGVyIG5ldyB2YXJpYWJsZSB0aGF0IGlzIHVzZWZ1bCBpbiB0 aGlzIHJlZ2FyZCBpcyBcdihmaWxlbnVtYmVyKSwKLSAgIHdoaWNoIGlzIHRoZSBvcmRpbmFsIG51 bWJlciBvZiB0aGUgY3VycmVudCBmaWxlIGluIHRoZSBmaWxlIGdyb3VwLCBzbwotICAgeW91IGNh biBhbHNvOgotCi0gIHNlbmQgKi50eHQgRklMRVxmbHBhZChcdihmaWxlbnVtKSwyLDApCi0KLSAg IHJlc3VsdGluZyBpbiBhIHNlcmllcyBvZiBmaWxlcyBjYWxsZWQgRklMRTAwLCBGSUxFMDEsIEZJ TEUwMiwgZXRjLiAoQXQKLSAgIHRoZSBlbmQgb2YgdGhlIHRyYW5zZmVyLCBcdihmaWxlbnVtKSB0 ZWxscyB0aGUgbnVtYmVyIG9mIGZpbGVzIHRoYXQKLSAgIHdlcmUgdHJhbnNmZXJyZWQpLgotCi0g ICBJZiB5b3Ugc3BlY2lmeSBhIGNvbnN0YW50IGFzLW5hbWUgd2hlbiBzZW5kaW5nIGEgZmlsZSBn cm91cDoKLQotICBzZW5kICoudHh0IHRoaXNuYW1lb25seQotCi0gICBLZXJtaXQgY29tcGxhaW5z IGFuZCBhc2tzIHlvdSB0byBpbmNsdWRlIHJlcGxhY2VtZW50IHZhcmlhYmxlcyBpbiB0aGUKLSAg IGFzLW5hbWUuIFlvdSBzaG91bGQgZ2VuZXJhbGx5IHVzZSBcdihmaWxlbmFtZSkgb3IgXHYoZmls ZW51bWJlcikgZm9yCi0gICB0aGlzIHB1cnBvc2UsIHNpbmNlIG90aGVyIHZhcmlhYmxlcyAod2l0 aCB0aGUgcG9zc2libGUgZXhjZXB0aW9uIG9mCi0gICBkYXRlL3RpbWUgcmVsYXRlZCB2YXJpYWJs ZXMpIGRvIG5vdCBjaGFuZ2UgZnJvbSBvbmUgZmlsZSB0byB0aGUgbmV4dC4KLSAgIEJ1dCBLZXJt aXQgYWNjZXB0cyBhbnkgYXMtbmFtZSBhdCBhbGwgdGhhdCBjb250YWlucyBhbnkga2luZCBvZgot ICAgdmFyaWFibGVzIGZvciBmaWxlIGdyb3VwLCBldmVuIGlmIHRoZSB2YXJpYWJsZSB3aWxsIG5v dCBjaGFuZ2UuIFNvOgotCi0gIHNlbmQgKi50eHQgXCVhCi0KLSAgIGlzIGFjY2VwdGVkLCBidXQg YWxsIGZpbGVzIGFyZSBzZW50IHdpdGggdGhlIHNhbWUgbmFtZSAodGhlIHZhbHVlIG9mCi0gICBc JWEsIGlmIGl0IGhhcyBvbmUgYW5kIGl0IGlzIGNvbnN0YW50KS4gSWYgdGhlIHZhcmlhYmxlIGhh cyBubyB2YWx1ZSBhdAotICAgYWxsLCB0aGUgZmlsZXMgYXJlIHNlbnQgdW5kZXIgdGhlaXIgb3du IG5hbWVzLgotCi0gICBPZiBjb3Vyc2UsIHRoZSB2YWx1ZSBvZiBcJWEgaW4gdGhlIHByZXZpb3Vz IGV4YW1wbGUgbmVlZCBub3QgYmUKLSAgIGNvbnN0YW50OgotCi0gIGRlZmluZSBcJWEgRklMRVxm bHBhZChcdihmaWxlbnVtKSwyLDApX2F0X1x2KHRpbWUpCi0gIHNlbmQgKi50eHQgXCVhCi0KLSAg IFRoZSBSRUNFSVZFIGNvbW1hbmQsIHdoZW4gZ2l2ZW4gd2l0aG91dCBhbiBhcy1uYW1lLCBiZWhh dmVzIGFzIGFsd2F5cywKLSAgIHN0b3JpbmcgYWxsIGluY29taW5nIGZpbGVzIHVuZGVyIHRoZSBu YW1lcyB0aGV5IGFycml2ZSB3aXRoLCBzdWJqZWN0IHRvCi0gICBTRVQgRklMRSBOQU1FIGFuZCBT RVQgUkVDRUlWRSBQQVRITkFNRVMgbW9kaWZpY2F0aW9ucyAoWzQ0MV1TZWN0aW9uCi0gICA0LjEw KS4KLQotICAgSG93ZXZlciwgd2hlbiBhbiBhcy1uYW1lIGlzIGdpdmVuIGluIHRoZSBSRUNFSVZF IGNvbW1hbmQsIGl0IGlzIGFwcGxpZWQKLSAgIHRvIGFsbCBpbmNvbWluZyBmaWxlcyByYXRoZXIg dGhhbiB0byBqdXN0IHRoZSBmaXJzdC4gSWYgaXQgZG9lcyBub3QKLSAgIGNvbnRhaW4gcmVwbGFj ZW1lbnQgdmFyaWFibGVzLCB0aGVuIHRoZSBjdXJyZW50IEZJTEUgQ09MTElTSU9OIHNldHRpbmcK LSAgIGdvdmVybnMgdGhlIHJlc3VsdC4gRm9yIGV4YW1wbGU6Ci0KLSAgcmVjZWl2ZSBmb28KLQot ICAgd2lsbCByZXN1bHQgaW4gaW5jb21pbmcgZmlsZXMgbmFtZWQgZm9vLCBmb28ufjF+LCBmb28u fjJ+LCBhbmQgc28gb24sCi0gICB3aXRoIHRoZSBkZWZhdWx0IEZJTEUgQ09MTElTSU9OIHNldHRp bmcgb2YgQkFDS1VQLiBJZiBpdCBkb2VzIGNvbnRhaW4KLSAgIHJlcGxhY2VtZW50IHZhcmlhYmxl cywgb2YgY291cnNlIHRoZXkgYXJlIHVzZWQuCi0KLSAgIFdoZW4gcmVjZWl2aW5nIGZpbGVzLCB0 aGUgXHYoZmlsZW5hbWUpIHZhcmlhYmxlIHJlZmVycyB0byB0aGUgbmFtZSB0aGF0Ci0gICB3YXMg cmVjZWl2ZWQgaW4gdGhlIGluY29taW5nIGZpbGUtaGVhZGVyIHBhY2tldCwgQkVGT1JFIGFueSBw cm9jZXNzaW5nCi0gICBieSBTRVQgRklMRSBOQU1FUyBvciBTRVQgUkVDRUlWRSBQQVRITkFNRVMu IFNpbmNlIHRoZSBmaWxlbmFtZXMgaW4KLSAgIGZpbGUtaGVhZGVyIHBhY2tldHMgYXJlIHVzdWFs bHkgaW4gdXBwZXJjYXNlLCB5b3Ugd291bGQgbmVlZCB0byBjb252ZXJ0Ci0gICB0aGVtIGV4cGxp Y2l0bHkgaWYgeW91IHdhbnQgdGhlbSBpbiBsb3dlcmNhc2UsIGUuZy46Ci0KLSAgcmVjZWl2ZSBc Zmxvd2VyKFx2KGZpbGVuYW1lKSkubmV3Ci0KLTQuMS4yLiBUZW1wbGF0ZXMgb24gdGhlIENvbW1h bmQgTGluZQotCi0gICBPbiB0aGUgY29tbWFuZC1saW5lLCB1c2UgdGVtcGxhdGVzIGFzIHNob3du IGFib3ZlIGFzIHRoZSAtYSBvcHRpb24KLSAgIGFyZ3VtZW50LCBiZWFyaW5nIGluIG1pbmQgdGhl IHByb3BlbnNpdHkgb2YgVU5JWCBhbmQgcGVyaGFwcyBvdGhlcgotICAgc2hlbGxzIHRvIHRyZWF0 IGJhY2tzbGFzaCBhcyBhIHNoZWxsIGVzY2FwZSBjaGFyYWN0ZXIuIFNvIGluIFVOSVggKGZvcgot ICAgZXhhbXBsZSk6Ci0KLSAga2VybWl0IC1zIG9vZmEuKiAtYSB4LlxcdihmaWxlbnVtKQotCi0g ICBCeSB0aGUgd2F5LCB0aGlzIHJlcHJlc2VudHMgYSBjaGFuZ2UgZnJvbSA2LjAgYW5kIGVhcmxp ZXIgcmVsZWFzZXMgaW4KLSAgIHdoaWNoIHRoZSBhcy1uYW1lICgtYSBhcmd1bWVudCBvciBvdGhl cndpc2UpIHdhcyBub3QgZXZhbHVhdGVkIGJ5IHRoZQotICAgY29tbWFuZCBwYXJzZXIuIFRodXMs IGZvciBleGFtcGxlLCBpbiBWTVMgKHdoZXJlIHRoZSBzaGVsbCBkb2VzIG5vdAotICAgY2FyZSBh Ym91dCBiYWNrc2xhc2hlcyksIGl0IHdhcyBwb3NzaWJsZSB0bzoKLQotICBrZXJtaXQgLXMgb29m YS50eHQgLWEgYzpcdG1wXG9vZmEudHh0Ci0KLSAgIE5vdyBiYWNrc2xhc2hlcyBpbiB0aGUgYXMt bmFtZSBtdXN0IGJlIHF1b3RlZCBub3Qgb25seSBmb3IgdGhlIHNoZWxsCi0gICAoaWYgbmVjZXNz YXJ5KSBidXQgYWxzbyBmb3IgS2VybWl0IGl0c2VsZjoKLQotICBrZXJtaXQgLXMgb29mYS50eHQg LWEgYzpcXHRtcFxcb29mYS50eHQgICAgICA7IEtlcm1pdCBvbmx5Ci0gIGtlcm1pdCAtcyBvb2Zh LnR4dCAtYSBjOlxcXFx0bXBcXFxcb29mYS50eHQgIDsgU2hlbGwgYW5kIEtlcm1pdAotCi0gICBZ b3UgY2FuIGFsc28gdXNlIHRoZSBcZmxpdGVyYWwoKSBmdW5jdGlvbiBmb3IgdGhpczoKLQotICBr ZXJtaXQgLXMgb29mYS50eHQgLWEgXGZsaXRlcmFsKGM6XHRtcFxvb2ZhLnR4dCkgICAgICA7IEtl cm1pdCBvbmx5Ci0gIGtlcm1pdCAtcyBvb2ZhLnR4dCAtYSBcXGZsaXRlcmFsKGM6XFx0bXBcXG9v ZmEudHh0KSAgIDsgU2hlbGwgYW5kIEtlcm1pdAotCi00LjEuMy4gUG9zdC1UcmFuc2ZlciBSZW5h bWluZwotCi0gICBGaWxlbmFtZSB0ZW1wbGF0ZXMgYXJlIG5vdyBhbHNvIHVzZWZ1bCBpbiBTRVQg eyBTRU5ELCBSRUNFSVZFIH0KLSAgIFJFTkFNRS1UTyBhbmQgaW4gdGhlIC9SRU5BTUUtVE86IHN3 aXRjaCwgdGhhdCBjYW4gYmUgZ2l2ZW4gdG8gdGhlIFNFTkQsCi0gICBHRVQsIG9yIFJFQ0VJVkUg Y29tbWFuZHM7IHRoaXMgaXMgc2ltaWxhciB0byBhbiBhcy1uYW1lLCBidXQgaXMKLSAgIGVmZmVj dGl2ZSBvbiBhIHBlci1maWxlIGJhc2lzIGlmIGFuZCBvbmx5IGlmIHRoZSBmaWxlIHdhcyB0cmFu c2ZlcnJlZAotICAgc3VjY2Vzc2Z1bGx5LgotCi0gICBNT1ZFLVRPIGFuZCBSRU5BTUUtVE8gYWRk cmVzcyBhIHJlcXVpcmVtZW50IGNvbW1vbmx5IHN0YXRlZCBmb3IKLSAgIHRyYW5zYWN0aW9uIHBy b2Nlc3NpbmcgYW5kIHNpbWlsYXIgc3lzdGVtcy4gU3VwcG9zZSwgZm9yIGV4YW1wbGUsIGEKLSAg IGNlbnRyYWwgc3lzdGVtICJYIiBhY2NlcHRzIGNvbm5lY3Rpb25zIGZyb20gbXVsdGlwbGUgY2xp ZW50cwotICAgc2ltdWx0YW5lb3VzbHk7IGEgcHJvY2VzcyBvbiBYIHdhaXRzIGZvciBhIGZpbGUg dG8gYXBwZWFyIGFuZCB0aGVuCi0gICBwcm9jZXNzZXMgdGhlIGZpbGUuIFRoaXMgcHJvY2VzcyBt dXN0IGhhdmUgYSB3YXkgb2Yga25vd2luZyB3aGVuIHRoZQotICAgZmlsZSBoYXMgYmVlbiBjb21w bGV0ZWx5IGFuZCBzdWNjZXNzZnVsbHkgdHJhbnNmZXJyZWQgYmVmb3JlIGl0IHN0YXJ0cwotICAg dG8gcHJvY2VzcyBpdC4gVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGVhc2lseSB1c2luZyBDLUtl cm1pdCdzIFNFVCB7Ci0gICBTRU5ELCBSRUNFSVZFIH0geyBNT1ZFLVRPLCBSRU5BTUUtVE8gfSBj b21tYW5kIG9yIC9NT1ZFLVRPOiBvcgotICAgL1JFTkFNRS1UTzogc3dpdGNoZXMsIGRlc2NyaWJl ZCBpbiBbNDQyXVNlY3Rpb25zIDQuNy4xIHRocm91Z2gKLSAgIFs0NDNdNC43LjMuCi0KLSAgIEhl cmUncyBhbiBleGFtcGxlIGZvciB0aGUgY2xpZW50IHNpZGUsIGluIHdoaWNoIGZpbGVzIHRvIGJl IHNlbnQgYXJlCi0gICBwbGFjZWQgaW4gYSBjZXJ0YWluIGRpcmVjdG9yeSAoL3Vzci9vbGdhL3Rv c2VuZCBpbiB0aGlzIGV4YW1wbGUpIGJ5Ci0gICBhbm90aGVyIHByb2Nlc3Mgd2hlbiB0aGV5IGFy ZSByZWFkeSB0byBnby4gVGhpcyBtaWdodCBiZSBpbiBhIGhvc3BpdGFsCi0gICBvciBiaWcgZG9j dG9yJ3Mgb2ZmaWNlLCB3aGVyZSBtZWRpY2FsIGluc3VyYW5jZSBjbGFpbXMgYXJlIGVudGVyZWQg YXQgYQotICAgbnVtYmVyIG9mIHdvcmtzdGF0aW9ucywgYW5kIHRoZW4gZGVwb3NpdGVkIGluIHRo ZSAidG9zZW5kIiBkaXJlY3RvcnksCi0gICBmcm9tIHdoaWNoIHRoZXkgYXJlIHNlbnQgdG8gYSBj bGFpbXMgY2xlYXJpbmdob3VzZS4gV2UgYXNzdW1lIHRoZQotICAgY29ubmVjdGlvbiBpcyBhbHJl YWR5IG1hZGUgYW5kIGEgS2VybWl0IHNlcnZlciBpcyBvbiB0aGUgb3RoZXIgZW5kLgotCi0gIGxv Y2FsIHNyY2RpciBmaW5kaXIgICAgICAgICAgICAgIDsgRGVjbGFyZSBsb2NhbCAoYXV0b21hdGlj KSB2YXJpYWJsZXMKLSAgYXNzaWduIHNyY2RpciAvdXNyL29sZ2EvdG9zZW5kICAgOyBMb2NhbCBz b3VyY2UgZGlyZWN0b3J5IChmaWxlcyB0byBzZW5kKQotICBhc3NpZ24gZmluZGlyIC91c3Ivb2xn YS9zZW50ICAgICA7IFdoZXJlIHRvIG1vdmUgZmlsZXMgYWZ0ZXIgdGhleSBhcmUgc2VudAotICBs b2cgdHJhbnNhY3Rpb25zICAgICAgICAgICAgICAgICA7IEtlZXAgYSBsb2cgb2YgdHJhbnNmZXJz Ci0gIGNkIFxtKHNyY2RpcikgICAgICAgICAgICAgICAgICAgIDsgQ2hhbmdlIHRvIHRoZSBzb3Vy Y2UgZGlyZWN0b3J5Ci0gIHdoaWxlIHRydWUgeyAgICAgICAgICAgICAgICAgICAgIDsgTG9vcCBm b3JldmVyLi4uCi0gICAgICBzZW5kIC9tb3ZlLXRvOlxtKGZpbmRpcikgKiAgIDsgU2VuZCBhbGwg ZmlsZXMKLSAgICAgIHNsZWVwIDYwICAgICAgICAgICAgICAgICAgICAgOyBTbGVlcCBhIG1pbnV0 ZQotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IEdvIGJhY2sgYW5kIGRvIGl0 IGFnYWluCi0KLSAgIE5vdGUgaG93IHNpbXBsZSB0aGlzIGlzLiBPbmNlIGVhY2ggZmlsZSBpcyBz ZW50LCBpdCBpcyBtb3ZlZCBzbyBpdAotICAgd29uJ3QgYmUgc2VudCBhZ2FpbiAoeW91IGNvdWxk IGFsc28gdXNlIFNFTkQgL1JFTkFNRS1UTzogb3IgZXZlbiBTRU5ECi0gICAvREVMRVRFKS4gSWYg YSB0cmFuc2ZlciBmYWlscywgdGhlIGZpbGUgaXMgbm90IG1vdmVkIGFuZCBzbyB3ZSB0cnkKLSAg IGFnYWluIHRvIHNlbmQgaXQgbmV4dCB0aW1lIGFyb3VuZC4gSWYgdGhlcmUgYXJlIG5vIGZpbGVz IHRvIHNlbmQsIHRoZQotICAgU0VORCBjb21tYW5kIGRvZXMgbm90aGluZyBidXQgYSBtZXNzYWdl IGlzIHByaW50ZWQ7IHlvdSBjYW4gYXZvaWQgdGhlCi0gICBtZXNzYWdlIGJ5IGNoZWNraW5nIGZp cnN0IHRvIHNlZSBpZiBhbnkgZmlsZXMgYXJlIGluIHRoZSBkaXJlY3Rvcnk6Ci0KLSAgd2hpbGUg dHJ1ZSB7ICAgICAgICAgICAgICAgICAgICAgOyBMb29wIGZvcmV2ZXIuLi4KLSAgICAgIGlmID4g XGZmaWxlcygqKSAwIC0gICAgICAgICAgOyBJZiB0aGVyZSBhcmUgYW55IGZpbGVzCi0gICAgICAg IHNlbmQgL21vdmUtdG86XG0oZmluZGlyKSAqIDsgc2VuZCB0aGVtLgotICAgICAgc2xlZXAgNjAg ICAgICAgICAgICAgICAgICAgICA7IFNsZWVwIGEgbWludXRlLgotICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7IEdvIGJhY2sgYW5kIGRvIGl0IGFnYWluLgotCi0gICBJdCdzIGV2 ZW4gc2ltcGxlciBvbiB0aGUgc2VydmVyIHNpZGUgKGhlcmUgYWdhaW4gd2UgYXNzdW1lIHRoZQot ICAgY29ubmVjdGlvbiBpcyBhbHJlYWR5IGluIHBsYWNlKToKLQotICBsb2NhbCByY3ZkaXIgZmlu ZGlyICAgICAgICAgICAgICA7IERlY2xhcmUgbG9jYWwgKGF1dG9tYXRpYykgdmFyaWFibGVzCi0g IGFzc2lnbiByY3ZkaXIgL3Vzci9pdmFuL3RtcCAgICAgIDsgVGVtcG9yYXJ5IHJlY2VpdmluZyBk aXJlY3RvcnkKLSAgYXNzaWduIGZpbmRpciAvdXNyL2l2YW4vbmV3ICAgICAgOyBXaGVyZSB0byBt b3ZlIGZpbGVzIGFmdGVyIHJlY2VwdGlvbgotICBsb2cgdHJhbnNhY3Rpb25zICAgICAgICAgICAg ICAgICA7IEtlZXAgYSBsb2cgb2YgdHJhbnNmZXJzCi0gIGNkIFxtKHJjdmRpcikgICAgICAgICAg ICAgICAgICAgIDsgQ2hhbmdlIHRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5Ci0gIHNldCByZWNlaXZl IG1vdmUtdG8gXG0oZmluZGlyKSAgIDsgRGVjbGFyZSBtb3ZlLXRvIGRpcmVjdG9yeS4KLSAgc2Vy dmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBFbnRlciBzZXJ2ZXIgbW9kZS4KLQotICAg QSBzZXBhcmF0ZSBwcm9jZXNzIChlLmcuIHRoZSBtZWRpY2FsIGNsYWltLWZvcm0gZGVjb2Rlcikg Y2FuIGxvb2sgZm9yCi0gICBmaWxlcyBhcHBlYXJpbmcgaW4gdGhlIC91c3IvaXZhbi9uZXcgZGly ZWN0b3J5IGFuZCBwcm9jZXNzIHRoZW0gd2l0aAotICAgZXZlcnkgY29uZmlkZW5jZSB0aGF0IHRo ZXkgaGF2ZSBiZWVuIGNvbXBsZXRlbHkgcmVjZWl2ZWQuCi0KLSAgIE5vdGUgdGhhdCB0aGUgdXNl IG9mIE1PVkUtVE8gY2FuIHJlc3VsdCBpbiBtb3ZlZCBmaWxlcyBvdmVyd3JpdGluZyBvbmUKLSAg IGFub3RoZXIgKHRoZSBhcHBsaWNhdGlvbiB3b3VsZCBub3JtYWxseSBhdm9pZCB0aGlzIGJ5IGFz c2lnbmluZyBlYWNoCi0gICB0cmFuc2FjdGlvbiBhIHVuaXF1ZSwgZS5nLiBiYXNlZCBvbiBjdXN0 b21lciBudW1iZXIgYW5kIGNsYWltIG51bWJlcikuCi0gICBCdXQgaWYgZmlsZW5hbWUgY29sbGlz aW9ucyBhcmUgYSBwb3NzaWJpbGl0eSBpbiB5b3VyIGFwcGxpY2F0aW9uLAotICAgUkVOQU1FLVRP IG1pZ2h0IGJlIGEgYmV0dGVyIGNob2ljZTsgeW91IGNhbiB1c2UgYW55IHZhcmlhYmxlcyB5b3Ug bGlrZQotICAgaW4gdGhlIHRlbXBsYXRlIHRvIGVuc3VyZSB1bmlxdWVuZXNzIG9mIHRoZSBSRU5B TUUtVE8gZmlsZW5hbWU7IGZvcgotICAgZXhhbXBsZToKLQotICBTRVQgUkVDRUlWRSBSRU5BTUUt VE8gXHYoZmlsZW5hbWUpX1x2KG5kYXRlKV9cdihudGltZSlfXHYodXNlcmlkKV9cdihwaWQpCi0K LTQuMi4gRklMRS1UUkFOU0ZFUiBQSVBFUyBBTkQgRklMVEVSUwotCi00LjIuMS4gSU5UUk9EVUNU SU9OCi0KLSAgIEJlZ2lubmluZyBpbiBDLUtlcm1pdCA2LjEgYW5kIEtlcm1pdCA5NSAxLjEuMTIs IGl0IGlzIHBvc3NpYmxlIHRvIHNlbmQKLSAgIGZyb20gYSBjb21tYW5kLCBvciAicGlwZSIsIGFz IHdlbGwgYXMgZnJvbSBhIGZpbGUsIGFuZCB0byByZWNlaXZlIHRvIGEKLSAgIHBpcGUgb3IgY29t bWFuZC4gSW4gYSB0eXBpY2FsIGV4YW1wbGUsIHdlIG1pZ2h0IHdhbnQgdG8gdHJhbnNmZXIgYW4K LSAgIGVudGlyZSBkaXJlY3RvcnkgdHJlZSBmcm9tIG9uZSBVTklYIHN5c3RlbSB0byBhbm90aGVy IChidXQgd2l0aG91dAotICAgdXNpbmcgdGhlIG1ldGhvZHMgZGVzY3JpYmVkIGluIFs0NDRdU2Vj dGlvbnMgNC4zICwgWzQ0NV00LjEwLAotICAgWzQ0Nl00LjExLCBhbmQgWzQ0N100LjE1KS4gV2Ug Y291bGQgZG8gdGhpcyBpbiBtdWx0aXBsZSBzdGVwcyBhcwotICAgZm9sbG93czoKLQotICAxLiBD cmVhdGUgYSB0YXIgYXJjaGl2ZSBvZiB0aGUgZGVzaXJlZCBkaXJlY3RvcnkgdHJlZQotICAyLiBD b21wcmVzcyB0aGUgdGFyIGFyY2hpdmUKLSAgMy4gVHJhbnNmZXIgaXQgaW4gYmluYXJ5IG1vZGUg dG8gdGhlIG90aGVyIGNvbXB1dGVyCi0gIDQuIERlY29tcHJlc3MgaXQKLSAgNS4gRXh0cmFjdCB0 aGUgZGlyZWN0b3J5IHRyZWUgZnJvbSB0aGUgdGFyIGFyY2hpdmUKLQotICAgQnV0IHRoaXMgaXMg aW5jb252ZW5pZW50IGFuZCBpdCByZXF1aXJlcyBhIHRlbXBvcmFyeSBmaWxlLCB3aGljaCBtaWdo dAotICAgYmUgbGFyZ2VyIHRoYW4gd2UgaGF2ZSByb29tIGZvci4KLQotICAgVGhlIG5ldyBwaXBl LXRyYW5zZmVyIGZlYXR1cmUgbGV0cyB5b3UgZG8gc3VjaCB0aGluZ3MgaW4gYSBzaW5nbGUgc3Rl cCwKLSAgIGFuZCB3aXRob3V0IGludGVybWVkaWF0ZSBmaWxlcy4KLQotICAgQWRkaXRpb25hbCBu ZXcgZmVhdHVyZXMsIGFsc28gZGlzY3Vzc2VkIGhlcmUsIGxldCB5b3Ugc3BlY2lmeSBwcmUtIGFu ZAotICAgcG9zdC0gcHJvY2Vzc2luZyBmaWx0ZXJzIGZvciBvdXRib3VuZCBhbmQgaW5jb21pbmcg ZmlsZXMsIGFuZCBnaXZlIHlvdQotICAgYSB3YXkgdG8gaW5zZXJ0IHRoZSBvdXRwdXQgZnJvbSBz aGVsbCBvciBzeXN0ZW0gY29tbWFuZHMgaW50byBDLUtlcm1pdAotICAgY29tbWFuZHMuCi0KLSAg IFRoZSBmaWxlLXRyYW5zZmVyIHJlbGF0ZWQgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBvbmx5IHdp dGggS2VybWl0Ci0gICBwcm90b2NvbCwgbm90IHdpdGggYW55IGV4dGVybmFsIHByb3RvY29scywg bm9yIHdpdGggSzk1J3MgYnVpbHQtaW4KLSAgIFhZWk1PREVNIHByb3RvY29scyAoYmVjYXVzZSBY WVpNT0RFTSByZWNvdmVycyBmcm9tIHRyYW5zbWlzc2lvbiBlcnJvcnMKLSAgIGJ5IHJld2luZGlu ZyB0aGUgc291cmNlIGZpbGUsIGFuZCB5b3UgY2FuJ3QgcmV3aW5kIGEgcGlwZSkuCi0KLSAgIFRo aXMgc2VjdGlvbiBiZWdpbnMgYnkgZGlzY3Vzc2luZyB0aGUgc2ltcGxlIGFuZCBzdHJhaWdodGZv cndhcmQgdXNlIG9mCi0gICB0aGVzZSBmZWF0dXJlcyBpbiBVTklYLCBpbiB3aGljaCBwaXBlcyBh bmQgaW5wdXQvb3V0cHV0IHJlZGlyZWN0aW9uIGFyZQotICAgYSBmdW5kYW1lbnRhbCBjb21wb25l bnQgYW5kIHRoZXJlZm9yZSAianVzdCB3b3JrIiwgYW5kIHRoZW4gZ29lcyBvbiB0bwotICAgZGlz Y3VzcyB0aGVpciBvcGVyYXRpb24gaW4gV2luZG93cyBhbmQgT1MvMiwgd2hlcmUgbWF0dGVycyBh cmUgbXVjaAotICAgbW9yZSBjb21wbGljYXRlZC4KLQotNC4yLjEuMS4gVEVSTUlOT0xPR1kKLQot ICAgU3RhbmRhcmQgSW5wdXQKLSAgICAgICAgICBUaGlzIGlzIGEgcHJlY2lzZSB0ZWNobmljYWwg dGVybSBkZW5vdGluZyB0aGUgbm9ybWFsIHNvdXJjZSBvZgotICAgICAgICAgIGlucHV0IGZvciBh IGNvbW1hbmQgb3IgcHJvZ3JhbSwgd2hpY2ggaXMgdGhlIGtleWJvYXJkIG9mIHlvdXIKLSAgICAg ICAgICB0ZXJtaW5hbCBieSBkZWZhdWx0LCBidXQgd2hpY2ggY2FuIGJlIHJlZGlyZWN0ZWQgdG8g YSBmaWxlIG9yCi0gICAgICAgICAgcGlwZS4KLQotICAgU3RkaW4KLSAgICAgICAgICBBYmJyZXZp YXRpb24gZm9yIFN0YW5kYXJkIElucHV0LgotCi0gICBTdGFuZGFyZCBPdXRwdXQKLSAgICAgICAg ICBBIHByZWNpc2UgdGVjaG5pY2FsIHRlcm0gZGVub3RpbmcgdGhlIG5vcm1hbCBkZXN0aW5hdGlv biBmb3IKLSAgICAgICAgICBvdXRwdXQgZnJvbSBhIGNvbW1hbmQgb3IgcHJvZ3JhbSwgd2hpY2gg aXMgeW91ciB0ZXJtaW5hbCBzY3JlZW4KLSAgICAgICAgICBieSBkZWZhdWx0LCBidXQgd2hpY2gg Y2FuIGJlIHJlZGlyZWN0ZWQgdG8gYSBmaWxlLgotCi0gICBTdGRvdXQKLSAgICAgICAgICBBYmJy ZXZpYXRpb24gZm9yIFN0YW5kYXJkIE91dHB1dC4KLQotICAgU3RkaW8KLSAgICAgICAgICBBYmJy ZXZpYXRpb24gZm9yIFN0YW5kYXJkIElucHV0IC8gU3RhbmRhcmQgT3V0cHV0LgotCi0gICBJL08K LSAgICAgICAgICBBYmJyZXZpYXRpb24gZm9yIElucHV0IC8gT3V0cHV0LgotCi0gICBTaGVsbAot ICAgICAgICAgIFRleHQtYmFzZWQgc3lzdGVtIGNvbW1hbmQgcHJvY2Vzc29yLCBzdWNoIGFzIHRo ZSBVTklYIHNoZWxsLCBET1MKLSAgICAgICAgICBDT01NQU5ELkNPTSwgZXRjLgotCi0gICBQaXBl Ci0gICAgICAgICAgQSBtZWNoYW5pc20gYnkgd2hpY2ggdGhlIHN0YW5kYXJkIG91dHB1dCBvZiBv bmUgcHJvZ3JhbSBpcyBzZW50Ci0gICAgICAgICAgdG8gdGhlIHN0YW5kYXJkIGlucHV0IG9mIGFu b3RoZXIuCi0KLSAgIFBpcGVsaW5lCi0gICAgICAgICAgQSBzZXJpZXMgb2YgcHJvZ3JhbXMgY29u bmVjdGVkIGJ5IHBpcGVzLgotCi00LjIuMS4yLiBOT1RBVElPTgotCi0gICBJbiBjb21tYW5kIGRl c2NyaXB0aW9ucywgImNvbW1hbmQiIGlzIHJlcGxhY2VkIGJ5IGEgc2hlbGwgb3Igc3lzdGVtCi0g ICBjb21tYW5kIG9yIHBpcGVsaW5lLiBUaGUgY29tbWFuZCBuYW1lcyBzcGVjaWZpZWQgaW4gdGhl c2UgY29tbWFuZHMgYXJlCi0gICBpbnRlcnByZXRlZCBieSB5b3VyIHNoZWxsLCBqdXN0IGFzIGlm IHlvdSB3ZXJlIHR5cGluZyB0aGVtIGF0IHRoZSBzaGVsbAotICAgcHJvbXB0LCBhbmQgc28gaWYg dGhleSBhcmUgaW4geW91ciBQQVRILCB0aGV5IHdpbGwgYmUgZm91bmQgaW4gdGhlCi0gICBleHBl Y3RlZCBtYW5uZXIuIFRoZXJlZm9yZSB5b3UgZG9uJ3QgaGF2ZSB0byBzcGVjaWZ5IGNvbXBsZXRl IHBhdGhuYW1lcwotICAgZm9yIGNvbW1hbmRzIHRoYXQgYXJlIHByb2dyYW1zIChidXQgaXQgc2hv dWxkbid0IGh1cnQgaWYgeW91IGRvKS4KLQotICAgVGhlIG5vcm1hbCBub3RhdGlvbiBmb3IgSS9P IHJlZGlyZWN0aW9uIGlzIGFzIGZvbGxvd3M6Ci0KLSAgPCAgUmVhZCBTdGRpbiBmcm9tIHRoZSBn aXZlbiBmaWxlLgotICA+ICBTZW5kIFN0ZG91dCB0byB0aGUgZ2l2ZW4gZmlsZS4KLSAgfCAgU2Vu ZCBTdGRvdXQgZnJvbSB0aGUgY29tbWFuZCBvbiB0aGUgbGVmdCB0byB0aGUgY29tbWFuZCBvbiB0 aGUgcmlnaHQuCi0KLSAgIEV4YW1wbGVzOgotCi0gICBzb3J0IDwgZm9vID4gYmFyCi0gICAgICAg ICAgU29ydHMgdGhlIGxpbmVzIGluIGZpbGUgImZvbyIgYW5kIHdyaXRlcyB0aGUgcmVzdWx0cyB0 byBmaWxlCi0gICAgICAgICAgImJhciIKLQotICAgZ3JlcCAtYyAic29tZSB0ZXh0IiAqLnR4dCB8 IGdyZXAgLXYgIjowIiB8IHNvcnQgfCBwciAtMyB8IGxwcgotICAgICAgICAgIFRoaXMgaXMgYSBj b21tYW5kIHBpcGVsaW5lIGNvbXBvc2VkIG9mIDUgY29tbWFuZHM6Ci0KLSAgIGdyZXAgLWMgInNv bWUgdGV4dCIgKi50eHQKLSAgICAgICAgICBMb29rcyBpbiBhbGwgZmlsZXMgd2hvc2UgbmFtZXMg ZW5kIHdpdGggIi50eHQiIGZvciB0aGUgc3RyaW5nCi0gICAgICAgICAgInNvbWUgdGV4dCIgYW5k IHdyaXRlcyB0byBTdGRvdXQgdGhlIG5hbWVzIG9mIGVhY2ggZmlsZSBmb2xsb3dlZAotICAgICAg ICAgIGJ5IGEgY29sb24gYW5kIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgaW4gZWFjaC4KLQot ICAgZ3JlcCAtdiAiOjAiCi0gICAgICAgICAgUHJpbnRzIHRvIFN0ZG91dCB0aGUgbGluZXMgZnJv bSBTdGRpbiB0aGF0IGRvIE5PVCBjb250YWluIHRoZQotICAgICAgICAgIHN0cmluZyAiOjAiLCBp biB0aGlzIGNhc2UsIGl0IHJlbW92ZXMgdGhlIG5hbWVzIG9mIGZpbGVzIHRoYXQgZG8KLSAgICAg ICAgICBub3QgY29udGFpbiAic29tZSB0ZXh0Ii4KLQotICAgc29ydAotICAgICAgICAgIFNvcnRz IHRoZSBsaW5lcyBmcm9tIFN0ZGluIGFscGhhYmV0aWNhbGx5IHRvIFN0ZG91dC4KLQotICAgcHIg LTMKLSAgICAgICAgICBBcnJhbmdlcyB0aGUgbGluZXMgZnJvbSBTdGRpbiBpbiB0aHJlZSBjb2x1 bW5zLgotCi0gICBscHIKLSAgICAgICAgICBQcmludHMgaXRzIFN0ZGluIG9uIHRoZSBkZWZhdWx0 IHByaW50ZXIuCi0KLSAgIE5vdGUgdGhhdCB0aGUgS2VybWl0IGZlYXR1cmVzIGRlc2NyaWJlZCBo ZXJlIHdvcmsgb25seSB3aXRoIGNvbW1hbmRzCi0gICB0aGF0IHVzZSBTdGRpby4gSWYgeW91IGF0 dGVtcHQgdG8gdXNlIHRoZW0gd2l0aCBjb21tYW5kcyB3aG9zZSBpbnB1dAotICAgYW5kIG91dHB1 dCBjYW4gbm90IGJlIHJlZGlyZWN0ZWQsIEtlcm1pdCB3aWxsIG1vc3QgbGlrZWx5IGdldCBzdHVj ay4KLSAgIEtlcm1pdCBoYXMgbm8gd2F5IG9mIHRlbGxpbmcgaG93IGFuIGV4dGVybmFsIGNvbW1h bmQgd29ya3MsIG5vciB3aGF0Ci0gICB0aGUgc3ludGF4IG9mIHRoZSBzaGVsbCBpcywgc28gaXQn cyB1cCB0byB5b3UgdG8gbWFrZSBzdXJlIHlvdSB1c2UKLSAgIHRoZXNlIGZlYXR1cmVzIG9ubHkg d2l0aCByZWRpcmVjdGFibGUgY29tbWFuZHMuCi0KLSAgIFRoZSBxdW90aW5nIHJ1bGVzIG9mIHlv dXIgc2hlbGwgYXBwbHkgdG8gdGhlIGNvbW1hbmQuIFRodXMgaW4gVU5JWCwKLSAgIHdoZXJlIEMt S2VybWl0IHRyaWVzIHRvIHVzZSB5b3VyIHByZWZlcnJlZCBzaGVsbCBmb3IgcnVubmluZyBjb21t YW5kcywKLSAgIHNoZWxsICJtZXRhY2hhcmFjdGVycyIgd2l0aGluIGNvbW1hbmRzIG11c3QgYmUg ZXNjYXBlZCBpZiB0aGV5IGFyZSB0bwotICAgYmUgdGFrZW4gbGl0ZXJhbGx5LCB1c2luZyB0aGUg bWV0aG9kcyBub3JtYWwgZm9yIHlvdXIgc2hlbGwuIEZvcgotICAgZXhhbXBsZSwgdGhlIFVOSVgg dHIgKHRyYW5zbGF0ZSkgY29tbWFuZCBtdXN0IGhhdmUgaXRzIGFyZ3VtZW50cyBpbgotICAgcXVv dGVzOgotCi0gIHRyICJbYS16XSIgIltBLVpdIgotCi0gICBvdGhlcndpc2UgdGhlIHNoZWxsIGlz IGxpa2VseSB0byByZXBsYWNlIHRoZW0gYnkgYWxsIGZpbGVuYW1lcyB0aGF0Ci0gICBtYXRjaCwg d2hpY2ggaXMgcHJvYmFibHkgbm90IHdoYXQgeW91IHdhbnQuIFRoaXMgaXMgYWxzbyB0cnVlIHdo ZW4KLSAgIHVzaW5nIHlvdXIgc2hlbGwgZGlyZWN0bHksIGFuZCBoYXMgbm90aGluZyB0byBkbyB3 aXRoIEtlcm1pdC4KLQotNC4yLjEuMy4gU0VDVVJJVFkKLQotICAgU29tZSBzaXRlcyBtaWdodCBu b3Qgd2lzaCB0byBhbGxvdyBhY2Nlc3MgdG8gc3lzdGVtIGNvbW1hbmRzIG9yCi0gICBleHRlcm5h bCBwcm9ncmFtcyBmcm9tIHdpdGhpbiBLZXJtaXQuIFN1Y2ggYWNjZXNzLCBpbmNsdWRpbmcgYWxs IHRoZQotICAgZmVhdHVyZXMgZGVzY3JpYmVkIGhlcmUsIGNhbiBiZSBkaXNhYmxlZCBpbiB2YXJp b3VzIHdheXM6Ci0KLSAgICAxLiBXaGVuIGJ1aWxkaW5nIGZyb20gc291cmNlIGNvZGUsIGluY2x1 ZGUgLUROT1BVU0ggYW1vbmcgdGhlIENGTEFHUy4KLSAgICAyLiBBdCBydW50aW1lLCBnaXZlIHRo ZSBOT1BVU0ggY29tbWFuZC4KLSAgICAzLiBGb3Igc2VydmVyIG1vZGUsIGdpdmUgdGhlIERJU0FC TEUgSE9TVCBjb21tYW5kLgotICAgIDQuIEltcGxpY2l0IHVzZSBvZiBwaXBlcyBjYW4gYmUgZGlz YWJsZWQgYXMgZGVzY3JpYmVkIGluIFs0NDhdU2VjdGlvbgotICAgICAgIDQuMi40LgotCi0gICBO b3RlOiAzIGFuZCA0IGFyZSBub3QgbmVjZXNzYXJ5IGlmIHlvdSBoYXZlIGRvbmUgMSBvciAyLgot Ci00LjIuMi4gQ29tbWFuZHMgZm9yIFRyYW5zZmVycmluZyBmcm9tIGFuZCB0byBQaXBlcwotCi0g ICBTRU5EIC9DT01NQU5EIHNlbmRzIGRhdGEgZnJvbSBhIGNvbW1hbmQgb3IgY29tbWFuZCBwaXBl bGluZSwgYW5kCi0gICBSRUNFSVZFIC9DT01NRU5UIHdyaXRlcyBkYXRhIHRvIGEgY29tbWFuZCBv ciBwaXBlbGluZS4gVGhlIEdFVCAvQ09NTUFORAotICAgY29tbWFuZCBhc2tzIGEgc2VydmVyIHRv IHNlbmQgbWF0ZXJpYWwsIGFuZCB0aGVuIHdyaXRlcyB0aGUgaW5jb21pbmcKLSAgIG1hdGVyaWFs IHRvIGEgY29tbWFuZCBvciBwaXBlbGluZS4gVGhlc2UgZmVhdHVyZXMsIGFsb25nIHdpdGggc3dp dGNoZXMKLSAgIChsaWtlICIvQ09NTUFORCIsIGRlc2NyaWJlZCBpbiBbNDQ5XVNlY3Rpb24gNC43 KSBhcmUgbmV3IHRvIEMtS2VybWl0Ci0gICA2LjEuIFRoZSBmb2xsb3dpbmcgc3lub255bXMgYXJl IGFsc28gcHJvdmlkZWQ6Ci0KLSAgQ1NFTkQgICAgPSBTRU5EIC9DT01NQU5ECi0gIENSRUNFSVZF ID0gUkVDRUlWRSAvQ09NTUFORAotICBDR0VUICAgICA9IEdFVCAvQ09NTUFORAotCi0gICBOb25l IG9mIHRoZXNlIGNvbW1hbmRzIGNhbiBiZSB1c2VkIGlmIGEgU0VORCBvciBSRUNFSVZFIEZJTFRF UgotICAgKHJlc3BlY3RpdmVseSwgWzQ1MF1TZWN0aW9uIDQuMi4zKSBpcyBpbiBlZmZlY3QsIG9y IGlmIGEgTk9QVVNIIGNvbW1hbmQKLSAgIChbNDUxXVNlY3Rpb24gNC4yLjEuMykgaGFzIGJlZW4g Z2l2ZW4sIG9yIGlmIHRoZSBjdXJyZW50IHByb3RvY29sIGlzCi0gICBub3QgS2VybWl0LgotCi00 LjIuMi4xLiBTZW5kaW5nIGZyb20gYSBDb21tYW5kCi0KLSAgIFNFTkQgL0NPTU1BTkQgY29tbWFu ZCBbIGFzLW5hbWUgXQotICAgU0VORCAvQVMtTkFNRTphcy1uYW1lIC9DT01NQU5EIGNvbW1hbmQK LSAgIENTRU5EIGNvbW1hbmQgWyBhcy1uYW1lIF0KLSAgICAgICAgICBUaGVzZSB0aHJlZSBmb3Jt cyBhcmUgdGhlIHNhbWUuIFRoZXkgd29yayBsaWtlIHRoZSBTRU5EIGNvbW1hbmQsCi0gICAgICAg ICAgYnV0IGluc3RlYWQgb2Ygc2VuZGluZyBhIGZpbGUsIGl0IHNlbmRzIHRoZSBzdGFuZGFyZCBv dXRwdXQgb2YKLSAgICAgICAgICB0aGUgZ2l2ZW4gY29tbWFuZCwgZWl0aGVyIHVuZGVyIHRoZSBj b21tYW5kJ3Mgb3duIG5hbWUsIG9yIGVsc2UKLSAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBhcy1u YW1lLiBJZiB0aGUgY29tbWFuZCBjb250YWlucyBzcGFjZXMsIGl0IG11c3QKLSAgICAgICAgICBi ZSBlbmNsb3NlZCBpbiBicmFjZXMuIEJyYWNlcyBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB0aGUK LSAgICAgICAgICBhcy1uYW1lIGlmIGl0IGNvbnRhaW5zIHNwYWNlcy4gSWYgYnJhY2VzIGFyZSBp bmNsdWRlZCBhcm91bmQKLSAgICAgICAgICBlaXRoZXIgdGhlIGNvbW1hbmQgb3IgdGhlIGFzLW5h bWUsIHRoZXkgYXJlIHJlbW92ZWQgYWZ0ZXIKLSAgICAgICAgICBwYXJzaW5nIGJ1dCBiZWZvcmUg dXNlLiBBcyB3aXRoIFNFTkQsIHRoZSB0cmFuc2ZlciBpcyBpbiB0ZXh0IG9yCi0gICAgICAgICAg YmluYXJ5IG1vZGUgYWNjb3JkaW5nIHRoZSBjdXJyZW50IEZJTEUgVFlQRSBzZXR0aW5nLCB1bmxl c3MgeW91Ci0gICAgICAgICAgb3ZlcnJpZGUgdGhlIGdsb2JhbCB0cmFuc2ZlciBtb2RlIGJ5IGlu Y2x1ZGluZyBhIC9URVhUIG9yCi0gICAgICAgICAgL0JJTkFSWSBzd2l0Y2guIFRoZSBjb21tYW5k IG11c3QgcmVxdWlyZSBubyBpbnB1dC4KLQotICAgV2hlbiBzZW5kaW5nIGZyb20gYSBjb21tYW5k IG9yIHBpcGVsaW5lLCBDLUtlcm1pdCBoYXMgbm8gd2F5IG9mIGtub3dpbmcKLSAgIGluIGFkdmFu Y2UgaG93IG11Y2ggZGF0YSB3aWxsIGJlIHNlbnQsIGFuZCBzbyBpdCBjYW4gbm90IHNlbmQgdGhl IHNpemUKLSAgIHRvIHRoZSBvdGhlciBLZXJtaXQgaW4gdGhlIEF0dHJpYnV0ZSBwYWNrZXQsIGFu ZCBzbyB0aGUgcmVjZWl2aW5nCi0gICBLZXJtaXQgaGFzIG5vIHdheSBvZiBkaXNwbGF5aW5nICJw ZXJjZW50IGRvbmUiIG9yIGEgcHJvZ3Jlc3MgYmFyCi0gICAodGhlcm1vbWV0ZXIpLgotCi0gICBF eGFtcGxlcyB0aGF0IG1ha2Ugc2Vuc2UgaW4gdGV4dCBtb2RlIChpbGx1c3RyYXRlZCBieSBjb21t b24gVU5JWAotICAgY29tbWFuZHMpOgotCi0gICBTRU5EIC9DT01NQU5EIGZpbmdlcgotICAgQ1NF TkQgZmluZ2VyCi0gICAgICAgICAgc2VuZHMgdGhlIGN1cnJlbnQgImZpbmdlciIgbGlzdGluZyAo d2hvJ3MgbG9nZ2VkIGluKSB1bmRlciB0aGUKLSAgICAgICAgICBuYW1lICJmaW5nZXIiLiBUaGUg dHdvIGZvcm1zICJzZW5kIC9jb21tYW5kIiBhbmQgImNzZW5kIiBhcmUKLSAgICAgICAgICBlcXVp dmFsZW50OyB3ZSB3b24ndCBib3RoZXIgc2hvd2luZyB0aGVtIGJvdGggaW4gdGhlIHJlc3Qgb2Yg dGhlCi0gICAgICAgICAgZXhhbXBsZXMuCi0KLSAgIFNFTkQgL0NPTU1BTkQ6e2Zpbmdlcn0KLSAg IENTRU5EIHtmaW5nZXJ9Ci0gICAgICAgICAgU2FtZSBhcyBwcmV2aW91cyBleGFtcGxlIChicmFj ZXMgYXJlIHJlbW92ZWQgZnJvbSAie2Zpbmdlcn0iKS4KLQotICAgU0VORCAvQ09NTUFORDp7IGZp bmdlciB9Ci0gICBDU0VORCB7IGZpbmdlciB9Ci0gICAgICAgICAgU2FtZSBhcyBwcmV2aW91cyBl eGFtcGxlLCBidXQgbm90ZSB0aGF0IHRoZSBzcGFjZXMgYXJlIGtlcHQuCi0gICAgICAgICAgVGhp cyBkb2VzIG5vdCBwcmV2ZW50IHRoZSBzaGVsbCBmcm9tIHJ1bm5pbmcgdGhlICJmaW5nZXIiCi0g ICAgICAgICAgcHJvZ3JhbSwgYnV0IGl0cyBvdXRwdXQgaXMgc2VudCB1bmRlciB0aGUgbmFtZSAi IGZpbmdlciAiICh3aXRoCi0gICAgICAgICAgYSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSku Ci0KLSAgIFNFTkQgL0NPTU1BTkQ6ZmluZ2VyIC9BUy1OQU1FOnVzZXJsaXN0Ci0gICBDU0VORCBm aW5nZXIgdXNlcmxpc3QKLSAgICAgICAgICBzZW5kcyB0aGUgY3VycmVudCBmaW5nZXIgbGlzdGlu ZyB1bmRlciB0aGUgbmFtZSAidXNlcmxpc3QiLgotCi0gICBTRU5EIC9DT01NQU5EOntmaW5nZXIg fCBzb3J0IC1yfSAvQVMtTkFNRTp1c2VybGlzdAotICAgQ1NFTkQge2ZpbmdlciB8IHNvcnQgLXJ9 IHVzZXJsaXN0Ci0gICAgICAgICAgc2VuZHMgdGhlIGN1cnJlbnQgZmluZ2VyIGxpc3RpbmcsIHNv cnRlZCBpbiByZXZlcnNlIG9yZGVyLCB1bmRlcgotICAgICAgICAgIHRoZSBuYW1lICJ1c2VybGlz dCIuIFRoZSBicmFjZXMgYXJlIG5lZWRlZCB0byBkaXN0aW5ndWlzaCB0aGUKLSAgICAgICAgICBj b21tYW5kIGZyb20gdGhlIGFzLW5hbWUuCi0KLSAgIFNFTkQgL0NPTU1BTkQ6e2ZpbmdlciB8IHNv cnQgLXJ9IC9BUy1OQU1FOnt1c2VybGlzdH0KLSAgIENTRU5EIHtmaW5nZXIgfCBzb3J0IC1yfSB7 dXNlcmxpc3R9Ci0gICAgICAgICAgU2FtZSBhcyBwcmV2aW91cyBleGFtcGxlIChicmFjZXMgYXJl IHJlbW92ZWQgZnJvbSAie3VzZXJsaXN0fSIpLgotCi0gICBTRU5EIC9DT01NQU5EOntmaW5nZXIg fCBzb3J0IC1yfQotICAgICAgICAgIC9BUy1OQU1FOntcZnJlcGxhY2UoXHYoZmlsZW5hbWUpLFwz MixfKX0KLQotICAgQ1NFTkQge2ZpbmdlciB8IHNvcnQgLXJ9IHtcZnJlcGxhY2UoXHYoZmlsZW5h bWUpLFwzMixfKX0KLSAgICAgICAgICBMaWtlIHRoZSBwcmV2aW91cyBleGFtcGxlLCBidXQgc2Vu ZHMgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZAotICAgICAgICAgIHVuZGVyIHRoZSBuYW1lIG9m IHRoZSBjb21tYW5kLCBidXQgd2l0aCBhbGwgc3BhY2VzIChcMzIpCi0gICAgICAgICAgcmVwbGFj ZWQgYnkgdW5kZXJzY29yZXMsIHNvIHRoZSBhcy1uYW1lIGlzICJmaW5nZXJffF9zb3J0Xy1yIi4K LQotICAgRXhhbXBsZXMgdGhhdCBtYWtlIHNlbnNlIGluIGJpbmFyeSBtb2RlICh0aHJlZSBlcXVp dmFsZW50IGZvcm1zIGFyZQotICAgc2hvd24pOgotCi0gICBTRU5EIC9DT01NQU5EIC9CSU5BUlkg e3RhciBjZiAtIC4gfCBnemlwIC1jfSBteWRpci50YXIuZ3oKLSAgIFNFTkQgL0NPTU1BTkQgL0JJ TkFSWSAvQVMtTkFNRTpteWRpci50YXIuZ3oge3RhciBjZiAtIC4gfCBnemlwIC1jfQotICAgQ1NF TkQgL0JJTkFSWSB7dGFyIGNmIC0gLiB8IGd6aXAgLWN9IG15ZGlyLnRhci5negotICAgICAgICAg IE1ha2VzIGEgdGFyIGFyY2hpdmUgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBjb21wcmVzc2Vz IGl0IHdpdGgKLSAgICAgICAgICB0aGUgR05VIGd6aXAgcHJvZ3JhbSwgYW5kIHNlbmRzIGl0IGFz ICJteWRpci50YXIuZ3oiLiBUaGUgb3RoZXIKLSAgICAgICAgICBLZXJtaXQgY2FuLCBvZiBjb3Vy c2UsIGp1c3Qgc3RvcmUgaXQgYXMgYSBmaWxlLCBvciBpdCBjYW4gdXNlCi0gICAgICAgICAgQ1JF Q0VJVkUgdG8gdW5jb21wcmVzcyBhbmQgZGVhcmNoaXZlIGl0IGFzIHBhcnQgb2YgdGhlIHRyYW5z ZmVyCi0gICAgICAgICAgcHJvY2Vzcy4KLQotICAgV2hlbiB1c2luZyBhICJwaXBlbGluZSIgb2Yg Y29tbWFuZHMgaW4gdGhlIGNvbW1hbmQgZmllbGQsIG9idmlvdXNseSwKLSAgIHRoZSBmaXJzdCBj b21tYW5kIG11c3Qgbm90IHJlcXVpcmUgYW55IGlucHV0LCBhbmQgdGhlIGxhc3QgY29tbWFuZAot ICAgc2hvdWxkIHByb2R1Y2Ugc29tZSBvdXRwdXQsIGFuZCBhbGwgaW50ZXJtZWRpYXRlIGNvbW1h bmRzIHNob3VsZCBnZXQKLSAgIHNvbWUgaW5wdXQgYW5kIHByb2R1Y2Ugc29tZSBvdXRwdXQuCi0K LTQuMi4yLjIuIFJlY2VpdmluZyB0byBhIENvbW1hbmQKLQotICAgUkVDRUlWRSAvQ09NTUFORCBj b21tYW5kCi0gICBDUkVDRUlWRSBjb21tYW5kCi0gICAgICAgICAgVGhpcyBpcyBsaWtlIFJFQ0VJ VkUsIGV4Y2VwdCBpbmNvbWluZyBtYXRlcmlhbCBpcyB3cml0dGVuIHRvIHRoZQotICAgICAgICAg IHN0YW5kYXJkIGlucHV0IG9mIHRoZSBnaXZlbiBjb21tYW5kLCBpbiB0ZXh0IG9yIGJpbmFyeSBt b2RlCi0gICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBub3JtYWwgcnVsZXMgZm9yIGZpbGUgcmVj ZXB0aW9uLiBCZSBzdXJlIHRvCi0gICAgICAgICAgaW5jbHVkZSBhIHJlZGlyZWN0b3IgdG8gYSBm aWxlIChpZiB0aGUgY29tbWFuZCBub3JtYWxseSB3cml0ZXMKLSAgICAgICAgICB0byBzdGFuZGFy ZCBvdXRwdXQpLCBvciB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kIHdvbid0IGdvCi0gICAgICAg ICAgYW55d2hlcmUuIFRoZSBjb21tYW5kIG1heSBjb250YWluIHNwYWNlczsgYnJhY2VzIGFyZSBu b3QgbmVlZGVkLAotICAgICAgICAgIGJ1dCB0aGV5IGFyZSByZW1vdmVkIGlmIHVzZWQuCi0KLSAg IFdBUk5JTkc6IEMtS2VybWl0IGhhcyBubyB3YXkgb2Yga25vd2luZyBhbnl0aGluZyBhYm91dCB0 aGUgY29tbWFuZCwgb3IKLSAgIGV2ZW4gd2hldGhlciBpdCBpcyBhIGNvbW1hbmQuIFRodXMgdGhp cyBjb21tYW5kIHdpbGwgYWx3YXlzIGNhdXNlCi0gICBDLUtlcm1pdCB0byBlbnRlciBwcm90b2Nv bCBtb2RlLCBhcyBsb25nIGFzIHNvbWUgdGV4dCBpcyBzcGVjaWZpZWQgaW4KLSAgIHRoZSBjb21t YW5kIGZpZWxkLiBIb3dldmVyLCBpZiB0aGUgdGV4dCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEK LSAgIGNvbW1hbmQsIHRoZSB0cmFuc2ZlciB3aWxsIGV2ZW50dWFsbHkgZmFpbCB3aXRoIGEgbWVz c2FnZSBzdWNoIGFzCi0gICAiRXJyb3Igd3JpdGluZyBkYXRhIiBvciAiRmFpbHVyZSB0byBjbG9z ZSBmaWxlIi4KLQotICAgRXhhbXBsZXMgZm9yIHRleHQgbW9kZSAoaW4gVU5JWCk6Ci0KLSAgIFJF Q0VJVkUgL0NPTU1BTkQgc29ydCAtciA+IHJldmVyc2UudHh0Ci0gICBDUkVDRUlWRSBzb3J0IC1y ID4gcmV2ZXJzZS50eHQKLSAgICAgICAgICBUaGUgdGV4dCB0aGF0IGlzIHJlY2VpdmVkIGlzIHNv cnRlZCBpbiByZXZlcnNlIG9yZGVyIGFuZCBzdG9yZWQKLSAgICAgICAgICBpbiB0aGUgZmlsZSAi cmV2ZXJzZS50eHQiLiBUaGUgdHdvIGZvcm1zIHNob3duIGFyZSBlcXVpdmFsZW50LgotCi0gICBS RUNFSVZFIC9DT01NQU5EIHtzb3J0IC1yID4gcmV2ZXJzZS50eHR9Ci0gICBDUkVDRUlWRSB7c29y dCAtciA+IHJldmVyc2UudHh0fQotICAgICAgICAgIFRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBl eGFtcGxlOyBpZiBicmFjZXMgYXJlIGluY2x1ZGVkLCB0aGV5Ci0gICAgICAgICAgYXJlIHNpbXBs eSByZW1vdmVkLgotCi0gICBSRUNFSVZFIC9DT01NQU5EIHtzb3J0IC1yID4gXGZsb3dlcihcdihm aWxlbmFtZSkpLnJldmVyc2V9Ci0gICBDUkVDRUlWRSB7c29ydCAtciA+IFxmbG93ZXIoXHYoZmls ZW5hbWUpKS5yZXZlcnNlfQotICAgICAgICAgIFNhbWUgYnV0IHN0b3JlcyByZXN1bHQgdW5kZXIg dGhlIGluY29taW5nIGZpbGVuYW1lLCBsb3dlcmNhc2VkLAotICAgICAgICAgIGFuZCB3aXRoICIu cmV2ZXJzZSIgYXBwZW5kZWQgdG8gaXQuCi0KLSAgIFJFQ0VJVkUgL0NPTU1BTkQgc29ydAotICAg Q1JFQ0VJVkUgc29ydAotICAgICAgICAgIERvZXMgbm90aGluZyB1c2VmdWwsIHNpbmNlIHRoZSBv dXRwdXQgb2Ygc29ydCBoYXMgbm93aGVyZSB0byBnby4KLQotICAgUkVDRUlWRSAvQ09NTUFORCBz b3J0IC1yIHwgcHIgLTMgfCBscHIgLVBsYXNlcmpldAotICAgQ1JFQ0VJVkUgc29ydCAtciB8IHBy IC0zIHwgbHByIC1QbGFzZXJqZXQKLSAgICAgICAgICBUaGUgdGV4dCB0aGF0IGlzIHJlY2VpdmVk IGlzIHNvcnRlZCBpbiByZXZlcnNlIG9yZGVyLCBhcnJhbmdlZAotICAgICAgICAgIGludG8gdGhy ZWUgY29sdW1ucywgYW5kIHNlbnQgdG8gdGhlICJsYXNlcmpldCIgcHJpbnRlci4KLQotICAgRXhh bXBsZXMgZm9yIGJpbmFyeSBtb2RlOgotCi0gICBSRUNFSVZFIC9DT01NQU5EOntndW56aXAgLWMg fCB0YXIgeGYgLX0KLSAgIENSRUNFSVZFIHtndW56aXAgLWMgfCB0YXIgeGYgLX0KLSAgICAgICAg ICBBc3N1bWluZyB0aGUgZGF0YSB0aGF0IGlzIHJlY2VpdmVkIGlzIGEgY29tcHJlc3NlZCB0YXIg YXJjaGl2ZSwKLSAgICAgICAgICB1bmNvbXByZXNzZXMgdGhlIGFyY2hpdmUgYW5kIHBhc3NlcyBp dCB0byB0YXIgZm9yIGV4dHJhY3Rpb24uIEluCi0gICAgICAgICAgdGhpcyBjYXNlIHRoZSBicmFj ZXMgYXJlIG5lZWRlZCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgZmluYWwgIi0iCi0gICAgICAgICAg d291bGQgYmUgdGFrZW4gYXMgYSBjb21tYW5kIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgKHNlZQot ICAgICAgICAgIFs0NTJdVXNpbmcgQy1LZXJtaXQsIDJuZCBFZGl0aW9uLCBwLjMzKS4KLQotICAg R0VUIC9DT01NQU5EIHJlbW90ZS1maWxlIGNvbW1hbmQKLSAgIEdFVCAvQ09NTUFORCAvQVMtTkFN RTpjb21tYW5kIHJlbW90ZS1maWxlCi0gICBDR0VUIHJlbW90ZS1maWxlIGNvbW1hbmQKLSAgICAg ICAgICBUaGlzIGNvbW1hbmQgdGVsbHMgdGhlIEtlcm1pdCBjbGllbnQgdG8gc2VuZCBhIEdFVCBy ZXF1ZXN0IGZvcgotICAgICAgICAgIHRoZSBnaXZlbiByZW1vdGUgZmlsZSB0byBhIEtlcm1pdCBz ZXJ2ZXIuIFVubGlrZSBHRVQsIGhvd2V2ZXIsCi0gICAgICAgICAgdGhlIGluY29taW5nIG1hdGVy aWFsIGlzIHdyaXR0ZW4gdG8gYSBjb21tYW5kLCByYXRoZXIgdGhhbiB0byBhCi0gICAgICAgICAg ZmlsZS4gSWYgdGhlIHJlbW90ZS1maWxlIG9yIHRoZSBjb21tYW5kIGNvbnRhaW4gc3BhY2VzLCB0 aGV5Ci0gICAgICAgICAgbXVzdCBiZSBlbmNsb3NlZCBpbiBicmFjZXMuIFRoZSBzYW1lIGNhdXRp b25zIGFib3V0IHRoZSBjb21tYW5kCi0gICAgICAgICAgYXBwbHkgYXMgZm9yIENSRUNFSVZFLgot Ci0gICBFeGFtcGxlcyAoZm9yIFVOSVgpOgotCi0gICBHRVQgL0NPTU1BTkQgb29mYS50eHQgc29y dCAtciA+IG9vZmEubmV3Ci0gICBHRVQgL0NPTU1BTkQge29vZmEudHh0fSB7c29ydCAtciA+IG9v ZmEubmV3fQotICAgQ0dFVCBvb2ZhLnR4dCBzb3J0IC1yID4gb29mYS5uZXcKLSAgIENHRVQge29v ZmEudHh0fSB7c29ydCAtciA+IG9vZmEubmV3fQotICAgICAgICAgIFRoZXNlIGZvdXIgYXJlIGVx dWl2YWxlbnQuIEVhY2ggb2YgdGhlbSByZXF1ZXN0cyB0aGUgc2VydmVyIHRvCi0gICAgICAgICAg c2VuZCBpdHMgIm9vZmEudHh0IiBmaWxlLCBhbmQgYXMgaXQgYXJyaXZlcywgaXQgaXMgc29ydGVk IGluCi0gICAgICAgICAgcmV2ZXJzZSBvcmRlciBhbmQgd3JpdHRlbiB0byAib29mYS5uZXciLgot Ci0gICBHRVQgL0NPTU1BTkQge3Byb2ZpbGUgZXhlYyBhfSBscHIKLSAgIEdFVCAvQ09NTUFORCB7 cHJvZmlsZSBleGVjIGF9IHtscHJ9Ci0gICBHRVQgL0NPTU1BTkQgL0FTLU5BTUU6bHByIHtwcm9m aWxlIGV4ZWMgYX0KLSAgIEdFVCAvQ09NTUFORCAvQVMtTkFNRTp7bHByfSB7cHJvZmlsZSBleGVj IGF9Ci0gICBHRVQgL0NPTU1BTkQgL0FTOmxwciB7cHJvZmlsZSBleGVjIGF9Ci0gICBDR0VUIHtw cm9maWxlIGV4ZWMgYX0gbHByCi0gICBDR0VUIHtwcm9maWxlIGV4ZWMgYX0ge2xwcn0KLSAgICAg ICAgICBIZXJlIHRoZSByZW1vdGUgZmlsZW5hbWUgY29udGFpbnMgc3BhY2VzIHNvIGl0IE1VU1Qg YmUgZW5jbG9zZWQKLSAgICAgICAgICBpbiBicmFjZXMuIEFzIGl0IGFycml2ZXMgaXQgaXMgc2Vu dCB0byB0aGUgbHByIHByb2dyYW0gZm9yCi0gICAgICAgICAgcHJpbnRpbmcuIEJyYWNlcyBhcmUg b3B0aW9uYWwgYXJvdW5kICJscHIiIHNpbmNlIGl0IGNvbnRhaW5zIG5vCi0gICAgICAgICAgc3Bh Y2VzLgotCi0gICBHRVQgL0NPTU1BTkQgKi50eHQge2NhdCA+PiBuZXcudHh0fQotICAgR0VUIC9B Uy1OQU1FOntjYXQgPj4gbmV3LnR4dH0gL0NPTU1BTkQgKi50eHQKLSAgIENHRVQgKi50eHQge2Nh dCA+PiBuZXcudHh0fQotICAgICAgICAgIFRoaXMgZ2V0cyBhbGwgdGhlICIudHh0IiBmaWxlcyBm cm9tIHRoZSBzZXJ2ZXIgYW5kIGNvbmNhdGVuYXRlcwotICAgICAgICAgIHRoZW0gYWxsIGludG8g YSBzaW5nbGUgIm5ldy50eHQiIGZpbGUgb24gdGhlIGNsaWVudC4KLQotICAgR0VUIC9DT01NQU5E ICoudHh0IHtlY2hvIFx2KGZpbGVuYW1lKT4+bmV3LnR4dDtjYXQ+Pm5ldy50eHR9Ci0gICBDR0VU ICoudHh0IHtlY2hvIFx2KGZpbGVuYW1lKT4+bmV3LnR4dDtjYXQ+Pm5ldy50eHR9Ci0gICAgICAg ICAgQXMgYWJvdmUsIGJ1dCBpbnNlcnRzIGVhY2ggZmlsZSdzIG5hbWUgYmVmb3JlIGl0cyBjb250 ZW50cy4KLQotNC4yLjMuIFVzaW5nIEZpbGUtVHJhbnNmZXIgRmlsdGVycwotCi0gICBUaGUgY29t bWFuZHMgZGVzY3JpYmVkIGluIFs0NTNdU2VjdGlvbiA0LjIuMiBsZXQgeW91IHNlbmQgdGhlIG91 dHB1dCBvZgotICAgYSBjb21tYW5kLCBvciByZWNlaXZlIGRhdGEgaW50byBhIGNvbW1hbmQuIEJ1 dCB3aGF0IGlmIHlvdSB3YW50IHRvCi0gICBzcGVjaWZ5IHByZXByb2Nlc3NpbmcgZm9yIGZpbGVz IHRoYXQgeW91IHNlbmQsIG9yIHBvc3Rwcm9jZXNzaW5nIG9mCi0gICBmaWxlcyB0aGF0IHlvdSBy ZWNlaXZlLCBldmVuIHdoZW4gbXVsdGlwbGUgZmlsZXMgYXJlIGludm9sdmVkPyBGb3IgdGhpcwot ICAgeW91IG5lZWQgYSB3YXkgdG8gc3BlY2lmeSBzZW5kIGFuZCByZWNlaXZlIGZpbHRlcnMuIFRo ZSBjb21tYW5kcyBhcmUKLSAgIFNFVCBTRU5EIEZJTFRFUiBhbmQgU0VUIFJFQ0VJVkUgRklMVEVS OyBTSE9XIFBST1RPQ09MIGRpc3BsYXlzIHRoZQotICAgY3VycmVudCBzZXR0aW5ncy4KLQotNC4y LjMuMS4gVGhlIFNFTkQgRmlsdGVyCi0KLSAgIFNFVCBTRU5EIEZJTFRFUiBbIGNvbW1hbmQgXQot ICAgICAgICAgIFRoaXMgY29tbWFuZCBzcGVjaWZpZXMgYSBjb21tYW5kIHRvIGJlIHJ1biBvbiBh bnkgZmlsZSB0aGF0IHlvdQotICAgICAgICAgIFNFTkQgKG9yIE1PVkUsIE1TRU5ELCBldGMpLiBJ dCBhbHNvIGFwcGxpZXMgdG8gZmlsZXMgc2VudCB3aGVuCi0gICAgICAgICAgaW4gc2VydmVyIG1v ZGUsIGluIHJlc3BvbnNlIHRvIEdFVCBjb21tYW5kcywgYnV0IG5vdCB0byB0aGUKLSAgICAgICAg ICByZXN1bHRzIG9mIFJFTU9URSBjb21tYW5kcyBsaWtlIFJFTU9URSBESVJFQ1RPUlksIFJFTU9U RSBUWVBFLAotICAgICAgICAgIFJFTU9URSBIT1NULCBldGMuIFRoZSBjb21tYW5kIG1heSBiZSwg YnV0IG5lZWQgbm90IGJlLCBlbmNsb3NlZAotICAgICAgICAgIGluIGJyYWNlczsgaWYgaXQgaXMs IHRoZSBicmFjZXMgYXJlIHN0cmlwcGVkIGJlZm9yZSB1c2UuIFRoZQotICAgICAgICAgIG91dHB1 dCBvZiB0aGlzIGNvbW1hbmQgaXMgc2VudCwgcmF0aGVyIHRoYW4gdGhlIGZpbGUgaXRzZWxmLiBU aGUKLSAgICAgICAgICBjdXJyZW50IEZJTEUgVFlQRSBzZXR0aW5nIChURVhUIG9yIEJJTkFSWSkg YXBwbGllcyB0byB0aGUgb3V0cHV0Ci0gICAgICAgICAgb2YgdGhlIGNvbW1hbmQuIFRoZSBjb21t YW5kIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgaW5zdGFuY2UKLSAgICAgICAgICBvZiBcdihm aWxlbmFtZSksIGZvciB3aGljaCB0aGUgbmFtZSBvZiB0aGUgYWN0dWFsIGZpbGUgaXMKLSAgICAg ICAgICBzdWJzdGl0dXRlZC4gSWYgdGhlIGNvbW1hbmQgaXMgb21pdHRlZCwgdGhlIHNlbmQgZmls dGVyIGlzCi0gICAgICAgICAgcmVtb3ZlZCBhbmQgZmlsZXMgYXJlIHNlbnQgaW4gdGhlIG5vcm1h bCBtYW5uZXIuCi0KLSAgIFRoZSBTRVQgU0VORCBGSUxURVIgc2V0cyB1cCBhICJnbG9iYWwiIGZp bHRlciAtLSB0aGF0IGlzLCBvbmUgdGhhdAotICAgYXBwbGllcyB0byBhbGwgc3Vic2VxdWVudCBm aWxlLXNlbmRpbmcgY29tbWFuZHMgdW50aWwgeW91IGNoYW5nZSBvcgotICAgcmVtb3ZlIGl0LiBZ b3UgY2FuIGFsc28gc3BlY2lmeSBhICJsb2NhbCIgZmlsdGVyIHRvIGJlIHVzZWQgaW4gYQotICAg c3BlY2lmaWMgZmlsZS1zZW5kaW5nIGNvbW1hbmQgYnkgdXNpbmcgdGhlIC9GSUxURVIgc3dpdGNo IChzZWUKLSAgIFs0NTRdU2VjdGlvbiAxLjUpOyBmb3IgZXhhbXBsZToKLQotICBTRU5EIC9GSUxU RVI6Y29tbWFuZCBbIG90aGVyLXN3aXRjaGVzIF0gZmlsZW5hbWUKLQotICAgQmVzaWRlcyBcdihm aWxlbmFtZSksIHlvdSBjYW4gaW5jbHVkZSBhbnkgb3RoZXIgc2NyaXB0IHByb2dyYW1taW5nCi0g ICBub3RhdGlvbiBpbiB0aGUgc2VuZCBmaWx0ZXI6IHZhcmlhYmxlIG5hbWVzLCBhcnJheSByZWZl cmVuY2VzLCBjYWxscyB0bwotICAgYnVpbHQtaW4gc3RyaW5nIG9yIG90aGVyIGZ1bmN0aW9ucywg YW5kIHNvIG9uLiBUaGVzZSBhcmUgZXZhbHVhdGVkCi0gICBkdXJpbmcgZmlsZSB0cmFuc2Zlciwg Tk9UIGR1cmluZyBwYXJzaW5nLCBhbmQgdGhleSBhcmUgZXZhbHVhdGVkCi0gICBzZXBhcmF0ZWx5 IGZvciBlYWNoIGZpbGUuCi0KLSAgIFdoZW4gdGhlIFNFTkQgb3IgTU9WRSAoU0VORCAvREVMRVRF KSBjb21tYW5kIGlzIHVzZWQgd2l0aCBhIHNlbmQKLSAgIGZpbHRlciwgdGhlIG91dHB1dCBmcm9t IHRoZSBmaWx0ZXIgaXMgc2VudCB1bmRlciB0aGUgZmlsZSdzIG9yaWdpbmFsCi0gICBuYW1lIHVu bGVzcyB5b3Ugc3BlY2lmeSBhbiAiYXMtbmFtZSIgb3IgdGVtcGxhdGUuIFRoZSBBdHRyaWJ1dGUg cGFja2V0Ci0gICAoaWYgYW55KSBjb250YWlucyB0aGUgb3JpZ2luYWwgZmlsZSdzIGF0dHJpYnV0 ZXMgKHNpemUsIGNyZWF0aW9uIGRhdGUsCi0gICBldGMpLiBTbyAoZm9yIGV4YW1wbGUpIGlmIHRo ZSBmaWx0ZXIgY2hhbmdlcyB0aGUgZmlsZSdzIHNpemUsIHRoZQotICAgcHJvZ3Jlc3MgdGhlcm1v bWV0ZXIgbWlnaHQgYmUgd3JvbmcuIChXZSBjYW4ndCBzZW5kIHRoZSBzaXplIG9mIHRoZQotICAg b3V0cHV0IGZyb20gdGhlIGZpbHRlciwgYmVjYXVzZSBpdCBpcyBub3Qga25vd24gdW50aWwgdGhl IHRyYW5zZmVyIGlzCi0gICBmaW5pc2hlZC4pIElmIHlvdSBwcmVmZXIgdGhhdCB0aGUgc2l6ZSBu b3QgYmUgc2VudCwgdXNlICJzZXQgYXR0cmlidXRlcwotICAgc2l6ZSBvZmYiLgotCi0gICBZb3Ug Y2FuIG5vdCB1c2Ugc2VuZCBmaWx0ZXJzIHdpdGggUkVTRU5EIChTRU5EIC9SRUNPVkVSKSBvciBQ U0VORCAoU0VORAotICAgL1NUQVJUKS4KLQotICAgRXhhbXBsZXMgZm9yIHRleHQgbW9kZToKLQot ICAgU0VUIFNFTkQgRklMVEVSIHNvcnQgLXIgXHYoZmlsZW5hbWUpIDsgQnJhY2VzIG1heSBiZSBv bWl0dGVkCi0gICBTRVQgU0VORCBGSUxURVIge3NvcnQgLXIgXHYoZmlsZW5hbWUpfSA7IEJyYWNl cyBtYXkgYmUgaW5jbHVkZWQKLSAgIFNFTkQgKi50eHQKLSAgICAgICAgICBUaGlzIHNlbmRzIGV2 ZXJ5IGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdob3NlIG5hbWUgZW5kcwotICAgICAg ICAgIHdpdGggIi50eHQiIHVuZGVyIGl0cyBvd24gbmFtZSwgYnV0IHdpdGggaXRzIGxpbmVzIHNv cnRlZCBpbgotICAgICAgICAgIHJldmVyc2Ugb3JkZXIuCi0KLSAgIFNFTkQgL0ZJTFRFUjp7c29y dCAtciBcdihmaWxlbmFtZSl9ICoudHh0Ci0gICAgICAgICAgU2FtZSBhcyBhYm92ZSwgYnV0IHRo ZSBmaWx0ZXIgYXBwbGllcyBvbmx5IHRvIHRoaXMgU0VORCBjb21tYW5kLgotICAgICAgICAgIEJy YWNlcyBhcmUgcmVxdWlyZWQgaW4gdGhpcyBjYXNlLgotCi0gICBTRVQgU0VORCBGSUxURVIge3Nv cnQgLXIgXHYoZmlsZW5hbWUpfQotICAgU0VORCBvb2ZhLnR4dCByZXZlcnNlLnR4dAotICAgICAg ICAgIFNlbmRzIHRoZSBvb2ZhLnR4dCBmaWxlIHdpdGggaXRzIGxpbmVzIHNvcnRlZCBpbiByZXZl cnNlIG9yZGVyCi0gICAgICAgICAgdW5kZXIgdGhlIG5hbWUgInJldmVyc2UudHh0Ii4KLQotICAg U0VUIFNFTkQgRklMVEVSIHtzb3J0IC1yIFx2KGZpbGVuYW1lKX0KLSAgIFNFTkQgb29mYS4qIFx2 KGZpbGVuYW1lKS5yZXZlcnNlCi0gICAgICAgICAgU2VuZHMgYWxsIHRoZSBvb2ZhLiogZmlsZXMg d2l0aCB0aGVpciBsaW5lcyBzb3J0ZWQgaW4gcmV2ZXJzZQotICAgICAgICAgIG9yZGVyOyBlYWNo IGZpbGUgaXMgc2VudCB1bmRlciBpdHMgb3duIG5hbWUgYnV0IHdpdGggIi5yZXZlcnNlIgotICAg ICAgICAgIGFwcGVuZGVkIHRvIGl0LgotCi0gICBTRVQgU0VORCBGSUxURVIge3RyICJbYS16XSIg IltBLVpdIiA8IFx2KGZpbGVuYW1lKX0KLSAgIFNFTkQgKi50eHQKLSAgICAgICAgICBTZW5kcyBh bGwgIi50eHQiIGZpbGVzIHVuZGVyIHRoZWlyIG93biBuYW1lcywgYnV0IHVwcGVyY2FzaW5nCi0g ICAgICAgICAgdGhlaXIgY29udGVudHMuCi0KLSAgIE5vdGUgdGhhdCB0aGUgU0VORCBGSUxURVIg YXBwbGllcyBub3Qgb25seSB0byBmaWxlcyB0aGF0IGFyZSBzZW50IHdpdGgKLSAgIFNFTkQsIE1P VkUsIE1TRU5ELCBldGMsIGJ1dCBhbHNvIHRvIGZpbGVzIHNlbnQgYnkgdGhlIEMtS2VybWl0IHNl cnZlcgotICAgaW4gcmVzcG9uc2UgdG8gR0VUIHJlcXVlc3RzLgotCi0gICBFeGFtcGxlcyBmb3Ig YmluYXJ5IG1vZGU6Ci0KLSAgIFNFVCBTRU5EIEZJTFRFUiB7Z3ppcCAtYyBcdihmaWxlbmFtZSl9 Ci0gICBTRU5EIC9CSU5BUlkgb29mYS50eHQgb29mYS50eHQuZ3oKLSAgICAgICAgICBTZW5kcyB0 aGUgb29mYS50eHQgZmlsZSwgY29tcHJlc3NlZCBieSBnemlwLCBhcyBvb2ZhLnR4dC5nei4KLQot ICAgU0VORCAvQklOQVJZIC9GSUxURVI6e2d6aXAgLWMgXHYoZmlsZW5hbWUpfSBvb2ZhLnR4dCBv b2ZhLnR4dC5negotICAgICAgICAgIEFzIGFib3ZlLCBidXQgdGhlIGZpbHRlciBhcHBsaWVzIG9u bHkgdG8gdGhpcyBTRU5EIGNvbW1hbmQuCi0KLSAgIFNFVCBTRU5EIEZJTFRFUiB7Z3ppcCAtYyBc dihmaWxlbmFtZSl9Ci0gICBTRU5EIC9CSU5BUlkgb29mYS4qIFxmdXBwZXIoXHJlcGxhY2UoXHYo ZmlsZW5hbWUpLC4sXykpLkdaCi0gICAgICAgICAgU2VuZHMgYWxsIHRoZSBvb2ZhLiogZmlsZXMs IGNvbXByZXNzZWQgYnkgZ3ppcCwgZWFjaCB1bmRlciBpdHMKLSAgICAgICAgICBvd24gbmFtZSwg YnV0IHdpdGggdGhlIG5hbWUgdXBwZXJjYXNlZCwgYWxsIHBlcmlvZHMgd2l0aGluIHRoZQotICAg ICAgICAgIG5hbWUgY29udmVydGVkIHRvIHVuZGVyc2NvcmVzLCBhbmQgIi5HWiIgYXBwZW5kZWQg dG8gaXQuIFNvLCBmb3IKLSAgICAgICAgICBleGFtcGxlLCAib29mYS50eHQiIGlzIHNlbnQgYXMg Ik9PRkFfVFhULkdaIi4KLQotICAgSW4gdGhlIGd6aXAgZXhhbXBsZXMsIG5vdGUgdGhhdCB0aGUg YW1vdW50IG9mIGRhdGEgdGhhdCBpcyBzZW50IGlzCi0gICBub3JtYWxseSBsZXNzIHRoYW4gdGhl IG9yaWdpbmFsIGZpbGUgc2l6ZSBiZWNhdXNlIGd6aXAgY29tcHJlc3NlcyB0aGUKLSAgIGZpbGUu IEJ1dCBLZXJtaXQgc2VuZHMgdGhlIG9yaWdpbmFsIGZpbGUgc2l6ZSBhaGVhZCBpbiB0aGUgYXR0 cmlidXRlCi0gICBwYWNrZXQgYW55d2F5ICh1bmxlc3MgeW91IHRlbGwgaXQgbm90IHRvbykuIFRo dXMgdGhlIHRyYW5zZmVyIHdpbGwKLSAgIHByb2JhYmx5IGFwcGVhciB0byB0ZXJtaW5hdGUgZWFy bHksIGUuZy4gd2hlbiB0aGUgcmVjZWl2ZXIncwotICAgZmlsZS10cmFuc2ZlciBkaXNwbGF5IHRo ZXJtb21ldGVyIGlzIG9ubHkgYXQgNDAlLiBJZiB0aGlzIGFubm95cyB5b3UsCi0gICB0ZWxsIEtl cm1pdCB0byAic2V0IGF0dHJpYnV0ZSBsZW5ndGggb2ZmIi4gT24gdGhlIG90aGVyIGhhbmQsIHlv dSBjYW4KLSAgIHVzZSB0aGUgZmluYWwgcG9zaXRpb24gb2YgdGhlIHRoZXJtb21ldGVyIGFzIGEg bWVhc3VyZSBvZiB0aGUKLSAgIGVmZmVjdGl2ZW5lc3Mgb2YgY29tcHJlc3Npb24uCi0KLTQuMi4z LjIuIFRoZSBSRUNFSVZFIEZpbHRlcgotCi0gICBTRVQgUkVDRUlWRSBGSUxURVIgWyBjb21tYW5k IF0KLSAgICAgICAgICBUaGlzIGNvbW1hbmQgc3BlY2lmaWVzIHRoYXQgdGhlIGdpdmVuIGNvbW1h bmQgd2lsbCBiZSBydW4gb24gYW55Ci0gICAgICAgICAgZmlsZSB0aGF0IGlzIHJlY2VpdmVkIGJl Zm9yZSBpdCBpcyB3cml0dGVuIHRvIGRpc2suIFRoZSBjb21tYW5kCi0gICAgICAgICAgbWF5IGJl LCBidXQgbmVlZCBub3QgYmUsIGVuY2xvc2VkIGluIGJyYWNlczsgaWYgaXQgaXMgdGhlIGJyYWNl cwotICAgICAgICAgIGFyZSBzdHJpcHBlZCBiZWZvcmUgdXNlLiBUaGUgZm9sbG93aW5nIHR3byBj b21tYW5kcyBhcmUKLSAgICAgICAgICBlcXVpdmFsZW50OgotCi0gIFNFVCBSRUNFSVZFIEZJTFRF UiBzb3J0IC1yID4gXHYoZmlsZW5hbWUpCi0gIFNFVCBSRUNFSVZFIEZJTFRFUiB7c29ydCAtciA+ IFx2KGZpbGVuYW1lKX0KLQotICAgVGhlIFJFQ0VJVkUgZmlsdGVyIGNvbW1hbmQgbWF5IGNvbnRh aW4gYSAiXHYoZmlsZW5hbWUpIiBzZXF1ZW5jZSB0byBiZQotICAgcmVwbGFjZWQgYnkgdGhlIGlu Y29taW5nIGZpbGVuYW1lIGZyb20gdGhlIGZpbGUgaGVhZGVyIHBhY2tldCwgYnV0IGl0Ci0gICBp cyBub3QgcmVxdWlyZWQuIEhvd2V2ZXIgeW91IG11c3QgdXNlIGl0IHdoZW5ldmVyIHlvdXIgZmls dGVyIHdvdWxkCi0gICBub3JtYWxseSB3cml0ZSB0byBTdGRvdXQsIG90aGVyd2lzZSBpdHMgb3V0 cHV0IHdpbGwgYmUgbG9zdC4KLQotICAgVGhlIFJFQ0VJVkUgZmlsdGVyIGNvbW1hbmQgbWF5IGNv bnRhaW4gb25lIG9yIG1vcmUgIlx2KGZpbGVuYW1lKSIKLSAgIHNlcXVlbmNlIHRvIGJlIHJlcGxh Y2VkIGJ5IHRoZSBpbmNvbWluZyBmaWxlbmFtZSBmcm9tIHRoZSBmaWxlIGhlYWRlcgotICAgcGFj a2V0LCBidXQgaXQgaXMgbm90IHJlcXVpcmVkLiBIb3dldmVyIHlvdSBtdXN0IHVzZSBpdCB3aGVu ZXZlciB5b3VyCi0gICBmaWx0ZXIgd291bGQgbm9ybWFsbHkgd3JpdGUgdG8gU3Rkb3V0LCBvdGhl cndpc2UgaXRzIG91dHB1dCB3aWxsIGJlCi0gICBsb3N0LgotCi0gICBSRUNFSVZFIC9GSUxURVI6 Y29tbWFuZCBhbmQgR0VUIC9GSUxURVI6Y29tbWFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvCi0gICBz cGVjaWZ5IGEgZmlsdGVyIHRvIGJlIHVzZWQgZm9yIG9ubHkgb25lIGZpbGUtdHJhbnNmZXIgb3Bl cmF0aW9uLgotCi0gICBVTklYIGV4YW1wbGVzIGZvciB0ZXh0IG1vZGU6Ci0KLSAgIFNFVCBSRUNF SVZFIEZJTFRFUiBscHIKLSAgIFJFQ0VJVkUKLSAgICAgICAgICBBbGwgdGhlIGZpbGVzIHRoYXQg YXJlIHJlY2VpdmVkIGFyZSBzZW50IHRvIHRoZSBkZWZhdWx0IFVOSVgKLSAgICAgICAgICBwcmlu dCBzcG9vbGVyLgotCi0gICBSRUNFSVZFIC9GSUxURVI6bHByCi0gICAgICAgICAgU2FtZSBhcyBh Ym92ZSwgZXhjZXB0IHRoZSBscHIgZmlsdGVyIGlzIHVzZWQgb25seSB3aXRoIHRoaXMKLSAgICAg ICAgICBSRUNFSVZFIGNvbW1hbmQuCi0KLSAgIFJFQ0VJVkUgbHByCi0gICAgICAgICAgVGhpcyBp cyBwcm9iYWJseSBub3Qgd2hhdCB5b3Ugd2FudDsgaXQgY3JlYXRlcyBhIGZpbGUgY2FsbGVkCi0g ICAgICAgICAgbHByLgotCi0gICBTRVQgUkVDRUlWRSBGSUxURVIge3NvcnQgLXIgPiBcdihmaWxl bmFtZSl9Ci0gICBSRUNFSVZFCi0gICAgICAgICAgU3RvcmVzIGVhY2ggaW5jb21pbmcgZmlsZSB3 aXRoIGl0cyBsaW5lcyBzb3J0ZWQgaW4gcmV2ZXJzZQotICAgICAgICAgIG9yZGVyLCB1bmRlciBp dHMgb3duIG5hbWUuCi0KLSAgIFJFQ0VJVkUgL0ZJTFRFUjp7c29ydCAtciA+IFx2KGZpbGVuYW1l KX0KLSAgICAgICAgICBBcyBhYm92ZSwgYnV0IHRoZSBmaWx0ZXIgaXMgdXNlZCBvbmx5IGZvciB0 aGlzIFJFQ0VJVkUgY29tbWFuZC4KLQotICAgU0VUIFJFQ0VJVkUgRklMVEVSIHNvcnQgLXIgPiBc dihmaWxlbmFtZSkKLSAgIFJFQ0VJVkUgcmV2ZXJzZS50eHQKLSAgICAgICAgICBTdG9yZXMgZWFj aCBpbmNvbWluZyBmaWxlIHdpdGggaXRzIGxpbmVzIHNvcnRlZCBpbiByZXZlcnNlCi0gICAgICAg ICAgb3JkZXIsIHVuZGVyIHRoZSBuYW1lICJyZXZlcnNlLnR4dCIuIFRoZSBhY3R1YWwgcmVzdWx0 IGRlcGVuZHMKLSAgICAgICAgICBvbiB0aGUgRklMRSBDT0xMSVNJT04gc2V0dGluZy4gSWYgaXQg aXMgT1ZFUldSSVRFIGFuZCBtdWx0aXBsZQotICAgICAgICAgIGZpbGVzIGFycml2ZSwgdGhlbiBl YWNoIGluY29taW5nIGZpbGUgZGVzdHJveXMgdGhlIHByZXZpb3VzIG9uZS4KLSAgICAgICAgICBJ ZiBpdCBpcyBCQUNLVVAgKHRoZSBkZWZhdWx0KSwgZmlsZW5hbWUgY29uZmxpY3RzIGFyZSByZXNv bHZlIGJ5Ci0gICAgICAgICAgYWRkaW5nICJ2ZXJzaW9uIG51bWJlcnMiIHRvIHRoZSBmaWxlbmFt ZXM6IHJldmVyc2UudHh0LAotICAgICAgICAgIHJldmVyc2UudHh0Ln4xfiwgcmV2ZXJzZS50eHQu fjJ+LCBldGMuCi0KLSAgIFNFVCBSRUNFSVZFIEZJTFRFUiBzb3J0IC1yID4gXHYoZmlsZW5hbWUp Ci0gICBSRUNFSVZFIFx2KGZpbGVuYW1lKS5yZXZlcnNlCi0gICAgICAgICAgU3RvcmVzIGVhY2gg aW5jb21pbmcgZmlsZSB3aXRoIGl0cyBsaW5lcyBzb3J0ZWQgaW4gcmV2ZXJzZQotICAgICAgICAg IG9yZGVyLCB1bmRlciB0aGUgbmFtZSBpdCBhcnJpdmVkIHdpdGgsIGJ1dCB3aXRoICIucmV2ZXJz ZSIKLSAgICAgICAgICBhcHBlbmRlZCB0byBpdC4KLQotICAgU0VUIFJFQ0VJVkUgRklMVEVSIHNv cnQgLXIgPiBcdihmaWxlbmFtZSkKLSAgIFJFQ0VJVkUgXGZsb3dlcihcdihmaWxlbmFtZSkpLnJl dmVyc2UKLSAgICAgICAgICBMaWtlIHRoZSBwcmV2aW91cyBleGFtcGxlLCBidXQgZW5zdXJlcyB0 aGF0IHRoZSBmaWxlbmFtZSBpcwotICAgICAgICAgIGxvd2VyY2FzZS4KLQotICAgICAgICAgIEV4 YW1wbGVzIGZvciBiaW5hcnkgbW9kZToKLQotICAgU0VUIFJFQ0VJVkUgRklMVEVSIGd1bnppcCAt YyA+IFx2KGZpbGVuYW1lKQotICAgUkVDRUlWRQotICAgICAgICAgIFRoaXMgcmVjZWl2ZXMgb25l IG9yIG1vcmUgcHJlc3VtYWJseSBjb21wcmVzc2VkIGZpbGUgYW5kCi0gICAgICAgICAgdW5jb21w cmVzc2VzIGVhY2ggb25lIGludG8gYSBmaWxlIGhhdmluZyB0aGUgc2FtZSBuYW1lIGl0IHdhcwot ICAgICAgICAgIHNlbnQgd2l0aC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBmaWxlIGlzIHNlbnQgd2l0 aCB0aGUgbmFtZQotICAgICAgICAgIE9PRkEuVFhULkdaLCBpdCBpcyBzdG9yZWQgd2l0aCB0aGF0 IG5hbWUsIGV2ZW4gYWZ0ZXIKLSAgICAgICAgICBkZWNvbXByZXNzaW9uLgotCi0gICBTRVQgUkVD RUlWRSBGSUxURVIgZ3VuemlwIC1jID4gXHYoZmlsZW5hbWUpCi0gICBSRUNFSVZFIFxmbG93ZXIo XGZzdWJzdHJpbmcoXHYoZmlsZW5hbWUpLDEsXGZsZW5ndGgoXHYoZmlsZW5hbWUpKS0zKSkKLSAg ICAgICAgICBMaWtlIHRoZSBwcmV2aW91cyBleGFtcGxlLCBidXQgdGhlIHJlc3VsdGluZyBmaWxl bmFtZSBoYXMgaXRzCi0gICAgICAgICAgcmlnaHRtb3N0IHRocmVlIGNoYXJhY3RlcnMgcmVtb3Zl ZCBmcm9tIGl0IGFuZCB0aGUgcmVtYWluZGVyIGlzCi0gICAgICAgICAgbG93ZXJjYXNlZC4gU28g aWYgdGhlIGluY29taW5nIGZpbGVuYW1lIGlzIE9PRkEuVFhULkdaLCBpdCBpcwotICAgICAgICAg IHN0b3JlZCBhcyBvb2ZhLnR4dCBhZnRlciBkZWNvbXByZXNzaW9uLgotCi0gICBPZiBjb3Vyc2Ug eW91IGRvbid0IHdhbnQgdG8gdHlwZSBzdWNoIGxvbmcgaGlkZW91cyBjb21tYW5kcywgc28gd2Ug aGF2ZQotICAgYWxzbyBpbnRyb2R1Y2VkIHNldmVyYWwgbmV3IGZ1bmN0aW9uczoKLQotICAgXGZz dHJpcHgoc3RyaW5nWyxjaGFyYWN0ZXJdKQotICAgICAgICAgIFRoaXMgZnVuY3Rpb24gcmVtb3Zl cyB0aGUgcmlnaHRtb3N0IHNlZ21lbnQgb2YgdGhlIHN0cmluZyB0aGF0Ci0gICAgICAgICAgc3Rh cnRzIHdpdGggdGhlIGdpdmVuIGNoYXJhY3Rlci4gSWYgbm8gY2hhcmFjdGVyIGlzIGdpdmVuLAot ICAgICAgICAgIHBlcmlvZCAoLikgaXMgdXNlZC4gVGh1cyBpdCBpcyBtb3N0IGNvbnZlbmllbnRs eSB1c2VkIGZvcgotICAgICAgICAgIHN0cmlwcGluZyB0aGUgZXh0ZW5zaW9uIGZyb20gYSBmaWxl bmFtZSAob3IgdGhlIGRlY2ltYWwgcG9ydGlvbgotICAgICAgICAgIGZyb20gYSBmbG9hdGluZy1w b2ludCBudW1iZXIgd3JpdHRlbiBpbiBVUy9VSyBzdHlsZSkuIEV4YW1wbGVzOgotCi0gICBcZnN0 cmlweChPT0ZBLlRYVC5HWikgICAgICAgICAgICAgPT4gT09GQS5UWFQKLSAgIFxmc3RyaXB4KE9P RkEuVFhULkdaLC4pICAgICAgICAgICA9PiBPT0ZBLlRYVAotICAgXGZzdHJpcHgoT09GQS5UWFQu R1osWCkgICAgICAgICAgID0+IE9PRkEuVAotICAgXGZzdHJpcHgoXGZzdHJpcHgoT09GQS5UWFQu R1opKSAgID0+IE9PRkEKLSAgIFxmc3RyaXB4KCQxMDAuMDApICAgICAgICAgICAgICAgICA9PiAk MTAwCi0KLSAgIFxmc3RyaXBuKHN0cmluZyxudW1iZXIpCi0gICAgICAgICAgUmVtb3ZlcyB0aGUg cmlnaHRtb3N0IG51bWJlciBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0cmluZy4KLSAgICAgICAgICBF eGFtcGxlczoKLQotICAgXGZzdHJpcG4oT09GQS5UWFQuR1opICAgICAgICAgICAgID0+IE9PRkEu VFhULkdaCi0gICBcZnN0cmlwbihPT0ZBLlRYVC5HWiwzKSAgICAgICAgICAgPT4gT09GQS5UWFQK LSAgIFxmc3RyaXBuKE9PRkEuVFhULkdaLDcpICAgICAgICAgICA9PiBPT0ZBCi0KLSAgIFxmc3Ry aXBiKHN0cmluZ1ssYzFbLGMyXV0pCi0gICAgICAgICAgU3RyaXBzIGVuY2xvc2luZyBtYXRjaGlu ZyBicmFjZXMsIGJyYWNrZXRzLCBwYXJlbnRoZXNlcywgb3IKLSAgICAgICAgICBxdW90ZXMgZnJv bSB0aGUgc3RyaW5nLiBUaGUgc2Vjb25kIGFyZ3VtZW50LCBjMSwgc3BlY2lmaWVzIHdoaWNoCi0g ICAgICAgICAga2luZCBvZiBlbmNsb3N1cmUgdG8gbG9vayBmb3I7IGlmIG5vdCBzcGVjaWZpZWQs IGFueSBlbmNsb3NpbmcKLSAgICAgICAgICAoKSwgW10sIDw+LCB7fSwgIiIsICcnLCBvciBgJyBh cmUgcmVtb3ZlZC4gSWYgYzEgaXMgc3BlY2lmaWVkCi0gICAgICAgICAgYW5kIGMyIGlzIG5vdCwg dGhlbiBpZiBjMSBpcyBhbiBvcGVuaW5nIGJyYWNlLCBicmFja2V0LCBvcgotICAgICAgICAgIHBh cmVudGhlc2lzLCB0aGUgbWF0Y2hpbmcgY2xvc2luZyBvbmUgaXMgc3VwcGxpZWQgYXV0b21hdGlj YWxseQotICAgICAgICAgIGFzIGMyLiBJZiBib3RoIGMxIGFuZCBjMiBhcmUgc3BlY2lmaWVkLCB0 aGVuIHRvIGJlIHN0cmlwcGVkIHRoZQotICAgICAgICAgIHN0cmluZyBtdXN0IGJlZ2luIHdpdGgg YzEgYW5kIGVuZCB3aXRoIGMyLiBJZiB0aGUgc3RyaW5nIGlzIG5vdAotICAgICAgICAgIGVuY2xv c2VkIGluIHRoZSBpbmRpY2F0ZWQgbWFubmVyLCB0aGUgcmVzdWx0IGlzIHRoZSBvcmlnaW5hbAot ICAgICAgICAgIHN0cmluZy4gRXhhbXBsZXM6Ci0KLSAgIFxmc3RyaXBiKCJhYmMiKSAgICAgICAg ICAgICAgICAgICA9PiBhYmMKLSAgIFxmc3RyaXBiKFthYmNdKSAgICAgICAgICAgICAgICAgICA9 PiBhYmMKLSAgIFxmc3RyaXBiKFthYmMpICAgICAgICAgICAgICAgICAgICA9PiBbYWJjCi0gICBc ZnN0cmlwYig8YWJjPikgICAgICAgICAgICAgICAgICAgPT4gYWJjCi0gICBcZnN0cmlwYig8YWJj PixbKSAgICAgICAgICAgICAgICAgPT4gPGFiYz4KLSAgIFxmc3RyaXBiKChhYmMpKSAgICAgICAg ICAgICAgICAgICA9PiBhYmMKLSAgIFxmc3RyaXBiKChhYmMpLFspICAgICAgICAgICAgICAgICA9 PiAoYWJjKQotICAgXGZzdHJpcGIoKGFiYykseyh9KSAgICAgICAgICAgICAgID0+IGFiYwotICAg XGZzdHJpcGIoK2FiYyspICAgICAgICAgICAgICAgICAgID0+ICthYmMrCi0gICBcZnN0cmlwYigr YWJjKywrKSAgICAgICAgICAgICAgICAgPT4gYWJjCi0gICBcZnN0cmlwYigrYWJjKywrLF4pICAg ICAgICAgICAgICAgPT4gK2FiYysKLSAgIFxmc3RyaXBiKCthYmNeLCssXikgICAgICAgICAgICAg ICA9PiBhYmMKLSAgIFxmc3RyaXBiKCdhYmMnKSAgICAgICAgICAgICAgICAgICA9PiBhYmMKLSAg IFxmc3RyaXBiKGBhYmMnKSAgICAgICAgICAgICAgICAgICA9PiBhYmMKLSAgIFxmc3RyaXBiKGBg YWJjJycpICAgICAgICAgICAgICAgICA9PiBgYWJjJwotICAgXGZzdHJpcGIoXGZzdHJpcGIoYGBh YmMnJykpICAgICAgID0+IGFiYwotCi0gICAgICAgICAgTm90aWNlIHRoZSBzcGVjaWFsIHN5bnRh eCByZXF1aXJlZCBmb3IgaW5jbHVkaW5nIGEgbGl0ZXJhbAotICAgICAgICAgIHBhcmVudGhlc2lz IGluIHRoZSBhcmd1bWVudCBsaXN0LiBBcyB0aGUgbGFzdCB0d28gZXhhbXBsZXMKLSAgICAgICAg ICBpbGx1c3RyYXRlLCBcZnN0cmlwYigpIHN0cmlwcyBvbmx5IG9uZSBsZXZlbCBhdCBhdCBhIHRp bWU7Ci0gICAgICAgICAgbmVzdGluZyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHNtYWxsIGZpeGVk IG51bWJlciBvZiBsZXZlbHM7Ci0gICAgICAgICAgbG9vcHMgY2FuIGJlIHVzZWQgdG8gc3RyaXAg bGFyZ2VyIG9yIGluZGV0ZXJtaW5hdGUgbnVtYmVycyBvZgotICAgICAgICAgIGxldmVscy4KLQot ICAgXGZsb3Aoc3RyaW5nWyxjaGFyXSkKLSAgICAgICAgICBSZW1vdmVzIHRoZSBsZWZ0bW9zdCBz ZWdtZW50IG9mIHRoZSBzdHJpbmcgdGhhdCBlbmRzIHdpdGggdGhlCi0gICAgICAgICAgZ2l2ZW4g Y2hhcmFjdGVyLiBJZiBubyBjaGFyYWN0ZXIgaXMgZ2l2ZW4sIHBlcmlvZCAoLikgaXMgdXNlZC4K LSAgICAgICAgICBFeGFtcGxlczoKLQotICBcZmxvcChPT0ZBLlRYVC5HWikgICAgICAgICAgICAg ICA9PiBUWFQuR1oKLSAgXGZsb3AoT09GQS5UWFQuR1osLikgICAgICAgICAgICAgPT4gVFhULkda Ci0gIFxmbG9wKE9PRkEuVFhULkdaLFgpICAgICAgICAgICAgID0+IFQuR1oKLQotICAgICAgICAg IFRvIHJlbW92ZSB0aGUgbGVmdG1vc3QgbnVtYmVyIGNoYXJhY3RlcnMsIGp1c3QgdXNlCi0gICAg ICAgICAgXGZzdWJzdHJpbmcocyxudW1iZXIrMSkuIFRvIHJldHVybiB0aGUgcmlnaHRtb3N0IG51 bWJlcgotICAgICAgICAgIGNoYXJhY3RlcnMsIHVzZSBcZnJpZ2h0KHMsbnVtYmVyKS4KLQotICAg U28gdGhlIGhpZGVvdXMgZXhhbXBsZToKLQotICByZWNlaXZlIFxmbG93ZXIoXGZzdWJzdHJpbmco XHYoZmlsZW5hbWUpLDEsXGZsZW5ndGgoXHYoZmlsZW5hbWUpKS0zKSkKLQotICAgY2FuIG5vdyBi ZSB3cml0dGVuIGFzOgotCi0gIHJlY2VpdmUgXGZsb3dlcihcZnN0cmlweChcdihmaWxlbmFtZSkp KQotCi0gICBUaGF0IGlzLCB0aGUgZmlsZW5hbWUgc3RyaXBwZWQgb2YgaXRzIGV4dGVuc2lvbiBh bmQgdGhlbiBsb3dlcmNhc2VkLgotICAgVGhpcyBpcyBub3Qgb25seSBzaG9ydGVyIGFuZCBsZXNz IGhpZGVvdXMsIGJ1dCBhbHNvIGRvZXMgbm90IGRlcGVuZCBvbgotICAgdGhlIGxlbmd0aCBvZiB0 aGUgZXh0ZW5zaW9uIGJlaW5nIDMuCi0KLSAgIE5vdGUgdGhhdCB3aGVuIGEgcmVjZWl2ZSBmaWx0 ZXIgaXMgaW4gZWZmZWN0LCB0aGlzIG92ZXJyaWRlcyB5b3VyIEZJTEUKLSAgIENPTExJU0lPTiBz ZXR0aW5nLCBzaW5jZSBLZXJtaXQgaGFzIG5vIHdheSBvZiBrbm93aW5nIHdoYXQgdGhlIGZpbmFs Ci0gICBkZXN0aW5hdGlvbiBmaWxlbmFtZSB3aWxsIGJlIChiZWNhdXNlIGl0IGRvZXMgbm90IGtu b3csIGFuZCBjYW4gbm90IGJlCi0gICBleHBlY3RlZCB0byBrbm93LCB0aGUgc3ludGF4IG9mIGV2 ZXJ5IHZlcnNpb24gb2YgZXZlcnkgY29tbWFuZCBzaGVsbCBvbgotICAgZXZlcnkgcGxhdGZvcm0g b24gdGhlIHBsYW5ldCkuCi0KLTQuMi40LiBJbXBsaWNpdCBVc2Ugb2YgUGlwZXMKLQotICAgSWYg eW91IHdpc2gsIEMtS2VybWl0IGNhbiBhbHNvIGV4YW1pbmUgaW5jb21pbmcgZmlsZW5hbWVzIHRv IHNlZSBpZgotICAgdGhleSBzdGFydCB3aXRoICIhIiwgYW5kIGlmIHNvLCB0aGUgc3Vic2VxdWVu dCB0ZXh0IGlzIHRyZWF0ZWQgYXMgYQotICAgY29tbWFuZCB0byByZWFkIGZyb20gb3Igd3JpdGUg dG8uIEZvciBleGFtcGxlLCBpZiBhIEtlcm1pdCBjbGllbnQgaXMKLSAgIGdpdmVuIHRoZSBmb2xs b3dpbmcgY29tbWFuZDoKLQotICBnZXQgeyFmaW5nZXIgfCBzb3J0fQotCi0gICB0aGUgc2VydmVy IG9uIHRoZSBvdGhlciBlbmQsIGlmIGl0IHN1cHBvcnRzIHRoaXMgZmVhdHVyZSwgd2lsbCBydW4g dGhlCi0gICAiZmluZ2VyIiBwcm9ncmFtLCBwaXBlIGl0cyBzdGFuZGFyZCBvdXRwdXQgdG8gdGhl ICJzb3J0IiBwcm9ncmFtLCBhbmQKLSAgIHNlbmQgc29ydCdzIHN0YW5kYXJkIG91dHB1dCBiYWNr IHRvIHlvdS4gU2ltaWxhcmx5LCBpZiB5b3U6Ci0KLSAgc2VuZCBvb2ZhLnR4dCAhc29ydCAtciA+ IG9vZmEubmV3Ci0KLSAgIG9yLCBlcXVpdmFsZW50bHk6Ci0KLSAgc2VuZCBvb2ZhLnR4dCB7IXNv cnQgLXIgPiBvb2ZhLm5ld30KLQotICAgb3I6Ci0KLSAgc2VuZCAvYXMtbmFtZTp7IXNvcnQgLXIg PiBvb2ZhLm5ld30gb29mYS50eHQKLQotICAgdGhpcyBoYXMgdGhlIHJlY2VpdmVyIHNlbmQgdGhl IGNvbnRlbnRzIG9mIHRoZSBpbmNvbWluZyBvb2ZhLnR4dCBmaWxlCi0gICB0byB0aGUgc29ydCBw cm9ncmFtLCB3aGljaCBzb3J0cyB0aGUgdGV4dCBpbiByZXZlcnNlIG9yZGVyIGFuZCBzdG9yZXMK LSAgIHRoZSByZXN1bHQgaW4gb29mYS5uZXcuCi0KLSAgIFRoaXMgdXNlIG9mIHRoZSBleGNsYW1h dGlvbiBtYXJrIHNob3VsZCBiZSBmYW1pbGlhciB0byBVTklYIHVzZXJzIGFzCi0gICB0aGUgImJh bmciIGZlYXR1cmUgdGhhdCBsZXRzIHlvdSBydW4gYW4gZXh0ZXJuYWwgYXBwbGljYXRpb24gb3Ig Y29tbWFuZAotICAgZnJvbSB3aXRoaW4gYW5vdGhlciBhcHBsaWNhdGlvbi4KLQotICAgS2VybWl0 J3MgImJhbmciIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgc2luY2UgaXQgaXMgbm90 IHVuaGVhcmQKLSAgIGZvciBmaWxlbmFtZXMgdG8gYWN0dWFsbHkgYmVnaW4gd2l0aCAiISIuIFNv IGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzCi0gICBmZWF0dXJlLCB5b3UgbXVzdCBlbmFibGUgaXQg d2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6Ci0KLSAgIFNFVCBUUkFOU0ZFUiBQSVBFUyB7IE9O LCBPRkYgfQotICAgICAgICAgIE9OIGVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mICIhIiBub3Rh dGlvbiBpbiBpbmNvbWluZyBmaWxlbmFtZXMKLSAgICAgICAgICBkdXJpbmcgZmlsZSB0cmFuc2Zl ciBhcyBhbiBpbmRpY2F0b3IgdGhhdCB0aGUgcmVtYWluaW5nIHRleHQgaXMKLSAgICAgICAgICB0 aGUgbmFtZSBvZiBhIGNvbW1hbmQuIE9GRiwgdGhlIGRlZmF1bHQsIGRpc2FibGVzIHRoaXMgZmVh dHVyZQotICAgICAgICAgIGFuZCB1c2VzIHRoZSB0ZXh0IGFzIGEgZmlsZW5hbWUgaW4gdGhlIG5v cm1hbCBmYXNoaW9uLiBUaGlzCi0gICAgICAgICAgY29tbWFuZCBkb2VzIE5PVCBhZmZlY3QgU0VO RCAvQ09NTUFORCwgR0VUIC9DT01NQU5ELCBDU0VORCwgZXRjLgotCi0gICBTbyB1c2luZyBhIGNv bWJpbmF0aW9uIG9mIENTRU5EIChTRU5EIC9DT01NQU5EKSBhbmQgdGhlICJiYW5nIiBmZWF0dXJl LAotICAgeW91IGNhbiB0cmFuc2ZlciBhIGRpcmVjdG9yeSB0cmVlIGFsbCBpbiBvbmUgY29tbWFu ZCAoYXNzdW1pbmcgdGhlCi0gICByZW1vdGUgS2VybWl0IHN1cHBvcnRzIHBpcGUgdHJhbnNmZXJz IGFuZCBoYXMgdGhlbSBlbmFibGVkKToKLQotICBDU0VORCB7dGFyIGNmIC0gLiB8IGd6aXAgLWN9 IHshZ3VuemlwIC1jIHwgdGFyIHhmIC19Ci0KLSAgIG9yOgotCi0gIFNFTkQgL0NPTU1BTkQ6e3Rh ciBjZiAtIC4gfCBnemlwIC1jfSAvYXM6eyFndW56aXAgLWMgfCB0YXIgeGYgLX0KLQotICAgUGF5 IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3ludGF4LiBCcmFjZXMgYXJlIG5lZWRlZCBhcm91bmQg dGhlIGNvbW1hbmQKLSAgIGJlY2F1c2UgaXQgY29udGFpbnMgc3BhY2VzOyBicmFjZXMgYXJlIG5l ZWRlZCBhcm91bmQgdGhlIGFzLW5hbWUKLSAgIGJlY2F1c2UgaXQgZW5kcyB3aXRoICItIi4gVGhl IGFzLW5hbWUgbXVzdCBiZWdpbiB3aXRoICIhIiBvciByZWNlaXZpbmcKLSAgIEtlcm1pdCB3aWxs IG5vdCByZWNvZ25pemUgaXQgYXMgYSBjb21tYW5kLiBUaGUgQ1NFTkQgY29tbWFuZCBtdXN0IE5P VAotICAgYmVnaW4gd2l0aCAiISIgdW5sZXNzIHlvdSBhcmUgcnVubmluZyBhIGNvbW1hbmQgd2hv c2UgbmFtZSByZWFsbHkgZG9lcwotICAgc3RhcnQgdGhhdCBjaGFyYWN0ZXIuCi0KLSAgIFNpbWls YXJseSwgeW91IGhhdmUgYSBLZXJtaXQgc2VydmVyIHNlbmQgYSBkaXJlY3RvcnkgdHJlZSB0byBi ZQotICAgdW5wYWNrZWQgb24gdGhlIGNsaWVudCBlbmQ6Ci0KLSAgQ0dFVCB7IXRhciBjZiAtIC4g fCBnemlwIC1jfSB7Z3VuemlwIC1jIHwgdGFyIHhmIC19Ci0KLSAgIG9yOgotCi0gIEdFVCAvQ09N TUFORCB7IXRhciBjZiAtIC4gfCBnemlwIC1jfSAvYXM6e2d1bnppcCAtYyB8IHRhciB4ZiAtfQot Ci0gICBOb3RpY2UgaG93LCBpbiB0aGlzIGNhc2UsIHRoZSBiYW5nIGlzIHJlcXVpcmVkIGluIHRo ZSByZW1vdGUgY29tbWFuZCwKLSAgIHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gYSBmaWxlbmFtZSwg YnV0IG5vdCBpbiB0aGUgbG9jYWwgY29tbWFuZCwgc2luY2UKLSAgIGJ5IGRlZmluaXRpb24gb2Yg Q0dFVCAob3IgR0VUIC9DT01NQU5EKSwgaXQgaXMga25vd24gdG8gYmUgYSBjb21tYW5kLgotCi0g ICBTRU5EIGFuZCBSRUNFSVZFIEZJTFRFUnMgc3VwZXJzZWRlIHRoZSBiYW5nIGZlYXR1cmUuIEZv ciBleGFtcGxlLCBpZiBhCi0gICBmaWxlIGFycml2ZXMgdW5kZXIgdGhlIG5hbWUgIiFndW56aXAg LWMgfCB0YXIgeGYgLSIsIGJ1dCB0aGUgcmVjZWl2aW5nCi0gICBLZXJtaXQgYWxzbyBoYXMgYmVl biBnaXZlbiBhIGNvbW1hbmQgbGlrZToKLQotICBzZXQgcmVjZWl2ZSBmaWx0ZXIgc29ydCAtciA+ IFx2KGZpbGVuYW1lKQotCi0gICB0aGVuIHRoZSBpbmNvbWluZyBkYXRhIHdpbGwgYmUgc29ydGVk IHJhdGhlciB0aGFuIGd1bnppcHBlZC4KLQotICAgRmluYWxseSwgaWYgU0VUIFRSQU5TRkVSIFBJ UEVTIGlzIE9OIChhbmQgaW4gdGhpcyBjYXNlLCB0aGlzIG11c3QgYmUKLSAgIGRvbmUgaW4geW91 ciBDLUtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlKSwgeW91IGNhbiBzZW5kIGZyb20gYSBwaXBl IG9uCi0gICB0aGUgQy1LZXJtaXQgY29tbWFuZCBsaW5lOgotCi0gIGtlcm1pdCAtcyAiIWZpbmdl ciB8IHNvcnQgLXIiIC1hIHVzZXJsaXN0Ci0KLSAgIEluIHRoaXMgY2FzZSB0aGUgImZpbGVuYW1l IiBjb250YWlucyBzcGFjZXMgYW5kIHNvIG11c3QgYmUgcXVvdGluZwotICAgdXNpbmcgeW91ciBz aGVsbCdzIHF1b3RpbmcgcnVsZXMuCi0KLTQuMi41LiBTdWNjZXNzIGFuZCBGYWlsdXJlIG9mIFBp cGVkIENvbW1hbmRzCi0KLSAgIENvbW1hbmRzIG9yIHByb2dyYW1zIHN0YXJ0ZWQgYnkgS2VybWl0 IGFzIGEgcmVzdWx0IG9mIENTRU5EIG9yIENSRUNFSVZFCi0gICBjb21tYW5kcywgQ0dFVCwgU0VO RCAvQ09NTUFORCwgUkVESVJFQ1QgY29tbWFuZHMgKHNlZSBbNDU1XVNlY3Rpb24KLSAgIDQuMi44 LjIpLCBpbXBsaWNpdCB1c2Ugb2YgcGlwZXMsIFJVTiBjb21tYW5kcywgYW5kIHNvIGZvcnRoLCBz aG91bGQKLSAgIHJldHVybiB0aGVpciBleGl0IHN0YXR1cyBjb2RlcyB0byB0aGUgS2VybWl0IGNv bW1hbmQgdGhhdCBjYXVzZWQgdGhlbQotICAgdG8gYmUgcnVuLCBhbmQgdGhlcmVmb3JlIElGIFNV Q0NFU1MgYW5kIElGIEZBSUxVUkUgdGVzdHMgYWZ0ZXIgdGhlc2UKLSAgIGNvbW1hbmRzIHNob3Vs ZCB3b3JrIGFzIGV4cGVjdGVkLiBGb3IgZXhhbXBsZToKLQotICBDU0VORCBibGFoIDwgZmlsZW5h bWUKLQotICAgc2hvdWxkIGZhaWwgaWYgdGhlcmUgaXMgbm8gY29tbWFuZCBjYWxsZWQgImJsYWgi IG9yIGlmIHRoZXJlIGlzIG5vIGZpbGUKLSAgIGNhbGxlZCAiZmlsZW5hbWUiLiBIb3dldmVyLCB0 aGlzIGlzIG5vdCBmb29scHJvb2YgYW5kIHNvbWV0aW1lcwotICAgQy1LZXJtaXQgbWlnaHQgdGhp bmsgYSBjb21tYW5kIHN1Y2NlZWRlZCB3aGVuIGl0IGZhaWxlZCwgb3IgdmljZSB2ZXJzYS4KLSAg IFRoaXMgaXMgbW9zdCBsaWtlbHkgdG8gaGFwcGVuIHdoZW4gdGhlIGhpZ2hseSBzeXN0ZW0tZGVw ZW5kZW50IG1ldGhvZHMKLSAgIHRoYXQgS2VybWl0IG11c3QgdXNlIHRvIGRldGVybWluZSBhIGNv bW1hbmQncyBleGl0IHN0YXR1cyBjb2RlIGRvIG5vdAotICAgc3VwcGx5IHRoZSByaWdodCBpbmZv cm1hdGlvbi4KLQotICAgSXQgY2FuIGFsc28gaGFwcGVuIGJlY2F1c2Ugc29tZSBjb21tYW5kcyBt aWdodCBkZWZpbmUgc3VjY2VzcyBhbmQKLSAgIGZhaWx1cmUgZGlmZmVyZW50bHkgZnJvbSB3aGF0 IHlvdSBleHBlY3QsIG9yIGJlY2F1c2UgeW91IGFyZSB1c2luZyBhCi0gICBwaXBlbGluZSBjb21w b3NlZCBvZiBtYW55IGNvbW1hbmRzLCBhbmQgb25lIG9mIHRoZW0gZmFpbHMgdG8gcGFzcwotICAg ZmFpbGluZyBleGl0IHN0YXR1cyBjb2RlcyB1cCB0aGUgY2hhaW4uIFRoZSBtb3N0IGxpa2VseSBj dWxwcml0IGlzIHRoZQotICAgc2hlbGwgaXRzZWxmLCB3aGljaCBpbiBtb3N0IGNhc2VzIG11c3Qg YmUgaW50ZXJwb3NlZCBiZXR3ZWVuIEtlcm1pdCBhbmQKLSAgIGFueSBleHRlcm5hbCBwcm9ncmFt IHRvIGJlIHJ1bi4KLQotICAgSW4gYW55IGNhc2UsIHlvdSBjYW4gZXhhbWluZSB0aGUgZm9sbG93 aW5nIHZhcmlhYmxlIHRvIGZpbmQgb3V0IHRoZQotICAgZXhpdCBzdGF0dXMgY29kZSByZXR1cm5l ZCB0byBLZXJtaXQgYnkgdGhlIHByb2Nlc3MgbW9zdCByZWNlbnRseSBydW4gYnkKLSAgIGFueSBj b21tYW5kIHRoYXQgcnVucyBleHRlcm5hbCBjb21tYW5kcyBvciBwcm9ncmFtcywgaW5jbHVkaW5n IENTRU5ELAotICAgQ1JFQ0VJVkUsIFJFRElSRUNULCBSVU4sIGV0YzoKLQotICBcdihwZXhpdHN0 YXQpCi0KLSAgIEluIFVOSVgsIFdpbmRvd3MgYW5kIE9TLzIsIHRoZSB2YWx1ZSBzaG91bGQgYmUg LTIgaWYgbm8gY29tbWFuZCBoYXMKLSAgIGJlZW4gcnVuIHlldCwgMCBpZiB0aGUgbW9zdCByZWNl bnQgY29tbWFuZCBzdWNjZWVkZWQsIC0xLCAtMywgb3IgLTQgaWYKLSAgIHRoZXJlIHdhcyBhbiBp bnRlcm5hbCBlcnJvciwgYW5kIGEgcG9zaXRpdmUgbnVtYmVyIHJldHVybmVkIGJ5IHRoZQotICAg Y29tbWFuZCBpdHNlbGYgaWYgdGhlIGNvbW1hbmQgZmFpbGVkLiBJZiB0aGUgbnVtYmVyIGlzIGlu IHRoZSByYW5nZQotICAgMS0xMjcsIHRoaXMgaXMgdGhlIHByb2dyYW0ncyBleGl0IHN0YXR1cyBj b2RlLiBJZiBpdCBpcyAxMjggb3IgZ3JlYXRlciwKLSAgIHRoaXMgaXMgc3VwcG9zZWQgdG8gaW5k aWNhdGUgdGhhdCB0aGUgY29tbWFuZCBvciBwcm9ncmFtIHdhcwotICAgaW50ZXJydXB0ZWQgb3Ig dGVybWluYXRlZCBmcm9tIG91dHNpZGUgaXRzZWxmLgotCi0gICBJbiBXaW5kb3dzIDk1IGFuZCA5 OCwgdGhlIHJldHVybiB2YWx1ZXMgb2YgdGhlIGRlZmF1bHQgc2hlbGwgYXJlCi0gICB1bnJlbGlh YmxlOyB2YXJpb3VzIHRoaXJkLXBhcnR5IHNoZWxscyBjYW4gYmUgdXNlZCB0byB3b3JrIGFyb3Vu ZCB0aGlzCi0gICBkZWZpY2llbmN5LgotCi0gICBJbiBWTVMsIGl0IGlzIHRoZSBhY3R1YWwgZXhp dCBzdGF0dXMgY29kZSBvZiB0aGUgY29tbWFuZCB0aGF0IHdhcyBydW4uCi0gICBUaGlzIGlzIGFu IG9kZCBudW1iZXIgaWYgdGhlIGNvbW1hbmQgc3VjY2VlZGVkLCBhbmQgYW4gZXZlbiBudW1iZXIg aWYKLSAgIGl0IGZhaWxlZC4gWW91IGNhbiBzZWUgdGhlIGFzc29jaWF0ZWQgbWVzc2FnZSBhcyBm b2xsb3dzOgotCi0gIHJ1biB3cml0ZSBzeXMkb3V0cHV0IGYkbWVzc2FnZShcdihwZXhpdHN0YXQp KQotCi0gICBPciwgbW9yZSBjb252ZW5pZW50bHksIHVzZSB0aGUgbmV3IEtlcm1pdCBmdW5jdGlv bjoKLQotICBlY2hvIFxmZXJyc3RyaW5nKFx2KHBleGl0c3RhdCkpCi0KLSAgIHdoaWNoIGNvbnZl cnRzIGEgc3lzdGVtIGVycm9yIGNvZGUgKG51bWJlcikgdG8gdGhlIGNvcnJlc3BvbmRpbmcKLSAg IG1lc3NhZ2UuCi0KLTQuMi42LiBDYXV0aW9ucyBhYm91dCBVc2luZyBQaXBlcyB0byBUcmFuc2Zl ciBEaXJlY3RvcnkgVHJlZXMKLQotICAgQWx0aG91Z2ggdXRpbGl0aWVzIHN1Y2ggYXMgdGFyIGFu ZCB6aXAvdW56aXAgbWlnaHQgYmUgYXZhaWxhYmxlIG9uCi0gICBkaWZmZXJlbnQgcGxhdGZvcm1z IChzdWNoIGFzIFVOSVggYW5kIFdpbmRvd3MpLCB0aGlzIGRvZXMgbm90Ci0gICBuZWNlc3Nhcmls eSBtZWFuIHlvdSBjYW4gdXNlIHRoZW0gc3VjY2Vzc2Z1bGx5IHRvIHRyYW5zZmVyIGRpcmVjdG9y eQotICAgdHJlZXMgYmV0d2VlbiB1bmxpa2UgcGxhdGZvcm1zLiBGb3IgZXhhbXBsZToKLQotICBD U0VORCB7dGFyIGNmIC0gLiB8IGd6aXAgLWN9IHshZ3VuemlwIC1jIHwgdGFyIHhmIC19Ci0KLSAg IHdoZW4gdXNlZCBmcm9tIFVOSVggdG8gV2luZG93cyB3aWxsIGhhdmUgc2F0aXNmYWN0b3J5IHJl c3VsdHMgZm9yCi0gICBiaW5hcnkgZmlsZXMsIGJ1dCBub3QgZm9yIHRleHQgZmlsZXMuIFVOSVgg dGV4dCBmaWxlcyBoYXZlIGxpbmVzIGVuZGluZwotICAgd2l0aCBMaW5lZmVlZCAoTEYpIG9ubHks IHdoZXJlYXMgV2luZG93cyB0ZXh0IGZpbGVzIGhhdmUgbGluZXMgZW5kaW5nCi0gICBpbiBDYXJy aWFnZSBSZXR1cm4gYW5kIExpbmVmZWVkIChDUkxGKS4gVGh1cyBhbnkgdGV4dCBmaWxlcyB0aGF0 IHdlcmUKLSAgIGluIHRoZSBhcmNoaXZlIGZvcm1lZCBieSB0aGUgZmlyc3QgdGFyIGNvbW1hbmQg d2lsbCBiZSB1bnBhY2tlZCBieSB0aGUKLSAgIHNlY29uZCB0YXIgY29tbWFuZCBpbiB0aGVpciBv cmlnaW5hbCBmb3JtLCBhbmQgd2lsbCBkaXNwbGF5IGFuZCBwcmludAotICAgaW5jb3JyZWN0bHkg aW4gV2luZG93cyAoZXhjZXB0IGluIGFwcGxpY2F0aW9ucyB0aGF0IGhhdmUgYmVlbgotICAgZXhw bGljaXRseSBjb2RlZCB0byBoYW5kbGUgVU5JWC1mb3JtYXQgdGV4dCBmaWxlcykuIE9uIHRoZSBv dGhlciBoYW5kCi0gICBpZiB5b3UgdG9sZCBnemlwIHRvIHVzZSAidGV4dCBtb2RlIiB0byBkbyBy ZWNvcmQgZm9ybWF0IGNvbnZlcnNpb24KLSAgIChhc3N1bWluZyB0aGVyZSB3YXMgYSB3YXkgdG8g dGVsbCBpdCwgYXMgdGhlcmUgaXMgd2l0aCBtb3N0ICJ6aXAiCi0gICBwcm9ncmFtcyksIHRoaXMg d291bGQgZGVzdHJveSBhbnkgYmluYXJ5IGZpbGVzIGluIHRoZSBhcmNoaXZlLgotCi0gICBGdXJ0 aGVybW9yZSwgaWYgdGhlIGFyY2hpdmUgY29udGFpbnMgdGV4dCBmaWxlcyB0aGF0IGFyZSB3cml0 dGVuIGluCi0gICBsYW5ndWFnZXMgb3RoZXIgdGhhbiBFbmdsaXNoLCB0aGUgInNwZWNpYWwiIChh Y2NlbnRlZCBhbmQvb3Igbm9uLVJvbWFuKQotICAgY2hhcmFjdGVycyBhcmUgTk9UIHRyYW5zbGF0 ZWQsIGFuZCBhcmUgdGhlcmVmb3JlIGxpa2VseSBzaG93IHVwIGFzCi0gICBnaWJiZXJpc2ggb24g dGhlIHRhcmdldCBzeXN0ZW0uIEZvciBleGFtcGxlLCBXZXN0IEV1cm9wZWFuIGxhbmd1YWdlcwot ICAgYXJlIHVzdWFsbHkgZW5jb2RlZCBpbiBJU08gTGF0aW4gQWxwaGFiZXQgMSBpbiBVTklYLCBi dXQgaW4gUEMgY29kZQotICAgcGFnZSA4NTAgb24gdGhlIFBDLiBDYXBpdGFsIEEgd2l0aCBhY3V0 ZSBhY2NlbnQgaXMgY29kZSBwb2ludCAxOTMKLSAgIChkZWNpbWFsKSBMYXRpbi0xLCBidXQgMTgx IGluIENQODUwLiBTbyBBLWFjdXRlIGluIHRoZSBVTklYIGZpbGUKLSAgIGJlY29tZXMgTWlkZGxl IEJveCBCb3R0b20gb24gdGhlIFBDLCBhbmQgc2ltaWxhcmx5IGZvciBhbGwgdGhlIG90aGVyCi0g ICBzcGVjaWFsIGNoYXJhY3RlcnMsIGFuZCBmb3IgYWxsIG90aGVyIGxhbmd1YWdlcyAtLSBHcmVl aywgUnVzc2lhbiwKLSAgIEhlYnJldywgSmFwYW5lc2UsIGV0Yy4KLQotICAgU28gd2hlbiB0cmFu c2ZlcnJpbmcgdGV4dCBmaWxlcyBiZXR3ZWVuIHVubGlrZSBwbGF0Zm9ybXMsIHlvdSBzaG91bGQK LSAgIHVzZSBkaXJlY3QgS2VybWl0IGZpbGUgdHJhbnNmZXJzIHNvIEtlcm1pdCBjYW4gYXBwbHkg dGhlIG5lZWRlZAotICAgcmVjb3JkLWZvcm1hdCBhbmQgY2hhcmFjdGVyLXNldCB0cmFuc2Zvcm1h dGlvbnMuIFVzZSBwaXBlbGluZXMKLSAgIGNvbnRhaW5pbmcgYXJjaGl2ZXJzIGxpa2UgdGFyIG9y IHppcCBvbmx5IGlmIGFsbCB0aGUgZmlsZXMgYXJlIGJpbmFyeQotICAgb3IgdGhlIHR3byBzeXN0 ZW1zIHVzZSB0aGUgc2FtZSByZWNvcmQgZm9ybWF0IGFuZCBjaGFyYWN0ZXIgc2V0IGZvcgotICAg dGV4dCBmaWxlcy4KLQotICAgQWxzbyBzZWUgWzQ1Nl1TZWN0aW9ucyA0LjMsIFs0NTddNC4xMCwg WzQ1OF00LjExLCBhbmQgWzQ1OV00LjE1IGZvciBob3cKLSAgIHRvIHRyYW5zZmVyIGRpcmVjdG9y eSB0cmVlcyBiZXR3ZWVuIGJvdGggbGlrZSBhbmQgdW5saWtlIHN5c3RlbXMKLSAgIGRpcmVjdGx5 IHdpdGggS2VybWl0LgotCi00LjIuNy4gUGlwZXMgYW5kIEVuY3J5cHRpb24KLQotICAgT2YgY291 cnNlIHBpcGVsaW5lcyBjb3VsZCBiZSB1c2VkIGZvciBlbmNyeXB0ZWQgZmlsZSB0cmFuc2ZlcnMs Ci0gICBhc3N1bWluZyBwcm9wZXIgcHJlY2F1dGlvbnMgY291bGQgYmUgdGFrZW4gY29uY2Vybmlu ZyB0aGUgdHJhbnNtaXNzaW9uCi0gICBvZiB0aGUga2V5LiBCdXQgdGhlcmUgaXMgcmFyZWx5IGEg Z29vZCB3YXkgdG8gZG8gdGhpcy4gVG8gaWxsdXN0cmF0ZQotICAgdXNpbmcgVU5JWCBjcnlwdDoK LQotICBjc2VuZCB7Y3J5cHQga2V5IDwgZmlsZW5hbWV9IHshY3J5cHQga2V5ID4gZmlsZW5hbWV9 Ci0KLSAgIE9yLCBtb3JlIGFtYml0aW91c2x5OgotCi0gIGNzZW5kIHt0YXIgY2YgLSAuIHwgZ3pp cCAtYyB8IGNyeXB0IGtleX0geyFjcnlwdCBrZXkgfCBndW56aXAgLWMgfCB0YXIgeGYgLX0KLQot ICAgdHJhbnNtaXRzIHRoZSBrZXkgaW4gdGhlIGZpbGUgaGVhZGVyIHBhY2tldCBhcyBwYXJ0IG9m IHRoZSAoY2xlYXItdGV4dCkKLSAgIHJlbW90ZSBjb21tYW5kLCBkZWZlYXRpbmcgdGhlIGVudGly ZSBwdXJwb3NlIG9mIGVuY3J5cHRpbmcgdGhlIGZpbGUKLSAgIGRhdGEuCi0KLSAgIEJ1dCBpZiB5 b3UgYXJlIGNvbm5lY3RlZCBpbiB0ZXJtaW5hbCBtb2RlIHRvIHRoZSByZW1vdGUgY29tcHV0ZXIg YW5kCi0gICB0eXBlOgotCi0gIGNyZWNlaXZlIHtjcnlwdCBrZXkgPiBmaWxlbmFtZX0KLQotICAg YXQgdGhlIHJlbW90ZSBLZXJtaXQgcHJvbXB0LCB5b3UgaGF2ZSBhbHNvIHRyYW5zbWl0dGVkIHRo ZSBrZXkgaW4gY2xlYXIKLSAgIHRleHQgb3ZlciB0aGUgY29tbXVuaWNhdGlvbnMgbGluay4KLQot ICAgQXQgcHJlc2VudCwgdGhlIG9ubHkgc2VjdXJlIHdheSB0byB1c2UgQ1NFTkQgYW5kIENSRUNF SVZFIHdpdGggYW4KLSAgIGVuY3J5cHRpb24gZmlsdGVyIGlzIHRvIGhhdmUgYSBodW1hbiBvcGVy YXRvciBhdCBib3RoIGVuZHMsIHNvIHRoZSBrZXkKLSAgIGRvZXMgbm90IGhhdmUgdG8gYmUgdHJh bnNtaXR0ZWQuCi0KLSAgIFRoZW9yZXRpY2FsbHkgaXQgd291bGQgYmUgcG9zc2libGUgdG8gdXNl IFBHUCBzb2Z0d2FyZSAoUHJldHR5IEdvb2QKLSAgIFByaXZhY3ksIGJ5IFBoaWwgWmltbWVybWFu LCBQaGlsJ3MgUHJldHR5IEdvb2QgU29mdHdhcmUpIHRvIGF2b2lkIGtleQotICAgdHJhbnNtaXNz aW9uIChzaW5jZSBQR1AgdXNlcyBzZXBhcmF0ZSBwdWJsaWMgYW5kIHByaXZhdGUga2V5IGFuZCAi bGV0cwotICAgeW91IGNvbW11bmljYXRlIHNlY3VyZWx5IHdpdGggcGVvcGxlIHlvdSd2ZSBuZXZl ciBtZXQsIHdpdGggbm8gc2VjdXJlCi0gICBjaGFubmVscyBuZWVkZWQgZm9yIHByaW9yIGV4Y2hh bmdlIG9mIGtleXMiKSwgYnV0IHRoZSBzcGVjaWZpYyBtZXRob2QKLSAgIGhhcyB5ZXQgdG8gYmUg d29ya2VkIG91dC4KLQotICAgICBISU5UOiBTZWUgdGhlIFBHUCBVc2VyJ3MgR3VpZGUsIGUuZy4g YXQ6Ci0gICAgIFs0NjBdaHR0cDovL3d3dy50ZWxzdHJhLmNvbS5hdS9kb2NzL1BHUC8KLSAgICAg RXNwZWNpYWxseSB0aGUgdG9waWMgIlVzaW5nIFBHUCBhcyBhIFVOSVgtU3R5bGUgRmlsdGVyIjoK LSAgICAgWzQ2MV1odHRwOi8vd3d3LnRlbHN0cmEuY29tLmF1L2RvY3MvUEdQL3BncGRvYzIvcGdw ZG9jMl8xNy5odG1sCi0KLSAgIEluIGFueSBjYXNlLCBiZXR0ZXIgYW5kIG1vcmUgY29udmVuaWVu dCBzZWN1cml0eSBvcHRpb25zIGFyZSBub3cKLSAgIGF2YWlsYWJsZTogS2VyYmVyb3MgYXV0aGVu dGljYXRpb24gYW5kIGVuY3J5cHRpb24gKFs0NjJdQ0xJQ0sgSEVSRSBmb3IKLSAgIGRldGFpbHMp IGFuZCB0aGUgbmV3IGFiaWxpdHkgdG8gcnVuIEMtS2VybWl0ICJ0aG91Z2giIG90aGVyCi0gICBj b21tdW5pY2F0aW9uIHByb2dyYW1zLCBkZXNjcmliZWQgaW4gWzQ2M11TZWN0aW9uIDIuNy4KLQot NC4yLjguIENvbW1hbmRzIGFuZCBGdW5jdGlvbnMgUmVsYXRlZCB0byBQaXBlcwotCi00LjIuOC4x LiBUaGUgT1BFTiAhUkVBRCBhbmQgT1BFTiAhV1JJVEUgQ29tbWFuZHMKLQotICAgVGhlc2UgYXJl IGRlc2NyaWJlZCBpbiBbNDY0XVVzaW5nIEMtS2VybWl0LCBhbmQgYXJlIGdlbmVyYWxseSB1c2Vm dWwKLSAgIHdpdGggcmVhZGluZyBvdXRwdXQgZnJvbSBjb21tYW5kcyB0aGF0IHByb2R1Y2UgbW9y ZSB0aGFuIG9uZSBsaW5lIG9uCi0gICB0aGVpciBzdGFuZGFyZCBvdXRwdXQsIG9yIHdyaXRpbmcg bXVsdGlwbGUgbGluZXMgaW50byBjb21tYW5kcyB0aGF0Ci0gICBhY2NlcHQgdGhlbSBvbiB0aGVp ciBzdGFuZGFyZCBpbnB1dC4KLQotICAgSW4gQy1LZXJtaXQgNy4wIENMT1NFICFSRUFEIGlzIGFj Y2VwdGVkIGFzIGEgc3lub255bSBmb3IgQ0xPU0UgUkVBRCwKLSAgIGFuZCBDTE9TRSAhV1JJVEUg Zm9yIENMT1NFIFdSSVRFLgotCi0gICBUZXN0aW5nIHRoZSBzdWNjZXNzIGFuZCBmYWlsdXJlIG9m IHRoZXNlIGNvbW1hbmRzLCBob3dldmVyLCBjYW4gYmUgYQotICAgYml0IHRyaWNreS4gQ29uc2lk ZXI6Ci0KLSAgb3BlbiAhcmVhZCBsYWxhc2tqZnNsZGtmanNsZGtmagotCi0gICAod2hlcmUgImxh bGFza2pmc2xka2Zqc2xka2ZqIiBpcyBuZWl0aGVyIGEgdmFsaWQgY29tbWFuZCBub3IgdGhlIG5h bWUKLSAgIG9mIGEgcHJvZ3JhbSBvciBzY3JpcHQgdGhhdCBjYW4gYmUgcnVuKS4gT1BFTiAhUkVB RCwgaW4gVU5JWCBhdCBsZWFzdCwKLSAgIHRyYW5zbGF0ZXMgdGhpcyBpbnRvIGV4ZWNsKHNoZWxs cGF0aCxzaGVsbG5hbWUsIi1jIixjb21tYW5kKS4gVGhpcwotICAgbWVhbnMgaXQgc3RhcnRzIHlv dXIgcHJlZmVycmVkIHNoZWxsIChlLmcuIGZyb20gdGhlIFNIRUxMIGVudmlyb25tZW50Ci0gICB2 YXJpYWJsZSkgYW5kIGFza3MgaXQgdG8gZXhlY3V0ZSB0aGUgZ2l2ZW4gY29tbWFuZC4gSXQgbXVz dCBiZSB0aGlzCi0gICB3YXksIGJlY2F1c2UgeW91ciBjb21tYW5kIGNhbiBiZSBhIGVpdGhlciBh biBpbnRlcm5hbCBzaGVsbCBjb21tYW5kCi0gICAod2hpY2ggb25seSB5b3VyIHNoZWxsIGNhbiBl eGVjdXRlKSBvciBhbiBleHRlcm5hbCBjb21tYW5kLCB3aGljaCBvbmx5Ci0gICB5b3VyIHNoZWxs IGtub3dzIGhvdyB0byBmaW5kIChpdCBrbm93cyB5b3VyIFBBVEggYW5kIGludGVycHJldHMsIGV0 YykuCi0gICBUaGVyZWZvcmUgdW5sZXNzIE9QRU4gIVJFQUQgY2FuJ3Qgc3RhcnQgeW91ciBzaGVs bCwgaXQgYWx3YXlzIHN1Y2NlZWRzLgotCi0gICBDb250aW51aW5nIHdpdGggdGhlIG5vbmV4aXN0 ZW50LWNvbW1hbmQgZXhhbXBsZToKLQotICBDLUtlcm1pdD4gb3BlbiAhcmVhZCBsYWxhc2tqZnNs ZGtmanNsZGtmagotICBDLUtlcm1pdD4gc3RhdHVzCi0gICBTVUNDRVNTCi0gIEMtS2VybWl0PiBy ZWFkIGxpbmUKLSAgQy1LZXJtaXQ+IHN0YXR1cwotICAgU1VDQ0VTUwotICBDLUtlcm1pdD4gZWNo byAiXG0obGluZSkiCi0gICJiYXNoOiBsYWxhc2tqZnNsZGtmanNsZGtmajogY29tbWFuZCBub3Qg Zm91bmQiCi0gIEMtS2VybWl0PiBjbG9zZSByZWFkCi0gIEMtS2VybWl0PiBzdGF0dXMKLSAgIEZB SUxVUkUKLSAgQy1LZXJtaXQ+Ci0KLSAgIEluIG90aGVyIHdvcmRzLCB0aGUgZmFpbHVyZSBjYW4g bm90IGJlIGRldGVjdGVkIG9uIE9QRU4sIHNpbmNlIHRoZSBPUEVOCi0gICBjb21tYW5kIHN1Y2Nl ZWRzIGlmIGl0IGNhbiBzdGFydCB5b3VyIHNoZWxsLiBJdCBjYW4ndCBiZSBkZXRlY3RlZCBvbgot ICAgUkVBRCwgc2luY2UgYWxsIHRoaXMgZG9lcyBpcyByZWFkIG91dHB1dCBmcm9tIHRoZSBzaGVs bCwgd2hpY2ggaW4gdGhpcwotICAgY2FzZSBoYXBwZW5zIHRvIGJlIGFuIGVycm9yIG1lc3NhZ2Uu IEhvd2V2ZXIsIGZhaWx1cmUgSVMgZGV0ZWN0ZWQgdXBvbgotICAgY2xvc2UsIHNpbmNlIHRoaXMg aXMgdGhlIG9jY2FzaW9uIHVwb24gd2hpY2ggdGhlIHNoZWxsIGdpdmVzIEtlcm1pdCBpdHMKLSAg IGV4aXQgc3RhdHVzIGNvZGUuCi0KLSAgIEZvciBhbiBpbGx1c3RyYXRpb24gb2YgdGhpcyBzaXR1 YXRpb24sIHNlZSBbNDY1XVNlY3Rpb24gMi4xNC4KLQotNC4yLjguMi4gVGhlIFJFRElSRUNUIENv bW1hbmQKLQotICAgQSBzZWNvbmQgbWV0aG9kIG9mIEkvTyByZWRpcmVjdGlvbiBpcyBvZmZlcmVk IGJ5IHRoZSBSRURJUkVDVCBjb21tYW5kLgotICAgVGhpcyBpcyBhIHJhdGhlciBhZHZhbmNlZCBh bmQgdHJpY2t5IGZlYXR1cmUgdGhhdCBpcyBwcmVzZW50bHkKLSAgIHN1cHBvcnRlZCBvbmx5IGlu IFVOSVggQy1LZXJtaXQsIGluIE9TLTkgQy1LZXJtaXQsIGFuZCBpbiBLZXJtaXQgOTUuCi0gICBT eW50YXg6Ci0KLSAgIFJFRElSRUNUIGNvbW1hbmQKLSAgICAgICAgICBSdW5zIHRoZSBnaXZlbiBj b21tYW5kLCBzZW5kaW5nIGl0cyBzdGFuZGFyZCBvdXRwdXQgdG8gdGhlCi0gICAgICAgICAgY3Vy cmVudCBjb21tdW5pY2F0aW9ucyBjaGFubmVsIChTRVQgTElORSwgU0VUIFBPUlQsIG9yIFNFVCBI T1NUCi0gICAgICAgICAgY29ubmVjdGlvbiksIGFuZCByZWFkaW5nIGl0cyBzdGFuZGFyZCBpbnB1 dCBmcm9tIHRoZSBzYW1lCi0gICAgICAgICAgY29ubmVjdGlvbi4gV29ya3Mgb25seSBpbiBsb2Nh bCBtb2RlIC0tIGkuZS4gYSBjb25uZWN0aW9uIGlzCi0gICAgICAgICAgcmVxdWlyZWQgLS0gYW5k IHRoZW4gb25seSBpZiB0aGUgZ2l2ZW4gY29tbWFuZCB1c2VzIFN0YW5kYXJkCi0gICAgICAgICAg SS9PLgotCi0gICBFeGFtcGxlOgotCi0gIHJlZGlyZWN0IGZpbmdlcgotCi0gICBydW5zIHRoZSBs b2NhbCAiZmluZ2VyIiBjb21tYW5kIGFuZCBzZW5kcyBpdHMgb3V0cHV0IG92ZXIgdGhlCi0gICBj b25uZWN0aW9uIGFzIHBsYWluIHRleHQsIHdoZXJlIHByZXN1bWFibHkgdGhlcmUgaXMgYSBwcm9j ZXNzIHNldCB1cCB0bwotICAgcmVhZCBpdC4gQW5vdGhlciBleGFtcGxlOgotCi0gIHJlZGlyZWN0 IGZpbmdlciB8IHNvcnQgLXIKLQotICAgc2hvd3MgdGhlIHVzZSBvZiBhIHBpcGVsaW5lLgotCi0g ICBOb3RlOiBSRURJUkVDVCBkaWZmZXJzIGZyb20gQ1NFTkQvQ1JFQ0VJVkUgaW4gdHdvIGltcG9y dGFudCB3YXlzOiAoMSkKLSAgIGl0IGRvZXMgbm90IHVzZSB0aGUgS2VybWl0IHByb3RvY29sLCBh bmQgKDIpIGl0IHVzZXMgYSBiaWRpcmVjdGlvbmFsCi0gICBwaXBlIHJhdGhlciB0aGFuIGEgb25l LXdheSBwaXBlLgotCi0gICBUaGUgcHJpbWFyeSB1c2Ugb2YgdGhlIFJFRElSRUNUIGNvbW1hbmQg aXMgdG8gcnVuIGV4dGVybmFsIHByb3RvY29scywKLSAgIHN1Y2ggYXMgc3ovcnogaW4gVU5JWCBm b3IgWk1PREVNLCB3aGVuIHRoZXkgd29yayBvdmVyIFN0YW5kYXJkIEkvTygqKS4KLSAgIEV4YW1w bGU6Ci0KLSAgc2V0IGhvc3QgeHl6Y29ycC5jb20KLSAgKGxvZ2luLCBldGMpCi0gIHJlZGlyZWN0 IHN6IG9vZmEuemlwCi0KLSAgIGxldHMgeW91IG1ha2UgYSBUZWxuZXQgY29ubmVjdGlvbiB3aXRo IEMtS2VybWl0IGFuZCB0aGVuIGRvIGEgWk1PREVNCi0gICB0cmFuc2ZlciBvdmVyIGl0LiBaTU9E RU0gcHJvdG9jb2wgbWVzc2FnZXMgZ28gYm90aCB3YXlzIG92ZXIgdGhlIHNhbWUKLSAgIGNvbm5l Y3Rpb24gc2ltdWx0YW5lb3VzbHkuCi0KLSAgIEl0IGlzIHBvc3NpYmxlIHRvIHVzZSBDLUtlcm1p dCBvbiBVTklYIGFzIHlvdXIgUFBQIGRpYWxlciBhbmQgdGhlbiB0bwotICAgUkVESVJFQ1QgdGhl IGNvbm5lY3Rpb24gdG8gdGhlIFBQUCBzb2Z0d2FyZSwgYnV0IEMtS2VybWl0IDcuMCBvZmZlcnMg YQotICAgYmV0dGVyIGFwcHJvYWNoIHRvIFBQUCBkaWFsaW5nIGluIGl0cyBuZXcgRVhFQyBjb21t YW5kIChbNDY2XVNlY3Rpb24KLSAgIDEuMjMpLgotCi0gICBJbiB0aGVvcnksIHlvdSBjYW4gYWxz byByZWRpcmVjdCBhbiBpbnRlcmFjdGl2ZSBwcm9jZXNzLiBGb3IgZXhhbXBsZSwKLSAgIHN1cHBv c2UgeW91IHRlbGwgS2VybWl0IDk1IHRvIHdhaXQgZm9yIGFuIGluY29taW5nIFRDUC9JUCBjb25u ZWN0aW9uOgotCi0gIHNldCBob3N0ICogMzAwMAotCi0gICBhbmQgdGhlbiB0ZWxsIEMtS2VybWl0 IG9uIFVOSVggdG86Ci0KLSAgc2V0IGhvc3Qga2VybWl0OTVob3N0bmFtZSAzMDAwCi0gIHJlZGly ZWN0IGtzaAotCi0gICBhbmQgdGhlbiB0ZWxsIEtlcm1pdCA5NSB0byBDT05ORUNUOiBub3cgeW91 IGFyZSB0YWxraW5nIHRvIHRoZSBVTklYCi0gICBLLXNoZWxsOyB5b3UgY2FuIGdpdmUgY29tbWFu ZHMgKHB3ZCwgbHMsIGV0YykgYW5kIHNlZSB0aGUgcmVzdWx0cy4gSW4KLSAgIHByYWN0aWNlLCB0 aGUgSy1zaGVsbCdzIHRlcm1pbmFsIG1vZGVzIGFyZSBtZXNzZWQgdXAgYmVjYXVzZSAoYSkgaXQg aXMKLSAgIG5vdCBnb2luZyB0aHJvdWdoIHRoZSBVbml4IHRlcm1pbmFsIGRyaXZlciwgYW5kIChi KSBpdCBpcyAic21hcnQiIGFuZAotICAga25vd3MgaXQgaXMgYmVpbmcgcmVkaXJlY3RlZCwgYW5k IHNvIGFjdHMgaW4gYSBkZWNpZGVkbHkgaW5ob3NwaXRhYmxlCi0gICBtYW5uZXIgKG90aGVyIGFw cGxpY2F0aW9ucyBsaWtlIEVNQUNTLCB2aSwgZXRjLCBzaW1wbHkgcmVmdXNlIHRvIHJ1biBpZgot ICAgdGhlaXIgc3RhbmRhcmQgaS9vIGhhcyBiZWVuIHJlZGlyZWN0ZWQpLgotCi0gICAgICgqKSBU aGUgcHVibGljbHktZGlzdHJpYnV0ZWQgc3ovcnogcHJvZ3JhbXMgZG8gbm90IHdvcmsgYXMgY2xp ZW50cy4KLSAgICAgSG93ZXZlciwgT21lbiBUZWNobm9sb2d5IGRvZXMgb2ZmZXIgYW4gdXAtdG8t ZGF0ZSByZWRpcmVjdGFibGUKLSAgICAgY2xpZW50IFhZWk1PREVNIHByb2dyYW0gY2FsbGVkIGNy enN6LgotCi00LjIuOC4zLiBSZWNlaXZpbmcgTWFpbCBhbmQgUHJpbnQgSm9icwotCi0gICBBcyBv ZiA3LjAsIGFuZCBpbiBVTklYIG9ubHksIGZpbGVzIHRoYXQgYXJlIHNlbnQgdG8gQy1LZXJtaXQg YXMgbWFpbAotICAgKHdoZW4gdGhlIG90aGVyIEtlcm1pdCB1c2VzIGEgTUFJTCBvciBTRU5EIC9N QUlMIGNvbW1hbmQpIG9yIHRvIGJlCi0gICBwcmludGVkICh2aWEgUkVNT1RFIFBSSU5UIG9yIFNF TkQgL1BSSU5UKSBhcmUgbm93IHBpcGVkIGRpcmVjdGx5IHRvIHRoZQotICAgbWFpbCBvciBwcmlu dCBwcm9ncmFtLCByYXRoZXIgdGhhbiB3cml0dGVuIHRvIHRlbXBvcmFyeSBmaWxlcyBhbmQgdGhl bgotICAgbWFpbGVkIG9yIHByaW50ZWQgYW5kIHRoZW4gZGVsZXRlZC4gVGhpcyBoYXMgdGhlIGFk dmFudGFnZXMgb2YgKGEpIG5vdAotICAgcmVxdWlyaW5nIGEgdGVtcG9yYXJ5IGZpbGUsIGFuZCAo YikgYWxsb3dpbmcgbWFpbCB0byBoYXZlIGEgcHJvcGVyCi0gICBzdWJqZWN0IGluIHBsYWNlIG9m IHRoZSBmaWxlbmFtZS4gVGVtcG9yYXJ5IGZpbGVzIHdlcmUgYmFkIG5vdCBvbmx5Ci0gICBiZWNh dXNlIHRoZXkgcmVxdWlyZWQgKGEpIHNwYWNlLCBhbmQgKGIpIHdyaXRhYmlsaXR5IG9mIHRoZSBj dXJyZW50Ci0gICBkaXJlY3RvcnksIGJ1dCBhbHNvIGJlY2F1c2UgdXNpbmcgdGhlbSBjb3VsZCBy ZXN1bHQgaW4gd2lwaW5nIG91dCBhbgotICAgZXhpc3RpbmcgZmlsZS4gU2VlIFs0NjddU2VjdGlv biA0LjcgZm9yIG1vcmUgYWJvdXQgU0VORCAvTUFJTCBhbmQgU0VORAotICAgL1BSSU5ULgotCi00 LjIuOC40LiBQaXBlLVJlbGF0ZWQgRnVuY3Rpb25zCi0KLSAgIFRoZSBcZmNvbW1hbmQoY29tbWFu ZCkgZnVuY3Rpb24gcnVucyB0aGUgZ2l2ZW4gc2hlbGwgb3Igc3lzdGVtIGNvbW1hbmQKLSAgIGFu ZCByZXR1cm5zIHRoZSBjb21tYW5kJ3Mgc3RhbmRhcmQgb3V0cHV0IGFzIGl0cyB2YWx1ZSAod2l0 aCBhbnkKLSAgIG5ld2xpbmUgY2hhcmFjdGVycyBzdHJpcHBlZCBmcm9tIHRoZSBlbmQpLCB1bmxl c3MgdGhlIHJlc3VsdCBpcyB0b28KLSAgIGxvbmcsIGluIHdoaWNoIGNhc2UgaXQgcmV0dXJucyB0 aGUgZW1wdHkgc3RyaW5nLiBUaGUgbWF4aW11bSBsZW5ndGggZm9yCi0gICB0aGUgcmVzdWx0IGlz IGF0IGxlYXN0IDEwMjIgYnl0ZXMsIGFuZCBpdCBtaWdodCBiZSBsb25nZXIgb24gc29tZQotICAg cGxhdGZvcm1zLiBFeGFtcGxlcyAoVU5JWCk6Ci0KLSAgQy1LZXJtaXQ+IGVjaG8gIlxmY29tbWFu ZChkYXRlKSIKLSAgIkZyaSBBcHIgMTggMTM6MzE6NDIgMTk5NyIKLSAgQy1LZXJtaXQ+IGVjaG8g IlxmY29tbWFuZChmaW5nZXIgfCB3YyAtbCkiIDsgaG93IG1hbnkgdXNlcnMgbG9nZ2VkIGluPwot ICAiICAgICAgODMiCi0gIEMtS2VybWl0PiBldmFsdWF0ZSBcZmNvbW1hbmQoZmluZ2VyIHwgd2Mg LWwpICogMgotICAxNjYKLSAgQy1LZXJtaXQ+IGVjaG8gV2VsY29tZSB0byBcZmNvbW1hbmQodHR5 KSBvbiBcZmNvbW1hbmQoZGF0ZSkKLSAgV2VsY29tZSB0byAvZGV2L3R0eXJlIG9uIEZyaSBBcHIg MTggMTM6MzE6NDIgMTk5NwotICBDLUtlcm1pdD4gZWNobyAiXGZjb21tYW5kKGxzIG9vZmEuKiki Ci0gICJvb2ZhLmMKLSAgb29mYS5oCi0gIG9vZmEubyIKLSAgQy1LZXJtaXQ+IGNkIC9kaXJlY3Rv cnktd2l0aC10aG91c2FuZHMtb2YtZmlsZXMKLSAgQy1LZXJtaXQ+IGVjaG8gIlxmY29tbWFuZChs cyAtbCkiIDsgVGhpcyB3b3VsZCBiZSB0b28gbG9uZwotICAiIgotICBDLUtlcm1pdD4KLQotICAg SWYgYSBjb21tYW5kJ3Mgb3V0cHV0IHdvdWxkIGJlIHRvbyBsb25nLCB5b3UgY2FuIHVzZSB0aGUg b3RoZXIsIG1vcmUKLSAgIGxhYm9yaW91cyBtZXRob2Qgb2YgcmVhZGluZyBmcm9tIGEgY29tbWFu ZDogT1BFTiAhUkVBRCBjb21tYW5kLCBSRUFECi0gICBlYWNoIGxpbmUsIENMT1NFICFSRUFELgot Ci0gICBUaGUgXGZyYXdjb21tYW5kKGNvbW1hbmQpIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBc ZmNvbW1hbmQoY29tbWFuZCksCi0gICBleGNlcHQgaXQgZG9lcyBub3QgcmVtb3ZlIHRyYWlsaW5n IG5ld2xpbmUgY2hhcmFjdGVyczoKLQotICBDLUtlcm1pdD4gZWNobyAiXGZyYXdjb21tYW5kKGRh dGUpIgotICAiRnJpIEFwciAxOCAxMzozMTo0MiAxOTk3Ci0gICIKLSAgQy1LZXJtaXQ+IGVjaG8g IlxmcmF3Y29tbWFuZChscyBvb2ZhLiopIgotICAib29mYS5jCi0gIG9vZmEuaAotICBvb2ZhLm8K LSAgIgotICBDLUtlcm1pdD4KLQotICAgVXNlIFxmcmF3Y29tbWFuZCgpIGlmIHlvdSB3YW50IHRv IHJldGFpbiB0aGUgZmluYWwgbGluZSB0ZXJtaW5hdG9ycywgb3IKLSAgIGlmIHRoZSBjb21tYW5k J3Mgb3V0cHV0IGlzICJiaW5hcnkiLiBCdXQgcmVtZW1iZXIgdGhhdCBpZiB0aGUgcmVzdWx0IG9m Ci0gICB0aGlzIChvciBhbnkgb3RoZXIpIGZ1bmN0aW9uIGNvbnRhaW5zIGFueSBOVUwgKEFTQ0lJ IGNvZGUgMCkKLSAgIGNoYXJhY3RlcnMsIHRoZSBmaXJzdCBOVUwgd2lsbCB0ZXJtaW5hdGUgdGhl IHJlc3VsdCBzdHJpbmcgYmVjYXVzZSB0aGlzCi0gICBpcyBob3cgQyBzdHJpbmdzIHdvcmsgKGl0 J3MgIkMtS2VybWl0IiwgcmVtZW1iZXI/KS4KLQotICAgVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2Vm dWwgbm90IG9ubHkgbG9jYWxseSwgYnV0IGFsc28gaW4gdGhlCi0gICBjbGllbnQvc2VydmVyIGFy ZW5hLiBJZiB5b3UgbmVlZCB0byBnZXQgdGhlIHJlc3VsdHMgZnJvbSBhIHN5c3RlbQotICAgY29t bWFuZCBvbiB0aGUgc2VydmVyIGVuZCBpbnRvIGEgdmFyaWFibGUgb24gdGhlIGNsaWVudCBlbmQs IGp1c3QgZG86Ci0KLSAgWyByZW1vdGUgXSBxdWVyeSBrZXJtaXQgY29tbWFuZChkYXRlKQotCi0g ICBUaGUgcmVzdWx0IGlzIGluIHRoZSBsb2NhbCBcdihxdWVyeSkgdmFyaWFibGU7IHNlZSBbNDY4 XVVzaW5nIEMtS2VybWl0LAotICAgMm5kIEVkLiwgcHAuMzU5LTM2MCBmb3IgZGV0YWlscy4KLQot NC4zLiBBdXRvbWF0aWMgUGVyLUZpbGUgVGV4dC9CaW5hcnkgTW9kZSBTd2l0Y2hpbmcKLQotICAg V2hlbiB0cmFuc2ZlcnJpbmcgZmlsZXMgYmV0d2VlbiBsaWtlIHN5c3RlbXMgKGUuZy4gVU5JWC10 by1VTklYKSwKLSAgIGJpbmFyeSBtb2RlIGNhbiBiZSB1c2VkIGZvciBhbGwgZmlsZXMgdW5sZXNz IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24KLSAgIGlzIG5lZWRlZCwgYW5kIGluIGZhY3QgS2Vy bWl0IHByb2dyYW1zIG9mIHJlY2VudCB2aW50YWdlIHJlY29nbml6ZSBlYWNoCi0gICBvdGhlcnMn IHBsYXRmb3JtcyBhbmQgc3dpdGNoIHRvIGJpbmFyeSBtb2RlIGF1dG9tYXRpY2FsbHkgd2hlbiBp dCBpcwotICAgYXBwcm9wcmlhdGUgKGUuZy4gRE9TIHRvIE9TLzIsIG9yIFVOSVggdG8gVU5JWCku IChFeGNlcHRpb246IExBQkVMRUQKLSAgIG1vZGUgaXMgY2hvc2VuIGZvciBWTVMtdG8tVk1TIGFu ZCBPUy8yLXRvLU9TLzIgdHJhbnNmZXJzIHNvIGNvbXBsZXgKLSAgIGZpbGUgZm9ybWF0cyBjYW4g YmUgcHJlc2VydmVkLikKLQotICAgT24gYSBjbGllbnQvc2VydmVyIGNvbm5lY3Rpb24gYmV0d2Vl biBsaWtlIHN5c3RlbXMsIHRoZSB0cmFuc2ZlciBtb2RlCi0gICBpcyBjdXJyZW50bHkgZGV0ZXJt aW5lZCBieSB0aGUgZmlsZSBzZW5kZXIsIHJhdGhlciB0aGFuIGFsd2F5cyBieSB0aGUKLSAgIGNs aWVudC4gSWYgdGhlIGNsaWVudCBpcyBzZW5kaW5nLCBpdCBjb250cm9scyB0aGUgdHJhbnNmZXIg bW9kZS4gSWYgYQotICAgR0VUIGNvbW1hbmQgaXMgc2VudCB0byB0aGUgc2VydmVyLCB0aGUgc2Vy dmVyIHNlbmRzIGFsbCBmaWxlcyBpbiBiaW5hcnkKLSAgIG1vZGUgaWYgaXRzIFRSQU5TRkVSIENI QVJBQ1RFUi1TRVQgaXMgVFJBTlNQQVJFTlQ7IG90aGVyd2lzZSBpdCB1c2VzCi0gICB0ZXh0IG1v ZGUgZm9yIHRleHQgZmlsZXMgKGFjY29yZGluZyB0byBpdHMgdGV4dC1wYXR0ZXJuIGxpc3QpIGFu ZAotICAgYmluYXJ5IG1vZGUgZm9yIGJpbmFyeSBmaWxlcy4gT2YgY291cnNlLCB0aGUgY2xpZW50 IGNhbiBjb250cm9sIHRoZQotICAgc2VydmVyJ3MgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCB3aXRo IHRoZSBSRU1PVEUgU0VUIFRSQU5TRkVSCi0gICBDSEFSQUNURVItU0VUIGNvbW1hbmQuCi0KLSAg IFdoZW4gdHJhbnNmZXJyaW5nIGZpbGVzIGJldHdlZW4gdW5saWtlIHN5c3RlbXMsIGhvd2V2ZXIs IChlLmcuCi0gICBVTklYLXRvLURPUyksIHNvbWUgZmlsZXMgKHN1Y2ggYXMgZXhlY3V0YWJsZSBw cm9ncmFtIGltYWdlcykgbXVzdCBiZQotICAgdHJhbnNmZXJyZWQgaW4gYmluYXJ5IG1vZGUgYnV0 IG90aGVycyAoc3VjaCBhcyBwbGFpbi10ZXh0IGZpbGVzKSBtdXN0Ci0gICBiZSB0cmFuc2ZlcnJl ZCBpbiB0ZXh0IG1vZGUgc28gdGhlaXIgcmVjb3JkIGZvcm1hdCBhbmQgY2hhcmFjdGVyIHNldHMK LSAgIGNhbiBiZSBhcHByb3ByaWF0ZWx5IGNvbnZlcnRlZC4gSWYgYSBiaW5hcnkgZmlsZSBpcyB0 cmFuc2ZlcnJlZCBpbiB0ZXh0Ci0gICBtb2RlLCBpdCBpcyBydWluZWQuIElmIGEgdGV4dCBmaWxl IGlzIHRyYW5zZmVycmVkIGluIGJpbmFyeSBtb2RlLCB0aGVuCi0gICBhdCB0aGUgdmVyeSBsZWFz dCwgaXRzIGZvcm1hdCBjYW4gYmUgaW5jb3JyZWN0OyBhdCB3b3JzdCBpdCBpcyBhbHNvCi0gICBj b3JydXB0ZWQgYmVjYXVzZSBpdHMgY2hhcmFjdGVyIHNldCB3YXMgbm90IGNvbnZlcnRlZCAoaW4g ZXh0cmVtZSBjYXNlcwotICAgdGhlIGNvcnJ1cHRpb24gaXMgdG90YWwsIGUuZy4gYmVjYXVzZSBv bmUgc3lzdGVtIGlzIEFTQ0lJLWJhc2VkIGFuZCB0aGUKLSAgIG90aGVyIEVCQ0RJQykuCi0KLTQu My4xLiBFeGNlcHRpb25zCi0KLSAgIFZNUyBDLUtlcm1pdCwgd2hlbiBzZW5kaW5nIGZpbGVzIHRv IGEgbm9uLVZNUyBzeXN0ZW0sIHN3aXRjaGVzIHRvIHRleHQKLSAgIG9yIGJpbmFyeSBtb2RlIGF1 dG9tYXRpY2FsbHkgZm9yIGVhY2ggZmlsZSwgYmFzZWQgb24gdGhlIHJlY29yZCBmb3JtYXQKLSAg IGluIHRoZSBmaWxlJ3MgZGlyZWN0b3J5IGVudHJ5OyB0aHVzIHRoZSBtZWNoYW5pc21zIGRlc2Ny aWJlZCBpbiB0aGlzCi0gICBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBWTVMgQy1LZXJtaXQsIHll dCB0aGUgZWZmZWN0IGlzIHRoZSBzYW1lOgotICAgYXV0b21hdGljIHRleHQvYmluYXJ5IG1vZGUg c3dpdGNoaW5nIHdoZW4gVk1TIEMtS2VybWl0IGlzIHNlbmRpbmcKLSAgIGZpbGVzLiBTZWUgdGhl IFZNUyBBcHBlbmRpeCBvZiBbNDY5XVVzaW5nIEMtS2VybWl0IGZvciBkZXRhaWxzLgotCi0gICBL ZXJtaXQgdmVyc2lvbnMgdGhhdCBzdXBwb3J0IExBQkVMRUQgb3IgSU1BR0UgdHJhbnNmZXIgbW9k ZSBhcmUKLSAgIGxpa2V3aXNlIG5vdCBhZmZlY3RlZCBieSB0aGlzIGZlYXR1cmUgd2hlbiBvbmUg b2YgdGhvc2UgbW9kZXMgaXMKLSAgIHNlbGVjdGVkIChub3JtYWxseSB1c2VkIG9ubHkgd2hlbiB0 cmFuc2ZlcnJpbmcgYmV0d2VlbiBsaWtlIHN5c3RlbXMpLgotCi0gICBLZXJtaXQgdmVyc2lvbnMg dGhhdCBzdXBwb3J0IGZpbGUtdHJhbnNmZXIgcGlwZXMgYW5kIGZpbHRlcnMgYXJlIG5vdAotICAg YWZmZWN0ZWQgYnkgdGhpcyBmZWF0dXJlIHdoZW4gcGlwZXMgb3IgZmlsdGVycyBhcmUgdXNlZCwg c2luY2UgdGhlCi0gICBvdXRwdXQgb2YgYSBwaXBlIG9yIGZpbHRlciAoc3VjaCBhcyBnemlwKSBp cyBsaWtlbHkgdG8gcmVxdWlyZSB0cmFuc2ZlcgotICAgaW4gYSBkaWZmZXJlbnQgbW9kZSB0aGFu IHRoZSBvcmlnaW5hbCBmaWxlLgotCi0gICBGaW5hbGx5LCBTRU5EIC9URVhUIG9yIFNFTkQgL0JJ TkFSWSB3aWxsIGZvcmNlIGZpbGVzIHRvIGJlIHNlbnQgaW4gdGhlCi0gICBpbmRpY2F0ZWQgbW9k ZSwgb3ZlcnJpZGluZyBhbGwgYXV0b21hdGljIHRyYW5zZmVyLW1vZGUtY2hvb3NpbmcKLSAgIG1l Y2hhbmlzbXMuCi0KLTQuMy4yLiBPdmVydmlldwotCi0gICBTdXBwb3NlIHlvdSBnaXZlIEMtS2Vy bWl0IGEgY29tbWFuZCBsaWtlOgotCi0gIFNFTkQgKi4qCi0KLSAgIEFuZCBzdXBwb3NlIHRoZSBw YXR0ZXJuICouKiBtYXRjaGVzIGEgbWl4dHVyZSBvZiB0ZXh0IGZpbGVzIChzdWNoIGFzCi0gICBw cm9ncmFtIHNvdXJjZSBjb2RlKSBhbmQgYmluYXJ5IGZpbGVzIChzdWNoIG9zIG9iamVjdCBtb2R1 bGVzIG9yCi0gICBleGVjdXRhYmxlIHByb2dyYW1zKS4KLQotICAgQy1LZXJtaXQgNi4wIGFuZCBl YXJsaWVyIChleGNlcHQgb24gVk1TKSBzZW5kIGFsbCBmaWxlcyBpbiB0aGUgc2FtZQotICAgbW9k ZTogd2hhdGV2ZXIgeW91IHNhaWQgaW4geW91ciBtb3N0IHJlY2VudCBTRVQgRklMRSBUWVBFIGNv bW1hbmQsIG9yCi0gICBlbHNlIHdoYXRldmVyIG1vZGUgd2FzIGNob3NlbiBhdXRvbWF0aWNhbGx5 IGFjY29yZGluZyB0byB0aGUgcnVsZXMgb24KLSAgIHBhZ2UgMjM2IG9mIFVzaW5nIEMtS2VybWl0 LCAybmQgRWQuCi0KLSAgIEJ1dCB3aGVuIHRleHQgYW5kIGJpbmFyeSBmaWxlcyBhcmUgbWl4ZWQg aW4gdGhlIHNhbWUgZ3JvdXAsIGFuZCB0aGUKLSAgIGZpbGVzIGFyZSBiZWluZyB0cmFuc2ZlcnJl ZCB0byBhbiB1bmxpa2Ugc3lzdGVtIChlLmcuIFVOSVggdG8gSUJNCi0gICBNYWluZnJhbWUpLCB0 aGlzIHJlc3VsdHMgaW4gY29ycnVwdGlvbiBvZiBlaXRoZXIgYWxsIHRoZSB0ZXh0IGZpbGVzIG9y Ci0gICBhbGwgdGhlIGJpbmFyeSBmaWxlcy4KLQotICAgU3RyZWFtLW9yaWVudGVkIGZpbGUgc3lz dGVtcyBzdWNoIGFzIGluIFVOSVggYW5kIERPUyBkbyBub3QgcmVjb3JkIGFueQotICAgaW5mb3Jt YXRpb24gYWJvdXQgdGhlIGZpbGUgdG8gdGVsbCB1cyB3aGV0aGVyIHRoZSBmaWxlIHNob3VsZCBi ZQotICAgdHJhbnNmZXJyZWQgaW4gYmluYXJ5IG9yIHRleHQgbW9kZSwgbWFraW5nIGl0IGltcG9z c2libGUgdG8gc2VsZWN0IHRoZQotICAgdHJhbnNmZXIgbW9kZSBmb3IgZWFjaCBmaWxlIGluIGEg Z3JvdXAgYXV0b21hdGljYWxseSB3aXRoIGFueQotICAgY2VydGFpbnR5LgotCi0gICBIb3dldmVy LCB3ZSBjYW4gdXNlIHNvbWUgZmFpcmx5LXdlbGwgZXN0YWJsaXNoZWQgZmlsZSBuYW1pbmcKLSAg IGNvbnZlbnRpb25zIGZvciB0aGlzIHB1cnBvc2UuIEMtS2VybWl0IDcuMCBsZXRzIHlvdSBwcm92 aWRlIGxpc3RzIG9mCi0gICBmaWxlbmFtZSBwYXR0ZXJucyB0aGF0IGFyZSB1c2VkIHRvIHNlcGFy YXRlbHkgZGV0ZXJtaW5lIHRoZSBmaWxlIHR5cGUKLSAgIGZvciBlYWNoIGluZGl2aWR1YWwgZmls ZSBiZWluZyB0cmFuc2ZlcnJlZC4gQSBwYXR0ZXJuIGlzIGEgc3RyaW5nLAotICAgcG9zc2libHkg Y29udGFpbmluZyB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzICIqIiAoYXN0ZXJpc2ssIHdoaWNoIG1h dGNoZXMKLSAgIGFueSBzdHJpbmcgb2YgemVybyBvZiBtb3JlIGNoYXJhY3RlcnMpIGFuZC9vciAi PyIgKHF1ZXN0aW9uIG1hcmssIHdoaWNoCi0gICBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVy KS4gRm9yIGV4YW1wbGUgImEqYiIgbWF0Y2hlcyBhbGwgZmlsZXMKLSAgIHdob3NlIG5hbWVzIHN0 YXJ0IHdpdGggImEiIGFuZCBlbmQgd2l0aCAiYiIsIHN1Y2ggYXMgImFiIiwgImFyYiIsCi0gICAi YWJhYmFiYWJhYiIsIGV0YywgYnV0IG5vdCAiYWJiYSIuIEFuZCAiYT9iIiBtYXRjaGVzIGFueSBm aWxlIHdob3NlCi0gICBuYW1lIHN0YXJ0cyB3aXRoICJhIiwgZW5kcyB3aXRoICJiIiwgYW5kIGlz IGV4YWN0bHkgMyBjaGFyYWN0ZXJzIGxvbmcuCi0KLSAgICAgTk9URTogV2hlbiB0eXBpbmcgY29t bWFuZHMgYXQgdGhlIEMtS2VybWl0IHByb21wdCwgeW91IG11c3QgcHJlZml4Ci0gICAgICI/IiB3 aXRoIFwgdG8gb3ZlcnJpZGUgaXRzIG5vcm1hbCBmdW5jdGlvbiBvZiBnaXZpbmcgaGVscC4KLQot ICAgKEFsc28gc2VlIFs0NzBdU2VjdGlvbiA0LjkgZm9yIGFkZGl0aW9uYWwgcGF0dGVybi1tYXRj aGluZyBub3RhdGlvbnMKLSAgIHRoYXQgbWlnaHQgYmUgYXZhaWxhYmxlIGluIHlvdXIgdmVyc2lv biBvZiBDLUtlcm1pdC4pCi0KLSAgIFdoZW4geW91IGhhdmUgc3BlY2lmaWVkIGZpbGVuYW1lIHJl Y29nbml0aW9uIHBhdHRlcm5zLCBDLUtlcm1pdCBjYW4KLSAgIHRyYW5zZmVyIHRoZSBvbmVzIHdo b3NlIG5hbWVzIG1hdGNoIGFueSBvZiB0aGUgYmluYXJ5LW1vZGUgcGF0dGVybnMgaW4KLSAgIGJp bmFyeSBtb2RlLCBhbmQgdGhvc2Ugd2l0aCBuYW1lcyB0aGF0IG1hdGNoIGFueSBvZiB0aGUgdGV4 dC1tb2RlCi0gICBwYXR0ZXJucyBpbiB0ZXh0IG1vZGUsIGFuZCB0aG9zZSB3aG9zZSBuYW1lcyBt YXRjaCBuZWl0aGVyIGluIHRoZQotICAgcHJldmFpbGluZyBtb2RlIHlvdSBoYXZlIGNob3Nlbiwg b3IgdGhhdCB3YXMgY2hvc2VuIGF1dG9tYXRpY2FsbHkgdmlhCi0gICBwZWVyIHJlY29nbml0aW9u LgotCi00LjMuMy4gQ29tbWFuZHMKLQotICAgU0VUIEZJTEUgUEFUVEVSTlMgeyBPTiwgT0ZGLCBB VVRPIH0KLSAgICAgICAgICBUaGlzIHRlbGxzIEtlcm1pdCB3aGV0aGVyIHRvIGRvIHBlci1maWxl IGZpbGVuYW1lCi0gICAgICAgICAgcGF0dGVybi1tYXRjaGluZyB0byBkZXRlcm1pbmUgdGV4dCBv ciBiaW5hcnkgbW9kZS4gVGhlIG5vcm1hbAotICAgICAgICAgIGFuZCBkZWZhdWx0IHNldHRpbmcg aXMgQVVUTywgd2hpY2ggbWVhbnMgdG8gdXNlIHBhdHRlcm4gbGlzdHMgdG8KLSAgICAgICAgICBz d2l0Y2ggdHJhbnNmZXIgbW9kZSBvbmx5IHdoZW4gaXQgaXMgY2VydGFpbiB0aGF0IHRoZSBvdGhl cgotICAgICAgICAgIEtlcm1pdCBwcm9ncmFtIHN1cHBvcnRzIGF1dG9tYXRpYyBub3RpZmljYXRp b24gb2YgdHJhbnNmZXIgbW9kZQotICAgICAgICAgICh2aWEgQXR0cmlidXRlIHBhY2tldHMpIG9u IGEgcGVyLWZpbGUgYmFzaXMgKHRoaXMgaW5mb3JtYXRpb24gaXMKLSAgICAgICAgICBvYnRhaW5l ZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBwcm90b2NvbCBzdGFydHVwIG5lZ290aWF0aW9uKS4gT04K LSAgICAgICAgICBtZWFucyB0byBhbHdheXMgZGV0ZXJtaW5lIHRoZSB0cmFuc2ZlciBtb2RlIGZy b20gdGhlIGZpbGVuYW1lCi0gICAgICAgICAgYW5kIHBhdHRlcm4gbGlzdCB3aGVuIHNlbmRpbmcg ZmlsZXMuIFVzZSBPRkYgdG8gZGlzYWJsZSB0aGlzCi0gICAgICAgICAgZmVhdHVyZSAod2l0aG91 dCByZXNldHRpbmcgeW91ciBwYXR0ZXJuIGxpc3RzKS4gQWxzbyBub3RlIHRoYXQKLSAgICAgICAg ICBpZiB5b3UgaGF2ZSBzZWxlY3RlZCBMQUJFTEVEIGZpbGUgdHJhbnNmZXIgKFNFVCBGSUxFIFRZ UEUKLSAgICAgICAgICBMQUJFTEVEKSwgdGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZmlsZW5h bWUtbWF0Y2hpbmcgcGF0dGVybnMKLSAgICAgICAgICBhbmQgYWxsIGZpbGVzIGFyZSBzZW50IGlu IGxhYmVsZWQgbW9kZS4KLQotICAgU0VUIFRSQU5TRkVSIE1PREUgTUFOVUFMCi0gICAgICAgICAg RGlzYWJsZXMgdGhlIHVzZSBvZiBmaWxlbmFtZSBwYXR0ZXJucywgbm8gbWF0dGVyIHdoYXQgdGhl IEZJTEUKLSAgICAgICAgICBQQVRURVJOUyBzZXR0aW5nLgotCi0gICBSRU1PVEUgU0VUIFRSQU5T RkVSIE1PREUgTUFOVUFMCi0gICAgICAgICAgQ2xpZW50IGNvbW1hbmQgdG8gZGlzYWJsZSBhdXRv bWF0aWMgdHJhbnNmZXIgbW9kZSwgYW5kIHRoZXJlZm9yZQotICAgICAgICAgIGFsc28gZmlsZW5h bWUgcGF0dGVybnMsIGluIHRoZSBzZXJ2ZXIuIFN5bm9ueW06IFJFTU9URSBTRVQgWEZFUgotICAg ICAgICAgIE1PREUgTUFOVUFMLgotCi0gICB7IEdFVCwgU0VORCwgZXRjIH0geyAvQklOQVJZLCAv VEVYVCB9Ci0gICAgICAgICAgSW5jbHVkaW5nIGEgL0JJTkFSWSBvciAvVEVYVCAob3IsIHdoZXJl IHN1cHBvcnRlZCwgL0lNQUdFIG9yCi0gICAgICAgICAgL0xBQkVMRUQpIHN3aXRjaCB3aXRoIGEg ZmlsZS10cmFuc2ZlciBjb21tYW5kIGNoYW5nZXMgdGhlCi0gICAgICAgICAgdHJhbnNmZXIgbW9k ZSB0byBtYW51YWwgZm9yIHRoYXQgY29tbWFuZCBvbmx5LCBhbmQgdGhlcmVmb3JlCi0gICAgICAg ICAgZGlzYWJsZXMgcGF0dGVybnMgdGhhdCB0aGF0IGNvbW1hbmQuCi0KLSAgIFNFVCBGSUxFIEJJ TkFSWS1QQVRURVJOUyBbIHBhdHRlcm4gWyBwYXR0ZXJuIFsgcGF0dGVybiAuLi4gXSBdIF0KLSAg ICAgICAgICBBIGxpc3Qgb2YgemVybyBvciBtb3JlIHBhdHRlcm5zLCBzZXBhcmF0ZWQgYnkgc3Bh Y2VzIChub3QKLSAgICAgICAgICBjb21tYXMpLiBMZXR0ZXJzIGluIGEgcGF0dGVybiBhcmUgY2Fz ZS1zZW5zaXRpdmUgaWYgdGhlCi0gICAgICAgICAgdW5kZXJseWluZyBmaWxlbmFtZXMgYXJlIGNh c2Ugc2Vuc2l0aXZlIChhcyBpbiBVTklYKSwgYW5kCi0gICAgICAgICAgY2FzZS1pbnNlbnNpdGl2 ZSBvdGhlcndpc2UgKGFzIGluIFdpbmRvd3MpLiBJZiBhIGZpbGUncyBuYW1lIGlzCi0gICAgICAg ICAgbWF0Y2hlZCBieSBhbnkgcGF0dGVybiBpbiB0aGUgbGlzdCBhbmQgU0VUIEZJTEUgUEFUVEVS TlMgaXMgT04sCi0gICAgICAgICAgdGhlIGZpbGUgaXMgc2VudCBpbiBiaW5hcnkgbW9kZS4gRXhh bXBsZXM6Ci0KLSAgU0VUIEZJTEUgQklOQVJZLVBBVFRFUk5TICouZ3ogKi5aICoudGFyICouemlw ICoubyAqLnNvICouYSAqLm91dCA7IFVOSVgKLSAgU0VUIEZJTEUgQklOQVJZLVBBVFRFUk5TICou RVhFICouWklQICouT0JKICouQ09NIDsgRE9TIG9yIE9TLzIgb3IgV2luZG93cwotCi0gICAgICAg ICAgSWYgYSBwYXR0ZXJuIGNvbnRhaW5zIHNwYWNlcywgZW5jbG9zZSBpdCBpbiBicmFjZXMuCi0K LSAgIFNFVCBGSUxFIFRFWFQtUEFUVEVSTlMgWyBwYXR0ZXJuIFsgcGF0dGVybiBbIHBhdHRlcm4g Li4uIF0gXSBdCi0gICAgICAgICAgTGlrZSBTRVQgRklMRSBCSU5BUlktUEFUVEVSTlMsIGJ1dCB0 aGUgcGF0dGVybnMgY2hvb3NlIHRleHQKLSAgICAgICAgICBmaWxlcyByYXRoZXIgdGhhbiBiaW5h cnkgb25lcy4gRXhhbXBsZXM6Ci0KLSAgU0VUIEZJTEUgVEVYVC1QQVRURVJOUyAqLlRYVCAqLktT QyAqLkhUTSogKi5CQVQgOyBET1MsIFdpbmRvd3MsIE9TLzIKLQotICAgQUREIEJJTkFSWS1QQVRU RVJOUyBbIHBhdHRlcm4gWyBwYXR0ZXJuIFsgcGF0dGVybiAuLi4gXSBdIF0KLSAgICAgICAgICBB ZGRzIG9uZSBvciBtb3JlIHBhdHRlcm5zIHRvIHRoZSBCSU5BUlktUEFUVEVSTiBsaXN0LgotCi0g ICBBREQgVEVYVC1QQVRURVJOUyBbIHBhdHRlcm4gWyBwYXR0ZXJuIFsgcGF0dGVybiAuLi4gXSBd IF0KLSAgICAgICAgICBBZGRzIG9uZSBvciBtb3JlIHBhdHRlcm5zIHRvIHRoZSBURVhULVBBVFRF Uk4gbGlzdC4KLQotICAgUkVNT1ZFIEJJTkFSWS1QQVRURVJOUyBbIHBhdHRlcm4gWyBwYXR0ZXJu IFsgcGF0dGVybiAuLi4gXSBdIF0KLSAgICAgICAgICBSZW1vdmVzIG9uZSBvciBtb3JlIHBhdHRl cm5zIGZyb20gdGhlIEJJTkFSWS1QQVRURVJOIGxpc3QuIFRoZQotICAgICAgICAgIGdpdmVuIHBh dHRlcm5zIGFyZSBtYXRjaGVkIHdpdGggdGhlIG9uZXMgaW4gdGhlIEJJTkFSWS1QQVRURVJOUwot ICAgICAgICAgIGxpc3Qgd2l0aCBjYXNlIHNlbnNpdGl2aXR5IGlmIHRoZSB1bmRlcmx5aW5nIGZp bGUgc3lzdGVtIGhhcwotICAgICAgICAgIGNhc2Utc2Vuc2l0aXZlIG5hbWVzIChhcyBkbyBVTklY IGFuZCBPUy05KSwgb3RoZXJ3aXNlIHdpdGggY2FzZQotICAgICAgICAgIGluZGVwZW5kZW5jZS4K LQotICAgUkVNT1ZFIFRFWFQtUEFUVEVSTlMgWyBwYXR0ZXJuIFsgcGF0dGVybiBbIHBhdHRlcm4g Li4uIF0gXSBdCi0gICAgICAgICAgUmVtb3ZlcyBvbmUgb3IgbW9yZSBwYXR0ZXJucyBmcm9tIHRo ZSBURVhULVBBVFRFUk4gbGlzdC4KLQotICAgU0hPVyBQQVRURVJOUwotICAgICAgICAgIERpc3Bs YXlzIHRoZSBjdXJyZW50IHBhdHRlcm4gc2VsZWN0aW9ucy4KLQotICAgV2hlbmV2ZXIgeW91IGdp dmUgYSBTRVQgRklMRSBCSU5BUlktUEFUVEVSTlMgb3IgU0VUIEZJTEUgVEVYVC1QQVRURVJOUwot ICAgY29tbWFuZCwgdGhlIHByZXZpb3VzIGxpc3QgaXMgcmVwbGFjZWQuIElmIHlvdSBnaXZlIG9u ZSBvZiB0aGVzZQotICAgY29tbWFuZHMgd2l0aG91dCBhIHBhdHRlcm4gbGlzdCwgdGhlIHByZXZp b3VzIGxpc3QgaXMgcmVtb3ZlZC4KLQotICAgV2hlbiBwYXR0ZXJucyBhcmUgYWN0aXZlIGFuZCBm aWxlcyBhcmUgYmVpbmcgc2VudCwgdGV4dCBwYXR0ZXJucyAoaWYKLSAgIGFueSkgYXJlIGFwcGxp ZWQgZmlyc3QgKGJ1dCBvbmx5IGlmIG5vdCBSRVNFTkRpbmcgYW5kIG5vdCBzZW5kaW5nIGluCi0g ICBMQUJFTEVEIG1vZGUpLCB0aGVuIGJpbmFyeSBwYXR0ZXJucywgc28gaWYgdGhlIHNhbWUgcGF0 dGVybiBhcHBlYXJzIGluCi0gICBib3RoIGxpc3RzLCBiaW5hcnkgbW9kZSBpcyBjaG9zZW4uCi0K LTQuMy40LiBFeGFtcGxlcwotCi0gICBIZXJlJ3MgYW4gZXhhbXBsZSB0aGF0IG1pZ2h0IGJlIHVz ZWQgd2hlbiBzZW5kaW5nIGZpbGVzIGZyb20gVU5JWDoKLQotICBzZXQgZmlsZSB0eXBlIGJpbmFy eQotICBzZXQgZmlsZSB0ZXh0LXBhdHRlcm5zICouYyAqLmggKi53ICoudHh0IG1ha2VmaWxlCi0g IHNldCBmaWxlIGJpbmFyeS1wYXR0ZXJucyAqLm8KLSAgbXNlbmQgbWFrZWZpbGUgd2VybWl0IHdh cnQgY2sqLltjd2hvXSBjayoudHh0Ci0KLSAgIE5vdGUgdGhhdCAid2VybWl0IiBhbmQgIndhcnQi IGRvIG5vdCBtYXRjaCBhbnkgcGF0dGVybnMgc28gdGhleSBhcmUKLSAgIHNlbnQgaW4gdGhlIHBy ZXZhaWxpbmcgbW9kZSwgd2hpY2ggaXMgYmluYXJ5LiBBbHNvIG5vdGUgdGhlIHVzZSBvZgotICAg Im1ha2VmaWxlIiBhcyBhIHBhdHRlcm4gdGhhdCBkb2VzIG5vdCBjb250YWluIGFueSB3aWxkY2Fy ZCBjaGFyYWN0ZXJzCi0gICAodGhlcmUgaXMgbm8gb3RoZXIgY29udmVudGlvbiB0byBkaXN0aW5n dWlzaCBhbW9uZyAid2VybWl0IiBhbmQgIndhcnQiLAotICAgd2hpY2ggYXJlIGJpbmFyeSBleGVj dXRhYmxlcywgYW5kICJtYWtlZmlsZSIsIHdoaWNoIGlzIGEgdGV4dCBmaWxlLAotICAgcHVyZWx5 IGJ5IHRoZWlyIG5hbWVzKS4KLQotICAgTW9zdCBDLUtlcm1pdCBpbXBsZW1lbnRhdGlvbnMgaGF2 ZSBhIGRlZmF1bHQgcGF0dGVybiBsaXN0IGJ1aWx0IGluLAotICAgd2hpY2ggaW5jbHVkZXMgcGF0 dGVybnMgdGhhdCBhcmUgYWxtb3N0IGNlcnRhaW4gdG8gc3VjY2VlZCBpbiBwaWNraW5nCi0gICB0 aGUgcmlnaHQgdHJhbnNmZXIgbW9kZS4gT3RoZXJzIGFyZSBvbWl0dGVkIGR1ZSB0byBhbWJpZ3Vp dHkuIEZvcgotICAgZXhhbXBsZSAiLmhscCIsIGFuZCAiLmluaSIgYXJlIGdlbmVyYWxseSBiaW5h cnkgdHlwZXMgaW4gV2luZG93cyBidXQKLSAgIHRleHQgdHlwZXMgZXZlcnl3aGVyZSBlbHNlLgot Ci0gICAgIE5PVEU6ICIuZG9jIiwgdXNlZCBmb3IgZGVjYWRlcyB0byBkZW5vdGUgcGxhaW4tdGV4 dCBkb2N1bWVudGF0aW9uCi0gICAgIGZpbGVzLCBub3cgbW9yZSBvZnRlbiB0aGFuIG5vdCBkZW5v dGVzIGEgTWljcm9zb2Z0IFdvcmQgRG9jdW1lbnQsIHNvCi0gICAgICIuZG9jIiBpcyBub3cgY29u c2lkZXJlZCBhIGJpbmFyeSB0eXBlIHNpbmNlIGl0IGRvZXMgbGVzcyBoYXJtIHRvCi0gICAgIHRy YW5zZmVyIGEgcGxhaW4tdGV4dCBkb2N1bWVudCBpbiBiaW5hcnkgbW9kZSB0aGFuIGl0IGRvZXMg dG8KLSAgICAgdHJhbnNmZXIgYW4gTVMgV29yZCBmaWxlIGluIHRleHQgbW9kZSAoZXhjZXB0IHdo ZW4gSUJNIG1haW5mcmFtZXMKLSAgICAgYXJlIGludm9sdmVkISkKLQotICAgICBBTk9USEVSIE5P VEU6ICIuY29tIiBmaWxlcyBhcmUgYmluYXJ5IGluIERPUy1saWtlIG9wZXJhdGluZyBzeXN0ZW1z LAotICAgICBidXQgdGhleSBhcmUgdGV4dCAoRENMIGNvbW1hbmQgcHJvY2VkdXJlcykgaW4gVk1T LiBWTVMgQy1LZXJtaXQKLSAgICAgc2VuZHMgLkNPTSBmaWxlcyBpbiB0ZXh0IG1vZGU7IEs5NSBz ZW5kcyB0aGVtIGluIGJpbmFyeSBtb2RlLiBJZiB5b3UKLSAgICAgZG93bmxvYWQgYSAuQ09NIGZp bGUgZnJvbSBWTVMgdG8gRE9TIG9yIFdpbmRvd3MsIGFuZCB0aGVuIHVwbG9hZCBpdAotICAgICB0 byBhbm90aGVyIFZNUyBzeXN0ZW0sIGJlIHN1cmUgdG8gdXNlIFNFTkQgL1RFWFQgdG8gcHJlc2Vy dmUgaXRzCi0gICAgIHRleHRuZXNzLgotCi0gICBZb3UgY2FuIHNlZSB0aGUgZGVmYXVsdCBwYXR0 ZXJuIGxpc3QgYnkgc3RhcnRpbmcgQy1LZXJtaXQgd2l0aG91dCBpdHMKLSAgIGluaXRpYWxpemF0 aW9uIGZpbGUgKGUuZy4gImtlcm1pdCAtWSIpIGFuZCB1c2luZyB0aGUgU0hPVyBQQVRURVJOUwot ICAgY29tbWFuZC4gSWYgeW91IHdpbGwgYmUgZGVwZW5kaW5nIG9uIHRoaXMgZmVhdHVyZSwgYmUg c3VyZSB0byBleGFtaW5lCi0gICB0aGUgbGlzdCBjYXJlZnVsbHkgaW4gY29uanVuY3Rpb24gd2l0 aCB0aGUgYXBwbGljYXRpb25zIHRoYXQgeW91IHVzZS4KLQotICAgVGhlIGRlZmF1bHQgcGF0dGVy biBsaXN0IGRvZXMgbm90IHRha2UgImJhY2t1cCBmaWxlcyIgaW50byBhY2NvdW50Ci0gICBiZWNh dXNlIChhKSBwZW9wbGUgdXN1YWxseSBkb24ndCB3YW50IHRvIHRyYW5zZmVyIHRoZW07IGFuZCAo YikgaXQKLSAgIHdvdWxkIG1ha2UgdGhlIHBhdHRlcm4gbGlzdHMgbW9yZSB0aGFuIHR3aWNlIGFz IGxvbmcuIEZvciBleGFtcGxlLCB3ZQotICAgd291bGQgbmVlZCB0byBpbmNsdWRlIGJvdGggKi50 eHQgYW5kICoudHh0Ln5bMC05XSp+IGZvciAiLnR4dCIgZmlsZXMsCi0gICBhbmQgc2ltaWxhcmx5 IGZvciBhbGwgdGhlIG90aGVycy4gSW5zdGVhZCwgeW91IGNhbiB1c2UgU0VORCAvTk9CQUNLVVAK LSAgIChvciBTRVQgU0VORCBCQUNLVVAgT0ZGKSB0byBza2lwIG92ZXIgYWxsIGJhY2t1cCBmaWxl cy4KLQotICAgUHV0IHlvdXIgbW9zdCBjb21tb25seS11c2VkIHNhZmUgcGF0dGVybiBkZWNsYXJh dGlvbnMgaW4geW91ciBDLUtlcm1pdAotICAgY3VzdG9taXphdGlvbiBmaWxlIChja2VybW9kLmlu aSwgLm15a2VybXJjLCBrOTVjdXN0b20uaW5pLCBldGMpLgotCi0gICBBcyBub3RlZCwgU0VUIEZJ TEUgUEFUVEVSTlMgaXMgT04gYnkgZGVmYXVsdC4gU29tZXRpbWVzLCBob3dldmVyLCBpdCBpcwot ICAgZGVzaXJhYmxlLCBvciBuZWNlc3NhcnksIHRvIGZvcmNlIGZpbGVzIHRvIGJlIHNlbnQgaW4g YSBwYXJ0aWN1bGFyCi0gICBtb2RlLCBhbmQgb2Z0ZW4gdGhpcyBtdXN0IGJlIGRvbmUgZnJvbSB0 aGUgY29tbWFuZCBsaW5lIChlLmcuIHdoZW4KLSAgIHVzaW5nIEtlcm1pdCBhcyBhIGRvd25sb2Fk IGhlbHBlciBpbiBhIFdlYiBicm93c2VyIGxpa2UgTHlueCkuIFRoZSAtVgotICAgY29tbWFuZC1s aW5lIG9wdGlvbnMgaXMgZXF1aXZhbGVudCB0byBTRVQgRklMRSBQQVRURVJOUyBPRkYgYW5kIFNF VAotICAgVFJBTlNGRVIgTU9ERSBNQU5VQUwuIEV4YW1wbGU6Ci0KLSAga2VybWl0IC1WaXMgb29m YS50eHQKLQotICAgZm9yY2VzIG9vZmEudHh0IHRvIGJlIHNlbnQgaW4gYmluYXJ5IG1vZGUsIGV2 ZW4gdGhvdWdoICIudHh0IiBtaWdodAotICAgbWF0Y2ggYSB0ZXh0IHBhdHRlcm4uCi0KLTQuNC4g RmlsZSBQZXJtaXNzaW9ucwotCi0gICAiUGVybWlzc2lvbnMiIHJlZmVycyB0byBhIGNvZGUgYXNz b2NpYXRlZCB3aXRoIGEgZmlsZSB0aGF0IHNwZWNpZmllcwotICAgd2hvIGlzIGFsbG93ZWQgdG8g YWNjZXNzIGl0LCBhbmQgaW4gd2hhdCBtYW5uZXIuIEZvciBleGFtcGxlLCB0aGUKLSAgIG93bmVy LCB0aGUgbWVtYmVycyBvZiBvbmUgb3IgbW9yZSBncm91cHMsIHRoZSBzeXN0ZW0gYWRtaW5pc3Ry YXRvciwgYW5kCi0gICBldmVyeWJvZHkgZWxzZSwgbWlnaHQgYmUgYWxsb3dlZCB2YXJpb3VzIGNv bWJpbmF0aW9ucyBvZiBSZWFkLCBXcml0ZSwKLSAgIEFwcGVuZCwgRXhlY3V0ZSwgb3IgTGlzdGlu ZyBhY2Nlc3MuCi0KLSAgIFRoZSBwZXJtaXNzaW9uIGNvZGUgZ29lcyBieSBkaWZmZXJlbnQgbmFt ZXMgb24gZGlmZmVyZW50IHBsYXRmb3Jtcy4gSW4KLSAgIFVOSVgsIGl0IG1pZ2h0IGJlIGNhbGxl ZCB0aGUgZmlsZW1vZGUuIEluIFZNUywgaXQgaXMgY2FsbGVkIHRoZSBmaWxlCi0gICBwcm90ZWN0 aW9uIChvciBwcm90ZWN0aW9uIG1hc2spLgotCi0gICBUaGUgY29tbWVudHMgaW4gdGhpcyBzZWN0 aW9uIHByZXNlbnRseSBhcHBseSBvbmx5IHRvIHRoZSBVTklYIGFuZCBWTVMKLSAgIHZlcnNpb25z IG9mIEMtS2VybWl0LCB0byB3aGljaCB0aGVzZSBmZWF0dXJlcyB3ZXJlIGFkZGVkIGluIHZlcnNp b24KLSAgIDcuMDsgdGhlIERPUywgV2luZG93cywgYW5kIE9TLzIgZmlsZSBzeXN0ZW1zIGVtYm9k eSBubyBub3Rpb25zIG9mCi0gICBwcm90ZWN0aW9uLCBhbmQgc28gTVMtRE9TIEtlcm1pdCBhbmQg S2VybWl0IDk1IGRvIG5vdCBzZW5kIGZpbGUKLSAgIHBlcm1pc3Npb25zLCBhbmQgaWdub3JlIHRo ZW0gd2hlbiByZWNlaXZlZC4KLQotICAgVGhlIHBlcm1pc3Npb25zIGZvciBhIHJlY2VpdmVkIGZp bGUgYXJlIGRldGVybWluZWQgYnkgYSBjb21iaW5hdGlvbiBvZgotICAgdGhlIGZpbGUgdHJhbnNm ZXIgbW9kZSAoVk1TLXRvLVZNUyB0cmFuc2ZlcnMgb25seSksIHdoZXRoZXIgYSBmaWxlIG9mCi0g ICB0aGUgc2FtZSBuYW1lIGV4aXN0cyBhbHJlYWR5LCB3aGV0aGVyIHBlcm1pc3Npb25zIG9mIHRo ZSBmaWxlIGFyZQotICAgcmVjZWl2ZWQgaW4gdGhlIGZpbGUgYXR0cmlidXRlIHBhY2tldCwgYW5k IHRoZSBzZXR0aW5nIG9mIEFUVFJJQlVURVMKLSAgIFBST1RFQ1RJT04uCi0KLSAgIFRoZSBkZWZh dWx0IGZvciBBVFRSSUJVVEVTIFBST1RFQ1RJT04gaXMgT04uIElmIG5vIGF0dHJpYnV0ZXMgYXJl Ci0gICByZWNlaXZlZCwgdGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBpZiBhdHRyaWJ1dGVzIFBS T1RFQ1RJT04gd2VyZSBPRkYuCi0KLSAgIEZvciBWTVMtdG8tVk1TIHRyYW5zZmVycywgdGhlIGRl ZmF1bHQgTEFCRUxFRCBtb2RlIHNpbXBseSBjb3BpZXMgdGhlCi0gICBwcm90ZWN0aW9uIGNvZGUg ZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24uCi0KLTQuNC4xLiBXaGVuIEFUVFJJQlVURVMgUFJP VEVDVElPTiBpcyBPRkYKLQotICAgSWYgbm8gZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGV4aXN0cywg c3lzdGVtIGRlZmF1bHRzIGRldGVybWluZSB0aGUKLSAgIHBlcm1pc3Npb25zIG9mIHRoZSBuZXcg ZmlsZS4gT3RoZXJ3aXNlLCB0aGUgYWN0aW9ucyB0YWtlbiBkZXBlbmQgb24gdGhlCi0gICBjdXJy ZW50IEZJTEUgQ09MTElTSU9OIHNldHRpbmc6IEJBQ0tVUCwgT1ZFUldSSVRFLCBSRU5BTUUsIGV0 YywgYXMKLSAgIGRvY3VtZW50ZWQgaW4gWzQ3MV1Vc2luZyBDLUtlcm1pdC4gQnV0IG5vdyB0aGUg bmV3IGZpbGUgKGlmIGl0IGlzCi0gICBjcmVhdGVkIGF0IGFsbCkgYXV0b21hdGljYWxseSBpbmhl cml0cyB0aGUgcGVybWlzc2lvbnMgKG1vZGUgYml0cykgb2YKLSAgIHRoZSBleGlzdGluZyBmaWxl IGluIGEgd2F5IHRoYXQgaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBwbGF0Zm9ybS4KLQotNC40LjEu MS4gVW5peAotCi0gICBBbGwgbW9kZSBiaXRzIGFyZSBpbmhlcml0ZWQgZXhjZXB0IHRoZSBkaXJl Y3RvcnkgYml0LCBzaW5jZSB0aGUKLSAgIGluY29taW5nIGZpbGUgY2FuIG5vdCBwb3NzaWJseSBi ZSBhIGRpcmVjdG9yeS4gKEluIGFueSBjYXNlLCBpdCBpcyBub3QKLSAgIHBvc3NpYmxlIHRvIHJl Y2VpdmUgYSBmaWxlIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcKLSAgIGRp cmVjdG9yeSB1bmxlc3MgRklMRSBDT0xMSVNJT04gaXMgc2V0IHRvIFJFTkFNRSkuCi0KLTQuNC4x LjIuIFZNUwotCi0gICBGaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgZmls ZSwgdHJhbnNmZXJyZWQgaW4gbW9kZXMKLSAgIG90aGVyIHRoYW4gTEFCRUxFRCBiZXR3ZWVuIFZN UyBzeXN0ZW1zLCBpbmhlcml0IHRoZSBwcm90ZWN0aW9uIG9mIHRoZQotICAgcHJpb3IgdmVyc2lv bi4KLQotNC40LjIgV2hlbiBBVFRSSUJVVEVTIFBST1RFQ1RJT04gaXMgT04KLQotICAgRmlsZSBw ZXJtaXNzaW9ucyBjYW4gYmUgY29udmV5ZWQgYXMgcGFydCBvZiB0aGUgZmlsZSB0cmFuc2ZlciBw cm9jZXNzLAotICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBLZXJtaXQgcHJvdG9jb2wgZGVmaW5p dGlvbi4gSWYgdGhlIGZpbGUgc2VuZGVyCi0gICBwdXRzIHN5c3RlbS1kZXBlbmRlbnQgYW5kL29y IHN5c3RlbS1pbmRlcGVuZGVudCB2ZXJzaW9ucyBvZiB0aGUgZmlsZQotICAgcHJvdGVjdGlvbiAo cGVybWlzc2lvbnMpIGludG8gdGhlIEF0dHJpYnV0ZSAoQSkgcGFja2V0LCB0aGUgZmlsZQotICAg cmVjZWl2ZXIgY2FuIHNldCB0aGUgbmV3IGZpbGUncyBwZXJtaXNzaW9ucyBmcm9tIHRoZW0uIE90 aGVyd2lzZSwgdGhlCi0gICBwZXJtaXNzaW9ucyBhcmUgc2V0IHRoZSBzYW1lIGFzIGZvciBBVFRS SUJVVEVTIFBST1RFQ1RJT04gT0ZGLgotCi0gICBXaGVuIHRoZSBpbmNvbWluZyBBIHBhY2tldCBj b250YWlucyBzeXN0ZW0tZGVwZW5kZW50IHBlcm1pc3Npb25zLCB0aGUKLSAgIGZpbGUgcmVjZWl2 ZXIgY2hlY2tzIHRvIHNlZSBpZiB0aGUgc2VuZGVyIGhhcyB0aGUgc2FtZSBzeXN0ZW0gSUQgKGUu Zy4KLSAgIGJvdGggdGhlIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBzeXN0ZW1zIGFyZSBVTklYLCBv ciBib3RoIGFyZSBWTVMpOyBpZgotICAgc28sIGl0IGRlY29kZXMgYW5kIHVzZXMgdGhlIHN5c3Rl bS1kZXBlbmRlbnQgcGVybWlzc2lvbnM7IG90aGVyd2lzZSBpdAotICAgdXNlcyB0aGUgZ2VuZXJp YyBvbmVzIChpZiBhbnkpIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIG93bmVyIGZpZWxkLAotICAg c2V0dGluZyB0aGUgb3RoZXIgZmllbGRzIGFwcHJvcHJpYXRlbHkgYXMgZGVzY3JpYmVkIGluIHRo ZSBmb2xsb3dpbmcKLSAgIHNlY3Rpb25zLgotCi0gICBTZXR0aW5nIHRoZSBpbmNvbWluZyBmaWxl J3MgcHJvdGVjdGlvbiBmcm9tIHRoZSBBIHBhY2tldCBpcyBjb250cm9sbGVkCi0gICBieSBTRVQg QVRUUklCVVRFUyBQUk9URUNUSU9OIChvciBQRVJNSVNTSU9OKSwgd2hpY2ggaXMgT04gYnkgZGVm YXVsdCwKLSAgIGFuZCBpdHMgc3RhdHVzIGlzIGRpc3BsYXllZCBieSBTSE9XIEFUVFJJQlVURVMu Ci0KLSAgIFRoZSBtYWluIGJlbmVmaXQgb2YgdGhpcyBmZWF0dXJlIGlzIHRvIG5vdCBoYXZlIHRv ICJjaG1vZCAreCIgYW4KLSAgIGV4ZWN1dGFibGUgZmlsZSBhZnRlciB0cmFuc2ZlciBmcm9tIFVO SVggdG8gVU5JWC4gSXRzIGNyb3NzLXBsYXRmb3JtCi0gICBiZW5lZml0cyBhcmUgbGVzcyBldmlk ZW50LCBwZXJoYXBzIHRvIHJldGFpbiB0aGUgc3RhdHVzIG9mIHRoZSBVbml4ICd4JwotICAgYml0 IG9uIGEgVk1TIHN5c3RlbSwgZm9yIHN1YnNlcXVlbnQgdHJhbnNmZXIgYmFjayB0byBhIFVuaXgg c3lzdGVtLgotCi00LjQuMi4xLiBTeXN0ZW0tU3BlY2lmaWMgUGVybWlzc2lvbnMKLQotICAgU3lz dGVtLXNwZWNpZmljIGZpbGUgcGVybWlzc2lvbnMgYXJlIHVzZWQgd2hlbiB0aGUgdHdvIEtlcm1p dCBwcm9ncmFtcwotICAgcmVjb2duaXplIGVhY2ggb3RoZXIgYXMgcnVubmluZyBvbiB0aGUgc2Ft ZSB0eXBlIG9mIHN5c3RlbS4gRm9yCi0gICBleGFtcGxlLCBib3RoIGFyZSBydW5uaW5nIHVuZGVy IHNvbWUgZm9ybSBvZiBVTklYIChpdCBkb2Vzbid0IG1hdHRlcgotICAgd2hpY2ggVU5JWCB2YXJp YXRpb24gLS0gSFAtVVgsIFNvbGFyaXMsIEFJWCwgZXRjIC0tIGFsbCB1c2UgdGhlIHNhbWUKLSAg IHNjaGVtZSBmb3IgZmlsZSBwZXJtaXNzaW9ucyk7IG9yIGJvdGggYXJlIHJ1bm5pbmcgdW5kZXIg Vk1TIChldmVuIGlmCi0gICBvbmUgaXMgb24gYW4gQWxwaGEgYW5kIHRoZSBvdGhlciBvbiBhIFZB WCwgYW5kL29yIG9uZSBpcyBvbGQgYW5kIHRoZQotICAgb3RoZXIgaXMgbmV3KS4KLQotNC40LjIu MS4xLiBVTklYCi0KLSAgIFVOSVggc3VwcG9ydHMgdGhyZWUgY2F0ZWdvcmllcyBvZiB1c2Vycywg RmlsZSBPd25lciwgR3JvdXAsIGFuZCBXb3JsZCwKLSAgIGFuZCB0aHJlZSB0eXBlcyBvZiBmaWxl IGFjY2VzcyBwZXJtaXNzaW9uOiBSZWFkLCBXcml0ZSwgYW5kIEV4ZWN1dGUuCi0gICBUaHVzLCBh IFVOSVggZmlsZSdzIHBlcm1pc3Npb25zIGFyZSBleHByZXNzZWQgaW4gOSBiaXRzLgotCi0gICBU aGUgc3lzdGVtLWRlcGVuZGVudCBwZXJtaXNzaW9uIHN0cmluZyBmb3IgVU5JWCBpcyBhIDMtZGln aXQgb2N0YWwKLSAgIHN0cmluZywgdGhlIGxvdy1vcmRlciA5IGJpdHMgb2YgdGhlIHN0X21vZGUg bWVtYmVyIG9mIHRoZSBzdGF0IHN0cnVjdDsKLSAgIHdlIGRlbGliZXJhdGVseSBjaG9wIG9mZiB0 aGUgImZpbGUgZm9ybWF0IiBiaXRzIGJlY2F1c2UgdGhleSBhcmUgbm90Ci0gICBwZXJtaXNzaW9u cywgbm9yIGRvIHdlIGNvbnZleSB0aGUgc2V0dWlkL3NldGdpZCBiaXRzLCBsb2NrIGJpdCwgc3Rp Y2t5Ci0gICBiaXQsIGV0Yy4KLQotNC40LjIuMS4yLiBWTVMKLQotICAgVk1TIHN1cHBvcnRzIGZv dXIgY2F0ZWdvcmllcyBvZiB1c2VycywgU3lzdGVtLCBGaWxlIE93bmVyLCBHcm91cCwgYW5kCi0g ICBXb3JsZCwgYW5kIGZvdXIgdHlwZXMgb2YgZmlsZSBhY2Nlc3MgcGVybWlzc2lvbjogUmVhZCwg V3JpdGUsIEV4ZWN1dGUsCi0gICBhbmQgRGVsZXRlLiBUaHVzLCBhIFZNUyBmaWxlJ3MgcGVybWlz c2lvbnMgYXJlIGV4cHJlc3NlZCBpbiAxNiBiaXRzLgotCi0gICBUaGUgc3lzdGVtLWRlcGVuZGVu dCBwcm90ZWN0aW9uIHN0cmluZyBmb3IgVk1TIGlzIGEgNC1kaWdpdCBoZXhhZGVjaW1hbAotICAg c3RyaW5nLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnRlcm5hbC1mb3JtYXQgcHJvdGVjdGlvbiB3 b3JkIG9mIHRoZQotICAgZmlsZSAoUldFRCBmb3IgZWFjaCBvZiBXb3JsZCxHcm91cCxPd25lcixT eXN0ZW0pLiBBIG5ldyBmaWxlIG5vcm1hbGx5Ci0gICBnZXRzIGFsbCAxNiBwcm90ZWN0aW9uIGJp dHMgZnJvbSB0aGUgb3JpZ2luYWwgZmlsZSBvZiB0aGUgc2FtZSBuYW1lLgotCi0gICBOb3RlOiBW TVMtdG8tVk1TIHRyYW5zZmVycyB0YWtlIHBsYWNlIGluIExBQkVMRUQgbW9kZSB3aGVuIHRoZSB0 d28KLSAgIEMtS2VybWl0cyByZWNvZ25pemUgZWFjaCBvdGhlcidzIHBsYXRmb3JtIGFzIFZNUyAo dW5sZXNzIHlvdSBoYXZlCi0gICBkaXNhYmxlZCBMQUJFTEVELW1vZGUgdHJhbnNmZXJzKS4gSW4g dGhpcyBjYXNlLCBhbGwgb2YgYSBmaWxlJ3MKLSAgIGF0dHJpYnV0ZXMgYXJlIHByZXNlcnZlZCBp biB0aGUgdHJhbnNmZXIgYW5kIHRoZSBwcm90ZWN0aW9uIG1hc2sgKGFuZAotICAgb3RoZXIgaW5m b3JtYXRpb24pIGlzIHRha2VuIGZyb20gdGhlIGZpbGUncyBpbnRlcm5hbCBpbmZvcm1hdGlvbiwg YW5kCi0gICB0aGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBhbnkgaW5mb3JtYXRpb24gaW4gdGhl IEF0dHJpYnV0ZSBwYWNrZXRzLgotICAgWW91IGNhbiBkZWZlYXQgdGhlIGF1dG9tYXRpYyBzd2l0 Y2hpbmcgaW50byBMQUJFTEVEIG1vZGUgKGlmIHlvdSB3YW50Ci0gICB0bykgd2l0aCBTRVQgVFJB TlNGRVIgTU9ERSBNQU5VQUwuCi0KLTQuNC4yLjIuIFN5c3RlbS1JbmRlcGVuZGVudCBQZXJtaXNz aW9ucwotCi0gICBUaGUgc3lzdGVtLWluZGVwZW5kZW50ICgiZ2VuZXJpYyIpIHByb3RlY3Rpb24g aXMgdXNlZCB3aGVuIHRoZSBzeXN0ZW0KLSAgIElEcyBvZiB0aGUgdHdvIEtlcm1pdCBwcm9ncmFt cyBkbyBub3QgYWdyZWUgKGUuZy4gb25lIGlzIFVOSVgsIHRoZQotICAgb3RoZXIgaXMgVk1TKS4g VGhlIGdlbmVyaWMgcHJvdGVjdGlvbiBhdHRyaWJ1dGUgaW5jbHVkZXMgdGhlIGZvbGxvd2luZwot ICAgcGVybWlzc2lvbnMgKG5vdCBhbGwgYXJlIGFwcGxpY2FibGUgdG8gZXZlcnkgZmlsZSBzeXN0 ZW0pOiBSZWFkLCBXcml0ZSwKLSAgIEFwcGVuZCwgRXhlY3V0ZSwgRGVsZXRlLCBTZWFyY2guIFRo ZSBnZW5lcmljIHBlcm1pc3Npb25zIGFyZSBkZXJpdmVkCi0gICBmcm9tIHRoZSBvd25lciBwZXJt aXNzaW9ucyBvZiB0aGUgc291cmNlIGZpbGUsIHRodXMsIGEgVW5peCAndycKLSAgIHBlcm1pc3Np b24gYmVjb21lcyBWTVMgV3JpdGUsRGVsZXRlLgotCi0gICBUaGUgT3duZXIgZmllbGQgb2YgdGhl IG5ldyBmaWxlJ3MgcGVybWlzc2lvbnMgaXMgc2V0IGZyb20gdGhlIGluY29taW5nCi0gICBnZW5l cmljIHByb3RlY3Rpb24gYXR0cmlidXRlLgotCi0gICBJbiBVTklYLCB0aGUgR3JvdXAgYW5kIFdv cmxkIHBlcm1pc3Npb25zIGFyZSBzZXQgYWNjb3JkaW5nIHRvIHlvdXIKLSAgIHVtYXNrLCBleGNl cHQgdGhhdCBleGVjdXRlIHBlcm1pc3Npb24gaXMgTk9UIHNldCBpbiB0aGVzZSBmaWVsZHMgaWYg aXQKLSAgIHdhcyBub3QgYWxzbyBzZXQgaW4gdGhlIGdlbmVyaWMgcHJvdGVjdGlvbiAoYW5kIGNv bnNlcXVlbnRseSwgaXMgc2V0IGluCi0gICB0aGUgT3duZXIgZmllbGQpLgotCi0gICBJbiBWTVMs IHRoZSBTeXN0ZW0sIEdyb3VwLCBhbmQgV29ybGQgcGVybWlzc2lvbnMgYXJlIHNldCBhY2NvcmRp bmcgdG8KLSAgIHRoZSBwcm9jZXNzIGRlZmF1bHQgZmlsZSBwZXJtaXNzaW9uIChhcyBzaG93biBp biBWTVMgYnkgU0hPVwotICAgUFJPVEVDVElPTiksIGV4Y2VwdCB0aGF0IG5vIHBlcm1pc3Npb25z IGFyZSBhbGxvd2VkIGluIHRoZXNlIGZpZWxkcwotICAgdGhhdCBhcmUgbm90IGluY2x1ZGVkIGlu IHRoZSBnZW5lcmljIHBlcm1pc3Npb25zLgotCi0gICBOb3RlIHRoYXQgdGhlIFZNUyBhbmQgVU5J WCBpbnRlcnByZXRhdGlvbnMgb2YgRXhlY3V0ZSBwZXJtaXNzaW9uIGFyZQotICAgbm90IGlkZW50 aWNhbC4gSW4gVU5JWCwgYSBmaWxlIChiaW5hcnkgZXhlY3V0YWJsZSwgc2hlbGwgc2NyaXB0LCBl dGMpCi0gICBtYXkgbm90IGJlIGV4ZWN1dGVkIHVubGVzcyBpdCBoYXMgRXhlY3V0ZSBwZXJtaXNz aW9uLCBhbmQgbm9ybWFsbHkKLSAgIGZpbGVzIHRoYXQgYXJlIG5vdCBpbnRlbmRlZCBmb3IgZXhl Y3V0aW9uIGRvIG5vdCBoYXZlIEV4ZWN1dGUKLSAgIHBlcm1pc3Npb24uIEluIFZNUywgUmVhZCBw ZXJtaXNzaW9uIGltcGxpY2l0bHkgc3VwcGxpZXMgRXhlY3V0ZQotICAgY2FwYWJpbGl0eS4gR2Vu ZXJhbGx5IGZpbGVzIHRoYXQgaGF2ZSBSZWFkIHBlcm1pc3Npb24gYWxzbyBoYXZlCi0gICBleHBs aWNpdCBFeGVjdXRlIHBlcm1pc3Npb24sIGJ1dCBmaWxlcyAoYmluYXJ5IGV4ZWN1dGFibGVzLCBE Q0wgY29tbWFuZAotICAgcHJvY2VkdXJlcykgdGhhdCBoYXZlIFJlYWQgcGVybWlzc2lvbiBhbmQg bm90IEV4ZWN1dGUgcGVybWlzc2lvbiBjYW4KLSAgIHN0aWxsIGJlIGV4ZWN1dGVkLgotCi00LjUu IEZpbGUgTWFuYWdlbWVudCBDb21tYW5kcwotCi00LjUuMS4gVGhlIERJUkVDVE9SWSBDb21tYW5k Ci0KLSAgIFByaW9yIHRvIEMtS2VybWl0IDcuMCwgdGhlIERJUkVDVE9SWSBjb21tYW5kIGFsd2F5 cyByYW4gYW4gZXh0ZXJuYWwKLSAgIHN5c3RlbSBjb21tYW5kIChzdWNoIGFzICJscyIgb24gVU5J WCkgb3IgcHJvZ3JhbSB0byBwcm9kdWN0IHRoZQotICAgZGlyZWN0b3J5IGxpc3RpbmcuIFRoaXMg aGFkIGNlcnRhaW4gYWR2YW50YWdlcywgbW9zdGx5IHRoYXQgeW91IGNvdWxkCi0gICBpbmNsdWRl IHN5c3RlbS1kZXBlbmRlbnQgb3B0aW9ucyBmb3IgY3VzdG9taXplZCBsaXN0aW5ncywgZS5nLiBv biBVTklYOgotCi0gIGRpciAtbHQgYyogfCBtb3JlCi0KLSAgIG9yIGluIFZNUzoKLQotICBkaXJl Y3RvcnkgL3NpemUvZGF0ZS9wcm90ZWN0aW9uL2V4Y2VwdD0qLm9iaiBvb2ZhLio7MAotCi0gICBU aGlzIGFwcHJvYWNoLCBob3dldmVyLCBjYXJyaWVzIHNvbWUgZGlzYWR2YW50YWdlczogQy1LZXJt aXQgY2FuJ3QKLSAgIHJldHVybiBTVUNDRVNTIG9yIEZBSUxVUkUgc3RhdHVzIGZvciAoZS5nLikg ImRpciBmb28iIGFjY29yZGluZyB0bwotICAgd2hldGhlciB0aGUgZmlsZSAiZm9vIiBleGlzdHM7 IGFuZCBpdCBydW5zIGFuIGluZmVyaW9yIHByb2Nlc3MsIHdoaWNoCi0gICBtaWdodCBiZSBhIHBy b2JsZW0gaW4gc29tZSBlbnZpcm9ubWVudHMgZm9yIHJlc291cmNlIGFuZC9vciBzZWN1cml0eQot ICAgcmVhc29ucywgYW5kIHdvbid0IHdvcmsgYXQgYWxsIGluIGEgIm5vcHVzaCIgZW52aXJvbm1l bnQgKGUuZy4gb25lIGluCi0gICB3aGljaCBDLUtlcm1pdCBpcyBjb25maWd1cmVkIHRvIGZvcmJp ZCBhY2Nlc3MgdG8gZXh0ZXJpb3IgY29tbWFuZHMgYW5kCi0gICBwcm9ncmFtcywgZS5nLiBpbiBh IFZNUyAiY2FwdGl2ZSBhY2NvdW50IikuCi0KLSAgIEluIEMtS2VybWl0IDcuMCBvbiBWTVMgYW5k IFVOSVgsIGFuZCBpbiBLOTUgMS4xLjE5IGFuZCBsYXRlciwgdGhlCi0gICBESVJFQ1RPUlkgY29t bWFuZCBpcyBpbnRlcm5hbCB0byBLZXJtaXQuIEl0IGNhbiBiZSBydW4gaW4gYSAibm9wdXNoIgot ICAgZW52aXJvbm1lbnQgYW5kIHJldHVybnMgU1VDQ0VTUyBvciBGQUlMVVJFIHN0YXR1cyBhcHBy b3ByaWF0ZWx5LiBJbgotICAgVU5JWCBpdCBwcmludHMgYWxsIGRhdGVzIGFuZCB0aW1lcyBpbiBh IGNvbnNpc3RlbnQgd2F5ICh1bmxpa2UgbHMpLiBJbgotICAgVk1TIGl0IHByaW50cyBwcmVjaXNl IGZpbGUgc2l6ZXMsIHJhdGhlciB0aGFuICJibG9ja3MiLiBJdCBvZmZlcnMKLSAgIHNldmVyYWwg Zm9ybWF0dGluZyBhbmQgb3RoZXIgb3B0aW9ucywgYnV0IGl0IGlzIG5vdCBuZWNlc3NhcmlseSBt b3JlCi0gICBmbGV4aWJsZSB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIGV4dGVybmFsIGNvbW1hbmRz IG9yIHByb2dyYW1zICh0aGUgVU5JWAotICAgImxzIiBwcm9ncmFtLCB0aGUgVk1TICJkaXJlY3Rv cnkiIGNvbW1hbmQpLiBUaGUgc3ludGF4IGlzOgotCi0gICBESVJFQ1RPUlkgWyBzd2l0Y2ggWyBz d2l0Y2ggWyAuLi4gXSBdIF0gWyBmaWxlc3BlYyBdCi0KLSAgIElmIG5vIGZpbGVzcGVjIGlzIGdp dmVuLCBhbGwgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFyZSBsaXN0ZWQuCi0KLSAg IE9wdGlvbmFsIHN3aXRjaGVzIGluY2x1ZGUgYWxsIHRoZSBzdGFuZGFyZCBmaWxlLXNlbGVjdGlv biBzd2l0Y2hlcwotICAgcHJlc2VudGVkIGluIFs0NzJdU2VjdGlvbiAxLjUuNCwgcGx1czoKLQot ICAgL0FMTAotICAgICAgICAgIFNob3cgYm90aCByZWd1bGFyIGZpbGVzIGFuZCBkaXJlY3Rvcmll czsgdGhpcyBpcyB0aGUgZGVmYXVsdC4KLQotICAgL0FSUkFZOngKLSAgICAgICAgICBJbnN0ZWFk IG9mIGRpc3BsYXlpbmcgYSBkaXJlY3RvcnkgbGlzdGluZywgcHV0IHRoZSBmaWxlcyB0aGF0Ci0g ICAgICAgICAgd291bGQgaGF2ZSBiZWVuIHNob3duIChiYXNlZCBvbiB0aGUgZmlsZXNwZWMgYW5k IG90aGVyIHNlbGVjdGlvbgotICAgICAgICAgIHN3aXRjaGVzKSBpbiB0aGUgZ2l2ZW4gYXJyYXku IFRoZSBhcnJheSBuZWVkIG5vdCAoYW5kIHNob3VsZAotICAgICAgICAgIG5vdCkgYmUgcHJlZGVj bGFyZWQ7IGlmIHRoZSBhcnJheSBhbHJlYWR5IGV4aXN0cywgaXQgaXMKLSAgICAgICAgICBkZXN0 cm95ZWQgYW5kIHJldXNlZC4gVGhlIGFycmF5IG5hbWUgY2FuIGJlIGEgc2luZ2xlIGxldHRlciwK LSAgICAgICAgICBsaWtlICJhIiwgb3IgYW55IGZ1bGxlciBmb3JtLCBzdWNoIGFzICImYSIsICJc JmEiLCAiXCZhW10iLCBldGMuCi0gICAgICAgICAgSWYgdGhlIC9BUlJBWSBzd2l0Y2ggaXMgaW5j bHVkZWQsIHRoZSBmb2xsb3dpbmcgb3RoZXIgc3dpdGNoZXMKLSAgICAgICAgICBhcmUgaWdub3Jl ZDogL0JSSUVGLCAvVkVSQk9TRSwgL0hFQURJTkcsIC9QQUdFLCAvRU5HTElTSERBVEUsCi0gICAg ICAgICAgL0lTT0RBVEUsIC9YRkVSTU9ERSwgL01FU1NBR0UsIC9TT1JULCAvUkVWRVJTRSwgL0FT Q0VORElORy4gSW4KLSAgICAgICAgICBvdGhlciB3b3Jkcywgb25seSBmaWxlIHNlbGVjdGlvbiBz d2l0Y2hlcyBhcmUgbWVhbmluZ2Z1bCB3aXRoCi0gICAgICAgICAgL0FSUkFZOiAvRklMRVMsIC9E SVJFQ1RPUklFUywgL0FMTCwgL0RPVEZJTEVTLCAvTk9CQUNLVVAsCi0gICAgICAgICAgL1JFQ1VS U0lWRSwgL1NNQUxMRVIsIC9MQVJHRVIsIC9BRlRFUiwgL0JFRk9SRSwgL0VYQ0VQVCwgZXRjLgot ICAgICAgICAgIFRoZSByZXN1bHRpbmcgYXJyYXkgaGFzIHRoZSBudW1iZXIgb2YgZmlsZXMgKG4p IGFzIGl0cyAwdGgKLSAgICAgICAgICBlbGVtZW50LCBhbmQgdGhlIGZpbGVuYW1lcyBpbiBlbGVt ZW50cyAxIHRocm91Z2ggbiBFeGFtcGxlOgotCi0gIGRpciAvYXJyYXk6JmEgL2ZpbGVzIC9ub2Jh Y2t1cCAvYWZ0ZXI6MTk5OTAxMDEgL2xhcmdlcjoxMDAwMCBbYWJdKgotICBzaG93IGFycmF5ICZh Ci0KLSAgIC9GSUxFUwotICAgICAgICAgIE9ubHkgc2hvdyByZWd1bGFyIGZpbGVzLgotCi0gICAv RElSRUNUT1JJRVMKLSAgICAgICAgICBPbmx5IHNob3cgZGlyZWN0b3JpZXMuCi0KLSAgIC9CQUNL VVAKLSAgICAgICAgICBJbiBVTklYLCBPUy05LCBLLTk1LCBhbmQgb3RoZXIgdmVyc2lvbnMgdGhh dCBzdXBwb3J0IFNFVCBGSUxFCi0gICAgICAgICAgQ09MTElTSU9OIEJBQ0tVUCBhbmQgY3JlYXRl IGJhY2t1cCBmaWxlcyBieSBhcHBlbmRpbmcgLn5ufiB0bwotICAgICAgICAgIHRoZSBmaWxlbmFt ZSAod2hlcmUgIm4iIGlzIGEgbnVtYmVyKSwgL0JBQ0tVUCBtZWFucyB0byBpbmNsdWRlCi0gICAg ICAgICAgdGhlc2UgZmlsZXMgaW4gZGlyZWN0b3J5IGxpc3RpbmdzLiBUaGlzIGlzIHRoZSBkZWZh dWx0LgotCi0gICAvTk9CQUNLVVAKLSAgICAgICAgICBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiAv QkFDS1VQOiB0aGF0IGlzLCBkbyBub3QgaW5jbHVkZSBiYWNrdXAKLSAgICAgICAgICBmaWxlcyBp biB0aGUgbGlzdGluZy4KLQotICAgL0JSSUVGCi0gICAgICAgICAgTGlzdCBmaWxlbmFtZXMgb25s eTsgdXNlIGEgY29tcGFjdCBmb3JtYXQsIGFzIG1hbnkgZmlsZW5hbWVzIGFzCi0gICAgICAgICAg d2lsbCBmaXQgYWNyb3NzIHRoZSBzY3JlZW4gKGJhc2VkIG9uIHRoZSBsb25nZXN0IG5hbWUpLiBB IGJyaWVmCi0gICAgICAgICAgbGlzdGluZyBpcyBhbHdheXMgc29ydGVkIGFscGhhYmV0aWNhbGx5 LgotCi0gICAvVkVSQk9TRQotICAgICAgICAgIExpc3Qgb25lIGZpbGUgcGVyIGxpbmUsIGFuZCBp bmNsdWRlIGRhdGUsIHNpemUsIGFuZCAoaW4gVU5JWAotICAgICAgICAgIG9ubHkpIHBlcm1pc3Np b25zIG9mIGVhY2ggZmlsZS4gVGhpcyBpcyB0aGUgb3Bwb3NpdGUgb2YgL0JSSUVGLAotICAgICAg ICAgIGFuZCBpcyB0aGUgZGVmYXVsdC4KLQotICAgL1BBR0UKLSAgICAgICAgICBQYXVzZSBhdCB0 aGUgZW5kIG9mIGVhY2ggc2NyZWVuZnVsIGFuZCBnaXZlIGEgIm1vcmU/IiBwcm9tcHQsCi0gICAg ICAgICAgZXZlbiBpZiBTRVQgQ09NTUFORCBNT1JFLVBST01QVElORyBpcyBPRkYuCi0KLSAgIC9O T1BBR0UKLSAgICAgICAgICBEb24ndCBwYXVzZSBhdCB0aGUgZW5kIG9mIGVhY2ggc2NyZWVuZnVs IGFuZCBnaXZlIGEgIm1vcmU/IgotICAgICAgICAgIHByb21wdCwgZXZlbiBpZiBTRVQgQ09NTUFO RCBNT1JFLVBST01QVElORyBpcyBPTi4gSWYgbmVpdGhlcgotICAgICAgICAgIC9QQUdFIG9yIC9O T1BBR0UgaXMgZ2l2ZW4sIHBhZ2luZyBpcyBhY2NvcmRpbmcgdG8gdGhlIHByZXZhaWxpbmcKLSAg ICAgICAgICBDT01NQU5EIE1PUkUtUFJPTVBUSU5HIHNldHRpbmcgKHdoaWNoIGNhbiBiZSBkaXNw bGF5ZWQgd2l0aCBTSE9XCi0gICAgICAgICAgQ09NTUFORCkuCi0KLSAgIC9FTkdMSVNIREFURQot ICAgICAgICAgIFNob3cgZGF0ZXMgaW4gZGQtbW1tLXl5eXkgZm9ybWF0OyBtbW0gaXMgdGhlIGZp cnN0IHRocmVlIGxldHRlcnMKLSAgICAgICAgICBvZiB0aGUgRW5nbGlzaCBtb250aCBuYW1lLgot Ci0gICAvSVNPREFURQotICAgICAgICAgIFNob3cgZGF0ZXMgaW4geXl5eS1tbS1kZCBmb3JtYXQ7 IG1tIGlzIHRoZSBtb250aCBudW1iZXIsIDEtMTIuCi0gICAgICAgICAgVGhpcyBpcyB0aGUgb3Bw b3NpdGUgb2YgL0VOR0xJU0hEQVRFLCBhbmQgaXMgdGhlIGRlZmF1bHQuCi0KLSAgIC9IRUFESU5H UwotICAgICAgICAgIFByaW50IGEgaGVhZGluZyBiZWZvcmUgdGhlIGxpc3RpbmcgYW5kIGEgc3Vt bWFyeSBhdCB0aGUgZW5kLgotCi0gICAvTk9IRUFESU5HUwotICAgICAgICAgIERvbid0IHByaW50 IGEgaGVhZGluZyBiZWZvcmUgdGhlIGxpc3Rpbmcgb3IgYSBzdW1tYXJ5IGF0IHRoZQotICAgICAg ICAgIGVuZC4gVGhpcyBpcyB0aGUgb3Bwb3NpdGUgb2YgL0hFQURJTkdTLCBhbmQgaXMgdGhlIGRl ZmF1bHQuCi0KLSAgIC9YRkVSTU9ERQotICAgICAgICAgIE9ubHkgaW4gS2VybWl0IHByb2dyYW1z IHRoYXQgc3VwcG9ydCBTRVQgRklMRSBQQVRURVJOUy4gSWYgdGhpcwotICAgICAgICAgIHN3aXRj aCBpcyBpbmNsdWRlZCwgYW5kIHRoZSBmaWxlbmFtZSBtYXRjaGVzIGFueSBGSUxFCi0gICAgICAg ICAgQklOQVJZLVBBVFRFUk4gKFs0NzNdU2VjdGlvbiA0LjMpLCAiKEIpIiBpcyBwcmludGVkIGFm dGVyIHRoZQotICAgICAgICAgIGZpbGVuYW1lOyBvdGhlcndpc2UsIGlmIGl0IG1hdGNoZXMgYSBG SUxFIFRFWFQtUEFUVEVSTiwgIihUKSIgaXMKLSAgICAgICAgICBwcmludGVkLgotCi0gICAvTk9Y RkVSTU9ERQotICAgICAgICAgIERvbid0IGRpc3BsYXkgdHJhbnNmZXItbW9kZSBpbmRpY2F0b3Jz LiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZgotICAgICAgICAgIC9YRkVSTU9ERSBhbmQgaXMgdGhl IGRlZmF1bHQuCi0KLSAgIC9SRUNVUlNJVkUKLSAgICAgICAgICBTaG93IGZpbGVzIG5vdCBvbmx5 IGluIHRoZSBnaXZlbiBkaXJlY3RvcnksIGJ1dCBhbHNvIGluIGl0cwotICAgICAgICAgIHN1YmRp cmVjdG9yaWVzIChpZiBhbnkpLCB0aGVpciBzdWJkaXJlY3RvcmllcywgZXRjLgotCi0gICAvTk9S RUNVUlNJVkUKLSAgICAgICAgICBEb24ndCBzaG93IGZpbGVzIGluIHN1YmRpcmVjdG9yaWVzLiBU aGlzIGlzIHRoZSBvcHBvc2l0ZSBvZgotICAgICAgICAgIC9SRUNVUlNJVkUsIGFuZCBpcyB0aGUg ZGVmYXVsdC4KLQotICAgL01FU1NBR0U6dGV4dAotICAgICAgICAgIFRoaXMgbGV0cyB5b3Ugc3Bl Y2lmeSBhIHNob3J0IHRleHQgc3RyaW5nIHRvIGJlIGFwcGVuZGVkIHRvIHRoZQotICAgICAgICAg IGVuZCBvZiBlYWNoIGRpcmVjdG9yeSBsaXN0aW5nIGxpbmUgKGEgc3BhY2UgaXMgc3VwcGxpZWQK LSAgICAgICAgICBhdXRvbWF0aWNhbGx5KS4gSWYgdGhlIHRleHQgY29udGFpbnMgYW55IHNwYWNl cywgZW5jbG9zZSBpdCBpbgotICAgICAgICAgIGJyYWNlcywgZS5nLiAvTUVTU0FHRTp7dHdvIHdv cmRzfS4KLQotICAgL05PTUVTU0FHRQotICAgICAgICAgIERvbid0IGFwcGVuZCBhbnkgbWVzc2Fn ZSB0byB0aGUgZW5kIG9mIGVhY2ggZGlyZWN0b3J5IGxpc3RpbmcKLSAgICAgICAgICBsaW5lIChk ZWZhdWx0KS4KLQotICAgL1NPUlQ6W3tOQU1FLFNJWkUsREFURX1dCi0gICAgICAgICAgU29ydCB0 aGUgbGlzdGluZyBieSBuYW1lLCBzaXplLCBvciBkYXRlLiBJZiB0aGUgL1NPUlQgc3dpdGNoIGlz Ci0gICAgICAgICAgZ2l2ZW4gYnV0IHRoZSAic29ydC1ieSIga2V5d29yZCBpcyBvbWl0dGVkLCB0 aGUgbGlzdGluZyBpcwotICAgICAgICAgIHNvcnRlZCBieSBuYW1lLiAvU09SVDpOQU1FIC9BU0NF TkRJTkcgKGFscGhhYmV0aWMgc29ydCBieSBuYW1lKQotICAgICAgICAgIGlzIHRoZSBkZWZhdWx0 LgotCi0gICAvTk9TT1JUCi0gICAgICAgICAgRG9uJ3Qgc29ydCB0aGUgbGlzdGluZy4gRmlsZXMg YXJlIGxpc3RlZCBpbiB3aGF0ZXZlciBvcmRlciB0aGV5Ci0gICAgICAgICAgYXJlIHN1cHBsaWVk IGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLCBlLmcuIGlub2RlIG9yZGVyIGluIFVOSVguCi0KLSAg IC9SRVZFUlNFCi0gICAgICAgICAgSWYgdGhlIC9TT1JUIHN3aXRjaCBpcyBnaXZlbiwgcmV2ZXJz ZSB0aGUgb3JkZXIgb2YgdGhlIHNvcnQuCi0gICAgICAgICAgU3lub255bTogL0RFU0NFTkRJTkcu Ci0KLSAgIC9BU0NFTkRJTkcKLSAgICAgICAgICBJZiB0aGUgL1NPUlQgc3dpdGNoIGlzIGdpdmVu LCBzb3J0IHRoZSBsaXN0aW5nIGluIG5vcm1hbCBvcmRlci4KLSAgICAgICAgICBUaGlzIGlzIHRo ZSBvcHBvc2l0ZSBvZiAvUkVWRVJTRSBhbmQgaXMgdGhlIGRlZmF1bHQuCi0KLSAgIE5vdGUgdGhh dCBtb3N0IG9mIHRoZSBESVJFQ1RPUlktc3BlY2lmaWMgc3dpdGNoZXMgY29tZSBpbiBwYWlycywg aW4KLSAgIHdoaWNoIG9uZSBtZW1iZXIgb2YgYSBwYWlyIChlLmcuIC9OT0hFQURJTkdTKSBpcyB0 aGUgb3Bwb3NpdGUgb2YgdGhlCi0gICBvdGhlciAoZS5nLiAvSEVBRElOR1MpLgotCi0gICBJZiB5 b3UgYWx3YXlzIHdhbnQgdG8gdXNlIGNlcnRhaW4gb3B0aW9ucywgeW91IGNhbiBzZXQgdGhlbSB3 aXRoIHRoZQotICAgU0VUIE9QVElPTlMgRElSRUNUT1JZIGNvbW1hbmQgKFs0NzRdU2VjdGlvbiAx LjUuNSkuIFVzZSBTSE9XIE9QVElPTlMgdG8KLSAgIGxpc3QgdGhlIG9wdGlvbnMgY3VycmVudGx5 IGluIGVmZmVjdC4gVG8gbWFrZSB0aGUgZGVzaXJlZCBvcHRpb25zIGFwcGx5Ci0gICBldmVyeSB0 aW1lIHlvdSBydW4gQy1LZXJtaXQsIHB1dCBhIFNFVCBPUFRJT05TIERJUkVDVE9SWSBjb21tYW5k IGluCi0gICB5b3VyIEMtS2VybWl0IGN1c3RvbWl6YXRpb24gZmlsZSwgc3BlY2lmeWluZyB0aGUg ZGVzaXJlZCBvcHRpb25zLgotICAgT3B0aW9ucyBzZXQgaW4gdGhpcyBtYW5uZXIgYXBwbHkgdG8g ZXZlcnkgc3Vic2VxdWVudCBESVJFQ1RPUlkgY29tbWFuZC4KLSAgIE9mIGNvdXJzZSwgaWYgeW91 IGluY2x1ZGUgc3dpdGNoZXMgaW4gYSBESVJFQ1RPUlkgY29tbWFuZCwgdGhlc2UKLSAgIG92ZXJy aWRlIGFueSBkZWZhdWx0cywgYnVpbHQtaW4gb3IgY3VzdG9tLiBFeGFtcGxlOgotCi0gIERJUkVD VE9SWSAgICAgICAgICAgIDsgVXNlICJmYWN0b3J5IGRlZmF1bHRzIgotICBTRVQgT1BUSU9OUyBE SVJFQ1RPUlkgL1NPUlQ6U0laRSAvUkVWRVJTRSAvSEVBRElOR1MgIDsgQ3VzdG9taXplIGRlZmF1 bHRzCi0gIERJUkVDVE9SWSAgICAgICAgICAgIDsgVXNlIGN1c3RvbWl6ZWQgZGVmYXVsdHMKLSAg RElSIC9TT1JUOk5BTUUgICAgICAgOyBPdmVycmlkZSBjdXN0b21pemVkIGRlZmF1bHQgU09SVCBr ZXkKLSAgU0VUIE9QVCBESVIgL1JFQ1VSUyAgOyBBZGQgL1JFQ1VSU0lWRSB0byBjdXN0b21pemVk IGRlZmF1bHRzCi0gIERJUiAvQVNDRU5EICAgICAgICAgIDsgT3ZlcnJpZGUgY3VzdG9taXplZCBk ZWZhdWx0IFNPUlQgb3JkZXIKLQotICAgTm90ZXM6Ci0KLSAgICAgKiBPbmx5IGEgc2luZ2xlIHNv cnQga2V5IGlzIHN1cHBvcnRlZDsgdGhlcmUgaXMgcHJlc2VudGx5IG5vIHdheSB0bwotICAgICAg IGhhdmUgbXVsdGlwbGUgc29ydCBrZXlzLgotICAgICAqIElmIHRoZSAvQlJJRUYgc3dpdGNoIGlz IGdpdmVuLCBhbGwgb3RoZXIgc3dpdGNoZXMgKGV4Y2VwdAotICAgICAgIC9bTk9dUkVDVVJTSVZF LCAvW05PXURPVEZJTEVTLCAvRElSRUNUT1JJRVMsIC9GSUxFUywgYW5kIC9BTEwpIGFyZQotICAg ICAgIGlnbm9yZWQuCi0gICAgICogL1NPUlQ6YW55dGhpbmcgZ2l2ZXMgaW5jb3JyZWN0IHJlc3Vs dHMgaWYgYW55IGZpbGVzIGhhdmUgbGVuZ3RocwotICAgICAgIGdyZWF0ZXIgdGhhbiAxMCBkaWdp dHMgKGkuZS4gdGhhdCBhcmUgbW9yZSB0aGFuIDk5OTk5OTk5OTkgYnl0ZXMKLSAgICAgICBsb25n LCBpLmUuIGlmIHRoZXkgYXJlIDEwR0Igb3IgbW9yZSBpbiBzaXplKSBiZWNhdXNlIHRoZSBvdmVy bG9uZwotICAgICAgIGxlbmd0aCBmaWVsZCBjYXVzZXMgdGhlIGRhdGUgYW5kIG5hbWUgZmllbGRz IHRvIGJlIG1pc2FsaWduZWQuCi0gICAgICogL1NPUlQ6TkFNRSBpcyByZWR1bmRhbnQgaW4gVk1T IHNpbmNlIFZNUyByZXR1cm5zIGZpbGVuYW1lcyBpbgotICAgICAgIGFscGhhYmV0aWMgb3JkZXIg YW55d2F5LgotICAgICAqIC9TT1JUOk5BTUUgaWdub3JlcyBhbHBoYWJldGljIGNhc2Ugb24gcGxh dGZvcm1zIHdoZXJlIGNhc2UgZG9lcyBub3QKLSAgICAgICBtYXR0ZXIgaW4gZmlsZW5hbWVzLCBi dXQgdGhpcyB3b3JrcyBvbmx5IGZvciB1bmFjY2VudGVkIFJvbWFuCi0gICAgICAgbGV0dGVycyBB LVouCi0gICAgICogL1NPUlQ6TkFNRSBpcyBjdXJyZW50bHkgYmFzZWQgb24gY29kZSB2YWx1ZXMs IGFuZCBzbyB3b3JrcyBmaW5lIGZvcgotICAgICAgIEFTQ0lJLCBidXQgd2lsbCBwcm9iYWJseSBw cm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cyBmb3IgZmlsZXMgd2l0aAotICAgICAgIG5vbi1BU0NJ SSBvciA4LWJpdCBjaGFyYWN0ZXJzIGluIHRoZWlyIG5hbWVzLiAoTG9jYWxlLWJhc2VkIHNvcnRp bmcKLSAgICAgICByYWlzZXMgcmF0aGVyIHNpZ25pZmljYW50IGlzc3VlcyBvZiBwb3J0YWJpbGl0 eSwgc2l6ZSwgcGVyZm9ybWFuY2UsCi0gICAgICAgZXRjLikKLSAgICAgKiAvU09SVDpEQVRFIHdv cmtzIHJpZ2h0IG9ubHkgZm9yIElTTy1mb3JtYXQgZGF0ZXMsIG5vdCBFbmdsaXNoIG9uZXMuCi0g ICAgICogL1NPUlQ6U0laRSBzb3J0cyB0aGUgc2l6ZSBmaWVsZCBsZXhpY2FsbHkuIE9uIHNvbWUg cGxhdGZvcm1zIChlLmcuCi0gICAgICAgV2luZG93cyksIHRoZSBzaXplIG9mIGEgZGlyZWN0b3J5 IGZpbGUgaXMgbGlzdGVkIGFzICI8RElSPiIgcmF0aGVyCi0gICAgICAgdGhhbiBhcyBhIG51bWJl cjsgaW4gdGhpcyBjYXNlLCB0aGUgIjxESVI+IiBmaWxlcyBhcmUgZ2F0aGVyZWQgYXQKLSAgICAg ICB0aGUgZW5kIChvciBiZWdpbm5pbmcsIGRlcGVuZGluZyBvbiB0aGUgc29ydCBvcmRlcikgb2Yg dGhlIGxpc3RpbmcuCi0gICAgICogL1JFQ1VSU0lWRSBpcyBhY2NlcHRlZCBidXQgaWdub3JlZCBp biBBT1MvVlMuIFVzZSB0aGUgbm9ybWFsCi0gICAgICAgc3lzdGVtLXNwZWNpZmljIGZpbGVzcGVj IG5vdGF0aW9uLCBlLmcuICJkaXIgIy50eHQiLgotICAgICAqIC9SRUNVUlNJVkUgaGFzIG5vIGFm ZmVjdCB3aGVuIGEgZnVsbCwgYWJzb2x1dGUgcGF0aG5hbWUgaXMgZ2l2ZW47Ci0gICAgICAgZS5n LiAiZGlyIC9yZWN1cnNpdmUgL3RtcC9mb28iICh3aGVyZSAiZm9vIiBpcyBhIHJlZ3VsYXIgZmls ZSkgb25seQotICAgICAgIHNob3dzIHRoZSAiL3RtcC9mb28iIGZpbGUuIElmIHlvdSB3YW50IHRv IHNlZSBhbGwgImZvbyIgZmlsZXMgaW4KLSAgICAgICB0aGUgL3RtcCB0cmVlLCBkbyAiY2QgL3Rt cCIgYW5kIHRoZW4gImRpciAvcmVjdXJzaXZlIGZvbyIuCi0gICAgICogSWYgYSBmaWxlIHNpemUg b2YgLTEgaXMgc2hvd24sIG9yIGRhdGUtdGltZSBvZiAwMDAwLTAwLTAwIDAwOjAwOjAwLAotICAg ICAgIHRoaXMgbWVhbnMgdGhlIGZpbGUgd2FzIGxvY2F0ZWQsIGJ1dCBhY2Nlc3MgdG8gaW5mb3Jt YXRpb24gYWJvdXQKLSAgICAgICB0aGUgZmlsZSB3YXMgZGVuaWVkIHRvIEMtS2VybWl0LgotICAg ICAqIEluIFZNUywgaWYgRk9PLkRJUjsxIGlzIGEgZGlyZWN0b3J5IHdpdGhpbiB5b3VyIGN1cnJl bnQgZGlyZWN0b3J5LAotICAgICAgICJkaXJlY3RvcnkgZm9vIiBhbmQgImRpcmVjdG9yeSBbLmZv b10iIGxpc3QgdGhlIGZpbGVzIGluIHRoZSBbLkZPT10KLSAgICAgICBzdWJkaXJlY3RvcnksIGJ1 dCAiZGlyZWN0b3J5IGZvby5kaXIiIGxpc3RzIHRoZSBkaXJlY3RvcnkgZmlsZQotICAgICAgIGl0 c2VsZjsgc2ltaWxhcmx5IGZvciAiKi5kaXIiIHZlcnN1cyAiWy4qXSIsIGV0Yy4KLSAgICAgKiBJ biBVTklYLCBpZiAiZm9vIiBpcyBhIGRpcmVjdG9yeSB3aXRoaW4geW91ciBjdXJyZW50IGRpcmVj dG9yeSwKLSAgICAgICAiZGlyZWN0b3J5IGZvbyIgbGlzdHMgdGhlIGZpbGVzIGluIHRoZSBmb28g ZGlyZWN0b3J5LiBJZiB5b3Ugd2FudAotICAgICAgIHRvIGxpc3QgdGhlIGZvbyBkaXJlY3Rvcnkg ZmlsZSBpdHNlbGYsIHB1dCBhbiBhc3RlcmlzayBhdCB0aGUgZW5kOgotICAgICAgICJkaXIgZm9v KiIuCi0KLSAgIEhpbnQ6IEhvdyB0byBmaW5kIHRoZSBiaWdnZXN0IGZpbGVzIGluIGEgZGlyZWN0 b3J5IHRyZWU6Ci0KLSAgY2QgeHh4IDsgKHJvb3Qgb2YgdHJlZSkKLSAgZGlyZWN0b3J5IC9zb3J0 OnNpemUgL3JlY3Vyc2l2ZSAvcmV2ZXJzZSAvZG90ZmlsZXMgL3BhZ2UKLQotICAgQW5vdGhlciBo aW50OiBJZiB5b3Ugb2Z0ZW4gdXNlIHNldmVyYWwgZGlmZmVyZW50IGRpcmVjdG9yeS1saXN0aW5n Ci0gICBmb3JtYXRzLCBkZWZpbmUgbWFjcm8gc2hvcnRjdXRzIGZvciB0aGVtOgotCi0gIERFRklO RSBXRCBESVJFQ1RPUlkgL1NPUlQ6REFURSAvUkVWRVJTRSBcJSogIDsgUmV2ZXJzZSBjaHJvbm9s b2dpY2FsIG9yZGVyCi0gIERFRklORSBTRCBESVJFQ1RPUlkgL1NPUlQ6U0laRSAvUkVWRVJTRSBc JSogIDsgUmV2ZXJzZSBvcmRlciBvZiBzaXplCi0gIERFRklORSBORCBESVJFQ1RPUlkgL1NPUlQ6 TkFNRSAvQVNDRU5EIFwlKiAgIDsgQWxwaGFiZXRpY2FsIGJ5IG5hbWUKLSAgREVGSU5FIERMIERJ UiAvRElSIC9TT1JUOk5BTUUgL0FTQ0VORCBcJSogICAgOyBBbHBoYWJldGljYWwgZGlyZWN0b3J5 IGxpc3QKLQotICAgUHV0IHRoZXNlIGRlZmluaXRpb25zIGluIHlvdXIgQy1LZXJtaXQgY3VzdG9t aXphdGlvbiBmaWxlLiBOb3RlIHRoYXQKLSAgICJcJSoiIChbNDc1XVNlY3Rpb24gNy41KSBpbiB0 aGVzZSBkZWZpbml0aW9ucyBsZXRzIHlvdSBpbmNsdWRlIG90aGVyCi0gICBzd2l0Y2hlcyBpbiB5 b3VyIG1hY3JvIGludm9jYXRpb25zLCBlLmcuOgotCi0gIHdkIC9oZWFkaW5ncyAqLnR4dAotCi0g ICBPZiBjb3Vyc2UgeW91IGNhbiBzdGlsbCBhY2Nlc3MgeW91ciBleHRlcm5hbCBkaXJlY3Rvcnkg bGlzdGluZyBwcm9ncmFtCi0gICBieSB1c2luZyBSVU4gb3IgIiEiLCBlLmcuIGluIFZNUzoKLQot ICBydW4gZGlyZWN0b3J5IC9zaXplL2RhdGUvcHJvdGVjdGlvbi9leGNlcHQ9Ki5vYmogb29mYS4q OzAKLQotICAgb3I6Ci0KLSAgIWRpciAvc2l6ZS9kYXRlL3Byb3QvZXhjPSoub2JqIG9vZmEuKjsw Ci0KLSAgIEluIFVOSVgsIHVzZSAiIWxzIiBvciBqdXN0ICJscyIgKHdoaWNoIGlzIGEgc3BlY2lh bCBzeW5vbnltIGZvciAiIWxzIikuCi0KLTQuNS4yLiBUaGUgQ0QgYW5kIEJBQ0sgQ29tbWFuZHMK LQotICAgSW4gQy1LZXJtaXQgNy4wLCB0aGUgQ0QgY29tbWFuZCBoYXMgYSBuZXcgZnJpZW5kLCB0 aGUgQkFDSyBjb21tYW5kLgotICAgQkFDSyBtZWFucyAiQ0QgdG8gbXkgcHJldmlvdXMgY3VycmVu dCBkaXJlY3RvcnkiLiBBIHNlY29uZCBCQUNLIGJyaW5ncwotICAgeW91IGJhY2sgdG8gd2hlcmUg eW91IHdlcmUgYmVmb3JlIHRoZSBmaXJzdCBvbmU7IHRodXMgc3VjY2Vzc2l2ZSBCQUNLCi0gICBj b21tYW5kcyBzd2l0Y2ggYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0d28gZGlyZWN0b3JpZXMuCi0K LTQuNS4yLjEuIFBhcnNpbmcgSW1wcm92ZW1lbnRzCi0KLSAgIFRoZSBDRCBjb21tYW5kLCBhcyB3 ZWxsIGFzIG90aGVyIGNvbW1hbmRzIHRoYXQgcGFyc2UgYSBkaXJlY3RvcnkgbmFtZSwKLSAgIHdl cmUgY2hhbmdlZCBpbiA3LjAgdG8gcHJvdmlkZSBhbGwgdGhlIGV4cGVjdGVkIGZ1bmN0aW9uczog Y29tcGxldGlvbgotICAgb24gVGFiIG9yIEVzYywgZGlyZWN0b3J5LW5hbWUgbGlzdHMgb24gPywg ZXRjLiBPdGhlciBhZmZlY3RlZCBjb21tYW5kcwotICAgaW5jbHVkZSBTRVQgU0VSVkVSIEdFVC1Q QVRILCBTRVQgVEVNUC1ESVJFQ1RPUlksIFNFVCBGSUxFCi0gICBET1dOTE9BRC1ESVJFQ1RPUlks IGFuZCBTUEFDRS4gQ0QgYW5kIFJFTU9URSBDRCBhbHNvIG5vdyB3b3JrIHdpdGgKLSAgIGxvZ2lj YWwgbmFtZXMuCi0KLSAgIEluIFZNUywgdGhlIHNpdHVhdGlvbiBpcyBhIGJpdCBjb21wbGljYXRl ZCBzaW5jZSBhIGRpcmVjdG9yeSBuYW1lIGNhbgotICAgbG9vayBsaWtlICJERVY6IiwgIltGT08u QkFSXSIsICJERVY6W0ZPTy5CQVJdIiwgIltGT09dQkFSLkRJUjsxIiwgZXRjLgotICAgQ29tcGxl dGlvbiBhbmQgPy1oZWxwIG1pZ2h0IG5vdCBhbHdheXMgd29yaywgYnV0IHRoZXkgZG8gaW4gbWFu eSBjYXNlcy4KLSAgIEV4YW1wbGVzOgotCi0gIGNkID8gICAgICAgICAgIExpc3RzIGFsbCBzdWJk aXJlY3RvcmllcyBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkKLSAgY2QgW10/ICAgICAgICAgRGl0 dG8KLSAgY2Qgaz8gICAgICAgICAgRGl0dG8sIGJ1dCBvbmx5IHRob3NlIHN0YXJ0aW5nIHdpdGgg SwotICBjZCBbZm9vXT8gICAgICBMaXN0cyBhbGwgc3ViZGlyZWN0b3JpZXMgb2YgdGhlIFtGT09d IGRpcmVjdG9yeQotICBjZCBbLV0/ICAgICAgICBMaXN0cyBhbGwgc3ViZGlyZWN0b3JpZXMgb2Yg dGhlIHN1cGVyaW9yIGRpcmVjdG9yeQotICBjZCBbLS1dPyAgICAgICBMaXN0cyBhbGwgc3ViZGly ZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSAyIGxldmVscyB1cAotICBjZCBbLi4uXT8gICAgICBM aXN0cyBhbGwgZGlyZWN0b3JpZXMgYmVsb3cgdGhlIGN1cnJlbnQgb25lCi0gIGNkIFtmb28uPyAg ICAgIERvZXMgbm90IHdvcmsuCi0KLSAgIEMtS2VybWl0IGFsbG93cyBhbGwgb2YgdGhlIGZvbGxv d2luZyBpbiBWTVM6Ci0KLSAgY2QgYmFyICAgICAgICAgQ0QgdG8gc3ViZGlyZWN0b3J5IEJBUiBv ZiB0aGUgY3VycmVudCBkaXJlY3RvcnkKLSAgY2QgLmJhciAgICAgICAgRGl0dG8KLSAgY2QgWy5i YXJdICAgICAgRGl0dG8KLSAgY2QgYmFyLmRpciAgICAgZXRjLi4uCi0gIGNkIGJhci5kaXI7Ci0g IGNkIGJhci5kaXI7MQotICBjZCBbZm9vLmJhcl0KLSAgY2QgPGZvby5iYXI+Ci0gIGNkIGJhci5i YXogICAgIFRoaXMgY2FuIGdvIG1vcmUgdGhhbiAxIGxldmVsIGRlZXAuLi4KLSAgY2QgZGlyOiAg ICAgICAgKHdoZXJlIGxvZ2ljYWwgbmFtZSBESVIgaXMgZGVmaW5lZCBhcyBbRk9PLkJBUl0pCi0K LSAgIEFzIHdlbGwgYXMgdGhlIGZvbGxvd2luZzoKLQotICBjZCAuLiAgICAgICAgICBHbyB1cCBv bmUgbGV2ZWwgYXMgaW4gVU5JWAotICBjZCAuICAgICAgICAgICBUaGUgY3VycmVudCBkaXJlY3Rv cnkKLSAgY2QgICAgICAgICAgICAgTXkgbG9naW4gZGlyZWN0b3J5Ci0KLSAgIE5vdGUgdGhhdCAi Y2QgLSIgKGdvIHVwIG9uZSBsZXZlbCkgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCwgYmVjYXVz ZQotICAgIi0iIGlzIEtlcm1pdCdzIGNvbW1hbmQgY29udGludWF0aW9uIGNoYXJhY3Rlci4gSG93 ZXZlciwgImNkIFstXSIsIGFuZAotICAgIgotICAgY2Qgey19IiBoYXZlIHRoZSBkZXNpcmVkIGVm ZmVjdCAoYW5kIHNvIGRvZXMgImNkIC4uIiwgd2hpY2ggaXMgZWFzaWVyCi0gICB0byB0eXBlKS4K LQotNC41LjIuMi4gVGhlIENEUEFUSAotCi0gICBUaGUgQ0QgY29tbWFuZCBpbiB0aGUgVU5JWCwg V2luZG93cywgT1MvMiwgYW5kIFZNUyB2ZXJzaW9ucyBvZgotICAgQy1LZXJtaXQsIGFzIG9mIHZl cnNpb24gNi4xIC8gMS4xLjEyLCBzZWFyY2hlcyB0aGUgQ0RQQVRIIGZvciB0aGUgZ2l2ZW4KLSAg IGRpcmVjdG9yeSwgaWYgaXQgaXMgbm90IGFic29sdXRlIGFuZCBpZiBhIENEUEFUSCBlbnZpcm9u bWVudCB2YXJpYWJsZQotICAgaXMgZGVmaW5lZC4gRXhhbXBsZSAoaW4gVU5JWCBrc2ggb3IgYmFz aCk6Ci0KLSAgJCBleHBvcnQgQ0RQQVRIPSRIT01FOiRIT01FL2tlcm1pdDovdG1wCi0KLSAgIE5v dyBpZiB5b3UgZ2l2ZSBhICJjZCB4eHgiIGNvbW1hbmQsIG5vIG1hdHRlciB3aGF0IHlvdXIgY3Vy cmVudAotICAgZGlyZWN0b3J5IGlzLCBpZiB0aGUgInh4eCIgZGlyZWN0b3J5IGlzIG5vdCBhIHN1 YmRpcmVjdG9yeSBvZiB5b3VyCi0gICBjdXJyZW50IGRpcmVjdG9yeSwgdGhlbiB0aGUgeHh4IHN1 YmRpcmVjdG9yeSBvZiB5b3VyIGhvbWUgZGlyZWN0b3J5IGlzCi0gICB1c2VkIG9yIGlmIHRoYXQg ZG9lcyBub3QgZXhpc3QsIHRoZW4gdGhlIHh4eCBzdWJkaXJlY3Rvcnkgb2YgdGhlIGtlcm1pdAot ICAgc3ViZGlyZWN0b3J5IG9mIHlvdXIgaG9tZSBkaXJlY3RvcnkgaXMgdXNlZCBvciBpZiB0aGF0 IGRvZXMgbm90IGV4aXN0LAotICAgdGhlbiAvdG1wL3h4eCBpcyB1c2VkLiBUaGlzIGlzIGhvdyB0 aGUga3NoICJjZCIgY29tbWFuZCB3b3JrcywgYW5kIG5vdwotICAgdGhlIEMtS2VybWl0IENEIGNv bW1hbmQgd29ya3MgdGhlIHNhbWUgd2F5LgotCi0gICBJbiBWTVMsIHlvdSBjYW4gZGVmaW5lIENE UEFUSCB0byBiZSBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluCi0gICBhY3R1YWwg ZGlyZWN0b3J5IGRlbGltaXRlcnMsIGFuZC9vciBsb2dpY2FsIG5hbWVzIHJlcHJlc2VudGluZwot ICAgZGlyZWN0b3JpZXMsIHVzaW5nIGNvbW1hcyB0byBzZXBhcmF0ZSB0aGVtLCBlLmcuOgotCi0g ICQgZGVmaW5lIGNkcGF0aCBbSE9NRV0sW1NPTUVPVEhFUkRJUl0sW0hPTUUuTUlTQ10KLSAgJCBk ZWZpbmUgY2RwYXRoIFNZUyRMT0dJTjosRElTSzE6W0hPTUVdLERJU0syOltTQ1JBVENILklWQU5d Ci0KLSAgIEV4YW1wbGU6Ci0KLSAgJCBkZWZpbmUgY2RwYXRoIFNZUyRMT0dJTjosW0lWQU5dLFtP TEFGXSxbT0xHQS5NSVNDXQotICAkIGtlcm1pdAotICBESVNLMTpbT0xHQV0gQy1LZXJtaXQ+IGNk IGJsYWgKLQotICAgdHJpZXMgdGhlIEJMQUggc3ViZGlyZWN0b3J5IG9mIHRoZSB1c2VyJ3MgbG9n aW4gZGlyZWN0b3J5LCB0aGVuCi0gICBbT0xHQS5CTEFIXSwgW0lWQU4uQkxBSF0sIFtPTEFGLkJM QUhdLCBhbmQgW09MR0EuTUlTQy5CTEFIXSwgaW4gdGhhdAotICAgb3JkZXIsIHVzaW5nIHRoZSBm aXJzdCBvbmUgaXQgZmluZHMsIGZhaWxpbmcgaWYgaXQgZmluZHMgbm9uZS4KLQotICAgSW4gQy1L ZXJtaXQgNy4wLCB5b3UgbWF5IGFsc28gc2V0IHRoZSBDRFBBVEggZnJvbSB0aGUgS2VybWl0IHBy b21wdDoKLQotICAgU0VUIENEIFBBVEggcGF0aAotICAgICAgICAgIEFsbG93cyB0aGUgQ0QgUEFU SCB0byBiZSBzZXQgZnJvbSB3aXRoaW4gQy1LZXJtaXQuCi0KLSAgIFNIT1cgQ0Qgc2hvd3MgdGhl IENEIHBhdGggYW5kIGFsbCBvdGhlciBpbmZvcm1hdGlvbiByZWxldmFudCB0byB0aGUgQ0QKLSAg IGNvbW1hbmQuCi0KLTQuNS4yLjMuIENEIE1lc3NhZ2VzCi0KLSAgIFdoZW5ldmVyIHlvdSBjaGFu Z2UgZGlyZWN0b3J5LCB5b3UgY2FuIGhhdmUgQy1LZXJtaXQgZGlzcGxheSBhICJSZWFkCi0gICBN ZSIgZmlsZSBmcm9tIHRoZSBuZXcgZGlyZWN0b3J5IGF1dG9tYXRpY2FsbHkuIFRoZSBjb21tYW5k cyBhcmU6Ci0KLSAgIFNFVCBDRCBNRVNTQUdFIHsgT04sIE9GRiwgRklMRSBsaXN0IH0KLSAgICAg ICAgICBPTiBlbmFibGVzIHRoaXMgZmVhdHVyZTsgT0ZGICh0aGUgZGVmYXVsdCkgZGlzYWJsZXMg aXQuIEZpbGUKLSAgICAgICAgICBsZXRzIHlvdSBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSAiUmVh ZCBNZSIgZmlsZS4gQSBsaXN0IG9mIG5hbWVzCi0gICAgICAgICAgdG8gbG9vayBmb3IgY2FuIGJl IGdpdmVuIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgotCi0gIHt7bmFtZTF9e25hbWUyfXtuYW1l M317Li4ufX0KLQotICAgICAgICAgIGUuZy46Ci0KLSAgU0VUIFNFUlZFUiBDRC1NRVNTQUdFIEZJ TEUge3suLy5yZWFkbWV9e1JFQURNRS5UWFR9e1JFQUQuTUV9fQotCi0gICAgICAgICAgVGhlIGRl ZmF1bHQgbGlzdCBvZiBDRC1tZXNzYWdlIGZpbGVzIGlzIHN5c3RlbSBkZXBlbmRlbnQuCi0KLSAg IFNIT1cgQ0Qgc2hvd3MgeW91ciBjdXJyZW50IGRpcmVjdG9yeSwgcHJldmlvdXMgZGlyZWN0b3J5 LCBDRCBwYXRoLCBhbmQKLSAgIENEIG1lc3NhZ2UgaW5mby4KLQotNC41LjMuIENyZWF0aW5nIGFu ZCBSZW1vdmluZyBEaXJlY3RvcmllcwotCi0gICBUaGUgTUtESVIgY29tbWFuZCBub3cgYWxsb3dz IHlvdSB0byBjcmVhdGUgbXVsdGlwbGUgZGlyZWN0b3JpZXMgYXQKLSAgIG9uY2U6Ci0KLSAgQy1L ZXJtaXQ+IG1rZGlyIGEvYi9jL2QKLQotICAgY3JlYXRlcyB0aGUgZGlyZWN0b3J5IGEgaW4gdGhl IGN1cnJlbnQgZGlyZWN0b3J5IChpZiBpdCBkb2Vzbid0IGV4aXN0Ci0gICBhbHJlYWR5KSwgYW5k IHRoZW4gY3JlYXRlcyBzdWJkaXJlY3RvcnkgYiBpbiB0aGUgYSBkaXJlY3RvcnkgKGlmIGl0Ci0g ICBkaWRuJ3QgZXhpc3QgYWxyZWFkeSksIGFuZCBzbyBvbi4KLQotICAgSWYgeW91IHVzZSBNS0RJ UiB0byB0cnkgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRoYXQgYWxyZWFkeSBleGlzdHMsCi0gICBD LUtlcm1pdCB3aWxsIHByaW50IGEgd2FybmluZyAoIj9EaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMi KSwgYnV0IHRoZQotICAgTUtESVIgY29tbWFuZCB3aWxsIHN0aWxsIHN1Y2NlZWQuIElmIHlvdSB3 YW50IHRvIGF2b2lkIHRoZSB3YXJuaW5nCi0gICBtZXNzYWdlLCB1c2UgSUYgRElSRUNUT1JZIGZp cnN0IHRvIGNoZWNrIGlmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeQotICAgZXhpc3RzLgotCi0gICBU aGUgUk1ESVIgY29tbWFuZCwgaG93ZXZlciwgd2lsbCBub3QgcmVtb3ZlIG1vcmUgdGhhbiBvbmUg ZGlyZWN0b3J5LAotICAgbm9yIHdpbGwgaXQgcmVtb3ZlIGEgZGlyZWN0b3J5IHRoYXQgY29udGFp bnMgYW55IGZpbGVzLiAoVGhlcmUgaXMsIGFzCi0gICB5ZXQsIG5vIFJNRElSIC9SRUNVUlNJVkUg Y29tbWFuZCwgYWx0aG91Z2ggb25lIG1pZ2h0IGJlIGFkZGVkIGxhdGVyLikKLQotICAgSW4gVk1T LCB0aGVzZSBjb21tYW5kcyAobGlrZSBDRCkgYXJlIG1vcmUgZm9yZ2l2aW5nIG9mIHlvdXIgc3lu dGF4IHRoYW4KLSAgIGlzIHRoZSBEQ0wgY29tbWFuZCBzaGVsbDsgIm1rZGlyIG9vZmEiIGlzIGVx dWl2YWxlbnQgdG8gIm1rZGlyIFsub29mYV0iCi0gICBhbmQgc28gb24uIEFsc28gaW4gVk1TLCB5 b3UnbGwgZmluZCB0aGF0IEMtS2VybWl0J3MgUk1ESVIgY29tbWFuZCBpcwotICAgZWFzaWVyIHRo YW4gZGVsZXRpbmcgYSBkaXJlY3RvcnkgaW4gRENMLCBzaW5jZSBpdCBhdXRvbWF0aWNhbGx5IGZp cnN0Ci0gICBnaXZlcyBpdCBvd25lciBkZWxldGUgcGVybWlzc2lvbiBpZiB5b3UgYXJlIHRoZSBv d25lci4KLQotNC41LjQuIFRoZSBERUxFVEUgYW5kIFBVUkdFIENvbW1hbmRzCi0KLSAgIFRoZSBE RUxFVEUgY29tbWFuZCBub3cgb2ZmZXJzIGEgc2VsZWN0aW9uIG9mIHN3aXRjaGVzLCBhbmQgaGFz IGEgbmV3Ci0gICBjb21wYW5pb24sIHRoZSBQVVJHRSBjb21tYW5kLiBGaXJzdCwgREVMRVRFOgot Ci0gICBERUxFVEUgWyBzd2l0Y2hlcy4uLiBdIGZpbGVzcGVjCi0gICAgICAgICAgRGVsZXRlcyB0 aGUgZmlsZSBvciBmaWxlcyB0aGF0IG1hdGNoIHRoZSBmaWxlc3BlYywgd2hpY2ggbWF5Ci0gICAg ICAgICAgY29udGFpbiB3aWxkY2FyZHMgKFs0NzZdU2VjdGlvbiA0LjkpLgotCi0gICBPcHRpb25h bCBzd2l0Y2hlcyBpbmNsdWRlIHRoZSBzdGFuZGFyZCBmaWxlLXNlbGVjdGlvbiBzd2l0Y2hlcwot ICAgcHJlc2VudGVkIGluIFs0NzddU2VjdGlvbiAxLjUuNCwgcGx1czoKLQotICAgL0FTSwotICAg ICAgICAgIEJlZm9yZSBkZWxldGluZyBlYWNoIGZpbGUsIGFzayBwZXJtaXNzaW9uIGludGVyYWN0 aXZlbHkuIEFuc3dlcnMKLSAgICAgICAgICBhcmUgWWVzIG9yIE9LIChkZWxldGUgdGhlIGZpbGUp LCBObyAoZG9uJ3QgZGVsZXRlIGl0KSwgb3IgUXVpdAotICAgICAgICAgIChzdG9wIGV4ZWN1dGlu ZyB0aGUgREVMRVRFIGNvbW1hbmQpLgotCi0gICAvTk9BU0sKLSAgICAgICAgICBEb24ndCBhc2sg cGVybWlzc2lvbiB0byBkZWxldGUgZWFjaCBmaWxlLgotCi0gICAvTElTVAotICAgICAgICAgIExp c3QgZWFjaCBmaWxlIGFuZCBzaG93IHdoZXRoZXIgaXQgd2FzIGRlbGV0ZWQuIFN5bm9ueW1zOiAv TE9HLAotICAgICAgICAgIC9WRVJCT1NFLgotCi0gICAvTk9MSVNUCi0gICAgICAgICAgRG9uJ3Qg bGlzdCBmaWxlcyB3aGlsZSBkZWxldGluZyB0aGVtLiBTeW5vbnltczogL05PTE9HLCAvUVVJRVQu Ci0KLSAgIC9IRUFESU5HCi0gICAgICAgICAgUHJpbnQgYSBoZWFkaW5nIGFuZCBzdW1tYXJ5IGxp bmUuCi0KLSAgIC9OT0hFQURJTkcKLSAgICAgICAgICBEb24ndCBwcmludCBhIGhlYWRpbmcgYW5k IHN1bW1hcnkgbGluZS4KLQotICAgL1BBR0UKLSAgICAgICAgICBXaGVuIGxpc3RpbmcsIHBhdXNl IGF0IHRoZSBlbmQgb2YgZWFjaCBzY3JlZW5mdWwgYW5kIGdpdmUgdGhlCi0gICAgICAgICAgIk1v cmU/IiBwcm9tcHQuIElmIHlvdSByZXBseSAibiIgKG5vKSwgdGhlIERFTEVURSBjb21tYW5kCi0g ICAgICAgICAgdGVybWluYXRlcy4KLQotICAgL1NJTVVMQVRFCi0gICAgICAgICAgRG8gZXZlcnl0 aGluZyBpbXBsaWVkIGJ5IHRoZSBnaXZlbiBzd2l0Y2hlcyBhbmQgZmlsZXNwZWMsIGV4Y2VwdAot ICAgICAgICAgIGRvIG5vdCBhY3R1YWxseSBkZWxldGUgYW55IGZpbGVzLiBUaGlzIGxldHMgeW91 IHByZXZpZXcgd2hpY2gKLSAgICAgICAgICBmaWxlcyB3b3VsZCBiZSBkZWxldGVkOyBpbXBsaWVz IC9MSVNULgotCi0gICBOb3cgdGhlIFBVUkdFIGNvbW1hbmQ6Ci0KLSAgIFBVUkdFIFsgc3dpdGNo ZXMuLi4gXSBbIGZpbGVzcGVjIF0KLSAgICAgICAgICAoVk1TIG9ubHkpIFJ1bnMgdGhlIERDTCBQ VVJHRSBjb21tYW5kLiBTd2l0Y2hlcyBhbmQgZmlsZXNwZWMsIGlmCi0gICAgICAgICAgYW55LCBh cmUgcGFzc2VkIGRpcmVjdGx5IHRvIERDTCB3aXRob3V0IHBhcnNpbmcgb3IgdmVyaWZpY2F0aW9u LgotICAgICAgICAgIERlbGV0ZXMgZXhjZXNzIHZlcnNpb25zIG9mIHRoZSBnaXZlbiAob3IgYWxs KSBmaWxlcy4gVGhlIHJlc3Qgb2YKLSAgICAgICAgICB0aGlzIHNlY3Rpb24gZG9lcyBub3QgYXBw bHkgdG8gVk1TLgotCi0gICBQVVJHRSBbIHN3aXRjaGVzLi4uIF0gWyBmaWxlc3BlYyBdCi0gICAg ICAgICAgKFVOSVggb25seSkgRGVsZXRlcyAiYmFja3VwIGZpbGVzIiB0aGF0IG1hdGNoIHRoZSBm aWxlc3BlYywKLSAgICAgICAgICB3aGljaCBtYXkgY29udGFpbiB3aWxkY2FyZHMgKFs0NzhdU2Vj dGlvbiA0LjkpLiBJZiBubyBmaWxlc3BlYwotICAgICAgICAgIGlzIGdpdmVuLCBhbGwgYmFja3Vw IGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhcmUgc2VsZWN0ZWQKLSAgICAgICAgICAo c3ViamVjdCB0byBtb2RpZmljYXRpb24gYnkgYW55IHN3aXRjaGVzKS4gRG8gbm90IGluY2x1ZGUg YmFja3VwCi0gICAgICAgICAgbm90YXRpb24gaW4gdGhlIGZpbGVzcGVjLgotCi0gICBFeHBsYW5h dGlvbjoKLQotICAgVG8gYXZvaWQgZGVzdHJveWluZyBwcmVleGlzdGluZyBmaWxlcyB3aGVuIGEg bmV3IGZpbGUgYXJyaXZlcyB0aGF0IGhhcwotICAgdGhlIHNhbWUgbmFtZSwgQy1LZXJtaXQgYmFj a3MgdXAgdGhlIG9sZCBmaWxlIGJ5IGFwcGVuZGluZyBhICJiYWNrdXAKLSAgIG51bWJlciIgdG8g aXRzIG5hbWUuIEluIFVOSVgsIHRoZSBiYWNrdXAgc3VmZml4IGNvbnNpc3RzIG9mIGEgcGVyaW9k LCBhCi0gICB0aWxkZSwgYSBudW1iZXIsIGFuZCBhbm90aGVyIHRpbGRlLiBGb3IgZXhhbXBsZSwg aWYgYSBmaWxlIGNhbGxlZAotICAgb29mYS50eHQgZXhpc3RzIGFuZCBhIG5ldyBvb2ZhLnR4dCBm aWxlIGFycml2ZXMsIHRoZSBvcmlnaW5hbCBpcwotICAgcmVuYW1lZCB0byBvb2ZhLnR4dC5+MX4u IElmIGFub3RoZXIgb29mYS50eHQgZmlsZSBhcnJpdmVzLCB0aGUgZXhpc3RpbmcKLSAgIG9uZSBp cyByZW5hbWVkIHRvIG9vZmEudHh0Ln4yfi4gQW5kIHNvIG9uLiBUaGlzIHN5c3RlbSBpcyBjb21w YXRpYmxlCi0gICB3aXRoIHRoZSBvbmUgdXNlZCBieSBFTUFDUy4gVGh1cyBvdmVyIHRpbWUsIGlm IHlvdSByZWNlaXZlIGEgbG90IG9mCi0gICBmaWxlcyB3aXRoIEMtS2VybWl0IG9yIGVkaXQgdGhl bSB3aXRoIEVNQUNTLCBiYWNrdXAgZmlsZXMgY2FuIGJ1aWxkIHVwLgotICAgVGhlIG5ldyBQVVJH RSBjb21tYW5kIGxldHMgeW91IGNsZWFuIG91dCBhY2N1bXVsYXRlZCBiYWNrdXAgZmlsZXM6Ci0K LSAgIE9wdGlvbmFsIHN3aXRjaGVzIGluY2x1ZGUgdGhlIHN0YW5kYXJkIGZpbGUtc2VsZWN0aW9u IHN3aXRjaGVzCi0gICBwcmVzZW50ZWQgaW4gWzQ3OV1TZWN0aW9uIDEuNS40LCBwbHVzIGFsbCB0 aGUgc3dpdGNoZXMgbGlzdGVkIGFib3ZlIGZvcgotICAgdGhlIERFTEVURSBjb21tYW5kLCBwbHVz OgotCi0gICAvS0VFUDpuCi0gICAgICAgICAgUmV0YWlucyB0aGUgbiBtb3N0IHJlY2VudCAoaGln aGVzdC1udW1iZXJlZCkgYmFja3VwIGZpbGVzIGZvcgotICAgICAgICAgIGVhY2ggZmlsZS4gRm9y IGV4YW1wbGUsIGlmIG9vZmEudHh0LCBvb2ZhLnR4dC5+MX4sIG9vZmEudHh0Ln4yfiwKLSAgICAg ICAgICBvb2ZhLnR4dC5+MTB+LCBvb2ZhLnR4dC5+MTJ+LCBhbmQgb29mYS50eHQufjEwMH4gZXhp c3QsICJwdXJnZQotICAgICAgICAgIC9rZWVwOjIgb29mYS50eHQiIGRlbGV0ZXMgb29mYS50eHQu fjF+LCBvb2ZhLnR4dC5+Mn4sIGFuZAotICAgICAgICAgIG9vZmEudHh0Ln4xMH4sIGFuZCBrZWVw cyBvb2ZhLnR4dCwgb29mYS50eHQufjEyfiwgYW5kCi0gICAgICAgICAgb29mYS50eHQufjEwMH4u IElmIC9LRUVQIGlzIGdpdmVuIHdpdGhvdXQgYSBudW1iZXIsIG9uZSAodGhlCi0gICAgICAgICAg aGlnaGVzdCBudW1iZXJlZCkgYmFja3VwIGZpbGUgaXMga2VwdC4KLQotICAgQ0FVVElPTjogVGhl IFBVUkdFIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQgb25seSB3aGVuICoufip+IGZpbGVzIHRydWx5 Ci0gICBhcmUgYmFja3VwIGZpbGVzLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBFTUFDUywgYW5kIGl0 IGlzIHRoZSBERUZBVUxUIGZvcgotICAgQy1LZXJtaXQuIEhvd2V2ZXIsIGlmIEMtS2VybWl0J3Mg RklMRSBDT0xMSVNJT04gaGFzIGJlZW4gc2V0IHRvIFJFTkFNRSwKLSAgIG5ld2x5IHJlY2VpdmVk IGZpbGVzIHdpbGwgbG9vayBsaWtlIGJhY2t1cCBmaWxlcy4gSW4gdGhhdCBjYXNlLCBkb24ndAot ICAgdXNlIHRoZSBQVVJHRSBjb21tYW5kIG9yIHlvdSdsbCBiZSByZW1vdmluZyBuZXcgZmlsZXMg cmF0aGVyIHRoYW4gb2xkCi0gICBvbmVzLiAoVXNlIFNIT1cgRklMRSB0byBmaW5kIHRoZSBGSUxF IENPTExJU0lPTiBzZXR0aW5nLikKLQotICAgVGhlIFBVUkdFIGNvbW1hbmQgaXMgcHJlc2VudGx5 IGF2YWlsYWJsZSBvbmx5IGluIFVOSVguIFRoZSBjb21tYW5kCi0gICBzdWNjZWVkcyBpZiBpdCBk ZWxldGVkIGFueSBmaWxlcywgb3IgaWYgaXQgZGVsZXRlZCBubyBmaWxlcyBidXQgdGhlcmUKLSAg IHdlcmUgbm8gZXJyb3JzLiBJdCBmYWlscyBpZiBpdCBkZWxldGVkIG5vIGZpbGVzIGFuZCB0aGVy ZSB3ZXJlIGVycm9ycwotICAgKGkuZS4gZGVsZXRpb24gd2FzIGF0dGVtcHRlZCBidXQgZmFpbGVk KS4gSW4gVk1TLCBiYWNrdXAgZmlsZSB2ZXJzaW9ucwotICAgYXJlIGhhbmRsZWQgYXV0b21hdGlj YWxseSBieSB0aGUgT1MsIGFuZCBhIFBVUkdFIGNvbW1hbmQgY2FuIGJlIHVzZWQgYXQKLSAgIHRo ZSBWTVMgcHJvbXB0IHRvIGNsZWFuIHRoZW0gdXAuCi0KLSAgIElmIHlvdSB3YW50IGNlcnRhaW4g c3dpdGNoZXMgdG8gYmUgc3VwcGxpZWQgYXV0b21hdGljYWxseSB3aXRoIGVhY2gKLSAgIERFTEVU RSBvciBQVVJHRSBjb21tYW5kLCB5b3UgY2FuIHNldCB0aGVtIHdpdGggU0VUIE9QVElPTlMKLSAg IChbNDgwXVNlY3Rpb24gMS41LjUpIGFuZCB5b3UgY2FuIGRpc3BsYXkgYW55IHN1Y2ggc2V0dGlu Z3Mgd2l0aCBTSE9XCi0gICBPUFRJT05TLiBPZiBjb3Vyc2UgeW91IGNhbiBvdmVycmlkZSB0aGVt IG9uIGEgcGVyLWNvbW1hbmQgYmFzaXMgYnkKLSAgIGluY2x1ZGluZyBzd2l0Y2hlcyBpbiB5b3Vy IFBVUkdFIG9yIERFTEVURSBjb21tYW5kLgotCi0gICBBbHNvIHNlZSBTRVQgRklMRSBDT0xMSVNJ T04sIFNIT1cgRklMRSwgU0VORCAvTk9CQUNLVVAsIFNFVCBTRU5ECi0gICBCQUNLVVAsIGFuZCBE SVJFQ1RPUlkgL1tOT11CQUNLVVAuCi0KLTQuNi4gU3RhcnRpbmcgdGhlIFJlbW90ZSBLZXJtaXQg U2VydmVyIEF1dG9tYXRpY2FsbHkKLQotICAgQXMgbm90ZWQgb24gcGFnZXMgMjc1LTI3NiBvZiBb NDgxXVVzaW5nIEMtS2VybWl0IDJuZCBlZGl0aW9uLCB5b3UgY2FuCi0gICBoYXZlIEtlcm1pdCBz ZW5kICJrZXJtaXQgcmVjZWl2ZSIgY29tbWFuZHMgYXV0b21hdGljYWxseSB3aGVuIGl0IGlzIGlu Ci0gICBsb2NhbCBtb2RlIGFuZCB5b3UgZ2l2ZSBhIFNFTkQgb3Igc2ltaWxhciBjb21tYW5kLCB0 byBzdGFydCB0aGUgcmVtb3RlCi0gICBLZXJtaXQgcmVjZWl2ZXIgaW4gY2FzZSBpdCBpcyBub3Qg YWxyZWFkeSBzdGFydGVkLiBUaGUgImtlcm1pdCByZWNlaXZlIgotICAgY29tbWFuZHMgYXJlIHNw ZWNpZmllZCBieToKLQotICBTRVQgUFJPVE9DT0wgS0VSTUlUIGJpbmFyeS1yZWNlaXZlLWNvbW1h bmQgdGV4dC1yZWNlaXZlLWNvbW1hbmQKLQotICAgQXMgb2YgdmVyc2lvbiA3LjAsIGEgS2VybWl0 IHByb3RvY29sIG9wdGlvbiBoYXMgYmVlbiBhZGRlZCB0byBzZW5kIGEKLSAgIHN0cmluZyB0byB0 aGUgaG9zdCBpbiBhZHZhbmNlIG9mIGFueSBLZXJtaXQgcGFja2V0cyB3aGVuIHlvdSBnaXZlIGEK LSAgIEdFVC1jbGFzcyBvciBSRU1PVEUgY29tbWFuZC4gVGhpcyB3aWxsIHN3aXRjaCB0aGUgcmVt b3RlIEMtS2VybWl0IGludG8KLSAgIHRoZSBhcHByb3ByaWF0ZSBtb2RlIG9yLCBpZiB0aGUgcmVt b3RlIHN5c3RlbSBpcyBhdCBhIHN5c3RlbSBjb21tYW5kCi0gICAoc2hlbGwpIHByb21wdCwgZXhl Y3V0ZSB0aGUgc3RyaW5nIG9uIHRoZSByZW1vdGUgc3lzdGVtLiBUaGUgbmV3IHN5bnRheAotICAg b2YgdGhlIFNFVCBQUk9UT0NPTCBLRVJNSVQgY29tbWFuZCBpczoKLQotICBTRVQgUFJPVE9DT0wg S0VSTUlUIFsgczEgWyBzMiBbIHMzIF0gXSBdCi0KLSAgIHdoZXJlOgotCi0gICAgICAgRGVmYXVs dCAgICAgICAgIE1lYW5pbmcKLSAgczEgIHtrZXJtaXQgLWlyfSAgICAgUmVtb3RlICJrZXJtaXQg cmVjZWl2ZSBpbiBiaW5hcnkgbW9kZSIgY29tbWFuZC4KLSAgczIgIHtrZXJtaXQgLXJ9ICAgICAg UmVtb3RlICJrZXJtaXQgcmVjZWl2ZSBpbiB0ZXh0IG1vZGUiIGNvbW1hbmQuCi0gIHMzICB7a2Vy bWl0IC14fSAgICAgIFJlbW90ZSAic3RhcnQga2VybWl0IHNlcnZlciIgY29tbWFuZC4KLQotICAg Tk9URTogSWYgdGhlIHJlbW90ZSBLZXJtaXQgaXMgNi4wLCB0aGUgZm9sbG93aW5nIGFyZSByZWNv bW1lbmRlZCBmb3IKLSAgIGZhc3Qgc3RhcnR1cCBhbmQgaGlnaC1wZXJmb3JtYW5jZSBmaWxlIHRy YW5zZmVyIChzZWUgQXBwZW5kaXggSSBpbgotICAgWzQ4Ml1Vc2luZyBDLUtlcm1pdCwgc2Vjb25k IEVkaXRpb24sIGZvciBjb21tYW5kLWxpbmUgb3B0aW9ucyk6Ci0KLSAgczEgICBrZXJtaXQgLVlR aXIgICAoS2VybWl0IHJlY2VpdmUgYmluYXJ5LCBza2lwIGluaXQgZmlsZSwgZmFzdC4pCi0gIHMy ICAga2VybWl0IC1ZUVRyICAgKEtlcm1pdCByZWNlaXZlIHRleHQsIHNraXAgaW5pdCBmaWxlLCBm YXN0LikKLSAgczMgICBrZXJtaXQgLVlReCAgICAoS2VybWl0IHNlcnZlciwgc2tpcCBpbml0IGZp bGUsIGZhc3QuKQotCi0gICBJZiB0aGUgcmVtb3RlIGlzIEMtS2VybWl0IDcuMCBvciBsYXRlciwg Y2hhbmdlIHRoZSAteCBvcHRpb24gKGVudGVyCi0gICBzZXJ2ZXIgbW9kZSkgdG8gLU8gKHVwcGVy Y2FzZSBsZXR0ZXIgTyksIHdoaWNoIG1lYW5zICJlbnRlciBzZXJ2ZXIgbW9kZQotICAgZm9yIE9u ZSB0cmFuc2FjdGlvbiBvbmx5KTsgdGhpcyB3YXksIGl0IGlzIG5vdCBzdHVjayBpbiBzZXJ2ZXIg YWZ0ZXIKLSAgIHRoZSB0cmFuc2Zlci4gQWxzbyBub3RlIHRoYXQgdGhlIFEgaXMgcmVkdW5kYW50 IGluIHZlcnNpb24gNy4wLCBzaW5jZQotICAgZmFzdCBLZXJtaXQgcHJvdG9jb2wgc2V0dGluZ3Mg YXJlIG5vdyB0aGUgZGVmYXVsdC4KLQotICAgTm90ZSB0aGF0IGluIGNhc2UgdGhlIEMtS2VybWl0 IGV4ZWN1dGFibGUgaXMgY2FsbGVkICJ3ZXJtaXQiIG9yCi0gICAiY2tlcm1pdCIgeW91IGNhbiBj aGFuZ2UgImtlcm1pdCIgaW4gdGhlIHN0cmluZ3MgYWJvdmUgdG8gIndlcm1pdCIgb3IKLSAgICJj a2VybWl0IiBhbmQgQy1LZXJtaXQgNy4wIG9yIGxhdGVyIHdpbGwgcmVjb2duaXplIHRoZXNlIGFz IHN5bm9ueW1zCi0gICBmb3IgImtlcm1pdCIsIGluIGNhc2UgaXQgaXMgYXQgaXRzIGNvbW1hbmQg cHJvbXB0IHdoZW4gb25lIG9mIHRoZXNlCi0gICBzdHJpbmdzIGlzIHNlbnQgdG8gaXQuCi0KLTQu Ny4gRmlsZS1UcmFuc2ZlciBDb21tYW5kIFN3aXRjaGVzCi0KLSAgIE92ZXIgdGhlIHllYXJzLCB2 YXJpb3VzIG5ldyBtZXRob2RzIG9mIHRyYW5zZmVycmluZyBhIGZpbGUgaGF2ZQotICAgYWNjdW11 bGF0ZWQsIHVudGlsIHdlIGhhZCwgaW4gYWRkaXRpb24gdG8gdGhlIFNFTkQgY29tbWFuZCwgYWxz byBNT1ZFCi0gICAoc2VuZCBhbmQgdGhlbiBkZWxldGUpLCBNQUlMIChzZW5kIGFzIGVtYWlsKSwg UkVNT1RFIFBSSU5UIChzZW5kIHRvIGJlCi0gICBwcmludGVkKSwgQ1NFTkQgKHNlbmQgdGhlIG91 dHB1dCBvZiBhIGNvbW1hbmQpLCBQU0VORCAoc2VuZCBhIHBhcnQgb2YgYQotICAgZmlsZSksIEJT RU5EIChzZW5kIGluIGJpbmFyeSBtb2RlKSwgUkVTRU5EIChyZXN1bWUgYW4gaW50ZXJydXB0ZWQK LSAgIFNFTkQpLCBldGMgZXRjLiBTaW1pbGFybHk6IEdFVCwgUkVHRVQsIENHRVQsIFJFVFJJRVZF LCBhbmQgc28gb24uCi0KLSAgIE5vdCBvbmx5IGlzIGl0IGNvbmZ1c2luZyB0byBoYXZlIGRpZmZl cmVudCBuYW1lcyBmb3IgdGhlc2UgY29tbWFuZHMsCi0gICBtYW55IG9mIHdoaWNoIGFyZSBub3Qg cmVhbCB3b3JkcywgYnV0IHRoaXMgYWxzbyBkb2VzIG5vdCBhbGxvdyBhbGwKLSAgIGNvbWJpbmF0 aW9ucywgbGlrZSAic2VuZCBhIGZpbGUgYXMgbWFpbCwgdGhlbiBkZWxldGUgaXQiLgotCi0gICBJ biBDLUtlcm1pdCA3LjAsIHRoZSBTRU5ELCBHRVQsIGFuZCBSRUNFSVZFIGNvbW1hbmRzIHdlcmUg cmVzdHJ1Y3R1cmVkCi0gICB0byBhY2NlcHQgbW9kaWZpZXIgc3dpdGNoZXMgKHN3aXRjaGVzIGFy ZSBleHBsYWluZWQgaW4gWzQ4M11TZWN0aW9uCi0gICAxLjUpLgotCi00LjcuMS4gU0VORCBDb21t YW5kIFN3aXRjaGVzCi0KLSAgIFdpdGhvdXQgc3dpdGNoZXMsIHRoZSBTRU5EIGNvbW1hbmQgc3Rp bGwgd29ya3MgZXhhY3RseSBhcyBiZWZvcmU6Ci0KLSAgc2VuZCBvb2ZhLnR4dCAgICAgIDsgc2Vu ZCBhIHNpbmdsZSBmaWxlCi0gIHNlbmQgb29mYS4qICAgICAgICA7IHNlbmQgbXVsdGlwbGUgZmls ZXMKLSAgc2VuZCBvb2ZhLnR4dCB4LnggIDsgc2VuZCBvb2ZhLnR4dCBhcyB4LnggKHRlbGwgcmVj ZWl2ZXIgaXRzIG5hbWUgaXMgeC54KQotICBzZW5kICAgICAgICAgICAgICAgOyBzZW5kIGZyb20g U0VORC1MSVNUCi0KLSAgIEJ1dCBub3cgdGhlIGZvbGxvd2luZyBtb2RpZmllciBzd2l0Y2hlcyBt YXkgYmUgaW5jbHVkZWQgYmV0d2VlbiAic2VuZCIKLSAgIGFuZCB0aGUgZmlsZW5hbWUuIFplcm8s IG9uZSwgdHdvLCBvciBtb3JlIHN3aXRjaGVzIG1heSBiZSBpbmNsdWRlZCBpbgotICAgYW55IGNv bWJpbmF0aW9uIHRoYXQgbWFrZXMgc2Vuc2UuIFN3aXRjaCBuYW1lcyAoc3VjaCBhcyAvQklOQVJZ KSBjYW4gYmUKLSAgIGFiYnJldmlhdGVkLCBqdXN0IGxpa2UgYW55IG90aGVyIGtleXdvcmRzLiBN b3N0IG9mIHRoZXNlIHN3aXRjaGVzIHdvcmsKLSAgIG9ubHkgd2hlbiB1c2luZyBLZXJtaXQgcHJv dG9jb2wgKC9URVhUIGFuZCAvQklOQVJZIGFyZSB0aGUgZXhjZXB0aW9ucykuCi0KLSAgIC9BRlRF UjpkYXRlLXRpbWUKLSAgICAgICAgICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIG1v ZGlmaWVkIChvciwgaW4gVk1TLCBjcmVhdGVkKQotICAgICAgICAgIGFmdGVyIHRoZSBnaXZlbiBk YXRlLXRpbWUgKHNlZSBbNDg0XVNlY3Rpb24gMS42KSBhcmUgdG8gYmUgc2VudC4KLSAgICAgICAg ICBFeGFtcGxlczoKLQotICBzZW5kIC90ZXh0IC9hZnRlcjp7Mi1GZWItMTk5NyAxMDoyODozMH0g Ki50eHQKLSAgc2VuZCAvdGV4dCAvYWZ0ZXI6XGZkYXRlKG9vZmEudHh0KSAqLnR4dAotCi0gICAg ICAgICAgU3lub255bTogL1NJTkNFLgotCi0gICAvQVJSQVk6YXJyYXluYW1lCi0gICAgICAgICAg U3BlY2lmaWVzIHRoYXQgaW5zdGVhZCBvZiBzZW5kaW5nIGEgZmlsZSwgQy1LZXJtaXQgaXMgdG8g c2VuZAotICAgICAgICAgIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gYXJyYXkuIFNpbmNlIGFu IGFycmF5IGRvZXMgbm90IGhhdmUgYQotICAgICAgICAgIGZpbGVuYW1lLCB5b3Ugc2hvdWxkIGlu Y2x1ZGUgYW4gL0FTLU5BTUUgc3dpdGNoIHRvIHNwZWNpZnkgdGhlCi0gICAgICAgICAgbmFtZSB1 bmRlciB3aGljaCB0aGUgYXJyYXkgaXMgdG8gYmUgc2VudCAoaWYgeW91IGRvIG5vdCwgdGhlCi0g ICAgICAgICAgbmFtZSAiX2FycmF5X3hfIiBpcyB1c2VkLCB3aGVyZSAneCcgaXMgcmVwbGFjZWQg YnkgdGhlIGFycmF5Ci0gICAgICAgICAgZGVzaWduYXRvcikuIFNlZSBbNDg1XXNlY3Rpb24gNy4x MCBmb3IgYXJyYXktbmFtZSBzeW50YXguIEFzCi0gICAgICAgICAgbm90ZWQgaW4gdGhhdCBzZWN0 aW9uLCB5b3UgY2FuIGFsc28gaW5jbHVkZSBhIHJhbmdlIHRvIGhhdmUgYQotICAgICAgICAgIHNl Z21lbnQgb2YgdGhlIGFycmF5IHNlbnQsIHJhdGhlciB0aGFuIHRoZSB3aG9sZSB0aGluZzsgZm9y Ci0gICAgICAgICAgZXhhbXBsZTogInNlbmQgL2FycmF5OiZhWzEwMDoxOTldIi4gSXQgaXMgc3Ry b25nbHkgcmVjb21tZW5kZWQKLSAgICAgICAgICB0aGF0IHlvdSBhY2NvbXBhbnkgdGhlIC9BUlJB WSBzd2l0Y2ggd2l0aCBhIC9URVhUIG9yIC9CSU5BUlkKLSAgICAgICAgICBzd2l0Y2ggdG8gZm9y Y2UgdGhlIGRlc2lyZWQgdHJhbnNmZXIgbW9kZSwgc2luY2Ugb3RoZXJ3aXNlIHRoZQotICAgICAg ICAgIHZhcmlvdXMgYXV0b21hdGljIG1lY2hhbmlzbXMgbWlnaHQgc3dpdGNoIHRvIGJpbmFyeSBt b2RlIHdoZW4KLSAgICAgICAgICB5b3UgcmVhbGx5IHdhbnRlZCB0ZXh0LCBvciB2aWNlIHZlcnNh LiBJbiB0ZXh0IG1vZGUgYSBsaW5lCi0gICAgICAgICAgdGVybWluYXRvciBpcyBhZGRlZCB0byB0 aGUgZW5kIG9mIGVhY2ggYXJyYXkgZWxlbWVudCwgYnV0IG5vdCBpbgotICAgICAgICAgIGJpbmFy eSBtb2RlLiBGb3IgZGV0YWlscyBhbmQgZXhhbXBsZXMgc2VlIFs0ODZdU2VjdGlvbiA3LjEwLjEx LgotCi0gICAvQVMtTkFNRTp0ZXh0Ci0gICAgICAgICAgU3BlY2lmaWVzICJ0ZXh0IiBhcyB0aGUg bmFtZSB0byBzZW5kIHRoZSBmaWxlIHVuZGVyLiBZb3UgY2FuCi0gICAgICAgICAgYWxzbyBzdGls bCBzcGVjaWZ5IHRoZSBhcy1uYW1lIGFzIHRoZSBzZWNvbmQgZmlsZW5hbWUgb24gdGhlCi0gICAg ICAgICAgU0VORCBjb21tYW5kIGxpbmUuIFRoZSBmb2xsb3dpbmcgdHdvIGNvbW1hbmRzIGFyZSBl cXVpdmFsZW50OgotCi0gIHNlbmQgb29mYS50eHQgb29mYS5uZXcKLSAgc2VuZCAvYXM6b29mYS5u ZXcgb29mYS50eHQKLQotICAgL0JFRk9SRTpkYXRlLXRpbWUKLSAgICAgICAgICBTcGVjaWZpZXMg dGhhdCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIChvciwgaW4gVk1TLCBjcmVhdGVkKQotICAg ICAgICAgIGJlZm9yZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIChbNDg3XVNlY3Rpb24gMS42KSBhcmUg dG8gYmUgc2VudC4KLQotICAgL0JJTkFSWQotICAgICAgICAgIFBlcmZvcm1zIHRoaXMgdHJhbnNm ZXIgaW4gYmluYXJ5IG1vZGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlCi0gICAgICAgICAgZ2xvYmFs IHRyYW5zZmVyIG1vZGUsIG92ZXJyaWRpbmcgbm90IG9ubHkgdGhlIEZJTEUgVFlQRSBhbmQKLSAg ICAgICAgICBUUkFOU0ZFUiBNT0RFIHNldHRpbmdzLCBidXQgYWxzbyB0aGUgRklMRSBQQVRURVJO IHNldHRpbmcsIGJ1dAotICAgICAgICAgIGZvciB0aGlzIFNFTkQgY29tbWFuZCBvbmx5LiBJbiBv dGhlciB3b3JkcywgU0VORCAvQklOQVJZIG1lYW5zCi0gICAgICAgICAgd2hhdCBpdCBzYXlzOiBz ZW5kIHRoZSBmaWxlIGluIGJpbmFyeSBtb2RlLCByZWdhcmRsZXNzIG9mIGFueQotICAgICAgICAg IG90aGVyIHNldHRpbmdzLiBFeGFtcGxlOgotCi0gIHNldCBmaWxlIHR5cGUgdGV4dCAgICAgIDsg U2V0IGdsb2JhbCB0cmFuc2ZlciBtb2RlIHRvIHRleHQKLSAgc2VuZCAvYmluYXJ5IG9vZmEuemlw ICAgOyBTZW5kIGEgZmlsZSBpbiBiaW5hcnkKLSAgc2VuZCBvb2ZhLnR4dCAgICAgICAgICAgOyBU aGlzIG9uZSBpcyBzZW50IGluIHRleHQgbW9kZQotCi0gICAvQ09NTUFORAotICAgICAgICAgIFNF TkQgL0NPTU1BTkQgaXMgZXF1aXZhbGVudCB0byBDU0VORCAoWzQ4OF1TZWN0aW9uIDQuMi4yKSAt LSBpdAotICAgICAgICAgIHNheXMgdG8gc2VuZCB0aGUgb3V0cHV0IGZyb20gYSBjb21tYW5kLCBy YXRoZXIgdGhhbiB0aGUgY29udGVudHMKLSAgICAgICAgICBvZiBhIGZpbGUuIFRoZSBmaXJzdCAi ZmlsZW5hbWUiIG9uIHRoZSBTRU5EIGNvbW1hbmQgbGluZSBpcwotICAgICAgICAgIGludGVycHJl dGVkIGFzIHRoZSBuYW1lIG9mIGEgY29tbWFuZDsgdGhlIHNlY29uZCAoaWYgYW55KSBpcyB0aGUK LSAgICAgICAgICBhcy1uYW1lLiBFeGFtcGxlczoKLQotICBzZW5kIC9jb21tYW5kIHtncmVwIFN1 bmRheSBvb2ZhLnR4dH0gc3VuZGF5LnR4dAotICBzZW5kIC9hcy1uYW1lOnN1bmRheS50eHQgL2Nv bW1hbmQge2dyZXAgU3VuZGF5IG9vZmEudHh0fQotICBzZW5kIC9iaW4gL2NvbW1hbmQge3RhciBj ZiAtIC4gfCBnemlwIC1jfSB7IWd1bnppcCAtYyB8IHRhciB4ZiAtfQotCi0gICAvREVMRVRFCi0g ICAgICAgICAgRGVsZXRlcyB0aGUgZmlsZSAob3IgZWFjaCBmaWxlIGluIHRoZSBncm91cCkgYWZ0 ZXIgaXQgaGFzIGJlZW4KLSAgICAgICAgICBzZW50IHN1Y2Nlc3NmdWxseSAoYnV0IGRvZXMgbm90 IGRlbGV0ZSBpdCBpZiBpdCB3YXMgbm90IHNlbnQKLSAgICAgICAgICBzdWNjZXNzZnVsbHkpLiBT RU5EIC9ERUxFVEUgaXMgZXF1aXZhbGVudCB0byBNT1ZFLiBIYXMgbm8gZWZmZWN0Ci0gICAgICAg ICAgd2hlbiB1c2VkIHdpdGggL0NPTU1BTkQuIEV4YW1wbGU6Ci0KLSAgc2VuZCAvZGVsZXRlICou bG9nCi0KLSAgIC9ET1RGSUxFUwotICAgICAgICAgIChVTklYIGFuZCBPUy05IG9ubHkpIE5vcm1h bGx5IGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggIi4iCi0gICAgICAgICAgYXJlIHNraXBw ZWQgd2hlbiBtYXRjaGluZyB3aWxkY2FyZHMgdGhhdCBkbyBub3QgYWxzbyBiZWdpbiB3aXRoCi0g ICAgICAgICAgIi4iLiBJbmNsdWRlIC9ET1RGSUxFUyB0byBmb3JjZSB0aGVzZSBmaWxlcyB0byBi ZSBpbmNsdWRlZCB0b28uCi0KLSAgIC9SRUNVUlNJVkUKLSAgICAgICAgICBEZXNjZW5kIHRoZSB0 aHJvdWdoIHRoZSBkaXJlY3RvcnkgdHJlZSB3aGVuIGxvY2F0aW5nIGZpbGVzIHRvCi0gICAgICAg ICAgc2VuZC4gQXV0b21hdGljYWxseSBzZXRzIC9QQVRITkFNRVM6UkVMQVRJVkUuIEV4cGxhaW5l ZCBpbgotICAgICAgICAgIFs0ODldU2VjdGlvbiA0LjExIC4KLQotICAgL0VYQ0VQVDpwYXR0ZXJu Ci0gICAgICAgICAgU2VlIFs0OTBdU2VjdGlvbiAxLjUuNC4KLQotICAgL05PQkFDS1VQCi0gICAg ICAgICAgVGhpcyBtZWFucyB0byBza2lwIGJhY2t1cCBmaWxlcyB3aGVuIHNlbmRpbmcsIGV2ZW4g aWYgdGhleSBtYXRjaAotICAgICAgICAgIHRoZSBTRU5EIGZpbGUgc3BlY2lmaWNhdGlvbi4gVGhp cyBpcyBlcXVpdmFsZW50IHRvIHVzaW5nIFNFTkQKLSAgICAgICAgICAvRVhDRVBUIGFuZCBpbmNs dWRpbmcgKi5+WzAtOV0qfiBpbiB0aGUgZXhjZXB0aW9uIGxpc3QgKG9yICoufip+Ci0gICAgICAg ICAgaWYgS2VybWl0IHdhcyBidWlsdCB3aXRob3V0IHBhdHRlcm4tbWF0Y2hpbmcgc3VwcG9ydDsg c2VlCi0gICAgICAgICAgWzQ5MV1TZWN0aW9uIDQuOS4xKS4gSW5jbHVkaW5nIHRoaXMgc3dpdGNo IGlzIGVxdWl2YWxlbnQgdG8KLSAgICAgICAgICBnaXZpbmcgU0VUIFNFTkQgQkFDS1VQIE9GRiAo WzQ5Ml1TZWN0aW9uIDQuMC42KSBwcmlvciB0byBTRU5ELAotICAgICAgICAgIGV4Y2VwdCBpdHMg ZWZmZWN0IGlzIGxvY2FsIHRvIHRoZSBTRU5EIGNvbW1hbmQgd2l0aCB3aGljaCBpdCB3YXMKLSAg ICAgICAgICBnaXZlbi4KLQotICAgL05PRE9URklMRVMKLSAgICAgICAgICBUaGUgb3Bwb3NpdGUg b2YgL0RPVEZJTEVTIChxLnYuKQotCi0gICAvRklMRU5BTUVTOntDT05WRVJURUQsTElURVJBTH0K LSAgICAgICAgICBVc2UgdGhpcyBzd2l0Y2ggdG8gb3ZlcnJpZGUgdGhlIGN1cnJlbnQgZ2xvYmFs IFNFVCBGSUxFIE5BTUVTCi0gICAgICAgICAgc2V0dGluZyBmb3IgdGhpcyB0cmFuc2ZlciBvbmx5 LgotCi0gICAvRklMVEVSOmNvbW1hbmQKLSAgICAgICAgICBUaGlzIHNwZWNpZmllcyBhIGZpbHRl ciB0byBwYXNzIHRoZSBmaWxlIHRocm91Z2ggYmVmb3JlIHNlbmRpbmcKLSAgICAgICAgICBpdC4g U2VlIHRoZSBbNDkzXXNlY3Rpb24gb24gZmlsZS10cmFuc2ZlciBwaXBlcyBhbmQgZmlsdGVycy4g VGhlCi0gICAgICAgICAgL0ZJTFRFUiBzd2l0Y2ggYXBwbGllcyBvbmx5IHRvIHRoZSBmaWxlLXRy YW5zZmVyIGNvbW1hbmQgaXQgaXMKLSAgICAgICAgICBnaXZlbiB3aXRoOyBpdCBkb2VzIG5vdCBh ZmZlY3QgdGhlIGdsb2JhbCBTRU5EIEZJTFRFUiBzZXR0aW5nLAotICAgICAgICAgIGlmIGFueS4K LQotICAgL0lNQUdFCi0gICAgICAgICAgVk1TOiBTZW5kcyBpbiBpbWFnZSBtb2RlLiBOb24tVk1T OiBzYW1lIGFzIC9CSU5BUlkuCi0KLSAgIC9MQUJFTEVECi0gICAgICAgICAgVk1TIGFuZCBPUy8y IG9ubHk6IFNlbmRzIGluIGxhYmVsZWQgbW9kZS4KLQotICAgL0xBUkdFUi1USEFOOm51bWJlcgot ICAgICAgICAgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgdGhhdCBhcmUgbG9uZ2Vy IHRoYW4gdGhlIGdpdmVuCi0gICAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIGFyZSB0byBiZSBzZW50 LgotCi0gICAvTElTVEZJTEU6ZmlsZW5hbWUKLSAgICAgICAgICBTcGVjaWZpZXMgdGhhdCB0aGUg ZmlsZXMgdG8gYmUgc2VudCBhcmUgbGlzdGVkIGluIGEgZmlsZSB3aXRoCi0gICAgICAgICAgdGhl IGdpdmVuIGZpbGVuYW1lLiBUaGUgZmlsZSBjb250YWlucyBvbmUgZmlsZW5hbWUgcGVyIGxpbmUu Ci0gICAgICAgICAgVGhlc2UgZmlsZW5hbWVzIGFyZSBub3QgY2hlY2tlZCBpbiBhbnkgd2F5OyBl YWNoIGZpbGVuYW1lIGlzCi0gICAgICAgICAgdGFrZW4gYW5kIGRvZXMgbm90IHVzZSBvciBkZXBl bmQgb24gYW55IEtlcm1pdC1zcGVjaWZpYyBzeW50YXguCi0gICAgICAgICAgSW4gcGFydGljdWxh ciwgYmFja3NsYXNoZXMgYXJlIG5vdCB0cmVhdGVkIHNwZWNpYWxseSwgbGVhZGluZwotICAgICAg ICAgIGFuZCB0cmFpbGluZyBzcGFjZXMgYXJlIG5vdCBzdHJpcHBlZCwgZXRjLiBIb3dldmVyLCBp ZiBhCi0gICAgICAgICAgZmlsZW5hbWUgY29udGFpbnMgd2lsZGNhcmRzLCB0aGV5IGFyZSBleHBh bmRlZC4gRXhhbXBsZTogSWYgYQotICAgICAgICAgIGZpbGUgbmFtZWQgZmlsZXMudHh0IGNvbnRh aW5zIHRoZSBmb2xsb3dpbmcgbGluZXM6Ci0KLSAgYmxhaC50eHQKLSAgb29mYSoKLSAgeC54Ci0K LSAgICAgICAgICAoYnV0IHdpdGhvdXQgbGVhZGluZyBvciB0cmFpbGluZyBzcGFjZXMpLCB0aGVu IHRoZSBDLUtlcm1pdAotICAgICAgICAgIGNvbW1hbmQgInNlbmQgL2xpc3RmaWxlOmZpbGVzLnR4 dCIgd2lsbCBzZW5kIHRoZSBmaWxlcyBibGFoLnR4dCwKLSAgICAgICAgICB4LngsIGFuZCBhbGwg ZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAib29mYSIsIGFzc3VtaW5nIHRoZQotICAgICAg ICAgIGZpbGVzIGV4aXN0IGFuZCBhcmUgcmVhZGFibGUuIFRoZSAvTElTVEZJTEUgc3dpdGNoLCBj YW4sIG9mCi0gICAgICAgICAgY291cnNlLCBiZSB1c2VkIHdpdGggb3RoZXIgc3dpdGNoZXMgd2hl biBpdCBtYWtlcyBzZW5zZSwgZm9yCi0gICAgICAgICAgZXhhbXBsZSwgL0VYQ0VQVCwgL0JJTkFS WSwgL0FGVEVSLCAvU01BTExFUiwgL01PVkUtVE8sIC9ERUxFVEUsCi0gICAgICAgICAgL0FTLU5B TUUgd2l0aCBhIHRlbXBsYXRlLCBldGMuCi0KLSAgIC9NQUlMOmFkZHJlc3MKLSAgICAgICAgICBT ZW5kcyB0aGUgZmlsZSBhcyBlLW1haWwgdG8gdGhlIGdpdmVuIGFkZHJlc3Mgb3IgYWRkcmVzc2Vz LgotICAgICAgICAgICJzZW5kIC9tYWlsOmFkZHJlc3MgZmlsZW5hbWUiIGlzIGVxdWl2YWxlbnQg dG8gIm1haWwgZmlsZW5hbWUKLSAgICAgICAgICBhZGRyZXNzIi4gWW91IGNhbiBpbmNsdWRlIG11 bHRpcGxlIGFkZHJlc3NlcyBzZXBhcmF0ZWQgYnkKLSAgICAgICAgICBjb21tYXMuIEV4YW1wbGVz OgotCi0gIHNlbmQgL21haWw6a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1IHBhY2tldC5sb2cK LSAgc2VuZCAvbWFpbDpjbWcsZmRjLGpyZCBvb2ZhLnR4dAotCi0gICAgICAgICAgQXMgd2l0aCBh bnkgc3dpdGNoIGFyZ3VtZW50LCBpZiB0aGUgYWRkcmVzcyBvciBhZGRyZXNzIGxpc3QKLSAgICAg ICAgICBjb250YWlucyBhbnkgc3BhY2VzLCB5b3UgbXVzdCBlbmNsb3NlIGl0IGluIGJyYWNlcy4g VGhlIGZvcm1hdAotICAgICAgICAgIG9mIHRoZSBhZGRyZXNzZXMgbXVzdCBhZ3JlZSB3aXRoIHRo YXQgdW5kZXJzdG9vZCBieSB0aGUKLSAgICAgICAgICBtYWlsLXNlbmRpbmcgcHJvZ3JhbSBvbiB0 aGUgcmVjZWl2ZXIncyBjb21wdXRlci4KLQotICAgL01PVkUtVE86ZGlyZWN0b3J5LW5hbWUKLSAg ICAgICAgICBTcGVjaWZpZXMgdGhhdCBhZnRlciBlYWNoIChvciB0aGUgb25seSkgc291cmNlIGZp bGUgaXMgc2VudAotICAgICAgICAgIHN1Y2Nlc3NmdWxseSwgYW5kIE9OTFkgaWYgaXQgaXMgc2Vu dCBzdWNjZXNzZnVsbHksIGl0IHNob3VsZCBiZQotICAgICAgICAgIG1vdmVkIHRvIHRoZSBuYW1l ZCBkaXJlY3RvcnkuIElmIHRoZSBkaXJlY3RvcnkgbmFtZSBjb250YWlucwotICAgICAgICAgIHNw YWNlcywgZW5jbG9zZSBpdCBpbiBicmFjZXMuIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhp c3QsCi0gICAgICAgICAgaXQgaXMgY3JlYXRlZCBpZiBwb3NzaWJsZTsgaWYgaXQgY2FuJ3QgYmUg Y3JlYXRlZCwgdGhlIGNvbW1hbmQKLSAgICAgICAgICBmYWlscyBhbmQgYW4gZXJyb3IgbWVzc2Fn ZSBpcyBwcmludGVkLiBFeGFtcGxlOgotCi0gIHNlbmQgL3RleHQgL21vdmUtdG86L3VzZXJzL29s Z2EvYmFja3VwLyAqLnR4dAotCi0gICAvTk9ULUFGVEVSOmRhdGUtdGltZQotICAgICAgICAgIFNw ZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYXQgb3IgYmVmb3JlIHRoZSBn aXZlbgotICAgICAgICAgIGRhdGUgYW5kIHRpbWUgYXJlIHRvIGJlIHNlbnQuCi0KLSAgIC9OT1Qt QkVGT1JFOmRhdGUtdGltZQotICAgICAgICAgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmls ZXMgbW9kaWZpZWQgYXQgb3IgYWZ0ZXIgdGhlIGdpdmVuCi0gICAgICAgICAgZGF0ZSBhbmQgdGlt ZSBhcmUgdG8gYmUgc2VudC4KLQotICAgL1BBVEhOQU1FUzp7T0ZGLEFCU09MVVRFLFJFTEFUSVZF fQotICAgICAgICAgIFVzZSB0aGlzIHN3aXRjaCB0byBvdmVycmlkZSB0aGUgY3VycmVudCBnbG9i YWwgU0VUIFNFTkQKLSAgICAgICAgICBQQVRITkFNRVMgc2V0dGluZyBmb3IgdGhpcyB0cmFuc2Zl ciBvbmx5LiAvUEFUSE5BTUVTOkFCU09MVVRFIG9yCi0gICAgICAgICAgUkVMQVRJVkUgYWxzbyBz ZXRzIC9GSUxFTkFNRVM6TElURVJBTCAoYWxzbyBmb3IgdGhpcyB0cmFuc2ZlcgotICAgICAgICAg IG9ubHkpIHNpbmNlIHBhdGhuYW1lcyBhcmUgbm90IHNlbnQgb3RoZXJ3aXNlLgotCi0gICAvUkVO QU1FLVRPOnRleHQKLSAgICAgICAgICBTcGVjaWZpZXMgdGhhdCBhZnRlciB0aGUgKG9yIGVhY2gp IHNvdXJjZSBmaWxlIGlzIHNlbnQKLSAgICAgICAgICBzdWNjZXNzZnVsbHksIGFuZCBPTkxZIGlm IGl0IGlzIHNlbnQgc3VjY2Vzc2Z1bGx5LCBpdCBzaG91bGQgYmUKLSAgICAgICAgICByZW5hbWVk IHRvIHRoZSBuYW1lIGdpdmVuLiBJZiB0aGUgbmFtZSBjb250YWlucyBzcGFjZXMsIGVuY2xvc2UK LSAgICAgICAgICBpdCBpbiBicmFjZXMuIElmIGEgZmlsZSBncm91cCBpcyBiZWluZyBzZW50LCB0 aGVuIHRoZSAidGV4dCIKLSAgICAgICAgICBtdXN0IGNvbnRhaW4gYSB2YXJpYWJsZSByZWZlcmVu Y2Ugc3VjaCBhcyBcdihmaWxlbmFtZSkgKHNlZQotICAgICAgICAgIFs0OTRdU2VjdGlvbiA0LjEp LiBFeGFtcGxlOgotCi0gIHNlbmQgL3JlbmFtZS10bzpva19cdihmaWxlbmFtZSkgKi4qCi0KLSAg ICAgICAgICBUaGlzIHNlbmRzIGVhY2ggZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5k IGlmIGl0IHdhcyBzZW50Ci0gICAgICAgICAgc3VjY2Vzc2Z1bGx5LCBjaGFuZ2VzIGl0cyBuYW1l IHRvIGJlZ2luIHdpdGggIm9rXyIuCi0KLSAgIC9TTUFMTEVSLVRIQU46bnVtYmVyCi0gICAgICAg ICAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyB0aGF0IGFyZSBzbWFsbGVyIHRoYW4g dGhlIGdpdmVuCi0gICAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIGFyZSB0byBiZSBzZW50LgotCi0g ICAvU1VCSkVDVDp0ZXh0Ci0gICAgICAgICAgU3ViamVjdCBmb3IgZW1haWwuIEFjdHVhbGx5LCB0 aGlzIGlzIGp1c3QgYSBzeW5vbnltIGZvcgotICAgICAgICAgIC9BUy1OQU1FLiBJZiB0aGUgdGV4 dCBpbmNsdWRlcyBzcGFjZXMsIHlvdSBtdXN0IGVuY2xvc2UgaXQgaW4KLSAgICAgICAgICBicmFj ZXMuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgc3ViamVjdCAob3IgYXMtbmFtZSksIHRoZSBuYW1l IG9mCi0gICAgICAgICAgdGhlIGZpbGUgaXMgdXNlZCBhcyB0aGUgc3ViamVjdC4gRXhhbXBsZToK LQotICBzZW5kIC9tYWlsOmtlcm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdSAvc3Viajp7QXMgcmVx dWVzdGVkfSBwYWNrZXQubG9nCi0KLSAgIC9QUklOVDpvcHRpb25zCi0gICAgICAgICAgU2VuZHMg dGhlIGZpbGUgdG8gYmUgcHJpbnRlZCwgb3B0aW9uYWxseSBzcGVjaWZ5aW5nIG9wdGlvbnMgZm9y Ci0gICAgICAgICAgdGhlIHByaW50ZXIuIEVxdWl2YWxlbnQgdG8gUkVNT1RFIFBSSU5UIGZpbGVu YW1lIG9wdGlvbnMuCi0gICAgICAgICAgRXhhbXBsZXM6Ci0KLSAgc2VuZCAvcHJpbnQgb29mYS50 eHQgICAgICAgICAgICAgIDsgTm8gb3B0aW9ucy4KLSAgc2VuZCAvcHJpbnQ6L2NvcGllcz0zIG9v ZmEudHh0ICAgIDsgIi9jb3BpZXM9MyIgaXMgYSBWTVMgUFJJTlQgc3dpdGNoLgotICBzZW5kIC9w cmludDotIzMgb29mYS50eHQgICAgICAgICAgOyAiLSMzIiBpcyBhIFVOSVggbHByIHN3aXRjaC4K LQotICAgL1BST1RPQ09MOm5hbWUKLSAgICAgICAgICBVc2VzIHRoZSBnaXZlbiBwcm90b2NvbCB0 byBzZW5kIHRoZSBmaWxlIChLZXJtaXQsIFptb2RlbSwgZXRjKQotICAgICAgICAgIGZvciB0aGlz IHRyYW5zZmVyIHdpdGhvdXQgY2hhbmdpbmcgZ2xvYmFsIHByb3RvY29sLiBPbmx5Ci0gICAgICAg ICAgYXZhaWxhYmxlIGluIEtlcm1pdCA5NSwgVU5JWCwgYW5kIE9TLTkuIEV4YW1wbGU6Ci0KLSAg c2V0IHByb3RvY29sIGtlcm1pdCAgICAgICAgICAgICAgIDsgU2V0IGdsb2JhbCBwcm90b2NvbAot ICBzZW5kIC9wcm90bzp6bW9kZW0gL2JpbiBvb2ZhLnppcCAgOyBTZW5kIGp1c3QgdGhpcyBmaWxl IHdpdGggWm1vZGVtCi0gIHNlbmQgb29mYS50eHQgICAgICAgICAgICAgICAgICAgICA7IFRoaXMg ZmlsZSBpcyBzZW50IHdpdGggS2VybWl0Ci0KLSAgIC9RVUlFVAotICAgICAgICAgIFdoZW4gc2Vu ZGluZyBpbiBsb2NhbCBtb2RlLCB0aGlzIHN1cHByZXNzZXMgdGhlIGZpbGUtdHJhbnNmZXIKLSAg ICAgICAgICBkaXNwbGF5LgotCi0gICAvUkVDT1ZFUgotICAgICAgICAgIFVzZWQgdG8gcmVjb3Zl ciBmcm9tIGEgcHJldmlvdXNseSBpbnRlcnJ1cHRlZCB0cmFuc2ZlcjsgU0VORAotICAgICAgICAg IC9SRUNPVkVSIGlzIGVxdWl2YWxlbnQgdG8gUkVTRU5ELiBSZWNvdmVyeSBvbmx5IHdvcmtzIGlu IGJpbmFyeQotICAgICAgICAgIG1vZGU7IFNFTkQgL1JFQ09WRVIgYW5kIFJFU0VORCBpbmNsdWRl IGFuIGltcGxpZWQgL0JJTkFSWQotICAgICAgICAgIHN3aXRjaC4gRXZlbiB0aGVuLCByZWNvdmVy eSB3aWxsIHN1Y2Nlc3NmdWwgb25seSBpZiAoYSkgdGhlCi0gICAgICAgICAgb3JpZ2luYWwgKGlu dGVycnVwdGVkKSB0cmFuc2ZlciB3YXMgYWxzbyBpbiBiaW5hcnkgbW9kZSwgb3IgKGIpCi0gICAg ICAgICAgaWYgaXQgd2FzIGluIHRleHQgbW9kZSwgdGhlIHR3byBLZXJtaXQgcHJvZ3JhbXMgcnVu IG9uIHBsYXRmb3JtcwotICAgICAgICAgIHdoZXJlIHRleHQtbW9kZSB0cmFuc2ZlcnMgYXJlIG5v dCBsZW5ndGgtY2hhbmdpbmcuCi0KLSAgIC9TVEFSVElORzpudW1iZXIKLSAgICAgICAgICBTdGFy dHMgc2VuZGluZyB0aGUgZmlsZSBmcm9tIHRoZSBnaXZlbiBieXRlIHBvc2l0aW9uLiBTRU5ECi0g ICAgICAgICAgL1NUQVJUSU5HOm4gZmlsZW5hbWUgaXMgZXF1aXZhbGVudCB0byBQU0VORCBmaWxl bmFtZSBuLgotCi0gICAvVEVYVAotICAgICAgICAgIFBlcmZvcm1zIHRoaXMgdHJhbnNmZXIgaW4g dGV4dCBtb2RlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBnbG9iYWwKLSAgICAgICAgICB0cmFuc2Zl ciBtb2RlLCBvdmVycmlkaW5nIG5vdCBvbmx5IHRoZSBGSUxFIFRZUEUgYW5kIFRSQU5TRkVSCi0g ICAgICAgICAgTU9ERSBzZXR0aW5ncywgYnV0IGFsc28gdGhlIEZJTEUgUEFUVEVSTiBzZXR0aW5n LCBmb3IgdGhpcyBTRU5ECi0gICAgICAgICAgY29tbWFuZCBvbmx5LiBJbiBvdGhlciB3b3Jkcywg U0VORCAvVEVYVCByZWFsbHkgc2VuZCB0aGUgZmlsZSBpbgotICAgICAgICAgIHRleHQgbW9kZSwg cmVnYXJkbGVzcyBvZiBhbnkgb3RoZXIgc2V0dGluZ3Mgb3IgbmVnb3RpYXRpb25zLgotCi0gICBB Ym91dCBtYWlsLi4uIFJlZmVyIHRvIFs0OTVdU2VjdGlvbiA0LjcuMS4gVGhlIHNhbWUgcnVsZXMg YXBwbHkgYXMgZm9yCi0gICBmaWxlIHRyYW5zZmVyLiBJZiB5b3UgYXJlIG1haWxpbmcgbXVsdGlw bGUgZmlsZXMsIHlvdSBjYW4ndCB1c2UgYW4KLSAgIGFzLW5hbWUgKGluIHRoaXMgY2FzZSwgYSBz dWJqZWN0KSB1bmxlc3MgaXQgY29udGFpbnMgcmVwbGFjZW1lbnQKLSAgIHZhcmlhYmxlcyBsaWtl IFx2KGZpbGVudW0pLiBGb3IgZXhhbXBsZSwgaWYgeW91OgotCi0gIHNlbmQgL21haWw6c29tZWJv ZHlAeHl6LmNvbSAqLnR4dAotCi0gICBUaGVuIGVhY2ggZmlsZSB3aWxsIGFycml2ZSBhcyBhIHNl cGFyYXRlIGVtYWlsIG1lc3NhZ2Ugd2l0aCBpdHMgbmFtZSBhcwotICAgdGhlIHN1YmplY3QuIEJ1 dCBpZiB5b3U6Ci0KLSAgc2VuZCAvbWFpbDpzb21lYm9keUB4eXouY29tIC9zdWJqZWN0OntIZXJl IGlzIGEgZmlsZX0gKi50eHQKLQotICAgVGhlbiBlYWNoIGZpbGUgbWVzc2FnZSB3aWxsIGhhdmUg dGhlIHNhbWUgc3ViamVjdCwgd2hpY2ggaXMgcHJvYmFibHkKLSAgIG5vdCB3aGF0IHlvdSB3YW50 LiBZb3UgY2FuIGdldCBhcm91bmQgdGhpcyB3aXRoIGNvbnN0cnVjdGlvbnMgbGlrZToKLQotICBz ZW5kIC9tYWlsOnNvbWVib2R5QHh5ei5jb20gL3N1YmplY3Q6e0hlcmUgaXMgXHYoZmlsZW5hbWUp fSAqLnR4dAotCi0gICB3aGljaCBlbWJlZCB0aGUgZmlsZW5hbWUgaW4gdGhlIHN1YmplY3QuCi0K LSAgIFRoZSBNT1ZFLCBDU0VORCwgTUFJTCwgYW5kIFJFU0VORCBjb21tYW5kcyBub3cgYWxzbyBh Y2NlcHQgdGhlIHNhbWUKLSAgIHN3aXRjaGVzLiBBbmQgdGhlIHN3aXRjaGVzIGFyZSBhbHNvIG9w ZXJhdGl2ZSB3aGVuIHNlbmRpbmcgZnJvbSBhCi0gICBTRU5ELUxJU1QgKHNlZSBbNDk2XVVzaW5n IEMtS2VybWl0LCAybmQgRWQsIHBwLjE5MS0xOTIpLCBzbywgZm9yCi0gICBleGFtcGxlLCBpdCBp cyBub3cgcG9zc2libGUgdG8gU0VORCAvUFJJTlQgb3IgU0VORCAvTUFJTCBmcm9tIGEKLSAgIFNF TkQtTElTVC4KLQotICAgVGhlIE1TRU5EIGFuZCBNTU9WRSBjb21tYW5kcyBhbHNvIHRha2Ugc3dp dGNoZXMsIGJ1dCBub3QgYWxsIG9mIHRoZW0uCi0gICBXaXRoIHRoZXNlIGNvbW1hbmRzLCB3aGlj aCB0YWtlIGFuIGFyYml0cmFyeSBsaXN0IG9mIGZpbGVzcGVjcywgeW91IGNhbgotICAgdXNlIC9C SU5BUlksIC9ERUxFVEUsIC9NQUlMLCAvUFJJTlQsIC9QUk9UT0NPTCwgL1FVSUVULCAvUkVDT1ZF UiwgYW5kCi0gICAvVEVYVCAoYW5kIC9JTUFHRSBvciAvTEFCRUxFRCwgZGVwZW5kaW5nIG9uIHRo ZSBwbGF0Zm9ybSkuIE1NT1ZFIGlzCi0gICBlcXVpdmFsZW50IHRvIE1TRU5EIC9ERUxFVEUuIChJ ZiB5b3Ugd2FudCB0byBzZW5kIGEgZ3JvdXAgb2YgZmlsZXMsIGJ1dAotICAgaW4gbWl4ZWQgdHJh bnNmZXIgbW9kZXMgd2l0aCBwZXItZmlsZSBhcy1uYW1lcywgdXNlIEFERCBTRU5ELUxJU1QgYW5k Ci0gICB0aGVuIFNFTkQuKQotCi0gICBUaGUgTVNFTkQvTU1PVkUgc3dpdGNoZXMgY29tZSBiZWZv cmUgdGhlIGZpbGVuYW1lcywgYW5kIGFwcGx5IHRvIGFsbCBvZgotICAgdGhlbToKLQotICBtc2Vu ZCAvcHJpbnQgL3RleHQgKi5sb2cgb29mYS50eHQgL2V0Yy9tb3RkCi0KLSAgIElmIHlvdSB0eXBl IGFueSBvZiB0aGVzZSBjb21tYW5kcyAoU0VORCwgQ1NFTkQsIE1TRU5ELCBldGMpIGZvbGxvd2Vk IGJ5Ci0gICBhIHF1ZXN0aW9uIG1hcmsgKD8pLCB5b3Ugd2lsbCBzZWUgYSBsaXN0IG9mIHRoZSBz d2l0Y2hlcyB5b3UgY2FuIHVzZS4KLSAgIElmIHlvdSB3YW50IHRvIHNlZSBhIGxpc3Qgb2YgZmls ZW5hbWVzLCB5b3UnbGwgbmVlZCB0byB0eXBlIHNvbWV0aGluZwotICAgbGlrZSAic2VuZCAuLz8i IChVTklYLCBPUy8yLCBXaW5kb3dzLCBldGMpLCBvciAic2VuZCBbXT8iIChWTVMpLCBldGMuCi0g ICBPZiBjb3Vyc2UsIHlvdSBjYW4gYWxzbyB0eXBlIHBpZWNlcyBvZiBhIGZpbGVuYW1lIChhbnl0 aGluZyB0aGF0IGRvZXMKLSAgIG5vdCBzdGFydCB3aXRoICIvIikgYW5kIHRoZW4gIj8iIHRvIGdl dCBhIGxpc3Qgb2YgZmlsZW5hbWVzIHRoYXQgc3RhcnQKLSAgIHRoYXQgd2F5OyBlLmcuICJzZW5k IHguPyIgc3RpbGwgd29ya3MgYXMgYmVmb3JlLgotCi0gICBJbiBVTklYLCB3aGVyZSAiLyIgaXMg YWxzbyB0aGUgZGlyZWN0b3J5IHNlcGFyYXRvciwgdGhlcmUgaXMgdXN1YWxseSBubwotICAgYW1i aWd1aXR5IGJldHdlZW4gYSBmdWxseS1zcGVjaWZpZWQgcGF0aG5hbWUgYW5kIGEgc3dpdGNoLCBl eGNlcHQgd2hlbgotICAgYSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBoYXMgdGhlIHNhbWUg bmFtZSBhcyBhIHN3aXRjaCAoYXMgbm90ZWQgaW4KLSAgIFs0OTddU2VjdGlvbiAxLjUpOgotCi0g IHNlbmQgL2V0Yy9tb3RkICAgICAgICAgICAgICAgICAgICAgICAgOyBXb3JrcyBhcyBleHBlY3Rl ZAotICBzZW5kIC9jb21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgIDsgPz8/Ci0KLSAgIFRo ZSBzZWNvbmQgZXhhbXBsZSBpbnRlcnByZXRzICIvY29tbWFuZCIgYXMgYSBzd2l0Y2gsIG5vdCBh IGZpbGVuYW1lLgotICAgVG8gc2VuZCBhIGZpbGUgYWN0dWFsbHkgY2FsbGVkICJjb21tYW5kIiBp biB0aGUgcm9vdCBkaXJlY3RvcnksIHVzZToKLQotICBzZW5kIHsvY29tbWFuZH0KLQotICAgb3Ig b3RoZXIgc3lzdGVtLWRlcGVuZGVudCBmb3JtcyBzdWNoIGFzIC8vY29tbWFuZCwgLy4vY29tbWFu ZCwKLSAgIGM6L2NvbW1hbmQsIGV0Yywgb3IgY2QgdG8gLyBhbmQgdGhlbiAic2VuZCBjb21tYW5k Ii4KLQotNC43LjIuIEdFVCBDb21tYW5kIFN3aXRjaGVzCi0KLSAgIFdpdGhvdXQgc3dpdGNoZXMs IHRoZSBHRVQgY29tbWFuZCBzdGlsbCB3b3JrcyBhYm91dCB0aGUgc2FtZSBhcyBiZWZvcmU6Ci0K LSAgZ2V0IG9vZmEudHh0ICAgICAgICAgICAgICAgICAgICAgICAgICA7IEdFVCBhIHNpbmdsZSBm aWxlCi0gIGdldCBvb2ZhLiogICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBHRVQgbXVsdGlw bGUgZmlsZXMKLQotICAgSG93ZXZlciwgdGhlIG1lY2hhbmlzbSBmb3IgaW5jbHVkaW5nIGFuICJh cy1uYW1lIiBoYXMgY2hhbmdlZC4KLSAgIFByZXZpb3VzbHksIGluIG9yZGVyIHRvIGluY2x1ZGUg YW4gYXMtbmFtZSwgeW91IHdlcmUgcmVxdWlyZWQgdG8gdXNlCi0gICB0aGUgIm11bHRpbGluZSIg Zm9ybSBvZiBHRVQ6Ci0KLSAgZ2V0Ci0gIHJlbW90ZS1maWxlc3BlYwotICBsb2NhbC1uYW1lCi0K LSAgIFRoaXMgd2FzIGJlY2F1c2UgdGhlIHJlbW90ZSBmaWxlc3BlYyBtaWdodCBjb250YWluIHNw YWNlcywgYW5kIHNvIHRoZXJlCi0gICB3b3VsZCBiZSBubyBnb29kIHdheSBvZiB0ZWxsaW5nIHdo ZXJlIGl0IGVuZGVkIGFuZCB3aGVyZSB0aGUgbG9jYWwgbmFtZQotICAgYmVnYW4sIGUuZzoKLQot ICBnZXQgcHJvZmlsZSBleGVjIGEgZm9vCi0KLSAgIEJ1dCBub3cgc2luY2Ugd2UgY2FuIHVzZSB7 YnJhY2VzfSBmb3IgZ3JvdXBpbmcsIHdlIGRvbid0IG5lZWQgdGhlCi0gICBtdWx0aWxpbmUgR0VU IGZvcm0gYW55IG1vcmUsIGFuZCBpbiBmYWN0LCBzdXBwb3J0IGZvciBpdCBoYXMgYmVlbgotICAg cmVtb3ZlZC4gSWYgeW91IGdpdmUgYSBHRVQgY29tbWFuZCBieSBpdHNlbGYgb24gYSBsaW5lLCBp dCBmYWlscyBhbmQgYW4KLSAgIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZC4gVGhlIG5ldyBmb3Jt IGlzOgotCi0gICBHRVQgWyBzd2l0Y2hlcy4uLiBdIHJlbW90ZS1uYW1lIFsgbG9jYWwtbmFtZSBd Ci0gICAgICAgICAgQXNrIHRoZSBzZXJ2ZXIgdG8gc2VuZCB0aGUgZmlsZSB3aG9zZSBuYW1lIGlz IHJlbW90ZS1uYW1lLiBJZgotICAgICAgICAgIHRoZSBvcHRpb25hbCBsb2NhbC1uYW1lIGlzIGdp dmVuLCBzdG9yZSBpdCBsb2NhbGx5IHVuZGVyIHRoaXMKLSAgICAgICAgICBuYW1lLiBJZiB0aGUg cmVtb3RlLW5hbWUgb3IgbG9jYWwtbmFtZSBjb250YWlucyBzcGFjZXMsIHRoZXkKLSAgICAgICAg ICBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlczoKLQotICBnZXQge3Byb2ZpbGUgZXhlYyBhfSBm b28KLSAgZ2V0IG9vZmEudHh0IHt+L015IEZpbGVzL09vZmEgdGV4dH0KLQotICAgSWYgeW91IHdh bnQgdG8gZ2l2ZSBhIGxpc3Qgb2YgcmVtb3RlIGZpbGUgc3BlY2lmaWNhdGlvbnMsIHVzZSB0aGUg TUdFVAotICAgY29tbWFuZDoKLQotICAgTUdFVCBbIHN3aXRjaGVzLi4uIF0gcmVtb3RlLW5hbWUg WyByZW1vdGUtbmFtZSBbIHJlbW90ZS1uYW1lIC4uLiBdIF0KLSAgICAgICAgICBBc2sgdGhlIHNl cnZlciB0byBzZW5kIHRoZSBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgZ2l2ZW4uCi0KLSAgIE5vdyB5 b3UgY2FuIGFsc28gaW5jbHVkZSBtb2RpZmllciBzd2l0Y2hlcyBiZXR3ZWVuIEdFVCBvciBNR0VU IGFuZCB0aGUKLSAgIHJlbW90ZS1uYW1lOyBtb3N0IG9mIHRoZSBzYW1lIHN3aXRjaGVzIGFzIFNF TkQ6Ci0KLSAgIC9BUy1OQU1FOnRleHQKLSAgICAgICAgICBTcGVjaWZpZXMgInRleHQiIGFzIHRo ZSBuYW1lIHRvIHN0b3JlIHRoZSBpbmNvbWluZyBmaWxlIHVuZGVyLgotICAgICAgICAgIChUaGlz IHN3aXRjaCBpcyBub3QgYXZhaWxhYmxlIGZvciBNR0VULikgWW91IGNhbiBhbHNvIHN0aWxsCi0g ICAgICAgICAgc3BlY2lmeSB0aGUgYXMtbmFtZSBhcyB0aGUgc2Vjb25kIGZpbGVuYW1lIG9uIHRo ZSBHRVQgY29tbWFuZAotICAgICAgICAgIGxpbmUuIFRoZSBmb2xsb3dpbmcgdHdvIGNvbW1hbmRz IGFyZSBlcXVpdmFsZW50OgotCi0gIGdldCBvb2ZhLnR4dCBvb2ZhLm5ldwotICBnZXQgL2FzOm9v ZmEubmV3IG9vZmEudHh0Ci0KLSAgIC9CSU5BUlkKLSAgICAgICAgICBUZWxscyB0aGUgc2VydmVy IHRvIHNlbmQgdGhlIGdpdmVuIGZpbGUocykgaW4gYmluYXJ5IG1vZGUKLSAgICAgICAgICB3aXRo b3V0IGFmZmVjdGluZyB0aGUgZ2xvYmFsIHRyYW5zZmVyIG1vZGUuIEV4YW1wbGU6Ci0KLSAgc2V0 IGZpbGUgdHlwZSB0ZXh0ICAgICAgOyBTZXQgZ2xvYmFsIHRyYW5zZmVyIG1vZGUgdG8gdGV4dAot ICBnZXQgL2JpbmFyeSBvb2ZhLnppcCAgICA7IGdldCBhIGZpbGUgaW4gYmluYXJ5IG1vZGUKLSAg Z2V0IG9vZmEudHh0ICAgICAgICAgICAgOyBUaGlzIG9uZSBpcyB0cmFuc2ZlcnJlZCBpbiB0ZXh0 IG1vZGUKLQotICAgICAgICAgIE9yLCBwZXJoYXBzIG1vcmUgdG8gdGhlIHBvaW50OgotCi0gIGdl dCAvYmluYXJ5IGZvby50eHQgICAgIDsgd2hlcmUgIioudHh0IiBpcyBhIHRleHQtcGF0dGVybgot Ci0gICAgICAgICAgVGhpcyBoYXMgdGhlIGV4cGVjdGVkIGVmZmVjdCBvbmx5IGlmIHRoZSBzZXJ2 ZXIgaXMgQy1LZXJtaXQgNy4wCi0gICAgICAgICAgb3IgbGF0ZXIgb3IgSzk1IDEuMS4xOSBvciBs YXRlci4KLQotICAgL0NPTU1BTkQKLSAgICAgICAgICBHRVQgL0NPTU1BTkQgaXMgZXF1aXZhbGVu dCB0byBDR0VUIChbNDk4XVNlY3Rpb24gNC4yLjIpIC0tIGl0Ci0gICAgICAgICAgc2F5cyB0byBy ZWNlaXZlIHRoZSBmaWxlIGludG8gdGhlIHN0YW5kYXJkIGlucHV0IG9mIGEgY29tbWFuZCwKLSAg ICAgICAgICByYXRoZXIgdGhhbiBzYXZpbmcgaXQgb24gZGlzay4gVGhlIC9BUy1OQU1FIG9yIHRo ZSBzZWNvbmQKLSAgICAgICAgICAiZmlsZW5hbWUiIG9uIHRoZSBHRVQgY29tbWFuZCBsaW5lIGlz IGludGVycHJldGVkIGFzIHRoZSBuYW1lIG9mCi0gICAgICAgICAgYSBjb21tYW5kLiBFeGFtcGxl czoKLQotICBnZXQgL2NvbW1hbmQgc3VuZGF5LnR4dCB7Z3JlcCBTdW5kYXkgb29mYS50eHR9Ci0g IGdldCAvY29tbWFuZCAvYXMtbmFtZTp7Z3JlcCBTdW5kYXkgb29mYS50eHR9IHN1bmRheS50eHQK LSAgZ2V0IC9iaW4gL2NvbW1hbmQgeyFndW56aXAgLWMgfCB0YXIgeGYgLX0ge3RhciBjZiAtIC4g fCBnemlwIC1jfQotCi0gICAvREVMRVRFCi0gICAgICAgICAgQXNrcyB0aGUgS2VybWl0IHNlcnZl ciB0byBkZWxldGUgdGhlIGZpbGUgKG9yIGVhY2ggZmlsZSBpbiB0aGUKLSAgICAgICAgICBncm91 cCkgYWZ0ZXIgaXQgaGFzIGJlZW4gdHJhbnNmZXJyZWQgc3VjY2Vzc2Z1bGx5IChidXQgbm90IHRv Ci0gICAgICAgICAgZGVsZXRlIGl0IGlmIGl0IHdhcyBub3Qgc2VudCBzdWNjZXNzZnVsbHkpLiBH RVQgL0RFTEVURSBpcwotICAgICAgICAgIGVxdWl2YWxlbnQgdG8gUkVUUklFVkUuIEV4YW1wbGU6 Ci0KLSAgZ2V0IC9kZWxldGUgKi5sb2cKLQotICAgL0VYQ0VQVDpwYXR0ZXJuCi0gICAgICAgICAg U3BlY2lmaWVzIHRoYXQgYW55IGZpbGVzIHdob3NlIG5hbWVzIG1hdGNoIHRoZSBwYXR0ZXJuLCB3 aGljaAotICAgICAgICAgIGNhbiBiZSBhIHJlZ3VsYXIgZmlsZW5hbWUsIG9yIG1heSBjb250YWlu ICIqIiBhbmQvb3IgIj8iCi0gICAgICAgICAgbWV0YWNoYXJhY3RlcnMsIGFyZSB0byBiZSByZWZ1 c2VkIHVwb24gYXJyaXZhbC4gVG8gc3BlY2lmeQotICAgICAgICAgIG11bHRpcGxlIHBhdHRlcm5z ICh1cCB0byA4KSwgdXNlIG91dGVyIGJyYWNlcyBhcm91bmQgdGhlIGdyb3VwLAotICAgICAgICAg IGFuZCBpbm5lciBicmFjZXMgYXJvdW5kIGVhY2ggcGF0dGVybjoKLQotICAvRVhDRVBUOnt7cGF0 dGVybjF9e3BhdHRlcm4yfS4uLn0KLQotICAgICAgICAgIFNlZSB0aGUgZGVzY3JpcHRpb24gb2Yg U0VORCAvRVhDRVBUIGluIFs0OTldU2VjdGlvbiA0LjcuMSBmb3IKLSAgICAgICAgICBleGFtcGxl cywgZXRjLiBSZWZ1c2FsIGlzIGFjY29tcGxpc2hlZCB1c2luZyB0aGUgQXR0cmlidXRlCi0gICAg ICAgICAgUmVqZWN0aW9uIG1lY2hhbmlzbSAocmVhc29uICJuYW1lIiksIHdoaWNoIHdvcmtzIG9u bHkgd2hlbgotICAgICAgICAgIEF0dHJpYnV0ZSBwYWNrZXRzIGhhdmUgYmVlbiBzdWNjZXNzZnVs bHkgbmVnb3RpYXRlZC4KLQotICAgL0ZJTEVOQU1FUzp7Q09OVkVSVEVELExJVEVSQUx9Ci0gICAg ICAgICAgVXNlIHRoaXMgc3dpdGNoIHRvIG92ZXJyaWRlIHRoZSBjdXJyZW50IGdsb2JhbCBTRVQg RklMRSBOQU1FUwotICAgICAgICAgIHNldHRpbmcgZm9yIHRoaXMgdHJhbnNmZXIgb25seS4KLQot ICAgL0ZJTFRFUjpjb21tYW5kCi0gICAgICAgICAgVGhpcyBzcGVjaWZpZXMgYSBmaWx0ZXIgdG8g cGFzcyB0aGUgaW5jb21pbmcgZmlsZSB0aHJvdWdoIGJlZm9yZQotICAgICAgICAgIHdyaXRpbmcg dG8gZGlzay4gU2VlIHRoZSBbNTAwXXNlY3Rpb24gb24gZmlsZS10cmFuc2ZlciBwaXBlcyBhbmQK LSAgICAgICAgICBmaWx0ZXJzLiBUaGUgL0ZJTFRFUiBzd2l0Y2ggYXBwbGllcyBvbmx5IHRvIHRo ZSBmaWxlLXRyYW5zZmVyCi0gICAgICAgICAgY29tbWFuZCBpdCBpcyBnaXZlbiB3aXRoOyBpdCBk b2VzIG5vdCBhZmZlY3QgdGhlIGdsb2JhbCBSRUNFSVZFCi0gICAgICAgICAgRklMVEVSIHNldHRp bmcsIGlmIGFueS4KLQotICAgL0lNQUdFCi0gICAgICAgICAgVk1TOiBUcmFuc2ZlciBpbiBpbWFn ZSBtb2RlLiBOb24tVk1TOiBzYW1lIGFzIC9CSU5BUlkuCi0KLSAgIC9MQUJFTEVECi0gICAgICAg ICAgVk1TIGFuZCBPUy8yIG9ubHk6IFNwZWNpZmllcyBsYWJlbGVkIHRyYW5zZmVyIG1vZGUuCi0K LSAgIC9NT1ZFLVRPOmRpcmVjdG9yeQotICAgICAgICAgIFRoaXMgdGVsbHMgQy1LZXJtaXQgdG8g bW92ZSBlYWNoIGZpbGUgdGhhdCBpcyBzdWNjZXNzZnVsbHkKLSAgICAgICAgICByZWNlaXZlZCB0 byB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiBGaWxlcyB0aGF0IGFyZSBub3Qgc3VjY2Vzc2Z1bGx5Ci0g ICAgICAgICAgcmVjZWl2ZWQgYXJlIG5vdCBtb3ZlZC4gQnkgZGVmYXVsdCwgZmlsZXMgYXJlIG5v dCBtb3ZlZC4KLQotICAgL1BBVEhOQU1FUzp7T0ZGLEFCU09MVVRFLFJFTEFUSVZFLEFVVE99Ci0g ICAgICAgICAgVXNlIHRoaXMgc3dpdGNoIHRvIG92ZXJyaWRlIHRoZSBjdXJyZW50IGdsb2JhbCBT RVQgUkVDRUlWRQotICAgICAgICAgIFBBVEhOQU1FUyBzZXR0aW5nIGZvciB0aGlzIHRyYW5zZmVy IG9ubHkuIC9QQVRITkFNRVM6QUJTT0xVVEUgb3IKLSAgICAgICAgICBSRUxBVElWRSBhbHNvIHNl dHMgL0ZJTEVOQU1FUzpMSVRFUkFMIChhbHNvIGZvciB0aGlzIHRyYW5zZmVyCi0gICAgICAgICAg b25seSkgc2luY2UgaW5jb21pbmcgcGF0aG5hbWVzIHdvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIHBh dGhuYW1lcwotICAgICAgICAgIG90aGVyd2lzZS4gU2VlIFs1MDFdU2VjdGlvbiA0LjEwLgotCi0g ICAvUVVJRVQKLSAgICAgICAgICBXaGVuIHNlbmRpbmcgaW4gbG9jYWwgbW9kZSwgdGhpcyBzdXBw cmVzc2VzIHRoZSBmaWxlLXRyYW5zZmVyCi0gICAgICAgICAgZGlzcGxheS4KLQotICAgL1JFQ09W RVIKLSAgICAgICAgICBVc2VkIHRvIHJlY292ZXIgZnJvbSBhIHByZXZpb3VzbHkgaW50ZXJydXB0 ZWQgdHJhbnNmZXI7IEdFVAotICAgICAgICAgIC9SRUNPVkVSIGlzIGVxdWl2YWxlbnQgdG8gUkVH RVQuIFJlY292ZXJ5IG9ubHkgd29ya3MgaW4gYmluYXJ5Ci0gICAgICAgICAgbW9kZTsgU0VORCAv UkVDT1ZFUiBhbmQgUkVTRU5EIGluY2x1ZGUgYW4gaW1wbGllZCAvQklOQVJZCi0gICAgICAgICAg c3dpdGNoLiBFdmVuIHRoZW4sIHJlY292ZXJ5IHdpbGwgc3VjY2Vzc2Z1bCBvbmx5IGlmIChhKSB0 aGUKLSAgICAgICAgICBvcmlnaW5hbCAoaW50ZXJydXB0ZWQpIHRyYW5zZmVyIHdhcyBhbHNvIGlu IGJpbmFyeSBtb2RlLCBvciAoYikKLSAgICAgICAgICBpZiBpdCB3YXMgaW4gdGV4dCBtb2RlLCB0 aGUgdHdvIEtlcm1pdCBwcm9ncmFtcyBydW4gb24gcGxhdGZvcm1zCi0gICAgICAgICAgd2hlcmUg dGV4dC1tb2RlIHRyYW5zZmVycyBhcmUgbm90IGxlbmd0aC1jaGFuZ2luZy4KLQotICAgL1JFQ1VS U0lWRQotICAgICAgICAgIFRlbGxzIHRoZSBzZXJ2ZXIgdGhhdCB0aGUgR0VUIGZpbGUgc3BlY2lm aWNhdGlvbiBhcHBsaWVzCi0gICAgICAgICAgcmVjdXJzaXZlbHkuIFRoaXMgc3dpdGNoIGFsc28g YXV0b21hdGljYWxseSBzZXRzCi0gICAgICAgICAgL1BBVEhOQU1FUzpSRUxBVElWRSBpbiBib3Ro IHRoZSBzZXJ2ZXIgQU5EIHRoZSBjbGllbnQuIFdoZW4gdXNlZAotICAgICAgICAgIGluIGNvbmp1 bmN0aW9uIHdpdGggL0RFTEVURSwgdGhpcyAibW92ZXMiIGEgZGlyZWN0b3J5IHRyZWUgZnJvbQot ICAgICAgICAgIHRoZSBzZXJ2ZXIncyBjb21wdXRlciB0byB0aGUgY2xpZW50J3MgY29tcHV0ZXIg KGV4Y2VwdCB0aGF0IG9ubHkKLSAgICAgICAgICByZWd1bGFyIGZpbGVzIGFyZSBkZWxldGVkIGZy b20gdGhlIHNlcnZlcidzIGNvbXB1dGVyLCBub3QKLSAgICAgICAgICBkaXJlY3RvcmllczsgdGh1 cyB0aGUgb3JpZ2luYWwgZGlyZWN0b3JpZXMgd2lsbCBiZSBsZWZ0LCBidXQKLSAgICAgICAgICB3 aWxsIGNvbnRhaW4gbm8gZmlsZXMpLiBOb3RlIHRoYXQgYWxsIHNlcnZlcnMgdGhhdCBzdXBwb3J0 Ci0gICAgICAgICAgL1JFQ1VSU0lWRSBkbyBub3QgbmVjZXNzYXJpbHkgZG8gc28gaW4gY29tYmlu YXRpb24gd2l0aCBvdGhlcgotICAgICAgICAgIHN3aXRjaGVzLCBzdWNoIGFzIC9SRUNPVkVSLiAo U2VydmVycyB0aGF0IGRvIGluY2x1ZGUgQy1LZXJtaXQKLSAgICAgICAgICA3LjAgYW5kIGxhdGVy LCBLOTUgMS4xLjE5IGFuZCBsYXRlci4pCi0KLSAgIC9SRU5BTUUtVE86c3RyaW5nCi0gICAgICAg ICAgVGhpcyB0ZWxscyBDLUtlcm1pdCB0byByZW5hbWUgZWFjaCBmaWxlIHRoYXQgaXMgc3VjY2Vz c2Z1bGx5Ci0gICAgICAgICAgcmVjZWl2ZWQgdG8gdGhlIGdpdmVuIHN0cmluZy4gRmlsZXMgdGhh dCBhcmUgbm90IHN1Y2Nlc3NmdWxseQotICAgICAgICAgIHJlY2VpdmVkIGFyZSBub3QgcmVuYW1l ZC4gQnkgZGVmYXVsdCwgZmlsZXMgYXJlIG5vdCByZW5hbWVkLiBUaGUKLSAgICAgICAgICBzdHJp bmcgY2FuIGJlIGEgbGl0ZXJhbCBzdHJpbmcsIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHdoZW4gb25s eQotICAgICAgICAgIG9uZSBmaWxlIGlzIGJlaW5nIHJlY2VpdmVkLCBvciBpdCBjYW4gY29udGFp biBvbmUgb3IgbW9yZQotICAgICAgICAgIHZhcmlhYmxlcyB0aGF0IGFyZSB0byBiZSBldmFsdWF0 ZWQgYXQgdGhlIHRpbWUgZWFjaCBmaWxlIGlzCi0gICAgICAgICAgcmVjZWl2ZWQsIHN1Y2ggYXMg XHYoZmlsZW5hbWUpLCBcdihmaWxlbnVtYmVyKSwgXHYobnRpbWUpLAotICAgICAgICAgIFx2KHBp ZCksIFx2KHVzZXIpLCBldGMuIFdBUk5JTkc6IGlmIHlvdSBnaXZlIGEgbGl0ZXJhbCBzdHJpbmcK LSAgICAgICAgICBhbmQgbW9yZSB0aGFuIG9uZSBmaWxlIGFycml2ZXMsIGVhY2ggaW5jb21pbmcg ZmlsZSB3aWxsIGJlIGdpdmVuCi0gICAgICAgICAgdGhlIHNhbWUgbmFtZSAoYnV0IFNFVCBGSUxF IENPTExJU0lPTiBCQUNLVVAgb3IgUkVOQU1FIGNhbiBiZQotICAgICAgICAgIHVzZWQgdG8ga2Vl cCB0aGUgaW5jb21pbmcgZmlsZXMgZnJvbSBvdmVyd3JpdGluZyBlYWNoIG90aGVyKS4KLQotICAg L1RFWFQKLSAgICAgICAgICBUZWxscyB0aGUgc2VydmVyIHRvIHBlcmZvcm0gdGhpcyB0cmFuc2Zl ciBpbiB0ZXh0IG1vZGUgd2l0aG91dAotICAgICAgICAgIGFmZmVjdGluZyBpdHMgZ2xvYmFsIHRy YW5zZmVyIG1vZGUuIFNlZSAvQklOQVJZIGZvciBhZGRpdGlvbmFsCi0gICAgICAgICAgaW5mby4K LQotICAgVGhlIC9NQUlMIGFuZCAvUFJJTlQgb3B0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSAoYXMg dGhleSBhcmUgZm9yIFNFTkQpLAotICAgYnV0IHlvdSBjYW4gdXNlIC9DT01NQU5EIHRvIGFjaGll dmUgdGhlIHNhbWUgZWZmZWN0LCBhcyBpbiB0aGVzZSBVTklYCi0gICBleGFtcGxlczoKLQotICBn ZXQgL2NvbW1hbmQgb29mYS50eHQge21haWwga2VybWl0QGNvbHVtYmlhLmVkdX0KLSAgZ2V0IC9j b21tYW5kIG9vZmEudHh0IGxwcgotCi0gICBJbiBPUy8yIG9yIFdpbmRvd3MsIHlvdSBjYW4gR0VU IGFuZCBwcmludCBsaWtlIHRoaXM6Ci0KLSAgZ2V0IG9vZmEudHh0IHBybgotCi0gICBUaGUgQ0dF VCwgUkVHRVQsIFJFVFJJRVZFIGNvbW1hbmRzIGFsc28gYWNjZXB0IHRoZSBzYW1lIHN3aXRjaGVz IGFzCi0gICBHRVQuIENHRVQgYXV0b21hdGljYWxseSBzZXRzIC9DT01NQU5EOyBSRUdFVCBhdXRv bWF0aWNhbGx5IHNldHMKLSAgIC9SRUNPVkVSIGFuZCAvQklOQVJZLCBhbmQgUkVUUklFVkUgYXV0 b21hdGljYWxseSBzZXRzIC9ERUxFVEUuCi0KLTQuNy4zLiBSRUNFSVZFIENvbW1hbmQgU3dpdGNo ZXMKLQotICAgV2l0aG91dCBzd2l0Y2hlcywgdGhlIFJFQ0VJVkUgY29tbWFuZCBzdGlsbCB3b3Jr cyBhcyBiZWZvcmU6Ci0KLSAgcmVjZWl2ZSAgICAgICAgICAgIDsgUmVjZWl2ZXMgZmlsZXMgdW5k ZXIgdGhlaXIgb3duIG5hbWVzCi0gIHJlY2VpdmUgL3RtcCAgICAgICA7IERpdHRvLCBidXQgaW50 byB0aGUgL3RtcCBkaXJlY3RvcnkKLSAgciAgICAgICAgICAgICAgICAgIDsgU2FtZSBhcyAicmVj ZWl2ZSIKLSAgcmVjZWl2ZSBmb28udHh0ICAgIDsgUmVjZWl2ZXMgYSBmaWxlIGFuZCByZW5hbWVz IHRvIGZvby50eHQKLQotICAgTm93IHlvdSBjYW4gYWxzbyBpbmNsdWRlIG1vZGlmaWVyIHN3aXRj aGVzIG1heSBiZSBpbmNsdWRlZCBiZXR3ZWVuCi0gICAicmVjZWl2ZSIgYW5kIHRoZSBhcy1uYW1l OyBtb3N0IG9mIHRoZSBzYW1lIHN3aXRjaGVzIGFzIEdFVDoKLQotICAgL0FTLU5BTUU6dGV4dAot ICAgICAgICAgIFNwZWNpZmllcyAidGV4dCIgYXMgdGhlIG5hbWUgdG8gc3RvcmUgdGhlIGluY29t aW5nIGZpbGUgdW5kZXIuCi0gICAgICAgICAgWW91IGNhbiBhbHNvIHN0aWxsIHNwZWNpZnkgdGhl IGFzLW5hbWUgYXMgYSBmaWxlbmFtZSBvbiB0aGUKLSAgICAgICAgICBjb21tYW5kIGxpbmUuIFRo ZSBmb2xsb3dpbmcgdHdvIGNvbW1hbmRzIGFyZSBlcXVpdmFsZW50OgotCi0gIHIgb29mYS5uZXcK LSAgciAvYXM6b29mYS5uZXcKLQotICAgL0JJTkFSWQotICAgICAgICAgIFBlcmZvcm1zIHRoaXMg dHJhbnNmZXIgaW4gYmluYXJ5IG1vZGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlCi0gICAgICAgICAg Z2xvYmFsIHRyYW5zZmVyIG1vZGUuIE5PVEU6IFRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgdGhlIGlu Y29taW5nCi0gICAgICAgICAgZmlsZXR5cGUgKGFzIGl0IGRvZXMgd2l0aCBHRVQpLCBzbyB0aGlz IHN3aXRjaCBpcyB1c2VmdWwgb25seSBpZgotICAgICAgICAgIEFUVFJJQlVURSBUWVBFIGlzIE9G Riwgb3IgaWYgdGhlIG90aGVyIEtlcm1pdCBkb2VzIG5vdCBzZW5kIGEKLSAgICAgICAgICBUWVBF ICh0ZXh0IG9yIGJpbmFyeSkgYXR0cmlidXRlLiBJbiBhbnkgY2FzZSwgaXQgaGFzIG5vIGFmZmVj dAotICAgICAgICAgIHdoYXRzb2V2ZXIgb24gdGhlIGZpbGUgc2VuZGVyLgotCi0gICAvQ09NTUFO RAotICAgICAgICAgIFJFQ0VJVkUgL0NPTU1BTkQgaXMgZXF1aXZhbGVudCB0byBDUkVDRUlWRSAo WzUwMl1TZWN0aW9uIDQuMi4yKQotICAgICAgICAgIC0tIGl0IHNheXMgdG8gcmVjZWl2ZSB0aGUg ZmlsZSBpbnRvIHRoZSBzdGFuZGFyZCBpbnB1dCBvZiBhCi0gICAgICAgICAgY29tbWFuZCwgcmF0 aGVyIHRoYW4gc2F2aW5nIGl0IG9uIGRpc2suIFRoZSAvQVMtTkFNRSBvciB0aGUKLSAgICAgICAg ICAiZmlsZW5hbWUiIG9uIHRoZSBSRUNFSVZFIGNvbW1hbmQgbGluZSBpcyBpbnRlcnByZXRlZCBh cyB0aGUKLSAgICAgICAgICBuYW1lIG9mIGEgY29tbWFuZC4KLQotICByIC9jb21tYW5kIHtncmVw IFN1bmRheSBvb2ZhLnR4dH0KLSAgciAvY29tbWFuZCAvYXMtbmFtZTp7Z3JlcCBTdW5kYXkgb29m YS50eHR9Ci0gIHIgL2JpbiAvY29tbWFuZCB7dGFyIGNmIC0gLiB8IGd6aXAgLWN9Ci0KLSAgIC9F WENFUFQ6cGF0dGVybgotICAgICAgICAgIFNwZWNpZmllcyB0aGF0IGFueSBmaWxlcyB3aG9zZSBu YW1lcyBtYXRjaCB0aGUgcGF0dGVybiwgd2hpY2gKLSAgICAgICAgICBjYW4gYmUgYSByZWd1bGFy IGZpbGVuYW1lLCBvciBtYXkgY29udGFpbiAiKiIgYW5kL29yICI/IgotICAgICAgICAgIG1ldGFj aGFyYWN0ZXJzLCBhcmUgdG8gYmUgcmVmdXNlZCB1cG9uIGFycml2YWwuIFRvIHNwZWNpZnkKLSAg ICAgICAgICBtdWx0aXBsZSBwYXR0ZXJucyAodXAgdG8gOCksIHVzZSBvdXRlciBicmFjZXMgYXJv dW5kIHRoZSBncm91cCwKLSAgICAgICAgICBhbmQgaW5uZXIgYnJhY2VzIGFyb3VuZCBlYWNoIHBh dHRlcm46Ci0KLSAgL0VYQ0VQVDp7e3BhdHRlcm4xfXtwYXR0ZXJuMn0uLi59Ci0KLSAgICAgICAg ICBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIFNFTkQgL0VYQ0VQVCBpbiBbNTAzXVNlY3Rpb24gNC43 LjEgZm9yCi0gICAgICAgICAgZXhhbXBsZXMsIGV0Yy4gUmVmdXNhbCBpcyBhY2NvbXBsaXNoZWQg dXNpbmcgdGhlIEF0dHJpYnV0ZQotICAgICAgICAgIFJlamVjdGlvbiBtZWNoYW5pc20gKHJlYXNv biAibmFtZSIpLCB3aGljaCB3b3JrcyBvbmx5IHdoZW4KLSAgICAgICAgICBBdHRyaWJ1dGUgcGFj a2V0cyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IG5lZ290aWF0ZWQuCi0KLSAgIC9GSUxFTkFNRVM6 e0NPTlZFUlRFRCxMSVRFUkFMfQotICAgICAgICAgIFVzZSB0aGlzIHN3aXRjaCB0byBvdmVycmlk ZSB0aGUgY3VycmVudCBnbG9iYWwgU0VUIEZJTEUgTkFNRVMKLSAgICAgICAgICBzZXR0aW5nIGZv ciB0aGlzIHRyYW5zZmVyIG9ubHkuCi0KLSAgIC9GSUxURVI6Y29tbWFuZAotICAgICAgICAgIFRo aXMgc3BlY2lmaWVzIGEgZmlsdGVyIHRvIHBhc3MgdGhlIGluY29taW5nIGZpbGUgdGhyb3VnaCBi ZWZvcmUKLSAgICAgICAgICB3cml0aW5nIHRvIGRpc2suIFNlZSB0aGUgWzUwNF1zZWN0aW9uIG9u IGZpbGUtdHJhbnNmZXIgcGlwZXMgYW5kCi0gICAgICAgICAgZmlsdGVycy4gVGhlIC9GSUxURVIg c3dpdGNoIGFwcGxpZXMgb25seSB0byB0aGUgZmlsZS10cmFuc2ZlcgotICAgICAgICAgIGNvbW1h bmQgaXQgaXMgZ2l2ZW4gd2l0aDsgaXQgZG9lcyBub3QgYWZmZWN0IHRoZSBnbG9iYWwgUkVDRUlW RQotICAgICAgICAgIEZJTFRFUiBzZXR0aW5nLCBpZiBhbnkuCi0KLSAgIC9JTUFHRQotICAgICAg ICAgIFZNUzogVHJhbnNmZXIgaW4gaW1hZ2UgbW9kZS4gTm9uLVZNUzogc2FtZSBhcyAvQklOQVJZ LiBTZWUKLSAgICAgICAgICBjb21tZW50cyB1bmRlciBSRUNFSVZFIC9CSU5BUlkuCi0KLSAgIC9M QUJFTEVECi0gICAgICAgICAgVk1TIGFuZCBPUy8yIG9ubHk6IFNwZWNpZmllcyBsYWJlbGVkIHRy YW5zZmVyIG1vZGUuIFNlZSBjb21tZW50cwotICAgICAgICAgIHVuZGVyIFJFQ0VJVkUgL0JJTkFS WS4KLQotICAgL01PVkUtVE86ZGlyZWN0b3J5Ci0gICAgICAgICAgVGhpcyB0ZWxscyBDLUtlcm1p dCB0byBtb3ZlIGVhY2ggZmlsZSB0aGF0IGlzIHN1Y2Nlc3NmdWxseQotICAgICAgICAgIHJlY2Vp dmVkIHRvIHRoZSBnaXZlbiBkaXJlY3RvcnkuIEZpbGVzIHRoYXQgYXJlIG5vdCBzdWNjZXNzZnVs bHkKLSAgICAgICAgICByZWNlaXZlZCBhcmUgbm90IG1vdmVkLiBCeSBkZWZhdWx0LCBmaWxlcyBh cmUgbm90IG1vdmVkLgotCi0gICAvUEFUSE5BTUVTOntBQlNPTFVURSxSRUxBVElWRSxPRkYsQVVU T30KLSAgICAgICAgICBVc2UgdGhpcyBzd2l0Y2ggdG8gb3ZlcnJpZGUgdGhlIGN1cnJlbnQgZ2xv YmFsIFNFVCBSRUNFSVZFCi0gICAgICAgICAgUEFUSE5BTUVTIHNldHRpbmcgZm9yIHRoaXMgdHJh bnNmZXIgb25seS4gU2VlIFs1MDVdU2VjdGlvbiA0LjEwLgotCi0gICAvUkVDVVJTSVZFCi0gICAg ICAgICAgV2hlbiB1c2VkIHdpdGggdGhlIFJFQ0VJVkUgY29tbWFuZCwgL1JFQ1VSU0lWRSBpcyBz aW1wbHkgYQotICAgICAgICAgIHN5bm9ueW0gZm9yIC9QQVRITkFNRVM6UkVMQVRJVkUuCi0KLSAg IC9SRU5BTUUtVE86c3RyaW5nCi0gICAgICAgICAgVGhpcyB0ZWxscyBDLUtlcm1pdCB0byByZW5h bWUgZWFjaCBmaWxlIHRoYXQgaXMgc3VjY2Vzc2Z1bGx5Ci0gICAgICAgICAgcmVjZWl2ZWQgdG8g dGhlIGdpdmVuIHN0cmluZy4gRmlsZXMgdGhhdCBhcmUgbm90IHN1Y2Nlc3NmdWxseQotICAgICAg ICAgIHJlY2VpdmVkIGFyZSBub3QgcmVuYW1lZC4gQnkgZGVmYXVsdCwgZmlsZXMgYXJlIG5vdCBy ZW5hbWVkLiBUaGUKLSAgICAgICAgICBzdHJpbmcgY2FuIGJlIGEgbGl0ZXJhbCBzdHJpbmcsIHdo aWNoIGlzIGFwcHJvcHJpYXRlIHdoZW4gb25seQotICAgICAgICAgIG9uZSBmaWxlIGlzIGJlaW5n IHJlY2VpdmVkLCBvciBpdCBjYW4gY29udGFpbiBvbmUgb3IgbW9yZQotICAgICAgICAgIHZhcmlh YmxlcyB0aGF0IGFyZSB0byBiZSBldmFsdWF0ZWQgYXQgdGhlIHRpbWUgZWFjaCBmaWxlIGlzCi0g ICAgICAgICAgcmVjZWl2ZWQsIHN1Y2ggYXMgXHYoZmlsZW5hbWUpLCBcdihmaWxlbnVtYmVyKSwg XHYobnRpbWUpLAotICAgICAgICAgIFx2KHBpZCksIFx2KHVzZXIpLCBldGMuIFdBUk5JTkc6IGlm IHlvdSBnaXZlIGEgbGl0ZXJhbCBzdHJpbmcKLSAgICAgICAgICBhbmQgbW9yZSB0aGFuIG9uZSBm aWxlIGFycml2ZXMsIGVhY2ggaW5jb21pbmcgZmlsZSB3aWxsIGJlIGdpdmVuCi0gICAgICAgICAg dGhlIHNhbWUgbmFtZSAoYnV0IFNFVCBGSUxFIENPTExJU0lPTiBCQUNLVVAgb3IgUkVOQU1FIGNh biBiZQotICAgICAgICAgIHVzZWQgdG8ga2VlcCB0aGUgaW5jb21pbmcgZmlsZXMgZnJvbSBvdmVy d3JpdGluZyBlYWNoIG90aGVyKS4KLQotICAgL1FVSUVUCi0gICAgICAgICAgV2hlbiByZWNlaXZp bmcgaW4gbG9jYWwgbW9kZSwgdGhpcyBzdXBwcmVzc2VzIHRoZSBmaWxlLXRyYW5zZmVyCi0gICAg ICAgICAgZGlzcGxheS4KLQotICAgL1RFWFQKLSAgICAgICAgICBSZWNlaXZlcyBpbiB0ZXh0IG1v ZGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGdsb2JhbCB0cmFuc2ZlcgotICAgICAgICAgIG1vZGUu IFNlZSBjb21tZW50cyB1bmRlciBSRUNFSVZFIC9CSU5BUlkuCi0KLSAgIFRoZSAvTUFJTCBhbmQg L1BSSU5UIG9wdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUsIGJ1dCB5b3UgY2FuIHVzZQotICAgL0NP TU1BTkQgdG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QsIGFzIGluIHRoZXNlIFVOSVggZXhhbXBs ZXM6Ci0KLSAgciAvY29tbWFuZCB7bWFpbCBrZXJtaXRAY29sdW1iaWEuZWR1fQotICByIC9jb21t YW5kIGxwcgotCi0gICBJbiBPUy8yIG9yIFdpbmRvd3MsIHlvdSBjYW4gUkVDRUlWRSBhbmQgcHJp bnQgbGlrZSB0aGlzOgotCi0gIHJlY2VpdmUgcHJuCi0KLSAgIFRoZSBDUkVDRUlWRSBjb21tYW5k IG5vdyBhbHNvIGFjY2VwdHMgdGhlIHNhbWUgc3dpdGNoZXMuCi0KLTQuOC4gTWlub3IgS2VybWl0 IFByb3RvY29sIEltcHJvdmVtZW50cwotCi00LjguMS4gTXVsdGlwbGUgQXR0cmlidXRlIFBhY2tl dHMKLQotICAgQy1LZXJtaXQgNy4wIG5vdyBzZW5kcyBtb3JlIHRoYW4gb25lIEF0dHJpYnV0ZSBw YWNrZXQgaWYgYSBmaWxlJ3MKLSAgIGF0dHJpYnV0ZXMgZG8gbm90IGZpdCBpbnRvIGEgc2luZ2xl IHBhY2tldCBvZiB0aGUgbmVnb3RpYXRlZCBsZW5ndGguIElmCi0gICBhIHBhcnRpY3VsYXIgYXR0 cmlidXRlIChzdWNoIGFzIGZpbGUgY3JlYXRpb24gZGF0ZS10aW1lKSBkb2VzIG5vdCBmaXQKLSAg IHdpdGhpbiB0aGUgbmVnb3RpYXRlZCBsZW5ndGggKHdoaWNoIHdpbGwgb25seSBoYXBwZW4gd2hl biB0aGUKLSAgIG5lZ290aWF0ZWQgbGVuZ3RoIGlzIGFyb3VuZCAyMCBvciBsZXNzKSwgdGhhdCBh dHRyaWJ1dGUgaXMgbm90IHNlbnQgYXQKLSAgIGFsbC4KLQotNC44LjIuIFZlcnkgU2hvcnQgUGFj a2V0cwotCi0gICBUaGVyZSBhcmUgY2VydGFpbiBzaXR1YXRpb25zIHdoZXJlIGV4dHJlbWVseSBz aG9ydCBwYWNrZXRzIG11c3QgYmUKLSAgIHVzZWQ7IDIwIG9yIDMwIGJ5dGVzIGF0IG1vc3QuIFRo aXMgY2FuIGhhcHBlbiB3aGVuIG9uZSBvciBtb3JlIGRldmljZXMKLSAgIGFsb25nIHRoZSBjb21t dW5pY2F0aW9uIHBhdGggaGF2ZSB2ZXJ5IHNtYWxsIGJ1ZmZlcnMgYW5kIGxhY2sgYW4KLSAgIGVm ZmVjdGl2ZSBtZWFucyBvZiBmbG93IGNvbnRyb2wuIEV4YW1wbGVzIGFyZSBzb21ldGltZXMgY2l0 ZWQgaW52b2x2aW5nCi0gICByYWRpbyBtb2RlbXMuCi0KLSAgIFdoZW4gdGhlIG1heGltdW0gcGFj a2V0IGxlbmd0aCBpcyBzaG9ydGVyIHRoYW4gY2VydGFpbiBwYWNrZXRzIHRoYXQKLSAgIHdvdWxk IGJlIHNlbnQsIHRob3NlIHBhY2tldHMgYXJlIGVpdGhlciB0cnVuY2F0ZWQgb3IgZWxzZSBicm9r ZW4gdXAKLSAgIGludG8gbXVsdGlwbGUgcGFja2V0cy4gU3BlY2lmaWNhbGx5OgotCi0gICAgMS4g UGFyYW1ldGVyIG5lZ290aWF0aW9uIHBhY2tldHMgKEksIFMsIGFuZCB0aGVpciBBQ0tzKSBhcmUg dHJ1bmNhdGVkCi0gICAgICAgdG8gdGhlIG5lZ290aWF0ZWQgbGVuZ3RoLiBBbnkgcGFyYW1ldGVy cyB0aGF0IGRvIG5vdCBmaXQgYXJlIHJlc2V0Ci0gICAgICAgdG8gdGhlaXIgZGVmYXVsdCB2YWx1 ZXMuIFRoZXJlIGlzIG5vIHByb3Zpc2lvbiBpbiB0aGUgS2VybWl0Ci0gICAgICAgcHJvdG9jb2wg Zm9yIGZyYWdtZW50YXRpb24gYW5kIHJlYXNzZW1ibHkgb2YgcGFyYW1ldGVyIHN0cmluZ3MuCi0g ICAgMi4gRmlsZSBoZWFkZXIgcGFja2V0cyAoY29udGFpbmluZyB0aGUgZmlsZW5hbWUpIGFyZSBz aW1wbHkgdHJ1bmNhdGVkLgotICAgICAgIFRoZXJlIGlzIG5vIHByb3Zpc2lvbiBpbiB0aGUgS2Vy bWl0IHByb3RvY29sIGZvciBmcmFnbWVudGF0aW9uIGFuZAotICAgICAgIHJlYXNzZW1ibHkgb2Yg ZmlsZW5hbWVzLgotICAgIDMuIEF0dHJpYnV0ZSBwYWNrZXRzIGFyZSBmcmFnbWVudGVkIGFuZCBy ZWFzc2VtYmxlZCBhcyBkZXNjcmliZWQgaW4KLSAgICAgICA0LjguMSB3aXRob3V0IGxvc3Mgb2Yg ZGF0YSwgZXhjZXB0IGluIGNhc2UgYSBmaWVsZCB3aWxsIG5vdCBmaXQgYXQKLSAgICAgICBhbGwg aW4gdGhlIG5lZ290aWF0ZWQgbGVuZ3RoICh0aGUgbG9uZ2VzdCBhdHRyaWJ1dGUgaXMgdXN1YWxs eSB0aGUKLSAgICAgICBkYXRlIGFuZCB0aW1lIG9mIGZpbGUgY3JlYXRpb24vbW9kaWZpY2F0aW9u KSBiZWNhdXNlIG9mIHRoZSBydWxlCi0gICAgICAgdGhhdCBhdHRyaWJ1dGVzIG1heSBub3QgYmUg YnJva2VuIGFjcm9zcyBwYWNrZXRzLgotICAgIDQuIERhdGEgcGFja2V0cyBhbmQgb3RoZXIgcGFj a2V0cyBhcmUgdW5hZmZlY3RlZCAtLSB0aGV5IGNhbiBiZSBhcwotICAgICAgIHNob3J0IGFzIHRo ZXkgbmVlZCB0byBiZSwgd2l0aGluIHJlYXNvbi4KLQotNC45LiBXaWxkY2FyZCAvIEZpbGUgR3Jv dXAgRXhwYW5zaW9uCi0KLSAgICJXaWxkY2FyZCIgcmVmZXJzIHRvIHRoZSBub3RhdGlvbiB1c2Vk IGluIGZpbGVuYW1lcyB0byBzcGVjaWZ5IGEgZ3JvdXAKLSAgIG9mIGZpbGVzIGJ5IHBhdHRlcm4g bWF0Y2hpbmcuCi0KLTQuOS4xLiBJbiBVTklYIEMtS2VybWl0Ci0KLSAgIFByaW9yIHRvIEMtS2Vy bWl0IDcuMCwgQy1LZXJtaXQgd2FzIGNhcGFibGUgb2YgZXhwYW5kaW5nIHdpbGRjYXJkCi0gICBz dHJpbmdzIGNvbnRhaW5pbmcgb25seSB0aGUgIm1ldGFjaGFyYWN0ZXJzIiAnKicgYW5kICc/JzoK LQotICAgKgotICAgICAgICAgIE1hdGNoZXMgYW55IHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSBj aGFyYWN0ZXJzLiBGb3IgZXhhbXBsZToKLSAgICAgICAgICAiY2sqLmMiIG1hdGNoZXMgYWxsIGZp bGVzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggImNrIiBhbmQgZW5kCi0gICAgICAgICAgd2l0aCAi LmMiLCBpbmNsdWRpbmcgImNrLmMiLgotCi0gICA/Ci0gICAgICAgICAgTWF0Y2hlcyBhbnkgc2lu Z2xlIGNoYXJhY3Rlci4gRm9yIGV4YW1wbGUsICJjaz8uYyIgbWF0Y2hlcyBhbGwKLSAgICAgICAg ICBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgZXhhY3RseSA1IGNoYXJhY3RlcnMgbG9uZyBhbmQgc3Rh cnQgd2l0aAotICAgICAgICAgICJjayIgYW5kIGVuZCB3aXRoICIuYyIuIFdoZW4gdHlwaW5nIGNv bW1hbmRzIGF0IHRoZSBwcm9tcHQsIHlvdQotICAgICAgICAgIG11c3QgcHJlY2VkZSBhbnkgcXVl c3Rpb24gbWFyayB0byBiZSB1c2VkIGZvciBtYXRjaGluZyBieSBhCi0gICAgICAgICAgYmFja3Ns YXNoIChcKSB0byBvdmVycmlkZSB0aGUgbm9ybWFsIGZ1bmN0aW9uIG9mIHF1ZXN0aW9uIG1hcmss Ci0gICAgICAgICAgd2hpY2ggaXMgcHJvdmlkaW5nIG1lbnVzIGFuZCBmaWxlIGxpc3RzLgotCi0g ICBDLUtlcm1pdCA3LjAgYWRkcyB0aGUgYWRkaXRpb25hbCBmZWF0dXJlcyB0aGF0IHVzZXJzIG9m IGtzaCwgY3NoLCBhbmQKLSAgIGJhc2ggYXJlIGFjY3VzdG9tZWQgdG86Ci0KLSAgIFthYmNdCi0g ICAgICAgICAgU3F1YXJlIGJyYWNrZXRzIGVuY2xvc2luZyBhIGxpc3Qgb2YgY2hhcmFjdGVycyBt YXRjaGVzIGFueQotICAgICAgICAgIHNpbmdsZSBjaGFyYWN0ZXIgaW4gdGhlIGxpc3QuIEV4YW1w bGU6IGNrdXVzci5bY2hdIG1hdGNoZXMKLSAgICAgICAgICBja3V1c3IuYyBhbmQgY2t1dXNyLmgu Ci0KLSAgIFthLXpdCi0gICAgICAgICAgU3F1YXJlIGJyYWNrZXRzIGVuY2xvc2luZyBhIHJhbmdl IG9mIGNoYXJhY3RlcnM7IHRoZSBoeXBoZW4KLSAgICAgICAgICBzZXBhcmF0ZXMgdGhlIGxvdyBh bmQgaGlnaCBlbGVtZW50cyBvZiB0aGUgcmFuZ2UuIEZvciBleGFtcGxlLAotICAgICAgICAgIFth LXpdIG1hdGNoZXMgYW55IGNoYXJhY3RlciBmcm9tIGEgdG8gei4KLQotICAgW2FjZG0tel0KLSAg ICAgICAgICBMaXN0cyBhbmQgcmFuZ2VzIG1heSBiZSBjb21iaW5lZC4gVGhpcyBleGFtcGxlIG1h dGNoZXMgYSwgYywgZCwKLSAgICAgICAgICBvciBtIHRocm91Z2ggei4KLQotICAge3N0cmluZzEs c3RyaW5nMiwuLi59Ci0gICAgICAgICAgQnJhY2VzIGVuY2xvc2UgYSBsaXN0IG9mIHN0cmluZ3Mg dG8gYmUgbWF0Y2hlZC4gRm9yIGV4YW1wbGU6Ci0gICAgICAgICAgY2t7dWZpbyx2Y29uLGNtYWl9 LmMgbWF0Y2hlcyBja3VmaW8uYywgY2t2Y29uLmMsIG9yIGNrY21haS5jLgotICAgICAgICAgIFRo ZSBzdHJpbmdzIG1heSB0aGVtc2VsdmVzIGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMsIGJyYWNrZXQK LSAgICAgICAgICBsaXN0cywgb3IgaW5kZWVkLCBvdGhlciBsaXN0cyBvZiBzdHJpbmdzLCBidXQg KHdoZW4gbWF0Y2hpbmcKLSAgICAgICAgICBmaWxlbmFtZXMpIHRoZXkgbWF5IG5vdCBjb250YWlu IGRpcmVjdG9yeSBzZXBhcmF0b3JzLgotCi0gICAgICAgICAgVGh1cywgdGhlIG1ldGFjaGFyYWN0 ZXJzIGluIGZpbGVuYW1lcyAoYW5kIGluIGFueSBvdGhlciBmaWVsZAotICAgICAgICAgIHRoYXQg Y2FuIGJlIGEgcGF0dGVybiwgc3VjaCBhcyB0aGUgSUYgTUFUQ0ggcGF0dGVybiwgU0VORCBvciBH RVQKLSAgICAgICAgICBleGNlcHRpb24gbGlzdHMsIGV0YykgYXJlOgotCi0gKiA/IFsgewotCi0g ICAgICAgICAgQW5kIHdpdGhpbiBicmFjZXMgb25seSwgY29tbWEgKCwpIGlzIGEgbWV0YWNoYXJh Y3Rlci4KLQotICAgVG8gaW5jbHVkZSBhIG1ldGFjaGFyYWN0ZXIgaW4gYSBwYXR0ZXJuIGxpdGVy YWxseSwgcHJlY2VkZSBpdCB3aXRoIGEKLSAgIGJhY2tzbGFzaCAnXCcgKG9yIHR3byBpZiB5b3Ug YXJlIHBhc3NpbmcgdGhlIHBhdHRlcm4gdG8gYSBtYWNybykuCi0gICBFeGFtcGxlczoKLQotICBz ZW5kIGEqYiAgICAgIDsgU2VuZCBhbGwgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAnYScg YW5kIGVuZCB3aXRoICdiJy4KLSAgc2VuZCBhP2IgICAgICA7IERpdHRvLCBidXQgdGhlIG5hbWUg bXVzdCBiZSBleGFjdGx5IHRocmVlIGNoYXJhY3RlcnMgbG9uZy4KLSAgc2VuZCBhW2Etel1iICA7 IERpdHRvLCBidXQgdGhlIHNlY29uZCBjaGFyYWN0ZXIgbXVzdCBiZSBhIGxvd2VyY2FzZSBsZXR0 ZXIuCi0gIHNlbmQgYVt4XC16XWIgOyBEaXR0bywgZXhjZXB0IHRoZSBzZWNvbmQgY2hhcmFjdGVy IG11c3QgYmUgJ3gnLCAnLScsIG9yICd5Jy4KLSAgc2VuZCBhW2doaV1iICA7IERpdHRvLCBleGNl cHQgdGhlIHNlY29uZCBjaGFyYWN0ZXIgbXVzdCBiZSAnZycsICdoJywgb3IgJ2knLgotICBzZW5k IGFbPypdYiAgIDsgRGl0dG8sIGV4Y2VwdCB0aGUgc2Vjb25kIGNoYXJhY3RlciBtdXN0IGJlICc/ JyBvciAnKicuCi0gIHNlbmQgYVtcP1wqXWIgOyBTYW1lIGFzIHByZXZpb3VzLgotICBzZW5kICo/ W2Etel0qIDsgQWxsIGZpbGVzIHdpdGggbmFtZXMgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgY2hh cmFjdGVyCi0gICAgICAgICAgICAgICAgOyB0aGF0IGlzIGZvbGxvd2VkIGJ5IGEgbG93ZXJjYXNl IGxldHRlci4KLQotICAgT3IsIG1vcmUgcHJhY3RpY2FsbHk6Ci0KLSAgc2VuZCBja1tjdXddKi5b Y3doXSAgOyBTZW5kIHRoZSBVTklYIEMtS2VybWl0IHNvdXJjZSBmaWxlcy4KLQotICAgVG8gcmVm ZXIgdG8gdGhlIEMtS2VybWl0IHNvdXJjZXMgZmlsZXMgYW5kIG1ha2VmaWxlIGFsbCBpbiBvbmUK LSAgIGZpbGVzcGVjOgotCi0gIHt7bWFrZWZpbGUsY2tbY3V3XSouW2N3aF19fQotCi0gICAoTk9U RTogaWYgdGhlIGVudGlyZSBwYXR0ZXJuIGlzIGEge3N0cmluZ2xpc3R9LCB5b3UgbXVzdCBlbmNs b3NlIGl0IGl0Ci0gICBUV08gcGFpcnMgb2YgYnJhY2VzLCBzaW5jZSB0aGUgU0VORCBjb21tYW5k IHN0cmlwcyB0aGUgb3V0ZXIgYnJhY2UKLSAgIHBhaXIsIGJlY2F1c2Ugb2YgdGhlICJlbmNsb3Nl IGluIGJyYWNlcyBpZiB0aGUgZmlsZW5hbWUgY29udGFpbnMKLSAgIHNwYWNlcyIgcnVsZSkuCi0K LSAgIElmIHRoZSBtYWtlZmlsZSBpcyBjYWxsZWQgY2t1a2VyLm1hazoKLQotICBja1tjdXddKi57 W2N3aF0sbWFrfQotCi0gICAoTk9URTogZG91YmxlIGJyYWNlcyBhcmUgbm90IG5lZWRlZCBoZXJl IHNpbmNlIHRoZSBwYXR0ZXJuIGRvZXMgbm90Ci0gICBib3RoIGJlZ2luIGFuZCBlbmQgd2l0aCBh IGJyYWNlLikKLQotICAgVG8gYWRkIGluIGFsbCB0aGUgQy1LZXJtaXQgdGV4dCBmaWxlczoKLQot ICBja1tjdXddKi57W2N3aF0sbWFrLHR4dH0KLQotICAgQWxsIG9mIHRoZXNlIGZlYXR1cmVzIGNh biBiZSB1c2VkIGFueXdoZXJlIHlvdSB3b3VsZCB0eXBlIGEgZmlsZW5hbWUKLSAgIHRoYXQgaXMg YWxsb3dlZCB0byBjb250YWluIHdpbGRjYXJkcy4KLQotICAgV2hlbiB5b3UgYXJlIHR5cGluZyBh dCB0aGUgY29tbWFuZCBwcm9tcHQsIGFuIGV4dHJhIGxldmVsIG9mIHF1b3RpbmcgaXMKLSAgIHJl cXVpcmVkIGZvciB0aGUgJz8nIGNoYXJhY3RlciB0byBkZWZlYXQgaXRzIHJlZ3VsYXIgZnVuY3Rp b24gb2YKLSAgIHByb2R1Y2luZyBhIGxpc3Qgb2YgZmlsZXMgdGhhdCBtYXRjaCB3aGF0IHlvdSBo YXZlIHR5cGVkIHNvIGZhciwgZm9yCi0gICBleGFtcGxlOgotCi0gIHNlbmQgY2tbY3VdPwotCi0g ICBsaXN0cyBhbGwgdGhlIGZpbGVzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggY2tjIGFuZCBja3Uu IElmIHlvdSBxdW90ZQotICAgdGhlIHF1ZXN0aW9uIG1hcmssIGl0IGlzIHVzZWQgYXMgYSBwYXR0 ZXJuLW1hdGNoaW5nIGNoYXJhY3RlciwgZm9yCi0gICBleGFtcGxlOgotCi0gIHNlbmQgY2tcP1tm dF1pby5jCi0KLSAgIHNlbmRzIGFsbCB0aGUgZmlsZSBhbmQgY29tbXVuaWNhdGlvbnMgaS9vIG1v ZHVsZXMgZm9yIGFsbCB0aGUKLSAgIHBsYXRmb3JtczogY2t1ZmlvLmMsIGNrdXRpby5jLCBja3Zm aW8uYywgY2t2dGlvLmMsIGV0Yy4KLQotICAgSWYsIGhvd2V2ZXIsIGEgZmlsZW5hbWUgYWN0dWFs bHkgY29udGFpbnMgYSBxdWVzdGlvbiBtYXJrIGFuZCB5b3UgbmVlZAotICAgdG8gcmVmZXIgdG8g aXQgb24gdGhlIGNvbW1hbmQgbGluZSwgeW91IG11c3QgdXNlIHRocmVlICgzKSBiYWNrc2xhc2hl cy4KLSAgIEZvciBleGFtcGxlLCBpZiB0aGUgZmlsZSBpcyBhY3R1YWxseSBjYWxsZWQgY2s/Zmlv LmMsIHlvdSB3b3VsZCB1c2U6Ci0KLSAgc2VuZCBja1xcXD9maW8uYwotCi0gICBGdXJ0aGVyIG5v dGVzIG9uIHF1b3Rpbmc6Ci0KLSAgICAgKiBBIHNpbmdsZSBiYWNrc2xhc2ggaXMgc3VmZmljaWVu dCBmb3IgcXVvdGluZyBhIHNwZWNpYWwgY2hhcmFjdGVyIGF0Ci0gICAgICAgdGhlIGNvbW1hbmQg cHJvbXB0IG9yIGluIGEgY29tbWFuZCBmaWxlLiBIb3dldmVyLCB3aGVuIHBhc3NpbmcKLSAgICAg ICBwYXR0ZXJucyB0byBtYWNyb3MgeW91J2xsIG5lZWQgZG91YmxlIGJhY2tzbGFzaGVzLCBhbmQg d2hlbgotICAgICAgIHJlZmVycmluZyB0byB0aGVzZSBwYXR0ZXJucyB3aXRoaW4gdGhlIG1hY3Jv LCB5b3UnbGwgbmVlZCB0byB1c2UKLSAgICAgICBcZmNvbnRlbnRzKFwlMSkgKHNlZSBbNTA2XVNl Y3Rpb24gMS4xMS41KS4gWW91IHNob3VsZCBlbmNsb3NlIG1hY3JvCi0gICAgICAgYXJndW1lbnQg cmVmZXJlbmNlcyBpbiBicmFjZXMgaW4gY2FzZSBncm91cGVkIGFyZ3VtZW50cyB3ZXJlCi0gICAg ICAgcGFzc2VkLiBFeGFtcGxlOgotIGRlZmluZSBpc21hdGNoIHsKLSAgICAgaWYgbWF0Y2gge1xm Y29udChcJTEpfSB7XGZjb250KFwlMil9IHsKLSAgICAgICAgIGVuZCAwIE1BVENICi0gICAgIH0g ZWxzZSB7Ci0gICAgICAgICBlbmQgMSBOTyBNQVRDSAotICAgICB9Ci0gfQotIGlzbWF0Y2ggYWIq eXogYSpcXCoqeiAgICAgICAgICAgOyBCYWNrc2xhc2ggbXVzdCBiZSBkb3VibGVkCi0gaXNtYXRj aCB7YWJjIGRlZiB4eXp9ICpiKmUqeSogICA7IEJyYWNlcyBtdXN0IGJlIHVzZWQgZm9yIGdyb3Vw aW5nCi0KLSAgICAgKiBXYXRjaCBvdXQgZm9yIHBvc3NpYmxlIGNvbmZsaWN0cyBiZXR3ZWVuIHt9 IGluIGZpbGVuYW1lIHBhdHRlcm5zCi0gICAgICAgYW5kIHt9IHVzZWQgZm9yIGdyb3VwaW5nIG11 bHRpcGxlIHdvcmRzIGludG8gYSBzaW5nbGUgZmllbGQsIHdoZW4KLSAgICAgICB0aGUgcGF0dGVy biBoYXMgb3V0ZXIgYnJhY2VzLiBGb3IgZXhhbXBsZSwgaW46Ci0gICAgIGlmIG1hdGNoIHthYmMg eHl6fSB7YSogKnp9IGVjaG8gVEhFWSBNQVRDSAotCi0gICAgICAgYnJhY2VzIG11c3QgYmUgdXNl ZCB0byBncm91cCAiYWJjIHh5eiIgaW50byBhIHNpbmdsZSBzdHJpbmcuIEtlcm1pdAotICAgICAg IHN0cmlwcyBvZmYgdGhlIGJyYWNlcyBiZWZvcmUgY29tcGFyaW5nIHRoZSBzdHJpbmcgd2l0aCB0 aGUgcGF0dGVybi4KLSAgICAgICBUaGVyZWZvcmU6Ci0gaWYgbWF0Y2ggbWFrZWZpbGUge21ha2Vm aWxlLE1ha2VmaWxlfSBlY2hvIFRIRVkgTUFUQ0gKLQotICAgICAgIGRvZXMgbm90IHdvcmssIGJ1 dDoKLSBpZiBtYXRjaCBtYWtlZmlsZSB7e21ha2VmaWxlLE1ha2VmaWxlfX0gZWNobyBUSEVZIE1B VENICi0KLSAgICAgICBkb2VzLgotICAgICAqIElmIHlvdSB1c2UgYSBwYXR0ZXJuIHRoYXQgaGFz IG91dGVyIGJyYWNlcywgbGlrZSB7Ki50eHQsKi5kb2N9LCBpbgotICAgICAgIGEgZmllbGQgdGhh dCBhY2NlcHRzIGEgcGF0dGVybiBsaXN0IChsaWtlIFNFTkQgL0VYQ0VQVDp4eHgpLCB5b3UnbGwK LSAgICAgICBuZWVkIHRvIGFkZCB0d28gZXh0cmEgc2V0cyBvZiBvdXRlciBicmFjZXM6Ci0gc2Vu ZCAvZXhjZXB0Ont7eyoudHh0LCouZG9jfX19ICouKgotCi0gICBDLUtlcm1pdCdzIG5ldyBwYXR0 ZXJuIG1hdGNoaW5nIGNhcGFiaWxpdGllcyBhcmUgYWxzbyB1c2VkIHdoZW4KLSAgIEMtS2VybWl0 IGlzIGluIHNlcnZlciBtb2RlLCBzbyBub3cgeW91IGNhbiBzZW5kIHJlcXVlc3RzIHN1Y2ggYXM6 Ci0KLSAgZ2V0IGNrW2N1d10qLltjd2hdCi0KLSAgIHRvIGEgQy1LZXJtaXQgc2VydmVyIHdpdGhv dXQgaGF2aW5nIHRvIHRlbGwgaXQgdG8gU0VUIFdJTEQgU0hFTEwgZmlyc3QuCi0gICBQcmV2aW91 c2x5IHRoaXMgd291bGQgaGF2ZSByZXF1aXJlZDoKLQotICBtZ2V0IGNrYyouYyBja2MqLncgY2tj Ki5oIGNrdSouYyBja3UqLncgY2t1Ki5oIGNrdyouYyBja3cqLncgY2t3Ki5oCi0KLSAgIFRoZSBu ZXcgcGF0dGVybiBtYXRjaGluZyBmZWF0dXJlcyBtYWtlIFNFVCBXSUxEIFNIRUxMIHJlZHVuZGFu dCwgYW5kCi0gICBiYXJyaW5nIGFueSBvYmplY3Rpb25zLCBpdCB3aWxsIGV2ZW50dWFsbHkgYmUg cGhhc2VkIG91dC4gKE9uZSBwb3NzaWJsZQotICAgcmVhc29uIGZvciByZXRhaW5pbmcgaXQgd291 bGQgYmUgYXMgYW4gZXNjYXBlIG1lY2hhbmlzbSB3aGVuIEtlcm1pdAotICAgZG9lcyBub3QgdW5k ZXJzdGFuZCB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbS4pCi0KLSAgIEJ5IHRoZSB3YXksIHBh dHRlcm5zIHN1Y2ggYXMgdGhlc2UgYXJlIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcwotICAgInJl Z3VsYXIgZXhwcmVzc2lvbnMiLCBidXQgdGhleSBhcmUgbm90IHF1aXRlIHRoZSBzYW1lLiBJbiBh IHRydWUKLSAgIHJlZ3VsYXIgZXhwcmVzc2lvbiAoZm9yIGV4YW1wbGUpLCAiKiIgbWVhbnMgInpl cm8gb3IgbW9yZSByZXBldGl0aW9ucwotICAgb2YgdGhlIHByZXZpb3VzIGl0ZW0iLCBzbyAoZm9y IGV4YW1wbGUpLCAiKFswLTldKikiIHdvdWxkIG1hdGNoIHplcm8gb3IKLSAgIG1vcmUgZGlnaXRz IGluIHBhcmVudGhlc2VzLiBJbiBLZXJtaXQgKGFuZCBpbiBtb3N0IHNoZWxscyksIHRoaXMKLSAg IG1hdGNoZXMgb25lIGRpZ2l0IGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzLCB3 aXRoaW4KLSAgIHBhcmVudGhlc2VzLiBIZXJlIGFyZSBzb21lIGhpbnRzOgotCi0gICAgICogQWx0 aG91Z2ggeW91IGNhbid0IG1hdGNoIGFueSBzZXF1ZW5jZSBvZiBkaWdpdHMgKG9yIGxldHRlcnMs IGV0YyksCi0gICAgICAgeW91IGNhbiBtYXRjaCAoc2F5KSAxLCAyLCBvciAzIG9mIHRoZW0gaW4g cm93LiBGb3IgZXhhbXBsZSwgdGhlCi0gICAgICAgZm9sbG93aW5nIHBhdHRlcm4gbWF0Y2hlcyBL ZXJtaXQgYmFja3VwIGZpbGVzICh3aXRoIGJhY2t1cCBudW1iZXJzCi0gICAgICAgZnJvbSAxIHRv IDk5OSk6Ci0gKi5+e1sxLTldLFsxLTldWzAtOV0sWzEtOV1bMC05XVswLTldfX4KLQotICAgICAq IFRoZXJlIGlzIHByZXNlbnRseSBubyBOT1Qgb3BlcmF0b3IsIHNvIG5vIHdheSB0byBtYXRjaCBh bnkKLSAgICAgICBjaGFyYWN0ZXIgb3Igc3RyaW5nIEVYQ0VQVCB0aGUgb25lKHMpIHNob3duLgot Ci0gICBJbiBvdGhlciB3aWxkY2FyZGluZyBuZXdzLi4uCi0KLSAgICAgKiBZb3UgbWF5IG5vdyAi c2VuZCB4eHgiIHdoZXJlICJ4eHgiIGlzIGEgZGlyZWN0b3J5IG5hbWUsIGFuZCB0aGlzCi0gICAg ICAgd2lsbCBzZW5kIGFsbCB0aGUgZmlsZXMgZnJvbSB0aGUgZGlyZWN0b3J5IHh4eCwgYXMgaWYg eW91IGhhZCB0eXBlZAotICAgICAgICJzZW5kIHh4eC8qIi4gWW91IGNhbiBhbHNvIHVzZSB0aGUg c3BlY2lhbCBzaG9ydGhhbmQgInNlbmQgLiIgdG8KLSAgICAgICBzZW5kIGFsbCB0aGUgZmlsZXMg ZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0gICAgICogVG8gZWFzaWx5IHNraXAgb3ZlciBi YWNrdXAgZmlsZXMgKHRoZSBvbmVzIHdob3NlIG5hbWVzIGVuZCBsaWtlCi0gICAgICAgLn4yMn4p IHdoZW4gc2VuZGluZywgeW91IGNhbiB1c2UgU0VORCAvTk9CQUNLVVAgKHNlZSBbNTA3XVNlY3Rp b24KLSAgICAgICA0LjAuNiBmb3IgZGV0YWlscykuCi0gICAgICogV2hlbiBjaG9vc2luZyBLZXJt aXQgdG8gZXhwYW5kIHdpbGRjYXJkcywgcmF0aGVyIHRoYW4gdGhlIHNoZWxsLAotICAgICAgIHlv dSBjYW4gY2hvb3NlIHdoZXRoZXIgImRvdCBmaWxlcyIgLS0gZmlsZXMgd2hvc2UgbmFtZXMgYmVn aW4gd2l0aAotICAgICAgICIuIiwgd2hpY2ggYXJlIG5vcm1hbGx5ICJpbnZpc2libGUiIC0tIHNo b3VsZCBiZSBtYXRjaGVkOgotIFNFVCBXSUxEIEtFUk1JVCAvTk8tTUFUQ0gtRE9ULUZJTEVTICh0 aGlzIGlzIHRoZSBkZWZhdWx0KQotIFNFVCBXSUxEIEtFUk1JVCAvTUFUQ0gtRE9ULUZJTEVTICAg ICh0aGlzIGFsbG93cyBtYXRjaGluZyBvZiAiLiIgZmlsZXMpCi0KLSAgICAgICBvciBpbmNsdWRl IHRoZSAvRE9URklMRVMgb3IgL05PRE9URklMRVMgc3dpdGNoIG9uIHRoZSBjb21tYW5kIHlvdQot ICAgICAgIGFyZSB1c2luZywgc3VjaCBhcyBTRU5EIG9yIERJUkVDVE9SWS4KLSAgICAgKiBDb21t YW5kcyBzdWNoIGFzIERJUkVDVE9SWSBhbmQgU0VORCBhbGxvdyByZWN1cnNpdmUgZGlyZWN0b3J5 Ci0gICAgICAgdHJhdmVyc2FsLiBUaGVyZSBhcmUgYWxzbyBuZXcgZnVuY3Rpb25zIGZvciB0aGlz IHRvIHVzZSBpbiBzY3JpcHRzLgotICAgICAgIFNlZSBbNTA4XVNlY3Rpb24gNC4xMSBmb3IgZGV0 YWlscy4KLQotICAgV2hlbiBidWlsZGluZyBmaWxlIGxpc3RzIGluIFVOSVgsIEMtS2VybWl0IGZv bGxvd3Mgc3ltYm9saWMgbGlua3MuCi0gICBCZWNhdXNlIG9mIHRoaXMsIHlvdSBtaWdodCBlbmNv dW50ZXIgYW55IG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nCi0gICBwaGVub21lbmE6Ci0KLSAgICAg KiBNdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHNhbWUgZmlsZTsgZS5nLiBvbmUgZnJvbSBpdHMgcmVh bCBkaXJlY3RvcnkKLSAgICAgICBhbmQgb3RoZXJzIGZyb20gbGlua3MgdG8gaXRzIHJlYWwgZGly ZWN0b3J5LCBpZiBib3RoIHRoZSByZWFsCi0gICAgICAgZGlyZWN0b3J5IGFuZCB0aGUgbGlua3Mg dG8gaXQgYXJlIGluIHRoZSB3aWxkY2FyZCBleHBhbnNpb24gbGlzdC4KLSAgICAgKiBBIGNvbW1h bmQgbWlnaHQgdW5leHBlY3RlZGx5ICJoYW5nIiBmb3IgYSBsb25nIHRpbWUgYmVjYXVzZSBhbiBO RlMKLSAgICAgICBsaW5rIG1pZ2h0IG5vdCBiZSByZXNwb25kaW5nLCBvciB0aGUgZGlyZWN0b3J5 IHlvdSBhcmUgbG9va2luZyBhdAotICAgICAgIGNvbnRhaW5zIGEgbGluayB0byBhIGh1Z2UgZGly ZWN0b3J5IHRyZWUgKGV4YW1wbGU6ICJkaXJlY3RvcnkKLSAgICAgICAvcmVjdXJzaXZlIC9ldGMi IHdoZW4gL2V0Yy9zcG9vbCBpcyBhIHN5bWxpbmsgdG8gL3Zhci9zcG9vbCwgd2hpY2gKLSAgICAg ICBpcyBhIGxhcmdlIG9yZ2FuaXphdGlvbidzIGluY29taW5nIGVtYWlsIGRpcmVjdG9yeSwgY29u dGFpbmluZyB0ZW5zCi0gICAgICAgb2YgdGhvdXNhbmRzIG9mIHN1YmRpcmVjdG9yaWVzKS4KLQot ICAgVGhlIHNpemUgb2YgdGhlIGZpbGUgbGlzdCB0aGF0IEtlcm1pdCBjYW4gYnVpbGQgaXMgbGlt aXRlZCBpbiBtb3N0Ci0gICBDLUtlcm1pdCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBsaW1pdCwgaWYg YW55LCBkZXBlbmRzIG9uIHRoZQotICAgaW1wbGVtZW50YXRpb24uIFVzZSB0aGUgU0hPVyBGRUFU VVJFUyBjb21tYW5kIGFuZCBsb29rIGluIHRoZQotICAgYWxwaGFiZXRpemVkIG9wdGlvbnMgbGlz dCBmb3IgTUFYV0xEIHRvIHNlZSB0aGUgdmFsdWUuCi0KLTQuOS4yLiBJbiBLZXJtaXQgOTUKLQot ICAgS2VybWl0IDk1IDEuMS4xOSBhbmQgbGF0ZXIgdXNlcyB0aGUgc2FtZSBwYXR0ZXJuIG1hdGNo aW5nIHN5bnRheCBhcyBpbgotICAgVU5JWCwgYnV0IChhcyBhbHdheXMpIHlvdSB3aWxsIGVuY291 bnRlciBudW1lcm91cyBkaWZmaWN1bHRpZXMgaWYgeW91Ci0gICB1c2UgYmFja3NsYXNoIChcKSBh cyB0aGUgZGlyZWN0b3J5IHNlcGFyYXRvci4gSW4gYW55IGNvbW1hbmQgd2hlcmUgSzk1Ci0gICBw YXJzZXMgZmlsZW5hbWVzIGl0c2VsZiAodGhhdCBpcywgcHJhY3RpY2FsbHkgYW55IGZpbGUtb3Jp ZW50ZWQgY29tbWFuZAotICAgZXhjZXB0IFJVTiksIHlvdSBjYW4gdXNlIGZvcndhcmQgc2xhc2gg KC8pIGFzIHRoZSBkaXJlY3Rvcnkgc2VwYXJhdG9yCi0gICB0byBhdm9pZCBhbGwgdGhlIG5hc3R5 IGNvbmZsaWN0cy4KLQotNC45LjMuIEluIFZNUywgQU9TL1ZTLCBPUy05LCBWT1MsIGV0Yy4KLQot ICAgUGxhdGZvcm1zIG90aGVyIHRoYW4gVU5JWCwgV2luZG93cyA5NS85OC9OVCwgYW5kIE9TLzIg aGF2ZSB0aGVpciBvd24KLSAgIGZpbGVuYW1lIG1hdGNoaW5nIGNhcGFiaWxpdGllcyB0aGF0IGFy ZSwgaW4gZ2VuZXJhbCwgZGlmZmVyZW50IGZyb20KLSAgIEtlcm1pdCdzIGJ1aWx0LWluIG9uZXMg YW5kIGluIGFueSBjYXNlIG1pZ2h0IGNvbmZsaWN0IHdpdGggdGhlbS4gRm9yCi0gICBleGFtcGxl LCBbXSBlbmNsb3NlcyBkaXJlY3RvcnkgbmFtZXMgaW4gVk1TLgotCi0gICBOZXZlcnRoZWxlc3Mg eW91IGNhbiBzdGlsbCB1c2UgYWxsIHRoZSBwYXR0ZXJuLW1hdGNoaW5nIGNhcGFiaWxpdGllcwot ICAgZGVzY3JpYmVkIGluIFs1MDldU2VjdGlvbiA0LjkuMSBieSBsb2FkaW5nIGEgZmlsZSBsaXN0 IGludG8gYW4gYXJyYXkKLSAgIChlLmcuIHdpdGggXGZmaWxlcygqLCZhKSwgc2VlIFs1MTBdU2Vj dGlvbiA0LjExLjMpIGFuZCB0aGVuIHVzaW5nIElGCi0gICBNQVRDSCBvbiB0aGUgbWVtYmVycy4K LQotNC4xMC4gQWRkaXRpb25hbCBQYXRobmFtZSBDb250cm9scwotCi0gICBJbiB2ZXJzaW9uIDYu MCBhbmQgZWFybGllciwgQy1LZXJtaXQncyBTRVQgeyBTRU5ELCBSRUNFSVZFIH0gUEFUSE5BTUVT Ci0gICBjb21tYW5kIGhhZCBvbmx5IE9OIGFuZCBPRkYgYXMgb3B0aW9ucy4gSW4gdmVyc2lvbiA3 LjAsIHRoZXJlIGFyZSBtb3JlCi0gICBjaG9pY2VzOgotCi0gICBTRVQgU0VORCBQQVRITkFNRVMg T0ZGCi0gICAgICAgICAgV2hlbiBzZW5kaW5nIGEgZmlsZSwgc3RyaXAgYWxsIGRpc2svZGlyZWN0 b3J5IGluZm9ybWF0aW9uIGZyb20KLSAgICAgICAgICB0aGUgbmFtZS4gRXhhbXBsZTogInNlbmQg L3Vzci9vbGdhL2xldHRlcnMvb29mYS50eHQiIHNlbmRzIHRoZQotICAgICAgICAgIGZpbGUgYXMg Im9vZmEudHh0Ii4gVGhpcyBhcHBsaWVzIHRvIGFjdHVhbCBmaWxlbmFtZXMsIG5vdCB0byBhbnkK LSAgICAgICAgICBhcy1uYW1lIHlvdSBtaWdodCBzcGVjaWZ5LgotCi0gICBTRVQgU0VORCBQQVRI TkFNRVMgUkVMQVRJVkUKLSAgICAgICAgICBXaGVuIHNlbmRpbmcgYSBmaWxlLCBsZWF2ZSB0aGUg cGF0aG5hbWUgb24gYXMgZ2l2ZW4uIEZvcgotICAgICAgICAgIGV4YW1wbGUsIGlmIHlvdXIgY3Vy cmVudCBkaXJlY3RvcnkgaXMgL3Vzci9vbGdhLCAic2VuZAotICAgICAgICAgIGxldHRlcnMvb29m YS50eHQiIHNlbmRzIHRoZSBmaWxlIGFzICJsZXR0ZXJzL29vZmEudHh0Iiwgbm90Ci0gICAgICAg ICAgIi91c3Ivb2xnYS9sZXR0ZXJzL29vZmEudHh0IiBvciAibGV0dGVycy50eHQiLgotCi0gICBT RVQgU0VORCBQQVRITkFNRVMgQUJTT0xVVEUKLSAgICAgICAgICBXaGVuIHNlbmRpbmcgYSBmaWxl LCBjb252ZXJ0IGl0cyBuYW1lIHRvIHRoZSBmdWxsLCBhYnNvbHV0ZQotICAgICAgICAgIGxvY2Fs IHBhdGhuYW1lLiBGb3IgZXhhbXBsZSwgaWYgeW91ciBjdXJyZW50IGRpcmVjdG9yeSBpcwotICAg ICAgICAgIC91c3Ivb2xnYSwgInNlbmQgbGV0dGVycy9vb2ZhLnR4dCIgc2VuZHMgdGhlIGZpbGUg YXMKLSAgICAgICAgICAiL3Vzci9vbGdhL2xldHRlcnMvb29mYS50eHQiLiBOT1RFOiBFdmVuIHdp dGggdGhpcyBzZXR0aW5nLAotICAgICAgICAgIGRldmljZSBhbmQvb3Igbm9kZSBuYW1lcyBhcmUg bm90IGluY2x1ZGVkLiBGb3IgZXhhbXBsZSwgaW4gVk1TLAotICAgICAgICAgIGFueSBub2RlIG9y IGRldmljZSBuYW1lIGlzIHN0cmlwcGVkOyBpbiBXaW5kb3dzIG9yIE9TLzIsIGFueQotICAgICAg ICAgIGRpc2sgbGV0dGVyIGlzIHN0cmlwcGVkLgotCi0gICBTRVQgUkVDRUlWRSBQQVRITkFNRVMg T0ZGCi0gICAgICAgICAgV2hlbiByZWNlaXZpbmcgYSBmaWxlLCBzdHJpcCBhbGwgZGlzay9kaXJl Y3RvcnkgaW5mb3JtYXRpb24gZnJvbQotICAgICAgICAgIHRoZSBuYW1lIGJlZm9yZSBhdHRlbXB0 aW5nIHRvIHN0b3JlIGl0LiBUaGlzIGFwcGxpZXMgdG8gaW5jb21pbmcKLSAgICAgICAgICBmaWxl bmFtZSwgbm90IHRvIGFueSBhcy1uYW1lIHlvdSBtaWdodCBzcGVjaWZ5LiBFeGFtcGxlOiBJZiBh Ci0gICAgICAgICAgZmlsZSBhcnJpdmVzIHVuZGVyIHRoZSBuYW1lICIvdXNyL29sZ2EvbGV0dGVy cy9vb2ZhLnR4dCIgaXQgaXMKLSAgICAgICAgICBzdG9yZWQgc2ltcGx5IGFzICJvb2ZhLnR4dCIg aW4geW91ciBkb3dubG9hZCBkaXJlY3Rvcnkgb3IsIGlmIG5vCi0gICAgICAgICAgZG93bmxvYWQg ZGlyZWN0b3J5IGhhcyBiZWVuIHNwZWNpZmllZCwgaW4geW91ciBjdXJyZW50Ci0gICAgICAgICAg ZGlyZWN0b3J5LgotCi0gICBTRVQgUkVDRUlWRSBQQVRITkFNRVMgUkVMQVRJVkUKLSAgICAgICAg ICBXaGVuIHJlY2VpdmluZyBhIGZpbGUsIGxlYXZlIHRoZSBwYXRobmFtZSBvbiBhcyBpdCBhcHBl YXJzIGluCi0gICAgICAgICAgdGhlIGluY29taW5nIG5hbWUsIGJ1dCBpZiB0aGUgaW5jb21pbmcg bmFtZSBhcHBlYXJzIHRvIGJlCi0gICAgICAgICAgYWJzb2x1dGUsIG1ha2UgaXQgcmVsYXRpdmUg dG8geW91ciBjdXJyZW50IG9yIGRvd25sb2FkCi0gICAgICAgICAgZGlyZWN0b3J5LiBFeGFtcGxl czoKLQotICAgICAgICAgICsgIm9vZmEudHh0IiBpcyBzdG9yZWQgYXMgIm9vZmEudHh0Ii4KLSAg ICAgICAgICArICJsZXR0ZXJzL29vZmEudHh0IiBpcyBzdG9yZWQgYXMgImxldHRlcnMvb29mYS50 eHQiOyB0aGUKLSAgICAgICAgICAgICJsZXR0ZXJzIiBzdWJkaXJlY3RvcnkgaXMgY3JlYXRlZCBp ZiBpdCBkb2VzIG5vdCBhbHJlYWR5Ci0gICAgICAgICAgICBleGlzdC4KLSAgICAgICAgICArICIv dXNyL29sZ2EvbGV0dGVycy9vb2ZhLnR4dCIgaXMgc3RvcmVkIGFzCi0gICAgICAgICAgICAidXNy L29sZ2EvbGV0dGVycy9vb2ZhLnR4dCIgaW4geW91ciBjdXJyZW50IG9yIGRvd25sb2FkCi0gICAg ICAgICAgICBkaXJlY3RvcnksIGFuZCB0aGUgInVzciIsICJ1c3Ivb2xnYSIsIGV0YywgZGlyZWN0 b3JpZXMgYXJlCi0gICAgICAgICAgICBjcmVhdGVkIGlmIHRoZXkgZG8gbm90IGV4aXN0LgotCi0g ICBTRVQgUkVDRUlWRSBQQVRITkFNRVMgQUJTT0xVVEUKLSAgICAgICAgICBUaGUgaW5jb21pbmcg ZmlsZW5hbWUgaXMgdXNlZCBhcyBnaXZlbi4gVGh1cyBpdCBjYW5ub3QgYmUgc3RvcmVkCi0gICAg ICAgICAgdW5sZXNzIHRoZSBnaXZlbiBwYXRoIChpZiBhbnkpIGFscmVhZHkgZXhpc3RzIG9yIGNh biBiZSBjcmVhdGVkLgotICAgICAgICAgIEluIHRoaXMgY2FzZSwgbm9kZSwgZGV2aWNlLCBvciBk aXNrIGRlc2lnbmF0aW9ucyBhcmUgTk9UCi0gICAgICAgICAgc3RyaXBwZWQsIHNpbmNlIHRoZXkg bW9zdCBsaWtlbHkgd2VyZSBnaXZlbiBleHBsaWNpdGx5IGJ5IHRoZQotICAgICAgICAgIHVzZXIg YXMgYW4gYXMtbmFtZSwgbWVhbnQgdG8gYmUgdXNlZCBhcyBnaXZlbi4KLQotICAgU0VUIFJFQ0VJ VkUgUEFUSE5BTUVTIEFVVE8KLSAgICAgICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0LCBhbmQgbWVh bnMgUkVMQVRJVkUgaWYgdGhlIHNlbmRlciB0ZWxscyBtZQotICAgICAgICAgIGl0IGlzIGEgcmVj dXJzaXZlIHRyYW5zZmVyLCBPRkYgb3RoZXJ3aXNlLgotCi0gICBTZXQgRklMRSBOQU1FUyBDT05W RVJURUQgbm93IGFsc28gYWZmZWN0cyBwYXRobmFtZXMgdG9vLiBXaGVuIFBBVEhOQU1FUwotICAg YXJlIFJFTEFUSVZFIG9yIEFCU09MVVRFIGFuZCBGSUxFIE5BTUVTIGFyZSBDT05WRVJURUQsIHRo ZSBmaWxlIHNlbmRlcgotICAgY29udmVydHMgaXRzIG5hdGl2ZSBkaXJlY3RvcnktbmFtZSBmb3Jt YXQgdG8gVU5JWCBmb3JtYXQsIGFuZCB0aGUgZmlsZQotICAgcmVjZWl2ZXIgY29udmVydHMgZnJv bSBVTklYIGZvcm1hdCB0byBpdHMgbmF0aXZlIG9uZTsgdGh1cyBVTklYIGZvcm1hdAotICAgaXMg dGhlIGNvbW1vbiBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gZm9yIGRpcmVjdG9yeSBoaWVy YXJjaGllcywgYXMKLSAgIGl0IGlzIGluIHRoZSBaSVAvVU5aSVAgcHJvZ3JhbXMgKHdoaWNoIGlz IHdoeSBaSVAgYXJjaGl2ZXMgYXJlCi0gICB0cmFuc3BvcnRhYmxlIGFtb25nLCBVTklYLCBET1Ms IGFuZCBWTVMpLgotCi0gICBIZXJlJ3MgYW4gZXhhbXBsZSBpbiB3aGljaCBhIGZpbGUgaXMgc2Vu dCBmcm9tIFdpbmRvd3MgdG8gVU5JWCB3aXRoCi0gICByZWxhdGl2ZSBwYXRobmFtZXMgYW5kIEZJ TEUgTkFNRVMgQ09OVkVSVEVEOgotCi0gIFNvdXJjZSBuYW1lICAgICAgICAgICAgICAgIEludGVy bWVkaWF0ZSBuYW1lICAgICAgRGVzdGluYXRpb24gTmFtZQotICBDOlxLOTVcVE1QXE9PRkEuVFhU ICAgICAgICBLOTUvVE1QL09PRkEuVFhUICAgICAgIGs5NS90bXAvb29mYS50eHQKLQotICAgSW4g YSBtb3JlIGNvbXBsaWNhdGVkIGV4YW1wbGUsIHdlIHNlbmQgdGhlIHNhbWUgZmlsZSBmcm9tIFdp bmRvd3MgdG8KLSAgIFZNUzoKLQotICBTb3VyY2UgbmFtZSAgICAgICAgICAgICAgICBJbnRlcm1l ZGlhdGUgbmFtZSAgICAgIERlc3RpbmF0aW9uIE5hbWUKLSAgQzpcSzk1XFRNUFxPT0ZBLlRYVCAg ICAgICAgSzk1L1RNUC9PT0ZBLlRYVCAgICAgICBbLks5NS5UTVBdT09GQS5UWFQKLQotICAgKE5v dGUgdGhhdCBkaXNrIGxldHRlcnMgYW5kIGRldmljZSBkZXNpZ25hdGlvbnMgYXJlIGFsd2F5cyBz dHJpcHBlZAotICAgd2hlbiBwYXRobmFtZXMgYXJlIHJlbGF0aXZlKS4KLQotICAgQXMgeW91IGNh biBpbWFnaW5lLCBhcyBtb3JlIGFuZCBtb3JlIGRpcmVjdG9yeSBmb3JtYXRzIGFyZSBjb25zaWRl cmVkLAotICAgdGhpcyBhcHByb2FjaCBrZWVwcyBtYXR0ZXJzIHNpbXBsZTogb24gZWFjaCBwbGF0 Zm9ybSwgS2VybWl0IG11c3Qga25vdwotICAgb25seSBpdHMgb3duIGxvY2FsIGZvcm1hdCBhbmQg dGhlIGNvbW1vbiBpbnRlcm1lZGlhdGUgb25lLiBJbiBtb3N0Ci0gICBjYXNlcywgdGhlIHJlY2Vp dmVyIGNhbiBkZXRlY3Qgd2hpY2ggZm9ybWF0IGlzIHVzZWQgYXV0b21hdGljYWxseS4KLQotNC4x MS4gUmVjdXJzaXZlIFNFTkQgYW5kIEdFVDogVHJhbnNmZXJyaW5nIERpcmVjdG9yeSBUcmVlcwot Ci0gICBDLUtlcm1pdCA3LjAgaW4gc2VsZWN0ZWQgdmVyc2lvbnMgKFVOSVgsIFZNUywgVk9TLCBB T1MvVlMsIFdpbmRvd3MsIGFuZAotICAgT1MvMiBhdCB0aGlzIHdyaXRpbmcpIG5vdyBwZXJtaXRz IHRoZSBTRU5EIGNvbW1hbmQgdG8gdHJhdmVyc2UKLSAgIGRpcmVjdG9yaWVzICJyZWN1cnNpdmVs eSIgaWYgeW91IGFzayBpdCB0bzsgdGhhdCBpcywgdG8gc2VuZCBmaWxlcyBmcm9tCi0gICB0aGUg Y3VycmVudCBvciBzcGVjaWZpZWQgZGlyZWN0b3J5IGFuZCBhbGwgb2YgaXRzIHN1YmRpcmVjdG9y aWVzIHRvbywKLSAgIGFuZCB0aGVpciBzdWJkaXJlY3RvcmllcywgZXRjLiAoU29tZSBvdGhlciBj b21tYW5kcyBjYW4gZG8gdGhpcyB0b28sCi0gICBpbmNsdWRpbmcgRElSRUNUT1JZLikKLQotICAg VGhpcyBmZWF0dXJlIGlzIG5ldyB0byBVTklYLCBXaW5kb3dzLCBWT1MsIGFuZCBPUy8yLiBWTVMg YW5kIEFPUy9WUwotICAgaGF2ZSBhbHdheXMgaW5jbHVkZWQgIndpbGRjYXJkIiBvciAidGVtcGxh dGUiIGNoYXJhY3RlcnMgdGhhdCBhbGxvdwotICAgdGhpcywgYW5kIGluIHRoaXMgY2FzZSwgcmVj dXJzaXZlIGRpcmVjdG9yeSB0cmF2ZXJzYWwgY291bGQgaGFwcGVuCi0gICBiZWhpbmQgS2VybWl0 J3MgYmFjaywgaS5lLiBLZXJtaXQgZG9lcyBub3QgaGF2ZSB0byBkbyBpdCBpdHNlbGYgKGluCi0g ICBWTVMsIHRoZSBub3RhdGlvbiBpcyAiWy4uLl0iIG9yICJbZGlyZWN0b3J5Li4uXSI7IGluIEFP Uy9WUyBpcyAiIyIpLiBJbgotICAgQy1LZXJtaXQgNy4wLCBob3dldmVyLCBTRU5EIC9SRUNVUlNJ VkUgaXMgc3VwcG9ydGVkIGJ5IEMtS2VybWl0IGl0c2VsZgotICAgZm9yIFZNUy4KLQotNC4xMS4x LiBDb21tYW5kLUxpbmUgT3B0aW9ucwotCi0gICBUbyBkZXNjZW5kIGEgZGlyZWN0b3J5IHRyZWUg d2hlbiBzZW5kaW5nIGZpbGVzLCB1c2UgdGhlIC1MIGNvbW1hbmQtbGluZQotICAgb3B0aW9uIHRv IGluZGljYXRlIHRoYXQgdGhlIHNlbmQgb3BlcmF0aW9uIGlzIHRvIGJlIHJlY3Vyc2l2ZSwgYW5k Ci0gICBpbmNsdWRlIGEgbmFtZSBvciBwYXR0ZXJuIHRvIGJlIHNlbnQuIFdoZW4gZ2l2aW5nIGEg cGF0dGVybiwgeW91IHNob3VsZAotICAgZW5jbG9zZSBpdCBpbiBxdW90ZXMgdG8gcHJldmVudCB0 aGUgc2hlbGwgZnJvbSBleHBhbmRpbmcgaXQuIEV4YW1wbGVzOgotCi0gICQga2VybWl0IC1McyAi L3Vzci9vbGdhLyoiICMgc2VuZCBhbGwgb2YgT2xnYSdzIGZpbGVzIGluIGFsbCBoZXIgZGlyZWN0 b3JpZXMKLSAgJCBrZXJtaXQgLUxzIGZvby50eHQgICAgICAgIyBzZW5kIGFsbCBmb28udHh0IGZp bGVzIGluIHRoaXMgZGlyZWN0b3J5IHRyZWUKLSAgJCBrZXJtaXQgLUxzICIqLnR4dCIgICAgICAg IyBzZW5kIGFsbCAudHh0IGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IHRyZWUKLSAgJCBrZXJtaXQg LUxzICJsZXR0ZXJzLyoiICAgIyBzZW5kIGFsbCBmaWxlcyBpbiB0aGUgbGV0dGVycyBkaXJlY3Rv cnkgdHJlZQotICAkIGtlcm1pdCAtTHMgbGV0dGVycyAgICAgICAjIHNlbmQgYWxsIGZpbGVzIGlu IHRoZSBsZXR0ZXJzIGRpcmVjdG9yeSB0cmVlCi0gICQga2VybWl0IC1McyAiKiIgICAgICAgICAg ICMgc2VuZCBhbGwgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgdHJlZQotICAkIGtlcm1pdCAtTHMg LiAgICAgICAgICAgICAjIFVOSVggb25seTogc2VuZCBhbGwgZmlsZXMgaW4gdGhpcyBkaXJlY3Rv cnkgdHJlZQotICAkIGtlcm1pdCAtcyAuICAgICAgICAgICAgICAjIFVOSVggb25seTogYSBmaWxl bmFtZSBvZiAuIGltcGxpZXMgLUwKLQotICAgSWYgeW91IGxldCB0aGUgc2hlbGwgZXhwYW5kIHdp bGRjYXJkcywgS2VybWl0IG9ubHkgc2VuZHMgZmlsZXMgd2hvc2UKLSAgIG5hbWVzIG1hdGNoIGZp bGVzIGluIHRoZSBjdXJyZW50IG9yIGdpdmVuIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGUgc2hlbGwK LSAgIHJlcGxhY2VzIGFuIHVucXVvdGVkIHdpbGRjYXJkIGV4cHJlc3Npb24gd2l0aCB0aGUgbGlz dCBvZiBtYXRjaGluZwotICAgZmlsZXMgLS0gYW5kIHRoZSBzaGVsbCBkb2VzIG5vdCBidWlsZCBy ZWN1cnNpdmUgbGlzdHMuIE5vdGUgdGhhdCB0aGUKLSAgICIuIiBub3RhdGlvbiBmb3IgdGhlIHRy ZWUgcm9vdGVkIGF0IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBhbGxvd2VkCi0gICBvbmx5IGlu IFVOSVgsIHNpbmNlIGluIFdpbmRvd3MgYW5kIE9TLzIsIGl0IG1lYW5zICIqLioiIChub25yZWN1 cnNpdmUpLgotCi00LjExLjIuIFRoZSBTRU5EIC9SRUNVUlNJVkUgQ29tbWFuZAotCi0gICBJZiB5 b3UgaW5jbHVkZSB0aGUgL1JFQ1VSU0lWRSBzd2l0Y2ggaW4gYSBTRU5EIChvciBNT1ZFLCBvciBz aW1pbGFyKQotICAgY29tbWFuZCwgaXQgbWVhbnMgdG8gZGVzY2VuZCB0aGUgY3VycmVudCBvciBz cGVjaWZpZWQgZGlyZWN0b3J5IHRyZWUKLSAgIHNlYXJjaGluZyBmb3IgZmlsZXMgd2hvc2UgbmFt ZXMgbWF0Y2ggdGhlIGdpdmVuIG5hbWUgb3IgcGF0dGVybi4gU2luY2UKLSAgIHRoaXMgaXMgbm90 IHRlcnJpYmx5IHVzZWZ1bCB1bmxlc3MgeW91IGFsc28gaW5jbHVkZSBwYXRobmFtZXMgd2l0aCB0 aGUKLSAgIG91dGJvdW5kIGZpbGVzLCB0aGUgL1JFQ1VSU0lWRSBzd2l0Y2ggYWxzbyBpbmNsdWRl cyBhbiBpbXBsaWNpdAotICAgL1BBVEhOQU1FUzpSRUxBVElWRSBzd2l0Y2ggKHdoaWNoIHlvdSBj YW4gdW5kbyBieSBpbmNsdWRpbmcgYW4gZXhwbGljaXQKLSAgIC9QQVRITkFNRVMgc3dpdGNoIGFm dGVyIHRoZSAvUkVDVVJTSVZFIHN3aXRjaCkuCi0KLSAgIEV4YW1wbGVzOgotCi0gICBTRU5EIC9S RUNVUlNJVkUgKgotICAgICAgICAgIFNlbmRzIGFsbCBvZiB0aGUgZmlsZXMgaW4gdGhlIGN1cnJl bnQgZGlyZWN0b3J5IGFuZCBhbGwgdGhlCi0gICAgICAgICAgZmlsZXMgaW4gYWxsIG9mIGl0cyBz dWJkaXJlY3RvcmllcywgYW5kIGFsbCBvZiB0aGVpcgotICAgICAgICAgIHN1YmRpcmVjdG9yaWVz LCBldGMsIGluY2x1ZGluZyB0aGVpciByZWxhdGl2ZSBwYXRobmFtZXMuIEVtcHR5Ci0gICAgICAg ICAgZGlyZWN0b3JpZXMgYXJlIG5vdCBzZW50LgotCi0gICBTRU5EIC9SRUNVUlNJVkUgL1BBVEhO QU1FUzpBQlNPTFVURSAqCi0gICAgICAgICAgU2VuZHMgYWxsIG9mIHRoZSBmaWxlcyBpbiB0aGUg Y3VycmVudCBkaXJlY3RvcnkgYW5kIGFsbCB0aGUKLSAgICAgICAgICBmaWxlcyBpbiBhbGwgb2Yg aXRzIHN1YmRpcmVjdG9yaWVzLCBhbmQgYWxsIG9mIHRoZWlyCi0gICAgICAgICAgc3ViZGlyZWN0 b3JpZXMsIGV0YywgaW5jbHVkaW5nIHRoZWlyIGFic29sdXRlIHBhdGhuYW1lcy4KLQotICAgU0VO RCAvUkVDVVJTSVZFIC9QQVRITkFNRVM6T0ZGICoKLSAgICAgICAgICBTZW5kcyBhbGwgb2YgdGhl IGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgYWxsIHRoZQotICAgICAgICAgIGZp bGVzIGluIGFsbCBvZiBpdHMgc3ViZGlyZWN0b3JpZXMsIGFuZCBhbGwgb2YgdGhlaXIKLSAgICAg ICAgICBzdWJkaXJlY3RvcmllcywgZXRjLCB3aXRob3V0IHBhdGhuYW1lcy4KLQotICAgU0VORCAv UkVDVVJTSVZFIC91c3Ivb2xnYS8qCi0gICAgICAgICAgU2VuZHMgYWxsIG9mIHRoZSBmaWxlcyBp biB0aGUgL3Vzci9vbGdhIGRpcmVjdG9yeSBhbmQgYWxsIHRoZQotICAgICAgICAgIGZpbGVzIGlu IGFsbCBvZiBpdHMgc3ViZGlyZWN0b3JpZXMsIGFuZCBhbGwgb2YgdGhlaXIKLSAgICAgICAgICBz dWJkaXJlY3RvcmllcywgZXRjLgotCi0gICBTRU5EIC9SRUNVUlNJVkUgL3Vzci9vbGdhIChvciAv dXNyL29sZ2EvKQotICAgICAgICAgIFNhbWUgYXMgYWJvdmUuIElmIHRoZSBuYW1lIGlzIGEgZGly ZWN0b3J5IG5hbWUgKHdpdGggb3Igd2l0aG91dAotICAgICAgICAgIGEgdHJhaWxpbmcgc2xhc2gp LCBpdHMgZmlsZXMgYXJlIHNlbnQsIGFuZCB0aG9zZSBvZiBpdHMKLSAgICAgICAgICBzdWJkaXJl Y3RvcmllcywgYW5kIHRoZWlyIHN1YmRpcmVjdG9yaWVzLCBldGMgKHNlZSBbNTExXVNlY3Rpb24K LSAgICAgICAgICA0LjkpLgotCi0gICBTRU5EIC9SRUNVUlNJVkUgL1RFWFQgL3Vzci9vbGdhLyou dHh0Ci0gICAgICAgICAgQXMgYWJvdmUsIGJ1dCBvbmx5IGZpbGVzIHdob3NlIG5hbWVzIGVuZCB3 aXRoICIudHh0IiBhcmUgc2VudCwKLSAgICAgICAgICBhbmQgdGhleSBhcmUgc2VudCBpbiB0ZXh0 IG1vZGUgKGFzIHRoZXkgd291bGQgYmUgYnkgZGVmYXVsdAotICAgICAgICAgIGFueXdheSBpZiBT RVQgRklMRSBQQVRURVJOUyBpcyBPTiBvciBBVVRPKS4KLQotICAgU0VORCAuCi0gICAgICAgICAg VU5JWCBvbmx5OiBTZW5kIGFsbCB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5Lgot Ci0gICBTRU5EIC9SRUNVUlNJVkUgLgotICAgICAgICAgIFVOSVggb25seTogU2VuZHMgYWxsIG9m IHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kCi0gICAgICAgICAgYWxsIG9m IGl0cyBzdWJkaXJlY3RvcmllcywgZXRjIChbNTEyXVNlY3Rpb24gNC45KS4KLQotICAgVGhlIC9S RUNVUlNJVkUgc3dpdGNoIGlzIGRpZmZlcmVudCBmcm9tIG1vc3Qgb3RoZXIgc3dpdGNoZXMgaW4g dGhhdCBpdHMKLSAgIGVmZmVjdCBpcyBpbW1lZGlhdGUgKGJ1dCBzdGlsbCBsb2NhbCB0byB0aGUg Y29tbWFuZCBpbiB3aGljaCBpdCBpcwotICAgZ2l2ZW4pLCBiZWNhdXNlIGl0IGRldGVybWluZXMg aG93IGZpbGVuYW1lcyBhcmUgdG8gYmUgcGFyc2VkLiBGb3IKLSAgIGV4YW1wbGUsICJzZW5kICou dHh0IiBmYWlscyB3aXRoIGEgcGFyc2UgZXJyb3IgKCJObyBmaWxlcyBtYXRjaCIpIGlmCi0gICB0 aGVyZSBhcmUgbm8gKi50eHQgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBidXQgInNl bmQgL3JlY3Vyc2l2ZQotICAgKi50eHQiIHN1Y2NlZWRzIGlmIHRoZXJlIGFyZSAiLnR4dCIgZmls ZXMgYW55d2hlcmUgaW4gdGhlIHRyZWUgcm9vdGVkCi0gICBhdCB0aGUgY3VycmVudCBkaXJlY3Rv cnkuCi0KLSAgIFRoZSAvUkVDVVJTSVZFIHN3aXRjaCBhbHNvIGFmZmVjdHMgdGhlIGZpbGUgbGlz dHMgZGlzcGxheWVkIGlmIHlvdSB0eXBlCi0gICAiPyIgaW4gYSBmaWxlbmFtZSBmaWVsZC4gInNl bmQgLi8/IiBsaXN0cyB0aGUgcmVndWxhciBmaWxlcyBpbiB0aGUKLSAgIGN1cnJlbnQgZGlyZWN0 b3J5LCBidXQgInNlbmQgL3JlY3Vyc2l2ZSAuLz8iIGxpc3RzIHRoZSBlbnRpcmUgZGlyZWN0b3J5 Ci0gICB0cmVlIHJvb3RlZCBhdCB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0KLTQuMTEuMy4gVGhl IEdFVCAvUkVDVVJTSVZFIENvbW1hbmQKLQotICAgSW4gYSBjbGllbnQvc2VydmVyIHNldHRpbmcs IHRoZSBjbGllbnQgY2FuIGFsc28gcmVxdWVzdCBhIHJlY3Vyc2l2ZQotICAgdHJhbnNmZXIgd2l0 aDoKLQotICAgR0VUIC9SRUNVUlNJVkUgWyBvdGhlciBzd2l0Y2hlcyBdIHJlbW90ZS1maWxlc3Bl YyBbIGxvY2FsLXNwZWMgXQotCi0gICBJbiB3aGljaCByZW1vdGUgZmlsZSBzcGVjaWZpY2F0aW9u IGNhbiBiZSBhIGRpcmVjdG9yeSBuYW1lLCBhIGZpbGVuYW1lLAotICAgYSB3aWxkY2FyZCwgb3Ig YW55IGNvbWJpbmF0aW9uLiBJZiB0aGUgbG9jYWwtc3BlYyBpcyBub3QgZ2l2ZW4gKGFuZAotICAg UEFUSE5BTUVTIGFyZSBSRUxBVElWRSksIGluY29taW5nIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBn byBpbnRvIHRoZQotICAgY3VycmVudCBsb2NhbCBkaXJlY3RvcnkuIElmIGxvY2FsLXNwZWMgaXMg Z2l2ZW4gYW5kIGlzIGEgZGlyZWN0b3J5LCBpdAotICAgYmVjb21lcyB0aGUgcm9vdCBvZiB0aGUg dHJlZSBpbnRvIHdoaWNoIHRoZSBpbmNvbWluZyBmaWxlcyBhbmQKLSAgIGRpcmVjdG9yaWVzIGFy ZSBwbGFjZWQuIElmIGxvY2FsLXNwZWMgaGFzIHRoZSBzeW50YXggb2YgYSBkaXJlY3RvcnkKLSAg IG5hbWUgKGUuZy4gaW4gVU5JWCBpdCBlbmRzIHdpdGggLyksIEMtS2VybWl0IGNyZWF0ZXMgdGhl IGRpcmVjdG9yeSBhbmQKLSAgIHRoZW4gcGxhY2VzIHRoZSBpbmNvbWluZyBmaWxlcyBpbnRvIGl0 LiBJZiBsb2NhbC1zcGVjIGlzIGEgZmlsZW5hbWUKLSAgIChub3QgcmVjb21tZW5kZWQpLCB0aGVu IGFsbCBpbmNvbWluZyBmaWxlcyBhcmUgc3RvcmVkIHdpdGggdGhhdCBuYW1lCi0gICB3aXRoIGNv bGxpc2lvbnMgaGFuZGxlZCBhY2NvcmRpbmcgdG8gdGhlIEZJTEUgQ09MTElTSU9OIHNldHRpbmcu Ci0KLSAgIEFnYWluLCB0aGUgbm9ybWFsIG1ldGhvZCBmb3IgdHJhbnNmZXJyaW5nIGRpcmVjdG9y eSB0cmVlcyB1c2VzIHJlbGF0aXZlCi0gICBwYXRobmFtZXMsIGFuZCB0aGlzIGlzIHRoZSBkZWZh dWx0IHdoZW4gdGhlIHNlbmRlciBoYXMgYmVlbiBnaXZlbiB0aGUKLSAgIC9SRUNVUlNJVkUgc3dp dGNoLiBUaGUgYWN0aW9uIGF0IHRoZSByZWNlaXZlciBkZXBlbmRzIG9uIGl0cyBSRUNFSVZFCi0g ICBQQVRITkFNRVMgc2V0dGluZy4gVGhlIGRlZmF1bHQgaXMgQVVUTywgbWVhbmluZyB0aGF0IGlm IHRoZSBzZW5kZXIKLSAgIHRlbGxzIGl0IHRvIGV4cGVjdCBhIHJlY3Vyc2l2ZSB0cmFuc2Zlciwg dGhlbiBpdCBzaG91bGQgYXV0b21hdGljYWxseQotICAgc3dpdGNoIHRvIHJlbGF0aXZlIHBhdGhu YW1lcyBmb3IgdGhpcyB0cmFuc2ZlciBvbmx5OyBvdGhlcndpc2UgaXQgb2JleXMKLSAgIHRoZSBS RUNFSVZFIFBBVEhOQU1FUyBzZXR0aW5nIG9mIE9GRiwgQUJTT0xVVEUsIG9yIFJFTEFUSVZFLgot Ci0gICBXaGF0IGhhcHBlbnMgaWYgYSBmaWxlIGFycml2ZXMgdGhhdCBoYXMgYW4gYWJzb2x1dGUg cGF0aG5hbWUsIHdoZW4gdGhlCi0gICByZWNlaXZlciBoYXMgYmVlbiB0b2xkIHRvIHVzZSBvbmx5 IHJlbGF0aXZlIHBhdGhuYW1lcz8gQXMgYSBzZWN1cml0eQotICAgcHJlY2F1dGlvbiwgaW4gdGhp cyBjYXNlIHRoZSByZWNlaXZlciB0cmVhdHMgdGhlIG5hbWUgYXMgaWYgaXQgd2FzCi0gICByZWxh dGl2ZS4gRm9yIGV4YW1wbGUsIGlmIGEgZmlsZSBhcnJpdmVzIGFzOgotCi0gIC91c3Ivb2xnYS9v b2ZhLnR4dAotCi0gICBUaGUgcmVjZWl2ZXIgY3JlYXRlcyBhICJ1c3IiIHN1YmRpcmVjdG9yeSBp biBpdHMgY3VycmVudCBkaXJlY3RvcnksIGFuZAotICAgdGhlbiBhbiAib2xnYSIgc3ViZGlyZWN0 b3J5IHVuZGVyIHRoZSAidXNyIiBzdWJkaXJlY3RvcnkgaW4gd2hpY2ggdG8KLSAgIHN0b3JlIHRo ZSBpbmNvbWluZyBmaWxlLgotCi0gICBTdXBwb3NlLCBob3dldmVyIHRoZXJlIGlzIGEgc2VxdWVu Y2Ugb2YgZGlyZWN0b3JpZXM6Ci0KLSAgL3Vzci9vbGdhL2EvYi9jL2QvCi0KLSAgIGluIHdoaWNo ICJhIiBjb250YWlucyBub3RoaW5nIGJ1dCBhIHN1YmRpcmVjdG9yeSAiYiIsIHdoaWNoIGluIHR1 cm4KLSAgIGNvbnRhaW5zIG5vdGhpbmcgYnV0IGEgc3ViZGlyZWN0b3J5ICJjIiwgd2hpY2ggaW4g dHVybiBjb250YWlucyBub3RoaW5nCi0gICBidXQgYSBzdWJkaXJlY3RvcnkgImQiLCB3aGljaCBj b250YWlucyBub3RoaW5nIGF0IGFsbC4gVGh1cyB0aGVyZSBhcmUKLSAgIG5vIGZpbGVzIGluIHRo ZSAiL3Vzci9vbGdhL2EvIiB0cmVlLCBhbmQgc28gaXQgaXMgbm90IHNlbnQsIGFuZAotICAgdGhl cmVmb3JlIGl0IGlzIG5vdCByZXByb2R1Y2VkIG9uIHRoZSB0YXJnZXQgY29tcHV0ZXIuCi0KLTQu MTEuNC4gTmV3IGFuZCBDaGFuZ2VkIEZpbGUgRnVuY3Rpb25zCi0KLSAgIEMtS2VybWl0IDcuMCBh ZGRzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgotCi0gICBcZmZpbGVzKHBhdHRlcm5bLCZhXSkK LSAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGNoYW5nZWQgdG8gbWF0Y2ggb25seSBy ZWd1bGFyIGZpbGVzIGluCi0gICAgICAgICAgdGhlIGN1cnJlbnQgb3IgZ2l2ZW4gZGlyZWN0b3J5 LCBhbmQgdG8gdGFrZSBhbiBvcHRpb25hbCBhcnJheQotICAgICAgICAgIG5hbWUgYXMgYSBzZWNv bmQgYXJndW1lbnQgKGV4cGxhaW5lZCBiZWxvdykuCi0KLSAgIFxmZGlyZWN0b3JpZXMocGF0dGVy blssJmFdKQotICAgICAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBkaXJlY3RvcmllcyB0aGF0 IG1hdGNoIHRoZSBnaXZlbiBwYXR0ZXJuLgotICAgICAgICAgIElmIHRoZSBwYXR0ZXJuIGRvZXMg bm90IGluY2x1ZGUgYSBkaXJlY3RvcnksIHRoZW4gdGhlIHNlYXJjaCBpcwotICAgICAgICAgIHBl cmZvcm1lZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0KLSAgIFxmcmZpbGVzKHBhdHRlcm5b LCZhXSkKLSAgICAgICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZXMgaW4gdGhlIGN1cnJl bnQgb3IgZ2l2ZW4gZGlyZWN0b3J5Ci0gICAgICAgICAgYW5kIGFsbCBvZiBpdHMgc3ViZGlyZWN0 b3JpZXMsIGFuZCB0aGVpciBzdWJkaXJlY3RvcmllcywgZXRjLAotICAgICAgICAgIHRoYXQgbWF0 Y2ggdGhlIGdpdmVuIHBhdHRlcm4uIFdhcm5pbmcgLS0gdGhpcyBvbmUgY2FuIHRha2UgcXVpdGUK LSAgICAgICAgICBzb21lIHRpbWUgaWYgcGVyZm9ybWVkIGF0IHRoZSByb290IG9mIGEgbGFyZ2Ug ZGlyZWN0b3J5IHRyZWUuCi0KLSAgIFxmcmRpcmVjdG9yaWVzKHBhdHRlcm5bLCZhXSkKLSAgICAg ICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGlyZWN0b3JpZXMgaW4gdGhlIGN1cnJlbnQgb3Ig Z2l2ZW4KLSAgICAgICAgICBkaXJlY3RvcnkgYW5kIGFsbCBvZiBpdHMgc3ViZGlyZWN0b3JpZXMs IGFuZCB0aGVpcgotICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLCBldGMsIHRoYXQgbWF0Y2ggdGhl IGdpdmVuIHBhdHRlcm4uCi0KLSAgIEVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGJ1aWxkcyB1cCBh IGxpc3Qgb2YgZmlsZXMgdG8gYmUgcmV0dXJuZWQgYnkgdGhlCi0gICBcZm5leHRmaWxlKCkgZnVu Y3Rpb24sIGp1c3QgYXMgXGZmaWxlcygpIGFsd2F5cyBoYXMgZG9uZS4gKFRoaXMgY2FuCi0gICBh bHNvIGJlIGRvbmUgd2l0aCB0aGUgL0FSUkFZIHN3aXRjaCBvZiB0aGUgRElSRUNUT1JZIGNvbW1h bmQ7IHNlZQotICAgWzUxM11TZWN0aW9ucyA0LjUuMSBhbmQgWzUxNF03LjEwKS4KLQotICAgRWFj aCBvZiB0aGVzZSBmdW5jdGlvbnMgY2FuIGJlIGdpdmVuIGFuIGFycmF5IG5hbWUgYXMgYW4gb3B0 aW9uYWwKLSAgIHNlY29uZCBhcmd1bWVudC4gSWYgYW4gYXJyYXkgbmFtZSBpcyBzdXBwbGllZCwg dGhlIGFycmF5IHdpbGwgY29udGFpbgotICAgdGhlIG51bWJlciBvZiBmaWxlcyBhcyBpdHMgMHRo IGVsZW1lbnQsIGFuZCB0aGUgZmlsZW5hbWVzIGluIGVsZW1lbnRzIDEKLSAgIHRocm91Z2ggbGFz dC4gSWYgdGhlIGFycmF5IGFscmVhZHkgZXhpc3RlZCwgaXRzIHByZXZpb3VzIGNvbnRlbnRzIGFy ZQotICAgbG9zdC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBjb250YWlu cyB0d28gZmlsZXMsCi0gICBvb2ZhLnR4dCBhbmQgZm9vLmJhciwgdGhlbiAiXGZmaWxlcygqLCZh KSIgY3JlYXRlcyBhbiBhcnJheSBcJmFbXSB3aXRoCi0gICBhIGRpbWVuc2lvbiBvZiAyLCBjb250 YWluaW5nIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6Ci0KLSBcJmFbMF0gPSAyCi0gXCZhWzFdID0g b29mYS50eHQKLSBcJmFbMl0gPSBmb28uYmFyCi0KLSAgIElmIG5vIGZpbGVzIG1hdGNoIHRoZSBz cGVjaWZpY2F0aW9uIGdpdmVuIGluIHRoZSBmaXJzdCBhcmd1bWVudCwgdGhlCi0gICBhcnJheSBn ZXRzIGEgZGltZW5zaW9uIG9mIDAsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHVuZGVjbGFyaW5nIHRo ZQotICAgYXJyYXkuCi0KLSAgIE5vdGUgdGhhdCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGFycmF5 IGlzIGZpbGxlZCAoYW5kIGluIHdoaWNoCi0gICBcZm5leHRmaWxlKCkgcmV0dXJucyBmaWxlbmFt ZXMpIGlzIGluZGV0ZXJtaW5hdGUgKGJ1dCBzZWUgWzUxNV1TZWN0aW9uCi0gICA3LjEwLjUpLgot Ci0gICBIZXJlJ3MgYW4gZXhhbXBsZSB0aGF0IGJ1aWxkcyBhbmQgcHJpbnRzIGEgbGlzdCBvZiBh bGwgdGhlIGZpbGUgd2hvc2UKLSAgIG5hbWVzIGVuZCBpbiAudHh0IGluIHRoZSBjdXJyZW50IGRp cmVjdG9yeSBhbmQgYWxsIGl0cyBkZXNjZW5kZW50czoKLQotICBhc2cgXCVuIFxmcmZpbGVzKCou dHh0KQotICBkZWNsYXJlIFwmYVtcJW5dCi0gIGZvciBcJWkgMSBcJW4gMSB7Ci0gICAgICBhc2cg XCZhW1wlaV0gXGZuZXh0ZmlsZSgpCi0gICAgICBlY2hvIFxmbHBhZChcJWksNCkuICJcJmFbXCVp XSIKLSAgfQotCi0gICBBbHRlcm5hdGl2ZWx5LCB1c2luZyB0aGUgYXJyYXkgbWV0aG9kLCBhbmQg dGhlbiBwcmludGluZyB0aGUgZmlsZW5hbWVzCi0gICBpbiBhbHBoYWJldGljIG9yZGVyIChzZWUg WzUxNl1TZWN0aW9uIDcuMTAuMyBhbmQgWzUxN103LjEwLjUpOgotCi0gIGFzZyBcJW4gXGZyZmls ZXMoKi50eHQsJmEpCi0gIHNvcnQgJmEKLSAgZm9yIFwlaSAxIFwlbiAxIHsKLSAgICAgIGVjaG8g XGZscGFkKFwlaSw0KS4gIlwmYVtcJWldIgotICB9Ci0KLSAgIE9yIGV2ZW4gbW9yZSBzaW1wbHk6 Ci0KLSAgYXNnIFwlbiBcZnJmaWxlcygqLnR4dCwmYSkKLSAgc29ydCAmYQotICBzaG93IGFycmF5 ICZhCi0KLSAgIEFzIG5vdGVkIGVsc2V3aGVyZSwgdGhlIGZpbGUgbGlzdHMgYnVpbHQgYnkgXGZm aWxlcygpLCBcZnJmaWxlcygpLCBldGMsCi0gICBhcmUgbm93ICJzYWZlIiBpbiB0aGUgc2Vuc2Ug dGhhdCBTRU5EIGFuZCBvdGhlciBmaWxlLXJlbGF0ZWQgY29tbWFuZHMKLSAgIGNhbiByZWZlcmVu Y2UgXGZuZXh0ZmlsZSgpIHdpdGhvdXQgcmVzZXR0aW5nIHRoZSBsaXN0OgotCi0gIHNldCBzZW5k IHBhdGhuYW1lcyByZWxhdGl2ZQotICBmb3IgXCVpIDEgXGZyZmlsZXMoKi50eHQpIDEgewotICAg ICAgYXNnIFwlYSBcZm5leHRmaWxlKCkKLSAgICAgIGVjaG8gU2VuZGluZyBcJWEuLi4KLSAgICAg IHNlbmQgXCVhCi0gICAgICBpZiBmYWlsIGJyZWFrCi0gIH0KLQotICAgQ29weWluZyB0byBhbiBh cnJheSAoYXMgc2hvd24gb24gcC4zOTggb2YgWzUxOF1Vc2luZyBDLUtlcm1pdCAybmQgRWQpCi0g ICBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LgotCi00LjExLjUuIE1vdmluZyBEaXJlY3RvcnkgVHJl ZXMgQmV0d2VlbiBMaWtlIFN5c3RlbXMKLQotNC4xMS41LjEuIFVOSVggdG8gVU5JWAotCi0gICBU cmFuc2ZlcnJpbmcgYSBkaXJlY3RvcnkgdHJlZSBmcm9tIG9uZSBjb21wdXRlciB0byBhbm90aGVy IHJlcGxpY2F0ZXMKLSAgIHRoZSBmaWxlIHNlbmRlcidzIGFycmFuZ2VtZW50IG9mIGZpbGVzIGFu ZCBkaXJlY3RvcmllcyBvbiB0aGUgZmlsZQotICAgcmVjZWl2ZXIncyBjb21wdXRlci4gTm9ybWFs bHkgdGhpcyBpcyBkb25lIHVzaW5nIHJlbGF0aXZlIHBhdGhuYW1lcywKLSAgIHNpbmNlIHRoZSB1 c2VyIElEcyBtaWdodCBub3QgYmUgaWRlbnRpY2FsIG9uIHRoZSB0d28gY29tcHV0ZXJzLiBMZXQn cwotICAgc2F5IGJvdGggY29tcHV0ZXJzIGFyZSBVTklYIGJhc2VkLCBydW5uaW5nIEMtS2VybWl0 IDcuMCBvciBsYXRlci4gT24KLSAgIHRoZSBzZW5kaW5nIGNvbXB1dGVyIChsZWF2aW5nIG91dCB0 aGUgY29ubmVjdGlvbiBkZXRhaWxzLCBldGMpOgotCi0gIEMtS2VybWl0PiBjZCAvdXNyL29sZ2EK LSAgQy1LZXJtaXQ+IHNlbmQgL3JlY3Vyc2l2ZSAuCi0KLSAgIFRoZSAvUkVDVVJTSVZFIHN3aXRj aCB0ZWxscyBDLUtlcm1pdCB0byBkZXNjZW5kIHRocm91Z2ggdGhlIGRpcmVjdG9yeQotICAgdHJl ZSBhbmQgdG8gaW5jbHVkZSByZWxhdGl2ZSBwYXRobmFtZXMgb24gb3V0Ym91bmQgZmlsZW5hbWVz LgotCi0gICBPbiB0aGUgcmVjZWl2aW5nIGNvbXB1dGVyOgotCi0gIEMtS2VybWl0PiBta2RpciBv bGdhcy1maWxlcyAgICAgICAgICAgOyBNYWtlIGEgbmV3IGRpcmVjdG9yeS4KLSAgQy1LZXJtaXQ+ IGNkIG9sZ2FzLWZpbGVzICAgICAgICAgICAgICA7IENEIHRvIGl0LgotICBDLUtlcm1pdD4gcmVj ZWl2ZSAvcmVjdXJzaXZlICAgICAgICAgIDsgPSAvUEFUSE5BTUVTOlJFTEFUSVZFCi0KLSAgIEVh Y2ggS2VybWl0IHByb2dyYW0gcmVjb2duaXplcyB0aGF0IHRoZSBvdGhlciBpcyBydW5uaW5nIHVu ZGVyIFVOSVggYW5kCi0gICBzd2l0Y2hlcyB0byBiaW5hcnkgbW9kZSBhbmQgbGl0ZXJhbCBmaWxl bmFtZXMgYXV0b21hdGljYWxseS4KLSAgIERpcmVjdG9yaWVzIGFyZSBhdXRvbWF0aWNhbGx5IGNy ZWF0ZWQgb24gdGhlIHJlY2VpdmluZyBzeXN0ZW0gYXMKLSAgIG5lZWRlZC4gRmlsZSBkYXRlcyBh bmQgcGVybWlzc2lvbnMgYXJlIGF1dG9tYXRpY2FsbHkgcmVwcm9kdWNlZCBmcm9tCi0gICBzb3Vy Y2UgdG8gZGVzdGluYXRpb24uCi0KLTQuMTEuNS4yLiBWTVMgdG8gVk1TCi0KLSAgIFRvIHNlbmQg cmVjdXJzaXZlbHkgZnJvbSBWTVMsIHNpbXBseSBpbmNsdWRlIHRoZSAvUkVDVVJTSVZFIHN3aXRj aCwgZm9yCi0gICBleGFtcGxlIGF0IHRoZSBzZW5kZXI6Ci0KLSAgJCBrZXJtaXQKLSAgQy1LZXJt aXQ+IGNkIFtvbGdhXQotICBDLUtlcm1pdD4gc2VuZCAvcmVjdXJzaXZlICouKjswCi0KLSAgIEFu ZCBhdCB0aGUgcmVjZWl2ZXI6Ci0KLSAgQy1LZXJtaXQ+IGNkIFsub2xnYV0KLSAgQy1LZXJtaXQ+ IHJlY2VpdmUgL3JlY3Vyc2l2ZQotCi0gICBUaGUgbm90YXRpb24gIi4uLiIgd2l0aGluIGRpcmVj dG9yeSBicmFja2V0cyBpbiBWTVMgbWVhbnMgInRoaXMKLSAgIGRpcmVjdG9yeSBhbmQgYWxsIGRp cmVjdG9yaWVzIGJlbG93IGl0IjsgdGhlIC9SRUNVUlNJVkUgc3dpdGNoLCB3aGVuCi0gICBnaXZl biB0byB0aGUgc2VuZGVyLCBpbXBsaWVzIHRoZSB1c2Ugb2YgIi4uLiIgaW4gdGhlIGZpbGUgc3Bl Y2lmaWNhdGlvbgotICAgc28geW91IGRvbid0IGhhdmUgdG8gaW5jbHVkZSAiLi4uIjsgYnV0IGl0 IG1ha2VzIG5vIGRpZmZlcmVuY2UgaWYgeW91Ci0gICBkbzoKLQotICAkIGtlcm1pdAotICBDLUtl cm1pdD4gc2VuZCAvcmVjdXJzaXZlIFtvbGdhLi4uXSouKjswCi0KLSAgIEFuZCBhdCB0aGUgcmVj ZWl2ZXI6Ci0KLSAgQy1LZXJtaXQ+IGNkIFsub2xnYV0KLSAgQy1LZXJtaXQ+IHJlY2VpdmUgL3Jl Y3Vyc2l2ZQotCi0gICBJbiBlaXRoZXIgY2FzZSwgc2luY2UgYm90aCBzeXN0ZW1zIHJlY29nbml6 ZSBlYWNoIG90aGVyIGFzIFZNUywgdGhleQotICAgc3dpdGNoIGludG8gTEFCRUxFRCB0cmFuc2Zl ciBtb2RlIGF1dG9tYXRpY2FsbHkuCi0KLTQuMTEuNi4gTW92aW5nIERpcmVjdG9yeSBUcmVlcyBC ZXR3ZWVuIFVubGlrZSBTeXN0ZW1zCi0KLSAgIFRoZXJlIGFyZSBzZXZlcmFsIGRpZmZpY3VsdGll cyB3aXRoIHJlY3Vyc2l2ZSB0cmFuc2ZlcnMgYmV0d2VlbiB1bmxpa2UKLSAgIHN5c3RlbXM6Ci0K LSAgICAgKiBGaWxlIGZvcm1hdHMgY2FuIGJlIGRpZmZlcmVudCwgZXNwZWNpYWxseSB0ZXh0IGZp bGVzIGNoYXJhY3RlciBzZXRzCi0gICAgICAgYW5kIHJlY29yZCBmb3JtYXRzLiBUaGlzIGNhbiBu b3cgYmUgaGFuZGxlZCBieSB1c2luZyBTRVQgRklMRQotICAgICAgIFBBVFRFUk4sIFNFVCBGSUxF IFRFWFQtUEFUVEVSTlMsIGFuZCBTRVQgRklMRSBCSU5BUlktUEFUVEVSTlMKLSAgICAgICAoWzUx OV1TZWN0aW9uIDQuMykuCi0gICAgICogRmlsZSBuYW1pbmcgY29udmVudGlvbnMgYXJlIGRpZmZl cmVudC4gRm9yIGV4YW1wbGUsIG9uZSBzeXN0ZW0KLSAgICAgICBtaWdodCBhbGxvdyAoYW5kIHVz ZSkgbG9uZ2VyIGZpbGVuYW1lcyB0aGFuIHRoZSBvdGhlci4gWW91IGNhbiB0ZWxsCi0gICAgICAg S2VybWl0IGhvdyB0byBoYW5kbGUgZmlsZSBuYW1lcyB3aXRoIHRoZSBub3JtYWwgInNldCBmaWxl IG5hbWVzIgotICAgICAgIGFuZCAic2V0IGZpbGUgY29sbGlzaW9uIiBtZWNoYW5pc21zLiBNb3N0 IG1vZGVybiBLZXJtaXRzIGFyZSBmYWlybHkKLSAgICAgICB0b2xlcmFudCBvZiBpbGxlZ2FsIGZp bGVuYW1lcyBhbmQgc2hvdWxkIG5vdCBmYWlsIHNpbXBseSBiZWNhdXNlIG9mCi0gICAgICAgYW4g aW5jb21pbmcgZmlsZW5hbWU7IHJhdGhlciwgaXQgd2lsbCBkbyBpdHMgYmVzdCB0byBjb252ZXJ0 IGl0IHRvCi0gICAgICAgYSByZWNvZ25pemFibGUgYW5kIHVuaXF1ZSBsZWdhbCBmaWxlbmFtZS4K LSAgICAgKiBEaXJlY3Rvcnkgbm90YXRpb25zIGNhbiBiZSBkaWZmZXJlbnQsIGUuZy4gYmFja3Ns YXNoZXMgaW5zdGVhZCBvZgotICAgICAgIHNsYXNoZXMsIGJyYWNrZXRzLCBwYXJlbnRoZXNlcywg c3BhY2VzLCBldGMuIEJ1dCB0aGlzIGlzIG5vdwotICAgICAgIGhhbmRsZWQgYnkgY29udmVydGlu ZyBwYXRobmFtZXMgdG8gYSBzdGFuZGFyZCBmb3JtYXQgZHVyaW5nCi0gICAgICAgdHJhbnNmZXIg KFs1MjBdU2VjdGlvbiA0LjEwKS4KLQotICAgU28gbm93LCBmb3IgdGhlIGZpcnN0IHRpbWUsIGl0 IGlzIHBvc3NpYmxlIHRvIHNlbmQgZGlyZWN0b3J5IHRyZWVzCi0gICBhbW9uZyBhbnkgY29tYmlu YXRpb24gb2YgVU5JWCwgRE9TLCBXaW5kb3dzLCBPUy8yLCBWTVMsIEFPUy9WUywgZXRjLgotICAg SGVyZSdzIGFuIGV4YW1wbGUgc2VuZGluZyBmaWxlcyBmcm9tIGFuIEhQLVVYIHN5c3RlbSAod2hl cmUgdGV4dCBmaWxlcwotICAgYXJlIGVuY29kZWQgaW4gdGhlIEhQIFJvbWFuOCBjaGFyYWN0ZXIg c2V0KSB0byBhIFBDIHdpdGggSzk1ICh3aGVyZQotICAgdGV4dCBmaWxlcyBhcmUgZW5jb2RlZCBp biBDUDg1MCk6Ci0KLSBTZW5kZXI6Ci0gIGNkIHh4eCAgICAgICAgICAgICAgICAgICAgICAgICAg IDsgQ0QgdG8gcm9vdCBvZiBzb3VyY2UgdHJlZQotICBzZXQgZmlsZSB0eXBlIGJpbmFyeSAgICAg ICAgICAgICA7IERlZmF1bHQgdHJhbnNmZXIgbW9kZQotICBzZXQgZmlsZSBjaGFyYWN0ZXItc2V0 IGhwLXJvbWFuOCA7IExvY2FsIGNoYXJhY3RlciBzZXQgZm9yIHRleHQgZmlsZXMKLSAgc2V0IHhm ZXIgY2hhcmFjdGVyLXNldCBsYXRpbjEgICAgOyBUcmFuc2ZlciBjaGFyYWN0ZXIgc2V0Ci0gIHNl dCBmaWxlIHBhdHRlcm5zIG9uICAgICAgICAgICAgIDsgRW5hYmxlIGF1dG9tYXRpYyBmaWxlLXR5 cGUgc3dpdGNoaW5nLi4uCi0gIHNldCBmaWxlIGJpbmFyeS1wYXR0ZXJucyAqLlogKi5neiAqLm8g IDsgYmFzZWQgb24gdGhlc2UgcGF0dGVybnMuLi4KLSAgc2V0IGZpbGUgdGV4dC1wYXR0ZXJucyAq LnR4dCAqLmMgKi5oICAgOyBmb3IgYmluYXJ5IGFuZCB0ZXh0IGZpbGVzLgotICBzZW5kIC9yZWN1 cnNpdmUgKiAgICAgICAgICAgICAgICA7IFNlbmQgYWxsIHRoZSBmaWxlIGluIHRoaXMgZGlyZWN0 b3J5IHRyZWUKLQotIFJlY2VpdmVyOgotICBjZCB5eXkgICAgICAgICAgICAgICAgICAgICAgICAg ICA7IENEIHRvIHJvb3Qgb2YgZGVzdGluYXRpb24gdHJlZQotICBzZXQgZmlsZSBjaGFyYWN0ZXIt c2V0IGNwODUwICAgICA7IExvY2FsIGNoYXJhY3RlciBzZXQgZm9yIHRleHQgZmlsZXMKLSAgcmVj ZWl2ZSAvcGF0aG5hbWVzOnJlbGF0aXZlICAgICAgOyBSZWNlaXZlIHdpdGggcGF0aG5hbWVzCi0K LSAgIE5vdGVzOgotICAgICAqIFJlcGxhY2UgInh4eCIgYW5kICJ5eXkiIHdpdGggdGhlIGRlc2ly ZWQgZGlyZWN0b3JpZXMuCi0gICAgICogUmVwbGFjZSB0aGUgZmlsZSBjaGFyYWN0ZXIgc2V0cyBh cHByb3ByaWF0ZWx5LgotICAgICAqIENoYW5nZSB0aGUgcGF0dGVybnMgYXMgbmVlZGVkIChvciBq dXN0IHVzZSB0aGUgYnVpbHQtaW4gZGVmYXVsdAotICAgICAgIGxpc3RzKS4KLSAgICAgKiBTRU5E IC9SRUNVUlNJVkUgYWxzbyBpbXBsaWVzIC9QQVRITkFNRVM6UkVMQVRJVkUuCi0gICAgICogVGhl IGZpbGUgc2VuZGVyIHRlbGxzIHRoZSBmaWxlIHJlY2VpdmVyIHRoZSB0cmFuc2ZlciBtb2RlIG9m IGVhY2gKLSAgICAgICBmaWxlLgotICAgICAqIFRoZSBmaWxlIHNlbmRlciB0ZWxscyB0aGUgZmls ZSByZWNlaXZlciB0aGUgdHJhbnNmZXIgY2hhcmFjdGVyIHNldC4KLSAgICAgKiBCeSBkZWZhdWx0 LCBkZXN0aW5hdGlvbiBmaWxlIGRhdGVzIHdpbGwgYmUgdGhlIHNhbWUgYXMgb24gdGhlCi0gICAg ICAgc291cmNlLgotICAgICAqIE1hbnkgb2YgdGhlIHNldHRpbmdzIHNob3duIG1pZ2h0IGFscmVh ZHkgYmUgc2V0IGJ5IGRlZmF1bHQuCi0gICAgICogU2VlIFs1MjFdU2VjdGlvbnMgNC4zLCBbNTIy XTQuMTAsIGFuZCBbNTIzXTQuMTUgZm9yIGFkZGl0aW9uYWwKLSAgICAgICBleHBsYW5hdGlvbi4K LQotICAgSWYgeW91IGFyZSByZWZyZXNoaW5nIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSBvbiB0aGUg ZGVzdGluYXRpb24KLSAgIGNvbXB1dGVyLCB1c2UgInNldCBmaWxlIGNvbGxpc2lvbiB1cGRhdGUi IG9yIG90aGVyIGFwcHJvcHJpYXRlIGZpbGUKLSAgIGNvbGxpc2lvbiBvcHRpb24gdG8gaGFuZGxl IGZpbGVuYW1lIGNvbGxpc2lvbnMuCi0KLTQuMTIuIFdoZXJlIERpZCBNeSBGaWxlIEdvPwotCi0g ICBOb3cgdGhhdCBLZXJtaXQgY2FuIGJlIHN0YXJ0ZWQgYnkgY2xpY2tpbmcgb24gZGVza3RvcCBp Y29ucyAodGh1cwotICAgb2JzY3VyaW5nIHRoZSBjb25jZXB0IG9mICJjdXJyZW50IGRpcmVjdG9y eSIpLCBhbmQgY2FuIGhhdmUgYSBkb3dubG9hZAotICAgZGlyZWN0b3J5LCBhbmQgY2FuIGNyZWF0 ZSBkaXJlY3RvcmllcyBmb3IgaW5jb21pbmcgZmlsZXMgb24gdGhlIGZseSwKLSAgIGV0Yywgc29t ZXRpbWVzIGl0IGlzIGVhc3kgdG8gbG9zZSBhIGZpbGUgYWZ0ZXIgdHJhbnNmZXIuIE9mIGNvdXJz ZSwgaWYKLSAgIHlvdSBrZWVwIGEgdHJhbnNhY3Rpb24gbG9nOgotCi0gIExPRyBUUkFOU0FDVElP TlMKLQotICAgaXQgd2lsbCByZWNvcmQgdGhlIGZhdGUgYW5kIGZpbmFsIHJlc3RpbmcgcGxhY2Ug b2YgZWFjaCBmaWxlLiBCdXQgaW4KLSAgIGNhc2UgeW91IGRpZCBub3Qga2VlcCBhIGxvZywgdGhl IG5ldyBjb21tYW5kOgotCi0gIFdIRVJFCi0KLSAgIGFkZGVkIGluIEMtS2VybWl0IDcuMCwgZ2l2 ZXMgeW91IGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgaXQgaGFzIGFib3V0Ci0gICB0aGUgbG9jYXRp b24gb2YgdGhlIGxhc3QgZmlsZXMgdHJhbnNmZXJyZWQsIGluY2x1ZGluZyB0aGUgcGF0aG5hbWUK LSAgIHJlcG9ydGVkIGJ5IHRoZSByZWNlaXZpbmcgS2VybWl0LCBpZiBhbnksIHdoZW4gQy1LZXJt aXQgaXMgdGhlIHNlbmRlci4KLSAgIFRoaXMgaW5mb3JtYXRpb24gd2FzIGFsc28gYWRkZWQgdG8g U0hPVyBGSUxFIGluIHNvbWV3aGF0IGxlc3MgZGV0YWlsLgotCi00LjEzLiBGaWxlIE91dHB1dCBC dWZmZXIgQ29udHJvbAotCi0gICAoVU5JWCBvbmx5KS4gVGhlIG5ldyBjb21tYW5kIFNFVCBGSUxF IE9VVFBVVCBsZXRzIHlvdSBjb250cm9sIGhvdwotICAgaW5jb21pbmcgZmlsZXMgYXJlIHdyaXR0 ZW4gdG8gZGlzazoKLQotICAgU0VUIEZJTEUgT1VUUFVUIEJVRkZFUkVEIFsgc2l6ZSBdCi0gICAg ICAgICAgQ2hvb3NlcyBidWZmZXJlZCBmaWxlIG91dHB1dDsgdGhpcyBpcyB0aGUgZGVmYXVsdC4g VU5JWCBkb2VzIGl0cwotICAgICAgICAgIG5vcm1hbCBzb3J0IG9mIGRpc2sgYnVmZmVyaW5nLiBU aGUgb3B0aW9uYWwgc2l6ZSBzcGVjaWZpZXMKLSAgICAgICAgICBLZXJtaXQncyBvd24gZmlsZSBv dXRwdXQgYnVmZmVyIHNpemUsIGFuZCB0aGVyZWZvcmUgdGhlCi0gICAgICAgICAgZnJlcXVlbmN5 IG9mIGRpc2sgYWNjZXNzZXMgKHdyaXRlKCkgc3lzdGVtIGNhbGxzKSAtLSB0aGUgYmlnZ2VyCi0g ICAgICAgICAgdGhlIHNpemUsIHRoZSBmZXdlciB0aGUgZGlzayBhY2Nlc3Nlcy4KLQotICAgU0VU IEZJTEUgT1VUUFVUIFVOQlVGRkVSRUQgWyBzaXplIF0KLSAgICAgICAgICBUaGlzIGZvcmNlcyBl YWNoIGZpbGUgb3V0cHV0IHdyaXRlKCkgY2FsbCB0byBhY3R1YWxseSBjb21taXQgdGhlCi0gICAg ICAgICAgZGF0YSB0byBkaXNrIGltbWVkaWF0ZWx5LiBDaG9vc2luZyB0aGlzIG9wdGlvbiB3aWxs IHVzdWFsbHkgc2xvdwotICAgICAgICAgIGZpbGUgcmVjZXB0aW9uIGRvd24uCi0KLSAgIFNFVCBG SUxFIE9VVFBVVCBCTE9DS0lORwotICAgICAgICAgIFdyaXRlKCkgY2FsbHMgc2hvdWxkIG5vdCBy ZXR1cm4gdW50aWwgdGhleSBhcmUgY29tcGxldGUuIFRoaXMgaXMKLSAgICAgICAgICB0aGUgbm9y bWFsIHNldHRpbmcsIGFuZCBpdCBsZXRzIEtlcm1pdCBkZXRlY3QgZGlzay13cml0ZSBlcnJvcnMK LSAgICAgICAgICBpbW1lZGlhdGVseS4KLQotICAgU0VUIEZJTEUgT1VUUFVUIE5PTkJMT0NLSU5H Ci0gICAgICAgICAgV3JpdGUoKSBjYWxscyBzaG91bGQgcmV0dXJuIGltbWVkaWF0ZWx5LiBUaGlz IGNhbiBzcGVlZCB1cCBmaWxlCi0gICAgICAgICAgcmVjZXB0aW9uLCBidXQgYWxzbyBkZWxheSB0 aGUgZGV0ZWN0aW9uIG9mIGRpc2std3JpdGUgZXJyb3JzLgotCi0gICBFeHBlcmltZW50YXRpb24g d2l0aCB0aGVzZSBwYXJhbWV0ZXJzIHNob3VsZCBiZSBoYXJtbGVzcywgYW5kIG1pZ2h0IChvcgot ICAgbWlnaHQgbm90KSBoYXZlIGEgcGVyY2VwdGlibGUsIGV2ZW4gZHJhbWF0aWMsIGVmZmVjdCBv biBwZXJmb3JtYW5jZS4KLQotNC4xNC4gSW1wcm92ZWQgUmVzcG9uc2l2ZW5lc3MKLQotICAgSW4g dmVyc2lvbiA3LjAsIEMtS2VybWl0J3MgZmlsZS10cmFuc2ZlciBwcm90b2NvbCBlbmdpbmUgaGFz IGJlZW4gdHVuZWQKLSAgIGZvciBhZGRpdGlvbmFsIHNwZWVkIGFuZCByZXNwb25zaXZlbmVzcy4K LQotICAgICAqIEJpbmFyeS1tb2RlIHRyYW5zZmVycyBvdmVyIDgtYml0IGNvbm5lY3Rpb25zLCBh IHZlcnkgY29tbW9uIGNhc2UsCi0gICAgICAgYXJlIG5vdyBoYW5kbGVkIGluIGEgc3BlY2lhbCB3 YXkgdGhhdCBtaW5pbWl6ZXMgb3ZlcmhlYWQuCi0gICAgICogU0VUIFRSQU5TRkVSIENSQy1DQUxD VUxBVElPTiBpcyBub3cgT0ZGIGJ5IGRlZmF1bHQsIHJhdGhlciB0aGFuIE9OLgotICAgICAgIChU aGlzIGFmZmVjdHMgb25seSB0aGUgb3ZlcmFsbCBwZXItdHJhbnNmZXIgQ1JDLCBcdihjcmMxNiks IG5vdCB0aGUKLSAgICAgICBwZXItcGFja2V0IENSQ3MpCi0gICAgICogQ29ubmVjdGlvbiBsb3Nz IGR1cmluZyBmaWxlIHRyYW5zZmVyIGlzIG5vdyBkZXRlY3RlZCBpbW1lZGlhdGVseSBpbgotICAg ICAgIG1vc3QgY2FzZXMgb24gSW50ZXJuZXQgY29ubmVjdGlvbnMgYW5kIG9uIHNlcmlhbCBjb25u ZWN0aW9ucyB3aGVuCi0gICAgICAgQ0FSUklFUi1XQVRDSCBpcyBub3Qgc2V0IHRvIE9GRi4KLQot NC4xNS4gRG91YmxpbmcgYW5kIElnbm9yaW5nIENoYXJhY3RlcnMgZm9yIFRyYW5zcGFyZW5jeQot Ci0gICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHdlcmUgYWRkZWQgaW4gNy4wLCBwcmltYXJpbHkg dG8gYWxsb3cgc3VjY2Vzc2Z1bAotICAgZmlsZSB0cmFuc2ZlciB0aHJvdWdoIEFSUEFuZXQgVEFD cyBhbmQgd2l0aCBIb25leXdlbGwgRFBTNiBzeXN0ZW1zLCBidXQKLSAgIGNhbiBiZSB1c2VkIGlu IGFueSBzZXR0aW5nIHdoZXJlIHRoZXkgbWlnaHQgYmUgbmVlZGVkOgotCi0gICBTRVQgU0VORCBE T1VCTEUtQ0hBUiB7IFsgY2hhciBbIGNoYXIgWyAuLi4gXSBdIF0sIE5PTkUgfQotICAgICAgICAg IFRlbGxzIEMtS2VybWl0IHRvIGRvdWJsZSB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlcnMgKHVzZSBk ZWNpbWFsCi0gICAgICAgICAgbm90YXRpb24pIGluIHBhY2tldHMgdGhhdCBpdCBzZW5kcy4gRm9y IGV4YW1wbGUsIGlmIHlvdSBhcmUKLSAgICAgICAgICBzZW5kaW5nIGZpbGVzIHRocm91Z2ggYSBk ZXZpY2UgdGhhdCB1c2VzIEAgYXMgYW4gZXNjYXBlCi0gICAgICAgICAgY2hhcmFjdGVyLCBidXQg YWxsb3dzIHlvdSB0byBzZW5kIGEgc2luZ2xlIGNvcHkgb2YgQCB0aHJvdWdoIGJ5Ci0gICAgICAg ICAgZG91YmxpbmcgaXQsIHVzZSAic2V0IHNlbmQgZG91YmxlIDY0Ii4KLQotICAgU0VUIFJFQ0VJ VkUgSUdOT1JFLUNIQVIgWyBjaGFyIFsgY2hhciBbIC4uLiBdIF0gXQotICAgICAgICAgIFRlbGxz IEMtS2VybWl0IHRvIGlnbm9yZSB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlcihzKSBpbiBpbmNvbWlu ZwotICAgICAgICAgIHBhY2tldHMuIFVzZSB0aGlzLCBmb3IgZXhhbXBsZSwgd2hlbiBzb21ldGhp bmcgYmV0d2VlbiB0aGUKLSAgICAgICAgICBzZW5kZXIgYW5kIHJlY2VpdmVyIGlzIGluc2VydGlu ZyBsaW5lZmVlZHMgZm9yIHdyYXBwaW5nLCBOVUxzCi0gICAgICAgICAgZm9yIHBhZGRpbmcsIGV0 Yy4KLQotNC4xNi4gTmV3IEZpbGUtVHJhbnNmZXIgRGlzcGxheSBGb3JtYXRzCi0KLSAgIFNFVCBU UkFOU0ZFUiBESVNQTEFZIHsgQlJJRUYsIENSVCwgRlVMTFNDUkVFTiwgTk9ORSwgU0VSSUFMIH0K LSAgICAgICAgICBTZWxlY3RzIHRoZSBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgZm9ybWF0LgotCi0g ICBCUklFRiBpcyB0aGUgbmV3IG9uZS4gVGhpcyB3cml0ZXMgb25lIGxpbmUgdG8gdGhlIHNjcmVl biBwZXIgZmlsZSwKLSAgIHNob3dpbmcgdGhlIGZpbGUncyBuYW1lLCB0cmFuc2ZlciBtb2RlLCBz aXplLCB0aGUgc3RhdHVzIG9mIHRoZQotICAgdHJhbnNmZXIsIGFuZCB3aGVuIHRoZSB0cmFuc2Zl ciBpcyBzdWNjZXNzZnVsLCB0aGUgZWZmZWN0aXZlIGRhdGEgcmF0ZQotICAgaW4gY2hhcmFjdGVy cyBwZXIgc2Vjb25kIChDUFMpLiBFeGFtcGxlOgotCi0gIFNFTkQgY2tjZm4zLm8gKGJpbmFyeSkg KDU5MjE2IGJ5dGVzKTogT0sgKDAuMTA0IHNlYywgNTcwMjA2IGNwcykKLSAgU0VORCBja2NmbnMu byAoYmluYXJ5KSAoMTE0NDM2IGJ5dGVzKTogT0sgKDAuMTQ4IHNlYywgNzcyMDA2IGNwcykKLSAg U0VORCBja2NtYWkuYyAodGV4dCkgKDc5MTQ3IGJ5dGVzKTogT0sgKDAuMTgwIHNlYywgNDM4NTQz IGNwcykKLSAgU0VORCBja2NtYWkubyAoYmluYXJ5KSAoMzUzOTYgYnl0ZXMpOiBPSyAoMC4wNjAg c2VjLCA1ODc0OTQgY3BzKQotICBTRU5EIGNrY25ldC5vIChiaW5hcnkpICg2Mjc3MiBieXRlcyk6 IFJFRlVTRUQKLSAgU0VORCBja2Nwcm8ubyAoYmluYXJ5KSAoMTIxNDQ4IGJ5dGVzKTogT0sgKDAu MTczIHNlYywgNzAzOTI4IGNwcykKLSAgU0VORCBja2Nwcm8udyAodGV4dCkgKDYzNjg3IGJ5dGVz KTogT0sgKDAuMTQxIHNlYywgNDUzMDU5IGNwcykKLSAgU0VORCBtYWtlZmlsZSAodGV4dCkgKDE4 NjYzNiBieXRlcyk6IE9LICgwLjQ0NCBzZWMsIDQyMDQ3MSBjcHMpCi0gIFNFTkQgd2VybWl0IChi aW5hcnkpICgxMDY0OTYwIGJ5dGVzKTogT0sgKDIuMjA3IHNlYywgNDgyNDc3IGNwcykKLQotICAg Tm90ZSB0aGF0IHRyYW5zZmVyIHRpbWVzIGFyZSBub3cgb2J0YWluZWQgaW4gZnJhY3Rpb25hbCBz ZWNvbmRzLCByYXRoZXIKLSAgIHRoYW4gd2hvbGUgc2Vjb25kcywgc28gdGhlIENQUyBmaWd1cmVz IGFyZSBtb3JlIGFjY3VyYXRlICh0aGUgZGlzcGxheQotICAgc2hvd3MgMyBkZWNpbWFsIHBsYWNl cywgYnV0IGludGVybmFsbHkgdGhlIGZpZ3VyZSBpcyBnZW5lcmFsbHkgcHJlY2lzZQotICAgdG8g dGhlIG1pY3Jvc2Vjb25kKS4KLQotNC4xNy4gTmV3IFRyYW5zYWN0aW9uIExvZyBGb3JtYXRzCi0K LSAgIFRoZSBuZXcgY29tbWFuZDoKLQotICBTRVQgVFJBTlNBQ1RJT04tTE9HIHsgVkVSQk9TRSwg RlRQLCBCUklFRiBbIHNlcGFyYXRvciBdIH0KLQotICAgbGV0cyB5b3UgY2hvb3NlIHRoZSBmb3Jt YXQgb2YgdGhlIHRyYW5zYWN0aW9uIGxvZy4gVkVSQk9TRSAodGhlCi0gICBkZWZhdWx0KSBpbmRp Y2F0ZXMgdGhlIHRyYWRpdGlvbmFsIGZvcm1hdCBkZXNjcmliZWQgaW4gdGhlIGJvb2suIEJSSUVG Ci0gICBhbmQgRlRQIGFyZSBuZXcuIFRoaXMgY29tbWFuZCBtdXN0IGJlIGdpdmVuIHByaW9yIHRv IHRoZSBMT0cKLSAgIFRSQU5TQUNUSU9OIGNvbW1hbmQgaWYgYSBub24tVkVSQk9TRSB0eXBlIGlz IGRlc2lyZWQuCi0KLTQuMTcuMS4gVGhlIEJSSUVGIEZvcm1hdAotCi0gICBCUklFRiBjaG9vc2Vz IGEgb25lLWxpbmUgcGVyIGZpbGUgZm9ybWF0IHN1aXRhYmxlIGZvciBkaXJlY3QKLSAgIGltcG9y dGF0aW9uIGludG8gZGF0YWJhc2VzIGxpa2UgSW5mb3JtaXgsIE9yYWNsZSwgb3IgU3liYXNlLCBp biB3aGljaDoKLQotICAgICAqIEVhY2ggcmVjb3JkIGhhcyA4IGZpZWxkcy4KLSAgICAgKiBGaWVs ZHMgYXJlIHNlcGFyYXRlZCBieSBhIG5vbi1hbHBoYW51bWVyaWMgc2VwYXJhdG9yIGNoYXJhY3Rl ci4KLSAgICAgKiBUaGUgZGVmYXVsdCBzZXBhcmF0b3IgY2hhcmFjdGVyIGlzIGNvbW1hICgsKS4K LSAgICAgKiBBbnkgZmllbGQgY29udGFpbmluZyB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlciBpcyBl bmNsb3NlZCBpbgotICAgICAgIGRvdWJsZXF1b3Rlcy4KLSAgICAgKiBUaGUgZmluYWwgZmllbGQg aXMgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzLgotCi0gICBUaGUgZmllbGRzIGFyZToKLQotICAg IDEuIERhdGUgaW4geXl5eW1tZGQgZm9ybWF0Ci0gICAgMi4gVGltZSBpbiBoaDptbTpzcyBmb3Jt YXQKLSAgICAzLiBBY3Rpb246IFNFTkQgb3IgUkVDVgotICAgIDQuIFRoZSBsb2NhbCBmaWxlbmFt ZQotICAgIDUuIFRoZSBzaXplIG9mIHRoZSBmaWxlCi0gICAgNi4gVGhlIHRyYW5zZmVyIG1vZGUg KHRleHQsIGJpbmFyeSwgaW1hZ2UsIGxhYmVsZWQpCi0gICAgNy4gVGhlIHN0YXR1cyBvZiB0aGUg dHJhbnNmZXI6IE9LIG9yIEZBSUxFRAotICAgIDguIEFkZGl0aW9uYWwgc3RhdHVzLWRlcGVuZGVu dCBpbmZvLCBpbiBkb3VibGVxdW90ZXMuCi0KLSAgIEV4YW1wbGVzOgotCi0gIDIwMDAwMjA4LDEy OjA4OjUyLFJFQ1YsL3Uvb2xnYS9vb2ZhLnR4dCw1MjQ2LHRleHQsT0ssIjAuMjg0c2VjIDE4NDQz Y3BzIgotICAyMDAwMDIwOCwxMjowOTozMSxTRU5ELC91L29sZ2Evb29mYS5leGUsMzI3NjgsYmlu YXJ5LE9LLCIxLjI0M3NlYyAyNjM2MmNwcyIKLSAgMjAwMDAyMDgsMTI6MTA6MDIsU0VORCwiL3Uv b2xnYS9hLGIiLDEwMTMwLHRleHQsRkFJTEVELCJSZWZ1c2VkOiBkYXRlIgotCi0gICBOb3RlIGhv dyB0aGUgZmlsZW5hbWUgaXMgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzIGluIHRoZSBmaW5hbCBl eGFtcGxlLAotICAgYmVjYXVzZSBpdCBjb250YWlucyBhIGNvbW1hLgotCi0gICBUbyBvYnRhaW4g QlJJRUYgZm9ybWF0LCB5b3UgbXVzdCBnaXZlIHRoZSBTRVQgVFJBTlNBQ1RJT04tTE9HIEJSSUVG Ci0gICBjb21tYW5kIGJlZm9yZSB0aGUgTE9HIFRSQU5TQUNUSU9OUyBjb21tYW5kLiAoSWYgeW91 IGdpdmUgdGhlbSBpbiB0aGUKLSAgIG9wcG9zaXRlIG9yZGVyLCBhIGhlYWRpbmcgaXMgd3JpdHRl biB0byB0aGUgbG9nIGJ5IHRoZSBMT0cgY29tbWFuZC4pCi0KLTQuMTcuMi4gVGhlIEZUUCBGb3Jt YXQKLQotICAgU0VUIFRSQU5TQUNUSU9OLUxPRyBGVFAgKGF2YWlsYWJsZSBvbmx5IGluIFVOSVgp IGNob29zZXMgYSBmb3JtYXQgdGhhdAotICAgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBXVS1GVFBE IChXYXNoaW5ndG9uIFVuaXZlcnNpdHkgRlRQIGRhZW1vbikgbG9nLAotICAgYW5kIHNvIGNhbiBi ZSBwcm9jZXNzZWQgYnkgYW55IHNvZnR3YXJlIHRoYXQgcHJvY2Vzc2VzIHRoZSBXVS1GVFBEIGxv Zy4KLSAgIEl0IGxvZ3Mgb25seSB0cmFuc2ZlcnMgaW4gYW5kIG91dCwgYm90aCBzdWNjZXNzZnVs IGFuZCBmYWlsZWQgKGJ1dAotICAgc3VjY2VzcyBvciBmYWlsdXJlIGlzIG5vdCBpbmRpY2F0ZWQs IGR1ZSB0byBsYWNrIG9mIGEgZmllbGQgaW4gdGhlCi0gICBXVS1GVFBEIGxvZyBmb3JtYXQgZm9y IHRoaXMgcHVycG9zZSkuIE5vbi10cmFuc2ZlciBldmVudHMgYXJlIG5vdAotICAgcmVjb3JkZWQu Ci0KLSAgIFVubGlrZSBvdGhlciBsb2dzLCB0aGUgRlRQLWZvcm1hdCB0cmFuc2FjdGlvbiBsb2cg aXMgb3BlbmVkIGluIGFwcGVuZAotICAgbW9kZSBieSBkZWZhdWx0LiBUaGlzIGFsbG93cyB5b3Ug dG8gZWFzaWx5IGtlZXAgYSByZWNvcmQgb2YgYWxsIHlvdXIKLSAgIGtlcm1pdCB0cmFuc2ZlcnMs IGFuZCBpdCBhbHNvIGFsbG93cyB0aGUgc2FtZSBsb2cgdG8gYmUgc2hhcmVkIGJ5Ci0gICBtdWx0 aXBsZSBzaW11bHRhbmVvdXMgS2VybWl0IHByb2Nlc3NlcyBvciAocGVybWlzc2lvbnMgcGVybWl0 dGluZykKLSAgIHVzZXJzLiBZb3UgY2FuLCBvZiBjb3Vyc2UsIGZvcmNlIGNyZWF0aW9uIG9mIGEg bmV3IGxvZ2ZpbGUgYnkKLSAgIHNwZWNpZnlpbmcgdGhlIE5FVyBrZXl3b3JkIGFmdGVyIHRoZSBm aWxlbmFtZSwgZS5nLgotCi0gIGxvZyB0cmFuc2FjdGlvbnMgb29mYS5sb2cgbmV3Ci0KLSAgIEFs bCByZWNvcmRzIGluIHRoZSBGVFAtc3R5bGUgbG9nIGFyZSBpbiBhIGNvbnNpc3RlbnQgZm9ybWF0 LiBUaGUgZmlyc3QKLSAgIGZpZWxkIGlzIGZpeGVkLWxlbmd0aCBhbmQgY29udGFpbnMgc3BhY2Vz OyBzdWJzZXF1ZW50IGZpZWxkcyBhcmUKLSAgIHZhcmlhYmxlIGxlbmd0aCwgY29udGFpbiBubyBz cGFjZXMsIGFuZCBhcmUgc2VwYXJhdGVkIGJ5IG9uZSBvciBtb3JlCi0gICBzcGFjZXMuIFRoZSBm aWVsZHMgYXJlOgotCi0gICBUaW1lc3RhbXAKLSAgICAgICAgICBUaGlzIGlzIGFuIGFzY3RpbWUt c3R5bGUgdGltZXN0YW1wLCBleGFtcGxlOiAiV2VkIFNlcCAxNgotICAgICAgICAgIDIwOjE5OjA1 IDE5OTkiIEl0IGlzIGFsd2F5cyBleGFjdGx5IDI0IGNoYXJhY3RlcnMgbG9uZywgYW5kIHRoZQot ICAgICAgICAgIHN1YmZpZWxkcyBhcmUgYWx3YXlzIGluIGZpeGVkIHBvc2l0aW9ucy4KLQotICAg RWxhcHNlZCB0aW1lCi0gICAgICAgICAgVGhlIHdob2xlIG51bWJlciBvZiBzZWNvbmRzIHJlcXVp cmVkIHRvIHRyYW5zZmVyIHRoZSBmaWxlLCBhcyBhCi0gICAgICAgICAgc3RyaW5nIG9mIGRlY2lt YWwgZGlnaXRzLCBlLmcuICIyNCIuCi0KLSAgIENvbm5lY3Rpb24KLSAgICAgICAgICBUaGUgbmFt ZSBvZiB0aGUgbmV0d29yayBob3N0IHRvIHdoaWNoIEMtS2VybWl0IGlzIGNvbm5lY3RlZCwgb3IK LSAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgc2VyaWFsIGRldmljZSB0aHJvdWdoIHdoaWNoIGl0 IGhhcyBkaWFsZWQgKG9yCi0gICAgICAgICAgaGFzIGEgZGlyZWN0IGNvbm5lY3Rpb24pLCBvciAi L2Rldi90dHkiIGZvciB0cmFuc2ZlcnMgaW4gcmVtb3RlCi0gICAgICAgICAgbW9kZS4KLQotICAg Qnl0ZXMgdHJhbnNmZXJyZWQKLSAgICAgICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVy cmVkLCBkZWNpbWFsIGRpZ2l0cywgZS5nLiAiMTUzNzkwNCIuCi0KLSAgIEZpbGVuYW1lCi0gICAg ICAgICAgVGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCB3YXMgdHJhbnNmZXJyZWQsIGUuZy4KLSAg ICAgICAgICAiL3B1Yi9mdHAva2VybWl0L2EvUkVBRE1FLlRYVCIuIElmIHRoZSBmaWxlbmFtZSBj b250YWlucyBhbnkKLSAgICAgICAgICBzcGFjZXMgb3IgY29udHJvbCBjaGFyYWN0ZXJzLCBlYWNo IHN1Y2ggY2hhcmFjdGVyIGlzIHJlcGxhY2VkIGJ5Ci0gICAgICAgICAgYW4gdW5kZXJzY29yZSAo J18nKSBjaGFyYWN0ZXIuCi0KLSAgIE1vZGUKLSAgICAgICAgICBUaGUgbGV0dGVyICdiJyBpZiB0 aGUgZmlsZSB3YXMgdHJhbnNmZXJyZWQgaW4gYmluYXJ5IG1vZGUsIG9yCi0gICAgICAgICAgJ2En IGlmIGl0IHdhcyB0cmFuc2ZlcnJlZCBpbiB0ZXh0IChBU0NJSSkgbW9kZS4KLQotICAgT3B0aW9u cwotICAgICAgICAgIFRoaXMgZmllbGQgYWx3YXlzIGNvbnRhaW5zIGFuIHVuZGVyc2NvcmUgKCdf JykgY2hhcmFjdGVyLgotCi0gICBEaXJlY3Rpb24KLSAgICAgICAgICBUaGUgbGV0dGVyICdvJyBp ZiB0aGUgZmlsZSB3YXMgdHJhbnNmZXJyZWQgT3V0LCBhbmQgJ2knIGlmIHRoZQotICAgICAgICAg IGZpbGUgd2FzIHRyYW5zZmVycmVkIEluLgotCi0gICBVc2VyIGNsYXNzCi0gICAgICAgICAgVGhl IGxldHRlciAncicgaW5kaWNhdGVzIHRoZSBmaWxlIHdhcyB0cmFuc2ZlcnJlZCBieSBhIFJlYWwK LSAgICAgICAgICB1c2VyLgotCi0gICBVc2VyIGlkZW50aWZpY2F0aW9uCi0gICAgICAgICAgVGhl IElEIG9mIHRoZSB1c2VyIHdobyB0cmFuc2ZlcnJlZCB0aGUgZmlsZS4KLQotICAgU2VydmVyIGlk ZW50aWZpY2F0aW9uCi0gICAgICAgICAgVGhlIHN0cmluZyAia2VybWl0Ii4gVGhpcyBkaXN0aW5n dWlzaGVzIGEgS2VybWl0IHRyYW5zZmVyIGxvZwotICAgICAgICAgIHJlY29yZCBmcm9tIGEgV1Ut RlRQRCByZWNvcmQsIHdoaWNoIGNvbnRhaW5zICJmdHAiIGluIHRoaXMKLSAgICAgICAgICBmaWVs ZC4KLQotICAgQXV0aGVudGljYXRpb24gY2xhc3MKLSAgICAgICAgICBUaGUgZGlnaXQgJzEnIGlm IHdlIGtub3cgdGhlIHVzZXIncyBJRCBvbiB0aGUgY2xpZW50IHN5c3RlbSwKLSAgICAgICAgICBv dGhlcndpc2UgJzAnLiBDdXJyZW50bHksIGFsd2F5cyAnMCcuCi0KLSAgIEF1dGhlbnRpY2F0ZWQg dXNlcgotICAgICAgICAgIElmIHRoZSBhdXRoZW50aWNhdGlvbiBjbGFzcyBpcyAnMScsIHRoaXMg aXMgdGhlIHVzZXIncyBJRCBvbiB0aGUKLSAgICAgICAgICBjbGllbnQgc3lzdGVtLiBPdGhlcndp c2UgaXQgaXMgYW4gYXN0ZXJpc2sgKCcqJykuIEN1cnJlbnRseSBpdAotICAgICAgICAgIGlzIGFs d2F5cyBhbiBhc3Rlcmlzay4KLQotICAgRXhhbXBsZXM6Ci0KLSAgVGh1IE9jdCAyMiAxNzo0Mjo0 OCAxOTk4IDAgKiA5NCAvdXNyL29sZ2EvbmV3LnggYSBfIGkgciBvbGdhIGtlcm1pdCAwICoKLSAg VGh1IE9jdCAyMiAxNzo1MToyOSAxOTk4IDEgKiAxNDc4OTkgL3Vzci9vbGdhL3Rlc3QuYyBhIF8g byByIG9sZ2Ega2VybWl0IDAgKgotICBUaHUgT2N0IDIyIDE3OjUxOjQ0IDE5OTggMSAqIDIzNSAv dXNyL29sZ2EvdGVzdC5vIGIgXyBpIHIgb2xnYSBrZXJtaXQgMCAqCi0gIEZyaSBPY3QgMjMgMTI6 MTA6MjUgMTk5OCAwICogMjM1IC91c3Ivb2xnYS94LmtzYyBhIF8gbyByIG9sZ2Ega2VybWl0IDAg KgotCi0gICBOb3RlIHRoYXQgYW4gZnRwLWZvcm1hdCB0cmFuc2FjdGlvbiBsb2cgY2FuIGFsc28g YmUgc2VsZWN0ZWQgb24gdGhlCi0gICBLZXJtaXQgY29tbWFuZCBsaW5lIGFzIGZvbGxvd3M6Ci0K LSAga2VybWl0IC0teGZlcmZpbGU6ZmlsZXNwZWMKLQotICAgVGhpcyBpcyBlcXVpdmFsZW50IHRv OgotCi0gIFNFVCBUUkFOU0FDVElPTi1MT0cgRlRQCi0gIExPRyBUUkFOU0FDVElPTlMgZmlsZXNw ZWMgQVBQRU5ECi0KLSAgIENvbmNlaXZhYmx5IGl0IGNvdWxkIGJlIHBvc3NpYmxlIHRvIGhhdmUg YSBzeXN0ZW0td2lkZSBzaGFyZWQgS2VybWl0Ci0gICBsb2csIGV4Y2VwdCB0aGF0IFVOSVggbGFj a3MgYW55IG5vdGlvbiBvZiBhbiBhcHBlbmQtb25seSBmaWxlOyB0aHVzIGFueQotICAgdXNlciB3 aG8gY291bGQgYXBwZW5kIHRvIHRoZSBsb2cgY291bGQgYWxzbyBkZWxldGUgaXQgKG9yIGFsdGVy IGl0KS4KLSAgIFRoaXMgcHJvYmxlbSBjb3VsZCBiZSB3b3JrZWQgYXJvdW5kIHVzaW5nIHNldHVp ZC9zZXRnaWQgdHJpY2tzLCBidXQKLSAgIHRoZXNlIHdvdWxkIG1vc3QgbGlrZWx5IGludGVyZmVy ZSB3aXRoIHRoZSBvdGhlciBzZXR1aWQvc2V0Z2lkIHRyaWNrcwotICAgQy1LZXJtaXQgbXVzdCB1 c2UgZm9yIGdldHRpbmcgYXQgZGlhbG91dCBkZXZpY2VzIGFuZCBVVUNQIGxvZ2ZpbGVzLgotCi00 LjE4LiBVbnByZWZpeGluZyBOVUwKLQotICAgQXMgb2YgNi4xLjE5MyBBbHBoYS4xMCwgQy1LZXJt aXQgY2FuIGZpbmFsbHkgc2VuZCBhbmQgcmVjZWl2ZQotICAgZmlsZS10cmFuc2ZlciBwYWNrZXRz IGluIHdoaWNoIE5VTCAoQVNDSUkgMCkgaXMgdW5wcmVmaXhlZCAobm8gbW9yZQotICAgTlVMLXRl cm1pbmF0ZWQgcGFja2V0cyEpLiBOVUwgaXMsIG9mIGNvdXJzZSwgZXh0cmVtZWx5IHByZXZhbGVu dCBpbgotICAgYmluYXJ5IGZpbGVzIHN1Y2ggYXMgZXhlY3V0YWJsZXMsIGFuZCB0aGlzIGhhcyBi ZWVuIGEgc2lnbmlmaWNhbnQKLSAgIHNvdXJjZSBvZiBwYWNrZXQgb3ZlcmhlYWQuIEZvciBleGFt cGxlLCB3aGVuIHRyYW5zZmVycmluZyBpdHNlbGYgKHRoZQotICAgU3VuT1MgQy1LZXJtaXQgZXhl Y3V0YWJsZSkgd2l0aCBtaW5pbWFsIHByZWZpeGluZyBhbmQgOTAwMC1ieXRlCi0gICBwYWNrZXRz LCB3ZSBzZWU6Ci0KLSAgRmlsZSBzaXplOiAgICAgICAgICAgICAgICAgICAgICAgMTA2NDk2MAot ICBQYWNrZXQgY2hhcnMgd2l0aCAwIHByZWZpeGVkOiAgICAxMTk5NjI5ICBvdmVyaGVhZCA9IDEy LjY1JQotICBQYWNrZXQgY2hhcnMgd2l0aCAwIHVucHJlZml4ZWQ6ICAxMDYyMzkzICBvdmVyaGVh ZCA9IC0wLjAzJQotCi0gICBUcmFuc2ZlciByYXRlcyBnbyB1cCBhY2NvcmRpbmdseSwgbm90IG9u bHkgYmVjYXVzZSBvZiB0aGUgcmVkdWNlZAotICAgYW1vdW50IG9mIGkvbywgYnV0IGFsc28gYmVj YXVzZSBsZXNzIGNvbXB1dGF0aW9uIGlzIHJlcXVpcmVkIG9uIGVhY2gKLSAgIGVuZC4KLQotNC4x OS4gQ2xlYXItQ2hhbm5lbCBQcm90b2NvbAotCi0gICBOb3cgdGhhdCBDLUtlcm1pdCBpdHNlbGYg aXMgY2FwYWJsZSBvZiBzZW5kaW5nIGFuZCByZWNlaXZpbmcgYW55IGJ5dGUKLSAgIGF0IGFsbCBv biBhIGNsZWFyIGNoYW5uZWwgKFs1MjRdU2VjdGlvbiA0LjE4KSwgaXQgaXMsIGZvciB0aGUgZmly c3QKLSAgIHRpbWUsIGluIGEgcG9zaXRpb24gdG8gbmVnb3RpYXRlIGEgY2xlYXIgY2hhbm5lbCB3 aXRoIHRoZSBvdGhlciBLZXJtaXQsCi0gICBnaXZpbmcgaXQgcGVybWlzc2lvbiAoYnV0IG5vdCBy ZXF1aXJpbmcgaXQpIHRvIHVucHJlZml4IGFueSBhbmQgYWxsCi0gICBjaGFyYWN0ZXJzIHRoYXQg aXQga25vd3MgYXJlIHNhZmUuIEluIGdlbmVyYWwgdGhpcyBtZWFucyBhbGwgYnV0IHRoZQotICAg S2VybWl0IHN0YXJ0LW9mLXBhY2tldCBjaGFyYWN0ZXIgKG5vcm1hbGx5IEN0cmwtQSksIENhcnJp YWdlIFJldHVybgotICAgKG5vdCBvbmx5IEtlcm1pdCdzIGVuZC1vZi1wYWNrZXQgY2hhcmFjdGVy LCBidXQgYWxzbyB0cmVhdGVkIHNwZWNpYWxseQotICAgb24gVGVsbmV0IE5WVCBsaW5rcyksIGFu ZCBJQUMgKDI1NSwgYWxzbyBzcGVjaWFsIHRvIFRlbG5ldCkuCi0KLSAgIEJ5IGRlZmF1bHQsIEMt S2VybWl0IHdpbGwgc2F5IGl0IGhhcyBhIGNsZWFyIGNoYW5uZWwgb25seSBpZiBpdCBoYXMKLSAg IG9wZW5lZCBhIFRDUCBzb2NrZXQuIFNpbmNlIHRoZSBLZXJtaXQgcHJvZ3JhbSBvbiB0aGUgZmFy IGVuZCBvZiBhCi0gICBUQ1AvSVAgY29ubmVjdGlvbiBnZW5lcmFsbHkgZG9lcyBub3Qga25vdyBp dCBoYXMgYSBUQ1AvSVAgY29ubmVjdGlvbiwKLSAgIGl0IHdpbGwgbm90IGFubm91bmNlIGEgY2xl YXIgY2hhbm5lbCB1bmxlc3MgaXQgaGFzIGJlZW4gdG9sZCB0byBkbyBzby4KLSAgIFRoZSBjb21t YW5kIGlzOgotCi0gICBTRVQgQ0xFQVItQ0hBTk5FTCB7IE9OLCBPRkYsIEFVVE8gfQotCi0gICBB VVRPIGlzIHRoZSBkZWZhdWx0LCBtZWFuaW5nIHRoYXQgdGhlIGNsZWFyLWNoYW5uZWwgc3RhdHVz IGlzCi0gICBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgdHlwZSBvZiBjb25uZWN0 aW9uLiBPTiBtZWFucyB0bwotICAgYW5ub3VuY2UgYSBjbGVhciBjaGFubmVsLCBPRkYgbWVhbnMg bm90IHRvIGFubm91bmNlIGl0LiBVc2UgU0hPVwotICAgU1RSRUFNSU5HIChbNTI1XVNlY3Rpb24g NC4yMCkgdG8gc2VlIHRoZSBjdXJyZW50IENMRUFSLUNIQU5ORUwgc3RhdHVzLgotICAgU3lub255 bTogU0VUIENMRUFSQ0hBTk5FTC4KLQotICAgQ0xFQVItQ0hBTk5FTCBpcyBhbHNvIHNldCBpZiB5 b3Ugc3RhcnQgQy1LZXJtaXQgd2l0aCB0aGUgLUkgc3dpdGNoIChzZWUKLSAgIFs1MjZdU2VjdGlv biA0LjIwKS4KLQotICAgV2hlbmV2ZXIgYSBjbGVhciBjaGFubmVsIGlzIG5lZ290aWF0ZWQsIHRo ZSByZXN1bHRpbmcgY29udHJvbC1jaGFyYWN0ZXIKLSAgIHVucHJlZml4aW5nIGlzICJzdGlja3ki OyB0aGF0IGlzLCBpdCByZW1haW5zIGluIGVmZmVjdCBhZnRlciB0aGUKLSAgIHRyYW5zZmVyIHNv IHlvdSBjYW4gdXNlIFNIT1cgQ09OVFJPTCB0byBzZWUgd2hhdCB3YXMgbmVnb3RpYXRlZC4KLQot ICAgWW91IGNhbiBhbHNvIHNlZSB3aGV0aGVyIGEgY2xlYXIgY2hhbm5lbCB3YXMgbmVnb3RpYXRl ZCBpbiB0aGUKLSAgIFNUQVRJU1RJQ1MgL1ZFUkJPU0UgRGlzcGxheS4KLQotICAgVGhlIGFkdmFu dGFnZSBvZiB0aGUgY2xlYXIgY2hhbm5lbCBmZWF0dXJlIGlzIHRoYXQgaXQgY2FuIG1ha2UgZmls ZQotICAgdHJhbnNmZXJzIGdvIGZhc3RlciBhdXRvbWF0aWNhbGx5LiBUaGUgZGlzYWR2YW50YWdl IHdvdWxkIGJlCi0gICBmaWxlLXRyYW5zZmVyIGZhaWx1cmVzIGlmIHRoZSBjaGFubmVsIGlzIG5v dCB0cnVseSBjbGVhciwgZm9yIGV4YW1wbGUKLSAgIGlmIEMtS2VybWl0IG1hZGUgYSBUZWxuZXQg Y29ubmVjdGlvbiB0byBhIHRlcm1pbmFsIHNlcnZlciwgYW5kIHRoZW4KLSAgIGRpYWxlZCBvdXQg ZnJvbSB0aGVyZTsgb3IgaWYgQy1LZXJtaXQgbWFkZSBhbiBSbG9naW4gY29ubmVjdGlvbiB0byBo b3N0Ci0gICBhbmQgdGhlbiBtYWRlIGEgVGVsbmV0IGNvbm5lY3Rpb24gZnJvbSB0aGVyZSB0byBh bm90aGVyIGhvc3QuIElmIGEgZmlsZQotICAgdHJhbnNmZXIgZmFpbHMgb24gYSBUQ1AvSVAgY29u bmVjdGlvbiwgdXNlIFNIT1cgQ09OVFJPTCB0byBjaGVjawotICAgd2hldGhlciBjb250cm9sIGNo YXJhY3RlcnMgYmVjYW1lIHVucHJlZml4ZWQgYXMgYSByZXN1bHQgb2YgcHJvdG9jb2wKLSAgIG5l Z290aWF0aW9ucywgYW5kL29yIFNIT1cgU1RSRUFNSU5HIChbNTI3XVNlY3Rpb24gNC4yMCkgdG8g c2VlIGlmCi0gICAiY2xlYXItY2hhbm5lbCIgd2FzIG5lZ290aWF0ZWQuIElmIHRoaXMgaGFwcGVu ZWQsIHVzZSBTRVQgQ0xFQVItQ0hBTk5FTAotICAgT0ZGIGFuZCBTRVQgUFJFRklYSU5HIENBVVRJ T1VTIChvciB3aGF0ZXZlcikgdG8gcHJldmVudCBpdCBmcm9tCi0gICBoYXBwZW5pbmcgYWdhaW4u Ci0KLTQuMjAuIFN0cmVhbWluZyBQcm90b2NvbAotCi0gICBBIG5ldyBLZXJtaXQgcHJvdG9jb2wg b3B0aW9uIGNhbGxlZCAic3RyZWFtaW5nIiB3YXMgYWRkZWQgaW4gQy1LZXJtaXQKLSAgIDcuMC4g VGhlIGlkZWEgaXMgdGhhdCBpZiB0aGUgdHdvIEtlcm1pdCBwYXJ0bmVycyBoYXZlIGEgcmVsaWFi bGUKLSAgIHRyYW5zcG9ydCAoc3VjaCBhcyBUQ1AvSVAgb3IgWC4yNSkgYmV0d2VlbiB0aGVtLCB0 aGVuIHRoZXJlIGlzIG5vIG5lZWQKLSAgIHRvIHNlbmQgQUNLcyBmb3IgRGF0YSBwYWNrZXRzLCBv ciBOQUtzLCBzaW5jZSBhIHJlbGlhYmxlIHRyYW5zcG9ydAotICAgd2lsbCwgYnkgZGVmaW5pdGlv biwgZGVsaXZlciBhbGwgcGFja2V0cyBpbiBvcmRlciBhbmQgdW5kYW1hZ2VkLiBPbgotICAgc3Vj aCBhIGNvbm5lY3Rpb24sIHN0cmVhbWluZyBjdXRzIGRvd24gbm90IG9ubHkgb24gS2VybWl0IHBy b2dyYW0KLSAgIG92ZXJoZWFkIChzd2l0Y2hpbmcgYmFjayBhbmQgZm9ydGggYmV0d2VlbiByZWFk aW5nIGFuZCBzZW5kaW5nCi0gICBwYWNrZXRzKSwgYnV0IGFsc28gdGVuZHMgdG8gbWFrZSB0aGUg dW5kZXJseWluZyB0cmFuc3BvcnQgdXNlIGl0c2VsZgotICAgbW9yZSBlZmZpY2llbnRseSAoZS5n LiBieSBkZWZlYXRpbmcgdGhlIE5hZ2xlIGFsZ29yaXRobSBhbmQvb3IgRGVsYXllZAotICAgQUNL IHN0cmF0YWdlbSBvZiB0aGUgVENQIGxheWVyKS4gRnVydGhlcm1vcmUsIGl0IGFsbG93cyB0cmFu c2ZlcnMgdG8KLSAgIHdvcmsgc21vb3RobHkgb24gZXh0cmVtZWx5IHNsb3cgbmV0d29yayBjb25n ZXN0aW9ucyB0aGF0IHdvdWxkCi0gICBvdGhlcndpc2UgY2F1c2UgdGltZW91dHMgYW5kIHJldHJh bnNtaXNzaW9ucywgYW5kIGV2ZW4gZmFpbHVyZSB3aGVuIHRoZQotICAgcmV0cnkgbGltaXQgd2Fz IGV4Y2VlZGVkLgotCi0gICBUaGUgdHJpY2sgaXMga25vd2luZyB3aGVuIHdlIGNhbiBzdHJlYW06 Ci0KLSAgICAxLiBJZiBDLUtlcm1pdCBoYXMgb3BlbmVkIGEgVENQIHNvY2tldCBvciBYLjI1IGNv bm5lY3Rpb24sIGl0IG9mZmVycwotICAgICAgIHN0cmVhbS4KLSAgICAyLiBJZiBDLUtlcm1pdCBo YXMgYmVlbiBzdGFydGVkIHdpdGggdGhlIC1JICh1cHBlcmNhc2UpIG9wdGlvbiwgb3IgaWYKLSAg ICAgICBpdCBoYXMgYmVlbiB0b2xkIHRvIFNFVCBSRUxJQUJMRSBPTiwgaXQgb2ZmZXJzIHRvIHN0 cmVhbS4KLSAgICAzLiBJZiBDLUtlcm1pdCBpcyBpbiByZW1vdGUgbW9kZSwgYW5kIGhhcyBiZWVu IHRvbGQgdG8gU0VUIFJFTElBQkxFCi0gICAgICAgQVVUTyAob3IgT04pLCBpdCBhbHdheXMgb2Zm ZXJzIHRvIHN0cmVhbSwgYW5kIGFsc28gYWx3YXlzIGFncmVlcyB0bwotICAgICAgIHN0cmVhbSwg aWYgdGhlIG90aGVyIEtlcm1pdCBvZmZlcnMuIFVubGVzcyB5b3UgdGFrZSBleHBsaWNpdAotICAg ICAgIGFjdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLCB0aGlzIGFsbG93cyB0aGUgbG9j YWwgS2VybWl0ICh0aGUKLSAgICAgICBvbmUgdGhhdCBtYWRlIHRoZSBjb25uZWN0aW9uLCBhbmQg c28ga25vd3Mgd2hldGhlciBpdCdzIHJlbGlhYmxlKQotICAgICAgIHRvIGNvbnRyb2wgc3RyZWFt aW5nLgotCi0gICAoTm90ZSB0aGF0IGFuIG9mZmVyIHRvIHN0cmVhbSBhbHNvIHJlc3VsdHMgaW4g YSBDbGVhci1DaGFubmVsCi0gICBhbm5vdW5jZW1lbnQgaWYgQ0xFQVItQ0hBTk5FTCBpcyBzZXQg dG8gQVVUTzsgc2VlIFs1MjhdU2VjdGlvbiA0LjE5LikKLQotICAgV2hlbiBCT1RIIEtlcm1pdHMg b2ZmZXIgdG8gc3RyZWFtLCB0aGVuIHRoZXkgc3RyZWFtOyBvdGhlcndpc2UgdGhleQotICAgZG9u J3QuIFRodXMgc3RyZWFtaW5nLWNhcGFibGUgS2VybWl0IHByb2dyYW1zIGludGVyb3BlcmF0ZQot ICAgYXV0b21hdGljYWxseSBhbmQgdHJhbnNwYXJlbnRseSB3aXRoIG5vbnN0cmVhbWluZyBvbmVz LiBJZiB0aGUgdHdvCi0gICBLZXJtaXRzIGRvIGFncmVlIHRvIHN0cmVhbSwgeW91J2xsIHNlZSB0 aGUgd29yZCAiU1RSRUFNSU5HIiBvbiB0aGUKLSAgIGZ1bGxzY3JlZW4gZmlsZS10cmFuc2ZlciBk aXNwbGF5IGluIHRoZSBXaW5kb3cgU2xvdHMgZmllbGQuIFlvdSBjYW4KLSAgIGFsc28gZmluZCBv dXQgYWZ0ZXJ3YXJkcyB3aXRoIHRoZSBTVEFUSVNUSUNTIG9yIFNIT1cgU1RSRUFNSU5HCi0gICBj b21tYW5kcy4KLQotICAgICBXQVJOSU5HOiBBdXRvbWF0aWMgY2hvaWNlIG9mIHN0cmVhbWluZyBp cyBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiBvZgotICAgICBhICJkaXJlY3QiIGVuZC10by1lbmQg bmV0d29yayBjb25uZWN0aW9uOyBmb3IgZXhhbXBsZSwgYSBUZWxuZXQgb3IKLSAgICAgUmxvZ2lu IGNvbm5lY3Rpb24gZnJvbSBob3N0IEEgdG8gaG9zdCBCLCBhbmQgdHJhbnNmZXJyaW5nIGZpbGVz Ci0gICAgIGJldHdlZW4gQSBhbmQgQi4gSG93ZXZlciwgaWYgeW91ciBjb25uZWN0aW9uIGhhcyBh ZGRpdGlvbmFsCi0gICAgIGNvbXBvbmVudHMgLS0gc29tZXRoaW5nICJpbiB0aGUgbWlkZGxlIiAo QikgdGhhdCB5b3UgaGF2ZSBtYWRlIGEKLSAgICAgbmV0d29yayBjb25uZWN0aW9uIHRvLCB3aGlj aCBtYWtlcyBhIHNlcGFyYXRlIGNvbm5lY3Rpb24gdG8gdGhlCi0gICAgIGRlc3RpbmF0aW9uIGhv c3QgKEMpLCB0aGVuIHlvdSBkb24ndCByZWFsbHkgaGF2ZSBhIHJlbGlhYmxlCi0gICAgIGNvbm5l Y3Rpb24sIGJ1dCBDLUtlcm1pdCBoYXMgbm8gd2F5IG9mIGtub3dpbmcgdGhpczsgdHJhbnNmZXJy aW5nCi0gICAgIGZpbGVzIGJldHdlZW4gQSBhbmQgQyB3aWxsIHByb2JhYmx5IGZhaWwuIEluIHN1 Y2ggY2FzZXMsIHlvdSdsbCBuZWVkCi0gICAgIHRvIHRlbGwgdGhlICpsb2NhbCogQy1LZXJtaXQg dG8gInNldCByZWxpYWJsZSBvZmYiIGJlZm9yZQotICAgICB0cmFuc2ZlcnJpbmcgZmlsZXMgKGl0 IGRvZXMgbm8gZ29vZCB0byBnaXZlIHRoaXMgY29tbWFuZCB0byB0aGUKLSAgICAgcmVtb3RlIEtl cm1pdCBzaW5jZSB0aGUgbG9jYWwgb25lIGNvbnRyb2xzIHRoZSBSRUxJQUJMRSBzZXR0aW5nKS4K LQotICAgU3RyZWFtaW5nIGlzIGxpa2UgdXNpbmcgYW4gaW5maW5pdGUgd2luZG93IHNpemUsIHdp dGggbm8gdGltZW91dHMgYW5kCi0gICBubyB0b2xlcmFuY2UgZm9yIHRyYW5zbWlzc2lvbiBlcnJv cnMgKHNpbmNlIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkpLiBJdAotICAgcmVsaWVzIG9uIHRoZSB1 bmRlcmx5aW5nIHRyYW5zcG9ydCBmb3IgZmxvdyBjb250cm9sLCBlcnJvciBjb3JyZWN0aW9uLAot ICAgdGltZW91dHMsIGFuZCByZXRyYW5zbWlzc2lvbi4gVGh1cyBpdCBpcyB2ZXJ5IHN1aXRhYmxl IGZvciB1c2Ugb24KLSAgIFRDUC9JUCBjb25uZWN0aW9ucywgZXNwZWNpYWxseSBzbG93IG9yIGJ1 cnN0eSBvbmVzLCBzaW5jZSBLZXJtaXQncwotICAgcGFja2V0IHRpbWVvdXRzIHdvbid0IGludGVy ZmVyZSB3aXRoIHRoZSB0cmFuc2ZlciAtLSBlYWNoIHBhY2tldCB0YWtlcwotICAgYXMgbG9uZyB0 byByZWFjaCBpdHMgZGVzdGluYXRpb24gYXMgaXQgdGFrZXMgVENQIHRvIGRlbGl2ZXIgaXQuIElm IFRDUAotICAgY2FuJ3QgZGVsaXZlciB0aGUgcGFja2V0IHdpdGhpbiBpdHMgb3duIHRpbWVvdXQg cGVyaW9kIChvdmVyIHdoaWNoCi0gICBLZXJtaXQgaGFzIG5vIGNvbnRyb2wpLCBpdCBzaWduYWxz IGEgZmF0YWwgZXJyb3IuIEp1c3QgbGlrZSBGVFAuCi0KLSAgIFN0cmVhbWluZyBnb2VzIG11Y2gg ZmFzdGVyIHRoYW4gbm9uLXN0cmVhbWluZyB3aGVuIGEgcmVsYXRpdmVseSBzbWFsbAotICAgcGFj a2V0IGxlbmd0aCBpcyB1c2VkLCBhbmQgaXQgdGVuZHMgdG8gZ28gZmFzdGVyIHRoYW4gbm9uLXN0 cmVhbWluZwotICAgd2l0aCBldmVuIHRoZSBsb25nZXN0IHBhY2tldCBsZW5ndGhzLiBUaGUgS2Vy bWl0IHdpbmRvdyBzaXplIGlzCi0gICBpcnJlbGV2YW50IHRvIHN0cmVhbWluZyBwcm90b2NvbCwg YnV0IHN0aWxsIG1pZ2h0IGFmZmVjdCBwZXJmb3JtYW5jZSBpbgotICAgc21hbGwgd2F5cyBzaW5j ZSBpdCBjYW4gcmVzdWx0IGluIGRpZmZlcmVudCBwYXRocyB0aHJvdWdoIHRoZSBjb2RlLgotCi0g ICBUaGUgZGVmaW5pdGlvbiBvZiAicmVsaWFibGUgdHJhbnNwb3J0IiBkb2VzIG5vdCBuZWNlc3Nh cmlseSBkZW1hbmQKLSAgIDgtYml0IGFuZCBjb250cm9sLWNoYXJhY3RlciB0cmFuc3BhcmVuY3ku IFN0cmVhbWluZyBjYW4gd29yayB3aXRoCi0gICBwYXJpdHkgYW5kL29yIGNvbnRyb2wtY2hhcmFj dGVyIHByZWZpeGluZyBqdXN0IGFzIHdlbGwgKGJ1dCBub3QgYXMKLSAgIGZhc3QpIGFzIHdpdGhv dXQgdGhlbTsgaW4gc3VjaCBjYXNlcyB5b3UgY2FuIGxlYXZlIFJFTElBQkxFIHNldCB0byBPTiwK LSAgIGJ1dCBzZXQgQ0xFQVJDSEFOTkVMIGFuZC9vciBQQVJJVFkgYXBwcm9wcmlhdGVseS4KLQot ICAgTWF4aW11bSBwZXJmb3JtYW5jZSAtLSBjb21wYXJhYmxlIHRvIGFuZCBvZnRlbiBleGNlZWRp bmcgRlRQIC0tIGlzCi0gICBhY2hpZXZlZCBvbiBzb2NrZXQtdG8tc29ja2V0IGNvbm5lY3Rpb25z IChpbiB3aGljaCB0aGUgY29uc2lkZXJhYmxlCi0gICBvdmVyaGVhZCBvZiB0aGUgdGVybWluYWwg ZHJpdmVyIGFuZCBUZWxuZXQgb3IgUmxvZ2luIHNlcnZlciBpcwotICAgZWxpbWluYXRlZCkgd2l0 aCBsb25nIHBhY2tldHMgYW5kIHRoZSBuZXcgImJyaWVmIiBmaWxlLXRyYW5zZmVyIGRpc3BsYXkK LSAgIChbNTI5XVNlY3Rpb24gNC4xNikuCi0KLTQuMjAuMS4gQ29tbWFuZHMgZm9yIFN0cmVhbWlu ZwotCi0gICBTRVQgUkVMSUFCTEUgeyBPTiwgT0ZGLCBBVVRPIH0KLSAgICAgICAgICBTRVQgUkVM SUFCTEUgT04gdGVsbHMgS2VybWl0IHRoYXQgaXQgaGFzIGEgcmVsaWFibGUgdHJhbnNwb3J0Lgot ICAgICAgICAgIFNFVCBSRUxJQUJMRSBPRkYgdGVsbHMgS2VybWl0IHRoZSB0cmFuc3BvcnQgaXMg bm90IHJlbGlhYmxlLgotICAgICAgICAgIFNFVCBSRUxJQUJMRSBBVVRPIHRlbGxzIEtlcm1pdCB0 aGF0IGl0IHNob3VsZCBTRVQgUkVMSUFCTEUgT04KLSAgICAgICAgICB3aGVuZXZlciBpdCBtYWtl cyBhIHJlbGlhYmxlIGNvbm5lY3Rpb24gKGUuZy4gVEVMTkVUIG9yIFNFVCBIT1NUCi0gICAgICAg ICAgb24gYSBUQ1AvSVAgb3IgWC4yNSBuZXR3b3JrKSwgYW5kIHdoZW4gaW4gcmVtb3RlIG1vZGUg aXQgc2hvdWxkCi0gICAgICAgICAgYmVsaWV2ZSB0aGUgdHJhbnNwb3J0IGlzIHJlbGlhYmxlIGlm IHRoZSBvdGhlciBLZXJtaXQgc2F5cyBpdCBpcwotICAgICAgICAgIGR1cmluZyBLZXJtaXQgcHJv dG9jb2wgbmVnb3RpYXRpb24uCi0KLSAgIEFVVE8gaXMgdGhlIGRlZmF1bHQ7IHRoZSBLZXJtaXQg cHJvZ3JhbSB0aGF0IG1ha2VzIHRoZSBjb25uZWN0aW9uIGtub3dzCi0gICB3aGV0aGVyIGl0IGlz IHJlbGlhYmxlLCBhbmQgdGVsbHMgdGhlIHJlbW90ZSBLZXJtaXQuCi0KLSAgIFRoZSBSRUxJQUJM RSBzZXR0aW5nIGhhcyBzZXZlcmFsIGVmZmVjdHMsIGluY2x1ZGluZzoKLQotICAgICAqIEl0IGNh biBhZmZlY3QgdGhlIHRpbWVvdXRzIHVzZWQgZHVyaW5nIG5vcm1hbCBBQ0svTkFLIHByb3RvY29s LgotICAgICAqIEl0IGNhbiBhZmZlY3QgdGhlIGNsZWFyLWNoYW5uZWwgYW5ub3VuY2VtZW50Lgot ICAgICAqIEl0IGNhbiBhZmZlY3Qgc3RyZWFtaW5nLgotCi0gICBJZiB5b3UgVEVMTkVUIG9yIFNF VCBIT1NUIHNvbWV3aGVyZSwgdGhpcyBpbmNsdWRlcyBhbiBpbXBsaWNpdCBTRVQKLSAgIFJFTElB QkxFIE9OIGNvbW1hbmQuIFRoZSAtSSBjb21tYW5kLWxpbmUgb3B0aW9uIGlzIGVxdWl2YWxlbnQg dG8gU0VUCi0gICBSRUxJQUJMRSBPTi4KLQotICAgU2luY2UgU0VUIFJFTElBQkxFIE9OIChhbmQg LUkpIGFsc28gaW1wbGllcyBTRVQgQ0xFQVIgQ0hBTk5FTCBPTiwgeW91Ci0gICBtaWdodCBmaW5k IHRoYXQgaW4gY2VydGFpbiBjYXNlcyB5b3UgbmVlZCB0byB0ZWxsIEtlcm1pdCB0aGF0IGV2ZW4K LSAgIHRob3VnaCB0aGUgY29ubmVjdGlvbiBpcyByZWxpYWJsZSwgaXQgZG9lc24ndCBoYXZlIGEg Y2xlYXIgY2hhbm5lbAotICAgYWZ0ZXIgYWxsOgotCi0gIFNFVCBDTEVBUi1DSEFOTkVMIE9GRgot ICBTRVQgUFJFRklYSU5HIENBVVRJT1VTIDsgb3Igd2hhdGV2ZXIuLi4KLQotICAgWW91IGNhbiBj b250cm9sIHN0cmVhbWluZyB3aXRob3V0IGFmZmVjdGluZyB0aGUgb3RoZXIgaXRlbXMgd2l0aDoK LQotICBTRVQgU1RSRUFNSU5HIHsgT04sIE9GRiwgQVVUTyB9Ci0KLSAgIEFVVE8gaXMgdGhlIGRl ZmF1bHQsIG1lYW5pbmcgc3RyZWFtaW5nIHdpbGwgb2NjdXIgaWYgS2VybWl0IGhhcyBtYWRlIGEK LSAgIFRDUC9JUCBjb25uZWN0aW9uIG9yIGlmIFJFTElBQkxFIGlzIE9OIChvciBpdCB3YXMgc3Rh cnRlZCB3aXRoIHRoZSAtSQotICAgY29tbWFuZCBsaW5lIG9wdGlvbikuIE9GRiBtZWFucyBkb24n dCBzdHJlYW07IE9OIG1lYW5zIG9mZmVyIHRvIHN0cmVhbQotICAgbm8gbWF0dGVyIHdoYXQuCi0K LTQuMjAuMi4gRXhhbXBsZXMgb2YgU3RyZWFtaW5nCi0KLSAgIEhlcmUgd2UgbG9vayBhdCB0aGUg dXNlIGFuZCBiZWhhdmlvciBvZiBzdHJlYW1pbmcgb24gc2V2ZXJhbCBkaWZmZXJlbnQKLSAgIGtp bmRzIG9mIGNvbm5lY3Rpb25zLCBhbmQgY29tcGFyZSBpdHMgcGVyZm9ybWFuY2Ugd2l0aCBub24t c3RyZWFtaW5nCi0gICB0cmFuc2ZlcnMuCi0KLTQuMjAuMi4xLiBTdHJlYW1pbmcgb24gU29ja2V0 LXRvLVNvY2tldCBDb25uZWN0aW9ucwotCi0gICBIZXJlIHdlIGdldCBzdHJlYW1pbmcgYXV0b21h dGljYWxseSB3aGVuIGJvdGggS2VybWl0IHByb2dyYW1zIGFyZQotICAgY2FwYWJsZSBvZiBpdCwg c2luY2UgdGhleSBib3RoIG1ha2Ugc29ja2V0IGNvbm5lY3Rpb25zLiBGb3IgZXhhbXBsZSwgb24K LSAgIHRoZSBmYXIgZW5kOgotCi0gIEMtS2VybWl0PiBzZXQgaG9zdCAqIDMwMDAKLSAgQy1LZXJt aXQ+IHNlcnZlcgotCi0gICBhbmQgb24gdGhlIG5lYXIgZW5kOgotCi0gIEMtS2VybWl0PiBzZXQg aG9zdCBmb28uYmFyLnh5ei5jb20gMzAwMAotICAobm93IGdpdmUgU0VORCBhbmQgR0VUIGNvbW1h bmQpCi0KLSAgIEFsbCBzdWJzZXF1ZW50IGZpbGUgdHJhbnNmZXJzIHVzZSBzdHJlYW1pbmcgYXV0 b21hdGljYWxseS4KLQotICAgSGVyZSBhcmUgdGhlIHJlc3VsdHMgZnJvbSA4NCB0cmlhbHMsIHJ1 biBvbiBhIHByb2R1Y3Rpb24gbmV0d29yaywKLSAgIGRpc2stdG8tZGlzaywgaW4gd2hpY2ggYSAx LU1CIGJpbmFyeSBmaWxlICh0aGUgU3VuT1MgQy1LZXJtaXQgU3BhcmMKLSAgIGV4ZWN1dGFibGUp IHdhcyBzZW50IGZyb20gYSBTdW4gU3BhcmMtMTAgd2l0aCBTdW5PUyA0LjEuMyB0byBhbiBJQk0K LSAgIFBvd2VyIFNlcnZlciA4NTAgd2l0aCBBSVggNC4xLCBzb2NrZXQtdG8tc29ja2V0LCBvdmVy IGEgMTBNYnBzIDEwQmFzZVQKLSAgIEV0aGVybmV0LCB1c2luZyBtaW5pbWFsIGNvbnRyb2wtY2hh cmFjdGVyIHVucHJlZml4aW5nLCB3aW5kb3cgc2l6ZXMKLSAgIGZyb20gMTAgdG8gMzIsIGFuZCBw YWNrZXQgc2l6ZXMgZnJvbSAxNDUwIHRvIDkwMTA6Ci0KLSAgICAgICAgICAgICAgICBTdHJlYW1p bmcgICAgTm9uc3RyZWFtaW5nCi0gIE1heCBDUFMgICAgICAgICA3NDg5NTUgICAgICAgIDY4MzM1 NAotICBNaW4gQ1BTICAgICAgICAgMjIxNTIyICAgICAgICAxNzI0OTEKLSAgTWVhbiBDUFMgICAg ICAgIDY0NjEzNCAgICAgICAgNTU4NjgwCi0gIE1lZGlhbiBDUFMgICAgICA2NzgwNDMgICAgICAg IDU5NTg3NAotICBTdGQgRGV2ICAgICAgICAgMTAxNDI0ICAgICAgICAxMTE0OTMKLQotICAgQ29y cmVsYXRpb25zOgotCi0gIENQUyBhbmQgd2luZG93IHNpemU6ICAgLTAuMDM2Ci0gIENQUyBhbmQg cGFja2V0IGxlbmd0aDogIDAuMjU0Ci0gIENQUyBhbmQgc3RyZWFtaW5nOiAgICAgIDAuMzgyCi0K LSAgIE5vdGUgdGhhdCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gc3RyZWFtaW5nIGFuZCB0aHJv dWdocHV0IGlzCi0gICBzaWduaWZpY2FudGx5IHN0cm9uZ2VyIHRoYW4gdGhhdCBiZXR3ZWVuIENQ UyBhbmQgd2luZG93IHNpemUgb3IgcGFja2V0Ci0gICBsZW5ndGguCi0KLSAgIEFsc28gbm90ZSB0 aGF0IHRoaXMgYW5kIGFsbCBvdGhlciBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMgaW4gdGhpcwot ICAgc2VjdGlvbiBhcmUgc25hcHNob3RzIGluIHRpbWU7IHRoZSByZXN1bHRzIGNvdWxkIGJlIG11 Y2ggZGlmZmVyZW50IGF0Ci0gICBvdGhlciB0aW1lcyB3aGVuIHRoZSBsb2FkIG9uIHRoZSBzeXN0 ZW1zIGFuZC9vciB0aGUgbmV0d29yayBpcyBoaWdoZXIKLSAgIG9yIGxvd2VyLgotCi0gICBJbiBh IHNpbWlsYXIgc29ja2V0LXRvLXNvY2tldCB0cmlhbCwgYnV0IHRoaXMgdGltZSBvdmVyIGEgd2lk ZS1hcmVhCi0gICBUQ1AvSVAgY29ubmVjdGlvbiAoZnJvbSBOZXcgWW9yayBDaXR5IHRvIExvZ2Fu LCBVdGFoLCBhYm91dCAyMDAwCi0gICBtaWxlcyksIHRoZSBmb2xsb3dpbmcgcmVzdWx0cyB3ZXJl IG9idGFpbmVkOgotCi0gICAgICAgICAgICAgICAgU3RyZWFtaW5nICAgIE5vbnN0cmVhbWluZwot ICBNYXggQ1BTICAgICAgICAgMzM4MjI2ICAgICAgICAzMTgyMDMKLSAgTWluIENQUyAgICAgICAg IDE5MTY1OSAgICAgICAgMTMyMzE0Ci0gIE1lYW4gQ1BTICAgICAgICAyOTM3NDQgICAgICAgIDI1 OTI0MAotICBNZWRpYW4gQ1BTICAgICAgMzAwODQ1ICAgICAgICAyNzMyNzEKLSAgU3RkIERldiAg ICAgICAgICA0MTkxNCAgICAgICAgIDUyMzUxCi0KLSAgIENvcnJlbGF0aW9uczoKLQotICBDUFMg YW5kIHdpbmRvdyBzaXplOiAgICAwLjE2NAotICBDUFMgYW5kIHBhY2tldCBsZW5ndGg6ICAwLjEy MwotICBDUFMgYW5kIHN0cmVhbWluZzogICAgICAwLjM0NgotCi00LjIwLjIuMi4gU3RyZWFtaW5n IG9uIFRlbG5ldCBDb25uZWN0aW9ucwotCi0gICBJbiB0aGlzIGNhc2UgdGhlIGxvY2FsIGNvcHkg b2YgS2VybWl0IGlzIHRvbGQgdG8gVEVMTkVUIG9yIFNFVCBIT1NULAotICAgYW5kIHNvIGl0IGtu b3dzIGl0IGhhcyBhIHJlbGlhYmxlIGNvbm5lY3Rpb24gYW5kIC0tIHVubGVzcyBpdCBoYXMgYmVl bgotICAgdG9sZCBub3QgdG8gLS0gd2lsbCBvZmZlciB0byBzdHJlYW0sIGFuZCB0aGUgb3RoZXIg S2VybWl0IHByb2dyYW0sCi0gICBzaW5jZSBpdCBoYXMgU1RSRUFNSU5HIHNldCB0byBBVVRPLCBh Z3JlZXMuCi0KLSAgIFNpbmNlIHdlIGhhdmUgYSByZWxpYWJsZSBjb25uZWN0aW9uLCB3ZSdsbCBh bHNvIGdldCBjb250cm9sLWNoYXJhY3RlcgotICAgdW5wcmVmaXhpbmcgYXV0b21hdGljYWxseSBi ZWNhdXNlIG9mIHRoZSBuZXcgY2xlYXItY2hhbm5lbCBwcm90b2NvbAotICAgKFs1MzBdU2VjdGlv biA0LjE5KS4KLQotICAgQW55IGVycm9ycyB0aGF0IG9jY3VyIGR1cmluZyBzdHJlYW1pbmcgYXJl IGZhdGFsIHRvIHRoZSB0cmFuc2Zlci4gVGhlCi0gICBtZXNzYWdlIGlzICJUcmFuc21pc3Npb24g ZXJyb3Igb24gcmVsaWFibGUgbGluayIuIFNob3VsZCB0aGlzIGhhcHBlbjoKLQotICAgIDEuIENo ZWNrIHRoZSByZW1vdGUgS2VybWl0J3MgZmxvdyBjb250cm9sIHNldHRpbmcgKFNIT1cKLSAgICAg ICBDT01NVU5JQ0FUSU9OUykuIElmIGl0IGlzIE5PTkUsIGNoYW5nZSBpdCB0byBYT04vWE9GRiwg b3IgdmljZQotICAgICAgIHZlcnNhLiBJZiBpdCBpcyBYT04vWE9GRiAob3IgeW91IGp1c3QgY2hh bmdlZCBpdCB0byBYT0ZGL1hPRkYpLAotICAgICAgIG1ha2Ugc3VyZSB0aGUgZmlsZSBzZW5kZXIg aXMgcHJlZml4aW5nIHRoZSBYT04gYW5kIFhPRkYgY2hhcmFjdGVycy4KLSAgICAgICBJbiB0aGUg bW9zdCBkcmFzdGljIGNhc2UsIHVzZSAic2V0IHByZWZpeCBhbGwiIHRvIGZvcmNlIHByZWZpeGlu ZwotICAgICAgIG9mIGFsbCBjb250cm9sIGNoYXJhY3RlcnMuCi0gICAgMi4gVGhlIHJlbW90ZSBU ZWxuZXQgc2VydmVyIG1pZ2h0IGNob3Agb2ZmIHRoZSA4dGggYml0LiBJbiB0aGF0IGNhc2UsCi0g ICAgICAgdGVsbCBDLUtlcm1pdCB0byAic2V0IHBhcml0eSBzcGFjZSIuIE9yLCB5b3UgbWlnaHQg YmUgYWJsZSB0byBmb3JjZQotICAgICAgIHRoZSBUZWxuZXQgdG8gYWxsb3cgZWlnaHQtYml0IGRh dGEgYnkgdGVsbGluZyBDLUtlcm1pdCB0byAic2V0Ci0gICAgICAgdGVsb3B0IGJpbmFyeSByZXF1 ZXN0IGFjY2VwdCIgLS0gdGhhdCBpcywgcmVxdWVzdCB0aGUgVGVsbmV0IHNlcnZlcgotICAgICAg IHRvIGVudGVyIGJpbmFyeSBtb2RlLCBhbmQgYWNjZXB0IGJpbmFyeS1tb2RlIGJpZHMgZnJvbSB0 aGUgc2VydmVyLgotICAgIDMuIFRoZSByZW1vdGUgVGVsbmV0IHNlcnZlciBtaWdodCBoYXZlIGEg YnVmZmVyaW5nIGxpbWl0YXRpb24uIElmIGEKLSAgICAgICBhbmQgYiBkb24ndCBjdXJlIHRoZSBw cm9ibGVtLCB0ZWxsIHRoZSBmaWxlIHJlY2VpdmVyIHRvICJzZXQKLSAgICAgICByZWNlaXZlIHBh Y2tldC1sZW5ndGggMTAwMCIgKG9yIG90aGVyIG51bWJlciAtLSB1c2UgdGhlIGxhcmdlc3Qgb25l Ci0gICAgICAgdGhhdCB3b3JrcykuIFRoaXMgdG9vLCBpcyBubyBkaWZmZXJlbnQgZnJvbSB0aGUg bm9uLXN0cmVhbWluZyBjYXNlCi0gICAgICAgKG1vcmUgYWJvdXQgdGhpcyBpbiBbNTMxXVNlY3Rp b24gNC4yMC4yLjMpLgotCi0gICBBbmQgcmVtZW1iZXIgeW91IGNhbiBjb250aW51ZSBpbnRlcnJ1 cHRlZCBiaW5hcnktbW9kZSB0cmFuc2ZlcnMgd2hlcmUKLSAgIHRoZXkgbGVmdCBvZmYgd2l0aCB0 aGUgUkVTRU5EICg9IFNFTkQgL1JFQ09WRVIpIGNvbW1hbmQuCi0KLSAgIEhlcmUgYXJlIHRoZSBm aWd1cmVzIGZvciB0aGUgc2FtZSA4NCB0cmlhbHMgYmV0d2VlbiB0aGUgc2FtZSBTdW4gYW5kCi0g ICBJQk0gaG9zdHMgYXMgaW4gNC4yMC4yLjEsIG9uIHRoZSBzYW1lIG5ldHdvcmssIGJ1dCBvdmVy IGEgVGVsbmV0Ci0gICBjb25uZWN0aW9uIHJhdGhlciB0aGFuIHNvY2tldC10by1zb2NrZXQ6Ci0K LSAgICAgICAgICAgICAgICAgIFN0cmVhbWluZyAgICBOb25zdHJlYW1pbmcKLSAgTWF4IENQUyAg ICAgICAgIDM1MDA4OCAgICAgICAgMzIyNTIzCi0gIE1pbiBDUFMgICAgICAgICAgOTU1NDcgICAg ICAgIDE3MzE1MgotICBNZWFuIENQUyAgICAgICAgMzIxMzcyICAgICAgICAyODE4MzAKLSAgTWVk aWFuIENQUyAgICAgIDM0MjYwNCAgICAgICAgMjkxNDY5Ci0gIFN0ZCBEZXYgICAgICAgICAgNDA1 MDMgICAgICAgICAyOTk0OAotCi0gICBDb3JyZWxhdGlvbnM6Ci0KLSAgQ1BTIGFuZCB3aW5kb3cg c2l6ZTogICAgMC4wMDEKLSAgQ1BTIGFuZCBwYWNrZXQgbGVuZ3RoOiAgMC4xNTIKLSAgQ1BTIGFu ZCBzdHJlYW1pbmc6ICAgICAgMC4xMjgKLQotICAgSGVyZSB0aGUgZWZmZWN0IGlzIG5vdCBhcyBl bXBoYXRpYyBhcyBpbiB0aGUgc29ja2V0LXRvLXNvY2tldCBjYXNlLCB5ZXQKLSAgIG9uIHRoZSB3 aG9sZSBzdHJlYW1pbmcgdGVuZHMgdG8gYmUgYmVuZWZpY2lhbC4KLQotICAgQWRkaXRpb25hbCBt ZWFzdXJlbWVudHMgb24gSFAtVVggdXNpbmcgQy1LZXJtaXQgNy4wIEJldGEuMDY6Ci0KLSAgICAg ICAgICAgICAgICAgIFdpbmRvd2luZyAgICAgU3RyZWFtaW5nCi0gIEhQLVVYIDgtPjggICAgICBu b3QgdGVzdGVkICAgICAgIDE0S2NwcwotICBIUC1VWCA4LT45ICAgICAgbm90IHRlc3RlZCAgICAg ICA3NktjcHMKLSAgSFAtVVggOC0+MTAgICAgICAzNktjcHMgICAgICAgICAgNjZLY3BzCi0gIEhQ LVVYIDktPjkgICAgICBub3QgdGVzdGVkICAgICAgMTkwS2NwcwotICBIUC1VWCA5LT4xMCAgICAg MTYwS2NwcyAgICAgICAgIDM3OEtjcHMKLQotNC4yMC4yLjMuIFN0cmVhbWluZyB3aXRoIExpbWl0 ZWQgUGFja2V0IExlbmd0aAotCi0gICBUaGUgSVJJWCB0ZWxuZXQgc2VydmVyIChhdCBsZWFzdCB0 aGUgb25lcyBvYnNlcnZlZCBpbiBJUklYIDUuMyBhbmQgNi4yKQotICAgZG9lcyBub3QgYWxsb3cg S2VybWl0IHRvIHNlbmQgcGFja2V0cyBsb25nZXIgdGhhbiA0MDk2IGJ5dGVzLiBUaHVzIHdoZW4K LSAgIHNlbmRpbmcgZnJvbSBJUklYIEMtS2VybWl0IHdoZW4gaXQgaXMgb24gdGhlIHJlbW90ZSBl bmQgb2YgYSBUZWxuZXQKLSAgIGNvbm5lY3Rpb24sIHRoZSBwYWNrZXQgbGVuZ3RoIG11c3QgYmUg NEsgb3IgbGVzcy4gVHJpYWxzIGluIHRoaXMgY2FzZQotICAgKGluIHdoaWNoIHBhY2tldCBsZW5n dGhzIHJhbmdlIGZyb20gMTQ1MCB0byA0MDAwKSBzaG93IGEgc3Ryb25nCi0gICBhZHZhbnRhZ2Ug Zm9yIHN0cmVhbWluZywgd2hpY2ggd291bGQgYmUgZXZpZGVudCBpbiBhbnkgb3RoZXIgY2FzZSB3 aGVyZQotICAgdGhlIHBhY2tldCBsZW5ndGggaXMgcmVzdHJpY3RlZCwgYW5kIHN0cm9uZ2VyIHRo ZSBzaG9ydGVyIHRoZSBtYXhpbXVtCi0gICBwYWNrZXQgbGVuZ3RoLgotCi0gICAgICAgICAgICAg ICAgICBTdHJlYW1pbmcgICAgTm9uc3RyZWFtaW5nCi0gIE1heCBDUFMgICAgICAgICA0MjYxODcg ICAgICAgIDM2Njg3MAotICBNaW4gQ1BTICAgICAgICAgNDA3NTAwICAgICAgICAyNzY1MTcKLSAg TWVhbiBDUFMgICAgICAgIDQxNTIyNiAgICAgICAgMzM5MTY4Ci0gIE1lZGlhbiBDUFMgICAgICA0 MTQxMzkgICAgICAgIDM0MzgwMwotICBTdGQgRGV2ICAgICAgICAgICA2MDk0ICAgICAgICAgMjU4 NTEKLQotICAgQ29ycmVsYXRpb25zOgotCi0gIENQUyBhbmQgd2luZG93IHNpemU6ICAgIDAuMTE2 Ci0gIENQUyBhbmQgcGFja2V0IGxlbmd0aDogIDAuMjQxCi0gIENQUyBhbmQgc3RyZWFtaW5nOiAg ICAgIDAuOTAxCi0KLTQuMjAuMi40LiBTdHJlYW1pbmcgb24gRGlhbHVwIENvbm5lY3Rpb25zCi0K LSAgIEhlcmUgImRpYWx1cCIgcmVmZXJzIHRvIGEgImRpcmVjdCIgZGlhbHVwIGNvbm5lY3Rpb24s IG5vdCBhIFNMSVAgb3IgUFBQCi0gICBjb25uZWN0aW9uLCB3aGljaCBpcyBvbmx5IGEgcGFydGlj dWxhciBraW5kIG9mIFRDUC9JUCBjb25uZWN0aW9uLgotCi0gICBBdHRlbXB0IHRoaXMgYXQgeW91 ciBvd24gcmlzaywgYW5kIHRoZW4gb25seSBpZiAoYSkgeW91IGhhdmUKLSAgIGVycm9yLWNvcnJl Y3RpbmcgbW9kZW1zLCBhbmQgKGIpIHRoZSBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZSBtb2RlbXMg YW5kCi0gICBjb21wdXRlcnMgYXJlIGFsc28gZXJyb3ItZnJlZSwgcGVyZmVjdGx5IGZsb3ctY29u dHJvbGxlZCwgYW5kIGZyZWUgb2YKLSAgIGludGVycnVwdCBjb25mbGljdHMuIFN0cmVhbWluZyBj YW4gYmUgdXNlZCBlZmZlY3RpdmVseSBhbmQgdG8gZmFpcmx5Ci0gICBnb29kIGFkdmFudGFnZSBv biBzdWNoIGNvbm5lY3Rpb25zLCBidXQgcmVtZW1iZXIgdGhhdCB0aGUgdHJhbnNmZXIgaXMKLSAg IGZhdGFsIGlmIGV2ZW4gb25lIGVycm9yIGlzIGRldGVjdGVkIChhbHNvIHJlbWVtYmVyIHRoYXQg c2hvdWxkIGEKLSAgIGJpbmFyeS1tb2RlIHRyYW5zZmVyIGZhaWwsIGl0IGNhbiBiZSByZWNvdmVy ZWQgZnJvbSB0aGUgcG9pbnQgb2YKLSAgIGZhaWx1cmUgd2l0aCBSRVNFTkQpLgotCi0gICBUbyB1 c2Ugc3RyZWFtaW5nIG9uIGFuIHVucmVsaWFibGUgY29ubmVjdGlvbiwgeW91IG11c3QgdGVsbCBi b3RoCi0gICBLZXJtaXRzIHRoYXQgdGhlIGNvbm5lY3Rpb24gaXMgcmVsaWFibGU6Ci0KLSAga2Vy bWl0IC1JCi0KLSAgIG9yOgotCi0gIEMtS2VybWl0PiBzZXQgcmVsaWFibGUgb24KLQotICAgSW4g dGhpcyBjYXNlLCBpdCB3aWxsIHByb2JhYmx5IGJlIG5lY2Vzc2FyeSB0byBwcmVmaXggc29tZSBj b250cm9sCi0gICBjaGFyYWN0ZXJzLCBmb3IgZXhhbXBsZSBpZiB5b3VyIGNvbm5lY3Rpb24gaXMg dGhyb3VnaCBhIHRlcm1pbmFsIHNlcnZlcgotICAgdGhhdCBoYXMgYW4gZXNjYXBlIGNoYXJhY3Rl ci4gTW9zdCBDaXNjbyB0ZXJtaW5hbCBzZXJ2ZXJzLCBmb3IgZXhhbXBsZSwKLSAgIHJlcXVpcmUg Q3RybC1eICgzMCwgYXMgd2VsbCBhcyBpdHMgaGlnaC1iaXQgZXF1aXZhbGVudCwgMTU4KSB0byBi ZQotICAgcHJlZml4ZWQuIFRvIHVucHJlZml4IHRoZXNlLCB5b3UnbGwgbmVlZCB0byBkZWZlYXQg dGhlICJjbGVhciBjaGFubmVsIgotICAgZmVhdHVyZToKLQotICBDLUtlcm1pdD4gc2V0IHJlbGlh YmxlIG9uCi0gIEMtS2VybWl0PiBzZXQgY2xlYXItY2hhbm5lbCBvZmYKLSAgQy1LZXJtaXQ+IHNl dCBwcmVmaXhpbmcgbm9uZQotICBDLUtlcm1pdD4gc2V0IGNvbnRyb2wgcHJlZml4IDEgMTMgMzAg MTU4IDsgYW5kIHdoYXRldmVyIGVsc2UgaXMgbmVjZXNzYXJ5Ci0KLSAgIERpYWx1cCB0cmlhbHMg d2VyZSBkb25lIHVzaW5nIGZpeGVkIGxhcmdlIHdpbmRvdyBhbmQgcGFja2V0IHNpemVzLiBUaGV5 Ci0gICBjb21wYXJlIHVwbG9hZGluZyBhbmQgZG93bmxvYWRpbmcgb2YgdHdvIGNvbW1vbiB0eXBl cyBvZiBmaWxlcywgd2l0aAotICAgYW5kIHdpdGhvdXQgc3RyZWFtaW5nLiBDb25maWd1cmF0aW9u OgotCi0gICAgIEhQLTkwMDAvNzE1LzMzIC0tIDU3NjAwYnBzLCBSVFMvQ1RTIC0tIFVTUiBDb3Vy aWVyIFYuMzQgLS0KLSAgICAgVi4zNCtWLjQyLCAzMTIwMGJwcyAtLSBVU1IgVi4zNCsgUmFja21v dW50IC0tIDU3NjAwYnBzLCBSVFMvQ1RTIC0tCi0gICAgIENpc2NvIHRlcm1pbmFsIHNlcnZlciAt LSBTb2xhcmlzIDIuNS4xLiBQYWNrZXQgc2l6ZSA9IDgwMDAsIFdpbmRvdwotICAgICBTaXplID0g MzAsIENvbnRyb2wgQ2hhcmFjdGVyIFVucHJlZml4aW5nIE1pbmltYWwgKGJ1dCBpbmNsdWRpbmcg dGhlCi0gICAgIENpc2NvIGVzY2FwZSBjaGFyYWN0ZXIpLgotCi0gICBTaW5jZSB0aGlzIGlzIG5v dCBhIHRydWx5IHJlbGlhYmxlIGNvbm5lY3Rpb24sIGEgZmV3IHRyaWFscyBmYWlsZWQgd2hlbgot ICAgYSBiYWQgcGFja2V0IHdhcyByZWNlaXZlZCAobW9zdCBsaWtlbHkgZHVlIHRvIFVBUlQgb3Zl cnJ1bnMpOyB0aGUKLSAgIGZhaWx1cmUgd2FzIGdyYWNlZnVsIGFuZCBpbW1lZGlhdGUsIGFuZCB0 aGUgbWVzc2FnZSB3YXMgaW5mb3JtYXRpdmUuCi0gICBUaGUgcmVzdWx0cyBvZiB0ZW4gc3VjY2Vz c2Z1bCB0cmlhbHMgdXBsb2FkaW5nIGFuZCBkb3dubG9hZGluZyB0aGUgdHdvCi0gICBmaWxlcyB3 aXRoIGFuZCB3aXRob3V0IHN0cmVhbWluZyBhcmU6Ci0KLSAgICAgICAgICAgIFN0cmVhbWluZy4u Ci0gICAgICAgICAgICBPZmYgICAgT24KLSAgIFVwbG9hZCAgIDUxOTQgICA1NTY1ICAgdHh0ICg9 IEMgc291cmNlIGNvZGUsIDc4SykKLSAgICAgICAgICAgIDMxMzUgICAzNDA2ICAgZ3ogICg9IGd6 aXAgZmlsZSwgY29tcHJlc3NlZCwgODVLKQotIERvd25sb2FkICAgNTE5NCAgIDU1NjUgICB0eHQK LSAgICAgICAgICAgIDMwNDEgICAzNDA2ICAgZ3oKLQotICAgRWFjaCBDUFMgZmlndXJlIGlzIHRo ZSBtZWFuIG9mIDEwIHJlc3VsdHMuCi0KLSAgIEEgYnJpZWYgdGVzdCB3YXMgYWxzbyBwZXJmb3Jt ZWQgb24gYSBMQVQtYmFzZWQgZGlhbG91dCBjb25uZWN0aW9uIGZyb20KLSAgIGEgVkFYIDMxMDAg d2l0aCBWTVMgNS41IHRvIGEgVVNSIENvdXJpZXIgVi4zNCBjb25uZWN0ZWQgdG8gYSBERUNzZXJ2 ZXIKLSAgIDcwMCBhdCAxOTIwMCBicHMuIFRoZSAxLU1CIFNwYXJjIGV4ZWN1dGFibGUgZG93bmxv YWRlZCBmcm9tIGEgU3VuIHRvCi0gICB0aGUgVkFYIGF0IDExMDBjcHMgd2l0aG91dCBzdHJlYW1p bmcgYW5kIDE5MDBjcHMgd2l0aCBzdHJlYW1pbmcsIHVzaW5nCi0gICA4MDAwLWJ5dGUgcGFja2V0 cywgMzAgd2luZG93IHNsb3RzLCBhbmQgbWluaW1hbCBwcmVmaXhpbmcgaW4gYm90aAotICAgY2Fz ZXMuCi0KLTQuMjAuMi41LiBTdHJlYW1pbmcgb24gWC4yNSBDb25uZWN0aW9ucwotCi0gICBXZSBo YXZlIG9ubHkgbGltaXRlZCBhY2Nlc3MgdG8gWC4yNSBuZXR3b3Jrcy4gT25lIHRyaWFsIHdhcyBw ZXJmb3JtZWQKLSAgIGluIHdoaWNoIHRoZSAxTUIgU29sYXJpcyAyLjQgU3BhcmMgZXhlY3V0YWJs ZSB3YXMgdHJhbnNmZXJyZWQgb3ZlciBhCi0gICBTdW5MaW5rIFguMjUgY29ubmVjdGlvbjsgbm90 aGluZyBpcyBrbm93biBhYm91dCB0aGUgYWN0dWFsIHBoeXNpY2FsCi0gICBjb25uZWN0aW9uLiBX aXRoIGEgcGFja2V0IGxlbmd0aCBvZiA4MDAwIGFuZCBhIHdpbmRvdyBzaXplIG9mIDMwLCB0aGUK LSAgIGZpbGUgdHJhbnNmZXJyZWQgYXQgNjQwMCBjcHMgKHVzaW5nIGEgbWF4aW11bSBvZiA2IHdp bmRvdyBzbG90cykuIFdpdGgKLSAgIHRoZSBzYW1lIHBhY2tldCBsZW5ndGgsIGJ1dCB3aXRoIHN0 cmVhbWluZywgaXQgdHJhbnNmZXJyZWQgd2l0aG91dAotICAgbWlzaGFwIGF0IDY3MTAgY3BzLCBh Ym91dCA1JSBmYXN0ZXIuCi0KLTQuMjAuMy4gU3RyZWFtaW5nIC0gUHJlbGltaW5hcnkgQ29uY2x1 c2lvbnMKLQotICAgVGhlIHJlc3VsdHMgdmFyeSB3aXRoIHRoZSBwYXJ0aWN1bGFyIGNvbm5lY3Rp b24sIGJ1dCBhcmUgZ29vZCBvdmVyYWxsLgotICAgQWx0aG91Z2ggbnVtZXJvdXMgbG93ZXItbGV2 ZWwgdHJpY2tzIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UKLSAgIG9uIHNwZWNp ZmljIHBsYXRmb3JtcyBvciBjb25uZWN0aW9uIG1ldGhvZHMsIHN0cmVhbWluZyBvY2N1cnMgYXQg YQotICAgaGlnaCwgc3lzdGVtLWluZGVwZW5kZW50IGxldmVsIG9mIHRoZSBLZXJtaXQgcHJvdG9j b2wgYW5kIHRoZXJlZm9yZSBjYW4KLSAgIGFwcGx5IHRvIGFsbCB0eXBlcyBvZiBwbGF0Zm9ybXMg YW5kIChyZWxpYWJsZSkgY29ubmVjdGlvbnMKLSAgIHRyYW5zcGFyZW50bHkuCi0KLTQuMjEuIFRo ZSBUUkFOU01JVCBDb21tYW5kCi0KLSAgIFByaW9yIHRvIEMtS2VybWl0IDcuMCwgdGhlIFRSQU5T TUlUIGNvbW1hbmQgdHJhbnNtaXR0ZWQgaW4gdGV4dCBvcgotICAgYmluYXJ5IG1vZGUgYWNjb3Jk aW5nIHRvIFNFVCBGSUxFIFRZUEUgeyBURVhULCBCSU5BUlkgfS4gQnV0IG5vdyB0aGF0Ci0gICBi aW5hcnkgbW9kZSBpcyBsaWtlbHkgdG8gYmUgdGhlIGRlZmF1bHQgZm9yIHByb3RvY29sIHRyYW5z ZmVycywgaXQgaXMKLSAgIGV2aWRlbnQgdGhhdCB0aGlzIG5vdCBhbHNvIGFuIGFwcHJvcHJpYXRl IGRlZmF1bHQgZm9yIFRSQU5TTUlULCBzaW5jZQotICAgYmluYXJ5LW1vZGUgVFJBTlNNSVQgaXMg YSByYXRoZXIgc3BlY2lhbGl6ZWQgYW5kIHRyaWNreSBvcGVyYXRpb24uCi0gICBUaGVyZWZvcmUs IFRSQU5TTUlUIGRlZmF1bHRzIHRvIHRleHQgbW9kZSBhbHdheXMsIHJlZ2FyZGxlc3Mgb2YgdGhl Ci0gICBGSUxFIFRZUEUgc2V0dGluZy4KLQotICAgQy1LZXJtaXQgNy4wIGV4cGFuZHMgdGhlIGNh cGFiaWxpdGllcyBvZiB0aGUgVFJBTlNNSVQgY29tbWFuZCBieSBhZGRpbmcKLSAgIHRoZSBmb2xs b3dpbmcgc3dpdGNoZXMgKHNlZSBbNTMyXVNlY3Rpb24gMS41KS4gVGhlIG5ldyBzeW50YXggaXM6 Ci0KLSAgVFJBTlNNSVQgWyBzd2l0Y2hlcy4uLiBdIGZpbGVuYW1lCi0KLSAgIFplcm8gb3IgbW9y ZSBzd2l0Y2hlcyBtYXkgYmUgaW5jbHVkZWQ6Ci0KLSAgIC9QSVBFCi0gICAgICAgICAgV2hlbiAv UElQRSBpcyBpbmNsdWRlZCwgImZpbGVuYW1lIiBpcyBpbnRlcnByZXRlZCBhcyBhIHN5c3RlbQot ICAgICAgICAgIGNvbW1hbmQgb3IgcHJvZ3JhbSB3aG9zZSBvdXRwdXQgaXMgdG8gYmUgc2VudC4g U3lub255bToKLSAgICAgICAgICAvQ09NTUFORC4gRXhhbXBsZToKLQotICB0cmFuc21pdCAvcGlw ZSBmaW5nZXIKLQotICAgICAgICAgIFlvdSBtYXkgZW5jbG9zZSB0aGUgY29tbWFuZCBpbiBicmFj ZXMsIGJ1dCB5b3UgZG9uJ3QgaGF2ZSB0bzoKLQotICB4bWl0IC9waXBlIHtscyAtbCB8IHNvcnQg LXIgKzAuMjIgLTAuMzIgfCBoZWFkfQotCi0gICAvQklOQVJZCi0gICAgICAgICAgVHJhbnNtaXRz IHRoZSBmaWxlIChvciBwaXBlIG91dHB1dCkgaW4gYmluYXJ5IG1vZGUuCi0KLSAgIC9URVhUCi0g ICAgICAgICAgVHJhbnNtaXRzIHRoZSBmaWxlIChvciBwaXBlIG91dHB1dCkgaW4gbGluZS1vcmll bnRlZCB0ZXh0IG1vZGUuCi0gICAgICAgICAgQ3VycmVudCBGSUxFIENIQVJBQ1RFUi1TRVQgYW5k IFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgc2VsZWN0aW9ucwotICAgICAgICAgIGdvdmVybiB0cmFu c2xhdGlvbi4gRGVmYXVsdC4KLQotICAgL1RSQU5TUEFSRU5UCi0gICAgICAgICAgU3BlY2lmaWVz IHRleHQgbW9kZSB3aXRob3V0IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24sIG5vIG1hdHRlcgot ICAgICAgICAgIHdoYXQgdGhlIEZJTEUgYW5kIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgc2VsZWN0 aW9ucyBhcmUuCi0KLSAgIC9OT1dBSVQKLSAgICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8g U0VUIFRSQU5TTUlUIFBST01QVCAwLCBidXQgZm9yIHRoaXMKLSAgICAgICAgICBUUkFOU01JVCBj b21tYW5kIG9ubHkuIEFwcGxpZXMgb25seSB0byB0ZXh0IG1vZGU7IGl0IG1lYW5zIHRvCi0gICAg ICAgICAgbm90IHdhaXQgZm9yIGFueSBraW5kIG9mIGVjaG8gb3IgdHVybmFyb3VuZCBjaGFyYWN0 ZXIgYWZ0ZXIKLSAgICAgICAgICBzZW5kaW5nIGEgbGluZSBiZWZvcmUgc2VuZGluZyB0aGUgbmV4 dCBsaW5lLiAoTm9ybWFsbHkgS2VybWl0Ci0gICAgICAgICAgd2FpdHMgZm9yIGEgbGluZWZlZWQu KQotCi0gICBXaGVuIFRSQU5TTUlUIEVDSE8gaXMgT04sIEMtS2VybWl0IHRyaWVzIHRvIHJlYWQg YmFjayB0aGUgZWNobyBvZiBlYWNoCi0gICBjaGFyYWN0ZXIgdGhhdCBpcyBzZW50LiBQcmlvciB0 byBDLUtlcm1pdCA3LjAsIDEgc2Vjb25kIHdhcyBhbGxvd2VkIGZvcgotICAgZWFjaCBlY2hvIHRv IGFwcGVhcjsgaWYgaXQgZGlkbid0IHNob3cgdXAgaW4gYSBzZWNvbmQsIHRoZSBUUkFOU01JVAot ICAgY29tbWFuZCB3b3VsZCBmYWlsLiBTaW1pbGFybHkgZm9yIHRoZSBUUkFOU01JVCBQUk9NUFQg Y2hhcmFjdGVyLgotICAgSG93ZXZlciwgd2l0aCB0b2RheSdzIGNvbmdlc3RlZCBJbnRlcm5ldCBj b25uZWN0aW9ucywgZXRjLCBtb3JlIHRpbWUgaXMKLSAgIG9mdGVuIG5lZWRlZDoKLQotICAgU0VU IFRSQU5TTUlUIFRJTUVPVVQgbnVtYmVyCi0KLSAgIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHNl Y29uZHMgdG8gd2FpdCBmb3IgYW4gZWNobyBvciB0aGUgcHJvbXB0Ci0gICBjaGFyYWN0ZXIgd2hl biBUUkFOU01JVCBQUk9NUFQgaXMgbm9uemVybzsgdGhlIGRlZmF1bHQgd2FpdCBpcyAxCi0gICBz ZWNvbmQuIElmIHlvdSBzcGVjaWZ5IDAsIHRoZSB3YWl0IGlzIGluZGVmaW5pdGUuIFdoZW4gYSB0 aW1lb3V0Ci0gICBpbnRlcnZhbCBvZiAwIGlzIHNwZWNpZmllZCwgYW5kIGEgZGVzaXJlZCBlY2hv IG9yIHByb21wdCBkb2VzIG5vdCBzaG93Ci0gICB1cCwgdGhlIFRSQU5TTUlUIGNvbW1hbmQgd2ls bCBub3QgdGVybWluYXRlIHVudGlsIG9yIHVubGVzcyB5b3UKLSAgIGludGVycnVwdCBpdCB3aXRo IEN0cmwtQzsgdXNlIFNFVCBUUkFOU01JVCBUSU1FT1VUIDAgd2l0aCBjYXV0aW9uLgotCi0gICBO b3RlOiB0byBibGFzdCBhIGZpbGUgb3V0IHRoZSBjb21tdW5pY2F0aW9ucyBjb25uZWN0aW9uIHdp dGhvdXQgYW55Ci0gICBraW5kIG9mIHN5bmNocm9uaXphdGlvbiBvciB0aW1lb3V0cyBvciBvdGhl ciBtYW5uZXIgb2YgY2hlY2tpbmcsIHVzZToKLQotICBTRVQgVFJBTlNNSVQgRUNITyBPRkYKLSAg U0VUIFRSQU5TTUlUIFBST01QVCAwIChvciBpbmNsdWRlIHRoZSAvTk9XQUlUIHN3aXRjaCkKLSAg U0VUIFRSQU5TTUlUIFBBVVNFIDAKLSAgVFJBTlNNSVQgWyBzd2l0Y2hlcyBdIGZpbGVuYW1lCi0K LSAgIEluIHRoaXMgY2FzZSwgdGV4dC1maWxlIHRyYW5zbWlzc2lvbiBpcyBub3QtbGluZSBvcmll bnRlZCBhbmQgbGFyZ2UKLSAgIGJsb2NrcyBjYW4gYmUgc2VudCwgcmVzdWx0aW5nIGluIGEgc2ln bmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQKLSAgIG92ZXIgbGluZS1hdC1hdC10aW1l IHRyYW5zbWlzc2lvbi4gU3VjY2Vzc2Z1bCBvcGVyYXRpb24gZGVwZW5kcyAoZXZlbgotICAgbW9y ZSB0aGFuIHVzdWFsIGZvciB0aGUgVFJBTlNNSVQgY29tbWFuZCEpIG9uIGEgY2xlYW4gY29ubmVj dGlvbiB3aXRoCi0gICBlZmZlY3RpdmUgZmxvdyBjb250cm9sLgotCi0gICBGb3IgZGV0YWlscyBv biBUUkFOU01JVCBhbmQgY2hhcmFjdGVyIHNldHMsIHNlZSBbNTMzXVNlY3Rpb24gNi42LjUuNC4K LQotICA0LjIyLiBDb3Bpbmcgd2l0aCBGYXVsdHkgS2VybWl0IEltcGxlbWVudGF0aW9ucwotCi0g ICBLZXJtaXQgcHJvdG9jb2wgaGFzIGJlZW4gaW1wbGVtZW50ZWQgaW4gcXVpdGUgYSBmZXcgdGhp cmQtcGFydHkKLSAgIGNvbW1lcmNpYWwsIHNoYXJld2FyZSwgYW5kIGZyZWV3YXJlIHNvZnR3YXJl IHBhY2thZ2VzLCB3aXRoIHZhcnlpbmcKLSAgIGRlZ3JlZXMgb2Ygc3VjY2Vzcy4gSW4gbW9zdCBj YXNlcyBvcGVyYXRpb24gaXMgc2F0aXNmYWN0b3J5IGJ1dCBzbG93IC0tCi0gICBvbmx5IHRoZSBi YXJlIG1pbmltdW0gc3Vic2V0IG9mIHRoZSBwcm90b2NvbCBpcyBhdmFpbGFibGUgLS0gc2hvcnQK LSAgIHBhY2tldHMsIG5vIHNsaWRpbmcgd2luZG93cywgbm8gYXR0cmlidXRlcywgZXRjLiBJbiBv dGhlciBjYXNlcywgdGhlCi0gICBpbXBsZW1lbnRhdGlvbiBpcyBpbmNvcnJlY3QsIHJlc3VsdGlu ZyBpbiBmYWlsdXJlcyBhdCB0aGUgaW5pdGlhbAotICAgbmVnb3RpYXRpb24gc3RhZ2Ugb3IgY29y cnVwdGVkIGZpbGVzLgotCi0gICBDLUtlcm1pdCA3LjAgYW5kIEtlcm1pdCA5NSAxLjEuMTkgaW5j bHVkZSBzb21lIG5ldyBkZWZlbnNlIG1lY2hhbmlzbXMKLSAgIHRvIGhlbHAgY29wZSB3aXRoIHRo ZSBtb3N0IGNvbW1vbiBzaXR1YXRpb25zLiBIb3dldmVyLCBiZWFyIGluIG1pbmQKLSAgIHRoZXJl IGlzIG9ubHkgc28gbXVjaCB3ZSBjYW4gZG8gaW4gc3VjaCBjYXNlcyAtLSB0aGUgcmVzcG9uc2li aWxpdHkgZm9yCi0gICBmaXhpbmcgdGhlIHByb2JsZW0gbGllcyB3aXRoIHRoZSBtYWtlciBvZiB0 aGUgZmF1bHR5IHNvZnR3YXJlLgotCi0gICAgNC4yMi4xLiBGYWlsdXJlIHRvIEFjY2VwdCBNb2Rl cm4gTmVnb3RpYXRpb24gU3RyaW5ncwotCi0gICBUaGUgcHVibGlzaGVkIEtlcm1pdCBwcm90b2Nv bCBzcGVjaWZpY2F0aW9uIHN0YXRlcyB0aGF0IG5ldyBmaWVsZHMgY2FuCi0gICBiZSBhZGRlZCB0 byB0aGUgcGFyYW1ldGVyIG5lZ290aWF0aW9uIHN0cmluZy4gVGhlc2UgYXJlIHRvIGJlIGlnbm9y ZWQKLSAgIGJ5IGFueSBLZXJtaXQgaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdCB1bmRlcnN0 YW5kIHRoZW07IHRoaXMgaXMKLSAgIHdoYXQgbWFrZXMgdGhlIEtlcm1pdCBwcm90b2NvbCBleHRl bnNpYmxlLiBVbmZvcnR1bmF0ZWx5LCBzb21lIEtlcm1pdAotICAgaW1wbGVtZW50YXRpb25zIGJl Y29tZSBjb25mdXNlZCAob3Igd29yc2UpIHdoZW4gcmVjZWl2aW5nIGEgbmVnb3RpYXRpb24KLSAg IHN0cmluZyBsb25nZXIgdGhhbiB0aGUgb25lIHRoZXkgZXhwZWN0LiBZb3UgY2FuIHRyeSB3b3Jr aW5nIGFyb3VuZCBzdWNoCi0gICBwcm9ibGVtcyBieSB0ZWxsaW5nIEtlcm1pdCB0byBzaG9ydGVu IGl0cyBuZWdvdGlhdGlvbiBzdHJpbmcgKGFuZCB0aHVzCi0gICBkaXNhYmxlIHRoZSBjb3JyZXNw b25kaW5nIG5ldyBmZWF0dXJlcyk6Ci0KLSAgU0VUIFNFTkQgTkVHT1RJQVRJT04tU1RSSU5HLU1B WC1MRU5HVEggbnVtYmVyCi0KLSAgIFRyeSBhIG51bWJlciBsaWtlIDEwLiBJZiB0aGF0IGRvZXNu J3Qgd29yaywgdHJ5IDksIDgsIDcsIDYsIGFuZCBzbyBvbi4KLQotICAgIDQuMjIuMi4gRmFpbHVy ZSB0byBOZWdvdGlhdGUgOHRoLWJpdCBQcmVmaXhpbmcKLQotICAgVGhlIHB1Ymxpc2hlZCBLZXJt aXQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiBzdGF0ZXMgdGhhdCA4dGgtYml0Ci0gICBwcmVmaXhp bmcgKHdoaWNoIGFsbG93cyB0cmFuc2ZlciBvZiA4LWJpdCBkYXRhIG92ZXIgYSA3LWJpdCBjb25u ZWN0aW9uKQotICAgb2NjdXJzIGlmIHRoZSBmaWxlIHNlbmRlciBwdXRzIGEgdmFsaWQgcHJlZml4 IGNoYXJhY3RlciAobm9ybWFsbHkgIiYiKQotICAgaW4gdGhlIDh0aC1iaXQtcHJlZml4IGZpZWxk IG9mIHRoZSBuZWdvdGlhdGlvbiBzdHJpbmcsIGFuZCB0aGUgcmVjZWl2ZXIKLSAgIHB1dHMgZWl0 aGVyIGEgbGV0dGVyICJZIiBvciB0aGUgc2FtZSBwcmVmaXggY2hhcmFjdGVyLiBBdCBsZWFzdCBv bmUKLSAgIGZhdWx0eSBLZXJtaXQgaW1wbGVtZW50YXRpb24gZXhpc3RzIHRoYXQgZG9lcyBub3Qg YWNjZXB0IHRoZSBsZXR0ZXIKLSAgICJZIi4gVG8gZm9yY2UgQy1LZXJtaXQgLyBLLTk1IHRvIHJl cGx5IHdpdGggdGhlIG90aGVyIEtlcm1pdCdzIHByZWZpeAotICAgY2hhcmFjdGVyIHJhdGhlciB0 aGFuIGEgIlkiLCBnaXZlIHRoZSBmb2xsb3dpbmcgKGludmlzaWJsZSkgY29tbWFuZDoKLQotICBT RVQgUThGTEFHIE9OCi0KLSAgIFVzZSBTRVQgUThGTEFHIE9GRiB0byByZXN0b3JlIHRoZSBub3Jt YWwgYmVoYXZpb3IuCi0KLSAgICA0LjIyLjMuIENvcnJ1cHQgRmlsZXMKLQotICAgUmVmZXIgdG8g WzUzNF1TZWN0aW9uIDQuMjIuMi4gU29tZSBLZXJtaXQgaW1wbGVtZW50YXRpb25zIG1pc3Rha2Vu bHkKLSAgIGludGVycHJldCB0aGUgIlkiIGFzIGEgcHJlZml4IGNoYXJhY3Rlci4gVGhlbiwgd2hl bmV2ZXIgYSBsZXR0ZXIgWQotICAgYXBwZWFycyBpbiB0aGUgZGF0YSwgdGhlIFkgYW5kIHRoZSBj aGFyYWN0ZXIgdGhhdCBmb2xsb3dzIGl0IGFyZQotICAgcmVwbGFjZWQgYnkgYSBnYXJiYWdlIGNo YXJhY3Rlci4gQXQgdGhpcyB3cml0aW5nLCB3ZSBhcmUgbm90IHN1cmUgaWYKLSAgIHRoZXJlIGlz IGFueSBzb2x1dGlvbiwgYnV0IHRyeSAic2V0IHNlbmQgbmVnb3RpYXRpb24tc3RyaW5nLW1heC1s ZW5ndGgKLSAgIDYiIGFuZC9vciAic2V0IHE4ZmxhZyBvbiIuCi0KLSAgIEZpbGUgY29ycnVwdGlv biBjYW4gYWxzbyBvY2N1ciB3aGVuIGNvbnRyb2wgY2hhcmFjdGVycyB3aXRoaW4gdGhlIGZpbGUK LSAgIGRhdGEgYXJlIHNlbnQgd2l0aG91dCBwcmVmaXhpbmcsIGFzIGF0IGxlYXN0IHNvbWUgYXJl IGJ5IGRlZmF1bHQgaW4KLSAgIEMtS2VybWl0IDcuMCBhbmQgSy05NS4gU29tZSBLZXJtaXQgaW1w bGVtZW50YXRpb25zIGRvIG5vdCBoYW5kbGUKLSAgIGluY29taW5nICJiYXJlIiBjb250cm9sIGNo YXJhY3RlcnMuIFRvIHdvcmsgYXJvdW5kLCAic2V0IHByZWZpeGluZwotICAgYWxsIi4KLQotICAg IDQuMjIuNC4gU3B1cmlvdXMgQ2FuY2VsbGF0aW9ucwotCi0gICBUaGUgS2VybWl0IHByb3RvY29s IHNwZWNpZmljYXRpb24gc3RhdGVzIHRoYXQgaWYgYW4gQUNLIHRvIGEgRGF0YQotICAgcGFja2V0 IGNvbnRhaW5zIFggaW4gaXRzIGRhdGEgZmllbGQsIHRoZSB0cmFuc2ZlciBvZiB0aGUgY3VycmVu dCBmaWxlCi0gICBpcyBjYW5jZWxlZCwgYW5kIGlmIGl0IGNvbnRhaW5zIGEgWiwgdGhlIGVudGly ZSB0cmFuc2ZlciBpcyBjYW5jZWxlZC4KLSAgIEF0IGxlYXN0IG9uZSBvdmVyemVhbG91cyBLZXJt aXQgaW1wbGVtZW50YXRpb24gYXBwbGllcyB0aGlzIHJ1bGUgdG8KLSAgIG5vbi1EYXRhIHBhY2tl dHMgYXMgd2VsbCwgdGhlIHR5cGljYWwgc3ltcHRvbSBiZWluZyB0aGF0IGFueSBhdHRlbXB0IHRv Ci0gICB0cmFuc2ZlciBhIGZpbGUgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBYIG9yIFogcmVzdWx0 cyBpbiBjYW5jZWxsYXRpb24uCi0gICBUaGlzIGlzIGJlY2F1c2UgdGhlIGZpbGUgcmVjZWl2ZXIg dHlwaWNhbGx5IHNlbmRzIGJhY2sgdGhlIG5hbWUgdW5kZXIKLSAgIHdoaWNoIGl0IHN0b3JlZCB0 aGUgZmlsZSAod2hpY2ggbWlnaHQgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBuYW1lIGl0Ci0gICB3 YXMgc2VudCB3aXRoKSBpbiB0aGUgQUNLIHRvIHRoZSBGaWxlIEhlYWRlciBwYWNrZXQuIFRoaXMg aXMKLSAgIGluZm9ybWF0aW9uIG9ubHkgYW5kIHNob3VsZCBub3QgY2F1c2UgY2FuY2VsbGF0aW9u LiBUbyB3b3JrIGFyb3VuZCB0aGUKLSAgIHByb2JsZW0sIHVzZToKLQotICBTRVQgRi1BQ0stQlVH IHsgT04sIE9GRiB9Ci0KLSAgIE9OIHRlbGxzIEtlcm1pdCBub3QgdG8gc2VuZCBiYWNrIHRoZSBm aWxlbmFtZSBpbiB0aGUgQUNLIHRvIHRoZSBmaWxlCi0gICBoZWFkZXIgcGFja2V0IGFzIGl0IG5v cm1hbGx5IHdvdWxkIGRvIChPRkYgcHV0cyBLZXJtaXQgYmFjayB0byBub3JtYWwKLSAgIGFmdGVy IHVzaW5nIE9OKS4KLQotICAgQSB2YXJpYXRpb24gb24gdGhlIHRoaXMgYnVnIG9jY3VycyBpbiBh biBvYnNjdXJlIEtlcm1pdCBwcm9ncmFtIGZvcgotICAgTVVNUFM6IFdoZW4gdGhpcyBLZXJtaXQg cHJvZ3JhbSBzZW5kcyBhIGZpbGUgY2FsbGVkIChzYXkpIEZPTy5CQVIsIGl0Ci0gICByZXF1aXJl cyB0aGF0IHRoZSBBQ0sgdG8gaXRzIEYgcGFja2V0IGNvbnRhaW4gZXhhY3RseSB0aGUgc2FtZSBu YW1lLAotICAgRk9PLkJBUi4gSG93ZXZlciwgQy1LZXJtaXQgbGlrZXMgdG8gc2VuZCBiYWNrIHRo ZSBmdWxsIHBhdGhuYW1lLAotICAgY2F1c2luZyB0aGUgTVVNUFMgS2VybWl0IHRvIGZhaWwuIFNF VCBGLUFDSy1CVUcgT04gZG9lc24ndCBoZWxwIGhlcmUuCi0gICBTbyBhIHNlcGFyYXRlIGNvbW1h bmQgaGFzIGJlZW4gYWRkZWQgdG8gaGFuZGxlIHRoaXMgc2l0dWF0aW9uOgotCi0gIFNFVCBGLUFD Sy1QQVRIIHsgT04sIE9GRiB9Ci0KLSAgIE5vcm1hbGx5IGl0IGlzIE9OIChyZWdhcmRsZXNzIG9m IHRoZSBTRVQgU0VORCBQQVRITkFNRVMgc2V0dGluZykuIFVzZQotICAgU0VUIEYtQUNLLVBBVEgg T0ZGIHRvIGluc3RydWN0IEtlcm1pdCB0byBzZW5kIGJhY2sgb25seSB0aGUgZmlsZW5hbWUKLSAg IHdpdGhvdXQgdGhlIHBhdGggaW4gdGhlIEFDSyB0byB0aGUgRiBwYWNrZXQuCi0KLSAgICA0LjIy LjUuIFNwdXJpb3VzIFJlZnVzYWxzCi0KLSAgIFNvbWUgS2VybWl0IGltcGxlbWVudGF0aW9ucywg bm90YWJseSBQRFAtMTEgS2VybWl0IDMuNjAgYW5kIGVhcmxpZXIsCi0gICBoYXZlIGJ1Z3MgaW4g dGhlaXIgaGFuZGxpbmcgb2YgQXR0cmlidXRlIHBhY2tldHMgdGhhdCBjYW4gY2F1c2UKLSAgIHVu d2FycmFudGVkIHJlZnVzYWwgb2YgaW5jb21pbmcgZmlsZXMsIGUuZy4gYmFzZWQgb24gZGF0ZSBv ciBzaXplLiBUaGlzCi0gICBjYW4gYmUgd29ya2VkIGFyb3VuZCBieSB0ZWxsaW5nIG9uZSBvciBi b3RoIG9mIHRoZSBLZXJtaXQgcGFydG5lcnMgdG86Ci0KLSAgU0VUIEFUVFJJQlVURVMgT0ZGCi0K LSAgICA0LjIyLjYuIEZhaWx1cmVzIGR1cmluZyB0aGUgRGF0YSBUcmFuc2ZlciBQaGFzZQotCi0g ICBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgY29udHJvbC1jaGFyYWN0ZXIgdW5wcmVmaXhpbmcgKFs1 MzVdU2VjdGlvbgotICAgNC4yMi4zICksIGFuZCBmaXhlZCBieToKLQotICBTRVQgUFJFRklYSU5H IEFMTAotCi0gICBJdCBjYW4gYWxzbyBoYXZlIG51bWVyb3VzIG90aGVyIGNhdXNlcywgZXhwbGFp bmVkIGluIENoYXB0ZXIgMTAgb2YKLSAgIFs1MzZdVXNpbmcgQy1LZXJtaXQ6IHRoZSBjb25uZWN0 aW9uIGlzIG5vdCA4LWJpdCB0cmFuc3BhcmVudCAoc28gdXNlCi0gICAic2V0IHBhcml0eSBzcGFj ZSIgb3Igc29tZXN1Y2gpLCBpbmFkZXF1YXRlIGZsb3cgY29udHJvbCwgZXRjLiBDb25zdWx0Ci0g ICB0aGUgbWFudWFsLgotCi0gICAgNC4yMi43LiBGcmFjdHVyZWQgRmlsZW5hbWVzCi0KLSAgIEF0 IGxlYXN0IG9uZSB3ZWxsLWtub3duIFBDLWJhc2VkIGNvbW11bmljYXRpb25zIHBhY2thZ2UgbmVn b3RpYXRlcyBkYXRhCi0gICBjb21wcmVzc2lvbiwgd2hpY2ggKGFjY29yZGluZyB0byB0aGUgcHJv dG9jb2wgc3BlY2lmaWNhdGlvbikgYXBwbGllcyB0bwotICAgYm90aCB0aGUgZmlsZW5hbWUgYW5k IHRoZSBmaWxlIGRhdGEsIGJ1dCB0aGVuIGZhaWxzIHRvIGRlY29tcHJlc3MgdGhlCi0gICBmaWxl bmFtZS4gRXhhbXBsZTogQy1LZXJtaXQgc2VuZHMgYSBmaWxlIGNhbGxlZCBSMDAwMTAxLkRBVCAo d2hlcmUKLSAgIDAwMDEwMSBtaWdodCBiZSBub24tWTJLLXdpc2UgWVlNTUREIG5vdGF0aW9uKSwg YW5kIHRoZSBwYWNrYWdlIGluCi0gICBxdWVzdGlvbiBzdG9yZXMgdGhlIGZpbGVzIGFzIFJ+IzAx MDEuREFULiBXb3JrYXJvdW5kOiBUZWxsIEMtS2VybWl0IHRvCi0gICBTRVQgUkVQRUFUIENPVU5U UyBPRkYuCi0KLSAgICA0LjIyLjguIEJhZCBGaWxlIERhdGVzCi0KLSAgIEF0IGxlYXN0IG9uZSB3 ZWxsLWtub3duIFBDLWJhc2VkIGNvbW11bmljYXRpb25zIHBhY2thZ2UgbmVnb3RpYXRlcyB0aGUK LSAgIHBhc3Npbmcgb2YgZmlsZSB0aW1lc3RhbXBzIGZyb20gc2VuZGVyIHRvIHJlY2VpdmVyLCBi dXQgd2hlbiBpdCBpcwotICAgc2VuZGluZyBmaWxlcywgaXQgYWx3YXlzIGdpdmVzIHRoZW0gYSB0 aW1lc3RhbXAgb2YgMSBGZWJydWFyeSAxOTcwLgotICAgV29ya2Fyb3VuZDogdGVsbCBDLUtlcm1p dCB0byBTRVQgQVRUUklCVVRFIERBVEUgT0ZGLiBZb3UgZG9uJ3QgZ2V0IHRoZQotICAgZmlsZSdz IHJlYWwgZGF0ZSwgYnV0IHlvdSBhbHNvIGRvbid0IGdldCAxIEZlYiAxOTcwOyBpbnN0ZWFkIHRo ZSBmaWxlCi0gICBnZXRzIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuCi0KLSAgNC4yMy4gRmls ZSBUcmFuc2ZlciBSZWNvdmVyeQotCi0gICBQcmlvciB0byBDLUtlcm1pdCA3LjAsIFJFU0VORCAo U0VORCAvUkVDT1ZFUikgYW5kIFJFR0VUIChHRVQgL1JFQ09WRVIpCi0gICByZWZ1c2VkIHRvIHdv cmsgaWYgRklMRSBUWVBFIHdhcyBub3QgQklOQVJZIG9yIHRoZSAvQklOQVJZIHN3aXRjaCB3YXMK LSAgIG5vdCBpbmNsdWRlZC4gTm93IHRoZXNlIGNvbW1hbmRzIGluY2x1ZGUgYW4gaW1wbGllZCAv QklOQVJZIHN3aXRjaCwKLSAgIG1lYW5pbmcgdGhleSBzZXQgdGhlIGZpbGUgdHlwZSB0byBiaW5h cnkgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUKLSAgIGNvbW1hbmQgYXV0b21hdGljYWxseS4KLQot ICAgSW4gdGhlIGNsaWVudC9zZXJ2ZXIgYXJyYW5nZW1lbnQsIHRoaXMgYWxzbyBmb3JjZXMgdGhl IHNlcnZlciBpbnRvCi0gICBiaW5hcnkgbW9kZSAoaWYgaXQgaXMgQy1LZXJtaXQgNy4wIG9yIGdy ZWF0ZXIsIG9yIEs5NSAxLjEuMTkgb3IKLSAgIGdyZWF0ZXIpIHNvIHRoZSByZWNvdmVyeSBvcGVy YXRpb24gcHJvY2VlZHMsIGp1c3QgYXMgeW91IGFza2VkIGFuZAotICAgZXhwZWN0ZWQuCi0KLSAg IEJVVC4uLiBKdXN0IGFzIGJlZm9yZSwgdGhlIHJlc3VsdHMgYXJlIGNvcnJlY3Qgb25seSB1bmRl ciB0aGUgZm9sbG93aW5nCi0gICBjb25kaXRpb25zOgotCi0gICAgICogSWYgdGhlIHByaW9yIGlu dGVycnVwdGVkIHRyYW5zZmVyIHdhcyBhbHNvIGluIGJpbmFyeSBtb2RlOyBvcjoKLSAgICAgKiBJ ZiB0aGUgcHJpb3IgdHJhbnNmZXIgd2FzIGluIHRleHQgbW9kZSBhbmQgdGhlIG90aGVyIGNvbXB1 dGVyIHdhcyBhCi0gICAgICAgImxpa2UgcGxhdGZvcm0iIChlLmcuIFVOSVgtdG8tVU5JWCwgV2lu ZG93cy10by1XaW5kb3dzLAotICAgICAgIERPUy10by1XaW5kb3dzKSBBTkQgdGhlcmUgd2FzIG5v IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gKGkuZS4KLSAgICAgICBUUkFOU0ZFUiBDSEFSQUNU RVItU0VUIHdhcyBUUkFOU1BBUkVOVCkuCi0KLSAgIE5vdGUgdGhhdCB0aGVzZSBjaXJjdW1zdGFu Y2VzIGFyZSBtb3JlIGxpa2VseSB0byBvYnRhaW4gaW4gQy1LZXJtaXQKLSAgIDcuMCwgaW4gd2hp Y2g6Ci0KLSAgICAgKiBUaGUgZGVmYXVsdCBGSUxFIFRZUEUgaW4gQy1LZXJtaXQgNy4wIGlzIEJJ TkFSWS4KLSAgICAgKiBUaGUgZGVmYXVsdCBGSUxFIElOQ09NUExFVEUgc2V0dGluZyBpcyBBVVRP LCB3aGljaCBtZWFucyBLRUVQIGlmCi0gICAgICAgdGhlIHRyYW5zZmVyIGlzIGluIGJpbmFyeSBt b2RlLCBESVNDQVJEIG90aGVyd2lzZS4KLSAgICAgKiBDLUtlcm1pdCA3LjAsIEtlcm1pdCA5NSAx LjEuMTcsIGFuZCBNUy1ET1MgS2VybWl0IDMuMTUgYW5kIGxhdGVyCi0gICAgICAgY2FuIHJlY29n bml6ZSAibGlrZSBwbGF0Zm9ybXMiIGFuZCBzd2l0Y2ggaW50byBiaW5hcnkgbW9kZQotICAgICAg IGF1dG9tYXRpY2FsbHkuIFRyYW5zZmVycyBiZXR3ZWVuIGxpa2UgcGxhdGZvcm1zIGFyZSBhbHdh eXMgYmluYXJ5Ci0gICAgICAgdW5sZXNzIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gaGFzIGJl ZW4gcmVxdWVzdGVkLCBhbmQgdGhlbiBpcwotICAgICAgIHN0aWxsIGJpbmFyeSBmb3IgYWxsIGZp bGVzIHdob3NlIG5hbWVzIG1hdGNoIGEgYmluYXJ5IHBhdHRlcm4sCi0gICAgICAgdW5sZXNzIHRo ZSBhdXRvbWF0aWMgbWVjaGFuaXNtcyBoYXZlIGJlZW4gZGlzYWJsZWQgKHdpdGggYSAvVEVYVAot ICAgICAgIHN3aXRjaCwgb3Igd2l0aCBTRVQgVFJBTlNGRVIgTU9ERSBNQU5VQUwpLgotICAgICAq IFNFTkQgL0JJTkFSWSBhbmQgR0VUIC9CSU5BUlkgYWx3YXlzIGZvcmNlIGJpbmFyeS1tb2RlIHRy YW5zZmVycywKLSAgICAgICBldmVuIHdoZW4gRklMRSBUWVBFIGlzIFRFWFQsIGV2ZW4gd2hlbiBU UkFOU0ZFUiBNT0RFIGlzIEFVVE9NQVRJQywKLSAgICAgICBldmVuIHdoZW4gUEFUVEVSTlMgYXJl IE9OIGFuZCB0aGUgZmlsZSdzIG5hbWUgbWF0Y2hlcyBhIHRleHQKLSAgICAgICBwYXR0ZXJuLgot Ci0gICBCdXQgYWxzbyBub3RlIHRoYXQgdGhlIGF1dG9tYXRpYyBjbGllbnQvc2VydmVyIHRyYW5z ZmVyLW1vZGUKLSAgIGFkanVzdG1lbnRzIGRvIG5vdCB3b3JrIHdpdGggdmVyc2lvbnMgb2YgQy1L ZXJtaXQgcHJpb3IgdG8gNy4wIG9yIEs5NQotICAgcHJpb3IgdG8gMS4xLjE2LgotCi0gICBJZiB0 aGUgcHJpb3IgdHJhbnNmZXIgd2FzIGluIHRleHQgbW9kZToKLQotICAgICAqIElmIHRleHQtbW9k ZSB0cmFuc2ZlcnMgYmV0d2VlbiB0aGUgdHdvIHBsYXRmb3JtcyBhcmUKLSAgICAgICAibGVuZ3Ro LWNoYW5naW5nIiAoYXMgdGhleSBhcmUgYmV0d2VlbiBVTklYIC0tIHdoaWNoIHRlcm1pbmF0ZXMK LSAgICAgICB0ZXh0IGxpbmVzIHdpdGggTEYgLS0gYW5kIERPUyBvciBXaW5kb3dzIC0tIHdoaWNo IHRlcm1pbmF0ZXMgdGV4dAotICAgICAgIGxpbmVzIHdpdGggQ1JMRiksIHRoZSByZWNvdmVyZWQg ZmlsZSB3aWxsIGJlIGNvcnJ1cHQuCi0gICAgICogSWYgdGV4dC1tb2RlIHRyYW5zZmVycyBiZXR3 ZWVuIHRoZSB0d28gcGxhdGZvcm1zIGFyZSBub3QKLSAgICAgICBsZW5ndGgtY2hhbmdpbmcsIGJ1 dCBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIHdhcyBhY3RpdmUgaW4gdGhlCi0gICAgICAgcHJp b3IgdHJhbnNmZXIsIHRoZSByZXN1bHQgd2lsbCBiZSBhIGZpbGUgaW4gd2hpY2ggdGhlIGZpcnN0 IHBhcnQKLSAgICAgICBoYXMgdHJhbnNsYXRlZCBjaGFyYWN0ZXJzIGFuZCB0aGUgc2Vjb25kIHBh cnQgZG9lcyBub3QuCi0KLSAgIEJ1dCBpbiBDLUtlcm1pdCA3LjAgYW5kIEs5NSAxLjEuMTkgYW5k IGxhdGVyLCBpbmNvbXBsZXRlbHkgdHJhbnNmZXJyZWQKLSAgIHRleHQgZmlsZXMgYXJlIG5vdCBr ZXB0IHVubGVzcyB5b3UgY2hhbmdlIHRoZSBkZWZhdWx0LiBCdXQgaWYgeW91IGhhdmUKLSAgIGRv bmUgdGhpcywgYW5kIHlvdSBoYXZlIGFuIGluY29tcGxldGVseSB0cmFuc2ZlcnJlZCB0ZXh0IGZp bGUsIHlvdSdsbAotICAgbmVlZCB0bzoKLQotICAgICAqIFRyYW5zZmVyIHRoZSB3aG9sZSBmaWxl IGFnYWluIGluIHRleHQgbW9kZSwgb3I6Ci0gICAgICogVXNlIFNFTkQgL1NUQVJUSU5HLUFUOiB0 byByZWNvdmVyIHRoZSB0cmFuc2ZlciBhdCB0aGUgY29ycmVjdAotICAgICAgIHBvaW50OyBidXQg eW91IGhhdmUgdG8gZmluZCBvdXQgd2hhdCB0aGF0IHBvaW50IGlzLCBhcyBkZXNjcmliZWQgaW4K LSAgICAgICB0aGUgbWFudWFsLgotCi0gICBLZXJtaXQgaGFzIG5vIHdheSBvZiBrbm93aW5nIHdo ZXRoZXIgdGhlIHByZXZpb3VzIHRyYW5zZmVyIHdhcyBpbiB0ZXh0Ci0gICBvciBiaW5hcnkgbW9k ZSBzbyBpdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGNob29zZSB0aGUgYXBwcm9wcmlhdGUK LSAgIHJlY292ZXJ5IG1ldGhvZC4KLQotICAgSWYgeW91IHVzZSBDLUtlcm1pdCB0byBtYWludGFp biBwYXJhbGxlbCBkaXJlY3RvcmllcyBvbiBkaWZmZXJlbnQKLSAgIGNvbXB1dGVycywgdXNpbmcg U0VUIEZJTEUgQ09MTElTSU9OIHRvIHRyYW5zZmVyIG9ubHkgdGhvc2UgZmlsZXMgdGhhdAotICAg Y2hhbmdlZCBzaW5jZSBsYXN0IHRpbWUsIGFuZCB0aGUgZmlsZXMgYXJlIGJpZyBlbm91Z2ggKG9y IHRoZQotICAgY29ubmVjdGlvbiBzbG93IGVub3VnaCkgdG8gcmVxdWlyZSBTRU5EIC9SRUNPVkVS IHRvIHJlc3VtZSBpbnRlcnJ1cHRlZAotICAgdHJhbnNmZXJzLCB5b3Ugc2hvdWxkIHJlbWVtYmVy IHRoYXQgU0VORCAvUkVDT1ZFUiAoUkVTRU5EKSBvdmVycmlkZXMKLSAgIGFsbCBGSUxFIENPTExJ U0lPTiBzZXR0aW5ncy4gVGhlcmVmb3JlIHlvdSBzaG91bGQgdXNlIFNFTkQgL1JFQ09WRVIKLSAg IChSRVNFTkQpIG9ubHkgb24gdGhlIGZpbGUgdGhhdCB3YXMgaW50ZXJydXB0ZWQsIG5vdCB0aGUg ZmlsZSBncm91cC4gRm9yCi0gICBleGFtcGxlLCBpZiB0aGUgb3JpZ2luYWwgdHJhbnNmZXIgd2Fz IGluaXRpYXRlZCB3aXRoOgotCi0gIFNFTkQgKgotCi0gICBhbmQgd2FzIGludGVycnVwdGVkLCB0 aGVuIGFmdGVyIHJlZXN0YWJsaXNoaW5nIHlvdXIgY29ubmVjdGlvbiBhbmQKLSAgIHN0YXJ0aW5n IHRoZSBLZXJtaXQgcmVjZWl2ZXIgd2l0aCBTRVQgRklMRSBDT0xMSVNJT04gVVBEQVRFIG9uIHRo ZQotICAgcmVtb3RlIGVuZCwgdXNlIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgYXQgdGhlIHNlbmRl ciB0byByZXN1bWUgdGhlCi0gICB0cmFuc2ZlcjoKLQotICBTRU5EIC9SRUNPVkVSIG5hbWUtb2Yt aW50ZXJydXB0ZWQtZmlsZQotCi0gICBhbmQgdGhlbjoKLQotICBTRU5EICoKLQotICAgKEluIEMt S2VybWl0IDcuMCBhbmQgbGF0ZXIsIFx2KGZpbGVuYW1lKSBjb250YWlucyB0aGUgbmFtZSBvZiB0 aGUgZmlsZQotICAgbW9zdCByZWNlbnRseSB0cmFuc2ZlcnJlZCwgYXMgbG9uZyB5b3UgaGF2ZSBu b3QgRVhJVGVkIGZyb20gS2VybWl0IG9yCi0gICBjaGFuZ2VkIGRpcmVjdG9yeSwgZXRjLgotCi0g IDQuMjQuIEZJTEUgQ09MTElTSU9OIFVQREFURSBDbGFyaWZpY2F0aW9uCi0KLSAgIEluIFVOSVgs IGZpbGUgbW9kaWZpY2F0aW9uIGRhdGVzIGFyZSB1c2VkIHdoZW4gY29tcGFyaW5nIHRoZSBmaWxl IGRhdGUKLSAgIHdpdGggdGhlIGRhdGUgaW4gdGhlIGF0dHJpYnV0ZSBwYWNrZXQuIEluIFZNUywg aG93ZXZlciwgdGhlIGZpbGUKLSAgIGNyZWF0aW9uIGRhdGUgaXMgdXNlZC4gVGhlc2UgdHdvIHBv bGljaWVzIHJlZmxlY3QgdGhlIHByZWZlcmVuY2VzIG9mCi0gICB0aGUgdHdvIHVzZXIgY29tbXVu aXRpZXMuCi0KLSAgIEFsc28sIHJlbWVtYmVyIHRoYXQgdGhlIGZpbGUgZGF0ZS90aW1lIGdpdmVu IGluIHRoZSBhdHRyaWJ1dGUgcGFja2V0IGlzCi0gICB0aGUgbG9jYWwgdGltZSBhdCB0aGUgZmls ZSBzZW5kZXIuIEF0IHByZXNlbnQsIG5vIHRpbWV6b25lIGNvbnZlcnNpb25zCi0gICBhcmUgZGVm aW5lZCBpbiBvciBwZXJmb3JtZWQgYnkgdGhlIEtlcm1pdCBwcm90b2NvbC4gVGhpcyBpcyBwcmlt YXJpbHkKLSAgIGJlY2F1c2UgdGhpcyBmZWF0dXJlIHdhcyBkZXNpZ25lZCBhdCBhIHRpbWUgd2hl biBtYW55IG9mIHRoZSBzeXN0ZW1zCi0gICB3aGVyZSBLZXJtaXQgcnVucyBoYWQgbm8gY29uY2Vw dCBvZiB0aW1lem9uZSwgYW5kIHRoZXJlZm9yZSB3b3VsZCBiZQotICAgdW5hYmxlIHRvIGNvbnZl cnQgKHNheSwgdG8vZnJvbSBHTVQgb3IgVVRDIG9yIFp1bHUgdGltZSkuCi0KLSAgIEFzIGEgY29u c2VxdWVuY2UsIHNvbWUgdW5leHBlY3RlZCByZXN1bHRzIG1pZ2h0IG9jY3VyIHdoZW4gdHJhbnNm ZXJyaW5nCi0gICBmaWxlcyBhY3Jvc3MgdGltZXpvbmVzOyBlLmcuIGNvbW1hbmRzIG9uIHRoZSB0 YXJnZXQgc3lzdGVtIHRoYXQgYXJlCi0gICBzZW5zaXRpdmUgdG8gZmlsZSBkYXRlcyBtaWdodCBu b3Qgd29yayAoVU5JWCAibWFrZSIsIGJhY2t1cHMsIGV0YykuCi0KLSAgIFRpbWV6b25lIGhhbmRs aW5nIGlzIGRlZmVycmVkIGZvciBhIGZ1dHVyZSByZWxlYXNlLgotCi0gIDQuMjUuIEF1dG9kb3du bG9hZCBJbXByb3ZlbWVudHMKLQotICAgUmVmZXIgdG8gcGFnZXMgMTY0LTE2NSBvZiBbNTM3XVVz aW5nIEMtS2VybWl0IGFib3V0IHRoZSBoYXphcmRzIG9mCi0gICBhdXRvZG93bmxvYWQgd2hlbiBD LUtlcm1pdCBpcyAiaW4gdGhlIG1pZGRsZSIuIEFzIG9mIEMtS2VybWl0IDcuMCwgbm8KLSAgIG1v cmUgaGF6YXJkcy4gSWYgQy1LZXJtaXQgaGFzIFRFUk1JTkFMIEFVVE9ET1dOTE9BRCBPTiBhbmQg aXQgZGV0ZWN0cyBhCi0gICBwYWNrZXQgb2YgdGhlIGN1cnJlbnQgcHJvdG9jb2wgdHlwZSAoS2Vy bWl0IG9yIFptb2RlbSksIGl0ICJlcmFzZXMiIHRoZQotICAgdmlzdWFsIGFzcGVjdCBvZiB0aGUg cGFja2V0IHRoYXQgd291bGQgYmUgc2VlbiBieSB0aGUgdGVybWluYWwgKG9yLAotICAgbW9yZSB0 byB0aGUgcG9pbnQsIHRoZSBlbXVsYXRvciwgc3VjaCBhcyBLOTUpLiBUaGlzIHdheSwgb25seSBD LUtlcm1pdAotICAgZ29lcyBpbnRvIFJFQ0VJVkUgbW9kZSwgYW5kIG5vdCBhbHNvIHRoZSB0ZXJt aW5hbCBlbXVsYXRvciB0aHJvdWdoCi0gICB3aGljaCBDLUtlcm1pdCBpcyBhY2Nlc3NlZC4gQW5k IHRoZXJlZm9yZSwgaXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0bwotICAgU0VUIFRFUk1JTkFM IEFVVE9ET1dOTE9BRCBPRkYgdG8gcHJldmVudCBtdWx0aXBsZSBLZXJtaXRzIGZyb20gZ29pbmcK LSAgIGludG8gcmVjZWl2ZSBtb2RlIGF0IG9uY2UsIGJ1dCBvZiBjb3Vyc2UgaXQgaXMgc3RpbGwg bmVjZXNzYXJ5IHRvCi0gICBlbnN1cmUgdGhhdCwgd2hlbiB5b3UgaGF2ZSBtdWx0aXBsZSBLZXJt aXRzIGluIGEgY2hhaW4sIHRoYXQgdGhlCi0gICBkZXNpcmVkIG9uZSByZWNlaXZlcyB0aGUgYXV0 b2Rvd25sb2FkLgotCi0gICBUaGUgZGVmYXVsdHMgaGF2ZSBub3QgYmVlbiBjaGFuZ2VkOyBLZXJt aXQgOTUgc3RpbGwgaGFzIGF1dG9kb3dubG9hZCBPTgotICAgYnkgZGVmYXVsdCwgYW5kIEMtS2Vy bWl0IGhhcyBpdCBPRkYgYnkgZGVmYXVsdC4KLQotICA1LiBDTElFTlQvU0VSVkVSCi0KLSAgNS4w LiBIaW50cwotCi0gICBJZiB5b3UgdXNlIFNFVCBTRVJWRVIgR0VULVBBVEggdG8gc2V0IHVwIHlv dXIgc2VydmVyLCBhbmQgdGhlIEdFVC1QQVRICi0gICBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzZXJ2 ZXIncyBjdXJyZW50IGRpcmVjdG9yeSwgY2xpZW50cyBjYW4gYmVjb21lCi0gICBxdWl0ZSBjb25m dXNlZC4gRm9yIGV4YW1wbGUsICJyZW1vdGUgZGlyIG9vZmEudHh0IiBzaG93cyBhIGZpbGUgbmFt ZWQKLSAgIG9vZmEudHh0LCBidXQgImdldCBvb2ZhLnR4dCIgZmFpbHMuIEluIHRoaXMgc2l0dWF0 aW9uLCB5b3Ugc2hvdWxkCi0gICBlaXRoZXIgRElTQUJMRSBESVIgb3IgbWFrZSB5b3VyIEdFVC1Q QVRIIGluY2x1ZGUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotCi0gIDUuMS4gTmV3IENvbW1hbmQt TGluZSBPcHRpb25zCi0KLSAgIFRoZSAtRyBjb21tYW5kLWxpbmUgb3B0aW9uIGlzIGxpa2UgLWcg KEdFVCksIGV4Y2VwdCB0aGUgaW5jb21pbmcgZmlsZQotICAgaXMgc2VudCB0byBzdGFuZGFyZCBv dXRwdXQgcmF0aGVyIHRoYW4gd3JpdHRlbiB0byBkaXNrLgotCi0gICBUaGUgLUkgb3B0aW9uICgi SW50ZXJuZXQiKSBpcyB1c2VkIHRvIHRlbGwgYSByZW1vdGUgQy1LZXJtaXQgcHJvZ3JhbQotICAg dGhhdCB5b3UgYXJlIGNvbWluZyBpbiB2aWEgSW50ZXJuZXQgVGVsbmV0IG9yIFJsb2dpbiBhbmQg dGhlcmVmb3JlIGhhdmUKLSAgIGEgcmVsaWFibGUgY29ubmVjdGlvbi4gVGhlIC1JIG9wdGlvbiBp cyBlcXVpdmFsZW50IHRvIFNFVCBSRUxJQUJMRSBPTgotICAgYW5kIFNFVCBGTE9XIE5PTkUuCi0K LSAgIFRoZSAtTyBvcHRpb24gKCJPbmx5IE9uZSIpIHRlbGxzIEMtS2VybWl0IHRvIGVudGVyIHNl cnZlciBtb2RlIGJ1dCB0aGVuCi0gICBleGl0IGFmdGVyIHRoZSBmaXJzdCBjbGllbnQgb3BlcmF0 aW9uLgotCi0gICBTZWUgWzUzOF1TZWN0aW9uIDkuMyBmb3IgZGV0YWlscy4KLQotICA1LjIuIE5l dyBDbGllbnQgQ29tbWFuZHMKLQotICAgQllFIGFuZCBGSU5JU0ggbm8gbG9uZ2VyIHRyeSB0byBk byBhbnl0aGluZyBpZiBhIGNvbm5lY3Rpb24gaXMgbm90Ci0gICBhY3RpdmUuIFRodXMgYSBzZXF1 ZW5jZSBsaWtlICJoYW5ndXAiIGZvbGxvd2VkIGJ5ICJieWUiIG9yICJmaW5pc2giCi0gICB3aWxs IG5vIGxvbmdlciBnZXQgc3R1Y2sgaW4gYSBsb25nIHRpbWVvdXQtYW5kLXJldHJhbnNtaXNzaW9u IGN5Y2xlLAotICAgbm9yIHdpbGwgaXQgdHJ5IHRvIG9wZW4gYSBuZXcgY29ubmVjdGlvbi4KLQot ICAgUkVNT1RFIEVYSVQKLSAgICAgICAgICBTaW1pbGFyIHRvIEZJTklTSCwgZXhjZXB0IGl0IGVu c3VyZXMgdGhhdCB0aGUgS2VybWl0IHNlcnZlcgotICAgICAgICAgIHByb2dyYW0gZXhpdHMgYmFj ayB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvciBzaGVsbCBwcm9tcHQuCi0gICAgICAgICAgKEZJ TklTSCB3b3VsZCByZXR1cm4gaXQgdG8gaXRzIGludGVyYWN0aXZlIHByb21wdCBpZiBpdCB3YXMK LSAgICAgICAgICBzdGFydGVkIGluIGludGVyYWN0aXZlIG1vZGUsIGFuZCB3b3VsZCBjYXVzZSBp dCB0byBleGl0IGlmIGl0Ci0gICAgICAgICAgZW50ZXJlZCBzZXJ2ZXIgbW9kZSB2aWEgY29tbWFu ZC1saW5lIG9wdGlvbi4pIFdoZW4gQy1LZXJtaXQgaXMKLSAgICAgICAgICB0byBiZSB0aGUgc2Vy dmVyLCB5b3UgY2FuIHVzZSB7IEVOQUJMRSwgRElTQUJMRSB9IEVYSVQgdG8KLSAgICAgICAgICBj b250cm9sIHRoZSBjbGllbnQncyBhY2Nlc3MgdG8gdGhpcyBmZWF0dXJlLgotCi0gICBSRU1PVEUg TUtESVIgZGlyZWN0b3J5LW5hbWUKLSAgICAgICAgICBUZWxscyB0aGUgY2xpZW50IHRvIGFzayB0 aGUgc2VydmVyIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB3aXRoCi0gICAgICAgICAgdGhlIGdpdmVu IG5hbWUsIHdoaWNoIGNhbiBiZSBhYnNvbHV0ZSBvciByZWxhdGl2ZS4gVGhlIHN5bnRheCBvZgot ICAgICAgICAgIHRoZSBkaXJlY3RvcnkgbmFtZSBkZXBlbmRzIG9uIHRoZSBLZXJtaXQgc2VydmVy IChzZWUgWzUzOV1uZXh0Ci0gICAgICAgICAgc2VjdGlvbik7IGluIGFsbCBjYXNlcywgaXQgY2Fu IGJlIGluIHRoZSBzeW50YXggb2YgdGhlIHN5c3RlbQotICAgICAgICAgIHdoZXJlIHRoZSBzZXJ2 ZXIgaXMgcnVubmluZyAoVU5JWCwgVk1TLCBET1MsIGV0YykgYnV0IG5ld2VyCi0gICAgICAgICAg c2VydmVycyBhbHNvIGFjY2VwdCBVTklYIHN5bnRheCwgbm8gbWF0dGVyIHdoYXQgdGhlIHVuZGVy bHlpbmcKLSAgICAgICAgICBwbGF0Zm9ybS4gVGhlIHNlcnZlciB3aWxsIG5vdCBleGVjdXRlIHRo aXMgY29tbWFuZCBpZiAoYSkgaXQKLSAgICAgICAgICBkb2VzIG5vdCB1bmRlcnN0YW5kIGl0LCAo YikgYSBESVNBQkxFIE1LRElSIGNvbW1hbmQgaGFzIGJlZW4KLSAgICAgICAgICBnaXZlbiwgb3Ig KGMpIGEgRElTQUJMRSBDV0QgY29tbWFuZCBoYXMgYmVlbiBnaXZlbjsgb3RoZXJ3aXNlLAotICAg ICAgICAgIHRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkLCBidXQgd2lsbCBmYWlsIGlmIHRoZSBkaXJl Y3RvcnkgY2FuIG5vdAotICAgICAgICAgIGJlIGNyZWF0ZWQsIGluIHdoaWNoIGNhc2VzIG1vc3Qg c2VydmVycyB3aWxsIGF0dGVtcHQgdG8gcmV0dXJuIGEKLSAgICAgICAgICBtZXNzYWdlIGdpdmlu ZyB0aGUgcmVhc29uIGZvciBmYWlsdXJlLiBUaGUgUkVNT1RFIE1LRElSIGNvbW1hbmQKLSAgICAg ICAgICBzdWNjZWVkcyBpZiB0aGUgcmVtb3RlIGRpcmVjdG9yeSBpcyBjcmVhdGVkLCBvciBpZiBp dCBhbHJlYWR5Ci0gICAgICAgICAgZXhpc3RzIGFuZCB0aGVyZWZvcmUgZG9lcyBub3QgbmVlZCB0 byBiZSBjcmVhdGVkLCBhbmQgZmFpbHMKLSAgICAgICAgICBvdGhlcndpc2UuCi0KLSAgIFJFTU9U RSBSTURJUiBkaXJlY3RvcnktbmFtZQotICAgICAgICAgIFRlbGxzIHRoZSBjbGllbnQgdG8gYXNr IHRoZSBzZXJ2ZXIgdG8gcmVtb3ZlIChkZWxldGUpIGEKLSAgICAgICAgICBkaXJlY3Rvcnkgd2l0 aCB0aGUgZ2l2ZW4gbmFtZS4gVGhlIHNhbWUgY29uc2lkZXJhdGlvbnMgYXBwbHkgYXMKLSAgICAg ICAgICBmb3IgUkVNT1RFIE1LRElSLgotCi0gICBSRU1PVEUgU0VUIEZJTEUgSU5DT01QTEVURSB7 IERJU0NBUkQsIEtFRVAsIEFVVE8gfQotICAgICAgICAgIFByZXZpb3VzbHkgdGhpcyB3YXMgb25s eSBhdmFpbGFibGUgaW4gaXRzIGVhcmxpZXIgZm9ybSwgUkVNT1RFCi0gICAgICAgICAgU0VUIElO Q09NUExFVEUgKG5vIEZJTEUpLiBUaGUgZWFybGllciBmb3JtIGlzIHN0aWxsIGF2YWlsYWJsZSwK LSAgICAgICAgICBidXQgaW52aXNpYmxlLiBBbHNvLCBBVVRPIHdhcyBhZGRlZCwgbWVhbmluZyBL RUVQIGlmIGluIGJpbmFyeQotICAgICAgICAgIG1vZGUsIERJU0NBUkQgb3RoZXJ3aXNlLgotCi0g ICBSRU1PVEUgU0VUIFRSQU5TRkVSIE1PREUgeyBBVVRPTUFUSUMsIE1BTlVBTCB9Ci0gICAgICAg ICAgVGVsbHMgdGhlIGNsaWVudCB0byBhc2sgdGhlIHNlcnZlciB0byBzZXQgdGhlIGdpdmVuCi0g ICAgICAgICAgZmlsZS10cmFuc2ZlciBtb2RlLiBBdXRvbWF0aWMgbWVhbnMgKHJvdWdobHkpOiBp ZiB0aGUgY2xpZW50IGFuZAotICAgICAgICAgIHRoZSBzZXJ2ZXIgYXJlIHJ1bm5pbmcgb24gdGhl IHNhbWUga2luZCBvZiBjb21wdXRlciAoZS5nLiBib3RoCi0gICAgICAgICAgYXJlIG9uIFVOSVgp LCB0aGVuIHVzZSBiaW5hcnkgbW9kZSBhdXRvbWF0aWNhbGx5OyBpZiB0aGUgc3lzdGVtCi0gICAg ICAgICAgdHlwZXMgYXJlIGRpZmZlcmVudCwgdXNlIHNvbWUgb3RoZXIgbWV0aG9kIHRvIGF1dG9t YXRpY2FsbHkKLSAgICAgICAgICBkZXRlcm1pbmUgdGV4dCBvciBiaW5hcnkgbW9kZSwgc3VjaCBh cyBmaWxlbmFtZSBwYXR0ZXJuCi0gICAgICAgICAgbWF0Y2hpbmcuIE1BTlVBTCBtZWFucywgaW4g dGhpcyBjb250ZXh0LCBvYmV5IHRoZSBjbGllbnQncyBGSUxFCi0gICAgICAgICAgVFlQRSBzZXR0 aW5nIChURVhUIG9yIEJJTkFSWSkuIFN5bm9ueW06IFJFTU9URSBTRVQgWEZFUiBNT0RFLgotCi0g ICBbIFJFTU9URSBdIFFVRVJZIEtFUk1JVCBmdW5jdGlvbihhcmdzLi4uKQotICAgICAgICAgIFBy aW9yIHRvIEMtS2VybWl0IDcuMCwgdGhlIGFyZ3VtZW50cyB3ZXJlIG5vdCBldmFsdWF0ZWQgbG9j YWxseS4KLSAgICAgICAgICBUaHVzIGl0IHdhcyBub3QgcG9zc2libGUgdG8gaGF2ZSB0aGUgc2Vy dmVyIHJ1biB0aGUgZnVuY3Rpb24KLSAgICAgICAgICB3aXRoIGNsaWVudC1zaWRlIHZhcmlhYmxl cyBhcyBhcmd1bWVudHMuIE5vdzoKLQotICBkZWZpbmUgXCVhIG9vZmEuKgotICByZW1vdGUgcXVl cnkga2VybWl0IGZpbGVzKFwlYSkgICAgOyBDbGllbnQncyBcJWEKLSAgcmVtb3RlIHF1ZXJ5IGtl cm1pdCBmaWxlcyhcXCVhKSAgIDsgU2VydmVyJ3MgXCVhCi0KLSAgIFsgUkVNT1RFIF0gTE9HSU4g WyB1c2VyIFsgcGFzc3dvcmQgXSBdCi0gICAgICAgICAgTE9HSU4gaXMgbm93IGEgc3lub255bSBm b3IgUkVNT1RFIExPR0lOLgotCi0gICBMT0dPVVQKLSAgICAgICAgICBUaGlzIGNvbW1hbmQsIHdo ZW4gZ2l2ZW4gaW4gbG9jYWwgbW9kZSwgaXMgZXF1aXZhbGVudCB0byBSRU1PVEUKLSAgICAgICAg ICBMT0dPVVQuIFdoZW4gZ2l2ZW4gYXQgdGhlIElLU0QgcHJvbXB0LCBpdCBsb2dzIG91dCB0aGUg SUtTRC4KLSAgICAgICAgICBXaGVuIGdpdmVuIGF0IHRoZSBDLUtlcm1pdCBwcm9tcHQgd2hlbiBp dCBoYXMgbm8gY29ubmVjdGlvbiwgaXQKLSAgICAgICAgICBkb2VzIG5vdGhpbmcuCi0KLSAgIE5v dGUgdGhhdCBpbiBDLUtlcm1pdCA3LjAsIHRoZSBSRU1PVEUgKG9yIFIpIHByZWZpeCBpcyBub3Qg cmVxdWlyZWQgZm9yCi0gICBRVUVSWSwgc2luY2UgdGhlcmUgaXMgbm8gbG9jYWwgUVVFUlkgY29t bWFuZC4gVGhlIG5ldyB0b3AtbGV2ZWwgUVVFUlkKLSAgIGNvbW1hbmQgZG9lcyBleGFjdGx5IHdo YXQgUkVNT1RFIFFVRVJZIChSUVVFUlkpIGRvZXMuCi0KLSAgIEFsbCBSRU1PVEUgY29tbWFuZHMg bm93IGhhdmUgc2luZ2xlLXdvcmQgc2hvcnRjdXRzOgotCi0gU2hvcnRjdXQgICBGdWxsIEZvcm0K LSAgUkFTRyAgICAgICBSRU1PVEUgQVNTSUdOCi0gIFJDRCAgICAgICAgUkVNT1RFIENECi0gIFJD T1BZICAgICAgUkVNT1RFIENPUFkKLSAgUkRFTCAgICAgICBSRU1PVEUgREVMRVRFCi0gIFJESVIg ICAgICAgUkVNT1RFIERJUkVDVE9SWQotICBSRVhJVCAgICAgIFJFTU9URSBFWElUCi0gIFJIRUxQ ICAgICAgUkVNT1RFIEhFTFAKLSAgUkhPU1QgICAgICBSRU1PVEUgSE9TVAotICBSUFdEICAgICAg IFJFTU9URSBQV0QKLSAgUlNFVCAgICAgICBSRU1PVEUgU0VUCi0gIGV0Yy4KLQotICAgVGhlIFIg cHJlZml4IGlzIG5vdCBhcHBsaWVkIHRvIExPR0lOIGJlY2F1c2UgdGhlcmUgaXMgYWxyZWFkeSBh biBSTE9HSU4KLSAgIGNvbW1hbmQgd2l0aCBhIGRpZmZlcmVudCBtZWFuaW5nLiBJdCBpcyBub3Qg YXBwbGllZCB0byBMT0dPVVQgZWl0aGVyLAotICAgc2luY2UgTE9HT1VUIGtub3dzIHdoYXQgdG8g ZG8gaW4gZWFjaCBjYXNlLCBhbmQgZm9yIHN5bW1ldHJ5IHdpdGgKLSAgIExPR0lOLgotCi0gICAg NS4yLjEuIFJlbW90ZSBQcm9jZWR1cmUgRGVmaW5pdGlvbnMgYW5kIENhbGxzCi0KLSAgIFRoaXMg aXMgbm90aGluZyBuZXcsIGJ1dCBpdCBtaWdodCBub3QgYmUgb2J2aW91cy4uLiBSRU1PVEUgQVNT SUdOIGFuZAotICAgUkVNT1RFIFFVRVJZIG1heSBiZSB1c2VkIHRvIGFjaGlldmUgcmVtb3RlIHBy b2NlZHVyZSBleGVjdXRpb24uIFRoZQotICAgcmVtb3RlIHByb2NlZHVyZSBjYW4gYmUgZGVmaW5l ZCBsb2NhbGx5IG9yIHJlbW90ZWx5LgotCi0gICBBIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBpcyBh Y2NvbXBsaXNoZWQgYXMgbm90ZWQgaW4gdGhlIHByZXZpb3VzCi0gICBzZWN0aW9uOgotCi0gIFsg cmVtb3RlIF0gcXVlcnkga2VybWl0IGZ1bmN0aW9uLW5hbWUoYXJncy4uLikKLQotICAgVGhpcyBp bnZva2VzIGFueSBmdW5jdGlvbiB0aGF0IGlzIGJ1aWx0IGluIHRvIHRoZSBLZXJtaXQgc2VydmVy LCBlLmcuOgotCi0gIFsgcmVtb3RlIF0gcXVlcnkga2VybWl0IHNpemUoZm9vLmJhcikKLQotICAg cmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgcmVtb3RlIGZpbGUsIGZvby5iYXIuCi0KLSAgIE5vdyBu b3RlIHRoYXQgQy1LZXJtaXQgaW5jbHVkZXMgYW4gXGZleGVjdXRlKCkgZnVuY3Rpb24sIGFsbG93 aW5nIGl0IHRvCi0gICBleGVjdXRlIGFueSBtYWNybyBhcyBpZiBpdCB3ZXJlIGEgYnVpbHQtaW4g ZnVuY3Rpb24uIFNvIHN1cHBvc2UgTVlNQUNSTwotICAgaXMgdGhlIG5hbWUgb2YgYSBtYWNybyBk ZWZpbmVkIGluIHRoZSBzZXJ2ZXIuIFlvdSBjYW4gZXhlY3V0ZSBpdCBmcm9tCi0gICB0aGUgY2xp ZW50IGFzIGZvbGxvd3MgKHRoZSByZWR1bmRhbnQgInJlbW90ZSIgcHJlZml4IGlzIG9taXR0ZWQg aW4gdGhlCi0gICByZW1haW5pbmcgZXhhbXBsZXMpOgotCi0gIHF1ZXJ5IGtlcm1pdCBleGVjdXRl KG15bWFjcm8gYXJnMSBhcmcyLi4uKQotCi0gICBUaGUgcmV0dXJuIHZhbHVlLCBpZiBhbnksIGlz IHRoZSB2YWx1ZSBvZiB0aGUgUkVUVVJOIGNvbW1hbmQgdGhhdAotICAgdGVybWluYXRlZCBleGVj dXRpb24gb2YgdGhlIG1hY3JvLCBmb3IgZXhhbXBsZToKLQotICBkZWZpbmUgYWRkdHdvbnVtYmVy cyByZXR1cm4gXGZldmFsKFwlMStcJTIpCi0KLSAgIFRoZSBjbGllbnQgaW52b2NhdGlvbiB3b3Vs ZCBiZToKLQotICBxdWVyeSBrZXJtaXQgZXhlY3V0ZShhZGR0d29udW1iZXJzIDMgNCkKLSAgNwot Ci0gICBUaGUgcmVzdWx0ICgiNyIgaW4gdGhpcyBjYXNlKSBpcyBhbHNvIGFzc2lnbmVkIHRvIHRo ZSBjbGllbnQncwotICAgXHYocXVlcnkpIHZhcmlhYmxlLgotCi0gICBUbyBleGVjdXRlIGEgcmVt b3RlIHN5c3RlbSBjb21tYW5kIG9yIGNvbW1hbmQgcHJvY2VkdXJlIChzaGVsbCBzY3JpcHQsCi0g ICBldGMpIHVzZToKLQotICBxdWVyeSBrZXJtaXQgY29tbWFuZChuYW1lIGFyZ3MuLi4pCi0KLSAg IEZpbmFsbHksIHN1cHBvc2UgeW91IHdhbnQgdGhlIGNsaWVudCB0byBzZW5kIGEgbWFjcm8gdG8g dGhlIHNlcnZlciB0bwotICAgYmUgZXhlY3V0ZWQgb24gdGhlIHNlcnZlciBlbmQuIFRoaXMgaXMg ZG9uZSBhcyBmb2xsb3dzOgotCi0gIHJlbW90ZSBhc3NpZ24gbWFjcm9uYW1lIGRlZmluaXRpb24K LSAgcXVlcnkga2VybWl0IGV4ZWN1dGUobWFjcm9uYW1lIGFyZzEgYXJnMi4uLikKLQotICAgUXVv dGluZyBpcyByZXF1aXJlZCBpZiB0aGUgZGVmaW5pdGlvbiBjb250YWlucyBmb3JtYWwgcGFyYW1l dGVycy4KLQotICA1LjMuIE5ldyBTZXJ2ZXIgQ2FwYWJpbGl0aWVzCi0KLSAgICA1LjMuMS4gQ3Jl YXRpbmcgYW5kIFJlbW92aW5nIERpcmVjdG9yaWVzCi0KLSAgIFRoZSBDLUtlcm1pdCA3LjAgc2Vy dmVyIHJlc3BvbmRzIHRvIFJFTU9URSBNS0RJUiBhbmQgUkVNT1RFIFJNRElSCi0gICBjb21tYW5k cy4gVGhlIGRpcmVjdG9yeSBuYW1lIG1heSBiZSBpbiBlaXRoZXIgdGhlIG5hdGl2ZSBmb3JtYXQg b2YgdGhlCi0gICBzZXJ2ZXIncyBjb21wdXRlciwgb3IgaW4gVU5JWCBmb3JtYXQuIEZvciBleGFt cGxlLCBhIHNlcnZlciBydW5uaW5nIG9uCi0gICBWTVMgd2l0aCBhIGN1cnJlbnQgZGlyZWN0b3J5 IG9mIFtJVkFOXSBjYW4gYWNjZXB0IGNvbW1hbmRzIGZyb20gdGhlCi0gICBjbGllbnQgbGlrZToK LQotICByZW1vdGUgbWtkaXIgb2xnYSAgICAgICAgIDsgTWFrZXMgW0lWQU4uT0xHQV0gKG5vbnNw ZWNpZmljIGZvcm1hdCkKLSAgcmVtb3RlIG1rZGlyIC5vbGdhICAgICAgICA7IE1ha2VzIFtJVkFO Lk9MR0FdIChWTVMgZm9ybWF0IHdpdGhvdXQgYnJhY2tldHMpCi0gIHJlbW90ZSBta2RpciBvbGdh LyAgICAgICAgOyBNYWtlcyBbSVZBTi5PTEdBXSAoVU5JWCByZWxhdGl2ZSBmb3JtYXQpCi0gIHJl bW90ZSBta2RpciAvaXZhbi9vbGdhICAgOyBNYWtlcyBbSVZBTi5PTEdBXSAoVU5JWCBhYnNvbHV0 ZSBmb3JtYXQpCi0gIHJlbW90ZSBta2RpciBbaXZhbi5vbGdhXSAgOyBNYWtlcyBbSVZBTi5PTEdB XSAoVk1TIGFic29sdXRlIGZvcm1hdCkKLSAgcmVtb3RlIG1rZGlyIFsub2xnYV0gICAgICA7IE1h a2VzIFtJVkFOLk9MR0FdIChWTVMgcmVsYXRpdmUgZm9ybWF0KQotCi0gICAgNS4zLjEuMS4gQ3Jl YXRpbmcgRGlyZWN0b3JpZXMKLQotICAgSWYgYSBkaXJlY3RvcnkgbmFtZSBpcyBnaXZlbiB0aGF0 IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgc2VnbWVudCB0aGF0Ci0gICBkb2VzIG5vdCBleGlzdCwg dGhlIHNlcnZlciBhdHRlbXB0cyB0byBjcmVhdGUgYWxsIHRoZSBzZWdtZW50cy4gRm9yCi0gICBl eGFtcGxlLCBpZiB0aGUgY2xpZW50IHNheXM6Ci0KLSAgUkVNT1RFIE1LRElSIGxldHRlcnMvYW5n cnkKLQotICAgYSAibGV0dGVycyIgc3ViZGlyZWN0b3J5IGlzIGNyZWF0ZWQgaW4gdGhlIHNlcnZl cidzIGN1cnJlbnQgZGlyZWN0b3J5Ci0gICBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCBh bmQgdGhlbiBhbiAiYW5ncnkiIHN1YmRpcmVjdG9yeSBpcwotICAgY3JlYXRlZCBiZW5lYXRoIGl0 LCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgb25lLiBUaGlzIGNhbiByZXBlYXRlZAotICAg dG8gYW55IHJlYXNvbmFibGUgZGVwdGg6Ci0KLSAgUkVNT1RFIE1LRElSIGEvYi9jL2QvZS9mL2cv aC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy96L3kvegotCi0gICAgNS4zLjEuMi4gUmVt b3ZpbmcgRGlyZWN0b3JpZXMKLQotICAgV2hlbiBhdHRlbXB0aW5nIHRvIGV4ZWN1dGUgYSBSRU1P VEUgUk1ESVIsIHRoZSBzZXJ2ZXIgY2FuIHJlbW92ZSBvbmx5IGEKLSAgIHNpbmdsZSBkaXJlY3Rv cnksIG5vdCBhbiBlbnRpcmUgc2VxdWVuY2Ugb3IgdHJlZS4gVGhlIHN5c3RlbSBzZXJ2aWNlCi0g ICB0aGF0IGlzIGNhbGxlZCB0byByZW1vdmUgdGhlIGRpcmVjdG9yeSBnZW5lcmFsbHkgcmVxdWly ZXMgbm90IG9ubHkgdGhhdAotICAgdGhlIHNlcnZlciBwcm9jZXNzIGhhcyB3cml0ZSBkZWxldGUg YWNjZXNzLCBidXQgYWxzbyB0aGF0IHRoZSBkaXJlY3RvcnkKLSAgIGNvbnRhaW4gbm8gZmlsZXMu Ci0KLSAgIEluIHRoZSBmdXR1cmUsIGEgUkVNT1RFIFJNRElSIC9SRUNVUlNJVkUgY29tbWFuZCAo YW5kIHRoZSBhY2NvbXBhbnlpbmcKLSAgIHByb3RvY29sKSBtaWdodCBiZSBhZGRlZC4gRm9yIG5v dywgdXNlIHRoZSBlcXVpdmFsZW50IFJFTU9URSBIT1NUCi0gICBjb21tYW5kKHMpLCBpZiBhbnku Ci0KLSAgICA1LjMuMi4gRGlyZWN0b3J5IExpc3RpbmdzCi0KLSAgIERpcmVjdG9yeSBsaXN0aW5n cyBhcmUgZ2VuZXJhdGVkIGJ5IEMtS2VybWl0IGl0c2VsZiwgcmF0aGVyIHRoYW4gYnkKLSAgIHJ1 bm5pbmcgdGhlIHVuZGVybHlpbmcgc3lzdGVtJ3MgZGlyZWN0b3J5IGNvbW1hbmQuIFNvbWUgY29u dHJvbCBvdmVyCi0gICB0aGUgbGlzdGluZyBmb3JtYXQgY2FuIGJlIG9idGFpbmVkIHdpdGggdGhl IFNFVCBPUFRJT05TIERJUkVDVE9SWQotICAgY29tbWFuZCAoWzU0MF1TZWN0aW9uIDQuNS4xKS4g VGhlIGZvbGxvd2luZyBvcHRpb25zIGFmZmVjdCBsaXN0aW5ncwotICAgc2VudCBieSB0aGUgc2Vy dmVyOiAvW05PXUhFQURJTkcsIC9bTk9dRE9URklMRVMsIGFuZCAvW05PXUJBQ0tVUC4gSW4KLSAg IFVOSVggYW5kIFZNUywgdGhlIGxpc3RpbmcgaXMgYWx3YXlzIHNvcnRlZCBieSBmaWxlbmFtZS4g VGhlcmUgaXMsIGF0Ci0gICBwcmVzZW50LCBubyBwcm90b2NvbCBkZWZpbmVkIGZvciB0aGUgY2xp ZW50IHRvIHJlcXVlc3QgbGlzdGluZyBvcHRpb25zCi0gICBvZiB0aGUgc2VydmVyOyB0aGlzIG1p Z2h0IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuCi0KLSAgIFRoZSBzZXJ2ZXIncyBkaXJlY3Rvcnkg bGlzdGluZ3MgYXJlIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgotCi0gICBQcm90ZWN0aW9uIG9y IHBlcm1pc3Npb25zOgotICAgICAgICAgIEluIFVOSVggYW5kIE9TLTksIHRoaXMgaXMgYSAxMC1j aGFyYWN0ZXIgZmllbGQsIGxlZnQgYWRqdXN0ZWQuCi0gICAgICAgICAgSW4gVk1TIGl0IGlzIGEg MjItY2hhcmFjdGVyIGZpZWxkLCBsZWZ0LWFkanVzdGVkLiBJbiBlYWNoIGNhc2UsCi0gICAgICAg ICAgdGhlIHByb3RlY3Rpb24gLyBwZXJtaXNzaW9uIGNvZGVzIGFyZSBzaG93biBpbiB0aGUgc2Vy dmVyCi0gICAgICAgICAgcGxhdGZvcm0ncyBuYXRpdmUgZm9ybWF0LiBJbiBvdGhlciBvcGVyYXRp bmcgc3lzdGVtcywgdGhpcyBmaWVsZAotICAgICAgICAgIGlzIG5vdCBzaG93bi4KLQotICAgU2l6 ZSBpbiBieXRlczoKLSAgICAgICAgICBUaGlzIGlzIGFsd2F5cyBhIDEwLWNoYXJhY3RlciBmaWVs ZC4gVGhlIGZpbGUncyBzaXplIGlzIHNob3duIGFzCi0gICAgICAgICAgYSBkZWNpbWFsIG51bWJl ciwgcmlnaHQgYWRqdXN0ZWQgaW4gdGhlIGZpZWxkLiBJZiB0aGUgZmlsZSBpcyBhCi0gICAgICAg ICAgZGlyZWN0b3J5IGFuZCBpdHMgc2l6ZSBjYW4gbm90IGJlIG9idGFpbmVkLCB0aGUgc2l6ZSBp cyBzaG93biBhcwotICAgICAgICAgICI8RElSPiIuIFR3byBibGFua3MgZm9sbG93IHRoaXMgZmll bGQuCi0KLSAgIERhdGU6Ci0gICAgICAgICAgQWx3YXlzIGluIHl5eXktbW0tZGQgaGg6bW06c3Mg bnVtZXJpYyBmb3JtYXQsIGFuZCB0aGVyZWZvcmUgMTkKLSAgICAgICAgICBjaGFyYWN0ZXJzIGxv bmcuIElmIHRoZSBmaWxlJ3MgZGF0ZS90aW1lIGNhbid0IGJlIG9idGFpbmVkLAotICAgICAgICAg IHplcm9zICgwKSBhcmUgc2hvd24gZm9yIGFsbCB0aGUgZGlnaXRzLiBUaGlzIGZpZWxkIGlzIGZv bGxvd2VkCi0gICAgICAgICAgYnkgdHdvIGJsYW5rcy4KLQotICAgRmlsZW5hbWU6Ci0gICAgICAg ICAgVGhpcyBmaWVsZCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIEZpbGVuYW1lcyBh cmUgc2hvd24KLSAgICAgICAgICByZWxhdGl2ZSB0byB0aGUgc2VydmVyJ3MgY3VycmVudCBkaXJl Y3RvcnkuIEluIFVOSVgsIHN5bWJvbGljCi0gICAgICAgICAgbGlua3MgYXJlIHNob3duIGFzIHRo ZXkgYXJlIGluIGFuICJscyAtbCIgbGlzdGluZyBhcyAibGlua25hbWUKLSAgICAgICAgICAtPiBm aWxlbmFtZSIuCi0KLSAgIEluIFVOSVggYW5kIFZNUywgbGlzdGluZ3MgYXJlIHJldHVybmVkIGJ5 IHRoZSBzZXJ2ZXIgaW4gYWxwaGFiZXRpY2FsCi0gICBvcmRlciBvZiBmaWxlbmFtZS4gVGhlcmUg YXJlIHByZXNlbnRseSBubyBvdGhlciBzb3J0IG9yIHNlbGVjdGlvbgotICAgb3B0aW9ucy4KLQot ICAgSG93ZXZlciwgc2luY2UgdGhlc2UgYXJlIGZpeGVkLWZpZWxkIGxpc3RpbmdzLCBhbGwgZmll bGRzIGNhbiBiZSB1c2VkCi0gICBhcyBzb3J0IGtleXMgYnkgZXh0ZXJuYWwgc29ydCBwcm9ncmFt cy4gTm90ZSwgaW4gcGFydGljdWxhciwgdGhhdCB0aGUKLSAgIGZvcm1hdCB1c2VkIGZvciB0aGUg ZGF0ZSBhbGxvd3MgYSBub3JtYWwgbGV4aWNhbCBvbiB0aGF0IGZpZWxkIHRvCi0gICBhY2hpZXZl IHRoZSBkYXRlIG9yZGVyaW5nLiBGb3IgZXhhbXBsZSwgbGV0J3MgYXNzdW1lIHdlIGhhdmUgYSBV TklYCi0gICBjbGllbnQgYW5kIGEgVU5JWCBzZXJ2ZXIuIEluIHRoaXMgY2FzZSwgdGhlIHNlcnZl cidzIGxpc3RpbmcgaGFzIHRoZQotICAgZGF0ZSBpbiBjb2x1bW5zIDIyLTQwLCBhbmQgdGh1cyBj b3VsZCBiZSBzb3J0ZWQgYnkgdGhlIFVOSVggc29ydAotICAgcHJvZ3JhbSB1c2luZyAic29ydCAr MC4yMiAtMC40MCIgb3IgaW4gcmV2ZXJzZSBvcmRlciBieSAic29ydCArMC4yMgotICAgLTAuNDBy Ii4KLQotICAgU2luY2UgdGhlIFVOSVggY2xpZW50IGNhbiBwaXBlIHJlc3BvbnNlcyB0byBSRU1P VEUgY29tbWFuZHMgdGhyb3VnaAotICAgZmlsdGVycywgYW55IGRlc2lyZWQgc29ydGluZyBjYW4g YmUgYWNjb21wbGlzaGVkIHRoaXMgd2F5LCBmb3IgZXhhbXBsZToKLQotQy1LZXJtaXQ+IHJlbW90 ZSBkaXJlY3RvcnkgfCBzb3J0ICswLjIyIC0wLjQwCi0KLSAgIFlvdSBjYW4gYWxzbyBzb3J0IGJ5 IHNpemU6Ci0KLSAgQy1LZXJtaXQ+IHJlbW90ZSBkaXJlY3RvcnkgfCBzb3J0ICswLjExIC0wLjE5 Ci0KLSAgIFlvdSBjYW4gdXNlIHNvcnQgb3B0aW9ucyB0byBzZWxlY3QgcmV2ZXJzZSBvciBhc2Nl bmRpbmcgb3JkZXIuICJtYW4KLSAgIHNvcnQiIChpbiBVTklYKSBmb3IgbW9yZSBpbmZvcm1hdGlv bi4gQW5kIG9mIGNvdXJzZSwgeW91IGNhbiBwaXBlIHRoZXNlCi0gICBsaXN0aW5ncyB0aHJvdWdo IGFueSBvdGhlciBmaWx0ZXIgb2YgeW91ciBjaG9pY2UsIHN1Y2ggYXMgZ3JlcCB0byBza2lwCi0g ICB1bndhbnRlZCBsaW5lcy4KLQotICA1LjQuIFN5bnRheCBmb3IgUmVtb3RlIEZpbGVuYW1lcyB3 aXRoIEVtYmVkZGVkIFNwYWNlcwotCi0gICBDLUtlcm1pdCBhbmQgSzk1LCB3aGVuIGluIHNlcnZl ciBtb2RlLCBhc3N1bWUgdGhhdCBhbnkgc3BhY2VzIGluIHRoZQotICAgZmlsZSBzcGVjaWZpY2F0 aW9uIGluIGFuIGluY29taW5nIEdFVCBjb21tYW5kIGFyZSBmaWxlbmFtZSBzZXBhcmF0b3JzLgot ICAgVGh1cyBpZiB0aGUgY2xpZW50IGdpdmVzIGEgY29tbWFuZCBsaWtlOgotCi0gIGdldCB7b29m YS50eHQgb29mYS5iaW59Ci0KLSAgIG9yLCBlcXVpdmFsZW50bHk6Ci0KLSAgbWdldCBvb2ZhLnR4 dCBvb2ZhLmJpbgotCi0gICB0aGUgc2VydmVyIHRyaWVzIHRvIHNlbmQgdGhlIHR3byBmaWxlcywg b29mYS50eHQgYW5kIG9vZmEuYmluLiBCdXQgd2hhdAotICAgaWYgeW91IHdhbnQgdGhlIHNlcnZl ciB0byBzZW5kIHlvdSBhIGZpbGUgbmFtZWQsIHNheToKLQotICBEOlxIUCBPZmZpY2VKZXQgNTAw XEltYWdlc1xNeSBQcmV0dHkgUGljdHVyZSBEb3QgUENMCi0KLSAgIEhvdyBkb2VzIHRoZSBzZXJ2 ZXIga25vdyB0aGlzIGlzIHN1cHBvc2VkIHRvIGJlIG9uZSBmaWxlIGFuZCBub3Qgc2V2ZW4/Ci0g ICBJbiB0aGlzIGNhc2UsIHlvdSBuZWVkIHRvIHRoZSBzZW5kIGZpbGUgbmFtZSB0byB0aGUgc2Vy dmVyIGVuY2xvc2VkIGluCi0gICBlaXRoZXIgY3VybHkgYnJhY2VzOgotCi0gIHtEOlxIUCBPZmZp Y2VKZXQgNTAwXEltYWdlc1xNeSBQcmV0dHkgUGljdHVyZSBEb3QgUENMfQotCi0gICBvciBBU0NJ SSBkb3VibGVxdW90ZXM6Ci0KLSAgIkQ6XEhQIE9mZmljZUpldCA1MDBcSW1hZ2VzXE15IFByZXR0 eSBQaWN0dXJlIERvdCBQQ0wiCi0KLSAgIFRoZSBtZXRob2QgZm9yIGRvaW5nIHRoaXMgZGVwZW5k cyBvbiB5b3VyIGNsaWVudC4gSWYgeW91ciBjbGllbnQgaXMKLSAgIEMtS2VybWl0IDcuMCwgYW55 IHJlY2VudCB2ZXJzaW9uIG9mIEtlcm1pdCA5NSwgb3IgTVMtRE9TIEtlcm1pdCAzLjE2LAotICAg dGhlbiB5b3UgaGF2ZSB0byBlbmNsb3NlIHRoZSBuYW1lIGluIGJyYWNlcyBqdXN0IHNvIHRoZSBj bGllbnQgY2FuCi0gICBwYXJzZSBpdCwgc28gdG8gc2VuZCBicmFjZXMgb3IgZG91YmxlcXVvdGVz IHRvIHRoZSBzZXJ2ZXIsIHlvdSBtdXN0IHB1dAotICAgdGhlbSBpbnNpZGUgdGhlIGZpcnN0LCBv dXRzaWRlIHBhaXIgb2YgYnJhY2VzLiBBbmQgeW91IGFsc28gbmVlZCB0bwotICAgZG91YmxlIHRo ZSBiYWNrc2xhc2hlcyB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyBpbnRlcnByZXRlZDoKLQot ICBnZXQge3tEOlxcSFAgT2ZmaWNlSmV0IDUwMFxcSW1hZ2VzXFxNeSBQcmV0dHkgUGljdHVyZSBE b3QgUENMfX0KLSAgZ2V0IHsiRDpcXEhQIE9mZmljZUpldCA1MDBcXEltYWdlc1xcTXkgUHJldHR5 IFBpY3R1cmUgRG90IFBDTCJ9Ci0KLSAgIFRvIGdldCBhcm91bmQgdGhlIHJlcXVpcmVtZW50IHRv IGRvdWJsZSBiYWNrc2xhc2hlcyBpbiBsaXRlcmFsCi0gICBmaWxlbmFtZXMsIG9mIGNvdXJzZSB5 b3UgY2FuIGFsc28gdXNlOgotCi0gIHNldCBjb21tYW5kIHF1b3Rpbmcgb2ZmCi0gIGdldCB7e0Q6 XEhQIE9mZmljZUpldCA1MDBcSW1hZ2VzXE15IFByZXR0eSBQaWN0dXJlIERvdCBQQ0x9fQotICBn ZXQgeyJEOlxIUCBPZmZpY2VKZXQgNTAwXEltYWdlc1xNeSBQcmV0dHkgUGljdHVyZSBEb3QgUENM In0KLSAgc2V0IGNvbW1hbmQgcXVvdGluZyBvbgotCi0gICBJZiB5b3UgYXJlIGdpdmluZyBhICJr ZXJtaXQiIGNvbW1hbmQgdG8gdGhlIFVOSVggc2hlbGwsIHlvdSBoYXZlIHRvCi0gICBvYnNlcnZl IHRoZSBzaGVsbCdzIHF1b3RpbmcgcnVsZXMsIHNvbWV0aGluZyBsaWtlIHRoaXM6Ci0KLSAga2Vy bWl0IC1pZyAie0Q6XEhQIE9mZmljZUpldCA1MDBcSW1hZ2VzXE15IFByZXR0eSBQaWN0dXJlIERv dCBQQ0x9IgotCi0gICBIZXJlLCB0aGUgcXVvdGVzIGdvIG9uIHRoZSBvdXRzaWRlIHNvIFVOSVgg d2lsbCBwYXNzIHRoZSBlbnRpcmUKLSAgIGZpbGVuYW1lLCBzcGFjZXMsIGJyYWNlcywgYW5kIGFs bCwgYXMgYSBzaW5nbGUgYXJndW1lbnQgdG8gS2VybWl0LCBhbmQKLSAgIHRoZSBiYWNrc2xhc2hl cyBhcmUgbm90IGRvdWJsZWQgYmVjYXVzZSAoYSkgdGhlIFVOSVggc2hlbGwgaWdub3JlcyB0aGVt Ci0gICBzaW5jZSB0aGV5IGFyZSBpbiBhIHF1b3RlZCBzdHJpbmcsIGFuZCAoYikgS2VybWl0IGln bm9yZXMgdGhlbSBzaW5jZQotICAgdGhlIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyIGlzIG5v dCBhY3RpdmF0ZWQgaW4gdGhpcyBjYXNlLgotCi0gIDUuNS4gQXV0b21hdGljIE9yaWVudGF0aW9u IE1lc3NhZ2VzIHVwb24gRGlyZWN0b3J5IENoYW5nZQotCi0gICBDLUtlcm1pdCA3LjAsIHdoZW4g YWN0aW5nIGFzIGEgc2VydmVyLCBjYW4gc2VuZCBhbiBvcmllbnRhdGlvbiBtZXNzYWdlCi0gICB0 byB0aGUgY2xpZW50IHdoZW5ldmVyIHRoZSBzZXJ2ZXIgZGlyZWN0b3J5IGNoYW5nZXMuIEZvciBl eGFtcGxlLCB3aGVuCi0gICB0aGUgY2xpZW50IGdpdmVzIGEgUkVNT1RFIENEIGNvbW1hbmQsIHRo ZSBzZXJ2ZXIgc2VuZHMgdGhlIGNvbnRlbnRzIG9mCi0gICB0aGUgbmV3IGRpcmVjdG9yeSdzICJS ZWFkIE1lIiBmaWxlIHRvIHRoZSBjbGllbnQncyBzY3JlZW4uIFRoZQotICAgZm9sbG93aW5nIGNv bW1hbmRzIGdvdmVybiB0aGlzIGZlYXR1cmU6Ci0KLSAgIFNFVCBTRVJWRVIgQ0QtTUVTU0FHRSBG SUxFIG5hbWUKLSAgICAgICAgICBHaXZlbiB0byB0aGUgc2VydnIsIGFsbG93cyB0aGUgbWVzc2Fn ZS1maWxlIG5hbWUgdG8gYmUgc3BlY2lmaWVkCi0gICAgICAgICAgYXQgcnVudGltZS4gQSBsaXN0 IG9mIG5hbWVzIHRvIGxvb2sgZm9yIGNhbiBiZSBnaXZlbiBpbiB0aGUKLSAgICAgICAgICBmb2xs b3dpbmcgZm9ybWF0OgotCi0gIHt7bmFtZTF9e25hbWUyfXtuYW1lM317Li4ufX0KLQotICAgICAg ICAgIGUuZy4gU0VUIFNFUlZFUiBDRC1NRVNTQUdFIEZJTEUKLSAgICAgICAgICB7ey4vLnJlYWRt ZX17UkVBRE1FLlRYVH17UkVBRC5NRX19Ci0KLSAgIFJFTU9URSBTRVQgU0VSVkVSIENELU1FU1NB R0UgeyBPTiwgT0ZGIH0KLSAgICAgICAgICBHaXZlbiB0byB0aGUgY2xpZW50LCBsZXRzIHRoZSBj bGllbnQgY29udHJvbCB3aGV0aGVyIHRoZSBzZXJ2ZXIKLSAgICAgICAgICBzZW5kcyBhdXRvbWF0 aWMgQ0QgbWVzc2FnZXMuCi0KLSAgIFNIT1cgU0VSVkVSCi0gICAgICAgICAgR2l2ZW4gdG8gc2Vy dmVyLCBpbmNsdWRlcyBDRC1NZXNzYWdlIHN0YXR1cy4KLQotICAgVGhlIGRlZmF1bHQgQ0QgbWVz c2FnZSBmaWxlIG5hbWUgaXMgc3lzdGVtIGRlcGVuZGVudC4gU0hPVyBDRCBvciBTSE9XCi0gICBT RVJWRVIgZGlzcGxheXMgdGhlIGxpc3QuIEFsc28gc2VlIFs1NDFdU2VjdGlvbiA0LjUuMi4KLQot ICA1LjYuIE5ldyBTZXJ2ZXIgQ29udHJvbHMKLQotICAgRElTQUJMRSBFTkFCTEUKLSAgICAgICAg ICBBbGxvd3MgdGhlIHNlcnZlciB0byBjb25maWd1cmVkIHN1Y2ggdGhhdCBESVNBQkxFZCBmZWF0 dXJlcyBjYW4KLSAgICAgICAgICBub3QgYmUgcmUtZW5hYmxlZCBieSBhbnkgbWVhbnMgLS0gZS5n LiBpZiB0aGUgY2xpZW50IGlzIHNvbWVob3cKLSAgICAgICAgICBhYmxlIHRvIGdldCB0aGUgc2Vy dmVyIGludG8gY29tbWFuZCBtb2RlLiBPbmNlIERJU0FCTEVkLCBFTkFCTEUKLSAgICAgICAgICBj YW4gbm90IGJlIHJlLUVOQUJMRWQuCi0KLSAgIFNFVCBTRVJWRVIgSURMRS1USU1FT1VUIHNlY29u ZHMKLSAgICAgICAgICBUaGlzIHdhcyBhdmFpbGFibGUgcHJldmlvdXNseSBpbiBLZXJtaXQgOTUg b25seS4gTm93IGl0IGNhbiBiZQotICAgICAgICAgIHVzZWQgaW4gQy1LZXJtaXQgYWxzbyB0byBz cGVjaWZ5IGEgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB0aGUKLSAgICAgICAgICBzZXJ2ZXIg aXMgYWxsb3dlZCB0byBiZSBpZGxlIGJlZm9yZSBleGl0aW5nIHNlcnZlciBtb2RlLiAwCi0gICAg ICAgICAgc2Vjb25kcyBtZWFucyBubyBpZGxlIHRpbWVvdXQuIEluIEMtS2VybWl0IChidXQgbm90 IEstOTUpLCBTRVQKLSAgICAgICAgICBTRVJWRVIgVElNRU9VVCBhbmQgU0VUIFNFUlZFUiBJRExF LVRJTUVPVVQgYXJlIG11dHVhbGx5Ci0gICAgICAgICAgZXhjbHVzaXZlIC0tIHlvdSBjYW4gaGF2 ZSBvbmUgb3IgdGhlIG90aGVyIChvciBuZWl0aGVyKSwgYnV0IG5vdAotICAgICAgICAgIGJvdGgu IChTZXJ2ZXIgdGltZW91dHMgYXJlIGZvciB0aGUgYmVuZWZpdCBvZiBwcmltaXRpdmUgS2VybWl0 Ci0gICAgICAgICAgY2xpZW50cyB0aGF0IGFyZSBub3QgY2FwYWJsZSBvZiB0aW1pbmcgb3V0IG9u IHRoZWlyIG93bjsgdG8gb3VyCi0gICAgICAgICAga25vd2xlZGdlLCBubyBzdWNoIGNsaWVudHMg YXJlIHN0aWxsIGluIGNpcmN1bGF0aW9uLikKLQotICAgU0VUIFNFUlZFUiBLRUVQQUxJVkUgeyBP TiwgT0ZGIH0KLSAgICAgICAgICAoU2VlIG5leHQgc2VjdGlvbikuCi0KLSAgNS43LiBUaW1lb3V0 cyBkdXJpbmcgUkVNT1RFIEhPU1QgQ29tbWFuZCBFeGVjdXRpb24KLQotICAgUHJpb3IgdG8gQy1L ZXJtaXQgNy4wLCB0aGUgQy1LZXJtaXQgc2VydmVyIHdvdWxkIGJsb2NrIHdhaXRpbmcgZm9yCi0g ICBvdXRwdXQgZnJvbSBhIHN5c3RlbSBjb21tYW5kIGludm9rZWQgdmlhIFJFTU9URSBIT1NUIGZy b20gdGhlIGNsaWVudC4KLSAgIElmIHRoZSBzeXN0ZW0gY29tbWFuZCB0b29rIGEgbG9uZyB0aW1l IHRvIGV4ZWN1dGUsIHRoZSBjbGllbnQgd291bGQKLSAgIHRpbWUgb3V0IGFuZCBzZW5kIE5BSyBw YWNrZXRzLiBJZiB0aGUgY29tbWFuZCB0b29rIHRvbyBsb25nLCB0aGUgY2xpZW50Ci0gICB3b3Vs ZCByZWFjaCBpdHMgcmV0cnkgbGltaXQgYW5kIGdpdmUgdXAuIEV2ZW4gaWYgaXQgZGlkbid0LCB0 aGUgTkFLcwotICAgd291bGQgY2F1c2UgdW5uZWNlc3NhcnkgcmV0cmFuc21pc3Npb25zLgotCi0g ICBJbiB2ZXJzaW9uIDcuMCwgdGhlIEMtS2VybWl0IHNlcnZlciAoVk1TIGFuZCBzZWxlY3QoKS1j YXBhYmxlIFVOSVgKLSAgIHZlcnNpb25zIG9ubHkpLCBzZW5kcyAia2VlcGFsaXZlIHBhY2tldHMi IChlbXB0eSBkYXRhIHBhY2tldHMpIG9uY2UgcGVyCi0gICBzZWNvbmQgd2hpbGUgd2FpdGluZyBm b3IgdGhlIHN5c3RlbSBjb21tYW5kIHRvIGNvbXBsZXRlLiBUaGlzIHByb2NlZHVyZQotICAgc2hv dWxkIGJlIGVudGlyZWx5IHRyYW5zcGFyZW50IHRvIHRoZSBLZXJtaXQgY2xpZW50LCBhbmQgc2hv dWxkIHByZXZlbnQKLSAgIHRoZSB1bndhbnRlZCB0aW1lb3V0cyBhbmQgTkFLcy4gV2hlbiBDLUtl cm1pdCA3LjAgaXRzZWxmIChvciBLOTUKLSAgIDEuMS4xOSkgaXMgdGhlIGNsaWVudCwgaXQgcHJp bnRzIGRvdHMgdG8gc2hvdyB0aGUga2VlcGFsaXZlIHBhY2tldHMuCi0KLSAgIFRoZSBrZWVwYWxp dmUgZmVhdHVyZSBjYW4gYmUgdHVybmVkIG9mZiBhbmQgb24gd2l0aDoKLQotICBTRVQgU0VSVkVS IEtFRVBBTElWRSB7IE9OLCBPRkYgfQotCi0gICBOb3JtYWxseSBpdCBzaG91bGQgYmUgb24uIFR1 cm4gaXQgb2ZmIGl0IGlmIGNhdXNlcyB0cm91YmxlIHdpdGggdGhlCi0gICBjbGllbnQsIG9yIGlm IGl0IHNlZW1zIHRvIHNsb3cgZG93biB0aGUgc2VydmVyIChhcyBpdCBtaWdodCBvbiBzb21lCi0g ICBwbGF0Zm9ybXMgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzKS4KLQotICA2LiBJTlRFUk5B VElPTkFMIENIQVJBQ1RFUiBTRVRTCi0KLSAgIFN1cHBvcnQgZm9yIHNldmVyYWwgbmV3IHNpbmds ZS1ieXRlIGNoYXJhY3RlciBzZXRzIHdhcyBhZGRlZCBpbgotICAgQy1LZXJtaXQgNy4wLiBVbmlj b2RlIC8gSVNPIDEwNjQ2IGlzIG5vdCB5ZXQgc3VwcG9ydGVkLCBidXQgaXMgYSBoaWdoCi0gICBw cmlvcml0eSBmb3IgZm9ydGhjb21pbmcgcmVsZWFzZXMuCi0KLSAgNi4wLiBJU08gODg1OS0xNSBM YXRpbiBBbHBoYWJldCA5Ci0KLSAgIFRvIGFjY29tbW9kYXRlIHRoZSBFdXJvIGN1cnJlbmN5IHN5 bWJvbCwgYW5kIHRvIGNvcnJlY3Qgc2V2ZXJhbCBvdGhlcgotICAgbG9uZ3N0YW5kaW5nIHByb2Js ZW1zIHdpdGggSVNPIExhdGluIEFscGhhYmV0IDEsIElTTyA4ODU5LTE1IExhdGluCi0gICBBbHBo YWJldCA5IHdhcyBpc3N1ZWQgaW4gTWF5IDE5OTguIEl0IGlzIHN1cHBvcnRlZCBieSBDLUtlcm1p dCA3LjAgYXMgYQotICAgdHJhbnNmZXIgY2hhcmFjdGVyIHNldCwgYSBmaWxlIGNoYXJhY3RlciBz ZXQsIGFuZCBhIHRlcm1pbmFsIGNoYXJhY3RlcgotICAgc2V0LiBUcmFuc2xhdGlvbnMgdGhhdCBw cmVzZXJ2ZSB0aGUgbmV3IGNoYXJhY3RlcnMgYXJlIGF2YWlsYWJsZQotICAgYmV0d2VlbiBMYXRp bi05IGFuZCBzZXZlcmFsIG90aGVyIHNldHMgaW5jbHVkaW5nOgotCi0gIFBDIENvZGUgUGFnZSA4 NTggICAgICAgICAoV2VzdGVybiBFdXJvcGVhbiBsYW5ndWFnZXMsIHNpbWlsYXIgdG8gQ1A4NTAp Ci0gIFdpbmRvd3MgQ29kZSBQYWdlIDEyNTIgICAoV2VzdGVybiBFdXJvcGVhbiBsYW5ndWFnZXMs IHNpbWlsYXIgdG8gTGF0aW4tMSkKLSAgV2luZG93cyBDb2RlIFBhZ2UgMTI1MCAgIChFYXN0ZXJu IEV1cm9wZWFuIGxhbmd1YWdlcywgc2ltaWxhciB0byBMYXRpbi0yKQotCi0gICBUaGUgTGF0aW4t OSB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0IGFsc28gYWxsb3dzIGZvciB0aGUgT0UgZGlncmFwaAot ICAgY2hhcmFjdGVyLCB1c2VkIHByaW1hcmlseSBpbiBGcmVuY2gsIHRvIGJlIHByZXNlcnZlZCBp biB0cmFuc2ZlcnMKLSAgIGludm9sdmluZyB0aGUgREVDIE1DUyBvciBOZVhUIGNoYXJhY3RlciBz ZXRzLgotCi0gICBUaGUgRXVybyBjaGFyYWN0ZXIgaXMgYWxzbyBwcmVzZW50IGluIHRoZSBVbml2 ZXJzYWwgQ2hhcmFjdGVyIFNldCwKLSAgIGRlc2NyaWJlZCBpbiBbNTQyXVNlY3Rpb24gNi42Lgot Ci0gIDYuMS4gVGhlIEhQLVJvbWFuOCBDaGFyYWN0ZXIgU2V0Ci0KLSAgIFRoZSBIUC1Sb21hbjgg Y2hhcmFjdGVyIHNldCBpcyBzdXBwb3J0ZWQgaW4gQy1LZXJtaXQgNi4wIGFuZCBsYXRlciBidXQK LSAgIHdhcyBvbWl0dGVkIGZyb20gVGFibGUgVklJLTQgaW4gdGhlIDJuZCBFZGl0aW9uIG9mIFVz aW5nIEMtS2VybWl0IGR1ZQotICAgdG8gbGFjayBvZiBzcGFjZS4gSXQgaXMgbGlzdGVkIGluIFs1 NDNdQXBwZW5kaXggSUlJLgotCi0gIDYuMi4gR3JlZWsgQ2hhcmFjdGVyIFNldHMKLQotICAgR3Jl ZWsgY2hhcmFjdGVyIHNldHMgd2VyZSBhZGRlZCBpbiA2LjE6Ci0KLSAgU0VUIEZJTEUgQ0hBUkFD VEVSLVNFVCB7IENQODY5LCBFTE9UOTI3LCBHUkVFSy1JU08gfQotICBTRVQgVFJBTlNGRVIgQ0hB UkFDVEVSLVNFVCB7IEdSRUVLLUlTTyB9Ci0KLSAgIEdSRUVLLUlTTyBpcyBJU08gODg1OS03LCB3 aGljaCB0aGUgc2FtZSBhcyBFTE9UIDkyOC4KLQotICAgVGhlIG5ldyBHcmVlayBjaGFyYWN0ZXIg c2V0cyBhcmUgbGlzdGVkIGluIFs1NDRdQXBwZW5kaXggSUlJLgotCi0gIDYuMy4gQWRkaXRpb25h bCBMYXRpbi0yIENoYXJhY3RlciBTZXRzCi0KLSAgIFRoZSBmb2xsb3dpbmcgaGF2ZSBiZWVuIGFk ZGVkIGFzIEZJTEUgYW5kIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVRzOgotCi0gICBNQVpPVklBLVBD Ci0gICAgICAgICAgQSBQQyBjb2RlIHBhZ2UgdXNlZCBpbiBQb2xhbmQsIGVxdWl2YWxlbnQgdG8g Q1A0MzcsIGJ1dCB3aXRoIDE4Ci0gICAgICAgICAgc3Vic3RpdHV0aW9ucyBuZWVkZWQgZm9yIFBv bGlzaC4KLQotICAgQ1AxMjUwCi0gICAgICAgICAgVGhlIFdpbmRvd3MgTGF0aW4gMiBDb2RlIFBh Z2UuIEVxdWl2YWxlbnQgdG8gSVNPIDg4NTktMiwgYnV0Ci0gICAgICAgICAgd2l0aCBkaWZmZXJl bnQgZW5jb2RpbmcuCi0KLSAgNi40LiBBZGRpdGlvbmFsIEN5cmlsbGljIENoYXJhY3RlciBTZXRz Ci0KLSAgIFRoZSBmb2xsb3dpbmcgaGF2ZSBiZWVuIGFkZGVkIGFzIEZJTEUgYW5kIFRFUk1JTkFM IENIQVJBQ1RFUi1TRVRzOgotCi0gICBCVUxHQVJJQS1QQwotICAgICAgICAgIFRoaXMgaXMgdGhl IEN5cmlsbGljIFBDIGNvZGUgcGFnZSB1c2VkIGluIEJ1bGdhcmlhLCB3aGVyZSBpdCBpcwotICAg ICAgICAgIGNhbGxlZCBDb2RlIFBhZ2UgODU2LiBJdCBpcyBhdHRyaWJ1dGVkIHRvIGEgY29tcGFu eSBjYWxsZWQKLSAgICAgICAgICBEQVRFQywgSW5jLCBidXQgQ1A4NTYgaXMgbm90IGEgcHJvcGVy IGRlc2lnbmF0aW9uLCBzaW5jZSBpdAotICAgICAgICAgIHJlZmVycyB0byBhIEhlYnJldyBDb2Rl IFBhZ2UgKHNlZSB0aGUgSUJNIFJlZ2lzdHJ5KS4KLQotICAgQ1A4NTUKLSAgICAgICAgICBUaGlz IFBDIENvZGUgUGFnZSBjb250YWlucyBhbGwgdGhlIEN5cmlsbGljIGxldHRlcnMgdGhhdCBhcmUK LSAgICAgICAgICBhbHNvIGluIElTTyA4ODU5LTUsIGFuZCBpcyB0aGVyZWZvcmUgdXNlZnVsIGZv ciBub24tUnVzc2lhbgotICAgICAgICAgIEN5cmlsbGljIHRleHQgKFVrcmFpbmlhbiwgQmVsYXJ1 c2lhbiwgZXRjKSwgdW5saWtlIENQODY2LCB3aGljaAotICAgICAgICAgIGhhcyBhIHNtYWxsZXIg cmVwZXJ0b2lyZSBvZiBDeXJpbGxpYyBsZXR0ZXJzLgotCi0gICBDUDEyNTEKLSAgICAgICAgICBU aGUgV2luZG93cyBDeXJpbGxpYyBDb2RlIFBhZ2UuIEVxdWl2YWxlbnQgdG8gQ1A4NTUsIGJ1dCB3 aXRoCi0gICAgICAgICAgZGlmZmVyZW50IGVuY29kaW5nLgotCi0gICBLT0k4UgotICAgICAgICAg IEFuIGV4dGVuc2lvbiB0byAiT2xkIEtPSS04IiB0aGF0IGFkZHMgdXBwZXIgYW5kIGxvd2VyIGNh c2UKLSAgICAgICAgICBDeXJpbGxpYyBsZXR0ZXIgSW8gKGxvb2tzIGxpa2UgUm9tYW4gRSB3aXRo IGRpYWVyZXNpcykgcGx1cyBhCi0gICAgICAgICAgc2VsZWN0aW9uIG9mIGJveC1kcmF3aW5nIGNo YXJhY3RlcnMgdG8gY29sdW1ucyA4IHRocm91Z2ggMTEsCi0gICAgICAgICAgd2hpY2ggYXJlIHZh Y2FudCBpbiBvcmlnaW5hbCBPbGQgS09JLTguIEtPSTgtUiBpcyB1c2VkIGZvciB0aGUKLSAgICAg ICAgICBSdXNzaWFuIGxhbmd1YWdlLiBJdCBpcyBzcGVjaWZpZWQgaW4gWzU0NV1SRkMgMTQ4OS4K LQotICAgS09JOFUKLSAgICAgICAgICBBIHNpbWlsYXIgZXh0ZW5zaW9uIG9mIE9sZCBLT0ktOCwg YnV0IGZvciBVa3JhaW5pYW4uIEl0IGlzCi0gICAgICAgICAgc3BlY2lmaWVkIGluIFs1NDZdUkZD IDIzMTkuCi0KLSAgNi41LiBBdXRvbWF0aWMgQ2hhcmFjdGVyLVNldCBTd2l0Y2hpbmcKLQotICAg UHJpb3IgdG8gdmVyc2lvbiA3LjAsIEMtS2VybWl0J3MgZmlsZSBjaGFyYWN0ZXItc2V0IGFsd2F5 cyBoYWQgdG8gYmUKLSAgIHNldCBleHBsaWNpdGx5LiBJbiA3LjAgYW5kIGxhdGVyLCBpdCBpcyBz ZXQgYXV0b21hdGljYWxseSB3aGVuOgotCi0gICAgMS4gVGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQg KGFzIGl0IGlzIHVubGVzcyB5b3UgZGlzYWJsZSBpdCkuCi0gICAgMi4gQW4gaW5jb21pbmcgdGV4 dC1tb2RlIHRyYW5zZmVyIGluY2x1ZGVzIGEgdHJhbnNmZXItY2hhcmFjdGVyLXNldAotICAgICAg IGFubm91bmNlciBhbmQgeW91IGhhdmUgbm90IHByZXZpb3VzbHkgZ2l2ZW4gYSBTRVQgRklMRQot ICAgICAgIENIQVJBQ1RFUi1TRVQgY29tbWFuZC4gSW4gdGhpcyBjYXNlLCBDLUtlcm1pdCBzd2l0 Y2hlcyB0byBhbgotICAgICAgIGFwcHJvcHJpYXRlIGZpbGUgY2hhcmFjdGVyIHNldC4gRm9yIGV4 YW1wbGUsIG9uIGFuIEhQLVVYCi0gICAgICAgd29ya3N0YXRpb24sIGFuIGluY29taW5nIExhdGlu LTEgZmlsZSBhdXRvbWF0aWNhbGx5IHNlbGVjdHMKLSAgICAgICBIUC1Sb21hbjggZm9yIHRoZSBs b2NhbCBjb3B5IG9mIHRoZSBmaWxlOyBpbiBEYXRhIEdlbmVyYWwgQU9TL1ZTLAotICAgICAgIGl0 IHdvdWxkIHNlbGVjdCBERyBJbnRlcm5hdGlvbmFsLgotICAgIDMuIFlvdSBnaXZlIGEgU0VUIFRS QU5TRkVSIENIQVJBQ1RFUi1TRVQgY29tbWFuZCB3aXRob3V0IGhhdmluZwotICAgICAgIHByZXZp b3VzbHkgc3BlY2lmaWVkIGEgRklMRSBDSEFSQUNURVItU0VULiBBbiBhcHByb3ByaWF0ZSBmaWxl Ci0gICAgICAgY2hhcmFjdGVyLXNldCBpcyBjaG9zZW4gYXV0b21hdGljYWxseS4KLQotICAgSW4g YWRkaXRpb24sIHdoZW4geW91IGdpdmUgYSBTRVQgRklMRSBDSEFSQUNURVItU0VUIGNvbW1hbmQs IHRoZQotICAgYXBwcm9wcmlhdGUgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBpcyBhdXRvbWF0aWNh bGx5IGNob3NlbiwgdG8gYmUgdXNlZAotICAgd2hlbiB5b3UgYXJlIHNlbmRpbmcgZmlsZXMgKGJ1 dCB0aGlzIGRvZXMgbm90IG92ZXJyaWRlIHRoZSBvbmUKLSAgIGFubm91bmNlZCBieSB0aGUgc2Vu ZGVyIHdoZW4geW91IGFyZSByZWNlaXZpbmcgZmlsZXMpLgotCi0gICBZb3UgbWlnaHQgbm90IGFn cmVlIGFib3V0IHdoYXQgaXMgImFwcHJvcHJpYXRlIiwgc28gb2YgY291cnNlIHlvdSBjYW4KLSAg IGRpc2FibGUgb3IgY2hhbmdlIGFsbCBvZiB0aGUgYWJvdmUgYWN0aW9ucy4KLQotICAgWW91IGNh biBkaXNhYmxlIChvciByZS1lbmFibGUpIHRoZSBuZXcgYXV0b21hdGljIGNoYXJhY3Rlci1zZXQK LSAgIHN3aXRjaGluZyBmZWF0dXJlIGluIGVhY2ggZGlyZWN0aW9uIHNlcGFyYXRlbHk6Ci0KLSAg IFNFVCBSRUNFSVZFIENIQVJBQ1RFUi1TRVQtU0VMRUNUSU9OIHsgQVVUT01BVElDLCBNQU5VQUwg fQotICAgICAgICAgIEFVVE9NQVRJQyBpcyB0aGUgZGVmYXVsdCwgY2F1c2luZyB0aGUgYmVoYXZp b3IgZGVzY3JpYmVkIGFib3ZlCi0gICAgICAgICAgd2hlbiBhbiBpbmNvbWluZyBmaWxlIGFycml2 ZXMuIENob29zZSBNQU5VQUwgdG8gZGVmZWF0IHRoaXMKLSAgICAgICAgICBiZWhhdmlvciBhbmQg Zm9yY2UgeW91ciBjdXJyZW50IEZJTEUgQ0hBUkFDVEVSLVNFVCBzZXR0aW5nIHRvIGJlCi0gICAg ICAgICAgdXNlZCwgbm8gbWF0dGVyIHdoYXQgaXQgaXMuIE5vdGUgdGhhdCBTRVQgUkVDRUlWRSBD SEFSQUNURVItU0VUCi0gICAgICAgICAgTUFOVUFMIGRvZXMgbm90IGRpc2FibGUgcmVjb2duaXRp b24gb2YgdGhlIGluY29taW5nIHRyYW5zZmVyCi0gICAgICAgICAgY2hhcmFjdGVyLXNldCBhbm5v dW5jZXIsIGFuZCB0cmFuc2xhdGlvbiBmcm9tIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgICAgICAg Y2hhcmFjdGVyLXNldCB0byB5b3VyIGN1cnJlbnQgZmlsZSBjaGFyYWN0ZXItc2V0LiBUbyBkaXNh YmxlCi0gICAgICAgICAgdGhhdCwgdXNlIFNFVCBBVFRSSUJVVEUgQ0hBUkFDVEVSLVNFVCBPRkYu Ci0KLSAgIFNFVCBTRU5EIENIQVJBQ1RFUi1TRVQtU0VMRUNUSU9OIHsgQVVUT01BVElDLCBNQU5V QUwgfQotICAgICAgICAgIEFnYWluIEFVVE9NQVRJQyBpcyB0aGUgZGVmYXVsdCwgY2F1c2luZyB0 aGUgYmVoYXZpb3IgZGVzY3JpYmVkCi0gICAgICAgICAgYWJvdmUgd2hlbiB5b3UgZ2l2ZSBhIFNF VCB7IEZJTEUsIFRSQU5TRkVSIH0gQ0hBUkFDVEVSLVNFVAotICAgICAgICAgIGNvbW1hbmQuIFVz ZSBNQU5VQUwgdG8gYWxsb3cgeW91IHRvIHNwZWNpZnkgdGhlIHRyYW5zZmVyIGFuZAotICAgICAg ICAgIGZpbGUgY2hhcmFjdGVyLXNldHMgaW5kZXBlbmRlbnRseS4KLQotICAgU0hPVyBDSEFSQUNU RVItU0VUUwotICAgICAgICAgIFRlbGxzIHNldHRpbmdzIG9mIHsgU0VORCwgUkVDRUlWRSB9IENI QVJBQ1RFUi1TRVQtU0VMRUNUSU9OLgotCi0gICBOb3JtYWxseSwgaG93ZXZlciwgaXQgaXMgbW9y ZSBjb252ZW5pZW50IHRvIGxlYXZlIGF1dG9tYXRpYyBzd2l0Y2hpbmcKLSAgIGFjdGl2ZSwgYW5k IGNoYW5nZSBhbnkgYXNzb2NpYXRpb25zIHRoYXQgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgeW91 cgotICAgYXBwbGljYXRpb24sIGFyZWEsIG9yIGNvdW50cnkuIFRoZSBjb21tYW5kcyBhcmU6Ci0K LSAgIFNIT1cgQVNTT0NJQVRJT05TCi0gICAgICAgICAgVGhpcyBjb21tYW5kIGxpc3RzIGFsbCB0 aGUgYXNzb2NpYXRpb25zIGluIGVhY2ggZGlyZWN0aW9uOiBmb3IKLSAgICAgICAgICBlYWNoIHBv c3NpYmxlIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQsIGl0IGxpc3RzIHRoZSBhc3NvY2lhdGVkCi0g ICAgICAgICAgZmlsZSBjaGFyYWN0ZXItc2V0LCBhbmQgdmljZSB2ZXJzYS4gVGhlc2UgYXJlIHR3 byBzZXBhcmF0ZSBhbmQKLSAgICAgICAgICBpbmRlcGVuZGVudCBsaXN0cy4KLQotICAgQVNTT0NJ QVRFIFRSQU5TRkVSLUNIQVJBQ1RFUi1TRVQgbmFtZTEgWyBuYW1lMiBdCi0gICAgICAgICAgQ2hh bmdlcyB0aGUgYXNzb2NpYXRpb24gZm9yIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IG5hbWUx IHRvCi0gICAgICAgICAgYmUgdGhlIGZpbGUgY2hhcmFjdGVyLXNldCBuYW1lMi4gSWYgbmFtZTIg aXMgb21pdHRlZCwgYXV0b21hdGljCi0gICAgICAgICAgc3dpdGNoaW5nIGlzIGRpc2FibGVkIGZv ciB0aGlzIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgb25seS4KLQotICAgQVNTT0NJQVRFIEZJTEUt Q0hBUkFDVEVSLVNFVCBuYW1lMSBbIG5hbWUyIF0KLSAgICAgICAgICBDaGFuZ2VzIHRoZSBhc3Nv Y2lhdGlvbiBmb3IgdGhlIGZpbGUgY2hhcmFjdGVyLXNldCBuYW1lMSB0byBiZQotICAgICAgICAg IHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IG5hbWUyLiBJZiBuYW1lMiBpcyBvbWl0dGVkLCBh dXRvbWF0aWMKLSAgICAgICAgICBzd2l0Y2hpbmcgaXMgZGlzYWJsZWQgZm9yIHRoaXMgZmlsZSBj aGFyYWN0ZXItc2V0IG9ubHkuCi0KLSAgNi42LiBVTklDT0RFCi0KLSAgIEMtS2VybWl0IDcuMCBh ZGRzIHN1cHBvcnQgZm9yIFVuaWNvZGUsIHRoZSBVbml2ZXJzYWwgQ2hhcmFjdGVyIFNldCwKLSAg IGZvcjoKLQotICAgICAqIEZpbGUgVHJhbnNmZXIgKFNFTkQsIFJFQ0VJVkUsIEdFVCwgZXRjKQot ICAgICAqIFRlcm1pbmFsIGNvbm5lY3Rpb24gKENPTk5FQ1QpCi0gICAgICogVW5ndWFyZGVkIGZp bGUgY2FwdHVyZSAoTE9HIFNFU1NJT04pCi0gICAgICogVW5ndWFyZGVkIGZpbGUgdHJhbnNtaXNz aW9uIChUUkFOU01JVCkKLSAgICAgKiBMb2NhbCBmaWxlIGNoYXJhY3Rlci1zZXQgY29udmVyc2lv biAoVFJBTlNMQVRFKQotCi0gICBDLUtlcm1pdCBpcyBub3QsIGhvd2V2ZXIsIGEgIlVuaWNvZGUg YXBwbGljYXRpb24iIGluIHRoZSBzZW5zZSB0aGF0IGl0cwotICAgY29tbWFuZHMsIG1lc3NhZ2Vz LCBvciB1c2VyIGludGVyZmFjZSBhcmUgVW5pY29kZS4gUmF0aGVyLCBpdCBpcwotICAgIlVuaWNv ZGUgYXdhcmUiIGluIGl0cyBhYmlsaXR5IHRvIGhhbmRsZSBhbmQgY29udmVydCBVbmljb2RlIHRl eHQgaW4KLSAgIHRoZSBjb3Vyc2Ugb2YgZmlsZSB0cmFuc2ZlciBhbmQgdGVybWluYWwgY29ubmVj dGlvbiwgYW5kIHlvdSBjYW4gYWxzbwotICAgdXNlIEtlcm1pdCB0byBjb252ZXJ0IGxvY2FsIGZp bGVzIGJldHdlZW4gVW5pY29kZSBhbmQgb3RoZXIgY2hhcmFjdGVyCi0gICBzZXRzLiBUTEEnczoK LQotICBCTVAgLSBCYXNlIE11bHRpbGluZ3VhbCBQbGFuZQotICBCT00gLSBCeXRlIE9yZGVyIE1h cmsKLSAgQ0pLIC0gQ2hpbmVzZSwgSmFwYW5lc2UsIGFuZCBLb3JlYW4KLSAgSVNPIC0gSW50ZXJu YXRpb25hbCBTdGFuZGFyZHMgT3JnYW5pemF0aW9uCi0gIFRMQSAtIFRocmVlLUxldHRlciBBY3Jv bnltCi0gIFVDUyAtIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0Ci0gIFVURiAtIFVDUyBUcmFuc2Zv cm1hdGlvbiBGb3JtYXQKLQotICAgVW5pY29kZSBhbmQgSVNPIDEwNjQ2IGFyZSB0aGUgY29vcmRp bmF0ZWQgYW5kIGNvbXBhdGlibGUgY29ycG9yYXRlIGFuZAotICAgaW50ZXJuYXRpb25hbCBzdGFu ZGFyZHMgZm9yIHRoZSBVbml2ZXJzYWwgQ2hhcmFjdGVyIFNldCAoVUNTKS4gVW5saWtlCi0gICBz aW5nbGUtYnl0ZSBhbmQgZXZlbiBtb3N0IG11bHRpYnl0ZSBjaGFyYWN0ZXIgc2V0cywgdGhlIFVD UyBjYW4KLSAgIHJlcHJlc2VudCBhbGwgY2hhcmFjdGVycyBpbiBldmVyeSBleGlzdGluZyB3cml0 aW5nIHN5c3RlbS4gQSBmbGF0Ci0gICBwbGFpbi10ZXh0IGZpbGUgZW5jb2RlZCBpbiBzb21lIGZv cm0gb2YgVUNTIGNhbiBjb250YWluIGFueSBtaXh0dXJlIG9mCi0gICBFbmdsaXNoLCBTcGFuaXNo LCBJdGFsaWFuLCBHZXJtYW4sIEhlYnJldywgQXJhYmljLCBHcmVlaywgUnVzc2lhbiwKLSAgIEFy bWVuaWFuLCBHZW9yZ2lhbiwgSmFwYW5lc2UsIENoaW5lc2UsIEtvcmVhbiwgVmlldG5hbWVzZSwg VGliZXRhbiwKLSAgIEhpbmRpLCBCZW5nYWxpLCBUYW1pbCwgVGhhaSwgRXRoaW9waWMsIGFuZCBz byBvbiwgcGx1cyBzY2llbnRpZmljIGFuZAotICAgbWF0aGVtYXRpY2FsIG5vdGF0aW9uLCBhcyB3 ZWxsIGFzIHRleHRzIGluIFJ1bmVzLCBPZ2hhbSwgR2xhZ29saXRpYywKLSAgIGFuZCBvdGhlciBo aXN0b3JpYyBzY3JpcHRzLgotCi0gICBUaGUgVUNTIGFscmVhZHkgY292ZXJzIHRoZXNlIHNjcmlw dHMgYW5kIG1hbnkgbW9yZSwgYnV0IGl0J3MgYW4KLSAgIGV2b2x2aW5nIHN0YW5kYXJkIHdpdGgg ZWZmb3J0cyB1bmRlcndheSB0byBhY2NvbW1vZGF0ZSBldmVuIG1vcmUKLSAgIGxhbmd1YWdlcyBh bmQgd3JpdGluZyBzeXN0ZW1zLiBTdXBwb3J0IGlzIGdyb3dpbmcgZm9yIG5hdGl2ZSBVQ1MgdXNl IG9uCi0gICBtYW55IHBsYXRmb3JtcyBhbmQgaW4gbWFueSBhcHBsaWNhdGlvbnMuIFRoZSBnb2Fs IG9mIHRoZSBmcmFtZXJzIG9mIHRoZQotICAgVUNTIGlzIGZvciBpdCB0byByZXBsYWNlIEFTQ0lJ LCB0aGUgSVNPIExhdGluIEFscGhhYmV0cywgSVNDSUksIFZJU0NJSSwKLSAgIHRoZSBDaGluZXNl LCBKYXBhbmVzZSwgYW5kIEtvcmVhbiAoQ0pLKSBtdWx0aWJ5dGUgc2V0cywgZXRjLCBhcyB3ZWxs IGFzCi0gICB0aGUgbWFueSBwcml2YXRlIGNoYXJhY3RlciBzZXRzIGluIHVzZSB0b2RheSwgaW4g b3RoZXIgd29yZHMgdG8gYmVjb21lCi0gICAqdGhlKiBVbml2ZXJzYWwgQ2hhcmFjdGVyIFNldC4K LQotICAgVW50aWwgdGhhdCB0aW1lLCBob3dldmVyLCBjb252ZXJzaW9ucyBiZXR3ZWVuIGV4aXN0 aW5nIHNldHMgYW5kIHRoZSBVQ1MKLSAgIHdpbGwgYmUgbmVjZXNzYXJ5IHdoZW4gbW92aW5nIHRl eHQgYmV0d2VlbiBwbGF0Zm9ybXMgYW5kIGFwcGxpY2F0aW9ucy4KLSAgIE5vdyBLZXJtaXQgY2Fu IGhlbHAuCi0KLSAgICA2LjYuMS4gT3ZlcnZpZXcgb2YgVW5pY29kZQotCi0gICBGb3IgYSBtb3Jl IGNvbXBsZXRlIHBpY3R1cmUsIHBsZWFzZSB2aXNpdDoKLQotICBbNTQ3XWh0dHA6Ly93d3cudW5p Y29kZS5vcmcvCi0KLSAgIGFuZCBhY2Nlc3MgdGhlIHZhcmlvdXMgb25saW5lIGludHJvZHVjdGlv bnMsIEZBUXMsIHRlY2huaWNhbCByZXBvcnRzLAotICAgYW5kIG90aGVyIGluZm9ybWF0aW9uLiBG b3IgZ3JlYXRlciBkZXB0aCwgb3JkZXIgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mCi0gICB0aGUgcHVi bGlzaGVkIFVuaWNvZGUgU3RhbmRhcmQuIFRoZSBmb2xsb3dpbmcgb3ZlcnZpZXcgY29udGFpbnMg YSBncmVhdAotICAgbWFueSBvdmVyc2ltcGxpZmljYXRpb25zIGFuZCBwZXJoYXBzIGFuIG9waW5p b24gb3IgdHdvLgotCi0gICBBdCBwcmVzZW50LCB0aGUgVUNTIGlzIGEgMTYtYml0ICgyLWJ5dGUp IGNoYXJhY3RlciBzZXQsIGJ1dCB3aXRoCi0gICBwcm92aXNpb25zIHRvIGdyb3cgdG8gYSA0LWJ5 dGUgc2V0LiBVQ1MtMiByZWZlcnMgdG8gdGhlIHR3by1ieXRlIHNldCwKLSAgIGFsc28gY2FsbGVk IHRoZSBCYXNlIE11bHRpbGluZ3VhbCBQbGFuZSAoQk1QKSwgaW4gd2hpY2ggZWFjaCBjaGFyYWN0 ZXIKLSAgIGhhcyAxNiBiaXRzLCBhbmQgdGhlcmVmb3JlIHRoZXJlIGFyZSAyXjE2ID0gNjU1MzYg cG9zc2libGUgY2hhcmFjdGVycy4KLSAgIFRoZSBmaXJzdCAxMjggY2hhcmFjdGVycyBhcmUgdGhl IHNhbWUgYXMgVVMgQVNDSUkgKEMwIGNvbnRyb2wKLSAgIGNoYXJhY3RlcnMgYW5kIERFTCBpbmNs dWRlZCksIHRoZSBuZXh0IDMyIGFyZSB0aGUgQzEgY29udHJvbCBjaGFyYWN0ZXJzCi0gICBvZiBJ U08gNjQyOSwgYW5kIHRoZSBuZXh0IDk2IGFyZSB0aGUgUmlnaHQgSGFsZiBvZiBJU08gODg1OS0x IExhdGluCi0gICBBbHBoYWJldCAxLiBUaGUgcmVtYWluaW5nIHRlbnMgb2YgdGhvdXNhbmRzIG9m IGNoYXJhY3RlcnMgYXJlIGFycmFuZ2VkCi0gICBuZXdseSBmb3IgdGhlIFVDUywgdXN1YWxseSAo YnV0IG5vdCBhbHdheXMpIGluIHNlY3Rpb25zIGNvcnJlc3BvbmRpbmcKLSAgIHRvIGV4aXN0aW5n IHN0YW5kYXJkcywgc3VjaCBhcyBJU08gTGF0aW4vQ3lyaWxsaWMsIG9mdGVuIHBsdXMKLSAgIGFk ZGl0aW9uYWwgY2hhcmFjdGVycyBub3QgYXBwZWFyaW5nIGluIHRoZSBleGlzdGluZyBzdGFuZGFy ZHMgZHVlIHRvCi0gICBsYWNrIG9mIHNwYWNlIChvciBvdGhlciByZWFzb25zKS4KLQotICAgSVNP IDEwNjQ2IGFsbG93cyBmb3IgYWRkaXRpb25hbCBwbGFuZXMsIGUuZy4gZm9yIEVneXB0aWFuIGhp ZXJvZ2x5cGhpY3MKLSAgIG9yIGFuY2llbnQgKG9yIG90aGVyIGVzb3RlcmljKSBDSksgY2hhcmFj dGVycywgYnV0IHRoZXNlIHBsYW5lcyBhcmUgbm90Ci0gICB5ZXQgZGVmaW5lZCBhbmQgc28gd2Ug d2lsbCBzYXkgbm90aGluZyBtb3JlIGFib3V0IHRoZW0gaGVyZSwgZXhjZXB0Ci0gICB0aGF0IHRo ZWlyIHVzZSB3aWxsIHJlcXVpcmUgdGhlIDQtYnl0ZSBmb3JtIG9mIFVDUywgY2FsbGVkIFVDUy00 LCBpbgotICAgc29tZSBmb3JtIChtb3JlIGFib3V0ICJmb3JtcyIgaW4gWzU0OF1TZWN0aW9uIDYu Ni4yKS4KLQotICAgVW5pY29kZSBhbmQgSVNPIDEwNjQ2IGFyZSBjb25zdGFudGx5IHVuZGVyIHJl dmlzaW9uLCBtYWlubHkgdG8gYWRkIG5ldwotICAgY2hhcmFjdGVycy4gVGhlIFVuaWNvZGUgcmV2 aXNpb24gaXMgZGVub3RlZCBieSBhIHZlcnNpb24gbnVtYmVyLCBzdWNoCi0gICBhcyAxLjAsIDEu MSwgMi4wLCAzLjAuIFRoZSBJU08gMTA2NDYgc3RhbmRhcmQgcmV2aXNpb24gaXMgaWRlbnRpZmll ZCBieQotICAgRWRpdGlvbiAoc3VjaCBhcyBJU08gMTA2NDYtMSAxOTkzKSwgcGx1cyByZWZlcmVu Y2UgdG8gYW55IGFtZW5kbWVudHMuCi0gICBUaGUgZmlyc3QgdmVyc2lvbnMgb2YgdGhlc2Ugc3Rh bmRhcmRzIGluY2x1ZGVkIGVuY29kaW5ncyBmb3IgS29yZWFuCi0gICBIYW5ndWwgc3lsbGFibGVz IChKYW1vcyk7IHRoZXNlIGVuY29kaW5ncyB3ZXJlIGNoYW5nZWQgaW4gdmVyc2lvbiAxLjEKLSAg IG9mIFVuaWNvZGUgYW5kIGJ5IEFtZW5kbWVudCA1IHRvIElTTyAxMDY0Ni0xLiBUaGUgVW5pY29k ZSBUZWNobmljYWwKLSAgIENvbW1pdHRlZSBhbmQgdGhlIElTTyBhY2tub3dsZWRnZSB0aGF0IHRo aXMgd2FzIGEgYmFkIHRoaW5nIHRvIGRvLCBhbmQKLSAgIHByb21pc2UgbmV2ZXIgY2hhbmdlIGVu Y29kaW5ncyBvciBjaGFyYWN0ZXIgbmFtZXMgYWdhaW4sIHNpbmNlIHRoaXMKLSAgIHBvc2VzIHNl cmlvdXMgcHJvYmxlbXMgZm9yIGNvbmZvcm1hbmNlIGFuZCBkYXRhIGludGVyY2hhbmdlLgotCi0g ICBBIFVDUy0yIHZhbHVlIGlzIGN1c3RvbWFyaWx5IHdyaXR0ZW4gbGlrZSB0aGlzOgotCi0gIFUr eHh4eAotCi0gICB3aGVyZSAieHh4eCIgcmVwcmVzZW50cyBmb3VyIGhleGFkZWNpbWFsIGRpZ2l0 cywgMC05IGFuZCBBLUYuIEZvcgotICAgZXhhbXBsZSwgVSswMDQxIGlzICJBIiwgVSswMEMxIGlz IEEtYWN1dGUsIFUrMDQyRiBpcyB1cHBlcmNhc2UgQ3lyaWxsaWMKLSAgICJZYSIsIFUrRkI0RiBp cyBIZWJyZXcgTGlnYXR1cmUgQWxlZiBMYW1lZCwgYW5kIFUrRkZGRCBpcyB0aGUgc3BlY2lhbAot ICAgY2hhcmFjdGVyIHRoYXQgbWVhbnMgIm5vdCBhIGNoYXJhY3RlciIuCi0KLSAgIE1vc3QgY2hh cmFjdGVycyBmcm9tIHdpZGVseS11c2VkIGFscGhhYmV0aWMgd3JpdGluZyBzeXN0ZW1zIHN1Y2gg YXMgdGhlCi0gICBXZXN0IEV1cm9wZWFuIG9uZXMsIEN5cmlsbGljLCBHcmVlaywgSGVicmV3LCBW aWV0bmFtZXNlLCBldGMsIGFyZQotICAgYXZhaWxhYmxlIGluICJwcmVjb21wb3NlZCIgZm9ybTsg Zm9yIGV4YW1wbGUgVXBwZXJjYXNlIExhdGluIExldHRlciBBCi0gICB3aXRoIEFjdXRlIEFjY2Vu dCBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIgKGFzIGl0IGlzIGluIExhdGluLTEpLiBIb3dldmVyLAot ICAgdGhlIFVDUyBhbHNvIHBlcm1pdHMgY29tcG9zaXRpb24gb2YgYSBiYXNlIGNoYXJhY3RlciB3 aXRoIG9uZSBvciBtb3JlCi0gICBub25zcGFjaW5nIGRpYWNyaXRpY3MuIFRoaXMgbWVhbnMgdGhl IHNhbWUgY2hhcmFjdGVyIGNhbiBiZSByZXByZXNlbnRlZAotICAgaW4gbW9yZSB0aGFuIG9uZSB3 YXksIHdoaWNoIGNhbiBwcmVzZW50IHByb2JsZW1zIGluIG1hbnkgYXBwbGljYXRpb24KLSAgIGFy ZWFzLCBpbmNsdWRpbmcgdHJhbnNmZXIgYW5kIGNoYXJhY3Rlci1zZXQgY29udmVyc2lvbiBvZiB0 ZXh0LgotCi0gICBDb252ZXJzaW9uIGZyb20gQVNDSUkgb3IgTGF0aW4tMSB0byBVQ1MtMiB0ZXh0 IGlzICJ0cml2aWFsIjogc2ltcGx5Ci0gICBpbnNlcnQgYSBOVUwgKDApIGJ5dGUgYmVmb3JlIGVh Y2ggQVNDSUkgb3IgTGF0aW4tMSBieXRlLiBDb252ZXJ0aW5nIGluCi0gICB0aGUgcmV2ZXJzZSBk aXJlY3Rpb24gKHByb3ZpZGVkIHRoZSBVQ1MtMiBmaWxlIGNvbnRhaW5zIG9ubHkgVSswMDAwIHRv Ci0gICBVKzAwRkYpIGlzIGVxdWFsbHkgc2ltcGxlIChpZiB3ZSBpZ25vcmUgdGhlIGlzc3VlIG9m IGNvbXBvc2l0aW9uKToKLSAgIHJlbW92ZSBldmVyeSBzZWNvbmQgKE5VTCkgYnl0ZS4gQ29udmVy c2lvbiBvZiBvdGhlciBjaGFyYWN0ZXIgc2V0cyB0bwotICAgYW5kIGZyb20gVUNTLCBob3dldmVy LCByZXF1aXJlcyB0YWJsZXMgb3IgYWxnb3JpdGhtcyBzcGVjaWZpYyB0byBlYWNoCi0gICBzZXQu IE5ldmVydGhlbGVzcywgdGhlIHJlbGF0aXZlbHkgdHJhbnNwYXJlbnQgdXB3YXJkcyBjb21wYXRp YmlsaXR5Ci0gICBmcm9tIEFTQ0lJIGFuZCBMYXRpbi0xLCBpbiB3aGljaCBhIHZlcnkgbGFyZ2Ug c2hhcmUgb2YgdGhlIHdvcmxkJ3MKLSAgIHRleHR1YWwgZGF0YSBpcyBlbmNvZGVkLCBnaXZlcyB0 aGUgVUNTIGFuIGVudHJlZSBvbnRvIGV4aXN0aW5nCi0gICBwbGF0Zm9ybXMuCi0KLSAgIEJ1dCB0 aGUgMi1ieXRlIGZvcm1hdCBhbmQgdGhlIHByZXBvbmRlcmFuY2Ugb2YgTlVMIGFuZCBvdGhlciBj b250cm9sCi0gICBieXRlcyBpbiBVQ1MtMiB0ZXh0IHBvc2UgcHJvYmxlbXMgZm9yIGN1cnJlbnQg YXBwbGljYXRpb25zIGFuZAotICAgdHJhbnNtaXNzaW9uIG1ldGhvZHMuIEFuZCB0byBtYWtlIG1h dHRlcnMgd29yc2UsIGRpZmZlcmVudCBoYXJkd2FyZQotICAgcGxhdGZvcm1zIHN0b3JlIFVDUy0y IGNoYXJhY3RlcnMgaW4gZGlmZmVyZW50IGJ5dGUgb3JkZXIuIFRodXMgYSBVQ1MtMgotICAgZmls ZSB0cmFuc2ZlcnJlZCBieSBGVFAgKG9yIGFjY2Vzc2VkIHZpYSBORlMsIGV0YykgYmV0d2VlbiB0 d28KLSAgIGNvbXB1dGVycyB3aXRoIGRpZmZlcmVudCBhcmNoaXRlY3R1cmUgbWlnaHQgaGF2ZSBp dHMgYnl0ZXMgaW4gdGhlIHdyb25nCi0gICBvcmRlciAob3Igd29yc2U7IHNlZSBbNTQ5XVNlY3Rp b24gNi42LjUuMSApLgotCi0gICAgNi42LjIuIFVDUyBCeXRlIE9yZGVyCi0KLSAgIENvbnNpZGVy IHRoZSBudW1iZXIgMS4gSW4gYW4gOC1iaXQgYnl0ZSwgdGhpcyB3b3VsZCBiZSByZXByZXNlbnRl ZCBieQotICAgdGhlIGZvbGxvd2luZyBzZXJpZXMgb2YgMC0gYW5kIDEtYml0czoKLQotICArLS0t LS0tLS0tLS0tLS0tLS0rCi0gIHwgMCAwIDAgMCAwIDAgMCAxIHwKLSAgKy0tLS0tLS0tLS0tLS0t LS0tKwotCi0gICBUaGVyZWZvcmUgaW4gYSAxNi1iaXQgIndvcmQiIHRoZSByZXByZXNlbnRhdGlv biBtaWdodCBiZToKLQotICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi0g IHwgMCAwIDAgMCAwIDAgMCAwIHwgMCAwIDAgMCAwIDAgMCAxIHwKLSAgKy0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tKwotCi0gICBOb3cgY29uc2lkZXIgdGhlIG51bWJlciAyNTYs IHdoaWNoIGlzIDIgdG8gdGhlIDh0aCBwb3dlci4gVGhlIGJpbmFyeQotICAgcmVwcmVzZW50YXRp b24gaXMgMTAwMDAwMDAwICgxIGZvbGxvd2VkIGJ5IDggemVyb3MpLiAyNTYgd291bGQgZ28gaW50 bwotICAgYSAxNi1iaXQgd29yZCBsaWtlIHRoaXM6Ci0KLSAgKy0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tKwotICB8IDAgMCAwIDAgMCAwIDAgMSB8IDAgMCAwIDAgMCAwIDAgMCB8 Ci0gICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgV2hlbiBhIGNv bXB1dGVyIHdvcmtzIHRoaXMgd2F5LCBpdCBpcyBzYWlkIHRvIGJlIEJpZyBFbmRpYW4sIG1lYW5p bmcgaXQKLSAgIHB1dHMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgKGJpZ2dlc3QpIGJ5dGUgZmlyc3Qg KG9uIHRoZSAibGVmdCIpIGluIGEKLSAgIDE2LWJpdCB3b3JkLCBhbmQgdGhlIGxlYXN0IHNpZ25p ZmljYW50IGJ5dGUgc2Vjb25kIChvbiB0aGUgcmlnaHQpLgotCi0gICBIb3dldmVyLCBzb21lIG90 aGVyIGNvbXB1dGVycyBoYXZlIHRoZSBvcHBvc2l0ZSBhcnJhbmdlbWVudCwgY2FsbGVkCi0gICBM aXR0bGUgRW5kaWFuLCBpbiB3aGljaCAxIGlzOgotCi0gICstLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLSsKLSAgfCAwIDAgMCAwIDAgMCAwIDEgfCAwIDAgMCAwIDAgMCAwIDAgfAot ICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi0KLSAgIGFuZCAyNTYgaXM6 Ci0KLSAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwotICB8IDAgMCAwIDAg MCAwIDAgMCB8IDAgMCAwIDAgMCAwIDAgMSB8Ci0gICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLSsKLQotICAgQ29tcHV0ZXJzIHN1Y2ggYXMgU3BhcmMsIE1JUFMsIFBBLVJJU0Ms IGFuZCBQb3dlclBDIGFyZSBCaWcgRW5kaWFuLAotICAgd2hlcmVhcyB0aGUgUEMgYW5kIHRoZSBB bHBoYSBhcmUgTGl0dGxlIEVuZGlhbi4gRW5kaWFubmVzcyBoYXMgbmV2ZXIKLSAgIGJlZW4gYW4g aXNzdWUgd2l0aCA3LSBvciA4LWJpdCBjaGFyYWN0ZXJzLCBidXQgaXQgaXMgd2l0aCBVQ1MKLSAg IGNoYXJhY3RlcnMuIEl0IGNhbiBiZSBhIHRyaWNreSBidXNpbmVzcyB0byBzaGFyZSBvciB0cmFu c2ZlciBhIFVDUy0yCi0gICBmaWxlIGJldHdlZW4gdHdvIGRpZmZlcmVudCBraW5kcyBvZiBjb21w dXRlcnMuCi0KLSAgIFRvIGFsbGV2aWF0ZSAoYnV0IG5vdCBlbnRpcmVseSBzb2x2ZSkgdGhlIHBy b2JsZW0sIFVDUy0yIGZpbGVzIGFyZQotICAgc3VwcG9zZWQgdG8gYmVnaW4gd2l0aCB0aGUgVW5p Y29kZSBjaGFyYWN0ZXIgVStGRUZGLCBaZXJvLVdpZHRoCi0gICBOby1CcmVhayBTcGFjZSAoWldO QlMpLiBUaGlzIGlzIGEga2luZCBvZiAibm8tb3AiIChub3RlOiBhbnkgc3VjaAotICAgYXNzZXJ0 aW9uIG11c3Qgbm9ybWFsbHkgYmUgcXVhbGlmaWVkIHdpdGggbWFueSAiYnV0IGlmcyIgYW5kICJl eGNlcHRzIgotICAgd2hpY2ggYXJlIG9taXR0ZWQgaGVyZSBpbiB0aGUgaW50ZXJlc3Qgb2YgYnJl dml0eSkuIElmIHRoZSBieXRlcyBhcmUKLSAgIHJldmVyc2VkIHRoZSBaV05CUyBiZWNvbWVzIFUr RkZGRSwgd2hpY2ggaXMgbm90IChhbmQgbmV2ZXIgd2lsbCBiZSkgYQotICAgZGVmaW5lZCBVQ1Mg Y2hhcmFjdGVyLiBVK0ZFRkYgYXQgdGhlIGJlZ2lubmluZyBvZiBhIFVDUyBmaWxlIGlzCi0gICB0 aGVyZWZvcmUgY2FsbGVkIGEgQnl0ZSBPcmRlciBNYXJrLCBvciBCT00uCi0KLSAgIEFueSBhcHBs aWNhdGlvbiB0aGF0IGNyZWF0ZXMgYSBVQ1MtMiAob3IgVVRGLTE2LCBvciBVQ1MtNCkgZmlsZSBz aG91bGQKLSAgIGluY2x1ZGUgYSBCT00sIGFuZCBhbnkgYXBwbGljYXRpb24gdGhhdCByZWFkcyBv bmUgc2hvdWxkIHRlc3QgZm9yIGEKLSAgIEJPTSwgYW5kIGlmIG9uZSBpcyBmb3VuZCwgaW5mZXIg dGhlIGJ5dGUgb3JkZXIgZnJvbSBpdC4gVGhpcyBpcyBhCi0gICBjb252ZW50aW9uLCBob3dldmVy IC0tIG5vdCBhIHN0YW5kYXJkIG9yIGEgcmVxdWlyZW1lbnQgLS0gYW5kCi0gICBhcHBsaWNhdGlv bnMgdmFyeSBpbiB0aGVpciBhYmlsaXR5IHRvIGhhbmRsZSBCT01zIGFuZCAiYmFja3dhcmRzIiBV Q1MtMgotICAgZmlsZXMuCi0KLSAgIE5vdGUgdGhhdCBhIEJPTSBpcyB1c2VmdWwgb25seSBhdCB0 aGUgYmVnaW5uaW5nIG9mIGEgZmlsZS4gSWYgeW91Ci0gICBhcHBlbmQgb25lIFVDUy0yIGZpbGUg dG8gYW5vdGhlciwgYW5kIGJvdGggaGF2ZSBCT01zLCB0aGUgaW50ZXJuYWwgQk9NCi0gICBpcyBu byBsb25nZXIgYSBCT00uIEFuZCBpZiB0aGUgYnl0ZSBvcmRlcnMgb2YgdGhlIHR3byBmaWxlcyBk aWZmZXIsCi0gICB0aGVuIGVpdGhlciB0aGUgZmlyc3QgcGFydCBvciB0aGUgc2Vjb25kIHdpbGwg YmUgYmFja3dhcmRzLiAoVmFyaW91cwotICAgb3RoZXIgdW5kZXNpcmFibGUgZWZmZWN0cyBtaWdo dCBhbHNvIG9jY3VyLCBub3QgZGlzY3Vzc2VkIGhlcmUuKQotCi0gICAgNi42LjIuIFVDUyBUcmFu c2Zvcm1hdGlvbiBGb3JtYXRzCi0KLSAgIFVDUyB0ZXh0dWFsIGRhdGEgY2FuIGJlIG1vZGlmaWVk IGluIHZhcmlvdXMgd2F5cyBmb3IgdHJhbnNtaXNzaW9uIG9yCi0gICBzdG9yYWdlLiBBbnkgb2Zm aWNpYWxseSBzYW5jdGlvbmVkIG1ldGhvZCBvZiBkb2luZyB0aGlzIGlzIGNhbGxlZCBhIFVDUwot ICAgVHJhbnNmb3JtYXRpb24gRm9ybWF0LCBvciBVVEYuIE9uZSBzdWNoIG1ldGhvZCwgY2FsbGVk IFVURi0xNiwgaXMKLSAgIGVzc2VudGlhbGx5IGlkZW50aWNhbCB3aXRoIFVDUy0yIGV4Y2VwdCB0 aGF0IGl0IGRlc2lnbmF0ZXMgY2VydGFpbiBjb2RlCi0gICB2YWx1ZXMgYXMgImVzY2FwZSBzZXF1 ZW5jZXMiIChjYWxsZWQgc3Vycm9nYXRlIHBhaXJzKSB0byBhY2Nlc3MKLSAgIGNoYXJhY3RlcnMg aW4gb3RoZXIgcGxhbmVzIHdpdGhvdXQgaGF2aW5nIHRvIHVzZSBmdWxsIFVDUy00LiBXZSB3b24n dAotICAgZGlzY3VzcyBVVEYtMTYgZnVydGhlciBoZXJlLCBzaW5jZSBhdCB0aGUgbW9tZW50IHRo ZXJlIGFyZSBubyBvdGhlcgotICAgcGxhbmVzLiBTZXZlcmFsIG90aGVyIFVURidzIChzdWNoIGFz IFVURi0xLCBVVEYtMiwgYW5kIFVURi03KSBoYXZlCi0gICBmYWxsZW4gaW50byBkaXN1c2UgYW5k IGFyZSBub3QgZGlzY3Vzc2VkIGhlcmUuIFRoZSBtb3N0IGltcG9ydGFudAotICAgdHJhbnNmb3Jt YXRpb24gZm9ybWF0IHRvZGF5IGlzIFVURi04LgotCi0gICBVVEYtOCwgc28gY2FsbGVkIGJlY2F1 c2UgaXQgInNlcmlhbGl6ZXMiIFVDUy0yIGRhdGEgaW50byBhIHN0cmVhbSBvZgotICAgOC1iaXQg Ynl0ZXMsIGlzIGRlc2lnbmVkIHRvIGFsbG93IHRoZSBVQ1MgdG8gd29yayB3aXRoIHByZXNlbnQt ZGF5Ci0gICBjb21tdW5pY2F0aW9ucyBnZWFyLCBjb21wdXRlcnMsIGFuZCBzb2Z0d2FyZS4gVGhl IG1vc3QgaW1wb3J0YW50Ci0gICBwcm9wZXJ0aWVzIG9mIFVURi04IGFyZSB0aGF0IGJ5dGUgb3Jk ZXIgaXMgY29uc3RhbnQgKG5vIGJ5dGUgc3dhcHBpbmcpCi0gICBhbmQgYWxsICg3LWJpdCkgQVND SUkgY2hhcmFjdGVycyByZXByZXNlbnQgdGhlbXNlbHZlcy4gVGhlcmVmb3JlCi0gICBjb252ZXJz aW9uIGJldHdlZW4gQVNDSUkgYW5kIFVURi04IGlzIG5vIGNvbnZlcnNpb24gYXQgYWxsLCBhbmQK LSAgIGFwcGxpY2F0aW9ucyBvciBwbGF0Zm9ybXMgKHN1Y2ggYXMgUGxhbiA5IGZyb20gQmVsbCBM YWJzKSB0aGF0IHVzZQotICAgVVRGLTggImZvciBldmVyeXRoaW5nIiBjYW4gc3RpbGwgcnVuIHRy YWRpdGlvbmFsIEFTQ0lJLW9ubHkKLSAgIGFwcGxpY2F0aW9ucyBhbmQgYmUgYWNjZXNzZWQgZnJv bSB0aGVtLiBJbiBwYXJ0aWN1bGFyLCB1bmxpa2UgVUNTLTIsCi0gICBBU0NJSSBjaGFyYWN0ZXJz IGFyZSBub3QgcGFkZGVkIHdpdGggTlVMIGJ5dGVzLiBCdXQgYWxzbyB1bmxpa2UgVUNTLTIsCi0g ICB0aGVyZSBpcyBubyB0cmFuc3BhcmVuY3kgZm9yIExhdGluLTEgb3IgYW55IG90aGVyIG5vbi1B U0NJSSBjaGFyYWN0ZXIKLSAgIHNldC4gRXZlcnkgbm9uLUFTQ0lJIFVDUy0yIGNoYXJhY3RlciBp cyByZXByZXNlbnRlZCBieSBhIHNlcXVlbmNlIG9mIDIKLSAgIG9yIDMgVVRGLTggYnl0ZXMuIFRo dXMgVVRGLTggaXMgbW9yZSBjb21wYWN0IHRoYW4gVUNTLTIgZm9yIHRleHQKLSAgIGNvbnRhaW5p bmcgYSBwcmVwb25kZXJhbmNlIG9mIEFCQydzIChvciBvdGhlciBBU0NJSSBjaGFyYWN0ZXJzKSwg YWJvdXQKLSAgIHRoZSBzYW1lIGFzIFVDUy0yIGZvciBvdGhlciBhbHBoYWJldGljIHNjcmlwdHMg KEN5cmlsbGljLCBSb21hbiwgR3JlZWssCi0gICBldGMpLCBhbmQgbGFyZ2VyIHRoYW4gVUNTLTIg Zm9yIENoaW5lc2UsIEphcGFuZXNlLCBhbmQgS29yZWFuLgotCi0gICBUaGUgVVRGLTggdW5jb2Rp bmcgb2YgdGhlIFVDUyBoYXMgYmVlbiBhZG9wdGVkIGJ5IHRoZSBJbnRlcm5ldCBhcyB0aGUKLSAg IHByZWZlcnJlZCBjaGFyYWN0ZXIgc2V0IGZvciBuZXcgYXBwbGljYXRpb25zLCBhbmQgaXMgZ3Jh ZHVhbGx5IGJlaW5nCi0gICByZXRyb2ZpdHRlZCBpbnRvIHRyYWRpdGlvbmFsIGFwcGxpY2F0aW9u cyBsaWtlIEZUUCAoWzU1MF1SRkMgMjY0MCkuCi0KLSAgICA2LjYuMy4gQ29uZm9ybWFuY2UgTGV2 ZWxzCi0KLSAgIEFsdGhvdWdoIHRoZSBVbmljb2RlIGFuZCBJU08gMTA2NDYgc3RhbmRhcmRzIGJv dGggZGVzY3JpYmUgdGhlIHNhbWUKLSAgIGNoYXJhY3RlciBzZXQsIHRoZXNlIHN0YW5kYXJkcyBk aWZmZXIgaW4gbWFueSB3YXlzLCBpbmNsdWRpbmcgdGhlaXIKLSAgIHN0YXRlZCByZXF1aXJlbWVu dHMgZm9yIGNvbmZvcm1hbmNlIGFuZCB0aGVpciBjbGFzc2lmaWNhdGlvbiBvZgotICAgY29uZm9y bWFuY2UgbGV2ZWxzLgotCi0gICBLZXJtaXQgaGFzIGFsd2F5cyBhYmlkZWQgYnkgSVNPIGNoYXJh Y3Rlci1zZXQgc3RhbmRhcmRzLCBpbmNsdWRpbmcgSVNPCi0gICBjaGFyYWN0ZXItc2V0IGRlc2ln bmF0aW9uIGFuZCBpbnZvY2F0aW9uIG1ldGhvZHMuIEluIGFkYXB0aW5nIFVuaWNvZGUsCi0gICB0 aGVyZWZvcmUsIHdlIGhhZCB0byBjaG9vc2UgZnJvbSBhbW9uZyB0aGUgYXZhaWxhYmxlIElTTyBk ZXNpZ25hdGlvbnMKLSAgIHdoaWNoLCBpbiB0dXJuLCBjb3JyZXNwb25kIHdpdGggSVNPIDEwNjQ2 IGNvbmZvcm1hbmNlIGxldmVscy4gQXQKLSAgIHByZXNlbnQsIEtlcm1pdCBjbGFpbXMgdGhlIGxv d2VzdCBjb25mb3JtYW5jZSBsZXZlbCwgMSwgbWVhbmluZwotICAgKHJvdWdobHkpIHRoYXQgaXQg ZG9lcyBub3QgaGFuZGxlIGNvbWJpbmluZyBmb3JtcyBhbmQgaXQgZG9lcyBub3QKLSAgIGhhbmRs ZSBLb3JlYW4gSGFuZ3VsIEphbW9zIChqdXN0IGFzLCBhdCBwcmVzZW50LCBpdCBkb2VzIG5vdCBo YW5kbGUKLSAgIEtvcmVhbiBpbiBnZW5lcmFsKS4gTm90ZSB0aGF0IElTTyAxMDY0NiBDb25mb3Jt YW5jZSBMZXZlbHMgMSBhbmQgMgotICAgc2lkZXN0ZXAgdGhlIGlzc3VlIG9mIHRoZSBjb2RlIGNo YW5nZXMgZm9yIEtvcmVhbiBIYW5ndWwgYnkgYW5ub3VuY2luZwotICAgbm9uLXN1cHBvcnQgZm9y IEhhbmd1bCByZWdhcmRsZXNzIG9mIGVuY29kaW5nLgotCi0gICBJU08gMTA2NDYgQ29uZm9ybWFu Y2UgTGV2ZWwgMSBpcyBhcHByb3hpbWF0ZWx5IGVxdWl2YWxlbnQgdG8gVW5pY29kZQotICAgTm9y bWFsaXphdGlvbiBGb3JtIEMgKGRlc2NyaWJlZCBpbiBVbmljb2RlIFRlY2huaWNhbCBSZXBvcnQg MTUsCi0gICBpbmNvcnBvcmF0ZWQgaW50byBVbmljb2RlIDMuMCkuCi0KLSAgIEFzIG5vdGVkIGlu IFs1NTFdU2VjdGlvbiA2LjYuMiwgS2VybWl0IGRvZXMgbm90IGNsYWltIHRvIHN1cHBvcnQgVVRG LTE2Ci0gICBhdCB0aGUgcHJlc2VudCB0aW1lLCBoZW5jZSB0aGUgVUNTLTIgbm9tZW5jbGF0dXJl LiBLZXJtaXQgdHJlYXRzCi0gICBzdXJyb2dhdGVzIGp1c3QgYXMgaWYgdGhleSB3ZXJlIGFueSBv dGhlciBVQ1MtMiBjaGFyYWN0ZXJzLCByYXRoZXIgdGhhbgotICAgYXMgZXNjYXBlcyB0byBvdGhl ciBwbGFuZXMsIHdoaWNoIG1lYW5zIHRoYXQgKGV4Y2VwdCB3aGVuIGNvbnZlcnRpbmcKLSAgIGJl dHdlZW4gVUNTLTIgYW5kIFVURi04KSB0aGV5IGFyZSB0cmFuc2xhdGVkIHRvICJlcnJvciIgY2hh cmFjdGVycywKLSAgIHNpbmNlIChhKSBubyBvdGhlciBwbGFuZXMgYXJlIGRlZmluZWQgeWV0IChh bmQgaWYgdGhleSB3ZXJlLCBubyBvdGhlcgotICAgY2hhcmFjdGVyIHNldHMgc3VwcG9ydGVkIGJ5 IEtlcm1pdCB3b3VsZCBlbmNvZGUgdGhlaXIgY2hhcmFjdGVycyksIGFuZAotICAgKGIpIG5vIHZh bGlkIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgY29ycmVzcG9uZHMgdG8gYW55IG90aGVyIFVDUy0yCi0g ICBjaGFyYWN0ZXIuCi0KLSAgIEEgbWlub3IgeWV0IHNpZ25pZmljYW50IGFzcGVjdCBvZiBVbmlj b2RlIDMuMCBhbmQgc29tZSByZWNlbnQKLSAgIHBlcnR1cmJhdGlvbiBvZiBJU08gMTA2NDYtMSAo cHJvYmFibHkgQW1lbmRtZW50IDE4LCAiU3ltYm9scyBhbmQgT3RoZXIKLSAgIENoYXJhY3RlcnMi KSBpcyB0aGUgYWRkaXRpb24gb2YgdGhlIEV1cm8gU2lnbiBhdCBVKzIwQUMuIEFzIG5vdGVkIGlu Ci0gICBbNTUyXVNlY3Rpb24gNi4wLCBLZXJtaXQncyAiRXVybyBjb21wbGlhbmNlIiBpbmNsdWRl cyBjb252ZXJzaW9uCi0gICBiZXR3ZWVuIExhdGluIEFscGhhYmV0IDkgYW5kIHZhcmlvdXMgUEMg Y29kZSBwYWdlcy4gVGV4dCBjYW4gYWxzbyBiZQotICAgY29udmVydGVkIGJldHdlZW4gVUNTLTIg b3IgVVRGLTggYW5kIGFueSBvdGhlciBFdXJvLWNvbXBsaWFudCBjaGFyYWN0ZXIKLSAgIHNldCAo TGF0aW4tOSwgQ1A4NTgsIENQMTI1MCwgQ1AxMjUyKSB3aXRob3V0IGxvc3Mgb2YgdGhlIEV1cm8g U2lnbi4KLQotICAgIDYuNi40LiBSZWxhdGlvbnNoaXAgb2YgVW5pY29kZSB3aXRoIEtlcm1pdCdz IE90aGVyIENoYXJhY3RlciBTZXRzCi0KLSAgIEtlcm1pdCdzIGNoYXJhY3RlciBzZXRzIGFyZSBk aXZpZGVkIGludG8gdHdvIGdyb3Vwczogc2luZ2xlLWJ5dGUgc2V0cwotICAgKHN1Y2ggYXMgUm9t YW4sIEhlYnJldywgQ3lyaWxsaWMsIEdyZWVrKSBhbmQgbXVsdGlieXRlICh2YXJpb3VzCi0gICBK YXBhbmVzZSBzZXRzKS4gVGhlIHR3byBncm91cHMgYXJlIGRpc3RpbmN0IHNpbmNlIG9uZSBub3Jt YWxseSB3b3VsZAotICAgbm90IGV4cGVjdCB0byBjb252ZXJ0IEthbmppIGlkZW9ncmFtcyB0byBS b21hbiAob3Igb3RoZXIpIGxldHRlcnMsIG9yCi0gICB2aWNlIHZlcnNhLgotCi0gICBVbmljb2Rl IGNoYXJhY3Rlci1zZXQgY29udmVyc2lvbiB3b3JrcyB3aXRoIGJvdGggZ3JvdXBzLCBidXQgb2J2 aW91c2x5Ci0gICB0aGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIHJlcGVydG9pcmVzIG9mIHRoZSBz b3VyY2UgYW5kIGRlc3RpbmF0aW9uCi0gICBjaGFyYWN0ZXItc2V0cyBib3RoIGluY2x1ZGluZyB0 aGUgY2hhcmFjdGVycyBpbiB0aGUgZmlsZS4gRm9yIGV4YW1wbGUsCi0gICB5b3UgY2FuIHRyYW5z bGF0ZSBhIEh1bmdhcmlhbiB0ZXh0IGZpbGUgYmV0d2VlbiBMYXRpbi0yIGFuZCBVbmljb2RlLAot ICAgYnV0IG5vdCBiZXR3ZWVuIChzYXkpIFVuaWNvZGUgYW5kIExhdGluL0dyZWVrLiBCeSB0aGUg c2FtZSB0b2tlbiB5b3UKLSAgIGNhbiBjb252ZXJ0IEphcGFuZXNlIHRleHQgZnJvbSBTaGlmdC1K SVMgb3IgRVVDIG9yIEpJUy03IHRvIFVuaWNvZGUgYW5kCi0gICBiYWNrLCBidXQgeW91IGNhbid0 IGNvbnZlcnQgdGhlIHNhbWUgZmlsZSB0byAoc2F5KSBMYXRpbi0xIGlmIGl0Ci0gICBjb250YWlu cyBKYXBhbmVzZSBjaGFyYWN0ZXJzLgotCi0gICAgIEpJUy03IGlzIGVxdWl2YWxlbnQgdG8gREVD IEthbmppIGFuZCBJU08tMjAyMi1KUCBleGNlcHQgdGhhdCB0aGUKLSAgICAgbGF0dGVyIHR3byBk byBub3Qgc3VwcG9ydCBoYWxmd2lkdGggS2F0YWthbmEuIEtlcm1pdCB0cmVhdHMgYWxsCi0gICAg IHRocmVlIG9mIHRoZXNlIHNldHMgdGhlIHNhbWUgd2F5LCBpLmUuIGFzIEpJUy03LgotCi0gICBB cyBub3RlZCwgS2VybWl0IHByZXNlbnRseSBkb2VzIG5vdCBoYW5kbGUgY29tYmluaW5nIGRpYWNy aXRpY3MsIGFuZCBzbwotICAgd2lsbCBub3QgY29ycmVjdGx5IGNvbnZlcnQgVUNTIGZpbGVzIHRo YXQgdXNlIHRoZW0gaW50byBhIHNpbmdsZS1ieXRlCi0gICBjaGFyYWN0ZXIgc2V0LiBGb3IgZXhh bXBsZSwgaWYgYSBVQ1MgZmlsZSBjb250YWlucyBMYXRpbiBDYXBpdGFsIExldHRlcgotICAgQSAo VSswMDQxKSBmb2xsb3dlZCBieSBDb21iaW5pbmcgQWN1dGUgQWNjZW50IChVKzAzMDEpLCB0aGUg cmVzdWx0IHdpbGwKLSAgIGJlIGEgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZSwgQSBmb2xsb3dlZCBi eSBhbm90aGVyIGNoYXJhY3Rlci4gVGhpcyBpcwotICAgd2hhdCBpcyBtZWFudCBieSBDb25mb3Jt YW5jZSBMZXZlbCAxLiAoVGhlIHNpdHVhdGlvbiBncm93cyB3b3JzZSB3aXRoCi0gICBtdWx0aXBs ZSBkaWFjcml0aWNzLCBzaW5jZSB0aGV5IGNhbiBvY2N1ciBpbiBhbnkgb3JkZXIuKQotCi0gICBB IGhpZ2hlciBsZXZlbCBvZiBjb25mb3JtYW5jZSBpcyBwb3NzaWJsZSwgaW4gd2hpY2ggImNhbm9u aWNhbAotICAgZXF1aXZhbGVuY2VzIiBhcmUgaGFuZGxlZCB2aWEgYWxnb3JpdGhtcyBhbmQgZGF0 YWJhc2VzLCBhdCBzb21lCi0gICAocGVyaGFwcyBjb25zaWRlcmFibGUpIGNvc3QgaW4gcGVyZm9y bWFuY2UsIHNpbmNlIGEgZmFpciBhbW91bnQgb2YKLSAgIGFkZGl0aW9uYWwgY29kZSBtdXN0IGJl IGV4ZWN1dGVkIGZvciBldmVyeSBjaGFyYWN0ZXIgZHVyaW5nIGRhdGEKLSAgIHRyYW5zZmVyIChk YXRhYmFzZSBsb29rdXAsIHNvcnRpbmcgb2YgY29tYmluaW5nIHNlcXVlbmNlcyBpbnRvCi0gICBj YW5vbmljYWwgb3JkZXIsIGV0YykuIFRoaXMgY2FuIGJlIGFkZGVkIGluIGZ1dHVyZSByZWxlYXNl cyBpZiB0aGVyZSBpcwotICAgYSBuZWVkIChidXQgaW4gbWFueSBjYXNlcywgcHJlLSBhbmQgcG9z dHBvc3Rwcm9jZXNzaW5nIG1pZ2h0IGJlIGEKLSAgIGJldHRlciBvcHRpb24pLgotCi0gICBXaXRo aW4gdGhlc2UgY29uc3RyYWludHMsIEtlcm1pdCBjb252ZXJ0cyBiZXR3ZWVuIHRoZSBVQ1MgYW5k IGl0cyBvdGhlcgotICAgY2hhcmFjdGVyIHNldHMuIEZvciBleGFtcGxlLCBhIG1peHR1cmUgb2Yg UnVzc2lhbiBhbmQgRW5nbGlzaCAoYW5kL29yCi0gICBEdXRjaCwgb3IgTGF0aW4pIHRleHQgY2Fu IGJldCBjb252ZXJ0ZWQgYmV0d2VlbiB0aGUgVUNTIGFuZCBJU08KLSAgIExhdGluL0N5cmlsbGlj IG9yIEtPSS04LiBCdXQgc2luY2UgS2VybWl0IGRvZXMgbm90IHByZXNlbnRseSBzdXBwb3J0Ci0g ICBBcmFiaWMgY2hhcmFjdGVyLXNldCBjb252ZXJzaW9uLCB0aGUgbmV3IGF2YWlsYWJpbGl0eSBv ZiBVQ1MgY29udmVyc2lvbgotICAgZG9lcyBub3QgbWVhbiB0aGF0IEtlcm1pdCBjYW4gY29udmVy dCBmcm9tIEFyYWJpYyBVQ1MgdGV4dCB0byBzb21lCi0gICBvdGhlciBjaGFyYWN0ZXIgc2V0LCBi ZWNhdXNlIEtlcm1pdCBkb2VzIG5vdCBzdXBwb3J0IGFueSBvdGhlcgotICAgY2hhcmFjdGVyIHNl dCB0aGF0IGluY2x1ZGVzIEFyYWJpYy4gRGl0dG8gZm9yIFRoYWksIEFybWVuaWFuLCBHZW9yZ2lh biwKLSAgIFRpYmV0YW4sIENoaW5lc2UsIEtvcmVhbiwgZXRjLiBIb3dldmVyLCBLZXJtaXQgQ0FO IGNvbnZlcnQgQXJhYmljIChvcgotICAgYW55IG90aGVyIHNjcmlwdCkgYmV0d2VlbiBVQ1MtMiBh bmQgVVRGLTguCi0KLSAgIENvbnNpZGVyaW5nIEN5cmlsbGljIG1vcmUgY2FyZWZ1bGx5LCBub3Rl IHRoYXQgdGhlIFVDUyBhbHNvIGNvbnRhaW5zCi0gICBudW1lcm91cyBDeXJpbGxpYyBjaGFyYWN0 ZXJzIG5vdCBmb3VuZCBpbiBhbnkgb2YgdGhlIEN5cmlsbGljIHNldHMgKElTTwotICAgTGF0aW4v Q3lyaWxsaWMsIEtPSTgsIENQODY2LCBldGMpIHRoYXQgS2VybWl0IHN1cHBvcnRzOyBjaGFyYWN0 ZXJzCi0gICBuZWVkZWQgZm9yIEFia2hhc2lhbiwgWWFrdXQsIFRhdGFyLCBCYXNoa2lyLCBBbHRh aWMsIE9sZCBDaHVyY2gKLSAgIFNsYXZvbmljLCBldGM7IFVDUyB0ZXh0IGNvbnRhaW5pbmcgYW55 IG9mIHRoZXNlIGhpc3RvcmljIG9yICJleHRlbmRlZCIKLSAgIEN5cmlsbGljIGNoYXJhY3RlcnMg Y2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gYW55IG9mIEtlcm1pdCdzIGN1cnJlbnQKLSAgIHNpbmds ZS1ieXRlIEN5cmlsbGljIHNldHMgd2l0aG91dCBsb3NzLiBUaGUgc2l0dWF0aW9uIGlzIHNpbWls YXIgZm9yCi0gICBHcmVlaywgSGVicmV3LCBldGMsIGFuZCBldmVuIHdvcnNlIGZvciBKYXBhbmVz ZSBzaW5jZSBVbmljb2RlIGNvbnRhaW5zCi0gICB0aG91c2FuZHMgb2YgS2FuamlzIHRoYXQgYXJl IGxhY2tpbmcgZnJvbSB0aGUgSmFwYW5lc2UgY2hhcmFjdGVyIHNldHMKLSAgIGJhc2VkIG9uIEpJ UyBYIDAyMDgsIHN1Y2ggYXMgRVVDLUpQLCBKSVMtNywgYW5kIFNoaWZ0LUpJUy4KLQotICAgSW4g Z2VuZXJhbCwgd2hlbiBjb252ZXJ0aW5nIGZyb20gVUNTIHRvIGEgc2luZ2xlLWJ5dGUgc2V0LCB0 aGVyZSBpcwotICAgYWx3YXlzIHRoZSBwb3NzaWJpbGl0eSBvZiBkYXRhIGxvc3MsIGp1c3QgYXMg dGhlcmUgaXMgd2hlbiBjb252ZXJ0aW5nCi0gICBmcm9tIGFueSBsYXJnZXIgc2V0IHRvIGEgc21h bGxlciBvbmUuIEZvciBleGFtcGxlLCBpZiBhIFVDUyBmaWxlCi0gICBjb250YWlucyBEZXZhbmFn YXJpIGNoYXJhY3RlcnMsIHRoZXNlIGNoYXJhY3RlcnMgd2lsbCBiZSBsb3N0IHdoZW4KLSAgIGNv bnZlcnRpbmcgdG8gKHNheSkgTGF0aW4tMSwganVzdCBhcyBSb21hbiB2b3dlbHMgd2l0aCBhY3V0 ZSBhY2NlbnRzCi0gICBhcmUgbG9zdCB3aGVuIGNvbnZlcnRpbmcgZnJvbSBMYXRpbi0xIChhbiA4 LWJpdCBzZXQpIHRvIEdlcm1hbiBJU08gNjQ2Ci0gICAoYSA3LWJpdCBzZXQpLgotCi0gICAgNi42 LjUuIEtlcm1pdCdzIFVuaWNvZGUgRmVhdHVyZXMKLQotICAgQy1LZXJtaXQgY2FuIGNvbnZlcnQg YmV0d2VlbiBVQ1MtMiBvciBVVEYtOCBhbmQgYW55IG9mIGl0cyBvdGhlcgotICAgY2hhcmFjdGVy IHNldHMsIGFuZCBhbHNvIGJldHdlZW4gVUNTLTIgYW5kIFVURi04LiBXaGVuIGNvbnZlcnRpbmcK LSAgIGJldHdlZW4gVUNTLTIgb3IgVVRGLTggYW5kIGEgbm9uLVVuaWNvZGUgY2hhcmFjdGVyIHNl dCAoc3VjaCBhcwotICAgTGF0aW4tMSksIHRoZSBVQ1MgTGluZSBTZXBhcmF0b3IgKExTLCBVKzIw MjgpIGFuZCBQYXJhZ3JhcGggU2VwYXJhdG9yCi0gICAoUFMsIFUrMjAyOSkgY2hhcmFjdGVycyBh cmUgY29udmVydGVkIHRvIHRoZSBhcHByb3ByaWF0ZSBsaW5lCi0gICB0ZXJtaW5hdG9yIChDUiwg TEYsIG9yIENSTEYpLiBXaGVuIGNvbnZlcnRpbmcgZnJvbSBhIG5vbi1Vbmljb2RlIHNldCB0bwot ICAgVUNTLTIgb3IgVVRGLTgsIGhvd2V2ZXIsIGxpbmUgdGVybWluYXRvcnMgYXJlIG5vdCBjb252 ZXJ0ZWQgdG8gTFMgb3IKLSAgIFBTLiBUaGlzIGlzIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcmVj b21tZW5kYXRpb25zIG9mIFVuaWNvZGUgVGVjaG5pY2FsCi0gICBSZXBvcnQgIzEzLgotCi0gICBX aGVuIEMtS2VybWl0IHN0YXJ0cywgaXQgdGVzdHMgdGhlIG5hdGl2ZSBieXRlIG9yZGVyIG9mIHRo ZSBjb21wdXRlci4KLSAgIFlvdSBjYW4gc2VlIHRoZSByZXN1bHQgaW4gdGhlIFNIT1cgRkVBVFVS RVMgb3IgU0hPVyBGSUxFIGRpc3BsYXkuIEl0J3MKLSAgIGFsc28gYXZhaWxhYmxlIGluIHRoZSB2 YXJpYWJsZSBcdihieXRlb3JkZXIpOiAwIG1lYW5zIEJpZyBFbmRpYW4sIDEKLSAgIG1lYW5zIExp dHRsZSBFbmRpYW4uCi0KLSAgIFdoZW4gVUNTLTIgaXMgaW52b2x2ZWQgaW4gZmlsZSB0cmFuc2Zl ciBvciB0cmFuc2xhdGlvbiwgdGhlIGZvbGxvd2luZwotICAgY29tbWFuZHMgdGVsbCBDLUtlcm1p dCB3aGF0IHRvIGRvIGFib3V0IGJ5dGUgb3JkZXI6Ci0KLSAgIFNFVCBGSUxFIFVDUyBCWVRFLU9S REVSIHsgQklHLUVORElBTiwgTElUVExFLUVORElBTiB9Ci0gICAgICAgICAgVGhpcyBpcyBmb3Ig cmVhZGluZyBVQ1MtMiBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYSBCT00sIGFuZCBhbHNvCi0gICAg ICAgICAgZm9yIHdyaXRpbmcgVUNTLTIgZmlsZXMuIElmIHRoaXMgY29tbWFuZCBpcyBub3QgZ2l2 ZW4sIHRoZQotICAgICAgICAgIG1hY2hpbmUncyBuYXRpdmUgYnl0ZSBvcmRlciBpcyB1c2VkIHdo ZW4gd3JpdGluZyBVQ1MtMiBmaWxlcywKLSAgICAgICAgICBhbmQgYWxzbyB3aGVuIHJlYWRpbmcg VUNTLTIgZmlsZXMgdGhhdCBkb24ndCBoYXZlIGEgQk9NLgotCi0gICBTRVQgRklMRSBVQ1MgQk9N IHsgT04sIE9GRiB9Ci0gICAgICAgICAgVGhpcyBzZXR0aW5nIGlzIHVzZWQgd2hlbiBjcmVhdGlu ZyBVQ1MtMiBmaWxlcy4gQSBCT00gaXMgYWRkZWQKLSAgICAgICAgICBhdCB0aGUgYmVnaW5uaW5n IGJ5IGRlZmF1bHQuIFVzZSBPRkYgdG8gbm90IGFkZCB0aGUgQk9NLiBUaGlzCi0gICAgICAgICAg Y29tbWFuZCBoYXMgbm8gYWZmZWN0IHdoZW4gd3JpdGluZyBmaWxlcy4KLQotICAgQ09QWSAvU1dB UC1CWVRFUyBzb3VyY2VmaWxlIGRlc3RpbmF0aW9uZmlsZQotICAgICAgICAgIFVzZSB0aGlzIGZv ciBmaXhpbmcgYSBVQ1MtMiBmaWxlIHdob3NlIGJ5dGVzIGFyZSBpbiB0aGUgd3JvbmcKLSAgICAg ICAgICBvcmRlci4KLQotICAgVXNlIFNIT1cgRklMRSB0byBkaXNwbGF5IHRoZSBGSUxFIFVDUyBz ZXR0aW5ncy4KLQotICAgUGxlYXNlIG5vdGUsIGFnYWluLCB0aGF0IEMtS2VybWl0J3MgdXNlciBp bnRlcmZhY2UsIGluY2x1ZGluZyBpdHMKLSAgIHNjcmlwdCBsYW5ndWFnZSwgaXMgbm90IGludGVy bmF0aW9uYWxpemVkIGluIGFueSB3YXkuIFN0cmluZwotICAgY29tcGFyaXNvbnMsIGNhc2UgY29u dmVyc2lvbiwgYW5kIHNvIG9uLCB3b3JrIG9ubHkgZm9yIFVTIEFTQ0lJCi0gICAoY29tcGFyaXNv bnMgZm9yIGVxdWFsaXR5IHdvcmsgd2l0aCBvdGhlciBzZXRzLCBidXQgbm90Ci0gICBsZXhpY2Fs bHktZ3JlYXRlci1vci1sZXNzLXRoYW4gb3IgY2FzZWxlc3MgY29tcGFyaXNvbnM7IGV2ZW4KLSAg IGNvbXBhcmlzb25zIGZvciBlcXVhbGl0eSBjYW4gZmFpbCB3aGVuIGNvbXBvc2VkIGNoYXJhY3Rl cnMgb3IgYnl0ZQotICAgb3JkZXIgYXJlIGludm9sdmVkKS4gU3RyaW5nIGZ1bmN0aW9ucyBzdWNo IGFzIFxmaW5kZXgoKSBhbmQKLSAgIFxmc3Vic3RyaW5nKCkgdGhhdCByZWZlcmVuY2UgYnl0ZSBw b3NpdGlvbnMgZG8ganVzdCB0aGF0OyB0aGV5IHdvbid0Ci0gICB3b3JrIHdpdGggVVRGLTggdGV4 dCB0aGF0IGNvbnRhaW5zIGFueSBub24tQVNDSUkgY2hhcmFjdGVycywgYW5kIHRoZXkKLSAgIHdp bGwgbm90IHdvcmsgd2l0aCBVQ1MtMiB0ZXh0IGF0IGFsbCBzaW5jZSB0aGV5IHVzZSBDIHN0cmlu Z3MKLSAgIGludGVybmFsbHksIHdoaWNoIGFyZSBOVUwtdGVybWluYXRlZC4gVGhlc2UgYXJlIGp1 c3QgYSBmZXcgZXhhbXBsZXMgdG8KLSAgIGlsbHVzdHJhdGUgdGhhdCBuZWl0aGVyIFVuaWNvZGUg bm9yIGFueSBvdGhlciBjaGFyYWN0ZXItc2V0IGJleW9uZAotICAgQVNDSUkgaXMgc3VwcG9ydGVk IGF0IHRoZSB1c2VyLWludGVyZmFjZSwgY29tbWFuZCwgb3Igc2NyaXB0aW5nIGxldmVsCi0gICBp biB0aGlzIHZlcnNpb24gb2YgQy1LZXJtaXQuCi0KLSAgICA2LjYuNS4xLiBGaWxlIFRyYW5zZmVy Ci0KLSAgIEtlcm1pdCBzdXBwb3J0cyBib3RoIFVDUy0yIGFuZCBVVEYtOCBhcyBmaWxlIGFuZCB0 cmFuc2ZlciBjaGFyYWN0ZXIKLSAgIHNldHMgaW4gdGV4dC1tb2RlIGZpbGUgdHJhbnNmZXIuCi0K LSAgIFRvIHNlbGVjdCBVQ1MtMiBvciBVVEYtOCBhcyBhIGZpbGUgY2hhcmFjdGVyLXNldCwgdXNl OgotCi0gIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgeyBVQ1MyLCBVVEY4IH0KLQotICAgSWYgeW91 IHdhbnQgdG8gc2VuZCBhIFVDUy0yIHRleHQgZmlsZSAob3Igc2F2ZSBhbiBpbmNvbWluZyBmaWxl IGluCi0gICBVQ1MtMiBmb3JtYXQpLCB0ZWxsIEtlcm1pdCB0bzoKLQotICBTRVQgRklMRSBDSEFS QUNURVItU0VUIFVDUzIKLQotICAgYW5kIGlmIHlvdSB3YW50IHRvIHNlbmQgYSBVVEYtOCB0ZXh0 IGZpbGUgKG9yIHN0b3JlIGFuIGluY29taW5nIGZpbGUgaW4KLSAgIFVURi04IGZvcm1hdCksIHRl bGwgS2VybWl0IHRvOgotCi0gIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgVVRGOAotCi0gICBXaGVu IHNlbmRpbmcgVUNTLTIgZmlsZXMsIEtlcm1pdCBkZXRlcm1pbmVzIHRoZSBieXRlIG9yZGVyIGZy b20gdGhlCi0gICBCT00sIGlmIHRoZXJlIGlzIG9uZSAoYW5kIGlmIHRoZXJlIGlzIGEgQk9NLCBp dCBpcyBzdHJpcHBlZCwgaS5lLiBub3QKLSAgIHNlbnQpLiBJZiB0aGVyZSBpcyBubyBCT00sIHRo ZSBieXRlIG9yZGVyIGlzIHRoZSBvbmUgc3BlY2lmaWVkIGluIHRoZQotICAgbW9zdCByZWNlbnQg U0VUIEZJTEUgVUNTIEJZVEUtT1JERVIgY29tbWFuZCwgaWYgYW55LCBvdGhlcndpc2UgdGhlCi0g ICBjb21wdXRlcidzIG5hdGl2ZSBieXRlIG9yZGVyIGlzIGFzc3VtZWQuIFdoZW4gc3RvcmluZyBp bmNvbWluZyBmaWxlcyBhcwotICAgVUNTLTIsIHRoZSBieXRlIG9yZGVyIGlzIGFjY29yZGluZyBT RVQgRklMRSBVQ1MgQllURS1PUkRFUiwgaWYgZ2l2ZW4sCi0gICBvdGhlcndpc2UgdGhlIG5hdGl2 ZSBvbmU7IGEgQk9NIGlzIHdyaXR0ZW4gYWNjb3JkaW5nIHRvIFNFVCBGSUxFIFVDUwotICAgQk9N LgotCi0gICBBIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgc2hvdWxkIGJlIGNob3NlbiB0aGF0IGlu Y2x1ZGVzIGFsbCBvZiB0aGUKLSAgIGNoYXJhY3RlcnMgaW4gdGhlIHNvdXJjZSBmaWxlLiBTbywg Zm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgc2VuZGluZyBhCi0gICBVQ1MtMiBmaWxlIGNvbnRhaW5p bmcgb25seSBHZXJtYW4tbGFuZ3VhZ2UgdGV4dCwgeW91ciB0cmFuc2ZlcgotICAgY2hhcmFjdGVy LXNldCBjYW4gYmUgTGF0aW4tMSwgTGF0aW4tMiwgTGF0aW4tOSwgVUNTLTIsIG9yIFVURi04LiBC dXQgaWYKLSAgIHlvdSBhcmUgc2VuZGluZyBhIGZpbGUgdGhhdCBjb250YWlucyBhIGNvbWJpbmF0 aW9uIG9mIEhlYnJldyBhbmQgR3JlZWssCi0gICB5b3VyIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQg bXVzdCBiZSBVQ1MtMiBvciBVVEYtOCBpZiB5b3UgZG9uJ3Qgd2FudCB0bwotICAgbG9zZSBvbmUg c2NyaXB0IG9yIHRoZSBvdGhlci4gRnVydGhlcm1vcmUsIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXIt c2V0Ci0gICBtdXN0IGJlIG9uZSB0aGF0IGlzIHN1cHBvcnRlZCBieSB0aGUgcmVjZWl2aW5nIEtl cm1pdCBwcm9ncmFtLiBTaW5jZQotICAgVUNTIHN1cHBvcnQgaXMgbmV3LCBpdCBpcyBwb3NzaWJs ZSB0aGF0IHRoZSBvdGhlciBLZXJtaXQgcHJvZ3JhbSAoaWYgaXQKLSAgIHN1cHBvcnRzIGNoYXJh Y3RlciBzZXRzIGF0IGFsbCkgZG9lcyBub3Qgc3VwcG9ydCBpdCwgYnV0IGRvZXMgc3VwcG9ydAot ICAgc2luZ2xlLWJ5dGUgc2V0cyBzdWNoIGFzIExhdGluLTEsIExhdGluL0N5cmlsbGljLCBldGMu Ci0KLSAgIFRvIHNlbGVjdCBVQ1MtMiBvciBVVEYtOCBhcyBhIHRyYW5zZmVyIGNoYXJhY3Rlci1z ZXQsIHVzZToKLQotICBTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCB7IFVDUzIsIFVURjggfQot Ci0gICBJdCBpcyB1cCB0byB0aGUgcmVjZWl2aW5nIEtlcm1pdCBwcm9ncmFtIHRvIGNvbnZlcnQg dGhlIHRyYW5zZmVyIGZvcm1hdAotICAgdG8gaXRzIG93biBsb2NhbCBmb3JtYXQsIGlmIG5lY2Vz c2FyeS4gSWYgaXQgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUKLSAgIFVURi04IG9yIFVDUy0yIHRy YW5zZmVyIGNoYXJhY3Rlci1zZXQsIGFuZCB5b3VyIGZpbGUgY2FuIG5vdCBiZQotICAgYWRlcXVh dGVseSByZXByZXNlbnRlZCBieSBhbnkgc2luZ2xlLWJ5dGUgdHJhbnNmZXIgY2hhcmFjdGVyLXNl dCAoc3VjaAotICAgYXMgTGF0aW4tMSBvciBMYXRpbi9DeXJpbGxpYykgdGhlbiwgaWYgVVRGLTgg Zm9ybWF0IGlzIGFjY2VwdGFibGUgb24KLSAgIHRoZSByZWNlaXZpbmcgY29tcHV0ZXIsIHVzZSBV VEYtOCBhcyB0aGUgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCwgd2l0aAotICAgdGhlIHJlY2VpdmVy IHRvbGQgdG8gInNldCB1bmtub3duLWNoYXIga2VlcCIsIG9yIHdpdGggdGhlIHNlbmRlciB0b2xk Ci0gICB0byAic2V0IGF0dHJpYnV0ZSBjaGFyIG9mZiIuIElmIHlvdSB3YW50IHRoZSBmaWxlIHRv IGJlIHN0b3JlZCBpbiBVQ1MtMgotICAgZm9ybWF0IGF0IHRoZSByZWNlaXZlciwgc2VuZCBpdCBp dCBiaW5hcnkgbW9kZSBpZiB0aGUgc291cmNlIGZpbGUgaXMKLSAgIGFsc28gVUNTLTIsIG9yIGVs c2UgdXNlIHRoZSBUUkFOU0xBVEUgY29tbWFuZCAobmV4dCBzZWN0aW9uKSB0byBjb252ZXJ0Ci0g ICBpdCB0byBVQ1MtMiBmaXJzdCwgdGhlbiBzZW5kIGl0IGluIGJpbmFyeSBtb2RlLiBZb3Ugc2hv dWxkIG5vdCB1c2UKLSAgIFVDUy0yIGFzIGEgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBpbiB0ZXh0 LW1vZGUgdHJhbnNmZXJzIHRvIEtlcm1pdAotICAgcHJvZ3JhbXMgdGhhdCBkb24ndCBzdXBwb3J0 IGl0LCBiZWNhdXNlIHRoZXkgYXJlIGxpa2VseSB0byBjb3JydXB0IHRoZQotICAgcmVzdWx0IHRo ZSBzYW1lIHdheSBGVFAgd291bGQgKHNlZSB0aGUgZmluYWwgcGFyYWdyYXBoIG9mIHRoaXMKLSAg IHNlY3Rpb24pLgotCi0gICBXaGVuIFVDUy0yIGlzIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0 LCBpdCBhbHdheXMgZ29lcyBpbnRvIEtlcm1pdAotICAgcGFja2V0cyBpbiBCaWcgRW5kaWFuIGZv cm1hdCwgd2l0aCBubyBCT00uIEFzIGFsd2F5cywgdGhlIHRyYW5zZmVyCi0gICBjaGFyYWN0ZXIt c2V0IGlzIGFubm91bmNlZCBieSB0aGUgc2VuZGVyIHRvIHRoZSByZWNlaXZlci4gVGhlCi0gICBh bm5vdW5jZW1lbnQgZm9yIFVDUy0yIGlzICJJMTYyIiAoSVNPIFJlZ2lzdHJhdGlvbiAxNjIgPSBV Q1MtMiBMZXZlbCAxKQotICAgYW5kIGJ5IGRlZmluaXRpb24gaXQgaXMgQmlnIEVuZGlhbiAodGhl IHN0YW5kYXJkcyBzYXkgdGhhdCB3aGVuIFVDUy0yCi0gICBpcyBzZXJpYWxpemVkIGludG8gYnl0 ZXMsIHRoZSBvcmRlciBtdXN0IGJlIEJpZyBFbmRpYW4pLiBUaGUKLSAgIGFubm91bmNlbWVudCBm b3IgVVRGLTggaXMgIkkxOTAiIChVVEYtOCBMZXZlbCAxKS4KLQotICAgV2hlbiByZWNlaXZpbmcg YSBmaWxlIHdob3NlIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgaXMgVUNTLTIgb3IgVVRGLTgsCi0g ICB5b3UgbXVzdCBjaG9vc2UgdGhlIGFwcHJvcHJpYXRlIGZpbGUgY2hhcmFjdGVyIHNldCBmb3Ig dGhlIHJlc3VsdC4KLSAgIFRoZXJlIGlzIG5vIHdheSBLZXJtaXQgY2FuIGRvIHRoaXMgZm9yIHlv dSBhdXRvbWF0aWNhbGx5LCBzaW5jZSBVQ1MKLSAgIGRhdGEgY2FuIGJlIGluIGFueSBzY3JpcHQg YXQgYWxsLCBvciBhbnkgY29tYmluYXRpb24uCi0KLSAgIEluIGdlbmVyYWwsIFVURi04IG9yIFVD Uy0yIHNob3VsZCBiZSBjaG9zZW4gYXMgYSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0Ci0gICBpZiB0 aGUgc291cmNlIGZpbGUgaXMgYWxzbyBlbmNvZGVkIGluIHNvbWUgZm9ybSBvZiBVQ1MgYW5kIGl0 IGNvbnRhaW5zCi0gICBtb3JlIHRoYW4gb25lIHNjcmlwdC4gQnV0IHRoZXJlIGFyZSBvdGhlciBz aXR1YXRpb25zIHdoZXJlIHdoZXJlIFVURi04Ci0gICBvciBVQ1MtMiBvZmZlciBhZHZhbnRhZ2Vz LiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGUgc291cmNlIGZpbGUgaXMgb24gYQotICAgTmVYVHN0 YXRpb24gYW5kIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGlzIG9uIFZNUy4gQm90aCB0aGUgTmVYVCBh bmQgdGhlCi0gICBERUMgTXVsdGluYXRpb25hbCBjaGFyYWN0ZXIgc2V0cyBpbmNsdWRlIHRoZSBG cmVuY2ggT0UgZGlncmFwaCwgYnV0Ci0gICBMYXRpbi0xIGRvZXMgbm90LiBUaGVyZWZvcmUgRnJl bmNoIHdvcmRzIGNvbnRhaW5pbmcgdGhpcyBjaGFyYWN0ZXIKLSAgIG1pZ2h0IG5vdCBhcnJpdmUg aW50YWN0IHdoZW4gTGF0aW4tMSBpcyB0aGUgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCwgYnV0Ci0g ICB3aWxsIHdpdGggVVRGLTggb3IgVUNTLTIsIHNpbmNlIHRoZSBVQ1MgaW5jbHVkZXMgdGhlIE9F IGRpZ3JhcGggKGJ1dCBzbwotICAgZG9lcyBMYXRpbi05KS4KLQotICAgVUNTLTIgc2hvdWxkIGJl IGNob3NlbiBhcyBhIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgb25seSBmb3IgSmFwYW5lc2UKLSAg IHRleHQgZmlsZXMgdGhhdCBjb250YWluIGEgbGFyZ2UgcHJlcG9uZGVyYW5jZSBvZiBLYW5qaSwg c2luY2UgaW4gdGhpcwotICAgY2FzZSAoYW5kIG9ubHkgdGhpcyBjYXNlKSBVQ1MtMiAodHdvIGJ5 dGVzIHBlciBLYW5qaSkgaXMgbW9yZSBlZmZpY2llbnQKLSAgIHRoYW4gVVRGLTggKHRocmVlIGJ5 dGVzIHBlciBLYW5qaSkuIFRoZSBzYW1lIHdpbGwgYmUgdHJ1ZSBmb3IgQ2hpbmVzZQotICAgYW5k IEtvcmVhbiB3aGVuIHRoZXkgYXJlIHN1cHBvcnRlZCBieSBLZXJtaXQuIFVDUy0yIHNob3VsZCBu ZXZlciBiZQotICAgdXNlZCBhcyBhIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgd2l0aCBhIHRyYW5z ZmVyIHBhcnRuZXIgdGhhdCBkb2VzIG5vdAotICAgc3VwcG9ydCBVQ1MtMiBzaW5jZSB0aGlzIGNh biBjYXVzZSBmaWxlIGNvcnJ1cHRpb24gKHNlZSBsYXN0IHBhcmFncmFwaAotICAgaW4gdGhpcyBz ZWN0aW9uKS4KLQotICAgTm90ZSB0aGF0IEtlcm1pdCdzIHJlcGVhdC1jb3VudCBjb21wcmVzc2lv biBpcyAxMDAlIGluZWZmZWN0aXZlIGZvcgotICAgVUNTLTIsIGFuZCBpcyBhbHNvIGluZWZmZWN0 aXZlIGZvciBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbiBVVEYtOCBhbmQKLSAgIEVVQy1KUDsgdGhp cyBpcyBiZWNhdXNlIHJlcGVhdC1jb21wcmVzc2lvbiBpcyBhIHRyYW5zcG9ydC1sZXZlbAotICAg bWVjaGFuaXNtIHRoYXQgb3BlcmF0ZXMgb24gYSBwZXItYnl0ZSBiYXNpczsgaXQgaGFzIG5vIGtu b3dsZWRnZSBvZiB0aGUKLSAgIGRpc3RpbmN0aW9uIGJldHdlZW4gYSBieXRlIGFuZCBhIGNoYXJh Y3Rlci4KLQotICAgV2hlbiBDLUtlcm1pdCBzdGFydHMsIGl0IHNldHMgdXAgYXNzb2NpYXRpb25z IChbNTUzXVNlY3Rpb24gNi41KSBmb3IKLSAgIGluY29taW5nIGZpbGVzIHdob3NlIHRyYW5zZmVy IGNoYXJhY3RlciBzZXRzIGFyZSBVQ1MtMiBvciBVVEYtOAotICAgYXBwcm9wcmlhdGVseSBmb3Ig dGhlIHBsYXRmb3JtIHNvIHRoYXQgdGhlIGZpbGUgY2hhcmFjdGVyLXNldCBmb3IgdGhlCi0gICBp bmNvbWluZyBmaWxlIGlzIFVDUy0yIGluIFdpbmRvd3MgYW5kIFVURi04IGVsc2V3aGVyZS4gT3Ro ZXJ3aXNlLAotICAgQy1LZXJtaXQgZG9lcyBub3QgbWFrZSBhbnkgZGVmYXVsdCBhc3NvY2lhdGlv bnMgZm9yIFVDUy0yIG9yIFVURi04LCBidXQKLSAgIG9mIGNvdXJzZSB5b3UgbWF5IGFkZCBvciBj aGFuZ2UgYXNzb2NpYXRpb25zIHRvIHN1aXQgeW91ciBuZWVkcyBhbmQKLSAgIHByZWZlcmVuY2Vz IGJ5IGluY2x1ZGluZyB0aGUgYXBwcm9wcmlhdGUgQVNTT0NJQVRFIGNvbW1hbmRzIGluIHlvdXIK LSAgIEtlcm1pdCBzdGFydHVwIGZpbGUuIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIGEgUEMgdXNl ciBhbmQgZGVhbCBvbmx5Ci0gICB3aXRoIHRleHQgd3JpdHRlbiBpbiBHcmVlayBhbmQgRW5nbGlz aCwgeW91IGNhbjoKLQotICBBU1NPQ0lBVEUgVFJBTlNGRVItQ0hBUkFDVEVSLVNFVCBVVEY4IENQ ODY5Ci0gIEFTU09DSUFURSBUUkFOU0ZFUi1DSEFSQUNURVItU0VUIFVDUzIgQ1A4NjkKLSAgQVNT T0NJQVRFIEZJTEUtQ0hBUkFDVEVSLVNFVCBDUDg2OSBVVEY4Ci0KLSAgIE5vdGUgdGhhdCB3aGVu IGZpbGUgdHJhbnNmZXIgaW52b2x2ZXMgY29udmVyc2lvbiBiZXR3ZWVuIGEgc2luZ2xlLWJ5dGUK LSAgIGNoYXJhY3RlciBzZXQgYW5kIFVDUy0yIG9yIFVURi04LCB0aGUgZmlsZS10cmFuc2ZlciB0 aGVybW9tZXRlciBhbmQKLSAgIGVzdGltYXRlZCB0aW1lIGxlZnQgbWlnaHQgYmUgaW5hY2N1cmF0 ZSwgc2luY2UgdGhleSBhcmUgYmFzZWQgb24gdGhlCi0gICBzb3VyY2UgZmlsZSBzaXplLCBub3Qg dGhlIHRyYW5zZmVyIGVuY29kaW5nLiBUaGlzIGlzIHB1cmVseSBhIGNvc21ldGljCi0gICBpc3N1 ZSBhbmQgZG9lcyBub3QgZWZmZWN0IHRoZSBmaW5hbCByZXN1bHQuIChBbmQgaXMgbm90LCBzdHJp Y3RseQotICAgc3BlYWtpbmcsIGEgYnVnOyBLZXJtaXQgcHJvdG9jb2wgcHJlc2VudGx5IGluY2x1 ZGVzIG5vIG1ldGhvZCBmb3IgdGhlCi0gICBzZW5kZXIgdG8gZnVybmlzaCBhbiAiZXN0aW1hdGVk IHRyYW5zZmVyIHNpemUiIHRvIHRoZSByZWNlaXZlciwgYW5kIGluCi0gICBhbnkgY2FzZSBhbnkg c3VjaCBndWVzcyBjb3VsZCBiZSBhcyBmYXIgb2ZmIGFzIHRoZSBmaWxlIHNpemUsIGdpdmVuIHRo ZQotICAgbWFueSBvdGhlciBmYWN0b3JzIHRoYXQgY29tZSBpbnRvIHBsYXksIHN1Y2ggYXMgY29t cHJlc3Npb24gYW5kCi0gICBwcmVmaXhpbmcpLgotCi0gICBBIGNhdXRpb24gYWJvdXQgRlRQIGFu ZCBVQ1MtMi4gQXMgbm90ZWQgcHJldmlvdXNseSwgaWYgeW91IHRyYW5zZmVyIGEKLSAgIFVDUy0y IGZpbGUgd2l0aCBGVFAgaW4gYmluYXJ5IG1vZGUgYmV0d2VlbiB0d28gY29tcHV0ZXJzIHdpdGgg b3Bwb3NpdGUKLSAgIEVuZGlhbm5lc3MsIHRoZSByZXN1bHQgd2lsbCBoYXZlIGl0cyBieXRlcyBp biB0aGUgd3Jvbmcgb3JkZXIuIEhvd2V2ZXIsCi0gICBpZiB5b3UgdXNlIEZUUCB0byB0cmFuc2Zl ciBhIFVDUy0yIGZpbGUgaW4gImFzY2lpIiAodGV4dCkgbW9kZSB0byBBTlkKLSAgIGNvbXB1dGVy LCBldmVuIGlmIGl0IGlzIGlkZW50aWNhbCB0byB5b3VycywgdGhlIHJlc3VsdCB3aWxsIGJlCi0g ICBjb3JydXB0ZWQgYmVjYXVzZSBGVFAncyBsaW5lLXRlcm1pbmF0b3IgY29udmVyc2lvbnMgZG8g bm90IGFjY291bnQgZm9yCi0gICBVQ1MtMi4gVGhlIHNhbWUgaG9sZHMgd2hlbiBzZW5kaW5nIGZy b20gYSBVQ1MtYXdhcmUgS2VybWl0IHByb2dyYW0gdG8KLSAgIGFuIG9sZGVyIEtlcm1pdCBwcm9n cmFtIGluIHRleHQgbW9kZSB3aXRoIGEgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBvZgotICAgVUNT LTIuIFNvIHVzZSBVQ1MtMiBhcyBhIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgT05MWSB3aXRoIGEg VUNTLTItYXdhcmUKLSAgIEtlcm1pdCBwYXJ0bmVyLgotCi0gICAgNi42LjUuMi4gVGhlIFRSQU5T TEFURSBDb21tYW5kCi0KLSAgIEluIEtlcm1pdCB2ZXJzaW9ucyB0aGF0IGhhdmUgVW5pY29kZSBz dXBwb3J0IGluY2x1ZGVkLCBUUkFOU0xBVEUgbm93Ci0gICBhbHdheXMgZ29lcyB0aHJvdWdoIFVu aWNvZGU7IHRoYXQgaXMsIHRoZSBzb3VyY2Ugc2V0IGlzIGNvbnZlcnRlZCB0bwotICAgVUNTLTIg YW5kIHRoZW5jZSB0byB0aGUgdGFyZ2V0IHNldC4gVGhpcyBpcyBhIG1ham9yIGltcHJvdmVtZW50 LCBzaW5jZQotICAgaW4gcHJpb3IgcmVsZWFzZXMsIEMtS2VybWl0IGhhZCB0byBwaWNrIHRoZSAi bW9zdCBhcHByb3ByaWF0ZSIgdHJhbnNmZXIKLSAgIGNoYXJhY3Rlci1zZXQgYXMgdGhlIGludGVy bWVkaWF0ZSBzZXQsIGFuZCB0aGlzIHdvdWxkIHJlc3VsdCBpbiB0aGUKLSAgIGxvc3Mgb2YgYW55 IGNoYXJhY3RlcnMgdGhhdCB0aGUgc291cmNlIGFuZCB0YXJnZXQgc2V0cyBoYWQgaW4gY29tbW9u Ci0gICBidXQgd2VyZSBsYWNraW5nIGZyb20gdGhlIGludGVybWVkaWF0ZSBzZXQgKGZvciBleGFt cGxlIHRoZSBPRSBkaWdyYXBoCi0gICB3aGVuIHRyYW5zbGF0aW5nIGZyb20gTmVYVCB0byBERUMg TUNTIHRocm91Z2ggTGF0aW4tMSkuIFRoaXMgbmV2ZXIKLSAgIGhhcHBlbnMgd2hlbiBVbmljb2Rl IGlzIHRoZSBpbnRlcm1lZGlhdGUgc2V0IGJlY2F1c2UgVW5pY29kZSBpcyBhCi0gICBzdXBlcnNl dCBvZiBhbGwgb3RoZXIgY2hhcmFjdGVyIHNldHMgc3VwcG9ydGVkIGJ5IEtlcm1pdC4gQSBtb3Jl Ci0gICBkcmFtYXRpYyBleGFtcGxlIHdvdWxkIGJlIHRyYW5zbGF0aW9uIGJldHdlZW4gQ3lyaWxs aWMgUEMgY29kZSBwYWdlIDg2NgotICAgYW5kIEtPSTgtUiAoWzU1NF1TZWN0aW9uIDYuNCk7IGZv cm1lcmx5IGFsbCB0aGUgbGluZS0gYW5kIGJveC1kcmF3aW5nCi0gICBjaGFyYWN0ZXJzIHdvdWxk IGJlIGxvc3QgKHNpbmNlIElTTyA4ODU5LTUgZG9lcyBub3QgaGF2ZSBhbnkpOyBub3cgdGhlCi0g ICBvbmVzIHRoYXQgdGhlc2UgdHdvIHNldHMgaGF2ZSBpbiBjb21tb24gYXJlIHByZXNlcnZlZC4K LQotICAgVUNTLTIgYW5kIFVURi04IGFyZSBub3cgYm90aCBzdXBwb3J0ZWQgYXMgc291cmNlLWZp bGUgYW5kCi0gICBkZXN0aW5hdGlvbi1maWxlIGNoYXJhY3RlciBzZXRzIGJ5IEMtS2VybWl0J3Mg VFJBTlNMQVRFIGNvbW1hbmQsIGZvcgotICAgZXhhbXBsZToKLQotICB0cmFuc2xhdGUgb29mYS50 eHQgdWNzMiBsYXRpbjEgb29mYS1sMS50eHQKLQotICAgdHJhbnNsYXRlcyBvb2ZhLnR4dCBmcm9t IFVDUy0yIHRvIExhdGluLTEsIHN0b3JpbmcgdGhlIHJlc3VsdCBhcwotICAgb29mYS1sMS50eHQu IFNpbWlsYXJseToKLQotICB0cmFuc2xhdGUgb29mYS50eHQgdXRmOCBsYXRpbjEgb29mYS1sMS50 eHQKLSAgdHJhbnNsYXRlIG9vZmEudHh0IGxhdGluMSB1Y3MyIG9vZmEtdWNzMi50eHQKLSAgdHJh bnNsYXRlIG9vZmEudHh0IGxhdGluMSB1dGY4IG9vZmEtdXRmOC50eHQKLSAgdHJhbnNsYXRlIG9v ZmEudHh0IHVjczIgdXRmOCBvb2ZhLXV0ZjgudHh0Ci0gIHRyYW5zbGF0ZSBvb2ZhLnR4dCB1dGY4 IHVjczIgb29mYS11Y3MyLnR4dAotCi0gICBUcmVhdG1lbnQgb2YgdGhlIFVDUy0yIEJPTSBpcyBl eGFjdGx5IHRoZSBzYW1lIGFzIGZvciBmaWxlIHRyYW5zZmVyLgotICAgTm90ZSB0aGF0IGlmIGEg VUNTLTIgc291cmNlIGZpbGUgaXMgaW4gdGhlICJ3cm9uZyIgYnl0ZSBvcmRlciBhbmQgbGFja3MK LSAgIGEgQk9NLCBhbmQgeW91IGRvbid0IHRlbGwgS2VybWl0IGFib3V0IGl0IHdpdGggU0VUIEZJ TEUgVUNTIEJZVEUtT1JERVIsCi0gICB0aGUgcmVzdWx0IG9mIHRoZSB0cmFuc2xhdGlvbiBpcyB0 b3RhbCBnaWJiZXJpc2guIFJlY2FsbCB0aGF0IHlvdSBjYW4KLSAgIHVzZSBDT1BZIC9TV0FQLUJZ VEVTIHRvIHN3aXRjaCB0aGUgYnl0ZSBvcmRlciBvZiBhbiBlcnJhbnQgVUNTLTIgZmlsZQotICAg KG9yIGFueSBvdGhlciBmaWxlIGZvciB0aGF0IG1hdHRlciwgaWYgeW91IGNhbiB0aGluayBvZiBh IHJlYXNvbiB0bykuCi0gICBBbHNvIG5vdGUgdGhhdDoKLQotICB0cmFuc2xhdGUgb29mYS50eHQg dWNzMiB1Y3MyIG5ldy50eHQKLQotICAgUHJvZHVjZXMgYSByZXN1bHQgaW4gdGhlIG5hdGl2ZSAo b3IgU0VUIEZJTEUgVUNTKSBieXRlLW9yZGVyIGFzIGxvbmcgYXMKLSAgIG9vZmEudHh0IGhhcyBh IEJPTS4KLQotICAgQXMgYSBzaWRlIGJlbmVmaXQgb2YgdGhlIFVuaWNvZGUgd29yaywgdGhlIFRS QU5TTEFURSBjb21tYW5kIG5vdyB3b3JrcwotICAgZm9yIHRoZSBmaXJzdCB0aW1lIGFsc28gZm9y IGFsbCBKYXBhbmVzZSBjaGFyYWN0ZXIgc2V0cyB0aGF0IEtlcm1pdAotICAgc3VwcG9ydHMuIElu IG90aGVyIHdvcmRzLCBpZiB5b3UgaGF2ZSBhIEphcGFuZXNlIHRleHQgZmlsZSBpbiBhbnkgb2YK LSAgIHRoZSBmb2xsb3dpbmcgZW5jb2RpbmdzOgotCi0gIEVVQy1KUAotICBTaGlmdC1KSVMKLSAg SklTLTcKLSAgVUNTLTIKLSAgVVRGLTgKLQotICAgWW91IGNhbiB1c2UgdGhlIFRSQU5TTEFURSBj b21tYW5kIHRvIGNvbnZlcnQgdG8gYW55IG90aGVyIGVuY29kaW5nIGZyb20KLSAgIHRoZSBzYW1l IGxpc3QuCi0KLSAgICA2LjYuNS4zLiBUZXJtaW5hbCBDb25uZWN0aW9uCi0KLSAgIFRoZSBDT05O RUNUIGNvbW1hbmQgbm93IGFsbG93cyBVVEYtOCBhcyBhIGxvY2FsIG9yIHJlbW90ZSB0ZXJtaW5h bAotICAgY2hhcmFjdGVyLXNldDoKLQotICBTRVQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCB7IC4u LiwgVVRGOCB9IHsgLi4uLCBVVEY4IH0KLSAgU0VUIFRFUk1JTkFMIFJFTU9URS1DSEFSQUNURVIt U0VUIHsgLi4uLCBVVEY4IH0KLSAgU0VUIFRFUk1JTkFMIExPQ0FMLUNIQVJBQ1RFUi1TRVQgeyAu Li4sIFVURjggfQotCi0gICAoUmVjYWxsIHRoYXQgS2VybWl0J3MgdGVybWluYWwgY2hhcmFjdGVy LXNldCBoYXMgdHdvICJlbmRzIiAtLSB0aGUgc2V0Ci0gICB1c2VkIG9uIHRoZSBob3N0IHRvIHdo aWNoIEtlcm1pdCBpcyBjb25uZWN0ZWQsIGFuZCB0aGUgc2V0IHVzZWQgb24gdGhlCi0gICBsb2Nh bCBrZXlib2FyZCBhbmQgc2NyZWVuLikKLQotICAgVUNTLTIgaXMgbm90IHN1cHBvcnRlZCBhcyBh IHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQgKGVpdGhlciBlbmQpIHNpbmNlCi0gICAoYSkgaXQgaXMg bm90IHVzZWQgdGhhdCB3YXkgYW55d2hlcmUgdG8gb3VyIGtub3dsZWRnZSwgYW5kIChiKSB0aGUK LSAgIHByb2JsZW1zIG9mIEVuZGlhbm5lc3MgYW5kIHRoZSBoaWdoIGxpa2VsaWhvb2Qgb2YgbG9z cyBvZgotICAgc3luY2hyb25pemF0aW9uIG1ha2UgaXQgaW1wcmFjdGljYWwuIChUZWxlY29tbXVu aWNhdGlvbnMgaXMKLSAgIGJ5dGUtb3JpZW50ZWQ7IGlmIG9uZSBieXRlLCBvciBhbnkgb2RkIG51 bWJlciBvZiBieXRlcywgaXMgbG9zdCBiZWNhdXNlCi0gICBvZiBidWZmZXIgb3ZlcnJ1bnMsIGNp cmN1aXQgcmVzZXRzLCBldGMgKG9yIGxpa2V3aXNlIGlmIGEgYnVyc3Qgb2YKLSAgIG5vaXNlIGFw cGVhcnMgdGhhdCB0YWtlcyB0aGUgZ3Vpc2Ugb2YgYW4gb2RkIG51bWJlciBvZiBieXRlcyksIHRo ZSBieXRlCi0gICBvcmRlciBvZiB0aGUgc3Vic2VxdWVudCBkYXRhIHN0cmVhbSB3aWxsIGJlIGJh Y2t3YXJkczsgdW5saWtlIFVURi04IGFuZAotICAgdHJhZGl0aW9uYWwgYnl0ZS1iYXNlZCBjaGFy YWN0ZXIgc2V0cywgVUNTLTIgaXMgbm90ICJzZWxmCi0gICBzeW5jaHJvbml6aW5nIi4pCi0KLSAg IFVURi04IGRvZXMgbm90IGhhdmUgYnl0ZS1vcmRlciBvciBzeW5jaHJvbml6YXRpb24gcHJvYmxl bXMgYW5kIGlzCi0gICBncm93aW5nIGluIHBvcHVsYXJpdHkgYXMgYSB0ZXJtaW5hbCBjaGFyYWN0 ZXIgc2V0IGFzIHdlbGwgYXMgaW4gb3RoZXIKLSAgIGFwcGxpY2F0aW9uIGFyZWFzLiBJdCBhbGxv d3MgYSBzaW5nbGUgdGVybWluYWwgc2Vzc2lvbiB0byB1c2UgbXVsdGlwbGUKLSAgIHNjcmlwdHMg KFJvbWFuLCBDeXJpbGxpYywgR3JlZWssIGV0Yykgd2l0aG91dCBJU08gMjAyMiBjaGFyYWN0ZXIt c2V0Ci0gICBzd2l0Y2hpbmcgKHdoaWNoIHRlcm1pbmFsIGVtdWxhdG9ycyBsaWtlIEtlcm1pdCA5 NSBjYW4gaGFuZGxlIGJ1dCBmZXcKLSAgIGhvc3QgYXBwbGljYXRpb25zIHVuZGVyc3RhbmQgb3Ig dXNlKSwgYW5kIG1lc2hlcyBuaWNlbHkgd2l0aCB0aGUKLSAgIFVuaWNvZGUgc2NyZWVuIGZvbnRz IHRoYXQgYXJlIGJlZ2lubmluZyB0byBhcHBlYXIuCi0KLSAgIFVURi04IHdhcyBmaXJzdCB1c2Vk IGluIFBsYW4gOSBhbmQgc29vbiB3aWxsIGJlIGF2YWlsYWJsZSBpbiBMaW51eC4gSXQKLSAgIHdp bGwgcHJvYmFibHkgc3ByZWFkIGZyb20gdGhlcmUgKFVuaWNvZGUgaW4gc29tZSBmb3JtIGlzLCBv ZiBjb3Vyc2UsCi0gICBhbHNvIHVzZWQgaW4gV2luZG93cyBOVCwgYnV0IG9ubHkgaW50ZXJuYWxs eSAtLSBub3QgZm9yIGFjY2VzcyBmcm9tCi0gICBvdXRzaWRlKS4KLQotICAgVG8gdXNlIFVURi04 IG9yIGFueSBvdGhlciBjaGFyYWN0ZXIgc2V0IHRoYXQgdXNlcyA4LWJpdCBieXRlcyBpbiB5b3Vy Ci0gICB0ZXJtaW5hbCBzZXNzaW9uLCBiZSBzdXJlIHRvIHRlbGwgQy1LZXJtaXQgdG86Ci0KLSAg U0VUIFRFUk1JTkFMIEJZVEVTSVpFIDgKLSAgU0VUIENPTU1BTkQgQllURVNJWkUgOAotICBTRVQg UEFSSVRZIE5PTkUKLQotICAgKG9yIHVzZSB0aGUgc2hvcnRjdXQgY29tbWFuZCwgRUlHSFRCSVQs IHdoaWNoIGRvZXMgYWxsIHRocmVlIGF0IG9uY2UpLgotCi0gICBJbiBhIHNldHVwIHdoZXJlIHlv dXIgbG9jYWwgS2VybWl0IHByb2dyYW0gdXNlcyBhIHNpbmdsZS1ieXRlIGNoYXJhY3RlcgotICAg c2V0IHN1Y2ggYXMgUEMgQ29kZSBQYWdlIDg1MCBhbmQgdGhlIHJlbW90ZSBob3N0IHVzZXMgVVRG LTg6Ci0KLSAgU0VUIFRFUk0gQ0hBUiBVVEY4IENQODUwCi0KLSAgIG9yOgotCi0gIFNFVCBURVJN IFJFTU9URSBDSEFSIFVURjgKLSAgU0VUIFRFUk0gTE9DQUwgQ0hBUiBDUDg1MAotCi0gICBhbGwg d29ya3MgYXMgZXhwZWN0ZWQuIFVURi04IHRleHQgb24gdGhlIHJlbW90ZSBkaXNwbGF5cyBjb3Jy ZWN0bHkgb24KLSAgIHlvdXIgc2NyZWVuLCBhbmQgd2hlbiB5b3UgdHlwZSBDUDg1MCBjaGFyYWN0 ZXJzLCB0aGV5IGFyZSB0cmFuc2xhdGVkIHRvCi0gICBVVEYtOCBzZXF1ZW5jZXMgZm9yIHRyYW5z bWlzc2lvbiwgYW5kIHRoZSBlY2hvIGZyb20gdGhlIGhvc3QgaXMKLSAgIHRyYW5zbGF0ZWQgZnJv bSBVVEYtOCBiYWNrIHRvIENQODUwLiBUZWxuZXQgbmVnb3RpYXRpb25zIGFuZAotICAgYXV0b2Rv d25sb2FkIHRha2UgcGxhY2UgYmVmb3JlIGFueSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIGFu ZCB3b3JrCi0gICBhcyBiZWZvcmUuIFRoZSBzZXNzaW9uIGxvZyAoaWYgdGV4dCBtb2RlIHdhcyBz ZWxlY3RlZCBmb3IgaXQpIGNvbnRhaW5zCi0gICBvbmx5IHRoZSBsb2NhbCB0ZXJtaW5hbCBjaGFy YWN0ZXItc2V0LiBBbmQgc28gb24uCi0KLSAgIEtlcm1pdCBtZXJlbHkgc3VwcGxpZXMgdHJhbnNs YXRpb25zIGZyb20gVVRGLTggdG8geW91ciBsb2NhbCB0ZXJtaW5hbAotICAgY2hhcmFjdGVyLXNl dCAodGhpcyBpbmNsdWRlcyB0cmVhdGluZyBVVEYtOCBMaW5lIFNlcGFyYXRvciBhbmQKLSAgIFBh cmFncmFwaCBzZXBhcmF0b3IgYXMgQ1JMRikuIEhvd2V2ZXIsIEtlcm1pdCBkb2VzIGRvZXMgbm90 LCBhdAotICAgcHJlc2VudCwgcGVyZm9ybSAiY2Fub25pY2FsaXphdGlvbiIgb2YgY29tcG9zZWQg c2VxdWVuY2VzLCBub3IgZG9lcyBpdAotICAgYXV0b21hdGljYWxseSBleGVjdXRlIGJpZGlyZWN0 aW9uYWxpdHkgYWxnb3JpdGhtcyBmb3IgZGlzcGxheSBvZgotICAgbWl4ZWQtZGlyZWN0aW9uIHRl eHQgKGUuZy4gSGVicmV3IGFuZCBFbmdsaXNoKS4gU3VjaCBwcmVzZW50YXRpb24KLSAgIGlzc3Vl cywgbGlrZSBhbGwgb3RoZXJzIGluIHRoZSB0ZXJtaW5hbC1ob3N0IHJlZ2ltZSwgYXJlIGxlZnQg dG8gdGhlCi0gICBob3N0LgotCi0gICBCeSB0aGUgd2F5LCBDLUtlcm1pdCBhbHNvIGFsbG93cyBV VEYtOCB0byBiZSB0aGUgbG9jYWwgZW5kIG9mIHRoZQotICAgdGVybWluYWwgY2hhcmFjdGVyLXNl dCwgYnV0IHNvIGZhciB0aGlzIGNvZGUgaXMgbm90IHRlc3RlZCwgc2luY2Ugd2UKLSAgIGRvbid0 IGhhdmUgYSBVVEYtOCBjb25zb2xlIG9yIHRlcm1pbmFsIHRvIHdvcmsgd2l0aC4gSG93ZXZlciwg aXQgY2FuIGJlCi0gICBzdGF0ZWQgd2l0aG91dCBkb3VidCB0aGF0IEMtS2VybWl0J3Mga2V5IG1h cHBpbmcgd2lsbCBub3Qgd29yayBmb3IKLSAgIFVURi04IHZhbHVlcywgc2luY2UgKGEpIHRoZSBr ZXkgbWFwIGlzIGluZGV4ZWQgYnkgOC1iaXQgYnl0ZSB2YWx1ZXMgYW5kCi0gICAoYikgQy1LZXJt aXQgcmVhZHMga2V5c3Ryb2tlcyBhIGJ5dGUgYXQgYSB0aW1lICh0aGVzZSBjb21tZW50cyBkbyBu b3QKLSAgIGFwcGx5IHRvIEs5NSwgd2hpY2ggaGFzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGtleWJv YXJkIGFuZCBjYW4gcmVhZAotICAgIndpZGUiIGtleWNvZGVzIGFuZCB1c2VzIHRoZW0gdG8gaW5k ZXggYSAid2lkZSIga2V5bWFwKS4KLQotICAgUmVzdHJpY3Rpb25zOiBBcyBub3RlZCwgdGhlIENP Tk5FQ1QgY29tbWFuZCBkb2VzIG5vdCBzdXBwb3J0IFVDUy0yIGFzIGEKLSAgIFJFTU9URSBURVJN SU5BTCBjaGFyYWN0ZXItc2V0LiBOZWl0aGVyIGRvZXMgaXQgc3VwcG9ydCB0aGUgSmFwYW5lc2UK LSAgIHNldHMgRVVDLUpQLCBKSVMtNywgYW5kIFNoaWZ0LUpJUy4gU3VwcG9ydCBmb3IgdGhlIEph cGFuZXNlIHNldHMgKGFuZAotICAgcG9zc2libHkgQ2hpbmVzZSBhbmQgS29yZWFuIHRvbykgbWln aHQgYmUgYWRkZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4KLSAgIFNpbmNlIHRoZSBUUkFOU01JVCBj b21tYW5kIChuZXh0IHNlY3Rpb24pIHVzZXMgdGhlIHNhbWUgUkVNT1RFIFRFUk1JTkFMCi0gICBj aGFyYWN0ZXItc2V0cyBhcyB0aGUgQ09OTkVDVCBjb21tYW5kLCBpdCBoYXMgdGhlIHNhbWUgcmVz dHJpY3Rpb25zLgotCi0gICAgNi42LjUuNC4gVGhlIFRSQU5TTUlUIENvbW1hbmQKLQotICAgQXMg ZGVzY3JpYmVkIGluIENoYXB0ZXIgMTUgb2YgWzU1NV1Vc2luZyBDLUtlcm1pdCBhbmQgWzU1Nl1T ZWN0aW9uIDQuMjEKLSAgIG9mIHRoaXMgZG9jdW1lbnQsIHRoZSBUUkFOU01JVCBjb21tYW5kIGNh biBiZSB1c2VkIHRvIHVwbG9hZCBhIGZpbGUKLSAgIHdpdGhvdXQgcHJvdG9jb2wsIG1vcmUgb3Ig bGVzcyBhcyBpZiB5b3Ugd2VyZSB0eXBpbmcgaXQgb24geW91cgotICAga2V5Ym9hcmQgd2hpbGUg Y29ubmVjdGVkIHRvIHRoZSBob3N0LiBXaGVuIFRSQU5TTUlUdGluZyBpbiB0ZXh0IG1vZGUsCi0g ICB0aGUgZmlsZSdzIGNoYXJhY3RlciBzZXQgaXMgY29udmVydGVkIHRvIHRoZSBob3N0J3MgdW5s ZXNzIHlvdSBoYXZlIFNFVAotICAgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCBUUkFOU1BBUkVOVCwg b3IgeW91IGluY2x1ZGUgdGhlIG5ldyBUUkFOU01JVAotICAgc3dpdGNoLCAvVFJBTlNQQVJFTlQu Ci0KLSAgIEJlZm9yZSBDLUtlcm1pdCA3LjAsIHRoZSBmaWxlIGNoYXJhY3Rlci1zZXQgd2FzIGFz c3VtZWQgdG8gYmUgdGhlIHNhbWUKLSAgIGFzIHRoZSBsb2NhbCBlbmQgb2YgdGhlIHRlcm1pbmFs IGNoYXJhY3Rlci1zZXQsIGFuZCB0aGUgVFJBTlNNSVQKLSAgIGNvbW1hbmQgdXNlZCB0aGUgc2Ft ZSB0cmFuc2xhdGlvbnMgYXMgdGhlIENPTk5FQ1QgY29tbWFuZCwgaWdub3JpbmcgdGhlCi0gICBm aWxlIGNoYXJhY3Rlci1zZXQuCi0KLSAgIEluIEMtS2VybWl0IDcuMCwgdGhhdCBhc3N1bXB0aW9u IChhIHBvb3Igb25lIHRvIGJlZ2luIHdpdGgpIGNhbiBubwotICAgbG9uZ2VyIGJlIG1hZGUsIHNp bmNlIFVDUy0yIGNhbiBiZSBhIGZpbGUgY2hhcmFjdGVyLXNldCBidXQgbm90IGEKLSAgIHRlcm1p bmFsIGNoYXJhY3Rlci1zZXQuIFNvIG5vdyB0aGUgZmlsZSdzIGNoYXJhY3Rlci1zZXQgaXMgZ2l2 ZW4gYnkKLSAgIHlvdXIgbW9zdCByZWNlbnQgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCBjb21tYW5k LiBUaGUgaG9zdCdzIGNoYXJhY3RlcgotICAgc2V0IGlzIHRoZSByZW1vdGUgZW5kIG9mIHlvdXIg bW9zdCByZWNlbnQgU0VUIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQKLSAgIGNvbW1hbmQ6Ci0KLSAg U0VUIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgcmVtb3RlLXNldCBbIGxvY2FsLXNldCBdCi0KLSAg IG9yOgotCi0gIFNFVCBURVJNSU5BTCBSRU1PVEUtQ0hBUkFDVEVSLVNFVCByZW1vdGUtc2V0Ci0K LSAgIFRoZSBUUkFOU01JVCBjb21tYW5kIGNvbnZlcnRzIGVhY2ggc291cmNlLWZpbGUgY2hhcmFj dGVyIGZyb20gdGhlIEZJTEUKLSAgIGNoYXJhY3Rlci1zZXQgdG8gdGhlIFJFTU9URSBURVJNSU5B TCBjaGFyYWN0ZXItc2V0LCBhbmQgdGhlbiB0cmFuc21pdHMKLSAgIHRoZSB0cmFuc2xhdGVkIGNo YXJhY3RlcnMgYWNjb3JkaW5nIHRvIHlvdXIgU0VUIFRSQU5TTUlUIHByZWZlcmVuY2VzCi0gICAo Q2hhcHRlciAxNSkuCi0KLSAgIElmIHlvdSBoYXZlIFNFVCBUUkFOU01JVCBFQ0hPIE9OLCBhbmQg dGhlIGhvc3QgaXMgZWNob2luZyB0aGUKLSAgIHRyYW5zbWl0dGVkIGNoYXJhY3RlcnMsIHRoZSBl Y2hvcyBhcmUgY29udmVydGVkIGZyb20gdGhlIHJlbW90ZQotICAgdGVybWluYWwgY2hhcmFjdGVy LXNldCB0byB0aGUgbG9jYWwgdGVybWluYWwgY2hhcmFjdGVyLXNldC4KLQotICBbIEEgcGljdHVy ZSB3b3VsZCBoZWxwLi4uIF0KLQotICAgQ29uZnVzZWQ/IExldCdzIHdvcmsgdGhyb3VnaCBhbiBl eGFtcGxlLiBTdXBwb3NlIHlvdXIgbG9jYWwgY29tcHV0ZXIgaXMKLSAgIGEgTmVYVHN0YXRpb24s IG9uIHdoaWNoIHRleHQgZmlsZXMgYXJlIGVuY29kZWQgaW4gdGhlIE5lWFQgY2hhcmFjdGVyCi0g ICBzZXQsIGFuZCB0aGF0IHRoZSByZW1vdGUgY29tcHV0ZXIgaXMgYSBEYXRhIEdlbmVyYWwgQVZp aU9OLCB3aGljaCB1c2VzCi0gICB0aGUgRGF0YSBHZW5lcmFsIEludGVybmF0aW9uYWwgY2hhcmFj dGVyIHNldC4gRnVydGhlciBzdXBwb3NlIHRoYXQgeW91Ci0gICBhcmUgbG9nZ2VkIGluIHRvIHRo ZSBOZVhUIGZyb20gYSBWVDIyMCB0ZXJtaW5hbCB3aGljaCB1c2VzIHRoZSBERUMKLSAgIE11bHRp bmF0aW9uYWwgY2hhcmFjdGVyIHNldC4KLQotICAgWW91IG5lZWQgdG8gY29udmVydCB0aGUgZmls ZSBmcm9tIE5lWFQgZW5jb2RpbmcgdG8gREcgZW5jb2RpbmcgYW5kCi0gICBjb252ZXJ0IHRoZSBl Y2hvZXMgZnJvbSBERyBlbmNvZGluZyB0byBERUMgZW5jb2RpbmcuIFNvIG9uIHRoZSBOZVhULAot ICAgdGVsbCBDLUtlcm1pdCB0bzoKLQotICBlaWdodGJpdAotICBzZXQgZmlsZSBjaGFyYWN0ZXIt c2V0IG5leHQKLSAgc2V0IHRlcm0gY2hhcmFjdGVyLXNldCBkZy1pbnRlcm5hdGlvbmFsIGRlYy1t Y3MKLSAgdHJhbnNtaXQgL3RleHQgbmV4dGRhdGEudHh0Ci0KLSAgIChUaGlzIGFzc3VtZXMgeW91 IGhhdmUgc29tZSBzb3J0IG9mIGNvbGxlY3Rpb24gcHJvY2VzcyBhbHJlYWR5IHNldCB1cAotICAg b24gdGhlIERhdGEgR2VuZXJhbCwgc3VjaCBhcyBhIHRleHQgZWRpdG9yIG9yIHRoZSB2ZW5lcmFi bGUgImNhdCA+Ci0gICBmb28iLiBUaGUgRUlHSFRCSVQgY29tbWFuZCBpcyBlcXVpdmFsZW50IHRv IFNFVCBURVJNSU5BTCBCWVRFU0laRSA4LAotICAgU0VUIENPTU1BTkQgQllURVNJWkUgOCwgU0VU IFBBUklUWSBOT05FLikKLQotICAgVG8gZnVydGhlciBjb21wbGljYXRlIG1hdHRlcnMsIHN1cHBv c2UgeW91ciBsb2NhbCB0ZXJtaW5hbCBjaGFyYWN0ZXIKLSAgIHNldCBpcyB0aGUgc2FtZSBhcyB0 aGUgcmVtb3RlIG9uZSwgc28geW91IGRvbid0IG5lZWQgdGVybWluYWwKLSAgIGNoYXJhY3Rlci1z ZXQgdHJhbnNsYXRpb24sIGJ1dCB5b3UgbmVlZCB0byBUUkFOU01JVCBhIGZpbGUgdGhhdCBpcyBp biBhCi0gICBkaWZmZXJlbnQgY2hhcmFjdGVyIHNldCBhbmQgeW91IHdhbnQgaXQgdHJhbnNsYXRl ZCB0byB0aGUgaG9zdCBzZXQuIEluCi0gICB0aGlzIGNhc2UsIHVzZSBTRVQgVEVSTSBDSEFSQUNU RVItU0VUIHRvIGFjdHVhbGx5IHNwZWNpZnkgdGhlIGNoYXJhY3RlcgotICAgc2V0IHVzZWQgb24g ZWFjaCBlbmQsIHJhdGhlciB0aGFuIHNwZWNpZnlpbmcgVFJBTlNQQVJFTlQ6Ci0KLSAgZWlnaHRi aXQKLSAgc2V0IGZpbGUgY2hhcmFjdGVyLXNldCB1Y3MyCi0gIHNldCB0ZXJtIGNoYXJhY3Rlci1z ZXQgbGF0aW4xIGxhdGluMQotICB0cmFuc21pdCAvdGV4dCB1Y3MyZGF0YS50eHQKLQotICAgVGhl IGRpc3RpbmN0aW9uIGJldHdlZW46Ci0KLSAgU0VUIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgeHh4 IHl5eQotCi0gICAod2hlcmUgeHh4IGFuZCB5eXkgYXJlIHRoZSBzYW1lIHNldCkgYW5kOgotCi0g IFNFVCBURVJNSU5BTCBDSEFSQUNURVItU0VUIFRSQU5TUEFSRU5UCi0KLSAgIGlzIG5ldyB0byBD LUtlcm1pdCA3LjAsIGJ1dCBhZmZlY3RzIG9ubHkgdGhlIFRSQU5TTUlUIGNvbW1hbmQuCi0KLSAg IFRoZSBUUkFOU01JVCBjb21tYW5kIGN1cnJlbnRseSBkb2VzIG5vdGhpbmcgc3BlY2lhbCB3aXRo IFVDUy0yL1VURi04Ci0gICBMaW5lIGFuZCBQYXJhZ3JhcGggU2VwYXJhdG9yIGNoYXJhY3RlcnM7 IG1vcmUgZXhwZXJpZW5jZSBpcyByZXF1aXJlZCB0bwotICAgZmluZCBvdXQgaG93IHRoZXNlIGJl aGF2ZSBpbiBhIGdlbnVpbmUgVW5pY29kZSB0ZXJtaW5hbC1ob3N0IHNldHRpbmcuCi0KLSAgIFJl c3RyaWN0aW9uczogQXMgbm90ZWQsIHRoZSBUUkFOU01JVCBjb21tYW5kIHRyYW5zbGF0ZXMgZnJv bSB0aGUgRklMRQotICAgY2hhcmFjdGVyLXNldCB0byB0aGUgUkVNT1RFIFRFUk1JTkFMIGNoYXJh Y3Rlci1zZXQuIFRoaXMgcnVsZXMgb3V0Ci0gICB0cmFuc2xhdGlvbnMgdG8gYW55IGNoYXJhY3Rl ciBzZXQgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgUkVNT1RFCi0gICBURVJNSU5BTCBjaGFy YWN0ZXItc2V0LCBzdWNoIGFzIFVDUy0yLCBFVUMtSlAsIEpJUy03LCBhbmQgU2hpZnQtSklTLgot Ci0gICAgNi42LjUuNS4gU3VtbWFyeSBvZiBLZXJtaXQgVW5pY29kZSBDb21tYW5kcwotCi0gICBT cGVjaWZ5aW5nIGZpbGUgY2hhcmFjdGVyLXNldCBhbmQgYnl0ZSBvcmRlcjoKLSAgICAgICAgICBT RVQgRklMRSBDSEFSQUNURVItU0VUIHsgLi4uLCBVQ1MyLCBVVEY4IH0KLSAgICAgICAgICBSRU1P VEUgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCB7IC4uLiwgVUNTMiwgVVRGOCB9IChTZWUgbmV4dAot ICAgICAgICAgIHNlY3Rpb24pCi0gICAgICAgICAgU0VUIEZJTEUgVUNTIEJPTSB7IE9OLCBPRkYg fQotICAgICAgICAgIFNFVCBGSUxFIFVDUyBCWVRFLU9SREVSIHsgQklHLUVORElBTiwgTElUVExF LUVORElBTiB9Ci0KLSAgIFNwZWNpZnlpbmcgdGhlIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQ6Ci0g ICAgICAgICAgU0VUIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgeyAuLi4sIFVDUy0yLCBVVEYtOCB9 Ci0gICAgICAgICAgUkVNT1RFIFNFVCBUUkFOU0ZFUiBDSEFSQUNURVItU0VUIHsgLi4uLCBVQ1Mt MiwgVVRGLTggfQotCi0gICBTcGVjaWZ5aW5nIHRoZSB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0Ogot ICAgICAgICAgIFNFVCBURVJNSU5BTCBDSEFSQUNURVItU0VUIHsgLi4uLCBVVEY4IH0geyAuLi4s IFVURjggfQotICAgICAgICAgIFNFVCBURVJNSU5BTCBSRU1PVEUtQ0hBUkFDVEVSLVNFVCB7IC4u LiwgVVRGOCB9Ci0gICAgICAgICAgU0VUIFRFUk1JTkFMIExPQ0FMLUNIQVJBQ1RFUi1TRVQgeyAu Li4sIFVURjggfQotCi0gICBEaXNwbGF5aW5nIHNldHRpbmdzOgotICAgICAgICAgIFNIT1cgRklM RQotICAgICAgICAgIFNIT1cgVFJBTlNGRVIKLSAgICAgICAgICBTSE9XIFRFUk1JTkFMCi0gICAg ICAgICAgU0hPVyBDSEFSQUNURVItU0VUUwotCi0gICBDb21tYW5kcyB0aGF0IHVzZSB0aGVzZSBz ZXR0aW5ncyBpbmNsdWRlOgotICAgICAgICAgIFNFTkQsIFJFQ0VJVkUsIEdFVCwgZXRjLgotICAg ICAgICAgIENPTk5FQ1QKLSAgICAgICAgICBUUkFOU01JVAotICAgICAgICAgIExPRyBTRVNTSU9O Ci0KLSAgIENvbnZlcnRpbmcgZmlsZXM6Ci0gICAgICAgICAgVFJBTlNMQVRFIGluZmlsZSB7IC4u LiwgVUNTLTIsIFVURi04IH0geyAuLi4sIFVDUy0yLCBVVEYtOCB9Ci0gICAgICAgICAgb3V0Zmls ZQotICAgICAgICAgIENPUFkgL1NXQVAtQllURVMgaW5maWxlIG91dGZpbGUKLQotICA2LjcuIENs aWVudC9TZXJ2ZXIgQ2hhcmFjdGVyLVNldCBTd2l0Y2hpbmcKLQotICAgQSBzaW1wbGUgbWVjaGFu aXNtIGhhcyBiZWVuIGFkZGVkIHRvIGFsbG93IHRoZSBjbGllbnQgdG8gY2hhbmdlIHRoZQotICAg c2VydmVyJ3MgRklMRSBDSEFSQUNURVItU0VUOgotCi0gICBSRU1PVEUgU0VUIEZJTEUgQ0hBUkFD VEVSLVNFVCBuYW1lCi0gICAgICAgICAgVGhlIGNsaWVudCBhc2tzIHRoZSBzZXJ2ZXIgdG8gY2hh bmdlIGl0cyBmaWxlIGNoYXJhY3Rlci1zZXQgdG8KLSAgICAgICAgICB0aGUgb25lIGdpdmVuLiBU aGUgbmFtZSBtdXN0IG1hdGNoIG9uZSBvZiB0aGUgc2VydmVyJ3MgZmlsZQotICAgICAgICAgIGNo YXJhY3Rlci1zZXQgbmFtZXMuIEZvciBjb252ZW5pZW5jZSwgQy1LZXJtaXQgdXNlcyBpdHMgb3du IGZpbGUKLSAgICAgICAgICBjaGFyYWN0ZXItc2V0IGtleXdvcmQgbGlzdCBmb3IgcGFyc2luZyB0 aGlzIGNvbW1hbmQgc28geW91IGNhbgotICAgICAgICAgIHVzZSA/IGZvciBoZWxwIGFuZCBUYWIg b3IgRXNjIGZvciBjb21wbGV0aW9uLiBIb3dldmVyLCBzaW5jZSB0aGUKLSAgICAgICAgICBzZXJ2 ZXIgbWlnaHQgaGF2ZSBhIGRpZmZlcmVudCByZXBlcnRvaXJlIChvciBldmVuIHVzZSBkaWZmZXJl bnQKLSAgICAgICAgICBuYW1lcyBmb3IgdGhlIHNhbWUgc2V0cyksIEMtS2VybWl0IGFjY2VwdHMg YW55IHN0cmluZyB5b3Ugc3VwcGx5Ci0gICAgICAgICAgYW5kIHNlbmRzIGl0IHRvIHRoZSBzZXJ2 ZXIuIFRoZSBzZXJ2ZXIsIGlmIGl0IHN1cHBvcnRzIHRoaXMKLSAgICAgICAgICBjb21tYW5kIChD LUtlcm1pdCA3LjAgYW5kIEs5NSAxLjEuMTkgZG8pLCBzZXRzIGl0cyBmaWxlCi0gICAgICAgICAg Y2hhcmFjdGVyLXNldCBhcyByZXF1ZXN0ZWQsIGFuZCBhbHNvIGRpc2FibGVzIGF1dG9tYXRpYwot ICAgICAgICAgIGNoYXJhY3Rlci1zZXQgc3dpdGNoaW5nIChbNTU3XVNlY3Rpb24gNi41KS4gSWYg dGhlIHNlcnZlciBkb2VzCi0gICAgICAgICAgbm90IHN1cHBvcnQgdGhpcyBjb21tYW5kIG9yIGlm IGl0IGRvZXMgbm90IHN1cHBvcnQgdGhlIGdpdmVuCi0gICAgICAgICAgY2hhcmFjdGVyIHNldCwg dGhlIFJFTU9URSBTRVQgRklMRSBDSEFSQUNURVItU0VUIGNvbW1hbmQgZmFpbHMuCi0KLSAgIEhl cmUncyBhbiBleGFtcGxlIHRoYXQgc2VuZHMgYSBKYXBhbmVzZSB0ZXh0IGZpbGUgZW5jb2RlZCBp biBTaGlmdC1KSVMKLSAgIHRvIGEgc2VydmVyIHVzaW5nIGV2ZXJ5IGNvbWJpbmF0aW9uIG9mIEtl cm1pdCdzIEphcGFuZXNlLWNhcGFibGUgZmlsZQotICAgYW5kIHRyYW5zZmVyIGNoYXJhY3RlciBz ZXRzOgotCi0gIGRjbCBcJnhbXSA9IGV1YyB1Y3MyIHV0ZjggICAgICAgICAgICAgOyB0cmFuc2Zl ciBjaGFyYWN0ZXItc2V0cwotICBkY2wgXCZ5W10gPSBldSB1YyB1dCAgICAgICAgICAgICAgICAg IDsgMi1sZXR0ZXIgYWJicmV2aWF0aW9ucyBmb3IgdGhlbQotICBkY2wgXCZmW10gPSBzaGlmdCBl dWMgamlzNyB1Y3MyIHV0ZjggIDsgZmlsZSBjaGFyYWN0ZXItc2V0cwotICBkY2wgXCZnW10gPSBz aiBldSBqNyB1YyB1dCAgICAgICAgICAgIDsgMi1sZXR0ZXIgYWJicmV2aWF0aW9ucwotCi0gIHNl dCBmaWxlIGNoYXIgc2hpZnQtamlzICAgICAgICAgICAgICAgOyBsb2NhbCBmaWxlIGNoYXJhY3Rl ci1zZXQgaXMgU2hpZnQtSklTCi0gIGZvciBcJWkgMSBcZmRpbSgmeCkgMSB7ICAgICAgICAgICAg ICAgOyBmb3IgZWFjaCB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0Li4uCi0gICAgICBzZXQgeGZlciBj aGFyIFwmeFtcJWldICAgICAgICAgICAgOyBzZXQgaXQKLSAgICAgIGZvciBcJWogMSBcZmRpbSgm ZikgMSB7ICAgICAgICAgICA7IGZvciBlYWNoIHJlbW90ZSBmaWxlIGNoYXJhY3Rlci1zZXQuLi4K LSAgICAgICAgICByZW1vdGUgc2V0IGZpbGUgY2hhciBcJmZbXCVqXSA7IHNldCBpdAotICAgICAg ICAgIGlmIGZhaWwgZXhpdCAxIFNFUlZFUiBSRUpFQ1RFRCBDSEFSU0VUCi0gICAgICAgICAgc2Vu ZCAvdGV4dCBtZWliby1zai5odG1sIG1laWJvLXNqLVwmeVtcJWldLVwmZ1tcJWpdLnR4dCA7IHNl bmQgdGhlIGZpbAotZQotICAgICAgICAgIGlmIGZhaWwgZXhpdCAxIFRSQU5TRkVSIEZBSUxFRAot ICAgICAgfQotICB9Ci0KLSAgIFRoZSBLZXJtaXQtMzcwIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0 IFJFTU9URSBTRVQgRklMRSBDSEFSQUNURVItU0VULAotICAgYnV0IHNpbmNlIGl0IHN1cHBvcnRz IFJFTU9URSBLRVJNSVQgY29tbWFuZHMsIHlvdSBjYW4gZ2V0IHRoZSBzYW1lCi0gICBlZmZlY3Qg d2l0aCBSRU1PVEUgS0VSTUlUIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgbmFtZS4KLQotICA3LiBT Q1JJUFQgUFJPR1JBTU1JTkcKLQotICAgKEFsc28gc2VlIFs1NThdU2VjdGlvbiAyLjgsIFNjcmlw dGluZyBMb2NhbCBQcm9ncmFtcy4pCi0KLSAgNy4wLiBCdWcgRml4ZXMKLQotICAgVGhlIGZvbGxv d2luZyBzY3JpcHQgcHJvZ3JhbW1pbmcgYnVncyB3ZXJlIGZpeGVkIGluIEMtS2VybWl0IDcuMDoK LQotICAgICAqIElGIEVYSVNUIGFuZCBJRiBESVJFQ1RPUlkgd2VyZSBmaXhlZCB0byBwcm9wZXJs eSBzdHJpcCBicmFjZXMgZnJvbQotICAgICAgIGFyb3VuZCB0aGVpciBhcmd1bWVudHMsIHNvICJp ZiBkaXJlY3Rvcnkge0M6XFByb2dyYW0gRmlsZXN9IiwgZXRjLAotICAgICAgIHdvdWxkIHdvcmsg YXMgZXhwZWN0ZWQuIEhvd2V2ZXIsIHRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgZmlsZSBvcgotICAg ICAgIGRpcmVjdG9yeSBuYW1lIGlzIGFjdHVhbGx5IGVuY2xvc2VkIGluIGJyYWNlcywgdGhlIGJy YWNlcyBtdXN0IGJlCi0gICAgICAgZG91YmxlZC4KLSAgICAgKiBUaGUgUkVBRCBjb21tYW5kIGRp ZCBub3QgZmFpbCBpZiB0aGUgUkVBRCBmaWxlIHdhc24ndCBvcGVuOyBub3cgaXQKLSAgICAgICBk b2VzLgotICAgICAqIFRoZSBSRUFEIGNvbW1hbmQgcmVmdXNlZCB0byByZWFkIHRoZSBsYXN0IG9y IG9ubHkgbGluZSBvZiBhIGZpbGUgaWYKLSAgICAgICBpdCBkaWQgbm90IGVuZCB3aXRoIGEgcHJv cGVyIGxpbmUgdGVybWluYXRvcjsgbm93IGl0IGRvZXMuCi0gICAgICogVGhlIEVORCBjb21tYW5k LCB3aGVuIGdpdmVuIGZyb20gd2l0aGluIGEgU1dJVENIIHN0YXRlbWVudCwgZGlkIG5vdAotICAg ICAgIGV4aXQgZnJvbSB0aGUgY3VycmVudCBtYWNybyBvciBjb21tYW5kIGZpbGU7IGluc3RlYWQg aXQganVzdAotICAgICAgIHRlcm1pbmF0ZWQgdGhlIFNXSVRDSC4KLQotICA3LjEuIFRoZSBJTlBV VCBDb21tYW5kCi0KLSAgIDcuMS4xLiBJTlBVVCBUaW1lb3V0cwotCi0gICBUaGUgZGVzY3JpcHRp b24gb2YgdGhlIElOUFVUIGNvbW1hbmQgb24gcGFnZSA0MjIgZmFpbHMgdG8gbWVudGlvbiB0aGUK LSAgIGZvbGxvd2luZyB0d28gcG9pbnRzIGFib3V0IHRoZSB0aW1lb3V0ICh3aGljaCBhcHBseSB0 byBDLUtlcm1pdCA2LjAgYW5kCi0gICBsYXRlcik6Ci0KLSAgICAxLiAiSU5QVVQgLTEgdGV4dCIg KG9yICJJTlBVVCBcJXggdGV4dCIsIHdoZXJlIFwleCBpcyBhbnkgdmFyaWFibGUKLSAgICAgICB3 aG9zZSB2YWx1ZSBpcyAtMSBvciBsZXNzKSBtZWFucyAid2FpdCBmb3JldmVyIi4gVGhpcyBmb3Jt IG9mIHRoZQotICAgICAgIElOUFVUIGNvbW1hbmQgZmFpbHMgb25seSBpZiBpdCBpcyBpbnRlcnJ1 cHRlZCwgc2luY2UgaXQgd2lsbCBuZXZlcgotICAgICAgIHRpbWUgb3V0LgotICAgIDIuIElOUFVU IDAgcGVyZm9ybXMgYSBub25ibG9ja2luZyByZWFkIG9mIG1hdGVyaWFsIHRoYXQgaGFzIGFscmVh ZHkKLSAgICAgICBhcnJpdmVkIGJ1dCBoYXMgbm90IHlldCBiZWVuIHJlYWQsIGFuZCBzdWNjZWVk cyBpbW1lZGlhdGVseSBpZiB0aGUKLSAgICAgICB0YXJnZXQgc3RyaW5nIGlzIGZvdW5kLCBvciBm YWlscyBpbW1lZGlhdGVseSBpZiBpdCBpcyBub3QgZm91bmQuCi0KLSAgIFRoZSBzYW1lIHBvaW50 cyBhcHBseSB0byBNSU5QVVQuIFJFSU5QVVQgaWdub3JlcyBpdHMgdGltZW91dCBwYXJhbWV0ZXIu Ci0KLSAgICA3LjEuMi4gTmV3IElOUFVUIENvbnRyb2xzCi0KLSAgIFRoZSBmb2xsb3dpbmcgbmV3 IElOUFVUIGNvbnRyb2xzIHdlcmUgYWRkZWQgaW4gdmVyc2lvbiA3LjA6Ci0KLSAgIFNFVCBJTlBV VCBBVVRPRE9XTkxPQUQgeyBPTiwgT0ZGIH0KLSAgICAgICAgICBFeHBsYWluZWQgaW4gWzU1OV1T ZWN0aW9uIDcuNy4KLQotICAgU0VUIElOUFVUIENBTkNFTExBVElPTiB7IE9OLCBPRkYgfQotICAg ICAgICAgIFRoaXMgZ292ZXJucyB3aGV0aGVyIGFuIElOUFVUIGNvbW1hbmQgY2FuIGJlIGNhbmNl bGVkIGJ5Ci0gICAgICAgICAgInByZXNzaW5nIGFueSBrZXkiIG9uIHRoZSBrZXlib2FyZC4gTm9y bWFsbHkgaXQgY2FuIGJlLCBpbiB3aGljaAotICAgICAgICAgIGNhc2UgdGhlIElOUFVUIGNvbW1h bmQgZmFpbHMgaW1tZWRpYXRlbHkgYW5kIFx2KGluc3RhdHVzKSBpcyBzZXQKLSAgICAgICAgICB0 byAyLCBpbmRpY2F0aW5nIGludGVycnVwdGlvbi4gU0VUIElOUFVUIENBTkNFTExBVElPTiBPRkYK LSAgICAgICAgICBkaXNhYmxlcyBrZXlib2FyZCBjYW5jZWxsYXRpb25zOyB0aHVzIGlmIHRoZSBz ZWFyY2ggdGV4dCBpcyBub3QKLSAgICAgICAgICBlbmNvdW50ZXJlZCwgdGhlIElOUFVUIGNvbW1h bmQgd2lsbCBydW4gZm9yIGl0cyBlbnRpcmUgdGltZW91dAotICAgICAgICAgIGludGVydmFsLiBT RVQgSU5QVVQgQ0FOQ0VMTEFUSU9OIE9GRiBkb2VzIG5vdCBkaXNhYmxlCi0gICAgICAgICAgaW50 ZXJydXB0aW9uIGJ5IEN0cmwtQywgaG93ZXZlcjsgZXZlcnkgY29tbWFuZCBuZWVkcyBhbgotICAg ICAgICAgIGVtZXJnZW5jeSBleGl0LiAoSWYgeW91IHJlYWxseSB3YW50IHRvIGRpc2FibGUgaW50 ZXJydXB0aW9uIGJ5Ci0gICAgICAgICAgQ3RybC1DLCB1c2UgU0VUIENPTU1BTkQgSU5URVJSVVBU SU9OIE9GRi4pCi0KLSAgIEFsc28gc2VlIFs1NjBdU2VjdGlvbiA3LjIgZm9yIGFueSBuZXcgdmFy aWFibGVzIHJlbGF0ZWQgdG8gSU5QVVQuCi0KLSAgICA3LjEuMy4gSU5QVVQgd2l0aCBQYXR0ZXJu IE1hdGNoaW5nCi0KLSAgIEMtS2VybWl0IDcuMCBhbGxvd3MgSU5QVVQsIE1JTlBVVCwgYW5kIFJF SU5QVVQgdGFyZ2V0cyB0byBiZSBhIHBhdHRlcm4KLSAgIChleHBsYWluZWQgaW4gWzU2MV1TZWN0 aW9ucyAxLjE5IGFuZCBbNTYyXTQuOSkuIFRoaXMgc29sdmVzIGEKLSAgIGxvbmctc3RhbmRpbmcg cHJvYmxlbSBpbGx1c3RyYXRlZCBieSB0aGUgZm9sbG93aW5nIHNjZW5hcmlvOiBhIGNlcnRhaW4K LSAgIGNvbXBhbnkgaGFzIGEgYmFuayBvZiBUQ1AvSVAgbW9kZW0gc2VydmVycywgd2l0aCBob3N0 bmFtZXMgc2VydmVyMSwKLSAgIHNlcnZlcjIsIHNlcnZlcjMsIGFuZCBzbyBvbi4gRWFjaCBzZXJ2 ZXIncyBwcm9tcHQgaXMgaXRzIG5hbWUsIGZvbGxvd2VkCi0gICBieSBhIGNvbG9uICg6KSwgZm9y IGV4YW1wbGUgIlNlcnZlcjcyOiIuIFdpdGhvdXQgSU5QVVQgcGF0dGVybnMsIGl0Ci0gICB3b3Vs ZCBiZSByYXRoZXIgZGlmZmljdWx0IHRvIHdhaXQgZm9yIHRoZSBwcm9tcHQuIFRoZSBicnV0ZSBm b3JjZQotICAgYXBwcm9hY2g6Ci0KLSAgbWlucHV0IDIwIFNlcnZlcjE6IFNlcnZlcjI6IFNlcnZl cjM6IC4uLiAoZW51bWVyYXRpbmcgZWFjaCBvbmUpCi0KLSAgIGlzIHN1YmplY3QgdG8gZmFpbHVy ZSB3aGVuZXZlciBhIG5ldyBzZXJ2ZXIgaXMgYWRkZWQuIEEgbW9yZSBzdWJ0bGUKLSAgIGFwcHJv YWNoOgotCi0gIGlucHV0IDIwIFNlcnZlcgotICBpZiBmYWlsIC4uLgotICBpbnB1dCAyIDoKLQot ICAgaXMgbGlhYmxlIHRvIGZhbHNlIHBvc2l0aXZlcywgZS5nLiAiV2VsY29tZSB0byB0aGUgWFla IENvcnAgTW9kZW0KLSAgIFNlcnZlci4gUGxlYXNlIHJlYWQgdGhlIGZvbGxvd2luZyBtZXNzYWdl OiIuLi4KLQotICAgV2l0aCBwYXR0ZXJucywgeW91IGNhbiBtYXRjaCB0aGUgcHJvbXB0IHdpdGgg IlNlcnZlcio6IiAod2hpY2ggZG9lc24ndAotICAgc29sdmUgdGhlICJmYWxzZSBwb3NpdGl2ZXMi IHByb2JsZW0sIGJ1dCBjZXJ0YWlubHkgaXMgbW9yZSBjb21wYWN0IHRoYW4KLSAgIHRoZSBicnV0 ZSBmb3JjZSBtZXRob2QpLCBvciB3aXRoIG1vcmUgc3BlY2lmaWMgcGF0dGVybnMgc3VjaCBhcwot ICAgIlNlcnZlclsxLTldOiIgYW5kICJTZXJ2ZXJbMS05XVswLTldOiIsIG9yIGVxdWl2YWxlbnRs eToKLQotICBTZXJ2ZXJ7WzEtOV0sWzEtOV1bMC05XX06Ci0KLSAgIG1lYW5pbmcgdGhlIHdvcmQg IlNlcnZlciIgZm9sbG93ZWQgYnkgYSBzaW5nbGUgZGlnaXQgKDEtOSkgb3IgYnkgdHdvCi0gICBk aWdpdHMgcmVwcmVzZW50aW5nIGEgbnVtYmVyIGZyb20gMSB0byA5OSwgZm9sbG93ZWQgYnkgYSBj b2xvbi4KLQotICAgSU5QVVQgcGF0dGVybiBtYXRjaGluZyBoYXMgYmVlbiBhZGRlZCBpbiBhIHdh eSB0aGF0IGRvZXMgbm90IGludGVyZmVyZQotICAgd2l0aCBleGlzdGluZyBzY3JpcHRzLiBObyBu ZXcgY29tbWFuZHMgb3Igc3dpdGNoZXMgYXJlIHVzZWQuIFRoZSBzaW1wbGUKLSAgIHJ1bGUgaXM6 IGlmIGFuIElOUFVUIHNlYXJjaCB0YXJnZXQgaXMgdGhlIGFyZ3VtZW50IG9mIHRoZSAobmV3KQot ICAgXGZwYXR0ZXJuKCkgZnVuY3Rpb24sIGl0IGlzIGEgcGF0dGVybi4gT3RoZXJ3aXNlIGl0IGlz IHRha2VuIGxpdGVyYWxseSwKLSAgIGFzIGJlZm9yZS4gRm9yIGV4YW1wbGU6Ci0KLSAgaW5wdXQg NSBhKmIKLQotICAgc2VhcmNoZXMgZm9yIGFuICdhJyBmb2xsb3dlZCBieSBhbiBhc3RlcmlzayAo JyonKSwgZm9sbG93ZWQgYnkgYSAnYicuCi0gICBCdXQ6Ci0KLSAgaW5wdXQgNSBcZnBhdHRlcm4o YSpiKQotCi0gICBzZWFyY2hlcyBmb3IgYW4gJ2EnIGZvbGxvd2VkIGJ5IGFueXRoaW5nIGF0IGFs bCB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZQotICAgZmlyc3QgJ2InLiBUaGlzIG1lYW5zIHRoYXQg YW55IHNlYXJjaCB0YXJnZXQgdG8gSU5QVVQsIE1JTlBVVCwgb3IKLSAgIFJFSU5QVVQgY2FuIGJl IGEgcGF0dGVybiBvciBhIGxpdGVyYWwgc3RyaW5nLCBhbmQgaW4gcGFydGljdWxhciB0aGF0Ci0g ICBNSU5QVVQgY2FuIGFjY29tbW9kYXRlIGFueSBtaXh0dXJlIG9mIHBhdHRlcm5zIGFuZCBsaXRl cmFsIHN0cmluZ3MuCi0KLSAgIEluIHNlbGVjdGluZyBwYXR0ZXJucywgbm90ZSB0aGF0OgotCi0g ICAgICogQSBsZWFkaW5nICcqJyBpcyBhbHdheXMgaW1wbGllZCBzbyB0aGVyZSBpcyBubyBuZWVk IHRvIGluY2x1ZGUgb25lLgotICAgICAqIEEgdHJhaWxpbmcgJyonIGlzIG1lYW5pbmdsZXNzIGFu ZCBpZ25vcmVkLgotICAgICAqIEEgJyonIGJ5IGl0c2VsZiBtYXRjaGVzIHRoZSBmaXJzdCBjaGFy YWN0ZXIgdGhhdCBhcnJpdmVzLgotCi0gICBBIHN5bnRheCBub3RlOiBJZiB5b3VyIHBhdHRlcm4g aXMgYSBzZWxlY3Rpb24gbGlzdCwgbWVhbmluZyBhIGxpc3Qgb2YKLSAgIGFsdGVybmF0aXZlcyBz ZXBhcmF0ZWQgYnkgY29tbWFzIGFuZCBlbmNsb3NlZCBpbiBicmFjZXMsIHRoZW4gdGhlIG91dGVy Ci0gICBicmFjZXMgd2lsbCBiZSBzdHJpcHBlZCBieSB2YXJpb3VzIGxldmVscyBvZiBwYXJzZXJz LCBzbyB5b3UgbXVzdAotICAgaW5jbHVkZSB0aHJlZSBvZiBlYWNoOgotCi0gIGlucHV0IDEwIFxm cGF0dGVybih7e3thYmMsbW5vLHh5en19fSkKLQotICAgTm90ZSB0aGF0IHRoaXMgaXMgZXF1aXZh bGVudCB0bzoKLQotICBtaW5wdXQgMTAgYWJjIG1ubyB4eXoKLQotICAgZXhjZXB0IGZvciB0aGUg c2V0dGluZyBvZiB0aGUgXHYobWlucHV0KSB2YXJpYWJsZS4KLQotICAgQW5kIGEgY2F1dGlvbjog SU5QVVQgcGF0dGVybiBtYXRjaGluZyBoYXMgYSBsaW1pdGF0aW9uIHRoYXQgeW91Ci0gICBwcm9i YWJseSBuZXZlciBub3RpY2VkIHdpdGggbGl0ZXJhbC1zdHJpbmcgbWF0Y2hpbmcsIG5hbWVseSB0 aGF0IHRoZXJlCi0gICBpcyBhIGxpbWl0IG9uIHRoZSBzaXplIG9mIHRoZSBtYXRjaC4gRm9yIGV4 YW1wbGUsIGlmIHRoZSBwYXR0ZXJuIGlzCi0gICAiYSpiIiwgdGhlIG1hdGNoIHdpbGwgc3VjY2Vl ZCBpZiB0aGUgJ2EnIGFuZCAnYicgYXJlIG5vdCBzZXBhcmF0ZWQgYnkKLSAgIG1vcmUgdGhhbiAo c2F5KSA4SyBieXRlcywgYnV0IHdpbGwgZmFpbCBpZiB0aGV5IGFyZSBmYXJ0aGVyIGFwYXJ0IHRo YW4KLSAgIHRoYXQuIEluIHN1Y2ggY2FzZXMsIGl0IGJldHRlciB0byB1c2UgdHdvIElOUFVUcyAo ZS5nLiAiaW5wdXQgMTAgYSIgYW5kCi0gICB0aGVuICJpbnB1dCAxMDAgYiIpLgotCi0gICAgNy4x LjQuIFRoZSBJTlBVVCBNYXRjaCBSZXN1bHQKLQotICAgVGhlIHJlc3VsdCBvZiBhbnkgSU5QVVQs IE1JTlBVVCwgb3IgUkVJTlBVVCBjb21tYW5kLCBubyBtYXR0ZXIgd2hldGhlcgotICAgdGhlIHNl YXJjaCB0YXJnZXRzIGFyZSBwYXR0ZXJucyBvciBsaXRlcmFsIHN0cmluZ3MsIGlzIGF2YWlsYWJs ZSBpbiB0aGUKLSAgIG5ldyBcdihpbm1hdGNoKSB2YXJpYWJsZS4gRm9yIGV4YW1wbGU6Ci0KLSAg bWlucHV0IDEwIGNhdCBcZnBhdHRlcm4oW2RoXW9nKQotICBpZiBzdWNjZXNzIGVjaG8gTUlOUFVU IG1hdGNoZWQgIlx2KGlubWF0Y2gpIgotCi0gICBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHdo ZW4gYSBwYXR0ZXJuIHdhcyBtYXRjaGVkLCBzaW5jZSBpdCBtYWtlcwotICAgdGhlIHN0cmluZyB0 aGF0IG1hdGNoZWQgdGhlIHBhdHRlcm4gYXZhaWxhYmxlIHRvIEtlcm1pdDsgdGhlcmUgd291bGQg YmUKLSAgIG5vIHdheSB0byBnZXQgaXQgb3RoZXJ3aXNlLgotCi0gICBBZnRlciBhbiBJTlBVVCBj b21tYW5kLCB5b3UgY2FuIHZpZXcgYWxsIHRoZSBJTlBVVC1yZWxhdGVkIHZhcmlhYmxlcyBieQot ICAgdHlwaW5nICJzaG93IHZhcmlhYmxlcyBpbiIgKGFiYnJldmlhdGUgYXMgInNobyB2YXIgaW4i KSwgd2hpY2ggc2hvd3MKLSAgIHRoZSB2YWx1ZXMgb2YgYWxsIGJ1aWx0LWluIHZhcmlhYmxlcyB3 aG9zZSBuYW1lcyBzdGFydCB3aXRoICJpbiIuCi0KLSAgNy4yLiBOZXcgb3IgSW1wcm92ZWQgQnVp bHQtSW4gVmFyaWFibGVzCi0KLSAgIFx2KGJsb2NrY2hlY2spCi0gICAgICAgICAgQ3VycmVudCBC TE9DSy1DSEVDSyBzZXR0aW5nLCAxLCAyLCAzLCBvciA0LiA0IGlzIHRoZSBjb2RlIGZvcgotICAg ICAgICAgIEJMQU5LLUZSRUUtMi4KLQotICAgXHYoYnl0ZW9yZGVyKQotICAgICAgICAgIFRoZSBt YWNoaW5lJ3MgYnl0ZSBvcmRlcjogMCA9IEJpZyBFbmRpYW4sIDEgPSBMaXR0bGUgRW5kaWFuLgot Ci0gICBcdihjbWRidWZzaXplKQotICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGNvbW1hbmQg YnVmZmVyLCB3aGljaCBpcyB0aGUgbWF4aW11bSBzaXplIGZvcgotICAgICAgICAgIGEgbWFjcm8s IGEgY29tbWFuZCwgYSB2YXJpYWJsZSwgb3IgYW55dGhpbmcgZWxzZSBpbiBDLUtlcm1pdCdzCi0g ICAgICAgICAgc2NyaXB0IGxhbmd1YWdlLgotCi0gICBcdihjdHR5KQotICAgICAgICAgIFRoZSBk ZXZpY2UgbmFtZSBvZiBDLUtlcm1pdCdzIGNvbnRyb2xsaW5nIChsb2dpbikgdGVybWluYWwuCi0K LSAgIFx2KGZpbGVuYW1lKQotICAgICAgICAgIERlc2NyaWJlZCBpbiBbNTYzXVNlY3Rpb25zIDQu MSBhbmQgWzU2NF00LjIuCi0KLSAgIFx2KGZpbGVudW1iZXIpCi0gICAgICAgICAgRGVzY3JpYmVk IGluIFs1NjVdU2VjdGlvbnMgNC4xIGFuZCBbNTY2XTQuMi4KLQotICAgXHYoZmlsZXNwZWMpCi0g ICAgICAgICAgQXMgb2YgQy1LZXJtaXQgNy4wLCBjb250YWlucyBmdWxseSBxdWFsaWZpZWQgZmls ZW5hbWVzIHJhdGhlcgotICAgICAgICAgIHRoYW4gKHVzdWFsbHkpIHJlbGF0aXZlIG9uZXMuCi0K LSAgIFx2KHJldHVybikKLSAgICAgICAgICBOb3cgaG9sZHMgdGhlIEVORCBuIHZhbHVlIG9mIHRo ZSBtYWNybyB0aGF0IG1vc3QgcmVjZW50bHkKLSAgICAgICAgICByZXR1cm5lZCwgaW4gY2FzZSBF TkQgd2FzIHVzZWQgcmF0aGVyIHRoYW4gUkVUVVJOLgotCi0gICBcdihlZGl0b3IpCi0gICAgICAg ICAgUGF0aG5hbWUgb2YgcHJlZmVycmVkIHRleHQgZWRpdG9yCi0KLSAgIFx2KGVkaXRvcHRzKQot ICAgICAgICAgIENvbW1hbmQtbGluZSBvcHRpb25zIGZvciBlZGl0b3IKLQotICAgXHYoZWRpdGZp bGUpCi0gICAgICAgICAgRmlsZSBtb3N0IHJlY2VudGx5IGVkaXRlZAotCi0gICBcdihicm93c2Vy KQotICAgICAgICAgIFBhdGhuYW1lIG9mIHByZWZlcnJlZCBXZWIgYnJvd3NlcgotCi0gICBcdihi cm93c29wdHMpCi0gICAgICAgICAgQ29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIFdlYiBicm93c2Vy Ci0KLSAgIFx2KGJyb3dzdXJsKQotICAgICAgICAgIFVSTCBtb3N0IHJlY2VudGx5IGdpdmVuIHRv IFdlYiBicm93c2VyCi0KLSAgIFx2KGRpYWx0eXBlKQotICAgICAgICAgIFR5cGUgb2YgY2FsbCBt b3N0IHJlY2VudGx5IHBsYWNlZCAoc2VlIFs1NjddU2VjdGlvbiAyLjEuMTEpLgotCi0gICBcdihr YmNoYXIpCi0gICAgICAgICAgVGhlIGNoYXJhY3RlciwgaWYgYW55LCB0aGF0IHdhcyB0eXBlZCBh dCB0aGUga2V5Ym9hcmQgdG8gdG8KLSAgICAgICAgICBpbnRlcnJ1cHQgdGhlIG1vc3QgcmVjZW50 IFBBVVNFLCBTTEVFUCwgV0FJVCwgTVNMRUVQLCBvciBJTlBVVAotICAgICAgICAgIGNvbW1hbmQ7 IGVtcHR5IGlmIHRoZSBtb3N0IHJlY2VudCBzdWNoIGNvbW1hbmQgd2FzIG5vdAotICAgICAgICAg IGludGVycnVwdGVkIGZyb20gdGhlIGtleWJvYXJkLgotCi0gICBcdihsb2NrZGlyKQotICAgICAg ICAgIFVOSVggb25seSAtIFRoZSBuYW1lIG9mIHRoZSBVVUNQIGxvY2tmaWxlIGRpcmVjdG9yeSwg aWYga25vd24sCi0gICAgICAgICAgb3RoZXJ3aXNlICIodW5rbm93bikiLgotCi0gICBcdihsb2Nr cGlkKQotICAgICAgICAgIFVOSVggb25seSAtIFBJRCBvZiBwcm9jZXNzIHRoYXQgb3ducyB0aGUg Y29tbXVuaWNhdGlvbiBwb3J0IHRoYXQKLSAgICAgICAgICB5b3UgdHJpZWQgdG8gb3BlbiB3aXRo IGEgU0VUIExJTkUgY29tbWFuZCB0aGF0IGZhaWxlZCBiZWNhdXNlCi0gICAgICAgICAgdGhlIHBv cnQgd2FzIGluIHVzZSwgb3RoZXJ3aXNlIGVtcHR5LiBUaGlzIHZhcmlhYmxlIGlzIHNldCB3aXRo Ci0gICAgICAgICAgZXZlcnkgU0VUIExJTkUgY29tbWFuZC4KLQotICAgXHYoY3hfdGltZSkKLSAg ICAgICAgICBJZiBubyBjb25uZWN0aW9uIChTRVQgSE9TVCwgU0VUIExJTkUsIERJQUwsIFRFTE5F VCwgZXRjKSBpcwotICAgICAgICAgIGFjdGl2ZSwgdGhpcyBpcyAwLiBJZiBhIGNvbm5lY3Rpb24g aXMgYWN0aXZlLCB0aGlzIGlzIHRoZSBudW1iZXIKLSAgICAgICAgICBvZiBzZWNvbmRzIHNpbmNl IHRoZSBjb25uZWN0aW9uIHdhcyBtYWRlLgotCi0gICBcdihod3Bhcml0eSkKLSAgICAgICAgICBJ ZiBoYXJkd2FyZSBwYXJpdHkgaXMgaW4gZWZmZWN0LCB0aGlzIHZhcmlhYmxlIGdpdmVzIGl0cyB2 YWx1ZSwKLSAgICAgICAgICBzdWNoIGFzICJldmVuIiBvciAib2RkIiAoaW4gd2hpY2ggY2FzZSwg dGhlIFx2KHBhcml0eSkgdmFyaWFibGUKLSAgICAgICAgICB3aWxsIGJlICJub25lIikuIE90aGVy d2lzZSB0aGlzIHZhcmlhYmxlIGlzIGVtcHR5LgotCi0gICBcdihzZXJpYWwpCi0gICAgICAgICAg Q3VycmVudCBzZXJpYWwgcG9ydCBzZXR0aW5ncyBpbiA4TjEgZm9ybWF0IChbNTY4XVNlY3Rpb24g Mi4xMCkuCi0KLSAgIFx2KGVycm5vKQotICAgICAgICAgIEluIFVOSVgsIHRoZSBjdXJyZW50IHZh bHVlIG9mIHRoZSBDIHJ1bnRpbWUgZXJybm8gdmFyaWFibGUsCi0gICAgICAgICAgd2hpY2ggaXMg cXVpdGUgdm9sYXRpbGUgKG1lYW5pbmcgdGhhdCBvZnRlbiBhbiAiaW50ZXJlc3RpbmciCi0gICAg ICAgICAgZXJyb3IgY29kZSBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc29tZSBvdGhlciBsaWJyYXJ5 IGNhbGwgb3IKLSAgICAgICAgICBzeXN0ZW0gc2VydmljZSB0aGF0IHNldHMgZXJybm8gYmVmb3Jl IHlvdSBoYXZlIGEgY2hhbmNlIHRvIGxvb2sKLSAgICAgICAgICBhdCBpdCkuIEluIFZNUywgdGhl IGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgdGhlIHN5c3RlbSBvciBsaWJyYXJ5Ci0gICAgICAgICAg Y2FsbCB0aGF0IG1vc3QgcmVjZW50bHkgZmFpbGVkIChzdWNjZXNzIGNvZGVzIGFyZSBub3Qgc2F2 ZWQpLgotICAgICAgICAgIE5vdCBhdmFpbGFibGUgaW4gb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMu Ci0KLSAgIFx2KGVycnN0cmluZykKLSAgICAgICAgICBUaGUgVU5JWCBvciBWTVMgc3lzdGVtIGVy cm9yIG1lc3NhZ2UgdGhhdCBjb3JyZXNwb25kcyB0bwotICAgICAgICAgIFx2KGVycm5vKS4gTm90 IGF2YWlsYWJsZSBpbiBhbGwgT1Mncy4gQWxzbyBzZWUKLSAgICAgICAgICBbNTY5XVxmZXJyc3Ry aW5nKCkuCi0KLSAgIFx2KHNldGxpbmVtc2cpCi0gICAgICAgICAgVGhlIGVycm9yIG1lc3NhZ2Us IGlmIGFueSwgZnJvbSB0aGUgbW9zdCByZWNlbnQgU0VUIExJTkUsIFNFVAotICAgICAgICAgIFBP UlQsIFNFVCBIT1NULCBURUxORVQsIG9yIG90aGVyIGNvbm5lY3Rpb24tbWFraW5nIGNvbW1hbmQu IFRoaXMKLSAgICAgICAgICBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgXHYoZXJyc3Ry aW5nKSBzaW5jZSB0aGVzZQotICAgICAgICAgIGNvbW1hbmRzIG1pZ2h0IGZhaWwgd2l0aG91dCBn ZW5lcmF0aW5nIGEgc3lzdGVtIGVycm9yIGNvZGUsIGZvcgotICAgICAgICAgIGV4YW1wbGUgKGlu IFVOSVgpIGJlY2F1c2UgYSBsb2NrZmlsZSBleGlzdGVkIGluZGljYXRpbmcgdGhlCi0gICAgICAg ICAgZGV2aWNlIHdhcyBhc3NpZ25lZCBieSBhbm90aGVyIHVzZXIuCi0KLSAgIFx2KGV4aXRzdGF0 dXMpCi0gICAgICAgICAgVGhlIGV4aXQgc3RhdHVzIEMtS2VybWl0IHdvdWxkIHJldHVybiBpZiBp dCBleGl0ZWQgbm93LgotCi0gICBcdihwZXhpdHN0YXQpCi0gICAgICAgICAgVGhlIGV4aXQgc3Rh dHVzIG9mIHRoZSBpbmZlcmlvciBwcm9jZXNzIG1vc3QgcmVjZW50bHkgaW52b2tlZCBieQotICAg ICAgICAgIEMtS2VybWl0IChieSBSVU4sICEsIFJFRElSRUNULCBTRU5EIC9DT01NQU5ELCBldGMp LiBJbiBWTVMsIHRoaXMKLSAgICAgICAgICBjb2RlIGNhbiBiZSBnaXZlbiB0byBcZmVycnN0cmlu ZygpIHRvIGdldCB0aGUgY29ycmVzcG9uZGluZwotICAgICAgICAgIGVycm9yIG1lc3NhZ2UgKGlu IFVOSVgsIHByb2dyYW0vY29tbWFuZCByZXR1cm4gY29kZXMgYXJlIG5vdCB0aGUKLSAgICAgICAg ICBzYW1lIGFzIHN5c3RlbSBlcnJvciBjb2RlcykuIE5vdCBhdmFpbGFibGUgaW4gb3BlcmF0aW5n IHN5c3RlbXMKLSAgICAgICAgICBvdGhlciB0aGFuIFVOSVggYW5kIFZNUy4gU2VlIFs1NzBdU2Vj dGlvbiA0LjIuNSBmb3IgZGV0YWlscy4KLQotICAgXHYoaW5tYXRjaCkKLSAgICAgICAgICBUaGUg aW5jb21pbmcgc3RyaW5nIG9mIGNoYXJhY3RlcnMsIGlmIGFueSwgdGhhdCBtYXRjaGVkIHRoZSBt b3N0Ci0gICAgICAgICAgcmVjZW50IElOUFVULCBSRUlOUFVULCBvciBNSU5QVVQgY29tbWFuZC4K LQotICAgXHYoaW50aW1lKQotICAgICAgICAgIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzICh0 aG91c2FuZHRocyBvZiBzZWNvbmRzKSBpdCB0b29rIGZvcgotICAgICAgICAgIHRoZSBtb3N0IHJl Y2VudCBJTlBVVCBjb21tYW5kIHRvIGZpbmQgaXRzIG1hdGNoLCBvciAtMSBpZiBubwotICAgICAg ICAgIElOUFVUIGNvbW1hbmQgaGFzIGJlZW4gZ2l2ZW4geWV0LiBJZiB0aGUgSU5QVVQgY29tbWFu ZCB0aW1lZAotICAgICAgICAgIG91dCwgdGhlIHZhbHVlIGlzIGFwcHJveGltYXRlbHkgZXF1YWwg dG8gMTAwMCB0aW1lcyB0aGUgSU5QVVQKLSAgICAgICAgICB0aW1lb3V0LiBJZiBJTlBVVCBmYWls ZWQgZm9yIHNvbWUgb3RoZXIgcmVhc29uLCB0aGUgdmFsdWUgaXMKLSAgICAgICAgICB1bmRlZmlu ZWQgKFx2KGluc3RhdHVzKSBnaXZlcyBJTlBVVCBjb21wbGV0aW9uIHN0YXR1cykuIElmIHlvdXIK LSAgICAgICAgICB2ZXJzaW9uIG9mIEMtS2VybWl0IGlzIGJ1aWx0IHdpdGhvdXQgaGlnaC1wcmVj aXNpb24KLSAgICAgICAgICBmbG9hdGluZy1wb2ludCB0aW1lcnMsIHRoaXMgbnVtYmVyIHdpbGwg YWx3YXlzIGJlIGEgbXVsdGlwbGUgb2YKLSAgICAgICAgICAxMDAwLgotCi0gICBcdihpbndhaXQp Ci0gICAgICAgICAgVGhlIG51bWJlciBvZiBzZWNvbmRzIHNwZWNpZmllZCBhcyB0aGUgdGltZW91 dCBpbiB0aGUgbW9zdAotICAgICAgICAgIHJlY2VudCBJTlBVVCBjb21tYW5kLgotCi0gICBcdihk aWFsc3VmZml4KQotICAgICAgICAgIERpYWxpbmcgc3VmZml4IGZvciB1c2UgZHVyaW5nIFBESUFM IHNlcXVlbmNlOyBzZWUgWzU3MV1TZWN0aW9uCi0gICAgICAgICAgMi4xLjEwLgotCi0gICBcdihw aWQpCi0gICAgICAgICAgVU5JWCwgVk1TLCBhbmQgSzk1IG9ubHkuIEMtS2VybWl0J3MgcHJpbWFy eSBwcm9jZXNzIElELCBudW1lcmljLAotICAgICAgICAgIGRlY2ltYWwuIElmIHlvdSB3YW50IHRv IHNob3cgaXQgaW4gaGV4LCB1c2UgXGZuMmhleChcdihwaWQpKSBJZgotICAgICAgICAgIHlvdSB3 YW50IHRvIHNob3cgaXQgaW4gb2N0YWwsIHVzZSBcZm4yb2N0YWwoXHYocGlkKSkuCi0KLSAgIFx2 KHByaW50ZXIpCi0gICAgICAgICAgQ3VycmVudCBwcmludGVyIG5hbWUgb3IgU0VUIFBSSU5URVIg dmFsdWUuCi0KLSAgIFx2KHBfY3RsKQotICAgICAgICAgIENvbnRyb2wgcHJlZml4IGNoYXIgXHYo cF84Yml0KSA4LWJpdCBwcmVmaXggY2hhciAoaWYgcGFyaXR5IG5vdAotICAgICAgICAgIG5vbmUp Ci0KLSAgIFx2KHBfcnB0KQotICAgICAgICAgIFJlcGVhdCBwcmVmaXggY2hhciAoaWYgcmVwZWF0 IGNvbXByZXNzaW9uIGVuYWJsZWQpCi0KLSAgIFx2KGhlcmFsZCkKLSAgICAgICAgICBLZXJtaXQn cyB2ZXJzaW9uIGhlcmFsZAotCi0gICBcdih0ZXN0KQotICAgICAgICAgIEtlcm1pdCdzIHRlc3Qg dmVyc2lvbiwgaWYgYW55LCBvciAwIGlmIHRoaXMgaXMgbm90IGEgdGVzdAotICAgICAgICAgIHZl cnNpb24uIFR5cGljYWwgdmFsdWVzIGZvciB0ZXN0IHZlcnNpb25zIGFyZSAiQWxwaGEuMDMiIG9y Ci0gICAgICAgICAgIkJldGEuMTQiLgotCi0gICBcdihzZW5kbGlzdCkKLSAgICAgICAgICBUaGUg bnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIFNFTkQtTElTVCwgMCBpZiBub25lLiBOb3RlOiBlbnRy aWVzCi0gICAgICAgICAgZG8gbm90IG5lY2Vzc2FyaWx5IGNvcnJlc3BvbmQgdG8gZmlsZXMsIHNp bmNlIGFuIGVudHJ5IG1pZ2h0Ci0gICAgICAgICAgY29udGFpbiB3aWxkY2FyZHMuIEFsc28gbm90 ZSB0aGF0IHRoZSB2YWx1ZSBkb2VzIG5vdCBnbyBiYWNrIHRvCi0gICAgICAgICAgMCBhZnRlciB0 aGUgZmlsZXMgaW4gdGhlIGxpc3QgYXJlIHNlbnQuIFRvIHJlc2V0IHRoaXMgdmFyaWFibGUsCi0g ICAgICAgICAgdXNlIENMRUFSIFNFTkQtTElTVC4gVGhlIHB1cnBvc2Ugb2YgdGhpcyB2YXJpYWJs ZSBpcyB0bwotICAgICAgICAgIGRldGVybWluZSBpZiBhIFNFTkQgY29tbWFuZCwgd2hlbiBnaXZl biB3aXRob3V0IGFueSBmaWxlbmFtZXMsCi0gICAgICAgICAgd2lsbCBiZSBsZWdhbC4gRXhhbXBs ZToKLQotICB4aWYgXHYoc2VuZGxpc3QpIHsgc2VuZCB9IGVsc2UgeyBzZW5kIG9vZmEudHh0IH0K LQotICAgXHYodHJpZ2dlcikKLSAgICAgICAgICBJZiB0aGUgbW9zdCByZWNlbnQgQ09OTkVDVCBz ZXNzaW9uIHdhcyB0ZXJtaW5hdGVkIGF1dG9tYXRpY2FsbHkKLSAgICAgICAgICBieSBhIHRyaWdn ZXIsIHRoaXMgdmFyaWFibGUgY29udGFpbnMgdGhlIHRyaWdnZXIgdmFsdWUuCi0KLSAgIFx2KHR5 X2xuKQotICAgICAgICAgIFRZUEUgbGluZSBudW1iZXIgKGR1cmluZyBUWVBFKQotCi0gICBcdih0 eV9sYykKLSAgICAgICAgICBUWVBFIGxpbmUgY291bnQgKGFmdGVyIFRZUEUpCi0KLSAgIFx2KHR5 X21jKQotICAgICAgICAgIFRZUEUgbWF0Y2ggY291bnQgKGFmdGVyIFRZUEUpCi0KLSAgIFx2KHhm ZXJzdGF0KQotICAgICAgICAgIFN0YXR1cyBvZiBtb3N0IHJlY2VudCBmaWxlIHRyYW5zZmVyOgot Ci0tMTogTm8gdHJhbnNmZXIgeWV0Ci0gMDogU3VjY2VlZGVkCi0gMTogRmFpbGVkCi0KLSAgIFx2 KHhmZXJtc2cpCi0gICAgICAgICAgSWYgdGhlIG1vc3QgcmVjZW50IGZpbGUgdHJhbnNmZXIgZmFp bGVkLCB0aGlzIGlzIHRoZSByZWFzb24uIElmCi0gICAgICAgICAgaXQgc3VjY2VlZGVkLCBcdih4 ZmVybXNnKSBpcyBhbiBlbXB0eSBzdHJpbmcuCi0KLSAgIFx2KHRmdGltZSkKLSAgICAgICAgICBU b3RhbCBlbGFwc2VkIHRpbWUgb2YgbW9zdCByZWNlbnQgZmlsZSB0cmFuc2ZlciBvcGVyYXRpb24s IGluCi0gICAgICAgICAgc2Vjb25kcy4KLQotICAgXHYodGV4dGRpcikKLSAgICAgICAgICBEaXJl Y3RvcnkgdGhhdCBob2xkcyAob3IgaXMgc3VwcG9zZWQgdG8gaG9sZCkgS2VybWl0IHRleHQgZmls ZXMKLSAgICAgICAgICBzdWNoIGFzIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMsIHJlbGVhc2Ug bm90ZXMsIHVwZGF0ZSBub3RlcywKLSAgICAgICAgICByZWFkLW1lIGZpbGVzLCAiYmV3YXJlIiBm aWxlcywgZXRjLgotCi0gICBcdihuYW1lKQotICAgICAgICAgIFRoZSBuYW1lIHdpdGggd2hpY2gg dGhlIEtlcm1pdCBwcm9ncmFtIHdhcyBpbnZva2VkLCBlLmcuCi0gICAgICAgICAgImtlcm1pdCIs ICJ3ZXJtaXQiLCAiazk1IiwgImsyIiwgZXRjIChzZWUgWzU3Ml1TZWN0aW9uIDkuMSkuCi0KLSAg IFx2KG9zbmFtZSkKLSAgICAgICAgICBOYW1lIG9mIG9wZXJhdGluZyBzeXN0ZW0gb24gY29tcHV0 ZXIgd2hlcmUgQy1LZXJtaXQgaXMgcnVubmluZywKLSAgICAgICAgICBvYnRhaW5lZCBhdCBydW50 aW1lIChmcm9tIHVuYW1lIG9yIGVxdWl2YWxlbnQpLgotCi0gICBcdihvc3ZlcnNpb24pCi0gICAg ICAgICAgVmVyc2lvbiBvZiBvcGVyYXRpbmcgc3lzdGVtIG9uIGNvbXB1dGVyIHdoZXJlIEMtS2Vy bWl0IGlzCi0gICAgICAgICAgcnVubmluZywgb2J0YWluZWQgYXQgcnVudGltZSAoZnJvbSB1bmFt ZSBvciBlcXVpdmFsZW50KS4KLQotICAgXHYob3NyZWxlYXNlKQotICAgICAgICAgIFJlbGVhc2Ug b2Ygb3BlcmF0aW5nIHN5c3RlbSBvbiBjb21wdXRlciB3aGVyZSBDLUtlcm1pdCBpcwotICAgICAg ICAgIHJ1bm5pbmcsIG9idGFpbmVkIGF0IHJ1bnRpbWUgKGZyb20gdW5hbWUgb3IgZXF1aXZhbGVu dCkuCi0KLSAgIFx2KG1vZGVsKQotICAgICAgICAgIFRoZSBzcGVjaWZpYyBoYXJkd2FyZSBtb2Rl bCBvZiB0aGUgY29tcHV0ZXIgd2hlcmUgQy1LZXJtaXQgaXMKLSAgICAgICAgICBydW5uaW5nLCBp ZiBrbm93bi4KLQotICAgXHYobWF0aF9waSkKLSAgICAgICAgICBUaGUgdmFsdWUgb2YgUGkgKHNl ZSBbNTczXVNlY3Rpb24gNy4yMykKLQotICAgXHYobWF0aF9lKQotICAgICAgICAgIFRoZSB2YWx1 ZSBvZiBlIChzZWUgWzU3NF1TZWN0aW9uIDcuMjMpCi0KLSAgIFx2KG1hdGhfcHJlY2lzaW9uKQot ICAgICAgICAgIEhvdyBtYW55IHNpZ25pZmljYW50IGRpZ2l0cyBpbiBhIGZsb2F0aW5nLXBvaW50 IG51bWJlci4KLQotICAgXHYoZl9jb3VudCkKLSAgICAgICAgICBSZXN1bHQgb2YgdGhlIG1vc3Qg cmVjZW50IEZJTEUgQ09VTlQgKEZDT1VOVCkgY29tbWFuZC4KLQotICAgXHYoZl9lcnJvcikKLSAg ICAgICAgICBOdW1lcmljIGVycm9yIGNvZGUgb2YgbW9zdCByZWNlbnQgRklMRSBjb21tYW5kLgot Ci0gICBcdihmX21heCkKLSAgICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBmaWxlcyBvcGVuIHNp bXVsdGFuZW91c2x5LgotCi0gICBUaGUgbWF0aCBjb25zdGFudHMgYXJlIGdpdmVuIGluIHRoZSBw cmVjaXNpb24gb2YgdW5kZXJseWluZyBjb21wdXRlcidzCi0gICBmbG9hdGluZy1wb2ludCBhcml0 aG1ldGljLgotCi0gICBOb3RlIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIFx2KG9zbmFtZSksIFx2 KG9zdmVyc2lvbiksIGFuZAotICAgXHYocGxhdGZvcm0pOyB0aGUgbGF0dGVyIHJlZmVycyB0byB0 aGUgcGxhdGZvcm0gZm9yIHdoaWNoIGFuZC9vciB1cG9uCi0gICB3aGljaCBDLUtlcm1pdCB3YXMg YnVpbHQsIGFzIG9wcG9zZWQgdG8gdGhlIG9uZSBvbiB3aGljaCBpdCBpcyBhY3R1YWxseQotICAg cnVubmluZy4gQWxzbyBub3RlIHRoYXQgZWFjaCBvcGVyYXRpbmcgc3lzdGVtIGNhbiwgYW5kIHBy b2JhYmx5IHdpbGwsCi0gICBpbnRlcnByZXQgYW5kIGZpbGwgaW4gdGhlIG9zKiB2YXJpYWJsZXMg ZGlmZmVyZW50bHksIG9yIG5vdCBhdCBhbGwuCi0KLSAgIFRoZSBTSE9XIFZBUklBQkxFUyBjb21t YW5kIG5vdyBhY2NlcHRzIGEgdmFyaWFibGUgbmFtZSwgcHJlZml4LCBvcgotICAgcGF0dGVybjoK LQotICBzaG93IHZhcmlhYmxlcyAgICAgICAgIFNob3dzIGFsbCB2YXJpYWJsZXMuCi0gIHNob3cg dmFyaWFibGVzIHQgICAgICAgU2hvd3MgYWxsIHZhcmlhYmxlcyB0aGF0IHN0YXJ0IHdpdGggInQi LgotICBzaG93IHZhcmlhYmxlcyAqdmVyKiAgIFNob3dzIGFsbCB2YXJpYWJsZXMgd2hvc2UgbmFt ZXMgY29udGFpbiAidmVyIi4KLSAgc2hvdyB2YXJpYWJsZXMgKnZlciAgICBEaXR0byAoYW4gaW1w bGllZCAiKiIgaXMgYXBwZW5kZWQpLgotCi0gIDcuMy4gTmV3IG9yIEltcHJvdmVkIEJ1aWx0LUlu IEZ1bmN0aW9ucwotCi0gICBUaGUgZm9sbG93aW5nIG5ldyBmaWxlLWkvbyBmdW5jdGlvbnMgYXJl IGV4cGxhaW5lZCBpbiBbNTc1XVNlY3Rpb24KLSAgIDEuMjIuCi0KLSAgXGZfc3RhdHVzKGNoYW5u ZWwpICAgICAgICAgICBTdGF0dXMgb2YgZmlsZSBvcGVuIG9uIGNoYW5uZWwKLSAgXGZfcG9zKGNo YW5uZWwpICAgICAgICAgICAgICBSZWFkL3dyaXRlIChieXRlKSBwb2ludGVyIG9mIGdpdmVuIGZp bGUKLSAgXGZfbGluZShjaGFubmVsKSAgICAgICAgICAgICBDdXJyZW50IGxpbmUgb2YgZmlsZQot ICBcZl9oYW5kbGUoY2hhbm5lbCkgICAgICAgICAgIEhhbmRsZSBvZiBmaWxlCi0gIFxmX2VvZihj aGFubmVsKSAgICAgICAgICAgICAgV2hldGhlciBnaXZlbiBmaWxlIGlzIGF0IEVPRgotICBcZl9n ZXRjaGFyKGNoYW5uZWwpICAgICAgICAgIFJlYWQgYSBjaGFyIGZyb20gZ2l2ZW4gZmlsZQotICBc Zl9nZXRsaW5lKGNoYW5uZWwpICAgICAgICAgIFJlYWQgYSBsaW5lIGZyb20gZ2l2ZW4gZmlsZQot ICBcZl9nZXRibG9jayhjaGFubmVsLG4pICAgICAgIFJlYWQgYSBibG9jayBmcm9tIGdpdmVuIGZp bGUKLSAgXGZfcHV0Y2hhcihjaGFubmVsLGMpICAgICAgICBXcml0ZSBhIGNoYXIgdG8gZ2l2ZW4g ZmlsZQotICBcZl9wdXRsaW5lKGNoYW5uZWwsc3RyaW5nKSAgIFdyaXRlIGEgbGluZSB0byBnaXZl biBmaWxlCi0gIFxmX3B1dGJsb2NrKGNoYW5uZWwsc3RyaW5nKSAgV3JpdGUgYSBibG9jayB0byBn aXZlbiBmaWxlCi0KLSAgIFRoZSBmb2xsb3dpbmcgbmV3IGRhdGUtdGltZS1yZWxhdGVkIGZ1bmN0 aW9ucyBhcmUgZXhwbGFpbmVkIGluCi0gICBbNTc2XVNlY3Rpb24gMS42OgotCi0gIFxmZGF5KCkg ICAgICAgICAgICAgICAgUmV0dXJucyBkYXkgb2Ygd2VlayBvZiBnaXZlbiBkYXRlCi0gIFxmbmRh eSgpICAgICAgICAgICAgICAgUmV0dXJucyBudW1lcmljIGRheSBvZiB3ZWVrIG9mIGdpdmVuIGRh dGUKLSAgXGZ0aW1lKCkgICAgICAgICAgICAgICBSZXR1cm5zIHRpbWUgcG9ydGlvbiBvZiBnaXZl biBkYXRlLXRpbWUKLSAgXGZudGltZSgpICAgICAgICAgICAgICBDb252ZXJ0cyB0aW1lIHRvIHNl Y29uZHMgc2luY2UgbWlkbmlnaHQKLSAgXGZuMnRpbWUoKSAgICAgICAgICAgICBDb252ZXJ0cyBz ZWNvbmRzIHNpbmNlIG1pZG5pZ2h0IHRvIGhoOm1tOnNzCi0gIFxmY3Z0ZGF0ZShkYXRlLXRpbWUp ICAgQ29udmVydHMgZnJlZS1mb3JtYXQgZGF0ZSB0byB5eXl5bW1kZCBoaDptbTpzcwotICBcZmRh eW9meWVhcihkYXRlLXRpbWUpIENvbnZlcnRzIGRhdGUgdG8geXl5eWRkZCAoZGF5LW9mLXllYXIp IGZvcm1hdAotICBcZmRveShkYXRlLXRpbWUpICAgICAgIFN5bm9ueW0gZm9yIFxmZGF5b2Z5ZWFy KCkKLSAgXGZkb3kyZGF0ZShkYXlvZnllYXIpICBDb252ZXJ0cyB5eXl5ZGRkIHRvIHl5eXltbWRk Ci0gIFxmbWpkKGRhdGUtdGltZSkgICAgICAgQ29udmVydHMgZnJlZS1mb3JtYXQgZGF0ZSB0byBN b2RpZmllZCBKdWxpYW4gRGF0ZQotICBcZm1qZDJkYXRlKG1qZCkgICAgICAgIENvbnZlcnRzIG1v ZGlmaWVkIEp1bGlhbiBkYXRlIHRvIHl5eXltbWRkCi0KLSAgIFRoZSBuZXcgZmxvYXRpbmctcG9p bnQgYXJpdGhtZXRpYyBmdW5jdGlvbnMgYXJlIGV4cGxhaW5lZCBpbgotICAgWzU3N11TZWN0aW9u IDcuMjMuIGYxIGFuZCBmMiBhcmUgZmxvYXRpbmctcG9pbnQgKHJlYWwpIG51bWJlcnM7IGQgaXMK LSAgIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgdG8gc2hvdzoKLQotICBcZmZwYWJzb2x1 dGUoZjEsZCkgICAgIEFic29sdXRlIHZhbHVlIG9mIGYxCi0gIFxmZnBhZGQoZjEsZjIsZCkgICAg ICAgZjEgKyBmMQotICBcZmZwY29zaW5lKGYxLGQpICAgICAgIENvc2luZSBvZiBmMQotICBcZmZw ZGl2aWRlKGYxLGYyLGQpICAgIGYxIGRpdmlkZWQgYnkgZjIKLSAgXGZmcGV4cChmMSxkKSAgICAg ICAgICBlIHRvIHRoZSBmMSBwb3dlcgotICBcZmZwaW50KGYxKSAgICAgICAgICAgIEludGVnZXIg cGFydCBvZiBmMQotICBcZmZwbG9nMTAoZjEsZCkgICAgICAgIExvZyBiYXNlIDEwIG9mIGYxCi0g IFxmZnBsb2duKGYxLGQpICAgICAgICAgTmF0dXJhbCBsb2cgb2YgZjEKLSAgXGZmcG1heGltdW0o ZjEsZjIsZCkgICBNYXhpbXVtIG9mIGYxIGFuZCBmMgotICBcZmZwbWluaW11bShmMSxmMixkKSAg IE1pbmltdW0gb2YgZjEgYW5kIGYyCi0gIFxmZnBtb2R1bHVzKGYxLGYyLGQpICAgTW9kdWx1cyBv ZiBmMSBhbmQgZjIKLSAgXGZmcG11bHRpcGx5KGYxLGYyLGQpICBQcm9kdWN0IG9mIGYxIGFuZCBm MgotICBcZmZwcmFpc2UoZjEsZjIsZCkgICAgIFJhaXNlIGYxIHRvIHBvd2VyIGYyCi0gIFxmZnBy b3VuZChmMSxkKSAgICAgICAgUm91bmQgZjEgdG8gZCBwbGFjZXMKLSAgXGZmcHNpbmUoZjEsZCkg ICAgICAgICBTaW5lIG9mIGYxCi0gIFxmZnBzcXJ0KGYxLGQpICAgICAgICAgU3F1YXJlIHJvb3Qg b2YgZjEKLSAgXGZmcHN1YnRyYWN0KGYxLGYyLGQpICBmMiAtIGYxCi0gIFxmZnB0YW5nZW50KGYx LGQpICAgICAgVGFuZ2VudCBvZiBmMQotCi0gICBJbnRlZ2VyIG51bWJlciBmdW5jdGlvbnM6Ci0K LSAgIFxmYWJzb2x1dGUobikKLSAgICAgICAgICBBYnNvbHV0ZSB2YWx1ZSBvZiBpbnRlZ2VyIG4u Ci0KLSAgIFxmcmFuZG9tKG4pCi0gICAgICAgICAgUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIGJl dHdlZW4gMCBhbmQgbi0xLgotCi0gICBcZnJhZGl4KHMsbjEsbjIpCi0gICAgICAgICAgSWYgdGhl IHN0cmluZyBzIGlzIGFuIGludGVnZXIgaW4gcmFkaXggbjEsIHRoZSByZXN1bHQgaXMgdGhlCi0g ICAgICAgICAgc2FtZSBudW1iZXIgZXhwcmVzc2VkIGluIHJhZGl4IG4yLCB3aGVyZSBuMSBhbmQg bjIgbWF5IGJlIGFueQotICAgICAgICAgIG51bWJlciBmcm9tIDIgdGhyb3VnaCAzNiwgZXhwcmVz c2VkIGFzIGRlY2ltYWwgbnVtYmVycywgb3IKLSAgICAgICAgICB2YXJpYWJsZXMgKGV0YykgdGhh dCBldmFsdWF0ZSB0byBkZWNpbWFsIG51bWJlcnMuIEZvciB0aGUgc291cmNlCi0gICAgICAgICAg YW5kIHJlc3VsdCwgdGhlIGRpZ2l0cyBvZiBhbnkgcmFkaXgsIHIsIGFyZSB0aGUgZmlyc3Qgcgot ICAgICAgICAgIGNoYXJhY3RlcnMgaW4gdGhlIHNlcXVlbmNlIDAtOSxhLXogKGNhc2UgZG9lc24n dCBtYXR0ZXIgZm9yIHRoZQotICAgICAgICAgIGxldHRlcnMpLiBUaGUgc3RyaW5nIHMgbWF5IGhh dmUgYSBzaWduLCArIG9yIC07IGlmIGl0IHN0YXJ0cwotICAgICAgICAgIHdpdGggYSBtaW51cyAo LSkgc2lnbiwgdGhlIHJlc3VsdCBhbHNvIGhhcyBhIG1pbnVzIHNpZ24uCi0KLSAgIFRoZSBcZnJh ZGl4KCkgZnVuY3Rpb24gZG9lcyBub3Qgd29yayB3aXRoIGZsb2F0aW5nLXBvaW50IG51bWJlcnMu IEl0Ci0gICBkb2VzIG5vdCByZXZlYWwgdGhlIGludGVybmFsIHN0b3JhZ2UgZm9ybWF0IG9mIGEg bnVtYmVyOyBmb3IgZXhhbXBsZSwKLSAgIFxmcmFkaXgoLTEsMTAsMTYpIGlzIC0xLCBub3Qgc29t ZXRoaW5nIGxpa2UgRkZGRkZGRkZGRi4gSWYgYWxsIHRocmVlCi0gICBhcmd1bWVudHMgYXJlIG5v dCBnaXZlbiwgb3IgaWYgbjEgb3IgbjIgYXJlIG5vdCBudW1iZXJzIGJldHdlZW4gMiBhbmQKLSAg IDM2IGluY2x1c2l2ZSwgb3IgcyBpcyBub3QgYSBudW1iZXIgaW4gcmFkaXggbjEsIGFuIGVycm9y IG9jY3VycyBhbmQgdGhlCi0gICBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuIFxmcmFkaXgoKSBh bHNvIGRvZXMgbm90IG9mZmVyCi0gICBleHRlbmRlZC1wcmVjaXNpb24gYXJpdGhtZXRpYzsgbnVt YmVyIHZhbHVlcyBhcmUgbGltaXRlZCB0byB0aG9zZQotICAgZXhwcmVzc2VkIGFzIGEgbG9uZyBp bnRlZ2VyIGluIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHVuZGVybHlpbmcKLSAgIGNvbXB1dGVy LCB1c3VhbGx5IDMyIG9yIDY0IGJpdHMuIElmIHlvdSBnaXZlIGl0IGFuIGFyZ3VtZW50IHdob3Nl Ci0gICBhYnNvbHV0ZSB2YWx1ZSBpcyBsYXJnZXIgdGhhbiBjYW4gYmUgaGVsZCBpbiBhbiB1bnNp Z25lZCBsb25nLCB0aGUKLSAgIHJlc3VsdCBpcyAtMS4KLQotICAgVGhlIG5leHQgZm91ciBhcmUg c2hvcnRoYW5kIGZ1bmN0aW9ucyBmb3IgZGVjaW1hbC9oZXhhZGVjaW1hbCBhbmQKLSAgIGRlY2lt YWwvb2N0YWwgbnVtYmVyIGNvbnZlcnNpb246Ci0KLSAgIFxmbjJoZXgobikKLSAgICAgICAgICBS ZXR1cm5zIHRoZSBoZXhhZGVjaW1hbCAoYmFzZSAxNikgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlu dGVnZXIKLSAgICAgICAgICBuLiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIFxmaGV4aWZ5KHMpLCB3 aGljaCB0cmVhdHMgaXRzIGFyZ3VtZW50Ci0gICAgICAgICAgYXMgYSBzdHJpbmcgcmF0aGVyIHRo YW4gYSBudW1iZXIuIFRoZSByZXN1bHQgaXMgYWx3YXlzCi0gICAgICAgICAgbGVmdC1wYWRkZWQg d2l0aCAwJ3MgdG8gbWFrZSBpdHMgbGVuZ3RoIGV2ZW4uIEV4YW1wbGVzOgotCi0gIFxuMmhleCgw KSAgID0gIjAwIiAgICAgICAgICAgICAgICAgICAgXGZoZXhpZnkoMCkgICA9ICIzMCIKLSAgXG4y aGV4KDI1NSkgPSAiZmYiICAgICAgICAgICAgICAgICAgICBcZmhleGlmeSgyNTUpID0gIjMyMzUz NSIKLSAgXG4yaGV4KDI1NikgPSAiMDEwMCIgICAgICAgICAgICAgICAgICBcZmhleGlmeSgyNTYp ID0gIjMyMzUzNiIKLQotICAgXGZoZXgybih4KQotICAgICAgICAgIENvbnZlcnRzIGhleGFkZWNp bWFsIG51bWJlciB4IHRvIGRlY2ltYWwgZXF1aXZhbGVudCBkZWNpbWFsCi0gICAgICAgICAgbnVt YmVyLiBUaGlzIGlzIHRoZSBpbnZlcnNlIG9mIFxmbjJoZXgoKS4gRXF1aXZhbGVudCB0bwotICAg ICAgICAgIFxmcmFkaXgocywxNiwxMCkuCi0KLSAgIFxmbjJvY3RhbChuKQotICAgICAgICAgIFJl dHVybnMgdGhlIG9jdGFsIChiYXNlIDgpIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgbi4K LSAgICAgICAgICBFeGFtcGxlczoKLQotICBcbjJvY3RhbCgwKSA9ICIwIgotICBcbjJvY3QoMjU1 KSA9ICIzNzciCi0gIFxuMm9jdCgyNTYpID0gIjQwMCIKLSAgRXF1aXZhbGVudCB0byBcZnJhZGl4 KG4sMTAsOCkuCi0KLSAgIFxmb2N0Mm4obikKLSAgICAgICAgICBSZXR1cm5zIHRoZSBkZWNpbWFs IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBvY3RhbCBudW1iZXIsIG4uCi0gICAgICAgICAg VGhlIGludmVyc2Ugb2YgXGZuMm9jdGFsKCkuIEVxdWl2YWxlbnQgdG8gXGZyYWRpeChuLDgsMTAp LgotCi0gICBTdHJpbmcgZnVuY3Rpb25zOgotCi0gICBccyhuYW1lW246bV0pCi0gICAgICAgICAg RXF1aXZhbGVudCB0byBcZnN1YnN0cmluZyhcbShuYW1lKSxuLG0pIChbNTc4XVNlY3Rpb24gNy4y NCkuCi0KLSAgIFw6KG5hbWVbbjptXSkKLSAgICAgICAgICBFcXVpdmFsZW50IHRvIFxmc3Vic3Ry aW5nKG5hbWUsbixtKSAod2hlcmUgIm5hbWUiIGlzIGFueQotICAgICAgICAgIFwtcXVhbnRpdHkp IChbNTc5XVNlY3Rpb24gNy4yNCkuCi0KLSAgIFxmbGVmdChzLG4pCi0gICAgICAgICAgVGhlIGxl ZnRtb3N0IG5jaGFyYWN0ZXJzIG9mIHN0cmluZyBzOyBlcXVpdmFsZW50IHRvCi0gICAgICAgICAg XGZzdWJzdHJpbmcocywxLG4pLgotCi0gICBcZnN0cmlweChzdHJpbmcsY2hhcikKLSAgICAgICAg ICBSZXR1cm5zIHRoZSBwYXJ0IG9mIHRoZSBzdHJpbmcgdXAgdG8gdGhlIHJpZ2h0bW9zdCBvY2N1 cnJlbmNlLAotICAgICAgICAgIGlmIGFueSwgb2YgdGhlIGdpdmVuIGNoYXJhY3Rlci4gVGhlIGRl ZmF1bHQgY2hhcmFjdGVyIGlzIHBlcmlvZAotICAgICAgICAgICguKSBFeGFtcGxlczoKLQotICBc ZnN0cmlweChmb28vYmFyLC8pICAgICAgICAgICAgICAgICA9ICJmb28iCi0gIFxmc3RyaXB4KGZv by9iYXIvYmF6LC8pICAgICAgICAgICAgID0gImZvby9iYXIiCi0gIFxmc3RyaXB4KGF1dG9leGVj LmJhdCwuKSAgICAgICAgICAgID0gImF1dG9leGVjIgotICBcZnN0cmlweChhdXRvZXhlYy5iYXQp ICAgICAgICAgICAgICA9ICJhdXRvZXhlYyIKLSAgXGZzdHJpcHgoZnN0cmlweChmb28vYmFyL2Jh eiwvKSwvKSAgPSAiZm9vIgotCi0gICBcZmxvcChzdHJpbmcsY2hhcmFjdGVyKQotICAgICAgICAg IFJldHVybnMgdGhlIHBvcnRpb24gb2YgdGhlIHN0cmluZyBzdGFydGluZyBhZnRlciB0aGUgZmly c3QKLSAgICAgICAgICBvY2N1cnJlbmNlIG9mIHRoZSBnaXZlbiBjaGFyYWN0ZXIuIFRoZSBkZWZh dWx0IGNoYXJhY3RlciBpcwotICAgICAgICAgIHBlcmlvZCAoLikgRXhhbXBsZXM6Ci0KLSAgXGZs b3AoYXV0b2V4ZWMuYmF0KSAgICAgICAgICAgICAgICAgPSAiYmF0IgotICBcZmxvcChiYXouZm9v L2JhcikgICAgICAgICAgICAgICAgICA9ICJmb28vYmFyIgotICBcZmxvcChiYXouZm9vL2Jhciwv KSAgICAgICAgICAgICAgICA9ICJiYXIKLQotICAgXGZzdHJpcG4oc3RyaW5nLG4pCi0gICAgICAg ICAgUmV0dXJucyB0aGUgc3RyaW5nIHdpdGggbmNoYXJhY3RlcnMgcmVtb3ZlZCBmcm9tIHRoZSBl bmQuCi0gICAgICAgICAgRXhhbXBsZToKLQotICBcZnN0cmlwbigxMjM0NTY3OCwzKSAgICAgICAg ICAgICAgICA9ICIxMjM0NSIKLQotICAgICAgICAgIChGb3IgbW9yZSBkaXNjdXNzaW9uIG9mIFxm c3RyaXB4KCksIFxmc3RyaXBuKCksIGFuZCBcZmxvcCgpIHNlZQotICAgICAgICAgIFs1ODBdU2Vj dGlvbiA0LjIuMykuCi0KLSAgIFxmYjY0ZW5jb2RlKHMpCi0gICAgICAgICAgUmV0dXJucyB0aGUg QmFzZS02NCBlbmNvZGluZyBvZiB0aGUgc3RyaW5nIHMuCi0KLSAgIFxmYjY0ZGVjb2RlKHMpCi0g ICAgICAgICAgUmV0dXJucyB0aGUgZGVjb2Rpbmcgb2YgdGhlIEJhc2UtNjQgc3RyaW5nIHMuIEZh aWxzIGlmIHMgaXMgbm90Ci0gICAgICAgICAgYSBCYXNlLTY0IHN0cmluZywgb3IgaWYgaXRzIGxl bmd0aCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0LiBOb3RlCi0gICAgICAgICAgdGhhdCBpZiBhbnkg b2YgdGhlIHJlc3VsdCBieXRlcyBhcmUgbnVsbCAoMCksIHRoZSByZXN1bHQgc3RyaW5nCi0gICAg ICAgICAgc3RvcHMgdGhlcmUuIFRoZXJlIGlzIG5vIHdheSB0byByZXByZXNlbnQgc3RyaW5ncyB0 aGF0IGNvbnRhaW4KLSAgICAgICAgICBudWxsIGJ5dGVzIGluIEMtS2VybWl0ICh0aGUgc2FtZSBp cyB0cnVlIGZvciBcZnVuaGV4aWZ5KCkpLgotCi0gICBcZndvcmQoczEsbixzMixzMykKLSAgICAg ICAgICBFeHRyYWN0cyB3b3JkIG51bWJlciBuZnJvbSBzdHJpbmcgczEuIEJ5IGRlZmF1bHQsIGEg IndvcmQiIGlzCi0gICAgICAgICAgYW55IHNlcXVlbmNlIG9mIEFTQ0lJIGxldHRlcnMgb3IgZGln aXRzOyBuaXMgMS1iYXNlZC4gSWYgbiBpcwotICAgICAgICAgIG9taXR0ZWQsICIxIiBpcyB1c2Vk LiBFeGFtcGxlczoKLQotICBcZndvcmQob25lIHR3byB0aHJlZSkgICAgPSAib25lIgotICBcZndv cmQob25lIHR3byB0aHJlZSwxKSAgPSAib25lIgotICBcZndvcmQob25lIHR3byB0aHJlZSwyKSAg PSAidHdvIgotICBcZndvcmQob25lIHR3byB0aHJlZSwzKSAgPSAidGhyZWUiCi0KLSAgICAgICAg ICBhbmQ6Ci0KLSAgICBcZndvcmQoXHYoZGlhbHJlc3VsdCksMikgPSAiMzEyMDAiCi0KLSAgICAg ICAgICBpcyAiMzEyMDAiIGlmIFx2KGRpYWxyZXN1bHQpIGlzIChlLmcuKSAiQ09OTkVDVAotICAg ICAgICAgIDMxMjAwL0FSUS9WMzIvTEFQTS9WNDJCSVMiLgotCi0gICAgICAgICAgSWYgeW91IGlu Y2x1ZGUgczIsIHRoaXMgcmVwbGFjZXMgdGhlIGRlZmF1bHQgYnJlYWsgc2V0LiBGb3IKLSAgICAg ICAgICBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIGEgc3RyaW5nIFwlYSB3aG9zZSB2YWx1ZSBp czoKLQotICAkMTUwLjAwICQzMDAuMDAgJDM5Ljk1Ci0KLSAgICAgICAgICBhbmQgeW91IHdhbnQg ZWFjaCBkb2xsYXIgYW1vdW50IHRvIGJlIGEgd29yZDsgdXNlOgotCi0gIFxmd29yZChcJWEsXCVu LHsgfSkKLQotICAgICAgICAgIFRoaXMgcmV0dXJucyBkb2xsYXIgYW1vdW50IG51bWJlciBcJW4s IGUuZy4gIiQzMDAuMDAiIGZvciBcJW4gPQotICAgICAgICAgIDIuICJ7IH0iIGRlbm90ZXMgYSBz cGFjZSAoeW91IG11c3QgZW5jbG9zZSBpdCBpbiBicmFjZXMsCi0gICAgICAgICAgb3RoZXJ3aXNl IGl0IGlzIHNxdWVlemVkIG91dCkuIE5vdGUgdGhhdCBBU0NJSSBjb250cm9sCi0gICAgICAgICAg Y2hhcmFjdGVycyBhcmUgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBicmVhayBzZXQ7IHlvdSBkb24n dCBoYXZlCi0gICAgICAgICAgdG8gc3BlY2lmeSB0aGVtIChhbmQgeW91IGNhbid0IG5vdCBzcGVj aWZ5IHRoZW0pLgotCi0gICAgICAgICAgVGhlIG9wdGlvbmFsIHMzIGFyZ3VtZW50IGxpc3RzIGNo YXJhY3RlcnMgKGV2ZW4gY29udHJvbAotICAgICAgICAgIGNoYXJhY3RlcnMpIHRoYXQgbm9ybWFs bHkgd291bGQgYmUgY29uc2lkZXJlZCBzZXBhcmF0b3JzIHRoYXQKLSAgICAgICAgICB5b3Ugd2Fu dCBpbmNsdWRlZCBpbiB3b3Jkcy4gU28gdGhlIGRvbGxhcnMtYW5kLWNlbnRzIGV4YW1wbGUKLSAg ICAgICAgICBjb3VsZCBhbHNvIGJlIGhhbmRsZWQgdGhpcyB3YXk6Ci0KLSAgXGZ3b3JkKFwlYSxc JW4sLCQuKQotCi0gICAgICAgICAgaW4gb3RoZXIgd29yZHMsIHVzZSB0aGUgZGVmYXVsdCBzZXBh cmF0b3IgbGlzdCwgYnV0IHJlbW92ZSAiJCIKLSAgICAgICAgICBhbmQgIi4iIGZyb20gaXQgc28g dGhleSB3aWxsIGJlIGNvbnNpZGVyZWQgcGFydCBvZiBhIHdvcmQuCi0KLSAgICAgICAgICBOb3Rl IHRoYXQgc2luY2UgOC1iaXQgY2hhcmFjdGVycyBhcmUgbm90IEFTQ0lJLCB0aGV5IGFjdCBhcwot ICAgICAgICAgIGJyZWFrIGNoYXJhY3RlcnMgdW5sZXNzIHlvdSBwdXQgdGhlbSBpbiB0aGUgaW5j bHVkZSBsaXN0LgotICAgICAgICAgIFN1cHBvc2UsIGZvciBleGFtcGxlLCB5b3UgaGF2ZSBhIGZp bGUgaW4gd2hpY2ggZWFjaCBsaW5lIGlzIGEKLSAgICAgICAgICBUYWItc2VwYXJhdGVkIGxpc3Qg b2Ygd29yZHMsIG51bWJlcnMsIG9yIHBocmFzZXMgdGhhdCBtaWdodAotICAgICAgICAgIGNvbnRh aW4gcHVuY3R1YXRpb24sIHNwZWNpYWwgY2hhcmFjdGVycyBsaWtlICQgYW5kIEAsIDgtYml0IGJp dAotICAgICAgICAgIGNoYXJhY3RlcnMsIGV0YyAobGlrZSBzb21ldGhpbmcgdGhhdCBtaWdodCBo YXZlIGJlZW4gZXhwb3J0ZWQKLSAgICAgICAgICBmcm9tIGEgc3ByZWFkc2hlZXQgb3IgZGF0YWJh c2UpLCBhbmQgeW91IHdhbnQgdG8gc3BsaXQgb25seSBvbgotICAgICAgICAgIFRhYjsgaGVyZSBp cyBhIHdheSAoXG0obGluZSkgaXMgYSBsaW5lIHJlYWQgZnJvbSB0aGUgZmlsZSk6Ci0KLXVuZGVm IGtlZXAKLWZvciBcJWkgMSAyNTUgMSB7Ci0gICAgaWYgPT0gXCVpIDkgY29udGludWUKLSAgICAu a2VlcCA6PSBcbShrZWVwKVxmY2hhcihcJWkpCi19Ci13aGlsZSB0cnVlIHsKLSAgICBmcmVhZCAv bGluZSBcJWMgbGluZQotICAgIGlmIGZhaWwgYnJlYWsKLSAgICAuXCVuIDo9IFxmc3BsaXQoXG0o bGluZSksJmEsXDksXG0oa2VlcCkpCi0gICAgLi4uCi19Ci0KLSAgICAgICAgICBUaGlzIHByb2Js ZW0gaXMgYWRkcmVzc2VkIGluIFs1ODFdQy1LZXJtaXQgOS4wLgotCi0gICBcZnNwbGl0KHMxLCZh LHMyLHMzKQotICAgICAgICAgIFRoaXMgaXMgbGlrZSBcZndvcmQoKSwgZXhjZXB0IGluc3RlYWQg b2YgZXh0cmFjdGluZyBhbmQKLSAgICAgICAgICByZXR1cm5pbmcgYSBwYXJ0aWN1bGFyIHdvcmQg ZnJvbSBzdHJpbmcgczEsIGl0IGNvdW50cyB0aGUgd29yZHMKLSAgICAgICAgICBhbmQgb3B0aW9u YWxseSBhc3NpZ25zIHRoZW0gdG8gdGhlIGFycmF5IHdob3NlIGlkZW50aWZ5aW5nCi0gICAgICAg ICAgbGV0dGVyLCBhLXosIGlzIGdpdmVuIGFmdGVyIHRoZSAiJiIgaW4gdGhlIHNlY29uZCBhcmd1 bWVudCwgd2l0aAotICAgICAgICAgIHRoZSBmaXJzdCB3b3JkIGdvaW5nIGludG8gZWxlbWVudCAx LCB0aGUgc2Vjb25kIGludG8gZWxlbWVudCAyLAotICAgICAgICAgIGFuZCBzbyBvbi4gVGhlIHJ1 bGVzIHJlZ2FyZGluZyBicmVhayBhbmQgaW5jbHVkZSBsaXN0cyAoczIgYW5kCi0gICAgICAgICAg czMpIGFyZSBleGFjdGx5IHRoZSBzYW1lIGFzIGZvciBcZndvcmQoKS4gXGZzcGxpdCgpIHJldHVy bnMgdGhlCi0gICAgICAgICAgbnVtYmVyIG9mIHdvcmRzIHRoYXQgd2VyZSBhc3NpZ25lZCwgd2hp Y2ggaXMgZWl0aGVyIHRoZSBudW1iZXIKLSAgICAgICAgICBvZiB3b3JkcyBpbiB0aGUgc3RyaW5n LCBvciB0aGUgZGltZW5zaW9uIG9mIHRoZSBhcnJheSwgd2hpY2hldmVyCi0gICAgICAgICAgaXMg bGVzcy4gSWYgdGhlIGFycmF5IGlzIG5vdCBkZWNsYXJlZCwgXGZzcGxpdCgpIGNyZWF0ZXMgaXQg YW5kCi0gICAgICAgICAgcmV0dXJucyBhIG51bWJlciB3aGljaCBpcyBib3RoIHRoZSBudW1iZXIg b2Ygd29yZHMgaW4gczEgYW5kIHRoZQotICAgICAgICAgIGRpbWVuc2lvbiBvZiB0aGUgbmV3IGFy cmF5LiBFeGFtcGxlczoKLQotICBkZWNsYXJlIFwmd1syMF0gICAgICAgIDsgKE9wdGlvbmFsLikK LSAgLi4uCi0gIHJlYWQgXCVzICAgICAgICAgICAgICAgOyBcJXMgaXMgIlRoaXMgaXMgYSBzZW50 ZW5jZSB3aXRoIHNldmVuIHdvcmRzLiIKLSAgLi4uCi0gIGVjaG8gIlxmc3BsaXQoXCVzKSIgICAg OyBUaGlzIHdvdWxkIHByaW50ICI3Ii4KLSAgZWNobyAiXGZzcGxpdChcJXMsJncpIiA7IERpdHRv LCBhbmQgYWxzbyBhc3NpZ25zIHRoZW0gdG8gYXJyYXkgXCZ3W10uCi0KLSAgZWNobyAiXCZ3Wzdd IiAgICAgICAgICA7IFRoaXMgd291bGQgcHJpbnQgIndvcmRzIi4KLQotICAgICAgICAgIElmIHRo ZSBsaW5lIGNvbnRhaW5lZCBmaWVsZHMgdGhhdCB3ZXJlIGRlbGltaXRlZCBieSBjb2xvbiAoOiks Ci0gICAgICAgICAgeW91IHdvdWxkIHVzZSBcZnNwbGl0KFwlcywmdyw6KS4gSWYgdGhlIGZpZWxk cyB3ZXJlIGRlbGltaXRlZCBieQotICAgICAgICAgIGNvbW1hLCB0aGVuIHlvdSB3b3VsZCB1c2Ug XGZzcGxpdChcJXMsJncseyx9KTsgaW4gdGhpcyBjYXNlIHRoZQotICAgICAgICAgIGxpdGVyYWwg Y29tbWEgbXVzdCBiZSBlbmNsb3NlZCBpbiBicmFjZXMgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbQot ICAgICAgICAgIHRoZSBjb21tYSB0aGF0IHNlcGFyYXRlcyBmdW5jdGlvbiBhcmd1bWVudHMuIFRv IGdldCBhIHdvcmQgY291bnQKLSAgICAgICAgICB3aXRob3V0IGxvYWRpbmcgYW4gYXJyYXksIGJ1 dCBzdGlsbCBzcGVjaWZ5IGJyZWFrIGFuZC9vciBpbmNsdWRlCi0gICAgICAgICAgbGlzdHMsIGxl YXZlIHRoZSBhcnJheSBhcmd1bWVudCBlbXB0eToKLQotICAgZWNobyAiXGZzcGxpdChcJXMsLDop IiA7IFVzZSBjb2xvbiBhcyB0aGUgc2VwYXJhdG9yLgotCi0gICAgICAgICAgV0FSTklOR1M6Ci0K LSAgICAgICAgIDEuIElmIHlvdSB1c2UgdGhlIHNhbWUgYXJyYXkgcmVwZWF0ZWRseSwgXGZzcGxp dCgpIGxlYXZlcyBhbnkKLSAgICAgICAgICAgIHRyYWlsaW5nIG1lbWJlcnMgdW5kaXN0dXJiZWQu IEZvciBleGFtcGxlOgotICBkY2wgXCZ3WzEwXQotICBcZnNwbGl0KDEgMiAzIDQgNSwmdykgOyBT ZXRzIFwmd1sxXSB0aHJ1IFwmd1s1XS4KLSAgXGZzcGxpdChhIGIgYywmdykgICAgIDsgU2V0cyBc JndbMV0tWzNdIGxlYXZpbmcgWzRdLVs1XSBhcyB0aGV5IHdlcmUuCi0KLSAgICAgICAgIDIuIElm IHlvdSBhbGxvdyBcZnNwbGl0IHRvIGNyZWF0ZSB0aGUgYXJyYXkgKGJ5IG5vdCBkZWNsYXJpbmcg aXQKLSAgICAgICAgICAgIGZpcnN0KSwgaXQgaXMgZGltZW5zaW9uZWQgdG8gdGhlIG51bWJlciBv ZiBlbGVtZW50cyBpdCB3YXMKLSAgICAgICAgICAgIGNyZWF0ZWQgd2l0aDoKLSAgXGZzcGxpdCgx IDIgMywmeCkgICAgIDsgQ3JlYXRlcyBhbiBhcnJheSBcJnhbXSB3aXRoIDMgZWxlbWVudHMuCi0g IFxmc3BsaXQoYSBiIGMgZCBlLCZ4KSA7IFRoaXMgb3ZlcmZsb3dzIHRoZSBhcnJheS4KLQotICAg ICAgICAgIFRodXMgaWYgeW91IHdhbnQgdG8gdXNlIFxmc3BsaXQoKSByZXBlYXRlZGx5IG9uIHRo ZSBzYW1lIGFycmF5LAotICAgICAgICAgIGVpdGhlciBkaW1lbnNpb24gaXQgaW4gYWR2YW5jZSB0 byB0aGUgbWF4aW11bSBleHBlY3RlZCBzaXplIChhbmQKLSAgICAgICAgICB0aGVuIHNvbWUgLS0g bW9yZSBlZmZpY2llbnQpLCBvciBlbHNlIGRlc3Ryb3kgaXQgYWZ0ZXIgZWFjaCB1c2UKLSAgICAg ICAgICAodG8gYWxsb3cgZm9yIHVuZXhwZWN0ZWRseSBsYXJnZSBhcmd1bWVudHMpLiBFeGFtcGxl IHVzaW5nIGEKLSAgICAgICAgICBkeW5hbWljIGFycmF5OgotCi0gIGZvcGVuIC9yZWFkIFwlYyBz b21lLWZpbGUKLSAgaWYgZmFpbCAuLi4KLSAgc2V0IGZ1bmN0aW9uIGVycm9yIG9uICAgIDsgU2Vl IFs1ODJdU2VjdGlvbiA3LjEyCi0gIHdoaWxlIHRydWUgewotICAgICAgZGNsIFwmd1tdICAgICAg ICAgICAgOyBEZXN0cm95IFwmW3ddIGVhY2ggdGltZSB0aHJ1IHRoZSBsb29wCi0gICAgICBmcmVh ZCAvbGluZSBcJWMgXCVhCi0gICAgICBpZiBmYWlsIGJyZWFrCi0gICAgICBhc2cgXCV4IFxmc3Bs aXQoXCVhLCZ3KQotICAgICAgaWYgZmFpbCAuLi4KLSAgICAgIDsgKGRvIHdoYXQgeW91IHdhbnQg d2l0aCBcJndbXSBoZXJlLi4uKQotICB9Ci0gIGZjbG9zZSBcJWMKLQotICAgXGZyaW5kZXgoczEs czIsbikKLSAgICAgICAgICBUaGUgIm4iIGFyZ3VtZW50IHRvIFxmcmluZGV4KCkgbm93IHdvcmtz IGNvbnNpc3RlbnRseSAoaW4gbWlycm9yCi0gICAgICAgICAgaW1hZ2UpIHdpdGggdGhlIGNvcnJl c3BvbmRpbmcgXGZpbmRleCgpIGFyZ3VtZW50LiBJbiBlYWNoIGNhc2UsCi0gICAgICAgICAgdGhl IChuLTEpLW1vc3QgY2hhcmFjdGVycyBvZiBzMiBhcmUgaWdub3JlZCBpbiB0aGUgc2VhcmNoOyBm b3IKLSAgICAgICAgICBmaW5kZXgsIHRoaXMgbWVhbnMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9m IHRoZSBzZWFyY2ggaXMgbiAodGhlCi0gICAgICAgICAgZGVmYXVsdCBuIGlzIDEsIGFuZCAwIGlz IHRyZWF0ZWQgbGlrZSAxKS4gRm9yIFxmcmluZGV4KCkgaXQKLSAgICAgICAgICBtZWFucyB0aGUg ZGVmYXVsdCBzdGFydGluZyBwb2ludCBpczoKLQotICBsZW5ndGgoczIpIC0gbGVuZ3RoKHMxKSAt IG4gKHdpdGggdGhlIHNhbWUgZGVmYXVsdHMgZm9yIG4pLgotCi0gICBcZnNlYXJjaChwYXR0ZXJu LHN0cmluZ1sscG9zaXRpb25dKQotICAgICAgICAgIEV4YWN0bHkgbGlrZSBcZmluZGV4KCksIGV4 Y2VwdCB3aXRoIGEgcGF0dGVybiAoc2VlIFs1ODNdU2VjdGlvbgotICAgICAgICAgIDcuOSkgcmF0 aGVyIHRoYW4gYSBsaXRlcmFsIHN0cmluZy4KLQotICAgXGZyc2VhcmNoKHBhdHRlcm4sc3RyaW5n Wyxwb3NpdGlvbl0pCi0gICAgICAgICAgRXhhY3RseSBsaWtlIFxmcmluZGV4KCksIGV4Y2VwdCB3 aXRoIGEgcGF0dGVybiByYXRoZXIgdGhhbiBhCi0gICAgICAgICAgbGl0ZXJhbCBzdHJpbmcuCi0K LSAgICAgICAgICBGaWxlIEZ1bmN0aW9uczoKLQotICAgXGZmaWxlcygpLCBcZm5leHRmaWxlKCkK LSAgICAgICAgICBJdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIGNvcHkgdGhlIGZpbGUgbGlz dCB0byBhbiBhcnJheQotICAgICAgICAgIGJlZm9yZSB1c2UsIGFzIHNob3duIG9uIHAuMzk4IG9m IFs1ODRdVXNpbmcgQy1LZXJtaXQgMm5kCi0gICAgICAgICAgRWRpdGlvbi4gXGZmaWxlcygpIGFu ZCBmcmllbmRzIG5vdyBtYWtlIHRoZWlyIG93biBzYWZlIGNvcGllcyBvZgotICAgICAgICAgIHRo ZSBmaWxlIGxpc3QuIFRodXMgY29uc3RydWN0aW9ucyBsaWtlIHRoZSBmb2xsb3dpbmcgYXJlIG5v dwotICAgICAgICAgIHBvc3NpYmxlOgotCi0gIGZvciBcJWkgMSBcZmZpbGVzKCoudHh0KSAxIHsg c2VuZCBcZm5leHRmaWxlKCkgfQotCi0gICAgICAgICAgVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhl IG5ldyBmdW5jdGlvbiBcZnJmaWxlcygpLAotICAgICAgICAgIFxmZGlyZWN0b3JpZXMoKSwgYW5k IFxmcmRpcmVjdG9yaWVzKCksIGRlc2NyaWJlZCBpbiBbNTg1XVNlY3Rpb24KLSAgICAgICAgICA0 LjExLjMuCi0KLSAgICAgICAgICBCdXQgbm90ZSB0aGF0IGVhY2ggcmVmZXJlbmNlIHRvIFxmbmV4 dGZpbGUoKSBzdGlsbCBnZXRzIHlvdSB0aGUKLSAgICAgICAgICBuZXh0IGZpbGUuIFNvICJpZiBu ZXdlciBcZm5leHRmaWxlKCkgZm9vLnR4dCBzZW5kIFxmbmV4dGZpbGUoKSIKLSAgICAgICAgICBj b21wYXJlcyBvbmUgZmlsZSdzIGFnZSB3aXRoIHRoYXQgb2YgZm9vLnR4dCwgYW5kIHRoZW4gc2Vu ZHMgYW4KLSAgICAgICAgICBlbnRpcmVseSBkaWZmZXJlbnQgZmlsZS4gSWYgeW91J3JlIGdvaW5n IHRvIHJlZmVyIHRvIHRoZSBzYW1lCi0gICAgICAgICAgZmlsZSBtb3JlIHRoYW4gb25jZSwgYXNz aWduIGl0IHRvIGEgdmFyaWFibGU6Ci0KLSAgYXNnIFwlZiBcZm5leHRmaWxlKCkKLSAgaWYgbmV3 ZXIgXCVmIGZvby50eHQgc2VuZCBcJWYKLQotICAgICAgICAgIChub3RlOiBhc3NpZ24sIG5vdCBk ZWZpbmUpLgotCi0gICAgICAgICAgQWxzbyBub3RlIHRoYXQgXGZmaWxlcygpLCBcZnJmaWxlcygp LCBcZmRpcmVjdG9yaWVzKCksIGFuZAotICAgICAgICAgIFxmcmRpcmVjdG9yaWVzKCkgYWxsIG5v dyBhY2NlcHQgb24gb3B0aW9uYWwgMm5kIGFyZ3VtZW50OiB0aGUKLSAgICAgICAgICBuYW1lIG9m IGFuIGFycmF5IHRvIGxvYWQgd2l0aCB0aGUgcmVzdWx0aW5nIGZpbGUgb3IgZGlyZWN0b3J5Ci0g ICAgICAgICAgbGlzdCwgZXhwbGFpbmVkIGluIFs1ODZdU2VjdGlvbiA0LjExLjMuIFNvIHlvdSBj YW4gYWxzbyBsb2FkIGFuCi0gICAgICAgICAgYXJyYXkgd2l0aCB0aGUgZmlsZWxpc3Qgd2hlbiB5 b3UgbmVlZCB0byByZWZlciB0byB0aGUgc2FtZSBmaWxlCi0gICAgICAgICAgbW9yZSB0aGFuIG9u Y2U6Ci0KLSAgZm9yIFwlaSAxIFxmZmlsZXMoKiwmYSkgMSB7IGlmIG5ld2VyIFwmYVtcJWldIGZv by50eHQgc2VuZCBcJmFbXCVpXSB9Ci0KLSAgIFxmcGVybWlzc2lvbnMoZmlsZSkKLSAgICAgICAg ICBSZXR1cm5zIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBwZXJtaXNzaW9ucyBzdHJpbmcgZm9yIHRo ZSBmaWxlLAotICAgICAgICAgIHN1Y2ggYXMgIi1ydy1ydy1yLS0iIGluIFVOSVggb3IgIihSV0Us UldFLFJFLEUpIiBpbiBWTVMuCi0KLSAgIFxmZGlybmFtZShmKQotICAgICAgICAgIEdpdmVuIGEg ZmlsZSBzcGVjaWZpY2F0aW9uIGYsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29tcGxldGUK LSAgICAgICAgICBwYXRobmFtZSBvZiBkaXJlY3RvcnkgdGhlIGZpbGUgaXMgaW4uCi0KLSAgIEFy cmF5IEZ1bmN0aW9uczoKLQotICAgXGZkaW1lbnNpb24oJmEpCi0gICAgICAgICAgUmV0dXJucyB0 aGUgZGltZW5zaW9uIGRlY2xhcmVkIGZvciB0aGUgYXJyYXkgd2hvc2UgaWRlbnRpZnlpbmcKLSAg ICAgICAgICBsZXR0ZXIsIGEteiwgb3Igc3BlY2lhbCBjaGFyYWN0ZXIgIl8iIG9yICJAIiwgaXMg Z2l2ZW4gYWZ0ZXIgdGhlCi0gICAgICAgICAgIiYiIGluIHRoZSBhcmd1bWVudC4gSWYgdGhlIGFy cmF5IGlzIG5vdCBkZWNsYXJlZCwgMCBpcwotICAgICAgICAgIHJldHVybmVkLiBOb3RlIHRoYXQg d2hlbiB1c2VkIHdpdGggdGhlIG1hY3JvIGFyZ3VtZW50IHZlY3RvcgotICAgICAgICAgIGFycmF5 LCBcJl9bXSAoc2VlIFs1ODddU2VjdGlvbiA3LjUpLCB0aGUgdmFsdWUgb2YgdGhpcyBmdW5jdGlv bgotICAgICAgICAgIGlzIG9uZSBsZXNzIHRoYW4gXHYoYXJnYyksIGFuZCB3aGVuIHVzZWQgd2l0 aCB0aGUgQy1LZXJtaXQKLSAgICAgICAgICBjb21tYW5kLWxpbmUgYXJndW1lbnQgdmVjdG9yIGFy cmF5LCBcJkBbXSwgaXQgaXMgZXF1YWwgdG8gdGhlCi0gICAgICAgICAgXHYoYXJncykgdmFyaWFi bGUuIEV4YW1wbGVzOgotCi0gIGVjaG8gXGZkaW1lbnNpb24oJmEpICAgICAgIDsgTm90IGRlY2xh cmVkLgotICAwCi0gIGRlY2xhcmUgXCZhWzEyXSAgICAgICAgICAgIDsgTm93IGl0J3MgZGVjbGFy ZWQuCi0gIGVjaG8gXGZkaW0oJmEpCi0gIDEyCi0KLSAgIFxmYXJyYXlsb29rKHBhdHRlcm4sYXJy YXluYW1lKQotICAgICAgICAgIExvb2tzIGluIHRoZSBnaXZlbiBhcnJheSBmb3IgdGhlIHBhdHRl cm4gYW5kIHJldHVybnMgdGhlIGluZGV4Ci0gICAgICAgICAgb2YgdGhlIGZpcnN0IGVsZW1lbnQg dGhhdCBtYXRjaGVzLCBpZiBhbnksIG9yIC0xIGlmIG5vbmUgbWF0Y2guCi0gICAgICAgICAgVGhl IGFycmF5bmFtZSBjYW4gaW5jbHVkZSBhIHJhbmdlIHNwZWNpZmllciB0byByZXN0cmljdCB0bwot ICAgICAgICAgIHNlYXJjaCB0byBhIHNlZ21lbnQgb2YgdGhlIGFycmF5LCBlLmcuCi0gICAgICAg ICAgXGZhcnJheWxvb2soKnh5eiosJmFbMzI6NjNdKS4gRm9yIGdyZWF0ZXIgZGV0YWlsIHNlZQot ICAgICAgICAgIFs1ODhdU2VjdGlvbiA3LjEwLjcuCi0KLSAgIFxmdGFibGVsb29rKGtleXdvcmQs YXJyYXluYW1lWyxkZWxpbWl0ZXJdKQotICAgICAgICAgIExvb2tzIGluIHRoZSBnaXZlbiAidGFi bGUiLCB3aGljaCBtdXN0IGJlIHNvcnRlZCwgZm9yIHRoZSBnaXZlbgotICAgICAgICAgIGtleXdv cmQuIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0YWJsZSBlbGVtZW50IHRoYXQgdW5pcXVlbHkK LSAgICAgICAgICBtYXRjaGVzIHRoZSBnaXZlbiBrZXl3b3JkLCBvciAtMSBpZiBub25lIG1hdGNo LCBvciAtMiBpZiBtb3JlCi0gICAgICAgICAgdGhhbiAxIG1hdGNoLiBGb3IgZ3JlYXRlciBkZXRh aWwgc2VlIFs1ODldU2VjdGlvbiA3LjEwLjcuCi0KLSAgIE90aGVyIG5ldyBmdW5jdGlvbnM6Ci0K LSAgIFxmaXAyaGV4KHMpCi0gICAgICAgICAgQ29udmVydHMgYSBkb3R0ZWQgZGVjaW1hbCBJUCBh ZGRyZXNzIHRvIGFuIDgtZGlnaXQgaGV4YWRlY2ltYWwKLSAgICAgICAgICBudW1iZXIuIFxmaXAy aGV4KDEyOC41OS4zOS4yKSA9IDgwM2IyNzAyLgotCi0gICBcZmhleDJpcCh4KQotICAgICAgICAg IENvbnZlcnRzIGFuIDgtZGlnaXQgaGV4YWRlY2ltYWwgSVAgYWRkcmVzcyB0byBkb3R0ZWQgZGVj aW1hbAotICAgICAgICAgIGZvcm0sIGUuZy4gXGZoZXgyaXAoODAzYjI3MDIpID0gMTI4LjU5LjM5 LjIuIFRoZSBpbnZlcnNlIG9mCi0gICAgICAgICAgXGZpcDJoZXgoKS4KLQotICAgXGZjb21tYW5k KCkKLSAgIFxmcmF3Y29tbWFuZCgpCi0gICAgICAgICAgVGhlc2UgcnVuIGFuIGV4dGVybmFsIGNv bW1hbmQgYW5kIHJldHVybiBpdHMgb3V0cHV0OyBzZWUKLSAgICAgICAgICBbNTkwXVNlY3Rpb24g NC4yLjguNC4KLQotICAgXGZkaWFsY29udmVydChzKQotICAgICAgICAgIHMgaXMgYSBwaG9uZSBu dW1iZXIgaW4gZWl0aGVyIGxpdGVyYWwgb3IgcG9ydGFibGUgZm9ybWF0IChub3QgYQotICAgICAg ICAgIGRpYWxpbmcgZGlyZWN0b3J5IGVudHJ5IG5hbWUpLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0 aGUgZGlhbAotICAgICAgICAgIHN0cmluZyB0aGF0IHdvdWxkIGFjdHVhbGx5IGJlIHVzZWQgd2hl biBkaWFsaW5nIGZyb20gdGhlIGN1cnJlbnQKLSAgICAgICAgICBsb2NhdGlvbiAoYWZ0ZXIgcHJv Y2Vzc2luZyBjb3VudHJ5IGNvZGUsIGFyZWEgY29kZSwgYW5kIG90aGVyCi0gICAgICAgICAgU0VU IERJQUwgdmFsdWVzKS4KLQotICAgXGZlcnJzdHJpbmcobikKLSAgICAgICAgICBSZXR1cm5zIHRo ZSBzeXN0ZW0gZXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhlIChudW1lcmljKQotICAg ICAgICAgIGVycm9yIGNvZGUgbi4gVU5JWCBhbmQgVk1TIG9ubHkuIFVzZSBpbiBjb25qdW5jdGlv biB3aXRoCi0gICAgICAgICAgXHYoZXJybm8pIG9yIFx2KHBleGl0c3RhdCkuIFNlZSBbNTkxXVNl Y3Rpb24gNC4yLjUgZm9yIGEgdXNhZ2UKLSAgICAgICAgICBleGFtcGxlLiBOb3RlOiBUaGlzIGZ1 bmN0aW9uIGRvZXNuJ3Qgd29yayBpbiBXaW5kb3dzIGJlY2F1c2UKLSAgICAgICAgICB0aGVyZSBp cyBub3QgYSBjb25zaXN0ZW50IGVycm9yLWNvZGUtdG8tbWVzc2FnZSBtYXBwaW5nOyBlcnJvcgot ICAgICAgICAgIGNvZGUgIngiIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBk ZXBlbmRpbmcgb24KLSAgICAgICAgICB3aGV0aGVyIGl0IGNvbWVzIGZyb20gdGhlIEMgcnVudGlt ZSBsaWJyYXJ5LCBXaW5zb2NrLCBhCi0gICAgICAgICAgV2luZG93cy0zMiBBUEksIFRBUEksIGV0 YywKLQotICAgXGZwYXR0ZXJuKHMpCi0gICAgICAgICAgVXNlZCBpbiBJTlBVVCwgUkVJTlBVVCwg YW5kIE1JTlBVVCBjb21tYW5kcyB0byBkZW5vdGUgc2VhcmNoCi0gICAgICAgICAgc3RyaW5ncyB0 aGF0IGFyZSB0byBiZSB0cmVhdGVkIGFzIHBhdHRlcm5zIHJhdGhlciB0aGFuCi0gICAgICAgICAg bGl0ZXJhbGx5LgotCi0gICBBbHNvIHNlZSBbNTkyXVNlY3Rpb24gNy44IG9uIGJ1aWx0LWluIGhl bHAgZm9yIGZ1bmN0aW9ucy4KLQotICA3LjQuIE5ldyBJRiBDb25kaXRpb25zCi0KLSAgIElGIEFW QUlMQUJMRSBmZWF0dXJlIGNvbW1hbmQKLSAgICAgICAgICBFeGVjdXRlcyB0aGUgY29tbWFuZCBp ZiB0aGUgZ2l2ZW4gZmVhdHVyZSBpcyBhdmFpbGFibGUuCi0gICAgICAgICAgUHJlc2VudGx5IHVz ZWQgb25seSB0byBkZXRlcm1pbmUgaWYgc3BlY2lmaWMgYXV0aGVudGljYXRpb24gYW5kCi0gICAg ICAgICAgZW5jcnlwdGlvbiBvcHRpb25zIGFyZSBhdmFpbGFibGUuIFR5cGUgImlmIGF2YWlsYWJs ZSA/IiB0byBzZWUKLSAgICAgICAgICB3aGljaCBmZWF0dXJlcyBtYXkgYmUgdGVzdGVkLgotCi0g ICBJRiBGTE9BVCBmMSBjb21tYW5kCi0gICAgICAgICAgRXhlY3V0ZXMgY29tbWFuZCBpZiBmMSBp cyBhIGxlZ2FsIGZsb2F0aW5nIHBvaW50IG51bWJlciAod2hpY2gKLSAgICAgICAgICBpbmNsdWRl cyBpbnRlZ2VycykuIFVzZSB0aGlzIHRvIHByZXZlcmlmeSBhcmd1bWVudHMgZm9yIHRoZQotICAg ICAgICAgIFxmZnAuLi4oKSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIGZ1bmN0aW9ucywgZS5n LiAiaWYgZmxvYXQKLSAgICAgICAgICBcJTEgZWNobyBcZmZwaW50KFwlMSkiLgotCi0gICBJRiA9 PSBuMSBuMiBjb21tYW5kCi0gICAgICAgICAgU3lub255bSBmb3IgImlmID0iIChudW1lcmljIGVx dWFsaXR5KS4gTm90ZSB0aGF0IGFzIG9mIEMtS2VybWl0Ci0gICAgICAgICAgNy4wLCB0aGlzIGFu ZCBhbGwgb3RoZXIgbnVtZXJpYyBjb21wYXJpc29uIG9wZXJhdG9ycyBhbHNvIHdvcmsKLSAgICAg ICAgICBmb3IgZmxvYXRpbmctcG9pbnQgbnVtYmVycy4KLQotICAgSUYgIT0gbjEgbjIgY29tbWFu ZAotICAgICAgICAgIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGlmIG4xIGFuZCBuMiBhcmUgYm90aCBu dW1iZXJzIG9yIHZhcmlhYmxlcwotICAgICAgICAgIGNvbnRhaW5pbmcgbnVtYmVycyBhbmQgdGhl IHZhbHVlIG9mIG4xIGlzIG5vdCBlcXVhbCB0byB0aGUgdmFsdWUKLSAgICAgICAgICBvZiBuMi4g VGhpcyBpcyBlcXVpdmFsZW50IHRvICJpZiBub3QgPSBuMSBuMiIuCi0KLSAgIElGIDw9IG4xIG4y IGNvbW1hbmQKLSAgICAgICAgICBFeGVjdXRlcyB0aGUgY29tbWFuZCBpZiBuMSBhbmQgbjIgYXJl IGJvdGggbnVtYmVycyBvciB2YXJpYWJsZXMKLSAgICAgICAgICBjb250YWluaW5nIG51bWJlcnMg YW5kIHRoZSB2YWx1ZSBvZiBuMSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KLSAgICAgICAgICB0 aGUgdmFsdWUgb2YgbjIuIFRoaXMgaXMgZXF1aXZhbGVudCB0byAiaWYgbm90ID4gbjEgbjIiLgot Ci0gICBJRiA+PSBuMSBuMiBjb21tYW5kCi0gICAgICAgICAgRXhlY3V0ZXMgdGhlIGNvbW1hbmQg aWYgbjEgYW5kIG4yIGFyZSBib3RoIG51bWJlcnMgb3IgdmFyaWFibGVzCi0gICAgICAgICAgY29u dGFpbmluZyBudW1iZXJzIGFuZCB0aGUgdmFsdWUgb2YgbjEgaXMgZ3JlYXRlciB0aGFuIG9yIGVx dWFsCi0gICAgICAgICAgdG8gdGhlIHZhbHVlIG9mIG4yLiBFcXVpdmFsZW50IHRvICJpZiBub3Qg PCBuMSBuMiIuCi0KLSAgIElGIENPTU1BTkQgd29yZCBjb21tYW5kCi0gICAgICAgICAgRXhlY3V0 ZXMgdGhlIGNvbW1hbmQgaWYgd29yZCBpcyBhIGJ1aWx0LWluIEMtS2VybWl0IGNvbW1hbmQuCi0g ICAgICAgICAgRXhhbXBsZToKLQotICBpZiBub3QgY29tbWFuZCBjb3B5IGRlZmluZSB7IGNvcHkg cnVuIGNvcHkgXCUxIFwlMiB9Ii4KLQotICAgICAgICAgIFRoaXMgZGVmaW5lcyBhIENPUFkgbWFj cm8gdGhhdCBydW5zIGFuIGV4dGVybmFsIENPUFkgY29tbWFuZCBpZgotICAgICAgICAgIENPUFkg aXMgbm90IGFscmVhZHkgYSBidWlsdC1pbiBjb21tYW5kLgotCi0gICBJRiBMT0NBTCBjb21tYW5k Ci0gICAgICAgICAgRXhlY3V0ZXMgdGhlIGNvbW1hbmQgaWYgS2VybWl0IGlzIGluIGxvY2FsIG1v ZGUsIGkuZS4gaWYgaXQgaGFzCi0gICAgICAgICAgYSBTRVQgTElORSwgU0VUIFBPUlQsIG9yIFNF VCBIT1NUIChURUxORVQsIFJMT0dJTiwgZXRjKSBkZXZpY2UKLSAgICAgICAgICBvciBjb25uZWN0 aW9uIG9wZW4uIERvZXMgbm90IGV4ZWN1dGUgdGhlIGNvbW1hbmQgaWYgaW4gcmVtb3RlCi0gICAg ICAgICAgbW9kZS4KLQotICAgSUYgTUFUQ0ggc3RyaW5nIHBhdHRlcm4gY29tbWFuZAotICAgICAg ICAgIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGlmIHRoZSBzdHJpbmcgbWF0Y2hlcyB0aGUgcGF0dGVy bi4gRm9yIGEKLSAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgc3ludGF4IGZvciB0aGUgcGF0 dGVybiwgc2VlIFs1OTNdU2VjdGlvbgotICAgICAgICAgIDQuOS4xLiBJZiB5b3Ugd2FudCB0byB0 ZXN0IGlmIHRoZSBzdHJpbmcgY29udGFpbnMgcGF0dGVybiwgdXNlCi0gICAgICAgICAgSUYgXGZz ZWFyY2gocGF0dGVybixzdHJpbmcpLgotCi0gICBJRiBPUEVOIHsgREVCVUctTE9HLCBTRVNTSU9O LUxPRywgVFJBTlNBQ1RJT04tTE9HLCAuLi4gfSBjb21tYW5kCi0gICAgICAgICAgRXhlY3V0ZXMg dGhlIGNvbW1hbmQgaWYgdGhlIGdpdmVuIGZpbGUgaXMgb3BlbiwgZmFpbHMgaWYgaXQgaXMKLSAg ICAgICAgICBub3Qgb3Blbi4gVHlwZSBJRiBPUEVOID8gZm9yIGEgY29tcGxldGUgbGlzdCBvZiBm aWxlcyB0aGF0IGNhbgotICAgICAgICAgIGJlIGNoZWNrZWQgKGFsbCB0aGUgZmlsZXMgdGhhdCBj YW4gYmUgb3BlbmVkIHdpdGggdGhlIE9QRU4gb3IKLSAgICAgICAgICBMT0cgY29tbWFuZHMpLgot Ci0gICBJRiBRVUlFVCBjb21tYW5kCi0gICAgICAgICAgRXhlY3V0ZXMgdGhlIGNvbW1hbmQgaWYg U0VUIFFVSUVUIGlzIE9OLCBhbmQgZG9lcyBub3QgZXhlY3V0ZSBpdAotICAgICAgICAgIGlmIFNF VCBRVUlFVCBpcyBPRkYuIEV4YW1wbGU6IElGIE5PVCBRVUlFVCBFQ0hPIHsgVGhpcyBpcyBhCi0g ICAgICAgICAgbWVzc2FnZS59LgotCi0gICBJRiBSRUFEQUJMRSBuYW1lCi0gICAgICAgICAgU3Vj Y2VlZHMgaWYgbmFtZSBpcyB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9y eQotICAgICAgICAgIHRoYXQgaXMgcmVhZGFibGUuCi0KLSAgIElGIFdSSVRFQUJMRSBuYW1lCi0g ICAgICAgICAgU3VjY2VlZHMgaWYgbmFtZSBpcyB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmaWxl IG9yIGRpcmVjdG9yeQotICAgICAgICAgIHRoYXQgaXMgd3JpdGFibGUsIGUuZy46Ci0KLSAgaWYg bm90IHdyaXRlYWJsZSBcdihsb2NrZGlyKSBlY2hvIFBsZWFzZSByZWFkIGluc3RhbGxhdGlvbiBp bnN0cnVjdGlvbnMhCi0KLSAgIElGIEZMQUcgY29tbWFuZAotICAgICAgICAgIFRoaXMgdGVzdHMg YSB1c2VyLXNldHRhYmxlIGNvbmRpdGlvbiwgd2hpY2ggY2FuIG1lYW4gYW55dGhpbmcKLSAgICAg ICAgICB5b3UgbGlrZS4gU0VUIEZMQUcgT04gY2F1c2VzIHN1YnNlcXVlbnQgSUYgRkxBRyBjb21t YW5kcyB0bwotICAgICAgICAgIHN1Y2NlZWQ7IFNFVCBGTEFHIE9GRiBjYXVzZXMgdGhlbSB0byBm YWlsLiBPbmUgd2F5IHRvIHVzZSBpdAotICAgICAgICAgIHdvdWxkIGJlIGZvciBkZWJ1Z2dpbmcg eW91ciBzY3JpcHRzOyBwcmVjZWRlIGFueSBkZWJ1Z2dpbmcKLSAgICAgICAgICBzdGF0ZW1lbnRz IHdpdGggSUYgRkxBRy4gVGhlbiBTRVQgRkxBRyBvbiB0byBkZWJ1ZyB5b3VyIHNjcmlwdCwKLSAg ICAgICAgICBTRVQgRkxBRyBPRkYgdG8gcnVuIGl0IHdpdGhvdXQgZGVidWdnaW5nLiBBbm90aGVy IGNvbW1vbiB1c2UgaXMKLSAgICAgICAgICBmb3IgY2F1c2luZyBhbiBpbm5lciBsb29wIHRvIGNh dXNlIGFuIG91dGVyIGxvb3AgdG8gZXhpdC4KLQotICAgSUYgQy1LRVJNSVQgY29tbWFuZAotICAg ICAgICAgIEMtS2VybWl0LCBidXQgbm90IEtlcm1pdCA5NSBvciBNUy1ET1MgS2VybWl0LCBleGVj dXRlcyB0aGUKLSAgICAgICAgICBjb21tYW5kLgotCi0gICBJRiBLLTk1IGNvbW1hbmQKLSAgICAg ICAgICBLZXJtaXQgOTUsIGJ1dCBub3QgQy1LZXJtaXQgb3IgTVMtRE9TIEtlcm1pdCwgZXhlY3V0 ZXMgdGhlCi0gICAgICAgICAgY29tbWFuZC4KLQotICAgSUYgTVMtS0VSTUlUIGNvbW1hbmQKLSAg ICAgICAgICBNUy1ET1MgS2VybWl0LCBidXQgbm90IEMtS2VybWl0IG9yIEtlcm1pdCA5NSwgZXhl Y3V0ZXMgdGhlCi0gICAgICAgICAgY29tbWFuZC4KLQotICA3LjUuIFVzaW5nIE1vcmUgdGhhbiBU ZW4gTWFjcm8gQXJndW1lbnRzCi0KLSAgIFRoZSBcdihhcmdjKSB2YXJpYWJsZSBub3cgZ2l2ZXMg dGhlIGFjdHVhbCBudW1iZXIgb2YgYXJndW1lbnRzLCBldmVuIGlmCi0gICB0aGUgbnVtYmVyIGlz IGdyZWF0ZXIgdGhhbiA5OgotCi0gIEMtS2VybWl0PiBkZWZpbmUgeHggZWNobyBcdihhcmdjKQot ICBDLUtlcm1pdD4geHggYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUg diB3IHggeSB6Ci0gIDI3Ci0KLSAgIFJlbWVtYmVyIHRoYXQgXHYoYXJnYykgaW5jbHVkZXMgdGhl IG5hbWUgb2YgdGhlIG1hY3JvIGl0c2VsZiwgc28gaXQgaXMKLSAgIGFsd2F5cyBhdCBsZWFzdCAx LCBhbmQgaXMgYWx3YXlzIDEgZ3JlYXRlciB0aGFuIHRoZSBhY3R1YWwgbnVtYmVyIG9mCi0gICBh cmd1bWVudHMuIEFzIGluIHZlcnNpb25zIDYuMCBhbmQgZWFybGllciwgaWYgbW9yZSB0aGFuIDkg YXJndW1lbnRzIGFyZQotICAgZ2l2ZW4sIG9ubHkgdGhlIGZpcnN0IG5pbmUgYXJlIGFzc2lnbmVk IHRvIHRoZSB2YXJpYWJsZXMgXCUxLi5cJTkuCi0KLSAgIFRoZSBcJl9bXSBhcnJheSwgZGlzY3Vz c2VkIG9uIHBhZ2UgMzUzIG9mIFs1OTRdVXNpbmcgQy1LZXJtaXQsIDJuZCBlZCwKLSAgIG5vdyBo b2xkcyBhbGwgdGhlIGFyZ3VtZW50cywgdXAgdG8gc29tZSBpbXBsZW1lbnRhdGlvbi1kZXBlbmRl bnQgbGltaXQKLSAgICg2NCBvciBncmVhdGVyKSwgcmF0aGVyIHRoYW4gb25seSB0aGUgZmlyc3Qg OS4gVG8gaWxsdXN0cmF0ZTogdGhlCi0gICBmb2xsb3dpbmcgbWFjcm8gdGVsbHMgdGhlIG51bWJl ciBvZiBhcmd1bWVudHMgaXQgd2FzIGNhbGxlZCB3aXRoIGFuZAotICAgdGhlbiBwcmludHMgdGhl bToKLQotICBkZWZpbmUgc2hvd19hbGxfYXJncyB7Ci0gICAgICBsb2NhbCBcJWkKLSAgICAgIGVj aG8gXCZfWzBdIC0gTnVtYmVyIG9mIGFyZ3VtZW50czogXGZldmFsKFx2KGFyZ2MpLTEpCi0gICAg ICBmb3IgXCVpIDEgXHYoYXJnYyktMSAxIHsgZWNobyBcZmxwYWQoXCVpLDMpLiAiXCZfW1wlaV0i IH0KLSAgfQotCi0gICBXaXRoaW4gYSBtYWNybyBcJl9bMF0sIGxpa2UgXCUwLCBjb250YWlucyB0 aGUgbmFtZSBvZiB0aGUgbWFjcm8uCi0KLSAgIEF0IHRvcCBsZXZlbCwgdGhlIFwmX1tdIGFycmF5 IGlzIGZpbGxlZCBhcyBmb2xsb3dzOgotCi0gICAgICogSWYgdGhlIGZpcnN0IGFyZ3VtZW50IG9u IHRoZSBDLUtlcm1pdCBjb21tYW5kIGxpbmUgd2FzIGEgZmlsZW5hbWUsCi0gICAgICAgb3IgQy1L ZXJtaXQgd2FzIGludm9rZWQgZnJvbSBhICJLZXJiYW5nIiBzY3JpcHQgKFs1OTVdU2VjdGlvbgot ICAgICAgIDcuMTkpLCBlbGVtZW50IDAgY29udGFpbnMgdGhlIGZpbGVuYW1lLCBhbmQgZWxlbWVu dHMgMSB0aHJvdWdoCi0gICAgICAgXHYoYXJnYyktMSBob2xkIHRoZSByZW1haW5pbmcgY29tbWFu ZC1saW5lIGFyZ3VtZW50cy4KLSAgICAgKiBPdGhlcndpc2UgdGhlIHByb2dyYW0gbmFtZSBnb2Vz IGluIGVsZW1lbnQgMCwgYW5kIGVsZW1lbnRzIDEKLSAgICAgICB0aHJvdWdoIFx2KGFyZ2MpLTEg aG9sZCBhbnkgYXJndW1lbnRzIHRoYXQgd2VyZSBpbmNsdWRlZCBhZnRlciAiLS0iCi0gICAgICAg b3IgIj0iCi0KLSAgIFRoZSBuZXcgXCUqIHZhcmlhYmxlLCB3aGVuIHVzZWQgd2l0aGluIGEgbWFj cm8sIGlzIHJlcGxhY2VkIGJ5IHRoZSB0ZXh0Ci0gICB0aGF0IGZvbGxvd2VkIHRoZSBtYWNybyBu YW1lIGluIHRoZSBtYWNybyBpbnZvY2F0aW9uLiBJZiBubyBhcmd1bWVudHMKLSAgIHdlcmUgZ2l2 ZW4sIFwlKiBpcyByZXBsYWNlZCBieSB0aGUgZW1wdHkgc3RyaW5nLiBFeGFtcGxlczoKLQotICBD LUtlcm1pdD4gZGVmaW5lIHh4IGVjaG8gW1wlKl0KLSAgQy1LZXJtaXQ+IGRlZmluZSBcJWEgb29m YQotICBDLUtlcm1pdD4geHgKLSAgW10KLSAgQy1LZXJtaXQ+IHh4IFwlYQotICBbb29mYV0KLSAg Qy1LZXJtaXQ+IHh4IGEKLSAgW2FdCi0gIEMtS2VybWl0PiB4eCBhIGIKLSAgW2EgYl0KLSAgQy1L ZXJtaXQ+IHh4IGEgYiBjCi0gIFthIGIgY10KLSAgQy1LZXJtaXQ+IHh4IGEgYiBjIGQgZSBmIGcg aCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgegotICBbYSBiIGMgZCBlIGYgZyBo IGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6XQotCi0gICBOb3RlIHRoYXQgXCUq IGNhbiBub3QgYmUgdXNlZCBhdCB0b3AgbGV2ZWwsIHNpbmNlIEtlcm1pdCBkb2VzIG5vdCBoYXZl Ci0gICBhY2Nlc3MgdG8gdGhlIHJhdyBjb21tYW5kIGxpbmUgKG9ubHkgdG8gaXRzIGVsZW1lbnRz IHNlcGFyYXRlbHksIGFmdGVyCi0gICB0aGV5IGhhdmUgYmVlbiBwcm9jZXNzZWQgYnkgdGhlIHNo ZWxsIGFuZCB0aGUgQyBsaWJyYXJ5KS4KLQotICAgQy1LZXJtaXQgNy4wIGFsc28gYWRkcyBhIFNI SUZUIGNvbW1hbmQ6Ci0KLSAgIFNISUZUIFsgbnVtYmVyIF0KLSAgICAgICAgICBTaGlmdHMgdGhl IG1hY3JvIGFyZ3VtZW50cyAoZXhjZXB0IGFyZ3VtZW50IDApIHRoZSBnaXZlbiBudW1iZXIKLSAg ICAgICAgICBvZiBwbGFjZXMgdG8gdGhlIGxlZnQgYW5kIGFkanVzdHMgXHYoYXJnYykgYWNjb3Jk aW5nbHkuIFRoZQotICAgICAgICAgIGRlZmF1bHQgbnVtYmVyIGlzIDEuCi0KLSAgIFRvIGlsbHVz dHJhdGUsIHN1cHBvc2UgbWFjcm8gWFhYIGlzIGludm9rZWQgYXMgZm9sbG93czoKLQotICB4eHgg YXJnMSBhcmcyIGFyZzMKLQotICAgVGhlbiBpbnNpZGUgWFhYLCBcJTEgaXMgImFyZzEiLCBcJTIg aXMgImFyZzIiLCBhbmQgXCUzIGlzICJhcmczIi4gQWZ0ZXIKLSAgIGEgU0hJRlQgY29tbWFuZCBp cyBnaXZlbiBpbnNpZGUgWFhYLCB0aGVuIFwlMSBpcyAiYXJnMiIsIFwlMiBpcyAiYXJnMyIsCi0g ICBhbmQgXCUzIGlzIGVtcHR5LiBcJTAgKHRoZSBuYW1lIG9mIHRoZSBtYWNybykgcmVtYWlucyB1 bmNoYW5nZWQuCi0KLSAgIElmIG1vcmUgdGhhbiA5IGFyZ3VtZW50cyB3ZXJlIGdpdmVuLCB0aGVu IGFyZ3VtZW50cyBhcmUgc2hpZnRlZCBpbnRvCi0gICB0aGUgXCUxLi45IHZhcmlhYmxlcyBmcm9t IHRoZSBhcmd1bWVudCB2ZWN0b3IgYXJyYXkuCi0KLSAgIEF0IHRvcCBsZXZlbCwgdGhlIFNISUZU IGNvbW1hbmQgb3BlcmF0ZXMgb24gdGhlIFwmX1tdIGFycmF5IGFuZCBcJTEuLjkKLSAgIHZhcmlh YmxlczsgdGhlIFwmQFtdIGFycmF5IGlzIG5vdCBhZmZlY3RlZC4gU2VlIFs1OTZdU2VjdGlvbiA3 LjE2IGZvcgotICAgZGV0YWlscy4KLQotICAgVGhlIFwlKiB2YXJpYWJsZSBpcyBub3QgYWZmZWN0 ZWQgYnkgdGhlIFNISUZUIGNvbW1hbmQuCi0KLSAgNy42LiBDbGFyaWZpY2F0aW9uIG9mIEZ1bmN0 aW9uIENhbGwgU3ludGF4Ci0KLSAgIFNwYWNlcyBhcmUgbm9ybWFsbHkgc3RyaXBwZWQgZnJvbSB0 aGUgZnJvbnQgYW5kIGJhY2sgb2YgZWFjaCBmdW5jdGlvbgotICAgYXJndW1lbnQ7IHRvIHByZXZl bnQgdGhpcyBlbmNsb3NlIHRoZSBhcmd1bWVudCBpbiBicmFjZXM6Ci0KLSAgXGZzcGxpdChcJWEs JmEseyB9KQotCi0gICBIb3dldmVyLCBmdW5jdGlvbiBjYWxscyB0aGF0IGNvbnRhaW4gc3BhY2Vz IGNhbiBtYWtlIHRyb3VibGUgd2hlbiB0aGUKLSAgIGZ1bmN0aW9uIGlzIHRvIGJlIHVzZWQgaW4g YSAid29yZCIgZmllbGQsIHNpbmNlIHNwYWNlIHNlcGFyYXRlcyB3b3Jkcy4KLSAgIEZvciBleGFt cGxlOgotCi0gIGZvciBcJWkgMSBcZnNwbGl0KFwlYSwmYSx7IH0pIDEgewotICAgIGVjaG8gXCVp LiAiXCZhW1wlaV0iCi0gIH0KLQotICAgSW4gbW9zdCBjYXNlcywgdGhlIHRyb3VibGUgY2FuIGJl IGF2ZXJ0ZWQgYnkgZW5jbG9zaW5nIHRoZSBmdW5jdGlvbgotICAgcmVmZXJlbmNlIGluIGJyYWNl czoKLQotICBmb3IgXCVpIDEge1xmc3BsaXQoXCVhLCZhLHsgfSl9IDEgewotICAgIGVjaG8gXCVp LiAiXCZhW1wlaV0iCi0gIH0KLQotICAgb3IgYnkgcmVwbGFjaW5nIHNwYWNlcyB3aXRoIFwzMiAo dGhlIEFTQ0lJIGNvZGUgZm9yIHNwYWNlKToKLQotICBmb3IgXCVpIDEgXGZzcGxpdChcJWEsJmEs XDMyKSAxIHsKLSAgICBlY2hvIFwlaS4gIlwmYVtcJWldIgotICB9Ci0KLSAgIEJyYWNlcyBhcmUg YWxzbyB1c2VkIGluIGZ1bmN0aW9uIGNhbGxzIHRvIGluZGljYXRlIGdyb3VwaW5nLiBGb3IKLSAg IGV4YW1wbGU6Ci0KLSAgXGZzdWJzdHJpbmcoYWJjZCwyLDIpID0gImJjIgotCi0gICBCdXQgc3Vw cG9zZSAiYWJjZCIgbmVlZGVkIHRvIGNvbnRhaW4gYSBjb21tYToKLQotICBcZnN1YnN0cmluZyhh YixjZCwyLDIpCi0KLSAgIFRoaXMgd291bGQgY2F1c2UgYW4gZXJyb3IsIHNpbmNlICJjZCIgYXBw ZWFycyB0byBiZSB0aGUgc2Vjb25kCi0gICBhcmd1bWVudCwgd2hlbiByZWFsbHkgeW91IHdhbnQg dGhlIGZpcnN0ICIyIiB0byBiZSB0aGUgc2Vjb25kIGFyZ3VtZW50LgotICAgQnJhY2VzIHRvIHRo ZSByZXNjdWU6Ci0KLSAgXGZzdWJzdHJpbmcoe2FiLGNkfSwyLDIpID0gImIsIgotCi0gICBTaW1p bGFybHksIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBhcmUgc3RyaXBwZWQgZnJvbSBlYWNo IGFyZ3VtZW50LAotICAgc286Ci0KLSAgXGZzdWJzdHJpbmcoIGFiY2QgLDIsMikgPSAiYmMiCi0K LSAgIGJ1dCBicmFjZXMgcHJlc2VydmUgdGhlbToKLQotICBcZnN1YnN0cmluZyh7IGFiY2QgfSwy LDIpID0gImFiIgotCi0gICBHaXZlbiB0aGVzZSBzcGVjaWFsIHVzZXMgZm9yIGJyYWNlcywgdGhl cmUgaXMgbm8gd2F5IHRvIHBhc3MgbGl0ZXJhbAotICAgYnJhY2VzIHRvIHRoZSBmdW5jdGlvbiBp dHNlbGYuIEZvciBleGFtcGxlOgotCi0gIFxmc3Vic3RyaW5nKGFie2NkLDIsMikKLQotICAgY2F1 c2VzIGFuIGVycm9yLgotCi0gICBTbyBpZiB5b3UgbmVlZCBhIGZ1bmN0aW9uIHRvIGluY2x1ZGUg YnJhY2VzLCBkZWZpbmUgYSB2YXJpYWJsZQotICAgY29udGFpbmluZyB0aGUgc3RyaW5nIHRoYXQg aGFzIGJyYWNlcy4gRXhhbXBsZToKLQotICBkZWZpbmUgXCVhIGFie2NkCi0gIFxmc3Vic3RyaW5n KFwlYSwyLDIpID0gImJ7IgotCi0gICBJZiB0aGUgc3RyaW5nIGlzIHRvIHN0YXJ0IHdpdGggYSBs ZWFkaW5nIGJyYWNlIGFuZCBlbmQgd2l0aCBhIGNsb3NpbmcKLSAgIGJyYWNlLCB0aGVuIGRvdWJs ZSBicmFjZXMgbXVzdCBhcHBlYXIgYXJvdW5kIHRoZSBzdHJpbmcgKHdoaWNoIGl0c2VsZgotICAg aXMgZW5jbG9zZWQgaW4gYnJhY2VzKToKLQotICBkZWZpbmUgXCVhIHt7e2Zvb319fQotICBcZnN1 YnN0cmluZyhcJWEpID0gIntmb299IgotCi0gICBUaGlzIGFsc28gd29ya3MgZm9yIGFueSBvdGhl ciBraW5kIG9mIHN0cmluZzoKLQotICBkZWZpbmUgXCVhIHt7YWJ7Y2R9fQotICBlY2hvIFxmc3Vi c3RyaW5nKFwlYSkgPSAiYWJ7Y2QiCi0KLSAgNy43LiBBdXRvZG93bmxvYWQgZHVyaW5nIElOUFVU IENvbW1hbmQgRXhlY3V0aW9uCi0KLSAgIEFzIG9mIDYuMSAvIDEuMS4xMiwgQy1LZXJtaXQgY2Fu IGJlIHRvbGQgdG8gbG9vayBmb3IgaW5jb21pbmcgS2VybWl0Ci0gICAob3IgWm1vZGVtKSBwYWNr ZXRzIGR1cmluZyBleGVjdXRpb24gb2YgYW4gSU5QVVQgY29tbWFuZC4gQnkgZGVmYXVsdAotICAg KGZvciBjb25zaXN0ZW5jeSB3aXRoIGVhcmxpZXIgcmVsZWFzZXMpLCB0aGlzIGlzIG5vdCBkb25l LiBZb3UgY2FuCi0gICBlbmFibGUgdGhpcyBmZWF0dXJlIHdpdGg6Ci0KLSAgU0VUIElOUFVUIEFV VE9ET1dOTE9BRCBPTgotCi0gICAoYW5kIGRpc2FibGUgaXQgYWdhaW4gd2l0aCBPRkYuKQotCi0g ICBPbmUgcG9zc2libGUgdXNlIGZvciB0aGlzIGZlYXR1cmUgaXMgYXMgYSBzZXJ2ZXIgbW9kZSB3 aXRoIGEgdGltZQotICAgbGltaXQ6Ci0KLSAgSU5QVVQgMzYwMCBzZWNyZXQtc3RyaW5nLXRvLWVu ZC10aGUtSU5QVVQtY29tbWFuZAotCi0gICBJbiB0aGlzIGV4YW1wbGUsIGFueSBHRVQsIFNFTkQs IG9yIFJFTU9URSBjb21tYW5kcyByZWNlaXZlZCB3aXRoaW4gb25lCi0gICBob3VyICgzNjAwIHNl Y29uZHMpIG9mIHdoZW4gdGhlIElOUFVUIGNvbW1hbmQgd2FzIGlzc3VlZCB3aWxsIGJlCi0gICBl eGVjdXRlZC4gSGVyZSdzIGFub3RoZXIgZXhhbXBsZSwgaW4gd2hpY2ggd2Ugd2FudCB0byBzdGF5 IG9wZW4gdW50aWwKLSAgIDExOjMwcG0sIG9yIHVudGlsIGludGVycnVwdGVkIGJ5IHNldmVuIGNv bnNlY3V0aXZlIEN0cmwtQyAoXDMpCi0gICBjaGFyYWN0ZXJzOgotCi0gIElOUFVUIDIzOjMwOjAw IFwzXDNcM1wzXDNcM1wzCi0KLSAgIFRoZSBJTlBVVCBBVVRPRE9XTkxPQUQgc2V0dGluZyBpcyBk aXNwbGF5ZWQgYnkgU0hPVyBTQ1JJUFRTIG9yIFNIT1cKLSAgIElOUFVULgotCi0gIDcuOC4gQnVp bHQtaW4gSGVscCBmb3IgRnVuY3Rpb25zLgotCi0gICBCZWdpbm5pbmcgaW4gQy1LZXJtaXQgNy4w LCB5b3UgbWF5IG9idGFpbiBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjYWxsaW5nCi0gICBjb252ZW50 aW9ucyBhbmQgcmV0dXJuIHZhbHVlcyBvZiBhbnkgYnVpbHQtaW4gZnVuY3Rpb24sIHN1Y2ggYXMK LSAgIFxmc3Vic3RyaW5nKCksIHdpdGggdGhlIG5ldyBIRUxQIEZVTkNUSU9OIGNvbW1hbmQ7IGdp dmUgdGhlIGZ1bmN0aW9uJ3MKLSAgIG5hbWUgd2l0aG91dCB0aGUgbGVhZGluZyAiXGYiLCBlLmcu ICJoZWxwIGZ1bmMgc3Vic3RyaW5nIi4gWW91IGNhbiB1c2UKLSAgID8sIGNvbXBsZXRpb24sIGFu ZCBhYmJyZXZpYXRpb24gaW4gdGhlIG5vcm1hbCBtYW5uZXIuCi0KLSAgNy45LiBWYXJpYWJsZSBB c3NpZ25tZW50cwotCi0gICAgNy45LjEuIEFzc2lnbm1lbnQgT3BlcmF0b3JzCi0KLSAgIFByb2dy YW1tZXJzIGFjY3VzdG9tZWQgdG8gbGFuZ3VhZ2VzIHN1Y2ggYXMgQyBvciBGb3J0cmFuIG1pZ2h0 IGZpbmQKLSAgIEtlcm1pdCdzIG1ldGhvZCBvZiBhc3NpZ25pbmcgdmFsdWVzIHRvIHZhcmlhYmxl cyB1bm5hdHVyYWwgb3IgYXdrd2FyZC4KLSAgIEJlZ2lubmluZyBpbiBDLUtlcm1pdCA3LjAsIHlv dSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmUKLSAgIG5vdGF0aW9uOgotCi0gLm5h bWUgPSB2YWx1ZSAgICBpcyBlcXVpdmFsZW50IHRvICAgREVGSU5FIG5hbWUgdmFsdWUKLSAubmFt ZSA6PSB2YWx1ZSAgIGlzIGVxdWl2YWxlbnQgdG8gICBBU1NJR04gbmFtZSB2YWx1ZQotIC5uYW1l IDo6PSB2YWx1ZSAgaXMgZXF1aXZhbGVudCB0byAgIEFTU0lHTiBuYW1lIFxmZXZhbCh2YWx1ZSkK LQotICAgV2hlbiB0aGUgY29tbWFuZCBiZWdpbnMgd2l0aCBhIHBlcmlvZCAoLiksIHRoaXMgaW5k aWNhdGVzIGFuCi0gICBhc3NpZ25tZW50LiBUaGUgbmFtZSBjYW4gYmUgYSBtYWNybyBuYW1lLCBh IFwle2RpZ2l0LGxldHRlcn0gdmFyaWFibGUsCi0gICBvciBhbiBhcnJheSBlbGVtZW50LiBUaGVy ZSBjYW4gYmUgc3BhY2UocykgYmV0d2VlbiAiLiIgYW5kIHRoZSBuYW1lLgotICAgRXhhbXBsZXM6 Ci0KLSAgLlwlYSA9IFRoaXMgaXMgYSBzdHJpbmcgIDsgU2FtZSBhcyAiZGVmaW5lIFwlYSBUaGlz IGlzIGEgc3RyaW5nIgotICBlY2hvIFwlYQotICBUaGlzIGlzIGEgc3RyaW5nCi0KLSAgLnh4eCA9 IFwlYSAgICAgICAgICAgICAgIDsgU2FtZSBhcyAiZGVmaW5lIHh4eCBcJWEiCi0gIGVjaG8gXG0o eHh4KQotICBcJWEKLQotICAueHh4IDo9IFwlYSAgICAgICAgICAgICAgOyBTYW1lIGFzICJhc3Np Z24geHh4IFwlYSIKLSAgZWNobyBcbSh4eHgpCi0gIFRoaXMgaXMgYSBzdHJpbmcKLQotICBkZWNs YXJlIFwmYVsyXSAgICAgICAgICAgOyBVc2Ugd2l0aCBhcnJheXMuLi4KLSAgZGVmaW5lIFwlaSAy Ci0gIC5cJmFbMV0gPSBmaXJzdAotICAuXCZhW1wlaV0gPSBzZWNvbmQKLQotICAgVGhlIGZvbGxv d2luZyBzZXF1ZW5jZSBpbGx1c3RyYXRlcyB0aGUgZGlmZmVyZW5jZXMgYW1vbmcgdGhyZWUgbGV2 ZWxzCi0gICBvZiBldmFsdWF0aW9uOgotCi0gIC5cJXggPSAyICAgICAgICAgIDsgRGVmaW5lIGEg dmFyaWFibGUgdG8gaGF2ZSBhIG51bWVyaWMgdmFsdWUKLSAgLlwleSA9ICgzICsgXCV4KSAgOyBE ZWZpbmUgYW5vdGhlciB2YXJpYWJsZSBhcyBhbiBhcml0aG1ldGljIGV4cHJlc3Npb24KLQotICAu eHh4ID0gNCAqIFwleSAgICA7ICI9IiBzaW1wbHkgY29waWVzIHRoZSByaWdodC1oYW5kIHNpZGUu Ci0gIGVjaG8gXG0oeHh4KQotICA0ICogXCV5Ci0KLSAgLnh4eCA6PSA0ICogXCV5ICAgOyAiOj0i IGV2YWx1YXRlcyB0aGUgdmFyaWFibGVzIGZpcnN0LCB0aGVuIGNvcGllcy4KLSAgZWNobyBcbSh4 eHgpCi0gIDQgKiAoMyArIDIpCi0KLSAgLnh4eCA6Oj0gNCAqIFwleSAgOyAiOjo9IiBldmFsdWF0 ZXMgdGhlIGV4cHJlc3Npb24sIHRoZW4gY29waWVzLgotICBlY2hvIFxtKHh4eCkKLSAgMjAKLQot ICAgWW91IGNhbiBhbHNvIHVzZSB0aGlzIHN5bnRheCB0byBjbGVhciAodW5kZWZpbmUpIGEgdmFy aWFibGU6Ci0KLSAgLlwlYSA9IG9vZmEgICAgICAgOyBEZWZpbmUgdGhlIHZhcmlhYmxlCi0gIGVj aG8gIlwlYSIKLSAgIm9vZmEiCi0gIC5cJWEgICAgICAgICAgICAgIDsgQ2xlYXIgdGhlIHZhcmlh YmxlCi0gIGVjaG8gIlwlYSIKLSAgIiIKLQotICAgRXh0cmEgY3JlZGl0OiBDYW4geW91IGd1ZXNz IHdoYXQgaGFwcGVucyBiZWxvdyB3aGVuIHRoZSBmaWxlICJhYmMiIGRvZXMKLSAgIG5vdCBleGlz dD8KLQotICBmb3BlbiAvcmVhZCBcJWMgYWJjCi0gIGlmIGZhaWwgLi4uCi0KLSAgICA3LjkuMi4g TmV3IEFzc2lnbm1lbnQgQ29tbWFuZHMKLQotICAgUmVjYWxsIHRoZSBERUZJTkUgYW5kIEFTU0lH TiBjb21tYW5kcywgYW5kIHRoZWlyIGhpZGRlbiBjb3VudGVycGFydHMsCi0gICBfREVGSU5FIGFu ZCBfQVNTSUdOLiBUaGUgZm9ybWVyIHRha2UgdGhlIHZhcmlhYmxlIG5hbWUgbGl0ZXJhbGx5LCB0 aGUKLSAgIGxhdHRlciBldmFsdWF0ZSB0aGUgdmFyaWFibGUtbmFtZSBmaWVsZCB0byBmb3JtIHRo ZSB2YXJpYWJsZSBuYW1lCi0gICBkeW5hbWljYWxseS4gRXhhbXBsZXM6Ci0KLSAgREVGSU5FIFwl eCBmb28gICAgOyBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgXCV4IHRvICJmb28iLgot ICBERUZJTkUgXCVhIFwleCAgICA7IFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBcJWEg dG8gIlwleCIuCi0gIF9ERUZJTkUgeF9cJWEgXCV4IDsgU2V0cyB0aGUgdmFsdWUgb2YgdGhlIHZh cmlhYmxlIHhfZm9vIHRvICJcJXgiLgotICBBU1NJR04gXCVhIFwleCAgICA7IFNldHMgdGhlIHZh bHVlIG9mIHRoZSB2YXJpYWJsZSBcJWEgdG8gdGhlICJmb28iLgotICBfQVNTSUdOIHhfXCVhIFwl eCA7IFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSB4X2ZvbyB0byAiZm9vIi4KLQotICAg VGhpcyBjb25jZXB0IGhhcyBiZWVuIGNhcnJpZWQgb3ZlciB0byB0aGUgcmVtYWluaW5nIHZhcmlh YmxlLWFzc2lnbm1lbnQKLSAgIGNvbW1hbmRzOiBFVkFMVUFURSwgSU5DUkVNRU5ULCBhbmQgREVD UkVNRU5UOgotCi0gICBFVkFMVUFURSB2YXJpYWJsZW5hbWUgZXhwcmVzc2lvbgotICAgICAgICAg IEV2YWx1YXRlcyB0aGUgYXJpdGhtZXRpYyBleHByZXNzaW9uIGFuZCBhc3NpZ25zIGl0cyB2YWx1 ZSB0byB0aGUKLSAgICAgICAgICB2YXJpYWJsZSB3aG9zZSBuYW1lIGlzIGdpdmVuLiBFeGFtcGxl OiAiZXZhbCBcJWEgMSsxIiBhc3NpZ25zCi0gICAgICAgICAgIjIiIHRvIFwlYS4KLQotICAgX0VW QUxVQVRFIG1ldGFuYW1lIGV4cHJlc3Npb24KLSAgICAgICAgICBFdmFsdWF0ZXMgdGhlIGFyaXRo bWV0aWMgZXhwcmVzc2lvbiBhbmQgYXNzaWducyBpdHMgdmFsdWUgdG8gdGhlCi0gICAgICAgICAg dmFyaWFibGUgd2hvc2UgbmFtZSBpcyBjb21wdXRlZCBmcm9tIHRoZSBnaXZlbiBtZXRhbmFtZS4K LSAgICAgICAgICBFeGFtcGxlOiAiZXZhbCBmb288XCVhPjo6XCUxIFwlMiAqIChcJTMgKyBcJTQp IiBhc3NpZ25zIHRoZQotICAgICAgICAgIHZhbHVlIG9mICJcJTIgKiAoXCUzICsgXCU0KSIgdG8g dGhlIHZhcmlhYmxlIHdob3NlIG5hbWUgaXMKLSAgICAgICAgICBjb21wdXRlZCBmcm9tICJmb288 XCVhPjo6XCUxIi4KLQotICAgSU5DUkVNRU5UIHZhcmlhYmxlbmFtZSBbIGV4cHJlc3Npb24gXQot ICAgICAgICAgIEV2YWx1YXRlcyB0aGUgYXJpdGhtZXRpYyBleHByZXNzaW9uIGFuZCBhZGRzIGl0 cyB2YWx1ZSB0byB0aGUKLSAgICAgICAgICB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgd2hvc2UgbmFt ZSBpcyBnaXZlbi4gRXhhbXBsZTogImluY3JlbWVudAotICAgICAgICAgIFwlYSIuCi0KLSAgIF9J TkNSRU1FTlQgbWV0YW5hbWUgWyBleHByZXNzaW9uIF0KLSAgICAgICAgICBFdmFsdWF0ZXMgdGhl IGFyaXRobWV0aWMgZXhwcmVzc2lvbiBhbmQgYWRkcyBpdHMgdmFsdWUgdG8gdGhlCi0gICAgICAg ICAgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIHdob3NlIG5hbWUgaXMgY29tcHV0ZWQgZnJvbSB0aGUg Z2l2ZW4KLSAgICAgICAgICBtZXRhbmFtZS4gRXhhbXBsZTogIl9pbmNyZW1lbnQgV29yZHM6Olwl MS5jb3VudFtcJTJdIi4KLQotICAgREVDUkVNRU5UIHZhcmlhYmxlbmFtZSBbIGV4cHJlc3Npb24g XQotICAgICAgICAgIEV2YWx1YXRlcyB0aGUgYXJpdGhtZXRpYyBleHByZXNzaW9uIGFuZCBzdWJ0 cmFjdHMgaXRzIHZhbHVlIGZyb20KLSAgICAgICAgICB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxl IHdob3NlIG5hbWUgaXMgZ2l2ZW4uCi0KLSAgIF9ERUNSRU1FTlQgbWV0YW5hbWUgWyBleHByZXNz aW9uIF0KLSAgICAgICAgICBFdmFsdWF0ZXMgdGhlIGFyaXRobWV0aWMgZXhwcmVzc2lvbiBhbmQg c3VidHJhY3RzIGl0cyB2YWx1ZSBmcm9tCi0gICAgICAgICAgdGhlIHZhbHVlIG9mIHRoZSB2YXJp YWJsZSB3aG9zZSBuYW1lIGlzIGNvbXB1dGVkIGZyb20gdGhlIGdpdmVuCi0gICAgICAgICAgbWV0 YW5hbWUuCi0KLSAgIFdBUk5JTkc6IFRoZSBzeW50YXggb2YgdGhlIEVWQUxVQVRFIGNvbW1hbmQg aGFzIGNoYW5nZWQgc2luY2UgQy1LZXJtaXQKLSAgIDYuMCBhbmQgSzk1IDEuMS4xNy4gUHJldmlv dXNseSwgaXQgZGlkIG5vdCBpbmNsdWRlIGEgdmFyaWFibGUgbmFtZSwKLSAgIG9ubHkgYW4gZXhw cmVzc2lvbi4gVG8gcmVzdG9yZSB0aGUgb2xkIGJlaGF2aW9yLCB1c2UgU0VUIEVWQUxVQVRFIE9M RC4KLSAgIFRvIHJldHVybiB0byB0aGUgbmV3IGJlaGF2aW9yIGFmdGVyIHJlc3RvcmluZyB0aGUg b2xkIGJlaGF2aW9yLCB1c2UgU0VUCi0gICBFVkFMVUFURSBORVcuCi0KLSAgIE5PVEU6IFRoZXJl IGFyZSBubyBhbmFsb2dzIHRvIHRoZSAiXyIgY29tbWFuZHMgZm9yIHRoZSBvcGVyYXRvcnMKLSAg IGRlc2NyaWJlZCBpbiBbNTk3XVNlY3Rpb24gNy45LjE7IHRob3NlIG9wZXJhdG9ycyBjYW4gbm90 IGJlIHVzZWQgdG8KLSAgIGFzc2lnbiB2YWx1ZXMgdG8gdmFyaWFibGVzIHdob3NlIG5hbWVzIG11 c3QgYmUgY29tcHV0ZWQuCi0KLSAgNy4xMC4gQXJyYXlzCi0KLSAgIEMtS2VybWl0IDcuMCBhZGRz IGxvdHMgb2YgbmV3IGFycmF5LXJlbGF0ZWQgZmVhdHVyZXMsIGFuZCBncm91cHMgdGhlbQotICAg dG9nZXRoZXIgdW5kZXIgdGhlIE5FVyBBUlJBWSBjb21tYW5kOgotCi0gICBBUlJBWSB7IENMRUFS LCBDT1BZLCBERUNMQVJFLCBERVNUUk9ZLCBSRVNJWkUsIFNIT1csIFNPUlQgfQotCi0gICBJbiBl YWNoIG9mIHRoZSBBUlJBWSBjb21tYW5kcywgd2hlcmV2ZXIgYW4gYXJyYXkgbmFtZSBpcyBleHBl Y3RlZCwKLSAgICJzaG9ydCBmb3JtcyIgbWF5IGJlIHVzZWQuIEZvciBleGFtcGxlLCBhbGwgb2Yg dGhlIGZvbGxvd2luZyBhcmUKLSAgIGFjY2VwdGFibGU6Ci0KLSAgYXJyYXkgc2hvdyBcJmFbXSAg KG9yIFNIT1cgQVJSQVkuLi4pCi0gIGFycmF5IHNob3cgJmFbXQotICBhcnJheSBzaG93IGFbXQot ICBhcnJheSBzaG93ICZhCi0gIGFycmF5IHNob3cgYQotCi0gICBJbiBhZGRpdGlvbiwgcmFuZ2Vz IGFyZSBhY2NlcHRlZCBpbiB0aGUgQVJSQVkgQ09QWSwgQVJSQVkgQ0xFQVIsIEFSUkFZCi0gICBT RVQsIEFSUkFZIFNIT1csIGFuZCBBUlJBWSBTT1JUIGNvbW1hbmRzOgotCi0gIGFycmF5IGNsZWFy IFwmYVsxNl0gICAgIDsgQ2xlYXJzIDE2IHRocnUgZW5kCi0gIGFycmF5IGNsZWFyICZhWzE2XSAg ICAgIDsgRGl0dG8KLSAgYXJyYXkgY2xlYXIgYVsxNl0gICAgICAgOyBEaXR0bwotCi0gIGFycmF5 IGNsZWFyIFwmYVsxNjozMl0gIDsgQ2xlYXJzIDE2IHRocnUgMzIKLSAgYXJyYXkgY2xlYXIgJmFb MTY6MzJdICAgOyBEaXR0bwotICBhcnJheSBjbGVhciBhWzE2OjMyXSAgICA7IERpdHRvCi0KLSAg IFdoZW4gdXNpbmcgYXJyYXkgbmFtZXMgYXMgZnVuY3Rpb24gYXJndW1lbnRzLCB5b3UgbXVzdCBv bWl0IHRoZSAiXCIgYW5kCi0gICB5b3UgbXVzdCBpbmNsdWRlIHRoZSAiJiIuIFlvdSBtYXkgb3B0 aW9uYWxseSBpbmNsdWRlIGVtcHR5IGJyYWNrZXRzLgotICAgRXhhbXBsZXM6Ci0KLSAgXGZzcGxp dChcJWEsYSkgICAgICAgICAgOyBCYWQKLSAgXGZzcGxpdChcJWEsXCZhKSAgICAgICAgOyBCYWQK LSAgXGZzcGxpdChcJWEsJmFbM10pICAgICAgOyBCYWQKLQotICBcZnNwbGl0KFwlYSwmYSkgICAg ICAgICA7IEdvb2QKLSAgXGZzcGxpdChcJWEsJmFbXSkgICAgICAgOyBHb29kCi0KLSAgICA3LjEw LjEuIEFycmF5IEluaXRpYWxpemVycwotCi0gICBCZWdpbm5pbmcgaW4gQy1LZXJtaXQgNy4wLCB5 b3UgbWF5IGluaXRpYWxpemUgYW4gYXJyYXkgLS0gaW4gd2hvbGUgb3IKLSAgIGluIHBhcnQgLS0g aW4gaXRzIGRlY2xhcmF0aW9uOgotCi0gICBbIEFSUkFZIF0gREVDTEFSRSBhcnJheS1uYW1lW3Np emVdIFsgPSBdIFsgdmFsdWUxIFsgdmFsdWUyIFsuLi5dIF0gXQotCi0gICBGb3IgY29tcGF0aWJp bGl0eSB3aXRoIHZlcnNpb25zIDVBIGFuZCA2LjAsIHRoZSBBUlJBWSBrZXl3b3JkIGlzCi0gICBv cHRpb25hbC4gREVDTEFSRSBjYW4gYWxzbyBiZSBzcGVsbGVkIERDTC4KLQotICAgSW5pdGlhbGl6 ZXJzIGFyZSAoYSkgb3B0aW9uYWwsIChiKSBzdGFydCB3aXRoIGVsZW1lbnQgMSwgKGMpIG11c3Qg YmUKLSAgIGVuY2xvc2VkIGluIGJyYWNlcyBpZiB0aGV5IGNvbnRhaW4gc3BhY2VzLCBhbmQgKGQp IGFyZSBldmFsdWF0ZWQKLSAgIGFjY29yZGluZyB0byBub3JtYWwgcnVsZXMgYnkgdGhlIERFQ0xB UkUgY29tbWFuZCBwcmlvciB0byBhc3NpZ25tZW50LgotICAgVGh1cyB0aGUgYXNzaWdubWVudHMg bWFkZSBoZXJlIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBtYWRlIGJ5IHRoZSBBU1NJR04KLSAgIGNv bW1hbmQuIFRoaXMgYWxsb3dzIHlvdSB0byBpbml0aWFsaXplIGFycmF5IGVsZW1lbnRzIGZyb20g dGhlIHZhbHVlcwotICAgb2Ygb3RoZXIgdmFyaWFibGVzLiBJZiB5b3UgYWN0dWFsbHkgd2FudCB0 byBpbml0aWFsaXplIGFuIGFycmF5IGVsZW1lbnQKLSAgIHRvIHZhcmlhYmxlJ3MgbmFtZSwgYXMg b3Bwb3NlZCB0byBpdHMgdmFsdWUsIHVzZSBkb3VibGUgYmFja3NsYXNoZXMgKGFzCi0gICBpbiAi XFwmYSIsICJcXHYodGltZSkiLCBldGMpLgotCi0gICBUaGUgc2l6ZSAoZGltZW5zaW9uKSBvZiB0 aGUgYXJyYXkgaXMgb3B0aW9uYWwuIElmIHRoZSBzaXplIGlzIG9taXR0ZWQsCi0gICBhcyBpbiAi XCZhW10iLCB0aGVuIHRoZSBhcnJheSBzaXplcyBpdHNlbGYgdG8gdGhlIG51bWJlciBvZgotICAg aW5pdGlhbGl6ZXJzOyBpZiB0aGVyZSBhcmUgbm8gaW5pdGlhbGl6ZXJzIHRoZSBhcnJheSBpcyBu b3QgZGVjbGFyZWQKLSAgIG9yLCBpZiBpdCB3YXMgZGVjbGFyZWQgcHJldmlvdXNseSwgaXQgaXMg ZGVzdHJveWVkLiBJZiBhIHNpemUgaXMgZ2l2ZW4sCi0gICBhbnkgZXh0cmEgZWxlbWVudHMgaW4g dGhlIGluaXRpYWxpemF0aW9uIGxpc3QgYXJlIGRpc2NhcmRlZCBhbmQKLSAgIGlnbm9yZWQuCi0K LSAgIE5PVEU6IFVubGlrZSBpbiBDLCB0aGUgbGlzdCBvZiBpbml0aWFsaXplcnMgaXMgTk9UIGVu Y2xvc2VkIGluIGJyYWNlcy4KLSAgIEluc3RlYWQsIGJyYWNlcyBhcmUgdXNlZCB0byBncm91cCBt dWx0aXBsZSB3b3JkcyB0b2dldGhlci4gU286Ci0KLSAgQVJSQVkgREVDTEFSRSBcJmFbXSA9IHsg b25lIHR3byB0aHJlZSB9Ci0KLSAgIHdvdWxkIGNyZWF0ZSBhbiBhcnJheSB3aXRoIHR3byBlbGVt ZW50cyAoMCBhbmQgMSksIHdpdGggZWxlbWVudCAxCi0gICBoYXZpbmcgdGhlIHZhbHVlICIgb25l IHR3byB0aHJlZSAiLgotCi0gICBFeGFtcGxlczoKLQotICAgQVJSQVkgREVDTEFSRSBcJmFbMTZd Ci0gICAgICAgICAgRGVjbGFyZXMgdGhlIGFycmF5IFwmYSB3aXRoIDE3IGVsZW1lbnRzICgwIHRo cm91Z2ggMTYpLCBpbiB3aGljaAotICAgICAgICAgIGFsbCBlbGVtZW50cyBhcmUgaW5pdGlhbGx5 IGVtcHR5LiBJZiB0aGUgYXJyYXkgXCZhW10gZXhpc3RlZAotICAgICAgICAgIGJlZm9yZSwgdGhl IGVhcmxpZXIgY29weSBpcyBkZXN0cm95ZWQuCi0KLSAgIEFSUkFZIERFQ0xBUkUgJmFbMTZdCi0g ICBBUlJBWSBERUNMQVJFIGFbMTZdCi0gICBBUlJBWSBEQ0wgXCZhWzE2XQotICAgQVJSQVkgRENM ICZhWzE2XQotICAgQVJSQVkgRENMIGFbMTZdCi0gICBERUNMQVJFIFwmYVsxNl0KLSAgIERFQ0xB UkUgJmFbMTZdCi0gICBERUNMQVJFIGFbMTZdCi0gICBEQ0wgXCZhWzE2XQotICAgRENMICZhWzE2 XQotICAgRENMIGFbMTZdCi0gICAgICAgICAgQWxsIG9mIHRoZSBhYm92ZSBhcmUgdGhlIHNhbWUg YXMgdGhlIGZpcnN0IGV4YW1wbGUuCi0KLSAgIEFSUkFZIERFQ0xBUkUgXCZhWzE2XSA9IGFscGhh IGJldGEge2dhbW1hIGRlbHRhfQotICAgICAgICAgIERlY2xhcmVzIHRoZSBhcnJheSBcJmEgd2l0 aCAxNyBlbGVtZW50cyAoMCB0aHJvdWdoIDE2KSwKLSAgICAgICAgICBpbml0aWFsaXppbmcgXCZh WzFdIHRvICJhbHBoYSIsIFwmYVsyXSB0byAiYmV0YSIsIGFuZCBcJmFbM10gdG8KLSAgICAgICAg ICAiZ2FtbWEgZGVsdGEiLiBUaGUgcmVtYWluaW5nIGVsZW1lbnRzIGFyZSBlbXB0eS4KLQotICAg QVJSQVkgREVDTEFSRSBcJmFbXSA9IGFscGhhIGJldGEge2dhbW1hIGRlbHRhfQotICAgICAgICAg IFNhbWUgYXMgdGhlIHByZXZpb3VzIGV4YW1wbGUsIGJ1dCB0aGUgYXJyYXkgaXMgYXV0b21hdGlj YWxseQotICAgICAgICAgIGRpbWVuc2lvbmVkIHRvIDMuCi0KLSAgIEFSUkFZIERFQ0xBUkUgXCZh WzNdID0gYWxwaGEgYmV0YSB7Z2FtbWEgZGVsdGF9IGVwc2lsb24gemV0YQotICAgICAgICAgIFRv byBtYW55IGluaXRpYWxpemVyczsgb25seSB0aGUgZmlyc3QgdGhyZWUgYXJlIGtlcHQuCi0KLSAg IEFSUkFZIERFQ0xBUkUgXCZhWzBdCi0gICBBUlJBWSBERUNMQVJFIFwmYVtdCi0gICBBUlJBWSBE RUNMQVJFICZhW10KLSAgIEFSUkFZIERFQ0xBUkUgJmEKLSAgIEFSUkFZIERFQ0xBUkUgYQotICAg REVDTEFSRSBcJlswXQotICAgREVDTEFSRSBhCi0gICBEQ0wgYQotICAgICAgICAgIEFsbCBvZiB0 aGVzZSBhcmUgZXF1aXZhbGVudC4gRWFjaCBkZXN0cm95cyBcJmFbXSBpZiBpdCBleGlzdHMuCi0g ICAgICAgICAgRGVjbGFyaW5nIGFuIGFycmF5IHdpdGggYSBkaW1lbnNpb24gb2YgMCBpcyB0aGUg c2FtZSBhcyBBUlJBWQotICAgICAgICAgIERFU1RST1kgYXJyYXluYW1lLgotCi0gICBBUlJBWSBE RUNMQVJFIFwmYVtdID0gXCUxIFwlMiBcJTMKLSAgICAgICAgICBEZWNsYXJlcyB0aGUgYXJyYXkg XCZhIHdpdGggMyBlbGVtZW50cyAoMCB0aHJvdWdoIDMpLAotICAgICAgICAgIGluaXRpYWxpemlu ZyBcJmFbMV0gdG8gdGhlIHZhbHVlIG9mIFwlMSwgXCZhWzJdIHRvIHRoZSB2YWx1ZSBvZgotICAg ICAgICAgIFwlMiwgYW5kIFwmYVszXSB0byB0aGUgdmFsdWUgb2YgXCUzLiBJbiB0aGlzIGNhc2Us IGFueSByZWZlcmVuY2UKLSAgICAgICAgICB0byBvbmUgb2YgdGhlc2UgYXJyYXkgZWxlbWVudHMg aXMgcmVwbGFjZWQgYnkgdGhlIHZhbHVlIG9mIHRoZQotICAgICAgICAgIGNvcnJlc3BvbmRpbmcg XCVuIHZhcmlhYmxlIGF0IHRoZSB0aW1lIHRoZSBkZWNsYXJhdGlvbiB3YXMKLSAgICAgICAgICBl eGVjdXRlZCAoaW1tZWRpYXRlIGV2YWx1YXRpb247IHRoZSBhcnJheSBlbGVtZW50J3MgdmFsdWUg ZG9lcwotICAgICAgICAgIG5vdCBjaGFuZ2UgaWYgdGhlIGluaXRpYWxpemVyIHZhcmlhYmxlJ3Mg dmFsdWUgY2hhbmdlcykuCi0KLSAgIEFSUkFZIERFQ0xBUkUgXCZhW10gPSBcXCUxIFxcJTIgXFwl MwotICAgICAgICAgIERlY2xhcmVzIHRoZSBhcnJheSBcJmEgd2l0aCAzIGVsZW1lbnRzICgwIHRo cm91Z2ggMyksCi0gICAgICAgICAgaW5pdGlhbGl6aW5nIFwmYVsxXSB0byB0aGUgc3RyaW5nICJc JTEiLCBcJmFbMl0gdG8gIlwlMiIsIGFuZAotICAgICAgICAgIFwmYVszXSB0byAiXCUzIi4gSW4g dGhpcyBjYXNlIGFueSByZWZlcmVuY2UgdG8gb25lIG9mIHRoZXNlCi0gICAgICAgICAgYXJyYXkg ZWxlbWVudHMgaXMgcmVwbGFjZWQgYnkgdGhlIENVUlJFTlQgdmFsdWUgb2YgdGhlCi0gICAgICAg ICAgY29ycmVzcG9uZGluZyBcJW4gdmFyaWFibGUgKGRlZmVycmVkIGV2YWx1YXRpb24gLS0gdGhl IGFycmF5Ci0gICAgICAgICAgZWxlbWVudCdzIHZhbHVlIGZvbGxvd3MgdGhlIHZhbHVlIG9mIHRo ZSBpbml0aWFsaXplciB2YXJpYWJsZSkuCi0KLSAgIFRoZSBlcXVhbCBzaWduICg9KSBwcmVjZWRp bmcgdGhlIGluaXRpYWxpemVyIGxpc3QgaXMgb3B0aW9uYWwsIGJ1dCBpcwotICAgcmVjb21tZW5k ZWQgZm9yIGNsYXJpdHkuIElmIHlvdSBuZWVkIHRvIGluaXRpYWxpemUgZWxlbWVudCAxIHRvIGEK LSAgIGxpdGVyYWwgZXF1YWwgc2lnbiwgdXNlIHR3byBvZiB0aGVtLCBzZXBhcmF0ZWQgYnkgYSBz cGFjZSwgYXMgaW4gdGhpcwotICAgZXhhbXBsZToKLQotICBBUlJBWSBERUNMQVJFIFwmYVtdID0g PSArIC0gKiAvCi0KLSAgIFJlbWVtYmVyLCBlbGVtZW50IDAgaXMgbm90IGluaXRpYWxpemVkIGJ5 IHRoZSBERUNMQVJFIGNvbW1hbmQuIFRvCi0gICBpbml0aWFsaXplIGVsZW1lbnQgMCwgdXNlIGEg cmVndWxhciBERUZJTkUgb3IgQVNTSUdOIGNvbW1hbmQ6Ci0KLSAgQVJSQVkgREVDTEFSRSBcJmFb XSBvbmUgdHdvIHRocmVlIGZvdXIgZml2ZSBzaXggc2V2ZW4gZWlnaHQgbmluZQotICBERUZJTkUg XCZhWzBdIHplcm8KLQotICAgRmluYWxseSwgcmVtZW1iZXIgdGhhdCBldmVyeSBjb21tYW5kIGxl dmVsIGhhcyBpdHMgb3duIGxvY2FsIGFycmF5LAotICAgXCZfW10sIGNvbnRhaW5pbmcgYWxsIHRo ZSBtYWNybyBhcmd1bWVudHMgKFwlMCwgXCUxLCAuLi4pIGZvciB0aGF0Ci0gICBsZXZlbC4gU2Vl IFs1OThdU2VjdGlvbiA3LjUgZm9yIGRldGFpbHMuCi0KLSAgICA3LjEwLjIuIFR1cm5pbmcgYSBT dHJpbmcgaW50byBhbiBBcnJheSBvZiBXb3JkcwotCi0gICBUaGUgXGZzcGxpdChzMSwmYSxzMixz MykgZnVuY3Rpb24gYXNzaWducyB0aGUgd29yZHMgb2Ygc3RyaW5nIHMxIHRvCi0gICBzdWNjZXNz aXZlIGVsZW1lbnRzIG9mIHRoZSBhcnJheSAoYmVnaW5uaW5nIHdpdGggZWxlbWVudCAxKSB3aG9z ZQotICAgaWRlbnRpZnlpbmcgbGV0dGVyLCBhLXosIGlzIGdpdmVuIGFmdGVyIHRoZSAiJiIgaW4g dGhlIHNlY29uZCBhcmd1bWVudCwKLSAgIHVzaW5nIGJyZWFrIGFuZCBpbmNsdWRlIGNoYXJhY3Rl cnMgZ2l2ZW4gaW4gczIgYW5kIHMzLiBTZWUgWzU5OV1TZWN0aW9uCi0gICA3LjMgZm9yIGRldGFp bHMuCi0KLSAgICA3LjEwLjMuIEFycmF5cyBvZiBGaWxlbmFtZXMKLQotICAgU2VlIFs2MDBdU2Vj dGlvbiA0LjExLjMgZm9yIG5ld3MgYWJvdXQgaG93IFxmZmlsZXMoKSBhbmQgcmVsYXRlZAotICAg ZnVuY3Rpb25zIGNhbiBhc3NpZ24gYSBsaXN0IG9mIGZpbGVuYW1lcyB0byBhbiBhcnJheS4gVG8g cmVjYXBpdHVsYXRlCi0gICBicmllZmx5IGhlcmU6Ci0KLSAgXGZmaWxlcygqLCZhKQotCi0gICBh c3NpZ25zIGFsbCBmaWxlcyB0aGF0IG1hdGNoIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgYXJy YXkgZGVub3RlZCBieQotICAgdGhlIHNlY29uZCBhcmd1bWVudC4gSWYgdGhlIGFycmF5IGhhcyBu b3QgYmVlbiBkZWNsYXJlZCwgaXQgaXMgZGVjbGFyZWQKLSAgIGF1dG9tYXRpY2FsbHksIHdpdGgg ZXhhY3RseSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG5lZWRlZCB0byBob2xkIHRoZQotICAgZmls ZSBsaXN0OyBpZiBpdCB3YXMgcHJldmlvdXNseSBkZWNsYXJlZCwgaXQgaXMgZGVzdHJveWVkIGFu ZCByZXVzZWQuCi0gICBUaGUgZmlsZW5hbWVzIGFyZSBhc3NpZ25lZCBzdGFydGluZyBhdCBhcnJh eSBlbGVtZW50IDEuIEVsZW1lbnQgMCBob2xkcwotICAgdGhlIG51bWJlciBvZiBmaWxlcyBpbiB0 aGUgbGlzdC4KLQotICAgVGhlIERJUkVDVE9SWSBjb21tYW5kIChbNjAxXVNlY3Rpb24gNC41LjEp IGNhbiBhbHNvIGNyZWF0ZSBmaWxlbmFtZQotICAgYXJyYXlzIGlmIHlvdSBnaXZlIGl0IHRoZSAv QVJSQVk6IHN3aXRjaDsgdGhpcyBhbGxvd3Mgc2VsZWN0aW9uCi0gICBjcml0ZXJpYSBiZXlvbmQg d2hldGhlciB0aGUgZmlsZW5hbWUgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4KLQotICAgQWxs IGZ1bmN0aW9ucyBhbmQgY29tbWFuZHMgdGhhdCBjcmVhdGUgZmlsZW5hbWUgYXJyYXlzIHN0b3Jl IHRoZSBudW1iZXIKLSAgIG9mIGZpbGVuYW1lcywgbiwgYXMgZWxlbWVudCAwIG9mIHRoZSBhcnJh eSwgYW5kIHRoZSBmaWxlbmFtZXMgYXMKLSAgIGVsZW1lbnRzIDEgdGhyb3VnaCBuLgotCi0gICAg Ny4xMC40LiBBdXRvbWF0aWMgQXJyYXlzCi0KLSAgIEluIGEgY29tbWFuZCBmaWxlIG9yIG1hY3Jv LCB5b3UgY2FuIG5vdyBoYXZlIGxvY2FsIChhdXRvbWF0aWMpIGFycmF5cy4KLSAgIEp1c3QgZ2l2 ZSB0aGUgbmFtZSBmb2xsb3dlZCBieSBlbXB0eSBzdWJzY3JpcHQgYnJhY2tldHMgKG5vIHNwYWNl cwotICAgaW5zaWRlIHRoZSBicmFja2V0cyBwbGVhc2UpIGluIGEgTE9DQUwgY29tbWFuZCwgYW5k IHRoZW4gZGVjbGFyZSB0aGUKLSAgIGFycmF5OgotCi0gIExPQ0FMIFwlYSBcJmFbXSBvb2ZhCi0g IEFSUkFZIERFQ0xBUkUgXCZhWzMyXSA9IHZhbHVlMSB2YWx1ZTIgdmFsdWUzIC4uLgotCi0gICBU aGlzIGRlY2xhcmVzIHRoZSBzY2FsYXIgdmFyaWFibGUgXCVhLCB0aGUgYXJyYXkgXCZhW10sIGFu ZCB0aGUgbWFjcm8KLSAgIG5hbWUgIm9vZmEiIHRvIGJlIGxvY2FsLCBhbmQgdGhlbiBkZWNsYXJl cyB0aGUgbmV3IGxvY2FsIGNvcHkgb2YgXCZhW10KLSAgIHdpdGggMzIgZWxlbWVudHMsIHBlcmhh cHMgYXNzaWduaW5nIHNvbWUgaW5pdGlhbCB2YWx1ZXMuIFdoZW4gQy1LZXJtaXQKLSAgIGV4aXRz IGZyb20gdGhlIGNvbW1hbmQgZmlsZSBvciBtYWNybyBjb250YWluaW5nIHRoZXNlIGNvbW1hbmQs IHRoZQotICAgcHJldmlvdXMgXCZhW10gYXJyYXkgaXMgcmVzdG9yZWQgKGFuZCBpZiB0aGVyZSB3 YXMgbm8gXCZhW10gYXQgYW55Ci0gICBoaWdoZXIgbGV2ZWwsIHRoaXMgd2lsbCBzdGlsbCBiZSB0 cnVlKS4gVGhlIHByb2Nlc3MgY2FuIGJlIHJlcGVhdGVkIHRvCi0gICBhbnkgbGV2ZWwuIFRodXMg aXQgaXMgbm93IHNhZmUgdG8gd3JpdGUgc2NyaXB0cyBvciBtYWNyb3MgY29udGFpbmluZwotICAg YXJyYXlzIHdpdGhvdXQgZGFuZ2VyIG9mIGludGVyZmVyaW5nIHdpdGggZ2xvYmFsIGFycmF5cyBv ZiB0aGUgc2FtZQotICAgbmFtZS4KLQotICAgSnVzdCBhcyBzY2FsYXJzIGFyZSBpbmhlcml0ZWQg YnkgbG93ZXIgY29tbWFuZCBsZXZlbHMsIHNvIGFyZSBhcnJheXMuCi0gICBTbywgZm9yIGV4YW1w bGUsIGlmIFwmYVtdIGlzIGRlY2xhcmVkIGF0IHRvcCBsZXZlbCwgYWxsIGxvd2VyIGxldmVscwot ICAgd2lsbCBzZWUgaXQgdW5sZXNzIHRoZXkgaW5jbHVkZSBhICJsb2NhbCBcJmFbXSIgc3RhdGVt ZW50LCBpbiB3aGljaAotICAgY2FzZSBhbGwgbGV2ZWxzIGF0IGFuZCBiZW5lYXRoIHRoZSBsZXZl bCB3aGVyZSB0aGUgTE9DQUwgc3RhdGVtZW50IHdhcwotICAgZXhlY3V0ZWQgd2lsbCBzZWUgdGhl IGxvY2FsIGNvcHkuIFRoaXMgdG9vIGNhbiBiZSByZXBlYXRlZCB0byBhbnkKLSAgIGxldmVsLgot Ci0gICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IERFQ0xBUkUgYW4gYXJyYXkgYXQgYSBsb3dl ciBjb21tYW5kIGxldmVsCi0gICB3aXRob3V0IGFsc28gbWFraW5nIGl0IExPQ0FMLCB0aGlzIHJl cGxhY2VzIHRoZSBjb3B5IHRoYXQgd2FzIGRlY2xhcmVkCi0gICBhdCB0aGUgbG93ZXN0IGNvbW1h bmQgbGV2ZWwgYWJvdmUgdGhpcyBvbmUuCi0KLSAgICA3LjEwLjUuIFNvcnRpbmcgQXJyYXlzCi0K LSAgIEFsdGhvdWdoIGFycmF5cyBjYW4gYmUgc29ydGVkIHVzaW5nIEZPUiBsb29wcyBhcyBzaG93 biBvbiBwYWdlIDM4MyBvZgotICAgVXNpbmcgQy1LZXJtaXQsIDJuZCBFZC4sIHRoaXMgaW52b2x2 ZXMgcXVpdGUgYSBiaXQgb2YgcmVwZXRpdGl2ZQotICAgaW50ZXJwcmV0YXRpb24gYnkgdGhlIGNv bW1hbmQgcGFyc2VyLCBhbmQgc28gY2FuIGJlIHNsb3cgZm9yIGxhcmdlCi0gICBhcnJheXMuIEZv ciB0aGlzIHJlYXNvbiwgQy1LZXJtaXQgNy4wIGFkZHMgYSBidWlsdC1pbiBTT1JUIGNvbW1hbmQ6 Ci0KLSAgIEFSUkFZIFNPUlQgWyBzd2l0Y2hlcyBdIGFycmF5IFsgYXJyYXkyIF0KLSAgICAgICAg ICBTb3J0cyB0aGUgZ2l2ZW4gYXJyYXkgaW4gcGxhY2UuIFNvcnRpbmcgaXMgc3RyaWN0bHkgbGV4 aWNhbAotICAgICAgICAgIChzdHJpbmcgYmFzZWQpLiBUaGUgYXJyYXkgbmFtZSBjYW4gYmUgZ2l2 ZW4gZnVsbHksIGUuZy4gIlwmYVtdIiwKLSAgICAgICAgICBvciB0aGUgIlwiIGFuZC9vciAiJiIg YW5kL29yIGJyYWNrZXRzIGNhbiBiZSBvbWl0dGVkLCBlLmcuCi0gICAgICAgICAgImFycmF5IHNv cnQgXCZhW10iLCAic29ydCAmYSIsICJzb3J0IGEiLiBBbHNvLCBhIHJhbmdlIGNhbiBiZQotICAg ICAgICAgIGluZGljYXRlZCBpbiB0aGUgYnJhY2tldHMgYXMgbm90ZWQgaW4gWzYwMl1TZWN0aW9u IDcuMTAsIHRvCi0gICAgICAgICAgcmVzdHJpY3QgdGhlIHNvcnQgdG8gYSByYW5nZSBvZiBlbGVt ZW50cyAoZXF1aXZhbGVudCB0byB0aGUKLSAgICAgICAgICAvUkFOR0Ugc3dpdGNoLCBkZXNjcmli ZWQganVzdCBiZWxvdyksIGUuZy4gImFycmF5IHNvcnQKLSAgICAgICAgICAmYVsyMDozMF0iLgot Ci0gICBBIHNlY29uZCBhcnJheSBtYXkgYmUgc3BlY2lmaWVkLiBJZiBpdCBpcywgYW5kIGlmIGl0 IGlzIGF0IGxlYXN0IGFzIGJpZwotICAgYXMgdGhlIGZpcnN0IGFycmF5LCBpdCBpcyBzb3J0ZWQg YWNjb3JkaW5nIHRvIHRoZSBmaXJzdCBhcnJheS4gRm9yIGEKLSAgIHNhbXBsZSBhcHBsaWNhdGlv biwgc2VlIFs2MDNdU2VjdGlvbiA3LjEwLjEwLgotCi0gICBTZWUgWzYwNF1TZWN0aW9uIDEuNSBm b3IgYW4gZXhwbGFuYXRpb24gb2Ygc3dpdGNoZXMuIFRoZSBvcHRpb25hbAotICAgc3dpdGNoZXMg YXJlOgotCi0gICAvQ0FTRTp7T04sT0ZGfQotICAgICAgICAgIC9DQVNFOk9OIG1lYW5zIHRoYXQg YWxwaGFiZXRpYyBjYXNlIGlzIHNpZ25pZmljYW50IGluCi0gICAgICAgICAgY29tcGFyaXNvbnM7 IHVwcGVyY2FzZSBsZXR0ZXJzIGFyZSBzb3J0ZWQgYmVmb3JlIGxvd2VyY2FzZSBvbmVzLgotICAg ICAgICAgIC9DQVNFOk9GRiBtZWFucyBjYXNlIGlzIGlnbm9yZWQsIGUuZy4gIkEiIGlzIHRoZSBz YW1lIGFzICJhIi4gSWYKLSAgICAgICAgICB0aGlzIHN3aXRjaCBpcyBub3QgZ2l2ZW4sIHNvcnRp bmcgaXMgYWNjb3JkaW5nIHRoZSBjdXJyZW50IFNFVAotICAgICAgICAgIENBU0Ugc2V0dGluZy4K LQotICAgL0tFWTpuCi0gICAgICAgICAgQ29tcGFyaXNvbiBiZWdpbnMgYXQgcG9zaXRpb24gbigx LWJhc2VkKSBpbiBlYWNoIHN0cmluZy4gSWYgbm8KLSAgICAgICAgICBrZXkgaXMgZ2l2ZW4sIHRo ZSBlbnRpcmUgc3RyaW5ncyBhcmUgY29tcGFyZWQuIE9ubHkgb25lIGtleSBjYW4KLSAgICAgICAg ICBiZSBnaXZlbi4gSWYgYW4gYXJyYXkgZWxlbWVudCBpcyBzaG9ydGVyIHRoYW4gdGhlIGtleSB2 YWx1ZSwgbiwKLSAgICAgICAgICB0aGF0IGVsZW1lbnQgaXMgY29uc2lkZXJlZCBlbXB0eSBmb3Ig Y29tcGFyaXNvbiBwdXJwb3NlcywgYW5kCi0gICAgICAgICAgdGhlcmVmb3JlIGxleGljYWxseSBs ZXNzIHRoYW4gYW55IGVsZW1lbnQgYXQgbGVhc3QgbmNoYXJhY3RlcnMKLSAgICAgICAgICBsb25n LgotCi0gICAvTlVNRVJJQwotICAgICAgICAgIElmIHRoaXMgc3dpdGNoIGlzIGluY2x1ZGVkLCBp dCBtZWFucyBzb3J0aW5nIHNob3VsZCBiZSBudW1lcmljLAotICAgICAgICAgIHJhdGhlciB0aGFu IGxleGljYWwuIFRoZSBzb3J0IGtleSBpcyB0aGUgc3RyaW5nIHN0YXJ0aW5nIGF0IHRoZQotICAg ICAgICAgIGtleSBwb3NpdGlvbiwgc2tpcHBpbmcgYW55IGxlYWRpbmcgYmxhbmtzIG9yIHRhYnMs IGFuZCB0aGVuIGFzCi0gICAgICAgICAgbXVjaCBvZiB0aGUgc3RyaW5nIGZyb20gdGhhdCBwb2lu dCBvbiB0aGF0IGZpdHMgdGhlIGRlZmluaXRpb24KLSAgICAgICAgICBvZiAibnVtZXJpYyIsIHRl cm1pbmF0aW5nIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdAotICAgICAgICAg IHF1YWxpZnkuIEEgbnVtZXJpYyBzdHJpbmcgaGFzIGFuIG9wdGlvbmFsIHNpZ24gKCsgb3IgLSkg Zm9sbG93ZWQKLSAgICAgICAgICBieSBvbmUgb3IgbW9yZSBkaWdpdHMsIGFuZCAoaWYgeW91ciB2 ZXJzaW9uIG9mIEtlcm1pdCB3YXMgYnVpbHQKLSAgICAgICAgICB3aXRoIGZsb2F0aW5nLXBvaW50 IHN1cHBvcnQ7IHNlZSBbNjA1XVNlY3Rpb24gNy4yMyApIHplcm8gb3Igb25lCi0gICAgICAgICAg ZGVjaW1hbCBwb2ludCAocGVyaW9kKS4gSWYgYm90aCAvQ0FTRSBhbmQgL05VTUVSSUMgYXJlIGdp dmVuLAotICAgICAgICAgIC9OVU1FUklDIHRha2VzIHByZWNlZGVuY2UuCi0KLSAgIC9SQU5HRTpu WzptXQotICAgICAgICAgIFNvcnQgZWxlbWVudHMgbnRocm91Z2ggbSBvZiB0aGUgYXJyYXkuIEJ5 IGRlZmF1bHQsIHRoZSBlbnRpcmUKLSAgICAgICAgICBhcnJheSBmcm9tIGVsZW1lbnQgMSB0byBp dHMgZGltZW5zaW9uZWQgc2l6ZSBpcyBzb3J0ZWQsIHdoaWNoCi0gICAgICAgICAgbWlnaHQgcHJv ZHVjZSBzdXJwcmlzaW5nIHJlc3VsdHMgaWYgdGhlIGFycmF5IGlzIG5vdCBmdWxsOyBzZWUKLSAg ICAgICAgICBleGFtcGxlIGluIFs2MDZdU2VjdGlvbiA3LjEwLjcuIElmICI6bSIgaXMgb21pdHRl ZCBmcm9tIHRoZQotICAgICAgICAgIHJhbmdlLCB0aGUgZGltZW5zaW9uZWQgc2l6ZSBpcyB1c2Vk LiBUaHVzLCB0byBzb3J0IGFuIGVudGlyZQotICAgICAgICAgIGFycmF5LCBcJmFbXSwgaW5jbHVk aW5nIGl0cyAwdGggZWxlbWVudCwgdXNlICJzb3J0IC9yYW5nZTowICZhIi4KLSAgICAgICAgICBZ b3UgY2FuIGFsc28gc29ydCBhbnkgZGVzaXJlZCBzZWN0aW9uIG9mIGFuIGFycmF5LCBlLmcuICJz b3J0Ci0gICAgICAgICAgL3JhbmdlOjEwOjIwICZhIiBvciAic29ydCAvcmFuZ2U6XCVpOlwlai0x ICZiIi4gQXMgbm90ZWQgYWJvdmUsCi0gICAgICAgICAgeW91IGNhbiBhbHNvIHNwZWNpZnkgYSBy YW5nZSBpbiB0aGUgYXJyYXktbmFtZSBicmFja2V0cy4gSWYgeW91Ci0gICAgICAgICAgc3BlY2lm eSBhIHJhbmdlIGluIHRoZSBhcnJheS1uYW1lIGJyYWNrZXRzIEFORCB3aXRoIGEgL1JBTkdFCi0g ICAgICAgICAgc3dpdGNoLCB0aGUgb25lcyBpbiB0aGUgYnJhY2tldHMgdGFrZSBwcmVjZWRlbmNl LgotCi0gICAvUkVWRVJTRQotICAgICAgICAgIFNvcnQgaW4gcmV2ZXJzZSBvcmRlci4gSWYgdGhp cyBzd2l0Y2ggaXMgbm90IGdpdmVuLCB0aGUgYXJyYXkgaXMKLSAgICAgICAgICBzb3J0ZWQgaW4g YXNjZW5kaW5nIG9yZGVyLgotCi0gICBSZW1lbWJlciB0aGF0IG51bWVyaWMgc3dpdGNoIGFyZ3Vt ZW50cyBjYW4gYmUgbnVtYmVycywgYXJpdGhtZXRpYwotICAgZXhwcmVzc2lvbnMsIG9yIHZhcmlh YmxlcyB3aG9zZSB2YWx1ZXMgYXJlIG51bWJlcnMgb3IgZXhwcmVzc2lvbnMsIGFzCi0gICBpbGx1 c3RyYXRlZCBpbiB0aGUgL1JBTkdFIGV4YW1wbGVzIGFib3ZlLgotCi0gICBBIHR5cGljYWwgc29y dGluZyBhcHBsaWNhdGlvbiBtaWdodCBiZSB0byBsaXN0IHN0dWRlbnRzJyB0ZXN0IHNjb3JlcyBp bgotICAgZGVzY2VuZGluZyBvcmRlci4gU3VwcG9zZSB5b3UgaGFkIHRoZSBmb2xsb3dpbmcgcmVj b3JkczoKLQotICBvbGFmICAgICAgNjUKLSAgb2xnYSAgICAgIDk4Ci0gIGl2YW4gICAgICA4Mwot ICB4ZW5hICAgICAxMDAKLQotICAgKGFuZCBzbyBvbikgc3RvcmVkIGluIGFycmF5IFwmc1tdIChl LmcuIGJ5IHJlYWRpbmcgdGhlbSBmcm9tIGEgZmlsZSBhcwotICAgaWxsdXN0cmF0ZWQgaW4gWzYw N11zZWN0aW9uIDcuMTAuNykuIEluIHRoZXNlIHJlY29yZHMsIHRoZSBzdHVkZW50J3MKLSAgIG5h bWUgaXMgaW4gY29sdW1ucyAxLTkgYW5kIHRoZSBzY29yZSBpbiAxMC0xMi4gU28gdG8gcmVhcnJh bmdlIHRoZSBsaXN0Ci0gICBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIHNjb3JlOgotCi0gIHNvcnQg L2tleToxMCAvcmV2ZXJzZSAmcwotCi0gICBUaGVuIHRvIGxpc3QgeW91ciB0b3AgZml2ZSBzdHVk ZW50czoKLQotICBmb3IgXCVpIDEgNSAxIHsgZWNobyBcJnNbXCVpXSB9Ci0KLSAgIE9yIG1vcmUg c2ltcGx5IChzZWUgbmV4dCBzZWN0aW9uKToKLQotICBzaG93IGFycmF5IGFbMTo1XQotCi0gICBU byBpbGx1c3RyYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBsZXhpY2FsIGFuZCBhIG51bWVy aWMgc29ydCwKLSAgIHN1cHBvc2UgeW91IGhhdmUgdGhlIGZvbGxvd2luZyByZWNvcmRzICh0aGUg bGluZXMgdGhhdCBhcmUgbnVtYmVyZWQsCi0gICBzdGFydGluZyBhdCBjb2x1bW4gMSkgaW4gYXJy YXkgXCZhW106Ci0KLSAgICBDb2x1bW4gICAxICAgICAgICAgMgotICAgIDEyMzQ1Njc4OTAxMjM0 NTY3ODkwCi0KLSAgIDEuIEl2YW4gMTAuMCAyLiBPbGFmIDkuOTUgMy4gT2xnYSAxMDEuNQotCi0g ICBBUlJBWSBTT1JUIC9LRVk6MTAgJmFbXSB3b3VsZCBvcmRlciB0aGVtIDMsMSwyLCBidXQgQVJS QVkgU09SVCAvS0VZOjEwCi0gICAvTlVNRVJJQyAmYVtdIHdvdWxkIG9yZGVyIHRoZW0gMiwxLDMu Ci0KLSAgICA3LjEwLjYuIERpc3BsYXlpbmcgQXJyYXlzCi0KLSAgIFRoZSBTSE9XIEFSUkFZIGNv bW1hbmQgKG9yIEFSUkFZIFNIT1cpIG5vdyBhY2NlcHRzIGFuIG9wdGlvbmFsCi0gICBhcnJheS1u YW1lIGFyZ3VtZW50OgotCi0gIFNIT1cgQVJSQVkgXCZhW10KLQotICAgKHlvdSBjYW4gbGVhdmUg b2ZmIHRoZSBcLCB0aGUgXCYsIGFuZC9vciB0aGUgW10ncyBpZiB5b3UgbGlrZTsgInNob3cKLSAg IGFycmF5IGEiIGlzIGVxdWl2YWxlbnQgdG8gInNob3cgYXJyYXkgXCZhW10iKS4gV2hlbiBhbiBh cnJheSBpcwotICAgc3BlY2lmaWVkLCBpdHMgZGltZW5zaW9uIGlzIHNob3duIGFuZCBhbGwgZGVm aW5lZCAobm9uLWVtcHR5KSBlbGVtZW50cwotICAgYXJlIGxpc3RlZC4KLQotICAgRXhhbXBsZToK LQotICBhc3NpZ24gXCVuIFxmZmlsZXMoKiwmYSkgIDsgRmlsbCBhbiBhcnJheSB3aXRoIGZpbGVu YW1lcyAoWzYwOF1TZWN0aW9uIDQuMTEuMykKLSAgc2hvdyBhcnJheSBcJmFbXSAgICAgICAgICA7 IFNob3cgdGhlIGFycmF5IHdlIGp1c3QgcmVhZAotICBhcnJheSBzaG93IFwmYVtdICAgICAgICAg IDsgU2FtZSBhcyBwcmV2aW91cwotICBhcnJheSBzb3J0IFwmYVtdICAgICAgICAgIDsgU29ydCB0 aGUgYXJyYXkKLSAgYXJyYXkgc2hvdyBcJmFbXSAgICAgICAgICA7IFNob3cgaXQgYWZ0ZXIgc29y dGluZwotICBhcnJheSBzaG93IFwmYSAgICAgICAgICAgIDsgU2hvdyBpdCBhZ2FpbgotICBhcnJh eSBzaG93ICZhICAgICAgICAgICAgIDsgU2hvdyBpdCBhZ2FpbgotICBhcnJheSBzaG93IGEgICAg ICAgICAgICAgIDsgU2hvdyBpdCBhZ2FpbgotCi0gICAoVGhlIGZpbmFsIGZvdXIgY29tbWFuZHMg ZGVtb25zdHJhdGUgdGhlIGFsdGVybmF0aXZlIGZvcm1zIHRoYXQgYXJlCi0gICBhY2NlcHRlZCBm b3IgdGhlIGFycmF5IG5hbWUuKQotCi0gICBJZiB5b3UgU0hPVyBBUlJBWSB3aXRob3V0IGdpdmlu ZyBhbiBhcnJheSBuYW1lLCBhbGwgZGVmaW5lZCBhcnJheXMgYXJlCi0gICBsaXN0ZWQgYnkgbmFt ZSBhbmQgZGltZW5zaW9uLCBidXQgdGhlaXIgY29udGVudHMgYXJlIG5vdCBzaG93bi4KLQotICAg WW91IGNhbiBhbHNvIHNob3cgYSBwaWVjZSBvZiBhbiBhcnJheSBieSBpbmNsdWRpbmcgYSBzdWJz Y3JpcHQgb3IgcmFuZ2UKLSAgIHdpdGhpbiB0aGUgYXJyYXkgYnJhY2tldHM6Ci0KLSAgYXJyYXkg c2hvdyBcJmFbNV0gICAgICAgICA7IFNob3dzIFwmYVs1XQotICBhcnJheSBzaG93ICZhWzM6OF0g ICAgICAgIDsgU2hvd3MgXCZhWzNdIHRocm91Z2ggXCZhWzhdCi0gIGFycmF5IHNob3cgYVs6XCVu LTFdICAgICAgOyBTaG93cyBcJmFbMF0gdGhyb3VnaCBcJmFbXCVuLTFdCi0KLSAgICA3LjEwLjcu IE90aGVyIEFycmF5IE9wZXJhdGlvbnMKLQotICAgQVJSQVkgREVTVFJPWSBhcnJheW5hbWUKLSAg ICAgICAgICBEZXN0cm95cyBhbmQgdW5kZWNsYXJlcyB0aGUgbmFtZWQgYXJyYXkuIFN1YnNjcmlw dHMgb3IgcmFuZ2VzCi0gICAgICAgICAgYXJlIG5vdCBhY2NlcHRlZCBpbiB0aGlzIGNvbW1hbmQu Ci0KLSAgIEFSUkFZIENPUFkgYXJyYXkxIGFycmF5MgotICAgICAgICAgIENvcGllcyB0aGUgZmly c3QgYXJyYXkgdG8gdGhlIHNlY29uZCBhcnJheS4gSWYgdGhlIHRhcmdldCBhcnJheQotICAgICAg ICAgIGhhcyBub3QgYmVlbiBkZWNsYXJlZCwgaXQgaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdp dGggdGhlIHNhbWUKLSAgICAgICAgICBzaXplIGFzIHRoZSBmaXJzdC4gSWYgaXQgaGFzIGJlZW4g ZGVjbGFyZWQsIGl0IHdpbGwgYmUgdXNlZCBhcwotICAgICAgICAgIGRlY2xhcmVkOyBpZiB0aGUg c291cmNlIGFycmF5IGlzIGxhcmdlciwgb25seSBhcyBtdWNoIG9mIGl0IGFzCi0gICAgICAgICAg d2lsbCBmaXQgaXMgY29waWVkIHRvIHRoZSB0YXJnZXQgYXJyYXkuIFN5bnRheCBmb3IgYXJyYXkx IGFuZAotICAgICAgICAgIGFycmF5MiBpcyBhcyBpbiBBUlJBWSBTSE9XIChTSE9XIEFSUkFZKS4g RXhhbXBsZToKLQotICAuXCVuIDo9IFxmZmlsZXMoKiwmYSkgIDsgQ3JlYXRlIGFuZCBsb2FkIGFy cmF5IEEgd2l0aCBhIGZpbGUgbGlzdC4KLSAgYXJyYXkgY29weSAmYSAmYiAgICAgICA7IENvcHkg YXJyYXkgQSB0byBhcnJheSBCLgotCi0gICAgICAgICAgVGhlIEFSUkFZIENPUFkgY29tbWFuZCBh bHNvIGxldHMgeW91IGNvcHkgcGllY2VzIG9mIGFycmF5cyBieQotICAgICAgICAgIGluY2x1ZGlu ZyByYW5nZSBzcGVjaWZpZXJzLCBhcyBpbiB0aGVzZSBleGFtcGxlczoKLQotICAgICAgICBBUlJB WSBDT1BZIFwmYVs0OjI3XSBcJmIKLSAgICAgICAgICAgICAgICBUaGlzIGNvcGllcyBcJmFbXSBl bGVtZW50cyA0LTI3IHRvIFwmYltdIGVsZW1lbnRzIDEtMjMsCi0gICAgICAgICAgICAgICAgY3Jl YXRpbmcgXCZiW10gaWYgbmVjZXNzYXJ5IG9yLCBpZiBcJmJbXSBpcyBhbHJlYWR5Ci0gICAgICAg ICAgICAgICAgZGVjbGFyZWQsIHN0b3BwaW5nIGVhcmx5IGlmIGl0cyBzaXplIGlzIGxlc3MgdGhh biAyMy4KLQotICAgICAgICBBUlJBWSBDT1BZIFwmYVs0OjI3XSBcJmJbMTJdCi0gICAgICAgICAg ICAgICAgVGhpcyBjb3BpZXMgXCZhW10gZWxlbWVudHMgNC0yNyB0byBcJmJbXSBlbGVtZW50cyAx Mi0zNSwKLSAgICAgICAgICAgICAgICBjcmVhdGluZyBcJmJbXSBpZiBuZWNlc3Nhcnkgb3IsIGlm IFwmYltdIGlzIGFscmVhZHkKLSAgICAgICAgICAgICAgICBkZWNsYXJlZCwgc3RvcHBpbmcgZWFy bHkgaWYgaXRzIHNpemUgaXMgbGVzcyB0aGFuIDM1LgotCi0gICAgICAgIEFSUkFZIENPUFkgXCZh WzQ6MjddIFwmYlsxMjoxNF0KLSAgICAgICAgICAgICAgICBUaGlzIGNvcGllcyBcJmFbXSBlbGVt ZW50cyA0LTYgdG8gXCZiW10gZWxlbWVudHMgMTItMTQsCi0gICAgICAgICAgICAgICAgY3JlYXRp bmcgXCZiW10gaWYgbmVjZXNzYXJ5IG9yLCBpZiBcJmJbXSBpcyBhbHJlYWR5Ci0gICAgICAgICAg ICAgICAgZGVjbGFyZWQsIHN0b3BwaW5nIGVhcmx5IGlmIGl0cyBzaXplIGlzIGxlc3MgdGhhbiAx NC4KLQotICAgICAgICBBUlJBWSBDT1BZIFwmYVsxNzpdIFwmYgotICAgICAgICAgICAgICAgIFRo aXMgY29waWVzIGFsbCB0aGUgZWxlbWVudHMgb2YgXCZhW10gc3RhcnRpbmcgd2l0aCAxNwotICAg ICAgICAgICAgICAgIHVudGlsIHRoZSBsYXN0IHRvIFwmYltdLCBjcmVhdGluZyBcJmJbXSBpZiBu ZWNlc3Nhcnkgb3IsCi0gICAgICAgICAgICAgICAgaWYgXCZiW10gaXMgYWxyZWFkeSBkZWNsYXJl ZCwgc3RvcHBpbmcgZWFybHkgaWYgXCZiW10gaXMKLSAgICAgICAgICAgICAgICBub3QgYmlnIGVu b3VnaC4gU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHlvdSBoYXZlIGEgc2NyaXB0Ci0gICAgICAgICAg ICAgICAgd2hvc2UgYXJndW1lbnRzIGFyZSBzdHJpbmcxLCBzdHJpbmcyLCBhbmQgYSBsaXN0IG9m IGZpbGVzLAotICAgICAgICAgICAgICAgIHdob3NlIGpvYiBpcyB0byBjaGFuZ2UgYWxsIG9jY3Vy cmVuY2VzIG9mIHN0cmluZzEgdG8KLSAgICAgICAgICAgICAgICBzdHJpbmcyIGluIGVhY2ggb2Yg dGhlIGZpbGVzLiBCdXQgaWYgdGhlIGxpc3Qgb2YgZmlsZXMgaXMKLSAgICAgICAgICAgICAgICBv bWl0dGVkLCB0aGVuICIqIiAoYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSkgaXMK LSAgICAgICAgICAgICAgICBhc3N1bWVkOgotCi1pZiA8IFx2KGFyZ2MpIDMgZXhpdCAxICJVc2Fn ZTogXCUwIHN0cmluZzEgc3RyaW5nMiBbIGZpbGVzIF0iCi1pZiBub3QgZGVmIFwlMyB7Ci0gICAg Lm4gOj0gXGZmaWxlcygqLCZhKQotfSBlbHNlIHsKLSAgICBhcnJheSBjb3B5ICZfWzM6XSAmYQot ICAgIC5uIDo9IFxmZGltKCZhKQotfQotZm9yIGkgMSBuIDEgewotICAgICEgY2F0IFwmYVtpXSB8 IHNlZCAtZSAic3xcJTF8XCUyfGciID4gL3RtcC9feAotICAgIHJlbmFtZSAvdG1wL194IFwmYVtp XQotfQotCi0gICAgICAgIEFSUkFZIENPUFkgXCZhWzE3XSBcJmIKLSAgICAgICAgICAgICAgICBT YW1lIGFzIHByZXZpb3VzIGV4YW1wbGUuCi0KLSAgIEFSUkFZIENMRUFSIGFycmF5bmFtZQotICAg ICAgICAgIFNldHMgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gdGhlIGVtcHR5IHZh bHVlLiBZb3UgbWF5Ci0gICAgICAgICAgYWxzbyBpbmNsdWRlIGEgcmFuZ2Ugc3BlY2lmaWVyIHRv IGNsZWFyIG9ubHkgYSBzZWxlY3RlZCBwb3J0aW9uCi0gICAgICAgICAgb2YgdGhlIGFycmF5OyBm b3IgZXhhbXBsZSAiYXJyYXkgY2xlYXIgXCZhWzM3OjIxNF0iLiBJZiB0aGUKLSAgICAgICAgICBy YW5nZSBpcyBvdXQgb2YgYm91bmRzLCBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBhcnJheSB0aGF0IGlz IGluCi0gICAgICAgICAgYm91bmRzIGlzIGNsZWFyZWQuCi0KLSAgIEFSUkFZIFNFVCBhcnJheW5h bWUgWyB2YWx1ZSBdCi0gICAgICAgICAgU2V0cyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJh eSB0byB0aGUgZ2l2ZW4gdmFsdWUuIElmIG5vCi0gICAgICAgICAgdmFsdWUgaXMgZ2l2ZW4sIHRo ZSBhcnJheSBpcyBjbGVhcmVkLiBZb3UgbWF5IGFsc28gaW5jbHVkZSBhCi0gICAgICAgICAgcmFu Z2Ugc3BlY2lmaWVyIHRvIHNldCBvbmx5IGEgc2VsZWN0ZWQgcG9ydGlvbiBvZiB0aGUgYXJyYXk7 IGZvcgotICAgICAgICAgIGV4YW1wbGUgImFycmF5IHNldCBcJmFbMTo5XSAtMSIuIElmIHRoZSBy YW5nZSBpcyBvdXQgb2YgYm91bmRzLAotICAgICAgICAgIG9ubHkgdGhlIHBhcnQgb2YgdGhlIGFy cmF5IHRoYXQgaXMgaW4gYm91bmRzIGlzIHNldC4KLQotICAgQVJSQVkgUkVTSVpFIGFycmF5bmFt ZSBzaXplCi0gICAgICAgICAgUmVzaXplcyB0aGUgZ2l2ZW4gYXJyYXkuIElmIHRoZSBzaXplIGlz IGdyZWF0ZXIgdGhhbiB0aGUgYXJyYXkncwotICAgICAgICAgIGN1cnJlbnQgZGltZW5zaW9uLCBu ZXcgZW1wdHkgZWxlbWVudHMgYXJlIGFkZGVkIHRvIHRoZSBlbmQuIElmCi0gICAgICAgICAgdGhl IHNpemUgaXMgbGVzcyB0aGFuIHRoZSBjdXJyZW50IGRpbWVuc2lvbiwgdGhlIGV4dHJhIGVsZW1l bnRzCi0gICAgICAgICAgYXJlIGRpc2NhcmRlZC4gTm90ZTogSWYgeW91IGhhdmUgc3RvcmVkIHRo ZSBhcnJheSBzaXplIGluCi0gICAgICAgICAgZWxlbWVudCAwLCBBUlJBWSBSRVNJWkUgZG9lcyBu b3QgY2hhbmdlIHRoaXMgdmFsdWUuIEFsdGVybmF0aXZlCi0gICAgICAgICAgbm90YXRpb246IEFS UkFZIFJFU0laRSBhcnJheW5hbWVbc2l6ZV0uIEZvciBhIHByYWN0aWNhbCBleGFtcGxlLAotICAg ICAgICAgIHNlZSBbNjA5XVNlY3Rpb24gNy4xMC4xMS4KLQotICAgXGZhcnJheWxvb2socGF0dGVy bixhcnJheW5hbWUpCi0gICAgICAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbmRleCBv ZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUKLSAgICAgICAgICBnaXZlbiBhcnJheSB0aGF0IG1h dGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4gKGZvciBkZXRhaWxzIGFib3V0Ci0gICAgICAgICAgcGF0 dGVybiBzeW50YXgsIHNlZSBbNjEwXXNlY3Rpb24gNC45KS4gVGhlIGFycmF5IG5hbWUgY2FuCi0g ICAgICAgICAgaW5jbHVkZSBhIHJhbmdlIHNwZWNpZmljYXRpb24gdG8gcmVzdHJpY3QgdGhlIHNl YXJjaCB0byBhIGdpdmVuCi0gICAgICAgICAgc2VnbWVudCBvZiB0aGUgYXJyYXkuIElmIG5vIGVs ZW1lbnRzIG1hdGNoIHRoZSBwYXR0ZXJuLCAtMSBpcwotICAgICAgICAgIHJldHVybmVkLgotCi0g ICBcZnRhYmxlbG9vayhrZXl3b3JkLGFycmF5bmFtZVssZGVsaW1pdGVyXSkKLSAgICAgICAgICBM b29rcyBpbiB0aGUgZ2l2ZW4gInRhYmxlIiwgd2hpY2ggbXVzdCBiZSBzb3J0ZWQsIGZvciB0aGUg Z2l2ZW4KLSAgICAgICAgICBrZXl3b3JkLiBUaGUga2V5d29yZCBuZWVkIG5vdCBiZSBzcGVsbGVk IG91dCBpbiBmdWxsLgotICAgICAgICAgIFBhdHRlcm4tbWF0Y2hpbmcgY2hhcmFjdGVycyBzaG91 bGQgbm90IGJlIGluY2x1ZGVkIGFzIHBhcnQgb2YKLSAgICAgICAgICB0aGUga2V5d29yZC4gVGhl IGZ1bmN0aW9uIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0YWJsZSBlbGVtZW50Ci0gICAgICAg ICAgdGhhdCB1bmlxdWVseSBtYXRjaGVzIHRoZSBnaXZlbiBrZXl3b3JkLCBvciAtMSBpZiBub25l IG1hdGNoLCBvcgotICAgICAgICAgIC0yIGlmIG1vcmUgdGhhbiAxIG1hdGNoLgotCi0gICBBICJ0 YWJsZSIgaXMgYW4gYXJyYXkgdGhhdCBpcyBzb3J0ZWQgaW4gbGV4aWNhbCBvcmRlcjsgZWFjaCBv ZiBpdHMKLSAgIGVsZW1lbnRzIG1heSBjb250YWluIG11bHRpcGxlIGZpZWxkcywgZGVsaW1pdGVk IGJ5IHRoZSBnaXZlbiBkZWxpbWl0ZXIKLSAgIGNoYXJhY3RlciBvciwgaWYgbm8gZGVsaW1pdGVy IGlzIHNwZWNpZmllZCwgYSBjb2xvbiAoOikuCi0KLSAgIFRoZSBcZmFycmF5bG9vaygpIGZ1bmN0 aW9uIGRvZXMgZXhhY3RseSB3aGF0IHlvdSB0ZWxsIGl0LiBJZiB5b3UgZ2l2ZQotICAgaXQgYSBw YXR0ZXJuIHRoYXQgZG9lcyBub3QgaW5jbHVkZSB3aWxkY2FyZCBjaGFyYWN0ZXJzIChzdWNoIGFz ICosID8sCi0gICBldGMpLCBpdCByZXF1aXJlcyBhbiBleGFjdCBtYXRjaC4gRm9yIGV4YW1wbGU6 Ci0KLSAgXGZhcnJheWxvb2sob29mYSwmYSkKLQotICAgc2VhcmNoZXMgZm9yIHRoZSBmaXJzdCBl bGVtZW50IG9mIFwmYVtdIHdob3NlIHZhbHVlIGlzICJvb2ZhIi4gQnV0OgotCi0gIFxmYXJyYXls b29rKG9vZmEqLCZhKQotCi0gICBmaW5kcyB0aGUgZmlyc3QgZWxlbWVudCB3aG9zZSB2YWx1ZSBz dGFydHMgd2l0aCAib29mYSIsIGFuZDsKLQotICBcZmFycmF5bG9vaygqb29mYSwmYSkKLQotICAg ZmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgd2hvc2UgdmFsdWUgZW5kcyB3aXRoICJvb2ZhIiwgYW5k OwotCi0gIFxmYXJyYXlsb29rKCpvb2ZhKiwmYSkKLQotICAgZmluZHMgdGhlIGZpcnN0IGVsZW1l bnQgd2hvc2UgdmFsdWUgY29udGFpbnMgIm9vZmEiLgotCi0gICBIZXJlJ3MgYSBzaW1wbGUgZGVt b25zdHJhdGlvbiBvZiBsb29raW5nIHVwIHBhdHRlcm5zIGluIGFycmF5czoKLQotICBsb2NhbCBc JmFbXSBcJXggXCVuCi0gIGRlY2xhcmUgXCZhW10gPSB6ZXJvIG9uZSB0d28gdGhyZWUgZm91ciBm aXZlIHNpeCBzZXZlbiBlaWdodCBuaW5lIHRlbgotICB3aGlsZSB0cnVlIHsKLSAgICAgIC5cJXgg PSAxCi0gICAgICAuXCVuID0gMAotICAgICAgYXNrIFwlYSB7IFBhdHRlcm4/IH0KLSAgICAgIGlm IG5vdCBkZWYgXCVhIGV4aXQgMCBEb25lLgotICAgICAgd2hpbGUgPD0gXCV4IFxmZGltKCZhKSB7 Ci0gICAgICAgICAgLlwleCA6PSBcZmFycmF5bG9vayhcJWEsJmFbXCV4XSkKLSAgICAgICAgICBp ZiAoIDwgXCV4IDAgKSBicmVhawotICAgICAgICAgIGVjaG8gXGZscGFkKFwleCwzKS4gXCZhW1wl eF0KLSAgICAgICAgICBpbmNyZW1lbnQgXCV4Ci0gICAgICAgICAgaW5jcmVtZW50IFwlbgotICAg ICAgfQotICAgICAgaWYgKCA8IFwlbiAxICkgZWNobyBQYXR0ZXJuIG5vdCBmb3VuZCAtICJcJWEi Ci0gIH0KLQotICAgVGhlIGFycmF5IG5lZWQgbm90IGJlIHNvcnRlZC4gV2hlbiBhIHBhdHRlcm4g aXMgZ2l2ZW4sIGEgc2VhcmNoIGlzCi0gICBwZXJmb3JtZWQ7IGlmIHRoZXJlIGlzIGEgbWF0Y2gs IHRoZSBtYXRjaGluZyBlbGVtZW50J3MgaW5kZXggYW5kIHRoZQotICAgZWxlbWVudCBpdHNlbGYg YXJlIHByaW50ZWQsIGFuZCB0aGUgc2VhcmNoIGJlZ2lucyBhZ2FpbiBhdCB0aGUgbmV4dAotICAg ZWxlbWVudC4gVGh1cyBlYWNoIG1hdGNoaW5nIGVsZW1lbnQgaXMgcHJpbnRlZC4gSWYgbm9uZSBt YXRjaCwgdGhlCi0gICAiUGF0dGVybiBub3QgZm91bmQiIG1lc3NhZ2UgaXMgcHJpbnRlZC4gVGhl IHByb2Nlc3MgcmVwZWF0cyBmb3IgYXMgbWFueQotICAgcGF0dGVybnMgYXMgdGhlIHVzZXIgd2Fu dHMgdG8gdHlwZSwgYW5kIHRlcm1pbmF0ZXMgd2hlbiB0aGUgdXNlciB0eXBlcwotICAgYW4gZW1w dHkgcGF0dGVybi4KLQotICAgTm93IGxldCdzIGJ1aWxkIGEgbGl0dGxlIGNvbW1hbmQgcGFyc2Vy LCBjb25zaXN0aW5nIG9mIGEga2V5d29yZCB0YWJsZSwKLSAgIGFuZCBhIGxvb3AgdG8gbG9vayB1 cCB0aGUgdXNlcidzIGNvbW1hbmRzIGluIGl0IHdpdGggXGZ0YWJsZWxvb2soKS4gSW4KLSAgIHRo aXMgY2FzZSB0aGUgYXJyYXkgZWxlbWVudHMgaGF2ZSAiZmllbGRzIiBzZXBhcmF0ZWQgYnkgY29s b24gKDopIC0tIGEKLSAgIGtleXdvcmQgYW5kIGEgdmFsdWUuIEtleXdvcmQgdGFibGVzIG11c3Qg YmUgc29ydGVkIGlmIFx0YWJsZWxvb2soKSBpcwotICAgdG8gd29yayByaWdodCwgc28gYWZ0ZXIg ZGVjbGFyaW5nIGFuZCBpbml0aWFsaXppbmcgdGhlIHRhYmxlIGFycmF5LCB3ZQotICAgc29ydCBp dC4KLQotICBsb2NhbCBcJmtbXSBcJWEgXCVpIFwlbgotCi0gIGFycmF5IGRlY2xhcmUgXCZrW10g PSBkcml2ZTo5IGRvOjggZGlzY3Vzczo3IGxpdmU6NiBzcGVuZDo1IGhlbHA6NCBxdWl0OjAKLQot ICBhcnJheSBzb3J0ICZrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1ha2Ugc3VyZSBh cnJheSBpcyBzb3J0ZWQKLSAgZWNobyBUeXBlICJoZWxwIiBmb3IgaGVscC4gICAgICAgICAgICAg ICAgOyBQcmludCBncmVldGluZyAmIGluc3RydWN0aW9ucwotCi0gIHdoaWxlIHRydWUgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsgTG9vcCB0byBnZXQgY29tbWFuZHMKLSAgICAgIHVu ZGVmaW5lIFwlYQotICAgICAgd2hpbGUgbm90IGRlZmluZWQgXCVhIHsgICAgICAgICAgICAgICA7 IEdldCBhIGNvbW1hbmQKLSAgICAgICAgICBhc2sgXCVhIHsgQ29tbWFuZD8gfQotICAgICAgfQot ICAgICAgLlwlbiA6PSBcZnRhYmxlbG9vayhcJWEsJmspICAgICAgICAgICA7IExvb2sgdXAgdGhl IGNvbW1hbmQKLSAgICAgIHN3aXRjaCBcJW4geyAgICAgICAgICAgICAgICAgICAgICAgICAgOyBI YW5kbGUgZXJyb3JzCi0gICAgICAgIDotMSwgZWNobyBOb3QgZm91bmQgLSAiXCVhIiAgICAgICAg IDsgRG9lc24ndCBtYXRjaAotICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIDotMiwgZWNo byBBbWJpZ3VvdXMgLSAiXCVhIiAgICAgICAgIDsgTWF0Y2hlcyB0b28gbWFueQotICAgICAgICAg ICAgIGNvbnRpbnVlCi0gICAgICB9Ci0gICAgICBzd2l0Y2ggXGZ3b3JkKFwma1tcJW5dLDIpIHsg ICAgICAgICAgIDsgRGlzcGF0Y2ggYWNjb3JkaW5nIHRvIHZhbHVlCi0gICAgICAgICA6OSwgZWNo byBEcml2aW5nLi4uLCBicmVhawotICAgICAgICAgOjgsIGVjaG8gRG9pbmcuLi4sIGJyZWFrCi0g ICAgICAgICA6NywgZWNobyBEaXNjdXNzaW5nLi4uLCBicmVhawotICAgICAgICAgOjYsIGVjaG8g TGl2aW5nLi4uLCBicmVhawotICAgICAgICAgOjUsIGVjaG8gU3BlbmRpbmcuLi4sIGJyZWFrCi0g ICAgICAgICA6NCwgZWNobyB7IENvbW1hbmRzIChtYXkgYmUgYWJicmV2aWF0ZWQpOn0KLSAgICAg ICAgICAgICBmb3IgXCVpIDEgXGZkaW0oJmspIDEgewotICAgICAgICAgICAgICAgIGVjaG8geyAg XCVpLiBcZndvcmQoXCZrW1wlaV0sMSkgfQotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBi cmVhawotICAgICAgICAgOjAsIGV4aXQgMCBCeWUhCi0gICAgICAgICA6ZGVmYXVsdCwgc3RvcCAx IEludGVybmFsIGVycm9yCi0gICAgICB9Ci0gIH0KLQotICAgSW4gdGhpcyBleGFtcGxlLCBrZXl3 b3JkcyBhcmUgImRyaXZlIiwgImRvIiwgImRpc2N1c3MiLCBldGMsIGFuZCB0aGVpcgotICAgdmFs dWVzIGFyZSB1bmlxdWUgbnVtYmVycyAodmFsdWVzIG5lZWQgbm90IGJlIG51bWJlcnMsIGFuZCB0 aGVyZSBuZWVkCi0gICBub3QgYmUgb25seSBvbmUgdmFsdWUgLS0gdGhlcmUgY2FuIGJlIDAsIDEs IDIsIG9yIG1vcmUgb2YgdGhlbSkuIFRoZQotICAgdXNlciB0eXBlcyBhIGNvbW1hbmQsIHdoaWNo IGNhbiBiZSB0aGUgd2hvbGUgd29yZCAobGlrZSAiaGVscCIpIG9yIGFueQotICAgYWJicmV2aWF0 aW9uIChsaWtlICJoZWwiLCAiaGUiLCBvciBqdXN0ICJoIikuIElmIHRoaXMgZG9lcyBub3QgbWF0 Y2gKLSAgIGFueSBrZXl3b3JkcywgXGZ0YWJsZWxvb2soKSByZXR1cm5zIC0xOyBpZiBpdCBtYXRj aGVzIG1vcmUgdGhhbiBvbmUgKGFzCi0gICB3b3VsZCAiZCIpLCBpdCByZXR1cm5zIC0yLiBPdGhl cndpc2UgdGhlIGFycmF5IGluZGV4IGlzIHJldHVybmVkLCAxIG9yCi0gICBoaWdoZXIuCi0KLSAg IEdpdmVuIHRoZSBhcnJheSBpbmRleCBcJW4sIHdlIGNhbiBnZXQgdGhlIHRhYmxlIHZhbHVlcyBh cyBmb2xsb3dzOgotCi0gIFxmd29yZChcJmtbXCVuXSwxKSBpcyB0aGUga2V5d29yZCAoZmlyc3Qg ZmllbGQpCi0gIFxmd29yZChcJmtbXCVuXSwyKSBpcyB0aGUgdmFsdWUgKHNlY29uZCBmaWVsZCwg aW4gdGhpcyBjYXNlIGEgbnVtYmVyKQotCi0gICBJbiBvdXIgZXhhbXBsZSwgd2UgdXNlIHRoZSB2 YWx1ZSAobnVtYmVyKSBhcyB0aGUgU1dJVENIIHZhcmlhYmxlLiBBcwotICAgbm90ZWQsIFxmYWJs ZWxvb2soKSBleHBlY3RzIHRoZSBhcnJheSBlbGVtZW50cyB0byBjb250YWluIG11bHRpcGxlCi0g ICBmaWVsZHMgc2VwYXJhdGVkIGJ5IGNvbG9uICg6KSAob3Igb3RoZXIgY2hhcmFjdGVyIHRoYXQg eW91IHNwZWNpZnksCi0gICBlLmcuIFxmdGFibGVsb29rKFwlYSwmYSxeKSkgYW5kIHdoZW4gbWF0 Y2hpbmcgdGhlIGtleXdvcmQsIGlnbm9yZXMgdGhlCi0gICBmaXJzdCBkZWxpbWl0ZXIgYW5kIGV2 ZXJ5dGhpbmcgYWZ0ZXIgaXQuCi0KLSAgICA3LjEwLjguIEhpbnRzIGZvciBVc2luZyBBcnJheXMK LQotICAgQyBwcm9ncmFtbWVycyBhcmUgYWNjdXN0b21lZCB0byBvdXQtb2YtYm91bmRzIGFycmF5 IHJlZmVyZW5jZXMgY2F1c2luZwotICAgY29yZSBkdW1wcyBvciB3b3JzZS4gSW4gQy1LZXJtaXQ6 Ci0KLSAgICAgKiBBIHJlZmVyZW5jZSB0byBhbiBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGVsZW1l bnQgcmV0dXJucyB0aGUgZW1wdHkKLSAgICAgICBzdHJpbmcuCi0gICAgICogQW4gYXR0ZW1wdCB0 byBzZXQgdGhlIHZhbHVlIG9mIGFuIGFycmF5IGVsZW1lbnQgdGhhdCBpcyBvdXQgb2YKLSAgICAg ICBib3VuZHMgb3IgdGhhdCBoYXMgbm90IGJlZW4gZGVjbGFyZWQgc2ltcGx5IGZhaWxzLgotCi0g ICBDIHByb2dyYW1tZXJzIGV4cGVjdCBhbiBhcnJheSBvZiBzaXplIG4gdG8gaGF2ZSBlbGVtZW50 cyAwIHRocm91Z2ggbi0xLgotICAgRm9ydHJhbiBwcm9ncmFtbWVycyBleHBlY3QgdGhlIHNhbWUg YXJyYXkgdG8gaGF2ZSBlbGVtZW50cyAxIHRocm91Z2ggbi4KLSAgIEMtS2VybWl0IGFjY29tbW9k YXRlcyBib3RoIHN0eWxlczsgd2hlbiB5b3UgZGVjbGFyZSBhbiBhcnJheSBvZiBzaXplIG4sCi0g ICBpdCBoYXMgbisxIGVsZW1lbnRzLCAwIHRocm91Z2ggbiwgYW5kIHlvdSBjYW4gdXNlIHRoZSBh cnJheSBpbiB5b3VyCi0gICBhY2N1c3RvbWVkIG1hbm5lciwgMC1iYXNlZCBvciAxLWJhc2VkLgot Ci0gICBIb3dldmVyLCBub3RlIHRoYXQgQy1LZXJtaXQgaGFzIGNlcnRhaW4gYmlhc2VzIHRvd2Fy ZHMgMS1iYXNlZCBhcnJheXM6Ci0KLSAgICAgKiBBc3NpZ25tZW50IG9mIGZpbGUgbGlzdHMgc3Rh cnRzIHdpdGggZWxlbWVudCAxIChbNjExXVNlY3Rpb24KLSAgICAgICA3LjEwLjMpLgotICAgICAq IEFzc2lnbm1lbnQgYnkgXGZzcGxpdCgpIHN0YXJ0cyB3aXRoIGVsZW1lbnQgMSAoWzYxMl1TZWN0 aW9uIDcuMykuCi0gICAgICogQXJyYXkgaW5pdGlhbGl6YXRpb24gc2tpcHMgdGhlIDB0aCBlbGVt ZW50LiBUbyBpbml0aWFsaXplIGEgMC1iYXNlZAotICAgICAgIGFycmF5LCB1c2Ugc29tZXRoaW5n IGxpa2UgdGhpczoKLSAgZGVjbGFyZSBcJmFbM10gPSBvbmUgdHdvIHRocmVlCi0gIC5cJmFbMF0g PSB6ZXJvCi0KLSAgICAgKiBUaGUgQVJSQVkgU09SVCBjb21tYW5kIHNraXBzIHRoZSAwdGggZWxl bWVudCB1bmxlc3MgeW91IGluY2x1ZGUKLSAgICAgICAvUkFOR0U6MAotICAgICAqIFRoZSBTSElG VCBjb21tYW5kIGlnbm9yZXMgZWxlbWVudCAwIG9mIHRoZSBcJl9bXSBhcnJheS4KLQotICAgVGhl IGRpc3RpbmN0aW9uIGJldHdlZW4gYW4gYXJyYXkncyBkaW1lbnNpb25lZCBzaXplIGFuZCB0aGUg bnVtYmVyIG9mCi0gICBlbGVtZW50cyBpbiB0aGUgYXJyYXkgaXMgaW1wb3J0YW50IHdoZW4gc29y dGluZy4gVG8gaWxsdXN0cmF0ZToKLQotICBkZWNsYXJlIFwmYVsxMDBdICAgICAgICAgICAgICAg ICAgOyBEZWNsYXJlIGFycmF5ICZhIHdpdGggMTAwIGVsZW1lbnRzCi0gIGZvcGVuIC9yZWFkIFwl YyBvb2ZhLnR4dCAgICAgICAgICA7IE9wZW4gYSBmaWxlCi0gIGlmIGZhaWwuLi4KLSAgZm9yIFwl aSAxIFxmZGltKCZhKSAxIHsgICAgICAgICAgIDsgUmVhZCB0aGUgZmlsZSBpbnRvIHRoZSBhcnJh eQotICAgICAgZnJlYWQgXCVjIFwmYVtcJWldCi0gICAgICBpZiBmYWlsIGJyZWFrCi0gIH0KLSAg ZmNsb3NlIFwlYwotICBpZiA+IFwlaSBcZmRpbSgmYSkgZW5kIDEgRmlsZSBoYXMgdG9vIG1hbnkg bGluZXMgZm9yIGFycmF5LgotICAuXCVuIDo6PSBcJWkgLSAxCi0gIGVjaG8gRmlsZSBoYXMgXCVu IGxpbmUocykuCi0KLSAgIExldCdzIHNheSB0aGUgZmlsZSBoYWQgOTUgbGluZXMuIFRoaXMgbGVh dmVzIGVsZW1lbnRzIDk2LTEwMCBvZiB0aGUKLSAgIGFycmF5IGVtcHR5LiBOb3cgc3VwcG9zZSB5 b3Ugc29ydCB0aGUgYXJyYXkgYW5kIHdyaXRlIG91dCB0aGUgcmVzdWx0OgotCi0gIHNvcnQgJmEg ICAgICAgICAgICAgICAgICAgICAgICAgICA7IFNvcnQgdGhlIHdob2xlIGFycmF5Ci0gIGZvcGVu IC93cml0ZSBcJW8gb29mYS50eHQuc29ydGVkICA7IE9wZW4gYW4gb3V0cHV0IGZpbGUKLSAgaWYg ZmFpbCAuLi4KLSAgZm9yIFwlaSAxIFwlbiAxIHsgICAgICAgICAgICAgICAgIDsgV3JpdGUgb3V0 IDk1IHJlY29yZHMKLSAgICAgIGZ3cml0ZSAvbGluZSBcJW8gXCZhW1wlaV0KLSAgICAgIGlmIGZh aWwgZW5kIDEgV3JpdGUgZXJyb3IKLSAgfQotICBjbG9zZSB3cml0ZQotCi0gICBZb3UgbWlnaHQg YmUgc3VycHJpc2VkIGF0IHRoZSBjb250ZW50cyBvZiAib29mYS50eHQuc29ydGVkIiAtLSBmaXZl Ci0gICBlbXB0eSBlbGVtZW50cywgOTYtMTAwLCBmbG9hdGVkIHRvIHRoZSB0b3Agb2YgdGhlIGFy cmF5IGluIHRoZSBzb3J0LAotICAgYW5kIHNpbmNlIHlvdXIgd3JpdGUgbG9vcCBvbmx5IGhhZCA5 NSBpdGVyYXRpb25zLCB0aGUgZmluYWwgNSBsaW5lcyBvZgotICAgdGhlIHNvcnRlZCBmaWxlIGFy ZSBsb3N0LgotCi0gICBUaGVyZWZvcmUsIHdoZW4gZGVhbGluZyB3aXRoIHBhcnRpYWxseSBmaWxs ZWQgYXJyYXlzIC0tIGVzcGVjaWFsbHkgd2hlbgotICAgc29ydGluZyB0aGVtIC0tIHJlbWVtYmVy IHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBlbGVtZW50cy4gQSBoYW5keSB3YXkKLSAgIG9mIHJl Y29yZGluZyBhbiBhcnJheSdzICJ0cnVlIiBzaXplIGlzIHRvIHB1dCBpdCBpbiB0aGUgMHRoIGVs ZW1lbnQuCi0gICBUaGF0IHdheSwgaXQgInRyYXZlbHMgd2l0aCB0aGUgYXJyYXkiLiBUbyBpbGx1 c3RyYXRlIChjb250aW51aW5nIHRoZQotICAgcHJldmlvdXMgZXhhbXBsZSBhdCB0aGUgImNsb3Nl IHJlYWQiIHN0YXRlbWVudCk6Ci0KLSAgY2xvc2UgcmVhZAotICBpZiA+IFwlaSBcZmRpbSgmYSkg ZW5kIDEgRmlsZSBoYXMgdG9vIG1hbnkgbGluZXMgZm9yIGFycmF5LgotICAuXCZhWzBdIDo6PSBc JWkgLSAxICAgICA7IEFzc2lnbiBudW1iZXIgb2YgbGluZXMgdG8gXCZhWzBdLgotICBlY2hvIEZp bGUgaGFzIFwmYVswXSBsaW5lKHMpLgotICBzb3J0IC9yYW5nZToxOlwmYVswXSAmYQotICBvcGVu IHdyaXRlIG9vZmEudHh0LnNvcnRlZAotICBpZiBmYWlsIC4uLgotICBmb3IgXCVpIDEgXCZhWzBd IDEgewotICAgICAgd3JpdGVsbiBmaWxlIFwmYVtcJWpdCi0gICAgICBpZiBmYWlsIGVuZCAxIFdy aXRlIGVycm9yCi0gIH0KLSAgY2xvc2Ugd3JpdGUKLQotICAgTm90ZSB0aGUgU09SVCBzd2l0Y2gs IC9SQU5HRToxOlwmYVswXS4gVGhpcyBrZWVwcyB0aGUgc29ydCAxLWJhc2VkLCBhbmQKLSAgIHVz ZXMgZWxlbWVudCAwIG9mIHRoZSBhcnJheSBhcyBpdHMgc2l6ZSBpbmRpY2F0b3IuCi0KLSAgIEZp bmFsbHksIG5vdGUgdGhhdCBldmVuIHRob3VnaCBzb21lIGNvbW1hbmRzIG9yIGZ1bmN0aW9ucyBt aWdodCBwdXQgYQotICAgc2l6ZSBpbiBhcnJheSBlbGVtZW50IDAsIG5vIGJ1aWx0LWluIGZ1bmN0 aW9ucyBvciBjb21tYW5kcyBkZXBlbmQgb24gYQotICAgc2l6ZSBhY3R1YWxseSBiZWluZyB0aGVy ZS4gVGh1cyB5b3UgYXJlIHBlcmZlY3RseSBmcmVlIHRvIHJlcGxhY2UgdGhlCi0gICBzaXplIHdp dGggc29tZXRoaW5nIGVsc2UgYW5kIHRyZWF0IHRoZSBhcnJheSBhcyAwLWJhc2VkLgotCi0gICAg Ny4xMC45LiBEby1JdC1Zb3Vyc2VsZiBBcnJheXMKLQotICAgS2VybWl0J3MgXCZ4W10gYXJyYXlz IGFyZSBuaWNlIGJlY2F1c2Ugb2YgdGhlIGFjY29tcGFueWluZyBidWlsdC1pbgotICAgZnVuY3Rp b25hbGl0eSAtLSBBUlJBWSBjb21tYW5kcywgYnVpbHQtaW4gZnVuY3Rpb25zIHRoYXQgbG9hZCBh bmQKLSAgIHNlYXJjaCBhcnJheXMsIGF1dG9tYXRpYyBldmFsdWF0aW9uIG9mIGFyaXRobWV0aWMg ZXhwcmVzc2lvbnMgd2l0aGluCi0gICB0aGUgc3Vic2NyaXB0IGJyYWNrZXRzLCBhbmQgc28gb24u IFlldCB0aGV5IGFsc28gaGF2ZSBjZXJ0YWluCi0gICBsaW1pdGF0aW9uczoKLQotICAgIDEuIEV4 Y2VwdCB3aGVuIGNyZWF0ZWQgYnkgZHluYW1pYyBsb2FkaW5nIChlLmcuIGJ5IFxmZmlsZXMoKSkg dGhleQotICAgICAgIG11c3QgYmUgZGVjbGFyZWQgYW5kIGRpbWVuc2lvbmVkIGluIGFkdmFuY2Uu Ci0gICAgMi4gSW5kaWNlcyBtdXN0IGJlIG51bWVyaWMsIHBvc2l0aXZlLCBhbmQgaW4gcmFuZ2Uu Ci0gICAgMy4gVGhlcmUgY2FuIGJlIG9ubHkgb25lIGRpbWVuc2lvbi4gTWF0cmljZXMgb3Igb3Ro ZXIKLSAgICAgICBoaWdoZXItZGltZW5zaW9uZWQgYXJyYXlzIGFyZSBub3QgYXZhaWxhYmxlLgot Ci0gICBCdXQgbm9uZSBvZiB0aGlzIGlzIHRvIHNheSB5b3UgY2FuJ3QgaW52ZW50IGFueSBraW5k IG9mIGRhdGEgc3RydWN0dXJlCi0gICB5b3UgbGlrZS4gSW4gWzYxM11TZWN0aW9uIDcuOS4yIHlv dSBjYW4gc2VlIHNvbWUgZXhhbXBsZXMuIEhlcmUncwotICAgYW5vdGhlciAoY291cnRlc3kgb2Yg RGF0IFRodWMgTmd1eWVuKSwgaW4gd2hpY2ggYSBwYWlyIG9mIG1hdHJpY2VzIGlzCi0gICBjcmVh dGVkIGFuZCB0aGVuIGFkZGVkOiBubyBkaW1lbnNpb25pbmcgbmVjZXNzYXJ5LgotCi0gIC5yb3cg PSA0Ci0gIC5jb2wgPSA5Ci0KLSAgOyBNQUNSTyBUTyBQUklOVCBBIE1BVFJJWAotICBkZWZpbmUg UE1BVFJJWCB7Ci0gICAgICBlY2hvIE1hdHJpeCBcJTE6Ci0gICAgICBmb3IgXCVyIDEgXG0ocm93 KSAxIHsKLSAgICAgICAgICBmb3IgXCVjIDEgXG0oY29sKSAxIHsKLSAgICAgICAgICAgICAgeGVj aG8gXGZscGFkKFxtKFwlMVtcJXJdW1wlY10pLDQpCi0gICAgICAgICAgfQotICAgICAgICAgIGVj aG8KLSAgICAgIH0KLSAgICAgIGVjaG8KLSAgfQotICA7IENSRUFURSBNQVRSSUNFUyBBIEFORCBC Ci0gIGZvciBcJXIgMSBcbShyb3cpIDEgewotICAgICAgZm9yIFwlYyAxIFxtKGNvbCkgMSB7Ci0g ICAgICAgICAgX2V2YWwgQVtcJXJdW1wlY10gXCVyICsgXCVjCi0gICAgICAgICAgX2V2YWwgQltc JXJdW1wlY10gXCVyICogXCVjCi0gICAgICB9Ci0gIH0KLSAgOyBDUkVBVEUgTUFUUklYIEMgPSBT VU0gT0YgTUFUUklYIEEgQU5EIE1BVFJJWCBCCi0gIGZvciBcJXIgMSBcbShyb3cpIDEgewotICAg ICAgZm9yIFwlYyAxIFxtKGNvbCkgMSB7Ci0gICAgICAgICAgX2V2YWwgQ1tcJXJdW1wlY10gXG0o QVtcJXJdW1wlY10pICsgXG0oQltcJXJdW1wlY10pCi0gICAgICB9Ci0gIH0KLSAgcG1hdHJpeCBB ICA7IFByaW50IE1hdHJpeCBBCi0gIHBtYXRyaXggQiAgOyBQcmludCBNYXRyaXggQgotICBwbWF0 cml4IEMgIDsgUHJpbnQgTWF0cml4IEMKLQotICAgSW4gdGhlIGV4YW1wbGUsIHdlIHVzZSBtYXRy aXgtbGlrZSBub3RhdGlvbiB0byBjcmVhdGUgbWFjcm9zIHdpdGggbmFtZXMKLSAgIGxpa2UgIkFb MV1bMV0iLCAiQlszXVs3XSIsIGFuZCBzbyBvbi4KLQotICAgIDcuMTAuMTAuIEFzc29jaWF0aXZl IEFycmF5cwotCi0gICBBbiBhc3NvY2lhdGl2ZSBhcnJheSBpcyBhIHNwZWNpYWwga2luZCBvZiBE by1JdC1Zb3Vyc2VsZiBhcnJheS4gSXQKLSAgIGRpZmZlcnMgZnJvbSBhIHJlZ3VsYXIgYXJyYXkg aW4gdGhhdCBpdHMgaW5kaWNlcyBuZWVkIG5vdCBiZSBudW1iZXJzIC0tCi0gICB0aGV5IGNhbiBi ZSBhbnl0aGluZyBhdCBhbGwgLS0gd29yZHMsIGZpbGVuYW1lcywgbmFtZXMgb2YgbW9udGhzLCBh bnkKLSAgIGNoYXJhY3RlciBzdHJpbmcgYXQgYWxsLCBhbmQgdGhhdCBpdCBkb2Vzbid0IGhhdmUg dG8gYmUgKGFuZCBpbiBmYWN0Ci0gICBjYW4ndCBiZSkgZGVjbGFyZWQuIEFuIGFzc29jaWF0aXZl IGFycmF5IGVsZW1lbnQgaXMgc2ltcGx5IGEgbWFjcm8KLSAgIHdob3NlIG5hbWUgZW5kcyB3aXRo IGFuIGluZGV4IGVuY2xvc2VkIGluIGFuZ2xlIGJyYWNrZXRzLCBmb3IgZXhhbXBsZToKLQotICBm aWxlPG9vZmEudHh0PgotCi0gICBNb3JlIGZvcm1hbGx5OgotCi0gIGJhc2VuYW1lPGluZGV4Pgot Ci0gICBBbiBhc3NvY2lhdGl2ZSBhcnJheSBpcyBhIGNvbGxlY3Rpb24gb2YgYWxsIGFzc29jaWF0 aXZlIGFycmF5IGVsZW1lbnRzCi0gICB0aGF0IGhhdmUgdGhlIHNhbWUgYmFzZW5hbWUuIEFueSBu dW1iZXIgb2YgYXNzb2NpYXRpdmUgYXJyYXlzLCBlYWNoCi0gICB3aXRoIGFueSBudW1iZXIgb2Yg ZWxlbWVudHMsIGNhbiBleGlzdCBhdCB0aGUgc2FtZSB0aW1lLgotCi0gICBBbiBhc3NvY2lhdGl2 ZSBhcnJheSBlbGVtZW50IGNhbiBiZSBhc3NpZ25lZCBhIHZhbHVlLCBzdWNoIGFzICIxIiwganVz dAotICAgbGlrZSBhbnkgb3RoZXIgbWFjcm86Ci0KLSAgZGVmaW5lIGZpbGU8b29mYS50eHQ+IDEg ICAgIDsgR2l2ZSAiZmlsZTxvb2ZhLnR4dD4iIHRoZSB2YWx1ZSAiMSIuCi0KLSAgIG9yOgotCi0g IGFzc2lnbiBmaWxlPG9vZmEudHh0PiBcJWEgICA7IEdpdmUgaXQgdGhlIHZhbHVlIG9mIHRoZSB2 YXJpYWJsZSBcJWEuCi0KLSAgIEhvd2V2ZXIsIHNpbmNlIGFuIGFzc29jaWF0aXZlIGFycmF5IGVs ZW1lbnQgaXMgYSBtYWNybywgaXQgbWF5IG5vdCBoYXZlCi0gICBhbiBlbXB0eSAobnVsbCkgdmFs dWUsIHNpbmNlIGFzc2lnbmluZyBhbiBlbXB0eSB2YWx1ZSB0byBhIG1hY3JvCi0gICB1bmRlZmlu ZXMgdGhlIG1hY3JvLgotCi0gICBZb3UgY2FuIHJlZmVyIHRvIHRoZSB2YWx1ZSBvZiBhbiBhc3Nv Y2lhdGl2ZSBhcnJheSBlbGVtZW50IHVzaW5nIHRoZQotICAgZmFtaWxpYXIgbm90YXRpb24gZm9y IG1hY3JvIHZhbHVlczoKLQotICBlY2hvIFxtKGZpbGU8b29mYS50eHQ+KSAgICAgOyBFY2hvIHRo ZSB2YWx1ZSBvZiAiZmlsZTxvb2ZhLnR4dD4iLgotCi0gICBBc3NvY2lhdGl2ZSBhcnJheXMgYXJl IG1vc3QgdXNlZnVsLCBob3dldmVyLCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUKLSAgIGluZGV4IGlz IGEgdmFyaWFibGUuIEluIHRoYXQgY2FzZSwgeW91IG11c3QgdXNlIHRoZSAiaGlkZGVuIiBmb3Jt cyBvZgotICAgdGhlIERFRklORSBvciBBU1NJR04gY29tbWFuZHMgdGhhdCBldmFsdWF0ZSB0aGUg bWFjcm8gbmFtZSBiZWZvcmUKLSAgIG1ha2luZyB0aGUgYXNzaWdubWVudCAoc2VlIFs2MTRdVXNp bmcgQy1LZXJtaXQsIHBhZ2UgNDU3KS4gRXhhbXBsZToKLQotICBkZWZpbmUgXCVmIG9vZmEudHh0 Ci0gIF9kZWZpbmUgZmlsZTxcJWY+IDEKLSAgZWNobyBmaWxlPFwlZj4gPSBcbShmaWxlPFwlZj4p Ci0KLSAgIHByaW50czoKLQotICBmaWxlPG9vZmEudHh0PiA9IDEKLQotICAgYW5kIHRoZW46Ci0K LSAgX2luY3JlbWVudCBmaWxlPFwlZj4KLSAgZWNobyBmaWxlPFwlZj4gPSBcbShmaWxlPFwlZj4p Ci0KLSAgIHByaW50czoKLQotICBmaWxlPG9vZmEudHh0PiA9IDIKLQotICAgV2hhdCBhcmUgYXNz b2NpYXRpdmUgYXJyYXlzIGdvb2QgZm9yPyBUaGUgY2xhc3NpYyBleGFtcGxlIGlzICJ3b3JkCi0g ICBjb3VudHMiOiBmaW5kaW5nIHRoZSBudW1iZXIgb2YgdGltZXMgZWFjaCB3b3JkIGlzIHVzZWQg aW4gYSB0ZXh0Ci0gICB3aXRob3V0IGtub3dpbmcgaW4gYWR2YW5jZSB3aGF0IHRoZSB3b3JkcyBh cmUuIFdpdGhvdXQgYXNzb2NpYXRpdmUKLSAgIGFycmF5cywgeW91ciBwcm9ncmFtIHdvdWxkIGhh dmUgdG8gYnVpbGQgYSB0YWJsZSBvZiBzb21lIGtpbmQsIGFuZAotICAgZXZlcnkgdGltZSBhIHdv cmQgd2FzIGVuY291bnRlcmVkLCBsb29rIGl0IHVwIGluIHRoZSB0YWJsZSB0byBmaW5kIGl0cwot ICAgcG9zaXRpb24gYW5kIGNvdW50ZXIsIG9yIGFkZCBpdCB0byB0aGUgdGFibGUgaWYgaXQgd2Fz bid0IGZvdW5kIC0tIGEKLSAgIHRpbWUtY29uc3VtaW5nIGFuZCBsYWJvcmlvdXMgcHJvY2Vzcy4g QXNzb2NpYXRpdmUgYXJyYXlzLCBob3dldmVyLCBsZXQKLSAgIHlvdSB1c2UgdGhlIHdvcmQgaXRz ZWxmIGFzIHRoZSB0YWJsZSBpbmRleCBhbmQgdGhlcmVmb3JlIHNpZGVzdGVwIGFsbAotICAgdGhl IHRhYmxlIGJ1aWxkaW5nIGFuZCBsb29rdXBzLgotCi0gICBMZXQncyB3b3JrIHRocm91Z2ggYSBw cmFjdGljYWwgZXhhbXBsZS4gU3VwcG9zZSB5b3UgaGF2ZSBhCi0gICBmaWxlLXRyYW5zZmVyIGxv ZyBpbiB3aGljaCBlYWNoIGxpbmUgaXMgY29tcG9zZWQgb2YgYSBudW1iZXIgb2YKLSAgIGJsYW5r LXNlcGFyYXRlZCBmaWVsZHMsIGFuZCB0aGUgOXRoIGZpZWxkIGlzIGEgZmlsZW5hbWUgKHdoaWNo IGhhcHBlbnMKLSAgIHRvIGJlIHRoZSBmb3JtYXQgb2YgY2VydGFpbiBGVFAgc2VydmVyIGxvZ3Ms IGFzIHdlbGwgYXMgb2YgQy1LZXJtaXQncwotICAgbmV3IEZUUC1mb3JtYXQgdHJhbnNhY3Rpb24g bG9nLCBkZXNjcmliZWQgaW4gWzYxNV1TZWN0aW9uIDQuMTcuMiksIGZvcgotICAgZXhhbXBsZToK LQotICBXZWQgSnVsIDE0IDA5OjM1OjMxIDE5OTkgMjIgeHgubWl0LmVkdSAxMzQxMiAvcHViL2Z0 cC9tbS9pbnRyby50eHQgLi4uLgotCi0gICBhbmQgeW91IHdhbnQgdG8gZmluZCBvdXQgaG93IG1h bnkgdGltZXMgZWFjaCBmaWxlIHdhcyB0cmFuc2ZlcnJlZC4gVGhlCi0gICBmb2xsb3dpbmcgY29k ZSBidWlsZHMgYW4gYXNzb2NpYXRpdmUgYXJyYXksIGZpbGU8PiwgY29udGFpbmluZyB0aGUKLSAg IGNvdW50cyBmb3IgZWFjaCBmaWxlOgotCi0gIGxvY2FsIG5hbWUgbGluZSBtYXggXCVjIFwlbiAg ICAgICAgICA7IERlY2xhcmUgbG9jYWwgdmFyaWFibGVzCi0gIGZvcGVuIC9yZWFkIFwlYyAvdmFy L2xvZy9mdHBkLmxvZyAgICA7IE9wZW4gdGhlIGxvZyBmaWxlIChbNjE2XVNlY3Rpb24gMS4yMikK LSAgaWYgZmFpbCBleGl0IDEgQ2FuJ3Qgb3BlbiBsb2cgICAgICAgIDsgQ2hlY2sKLSAgd2hpbGUg dHJ1ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgIDsgTG9vcCBmb3IgZWFjaCByZWNvcmQKLSAg ICAgIGZyZWFkIC9saW5lIFwlYyBsaW5lICAgICAgICAgICAgIDsgUmVhZCBhIGxpbmUKLSAgICAg IGlmIGZhaWwgYnJlYWsgICAgICAgICAgICAgICAgICAgIDsgQ2hlY2sgZm9yIGVuZCBvZiBmaWxl Ci0gICAgICAubmFtZSA6PSBcZndvcmQoXG0obGluZSksOSx7IH0pICA7IEdldCA5dGggZmllbGQg PSBmaWxlbmFtZSAoU2VjIDcuMykKLSAgICAgIF9pbmNyZW1lbnQgZmlsZTxcbShuYW1lKT4gICAg ICAgIDsgSW5jcmVtZW50IGl0cyBjb3VudGVyIChTZWMgNy45LjIpCi0gIH0KLSAgZmNsb3NlIFwl YyAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ2xvc2UgZmlsZSB3aGVuIGRvbmUuCi0KLSAg IE5vdGUgdGhhdCBfSU5DUkVNRU5UIChhbmQgSU5DUkVNRU5ULCBhbmQgW19dREVDUkVNRU5UKSB0 cmVhdCBhbiBlbXB0eQotICAgKGkuZS4gbm9uZXhpc3RlbnQpIHZhcmlhYmxlIGFzIGhhdmluZyBh IHZhbHVlIG9mIDAsIGFuZCB0aGVyZWZvcmUKLSAgIGNyZWF0ZXMgdGhlIHZhcmlhYmxlIHdpdGgg YSB2YWx1ZSBvZiAxLgotCi0gICBBdCB0aGlzIHBvaW50LCBpZiB5b3UgdG9sZCBLZXJtaXQgdG8g InNob3cgbWFjcm8gZmlsZTwiLCBpdCB3b3VsZCBsaXN0Ci0gICB0aGUgYXNzb2NpYXRpdmUgYXJy YXkuIEJ1dCBzaW5jZSB5b3UgZG9uJ3QgbmVjZXNzYXJpbHkga25vdyB0aGUgbmFtZXMKLSAgIG9m IHRoZSBmaWxlcyBpbiB0aGUgYXJyYXksIG9yIGV2ZW4gaG93IG1hbnkgZWxlbWVudHMgYXJlIGlu IHRoZSBhcnJheSwKLSAgIGhvdyBjYW4geW91IHVzZSBpdCBpbiBhIHNjcmlwdCBwcm9ncmFtPwot Ci0gICBUaGUgaWRlYSBvZiBjcmVhdGluZyBtYWNybyBuYW1lcyB0aGF0IGluY2x1ZGUgY2hhcmFj dGVyLXN0cmluZyBpbmRpY2VzCi0gICBlbmNsb3NlZCBpbiBhbmdsZSBicmFja2V0cyBpcyBwZXJm ZWN0bHkgYXJiaXRyYXJ5IGFuZCBkb2Vzbid0IGRlcGVuZCBvbgotICAgYW55IEtlcm1pdCBmZWF0 dXJlcyB0aGF0IHdlcmVuJ3QgYWxyZWFkeSB0aGVyZSAtLSB3ZSBjb3VsZCBqdXN0IGFzCi0gICBl YXNpbHkgaGF2ZSB1c2VkIHNvbWUgb3RoZXIgbm90YXRpb24sIHN1Y2ggYXMgImZpbGVbaW5kZXhd IiwKLSAgICJmaWxlOmluZGV4Iiwgb3IgImZpbGUuaW5kZXgiLCBhbmQgdGhlIGNvZGUgYWJvdmUg d291bGQgaGF2ZSB3b3JrZWQKLSAgIGp1c3QgYXMgd2VsbCAod2l0aCB0aGUgY29ycmVzcG9uZGlu ZyBzeW50YXggYWRqdXN0bWVudHMpLiBCdXQgdG8gYmUKLSAgIGFibGUgdG8gdXNlIGFuIGFzc29j aWF0aXZlIGFycmF5IGluIGEgcHJvZ3JhbSBhZnRlciB0aGUgYXJyYXkgaXMgYnVpbHQsCi0gICB3 ZSBuZWVkIGEgbWV0aG9kIG9mIGFjY2Vzc2luZyBhbGwgaXRzIGVsZW1lbnRzIHdpdGhvdXQga25v d2luZyBpbgotICAgYWR2YW5jZSB3aGF0IHRoZXkgYXJlLiBUaGF0J3Mgd2hlcmUgdGhlIGNob3Nl biBub3RhdGlvbiBjb21lcyBpbi4KLQotICAgRmlyc3Qgb2YgYWxsLCBhbnkgbWFjcm8gbmFtZSB0 aGF0IGVuZHMgd2l0aCAiPHh4eD4iICh3aGVyZSAieHh4IiBpcyBhbnkKLSAgIHN0cmluZykgaXMg Y2FzZSBzZW5zaXRpdmUsIHVubGlrZSBhbGwgb3RoZXIgbWFjcm8gbmFtZXMsIHdoaWNoIGFyZSBj YXNlCi0gICBpbmRlcGVuZGVudC4gVG8gaWxsdXN0cmF0ZSwgImZpbGU8b29mYS50eHQ+IiBhbmQg ImZpbGU8T09GQS5UWFQ+IiBhcmUKLSAgIHR3byBkaXN0aW5jdCBtYWNyb3MsIHdoZXJlYXMgIk9P RkEiLCAiT29mYSIsIGFuZCAib29mYSIsIHdoZW4gdXNlZCBhcwotICAgbWFjcm8gbmFtZXMsIGFy ZSBhbGwgdGhlIHNhbWUuCi0KLSAgIFNlY29uZCwgdGhlIG5ldyBcZmFhY29udmVydCgpIGZ1bmN0 aW9uIGNvbnZlcnRzIGFuIGFzc29jaWF0aXZlIGFycmF5Ci0gICAodGhhdCBpcywgYWxsIG1hY3Jv cyB3aXRoIG5hbWVzIG9mIHRoZSBmb3JtICJiYXNlPGluZGV4PiIgdGhhdCBoYXZlIHRoZQotICAg c2FtZSAiYmFzZSIgcGFydCkgaW50byBhIHBhaXIgb2YgcmVndWxhciBhcnJheXMgYW5kIHJldHVy bnMgdGhlIG51bWJlcgotICAgb2YgZWxlbWVudHM6Ci0KLSAgXGZhYWNvbnZlcnQobmFtZSwmYVss JmJdKQotCi0gICAibmFtZSIgaXMgdGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0aXZlIGFycmF5LCB3 aXRob3V0IHRoZSBhbmdsZSBicmFja2V0cwotICAgb3IgaW5kZXggKCJmaWxlIiBpbiBvdXIgZXhh bXBsZSkuCi0KLSAgIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgYSByZWd1bGFy IGFycmF5IGluIHdoaWNoIHRvIHN0b3JlCi0gICB0aGUgaW5kaWNlcyBvZiB0aGUgYXNzb2NpYXRp dmUgYXJyYXkgKGZpbGVuYW1lcyBpbiBvdXIgZXhhbXBsZSk7IGlmIGFuCi0gICBhcnJheSBvZiB0 aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMsIGl0IGlzIGRlc3Ryb3llZCB1bmxlc3MgdGhlIGFycmF5 IGlzCi0gICBMT0NBTC4gVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIGFub3RoZXIg cmVndWxhciBhcnJheSBpbiB3aGljaAotICAgdG8gc3RvcmUgdGhlIHZhbHVlcyAodGhlIGNvdW50 cyBpbiBvdXIgZXhhbXBsZSksIHdpdGggdGhlIHNhbWUgcnVsZXMKLSAgIGFib3V0IGFycmF5IG5h bWUgY29sbGlzaW9ucy4gSWYgeW91IGNhcmUgb25seSBhYm91dCB0aGUgaW5kaWNlcyBhbmQgbm90 Ci0gICB0aGUgdmFsdWVzLCB5b3UgY2FuIG9taXQgdGhlIHRoaXJkIGFyZ3VtZW50IHRvIFxmYWFj b252ZXJ0KCkuIEluIGFueQotICAgY2FzZSwgdGhlIGFzc29jaWF0aXZlIGFycmF5IGlzIGNvbnZl cnRlZCwgbm90IGNvcGllZDogaXRzIGVsZW1lbnRzIGFyZQotICAgbW92ZWQgdG8gdGhlIHNwZWNp ZmllZCByZWd1bGFyIGFycmF5cywgc28gYWZ0ZXIgY29udmVyc2lvbiB0aGUgb3JpZ2luYWwKLSAg IGFzc29jaWF0aXZlIGFycmF5IGlzIGdvbmUuCi0KLSAgIEFzIHdpdGggb3RoZXIgYXJyYXktbG9h ZGluZyBmdW5jdGlvbnMsIFxmYWFjb252ZXJ0KCkgc2V0cyBlbGVtZW50IDAgb2YKLSAgIGVhY2gg YXJyYXkgdG8gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkuCi0KLSAgIFRvIGNv bnRpbnVlIG91ciBleGFtcGxlOgotCi0gIC5tYXggOj0gMCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOyBNYXhpbXVtIGNvdW50Ci0gIC5cJW4gOj0gXGZhYWNvbnZlcnQoZmlsZSwm YSwmYikgICAgICAgICAgICAgOyBDb252ZXJ0Ci0gIGZvciBcJWkgMSBcJW4gMSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgOyBMb29wIHRocm91Z2ggdmFsdWVzCi0gICAgICBlY2hvIFxmbHBh ZChcJWksMykuIFwmYVtcJWldOiBcJmJbXCVpXSAgOyBFY2hvIHRoaXMgcGFpcgotICAgICAgaWYg KCA+IFwmYltcJWldIFxtKG1heCkgKSB7ICAgICAgICAgICAgIDsgQ2hlY2sgZm9yIG5ldyBtYXhp bXVtCi0gICAgICAgICAgLm5hbWUgOj0gXCZhW1wlaV0KLSAgICAgICAgICAubWF4ICA6PSBcJmJb XCVpXQotICAgICAgfQotICB9Ci0gIGVjaG8gTW9zdCBwb3B1bGFyIGZpbGU6IFxtKG5hbWUpLCBh Y2Nlc3NlczogXG0obWF4KQotCi0gICBUaGlzIGxpc3RzIHRoZSBmaWxlcyBhbmQgY291bnRzIGFu ZCB0aGVuIGFubm91bmNlcyB3aGljaCBmaWxlIGhhcyB0aGUKLSAgIGhpZ2hlc3QgY291bnQuCi0K LSAgIE5vdyBzdXBwb3NlIHlvdSB3YW50IHRvIHNvcnQgdGhlIGFycmF5IHBhaXIgY3JlYXRlZCBm cm9tIGFuIGFzc29jaWF0aXZlCi0gICBhcnJheS4gSW4gb3VyIGV4YW1wbGUsIFwmYVtdIGNvbnRh aW5zIGZpbGVuYW1lcywgYW5kIFwmYltdIGNvbnRhaW5zIHRoZQotICAgYXNzb2NpYXRlZCBjb3Vu dHMuIEhlcmUgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIEFSUkFZIFNPUlQgY29tbWFuZCdzCi0g ICBhYmlsaXR5IHRvIHNvcnQgYSBzZWNvbmQgYXJyYXkgYWNjb3JkaW5nIHRvIHRoZSBmaXJzdCBv bmU6Ci0KLSAgYXJyYXkgc29ydCAvcmV2ZXJzZSAvbnVtZXJpYyAmYiAmYSAgICAgICAgICA7IERl c2NlbmRpbmcgc29ydCBieSBjb3VudAotCi0gICBOb3cgdG8gc2VlIHRoZSB0b3AgZml2ZSBmaWxl cyBhbmQgdGhlaXIgY291bnRzOgotCi0gIGVjaG8gVGhlIHRvcCA1IGZpbGVzIGFyZToKLSAgZm9y IFwlaSAxIDUgMSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IExvb3AgdGhyb3VnaCB0 b3AgNSB2YWx1ZXMKLSAgICAgIGVjaG8gXGZscGFkKFwlaSwzKS4gXCZhW1wlaV06IFwmYltcJWld ICA7IEVjaG8gdGhpcyBwYWlyCi0gIH0KLQotICAgIDcuMTAuMTEuIFRyYW5zZmVycmluZyBBcnJh eSBDb250ZW50cyB0byBPdGhlciBDb21wdXRlcnMKLQotICAgVGhlIFNFTkQgL0FSUkFZOmFycmF5 bmFtZSBjb21tYW5kIChbNjE3XVNlY3Rpb24gNC43LjEpIGFsbG93cyB5b3UgdG8KLSAgIHNlbmQg dGhlIGNvbnRlbnRzIG9mIGFueSBhcnJheSwgb3IgYW55IGNvbnRpZ3VvdXMgc2VnbWVudCBvZiBp dCwgaW4KLSAgIGVpdGhlciB0ZXh0IG9yIGJpbmFyeSBtb2RlIHRvIGFub3RoZXIgY29tcHV0ZXIs IHVzaW5nIEtlcm1pdCBwcm90b2NvbC4KLSAgIFdoZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRo IEMtS2VybWl0J3Mgb3RoZXIgZmVhdHVyZXMgKHRoZSBhcnJheQotICAgZmVhdHVyZXMgZGVzY3Jp YmVkIGluIHRoaXMgc2VjdGlvbjsgdGhlIGZpbGUgaS9vIHBhY2thZ2UgZnJvbQotICAgWzYxOF1T ZWN0aW9uIDEuMjI7IGl0cyBkZWNpc2lvbi1tYWtpbmcsIHBhdHRlcm4tbWF0Y2hpbmcsIGFuZCBz dHJpbmcKLSAgIG1hbmlwdWxhdGlvbiBjYXBhYmlsaXRpZXMsIGFuZCBzbyBvbikgdGhlIHBvc3Np YmlsaXRpZXMgYXJlIGVuZGxlc3M6Ci0gICBleHRyYWN0cyBvZiBsYXJnZSBmaWxlcywgcmVtb3Rl IGRhdGFiYXNlIHF1ZXJpZXMsIC4uLiwgYWxsIHdpdGhvdXQKLSAgIHJlY291cnNlIHRvIHN5c3Rl bS1kZXBlbmRlbnQgbWVjaGFuaXNtcyBzdWNoIFVOSVggcGlwZXMgYW5kIGZpbHRlcnMsCi0gICB0 aHVzIGVuc3VyaW5nIGNyb3NzLXBsYXRmb3JtIHBvcnRhYmlsaXR5IG9mIHNjcmlwdHMgdGhhdCB1 c2UgdGhlc2UKLSAgIGZlYXR1cmVzLgotCi0gICBXaGVuIHNlbmRpbmcgYW4gYXJyYXkgaW4gdGV4 dCBtb2RlLCBLZXJtaXQgYXBwZW5kcyBhIGxpbmUgdGVybWluYXRvciB0bwotICAgZWFjaCBhcnJh eSBlbGVtZW50LCBldmVuIGVtcHR5IG9uZXMsIGFuZCBpdCBhbHNvIGNvbnZlcnRzIHRoZSBjaGFy YWN0ZXIKLSAgIHNldCBmcm9tIHlvdXIgY3VycmVudCBGSUxFIGNoYXJhY3Rlci1zZXQgdG8geW91 ciBjdXJyZW50IFRSQU5TRkVSCi0gICBjaGFyYWN0ZXItc2V0LCBpZiBhbnkuIE5vIGNvbnZlcnNp b25zIGFyZSBtYWRlIG9yIGxpbmUgdGVybWluYXRpb25zCi0gICBhZGRlZCBpbiBiaW5hcnkgbW9k ZS4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgYXJyYXk6Ci0KLSAgZGNsIFwmYVtdID0gT25l IFR3byBUaHJlZSBGb3VyIEZpdmUgU2l4Ci0KLSAgIGlzIHNlbnQgYXMgc2l4IGxpbmVzLCBvbmUg d29yZCBwZXIgbGluZSwgaW4gdGV4dCBtb2RlLCBhbmQgYXMgdGhlIGJhcmUKLSAgIHVudGVybWlu YXRlZCBzdHJpbmcgIk9uZVR3b1RocmVlRm91ckZpdmVTaXgiIGluIGJpbmFyeSBtb2RlLgotCi0g ICBZb3Ugc2hvdWxkIGFsd2F5cyBpbmNsdWRlIGEgL1RFWFQgb3IgL0JJTkFSWSBzd2l0Y2ggaW4g YW55IFNFTkQgL0FSUkFZCi0gICBjb21tYW5kIHRvIGZvcmNlIHRoZSBkZXNpcmVkIHRyYW5zZmVy IG1vZGUsIG90aGVyd2lzZSB5b3UncmUgbGlrZWx5IHRvCi0gICBiZSBzdXJwcmlzZWQgYnkgdGhl IGVmZmVjdHMgZGVzY3JpYmVkIGluIFs2MTldU2VjdGlvbiA0LjMuCi0KLSAgIEhlcmUgYXJlIHNv bWUgZXhhbXBsZXM6Ci0KLSAgIHNlbmQgL3RleHQgL2FycmF5OlwmYVtdCi0gICAgICAgICAgU2Vu ZHMgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgYXJyYXkgXCZhW10gaW4gdGV4dCBtb2RlLiBT aW5jZQotICAgICAgICAgIGFuIGFzLW5hbWUgaXMgbm90IGluY2x1ZGVkLCB0aGUgcmVjZWl2ZXIg aXMgdG9sZCB0aGUgZmlsZW5hbWUgaXMKLSAgICAgICAgICBfYXJyYXlfYV8uCi0KLSAgIHNlbmQg L3RleHQgL2FycmF5OiZhW10KLSAgIHNlbmQgL3RleHQgL2FycmF5OmFbXQotICAgc2VuZCAvdGV4 dCAvYXJyYXk6JmEKLSAgIHNlbmQgL3RleHQgL2FycmF5OmEKLSAgICAgICAgICBUaGVzZSBhcmUg YWxsIGVxdWl2YWxlbnQgdG8gdGhlIHByZXZpb3VzIGV4YW1wbGUuCi0KLSAgIHNlbmQgL3RleHQg L2FycmF5OiZhIC9hcy1uYW1lOmZvby5iYXIKLSAgICAgICAgICBBcyBhYm92ZSwgYnV0IHRoZSBh cnJheSBpcyBzZW50IHVuZGVyIHRoZSBuYW1lIGZvby5iYXIuCi0KLSAgIHNlbmQgL3RleHQgL2Fy cmF5OiZhWzEwMDoxOTldIC9hczpmb28uYmFyCi0gICAgICAgICAgQXMgYWJvdmUsIGJ1dCBvbmx5 IHRoZSBlbGVtZW50cyBmcm9tIDEwMCB0aHJvdWdoIDE5OSBhcmUgc2VudC4KLQotICAgSW4gdGV4 dC1tb2RlIHRyYW5zZmVycywgY2hhcmFjdGVyIHNldHMgYXJlIHRyYW5zbGF0ZWQgYWNjb3JkaW5n IHRvIHlvdXIKLSAgIGN1cnJlbnQgc2V0dGluZ3MsIGp1c3QgYXMgZm9yIHRleHQgZmlsZXMuIElu IGJpbmFyeSBtb2RlLCBvZiBjb3Vyc2UsCi0gICB0aGVyZSBpcyBubyBjaGFyYWN0ZXItc2V0IHRy YW5zbGF0aW9uIG9yIG90aGVyIGNvbnZlcnNpb24gb2YgYW55IGtpbmQuCi0gICBCdXQgcmVtZW1i ZXIgdGhhdCBhcnJheSBlbGVtZW50cyBjYW4gbm90IGNvbnRhaW4gdGhlIE5VTCAoQVNDSUkgMCkK LSAgIGNoYXJhY3Rlciwgc2luY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgYXMgTlVMLXRlcm1pbmF0 ZWQgc3RyaW5ncy4KLQotICAgSGVyZSdzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gc2Vu ZCBhbGwgdGhlIGxpbmVzICh1cCB0byAxMDAwIG9mCi0gICB0aGVtKSBmcm9tIGEgZmlsZSBhbmlt YWxzLnR4dCB0aGF0IGNvbnRhaW4gdGhlIHdvcmRzICJjYXQiLCAiZG9nIiwgb3IKLSAgICJob2ci IChzZWUgWzYyMF1TZWN0aW9uIDQuOSBhYm91dCBwYXR0ZXJuIG1hdGNoaW5nKToKLQotICBkZWNs YXJlIFwmYVsxMDAwXQotICBmb3BlbiAvcmVhZCBcJWMgYW5pbWFscy50eHQKLSAgaWYgZmFpbCBl eGl0IDEKLSAgLlwlaSA9IDAKLSAgd2hpbGUgdHJ1ZSB7Ci0gICAgICBmcmVhZCBcJWMgbGluZQot ICAgICAgaWYgZmFpbCBicmVhawotICAgICAgaWYgbWF0Y2gge1xtKGxpbmUpfSB7KntjYXQsW2Ro XW9nfSp9IHsKLSAgICAgICAgICBpbmNyZW1lbnQgXCVpCi0gICAgICAgICAgaWYgKCA+IFwlaSBc ZmRpbSgmYSkgKSBicmVhawotICAgICAgICAgIC5cJmFbXCVpXSA6PSBcbShsaW5lKQotICAgICAg fQotICB9Ci0gIGZjbG9zZSBcJWMKLSAgc2VuZCAvYXJyYXk6YVsxOlwlaV0gL3RleHQKLQotICAg Tm90ZSB0aGF0IHdlIGFyZSBjYXJlZnVsIHRvIHNlbmQgb25seSB0aGUgcGFydCBvZiB0aGUgYXJy YXkgdGhhdCB3YXMKLSAgIGZpbGxlZCwgbm90IHRoZSBlbnRpcmUgYXJyYXksIGJlY2F1c2UgdGhl cmUgYXJlIGxpa2VseSB0byBiZSBsb3RzIG9mCi0gICB1bnVzZWQgZWxlbWVudHMgYXQgdGhlIGVu ZCwgYW5kIHRoZXNlIHdvdWxkIGJlIHNlbnQgYXMgYmxhbmsgbGluZXMKLSAgIG90aGVyd2lzZS4K LQotICAgVGhpcyBleGFtcGxlIHJhaXNlcyBhbiBpbnRlcmVzdGluZyBxdWVzdGlvbjogd2hhdCBp ZiB3ZSB3YW50IHRvIHNlbmQKLSAgIEFMTCB0aGUgbWF0Y2hpbmcgbGluZXMsIGV2ZW4gaWYgdGhl cmUgYXJlIG1vcmUgdGhhbiAxMDAwIG9mIHRoZW0sIGJ1dAotICAgd2UgZG9uJ3Qga25vdyB0aGUg bnVtYmVyIGluIGFkdmFuY2U/IENsZWFybHkgdGhlIHByb2JsZW0gaXMgbGltaXRlZCBieQotICAg S2VybWl0J3MgKGFuZCB0aGUgY29tcHV0ZXIncykgbWVtb3J5LiBJZiB0aGVyZSBhcmUgYSB0aG91 c2FuZCB0cmlsbGlvbgotICAgbWF0Y2hpbmcgbGluZXMsIHRoZXkgbW9zdCBsaWtlbHkgd2lsbCBu b3QgZml0IGluIG1lbW9yeSwgYW5kIGluIHRoaXMKLSAgIGNhc2UgdGhlIG9ubHkgc29sdXRpb24g aXMgdG8gd3JpdGUgdGhlbSBmaXJzdCB0byBhIHRlbXBvcmFyeSBmaWxlIG9uCi0gICBtYXNzIHN0 b3JhZ2UgYW5kIHRoZW4gc2VuZCB0aGUgdGVtcG9yYXJ5IGZpbGUgYW5kIGRlbGV0ZSBpdCBhZnRl cndhcmRzLgotCi0gICBIb3dldmVyLCB3aGVuIHRoZSBzZWxlY3Rpb24gaXMgbGlrZWx5IHRvIGZp dCBpbiBtZW1vcnksIHRoZQotICAgb25jZS1mYW1pbGlhciB0ZWNobmlxdWUgb2YgaW5pdGlhbCBh bGxvY2F0aW9uIHdpdGggZXh0ZW50cyBjYW4gYmUgdXNlZDoKLQotICBpZiBtYXRjaCB7XG0obGlu ZSl9IHsqe2NhdCxbZGhdb2d9Kn0gewotICAgICAgaW5jcmVtZW50IFwlaQotICAgICAgaWYgKCA+ IFwlaSBcZmRpbSgmYSkgKSB7Ci0gICAgICAgICAgYXJyYXkgcmVzaXplIGEgXGZkaW0oJmEpKzEw MAotICAgICAgICAgIGlmIGZhaWwgc3RvcCAxIE1FTU9SWSBGVUxMCi0gICAgICAgICAgZWNobyBO RVcgRElNRU5TSU9OOiBcZmRpbSgmYSkKLSAgICAgIH0KLSAgICAgIC5cJmFbXCVpXSA6PSBcbShs aW5lKQotICB9Ci0KLSAgIFRoaXMgZ3Jvd3MgdGhlIGFycmF5IGluIGNodW5rcyBvZiAxMDAgYXMg bmVlZGVkLgotCi0gIDcuMTEuIE9VVFBVVCBDb21tYW5kIEltcHJvdmVtZW50cwotCi0gICBMSU5F T1VUIFsgdGV4dCBdCi0gICAgICAgICAgVGhpcyBjb21tYW5kIGlzIGV4YWN0bHkgbGlrZSBPVVRQ VVQsIGV4Y2VwdCBpdCBzdXBwbGllcyBhCi0gICAgICAgICAgY2FycmlhZ2UgcmV0dXJuIGF0IHRo ZSBlbmQgb2YgdGhlIHRleHQuICJsaW5lb3V0IGV4aXQiIGlzCi0gICAgICAgICAgZXhhY3RseSB0 aGUgc2FtZSBhcyAib3V0cHV0IGV4aXRcMTMiLgotCi0gICBTRVQgT1VUUFVUIFNQRUNJQUwtRVND QVBFUyB7IE9OLCBPRkYgfQotICAgICAgICAgIFRoaXMgY29tbWFuZCBsZXRzIHlvdSB0ZWxsIEMt S2VybWl0IHdoZXRoZXIgdG8gcHJvY2VzcyBcTiwgXEwsCi0gICAgICAgICAgYW5kIFxCIHNwZWNp YWxseSBpbiBhbiBPVVRQVVQgY29tbWFuZCwgYXMgZGlzdGluY3QgZnJvbSBvdGhlciBcCi0gICAg ICAgICAgc2VxdWVuY2VzIChzdWNoIGFzIFwlYSwgXDEzLCBcdih0aW1lKSwgZXRjKS4gTm9ybWFs bHkgdGhlCi0gICAgICAgICAgc3BlY2lhbCBlc2NhcGVzIGFyZSBoYW5kbGVkLiBVc2UgU0VUIE9V VFBVVCBTUEVDSUFMLUVTQ0FQRVMgT0ZGCi0gICAgICAgICAgdG8gZGlzYWJsZSB0aGVtLgotCi0g ICBEaXNhYmxpbmcgc3BlY2lhbCBlc2NhcGVzIGlzIG5lY2Vzc2FyeSBpbiBzaXR1YXRpb25zIHdo ZW4geW91IG5lZWQgdG8KLSAgIHRyYW5zbWl0IGxpbmVzIG9mIGRhdGEgYW5kIHlvdSBoYXZlIG5v IGNvbnRyb2wgb3ZlciB3aGF0IGlzIGluIHRoZQotICAgbGluZXMuIEZvciBleGFtcGxlLCBhIGZp bGUgb29mYS50eHQgdGhhdCBjb250YWluczoKLQotICBUaGlzIGlzIGEgZmlsZQotICBJdCBoYXMg XCVhIHZhcmlhYmxlcyBpbiBpdAotICBBbmQgaXQgaGFzIFxCIGluIGl0LgotICBBbmQgaXQgaGFz IFxMIGluIGl0LgotICBBbmQgaXQgaGFzIFxOIGluIGl0LgotICBBbmQgdGhpcyBpcyB0aGUgbGFz dCBsaW5lLgotCi0gICBjYW4gYmUgc2VudCBsaWtlIHRoaXM6Ci0KLSAgbG9jYWwgbGluZQotICBz ZXQgb3V0cHV0IHNwZWNpYWwtZXNjYXBlcyBvZmYKLSAgZm9wZW4gL3JlYWQgXCVjIG9vZmEudHh0 Ci0gIGlmIGZhaWwgc3RvcCAxIENhbid0IG9wZW4gb29mYS50eHQKLSAgd2hpbGUgc3VjY2VzcyB7 Ci0gICAgICBmcmVhZCBcJWMgbGluZQotICAgICAgaWYgZmFpbCBicmVhawotICAgICAgOyBBZGQg ZmlsdGVyaW5nIG9yIHByb2Nlc3NpbmcgY29tbWFuZHMgaGVyZS4uLgotICAgICAgb3V0cHV0IFxt KGxpbmUpXDEzCi0gIH0KLQotICA3LjEyLiBGdW5jdGlvbiBhbmQgVmFyaWFibGUgRGlhZ25vc3Rp Y3MKLQotICAgSW4gQy1LZXJtaXQgNi4wIGFuZCBlYXJsaWVyLCB0aGUgb25seSBkaWFnbm9zdGlj IHJldHVybmVkIGJ5IGEgZmFpbGluZwotICAgZnVuY3Rpb24gY2FsbCB3YXMgYW4gZW1wdHkgdmFs dWUsIHdoaWNoIChhKSBjb3VsZCBub3QgYmUgZGlzdGluZ3Vpc2hlZAotICAgZnJvbSBhbiBlbXB0 eSB2YWx1ZSByZXR1cm5lZCBieSBhIHN1Y2Nlc3NmdWwgZnVuY3Rpb24gY2FsbDsgKGIpIGRpZCBu b3QKLSAgIGdpdmUgYW55IGluZGljYXRpb24gb2YgdGhlIGNhdXNlIG9mIGZhaWx1cmU7IGFuZCAo YykgZGlkIG5vdCBjYXVzZSB0aGUKLSAgIGVuY2xvc2luZyBzdGF0ZW1lbnQgdG8gZmFpbC4gQy1L ZXJtaXQgNy4wIGNvcnJlY3RzIHRoZXNlIGRlZmljaWVuY2llcy4KLQotICAgU0VUIEZVTkNUSU9O IERJQUdOT1NUSUNTIHsgT04sIE9GRiB9Ci0gICAgICAgICAgd2hlbiBPTiwgYWxsb3dzIGJ1aWx0 LWluIGZ1bmN0aW9ucyB0byByZXR1cm4gZGlhZ25vc3RpYyBtZXNzYWdlcwotICAgICAgICAgIHdo ZW4gaW1wcm9wZXJseSByZWZlcmVuY2VkLCBpbnN0ZWFkIG9mIGFuIGVtcHR5IHN0cmluZy4gRlVO Q1RJT04KLSAgICAgICAgICBESUFHTk9TVElDUyBhcmUgT04gYnkgZGVmYXVsdC4gV2hlbiBPRkYs IGltcHJvcGVybHkgcmVmZXJlbmNlZAotICAgICAgICAgIGZ1bmN0aW9ucyBjb250aW51ZSB0byBy ZXR1cm4gYW4gZW1wdHkgc3RyaW5nLiBUaGlzIGNvbW1hbmQgYWxzbwotICAgICAgICAgIGFmZmVj dHMgYnVpbHQtaW4gdmFyaWFibGVzOyBpbiB0aGlzIGNhc2UsIGFuIGVycm9yIG1lc3NhZ2UgaXMK LSAgICAgICAgICByZXR1cm5lZCBvbmx5IGlmIHRoZSB2YXJpYWJsZSBkb2VzIG5vdCBleGlzdC4g V2hlbiBGVU5DVElPTgotICAgICAgICAgIERJQUdOT1NUSUNTIGFyZSBPTiwgdGhlIGVycm9yIG1l c3NhZ2UgaXMgYWxzbyBwcmludGVkLgotCi0gICBGb3IgdmFyaWFibGVzLCB0aGUgb25seSBtZXNz YWdlIGlzOgotCi0gIDxFUlJPUjpOT19TVUNIX1ZBUklBQkxFOlx2KG5hbWUpPgotCi0gICB3aGVy ZSAibmFtZSIgaXMgdGhlIG5hbWUgb2YgdGhlIG5vbmV4aXN0ZW50IHZhcmlhYmxlLgotCi0gICBG b3IgZnVuY3Rpb25zLCB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlIGlzOgotCi0gIDxFUlJPUjptZXNz YWdlOlxmbmFtZSgpPgotCi0gICB3aGVyZSAibWVzc2FnZSIgaXMgcmVwbGFjZWQgYnkgYSBtZXNz YWdlLCBhbmQgIm5hbWUiIGlzIHJlcGxhY2VkIGJ5IHRoZQotICAgZnVuY3Rpb24gbmFtZSwgZS5n LiA8RVJST1I6QVJHX05PVF9OVU1FUklDOlxmbW9kKCk+LiBNZXNzYWdlcyBpbmNsdWRlOgotCi0g IEFSR19CQURfQVJSQVkgICAgICAgQW4gYXJndW1lbnQgY29udGFpbnMgYSBtYWxmb3JtZWQgYXJy YXkgcmVmZXJlbmNlLgotICBBUkdfQkFEX0RBVEUgICAgICAgIEFuIGFyZ3VtZW50IGNvbnRhaW5z IGEgbWFsZm9ybWVkIGRhdGUgYW5kL29yIHRpbWUuCi0gIEFSR19CQURfUEhPTkVOVU0gICAgQW4g YXJndW1lbnQgY29udGFpbnMgYSBtYWxmb3JtZWQgdGVsZXBob25lIG51bWJlci4KLSAgQVJHX0JB RF9WQVJJQUJMRSAgICBBbiBhcmd1bWVudCBjb250YWlucyBhIG1hbGZvcm1lZCBcJXggdmFyaWFi bGUuCi0gIEFSR19JTkNPTVBMRVRFICAgICAgQW4gYXJndW1lbnQgaXMgaW5jb21wbGV0ZSAoZS5n LiBhIGJyb2tlbiBCYXNlNjQgc3RyaW5nKS4KLSAgQVJHX0VWQUxfRkFJTFVSRSAgICBBbiBhcmd1 bWVudCBjb3VsZCBub3QgYmUgZXZhbHVhdGVkIChpbnRlcm5hbCBlcnJvcikuCi0gIEFSR19OT1Rf QVJSQVkgICAgICAgQW4gYXJndW1lbnQgcmVmZXJlbmNlcyBhbiBhcnJheSB0aGF0IGlzIG5vdCBk ZWNsYXJlZC4KLSAgQVJHX05PVF9OVU1FUklDICAgICBBbiBhcmd1bWVudCB0aGF0IG11c3QgYmUg aW50ZWdlciBjb250YWlucyBub24tZGlnaXRzLgotICBBUkdfTk9UX0ZMT0FUICAgICAgIEFuIGFy Z3VtZW50IGhhcyBiYWQgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGZvcm1hdC4KLSAgQVJHX05PVF9W QVJJQUJMRSAgICBBbiBhcmd1bWVudCB0aGF0IG11c3QgYmUgYSB2YXJpYWJsZSBpcyBub3QgYSB2 YXJpYWJsZS4KLSAgQVJHX09VVF9PRl9SQU5HRSAgICBBbiBhcmd1bWVudCdzIG51bWVyaWMgdmFs dWUgaXMgdG9vIGJpZyBvciB0b28gc21hbGwsCi0gICAgICAgICAgICAgICAgICAgICAgb3IgYW4g YXJndW1lbnQgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzIChlLmcuIGEgaGV4Ci0gICAgICAg ICAgICAgICAgICAgICAgb3IgQmFzZS02NCBzdHJpbmcpLgotICBBUkdfVE9PX0xPTkcgICAgICAg IEFuIGFyZ3VtZW50J3MgdmFsdWUgaXMgdG9vIGxvbmcuCi0gIEFSUkFZX0ZBSUxVUkUgICAgICAg RmFpbHVyZSB0byBjcmVhdGUgYW4gYXJyYXkuCi0gIERJVklERV9CWV9aRVJPICAgICAgRXhlY3V0 aW9uIG9mIHRoZSBmdW5jdGlvbiB3b3VsZCBjYXVzZSBkaXZpc2lvbiBieSB6ZXJvLgotICBGTE9B VElOR19QT0lOVF9PUCAgIEV4ZWN1dGlvbiBlcnJvciBpbiBhIGZsb2F0aW5nLXBvaW50IG9wZXJh dGlvbi4KLSAgRklMRV9OT1RfRk9VTkQgICAgICBGaWxlbmFtZSBhcmd1bWVudCBuYW1lcyBhIGZp bGUgdGhhdCBjYW4ndCBiZSBmb3VuZC4KLSAgRklMRV9OT1RfUkVBREFCTEUgICBGaWxlbmFtZSBh cmd1bWVudCBpcyBub3QgYSByZWd1bGFyIGZpbGUuCi0gIEZJTEVfTk9UX0FDQ0VTU0lCTEUgRmls ZW5hbWUgYXJndW1lbnQgbmFtZXMgYSBmaWxlIHRoYXQgaXMgcmVhZC1wcm90ZWN0ZWQuCi0gIEZJ TEVfRVJST1IgICAgICAgICAgT3RoZXIgZXJyb3Igd2l0aCBmaWxlbmFtZSBhcmd1bWVudC4KLSAg RklMRV9OT1RfT1BFTiAgICAgICBBIGZpbGUgZnVuY3Rpb24gd2FzIGdpdmVuIGEgY2hhbm5lbCB0 aGF0IGlzIG5vdCBvcGVuLgotICBGSUxFX0VSUk9SXy1uICAgICAgIEEgZmlsZSBmdW5jdGlvbiBn b3QgZXJyb3IgLW4gKFs2MjFdU2VjdGlvbiAxLjIyKS4KLSAgTE9PS1VQX0ZBSUxVUkUgICAgICBF cnJvciBsb29raW5nIHVwIGZ1bmN0aW9uIChzaG91bGRuJ3QgaGFwcGVuKS4KLSAgTUFMTE9DX0ZB SUxVUkUgICAgICBGYWlsdXJlIHRvIGFsbG9jYXRlIG5lZWRlZCBtZW1vcnkgKHNob3VsZG4ndCBo YXBwZW4pLgotICBOQU1FX0FNQklHVU9VUyAgICAgIFRoZSBmdW5jdGlvbiBpcyBub3QgdW5pcXVl bHkgaWRlbnRpZmllZC4KLSAgTUlTU0lOR19BUkcgICAgICAgICBBIHJlcXVpcmVkIGFyZ3VtZW50 IGlzIG1pc3NpbmcuCi0gIE5PX1NVQ0hfRlVOQ1RJT04gICAgQW4gYXJndW1lbnQgcmVmZXJlbmNl cyBhIGZ1bmN0aW9uIHRoYXQgaXMgbm90IGRlZmluZWQuCi0gIE5PX1NVQ0hfTUFDUk8gICAgICAg QW4gYXJndW1lbnQgcmVmZXJlbmNlcyBhIG1hY3JvIHRoYXQgaXMgbm90IGRlZmluZWQuCi0gIFJF U1VMVF9UT09fTE9ORyAgICAgVGhlIHJlc3VsdCBvZiBhIGZ1bmN0aW9uIGlzIHRvbyBsb25nLgot ICBVTktOT1dOX0ZVTkNUSU9OICAgIEludGVybmFsIGVycm9yIGxvY2F0aW5nIGZ1bmN0aW9uIChz aG91bGRuJ3QgaGFwcGVuKS4KLQotICAgRXhhbXBsZXM6Ci0KLSAgYXNzaWduIFwlbSBcZm1vZCgp Ci0gID88RVJST1I6TUlTU0lOR19BUkc6XGZtb2QoKT4KLSAgZWNobyAiXGZjb250ZW50cyhcJW0p IgotICAiPEVSUk9SOk1JU1NJTkdfQVJHOlxmbW9kKCk+IgotICBlY2hvIFxmbW9kKDMseCkKLSAg PzxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XGZtb2QoKT4KLSAgZWNobyBcZm1vZCgzLDQtMioyKQot ICA/PEVSUk9SOkRJVklERV9CWV9aRVJPOlxmbW9kKCk+Ci0KLSAgIE5vdGljZSB0aGUgdXNlIG9m IFxmY29udGVudHMoKSBpbiBlY2hvaW5nIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlIHRoYXQKLSAg IGNvbnRhaW5zIGEgcmV0dXJuZWQgZXJyb3IgbWVzc2FnZS4gVGhhdCdzIGJlY2F1c2UgdGhlIGVy cm9yIG1lc3NhZ2UKLSAgIGluY2x1ZGVzIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBvciBmdW5j dGlvbiB0aGF0IGZhaWxlZCwgc28geW91IG11c3QKLSAgIHVzZSBcZmNvbnRlbnRzKCkgdG8gcHJl dmVudCBpdCBmcm9tIGJlaW5nIGV2YWx1YXRlZCBhZ2FpbiAtLSBvdGhlcndpc2UKLSAgIHRoZSBz YW1lIGVycm9yIHdpbGwgb2NjdXIuCi0KLSAgIFRoZSBoYW5kbGluZyBvZiBmdW5jdGlvbiBhbmQg dmFyaWFibGUgZXJyb3JzIGlzIGNvbnRyb2xsZWQgYnk6Ci0KLSAgIFNFVCBGVU5DVElPTiBFUlJP UiB7IE9OLCBPRkYgfQotICAgICAgICAgIFRlbGxzIHdoZXRoZXIgaW52YWxpZCBmdW5jdGlvbiBj YWxscyBvciB2YXJpYWJsZSByZWZlcmVuY2VzCi0gICAgICAgICAgc2hvdWxkIGNhdXNlIGNvbW1h bmQgZXJyb3JzLiBGVU5DVElPTiBFUlJPUiBpcyBPTiBieSBkZWZhdWx0LgotICAgICAgICAgIFdo ZW4gT04sIGFuZCBhbiBlcnJvciBpcyBkaWFnbm9zZWQgaW4gYSBidWlsdC1pbiBmdW5jdGlvbiBv cgotICAgICAgICAgIHZhcmlhYmxlLCB0aGUgY29tbWFuZCB0aGF0IGluY2x1ZGVzIHRoZSBmdW5j dGlvbiBjYWxsIG9yCi0gICAgICAgICAgdmFyaWFibGUgcmVmZXJlbmNlIGZhaWxzLiBUaGUgZmFp bGluZyBjb21tYW5kIGNhbiBiZSBoYW5kbGVkIGluCi0gICAgICAgICAgdGhlIG5vcm1hbCB3YXkg d2l0aCBJRiBGQUlMVVJFIC8gSUYgU1VDQ0VTUywgU0VUIFRBS0UgRVJST1IsIG9yCi0gICAgICAg ICAgU0VUIE1BQ1JPIEVSUk9SLgotCi0gICBXaGVuIEZVTkNUSU9OIERJQUdOT1NUSUNTIGlzIE9G RiwgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZS4KLQotICAgU0hPVyBTQ1JJUFRTIGRpc3BsYXlz IHRoZSBjdXJyZW50IEZVTkNUSU9OIERJQUdOT1NUSUNTIGFuZCBFUlJPUgotICAgc2V0dGluZ3Mu Ci0KLSAgNy4xMy4gUmV0dXJuIFZhbHVlIG9mIE1hY3JvcwotCi0gICBJbiBDLUtlcm1pdCA1QSBh bmQgNi4wLCB0aGVyZSBhcmUgdHdvIHdheXMgdG8gcmV0dXJuIG9uZSBsZXZlbCBmcm9tIGEKLSAg IG1hY3JvOiBSRVRVUk4gdmFsdWUgYW5kIEVORCBudW1iZXIgdGV4dC4gV2hlbiBSRVRVUk4gaXMg dXNlZCwgdGhlCi0gICB2YWx1ZSwgd2hpY2ggY2FuIGJlIGEgbnVtYmVyIG9yIGEgdGV4dCBzdHJp bmcsIGlzIGFzc2lnbmVkIHRvCi0gICBcdihyZXR1cm4pLiBXaGVuIEVORCB3YXMgdXNlZCwgaG93 ZXZlciwgXHYocmV0dXJuKSB3YXMgbm90IHNldC4KLSAgIFNVQ0NFU1MvRkFJTFVSRSB3YXMgc2V0 IGFjY29yZGluZyB0byB3aGV0aGVyIHRoZSBudW1iZXIgd2FzIHplcm8sIGFuZAotICAgdGhlIHRl eHQgd2FzIHByaW50ZWQsIGJ1dCB0aGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgd2FzIGxv c3QuCi0KLSAgIEluIEMtS2VybWl0IDcuMCwgdGhlIEVORCBudW1iZXIgaXMgYXZhaWxhYmxlIGlu IHRoZSBcdihyZXR1cm4pCi0gICB2YXJpYWJsZS4KLQotICA3LjE0LiBUaGUgQVNTRVJULCBGQUlM LCBhbmQgU1VDQ0VFRCBDb21tYW5kcy4KLQotICAgVGhlIEFTU0VSVCBjb21tYW5kIGlzIGp1c3Qg bGlrZSB0aGUgSUYgY29tbWFuZCwgYnV0IHdpdGhvdXQgYSBjb21tYW5kCi0gICB0byBleGVjdXRl LiBJdCBzaW1wbHkgc3VjY2VlZHMgb3IgZmFpbHMsIGFuZCB0aGlzIGNhbiBiZSB0ZXN0ZWQgYnkg YQotICAgc3Vic2VxdWVudCBJRiBTVUNDRVNTIG9yIElGIEZBSUxVUkUgY29tbWFuZC4gRXhhbXBs ZToKLQotICBBU1NFUlQgPSAxIDEKLSAgSUYgU1VDQ0VTUyBlY2hvIDEgPSAxLgotCi0gICBUaGUg RkFJTCBjb21tYW5kIGRvZXMgbm90aGluZywgYnV0IGFsd2F5cyBmYWlscy4gVGhlIFNVQ0NFRUQg Y29tbWFuZAotICAgZG9lcyBub3RoaW5nLCBidXQgYWx3YXlzIHN1Y2NlZWRzLgotCi0gICBUaGVz ZSBjb21tYW5kcyBhcmUgaGFuZHkgaW4gZGVidWdnaW5nIHNjcmlwdHMgd2hlbiB5b3Ugd2FudCB0 byBpbmR1Y2UgYQotICAgZmFpbHVyZSAob3Igc3VjY2VzcykgdGhhdCBub3JtYWxseSB3b3VsZCBu b3Qgb2NjdXIsIGUuZy4gZm9yIHRlc3RpbmcKLSAgIGJsb2NrcyBvZiBjb2RlIHRoYXQgbm9ybWFs bHkgYXJlIG5vdCBleGVjdXRlZC4KLQotICA3LjE1LiBVc2luZyBBbGFybXMKLQotICAgQWxhcm1z IG1heSBiZSBzZXQgaW4gdHdvIHdheXM6Ci0KLSAgIFNFVCBBTEFSTSBudW1iZXIKLSAgICAgICAg ICBTZXRzIGFuIGFsYXJtIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMgImZyb20gbm93 IiwgaS5lLgotICAgICAgICAgIGluIHRoZSBmdXR1cmUsIHJlbGF0aXZlIHRvIHdoZW4gdGhlIFNF VCBBTEFSTSBjb21tYW5kIHdhcyBnaXZlbi4KLSAgICAgICAgICBFeGFtcGxlczoKLQotICBzZXQg YWxhcm0gNjAgICAgICAgIDsgNjAgc2Vjb25kcyBmcm9tIG5vdwotICBzZXQgYWxhcm0gKzYwICAg ICAgIDsgVGhlIHNhbWUgYXMgIjYwIgotICBzZXQgYWxhcm0gLTYwICAgICAgIDsgTm90IGxlZ2Fs IC0geW91IGNhbid0IHNldCBhbiBhbGFybSBpbiB0aGUgcGFzdC4KLSAgc2V0IGFsYXJtIDYwKjYw ICAgICA7IDYwIG1pbnV0ZXMgZnJvbSBub3cuCi0gIHNldCBhbGFybSBcJWErMTAgICAgOyBZb3Ug Y2FuIHVzZSB2YXJpYWJsZXMsIGV0Yy4KLQotICAgU0VUIEFMQVJNIGhoOm1tOnNzCi0gICAgICAg ICAgU2V0cyBhbiBhbGFybSBmb3IgdGhlIHNwZWNpZmllZCB0aW1lLiBJZiB0aGUgZ2l2ZW4gdGlt ZSBpcwotICAgICAgICAgIGVhcmxpZXIgdGhhbiB0aGUgY3VycmVudCB0aW1lLCB0aGUgYWxhcm0g aXMgc2V0IGZvciB0aGUgZ2l2ZW4KLSAgICAgICAgICB0aW1lIGluIHRoZSBuZXh0IGRheS4gWW91 IG1heSBnaXZlIHRoZSB0aW1lIGluIHZhcmlvdXMgZm9ybWF0czoKLQotICBzZXQgYWxhcm0gMTU6 MDA6MDAgIDsgMzowMDowMHBtCi0gIHNldCBhbGFybSAzOjAwOjAwcG0gOyAzOjAwOjAwcG0KLSAg c2V0IGFsYXJtIDM6MDBwbSAgICA7IDM6MDA6MDBwbQotICBzZXQgYWxhcm0gM3BtICAgICAgIDsg MzowMDowMHBtCi0KLSAgIFNIT1cgQUxBUk0KLSAgICAgICAgICBEaXNwbGF5cyB0aGUgY3VycmVu dCBhbGFybSwgaWYgYW55LCBpbiBzdGFuZGFyZCBkYXRlLXRpbWUgZm9ybWF0Ci0gICAgICAgICAg KHNlZSBbNjIyXVNlY3Rpb24gMS42KTogeXl5eW1tZGQgaGg6bW06c3MuCi0KLSAgIElGIEFMQVJN IGNvbW1hbmQKLSAgICAgICAgICBFeGVjdXRlcyB0aGUgY29tbWFuZCBpZiBhbiBhbGFybSBoYXMg YmVlbiBzZXQgYW5kIHRoZSBhbGFybSB0aW1lCi0gICAgICAgICAgaGFzIHBhc3NlZC4KLQotICAg SUYgQUxBUk0geyBjb21tYW5kLWxpc3QgfSBbIEVMU0UgeyBjb21tYW5kLWxpc3QgfSBdCi0gICAg ICAgICAgRXhlY3V0ZXMgdGhlIGNvbW1hbmQtbGlzdCBpZiBhbiBhbGFybSBoYXMgYmVlbiBzZXQg YW5kIHRoZSBhbGFybQotICAgICAgICAgIHRpbWUgaGFzIHBhc3NlZC4gT3RoZXJ3aXNlLCBpZiBh biBFTFNFIHBhcnQgaXMgZ2l2ZW4sIGl0cwotICAgICAgICAgIGNvbW1hbmQtbGlzdCBpcyBleGVj dXRlZC4KLQotICAgQ0xFQVIgQUxBUk0KLSAgICAgICAgICBDbGVhcnMgdGhlIGFsYXJtLgotCi0g ICBPbmx5IG9uZSBhbGFybSBtYXkgYmUgc2V0IGF0IGEgdGltZS4KLQotICAgRXhhbXBsZTogU3Vw cG9zZSB5b3UgaGF2ZSBhIHNjcmlwdCB0aGF0IGlzIGFsd2F5cyBydW5uaW5nLCBhbmQgdGhhdAot ICAgdHJhbnNmZXJzIGZpbGVzIHBlcmlvZGljYWxseSwgYW5kIHRoYXQga2VlcHMgYSB0cmFuc2Fj dGlvbiBsb2cuIFN1cHBvc2UKLSAgIHlvdSB3YW50IHRvIHN0YXJ0IGEgbmV3IHRyYW5zYWN0aW9u IGxvZyBlYWNoIGRheToKLQotICBsb2cgdHJhbnNhY3Rpb25zIFx2KGRhdGUpLmxvZwotICBzZXQg YWxhcm0gMDA6MDA6MDAgICAgICAgICAgICAgICAgICAgICA7IFNldCBhbiBhbGFybSBmb3IgbWlk bmlnaHQKLSAgd2hpbGUgdHJ1ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNYWluIHNj cmlwdCBsb29wCi0gICAgICB4aWYgYWxhcm0geyAgICAgICAgICAgICAgICAgICAgICAgIDsgSWYg dGhlIGFsYXJtIHRpbWUgaXMgcGFzdC4uLgotICAgICAgICAgIGNsb3NlIHRyYW5zYWN0aW9ucyAg ICAgICAgICAgICA7IENsb3NlIGN1cnJlbnQgbG9nCi0gICAgICAgICAgbG9nIHRyYW5zYWN0aW9u cyBcdihkYXRlKS5sb2cgIDsgU3RhcnQgbmV3IG9uZQotICAgICAgICAgIHBhdXNlIDEgICAgICAg ICAgICAgICAgICAgICAgICA7IFRvIG1ha2Ugc3VyZSAwMDowMDowMCBpcyBwYXN0Ci0gICAgICAg ICAgc2V0IGFsYXJtIDAwOjAwOjAwICAgICAgICAgICAgIDsgU2V0IGEgbmV3IGFsYXJtCi0gICAg ICB9Ci0gICAgICA7IHB1dCB0aGUgcmVzdCBvZiB0aGUgc2NyaXB0IGhlcmUuLi4KLSAgfQotCi0g ICBOb3RlIHRoYXQgSUYgQUxBUk0gLS0gbm8gbWF0dGVyIHdoZXRoZXIgaXQgc3VjY2VlZHMgb3Ig ZmFpbHMgLS0gZG9lcwotICAgTk9UIGNsZWFyIGFuIGV4cGlyZWQgYWxhcm0uIFRodXMsIG9uY2Ug YW4gYWxhcm0gaGFzIGV4cGlyZWQsIGV2ZXJ5IElGCi0gICBBTEFSTSB3aWxsIHN1Y2NlZWQgdW50 aWwgdGhlIGFsYXJtIGlzIGNsZWFyZWQgKHdpdGggdGhlIENMRUFSIEFMQVJNCi0gICBjb21tYW5k KSBvciByZXNldCB3aXRoIGEgbmV3IFNFVCBBTEFSTSBjb21tYW5kLgotCi0gIDcuMTYuIFBhc3Np bmcgQXJndW1lbnRzIHRvIENvbW1hbmQgRmlsZXMKLQotICAgQmVnaW5uaW5nIGluIHZlcnNpb24g Ny4wLCBDLUtlcm1pdCBhY2NlcHRzIGFyZ3VtZW50cyBvbiB0aGUgVEFLRQotICAgY29tbWFuZCBs aW5lLCBmb3IgZXhhbXBsZToKLQotICBDLUtlcm1pdD4gdGFrZSBvb2ZhLmtzYyBvbmUgdHdvIHt0 aGlzIGlzIHRocmVlfSBmb3VyCi0KLSAgIFRoaXMgYXV0b21hdGljYWxseSBzZXRzIHRoZSB2YXJp YWJsZXMgXCUxIHRocm91Z2ggXCU5IHRvIHRoZSBhcmd1bWVudHMsCi0gICBhbmQgXCUwIHRvIHRo ZSBuYW1lIG9mIHRoZSBmaWxlLCBpbiB0aGlzIGNhc2U6Ci0KLSAgXCUwID0gL3Vzci9vbGdhL29v ZmEua3NjCi0gIFwlMSA9IG9uZQotICBcJTIgPSB0d28KLSAgXCUzID0gdGhpcyBpcyB0aHJlZQot ICBcJTQgPSBmb3VyCi0KLSAgIGFuZCBcJTUuLlwlOSBhcmUgdW5kZWZpbmVkIChlbXB0eSkuIEFy Z3VtZW50cyBwYXN0IHRoZSBuaW50aCBhcmUKLSAgIGF2YWlsYWJsZSBpbiB0aGUgXCZfW10gYXJn dW1lbnQtdmVjdG9yIGFycmF5ICggWzYyM11TZWN0aW9uIDcuNSkuCi0KLSAgIFRoZSB2YXJpYWJs ZXMgYXJlIHRob3NlIGF0IHRoZSBjdXJyZW50IG1hY3JvIGxldmVsLiBUaHVzLCBpZiB0aGUgVEFL RQotICAgY29tbWFuZCBpcyBleGVjdXRlZCBmcm9tIHdpdGhpbiBhIG1hY3JvLCB0aGUgbWFjcm8n cyBhcmd1bWVudHMgYXJlCi0gICByZXBsYWNlZCBieSB0aG9zZSBnaXZlbiBvbiB0aGUgVEFLRSBj b21tYW5kIGxpbmUgKGJ1dCBvbmx5IGlmIGF0IGxlYXN0Ci0gICBvbmUgYXJndW1lbnQgaXMgZ2l2 ZW4pLiBUaGUgY29tbWFuZCBzaG93biBhYm92ZSBpcyBleGFjdGx5IGVxdWl2YWxlbnQKLSAgIHRv OgotCi0gIGFzc2lnbiBcJTAgL3Vzci9vbGdhL29vZmEua3NjCi0gIGFzc2lnbiBcJTEgb25lCi0g IGFzc2lnbiBcJTIgdHdvCi0gIGFzc2lnbiBcJTMgdGhpcyBpcyB0aHJlZQotICBhc3NpZ24gXCU0 IGZvdXIKLSAgYXNzaWduIFwlNQotICBhc3NpZ24gXCU2Ci0gIGFzc2lnbiBcJTcKLSAgYXNzaWdu IFwlOAotICBhc3NpZ24gXCU5Ci0gIHRha2Ugb29mYS5rc2MKLQotICAgUmVtZW1iZXIsIHRoZSB2 YXJpYWJsZXMgXCUwLi5cJTkgYXJlIG9uIHRoZSBtYWNybyBjYWxsIHN0YWNrLCBhbmQKLSAgIGNv bW1hbmQgZmlsZXMgYXJlIGluZGVwZW5kZW50IG9mIHRoZSBtYWNybyBzdGFjay4gVGh1cywgaWYg YSBjb21tYW5kCi0gICBmaWxlIFRBS0VzIGFub3RoZXIgY29tbWFuZCBmaWxlIGFuZCBwYXNzZXMg YXJndW1lbnRzIHRvIGl0LCB0aGUKLSAgIHZhcmlhYmxlcyBhcmUgY2hhbmdlZCBmcm9tIHRoYXQg cG9pbnQgb24gZm9yIGJvdGggZmlsZXMsIGFuZCBzbyBmb3J0aAotICAgZm9yIGFsbCBsZXZlbHMg b2YgbmVzdGVkIGNvbW1hbmQgZmlsZXMgd2l0aG91dCBpbnRlcnZlbmluZyBtYWNybwotICAgaW52 b2NhdGlvbnMuCi0KLSAgIEl0IHdvdWxkIGhhdmUgYmVlbiBwb3NzaWJsZSB0byBjaGFuZ2UgQy1L ZXJtaXQgdG8gdXNlIHRoZSBvdmVyYWxsCi0gICBjb21tYW5kIHN0YWNrLCByYXRoZXIgdGhhbiB0 aGUgbWFjcm8gc3RhY2ssIGZvciBhcmd1bWVudHMgLS0gdGhpcyB3b3VsZAotICAgaGF2ZSBtYWRl IFRBS0Ugd29yayBleGFjdGx5IGxpa2UgRE8sIHdoaWNoIGlzICJuaWNlciIsIGJ1dCBpdCB3b3Vs ZAotICAgYWxzbyBoYXZlIGJyb2tlbiBjb3VudGxlc3MgZXhpc3Rpbmcgc2NyaXB0cy4gSG93ZXZl ciwgdGhlIG5ldyBTSElGVAotICAgY29tbWFuZCAoWzYyNF1TZWN0aW9uIDcuNSkgbWFrZXMgaXQg cG9zc2libGUgdG8gY3JlYXRlIGFuIGFsdGVybmF0aXZlCi0gICBUQUtFIGNvbW1hbmQgdGhhdCBk b2VzIGluZGVlZCBzYXZlIGFuZCByZXN0b3JlIHRoZSBhcmd1bWVudCB2YXJpYWJsZXMKLSAgIGF0 IGl0cyBvd24gbGV2ZWwgYXJvdW5kIGV4ZWN1dGlvbiBvZiBhIGNvbW1hbmQgZmlsZToKLQotICBk ZWZpbmUgbXRha2UgewotICAgICBsb2NhbCBcJWYKLSAgICAgYXNzaWduIFwlZiBcZmNvbnRlbnRz KFwlMSkKLSAgICAgc2hpZnQKLSAgICAgdGFrZSBcJWYKLSAgfQotCi0gICBDLUtlcm1pdCA3LjAg YWxzbyBzdXBwb3J0cyBhIG5ldywgZWFzaWVyIHdheSB0byBwYXNzIGFyZ3VtZW50cyB0bwotICAg c2NyaXB0cyBmcm9tIHRoZSBzeXN0ZW0gY29tbWFuZCBsaW5lOgotCi0gIGtlcm1pdCBmaWxlbmFt ZSBhcmcxIGFyZzIgYXJnMyAuLi4KLQotICAgaW4gd2hpY2ggYXJnMSwgYXJnMiwgYXJnMyAoZXRj KSBhcmUgYXJndW1lbnRzIGZvciB0aGUgc2NyaXB0ICh3aG9zZQotICAgZmlsZW5hbWUgaXMgZ2l2 ZW4pLCBhbmQgYXJlIGFzc2lnbmVkIHRvIFwlMSwgXCUyLCAuLi4gXCU5LiBUaGUgZmlsZW5hbWUK LSAgIGlzIGFzc2lnbmVkIHRvIFwlMC4gVGhpcyBhcHBsaWVzIGVxdWFsbHkgdG8gIktlcmJhbmci IHNjcmlwdHMgaW4gVU5JWAotICAgKFs2MjVdU2VjdGlvbiA3LjE5KS4gRm9yIGV4YW1wbGUsIHN1 cHBvc2UgeW91IGhhdmUgYSBmaWxlIGNhbGxlZAotICAgInNob3dhcmdzIiBjb250YWluaW5nIHRo ZSBmb2xsb3dpbmcgbGluZXM6Ci0KLSAgIyEvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgKwotICBlY2hv IEhlbGxvIGZyb20gXCUwCi0gIHNob3cgYXJncwotICBleGl0Ci0KLSAgIChleGNlcHQgbm90IGlu ZGVudGVkLCBzaW5jZSB0aGUgIiMhIiBsaW5lIG11c3QgYmUgb24gdGhlIGxlZnQgbWFyZ2luKS4K LSAgIElmIHlvdSBnaXZlIHRoaXMgZmlsZSBleGVjdXRlIHBlcm1pc3Npb246Ci0KLSAgY2htb2Qg K3ggc2hvd2FyZ3MKLQotICAgdGhlbiB5b3UgY2FuIHJ1biBpdCBleGFjdGx5IGFzIHlvdSB3b3Vs ZCBydW4gYSBVTklYIHNoZWxsIHNjcmlwdCwgZS5nLjoKLQotICAkIHNob3dhcmdzIG9uZSB0d28g dGhyZWUKLSAgSGVsbG8gZnJvbSAvdXNyL29sZ2Evc2hvd2FyZ3MKLSAgVG9wLWxldmVsIGFyZ3Vt ZW50cyAoXHYoYXJnYykgPSA0KToKLSAgIFwmX1swXSA9IC91c3Ivb2xnYS9zaG93YXJncwotICAg XCZfWzFdID0gb25lCi0gICBcJl9bMl0gPSB0d28KLSAgIFwmX1szXSA9IHRocmVlCi0KLSAgIEZ1 cnRoZXJtb3JlLCB0aGUgXCZfW10gYXJyYXkgbm93IGNvbnRhaW5zIHRoZSBmaWxlbmFtZSwgaWYg b25lIHdhcwotICAgZ2l2ZW4gYXMgdGhlIGZpcnN0IGNvbW1hbmQgbGluZSBhcmd1bWVudCwgb3Ig aXQgaXMgYSAiS2VyYmFuZyIgc2NyaXB0LAotICAgaW4gZWxlbWVudCAwLgotCi0gICBPdGhlcndp c2UgZWxlbWVudCAwIGlzIHByb2dyYW0gbmFtZSwgYW5kIGVsZW1lbnRzIDEgdGhyb3VnaCBcdihh cmdjKS0xCi0gICBjb250YWluIHRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBpZiBhbnksIHRo YXQgYXBwZWFyIGFmdGVyICItLSIgb3IKLSAgICI9IiwgaWYgYW55LiBUaGlzIGFycmF5IGlzIHNh dmVkIGFuZCByZXN0b3JlZCBhcm91bmQgbWFjcm8gY2FsbHM7Ci0gICByZWNhbGwgdGhhdCBpbnNp ZGUgbWFjcm9zIGl0IGNvbnRhaW5zIHRoZSBtYWNybyBhcmd1bWVudCB2ZWN0b3IKLSAgIChhbGxv d2luZyB5b3UgdG8gYWNjZXNzIGFyZ3VtZW50cyBwcm9ncmFtbWF0aWNhbGx5LCBhbmQgdG8gaGF2 ZSBtb3JlCi0gICB0aGFuIDkgb2YgdGhlbSkuCi0KLSAgIEF0IHRvcCBsZXZlbCwgbm90aWNlIHRo ZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIFwmQFtdIGFuZCBcJl9bXSBhcnJheXMuCi0gICBUaGUg Zm9ybWVyIGluY2x1ZGVzIEMtS2VybWl0IG9wdGlvbnM7IHRoZSBsYXR0ZXIgb21pdHMgdGhlbS4K LQotICA3LjE3LiBEaWFsb2dzIHdpdGggVGltZWQgUmVzcG9uc2VzCi0KLSAgIFRoZSBBU0ssIEFT S1EsIEdFVE9LLCBhbmQgR0VUQyBjb21tYW5kcyAobGV0J3MgY2FsbCB0aGVtIHRoZSAiQVNLLWNs YXNzCi0gICBjb21tYW5kcyIpIGxldCB5b3Ugd3JpdGUgc2NyaXB0cyB0aGF0IGNhcnJ5IG9uIGRp YWxvZ3Mgd2l0aCB0aGUgdXNlciwKLSAgIGFza2luZyB0aGVtIGZvciB0ZXh0LCBhIFllcy9ObyBh bnN3ZXIsIG9yIGEgY2hhcmFjdGVyLCByZXNwZWN0aXZlbHkuCi0gICBQcmlvciB0byBDLUtlcm1p dCA3LjAsIHRoZXNlIHF1ZXN0aW9ucyB3b3VsZCBhbHdheXMgd2FpdCBmb3JldmVyIGZvciBhbgot ICAgYW5zd2VyLiBJbiBDLUtlcm1pdCA3LjAsIHlvdSBtYXkgc3BlY2lmeSBhIHRpbWUgbGltaXQg Zm9yIHRoZW0gd2l0aCB0aGUKLSAgIG5ldyBjb21tYW5kOgotCi0gICBTRVQgQVNLLVRJTUVSIG51 bWJlcgotICAgICAgICAgIFNldHMgYSB0aW1lLWxpbWl0IG9uIEFTSy1DTEFTUyBjb21tYW5kcyB0 byB0aGUgZ2l2ZW4gbnVtYmVyIG9mCi0gICAgICAgICAgc2Vjb25kcy4gSWYgdGhlIG51bWJlciBp cyAwIG9yIGxlc3MsIHRoZXJlIGlzIG5vIHRpbWUgbGltaXQgYW5kCi0gICAgICAgICAgdGhlc2Ug Y29tbWFuZHMgd2FpdCBmb3JldmVyIGZvciBhIHJlc3BvbnNlLiBBbnkgdGltZXIgdGhhdCBpcwot ICAgICAgICAgIGVzdGFibGlzaGVkIGJ5IHRoaXMgY29tbWFuZCByZW1haW5zIGluIGVmZmVjdCBm b3IgYWxsIGZ1dHVyZQotICAgICAgICAgIEFTSy1jbGFzcyBjb21tYW5kcyB1bnRpbCBhbm90aGVy IFNFVCBBU0stVElNRVIgY29tbWFuZCBpcyBnaXZlbgotICAgICAgICAgIChlLmcuIHdpdGggYSB2 YWx1ZSBvZiAwIHRvIGRpc2FibGUgQVNLIHRpbWVvdXRzKS4KLQotICAgSUYgQVNLVElNRU9VVCBj b21tYW5kCi0gICAgICAgICAgQW4gQVNLLWNsYXNzIGNvbW1hbmQgdGhhdCB0aW1lcyBvdXQgcmV0 dXJucyBhIGZhaWx1cmUgc3RhdHVzLgotICAgICAgICAgIFlvdSBjYW4gdGVzdCBleHBsaWNpdGx5 IGZvciBhIHRpbWVvdXQgd2l0aDoKLQotICA3LjE4LiBJbmNyZWFzZWQgRmxleGliaWxpdHkgb2Yg U1dJVENIIENhc2UgTGFiZWxzCi0KLSAgIFByaW9yIHRvIEMtS2VybWl0IDcuMCAvIEs5NSAxLjEu MTksIHRoZSBjYXNlIGxhYmVscyBpbiBTV0lUQ0gKLSAgIHN0YXRlbWVudHMgd2VyZSBzdHJpbmcg Y29uc3RhbnRzLgotCi0gICBOb3cgY2FzZSBsYWJlbHMgY2FuIGJlIHZhcmlhYmxlcywgZnVuY3Rp b24gY2FsbHMsIG9yIGFueSBtaXh0dXJlIG9mCi0gICB0aGVzZSB3aXRoIGVhY2ggb3RoZXIgYW5k L29yIHdpdGggcmVndWxhciBjaGFyYWN0ZXJzLgotCi0gICBGdXJ0aGVybW9yZSwgYWZ0ZXIgdGhl IGNhc2UgbGFiZWwgaXMgZXZhbHVhdGVkLCBpdCBpcyB0cmVhdGVkIG5vdCBhcyBhCi0gICBzdHJp bmcgY29uc3RhbnQsIGJ1dCBhcyBhIHBhdHRlcm4gYWdhaW5zdCB3aGljaCB0aGUgU1dJVENIIHZh cmlhYmxlIGlzCi0gICBtYXRjaGVkIChbNjI2XVNlY3Rpb24gNC45LjEpLgotCi0gICBUaGlzIGlu dHJvZHVjZXMgYSBwb3NzaWJsZSBpbmNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyByZWxlYXNl cywKLSAgIHNpbmNlIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBpbiBjYXNlIGxhYmVscyBhcmUg bm8gbG9uZ2VyIHRha2VuCi0gICBsaXRlcmFsbHk6Ci0KLSAgXCAqID8gWyB7Ci0KLSAgIEFueSBz Y3JpcHRzIHRoYXQgcHJldmlvdXNseSBpbmNsdWRlZCBhbnkgb2YgdGhlc2UgY2hhcmFjdGVycyBp biBjYXNlCi0gICBsYWJlbHMgbXVzdCBub3cgcXVvdGUgdGhlbSB3aXRoIGJhY2tzbGFzaCAoXCku Ci0KLSAgNy4xOS4gIktlcmJhbmciIFNjcmlwdHMKLQotICAgSW4gVU5JWCBvbmx5LCBLZXJtaXQg c2NyaXB0cyBjYW4gYmUgc3RvcmVkIGluIGZpbGVzIGFuZCBydW4gImRpcmVjdGx5IiwKLSAgIHdp dGhvdXQgc3RhcnRpbmcgS2VybWl0IGZpcnN0IChhcyBub3RlZCBvbiBwYWdlIDQ2NyBvZiB0aGUg bWFudWFsKSwKLSAgIGp1c3QgYXMgYSBzaGVsbCBzY3JpcHQgY2FuIGJlICJydW4iIGFzIGlmIGl0 IHdlcmUgYSBwcm9ncmFtLiBUaGlzCi0gICBzZWN0aW9uIGFtcGxpZmllcyBvbiB0aGF0IGlkZWEg YSBiaXQsIGFuZCBwcmVzZW50cyBzb21lIG5ldyBhc3BlY3RzIG9mCi0gICB2ZXJzaW9uIDcuMCB0 aGF0IG1ha2UgaXQgZWFzaWVyIHRvIHdyaXRlIGFuZCBydW4gS2VybWl0IHNjcmlwdHMKLSAgIGRp cmVjdGx5LgotCi0gICAgIE5PVEU6IE9uIG5vbi1VTklYIHBsYXRmb3Jtcywgc3VjaCBhcyBWTVMg b3IgV2luZG93cywgS2VyYmFuZyBzY3JpcHRzCi0gICAgIGNhbiBiZSBydW4gYXMgImtlcm1pdCAr IHNjcmlwdGZpbGVuYW1lIGFyZzEgYXJnMiBhcmczIC4uLiIuIFdpbmRvd3MKLSAgICAgOTUvOTgv TlQgZmlsZSBhc3NvY2lhdGlvbnMgZG8gbm90IGFsbG93IGZvciB0aGUgcGFzc2luZyBvZgotICAg ICBwYXJhbWV0ZXJzLiBJbiBWTVMsIGhvd2V2ZXIsIHlvdSBjYW4gYWNoaWV2ZSB0aGUgS2VyYmFu ZyBlZmZlY3QgYnkKLSAgICAgZGVmaW5pbmcgYSBzeW1ib2wsIGFzIGluIHRoaXMgZXhhbXBsZToK LQotICAkIGF1dG90ZWxuZXQgOj09ICIkU1lTJFRPT0xTOktFUk1JVC5FWEUgKyBBVVRPVEVMTkVU LktTQyIKLQotICAgICBhbmQgdGhlbiBydW5uaW5nIHRoZSBzY3JpcHQgbGlrZSBhbnkgb3RoZXIg Y29tbWFuZDoKLQotICAkIGF1dG90ZWxuZXQgeHl6Y29ycC5jb20gbXl1c2VyaWQKLQotICAgICBT ZWUgWzYyN11TZWN0aW9uIDkuMyBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlICIrIiBzeW1ib2wu Ci0KLSAgIFVOSVggc2hlbGwgc2NyaXB0cyBjYW4gc3BlY2lmeSB3aGljaCBzaGVsbCBzaG91bGQg cnVuIHRoZW0gYnkgaW5jbHVkaW5nCi0gICBhICJzaGViYW5nIiBsaW5lIGF0IHRoZSB0b3AsIGUu Zy46Ci0KLSAgIyEvYmluL3NoCi0KLSAgIChidXQgbm90IGluZGVudGVkOyB0aGUgc2hlYmFuZyBs aW5lIG11c3QgYmUgb24gdGhlIGxlZnQgbWFyZ2luKS4gVGhlCi0gICB0ZXJtICJzaGViYW5nIiBp cyBhIGNvbnRyYWN0aW9uIG9mICJzaGVsbCIgYW5kICJiYW5nIi4gIkJhbmciIGlzIGEKLSAgIHNs YW5nIHdvcmQgZm9yIHRoZSBleGNsYW1hdGlvbiBtYXJrICgiISIpOyAic2hlYmFuZyIgaXRzZWxm IGlzIGFuCi0gICBBbWVyaWNhbiBzbGFuZyB3b3JkIHVzZWQgaW4gaW4gdGhlIHBocmFzZSAidGhl IHdob2xlIHNoZWJhbmciLgotCi0gICBXZSBjYW4gcnVuIEtlcm1pdCBzY3JpcHRzIGRpcmVjdGx5 IHRvbywgYnkgaW5jbHVkaW5nIGEgInNoZWJhbmciIGxpbmUKLSAgIHRoYXQgbmFtZXMgS2VybWl0 IGFzIHRoZSAic2hlbGwiOyB0aHVzIHdlIGNhbGwgdGhlc2UgIktlcmJhbmciIHNjcmlwdHMuCi0g ICBUaGlzIG1lY2hhbmlzbSBoYXMgYmVlbiBjb25zaWRlcmFibHkgc2ltcGxpZmllZCBpbiBDLUtl cm1pdCA3LjAgdG8KLSAgIGZhY2lsaXRhdGUgQy1LZXJtaXQncyB1c2UgYSBzY3JpcHRpbmcgdG9v bCBqdXN0IGxpa2UgYW55IG9mIHRoZSBVTklYCi0gICBzaGVsbHMgb3Igc2NyaXB0aW5nIGxhbmd1 YWdlcy4gVGhlIHJ1bGVzIGFyZSB0aGUgc2FtZSBhcyBmb3Igc2hlbGwKLSAgIHNjcmlwdHM6Ci0K LSAgICAxLiBUaGUgZmlyc3QgbGluZSBvZiB0aGUgS2VybWl0IHNjcmlwdCBtdXN0IGJlZ2luIHdp dGggIiMhIgotICAgICAgIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHRoZSBmdWxsIHBhdGhuYW1l IG9mIHRoZSBwcm9ncmFtIHRoYXQgd2lsbAotICAgICAgIGV4ZWN1dGUgdGhlIHNjcmlwdCAoaW4g dGhpcyBjYXNlLCBDLUtlcm1pdCByYXRoZXIgdGhhbiBhIFVOSVgKLSAgICAgICBzaGVsbCksIGZv bGxvd2VkIGJ5IGFueSBLZXJtaXQgY29tbWFuZC1saW5lIG9wdGlvbnMuIFRvIHN1cHByZXNzCi0g ICAgICAgZXhlY3V0aW9uIG9mIHRoZSBDLUtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlIGFuZCB0 byBtYWtlIGNvbW1hbmQKLSAgICAgICBsaW5lIGFyZ3VtZW50cyBhdmFpbGFibGUgdG8gdGhlIHNj cmlwdCwgdGhlIGZpbmFsIG9wdGlvbiBzaG91bGQgYmUKLSAgICAgICAiKyI6Ci0gICMhL3Vzci9s b2NhbC9iaW4va2VybWl0ICsKLQotICAgICAgIFNvbWUgdXNlcnMgaGF2ZSByZXBvcnRlZCB0aGF0 IGluIHNvbWUgY2lyY3Vtc3RhbmNlcyBhIHNwYWNlIG1pZ2h0Ci0gICAgICAgYmUgbmVjZXNzYXJ5 IGFmdGVyIHRoZSBwbHVzIHNpZ247IHRoaXMgZGVwZW5kcyBvbiB5b3VyIHNoZWxsIC0tIGl0Ci0g ICAgICAgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBLZXJtaXQuIEluIG1vc3QgY2FzZXMsIG5vIHNw YWNlIGlzIG5lZWRlZC4KLSAgICAyLiBUaGUgZmlsZSBtdXN0IGhhdmUgZXhlY3V0ZSBwZXJtaXNz aW9uIChncmFudGVkIHZpYSAiY2htb2QgK3gKLSAgICAgICBmaWxlbmFtZSIpLgotCi0gICBXaGVu IEMtS2VybWl0IGlzIGludm9rZWQgZnJvbSBhIEtlcmJhbmcgc2NyaXB0IChvciBmcm9tIHRoZSBz eXN0ZW0KLSAgIHByb21wdCB3aXRoIGEgIisiIGNvbW1hbmQtbGluZSBhcmd1bWVudCwgd2hpY2gg YW1vdW50cyB0byB0aGUgc2FtZQotICAgdGhpbmcpLCB0aGUgZm9sbG93aW5nIHNwZWNpYWwgcnVs ZXMgYXBwbHk6Ci0KLSAgICAxLiBUaGUgQy1LZXJtaXQgaW5pdGlhbGl6YXRpb24gZmlsZSBpcyBO T1QgZXhlY3V0ZWQgYXV0b21hdGljYWxseS4gSWYKLSAgICAgICB5b3Ugd2FudCBpdCB0byBiZSBl eGVjdXRlZCwgaW5jbHVkZSBhIFRBS0UgY29tbWFuZCBmb3IgaXQgaW4gdGhlCi0gICAgICAgc2Ny aXB0LCBlLmcuICJ0YWtlIFx2KGhvbWUpLmtlcm1yYyIuIChJbiBwcmV2aW91cyByZWxlYXNlcywg dGhlCi0gICAgICAgaW5pdGlhbGl6YXRpb24gZmlsZSB3YXMgYWx3YXlzIGV4ZWN1dGVkLCB3aXRo IG5vIHdheSB0byBwcmV2ZW50IGl0Ci0gICAgICAgZXhjZXB0IGZvciB0aGUgdXNlciB0byBpbmNs dWRlIEtlcm1pdC1zcGVjaWZpYyBjb21tYW5kIGxpbmUgb3B0aW9ucwotICAgICAgIHdoaWNoIGhh ZCBub3RoaW5nIHRvIGRvIHdpdGggdGhlIHNjcmlwdCkuIE1hbnkgc2NyaXB0cyBoYXZlIG5vIG5l ZWQKLSAgICAgICBmb3IgdGhlIHN0YW5kYXJkIEtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlLCB3 aGljaCBpcyBxdWl0ZSBsZW5ndGh5Ci0gICAgICAgYW5kIG5vdCBvbmx5IGRlbGF5cyBzdGFydHVw IG9mIHRoZSBzY3JpcHQsIGJ1dCBhbHNvIHNwZXdzIGZvcnRoCi0gICAgICAgbnVtZXJvdXMgbWVz c2FnZXMgdGhhdCBhcmUgbW9zdCBsaWtlbHkgdW5yZWxhdGVkIHRvIHRoZSBzY3JpcHQuCi0gICAg Mi4gSWYgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgaXMgbm90IGV4ZWN1dGVkLCBuZWl0aGVyIGlz IHlvdXIKLSAgICAgICBjdXN0b21pemF0aW9uIGZpbGUsIHNpbmNlIHRoZSBpbml0aWFsaXphdGlv biBmaWxlIGlzIHRoZSBjb21tYW5kCi0gICAgICAgZmlsZSBmcm9tIHdoaWNoIHRoZSBjdXN0b21p emF0aW9uIGZpbGUgaXMgVEFLRW4uIEFnYWluLCB5b3UgY2FuCi0gICAgICAgaW5jbHVkZSBhIFRB S0UgY29tbWFuZCBmb3IgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgaWYgZGVzaXJlZCwgb3IKLSAg ICAgICBmb3IgdGhlIGN1c3RvbWl6YXRpb24gZmlsZSBieSBpdHNlbGYsIG9yIGZvciBhbnkgb3Ro ZXIgZmlsZS4KLSAgICAzLiBDLUtlcm1pdCBkb2VzIG5vdCBwcm9jZXNzIGNvbW1hbmQtbGluZSBh cmd1bWVudHMgYXQgYWxsLiBJbnN0ZWFkLAotICAgICAgIGl0IHBhc3NlcyBhbGwgd29yZHMgb24g dGhlIGNvbW1hbmQgbGluZSBhZnRlciB0aGUgIisiIHRvIHRoZSBzY3JpcHQKLSAgICAgICBhcyBc JTAgKHRoZSBzY3JpcHQgbmFtZSksIFwlMS4uXCU5ICh0aGUgZmlyc3QgbmluZSBhcmd1bWVudHMp LCBhcwotICAgICAgIHdlbGwgYXMgaW4gdGhlIGFyZ3VtZW50IHZlY3RvciBhcnJheSBcJl9bXS4g VGhlIHZhcmlhYmxlIFx2KGFyZ2MpCi0gICAgICAgaXMgc2V0IHRvIHRoZSB0b3RhbCBudW1iZXIg b2YgIndvcmRzIiAoYXMgcGFzc2VkIGJ5IHRoZSBzaGVsbCB0bwotICAgICAgIEtlcm1pdCkgaW5j bHVkaW5nIHRoZSBzY3JpcHQgbmFtZS4gUXVvdGluZyBhbmQgZ3JvdXBpbmcgcnVsZXMgYXJlCi0g ICAgICAgdGhvc2Ugb2YgdGhlIHNoZWxsLgotICAgIDQuIEF0IGFueSBwb2ludCB3aGVyZSB0aGUg c2NyaXB0IHRlcm1pbmF0ZXMsIGl0IG11c3QgaW5jbHVkZSBhbiBFWElUCi0gICAgICAgY29tbWFu ZCBpZiB5b3Ugd2FudCBpdCB0byBleGl0IGJhY2sgdG8gdGhlIHNoZWxsOyBvdGhlcndpc2UKLSAg ICAgICBDLUtlcm1pdCBlbnRlcnMgaW50ZXJhY3RpdmUgcHJvbXB0aW5nIG1vZGUgd2hlbiB0aGUg c2NyaXB0Ci0gICAgICAgdGVybWluYXRlcy4gVGhlIEVYSVQgY29tbWFuZCBjYW4gaW5jbHVkZSBh IG51bWVyaWMgc3RhdHVzIHRvIGJlCi0gICAgICAgcmV0dXJuZWQgdG8gdGhlIHNoZWxsICgwLCAx LCBldGMpLCBwbHVzIGFuIG9wdGlvbmFsIG1lc3NhZ2UuCi0KLSAgIEhlcmUgaXMgYSBzaW1wbGUg S2VyYmFuZyBzY3JpcHQgdGhhdCBwcmludHMgaXRzIGFyZ3VtZW50czoKLQotICAjL3Vzci9sb2Nh bC9iaW4va2VybWl0ICsKLSAgZWNobyBIZWxsbyBmcm9tIFwlMAotICBmb3IgXCVpIDAgXHYoYXJn YyktMSAxIHsKLSAgICAgIGVjaG8gXCVpLiAiXCZfW1wlaV0iCi0gIH0KLSAgZXhpdCAwCi0KLSAg IFNhdmUgdGhpcyBmaWxlIGFzIChzYXkpICJzaG93YXJncyIsIHRoZW4gZ2l2ZSBpdCBleGVjdXRl IHBlcm1pc3Npb24gYW5kCi0gICBydW4gaXQgKHRoZSBcJl9bXSBhcnJheSBpcyB0aGUgc2FtZSBh cyBcJTAuLlwlOSwgYnV0IGFsbG93cyB5b3UgdG8KLSAgIHJlZmVyIHRvIGFyZ3VtZW50IHZhcmlh YmxlcyBwcm9ncmFtbWF0aWNhbGx5OyBzZWUgWzYyOF1TZWN0aW9uIDcuNSkuCi0gICAoWWVzLCB5 b3UgY291bGQgc3Vic3RpdHV0ZSBTSE9XIEFSR1VNRU5UUyBmb3IgdGhlIGxvb3AuKQotCi0gICQg Y2htb2QgK3ggc2hvd2FyZ3MKLSAgJCAuL3Nob3dhcmdzIG9uZSAidGhpcyBpcyB0d28iIHRocmVl Ci0KLSAgIFRoZSBzY3JpcHQgZGlzcGxheXMgaXRzIGFyZ3VtZW50czoKLQotICBIZWxsbyBmcm9t IC91c3Ivb2xnYS9zaG93YXJncwotICAwLiAiL3Vzci9vbGdhL3Nob3dhcmdzIgotICAxLiAib25l IgotICAyLiAidGhpcyBpcyB0d28iCi0gIDMuICJ0aHJlZSIKLSAgJAotCi0gICBOb3RpY2UgdGhh dCBubyBiYW5uZXJzIG9yIGdyZWV0aW5ncyBhcmUgcHJpbnRlZCBhbmQgdGhhdCBzdGFydHVwIGlz Ci0gICBpbnN0YW50YW5lb3VzLCBqdXN0IGxpa2UgYSBzaGVsbCBzY3JpcHQuIEFsc28gbm90aWNl IHRoYXQgZ3JvdXBpbmcgb2YKLSAgIGFyZ3VtZW50cyBpcyBkZXRlcm1pbmVkIGJ5ICpzaGVsbCog cXVvdGluZyBydWxlcywgbm90IEtlcm1pdCBvbmVzLAotICAgc2luY2UgdGhlIGNvbW1hbmQgbGlu ZSBpcyBwYXJzZWQgYnkgdGhlIHNoZWxsIGJlZm9yZSBLZXJtaXQgZXZlciBzZWVzCi0gICBpdC4K LQotICAgT2YgY291cnNlIHlvdSBjYW4gcHV0IGFueSBjb21tYW5kcyBhdCBhbGwgaW50byBhIEtl cmJhbmcgc2NyaXB0LiBJdCBjYW4KLSAgIHJlYWQgYW5kIHdyaXRlIGZpbGVzLCBtYWtlIGNvbm5l Y3Rpb25zLCB0cmFuc2ZlciBmaWxlcywgYW55dGhpbmcgdGhhdAotICAgS2VybWl0IGNhbiBkbyAt LSBiZWNhdXNlIGl0ICppcyogS2VybWl0LiBBbmQgb2YgY291cnNlLCBLZXJiYW5nIHNjcmlwdHMK LSAgIGNhbiBhbHNvIGJlIGV4ZWN1dGVkIGZyb20gdGhlIEtlcm1pdCBwcm9tcHQgKG9yIGZyb20g YW5vdGhlciBzY3JpcHQpCi0gICB3aXRoIGEgVEFLRSBjb21tYW5kOyB0aGUgS2VyYmFuZyBsaW5l IGlzIGlnbm9yZWQgc2luY2UgaXQgc3RhcnRzIHdpdGgKLSAgICIjIiwgd2hpY2ggaXMgYSBjb21t ZW50IGludHJvZHVjZXIgdG8gS2VybWl0IGp1c3QgYXMgaXQgaXMgdG8gdGhlIFVOSVgKLSAgIHNo ZWxsLiBJbiBWTVMgYW5kIG90aGVyIG5vbi1VTklYIHBsYXRmb3JtcywgdGhlIEtlcmJhbmcgbGlu ZSBoYXMgbm8KLSAgIGVmZmVjdCBhbmQgY2FuIGJlIG9taXR0ZWQuCi0KLSAgIEl0IG1pZ2h0IGJl IGRlc2lyYWJsZSBmb3IgYSBzY3JpcHQgdG8ga25vdyB3aGV0aGVyIGl0IGhhcyBiZWVuIGludm9r ZWQKLSAgIGRpcmVjdGx5IGZyb20gdGhlIHNoZWxsIChhcyBhIEtlcmJhbmcgc2NyaXB0KSBvciBi eSBhIFRBS0UgY29tbWFuZAotICAgZ2l2ZW4gdG8gdGhlIEtlcm1pdCBwcm9tcHQgb3IgaW4gYSBL ZXJtaXQgY29tbWFuZCBmaWxlIG9yIG1hY3JvLiBUaGlzCi0gICBjYW4gYmUgZG9uZSBhcyBpbiB0 aGlzIGV4YW1wbGU6Ci0KLSAgIyEvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgKwotICBhc3NpZ24gXCVt IFxmYmFzZW5hbWUoXCUwKQotICBkZWZpbmUgdXNhZ2UgeyBleGl0IDEge3VzYWdlOiBcJW0gcGhv bmVudW1iZXIgbWVzc2FnZX0gfQotICBkZWZpbmUgYXBhZ2UgeyAoZGVmaW5pdGlvbiBvZiBBUEFH RS4uLikgfSA7IChTZWUgWzYyOV1ib29rIHBwLjQ1NC00NTYpCi0gIHhpZiBlcXVhbCAiXCUwIiAi XHYoY21kZmlsKSIgewotICAgICAgaWYgbm90IGRlZiBcJTEgdXNhZ2UKLSAgICAgIGlmIG5vdCBk ZWYgXCUyIHVzYWdlCi0gICAgICBhcGFnZSB7XCUxfSB7XCUyfQotICAgICAgZXhpdCBcdihzdGF0 dXMpCi0gIH0KLQotICAgSW4gYSBLZXJiYW5nIHNjcmlwdCwgXCUwIGFuZCBcdihjbWRmaWxlKSBh cmUgdGhlIHNhbWU7IGJvdGggb2YgdGhlbSBhcmUKLSAgIHRoZSBuYW1lIG9mIHRoZSBzY3JpcHQu IFdoZW4gYSBzY3JpcHQgaXMgaW52b2tlZCBieSBhIEtlcm1pdCBUQUtFCi0gICBjb21tYW5kLCBc JTAgaXMgdGhlIG5hbWUgb2YgdGhlIEtlcm1pdCBwcm9ncmFtLCBidXQgXHYoY21kZmlsZSkgaXMg dGhlCi0gICBuYW1lIG9mIHRoZSBzY3JpcHQuIEluIHRoZSBleGFtcGxlIGFib3ZlLCBhIG1hY3Jv IGNhbGxlZCBBUEFHRSBpcwotICAgZGVmaW5lZC4gSWYgdGhlIHNjcmlwdCB3YXMgaW52b2tlZCBk aXJlY3RseSwgdGhlIEFQQUdFIG1hY3JvIGlzIGFsc28KLSAgIGV4ZWN1dGVkLiBPdGhlcndpc2Us IGl0IGlzIGF2YWlsYWJsZSBmb3Igc3Vic2VxdWVudCBhbmQgcGVyaGFwcwotICAgcmVwZWF0ZWQg dXNlIGxhdGVyIGluIHRoZSBLZXJtaXQgc2Vzc2lvbi4KLQotICAgQW4gZXNwZWNpYWxseSBoYW5k eSB1c2UgZm9yIEtlcmJhbmcgc2NyaXB0cyBpcyB0byBoYXZlIHRoZQotICAgaW5pdGlhbGl6YXRp b24gZmlsZSBpdHNlbGYgYmUgb25lLiBTaW5jZSB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24K LSAgIGZpbGUgaXMgcmF0aGVyIGxvbmcgYW5kIHRpbWUtY29uc3VtaW5nIHRvIGV4ZWN1dGUsIGl0 IGlzIG9mdGVuIG92ZXJraWxsCi0gICBpZiB5b3Ugd2FudCB0byBzdGFydCBLZXJtaXQganVzdCB0 byB0cmFuc2ZlciBhIGZpbGUuIE9mIGNvdXJzZSB0aGVyZQotICAgYXJlIGNvbW1hbmQtbGluZSBz d2l0Y2hlcyB0byBzdXBwcmVzcyBpbml0aWFsaXphdGlvbi1maWxlIGV4ZWN1dGlvbiwKLSAgIGV0 YywgYnV0IGFub3RoZXIgYXBwcm9hY2ggaXMgdG8gInJ1biIgdGhlIGluaXRpYWxpemF0aW9uIGZp bGUgd2hlbiB5b3UKLSAgIHdhbnQgaXRzIGZlYXR1cmVzIChub3RhYmx5IHRoZSBzZXJ2aWNlcyBk aXJlY3RvcnkpLCBhbmQgcnVuIEMtS2VybWl0Ci0gICBkaXJlY3RseSB3aGVuIHlvdSBkb24ndC4g QSBzZXR1cCBsaWtlIHRoaXMgcmVxdWlyZXMgdGhhdCAoYSkgdGhlCi0gICBDLUtlcm1pdCBpbml0 aWFsaXphdGlvbiBmaWxlIGlzIGNvbmZpZ3VyZWQgYXMgYSBLZXJiYW5nIHNjcmlwdCAoaGFzCi0g ICAjIS9wYXRoLi4uL2tlcm1pdCBhcyBmaXJzdCBsaW5lKSwgaGFzIGV4ZWN1dGUgcGVybWlzc2lv biwgYW5kIGlzIGluCi0gICB5b3VyIFBBVEg7IGFuZCAoYikgdGhhdCB5b3UgZG9uJ3QgaGF2ZSBh IC5rZXJtcmMgZmlsZSBpbiB5b3VyIGxvZ2luCi0gICBkaXJlY3RvcnkuCi0KLSAgNy4yMC4gSUYg YW5kIFhJRiBTdGF0ZW1lbnQgU3ludGF4Ci0KLSAgIFRoZSBJRiBjb21tYW5kIGhhcyBiZWVuIGlt cHJvdmVkIGluIHR3byBzaWduaWZpY2FudCB3YXlzIGluIEMtS2VybWl0Ci0gICA3LjAsIGRlc2Ny aWJlZCBpbiB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zLiBBbGwgY2hhbmdlcyBhcmUgYmFja3dh cmRzCi0gICBjb21wYXRpYmxlLgotCi0gICAgNy4yMC4xLiBUaGUgSUYvWElGIERpc3RpbmN0aW9u Ci0KLSAgIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIElGIGFuZCBYSUYgaXMgbm8gbG9uZ2VyIGlt cG9ydGFudCBhcyBvZgotICAgQy1LZXJtaXQgNy4wLiBZb3Ugc2hvdWxkIGJlIGFibGUgdG8gdXNl IElGIGluIGFsbCBjYXNlcyAoYW5kIG9mIGNvdXJzZSwKLSAgIGFsc28gWElGIGZvciBiYWNrd2Fy ZHMgY29tcGF0aWJpbGl0eSkuIEluIHRoZSBwYXN0LCBJRiB3YXMgdXNlZCBmb3IKLSAgIHNpbmds ZS1jb21tYW5kIFRIRU4gcGFydHMsIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgYSBzZXBhcmF0ZSBF TFNFCi0gICBjb21tYW5kOgotCi0gIElGIGNvbmRpdGlvbiBjb21tYW5kMSAgICA7IFRIRU4gcGFy dAotICBFTFNFIGNvbW1hbmQyICAgICAgICAgICAgOyBFTFNFIHBhcnQKLQotICAgd2hlcmVhcyBY SUYgd2FzIHJlcXVpcmVkIGlmIGVpdGhlciBwYXJ0IGhhZCBtdWx0aXBsZSBjb21tYW5kczoKLQot ICBYSUYgY29uZGl0aW9uIHsgY29tbWFuZCwgY29tbWFuZCwgLi4uIH0gRUxTRSB7IGNvbW1hbmQs IGNvbW1hbmQsIC4uLiB9Ci0KLSAgIFRoZSBzeW50YWN0aWMgZGlmZmVyZW5jZXMgd2VyZSBwcmlt YXJpbHkgdGhhdCBJRiAvIEVMU0Ugd2FzIHR3bwotICAgY29tbWFuZHMgb24gdHdvIHNlcGFyYXRl IGxpbmVzLCB3aGVyZWFzIFhJRiB3YXMgb25lIGNvbW1hbmQgb24gb25lCi0gICBsaW5lLCBhbmQg dGhhdCBYSUYgYWxsb3dlZCAoYW5kIGluIGZhY3QgcmVxdWlyZWQpIGJyYWNlcyBhcm91bmQgaXRz Ci0gICBjb21tYW5kIGxpc3RzLCB3aGVyZWFzIElGIGRpZCBub3QgYWxsb3cgdGhlbS4KLQotICAg RnVydGhlcm1vcmUsIHRoZSBjaGFpbmluZyBvciBuZXN0aW5nIG9mIHBhcnRzIGFuZCBjb25kaXRp b25zIHdhcwotICAgaW5jb25zaXN0ZW50LiBGb3IgZXhhbXBsZSwgdGhlIElGIGNvbW1hbmQgY291 bGQgYmUgdXNlZCBsaWtlIHRoaXM6Ci0KLSAgSUYgY29uZGl0aW9uIGNvbW1hbmQKLSAgRUxTRSBJ RiBjb25kaXRpb24gY29tbWFuZAotICBFTFNFIElGIGNvbmRpdGlvbiBjb21tYW5kCi0gIEVMU0Ug SUYgY29uZGl0aW9uIGNvbW1hbmQKLSAgLi4uCi0KLSAgIGJ1dCBYSUYgY291bGQgbm90LiBDLUtl cm1pdCA3LjAgYWNjZXB0cyB0aGUgb2xkIHN5bnRheCBhbmQgZXhlY3V0ZXMgaXQKLSAgIHRoZSBz YW1lIGFzIHByZXZpb3VzIHZlcnNpb25zLCBidXQgYWxzbyBhY2NlcHRzIGEgbmV3IHVuaWZpZWQg YW5kIG1vcmUKLSAgIGNvbnZlbmllbnQgc3ludGF4OgotCi0gICBJRiBjb25kaXRpb24gY29tbWFu ZC1saXN0IFsgRUxTRSBjb21tYW5kLWxpc3QgXQotCi0gICBvcjoKLQotSUYgY29uZGl0aW9uIGNv bW1hbmQtbGlzdAotRUxTRSBjb21tYW5kLWxpc3QKLQotICAgaW4gd2hpY2ggdGhlIEVMU0UgcGFy dCBpcyBvcHRpb25hbCwgYW5kIHdoZXJlIGNvbW1hbmQtbGlzdCBjYW4gYmUgYQotICAgc2luZ2xl IGNvbW1hbmQgKHdpdGggb3Igd2l0aG91dCBicmFjZXMgYXJvdW5kIGl0KSBvciBhIGxpc3Qgb2Yg Y29tbWFuZHMKLSAgIGVuY2xvc2VkIGluIGJyYWNlcy4gRXhhbXBsZXM6Ci0KLSAgIEV4YW1wbGUg MToKLQotICBJRiBjb25kaXRpb24geyBjb21tYW5kMSwgY29tbWFuZDIgfSBFTFNFIHsgY29tbWFu ZDMsIGNvbW1hbmQ0IH0KLQotICAgRXhhbXBsZSAyIChzYW1lIGFzIEV4YW1wbGUgMSk6Ci0KLSAg SUYgY29uZGl0aW9uIHsKLSAgICAgY29tbWFuZDEKLSAgICAgY29tbWFuZDIKLSAgfSBFTFNFIHsK LSAgICAgY29tbWFuZDMKLSAgICAgY29tbWFuZDQKLSAgfQotCi0gICBFeGFtcGxlIDMgKHNhbWUg YXMgMSBhbmQgMik6Ci0KLSAgSUYgY29uZGl0aW9uIHsKLSAgICAgY29tbWFuZDEKLSAgICAgY29t bWFuZDIKLSAgfQotICBFTFNFIHsgY29tbWFuZDMsIGNvbW1hbmQ0IH0KLQotICAgRXhhbXBsZSA0 IChzYW1lIGFzIDEtMyk6Ci0KLSAgSUYgY29uZGl0aW9uIHsKLSAgICAgY29tbWFuZDEKLSAgICAg Y29tbWFuZDIKLSAgfQotICBFTFNFIHsKLSAgICAgY29tbWFuZDMKLSAgICAgY29tbWFuZDQKLSAg fQotCi0gICBFeGFtcGxlIDUgKEVMU0UgY2FuIGJlIGZvbGxvd2VkIGJ5IGFub3RoZXIgY29tbWFu ZCk6Ci0KLSAgSUYgY29uZGl0aW9uMSB7Ci0gICAgIGNvbW1hbmQxCi0gICAgIGNvbW1hbmQyCi0g IH0gRUxTRSBJRiBjb25kaXRpb24yIHsKLSAgICAgY29tbWFuZDMKLSAgICAgY29tbWFuZDQKLSAg fSBFTFNFIHsKLSAgICAgY29tbWFuZDUKLSAgICAgY29tbWFuZDYKLSAgfQotCi0gICBFeGFtcGxl IDUgc3VnZ2VzdHMgb3RoZXIgcG9zc2liaWxpdGllczoKLQotICBJRiBjb25kaXRpb24gewotICAg ICBjb21tYW5kMQotICAgICBjb21tYW5kMgotICB9IEVMU0UgRk9SIHZhcmlhYmxlIGluaXRpYWwg ZmluYWwgaW5jcmVtZW50IHsKLSAgICAgY29tbWFuZDMKLSAgICAgY29tbWFuZDQKLSAgfQotCi0g ICBBbmQgdGhpcyB0b28gaXMgcG9zc2libGUsIGV4Y2VwdCBmb3Igc29tZSBub24tb2J2aW91cyBx dW90aW5nCi0gICBjb25zaWRlcmF0aW9uczoKLQotICBkY2wgXCZhWzZdID0gb25lIHR3byB0aHJl ZSBmb3VyIGZpdmUgc2l4Ci0KLSAgSUYgPCBcJW4gMyB7Ci0gICAgICBlY2hvIFxcJW4gaXMgdG9v IHNtYWxsOiBcJW4KLSAgfSBFTFNFIEZPUiBcXCVpIDEgXFwlbiAxIHsKLSAgICAgIGVjaG8gXFwl aS4gXFwmYVtcXCVpXQotICB9Ci0KLSAgIChUaGUgbG9vcCB2YXJpYWJsZSBtdXN0IGJlIHF1b3Rl ZCBpbiB0aGlzIGNvbnRleHQgdG8gcHJldmVudCBwcmVtYXR1cmUKLSAgIGV2YWx1YXRpb24uKQot Ci0gICBNYW55IEMgcHJvZ3JhbW1lcnMgcHJlZmVyIHRvIGNvZGUgSUYtRUxTRSwgV0hJTEUsIEZP UiwgYW5kIFNXSVRDSCB3aXRoCi0gICB0aGUgYmxvY2stb3BlbiBicmFja2V0IG9uIGl0cyBvd24g bGluZS4gVGhpcyBkb2VzIG5vdCB3b3JrIGluIEtlcm1pdDoKLQotICBJRiBjb25kaXRpb24gICAg ICAgIDsgVEhJUyBGT1JNQVQgRE9FUyBOT1QgTk9UIFdPUksKLSAgewotICAgICBjb21tYW5kMQot ICAgICBjb21tYW5kMgotICB9Ci0gIEVMU0UKLSAgewotICAgICBjb21tYW5kMwotICAgICBjb21t YW5kNAotICB9Ci0KLSAgIEV4cGxhbmF0aW9uOiB0aGUgS2VybWl0IGNvbW1hbmQgbGFuZ3VhZ2Ug aXMgbGluZSBvcmllbnRlZDsgZWFjaCBsaW5lIGlzCi0gICBhIGNvbW1hbmQsIGVhY2ggY29tbWFu ZCBpcyBhIGxpbmUuIFRoZSBmaXJzdCBsaW5lIGFib3ZlLCBoYXZpbmcgbm8gaGludAotICAgb2Yg Y29udGludWF0aW9uLCBpcyBhbiBpbmNvbXBsZXRlIGNvbW1hbmQsIHlldCBzeW50YWN0aWNhbGx5 IGNvcnJlY3QgLS0KLSAgIGFuIElGIHN0YXRlbWVudCB3aXRoIGFuIGVtcHR5IFRIRU4gcGFydC4g SW50ZXJlc3RpbmdseSBlbm91Z2gsIHNpbmNlCi0gICB0aGUgbmV4dCBsaW5lIGJlZ2lucyB3aXRo ICJ7IiBpdCBpcyBhIGJsb2NrIHRoYXQgKGluIFs2MzBdQy1LZXJtaXQgOC4wCi0gICBhbmQgbGF0 ZXIpIGlzIGEgYmxvY2sgdGhhdCBpcyBleGVjdXRlZCB1bmNvbmRpdGlvbmFsbHkuIFRodXMgdGhl Ci0gICBjb21tYW5kcyBpbiB0aGUgVEhFTiBwYXJ0IGFyZSBleGVjdXRlZCByZWdhcmRsZXNzIG9m IHdoZXRoZXIgdGhlCi0gICBjb25kaXRpb24gaXMgdHJ1ZSAtLSBub3Qgd2hhdCB5b3Ugd2FudGVk IQotCi0gICBUaGUgbmV3IGJsb2NrIHN5bnRheCB1c2VkIGluIHRoZSBJRiwgV0hJTEUsIEZPUiwg YW5kIFNXSVRDSCBjb21tYW5kcwotICAgZW1wbG95cyBjZXJ0YWluIHRyaWNrcyB0byBhbGxvdyBt dWx0aXBsZSBsaW5lcyB0byBiZSB0cmVhdGVkIGFzIGEKLSAgIHNpbmdsZSBsaW5lOgotCi0gICAg ICogQW55IGxpbmUgZW5kaW5nIHdpdGggInsiIChpZ25vcmluZyB3aGl0ZXNwYWNlIGFuZCBjb21t ZW50cykgbWFya3MKLSAgICAgICB0aGUgYmVnaW5uaW5nIG9mIGEgYmxvY2s7Ci0gICAgICogQW55 IGxpbmUgYmVnaW5uaW5nIHdpdGggIn0iIChpZ25vcmluZyB3aGl0ZXNwYWNlKSBtYXJrcyB0aGUg ZW5kIG9mCi0gICAgICAgYSBibG9jazsKLSAgICAgKiBMaW5lIGJyZWFrcyB3aXRoaW4gYSBibG9j ayBzZXBhcmF0ZSBjb21tYW5kczsgdGhlIGNvbW1hIGlzIGltcGxpZWQKLSAgICAgICBieSB0aGUg bGluZSBlbmQuCi0KLSAgIFRodXM6Ci0KLSAgSUYgY29uZGl0aW9uIHsKLSAgICAgY29tbWFuZDEK LSAgICAgY29tbWFuZDIKLSAgfSBFTFNFIHsKLSAgICAgY29tbWFuZDMKLSAgICAgY29tbWFuZDQK LSAgfQotCi0gICBpcyAiYXNzZW1ibGVkIiBpbnRvOgotCi0gIElGIGNvbmRpdGlvbiB7IGNvbW1h bmQxLCBjb21tYW5kMiB9IEVMU0UgeyBjb21tYW5kMywgY29tbWFuZDQgfQotCi0gICBOb3RlIHRo ZSBhZGRpdGlvbiBvZiBjb21tYXMgdG8gc2VwYXJhdGUgY29tbWFuZHMgd2l0aGluIGJsb2Nrcy4g QXMKLSAgIGFsd2F5cywgaWYgeW91IG5lZWQgY29udGludWUgYSBjb21tYW5kIG9udG8gYWRkaXRp b25hbCBsaW5lcywgeW91IGNhbgotICAgZW5kIHRoZSBjb250aW51ZWQgbGluZXMgd2l0aCB0aGUg Y29udGludWF0aW9uIGNoYXJhY3RlciwgIi0iLiBZb3UgY2FuCi0gICBhbHNvIGRvIHRoaXMgaWYg eW91IHdhbnQgdG8gcHV0IG9wZW5pbmcgYnJhY2tldHMgb24gdGhlaXIgb3duIGxpbmU6Ci0KLSAg SUYgY29uZGl0aW9uIC0KLSAgewotICAgICBjb21tYW5kMQotICAgICBjb21tYW5kMgotICB9Ci0g IEVMU0UgLQotICB7Ci0gICAgIGNvbW1hbmQzCi0gICAgIGNvbW1hbmQ0Ci0gIH0KLQotICAgIDcu MjAuMi4gQm9vbGVhbiBFeHByZXNzaW9ucyAoVGhlIElGL1dISUxFIENvbmRpdGlvbikKLQotICAg UHJpb3IgdG8gQy1LZXJtaXQgNy4wLCB0aGUgSUYgYW5kIFdISUxFIGNvbW1hbmRzIGFjY2VwdGVk IG9ubHkgYSBzaW5nbGUKLSAgIEJvb2xlYW4gKCJ0cnVlIG9yIGZhbHNlIikgYXNzZXJ0aW9uLCBl LmcuICJpZiA+IFwlbSAwIGNvbW1hbmQiIG9yICJpZgotICAgZXhpc3QgZmlsZW5hbWUgY29tbWFu ZCIuIFRoZXJlIHdhcyBubyB3YXkgdG8gZm9ybSBCb29sZWFuIGV4cHJlc3Npb25zCi0gICBhbmQs IGluIHBhcnRpY3VsYXIsIG5vdGhpbmcgdGhhdCBhcHByb2FjaGVkIGEgQm9vbGVhbiBPUiBmdW5j dGlvbiAoQU5ECi0gICBjb3VsZCBiZSBzaW11bGF0ZWQgYnkgY29uY2F0ZW5hdGluZyBJRiBzdGF0 ZW1lbnRzOiAiaWYgY29uZGl0aW9uMSBpZgotICAgY29uZGl0aW9uMi4uIikuCi0KLSAgIEMtS2Vy bWl0IDcuMCAoYW5kIEs5NSAxLjEuMTkpIGFsbG93IGdyb3VwaW5nIG9mIEJvb2xlYW4gYXNzZXJ0 aW9ucwotICAgdXNpbmcgcGFyZW50aGVzZXMgYW5kIGNvbWJpbmluZyB0aGVtIHVzaW5nIEFORCAo b3IgJiYpIGFuZCBPUiAob3IgfHwpLgotICAgRWFjaCBvZiB0aGVzZSBvcGVyYXRvcnMgLS0gaW5j bHVkaW5nIHRoZSBwYXJlbnRoZXNlcyAtLSBpcyBhIGZpZWxkIGFuZAotICAgbXVzdCBiZSBzZXQg b2ZmIGJ5IHNwYWNlcy4gQU5EIGhhcyBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuIE9SLCBOT1QgaGFz Ci0gICBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuIEFORCwgYnV0IHBhcmVudGhlc2VzIGNhbiBiZSB1 c2VkIHRvIGZvcmNlIGFueQotICAgZGVzaXJlZCBvcmRlciBvZiBldmFsdWF0aW9uLiBUaGUgb2xk IHN5bnRheCBpcyBzdGlsbCBhY2NlcHRlZC4KLQotICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoK LQotICBkZWZpbmUgXCV6IDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgRGVmaW5lIHNvbWUg dmFyaWFibGVzCi0gIGRlZmluZSBcJW4gMSAgICAgICAgICAgICAgICAgICAgICAgICAgOyBmb3Ig dXNlIGluIHRoZSBleGFtcGxlcy4KLQotICBpZiA+IFwlbiBcJXogZWNobyBcJW4gaXMgZ3JlYXRl ci4gICAgIDsgT3JpZ2luYWwgZm9ybWF0IC0gc3RpbGwgYWNjZXB0ZWQuCi0gIGlmICggPiBcJW4g XCV6ICkgZWNobyBcJW4gaXMgZ3JlYXRlci4gOyBQYXJlbnRoZXNlcyBtYXkgYmUgdXNlZCBpbiA3 LjAuCi0gIGlmICggPiBcJW4gXCV6ICYmIG5vdCA9IFwleiAwICkgLi4uICAgOyBUd28gYXNzZXJ0 aW9ucyBjb21iaW5lZCB3aXRoIEFORC4KLSAgaWYgKCA+IFwlbiBcJXogYW5kIG5vdCA9IFwleiAw ICkgLi4uICA7IFNhbWUgYXMgcHJldmlvdXMgKCJhbmQiID0gIiYmIikuCi0gIGlmICggPiBcJW4g XCV6IHx8IG5vdCA9IFwleiAwICkgLi4uICAgOyBUd28gYXNzZXJ0aW9ucyBjb21iaW5lZCB3aXRo IE9SLgotICBpZiAoID4gXCVuIFwleiBvciBub3QgPSBcJXogMCApIC4uLiAgIDsgU2FtZSBhcyBw cmV2aW91cyAoIm9yIiA9ICJ8fCIpLgotICBpZiAoID4gXCVuIFwleiB8fCAhPSBcJXogMCApIC4u LiAgICAgIDsgRGl0dG8gKCIhPSIgPSAibm90ID0iKS4KLSAgd2hpbGUgKCAxICkgeyAuLi4gfSAg ICAgICAgICAgICAgICAgICA7IEp1c3QgbGlrZSBDLgotCi0gICBOb3RpY2UgdGhlIHNwYWNlcyBh cm91bmQgYWxsIG9wZXJhdG9ycyBpbmNsdWRpbmcgdGhlIHBhcmVudGhlc2VzIC0tCi0gICB0aGVz ZSBhcmUgcmVxdWlyZWQuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgc2hvdyBob3cgcGFyZW50aGVz ZXMgY2FuIGJlCi0gICB1c2VkIHRvIGFsdGVyIHRoZSBwcmVjZWRlbmNlIG9mIHRoZSBBTkQgYW5k IE9SIG9wZXJhdG9yczoKLQotICBpZiAoIGZhbHNlIHx8IGZhbHNlICYmIGZhbHNlIHx8IHRydWUg KSAsLi4gICAgICAgICA7IFRydWUKLSAgaWYgKCBmYWxzZSB8fCAoIGZhbHNlICYmIGZhbHNlICkg fHwgdHJ1ZSApIC4uLiAgICAgOyBTYW1lIGFzIHByZXZpb3VzCi0gIGlmICggKCBmYWxzZSB8fCBm YWxzZSApICYmICggZmFsc2UgfHwgdHJ1ZSApICkgLi4uIDsgRmFsc2UKLQotICAgU2ltaWxhcmx5 IGZvciBOT1Q6Ci0KLSAgaWYgKCBub3QgdHJ1ZSAmJiBmYWxzZSApIC4uLiAgICAgICAgICA7IEZh bHNlIChOT1QgYmluZHMgdG8gVFJVRSBvbmx5KQotICBpZiAoICggbm90IHRydWUgKSAmJiBmYWxz ZSApIC4uLiAgICAgIDsgU2FtZSBhcyBwcmV2aW91cwotICBpZiAoIG5vdCAoIHRydWUgJiYgZmFs c2UgKSApIC4uLiAgICAgIDsgVHJ1ZSAoTk9UIGJpbmRzIHRvIChUUlVFICYmIEZBTFNFKSkKLQot ICAgTm90ZXM6Ci0KLSAgICAxLiBUaGUgc3ludGF4IG9mIHRoZSBCb29sZWFuIGV4cHJlc3Npb24g aXRzZWxmIGhhcyBub3QgY2hhbmdlZDsgZWFjaAotICAgICAgIGV4cHJlc3Npb24gYmVnaW5zIHdp dGggYSBrZXl3b3JkIG9yIHRva2VuIHN1Y2ggYXMgIkVYSVNUIiwgIj4iLCBvcgotICAgICAgICI9 IiwgZXRjOyBvcGVyYXRvcnMgc3VjaCBhcyAiPCIsICI9IiwgYW5kICI+IiBkbyBub3QgZ28gYmV0 d2VlbgotICAgICAgIHRoZWlyIG9wZXJhbmRzIGJ1dCBwcmVjZWRlIHRoZW0gYXMgYmVmb3JlOyB0 aGlzIG1pZ2h0IGJlIGNhbGxlZAotICAgICAgICJyZXZlcnNlIHJldmVyc2UgUG9saXNoIG5vdGF0 aW9uIjsgaXQgYWxsb3dzIGRldGVybWluaXN0aWMKLSAgICAgICBvbi10aGUtZmx5IHBhcnNpbmcg b2YgdGhlc2UgZXhwcmVzc2lvbnMgYXQgdGhlIEMtS2VybWl0PiBwcm9tcHQgYXMKLSAgICAgICB3 ZWxsIGFzIGluIHNjcmlwdHMsIGFuZCBhbGxvd3MgPy1oZWxwIHRvIGJlIGdpdmVuIGZvciBlYWNo IGl0ZW0KLSAgICAgICB3aGVuIElGIG9yIFdISUxFIGNvbW1hbmRzIGFyZSB0eXBlZCBhdCB0aGUg cHJvbXB0LgotICAgIDIuIFBhcmVudGhlc2VzIGFyZSByZXF1aXJlZCB3aGVuIHRoZXJlIGlzIG1v cmUgdGhhbiBvbmUgQm9vbGVhbgotICAgICAgIGFzc2VydGlvbi4KLSAgICAzLiBQYXJlbnRoZXNl cyBhcmUgbm90IHJlcXVpcmVkLCBidXQgYXJlIGFsbG93ZWQsIHdoZW4gdGhlcmUgaXMgb25seQot ICAgICAgIG9uZSBCb29sZWFuIGFzc2VydGlvbi4KLSAgICA0LiBFdmFsdWF0aW9uIG9mIEJvb2xl YW4gYXNzZXJ0aW9ucyBvY2N1cnMgbGVmdCB0byByaWdodCwgYnV0IHRoZQotICAgICAgIHJlc3Vs dGluZyBCb29sZWFuIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIGFmdGVyd2FyZHMgYWNjb3JkaW5n IHRvCi0gICAgICAgdGhlIHJ1bGVzIG9mIHByZWNlZGVuY2UuIEFsbCBCb29sZWFuIGFzc2VydGlv bnMgYXJlIGFsd2F5cwotICAgICAgIGV2YWx1YXRlZDsgdGhlcmUgaXMgbm8gImVhcmx5IHN0b3Bw aW5nIiBwcm9wZXJ0eSBhbmQgdGhlcmVmb3JlIG5vCi0gICAgICAgcXVlc3Rpb24gYWJvdXQgd2hl biBvciBpZiBzaWRlIGVmZmVjdHMgd2lsbCBvY2N1ciAtLSBpZiBhbnkgQm9vbGVhbgotICAgICAg IGFzc2VydGlvbiBoYXMgc2lkZSBlZmZlY3RzLCB0aGV5IHdpbGwgYWx3YXlzIG9jY3VyLiAoRWFy bHkgc3RvcHBpbmcKLSAgICAgICBpcywgaG93ZXZlciwgcG9zc2libGUgd2l0aCB0aGUgWzYzMV1T LUV4cHJlc3Npb24gSUYgaW50cm9kdWNlZCBpbgotICAgICAgIEMtS2VybWl0IDguMC4pCi0KLSAg IENvbnN0cnVjdGlvbnMgb2YgYXJiaXRyYXJ5IGNvbXBsZXhpdHkgYXJlIHBvc3NpYmxlLCB3aXRo aW4gcmVhc29uLgotCi0gICBBbHNvIHNlZSBbNjMyXVNlY3Rpb24gNy40IGZvciBuZXcgSUYgLyBX SElMRSBjb25kaXRpb25zLgotCi0gIDcuMjEuIFNjcmVlbiBGb3JtYXR0aW5nIGFuZCBDdXJzb3Ig Q29udHJvbAotCi0gICBDLUtlcm1pdCA3LjAgYWRkcyBhIHNpbXBsZSB3YXkgdG8gY3JlYXRlIGZv cm1hdHRlZCBzY3JlZW5zLCB0aGUgU0NSRUVOCi0gICBjb21tYW5kOgotCi0gICBTQ1JFRU4geyBD TEVBUiwgQ0xFT0wsIE1PVkUtVE8gcm93IFsgY29sdW1uIF0gfQotICAgICAgICAgIFBlcmZvcm1z IHNjcmVlbi1mb3JtYXR0aW5nIGFjdGlvbnMuIENvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZXNlCi0g ICAgICAgICAgY29tbWFuZHMgZGVwZW5kcyBvbiBwcm9wZXIgdGVybWluYWwgc2V0dXAgb24gYm90 aCBlbmRzIG9mIHRoZQotICAgICAgICAgIGNvbm5lY3Rpb24gLS0gbWFpbmx5IHRoYXQgdGhlIGhv c3QgdGVybWluYWwgdHlwZSBpcyBzZXQgdG8gYWdyZWUKLSAgICAgICAgICB3aXRoIHRoZSBraW5k IG9mIHRlcm1pbmFsIG9yIHRoZSBlbXVsYXRpb24geW91IGFyZSB2aWV3aW5nCi0gICAgICAgICAg Qy1LZXJtaXQgdGhyb3VnaC4gVGhlIFVOSVggdmVyc2lvbiB1c2VzIHRlcm1pbmZvIG9yIHRlcm1j YXAgKG5vdAotICAgICAgICAgIGN1cnNlcyk7IHRoZSBWTVMgdmVyc2lvbiB1c2VzIFNNRzsgSy05 NSB1c2VzIGl0cyBidWlsdCBpbiBzY3JlZW4KLSAgICAgICAgICBtYW5hZ2VyLgotCi0gICBTQ1JF RU4gQ0xFQVIKLSAgICAgICAgICBNb3ZlcyB0aGUgY3Vyc29yIHRvIGhvbWUgcG9zaXRpb24gYW5k IGNsZWFycyB0aGUgZW50aXJlIHNjcmVlbi4KLSAgICAgICAgICBTeW5vbnltczogQ0xFQVIgQ09N TUFORC1TQ1JFRU4gQUxMIChLLTk1IG9ubHkpLCBDTFMsIENMRUFSCi0gICAgICAgICAgU0NSRUVO LgotCi0gICBTQ1JFRU4gQ0xFT0wKLSAgICAgICAgICBDbGVhcnMgZnJvbSB0aGUgY3VycmVudCBj dXJzb3IgcG9zaXRpb24gdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KLSAgICAgICAgICBTeW5vbnlt OiBDTEVBUiBDT01NQU5ELVNDUkVFTiBFT0wgKEstOTUgb25seSkKLQotICAgU0NSRUVOIE1PVkUt VE8gcm93IGNvbHVtbgotICAgICAgICAgIE1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGluZGljYXRl ZCByb3cgYW5kIGNvbHVtbi4gVGhlIHJvdyBhbmQKLSAgICAgICAgICBjb2x1bW4gbnVtYmVycyBh cmUgMS1iYXNlZCwgc28gb24gYSAyNHg4MCBzY3JlZW4gdGhlIGhvbWUKLSAgICAgICAgICBwb3Np dGlvbiBpcyAxIDEgYW5kIHRoZSBsb3dlciByaWdodCBjb3JuZXIgaXMgMjQgODAuIElmIGEgcm93 IG9yCi0gICAgICAgICAgY29sdW1uIG51bWJlciBpcyBnaXZlbiB0aGF0IHRvbyBsYXJnZSBmb3Ig d2hhdCBLZXJtaXQgb3IgdGhlCi0gICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSB0aGlua3MgaXMg eW91ciBzY3JlZW4gc2l6ZSwgdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgICAgbnVtYmVyIGlzIHN1 YnN0aXR1dGVkLgotCi0gICBUaGVzZSBlc2NhcGUgc2VxdWVuY2VzIHVzZWQgYnkgdGhlc2UgY29t bWFuZHMgZGVwZW5kcyBvbiB0aGUgcGxhdGZvcm0uCi0gICBJbiBVTklYLCB5b3VyIFRFUk0gZW52 aXJvbm1lbnQgdmFyaWFibGUgaXMgdXNlZCB0byBxdWVyeSB0aGUKLSAgIHRlcm1pbmZvL3Rlcm1j YXAgZGF0YWJhc2U7IGlmIHRoZSBxdWVyeSBmYWlscywgQU5TSS9WVDEwMCBzZXF1ZW5jZXMgYXJl Ci0gICB1c2VkLiBJbiBWTVMsIHRoZSBTTUcgbGlicmFyeSBpcyB1c2VkLCB3aGljaCBzZW5kcyBz ZXF1ZW5jZXMgYmFzZWQgb24KLSAgIHlvdXIgVk1TIHRlcm1pbmFsIHR5cGUuIEs5NSBkb2VzIGl0 cyBvd24gc2NyZWVuIGNvbnRyb2wuIE9uIG90aGVyCi0gICBwbGF0Zm9ybXMgKHN1Y2ggYXMgQU9T L1ZTLCBWT1MsIGV0YyksIHNjcmVlbiBmb3JtYXR0aW5nIGlzIG5vdAotICAgc3VwcG9ydGVkLCBh bmQgdGhlIFNDUkVFTiBjb21tYW5kIGRvZXMgbm90aGluZy4KLQotICAgVGhlIHRocmVlIFNDUkVF TiBhY3Rpb25zIGNhbiBiZSB1c2VkIGluIHNjcmlwdHMgdG8gcHJvZHVjZSBtZW51cywKLSAgIGZv cm1hdHRlZCBzY3JlZW5zLCBkeW5hbWljIGRpc3BsYXlzLCBldGMuIFJlbGF0ZWQgdmFyaWFibGVz IGluY2x1ZGU6Ci0KLSAgXHYodGVybWluYWwpICAgICBUaGUgdHlwZSB0ZXJtaW5hbCBDLUtlcm1p dCB0aGlua3MgeW91IGhhdmUuCi0gIFx2KHJvd3MpICAgICAgICAgVGhlIG51bWJlciBvZiByb3dz IEMtS2VybWl0IHRoaW5rcyB5b3VyIHRlcm1pbmFsIGhhcy4KLSAgXHYoY29sdW1ucykgICAgICBU aGUgbnVtYmVyIG9mIGNvbHVtbnMgQy1LZXJtaXQgdGhpbmtzIHlvdXIgdGVybWluYWwgaGFzLgot Ci0gICBBbmQgZnVuY3Rpb25zOgotCi0gIFxmc2NybmN1cngoKSAgICAgVGhlIGN1cnJlbnQgWCBj b29yZGluYXRlIG9mIHRoZSBjdXJzb3IgKEstOTUgb25seSkuCi0gIFxmc2NybmN1cnkoKSAgICAg VGhlIGN1cnJlbnQgWSBjb29yZGluYXRlIG9mIHRoZSBjdXJzb3IgKEstOTUgb25seSkuCi0gIFxm c2NybnN0cih4LHksbikgVGhlIHN0cmluZyBvZiBsZW5ndGggbmF0IHBvc2l0aW9uICh4LHkpIChL LTk1IG9ubHkpLgotCi0gICBBbmQgY29tbWFuZHM6Ci0KLSAgRUNITyBzdHJpbmcgICAgICBXcml0 ZXMgc3RyaW5nICsgQ1JMRiBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCi0gIFhFQ0hP IHN0cmluZyAgICAgV3JpdGVzIHN0cmluZyBhdCBjdXJyZW50IGN1cnNvciBwb3NpdGlvbjsgQ1JM RiBub3Qgc3VwcGxpZWQuCi0gIEdFVEMgdiBwcm9tcHQgICAgSXNzdWVzIHByb21wdCwgcmVhZHMg b25lIGNoYXJhY3RlciBpbnRvIHZhcmlhYmxlIHYsIG5vIGVjaG8uCi0KLSAgIEFuZCBzcGVjaWFs IGNoYXJhY3RlcnM6Ci0KLSAgQ3RybC1MICAgICAgICAgICBBdCB0aGUgQy1LZXJtaXQ+IGNvbW1h bmQgcHJvbXB0LCBvciBpbiBhIEMtS2VybWl0IGNvbW1hbmQsCi0gICAgICAgICAgICAgICAgICAg d29ya3MgbGlrZSBSZXR1cm4gb3IgRW50ZXIsIGJ1dCBhbHNvIGNsZWFycyB0aGUgc2NyZWVuCi0K LSAgIEV4YW1wbGUgMTogQSBtYWNybyB0aGF0IHByaW50cyBhIG1lc3NhZ2UgXCUxIGF0IGN1cnNv ciBwb3NpdGlvbgotICAgKFwlMixcJTMpOgotCi0gIGRlZmluZSBNU0cgewotICAgICAgaWYgbm90 IGRlZiBcJTMgZGVmIFwlMyAwICAgICAgICAgICAgIDsgRGVmYXVsdCBjb2x1bW4gdG8gMAotICAg ICAgaWYgPiBcdihhcmdjKSAyIHNjcmVlbiBtb3ZlIFwlMiBcJTMgIDsgTW92ZSB0byBnaXZlbiBy b3cvY29sIChpZiBhbnkpCi0gICAgICBzY3JlZW4gY2xlb2wgICAgICAgICAgICAgICAgICAgICAg ICAgOyBDbGVhciB0byBlbmQgb2YgbGluZQotICAgICAgaWYgZGVmIFwlMSB4ZWNobyBcZmNvbnRl bnRzKFwlMSkgICAgIDsgUHJpbnQgbWVzc2FnZSAoaWYgYW55KQotICB9Ci0KLSAgIEV4YW1wbGUg MjogQSBtYWNybyBwdXQgdGhlIGN1cnNvciBvbiB0aGUgYm90dG9tIHNjcmVlbiBsaW5lLCBsZWZ0 Ci0gICBtYXJnaW46Ci0KLSAgZGVmaW5lIEJPVCB7Ci0gICAgICBzY3JlZW4gbW92ZSBcdihyb3dz KSAwCi0gIH0KLQotICAgRXhhbXBsZSAzOiBBIG1hY3JvIHRvIGNlbnRlciBtZXNzYWdlIFwlMSBv biBsaW5lIFwlMi4KLQotICBkZWZpbmUgQ0VOVEVSIHsKLSAgICAgIGlmIG5vdCBkZWYgXCUyIGRl ZiBcJTIgMQotICAgICAgLlwleCA6Oj0gKFx2KGNvbHMpLVxmbGVuKFwlMSkpLzIKLSAgICAgIG1z ZyB7XCUxfSB7XCUyfSB7XCV4fQotICB9Ci0KLSAgIEV4YW1wbGUgNDogQSBzaW1wbGUgbWVudSAo YnVpbGRpbmcgb24gRXhhbXBsZXMgMS0zKToKLQotICBkZWYgXCVjIDAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsgTWVudSBjaG9pY2UgdmFyaWFibGUKLSAgc2NyZWVuIGNsZWFyICAgICAg ICAgICAgICAgICAgICAgICAgICA7IENsZWFyIHRoZSBzY3JlZW4KLSAgY2VudGVyIHtXZWxjb21l IHRvIFRoaXMgTWVudX0gMiAgICAgICA7IERpc3BsYXkgdGhlIG1lbnUKLSAgbXNnIHtDaG9pY2Vz On0gNAotICBtc2cgeyAxLiBGaWxlfSA2Ci0gIG1zZyB7IDIuIEVkaXR9IDcKLSAgbXNnIHsgMy4g RXhpdH0gOAotICB3aGlsZSAoICE9IFwlYyAzICkgeyAgICAgICAgICAgICAgICAgIDsgUmVhZCBh bmQgdmVyaWZ5IGNob2ljZQotICAgICAgd2hpbGUgdHJ1ZSB7ICAgICAgICAgICAgICAgICAgICAg IDsgS2VlcCB0cnlpbmcgdGlsbCB3ZSBnZXQgYSBnb29kIG9uZQotICAgICAgICAgIHNjcmVlbiBt b3ZlIDEwICAgICAgICAgICAgICAgIDsgTW92ZSB0byBsaW5lIDEwCi0gICAgICAgICAgc2NyZWVu IGNsZW9sICAgICAgICAgICAgICAgICAgOyBDbGVhciB0aGlzIGxpbmUKLSAgICAgICAgICBnZXRj IFwlYyB7WW91ciBjaG9pY2U6IH0gICAgICA7IFByb21wdCBhbmQgZ2V0IGFuZCBlY2hvIDEgY2hh cmFjdGVyCi0gICAgICAgICAgeGVjaG8gXCVjCi0gICAgICAgICAgaWYgKCBub3QgbnVtZXJpYyBc JWMgKSB7IG1zZyB7Tm90IG51bWVyaWMgLSAiXCVjIn0gMTIsIGNvbnRpbnVlIH0KLSAgICAgICAg ICBpZiAoID49IFwlYyAxICYmIDw9IFwlYyAzICkgYnJlYWsKLSAgICAgICAgICBtc2cge091dCBv ZiByYW5nZSAtICJcJWMifSAxMgotICAgICAgfQotICAgICAgc3dpdGNoIFwlYyB7ICAgICAgICAg ICAgICAgICAgICAgIDsgVmFsaWQgY2hvaWNlIC0gZXhlY3V0ZSBpdC4KLSAgICAgICAgOjEsIG1z ZyB7RmlsaW5nLi4uIH0gMTIsIGJyZWFrCi0gICAgICAgIDoyLCBtc2cge0VkaXRpbmcuLi59IDEy LCBicmVhawotICAgICAgICA6MywgbXNnIHtFeGl0aW5nLi4ufSAxMiwgYnJlYWsKLSAgICAgIH0K LSAgfQotICBlY2hvIEJ5ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgRXhpdCBjaG9z ZW4gLSBzYXkgZ29vZGJ5ZS4KLSAgYm90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7IExlYXZlIGN1cnNvciBhdCBzY3JlZW4gYm90dG9tLgotICBleGl0ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsgQW5kIGV4aXQuCi0KLSAgIFNpbWlsYXIgc2NyaXB0cyBjYW4g d29yayBvdmVyIHRoZSBjb21tdW5pY2F0aW9uIGNvbm5lY3Rpb247IHN1YnN0aXR1dGUKLSAgIElO UFVUIGFuZCBPVVRQVVQgZm9yIEdFVEMgYW5kIEVDSE8vWEVDSE8uCi0KLSAgNy4yMi4gRXZhbHVh dGluZyBBcml0aG1ldGljIEV4cHJlc3Npb25zCi0KLSAgIEEgbmV3IGFyaXRobWV0aWMgb3BlcmF0 b3Igd2FzIGFkZGVkIHRvIHRoZSBsaXN0IHJlY29nbml6ZWQgYnkgdGhlCi0gICBFVkFMVUFURSBj b21tYW5kLCB0aGUgXGZldmFsKCkgZnVuY3Rpb24sIGFuZCB3aGljaCBjYW4gYWxzbyBiZSB1c2Vk Ci0gICBhbnl3aGVyZSBlbHNlIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMgYXJlIGFjY2VwdGVkIChu dW1lcmljIGNvbW1hbmQKLSAgIGZpZWxkcywgYXJyYXkgc3Vic2NyaXB0cywgZXRjKToKLQotICAg UHJlZml4ICIhIgotICAgICAgICAgIFRoaXMgb3BlcmF0b3IgaW52ZXJ0cyB0aGUgInRydXRoIHZh bHVlIiBvZiB0aGUgbnVtYmVyIG9yCi0gICAgICAgICAgYXJpdGhtZXRpYyBleHByZXNzaW9uIHRo YXQgZm9sbG93cy4gSWYgdGhlIHZhbHVlIG9mIHRoZSBvcGVyYW5kCi0gICAgICAgICAgaXMgMCwg dGhlIHJlc3VsdCBpcyAxLiBJZiB0aGUgdmFsdWUgaXMgbm9uemVybywgdGhlIHJlc3VsdCBpcyAw LgotCi0gICBFeGFtcGxlczoKLQotICBzZXQgZXZhbCBvbGQKLSAgZXZhbHVhdGUgMAotICAwCi0K LSAgZXZhbHVhdGUgITAKLSAgMQotCi0gIGV2YWx1YXRlICEzCi0gIDAKLQotICBldmFsdWF0ZSAh KC0zKQotICAwCi0KLSAgLlwlYSA9IDEKLSAgLlwlYiA9IDAKLSAgZXZhbHVhdGUgIShcJWF8XCVi KQotICAwCi0KLSAgZXZhbHVhdGUgIShcJWEmXCViKQotICAxCi0KLSAgZXZhbHVhdGUgISghKFwl YSZcJWIpKQotICAwCi0KLSAgIE5vdGUgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gUHJlZml4ICEg KGludmVydCB0cnV0aCB2YWx1ZSkgYW5kIFN1ZmZpeCAhCi0gICAoZmFjdG9yaWFsKS4gQWxzbyB0 aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBQcmVmaXggISBhbmQgUHJlZml4IH4gKHdoaWNoCi0gICBp bnZlcnRzIGFsbCB0aGUgYml0cyBpbiBpdHMgb3BlcmFuZCkuIEFsc28gbm90ZSB0aGF0IHByZWZp eCBvcGVyYXRvcnMKLSAgICghLCAtLCBhbmQgfikgY2FuIG5vdCBiZSBhZGphY2VudCB1bmxlc3Mg eW91IHVzZSBwYXJlbnRoZXNlcyB0bwotICAgc2VwYXJhdGUgdGhlbSwgYXMgc2hvd24gaW4gdGhl IGZpbmFsIGV4YW1wbGUgYWJvdmUuCi0KLSAgNy4yMy4gRmxvYXRpbmctUG9pbnQgQXJpdGhtZXRp YwotCi0gICAgIEZvciBhIG1vcmUgY29udmVuaWVudCB3YXkgb2YgZGVhbGluZyB3aXRoIGZsb2F0 aW5nLXBvaW50IG51bWJlcnMKLSAgICAgdGhhbiB0aGUgb25lIGRlc2NyaWJlZCBoZXJlLCBzZWUg dGhlIFs2MzNdQy1LZXJtaXQgOC4wIHVwZGF0ZSBub3RlcywKLSAgICAgdGhlIHNlY3Rpb24gb24g WzYzNF1TLUV4cHJlc3Npb25zLgotCi0gICBDLUtlcm1pdCA3LjAgYWRkcyBsaW1pdGVkIHN1cHBv cnQgZm9yIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgKG51bWJlcnMKLSAgIHRoYXQgaGF2ZSBmcmFj dGlvbmFsIHBhcnRzLCBsaWtlIDMuMTQxNTkyNjUzKS4gVGhpcyBzdXBwb3J0IGlzIHByb3ZpZGVk Ci0gICB0aHJvdWdoIGEgc21hbGwgcmVwZXJ0b2lyZSBvZiBmdW5jdGlvbnMgYW5kIGluIEJvb2xl YW4gZXhwcmVzc2lvbnMgdGhhdAotICAgY29tcGFyZSBudW1iZXJzLCBidXQgZG9lcyBub3QgYXBw bHkgdG8gbnVtYmVyIHBhcnNpbmcgaW4gZ2VuZXJhbCwgb3IgdG8KLSAgIGV4cHJlc3Npb24gZXZh bHVhdGlvbiwgYXJyYXkgc3Vic2NyaXB0cywgdGhlIElOQ1JFTUVOVCBhbmQgREVDUkVNRU5UCi0g ICBjb21tYW5kcywgb3IgaW4gYW55IGNvbnRleHQgb3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQgaW4g dGhpcyBzZWN0aW9uLgotCi0gICBBIGZsb2F0aW5nIHBvaW50IG51bWJlciBoYXMgYW4gb3B0aW9u YWwgc2lnbiAoKyBvciAtKSwgZm9sbG93ZWQgYnkgYQotICAgc2VyaWVzIG9mIGRlY2ltYWwgZGln aXRzIGNvbnRhaW5pbmcgZWl0aGVyIHplcm8gb3Igb25lIHBlcmlvZCAoLikKLSAgIGNoYXJhY3Rl ciwgd2hpY2ggaXMgdGhlIGRlY2ltYWwgcG9pbnQuIFRoZSB1c2Ugb2YgY29tbWEgb3IgYW55IG90 aGVyCi0gICBjaGFyYWN0ZXIgYmVzaWRlcyBwZXJpb2QgYXMgYSBkZWNpbWFsIHBvaW50IGlzIG5v dCBzdXBwb3J0ZWQuCi0gICBTY2llbnRpZmljIG5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZWl0 aGVyLiBFeGFtcGxlcyBvZiBsZWdhbAotICAgZmxvYXRpbmctcG9pbnQgbnVtYmVyczoKLQotICAw ICAgICAgICAgICAgICAgIEludGVnZXJzIGNhbiBiZSB1c2VkCi0gIDEgICAgICAgICAgICAgICAg RGl0dG8KLSAgMi4gICAgICAgICAgICAgICBBIGRlY2ltYWwgcG9pbnQgd2l0aG91dCBkZWNpbWFs IGRpZ2l0cwotICAzLjAgICAgICAgICAgICAgIEEgZGVjaW1hbCBwb2ludCB3aXRoIGRlY2ltYWwg ZGlnaXRzCi0gIDMuMTQxNTkyNjUzICAgICAgRGl0dG8KLSAtNC4wICAgICAgICAgICAgICBBIG5l Z2F0aXZlIHNpZ24gY2FuIGJlIGluY2x1ZGVkCi0gKzUuMCAgICAgICAgICAgICAgQSBwb3NpdGl2 ZSBzaWduIGNhbiBiZSBpbmNsdWRlZAotCi0gICBFeGFtcGxlcyBvZiBub3RhdGlvbnMgdGhhdCBh cmUgbm90IGFjY2VwdGVkOgotCi0gIDEsMDAwLDAwMCAgICAgICAgU2VwYXJhdG9ycyBjYW4gbm90 IGJlIHVzZWQKLSAgMS4wMDAuMDAwICAgICAgICBEaXR0byAob3IgbXVsdGlwbGUgZGVjaW1hbCBw b2ludHMpCi0gIDYuMDIyMTM3RTIzICAgICAgTm8gc2NpZW50aWZpYyBub3RhdGlvbgotICA2LjYy NjA2ODY4ZS0zNCAgIERpdHRvCi0gIDEyLjUrNi4yNSAgICAgICAgTm8gImJhcmUiIGV4cHJlc3Np b25zCi0KLSAgIFlvdSBjYW4gdXNlIElGIEZMT0FUIHRlc3QgYSBzdHJpbmcgb3IgdmFyaWFibGUg dG8gc2VlIGlmIGl0J3MgaW4KLSAgIGFjY2VwdGFibGUgZmxvYXRpbmctcG9pbnQgZm9ybWF0LiBF eGFtcGxlOgotCi0gIGFzayBcJWYgeyBUeXBlIGEgbnVtYmVyOiB9Ci0gIGlmIG5vdCBkZWYgXCVm IC5cJWYgPSAwLjAKLSAgaWYgbm90IGZsb2F0IFwlZiBzdG9wIDEgSW52YWxpZCBmbG9hdGluZy1w b2ludCBudW1iZXI6ICJcJWYiCi0KLSAgIEMtS2VybWl0J3MgZmxvYXRpbmctcG9pbnQgc3VwcG9y dCwgbGlrZSBpdHMgc3VwcG9ydCBmb3Igd2hvbGUgbnVtYmVycwotICAgKGludGVnZXJzKSwgcmVs aWVzIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHVuZGVybHlpbmcgY29tcHV0ZXIuIFlvdXIK LSAgIGNvbXB1dGVyIGhhcyBvbmx5IGEgbGltaXRlZCBhbW91bnQgb2YgcHJlY2lzaW9uIGZvciBu dW1iZXJzLCBkZXBlbmRpbmcKLSAgIG9uIGl0cyBhcmNoaXRlY3R1cmUuIFRodXMgZmxvYXRpbmct cG9pbnQgbnVtYmVycyB0aGF0IGhhdmUgdG9vIG1hbnkKLSAgIGRpZ2l0cyB3aWxsIG5vdCBiZSBh Y2N1cmF0ZTsgYWRkaW5nIGEgdmVyeSBzbWFsbCBudW1iZXIgdG8gYSB2ZXJ5IGxhcmdlCi0gICBv bmUgbWlnaHQgaGF2ZSBubyBlZmZlY3QgYXQgYWxsOyBhbmQgc28gb24uIEZvciBkZXRhaWxzLCBy ZWFkIGEgdGV4dCBvbgotICAgbnVtZXJpY2FsIGFuYWx5c2lzLiBFeGFtcGxlOgotCi0gIC5cJWEg PSAxMTExMTExMTExMTExMTExMTExMSAgOyBBIGxvbmcgbnVtYmVyCi0gIC5cJWIgPSAyMjIyMjIy MjIyMjIyMjIyMjIyMiAgOyBBbm90aGVyIG9uZQotICBlY2hvIFxmZnBhZGQoXCVhLFwlYikgICAg ICAgIDsgQWRkIHRoZW0gLSB0aGUgcmVzdWx0IHNob3VsZCBiZSBhbGwgMydzCi0gIDMzMzMzMzMz MzMzMzMzMzMwMDAwLjAgICAgICAgOyBTZWUgdGhlIHJlc3VsdAotCi0gICBJbiB0aGlzIGV4YW1w bGUsIHRoZSBjb21wdXRlciBoYXMgMTYgZGlnaXRzIG9mIHByZWNpc2lvbjsgYWZ0ZXIgdGhhdCwK LSAgIHRoZSAobG93LW9yZGVyKSBkaWdpdHMgYXJlIHNldCB0byAwLCBzaW5jZSB0aGUgY29tcHV0 ZXIgZG9lc24ndCBrbm93Ci0gICB3aGF0IHRoZXkgcmVhbGx5IGFyZS4gSW4gZmFjdCwgdGhlIGNv bXB1dGVyIHJldHVybnMgcmFuZG9tIGRpZ2l0cywgYnV0Ci0gICBLZXJtaXQgc2V0cyBhbGwgZGln aXRzIGJleW9uZCB0aGUgY29tcHV0ZXIncyBwcmVjaXNpb24gdG8gMC4KLQotICAgQy1LZXJtaXQn cyBmbG9hdGluZy1wb2ludCBmdW5jdGlvbnMgaGF2ZSBuYW1lcyBvZiB0aGUgZm9ybQotICAgIlxm ZnB4eHgoYXJncykiICgiXGYiIGZvciBmdW5jdGlvbiwgImZwIiBmb3IgZmxvYXRpbmctcG9pbnQp LCB3aGVyZQotICAgInh4eCIgaXMgcmVwbGFjZWQgYnkgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9u LCBzdWNoIGFzICJzcXJ0IiwgYW5kCi0gICAiYXJncyIgaXMgdGhlIGFyZ3VtZW50IGxpc3QsIGNv bnNpc3Rpbmcgb2Ygb25lIG9yIHR3byBmbG9hdGluZy1wb2ludAotICAgbnVtYmVycyAoZGVwZW5k aW5nIG9uIHRoZSBmdW5jdGlvbiksIGFuZCBhbiBvcHRpb25hbCAiZCIgYXJndW1lbnQgdGhhdAot ICAgc2F5cyBub3cgbWFueSBkZWNpbWFsIHBsYWNlcyBzaG91bGQgYmUgc2hvd24gaW4gdGhlIHJl c3VsdC4gRXhhbXBsZToKLQotICBcZmZwZGl2KDEwLDMsMSkgcmV0dXJucyAiMy4zIgotICBcZmZw ZGl2KDEwLDMsMikgcmV0dXJucyAiMy4zMyIKLSAgXGZmcGRpdigxMCwzLDMpIHJldHVybnMgIjMu MzMzIgotCi0gICBhbmQgc28gb24sIHVwIHRvIHRoZSBwcmVjaXNpb24gb2YgdGhlIGNvbXB1dGVy LiBJZiB0aGUgZGVjaW1hbC1wbGFjZXMKLSAgIGFyZ3VtZW50IGlzIGxlc3MgdGhhbiB6ZXJvLCB0 aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSByZXN1bHQgaXMKLSAgIHRydW5jYXRlZDoKLQotICBc ZmZwZGl2KDEwLDMsLTEpIHJldHVybnMgIjMiLgotCi0gICBJZiB0aGUgZGVjaW1hbC1wbGFjZXMg YXJndW1lbnQgaXMgMCwgb3IgaXMgb21pdHRlZCwgQy1LZXJtaXQgcmV0dXJucyBhcwotICAgbWFu eSBkZWNpbWFsIHBsYWNlcyBhcyBhcmUgbWVhbmluZ2Z1bCBpbiB0aGUgY29tcHV0ZXIncyBmbG9h dGluZy1wb2ludAotICAgcHJlY2lzaW9uLCB0cnVuY2F0aW5nIGFueSBleHRyYW5lb3VzIHRyYWls aW5nIDAnczoKLQotICBcZmZwZGl2KDEwLDgpIHJldHVybnMgIjEuMjUiLgotICBcZmZwZGl2KDEw LDQpIHJldHVybnMgIjIuNSIuCi0gIFxmZnBkaXYoMTAsMikgcmV0dXJucyAiNS4wIi4KLSAgXGZm cGRpdigxMCwzKSByZXR1cm5zICIzLjMzMzMzMzMzMzMzMzMzMyIgKGZvciAxNi1kaWdpdCBwcmVj aXNpb24pLgotCi0gICBUaGVyZSBpcyBubyB3YXkgdG8gcmVxdWVzdCB0aGF0IGEgZmxvYXRpbmct cG9pbnQgZnVuY3Rpb24gcmV0dXJuIGEKLSAgIGRlY2ltYWwgcG9pbnQgYnV0IG5vIGRlY2ltYWwg cGxhY2VzLiBIb3dldmVyLCB0aGlzIGlzIGVhc3kgZW5vdWdoIHRvCi0gICBhY2NvbXBsaXNoIGlu IG90aGVyIHdheXMsIGZvciBleGFtcGxlIGJ5IHN1cHBseWluZyBpdCBvdXRzaWRlIHRoZQotICAg ZnVuY3Rpb24gY2FsbDoKLQotICBlY2hvIFxmZnBhZGQoXCVhLFwlYiwtMSkuCi0KLSAgIEtlcm1p dCdzIGZsb2F0aW5nLXBvaW50IGZ1bmN0aW9ucyBhbHdheXMgcm91bmQgdGhlIHJlc3VsdCBmb3Ig dGhlCi0gICByZXF1ZXN0ZWQgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHdoZW4gdGhlICJkIiBh cmd1bWVudCBpcyBnaXZlbiBhbmQKLSAgIGhhcyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwIChzZWUg dGhlIGRlc2NyaXB0aW9uIG9mIFxmZnByb3VuZCgpIGp1c3QKLSAgIGJlbG93KS4KLQotICAgRmxv YXRpbmctcG9pbnQgYXJndW1lbnRzIGNhbiBiZSBjb25zdGFudHMgaW4gZmxvYXRpbmctcG9pbnQg Zm9ybWF0IG9yCi0gICB2YXJpYWJsZXMgd2hvc2UgdmFsdWVzIGFyZSBmbG9hdGluZy1wb2ludCBu dW1iZXJzLiBJZiBhIGZsb2F0aW5nLXBvaW50Ci0gICBhcmd1bWVudCBpcyBvbWl0dGVkLCBvciBp cyBhIHZhcmlhYmxlIHdpdGggbm8gdmFsdWUsIDAuMCBpcyBzdXBwbGllZAotICAgYXV0b21hdGlj YWxseS4gRXhhbXBsZToKLQotICBkZWYgXCV4IDk5OS45OTkKLSAgdW5kZWYgXCV5Ci0gIGVjaG8g XGZmcG1pbihcJXgsXCV5KQotICAwLjAKLQotICAgT3IgZXF1aXZhbGVudGx5OgotCi0gIGVjaG8g XGZmcG1pbig5OTkuOTk5KQotICAwLjAKLQotICAgVGhlIGZsb2F0aW5nLXBvaW50IGZ1bmN0aW9u cyBhcmU6Ci0KLSAgIFxmZnByb3VuZChmMSxkKQotICAgICAgICAgIFJldHVybnMgZjEgcm91bmRl ZCB0byBkIGRlY2ltYWwgcGxhY2VzLiBGb3IgdGhpcyBmdW5jdGlvbiBvbmx5LAotICAgICAgICAg IGQgPSAwIChvciBkIG9taXR0ZWQpIGhhcyBhIHNwZWNpYWwgbWVhbmluZzogcmV0dXJuIHRoZSBp bnRlZ2VyCi0gICAgICAgICAgcGFydCBvZiBmMSByb3VuZGVkIGFjY29yZGluZyB0byB0aGUgZnJh Y3Rpb25hbCBwYXJ0LiBFeGFtcGxlczoKLQotICBcZmZwcm91bmQoMi43NDY1MywtMSkgcmV0dXJu cyAiMiIgKGZyYWN0aW9uIHRydW5jYXRlZCwgbm8gcm91bmRpbmcpLgotICBcZmZwcm91bmQoMi43 NDY1MywwKSAgcmV0dXJucyAiMyIgKGludGVnZXIgcGFydCBpcyByb3VuZGVkKS4KLSAgXGZmcHJv dW5kKDIuNzQ2NTMpICAgIHJldHVybnMgIjMiIChkIG9taXR0ZWQgc2FtZSBhcyBkID0gMCkuCi0g IFxmZnByb3VuZCgyLjc0NjUzLDEpICByZXR1cm5zICIyLjciLgotICBcZmZwcm91bmQoMi43NDY1 MywyKSAgcmV0dXJucyAiMi43NSIuCi0gIFxmZnByb3VuZCgyLjc0NjUzLDMpICByZXR1cm5zICIy Ljc0NyIuCi0gIFxmZnByb3VuZCgyLjc0NjUzLDQpICByZXR1cm5zICIyLjc0NjUiLCBldGMuCi0K LSAgIFxmZnBhZGQoZjEsZjIsZCkKLSAgICAgICAgICBSZXR1cm5zIHRoZSBzdW0gb2YgZjEgYW5k IGYyLgotCi0gICBcZmZwc3VidHJhY3QoZjEsZjIsZCkKLSAgICAgICAgICBTdWJ0cmFjdHMgZjIg ZnJvbSBmMSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgotCi0gICBcZmZwbXVsdGlwbHkoZjEsZjIs ZCkKLSAgICAgICAgICBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIGYxIGFuZCBmMi4KLQotICAgXGZm cGRpdmlkZShmMSxmMixkKQotICAgICAgICAgIElmIGYyIGlzIG5vdCAwLCBkaXZpZGVzIGYxIGJ5 IGYyIGFuZCByZXR1cm5zIHRoZSBxdW90aWVudC4KLSAgICAgICAgICBJZiBmMiBpcyAwLCBhIERJ VklERV9CWV9aRVJPIGVycm9yIG9jY3Vycy4KLQotICAgXGZmcHJhaXNlKGYxLGYyLGQpCi0gICAg ICAgICAgSWYgZjEgPSAwIGFuZCBmMiA8PSAwLCBvciBpZiBmMSA8IDAgYW5kIGYyIGhhcyBhIGZy YWN0aW9uYWwKLSAgICAgICAgICBwYXJ0LCBhbiBBUkdfT1VUX09GX1JBTkdFIGVycm9yIG9jY3Vy czsgb3RoZXJ3aXNlIGYxIHJhaXNlZCB0bwotICAgICAgICAgIHRoZSBmMiBwb3dlciBpcyByZXR1 cm5lZC4KLQotICAgXGZmcHNxcnQoZjEsZCkKLSAgICAgICAgICBJZiBmMSA+PSAwLCByZXR1cm5z IHRoZSBzcXVhcmUgcm9vdCBvZiBmMTsgb3RoZXJ3aXNlCi0gICAgICAgICAgQVJHX09VVF9PRl9S QU5HRS4KLQotICAgXGZmcGFic29sdXRlKGYxLGQpCi0gICAgICAgICAgUmV0dXJucyB0aGUgYWJz b2x1dGUgdmFsdWUgb2YgZjEgKGkuZS4gZjEgd2l0aG91dCBhIHNpZ24pLiBUaGlzCi0gICAgICAg ICAgaXMgdGhlIGZsb2F0aW5nLXBvaW50IGFuYWxvZyBvZiBcZmFic29sdXRlKG4xKS4KLQotICAg XGZmcGludChmMSkKLSAgICAgICAgICBSZXR1cm5zIHRoZSBpbnRlZ2VyIHBhcnQgb2YgZjEuIEVx dWl2YWxlbnQgdG8gXGZmcHJvdW5kKGYxLC0xKS4KLQotICAgXGZmcGV4cChmMSxkKQotICAgICAg ICAgIFRoZSBiYXNlIG9mIG5hdHVyYWwgbG9nYXJpdGhtcywgZSAoMi43MTgyODIuLi4pLCByYWlz ZWQgdG8gdGhlCi0gICAgICAgICAgZjEgcG93ZXIuCi0KLSAgIFxmZnBsb2duKGYxLGQpCi0gICAg ICAgICAgVGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGYxICh0aGUgcG93ZXIgdG8gd2hpY2ggZSBt dXN0IGJlIHJhaXNlZAotICAgICAgICAgIHRvIG9idGFpbiBmMSkuCi0KLSAgIFxmZnBsb2cxMChm MSxkKQotICAgICAgICAgIFRoZSBiYXNlLTEwIGxvZ2FyaXRobSBvZiBmMSAodGhlIHBvd2VyIHRv IHdoaWNoIDEwIG11c3QgYmUKLSAgICAgICAgICByYWlzZWQgdG8gb2J0YWluIGYxKS4KLQotICAg XGZmcG1vZHVsdXMoZjEsZjIsZCkKLSAgICAgICAgICBJZiBmMiBpcyBub3QgMCwgdGhlIHJlbWFp bmRlciBhZnRlciBkaXZpZGluZyBmMSBieSBmMi4KLSAgICAgICAgICBJZiBmMiBpcyAwLCBhIERJ VklERV9CWV9aRVJPIGVycm9yIG9jY3Vycy4KLSAgICAgICAgICBUaGlzIGlzIHRoZSBmbG9hdGlu Zy1wb2ludCBhbmFsb2cgb2YgXGZtb2QobjEsbjIpLgotCi0gICBcZmZwbWF4aW11bShmMSxmMixk KQotICAgICAgICAgIFJldHVybnMgdGhlIG1heGltdW0gb2YgZjEgYW5kIGYyLiBUaGlzIGlzIHRo ZSBmbG9hdGluZy1wb2ludAotICAgICAgICAgIGFuYWxvZyBvZiBcZm1heChuMSxuMikuCi0KLSAg IFxmZnBtaW5pbXVtKGYxLGYyLGQpCi0gICAgICAgICAgUmV0dXJucyB0aGUgbWluaW11bSBvZiBm MSBhbmQgZjIuIFRoaXMgaXMgdGhlIGZsb2F0aW5nLXBvaW50Ci0gICAgICAgICAgYW5hbG9nIG9m IFxmbWluKG4xLG4yKS4KLQotICAgXGZmcHNpbmUoZjEsZCkKLSAgICAgICAgICBSZXR1cm5zIHRo ZSBzaW5lIG9mIGYxIHJhZGlhbnMuCi0KLSAgIFxmZnBjb3NpbmUoZjEsZCkKLSAgICAgICAgICBS ZXR1cm5zIHRoZSBjb3NpbmUgb2YgZjEgcmFkaWFucy4KLQotICAgXGZmcHRhbmdlbnQoZjEsZCkK LSAgICAgICAgICBSZXR1cm5zIHRoZSB0YW5nZW50IG9mIGYxIHJhZGlhbnMuCi0KLSAgIE5vdGUg dGhhdCBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIHdpdGggaW50ZWdlciBhcmd1 bWVudHMuIElmCi0gICB5b3Ugd2FudCBhbiBpbnRlZ2VyIHJlc3VsdCwgc3BlY2lmeSBkID0gLTEg KHRvIHRydW5jYXRlKSBvciBmZWVkIHRoZQotICAgcmVzdWx0IHRvIFxmZnByb3VuZCh4eHgsMCkg KHRvIHJvdW5kKS4KLQotICAgRmxvYXRpbmctcG9pbnQgbnVtYmVycyAob3IgdmFyaWFibGVzIG9y IGZ1bmN0aW9ucyB0aGF0IHJldHVybiB0aGVtKSBjYW4KLSAgIGJlIHVzZWQgaW4gQm9vbGVhbiBl eHByZXNzaW9ucyAoc2VlIFs2MzVdU2VjdGlvbiA3LjIwLjIpIHRoYXQgY29tcGFyZQotICAgbnVt YmVyczoKLQotICA9IHggeQotICAhPSB4IHkKLSAgPCB4IHkKLSAgPiB4IHkKLSAgPD0geCB5Ci0g ID49IHggeQotCi0gICBJbiB0aGVzZSBleGFtcGxlcywgeCBhbmQgeSBjYW4gYmUgZWl0aGVyIGlu dGVnZXJzIG9yIGZsb2F0aW5nLXBvaW50Ci0gICBudW1iZXJzIGluIGFueSBjb21iaW5hdGlvbi4g SW4gYW4gYXJpdGhtZXRpYyBjb21wYXJpc29uIG9mIGFuIGludGVnZXIKLSAgIGFuZCBhIGZsb2F0 aW5nLXBvaW50IG51bWJlciwgdGhlIGludGVnZXIgaXMgY29udmVydGVkIHRvIGZsb2F0aW5nLXBv aW50Ci0gICBiZWZvcmUgdGhlIGNvbXBhcmlzb24gaXMgbWFkZS4gRXhhbXBsZXM6Ci0KLSAgLlwl dCA9IDMuMDAwMDAwMDAwCi0gIC5cJWYgPSAzLjE0MTU5MjY1MwotICAuXCVpID0gMwotCi0gIGlm ID4gXCVmIFwlaSBlY2hvIFBpIGlzIGdyZWF0ZXIuCi0gIGlmID0gXCV0IFwlaSBlY2hvICJcJWki ID0gIlwldCIuCi0KLSAgIEEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGNhbiBhbHNvIGJlIHVzZWQg aW46Ci0KLSAgSUYgbnVtYmVyIGNvbW1hbmQKLQotICAgd2hlcmUgdGhlIGNvbW1hbmQgaXMgZXhl Y3V0ZWQgaWYgdGhlIG51bWJlciBpcyBub256ZXJvLiBJZiB0aGUgbnVtYmVyCi0gICBpcyBmbG9h dGluZy1wb2ludCwgdGhlIGNvbW1hbmQgaXMgbm90IGV4ZWN1dGVkIGlmIHRoZSBudW1iZXIgaXMg MC4wLAotICAgYW5kIGlzIGV4ZWN1dGVkIG90aGVyd2lzZS4KLQotICAgRmxvYXRpbmctcG9pbnQg bnVtYmVycyBjYW4gYmUgc29ydGVkIHVzaW5nIEFSUkFZIFNPUlQgL05VTUVSSUMgKHNlZQotICAg WzYzNl1TZWN0aW9uIDcuMTAuNSApLgotCi0gICBUd28gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRz IGFyZSBwcm92aWRlZDoKLQotICBcdihtYXRoX3BpKSA9IFBpICgzLjE0MTU5MjY1My4uLikKLSAg XHYobWF0aF9lKSAgPSBlLCB0aGUgYmFzZSBvZiBuYXR1cmFsIGxvZ2FyaXRobXMgKDIuNzE4Mjgu Li4pCi0KLSAgIFRoZXNlIGFyZSBnaXZlbiB0byB0aGUgY29tcHV0ZXIncyBwcmVjaXNpb24sIGUu Zy4gMTYgZGlnaXRzLiBUaGlzCi0gICBudW1iZXIgaXRzZWxmIGlzIGF2YWlsYWJsZSBpbiBhIHZh cmlhYmxlOgotCi0gICBcdihtYXRoX3ByZWNpc2lvbikKLSAgICAgICAgICBIb3cgbWFueSBzaWdu aWZpY2FudCBkaWdpdHMgaW4gYSBmbG9hdGluZy1wb2ludCBudW1iZXIuCi0KLSAgNy4yNC4gVHJh Y2luZyBTY3JpcHQgRXhlY3V0aW9uCi0KLSAgIFRoZSBUUkFDRSBjb21tYW5kIGlzIGhhbmR5IGZv ciBkZWJ1Z2dpbmcgc2NyaXB0cy4KLQotICAgVFJBQ0UgWyB7IC9PTiwgL09GRiB9IF0gWyB7IEFT U0lHTk1FTlRTLCBDT01NQU5ELUxFVkVMLCBBTEwgfSBdCi0gICAgICAgICAgU2VsZWN0cyB0cmFj aW5nIG9mIHRoZSBnaXZlbiBvYmplY3QuCi0KLSAgIE9wdGlvbmFsIHN3aXRjaGVzIGFyZSAvT04g YW5kIC9PRkYuIElmIG5vIHN3aXRjaCBpcyBnaXZlbiwgL09OIGlzCi0gICBpbXBsaWVkLiBUaGUg dHJhY2Ugb2JqZWN0cyBhcmUgQVNTSUdOTUVOVFMsIENPTU1BTkQtTEVWRUwsIGFuZCBBTEwuIFRo ZQotICAgZGVmYXVsdCBvYmplY3QgaXMgQUxMLCBtZWFuaW5nIHRvIHNlbGVjdCBhbGwgdHJhY2Ug b2JqZWN0cyAoYmVzaWRlcwotICAgQUxMKS4gVGh1cyBUUkFDRSBieSBpdHNlbGYgc2VsZWN0cyB0 cmFjaW5nIG9mIGV2ZXJ5dGhpbmcsIGFzIGRvZXMgVFJBQ0UKLSAgIC9PTiwgYW5kIFRSQUNFIC9P RkYgdHVybnMgb2ZmIGFsbCB0cmFjaW5nLgotCi0gICBXaGVuIHRyYWNpbmcgb2YgQVNTSUdOTUVO VFMgaXMgb24sIGV2ZXJ5IHRpbWUgdGhlIHZhbHVlIG9mIGFueQotICAgdXNlci1kZWZpbmVkIHZh cmlhYmxlIG9yIG1hY3JvIGNoYW5nZXMsIEMtS2VybWl0IHByaW50cyBvbmUgb2YgdGhlCi0gICBm b2xsb3dpbmc6Ci0KLSAgID4+PiBuYW1lOiAidmFsdWUiCi0gICAgICAgICAgVGhlIG5hbWUgb2Yg dGhlIHZhcmlhYmxlIG9yIG1hY3JvIGZvbGxvd2VkIGJ5IHRoZSBuZXcgdmFsdWUgaW4KLSAgICAg ICAgICBxdW90ZXMuIFRoaXMgaW5jbHVkZXMgaW1wbGljaXQgbWFjcm8tcGFyYW1ldGVyIGFzc2ln bm1lbnRzCi0gICAgICAgICAgZHVyaW5nIG1hY3JvIGludm9jYXRpb24uCi0KLSAgID4+PiBuYW1l OiAodW5kZWYpCi0gICAgICAgICAgVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgdmFyaWFibGUgb3Ig bWFjcm8gaGFzIGJlZW4gdW5kZWZpbmVkLgotCi0gICA8PDwgbmFtZTogInZhbHVlIgotICAgICAg ICAgIEZvciBSRVRVUk4gc3RhdGVtZW50czogdGhlIG5hbWUgb2YgdGhlIG1hY3JvIGFuZCB0aGUg cmV0dXJuCi0gICAgICAgICAgdmFsdWUuCi0KLSAgIDw8PCBuYW1lOiAobnVsbCkKLSAgICAgICAg ICBGb3IgUkVUVVJOIHN0YXRlbWVudHMgdGhhdCBpbmNsdWRlIG5vIHZhbHVlIG9yIGFuIGVtcHR5 IHZhbHVlLgotCi0gICBXaGVuIHRyYWNpbmcgb2YgQ09NTUFORC1MRVZFTCBpcyBvbiwgQy1LZXJt aXQgcHJpbnRzOgotCi0gICBbbl0gK0Y6ICJuYW1lIgotICAgICAgICAgIFdoZW5ldmVyIGEgY29t bWFuZCBmaWxlIGlzIGVudGVyZWQsIHdoZXJlICJuIiBpcyB0aGUgY29tbWFuZAotICAgICAgICAg IGxldmVsICgwID0gdG9wKTsgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgZmlsZSBpcyBzaG93biBp bgotICAgICAgICAgIHF1b3Rlcy4KLQotICAgW25dICtNOiAibmFtZSIKLSAgICAgICAgICBXaGVu ZXZlciBhIG1hY3JvIGlzIGVudGVyZWQ7ICJuIiBpcyB0aGUgY29tbWFuZCBsZXZlbC4gVGhlIG5h bWUKLSAgICAgICAgICBvZiB0aGUgbWFjcm8gaXMgc2hvd24gaW4gcXVvdGVzLgotCi0gICBbbl0g LUY6ICJuYW1lIgotICAgICAgICAgIFdoZW5ldmVyIGEgY29tbWFuZCBmaWxlIGlzIHJlZW50ZXJl ZCBmcm9tIGJlbG93LCB3aGVuIGEgbWFjcm8gb3IKLSAgICAgICAgICBjb21tYW5kIGZpbGUgdGhh dCBpdCBoYXMgaW52b2tlZCBoYXMgcmV0dXJuZWQuCi0KLSAgIFtuXSAtTTogIm5hbWUiCi0gICAg ICAgICAgV2hlbmV2ZXIgYSBtYWNybyBpcyByZWVudGVyZWQgZnJvbSBiZWxvdy4KLQotICAgRm9y IG90aGVyIGRlYnVnZ2luZyB0b29scywgc2VlIFNIT1cgQVJHUywgU0hPVyBTVEFDSywgU0VUIFRB S0UsIFNFVAotICAgTUFDUk8sIGFuZCBvZiBjb3Vyc2UsIEVDSE8uCi0KLSAgNy4yNS4gQ29tcGFj dCBTdWJzdHJpbmcgTm90YXRpb24KLQotICAgSXQgaXMgb2Z0ZW4gZGVzaXJhYmxlIHRvIGV4dHJh Y3QgYSBzdWJzdHJpbmcgZnJvbSBhIHN0cmluZyB3aGljaCBpcwotICAgc3RvcmVkIGluIGEgdmFy aWFibGUsIGFuZCBmb3IgdGhpcyB3ZSBoYXZlIHRoZSBcZnN1YnN0cmluZygpIGZ1bmN0aW9uLAot ICAgd2hpY2ggaXMgdXNlZCBsaWtlIHRoaXM6Ci0KLSAgZGVmaW5lIFwlYSAxMjM0NTY3ODkwCi0g IGVjaG8gXGZzdWJzdHJpbmcoXCVhLDMsNCkgOyBzdWJzdHJpbmcgZnJvbSAzcmQgY2hhcmFjdGVy IGxlbmd0aCA0Ci0gIDM0NTYKLQotICAgb3IgbGlrZSB0aGlzIHdpdGggbWFjcm8tbmFtZWQgdmFy aWFibGVzOgotCi0gIGRlZmluZSBzdHJpbmcgMTIzNDU2Nzg5MAotICBlY2hvIFxmc3Vic3RyaW5n KFxtKHN0cmluZyksMyw0KQotICAzNDU2Ci0KLSAgIEMtS2VybWl0IDcuMCBhZGRzIGEgcGFpciBv ZiBhbHRlcm5hdGl2ZSBjb21wYWN0IG5vdGF0aW9uczoKLQotXDoodmFyaWFibGVuYW1lW3N0YXJ0 Omxlbmd0aF0pICA8LS0gU3Vic3RyaW5nIG9mIHZhcmlhYmxlJ3MgdmFsdWUKLVxzKG1hY3JvbmFt ZVtzdGFydDpsZW5ndGhdKSAgICAgPC0tIFN1YnN0cmluZyBvZiBtYWNybydzIGRlZmluaXRpb24K LQotICAgVGhlc2UgYXJlIGV4YWN0bHkgZXF1aXZhbGVudCB0byB1c2luZyBcZnN1YnN0cmluZygp LCBleGNlcHQgbW9yZQotICAgY29tcGFjdCB0byB3cml0ZSBhbmQgYWxzbyBmYXN0ZXIgc2luY2Ug ZXZhbHVhdGlvbiBpcyBpbiBvbmUgc3RlcAotICAgaW5zdGVhZCBvZiB0d28uCi0KLSAgIFRoZSAi XDooKSIgbm90YXRpb24gY2FuIGJlIHVzZWQgd2l0aCBhbnkgS2VybWl0IHZhcmlhYmxlLCB0aGF0 IGlzLAotICAgYWxtb3N0IGFueXRoaW5nIHRoYXQgc3RhcnRzIHdpdGggYSBiYWNrc2xhc2g6Ci0K LSAgXDooXCVhWzI6Nl0pICAgICAgPC0tIGVxdWl2YWxlbnQgdG8gXGZzdWJzdHJpbmcoXCVhLDIs NikKLSAgXDooXCZ4WzFdWzI6Nl0pICAgPC0tIGVxdWl2YWxlbnQgdG8gXGZzdWJzdHJpbmcoXCZ4 WzFdLDIsNikKLSAgXDooXG0oZm9vKVsyOjZdKSAgPC0tIGVxdWl2YWxlbnQgdG8gXGZzdWJzdHJp bmcoXG0oZm9vKSwyLDYpCi0gIFw6KFx2KHRpbWUpWzI6Nl0pIDwtLSBlcXVpdmFsZW50IHRvIFxm c3Vic3RyaW5nKFx2KHRpbWUpLDIsNikKLSAgXDooXCQoVEVSTSlbMjo2XSkgPC0tIGVxdWl2YWxl bnQgdG8gXGZzdWJzdHJpbmcoXCQoVEVSTSksMiw2KQotICBcOihBQkNERUZHSFsyOjZdKSA8LS0g ZXF1aXZhbGVudCB0byBcZnN1YnN0cmluZyhBQkNERUZHSCwyLDYpCi0KLSAgIFdoYXRldmVyIGFw cGVhcnMgYmV0d2VlbiB0aGUgbGVmdCBwYXJlbnRoZXNpcyBhbmQgdGhlIGxlZnQgYnJhY2tldCBp cwotICAgZXZhbHVhdGVkIGFuZCB0aGVuIHRoZSBpbmRpY2F0ZWQgc3Vic3RyaW5nIG9mIHRoZSBy ZXN1bHQgaXMgcmV0dXJuZWQuCi0KLSAgIFRoZSAiXHMoKSIgbm90YXRpb24gaXMgdGhlIHNhbWUs IGV4Y2VwdCBhZnRlciBldmFsdWF0aW5nIHRoZSB2YXJpYWJsZSwKLSAgIHRoZSByZXN1bHQgaXMg dHJlYXRlZCBhcyBhIG1hY3JvIG5hbWUgYW5kIGlzIGxvb2tlZCB1cCBpbiB0aGUgbWFjcm8KLSAg IHRhYmxlLiBUaGVuIHRoZSBpbmRpY2F0ZWQgc3Vic3RyaW5nIG9mIHRoZSBtYWNybyBkZWZpbml0 aW9uIGlzCi0gICByZXR1cm5lZC4gRXhhbXBsZToKLQotICBkZWZpbmUgdGVzdGluZyBhYmNkZWZn aGlqa2xtbm9wcXJzdHV2d3h5egotICBkZWZpbmUgXCVhIHRlc3RpbmcKLQotICBccyh0ZXN0aW5n WzI6Nl0pICAtLT4gIGJjZGVmZwotICBcOih0ZXN0aW5nWzI6Nl0pICAtLT4gIGVzdGluZwotICBc OihcJWFbMjo2XSkgICAgICAtLT4gIGVzdGluZwotICBccyhcJWFbMjo2XSkgICAgICAtLT4gIGJj ZGVmZwotCi0gICBOb3RlIHRoYXQgdGhlIGZvbGxvd2luZyB0d28gZXhhbXBsZXMgYXJlIGVxdWl2 YWxlbnQ6Ci0KLSAgXDooXG0oZm9vKVsyOjZdKQotICBccyhmb29bMjo2XSkKLQotICAgVGhlIGZp cnN0IG51bWJlciBpbiB0aGUgYnJhY2tldHMgaXMgdGhlIDEtYmFzZWQgc3RhcnRpbmcgcG9zaXRp b24uIElmCi0gICBpdCBpcyBvbWl0dGVkLCBvciBsZXNzIHRoYW4gMSwgaXQgaXMgdHJlYXRlZCBh cyAxLiBJZiBpdCBpcyBncmVhdGVyCi0gICB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywg YW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgotCi0gICBUaGUgc2Vjb25kIG51bWJlciBpcyB0 aGUgbGVuZ3RoIG9mIHRoZSBkZXNpcmVkIHN1YnN0cmluZy4gSWYgdGhlIHNlY29uZAotICAgbnVt YmVyIGlzIG9taXR0ZWQsIGlzIGxlc3MgdGhhbiAwLCBvciB3b3VsZCBiZSBwYXN0IHRoZSBlbmQg b2YgdGhlCi0gICBzdHJpbmcsIHRoZW4gInRocm91Z2ggdGhlIGVuZCBvZiB0aGUgc3RyaW5nIiBp cyBhc3N1bWVkLiBJZiBpdCBpcyAwLAotICAgdGhlIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4K LQotICAgSWYgdGhlIGJyYWNrZXRzIGFyZSBlbXB0eSBvciBvbWl0dGVkLCB0aGUgb3JpZ2luYWwg c3RyaW5nIGlzIHJldHVybmVkLgotCi0gICBUaGUgc3RhcnRpbmcgcG9zaXRpb24gYW5kIGxlbmd0 aCBuZWVkIG5vdCBiZSBsaXRlcmFsIG51bWJlcnM7IHRoZXkgY2FuCi0gICBhbHNvIGJlIHZhcmlh YmxlcywgZnVuY3Rpb25zLCBhcml0aG1ldGljIGV4cHJlc3Npb25zLCBvciBldmVuIG90aGVyCi0g ICBccygpIG9yIFw6KCkgcXVhbnRpdGllczsgYW55dGhpbmcgdGhhdCBldmFsdWF0ZXMgdG8gYSBu dW1iZXIsIGZvcgotICAgZXhhbXBsZToKLQotICBccyhibG9ja1sxMDI1OlxmaGV4Mm4oXHMoYmxv Y2tbXCViOlwlbis0XSkpLzJdKQotCi0gICBTeW50YWN0aWNhbGx5LCBcbShuYW1lKSBhbmQgXHMo bmFtZSkgZGlmZmVyIG9ubHkgaW4gdGhhdCB0aGUgc2VxdWVuY2UKLSAgIFsqXSBhdCB0aGUgZW5k IG9mIHRoZSBuYW1lICh3aGVyZSAqIGlzIGFueSBzZXF1ZW5jZSBvZiAwIG9yIG1vcmUKLSAgIGNo YXJhY3RlcnMpIGlzIHRyZWF0ZWQgYXMgc3Vic3RyaW5nIG5vdGF0aW9uIGluIFxzKG5hbWUpLCBi dXQgaXMKLSAgIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgbmFtZSBpbiBcbShuYW1lKSAodG8gc2Vl IHdoeSwgc2VlIFs2MzddU2VjdGlvbgotICAgNy4xMC45KS4KLQotICA3LjI2LiBOZXcgV0FJVCBD b21tYW5kIE9wdGlvbnMKLQotICAgVGhlIFdBSVQgY29tbWFuZCBoYXMgYmVlbiBleHRlbmRlZCB0 byBhbGxvdyB3YWl0aW5nIGZvciBkaWZmZXJlbnQga2luZHMKLSAgIG9mIHRoaW5ncyAoZm9ybWVy bHkgaXQgb25seSB3YWl0ZWQgZm9yIG1vZGVtIHNpZ25hbHMpLiBOb3cgaXQgYWxzbyBjYW4KLSAg IHdhaXQgZm9yIGZpbGUgZXZlbnRzLgotCi0gICAgNy4yNi4xLiBXYWl0aW5nIGZvciBNb2RlbSBT aWduYWxzCi0KLSAgIFRoZSBwcmV2aW91cyBzeW50YXg6Ci0KLSAgV0FJVCB0aW1lIHsgQ0QsIERT UiwgUlRTLCBSSSwgLi4uIH0KLQotICAgaGFzIGNoYW5nZWQgdG86Ci0KLSAgV0FJVCB0aW1lIE1P REVNLVNJR05BTFMgeyBDRCwgRFNSLCBSVFMsIFJJLCAuLi4gfQotCi0gICBIb3dldmVyLCB0aGUg cHJldmlvdXMgc3ludGF4IGlzIHN0aWxsIGFjY2VwdGVkLiBUaGUgYmVoYXZpb3IgaXMgdGhlCi0g ICBzYW1lIGluIGVpdGhlciBjYXNlLgotCi0gICAgNy4yNi4yLiBXYWl0aW5nIGZvciBGaWxlIEV2 ZW50cwotCi0gICBUaGUgbmV3IFdBSVQgb3B0aW9uOgotCi0gIFdBSVQgdGltZSBGSUxFIHsgQ1JF QVRJT04sIERFTEVUSU9OLCBNT0RJRklDQVRJT04gfSBmaWxlbmFtZQotCi0gICBsZXRzIHlvdSB0 ZWxsIEtlcm1pdCB0byB3YWl0IHRoZSBnaXZlbiBhbW91bnQgb2YgdGltZSAob3IgdW50aWwgdGhl Ci0gICBnaXZlbiB0aW1lIG9mIGRheSkgZm9yIGEgZmlsZSB3aG9zZSBuYW1lIGlzIGZpbGVuYW1l IHRvIGJlIGNyZWF0ZWQsCi0gICBkZWxldGVkLCBvciBtb2RpZmllZCwgcmVzcGVjdGl2ZWx5LiBU aGUgZmlsZW5hbWUgbWF5IG5vdCBjb250YWluCi0gICB3aWxkY2FyZHMuIElmIHRoZSBzcGVjaWZp ZWQgZXZlbnQgZG9lcyBub3Qgb2NjdXIgd2l0aGluIHRoZSB0aW1lIGxpbWl0LAotICAgb3IgaWYg V0FJVCBDQU5DRUxMQVRJT04gaXMgT04gYW5kIHlvdSBpbnRlcnJ1cHQgZnJvbSB0aGUga2V5Ym9h cmQKLSAgIGJlZm9yZSB0aGUgdGltZSBpcyB1cCwgdGhlIFdBSVQgY29tbWFuZCBmYWlscy4gSWYg dGhlIGV2ZW50IGlzCi0gICBNT0RJRklDQVRJT04gYW5kIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0 LCB0aGUgY29tbWFuZCBmYWlscy4gT3RoZXJ3aXNlLAotICAgaWYgdGhlIGdpdmVuIGV2ZW50IG9j Y3VycyB3aXRoaW4gdGhlIHRpbWUgbGltaXQsIHRoZSBjb21tYW5kIHN1Y2NlZWRzLgotICAgRXhh bXBsZXM6Ci0KLSAgIFdBSVQgNjAwIEZJTEUgREVMRVRJT04gb29mYS50bXAKLSAgICAgICAgICBX YWl0IHVwIHRvIDEwIG1pbnV0ZXMgZm9yIGZpbGUgb29mYS50bXAgdG8gZGlzYXBwZWFyLgotCi0g ICBXQUlUIDIzOjU5OjU5IEZJTEUgTU9EIG9yZGVycy5kYgotICAgICAgICAgIFdhaXQgdW50aWwg anVzdCBiZWZvcmUgbWlkbmlnaHQgZm9yIHRoZSBvcmRlcnMuZGIgZmlsZSB0byBiZQotICAgICAg ICAgIGNoYW5nZWQuCi0KLSAgIEV4YW1wbGU6IFN1cHBvc2UgeW91IHdhbnQgdG8gaGF2ZSB0aGUg Y3VycmVudCBjb3B5IG9mIC9ldGMvbW90ZCBvbiB5b3VyCi0gICBzY3JlZW4gYXQgYWxsIHRpbWVz LCBhbmQgeW91IHdhbnQgdG8gaGVhciBhIGJlbGwgd2hlbmV2ZXIgaXQgY2hhbmdlczoKLQotICBk ZWYgXCVmIC9ldGMvbW90ZCAgICAgICAgICAgICAgICAgICAgICA7IFRoZSBmaWxlIG9mIGludGVy ZXN0LgotICB3aGlsZSAxIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IExvb3AgZm9y ZXZlci4uLgotICAgICAgY2xzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IENsZWFy IHRoZSBzY3JlZW4uCi0gICAgICBlY2hvIFwlZjogXHYoZGF0ZSkgXHYodGltZSkuLi4gICAgIDsg UHJpbnQgMi1saW5lIGhlYWRpbmcuLi4KLSAgICAgIGVjaG8KLSAgICAgIGlmICggbm90IGV4aXN0 IFwlZiApIHsgICAgICAgICAgICAgOyBJZiBmaWxlIGRvZXNuJ3QgZXhpc3QsCi0gICAgICAgICAg ZWNobyBcJWYgZG9lcyBub3QgZXhpc3QuLi4gICAgIDsgcHJpbnQgbWVzc2FnZSwKLSAgICAgICAg ICB3YWl0IDYwMCBmaWxlIGNyZWF0IFwlZiAgICAgICAgOyBhbmQgd2FpdCBmb3IgaXQgdG8gYXBw ZWFyLgotICAgICAgICAgIGNvbnRpbnVlCi0gICAgICB9Ci0gICAgICBiZWVwICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsgU29tZXRoaW5nIG5ldyAtIGJlZXAuCi0gICAgICB0eXBlIC9o ZWFkOlx2KHJvd3MtMikgXCVmICAgICAgICAgIDsgRGlzcGxheSB0aGUgZmlsZQotICAgICAgaWYg ZmFpbCBleGl0IDEgXCVmOiBcZmVycnN0cmluZygpICA7IChjaGVja2luZyBmb3IgZXJyb3JzKS4K LSAgICAgIHdhaXQgOTk5IGZpbGUgbW9kIFwlZiAgICAgICAgICAgICAgOyBXYWl0IGZvciBpdCB0 byBjaGFuZ2UuCi0gIH0KLQotICAgVGhpcyBub3RpY2VzIHdoZW4gdGhlIGZpbGUgaXMgY3JlYXRl ZCwgZGVsZXRlZCwgb3IgbW9kaWZpZWQsIGFuZCBhY3RzCi0gICBvbmx5IHRoZW4gKG9yIHdoZW4g eW91IGludGVycnVwdCBpdCB3aXRoKTsgdGhlIHRpbWUgc2hvd24gaW4gdGhlCi0gICBoZWFkaW5n IGlzIHRoZSB0aW1lIG9mIHRoZSBtb3N0IHJlY2VudCBldmVudCAoaW5jbHVkaW5nIHdoZW4gdGhl Ci0gICBwcm9ncmFtIHN0YXJ0ZWQpLgotCi0gICBTZWUgWzYzOF1TZWN0aW9uIDEuMTAsIHdoZXJl IHRoZSBcdihrYmNoYXIpIHZhcmlhYmxlIGlzIGV4cGxhaW5lZC4gVGhpcwotICAgbGV0cyB5b3Ug bW9kaWZ5IGEgbG9vcCBsaWtlIHRoZSBvbmUgYWJvdmUgdG8gYWxzbyBhY2NlcHQKLSAgIHNpbmds ZS1jaGFyYWN0ZXIgY29tbWFuZHMsIHdoaWNoIGludGVycnVwdCB0aGUgV0FJVCwgYW5kIGRpc3Bh dGNoCi0gICBhY2NvcmRpbmdseS4gRm9yIGV4YW1wbGU6Ci0KLSAgd2FpdCA5OTkgZmlsZSBtb2Qg XCVmICAgICAgICAgICAgICA7IFdhaXQgZm9yIHRoZSBmaWxlIHRvIGNoYW5nZS4KLSAgaWYgZGVm aW5lZCBcdihrYmNoYXIpIHsgICAgICAgICAgICA7IEludGVycnVwdGVkIGZyb20ga2V5Ym9hcmQ/ Ci0gICAgICBzd2l0Y2ggXHYoa2JjaGFyKSB7ICAgICAgICAgICAgOyBIYW5kbGUgdGhlIGtleXN0 cm9rZS4uLgotICAgICAgICA6cSwgZXhpdCAgICAgICAgICAgICAgICAgICAgIDsgUSB0byBRdWl0 Ci0gICAgICAgIDpoLCBlY2hvIGJsYWggYmxhaCwgYnJlYWsgICAgOyBIIGZvciBIZWxwCi0gICAg ICAgIDpkZWZhdWx0LCBiZWVwLCBjb250aW51ZSAgICAgOyBBbnl0aGluZyBlbHNlIGJlZXAgYW5k IGlnbm9yZQotICAgICAgfQotICB9Ci0KLSAgIFRoaXMgbGV0cyB5b3Ugd3JpdGUgZXZlbnQtZHJp dmVuIGFwcGxpY2F0aW9ucyB0aGF0IHdhaXQgZm9yIHVwIHRvIHRocmVlCi0gICBldmVudHMgYXQg b25jZTogYSBmaWxlIG9yIG1vZGVtIGV2ZW50LCBhIHRpbWVvdXQsIGFuZCBhIGtleXN0cm9rZS4K LQotICA3LjI3LiBSZWxheGVkIEZPUiBhbmQgU1dJVENIIFN5bnRheAotCi0gICBGb3IgY29uc2lz dGVuY3kgd2l0aCB0aGUgZXh0ZW5kZWQgSUYgYW5kIFdISUxFIHN5bnRheCwgdGhlIEZPUiBhbmQK LSAgIFNXSVRDSCBjb250cm9sIGxpc3RzIG1heSAoYnV0IG5lZWQgbm90IGJlKSBlbmNsb3NlZCBp biBwYXJlbnRoZXNlczoKLQotICBGT1IgKCBcJWkgMSBcJW4gMSApIHsgY29tbWFuZC1saXN0Li4u IH0KLSAgU1dJVENIICggXCVjICkgeyBjb21tYW5kLWxpc3QuLi4gfQotCi0gICBJbiB0aGUgRk9S IGNvbW1hbmQsIHRoZSBpbmNyZW1lbnQgaXRlbSBjYW4gYmUgb21pdHRlZCBpZiB0aGUgY29udHJv bAotICAgbGlzdCBpcyBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcywgaW4gd2hpY2ggY2FzZSB0aGUg aW5jcmVtZW50IGRlZmF1bHRzCi0gICBhcHByb3ByaWF0ZWx5IHRvIDEgb3IgLTEsIGRlcGVuZGlu ZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBmaXJzdCB0d28KLSAgIHZhcmlhYmxlcy4KLQotICAgQXMg d2l0aCBJRiwgdGhlIHBhcmVudGhlc2VzIGFyb3VuZCB0aGUgRk9SLWNvbW1hbmQgY29udHJvbCBs aXN0IG11c3QgYmUKLSAgIHNldCBvZmYgYnkgc3BhY2VzIChpbiB0aGUgU1dJVENIIGNvbW1hbmQs IHRoZSBzcGFjZXMgYXJlIG5vdCByZXF1aXJlZAotICAgc2luY2UgdGhlIFNXSVRDSCBleHByZXNz aW9uIGlzIGEgc2luZ2xlIGFyaXRobWV0aWMgZXhwcmVzc2lvbikuCi0KLSAgIEFsc28sIG91dGVy IGJyYWNlcyBhcm91bmQgdGhlIGNvbW1hbmQgbGlzdCBhcmUgc3VwcGxpZWQgYXV0b21hdGljYWxs eQotICAgaWYgeW91IG9taXQgdGhlbSwgZS5nLjoKLQotICBGT1IgKCBcJWkgMSAlbiAxICkgZWNo byBcJWkKLQotICA4LiBVU0lORyBPVEhFUiBGSUxFIFRSQU5TRkVSIFBST1RPQ09MUwotCi0gICBJ biBDLUtlcm1pdCA3LjAsIGFsdGVybmF0aXZlIHByb3RvY29scyBjYW4gYmUgc2VsZWN0ZWQgdXNp bmcgc3dpdGNoZXMuCi0gICBTd2l0Y2hlcyBhcmUgZGVzY3JpYmVkIGluIFs2MzldU2VjdGlvbiAx LjU7IHRoZSB1c2Ugb2YKLSAgIHByb3RvY29sLXNlbGVjdGlvbiBzd2l0Y2hlcyBpcyBkZXNjcmli ZWQgaW4gWzY0MF1TZWN0aW9uIDQuNy4xLgotICAgRXhhbXBsZToKLQotICBzZW5kIC9iaW5hcnkg L3Byb3RvY29sOnptb2RlbSB4LnRhci5negotCi0gICBOb3RlIHRoYXQgZmlsZSB0cmFuc2ZlciBy ZWNvdmVyeSB3b3JrcyBvbmx5IHdpdGggS2VybWl0IGFuZCBabW9kZW0KLSAgIHByb3RvY29scy4g V2l0aCBabW9kZW0sIHJlY292ZXJ5IGNhbiBiZSBpbml0aWF0ZWQgb25seSBieSB0aGUgc2VuZGVy LgotCi0gICBPbmx5IHByZS0xOTg4IHZlcnNpb25zIG9mIHRoZSBwdWJsaWNseS1kaXN0cmlidXRl ZCBzei9yeiBwcm9ncmFtcyB1c2UKLSAgIFN0YW5kYXJkIEkvTzsgdGhvc2UgcmVsZWFzZWQgbGF0 ZXIgdGhhbiB0aGF0IGRvIG5vdCB1c2UgU3RhbmRhcmQgSS9PCi0gICBhbmQgdGhlcmVmb3JlIGRv IG5vdCB3b3JrIHdpdGggUkVESVJFQ1QuIEhvd2V2ZXIsIE9tZW4gVGVjaG5vbG9neSBkb2VzCi0g ICBvZmZlciBhbiB1cC10by1kYXRlIHJlZGlyZWN0YWJsZSB2ZXJzaW9uIGNhbGxlZCBjcnpzeiwg d2hpY2ggbXVzdCBiZQotICAgbGljZW5zZWQgZm9yIHVzZToKLQotICAgICAiVW5peCBDcnogYW5k IENzeiBzdXBwb3J0IFhNT0RFTSwgWU1PREVNLCBhbmQgWk1PREVNIHRyYW5zZmVycyB3aGVuCi0g ICAgIGNhbGxlZCBieSBkaWFsLW91dCBwcm9ncmFtcyBzdWNoIGFzIEtlcm1pdCBhbmQgY2VydGFp biB2ZXJzaW9ucyBvZgotICAgICBjdSgxKS4gVGhleSBhcmUgY2xpZW50cyBkZXNpZ25lZCBmb3Ig dGhpcyB1c2UuCi0KLSAgICAgIkNyeiBhbmQgQ3N6IGFyZSBDb3B5cmlnaHRlZCBzaGFyZXdhcmUg cHJvZ3JhbXMuIFVzZSBvZiB0aGVzZQotICAgICBwcm9ncmFtcyBiZXlvbmQgYSBicmllZiBldmFs dWF0aW9uIHBlcmlvZCByZXF1aXJlcyByZWdpc3RyYXRpb24uCi0gICAgIFBsZWFzZSBwcmludCB0 aGUgIm1haWxlci5yeiIgZmlsZSwgZmlsbCBvdXQgdGhlIGZvcm0gYW5kIHJldHVybiBzYW1lCi0g ICAgIHdpdGggeW91ciByZWdpc3RyYXRpb24uIgotCi0gICBUbyB1c2UgdGhlIGNyenN6IHByb2dy YW1zIGFzIHlvdXIgZXh0ZXJuYWwgWFlaTU9ERU0gcHJvZ3JhbXMgaW4KLSAgIEMtS2VybWl0LCBm b2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgYm9vaywgYnV0IHB1dCBhICJjIiBiZWZvcmUK LSAgIGVhY2ggY29tbWFuZCwgZS5nLjoKLQotICBzZXQgcHJvdG9jb2wgem1vZGVtIHtjc3ogJXN9 IHtjc3ogLWEgJXN9IGNyeiBjcnogY3J6IGNyegotCi0gICBUbyB1c2UgWm1vZGVtIHByb3RvY29s IG92ZXIgVGVsbmV0IG9yIG90aGVyIG5vbi10cmFuc3BhcmVudAotICAgY29ubmVjdGlvbnMsIHlv dSBtaWdodCBuZWVkIHRvIGFkZCB0aGUgLWUgKEVzY2FwZSkgb3B0aW9uOgotCi0gIHNldCBwcm90 b2NvbCB6bW9kZW0ge2NzeiAtZSAlc30ge2NzeiAtZSAtYSAlc30gY3J6IGNyeiBjcnogY3J6Ci0K LSAgOS4gQ09NTUFORC1MSU5FIE9QVElPTlMKLQotICA5LjAuIEV4dGVuZGVkLUZvcm1hdCBDb21t YW5kLUxpbmUgT3B0aW9ucwotCi0gICBTdGFuZGFyZCBVTklYIGNvbW1hbmQgbGluZSBvcHRpb25z IGFyZSBhIHNpbmdsZSBsZXR0ZXIuIEMtS2VybWl0IGhhcwotICAgcnVuIG91dCBvZiBsZXR0ZXJz LCBzbyBuZXcgb3B0aW9ucyBhcmUgaW4gYSBuZXcgZXh0ZW5kZWQgZm9ybWF0OgotCi0gLS13b3Jk WzphcmddCi0KLSAgIHdoZXJlIGEga2V5d29yZCAocmF0aGVyIHRoYW4gYSBzaW5nbGUgbGV0dGVy KSBzcGVjaWZpZXMgdGhlIGZ1bmN0aW9uLAotICAgYW5kIGlmIGFuIGFyZ3VtZW50IGlzIHRvIGJl IGluY2x1ZGVkLCBpdCBpcyBzZXBhcmF0ZWQgYnkgYSBjb2xvbiAob3IKLSAgIGVxdWFsIHNpZ24p LiBNb3N0IG9mIHRoZSBuZXcgZXh0ZW5kZWQtZm9ybWF0IGNvbW1hbmQtbGluZSBvcHRpb25zIGFy ZQotICAgb25seSBmb3IgdXNlIHdpdGggdGhlIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlIERhZW1v bjsgc2VlIHRoZSBbNjQxXUlLU0QKLSAgIEFkbWluaXN0cmF0aW9uIEd1aWRlIGZvciBkZXRhaWxz LiBIb3dldmVyLCBzZXZlcmFsIG9mIHRoZW0gYXJlIGFsc28KLSAgIGdlbmVyYWwgaW4gbmF0dXJl OgotCi0gICAtLW5vaW50ZXJydXB0cwotICAgICAgICAgIERpc2FibGVzIGtleWJvYXJkIGludGVy cnVwdHMgdGhhdCBhcmUgbm9ybWFsbHkgZW5hYmxlZCwgd2hpY2gKLSAgICAgICAgICBhcmUgdXN1 YWxseSBDdHJsLUMgKHRvIGludGVycnVwdCBhIGNvbW1hbmQpIGFuZCBDdHJsLVogKFVOSVgKLSAg ICAgICAgICBvbmx5LCB0byBzdXNwZW5kIEMtS2VybWl0KS4KLQotICAgLS1oZWxwCi0gICAgICAg ICAgTGlzdHMgdGhlIGV4dGVuZGVkIGNvbW1hbmQtbGluZSBvcHRpb25zIHRoYXQgYXJlIGF2YWls YWJsZSBpbgotICAgICAgICAgIHlvdXIgdmVyc2lvbiBvZiBDLUtlcm1pdC4gSWYgYW55IG9wdGlv bnMgc2VlbSB0byBiZSBtaXNzaW5nLAotICAgICAgICAgIHRoYXQgaXMgYmVjYXVzZSB5b3VyIGNv cHkgb2YgQy1LZXJtaXQgd2FzIGJ1aWx0IHdpdGgKLSAgICAgICAgICBjb21waWxlLXRpbWUgb3B0 aW9ucyB0byBkZXNlbGVjdCB0aGVtLgotCi0gICAtLWhlbHBmaWxlOmZpbGVuYW1lCi0gICAgICAg ICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgZmlsZSB0byBiZSBkaXNwbGF5ZWQgaWYgdGhlIHVz ZXIgdHlwZXMKLSAgICAgICAgICBIRUxQIChub3QgZm9sbG93ZWQgYnkgYSBzcGVjaWZpYyBjb21t YW5kIG9yIHRvcGljKSwgaW4gcGxhY2Ugb2YKLSAgICAgICAgICB0aGUgYnVpbHQtaW4gdG9wLWxl dmVsIGhlbHAgdGV4dC4gVGhlIGZpbGUgbmVlZCBub3QgZml0IG9uIG9uZQotICAgICAgICAgIHNj cmVlbjsgbW9yZS1wcm9tcHRpbmcgaXMgdXNlZCBpZiB0aGUgZmlsZSBpcyBtb3JlIHRoYW4gb25l Ci0gICAgICAgICAgc2NyZWVuIGxvbmcgaWYgQ09NTUFORCBNT1JFLVBST01QVElORyBpcyBPTiwg YXMgaXQgaXMgYnkKLSAgICAgICAgICBkZWZhdWx0LgotCi0gICAtLWJhbm5lcmZpbGU6ZmlsZW5h bWUKLSAgICAgICAgICBUaGUgbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIG1lc3NhZ2UgdG8g YmUgcHJpbnRlZCBhZnRlciB0aGUKLSAgICAgICAgICB1c2VyIGxvZ3MgaW4sIGluIHBsYWNlIG9m IHRoZSBub3JtYWwgbWVzc2FnZSAoQ29weXJpZ2h0IG5vdGljZSwKLSAgICAgICAgICAiVHlwZSBI RUxQIG9yID8gZm9yIGhlbHAiLCAiRGVmYXVsdCB0cmFuc2ZlciBtb2RlIGlzLi4uIiwgZXRjKS4K LQotICAgLS1jZG1lc3NhZ2U6e29uLG9mZiwwLDEsMn0KLSAgICAgICAgICBGb3IgdXNlIGluIHRo ZSBTZXJ2ZXItU2lkZSBTZXJ2ZXIgY29uZmlndXJhdGlvbjsgd2hlbmV2ZXIgdGhlCi0gICAgICAg ICAgY2xpZW50IHRlbGxzIHRoZSBzZXJ2ZXIgdG8gY2hhbmdlIGRpcmVjdG9yeSwgdGhlIHNlcnZl ciBzZW5kcwotICAgICAgICAgIHRoZSBjb250ZW50cyBvZiBhICJyZWFkIG1lIiBmaWxlIHRvIHRo ZSBjbGllbnQncyBzY3JlZW4uIFRoaXMKLSAgICAgICAgICBmZWF0dXJlIGlzIE9uIGJ5IGRlZmF1 bHQsIGFuZCBvcGVyYXRlcyBvbmx5IGluIGNsaWVudC9zZXJ2ZXIKLSAgICAgICAgICBtb2RlIHdo ZW4gT04gb3IgMS4gSWYgc2V0IHRvIDIgb3IgaGlnaGVyLCBpdCBhbHNvIG9wZXJhdGVzIHdoZW4K LSAgICAgICAgICB0aGUgQ0QgY29tbWFuZCBpcyBnaXZlbiBhdCB0aGUgSUtTRD4gcHJvbXB0LiBT eW5vbnltOiAtLWNkbXNnLgotCi0gICAtLWNkZmlsZTpmaWxlbmFtZQotICAgICAgICAgIFdoZW4g Y2RtZXNzYWdlIGlzIG9uLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSAicmVhZCBtZSIgZmlsZSB0 bwotICAgICAgICAgIGJlIHNlbnQuIE5vcm1hbGx5IHlvdSB3b3VsZCBzcGVjaWZ5IGEgcmVsYXRp dmUgKG5vdCBhYnNvbHV0ZSkKLSAgICAgICAgICBuYW1lLCBzaW5jZSB0aGUgZmlsZSBpcyBvcGVu ZWQgdXNpbmcgdGhlIGxpdGVyYWwgbmFtZSB5b3UKLSAgICAgICAgICBzcGVjaWZpZWQsIGFmdGVy IGNoYW5naW5nIHRvIHRoZSBuZXcgZGlyZWN0b3J5LiBFeGFtcGxlOgotCi0gIC0tY2RmaWxlOlJF QUQuTUUKLQotICAgICAgICAgIFlvdSBjYW4gYWxzbyBnaXZlIGEgbGlzdCBvZiB1cCB0byA4IGZp bGVuYW1lcyBieSAoYSkgZW5jbG9zaW5nCi0gICAgICAgICAgZWFjaCBmaWxlbmFtZSBpbiBicmFj ZXMsIGFuZCAoYikgZW5jbG9zaW5nIHRoZSBlbnRpcmUgbGlzdCBpbgotICAgICAgICAgIGJyYWNl cy4gRXhhbXBsZToKLSAgICAgICAgICAtLWNkZmlsZTp7ey4vLnJlYWRtZX17UkVBRC5NRX17YWFh cmVhZG1lLnR4dH17UkVBRE1FfXtyZWFkLXRoaXMtCi0gICAgICAgICAgZmlyc3R9fSBXaGVuIGEg bGlzdCBpcyBnaXZlbiwgaXQgaXMgc2VhcmNoZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0Ci0gICAgICAg ICAgYW5kIHRoZSBmaXJzdCBmaWxlIGZvdW5kIGlzIGRpc3BsYXllZC4gVGhlIGRlZmF1bHQgbGlz dCBmb3IgVU5JWAotICAgICAgICAgIGlzOgotCi0gIHt7Li8ucmVhZG1lfXtSRUFETUUuVFhUfXtS RUFELk1FfX0KLQotICA5LjEuIENvbW1hbmQgTGluZSBQZXJzb25hbGl0aWVzCi0KLSAgIEJlZ2lu bmluZyBpbiB2ZXJzaW9uIDcuMCwgaWYgdGhlIEMtS2VybWl0IGJpbmFyeSBpcyByZW5hbWVkIHRv ICJ0ZWxuZXQiCi0gICAob3IgVEVMTkVULkVYRSwgdGVsbmV0LnByLCBldGMsIGRlcGVuZGluZyBv biB0aGUgcGxhdGZvcm0pLCBpdCBhY2NlcHRzCi0gICB0aGUgVGVsbmV0IGNvbW1hbmQgbGluZToK LQotICB0ZWxuZXQgWyBob3N0IFsgcG9ydCBdIF0KLQotICAgSW4gVW5peCwgeW91IGNhbiBhY2hp ZXZlIHRoZSBzYW1lIGVmZmVjdCB3aXRoIGEgc3ltbGluazoKLQotICBjZCAvdXNyL2JpbgotICBt diB0ZWxuZXQgb2xkdGVsbmV0Ci0gIGxuIC1scyAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgdGVsbmV0 Ci0KLSAgIFdoZW4gaW5zdGFsbGVkIGluIHRoaXMgbWFubmVyLCBDLUtlcm1pdCBhbHdheXMgcmVh ZHMgaXRzIGluaXRpYWxpemF0aW9uCi0gICBmaWxlLiBJZiBubyBob3N0IChhbmQgdGhlcmVmb3Jl IG5vIHBvcnQpIGlzIGdpdmVuLCBDLUtlcm1pdCBzdGFydHMgaW4KLSAgIGludGVyYWN0aXZlIHBy b21wdGluZyBtb2RlLiBJZiBhIGhvc3QgaXMgZ2l2ZW4gYXMgdGhlIGZpcnN0Ci0gICBjb21tYW5k LWxpbmUgYXJndW1lbnQsIEMtS2VybWl0IG1ha2VzIGEgY29ubmVjdGlvbiB0byBpdC4gVGhlIGhv c3QKLSAgIGFyZ3VtZW50IGNhbiBiZSBhbiBJUCBob3N0IG5hbWUgb3IgYWRkcmVzcywgb3IgdGhl IG5hbWUgb2YgYSBUQ1AvSVAKLSAgIGVudHJ5IGluIHlvdXIgQy1LZXJtaXQgbmV0d29yayBkaXJl Y3RvcnkuCi0KLSAgIElmIGEgcG9ydCBpcyBnaXZlbiwgaXQgaXMgdXNlZC4gSWYgYSBwb3J0IGlz IG5vdCBnaXZlbiwgdGhlbiBpZiB0aGUKLSAgIGhvc3RuYW1lIHdhcyBmb3VuZCBpbiB5b3VyIG5l dHdvcmsgZGlyZWN0b3J5IGFuZCBwb3J0IHdhcyBhbHNvIGxpc3RlZAotICAgdGhlcmUsIHRoZW4g dGhhdCBwb3J0IGlzIHVzZWQuIE90aGVyd2lzZSBwb3J0IDIzICh0aGUgVGVsbmV0IHBvcnQpIGlz Ci0gICB1c2VkLgotCi0gICBXaGVuIEMtS2VybWl0IGlzIGNhbGxlZCAidGVsbmV0IiBhbmQgaXQg aXMgaW52b2tlZCB3aXRoIGEgaG9zdG5hbWUgb24KLSAgIHRoZSBjb21tYW5kIGxpbmUsIGl0IGV4 aXRzIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCi0gICBXaGls ZSB0aGUgY29ubmVjdGlvbiBpcyBvcGVuLCBob3dldmVyLCB5b3UgbWF5IGVzY2FwZSBiYWNrIGFu ZCBmb3J0aCBhcwotICAgbWFueSB0aW1lcyBhcyB5b3UgbGlrZSwgdHJhbnNmZXIgZmlsZXMsIGV0 Yy4KLQotICAgQW4gcmxvZ2luIHBlcnNvbmFsaXR5IGlzIGFsc28gYXZhaWxhYmxlLCBidXQgaXQg aXMgbGVzcyB1c2VmdWwsIGF0Ci0gICBsZWFzdCBpbiBVTklYIGFuZCBWTVMsIHdoZXJlIHRoZSBS bG9naW4gVENQIHBvcnQgaXMgcHJpdmlsZWdlZC4KLQotICAgVGhlIG5ldyB2YXJpYWJsZSBcdihu YW1lKSBpbmRpY2F0ZXMgdGhlIG5hbWUgd2l0aCB3aGljaCBDLUtlcm1pdCB3YXMKLSAgIGludm9r ZWQgKCJrZXJtaXQiLCAid2VybWl0IiwgIms5NSIsICJ0ZWxuZXQiLCBldGMpLgotCi0gIDkuMi4g QnVpbHQtaW4gSGVscCBmb3IgQ29tbWFuZCBMaW5lIE9wdGlvbnMKLQotICAgImtlcm1pdCAtaCIs IGdpdmVuIGZyb20gdGhlIHN5c3RlbSBwcm9tcHQsIGxpc3RzIGFzIG1hbnkgY29tbWFuZC1saW5l Ci0gICBvcHRpb25zIGFzIHdpbGwgZml0IG9uIGEgc3RhbmRhcmQgMjR4ODAgc2NyZWVuLiBGb3Ig bW9yZSBjb21wcmVoZW5zaXZlCi0gICBoZWxwLCB1c2UgdGhlIGludGVyYWN0aXZlIEhFTFAgT1BU SU9OUyBjb21tYW5kIHRoYXQgd2FzIGFkZGVkIGluCi0gICBDLUtlcm1pdCA3LjA6Ci0KLSAgIEhF TFAgT1BUSU9OUwotICAgRXhwbGFpbnMgaG93IGNvbW1hbmQtbGluZSBvcHRpb25zIHdvcmssIHRo ZWlyIHN5bnRheCwgZXRjLgotCi0gICBIRUxQIE9QVElPTlMgQUxMCi0gICBMaXN0cyBhbGwgY29t bWFuZC1saW5lIG9wdGlvbnMgYW5kIGdpdmVzIGJyaWVmIGhlbHAgYWJvdXQgZWFjaCBvbmUuCi0K LSAgIEhFTFAgT1BUSU9OIHgKLSAgIEdpdmVzIGJyaWVmIGhlbHAgYWJvdXQgb3B0aW9uICJ4Ii4K LQotICAgSEVMUCBFWFRFTkRFRC1PUFRJT05TCi0gICBMaXN0cyB0aGUgYXZhaWxhYmxlIGV4dGVu ZGVkLWZvcm1hdCBjb21tYW5kLWxpbmUgb3B0aW9ucy4KLQotICAgSEVMUCBFWFRFTkRFRC1PUFRJ T04geHh4Ci0gICBHaXZlcyBoZWxwIGZvciB0aGUgc3BlY2lmaWVkIGV4dGVuZGVkIG9wdGlvbi4K LQotICA5LjMuIE5ldyBDb21tYW5kLUxpbmUgT3B0aW9ucwotCi0gICBDb21tYW5kLWxpbmUgb3B0 aW9ucyBhZGRlZCBzaW5jZSBDLUtlcm1pdCA2LjAgYXJlOgotCi0gICArCi0gICAgICAgICAgKHBs dXMgc2lnbiBieSBpdHNlbGYpOiBUaGUgbmV4dCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiBhIHNj cmlwdAotICAgICAgICAgIHRvIGV4ZWN1dGU7IGFsbCBzdWJzZXF1ZW50IGFyZ3VtZW50cyBhcmUg aWdub3JlZCBieSBDLUtlcm1pdAotICAgICAgICAgIGl0c2VsZiwgYnV0IHBhc3NlZCB0byB0aGUg c2NyaXB0IGFzIHRvcC1sZXZlbCBjb3BpZXMgb2YgXCUxLAotICAgICAgICAgIFwlMiwgZXRjOyB0 aGUgXCZfW10gaXMgYWxzbyBzZXQgYWNjb3JkaW5nbHkuIFwlMCBhbmQgXCZfWzBdCi0gICAgICAg ICAgYmVjb21lIHRoZSBuYW1lIG9mIHRoZSBzY3JpcHQgZmlsZSwgcmF0aGVyIHRoYW4gdGhlIHBh dGhuYW1lIG9mCi0gICAgICAgICAgdGhlIEMtS2VybWl0IHByb2dyYW0sIHdoaWNoIGlzIGl0cyBu b3JtYWwgdmFsdWUuIFByaW1hcmlseSBmb3IKLSAgICAgICAgICB1c2UgaW4gdGhlIHRvcCBsaW5l IG9mICJLZXJiYW5nIiBzY3JpcHRzIGluIFVOSVggKHNlZQotICAgICAgICAgIFs2NDJdU2VjdGlv biA3LjE5KS4gRXhhbXBsZSBmcm9tIFVOSVggY29tbWFuZCBsaW5lOgotCi0gICQga2VybWl0IFsg cmVndWxhciBrZXJtaXQgYXJncyBdICsgZmlsZW5hbWUKLQotICAgICAgICAgIFNhbXBsZSBmaXJz dCBsaW5lIG9mIEtlcmJhbmcgc2NyaXB0OgotCi0gICMhL3Vzci9sb2NhbC9iaW4va2VybWl0ICsK LQotICAgLS0KLSAgICAgICAgICAodHdvIGh5cGhlbnMgc3Vycm91bmRlZCBieSB3aGl0ZXNwYWNl KSBFcXVpdmFsZW50IHRvICI9IiwgZm9yCi0gICAgICAgICAgY29tcGF0aWJpbGl0eSB3aXRoIFVO SVggZ2V0b3B0KDEsMykuCi0KLSAgIC1HCi0gICAgICAgICAgR0VUIChsaWtlIC1nKSwgYnV0IHNl bmQgdGhlIGluY29taW5nIGZpbGUgdG8gc3RhbmRhcmQgb3V0cHV0LgotICAgICAgICAgIEV4YW1w bGU6ICJrZXJtaXQgLUcgb29mYS50eHQgfCBscHIiIHJldHJpZXZlcyBhIGZpbGUgZnJvbSB5b3Vy Ci0gICAgICAgICAgbG9jYWwgY29tcHV0ZXIgKHByb3ZpZGluZyBpdCBpcyBydW5uaW5nIGEgS2Vy bWl0IHByb2dyYW0gdGhhdAotICAgICAgICAgIHN1cHBvcnRzIHRoZSBhdXRvZG93bmxvYWQgZmVh dHVyZSBhbmQgaGFzIGl0IGVuYWJsZWQpIGFuZCBwcmludHMKLSAgICAgICAgICBpdC4KLQotICAg LU8KLSAgICAgICAgICBlcXVpdmFsZW50IHRvIC14IChzdGFydCB1cCBpbiBzZXJ2ZXIgbW9kZSks IGJ1dCBleGl0cyBhZnRlciB0aGUKLSAgICAgICAgICBmaXJzdCBjbGllbnQgY29tbWFuZCBoYXMg YmVlbiBleGVjdXRlZCAobW5lbW9uaWM6IE8gPSBPbmx5IE9uZSkuCi0gICAgICAgICAgVGhpcyBv bmUgaXMgaGFuZHkgcmVwbGFjaW5nICJrZXJtaXQgLXgiIGluIHRoZSAiYXV0b21hdGljYWxseQot ICAgICAgICAgIHN0YXJ0IEtlcm1pdCBvbiB0aGUgb3RoZXIgZW5kIiBzdHJpbmc6Ci0KLSAgc2V0 IHByb3RvY29sIGtlcm1pdCB7a2VybWl0IC1pcn0ge2tlcm1pdCAtcn0ge2tlcm1pdCAteH0KLQot ICAgICAgICAgIHNpbmNlIC14IGxlYXZlcyB0aGUgcmVtb3RlIEtlcm1pdCBpbiBzZXJ2ZXIgbW9k ZSBhZnRlciB0aGUKLSAgICAgICAgICB0cmFuc2Zlciwgd2hpY2ggY2FuIGJlIGNvbmZ1c2luZywg d2hlcmVhcyAtTyBtYWtlcyBpdCBnbyBhd2F5Ci0gICAgICAgICAgYXV0b21hdGljYWxseSBhZnRl ciB0aGUgdHJhbnNmZXIuCi0KLSAgIC1MCi0gICAgICAgICAgUmVjdXJzaXZlLCB3aGVuIHVzZWQg aW4gY29tYmluYXRpb24gd2l0aCAtcyAobW5lbW9uaWM6IEwgPQotICAgICAgICAgIExldmVscyku IEluIFVOSVggb3Igb3RoZXIgZW52aXJvbm1lbnRzIHdoZXJlIHRoZSBzaGVsbCBleHBhbmRzCi0g ICAgICAgICAgd2lsZGNhcmRzIGl0c2VsZiwgdGhlIC1zIGFyZ3VtZW50LCBpZiBpdCBjb250YWlu cyB3aWxkY2FyZHMsCi0gICAgICAgICAgbXVzdCBiZSBxdW90ZWQgdG8gcHJldmVudCB0aGlzLCBl LmcuOgotCi0gIGtlcm1pdCAtTCAtcyAiKi5jIgotCi0gICAgICAgICAgSW4gVU5JWCBvbmx5LCAi a2VybWl0IC1MIC1zIC4iIG1lYW5zIHRvIHNlbmQgdGhlIGN1cnJlbnQKLSAgICAgICAgICBkaXJl Y3RvcnkgdHJlZS4gU2VlIFs2NDNdU2VjdGlvbnMgNC4xMCBhbmQgWzY0NF00LjExIGFib3V0Ci0g ICAgICAgICAgcmVjdXJzaXZlIGZpbGUgdHJhbnNmZXIuCi0KLSAgIC1WCi0gICAgICAgICAgRXF1 aXZhbGVudCB0byBTRVQgRklMRSBQQVRURVJOUyBPRkYgKFs2NDVdU2VjdGlvbiA0LjMpIGFuZCBT RVQKLSAgICAgICAgICBUUkFOU0ZFUiBNT0RFIE1BTlVBTC4gSW4gb3RoZXIgd29yZHMsIHRha2Ug dGhlIEZJTEUgVFlQRSBzZXR0aW5nCi0gICAgICAgICAgbGl0ZXJhbGx5LiBGb3IgZXhhbXBsZSwg Imtlcm1pdCAtVlQgb29mYS5iaW4iIG1lYW5zIHNlbmQgdGhlCi0gICAgICAgICAgZmlsZSBpbiBU ZXh0IG1vZGUsIG5vIG1hdHRlciB3aGF0IGl0cyBuYW1lIGlzIGFuZCBubyBtYXR0ZXIKLSAgICAg ICAgICB3aGV0aGVyIGEga2luZHJlZCBzcGlyaXQgaXMgcmVjb2duaXplZCBhdCB0aGUgb3RoZXIg ZW5kIG9mIHRoZQotICAgICAgICAgIGNvbm5lY3Rpb24uCi0KLSAgIC0wCi0gICAgICAgICAgKGRp Z2l0IHplcm8pIG1lYW5zICJiZSAxMDAlIHRyYW5zcGFyZW50IGluIENPTk5FQ1QgbW9kZSIuIFRo aXMKLSAgICAgICAgICBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgc2VyaWVzIG9mIGNv bW1hbmRzOiBTRVQgUEFSSVRZCi0gICAgICAgICAgTk9ORSwgU0VUIENPTU1BTkQgQllURVNJWkUg OCwgU0VUIFRFUk1JTkFMIEJZVEVTSVpFIDgsIFNFVCBGTE9XCi0gICAgICAgICAgTk9ORSwgU0VU IFRFUk0gRVNDQVBFIERJU0FCTEVELCBTRVQgVEVSTSBDSEFSIFRSQU5TUEFSRU5ULCBTRVQKLSAg ICAgICAgICBURVJNIEFVVE9ET1dOTE9BRCBPRkYsIFNFVCBURVJNIEFQQyBPRkYsIFNFVCBURUxP UFQgS0VSTUlUCi0gICAgICAgICAgUkVGVVNFIFJFRlVTRS4KLQotICAxMC4gQy1LRVJNSVQgQU5E IEctS0VSTUlUCi0KLSAgIEV2ZXJ5IG11bHRpZnVuY3Rpb25lZCBhbmQgbG9uZy1saXZlZCBzb2Z0 d2FyZSBwcm9ncmFtIGdyb3dzIGluCi0gICBjb21wbGV4aXR5IGFuZCBzaXplIG92ZXIgdGltZSB0 byBtZWV0IHRoZSBuZWVkcyBhbmQgcmVxdWVzdHMgb2YgaXRzCi0gICB1c2VycyBhbmQgdGhlIGRl bWFuZHMgb2YgdGhlIHVuZGVybHlpbmcgdGVjaG5vbG9neSBhcyBpdCBjaGFuZ2VzLgotCi0gICBF dmVudHVhbGx5IHVzZXJzIGJlZ2luIHRvIG5vdGljZSBob3cgYmlnIHRoZSBhcHBsaWNhdGlvbiBo YXMgZ3Jvd24sIGhvdwotICAgbXVjaCBkaXNrIHNwYWNlIGl0IG9jY3VwaWVzLCBob3cgbG9uZyBp dCB0YWtlcyB0byBsb2FkLCBhbmQgdGhleSBzdGFydAotICAgdG8gbG9uZyBmb3IgdGhlIGdvb2Qg b2xkIGRheXMgd2hlbiBpdCB3YXMgbGVhbiBhbmQgbWVhbi4gTm90IGxvbmcgYWZ0ZXIKLSAgIHRo YXQgdGhleSBiZWdpbiBhc2tpbmcgZm9yIGEgImxpZ2h0IiB2ZXJzaW9uIHRoYXQgb25seSBkb2Vz IHRoZSBiYXNpY3MKLSAgIHdpdGggbm8gZnJpbGxzLgotCi0gICBBbmQgc28gaXQgaXMgd2l0aCBD LUtlcm1pdC4gQSAibGlnaHQiIHZlcnNpb24gb2YgS2VybWl0IHdhcyByZWxlYXNlZAotICAgKGZv ciBVTklYIG9ubHkpIGluIERlY2VtYmVyIDE5OTkgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlOwotICAgdGh1cyBpdCBpcyBjYWxsZWQgRy1LZXJtaXQgKGZvciBHTlUgS2VybWl0 KS4gQWxsIGl0IGRvZXMgaXMgc2VuZCBhbmQKLSAgIHJlY2VpdmUgZmlsZXMsIHBlcmlvZC4gWW91 IGNhbiBmaW5kIGl0IGF0OgotCi0gIFs2NDZdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2drZXJtaXQuaHRtbAotCi0gICBXaGVyZSB0aGUgQy1LZXJtaXQgNy4wIGJpbmFyeSBtaWdodCBi ZSBhbnl3aGVyZSBmcm9tIDEgdG8gMyBtaWxsaW9uCi0gICBieXRlcyBpbiBzaXplLCB0aGUgRy1L ZXJtaXQgYmluYXJ5IHJhbmdlcyBmcm9tIDMwSyB0byAxMDBLLCBkZXBlbmRpbmcKLSAgIG9uIHRo ZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSAoUklTQyB2cyBDSVNDLCBldGMpLgotCi0gICBHLUtl cm1pdCBhbmQgQy1LZXJtaXQgbWF5IHJlc2lkZSBzaWRlLWJ5LXNpZGUgb24gdGhlIHNhbWUgY29t cHV0ZXIuCi0gICBHLUtlcm1pdCBkb2VzIG5vdCBtYWtlIGNvbm5lY3Rpb25zOyBpdCBkb2VzIG5v dCBoYXZlIGEgc2NyaXB0IGxhbmd1YWdlOwotICAgaXQgZG9lcyBub3QgdHJhbnNsYXRlIGNoYXJh Y3RlciBzZXRzLiBHLUtlcm1pdCBtYXkgYmUgdXNlZCBpbnN0ZWFkIG9mCi0gICBDLUtlcm1pdCB3 aGVuOgotCi0gICAgICogSXQgaXMgb24gdGhlIHJlbW90ZSBlbmQuCi0gICAgICogRmlsZXMgYXJl IHRvIGJlIHRyYW5zZmVycmVkIGluIGJpbmFyeSBtb2RlIG9yIGluIHRleHQgbW9kZSB3aXRob3V0 Ci0gICAgICAgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbi4KLSAgICAgKiBGaWxlIHRpbWVzdGFt cHMgZG9uJ3QgbmVlZCB0byBiZSBwcmVzZXJ2ZWQuCi0KLSAgIEluIHN1Y2ggY2FzZXMgRy1LZXJt aXQgbWlnaHQgYmUgcHJlZmVycmVkIHNpbmNlIGl0IGdlbmVyYWxseSBzdGFydHMgdXAKLSAgIGZh c3RlciwgYW5kIHlldCB0cmFuc2ZlcnMgZmlsZXMganVzdCBhcyBmYXN0IG9uIG1vc3QgKGJ1dCBu b3QKLSAgIG5lY2Vzc2FyaWx5IGFsbCkga2luZHMgb2YgY29ubmVjdGlvbnM7IGZvciBleGFtcGxl LCBpdCBzdXBwb3J0cwotICAgc3RyZWFtaW5nIChbNjQ3XVNlY3Rpb24gNC4yMCkuCi0KLSAgIEct S2VybWl0IGlzIGFsc28gaGFuZHkgZm9yIGJvb3RzdHJhcHBpbmcuIEl0IGlzIGVhc2llciB0byBs b2FkIG9uIGEgbmV3Ci0gICBjb21wdXRlciB0aGFuIEMtS2VybWl0IC0tIGl0IGZpdHMgb24gYSBm bG9wcHkgZGlza2V0dGUgd2l0aCBwbGVudHkgb2YKLSAgIHJvb20gdG8gc3BhcmUuIFRodXMgaWYg eW91IGhhdmUgKHNheSkgYW4gb2xkIFBDIHJ1bm5pbmcgKHNheSkgU0NPIFhlbml4Ci0gICBhbmQg bm8gbmV0d29yayBjb25uZWN0aW9uLCB5b3UgY2FuIGRvd25sb2FkIHRoZSBYZW5peCB2ZXJzaW9u IG9mCi0gICBHLUtlcm1pdCB0byAoc2F5KSBhIERPUyBvciBXaW5kb3dzIFBDLCBjb3B5IGl0IHRv IGRpc2tldHRlLCByZWFkIHRoZQotICAgZGlza2V0dGUgb24gWGVuaXggd2l0aCAiZG9zcmVhZCIs IGFuZCB0aGVuIHVzZSBHLUtlcm1pdCB0byByZWNlaXZlCi0gICBDLUtlcm1pdCAod2hpY2ggZG9l cyBub3QgZml0IG9uIGEgZGlza2V0dGUpLiBJZiBkaXNrZXR0ZXMgYXJlbid0IGFuCi0gICBvcHRp b24sIG90aGVyIGJvb3RzdHJhcHBpbmcgbWV0aG9kcyBhcmUgcG9zc2libGUgdG9vIC0tIHNlZSB0 aGUKLSAgIFs2NDhdRy1LZXJtaXQgd2ViIHBhZ2UgZm9yIGRldGFpbHMuCi0KLUlJSS4gQVBQRU5E SUNFUwotCi0gIElJSS4xLiBDaGFyYWN0ZXIgU2V0IFRhYmxlcwotCi0gICAgSUlJLjEuMS4gVGhl IEhld2xldHQgUGFja2FyZCBSb21hbjggQ2hhcmFjdGVyIFNldAotCi1kZWMgY29sL3JvdyBvY3Qg aGV4ICBkZXNjcmlwdGlvbgotMTYwICAxMC8wMCAgMjQwICBBMCAgKFVuZGVmaW5lZCkKLTE2MSAg MTAvMDEgIDI0MSAgQTEgIEEgZ3JhdmUKLTE2MiAgMTAvMDIgIDI0MiAgQTIgIEEgY2lyY3VtZmxl eAotMTYzICAxMC8wMyAgMjQzICBBMyAgRSBncmF2ZQotMTY0ICAxMC8wNCAgMjQ0ICBBNCAgRSBj aXJjdW1mbGV4Ci0xNjUgIDEwLzA1ICAyNDUgIEE1ICBFIGRpYWVyZXNpcwotMTY2ICAxMC8wNiAg MjQ2ICBBNiAgSSBjaXJjdW1mbGV4Ci0xNjcgIDEwLzA3ICAyNDcgIEE3ICBJIGRpYWVyZXNpcwot MTY4ICAxMC8wOCAgMjUwICBBOCAgQWN1dGUgYWNjZW50Ci0xNjkgIDEwLzA5ICAyNTEgIEE5ICBH cmF2ZSBhY2NlbnQKLTE3MCAgMTAvMTAgIDI1MiAgQUEgIENpcmN1bWZsZXggYWNjZW50Ci0xNzEg IDEwLzExICAyNTMgIEFCICBEaWFlcmVzaXMKLTE3MiAgMTAvMTIgIDI1NCAgQUMgIFRpbGRlIGFj Y2VudAotMTczICAxMC8xMyAgMjU1ICBBRCAgVSBncmF2ZQotMTc0ICAxMC8xNCAgMjU2ICBBRSAg VSBjaXJjdW1mbGV4Ci0xNzUgIDEwLzE1ICAyNTcgIEFGICBMaXJhIHN5bWJvbAotMTc2ICAxMS8w MCAgMjYwICBCMCAgVG9wIGJhciAobWFjcm9uKQotMTc3ICAxMS8wMSAgMjYxICBCMSAgWSBhY3V0 ZQotMTc4ICAxMS8wMiAgMjYyICBCMiAgeSBhY3V0ZQotMTc5ICAxMS8wMyAgMjYzICBCMyAgRGVn cmVlIFNpZ24KLTE4MCAgMTEvMDQgIDI2NCAgQjQgIEMgY2VkaWxsYQotMTgxICAxMS8wNSAgMjY1 ICBCNSAgYyBjZWRpbGxhCi0xODIgIDExLzA2ICAyNjYgIEI2ICBOIHRpbGRlCi0xODMgIDExLzA3 ICAyNjcgIEI3ICBuIHRpbGRlCi0xODQgIDExLzA4ICAyNzAgIEI4ICBJbnZlcnRlZCBleGNsYW1h dGlvbiBtYXJrCi0xODUgIDExLzA5ICAyNzEgIEI5ICBJbnZlcnRlZCBxdWVzdGlvbiBtYXJrCi0x ODYgIDExLzEwICAyNzIgIEJBICBDdXJyZW5jeSBzeW1ib2wKLTE4NyAgMTEvMTEgIDI3MyAgQkIg IFBvdW5kIHN0ZXJsaW5nIHN5bWJvbAotMTg4ICAxMS8xMiAgMjc0ICBCQyAgWWVuIHN5bWJvbAot MTg5ICAxMS8xMyAgMjc1ICBCRCAgUGFyYWdyYXBoCi0xOTAgIDExLzE0ICAyNzYgIEJFICBGbG9y aW4gKEd1aWxkZXIpIHN5bWJvbAotMTkxICAxMS8xNSAgMjc3ICBCRiAgQ2VudCBzeW1ib2wKLTE5 MiAgMTIvMDAgIDMwMCAgQzAgIGEgY2lyY3VtZmxleAotMTkzICAxMi8wMSAgMzAxICBDMSAgZSBj aXJjdW1mbGV4Ci0xOTQgIDEyLzAyICAzMDIgIEMyICBvIGNpcmN1bWZsZXgKLTE5NSAgMTIvMDMg IDMwMyAgQzMgIHUgY2lyY3VtZmxleAotMTk2ICAxMi8wNCAgMzA0ICBDNCAgYSBhY3V0ZQotMTk3 ICAxMi8wNSAgMzA1ICBDNSAgZSBhY3V0ZQotMTk4ICAxMi8wNiAgMzA2ICBDNiAgbyBhY3V0ZQot MTk5ICAxMi8wNyAgMzA3ICBDNyAgdSBhY3V0ZQotMjAwICAxMi8wOCAgMzEwICBDOCAgYSBncmF2 ZQotMjAxICAxMi8wOSAgMzExICBDOSAgZSBncmF2ZQotMjAyICAxMi8xMCAgMzEyICBDQSAgbyBn cmF2ZQotMjAzICAxMi8xMSAgMzEzICBDQiAgdSBncmF2ZQotMjA0ICAxMi8xMiAgMzE0ICBDQyAg YSBkaWFlcmVzaXMKLTIwNSAgMTIvMTMgIDMxNSAgQ0QgIGUgZGlhZXJlc2lzCi0yMDYgIDEyLzE0 ICAzMTYgIENFICBvIGRpYWVyZXNpcwotMjA3ICAxMi8xNSAgMzE3ICBDRiAgdSBkaWFlcmVzaXMK LTIwOCAgMTMvMDAgIDMyMCAgRDAgIEEgcmluZwotMjA5ICAxMy8wMSAgMzIxICBEMSAgaSBjaXJj dW1mbGV4Ci0yMTAgIDEzLzAyICAzMjIgIEQyICBPIHdpdGggc3Ryb2tlCi0yMTEgIDEzLzAzICAz MjMgIEQzICBBRSBkaWdyYXBoCi0yMTIgIDEzLzA0ICAzMjQgIEQ0ICBhIHJpbmcKLTIxMyAgMTMv MDUgIDMyNSAgRDUgIGkgYWN1dGUKLTIxNCAgMTMvMDYgIDMyNiAgRDYgIG8gd2l0aCBzdHJva2UK LTIxNSAgMTMvMDcgIDMyNyAgRDcgIGFlIGRpZ3JhcGgKLTIxNiAgMTMvMDggIDMzMCAgRDggIEEg ZGlhZXJlc2lzCi0yMTcgIDEzLzA5ICAzMzEgIEQ5ICBpIGdyYXZlCi0yMTggIDEzLzEwICAzMzIg IERBICBPIGRpYWVyZXNpcwotMjE5ICAxMy8xMSAgMzMzICBEQiAgVSBkaWFlcmVzaXMKLTIyMCAg MTMvMTIgIDMzNCAgREMgIEUgYWN1dGUKLTIyMSAgMTMvMTMgIDMzNSAgREQgIGkgZGlhZXJlc2lz Ci0yMjIgIDEzLzE0ICAzMzYgIERFICBHZXJtYW4gc2hhcnAgcwotMjIzICAxMy8xNSAgMzM3ICBE RiAgTyBjaXJjdW1mbGV4Ci0yMjQgIDE0LzAwICAzNDAgIEUwICBBIGFjdXRlCi0yMjUgIDE0LzAx ICAzNDEgIEUxICBBIHRpbGRlCi0yMjYgIDE0LzAyICAzNDIgIEUyICBhIHRpbGRlCi0yMjcgIDE0 LzAzICAzNDMgIEUzICBJY2VsYW5kaWMgRXRoCi0yMjggIDE0LzA0ICAzNDQgIEU0ICBJY2VsYW5k aWMgZXRoCi0yMjkgIDE0LzA1ICAzNDUgIEU1ICBJIGFjdXRlCi0yMzAgIDE0LzA2ICAzNDYgIEU2 ICBJIGdyYXZlCi0yMzEgIDE0LzA3ICAzNDcgIEU3ICBPIGFjdXRlCi0yMzIgIDE0LzA4ICAzNTAg IEU4ICBPIGdyYXZlCi0yMzMgIDE0LzA5ICAzNTEgIEU5ICBPIHRpbGRlCi0yMzQgIDE0LzEwICAz NTIgIEVBICBvIHRpbGRlCi0yMzUgIDE0LzExICAzNTMgIEVCICBTIGNhcm9uCi0yMzYgIDE0LzEy ICAzNTQgIEVDICBzIGNhcm9uCi0yMzcgIDE0LzEzICAzNTUgIEVEICBVIGFjdXRlCi0yMzggIDE0 LzE0ICAzNTYgIEVFICBZIGRpYWVyZXNpcwotMjM5ICAxNC8xNSAgMzU3ICBFRiAgeSBkaWFlcmVz aXMKLTI0MCAgMTUvMDAgIDM2MCAgRjAgIEljZWxhbmRpYyBUaG9ybgotMjQxICAxNS8wMSAgMzYx ICBGMSAgSWNlbGFuZGljIHRob3JuCi0yNDIgIDE1LzAyICAzNjIgIEYyICBNaWRkbGUgZG90Ci0y NDMgIDE1LzAzICAzNjMgIEYzICBHcmVlayBtdQotMjQ0ICAxNS8wNCAgMzY0ICBGNCAgUGlsY3Jv dyBzaWduCi0yNDUgIDE1LzA1ICAzNjUgIEY1ICBGcmFjdGlvbiAzLzQKLTI0NiAgMTUvMDYgIDM2 NiAgRjYgIExvbmcgZGFzaCwgaG9yaXpvbnRhbCBiYXIKLTI0NyAgMTUvMDcgIDM2NyAgRjcgIEZy YWN0aW9uIDEvNAotMjQ4ICAxNS8wOCAgMzcwICBGOCAgRnJhY3Rpb24gMS8yCi0yNDkgIDE1LzA5 ICAzNzEgIEY5ICBGZW1pbmluZSBvcmRpbmFsCi0yNTAgIDE1LzEwICAzNzIgIEZBICBNYXNjdWxp bmUgb3JkaW5hbAotMjUxICAxNS8xMSAgMzczICBGQiAgTGVmdCBndWlsbGVtb3QKLTI1MiAgMTUv MTIgIDM3NCAgRkMgIFNvbGlkIGJveAotMjUzICAxNS8xMyAgMzc1ICBGRCAgUmlnaHQgZ3VpbGxl bW90Ci0yNTQgIDE1LzE0ICAzNzYgIEZFICBQbHVzIG9yIG1pbnVzIHNpZ24KLTI1NSAgMTUvMTUg IDM3NyAgRkYgIChVbmRlZmluZWQpCi0KLSAgICBJSUkuMS4yLiBHcmVlayBDaGFyYWN0ZXIgU2V0 cwotCi0gICAgSUlJLjEuMi4xLiBUaGUgSVNPIDg4NTktNyBMYXRpbiAvIEdyZWVrIEFscGhhYmV0 ID0gRUxPVCA5MjgKLQotZGVjIGNvbC9yb3cgb2N0IGhleCAgZGVzY3JpcHRpb24KLTE2MCAgMTAv MDAgIDI0MCAgQTAgIE5vLWJyZWFrIHNwYWNlCi0xNjEgIDEwLzAxICAyNDEgIEExICBMZWZ0IHNp bmdsZSBxdW90YXRpb24gbWFyawotMTYyICAxMC8wMiAgMjQyICBBMiAgcmlnaHQgc2luZ2xlIHF1 b3RhdGlvbiBtYXJrCi0xNjMgIDEwLzAzICAyNDMgIEEzICBQb3VuZCBzaWduCi0xNjQgIDEwLzA0 ICAyNDQgIEE0ICAoVU5VU0VEKQotMTY1ICAxMC8wNSAgMjQ1ICBBNSAgKFVOVVNFRCkKLTE2NiAg MTAvMDYgIDI0NiAgQTYgIEJyb2tlbiBiYXIKLTE2NyAgMTAvMDcgIDI0NyAgQTcgIFBhcmFncmFw aCBzaWduCi0xNjggIDEwLzA4ICAyNTAgIEE4ICBEaWFlcmVzaXMgKERpYWx5dGlrYSkKLTE2OSAg MTAvMDkgIDI1MSAgQTkgIENvcHlyaWdodCBzaWduCi0xNzAgIDEwLzEwICAyNTIgIEFBICAoVU5V U0VEKQotMTcxICAxMC8xMSAgMjUzICBBQiAgTGVmdCBhbmdsZSBxdW90YXRpb24KLTE3MiAgMTAv MTIgIDI1NCAgQUMgIE5vdCBzaWduCi0xNzMgIDEwLzEzICAyNTUgIEFEICBTb2Z0IGh5cGhlbgot MTc0ICAxMC8xNCAgMjU2ICBBRSAgKFVOVVNFRCkKLTE3NSAgMTAvMTUgIDI1NyAgQUYgIEhvcml6 b250YWwgYmFyIChQYXJlbnRoZXRpa2kgcGF2bGEpCi0xNzYgIDExLzAwICAyNjAgIEIwICBEZWdy ZWUgc2lnbgotMTc3ICAxMS8wMSAgMjYxICBCMSAgUGx1cy1taW51cyBzaWduCi0xNzggIDExLzAy ICAyNjIgIEIyICBTdXBlcnNjcmlwdCB0d28KLTE3OSAgMTEvMDMgIDI2MyAgQjMgIFN1cGVyc2Ny aXB0IHRocmVlCi0xODAgIDExLzA0ICAyNjQgIEI0ICBBY2NlbnQgKHRvbm9zKQotMTgxICAxMS8w NSAgMjY1ICBCNSAgRGlhZXJlc2lzIGFuZCBhY2NlbnQgKERpYWx5dGlrYSBhbmQgVG9ub3MpCi0x ODIgIDExLzA2ICAyNjYgIEI2ICBBbHBoYSB3aXRoIGFjY2VudAotMTgzICAxMS8wNyAgMjY3ICBC NyAgTWlkZGxlIGRvdCAoQW5vIFRlbGVpYSkKLTE4NCAgMTEvMDggIDI3MCAgQjggIEVwc2lsb24g d2l0aCBhY2NlbnQKLTE4NSAgMTEvMDkgIDI3MSAgQjkgIEV0YSB3aXRoIGFjY2VudAotMTg2ICAx MS8xMCAgMjcyICBCQSAgSW90YSB3aXRoIGFjY2VudAotMTg3ICAxMS8xMSAgMjczICBCQiAgUmln aHQgYW5nbGUgcXVvdGF0aW9uCi0xODggIDExLzEyICAyNzQgIEJDICBPbWljcm9uIHdpdGggYWNj ZW50Ci0xODkgIDExLzEzICAyNzUgIEJEICBPbmUgaGFsZgotMTkwICAxMS8xNCAgMjc2ICBCRSAg VXBzaWxvbiB3aXRoIGFjY2VudAotMTkxICAxMS8xNSAgMjc3ICBCRiAgT21lZ2Egd2l0aCBhY2Nl bnQKLTE5MiAgMTIvMDAgIDMwMCAgQzAgIGlvdGEgd2l0aCBkaWFlcmVzaXMgYW5kIGFjY2VudAot MTkzICAxMi8wMSAgMzAxICBDMSAgQWxwaGEKLTE5NCAgMTIvMDIgIDMwMiAgQzIgIEJldGEKLTE5 NSAgMTIvMDMgIDMwMyAgQzMgIEdhbW1hCi0xOTYgIDEyLzA0ICAzMDQgIEM0ICBEZWx0YQotMTk3 ICAxMi8wNSAgMzA1ICBDNSAgRXBzaWxvbgotMTk4ICAxMi8wNiAgMzA2ICBDNiAgWmV0YQotMTk5 ICAxMi8wNyAgMzA3ICBDNyAgRXRhCi0yMDAgIDEyLzA4ICAzMTAgIEM4ICBUaGV0YQotMjAxICAx Mi8wOSAgMzExICBDOSAgSW90YQotMjAyICAxMi8xMCAgMzEyICBDQSAgS2FwcGEKLTIwMyAgMTIv MTEgIDMxMyAgQ0IgIExhbWRhCi0yMDQgIDEyLzEyICAzMTQgIENDICBNdQotMjA1ICAxMi8xMyAg MzE1ICBDRCAgTnUKLTIwNiAgMTIvMTQgIDMxNiAgQ0UgIEtzaQotMjA3ICAxMi8xNSAgMzE3ICBD RiAgT21pY3JvbgotMjA4ICAxMy8wMCAgMzIwICBEMCAgUGkKLTIwOSAgMTMvMDEgIDMyMSAgRDEg IFJobwotMjEwICAxMy8wMiAgMzIyICBEMiAgKFVOVVNFRCkKLTIxMSAgMTMvMDMgIDMyMyAgRDMg IFNpZ21hCi0yMTIgIDEzLzA0ICAzMjQgIEQ0ICBUYXUKLTIxMyAgMTMvMDUgIDMyNSAgRDUgIFVw c2lsb24KLTIxNCAgMTMvMDYgIDMyNiAgRDYgIFBoaQotMjE1ICAxMy8wNyAgMzI3ICBENyAgS2hp Ci0yMTYgIDEzLzA4ICAzMzAgIEQ4ICBQc2kKLTIxNyAgMTMvMDkgIDMzMSAgRDkgIE9tZWdhCi0y MTggIDEzLzEwICAzMzIgIERBICBJb3RhIHdpdGggZGlhZXJlc2lzCi0yMTkgIDEzLzExICAzMzMg IERCICBVcHNpbG9uIHdpdGggZGlhZXJlc2lzCi0yMjAgIDEzLzEyICAzMzQgIERDICBhbHBoYSB3 aXRoIGFjY2VudAotMjIxICAxMy8xMyAgMzM1ICBERCAgZXBzaWxvbiB3aXRoIGFjY2VudAotMjIy ICAxMy8xNCAgMzM2ICBERSAgZXRhIHdpdGggYWNjZW50Ci0yMjMgIDEzLzE1ICAzMzcgIERGICBp b3RhIHdpdGggYWNjZW50Ci0yMjQgIDE0LzAwICAzNDAgIEUwICB1cHNpbG9uIHdpdGggZGlhZXJl c2lzIGFuZCBhY2NlbnQKLTIyNSAgMTQvMDEgIDM0MSAgRTEgIGFscGhhCi0yMjYgIDE0LzAyICAz NDIgIEUyICBiZXRhCi0yMjcgIDE0LzAzICAzNDMgIEUzICBnYW1tYQotMjI4ICAxNC8wNCAgMzQ0 ICBFNCAgZGVsdGEKLTIyOSAgMTQvMDUgIDM0NSAgRTUgIGVwc2lsb24KLTIzMCAgMTQvMDYgIDM0 NiAgRTYgIHpldGEKLTIzMSAgMTQvMDcgIDM0NyAgRTcgIGV0YQotMjMyICAxNC8wOCAgMzUwICBF OCAgdGhldGEKLTIzMyAgMTQvMDkgIDM1MSAgRTkgIGlvdGEKLTIzNCAgMTQvMTAgIDM1MiAgRUEg IGthcHBhCi0yMzUgIDE0LzExICAzNTMgIEVCICBsYW1kYQotMjM2ICAxNC8xMiAgMzU0ICBFQyAg bXUKLTIzNyAgMTQvMTMgIDM1NSAgRUQgIG51Ci0yMzggIDE0LzE0ICAzNTYgIEVFICBrc2kKLTIz OSAgMTQvMTUgIDM1NyAgRUYgIG9taWNyb24KLTI0MCAgMTUvMDAgIDM2MCAgRjAgIHBpCi0yNDEg IDE1LzAxICAzNjEgIEYxICByaG8KLTI0MiAgMTUvMDIgIDM2MiAgRjIgIHRlcm1pbmFsIHNpZ21h Ci0yNDMgIDE1LzAzICAzNjMgIEYzICBzaWdtYQotMjQ0ICAxNS8wNCAgMzY0ICBGNCAgdGF1Ci0y NDUgIDE1LzA1ICAzNjUgIEY1ICB1cHNpbG9uCi0yNDYgIDE1LzA2ICAzNjYgIEY2ICBwaGkKLTI0 NyAgMTUvMDcgIDM2NyAgRjcgIGtoaQotMjQ4ICAxNS8wOCAgMzcwICBGOCAgcHNpCi0yNDkgIDE1 LzA5ICAzNzEgIEY5ICBvbWVnYQotMjUwICAxNS8xMCAgMzcyICBGQSAgaW90YSB3aXRoIGRpYWVy ZXNpcwotMjUxICAxNS8xMSAgMzczICBGQiAgdXBzaWxvbiB3aXRoIGRpYWVyZXNpcwotMjUyICAx NS8xMiAgMzc0ICBGQyAgb21pY3JvbiB3aXRoIGRpYWVyZXNpcwotMjUzICAxNS8xMyAgMzc1ICBG RCAgdXBzaWxvbiB3aXRoIGFjY2VudAotMjU0ICAxNS8xNCAgMzc2ICBGRSAgb21lZ2Egd2l0aCBh Y2NlbnQKLTI1NSAgMTUvMTUgIDM3NyAgRkYgIChVTlVTRUQpCi0KLSAgICBJSUkuMS4yLjIuIFRo ZSBFTE9UIDkyNyBDaGFyYWN0ZXIgU2V0Ci0KLWRlYyBjb2wvcm93IG9jdCBoZXggIGRlc2NyaXB0 aW9uCi0gMzIgIDAyLzAwICAgNDAgIDIwICBTUEFDRQotIDMzICAwMi8wMSAgIDQxICAyMSAgRVhD TEFNQVRJT04gTUFSSwotIDM0ICAwMi8wMiAgIDQyICAyMiAgUVVPVEFUSU9OIE1BUksKLSAzNSAg MDIvMDMgICA0MyAgMjMgIE5VTUJFUiBTSUdOCi0gMzYgIDAyLzA0ICAgNDQgIDI0ICBET0xMQVIg U0lHTgotIDM3ICAwMi8wNSAgIDQ1ICAyNSAgUEVSQ0VOVCBTSUdOCi0gMzggIDAyLzA2ICAgNDYg IDI2ICBBTVBFUlNBTkQKLSAzOSAgMDIvMDcgICA0NyAgMjcgIEFQT1NUUk9QSEUKLSA0MCAgMDIv MDggICA1MCAgMjggIExFRlQgUEFSRU5USEVTSVMKLSA0MSAgMDIvMDkgICA1MSAgMjkgIFJJR0hU IFBBUkVOVEhFU0lTCi0gNDIgIDAyLzEwICAgNTIgIDJBICBBU1RFUklTSwotIDQzICAwMi8xMSAg IDUzICAyQiAgUExVUyBTSUdOCi0gNDQgIDAyLzEyICAgNTQgIDJDICBDT01NQQotIDQ1ICAwMi8x MyAgIDU1ICAyRCAgSFlQSEVOLCBNSU5VUyBTSUdOCi0gNDYgIDAyLzE0ICAgNTYgIDJFICBQRVJJ T0QsIEZVTEwgU1RPUAotIDQ3ICAwMi8xNSAgIDU3ICAyRiAgU09MSURVUywgU0xBU0gKLSA0OCAg MDMvMDAgICA2MCAgMzAgIERJR0lUIFpFUk8KLSA0OSAgMDMvMDEgICA2MSAgMzEgIERJR0lUIE9O RQotIDUwICAwMy8wMiAgIDYyICAzMiAgRElHSVQgVFdPCi0gNTEgIDAzLzAzICAgNjMgIDMzICBE SUdJVCBUSFJFRQotIDUyICAwMy8wNCAgIDY0ICAzNCAgRElHSVQgRk9VUgotIDUzICAwMy8wNSAg IDY1ICAzNSAgRElHSVQgRklWRQotIDU0ICAwMy8wNiAgIDY2ICAzNiAgRElHSVQgU0lYCi0gNTUg IDAzLzA3ICAgNjcgIDM3ICBESUdJVCBTRVZFTgotIDU2ICAwMy8wOCAgIDcwICAzOCAgRElHSVQg RUlHSFQKLSA1NyAgMDMvMDkgICA3MSAgMzkgIERJR0lUIE5JTkUKLSA1OCAgMDMvMTAgICA3MiAg M0EgIENPTE9OCi0gNTkgIDAzLzExICAgNzMgIDNCICBTRU1JQ09MT04KLSA2MCAgMDMvMTIgICA3 NCAgM0MgIExFU1MtVEhBTiBTSUdOLCBMRUZUIEFOR0xFIEJSQUNLRVQKLSA2MSAgMDMvMTMgICA3 NSAgM0QgIEVRVUFMUyBTSUdOCi0gNjIgIDAzLzE0ICAgNzYgIDNFICBHUkVBVEVSLVRIQU4gU0lH TiwgUklHSFQgQU5HTEUgQlJBQ0tFVAotIDYzICAwMy8xNSAgIDc3ICAzRiAgUVVFU1RJT04gTUFS SwotIDY0ICAwNC8wMCAgMTAwICA0MCAgQ09NTUVSQ0lBTCBBVCBTSUdOCi0gNjUgIDA0LzAxICAx MDEgIDQxICBDQVBJVEFMIExFVFRFUiBBCi0gNjYgIDA0LzAyICAxMDIgIDQyICBDQVBJVEFMIExF VFRFUiBCCi0gNjcgIDA0LzAzICAxMDMgIDQzICBDQVBJVEFMIExFVFRFUiBDCi0gNjggIDA0LzA0 ICAxMDQgIDQ0ICBDQVBJVEFMIExFVFRFUiBECi0gNjkgIDA0LzA1ICAxMDUgIDQ1ICBDQVBJVEFM IExFVFRFUiBFCi0gNzAgIDA0LzA2ICAxMDYgIDQ2ICBDQVBJVEFMIExFVFRFUiBGCi0gNzEgIDA0 LzA3ICAxMDcgIDQ3ICBDQVBJVEFMIExFVFRFUiBHCi0gNzIgIDA0LzA4ICAxMTAgIDQ4ICBDQVBJ VEFMIExFVFRFUiBICi0gNzMgIDA0LzA5ICAxMTEgIDQ5ICBDQVBJVEFMIExFVFRFUiBJCi0gNzQg IDA0LzEwICAxMTIgIDRBICBDQVBJVEFMIExFVFRFUiBKCi0gNzUgIDA0LzExICAxMTMgIDRCICBD QVBJVEFMIExFVFRFUiBLCi0gNzYgIDA0LzEyICAxMTQgIDRDICBDQVBJVEFMIExFVFRFUiBMCi0g NzcgIDA0LzEzICAxMTUgIDREICBDQVBJVEFMIExFVFRFUiBNCi0gNzggIDA0LzE0ICAxMTYgIDRF ICBDQVBJVEFMIExFVFRFUiBOCi0gNzkgIDA0LzE1ICAxMTcgIDRGICBDQVBJVEFMIExFVFRFUiBP Ci0gODAgIDA1LzAwICAxMjAgIDUwICBDQVBJVEFMIExFVFRFUiBQCi0gODEgIDA1LzAxICAxMjEg IDUxICBDQVBJVEFMIExFVFRFUiBRCi0gODIgIDA1LzAyICAxMjIgIDUyICBDQVBJVEFMIExFVFRF UiBSCi0gODMgIDA1LzAzICAxMjMgIDUzICBDQVBJVEFMIExFVFRFUiBTCi0gODQgIDA1LzA0ICAx MjQgIDU0ICBDQVBJVEFMIExFVFRFUiBUCi0gODUgIDA1LzA1ICAxMjUgIDU1ICBDQVBJVEFMIExF VFRFUiBVCi0gODYgIDA1LzA2ICAxMjYgIDU2ICBDQVBJVEFMIExFVFRFUiBWCi0gODcgIDA1LzA3 ICAxMjcgIDU3ICBDQVBJVEFMIExFVFRFUiBXCi0gODggIDA1LzA4ICAxMzAgIDU4ICBDQVBJVEFM IExFVFRFUiBYCi0gODkgIDA1LzA5ICAxMzEgIDU5ICBDQVBJVEFMIExFVFRFUiBZCi0gOTAgIDA1 LzEwICAxMzIgIDVBICBDQVBJVEFMIExFVFRFUiBaCi0gOTEgIDA1LzExICAxMzMgIDVCICBMRUZU IFNRVUFSRSBCUkFDS0VUCi0gOTIgIDA1LzEyICAxMzQgIDVDICBSRVZFUlNFIFNPTElEVVMsIEJB Q0tTTEFTSAotIDkzICAwNS8xMyAgMTM1ICA1RCAgUklHSFQgU1FVQVJFIEJSQUNLRVQKLSA5NCAg MDUvMTQgIDEzNiAgNUUgIENJUkNVTUZMRVggQUNDRU5UCi0gOTUgIDA1LzE1ICAxMzcgIDVGICBV TkRFUlNDT1JFCi0gOTYgIDA2LzAwICAxNDAgIDYwICBBQ0NFTlQgR1JBVkUKLSA5NyAgMDYvMDEg IDE0MSAgNjEgIEdSRUVLIExFVFRFUiBBTFBIQQotIDk4ICAwNi8wMiAgMTQyICA2MiAgR1JFRUsg TEVUVEVSIEJFVEEKLSA5OSAgMDYvMDMgIDE0MyAgNjMgIEdSRUVLIExFVFRFUiBHQU1NQQotMTAw ICAwNi8wNCAgMTQ0ICA2NCAgR1JFRUsgTEVUVEVSIERFTFRBCi0xMDEgIDA2LzA1ICAxNDUgIDY1 ICBHUkVFSyBMRVRURVIgRVBTSUxPTgotMTAyICAwNi8wNiAgMTQ2ICA2NiAgR1JFRUsgTEVUVEVS IFpFVEEKLTEwMyAgMDYvMDcgIDE0NyAgNjcgIEdSRUVLIExFVFRFUiBFVEEKLTEwNCAgMDYvMDgg IDE1MCAgNjggIEdSRUVLIExFVFRFUiBUSEVUQQotMTA1ICAwNi8wOSAgMTUxICA2OSAgR1JFRUsg TEVUVEVSIElPVEEKLTEwNiAgMDYvMTAgIDE1MiAgNkEgIEdSRUVLIExFVFRFUiBLQVBQQQotMTA3 ICAwNi8xMSAgMTUzICA2QiAgR1JFRUsgTEVUVEVSIExBTURBCi0xMDggIDA2LzEyICAxNTQgIDZD ICBHUkVFSyBMRVRURVIgTVUKLTEwOSAgMDYvMTMgIDE1NSAgNkQgIEdSRUVLIExFVFRFUiBOVQot MTEwICAwNi8xNCAgMTU2ICA2RSAgR1JFRUsgTEVUVEVSIEtTSQotMTExICAwNi8xNSAgMTU3ICA2 RiAgR1JFRUsgTEVUVEVSIE9NSUNST04KLTExMiAgMDcvMDAgIDE2MCAgNzAgIEdSRUVLIExFVFRF UiBQSQotMTEzICAwNy8wMSAgMTYxICA3MSAgR1JFRUsgTEVUVEVSIFJITwotMTE0ICAwNy8wMiAg MTYyICA3MiAgR1JFRUsgTEVUVEVSIFNJR01BCi0xMTUgIDA3LzAzICAxNjMgIDczICBHUkVFSyBM RVRURVIgVEFVCi0xMTYgIDA3LzA0ICAxNjQgIDc0ICBHUkVFSyBMRVRURVIgVVBTSUxPTgotMTE3 ICAwNy8wNSAgMTY1ICA3NSAgR1JFRUsgTEVUVEVSIEZJCi0xMTggIDA3LzA2ICAxNjYgIDc2ICBH UkVFSyBMRVRURVIgWEkKLTExOSAgMDcvMDcgIDE2NyAgNzcgIEdSRUVLIExFVFRFUiBQU0kKLTEy MCAgMDcvMDggIDE3MCAgNzggIEdSRUVLIExFVFRFUiBPTUVHQQotMTIxICAwNy8wOSAgMTcxICA3 OSAgU1BBQ0UKLTEyMiAgMDcvMTAgIDE3MiAgN0EgIFNQQUNFCi0xMjMgIDA3LzExICAxNzMgIDdC ICBMRUZUIENVUkxZIEJSQUNLRVQsIExFRlQgQlJBQ0UKLTEyNCAgMDcvMTIgIDE3NCAgN0MgIFZF UlRJQ0FMIExJTkUsIFZFUlRJQ0FMIEJBUgotMTI1ICAwNy8xMyAgMTc1ICA3RCAgUklHSFQgQ1VS TFkgQlJBQ0tFVCwgUklHSFQgQlJBQ0UKLTEyNiAgMDcvMTQgIDE3NiAgN0UgIFRJTERFCi0xMjcg IDA3LzE1ICAxNzcgIDdGICBSVUJPVVQsIERFTEVURQotCi0gICAgSUlJLjEuMi4zLiBQQyBDb2Rl IFBhZ2UgODY5Ci0KLSAgICh0byBiZSBmaWxsZWQgaW4uLi4pCi0KLSAgICBJSUkuMi4gVXBkYXRl ZCBDb3VudHJ5IENvZGVzCi0KLSAgIERhdGU6IE1vbiwgNyBBcHIgMTk5NyAyMzoyMzo0OSBFRFQK LSAgIEZyb206IERhdmUgTGVpYm9sZCA8ZGxlaWJvbGRAZWxzZS5uZXQ+Ci0gICBOZXdzZ3JvdXBz OiBjb21wLmRjb20udGVsZWNvbQotICAgU3ViamVjdDogRXgtVVNTUiBDb3VudHJ5IENvZGVzIFBy b2ZpbGUKLSAgIE9yZ2FuaXphdGlvbjogVEVMRUNPTSBEaWdlc3QKLQotICAgRXgtVVNTUiBDb3Vu dHJ5IENvZGVzIFByb2ZpbGUKLSAgIDQgQXByaWwgMTk5NwotCi0gICBCZWxvdyBpcyBhIHN1bW1h cnkgb2YgdGhlIGNvdW50cnkgY29kZXMgdGhhdCBoYXZlIGZvcm1lZCBpbiB0aGUgd2FrZSBvZgot ICAgdGhlIFVTU1IgZGlzc29sdXRpb24sIGFsb25nIHdpdGggc29tZSB1cGRhdGVkIGZpbmRpbmdz IGFuZCByZXBvcnRzLgotICAgQWRkaXRpb25hbCBvciBjb3JyZWN0ZWQgaW5mb3JtYXRpb24gb24g YW55IG9mIHRoZXNlIG5hdGlvbnMgd291bGQgYmUKLSAgIHdlbGNvbWUgKGMvbyBkbGVpYm9sZEBl bHNlLm5ldCkuCi0gICAgICogS3lyZ3l6IFJlcHVibGljIGNvdW50cnkgY29kZSA5OTYgd2lsbCB0 YWtlIGVmZmVjdCwgYXQgbGVhc3QgaW4KLSAgICAgICBDYW5hZGEsIGVmZmVjdGl2ZSAxIE1heSAx OTk3LCBhY2NvcmRpbmcgdG8gQ1JUQyBUZWxlY29tIE9yZGVyCi0gICAgICAgOTctNDY0LCBiYXNl ZCBvbiBTdGVudG9yIFRhcmlmZiBOb3RpY2UgNDMzLiBUaGVyZSBpcyBubyBpbmRpY2F0aW9uCi0g ICAgICAgd2hldGhlciB0aGVyZSB3aWxsIGJlIGEgcGVybWlzc2l2ZSBkaWFsaW5nIHBlcmlvZCBp bnZvbHZlZCBvciBmb3IKLSAgICAgICBob3cgbG9uZyBzdWNoIGEgcGVybWlzc2l2ZSBvcGVyYXRp b24gd291bGQgcmVtYWluLgotICAgICAqIENvdW50cnkgY29kZSA5OTIgd2FzIHJlcG9ydGVkIGFz IGEgcmVjZW50IGFzc2lnbm1lbnQgZm9yCi0gICAgICAgVGFqaWtpc3Rhbiwgd2hpY2ggd2lsbCBi ZSBtb3ZpbmcgZnJvbSBjb3VudHJ5IGNvZGUgNyBhdCBzb21lCi0gICAgICAgdW5rbm93biB0aW1l LgotICAgICAqIFV6YmVraXN0YW4gaGFzIGl0cyBvd24gY291bnRyeSBjb2RlIGFzc2lnbm1lbnQs IGJ1dCBJIGhhdmUgbm8KLSAgICAgICBpbmZvcm1hdGlvbiBpZiB0aGlzIGlzIGluIHNlcnZpY2Ug eWV0IG9yIHdoYXQgaW1wbGVtZW50YXRpb24gZGF0ZXMKLSAgICAgICBoYXZlIGJlZW4gc2V0Lgot ICAgICAqIEthemFrc3RhbiBkb2VzIG5vdCBoYXZlIGEga25vd24gc2VwYXJhdGUgY291bnRyeSBj b2RlIGFzc2lnbm1lbnQgYXQKLSAgICAgICBwcmVzZW50LiBJdCByZW1haW5zIGluIGNvdW50cnkg Y29kZSA3IGZvciB0aGUgdGltZSBiZWluZy4KLSAgICAgKiBSdXNzaWEgc2VlbXMgZGVzdGluZWQg dG8ga2VlcCBjb3VudHJ5IGNvZGUgNy4KLSAgICAgKiBSZWNlbnQgbmV3cyByZXBvcnRzIHNwZWFr IG9mIHNvbWUgYWdyZWVtZW50cyBmb3JtaW5nIGJldHdlZW4gUnVzc2lhCi0gICAgICAgYW5kIEJl bGFydXMuIFdoaWxlIHRoZXJlIGlzIG5vIG91dHJpZ2h0IHJldW5pZmljYXRpb24geWV0LCB0aGVy ZSBpcwotICAgICAgIGV4cGVjdGVkIHRvIGJlIG11Y2ggY2xvc2VyIHRpZXMgYmV0d2VlbiB0aGUg dHdvIG5hdGlvbnMuIFdoZXRoZXIKLSAgICAgICB0aGlzIHdpbGwgbGVhZCB0byBhIHJldW5pZmlj YXRpb24gb2YgdGVsZXBob25lIGNvZGVzIHJlbWFpbnMgdG8gYmUKLSAgICAgICBzZWVuLgotCi0g ICBJbiB0aGUgdGFibGUsICJFZmZlY3RpdmUiIG1lYW5zIHRoZSBkYXRlIGF0IHdoaWNoIHRoZSBj b3VudHJ5IGNvZGUKLSAgIGJlZ2FuIHNlcnZpY2UgKHdoaWNoIGNvdWxkIHZhcnkgYWNjb3JkaW5n IHRvIHRoZSBuYXRpb24pLiAiTWFuZGF0b3J5IgotICAgbWVhbnMgdGhlIGRhdGUgYXQgd2hpY2gg dGhlIGNvdW50cnkgY29kZSA3IGlzIGludmFsaWQgZm9yIGNhbGxzIHRvIHRoYXQKLSAgIG5hdGlv bi4gVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzIHNpbmNlIGV4YWN0IGRhdGVz IGhhdmUgbm90Ci0gICBiZWVuIGNvbGxlY3RlZCBpbiBhbGwgY2FzZXMuCi0KLUNDICBOYXRpb24g ICAgICAgICAgICBFZmZlY3RpdmUgICAgIE1hbmRhdG9yeSAgICBOb3RlcwotCi0zNzAgTGl0aHVh bmlhICAgICAgICAgMTk5Mz8gICAgICAgICA/Pz8gICAgICAgICAgQW5ub3VuY2VkIEphbiAxOTkz Ci0zNzEgTGF0dmlhICAgICAgICAgICAgMTk5Mz8gICAgICAgICA/Pz8KLTM3MiBFc3RvbmlhICAg ICAgICAgICAxIEZlYiAxOTkzPyAgIE1hcmNoIDE5OTM/Ci0zNzMgTW9sZG92YSAgICAgICAgICAg MTk5Mz8gICAgICAgICA/Pz8gICAgICAgICAgQW5ub3VuY2VkIEphbiAxOTkzCi0zNzQgQXJtZW5p YSAgICAgICAgICAgMSBNYXkgMTk5NSAgICAxIEp1bHkgMTk5NSAgQW5ub3VuY2VkIEphbiAxOTk1 IChJVFUpCi0zNzUgQmVsYXJ1cyAgICAgICAgICAgMTYgQXByIDE5OTUgICAxOTk3PwotMzgwIFVr cmFpbmUgICAgICAgICAgIDE2IEFwciAxOTk1ICAgT2N0IDE5OTU/Ci03ICAgS2F6YWtzdGFuICAg ICAgICAgKG5vIGtub3duIGNoYW5nZXMpCi03ICAgUnVzc2lhICAgICAgICAgICAgKHByZXN1bWFi bHkgbm90IGNoYW5naW5nKQotOTkyIFRhamlraXN0YW4gICAgICAgID8/PyAgICAgICAgICAgPz8/ ICAgICAgICAgIEFubm91bmNlZCAxOTk2LTc/Ci05OTMgVHVya21lbmlzdGFuICAgICAgMyBKYW4g MTk5NyAgICAzIEFwciAxOTk3ICAgQ2FuYWRhIGFzIG9mIDI5IE5vdiAxOTk2Ci05OTQgQXplcmJh aWphbiAgICAgICAgU2VwdCAxOTk0PyAgICA/Pz8gICAgICAgICAgQW5ub3VuY2VkIDE5OTIKLTk5 NSBHZW9yZ2lhICAgICAgICAgICAxOTk0PyAgICAgICAgID8/PyAgICAgICAgICByZWY6IFRlbGVj b20gRGlnZXN0IE9jdCAxOTk0Ci05OTYgS3lyZ3l6IFJlcHVibGljICAgMSBNYXkgMTk5NyAgICA/ Pz8gICAgICAgICAgcmVmOiBTdGVudG9yIENhbmFkYS9DUlRDCi05OTggVXpiZWtpc3RhbiAgICAg ICAgPz8/ICAgICAgICAgICA/Pz8gICAgICAgICAgQW5ub3VuY2VkIDE5OTY/IChJVFUpCi0KLSAg IERldGFpbHMgY291cnRlc3kgVG9ieSBOaXhvbiwgSVRVLCBTdGVudG9yIChDYW5hZGEpLCBDUlRD IChDYW5hZGEpLAotICAgVEVMRUNPTSBEaWdlc3QgKGluY2x1ZGluZyBpbmZvcm1hdGlvbiBjb2xs ZWN0ZWQgZm9yIHRoZSBjb3VudHJ5IGNvZGUKLSAgIGxpc3RpbmdzKS4KLQotSVYuIEVSUkFUQSAm IENPUlJJR0VOREEKLQotICAgVGhlIGZvbGxvd2luZyBlcnJvcnMgaW4gWzY0OV1Vc2luZyBDLUtl cm1pdCwgU2Vjb25kIEVkaXRpb24sIGZpcnN0Ci0gICBwcmludGluZywgaGF2ZSBiZWVuIG5vdGVk LgotCi0gICBGaXJzdCwgc29tZSBtaXNzaW5nIGFja25vd2xlZGdlbWVudHMgZm9yIEMtS2VybWl0 IDYuMDogSkUgSm9uZXMgb2YKLSAgIE1pY3Jvd2FyZSBmb3IgaGVscCB3aXRoIE9TLTksIE5pZ2Vs IFJvbGVzIGZvciBoaXMgaGVscCB3aXRoIFBsYW4gOSwKLSAgIEx1Y2FzIEhhcnQgZm9yIGhlbHAg d2l0aCBWTVMgYW5kIERpZ2l0YWwgVU5JWCwgSWdvciBLb3ZhbGVua28gZm9yIGhpcwotICAgaGVs cCB3aXRoIFFOWC4gQW5kIGxhdGVyLCB0byBTdXNhbiBLbGVpbm1hbm4gZm9yIGhlciBoZWxwIHdp dGggRGViaWFuCi0gICBMaW51eCBwYWNrYWdpbmc7IFBhdHJpY2sgVm9sa2VyZGluZyBmb3IgaGlz IGhlbHAgd2l0aCBTbGFja3dhcmUgTGludXgKLSAgIHBhY2thZ2luZzsgSmltIEtub2JsZSBmb3Ig aGlzIGhlbHAgd2l0aCBSZWQgSGF0IExpbnV4IHBhY2thZ2luZzsgYW5kIHRvCi0gICBkb3plbnMg b2Ygb3RoZXJzIGZvciBzZW5kaW5nIGluZGl2aWR1YWwgQy1LZXJtaXQgYmluYXJpZXMgZm9yIHZh cmllZAotICAgYW5kIGRpdmVyc2UgcGxhdGZvcm1zLgotCi0gICBUaGFua3MgdG8gSmFtZXMgU3Bh dGggZm9yIGJvdGggYmluYXJpZXMgYW5kIHJlcG9ydGluZyBtYW55IG9mIHRoZSB0eXBvcwotICAg bm90ZWQgYmVsb3cuIEFsc28gdG8gRGF0IFRodWMgTmd1eWVuIGZvciBzcG90dGluZyBzZXZlcmFs IHR5cG9zLgotCi1QQUdFICAgIFJFTUFSS1MKLUNPVkVSICAgIkNPUyIgaXMgYSBtaXNwcmludC4g IFRoZXJlIGlzIG5vIENPUy4gIFByZXRlbmQgaXQgc2F5cyAiU0NPIiBvciAiVk9TIi4KLSAgICAg ICAgKFRoaXMgaXMgZml4ZWQgaW4gdGhlIHNlY29uZCBwcmludGluZy4pCi0geHhpICAgIFNlY29u ZCBsaW5lOiBGcmVkIFNtaXRoJ3MgYWZmaWxpYXRpb24gc2hvdWxkIGJlIENvbXB1dHJpdGlvbi4K LSA4MyAgICAgQ2hhbmdlICJjb21tYW5kcyBvdGhlciIgdG8gImNvbW1hbmRzIGFzIG90aGVyIiAo MXN0IHBhcmFncmFwaCkKLSA4NyAgICAgQ2hhbmdlICJUaGUgdGhlIiB0byAiVGhlIiAoMm5kIHBh cmFncmFwaCkKLSA5MiAgICAgInNldCBtb2RlbS10eXBlIHVzZXItZGVmaW5lZCBzdXByYSIgc2hv dWxkIGJlICJzZXQgbW9kZW0gdHlwZSAuLi4iCi0gOTUgICAgIENoYW5nZSAiVkkiIHRvICJ2aSIg KDFzdCBwYXJhZ3JhcGgpCi0gOTYgICAgIENoYW5nZSAiaXQgaXQiIHRvICJpdCBpcyIgKDFzdCBw YXJhZ3JhcGgpCi0gOTcgICAgIENoYW5nZSAiYWR2YW50YWdlIGEgbGl0ZXJhbCIgdG8gImFkdmFu dGFnZSBvZiBhIGxpdGVyYWwiICgybmQKLSAgICAgICAgcGFyYWdyYXBoKQotMTAyICAgICBUaGUg Y2FsbC13YWl0aW5nIGV4YW1wbGUgd291bGQgYmUgYmV0dGVyIGFzIFNFVCBESUFMIFBSRUZJWCAq NzBXCi0gICAgICAgIChyYXRoZXIgdGhhbiAiKjcwLCIpIGJlY2F1c2UgdGhlIGZvcm1lciB3aWxs IG5vdCBjYXVzZSBhbiBpbmNvcnJlY3QKLSAgICAgICAgY2FsbCB0byBiZSBwbGFjZWQgd2l0aCBw dWxzZSBkaWFsaW5nLgotMTIzICAgICBUaGlyZCBwYXJhZ3JhcGggZnJvbSBib3R0b206ICIuLm90 aGVyd2lzZSBpZiBhIHlvdXIgbG9jYWwgdXNlcm5hbWUuLiIKLSAgICAgICAgc2hvdWxkIGJlICIu Lm90aGVyd2lzZSB5b3VyIGxvY2FsIHVzZXJuYW1lLi4iLgotMTYwICAgICBEZWxldGUgdGhlICJp dCIgYmV0d2VlbiAiYW5kIiBhbmQgInRvIiAoMm5kIHBhcmFncmFwaCkKLTE4NSAgICAgSW4gIldo ZW4gVFJBTlNGRVIgRElTUExBWSBpcyBPRkYsIEMtS2VybWl0IHNraXBzIHRoZSBkaXNwbGF5Li4u IiwKLSAgICAgICAgIk9GRiIgc2hvdWxkIGJlICJOT05FIi4KLTE4NyAgICAgVGhlIGxhc3QgcGFy YWdyYXBoIHNheXMgdGhlICJBIGNvbW1hbmQiIGlzIGlnbm9yZWQsIHNob3VsZCBiZSAiUyIuCi0x OTQgICAgIENoYW5nZSAiaXQga25vd24iIHRvICJpdCBpcyBrbm93biIgKDR0aCBwYXJhZ3JhcGgp LgotMjM1ICAgICBJbiBDLUtlcm1pdCA3LjAsIHRoZSBzeW50YXggb2YgdGhlIEdFVCBjb21tYW5k IGNoYW5nZWQuICBNR0VUIG5vdwotICAgICAgICBtdXN0IGJlIHVzZWQgdG8gZ2V0IGEgbGlzdCBv ZiBmaWxlcyBhbmQgdGhlcmUgaXMgbm8gbW9yZSBtdWx0aWxpbmUKLSAgICAgICAgR0VUIGNvbW1h bmQuCi0yNjggICAgIExhc3QgcGFyYWdyYXBoOiAiZWZmZWN0IiBzaG91bGQgYmUgImFmZmVjdCIu Ci0yNzUgICAgIEluIHRoZSBTRVQgUFJPVE9DT0wgS0VSTUlUIGRlc2NyaXB0aW9uLCB0aGUgZm9s bG93aW5nIHNlbnRlbmNlIGlzCi0gICAgICAgIGluY29ycmVjdCBhbmQgc2hvdWxkIGJlIHJlbW92 ZWQ6ICdJZiB5b3Ugb21pdCB0aGUgY29tbWFuZHMsIHRoZQotICAgICAgICBkZWZhdWx0IG9uZXMg YXJlIHJlc3RvcmVkOiAia2VybWl0IC1pciIgYW5kICJrZXJtaXQgLXIiIHJlc3BlY3RpdmVseSIu Ci0gICAgICAgIFRoZSBjb3JyZWN0IGluZm9ybWF0aW9uIGlzIGdpdmVuIGF0IHRoZSBib3R0b20g b2YgcGFnZSAyODEuCi0yNzkgICAgIDl0aCBsaW5lLiAgVGhlIGRlY2ltYWwgdmFsdWUgb2YgU1Qg aXMgMTU2LCBub3QgMTU1LgotMjk1ICAgICBJbiB0aGUgc3RlcHBpbmcgc3RvbmVzLCBza2lwIGFo ZWFkIHRvIENoYXB0ZXIgMTcgb24gcC4gMzI3LgotMjk4ICAgICBUYWJsZSAxNi0yLCBQb3J0dWd1 ZXNlIGVudHJ5LiAgQ29sdW1uIDQvMDAgc2hvdWxkIHNob3cgc2VjdGlvbiBzaWduLAotICAgICAg ICBub3QgYWN1dGUgYWNjZW50LgotMzE2ICAgICBPdGhlciBsYW5ndWFnZXMgd3JpdHRlbiBpbiB0 aGUgSGVicmV3IGFscGhhYmV0IGluY2x1ZGUgS2FyYWltIChhIFR1cmtpYwotICAgICAgICBsYW5n dWFnZSBzcG9rZW4gaW4gTGl0aHVhbmlhIGFuZCBQb2xhbmQpLCBKdWRlby1LdXJkaXNoLCBhbmQg SnVkZW8tCi0gICAgICAgIEdlb3JnaWFuLgotMzMyICAgICBVTkRFRklORSBkZWZpbml0aW9uLCBj aGFuZ2UgIlRoaXMganVzdCIgdG8gIlRoaXMgaXMganVzdCIuCi0zNDQgICAgIEl0IG1pZ2h0IGJl IG5lY2Vzc2FyeSB0byBzZXQgdGhlIG1vZGVtJ3MgcHVsc2UgZ2VuZXJhdGlvbiByYXRlIHdoZW4K LSAgICAgICAgc2VuZGluZyBudW1lcmljIHBhZ2VzOyBtb3N0IEhheWVzIGNvbXBhdGlibGUgbW9k ZW1zIHVzZSB0aGUgUzExCi0gICAgICAgIHJlZ2lzdGVyIGZvciB0aGlzLgotMzUwICAgICBEZWxl dGUgImlzIiBmcm9tIGJldHdlZW4gIkl0IiBhbmQgImNlYXNlcyIgKDR0aCBwYXJhZ3JhcGgpCi0z NTEgICAgIFRvcCAtIGJvdGggb2NjdXJyZW5jZXMgb2YgInByaW50IFwlYSIgc2hvdWxkIGJlICJl Y2hvIFwlYSIuCi0zNjQgICAgIFx2KGlucHV0KSBhbmQgXHYocXVlcnkpIG91dCBvZiBhbHBoYWJl dGljYWwgb3JkZXIuCi0zNzggICAgIEluIHRoZSBNWVNFTkQgbWFjcm8sICJpZiBub3QgXG0ocmMp IGdvdG8gYmFkIiBzaG91bGQgYmU6Ci0gICAgICAgICJpZiBcbShyYykgZ290byBiYWQiIChyZW1v dmUgdGhlICJub3QiKS4KLTM4Mi0zODMgSXQgc2hvdWxkIGJlIHN0YXRlZCB0aGF0IHRoZSBsb29w IGNvbnRyb2wgdmFyaWFibGUgbXVzdCBiZSBvZiB0aGUgXCVhCi0gICAgICAgIHR5cGUsIG9yIGVs c2UgYW4gYXJyYXkgZWxlbWVudDsgbWFjcm8gbmFtZXMgY2FuIG5vdCBiZSB1c2VkIGZvciB0aGlz LgotMzgzICAgICBJbiBsaW5lIDMsICJcJWZbXCVpXSIgc2hvdWxkIGJlICJcJmZbXCVpXSIuCi0z ODMgICAgIEluIHRoZSBzb3J0IGV4YW1wbGUsIGl0IHNob3VsZCBiZSBzdGF0ZWQgdGhhdCB0aGUg YXJyYXkgaXMgMS1iYXNlZC4KLTM4NyAgICAgQ2hhbmdlICJZb3UgY2FuIGxpc3QiIHRvICJZb3Ug Y2FuIGdldCBhIGxpc3QiICg1dGggcGFyYWdyYXBoKQotMzkzICAgICBcRnZlcmlmeSgpIGRlc2Ny aXB0aW9uLiAgVGhlIDNyZCBzZW50ZW5jZSBjb3VsZCBiZSBzdGF0ZWQgbW9yZSBjbGVhcmx5Ci0g ICAgICAgIGFzICJJZiBhbGwgY2hhcmFjdGVycyBpbiBzdHJpbmcyIGFyZSBhbHNvIGluIHN0cmlu ZzEsIDAgaXMgcmV0dXJuZWQuIgotMzk4ICAgICBDb3B5aW5nIFxmZmlsZXMoKSByZXN1bHRzIHRv IGFuIGFycmF5IGJlZm9yZSBpcyBub3QgcmVxdWlyZWQgYXMgb2YKLSAgICAgICAgQy1LZXJtaXQg Ny4wIChzZWUgWzY1MF1TZWN0aW9uIDcuMykuCi00MDMgICAgIEluICIoXCVhICsgMykgKiAoXCVi ICA1KSIsIGEgbWludXMgc2lnbiBpcyBtaXNzaW5nIGJldHdlZW4gYiBhbmQgNS4KLTQwNyAgICAg Qy1LZXJtaXQgNy4wIG5vIGxvbmdlciBzdXBwb3J0cyBtdWx0aWxpbmUgR0VULiAgQ2hhbmdlCi0g ICAgICAgICJnZXQsIFwlMSwgXCUyIiB0byAiZ2V0IHtcJTF9IHtcJTJ9IiBvciAiZ2V0IC9hczp7 XCUyfSB7XCUxfSIuCi00MDkgICAgIFJFQUQgZXhhbXBsZSB3aGlsZSBsb29wIHNob3VsZCBiZToK LSAgICAgICAgd2hpbGUgc3VjY2VzcyB7IGVjaG8gXG0obGluZSksIHJlYWQgbGluZSB9Ci00MDkg ICAgICJXUklURSBmaWxlIiBzaG91bGQgYmUgIldSSVRFIGtleXdvcmQiICh5b3UgY2FuJ3QgcHV0 IGEgZmlsZW5hbWUgdGhlcmUpCi0gICAgICAgIChUaGUgc2FtZSBhcHBsaWVzIHRvIFdSSVRFLUxJ TkUgLyBXUklURUxOKS4KLTQxNCAgICAgXEZ1bmhleGlmeSgpIG1pc3NpbmcgZnJvbSBUYWJsZSAx OC0zLgotNDI1ICAgICBNSU5QVVQgZGVmaW5pdGlvbiwgY2hhbmdlIDJuZCAidGV4dDIiIHRvICJ0 ZXh0MyIuCi00MzYgICAgIFNldmVyYWwgbGluZXMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgVU5JWExP R0lOIG1hY3JvIGxpc3RpbmcuCi0gICAgICAgIEFmdGVyIHRoZSAieGlmIGZhaWwiIGJsb2NrLCBp bnNlcnQ6Ci0KLSAgICAgICAgICBvdXQgXCUxXDEzICAgICAgICAgICAgICAgICAgICA7IFNlbmQg dXNlcm5hbWUsIGNhcnJpYWdlIHJldHVybgotICAgICAgICAgIGlucCA1IFBhc3N3b3JkOiAgICAg ICAgICAgICAgIDsgV2FpdCA1IHNlYyBmb3IgdGhpcyBwcm9tcHQKLSAgICAgICAgICBpZiBmYWls IGVuZCAxIE5vIHBhc3N3b3JkIHByb21wdAotICAgICAgICAgIHBhdXNlICAgICAgICAgICAgICAg ICAgICAgICAgIDsgV2FpdCBhIHNlYwotICAgICAgICAgIG91dCBcJTJcMTMgICAgICAgICAgICAg ICAgICAgIDsgU2VuZCBwYXNzd29yZAotCi00NDAgICAgIENoYW5nZSAic2V0IHRlcm1pbmFsIGJ5 dGVzemllIiB0byAic2V0IHRlcm1pbmFsIGJ5dGVzaXplIi4KLSAgICAgICAgQ2hhbmdlICJpbnB1 dCBQYXNzd29yZDoiIHRvICJpbnB1dCAxMCBQYXNzd29yZCIuCi00NDggICAgIEZyYW5jaGlzZSBz Y3JpcHQ6ICJhY2Nlc3MgbGluZSIgc2hvdWxkIGJlICJhY2Nlc3MgXG0obGluZSkiLgotNDUzICAg ICBUaGVyZSBhcmUgdHdvIGluY29ycmVjdGx5IGNvZGVkIElGIHN0YXRlbWVudHMgaW4gdGhlIERF TElWRVIgbWFjcm8KLSAgICAgICAgZGVmaW5pdGlvbi4gIFJlcGxhY2UgYm90aCBvY2N1cnJlbmNl cyBvZiAiaWYgPiBcJTEgXCUzIHsiIHdpdGgKLSAgICAgICAgInhpZiA+IFwlaSBcJTMgeyIgKHJl cGxhY2UgImlmIiBieSAieGlmIiBhbmQgIlwlMSIgd2l0aCAiXCVpIikuCi00NTMgICAgICJ0aGUg dGhlIiAobGFzdCBwYXJhZ3JhcGgpIHNob3VsZCBiZSAidGhlIi4KLTQ1NCAgICAgRU9UIChsYXN0 IHBhcmFncmFwaCkgaXMgRW5kIG9mIFRyYW5zbWlzc2lvbiwgbm90IEVuZCBvZiBUZXh0LgotNDU3 ICAgICBfREVGSU5FIGRlZmluaXRpb246ICJuYW1lIGNvbnN0cnVjdGVkIiBzaG91bGQgYmUgIm5h bWUgaXMgY29uc3RydWN0ZWQiLgotNDU3ICAgICAibWFjcm8gZm9yIGFuZCIgKGxhc3QgcGFyYWdy YXBoKSBzaG91bGQgYmUgIm1hY3JvIGFuZCIuCi00NTkgICAgIFNob3VsZCBleHBsYWluIHRoYXQg XHYodXNlcikgaXMgYSBsZWdhbCBhYmJyZXZpYXRpb24gb2YgXHYodXNlcmlkKS4KLTQ4MCAgICAg RmlndXJlIElJLTIgaXMgYmFja3dhcmRzOyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgYml0IGlzIHRy YW5zbWl0dGVkCi0gICAgICAgIGZpcnN0LCB0aGVuIHVwIHRvIHRoZSBoaWdoZXN0LCBhbmQgdGhl IHBhcml0eSBiaXQgbGFzdC4KLTUzNCAgICAgVGhlIFZNUyBBcHBlbmRpeCBzZWN0aW9uIG9uIE9k ZCBSZWNvcmQgTGVuZ3RocyBubyBsb25nZXIgYXBwbGllczsKLSAgICAgICAgQy1LZXJtaXQgNy4w IGhhbmRsZXMgb2RkIHJlY29yZCBsZW5ndGhzIGFzIHdlbGwgYXMgZXZlbiBvbmVzLgotNTU5ICAg ICBUYWJsZSBWSUlJLTMsIFBvcnR1Z3Vlc2UgZW50cnkuICBDb2x1bW4gNC8wMCBzaG91bGQgc2hv dyBzZWN0aW9uIHNpZ24sCi0gICAgICAgIG5vdCBhY3V0ZSBhY2NlbnQuCi01NjAtNTYzIEhQLVJv bWFuOCBtaXNzaW5nIGZyb20gVGFibGUgVklJLTQ7IHRoZXJlIHdhc24ndCByb29tIHRvIHNxdWVl emUgaXQgaW4uCi0gICAgICAgIEl0IGlzIGxpc3RlZCBpbiBzZWN0aW9uIElJKDYpLgotNTY1ICAg ICAiZCBzdHJva2UiIGluIFRhYmxlIFZJSS01IGhhcyB0aGUgd3JvbmcgYXBwZWFyYW5jZTsgdGhl IHN0ZW0gc2hvdWxkCi0gICAgICAgIGJlIHVwcmlnaHQuICBUaGUgbGV0dGVyIHNob3duIGluIHRo ZSB0YWJsZSBpcyBhY3R1YWxseSBhIGxvd2VyY2FzZQotICAgICAgICBJY2VsYW5kaWMgZXRoLCB3 aGljaCBoYXMgYSBjdXJ2ZWQgc3RlbS4KLTYwMS02MDQgQmVCb3gsIEJlT1MsIFBsYW4gOSwgYW5k IHByb2JhYmx5IG90aGVycyBub3QgbGlzdGVkIGluIHRyYWRlbWFya3MuCi02MDQgICAgIFRoZSB3 b3JkcyAiU0NSSUJFIFRFWFQgRk9STUFUVEVSIiBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgbGFz dAotICAgICAgICBzZW50ZW5jZSBvZiB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIHRoZSBDb2xvcGhv bi4gIFRoZXkgc2hvdWxkIGhhdmUKLSAgICAgICAgYmVlbiBpbiB0aGUgSW5kZXguCi1JbmRleDog IE1pc3NpbmcgZW50cmllczogU0VUIHsgU0VORCwgUkVDRUlWRSB9IFBBVEhOQU1FUywgQ2FsbCB3 YWl0aW5nLCAuLi4KLSAgICAgICAgXEYoKSAgICAgICAgICAgIFBhZ2UgNjA1LCBhZGQgYWxzbyA0 MTMtNDE0Ci0gICAgICAgIFxGYnJlYWsgICAgICAgICAzODkKLSAgICAgICAgXEZjYXBpdGFsaXpl ICAgIDM5MAotICAgICAgICBcRmNoZWNrc3VtICAgICAgNDE0Ci0gICAgICAgIFxGY3JjMTYgICAg ICAgICA0MTQKLSAgICAgICAgXEZleGVjdXRlICAgICAgIDQxNAotICAgICAgICBcRmhleGlmeSAg ICAgICAgMzkwCi0gICAgICAgIFxGbHRyaW0gICAgICAgICAzOTEKLSAgICAgICAgXEZyZXBlYXQg ICAgICAgIDM5MgotICAgICAgICBcRnNwYXduICAgICAgICAgMzkyCi0gICAgICAgIFxGdG9kMnNl Y3MgICAgICAzOTkKLSAgICAgICAgXHYoKSBidWlsdF9pbiAgIFBhZ2UgNjA2LCBhZGQgYWxzbyAz NjEtMzY0Ci0gICAgICAgIFx2KF9saW5lKSAgICAgICAzNTQsIDM2MQotICAgICAgICBcdihhcGNh Y3RpdmUpICAgMzYxCi0gICAgICAgIFx2KGNoYXJzZXQpICAgICAzNjIKLSAgICAgICAgXHYoY3B1 KSAgICAgICAgIDM2MgotICAgICAgICBcdihjcmMxNikgICAgICAgMzU3LCAzNjIKLSAgICAgICAg XHYoZCR4eHgpICAgICAgIGFkZCBwYWdlIDM2MgotICAgICAgICBcdihkaWFsbnVtYmVyKSAgMzYy Ci0gICAgICAgIFx2KGRpYWxyZXN1bHQpICAzNjIKLSAgICAgICAgXHYoZXJybm8pICAgICAgIDM2 MgotICAgICAgICBcdihlcnJzdHJpbmcpICAgMzYyCi0gICAgICAgIFx2KGV4ZWRpcikgICAgICAz NjIKLSAgICAgICAgXHYoaW5pZGlyKSAgICAgIDM2MwotICAgICAgICBcdihpcGFkZHJlc3MpICAg MzYzCi0gICAgICAgIFx2KGtleWJvYXJkKSAgICAzNjMKLSAgICAgICAgXHYobWFjcm8pICAgICAg IDM2MwotICAgICAgICBcdihtaW5wdXQpICAgICAgMzYzCi0gICAgICAgIFx2KG1feHh4KSAgICAg ICA5NCwgMzYzCi0gICAgICAgIFx2KHBhc3N3b3JkKSAgICAzNjQKLSAgICAgICAgXHYocXVlcnkp ICAgICAgIDM2NAotICAgICAgICBcdihwcm9tcHQpICAgICAgMzY0Ci0gICAgICAgIFx2KHNwZWVk KSAgICAgICAzNTYsIDM2NAotICAgICAgICBcdihzdGFydHVwKSAgICAgMzY0Ci0gICAgICAgIFx2 KHN0YXR1cykgICAgICAzNjQKLSAgICAgICAgXHYoc3lzaWQpICAgICAgIDM2NAotICAgICAgICBc dihzeXN0ZW0pICAgICAgMzY0Ci0gICAgICAgIFx2KGZzaXplKSAgICAgICBhdCBsb3dlciBoYWxm IHBhZ2UgNjA2IHNob3VsZCByZWFkIFx2KHRmc2l6ZSkKLSAgICAgICAgXHYoeHZlcnNpb24pICAg IDM2NAotICAgICAgICBCRUVQIENvbW1hbmQgICAgNDAKLSAgICAgICAgU0VUIEZMT1cgICAgICAg IDYyLCAyMTIKLQotICAgRmlndXJlIElJLTUgb24gcGFnZSA0OTMuIFRoZSBwaW4gYXNzaWdubWVu dHMgb2YgdGhlIE1pbmkgRGluLTgKLSAgIGNvbm5lY3RvciBhcmUgbm90IGRlc2NyaWJlZCBhbnl3 aGVyZS4gQXMgbm90ZWQgaW4gdGhlIHRleHQsIHRoZXNlIHRlbmQKLSAgIHRvIHZhcnkgZnJvbSB2 ZW5kb3IgdG8gdmVuZG9yLiBPbmUgY29tbW9uIGFycmFuZ2VtZW50IGlzOgotCi0gIDEuIEhTS291 dCAoSGFuZHNoYWtlIG91dCAtLSBkZWZpbml0aW9uIGRlcGVuZHMgb24gc29mdHdhcmUpCi0gIDIu IEhTS2luICAoSGFuZHNoYWtlIGluIG9yIGV4dGVybmFsIGNsb2NrKQotICAzLiBUeEQtCi0gIDQu IE5vdCB1c2VkCi0gIDUuIFJ4RC0KLSAgNi4gVHhEKwotICA3LiBOb3QgdXNlZAotICA4LiBSeEQr Ci0KLSAgIE5vdGUgdGhlICJiYWxhbmNlZCBwYWlycyIgZm9yIFJlY2VpdmUgRGF0YSAoUnhEKSBh bmQgVHJhbnNtaXQgRGF0YQotICAgKFR4RCksIGFuZCB0aGUgdXR0ZXIgbGFjayBvZiBtb2RlbSBz aWduYWxzLiBUaGVzZSBjb25uZWN0b3JzIGZvbGxvdyB0aGUKLSAgIFJTLTQyMyBzdGFuZGFyZCwg cmF0aGVyIHRoYW4gUlMtMjMyLiBJbiBzb21lIGFycmFuZ2VtZW50cywgUGluIDEgaXMKLSAgIHVz ZWQgZm9yIERUUiBhbmQgUGluIDIgZm9yIENEOyBpbiBvdGhlcnMgUGluIDEgaXMgUlRTIGFuZCBQ aW4gMiBpcyBDVFMuCi0KLSAgIFBsZWFzZSBzZW5kIHJlcG9ydHMgb2Ygb3RoZXIgZXJyb3JzIHRv IHRoZSBhdXRob3JzLCBhcyB3ZWxsIGFzCi0gICBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnRz LCBhZGRpdGlvbmFsIGluZGV4IGVudHJpZXMsIGFuZCBhbnkgb3RoZXIKLSAgIGNvbW1lbnRzOgot Ci0gICBbNjUxXWtlcm1pdEBjb2x1bWJpYS5lZHUKLQotQVBQRU5ESVggVi4gQURESVRJT05BTCBD T1BZUklHSFQgTk9USUNFUwotCi0gICBUaGUgZm9sbG93aW5nIGNvcHlyaWdodHMgY292ZXIgc29t ZSBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCBpbiB0aGUKLSAgIGRldmVsb3BtZW50IG9mIEMtS2Vy bWl0LCBLZXJtaXQgOTUsIG9yIEtlcm1pdCA5NSBzdXBwb3J0IGxpYnJhcmllcy4KLQotLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAg IENvcHlyaWdodCAoYykgMTk5NSBieSBPeSBPbmxpbmUgU29sdXRpb25zIEx0ZC4gICAgICAgICAg ICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBEaXN0cmlidXRpb24gb2YgdGhp cyBzb3VyY2UgY29kZSBpcyBzdHJpY3RseSBmb3JiaWRkZW4uIFVzZSBvZiB0aGlzICAgICovCi0v KiAgIHNvdXJjZSBjb2RlIGlzIGdyYW50ZWQgdG8gdGhlIFVuaXZlcnNpdHkgb2YgQ29sdW1iaWEg Qy1LZXJtaXQgcHJvamVjdCAgICovCi0vKiAgIHRvIGJlIGRpc3RyaWJ1dGVkIGluIGJpbmFyeSBm b3JtYXQgb25seS4gUGxlYXNlIGZhbWlsaWFyaXplIHlvdXJzZWxmICAgICovCi0vKiAgIHdpdGgg dGhlIGFjY29tcGFueWluZyBMSUNFTlNFLlAgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCi0KLSAgIHVzZWQgZm9yIFhtb2RlbSwgWW1vZGVtLCBhbmQgWm1vZGVtIHByb3RvY29sIGlu IEtlcm1pdCA5NSAocDk1LmRsbCwKLSAgIHAyLmRsbCkKLQotICAgQ29weXJpZ2h0IChjKSAxOTk3 IFN0YW5mb3JkIFVuaXZlcnNpdHkKLQotICAgVGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGZvciBy ZXZlbnVlLWdlbmVyYXRpbmcgcHVycG9zZXMgbWF5IHJlcXVpcmUgYQotICAgbGljZW5zZSBmcm9t IHRoZSBvd25lcnMgb2YgdGhlIHVuZGVybHlpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5LgotICAg U3BlY2lmaWNhbGx5LCB0aGUgU1JQLTMgcHJvdG9jb2wgbWF5IG5vdCBiZSB1c2VkIGZvciByZXZl bnVlLWdlbmVyYXRpbmcKLSAgIHB1cnBvc2VzIHdpdGhvdXQgYSBsaWNlbnNlLgotCi0gICBXaXRo aW4gdGhhdCBjb25zdHJhaW50LCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQg ZGlzdHJpYnV0ZQotICAgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFu eSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkCi0gICB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhh dCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZXMgYW5kIHRoaXMKLSAgIHBlcm1pc3Npb24gbm90 aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSBhbmQgcmVsYXRlZAotICAg ZG9jdW1lbnRhdGlvbi4KLQotICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUy1JUyIgQU5E IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0gICBFWFBSRVNTLCBJTVBMSUVEIE9SIE9U SEVSV0lTRSwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZCi0gICBXQVJSQU5UWSBP RiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0K LSAgIElOIE5PIEVWRU5UIFNIQUxMIFNUQU5GT1JEIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUws IElOQ0lERU5UQUwsCi0gICBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5Z IEtJTkQsIE9SIEFOWSBEQU1BR0VTCi0gICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1Mg T0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgT1IgTk9UCi0gICBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBEQU1BR0UsIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwK LSAgIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZP Uk1BTkNFIE9GIFRISVMKLSAgIFNPRlRXQVJFLgotCi0gICBVc2VkIGZvciBTZWN1cmUgUmVtb3Rl IFBhc3N3b3JkIChUTSkgcHJvdG9jb2wgKFNSUCkgaW4gQy1LZXJtaXQsIEtlcm1pdAotICAgOTUg KGs5NS5leGUsIGsyLmV4ZSwgazk1Y3J5cHQuZGxsLCBrMmNyeXB0LmRsbCkKLQotICAgQ29weXJp Z2h0IDE5OTAgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuIEFs bCBSaWdodHMKLSAgIFJlc2VydmVkLgotCi0gICBFeHBvcnQgb2YgdGhpcyBzb2Z0d2FyZSBmcm9t IHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EgbWF5IHJlcXVpcmUgYQotICAgc3BlY2lmaWMg bGljZW5zZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQuIEl0IGlzIHRoZQotICAg cmVzcG9uc2liaWxpdHkgb2YgYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24gY29udGVtcGxhdGlu ZyBleHBvcnQgdG8KLSAgIG9idGFpbiBzdWNoIGEgbGljZW5zZSBiZWZvcmUgZXhwb3J0aW5nLgot Ci0gICBXSVRISU4gVEhBVCBDT05TVFJBSU5ULCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBhbmQgZGlzdHJpYnV0ZQotICAgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRp b24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcwotICAgaGVyZWJ5IGdyYW50ZWQs IHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAot ICAgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlCi0gICBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBh bmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlCi0gICB1c2VkIGluIGFkdmVydGlzaW5n IG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKLSAgIHNvZnR3 YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gTS5JLlQuIG1h a2VzIG5vCi0gICByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMg c29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLgotICAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRo b3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KLQotICAgVXNlZCBmb3IgVGVsbmV0IEF1 dGhlbnRpY2F0aW9uIE9wdGlvbiwgVGVsbmV0IEVuY3J5cHRpb24gT3B0aW9uLCBhbmQKLSAgIEtl cmJlcm9zIChUTSkgYXV0aGVudGljYXRpb24gaW4gQy1LZXJtaXQsIEtlcm1pdCA5NSAoazk1LmV4 ZSwgazIuZXhlLAotICAgazk1Y3J5cHQuZGxsLCBrMmNyeXB0LmRsbCkKLQotICAgQ29weXJpZ2h0 IChjKSAxOTkxLCAxOTkzIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEuCi0gICBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cyBhcmUKLSAgIG1ldDoKLSAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAgICAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAgICAgICBkaXN0cmlidXRpb24uCi0gICAgMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCi0gICAgICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z2VtZW50OgotCi0gICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIFVuaXZlcnNpdHkgb2YKLSAgICAgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBj b250cmlidXRvcnMuCi0gICAgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBu b3IgdGhlIG5hbWVzIG9mIGl0cwotICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICAgICAgIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotICAgVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBg QVMgSVMnJyBBTkQKLSAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gICBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRP UlMKLSAgIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gICBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKLSAgIEJVU0lO RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLAotICAgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKLSAgIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKLSAgIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0gICBVc2VkIGZvciBUZWxuZXQg QXV0aGVudGljYXRpb24gT3B0aW9uLCBUZWxuZXQgRW5jcnlwdGlvbiBPcHRpb24sIGFuZAotICAg S2VyYmVyb3MgKFRNKSBhdXRoZW50aWNhdGlvbiBpbiBDLUtlcm1pdCwgS2VybWl0IDk1IChrOTUu ZXhlLCBrMi5leGUsCi0gICBrOTVjcnlwdC5kbGwsIGsyY3J5cHQuZGxsKQotCi0gICBDb3B5cmln aHQgKEMpIDE5OTUtMTk5NyBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkgQWxsIHJpZ2h0 cwotICAgcmVzZXJ2ZWQuCi0KLSAgIFRoaXMgcGFja2FnZSBpcyBhbiBERVMgaW1wbGVtZW50YXRp b24gd3JpdHRlbiBieSBFcmljIFlvdW5nCi0gICAoZWF5QGNyeXB0c29mdC5jb20pLiBUaGUgaW1w bGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybQotICAgd2l0aCBNSVQncyBs aWJkZXMuCi0KLSAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24t Y29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy ZSBhaGVhcmVkIHRvLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXBwbHkKLSAgIHRvIGFsbCBj b2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLgotCi0gICBDb3B5cmlnaHQgcmVtYWlucyBF cmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotICAgdGhl IGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBh IHByb2R1Y3QsCi0gICBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbiBhcyB0 aGUgYXV0aG9yIG9mIHRoYXQgdGhlIFNTTAotICAgbGlicmFyeS4gVGhpcyBjYW4gYmUgaW4gdGhl IGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbQotICAgc3RhcnR1cCBvciBpbiBk b2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUKLSAgIHBh Y2thZ2UuCi0KLSAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICAgbWV0OgotICAgIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0 IG5vdGljZSwKLSAgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLgotICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgICAg IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot ICAgICAgIGRpc3RyaWJ1dGlvbi4KLSAgICAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSAgICAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6IFRoaXMgcHJvZHVjdAotICAgICAg IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0 LmNvbSkKLQotICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMg SVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAgIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gICBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gICBE SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SCi0gICBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gICBEQU1BR0VTIChJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICAgT1Ig U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCi0gICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKLSAgIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQot ICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSAgIFRoZSBsaWNlbnNlIGFuZCBkaXN0 cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uCi0gICBv ciBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gaS5lLiB0aGlzIGNv ZGUgY2Fubm90Ci0gICBzaW1wbHkgYmUgY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0 cmlidXRpb24gbGljZW5zZSBbaW5jbHVkaW5nCi0gICB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLl0K LQotICAgVGhlIHJlYXNvbiBiZWhpbmQgdGhpcyBiZWluZyBzdGF0ZWQgaW4gdGhpcyBkaXJlY3Qg bWFubmVyIGlzIHBhc3QKLSAgIGV4cGVyaWVuY2UgaW4gY29kZSBzaW1wbHkgYmVpbmcgY29waWVk IGFuZCB0aGUgYXR0cmlidXRpb24gcmVtb3ZlZCBmcm9tCi0gICBpdCBhbmQgdGhlbiBiZWluZyBk aXN0cmlidXRlZCBhcyBwYXJ0IG9mIG90aGVyIHBhY2thZ2VzLiBUaGlzCi0gICBpbXBsZW1lbnRh dGlvbiB3YXMgYSBub24tdHJpdmlhbCBhbmQgdW5wYWlkIGVmZm9ydC4KLQotICAgVXNlZCBERVMg ZW5jcnlwdGlvbiBpbiBLZXJtaXQgOTUgKGs5NWNyeXB0LmRsbCwgazJjcnlwdC5kbGwpCi0gICAg IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwotCi0gKiBUaGlzIGlzIHZlcnNpb24gMS4xIG9mIENyeXB0b0xpYgotICoKLSAq IFRoZSBhdXRob3JzIG9mIHRoaXMgc29mdHdhcmUgYXJlIEphY2sgTGFjeSwgRG9uIE1pdGNoZWxs IGFuZCBNYXR0IEJsYXplCi0gKiAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAxOTkxLCAxOTky LCAxOTkzLCAxOTk0LCAxOTk1IGJ5IEFUJlQuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwg YW5kIG1vZGlmeSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgZmVlCi0gKiBpcyBoZXJlYnkgZ3JhbnRl ZCwgcHJvdmlkZWQgdGhhdCB0aGlzIGVudGlyZSBub3RpY2UgaXMgaW5jbHVkZWQgaW4KLSAqIGFs bCBjb3BpZXMgb2YgYW55IHNvZnR3YXJlIHdoaWNoIGlzIG9yIGluY2x1ZGVzIGEgY29weSBvcgot ICogbW9kaWZpY2F0aW9uIG9mIHRoaXMgc29mdHdhcmUgYW5kIGluIGFsbCBjb3BpZXMgb2YgdGhl IHN1cHBvcnRpbmcKLSAqIGRvY3VtZW50YXRpb24gZm9yIHN1Y2ggc29mdHdhcmUuCi0gKgotICog Tk9URToKLSAqIFNvbWUgb2YgdGhlIGFsZ29yaXRobXMgaW4gY3J5cHRvbGliIG1heSBiZSBjb3Zl cmVkIGJ5IHBhdGVudHMuCi0gKiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHVzZXIg dG8gZW5zdXJlIHRoYXQgYW55IHJlcXVpcmVkCi0gKiBsaWNlbnNlcyBhcmUgb2J0YWluZWQuCi0g KgotICoKLSAqIFNPTUUgUEFSVFMgT0YgQ1JZUFRPTElCIE1BWSBCRSBSRVNUUklDVEVEIFVOREVS IFVOSVRFRCBTVEFURVMgRVhQT1JUCi0gKiBSRUdVTEFUSU9OUy4KLSAqCi0gKgotICogVEhJUyBT T0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9S IElNUExJRUQKLSAqIFdBUlJBTlRZLiAgSU4gUEFSVElDVUxBUiwgTkVJVEhFUiBUSEUgQVVUSE9S UyBOT1IgQVQmVCBNQUtFIEFOWQotICogUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgQU5Z IEtJTkQgQ09OQ0VSTklORyBUSEUgTUVSQ0hBTlRBQklMSVRZCi0gKiBPRiBUSElTIFNPRlRXQVJF IE9SIElUUyBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgotCi0gICBVc2VkIGZv ciBCaWcgTnVtYmVyIGxpYnJhcnkgaW4gS2VybWl0IDk1IChrOTVjcnlwdC5kbGwsIGsyY3J5cHQu ZGxsKS4KLQotICAgWyBbNjUyXVRvcCBdIFsgWzY1M11DLUtlcm1pdCBdIFsgWzY1NF1LZXJtaXQg SG9tZSBdCi0gICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwotCi0gICBDS0VSTUlUNzAuSFRNIC8gVGhlIEtlcm1pdCBQ cm9qZWN0IC8gQ29sdW1iaWEgVW5pdmVyc2l0eSAvIDggRmViIDIwMDAgLwotICAgTGFzdCB1cGRh dGU6IDggQXVnIDIwMTEKLQotUmVmZXJlbmNlcwotCi0gICAxLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS8KLSAgIDIuIG1haWx0bzprZXJtaXRAY29sdW1iaWEuZWR1Ci0gICAzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotICAgNC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2s5NS5odG1sCi0gICA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdC5odG1sCi0gICA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tz Y3JpcHRzLmh0bWwKLSAgIDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdXJyZW50 Lmh0bWwKLSAgIDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC93aGF0c25ldy5odG1s Ci0gICA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZmFxLmh0bWwKLSAgMTAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0bWwKLSAgMTEuIGh0dHA6Ly93 d3cuYW1hem9uLmNvbS9ncC9wcm9kdWN0LzE1NTU1ODE2NDE/aWU9VVRGOCZ0YWc9YWxlaWRtb3Jl bGRvbS0yMCZsaW5rQ29kZT1hczImY2FtcD0xNzg5JmNyZWF0aXZlPTkzMjUmY3JlYXRpdmVBU0lO PTE1NTU1ODE2NDEKLSAgMTIuIG1haWx0bzprZXJtaXQtc3VwcG9ydEBjb2x1bWJpYS5lZHUKLSAg MTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KLSAgMTQuIGh0dHA6Ly93d3cua2Vy bWl0LXByb2plY3Qub3JnLwotICAxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5ueWMubnkudXMva2Vy bWl0LwotICAxNi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9DT1BZSU5HLlRY VAotICAxNy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2NtYWkuYwotICAx OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3h2Ci0gIDE5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSAgMjAuIGZ0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjYndyLnR4dAotICAyMS4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja3Vid3IudHh0Ci0gIDIyLiBmdHA6Ly9rZXJtaXQuY29s dW1iaWEuZWR1L2tlcm1pdC9mL2NrdmJ3ci50eHQKLSAgMjMuIGZ0cDovL2tlcm1pdC5jb2x1bWJp YS5lZHUva2VybWl0L2YvY2t1YndyLnR4dAotICAyNC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvZi9ja2VybWl0NzAudHh0Ci0gIDI1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9mL3NlY3VyaXR5LnR4dAotICAyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L3NlY3VyaXR5Lmh0bQotICAyNy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Zi9pa3NkLnR4dAotICAyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lrc2QuaHRt Ci0gIDI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3Vpa3NkLmh0bQotICAzMC4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi90ZWxuZXQudHh0Ci0gIDMxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdGVsbmV0Lmh0bQotICAzMi4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9DT1BZSU5HLlRYVAotICAzMy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2s5NS5odG1sCi0gIDM0LiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3Jn LwotICAzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gIDM2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeGkKLSAgMzcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4aWkKLSAgMzguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MAotICAzOS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxCi0gIDQwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMAotICA0MS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjEKLSAgNDIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yCi0gIDQzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMwotICA0NC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjQKLSAgNDUu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41Ci0gIDQ2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNS4xCi0g IDQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNS4y Ci0gIDQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEu NS4zCi0gIDQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDEuNS40Ci0gIDUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDEuNS41Ci0gIDUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDEuNgotICA1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3gxLjcKLSAgNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4MS44Ci0gIDU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDEuOQotICA1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3gxLjEwCi0gIDU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDEuMTEKLSAgNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4MS4xMS4xCi0gIDU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDEuMTEuMgotICA1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjExLjMKLSAgNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xMS40Ci0gIDYxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMTEuNQotICA2Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjExLjYKLSAgNjMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xMS43Ci0gIDY0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMTIKLSAgNjUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xMwotICA2Ni4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjE0Ci0gIDY3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMTUKLSAg NjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xNgot ICA2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjE3 Ci0gIDcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEu MTgKLSAgNzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 MS4xOQotICA3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3gxLjIwCi0gIDczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDEuMjEKLSAgNzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4MS4yMgotICA3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3gxLjIyLjEKLSAgNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4MS4yMi4yCi0gIDc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDEuMjIuMwotICA3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIyLjQKLSAgNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yMi41Ci0gIDgwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjIuNgotICA4MS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIyLjcKLSAgODIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yMi44Ci0gIDgzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjMKLSAgODQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yNAotICA4NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyCi0gIDg2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMAotICA4Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEKLSAgODguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjEKLSAgODku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjIKLSAg OTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjMK LSAgOTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4x LjQKLSAgOTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Mi4xLjUKLSAgOTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4Mi4xLjYKLSAgOTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Mi4xLjcKLSAgOTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4Mi4xLjgKLSAgOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Mi4xLjkKLSAgOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4Mi4xLjEwCi0gIDk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xMQotICA5OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTIKLSAxMDAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjEzCi0gMTAxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xNAotIDEwMi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTUKLSAxMDMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjE2Ci0gMTA0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMgotIDEwNS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjIuMQotIDEwNi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjIuMgotIDEw Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjMKLSAx MDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4zLjAK LSAxMDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4z LjEKLSAxMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Mi4zLjIKLSAxMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4Mi4zLjMKLSAxMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Mi4zLjQKLSAxMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4Mi4zLjUKLSAxMTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Mi4zLjYKLSAxMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4Mi40Ci0gMTE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDIuNQotIDExNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3gyLjYKLSAxMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Mi43Ci0gMTE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDIuNy4wCi0gMTIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuNy4xCi0gMTIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuNy4yCi0gMTIyLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuNy4zCi0gMTIzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuNy40Ci0gMTI0LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuNy40LjEKLSAxMjUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjQuMgotIDEyNi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjcuNC4zCi0gMTI3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuNy40LjQK LSAxMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43 LjQuNQotIDEyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3gyLjgKLSAxMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4Mi45Ci0gMTMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDIuOS4xCi0gMTMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDIuOS4yCi0gMTMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDIuMTAKLSAxMzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Mi4xMQotIDEzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3gyLjEyCi0gMTM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDIuMTMKLSAxMzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Mi4xNAotIDEzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3gyLjE1Ci0gMTM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDMKLSAxNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4My4xCi0gMTQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDMuMgotIDE0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3gzLjMKLSAxNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4My40Ci0gMTQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQKLSAxNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4wCi0gMTQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMQotIDE0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEuMQotIDE0OC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEuMgotIDE0OS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEuMwotIDE1MC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIKLSAxNTEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjEKLSAxNTIuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjEuMQotIDE1My4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMS4yCi0gMTU0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi4xLjMK LSAxNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4y LjIKLSAxNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4yLjIuMQotIDE1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g0LjIuMi4yCi0gMTU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDQuMi4zCi0gMTU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDQuMi4zLjEKLSAxNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NC4yLjMuMgotIDE2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuNAotIDE2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuNQotIDE2My4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuNgotIDE2NC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuNwotIDE2NS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuOAotIDE2Ni4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuOC4xCi0gMTY3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi44LjIKLSAxNjgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjguMwot IDE2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIu OC40Ci0gMTcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDQuMwotIDE3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjMuMQotIDE3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g0LjMuMgotIDE3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g0LjMuMwotIDE3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjMuNAotIDE3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjQKLSAxNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NC40LjEKLSAxNzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NC40LjEuMQotIDE3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjQuMS4yCi0gMTc5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNC4yCi0gMTgwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNC4yLjEKLSAxODEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC40LjIuMS4xCi0gMTgyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNC4yLjEuMgotIDE4 My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjQuMi4y Ci0gMTg0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu NQotIDE4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0 LjUuMQotIDE4Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjUuMgotIDE4Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g0LjUuMi4xCi0gMTg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDQuNS4yLjIKLSAxODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NC41LjMKLSAxOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NC41LjQKLSAxOTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4NC42Ci0gMTkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNwotIDE5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjcuMQotIDE5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjcuMgotIDE5NS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjcuMwotIDE5Ni4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjgKLSAxOTcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC44LjEKLSAxOTguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC44LjIKLSAxOTkuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45Ci0gMjAwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOS4xCi0gMjAxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOS4yCi0gMjAyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOS4zCi0gMjAz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTAKLSAy MDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMQot IDIwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEx LjEKLSAyMDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4xMS4yCi0gMjA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuMTEuMwotIDIwOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g0LjExLjQKLSAyMDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4xMS41Ci0gMjEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuMTEuNgotIDIxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEyCi0gMjEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTMKLSAyMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xNAotIDIxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE1Ci0gMjE1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTYKLSAyMTYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xNwotIDIxNy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE3LjEKLSAyMTguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xNy4yCi0gMjE5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTgKLSAyMjAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xOQotIDIyMS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIwCi0gMjIyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjAuMQotIDIy My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIwLjIK LSAyMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4y MC4yLjEKLSAyMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4NC4yMC4yLjIKLSAyMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4NC4yMC4yLjMKLSAyMjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NC4yMC4yLjQKLSAyMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMC4yLjUKLSAyMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMC4zCi0gMjMwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjEKLSAyMzEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMgotIDIzMi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIyLjEKLSAyMzMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMi4yCi0gMjM0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjIuMwotIDIzNS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIyLjQKLSAy MzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMi41 Ci0gMjM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu MjIuNgotIDIzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjIyLjcKLSAyMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4NC4yMi44Ci0gMjQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDQuMjMKLSAyNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4yNAotIDI0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjI1Ci0gMjQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDUKLSAyNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NS4wCi0gMjQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDUuMQotIDI0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g1LjIKLSAyNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NS4zCi0gMjQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDUuMy4xCi0gMjQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDUuMy4yCi0gMjUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDUuNAotIDI1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g1LjUKLSAyNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NS42Ci0gMjUzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDUuNwotIDI1NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2Ci0gMjU1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuMAotIDI1Ni4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjEKLSAyNTcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ni4yCi0gMjU4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuMwotIDI1OS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjQKLSAyNjAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ni41Ci0gMjYxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNgotIDI2Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYuMQotIDI2My4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYuMgotIDI2NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYuMgotIDI2NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYuMwotIDI2Ni4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYuNAotIDI2 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYuNQot IDI2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYu NS4xCi0gMjY5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDYuNi41LjIKLSAyNzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Ni42LjUuMwotIDI3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g2LjYuNS40Ci0gMjcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDYuNi41LjUKLSAyNzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4Ni43Ci0gMjc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcKLSAyNzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4wCi0gMjc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMQotIDI3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEuMQotIDI3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEuMgotIDI3OS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEuMwotIDI4MC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEuNAotIDI4MS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjIKLSAyODIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4zCi0gMjgzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNAotIDI4NC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjUKLSAyODUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny42Ci0gMjg2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNwotIDI4Ny4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjgKLSAyODguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny45Ci0gMjg5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuOS4xCi0gMjkwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuOS4yCi0gMjkx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAKLSAy OTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC4x Ci0gMjkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu MTAuMgotIDI5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g3LjEwLjMKLSAyOTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Ny4xMC40Ci0gMjk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDcuMTAuNQotIDI5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g3LjEwLjYKLSAyOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ny4xMC43Ci0gMjk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuOAotIDMwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjkKLSAzMDEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC4xMAotIDMwMi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjExCi0gMzAzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTIKLSAzMDQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMwotIDMwNS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjE0Ci0gMzA2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTUKLSAzMDcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xNgotIDMwOC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjE3Ci0gMzA5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTgKLSAz MTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xOQot IDMxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjIw Ci0gMzEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu MjAuMQotIDMxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g3LjIwLjIKLSAzMTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Ny4yMQotIDMxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g3LjIyCi0gMzE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDcuMjMKLSAzMTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Ny4yNAotIDMxOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g3LjI1Ci0gMzE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDcuMjYKLSAzMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ny4yNi4xCi0gMzIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMjYuMgotIDMyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjI3Ci0gMzIzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDgKLSAzMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4OQotIDMyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g5LjAKLSAzMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4OS4xCi0gMzI3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDkuMgotIDMyOC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g5LjMKLSAzMjkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MTAKLSAzMzAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4aWlpCi0gMzMxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeGlpaS4xCi0gMzMyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeGlpaS4xLjEKLSAzMzMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4aWlpLjEuMgotIDMzNC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3hpaWkuMS4yLjEKLSAz MzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4aWlpLjEu Mi4yCi0gMzM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eGlpaS4xLjIuMwotIDMzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3hpaWkuMgotIDMzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3hpdgotIDMzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3h2Ci0gMzQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5o dG0KLSAzNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2JyZXZpZXdzLmh0bWwK LSAzNDIuIGh0dHA6Ly93d3cuYmh1c2EuY29tLwotIDM0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L21hbnVhbHMuaHRtbCNja2RlCi0gMzQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvbWFudWFscy5odG1sI2t0YgotIDM0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L25ld3MuaHRtbAotIDM0Ni4gbmV3czpjb21wLnByb3RvY29scy5rZXJtaXQuYW5ub3Vu Y2UKLSAzNDcuIG5ld3M6Y29tcC5wcm90b2NvbHMua2VybWl0Lm1pc2MKLSAzNDguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDM0OS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0Ci0gMzUwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMwotIDM1MS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIzCi0gMzUyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNS4xCi0gMzUzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNQotIDM1NC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjcuMQotIDM1NS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkuCi0gMzU2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSAzNTcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny45LjIKLSAzNTguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xNQotIDM1OS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g5LjEKLSAzNjAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS42Ci0gMzYxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNAotIDM2Mi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkuMQotIDM2My4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI21qZAotIDM2NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI21qZAotIDM2NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKLSAzNjYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDM2Ny4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gMzY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNQotIDM2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEyCi0gMzcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNQotIDM3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkuMQotIDM3Mi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYuNQotIDM3My4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKLSAzNzQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xOAotIDM3NS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjQKLSAzNzYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xNQotIDM3Ny4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjMKLSAzNzguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4zCi0gMzc5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuNwotIDM4MC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEKLSAzODEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45LjEKLSAzODIu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjY2ZnLnR4dAotIDM4My4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2NjZmcudHh0Ci0gMzg0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjIuNAotIDM4NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIyLjUKLSAzODYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDM4Ny4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIyLjUKLSAzODguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMgotIDM4OS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTYKLSAzOTAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43Ci0gMzkx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMy41Ci0g MzkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNQot IDM5My4gaHR0cDovL3d3dy50ZWxlZm9uaWNhLmVzL2NhbWJpb2RlbnVtZXJhY2lvbi8KLSAzOTQu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny41Ci0gMzk1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSAzOTYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4yLjIKLSAzOTcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjExCi0gMzk4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xMwotIDM5 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTIK LSA0MDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDQwMS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMQotIDQwMi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gNDAzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSA0MDQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjcKLSA0MDUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjYKLSA0MDYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDQwNy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvZi90ZWxuZXQudHh0Ci0gNDA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvdGVsbmV0Lmh0bQotIDQwOS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi90 ZWxuZXQudHh0Ci0gNDEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdGVsbmV0Lmh0 bQotIDQxMS4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMTU3Mi50eHQKLSA0MTIuIGZ0 cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzc3OS50eHQKLSA0MTMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDQxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEwCi0gNDE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuOAotIDQxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjUKLSA0MTcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMAotIDQxOC4gaHR0cDovL3d3dy5wc3kudXEu b3ouYXUvfmZ0cC9DcnlwdG8vCi0gNDE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv c2VjdXJpdHkuaHRtCi0gNDIwLiBodHRwOi8vc3JwLnN0YW5mb3JkLmVkdS9zcnAvCi0gNDIxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuNy4xLAotIDQy Mi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2NjZmcudHh0Ci0gNDIzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtCi0gNDI0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSA0MjUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43Ci0gNDI2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMAotIDQyNy4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvZi9ja3VpbnMudHh0Ci0gNDI4LiBmdHA6Ly9rZXJtaXQuY29sdW1i aWEuZWR1L2tlcm1pdC9mL2NrdWJ3ci50eHQKLSA0MjkuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5l ZHUva2VybWl0L2YvY2t1aW5zLnR4dAotIDQzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2lrc2QuaHRtbCN4NC4yCi0gNDMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv aWtzZC5odG1sCi0gNDMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDQuMi44LjEKLSA0MzMuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzE5NDUu dHh0Ci0gNDM0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDEuNQotIDQzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3gzLjIKLSA0MzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4My4yCi0gNDM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSA0 MzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDQzOS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g1LjQKLSA0NDAuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2t1YndyLnR4dAotIDQ0MS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEwCi0gNDQyLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4xCi0gNDQzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4zCi0gNDQ0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMwotIDQ0NS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEwCi0gNDQ2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTEKLSA0 NDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xNQot IDQ0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIu NAotIDQ0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0 LjcKLSA0NTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4yLjMKLSA0NTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4NC4yLjEuMwotIDQ1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRt Ci0gNDUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu Mi4yCi0gNDU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDEuNQotIDQ1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjIuOC4yCi0gNDU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDQuMwotIDQ1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g0LjEwCi0gNDU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDQuMTEKLSA0NTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4xNQotIDQ2MC4gaHR0cDovL3d3dy50ZWxzdHJhLmNvbS5hdS9kb2NzL1BH UC8KLSA0NjEuIGh0dHA6Ly93d3cudGVsc3RyYS5jb20uYXUvZG9jcy9QR1AvcGdwZG9jMi9wZ3Bk b2MyXzE3Lmh0bWwKLSA0NjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0 eS5odG0KLSA0NjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4Mi43Ci0gNDY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSA0 NjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xNAot IDQ2Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIz Ci0gNDY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu NwotIDQ2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gNDY5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSA0NzAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45Ci0gNDcxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSA0NzIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjQKLSA0NzMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4zCi0gNDc0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNS41Ci0gNDc1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNQotIDQ3Ni4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKLSA0NzcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjQKLSA0NzguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45Ci0gNDc5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNS40Ci0gNDgwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNS41Ci0gNDgxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSA0ODIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDQ4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjUKLSA0ODQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS42Ci0gNDg1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAKLSA0ODYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC4xMQotIDQ4Ny4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjYKLSA0ODguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjIKLSA0ODkuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMQotIDQ5MC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjUuNAotIDQ5MS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkuMQotIDQ5Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjAuNgotIDQ5 My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIKLSA0 OTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xCi0g NDk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4x Ci0gNDk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSA0OTcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41Ci0gNDk4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi4yCi0gNDk5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4xCi0g NTAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMgot IDUwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEw Ci0gNTAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu Mi4yCi0gNTAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDQuNy4xCi0gNTA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuMgotIDUwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g0LjEwCi0gNTA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDEuMTEuNQotIDUwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjAuNgotIDUwOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjExCi0gNTA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuOS4xCi0gNTEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDQuMTEuMwotIDUxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKLSA1MTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45Ci0gNTEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNS4xCi0gNTE0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAKLSA1MTUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC41Ci0gNTE2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuMwotIDUxNy4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjUKLSA1MTguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDUxOS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjMKLSA1MjAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMAotIDUyMS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjMKLSA1MjIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMAotIDUyMy4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE1Ci0gNTI0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTgKLSA1MjUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMAotIDUyNi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIwCi0gNTI3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjAKLSA1Mjgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xOQotIDUy OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE2Ci0g NTMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTkK LSA1MzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4y MC4yLjMKLSA1MzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4MS41Ci0gNTMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDYuNi41LjQKLSA1MzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4NC4yMi4yCi0gNTM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDQuMjIuMwotIDUzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrYjIuaHRtCi0gNTM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0K LSA1MzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4OS4z Ci0gNTM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDUu Mi4xCi0gNTQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDQuNS4xCi0gNTQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuNS4yCi0gNTQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDYuNgotIDU0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3hpaWkKLSA1NDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4aWlpCi0gNTQ1LiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMxNDg5LnR4 dAotIDU0Ni4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMjMxOS50eHQKLSA1NDcuIGh0 dHA6Ly93d3cudW5pY29kZS5vcmcvCi0gNTQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDYuNi4yCi0gNTQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi41LjEKLSA1NTAuIGZ0cDovL2Z0cC5pc2kuZWR1L2lu LW5vdGVzL3JmYzI2NDAudHh0Ci0gNTUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDYuNi4yCi0gNTUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDYuMAotIDU1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g2LjUKLSA1NTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4Ni40Ci0gNTU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tiMi5odG0KLSA1NTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4yMQotIDU1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g2LjUKLSA1NTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4Mi44Ci0gNTU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDcuNwotIDU2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g3LjIKLSA1NjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4MS4xOQotIDU2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKLSA1NjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xCi0gNTY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMgotIDU2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEKLSA1NjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yCi0gNTY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xMQotIDU2OC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEwCi0gNTY5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjZmVycnN0cmluZwotIDU3MC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuNQotIDU3MS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTAKLSA1NzIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4OS4xCi0gNTczLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMjMKLSA1NzQu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4yMwotIDU3 NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIyCi0g NTc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNgot IDU3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjIz Ci0gNTc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu MjQKLSA1NzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Ny4yNAotIDU4MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjIuMwotIDU4MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrOTAuaHRtbAot IDU4Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEy Ci0gNTgzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu OQotIDU4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gNTg1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTEuMwotIDU4 Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjExLjMK LSA1ODcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny41 Ci0gNTg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu MTAuNwotIDU4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g3LjEwLjcKLSA1OTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4NC4yLjguNAotIDU5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjIuNQotIDU5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g3LjgKLSA1OTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NC45LjEKLSA1OTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2IyLmh0bQotIDU5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g3LjE5Ci0gNTk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDcuMTYKLSA1OTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Ny45LjEKLSA1OTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4Ny41Ci0gNTk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDcuMwotIDYwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g0LjExLjMKLSA2MDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4NC41LjEKLSA2MDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMAotIDYwMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjEwCi0gNjA0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNQotIDYwNS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjIzCi0gNjA2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuNwotIDYwNy4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjcKLSA2MDguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMS4zCi0gNjA5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuMTEKLSA2 MTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45Ci0g NjExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAu MwotIDYxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3 LjMKLSA2MTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Ny45LjIKLSA2MTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDYx NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE3LjIK LSA2MTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4y MgotIDYxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0 LjcuMQotIDYxOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3gxLjIyCi0gNjE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuMwotIDYyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g0LjkKLSA2MjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4MS4yMgotIDYyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3gxLjYKLSA2MjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4Ny41Ci0gNjI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDcuNQotIDYyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g3LjE5Ci0gNjI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDQuOS4xCi0gNjI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDkuMwotIDYyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g3LjUKLSA2MjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2IyLmh0bQotIDYzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sCi0gNjMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDkKLSA2MzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4Ny40Ci0gNjMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwKLSA2MzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4 OQotIDYzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3 LjIwLjIKLSA2MzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4Ny4xMC41Ci0gNjM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDcuMTAuOQotIDYzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3gxLjEwCi0gNjM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDEuNQotIDY0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjcuMQotIDY0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2lrc2QuaHRtbAotIDY0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g3LjE5Ci0gNjQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDQuMTAKLSA2NDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4xMQotIDY0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjMKLSA2NDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9n a2VybWl0Lmh0bWwKLSA2NDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4NC4yMAotIDY0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2drZXJt aXQuaHRtbAotIDY0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0g NjUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMwot IDY1MS4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKLSA2NTIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN0b3AKLSA2NTMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA2NTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9pbmRleC5odG1sCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja2VybWl0ODAudHh0IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja2VybWl0ODAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx OTZiNjhiLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4z MDIvY2tlcm1pdDgwLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEwMjg2ICswLDAgQEAKLQotICAg WzFdVGhlIENvbHVtYmlhIENyb3duIFRoZSBLZXJtaXQgUHJvamVjdCB8IENvbHVtYmlhIFVuaXZl cnNpdHkKLSAgIDYxMiBXZXN0IDExNXRoIFN0cmVldCwgTmV3IFlvcmsgTlkgMTAwMjUgVVNBIG8g WzJda2VybWl0QGNvbHVtYmlhLmVkdQotICAgLi4uc2luY2UgMTk4MQotICAgWzNdSG9tZSBbNF1L ZXJtaXQgOTUgWzVdQy1LZXJtaXQgWzZdU2NyaXB0cyBbN11DdXJyZW50IFs4XU5ldyBbOV1GQVEK LSAgIFsxMF1TdXBwb3J0Ci0KLUMtS2VybWl0IDguMCBVcGRhdGUgTm90ZXMKLQotICAgWyBbMTFd Q29udGVudHMgXSBbIFsxMl1DLUtlcm1pdCBdIFsgWzEzXUtlcm1pdCBIb21lIF0KLQotU2Vjb25k IFN1cHBsZW1lbnQgdG8gWzE0XVVzaW5nIEMtS2VybWl0LCAybmQgRWRpdGlvbgotCi1Gb3IgQy1L ZXJtaXQgOC4wCi0KLSAgIEFzIG9mIEMtS2VybWl0IHZlcnNpb246IDguMC4yMTEKLSAgIERhdGUg b2YgQy1LZXJtaXQgcmVsZWFzZTogMTAgQXByaWwgMjAwMwotICAgVGhpcyBmaWxlIGxhc3QgdXBk YXRlZDogTW9uIFNlcCAxMyAwODo1MjozNiAyMDEwCi0KLSAgICAgKiBJRiBZT1UgQVJFIFJFQURJ TkcgQSBQTEFJTi1URVhUIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCwgbm90ZSB0aGF0Ci0gICAg ICAgaXQgaXMgYSBwbGFpbi10ZXh0IGR1bXAgb2YgYSBXZWIgcGFnZS4gWW91IGNhbiB2aXNpdCB0 aGUgb3JpZ2luYWwKLSAgICAgICAoYW5kIHBvc3NpYmx5IG1vcmUgdXAtdG8tZGF0ZSkgV2ViIHBh Z2UgaGVyZToKLSAgWzE1XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbAotCi0gICAgICogSWYgeW91IGFyZSByZWFkaW5nIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhp cyBmaWxlIHdpdGggYSBHVUkgV2ViCi0gICAgICAgYnJvd3NlciwgdGhlIGZlYXR1cmVzIGFkZGVk IHNpbmNlIEMtS2VybWl0IDguMC4yMDEgYXJlIHNob3duIGluIHJlZAotICAgICAgIGlmIHlvdXIg YnJvd3NlciBhbmQgbW9uaXRvciBwZXJtaXQuIEZlYXR1cmVzIHRoYXQgd2VyZSBuZXcgdG8KLSAg ICAgICB2ZXJzaW9ucyA4LjAuMjAwIGFuZCAyMDEgYXJlIGluIGJsYWNrLgotCi1BdXRob3JzOiBG cmFuayBkYSBDcnV6IGFuZCBDaHJpc3RpbmUgTS4gR2lhbm9uZQotQWRkcmVzczogVGhlIEtlcm1p dCBQcm9qZWN0Ci0gICAgICAgICBDb2x1bWJpYSBVbml2ZXJzaXR5Ci0gICAgICAgICA2MTIgV2Vz dCAxMTV0aCBTdHJlZXQKLSAgICAgICAgIE5ldyBZb3JrIE5ZIDEwMDI1LTc3OTkKLSAgICAgICAg IFVTQQotRmF4OiAgICAgKzEgKDIxMikgNjYyLTY0NDIKLUUtTWFpbDogIFsxNl1rZXJtaXQtc3Vw cG9ydEBjb2x1bWJpYS5lZHUKLVdlYjogICAgIFsxN11odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvCi1PcjogICAgICBbMThdaHR0cDovL3d3dy5rZXJtaXQtcHJvamVjdC5vcmcvCi1Pcjog ICAgICBbMTldaHR0cDovL3d3dy5jb2x1bWJpYS5ueWMubnkudXMva2VybWl0LwotCi1OT1RJQ0VT Ci0KLSAgIFRoaXMgZG9jdW1lbnQ6Ci0gICAgICAgICAgQ29weXJpZ2h0IO+/vSAxOTk3LCAyMDAy LCBGcmFuayBkYSBDcnV6IGFuZCBDaHJpc3RpbmUgTS4gR2lhbm9uZS4KLSAgICAgICAgICBBbGwg cmlnaHRzIHJlc2VydmVkLgotCi0gICBLZXJtaXQgOTU6Ci0gICAgICAgICAgQ29weXJpZ2h0IO+/ vSAxOTk1LCAyMDAyLCBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZQotICAg ICAgICAgIENpdHkgb2YgTmV3IFlvcmsuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgIEMtS2Vy bWl0OgotICAgICAgICAgIENvcHlyaWdodCDvv70gMTk4NSwgMjAwMiwKLSAgICAgICAgICBUcnVz dGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLiBBbGwK LSAgICAgICAgICByaWdodHMgcmVzZXJ2ZWQuIFNlZSB0aGUgQy1LZXJtaXQgWzIwXUNPUFlJTkcu VFhUIGZpbGUgb3IgdGhlCi0gICAgICAgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIFsyMV1ja2Nt YWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kCi0gICAgICAgICAgcGVybWlzc2lvbnMuCi0K LSAgIFdoZW4gS2VyYmVyb3MoVE0pIGFuZC9vciBTUlAoVE0pIChTZWN1cmUgUmVtb3RlIFBhc3N3 b3JkKSBhbmQvb3IKLSAgICAgICAgICBTU0wvVExTIHByb3RvY29sIGFyZSBpbmNsdWRlZDoKLSAg ICAgICAgICBQb3J0aW9ucyBDb3B5cmlnaHQg77+9IDE5OTAsIE1hc3NhY2h1c2V0dHMgSW5zdGl0 dXRlIG9mCi0gICAgICAgICAgVGVjaG5vbG9neS4KLSAgICAgICAgICBQb3J0aW9ucyBDb3B5cmln aHQg77+9IDE5OTEsIDE5OTMgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZgotICAgICAgICAg IENhbGlmb3JuaWEuCi0gICAgICAgICAgUG9ydGlvbnMgQ29weXJpZ2h0IO+/vSAxOTkxLCAxOTky LCAxOTkzLCAxOTk0LCAxOTk1IGJ5IEFUJlQuCi0gICAgICAgICAgUG9ydGlvbnMgQ29weXJpZ2h0 IO+/vSAxOTk3LCBTdGFuZm9yZCBVbml2ZXJzaXR5LgotICAgICAgICAgIFBvcnRpb25zIENvcHly aWdodCDvv70gMTk5NS0xOTk3LCBFcmljIFlvdW5nIDxlYXlAY3J5cHRvc29mdC5jb20+LgotCi0g ICBGb3IgdGhlIGZ1bGwgdGV4dCBvZiB0aGUgdGhpcmQtcGFydHkgY29weXJpZ2h0IG5vdGljZXMs IHNlZQotICAgWzIyXUFwcGVuZGl4IFYuCi0KLVdIQVQgSVMgSU4gVEhJUyBGSUxFCi0KLSAgIFRo aXMgZmlsZSBsaXN0cyBjaGFuZ2VzIG1hZGUgdG8gQy1LZXJtaXQgc2luY2UgdmVyc2lvbiA3LjAg d2FzIHJlbGVhc2VkCi0gICBpbiBKYW51YXJ5IDIwMDAuIFVzZSB0aGlzIGZpbGUgYXMgYSBzdXBw bGVtZW50IHRvOgotCi0gICAgICogVGhlIHNlY29uZCBlZGl0aW9uIG9mIFsyM11Vc2luZyBDLUtl cm1pdDsgYW5kOgotICAgICAqIFRoZSBbMjRdQy1LZXJtaXQgNy4wIFVwZGF0ZSBOb3Rlcy4gQWxz byBhdmFpbGFibGUgaW4gcGxhaW4tdGV4dAotICAgICAgIGZvcm0gYXMgWzI1XWNrZXJtaXQ3MC50 eHQuCi0KLSAgIHVudGlsIHRoZSB0aGlyZCBlZGl0aW9uIG9mIFVzaW5nIEMtS2VybWl0IGlzIHB1 Ymxpc2hlZC4gV2UgYXBvbG9naXplCi0gICBmb3IgdGhlIHNjYXR0ZXJlZCBkb2N1bWVudGF0aW9u IGFuZCB3aWxsIGNvbnNvbGlkYXRlIGl0IHdoZW4gd2UgYXJlCi0gICBhYmxlLgotCi1BRERJVElP TkFMIEZJTEVTCi0KLSAgIFNldmVyYWwgb3RoZXIgZmlsZXMgYWNjb21wYW55IHRoaXMgbmV3IEtl cm1pdCByZWxlYXNlOgotCi0gICBbMjZdY2t1dHV0b3IuaHRtbAotICAgICAgICAgIEMtS2VybWl0 IFR1dG9yaWFsIChmb3IgVW5peCkuIEFsc28gZGlzdHJpYnV0ZWQgaW4gTnJvZmYgZm9ybSBhcwot ICAgICAgICAgIFsyN11ja3VrZXIubnIsIHRoZSBVbml4IEMtS2VybWl0IG1hbnVhbCBwYWdlLgot Ci0gICBbMjhdc2VjdXJpdHkuaHRtCi0gICAgICAgICAgRGlzY3Vzc2lvbiBvZiBLZXJtaXQncyBu ZXcgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5cHRpb24KLSAgICAgICAgICBmZWF0dXJlcywgdXBk YXRlZCBmb3IgQy1LZXJtaXQgOC4wLgotCi0gICBbMjlddGVsbmV0Lmh0bQotICAgICAgICAgIERl dGFpbGVkIGRvY3VtZW50YXRpb24gb2YgS2VybWl0J3MgVGVsbmV0IGNsaWVudCwgdXBkYXRlZCBm b3IKLSAgICAgICAgICBDLUtlcm1pdCA4LjAuCi0KLSAgIFszMF1mdHBzY3JpcHRzLmh0bWwKLSAg ICAgICAgICBUdXRvcmlhbDogV3JpdGluZyBGVFAgYXV0b21hdGlvbiBzY3JpcHRzCi0KLSAgIFsz MV1ja2Nid3IuaHRtbAotICAgICAgICAgIFBsYXRmb3JtLWluZGVwZW5kZW50IEMtS2VybWl0IGhp bnRzIGFuZCB0aXBzLiBBbHNvIGRpc3RyaWJ1dGVkCi0gICAgICAgICAgaW4gcGxhaW4gdGV4dCBm b3JtIGFzIFszMl1ja2Nid3IudHh0Ci0KLSAgIFszM11ja3Vid3IuaHRtbAotICAgICAgICAgIFVu aXgtc3BlY2lmaWMgQy1LZXJtaXQgaGludHMgYW5kIHRpcHMuIEFsc28gZGlzdHJpYnV0ZWQgaW4g cGxhaW4KLSAgICAgICAgICB0ZXh0IGZvcm0gYXMgWzM0XWNrdWJ3ci50eHQuCi0KLSAgIFszNV1j a3Zid3IuaHRtbAotICAgICAgICAgIFZNUy1zcGVjaWZpYyBDLUtlcm1pdCBoaW50cyBhbmQgdGlw cy4gQWxzbyBkaXN0cmlidXRlZCBpbiBwbGFpbgotICAgICAgICAgIHRleHQgZm9ybSBhcyBbMzZd Y2t2YndyLnR4dC4KLQotICAgWzM3XWNrdWlucy5odG1sCi0gICAgICAgICAgVW5peCBDLUtlcm1p dCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLiBBbHNvIGRpc3RyaWJ1dGVkIGluCi0gICAgICAg ICAgcGxhaW4gdGV4dCBmb3JtIGFzIFszOF1ja3VpbnMudHh0LgotCi0gICBbMzldY2t2aW5zLmh0 bWwKLSAgICAgICAgICBWTVMgQy1LZXJtaXQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4gQWxz byBkaXN0cmlidXRlZCBpbgotICAgICAgICAgIHBsYWluIHRleHQgZm9ybSBhcyBbNDBdY2t2aW5z LnR4dC4KLQotICAgWzQxXWNrY2NmZy5odG1sCi0gICAgICAgICAgQ29tcGlsZS10aW1lIGNvbmZp Z3VyYXRpb24gb3B0aW9ucy4gQWxzbyBkaXN0cmlidXRlZCBpbiBwbGFpbgotICAgICAgICAgIHRl eHQgZm9ybSBhcyBbNDJdY2tjY2ZnLnR4dC4KLQotICAgWzQzXWNrY3BsbS5odG1sCi0gICAgICAg ICAgQy1LZXJtaXQgUHJvZ3JhbSBMb2dpYyBNYW51YWwuIEFsc28gZGlzdHJpYnV0ZWQgaW4gcGxh aW4gdGV4dAotICAgICAgICAgIGZvcm0gYXMgWzQ0XWNrY3BsbS50eHQuCi0KLSAgIFs0NV1pa3Nk Lmh0bWwKLSAgICAgICAgICBJbnRlcm5ldCBLZXJtaXQgU2VydmljZSBBZG1pbmlzdHJhdG9ycyBH dWlkZSBmb3IgVW5peC4KLQotICAgWzQ2XXNrZXJtaXQuaHRtbAotICAgICAgICAgIEMtS2VybWl0 IGFzIGFuIFNTSCBTdWJzeXN0ZW0gKFNGVFAgc2VydmVyIHJlcGxhY2VtZW50KS4KLQotICAgWyBb NDddVG9wIF0gWyBbNDhdQy1LZXJtaXQgXSBbIFs0OV1LZXJtaXQgSG9tZSBdCi0KLUNPTlRFTlRT Ci0KLSAgICAgWzUwXTAuIFdIQVQnUyBORVcKLSAgICAgWzUxXTEuIEZJWEVTIFNJTkNFIFZFUlNJ T04gNy4wLjE5NgotICAgICBbNTJdMi4gU1NIIEFORCBIVFRQCi0gICAgICAgICBbNTNdMi4xLiBT U0ggQ29ubmVjdGlvbnMKLSAgICAgICAgIFs1NF0yLjIuIEhUVFAgQ29ubmVjdGlvbnMKLSAgICAg ICAgICAgIFs1NV0yLjIuMS4gSFRUUCBDb21tYW5kIFN3aXRjaGVzCi0gICAgICAgICAgICBbNTZd Mi4yLjIuIEhUVFAgQWN0aW9uIENvbW1hbmRzCi0gICAgICAgICAgICBbNTddMi4yLjMuIEhUVFAg SGVhZGVycwotICAgICAgICAgICAgWzU4XTIuMi40LiBTZWN1cmUgSFRUUCBDb25uZWN0aW9ucwot ICAgICAgICAgICAgWzU5XTIuMi41LiBIVFRQIFZhcmlhYmxlcwotICAgICAgICAgICAgWzYwXTIu Mi42LiBUaGUgSFRUUCBDb21tYW5kLUxpbmUgUGVyc29uYWxpdHkKLSAgICAgWzYxXTMuIFRIRSBC VUlMVC1JTiBGVFAgQ0xJRU5UCi0gICAgICAgICBbNjJdMy4xLiBNYWtpbmcgYW5kIE1hbmFnaW5n IEZUUCBDb25uZWN0aW9ucwotICAgICAgICAgICAgWzYzXTMuMS4xLiBLZXJtaXQgQ29tbWFuZC1M aW5lIE9wdGlvbnMgZm9yIEZUUAotICAgICAgICAgICAgWzY0XTMuMS4yLiBUaGUgRlRQIENvbW1h bmQtTGluZSBQZXJzb25hbGl0eQotICAgICAgICAgICAgWzY1XTMuMS4zLiBUaGUgRlRQIFVSTCBJ bnRlcnByZXRlcgotICAgICAgICAgICAgWzY2XTMuMS40LiBJbnRlcmFjdGl2ZSBGVFAgU2Vzc2lv biBFc3RhYmxpc2htZW50Ci0gICAgICAgICBbNjddMy4yLiBNYWtpbmcgU2VjdXJlIEZUUCBDb25u ZWN0aW9ucwotICAgICAgICAgWzY4XTMuMy4gU2V0dGluZyBGVFAgUHJlZmVyZW5jZXMKLSAgICAg ICAgIFs2OV0zLjQuIE1hbmFnaW5nIERpcmVjdG9yaWVzIGFuZCBGaWxlcwotICAgICAgICAgWzcw XTMuNS4gVXBsb2FkaW5nIEZpbGVzIFdpdGggRlRQCi0gICAgICAgICAgICBbNzFdMy41LjEuIEZU UCBQVVQgU3dpdGNoZXMKLSAgICAgICAgICAgIFs3Ml0zLjUuMi4gVXBkYXRlIE1vZGUKLSAgICAg ICAgICAgIFs3M10zLjUuMy4gUmVjb3ZlcnkKLSAgICAgICAgIFs3NF0zLjYuIERvd25sb2FkaW5n IEZpbGVzIFdpdGggRlRQCi0gICAgICAgICAgICBbNzVdMy42LjEuIEZUUCBHRVQgU3dpdGNoZXMK LSAgICAgICAgICAgIFs3Nl0zLjYuMi4gRmlsZW5hbWUgQ29sbGlzaW9ucwotICAgICAgICAgICAg Wzc3XTMuNi4zLiBSZWNvdmVyeQotICAgICAgICAgWzc4XTMuNy4gVHJhbnNsYXRpbmcgQ2hhcmFj dGVyIFNldHMKLSAgICAgICAgICAgIFs3OV0zLjcuMS4gQ2hhcmFjdGVyIFNldHMgYW5kIFVwbG9h ZGluZwotICAgICAgICAgICAgWzgwXTMuNy4yLiBDaGFyYWN0ZXIgU2V0cyBhbmQgRG93bmxvYWRp bmcKLSAgICAgICAgIFs4MV0zLjguIEZUUCBDb21tYW5kIFNob3J0Y3V0cwotICAgICAgICAgWzgy XTMuOS4gRHVhbCBTZXNzaW9ucwotICAgICAgICAgWzgzXTMuMTAuIEF1dG9tYXRpbmcgRlRQIFNl c3Npb25zCi0gICAgICAgICAgICBbODRdMy4xMC4xLiBGVFAtU3BlY2lmaWMgVmFyaWFibGVzIGFu ZCBGdW5jdGlvbnMKLSAgICAgICAgICAgIFs4NV0zLjEwLjIuIEV4YW1wbGVzCi0gICAgICAgICAg ICBbODZdMy4xMC4zLiBBdXRvbWF0aW5nIFNlY3VyZSBGVFAgQ29ubmVjdGlvbnMKLSAgICAgICAg IFs4N10zLjExLiBBZHZhbmNlZCBGVFAgUHJvdG9jb2wgRmVhdHVyZXMgIFs4OF00LiBGSUxFIFND QU5OSU5HCi0gICAgWzg5XTUuIEZJTEUgQU5EIERJUkVDVE9SWSBOQU1FUyBDT05UQUlOSU5HIFNQ QUNFUwotICAgIFs5MF02LiBPVEhFUiBDT01NQU5EIFBBUlNJTkcgSU1QUk9WRU1FTlRTCi0gICAg ICAgICBbOTFdNi4xLiBHcm91cGluZyBNYWNybyBBcmd1bWVudHMKLSAgICAgICAgIFs5Ml02LjIu IERpcmVjdG9yeSBhbmQgRmlsZSBOYW1lIENvbXBsZXRpb24KLSAgICAgICAgIFs5M102LjMuIFBh c3NpbmcgQXJndW1lbnRzIHRvIENvbW1hbmQgRmlsZXMKLSAgICAgICAgIFs5NF02LjQuIE1vcmUt UHJvbXB0aW5nCi0gICAgICAgICBbOTVdNi41LiBDb21tYXMgaW4gTWFjcm8gRGVmaW5pdGlvbnMK LSAgICAgICAgIFs5Nl02LjYuIEFycm93IEtleXMKLSAgICBbOTddNy4gTkVXIENPTU1BTkRTIEFO RCBTV0lUQ0hFUwotICAgIFs5OF04LiBTQ1JJUFRJTkcgSU1QUk9WRU1FTlRTCi0gICAgICAgICBb OTldOC4xLiBQZXJmb3JtYW5jZSBhbmQgRGVidWdnaW5nCi0gICAgICAgICBbMTAwXTguMi4gVXNp bmcgTWFjcm9zIGFzIE51bWVyaWMgVmFyaWFibGVzCi0gICAgICAgICBbMTAxXTguMy4gTmV3IElG IENvbmRpdGlvbnMKLSAgICAgICAgIFsxMDJdOC40LiBUaGUgT05fVU5LTk9XTl9DT01NQU5EIGFu ZCBPTl9DRCBNYWNyb3MKLSAgICAgICAgIFsxMDNdOC41LiBUaGUgU0hPVyBNQUNSTyBDb21tYW5k Ci0gICAgICAgICBbMTA0XTguNi4gQXJyYXlzCi0gICAgICAgICBbMTA1XTguNy4gTmV3IG9yIElt cHJvdmVkIEJ1aWx0LWluIFZhcmlhYmxlcyBhbmQgRnVuY3Rpb25zCi0gICAgICAgICBbMTA2XTgu OC4gVGhlIFJFVFVSTiBhbmQgRU5EIENvbW1hbmRzCi0gICAgICAgICBbMTA3XTguOS4gVU5ERUZJ TmluZyBHcm91cHMgb2YgVmFyaWFibGVzCi0gICAgICAgICBbMTA4XTguMTAuIFRoZSBJTlBVVCBh bmQgTUlOUFVUIENvbW1hbmRzCi0gICAgICAgICBbMTA5XTguMTEuIExlYXJuZWQgU2NyaXB0cwot ICAgICAgICAgWzExMF04LjEyLiBQYXR0ZXJuIE1hdGNoaW5nCi0gICAgICAgICBbMTExXTguMTMu IERhdGVzIGFuZCBUaW1lcwotICAgICAgICAgWzExMl04LjE0LiBUcmFwcGluZyBLZXlib2FyZCBJ bnRlcnJ1cHRpb24KLSAgICBbMTEzXTkuIFMtRVhQUkVTU0lPTlMKLSAgICAgICAgIFsxMTRdOS4x LiBXaGF0IGlzIGFuIFMtRXhwcmVzc2lvbj8KLSAgICAgICAgIFsxMTVdOS4yLiBJbnRlZ2VyIGFu ZCBGbG9hdGluZy1Qb2ludC1Bcml0aG1ldGljCi0gICAgICAgICBbMTE2XTkuMy4gSG93IHRvIFVz ZSBTLUV4cHJlc3Npb25zCi0gICAgICAgICBbMTE3XTkuNC4gU3VtbWFyeSBvZiBCdWlsdC1pbiBD b25zdGFudHMgYW5kIE9wZXJhdG9ycwotICAgICAgICAgWzExOF05LjUuIFZhcmlhYmxlcwotICAg ICAgICAgWzExOV05LjYuIEFzc2lnbm1lbnRzIGFuZCBTY29wZQotICAgICAgICAgWzEyMF05Ljcu IENvbmRpdGlvbmFsIEV4cHJlc3Npb25zCi0gICAgICAgICBbMTIxXTkuOC4gRXh0ZW5zaWJpbGl0 eQotICAgICAgICAgWzEyMl05LjkuIEV4YW1wbGVzCi0gICAgICAgICBbMTIzXTkuMTAuIERpZmZl cmVuY2VzIGZyb20gQWxnZWJyYWljIE5vdGF0aW9uCi0gICAgICAgICBbMTI0XTkuMTEuRGlmZmVy ZW5jZXMgZnJvbSBMaXNwCi0gICAgWzEyNV0xMC4gRklMRSBUUkFOU0ZFUgotICAgIFsxMjZdMTEu IE1PREVNUyBBTkQgRElBTElORwotICAgIFsxMjddMTIuIFRFUk1JTkFMIENPTk5FQ1RJT04KLSAg ICBbMTI4XTEzLiBDSEFSQUNURVIgU0VUUwotICAgIFsxMjldMTQuIERJQUxPVVQgRlJPTSBURUxO RVQgVEVSTUlOQUwgU0VSVkVSUwotICAgIFsxMzBdMTUuIENPUElORyBXSVRIIEJST0tFTiBLRVJN SVQgUEFSVE5FUlMKLSAgICBbMTMxXTE2LiBORVcgQ09NTUFORC1MSU5FIE9QVElPTlMKLSAgICBb MTMyXTE3LiBMT0dTCi0KLSAgIFsgWzEzM11Ub3AgXSBbIFsxMzRdQy1LZXJtaXQgXSBbIFsxMzVd S2VybWl0IEhvbWUgXQotCi0wLiBXSEFUJ1MgTkVXCi0KLSAgIFRoZSBJbml0aWFsaXphdGlvbiBh bmQgQ3VzdG9taXphdGlvbiBGaWxlcwotICAgICAgICAgIEMtS2VybWl0IDguMCBub3cgc3VwcG9y dHMgc3BlY2lmaWNhdGlvbiBvZiB0aGUgaW5pdGlhbGl6YXRpb24KLSAgICAgICAgICBmaWxlIG5h bWUgKHBhdGgpIGluIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLCBDS0VSTUlUX0lOSS4gSXQKLSAg ICAgICAgICBhbHNvIHJlbGllcyBmYXIgbGVzcyB0aGFuIGJlZm9yZSBvbiB0aGUgaW5pdGlhbGl6 YXRpb24gZm9yCi0gICAgICAgICAgZnVuY3Rpb25pbmcuIFNlZSBbMTM2XVNlY3Rpb24gNSBvZiB0 aGUgVW5peCBDLUtlcm1pdAotICAgICAgICAgIFsxMzddaW5zdGFsbGF0aW9uIGluc3RydWN0aW9u cyBmb3IgZGV0YWlscy4gQXMgb2YgdmVyc2lvbgotICAgICAgICAgIDguMC4yMDEsIEMtS2VybWl0 IGFsc28gZXhlY3V0ZXMgeW91ciBjdXN0b21pemF0aW9uIGZpbGUgKGlmIHlvdQotICAgICAgICAg IGhhdmUgb25lKSBldmVuIGlmIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlIHdhcyBub3QgZm91bmQu Ci0gICAgICAgICAgUHJldmlvdXNseSwgdGhlIGN1c3RvbWl6YXRpb24gZmlsZSB3YXMgZXhlY3V0 ZWQgYnkgYSBUQUtFCi0gICAgICAgICAgY29tbWFuZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gZmls ZSAoYW5kIGl0IHN0aWxsIGlzLCBpZiBhbgotICAgICAgICAgIGluaXRpYWxpemF0aW9uIGlzIGZv dW5kKS4KLQotICAgSW5jb21wYXRpYmxlIENoYW5nZXMKLSAgICAgICAgICBBcyBhbHdheXMsIHdl IGRvIG91ciBiZXN0IHRvIGF2b2lkIGNoYW5nZXMgdGhhdCBicmVhayBleGlzdGluZwotICAgICAg ICAgIHNjcmlwdHMuIEhvd2V2ZXIsIEMtS2VybWl0IDguMCBkb2VzIGluY2x1ZGUgYSByYXRoZXIg cGVydmFzaXZlCi0gICAgICAgICAgc3ludGF4IGNoYW5nZSB0aGF0IG1pZ2h0IGFsdGVyIHRoZSBi ZWhhdmlvciBvZiBzY3JpcHRzIHRoYXQKLSAgICAgICAgICBkZXBlbmQgb24gdGhlIHByZXZpb3Vz IGJlaGF2aW9yLiBBcyBkZXNjcmliZWQgaW4gWzEzOF1TZWN0aW9uIDUsCi0gICAgICAgICAgQy1L ZXJtaXQgbm93IGFjY2VwdHMgZG91YmxlcXVvdGVzIGluIG1vc3QgY29udGV4dHMgd2hlcmUgeW91 Ci0gICAgICAgICAgcHJldmlvdXNseSBoYWQgdG8gdXNlIGJyYWNlcyB0byBncm91cCBtdWx0aXBs ZSB3b3JkcyBpbnRvIGEKLSAgICAgICAgICBzaW5nbGUgZmllbGQsIG9yIHRvIGZvcmNlIGluY2x1 c2lvbiBvZiBsZWFkaW5nIG9yIHRyYWlsaW5nCi0gICAgICAgICAgYmxhbmtzLiBNb3N0IG5vdGlj ZWFibHksIGluIEMtS2VybWl0IDcuMCBhbmQgZWFybGllcjoKLQotICBlY2hvIHt0aGlzIGlzIGEg c3RyaW5nfQotCi0gICAgICAgICAgd291bGQgcHJpbnQ6Ci0KLSAgdGhpcyBpcyBhIHN0cmluZwot Ci0gICAgICAgICAgd2hlcmVhczoKLQotICBlY2hvICJ0aGlzIGlzIGEgc3RyaW5nIgotCi0gICAg ICAgICAgcHJpbnRlZDoKLQotICAidGhpcyBpcyBhIHN0cmluZyIKLQotICAgICAgICAgIEluIEMt S2VybWl0IDguMCwgYm90aCBwcmludDoKLQotICB0aGlzIGlzIGEgc3RyaW5nCi0KLSAgICAgICAg ICBUbyBmb3JjZSB0aGUgZG91YmxlcXVvdGVzIHRvIGJlIHRyZWF0ZWQgYXMgcGFydCBvZiB0aGUg c3RyaW5nLAotICAgICAgICAgIHVzZSBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKLQot ICBlY2hvIHsidGhpcyBpcyBhIHN0cmluZyJ9Ci0gIGVjaG8gIiJ0aGlzIGlzIGEgc3RyaW5nIiIK LQotICAgICAgICAgIFNpbWlsYXJseSwgdG8gZm9yY2UgYnJhY2VzIHRvIGJlIHRyZWF0ZWQgYXMg cGFydCBvZiB0aGUgc3RyaW5nOgotCi0gIGVjaG8gInt0aGlzIGlzIGEgc3RyaW5nfSIKLSAgZWNo byB7e3RoaXMgaXMgYSBzdHJpbmd9fQotCi0gICAgICAgICAgT3RoZXIgaW5jb21wYXRpYmlsaXRp ZXM6Ci0KLSAgICAgICAgIDEuIFVzaW5nIHRoZSBTRVQgSE9TVCBjb21tYW5kIHRvIG1ha2UgSFRU UCBjb25uZWN0aW9ucyBpcyBubwotICAgICAgICAgICAgbG9uZ2VyIHN1cHBvcnRlZC4gSW5zdGVh ZCwgdXNlIHRoZSBuZXcgSFRUUCBPUEVOIGNvbW1hbmQsCi0gICAgICAgICAgICBkZXNjcmliZWQg aW4gWzEzOV1TZWN0aW9uIDIuMi4KLQotICAgQy1LZXJtaXQgNy4xIEFscGhhLjAxICg4IERlY2Vt YmVyIDIwMDApCi0KLSAgICAgSXRzIG1ham9yIG5ldyBmZWF0dXJlcyBhcmUgdGhvc2UgbGlzdGVk IGluIHRoZSBbMTQwXVRhYmxlIG9mCi0gICAgICAgICAgQ29udGVudHM6IHRoZSBGVFAgY2xpZW50 LCBmaWxlIHNjYW5uaW5nLCBjb21tYW5kIHBhcnNpbmcgYW5kCi0gICAgICAgICAgc2NyaXB0aW5n IGltcHJvdmVtZW50cywgUy1FeHByZXNzaW9ucywgYW5kIHN1cHBvcnQgZm9yIHRoZQotICAgICAg ICAgIFRlbG5ldCBDb20gUG9ydCBPcHRpb24sIHBsdXMgd2lkZXIgYXZhaWxhYmlsaXR5IG9mIHRo ZSBLZXJiZXJvcywKLSAgICAgICAgICBTU0wvVExTLCBhbmQgU1JQIHNlY3VyaXR5IG9wdGlvbnMg Zm9yIHNlY3VyZSBJbnRlcm5ldAotICAgICAgICAgIGNvbm5lY3Rpb25zLgotCi0gICBDLUtlcm1p dCA3LjEuMTk5IEFscGhhLjAyICg0IEphbnVhcnkgMjAwMSkKLQotICAgICAgICAgICsgQy1LZXJt aXQgbm93IGFjY2VwdHMgWzE0MV1GVFAsIFRFTE5FVCwgYW5kIElLU0QgVVJMcyBhcyBpdHMKLSAg ICAgICAgICAgIGZpcnN0IGNvbW1hbmQtbGluZSBhcmd1bWVudC4KLSAgICAgICAgICArIENoYXJh Y3Rlci1zZXQgdHJhbnNsYXRpb24gYWRkZWQgdG8gdGhlIEZUUCBjbGllbnQgZm9yCi0gICAgICAg ICAgICBbMTQyXWZpbGVuYW1lcy4KLSAgICAgICAgICArIE9wdGlvbmFsIFsxNDNdc2V0dGluZyBv ZiBkYXRlIG9mIGluY29taW5nIGZpbGVzIGJ5IEZUUCBbTV1HRVQKLSAgICAgICAgICAgIGZyb20g dGhlIHNlcnZlciBkYXRlLgotICAgICAgICAgICsgWzE0NF1GVFAgQ0hFQ0sgZmlsZW5hbWUgYWRk ZWQgdG8gbGV0IEZUUCBjbGllbnQgY2hlY2sgdGhlCi0gICAgICAgICAgICBleGlzdGVuY2Ugb2Yg YSBmaWxlIG9uIHRoZSBzZXJ2ZXIuCi0gICAgICAgICAgKyBbMTQ1XUZUUCBHRVQgL05BTUVMSVNU OmZpbGVuYW1lIGFkZGVkIHRvIGdldCBsaXN0IG9mIHNlcnZlcgotICAgICAgICAgICAgZmlsZW5h bWVzIGludG8gYSBsb2NhbCBmaWxlLgotICAgICAgICAgICsgWzE0Nl1GVFAgW01dUFVUIC9TRVJW RVItUkVOQU1FOnRlbXBsYXRlIGFkZGVkIHRvIG1ha2Ugc2VydmVyCi0gICAgICAgICAgICByZW5h bWUgYSBmaWxlIGFzIGluZGljYXRlZCBieSB0aGUgdGVtcGxhdGUgYWZ0ZXIgaXQgaGFzCi0gICAg ICAgICAgICBhcnJpdmVkIGNvbXBsZXRlbHkuCi0gICAgICAgICAgKyBGVFAgW01dR0VUIC9TRVJW RVItUkVOQU1FOnRlbXBsYXRlIGFkZGVkIHRvIG1ha2Ugc2VydmVyIHJlbmFtZQotICAgICAgICAg ICAgYSBmaWxlIGFzIGluZGljYXRlZCBieSB0aGUgdGVtcGxhdGUgYWZ0ZXIgaXQgaGFzIGJlZW4g c2VudAotICAgICAgICAgICAgY29tcGxldGVseS4KLSAgICAgICAgICArIEZUUCBbMTQ3XVZESVJF Q1RPUlkgYWRkZWQgZm9yIGdldHRpbmcgdmVyYm9zZSBkaXJlY3RvcnkKLSAgICAgICAgICAgIGxp c3RpbmdzIGZyb20gVE9QUy0yMC4KLSAgICAgICAgICArIFsxNDhdRlRQIFRZUEUgVEVORVggYWRk ZWQgZm9yIHRyYW5zZmVycmluZyA4LWJpdCBiaW5hcnkgZmlsZXMKLSAgICAgICAgICAgIHdpdGgg UERQLTEwcy4KLSAgICAgICAgICArIEFkZGVkIFsxNDldYXV0b21hdGljIHRleHQvYmluYXJ5IG1v ZGUgc3dpdGNoaW5nIGZvciBGVFAKLSAgICAgICAgICAgIFtNXUdFVCwgYmFzZWQgb24gZmlsZW5h bWUgcGF0dGVybnMgKGUuZy4gKi56aXAsICouZ3osICouZXhlCi0gICAgICAgICAgICBhcmUgYmlu YXJ5OyAqLnR4dCwgKi5jIGFyZSB0ZXh0KS4KLSAgICAgICAgICArIFsxNTBdU0VUIFNFTkQgSS1Q QUNLRVRTIE9GRiBhZGRlZCBmb3IgY29waW5nIHdpdGggS2VybWl0Ci0gICAgICAgICAgICBzZXJ2 ZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgSSBwYWNrZXRzLgotICAgICAgICAgICsgQSBuZXcgb3B0 aW9uIHdhcyBhZGRlZCB0byBbMTUxXVxmd29yZCgpIGFuZCBcZnNwbGl0KCkgZm9yCi0gICAgICAg ICAgICBwYXJzaW5nIGNvbW1hLXNlcGFyYXRlZCBsaXN0cyB0aGF0IG1pZ2h0IGNvbnRhaW4gZW1w dHkKLSAgICAgICAgICAgIGVsZW1lbnRzLgotICAgICAgICAgICsgQnVnIGZpeGVzIGluY2x1ZGlu ZzoKLSAgICAgICAgICAgICAgIG8ge30gb3IgIiIgY291bGQgbm90IGJlIHVzZWQgYXMgZXhwZWN0 ZWQgdG8gcmVwcmVzZW50IHRoZQotICAgICAgICAgICAgICAgICBlbXB0eSBzdHJpbmcuCi0gICAg ICAgICAgICAgICBvICwtIG9uIGEgbGluZSBieSBpdHNlbGYgaW4gYSBtYWNybyBkZWZpbml0aW9u IGNhdXNlZAotICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50IHN0YXRlbWVudHMgdG8gYmUgc2tp cHBlZC4KLSAgICAgICAgICAgICAgIG8gRlRQIFtNXUdFVCBkaWRuJ3Qgd29yayByaWdodCBpZiBw YXRoIHNlZ21lbnRzIHdlcmUKLSAgICAgICAgICAgICAgICAgaW5jbHVkZWQgaW4gdGhlIGZpbGVz cGVjLgotICAgICAgICAgICAgICAgbyBGVFAgTUdFVCwgaWYgaW50ZXJydXB0ZWQsIGRpZCBub3Qg Y2xlYXIgaXRzIGZpbGUgbGlzdC4KLSAgICAgICAgICAgICAgIG8gVmFyaW91cyBwcm9ibGVtcyB3 aXRoIEZUUCBQVVQgL0FTLU5BTUUgdGhhdCBub2JvZHkKLSAgICAgICAgICAgICAgICAgbm90aWNl ZC4KLSAgICAgICAgICAgICAgIG8gU29tZSBGVFAgbWVzc2FnZXMgYW5kIGRpc3BsYXlzIGludGVy ZmVyZWQgd2l0aCBlYWNoCi0gICAgICAgICAgICAgICAgIG90aGVyLgotICAgICAgICAgICAgICAg byBQYXJzaW5nIG9mIFlFU1RFUkRBWSwgVE9EQVksIGFuZCBUT01PUlJPVyBpbiBkYXRlLXRpbWUK LSAgICAgICAgICAgICAgICAgZmllbGRzIHdhcyBicm9rZW4uCi0gICAgICAgICAgICAgICBvIEF1 dG9tYXRpYyBvbGQtdG8tbmV3IGRpYWxpbmcgZGlyZWN0b3J5IGZvcm1hdCBjb252ZXJzaW9uCi0g ICAgICAgICAgICAgICAgIHdhcyBicm9rZW4gb24gVk1TLgotICAgICAgICAgICAgICAgbyBWYXJp b3VzIHNvdXJjZS1jb2RlIHBvcnRhYmlsaXR5IHByb2JsZW1zIGZpeGVkLgotICAgICAgICAgICsg SW1wcm92ZW1lbnQgb2YgdmFyaW91cyBIRUxQIGFuZCBTSE9XIG1lc3NhZ2VzLgotCi0gICBDLUtl cm1pdCA3LjEuMTk5IEFscGhhLjA0ICgxIEFwcmlsIDIwMDEpCi0KLSAgICAgICAgICArIEJpZyBj aGFuZ2VzOgotICAgICAgICAgICAgICAgbyBDaGFuZ2VkIGRlZmF1bHQgbW9kZW0gdHlwZSBmcm9t IE5PTkUgdG8gR0VORVJJQy4KLSAgICAgICAgICAgICAgIG8gR2VuZXJpYyBkaWFsaW5nIG5vdyBz ZW5kcyBubyBpbml0IHN0cmluZyBhdCBhbGwuCi0gICAgICAgICAgICAgICBvIENoYW5nZWQgZGVm YXVsdCB0ZXJtaW5hbCBieXRlc2l6ZSBmcm9tIDcgdG8gOC4KLSAgICAgICAgICArIE5ldyBmZWF0 dXJlczoKLSAgICAgICAgICAgICAgIG8gU0VUIFNFU1NJT04tTE9HIFRJTUVTVEFNUEVELVRFWFQg Zm9yIHRpbWVzdGFtcGVkIHNlc3Npb24KLSAgICAgICAgICAgICAgICAgbG9nLgotICAgICAgICAg ICsgTmV3IG1vZGVtIHR5cGVzOgotICAgICAgICAgICAgICAgbyBDb25leGFudCBtb2RlbSBmYW1p bHkKLSAgICAgICAgICAgICAgIG8gTHVjZW50IFZFTlVTIGNoaXBzZXQKLSAgICAgICAgICAgICAg IG8gUENUZWwgVi45MCBjaGlwc2V0Ci0gICAgICAgICAgICAgICBvIFpvb20gVi45MAotICAgICAg ICAgICAgICAgbyBab29tIFYuOTIKLSAgICAgICAgICArIEZUUCBjbGllbnQ6Ci0gICAgICAgICAg ICAgICBvIEZUUCBPUEVOIC9QQVNTSVZFIGFuZCAvQUNUSVZFIHN3aXRjaGVzIGFkZGVkLgotICAg ICAgICAgICAgICAgbyBOb3cgd29ya3Mgd2l0aCBzZXJ2ZXJzIHRoYXQgdGhhdCBkb24ndCBpbmNs dWRlIHBhdGggaW4KLSAgICAgICAgICAgICAgICAgTkxTVCByZXNwb25zZS4KLSAgICAgICAgICAg ICAgIG8gRml4ZWQgU0VORCAvUkVDVVJTSVZFIG5vdCB0byBmb2xsb3cgc3ltbGlua3MgKFVOSVgp LgotICAgICAgICAgICAgICAgbyBTRVQgRlRQIFZFUkJPU0UtTU9ERSBkZWZhdWx0IGlzIG5vdyBP RkYgaW5zdGVhZCBvZiBPTi4KLSAgICAgICAgICArIEtlcm1pdCBwcm90b2NvbDoKLSAgICAgICAg ICAgICAgIG8gRml4ZWQgd2hhdCBJIGhvcGUgaXMgdGhlIGxhc3QgIlJlY2VpdmUgd2luZG93IGZ1 bGwiCi0gICAgICAgICAgICAgICAgIGVycm9yLgotICAgICAgICAgICAgICAgbyBTRVQgUFJFRklY SU5HIG9yIFNFVCBDT05UUk9MIFBSRUZJWCBub3cgYXV0b21hdGljYWxseQotICAgICAgICAgICAg ICAgICBzZXRzIENMRUFSQ0hBTk5FTCBPRkYuCi0gICAgICAgICAgICAgICBvIEZpeGVkIGluY29y cmVjdCByZXBvcnQgb2YgbnVtYmVyIG9mIGZpbGVzIHRyYW5zZmVycmVkIGF0Ci0gICAgICAgICAg ICAgICAgIGVuZCBvZiB0cmFuc2Zlci4KLSAgICAgICAgICAgICAgIG8gRml4ZWQgU0VORCAvUkVD VVJTSVZFIG5vdCB0byBmb2xsb3cgc3ltbGlua3MgKFVOSVgpLgotICAgICAgICAgICsgVU5JWDoK LSAgICAgICAgICAgICAgIG8gSFRUUCBhbmQgc2hhZG93IHBhc3N3b3JkcyBlbmFibGVkIGZvciBT Q08gNS4wLjYuCi0gICAgICAgICAgICAgICBvIEV2ZW4gd2l0aCBTRVQgRklMRU5BTUVTIENPTlZF UlRFRCwgc3BhY2VzIHdlcmUgc3RpbGwKLSAgICAgICAgICAgICAgICAgYWNjZXB0ZWQgaW4gaW5j b21pbmcgZmlsZW5hbWVzOyBub3cgdGhleSBhcmUgY29udmVydGVkIHRvCi0gICAgICAgICAgICAg ICAgIHVuZGVyc2NvcmVzLgotICAgICAgICAgICAgICAgbyBBZGRlZCBzdXBwb3J0IGZvciBjb21w aWxlLXRpbWUgbWt0ZW1wKCkvbWtzdGVtcCgpCi0gICAgICAgICAgICAgICAgIHNlbGVjdGlvbi4K LSAgICAgICAgICArIFZNUzoKLSAgICAgICAgICAgICAgIG8gU2Vzc2lvbi1sb2cgZm9ybWF0IGZv ciBzY3JpcHRlZCBzZXNzaW9ucyBmaXhlZC4KLSAgICAgICAgICArIFNjcmlwdGluZzoKLSAgICAg ICAgICAgICAgIG8gRml4ZWQgXGZyZGlyKCkgbm90IHRvIGZvbGxvdyBzeW1saW5rcyAoVU5JWCku Ci0gICAgICAgICAgICAgICBvIEZpeGVkIFxmZGF5KCkgbm90IHRvIGR1bXAgY29yZSBmb3IgZGF0 ZXMgcHJpb3IgdG8gMTcgTWFyCi0gICAgICAgICAgICAgICAgIDE4NTguCi0gICAgICAgICAgKyBH ZW5lcmFsOgotICAgICAgICAgICAgICAgbyAiQ2xvc2luZyBibGFoLi4uIiBtZXNzYWdlIHVwb24g ZXhpdCBjb3VsZCBub3QgYmUKLSAgICAgICAgICAgICAgICAgc3VwcHJlc3NlZC4KLSAgICAgICAg ICAgICAgIG8gQWRkZWQgL1BBR0UgYW5kIC9OT1BBR0UgdG8gREVMRVRFIHN3aXRjaGVzLgotICAg ICAgICAgICAgICAgbyBBZGRlZCBHTyByZXNwb25zZSBmb3IgREVMRVRFIC9BU0sgKGRlbGV0ZSBh bGwgdGhlIHJlc3QKLSAgICAgICAgICAgICAgICAgd2l0aG91dCBhc2tpbmcpLgotICAgICAgICAg ICAgICAgbyBBZGRlZCBHTyByZXNwb25zZSB0byAibW9yZT8iIHByb21wdCAoZm9yIG11bHRpLXBh Z2UKLSAgICAgICAgICAgICAgICAgc2NyZWVuIG91dHB1dCkuCi0gICAgICAgICAgICAgICBvIFVw ZGF0ZWQgSEVMUCB0ZXh0cy4KLQotICAgQy1LZXJtaXQgNy4xLjE5OSBCZXRhLjAxICgxMCBNYXkg MjAwMSkKLQotICAgICAgICAgICsgRlRQIGNsaWVudCB2ZXJib3NpdHkgYWRqdXN0bWVudHMuCi0g ICAgICAgICAgKyBCdWcgd2l0aCBnZW5lcmljIG1vZGVtIGRpYWxpbmcgcGF1c2luZyBzZXZlcmFs IHNlY3MgZml4ZWQuCi0gICAgICAgICAgKyBTRVQgSE9TVCAvVVNFUjosIFNFVCBMT0dJTiBVU0VS SUQsIGV0YywgZml4ZWQgd2hlbiBnaXZlbiBubwotICAgICAgICAgICAgdXNlciBJRC4KLSAgICAg ICAgICArIEEgY291cGxlIFx2KGRtX2JsYWgpIGRpYWwgbW9kaWZpZXIgdmFyaWFibGVzIGFkZGVk LgotICAgICAgICAgICsgIi0tdmVyc2lvbiIgY29tbWFuZC1saW5lIHN3aXRjaCBhZGRlZC4KLSAg ICAgICAgICArIEZpeGVkIE5ldEJTRCBzZXJpYWwtcG9ydCBEVFIgaGFuZGxpbmcuCi0gICAgICAg ICAgKyBMb3RzIG9mIHN5bnRheCBjbGVhbnVwcyBmb3IgRmxleGVsaW50IGFuZCBnY2MgLVdhbGwu Ci0gICAgICAgICAgKyBGaXhlZCBtb2RlbS10eXBlIGFsaWFzZXMgdG8gbm90IHRha2UgcHJlY2Vk ZW5jZSBvdmVyIHJlYWwKLSAgICAgICAgICAgIG5hbWVzLgotICAgICAgICAgICsgRml4ZWQgZnVu bnkgdHJlYXRtZW50IG9mIGRvdWJsZXF1b3RlcyBieSBFQ0hPIGNvbW1hbmQuCi0gICAgICAgICAg KyBFbmFibGVkIFNFVCBTRVNTSU9OLUxPRyBmb3IgVk1TIGFuZCBvdGhlciBub24tVU5JWCBwbGF0 Zm9ybXMuCi0gICAgICAgICAgKyBGaXhlZCBjaGFuZ2luZyBkaXJlY3Rpb24gaW4gY29tbWFuZCBo aXN0b3J5IGJ1ZmZlci4KLSAgICAgICAgICArIEZpeGVkIGhhbmRsaW5nIG9mIElLU0QgVVJMcy4K LSAgICAgICAgICArIE1hZGUgc3VyZSBERUxFVEUgcHJpbnRzIGEgbWVzc2FnZSBpZiBpdCBnb3Qg YW55IGVycm9ycy4KLQotICAgQy1LZXJtaXQgOC4wLjIwMCBCZXRhLjAyICgyOCBKdW5lIDIwMDEp Ci0KLSAgICAgICAgICArIE1ham9yIHZlcnNpb24gbnVtYmVyIGluY3JlYXNlZCBmcm9tIDcgdG8g OC4KLSAgICAgICAgICArIFsxNTJdU1NIIGNvbW1hbmQuCi0gICAgICAgICAgKyBNb3JlLWNvbnNp c3RlbnQgS2VybWl0IHByb3RvY29sIGRlZmF1bHRzLgotICAgICAgICAgICsgQ09OTkVDVCBpZGxl IHRpbWVvdXQgYW5kIGFjdGlvbiBzZWxlY3Rpb24uCi0gICAgICAgICAgKyBDT05ORUNUIHN0YXR1 cyB2YXJpYWJsZS4KLSAgICAgICAgICArIEEgd2F5IHRvIGFsbG9jYXRlIG1vcmUgc3BhY2UgZm9y IGZpbGVuYW1lIGxpc3RzLgotICAgICAgICAgICsgUHNldWRvdGVybWluYWwgaGFuZGxlciBmaXhl ZCBmb3IgbGF0ZS1tb2RlbCBMaW51eGVzLgotICAgICAgICAgICsgQ29tbWFuZC1saW5lIG9wdGlv biAtZGQgZm9yIHRpbWVzdGFtcGVkIGRlYnVnIGxvZy4KLSAgICAgICAgICArIERvd25sb2FkIGRp cmVjdG9yeSBub3cgd29ya3MgZm9yIGV4dGVybmFsIHByb3RvY29scyB0b28uCi0gICAgICAgICAg KyBHUkVQIC9DT1VOVDp2YXJpYWJsZS4KLSAgICAgICAgICArIFNFVCBBVFRSSUJVVEUgUkVDT1JE LUZPUk1BVCB7IE9GRiwgT04gfS4KLSAgICAgICAgICArIEJ1ZyBmaXhlcy4KLQotICAgQy1LZXJt aXQgOC4wLjIwMCBCZXRhLjAzICg5IFNlcCAyMDAxKQotCi0gICAgICAgICAgKyBbMTUzXUhUVFAg MS4xIGNvbm5lY3Rpb25zIGFuZCBzY3JpcHRpbmcKLSAgICAgICAgICArIFsxNTRdT05fQ1RSTEMg bWFjcm8gZm9yIHRyYXBwaW5nIEN0cmwtQyBpbiBzY3JpcHRzCi0gICAgICAgICAgKyBbMTU1XURh dGUtdGltZSBwYXJzaW5nIGltcHJvdmVtZW50cywgdGltZXpvbmVzLCBjb21wYXJpc29uLAotICAg ICAgICAgICAgYXJpdGhtZXRpYwotICAgICAgICAgICsgWzE1Nl1QYXR0ZXJuLW1hdGNoaW5nIGlt cHJvdmVtZW50cwotICAgICAgICAgICsgRlRQIGltcHJvdmVtZW50cwotICAgICAgICAgICsgU0VU IEVYSVQgSEFOR1VQIHsgT04sIE9GRiB9Ci0gICAgICAgICAgKyBTRVQgRklMRSBFT0YgeyBDVFJM LVosIExFTkdUSCB9Ci0gICAgICAgICAgKyBBU0tbUV0gL1RJTUVPVVQKLSAgICAgICAgICArIEJ1 ZyBmaXhlcwotICAgICAgICAgICsgTmV3IHBsYXRmb3JtcwotCi0gICBDLUtlcm1pdCA4LjAuMjAw IEJldGEuMDQgKDE2IE5vdiAyMDAxKQotCi0gICAgICAgICAgKyBbMTU3XU5ldyBVbml4IG1hbiBw YWdlCi0gICAgICAgICAgKyBbMTU4XU5ldyBVbml4IGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMK LSAgICAgICAgICArIFNFVCBURUxPUFQgcG9saWNpZXMgYXJlIG5vdyBlbmZvcmNlZCBvbiBub24t VGVsbmV0IHBvcnRzIGlmCi0gICAgICAgICAgICB0aGUgc2VydmVyIGJlZ2lucyBUZWxuZXQgbmVn b3RpYXRpb25zLgotICAgICAgICAgICsgU0VUIFRFUk1JTkFMIElETEUtQUNUSU9OIHsgVEVMTkVU LU5PUCwgVEVMTkVULUFZVCB9LgotICAgICAgICAgICsgVVVDUCBsb2NrZmlsZSBjcmVhdGlvbiBy YWNlIGNvbmRpdGlvbiBmaXhlZC4KLSAgICAgICAgICArIERpYWxvdXQsIG1vZGVtIHNpZ25hbHMs IGhhbmd1cCwgaGFyZHdhcmUgZmxvdyBjb250cm9sLCBldGMsCi0gICAgICAgICAgICB0ZXN0ZWQg ZXh0ZW5zaXZlbHkgb24gbWFueSBwbGF0Zm9ybXMsIG51bWVyb3VzIHByb2JsZW1zIGZpeGVkLgot ICAgICAgICAgICsgSW1wcm92ZWQgaGludHMgd2hlbiBkaWFsaW5nIGZhaWxzLgotICAgICAgICAg ICsgU0VUIFNUT1AtQklUUyAyIGNhbiBub3cgYmUgZ2l2ZW4gd2l0aG91dCBTRVQgRkxPVyBIQVJE V0FSRS4KLSAgICAgICAgICArIE1ham9yIGltcHJvdmVtZW50cyBpbiBSRkMgMjIxNyBUZWxuZXQg Q29tLVBvcnQgQ29udHJvbC4KLSAgICAgICAgICArIEltcHJvdmVkIGFiaWxpdHkgdG8gUkVESUFM IGEgbW9kZW0gc2VydmVyIHBvcnQuCi0gICAgICAgICAgKyBrZXJtaXQgLWggbm93IHNob3dzIHRo ZSBjb21tYW5kIG5hbWUgaW4gdGhlIHVzYWdlIHVzYWdlCi0gICAgICAgICAgICBzdHJpbmcuCi0g ICAgICAgICAgKyBrZXJtaXQgLWggbm93IHNob3dzIEFMTCBjb21tYW5kLWxpbmUgb3B0aW9ucy4K LSAgICAgICAgICArIGtlcm1pdCAtcyBibGFoLCB3aGVyZSBibGFoIGlzIGEgc3ltbGluaywgbm93 IHdvcmtzLgotICAgICAgICAgICsgLS1ub3Blcm1zIGNvbW1hbmQtbGluZSBvcHRpb24gPSBTRVQg QVRUUklCVVRFIFBFUk1JU1NJT05TIE9GRi4KLSAgICAgICAgICArIEhUVFAgYW5kIEhUVFBTIFVS THMgbm93IHN1cHBvcnRlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgotICAgICAgICAgICsgQW4gaHR0 cCBjb21tYW5kLWxpbmUgcGVyc29uYWxpdHkgaXMgbm93IGF2YWlsYWJsZS4KLSAgICAgICAgICAr IEluaXRpYWxpemF0aW9uIGZpbGUgc3RyZWFtbGluZWQgdG8gbG9hZCBmYXN0ZXIsIGFuYWNocm9u aXNtcwotICAgICAgICAgICAgcmVtb3ZlZC4KLSAgICAgICAgICArIFVwZGF0ZWQgTkVXUywgSU5U Uk8sIEhFTFAgdGV4dCwgU0hPVyBjb21tYW5kcy4gSW4gcGFydGljdWxhciwKLSAgICAgICAgICAg IHNlZSBTSE9XIENPTU0sIEhFTFAgU0VUIExJTkUsIEhFTFAgV0FJVC4KLSAgICAgICAgICArIERh dGUvdGltZSBhcml0aG1ldGljIHJvdXRpbmVzIGNvbnZlcnRlZCBmcm9tIGZsb2F0aW5nLXBvaW50 IHRvCi0gICAgICAgICAgICBpbnRlZ2VyIGFyaXRobWV0aWMgKGludGVybmFsbHkpIGZvciBncmVh dGVyIGFjY3VyYWN5IGFuZAotICAgICAgICAgICAgcG9ydGFiaWxpdHkuCi0gICAgICAgICAgKyBR dW90ZWQgc3RyaW5ncyBjb250YWluaW5nIGNvbW1hcyBubyBsb25nZXIgYnJlYWsgbWFjcm8KLSAg ICAgICAgICAgIGV4ZWN1dGlvbi4KLSAgICAgICAgICArIER5bmFtaWMgS2VybWl0IGZpbGUtdHJh bnNmZXIgdGltZW91dHMgYXJlIG5vdyBtdWNoIG1vcmUKLSAgICAgICAgICAgIGFnZ3Jlc3NpdmUu Ci0gICAgICAgICAgKyBOZXcgImhvdCBrZXlzIiB0byB0dXJuIGRlYnVnLmxvZyBvbi9vZmYgZHVy aW5nIGZpbGUgdHJhbnNmZXIuCi0gICAgICAgICAgKyBJbXByb3ZlZCBoaW50cyB3aGVuIGZpbGUg dHJhbnNmZXIgZmFpbHMuCi0gICAgICAgICAgKyBGVFAgQ0Qgb3JpZW50YXRpb24gbWVzc2FnZXMg YXJlIG5vdyBwcmludGVkLgotICAgICAgICAgICsgLVIgbm93IGFjY2VwdGVkIG9uIHRoZSBGVFAg Y29tbWFuZCBsaW5lIHRvIHJlcXVlc3QgUmVjdXJzaW9uLgotICAgICAgICAgICsgLW0gYWxsb3dz IEFjdGl2ZSBvciBQYXNzaXZlIG1vZGUgdG8gYmUgY2hvc2VuIG9uIHRoZSBGVFAKLSAgICAgICAg ICAgIGNvbW1hbmQgbGluZS4KLSAgICAgICAgICArIC1kZCBvbiB0aGUgRlRQIGNvbW1hbmQgbGlu ZSBjcmVhdGVzIGEgdGltZXN0YW1wZWQgZGVidWcubG9nLgotICAgICAgICAgICsgRlRQIGNvbW1h bmQtbGluZSBzZWN1cml0eSBvcHRpb25zIGZpbGxlZCBpbi4KLSAgICAgICAgICArIEltcHJvdmVk IGF1dG9tYXRpYyB0ZXh0L2JpbmFyeSBtb2RlIHN3aXRjaGluZyBmb3IgTUdFVC4KLSAgICAgICAg ICArIFJlbW92ZWQgc3B1cmlvdXMgZXJyb3IgbWVzc2FnZXMgdGhhdCBzb21ldGltZXMgb2NjdXIg ZHVyaW5nCi0gICAgICAgICAgICBNR0VULgotICAgICAgICAgICsgRElSRUNUT1JZLCBHUkVQLCBU WVBFLCBIRUFELCBhbmQgVEFJTCBub3cgaGF2ZSBhIC9PVVRQVVQ6ZmlsZQotICAgICAgICAgICAg b3B0aW9uLgotICAgICAgICAgICsgVFlQRSAvTlVNQkVSIGFkZHMgbGluZSBudW1iZXJzLgotICAg ICAgICAgICsgQ0FUID0gVFlQRSAvTk9QQUdFOyBNT1JFID0gVFlQRSAvUEFHRS4KLSAgICAgICAg ICArIEdFVE9LID8taGVscCBmaXhlZC4KLSAgICAgICAgICArIFx2KHRpbWVzdGFtcCkgKD0gIlx2 KG5kYXRlKSBcdih0aW1lKSIpCi0gICAgICAgICAgKyBcdihob3VyKSAoaG91ciBvZiB0aGUgZGF5 LCAwLTIzKQotICAgICAgICAgICsgXGZ1bml4MmRvc3BhdGgoKSBjb252ZXJ0cyBhIFVOSVggcGF0 aCAoLykgdG8gYSBET1Mgb25lIChcKS4KLSAgICAgICAgICArIFxmZG9zMnVuaXhwYXRoKCkgY29u dmVydHMgYSBET1MgKFdpbmRvd3MsIE9TLzIpIHBhdGggdG8gYSBVTklYCi0gICAgICAgICAgICBv bmUuCi0gICAgICAgICAgKyBcZmtleXdvcmR2YWwoKSBwYXJzZXMgbmFtZT12YWx1ZSBwYWlyLCBh bGxvd3MgbWFjcm8ga2V5d29yZAotICAgICAgICAgICAgcGFyYW1ldGVycy4KLSAgICAgICAgICAr IFdlIG5vdyBtYWtlIGV2ZXJ5IGF0dGVtcHQgdG8gbm90IHdyaXRlIHBhc3N3b3JkcyB0byB0aGUK LSAgICAgICAgICAgIGRlYnVnLmxvZy4KLSAgICAgICAgICArIE5ldyBDZXJ0aWZpY2F0ZSBBdXRo b3JpdHkgY2VydGlmaWNhdGVzIGZpbGUsIGluY2x1ZGVzIHRoZQotICAgICAgICAgICAgS2VybWl0 IFByb2plY3QgYXQgQ29sdW1iaWEgVW5pdmVyc2l0eSBzbyB5b3UgY2FuIGFjY2VzcyBvdXIKLSAg ICAgICAgICAgIElLU0Qgc2VjdXJlbHkuCi0gICAgICAgICAgKyBTZWN1cmUgdGFyZ2V0cyBpbXBy b3ZlZCBhbmQgYmV0dGVyIGRvY3VtZW50ZWQgaW4gVW5peAotICAgICAgICAgICAgbWFrZWZpbGUu Ci0gICAgICAgICAgKyBBbGwgTGludXggKGxpYmMgYW5kIGdsaWJjKSBidWlsZHMgY29uc29saWRh dGVkIHVuZGVyICJtYWtlCi0gICAgICAgICAgICBsaW51eCIuCi0gICAgICAgICAgKyBIUC1VWCBt YWtlZmlsZSB0YXJnZXRzIG5vdyBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuCi0gICAgICAgICAgKyBO ZXcgYWl4NTAgYW5kIGFpeDUxIHRhcmdldHMgYWRkZWQuCi0KLSAgIEMtS2VybWl0IDguMC4yMDAg RmluYWwgKDEyIERlYyAyMDAxKQotCi0gICAgICAgICAgKyBSZW1vdGUvbG9jYWwtbW9kZSBjb25m dXNpb24gb24gc29tZSBwbGF0Zm9ybXMgaW50cm9kdWNlZCBpbgotICAgICAgICAgICAgQmV0YS4w NCwgZml4ZWQuCi0gICAgICAgICAgKyBNYW55IG9mIHRoZSBtYWtlZmlsZSB0YXJnZXRzIGFkanVz dGVkLCBuZXcgb25lcyBhZGRlZC4KLSAgICAgICAgICArIE5ldyAibWFrZSBpbnN0YWxsIiB0YXJn ZXQgc2hvdWxkIHBsZWFzZSBtb3N0IHBlb3BsZS4KLSAgICAgICAgICArIE5ldyBjb21tYW5kOiBT SE9XIElLU0QuCi0gICAgICAgICAgKyBGVFAgb3ZlciBUTFMuCi0gICAgICAgICAgKyBMYXN0LW1p bnV0ZSB0b3VjaHVwcyB0byB0ZXh0IG1lc3NhZ2VzLCBIRUxQIHRleHQsIGV0Yy4KLSAgICAgICAg ICArIEVuYWJsZSBtb2RlbS1zaWduYWwgcmVhZGluZyBmb3IgU0NPIE9TUjUgYW5kIFVuaXh3YXJl IDcuCi0gICAgICAgICAgKyBTcGVjaWFsIHN1cGVyZmFzdCBUUkFOU01JVCAvQklOQVJZIC9OT0VD SE8gL05PV0FJVCBtb2RlIGFkZGVkLgotICAgICAgICAgICsgRml4ZWQgUEJYIGRpYWxpbmcgaW4g dW5tYXJrZWQtYXJlYS1jb2RlIGNhc2UuCi0gICAgICAgICAgKyBJbXByb3ZlZCBTSE9XIENPTU1V TklDQVRJT05TIHRlbGxzIGxvY2tmaWxlIGRpcmVjdG9yeSwgdHlwaWNhbAotICAgICAgICAgICAg ZGlhbG91dCBkZXZpY2UgbmFtZS4KLSAgICAgICAgICArIFNvbWUgRlRQIE9QRU4gY29tbWFuZCBw YXJzaW5nIHByb2JsZW1zIGZpeGVkLgotICAgICAgICAgICsgU29tZSBlcnJvcnMgaW4gZGF0ZSBh cml0aG1ldGljIGZpeGVkLgotICAgICAgICAgICsgTmV3IGNvbW1hbmQ6IFNFVCBURVJNSU5BTCBB VVRPRE9XTkxPQUQgeyAuLi4sIEVSUk9SIHsgU1RPUCwKLSAgICAgICAgICAgIENPTlRJTlVFIH0g fQotICAgICAgICAgICsgTmV3IGNvbW1hbmQ6IEhFTFAgRklSRVdBTEwuCi0gICAgICAgICAgKyBT RVQgTU9ERU0gSEFOR1VQLU1FVEhPRCBEVFIgYWRkZWQgYXMgc3lub255bSBmb3IgUlMyMzItU0lH TkFMCi0gICAgICAgICAgKyBTdXBwb3J0IGZvciBzZWN1cmUgVVJMIHByb3RvY29scyBhZGRlZDog dGVsbmV0czosIGZ0cHM6LAotICAgICAgICAgICAgaHR0cHM6LgotCi0gICBDLUtlcm1pdCA4LjAu MjAxICg4IEZlYiAyMDAyKQotCi0gICAgICAgICAgKyBJbnN0YWxsYWJpbGl0eSBhcyBhbiBbMTU5 XVNTSCB2MiBTdWJzeXN0ZW0uCi0gICAgICAgICAgKyBbMTYwXVNFVCBMT0NVUyBjb21tYW5kLgot ICAgICAgICAgICsgWzE2MV1MLXZlcnNpb25zIG9mIENELCBESVIsIERFTEVURSwgTUtESVIsIGV0 YywgdG8gZm9yY2UgbG9jYWwKLSAgICAgICAgICAgIGV4ZWN1dGlvbi4KLSAgICAgICAgICArIFsx NjJdVVNFUiBhbmQgQUNDT1VOVCBhZGRlZCBhcyBzeW5vbnltcyBmb3IgRlRQIFVTRVIgYW5kIEZU UAotICAgICAgICAgICAgQUNDT1VOVC4KLSAgICAgICAgICArIFsxNjNdU0hPVyBWQVJJQUJMRVMg bm93IGFjY2VwdHMgYSBsaXN0IG9mIHZhcmlhYmxlcy4KLSAgICAgICAgICArIFJ1ZGltZW50YXJ5 IHN1cHBvcnQgZm9yIFsxNjRdQ2FsbGVyIElEIHdoZW4gcmVjZWl2aW5nIHBob25lCi0gICAgICAg ICAgICBjYWxscy4KLSAgICAgICAgICArIFVwL0Rvd24gWzE2NV1BcnJvdy1rZXkgbmF2aWdhdGlv biBvZiBjb21tYW5kIGhpc3RvcnkgYnVmZmVyLgotICAgICAgICAgICsgWzE2Nl1BdXRvbWF0aWMg ZXhlY3V0aW9uIG9mIGN1c3RvbWl6YXRpb24gZmlsZSBpZiBpbml0IGZpbGUgaXMKLSAgICAgICAg ICAgIG1pc3NpbmcuCi0KLSAgIEMtS2VybWl0IDguMC4yMDYgQmV0YS4wMSAoMTEgT2N0IDIwMDIp Ci0KLSAgICAgICAgTmV3IGNvbW1hbmRzOgotCi0gICAgICAgICAgICAgICBvIE9SSUVOVEFUSU9O IGxpc3RzIGxvY2F0aW9uLXJlbGF0ZWQgdmFyaWFibGVzIGFuZCB0aGVpcgotICAgICAgICAgICAg ICAgICB2YWx1ZXMuCi0gICAgICAgICAgICAgICBvIEtDRCBjaGFuZ2VzIHRvIHNwZWNpYWwgZGly ZWN0b3JpZXMgYnkgdGhlaXIgc3ltYm9saWMKLSAgICAgICAgICAgICAgICAgbmFtZXMgKCJrY2Qg PyIgZm9yIGEgbGlzdCkuCi0gICAgICAgICAgICAgICBvIFNFVCBDRCBIT01FIHBhdGggdG8gc3Bl Y2lmeSBob21lIGRpcmVjdG9yeSBmb3IgQ0QgYW5kIEtDRAotICAgICAgICAgICAgICAgICBjb21t YW5kcy4KLSAgICAgICAgICAgICAgIG8gQ09OVElOVUUgZ2l2ZW4gYXQgdG9wIGxldmVsIGlzIGVx dWl2YWxlbnQgdG8gRU5EIC0tIGhhbmR5Ci0gICAgICAgICAgICAgICAgIHdoZW4gUFJPTVBUJ2Vk IG91dCBvZiBhIHNjcmlwdCwgdG8gY29udGludWUgdGhlIHNjcmlwdC4KLQotICAgICAgICBOZXcg c3dpdGNoZXMgb3Igb3BlcmFuZHMgZm9yIGV4aXN0aW5nIGNvbW1hbmRzOgotCi0gICAgICAgICAg ICAgICBvIEdFVE9LIC9USU1FT1VUCi0gICAgICAgICAgICAgICBvIEFTSywgQVNLUSwgR0VUT0sg L1FVSUVUIChzdXBwcmVzc2VzIGVycm9yIG1lc3NhZ2Ugb24KLSAgICAgICAgICAgICAgICAgdGlt ZW91dCkKLSAgICAgICAgICAgICAgIG8gQ09QWSAvQVBQRU5EIG5vdyBhbGxvd3MgY29uY2F0ZW5h dGluZyBtdWx0aXBsZSBzb3VyY2UKLSAgICAgICAgICAgICAgICAgZmlsZXMgaW50byBvbmUgZGVz dCBmaWxlLgotICAgICAgICAgICAgICAgbyBTRVQgVENQIHsgSFRUUC1QUk9YWSwgU09DS1MtU0VS VkVSIH0gL1VTRVIsIC9QQVNTV09SRC4KLSAgICAgICAgICAgICAgIG8gRElSRUNUT1JZIGNvbW1h bmQgbm93IGFjY2VwdHMgbXVsdGlwbGUgZmlsZXNwZWNzLCBlLmcuCi0gICAgICAgICAgICAgICAg ICJkaXIgYSBiIGMiLgotCi0gICAgICAgIFNFVCBRVUlFVCBPTiBub3cgYWxzbyBhcHBsaWVzIHRv OgotCi0gICAgICAgICAgICAgICBvIFNFVCBIT1NUIGNvbm5lY3Rpb24gcHJvZ3Jlc3MgbWVzc2Fn ZXMuCi0gICAgICAgICAgICAgICBvICJQcmVzcyB0aGUgWCBvciBFIGtleSB0byBjYW5jZWwiIGZp bGUtdHJhbnNmZXIgbWVzc2FnZS4KLSAgICAgICAgICAgICAgIG8gUkVNT1RFIENEIHJlc3BvbnNl LgotICAgICAgICAgICAgICAgbyBSRU1PVEUgTE9HSU4gcmVzcG9uc2UuCi0KLSAgICAgICAgSW1w cm92ZW1lbnRzIGFuZCBuZXcgZmVhdHVyZXM6Ci0KLSAgICAgICAgICAgICAgIG8gTnVtZXJvdXMg RlRQIGNsaWVudCBmaXhlcyBhbmQgbmV3IGZlYXR1cmVzLCBsaXN0ZWQgYmVsb3cuCi0gICAgICAg ICAgICAgICBvIEMtS2VybWl0LCB3aGVuIGluIHJlbW90ZSBtb2RlIGF0IHRoZSBlbmQgb2YgYSBm aWxlCi0gICAgICAgICAgICAgICAgIHRyYW5zZmVyLCBub3cgcHJpbnRzIGEgb25lLWxpbmUgIndo ZXJlIiBtZXNzYWdlLiBDb250cm9sCi0gICAgICAgICAgICAgICAgIHdpdGggU0VUIFRSQU5TRkVS IFJFUE9SVC4KLSAgICAgICAgICAgICAgIG8gVW5peCBtYWtlZmlsZSAiaW5zdGFsbCIgdGFyZ2V0 IG5vdyBjcmVhdGVzIGFuIFVOSU5TVEFMTAotICAgICAgICAgICAgICAgICBzY3JpcHQuCi0gICAg ICAgICAgICAgICBvIEltcHJvdmVkIG9wZXJhdGlvbiBhbmQgcGVyZm9ybWFuY2Ugb24gUkZDIDIy MTcgVGVsbmV0Ci0gICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25zLgotICAgICAgICAgICAgICAg byBJbXByb3ZlZCBDT05ORUNUIChpbnRlcmFjdGl2ZSB0ZXJtaW5hbCBjb25uZWN0aW9uKQotICAg ICAgICAgICAgICAgICBwZXJmb3JtYW5jZS4KLSAgICAgICAgICAgICAgIG8gSEVMUCB0ZXh0IHVw ZGF0ZWQgZm9yIG1hbnkgY29tbWFuZHMuCi0KLSAgICAgICAgTmV3IG9yIGZpeGVkIG1ha2VmaWxl IHRhcmdldHM6Ci0KLSAgICAgICAgICAgICAgIG8gU29sYXJpcyA5IChzZXZlcmFsIHZhcmlhdGlv bnMpCi0gICAgICAgICAgICAgICBvIENvbmN1cnJlbnQgUG93ZXJNQVgKLSAgICAgICAgICAgICAg IG8gTWFjIE9TIFggMTAuMgotICAgICAgICAgICAgICAgbyBGcmVlQlNEIDEuMAotICAgICAgICAg ICAgICAgbyBGcmVlQlNEIDQuNiwgNS4wCi0gICAgICAgICAgICAgICBvIEFJWCA1LjIsIDUuMwot Ci0gICAgICAgIEJ1Z3MgZml4ZWQgKGdlbmVyYWwpOgotCi0gICAgICAgICAgICAgICBvIEZhaWx1 cmUgdG8gcnVuIGluIFZNUyBCYXRjaCBmaXhlZC4KLSAgICAgICAgICAgICAgIG8gTERJUkVDVE9S WSBmaXhlZCB0byBydW4gS2VybWl0J3MgYnVpbHQtaW4gRElSRUNUT1JZCi0gICAgICAgICAgICAg ICAgIGNvbW1hbmQgcmF0aGVyIHRoYW4gYW4gZXh0ZXJuYWwgb25lLgotICAgICAgICAgICAgICAg byBGaXhlZCBTb2xhcmlzIGFuZCBvdGhlciBTVk9SUE9TSVggYnVpbGRzIHRvIGZpbmQgb3V0Ci0g ICAgICAgICAgICAgICAgIHRoZWlyIGZ1bGwgaG9zdG5hbWVzIHJhdGhlciB0aGFuIGp1c3QgdGhl ICJ1bmFtZSAtbiIKLSAgICAgICAgICAgICAgICAgbmFtZS4KLSAgICAgICAgICAgICAgIG8gRml4 ZWQgc29tZSBwcm9ibGVtcyBtYXRjaGluZyBzdHJpbmdzIHRoYXQgc3RhcnQgd2l0aCAiLiIuCi0g ICAgICAgICAgICAgICBvIEZpeGVkIHNvbWUgcHJvYmxlbXMgbWF0Y2hpbmcgcGF0dGVybiB0aGF0 IGNvbnRhaW4ge2EsYixjfQotICAgICAgICAgICAgICAgICBsaXN0cy4KLSAgICAgICAgICAgICAg IG8gRml4ZWQgZXJyb25lb3VzIHJlcG9ydGluZyBvZiB0ZXh0LW1vZGUgcmVjZXB0aW9uIGFzCi0g ICAgICAgICAgICAgICAgIGJpbmFyeSB3aGVuIHNlbmRlciBkaWQgbm90IHJlcG9ydCB0aGUgZmls ZSBzaXplIChjb3NtZXRpYwotICAgICAgICAgICAgICAgICBvbmx5KS4KLSAgICAgICAgICAgICAg IG8gTWFueSBwcm9ibGVtcyB3aXRoIFNXSVRDSCBzdGF0ZW1lbnRzIGZpeGVkLgotICAgICAgICAg ICAgICAgbyBGaXhlZCBTRVQgT1BUSU9OUyBESVJFQ1RPUlkgL0RPVEZJTEVTIHRvIHdvcmsgZm9y IHNlcnZlcgotICAgICAgICAgICAgICAgICB0b28uCi0gICAgICAgICAgICAgICBvIEZpeGVkIERF TEVURSB0byBwcmludCBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBmaWxlIHdhcwotICAgICAgICAg ICAgICAgICBub3QgZm91bmQuCi0gICAgICAgICAgICAgICBvIEZpeGVkIFNFVCBDT05UUk9MIFVO UFJFRklYIEFMTCBhbmQgU0VUIFBSRUZJWElORyBOT05FIHRvCi0gICAgICAgICAgICAgICAgIGRv IHRoZSBzYW1lIHRoaW5nLgotICAgICAgICAgICAgICAgbyBGaXhlZCBidWdzIGV4ZWN1dGluZyBt YWNyb3MgZnJvbSB3aXRoaW4gdGhlIE9OX0VYSVQKLSAgICAgICAgICAgICAgICAgbWFjcm8uCi0g ICAgICAgICAgICAgICBvIFxmZGF5KCkgYW5kIFxmbmRheSgpIGZpeGVkIGZvciBkYXRlcyBwcmlv ciB0byAxNyBOb3YKLSAgICAgICAgICAgICAgICAgMTg1OC4KLSAgICAgICAgICAgICAgIG8gU2Vy aWFsIHNwZWVkLWNoYW5naW5nIGJ1ZyBpbiBMaW51eCBmaXhlZC4KLSAgICAgICAgICAgICAgIG8g IlVuYmFsYW5jZWQgYnJhY2VzIiBzY3JpcHQgcGFyc2luZyBlcnJvcnMgd2hlbiB1c2luZwotICAg ICAgICAgICAgICAgICBce251bWJlcn0gZml4ZWQuCi0gICAgICAgICAgICAgICBvICJpZiBkZWZp bmVkIFx2KG5hbWUpIiBmaXhlZCB0byBiZWhhdmUgYXMgZGVzY3JpYmVkIGluIHRoZQotICAgICAg ICAgICAgICAgICBib29rLgotICAgICAgICAgICAgICAgbyBGaXhlZCBQcm9ibGVtcyBjYXVzZWQg YnkgTE9DQUwgdmFyaWFibGVzIHdob3NlIG5hbWVzIGFyZQotICAgICAgICAgICAgICAgICBsZWZ0 IHN1YnN0cmluZ3Mgb2YgbWFjcm8gbmFtZXMuCi0gICAgICAgICAgICAgICBvIFRoZSBJTlBVVCBj b21tYW5kIHdhcyBmaXhlZCB0byBob25vciB0aGUgUEFSSVRZIHNldHRpbmcuCi0gICAgICAgICAg ICAgICBvIEZpeGVkIGJ1ZyB3aXRoIENPUFkgdG8gZXhpc3RpbmcgZmlsZSB0aGF0IGlzIGxvbmdl ciB0aGFuCi0gICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlLgotICAgICAgICAgICAgICAgbyBS RUlOUFVUIGNvbW1hbmQgZmFpbGVkIHRvIHN0cmlwIGJyYWNlcy9xdW90ZXMgYXJvdW5kIGl0cwot ICAgICAgICAgICAgICAgICB0YXJnZXQgc3RyaW5nLgotICAgICAgICAgICAgICAgbyBOZXR3b3Jr IGRpcmVjdG9yeSBsb29rdXBzIGRpZG4ndCB3b3JrIGZvciBTU0gKLSAgICAgICAgICAgICAgICAg Y29ubmVjdGlvbnMuCi0gICAgICAgICAgICAgICBvIFJFTU9URSBTRVQgeyBGSUxFLCBUUkFOU0ZF UiB9IENIQVJBQ1RFUi1TRVQgZml4ZWQuCi0gICAgICAgICAgICAgICBvIENsb3NlZCBzb21lIGhv bGVzIHdoZXJlYnkgYW4gaW5jb21wbGV0ZWx5IHJlY2VpdmVkIGZpbGUKLSAgICAgICAgICAgICAg ICAgd2FzIG5vdCBkZWxldGVkIHdoZW4gU0VUIEZJTEUgSU5DT01QTEVURSBpcyBESVNDQVJELCBl LmcuCi0gICAgICAgICAgICAgICAgIHdoZW4gdGhlIEtlcm1pdCBpcyBodW5nIHVwIHVwb24uCi0g ICAgICAgICAgICAgICBvIFNFVCBYRkVSIENIQVJBQ1RFUi1TRVQgVFJBTlNQQVJFTlQgZml4ZWQg dG8gZG8gdGhlIHNhbWUKLSAgICAgICAgICAgICAgICAgYXMgU0VUIFhGRVIgVFJBTlNMQVRJT04g T0ZGLgotICAgICAgICAgICAgICAgbyBTRVQgSE9TVCBQVFkgKGUuZy4gU1NIKSBjb25uZWN0aW9u IGZpeGVkIHRvIHBhc3MgYWxvbmcKLSAgICAgICAgICAgICAgICAgd2luZG93LXNpemUgY2hhbmdl cy4KLSAgICAgICAgICAgICAgIG8gQy1LZXJtaXQgc2VhcmNoIHBhdGggZm9yIFRBS0UgZmlsZXMg d2FzIGFjY2lkZW50YWxseQotICAgICAgICAgICAgICAgICBkaXNhYmxlZC4KLQotICAgICAgICBG VFAgY2xpZW50IGJ1Z3MgZml4ZWQ6Ci0KLSAgICAgICAgICAgICAgIG8gQ2hhcmFjdGVyIHNldCB0 cmFuc2xhdGlvbiB3YXMgYnJva2VuIG9uIGxpdHRsZS1lbmRpYW4KLSAgICAgICAgICAgICAgICAg KGUuZy4gUEMpIGFyY2hpdGVjdHVyZXMuCi0gICAgICAgICAgICAgICBvIEZUUCBQVVQgL1NFUlZF Ui1SRU5BTUU6LCAvUkVOQU1FLVRPOiwgL01PVkUtVE86IHN3aXRjaGVzCi0gICAgICAgICAgICAg ICAgIHdlcmUgc3RpY2t5LgotICAgICAgICAgICAgICAgbyBNYWtlIFNFVCBUUkFOU0ZFUiBNT0RF IE1BTlVBTCBhcHBseSB0byBGVFAuCi0gICAgICAgICAgICAgICBvIE1ha2UgU0VUIEZJTEUgSU5D T01QTEVURSB7IEtFRVAsIERJU0NBUkQgfSBhcHBseSB0byBGVFAuCi0gICAgICAgICAgICAgICBv IEZUUCBNR0VUIC9VUERBVEUgaGFuZGxlZCBlcXVhbCB0aW1lcyBpbmNvcnJlY3RseS4KLSAgICAg ICAgICAgICAgIG8gRlRQIE1HRVQgL1JFQ09WRVIgZml4ZWQgdG8gaWdub3JlIGZpbGUgZGF0ZXMs IHVzZSBvbmx5Ci0gICAgICAgICAgICAgICAgIHNpemUuCi0gICAgICAgICAgICAgICBvIEZUUCBN R0VUIC9SRUNPVkVSIHNvbWV0aW1lcyBkb3dubG9hZGVkIGZpbGVzIGl0IGRpZG4ndAotICAgICAg ICAgICAgICAgICBuZWVkIHRvLgotICAgICAgICAgICAgICAgbyBGVFAgZG93bmxvYWRzIHdpdGgg VFJBTlNGRVIgRElTUExBWSBCUklFRiBjb3VsZCBnaXZlCi0gICAgICAgICAgICAgICAgIG1pc2xl YWRpbmcgZXJyb3IgbWVzc2FnZXMuCi0gICAgICAgICAgICAgICBvIEZUUCBNR0VUIHRlbXAgZmls ZSBub3QgZGVsZXRlZCBpZiBGVFAgREVCVUcgc2V0IHRvIE9GRgotICAgICAgICAgICAgICAgICBh ZnRlciBpdCB3YXMgT04uCi0gICAgICAgICAgICAgICBvIExPQ1VTIG5vdCBzd2l0Y2hlZCBiYWNr IHdoZW4gRlRQIGNvbm5lY3Rpb24gaXMgbG9zdC4KLSAgICAgICAgICAgICAgIG8gU2V0IGluY29t aW5nIGZpbGUgZGF0ZSBldmVuIGlmIGl0IHdhcyBub3QgY29tcGxldGVseQotICAgICAgICAgICAg ICAgICByZWNlaXZlZC4KLSAgICAgICAgICAgICAgIG8gRlRQIE1HRVQgc2VudCBTSVpFIGFuZCBN RFRNIGNvbW1hbmRzIGV2ZW4gd2hlbiBpdCBkaWRuJ3QKLSAgICAgICAgICAgICAgICAgaGF2ZSB0 by4KLSAgICAgICAgICAgICAgIG8gRlRQIE1HRVQgc2VudCBTSVpFIGFuZCBNRFRNIGNvbW1hbmRz IGV2ZW4gd2hlbiBpdCBrbmV3Ci0gICAgICAgICAgICAgICAgIHRoZXkgd291bGRuJ3Qgd29yay4K LSAgICAgICAgICAgICAgIG8gRlRQIE1HRVQgZmFpbGVkIGlmIG5vIGZpbGVzIHdlcmUgc2VsZWN0 ZWQgZm9yIGRvd25sb2FkLgotICAgICAgICAgICAgICAgbyBGVFAgTUdFVCBhKiBiKiBjKiB3b3Vs ZCBmYWlsIHRvIGdldCBhbnkgYyoncyBpZiBubyBiKidzCi0gICAgICAgICAgICAgICAgIGV4aXN0 ZWQuCi0gICAgICAgICAgICAgICBvIEJpZyBwcm9ibGVtcyBjYW5jZWxpbmcgTUdFVCB3aXRoIEN0 cmwtQy4KLSAgICAgICAgICAgICAgIG8gU29tZSBleHRyYW5lb3VzIExPQ1VTIGRpYWxvZ3Mgc3F1 ZWxjaGVkLgotICAgICAgICAgICAgICAgbyBTb21lIGluY29uc2lzdGVuY2llcyBpbiBTRVQgRlRQ IEZJTEVOQU1FUyBBVVRPIGZpeGVkLgotICAgICAgICAgICAgICAgbyBGaXhlZCBmaWxlLWRlc2Ny aXB0b3IgcGlsZXVwIGFmdGVyIG11bHRpcGxlIE1HRVRzIHdoZW4KLSAgICAgICAgICAgICAgICAg dXNpbmcgbWtzdGVtcCgpLgotICAgICAgICAgICAgICAgbyBGaXhlZCAibWdldCBmb28iLCB3aGVy ZSBmb28gaXMgYSBkaXJlY3RvcnkgbmFtZS4KLQotICAgICAgICBGVFAgaW1wcm92ZW1lbnRzOgot Ci0gICAgICAgICAgICAgICBvIE5ldyBbMTY3XUZUUCBwcm90b2NvbCBmZWF0dXJlcyBhZGRlZCAo RkVBVCwgTUxTRCkuCi0gICAgICAgICAgICAgICBvIEZUUCBNR0VUIC9SRUNVUlNJVkUgbm93IHdv cmtzIGFzIGV4cGVjdGVkIGlmIHNlcnZlcgotICAgICAgICAgICAgICAgICBzdXBwb3J0cyBNTFNE LgotICAgICAgICAgICAgICAgbyBGVFAgTUdFVCAvREFURVMtRElGRkVSIHRvIGRvd25sb2FkIGlm IGxvY2FsIGFuZCByZW1vdGUKLSAgICAgICAgICAgICAgICAgZmlsZSBkYXRlcyBkaWZmZXIuCi0g ICAgICAgICAgICAgICBvIEZUUCBEQVRFUyBkZWZhdWx0IGNoYW5nZWQgdG8gT04uCi0gICAgICAg ICAgICAgICBvIEZUUCBNUFVULCBNR0VUIC9FWENFUFQgbm93IGFsbG93cyB1cCB0byA2NCBwYXR0 ZXJucyAodXAKLSAgICAgICAgICAgICAgICAgZnJvbSA4KS4KLSAgICAgICAgICAgICAgIG8gVG9w LWxldmVsIFNJVEUgYW5kIFBBU1NJVkUgY29tbWFuZHMgYWRkZWQgZm9yCi0gICAgICAgICAgICAg ICAgIGNvbnZlbmllbmNlLgotICAgICAgICAgICAgICAgbyBNR0VUIC9DT0xMSVNJT046QVBQRU5E IC9BUy1OQU1FOm5ld2ZpbGUgKi4qIHB1dHMgYWxsCi0gICAgICAgICAgICAgICAgIHJlbW90ZSBm aWxlcyBpbnRvIG9uZSBsb2NhbCBmaWxlLgotICAgICAgICAgICAgICAgbyBTRVQgRlRQIFNFUlZF Ui1USU1FLU9GRlNFVCBmb3Igd2hlbiBzZXJ2ZXIgaGFzIHdyb25nCi0gICAgICAgICAgICAgICAg IHRpbWV6b25lIHNldC4KLSAgICAgICAgICAgICAgIG8gQWxsb3cgZm9yIGFsdGVybmF0aXZlIHNl cnZlciBpbnRlcnByZXRhdGlvbnMgb2YgW01dTVBVVAotICAgICAgICAgICAgICAgICAvVU5JUVVF LgotICAgICAgICAgICAgICAgbyBTRVQgRlRQIEFOT05ZTU9VUy1QQVNTV09SRCBsZXRzIHlvdSBz cGVjaWZ5IHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgIGFub255bW91cyBwYXNzd29yZC4K LSAgICAgICAgICAgICAgIG8gQWxsb3cgIkdFVCAvUkVDVVJTSVZFIHBhdGgvZmlsZSIgdG8gZm9y Y2UgbG9jYWwKLSAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IGNyZWF0aW9uLgotICAgICAg ICAgICAgICAgbyBTRVQgRlRQIERJU1BMQVkgaXMgbGlrZSBTRVQgVFJBTlNGRVIgRElTUExBWSBi dXQgYXBwbGllcwotICAgICAgICAgICAgICAgICBvbmx5IHRvIEZUUC4KLSAgICAgICAgICAgICAg IG8gRlRQIHsgRU5BQkxFLCBESVNBQkxFIH0gbmV3LXByb3RvY29sLWZlYXR1cmUtbmFtZS4KLSAg ICAgICAgICAgICAgIG8gRlRQIE1HRVQgL05PRE9URklMRVMuCi0gICAgICAgICAgICAgICBvIERl YnVnIGxvZyBub3cgcmVjb3JkcyBGVFAgY29tbWFuZHMgYW5kIHJlc3BvbnNlcyBpbgotICAgICAg ICAgICAgICAgICBncmVwLWFibGUgZm9ybWF0LgotCi0gICBbIFsxNjhdVG9wIF0gWyBbMTY5XUNv bnRlbnRzIF0gWyBbMTcwXUMtS2VybWl0IF0gWyBbMTcxXUtlcm1pdCBIb21lIF0KLQotMS4gRklY RVMgU0lOQ0UgVkVSU0lPTiA3LjAuMTk2IEZpcnN0LCB0aGUgY2hhbmdlcyBmcm9tIDcuMC4xOTYg dG8gNy4wLjE5Ny4uLgotU291cmNlIGFuZCBtYWtlZmlsZSB0d2Vha3MgdG8gZ2V0IHN1Y2Nlc3Nm dWwgYnVpbGRzIG9uIHBsYXRmb3JtcyB0aGF0IHdlcmUKLW5vdCBhdmFpbGFibGUgaW4gdGltZSBm b3IgdGhlIDcuMCByZWxlYXNlOgotCi0gICAgICogNC4yQlNECi0gICAgICogNC4zQlNECi0gICAg ICogQUlYIDQuMwotICAgICAqIEFUJlQgM0IyIGFuZCAzQjIwCi0gICAgICogQmVPUyA0LjUKLSAg ICAgKiBDTElYCi0gICAgICogSW50ZXJhY3RpdmUgVU5JWCBTeXN0ZW0gVi8zODYgUjMuMiBWNC4x LjEKLSAgICAgKiBPUy05LzY4MDAwCi0gICAgICogT1NGLzEgMS4zLgotICAgICAqIFBTLzIgQUlY IDEuMi4xCi0gICAgICogU0NPIE9TUjUuMC54Ci0gICAgICogU0NPIFhlbml4IDIuMy40Ci0gICAg ICogU0lOSVggNS40MS9JbnRlbAotICAgICAqIFN0cmF0dXMgRlRYCi0gICAgICogU3RyYXR1cyBW T1MKLSAgICAgKiBTdW5PUyA0LjEgd2l0aCBYLjI1Ci0gICAgICogVWx0cml4IDQuMgotICAgICAq IFVuaXh3YXJlIDIuMAotCi0gICBUaGVyZSB3ZXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyBmcm9t IDE5NiB0byAxOTcuCi0KLSAgIEZpeGVzIGFwcGxpZWQgYWZ0ZXIgQy1LZXJtaXQgNy4wLjE5NyB3 YXMgcmVsZWFzZWQ6Ci0KLSAgIFNvdXJjZSBjb2RlOiBCaWcgZmxleGVsaW50IGFuZCAiZ2NjIC1X YWxsIiBhdWRpdCBhbmQgY2xlYW51cC4KLQotICAgQ29uZmlndXJhdGlvbjoKLSAgICAgKiBTb2xh cmlzIFJUUy9DVFMgKGhhcmR3YXJlIGZsb3cgY29udHJvbCkgZGlkbid0IHdvcmsuCi0gICAgICog QlNESSBSVFMvQ1RTIHdvcmtlZCBvbmx5IGluIG9uZSBkaXJlY3Rpb24uCi0gICAgICogRnJlZUJT RCA0LjAgd2l0aCBuY3Vyc2VzIDUuMCBicm9rZSBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNpbmcu Ci0gICAgICogUU5YLTMyIGJ1aWxkIGxhY2tlZCAtREJJR0JVRk9LIHNvIGNvdWxkbid0IGV4ZWN1 dGUgYmlnIG1hY3Jvcy4KLQotICAgQ29ubmVjdGlvbnM6Ci0gICAgICogU0VUIEhPU1QgL1BUWSBk aWRuJ3Qgd29yayBvbiBzb21lIHBsYXRmb3Jtcy4KLSAgICAgKiBCcm9rZW4gU0VUIEhPU1QgL1VT RVI6eHh4IC9QQVNTV09SRDp5eXkgL0FDQ09VTlQ6enp6IHN3aXRjaGVzCi0gICAgICAgZml4ZWQu Ci0gICAgICogVHJhbnNwYXJlbnQgcHJpbnRpbmcgd2FzIGJyb2tlbiBpbiBVbml4LgotICAgICAq IEFOU1dFUiAwICh3YWl0IGZvcmV2ZXIpIGRpZG4ndCB3b3JrLgotICAgICAqIFNvbWUgcHJvYmxl bXMgaW4gTXVsdGl0ZWNoIG1vZGVtIGNvbW1hbmQgc3RyaW5ncy4KLSAgICAgKiBTcHVyaW91cyAi P1NvcnJ5LCBjYW4ndCBjb25kaXRpb24gY29uc29sZSB0ZXJtaW5hbCIgZXJyb3JzLgotICAgICAq IERpc2FibGluZyBtb2RlbSBjb21tYW5kIHN0cmluZ3MgYnkgc2V0dGluZyB0aGVtIHRvIG5vdGhp bmcgYnJva2UKLSAgICAgICBkaWFsaW5nLgotICAgICAqIFNFVCBESUFMIFRJTUVPVVQgdmFsdWUg d2FzIHVzdWFsbHkgaWdub3JlZC4KLSAgICAgKiBTRVQgRElBTCBNRVRIT0QgUFVMU0UgZGlkbid0 IHdvcmsuCi0gICAgICogQ2VydGFpbiBtb2RlbSBjb21tYW5kcywgaWYgY2hhbmdlZCwgbm90IHJl ZnJlc2hlZCBpZiBtb2RlbSB0eXBlCi0gICAgICAgY2hhbmdlZC4KLSAgICAgKiBTRVQgU0VTU0lP Ti1MT0cgY29tbWFuZCB3YXMgbWlzc2luZyBmcm9tIFZNUy4KLSAgICAgKiBWTVMgc2Vzc2lvbiBs b2cgZm9ybWF0IGZpeGVkIGZvciBzY3JpcHRzLgotICAgICAqIEhBTkdVUCBieSBkcm9wcGluZyBE VFIgZGlkbid0IHdvcmsgaW4gTmV0QlNELgotICAgICAqIFNFVCBGTE9XIC9BVVRPIHZlcnN1cyBT RVQgRkxPVyBjb25mdXNpb24gZml4ZWQuCi0gICAgICogU3B1cmlvdXMgc2Vjb25kYXJ5IFNvbGFy aXMgbG9ja2ZpbGUgcmVtb3ZlZC4KLSAgICAgKiBTQ08gT1NSNSBEVFIgT24vT2ZmIGhhbmd1cC4K LSAgICAgKiBVVUNQIGxvY2tmaWxlIHJhY2UgY29uZGl0aW9uLgotCi0gICBDb21tYW5kcyBhbmQg c2NyaXB0czoKLSAgICAgKiBNaXNzaW5nIENBVVRJT1VTIGFuZCBGQVNUIGNvbW1hbmRzIHJlc3Rv cmVkLgotICAgICAqIEJyb2tlbiBQVFkgY29tbWFuZCBpbiBsYXRlLW1vZGVsIExpbnV4ZXMgZml4 ZWQgKEFQSSBjaGFuZ2VkKS4KLSAgICAgKiBGaXhlZCBvZmYtYnktb25lIGVycm9yIGluIGNvbW1h bmQgcmVjYWxsIHdoZW4gc3dpdGNoaW5nIGRpcmVjdGlvbi4KLSAgICAgKiBGaXhlZCByZWNhbGwg b2YgY29tbWFuZHMgdGhhdCBjb250YWluICc/Jy4KLSAgICAgKiBDT1BZIC9TV0FQLUJZVEVTIGRp ZG4ndCB3b3JrIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcy4KLSAgICAgKiBWYXJpb3VzIGNvbWJpbmF0 aW9ucyBvZiBDT1BZIHN3aXRjaGVzIGRpZG4ndCB3b3JrLgotICAgICAqIFZhcmlvdXMgcHJvYmxl bXMgd2l0aCBDT1BZIG9yIFJFTkFNRSB3aXRoIGEgZGlyZWN0b3J5IG5hbWUgYXMKLSAgICAgICB0 YXJnZXQuCi0gICAgICogU0hJRlQgZGlkbid0IGRlY3JlbWVudCBcdihhcmdjKSBpZiB1c2VkIHdp dGhpbiBJRiwgRUxTRSwgb3IgU1dJVENICi0gICAgICAgYmxvY2suCi0gICAgICogU0hJRlQgZGlk bid0IGFmZmVjdCB0aGUgXCUqIHZhcmlhYmxlLgotICAgICAqIERpdmlkZSBieSB6ZXJvIGltcHJv cGVybHkgaGFuZGxlZCBpbiBzb21lIFxmdW5jdGlvbigpcy4KLSAgICAgKiBQcm9ibGVtcyB3aXRo IFJFVFVSTiBmcm9tIHJpZ2h0LXJlY3Vyc2l2ZSBmdW5jdGlvbnMuCi0gICAgICogRlNFRUsgL0xJ TkUgXCVjIExBU1QgZGlkbid0IHdvcmsgaWYgYWxyZWFkeSBhdCBlbmQuCi0gICAgICogU29tZSBi dWZmZXIgdnVsbmVyYWJpbGl0aWVzIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIHdlcmUKLSAg ICAgICBkaXNjb3ZlcmVkIGFuZCBmaXhlZC4KLSAgICAgKiBcZnJkaXJlY3RvcnkoKSBmaXhlZCBu b3QgdG8gZm9sbG93IHN5bWJvbGljIGxpbmtzLgotICAgICAqIFNFVCBFWElUIFdBUk5JTkcgT0ZG IGZpeGVkIHRvIHdvcmsgd2hlbiBFWElUIGdpdmVuIGluIGEgc2NyaXB0LgotICAgICAqIE1pc3Np bmcgREVMRVRFIGFuZCBNS0RJUiBlcnJvciBtZXNzYWdlIGZpeGVkLgotICAgICAqIFxmZGF5KCkg Y29yZSBkdW1wIGZvciBhbmNpZW50IGRhdGVzIGZpeGVkLgotCi0gICBGaWxlIHRyYW5zZmVyOgot ICAgICAqIFNFTkQgL0NPTU1BTkQgd2FzIGJyb2tlbi4KLSAgICAgKiBDUkVDRUlWRSB3YXMgYnJv a2VuIChidXQgUkVDRUlWRSAvQ09NTUFORCB3YXMgT0spLgotICAgICAqIFF1b3Rpbmcgd2lsZGNh cmQgY2hhcnMgaW4gZmlsZW5hbWVzIGRpZG4ndCB3b3JrLgotICAgICAqIFByb2JsZW1zIGNhbmNl bGluZyBzdHJlYW1pbmcgZmlsZSB0cmFuc2ZlcnMgd2l0aCBYIG9yIFouCi0gICAgICogUHJvYmxl bXMgc2hpZnRpbmcgYmV0d2VlbiBzdHJlYW1pbmcgYW5kIHdpbmRvd2luZyBmaWxlIHRyYW5zZmVy LgotICAgICAqIE5vbi1GVUxMIGZpbGUtdHJhbnNmZXIgZGlzcGxheXMgZXJyb25lb3VzbHkgc2Fp ZCBTVFJFQU1JTkcgd2hlbgotICAgICAgIG5vdC4KLSAgICAgKiBBbiBhY3RpdmUgU0VORC1MSVNU IHByZXZlbnRlZCBHRVQgZnJvbSB3b3JraW5nLgotICAgICAqIFNFVCBTRVJWRVIgR0VULVBBVEgg aW50ZXJwcmV0YXRpb24gb2YgcmVsYXRpdmUgbmFtZXMgbGlrZSAiLiIgd2FzCi0gICAgICAgd3Jv bmcuCi0gICAgICogVGhlIE1BSUwgY29tbWFuZCB3YXMgYnJva2VuLgotICAgICAqICJrZXJtaXQg LXMgKiIgbWlnaHQgaGF2ZSBza2lwcGVkIHNvbWUgZmlsZXMuCi0gICAgICogVHJhbnNhY3Rpb24g bG9nIGVudHJpZXMgd2VyZSBub3QgbWFkZSBmb3IgZXh0ZXJuYWwgcHJvdG9jb2wKLSAgICAgICB0 cmFuc2ZlcnMuCi0gICAgICogRmlsZSBjb3VudCByZXBvcnQgZml4ZWQgdG8gc2hvdyBudW1iZXIg b2YgZmlsZXMgYWN0dWFsbHkKLSAgICAgICB0cmFuc2ZlcnJlZC4KLSAgICAgKiBGaXhlZCBmaWxl bmFtZSBjb252ZXJzaW9uIHRvIGNvbnZlcnQgc3BhY2VzIHRvIHVuZGVyc2NvcmVzLgotICAgICAq IE1hZGUgU0VUIFBSRUZJWElORyAvIFNFVCBDT05UUk9MIFBSRUZJWCBhbHNvIGFkanVzdCBDTEVB UkNIQU5ORUwuCi0gICAgICogTW9yZSAiUmVjZWl2ZSB3aW5kb3cgZnVsbCIgZXJyb3JzIGZpeGVk LgotICAgICAqIEJyb2tlbiB0ZXJtaW5hbCBidWZmZXJpbmcgYWZ0ZXIgY3Vyc2VzIGRpc3BsYXkg aW4gU29sYXJpcyBmaXhlZC4KLSAgICAgKiBTRVQgRklMRSBJTkNPTVBMRVRFIERJU0NBUkQgZGlk IG5vdCB3b3JrIGluIGFsbCBjYXNlcy4KLSAgICAgKiBQYWNrZXQgbG9nIGNoYW5nZWQgdG8gcmVm b3JtYXQgdGhlIHN0YXJ0LW9mLXBhY2tldCBjaGFyYWN0ZXIKLSAgICAgICBwcmludGFibHkuCi0g ICAgICogRHluYW1pYyB0aW1lb3V0cyBjb3VsZCBncm93IHJpZGljdWxvdXNseSBsYXJnZS4KLQot ICAgQ2hhcmFjdGVyIHNldHM6Ci0gICAgICogSGVicmV3LTcgdHJhbnNsYXRpb25zIG1pc3NlZCB0 aGUgbGV0dGVyIFRhdi4KLSAgICAgKiBDMSBhcmVhIG9mIENQMTI1MiB3YXMgaWdub3JlZC4KLSAg ICAgKiBTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCBUUkFOU1BBUkVOVCBjb3VsZCBnaXZlIGdh cmJhZ2UKLSAgICAgICB0cmFuc2xhdGlvbnMuCi0gICAgICogVFJBTlNMQVRFIG1pZ2h0IG5vdCB3 b3JrIG9uIExpdHRsZSBFbmRpYW4gYXJjaGl0ZWN0dXJlcy4KLSAgICAgKiBJbnN1ZmZpY2llbnQg cmFuZ2UgY2hlY2tpbmcgaW4gY2VydGFpbiBUUkFOU0xBVEUgb3BlcmF0aW9ucy4KLQotICAgVGhl IGZvbGxvd2luZyBidWdzIGluIEMtS2VybWl0IDguMC4yMDAgd2VyZSBmaXhlZCBpbiA4LjAuMjAx OgotCi0gICAgICogQW4gb2JzY3VyZSBwYXRoIHRocm91Z2ggdGhlIGNvZGUgY291bGQgY2F1c2Ug dGhlIFVuaXggdmVyc2lvbiBvZgotICAgICAgIEMtS2VybWl0IHRvIGR1bXAgY29yZSBkdXJpbmcg aXRzIHN0YXJ0dXAgc2VxdWVuY2UuIFRoaXMgaGFwcGVuZWQgdG8KLSAgICAgICBvbmx5IG9uZSBw ZXJzb24sIGJ1dCBub3cgaXQncyBmaXhlZC4KLSAgICAgKiBXaGVuIEMtS2VybWl0IDguMCBpcyBp biBLZXJtaXQgc2VydmVyIG1vZGUgYW5kIHRoZSBjbGllbnQgc2F5cyAiZ2V0Ci0gICAgICAgYmxh aCIsIHdoZXJlIGJsYWggKG9uIHRoZSBzZXJ2ZXIpIGlzIGEgc3ltbGluayByYXRoZXIgdGhhbiBh IHJlYWwKLSAgICAgICBmaWxlLCB0aGUgc2VydmVyIHVucmVhc29uYWJseSByZWZ1c2VkIHRvIHNl bmQgdGhlIGxpbmtlZC10byBmaWxlLgotICAgICAqIFdoZW4gQy1LZXJtaXQgaXMgYW4gRlRQIGNs aWVudCBhbmQgc2F5cyAiZ2V0IGZvby9iYXIiIChpLmUuIGEKLSAgICAgICBmaWxlbmFtZSB0aGF0 IGluY2x1ZGVzIG9uZSBvciBtb3JlIHBhdGggc2VnbWVudHMpLCBpdCBmYWlsZWQgdG8KLSAgICAg ICBhY2NlcHQgdGhlIGluY29taW5nIGZpbGUgKHRoaXMgaGFwcGVuZWQgb25seSB3aXRoIEdFVCwg bm90IE1HRVQpLgotICAgICAqIEFycmF5IHJlZmVyZW5jZXMgc2hvdWxkIGJlIGNhc2UgaW5zZW5z aXRpdmUgYnV0IG9ubHkgbG93ZXJjYXNlCi0gICAgICAgYXJyYXkgbGV0dGVycyB3ZXJlIGFjY2Vw dGVkLgotICAgICAqIFNIT1cgVkFSSUFCTEVTIGR1bXBlZCBjb3JlIG9uIFx2KHNleHByZXNzaW9u KSBhbmQgXHYoc3ZhbHVlKS4KLSAgICAgKiBTcHVyaW91cyByZWZ1c2FscyBvZiByZW1vdGUgZGly ZWN0b3J5IGxpc3RpbmdzIGlmIHRoZSByZW1vdGUKLSAgICAgICBzZXJ2ZXIncyBkYXRlIHdhcyBz ZXQgaW4gdGhlIHBhc3QuCi0gICAgICogSW4gQUlYLCBhbmQgbWF5YmUgZWxzZXdoZXJlIHRvbywg S2VybWl0J3MgQ09QWSBjb21tYW5kIGFsd2F5cwotICAgICAgIGZhaWxlZCB3aXRoICJTb3VyY2Ug YW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlIiB3aGVuIHRoZQotICAgICAgIGRlc3Rp bmF0aW9uIGZpbGUgZGlkbid0IGV4aXN0LgotICAgICAqIFRoZSBWTVMgdmVyc2lvbiBvZiBDLUtl cm1pdCBkaWQgbm90IHdvcmsgaW4gQmF0Y2ggb3Igd2hlbiBTUEFXTidkLgotICAgICAgIFRvIGNv bXBvdW5kIHRoZSBwcm9ibGVtLCBpdCBhbHNvIHByZXR0eSBtdWNoIGlnbm9yZWQgdGhlIC1CIGFu ZCAtegotICAgICAgIGNvbW1hbmQtbGluZSBvcHRpb25zLCB3aG9zZSBwdXJwb3NlIGlzIHRvIHdv cmsgYXJvdW5kIHN1Y2gKLSAgICAgICBwcm9ibGVtcy4KLSAgICAgKiBDLUtlcm1pdCA4LjAgY291 bGQgbm90IGJlIGJ1aWx0IG9uIElSSVggNS54LgotICAgICAqIFRoZSBDLUtlcm1pdCA4LjAgYnVp bGQgZm9yIFFOWDYgc2FpZCBpdCB3YXMgYW4gIih1bmtub3duIHZlcnNpb24pIi4KLQotICAgT3Ro ZXIgZml4ZXMgYXJlIGxpc3RlZCBpbiB0aGUgWzE3Ml1wcmV2aW91cyBzZWN0aW9uLgotCi0gICBb IFsxNzNdVG9wIF0gWyBbMTc0XUNvbnRlbnRzIF0gWyBbMTc1XUMtS2VybWl0IF0gWyBbMTc2XUtl cm1pdCBIb21lIF0KLQotMi4gU1NIIEFORCBIVFRQCi0KLTIuMS4gU1NIIENvbm5lY3Rpb25zCi0K LSAgICAgVGhpcyBzZWN0aW9uIGRvZXMgbm90IGFwcGx5IHRvIFsxNzddS2VybWl0IDk1IDIuMCwg d2hpY2ggaGFzIGl0cyBvd24KLSAgICAgYnVpbHQtaW4gU1NIIGNsaWVudCwgd2hpY2ggaXMgZG9j dW1lbnRlZCBbMTc4XVNFUEFSQVRFTFkuCi0KLSAgIE9uIG1vc3QgVU5JWCBwbGF0Zm9ybXMsIEMt S2VybWl0IGNhbiBtYWtlIFNTSCAoU2VjdXJlIFNIZWxsKSBjb25uZWN0aW9uCi0gICBieSBydW5u aW5nIHRoZSBleHRlcm5hbCBTU0ggY29tbWFuZCBvciBwcm9ncmFtIHRocm91Z2ggaXRzCi0gICBw c2V1ZG90ZXJtaW5hbCBpbnRlcmZhY2UuIFRoZSBjb21tYW5kIGlzOgotCi0gICBTU0ggdGV4dAot ICAgICAgICAgIFRlbGxzIEtlcm1pdCB0byBzdGFydCB0aGUgZXh0ZXJuYWwgU1NIIGNsaWVudCwg cGFzc2luZyB0aGUgZ2l2ZW4KLSAgICAgICAgICB0ZXh0IHRvIGl0IG9uIHRoZSBjb21tYW5kIGxp bmUuIE5vcm1hbGx5IHRoZSB0ZXh0IGlzIGp1c3QgdGhlCi0gICAgICAgICAgaG9zdG5hbWUsIGJ1 dCBpdCBjYW4gYmUgYW55dGhpbmcgZWxzZSB0aGF0IGlzIGFjY2VwdGFibGUgdG8gdGhlCi0gICAg ICAgICAgc3NoIGNsaWVudC4gSWYgdGhlIGNvbW1hbmQgc3VjY2VlZHMsIHRoZSBjb25uZWN0aW9u IGlzIG1hZGUgYW5kCi0gICAgICAgICAgS2VybWl0IGF1dG9tYXRpY2FsbHkgZW50ZXJzIENPTk5F Q1QgKHRlcm1pbmFsKSBtb2RlLiBZb3UgY2FuIHVzZQotICAgICAgICAgIHRoZSBTU0ggY29tbWFu ZCB0byBtYWtlIGEgY29ubmVjdGlvbiB0byBhbnkgaG9zdCB0aGF0IGhhcyBhbiBTU0gKLSAgICAg ICAgICBzZXJ2ZXIuCi0KLSAgIEtlcm1pdCdzIFNTSCBjb21tYW5kIGdpdmVzIHlvdSBhbGwgdGhl IGZlYXR1cmVzIG9mIEtlcm1pdCBvbiBhbiBTU0gKLSAgIGNvbm5lY3Rpb246IGNvbW1hbmQgbGFu Z3VhZ2UsIGZpbGUgdHJhbnNmZXIsIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24sCi0gICBzY3Jp cHRpbmcsIGFuZCBhbGwgdGhlIHJlc3QuIEJ5IGRlZmF1bHQsIEMtS2VybWl0IGludm9rZXMgU1NI IHdpdGggIi1lCi0gICBub25lIiwgd2hpY2ggZGlzYWJsZXMgdGhlIHNzaCBlc2NhcGUgY2hhcmFj dGVyIGFuZCBtYWtlcyB0aGUgY29ubmVjdGlvbgotICAgdHJhbnNwYXJlbnQgZm9yIHB1cnBvc2Vz IG9mIGZpbGUgdHJhbnNmZXIuIFlvdSBjYW4sIGhvd2V2ZXIsIGNoYW5nZSB0aGUKLSAgIFNTSCBp bnZvY2F0aW9uIHRvIHdoYXRldmVyIGVsc2UgeW91IG1pZ2h0IG5lZWQgKGFuIGV4cGxpY2l0IHBh dGgsCi0gICBhZGRpdGlvbmFsIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIGV0Yykgd2l0aDoKLQot ICAgU0VUIFNTSCBDT01NQU5EIHRleHQKLSAgICAgICAgICBTcGVjaWZpZXMgdGhlIHN5c3RlbSBj b21tYW5kIHRoYXQgS2VybWl0J3MgU1NIIGNvbW1hbmQgc2hvdWxkCi0gICAgICAgICAgdXNlIHRv IGludm9rZSB0aGUgZXh0ZXJuYWwgU1NIIGNsaWVudC4gVXNlIHRoaXMgY29tbWFuZCB0bwotICAg ICAgICAgIHN1cHBseSBhIHNwZWNpZmljIHBhdGggb3IgYWx0ZXJuYXRpdmUgbmFtZSwgb3IgdG8g aW5jbHVkZQotICAgICAgICAgIGRpZmZlcmVudCBvciBtb3JlIGNvbW1hbmQtbGluZSBvcHRpb25z LgotCi0gICBJbiBtb3N0IGNhc2VzLCB0aGVzZSBjb25uZWN0aW9ucyB3b3JrIHF1aXRlIHdlbGwu IFRoZXkgY2FuIGJlIHNjcmlwdGVkCi0gICBsaWtlIGFueSBvdGhlciBjb25uZWN0aW9uLCBhbmQg ZmlsZSB0cmFuc2ZlciBnb2VzIGFzIGZhc3QgYXMsIG9yIGZhc3RlcgotICAgdGhhbiwgb24gYSBy ZWd1bGFyIFRlbG5ldCBjb25uZWN0aW9uLiBJbiBzb21lIGNhc2VzLCBob3dldmVyLCB0aGUKLSAg IHVuZGVybHlpbmcgcHNldWRvdGVybWluYWwgZHJpdmVyIGlzIGEgbGltaXRpbmcgZmFjdG9yLCBy ZXN1bHRpbmcgaW4KLSAgIHNsb3cgb3IgZmFpbGVkIGZpbGUgdHJhbnNmZXJzLiBTb21ldGltZXMg eW91IGNhbiB3b3JrIGFyb3VuZCBzdWNoCi0gICBwcm9ibGVtcyBieSByZWR1Y2luZyB0aGUgS2Vy bWl0IHBhY2tldCBsZW5ndGguIE5vdGUgdGhhdCBLZXJtaXQgZG9lcwotICAgbm90IGNvbnNpZGVy IFNTSCBjb25uZWN0aW9ucyB0byBiZSByZWxpYWJsZSwgc28gaXQgZG9lcyBub3Qgb2ZmZXIgdG8K LSAgIHVzZSBzdHJlYW1pbmcgaW4gS2VybWl0IHByb3RvY29sIHRyYW5zZmVycyAoYnV0IHlvdSBj YW4gZm9yY2UgaXQgd2l0aAotICAgU0VUIFJFTElBQkxFIG9yIFNFVCBTVFJFQU1JTkcgaWYgeW91 IHdpc2gpLgotCi0gICBUaGUgU1NIIGNvbW1hbmQgaXMgbGlrZSB0aGUgVEVMTkVUIGNvbW1hbmQ6 IGl0IGVudGVycyBDT05ORUNUIG1vZGUKLSAgIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY29ubmVj dGlvbiBpcyBtYWRlLiBUaGVyZWZvcmUsIHRvIHNjcmlwdCBhbiBTU0gKLSAgIGNvbm5lY3Rpb24s IHVzZToKLQotICBzZXQgaG9zdCAvcHR5IHNzaCAtZSBub25lIFsgb3RoZXItb3B0aW9ucyBdIGhv c3QKLSAgaWYgZmFpbCAuLi4KLQotICAgdG8gbWFrZSB0aGUgY29ubmVjdGlvbi4KLQotICAgSGVy ZSdzIGEgc2VxdWVuY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBtYWtlIGEgY29ubmVjdGlvbiB0byBh IGdpdmVuIGhvc3QKLSAgIHVzaW5nIFRlbG5ldCBpZiB0aGUgaG9zdCBhY2NlcHRzIGl0LCBvdGhl cndpc2UgU1NIOgotCi0gIGlmIG5vdCBkZWZpbmVkIFwlMSBleGl0IDEgVXNhZ2U6IFwlMCBob3N0 Ci0gIHNldCBxdWlldCBvbgotICBzZXQgaG9zdCBcJTEgMjMgL3RlbG5ldAotICBpZiBmYWlsIHsK LSAgICAgIHNldCBob3N0IC9wdHkgc3NoIC1sIFxtKHVzZXIpIC1lIG5vbmUgXCUxCi0gICAgICBp ZiBmYWlsIGV4aXQgMSBcJTE6IFRlbG5ldCBhbmQgU1NIIGJvdGggZmFpbAotICAgICAgZWNobyBT U0ggY29ubmVjdGlvbiB0byBcJTEgc3VjY2Vzc2Z1bAotICB9IGVsc2UgewotICAgICAgZWNobyBU ZWxuZXQgY29ubmVjdGlvbiB0byBcJTEgc3VjY2Vzc2Z1bAotICB9Ci0KLSAgIEluIFNTSCB2Miwg aXQgaXMgcG9zc2libGUgdG8gbWFrZSBhbiBTU0ggY29ubmVjdGlvbiBkaXJlY3QgdG8gYSBLZXJt aXQKLSAgIHNlcnZlciBzeXN0ZW0gaWYgdGhlIGhvc3QgYWRtaW5pc3RyYXRvciBoYXMgY29uZmln dXJlZCB0aGUgU1NIIHNlcnZlcgotICAgdG8gYWxsb3cgdGhpczsgWzE3OV1DTElDSyBIRVJFIGZv ciBkZXRhaWxzLgotCi0gICBTaW5jZSBLZXJtaXQgdXNlcyBleHRlcm5hbCBzc2ggY2xpZW50IHNv ZnR3YXJlLCBhbmQgc2luY2UgdGhlcmUgYXJlCi0gICBkaWZmZXJlbnQgc3NoIGNsaWVudHMgKGFu ZCBkaWZmZXJlbnQgcmVsZWFzZXMgb2YgZWFjaCBvbmUpLCB0aGUgZXhhY3QKLSAgIGNvbW1hbmQg dG8gYmUgdXNlZCB0byBtYWtlIGFuIFNTSC9LZXJtaXQgY29ubmVjdGlvbiBjYW4gdmFyeS4gSGVy ZSBpcwotICAgdGhlIGNvbW1hbmQgZm9yIHRoZSBPcGVuU1NIIDMuMC4ycDEgY2xpZW50OgotCi1z ZXQgaG9zdCAvcGlwZSBzc2ggLWUgbm9uZSBbIC1sIHVzZXJuYW1lIF0gLVQgLXMgaG9zdG5hbWUg a2VybWl0Ci0KLSAgIEV4YW1wbGU6Ci0KLXNldCBob3N0IC9waXBlIHNzaCAtZSBub25lIC1sIG9s Z2EgLVQgLXMgaHEueHl6Y29ycC5jb20ga2VybWl0Ci0KLSAgIFRoZSBTU0ggY2xpZW50IG1pZ2h0 IG9yIG1pZ2h0IG5vdCBwcm9tcHQgeW91IGZvciBhIHBhc3N3b3JkIG9yIG90aGVyCi0gICBpbmZv cm1hdGlvbiBiZWZvcmUgaXQgbWFrZXMgdGhlIGNvbm5lY3Rpb247IHRoaXMgZGVwZW5kcyBvbiB5 b3VyIFNTSAotICAgY29uZmlndXJhdGlvbiAoeW91ciBwdWJsaWMgYW5kIHByaXZhdGUga2V5cywg eW91ciBhdXRob3JpemVkIGhvc3RzCi0gICBmaWxlLCBldGMpLiBIZXJlJ3MgYSBicmllZiBzeW5v cHNpcyBvZiB0aGUgT3BlblNTSCBjbGllbnQgY29tbWFuZAotICAgc3ludGF4ICgibWFuIHNzaCIg Zm9yIGRldGFpbHMpOgotCi0gICAtZSBub25lCi0gICAgICAgICAgVGhpcyB0ZWxscyB0aGUgU1NI IGNsaWVudCB0byB1c2Ugbm8gZXNjYXBlIGNoYXJhY3Rlci4gU2luY2Ugd2UKLSAgICAgICAgICB3 aWxsIGJlIHRyYW5zZmVycmluZyBmaWxlcyBhY3Jvc3MgdGhlIGNvbm5lY3Rpb24sIHdlIGRvbid0 IHdhbnQKLSAgICAgICAgICB0aGUgY29ubmVjdGlvbiB0byBzdWRkZW5seSBibG9jayBiZWNhdXNl IHNvbWUgY2hhcmFjdGVyIGluIHRoZQotICAgICAgICAgIGRhdGEuCi0KLSAgIC1sIHVzZXJuYW1l Ci0gICAgICAgICAgVGhpcyBpcyB0aGUgdXNlcm5hbWUgb24gdGhlIHJlbW90ZSBob3N0LiBZb3Ug Y2FuIG9taXQgdGhlIC1sCi0gICAgICAgICAgb3B0aW9uIGFuZCBpdHMgYXJndW1lbnQgaWYgeW91 ciBsb2NhbCBhbmQgcmVtb3RlIHVzZXJuYW1lcyBhcmUKLSAgICAgICAgICB0aGUgc2FtZS4gSWYg dGhleSBhcmUgZGlmZmVyZW50LCB5b3UgbXVzdCBzdXBwbHkgdGhlIHJlbW90ZQotICAgICAgICAg IHVzZXJuYW1lLgotCi0gICAtVAotICAgICAgICAgIFRoaXMgdGVsbHMgdGhlIFNTSCBjbGllbnQg dG8gdGVsbCB0aGUgU1NIIHNlcnZlciBub3QgdG8gYWxsb2NhdGUKLSAgICAgICAgICBhIHBzZXVk b3Rlcm1pbmFsLiBXZSBhcmUgbm90IG1ha2luZyBhIHRlcm1pbmFsIGNvbm5lY3Rpb24sIHdlCi0g ICAgICAgICAgZG9uJ3QgbmVlZCBhIHRlcm1pbmFsLCBhbmQgaW4gZmFjdCBpZiBhIHRlcm1pbmFs IHdlcmUgYWxsb2NhdGVkCi0gICAgICAgICAgb24gdGhlIHJlbW90ZSBlbmQsIHRoZSBjb25uZWN0 aW9uIHdvdWxkIG5vdCB3b3JrLgotCi0gICAtcyAuLi4ga2VybWl0Ci0gICAgICAgICAgVGhpcyB0 ZWxscyB0aGUgU1NIIGNsaWVudCB0byB0ZWxsIHRoZSBTU0ggc2VydmVyIHRvIHN0YXJ0IHRoZQot ICAgICAgICAgIHNwZWNpZmllZCBzdWJzeXN0ZW0gKCJrZXJtaXQiKSBvbmNlIHRoZSBjb25uZWN0 aW9uIGlzIG1hZGUuIFRoZQotICAgICAgICAgIHN1YnN5c3RlbSBuYW1lIGNvbWVzIGFmdGVyIHRo ZSBob3N0bmFtZS4KLQotICAgaG9zdG5hbWUKLSAgICAgICAgICBUaGUgSVAgaG9zdCBuYW1lIG9y IGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgaG9zdC4KLQotICAgWW91IG1pZ2h0IHdhbnQgdG8gaW5j bHVkZSBvdGhlciBvciBhZGRpdGlvbmFsIHNzaCBjb21tYW5kLWxpbmUgb3B0aW9uczsKLSAgICJt YW4gc3NoIiBleHBsYWlucyB3aGF0IHRoZXkgYXJlLiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIGZv ciB0aGUKLSAgIE9wZW5TU0ggMy4wLjJwMSBjbGllbnQ6Ci0KLSAgIC1vQ2xlYXJBbGxGb3J3YXJk aW5ncyB5ZXMKLSAgIC1vRm9yd2FyZEFnZW50IG5vCi0gICAtb0ZvcndhcmRYMTEgbm8KLSAgIC1v RmFsbGJhY2tUb1JzaCBubwotICAgICAgICAgIFRoZXNlIGVuc3VyZSB0aGF0IGEgc2VjdXJlIGNv bm5lY3Rpb24gaXMgdXNlZCBhbmQgdGhhdCB0aGUKLSAgICAgICAgICBjb25uZWN0aW9uIHVzZWQg Zm9yIGZpbGUgdHJhbnNmZXIgaXMgbm90IGFsc28gdXNlZCBmb3IKLSAgICAgICAgICBmb3J3YXJk aW5nIG90aGVyIHRoaW5ncyB0aGF0IG1pZ2h0IGJlIHNwZWNpZmllZCBpbiB0aGUKLSAgICAgICAg ICBzc2hfY29uZmlnIGZpbGUuCi0KLSAgIC1vUHJvdG9jb2wgMgotICAgICAgICAgIChpLmUuIFNT SCB2MikgRW5zdXJlcyB0aGF0IHRoZSBuZWdvdGlhdGVkIHByb3RvY29sIHN1cHBvcnRzCi0gICAg ICAgICAgc3Vic3lzdGVtcy4KLQotICAgT25jZSB5b3UgaGF2ZSBhbiBTU0ggY29ubmVjdGlvbiB0 byBhIEtlcm1pdCBzZXJ2ZXIsIGl0J3MganVzdCBsaWtlIGFueQotICAgb3RoZXIgY29ubmVjdGlv biB0byBhIEtlcm1pdCBzZXJ2ZXIgKGFuZCB2ZXJ5IHNpbWlsYXIgdG8gYSBjb25uZWN0aW9uCi0g ICB0byBhbiBGVFAgc2VydmVyKS4gWW91IGdpdmUgdGhlIGNsaWVudCBmaWxlIHRyYW5zZmVyIGFu ZCBtYW5hZ2VtZW50Ci0gICBjb21tYW5kcyBmb3IgdGhlIHNlcnZlciwgYW5kIHRoZSBzZXJ2ZXIg ZXhlY3V0ZXMgdGhlbS4gT2YgY291cnNlIHlvdQotICAgY2FuIGFsc28gZ2l2ZSB0aGUgY2xpZW50 IGFueSBvdGhlciBjb21tYW5kcyB5b3Ugd2lzaC4KLQotICAgWyBbMTgwXVNTSCBLZXJtaXQgU2Vy dmVyIFN1YnN5c3RlbSBdIFsgWzE4MV1LZXJtaXQgOTUgQnVpbHQtaW4gU1NICi0gICBDbGllbnQg XQotCi0yLjIuIEhUVFAgQ29ubmVjdGlvbnMKLQotICAgSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3Rv Y29sLCBvciBIVFRQLCBpcyB0aGUgYXBwbGljYXRpb24gcHJvdG9jb2wgb2YKLSAgIHRoZSBXb3Js ZCBXaWRlIFdlYiAoV1dXKSwgdXNlZCBiZXR3ZWVuIFdlYiBicm93c2VycyAoY2xpZW50cykgYW5k IFdlYgotICAgc2VydmVycy4gSXQgYWxsb3dzIGEgY2xpZW50IHRvIGdldCBmaWxlcyBmcm9tIHdl YnNpdGVzLCB1cGxvYWQgZmlsZXMgdG8KLSAgIHdlYnNpdGVzLCBkZWxldGUgZmlsZXMgZnJvbSB3 ZWJzaXRlcywgZ2V0IGluZm9ybWF0aW9uIGFib3V0IHdlYnNpdGUKLSAgIGRpcmVjdG9yaWVzIGFu ZCBmaWxlcywgYW5kIGludGVyYWN0IHdpdGggc2VydmVyLXNpZGUgQ0dJIHNjcmlwdHMuCi0gICBD LUtlcm1pdCBpbmNsdWRlcyBhbiBIVFRQIGNsaWVudCBjYXBhYmxlIG9mIGJvdGggY2xlYXItdGV4 dCBhbmQgc2VjdXJlCi0gICBIVFRQIGNvbm5lY3Rpb25zLCB0aGF0IGNhbiBkbyBhbGwgdGhlc2Ug dGFza3MgYW5kIGNhbiBiZSBhdXRvbWF0ZWQKLSAgIHRocm91Z2ggdGhlIEtlcm1pdCBzY3JpcHRp bmcgbGFuZ3VhZ2UuCi0KLSAgIEFsdGhvdWdoIEMtS2VybWl0IDcuMCBjb3VsZCBtYWtlIEhUVFAg Y29ubmVjdGlvbnMgdG8gV2ViIHNlcnZlcnMsIGl0Ci0gICBjb3VsZCBkbyBzbyBvbmx5IHdoZW4g bm8gb3RoZXIgY29ubmVjdGlvbiB3YXMgb3BlbiwgYW5kIHRoZSBwcm9jZWR1cmUKLSAgIHdhcyBz b21ld2hhdCBhd2t3YXJkLiBDLUtlcm1pdCA4LjAgaW1wcm92ZXMgbWF0dGVycyBieToKLQotICAg ICAqIEFsbG93aW5nIGFuIEhUVFAgY29ubmVjdGlvbiB0byBiZSBvcGVuIGF0IHRoZSBzYW1lIHRp bWUgYXMgYQotICAgICAgIHJlZ3VsYXIgU0VUIExJTkUgb3IgU0VUIEhPU1QgY29ubmVjdGlvbiwg YW5kIGFsc28gYXQgdGhlIHNhbWUgdGltZQotICAgICAgIGFzIGFuIEZUUCBjb25uZWN0aW9uIChb MTgyXVNlY3Rpb24gMyk7Ci0gICAgICogVXBncmFkaW5nIHRoZSBIVFRQIHByb3RvY29sIGxldmVs IGZyb20gMS4wIHRvIDEuMSwgdGh1cyBhbGxvd2luZwotICAgICAgIGZvciBwZXJzaXN0ZW50IGNv bm5lY3Rpb25zLCBpbiB3aGljaCBhIHNlcmllcyBvZiBjb21tYW5kcyBjYW4gYmUKLSAgICAgICBz ZW50IG9uIHRoZSBzYW1lIGNvbm5lY3Rpb24sIHJhdGhlciB0aGFuIG9ubHkgb25lIGFzIGluIEhU VFAgMS4wCi0gICAgICAgKGFuZCBDLUtlcm1pdCA3LjApOwotICAgICAqIFByb3ZpZGluZyBmb3Ig Im9uZS1zaG90IiBVUkwtZHJpdmVuIEhUVFAgb3BlcmF0aW9ucyBzdWNoIGFzIEdFVCBvcgotICAg ICAgIFBVVC4KLSAgICAgKiBQcm92aWRpbmcgYSBkaXN0aW5jdCBIVFRQIGNvbW1hbmQtbGluZSBw ZXJzb25hbGl0eS4KLQotICAgUGVyc2lzdGVudCBIVFRQIGNvbm5lY3Rpb25zIGFyZSBtYW5hZ2Vk IHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kczoKLQotICAgSFRUUCBbIHN3aXRjaGVzIF0gT1BF TiBbIHNlY3VyaXR5LW9wdGlvbnMgXSBob3N0LW9yLXVybCBbIHBvcnQgXQotICAgICAgICAgIE9w ZW5zIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uIHRvIHRoZSBzcGVjaWZpZWQgaG9zdCAoSVAgaG9z dAotICAgICAgICAgIG5hbWUgb3IgYWRkcmVzcykgb24gdGhlIHNwZWNpZmllZCBwb3J0LiBJZiBh bnkgc3dpdGNoZXMKLSAgICAgICAgICAob3B0aW9ucywgbGlzdGVkIGluIHRoZSBuZXh0IHNlY3Rp b24pIGFyZSBpbmNsdWRlZCwgdGhlaXIgdmFsdWVzCi0gICAgICAgICAgYXJlIHNhdmVkIGFuZCB1 c2VkIGZvciBhbGwgc3Vic2VxdWVudCBIVFRQIGFjdGlvbiBjb21tYW5kcyBvbgotICAgICAgICAg IHRoZSBzYW1lIGNvbm5lY3Rpb24uIElmIG5vIHBvcnQgaXMgc3BlY2lmaWVkLCBIVFRQICg4MCkg aXMgdXNlZC4KLSAgICAgICAgICBBIFVuaWZvcm0gUmVzb3VyY2UgTG9jYXRvciAoVVJMLCBbMTgz XVJGQyAxNzM4KSBjYW4gYmUgZ2l2ZW4KLSAgICAgICAgICBpbnN0ZWFkIG9mIGEgaG9zdG5hbWUg KG9yIGFkZHJlc3MpIGFuZCBwb3J0IChidXQgdGhlIFVSTCBjYW4gbm90Ci0gICAgICAgICAgaW5j bHVkZSBhIGRpcmVjdG9yeS9maWxlIHBhdGgpLiBUaGUgc2VjdXJpdHkgb3B0aW9ucyBhcmUKLSAg ICAgICAgICBleHBsYWluZWQgWzE4NF1iZWxvdy4gVGhlIEhUVFAgT1BFTiBjb21tYW5kIHJlcGxh Y2VzIHRoZQotICAgICAgICAgIEMtS2VybWl0IDcuMCBTRVQgSE9TVCBob3N0bmFtZSBIVFRQIGNv bW1hbmQsIHdoaWNoIG5vIGxvbmdlcgotICAgICAgICAgIHdvcmtzIHdpdGggSFRUUCBHRVQgYW5k IHJlbGF0ZWQgY29tbWFuZHMuCi0KLSAgIEhUVFAgQ0xPU0UKLSAgICAgICAgICBDbG9zZXMgYW55 IG9wZW4gSFRUUCBjb25uZWN0aW9uIGFuZCBjbGVhcnMgYW55IHNhdmVkIHN3aXRjaAotICAgICAg ICAgIHZhbHVlcy4KLQotICAgQSBVUkwgc3RhcnRzIHdpdGggYSBwcm90b2NvbCBuYW1lLCB3aGlj aCBtdXN0IGJlIGh0dHAgb3IgaHR0cHMgaW4gdGhpcwotICAgY2FzZTsgb3B0aW9uYWxseSBpbmNs dWRlcyBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZDsgYW5kIG11c3QgY29udGFpbiBhCi0gICBob3N0 IG5hbWUgb3IgYWRkcmVzczoKLQotICBwcm90b2NvbDovL1t1c2VyWy5wYXNzd29yZF1dQGhvc3Rb OnBvcnRdW1VSSV0KLQotICAgSFRUUCBpcyBIeXBlcnRleHQgVHJhbnNmZXIgUHJvdG9jb2wuIEhU VFBTIGlzIHRoZSBzZWN1cmUgKFNTTC9UTFMpCi0gICB2ZXJzaW9uIG9mIEhUVFAuIFRoZSBUQ1Ag c2VydmljZSBwb3J0IGlzIGRlcml2ZWQgZnJvbSB0aGUgcHJvdG9jb2wKLSAgIHByZWZpeCAoc28g bm9ybWFsbHkgdGhlICI6cG9ydCIgZmllbGQgaXMgb21pdHRlZCkuIFRodXMgdGhlIFVSTAotICAg cHJvdG9jb2wgbmFtZSBzcGVjaWZpZXMgYSBkZWZhdWx0IFRDUCBzZXJ2aWNlIHBvcnQgYW5kIHRo ZSBVUkwgdXNlciBhbmQKLSAgIHBhc3N3b3JkIGZpZWxkcyBjYW4gdGFrZSB0aGUgcGxhY2Ugb2Yg dGhlIC9VU0VSIGFuZCAvUEFTU1dPUkQgc3dpdGNoZXMKLSAgIChbMTg1XVNlY3Rpb24gMi4yLjEp LiBUaGUgb3B0aW9uYWwgVVJJIGlzIGEgImNvbXBhY3Qgc3RyaW5nIG9mCi0gICBjaGFyYWN0ZXJz IGZvciBpZGVudGlmeWluZyBhbiBhYnN0cmFjdCBvciBwaHlzaWNhbCByZXNvdXJjZSIgKFsxODZd UkZDCi0gICAyMzk2KSwgc3VjaCBhcyBhIGZpbGUuIEl0IG11c3QgYmVnaW4gd2l0aCBhIHNsYXNo ICgvKTsgaWYgdGhlIFVSSSBpcwotICAgb21pdHRlZCwgIi8iIGlzIHN1cHBsaWVkLiBFeGFtcGxl czoKLQotICAgaHR0cCBvcGVuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1LwotICAgICAgICAgIEVx dWl2YWxlbnQgdG8gaHR0cCBvcGVuIHd3dy5jb2x1bWJpYS5lZHUgb3IgaHR0cCBvcGVuCi0gICAg ICAgICAgd3d3LmNvbHVtYmlhLmVkdSBodHRwLgotCi0gICBodHRwIG9wZW4gaHR0cHM6Ly9vbGdh LnNlY3JldEB3d3cxLnh5emNvcnAuY29tLwotICAgICAgICAgIEVxdWl2YWxlbnQgdG8gaHR0cCAv dXNlcjpvbGdhIC9wYXNzOnNlY3JldCBvcGVuIHd3dzEueHl6Y29ycC5jb20KLSAgICAgICAgICBo dHRwcy4KLQotICAgUGVyc2lzdGVuY2UgaXMgYWNjb21wbGlzaGVkIHVuaWxhdGVyYWxseSBieSBD LUtlcm1pdCA4LjAuIEFuIEhUVFAgMS4wCi0gICBzZXJ2ZXIgY2xvc2VzIHRoZSBjb25uZWN0aW9u IGFmdGVyIGVhY2ggYWN0aW9uLiBBbHRob3VnaCBIVFRQIDEuMQotICAgYWxsb3dzIG11bHRpcGxl IGFjdGlvbnMgb24gdGhlIHNhbWUgY29ubmVjdGlvbiwgYW4gSFRUUCAxLjEgc2VydmVyCi0gICB0 ZW5kcyB0byBjbG9zZSB0aGUgY29ubmVjdGlvbiBpZiBpdCBpcyBpZGxlIGZvciBtb3JlIHRoYW4g YSBmZXcKLSAgIHNlY29uZHMsIHRvIGRlZmVuZCBpdHNlbGYgYWdhaW5zdCBkZW5pYWwtb2Ytc2Vy dmljZSBhdHRhY2tzLiBCdXQgd2hlbgotICAgeW91IHVzZSBLZXJtaXQncyBIVFRQIE9QRU4gY29t bWFuZCB0byBjcmVhdGUgYSBjb25uZWN0aW9uLCBLZXJtaXQKLSAgIHJlb3BlbnMgaXQgYXV0b21h dGljYWxseSAoaWYgbmVjZXNzYXJ5KSBmb3IgZWFjaCBIVFRQIGFjdGlvbiB1bnRpbCB5b3UKLSAg IGNsb3NlIGl0IHdpdGggSFRUUCBDTE9TRSwgcmVnYXJkbGVzcyBvZiB0aGUgc2VydmVyJ3MgSFRU UCBwcm90b2NvbAotICAgdmVyc2lvbiwgb3IgaG93IG1hbnkgdGltZXMgaXQgY2xvc2VzIHRoZSBj b25uZWN0aW9uLgotCi0gICBGaXJld2FsbHMgY2FuIGJlIG5lZ290aWF0ZWQgdGhyb3VnaCBwcm94 aWVzIHdpdGggdGhlIGZvbGxvd2luZwotICAgY29tbWFuZHM6Ci0KLSAgIFNFVCBUQ1AgSFRUUC1Q Uk9YWSBbIGhvc3RbOnBvcnRdIF0KLSAgICAgICAgICBJZiBhIGhvc3QgKGJ5IGhvc3RuYW1lIG9y IElQIGFkZHJlc3MpIGlzIHNwZWNpZmllZCwgS2VybWl0IHVzZXMKLSAgICAgICAgICBpdCBhcyBh IHByb3h5IHNlcnZlciB3aGVuIGF0dGVtcHRpbmcgb3V0Z29pbmcgVENQIGNvbm5lY3Rpb25zIC0t Ci0gICAgICAgICAgbm90IG9ubHkgSFRUUCBjb25uZWN0aW9ucywgYnV0IGFsbCBUQ1AvSVAgY29u bmVjdGlvbnMsIFRlbG5ldAotICAgICAgICAgIGFuZCBGVFAgaW5jbHVkZWQuIFRoaXMgYWxsb3dz IEtlcm1pdCB0byBhZGFwdCB0byB0aGUgSFRUUAotICAgICAgICAgIGZpcmV3YWxsIHBlbmV0cmF0 aW9uIG1ldGhvZCAoYXMgb3Bwb3NlZCB0byBvdGhlciBtZXRob2RzIHN1Y2ggYXMKLSAgICAgICAg ICBTT0NLUzQpLiBJZiBubyBob3N0bmFtZSBvciBpcC1hZGRyZXNzIGlzIHNwZWNpZmllZCwgYW55 Ci0gICAgICAgICAgcHJldmlvdXNseSBzcGVjaWZpZWQgUHJveHkgc2VydmVyIGlzIHJlbW92ZWQu IElmIG5vIHBvcnQgbnVtYmVyCi0gICAgICAgICAgaXMgc3BlY2lmaWVkLCB0aGUgImh0dHAiIHNl cnZpY2UgaXMgdXNlZC4gVGhpcyBjb21tYW5kIG11c3QgYmUKLSAgICAgICAgICBnaXZlbiBiZWZv cmUgdGhlIEhUVFAgT1BFTiBjb21tYW5kIGlmIGEgcHJveHkgaXMgdG8gYmUgdXNlZCBvcgotICAg ICAgICAgIGNhbmNlbGVkLgotCi0gICBIVFRQIFsgc3dpdGNoZXMgXSBDT05ORUNUIGhvc3RbOnBv cnRdCi0gICAgICAgICAgSW5zdHJ1Y3RzIHRoZSBIVFRQIHNlcnZlciB0byBhY3QgYXMgYSBwcm94 eSwgZXN0YWJsaXNoaW5nIGEKLSAgICAgICAgICBjb25uZWN0aW9uIHRvIHRoZSBzcGVjaWZpZWQg aG9zdCAoSVAgaG9zdG5hbWUgb3IgYWRkcmVzcykgb24gdGhlCi0gICAgICAgICAgZ2l2ZW4gcG9y dCAoODAgPSBIVFRQIGJ5IGRlZmF1bHQpIGFuZCB0byByZWRpcmVjdCBhbGwgZGF0YQotICAgICAg ICAgIHRyYW5zbWl0dGVkIGJldHdlZW4gS2VybWl0IGFuZCBpdHNlbGYgdG8gdGhlIGdpdmVuIGhv c3QgZm9yIHRoZQotICAgICAgICAgIGxpZmUgb2YgdGhlIGNvbm5lY3Rpb24uIFRoaXMgY29tbWFu ZCBpcyB0byBiZSB1c2VkIG9ubHkgZm9yCi0gICAgICAgICAgZGVidWdnaW5nIEhUVFAgcHJveHkg Y29ubmVjdGlvbnMuIElmIGEgcHJveHkgY29ubmVjdGlvbiBpcwotICAgICAgICAgIHJlcXVpcmVk LCBpbnN0cnVjdCBLZXJtaXQgdG8gdXNlIHRoZSBwcm94eSB3aXRoIHRoZSBTRVQgVENQCi0gICAg ICAgICAgSFRUUC1QUk9YWSBjb21tYW5kLgotCi0yLjIuMS4gSFRUUCBDb21tYW5kIFN3aXRjaGVz Ci0KLSAgIEhUVFAgc3dpdGNoZXMsIGxpa2UgYWxsIG90aGVyIHN3aXRjaGVzLCBhcmUgb3B0aW9u YWwuIFdoZW4gSFRUUAotICAgc3dpdGNoZXMgYXJlIGluY2x1ZGVkIHdpdGggdGhlIEhUVFAgT1BF TiBjb21tYW5kLCB0aGV5IGFwcGx5Ci0gICBhdXRvbWF0aWNhbGx5IHRvIHRoaXMgYW5kIGFsbCBz dWJzZXF1ZW50IEhUVFAgYWN0aW9ucyAoR0VULCBQVVQsIC4uLikKLSAgIG9uIHRoZSBzYW1lIGNv bm5lY3Rpb24gdW50aWwgYW4gSFRUUCBDTE9TRSBjb21tYW5kIGlzIGdpdmVuLiBTbyBpZiB5b3UK LSAgIGluY2x1ZGUgc3dpdGNoZXMgKG9yIHRoZSBlcXVpdmFsZW50IFVSTCBmaWVsZHMsIHN1Y2gg YXMgdXNlciBhbmQKLSAgIHBhc3N3b3JkKSBpbiB0aGUgSFRUUCBPUEVOIGNvbW1hbmQsIHlvdSBj YW4gb21pdCB0aGVtIGZyb20gc3Vic2VxdWVudAotICAgY29tbWFuZHMgb24gdGhlIHNhbWUgY29u bmVjdGlvbi4gSWYgdGhlIGNvbm5lY3Rpb24gaGFzIGNsb3NlZCBzaW5jZQotICAgeW91ciBsYXN0 IGNvbW1hbmQsIGl0IGlzIGF1dG9tYXRpY2FsbHkgcmVvcGVuZWQgd2l0aCB0aGUgc2FtZSBvcHRp b25zLgotCi0gICBJZiB5b3UgaW5jbHVkZSBzd2l0Y2hlcyB3aXRoIGFuIEhUVFAgYWN0aW9uIGNv bW1hbmQgKHN1Y2ggYXMgR0VUIG9yCi0gICBQVVQpLCB0aGV5IGFwcGx5IG9ubHkgdG8gdGhhdCBj b21tYW5kLgotCi0gICAvVVNFUjpuYW1lCi0gICAgICAgICAgVG8gYmUgdXNlZCBpbiBjYXNlIGEg cGFnZSByZXF1aXJlcyBhIHVzZXJuYW1lIGZvciBhY2Nlc3MuIFRoZQotICAgICAgICAgIHVzZXJu YW1lIGlzIHNlbnQgd2l0aCBwYWdlIHJlcXVlc3RzLiBJZiBpdCBpcyBnaXZlbiB3aXRoIHRoZQot ICAgICAgICAgIE9QRU4gY29tbWFuZCBpdCBpcyBzYXZlZCB1bnRpbCBuZWVkZWQuIElmIGEgdXNl cm5hbWUgaXMgaW5jbHVkZWQKLSAgICAgICAgICBpbiBhIFVSTCwgaXQgb3ZlcnJpZGVzIHRoZSB1 c2VybmFtZSBnaXZlbiBpbiB0aGUgc3dpdGNoLgotICAgICAgICAgIENBVVRJT046IFVzZXJuYW1l IGFuZCBwYXNzd29yZCAoYW5kIGFsbCBvdGhlciBpbmZvcm1hdGlvbiwKLSAgICAgICAgICBpbmNs dWRpbmcgY3JlZGl0IGNhcmQgbnVtYmVycyBhbmQgb3RoZXIgbWF0ZXJpYWwgdGhhdCB5b3UgbWln aHQKLSAgICAgICAgICBwcmVmZXIgdG8gcHJvdGVjdCBmcm9tIHB1YmxpYyB2aWV3KSBhcmUgc2Vu dCBhY3Jvc3MgdGhlIG5ldHdvcmsKLSAgICAgICAgICBpbiBjbGVhciB0ZXh0IG9uIHJlZ3VsYXIg SFRUUCBjb25uZWN0aW9ucywgYnV0IGF1dGhlbnRpY2F0aW9uIGlzCi0gICAgICAgICAgcGVyZm9y bWVkIHNlY3VyZWx5IG9uIEhUVFBTIGNvbm5lY3Rpb25zLgotCi0gICAvUEFTU1dPUkQ6dGV4dAot ICAgICAgICAgIFRvIGJlIHVzZWQgaW4gY2FzZSBhIHdlYiBwYWdlIHJlcXVpcmVzIGEgcGFzc3dv cmQgZm9yIGFjY2Vzcy4KLSAgICAgICAgICBUaGUgcGFzc3dvcmQgaXMgc2VudCB3aXRoIHBhZ2Ug cmVxdWVzdHMuIElmIGl0IGlzIGdpdmVuIHdpdGggdGhlCi0gICAgICAgICAgT1BFTiBjb21tYW5k IGl0IGlzIHNhdmVkIHVudGlsIG5lZWRlZC4gSWYgYSBwYXNzd29yZCBpcyBnaXZlbiBpbgotICAg ICAgICAgIGEgVVJMLCBpdCBvdmVycmlkZXMgdGhlIG9uZSBnaXZlbiBoZXJlLiBDQVVUSU9OOiAo c2FtZSBhcyBmb3IKLSAgICAgICAgICAvVVNFUjopLgotCi0gICAvQUdFTlQ6dXNlci1hZ2VudAot ICAgICAgICAgIElkZW50aWZpZXMgdGhlIGNsaWVudCB0byB0aGUgc2VydmVyLiBPdmVycmlkZXMg dGhlIGRlZmF1bHQgYWdlbnQKLSAgICAgICAgICBzdHJpbmcsIHdoaWNoIGlzICJDLUtlcm1pdCIg KGZvciBDLUtlcm1pdCkgb3IgIktlcm1pdC05NSIgKGZvcgotICAgICAgICAgIEtlcm1pdCA5NSku Ci0KLSAgIC9BUlJBWTphcnJheS1kZXNpZ25hdG9yCi0gICAgICAgICAgVGVsbHMgS2VybWl0IHRv IHN0b3JlIHRoZSByZXNwb25zZSBoZWFkZXJzIGluIHRoZSBnaXZlbiBhcnJheSwKLSAgICAgICAg ICBvbmUgbGluZSBwZXIgZWxlbWVudC4gVGhlIGFycmF5IG5lZWQgbm90IGJlIGRlY2xhcmVkIGlu IGFkdmFuY2UuCi0gICAgICAgICAgRXhhbXBsZTogL2FycmF5OiZhLgotCi0gICAvVE9TQ1JFRU4K LSAgICAgICAgICBUZWxscyBLZXJtaXQgdG8gZGlzcGxheSBhbnkgcmVzcG9uc2UgdGV4dCBvbiB0 aGUgc2NyZWVuLiBJdAotICAgICAgICAgIGFwcGxpZXMgaW5kZXBlbmRlbnRseSBvZiB0aGUgb3V0 cHV0IGZpbGUgc3BlY2lmaWNhdGlvbjsgdGh1cyBpdAotICAgICAgICAgIGlzIHBvc3NpYmxlIHRv IGhhdmUgdGhlIHNlcnZlciByZXNwb25zZSBnbyB0byB0aGUgc2NyZWVuLCBhCi0gICAgICAgICAg ZmlsZSwgYm90aCwgb3IgbmVpdGhlci4KLQotICAgL0hFQURFUjpoZWFkZXItaXRlbShzKQotICAg ICAgICAgIFVzZWQgZm9yIHNwZWNpZnlpbmcgYW55IG9wdGlvbmFsIGhlYWRlcnMgdG8gYmUgc2Vu dCB3aXRoIEhUVFAKLSAgICAgICAgICByZXF1ZXN0cy4KLQotICAvSEVBREVSOnRhZzp2YWx1ZQot Ci0gICAgICAgICAgVG8gc2VuZCBtb3JlIHRoYW4gb25lIGhlYWRlciwgdXNlIGJyYWNlcyBmb3Ig Z3JvdXBpbmc6Ci0KLSAgL0hFQURFUjp7e3RhZzp2YWx1ZX17dGFnOnZhbHVlfS4uLn0KLQotICAg ICAgICAgIEZvciBhIGxpc3Qgb2YgdmFsaWQgdGFncyBhbmQgdmFsdWUgZm9ybWF0cyBzZWUgWzE4 N11SRkMgMjYxNiwKLSAgICAgICAgICAiSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sIC0tIEhU VFAvMS4xIi4gQSBtYXhpbXVtIG9mIGVpZ2h0Ci0gICAgICAgICAgaGVhZGVycyBtYXkgYmUgc3Bl Y2lmaWVkLgotCi0yLjIuMi4gSFRUUCBBY3Rpb24gQ29tbWFuZHMKLQotICAgSFRUUCBhY3Rpb25z IGNhbiBvY2N1ciB3aXRoaW4gYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24sIG9yIHRoZXkgY2FuIGJl Ci0gICBzZWxmLWNvbnRhaW5lZCAoImNvbm5lY3Rpb25sZXNzIikuIEEgcGVyc2lzdGVudCBIVFRQ IGNvbm5lY3Rpb24gYmVnaW5zCi0gICB3aXRoIGFuIEhUVFAgT1BFTiBjb21tYW5kLCBmb2xsb3dl ZCBieSB6ZXJvIG9yIG1vcmUgSFRUUCBhY3Rpb24KLSAgIGNvbW1hbmRzLCBhbmQgaXMgdGVybWlu YXRlZCB3aXRoIGFuIEhUVFAgQ0xPU0UgY29tbWFuZDoKLQotICBodHRwIG9wZW4gd3d3LmNvbHVt YmlhLmVkdQotICBpZiBmYWlsdXJlIHN0b3AgMSBIVFRQIE9QRU4gZmFpbGVkOiBcdihodHRwX21l c3NhZ2UpCi0gIGh0dHAgZ2V0IGtlcm1pdC9pbmRleC5odG1sCi0gIGlmIGZhaWx1cmUgc3RvcCAx IEhUVFAgR0VUIGZhaWxlZDogXHYoaHR0cF9tZXNzYWdlKQotICAobW9yZSBhY3Rpb25zIHBvc3Np YmxlIGhlcmUuLi4pCi0gIGh0dHAgY2xvc2UKLQotICAgQSBzZWxmLWNvbnRhaW5lZCBIVFRQIGFj dGlvbiBvY2N1cnMgd2hlbiBhIFVSTCBpcyBnaXZlbiBpbnN0ZWFkIG9mIGEKLSAgIHJlbW90ZSBm aWxlIG5hbWUgdG8gYW4gSFRUUCBhY3Rpb24gY29tbWFuZC4gSW4gdGhpcyBjYXNlLCBLZXJtaXQg bWFrZXMKLSAgIHRoZSBIVFRQIGNvbm5lY3Rpb24sIHRha2VzIHRoZSBhY3Rpb24sIGFuZCB0aGVu IGNsb3NlcyB0aGUgY29ubmVjdGlvbi4KLSAgIElmIGFuIEhUVFAgY29ubmVjdGlvbiB3YXMgYWxy ZWFkeSBvcGVuLCBpdCBpcyBjbG9zZWQgc2lsZW50bHkgYW5kCi0gICBhdXRvbWF0aWNhbGx5Lgot Ci0gIGh0dHAgZ2V0IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0K LSAgIEtlcm1pdCdzIEhUVFAgYWN0aW9uIGNvbW1hbmRzIGFyZSBhcyBmb2xsb3dzLiBTd2l0Y2hl cyBtYXkgYmUgaW5jbHVkZWQKLSAgIHdpdGggYW55IG9mIHRoZXNlIHRvIG92ZXJyaWRlIHN3aXRj aCAob3IgZGVmYXVsdCkgdmFsdWVzIGdpdmVuIGluIHRoZQotICAgSFRUUCBPUEVOIGNvbW1hbmQu Ci0KLSAgIEhUVFAgWyBzd2l0Y2hlcyBdIEdFVCByZW1vdGUtZmlsZW5hbWUgWyBsb2NhbC1maWxl bmFtZSBdCi0gICAgICAgICAgUmV0cmlldmVzIHRoZSBuYW1lZCBmaWxlIGZyb20gdGhlIHNlcnZl ciBzcGVjaWZpZWQgaW4gdGhlIG1vc3QKLSAgICAgICAgICByZWNlbnQgSFRUUCBPUEVOIGNvbW1h bmQgZm9yIHdoaWNoIGEgY29ycmVzcG9uZGluZyBIVFRQIENMT1NFCi0gICAgICAgICAgY29tbWFu ZCBoYXMgbm90IGJlZW4gZ2l2ZW4uIFRoZSBmaWxlbmFtZSBtYXkgbm90IGluY2x1ZGUKLSAgICAg ICAgICB3aWxkY2FyZHMgKEhUVFAgcHJvdG9jb2wgZG9lcyBub3Qgc3VwcG9ydCB0aGVtKS4gSWYg bm8gSFRUUCBPUEVOCi0gICAgICAgICAgY29tbWFuZCBpcyBpbiBlZmZlY3QsIHRoaXMgZm9ybSBv ZiB0aGUgSFRUUCBHRVQgY29tbWFuZCBmYWlscy4KLSAgICAgICAgICBUaGUgZGVmYXVsdCBsb2Nh bCBmaWxlbmFtZSBpcyB0aGUgc2FtZSBhcyB0aGUgcmVtb3RlIG5hbWUsIGJ1dAotICAgICAgICAg IHdpdGggYW55IHBhdGhuYW1lIHN0cmlwcGVkLiBGb3IgZXhhbXBsZSwgdGhlIGNvbW1hbmQgaHR0 cCBnZXQKLSAgICAgICAgICBrZXJtaXQvaW5kZXguaHRtbCBzdG9yZXMgdGhlIGZpbGUgaW4gdGhl IGN1cnJlbnQgbG9jYWwgZGlyZWN0b3J5Ci0gICAgICAgICAgYXMgaW5kZXguaHRtbC4gSWYgdGhl IC9IRUFERVJTOiBzd2l0Y2ggaXMgaW5jbHVkZWQsIGluZm9ybWF0aW9uCi0gICAgICAgICAgYWJv dXQgdGhlIGZpbGUgaXMgYWxzbyBzdG9yZWQgaW4gdGhlIHNwZWNpZmllZCBhcnJheSAoZXhwbGFp bmVkCi0gICAgICAgICAgaW4gWzE4OF1TZWN0aW9uIDIuMi4zKS4gQWxsIGZpbGVzIGFyZSB0cmFu c2ZlcnJlZCBpbiBiaW5hcnkKLSAgICAgICAgICBtb2RlLiBIVFRQIGRvZXMgbm90IHByb3ZpZGUg Zm9yIHJlY29yZC1mb3JtYXQgb3IgY2hhcmFjdGVyLXNldAotICAgICAgICAgIGNvbnZlcnNpb24u Ci0KLSAgIEhUVFAgWyBzd2l0Y2hlcyBdIEdFVCB1cmwgWyBsb2NhbC1maWxlbmFtZSBdCi0gICAg ICAgICAgV2hlbiBIVFRQIEdFVCBpcyBnaXZlbiBhIFVSTCByYXRoZXIgdGhhbiBhIGZpbGVuYW1l LCBLZXJtaXQKLSAgICAgICAgICBvcGVucyBhIGNvbm5lY3Rpb24gdG8gdGhlIGRlc2lnbmF0ZWQg c2VydmVyIChjbG9zaW5nIGFueQotICAgICAgICAgIHByZXZpb3VzbHkgb3BlbiBIVFRQIGNvbm5l Y3Rpb24pLCBnZXRzIHRoZSBmaWxlLCBhbmQgdGhlbiBjbG9zZXMKLSAgICAgICAgICB0aGUgY29u bmVjdGlvbi4gSWYgdGhlIFVSTCBkb2VzIG5vdCBpbmNsdWRlIGEgZmlsZW5hbWUsCi0gICAgICAg ICAgaW5kZXguaHRtbCBpcyBzdXBwbGllZC4gVGhpcyBpcyB0aGUgc2VsZi1jb250YWluZWQgb25l LXN0ZXAKLSAgICAgICAgICAiY29ubmVjdGlvbmxlc3MiIG1ldGhvZCBmb3IgZ2V0dGluZyBhIGZp bGUgZnJvbSBhIFdlYiBzZXJ2ZXIuCi0gICAgICAgICAgVGhlIGRhdGEgaXMgbm90IGludGVycHJl dGVkOyBIVFRQIEdFVCBpcyBsaWtlICJseW54IC1zb3VyY2UiCi0gICAgICAgICAgcmF0aGVyIHRo YW4gImx5bnggLWR1bXAiLgotCi0gICBJbiB0aGUgcmVtYWluaW5nIEhUVFAgYWN0aW9uIGNvbW1h bmRzLCB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBhIHJlbW90ZQotICAgZmlsZW5hbWUgYW5kIGEg VVJMIGFyZSB0aGUgc2FtZSBhcyBpbiB0aGUgSFRUUCBHRVQgY29tbWFuZC4KLQotICAgSFRUUCBb IHN3aXRjaGVzIF0gSEVBRCByZW1vdGUtZmlsZW5hbWUtb3ItdXJsIFsgbG9jYWwtZmlsZW5hbWUg XQotICAgICAgICAgIExpa2UgR0VUIGV4Y2VwdCB3aXRob3V0IGFjdHVhbGx5IGdldHRpbmcgdGhl IGZpbGU7IGluc3RlYWQgaXQKLSAgICAgICAgICByZXRyaWV2ZXMgb25seSB0aGUgaGVhZGVycy4g SWYgdGhlIC9BUlJBWTogb3IgL1RPU0NSRUVOIHN3aXRjaAotICAgICAgICAgIGlzIGluY2x1ZGVk LCB0aGVyZSBpcyBubyBkZWZhdWx0IGxvY2FsIG91dHB1dCBmaWxlbmFtZSBidXQgeW91Ci0gICAg ICAgICAgY2FuIHN0aWxsIHNwZWNpZnkgb25lLiBJZiBuZWl0aGVyIG9mIHRoZXNlIHN3aXRjaGVz IGlzIGluY2x1ZGVkLAotICAgICAgICAgIHRoZSBkZWZhdWx0IGxvY2FsIGZpbGVuYW1lIGlzIHRo ZSBzYW1lIGFzIHRoZSByZW1vdGUgZmlsZW5hbWUsCi0gICAgICAgICAgYnV0IHdpdGggYW55IHBh dGggc3RyaXBwZWQgYW5kIHdpdGggIi5oZWFkIiBhcHBlbmRlZC4gVGhlIEhFQUQKLSAgICAgICAg ICBjb21tYW5kIGNhbiBiZSB1c2VkIGluIGEgc2NyaXB0IHdpdGggdGhlIC9BUlJBWTogc3dpdGNo IHRvCi0gICAgICAgICAgcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3RlZCBy ZXNvdXJjZSB0byBkZXRlcm1pbmUKLSAgICAgICAgICB3aGV0aGVyIHRoZSByZXNvdXJjZSBzaG91 bGQgYWN0dWFsbHkgYmUgcmV0cmlldmVkIHdpdGggYQotICAgICAgICAgIHN1YnNlcXVlbnQgR0VU IHJlcXVlc3QuCi0KLSAgIEhUVFAgWyBzd2l0Y2hlcyBdIElOREVYIHJlbW90ZS1kaXJlY3Rvcnkt b3ItdXJsIFsgbG9jYWwtZmlsZW5hbWUgXQotICAgICAgICAgIEFza3MgdGhlIHNlcnZlciB0byBz ZW5kIGEgbGlzdGluZyBvZiB0aGUgZmlsZXMgaW4gdGhlIGdpdmVuCi0gICAgICAgICAgc2VydmVy IGRpcmVjdG9yeS4gVGhpcyBjb21tYW5kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgbW9zdCBXZWIKLSAg ICAgICAgICBzZXJ2ZXJzLiBFdmVuIHdoZW4gaXQgaXMgc3VwcG9ydGVkLCB0aGVyZSBpcyBubyBz dGFuZGFyZCBmb3JtYXQKLSAgICAgICAgICBmb3IgdGhlIGxpc3RpbmcuCi0KLSAgIEhUVFAgWyBz d2l0Y2hlcyBdIFBPU1QgWyAvTUlNRS1UWVBFOnR5cGUgXSBzb3VyY2UtZmlsZQotICAgICAgICAg IHJlbW90ZS1wYXRoLW9yLXVybCBbIHJlc3VsdC1maWxlIF0KLSAgICAgICAgICBTZW5kcyBkYXRh IHRvIGEgcHJvY2VzcyBydW5uaW5nIG9uIHRoZSByZW1vdGUgaG9zdDsgdGhlIHJlc3VsdAotICAg ICAgICAgIGlzIHVzdWFsbHkgYW4gSFRNTCBmaWxlIGJ1dCBjb3VsZCBiZSBhbnl0aGluZy4gVGhl IGRhdGEgdG8gYmUKLSAgICAgICAgICBwb3N0ZWQgbXVzdCBiZSByZWFkIGZyb20gYSBsb2NhbCBm aWxlICh0aGUgc291cmNlLWZpbGUpLiBJZiBhCi0gICAgICAgICAgcmVzdWx0IGZpbGUgaXMgc3Bl Y2lmaWVkLCBLZXJtaXQgc3RvcmVzIHRoZSBzZXJ2ZXIncyByZXNwb25zZSBpbgotICAgICAgICAg IGl0LgotCi0gICBIVFRQIFsgc3dpdGNoZXMgXSBQVVQgWyBNSU1FLVRZUEU6dHlwZSBdIGxvY2Fs LWZpbGUgWwotICAgICAgICAgIHJlbW90ZS1maWxlLW9yLXVybCBbIHJlc3VsdC1maWxlIF0gXQot ICAgICAgICAgIFVwbG9hZHMgYSBsb2NhbCBmaWxlIHRvIHRoZSBzZXJ2ZXIuIE9ubHkgdGhlIG5h bWUgb2YgYSBzaW5nbGUKLSAgICAgICAgICBmaWxlIGNhbiBiZSBnaXZlbjsgd2lsZGNhcmRzIChh bmQgZ3JvdXAgdHJhbnNmZXJzKSBhcmUgbm90Ci0gICAgICAgICAgc3VwcG9ydGVkIGJ5IEhUVFAg cHJvdG9jb2wuIElmIG5vIHJlbW90ZSBmaWxlbmFtZSBpcyBnaXZlbiwgdGhlCi0gICAgICAgICAg ZmlsZSBpcyBzZW50IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgbG9jYWwgZmlsZSwgYnV0IHdp dGggYW55Ci0gICAgICAgICAgcGF0aG5hbWUgc3RyaXBwZWQuCi0KLSAgIEhUVFAgWyBzd2l0Y2hl cyBdIERFTEVURSByZW1vdGUtZmlsZS1vci11cmwgWyBsb2NhbC1yZXN1bHQtZmlsZSBdCi0gICAg ICAgICAgQXNrcyB0aGUgc2VydmVyIHRvIGRlbGV0ZSB0aGUgc3BlY2lmaWVkIHNpbmdsZSBmaWxl LiBJZiBhIHJlc3VsdAotICAgICAgICAgIGZpbGUgaXMgc3BlY2lmaWVkLCBpdCB3aWxsIGNvbnRh aW4gYW55IHJlc3BvbnNlIGRhdGEgcmV0dXJuZWQgYnkKLSAgICAgICAgICB0aGUgc2VydmVyLgot Ci0gICBOb3RlIHRoZSBsaW1pdGF0aW9ucyBvZiBIVFRQIHByb3RvY29sIGNvbXBhcmVkIHRvIChz YXkpIEZUUCBvciBLZXJtaXQuCi0gICBUaGVyZSBpcyBubyBjb21tYW5kIGZvciBjaGFuZ2luZyBk aXJlY3Rvcmllcywgbm8gc3RhbmRhcmQgd2F5IHRvIGdldAotICAgZmlsZSBvciBkaXJlY3Rvcnkg bGlzdHMsIG5vIHdheSB0byB0cmFuc2ZlciBmaWxlIGdyb3VwcyBieSB1c2luZwotICAgd2lsZGNh cmQgbm90YXRpb24sIGV0YywgYW5kIHRoZXJlZm9yZSBubyBnb29kIHdheSB0byAoc2F5KSBmZXRj aCBhbGwKLSAgIHBhZ2VzLCBkZXNjZW5kIHRocm91Z2ggc3ViZGlyZWN0b3JpZXMsIHBlcmZvcm0g YXV0b21hdGljIHVwZGF0ZXMsIGV0Yy4KLSAgIFRoZXJlIGlzIG5vIGFzc3VyYW5jZSBhIGNvbm5l Y3Rpb24gd2lsbCBzdGF5IG9wZW4gYW5kLCBhcyBub3RlZCwgdGhlcmUKLSAgIGlzIG5vIHByb3Zp c2lvbiBmb3IgZGF0YSBjb252ZXJzaW9uIGJldHdlZW4gdW5saWtlIHBsYXRmb3Jtcy4gVGhlCi0g ICBkYXRhJ3MgTUlNRSBoZWFkZXJzIGNhbiBiZSB1c2VkIGZvciBwb3N0cHJvY2Vzc2luZy4KLQot Mi4yLjMuIEhUVFAgSGVhZGVycwotCi0gICBFYWNoIEhUVFAgcmVxdWVzdCBhbmQgcmVzcG9uc2Ug Y29udGFpbnMgYSBzZXQgb2YgbmFtZS92YWx1ZSBwYWlycwotICAgY2FsbGVkIGhlYWRlcnMuIEhU VFAgaGVhZGVycyBhcmUgc3BlY2lmaWVkIGluIFsxODldUkZDIDI2MTYuIEZvcgotICAgZXhhbXBs ZSwgYW4gSFRUUCBHRVQgcmVxdWVzdCBmb3IgL2luZGV4Lmh0bWwgb24gd3d3LmNvbHVtYmlhLmVk dQotICAgY29udGFpbnMgdGhlIGZvbGxvd2luZyBoZWFkZXJzOgotCi0gIEdFVCAvaW5kZXguaHRt bCBIVFRQLzEuMQotICBIb3N0OiB3d3cuY29sdW1iaWEuZWR1OjgwCi0gIFVzZXItYWdlbnQ6IEMt S2VybWl0IDguMAotICBBdXRob3JpemF0aW9uOiBCYXNpYyBiYXNlNjQtZW5jb2RlZC11c2VybmFt ZS1wYXNzd29yZAotCi0gICBUaGVzZSBtaWdodCBiZSBmb2xsb3dlZCBieSBhbnkgb3RoZXJzIHNw ZWNpZmllZCB3aXRoIGEgL0hFQURFUlM6Ci0gICBzd2l0Y2g6Ci0KLSAgQWNjZXB0OiBpbWFnZS9n aWYsIGltYWdlL3gteGJpdG1hcCwgaW1hZ2UvanBlZywgKi4qCi0gIEFjY2VwdC1FbmNvZGluZzog Z3ppcAotICBBY2NlcHQtTGFuZ3VhZ2U6IGVuCi0gIEFjY2VwdC1DaGFyc2V0OiBpc28tODg1OS0x LHV0Zi04Ci0gIENvb2tpZTogY29va2llLWRhdGEKLQotICAgVGhlIHNlcnZlciBzZW5kcyBiYWNr IGEgc2hvcnQgcmVwb3J0IGFib3V0IHRoZSBmaWxlIHByaW9yIHRvIHNlbmRpbmcKLSAgIHRoZSBm aWxlIGNvbnRlbnRzLiBFeGFtcGxlOgotCi0gIEhUVFAvMS4xIDIwMCBPSwotICBEYXRlOiBGcmks IDI0IEF1ZyAyMDAxIDIxOjA5OjM5IEdNVAotICBTZXJ2ZXI6IEFwYWNoZS8xLjMuNCAoVW5peCkK LSAgTGFzdC1Nb2RpZmllZDogTW9uLCAwNiBBdWcgMjAwMSAyMToxNjoxMyBHTVQKLSAgRVRhZzog IjFmYTEzNy0xMGQ3LTNiNmYwOTFkIgotICBBY2NlcHQtUmFuZ2VzOiBieXRlcwotICBDb250ZW50 LUxlbmd0aDogNDMxMQotICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAotCi0gICBJZiB5b3Ugd2Fu dCB0byBoYXZlIHRoaXMgaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIGEgS2VybWl0IHNjcmlwdCB5 b3UKLSAgIGNhbiB1c2UgdGhlIC9BUlJBWSBzd2l0Y2ggdG8gaGF2ZSBLZXJtaXQgcHV0IGl0IGlu IGFycmF5LCBvbmUgbGluZSBwZXIKLSAgIGFycmF5IGVsZW1lbnQuIEV4YW1wbGU6Ci0KLSAgc2V0 IGV4aXQgd2FybmluZyBvZmYKLSAgaHR0cCBvcGVuIHd3dy5jb2x1bWJpYS5lZHUKLSAgaWYgZmFp bCBleGl0IDEgQ2FuJ3QgcmVhY2ggc2VydmVyCi0gIGh0dHAgL2FycmF5OiZhIGdldCAvaW5kZXgu aHRtbAotICBpZiBmYWlsIGV4aXQgMSBDYW4ndCBnZXQgZmlsZQotICBlY2hvIEhlYWRlciBsaW5l czogXGZkaW0oJmEpCi0gIGZvciBcJWkgMSBcZmRpbSgmYSkgMSB7Ci0gICAgICBlY2hvIFwlaS4g XCZhW1wlaV0KLSAgfQotCi0gICBOb3RlIHRoYXQgdGhlICJEYXRlOiIgaXRlbSBpcyB0aGUgY3Vy cmVudCBkYXRlIGFuZCB0aW1lOyB0aGUKLSAgICJMYXN0LU1vZGlmaWVkOiIgaXRlbSBpcyB0aGUg ZmlsZSdzIG1vZGlmaWNhdGlvbiBkYXRlIGFuZCB0aW1lLiBBbgotICAgZXhhbXBsZSBzaG93aW5n IGhvdyB0byB1c2UgdGhpcyBpbmZvcm1hdGlvbiBpcyBwcmVzZW50ZWQgaW4KLSAgIFsxOTBdU2Vj dGlvbiA4LjEzLjcuCi0KLTIuMi40LiBTZWN1cmUgSFRUUCBDb25uZWN0aW9ucwotCi0gICBTU0wv VExTIChTZWN1cmUgU29ja2V0cyBMYXllciAvIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSkgaXMg dGhlCi0gICBwcm90b2NvbCB1c2VkIHRvIHNlY3VyZSBIVFRQLCBTTVRQLCBhbmQgb3RoZXIgSW50 ZXJuZXQgYXBwbGljYXRpb25zLgotICAgU2VlIHRoZSBbMTkxXUMtS2VybWl0IFJlZmVyZW5jZSBT ZWN0aW9uIDUuNCBmb3IgYW4gaW50cm9kdWN0aW9uIHRvCi0gICBTU0wvVExTLiBUbyBtYWtlIGEg c2VjdXJlIEhUVFAgY29ubmVjdGlvbiwgeW91IG5lZWQ6Ci0KLSAgICAxLiBBIHNlY3VyZSBjbGll bnQgKGEgdmVyc2lvbiBvZiBDLUtlcm1pdCBvciBLZXJtaXQgOTUgd2l0aCBTU0wvVExTCi0gICAg ICAgc2VjdXJpdHkgYnVpbHQgaW4pLiBUeXBlICJjaGVjayBzc2wiIGF0IHRoZSBLZXJtaXQgcHJv bXB0IHRvIG1ha2UKLSAgICAgICBzdXJlIHlvdSBoYXZlIGl0LgotICAgIDIuIEEgc2VjdXJlIHNl cnZlciB0byBjb25uZWN0IHRvLgotICAgIDMuIFRoZSBDQSBSb290IENlcnRpZmljYXRlIHVzZWQg dG8gYXV0aGVudGljYXRlIHRoZSBzZXJ2ZXIgdG8gdGhlCi0gICAgICAgY2xpZW50LiAoc2VlIFsx OTJdU2VjdGlvbiAxNSBvZiB0aGUgc2VjdXJpdHkgcmVmZXJlbmNlIGZvciBhbgotICAgICAgIGlu dHJvZHVjdGlvbiB0byBjZXJ0aWZpY2F0ZXMpLgotCi0gICBBbmQgeW91IG11c3QgbWFrZSBhIGNv bm5lY3Rpb24gdG8gdGhlIHNlY3VyZSBIVFRQIHBvcnQ6IHNlcnZpY2UgbmFtZQotICAgSFRUUFMs IHBvcnQgbnVtYmVyIDQ0MyAoYXMgb3Bwb3NlZCB0byBzZXJ2aWNlIEhUVFAsIHBvcnQgODApLiBZ b3UgY2FuCi0gICBhbHNvIG1ha2Ugc2VjdXJlIGNvbm5lY3Rpb25zIHRvIG90aGVyIHBvcnRzIGJ5 IGluY2x1ZGluZyB0aGUgL1RMUyBvcgotICAgL1NTTCBzd2l0Y2ggd2l0aCB0aGUgSFRUUCBPUEVO IGNvbW1hbmQsIGlmIHRoZSBob3N0IHN1cHBvcnRzIFNTTC9UTFMgb24KLSAgIHRoZSBnaXZlbiBw b3J0OgotCi0gICBUaGUgcXVhbGl0eSBvZiB0aGUgU1NML1RMUyBjb25uZWN0aW9uIGRlcGVuZHMg b24gdGhlIGNpcGhlciBzdWl0ZS4KLSAgIFRoZXJlIGFyZSBzZXZlcmFsIHBvc3NpYmlsaXRpZXM6 Ci0KLSAgIEFub255bW91cyBjaXBoZXIgc3VpdGU6Ci0gICAgICAgICAgSWYgYW4gYW5vbnltb3Vz IGNpcGhlciBzdWl0ZSBpcyBuZWdvdGlhdGVkLCB0aGUgY29ubmVjdGlvbiBpcwotICAgICAgICAg IGVuY3J5cHRlZCBidXQgdGhlcmUgaXMgbm8gYXV0aGVudGljYXRpb24uIFRoaXMgY29ubmVjdGlv biBpcwotICAgICAgICAgIHN1YmplY3QgdG8gYSBNYW4tSW4tVGhlLU1pZGRsZSAoTUlUTSkgYXR0 YWNrLgotCi0gICBYLjUwOSBjZXJ0aWZpY2F0ZSBvbiB0aGUgc2VydmVyOgotICAgICAgICAgIFdo ZW4geW91IGNvbm5lY3QgdG8gY2VydGFpbiBzZWN1cmUgc2VydmVycywgYW4gWC41MDkgY2VydGlm aWNhdGUKLSAgICAgICAgICBpcyByZXR1cm5lZC4gVGhpcyBjZXJ0aWZpY2F0ZSBpcyBpc3N1ZWQg dG8gYSBzcGVjaWFsIGhvc3RuYW1lLAotICAgICAgICAgIHNvbWV0aGluZyBsaWtlIHd3dzEueHl6 Y29ycC5jb20gb3Igd3d3cy54eXpjb3JwLmNvbSAocmF0aGVyIHRoYW4KLSAgICAgICAgICB0aGUg bm9ybWFsIHd3dy54eXpjb3JwLmNvbSkuIEl0IGlzIHNpZ25lZCBieSB0aGUgaG9zdCdzCi0gICAg ICAgICAgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IChDQSkuIElmIHRoZSBob3N0IGNlcnRpZmljYXRl IGlzCi0gICAgICAgICAgY29uZmlndXJlZCBvbiB0aGUgY2xpZW50LCBpdCBjYW4gYmUgdXNlZCB0 byB2ZXJpZnkgdGhlCi0gICAgICAgICAgY2VydGlmaWNhdGUgcmVjZWl2ZWQgZnJvbSB0aGUgc2Vy dmVyLiBJZiB0aGUgY2VydGlmaWNhdGUgaXQKLSAgICAgICAgICB2ZXJpZmllZCBhcyBhdXRoZW50 aWMsIGEgY2hlY2sgaXMgbWFkZSB0byBlbnN1cmUgaXQgaGFzIG5vdAotICAgICAgICAgIGV4cGly ZWQgYW5kIGl0IHdhcyBpc3N1ZWQgdG8gdGhlIGhvc3QgeW91IHdlcmUgYXR0ZW1wdGluZyB0bwot ICAgICAgICAgIGNvbm5lY3QgdG8uIElmIHlvdSBoYWQgYXNrZWQgdG8gY29ubmVjdCB0byAoc2F5 KSB3d3cueHl6Y29ycC5jb20KLSAgICAgICAgICBidXQgd2VyZSBnaXZlbiBhIGNlcnRpZmljYXRl IGZvciB3d3cxLnh5emNvcnAuY29tLCB5b3Ugd291bGQgYmUKLSAgICAgICAgICBwcm9tcHRlZCBm b3IgcGVybWlzc2lvbiB0byBjb250aW51ZS4KLQotICAgICAgICAgIElmIHRoZSB2ZXJpZmljYXRp b24gc3VjY2VlZGVkLCB0aGUgY29ubmVjdGlvbiB3b3VsZCBiZSBlbmNyeXB0ZWQKLSAgICAgICAg ICB3aXRoIG9uZS13YXkgKHNlcnZlci10by1jbGllbnQpIGF1dGhlbnRpY2F0aW9uLiBUaGlzIGNv bm5lY3Rpb24KLSAgICAgICAgICBpcyBub3Qgc3ViamVjdCB0byBhIE1JVE0gYXR0YWNrLgotCi0g ICAgICAgICAgSWYgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlIHRyYW5zbWl0dGVkIG92ZXIg dGhpcyBjb25uZWN0aW9uLAotICAgICAgICAgIHRoZXkgYXJlIG5vdCBzdWJqZWN0IHRvIGludGVy Y2VwdGlvbi4gSG93ZXZlciwgdGhlIHN0YW5kYXJkCi0gICAgICAgICAgcmlza3MgYXNzb2NpYXRl ZCB3aXRoIHBhc3NpbmcgdGhlIHBhc3N3b3JkIHRvIHRoZSBob3N0IGZvcgotICAgICAgICAgIHZl cmlmaWNhdGlvbiBhcHBseTsgZm9yIGV4YW1wbGUsIGlmIHRoZSBob3N0IGhhcyBiZWVuCi0gICAg ICAgICAgY29tcHJvbWlzZWQsIHRoZSBwYXNzd29yZCB3aWxsIGJlIGNvbXByb21pc2VkLgotCi0g ICBYLjUwOSBjbGllbnQgY2VydGlmaWNhdGU6Ci0gICAgICAgICAgSWYgYSBjb25uZWN0aW9uIGhh cyBiZWVuIGVzdGFibGlzaGVkIHdpdGggYW4gWC41MDkgc2VydmVyCi0gICAgICAgICAgY2VydGlm aWNhdGUsIHRoZSBzZXJ2ZXIgY2FuIGFzayB0aGUgY2xpZW50IHRvIHNlbmQgYSBjZXJ0aWZpY2F0 ZQotICAgICAgICAgIG9mIGl0cyBvd24uIFRoaXMgY2VydGlmaWNhdGUgbXVzdCBiZSB2ZXJpZmll ZCBhZ2FpbnN0IGEgQ0EgUm9vdAotICAgICAgICAgIGNlcnRpZmljYXRlLiBUaGUgY2VydGlmaWNh dGUgaXRzZWxmIChvciBzdWJqZWN0IGluZm8gZnJvbSB0aGUKLSAgICAgICAgICBjZXJ0aWZpY2F0 ZSkgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGF1dGhvcml6YXRpb24gZm9yIHRoZQotICAgICAg ICAgIGNsaWVudCwgYW5kIGlmIHN1Y2Nlc3NmdWwsIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQg bmVlZCBub3QgYmUKLSAgICAgICAgICBzZW50IHRvIHRoZSBzZXJ2ZXIuCi0KLSAgIEtlcmJlcm9z IDU6Ci0gICAgICAgICAgSW5zdGVhZCBvZiB1c2luZyBYLjUwOSBjZXJ0aWZpY2F0ZXMsIEtlcmJl cm9zIDUgY2FuIGJlIHVzZWQgdG8KLSAgICAgICAgICBwZXJmb3JtIHRoZSBhdXRoZW50aWNhdGlv biBhbmQga2V5IGV4Y2hhbmdlLiBJbiB0aGlzIHNpdHVhdGlvbiwKLSAgICAgICAgICB0aGVyZSBp cyBtdXR1YWwgYXV0aGVudGljYXRpb24gYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIuCi0g ICAgICAgICAgVGhlIEtlcmJlcm9zIDUgcHJpbmNpcGFsIGlzIHVzZWQgYnkgdGhlIHNlcnZlciB0 byBsb29rIHVwIHRoZQotICAgICAgICAgIGFwcHJvcHJpYXRlIGF1dGhvcml6YXRpb24gZGF0YS4g VGhlcmUgaXMgbm8gbmVlZCB0byBzZW5kCi0gICAgICAgICAgdXNlcm5hbWUgYW5kIHBhc3N3b3Jk LgotCi0gICBBbiBIVFRQIGNvbm5lY3Rpb24gaXMgbWFkZSB3aXRoIHRoZSBIVFRQIE9QRU4gY29t bWFuZDoKLQotICAgSFRUUCBbIHN3aXRjaGVzIF0gT1BFTiBbIHsgL1NTTCwgL1RMUyB9IF0gaG9z dCBbIHBvcnQgXQotICAgICAgICAgIElmIC9TU0wgb3IgL1RMUyBzd2l0Y2hlcyBhcmUgaW5jbHVk ZWQgKHRoZXNlIGFyZSBzeW5vbnltcyksIG9yCi0gICAgICAgICAgaWYgdGhlIHNlcnZpY2UgaXMg SFRUUFMgb3IgdGhlIHBvcnQgaXMgNDQzLCBhIHNlY3VyZSBjb25uZWN0aW9uCi0gICAgICAgICAg aXMgYXR0ZW1wdGVkIHVzaW5nIHRoZSBjdXJyZW50IGF1dGhlbnRpY2F0aW9uIHNldHRpbmdzOyBz ZWUgSEVMUAotICAgICAgICAgIFNFVCBBVVRIRU5USUNBVElPTiBmb3IgZGV0YWlscyAoWzE5M11T ZWN0aW9uIDYuMiBvZiB0aGUgc2VjdXJpdHkKLSAgICAgICAgICByZWZlcmVuY2UpLiBJZiB0aGUg bm8gL1NTTCBvciAvVExTIHN3aXRjaCBpcyBpbmNsdWRlZCBidXQgdGhlCi0gICAgICAgICAgcG9y dCBpcyA0NDMgb3IgdGhlIHNlcnZpY2UgaXMgSFRUUFMsIGEgc2VjdXJlIGNvbm5lY3Rpb24gaXMK LSAgICAgICAgICBhdHRlbXB0ZWQuIElmIGFuIC9TU0wgb3IgL1RMUyBzd2l0Y2ggaXMgaW5jbHVk ZWQgYnV0IGEgcG9ydCBpcwotICAgICAgICAgIG5vdCBzcGVjaWZpZWQsIGFuIFNTTC9UTFMgY29u bmVjdGlvbiBpcyBhdHRlbXB0ZWQgb24gdGhlIGRlZmF1bHQKLSAgICAgICAgICBwb3J0ICg4MCku Ci0KLSAgIENlcnRpZmljYXRlcyBhcmUgY292ZXJlZCBpbiB0aGUgc2VwYXJhdGUgWzE5NF1LZXJt aXQgU2VjdXJpdHkgUmVmZXJlbmNlCi0gICBmb3IgQy1LZXJtaXQgOC4wLiBZb3Ugc2hvdWxkIGxl dCBLZXJtaXQga25vdyB0byB2ZXJpZnkgY2VydGlmaWNhdGVzCi0gICB3aXRoIHRoZSBTRVQgQVVU SEVOVElDQVRJT04gVExTIGNvbW1hbmQuIEZvciBleGFtcGxlOgotCi0gICBTRVQgQVVUSEVOVElD QVRJT04gVExTIENSTC1ESVIgZGlyZWN0b3J5Ci0gICAgICAgICAgU3BlY2lmaWVzIGEgZGlyZWN0 b3J5IHRoYXQgY29udGFpbnMgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBmaWxlcwotICAgICAgICAg IHdoZXJlIGVhY2ggZmlsZSBpcyBuYW1lZCBieSB0aGUgaGFzaCBvZiB0aGUgY2VydGlmaWNhdGUg dGhhdCBoYXMKLSAgICAgICAgICBiZWVuIHJldm9rZWQuCi0KLSAgIFNFVCBBVVRIRU5USUNBVElP TiBUTFMgQ1JMLUZJTEUgZmlsZW5hbWUKLSAgICAgICAgICBTcGVjaWZpZXMgYSBmaWxlIHRoYXQg Y29udGFpbnMgYSBsaXN0IG9mIGNlcnRpZmljYXRlCi0gICAgICAgICAgcmV2b2NhdGlvbnMuCi0K LSAgIFNFVCBBVVRIRU5USUNBVElPTiBUTFMgVkVSSUZZLURJUiBkaXJlY3RvcnkKLSAgICAgICAg ICBTcGVjaWZpZXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyByb290IENBIGNlcnRpZmljYXRl IGZpbGVzCi0gICAgICAgICAgdXNlZCB0byB2ZXJpZnkgdGhlIGNlcnRpZmljYXRlIGNoYWlucyBw cmVzZW50ZWQgYnkgdGhlIHBlZXIuCi0gICAgICAgICAgRWFjaCBmaWxlIGlzIG5hbWVkIGJ5IGEg aGFzaCBvZiB0aGUgY2VydGlmaWNhdGUuCi0KLSAgIFNFVCBBVVRIRU5USUNBVElPTiBUTFMgVkVS SUZZLUZJTEUgZmlsZW5hbWUKLSAgICAgICAgICBTcGVjaWZpZXMgYSBmaWxlIHRoYXQgY29udGFp bnMgcm9vdCBDQSBjZXJ0aWZpY2F0ZXMgdG8gYmUgdXNlZAotICAgICAgICAgIGZvciB2ZXJpZnlp bmcgY2VydGlmaWNhdGUgY2hhaW5zLgotCi0gICBTRVQgQVVUSEVOVElDQVRJT04gVExTIFZFUklG WSBPRkYKLSAgICAgICAgICBUZWxscyBLZXJtaXQgbm90IHRvIHJlcXVpcmUgYSBjZXJ0aWZpY2F0 ZSBhbmQgYWNjZXB0IGFueQotICAgICAgICAgIGNlcnRpZmljYXRlIHRoYXQgaXMgcHJlc2VudGVk IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyB2YWxpZC4KLQotICAgVGhlcmUgYXJlIG1hbnkg b3RoZXIgb3B0aW9uczsgc2VlIHRoZSBzZWN1cml0eSBkb2N1bWVudCBmb3IgZGV0YWlscy4KLQot ICAgTm93IHN1cHBvc2UgeW91IG5lZWQgbmVlZCB0byBmZXRjaCB0aGUgZmlsZSBkZW5vdGVkIGJ5 IHRoZSBmb2xsb3dpbmcKLSAgIFVSTDoKLQotICBodHRwczovL215dXNlcmlkOm15cGFzc3dvcmRA d3d3cy54eXpjb3JwLmNvbS9jbGllbnRzL2luZm8vc2VjcmV0Lmh0bWwKLQotICAgT25jZSB5b3Ug aGF2ZSBzZXQgdXAgdGhlIGhhbmRsaW5nIG9mIGNlcnRpZmljYXRlcyBhcyBkZXNpcmVkLCB5b3Ug Y2FuCi0gICB1c2UgdGhlIGZvbGxvd2luZyBLZXJtaXQgY29tbWFuZHM6Ci0KLSAgaHR0cCAvdXNl cjpteXVzZXJpZCAvcGFzc3dvcmQ6bXlwYXNzd29yZCBvcGVuIHd3dzEueHl6Y29ycC5jb20gaHR0 cHMKLSAgaWYgc3VjY2VzcyB7Ci0gICAgICBodHRwIGdldCAvY2xpZW50cy9pbmZvL3NlY3JldC5o dG1sCi0gICAgICBodHRwIGNsb3NlCi0gIH0KLQotICAgQXMgYW5vdGhlciBleGFtcGxlLCBsZXQn cyBzYXkgdGhhdCB5b3UgaGF2ZSBhIHdlYiBmb3JtIHlvdSBuZWVkIHRvCi0gICBwb3B1bGF0ZSB3 aXRoIHRocmVlIGZpZWxkczogcmVkLHdoaXRlIGFuZCBibHVlLgotCi0gIDxGT1JNIEFDVElPTj0i aHR0cDovL3d3dy54eXpjb3JwLmNvbS9jZ2ktYmluL2Zvcm0uY2dpIiBNRVRIT0Q9IlBPU1QiPgot ICA8SU5QVVQgTkFNRT0iUmVkIj4KLSAgPElOUFVUIE5BTUU9IldoaXRlIj4KLSAgPElOUFVUIE5B TUU9IkJsdWUiPgotICA8L0ZPUk0+Ci0KLSAgIFlvdSBjYW4gaGFuZGxlIHRoaXMgd2l0aCB0aGUg SFRUUCBQT1NUIGNvbW1hbmQuIFRoZSBkYXRhIHRvIGJlIHBvc3RlZAotICAgaXMgc3RvcmVkIGlu IHRoZSBsb2NhbCBmaWxlIGRhdGEudHh0LgotCi0gIFJlZD1zZXZlbiBzdHJpcGVzJldoaXRlPXNp eCBzdHJpcGVzJkJsdWU9ZmlmdHkgc3RhcnMKLQotICAgYW5kIHRoZSByZXNwb25zZSBmcm9tIHRo ZSBzZXJ2ZXIgd2lsbCBiZSBzdG9yZWQgaW50byByZXNwb25zZS50eHQuCi0KLSAgaHR0cCBvcGVu IHd3dy54eXpjb3JwLmNvbSBodHRwCi0gIGlmIHN1Y2Nlc3MgewotICAgIGh0dHAgL2FycmF5OmMg cG9zdCBkYXRhLnR4dCAvY2dpLWJpbi9mb3JtLmNnaSByZXNwb25zZS50eHQKLSAgICBodHRwIGNs b3NlCi0gIH0KLQotICAgSW4gdGhpcyBzY2VuYXJpbywgdGhlIENvbW1vbiBHYXRld2F5IEludGVy ZmFjZSAoQ0dJKSBzZW5kcyBhIHJlc3BvbnNlCi0gICB3aGV0aGVyIGl0IHN1Y2NlZWRzIG9yIGZh aWxzIGluIGEgc2NyaXB0LWRlcGVuZGVudCBtYW5uZXIuIFRoZSBzY3JpcHQKLSAgIGNhbiBlaXRo ZXIgcmVwb3J0IHN1Y2Nlc3MgYW5kIGVuY2xvc2UgdGhlIHJlc3BvbnNlIGRhdGE7IG9yIGl0IG1p Z2h0Ci0gICBzZW5kIGEgMzAyIEZvdW5kIGVycm9yIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSAi TG9jYXRpb246IiBoZWFkZXIKLSAgIHNob3VsZCBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgVVJM IGF0IHdoaWNoIHRoZSBkYXRhIGNhbiBiZSBmb3VuZC4KLQotMi4yLjUuIEhUVFAgVmFyaWFibGVz Ci0KLSAgIFx2KGh0dHBfY29kZSkKLSAgICAgICAgICBUaGUgSFRUUCBwcm90b2NvbCBjb2RlIG51 bWJlciBvZiB0aGUgbW9zdCByZWNlbnQgc2VydmVyIHJlcGx5LAotICAgICAgICAgIGUuZy4gNDA0 IGZvciAibm90IGZvdW5kIi4KLQotICAgXHYoaHR0cF9jb25uZWN0ZWQpCi0gICAgICAgICAgMSB3 aGVuIGFuIEhUVFAgY29ubmVjdGlvbiBpcyBvcGVuLCAwIHdoZW4gdGhlcmUgaXMgbm8gSFRUUAot ICAgICAgICAgIGNvbm5lY3Rpb24uCi0KLSAgIFx2KGh0dHBfaG9zdCkKLSAgICAgICAgICBJZiBh biBIVFRQIGNvbm5lY3Rpb24gaXMgb3BlbiwgdGhlIGhvc3RuYW1lOnBvcnQsIGUuZy4KLSAgICAg ICAgICB3d3cuY29sdW1iaWEuZWR1OjgwOyBvdGhlcndpc2UsIGVtcHR5LgotCi0gICBcdihodHRw X21lc3NhZ2UpCi0gICAgICAgICAgU2VydmVyIGVycm9yIG1lc3NhZ2UsIGlmIGFueSwgZnJvbSBt b3N0IHJlY2VudCBIVFRQIGNvbW1hbmQuCi0KLSAgIFx2KGh0dHBfc2VjdXJpdHkpCi0gICAgICAg ICAgQSBsaXN0IG9mIHRoZSBzZWN1cml0eSBwYXJhbWV0ZXJzIGFuZCB2YWx1ZXMgZm9yIHRoZSBj dXJyZW50Ci0gICAgICAgICAgY29ubmVjdGlvbiwgaWYgYW55LiBFbXB0eSBpZiB0aGUgY29ubmVj dGlvbiBpcyBub3QgdG8gYSBzZWN1cmUKLSAgICAgICAgICBzZXJ2ZXIsIG9yIHRoZXJlIGlzIG5v IGNvbm5lY3Rpb24uCi0KLSAgIFRvIGRpc3BsYXkgYWxsIHRoZSBIVFRQIHZhcmlhYmxlcyBhdCBv bmNlLCB0eXBlIFNIT1cgVkFSIEhUVFA6Ci0KLSAgQy1LZXJtaXQ+IGh0dHAgb3BlbiB3d3cuY29s dW1iaWEuZWR1Ci0gIEMtS2VybWl0PiBodHRwIGdldCBsa2psa2psa2psa2oKLSAgQy1LZXJtaXQ+ IHNobyB2YXIgaHR0cAotICAgXHYoaHR0cF9jb2RlKSA9IDQwNAotICAgXHYoaHR0cF9jb25uZWN0 ZWQpID0gMQotICAgXHYoaHR0cF9ob3N0KSA9IHd3dy5jb2x1bWJpYS5lZHU6ODAKLSAgIFx2KGh0 dHBfbWVzc2FnZSkgPSBOb3QgRm91bmQKLSAgIFx2KGh0dHBfc2VjdXJpdHkpID0gTlVMTAotICBD LUtlcm1pdD4KLQotMi4yLjYuIFRoZSBIVFRQIENvbW1hbmQtTGluZSBQZXJzb25hbGl0eQotCi0g ICBJZiB5b3UgaW52b2tlIEMtS2VybWl0IHdpdGggdGhlIG5hbWUgImh0dHAiIG9yICJodHRwcyIs IHlvdSBjYW4gdXNlIGEKLSAgIHNwZWNpYWwgc2V0IG9mIEhUVFAtc3BlY2lmaWMgY29tbWFuZC1s aW5lIG9wdGlvbnMuIFlvdSBjYW4gZG8gdGhpcyBieQotICAgY3JlYXRpbmcgYSBzeW1ib2xpYyBs aW5rZSAiaHR0cCIgb3IgImh0dHBzIiB0byB0aGUgQy1LZXJtaXQgOC4wCi0gICBleGVjdXRhYmxl LCBvciBieSBoYXZpbmcgYSBzZXBhcmF0ZSBjb3B5IG9mIGl0IGNhbGxlZCAiaHR0cCIgb3IKLSAg ICJodHRwcyIuIEhlcmUncyB0aGUgdXNhZ2UgbWVzc2FnZSAoImh0dHAgLWgiKToKLQotICBVc2Fn ZTogLi9odHRwIGhvc3QgWyBvcHRpb25zLi4uIF0KLSAgIC1oICAgICAgICAgICAgIFRoaXMgbWVz c2FnZS4KLSAgIC1kICAgICAgICAgICAgIERlYnVnIHRvIGRlYnVnLmxvZy4KLSAgIC1TICAgICAg ICAgICAgIFN0YXkgKGlzc3VlIGNvbW1hbmQgcHJvbXB0IHdoZW4gZG9uZSkuCi0gICAtWSAgICAg ICAgICAgICBEbyBub3QgZXhlY3V0ZSBLZXJtaXQgaW5pdGlhbGl6YXRpb24gZmlsZS4KLSAgIC1x ICAgICAgICAgICAgIFF1aWV0IChzdXBwcmVzcyBtb3N0IG1lc3NhZ2VzKS4KLSAgIC11IG5hbWUg ICAgICAgIFVzZXJuYW1lLgotICAgLVAgcGFzc3dvcmQgICAgUGFzc3dvcmQuCi0gICAtZyBwYXRo bmFtZSAgICBHZXQgcmVtb3RlIHBhdGhuYW1lLgotICAgLXAgcGF0aG5hbWUgICAgUHV0IHJlbW90 ZSBwYXRobmFtZS4KLSAgIC1IIHBhdGhuYW1lICAgIEhlYWQgcmVtb3RlIHBhdGhuYW1lLgotICAg LWwgcGF0aG5hbWUgICAgTG9jYWwgcGF0aCBmb3IgLWcsIC1wLCBhbmQgLUguCi0gICAteiBvcHRb PXZhbHVlXSBTZWN1cml0eSBvcHRpb25zLi4uCi0gICAgICBjZXJ0PWZpbGUgICBDbGllbnQgY2Vy dGlmaWNhdGUgZmlsZQotICAgICAgY2VydHNvayAgICAgQWNjZXB0IGFsbCBjZXJ0aWZpY2F0ZXMK LSAgICAgIGtleT1maWxlICAgIENsaWVudCBwcml2YXRlIGtleSBmaWxlCi0gICAgICBzZWN1cmUg ICAgICBVc2UgU1NMCi0gICAgICB2ZXJpZnk9biAgICAwID0gbm9uZSwgMSA9IHBlZXIgLCAyID0g Y2VydGlmaWNhdGUgcmVxdWlyZWQKLQotICAgVGhlICJob3N0IiBhcmd1bWVudCBpcyB0aGUgbmFt ZSBvZiBhIFdlYiBob3N0LCBlLmcuIHd3dy5jb2x1bWJpYS5lZHUuCi0gICBUaGUgYWN0aW9uIG9w dGlvbnMgYXJlIC1wLCAtZywgYW5kIC1ILiBJZiB5b3UgZ2l2ZSBhbiBhY3Rpb24gb3B0aW9uLAot ICAgS2VybWl0IGRvZXMgdGhlIGFjdGlvbiBhbmQgdGhlbiBleGl0cy4gSWYgeW91IGdpdmUgYSBo b3N0IHdpdGhvdXQgYW4KLSAgIGFjdGlvbiBvcHRpb24sIEtlcm1pdCBtYWtlcyBhbiBIVFRQIGNv bm5lY3Rpb24gdG8gdGhlIGhvc3QgYW5kIHRoZW4KLSAgIGdpdmVzIHlvdSB0aGUgQy1LZXJtaXQg cHJvbXB0LiBIZXJlJ3MgYSBzaW1wbGUgZXhhbXBsZSB0aGF0IGZldGNoZXMgYQotICAgcHVibGlj bHkgcmVhZGFibGUgV2ViIHBhZ2U6Ci0KLSAgaHR0cCB3d3cuY29sdW1iaWEuZWR1IC1nIGtlcm1p dC9pbmRleC5odG1sCi0KLSAgIElmIHlvdSBuZWVkIHRvIGFjY2VzcyBhIHdlYnNpdGUgZm9yIHdo aWNoIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZQotICAgcmVxdWlyZWQsIHlvdSBjYW4gc3Vw cGx5IHRoZW0gb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIC11IGFuZCAtUC4gSWYKLSAgIHlvdSBp bmNsdWRlIGEgdXNlcm5hbWUgYnV0IG9taXQgdGhlIHBhc3N3b3JkLCBLZXJtaXQgcHJvbXB0cyB5 b3UgZm9yCi0gICBpdDoKLQotICBodHRwIHd3dy5jb2x1bWJpYS5lZHUgLXUgb2xnYSAtcCBrZXJt aXQvaW5kZXguaHRtbCAtbCBpbmRleC5odG1sCi0gIFBhc3N3b3JkOgotCi0gICBOb3RlIHRoYXQg d2hlbiBQVVQnaW5nIGZpbGVzIHRvIHdlYnNpdGVzLCB5b3UgaGF2ZSB0byBzdXBwbHkgYm90aCB0 aGUKLSAgIC1wIChyZW1vdGUgcGF0aG5hbWUpIGFuZCAtbCAobG9jYWwgcGF0aCkgb3B0aW9ucy4K LQotICAgSWYgeW91ciB2ZXJzaW9uIG9mIEtlcm1pdCBpcyBidWlsdCB3aXRoIFNTTC9UTFMgc2Vj dXJpdHksIHlvdSBjYW4gYWxzbwotICAgdXNlIHRoZSAteiBvcHRpb24gdG8gbWFrZSBzZWN1cmUg SFRUUCAoaHR0cHMpIGNvbm5lY3Rpb25zLgotCi0gICBGaW5hbGx5LCBhcyBub3RlZCBpbiBbMTk1 XVNlY3Rpb24gMTYsIHlvdSBjYW4gYWxzbyBnaXZlIGEgVVJMIGluc3RlYWQKLSAgIG9mIGEgaG9z dCBuYW1lIGFuZCBvcHRpb25zLgotCi0gICBbIFsxOTZdVG9wIF0gWyBbMTk3XUNvbnRlbnRzIF0g WyBbMTk4XUMtS2VybWl0IEhvbWUgXSBbIFsxOTldS2VybWl0Ci0gICBIb21lIF0KLQotMy4gS0VS TUlUJ1MgQlVJTFQtSU4gRlRQIENMSUVOVAotCi0gICAgIDMuMS4gIFsyMDBdTWFraW5nIGFuZCBN YW5hZ2luZyBGVFAgQ29ubmVjdGlvbnMKLSAgICAgMy4yLiAgWzIwMV1NYWtpbmcgU2VjdXJlIEZU UCBDb25uZWN0aW9ucwotICAgICAzLjMuICBbMjAyXVNldHRpbmcgRlRQIFByZWZlcmVuY2VzCi0g ICAgIDMuNC4gIFsyMDNdTWFuYWdpbmcgRGlyZWN0b3JpZXMgYW5kIEZpbGVzCi0gICAgIDMuNS4g IFsyMDRdVXBsb2FkaW5nIEZpbGVzIFdpdGggRlRQCi0gICAgIDMuNi4gIFsyMDVdRG93bmxvYWRp bmcgRmlsZXMgV2l0aCBGVFAKLSAgICAgMy43LiAgWzIwNl1UcmFuc2xhdGluZyBDaGFyYWN0ZXIg U2V0cwotICAgICAzLjguICBbMjA3XUZUUCBDb21tYW5kIFNob3J0Y3V0cwotICAgICAzLjkuICBb MjA4XUR1YWwgU2Vzc2lvbnMKLSAgICAgMy4xMC4gWzIwOV1BdXRvbWF0aW5nIEZUUCBTZXNzaW9u cwotICAgICAzLjExLiBbMjEwXUFkdmFuY2VkIEZUUCBQcm90b2NvbCBGZWF0dXJlcwotCi0gICBF YXJsaWVyIHZlcnNpb25zIG9mIEMtS2VybWl0IGFuZCBLOTUgaW5jbHVkZWQgYW4gRlRQIGNvbW1h bmQsIGJ1dCBpdAotICAgc2ltcGx5IGludm9rZWQgYW4gZXh0ZXJuYWwgRlRQIGNsaWVudC4gTm93 LCBieSBwb3B1bGFyIGRlbWFuZCwgS2VybWl0Ci0gICBpbmNsdWRlcyBpdHMgb3duIGJ1aWx0LWlu IEZUUCBjbGllbnQgdGhhdCBvZmZlcnMgdGhlIGZvbGxvd2luZwotICAgYWR2YW50YWdlcyBvdmVy IHRyYWRpdGlvbmFsIEZUUCBjbGllbnRzIChhbmQgaXRzIHByZXZpb3VzIGludGVyZmFjZSB0bwot ICAgdGhlbSk6Ci0KLSAgICAgKiBBbnkgb2YgS2VybWl0J3MgYnVpbHQtaW4gWzIxMV1zZWN1cml0 eSBtZXRob2RzIGNhbiBiZSB1c2VkIHRvCi0gICAgICAgZXN0YWJsaXNoIGFuZCBjb25kdWN0IHNl Y3VyZSBGVFAgc2Vzc2lvbnMgd2l0aCBbMjEyXUZUUCBzZXJ2ZXJzCi0gICAgICAgdGhhdCBzdXBw b3J0IHRoZXNlIG1ldGhvZHMuIChTZWN1cml0eSBtb2R1bGVzIGNhbiBiZSBzdWJqZWN0IHRvCi0g ICAgICAgZXhwb3J0IHJlc3RyaWN0aW9ucy4pCi0gICAgICogS2VybWl0J3MgRlRQIGNsaWVudCB1 c2VzICJwYXNzaXZlIG1vZGUiIGJ5IGRlZmF1bHQgdG8gYXZvaWQKLSAgICAgICBibG9ja2FnZSBi eSBmaXJld2FsbHMgYW5kIG5ldHdvcmsgYWRkcmVzcyB0cmFuc2xhdG9ycy4gT2YgY291cnNlCi0g ICAgICAgYWN0aXZlIG1vZGUgY2FuIGJlIGNob3NlbiB0b28gd2hlbiBuZWVkZWQuCi0gICAgICog WzIxM11DaGFyYWN0ZXIgc2V0cyBjYW4gYmUgdHJhbnNsYXRlZCBhcyBwYXJ0IG9mIHRoZSB0cmFu c2ZlcgotICAgICAgIHByb2Nlc3MgZXZlbiB3aGVuIHRoZSBGVFAgc2VydmVyIGRvZXMgbm90IHN1 cHBvcnQgY2hhcmFjdGVyLXNldAotICAgICAgIHRyYW5zbGF0aW9uLCBpbmNsdWRpbmcgdG8vZnJv bSB0aGUgbmV3IEludGVybmV0IHN0YW5kYXJkCi0gICAgICAgaW50ZXJuYXRpb25hbCBjaGFyYWN0 ZXIgc2V0LCBbMjE0XVVuaWNvZGUgVVRGLTguIFRoaXMgaW5jbHVkZXMgYm90aAotICAgICAgIHRo ZSBmaWxlJ3MgbmFtZSBhbmQgKGZvciB0ZXh0IGZpbGVzIG9ubHkpIGl0cyBjb250ZW50cy4KLSAg ICAgKiBBbGwgb2YgQy1LZXJtaXQncyBbMjE1XWZpbGUtc2VsZWN0aW9uIG1lY2hhbmlzbXMgYXJl IGF2YWlsYWJsZToKLSAgICAgICBzaXplLCBkYXRlLCBuYW1lIHBhdHRlcm5zIGFuZCBsaXN0cywg ZXhjZXB0aW9uIGxpc3RzLCBldGMuCi0gICAgICogWzIxNl1BdG9taWMgZmlsZSBtb3ZlbWVudCBj YXBhYmlsaXRpZXMgYXJlIHByb3ZpZGVkIChkZWxldGUsIG1vdmUsCi0gICAgICAgb3IgcmVuYW1l IGZpbGVzIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgc3VjY2Vzc2Z1bCB0cmFuc2ZlcikuCi0gICAgICog VGhlIGNvcnJlY3QgZmlsZSB0eXBlLCAiYXNjaWkiIChpLmUuIHRleHQpIG9yIGJpbmFyeSwgaXMg Y2hvc2VuCi0gICAgICAgYXV0b21hdGljYWxseSBmb3IgZWFjaCBmaWxlIChleHBsYWluZWQgaW4g WzIxN11TZWN0aW9uIDQpLCBhbmQgYW55Ci0gICAgICAgbWl4dHVyZSBvZiB0ZXh0IGFuZCBiaW5h cnkgZmlsZXMgY2FuIGJlIHNlbnQgaW4gYSBzaW5nbGUgb3BlcmF0aW9uLAotICAgICAgIGV2ZW4g YWNyb3NzIHBsYXRmb3Jtcy4KLSAgICAgKiBVcGRhdGUgbW9kZSAoImRvbid0IGJvdGhlciB0cmFu c2ZlcnJpbmcgZmlsZXMgdGhhdCBkaWRuJ3QgY2hhbmdlCi0gICAgICAgc2luY2UgbGFzdCB0aW1l IikgYW5kIHJlY292ZXJ5IChyZXN1bXB0aW9uIG9mIGFuIGludGVycnVwdGVkCi0gICAgICAgdHJh bnNmZXIgZnJvbSB0aGUgcG9pbnQgb2YgZmFpbHVyZSkgYXJlIGF2YWlsYWJsZSBpbiBib3RoCi0g ICAgICAgZGlyZWN0aW9ucy4KLSAgICAgKiBXaGVuIHVwbG9hZGluZyBmaWxlcyBmcm9tIFVOSVgg dG8gVU5JWCwgdGhlIGZpbGUncyBwZXJtaXNzaW9ucyBjYW4KLSAgICAgICBiZSBwcmVzZXJ2ZWQg aWYgZGVzaXJlZC4KLSAgICAgKiBSZWN1cnNpdmUgZGlyZWN0b3J5LXRyZWUgUFVUcyBhcmUgc3Vw cG9ydGVkIGJldHdlZW4gYW55IHR3bwotICAgICAgIHBsYXRmb3JtcyB0aGF0IGhhdmUgdHJlZS1z dHJ1Y3R1cmVkIGZpbGUgc3lzdGVtcy4gUmVjdXJzaXZlIEdFVHMKLSAgICAgICBhcmUgc3VwcG9y dGVkIGJldHdlZW4gbGlrZSBwbGF0Zm9ybXMgaWYgdGhlIHNlcnZlciBjb29wZXJhdGVzIGFuZAot ICAgICAgIGJldHdlZW4gbGlrZSBvciB1bmxpa2UgcGxhdGZvcm1zIGlmIHRoZSBzZXJ2ZXIgc3Vw cG9ydHMgTUxTRAotICAgICAgIChbMjE4XVNlY3Rpb24gMy4xMSkuCi0gICAgICogV2hlbiByZWNl aXZpbmcgZmlsZXMsIGFsbCBvZiBLZXJtaXQncyBmaWxlIGNvbGxpc2lvbiBhY3Rpb25zIGFyZQot ICAgICAgIGF2YWlsYWJsZTogYmFja3VwLCB1cGRhdGUsIHJlZnVzZSwgcmVuYW1lLCBldGMuCi0g ICAgICogTXVsdGktZmlsZSB0cmFuc2ZlcnMgY2FuIGJlIGludGVycnVwdGVkIG9uIGEgcGVyLWZp bGUgYmFzaXMsCi0gICAgICAgYXV0b21hdGljYWxseSBza2lwcGluZyB0byB0aGUgbmV4dCBmaWxl LgotICAgICAqIEZUUCBzZXNzaW9ucyBhcmUgWzIxOV1mdWxseSBzY3JpcHRhYmxlLgotICAgICAq IEFuIGVudGlyZSBGVFAgc2Vzc2lvbiAoY29ubmVjdCwgbG9naW4sIENELCB1cGxvYWQgb3IgZG93 bmxvYWQsCi0gICAgICAgbG9nb3V0KSBjYW4gYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxp bmUgd2l0aG91dCB1c2luZyBhCi0gICAgICAgc2NyaXB0LgotICAgICAqIEFsbCBvZiBLZXJtaXQn cyBsb2dnaW5nIG9wdGlvbnMgYW5kIGZvcm1hdHMgYXJlIGF2YWlsYWJsZSB0byBrZWVwCi0gICAg ICAgYW4gYWNjdXJhdGUgYW5kIGNvbXBsZXRlIHJlY29yZCBvZiBlYWNoIGNvbm5lY3Rpb24gYW5k IGZpbGUKLSAgICAgICB0cmFuc2ZlciwgYW5kIHRvIGFpZCBpbiB0cm91Ymxlc2hvb3RpbmcuCi0g ICAgICogQWxsIG9mIEtlcm1pdCdzIGZpbGUtdHJhbnNmZXIgZGlzcGxheSBvcHRpb25zIGFyZSBh dmFpbGFibGUKLSAgICAgICAoZnVsbHNjcmVlbiwgYnJpZWYsIENSVCwgc2VyaWFsLCBub25lKS4K LQotICAgQW5kIGJlc3Qgb2YgYWxsOgotICAgICAqIEtlcm1pdCBkb2Vzbid0IGdpdmUgeW91IHRo b3NlIGFubm95aW5nIHBlci1maWxlIHByb21wdHMgZXZlcnkgdGltZQotICAgICAgIHlvdSBzdGFy dCBhIG11bHRpLWZpbGUgdHJhbnNmZXIgd2l0aG91dCByZW1lbWJlcmluZyB0byBnaXZlIGEKLSAg ICAgICAicHJvbXB0IiBjb21tYW5kIGZpcnN0IDotKS4KLQotICAgWyBbMjIwXVRvcCBdIFsgWzIy MV1GVFAgVG9wIF0gWyBbMjIyXUZUUCBDbGllbnQgT3ZlcnZpZXcgXSBbIFsyMjNdRlRQCi0gICBT Y3JpcHQgVHV0b3JpYWwgXSBbIFsyMjRdQy1LZXJtaXQgSG9tZSBdIFsgWzIyNV1LZXJtaXQgSG9t ZSBdCi0KLTMuMS4gTWFraW5nIGFuZCBNYW5hZ2luZyBGVFAgQ29ubmVjdGlvbnMKLQotICAgRWFj aCBjb3B5IG9mIEtlcm1pdCBjYW4gaGF2ZSBvbmUgRlRQIGNvbm5lY3Rpb24gb3BlbiBhdCBhIHRp bWUuIEZUUAotICAgY29ubmVjdGlvbnMgYXJlIGluZGVwZW5kZW50IG9mIHJlZ3VsYXIgdGVybWlu YWwgY29ubmVjdGlvbnM7IGEgdGVybWluYWwKLSAgIGNvbm5lY3Rpb24gKHNlcmlhbCBvciBuZXR3 b3JrIHZpYSBTRVQgTElORSwgRElBTCwgU0VUIEhPU1QsIFRFTE5FVCwKLSAgIGV0YykgbWF5IGJl LCBidXQgbmVlZCBub3QgYmUsIG9wZW4gYXQgdGhlIHNhbWUgdGltZSBhcyBhbiBGVFAKLSAgIGNv bm5lY3Rpb24sIGFuZCB0ZXJtaW5hbCBjb25uZWN0aW9ucyBjYW4gYWxzbyBiZSBjbG9zZWQsIGFu ZCBuZXcKLSAgIGNvbm5lY3Rpb25zIG9wZW5lZCwgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIHRo ZSBGVFAgY29ubmVjdGlvbiAoYW5kCi0gICB2aWNlIHZlcnNhKS4gVGh1cywgZm9yIGV4YW1wbGUs IEtlcm1pdCBjYW4gaGF2ZSBhbiBGVFAgY29ubmVjdGlvbiBhbmQgYQotICAgVEVMTkVUIGNvbm5l Y3Rpb24gb3BlbiB0byB0aGUgc2FtZSBob3N0IHNpbXVsdGFuZW91c2x5LCB1c2luZyB0aGUKLSAg IFRFTE5FVCBjb25uZWN0aW9uIChlLmcuKSB0byBzZW5kIG1haWwgb3IgdGFrZSBvdGhlciBkZXNp cmVkIGFjdGlvbnMgYXMKLSAgIHZhcmlvdXMgRlRQIGFjdGlvbnMgY29tcGxldGUuIE9mIGNvdXJz ZSwgZWFjaCBjb3B5IG9mIEtlcm1pdCBjYW4gZG8KLSAgIG9ubHkgb25lIHRoaW5nIGF0IGEgdGlt ZSwgc28gaXQgY2FuJ3QgKGZvciBleGFtcGxlKSB0cmFuc2ZlciBhIGZpbGUKLSAgIHdpdGggRlRQ IGFuZCBhbm90aGVyIGZpbGUgd2l0aCBLZXJtaXQgcHJvdG9jb2wgc2ltdWx0YW5lb3VzbHkuCi0K LSAgIEEgS2VybWl0IEZUUCBzZXNzaW9uIGNhbiBiZSBlc3RhYmxpc2hlZCBieSBbMjI2XWNvbW1h bmQtbGluZSBvcHRpb25zLAotICAgYnkgWzIyN11VUkwsIG9yIGJ5IFsyMjhdaW50ZXJhY3RpdmUg Y29tbWFuZHMuCi0KLTMuMS4xLiBLZXJtaXQgQ29tbWFuZC1MaW5lIE9wdGlvbnMgZm9yIEZUUAot Ci0gICBUaGUgbmV3IGNvbW1hbmQtbGluZSBvcHRpb24gJy05JyAoc29ycnksIHdlJ3JlIG91dCBv ZiBsZXR0ZXJzKSBjYW4gYmUKLSAgIHVzZWQgd2hlbiBzdGFydGluZyBDLUtlcm1pdCwgdGVsbGlu ZyBpdCB0byBtYWtlIGFuIEZUUCBjb25uZWN0aW9uOgotCi0gIGtlcm1pdCAtOSBob3N0bmFtZQot Ci0gICBvciBpZiBhIG5vbi1kZWZhdWx0IEZUUCBwb3J0IGlzIG5lZWRlZDoKLQotICBrZXJtaXQg LTkgaG9zdG5hbWU6cG9ydAotCi0gICBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgdXNlcm5hbWUg b24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSAtTSAoIk15Ci0gICBVc2VyIElEIikgb3B0aW9u IHRoYXQgd2FzIGFscmVhZHkgdGhlcmUgZm9yIG90aGVyIGNvbm5lY3Rpb24gdHlwZXM6Ci0KLSAg a2VybWl0IC05IGhvc3RuYW1lIC1NIG9sZ2EKLQotICAgSWYgeW91IHNwZWNpZnkgdGhlIHVzZXJu YW1lIG9uIHRoZSBjb21tYW5kIGxpbmUsIEtlcm1pdCB1c2VzIGl0IHdoZW4KLSAgIG1ha2luZyB0 aGUgY29ubmVjdGlvbiBhbmQgZG9lcyBub3QgcHJvbXB0IHlvdSBmb3IgaXQgKGJ1dCBpdCBkb2Vz Ci0gICBwcm9tcHQgeW91IGZvciB0aGUgcGFzc3dvcmQgaWYgb25lIGlzIHJlcXVpcmVkKS4KLQot ICAgT25jZSB0aGUgY29ubmVjdGlvbiBpcyBtYWRlLCB5b3UgZ2V0IHRoZSByZWd1bGFyIEtlcm1p dCBwcm9tcHQsIGFuZCBjYW4KLSAgIGdpdmUgaW50ZXJhY3RpdmUgY29tbWFuZHMgc3VjaCBhcyB0 aGUgb25lcyBkZXNjcmliZWQgYmVsb3cuIFdoZW4geW91Ci0gICBnaXZlIGEgQllFIGNvbW1hbmQs IEtlcm1pdCBjbG9zZXMgdGhlIHNlc3Npb24gYW5kIGV4aXRzLCBqdXN0IGFzIGEKLSAgIHJlZ3Vs YXIgRlRQIGNsaWVudCB3b3VsZCBkby4gSWYgeW91IGRvbid0IHdhbnQgS2VybWl0IHRvIGV4aXQg d2hlbiB5b3UKLSAgIGdpdmUgYSBCWUUgY29tbWFuZCwgaW5jbHVkZSB0aGUgLVMgKCJTdGF5Iikg b3B0aW9uIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0KLSAgIE90aGVyIEtlcm1pdCBjb21tYW5kLWxp bmUgb3B0aW9ucyB0aGF0IGFyZSBub3Qgc3BlY2lmaWMgdG8gbm9uLUZUUAotICAgY29ubmVjdGlv bnMgc2hvdWxkIGFmZmVjdCB0aGUgRlRQIHNlc3Npb24gaW4gdGhlIGV4cGVjdGVkIHdheXM7IGZv cgotICAgZXhhbXBsZSwgLWkgYW5kIC1UIGZvcmNlIGJpbmFyeSBhbmQgdGV4dCBtb2RlIHRyYW5z ZmVycywgcmVzcGVjdGl2ZWx5LgotCi0gICBGaWxlIHRyYW5zZmVycyBjYW4gbm90IGJlIGluaXRp YXRlZCBvbiB0aGUgImtlcm1pdCAtOSIgY29tbWFuZCBsaW5lOwotICAgZm9yIHRoYXQgeW91IG5l ZWQgdG8gdXNlIEtlcm1pdCdzIEZUUCBwZXJzb25hbGl0eSAobmV4dCBzZWN0aW9uKSBvciB5b3UK LSAgIGNhbiB1c2UgVVJMcyAoWzIyOV1TZWN0aW9uIDMuMS4zKS4KLQotMy4xLjIuIFRoZSBGVFAg Q29tbWFuZC1MaW5lIFBlcnNvbmFsaXR5Ci0KLSAgIElmIHlvdSB3YW50IHRvIHJlcGxhY2UgeW91 ciByZWd1bGFyIEZUUCBjbGllbnQgd2l0aCBDLUtlcm1pdCwgeW91IGNhbgotICAgbWFrZSBhIGxp bmsgY2FsbGVkICJmdHAiIHRvIHRoZSBDLUtlcm1pdCBiaW5hcnkgKG9yIHlvdSBjYW4gc3RvcmUg YQotICAgY29weSBvZiB0aGUgQy1LZXJtaXQgYmluYXJ5IHVuZGVyIHRoZSBuYW1lICJmdHAiKS4g V2hlbiBDLUtlcm1pdCBpcwotICAgaW52b2tlZCB3aXRoIGEgcHJvZ3JhbSBuYW1lIG9mICJmdHAi IChvciAiRlRQIiwgY2FzZSBkb2Vzbid0IG1hdHRlciksCi0gICBpdCBhc3N1bWVzIHRoZSBjb21t YW5kLWxpbmUgcGVyc29uYWxpdHkgb2YgdGhlIHJlZ3VsYXIgRlRQIGNsaWVudDoKLQotICBmdHAg WyBvcHRpb25zIF0gaG9zdG5hbWUgWyBwb3J0IF0KLQotICAgSW4gdGhpcyBjYXNlIHRoZSBvcHRp b25zIGFyZSBsaWtlIHRob3NlIG9mIGEgcmVndWxhciBGVFAgY2xpZW50OgotCi0gIC1kICBEZWJ1 ZzogZW5hYmxlcyBkZWJ1ZyBtZXNzYWdlcyBhbmQgY3JlYXRlcyBhIGRlYnVnLmxvZyBmaWxlLgot ICAtbiAgTm8gYXV0b2xvZ2luOiBLZXJtaXQgc2hvdWxkIG5vdCBzZW5kIHlvdXIgdXNlciBJRCBh dXRvbWF0aWNhbGx5LgotICAtdCAgUGFja2V0IHRyYWNlOiBhY2NlcHRlZCBidXQgaXMgdHJlYXRl ZCB0aGUgc2FtZSBhcyAtZC4KLSAgLXYgIFZlcmJvc2U6IGFjY2VwdGVkIGJ1dCBpZ25vcmVkIChv cGVyYXRpb24gaXMgdmVyYm9zZSBieSBkZWZhdWx0KS4KLSAgLWkgIE5vdCBpbnRlcmFjdGl2ZTog YWNjZXB0ZWQgYnV0IGlnbm9yZWQuCi0KLSAgIGFuZCB0aGUgaG9zdG5hbWUgY2FuIGFsc28gYmUg YSBVUkwgKGV4cGxhaW5lZCBpbiBbMjMwXVNlY3Rpb24gMy4xLjMpLgotICAgVG8gc3BlY2lmeSBh IG5vbi1kZWZhdWx0IFRDUCBwb3J0IGZvciB0aGUgRlRQIHNlcnZlciwgaW5jbHVkZSB0aGUgcG9y dAotICAgbnVtYmVyIG9yIG5hbWUgYWZ0ZXIgdGhlIGhvc3RuYW1lLgotCi0gICBUaGVyZSBhcmUg YWxzbyBzb21lIGJvbnVzIG9wdGlvbnMgdGhhdCBhbGxvdyB5b3UgdG8gZXhlY3V0ZSBhbiBlbnRp cmUKLSAgIEZUUCBzZXNzaW9uIGZyb20gdGhlIHNoZWxsIGNvbW1hbmQgbGluZSwgYXMgbG9uZyBh cyB5b3UgZG9uJ3QgaW5jbHVkZQotICAgdGhlIC1uIG9wdGlvbi4gVGhlc2UgYXJlIG5vdCBhdmFp bGFibGUgd2l0aCByZWd1bGFyIEZUUCBjbGllbnRzLCBhbmQgYXQKLSAgIGxlYXN0IG9uZSBvZiB0 aGVzZSBvcHRpb25zICgtZykgY29uZmxpY3RzIHdpdGggVU5JWCBmdHAgKHdoZXJlIC1nIG1lYW5z Ci0gICAibm8gZ2xvYmJpbmciLCB3aGljaCBkb2VzIG5vdCBhcHBseSB0byBLZXJtaXQpLCBhbmQg c29tZSBvZiB0aGVtIChsaWtlCi0gICB0aGUgb3B0aW9ucyBhYm92ZSkgYWxzbyBjb25mbGljdCB3 aXRoIHJlZ3VsYXIgS2VybWl0IGNvbW1hbmQtbGluZQotICAgb3B0aW9uczoKLQotICAtbSBtb2Rl ICAgICAgPSAicGFzc2l2ZSIgKGRlZmF1bHQpIG9yICJhY3RpdmUiCi0gIC1ZICAgICAgICAgICAg RG9uJ3QgZXhlY3V0ZSB0aGUgS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUgWzFdCi0gIC1xICAg ICAgICAgICAgUXVpZXQsIHN1cHByZXNzZXMgYWxsIGJ1dCBlcnJvciBtZXNzYWdlcyBbMV0KLSAg LVMgICAgICAgICAgICBTdGF5LCBkb24ndCBleGl0IGF1dG9tYXRpY2FsbHkgWzFdCi0gIC1BICAg ICAgICAgICAgQXV0b2xvZ2luIGFub255bW91c2x5IFsyXQotICAtdSBuYW1lICAgICAgIFVzZXJu YW1lIGZvciBhdXRvbG9naW4gWzJdIChzeW5vbnltOiAtTSBbMV0pCi0gIC1QIHBhc3N3b3JkICAg UGFzc3dvcmQgZm9yIGF1dG9sb2dpbiAoc2VlIGNhdXRpb25zIGJlbG93KSBbMl0KLSAgLUQgZGly ZWN0b3J5ICBjZCBhZnRlciBhdXRvbG9naW4gWzJdCi0gIC1iICAgICAgICAgICAgQmluYXJ5IG1v ZGUgWzJdCi0gIC1hICAgICAgICAgICAgVGV4dCAoImFzY2lpIikgbW9kZSBbMl0gKHN5bm9ueW06 IC1UIFsxXSkKLSAgLVIgICAgICAgICAgICBSZWN1cnNpdmUgKHdvcmtzIHdpdGggLXApIFs0XQot ICAtcCBmaWxlcyAgICAgIEZpbGVzIHRvIHB1dCAodXBsb2FkKSBhZnRlciBhdXRvbG9naW4gWzJd IChzeW5vbnltOiAtcyBbMV0pCi0gIC1nIGZpbGVzICAgICAgRmlsZXMgdG8gZ2V0IChkb3dubG9h ZCkgYWZ0ZXIgYXV0b2xvZ2luIFszXQotCi0gICBbMV0gU2FtZSBhcyBLZXJtaXQsIG5vdCBhdmFp bGFibGUgaW4gcmVndWxhciBGVFAgY2xpZW50cy4KLSAgIFsyXSBDb25mbGljdHMgd2l0aCBLZXJt aXQsIG5vdCBhdmFpbGFibGUgaW4gcmVndWxhciBGVFAgY2xpZW50cy4KLSAgIFszXSBTYW1lIGFz IEtlcm1pdCwgY29uZmxpY3RzIHdpdGggcmVndWxhciBGVFAgY2xpZW50cy4KLSAgIFs0XSBDb25m bGljdHMgd2l0aCBLZXJtaXQsIGF2YWlsYWJsZSBpbiBzb21lIEZUUCBjbGllbnRzLgotCi0gICBG YW5jaWVyIG9wdGlvbnMgc3VjaCBhcyByZXN0YXJ0LCBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9u LCBmaWxlbmFtZQotICAgY29sbGlzaW9uIHNlbGVjdGlvbiwgYXV0b21hdGljIG1vdmUvcmVuYW1l L2RlbGV0ZSwgZXRjLCBhcmUgbm90Ci0gICBhdmFpbGFibGUgZnJvbSB0aGUgY29tbWFuZCBsaW5l OyBmb3IgdGhlc2UgeW91IGNhbiB1c2UgdGhlIGNvbW1hbmRzCi0gICBkZXNjcmliZWQgaW4gdGhl IGZvbGxvd2luZyBzZWN0aW9ucy4gVGhlIC1SIG9wdGlvbiBtaWdodCBhbHNvIHdvcmsgd2l0aAot ICAgLWcgKEdFVCkgYnV0IHRoYXQgZGVwZW5kcyBvbiB0aGUgc2VydmVyLgotCi0gICBUaGUgZm9s bG93aW5nIHNlY3VyaXR5IG9wdGlvbnMgYXJlIGFsc28gYXZhaWxhYmxlLCBleHBsYWluZWQgaW4K LSAgIFsyMzFdU2VjdGlvbiAzLjI6Ci0KLSAgLWsgcmVhbG0gICAgICBLZXJiZXJvcyA0IHJlYWxt IFs0XQotICAtZiAgICAgICAgICAgIEtlcmJlcm9zIDUgY3JlZGVudGlhbHMgZm9yd2FyZGluZyBb NF0KLSAgLXggICAgICAgICAgICBhdXRvZW5jcnlwdGlvbiBtb2RlIFs0XQotICAtYyBjaXBoZXIg ICAgIFNSUCBjaXBoZXIgdHlwZSBbNF0KLSAgLUggaGFzaCAgICAgICBTUlAgZW5jcnlwdGlvbiBo YXNoIFs0XQotICAteiBvcHRpb24gICAgIFNlY3VyaXR5IG9wdGlvbnMgWzRdCi0KLSAgIElmIHlv dSBpbmNsdWRlIC1BIG9yIHNwZWNpZnkgYSBuYW1lIG9mICJhbm9ueW1vdXMiIG9yICJmdHAiLCB5 b3UgYXJlCi0gICBsb2dnZWQgaW4gYW5vbnltb3VzbHkgYW5kLCBpbiB0aGUgYWJzZW5jZSBvZiAt UCwgS2VybWl0IGF1dG9tYXRpY2FsbHkKLSAgIHN1cHBsaWVzIGEgcGFzc3dvcmQgb2YgInVzZXJA aG9zdCIsIHdoZXJlICJ1c2VyIiBpcyB5b3VyIGxvY2FsIHVzZXIgSUQsCi0gICBhbmQgImhvc3Qi IGlzIHRoZSBob3N0bmFtZSBvZiB0aGUgY29tcHV0ZXIgd2hlcmUgS2VybWl0IGlzIHJ1bm5pbmcu IElmCi0gICB5b3UgZG8gbm90IGluY2x1ZGUgLXAgb3IgLWcsIEtlcm1pdCBlbnRlcnMgY29tbWFu ZCBtb2RlIHNvIHlvdSBjYW4gdHlwZQotICAgY29tbWFuZHMgb3IgZXhlY3V0ZSB0aGVtIGZyb20g YSBzY3JpcHQuCi0KLSAgIElmIHlvdSBpbmNsdWRlIC1wIG9yIC1nLCBLZXJtaXQgYXR0ZW1wdHMg dG8gdHJhbnNmZXIgdGhlIHNwZWNpZmllZAotICAgZmlsZXMgYW5kIHRoZW4gZXhpdHMgYXV0b21h dGljYWxseSBhdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2ZlciB1bmxlc3MKLSAgIHlvdSBhbHNvIGlu Y2x1ZGVkIC1TIChTdGF5KS4gSXQgdXNlcyB0aGUgImJyaWVmIiBmaWxlIHRyYW5zZmVyIGRpc3Bs YXkKLSAgIChvbmUgbGluZSBwZXIgZmlsZSkgdW5sZXNzIHlvdSBpbmNsdWRlIHRoZSAtcSBvcHRp b24gdG8gc3VwcHJlc3MgaXQuCi0KLSAgIFdoZW4gdXBsb2FkaW5nIGZpbGVzIHdpdGggLXAsIEtl cm1pdCBzd2l0Y2hlcyBhdXRvbWF0aWNhbGx5IGJldHdlZW4KLSAgIHRleHQgYW5kIGJpbmFyeSBt b2RlIGZvciBlYWNoIGZpbGUuCi0KLSAgIFdoZW4gZG93bmxvYWRpbmcsIHlvdSBjYW4gZWl0aGVy IHNwZWNpZnkgYSBwYXJ0aWN1bGFyIG1vZGUgKHRleHQgb3IKLSAgIGJpbmFyeSkgdG8gYmUgdXNl ZCBmb3IgYWxsIHRoZSBmaWxlcywgb3IgeW91IGNhbiBsZXQgS2VybWl0IHNlbGVjdCB0aGUKLSAg IHR5cGUgZm9yIGVhY2ggZmlsZSBhdXRvbWF0aWNhbGx5LCBiYXNlZCBvbiBpdHMgbmFtZSAoc2Vl IFsyMzJdU2VjdGlvbnMKLSAgIDMuNSBhbmQgWzIzM10zLjYgZm9yIGdyZWF0ZXIgZGV0YWlsKS4g SW4gVU5JWCBiZSBzdXJlIHRvIHF1b3RlIGFueQotICAgd2lsZGNhcmQgY2hhcmFjdGVycyB0byBw cmV2ZW50IHRoZSBzaGVsbCBmcm9tIGV4cGFuZGluZyB0aGVtLCBhcyBzaG93bgotICAgaW4gdGhl IGV4YW1wbGVzIGp1c3QgYmVsb3cuIEZpbGVuYW1lIGNvbGxpc2lvbnMgYXJlIGhhbmRsZWQgYWNj b3JkaW5nCi0gICBLZXJtaXQncyBGSUxFIENPTExJU0lPTiBzZXR0aW5nIChpZiBzcGVjaWZpZWQg aW4geW91ciBLZXJtaXQKLSAgIGN1c3RvbWl6YXRpb24gZmlsZTsgb3RoZXJ3aXNlIHRoZSBkZWZh dWx0LCB3aGljaCBpcyBCQUNLVVApLgotCi0gICBJdCBzaG91bGQgZ28gd2l0aG91dCBzYXlpbmcg dGhhdCB0aGUgLVAgb3B0aW9uIHNob3VsZCBiZSB1c2VkIHdpdGgKLSAgIGNhdXRpb24uIEluIGFk ZGl0aW9uIHRvIHRoZSB3ZWxsLWtub3duIHJpc2tzIG9mIHRyYW5zbWl0dGluZyBwbGFpbnRleHQK LSAgIHBhc3N3b3JkcyBvdmVyIHRoZSBJbnRlcm5ldCwgaW4gdGhpcyBjYXNlIHRoZSBwYXNzd29y ZCBhbHNvIGVjaG9zIHRvCi0gICB0aGUgc2NyZWVuIGlmIHlvdSB0eXBlIGl0LCBhbmQgY2FuIGJl IHNlZW4gaW4gcHMgYW5kIHcgbGlzdGluZ3MgdGhhdAotICAgc2hvdyB0aGUgdXNlcidzIGN1cnJl bnRseSBhY3RpdmUgY29tbWFuZCBhbmQgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KLSAgIFRodXMg Y29tbWFuZC1saW5lIEZUUCBzZXNzaW9ucyBhcmUgbW9zdCBhcHByb3ByaWF0ZSBmb3Igc2VjdXJl IG9yCi0gICBhbm9ueW1vdXMgY29ubmVjdGlvbnMgKHRob3NlIHRoYXQgZG8gbm90IHJlcXVpcmUg cGFzc3dvcmRzKS4KLQotICAgSGVyZSdzIGFuIGV4YW1wbGUgaW4gd2hpY2ggeW91IGRvd25sb2Fk IHRoZSBsYXRlc3QgQy1LZXJtaXQgInRhcmJhbGwiCi0gICBmcm9tIHRoZSBDb2x1bWJpYSBVbml2 ZXJzaXR5IEZUUCBhcmNoaXZlOgotCi0gIGZ0cCAtQSBrZXJtaXQuY29sdW1iaWEuZWR1IC1iZyBr ZXJtaXQvYXJjaGl2ZXMvY2tlcm1pdC50YXIuZ3oKLQotICAgVGhpcyBhc3N1bWVzIHRoYXQgImZ0 cCIgaXMgYSBzeW1ib2xpYyBsaW5rIHRvIEMtS2VybWl0LiBJdCBsb2dzIHlvdSBpbgotICAgYW5v bnltb3VzbHkgYW5kIGdldHMgdGhlIGNrZXJtaXQudGFyLmd6IGZpbGUgaW4gYmluYXJ5IG1vZGUg ZnJvbSB0aGUKLSAgIGtlcm1pdC9hcmNoaXZlcyBkaXJlY3RvcnkuCi0KLSAgIEhlcmUncyBhIHNs aWdodGx5IG1vcmUgYW1iaXRpb3VzIGV4YW1wbGUgdGhhdCBpbGx1c3RyYXRlcyBDRCdpbmcgdG8g dGhlCi0gICBkZXNpcmVkIHNlcnZlciBkaXJlY3RvcnkgdG8gZ2V0IGEgZ3JvdXAgb2YgZmlsZXMg aW4gdGV4dCBtb2RlIChpbiB0aGlzCi0gICBjYXNlIHRoZSBDLUtlcm1pdCBzb3VyY2UgZmlsZXMp OgotCi0gIGZ0cCAtQSBrZXJtaXQuY29sdW1iaWEuZWR1IC1EIGtlcm1pdC9mIC1hZyAiY2tbY3V3 XSouW2N3aF0iIG1ha2VmaWxlCi0KLSAgIEluIHRoaXMgY2FzZSB3ZSBDRCB0byB0aGUga2VybWl0 L2YgZGlyZWN0b3J5IHNvIHdlIGRvbid0IGhhdmUgdG8KLSAgIGluY2x1ZGUgaXQgaW4gZWFjaCBm aWxlIHNwZWNpZmljYXRpb24sIGFuZCB3ZSBxdW90ZSB0aGUgY2tbY3V3XSouW2N3aF0KLSAgIHNw ZWNpZmljYXRpb24gc28gdGhlIHNoZWxsIGRvZXNuJ3QgZXhwYW5kIGl0LCBzaW5jZSB3ZSBoYXZl IHRvIHBhc3MgaXQKLSAgIGFzLWlzIHRvIHRoZSBzZXJ2ZXIuIE5vdGUgYWxzbyB0aGF0IHRoZSBx dW90ZXMgZG9uJ3QgZ28gYXJvdW5kIHRoZQotICAgZW50aXJlIGZpbGUgbGlzdDsgb25seSBhcm91 bmQgZWFjaCBmaWxlIHNwZWNpZmljYXRpb24gdGhhdCBuZWVkcyB0byBiZQotICAgcXVvdGVkLgot Ci0gICBIZXJlJ3Mgb25lIG1vcmUgZXhhbXBsZSwgdGhhdCB1cGxvYWRzIGEgZGVidWcgbG9nIGZp bGUgaW4gYmluYXJ5IG1vZGUKLSAgIHRvIHRoZSBLZXJtaXQgaW5jb21pbmcgZGlyZWN0b3J5IChh cyB3ZSBtaWdodCBhc2sgeW91IHRvIGRvIHdoZW4KLSAgIGZvbGxvd2luZyB1cCBvbiBhIHByb2Js ZW0gcmVwb3J0KToKLQotICBmdHAgLUEga2VybWl0LmNvbHVtYmlhLmVkdSAtRCBrZXJtaXQvaW5j b21pbmcgLWJwIGRlYnVnLmxvZwotCi0gICBJbiB0aGlzIGNhc2UgdGhlIC1EIG9wdGlvbiBpcyBy ZXF1aXJlZCB0byB0ZWxsIHRoZSBzZXJ2ZXIgd2hlcmUgdG8gcHV0Ci0gICB0aGUgaW5jb21pbmcg ZmlsZS4KLQotICAgVW5sZXNzIHRoZSAtWSBvcHRpb24gaXMgaW5jbHVkZWQsIHlvdXIgS2VybWl0 IGluaXRpYWxpemF0aW9uIGZpbGUKLSAgICgubXlrZXJtcmMgaW4gVU5JWCwgSzk1LklOSSBpbiBX aW5kb3dzKSBpcyBleGVjdXRlZCBiZWZvcmUgdGhlIGNvbW1hbmQKLSAgIGxpbmUgb3B0aW9ucywg c28geW91IGNhbiBzZXQgYW55IEZUUC1yZWxhdGVkIHByZWZlcmVuY2VzIHRoZXJlLCBhcwotICAg ZGVzY3JpYmVkIGluIHRoZSBzdWJzZXF1ZW50IHNlY3Rpb25zLgotCi0zLjEuMy4gVGhlIEZUUCBV UkwgSW50ZXJwcmV0ZXIKLQotICAgSWYgS2VybWl0IGlzIGludm9rZWQgd2l0aCBlaXRoZXIgaXRz IHJlZ3VsYXIgcGVyc29uYWxpdHkgKGFzICJrZXJtaXQiKQotICAgICAgICAgIG9yIGl0cyBGVFAg cGVyc29uYWxpdHkgKGFzICJmdHAiKSwgeW91IGNhbiBhbHNvIGdpdmUgYSBVUkwKLSAgICAgICAg ICAoVW5pdmVyc2FsIFJlc291cmNlIExvY2F0b3IpIGluc3RlYWQgb2YgYSBob3N0bmFtZSBhbmQg b3B0aW9ucywKLSAgICAgICAgICB3aXRoIG9yIHdpdGhvdXQgYSB1c2VybmFtZSBhbmQgcGFzc3dv cmQ6Ci0gICAgICAgICAgZnRwIGZ0cDovL3VzZXI6cGFzc3dvcmRAaG9zdC9wYXRoCi0gICAgICAg ICAgZnRwIGZ0cDovL3VzZXJAaG9zdC9wYXRoCi0gICAgICAgICAgZnRwIGZ0cDovL0Bob3N0L3Bh dGggICAob3IgZnRwOi8vOkBob3N0L3BhdGgpCi0gICAgICAgICAgZnRwIGZ0cDovL2hvc3QvcGF0 aAotICAgICAgICAgIGtlcm1pdCBmdHA6Ly9ob3N0L3BhdGgKLQotICAgSWYgdGhlIEZUUCBwZXJz b25hbGl0eSBpcyB1c2VkLCB0aGUgc2VydmljZSBtdXN0IGJlICJmdHAiLiBJbiBhbGwKLSAgIGNh c2VzLCBhIGhvc3RuYW1lIG9yIGFkZHJlc3MgbXVzdCBiZSBpbmNsdWRlZC4gSWYgYSB1c2VyIGlz IGluY2x1ZGVkCi0gICBidXQgbm8gcGFzc3dvcmQsIHlvdSBhcmUgcHJvbXB0ZWQgZm9yIHRoZSBw YXNzd29yZC4gSWYgYSBwYXRoCi0gICAoZmlsZW5hbWUpIGlzIGluY2x1ZGVkOgotICAgICAqIElm ICJAIiBpcyBpbmNsdWRlZCB3aXRob3V0IGEgdXNlciwgS2VybWl0IHByb21wdHMgZm9yIHRoZSB1 c2VybmFtZQotICAgICAgIGFuZCBwYXNzd29yZC4KLSAgICAgKiBJZiBubyB1c2VyIGFuZCBubyAi QCIgYXJlIGluY2x1ZGVkLCAiYW5vbnltb3VzIiBpcyB1c2VkLgotICAgICAqIEdFVCBpcyBhc3N1 bWVkLgotCi0gICBJZiBubyBwYXRoIChhbmQgbm8gYWN0aW9uIG9wdGlvbnMpIGFyZSBpbmNsdWRl ZCwgYW4gaW50ZXJhY3RpdmUgRlRQCi0gICAgICAgICAgc2Vzc2lvbiBpcyBzdGFydGVkLCBhcyBp biB0aGlzIGV4YW1wbGU6Ci0gICAgICAgICAgZnRwIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUK LQotICAgSWYgYSBwYXRoIGlzIGluY2x1ZGVkLCBidXQgYSB1c2VybmFtZSBpcyBub3QgaW5jbHVk ZWQsICJhbm9ueW1vdXMiIGlzCi0gICB1c2VkIGFuZCBhbiBhcHByb3ByaWF0ZSB1c2VyQGhvc3Qg cGFzc3dvcmQgaXMgc3VwcGxpZWQgYXV0b21hdGljYWxseS4KLSAgIElmIGF1dGhlbnRpY2F0aW9u IGlzIHN1Y2Nlc3NmdWwsIEtlcm1pdCBhdHRlbXB0cyB0byBHRVQgdGhlIGZpbGUKLSAgIGluZGlj YXRlZCBieSB0aGUgcGF0aCBvciwgaWYgdGhlIHBhdGggaXMgdGhlIG5hbWUgb2YgYSBkaXJlY3Rv cnksIGl0Ci0gICBhc2tzIHRoZSBzZXJ2ZXIgZm9yIGEgZGlyZWN0b3J5IGxpc3RpbmcuIEluIGJv dGggY2FzZXMsIEtlcm1pdAotICAgZGlzY29ubmVjdHMgZnJvbSB0aGUgc2VydmVyIGFuZCBleGl0 cyBhZnRlciB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlCi0gICAodW5sZXNzIHlvdSBoYXZlIGlu Y2x1ZGVkIHRoZSAtUyBvcHRpb24gb24gdGhlIGNvbW1hbmQgbGluZSkuCi0KLSAgIEhlcmUncyBh biBleGFtcGxlIHRoYXQgZ2V0cyBhIGxpc3Rpbmcgb2YgdGhlIEtlcm1pdCBkaXJlY3RvcnkgYXQg dGhlCi0gICAgICAgICAgS2VybWl0IGZ0cCBzaXRlOgotICAgICAgICAgIGZ0cCBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC8KLQotICAgVGhpcyBleGFtcGxlIGdldHMgdGhlIHRvcC1s ZXZlbCBSRUFELk1FIGZpbGUgZnJvbSB0aGUgc2FtZSBkaXJlY3Rvcnk6Ci0gICAgICAgICAgZnRw IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L1JFQUQuTUUKLQotICAgSGVyZSdzIHRo ZSBzYW1lIGV4YW1wbGUsIGJ1dCByZXF1ZXN0aW5nIGEgdGV4dC1tb2RlIHRyYW5zZmVyOgotICAg ICAgICAgIGZ0cCAtVCBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9SRUFELk1FCi0g ICAgICAgICAgVGhpcyBpbGx1c3RyYXRlcyB0aGF0IHlvdSBjYW4gbWl4IGNvbW1hbmQtbGluZSBv cHRpb25zIGFuZCBVUkxzCi0gICAgICAgICAgaWYgeW91IGRlc2lyZS4KLQotICAgSGVyZSdzIGFu IGV4YW1wbGUgdGhhdCBsb2dzIGluIGFzIGEgKGZpY3RpdGlvdXMpIHJlYWwgdXNlciB0byBnZXQg YQotICAgICAgICAgIGZpbGU6Ci0gICAgICAgICAgZnRwIGZ0cDovL29sZ2FAZnRwLnh5emNvcnAu Y29tL3Jlc3VtZS50eHQKLSAgICAgICAgICBUaGUgcGFzc3dvcmQgaXMgbm90IGluY2x1ZGVkLCBz byBLZXJtaXQgcHJvbXB0cyBmb3IgaXQuCi0KLSAgIFRoaXMgc2NoZW1lIGFsbG93cyBLZXJtaXQg dG8gYmUgdXNlZCBhcyB0aGUgRlRQIGhlbHBlciBvZiBvdGhlcgotICAgYXBwbGljYXRpb25zLCBz dWNoIGFzIFdlYiBicm93c2Vycywgd2l0aCBhbGwgaXRzIGFkdmFudGFnZXMgb3ZlciBvdGhlcgot ICAgRlRQIGNsaWVudHMgKGVzcGVjaWFsbHkgdGhlIG9uZXMgdGhhdCBhcmUgYnVpbHQgaW4gdG8g bW9zdCBXZWIKLSAgIGJyb3dzZXJzKSwgZS5nLiB0aGF0IGl0IGNhbiBiZSBnaXZlbiB3aWxkY2Fy ZHMsIGFuZCBpdCBjYW4gcGljayB0ZXh0Ci0gICBhbmQgYmluYXJ5IG1vZGUgYXV0b21hdGljYWxs eSBmb3IgZWFjaCBmaWxlLgotCi0gICBISU5UOiBzdXBwb3NlIHNvbWVib2R5IHNlbmRzIHlvdSBh biBGVFAgVVJMIGluIGVtYWlsLCBvciB5b3Ugc2VlIGl0IGluCi0gICBzb21lIHRleHQuIElmIHlv dXIgdGVybWluYWwgc2NyZWVuIHN1cHBvcnRzIGNvcHkvcGFzdGUsIGNvcHkgdGhlIHVybCwKLSAg IGFuZCB0aGVuIGF0IHRoZSBzaGVsbCBwcm9tcHQgdHlwZSAia2VybWl0IiwgYSBzcGFjZSwgYW5k IHRoZW4gcGFzdGUgdGhlCi0gICBVUkwsIGUuZy46Ci0KLSAgJCBrZXJtaXQgZnRwOi8vYWxwaGEu Z3JlZW5pZS5uZXQvcHViL21nZXR0eS9zb3VyY2UvMS4xL21nZXR0eTEuMS4yNy1PCi0KLSAgICIk IGlzIHRoZSBzaGVsbCBwcm9tcHQ7IHRoZSBwYXJ0IHlvdSB0eXBlIGlzIHVuZGVybGluZWQsIHRo ZSByZXN0IGlzCi0gICBwYXN0ZWQgaW4uIEtlcm1pdCBkb2VzIHRoZSByZXN0LgotCi0zLjEuNC4g SW50ZXJhY3RpdmUgRlRQIFNlc3Npb24gRXN0YWJsaXNobWVudAotCi0gICBBcyB5b3UgcmVhZCB0 aGlzIGFuZCB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLCBiZWFyIGluIG1pbmQgdGhhdCBhbnkKLSAg IGNvbW1hbmQgdGhhdCBjYW4gYmUgZ2l2ZW4gYXQgdGhlIHByb21wdCBjYW4gYWxzbyBiZSB1c2Vk IGluIGEgc2NyaXB0Ci0gICBwcm9ncmFtLiBLZXJtaXQncyBzY3JpcHQgcHJvZ3JhbW1pbmcgbGFu Z3VhZ2UgaXMgdGhlIHNhbWUgYXMgaXRzCi0gICBpbnRlcmFjdGl2ZSBjb21tYW5kIGxhbmd1YWdl LiBbMjM0XUNMSUNLIEhFUkUgaWYgeW91IHdvdWxkIGxpa2UgdG8KLSAgIGxlYXJuIGEgYml0IG1v cmUgYWJvdXQgc2NyaXB0IHdyaXRpbmcuCi0KLSAgIEFuIEZUUCBzZXNzaW9uIGlzIGVzdGFibGlz aGVkIHdpdGggdGhlIEZUUCBPUEVOIGNvbW1hbmQ6Ci0KLSAgIEZUUCBbIE9QRU4gXSBbIHsgL1NT TCwgL1RMUyB9IF0gaG9zdG5hbWUgWyBzd2l0Y2hlcyBdIFsgcG9ydCBdCi0gICAgICAgICAgT3Bl bnMgYW4gRlRQIGNvbm5lY3Rpb24gdG8gdGhlIGdpdmVuIGhvc3Qgb24gdGhlIGdpdmVuIHBvcnQg YW5kLAotICAgICAgICAgIGlmIEZUUCBBVVRPTE9HSU4gaXMgT04sIGFsc28gbG9ncyB5b3UgaW4g dG8gdGhlIHNlcnZlciwKLSAgICAgICAgICBwcm9tcHRpbmcgZm9yIHVzZXJuYW1lIGFuZCBwYXNz d29yZCBpZiBuZWNlc3NhcnkuIElmIG5vIHBvcnQgaXMKLSAgICAgICAgICBzcGVjaWZpZWQsIHRo ZSByZWd1bGFyIEZUUCBwcm90b2NvbCBwb3J0ICgyMSkgaXMgdXNlZC4gVGhlIE9QRU4KLSAgICAg ICAgICBrZXl3b3JkIGlzIG9wdGlvbmFsICh1bmxlc3MgdGhlIGhvc3RuYW1lIGNvbmZsaWN0cyB3 aXRoIG9uZSBvZgotICAgICAgICAgIHRoZSBGVFAgY29tbWFuZCBrZXl3b3Jkcywgd2hpY2ggeW91 IGNhbiBsaXN0IGJ5IHR5cGluZyAiZnRwID8iKS4KLQotICAgVGhlIGhvc3RuYW1lIGNhbiBiZSBh biBJUCBob3N0IG5hbWUsIG51bWVyaWMgSVAgYWRkcmVzcywgb3IgaWYgeW91IGhhdmUKLSAgIGEg bmV0d29yayBkaXJlY3RvcnkgYWN0aXZlIChTRVQgTkVUV09SSyBESVJFQ1RPUlk7IHNlZSBDaGFw dGVyIDYgb2YKLSAgIFsyMzVdVXNpbmcgQy1LZXJtaXQpLCBhbiBlbnRyeSBuYW1lIGluIHRoZSBk aXJlY3RvcnkuIEluIHRoZSBsYXR0ZXIKLSAgIGNhc2UsIGlmIHRoZSBnaXZlbiBob3N0bmFtZSBt YXRjaGVzIGV4YWN0bHkgb25lIGVudHJ5LCB0aGUgYXNzb2NpYXRlZAotICAgbmFtZSBvciBhZGRy ZXNzIGlzIHVzZWQ7IGlmIGl0IG1hdGNoZXMgbW9yZSB0aGFuIG9uZSwgS2VybWl0IGN5Y2xlcwot ICAgdGhyb3VnaCB0aGVtIHVudGlsIG9uZSBpcyBmb3VuZCB0aGF0IGNhbiBiZSBvcGVuZWQ7IGlm IGl0IG1hdGNoZXMgbm9uZSwKLSAgIHRoZW4gdGhlIGhvc3RuYW1lIGlzIHVzZWQgYXMtaXMuIElm IGEgZGlyZWN0b3J5IGlzIGFjdGl2ZSBidXQgeW91IHdhbnQKLSAgIHRvIGJ5cGFzcyBkaXJlY3Rv cnkgbG9va3VwLCBpbmNsdWRlIGFuICI9IiBzaWduIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCi0g ICBob3N0bmFtZSwgYW5kL29yIHVzZSBhIG51bWVyaWMgSVAgYWRkcmVzcy4KLQotICAgV2hlbiBh biBGVFAgY29ubmVjdGlvbiBpcyBvcGVuZWQsIHRoZSBkZWZhdWx0IGZpbGUtdHJhbnNmZXIgbW9k ZSBpcyBzZXQKLSAgIHRvIGJpbmFyeSBpZiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgcGxhdGZvcm1z IGFyZSBhbGlrZSAoZS5nLiBib3RoIG9mCi0gICB0aGVtIGFyZSBzb21lIGtpbmQgb2YgVU5JWCks IGFuZCB0byB0ZXh0ICgiYXNjaWkiKSBpZiB0aGV5IGFyZSBub3QKLSAgIGFsaWtlLiBUaGlzIGhh cyBubyBwYXJ0aWN1bGFyIGVmZmVjdCBmb3IgdXBsb2FkaW5nIHNpbmNlIEtlcm1pdAotICAgYXV0 b21hdGljYWxseSBzd2l0Y2hlcyBiZXR3ZWVuIHRleHQgYW5kIGJpbmFyeSBtb2RlIGZvciBlYWNo IGZpbGUsIGJ1dAotICAgbWlnaHQgYmUgaW1wb3J0YW50IGZvciBkb3dubG9hZGluZy4gVGhlIGNv bm5lY3Rpb24gaXMgYWxzbyBzZXQgdG8KLSAgIFN0cmVhbSBtb2RlIGFuZCBGaWxlIHN0cnVjdHVy ZS4gUmVjb3JkLSBvciBwYWdlLW9yaWVudGVkIGZpbGUgdHJhbnNmZXJzCi0gICBhcmUgbm90IHN1 cHBvcnRlZCBieSBDLUtlcm1pdCdzIEZUUCBjbGllbnQuCi0KLSAgIFRoZSBvcHRpb25hbCBGVFAg T1BFTiBzd2l0Y2hlcyBhcmU6Ci0KLSAgIC9BTk9OWU1PVVMKLSAgICAgICAgICBMb2dzIHlvdSBp biBhbm9ueW1vdXNseSwgYXV0b21hdGljYWxseSBzdXBwbHlpbmcgdXNlcm5hbWUKLSAgICAgICAg ICAiYW5vbnltb3VzIiBhbmQgdXNlckBob3N0IGFzIHRoZSBwYXNzd29yZCwgYmFzZWQgb24geW91 ciBsb2NhbAotICAgICAgICAgIHVzZXIgYW5kIGhvc3QgbmFtZXMuCi0KLSAgIC9OT0xPR0lOCi0K LSAgICAgICAgICBPdmVycmlkZXMgU0VUIEZUUCBBVVRPTE9HSU4gT04gZm9yIHRoaXMgY29ubmVj dGlvbiBvbmx5LgotCi0gICAvVVNFUjpuYW1lCi0gICAgICAgICAgVXNlcyB0aGUgZ2l2ZW4gdXNl cm5hbWUgdG8gbG9nIHlvdSBpbiwgdGh1cyBhdm9pZGluZyB0aGUgTmFtZToKLSAgICAgICAgICBw cm9tcHQuCi0gICAgICAgICAgT3ZlcnJpZGVzIFNFVCBGVFAgQVVUT0xPR0lOIE9GRiBmb3IgdGhp cyBjb25uZWN0aW9uIG9ubHkuCi0KLSAgIC9QQVNTV09SRDp0ZXh0Ci0gICAgICAgICAgVXNlcyB0 aGUgZ2l2ZW4gdGV4dCBhcyB5b3VyIHBhc3N3b3JkLCB0aHVzIGF2b2lkaW5nIHRoZQotICAgICAg ICAgIFBhc3N3b3JkOiBwcm9tcHQuIFRoaXMgc3dpdGNoIGlzIG5vdCByZWNvbW1lbmRlZCBmb3Ig dXNlIGluCi0gICAgICAgICAgc2NyaXB0IGZpbGVzLCB3aGljaCB3b3VsZCBiZSBhIHNlY3VyaXR5 IHJpc2suCi0KLSAgIC9BQ0NPVU5UOnRleHQKLSAgICAgICAgICBVc2VzIHRoZSBnaXZlbiB0ZXh0 IGFzIHlvdXIgYWNjb3VudCAob3Igc2Vjb25kYXJ5IHBhc3N3b3JkLAotICAgICAgICAgIGRlcGVu ZGluZyBvbiB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBzZXJ2ZXI7IG1vc3Qgc2VydmVycyBkbyBu b3QKLSAgICAgICAgICByZXF1aXJlIG9yIGFjY2VwdCBhbiBhY2NvdW50IG5hbWUpLiBJZiBhbiBh Y2NvdW50IGlzIG5vdAotICAgICAgICAgIHN1cHBsaWVkLCB5b3UgYXJlIG5vdCBwcm9tcHRlZCBm b3Igb25lLgotCi0gICAvUEFTU0lWRQotICAgICAgICAgIE9wZW5zIHRoZSBjb25uZWN0aW9uIGlu IHBhc3NpdmUgbW9kZS4gUGFzc2l2ZSBtb2RlIGlzIHRoZQotICAgICAgICAgIGRlZmF1bHQgaW4g S2VybWl0J3MgRlRQIGNsaWVudCwgdW5saWtlIGluIG1vc3Qgb3RoZXJzLCBzaW5jZSBpdAotICAg ICAgICAgIHdvcmtzIGJldHRlciB0aHJvdWdoIGZpcmV3YWxscy4gVGhlIC9QQVNTSVZFIGFuZCAv QUNUSVZFCi0gICAgICAgICAgc3dpdGNoZXMgYXBwbHkgb25seSB0byB0aGUgY29ubmVjdGlvbiB0 aGF0IGlzIGJlaW5nIG9wZW5lZCwgYW5kCi0gICAgICAgICAgZG8gbm90IGFmZmVjdCB0aGUgZ2xv YmFsIEZUUCBQQVNTSVZFLU1PREUgc2V0dGluZy4KLQotICAgL0FDVElWRQotICAgICAgICAgIE9w ZW5zIHRoZSBjb25uZWN0aW9uIGluIGFjdGl2ZSBtb2RlLiBVc2UgdGhpcyBzd2l0Y2ggaWYgdGhl Ci0gICAgICAgICAgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgcGFzc2l2ZSBtb2RlLCBvciB1c2Ug dGhlIGNvbW1hbmQgU0VUIEZUUAotICAgICAgICAgIFBBU1NJVkUtTU9ERSBPRkYuCi0KLSAgIC9O T0lOSVQKLSAgICAgICAgICBBZGRlZCBpbiBDLUtlcm1pdCA4LjAuMjAxLiAgIFRlbGxzIEMtS2Vy bWl0IG5vdCB0byBzZW5kIFJFU1QsCi0gICAgICAgICAgU1RSVSwgRkVBVCwgYW5kIE1PREUgY29t bWFuZHMgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBjb25uZWN0aW9uCi0gICAgICAgICAgaXMgb3Bl bmVkLCBzaW5jZSB0aGVzZSBoYXZlIGJlZW4gcmVwb3J0ZWQgdG8gY2F1c2UgY29uZnVzaW9uIGlu Ci0gICAgICAgICAgY2VydGFpbiBzZXJ2ZXJzLgotCi0gICBXaGVuIGEgdXNlcm5hbWUgb3IgcGFz c3dvcmQgaXMgbWlzc2luZywgYSBwcm9tcHQgaXMgaXNzdWVkIGF0IHRoZQotICAgY29udHJvbGxp bmcgdGVybWluYWwgYW5kIHlvdSBtdXN0IHR5cGUgdGhlIHJlc3BvbnNlOyB0aGUgcmVzcG9uc2Ug Y2FuCi0gICBub3QgYmUgc2NyaXB0ZWQuIFVzZSB0aGUgc3dpdGNoZXMgdG8gYXZvaWQgcHJvbXB0 cywgb3Igb25lIG9mIHRoZQotICAgc2VjdXJlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgZGVzY3Jp YmVkIGluIHRoZSBuZXh0IHNlY3Rpb24sIG9yIHNlZQotICAgWzIzNl1TRVQgRlRQIEFVVE9MT0dJ TiBhbmQgdGhlIFsyMzddRlRQIFVTRVIgYW5kIHNpbWlsYXIgY29tbWFuZHMKLSAgIGRlc2NyaWJl ZCBsYXRlciBpbiB0aGlzIHNlY3Rpb24uCi0KLSAgIEV4YW1wbGVzOgotCi0gIGZ0cCBvcGVuIGtl cm1pdC5jb2x1bWJpYS5lZHUgL2Fub255bW91cyAgOyBPcGVuIGFuZCBsb2cgaW4gYW5vbnltb3Vz bHkKLSAgZnRwIGtlcm1pdC5jb2x1bWJpYS5lZHUgL2Fub255bW91cyAgICAgICA7IFRoZSBPUEVO IGtleXdvcmQgY2FuIGJlIG9taXR0ZWQKLSAgZnRwIHh5emNvcnAuY29tICAgICAgICAgICAgICAg ICAgICAgICAgICA7IE9wZW4gYW5kIG1heWJlIHByb21wdCBmb3IgdXNlcm5hbWUKLSAgZnRwIHh5 emNvcnAuY29tIC91c2VyOm9sZ2EgICAgICAgICAgICAgICA7IE9wZW4gYW5kIGxvZyBpbiBhcyBv bGdhCi0gIGZ0cCB0ZXN0aW5nLmFiY2NvcnAuY29tIDQ0OSAgICAgICAgICAgICAgOyBTcGVjaWZ5 IGEgc3BlY2lhbCBUQ1AgcG9ydCBudW1iZXIKLSAgZnRwIHRlc3RpbmcuYWJjY29ycC5jb20gL3Vz ZXI6b2xhZiAvcGFzc3dvcmQ6c2VjcmV0IDQ0OQotCi0gICBUaGUgRlRQIE9QRU4gY29tbWFuZCBz dWNjZWVkcyBpZiBhIGNvbm5lY3Rpb24gd2FzIG9wZW5lZCB0byB0aGUgc2VydmVyCi0gICAoZXZl biBpZiB0aGUgZ2l2ZW4gdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHdlcmUgbm90IHZhbGlkKSBhbmQg ZmFpbHMKLSAgIG90aGVyd2lzZSAoc2VlIFsyMzhdU2VjdGlvbiAzLjggZm9yIGRldGFpbHMpLgot Ci0gICBXaGVuIHlvdXIgRlRQIHNlc3Npb24gaXMgY29tcGxldGUsIHlvdSBjYW4gdGVybWluYXRl IGl0IGFzIGZvbGxvd3M6Ci0KLSAgIEZUUCBCWUUKLSAgICAgICAgICBDbG9zZXMgdGhlIEZUUCBj b25uZWN0aW9uIGlmIG9uZSB3YXMgb3Blbi4gVGhlIEZUUCBwcmVmaXggY2FuIGJlCi0gICAgICAg ICAgb21pdHRlZCBpZiBubyBvdGhlciBjb25uZWN0aW9uIGlzIG9wZW4gYXQgdGhlIHNhbWUgdGlt ZSAoc2VlCi0gICAgICAgICAgWzIzOV1TZWN0aW9uIDMuOCBmb3IgZGV0YWlscykuIElmIGEgY29u bmVjdGlvbiBsb2cgaXMgYWN0aXZlLCBhbgotICAgICAgICAgIEZUUCByZWNvcmQgaXMgd3JpdHRl biB0byBpdC4gSWYgS2VybWl0IHdhcyBzdGFydGVkIHdpdGggdGhlIC05Ci0gICAgICAgICAgY29t bWFuZC1saW5lIG9wdGlvbiBvciB3aXRoIGl0cyBGVFAgY29tbWFuZC1saW5lIHBlcnNvbmFsaXR5 LAotICAgICAgICAgIGFuZCB0aGUgLVMgKFN0YXkpIG9wdGlvbiB3YXMgbm90IGdpdmVuLCBBTkQg dGhlcmUgaXMgbm8gb3RoZXIKLSAgICAgICAgICBhY3RpdmUgY29ubmVjdGlvbiwgdGhlIEZUUCBC WUUgY29tbWFuZCBhbHNvIGV4aXRzLCBqdXN0IGFzIGl0Ci0gICAgICAgICAgZG9lcyBvbiBhIHJl Z3VsYXIgRlRQIGNsaWVudC4gU3lub255bXM6IEZUUCBDTE9TRSwgRlRQIFFVSVQgKGJ1dAotICAg ICAgICAgIGlmIHRoZSBGVFAgcHJlZml4IGlzIG9taXR0ZWQgZnJvbSBRVUlULCB0aGlzIGJlY29t ZXMgdGhlIHJlZ3VsYXIKLSAgICAgICAgICBLZXJtaXQgUVVJVCBjb21tYW5kLCB3aGljaCBpcyBl cXVpdmFsZW50IHRvIEVYSVQ7IGkuZS4gaXQgY2xvc2VzCi0gICAgICAgICAgdGhlIGNvbm5lY3Rp b24gYW5kIGV4aXRzIGZyb20gS2VybWl0KS4KLQotICAgVGhlIGZvbGxvd2luZyBjb21tYW5kcyBj YW4gYmUgdXNlZCB0byBhY2hpZXZlIGdyZWF0ZXIgY29udHJvbCBvdmVyIHRoZQotICAgY29ubmVj dGlvbiBhbmQgbG9naW4gcHJvY2VzczoKLQotICAgU0VUIEZUUCBBTk9OWU1PVVMtUEFTU1dPUkQg dGV4dAotICAgICAgICAgIEFsbG93cyB5b3UgdG8gY2hvb3NlIHRoZSBwYXNzd29yZCB0ZXh0IHRv IGJlIHNlbnQgYXV0b21hdGljYWxseQotICAgICAgICAgIGJ5IEtlcm1pdCB3aGVuIHlvdSBvcGVu IGFuIEZUUCBjb25uZWN0aW9uIHdpdGggdGhlIC9BTk9OWU1PVVMKLSAgICAgICAgICBzd2l0Y2gu Ci0KLSAgIFNFVCBGVFAgQVVUT0xPR0lOIHsgT04sIE9GRiB9Ci0gICAgICAgICAgSWYgeW91IGdp dmUgdGhpcyBjb21tYW5kIHByaW9yIHRvIG9wZW5pbmcgYW4gRlRQIGNvbm5lY3Rpb24sIGl0Ci0g ICAgICAgICAgY29udHJvbHMgd2hldGhlciBLZXJtaXQgdHJpZXMgdG8gbG9nIHlvdSBpbiBhdXRv bWF0aWNhbGx5IGFzCi0gICAgICAgICAgcGFydCBvZiB0aGUgY29ubmVjdGlvbiBwcm9jZXNzLiBO b3JtYWxseSBPTiwgd2hpY2ggbWVhbnMgdGhlCi0gICAgICAgICAgdXNlcm5hbWUgYW5kIHBhc3N3 b3JkIGFyZSBzZW50IGF1dG9tYXRpY2FsbHkgKGFuZCBwcm9tcHRlZCBmb3IKLSAgICAgICAgICBp ZiB0aGV5IGFyZSBub3QgeWV0IGtub3duKS4gV2hlbiBPRkYsIEZUUCBPUEVOIGNvbm5lY3RzIHRv IHRoZQotICAgICAgICAgIHNlcnZlciB3aXRob3V0IGxvZ2dpbmcgaW4uIE9GRiBpcyBlcXVpdmFs ZW50IHRvIHRoZSAtbgotICAgICAgICAgIGNvbW1hbmQtbGluZSBvcHRpb24gd2hlbiB1c2luZyBL ZXJtaXQncyBGVFAgY29tbWFuZC1saW5lCi0gICAgICAgICAgcGVyc29uYWxpdHkuCi0KLSAgIEZU UCBVU0VSIG5hbWUgWyBwYXNzd29yZCBbIGFjY291bnQgXSBdCi0gICAgICAgICAgVXNlZCB0byBs b2cgaW4gdG8gYW4gRlRQIHNlcnZlciB0byB3aGljaCBhIGNvbm5lY3Rpb24gaGFzIGJlZW4KLSAg ICAgICAgICBtYWRlIHdpdGhvdXQgYXV0b2xvZ2luLCBvciB3aGVuIGF1dG9sb2dpbiBmYWlsZWQu IElmIHRoZQotICAgICAgICAgIHBhc3N3b3JkIGlzIGZ1cm5pc2hlZCBvbiB0aGUgY29tbWFuZCBs aW5lLCBpdCBpcyB1c2VkOyBvdGhlcndpc2UKLSAgICAgICAgICB5b3UgYXJlIHByb21wdGVkIGZv ciBhIHBhc3N3b3JkLiBBbiBhY2NvdW50IG1heSBhbHNvIGJlCi0gICAgICAgICAgZnVybmlzaGVk IGlmIHJlcXVpcmVkIGJ5IHRoZSBzZXJ2ZXI7IGl0IGlzIG5vdCByZXF1aXJlZCBieQotICAgICAg ICAgIEtlcm1pdCBhbmQgaXMgbm90IHByb21wdGVkIGZvciBpZiBvbWl0dGVkLiBTeW5vbnltczog VVNFUiwgRlRQCi0gICAgICAgICAgTE9HSU4uCi0KLSAgIEZUUCBBQ0NPVU5UIHRleHQKLSAgICAg ICAgICBTZW5kcyBhbiBhY2NvdW50IG5hbWUgdG8gYSBzZXJ2ZXIgdGhhdCBzdXBwb3J0cyBhY2Nv dW50cy4gSWYgdGhlCi0gICAgICAgICAgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgYWNjb3VudHMs IGFuIGVycm9yIHJlc3BvbnNlIG9jY3Vycy4gSWYKLSAgICAgICAgICB0aGUgc2VydmVyIGRvZXMg c3VwcG9ydCBhY2NvdW50cywgdGhlIGFjY291bnQgaXMgYWNjZXB0ZWQgaWYgaXQKLSAgICAgICAg ICBpcyB2YWxpZCBhbmQgcmVqZWN0ZWQgaWYgaXQgaXMgbm90LiBUaGUgYWNjb3VudCBtaWdodCBi ZSB1c2VkCi0gICAgICAgICAgZm9yIGNoYXJnaW5nIHB1cnBvc2VzIG9yIGl0IG1pZ2h0IGJlIGEg c2Vjb25kYXJ5IHBhc3N3b3JkLCBvciBpdAotICAgICAgICAgIG1pZ2h0IGJlIHVzZWQgZm9yIGFu eSBvdGhlciBwdXJwb3NlLCBzdWNoIGFzIGFuIGFjY2VzcyBwYXNzd29yZAotICAgICAgICAgIGZv ciBhIHBhcnRpY3VsYXIgZGlzay4gU2VydmVycyB0aGF0IHN1cHBvcnQgYWNjb3VudHMgbWlnaHQg b3IKLSAgICAgICAgICBtaWdodCBub3QgYWxsb3cgb3IgcmVxdWlyZSB0aGUgYWNjb3VudCB0byBi ZSBzZW50IHByaW9yIHRvCi0gICAgICAgICAgbG9naW47IHVzdWFsbHkgaXQgaXMgc2VudCBhZnRl ciBsb2dpbiwgaWYgYXQgYWxsLiBTeW5vbnltOgotICAgICAgICAgIEFDQ09VTlQuCi0KLSAgIEV4 YW1wbGU6Ci0KLXNldCBmdHAgYXV0b2xvZ2luIG9mZiAgICAgICAgICAgICAgICAgIDsgT25lIHRo aW5nIGF0IGEgdGltZSBwbGVhc2UKLWZ0cCB4eXpjb3JwLmNvbSAgICAgICAgICAgICAgICAgICAg ICAgIDsgVHJ5IHRvIG1ha2UgdGhlIGNvbm5lY3Rpb24KLWlmIGZhaWwgZXhpdCAxIEZUUCBjb25u ZWN0aW9uIGZhaWxlZCAgIDsgQ2hlY2sgdGhhdCBpdCB3YXMgbWFkZQotZnRwIHVzZXIgb2xnYSBz ZWNyZXQgICAgICAgICAgICAgICAgICAgOyBOb3cgbG9nIGluIHRvIHRoZSBzZXJ2ZXIKLWlmIGZh aWwgZXhpdCAxIEZUUCBsb2dpbiBmYWlsZWQgICAgICAgIDsgQ2hlY2sgdGhhdCBpdCB3b3JrZWQK LWZ0cCBhY2NvdW50IDEwMzg5Njg1NCAgICAgICAgICAgICAgICAgIDsgTG9naW4gT0sgLSBzZW5k IGFjY291bnQKLWlmIGZhaWwgZWNobyBXQVJOSU5HIC0gRlRQIEFDQ1QgZmFpbGVkIDsgV2FybiBp ZiBwcm9ibGVtCi0uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IChoYXZl IHNlc3Npb24gaGVyZSkKLWJ5ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsg TG9nIG91dCBhbmQgZGlzY29ubmVjdAotCi0gICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSB1 c2VkIHRvIGNvbnRyb2wgb3IgZ2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZQotICAgRlRQIGNvbm5l Y3Rpb24uIEFueSBwYXJ0aWN1bGFyIEZUUCBzZXJ2ZXIgZG9lcyBub3QgbmVjZXNzYXJpbHkgc3Vw cG9ydAotICAgYWxsIG9mIHRoZW0uCi0KLSAgIEZUUCBSRVNFVAotICAgICAgICAgIFRlcm1pbmF0 ZXMgYSB1c2VyIHNlc3Npb24gYnV0IGxlYXZlcyB0aGUgY29ubmVjdGlvbiBvcGVuLAotICAgICAg ICAgIGFsbG93aW5nIGEgbmV3IGxvZ2luIHZpYSBGVFAgVVNFUi4KLQotICAgRlRQIElETEUgWyBu dW1iZXIgXQotICAgICAgICAgIE1vc3QgRlRQIHNlcnZlcnMgYXV0b21hdGljYWxseSBsb2cgeW91 IG91dCBhbmQgYW5kIGRpc2Nvbm5lY3QKLSAgICAgICAgICB5b3VyIHNlc3Npb24gaWYgdGhlcmUg aGFzIGJlZW4gbm8gYWN0aXZpdHkgZm9yIGEgY2VydGFpbiBhbW91bnQKLSAgICAgICAgICBvZiB0 aW1lLiBVc2UgdGhpcyBjb21tYW5kIHRvIGFzayB0aGUgc2VydmVyIHRvIHNldCBpdHMgaWRsZQot ICAgICAgICAgIGxpbWl0IHRvIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcy4gT21pdCB0aGUg bnVtYmVyIHRvIGFzayB0aGUKLSAgICAgICAgICBzZXJ2ZXIgdG8gaW5mb3JtIHlvdSBvZiBpdHMg Y3VycmVudCBpZGxlIGxpbWl0LgotCi0gICBGVFAgU1RBVFVTIFsgZmlsZW5hbWUgXQotICAgICAg ICAgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gc2VuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3Vy cmVudAotICAgICAgICAgIHNlc3Npb24uIFRoZSByZXN1bHQgaXMgYSBmcmVlLWZvcm1hdCByZXBv cnQgdGhhdCBtaWdodCBpbmNsdWRlCi0gICAgICAgICAgc2VydmVyIGlkZW50aWZpY2F0aW9uLCB1 c2VybmFtZSBhbmQgbG9naW4gdGltZSwgRlRQIHByb3RvY29sCi0gICAgICAgICAgc2V0dGluZ3Ms IGFuZCBmaWxlLXRyYW5zZmVyIHN0YXRpc3RpY3MuIElmIGEgZmlsZW5hbWUgaXMgZ2l2ZW4sCi0g ICAgICAgICAgdGhlIHNlcnZlciBpcyBzdXBwb3NlZCB0byBzZW5kIGRldGFpbGVkIGluZm9ybWF0 aW9uIGFib3V0IHRoZQotICAgICAgICAgIGZpbGUuCi0KLSAgIEZUUCBTWVNURU0KLSAgICAgICAg ICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIGlkZW50aWZ5IGl0cyBvcGVyYXRpbmcgc3lzdGVtIChM aXN0ZWQgaW4KLSAgICAgICAgICBJbnRlcm5ldCBBc3NpZ25lZCBOdW1iZXJzLCBPcGVyYXRpbmcg U3lzdGVtIE5hbWVzKS4gRXhhbXBsZXM6Ci0gICAgICAgICAgVU5JWCwgVk1TLCBWTS9DTVMsIFdJ TkRPV1MtTlQuIFVuZm9ydHVuYXRlbHkgbWFueSB2YXJpYXRpb25zIGFyZQotICAgICAgICAgIGFs bG93ZWQgKGUuZy4gTElOVVgtMi4wLCBMSU5VWC0yLjIsIEZSRUVCU0QsIFVMVFJJWCwgZXRjLAot ICAgICAgICAgIGluc3RlYWQgb2YgVU5JWDsgV0lORE9XUy1OVC0zLCBXSU5ET1dTLU5ULTMuNSwg V0lORE9XUy1OVC0zLjUxLAotICAgICAgICAgIFdJTkRPV1MtTlQtNCwgZXRjKS4gVGhlIHJlcG9y dCBtaWdodCBhbHNvIGluY2x1ZGUgb3RoZXIKLSAgICAgICAgICBpbmZvcm1hdGlvbiBsaWtlICJU eXBlIEw4IiwgIlR5cGUgSSIsIG9yICJUeXBlIEEiLCBpbmRpY2F0aW5nCi0gICAgICAgICAgdGhl IGZpbGUtdHJhbnNmZXIgbW9kZS4KLQotICAgRlRQIEhFTFAgWyBrZXl3b3JkIFsga2V5d29yZCBb IC4uLiBdIF0KLSAgICAgICAgICBBc2tzIHRoZSBzZXJ2ZXIgdG8gbGlzdCB0aGUgY29tbWFuZHMg aXQgc3VwcG9ydHMuIFRoZSByZXNwb25zZQotICAgICAgICAgIGlzIHVzdWFsbHkgY3J5cHRpYywg bGlzdGluZyBGVFAgY29tbWFuZCBtbmVtb25pY3MsIG5vdCB0aGUKLSAgICAgICAgICBjb21tYW5k cyB1c2VkIGJ5IHRoZSBjbGllbnQgKHNpbmNlIHRoZSBzZXJ2ZXIgaGFzIG5vIHdheSBvZgotICAg ICAgICAgIGtub3dpbmcgYW55dGhpbmcgYWJvdXQgdGhlIGNsaWVudCdzIHVzZXIgaW50ZXJmYWNl KS4gRm9yCi0gICAgICAgICAgZXhhbXBsZSwgdGhlIFBVVCBjb21tYW5kIGlzIFNUT1IgaW4gRlRQ IHByb3RvY29sLiBJZiBhIGtleXdvcmQKLSAgICAgICAgICBpcyBnaXZlbiwgd2hpY2ggc2hvdWxk IGJlIGFuIEZUUCBwcm90b2NvbCBjb21tYW5kLAotICAgICAgICAgIHNsaWdodGx5LW1vcmUtIGRl dGFpbGVkIGhlbHAgaXMgZ2l2ZW4gYWJvdXQgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICBj b21tYW5kIChpZiB0aGUgRlRQIHNlcnZlciBzdXBwb3J0cyB0aGlzIGZlYXR1cmUpLiBFeGFtcGxl czoKLSAgICAgICAgICAiZnRwIGhlbHAiLCAiZnRwIGhlbHAgc3RvciIuCi0KLSAgIEZUUCBTSVRF IHRleHQKLSAgICAgICAgICAoQWR2YW5jZWQpIFNlbmRzIGFuIEZUUCBTSVRFIChzaXRlLXNwZWNp ZmljKSBjb21tYW5kLiBVc3VhbGx5Ci0gICAgICAgICAgdGhpcyBtZWFucyB0aGF0IHRoZSBGVFAg c2VydmVyIGlzIGFza2VkIHRvIHJ1biBhbiBleHRlcm5hbAotICAgICAgICAgIGNvbW1hbmQgd2l0 aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiBZb3UgbWlnaHQgYmUgYWJsZSB0byBmaW5kIG91dAotICAg ICAgICAgIHdoYXQgU0lURSBjb21tYW5kcyBhcmUgYXZhaWxhYmxlIGJ5IHNlbmRpbmcgImZ0cCBo ZWxwIHNpdGUiIHRvCi0gICAgICAgICAgdGhlIHNlcnZlciwgYnV0IGluIGdlbmVyYWwgdGhlIGF2 YWlsYWJpbGl0eSBvZiBhbmQgcmVzcG9uc2UgdG8KLSAgICAgICAgICBTSVRFIGNvbW1hbmRzIGlz IChub3Qgc3VycHJpc2luZ2x5KSBzaXRlIHNwZWNpZmljLgotCi0gICBGVFAgUVVPVEUgdGV4dAot ICAgICAgICAgIChBZHZhbmNlZCkgU2VuZHMgYW4gRlRQIGNvbW1hbmQgaW4gRlRQIHByb3RvY29s IGZvcm1hdC4gVXNlIHRoaXMKLSAgICAgICAgICBjb21tYW5kIHRvIHNlbmQgY29tbWFuZHMgdG8g dGhlIHNlcnZlciB0aGF0IHRoZSBGVFAgY2xpZW50IG1pZ2h0Ci0gICAgICAgICAgbm90IGtub3cg YWJvdXQuCi0KLSAgIFNIT1cgRlRQCi0gICAgICAgICAgTGlzdHMgY2xpZW50IChLZXJtaXQpIEZU UCBzZXR0aW5ncyBhbmQgaW5mb3JtYXRpb24uIEFsc28gU0hPVwotICAgICAgICAgIENPTk5FQ1RJ T04sIFNIT1cgQ09NTVVOSUNBVElPTlMuCi0KLSAgIEhFTFAgRlRQIFsga2V5d29yZCBdCi0gICAg ICAgICAgQXNrcyBLZXJtaXQgdG8gbGlzdCBhbmQgZGVzY3JpYmUgaXRzIGJ1aWx0LWluIEZUUCBj b21tYW5kcy4KLQotICAgSEVMUCBTRVQgRlRQIFsga2V5d29yZCBdCi0gICAgICAgICAgQXNrcyBL ZXJtaXQgdG8gbGlzdCBhbmQgZGVzY3JpYmUgaXRzIGJ1aWx0LWluIFNFVCBGVFAgY29tbWFuZHMu Ci0KLSAgIFsgWzI0MF1Ub3AgXSBbIFsyNDFdRlRQIFRvcCBdIFsgWzI0Ml1DLUtlcm1pdCBIb21l IF0gWyBbMjQzXUtlcm1pdCBIb21lCi0gICBdCi0KLTMuMS41LiBNYWtpbmcgUHJveHkgQ29ubmVj dGlvbnMKLQotICAgVGhlIHNpbXBsaXN0IGZvcm0gb2YgZmlyZXdhbGwgdHJhdmVyc2FsIGlzIHRo ZSBIVFRQIENPTk5FQ1QgY29tbWFuZC4KLSAgIFRoZSBDT05ORUNUIGNvbW1hbmQgd2FzIGltcGxl bWVudGVkIHRvIGFsbG93IGEgcHVibGljIHdlYiBzZXJ2ZXIgd2hpY2gKLSAgIHVzdWFsbHkgcmVz aWRlcyBvbiB0aGUgYm91bmRhcnkgYmV0d2VlbiB0aGUgcHVibGljIGFuZCBwcml2YXRlIG5ldHdv cmtzCi0gICB0byBmb3J3YXJkIEhUVFAgcmVxdWVzdHMgZnJvbSBjbGllbnRzIG9uIHRoZSBwcml2 YXRlIG5ldHdvcmsgdG8gcHVibGljCi0gICB3ZWIgc2l0ZXMuIEluIG9yZGVyIHRvIGFsbG93IHNl Y3VyZSB3ZWIgY29ubmVjdGlvbnMgdG8gYmUgZXN0YWJsaXNoZWQsCi0gICB0aGUgQ09OTkVDVCBj b21tYW5kIHdvcmtzIGJ5IGF1dGhlbnRpY2F0aW5nIHRoZSBjbGllbnQgd2l0aCBhCi0gICB1c2Vy bmFtZS9wYXNzd29yZCBhbmQgdGhlbiBlc3RhYmxpc2hpbmcgYSB0dW5uZWwgdG8gdGhlIGRlc2ly ZWQgaG9zdC4KLQotICAgTWFueSB3ZWIgc2VydmVycyBzdXBwb3J0IHRoZSBDT05ORUNUIGNvbW1h bmQgYW5kIGl0IGNhbiBiZSBjb25maWd1cmVkCi0gICB0byBhbGxvdyBvdXRnb2luZyBjb25uZWN0 aW9ucyB0byBhdXRoZW50aWNhdGVkIHVzZXIgdG8gYW55IFRDUC9JUAotICAgaG9zdG5hbWUvcG9y dCBjb21iaW5hdGlvbiBhY2Nlc3NpYmxlIHRvIHRoZSB3ZWIgc2VydmVyLiBUaGUgbGltaXRhdGlv bnMKLSAgIG9mIEhUVFAgQ09OTkVDVCBpcyB0aGF0IGl0IGNhbiBvbmx5IGJlIHVzZWQgZm9yIG91 dGdvaW5nIGNvbm5lY3Rpb25zCi0gICBmb3IgcHJvdG9jb2xzIHRoYXQgYXJlIGltcGxlbWVudGVk IHVzaW5nIFRDUC9JUC4gUHJvdG9jb2xzIHN1Y2ggYXMKLSAgIEtlcmJlcm9zIGF1dGhlbnRpY2F0 aW9uIHRoYXQgdXNlIFVEUC9JUCBjYW5ub3QgYmUgdHVubmVsZWQgdXNpbmcgSFRUUAotICAgQ09O TkVDVC4KLQotICAgS2VybWl0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSB1c2Ugb2YgSFRUUCBD T05ORUNUIHByb3h5IHNlcnZpY2VzIHdpdGgKLSAgIHRoZSBjb21tYW5kOgotCi0gIFNFVCBUQ1Ag SFRUUC1QUk9YWSBbL1VTRVI6dXNlcm5hbWUgL1BBU1NXT1JEOnBhc3N3b3JkXSBob3N0bmFtZS9p cC1hZGRyZXNzWzpwbwotcnRdCi0KLSAgIFdoZW4gYSBwb3J0IGlzIG5vdCBzcGVjaWZpZWQgdGhl IGRlZmF1bHQgcG9ydCBjb25maWd1cmVkIG9uIHRoZSBIVFRQCi0gICBzZXJ2ZXIgaXMgdXNlZC4g VGhpcyBpcyBmcmVxdWVudGx5IHBvcnQgNDQzLiBXaGVuIGEgaG9zdG5hbWUgaXMKLSAgIHNwZWNp ZmllZCwgaXQgaXMgcmVzb2x2ZWQgdXNpbmcgdGhlIEROUyBhdmFpbGFibGUgdG8gdGhlIHdlYiBz ZXJ2ZXIuCi0KLTMuMi4gTWFraW5nIFNlY3VyZSBGVFAgQ29ubmVjdGlvbnMKLQotICAgQWxzbyBz ZWU6IFsyNDRdQWNjZXNzaW5nIElCTSBJbmZvcm1hdGlvbiBFeGNoYW5nZSB3aXRoIEtlcm1pdC4K LQotICAgSW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHlvdSBjYW4gc2VlIHNldmVyYWwgZXhhbXBs ZXMgb2YgdHJhZGl0aW9uYWwKLSAgIGluc2VjdXJlIGF1dGhlbnRpY2F0aW9uOiB1c2VybmFtZSBh bmQgcGFzc3dvcmQgc2VudCBhY3Jvc3MgdGhlIG5ldHdvcmsKLSAgIGluIGNsZWFyIHRleHQuIE9m IGNvdXJzZSB0aGlzIGlzIGJhZCBwcmFjdGljZSBvbiBhdCBsZWFzdCB0d28gY291bnRzOgotICAg KDEpIHN0b3JpbmcgcGFzc3dvcmRzIGluIGZpbGVzIChzdWNoIGFzIHNjcmlwdCBmaWxlcykgZ2l2 ZXMgYWNjZXNzIHRvCi0gICB0aGUgdGFyZ2V0IHN5c3RlbXMgdG8gYW55Ym9keSB3aG8gY2FuIG9i dGFpbiByZWFkIGFjY2VzcyB0byB5b3VyCi0gICBzY3JpcHRzOyBhbmQgKDIpIHNlbmRpbmcgdGhp cyBpbmZvcm1hdGlvbiBvdmVyIHRoZSBuZXR3b3JrIGxlYXZlcyBpdAotICAgb3BlbiB0byBpbnRl cmNlcHRpb24gYnkgbmV0d29yayBzbmlmZmVycyBvciBjb21wcm9taXNlZCBob3N0cy4KLQotICAg QmVjYXVzZSBvZiB0aGUgaW5jcmVhc2luZyBuZWVkIGZvciBzZWN1cml0eSBvbiB0aGUgSW50ZXJu ZXQsIEZUUAotICAgc2VydmVycyBhcmUgYmVnaW5uaW5nIHRvIGFwcGVhciB0aGF0IG9mZmVyIHNl Y3VyZSBmb3JtcyBvZgotICAgYXV0aGVudGljYXRpb24sIGluIHdoaWNoIG5vIGluZm9ybWF0aW9u IGlzIHNlbnQgb3ZlciB0aGUgbmV0d29yayB0aGF0Ci0gICB3b3VsZCBhbGxvdyBhbnlvbmUgd2hv IGludGVyY2VwdHMgaXQgdG8gdXN1cnAgeW91ciBpZGVudGl0eSBhbmQgZ2FpbgotICAgeW91ciBh Y2Nlc3MgcmlnaHRzLgotCi0gICBLZXJtaXQgcHJvdmlkZXMgYW4gZXF1aXZhbGVudCBmb3JtIG9m IEZUUCBzZWN1cml0eSBmb3IgZWFjaCB0eXBlIG9mCi0gICBJRVRGIHN0YW5kYXJkIHNlY3VyaXR5 IGltcGxlbWVudGVkIGluIFRlbG5ldC4gVGhlc2UgaW5jbHVkZQotICAgR1NTQVBJLUtFUkJFUk9T NSwgS0VSQkVST1M0LCBTZWN1cmUgUmVtb3RlIFBhc3N3b3JkIChTUlApLCBhbmQKLSAgIFRyYW5z cG9ydCBMYXllciBTZWN1cml0eSAoU1NMIGFuZCBUTFMpLiBJdCBkb2VzIG5vdCBwcmVzZW50bHkg aW5jbHVkZQotICAgU1NMIHR1bm5lbGluZyBub3IgYW55IGZvcm0gb2YgU1NIIHYxIG9yIHYyLiBX aGVuIEtlcm1pdCBpcyBidWlsdCB3aXRoCi0gICB0aGUgbmVjZXNzYXJ5IGxpYnJhcmllcywgc2Vj dXJlIEZUUCBjb25uZWN0aW9ucyBhcmUgYXR0ZW1wdGVkIGJ5Ci0gICBkZWZhdWx0LCBpbiB3aGlj aCBhbGwgY29ubmVjdGlvbnMgYXJlIGF1dGhlbnRpY2F0ZWQgYW5kIHRoZSBjb21tYW5kIGFuZAot ICAgZGF0YSBjaGFubmVscyBhcmUgcHJpdmF0ZS4KLQotICAgVGhlIHVzZSBvZiBhdXRoZW50aWNh dGlvbiBhbmQgZW5jcnlwdGlvbiBmb3IgRlRQIGNvbm5lY3Rpb25zIGNhbiBiZQotICAgYWRqdXN0 ZWQgd2l0aCB0aGUgY29tbWFuZHMgbGlzdGVkIGJlbG93LCB3aGljaCBhcmUgYXZhaWxhYmxlIG9u bHkgaWYKLSAgIHlvdXIgdmVyc2lvbiBvZiBLZXJtaXQgd2FzIGJ1aWx0IHdpdGggdGhlIGNvcnJl c3BvbmRpbmcgc2VjdXJpdHkKLSAgIG9wdGlvbnMgYW5kIGxpYnJhcmllczoKLQotICAgU0VUIEZU UCBBVVRIVFlQRSB7IEFVVE9NQVRJQywgR1NTQVBJLUtSQjUsIEtFUkJFUk9TNCwgU1JQLCBTU0ws IFRMUyB9Ci0gICAgICAgICAgU3BlY2lmaWVzIGFuIG9yZGVyZWQgbGlzdCBvZiBhdXRoZW50aWNh dGlvbiBtZXRob2RzIHRvIGJlCi0gICAgICAgICAgYXR0ZW1wdGVkIHdoZW4gQVVUT0FVVEhFTlRJ Q0FUSU9OIGlzIE9OLiBUaGUgZGVmYXVsdCBsaXN0IGlzOgotICAgICAgICAgIEdTU0FQSS1LUkI1 LCBTUlAsIEtFUkJFUk9TX1Y0LCBUTFMsIFNTTC4gSWYgbm9uZSBvZiB0aGUgc2VsZWN0ZWQKLSAg ICAgICAgICBtZXRob2RzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZlciwgYW4gaW5zZWN1cmUg bG9naW4gaXMgdXNlZAotICAgICAgICAgIGFzIGEgZmFsbGJhY2suIE5vdGUsIGJ5IHRoZSB3YXks IHRoYXQgU1NMIG9yIFRMUyBjYW4gYmUgdXNlZCB0bwotICAgICAgICAgIHNlY3VyZSBhbiBhbm9u eW1vdXMgY29ubmVjdGlvbi4KLQotICAgU0VUIEZUUCBBVVRPQVVUSEVOVElDQVRJT04geyBPTiwg T0ZGIH0KLSAgICAgICAgICBUZWxscyB3aGV0aGVyIGF1dGhlbnRpY2F0aW9uIHNob3VsZCBiZSBu ZWdvdGlhdGVkIGJ5IHRoZSBGVFAKLSAgICAgICAgICBPUEVOIGNvbW1hbmQuIERlZmF1bHQgaXMg T04uIFVzZSBTRVQgRlRQIEFVVE9BVVRIRU5USUNBVElPTiBPRkYKLSAgICAgICAgICB0byBmb3Jj ZSBhIGNsZWFyLXRleHQsIHVuZW5jcnlwdGVkIGNvbm5lY3Rpb24gdG8gRlRQIHNlcnZlcnMKLSAg ICAgICAgICAoc3VjaCBhcyB0aGUgb25lIGF0IHRoZSBLZXJtaXQgRlRQIHNpdGUpIHRoYXQgbm9y bWFsbHkgd291bGQgdHJ5Ci0gICAgICAgICAgdG8gbmVnb3RpYXRlIHNlY3VyZSBhdXRoZW50aWNh dGlvbiBhbmQgZW5jcnlwdGlvbi4KLQotICAgU0VUIEZUUCBBVVRPRU5DUllQVElPTiB7IE9OLCBP RkYgfQotICAgICAgICAgIFRlbGxzIHdoZXRoZXIgZW5jcnlwdGlvbiAocHJpdmFjeSkgc2hvdWxk IGJlIG5lZ290aWF0ZWQgYnkgdGhlCi0gICAgICAgICAgRlRQIE9QRU4gY29tbWFuZCwgd2hpY2gg Y2FuIGhhcHBlbiBvbmx5IGlmIHNlY3VyZSBhdXRoZW50aWNhdGlvbgotICAgICAgICAgIGlzIGFs c28gbmVnb3RpYXRlZC4gRGVmYXVsdCBpcyBPTi4KLQotICAgU0VUIEZUUCBBVVRPTE9HSU4geyBP TiwgT0ZGIH0KLSAgICAgICAgICBUZWxscyBLZXJtaXQgd2hldGhlciB0byB0cnkgbG9nZ2luZyBp biBhdXRvbWF0aWNhbGx5IHdoZW4geW91Ci0gICAgICAgICAgbWFrZSBhbiBGVFAgY29ubmVjdGlv biwgYXMgb3Bwb3NlZCB0byBsZXR0aW5nIHlvdSBkbyBpdCAiYnkKLSAgICAgICAgICBoYW5kIiB3 aXRoIHRoZSBGVFAgVVNFUiBjb21tYW5kLgotCi0gICBTRVQgRlRQIENPTU1BTkQtUFJPVEVDVElP Ti1MRVZFTCB7IENMRUFSLCBDT05GSURFTlRJQUwsIFBSSVZBVEUsIFNBRkUgfQotICAgICAgICAg IERldGVybWluZXMgdGhlIGxldmVsIG9mIHByb3RlY3Rpb24gYXBwbGllZCB0byB0aGUgY29tbWFu ZAotICAgICAgICAgIGNoYW5uZWw6Ci0KLSAgQ0xFQVIgICAgICAgICBEYXRhIGlzIHNlbnQgaW4g cGxhaW50ZXh0IGFuZCBub3QgcHJvdGVjdGVkIGFnYWluc3QgdGFtcGVyaW5nLgotICBDT05GSURF TlRJQUwgIERhdGEgaXMgZW5jcnlwdGVkIGJ1dCBub3QgcHJvdGVjdGVkIGFnYWluc3QgdGFtcGVy aW5nLgotICBQUklWQVRFICAgICAgIERhdGEgaXMgZW5jcnlwdGVkIGFuZCBpcyBwcm90ZWN0ZWQg YWdhaW5zdCB0YW1wZXJpbmcuCi0gIFNBRkUgICAgICAgICAgRGF0YSBpcyBzZW50IGluIHBsYWlu dGV4dCBidXQgcHJvdGVjdGVkIGFnYWluc3QgdGFtcGVyaW5nLgotCi0gICAgICAgICAgVGhlIGRl ZmF1bHQgaXMgUFJJVkFURS4KLQotICAgU0VUIEZUUCBDUkVERU5USUFMLUZPUldBUkRJTkcgeyBP TiwgT0ZGIH0KLSAgICAgICAgICBUZWxscyB3aGV0aGVyIGVuZC11c2VyIGNyZWRlbnRpYWxzIGFy ZSB0byBiZSBmb3J3YXJkZWQgdG8gdGhlCi0gICAgICAgICAgc2VydmVyIGlmIHN1cHBvcnRlZCBi eSB0aGUgYXV0aGVudGljYXRpb24gbWV0aG9kIChHU1NBUEktS1JCNQotICAgICAgICAgIG9ubHkp LiBUaGlzIGlzIG9mdGVuIHJlcXVpcmVkIHRvIGFsbG93IGFjY2VzcyB0byBkaXN0cmlidXRlZAot ICAgICAgICAgIGZpbGUgc3lzdGVtcyAoZS5nLiBBRlMuKQotCi0gICBTRVQgRlRQIERBVEEtUFJP VEVDVElPTi1MRVZFTCB7IENMRUFSLCBDT05GSURFTlRJQUwsIFBSSVZBVEUsIFNBRkUgfQotICAg ICAgICAgIFRlbGxzIHdoYXQgbGV2ZWwgb2YgcHJvdGVjdGlvbiBpcyBhcHBsaWVkIHRvIHN1YnNl cXVlbnQgZGF0YQotICAgICAgICAgIGNoYW5uZWxzLiBUaGUgbWVhbmluZ3Mgb2YgdGhlIHByb3Rl Y3Rpb24tbGV2ZWwga2V5d29yZHMgYXJlIHRoZQotICAgICAgICAgIHNhbWUgYXMgZm9yIFNFVCBG VFAgQ09NTUFORC1QUk9URUNUSU9OLUxFVkVMLiBUaGUgZGVmYXVsdCBpcwotICAgICAgICAgIFBS SVZBVEUuCi0KLSAgIFNFVCBGVFAgU1JQIENJUEhFUiBuYW1lCi0gICAgICAgICAgU3BlY2lmaWVz IHRoZSBjaXBoZXIgdG8gYmUgdXNlZCBmb3IgZW5jcnlwdGlvbiB3aGVuIFNSUAotICAgICAgICAg IGF1dGhlbnRpY2F0aW9uIGlzIGluIHVzZS4gVGhlIGxpc3Qgb2YgcG9zc2libGUgY2hvaWNlcyBp cwotICAgICAgICAgIGNvbXB1dGVkIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGxv Y2FsIFNSUCBsaWJyYXJ5IGFuZAotICAgICAgICAgIGluY2x1ZGVzIE5PTkUgcGx1cyB6ZXJvIG9y IG1vcmUgb2YgdGhlIGZvbGxvd2luZzoKLQotICBCTE9XRklTSF9FQ0IgICAgICAgIENBU1Q1X0VD QiAgICAgICAgICBERVNfRUNCICAgICAgICAgIERFUzNfRUNCCi0gIEJMT1dGSVNIX0NCQyAgICAg ICAgQ0FTVDVfQ0JDICAgICAgICAgIERFU19DQkMgICAgICAgICAgREVTM19DQkMKLSAgQkxPV0ZJ U0hfQ0ZCNjQgICAgICBDQVNUNV9DRkI2NCAgICAgICAgREVTX0NGQjY0ICAgICAgICBERVMzX0NG QjY0Ci0gIEJMT1dGSVNIX09GQjY0ICAgICAgQ0FTVDVfT0ZCNjQgICAgICAgIERFU19PRkI2NCAg ICAgICAgREVTM19PRkI2NAotCi0gICAgICAgICAgVGhlIGRlZmF1bHQgaXMgREVTM19FQ0IuCi0K LSAgIFNFVCBGVFAgU1JQIEhBU0ggbmFtZQotICAgICAgICAgIFNwZWNpZmllcyB0aGUgaGFzaCB0 byBiZSB1c2VkIGZvciBkYXRhIHByb3RlY3Rpb24gd2hlbiBTUlAKLSAgICAgICAgICBhdXRoZW50 aWNhdGlvbiBpcyBpbiB1c2UuIFRoZSBjaG9pY2VzIGFyZSBNRDUgYW5kIFNIQS4gVGhlCi0gICAg ICAgICAgZGVmYXVsdCBpcyBTSEEuCi0KLSAgIENvbW1hbmQtbGluZSBvcHRpb25zOgotCi0gICAt ayBuYW1lCi0gICAgICAgICAgU3BlY2lmaWVzIHRoZSByZWFsbSB0byBiZSB1c2VkIHdpdGggS2Vy YmVyb3MgNCBhdXRoZW50aWNhdGlvbiAoPQotICAgICAgICAgIFNFVCBBVVRIIEs0IFJFQUxNIG5h bWUpLgotCi0gICAtZgotICAgICAgICAgIEVuYWJsZXMgZm9yd2FyZGluZyBvZiBLZXJiZXJvcyA1 IGNyZWRlbnRpYWxzIHRvIHRoZSBob3N0IHdoZW4KLSAgICAgICAgICB1c2luZyBHU1NBUEkgYXV0 aGVudGljYXRpb24gKD0gU0VUIEFVVEggSzUgRk9SV0FSREFCTEUgT04pLgotCi0gICAteAotICAg ICAgICAgIEVuYWJsZXMgYXV0b2VuY3J5cHRpb24gKD0gU0VUIEZUUCBBVVRPRU5DUllQVElPTiBP TikuCi0KLSAgIC1jIGNpcGhlcgotICAgICAgICAgIFNwZWNpZmllcyB0aGUga2luZCBvZiBjaXBo ZXIgdG8gYmUgdXNlZCBmb3IgZW5jcnlwdGlvbiB3aXRoIFNSUAotICAgICAgICAgIGF1dGhlbnRp Y2F0aW9uLiBFcXVpdmFsZW50IHRvIFNFVCBGVFAgU1JQIENJUEhFUiwgd2l0aCB0aGUgc2FtZQot ICAgICAgICAgIGNob2ljZXMuIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBnaXZlbiwgQ0FTVDVfQ0JD IGlzIHVzZWQuCi0KLSAgIC1IIGhhc2gKLSAgICAgICAgICBTcGVjaWZpZXMgdGhlIGhhc2ggdG8g YmUgdXNlZCBmb3IgZW5jcnlwdGlvbiB3aXRoIFNSUAotICAgICAgICAgIGF1dGhlbnRpY2F0aW9u LiBFcXVpdmFsZW50IHRvIFNFVCBGVFAgU1JQIEhBU0gsIHdpdGggdGhlIHNhbWUKLSAgICAgICAg ICBjaG9pY2VzLiBJZiB0aGlzIG9wdGlvbiBpcyBub3QgZ2l2ZW4sIFNIQSBpcyB1c2VkLgotCi0g ICAteiBkZWJ1ZwotICAgICAgICAgIFR1cm5zIG9uIFNTTC9UTFMgZGVidWdnaW5nLgotCi0gICAt eiBzZWN1cmUKLSAgICAgICAgICBSZXF1aXJlcyBzZWN1cmUgY29ubmVjdGlvbi4KLQotICAgLXog Y2VydHNvawotICAgICAgICAgIFNheXMgdG8gYWNjZXB0IGFsbCBjZXJ0aWZpY2F0ZXMgd2l0aG91 dCBjaGVja2luZyB2YWxpZGl0eS4KLQotICAgLXogdmVyaWZ5PW4KLSAgICAgICAgICBTZXRzIGNl cnRpZmljYXRlIHZlcmlmaWNhdGlvbiBtb2RlIHRvIHRoZSBnaXZlbiBudW1iZXIsIG46Ci0gICAg ICAgICAgICAwID0gbm8gdmVyaWZpY2F0aW9uCi0gICAgICAgICAgICAxID0gdmVyaWZ5IGNlcnRp ZmljYXRlIGlmIHByZXNlbnRlZAotICAgICAgICAgICAgMiA9IHJlcXVpcmUgdmVyaWZpY2F0aW9u IG9mIGNlcnRpZmljYXRlCi0KLSAgIC16IGNlcnQ9ZmlsZW5hbWUKLSAgICAgICAgICBTcGVjaWZp ZXMgYSBmaWxlIGNvbnRhaW5pbmcgYSBjbGllbnQgY2VydGlmaWNhdGUgdG8gYmUgcHJlc2VudGVk Ci0gICAgICAgICAgdG8gdGhlIEZUUCBzZXJ2ZXIuCi0KLSAgIC16IGtleT1maWxlbmFtZQotICAg ICAgICAgIFNwZWNpZmllcyBhIGZpbGUgY29udGFpbmluZyBhIHByaXZhdGUga2V5IG1hdGNoaW5n IHRoZSBjbGllbnQKLSAgICAgICAgICBjZXJ0aWZpY2F0ZS4KLQotICAgLXogIWtyYjQKLSAgICAg ICAgICAobm9rcmI0KSBEaXNhYmxlcyB0aGUgdXNlIG9mIEtlcmJlcm9zIDQuCi0KLSAgIC16ICFn c3MKLSAgIC16IG5vZ3NzCi0gICAgICAgICAgRGlzYWJsZXMgdGhlIHVzZSBvZiBHU1NBUEkgLSBL ZXJiZXJvcyA1LgotCi0gICAteiAhc3JwCi0gICAteiBub3NycAotICAgICAgICAgIERpc2FibGVz IHVzZSBvZiBTUlAuCi0KLSAgIC16ICFzc2wKLSAgIC16IG5vc3NsCi0gICAgICAgICAgRGlzYWJs ZXMgdGhlIHVzZSBvZiBTU0wuCi0KLSAgIC16ICF0bHMKLSAgIC16IG5vdGxzCi0gICAgICAgICAg RGlzYWJsZXMgdGhlIHVzZSBvZiBUTFMuCi0KLSAgIENhdXRpb246IElmIHlvdXIgRlRQIGNvbm5l Y3Rpb24gaXMgc2VjdXJlZCB2aWEgQVVUSCBUTFMsIGl0IGlzIG5vdAotICAgcG9zc2libGUgdG8g aW50ZXJydXB0IGEgZmlsZSB0cmFuc2Zlci4gVGhpcyBpcyBhIGxpbWl0YXRpb24gb2YgYWxsCi0g ICBrbm93biBGVFAgc2VydmVycyB0aGF0IHN1cHBvcnQgQVVUSCBUTFMuCi0KLSAgIE5vdGUgdGhh dCB3aGVuIHVzaW5nIGNlcnRhaW4gc2VjdXJpdHkgbWV0aG9kcywgc3VjaCBhcyBTU0wgb3IgVExT LCB5b3UKLSAgIG1heSBiZSBwcm9tcHRlZCB0byBjb25maXJtIG9yIHZlcmlmeSBjZXJ0YWluIGFj dGlvbnMgb3IgY29uZGl0aW9ucywgZm9yCi0gICBleGFtcGxlLCB3aGV0aGVyIHRvIGFjY2VwdCBz ZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZXMuIFRoaXMgY2FuIGludGVyZmVyZQotICAgd2l0aCB1bmF0 dGVuZGVkIG9wZXJhdGlvbiBvZiBzY3JpcHRzOyBzZWUgWzI0NV1TZWN0aW9uIDMuMTAuCi0KLSAg IFsgWzI0Nl1Ub3AgXSBbIFsyNDddRlRQIFRvcCBdIFsgWzI0OF1DLUtlcm1pdCBIb21lIF0gWyBb MjQ5XUtlcm1pdCBIb21lCi0gICBdCi0KLTMuMy4gU2V0dGluZyBGVFAgUHJlZmVyZW5jZXMKLQot ICAgRlRQIHByZWZlcmVuY2VzIGNhbiBiZSBzZXQgZ2xvYmFsbHkgYW5kIHBlcnNpc3RlbnRseSB3 aXRoIHRoZSBjb21tYW5kcwotICAgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uczsgbWFueSBvZiB0 aGVzZSBjYW4gYWxzbyBiZSBvdmVycmlkZGVuIG9uIGEKLSAgIHBlci1jb21tYW5kIGJhc2lzIHdp dGggc3dpdGNoZXMgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWUuCi0KLTMuMy4xLiBMb2dzLCBNZXNz YWdlcywgYW5kIE90aGVyIEZlZWRiYWNrCi0KLSAgIFlvdSBjYW4gY29udHJvbCB0aGUgYW1vdW50 IG9mIGZlZWRiYWNrIHJlY2VpdmVkIGZyb20geW91ciBGVFAgc2Vzc2lvbgotICAgd2l0aCB0aGUg Y29tbWFuZHMgaW4gdGhpcyBzZWN0aW9uLiBGaXJzdCwgeW91IGNhbiBjcmVhdGUgYSBsb2cgb2Yg eW91cgotICAgRlRQIHRyYW5zZmVycyB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6Ci0KLSAg IFNFVCBUUkFOU0FDVElPTi1MT0cgeyBWRVJCT1NFLCBGVFAsIEJSSUVGIH0KLSAgICAgICAgICBT ZWxlY3RzIHRoZSBsb2cgZm9ybWF0LiBWRVJCT1NFIGlzIHRoZSBkZWZhdWx0LCBhbmQgaXMgZGVz Y3JpYmVkCi0gICAgICAgICAgaW4gWzI1MF10aGUgbWFudWFsLiBGVFAgY2hvb3NlcyBhIFdVLUZU UEQgZm9ybWF0LCB0aGUgc2FtZSBhcyBpcwotICAgICAgICAgIHVzZWQgYnkgdGhlIHBvcHVsYXIg RlRQIHNlcnZlci4gQlJJRUYgY3JlYXRlcyBwZXItZmlsZSByZWNvcmRzCi0gICAgICAgICAgaW4g Y29tbWEtc2VwYXJhdGVkLWxpc3QgZm9ybWF0LiBGb3IgZ3JlYXRlciBkZXRhaWwsIHNlZQotICAg ICAgICAgIFsyNTFdU2VjdGlvbiA0LjE3IG9mIHRoZSBbMjUyXUMtS2VybWl0IDcuMCBVcGRhdGUg Tm90ZXMuCi0KLSAgIExPRyBUUkFOU0FDVElPTlMgZmlsZW5hbWUKLSAgICAgICAgICBSZWNvcmRz IEZUUCAob3IgS2VybWl0LCBvciBhbnkgb3RoZXIgcHJvdG9jb2wpIHVwbG9hZHMgYW5kCi0gICAg ICAgICAgZG93bmxvYWRzIGluIHRoZSBnaXZlbiBmaWxlIHVzaW5nIHRoZSBmb3JtYXQgc2VsZWN0 ZWQgYnkgdGhlCi0gICAgICAgICAgbW9zdCByZWNlbnQgU0VUIFRSQU5TQUNUSU9OLUxPRyBjb21t YW5kLCBpZiBhbnksIG9yIGVsc2UgdGhlCi0gICAgICAgICAgZGVmYXVsdCBmb3JtYXQuCi0KLSAg IEZUUCBzY3JlZW4gbWVzc2FnZXMgYW5kIGRpc3BsYXlzIGFyZSBjb250cm9sbGVkIGJ5IHRoZSBm b2xsb3dpbmcKLSAgIGNvbW1hbmRzOgotCi0gICBTRVQgVFJBTlNGRVIgRElTUExBWSB7IEZVTExT Q1JFRU4sIENSVCwgU0VSSUFMLCBCUklFRiwgTk9ORSwgT0ZGIH0KLSAgICAgICAgICBGVFAgdHJh bnNmZXJzIHVzZSBLZXJtaXQncyBub3JtYWwgZmlsZS10cmFuc2ZlciBkaXNwbGF5IHN0eWxlcy4K LSAgICAgICAgICBVc2UgdGhpcyBjb21tYW5kIHRvIGNob29zZSB0aGUgZGVzaXJlZCBmb3JtYXQ7 IHRoZSBkZWZhdWx0IG9uCi0gICAgICAgICAgbW9zdCBwbGF0Zm9ybXMgaXMgRlVMTFNDUkVFTi4g VGhlIGRpc3BsYXkgaXMgYXV0b21hdGljYWxseQotICAgICAgICAgIGRpc2FibGVkIGlmIEtlcm1p dCBpcyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kIG9yIGluIGJhdGNoLgotICAgICAgICAgIEJS SUVGIGlzIGFsd2F5cyB1c2VkIGZvciBjb21tYW5kLWxpbmUgaW5pdGlhdGVkIHRyYW5zZmVycwot ICAgICAgICAgICh1bmxlc3Mgc3VwcHJlc3NlZCBieSAtcSkuIFdoaWxlIGEgZmlsZS10cmFuc2Zl ciBpcyBpbiBwcm9ncmVzcywKLSAgICAgICAgICB5b3UgY2FuIGludGVycnVwdCBpdCBpbiB0aGUg bm9ybWFsIEtlcm1pdCB3YXkgYnkgdHlwaW5nIG9uZSBvZgotICAgICAgICAgIHRoZSBmb2xsb3dp bmcga2V5cyBvciBrZXkgY29tYmluYXRpb25zOgotICAgICAgICAgICAgWCAtIENhbmNlbCBjdXJy ZW50IGZpbGUgYnV0IGdvIG9uIHRvIHRoZSBuZXh0IG9uZSAoaWYgYW55KS4KLSAgICAgICAgICAg IFogLSBDYW5jZWwgdGhlIGVudGlyZSB0cmFuc2Zlci4gICBDdHJsLUwgb3IgQ3RybC1XIC0gUmVm cmVzaAotICAgICAgICAgIHRoZSBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgKGlmIGFueSkuCi0KLSAg IFNFVCBGVFAgRElTUExBWSB7IEZVTExTQ1JFRU4sIENSVCwgU0VSSUFMLCBCUklFRiwgTk9ORSwg T0ZGIH0KLSAgICAgICAgICBMaWtlIFNFVCBUUkFOU0ZFUiBESVNQTEFZLCBidXQgYXBwbGllcyBv bmx5IHRvIEZUUCBjb25uZWN0aW9ucywKLSAgICAgICAgICBhbmQgZG9lcyBub3QgYWZmZWN0IEtl cm1pdC0gb3Igb3RoZXIgcHJvdG9jb2wgZmlsZSB0cmFuc2ZlcnMuCi0KLSAgIFNFVCBRVUlFVCB7 IE9OLCBPRkYgfQotICAgICAgICAgIFRoaXMgY29tbWFuZCBhcHBsaWVzIHRvIEtlcm1pdCBpbiBn ZW5lcmFsLCBub3QganVzdCBGVFAuIE9GRiBieQotICAgICAgICAgIGRlZmF1bHQ7IHdoZW4gT04s IGl0IHN1cHByZXNzZXMgbW9zdCBtZXNzYWdlcyBmcm9tIG1vc3QgY29tbWFuZHMKLSAgICAgICAg ICBhcyB3ZWxsIGFzIHRoZSBmaWxlLXRyYW5zZmVyIGRpc3BsYXkuCi0KLSAgIFNFVCBGVFAgUFJP R1JFU1MtTUVTU0FHRVMgeyBPTiwgT0ZGIH0KLSAgICAgICAgICBUZWxscyB3aGV0aGVyIEtlcm1p dCBzaG91bGQgcHJpbnQgbG9jYWxseS1nZW5lcmF0ZWQgZmVlZGJhY2sKLSAgICAgICAgICBtZXNz YWdlcyBmb3IgZWFjaCBub24tZmlsZS10cmFuc2ZlciBjb21tYW5kLiBPTiBieSBkZWZhdWx0Lgot Ci0gICBTRVQgRlRQIFZFUkJPU0UtTU9ERSB7IE9OLCBPRkYgfQotICAgICAgICAgIFRlbGxzIHdo ZXRoZXIgdG8gZGlzcGxheSBhbGwgcmVzcG9uc2VzIGZyb20gdGhlIEZUUCBzZXJ2ZXIuIE9GRgot ICAgICAgICAgIGJ5IGRlZmF1bHQuIFRoaXMgc2hvd3MgYWxsIHJlc3BvbnNlcyB0byBhbGwgY29t bWFuZHMsIGV4Y2VwdAotICAgICAgICAgIHdoZW4gdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSBp cyBhY3RpdmUsIGFuZCB1bmxlc3MgeW91IGhhdmUKLSAgICAgICAgICBTRVQgUVVJRVQgT04uIFdo ZW4gT0ZGLCByZXNwb25zZXMgYXJlIHNob3duIG9ubHkgZm9yIGNvbW1hbmRzCi0gICAgICAgICAg c3VjaCBhcyBGVFAgUFdEIHdob3NlIHB1cnBvc2UgaXMgdG8gZGlzcGxheSBhIHJlc3BvbnNlLgot Ci0gICBTRVQgRlRQIERFQlVHIHsgT04sIE9GRiB9Ci0gICAgICAgICAgVGVsbHMgd2hldGhlciBs b2NhbCBjbGllbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uIHNob3VsZCBiZQotICAgICAgICAgIGRp c3BsYXllZC4gT0ZGIGJ5IGRlZmF1bHQuIFdoZW4gT04sIHRoZSBjb21tYW5kcyB0aGF0IGFyZSBz ZW50Ci0gICAgICAgICAgdG8gdGhlIHNlcnZlciBhcmUgc2hvd24sIGFzIHdlbGwgYXMgaXRzIHJl c3BvbnNlcyAoZXZlbiBpZgotICAgICAgICAgIFZFUkJPU0UtTU9ERSBpcyBPRkYpLCBwbHVzIGFk ZGl0aW9uYWwgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyBhcmUKLSAgICAgICAgICBwcmludGVkIHJl Z2FyZGluZyB0aGUgcHJvZ3Jlc3Mgb2Ygc2VjdXJlIG9wZXJhdGlvbnMuIEFsc28sIHRoZQotICAg ICAgICAgIHRlbXBvcmFyeSBmaWxlIGNyZWF0ZWQgYnkgdGhlIFsyNTNdTUdFVCBjb21tYW5kIGlz IG5vdCBkZWxldGVkCi0gICAgICAgICAgc28geW91IGNhbiBzZWUgd2hhdCdzIGluIGl0LgotCi0g ICBTZXQgYWxsIG9mIHRoZXNlIHRvIE9GRiB3aGVuIHNpbGVudCBydW5uaW5nIGlzIGRlc2lyZWQu Ci0KLTMuMy4yLiBPcGVyYXRpb25hbCBQcmVmZXJlbmNlcwotCi0gICBGVFAgRElTQUJMRSBuZXct cHJvdG9jb2wtZmVhdHVyZS1uYW1lCi0gICBGVFAgRU5BQkxFIG5ldy1wcm90b2NvbC1mZWF0dXJl LW5hbWUKLSAgICAgICAgICBFeHBsYWluZWQgaW4gWzI1NF1TZWN0aW9uIDMuMTEuCi0KLSAgIFNF VCBGVFAgQVVUT0xPR0lOIHsgT04sIE9GRiB9Ci0gICAgICAgICAgSWYgeW91IGdpdmUgdGhpcyBj b21tYW5kIHByaW9yIHRvIG9wZW5pbmcgYW4gRlRQIGNvbm5lY3Rpb24sIGl0Ci0gICAgICAgICAg Y29udHJvbHMgd2hldGhlciBLZXJtaXQgdHJpZXMgdG8gbG9nIHlvdSBpbiBhdXRvbWF0aWNhbGx5 IGFzCi0gICAgICAgICAgcGFydCBvZiB0aGUgY29ubmVjdGlvbiBwcm9jZXNzLiBOb3JtYWxseSBP Tiwgd2hpY2ggbWVhbnMgdGhlCi0gICAgICAgICAgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSBz ZW50IGF1dG9tYXRpY2FsbHkgKGFuZCBwcm9tcHRlZCBmb3IKLSAgICAgICAgICBpZiB0aGV5IGFy ZSBub3QgeWV0IGtub3duKS4gV2hlbiBPRkYsIEZUUCBPUEVOIGNvbm5lY3RzIHRvIHRoZQotICAg ICAgICAgIHNlcnZlciB3aXRob3V0IGxvZ2dpbmcgaW4uIE9GRiBpcyBlcXVpdmFsZW50IHRvIHRo ZSAtbgotICAgICAgICAgIGNvbW1hbmQtbGluZSBvcHRpb24gd2hlbiB1c2luZyBLZXJtaXQncyBG VFAgY29tbWFuZC1saW5lCi0gICAgICAgICAgcGVyc29uYWxpdHkuIFNlZSBbMjU1XVNlY3Rpb24g My4xLjQgZm9yIHVzYWdlLgotCi0gICBTRVQgRlRQIFBBU1NJVkUtTU9ERSB7IE9OLCBPRkYgfQot ICAgICAgICAgIE9OIGJ5IGRlZmF1bHQsIHRvIGF2b2lkIHJhbmRvbSBUQ1AgcG9ydCBhc3NpZ25t ZW50IGZvciBkYXRhCi0gICAgICAgICAgY29ubmVjdGlvbnMsIHdoaWNoIGNhbiBwcmV2ZW50IEZU UCBwcm90b2NvbCBmcm9tIHdvcmtpbmcgdGhyb3VnaAotICAgICAgICAgIGZpcmV3YWxscyBhbmQg bmV0d29yayBhZGRyZXNzIHRyYW5zbGF0b3JzIChmb3IgbW9yZSBvbiB0aGVzZQotICAgICAgICAg IHRvcGljcywgc2VlIHRoZSBbMjU2XUtlcm1pdCBzZWN1cml0eSByZWZlcmVuY2UuIFNldCB0byBP RkYgaW4KLSAgICAgICAgICBjYXNlIHRoZSBGVFAgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgcGFz c2l2ZSBtb2RlLCBvciBpbiBjYXNlCi0gICAgICAgICAgdGhlIGNsaWVudCBoYXMgcHJvYmxlbXMg d2l0aCBpdCAoaXQgaGFzIGJlZW4gb2JzZXJ2ZWQsIGZvcgotICAgICAgICAgIGV4YW1wbGUsIHRo YXQgd2hlbiB1c2luZyBwYXNzaXZlIG1vZGUsIHRoZSBTQ08gWEVOSVggMi4zLjQKLSAgICAgICAg ICBUQ1AvSVAgc3RhY2sgaGFuZ3MgaW4gdGhlIGNvbm5lY3QoKSBjYWxsIGZvcmV2ZXIpLiBTeW5v bnltczoKLSAgICAgICAgICBQQVNTSVZFIFsgT04gXSwgUEFTU0lWRSBPRkYsIFBBU1YgWyBPTiBd LCBQQVNWIE9GRi4KLQotICAgU0VUIEZUUCBTRU5ELVBPUlQtQ09NTUFORFMgeyBPTiwgT0ZGIH0K LSAgICAgICAgICBUaGlzIGNvbW1hbmQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBGVFAgY2xpZW50 IHNlbmRzIGEgbmV3IFBPUlQKLSAgICAgICAgICBjb21tYW5kIHRvIHRoZSBzZXJ2ZXIgd2hlbiBh Y2NlcHRpbmcgaW5jb21pbmcgZGF0YSBjb25uZWN0aW9ucwotICAgICAgICAgIChhcyB3aGVuIG5v dCB1c2luZyBwYXNzaXZlIG1vZGUuKSBXaGVuIFBBU1NJVkUtTU9ERSBpcyBPRkYgYW5kCi0gICAg ICAgICAgU0VUIFNFTkQtUE9SVCBpcyBPRkYsIHRoZSBwb3J0IHRoYXQgd2FzIG9yaWdpbmFsbHkg c3BlY2lmaWVkIGlzCi0gICAgICAgICAgcmV1c2VkLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2 aW9yIGZvciBub3JtYWwgRlRQIGNsaWVudHMgYnV0Ci0gICAgICAgICAgaXQgaXMgbm90IGNvbXBh dGlibGUgd2l0aCBtYW55IGZpcmV3YWxscy4KLQotICAgU0VUIEZUUCBDSEFSQUNURVItU0VULVRS QU5TTEFUSU9OIHsgT04sIE9GRiB9Ci0gICAgICAgICAgV2hldGhlciB0byB0cmFuc2xhdGUgY2hh cmFjdGVyIHNldHMgd2hlbiB0cmFuc2ZlcnJpbmcgZmlsZXMgd2l0aAotICAgICAgICAgIEZUUCAo ZXhwbGFpbmVkIGluIFsyNTddU2VjdGlvbiAzLjcpLiBPRkYgYnkgZGVmYXVsdC4KLQotICAgU0VU IEZUUCBTRVJWRVItQ0hBUkFDVEVSLVNFVCBuYW1lCi0gICAgICAgICAgVGVsbHMgS2VybWl0IHRo ZSBjaGFyYWN0ZXIgc2V0IHVzZWQgYnkgdGhlIEZUUCBzZXJ2ZXIsIFVURi04IGJ5Ci0gICAgICAg ICAgZGVmYXVsdCAoWzI1OF1TZWN0aW9uIDMuNykuCi0KLSAgIFNFVCBGVFAgU0VSVkVSLVRJTUUt T0ZGU0VUIGRlbHRhLXRpbWUKLSAgICAgICAgICBUZWxscyBLZXJtaXQgdG8gYXBwbHkgdGhlIGdp dmVuIFsyNTldZGVsdGEgdGltZSB0byBmaWxlCi0gICAgICAgICAgdGltZXN0YW1wcyBwcm92aWRl ZCBieSB0aGUgc2VydmVyIGZvciBpdHMgZmlsZXM7IGZvciB1c2Ugd2hlbgotICAgICAgICAgIChm b3IgZXhhbXBsZSkgdGhlIHNlcnZlciBkb2VzIG5vdCBoYXZlIGl0cyB0aW1lem9uZSBzZXQKLSAg ICAgICAgICBjb3JyZWN0bHkuCi0KLSAgIFNFVCBGVFAgRVJST1ItQUNUSU9OIHsgUFJPQ0VFRCwg UVVJVCB9Ci0gICAgICAgICAgV2hlbiB0cmFuc2ZlcnJpbmcgYSBncm91cCBvZiBmaWxlcyB3aXRo IEZUUCwgYW5kIGFuIGVycm9yIG9jY3VycwotICAgICAgICAgIHdpdGggb25lIG9mIHRoZSBmaWxl cywgS2VybWl0IG5vcm1hbGx5IGdvZXMgb24gdGhlIG5leHQgZmlsZS4KLSAgICAgICAgICBVc2Ug U0VUIEZUUCBFUlJPUi1BQ1RJT04gdG8gUVVJVCB0byBtYWtlIEtlcm1pdCBzdG9wIHRoZQotICAg ICAgICAgIHRyYW5zZmVyIGltbWVkaWF0ZWx5IGFuZCBmYWlsIGlmIGFuIGVycm9yIG9jY3VycyB3 aXRoIGFueSBzaW5nbGUKLSAgICAgICAgICBmaWxlIGluIHRoZSBncm91cC4gRXhhbXBsZTogeW91 IGhhdmUgZ2l2ZW4gS2VybWl0IGEgbGlzdCBvZgotICAgICAgICAgIGZpbGVzIHRvIHNlbmQsIGFu ZCBvbmUgb2YgdGhlIGZpbGVzIGNhbiBub3QgYmUgZm91bmQsIG9yIHJlYWQKLSAgICAgICAgICBw ZXJtaXNzaW9uIGlzIGRlbmllZC4gTm90ZSB0aGF0IGNhbmNlbGluZyBhIGZpbGUgYnkgdHlwaW5n ICdYJwotICAgICAgICAgIGR1cmluZyB0cmFuc2ZlciBpcyBub3QgY29uc2lkZXJlZCBhbiBlcnJv ciAoaWYgeW91IHdhbnQgdG8KLSAgICAgICAgICBjYW5jZWwgdGhlIGVudGlyZSB0cmFuc2Zlciwg dHlwZSAnWicgb3IgQ3RybC1DKS4KLQotICAgU0VUIEZUUCBQRVJNSVNTSU9OUyB7IEFVVE8sIE9O LCBPRkYgfQotICAgICAgICAgIFdoZW4gdXBsb2FkaW5nIGZpbGVzIHdpdGggUFVUIG9yIE1QVVQs IHRoaXMgdGVsbHMgd2hldGhlciBLZXJtaXQKLSAgICAgICAgICBzaG91bGQgc2VuZCBlYWNoIGZp bGUncyBwZXJtaXNzaW9ucy4gVGhlIGRlZmF1bHQgaXMgT0ZGLCB3aGljaAotICAgICAgICAgIG1l YW5zIG5vdCB0byBzZW5kIHBlcm1pc3Npb25zLCBpbiB3aGljaCBjYXNlIHRoZSB1cGxvYWRlZCBm aWxlJ3MKLSAgICAgICAgICBwZXJtaXNzaW9ucyBhcmUgc2V0IGJ5IHRoZSBGVFAgc2VydmVyIGFj Y29yZGluZyB0byBpdHMgb3duCi0gICAgICAgICAgY3JpdGVyaWEuIE9OIG1lYW5zIHRvIHNlbmQg dGhlbSwgQVVUTyBtZWFucyB0byBzZW5kIHRoZW0gb25seSBpZgotICAgICAgICAgIHRoZSBjbGll bnQgKEtlcm1pdCkgYW5kIHNlcnZlciBhcmUgb24gbGlrZSBwbGF0Zm9ybXMgKGUuZy4gYm90aAot ICAgICAgICAgIFVOSVgpLiBUaGlzIGNvbW1hbmQgaGFzIG5vIGVmZmVjdCB3aGVuIGRvd25sb2Fk aW5nLCBzaW5jZSB0aGUKLSAgICAgICAgICBGVFAgcHJvdG9jb2wgZG9lcyBub3QgaW5jbHVkZSBh IHdheSBmb3IgdGhlIHNlcnZlciB0byBpbmZvcm0gdGhlCi0gICAgICAgICAgY2xpZW50IG9mIGEg ZmlsZSdzIHBlcm1pc3Npb25zLiBBbHNvIHNlZSBbMjYwXUZUUCBQVVQKLSAgICAgICAgICAvUEVS TUlTU0lPTlMuIE5vdGUgdGhhdCBzZXR0aW5nIHBlcm1pc3Npb25zIGFmdGVyIHVwbG9hZGluZyBp cwotICAgICAgICAgIGxpa2VseSB0byB3b3JrIChjb3JyZWN0bHkgb3IgYXQgYWxsKSBvbmx5IHdo ZW4gdGhlIGNsaWVudCBhbmQKLSAgICAgICAgICBzZXJ2ZXIgcGxhdGZvcm1zIGFyZSBhbGlrZSAo ZS5nLiBib3RoIG9mIHRoZW0gYXJlIHNvbWUgZm9ybSBvZgotICAgICAgICAgIFVOSVgpLiBBbHNv IG5vdGUgdGhhdCBXaW5kb3dzIGZpbGVzIGRvbid0IGhhdmUgcGVybWlzc2lvbnMuIEFsc28KLSAg ICAgICAgICBzZWUgWzI2MV1GVFAgQ0hNT0QuCi0KLSAgIFNFVCBGVFAgREFURVMgeyBPTiwgT0ZG IH0KLSAgICAgICAgICBXaGVuIGRvd25sb2FkaW5nIGZpbGVzIHdpdGggR0VUIG9yIE1HRVQsIHRo aXMgdGVsbHMgd2hldGhlcgotICAgICAgICAgIEtlcm1pdCBzaG91bGQgdHJ5IHRvIHNldCB0aGUg cmVjZWl2ZWQgZmlsZSdzIGRhdGUgZnJvbSB0aGUKLSAgICAgICAgICBzZXJ2ZXIncyBkYXRlLiBG VFAgREFURVMgaXMgT04gYnkgZGVmYXVsdC4gTm90ZSwgaG93ZXZlciwgdGhhdAotICAgICAgICAg IEZUUCBwcm90b2NvbCBkb2VzIG5vdCBhbGxvdyBkYXRlIHByZXNlcnZhdGlvbiB3aGVuIHVwbG9h ZGluZy4gU28KLSAgICAgICAgICBhdCBiZXN0LCBTRVQgRlRQIERBVEVTIE9OIGNhbiB3b3JrIG9u bHkgd2hlbiBkb3dubG9hZGluZywgYW5kCi0gICAgICAgICAgdGhlbiBvbmx5IHdoZW4gdGhlIHNl cnZlciBhZ3JlZXMgdG8gZnVybmlzaCBmaWxlIGRhdGVzLgotCi0gICBTRVQgRlRQIEZJTEVOQU1F UyB7IEFVVE8sIENPTlZFUlRFRCwgTElURVJBTCB9Ci0gICAgICAgICAgV2hlbiB1cGxvYWRpbmcg KHNlbmRpbmcpIGZpbGVzLCB0aGlzIHRlbGxzIHdoZXRoZXIgdG8gY29udmVydAotICAgICAgICAg IG91dGJvdW5kIGZpbGVuYW1lcyB0byAiY29tbW9uIGZvcm0iLiBUaGlzIG1lYW5zIGFsbG93aW5n IG9ubHkKLSAgICAgICAgICBvbmUgcGVyaW9kIGluIGEgbmFtZSwgdXBwZXJjYXNpbmcgYW55IGxv d2VyY2FzZSBsZXR0ZXJzLAotICAgICAgICAgIHJlcGxhY2luZyBzcGFjZXMgYnkgdW5kZXJzY29y ZXMsIGV0Yy4gQVVUT01BVElDIGlzIHRoZSBkZWZhdWx0LAotICAgICAgICAgIG1lYW5pbmcgTElU RVJBTCB3aGVuIGNsaWVudCBhbmQgc2VydmVyIGFyZSB0aGUgc2FtZSB0eXBlIG9mCi0gICAgICAg ICAgc3lzdGVtIChlLmcuIFVOSVgpIGFuZCBDT05WRVJURUQgb3RoZXJ3aXNlLiBTcGVjaWFsIGNh c2U6IGlmIHRoZQotICAgICAgICAgIHNldHRpbmcgaXMgQVVUT01BVElDIGFuZCB0aGUgY2xpZW50 IGlzIG5vdCBVTklYIGFuZCB0aGUgc2VydmVyCi0gICAgICAgICAgaWRlbnRpZmllcyBpdHNlbGYg YXMgVU5JWCwgS2VybWl0IHVzZXMgYSBsZXNzLXN0cmljdCBmb3JtIG9mCi0gICAgICAgICAgY29u dmVyc2lvbiwgaW4gd2hpY2ggbG93ZXJjYXNlIGxldHRlcnMgYXJlIG5vdCB1cHBlcmNhc2VkIGFu ZAotICAgICAgICAgIHRoZSBmaWxlbmFtZSBjYW4gY29udGFpbiBhbnkgbnVtYmVyIG9mIHBlcmlv ZHMsIGJ1dCBzcGFjZXMgYXJlCi0gICAgICAgICAgc3RpbGwgY29udmVydGVkIHRvIHVuZGVyc2Nv cmUuIFdoZW4gcmVjZWl2aW5nLCBjb252ZXJzaW9uCi0gICAgICAgICAgZ2VuZXJhbGx5IG1lYW5z IHRvIGNoYW5nZSBhbGwtdXBwZXJjYXNlIG5hbWVzIHRvIGxvd2VyY2FzZSBhbmQKLSAgICAgICAg ICBzcGFjZXMgdG8gdW5kZXJzY29yZS4KLQotICAgU0VUIEZUUCBVTklRVUUtU0VSVkVSLU5BTUVT IHsgT04sIE9GRiB9Ci0gICAgICAgICAgQXBwbGllcyBvbmx5IHRvIHVwbG9hZHMuIFRlbGxzIHRo ZSBzZXJ2ZXIgdG8gY3JlYXRlIG5ldywgdW5pcXVlCi0gICAgICAgICAgbmFtZXMgZm9yIGluY29t aW5nIGZpbGVzIHRoYXQgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyBleGlzdGluZwotICAgICAgICAg IGZpbGVzLiBPRkYgYnkgZGVmYXVsdCwgaW4gd2hpY2ggY2FzZSB0aGUgc2VydmVyIG92ZXJ3cml0 ZXMKLSAgICAgICAgICBleGlzdGluZyBmaWxlcyB3aXRoIG5ldyBmaWxlcyBvZiB0aGUgc2FtZSBu YW1lLiBXaGVuIE9OLCB0aGUKLSAgICAgICAgICBzZXJ2ZXIgdXNlcyBpdHMgb3duIGJ1aWx0LWlu IG1ldGhvZCBmb3IgY3JlYXRpbmcgbmV3IG5hbWVzIGZvcgotICAgICAgICAgIGluY29taW5nIGZp bGVzOyBmb3IgZXhhbXBsZSwgYXBwZW5kaW5nIGEgcGVyaW9kICguKSBhbmQgYSBudW1iZXIKLSAg ICAgICAgICB0byB0aGUgbmFtZS4gQ0FVVElPTjogVXNlIHRoaXMgb3B0aW9uIG9ubHkgaWYgeW91 IGRvIG5vdCBuZWVkIHRvCi0gICAgICAgICAgcmVmZXIgdG8gdGhlIGZpbGUgYWZ0ZXIgaXQgaXMg dXBsb2FkZWQsIHNpbmNlIEZUUCBwcm90b2NvbAotICAgICAgICAgIHByb3ZpZGVzIG5vIG1lY2hh bmlzbSBmb3IgdGhlIGNsaWVudCB0byBmaW5kIG91dCB3aGF0IG5hbWUgd2FzCi0gICAgICAgICAg YXNzaWduZWQgYnkgdGhlIHNlcnZlci4KLQotICAgU0VUIEZUUCBDT0xMSVNJT04geyAuLi4gfQot ICAgICAgICAgIFdoZW4gZG93bmxvYWRpbmcsIHdoYXQgdG8gZG8gaWYgYW4gaW5jb21pbmcgZmls ZSBoYXMgdGhlIHNhbWUKLSAgICAgICAgICBuYW1lIGFzIGFuIGV4aXN0aW5nIGZpbGUuIE9wdGlv bnMgYXJlIHRoZSBzYW1lIGFzIGZvciBTRVQgRklMRQotICAgICAgICAgIENPTExJU0lPTi4gSWYg dGhpcyBjb21tYW5kIGlzIG5vdCBnaXZlbiwgS2VybWl0J3MgcmVndWxhciBGSUxFCi0gICAgICAg ICAgQ09MTElTSU9OIHNldHRpbmcgaXMgdXNlZC4gSWYgdGhpcyBjb21tYW5kIGlzIGdpdmVuLCBp dAotICAgICAgICAgIG92ZXJyaWRlcyB0aGUgRklMRSBDT0xMSVNJT04gc2V0dGluZyBmb3IgRlRQ IHRyYW5zZmVycyBvbmx5LiBTZWUKLSAgICAgICAgICBbMjYyXVNlY3Rpb24gMy42LjIgZm9yIGRl dGFpbHMuCi0KLSAgIFNFVCBGVFAgVFlQRSB7IFRFWFQsIEJJTkFSWSwgVEVORVggfQotICAgICAg ICAgIENoYW5nZXMgdGhlIGRlZmF1bHQgdHJhbnNmZXIgbW9kZS4gV2hlbiBzZW5kaW5nICh1cGxv YWRpbmcpCi0gICAgICAgICAgZmlsZXMsIHRoaXMgY29tbWFuZCBoYXMgbm8gZWZmZWN0IHVubGVz cyB5b3UgZGlzYWJsZSBhdXRvbWF0aWMKLSAgICAgICAgICB0ZXh0L2JpbmFyeSBtb2RlIHN3aXRj aGluZyAoWzI2M11TZWN0aW9uIDQpIHdpdGggU0VUIEZJTEUgU0NBTgotICAgICAgICAgIE9GRiBv ciBTRVQgVFJBTlNGRVIgTU9ERSBNQU5VQUwuIFdoZW4gcmVjZWl2aW5nIChkb3dubG9hZGluZykK LSAgICAgICAgICBmaWxlcywgdGhpcyBjb21tYW5kIGVzdGFibGlzaGVzIHRoZSB0cmFuc2ZlciBt b2RlIHRvIGJlIHVzZWQKLSAgICAgICAgICB3aGVuIGEgZmlsZW5hbWUgZG9lcyBub3QgbWF0Y2gg YW55IG9mIEtlcm1pdCdzIHRleHQgb3IgYmluYXJ5Ci0gICAgICAgICAgZmlsZW5hbWUgcGF0dGVy bnMsIHVubGVzcyB5b3UgdXNlIFNFVCBGVFAgR0VULUZJTEVUWVBFLVNXSVRDSElORwotICAgICAg ICAgIG9yIFNFVCBUUkFOU0ZFUiBNT0RFIE1BTlVBTCB0byBkaXNhYmxlIGF1dG9tYXRpYyBzd2l0 Y2hpbmcsIGluCi0gICAgICAgICAgd2hpY2ggY2FzZSwgdGhpcyBjb21tYW5kIGVzdGFibGlzaGVz IHRoZSB0cmFuc2ZlciBtb2RlIGZvciBhbGwKLSAgICAgICAgICBkb3dubG9hZGVkIGZpbGVzLiBJ biBhbGwgY2FzZXMsIGhvd2V2ZXIsIHRoZSBGVFAgVFlQRSBjYW4gYmUKLSAgICAgICAgICBvdmVy cmlkZGVuIGluIGFueSBHRVQgb3IgUFVUIGNvbW1hbmQgYnkgaW5jbHVkaW5nIGEgL1RFWFQKLSAg ICAgICAgICAoL0FTQ0lJKSwgL0JJTkFSWSwgb3IgL1RFTkVYIHN3aXRjaC4gVGhlIEZUUCBUWVBF IGlzIGluZGVwZW5kZW50Ci0gICAgICAgICAgb2YgdGhlIEtlcm1pdCBGSUxFIFRZUEUgc2V0dGlu Zy4gVEVORVggaXMgdXNlZCBmb3Igc2VuZGluZyA4LWJpdAotICAgICAgICAgIGJpbmFyeSBmaWxl cyB0byAzNi1iaXQgcGxhdGZvcm1zIHN1Y2ggYXMgVE9QUy0xMCwgVE9QUy0yMCwgYW5kCi0gICAg ICAgICAgVEVORVgsIGFuZCBnZXR0aW5nIHRoZW0gYmFjayBhZ2Fpbi4gU3lub255bTogQVNDSUkg PSBURVhULiBOb3RlOgotICAgICAgICAgIHRoZXJlIGlzIGFsc28gYW4gRlRQIFRZUEUgY29tbWFu ZCwgd2hpY2ggZG9lcyB3aGF0IFNFVCBGVFAgVFlQRQotICAgICAgICAgIGRvZXMgYnV0IGFsc28g c2VuZHMgYSBUWVBFIGNvbW1hbmQgdG8gdGhlIHNlcnZlciBpbW1lZGlhdGVseSBpZgotICAgICAg ICAgIHRoZSBnaXZlbiB0eXBlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IG9uZS4KLQot ICAgSWYgeW91IHdhbnQgd2FudCBzcGVjaWZpYyBGVFAgcHJlZmVyZW5jZSBzZXR0aW5ncyB0byBi ZSBpbiBlZmZlY3QgZm9yCi0gICBhbGwgeW91ciBLZXJtaXQgRlRQIHNlc3Npb25zLCBwdXQgdGhl IGRlc2lyZWQgU0VUIEZUUCBjb21tYW5kcyBpbiB5b3VyCi0gICBLZXJtaXQgY3VzdG9taXphdGlv biBmaWxlICh+Ly5teWtlcm1yYyBpbiBVTklYLCBLOTVDVVNUT00uSU5JIGluCi0gICBXaW5kb3dz KS4KLQotICAgWyBbMjY0XVRvcCBdIFsgWzI2NV1GVFAgVG9wIF0gWyBbMjY2XUMtS2VybWl0IEhv bWUgXSBbIFsyNjddS2VybWl0IEhvbWUKLSAgIF0KLQotMy40LiBNYW5hZ2luZyBEaXJlY3Rvcmll cyBhbmQgRmlsZXMKLQotICAgSW4gS2VybWl0LCBjb21tYW5kcyBmb3IgZGlyZWN0b3J5IGFuZCBm aWxlIG1hbmFnZW1lbnQgY2FuIHJlZmVyIHRvOgotCi0gICAgICogVGhlIGxvY2FsIGNvbXB1dGVy Ci0gICAgICogQSByZW1vdGUgY29tcHV0ZXIgd2hlbiB5b3UgaGF2ZSBhIGNvbm5lY3Rpb24gdG8g YSBLZXJtaXQgc2VydmVyIG9yCi0gICAgICAgSUtTRC4KLSAgICAgKiBBIHJlbW90ZSBjb21wdXRl ciB3aGVuIHlvdSBoYXZlIGEgY29ubmVjdGlvbiB0byBhbiBGVFAgc2VydmVyLgotCi0gICAoVGhl cmUgY2FuIGFsc28gYmUgYW4gSFRUUCBjb25uZWN0aW9uLCBidXQgdGhlIGNvbW1hbmRzIGluIHRo aXMgc2VjdGlvbgotICAgZG9uJ3QgYXBwbHkgdG8gSFRUUCBjb25uZWN0aW9ucy4pCi0KLSAgIFRo dXMgaW4gZ2VuZXJhbCwgZWFjaCBzdWNoIGNvbW1hbmQgY29tZXMgaW4gdGhyZWUgZm9ybXM6Ci0K LSAgICAxLiBXaXRoIG5vIHByZWZpeCBpbiBDLUtlcm1pdCA4LjAuMjAwLCBpdCByZWZlcnMgdG8g dGhlIGxvY2FsIGNvbXB1dGVyCi0gICAgICAgKENELCBESVIsIGV0YykuIEluIEMtS2VybWl0IDgu MC4yMDEgYW5kIGxhdGVyLCBob3dldmVyLCB0aGUgImxvY3VzIgotICAgICAgIHN3aXRjaGVzIHRv IGF1dG9tYXRpY2FsbHkgdG8gdGhlIHJlbW90ZSBGVFAgc2VydmVyIHdoZW4geW91IG1ha2UgYW4K LSAgICAgICBGVFAgY29ubmVjdGlvbiAoc2VlIHRoZSBTRVQgTE9DVVMgZGVzY3JpcHRpb24gWzI2 OF1TZWN0aW9uIDcpOyB0aHVzCi0gICAgICAgQy1LZXJtaXQgOC4wLjIwMSBhY3RzIGFsbW9zdCBl eGFjdGx5IGxpa2UgYSByZWd1bGFyIEZUUCBjbGllbnQgd2hlbgotICAgICAgIGl0IGhhcyBhbiBG VFAgY29ubmVjdGlvbiwgeWV0IHN0aWxsIGFjdHMgbGlrZSBpdHNlbGYgb24gb3RoZXIga2luZHMK LSAgICAgICBvZiBjb25uZWN0aW9ucy4KLSAgICAyLiBXaXRoIHRoZSBSRU1PVEUgcHJlZml4LCBp dCBpcyBmb3IgYSBLZXJtaXQgc2VydmVyIChSRU1PVEUgQ0QsCi0gICAgICAgUkVNT1RFIERJUiku Ci0gICAgMy4gV2l0aCB0aGUgRlRQIHByZWZpeCwgaXQncyBmb3IgYW4gRlRQIHNlcnZlciAoRlRQ IENELCBGVFAgRElSKS4KLSAgICA0LiBBbHNvIHNlZSBbMjY5XVNlY3Rpb24gMy44LCB3aGljaCBl eHBsYWlucyAiUi1jb21tYW5kcyIgYW5kCi0gICAgICAgIkwtY29tbWFuZHMiLgotCi0gICBLZXJt aXQncyBGVFAgZmlsZSBhbmQgZGlyZWN0b3J5IG1hbmFnZW1lbnQgY29tbWFuZHMgYXJlIGFzIGZv bGxvd3MuCi0gICBXaGVuIGFuIFItY29tbWFuZCBpcyBpbmNsdWRlZCBpbiB0aGUgU3lub255bXMg bGlzdCwgYmUgc3VyZSB0byByZWFkCi0gICBbMjcwXVNlY3Rpb24gMy44IGFib3V0IHJ1bGVzIGZv ciB1c2Ugb2YgUi1jb21tYW5kcy4KLQotICAgRlRQIENEIFsgZGlyZWN0b3J5IF0KLSAgICAgICAg ICBUZWxscyB0aGUgRlRQIHNlcnZlciB0byBjaGFuZ2UgaXRzIGRlZmF1bHQgKHdvcmtpbmcpIGRp cmVjdG9yeQotICAgICAgICAgIHRvIHRoZSBvbmUgZ2l2ZW4sIHdoaWNoIHVzdWFsbHkgbXVzdCBi ZSBleHByZXNzZWQgaW4gdGhlIHN5bnRheAotICAgICAgICAgIG9mIHRoZSBzZXJ2ZXIgcGxhdGZv cm0gKFVOSVgsIFZNUywgZXRjKS4gSWYgdGhlIGRpcmVjdG9yeSBpcyBub3QKLSAgICAgICAgICBz cGVjaWZpZWQsIHRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgRlRQIHNlcnZlciAtLSBpdCBtaWdo dAotICAgICAgICAgIGNvbXBsYWluIHRoYXQgdGhlIGNvbW1hbmQgaXMgaWxsZWdhbCwgb3IgaXQg bWlnaHQgY2hhbmdlIHRvIHlvdXIKLSAgICAgICAgICBvcmlnaW5hbCBsb2dpbiBkaXJlY3Rvcnku IFN5bm9ueW1zOiBGVFAgQ1dEIChDaGFuZ2UgV29yZGluZwotICAgICAgICAgIERpcmVjdG9yeSk7 IFJDRC4KLQotICAgRlRQIENEVVAKLSAgICAgICAgICBUZWxscyB0aGUgRlRQIHNlcnZlciB0byBj aGFuZ2UgaXRzIGRlZmF1bHQgKHdvcmtpbmcpIGRpcmVjdG9yeQotICAgICAgICAgIHRvIHRoZSBw YXJlbnQgZGlyZWN0b3J5IG9mIGl0cyBjdXJyZW50IG9uZSAoZXF1aXZhbGVudCB0bwotICAgICAg ICAgICJjZCAuLiIgaW4gVU5JWCwgb3IgImNkIFstXSIgaW4gVk1TKS4gU3lub255bXM6IFJDRFVQ LCBGVFAgVVAuCi0KLSAgIEZUUCBQV0QKLSAgICAgICAgICBBc2tzIHRoZSBGVFAgc2VydmVyIHRv IHJlcG9ydCAoInByaW50IikgaXRzIGN1cnJlbnQgd29ya2luZwotICAgICAgICAgIGRpcmVjdG9y eS4gU3lub255bTogUlBXRC4KLQotICAgRlRQIE1LRElSIGRpcmVjdG9yeQotICAgICAgICAgIEFz a3MgdGhlIEZUUCBzZXJ2ZXIgdG8gY3JlYXRlIHRoZSBkaXJlY3Rvcnkgd2hvc2UgbmFtZSBpcyBn aXZlbi4KLSAgICAgICAgICBJbiBnZW5lcmFsLCB0aGUgbmFtZSBtdXN0IGJlIGluIHRoZSBzeW50 YXggb2YgdGhlIHNlcnZlcidzIGZpbGUKLSAgICAgICAgICBzeXN0ZW0sIGFuZCBpdCBtdXN0IGJl IGVpdGhlciBhYnNvbHV0ZSAoYSBmdWxsIHBhdGhuYW1lKSBvcgotICAgICAgICAgIHJlbGF0aXZl IHRvIHRoZSBzZXJ2ZXIncyBjdXJyZW50ICh3b3JraW5nKSBkaXJlY3RvcnkuIFRoaXMKLSAgICAg ICAgICBjb21tYW5kIGZhaWxzIGlmIHRoZSBkaXJlY3RvcnkgY2FuJ3QgYmUgY3JlYXRlZCBmb3Ig YW55IHJlYXNvbiwKLSAgICAgICAgICBpbmNsdWRpbmcgdGhhdCBpdCBleGlzdHMgYWxyZWFkeS4g U3lub255bTogUk1LRElSLgotCi0gICBGVFAgUk1ESVIgZGlyZWN0b3J5Ci0gICAgICAgICAgQXNr cyB0aGUgRlRQIHNlcnZlciB0byByZW1vdmUgdGhlIGRpcmVjdG9yeSB3aG9zZSBuYW1lIGlzIGdp dmVuLgotICAgICAgICAgIFRoZSBydWxlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIE1LRElSLCBwbHVz IGluIG1vc3QgY2FzZXMsIHRoZQotICAgICAgICAgIHNlcnZlciB3aWxsIG5vdCByZW1vdmUgYW55 IGRpcmVjdG9yeSB1bmxlc3MgaXQgaXMgZW1wdHkuCi0gICAgICAgICAgU3lub255bTogUlJNRElS LgotCi0gICBGVFAgRElSRUNUT1JZIFsgZmlsZXNwZWMgXSBbIHJlZGlyZWN0b3JzIF0KLSAgICAg ICAgICBUZWxscyB0aGUgRlRQIHNlcnZlciB0byBzZW5kIGEgZGlyZWN0b3J5IGxpc3Rpbmcgb2Yg dGhlCi0gICAgICAgICAgc3BlY2lmaWVkIGZpbGVzLiBJZiBubyBmaWxlc3BlYyBpcyBnaXZlbiwg dGhlIHNlcnZlciBsaXN0cyBhbGwKLSAgICAgICAgICBmaWxlcyBpbiBpdHMgY3VycmVudCB3b3Jr aW5nIGRpcmVjdG9yeS4gVGhlIHJlc3VsdHMgYXJlIGluCi0gICAgICAgICAgd2hhdGV2ZXIgZm9y bWF0IHRoZSBzZXJ2ZXIgY2hvb3NlcyB0byBzZW5kIHRoZW0uIFlvdSBjYW4gdXNlCi0gICAgICAg ICAgVU5JWC1saWtlIHJlZGlyZWN0b3JzIHRvIHNlbmQgdGhlIGxpc3RpbmcgdG8gYSBmaWxlIG9y IGEKLSAgICAgICAgICBwaXBlbGluZSwgZXhhY3RseSBhcyB3aXRoIHRoZSByZWd1bGFyIEtlcm1p dCBjbGllbnQvc2VydmVyCi0gICAgICAgICAgUkVNT1RFIERJUkVDVE9SWSBjb21tYW5kIChbMjcx XVVzaW5nIEMtS2VybWl0LCBDaGFwdGVyIDExKS4KLSAgICAgICAgICBTeW5vbnltOiBSRElSRUNU T1JZLiBFeGFtcGxlczoKLQotICAgIGZ0cCBkaXIgICAgICAgICAgICAgICAgICAgICAgICAgICA7 IFNob3cgbGlzdGluZyBvZiBhbGwgZmlsZXMgb24gc2NyZWVuCi0gICAgZnRwIGRpciAqLnR4dCAg ICAgICAgICAgICAgICAgICAgIDsgTGlzdCAqLnR4dCBmaWxlcyBvbiBzY3JlZW4KLSAgICBmdHAg ZGlyICoudHh0ID4gc29tZWZpbGUgICAgICAgICAgOyBQdXQgbGlzdGluZyBpbiBzb21lZmlsZQot ICAgIGZ0cCBkaXIgKi50eHQgPj4gc29tZWZpbGUgICAgICAgICA7IEFwcGVuZCBsaXN0aW5nIHRv IHNvbWVmaWxlCi0gICAgZnRwIGRpciAqLnR4dCB8IHNvcnQgPiBzb21lZmlsZSAgIDsgUHV0IHNv cnRlZCBsaXN0aW5nIGluIHNvbWVmaWxlCi0gICAgZnRwIGRpciB8IG1vcmUgICAgICAgICAgICAg ICAgICAgIDsgUnVucyBsaXN0IHRocm91Z2ggIm1vcmUiCi0gICAgZnRwIGRpciB8IHNvcnQgfCBt b3JlICAgICAgICAgICAgIDsgUnVucyBsaXN0IHRocm91Z2ggInNvcnQiIGFuZCAibW9yZSIKLQot ICAgRlRQIFZESVJFQ1RPUlkgWyBmaWxlc3BlYyBdIFsgcmVkaXJlY3RvcnMgXQotICAgICAgICAg ICJWZXJib3NlIiBkaXJlY3RvcnkuIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgRlRQIERJUkVDVE9S WQotICAgICAgICAgIGNvbW1hbmQgcHJpbWFyaWx5IGZvciB1c2Ugd2l0aCBERUNTWVNURU0tMjAg KFRPUFMtMjApIEZUUAotICAgICAgICAgIHNlcnZlcnMsIHdoaWNoIHNlbmQgb25seSBmaWxlbmFt ZXMgd2hlbiBnaXZlbiBhIERJUkVDVE9SWQotICAgICAgICAgIGNvbW1hbmQ7IHRoZSBWRElSRUNU T1JZIGNvbW1hbmQgbWFrZXMgdGhlbSBhbHNvIHNlbmQgZmlsZSBzaXplcywKLSAgICAgICAgICBk YXRlcywgYW5kIGF0dHJpYnV0ZXMuCi0KLSAgIEZUUCBDSEVDSyBmaWxlc3BlYwotICAgICAgICAg IEFza3MgdGhlIEZUUCBzZXJ2ZXIgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZSBleGlzdHMgb3IsIGlm IHRoZQotICAgICAgICAgIGZpbGVzcGVjIGNvbnRhaW5zIHdpbGRjYXJkcywgaWYgYW55IGZpbGVz IG1hdGNoLCBhbmQgdGhpcwotICAgICAgICAgIGNvbW1hbmQgc3VjY2VlZHMgb3IgZmFpbHMgYWNj b3JkaW5nbHkuCi0KLSAgIEZUUCBNT0RUSU1FIGZpbGVuYW1lCi0gICAgICAgICAgQXNrcyB0aGUg RlRQIHNlcnZlciwgdmlhIHRoZSBub3QteWV0LXN0YW5kYXJkIEZUUCBNRFRNIGNvbW1hbmQsCi0g ICAgICAgICAgdG8gc2VuZCB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgYW5kIHRpbWUgb2YgdGhlIGdp dmVuIGZpbGUuIFRoZQotICAgICAgICAgIHJlc3BvbnNlIHNob3VsZCBiZSBhIG51bWVyaWMgc3Ry aW5nIGluIHRoZSBmb3JtYXQ6Ci0gICAgICAgICAgeXl5eW1tZGRoaG1tc3N4eHh4eC4uLiB3aGVy ZSB5eXl5IGlzIHRoZSB5ZWFyLCBtbSBpcyB0aGUgbW9udGgsCi0gICAgICAgICAgZGQgaXMgdGhl IGRheSwgaGggaXMgdGhlIGhvdXIgKDAtMjMpLCBtbSBpcyB0aGUgbWludXRlLCBzcyBpcwotICAg ICAgICAgIHRoZSBzZWNvbmQsIGFuZCB4eHguLi4gaXMgdGhlIG9wdGlvbmFsIGZyYWN0aW9uIG9m IHRoZSBzZWNvbmQgKDAKLSAgICAgICAgICBvciBtb3JlIGRpZ2l0cykuIFRoZSBkYXRlIGFuZCB0 aW1lIGlzIGV4cHJlc3NlZCBpbiBVVEMgKEdNVCwKLSAgICAgICAgICBadWx1LCBaZXJvLU1lcmlk aWFuKS4gVGhlIHJlc3VsdCBpcyBhdmFpbGFibGUgcHJvZ3JhbW1hdGljYWxseQotICAgICAgICAg IGluIHRoZSBbMjcyXVx2KGZ0cF9tZXNzYWdlKSB2YXJpYWJsZSwgYW5kIGlzIHVuZGVyc3RhbmRh YmxlIGJ5Ci0gICAgICAgICAgS2VybWl0J3MgZGF0ZS10aW1lIHN3aXRjaGVzIGFuZCBmdW5jdGlv bnMuIEZvciBleGFtcGxlLCBzdXBwb3NlCi0gICAgICAgICAgd2Ugd2FudCB0byB1cGxvYWQgYWxs IGxvY2FsIGZpbGVzIHRoYXQgYXJlIG5ld2VyIHRoYW4gYQotICAgICAgICAgIHBhcnRpY3VsYXIg ZmlsZSBvbiB0aGUgc2VydmVyOgotCi0gIEMtS2VybWl0PiBmdHAgbW9kdGltZSBzaWducG9zdAot ICBDLUtlcm1pdD4gZWNobyBcdihmdHBfbWVzc2FnZSkKLSAgMjAwMTA4MDcxMTM1NDIuMDE0Ci0g IEMtS2VybWl0PiBmdHAgbXB1dCAvYWZ0ZXI6XHYoZnRwX21lc3NhZ2UpR01UICoKLQotICAgICAg ICAgIE5vdGUgdGhhdCB3ZSBtdXN0IGFwcGVuZCAiR01UIiB0byB0aGUgZGF0ZS10aW1lIHN0cmlu ZyB0byBsZXQKLSAgICAgICAgICB0aGUgL0FGVEVSIHN3aXRjaCBrbm93IHRoZSB0aW1lIGlzIEdN VCByYXRoZXIgdGhhbiBsb2NhbC4KLQotICAgRlRQIFNJWkUgZmlsZW5hbWUKLSAgICAgICAgICBB c2tzIHRoZSBGVFAgc2VydmVyIHRvIHNlbmQgdGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgZ2l2 ZW4KLSAgICAgICAgICBmaWxlLiBUaGUgcmVzdWx0IG1pZ2h0IHZhcnkgZGVwZW5kaW5nIG9uIHdo ZXRoZXIgdGhlIGN1cnJlbnQgRlRQCi0gICAgICAgICAgVFlQRSBpcyBiaW5hcnkgb3IgdGV4dCAo ImFzY2lpIikuIEZvciBhIHJlbGlhYmxlIGJ5dGUgY291bnQsIGRvCi0gICAgICAgICAgRlRQIFRZ UEUgQklOQVJZIGZpcnN0LiBUaGUgcmVzdWx0IGlzIGF2YWlsYWJsZSBwcm9ncmFtbWF0aWNhbGx5 Ci0gICAgICAgICAgaW4gdGhlIFsyNzNdXHYoZnRwX21lc3NhZ2UpIHZhcmlhYmxlLgotCi0gICBG VFAgQ0hNT0QgcGVybWlzc2lvbnMgZmlsZW5hbWUKLSAgICAgICAgICBUZWxscyB0aGUgRlRQIHNl cnZlciB0byBzZXQgdGhlIHBlcm1pc3Npb25zIChwcm90ZWN0aW9uKSBvZiB0aGUKLSAgICAgICAg ICBnaXZlbiBmaWxlIHRvIHRoZSBvbmVzIGdpdmVuLiBUaGUgcGVybWlzc2lvbnMgYW5kIGZpbGVu YW1lIG11c3QKLSAgICAgICAgICBiZSBnaXZlbiBpbiB3aGF0ZXZlciBzeW50YXggaXMgcmVxdWly ZWQgYnkgdGhlIHNlcnZlci4gRXhhbXBsZQotICAgICAgICAgIChmb3IgYSBVTklYLWJhc2VkIEZU UCBzZXJ2ZXIpOgotCi0gIGZ0cCBjaG1vZCA2NjQgb29mYS50eHQKLQotICAgICAgICAgIE5vdCBh bGwgc2VydmVycyBzdXBwb3J0IHRoaXMgY29tbWFuZC4gRm9yIG5vbi1VTklYLWJhc2VkCi0gICAg ICAgICAgc2VydmVycywgeW91IG1pZ2h0IG5lZWQgdG8gdXNlIEZUUCBRVU9URSBvciBGVFAgU0lU RSBhbmQgdGhlCi0gICAgICAgICAgYXBwcm9wcmlhdGUgcGxhdGZvcm0tc3BlY2lmaWMgRlRQIHNl cnZlciBjb21tYW5kLgotCi0gICBGVFAgVU1BU0sgWyBudW1iZXIgXQotICAgICAgICAgIFRoaXMg Y29tbWFuZCBpcyBwcm9iYWJseSBzcGVjaWZpYyB0byBVTklYLWJhc2VkIHNlcnZlcnM7IGl0IHNl dHMKLSAgICAgICAgICB0aGUgVU5JWCAidW1hc2siLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBwZXJt aXNzaW9ucyBtYXNrIGZvciBuZXcKLSAgICAgICAgICAoaW4gdGhpcyBjYXNlLCBpbmNvbWluZykg ZmlsZXMuIENydWRlbHkgcHV0LCB0aGUgVU5JWCB1bWFzayBpcwotICAgICAgICAgIGFuIG9jdGFs IHJlcHJlc2VudGF0aW9uIG9mIGEgYmluYXJ5IG51bWJlciBpbiBpbiB3aGljaCBhIDEgYml0Ci0g ICAgICAgICAgc3RhbmRzIGZvciBhIHBlcm1pc3Npb24gYml0IHRoYXQgbXVzdCBiZSAwLCBhbmQg YSAwIGJpdCBzdGFuZHMKLSAgICAgICAgICBmb3IgYSBwZXJtaXNzaW9uIGJpdCB0aGF0IGNhbiBi ZSAwIG9yIDEgZGVwZW5kaW5nIG9uIG90aGVyCi0gICAgICAgICAgZmFjdG9ycywgc3VjaCBhcyB0 aGUgcGVybWlzc2lvbnMgb2YgdGhlIHBhcmVudCBkaXJlY3RvcnkuCi0gICAgICAgICAgRXhhbXBs ZTogInVtYXNrIDAwNyIgcmVxdWlyZXMgdGhhdCBuZXcgZmlsZXMgYXJlIGNyZWF0ZWQgd2l0aG91 dAotICAgICAgICAgIHJlYWQvd3JpdGUvZXhlY3V0ZSB3b3JsZCBwZXJtaXNzaW9uLiBJZiB0aGUg bnVtYmVyIGlzIG5vdAotICAgICAgICAgIHNwZWNpZmllZCwgdGhlIHNlcnZlcidzIGN1cnJlbnQg dW1hc2sgaXMgcmVwb3J0ZWQuCi0KLSAgIEZUUCBSRU5BTUUgZmlsZW5hbWUgbmV3bmFtZQotICAg ICAgICAgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gcmVuYW1lIHRoZSBmaWxlIHdob3NlIG5hbWUg aXMgImZpbGVuYW1lIgotICAgICAgICAgIHRvICJuZXduYW1lIi4gV29ya3Mgb25seSBmb3Igb25l IGZpbGU7IGNhbiBub3QgYmUgdXNlZCB3aXRoCi0gICAgICAgICAgd2lsZGNhcmRzLiBUaGUgc2Vy dmVyJ3MgaW50ZXJwcmV0YXRpb24gb2YgIm5ld25hbWUiIGNhbiB2YXJ5IChpbgotICAgICAgICAg IHNvbWUgY2FzZXMgaXQgbXVzdCBiZSBhIGZpbGVuYW1lLCBpbiBvdGhlcnMgcGVyaGFwcyBpdCBj YW4gYWxzbwotICAgICAgICAgIGJlIGEgZGlyZWN0b3J5IG5hbWUsIGluIHdoaWNoIGNhc2UgaWYg dGhlIGZpbGVuYW1lIGRlbm90ZSBhCi0gICAgICAgICAgcmVndWxhciBmaWxlLCB0aGUgZmlsZSBt aWdodCBiZSBtb3ZlZCB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5KS4KLSAgICAgICAgICBTb21lIHNl cnZlcnMgbWlnaHQgYWxsb3cgZmlsZXMgdG8gYmUgcmVuYW1lZCAoIm1vdmVkIikgYmV0d2Vlbgot ICAgICAgICAgIHBoeXNpY2FsIGRpc2tzIG9yIHBhcnRpdGlvbnMsIG90aGVycyBtaWdodCBub3Qu IFN5bm9ueW06Ci0gICAgICAgICAgUlJFTkFNRS4KLQotICAgRlRQIERFTEVURSBbIHN3aXRjaGVz IF0gZmlsZXNwZWMgWyBmaWxlc3BlYyBbIC4uLiBdIF0KLSAgICAgICAgICBUZWxscyB0aGUgRlRQ IHNlcnZlciB0byBkZWxldGUgdGhlIGZpbGUgb3IgZmlsZXMgbGlzdGVkLiBFYWNoCi0gICAgICAg ICAgZmlsZSBzcGVjaWZpY2F0aW9uIG1heSwgYnV0IG5lZWQgbm90LCBjb250YWluIHdpbGRjYXJk Ci0gICAgICAgICAgY2hhcmFjdGVycyB0byBtYXRjaCBtdWx0aXBsZSBmaWxlcy4gRmlsZSBzcGVj aWZpY2F0aW9ucyBhbmQKLSAgICAgICAgICB3aWxkY2FyZCBzeW50YXggbXVzdCBiZSB0aG9zZSBv ZiB0aGUgc2VydmVyLiBBbnkgZmlsZQotICAgICAgICAgIHNwZWNpZmljYXRpb25zIHRoYXQgY29u dGFpbiBzcGFjZXMgbXVzdCBiZSBlbmNsb3NlZCBpbiBicmFjZXMgb3IKLSAgICAgICAgICBkb3Vi bGVxdW90ZXMuIEZUUCBERUxFVEUgc3dpdGNoZXMgYXJlOgotCi0gL0VSUk9SLUFDVElPTjogIC9G SUxFTkFNRVM6ICAgICAvTk9CQUNLVVBGSUxFUyAgL1FVSUVUCi0gL0VYQ0VQVDogICAgICAgIC9M QVJHRVItVEhBTjogICAvTk9ET1RGSUxFUyAgICAgL05PUEFHRQotIC9QQUdFICAgICAgICAgICAv UkVDVVJTSVZFICAgICAgL1NNQUxMRVItVEhBTjoKLQotICAgICAgICAgIFdoZW4gdXNlZCB3aXRo IEZUUCBERUxFVEUsIHRoZSAvUkVDVVJTSVZFIHN3aXRjaCBkZWxldGVzIGZpbGVzCi0gICAgICAg ICAgYnV0IG5vdCBkaXJlY3RvcmllcywgYW5kIGZ1cnRoZXJtb3JlIGRlcGVuZHMgb24gdGhlIHNl cnZlcgotICAgICAgICAgIHByb3ZpZGluZyByZWN1cnNpdmUgZmlsZSBsaXN0cywgd2hpY2ggaXMg bm90IHRoZSBub3JtYWwKLSAgICAgICAgICBiZWhhdmlvci4gRm9yIGZ1cnRoZXIgZGV0YWlscywg c2VlIHRoZSBkZXNjcmlwdGlvbnMgb2YgdGhlc2UKLSAgICAgICAgICBzd2l0Y2hlcyBpbiBbMjc0 XVNlY3Rpb24gMy42LiBTeW5vbnltczogRlRQIE1ERUxFVEUgKEtlcm1pdAotICAgICAgICAgIG1h a2VzIG5vIGRpc3RpbmN0aW9uIGJldHdlZW4gREVMRVRFIGFuZCBNREVMRVRFKTsgUkRFTEVURS4K LQotICAgRlRQIFRZUEUgeyBURVhULCBCSU5BUlksIFRFTkVYIH0KLSAgICAgICAgICBUZWxscyB0 aGUgRlRQIHNlcnZlciB0byBjaGFuZ2UgaXRzIGZpbGUtdHJhbnNmZXIgdHlwZSB0byB0aGUgb25l Ci0gICAgICAgICAgZ2l2ZW4sIGltbWVkaWF0ZWx5LiBTZWUgWzI3NV1TRVQgRlRQIFRZUEUgZm9y IGRldGFpbHMuCi0KLSAgIFsgWzI3Nl1Ub3AgXSBbIFsyNzddRlRQIFRvcCBdIFsgWzI3OF1DLUtl cm1pdCBIb21lIF0gWyBbMjc5XUtlcm1pdCBIb21lCi0gICBdCi0KLTMuNS4gVXBsb2FkaW5nIEZp bGVzIFdpdGggRlRQCi0KLSAgIFVwbG9hZGluZyBtZWFucyBzZW5kaW5nIGZpbGVzIGZyb20gdGhl IGNsaWVudCAoS2VybWl0KSB0byB0aGUgRlRQCi0gICBzZXJ2ZXIuIFRoZSBiYXNpYyBjb21tYW5k IGZvciB1cGxvYWRpbmcgZmlsZXMgd2l0aCBGVFAgaXMgUFVUOgotCi0gICBGVFAgUFVUIFsgc3dp dGNoZXMgXSBbIGZpbGVzcGVjIFsgYXMtbmFtZSBdIF0KLSAgICAgICAgICBVcGxvYWRzIChzZW5k cykgdGhlIGZpbGUgb3IgZmlsZXMgdGhhdCBtYXRjaCB0aGUgZmlsZQotICAgICAgICAgIHNwZWNp ZmljYXRpb24sIHdoaWNoIG1heSBpbmNsdWRlIHdpbGRjYXJkcywgdG8gdGhlIHNlcnZlci4gSWYg bm8KLSAgICAgICAgICBmaWxlc3BlYyBpcyBnaXZlbiwgdGhlIG5hbWVzIG9mIGZpbGVzIHRvIHNl bmQgYXJlIHRha2VuIGZyb20gdGhlCi0gICAgICAgICAgL0xJU1RGSUxFOiBmaWxlLCBpZiBhbnks IG90aGVyd2lzZSBmcm9tIHRoZSBTRU5ELUxJU1QsIGlmIGFueS4KLSAgICAgICAgICBVbmxlc3Mg eW91IGdvIG91dCBvZiB5b3VyIHdheSB0byBwcmV2ZW50IGl0LCBLZXJtaXQgZGV0ZXJtaW5lcwot ICAgICAgICAgIHRoZSB0cmFuc2ZlciBtb2RlICh0ZXh0IG9yIGJpbmFyeSkgZm9yIGVhY2ggZmls ZSBhdXRvbWF0aWNhbGx5LAotICAgICAgICAgIGFuZCBzd2l0Y2hlcyBhdXRvbWF0aWNhbGx5IG9u IGEgcGVyLWZpbGUgYmFzaXMuIElmIGFuIGFzLW5hbWUgaXMKLSAgICAgICAgICBnaXZlbiwgdGhl IGZpbGUgaXMgc2VudCB1bmRlciB0aGF0IG5hbWUgaW5zdGVhZCBvZiBpdHMgb3duIChpZgotICAg ICAgICAgIGFuIGFzLW5hbWUgaXMgZ2l2ZW4gd2l0aCBhIHdpbGRjYXJkIGZpbGVzcGVjLCB0aGUg cmVzdWx0IGlzIGEKLSAgICAgICAgICBiaXQgbW9yZSBjb21wbGljYXRlZCwgYW5kIGlzIGV4cGxh aW5lZCBsYXRlciBpbiB0aGlzIHNlY3Rpb24pLgotCi0gICBVbmxpa2Ugbm9ybWFsIEZUUCBjbGll bnRzLCBLZXJtaXQgZG9lcyBub3QgcHJvbXB0IHlvdSBieSBkZWZhdWx0IChvciBhdAotICAgYWxs KSBmb3IgZWFjaCBmaWxlOyBpdCBqdXN0IHNlbmRzIHRoZW0sIGp1c3QgYXMgaXQgZG9lcyB3aXRo IEtlcm1pdAotICAgcHJvdG9jb2wuIFRoZSBmaWxlc3BlYyBjYW4gYmUgYSBsaXRlcmFsIGZpbGVu YW1lIG9yIGEgS2VybWl0IHBhdHRlcm4sCi0gICBkZXNjcmliZWQgaW46Ci0KLSAgWzI4MF1odHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOQotCi0gICBLZXJt aXQgcGF0dGVybnMgYXJlIGVxdWl2YWxlbnQgdG8gQy1TaGVsbCBwYXR0ZXJucyBhbmQgcHJvdmlk ZSBhIGZhaXIKLSAgIGFtb3VudCBvZiBmbGV4aWJpbGl0eSBpbiBzZWxlY3Rpbmcgd2hpY2ggZmls ZXMgdG8gc2VuZCwgd2hpY2ggaXMKLSAgIGF1Z21lbnRlZCBieSB0aGUgZmlsZS1zZWxlY3Rpb24g c3dpdGNoZXMgcHJlc2VudGVkIGluIFsyODFdU2VjdGlvbgotICAgMy41LjEuCi0KLSAgIEZUUCBN UFVUIFsgc3dpdGNoZXMgXSBmaWxlc3BlYyBbIGZpbGVzcGVjIFsgLi4uIF0gXQotICAgICAgICAg IEZUUCBNUFVUIGlzIGp1c3QgbGlrZSBGVFAgUFVUIGV4Y2VwdCBpdCBhbGxvd3MgeW91IHRvIGdp dmUgbW9yZQotICAgICAgICAgIHRoYW4gb25lIGZpbGUgc3BlY2lmaWNhdGlvbiwgYW5kIGl0IGRv ZXMgbm90IGFsbG93IGFuIGFzLW5hbWUgaW4KLSAgICAgICAgICB0aGUgZmlsZSBsaXN0LiBIb3dl dmVyLCBhcy1uYW1lcyBjYW4gYmUgZ2l2ZW4gdG8gZWl0aGVyIFBVVCBvcgotICAgICAgICAgIE1Q VVQgd2l0aCB0aGUgL0FTLU5BTUU6IHN3aXRjaC4KLQotICAgSWYgYSBQVVQgb3IgTVBVVCBjb21t YW5kIHJlc3VsdHMgaW4gb25lIGZpbGUgYmVpbmcgdXBsb2FkZWQsIGl0Ci0gICBzdWNjZWVkcyBp ZiB0aGUgZmlsZSBpcyB1cGxvYWRlZCBjb21wbGV0ZWx5IGFuZCBmYWlscyBvdGhlcndpc2UuIElm Ci0gICBtb3JlIHRoYW4gb25lIGZpbGUgaXMgc2VsZWN0ZWQgZm9yIHVwbG9hZCwgc3VjY2VzcyBv ciBmYWlsdXJlIGRlcGVuZHMKLSAgIG9uIHRoZSBbMjgyXUZUUCBFUlJPUi1BQ1RJT04gc2V0dGlu ZzsgaWYgaXQgaXMgUFJPQ0VFRCAodGhlIGRlZmF1bHQKLSAgIHNldHRpbmcpLCB0aGVuIHRoZSBb TV1QVVQgY29tbWFuZCBzdWNjZWVkcyBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZpbGVzCi0gICB3 YXMgY29tcGxldGVseSB1cGxvYWRlZCwgYW5kIGZhaWxzIG90aGVyd2lzZSwgSWYgRlRQIEVSUk9S LUFDVElPTiBpcwotICAgUVVJVCwgdGhlIFtNXVBVVCBjb21tYW5kIHN1Y2NlZWRzIGlmIGFsbCBz ZWxlY3RlZCBmaWxlcyB3ZXJlIHVwbG9hZGVkCi0gICBzdWNjZXNzZnVsbHksIGFuZCBmYWlscyBp ZiBhbnkgZmlsZSBmYWlsZWQuCi0KLSAgIEZUUCB1cGxvYWRzIG1heSBiZSBpbnRlcnJ1cHRlZCBq dXN0IGxpa2UgS2VybWl0IHVwbG9hZHMuIFdoaWxlIHRoZQotICAgdHJhbnNmZXIgaXMgaW4gcHJv Z3Jlc3MsIHR5cGU6Ci0KLSAgWCB0byBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgZmlsZSBhbmQgZ28g b24gdG8gdGhlIG5leHQgZmlsZS4KLSAgWiB0byBjYW5jZWwgdGhlIGN1cnJlbnQgZmlsZSBhbmQg YWxsIHJlbWFpbmluZyBmaWxlcy4KLSAgXkMgKENvbnRyb2wtQyk6IExpa2UgWiwgYnV0IG1pZ2h0 IGFjdCBtb3JlIHF1aWNrbHkuCi0KLSAgIE1QVVQgbWF5IGJlIHVzZWQgYXMgaW4gcmVndWxhciBG VFAgY2xpZW50cywgYnV0IGl0IGlzIG5vdCByZXF1aXJlZCB0bwotICAgc2VuZCBtdWx0aXBsZSBm aWxlczsgaW4gS2VybWl0IGl0IGlzIHJlcXVpcmVkIG9ubHkgaWYgeW91IHdhbnQgdG8gZ2l2ZQot ICAgbXVsdGlwbGUgZmlsZSBzcGVjaWZpY2F0aW9ucy4gRXhhbXBsZXM6Ci0KLSAgZnRwIHB1dCBv b2ZhLnR4dCAgICAgICAgICAgICAgIDsgU2VuZCBhIHNpbmdsZSBmaWxlIG9vZmEudHh0Ci0gIGZ0 cCBwdXQgb29mYS50eHQgYnVkZ2V0LnR4dCAgICA7IFNlbmQgc2luZ2xlIGZpbGUgb29mYS50eHQg YXMgYnVkZ2V0LnR4dAotICBmdHAgcHV0ICoudHh0ICAgICAgICAgICAgICAgICAgOyBTZW5kIGFs bCAqLnR4dCBmaWxlcwotICBmdHAgbXB1dCAqLnR4dCAgICAgICAgICAgICAgICAgOyBTZW5kIGFs bCAqLnR4dCBmaWxlcyAoc2FtZSBhcyAicHV0ICoudHh0IikKLSAgZnRwIG1wdXQgKi50eHQgZm9v LmJhciAgICAgICAgIDsgU2VuZCBhbGwgKi50eHQgZmlsZXMgcGx1cyBmb28uYmFyCi0KLSAgIFRo ZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIFBVVCBhbmQgTVBVVCBpcyBpbXBvcnRhbnQgb25seSB3aGVu IG1vcmUgdGhhbgotICAgb25lIGZpbGVzcGVjIGlzIGdpdmVuLCBqdXN0IGxpa2UgdGhlIGRpc3Rp bmN0aW9uIGJldHdlZW4gS2VybWl0IFNFTkQKLSAgIGFuZCBNU0VORDoKLQotICBmdHAgcHV0IG9v ZmEudHh0IGJ1ZGdldC50eHQgICAgOyBTZW5kIG9vZmEudHh0IEFTIGJ1ZGdldC50eHQKLSAgZnRw IG1wdXQgb29mYS50eHQgYnVkZ2V0LnR4dCAgIDsgU2VuZCBvb2ZhLnR4dCBBTkQgYnVkZ2V0LnR4 dAotCi0gICBJZiB0aGUgc291cmNlIGZpbGUgc3BlY2lmaWNhdGlvbiBpbmNsdWRlcyBhbnkgcGF0 aCBzZWdtZW50cywgZm9yCi0gICBleGFtcGxlOgotCi0gIHB1dCAvdG1wL29vZmEudHh0Ci0gIHB1 dCBzdWJkaXIvYW5vdGhlci9hbmRhbm90aGVyL29vZmEudHh0Ci0KLSAgIHRoZSBwYXRoIHBvcnRp b24gaXMgc3RyaXBwZWQgZnJvbSB0aGUgZmlsZW5hbWUgdGhhdCBpcyBzZW50IHRvIHRoZQotICAg c2VydmVyLiBIb3dldmVyLCBpZiBhbiBhcy1uYW1lIGNvbnRhaW5zIGEgcGF0aCwgaXQgaXMgcmV0 YWluZWQuCi0gICBFeGFtcGxlczoKLQotICBmdHAgcHV0IC91c3IvZG9jL29vZmEudHh0ICAgICAg OyBTZW5kIGFzICJvb2ZhLnR4dCIuCi0gIGZ0cCBwdXQgb29mYS50eHQgL3RtcC9vb2ZhLnR4dCA7 IFNlbmQgYXMgIi90bXAvb29mYS50eHQiCi0KLSAgIFRoZSBsYXR0ZXIgZXhhbXBsZSBzZW5kcyB0 aGUgZmlsZSBvb2ZhLnR4dCBmcm9tIHlvdXIgY3VycmVudCBsb2NhbAotICAgZGlyZWN0b3J5IHRv IHRoZSBzZXJ2ZXIncyAvdG1wIGRpcmVjdG9yeS4gVGhpcyB3b3JrcyBvbmx5IGlmIHRoZSBzZXJ2 ZXIKLSAgIHVzZXMgdGhlIHNhbWUgZGlyZWN0b3J5IG5vdGF0aW9uIHRoYXQgeW91IHVzZWQgaW4g dGhlIGFzLW5hbWUgQU5EIHRoZQotICAgZ2l2ZW4gZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIG9u IHRoZSBzZXJ2ZXIgQU5EIGlmIHlvdSBoYXZlIHdyaXRlCi0gICBhY2Nlc3MgdG8gaXQuCi0KLSAg IFVzZSBjYXV0aW9uIHdoZW4gdXBsb2FkaW5nIGZyb20gYSBjYXNlLXNlbnNpdGl2ZSBmaWxlIHN5 c3RlbSwgc3VjaCBhcwotICAgVU5JWCwgdG8gYSBmaWxlIHN5c3RlbSB0aGF0IGlzIG5vdCBjYXNl IHNlbnNpdGl2ZSwgc3VjaCBhcyBXaW5kb3dzIG9yCi0gICBWTVMuIElmIHlvdSBoYXZlIHR3byBm aWxlcyBpbiBVTklYLCBBQSBhbmQgYWEgYW5kIHVwbG9hZCBib3RoIG9mIHRoZW0sCi0gICB0aGUg c2Vjb25kIG9uZSB3aWxsIG92ZXJ3cml0ZSB0aGUgZmlyc3QuIFRoZSBvbmx5IHdheSBhcm91bmQg dGhpcwotICAgcHJvdmlkZWQgYnkgRlRQIHByb3RvY29sIGlzIGl0cyAidW5pcXVlIHNlcnZlciBu YW1lcyIgZmVhdHVyZSAoU0VUIEZUUAotICAgVU5JUVVFLVNFUlZFUi1OQU1FUyBvciB0aGUgL1VO SVFVRSBzd2l0Y2ggZGVzY3JpYmVkIGJlbG93KS4KLQotMy41LjEuIEZUUCBQVVQgU3dpdGNoZXMK LQotICAgRlRQIFBVVCBhbmQgTVBVVCBhcmUgc2ltaWxhciBpbiBmb3JtYXQgYW5kIGJlaGF2aW9y IHRvIHRoZSByZWd1bGFyCi0gICBLZXJtaXQgU0VORCBhbmQgTVNFTkQgY29tbWFuZHMsIGFuZCB0 aGV5IGFsbG93IG1vc3Qgb2YgdGhlIHNhbWUKLSAgIG9wdGlvbmFsIHN3aXRjaGVzOgotCi1DLUtl cm1pdD5mdHAgcHV0ID8gRmlsZW5hbWUsIG9yIHN3aXRjaCwgb25lIG9mIHRoZSBmb2xsb3dpbmc6 Ci0gL2FmdGVyOiAgICAgICAgICAgICAgICAgL2xhcmdlci10aGFuOiAgICAgICAgICAgL3JlbmFt ZS10bzoKLSAvYXJyYXk6ICAgICAgICAgICAgICAgICAvbGlzdGZpbGU6ICAgICAgICAgICAgICAv c2VydmVyLWNoYXJhY3Rlci1zZXQ6Ci0gL2FzLW5hbWU6ICAgICAgICAgICAgICAgL2xvY2FsLWNo YXJhY3Rlci1zZXQ6ICAgL3NlcnZlci1yZW5hbWUtdG86Ci0gL2JlZm9yZTogICAgICAgICAgICAg ICAgL21vdmUtdG86ICAgICAgICAgICAgICAgL3NpbXVsYXRlCi0gL2JpbmFyeSAgICAgICAgICAg ICAgICAgL25vYmFja3VwZmlsZXMgICAgICAgICAgL3NtYWxsZXItdGhhbjoKLSAvY29tbWFuZCAg ICAgICAgICAgICAgICAvbm9kb3RmaWxlcyAgICAgICAgICAgICAvdGVuZXgKLSAvZGVsZXRlICAg ICAgICAgICAgICAgICAvbm9mb2xsb3dsaW5rcyAgICAgICAgICAvdGV4dAotIC9kb3RmaWxlcyAg ICAgICAgICAgICAgIC9ub3QtYWZ0ZXI6ICAgICAgICAgICAgIC90cmFuc3BhcmVudAotIC9lcnJv ci1hY3Rpb246ICAgICAgICAgIC9ub3QtYmVmb3JlOiAgICAgICAgICAgIC90eXBlOgotIC9leGNl cHQ6ICAgICAgICAgICAgICAgIC9wZXJtaXNzaW9uczogICAgICAgICAgIC91cGRhdGUKLSAvZmls ZW5hbWVzOiAgICAgICAgICAgICAvcXVpZXQgICAgICAgICAgICAgICAgICAvdW5pcXVlLXNlcnZl ci1uYW1lcwotIC9maWx0ZXI6ICAgICAgICAgICAgICAgIC9yZWNvdmVyCi0gL2ZvbGxvd2xpbmtz ICAgICAgICAgICAgL3JlY3Vyc2l2ZQotCi0gICBTaW5jZSBtb3N0IG9mIHRoZXNlIHN3aXRjaGVz IGFyZSBjb21tb24gdG8gS2VybWl0J3MgU0VORCBhbmQgTVNFTkQKLSAgIGNvbW1hbmRzLCB0aGV5 IGRlc2NyaWJlZCBvbmx5IGJyaWVmbHkgaGVyZS4gRm9yIGdyZWF0ZXIgZGV0YWlsIHNlZToKLQot ICAgICBbMjgzXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 MS41IChleHBsYW5hdGlvbgotICAgb2Ygc3dpdGNoZXMpCi0gICAgIFsyODRdaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjcKLSAgIChmaWxlLXRyYW5zZmVy IHN3aXRjaGVzKQotCi0gICBGaXJzdCB0aGUgZmlsZS1zZWxlY3Rpb24gc3dpdGNoZXM6Ci0KLSAg IC9BRlRFUjpkYXRlLXRpbWUKLSAgIC9CRUZPUkU6ZGF0ZS10aW1lCi0gICAvTk9ULUFGVEVSOmRh dGUtdGltZQotICAgL05PVC1CRUZPUkU6ZGF0ZS10aW1lCi0gICAgICAgICAgT25seSBzZW5kIHRo b3NlIGZpbGVzIG1vZGlmaWVkIG9uIG9yIGFmdGVyIG9yIGJlZm9yZSB0aGUgZ2l2ZW4KLSAgICAg ICAgICBkYXRlIGFuZCB0aW1lLiBUaGVzZSBzd2l0Y2hlcyBjYW4gYmUgY29tYmluZWQgdG8gc2Vs ZWN0IGZpbGVzCi0gICAgICAgICAgbW9kaWZpZWQgYmV0d2VlbiB0d28gZGF0ZS90aW1lcy4gVmFy aW91cyBkYXRlLXRpbWUgZm9ybWF0cyBhcmUKLSAgICAgICAgICBhY2NlcHRlZDsgaWYgdGhlIGRh dGUtdGltZSBjb250YWlucyBzcGFjZXMsIGl0IG11c3QgYmUgZW5jbG9zZWQKLSAgICAgICAgICBp biBicmFjZXMgb3IgZG91YmxlcXVvdGVzLiBTZWUKLSAgICAgICAgICBbMjg1XWh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS42IGFuZAotICAgICAgICAgIFsy ODZdU2VjdGlvbiA4LjEzIG9mIHRoaXMgZG9jdW1lbnQgZm9yIGRldGFpbHMgYWJvdXQgZGF0ZS10 aW1lCi0gICAgICAgICAgZm9ybWF0cy4gRXhhbXBsZXM6Ci0KLSAgZnRwIHB1dCAvYWZ0ZXI6ezEg amFuIDIwMDAgMDowMDowMH0gKgotICBmdHAgcHV0IC9hZnRlcjotNWRheXMgKgotCi0gICAvTEFS R0VSLVRIQU46bnVtYmVyCi0gICAvU01BTExFUi1USEFOOm51bWJlcgotICAgICAgICAgIE9ubHkg c2VuZCBmaWxlcyBsYXJnZXIgKHNtYWxsZXIpIHRoYW4gdGhlIGdpdmVuIG51bWJlciBvZiBieXRl cwotICAgICAgICAgIChvY3RldHMpLiBUaGVzZSBzd2l0Y2hlcyBjYW4gYmUgY29tYmluZWQgdG8g c2VsZWN0IGZpbGVzIGluIGEKLSAgICAgICAgICBjZXJ0YWluIHNpemUgcmFuZ2UuCi0KLSAgIC9U WVBFOntURVhULEJJTkFSWX0KLSAgICAgICAgICBPbmx5IHNlbmQgZmlsZXMgdGhhdCBhcmUgdGhl IGdpdmVuIHR5cGUsIHdoaWNoIGlzIGRldGVybWluZWQgZm9yCi0gICAgICAgICAgZWFjaCBmaWxl IGp1c3QgYmVmb3JlIHNlbmRpbmcgaXQgYnkgZmlsZSBzY2FubmluZy4gQklOQVJZCi0gICAgICAg ICAgaW5jbHVkZXMgVEVORVg7IGlmIHlvdSBoYXZlIGluY2x1ZGVkIGEgL1RFTkVYIHN3aXRjaCwg b3IKLSAgICAgICAgICBwcmV2aW91c2x5IGdpdmVuIGEgW1NFVF0gRlRQIFRZUEUgVEVORVggY29t bWFuZCwgYmluYXJ5IGZpbGVzCi0gICAgICAgICAgYXJlIHNlbnQgaW4gVEVORVgsIHJhdGhlciB0 aGFuIEJJTkFSWSBtb2RlLgotCi0gICAvW05PXURPVEZJTEVTCi0gICAgICAgICAgW0Rvbid0XSBp bmNsdWRlIGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggZG90ICguKS4gQnkKLSAgICAgICAg ICBkZWZhdWx0LCBzdWNoIGZpbGVzIGFyZSBub3QgaW5jbHVkZWQgdW5sZXNzIHlvdXIgZmlsZXNw ZWMKLSAgICAgICAgICBleHBsaWNpdGx5IG1lbnRpb25zIHRoZW0uCi0KLSAgIC9OT0JBQ0tVUEZJ TEVTCi0gICAgICAgICAgRG9uJ3QgaW5jbHVkZSBmaWxlcyB3aG9zZSBuYW1lcyBlbmQgd2l0aCAu fm5ubn4sIHdoZXJlIG5ubiBpcyBhCi0gICAgICAgICAgbnVtYmVyLCBlLmcuIG9vZmEudHh0Ln4y N34uIFRoZXNlIGFyZSBiYWNrdXAgZmlsZXMgY3JlYXRlZCBieQotICAgICAgICAgIEtlcm1pdCwg RU1BQ1MsIGFuZCBvdGhlciBhcHBsaWNhdGlvbnMuIEJ5IGRlZmF1bHQsIGJhY2t1cCBmaWxlcwot ICAgICAgICAgIGFyZSBpbmNsdWRlZC4KLQotICAgL05PRk9MTE9XTElOS1MKLSAgICAgICAgICAo VU5JWCBvbmx5KSBTa2lwIG92ZXIgc3ltYm9saWMgbGlua3MgcmF0aGVyIHRoYW4gZm9sbG93aW5n IHRoZW0KLSAgICAgICAgICAoZGVmYXVsdCkuIFRoaXMgYXBwbGllcyB0byB3aWxkY2FyZCBhbmQv b3IgcmVjdXJzaXZlIFtNXVBVVHM7IGlmCi0gICAgICAgICAgYSBzaW5nbGUgZmlsZW5hbWUgaXMg Z2l2ZW4sIGFuZCBpdCBoYXBwZW5zIHRvIGJlIGEgc3ltYm9saWMKLSAgICAgICAgICBsaW5rLCB0 aGUgZmlsZSBpdCBwb2ludHMgdG8gaXMgc2VudC4KLQotICAgL0ZPTExPV0xJTktTCi0gICAgICAg ICAgKFVOSVggb25seSkgQWx3YXlzIGZvbGxvdyAocmVzb2x2ZSkgc3ltYm9saWMgbGlua3MsIGV2 ZW4gaW4KLSAgICAgICAgICB3aWxkY2FyZCBvciByZWN1cnNpdmUgW01dUFVUcy4gVXNlIHdpdGgg Y2F1dGlvbi4gV2F0Y2ggb3V0IGZvcgotICAgICAgICAgIGNpcmN1bGFyIGxpbmtzLCBlbmRsZXNz IGxvb3BzLCBldGMuCi0KLSAgIC9FWENFUFQ6cGF0dGVybgotICAgICAgICAgIEV4Y2VwdGlvbiBs aXN0IC0tIGRvbid0IHNlbmQgZmlsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIGdpdmVuCi0gICAg ICAgICAgcGF0dGVybi4gU2VlIFsyODddU2VjdGlvbiAxLjUuNCBvZiB0aGUgWzI4OF1DLUtlcm1p dCA3LjAgVXBkYXRlCi0gICAgICAgICAgTm90ZXMgZm9yIGRldGFpbHMuIElmIHlvdSB3YW50IHRv IGV4Y2x1ZGUgYSBkaXJlY3RvcnkgZnJvbSBhCi0gICAgICAgICAgcmVjdXJzaXZlIFtNXVBVVCwg dXNlIC9FWENFUFQ6e2Rpcm5hbWUvKn0uCi0KLSAgIC9SRUNVUlNJVkUKLSAgICAgICAgICBTZW5k cyB0aGUgZGVzaXJlZCBmaWxlcyBmcm9tIHRoZSBjdXJyZW50IChvciBnaXZlbikgZGlyZWN0b3J5 LAotICAgICAgICAgIHBsdXMgYWxsIGRpcmVjdG9yaWVzIGJlbmVhdGggaXQsIGluY2x1ZGluZyBl bXB0eSBkaXJlY3RvcmllcywKLSAgICAgICAgICByZXBsaWNhdGluZyB0aGUgZGlyZWN0b3J5IHN0 cnVjdHVyZSBvbiB0aGUgc2VydmVyLiBObyBzcGVjaWFsCi0gICAgICAgICAgY2FwYWJpbGl0aWVz IGFyZSByZXF1aXJlZCBpbiB0aGUgc2VydmVyLCBidXQgb2YgY291cnNlIHlvdXIKLSAgICAgICAg ICBsb2dpbiBJRCBvbiB0aGUgc2VydmVyIG11c3QgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgYWNjZXNz IGFuZAotICAgICAgICAgIHBlcm1pc3Npb24gdG8gY3JlYXRlIGRpcmVjdG9yaWVzLiBSZWN1cnNp dmUgUFVUcyB3b3JrIG5vdCBvbmx5Ci0gICAgICAgICAgYmV0d2VlbiBsaWtlIHBsYXRmb3JtcyAo ZS5nLiBVTklYIHRvIFVOSVgpIGJ1dCBhbHNvIGJldHdlZW4KLSAgICAgICAgICB1bmxpa2Ugb25l cyAoZS5nLiBVTklYIHRvIFZNUyBvciBXaW5kb3dzKSwgaW4gd2hpY2ggY2FzZQotICAgICAgICAg IHRleHQtZmlsZSBmb3JtYXQgZGlmZmVyZW5jZXMgYXJlIGhhbmRsZWQgYnkgS2VybWl0J3MgYXV0 b21hdGljCi0gICAgICAgICAgdGV4dC9iaW5hcnkgbW9kZSBzd2l0Y2hpbmcgKFsyODldU2VjdGlv biA0KSBhbmQgY2hhcmFjdGVyLXNldAotICAgICAgICAgIHRyYW5zbGF0aW9uIChbMjkwXVNlY3Rp b24gMy43KS4gU3lub255bTogL1NVQkRJUkVDVE9SSUVTLgotCi0gICAvVVBEQVRFCi0gICAgICAg ICAgU2VuZCBvbmx5IGZpbGVzIHRoYXQgaGF2ZSBjaGFuZ2VkIHNpbmNlIGxhc3QgdGltZSAoWzI5 MV1TZWN0aW9uCi0gICAgICAgICAgMy41LjIpLgotCi0gICAvQVJSQVk6YXJyYXluYW1lCi0gICAg ICAgICAgVGhlICJmaWxlIiB0byBiZSBzZW50IGlzIGFuIGFycmF5LCBvciBhIHNlZ21lbnQgb2Yg b25lLCByYXRoZXIKLSAgICAgICAgICB0aGFuIGEgcmVhbCBmaWxlLiBJbiB0aGlzIGNhc2UgdGhl IG90aGVyIHNlbGVjdGlvbiBzd2l0Y2hlcwotICAgICAgICAgIGRvbid0IGFwcGx5LiBUaGUgYXJy YXkgY29udGVudHMgYXJlIHNlbnQgaW4gdGV4dCBtb2RlLCBhbmQgZWFjaAotICAgICAgICAgIGFy cmF5IGVsZW1lbnQgaXMgdHJlYXRlZCBhcyBhIGxpbmUuIEV4YW1wbGU6Ci0KLSAgZnRwIHB1dCAv YXMtbmFtZTphcnJheS50eHQgL2FycmF5OiZhCi0KLSAgICAgICAgICAob3IsIHRvIHNlbmQgYSBz ZWdtZW50IG9mIHRoZSBhcnJheSwgL2FycmF5OiZhWzEwMDoxOTldKS4gSWYgeW91Ci0gICAgICAg ICAgZG9uJ3QgaW5jbHVkZSBhbiAvQVMtTkFNRSwgYSBuYW1lIG9mICJfYXJyYXlfeF8iIGlzIHVz ZWQgKHdoZXJlCi0gICAgICAgICAgeCBpcyB0aGUgYXJyYXkgbGV0dGVyKS4gSWYgeW91IGluY2x1 ZGUgdGhpcyBzd2l0Y2gsIG1vc3Qgb3RoZXIKLSAgICAgICAgICBzd2l0Y2hlcyBhcmUgbWVhbmlu Z2xlc3MgYW5kIGlnbm9yZWQuCi0KLSAgIC9DT01NQU5ECi0gICAgICAgICAgVGhlICJmaWxlIiB0 byBiZSBzZW50IGlzIHRoZSBzdGFuZGFyZCBvdXRwdXQgb2YgYSBjb21tYW5kLAotICAgICAgICAg IHJhdGhlciB0aGFuIGEgcmVhbCBmaWxlLiBJdCBpcyBzZW50IGluIHRleHQgb3IgYmluYXJ5IG1v ZGUKLSAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIHByZXZhaWxpbmcgRlRQIFRZUEUsIHdoaWNo IGNhbiBiZSBvdmVycmlkZGVuCi0gICAgICAgICAgd2l0aCBhIC9URVhUIG9yIC9CSU5BUlkgc3dp dGNoLiBFeGFtcGxlOiBFeGFtcGxlOgotCi0gIGZ0cCBwdXQgL2NvbW1hbmQgL2FzLW5hbWU6e3Vz ZXJsaXN0fSB7ZmluZ2VyIHwgc29ydCAtcn0KLQotICAgL0xJU1RGSUxFOmZpbGVuYW1lCi0gICAg ICAgICAgVGVsbHMgS2VybWl0IHRvIG9idGFpbiB0aGUgbGlzdCBvZiBmaWxlcyB0byBiZSBzZW50 IGZyb20gdGhlCi0gICAgICAgICAgZmlsZSB3aG9zZSBuYW1lIGlzIGdpdmVuLiBUaGlzIGZpbGUg bXVzdCBjb250YWluIG9uZSBmaWxlCi0gICAgICAgICAgc3BlY2lmaWNhdGlvbiAod2hpY2ggbWF5 IGJlIHdpbGQpIHBlciBsaW5lLiBJZiB0aGUgbGlzdCBpbmNsdWRlcwotICAgICAgICAgIGZpbGVz IGZyb20gZGlmZmVyZW50IGRpcmVjdG9yaWVzLCBzdWNoIGFzIGEgcmVjdXJzaXZlIGxpc3Rpbmcg b2YKLSAgICAgICAgICBhIGRpcmVjdG9yeSB0cmVlLCB0aGUgcGF0aHMgYXJlIHJlY3JlYXRlZCBv biB0aGUgc2VydmVyIChpZgotICAgICAgICAgIHBvc3NpYmxlKSBpZiB5b3UgaW5jbHVkZSB0aGUg L1JFQ1VSU0lWRSBzd2l0Y2g7IG90aGVyd2lzZSBhbGwKLSAgICAgICAgICB0aGUgZmlsZXMgYXJl IHNlbnQgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9uIHRoZSBzZXJ2ZXIuCi0KLSAgIE5vdyB0 aGUgb3RoZXIgc3dpdGNoZXM6Ci0KLSAgIC9BUy1OQU1FOnRleHQKLSAgICAgICAgICBJZiBhIHNp bmdsZSBmaWxlIGlzIGJlaW5nIHNlbnQsIHNlbmQgaXQgd2l0aCB0aGUgZ2l2ZW4gdGV4dCBhcwot ICAgICAgICAgIGl0cyBuYW1lLiBJZiBtdWx0aXBsZSBmaWxlcyBhcmUgYmVpbmcgc2VudCwgdGhl IHRleHQgbXVzdCBiZSBhCi0gICAgICAgICAgdGVtcGxhdGUgdGhhdCBpbmNsdWRlcyB2YXJpYWJs ZXMgc3VjaCBhcyBcdihmaWxlbmFtZSksCi0gICAgICAgICAgXHYoZmlsZW51bWJlciksIFx2KG50 aW1lKSwgdG8gYWxsb3cgZHluYW1pYyBjcmVhdGlvbiBvZiBlYWNoCi0gICAgICAgICAgbmFtZS4g VGhlIHNhbWUgYXBwbGllcyB0byB0aGUgYXMtbmFtZSBmaWVsZCBvZiB0aGUgRlRQIFBVVAotICAg ICAgICAgIGNvbW1hbmQuIElmIHRoaXMgc3dpdGNoIGlzIG5vdCBpbmNsdWRlZCAoYW5kIGFuIGFz LW5hbWUgaXMgbm90Ci0gICAgICAgICAgaW5jbHVkZWQgYXMgdGhlIHNlY29uZCBmaWxlbmFtZSB0 byBQVVQpLCBlYWNoIGZpbGUgaXMgc2VudCB3aXRoCi0gICAgICAgICAgaXRzIG93biBuYW1lLgot Ci0gICAvQklOQVJZCi0gICAvVEVYVAotICAgL1RFTkVYCi0gICAgICAgICAgRm9yY2VzIHRoaXMg dXBsb2FkIHRvIHRha2UgcGxhY2UgaW4gdGhlIGdpdmVuIG1vZGUsIHJlZ2FyZGxlc3MKLSAgICAg ICAgICBvZiB0aGUgY3VycmVudCBGVFAgVFlQRSBzZXR0aW5nLCBhbmQgd2l0aG91dCBhdXRvbWF0 aWMKLSAgICAgICAgICB0ZXh0L2JpbmFyeSBzd2l0Y2hpbmcuIC9BU0NJSSBpcyBhIHN5bm9ueW0g Zm9yIC9URVhULgotCi0gICAvRklMVEVSOmNvbW1hbmQKLSAgICAgICAgICBTcGVjaWZpZXMgdGhh dCB0aGUgZmlsZShzKSBpcy9hcmUgdG8gYmUgcGFzc2VkIHRocm91Z2ggdGhlIGdpdmVuCi0gICAg ICAgICAgY29tbWFuZCBvciBwaXBlbGluZSBvbiB0aGVpciB3YXkgdG8gdGhlIHNlcnZlci4gRXhh bXBsZToKLQotICBmdHAgcHV0IC9iaW5hcnkgL2ZpbHRlcjp7Z3ppcCAtYyBcdihmaWxlbmFtZSl9 IC9hcy1uYW1lOlx2KGZpbGVuYW1lKS5neiAqCi0KLSAgIC9UUkFOU1BBUkVOVAotICAgL0xPQ0FM LUNIQVJBQ1RFUi1TRVQ6bmFtZQotICAgL1NFUlZFUi1DSEFSQUNURVItU0VUOm5hbWUKLSAgICAg ICAgICBDaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIGZvciB0ZXh0IGZpbGVzLCBleHBsYWluZWQg aW4KLSAgICAgICAgICBbMjkyXVNlY3Rpb24gMy43LgotCi0gICAvRVJST1ItQUNUSU9OOntQUk9D RUVELFFVSVR9Ci0gICAgICAgICAgT3ZlcnJpZGVzIHRoZSBwcmV2YWlsaW5nIFsyOTNdRlRQIEVS Uk9SLUFDVElPTiBmb3IgdGhlIGR1cmF0aW9uCi0gICAgICAgICAgb2YgdGhpcyBQVVQgb3IgTVBV VCBjb21tYW5kIG9ubHkuCi0KLSAgIC9SRUNPVkVSCi0gICAgICAgICAgUmVzdW1lIGFuIGludGVy cnVwdGVkIHRyYW5zZmVyIHdoZXJlIGZyb20gdGhlIHBvaW50IG9mCi0gICAgICAgICAgaW50ZXJy dXB0aW9uIChleHBsYWluZWQgaW4gWzI5NF1TZWN0aW9uIDMuNS4yKS4gU3lub255bToKLSAgICAg ICAgICAvUkVTVEFSVC4KLQotICAgL0RFTEVURQotICAgICAgICAgIFRlbGxzIEtlcm1pdCB0byBk ZWxldGUgZWFjaCBzb3VyY2UgZmlsZSBpbW1lZGlhdGVseSBhZnRlciwgYW5kCi0gICAgICAgICAg b25seSBpZiwgaXQgaGFzIGJlZW4gdXBsb2FkZWQgY29tcGxldGVseSBhbmQgc3VjY2Vzc2Z1bGx5 LiBUaGlzLAotICAgICAgICAgIGluIGVmZmVjdCwgbW92ZXMgdGhlIGZpbGUgZnJvbSB0aGUgY2xp ZW50IHRvIHRoZSBzZXJ2ZXIuCi0KLSAgIC9NT1ZFLVRPOmRpcmVjdG9yeQotICAgICAgICAgIFRl bGxzIEtlcm1pdCB0byBtb3ZlIGVhY2ggc291cmNlIGZpbGUgdG8gdGhlIG5hbWVkIGxvY2FsCi0g ICAgICAgICAgZGlyZWN0b3J5IGFmdGVyLCBhbmQgb25seSBpZiwgaXQgaGFzIGJlZW4gdXBsb2Fk ZWQgY29tcGxldGVseQotICAgICAgICAgIGFuZCBzdWNjZXNzZnVsbHkuCi0KLSAgIC9SRU5BTUUt VE86dGVtcGxhdGUKLSAgICAgICAgICBUZWxscyBLZXJtaXQgdG8gcmVuYW1lIGVhY2ggKGxvY2Fs KSBzb3VyY2UgZmlsZSBhY2NvcmRpbmcgdG8gdGhlCi0gICAgICAgICAgZ2l2ZW4gdGVtcGxhdGUg YWZ0ZXIsIGFuZCBvbmx5IGlmLCBpdCBoYXMgYmVlbiB1cGxvYWRlZAotICAgICAgICAgIGNvbXBs ZXRlbHkgYW5kIHN1Y2Nlc3NmdWxseS4gVGhlIHRlbXBsYXRlIHdvcmtzIGFzIGluIC9BUy1OQU1F LgotCi0gICAvU0VSVkVSLVJFTkFNRS1UTzp0ZW1wbGF0ZQotICAgICAgICAgIFRlbGxzIEtlcm1p dCB0byBhc2sgdGhlIHNlcnZlciB0byByZW5hbWUgZWFjaCBmaWxlIGFjY29yZGluZyB0bwotICAg ICAgICAgIHRoZSBnaXZlbiB0ZW1wbGF0ZSBhcyBzb29uIGFzLCBhbmQgb25seSBpZiwgaXQgaGFz IGJlZW4gcmVjZWl2ZWQKLSAgICAgICAgICBjb21wbGV0ZWx5IGFuZCBzdWNjZXNzZnVsbHkuIFRo ZSB0ZW1wbGF0ZSB3b3JrcyBhcyBpbiAvQVMtTkFNRS4KLSAgICAgICAgICBSZXF1aXJlcyB3cml0 ZSBhbmQgcmVuYW1lIGFjY2VzcyBvbiB0aGUgc2VydmVyLCBzbyBkb2Vzbid0Ci0gICAgICAgICAg dXN1YWxseSB3b3JrIHdpdGggKGUuZy4pIGFub255bW91cyB1cGxvYWRzIHRvIHB1YmxpYyBpbmNv bWluZwotICAgICAgICAgIGFyZWFzIHdoZXJlIHRoZSBwZXJtaXNzaW9ucyBkb24ndCBhbGxvdyBy ZW5hbWluZy4gRXhhbXBsZXM6Ci0KLSAgICAgICAgZnRwIG1wdXQgL3NlcnZlci1yZW5hbWU6XHYo ZmlsZW5hbWUpLm9rICoKLSAgICAgICAgICAgICAgICBBcHBlbmRzICIub2siIHRvIGVhY2ggZmls ZW5hbWUgb24gdGhlIHNlcnZlciB3aGVuIGl0J3MKLSAgICAgICAgICAgICAgICBmaW5pc2hlZCB1 cGxvYWRpbmcuCi0KLSAgICAgICAgZnRwIG1wdXQgL2FzLW5hbWU6XHYoZmlsZW5hbWUpLnRtcCAv c2VydmVyLXJlbmFtZTpcdihmaWxlbmFtZSkgKgotICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhl IHJldmVyc2Ugb2YgdGhlIHByZXZpb3VzIGV4YW1wbGU7IGl0IHVzZXMgYQotICAgICAgICAgICAg ICAgIHRlbXBvcmFyeSBuYW1lIHdoaWxlIHVwbG9hZGluZyBpcyBpbiBwcm9ncmVzcyBhbmQgcmV2 ZXJ0cwotICAgICAgICAgICAgICAgIHRoZSBmaWxlIHRvIGl0cyByZWFsIG5hbWUgd2hlbiB1cGxv YWRpbmcgaXMgY29tcGxldGUuCi0KLSAgICAgICAgZnRwIG1wdXQgL2FzLW5hbWU6XHYoZmlsZW5h bWUpCi0gICAgICAgICAgICAgICAgL3NlcnZlci1yZW5hbWU6Li4vZmluYWwvXHYoZmlsZW5hbWUp ICoKLSAgICAgICAgICAgICAgICBNb3ZlcyB0aGUgZmlsZSBmcm9tIHRoZSB3b3JraW5nIGRpcmVj dG9yeSB0byBhIGZpbmFsCi0gICAgICAgICAgICAgICAgZGlyZWN0b3J5IHdoZW4gdGhlIHVwbG9h ZCBpcyBjb21wbGV0ZSwgYnV0IGluIHRoaXMgY2FzZQotICAgICAgICAgICAgICAgIHlvdSBoYXZl IHRvIGtub3cgdGhlIHBhdGhuYW1lIHN5bnRheCBvZiB0aGUgc2VydmVyLiBJZiB0aGUKLSAgICAg ICAgICAgICAgICByZW5hbWUgZmFpbHMsIHRoZSBbTV1QVVQgY29tbWFuZCBmYWlscyBhY2NvcmRp bmcgdG8gdGhlCi0gICAgICAgICAgICAgICAgWzI5NV1GVFAgRVJST1ItQUNUSU9OIHNlbGVjdGlv bi4KLQotICAgL0ZJTEVOQU1FUzp7QVVUT01BVElDLENPTlZFUlRFRCxMSVRFUkFMfQotICAgICAg ICAgIE92ZXJyaWRlcyB0aGUgWzI5Nl1GVFAgRklMRU5BTUVTIHNldHRpbmcgZm9yIHRoaXMgdXBs b2FkIG9ubHkuCi0KLSAgIC9QRVJNSVNTSU9OUzp7T04sT0ZGfQotICAgICAgICAgIE92ZXJyaWRl cyB0aGUgWzI5N11GVFAgUEVSTUlTU0lPTlMgc2V0dGluZyBmb3IgdGhpcyB1cGxvYWQgb25seS4K LQotICAgL1VOSVFVRQotICAgICAgICAgIFRlbGxzIEtlcm1pdCB0byB0ZWxsIHRoZSBzZXJ2ZXIg dG8gZ2l2ZSBbMjk4XXVuaXF1ZSBuYW1lcyB0bwotICAgICAgICAgIGluY29taW5nIGZpbGVzIHRo YXQgd291bGQgb3RoZXJ3aXNlIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcwotICAgICAgICAgIHRo YXQgaGF2ZSB0aGUgc2FtZSBuYW1lLiBUaGlzIHN3aXRjaCBjb25mbGljdHMgd2l0aCAvVVBEQVRF LAotICAgICAgICAgIC9SRUNPVkVSLCAvUEVSTUlTU0lPTlMsIGFuZCAvU0VSVkVSLVJFTkFNRSBz aW5jZSB0aGUgY2xpZW50IGhhcwotICAgICAgICAgIG5vIHdheSBvZiBrbm93aW5nIHRoZSBuYW1l IGFzc2lnbmVkIGJ5IHRoZSBzZXJ2ZXIuCi0KLSAgIC9RVUlFVAotICAgICAgICAgIERvbid0IGRp c3BsYXkgZmlsZS10cmFuc2ZlciBwcm9ncmVzcyBvciBzdGF0aXN0aWNzLgotCi0gICAvU0lNVUxB VEUKLSAgICAgICAgICBTaG93cyB3aGljaCBmaWxlcyB3b3VsZCBiZSBzZW50IHdpdGhvdXQgYWN0 dWFsbHkgc2VuZGluZyB0aGVtLgotICAgICAgICAgIFVzZWZ1bCAoZm9yIGV4YW1wbGUpIHdpdGgg L1VQREFURSAobmV4dCBzZWN0aW9uKS4gVGhlIHJlc3VsdHMKLSAgICAgICAgICBhcmUgc2hvd24g aW4gdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSAoaWYgaXQgaXMgbm90IGRpc2FibGVkKQotICAg ICAgICAgIGFuZCBpbiB0aGUgdHJhbnNhY3Rpb24gbG9nIChpZiBvbmUgaXMgYWN0aXZlKS4gSGlu dDogdXNlIFNFVAotICAgICAgICAgIFRSQU5TRkVSIERJU1BMQVkgQlJJRUYuCi0KLTMuNS4yLiBV cGRhdGUgTW9kZQotCi0gICBXaGVuIHlvdSBpbmNsdWRlIHRoZSAvVVBEQVRFIHN3aXRjaCwgdGhp cyBtZWFucyB0byBza2lwIHNlbmRpbmcgYW55Ci0gICBmaWxlIHRoYXQgYWxyZWFkeSBleGlzdHMg b24gdGhlIHNlcnZlciBpZiB0aGUgbG9jYWwgZmlsZSdzIG1vZGlmaWNhdGlvbgotICAgZGF0ZS90 aW1lIGlzIG5vdCBsYXRlciB0aGFuIHRoYXQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZSBvbiB0 aGUKLSAgIHNlcnZlci4gSGVyZSBpcyBhIHR5cGljYWwgYXBwbGljYXRpb24gZm9yIHVwZGF0ZSBt b2RlOiBTdXBwb3NlIHRoYXQgb24KLSAgIENvbXB1dGVyIEEsIHlvdSBtYWludGFpbiBhIGxhcmdl IHNldCBvZiBmaWxlcyAoc2F5LCBhIGNvbGxlY3Rpb24gb2YgV2ViCi0gICBwYWdlcyBhbmQgZ3Jh cGhpY3MgaW1hZ2VzLCBvciB0aGUgc291cmNlIGZpbGVzIGZvciBhIHNvZnR3YXJlCi0gICBhcHBs aWNhdGlvbiksIGFuZCB5b3UgbmVlZCB0byBrZWVwIGEgcGFyYWxsZWwgY29weSBvbiBhbm90aGVy IENvbXB1dGVyLAotICAgQi4gT2YgY291cnNlIHlvdSBjb3VsZCB1cGxvYWQgdGhlIGVudGlyZSBj b2xsZWN0aW9uIGV2ZXJ5IGRheToKLQotICBjZCBzb3VyY2UtZGlyZWN0b3J5Ci0gIGZ0cCBjb21w dXRlcmIueHl6Y29ycC5jb20KLSAgKCBhdXRoZW50aWNhdGlvbiBkZXRhaWxzLi4uICkKLSAgZnRw IGNkIHRhcmdldC1kaXJlY3RvcnkKLSAgZnRwIHB1dCBbIHN3aXRjaGVzIF0gKgotCi0gICBCdXQg aWYgdGhlIHRvdGFsIHNpemUgaXMgbGFyZ2Ugb3IgdGhlIG5ldHdvcmsgc2xvdywgdGhpcyB3b3Vs ZCBiZQotICAgdW5uZWNlc3NhcmlseSB0aW1lLWNvbnN1bWluZy4gV29yc2UsIGlmIG90aGVyIHVz ZXJzIG9yIHNpdGVzIGhhZCB0bwotICAgdXBkYXRlIHdoZW5ldmVyIG5ldyBmaWxlcyBhcHBlYXJl ZCBpbiBCJ3MgZGlyZWN0b3J5LCB0aGlzIHdvdWxkIGNhdXNlCi0gICB0aGVtIHVubmVjZXNzYXJ5 IHdvcmsuIEJ5IGluY2x1ZGluZyB0aGUgL1VQREFURSBzd2l0Y2g6Ci0KLSAgZnRwIHB1dCAvdXBk YXRlIFsgb3RoZXItc3dpdGNoZXMgXSAqCi0KLSAgIG9ubHkgdGhvc2UgZmlsZXMgdGhhdCBjaGFu Z2VkIHNpbmNlIGxhc3QgdGltZSBhcmUgdXBsb2FkZWQuIEhlcmUncyBob3cKLSAgIGl0IHdvcmtz LiBGb3IgZWFjaCBsb2NhbCBmaWxlIHRoYXQgaXMgc2VsZWN0ZWQgZm9yIHVwbG9hZGluZzoKLQot ICAgICAqIFRoZSByZW1vdGUgZmlsZW5hbWUgaXMgZGV0ZXJtaW5lZCBpbiB0aGUgbm9ybWFsIHdh eSwgYWNjb3JkaW5nIHRvCi0gICAgICAgdGhlIFsyOTldRlRQIEZJTEVOQU1FUyBzZXR0aW5nLCAv RklMRU5BTUVTIHN3aXRjaCwgb3IgdGhlIGFzLW5hbWUsCi0gICAgICAgaWYgYW55LgotICAgICAq IEtlcm1pdCBzZW5kcyBhbiBNRFRNIChtb2RpZmljYXRpb24gdGltZSkgY29tbWFuZCBmb3IgdGhl Ci0gICAgICAgY29ycmVzcG9uZGluZyByZW1vdGUgZmlsZW5hbWUgdG8gdGhlIHNlcnZlci4KLSAg ICAgKiBJZiB0aGUgc2VydmVyIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIE1EVE0gY29tbWFuZCwg dGhlIGZpbGUgaXMKLSAgICAgICBzZW50LgotICAgICAqIElmIHRoZSBzZXJ2ZXIgY2FuJ3QgZmlu ZCBhIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgdGhlIGZpbGUgaXMKLSAgICAgICBzZW50Lgot ICAgICAqIElmIHRoZSBsb2NhbCBmaWxlJ3MgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbGF0ZXIgdGhh biB0aGF0IG9mIHRoZQotICAgICAgIHJlbW90ZSBmaWxlLCB0aGUgZmlsZSBpcyBzZW50LgotICAg ICAqIE90aGVyd2lzZSAtLSB0aGUgcmVtb3RlIGZpbGUgZXhpc3RzIGJ1dCBpdHMgbW9kaWZpY2F0 aW9uIHRpbWUgaXMKLSAgICAgICBlcXVhbCB0byBvciBlYXJsaWVyIHRoYW4gdGhhdCBvZiB0aGUg bG9jYWwgZmlsZSAtLSB0aGUgZmlsZSBpcwotICAgICAgIHNraXBwZWQuCi0KLSAgIEFsbCB0aW1l IGNvbXBhcmlzb25zIHRha2UgcGxhY2UgaW4gQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUKLSAg IChVVEMpKFszMDBdMSksIGFsc28ga25vd24gYXMgR01UIG9yIFp1bHUgdGltZTogVGltZXpvbmUg MDsgc3RhbmRhcmQKLSAgIHRpbWUsIHdpdGhvdXQgZGF5bGlnaHQgc2F2aW5ncy4KLQotICAgICBX QVJOSU5HOiBTb21lIEZUUCBzZXJ2ZXJzLCBzdWNoIGFzIE5vdmVsbCBOV0ZUUEQuTkxNLCBpZ25v cmUgb3IKLSAgICAgbWlzaW1wbGVtZW50IHRoZSBGVFAgc3BlY2lmaWNhdGlvbiBhbmQgc2VuZCBs b2NhbCB0aW1lIHJhdGhlciB0aGFuCi0gICAgIFVUQy4KLQotICAgVXBkYXRlIG1vZGUgaXMgdXNl ZnVsIG9ubHkgd2hlbiBhbHdheXMgdXNlZCBpbiB0aGUgc2FtZSBkaXJlY3Rpb24uIFdoZW4KLSAg IHlvdSB1cGxvYWQgKFBVVCkgYSBmaWxlIHdpdGggRlRQLCB0aGUgZGVzdGluYXRpb24gZmlsZSBy ZWNlaXZlcyB0aGUKLSAgIGN1cnJlbnQgdGltZXN0YW1wIG9uIHRoZSBzZXJ2ZXIncyBjb21wdXRl ciwgbm90IHRoZSBvcmlnaW5hbCBmaWxlJ3MKLSAgIHRpbWVzdGFtcCAoWzMwMV0yKS4gSWYgeW91 IHRyeSB0byBGVFAgUFVUIC9VUERBVEUgdGhlIHNhbWUgZmlsZSBhZ2FpbiwKLSAgIGl0IHdpbGwg YmUgc2tpcHBlZCAoYXMgZXhwZWN0ZWQpIHNpbmNlIHRoZSByZW1vdGUgY29weSBpcyBuZXdlci4K LSAgIEhvd2V2ZXIsIGlmIHlvdSB0cnkgdG8gRlRQIEdFVCAvVVBEQVRFIHRoZSBzYW1lIGZpbGUg KFszMDJdU2VjdGlvbgotICAgMy42KSwgaXQgd2lsbCBiZSB0cmFuc2ZlcnJlZCBmb3IgdGhlIHNh bWUgcmVhc29uLgotCi0gICBUbyBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IG9mIFBVVCAvVVBEQVRF IG9uIGEgcGFydGljdWxhciBjb25uZWN0aW9uLAotICAgaXNzdWUgYW4gRlRQIE1PRFRJTUUgY29t bWFuZCBmb3IgYSBmaWxlIHRoYXQgaXMga25vd24gdG8gZXhpc3Qgb24gdGhlCi0gICBzZXJ2ZXIu IElmIGl0IHN1Y2NlZWRzLCBQVVQgL1VQREFURSBzaG91bGQgd29yayBhbmQgaW4gdGhhdCBjYXNl LCB5b3UKLSAgIGNhbiBydW4gYSBwcm9jZWR1cmUgbGlrZSB0aGUgb25lIGFib3ZlIGV2ZXJ5IGRh eTogdGhlIGZpcnN0IHRpbWUsIGl0Ci0gICBzZW5kcyBhbGwgdGhlIGZpbGVzOyBhZnRlciB0aGF0 LCBpdCBzZW5kcyBvbmx5IHRoZSBvbmVzIHRoYXQgY2hhbmdlZC4KLSAgIElmIGEgdHJhbnNhY3Rp b24gbG9nIGlzIGFjdGl2ZSwgYSBub3RhdGlvbiBpcyBpbmNsdWRlZCBmb3IgYW55IGZpbGVzCi0g ICB0aGF0IGFyZSBza2lwcGVkLgotCi0gICBOb3RlczoKLSAgICAxLiBXaHkgaXMgQ29vcmRpbmF0 ZWQgVW5pdmVyc2FsIFRpbWUgYWJicmV2aWF0ZWQgVVRDPyBGcm9tIHRoZQotICAgICAgIFszMDNd TmF0aW9uYWwgSW5zdGl0dXRlIG9mIFN0YW5kYXJkcyBhbmQgVGVjaG5vbG9neSBGQVE6ICJJbiAx OTcwCi0gICAgICAgdGhlIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIHN5c3RlbSB3YXMgZGV2 aXNlZCBieSBhbgotICAgICAgIGludGVybmF0aW9uYWwgYWR2aXNvcnkgZ3JvdXAgb2YgdGVjaG5p Y2FsIGV4cGVydHMgd2l0aGluIHRoZQotICAgICAgIEludGVybmF0aW9uYWwgVGVsZWNvbW11bmlj YXRpb24gVW5pb24gKElUVSkuIFRoZSBJVFUgZmVsdCBpdCB3YXMKLSAgICAgICBiZXN0IHRvIGRl c2lnbmF0ZSBhIHNpbmdsZSBhYmJyZXZpYXRpb24gZm9yIHVzZSBpbiBhbGwgbGFuZ3VhZ2VzIGlu Ci0gICAgICAgb3JkZXIgdG8gbWluaW1pemUgY29uZnVzaW9uLiBTaW5jZSB1bmFuaW1vdXMgYWdy ZWVtZW50IGNvdWxkIG5vdCBiZQotICAgICAgIGFjaGlldmVkIG9uIHVzaW5nIGVpdGhlciB0aGUg RW5nbGlzaCB3b3JkIG9yZGVyLCBDVVQsIG9yIHRoZSBGcmVuY2gKLSAgICAgICB3b3JkIG9yZGVy LCBUVUMsIHRoZSBhY3JvbnltIFVUQyB3YXMgY2hvc2VuIGFzIGEgY29tcHJvbWlzZS4iCi0gICAg Mi4gVGhlIEtlcm1pdCBGVFAgY2xpZW50IGlzIHVudXN1YWwgaW4gdGhhdCwgd2hlbiBkb3dubG9h ZGluZyBvbmx5LCBpdAotICAgICAgIGNhbiBzZXQgdGhlIHJlY2VpdmVkIGZpbGUncyBkYXRlIGZy b20gdGhlIGZpbGUncyBkYXRlIG9uIHRoZQotICAgICAgIHNlcnZlciwgYnV0IHRoaXMgc2hvdWxk IG5vdCBhZmZlY3QgdGhlIHVwZGF0ZSBmZWF0dXJlLiBXaGVuCi0gICAgICAgdXBsb2FkaW5nIHRv IGFuIEZUUCBzZXJ2ZXIsIGhvd2V2ZXIsIHRoZXJlIGlzIG5vIG1lY2hhbmlzbSBmb3IgdGhlCi0g ICAgICAgY2xpZW50IHRvIHNldCB0aGUgZGF0ZSBvZiB0aGUgdXBsb2FkZWQgZmlsZSBvbiB0aGUg c2VydmVyLgotCi0zLjUuMyBSZWNvdmVyeQotCi0gICBTdXBwb3NlIHRoYXQgd2hpbGUgeW91IGFy ZSB1cGxvYWRpbmcgYSBsYXJnZSBmaWxlIG92ZXIgYSBzbG93Ci0gICBjb25uZWN0aW9uLCB0aGUg Y29ubmVjdGlvbiBpcyBsb3N0IGJlZm9yZSB0aGUgZW50aXJlIGZpbGUgaXMKLSAgIHRyYW5zZmVy cmVkLiBXaXRoIG1vc3QgRlRQIGNsaWVudHMsIHlvdSB3b3VsZCBoYXZlIHRvIHN0YXJ0IG92ZXIs IHRodXMKLSAgIHJlc2VuZGluZyB0aGUgcG9ydGlvbiBvZiB0aGUgZmlsZSB0aGF0IHdhcyBzZW50 IGFscmVhZHksIGFuZCB0aGF0IGlzCi0gICBhbHJlYWR5IG9uIHRoZSBzZXJ2ZXIuIEJ1dCBLZXJt aXQncyAvUkVDT1ZFUiBzd2l0Y2ggKFN5bm9ueW06IC9SRVNUQVJUKQotICAgbGV0cyB5b3UgY29u dGludWUgYW4gaW50ZXJydXB0ZWQgdHJhbnNmZXIgZnJvbSB0aGUgcG9pbnQgb2YgZmFpbHVyZSwK LSAgIHRodXMgdHJhbnNmZXJyaW5nIG9ubHkgdGhlIHBhcnQgdGhhdCB3YXNuJ3Qgc2VudCBhbHJl YWR5LiBUaGUKLSAgIHByZXJlcXVpc2l0ZXMgZm9yIHJlY292ZXJ5IGFyZToKLQotICAgICAqIFRo ZSB0cmFuc2ZlciBtdXN0IGJlIGluIEJJTkFSWSBtb2RlLCBvciBlbHNlIHRoZSBjbGllbnQgYW5k IHNlcnZlcgotICAgICAgIG11c3QgcmVzaWRlIG9uIGxpa2Ugc3lzdGVtcyAoZS5nLiBib3RoIG9u IHNvbWUgZm9ybSBvZiBVTklYKS4KLSAgICAgKiBUaGUgRlRQIHNlcnZlciBtdXN0IHN1cHBvcnQg dGhlIFNJWkUgY29tbWFuZC4KLQotICAgSGVyZSdzIGhvdyBpdCB3b3Jrcy4gV2hlbiB5b3UgaW5j bHVkZSB0aGUgL1JFQ09WRVIgc3dpdGNoOgotCi0gICAgICogS2VybWl0IGNoZWNrcyBmb3IgY29u ZmxpY3Rpbmcgc3dpdGNoZXMsIHN1Y2ggYXMgL1VQREFURSBhbmQKLSAgICAgICAvVU5JUVVFOyBp ZiAvUkVDT1ZFUiBpcyBnaXZlbiB3aXRoIHRoZXNlIHN3aXRjaGVzIGFuIGVycm9yIG9jY3Vycy4K LSAgICAgICBJZiAvUkVDT1ZFUiBpcyBnaXZlbiBpbiBvdGhlciBjaXJjdW1zdGFuY2VzIHdoZXJl IGl0IGNvdWxkIHNlcnZlIG5vCi0gICAgICAgdXNlZnVsIHB1cnBvc2UgKGUuZy4gd2l0aCBhcnJh eXMsIHBpcGVzLCBvciBmaWx0ZXJzKSwgaXQgaXMKLSAgICAgICBpZ25vcmVkLgotCi0gICBJZiB0 aGUgc3dpdGNoIGlzIGFjY2VwdGVkLCB0aGVuIGZvciBlYWNoIHNlbGVjdGVkIGZpbGU6Ci0KLSAg ICAgKiBJZiBpdCBpcyBub3QgYmluYXJ5IChkZXRlcm1pbmVkIGJ5IHNjYW5uaW5nKSBhbmQgdGhl IGNsaWVudCBhbmQKLSAgICAgICBzZXJ2ZXIgYXJlIG5vdCBvbiBsaWtlIHBsYXRmb3JtcywgcmVj b3ZlcnkgaXMgY2FuY2VsZWQgKHRoZSBlbnRpcmUKLSAgICAgICBmaWxlIGlzIHNlbnQpLiBPdGhl cndpc2U6Ci0gICAgICogQSBTSVpFIGNvbW1hbmQgaXMgc2VudCBmb3IgdGhlIGZpbGUgKHVzaW5n IGl0cyByZW1vdGUgbmFtZSkuIElmIHRoZQotICAgICAgIHJlcGx5IGluZGljYXRlcyB0aGUgZmls ZSB3YXMgbm90IGZvdW5kLCBvciB0aGUgU0laRSBjb21tYW5kIHdhcyBub3QKLSAgICAgICB1bmRl cnN0b29kLCBvciBhbnkgb3RoZXIga2luZCBvZiBlcnJvciwgcmVjb3ZlcnkgaXMgY2FuY2VsZWQu Ci0gICAgICAgT3RoZXJ3aXNlOgotICAgICAqIEEgTURUTSAobW9kaWZpY2F0aW9uIHRpbWUpIGNv bW1hbmQgaXMgc2VudCBmb3IgdGhlIGZpbGUuIElmIGEgdmFsaWQKLSAgICAgICByZXBseSBpcyBy ZWNlaXZlZCwgYW5kIHRoZSBtb2RpZmljYXRpb24gdGltZSBvZiB0aGUgbG9jYWwgZmlsZSBpcwot ICAgICAgIGxhdGVyIHRoYW4gdGhhdCBvZiB0aGUgcmVtb3RlIGZpbGUsIHJlY292ZXJ5IGlzIGNh bmNlbGVkLgotICAgICAgIE90aGVyd2lzZToKLSAgICAgKiBJZiB0aGUgc2l6ZXMgb2YgdGhlIHR3 byBmaWxlcyBhcmUgaWRlbnRpY2FsLCB0aGUgZmlsZSBpcyBub3Qgc2VudC4KLSAgICAgICBPdGhl cndpc2U6Ci0gICAgICogS2VybWl0IHNlZWtzIHRvIHRoZSByZWNvdmVyeSBzcG90IGluIHRoZSBs b2NhbCBmaWxlLCB0ZWxscyB0aGUKLSAgICAgICBzZXJ2ZXIgdG8gQVBQRU5EIHRoZSBkYXRhIHdo aWNoIGlzIGFib3V0IHRvIGFycml2ZSB0byB0aGUgcmVtb3RlCi0gICAgICAgZmlsZSwgYW5kIHRo ZW4gc2VuZHMgdGhlIGRhdGEgc3RhcnRpbmcgYXQgdGhlIHJlY292ZXJ5IHBvaW50LgotCi0gICBU byBzYWZlZ3VhcmQgZmlsZSBpbnRlZ3JpdHksIHJlY292ZXJ5IGlzIG5vdCBhdHRlbXB0ZWQgdW5s ZXNzIGFsbCB0aGUKLSAgIHByZWNvbmRpdGlvbnMgYXJlIG1ldC4gRm9yIHRoZSB3aWRlc3QgcG9z c2libGUgdXNlZnVsbmVzcywgQVBQRU5EIGlzCi0gICB1c2VkIHJhdGhlciB0aGFuIFJFU1RBUlQu IEZvciBzdHJlYW0gdHJhbnNmZXJzICh0aGUgb25seSBraW5kIHRoYXQKLSAgIEtlcm1pdCBzdXBw b3J0cykgdGhlIHJlc3VsdHMgYXJlIHRoZSBzYW1lLgotCi0gICBCeSBkZXNpZ24sIHRoZSAvUkVD T1ZFUiBzd2l0Y2ggY2FuIGJlIGluY2x1ZGVkIHdpdGggYW55IEZUUCBQVVQgb3IgTVBVVAotICAg Y29tbWFuZCwgZXZlbiBpZiBpdCBzcGVjaWZpZXMgYSBncm91cCBvZiBmaWxlcy4gVGhpcyBhbGxv d3MgeW91IHRvCi0gICByZXN1bWUgYW4gaW50ZXJydXB0ZWQgYmF0Y2ggdHJhbnNmZXIgZnJvbSB3 aGVyZSBpdCBsZWZ0IG9mZi4gVGhlIGZpbGVzCi0gICB0aGF0IHdlcmUgYWxyZWFkeSBjb21wbGV0 ZWx5IHNlbnQgYXJlIHNraXBwZWQsIHRoZSBmaWxlIHRoYXQgd2FzCi0gICBpbnRlcnJ1cHRlZCBp cyByZWNvdmVyZWQsIGFuZCB0aGUgcmVtYWluaW5nIGZpbGVzIGFyZSB1cGxvYWRlZC4KLQotICAg QnkgdGhlIHdheSwgaXQgZG9lc24ndCBtYXR0ZXIgaG93IHRoZSBvcmlnaW5hbCBwYXJ0aWFsIGZp bGUgd2FzCi0gICB1cGxvYWRlZCAtLSBGVFAsIEtlcm1pdCwgWm1vZGVtLCBldGM6IGFzIGxvbmcg YXMgdGhlIHByZWNvbmRpdGlvbnMgYXJlCi0gICBtZXQsIGl0IGNhbiBiZSByZWNvdmVyZWQgd2l0 aCBGVFAgUFVUIC9SRUNPVkVSLCBvciBmb3IgdGhhdCBtYXR0ZXIgYWxzbwotICAgdXNpbmcgS2Vy bWl0IHByb3RvY29sIGFuZCBTRU5EIC9SRUNPVkVSLgotCi0gICBBIHdvcmQgb2YgY2F1dGlvbiwg aG93ZXZlciwgd2hlbiB0aGUgb3JpZ2luYWwgdXBsb2FkIHdhcyBpbiB0ZXh0IG1vZGUKLSAgIHdp dGggY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiAoWzMwNF1TZWN0aW9uIDMuNyk6Ci0KLSAgICAg KiBJZiB0aGUgb3JpZ2luYWwgdXBsb2FkIGludm9sdmVkIGEgdHJhbnNsYXRpb24gZnJvbSBvbmUg c2luZ2xlLWJ5dGUKLSAgICAgICBjaGFyYWN0ZXIgc2V0IHRvIGFub3RoZXIgKGUuZy4gQ29kZSBQ YWdlIDg1MCB0byBMYXRpbi0xKSwgcmVjb3ZlcnkKLSAgICAgICBpcyBzYWZlIGlmIHlvdSBzcGVj aWZ5IHRoZSBzYW1lIHRyYW5zbGF0aW9ucyBmb3IgdGhlIHJlY292ZXJ5LiBJZgotICAgICAgIHlv dSBkb24ndCwgdGhlIHJlc3VsdGluZyBmaWxlIHdpbGwgY29udGFpbiBhIG1peHR1cmUgb2YgY2hh cmFjdGVyCi0gICAgICAgc2V0cy4KLSAgICAgKiBJZiB0aGUgb3JpZ2luYWwgdXBsb2FkIGludm9s dmVkIGEgdHJhbnNsYXRpb24gdGhhdCBjaGFuZ2VkIHRoZSBzaXplCi0gICAgICAgb2YgdGhlIGZp bGUgKGUuZy4gZnJvbSBhbiBhbHBoYWJldGljIENvZGUgUGFnZSBvciBMYXRpbiBBbHBoYWJldCB0 bwotICAgICAgIFVuaWNvZGUsIG9yIHZpY2UgdmVyc2EpLCByZWNvdmVyeSBpcyBOT1Qgc2FmZSwg ZXZlbiBpZiB5b3Ugc3BlY2lmeQotICAgICAgIHRoZSBzYW1lIHRyYW5zbGF0aW9ucy4KLQotICAg S2VybWl0IGhhcyBubyB3YXkgb2Yga25vd2luZyBhbnl0aGluZyBhYm91dCB0aGUgcHJldmlvdXMg dXBsb2FkLiBBcyBhCi0gICBzYWZlZ3VhcmQsIGFuIGVycm9yIG9jY3VycyBpZiB5b3UgaW5jbHVk ZSAvUkVDT1ZFUiBhbmQgYWxzbyBzcGVjaWZ5IGEKLSAgIGNoYXJhY3Rlci1zZXQgb2YgVUNTMiBv ciBVVEY4LCBzaW5jZSByZWNvdmVyeSBjYW4ndCBwb3NzaWJseSB3b3JrIGluCi0gICB0aGF0IHNp dHVhdGlvbi4gT3RoZXJ3aXNlLCBpdCdzIHVwIHRvIHlvdSB0byBhdm9pZCB1bnNhZmUgcmVjb3Zl cnkKLSAgIG9wZXJhdGlvbnMuCi0KLSAgIFsgWzMwNV1Ub3AgXSBbIFszMDZdRlRQIFRvcCBdIFsg WzMwN11DLUtlcm1pdCBIb21lIF0gWyBbMzA4XUtlcm1pdCBIb21lCi0gICBdCi0KLTMuNi4gRG93 bmxvYWRpbmcgRmlsZXMgV2l0aCBGVFAKLQotICAgQWx0aG91Z2ggdXBsb2FkaW5nIGZpbGVzIHdp dGggS2VybWl0J3MgRlRQIGNsaWVudCBpcyBqdXN0IGFzIGVhc3kgYW5kCi0gICBmbGV4aWJsZSBh cyBzZW5kaW5nIGZpbGVzIHdpdGggS2VybWl0IHByb3RvY29sLCB0aGUgc2FtZSBpcyBub3QgYWx3 YXlzCi0gICB0cnVlIGZvciBkb3dubG9hZGluZyBiZWNhdXNlIEZUUCBzZXJ2ZXJzIGxhY2sgc29t ZSBvZiB0aGUgY2FwYWJpbGl0aWVzCi0gICBvZiBhIEtlcm1pdCBzZXJ2ZXI6Ci0KLSAgICAgKiBJ ZiB5b3Ugd2FudCB0byBnZXQgbW9yZSB0aGFuIG9uZSBmaWxlLCB5b3UgaGF2ZSB0byB1c2UgTUdF VCwgbm90Ci0gICAgICAgR0VULCBzaW5jZSB0aGUgdW5kZXJseWluZyBGVFAgcHJvdG9jb2wgaXMg ZGlmZmVyZW50IGluIHRoZSB0d28KLSAgICAgICBjYXNlcy4gS2VybWl0IGNhbid0ICJhdXRvZGV0 ZWN0IiB3aGljaCBvbmUgeW91IG1lYW4sIGFzIGl0IGNhbiB3aXRoCi0gICAgICAgUFVUIGFuZCBN UFVULCBzaW5jZSBpdCBjYW4ndCBiZSBleHBlY3RlZCB0byBrbm93IHRoZSB3aWxkY2FyZAotICAg ICAgIHN5bnRheCBvZiB0aGUgcmVtb3RlIHBsYXRmb3JtIGFuZC9vciBGVFAgc2VydmVyICh0aGUg c2FtZSBpcyB0cnVlCi0gICAgICAgZm9yIGFsbCBvdGhlciBGVFAgY2xpZW50cykuIFRvIGNvbXBs aWNhdGUgbWF0dGVycywgRlRQIHByb3RvY29sIG5vdwotICAgICAgIGluY2x1ZGVzIHR3byB1bmRl cmx5aW5nIG1lY2hhbmlzbXMgKE5MU1QgYW5kIE1MU0QpIGZvcgotICAgICAgIGFjY29tcGxpc2hp bmcgTUdFVCBvcGVyYXRpb25zIGFuZCwgYXMgZXhwbGFpbmVkIGluIFszMDldU2VjdGlvbgotICAg ICAgIDMuMTEsIHRoZSB0d28gYmVoYXZlIGRpZmZlcmVudGx5LgotICAgICAqIEF1dG9tYXRpYyB0 ZXh0LWJpbmFyeSBtb2RlIHN3aXRjaGluZyBpcyBub3QgZG9uZSBieSB0aGUgc2VydmVyLiBJdAot ICAgICAgIGNhbiBiZSBkb25lIGJ5IHRoZSBjbGllbnQgKEtlcm1pdCksIGJ1dCBpbiB0aGlzIGNh c2UgaXQgaXMgbm90Ci0gICAgICAgYmFzZWQgb24gYSBmaWxlIHNjYW4gKHNpbmNlIHRoZXJlIGlz IG5vIHdheSBmb3IgS2VybWl0IHByZXNjYW4gYQotICAgICAgIHNlcnZlciBmaWxlKSwgYnV0IHJh dGhlciBvbiB0aGUgZmlsZW5hbWUsIHVzaW5nIEMtS2VybWl0IDcuMAotICAgICAgIFszMTBdZmls ZW5hbWUgcGF0dGVybnMuCi0gICAgICogU29tZSBvcHRpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSB3 aXRoIEZUUCBQVVQgY2FuIG5vdCBiZSB1c2VkIHdpdGgKLSAgICAgICBGVFAgW01dR0VUIG9yIGRv bid0IHdvcmsgdGhlIHNhbWUgd2F5OgotICAgICAgICAgL1BFUk1JU1NJT05TIChGVFAgcHJvdG9j b2wgaGFzIG5vIG1lY2hhbmlzbSBmb3IgdGhpcykuCi0gICAgICAgICAvW05PVC1dQkVGT1JFLCAv W05PVC1dQUZURVIgKGJlY2F1c2Ugb2YgdGhlIHRpbWV6b25lIHByb2JsZW0pLgotICAgICAgICAg L1JFQ09WRVIgd29ya3Mgb25seSBpbiBiaW5hcnkgbW9kZS4gICAvUkVDVVJTSVZFIGhhcyBsaW1p dGVkCi0gICAgICAgdXRpbGl0eS4KLQotICAgVGhlIGNvbW1hbmRzIGZvciBkb3dubG9hZGluZyBh cmU6Ci0KLSAgIFNFVCBGSUxFIERPV05MT0FELURJUkVDVE9SWSBbIGRpcmVjdG9yeSBdCi0gICAg ICAgICAgQXMgd2l0aCBLZXJtaXQgdHJhbnNmZXJzLCB0aGlzIGNvbW1hbmQsIGlmIGdpdmVuLCB0 ZWxscyBDLUtlcm1pdAotICAgICAgICAgIHdoZXJlIHRvIHN0b3JlIGluY29taW5nIGZpbGVzIGlu IHRoZSBhYnNlbmNlIG9mIGEgc3BlY2lmaWMKLSAgICAgICAgICBhcy1uYW1lLiBJZiBub3QgZ2l2 ZW4sIGluY29taW5nIGZpbGVzIGFyZSBzdG9yZWQgYXMgaW5kaWNhdGVkIGJ5Ci0gICAgICAgICAg dGhlIGFzLW5hbWUsIGlmIGFueSwgb3RoZXJ3aXNlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwg anVzdCBhcwotICAgICAgICAgIHdpdGggS2VybWl0IHRyYW5zZmVycy4gVGhlIG1vcmUgdmVyYm9z ZSB0cmFuc2ZlciBkaXNwbGF5IGZvcm1hdHMKLSAgICAgICAgICBnaXZlIHRoZSBmdWxsIHBhdGhu YW1lIG9mIGVhY2ggcmVjZWl2ZWQgZmlsZSwgYW5kLCBpbiBjYXNlIHlvdQotICAgICAgICAgIGhh dmUgdHJvdWJsZSBmaW5kaW5nIGEgZG93bmxvYWRlZCBmaWxlIGFmdGVyd2FyZHMsIGl0cyBmdWxs IHBhdGgKLSAgICAgICAgICBpcyBhbHNvIGxpc3RlZCBpbiB0aGUgdHJhbnNhY3Rpb24gbG9nIChp ZiB5b3Uga2VwdCBvbmUpLCBhbmQgeW91Ci0gICAgICAgICAgY2FuIGFsc28gYXNrIEtlcm1pdCB3 aGVyZSBpdCB3ZW50IHdpdGggdGhlIFszMTFdV0hFUkUgY29tbWFuZC4KLQotICAgU0VUIEZUUCBH RVQtRklMRVRZUEUtU1dJVENISU5HIHsgT04sIE9GRiB9Ci0gICAgICAgICAgT04gYnkgZGVmYXVs dCwgY2F1c2luZyBLZXJtaXQgdG8gc3dpdGNoIGF1dG9tYXRpY2FsbHkgaW50byB0ZXh0Ci0gICAg ICAgICAgb3IgYmluYXJ5IG1vZGUgZm9yIGVhY2ggZmlsZSBiYXNlZCBvbiB3aGV0aGVyIGl0cyBu YW1lIG1hdGNoZXMgYQotICAgICAgICAgIHRleHQgcGF0dGVybiBvciBiaW5hcnkgcGF0dGVybi4g U2V0IHRoaXMgT0ZGLCBvciB1c2UgYSAvVEVYVCwKLSAgICAgICAgICAvQklOQVJZLCBvciAvVEVO RVggc3dpdGNoIHRvIGRlZmVhdCB0aGlzIGZlYXR1cmUuIFVzZSBTSE9XCi0gICAgICAgICAgUEFU VEVSTlMgdG8gc2VlIHRoZSBjdXJyZW50IHBhdHRlcm4gbGlzdC4KLQotICAgWyBGVFAgXSBHRVQg WyBzd2l0Y2hlcyBdIGZpbGVuYW1lIFsgYXMtbmFtZSBdCi0gICAgICAgICAgQXNrcyB0aGUgc2Vy dmVyIHRvIHNlbmQgdGhlIGdpdmVuIGZpbGUsIGFuZCBpZiBpdCBjb21lcywgc3RvcmVzCi0gICAg ICAgICAgaXQgbG9jYWxseSB1bmRlciB0aGUgZ2l2ZW4gYXMtbmFtZSwgaWYgYW55LCBvdGhlcndp c2UgdW5kZXIgaXRzCi0gICAgICAgICAgb3JpZ2luYWwgbmFtZSAobW9kaWZpZWQgYWNjb3JkaW5n IHRvIHRoZSBzZWxlY3RlZCBmaWxlbmFtZQotICAgICAgICAgIGNvbnZlcnNpb24gb3B0aW9uKSwg aW4geW91ciBkb3dubG9hZCBkaXJlY3RvcnksIGlmIHlvdSBoYXZlCi0gICAgICAgICAgc3BlY2lm aWVkIG9uZSwgb3RoZXJ3aXNlIGluIHRoZSBkaXJlY3RvcnkgaW5kaWNhdGVkIGluIHRoZQotICAg ICAgICAgIGFzLW5hbWUsIGlmIGFueSwgb3RoZXJ3aXNlIGluIHlvdXIgY3VycmVudCBkaXJlY3Rv cnkuIElmIHlvdQotICAgICAgICAgIGFjY2lkZW50YWxseSB1c2UgYSB3aWxkY2FyZCBpbiB0aGUg ZmlsZW5hbWUgKCJnZXQgKi50eHQiKSB0aGUKLSAgICAgICAgICBzZXJ2ZXIgd2lsbCByZXBseSB3 aXRoIGEgbWVzc2FnZSBsaWtlICJGaWxlIG5vdCBmb3VuZCIgKHVubGVzcwotICAgICAgICAgIHRo ZXJlIGlzIGEgZmlsZSB3aG9zZSBuYW1lIGFjdHVhbGx5IGlzICIqLnR4dCIpLiBJZiBGVFAKLSAg ICAgICAgICBHRVQtRklMRVRZUEUtU1dJVENISU5HIGlzIE9OLCBhbmQgaW4gdGhlIGFic2VuY2Ug b2YgYW55IEdFVAotICAgICAgICAgIHN3aXRjaGVzIHRvIG92ZXJyaWRlIGl0LCB0aGUgZmlsZSBp cyB0cmFuc2ZlcnJlZCBpbiBiaW5hcnkgbW9kZQotICAgICAgICAgIGlmIGl0IG1hdGNoZXMgYW55 IG9mIEtlcm1pdCdzIGJpbmFyeSBuYW1lIHBhdHRlcm5zLCBhbmQgaW4gdGV4dAotICAgICAgICAg IG1vZGUgaWYgaXQgbWF0Y2hlcyBhbnkgb2YgS2VybWl0J3MgdGV4dCBuYW1lIHBhdHRlcm5zLCBh bmQgaW4KLSAgICAgICAgICB0aGUgcHJldmFpbGluZyBGVFAgVFlQRSBpZiBpdCBtYXRjaGVzIG5v bmUgb2YgdGhlc2UgcGF0dGVybnMuCi0KLSAgIFsgRlRQIF0gTUdFVCBbIHN3aXRjaGVzIF0gZmls ZXNwZWMgWyBmaWxlc3BlYyBbIGZpbGVzcGVjIFsgLi4uIF0gXSBdCi0gICAgICAgICAgTGlrZSBH RVQsIGJ1dCBmb3IgbXVsdGlwbGUgZmlsZXMuIE9uZSBvciBtb3JlIGZpbGUKLSAgICAgICAgICBz cGVjaWZpY2F0aW9ucyBjYW4gYmUgZ2l2ZW4sIGFuZCBhbnkgb3IgYWxsIChvciBub25lKSBvZiB0 aGVtCi0gICAgICAgICAgY2FuIGNvbnRhaW4gd2lsZGNhcmRzIG9yIGNhbiBiZSBkaXJlY3Rvcnkg bmFtZXMuIFRoZSBmaWxlIGxpc3QKLSAgICAgICAgICBtYXkgbm90IGluY2x1ZGUgYW4gYXMtbmFt ZSwgYnV0IHlvdSBjYW4gc3RpbGwgZ2l2ZSBvbmUgd2l0aCB0aGUKLSAgICAgICAgICAvQVMtTkFN RTogc3dpdGNoLgotCi0gICBJbiBib3RoIHRoZSBGVFAgR0VUIGFuZCBNR0VUIGNvbW1hbmRzLCBh bnkgZmlsZW5hbWVzIHRoYXQgY29udGFpbgotICAgc3BhY2VzIG11c3QgYmUgZW5jbG9zZWQgaW4g YnJhY2VzIG9yIGRvdWJsZXF1b3RlcyAoc2VlIFszMTJdU2VjdGlvbiA1Ci0gICBmb3IgZGV0YWls cykuCi0KLSAgIEZUUCBkb3dubG9hZHMgbWF5IGJlIGludGVycnVwdGVkIGp1c3QgbGlrZSBLZXJt aXQgdHJhbnNmZXJzLiBXaGlsZSB0aGUKLSAgIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzLCB0eXBl OgotCi0gICAgICogWCB0byBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgZmlsZSBhbmQgZ28gb24gdG8g dGhlIG5leHQgZmlsZS4KLSAgICAgKiBaIChvciBDb250cm9sLUMpIHRvIGNhbmNlbCB0aGUgY3Vy cmVudCBmaWxlIGFuZCBhbGwgcmVtYWluaW5nCi0gICAgICAgZmlsZXMuCi0KLSAgIEJlZm9yZSBw cm9jZWVkaW5nLCBhIGJyaWVmIHdvcmQgYWJvdXQgdGVtcG9yYXJ5IGZpbGVzLiBJbiBGVFAgcHJv dG9jb2wsCi0gICB0aGUgTUdFVCBjb21tYW5kIHdvcmtzIGJ5IHJlcXVlc3RpbmcgYSBmaWxlIGxp c3QgZnJvbSB0aGUgc2VydmVyLCBhbmQKLSAgIHRoZW4gKGludGVybmFsbHkpIGlzc3VpbmcgYSBH RVQgY29tbWFuZCAoRlRQIFJFVFIgcHJvdG9jb2wgZGlyZWN0aXZlKQotICAgZm9yIGVhY2ggZmls ZS4gVGhlIGZpbGUgbGlzdCByZXR1cm5lZCBieSB0aGUgc2VydmVyIGNhbiBiZSBhbnkgc2l6ZSBh dAotICAgYWxsLCBzbyBpbiBjYXNlIGl0IGlzIGh1Z2UsIHdlIGRvbid0IHN0b3JlIGl0IGluIG1l bW9yeTsgaW5zdGVhZCB3ZSBwdXQKLSAgIGl0IGluIGEgdGVtcG9yYXJ5IGZpbGUuIEZvciB0cm91 Ymxlc2hvb3RpbmcgcHVycG9zZXMsIHlvdSBzaG91bGQgYmUKLSAgIGF3YXJlIG9mIHR3byBwb2lu dHM6Ci0KLSAgICAxLiBUaGUgbG9jYXRpb24gb2YgdGhlIHRlbXBvcmFyeSBmaWxlIGlzIGNob3Nl biBhY2NvcmRpbmcgdGhlIFRNUCBvcgotICAgICAgIFRFTVAgZW52aXJvbm1lbnQgdmFyaWFibGVz LiBJZiBuZWl0aGVyIG9mIHRoZXNlIHZhcmlhYmxlcyBpcwotICAgICAgIGRlZmluZWQsIHlvdSBt aWdodCBuZWVkIHRvIGRlZmluZSBpdC4gSW4gY2FzZSB0aGVyZSBpcyBub3QgZW5vdWdoCi0gICAg ICAgc3BhY2Ugb24gdGhlIGluZGljYXRlZCBkaXNrIG9yIHBhcnRpdGlvbiBmb3IgdGhlIHNlcnZl cidzIGZpbGUKLSAgICAgICBsaXN0LCB5b3UgbWlnaHQgbmVlZCB0byBlaXRoZXIgY2xlYW4gdXAg dGhlIHRlbXBvcmFyeSBhcmVhLCBvcgotICAgICAgIHJlZGVmaW5lIHRoZSBlbnZpcm9ubWVudCB2 YXJpYWJsZSB0byBpbmRpY2F0ZSBhIGRpZmZlcmVudCBhcmVhIHRoYXQKLSAgICAgICBoYXMgc3Vm ZmljaWVudCBzcGFjZS4KLSAgICAyLiBJZiB5b3Ugd2FudCB0byBsb29rIGF0IHRoZSBsaXN0IHlv dXJzZWxmLCB1c2UgU0VUIEZUUCBERUJVRyBPTi4KLSAgICAgICBUaGlzIHRlbGxzIEtlcm1pdCB0 byAoYSkgZ2l2ZSB5b3UgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlCi0gICAgICAgdGVtcG9yYXJ5 IGZpbGUgYXQgdGhlIGVuZCBvZiBlYWNoIE1HRVQgY29tbWFuZCwgYW5kIChiKSBub3QgdG8KLSAg ICAgICBkZWxldGUgaXQsIGFzIGl0IG5vcm1hbGx5IGRvZXMuCi0KLTMuNi4xLiBGVFAgR0VUIFN3 aXRjaGVzCi0KLSAgIFRoZSBmb2xsb3dpbmcgc3dpdGNoZXMgYXJlIGF2YWlsYWJsZSB3aXRoIEZU UCBHRVQgYW5kIE1HRVQ6Ci0KLSAgIC9URVhUCi0gICAgICAgICAgU3BlY2lmaWVzIGEgdGV4dC1t b2RlIHRyYW5zZmVyLiBPdmVycmlkZXMgdGhlIGdsb2JhbCBGVFAgVFlQRQotICAgICAgICAgIHNl dHRpbmcgYW5kIGZpbGVuYW1lIHBhdHRlcm4tbWF0Y2hpbmcgZm9yIHRoZSBkdXJhdGlvbiBvZiB0 aGUKLSAgICAgICAgICBjdXJyZW50IGNvbW1hbmQgb25seSwgQWxsIGZpbGVzIGFyZSBkb3dubG9h ZGVkIGluIHRleHQgbW9kZS4KLSAgICAgICAgICBTeW5vbnltOiAvQVNDSUkuCi0KLSAgIC9CSU5B UlkKLSAgICAgICAgICBTcGVjaWZpZXMgYSBiaW5hcnktbW9kZSB0cmFuc2Zlci4gT3ZlcnJpZGVz IHRoZSBnbG9iYWwgRlRQIFRZUEUKLSAgICAgICAgICBzZXR0aW5nIGFuZCBmaWxlbmFtZSBwYXR0 ZXJuLW1hdGNoaW5nIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlCi0gICAgICAgICAgY3VycmVudCBj b21tYW5kIG9ubHkuIEFsbCBmaWxlcyBhcmUgZG93bmxvYWRlZCBpbiBiaW5hcnkgbW9kZS4KLQot ICAgL1RFTkVYCi0gICAgICAgICAgTGlrZSAvQklOQVJZIGJ1dCBzcGVjaWZpZXMgYSBzcGVjaWFs IGJpbmFyeSB0cmFuc2ZlciBtb2RlIHRvIGJlCi0gICAgICAgICAgdXNlZCB3aGVuIGdldHRpbmcg OC1iaXQgYmluYXJ5IGZpbGVzIGZyb20gYSAzNi1iaXQgcGxhdGZvcm0gc3VjaAotICAgICAgICAg IGFzIFRPUFMtMTAsIFRPUFMtMjAsIG9yIFRFTkVYLiBBbGwgZmlsZXMgYXJlIGRvd25sb2FkZWQg aW4gdGhlCi0gICAgICAgICAgc3BlY2lhbCBiaW5hcnkgbW9kZS4KLQotICAgL1JFQ09WRVIKLSAg ICAgICAgICBUaGlzIGluc3RydWN0cyBLZXJtaXQgdG8gdHJ5IHRvIHJlY292ZXIgYW4gaW5jb21w bGV0ZSBkb3dubG9hZAotICAgICAgICAgIGZyb20gdGhlIHBvaW50IG9mIGZhaWx1cmUuIFdvcmtz IG9ubHkgaW4gYmluYXJ5IG1vZGUsIGFuZCBvbmx5Ci0gICAgICAgICAgaWYgdGhlIHNlcnZlciBz dXBwb3J0cyB0aGUgKG5vdC15ZXQtc3RhbmRhcmQpIEZUUCAiUkVTVCIKLSAgICAgICAgICBkaXJl Y3RpdmUuIFNlZSBbMzEzXVNlY3Rpb24gMy42LjMgZm9yIGRldGFpbHMuIFN5bm9ueW06Ci0gICAg ICAgICAgL1JFU1RBUlQuCi0KLSAgIC9GSUxFTkFNRVM6e0NPTlZFUlRFRCxMSVRFUkFMfQotICAg ICAgICAgIE92ZXJyaWRlcyB0aGUgWzMxNF1GVFAgRklMRU5BTUVTIChmaWxlbmFtZSBjb252ZXJz aW9uKSBzZXR0aW5nCi0gICAgICAgICAgZm9yIHRoaXMgZG93bmxvYWQgb25seSwgZm9yY2luZyBp bmNvbWluZyBmaWxlbmFtZXMgdG8gYmUgZWl0aGVyCi0gICAgICAgICAgY29udmVydGVkIG9yIHRh a2VuIGxpdGVyYWxseS4KLQotICAgL0FTLU5BTUU6dGV4dAotICAgICAgICAgIEZvciBHRVQsIHRo aXMgaXMgZXF1aXZhbGVudCB0byBnaXZpbmcgYW4gYXMtbmFtZSBhZnRlciB0aGUKLSAgICAgICAg ICBmaWxlbmFtZS4gRm9yIE1HRVQsIHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIHNwZWNpZnkgYWx0 ZXJuYXRpdmUKLSAgICAgICAgICBuYW1lcyBmb3IgdGhlIGluY29taW5nIGZpbGVzLiBXaXRoIE1H RVQsIHRoZSAvQVMtTkFNRSB0ZXh0Ci0gICAgICAgICAgc2hvdWxkIChtdXN0KSBjb250YWluIGEg S2VybWl0IHZhcmlhYmxlLCB1c3VhbGx5IFx2KGZpbGVuYW1lKSBvcgotICAgICAgICAgIFx2KGZp bGVudW1iZXIpLiBFeGFtcGxlOgotCi0gIG1nZXQgL3RleHQgL2FzLW5hbWU6XHYoZmlsZW5hbWUp Lm5ldyAqLmMKLQotICAgICAgICAgIFRoaXMgZ2V0cyBhbGwgIi5jIiBmaWxlcyBhbmQgc3RvcmVz IHRoZW0gd2l0aCAiCi0KLSAgICAgICAgICAubmV3IiBhcHBlbmRlZCB0byB0aGVpciBuYW1lcy4g U2VlIHRoZSBbMzE1XUMtS2VybWl0IDcuMCBVcGRhdGUKLSAgICAgICAgICBOb3RlcyBmb3IgZGV0 YWlscy4KLQotICAgL0NPTU1BTkQKLSAgICAgICAgICBUaGlzIHNwZWNpZmllcyB0aGF0IHRoZSBp bmNvbWluZyBmaWxlIGlzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlCi0gICAgICAgICAgc3RhbmRhcmQg aW5wdXQgb2YgYSBjb21tYW5kLCByYXRoZXIgdGhhbiB0byBhIGZpbGUuIFRoZSBjb21tYW5kCi0g ICAgICAgICAgbmFtZSBpcyB0aGUgYXMtbmFtZSBmcm9tIHRoZSBHRVQgY29tbWFuZCBvciB0aGUg L0FTLU5BTUUKLSAgICAgICAgICBhcmd1bWVudC4gSWYgeW91IG5lZWQgdG8gcmVmZXIgdG8gdGhl IGluY29taW5nIGZpbGUncyBuYW1lIGluCi0gICAgICAgICAgdGhlIGNvbW1hbmQsIHVzZSBcdihm aWxlbmFtZSkuIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlCi0gICAgICAgICAgcmVndWxhciBL ZXJtaXQgWzMxNl1HRVQgL0NPTU1BTkQgY29tbWFuZCBmb3IgZGV0YWlscyBhbmQKLSAgICAgICAg ICBleGFtcGxlcy4KLQotICAgL1FVSUVUCi0gICAgICAgICAgVHJhbnNmZXJzIHRoZSBmaWxlcyBx dWlldGx5OyBkb24ndCBwdXQgdXAgYSBmaWxlLXRyYW5zZmVyCi0gICAgICAgICAgZGlzcGxheS4K LQotICAgL0VSUk9SLUFDVElPTjp7UVVJVCxQUk9DRUVEfQotICAgICAgICAgIFRoaXMgc3dpdGNo IGFmZmVjdHMgb25seSBNR0VULiBJZiBhbiBlcnJvciBvY2N1cnMgd2l0aCBhCi0gICAgICAgICAg cGFydGljdWxhciBmaWxlLCB0aGlzIHRlbGxzIHdoZXRoZXIgdG8gZ28gb24gdG8gdGhlIG5leHQg ZmlsZQotICAgICAgICAgIChQUk9DRUVEKSBvciB0byBzdG9wIHJpZ2h0IGF3YXkgYW5kIGZhaWwg KFFVSVQpLiBUaGUgZGVmYXVsdCBpcwotICAgICAgICAgIFBST0NFRUQuCi0KLSAgIFRoZSBmaWxl IHNlbGVjdGlvbiBzd2l0Y2hlcyBhcmU6Ci0KLSAgIC9FWENFUFQ6e3BhdHRlcm59IG9yIC9FWENF UFQ6e3twYXR0ZXJufXtwYXR0ZXJufXsuLi59fQotICAgICAgICAgIEV4Y2VwdGlvbiBsaXN0IGZv ciBNR0VUOyBza2lwIGRvd25sb2FkaW5nIGFueSBmaWxlIHdob3NlIG5hbWUKLSAgICAgICAgICBt YXRjaGVzIGFueSBvZiB0aGUgZ2l2ZW4gcGF0dGVybnMgKHdoZW4gdXNpbmcgdGhlIHNlY29uZCBm b3JtYXQsCi0gICAgICAgICAgdXAgdG8gNjQgcGF0dGVybnMgbWF5IGJlIHNwZWNpZmllZCkuIFsz MTddQ0xJQ0sgSEVSRSBmb3Igc3ludGF4Ci0gICAgICAgICAgZGV0YWlscy4KLQotICAgL1NNQUxM RVItVEhBTjpudW1iZXIKLSAgICAgICAgICBEb3dubG9hZCBvbmx5IGZpbGVzIHdob3NlIHNpemUg aXMgc21hbGxlciB0aGFuIHRoZSBnaXZlbiBudW1iZXIKLSAgICAgICAgICBvZiBieXRlcyAob2N0 ZXRzKS4gUmVxdWlyZXMgdGhhdCB0aGUgRlRQIHNlcnZlciBzdXBwb3J0IHRoZSBTSVpFCi0gICAg ICAgICAgb3IgTUxTRCBkaXJlY3RpdmUuCi0KLSAgIC9MQVJHRVItVEhBTjpudW1iZXIKLSAgICAg ICAgICBEb3dubG9hZCBvbmx5IGZpbGVzIHdob3NlIHNpemUgaXMgZ3JlYXRlciB0aGFuIHRoZSBn aXZlbiBudW1iZXIKLSAgICAgICAgICBvZiBieXRlcy4gUmVxdWlyZXMgdGhhdCB0aGUgRlRQIHNl cnZlciBzdXBwb3J0IHRoZSBTSVpFIG9yIE1MU0QKLSAgICAgICAgICBkaXJlY3RpdmUuCi0KLSAg IC9OT0JBQ0tVUEZJTEVTCi0gICAgICAgICAgRHVyaW5nIE1HRVQsIGRvbid0IGRvd25sb2FkIGFu eSBmaWxlcyB3aG9zZSBuYW1lcyBlbmQgd2l0aAotICAgICAgICAgIGJhY2t1cCBzdWZmaXhlcyAo Ln5ufiB3aGVyZSBuIGlzIGEgbnVtYmVyKS4KLQotICAgL05PRE9URklMRVMKLSAgICAgICAgICBE dXJpbmcgTUdFVCwgZG9uJ3QgZG93bmxvYWQgYW55IGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdp dGgKLSAgICAgICAgICBwZXJpb2QgKC4pLiBFcXVpdmFsZW50IHRvIC9FWENFUFQ6ey4qfS4KLQot ICAgL0xJU1RGSUxFOmxvY2FsLWZpbGVuYW1lCi0gICAgICAgICAgVGhlIGdpdmVuIGZpbGUgY29u dGFpbnMgYSBsaXN0IG9mIGZpbGVzIHRvIEdFVCwgb25lIHBlciBsaW5lLgotICAgICAgICAgIEZp bGVuYW1lcyBpbiB0aGUgbGlzdGZpbGUgY2FuIGNvbnRhaW4gd2lsZGNhcmQgY2hhcmFjdGVycyBp biB0aGUKLSAgICAgICAgICBzeW50YXggb2YgdGhlIHNlcnZlci4gVGhlcmUgaXMgbm8gbGltaXQg b24gdGhlIG51bWJlciBvZiBsaW5lcwotICAgICAgICAgIGluIHRoZSBsaXN0ZmlsZS4KLQotICAg L05BTUVMSVNUOmxvY2FsLWZpbGVuYW1lCi0gICAgICAgICAgSWYgdGhpcyBzd2l0Y2ggaXMgZ2l2 ZW4sIHRoZW4gaW5zdGVhZCBvZiBhY3R1YWxseSByZXRyaWV2aW5nIHRoZQotICAgICAgICAgIHNl bGVjdGVkIGZpbGVzLCB0aGUgR0VUIGNvbW1hbmQgcmV0cmlldmVzIGEgbGlzdCBvZiB0aGUgbmFt ZXMgb2YKLSAgICAgICAgICB0aGUgZmlsZXMgdGhhdCB3b3VsZCBiZSByZXRyaWV2ZWQsIGFuZCBw bGFjZXMgaXQgaW4gdGhlCi0gICAgICAgICAgc3BlY2lmaWVkIGZpbGUuIFRoZSByZXN1bHRpbmcg ZmlsZSBpcyBhbiBvcmRpbmFyeSB0ZXh0IGZpbGUsCi0gICAgICAgICAgd2l0aCBvbmUgZmlsZW5h bWUgcGVyIGxpbmUsIHN1aXRhYmxlIGZvciByZWFkaW5nIGJ5IGEgcGVyc29uLCBvcgotICAgICAg ICAgIHByb2Nlc3NpbmcgYnkgYSBjb21wdXRlciBwcm9ncmFtLCBpbmNsdWRpbmcgS2VybWl0IGl0 c2VsZiAoRk9QRU4KLSAgICAgICAgICAvIEZSRUFEIC8gRldSSVRFIC8gRkNMT1NFKSwgYW5kIGFz IC9GSUxFTElTVDogZmlsZS4gSWYgdGhlCi0gICAgICAgICAgZmlsZW5hbWUgaXMgb21pdHRlZCBv ciBnaXZlbiBhcyAiLSIgKGRhc2gsIGh5cGhlbiksIHRoZSBsaXN0Ci0gICAgICAgICAgZ29lcyB0 byB0aGUgc2NyZWVuLiBOT1RFOiBpZiB5b3Ugd2FudCBhIGNvcHkgb2YgdGhlIGNvbXBsZXRlCi0g ICAgICAgICAgbGlzdCBzZW50IGJ5IHRoZSBzZXJ2ZXIsIHVzZSBTRVQgRlRQIERFQlVHIE9OLCBw ZXJmb3JtIGFuIE1HRVQsCi0gICAgICAgICAgYW5kIHRoZSB0ZW1wb3JhcnkgZmlsZSBjb250YWlu aW5nIHRoZSBsaXN0IHdpbGwgYmUga2VwdCByYXRoZXIKLSAgICAgICAgICB0aGFuIGRlbGV0ZWQg KGFuZCBLZXJtaXQgdGVsbHMgeW91IGl0cyBuYW1lKS4KLQotICAgL1VQREFURSwgL0NPTExJU0lP TjprZXl3b3JkCi0gICAgICAgICAgRXhwbGFpbmVkIGluIFszMThdU2VjdGlvbiAzLjYuMi4KLQot ICAgL1JFQ1VSU0lWRQotICAgICAgICAgIFRoaXMgbWVhbnMgdG8gdHJ5IHRvIGRvd25sb2FkIGFu IGVudGlyZSBkaXJlY3RvcnkgdHJlZSwgcmF0aGVyCi0gICAgICAgICAgdGhhbiBqdXN0IGZpbGVz IGZyb20gYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeS4gSW4gZmFjdCwgRlRQCi0gICAgICAgICAgcHJv dG9jb2wgZG9lcyBub3QgcHJvdmlkZSBhIG1ldGhvZCB0byByZXF1ZXN0IGEgcmVjdXJzaXZlCi0g ICAgICAgICAgZG93bmxvYWQgKHVubGVzcyB0aGUgc2VydmVyIHN1cHBvcnRzIE1MU0Q7IHNlZSBb MzE5XVNlY3Rpb24KLSAgICAgICAgICAzLjExKSwgc28gdGhpcyB3b3JrcyBvbmx5IGlmIHRoZSBG VFAgc2VydmVyIGRvZXMgaXQgYW55d2F5LAotICAgICAgICAgIHdpdGhvdXQgYmVpbmcgYXNrZWQs IGFzIHNvbWUgZG8uIEluIHRoaXMgY2FzZSwgS2VybWl0IGRldGVjdHMKLSAgICAgICAgICB0aGF0 IG5hbWVzIGluIHRoZSByZXR1cm5lZCBmaWxlIGxpc3QgY29udGFpbiBkaXJlY3RvcnkKLSAgICAg ICAgICBzZXBhcmF0b3JzLCBhbmQgdGhlcmVmb3JlIGF0dGVtcHRzIHRvIGNyZWF0ZSB0aGUgbmVl ZGVkCi0gICAgICAgICAgZGlyZWN0b3JpZXMgYXMgdGhlIGZpbGVzIGFycml2ZS4gQnV0IHRoaXMg Y2FuIHdvcmsgb25seSBpZiB0aGUKLSAgICAgICAgICBzZXJ2ZXIgaXMgb24gdGhlIHNhbWUga2lu ZCBvZiBwbGF0Zm9ybSBhcyB0aGUgY2xpZW50LCBzbyB0aGUKLSAgICAgICAgICBwYXRobmFtZSBz eW50YXggY2FuIGJlIHJlY29nbml6ZWQsIGFuZCBhbHNvIGJlY2F1c2UgdGhlIHNlcnZlcgotICAg ICAgICAgIGRvZXMgbm90IHN3aXRjaCBiZXR3ZWVuIHRleHQgYW5kIGJpbmFyeSBtb2RlLCB3aGlj aCB3b3VsZCBiZQotICAgICAgICAgIHZpdGFsIGZvciBjcm9zcy1wbGF0Zm9ybSB0cmFuc2ZlcnMu IFVzZSB3aXRoIGNhdXRpb24uIFN5bm9ueW06Ci0gICAgICAgICAgL1NVQkRJUkVDVE9SSUVTLgot Ci0gICAgICAgICAgRXZlbiB3aGVuIHRoZSBzZXJ2ZXIgZG9lcyBub3QgcHJvdmlkZSByZWN1cnNp dmUgZmlsZSBsaXN0cywKLSAgICAgICAgICBbTV1HRVQgL1JFQ1VSU0lWRSBmb3JjZXMgS2VybWl0 IHRvIHJlcGxpY2F0ZSBhbnkgZGlyZWN0b3J5Ci0gICAgICAgICAgc3RydWN0dXJlIGltcGxpZWQg b3IgZXhwcmVzc2VkIGJ5IHRoZSBzZXJ2ZXIncyBmaWxlIGxpc3QuIEZvcgotICAgICAgICAgIGV4 YW1wbGU6Ci0KLSAgZ2V0IHNvbWVwYXRoL3NvbWVmaWxlCi0KLSAgICAgICAgICBHZXRzIHRoZSBm aWxlIG5hbWVkIHNvbWVmaWxlIGZyb20gdGhlIHNlcnZlcidzIHNvbWVwYXRoCi0gICAgICAgICAg ZGlyZWN0b3J5IGFuZCBwdXRzIGl0IEtlcm1pdCdzIGN1cnJlbnQgKG9yIGRvd25sb2FkKSBkaXJl Y3RvcnksCi0gICAgICAgICAgd2hlcmVhczoKLQotICBnZXQgL3JlY3Vyc2l2ZSBzb21lcGF0aC9z b21lZmlsZQotCi0gICAgICAgICAgY3JlYXRlcyB0aGUgcGF0aCBsb2NhbGx5IGFuZCB0aGVuIHB1 dHMgdGhlIGZpbGUgaW4gaXQuIFNpbWlsYXJseQotICAgICAgICAgIGZvciBNR0VUOgotCi0gIG1n ZXQgKi9kYXRhLyoKLQotICAgICAgICAgIGRvd25sb2FkcyBhbGwgdGhlIGZpbGVzIGluIGFsbCB0 aGUgZGF0YSBzdWJkaXJlY3RvcmllcyBvZiBhbGwKLSAgICAgICAgICB0aGUgc3ViZGlyZWN0b3Jp ZXMgb2YgdGhlIHNlcnZlcidzIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBzdG9yZXMKLSAgICAgICAg ICB0aGVtIGxvY2FsbHkgaW4gS2VybWl0J3MgY3VycmVudCAob3IgZG93bmxvYWQpIGRpcmVjdG9y eSwKLSAgICAgICAgICB3aGVyZWFzOgotCi0gIG1nZXQgL3JlY3Vyc2l2ZSAqL2RhdGEvKgotCi0g ICAgICAgICAgcmUtY3JlYXRlcyB0aGUgc2VydmVyJ3MgZGlyZWN0b3J5IHN0cnVjdHVyZSBsb2Nh bGx5LgotCi0gICBUaGUgRlRQIHByb3RvY29sIGRvZXMgbm90IGluY2x1ZGUgZXhwbGljaXQgbWVj aGFuaXNtcyBmb3IgcmVjdXJzaW9uLCBzbwotICAgS2VybWl0IGJ1aWxkcyB1cG9uIHdoYXQgaXMg YXZhaWxhYmxlLiBBbHRob3VnaCBhbiBJbnRlcm5ldCBkcmFmdAotICAgZGVzY3JpYmVzIGEgbWVj aGFuaXNtICgiTUxTRCIpIHRoYXQgd291bGQgYWxsb3cgcHJvdG9jb2wtZHJpdmVuCi0gICByZWN1 cnNpb24sIHNpbWlsYXIgdG8gS2VybWl0J3MgRmlsZSBBdHRyaWJ1dGUgcGFja2V0cyAoY2lyY2Eg MTk4NCksIGl0Ci0gICBoYXMgbm90IHlldCBhdHRhaW5lZCBSRkMgb3Igc3RhbmRhcmQgc3RhdHVz LCBhbmQgc2VydmVycyBhcmUgbm90IHlldAotICAgd2lkZWx5IGF2YWlsYWJsZSB0aGF0IG9mZmVy IHRoaXMgZmVhdHVyZS4gSW4gdGhlIG1lYW50aW1lLCB0aGUKLSAgIGVmZmVjdGl2ZW5lc3Mgb2Yg TUdFVCAvUkVDVVJTSVZFIGRlcGVuZHMgb24gdGhlIEZUUCBzZXJ2ZXIKLSAgIGltcGxlbWVudGF0 aW9uLiBJZiB0aGUgc2VydmVyIHJldHVybnMgYSByZWN1cnNpdmUgbGlzdCBpbiByZXNwb25zZSB0 bwotICAgdGhlIHN0YW5kYXJkIE5MU1QgY29tbWFuZCAod2hvc2UgYmVoYXZpb3IgaXMgaWxsLWRl ZmluZWQpLCBLZXJtaXQncyBGVFAKLSAgIE1HRVQgL1JFQ1VSU0lWRSBjb21tYW5kIHVzZXMgaXQg dG8gcmUtY3JlYXRlIHRoZSByZW1vdGUgZGlyZWN0b3J5IHRyZWUKLSAgIGxvY2FsbHkuIElmIHRo ZSBzZXJ2ZXIgc3VwcG9ydHMgTUxTRCwgQy1LZXJtaXQgOC4wLjIwNiBhbmQgS2VybWl0IDk1Ci0g ICAyLjEgYW5kIGxhdGVyIGFyZSBhYmxlIHRvIHNlbnNlIGl0IGF1dG9tYXRpY2FsbHkgYW5kIHVz ZSBpdCwgYXMKLSAgIGRlc2NyaWJlZCBiZWxvdyBpbiBbMzIwXVNlY3Rpb24gMy4xMS4KLQotICAg VGhlIC9CRUZPUkU6LCAvQUZURVI6LCAvTk9ULUJFRk9SRTosIGFuZCAvTk9ULUFGVEVSOiBzd2l0 Y2hlcyBhcmUgbm90Ci0gICBhdmFpbGFibGUgZm9yIGRvd25sb2FkaW5nIGJlY2F1c2Ugb2YgdGhl IGNvbmZ1c2lvbiB3aXRoIHRpbWV6b25lcy4KLSAgIFdvdWxkIHRoZSBnaXZlbiB0aW1lcyBiZSBp biB0aGUgbG9jYWwgdGltZXpvbmUsIHRoZSBzZXJ2ZXIncyB0aW1lem9uZSwKLSAgIG9yIEdNVD8g VGhlIEZUUCBzZXJ2ZXIncyBkaXJlY3RvcnkgbGlzdGluZ3Mgc2hvdyBpdHMgb3duIGxvY2FsIHRp bWVzCi0gICBidXQgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHRpbWV6b25lIHRoZSBzZXJ2ZXIg aXMgaW4sIHRoZXJlJ3Mgbm8gd2F5Ci0gICB0byByZWNvbmNpbGUgb3VyIGxvY2FsIHRpbWVzIHdp dGggdGhlIHNlcnZlcidzLiBTaW1pbGFybHksIC9QRVJNSVNTSU9OUwotICAgY2FuJ3QgYmUgcHJl c2VydmVkIGluIGRvd25sb2FkcyBiZWNhdXNlIEZUUCBwcm90b2NvbCBwcm92aWRlcyBubyBtZWFu cwotICAgb2YgcXVlcnlpbmcgdGhlIHNlcnZlciBmb3IgYSBmaWxlJ3MgcGVybWlzc2lvbi4KLQot ICAgU291cmNlLWZpbGUgZGlzcG9zaXRpb24gc3dpdGNoZXM6Ci0KLSAgIC9ERUxFVEUKLSAgICAg ICAgICBFYWNoIGZpbGUgdGhhdCBpcyBkb3dubG9hZGVkIHN1Y2Nlc3NmdWxseSBpcyB0byBiZSBk ZWxldGVkIGZyb20KLSAgICAgICAgICB0aGUgc2VydmVyLiBSZXF1aXJlcyB0aGUgYXBwcm9wcmlh dGUgZmlsZSBhY2Nlc3MgcmlnaHRzIG9uIHRoZQotICAgICAgICAgIHNlcnZlci4KLQotICAgL1NF UlZFUi1SRU5BTUUtVE86dGVtcGxhdGUKLSAgICAgICAgICBBc2tzIHRoZSBzZXJ2ZXIgdG8gcmVu YW1lIGVhY2ggKHJlbW90ZSkgc291cmNlIGZpbGUgaW1tZWRpYXRlbHkKLSAgICAgICAgICBhZnRl ciwgYW5kIG9ubHkgaWYsIGl0IGlzIHNlbnQgY29ycmVjdGx5LiBTZWUgWzMyMV1QVVQKLSAgICAg ICAgICAvU0VSVkVSLVJFTkFNRS1UTzogZm9yIGRldGFpbHMuCi0KLSAgIERlc3RpbmF0aW9uLWZp bGUgZGlzcG9zaXRpb24gc3dpdGNoZXM6Ci0KLSAgIC9UTy1TQ1JFRU4KLSAgICAgICAgICBEaXNw bGF5cyB0aGUgaW5jb21pbmcgZmlsZSBvbiB0aGUgc2NyZWVuIHJhdGhlciB0aGFuIHN0b3Jpbmcg aXQKLSAgICAgICAgICBvbiBkaXNrLiBJZiB0aGlzIHN3aXRjaCBpcyBnaXZlbiwgdGhlIC9SRU5B TUUtVE8gYW5kIC9NT1ZFLVRPCi0gICAgICAgICAgc3dpdGNoZXMgYXJlIGlnbm9yZWQsIHRoZSBm aWxlLXRyYW5zZmVyIGRpc3BsYXkgaXMgc3VwcHJlc3NlZCwKLSAgICAgICAgICBhbmQgdGhlIGdp dmVuIGZpbGUocykgaXMvYXJlIHNob3duIG9uIHRoZSBzY3JlZW4uIENhbiBiZSB1c2VkCi0gICAg ICAgICAgd2l0aCAvRklMVEVSLCBlLmcuCi0KLSAgZ2V0IC90ZXh0IC90by1zY3JlZW4gL2ZpbHRl cjptb3JlIG9vZmEudHh0Ci0KLSAgICAgICAgICBJbiBmYWN0LCB5b3Ugc2hvdWxkIGFsd2F5cyB1 c2UgL1RPLVNDUkVFTiB3aXRoIC9GSUxURVIgb3IKLSAgICAgICAgICAvQ09NTUFORCB3aGVuIHRo ZSBjb21tYW5kIHdvdWxkIHJlc3VsdCBpbiBkaXNwbGF5aW5nIHRoZQotICAgICAgICAgIGluY29t aW5nIGZpbGUgb24gdGhlIHNjcmVlbjsgb3RoZXJ3aXNlIEMtS2VybWl0IHdvdWxkIGhhdmUgbm8K LSAgICAgICAgICB3YXkgb2Yga25vd2luZyB0byBzdXBwcmVzcyBpdHMgZmlsZSB0cmFuc2ZlciBk aXNwbGF5IChzaW5jZSBpdAotICAgICAgICAgIGNhbid0IGJlIGV4cGVjdGVkIHRvIGtub3cgd2hh dCB0aGUgY29tbWFuZCBvciBmaWx0ZXIgZG9lcykuCi0KLSAgIC9SRU5BTUUtVE86dGVtcGxhdGUK LSAgICAgICAgICBFYWNoIGZpbGUgdGhhdCBpcyBkb3dubG9hZGVkIGlzIHRvIGJlIHJlbmFtZWQg YXMgaW5kaWNhdGVkIGlmCi0gICAgICAgICAgYW5kIG9ubHkgaWYgaXQgd2FzIHJlY2VpdmVkIGNv bXBsZXRlbHkgYW5kIHdpdGhvdXQgZXJyb3IuIFRoZQotICAgICAgICAgIHRlbXBsYXRlIGNhbiBi ZSBsaXRlcmFsIHRleHQgb3IgY2FuIGNvbnRhaW4gdmFyaWFibGVzIHRoYXQgYXJlCi0gICAgICAg ICAgZXZhbHVhdGVkIGZvciBlYWNoIGZpbGUuIEZvciBNR0VULCB0aGUgdGV4dCBtdXN0IGNvbnRh aW4KLSAgICAgICAgICB2YXJpYWJsZXM7IGZvciBHRVQgaXQgY2FuIGJlIGEgbGl0ZXJhbCBzdHJp bmcuIFRoZSBcdihmaWxlbmFtZSkKLSAgICAgICAgICB2YXJpYWJsZSBjb250YWlucyB0aGUgbmFt ZSBvZiB0aGUgY3VycmVudCBmaWxlLCBzbzoKLQotICBmdHAgbWdldCAvcmVuYW1lLXRvOlx2KGZp bGVuYW1lKS5vayAqCi0KLSAgICAgICAgICBjYXVzZXMgZWFjaCBmaWxlIHRoYXQgaXMgc3VjY2Vz c2Z1bGx5IGRvd25sb2FkZWQgdG8gaGF2ZSAiLm9rIgotICAgICAgICAgIGFwcGVuZGVkIHRvIGl0 cyBuYW1lLiBGb3IgZGV0YWlscyBzZWUgWzMyMl1TZWN0aW9uIDQuMSBvZiB0aGUKLSAgICAgICAg ICBbMzIzXUMtS2VybWl0IDcuMCBVcGRhdGUgTm90ZXMuCi0KLSAgIC9NT1ZFLVRPOnRleHQKLSAg ICAgICAgICBKdXN0IGxpa2UgL1JFTkFNRS1UTzosIGV4Y2VwdCB0aGUgdGV4dCBkZW5vdGVzIHRo ZSBuYW1lIG9mIGEKLSAgICAgICAgICBkaXJlY3RvcnkgdG8gd2hpY2ggc3VjY2Vzc2Z1bGx5IGRv d25sb2FkZWQgZmlsZXMgYXJlIHRvIGJlCi0gICAgICAgICAgbW92ZWQuIElmIHRoZSBkaXJlY3Rv cnkgZG9lcyBub3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQuCi0KLSAgIFRoZSBmaWxlIHRyYW5zZmVy IGRpc3BsYXkgZG9lcyBub3Qgc2hvdyB0aGUgL01PVkUtVE8gb3IgL1JFTkFNRS1UTwotICAgdmFs dWUsIHNpbmNlIHRoZSBpbmNvbWluZyBmaWxlIGhhcyBub3QgeWV0IGJlZW4gbW92ZWQgb3IgcmVu YW1lZC4KLQotMy42LjIuIEZpbGVuYW1lIENvbGxpc2lvbnMKLQotICAgV2hhdCBzaG91bGQgaGFw cGVuIGlmIGFuIGluY29taW5nIGZpbGUgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcK LSAgIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5PyBCeSBkZWZhdWx0LCBLZXJtaXQncyBGSUxF IENPTExJU0lPTiBzZXR0aW5nCi0gICBhcHBsaWVzOiBCQUNLVVAsIFJFTkFNRSwgVVBEQVRFLCBE SVNDQVJELCBldGMsIGFzIGRlc2NyaWJlZCBpbgotICAgWzMyNF1Vc2luZyBDLUtlcm1pdC4gS2Vy bWl0J3MgZGVmYXVsdCBGSUxFIENPTExJU0lPTiBzZXR0aW5nIGlzIEJBQ0tVUAotICAgKHJlbmFt ZSB0aGUgZXhpc3RpbmcgZmlsZSBhbmQgc3RvcmUgdGhlIGluY29taW5nIGZpbGUgdW5kZXIgaXRz IG93bgotICAgbmFtZSkgYW5kIHRoZXJlZm9yZSB0aGlzIGlzIGFsc28gdGhlIGRlZmF1bHQgRlRQ IGNvbGxpc2lvbiBhY3Rpb24uCi0KLSAgIFRoZSBuYW1lIHVuZGVyIHdoaWNoIGFuIGluY29taW5n IGZpbGUgaXMgdG8gYmUgc3RvcmVkIGlzIGRldGVybWluZWQgYXMKLSAgIGZvbGxvd3M6Ci0KLSAg ICAgKiBJZiBhbiBhcy1uYW1lIHdhcyBnaXZlbiwgdGhlIGFzLW5hbWUgaXMgdXNlZC4gT3RoZXJ3 aXNlOgotICAgICAqIElmIHRoZSBjbGllbnQgYW5kIHNlcnZlciBwbGF0Zm9ybXMgYXJlIGFsaWtl IG9yIFszMjVdRlRQIEZJTEVOQU1FUwotICAgICAgIGlzIHNldCB0byBMSVRFUkFMIChvciB0aGUg L0ZJTEVOQU1FUzpMSVRFUkFMIHN3aXRjaCB3YXMgZ2l2ZW4gZm9yCi0gICAgICAgdGhpcyBkb3du bG9hZCksIHRoZSBpbmNvbWluZyBmaWxlbmFtZSBpcyB1c2VkIGxpdGVyYWxseS4gT3RoZXJ3aXNl OgotICAgICAqIFRoZSBpbmNvbWluZyBmaWxlbmFtZSBpcyBjb252ZXJ0ZWQgdG8gYSBmb3JtIHRo YXQgaXMgZnJpZW5kbHkgdG8KLSAgICAgICB0aGUgbG9jYWwgcGxhdGZvcm0uIEZvciBVTklYLCBm b3IgZXhhbXBsZSwgaW5jb21pbmcgZmlsZW5hbWVzIHRoYXQKLSAgICAgICBhcmUgYWxsIHVwcGVy Y2FzZSAoYXMgdGhleSBtaWdodCBiZSBmcm9tLCBzYXksIFZNUyBvciBhbiBJQk0KLSAgICAgICBt YWluZnJhbWUpIGFyZSBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLgotCi0gICBJZiB0aGUgcmVzdWx0 aW5nIG5hbWUgY29pbmNpZGVzIHdpdGggdGhlIG5hbWUgb2YgYSBsb2NhbCBmaWxlIHRoYXQKLSAg IGFscmVhZHkgZXhpc3RzLCB3ZSBoYXZlIGEgZmlsZW5hbWUgY29sbGlzaW9uLiBDb2xsaXNpb25z IGFyZSBoYW5kbGVkCi0gICBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjb2xs aXNpb24gYWN0aW9uOgotCi0gICBTRVQgRlRQIENPTExJU0lPTiB7IEJBQ0tVUCwgUkVOQU1FLCBV UERBVEUsIERJU0NBUkQsIEFQUEVORCwgT1ZFUldSSVRFCi0gICAgICAgICAgfQotICAgICAgICAg IFRoaXMgZXN0YWJsaXNoZXMgYSBmaWxlbmFtZSBjb2xsaXNpb24gZm9yIEZUUCwgc2VwYXJhdGUg ZnJvbSB0aGUKLSAgICAgICAgICBLZXJtaXQgb25lLiBUaGUgaW5pdGlhbCBGVFAgY29sbGlzaW9u IHNldHRpbmcgaXMgaW5oZXJpdGVkIGZyb20KLSAgICAgICAgICBLZXJtaXQncyBGSUxFIENPTExJ U0lPTiBzZXR0aW5nIHdoZW4gdGhlIGZpcnN0IEZUUCBjb21tYW5kIGlzCi0gICAgICAgICAgZ2l2 ZW4sIGJ1dCBzdWJzZXF1ZW50IGNoYW5nZXMgdG8gS2VybWl0J3MgRklMRSBDT0xMSVNJT04gc2V0 dGluZwotICAgICAgICAgIGRvIG5vdCBhZmZlY3QgdGhlIEZUUCBDT0xMSVNJT04gc2V0dGluZy4g U0hPVyBGVFAgdGVsbHMgdGhlCi0gICAgICAgICAgY3VycmVudCBGVFAgQ09MTElTSU9OIHNldHRp bmcuCi0KLSAgIEZUUCBHRVQgL0NPTExJU0lPTjp7QkFDS1VQLFJFTkFNRSxVUERBVEUsRElTQ0FS RCxBUFBFTkQsT1ZFUldSSVRFfQotICAgICAgICAgIE92ZXJyaWRlcyB0aGUgY3VycmVudCBGVFAg Q09MTElTSU9OIGFjdGlvbiBmb3IgdGhpcyBkb3dubG9hZAotICAgICAgICAgIG9ubHkuCi0KLSAg IEZUUCBHRVQgL1VQREFURQotICAgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBHRVQgL0NP TExJU0lPTjpVUERBVEUsIGFuZCBpcyBpbmNsdWRlZCBmb3IKLSAgICAgICAgICBzeW1tZXRyeSB3 aXRoIFBVVCAvVVBEQVRFCi0KLSAgIEZUUCBHRVQgL1VQREFURSBhbmQgL0NPTExJU0lPTjpVUERB VEUgbWVhbiB0byBkb3dubG9hZCBvbmx5IHRob3NlIGZpbGVzCi0gICB3aG9zZSBtb2RpZmljYXRp b24gZGF0ZXMgb24gdGhlIHNlcnZlciBhcmUgbGF0ZXIgdGhhbiB0aG9zZSBvbiB0aGUKLSAgIGNs aWVudC4gRGF0ZS10aW1lIGNvbXBhcmlzb25zIGFyZSBkb25lIGluIENvb3JkaW5hdGVkIFVuaXZl cnNhbCBUaW1lCi0gICAoVVRDLCBHTVQsIFpVTFUpLiBUaGUgY29tbWFuZDoKLQotICAgICBGVFAg TUdFVCAvQ09MTElTSU9OOkFQUEVORCAvQVMtTkFNRTpuZXdmaWxlbmFtZSAqLioKLQotICAgRG93 bmxvYWRzIGFsbCBtYXRjaGluZyByZW1vdGUgZmlsZXMgaW50byBhIHNpbmdsZSBsb2NhbCBmaWxl IChpbgotICAgd2hhdGV2ZXIgb3JkZXIgdGhlIHNlcnZlciBzZW5kcyB0aGVtKS4KLQotMy42LjMu IFJlY292ZXJ5Ci0KLSAgIFJlY292ZXJ5IGlzIGF2YWlsYWJsZSBmb3IgZG93bmxvYWRzIHRvbywg YnV0IHRoZXJlIGFyZSBzb21lIGRpZmZlcmVuY2VzCi0gICBmcm9tIHRoZSB1cGxvYWRpbmcgY2Fz ZSBkZXNjcmliZWQgaW4gWzMyNl1TZWN0aW9uIDMuNS4zOgotCi0gICAgICogVGhlIHRyYW5zZmVy IG11c3QgYmUgaW4gQklOQVJZIG1vZGUuIEl0IGNhbiBub3QgYmUgaW4gdGV4dCBtb2RlLAotICAg ICAgIGV2ZW4gaWYgdGhlIEZUUCBzZXJ2ZXIgaXMgb24gdGhlIHNhbWUga2luZCBvZiBwbGF0Zm9y bSBhcyBLZXJtaXQsCi0gICAgICAgYW5kIGV2ZW4gaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyLXNl dCB0cmFuc2xhdGlvbi4gVGhlIG9yaWdpbmFsCi0gICAgICAgZG93bmxvYWQgbXVzdCBhbHNvIGhh dmUgYmVlbiBpbiBiaW5hcnkgbW9kZS4KLSAgICAgKiBUaGUgRlRQIHNlcnZlciBtdXN0IHN1cHBv cnQgdGhlIFJFU1QgKCJyZXN0YXJ0IikgZGlyZWN0aXZlLgotICAgICAgIFVuZm9ydHVuYXRlbHks IHRoaXMgaXMgbm90IGEgc3RhbmRhcmQgY29tbWFuZDsgYXQgdGhpcyB3cml0aW5nLCBpdAotICAg ICAgIGlzIGRlc2NyaWJlZCBvbmx5IGluIGFuIEludGVybmV0IERyYWZ0LCBub3QgYW4gUkZDIG9y IEludGVybmV0Ci0gICAgICAgU3RhbmRhcmQsIGJ1dCBuZXZlcnRoZWxlc3MgaXQgaXMgZm91bmQg aW4gc2V2ZXJhbCBwb3B1bGFyIEZUUAotICAgICAgIHNlcnZlcnMsIHN1Y2ggYXMgWzMyN11Qcm9G VFBELgotCi0gICBIZXJlJ3MgaG93IGRvd25sb2FkIHJlY292ZXJ5IHdvcmtzOgotCi0gICAgICog S2VybWl0IGNoZWNrcyBmb3IgY29uZmxpY3Rpbmcgc3dpdGNoZXMsIHN1Y2ggYXMgL1VQREFURSwg L0NPTU1BTkQsCi0gICAgICAgb3IgL0ZJTFRFUi4gSWYgL1JFQ09WRVIgaXMgZ2l2ZW4gd2l0aCB0 aGVzZSBzd2l0Y2hlcyBhbiBlcnJvcgotICAgICAgIG9jY3Vycy4KLSAgICAgKiBUaGUgcHJldmFp bGluZyB0cmFuc2ZlciBtb2RlIChTRVQgRlRQIFRZUEUpIG11c3QgYmUgQklOQVJZLiBJZiBpdAot ICAgICAgIGlzIG5vdCwgdGhlIC9CSU5BUlkgc3dpdGNoIG11c3QgaGF2ZSBiZWVuIGluY2x1ZGVk IHdpdGggdGhlIEZUUAotICAgICAgIFtNXUdFVCBjb21tYW5kLgotCi0gICBJZiB0aGUgL1JFQ09W RVIgc3dpdGNoIGlzIGFjY2VwdGVkLCB0aGVuIGZvciBlYWNoIHNlbGVjdGVkIGZpbGU6Ci0KLSAg ICAgKiBBIFNJWkUgY29tbWFuZCBpcyBzZW50IGZvciB0aGUgZmlsZSAodXNpbmcgaXRzIHJlbW90 ZSBuYW1lKS4gSWYgdGhlCi0gICAgICAgcmVwbHkgaW5kaWNhdGVzIHRoZSBmaWxlIHdhcyBub3Qg Zm91bmQsIG9yIHRoZSBTSVpFIGNvbW1hbmQgd2FzIG5vdAotICAgICAgIHVuZGVyc3Rvb2QsIG9y IGFueSBvdGhlciBraW5kIG9mIGVycm9yLCByZWNvdmVyeSBpcyBjYW5jZWxlZCAoaS5lLgotICAg ICAgIHRoZSBlbnRpcmUgZmlsZSBpcyBkb3dubG9hZGVkKS4KLSAgICAgKiBJZiB0aGUgc2l6ZXMg b2YgdGhlIHR3byBmaWxlcyBhcmUgaWRlbnRpY2FsLCB0aGUgZmlsZSBpcyBub3Qgc2VudC4KLSAg ICAgICBPdGhlcndpc2U6Ci0gICAgICogS2VybWl0IHNlbmRzIHRoZSBSRVNUIGRpcmVjdGl2ZSB0 byB0aGUgc2VydmVyLCBpbmRpY2F0aW5nIHRoZSBzaXplCi0gICAgICAgb2YgdGhlIGxvY2FsIGZp bGUuIElmIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgYWZmaXJtYXRpdmVseSwgS2VybWl0Ci0gICAgICAg b3BlbnMgdGhlIGxvY2FsIGZpbGUgaW4gYXBwZW5kIG1vZGUgYW5kIGFwcGVuZHMgdGhlIGluY29t aW5nIGRhdGEKLSAgICAgICB0byBpdC4gT3RoZXJ3aXNlLCByZWNvdmVyeSBpcyBjYW5jZWxlZCBh bmQgdGhlIGVudGlyZSBmaWxlIGlzCi0gICAgICAgZG93bmxvYWRlZC4KLQotICAgVGhlIC9SRUNP VkVSIHN3aXRjaCBjYW4gYmUgaW5jbHVkZWQgd2l0aCBhbnkgRlRQIEdFVCBvciBNR0VUIGNvbW1h bmQsCi0gICBldmVuIGlmIGl0IHNwZWNpZmllcyBhIGdyb3VwIG9mIGZpbGVzLiBUaGlzIGxldHMg eW91IHJlc3VtZSBhbgotICAgaW50ZXJydXB0ZWQgYmF0Y2ggdHJhbnNmZXIgZnJvbSB3aGVyZSBp dCBsZWZ0IG9mZi4gVGhlIGZpbGVzIHRoYXQgd2VyZQotICAgYWxyZWFkeSBjb21wbGV0ZWx5IHNl bnQgYXJlIHNraXBwZWQsIHRoZSBmaWxlIHRoYXQgd2FzIGludGVycnVwdGVkIGlzCi0gICByZWNv dmVyZWQsIGFuZCB0aGUgcmVtYWluaW5nIGZpbGVzIGFyZSB1cGxvYWRlZC4gQlVULi4uIHVubGlr ZSB3aXRoCi0gICB1cGxvYWRpbmcsIHdoZXJlIHRoaXMgY2FuIGJlIGRvbmUgd2l0aCBhbnkgbWl4 dHVyZSBvZiB0ZXh0IGFuZCBiaW5hcnkKLSAgIGZpbGVzLCB3aGVuIGRvd25sb2FkaW5nLCBpdCBj YW4gb25seSBiZSBkb25lIGlmIGFsbCB0aGUgZmlsZXMgYXJlCi0gICBiaW5hcnkuCi0KLSAgIEl0 IGRvZXNuJ3QgbWF0dGVyIGhvdyB0aGUgb3JpZ2luYWwgcGFydGlhbCBmaWxlIHdhcyBkb3dubG9h ZGVkIC0tIEZUUCwKLSAgIEtlcm1pdCwgSFRUUCwgWm1vZGVtLCBldGM6IGFzIGxvbmcgYXMgdGhl IHByZWNvbmRpdGlvbnMgYXJlIG1ldCwgaXQgY2FuCi0gICBiZSByZWNvdmVyZWQgd2l0aCBGVFAg W01dR0VUIC9SRUNPVkVSLCBvciBmb3IgdGhhdCBtYXR0ZXIgYWxzbyB3aXRoIEdFVAotICAgL1JF Q09WRVIgKHVzaW5nIEtlcm1pdCBwcm90b2NvbCkuCi0KLSAgIFsgWzMyOF1Ub3AgXSBbIFszMjld RlRQIFRvcCBdIFsgWzMzMF1DLUtlcm1pdCBIb21lIF0gWyBbMzMxXUtlcm1pdCBIb21lCi0gICBd Ci0KLTMuNy4gVHJhbnNsYXRpbmcgQ2hhcmFjdGVyIFNldHMKLQotICAgQSBwb3NzaWJseSB1bmlx dWUgZmVhdHVyZSBvZiBLZXJtaXQncyBGVFAgY2xpZW50IGlzIGl0cyBhYmlsaXR5IHRvCi0gICBj b252ZXJ0IGNoYXJhY3RlciBzZXRzIHdoZW4gdHJhbnNmZXJyaW5nIGZpbGVzIGluIHRleHQgbW9k ZSwKLSAgIGluZGVwZW5kZW50IG9mIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIEZUUCBzZXJ2ZXIs IGFzIHdlbGwgYXMgdG8KLSAgIHRyYW5zbGF0ZSB0aGUgY2hhcmFjdGVyIHNldHMgb2YgZmlsZW5h bWVzIHJlZ2FyZGxlc3Mgb2YgdHJhbnNmZXIgbW9kZS4KLSAgIEZvciBjb21wYXRpYmlsaXR5IHdp dGggZXhpc3RpbmcgRlRQIGNsaWVudHMsIGFuZCBiZWNhdXNlIHRoZXJlIGlzIGEKLSAgIGNlcnRh aW4gcGVyZm9ybWFuY2UgcGVuYWx0eSwgS2VybWl0IHdvbid0IGRvIHRoaXMgdW5sZXNzIHlvdSBh c2sgZm9yCi0gICBpdC4gSWYgeW91IGVuYWJsZSB0aGlzIGZlYXR1cmUsIHlvdSBuZWVkIHRvIGlu Zm9ybSBLZXJtaXQgb2YgdGhlCi0gICBjaGFyYWN0ZXIgc2V0ICh0byBiZSkgdXNlZCBvbiB0aGUg c2VydmVyIGFuZCBpbiBzb21lIGNhc2VzIChleHBsYWluZWQKLSAgIGJlbG93KSBhbHNvIHRoZSBs b2NhbCBmaWxlIGNoYXJhY3RlciBzZXQuIFRoaXMgZGlzY3Vzc2lvbiBhc3N1bWVzIHlvdQotICAg a25vdyBhIGJpdCBhYm91dCBjaGFyYWN0ZXIgc2V0cyAoYXMgeW91IG11c3QgaWYgeW91IGhhdmUg dG8gdXNlIHRoZW0pOwotICAgc2VlIENoYXB0ZXIgMTYgb2YgWzMzMl1Vc2luZyBDLUtlcm1pdCBm b3IgYSBkZXRhaWxlZCB0cmVhdG1lbnQuIFRoZQotICAgS2VybWl0IGNvbW1hbmRzIGZvciBGVFAg Y2hhcmFjdGVyLXNldCBjb252ZXJzaW9uIGFyZToKLQotICAgU0VUIEZUUCBDSEFSQUNURVItU0VU LVRSQU5TTEFUSU9OIHsgT04sIE9GRiB9Ci0gICAgICAgICAgV2hldGhlciB0byB0cmFuc2xhdGUg Y2hhcmFjdGVyIHNldHMgd2hlbiB0cmFuc2ZlcnJpbmcgdGV4dCBmaWxlcwotICAgICAgICAgIHdp dGggRlRQLiBPRkYgYnkgZGVmYXVsdC4gU2V0IHRoaXMgdG8gT04gdG8gZW5hYmxlIGNoYXJhY3Rl ci1zZXQKLSAgICAgICAgICB0cmFuc2xhdGlvbiBmb3Igc3Vic2VxdWVudCBGVFAgdXBsb2FkcyBh bmQgZG93bmxvYWRzLgotCi0gICBTRVQgRlRQIFNFUlZFUi1DSEFSQUNURVItU0VUIFszMzNdbmFt ZQotICAgICAgICAgIFRleHQgY2hhcmFjdGVyIHNldCAodG8gYmUpIHVzZWQgYnkgdGhlIHNlcnZl ci4gTW9zdCBGVFAgc2VydmVycwotICAgICAgICAgIGFyZSBpZ25vcmFudCBvZiBjaGFyYWN0ZXIg c2V0cywgc28gYWxsIHRyYW5zbGF0aW9ucyBhcmUgZG9uZQotICAgICAgICAgIHVuaWxhdGVyYWxs eSBieSBLZXJtaXQncyBGVFAgY2xpZW50LiBUaGlzIG1lYW5zIHRoYXQgd2hlbgotICAgICAgICAg IGRvd25sb2FkaW5nIGZpbGVzLCB5b3UgbXVzdCBrbm93IGluIGFkdmFuY2UgdGhlIGNoYXJhY3Rl ci1zZXQKLSAgICAgICAgICB1c2VkIGluIHRoZSBmaWxlcyB5b3UgYXJlIGRvd25sb2FkaW5nIChh bmQgaW4gdGhlaXIgbmFtZXMpLiBXaGVuCi0gICAgICAgICAgdXBsb2FkaW5nLCB5b3UgbXVzdCBz cGVjaWZ5IHRoZSBjaGFyYWN0ZXItc2V0IHRvIHdoaWNoIGxvY2FsCi0gICAgICAgICAgZmlsZW5h bWVzIGFuZCB0ZXh0LWZpbGUgY29udGVudHMgYXJlIHRvIGJlIHRyYW5zbGF0ZWQgZm9yCi0gICAg ICAgICAgdHJhbnNtaXNzaW9uIHRvIHRoZSBzZXJ2ZXIuIElmIHlvdSBTRVQgRlRQCi0gICAgICAg ICAgQ0hBUkFDVEVSLVNFVC1UUkFOU0xBVElPTiBPTiBidXQgZG8gbm90IHNwZWNpZnkgYW4gRlRQ Ci0gICAgICAgICAgU0VSVkVSLUNIQVJBQ1RFUi1TRVQsIFszMzRdVVRGOCBpcyB1c2VkLCBzaW5j ZSB0aGlzIGlzIHRoZSBuZXcKLSAgICAgICAgICBJbnRlcm5ldCBzdGFuZGFyZCBpbnRlcm5hdGlv bmFsIGNoYXJhY3RlciBzZXQ7IGl0IGlzIHVwd2FyZHMKLSAgICAgICAgICBjb21wYXRpYmxlIHdp dGggQVNDSUkgYW5kIGl0IGVuY29tcGFzc2VzIG1vc3Qgd3JpdHRlbiBsYW5ndWFnZXMKLSAgICAg ICAgICBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IGZhdm9yIGFueSBwYXJ0aWN1bGFyIGdyb3VwIG9m IHBlb3BsZSwgYXMKLSAgICAgICAgICBhbnkgb3RoZXIgZGVmYXVsdCB3b3VsZCBkby4gSWYgeW91 IFNFVCBGVFAgU0VSVkVSLUNIQVJBQ1RFUi1TRVQKLSAgICAgICAgICB0byBzb21ldGhpbmcgKGFu eXRoaW5nKSB3aGVuIEZUUCBDSEFSQUNURVItU0VUIFRSQU5TTEFUSU9OIGlzCi0gICAgICAgICAg T0ZGLCB0aGlzIGFsc28gc2V0cyB0aGUgbGF0dGVyIE9OLgotCi0gICBTRVQgRklMRSBDSEFSQUNU RVItU0VUIFszMzVdbmFtZQotICAgICAgICAgIFRoaXMgaXMgdGhlIHJlZ3VsYXIgS2VybWl0IChu b24tRlRQLXNwZWNpZmljKSBjb21tYW5kIGZvcgotICAgICAgICAgIGlkZW50aWZ5aW5nIHRoZSBj aGFyYWN0ZXIgc2V0ICh0byBiZSkgdXNlZCBpbiBsb2NhbCB0ZXh0IGZpbGVzCi0gICAgICAgICAg YW5kIGZpbGVuYW1lcy4KLQotICAgVE8gUkVJVEVSQVRFOiBJZiB5b3UgU0VUIEZUUCBDSEFSQUNU RVItU0VUIFRSQU5TTEFUSU9OIE9OIGJ1dCBkbyBub3QKLSAgIHNwZWNpZnkgYW4gRlRQIFNFUlZF Ui1DSEFSQUNURVItU0VULCBvdXRib3VuZCB0ZXh0IGZpbGVzIGFyZSBjb252ZXJ0ZWQKLSAgIHRv IFVURi04IGFuZCBpbmJvdW5kIHRleHQgZmlsZXMgYXJlIGFzc3VtZWQgdG8gYmUgVVRGLTguIElm IHRoaXMgaXMgbm90Ci0gICBhcHByb3ByaWF0ZSwgYmUgc3VyZSB0byBhbHNvIHNwZWNpZnkgdGhl IGRlc2lyZWQgRlRQCi0gICBTRVJWRVItQ0hBUkFDVEVSLVNFVC4KLQotICAgWW91IGNhbiB1c2Ug InNwZWNpYWwiIChub24tQVNDSUkpIGNoYXJhY3RlcnMgaW4gZmlsZW5hbWVzIGluIGFsbCB0aGUK LSAgIGNsaWVudCAvIHNlcnZlciBmaWxlIG1hbmFnZW1lbnQgY29tbWFuZHMgKEZUUCBNS0RJUiwg Uk1ESVIsIERJUkVDVE9SWSwKLSAgIFZESVJFQ1RPUlksIERFTEVURSwgZXRjKSwgYW5kIGFsc28g aW4gZmlsZS10cmFuc2ZlciBjb21tYW5kcy4gV2hlbgotICAgZ2l2aW5nIGNvbW1hbmRzIHN1Y2gg YXMgRlRQIERJUiAoUkRJUikgYW5kIEZUUCBQV0QgKFJQV0QpLCB0aGUgcmVwbHkgaXMKLSAgIHRy YW5zbGF0ZWQgdG9vLCBzbyB5b3UgY2FuIHJlYWQgaXQuIEluIHRoaXMgZXhhbXBsZSwgdGhlIGNs aWVudCBhbmQKLSAgIHNlcnZlciB1c2UgZW50aXJlbHkgZGlmZmVyZW50IGNvZGVzIHRvIHJlcHJl c2VudCB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzCi0gICBvZiBHZXJtYW46Ci0KLSAgQy1LZXJtaXQ+ IGZ0cCB4eXpjb3JwLmRlIC9hbm9ueW1vdXMKLSAgQy1LZXJtaXQ+IHNldCBmdHAgc2VydmVyLWNo YXJhY3Rlci1zZXQgbGF0aW4xCi0gIEMtS2VybWl0PiBzZXQgZmlsZSBjaGFyYWN0ZXItc2V0IGdl cm1hbgotICBDLUtlcm1pdD4gcmNkIFN077+9ZHRlCi0gIEMtS2VybWl0PiBycHdkCi0gICIvcHVi L2Z0cC9TdO+/vWR0ZSBpcyBjdXJyZW50IGRpcmVjdG9yeSIKLSAgQy1LZXJtaXQ+IHJkaXIKLSAg LXJ3LXJ3LS0tLSAgMSBvbGFmICAgICA1NDAxOCBKYW4gIDYgMTc6NTggQWRlbmLvv710dGVsLnR4 dAotICAtcnctcnctLS0tICAxIHVyc3VsYSAgICAgMzczIEphbiAgNSAxNToxOSBB77+9bGFyLnR4 dAotICAtcnctcnctLS0tICAxIGdpc2JlcnQgICAgNDgyIEphbiAgNSAxNToyMCBCbG93YXR6LnR4 dAotICAtcnctcnctLS0tICAxIGd1ZHJ1biAgICAgMTI0IEphbiAgNSAxNToxOSBC77+9Ymxpbmdl bi50eHQKLSAgLXJ3LXJ3LS0tLSAgMSBvbGdhICAgICAxNDM0OCBKYW4gIDcgMTQ6MjMgS++/vWxu LnR4dAotCi0gICBXaGVuIHRoZSBjbGllbnQgYW5kIHNlcnZlciBmaWxlIHN5c3RlbXMgdXNlIGRp ZmZlcmVudCBjaGFyYWN0ZXIgc2V0cywKLSAgIHlvdSBzaG91bGQgdGFrZSBjYXJlIHRvIHVzZSBv bmx5IHRob3NlIGNoYXJhY3RlcnMgdGhhdCB0aGUgdHdvIHNldHMKLSAgIHNoYXJlIGluIGNvbW1v biB3aGVuIGNyZWF0aW5nIGZpbGVuYW1lcyBvciB0ZXh0LWZpbGUgY29udGVudHMuIEZvcgotICAg ZXhhbXBsZSwgUEMgY29kZSBwYWdlcyBjb250YWluIGEgbG90IGxpbmUtIGFuZCBib3gtZHJhd2lu ZyBjaGFyYWN0ZXJzLAotICAgYW5kIHNvbWV0aW1lcyAic21hcnQgcXVvdGVzIiwgZXRjLCB0aGF0 IGFyZSBub3QgZm91bmQgaW4gSVNPIHN0YW5kYXJkCi0gICA4LWJpdCBjaGFyYWN0ZXIgc2V0cy4g WW91IHNob3VsZCBiZSBlc3BlY2lhbGx5IGNhcmVmdWwgdG8gYXZvaWQgdXNpbmcKLSAgIHN1Y2gg Y2hhcmFjdGVycyBpbiBmaWxlbmFtZXMuCi0KLSAgIFsgWzMzNl1DLUtlcm1pdCBDaGFyYWN0ZXIg U2V0cyBdCi0KLTMuNy4xLiBDaGFyYWN0ZXIgU2V0cyBhbmQgVXBsb2FkaW5nCi0KLSAgIEtlcm1p dCdzIFBVVCBhbmQgTVBVVCBjb21tYW5kcyBpbmNsdWRlIGZ1bGwgZmlsZS1zY2FubmluZyBjYXBh YmlsaXRpZXMsCi0gICBhcyBkZXNjcmliZWQgaW4gWzMzN11TZWN0aW9uIDQuIFRodXMgaWYgRlRQ IENIQVJBQ1RFUi1TRVQtVFJBTlNMQVRJT04KLSAgIGlzIE9OIGFuZCB5b3VyIGNoYXJhY3Rlci1z ZXQgYXNzb2NpYXRpb25zIGFyZSBzZXQgdXAgYXBwcm9wcmlhdGVseSwKLSAgIEtlcm1pdCBhdXRv bWF0aWNhbGx5IHN3aXRjaGVzIG9uIGEgcGVyLWZpbGUgYmFzaXMgYmV0d2VlbiB0ZXh0IGFuZAot ICAgYmluYXJ5IG1vZGUsIGFuZCBmb3IgZWFjaCB0ZXh0IGZpbGUgYmV0d2VlbiB5b3VyIGNob3Nl biA3LWJpdCB0ZXh0Ci0gICBjaGFyYWN0ZXIgc2V0IChlLmcuIEFTQ0lJIG9yIElTTyA2NDYgR2Vy bWFuKSwgOC1iaXQgdGV4dCAoZS5nLiBMYXRpbi0xCi0gICBvciBKYXBhbmVzZSBFVUMpLCBVQ1Mt MiwgYW5kIFVURi04LCBhbmQgY29udmVydHMgZWFjaCBvZiB0aGVzZQotICAgYXV0b21hdGljYWxs eSB0byB0aGUgc2VydmVyIGNoYXJhY3Rlci1zZXQsIGFuZCBmdXJ0aGVybW9yZQotICAgYXV0b21h dGljYWxseSBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHRoZSBMaXR0bGUgYW5kIEJpZyBFbmRpYW4g Zm9ybXMgb2YKLSAgIFVDUy0yLCBhbHdheXMgc2VuZGluZyBpbiBCaWcgRW5kaWFuIGZvcm0uCi0K LSAgICAgV0FSTklORzogSXQgaXMgbm90IGFkdmlzYWJsZSB0byB1c2UgVUNTLTIgKG9yIGFueSBV bmljb2RlCi0gICAgIHRyYW5zZm9ybWF0aW9uIG90aGVyIHRoYW4gVVRGLTgpICJvbiB0aGUgd2ly ZSIsIGkuZS4gYXMgYSBzZXJ2ZXIKLSAgICAgY2hhcmFjdGVyIHNldC4gTW9zdCBGVFAgc2VydmVy cyBhcmUgbm90IGFibGUgdG8gY29wZSB3aXRoIGl0LCBzaW5jZQotICAgICBpdCBjb250YWlucyBs b3RzIG9mIDAgKE5VTCkgY2hhcmFjdGVycy4gSWYgeW91IGRvIHVzZSBpdCwgS2VybWl0Ci0gICAg IGRvZXMgbm90IHRyYW5zbGF0ZSBmaWxlbmFtZXMgdG8gb3IgZnJvbSBVQ1MtMiwgZm9yIHJlYXNv bnMgd2VsbAotICAgICBrbm93biB0byBDIHByb2dyYW1tZXJzIChmb3IgZXhhbXBsZSwgVU5JWCBB UElzIGFzc3VtZSBmaWxlbmFtZQotICAgICBzdHJpbmdzIGFyZSBOVUwtdGVybWluYXRlZCkuIFsz MzhdVVRGLTggaXMgdGhlIHByZWZlcnJlZCAoYW5kCi0gICAgIHN0YW5kYXJkKSBVbmljb2RlIGZv cm1hdCBmb3IgdGhlIEludGVybmV0LgotCi0gICBGVFAgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlv bnMgZGlmZmVyIGZyb20gdGhlIHJlZ3VsYXIgS2VybWl0IG9uZXMgYnkKLSAgIG5vdCByZXN0cmlj dGluZyB0cmFuc2xhdGlvbnMgdG8gYSBmaWxlLWNoYXJhY3Rlci1zZXQgLwotICAgdHJhbnNmZXIt Y2hhcmFjdGVyLXNldCBwYWlyLiBZb3UgY2FuIGhhdmUgS2VybWl0J3MgRlRQIGNsaWVudCB0cmFu c2xhdGUKLSAgIGJldHdlZW4gYW55IHBhaXIgb2YgY2hhcmFjdGVyIHNldHMgaXQga25vd3MgYWJv dXQuIFlvdSBjYW4gc2VlIHRoZSBsaXN0Ci0gICBvZiBzdXBwb3J0ZWQgY2hhcmFjdGVyIHNldHMg YnkgdHlwaW5nIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nOgotCi0gIHNldCBmdHAgc2VydmVyLWNo YXJhY3Rlci1zZXQgPwotICBzZXQgZmlsZSBjaGFyYWN0ZXItc2V0ID8KLQotICAgQSB0eXBpY2Fs IGxpc3QgbG9va3MgbGlrZSB0aGlzIChbMzM5XUNMSUNLIEhFUkUgZm9yIGFuIGV4cGxhbmF0aW9u IG9mCi0gICB0aGUgbmFtZXMpOgotCi0gIEMtS2VybWl0PnNldCBmaWxlIGNoYXIgPyBPbmUgb2Yg dGhlIGZvbGxvd2luZzoKLSAgIGFzY2lpICAgICAgICAgICAgY3A4NjktZ3JlZWsgICAgICAgaGVi cmV3LTcgICAgICAgICBtYXpvdmlhLXBjCi0gICBicml0aXNoICAgICAgICAgIGN5cmlsbGljLWlz byAgICAgIGhlYnJldy1pc28gICAgICAgbmV4dC1tdWx0aW5hdGlvbmFsCi0gICBidWxnYXJpYS1w YyAgICAgIGRhbmlzaCAgICAgICAgICAgIGhwLXJvbWFuOCAgICAgICAgbm9yd2VnaWFuCi0gICBj YW5hZGlhbi1mcmVuY2ggIGRlYy1rYW5qaSAgICAgICAgIGh1bmdhcmlhbiAgICAgICAgcG9ydHVn dWVzZQotICAgY3AxMjUwICAgICAgICAgICBkZWMtbXVsdGluYXRpb25hbCBpc28yMDIyanAta2Fu amkgIHNoaWZ0LWppcy1rYW5qaQotICAgY3AxMjUxLWN5cmlsbGljICBkZy1pbnRlcm5hdGlvbmFs ICBpdGFsaWFuICAgICAgICAgIHNob3J0LWtvaQotICAgY3AxMjUyICAgICAgICAgICBkdXRjaCAg ICAgICAgICAgICBqaXM3LWthbmppICAgICAgIHNwYW5pc2gKLSAgIGNwNDM3ICAgICAgICAgICAg ZWxvdDkyNy1ncmVlayAgICAga29pOCAgICAgICAgICAgICBzd2VkaXNoCi0gICBjcDg1MCAgICAg ICAgICAgIGVsb3Q5MjgtZ3JlZWsgICAgIGtvaThyICAgICAgICAgICAgc3dpc3MKLSAgIGNwODUy ICAgICAgICAgICAgZXVjLWpwICAgICAgICAgICAga29pOHUgICAgICAgICAgICB1Y3MyCi0gICBj cDg1NS1jeXJpbGxpYyAgIGZpbm5pc2ggICAgICAgICAgIGxhdGluMS1pc28gICAgICAgdXRmOAot ICAgY3A4NTggICAgICAgICAgICBmcmVuY2ggICAgICAgICAgICBsYXRpbjItaXNvCi0gICBjcDg2 Mi1oZWJyZXcgICAgIGdlcm1hbiAgICAgICAgICAgIGxhdGluOS1pc28KLSAgIGNwODY2LWN5cmls bGljICAgZ3JlZWstaXNvICAgICAgICAgbWFjaW50b3NoLWxhdGluCi0gIEMtS2VybWl0PgotCi0g ICBUaHVzIHlvdSBjYW4gdHJhbnNsYXRlIG5vdCBvbmx5IGJldHdlZW4gcHJpdmF0ZSBzZXRzIChs aWtlIFBDIGNvZGUKLSAgIHBhZ2VzKSBhbmQgc3RhbmRhcmQgb25lcyAobGlrZSBMYXRpbi0xKSBh cyBpbiBLZXJtaXQgcHJvdG9jb2wsIGJ1dCBhbHNvCi0gICBiZXR3ZWVuIGFueSBnaXZlbiBwYWly IG9mIHByaXZhdGUgc2V0cyAoZS5nLiBDUDg1MiBhbmQgTWF6b3ZpYSkuIEFsbAotICAgY29udmVy c2lvbnMgZ28gdGhyb3VnaCBVbmljb2RlIGFzIHRoZSBpbnRlcm1lZGlhdGUgY2hhcmFjdGVyIHNl dCwKLSAgIHJlc3VsdGluZyBpbiBhIG1pbmltdW0gb2YgY2hhcmFjdGVyIGxvc3MsIHNpbmNlIFVu aWNvZGUgaXMgYSBzdXBlcnNldAotICAgb2YgYWxsIG90aGVyIGNoYXJhY3RlciBzZXRzIGtub3du IHRvIEtlcm1pdC4KLQotICAgSW4gYWRkaXRpb24gdG8gdGhlIFNFVCBjb21tYW5kcyBsaXN0ZWQg YWJvdmUsIHRoZSBGVFAgUFVUIGFuZCBNUFVUCi0gICBjb21tYW5kcyBpbmNsdWRlIHN3aXRjaGVz IHRoYXQgYXBwbHkgb25seSB0byB0aGUgY3VycmVudCBjb21tYW5kOgotCi0gICAvTE9DQUwtQ0hB UkFDVEVSLVNFVDpuYW1lCi0gICAvU0VSVkVSLUNIQVJBQ1RFUi1TRVQ6bmFtZQotICAgICAgICAg IFVzZSB0aGVzZSBzd2l0Y2hlcyB0byBmb3JjZSBhIHBhcnRpY3VsYXIgdHJhbnNsYXRpb24uIFRo ZXNlCi0gICAgICAgICAgc3dpdGNoZXMgb3ZlcnJpZGUgdGhlIGdsb2JhbCBGVFAgQ0hBUkFDVEVS LVNFVC1UUkFOU0xBVElPTiBhbmQKLSAgICAgICAgICBTRVJWRVItQ0hBUkFDVEVSLVNFVCBzZXR0 aW5ncyBhbmQgYWxzbyBjaGFyYWN0ZXItc2V0Ci0gICAgICAgICAgZGlmZmVyZW50aWF0aW9uIGJ5 IGZpbGUgc2Nhbm5pbmcgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgUFVUIG9yCi0gICAgICAgICAg TVBVVCBjb21tYW5kLiBUaGUgZmlsZSBzY2FuIGlzIHN0aWxsIHBlcmZvcm1lZCwgaG93ZXZlciwg dG8KLSAgICAgICAgICBkZXRlcm1pbmUgd2hldGhlciB0aGUgZmlsZSBpcyB0ZXh0IG9yIGJpbmFy eTsgdGh1cyB0aGVzZQotICAgICAgICAgIHN3aXRjaGVzIGRvIG5vdCBhZmZlY3QgYmluYXJ5IGZp bGVzIHVubGVzcyB5b3UgYWxzbyBpbmNsdWRlIHRoZQotICAgICAgICAgIC9URVhUIHN3aXRjaCB0 byBmb3JjZSBhbGwgZmlsZXMgdG8gYmUgdHJlYXRlZCBhcyB0ZXh0LgotCi0gICBJbiBvdGhlciB3 b3JkcywgaWYgeW91IGluY2x1ZGUgb25lIG9yIGJvdGggb2YgdGhlc2Ugc3dpdGNoZXMgd2l0aCBh IFBVVAotICAgb3IgTVBVVCBjb21tYW5kLCB0aGV5IGFyZSB1c2VkLiBTaW1pbGFybHksIHRoZSAv VFJBTlNQQVJFTlQgc3dpdGNoCi0gICBkaXNhYmxlcyBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9u IGZvciB0aGUgUFVUIG9yIE1QVVQgY29tbWFuZCBkZXNwaXRlCi0gICB0aGUgcHJldmFpbGluZyBG VFAgQ0hBUkFDVEVSLVNFVC1UUkFOU0xBVElPTiBhbmQgU0VSVkVSLUNIQVJBQ1RFUi1TRVQKLSAg IHNldHRpbmdzLgotCi0gICBXaGVuIHVwbG9hZGluZywgdGhlIEZJTEUgQ0hBUkFDVEVSLVNFVCBz ZXR0aW5nIGlzIGlnbm9yZWQgdW5sZXNzIHlvdQotICAgaGF2ZSBmb3JjZWQgS2VybWl0IG5vdCB0 byBbMzQwXXNjYW4gbG9jYWwgZmlsZXMgYnkgaW5jbHVkaW5nIGEgL1RFWFQgb3IKLSAgIC9CSU5B Ulkgc3dpdGNoIHdpdGggeW91ciBbTV1QVVQgY29tbWFuZCwgb3IgYnkgZGlzYWJsaW5nIGF1dG9t YXRpYwotICAgdGV4dC9iaW5hcnkgc3dpdGNoaW5nIGluIHNvbWUgb3RoZXIgd2F5LgotCi0gICBF eGFtcGxlczoKLQotICAgIDEuIFN1cHBvc2UgeW91IGhhdmUgYSBDUDg1MiAoRWFzdCBFdXJvcGVh bikgdGV4dCBmaWxlIHRoYXQgeW91IHdhbnQgdG8KLSAgICAgICB1cGxvYWQgYW5kIHN0b3JlIGlu IElTTyBMYXRpbiBBbHBoYWJldCAyIGVuY29kaW5nOgotICBmdHAgcHV0IC9sb2NhbC1jaGFyOmNw ODUyIC9zZXJ2ZXItY2hhcjpsYXRpbjIgbWFneWFyLnR4dAotCi0gICAgMi4gU3VwcG9zZSB5b3Ug YWx3YXlzIHdhbnQgeW91ciB0ZXh0IGZpbGVzIGNvbnZlcnRlZCB0byBMYXRpbi0yIHdoZW4KLSAg ICAgICB1cGxvYWRpbmcgd2l0aCBGVFAuIFRoZW4gcHV0OgotICBzZXQgZnRwIHNlcnZlci1jaGFy YWN0ZXItc2V0IGxhdGluMgotCi0gICAgICAgaW4geW91ciBLZXJtaXQgY3VzdG9taXphdGlvbiBm aWxlLCBhbmQgdGhlbiB5b3UgY2FuIG9taXQgdGhlCi0gICAgICAgL1NFUlZFUi1DSEFSQUNURVIt U0VUOiBzd2l0Y2ggZnJvbSB5b3VyIEZUUCBQVVQgY29tbWFuZHM6Ci0gIGZ0cCBwdXQgL2xvY2Fs LWNoYXI6Y3A4NTIgbWFneWFyLnR4dAotCi0gICAgMy4gTm93IHN1cHBvc2UgdGhhdCBhbGwgdGhl IHRleHQgZmlsZXMgb24geW91ciBQQyBhcmUgd3JpdHRlbiBpbgotICAgICAgIEh1bmdhcmlhbiwg YnV0IHRoZXkgaGF2ZSBhIHZhcmlldHkgb2YgZW5jb2RpbmdzLCBhbmQgeW91IGRvbid0IHdhbnQK LSAgICAgICB0byBoYXZlIHRvIGluY2x1ZGUgdGhlIC9MT0NBTC1DSEFSQUNURVItU0VUOiBzd2l0 Y2ggb24gZXZlcnkgRlRQCi0gICAgICAgUFVUIGNvbW1hbmQsIG9yIChtb3JlIHRvIHRoZSBwb2lu dCkgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBzZW5kIGEKLSAgICAgICBtaXh0dXJlIG9mIHRoZXNl IGZpbGVzIGFsbCBhdCBvbmNlLiBQdXQgdGhlc2UgY29tbWFuZHMgaW4geW91cgotICAgICAgIEtl cm1pdCBjdXN0b21pemF0aW9uIGZpbGU6Ci0gIHNldCBmdHAgc2VydmVyLWNoYXJhY3Rlci1zZXQg bGF0aW4yICAgICAgICAgICAgOyBJU08gODg1OS0yCi0gIHNldCBmaWxlIGRlZmF1bHQgNy1iaXQt Y2hhcmFjdGVyLXNldCBodW5nYXJpYW4gOyBJU08gNjQ2IEh1bmdhcmlhbgotICBzZXQgZmlsZSBk ZWZhdWx0IDgtYml0LWNoYXJhY3Rlci1zZXQgY3A4NTIgICAgIDsgUEMgRWFzdCBFdXJvcGVhbiBD b2RlIFBhZ2UKLQotICAgICAgIGFuZCBub3cgUFVUIGFuZCBNUFVUIHdpbGwgYXV0b21hdGljYWxs eSBkZXRlY3QgYW5kIHN3aXRjaCBhbW9uZyBJU08KLSAgICAgICA2NDYgSHVuZ2FyaWFuLCBDb2Rl IFBhZ2UgODUyLCBVVEYtOCwgYW5kIFVDUy0yIGVuY29kaW5ncywKLSAgICAgICB0cmFuc2xhdGlu ZyBlYWNoIG9uZSB0byBMYXRpbi0yIGZvciB1cGxvYWRpbmc6Ci0gIGZ0cCBwdXQgKi50eHQKLQot ICAgQW5kIHNpbmNlIGJpbmFyeSBmaWxlcyBhcmUgYWxzbyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5 LCB0aGUgbGF0dGVyIGNhbgotICAgYmUgc2ltcGxpZmllZCB0bzoKLQotICBmdHAgcHV0ICoKLQot ICAgZXZlbiB3aGVuICIqIiBtYXRjaGVzIGEgZGl2ZXJzZSBjb2xsZWN0aW9uIG9mIGJpbmFyeSBh bmQgdGV4dCBmaWxlcywKLSAgIGJlY2F1c2UgdHJhbnNsYXRpb25zIGFyZSBza2lwcGVkIGF1dG9t YXRpY2FsbHkgZm9yIGJpbmFyeSBmaWxlcy4KLQotMy43LjIuIENoYXJhY3RlciBTZXRzIGFuZCBE b3dubG9hZGluZwotCi0gICBUaGUgY29tbWFuZHMgYW5kIHN3aXRjaGVzIGFyZSB0aGUgc2FtZSBh cyBmb3IgdXBsb2FkaW5nLCBidXQgYXV0b21hdGljCi0gICBjaGFyYWN0ZXItc2V0IHN3aXRjaGlu ZyB3b3JrcyBkaWZmZXJlbnRseSwgc2luY2UgS2VybWl0IGNhbid0IHNjYW4gdGhlCi0gICBzZXJ2 ZXIgZmlsZXMgaW4gYWR2YW5jZS4gSW5zdGVhZCwgdGhlIHRyYW5zZmVyIG1vZGUgKHRleHQgb3Ig YmluYXJ5KSBpcwotICAgYmFzZWQgb24gdGhlIGZpbGVuYW1lczsgZWFjaCBuYW1lIGlzIGNvbXBh cmVkIHdpdGggS2VybWl0J3MgbGlzdCBvZgotICAgdGV4dCBuYW1lIHBhdHRlcm5zIGFuZCBiaW5h cnkgbmFtZSBwYXR0ZXJucy4gSWYgdGhlIG5hbWUgbWF0Y2hlcyBhCi0gICBiaW5hcnkgcGF0dGVy biAoZm9yIGV4YW1wbGUsIGlmIHRoZSBmaWxlbmFtZSBpcyBvb2ZhLnRhci5neiBhbmQgb25lIG9m Ci0gICB0aGUgZmlsZW5hbWUgcGF0dGVybnMgaXMgIiouZ3oiKSwgdGhlIGZpbGUgaXMgZG93bmxv YWRlZCBpbiBiaW5hcnkKLSAgIG1vZGU7IG90aGVyd2lzZSBpZiBpdCBtYXRjaGVzIGEgdGV4dCBw YXR0ZXJuIChlLmcuIG9vZmEudHh0IG1hdGNoZXMKLSAgICIqLnR4dCIpLCBpdCBpcyB0cmFuc2Zl cnJlZCBpbiB0ZXh0ICgiYXNjaWkiKSBtb2RlLiBPdGhlcndpc2UsIGl0IGlzCi0gICB0cmFuc2Zl cnJlZCBpbiB0aGUgcHJldmFpbGluZyBGVFAgVFlQRS4KLQotICAgSW4gQy1LZXJtaXQgOC4wLCB0 aGUgcGF0dGVybiBsaXN0cyB1c2VkIHdpdGggRlRQIEdFVCBhcmUgbm90IHRoZSBzYW1lCi0gICBs aXN0cyB1c2VkIHdpdGggS2VybWl0IHRyYW5zZmVycywgYW5kIGNhbiBub3QgYmUgdmlld2VkIHdp dGggU0hPVwotICAgUEFUVEVSTlMsIG5vciBhZGp1c3RlZCB3aXRoIEFERCBhbmQgUkVNT1ZFIFRF WFQtUEFUVEVSTlMgYW5kCi0gICBCSU5BUlktUEFUVEVSTlMsIG9yIFNFVCBGSUxFIFRFWFQtUEFU VEVSTlMgYW5kIEJJTkFSWS1QQVRURVJOUy4KLSAgIENvbmZpZ3VyYXRpb24gb2YgdGhlIEZUUCBw YXR0ZXJucyBsaXN0IHdpbGwgYmUgYWRkZWQgaW4gYSBmdXR1cmUKLSAgIHJlbGVhc2UuCi0KLSAg IEV4YW1wbGVzOgotCi0gICBnZXQgL3NlcnZlci1jaGFyOmxhdGluMSAvbG9jYWwtY2hhcjpjcDg1 MCBHcu+/ve+/vWUudHh0Ci0gICAgICAgICAgSW4gdGhpcyBjb21tYW5kLCB0aGUgZmlsZW5hbWUg Y29udGFpbnMgc3BlY2lhbCBjaGFyYWN0ZXJzLCB3aGljaAotICAgICAgICAgIHlvdSBlbnRlciB1 c2luZyB3aGF0ZXZlciBjaGFyYWN0ZXIgc2V0IHlvdXIgbG9jYWwgY29tcHV0ZXIgdXNlcywKLSAg ICAgICAgICBpbiB0aGlzIGNhc2UgUEMgQ29kZSBQYWdlIDg1MCAoY3A4NTApLiBUaGUgY29tbWFu ZCB0ZWxscyBLZXJtaXQKLSAgICAgICAgICAoaW4gY2FzZSBpdCBkaWRuJ3Qga25vdyBhbHJlYWR5 IGZyb20gaXRzIEZJTEUgQ0hBUkFDVEVSLVNFVAotICAgICAgICAgIHNldHRpbmcpIHRoYXQgdGhl IGxvY2FsIGNoYXJhY3RlciBzZXQgaXMgY3A4NTAgYW5kIHRoZSBzZXJ2ZXIncwotICAgICAgICAg IGNoYXJhY3Rlci1zZXQgaXMgSVNPIDg4NTktMSBMYXRpbiBBbHBoYWJldCAxIChsYXRpbjEpLiBL ZXJtaXQKLSAgICAgICAgICB0cmFuc2xhdGVzIHRoZSBmaWxlbmFtZSBmcm9tIGNwODUwIHRvIGxh dGluMSBhbmQgc2VuZHMgdGhlCi0gICAgICAgICAgbGF0aW4xIG5hbWUgdG8gdGhlIHNlcnZlci4g U2luY2UgaXQncyBhIHRleHQgZmlsZSAobWF0Y2hlcwotICAgICAgICAgICIqLnR4dCIpLCBpdHMg Y29udGVudHMgYXJlIHRyYW5zbGF0ZWQgdG8gY3A4NTAgb24gYXJyaXZhbCwgYW5kCi0gICAgICAg ICAgaXQgaXMgc2F2ZWQgd2l0aCBhIGNwODUwIG5hbWUuCi0KLSAgIG1nZXQgL3RleHQgL3NlcnZl cjpsYXRpbjEgL2xvY2FsOnV0ZjggKi50eHQKLSAgICAgICAgICBUaGlzIGNvbW1hbmQ6Ci0KLSAg ICAgICAgICArIFRlbGxzIEMtS2VybWl0IHRoYXQgdGhlIHNlcnZlcidzIGZpbGVzIGFyZSBlbmNv ZGVkIGluIElTTwotICAgICAgICAgICAgODg1OS0xIExhdGluIEFscGhhYmV0IDEuCi0gICAgICAg ICAgKyBUZWxscyBDLUtlcm1pdCB0byB0cmFuc2xhdGUgdGhlIGluY29taW5nIGZpbGVzIGludG8g VW5pY29kZQotICAgICAgICAgICAgVVRGLTggZm9yIHN0b3JhZ2UuCi0gICAgICAgICAgKyBBc2tz IHRoZSBzZXJ2ZXIgdG8gc2VuZCBhbGwgIi50eHQiIGZpbGVzIGluIHRleHQgbW9kZS4KLQotICAg bWdldCAvc2VydmVyOmxhdGluMSAvbG9jYWw6dXRmOCAqCi0gICAgICAgICAgVGVsbHMgS2VybWl0 IHRvIGdldCBhbGwgZmlsZXMgZnJvbSB0aGUgc2VydmVyJ3MgZGlyZWN0b3J5LAotICAgICAgICAg IHN3aXRjaGluZyBiZXR3ZWVuIHRleHQgYW5kIGJpbmFyeSBtb2RlIGJhc2VkIG9uIHRoZSBmaWxl bmFtZS4KLSAgICAgICAgICBUaGUgbmFtZXMgb2YgYWxsIHRoZSBmaWxlcyBhcmUgdHJhbnNsYXRl ZCAodG8gVVRGLTggaW4gdGhpcwotICAgICAgICAgIGNhc2UpLCBidXQgY29udGVudHMgYXJlIHRy YW5zbGF0ZWQgKGFsc28gdG8gVVRGLTgpIG9ubHkgZm9yIHRleHQKLSAgICAgICAgICBmaWxlcy4K LQotICAgTm90ZSB0aGF0IGFueSBwYWlyIG9mIDgtYml0IGNoYXJhY3RlciBzZXRzIGlzIGxpa2Vs eSB0byBoYXZlIHNvbWUKLSAgIGluY29tcGF0aWJpbGl0aWVzLiBBbnkgY2hhcmFjdGVycyBpbiB0 aGUgc291cmNlIGZpbGUgdGhhdCBkbyBub3QgaGF2ZQotICAgZXF1aXZhbGVudHMgaW4gdGhlIGRl c3RpbmF0aW9uIGZpbGUncyBjaGFyYWN0ZXIgc2V0IGFyZSBjb252ZXJ0ZWQgdG8KLSAgIHF1ZXN0 aW9uIG1hcmtzLiBUaGlzIGFwcGxpZXMgdG8gYm90aCBmaWxlbmFtZXMgYW5kIHRvIHRleHQgZmls ZQotICAgY29udGVudHMuCi0KLSAgIEFsc28gbm90ZSB0aGF0IHRoZSBzZXJ2ZXIncyBhYmlsaXR5 IHRvIGFjY2VwdCBzcGVjaWFsIGNoYXJhY3RlcnMgaW4KLSAgIGZpbGVuYW1lcyBkZXBlbmRzIG9u IHRoZSBwYXJ0aWN1bGFyIHNlcnZlci4gRm9yIGV4YW1wbGU6Ci0KLSAgZ2V0IEdy77+977+9ZS50 eHQKLQotICAgd29ya3Mgd2l0aCBXVS1GVFBELCBidXQ6Ci0KLSAgbWdldCBHcu+/ve+/vSoudHh0 Ci0KLSAgIGRvZXMgbm90LgotCi0zLjcuMy4gUkZDMjY0MAotCi0gICBbMzQxXVJGQzI2NDAsIEp1 bHkgMTk5OSwgc3BlY2lmaWVzIGEgbWV0aG9kIGJ5IHdoaWNoIHRoZSBGVFAgY2xpZW50IGFuZAot ICAgc2VydmVyIGNhbiBuZWdvdGlhdGUgdGhlIHVzZSBvZiBVVEY4LiBIb3dldmVyLCBSRkMyNjQw LWNhcGFibGUgc2VydmVycwotICAgYXJlIHJhcmUgdG8gbm9uZXhpc3RlbnQgYXQgdGhpcyB3cml0 aW5nLCBhbmQgaW4gYW55IGNhc2UgeW91IGRvbid0IG5lZWQKLSAgIHRoZW0gdG8gYmUgYWJsZSB0 byB0cmFuc2ZlciB0ZXh0IGluIFVURjguIEMtS2VybWl0IGxldHMgeW91IHVwbG9hZCBhbmQKLSAg IGRvd25sb2FkIHRleHQgZmlsZXMgaW4gYW55IGNoYXJhY3RlciBzZXQgaXQga25vd3MgYWJvdXQs IGNvbnZlcnRpbmcgdG8KLSAgIG9yIGZyb20gYW55IG90aGVyIGNoYXJhY3RlciBzZXQgaXQga25v d3MgYWJvdXQsIHdpdGhvdXQgdGhlIGtub3dsZWRnZSwKLSAgIHBlcm1pc3Npb24sIG9yIGNvb3Bl cmF0aW9uIG9mIHRoZSBzZXJ2ZXIsIGFuZCByZWdhcmRsZXNzIG9mIGl0cwotICAgY2FwYWJpbGl0 aWVzLgotCi0gICBbIFszNDJdVG9wIF0gWyBbMzQzXUZUUCBUb3AgXSBbIFszNDRdQy1LZXJtaXQg SG9tZSBdIFsgWzM0NV1LZXJtaXQgSG9tZQotICAgXQotCi0zLjguIEZUUCBDb21tYW5kIFNob3J0 Y3V0cwotCi0gICBDLUtlcm1pdCdzIEZUUCBjbGllbnQgY29leGlzdHMgd2l0aCBvdGhlciBDLUtl cm1pdCBmdW5jdGlvbnMgYnkKLSAgIHJlcXVpcmluZyB0aGUgImZ0cCIgcHJlZml4IGZvciBlYWNo IEZUUC1yZWxhdGVkIGNvbW1hbmQ6IEZUUCBPUEVOLCBGVFAKLSAgIEdFVCwgRlRQIEJZRSwgYW5k IHNvIG9uLiBGb3IgaW50ZXJhY3RpdmUgdXNlLCBob3dldmVyLCB0aGlzIGNhbiBiZQotICAgcmF0 aGVyIGF3a3dhcmQgYW5kIHNvbWV0aW1lcyBzdXJwcmlzaW5nLCBmb3IgZXhhbXBsZSB3aGVuIGEg R0VUIGNvbW1hbmQKLSAgIHN0YXJ0cyBhIEtlcm1pdCBHRVQgcmF0aGVyIHRoYW4gYW4gRlRQIEdF VC4gSW4gZmFjdCwgbWFueSBLZXJtaXQKLSAgIGNvbW1hbmRzIG1pZ2h0IGp1c3QgYXMgZWFzaWx5 IGFwcGx5IHRvIGFuIEZUUCBjb25uZWN0aW9uOiBHRVQsIFBVVAotICAgKFNFTkQpLCBCWUUsIGFu ZCBDTE9TRS4gVGhlIGZvbGxvd2luZyBjb21tYW5kIGxldHMgeW91IGNob29zZSBob3cgdGhlc2UK LSAgIGNvbW1hbmRzIGFyZSBpbnRlcnByZXRlZDoKLQotICAgU0VUIEdFVC1QVVQtUkVNT1RFIHsg QVVUTywgS0VSTUlULCBGVFAgfQotICAgICAgICAgIENvbnRyb2xzIHRoZSBvcmllbnRhdGlvbiBv ZiBHRVQsIFBVVCwgUkVNT1RFIGFuZCBvdGhlcgotICAgICAgICAgIGZpbGUtdHJhbnNmZXIgYW5k IGNsaWVudC9zZXJ2ZXIgY29tbWFuZHMgdGhhdCBtaWdodCBhcHBseSB0bwotICAgICAgICAgIGVp dGhlciBLZXJtaXQgb3IgRlRQLiBUaGUgZGVmYXVsdCBzZXR0aW5nIGlzIEFVVE8sIG1lYW5pbmcg dGhhdAotICAgICAgICAgIHRoZXNlIGNvbW1hbmRzIGFwcGx5IHRvIEZUUCBpZiBhbiBGVFAgY29u bmVjdGlvbiBpcyBvcGVuLCBhbmQgdG8KLSAgICAgICAgICBLZXJtaXQgb3RoZXJ3aXNlLiBLRVJN SVQgbWVhbnMgdGhleSBhbHdheXMgYXBwbHkgdG8gS2VybWl0LCBGVFAKLSAgICAgICAgICBtZWFu cyB0aGV5IGFsd2F5cyBhcHBseSB0byBGVFAuCi0KLSAgIEhlcmUgaXMgYSBjb21wbGV0ZSBsaXN0 IG9mIGFmZmVjdGVkIGNvbW1hbmRzOgotCi0gS2VybWl0IENvbW1hbmQgICAgICAgICAgICAgICBG VFAgRXF1aXZhbGVudAotICAobm9uZSkgICAgICAgICAgICAgICAgICAgICAgIEZUUCBbIE9QRU4g XQotICBMT0dJTiAgICAgICAgICAgICAgICAgICAgICAgIEZUUCBVU0VSCi0gIExPR09VVCAgICAg ICAgICAgICAgICAgICAgICAgRlRQIFJFU0VUCi0gIEJZRSAgICAgICAgICAgICAgICAgICAgICAg ICAgRlRQIEJZRQotICBGSU5JU0ggICAgICAgICAgICAgICAgICAgICAgIEZUUCBCWUUKLSAgQ0xP U0UgICAgICAgICAgICAgICAgICAgICAgICBGVFAgQllFCi0gIEhBTkdVUCAgICAgICAgICAgICAg ICAgICAgICAgRlRQIEJZRQotICBCSU5BUlkgICAgICAgICAgICAgICAgICAgICAgIEZUUCBUWVBF IEJJTkFSWQotICBURVhUIChvciBBU0NJSSkgICAgICAgICAgICAgIEZUUCBUWVBFIEFTQ0lJCi0g IFNFTkQgKG9yIFBVVCkgICAgICAgICAgICAgICAgRlRQIFBVVAotICBNU0VORCAob3IgTVBVVCkg ICAgICAgICAgICAgIEZUUCBNUFVUCi0gIFJFU0VORCAgICAgICAgICAgICAgICAgICAgICAgRlRQ IFBVVCAvUkVDT1ZFUgotICBDU0VORCAgICAgICAgICAgICAgICAgICAgICAgIEZUUCBQVVQgL0NP TU1BTkQKLSAgR0VUICAgICAgICAgICAgICAgICAgICAgICAgICBGVFAgR0VUCi0gIE1HRVQgICAg ICAgICAgICAgICAgICAgICAgICAgRlRQIE1HRVQKLSAgUkVHRVQgICAgICAgICAgICAgICAgICAg ICAgICBGVFAgR0VUIC9SRUNPVkVSCi0gIFJFTU9URSBIRUxQICAgICAgKFJIRUxQKSAgICAgRlRQ IEhFTFAKLSAgUkVNT1RFIENEICAgICAgICAoUkNEKSAgICAgICBGVFAgQ0QgKENXRCkKLSAgUkVN T1RFIFBXRCAgICAgICAoUlBXRCkgICAgICBGVFAgUFdECi0gIFJFTU9URSBESVJFQ1RPUlkgKFJE SVIpICAgICAgRlRQIERJUkVDVE9SWQotICBSRU1PVEUgREVMRVRFICAgIChSREVMKSAgICAgIEZU UCBERUxFVEUKLSAgUkVNT1RFIE1LRElSICAgICAoUk1LRElSKSAgICBGVFAgTUtESVIKLSAgUkVN T1RFIFJNRElSICAgICAoUlJNRElSKSAgICBGVFAgUk1ESVIKLSAgUkVNT1RFIFJFTkFNRSAgICAo UlJFTkFNRSkgICBGVFAgUkVOQU1FCi0gIFJFTU9URSBUWVBFICAgICAgKFJUWVBFKSAgICAgRlRQ IFRZUEUKLSAgUkVNT1RFIEVYSVQgICAgICAoUkVYSVQpICAgICBGVFAgQllFCi0KLSAgIFRoZSBj b21tYW5kcyBpbiB0aGUgcmlnaHQtaGFuZCBjb2x1bW4gYWx3YXlzIGFjY2VzcyBGVFAuIFRoZSBj b21tYW5kcwotICAgaW4gdGhlIGxlZnQgY29sdW1uIGNhbiBhY2Nlc3MgZWl0aGVyIEtlcm1pdCBw cm90b2NvbCBvciBGVFA6Ci0KLSAgICAgKiBXaGVuIEdFVC1QVVQtUkVNT1RFIGlzIHNldCB0byBL RVJNSVQsIG9yIHRvIEFVVE8gd2hlbiB0aGVyZSBpcyBubwotICAgICAgIEZUUCBjb25uZWN0aW9u LCB0aGUgY29tbWFuZHMgaW4gdGhlIGxlZnQtaGFuZCBjb2x1bW4gYWNjZXNzIEtlcm1pdAotICAg ICAgIHByb3RvY29sLCBhbmQgdGhvc2UgcmlnaHQtaGFuZCBjb2x1bW4gYXJlIHJlcXVpcmVkIGZv ciBGVFAuCi0gICAgICogV2hlbiBHRVQtUFVULVJFTU9URSBpcyBzZXQgdG8gRlRQLCBvciB0byBB VVRPIHdoZW4gdGhlcmUgaXMgYW4KLSAgICAgICBhY3RpdmUgRlRQIGNvbm5lY3Rpb24sIHRoZSBj b21tYW5kcyBpbiB0aGUgbGVmdC1oYW5kIGNvbHVtbiBhY2Nlc3MKLSAgICAgICB0aGUgRlRQIGNv bm5lY3Rpb24gYW5kIGNhbiBub3QgYmUgdXNlZCB0byBhY2Nlc3MgS2VybWl0IHByb3RvY29sLgot ICAgICAgIEluIHRoaXMgY2FzZSwgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgYm90aCBL ZXJtaXQgcHJvdG9jb2wKLSAgICAgICBhbmQgdGhlIEZUUCBjb25uZWN0aW9uLCB5b3UgbXVzdCBT RVQgR0VULVBVVC1SRU1PVEUgS0VSTUlULCBhbmQKLSAgICAgICB0aGVuIHVzZSB0aGUgRlRQIGNv bW1hbmRzIGluIHRoZSByaWdodC1oYW5kIGNvbHVtbiB0byBhY2Nlc3MgdGhlCi0gICAgICAgRlRQ IGNvbm5lY3Rpb24uCi0KLSAgIE5vdGUgdGhhdCBmaWxlLW1hbmFnZW1lbnQgY29tbWFuZHMgc3Vj aCBhcyBESVJFQ1RPUlksIERFTEVURSwgQ0QsIFBXRCwKLSAgIE1LRElSLCBSTURJUiwgSEVMUCwg UkVOQU1FLCBDT1BZLCBUWVBFLCBhbmQgc28gb24sIGFsd2F5cyBhcHBseQotICAgbG9jYWxseSwg bm8gbWF0dGVyIHdoYXQga2luZCBvZiBjb25uZWN0aW9uIHlvdSBoYXZlLiBUaGlzIGlzIHRoZQot ICAgb3Bwb3NpdGUgb2YgbW9zdCBGVFAgY2xpZW50cywgd2hlcmUgdGhlc2UgY29tbWFuZHMgYXJl IGludGVuZGVkIGZvciB0aGUKLSAgIHNlcnZlciwgYW5kIHJlcXVpcmUgYW4gIkwiIHByZWZpeCBm b3IgbG9jYWwgZXhlY3V0aW9uIChlLmcuICJkaXIiIGdldHMKLSAgIGEgZGlyZWN0b3J5IGxpc3Rp bmcgZnJvbSB0aGUgc2VydmVyLCAibGRpciIgZ2V0cyBhIGxvY2FsIGRpcmVjdG9yeQotICAgbGlz dGluZykuIFRvIGlsbHVzdHJhdGUgd2l0aCB0aGUgQ0QgY29tbWFuZCBhbmQgYSB0eXBpY2FsIFVO SVggRlRQCi0gICBjbGllbnQ6Ci0KLSBDbGllbnQgICBTZXJ2ZXIgICAgICBDaGFuZ2UgTG9jYWwg RGlyZWN0b3J5ICAgICBDaGFuZ2UgUmVtb3RlIERpcmVjdG9yeQotICBGVFAgICAgICBGVFAgICAg ICAgICBsY2QgICAgICAgICAgICAgICAgICAgICAgICBjZCAoY3dkKQotICBLZXJtaXQgICBLZXJt aXQgICAgICBjZCAgICAgICAgICAgICAgICAgICAgICAgICByY2QsIHJlbW90ZSBjZAotICBLZXJt aXQgICBGVFAgICAgICAgICBjZCAgICAgICAgICAgICAgICAgICAgICAgICBmdHAgY2QsIHJjZCwg cmVtb3RlIGNkCi0KLSAgIEFsc28gbm90ZSB0aGF0IG5vdCBhbGwgUkVNT1RFIGNvbW1hbmRzIGFy ZSB1c2VmdWwgd2l0aCBGVFAsIHNpbmNlIEZUUAotICAgc2VydmVycyBkbyBub3Qgb2ZmZXIgdGhl IGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25zLiBUaGVzZSBpbmNsdWRlOgotCi0gICAgICogUkVNT1RF IEFTU0lHTiAgLSBGVFAgc2VydmVycyBkb24ndCBoYXZlIHZhcmlhYmxlcwotICAgICAqIFJFTU9U RSBDT1BZICAgIC0gRlRQIHNlcnZlcnMgZG9uJ3QgY29weSBmaWxlcwotICAgICAqIFJFTU9URSBI T1NUICAgIC0gRlRQIHNlcnZlcnMgZG9uJ3QgZXhlY3V0ZSBob3N0IChzaGVsbCkgY29tbWFuZHMK LSAgICAgKiBSRU1PVEUgS0VSTUlUICAtIEZUUCBzZXJ2ZXJzIGRvbid0IGV4ZWN1dGUgS2VybWl0 IGNvbW1hbmRzCi0gICAgICogUkVNT1RFIFBSSU5UICAgLSBGVFAgc2VydmVycyBkb24ndCBwcmlu dCBmaWxlcwotICAgICAqIFJFTU9URSBRVUVSWSAgIC0gRlRQIHNlcnZlcnMgZG9uJ3QgaGF2ZSB2 YXJpYWJsZXMKLSAgICAgKiBSRU1PVEUgU0VUICAgICAtIEZUUCBzZXJ2ZXJzIGRvbid0IGhhdmUg S2VybWl0IHNldHRpbmdzCi0gICAgICogUkVNT1RFIFdITyAgICAgLSBGVFAgc2VydmVycyBkb24n dCBzZW5kIHVzZXIgbGlzdHMKLQotICAgRmluYWxseSBub3RlIHRoYXQgY29tbWFuZCBzaG9ydGN1 dHMgZG8gbm90IGFwcGx5IHRvIHRoZSBIRUxQIGNvbW1hbmQuCi0gICBGb3IgaGVscCBhYm91dCBh biBGVFAgY29tbWFuZCwgdXNlIChmb3IgZXhhbXBsZSkgImhlbHAgZnRwIGRlbGV0ZSIsIG5vdAot ICAgImhlbHAgZGVsZXRlIiBvciAiaGVscCByZGVsZXRlIi4KLQotICAgWyBbMzQ2XVRvcCBdIFsg WzM0N11GVFAgVG9wIF0gWyBbMzQ4XUMtS2VybWl0IEhvbWUgXSBbIFszNDldS2VybWl0IEhvbWUK LSAgIF0KLQotMy45LiBEdWFsIFNlc3Npb25zCi0KLSAgIFlvdSBjYW4gaGF2ZSBhbiBGVFAgc2Vz c2lvbiBvcGVuIGF0IHRoZSBzYW1lIHRpbWUgYXMgYSByZWd1bGFyIEtlcm1pdAotICAgU0VUIExJ TkUgb3IgU0VUIEhPU1QgKHRlcm1pbmFsKSBzZXNzaW9uLiBJbiB0aGlzIGNhc2UsIHRoZSBkZWZh dWx0IFNFVAotICAgR0VULVBVVC1SRU1PVEUgQVVUTyBzZXR0aW5nIHNob3VsZCBlbnN1cmUgdGhh dCBhbGwgInR3by1mYWNlZCIgY29tbWFuZHMKLSAgIGxpa2UgR0VULCBQVVQsIFJFTU9URSwgSEFO R1VQLCBCWUUsIGV0YywgYXBwbHkgdG8gdGhlIEtlcm1pdCBzZXNzaW9uLAotICAgYW5kIGFsbCBj b21tYW5kcyBmb3IgdGhlIEZUUCBzZXNzaW9uIG11c3QgaW5jbHVkZSB0aGUgRlRQIHByZWZpeC4g VG8gYmUKLSAgIGFic29sdXRlbHkgY2VydGFpbiwgeW91IGNhbiB1c2UgU0VUIEdFVC1QVVQtUkVN T1RFIEtFUk1JVC4KLQotICBmdHAgZm9vLmJhci5iYXouY29tCi0gIGlmIGZhaWwgLi4uCi0gIChs b2cgaW4pCi0gIHNldCBob3N0IGZvby5iYXIuYmF6LmNvbQotICBpZiBmYWlsIC4uLgotICAobG9n IGluKQotCi0gICBOb3cgeW91IGhhdmUgYm90aCBhbiBGVFAgYW5kIFRlbG5ldCBjb25uZWN0aW9u IHRvIHRoZSBzYW1lIGhvc3QgKG9mCi0gICBjb3Vyc2UgdGhleSBjb3VsZCBhbHNvIGJlIHRvIGRp ZmZlcmVudCBob3N0cywgYW5kIHlvdSBjb3VsZCBhbHNvIGhhdmUgYQotICAgZGlyZWN0IG9yIGRp YWxlZCBzZXJpYWwgY29ubmVjdGlvbiBpbnN0ZWFkIG9mIGEgVGVsbmV0IGNvbm5lY3Rpb24pLiBO b3cKLSAgIGFzc3VtaW5nIHlvdSBoYXZlIGEgS2VybWl0IHNlcnZlciBvbiB0aGUgZmFyIGVuZCBv ZiB0aGUgS2VybWl0Ci0gICBjb25uZWN0aW9uOgotCi0gIHJjZCBpbmNvbWluZyAgICAgIDsgQ2hh bmdlcyBLZXJtaXQgc2VydmVyJ3MgZGlyZWN0b3J5ICg9IFJFTU9URSBDRCkKLSAgZnRwIGNkIGlu Y29taW5nICAgOyBDaGFuZ2VzIEZUUCBzZXJ2ZXIncyBkaXJlY3RvcnkKLSAgcHV0IG9vZmEudHh0 ICAgICAgOyBTZW5kcyBhIGZpbGUgb24gdGhlIEtlcm1pdCBjb25uZWN0aW9uCi0gIGZ0cCBwdXQg b29mYS50eHQgIDsgU2VuZHMgYSBmaWxlIG9uIHRoZSBGVFAgY29ubmVjdGlvbgotICBieWUgICAg ICAgICAgICAgICA7IFNodXRzIGRvd24gdGhlIEtlcm1pdCBjb25uZWN0aW9uCi0gIGZ0cCBieWUg ICAgICAgICAgIDsgU2h1dHMgZG93biB0aGUgRlRQIGNvbm5lY3Rpb24KLQotICAgTm90ZSB0aGF0 IFBVVCBhbmQgU0VORCBhcmUgc3lub255bXMgZm9yIGJvdGggRlRQIGFuZCBLZXJtaXQKLSAgIGNv bm5lY3Rpb25zLgotCi0gICBZb3UgY2FuIGFsc28gZXN0YWJsaXNoIGR1YWwgc2Vzc2lvbnMgb24g dGhlIEtlcm1pdCBjb21tYW5kIGxpbmU6Ci0KLSAga2VybWl0IC1qIGhvc3QxIC05IGhvc3QyCi0K LSAgIFRoaXMgbWFrZXMgYSBUZWxuZXQgY29ubmVjdGlvbiB0byBob3N0MSBhbmQgYW4gRlRQIGNv bm5lY3Rpb24gdG8gaG9zdDIuCi0KLSAgIFsgWzM1MF1Ub3AgXSBbIFszNTFdRlRQIFRvcCBdIFsg WzM1Ml1DLUtlcm1pdCBIb21lIF0gWyBbMzUzXUtlcm1pdCBIb21lCi0gICBdCi0KLTMuMTAuIEF1 dG9tYXRpbmcgRlRQIFNlc3Npb25zCi0KLSAgIE1vc3Qgb2YgS2VybWl0J3Mgc2NyaXB0aW5nIGZl YXR1cmVzIGNhbiBiZSB1c2VkIHRvIG1ha2UgYW5kIGNvbnRyb2wgRlRQCi0gICBzZXNzaW9uczog Rk9SIGFuZCBXSElMRSBsb29wcywgSUYtRUxTRSBhbmQgU1dJVENIIGNvbnN0cnVjdGlvbnMsCi0g ICB2YXJpYWJsZXMsIGFycmF5cywgYnVpbHQtaW4gZnVuY3Rpb25zLCBhbmQgYWxsIHRoZSByZXN0 LiBZb3UgY2FuJ3QgdXNlCi0gICBJTlBVVCwgTUlOUFVULCBPVVRQVVQsIENMRUFSLCBvciBTQ1JJ UFQgb24gYW4gRlRQIHNlc3Npb24sIGJ1dCB0aGVzZQotICAgYXJlIG5vdCBuZWVkZWQgc2luY2Ug dGhlIEZUUCBwcm90b2NvbCBpcyB3ZWxsIGRlZmluZWQuCi0KLSAgIFszNTRdQ0xJQ0sgSEVSRSBm b3IgYW4gRlRQIHNjcmlwdGluZyB0dXRvcmlhbC4KLQotMy4xMC4xLiBGVFAtU3BlY2lmaWMgVmFy aWFibGVzIGFuZCBGdW5jdGlvbnMKLQotICAgVGhlIGZvbGxvd2luZyB2YXJpYWJsZSB0ZWxscyB3 aGV0aGVyIGFuIEZUUCBjb25uZWN0aW9uIGlzIG9wZW46Ci0KLSAgIFx2KGZ0cF9jb25uZWN0ZWQp Ci0gICAgICAgICAgMSBpZiB0aGVyZSBpcyBhbiBhY3RpdmUgRlRQIGNvbm5lY3Rpb24sIDAgaWYg dGhlcmUgaXNuJ3QuCi0KLSAgIFRoZSBGVFAgT1BFTiBjb21tYW5kIHNldHM6Ci0KLSAgIFx2KGZ0 cF9ob3N0KQotICAgICAgICAgIFRoZSBob3N0IHRvIHdoaWNoIHRoZSBtb3N0IHJlY2VudCBGVFAg Y29ubmVjdGlvbiB3YXMgbWFkZS4KLQotICAgXHYoZnRwX3NlY3VyaXR5KQotICAgICAgICAgIFRo ZSBzZWN1cml0eSBtZXRob2QgbmVnb3RpYXRlZCBmb3IgdGhlIGN1cnJlbnQgRlRQIHNlc3Npb24u IFRoZQotICAgICAgICAgIHZhbHVlIGlzICJOVUxMIiB3aGVuIG5vIHNlY3VyaXR5IGlzIHVzZWQu IE90aGVyIHBvc3NpYmlsaXRpZXMKLSAgICAgICAgICBhcmUgR1NTQVBJLCBLRVJCRVJPU19WNCwg U1NMLCBUTFMsIGFuZCBTUlAuIEFsc28gc2VlCi0gICAgICAgICAgXHYoYXV0aG5hbWUpLCBcdihh dXRoc3RhdGUpLCBhbmQgXHYoYXV0aHR5cGUpLiBTZWUgWzM1NV0zLjIuCi0gICAgICAgICAgTWFr aW5nIFNlY3VyZSBGVFAgQ29ubmVjdGlvbnMuCi0KLSAgIFx2KGZ0cF9zZXJ2ZXIpCi0gICAgICAg ICAgVGhlIE9TIHR5cGUgKFVOSVgsIFZNUywgZXRjKSBvZiB0aGUgRlRQIHNlcnZlciBob3N0Lgot Ci0gICBUaGUgRlRQIFVTRVIgY29tbWFuZCAob3IgRlRQIE9QRU4gL1VTRVI6LCBvciBGVFAgd2l0 aCBhdXRvbWF0aWMgbG9naW4pCi0gICBzZXRzOgotCi0gICBcdihmdHBfbG9nZ2VkaW4pCi0gICAg ICAgICAgMSBpZiB5b3UgYXJlIGxvZ2dlZCBpbiB0byBhbiBGVFAgc2VydmVyLCAwIGlmIHlvdSBh cmUgbm90LgotCi0gICBUaGUgY3VycmVudCBDT01NQU5ELVBST1RFQ1RJT04tTEVWRUwgYW5kIERB VEEtUFJPVEVDVElPTi1MRVZFTCB2YWx1ZXMKLSAgIGFyZSByZWZsZWN0ZWQgaW46Ci0KLSAgIFx2 KGZ0cF9jcGwpCi0gICBcdihmdHBfZHBsKQotICAgICAgICAgIFRoZSB2YWx1ZXMgYXJlICJjbGVh ciIsICJjb25maWRlbnRpYWwiLCAic2FmZSIgb3IgInByaXZhdGUiLiBTZWUKLSAgICAgICAgICBb MzU2XTMuMi4gTWFraW5nIFNlY3VyZSBGVFAgQ29ubmVjdGlvbnMuCi0KLSAgIFRoZSBGVFAgR0VU LVBVVC1SRU1PVEUgc2V0dGluZyBpcyByZWZsZWN0ZWQgaW46Ci0KLSAgIFx2KGZ0cF9nZXRwdXRy ZW1vdGUpCi0gICAgICAgICAgVGhlIHZhbHVlcyBhcmUgImF1dG8iLCAiZnRwIiwgb3IgImtlcm1p dCIuCi0KLSAgIEV2ZXJ5IEZUUCBjb21tYW5kIHNldHMgdGhlIFx2KHN1Y2Nlc3MpIHZhcmlhYmxl LCBhcyB3ZWxsIGFzIHRoZQotICAgZm9sbG93aW5nIHR3byBGVFAtc3BlY2lmaWMgdmFyaWFibGVz OgotCi0gICBcdihmdHBfY29kZSkKLSAgICAgICAgICBUaGUgc3RhbmRhcmRpemVkIG51bWVyaWMg RlRQIHByb3RvY29sIGNvZGUgZnJvbSB0aGUgc2VydmVyJ3MKLSAgICAgICAgICByZXNwb25zZSB0 byB0aGUgbGFzdCBjbGllbnQgY29tbWFuZCwgYSAzLWRpZ2l0IGRlY2ltYWwgbnVtYmVyCi0gICAg ICAgICAgZGVmaW5lZCBpbiBbMzU3XVJGQzk1OS4gQnJpZWZseToKLQotICAgICAgICAgIDF4eCA9 IFBvc2l0aXZlIFByZWxpbWluYXJ5IFJlcGx5Ci0gICAgICAgICAgMnh4ID0gUG9zaXRpdmUgQ29t cGxldGlvbiBSZXBseQotICAgICAgICAgIDN4eCA9IFBvc2l0aXZlIEludGVybWVkaWF0ZSBSZXBs eQotICAgICAgICAgIDR4eCA9IFRyYW5zaWVudCBOZWdhdGl2ZSBDb21wbGV0aW9uIFJlcGx5Ci0g ICAgICAgICAgNXh4ID0gUGVybWFuZW50IE5lZ2F0aXZlIENvbXBsZXRpb24gUmVwbHkKLQotICAg XHYoZnRwX21lc3NhZ2UpCi0gICAgICAgICAgVGhlIHRleHQgbWVzc2FnZSwgaWYgYW55LCBmcm9t IHRoZSBzZXJ2ZXIncyByZXNwb25zZSB0byB0aGUgbGFzdAotICAgICAgICAgIGNsaWVudCBjb21t YW5kLiBJZiB0aGUgbW9zdCByZWNlbnQgcmVzcG9uc2UgaGFkIG11bHRpcGxlIGxpbmVzLAotICAg ICAgICAgIHRoaXMgdmFyaWFibGUgaGFzIG9ubHkgdGhlIGZpbmFsIGxpbmUuIFRoZXNlIG1lc3Nh Z2VzIGFyZSBub3QKLSAgICAgICAgICBzdGFuZGFyZGl6ZWQgYW5kIHZhcnkgaW4gZm9ybWF0IGFu ZCBjb250ZW50IGZyb20gc2VydmVyIHRvCi0gICAgICAgICAgc2VydmVyLiBTeW5vbnltOiBcdihm dHBfbXNnKS4KLQotICAgRlRQIGZpbGUgdHJhbnNmZXJzIHNldCB0aGUgcmVndWxhciBLZXJtaXQg dHJhbnNmZXIgc3RhdHVzIHZhcmlhYmxlczoKLQotICBcdihjcHMpICAgICAgICAgQ2hhcmFjdGVy cyBwZXIgc2Vjb25kIG9mIG1vc3QgcmVjZW50IHRyYW5zZmVyLgotICBcdihmaWxlc3BlYykgICAg RmlsZSBzcGVjaWZpY2F0aW9uIHVzZWQgaW4gbW9zdCByZWNlbnQgdHJhbnNmZXIuCi0gIFx2KGZz aXplKSAgICAgICBTaXplIG9mIGZpbGUgbW9zdCByZWNlbnRseSB0cmFuc2ZlcnJlZC4KLSAgXHYo dGZzaXplKSAgICAgIFRvdGFsIHNpemUgb2YgZmlsZSBncm91cCBtb3N0IHJlY2VudGx5IHRyYW5z ZmVycmVkLgotICBcdih4ZmVyc3RhdHVzKSAgU3RhdHVzIG9mIG1vc3QgcmVjZW50IHRyYW5zZmVy ICgwID0gc3VjY2VzcywgMSA9IGZhaWx1cmUpLgotICBcdih0ZnRpbWUpICAgICAgRWxhcHNlZCB0 aW1lIG9mIG1vc3QgcmVjZW50IHRyYW5zZmVyLCBpbiBzZWNvbmRzLgotCi0gICBEdXJpbmcgYW4g RlRQIHRyYW5zZmVyLCB0aGUgcGVyLWZpbGUgdmFyaWFibGVzIGFyZToKLQotICBcdihmaWxlbmFt ZSkgICAgTmFtZSBvZiBjdXJyZW50IGZpbGUuCi0gIFx2KGZpbGVudW1iZXIpICBPcmRpbmFsIGZp bGUgbnVtYmVyIGluIGdyb3VwICgxLCAyLCAzLCAuLi4pCi0KLTMuMTAuMi4gRXhhbXBsZXMKLQot ICAgTGV0J3MgYmVnaW4gd2l0aCBhIHNpbXBsZSBleGFtcGxlIHNob3dpbmcgaG93IHRvIGxvZyBp biwgc2VuZCBzb21lCi0gICBmaWxlcywgYW5kIGxvZyBvdXQ6Ci0KLSAgZGVmaW5lIGVycm9yIGlm IGZhaWwgeyBmdHAgYnllLCBzdG9wIDEgRXJyb3I6IFwlMSB9Ci0gIHNldCB0cmFuc2FjdCBicmll ZgotICBsb2cgdAotICBmdHAgZnRwLnh5emNvcnAuY29tIC9hbm9ueW1vdXMKLSAgaWYgZmFpbCBz dG9wIDEgQ29ubmVjdGlvbiBmYWlsZWQKLSAgaWYgbm90IFx2KGZ0cF9sb2dnZWRpbikgc3RvcCAx IExvZ2luIGZhaWxlZAotICBmdHAgY2QgaW5jb21pbmcKLSAgZXJyb3Ige2Z0cCBjZH0KLSAgY2Qg dXBsb2FkCi0gIGVycm9yIHtsb2NhbCBjZH0KLSAgZnRwIHB1dCAvZGVsZXRlICoKLSAgZXJyb3Ig e3B1dH0KLSAgZnRwIGJ5ZQotCi0gICBGaXJzdCB3ZSBkZWZpbmUgYW4gZXJyb3IgaGFuZGxpbmcg bWFjcm8gdG8gYmUgdXNlZCBhZnRlciB0aGUgY29ubmVjdGlvbgotICAgaXMgbWFkZS4gVGhlbiB3 ZSBzZXQgdXAgYSBicmllZi1mb3JtYXQgdHJhbnNhY3Rpb24gbG9nIHRvIGtlZXAgYSByZWNvcmQK LSAgIG9mIG91ciBmaWxlIHRyYW5zZmVycy4gVGhlbiB3ZSBtYWtlIGEgY29ubmVjdGlvbiB0byB0 aGUgaG9zdCBhbmQgbG9nIGluCi0gICBhbm9ueW1vdXNseS4gVGhlICJpZiBmYWlsIiBjb21tYW5k IGNoZWNrcyB3aGV0aGVyIHRoZSBjb25uZWN0aW9uIHdhcwotICAgbWFkZS4gVGhlICJpZiBub3Qi IGNvbW1hbmQgY2hlY2tzIHdoZXRoZXIgbG9naW4gd2FzIHN1Y2Nlc3NmdWwuCi0gICBPYnZpb3Vz bHkgdGhlIHNjcmlwdCBzaG91bGQgbm90IGNvbnRpbnVlIHVubGVzcyBib3RoIHRlc3RzIHN1Y2Nl ZWQuCi0KLSAgIE5leHQgd2UgY2hhbmdlIHRvIHRoZSBzZXJ2ZXIncyAnaW5jb21pbmcnIGRpcmVj dG9yeSBhbmQgdG8gb3VyIG93bgotICAgJ3VwbG9hZCcgZGlyZWN0b3J5LCBhbmQgc2VuZCBhbGwg dGhlIGZpbGVzIHRoYXQgYXJlIGluIGl0ICh0aGV5IGNhbiBiZQotICAgYW55IG1peHR1cmUgb2Yg dGV4dCBhbmQgYmluYXJ5IGZpbGVzKSwgZGVsZXRpbmcgZWFjaCBzb3VyY2UgZmlsZQotICAgYXV0 b21hdGljYWxseSBhZnRlciBpdCBpcyBzdWNjZXNzZnVsbHkgdXBsb2FkZWQuIEVhY2ggb2YgdGhl c2UKLSAgIG9wZXJhdGlvbnMgaXMgY2hlY2tlZCB3aXRoIHRoZSBFUlJPUiBtYWNybywgd2hpY2gg cHJldmVudHMgdGhlIHNjcmlwdAotICAgZnJvbSBjb250aW51aW5nIHBhc3QgYSBmYWlsdXJlLgot Ci0gICBGaW5hbGx5IHdlIGNsb3NlIHRoZSBGVFAgc2Vzc2lvbiB3aXRoIHRoZSAiYnllIiBjb21t YW5kLgotCi0gICBKdXN0IGxpa2UgYW55IG90aGVyIEtlcm1pdCBzY3JpcHQsIHRoaXMgb25lIGNh biBiZSB1c2VkIGluIG1hbnkgd2F5czoKLQotICAgICAqIEl0IGNhbiBiZSBzdG9yZWQgaW4gYSBm aWxlLCBhbmQgS2VybWl0IGNhbiBiZSB0b2xkIHRvIFRBS0UgdGhlCi0gICAgICAgZmlsZS4KLSAg ICAgKiBJbiBVTklYLCBpdCBjYW4gYmUgYSAiWzM1OF1rZXJiYW5nIiBzY3JpcHQgYW5kIHRoZXJl Zm9yZSBydW4KLSAgICAgICBkaXJlY3RseSBmcm9tIHRoZSBzaGVsbCBwcm9tcHQgb3IgYXMgYSBj cm9uIGpvYi4KLQotICAgV2UgY291bGQgaGF2ZSB1c2VkIGNvbW1hbmQgc2hvcnRjdXRzIGxpa2Ug InJjZCIsICJwdXQiLCBhbmQgImJ5ZSIsIGJ1dAotICAgc2luY2UgdGhleSBjYW4gYmUgYW1iaWd1 b3VzIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgaXQgaXMgYmV0dGVyCi0gICB0byBhdm9p ZCB0aGVtIGluIHNjcmlwdHM7IHRoZXkgYXJlIGludGVuZGVkIG1haW5seSBmb3IgY29udmVuaWVu Y2UKLSAgIGR1cmluZyBpbnRlcmFjdGl2ZSB1c2UuIEhvd2V2ZXIsIGlmIHlvdSB3aXNoIHRvIHVz ZSB0aGUgc2hvcnRjdXRzIGluIGEKLSAgIHNjcmlwdCwgeW91IGNhbiBkbyBpdCB0aGlzIHdheSAo ZXJyb3IgaGFuZGxpbmcgb21pdHRlZCBmb3IgYnJldml0eSk6Ci0KLSAgbG9jYWwgXCV0ICAgICAg ICAgICAgICAgICAgICAgICA7IERlY2xhcmUgYSBsb2NhbCB0ZW1wb3JhcnkgdmFyaWFibGUKLSAg YXNzaWduIFwldCBcdihmdHBfZ2V0cHV0cmVtb3RlKSA7IFNhdmUgY3VycmVudCBGVFAgR0VULVBV VC1SRU1PVEUgc2V0dGluZwotICBzZXQgZnRwIGdldC1wdXQtcmVtb3RlIGZ0cCAgICAgIDsgQ2hv b3NlIEZUUCBvcmllbnRhdGlvbgotICBmdHAgeHl6Y29ycC5jb20gL2Fub255bW91cyAgICAgIDsg T3BlbiBhbiBGVFAgY29ubmVjdGlvbgotICBnZXQgb29mYS50eHQgICAgICAgICAgICAgICAgICAg IDsgR0VUIGEgZmlsZQotICBwdXQgZm9vLmJhciAgICAgICAgICAgICAgICAgICAgIDsgUFVUIGEg ZmlsZQotICByZGVsIHllc3RlcmRheS5sb2cgICAgICAgICAgICAgIDsgRGVsZXRlIGEgZmlsZSBv biB0aGUgc2VydmVyCi0gIGJ5ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBMb2cgb3V0 IGFuZCBkaXNjb25uZWN0IGZyb20gc2VydmVyLgotICBzZXQgZnRwIGdldC1wdXQtcmVtb3RlIFwl dCAgICAgIDsgUmVzdG9yZSBwcmV2aW91cyBHRVQtUFVULVJFTU9URSBzZXR0aW5nCi0KLSAgIE9m IGNvdXJzZSwgRlRQIHNjcmlwdHMgY2FuIGFsc28gYmUgd3JpdHRlbiBhcyBtYWNyb3MuIFRoaXMg bGV0cyB5b3UKLSAgIHBhc3MgcGFyYW1ldGVycyBzdWNoIGFzIGhvc3RuYW1lcywgdXNlcm5hbWVz LCBhbmQgZmlsZW5hbWVzIHRvIHRoZW06Ci0KLSAgZGVmaW5lIGRvZnRwZ2V0IHsKLSAgICAgIGlm IDwgXHYoYXJnYykgNCBlbmQgMSBVc2FnZTogXCUwIGhvc3QgdXNlciByZW1vdGVmaWxlIFsgbG9j YWxmaWxlIF0KLSAgICAgIGZ0cCBcJTEgL3VzZXI6XCUyCi0gICAgICBpZiBmYWlsIGVuZCAxIEZU UCBPUEVOIFwlMSBmYWlsZWQKLSAgICAgIGlmIG5vdCBcdihmdHBfbG9nZ2VkaW4pIGVuZCAxIEZU UCBMT0dJTiBmYWlsZWQKLSAgICAgIGZ0cCBnZXQge1wlM30ge1wlNH0KLSAgICAgIGlmIGZhaWwg ZW5kIDEgRlRQIEdFVCBcJTMgZmFpbGVkCi0gICAgICBmdHAgYnllCi0gIH0KLQotICAgQWRkIHRo aXMgZGVmaW5pdGlvbiB0byB5b3VyIEtlcm1pdCBjdXN0b21pemF0aW9uIGZpbGUsIGFuZCBpdCB3 aWxsCi0gICBhbHdheXMgYmUgYXZhaWxhYmxlIHdoZW4geW91IHN0YXJ0IEtlcm1pdC4gVGhpcyBt YWNybyBsZXRzIHlvdSBkb3dubG9hZAotICAgYSBmaWxlIHdpdGggRlRQIGJ5IGdpdmluZyBhIHNp bmdsZSBjb21tYW5kLCBlLmcuOgotCi0gIGRvZnRwZ2V0IHh5emNvcnAuY29tIGFub255bW91cyBv b2ZhLnR4dAotCi0zLjEwLjMuIEF1dG9tYXRpbmcgU2VjdXJlIEZUUCBTZXNzaW9ucwotCi0gICBP ZnRlbiB3aGVuIG1ha2luZyBzZWN1cmUgY29ubmVjdGlvbnMsIHlvdSBhcmUgcHJvbXB0ZWQgaW50 ZXJhY3RpdmVseQotICAgZm9yIGNlcnRhaW4gaW5mb3JtYXRpb24gb3IgcGVybWlzc2lvbiB0byBw cm9jZWVkLiBUaGVzZSBwcm9tcHRzIGNhbgotICAgc3RvcCBhbiBhdXRvbWF0ZWQgcHJvY2VkdXJl LiBUbyBhdm9pZCB0aGVtLCB5b3UgbXVzdCBnaXZlIHRoZQotICAgYXBwcm9wcmlhdGUgY29tbWFu ZHMgdG8gZGlzYWJsZSB0aGVtLCBhbmQvb3Igc3VwcGx5IHRoZSBwcm9tcHRlZC1mb3IKLSAgIGlu Zm9ybWF0aW9uIGJlZm9yZWhhbmQuIEhlcmUgYXJlIGEgZmV3IGhpbnRzOgotCi0gICAgICogTWFr ZSBzdXJlIHRoYXQgU0VUIFRBS0UgRVJST1IgYW5kIFNFVCBNQUNSTyBFUlJPUiBhcmUgYm90aCBP RkYuCi0gICAgICAgVGhpcyBpcyB0aGUgZGVmYXVsdCwgYnV0IGluIGNhc2UgeW91IGhhdmUgc2V0 IGVpdGhlciBvbmUgb2YgdGhlc2UKLSAgICAgICBPTiBpbiB5b3VyIHNjcmlwdCBvciBpbml0aWFs aXphdGlvbiBmaWxlLCB0aGlzIG1ha2VzIHRoZSBzY3JpcHQKLSAgICAgICBoYWx0IG9uIGFueSBr aW5kIG9mIGVycm9yLiBOb3JtYWxseSB5b3Ugd291bGQgd2FudCB0byBjaGVjayBlYWNoCi0gICAg ICAgb3BlcmF0aW9uIGZvciBzdWNjZXNzIG9yIGZhaWx1cmUgYW5kIHRha2UgYXBwcm9wcmlhdGUg YWN0aW9uLgotICAgICAqIE9uIFNTTCBhbmQgVExTIGNvbm5lY3Rpb25zLCB5b3UgbWF5IGJlIGFz a2VkIHdoZXRoZXIgaXQgaXMgT0sgdG8KLSAgICAgICBwcm9jZWVkIHdpdGggYSBjb25uZWN0aW9u IHRvIHNlcnZlciB0aGF0IHByZXNlbnRzIGEgc2VsZi1zaWduZWQKLSAgICAgICBjZXJ0aWZpY2F0 ZS4gWW91IGNhbiB1c2UgdGhlIFNFVCBBVVRIRU5USUNBVElPTiBTU0wgKG9yIFRMUykgVkVSSUZZ Ci0gICAgICAgb3IgU0VUIEFVVEggU1NMIChvciBUTFMpIENFUlRTLU9LIGNvbW1hbmRzIHRvIGF2 b2lkIHRoaXMgcHJvbXB0IGJ5Ci0gICAgICAgbm90IHJlcXVlc3RpbmcgYSBjZXJ0aWZpY2F0ZSBm cm9tIHRoZSBwZWVyLgotICAgICAqIChNb3JlIHRvIGJlIGFkZGVkLi4uKQotCi0gICBbIFszNTld VG9wIF0gWyBbMzYwXUZUUCBUb3AgXSBbIFszNjFdRlRQIFNjcmlwdCBUdXRvcmlhbCBdIFsKLSAg IFszNjJdQy1LZXJtaXQgSG9tZSBdIFsgWzM2M11LZXJtaXQgSG9tZSBdCi0KLTMuMTEuIEFkdmFu Y2VkIEZUUCBQcm90b2NvbCBGZWF0dXJlcwotCi0gICBUaGUgcmVtYWluZGVyIG9mIHRoZSBGVFAg ZG9jdW1lbnRhdGlvbiAodGhyb3VnaCB0aGUgZW5kIG9mIFNlY3Rpb24gMykKLSAgIGlzIG5ldyB0 byBDLUtlcm1pdCA4LjAuMjA2LCBidXQgd2UgbGVhdmUgaXQgaW4gYmxhY2sgdG8gcHJldmVudAot ICAgaGVhZGFjaGVzLiBFeGNlcHQgZm9yIHRpdGxlcy4KLSAgICAgKiBbMzY0XVRFUk1JTk9MT0dZ Ci0gICAgICogWzM2NV1GRUFUVVJFIE5FR09USUFUSU9OCi0gICAgICogWzM2Nl1VU0lORyBNR0VU OiBOTFNUIFZFUlNVUyBNTFNECi0gICAgICogWzM2N11FWEFNUExFUwotICAgICAqIFszNjhdUkVG RVJFTkNFUwotCi0gICBUaGUgbmV3IHJlbGVhc2VzIG9mIFszNjldQy1LZXJtaXQgKDguMC4yMDYp IGFuZCBbMzcwXUtlcm1pdCA5NSAoMi4xKQotICAgc3VwcG9ydCBuZXcgRlRQIHByb3RvY29sIGZl YXR1cmVzIGZyb20gUkZDIDIzODkgYXMgd2VsbCBhcyBtb3N0IG9mCi0gICB3aGF0J3MgaW4gdGhl IEVseiBhbmQgSGV0aG1vbiBFeHRlbnNpb25zIHRvIEZUUCBJbnRlcm5ldCBEcmFmdCAoc2VlCi0g ICBbMzcxXVJlZmVyZW5jZXMpLiBTb21lIG9mIHRoZXNlIGZlYXR1cmVzLCBzdWNoIGFzIFNJWkUg KHJlcXVlc3QgYQotICAgZmlsZSdzIHNpemUpLCBNRFRNIChyZXF1ZXN0IGZpbGUncyBtb2RpZmlj YXRpb24gdGltZSksIGFuZCBSRVNUCi0gICAocmVzdGFydCBpbnRlcnJ1cHRlZCB0cmFuc2Zlcikg aGF2ZSBiZWVuIHdpZGVseSBpbXBsZW1lbnRlZCBpbiBGVFAKLSAgIGNsaWVudHMgYW5kIHNlcnZl cnMgZm9yIHllYXJzIChhcyB3ZWxsIGFzIGluIHRoZSBpbml0aWFsIHJlbGVhc2Ugb2YgdGhlCi0g ICBLZXJtaXQgRlRQIGNsaWVudHMpLiBPdGhlcnMgc3VjaCBhcyBGRUFUIGFuZCBNTFNEIGFyZSBy YXJlbHkgc2VlbiBhbmQKLSAgIGFyZSBuZXcgdG8gdGhlIHVwY29taW5nIEtlcm1pdCByZWxlYXNl cy4gVFZGUyAoVHJpdmlhbCBWaXJ0dWFsIEZpbGUKLSAgIFN0b3JlKSBpcyBzdXBwb3J0ZWQgaW1w bGljaXRseSwgYW5kIHRoZSBVVEYtOCBjaGFyYWN0ZXItc2V0IGlzIGFscmVhZHkKLSAgIGZ1bGx5 IHN1cHBvcnRlZCBhdCB0aGUgcHJvdG9jb2wgYW5kIGRhdGEtaW50ZXJjaGFuZ2UgbGV2ZWwuCi0K LSAgIEZvciBLZXJtaXQgdXNlcnMsIHRoZSBtYWluIGJlbmVmaXQgb2YgdGhlIG5ldyBGVFAgcHJv dG9jb2wgZXh0ZW5zaW9ucwotICAgaXMgdGhlIGFiaWxpdHkgdG8gZG8gcmVjdXJzaXZlIGRvd25s b2Fkcy4gQnV0IHRoZSBleHRlbnNpb25zIGFsc28KLSAgIGludHJvZHVjZSBjb21wbGljYXRpb25z IGFuZCB0cmFkZW9mZnMgdGhhdCB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mLiBPZgotICAgY291cnNl IEtlcm1pdCB0cmllcyB0byAiZG8gdGhlIHJpZ2h0IHRoaW5nIiBhdXRvbWF0aWNhbGx5IGluIGV2 ZXJ5IGNhc2UKLSAgIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gQnV0IChhcyBub3RlZCBs YXRlcikgc29tZSBjYXNlcyBhcmUKLSAgIGluaGVyZW50bHkgYW1iaWd1b3VzIGFuZC9vciBjYW4g cmVzdWx0IGluIG5hc3R5IHN1cnByaXNlcywgYW5kIGZvcgotICAgdGhvc2Ugc2l0dWF0aW9ucyBu ZXcgY29tbWFuZHMgYW5kIHN3aXRjaGVzIGFyZSBhdmFpbGFibGUgdG8gZ2l2ZSB5b3UKLSAgIHBy ZWNpc2UgY29udHJvbCBvdmVyIEtlcm1pdCdzIGJlaGF2aW9yLCBpbiBjYXNlIHRoZSBkZWZhdWx0 cyBkb24ndAotICAgcHJvZHVjZSB0aGUgZGVzaXJlZCByZXN1bHRzLgotCi0zLjExLjEuIFRlcm1p bm9sb2d5Ci0KLSAgIENvbW1hbmQtbGluZSBGVFAgY2xpZW50cyBzdWNoIGFzIEtlcm1pdCAoYXMg d2VsbCBhcyB0aGUgdHJhZGl0aW9uYWwgRlRQCi0gICBwcm9ncmFtcyBmb3VuZCBvbiBVbml4LCBW TVMsIC4uLiwgZXZlbiBXaW5kb3dzKSBoYXZlIGNvbW1hbmRzIGxpa2UgUFVULAotICAgTVBVVCwg R0VULCBNR0VULCBhbmQgQllFLCB3aGljaCB0aGV5IGNvbnZlcnQgaW50byB6ZXJvIG9yIG1vcmUg RlRQCi0gICBwcm90b2NvbCBjb21tYW5kcywgc3VjaCBhcyBOTFNULCBSRVRSLCBRVUlULiBGb3Ig Y2xhcml0eSwgd2UnbGwgdXNlCi0gICAiY29tbWFuZCIgdG8gcmVmZXIgdG8gY29tbWFuZHMgZ2l2 ZW4gYnkgdGhlIHVzZXIgdG8gdGhlIEZUUCBjbGllbnQsIGFuZAotICAgImRpcmVjdGl2ZSIgZm9y IEZUUCBwcm90b2NvbCBjb21tYW5kcyBzZW50IGJ5IHRoZSBGVFAgY2xpZW50IHRvIHRoZSBGVFAK LSAgIHNlcnZlci4KLQotMy4xMS4yLiBGZWF0dXJlIE5lZ290aWF0aW9uCi0KLSAgIE5ldyBGVFAg cHJvdG9jb2wgZmVhdHVyZXMgYXJlIG5lZ290aWF0ZWQgYnkgdGhlIGNsaWVudCBzZW5kaW5nIGEg RkVBVAotICAgZGlyZWN0aXZlIGFuZCB0aGUgc2VydmVyIHJlc3BvbmRpbmcgd2l0aCBhIGxpc3Qg b2YgKG5ldykgZmVhdHVyZXMgaXQKLSAgIHN1cHBvcnRzLCBvciBlbHNlIHdpdGggYW4gZXJyb3Ig aW5kaWNhdGlvbiBpZiBpdCBkb2VzIG5vdCBzdXBwb3J0IHRoZQotICAgRkVBVCBkaXJlY3RpdmUg YXQgYWxsLCBpbiB3aGljaCBjYXNlIHRoZSBjbGllbnQgaGFzIHRvIGd1ZXNzIHdoaWNoIG5ldwot ICAgZmVhdHVyZXMgaXQgc3VwcG9ydHMgKEtlcm1pdCBndWVzc2VzIHRoYXQgaXQgc3VwcG9ydHMg U0laRSBhbmQgTURUTSBidXQKLSAgIG5vdCBNTFNUKS4gTm90ZSB0aGF0IHRoZSBNTFNUIGZlYXR1 cmUgaW5jbHVkZXMgTUxTRCwgd2hpY2ggaXMgbm90Ci0gICBsaXN0ZWQgc2VwYXJhdGVseSBhcyBh IGZlYXR1cmUuCi0KLSAgIEd1ZXNzaW5nIGlzIG5pY2Ugd2hlbiBpdCB3b3JrcywgYnV0IHNvbWV0 aW1lcyBpdCBkb2Vzbid0LCBhbmQgc29tZSBGVFAKLSAgIHNlcnZlcnMgYmVjb21lIGNvbmZ1c2Vk IHdoZW4geW91IHNlbmQgdGhlbSBhIGRpcmVjdGl2ZSB0aGV5IGRvbid0Ci0gICB1bmRlcnN0YW5k LCBvciB0aGV5IGRvIHNvbWV0aGluZyB5b3UgZGlkbid0IHdhbnQsIHNvbWV0aW1lcyB0byB0aGUK LSAgIHBvaW50IG9mIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24uIEZvciB0aGlzIHJlYXNvbiwgS2Vy bWl0IGxldHMgeW91Ci0gICBvdmVycmlkZSBkZWZhdWx0IG9yIG5lZ290aWF0ZWQgZmVhdHVyZXMg d2l0aCB0aGUgZm9sbG93aW5nIG5ldwotICAgY29tbWFuZHM6Ci0KLSAgIEZUUCB7IEVOQUJMRSwg RElTQUJMRSB9IEZFQVQKLSAgICAgICAgICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhdXRvbWF0 aWMgc2VuZGluZyBvZiBhIEZFQVQgZGlyZWN0aXZlCi0gICAgICAgICAgdXBvbiBjb25uZWN0aW9u IHRvIGFuIEZUUCBzZXJ2ZXIuIE5vdGUgdGhhdCBGVFAgWyBPUEVOIF0gL05PSU5JVAotICAgICAg ICAgICAgYWxzbyBpbmhpYml0cyBzZW5kaW5nIHRoZSBGRUFUIGRpcmVjdGl2ZSAoYW5kIHNldmVy YWwgb3RoZXJzKQotICAgICAgICAgIGZvciB0aGUgY29ubmVjdGlvbiBiZWluZyBPUEVOJ2QsIGJ1 dCB3aXRob3V0IG5lY2Vzc2FyaWx5Ci0gICAgICAgICAgZGlzYWJsaW5nIEZFQVQgZm9yIHN1YnNl cXVlbnQgY29ubmVjdGlvbnMgaW4gdGhlIHNhbWUgS2VybWl0Ci0gICAgICAgICAgaW5zdGFuY2Uu IEZFQVQgaXMgRU5BQkxFRCBieSBkZWZhdWx0LCBpbiB3aGljaCBjYXNlIG1hbnkgRlRQCi0gICAg ICAgICAgc2VydmVycyBhcmUgbGlrZWx5IHRvIHJlcGx5OgotCi01MDAgJ0ZFQVQnOiBjb21tYW5k IG5vdCB1bmRlcnN0b29kCi0KLSAgICAgICAgICB3aGljaCBpcyBub3JtYWxseSBoYXJtbGVzcyAo YnV0IHlvdSBuZXZlciBrbm93KS4gKEluIEMtS2VybWl0Ci0gICAgICAgICAgOC4wLjIwOCwgdGhp cyBlcnJvciBtZXNzYWdlIGlzIHN1cHByZXNzZWQgdW5sZXNzIHlvdSBTRVQgRlRQCi0gICAgICAg ICAgREVCVUcgT04uKQotCi0gICBGVFAgRU5BQkxFIHsgTURUTSwgTUxTVCwgU0laRSB9Ci0gICAg ICAgICAgRW5hYmxlcyB0aGUgZ2l2ZW4gZGlyZWN0aXZlIGZvciBpbXBsaWNpdCB1c2UgYnkgdGhl IEZUUCBHRVQgYW5kCi0gICAgICAgICAgTUdFVCBjb21tYW5kcyBpbiBjYXNlIGl0IGhhcyBiZWVu IGRpc2FibGVkIG9yIGVycm9uZW91c2x5Ci0gICAgICAgICAgb21pdHRlZCBieSB0aGUgc2VydmVy IGluIGl0cyBGRUFUIHJlc3BvbnNlLiBOb3RlOiBNTFNEIGNhbiBiZQotICAgICAgICAgIHVzZWQg aW4gdGhlIEZUUCBFTkFCTEUgYW5kIERJU0FCTEUgY29tbWFuZHMgYXMgYSBzeW5vbnltIGZvcgot ICAgICAgICAgIE1MU1QuIFlPVSBNVVNUIEdJVkUgVEhJUyBDT01NQU5EIEFGVEVSIE1BS0lORyBU SEUgRlRQCi0gICAgICAgICAgQ09OTkVDVElPTi4KLQotICAgRlRQIERJU0FCTEUgeyBNRFRNLCBN TFNULCBTSVpFIH0KLSAgICAgICAgICBEaXNhYmxlcyBpbXBsaWNpdCB1c2Ugb2YgdGhlIGdpdmVu IGRpcmVjdGl2ZSBieSBHRVQgb3IgTUdFVCBpbgotICAgICAgICAgIGNhc2UgaXQgY2F1c2VzIHBy b2JsZW1zOyBmb3IgZXhhbXBsZSwgYmVjYXVzZSBpdCBtYWtlcyBtdWx0aWZpbGUKLSAgICAgICAg ICBkb3dubG9hZHMgdGFrZSB0b28gbG9uZyBvciB0aGUgc2VydmVyIGFubm91bmNlcyBpdCBlcnJv bmVvdXNseQotICAgICAgICAgIG9yIG1pc2ltcGxlbWVudHMgaXQuIFVzZSBESVNBQkxFIEZFQVQg YmVmb3JlIG1ha2luZyBhIGNvbm5lY3Rpb24KLSAgICAgICAgICB0byBwcmV2ZW50IEtlcm1pdCBm cm9tIHNlbmRpbmcgdGhlIEZFQVQgZGlyZWN0aXZlIGFzIHBhcnQgb2YgaXRzCi0gICAgICAgICAg aW5pdGlhbCBzZXF1ZW5jZS4gTm90ZSB0aGF0IGRpc2FibGluZyBGRUFULCBTSVpFLCBvciBNRFRN IGRvZXMKLSAgICAgICAgICBub3QgcHJldmVudCB5b3UgZnJvbSBleGVjdXRpbmcgZXhwbGljaXQg RlRQIEZFQVRVUkVTLCBGVFAgU0laRSwKLSAgICAgICAgICBvciBGVFAgTU9EVElNRSBjb21tYW5k cy4gQWxzbyBub3RlIHRoYXQgZGlzYWJsaW5nIFNJWkUgcHJldmVudHMKLSAgICAgICAgICBQVVQg L1JFU1RBUlQgKHJlY292ZXJ5IG9mIGludGVycnVwdGVkIHVwbG9hZHMpIGZyb20gd29ya2luZy4g WU9VCi0gICAgICAgICAgTVVTVCBHSVZFIFRISVMgQ09NTUFORCBBRlRFUiBNQUtJTkcgVEhFIEZU UCBDT05ORUNUSU9OLgotCi0gICBUbyBlbmFibGUgb3IgZGlzYWJsZSBtb3JlIHRoYW4gb25lIGZl YXR1cmUsIHVzZSBtdWx0aXBsZSBGVFAgRU5BQkxFIG9yCi0gICBGVFAgRElTQUJMRSBjb21tYW5k cy4gVGhlIFNIT1cgRlRQIGNvbW1hbmQgc2hvd3Mgd2hpY2ggZmVhdHVyZXMgYXJlCi0gICBjdXJy ZW50bHkgZW5hYmxlZCBhbmQgZGlzYWJsZWQuCi0KLSAgIEZUUCBGRUFUVVJFUwotICAgICAgICAg IFRoaXMgY29tbWFuZCBzZW5kcyBhIEZFQVQgZGlyZWN0aXZlIHRvIHRoZSBzZXJ2ZXIuIEluIGNh c2UgeW91Ci0gICAgICAgICAgaGF2ZSBiZWVuIGRpc2FibGluZyBhbmQgZW5hYmxpbmcgZGlmZmVy ZW50IGZlYXR1cmVzLCB0aGlzCi0gICAgICAgICAgcmVzeW5jaHJvbml6ZXMgS2VybWl0J3MgZmVh dHVyZSBsaXN0IHdpdGggdGhlIHNlcnZlcidzLiBJZiB0aGUKLSAgICAgICAgICBzZXJ2ZXIgZG9l cyBub3Qgc3VwcG9ydCB0aGUgRkVBVCBkaXJlY3RpdmUsIEtlcm1pdCdzIGZlYXR1cmUKLSAgICAg ICAgICBsaXN0IGlzIG5vdCBjaGFuZ2VkLgotCi0gICBGVFAgT1BUSU9OUyBkaXJlY3RpdmUKLSAg ICAgICAgICBJbmZvcm1hdGlvbmFsIG9ubHk6IHRoZSBzZXJ2ZXIgdGVsbHMgd2hhdCBvcHRpb25z LCBpZiBhbnksIGl0Ci0gICAgICAgICAgc3VwcG9ydHMgZm9yIHRoZSBnaXZlbiBkaXJlY3RpdmUs IGUuZy4gTUxTVC4gRmFpbHMgaWYgdGhlIHNlcnZlcgotICAgICAgICAgIGRvZXMgbm90IHN1cHBv cnQgdGhlIE9QVFMgZGlyZWN0aXZlIG9yIGlmIHRoZSBkaXJlY3RpdmUgZm9yCi0gICAgICAgICAg d2hpY2ggb3B0aW9ucyBhcmUgcmVxdWVzdGVkIGlzIG5vdCB2YWxpZC4gVGhlIGRpcmVjdGl2ZSBp cwotICAgICAgICAgIGNhc2UtaW5zZW5zaXRpdmUuCi0KLSAgIEZUUCBTSVpFIGZpbGVuYW1lCi0g ICAgICAgICAgU2VuZHMgYSBTSVpFIGRpcmVjdGl2ZSB0byB0aGUgc2VydmVyIGZvciB0aGUgZ2l2 ZW4gZmlsZS4gVGhlCi0gICAgICAgICAgZmlsZW5hbWUgbXVzdCBub3QgY29udGFpbiB3aWxkY2Fy ZHMuIFRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCBhbgotICAgICAgICAgIGVycm9yIGlmIHRoZSBm aWxlIGNhbid0IGJlIGZvdW5kLCBpcyBub3QgYWNjZXNzaWJsZSwgb3IgdGhlIFNJWkUKLSAgICAg ICAgICBkaXJlY3RpdmUgaXMgbm90IHN1cHBvcnRlZCwgb3RoZXJ3aXNlIHdpdGggdGhlIGxlbmd0 aCBvZiB0aGUKLSAgICAgICAgICBmaWxlIGluIGJ5dGVzLCB3aGljaCBLZXJtaXQgZGlzcGxheXMg YW5kIGFsc28gbWFrZXMgYXZhaWxhYmxlIHRvCi0gICAgICAgICAgeW91IGluIGl0cyBcdihmdHBf bWVzc2FnZSkgdmFyaWFibGUuIElmIHRoZSBkaXJlY3RpdmUgaXMKLSAgICAgICAgICBzdWNjZXNz ZnVsLCBLZXJtaXQgKHJlLSllbmFibGVzIGl0IGZvciBpbnRlcm5hbCB1c2UgYnkgdGhlIEdFVAot ICAgICAgICAgIGFuZCBNR0VUIGRpcmVjdGl2ZXMgb24gdGhpcyBjb25uZWN0aW9uLgotCi0gICBG VFAgTU9EVElNRSBmaWxlbmFtZQotICAgICAgICAgIFdvcmtzIGp1c3QgbGlrZSB0aGUgU0laRSBk aXJlY3RpdmUgZXhjZXB0IGl0IHNlbmRzIGFuIE1EVE0KLSAgICAgICAgICBkaXJlY3RpdmUuIFVw b24gc3VjY2VzcywgdGhlIHNlcnZlciBzZW5kcyBtb2RpZmljYXRpb24gZGF0ZS10aW1lCi0gICAg ICAgICAgc3RyaW5nLCB3aGljaCBLZXJtaXQgaW50ZXJwcmV0cyBmb3IgeW91IGFuZCBhbHNvIG1h a2VzIGF2YWlsYWJsZQotICAgICAgICAgIGluIGl0cyBcdihmdHBfbWVzc2FnZSkgdmFyaWFibGUu Ci0KLSAgIFdoZW5ldmVyIGEgU0laRSBvciBNRFRNIGRpcmVjdGl2ZSBpcyBzZW50IGltcGxpY2l0 bHkgYW5kIHJlamVjdGVkIGJ5Ci0gICB0aGUgc2VydmVyIGJlY2F1c2UgaXQgaXMgdW5rbm93biwg S2VybWl0IGF1dG9tYXRpY2FsbHkgZGlzYWJsZXMgaXQuCi0KLTMuMTEuMy4gVXNpbmcgTUdFVDog TkxTVCB2ZXJzdXMgTUxTRAotCi0gICBXaGVuIHlvdSBnaXZlIGFuIE1HRVQgY29tbWFuZCB0byBh biBGVFAgY2xpZW50LCBpdCBzZW5kcyBhIHJlcXVlc3QgdG8KLSAgIHRoZSBGVFAgc2VydmVyIGZv ciBhIGxpc3Qgb2YgZmlsZXMsIGFuZCB0aGVuIHVwb24gc3VjY2Vzc2Z1bCByZWNlaXB0IG9mCi0g ICB0aGUgbGlzdCwgZ29lcyB0aHJvdWdoIGl0IGFuZCBpc3N1ZXMgYSBSRVRSIChyZXRyaWV2ZSkg ZGlyZWN0aXZlIGZvcgotICAgZWFjaCBmaWxlIG9uIHRoZSBsaXN0IChvciBwb3NzaWJseSBvbmx5 IGZvciBzZWxlY3RlZCBmaWxlcykuCi0KLSAgIFdpdGggdGhlIG5ldyBGVFAgcHJvdG9jb2wgZXh0 ZW5zaW9ucywgbm93IHRoZXJlIGFyZSB0d28gd2F5cyB0byBnZXQgdGhlCi0gICBsaXN0IG9mIGZp bGVzOiB0aGUgTkxTVCBkaXJlY3RpdmUsIHdoaWNoIGhhcyBiZWVuIHBhcnQgb2YgRlRQIHByb3Rv Y29sCi0gICBzaW5jZSB0aGUgYmVnaW5uaW5nLCBhbmQgdGhlIG5ldyBNTFNEIGRpcmVjdGl2ZSwg d2hpY2ggaXMgbmV3IGFuZCBub3QKLSAgIHlldCB3aWRlbHkgaW1wbGVtZW50ZWQuIFdoZW4gTkxT VCBpcyB1c2VkIGFuZCB5b3UgZ2l2ZSBhIGNvbW1hbmQgbGlrZQotICAgIm1nZXQgKi50eHQiLCB0 aGUgRlRQIGNsaWVudCBzZW5kczoKLQotTkxTVCAqLnR4dAotCi0gICBhbmQgdGhlIHNlcnZlciBz ZW5kcyBiYWNrIGEgbGlzdCBvZiB0aGUgZmlsZXMgd2hvc2UgbmFtZXMgbWF0Y2gsIGUuZy4KLQot Zm9vLnR4dAotYmFyLnR4dAotYmF6LnR4dAotCi0gICBUaGVuIHdoZW4gZG93bmxvYWRpbmcgZWFj aCBmaWxlLCB0aGUgY2xpZW50IHNlbmRzIFNJWkUgKGlmIGl0IHdhbnRzCi0gICBoYXZlIGEgcGVy Y2VudC1kb25lIGRpc3BsYXkpIGFuZCBNRFRNIChpZiBpdCB3YW50cyB0byBzZXQgdGhlCi0gICBk b3dubG9hZGVkIGZpbGUncyB0aW1lc3RhbXAgdG8gbWF0Y2ggdGhhdCBvZiB0aGUgb3JpZ2luYWwp LCBhcyB3ZWxsIGFzCi0gICBSRVRSICh0byByZXRyaWV2ZSB0aGUgZmlsZSkuCi0KLSAgIEJ1dCB3 aGVuIE1MU0QgaXMgdXNlZCwgdGhlIGNsaWVudCBpcyBub3Qgc3VwcG9zZWQgdG8gc2VuZCB0aGUg ZmlsZW5hbWUKLSAgIG9yIHdpbGRjYXJkIHRvIHRoZSBzZXJ2ZXI7IGluc3RlYWQgaXQgc2VuZHMg YW4gTUxTRCBkaXJlY3RpdmUgd2l0aCBubwotICAgYXJndW1lbnQgKG9yIHRoZSBuYW1lIG9mIGEg ZGlyZWN0b3J5KSwgYW5kIHRoZSBzZXJ2ZXIgc2VuZHMgYmFjayBhIGxpc3QKLSAgIG9mIGFsbCB0 aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgb3IgZ2l2ZW4gZGlyZWN0b3J5OyB0aGVuIHRoZSBjbGll bnQKLSAgIGdvZXMgdGhyb3VnaCB0aGUgbGlzdCBhbmQgY2hlY2tzIGVhY2ggZmlsZSB0byBzZWUg aWYgaXQgbWF0Y2hlcyB0aGUKLSAgIGdpdmVuIHBhdHRlcm4sIHRoZSByYXRpb25hbGUgYmVpbmcg dGhhdCB0aGUgdXNlciBrbm93cyBvbmx5IHRoZSBsb2NhbAotICAgY29udmVudGlvbnMgZm9yIHdp bGRjYXJkcyBhbmQgbm90IG5lY2Vzc2FyaWx5IHRoZSBzZXJ2ZXIncyBjb252ZW50aW9ucy4KLSAg IFNvIHdpdGggTkxTVCB0aGUgc2VydmVyIGludGVycHJldHMgd2lsZGNhcmRzOyB3aXRoIE1MU0Qg dGhlIGNsaWVudAotICAgZG9lcy4KLQotICAgICBUaGUgaW50ZXJwcmV0YXRpb24gb2YgTkxTVCB3 aWxkY2FyZHMgYnkgdGhlIHNlcnZlciBpcyBub3QKLSAgICAgbmVjZXNzYXJpbHkgcmVxdWlyZWQg b3IgZXZlbiBlbnZpc2lvbmVkIGJ5IHRoZSBGVFAgcHJvdG9jb2wKLSAgICAgZGVmaW5pdGlvbiAo UkZDIDk1OSksIGJ1dCBpbiBwcmFjdGljZSBtb3N0IGNsaWVudHMgYW5kIHNlcnZlcnMgd29yawot ICAgICB0aGlzIHdheS4KLQotICAgVGhlIHByaW5jaXBhbCBhZHZhbnRhZ2Ugb2YgTUxTRCBpcyB0 aGF0IGluc3RlYWQgb2Ygc2VuZGluZyBiYWNrIGEKLSAgIHNpbXBsZSBsaXN0IG9mIGZpbGVuYW1l cywgaXQgc2VuZHMgYmFjayBhIGtpbmQgb2YgZGF0YWJhc2UgaW4gd2hpY2gKLSAgIGVhY2ggZW50 cnkgY29udGFpbnMgYSBmaWxlbmFtZSB0b2dldGhlciB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRo ZQotICAgZmlsZTogdHlwZSwgc2l6ZSwgdGltZXN0YW1wLCBhbmQgc28gb247IGZvciBleGFtcGxl OgotCi1zaXplPTA7dHlwZT1kaXI7cGVybT1lbDttb2RpZnk9MjAwMjA0MDkxOTE1MzA7IGJpbgot c2l6ZT0zOTE5MzEyO3R5cGU9ZmlsZTtwZXJtPXI7bW9kaWZ5PTIwMDAwMzEwMTQwNDAwOyBiYXIu dHh0Ci1zaXplPTY2ODYxNzY7dHlwZT1maWxlO3Blcm09cjttb2RpZnk9MjAwMDEyMTUxODEwMDA7 IGJhei50eHQKLXNpemU9MzgyMDA5Mjt0eXBlPWZpbGU7cGVybT1yO21vZGlmeT0yMDAwMDMxMDE0 MDMwMDsgZm9vLnR4dAotc2l6ZT0yNzQzOTt0eXBlPWZpbGU7cGVybT1yO21vZGlmeT0yMDAyMDky MzE1MTMxMjsgZm9vLnppcAotKGV0YyBldGMuLi4pCi0KLSAgIChJZiB0aGUgZm9ybWF0IG9mIHRo ZSBmaWxlIGxpc3Qgd2VyZSB0aGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gTkxTVAotICAgYW5k IE1MU0QsIHRoZSBkaXNjdXNzaW9uIHdvdWxkIGJlIGZpbmlzaGVkOiBpdCB3b3VsZCBhbHdheXMg YmUgYmV0dGVyCi0gICB0byB1c2UgTUxTRCB3aGVuIGF2YWlsYWJsZSwgYW5kIHRoZSBNR0VUIHVz ZXIgaW50ZXJmYWNlIHdvdWxkIG5lZWQgbm8KLSAgIGNoYW5nZXMuIEJ1dCB0aGVyZSdzIGEgbG90 IG1vcmUgdG8gTUxTRCB0aGFuIHRoZSBmaWxlLWxpc3QgZm9ybWF0OyByZWFkCi0gICBvbi4uLikK LQotICAgVGhlIGNsaWVudCBsZWFybnMgd2hldGhlciB0aGUgc2VydmVyIHN1cHBvcnRzIE1MU0Qg aW4gRkVBVCBleGNoYW5nZS4KLSAgIEJ1dCB0aGUgZmFjdCB0aGF0IHRoZSBzZXJ2ZXIgc3VwcG9y dHMgTUxTRCBkb2Vzbid0IG1lYW4gdGhlIGNsaWVudAotICAgc2hvdWxkIGFsd2F5cyB1c2UgaXQu IEl0IGlzIGJldHRlciB0byB1c2UgTUxTRDoKLQotICAgICAqIE9uIGNvbm5lY3Rpb25zIHdoZXJl IHRoZSBzZXJ2ZXIgaW1wb3NlcyBhIHRpbWUgcGVuYWx0eSBmb3IgZXZlcnkKLSAgICAgICBjb21t YW5kLCBlLmcuIHRoZSBSZWQgSGF0IFJhd2hpZGUgc2VydmVyLiBXaXRoIE1MU0QsIHRoZSBjbGll bnQKLSAgICAgICBuZWVkcyB0byBzZW5kIG9ubHkgb25lIGNvbW1hbmQgKFJFVFIpIHBlciBmaWxl LCB3aGVyZWFzIE5MU1QKLSAgICAgICByZXF1aXJlcyB0aHJlZSAoU0laRSwgUkVUUiwgYW5kIE1E VE0pLiBTdXBwb3NlIHRoZXJlIGlzIGEgMzAtc2Vjb25kCi0gICAgICAgZGVsYXkgZm9yIGVhY2gg Y29tbWFuZCBhbmQgMTAwMCBmaWxlcyBhcmUgdG8gYmUgZmV0Y2hlZDsgaW4gdGhhdAotICAgICAg IGNhc2UsIE1MU0Qgc2F2ZXMgNjAsMDAwIHNlY29uZHMgPSAxMDAwIG1pbnV0ZXMgPSAxNiBob3Vy cyBhbmQgNDAKLSAgICAgICBtaW51dGVzLgotICAgICAqIEZvciByZWN1cnNpdmUgZG93bmxvYWRz IHNpbmNlIHRoZXJlIGlzIG5vIGRlcGVuZGFibGUgd2F5IHRvCi0gICAgICAgZG93bmxvYWQgZGly ZWN0b3J5IHRyZWVzIHdpdGggTkxTVC4KLQotICAgQnV0IGl0IGlzIGJldHRlciB0byB1c2UgTkxT VDoKLQotICAgICAqIElmIHlvdSB3YW50IG9ubHkgYSBjb3VwbGUgc2hvcnQgZmlsZXMgb3V0IG9m IGEgbGFyZ2UgZGlyZWN0b3J5LiBJbgotICAgICAgIHRoaXMgY2FzZSwgTkxTVCBpcyB0aGUgYmV0 dGVyIGNob2ljZSBzaW5jZSB0aGUgc2VydmVyIHNlbmRzIGEgbGlzdAotICAgICAgIG9mIG9ubHkg dGhlIGZpbGVzIHlvdSB3YW50LCBub3QgYSBsaXN0IG9mIChzYXkpIGEgbWlsbGlvbiBmaWxlcywK LSAgICAgICB3aGljaCBjYW4gbWFrZSBhIGJpZyBkaWZmZXJlbmNlIG9uIHNsb3cgY29ubmVjdGlv bnMuIEZvciBleGFtcGxlLAotICAgICAgIHN1cHBvc2UgeW91ciB3aWxkY2FyZCBtYXRjaGVzIHRo cmVlIGZpbGVzIG9mIDFLIGVhY2gsIGJ1dCB0aGUKLSAgICAgICBtaWxsaW9uLWZpbGUgbGlzdGlu ZyBpcyA4ME1CIGxvbmcsIGFuZCB5b3VyIGNvbm5lY3Rpb24gaXMgdGhyb3VnaCBhCi0gICAgICAg bW9kZW0uIFRoZSBvdmVyaGVhZCBvZiB1c2luZyBNTFNEIGlzIHByYWN0aWNhbGx5IGluZmluaXRl LgotICAgICAqIElmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgd2lsZGNhcmRpbmcgZmVhdHVyZXMgbm90 IGtub3duIHRvIHRoZQotICAgICAgIGNsaWVudCwgYnV0IHRoYXQgY2FuIGJlIHVzZWQgdG8gYWNo aWV2ZSBkZXNpcmFibGUgZWZmZWN0cyBvdGhlcndpc2UKLSAgICAgICB1bm9idGFpbmFibGUsIHN1 Y2ggYXMgIltkaXIuLi5dKi50eHQiIGluIFZNUyBvciBBT1MvVlMgImV4Y2VwdCIKLSAgICAgICBj bGF1c2VzLgotICAgICAqIElmIHlvdSBoYXZlIGJlZW4gZ2l2ZW4gYSB3aWxkY2FyZCBzdHJpbmcg YnkgYW4gRlRQIHNpdGUKLSAgICAgICBhZG1pbmlzdHJhdG9yIGZvciBmZXRjaGluZyBhIHNwZWNp ZmljIGdyb3VwIG9mIGZpbGVzIG91dCBvZiBhCi0gICAgICAgbGFyZ2VyIGRpcmVjdG9yeSwgZS5n LiAibWdldCBja1tjdXddKi5bY3doXSBtYWtlZmlsZSIsIHRoYXQgaXMKLSAgICAgICBleHBlY3Rl ZCB0byB3b3JrIHdpdGggYW55IGNsaWVudCAoYW4gRlRQIHNpdGUgYWRtaW5pc3RyYXRvciBjYW4n dAotICAgICAgIGJlIGV4cGVjdGVkIHRvIGtub3cgdGhlIHdpbGRjYXJkIHN5bnRheCBvZiBldmVy eSBGVFAgY2xpZW50KS4KLQotICAgQnV0IHdoZW4gdXNpbmcgTUxTRCB0aGVyZSBhcmUgY29tcGxp Y2F0aW9uczoKLQotICAgICAqIE1MU0Qgd2FudHMgZWl0aGVyIGEgYmxhbmsgYXJndW1lbnQgKG1l YW5pbmcgdGhlIGN1cnJlbnQgZGlyZWN0b3J5KQotICAgICAgIG9yIGVsc2UgdGhlIG5hbWUgb2Yg YSBzcGVjaWZpYyBkaXJlY3RvcnkuIFRoZSBjbGllbnQgbXVzdCBub3Qgc2VuZAotICAgICAgIGl0 IGEgd2lsZGNhcmQgb3IgYSBmaWxlbmFtZS4KLSAgICAgKiBCdXQgaWYgdGhlIHVzZXIncyBjb21t YW5kIGlzICJtZ2V0IHh4eCIsIGhvdyBkb2VzIHRoZSBjbGllbnQga25vdwotICAgICAgIHdoZXRo ZXIgdG8gc2VuZCAieHh4IiBpbiB0aGUgTUxTRCBkaXJlY3RpdmU/IEl0IG1pZ2h0IGJlIHRoZSBu YW1lCi0gICAgICAgb2YgYSBkaXJlY3Rvcnkgb24gb24gdGhlIHNlcnZlciwgaW4gd2hpY2ggY2Fz ZSBpdCBzaG91bGQgYmUgc2VudCwKLSAgICAgICBvciBpdCBtaWdodCBiZSB0aGUgbmFtZSBvZiBh IGZpbGUgb24gdGhlIHNlcnZlciAob3IgYSB3aWxkY2FyZCksIGluCi0gICAgICAgd2hpY2ggY2Fz ZSBpdCBtdXN0IG5vdCBiZSBzZW50LiBTaW5jZSB0aGUgY2xpZW50IGtub3dzIGl0cyBvd24KLSAg ICAgICB3aWxkY2FyZCBzeW50YXgsIHRoZW4gaW4gbW9zdCBjYXNlcyBpdCB3b3VsZCBiZSByaWdo dCB0byBzZW5kCi0gICAgICAgIk1MU0QiIHdpdGggbm8gYXJndW1lbnQgaWYgeHh4IGlzIHdpbGQs IGFuZCB0byBzZW5kICJNTFNEIHh4eCIgaWYKLSAgICAgICBpdCBpcyBub3QuCi0gICAgICogQnV0 IHN1cHBvc2UgdGhlIHNlcnZlcidzIGZpbGUgc3lzdGVtIGFsbG93cyBmaWxlbmFtZSBjaGFyYWN0 ZXJzCi0gICAgICAgdGhhdCBjb3JyZXNwb25kIHdpdGggdGhlIGNsaWVudCdzIHdpbGRjYXJkIHN5 bnRheD8gRm9yIGV4YW1wbGU6Ci0gICAgICAgIlthYmNdIiBjb3VsZCBiZSBlaXRoZXIgYSB2YWxp ZCBWTVMgZGlyZWN0b3J5IG5hbWUgb3IgYSB3aWxkY2FyZAotICAgICAgIHBhdHRlcm4gdXNlZCBi eSB0aGUgRlRQIGNsaWVudC4gV2hhdCBzaG91bGQgdGhlIGNsaWVudCBkbyB3aXRoCi0gICAgICAg Im1nZXQgW2FiY10iPyBJbiB0aGlzIGNhc2UgdGhlcmUgbXVzdCBiZSBhIHdheSBmb3IgdGhlIHVz ZXIgdG8KLSAgICAgICBmb3JjZSBzZW5kaW5nIHRoZSBNR0VUIGFyZ3VtZW50IGFzIHRoZSBNTFNE IGFyZ3VtZW50LgotICAgICAqIElmICJ4eHgiIGlzIGEgcmVndWxhciBmaWxlIGluIHRoZSBzZXJ2 ZXIncyBjdXJyZW50IGRpcmVjdG9yeSwgIm1nZXQKLSAgICAgICB4eHgiIHdvcmtzIHdpdGggTkxT VCBidXQgbm90IHdpdGggTUxTRC4KLQotICAgVG8gZnVydGhlciBjb21wbGljYXRlIG1hdHRlcnMs IE5MU1QgY2FuIChpbiB0aGVvcnkpIHdvcmsganVzdCBsaWtlCi0gICBNTFNEOiBpZiBzZW50IHdp dGggYSBibGFuayBhcmd1bWVudCBvciBhIGRpcmVjdG9yeSBuYW1lLCBpdCBpcyBzdXBwb3NlZAot ICAgdG8gcmV0dXJuIGEgY29tcGxldGUgbGlzdCBvZiBmaWxlcyBpbiB0aGUgY3VycmVudCBvciBn aXZlbiBkaXJlY3RvcnksCi0gICB3aGljaCB0aGUgY2xpZW50IGNhbiBtYXRjaCBsb2NhbGx5IGFn YWluc3Qgc29tZSBwYXR0ZXJuLiBJdCBpcyBub3QKLSAgIGtub3duIGlmIGFueSBGVFAgc2VydmVy IG9yIGNsaWVudCBkb2VzIHRoaXMgYnV0IG5ldmVydGhlbGVzcywgaXQgc2hvdWxkCi0gICBiZSBw b3NzaWJsZSBzaW5jZSB0aGlzIGJlaGF2aW9yIGNhbiBiZSBpbmZlcnJlZCBmcm9tIFJGQyA5NTku Ci0KLSAgIEluIHZpZXcgb2YgdGhlc2UgY29uc2lkZXJhdGlvbnMsIGFuZCBnaXZlbiB0aGUgbmVl ZCB0byBwcmVzZXJ2ZSB0aGUKLSAgIHRyYWRpdGlvbmFsIEZUUCBjbGllbnQgY29tbWFuZCBzdHJ1 Y3R1cmUgYW5kIGJlaGF2aW9yIHNvIHRoZSBzb2Z0d2FyZQotICAgd2lsbCBiZSB1c2FibGUgYnkg bW9zdCBwZW9wbGU6Ci0KLSAgICAxLiBUaGUgTUdFVCBjb21tYW5kIHNob3VsZCBwcm9kdWNlIHRo ZSBleHBlY3RlZCByZXN1bHQgaW4gdGhlIGNvbW1vbgotICAgICAgIGNhc2VzLCByZWdhcmRsZXNz IG9mIHdoZXRoZXIgTkxTVCBvciBNTFNEIGlzIHVzZWQgdW5kZXJuZWF0aC4KLSAgICAyLiBGb3Ig YW5vbWFsb3VzIGNhc2VzLCB0aGUgdXNlciBuZWVkcyBhIHdheSB0byBjb250cm9sIHdoZXRoZXIg dGhlCi0gICAgICAgTUdFVCBhcmd1bWVudCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgb3Iga2VwdCBm b3IgbG9jYWwgdXNlLgotICAgIDMuIEF0IHRoZSBzYW1lIHRpbWUsIHRoZSB1c2VyIG1pZ2h0IG5l ZWQgYSB3YXkgdG8gc2VuZCBhIGRpcmVjdG9yeQotICAgICAgIG5hbWUgdG8gdGhlIHNlcnZlciwg aW5kZXBlbmRlbnQgb2YgYW55IHdpbGRjYXJkIHBhdHRlcm4uCi0gICAgNC4gVGhlIHVzZXIgbmVl ZHMgYSB3YXkgdG8gZm9yY2UgTkxTVCBvciBNTFNEIGZvciBhIGdpdmVuIE1HRVQKLSAgICAgICBj b21tYW5kLgotCi0gICBCeSBkZWZhdWx0LCBLZXJtaXQncyBNR0VUIGNvbW1hbmQgdXNlcyBNTFNE IGlmIE1MU1QgaXMgcmVwb3J0ZWQgYnkgdGhlCi0gICBzZXJ2ZXIgaW4gaXRzIEZFQVQgbGlzdC4g V2hlbiBNTFNEIGlzIHVzZWQsIHRoZSBmaWxlc3BlYyBpcyBzZW50IHRvIHRoZQotICAgc2VydmVy IGlmIGl0IGlzIG5vdCB3aWxkIChhY2NvcmRpbmcgdG8gS2VybWl0J3Mgb3duIGRlZmluaXRpb24g b2YKLSAgICJ3aWxkIiBzaW5jZSBpdCBjYW4ndCBwb3NzaWJseSBrbm93IHRoZSBzZXJ2ZXIncyBk ZWZpbml0aW9uKS4gSWYgdGhlCi0gICBmaWxlc3BlYyBpcyB3aWxkIGl0IGlzIGhlbGQgZm9yIGxv Y2FsIHVzZSB0byBzZWxlY3QgZmlsZXMgZnJvbSB0aGUgbGlzdAotICAgcmV0dXJuZWQgYnkgdGhl IHNlcnZlci4gSWYgTUxTVCBpcyBub3QgcmVwb3J0ZWQgYnkgdGhlIHNlcnZlciBvciBpcwotICAg ZGlzYWJsZWQsIEtlcm1pdCBzZW5kcyB0aGUgTUdFVCBmaWxlc3BlYyB3aXRoIHRoZSBOTFNUIGRp cmVjdGl2ZS4KLQotICAgVGhlIGRlZmF1bHQgYmVoYXZpb3IgY2FuIGJlIG92ZXJyaWRkZW4gZ2xv YmFsbHkgd2l0aCBGVFAgRElTQUJMRSBNTFNULAotICAgd2hpY2ggZm9yY2VzIEtlcm1pdCB0byB1 c2UgTkxTVCB0byBnZXQgZmlsZSBsaXN0cy4gQW5kIHRoZW4gZm9yCi0gICBzaXR1YXRpb25zIGlu IHdoaWNoIE1MU0QgaXMgZW5hYmxlZCwgdGhlIGZvbGxvd2luZyBNR0VUIHN3aXRjaGVzIGNhbiBi ZQotICAgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMgZm9yIGEgc3BlY2lmaWMgTUdFVCBv cGVyYXRpb246Ci0KLSAgIC9OTFNUCi0gICAgICAgICAgRm9yY2VzIHRoZSBjbGllbnQgdG8gc2Vu ZCBOTFNULiBFeGFtcGxlOgotCi1tZ2V0IC9ubHN0IGZvby4qCi0KLSAgIC9NTFNECi0gICAgICAg ICAgRm9yY2VzIHRoZSBjbGllbnQgdG8gc2VuZCBNTFNEIChldmVuIGlmIE1MU1QgaXMgZGlzYWJs ZWQpLgotICAgICAgICAgIEV4YW1wbGU6Ci0KLW1nZXQgL21sc2QgZm9vLioKLQotICAgL01BVENI OnBhdHRlcm4KLSAgICAgICAgICBXaGVuIHRoaXMgc3dpdGNoIGlzIGdpdmVuLCBpdCBmb3JjZXMg dGhlIGNsaWVudCB0byBob2xkIHRoZQotICAgICAgICAgIHBhdHRlcm4gZm9yIGxvY2FsIHVzZSBh Z2FpbnN0IHRoZSByZXR1cm5lZCBmaWxlIGxpc3QuIElmIGEKLSAgICAgICAgICByZW1vdGUgZmls ZXNwZWMgaXMgYWxzbyBnaXZlbiAoZS5nLiB0aGUgImJsYWgiIGluICJtZ2V0Ci0gICAgICAgICAg L21hdGNoOioudHh0IGJsYWgiKSwgdGhlbiBpdCBpcyBzZW50IGFzIHRoZSBOTFNUIG9yIE1MU0QK LSAgICAgICAgICBhcmd1bWVudCwgcHJlc3VtYWJseSB0byBzcGVjaWZ5IHRoZSBkaXJlY3Rvcnkg d2hvc2UgZmlsZXMgYXJlIHRvCi0gICAgICAgICAgYmUgbGlzdGVkLiBXaGVuIHRoZSAvTUFUQ0gg c3dpdGNoIGlzIG5vdCBnaXZlbiwgdGhlIE1HRVQKLSAgICAgICAgICBmaWxlc3BlYyBpcyBzZW50 IHRvIHRoZSBzZXJ2ZXIgaWYgdGhlIGRpcmVjdGl2ZSBpcyBOTFNUIG9yIGlmCi0gICAgICAgICAg dGhlIGZpbGVzcGVjIGlzIG5vdCB3aWxkLiBFeGFtcGxlczoKLQotICBDb21tYW5kOiAgICAgICAg ICAgICAgICAgICBXaXRoIE5MU1Q6ICAgICBXaXRoIE1MU0Q6Ci0gICAgbWdldCAgICAgICAgICAg ICAgICAgICAgICBOTFNUICAgICAgICAgICBNTFNECi0gICAgbWdldCAqLnR4dCAgICAgICAgICAg ICAgICBOTFNUICoudHh0ICAgICBNTFNECi0gICAgbWdldCBmb28gICAgICAgICAgICAgICAgICBO TFNUIGZvbyAgICAgICBNTFNEIGZvbwotICAgIG1nZXQgL21hdGNoOioudHh0ICAgICAgICAgTkxT VCAgICAgICAgICAgTUxTRAotICAgIG1nZXQgL21hdGNoOioudHh0IGZvbyAgICAgTkxTVCBmb28g ICAgICAgTUxTRCBmb28KLQotICAgSW4gb3RoZXIgd29yZHMsIHRoZSBwYXR0ZXJuIGlzIGFsd2F5 cyBpbnRlcnByZXRlZCBsb2NhbGx5IHVubGVzcyBNR0VUCi0gICB1c2VzIE5MU1QgYW5kIG5vIC9N QVRDSCBzd2l0Y2ggd2FzIGdpdmVuLgotCi0zLjExLjQuIEV4YW1wbGVzCi0KLTMuMTEuNC4xLiBE b3dubG9hZGluZyBhIFNpbmdsZSBGaWxlCi0KLSAgIFRoZXJlIGFyZSBubyBjaG9pY2VzIGhlcmUs IGp1c3QgdXNlIHRoZSBGVFAgR0VUIGNvbW1hbmQuIEtlcm1pdCBhbHdheXMKLSAgIHNlbmRzIHRo ZSBSRVRSIGRpcmVjdGl2ZSwgYW5kIHBvc3NpYmx5IFNJWkUgYW5kL29yIE1EVE0uIFRoZSBzbWFs bAotICAgYWR2YW50YWdlIG9mIHVzaW5nIE1MU1QgaW4gdGhpcyBjYXNlIGlzIG91dHdlaWdoZWQg YnkgdGhlIHJpc2sgYW5kCi0gICBlZmZvcnQgb2YgY29kaW5nIGEgc3BlY2lhbCBjYXNlLgotCi0z LjExLjQuMi4gRG93bmxvYWRpbmcgYSBHcm91cCBvZiBGaWxlcyBmcm9tIGEgU2luZ2xlIERpcmVj dG9yeQotCi0gICBUaGlzIGNhc2UgcHJlc2VudHMgdHJhZGVvZmZzLCBlc3BlY2lhbGx5IG9uIHNs b3cgY29ubmVjdGlvbnM6Ci0KLSAgICAgKiBGb3IgZG93bmxvYWRpbmcgYWxsIG9yIG1vc3Qgb2Yg dGhlIGZpbGVzIGluIGEgZGlyZWN0b3J5LCBNTFNEIGlzCi0gICAgICAgYmV0dGVyIGJlY2F1c2Ug aXQgZWxpbWluYXRlcyB0aGUgbmVlZCB0byBzZW5kIFNJWkUgYW5kIE1EVE0gZm9yCi0gICAgICAg ZWFjaCBmaWxlLiBObyBzcGVjaWFsIGFjdGlvbnMgYXJlIHJlcXVpcmVkIGluIHRoaXMgY2FzZTsg S2VybWl0Ci0gICAgICAgdXNlcyBNTFNEIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHNlcnZlciBzdXBw b3J0cyBpdCAodW5sZXNzIHlvdSBoYXZlCi0gICAgICAgZGlzYWJsZWQgaXQpLgotICAgICAqIEZv ciBhIHNtYWxsIG51bWJlciBvZiBmaWxlcyBmcm9tIGEgbGFyZ2UgZGlyZWN0b3J5LCBOTFNUIGlz IGJldHRlcgotICAgICAgIGJlY2F1c2UgaXQgYnlwYXNzZXMgZG93bmxvYWRpbmcgb2YgYSBwb3Rl bnRpYWxseSBodWdlIGZpbGUgbGlzdAotICAgICAgIHByaW9yIHRvIHRoZSBmaWxlcyB0aGVtc2Vs dmVzLiBJZiB5b3UgaGF2ZSBhIGNvbm5lY3Rpb24gdG8gYSBzZXJ2ZXIKLSAgICAgICB0aGF0IHN1 cHBvcnRzIE1MU0QsIHVzZSB0aGUgL05MU1Qgc3dpdGNoIHRvIGZvcmNlIE5MU1Q6Ci0KLW1nZXQg L25sc3QgdFsxMjM0XS5oCi0KLSAgICAgKiBJZiB0aGUgc2VydmVyIHN1cHBvcnRzIE1MU0QgYnV0 IGRvZXMgbm90IHN1cHBvcnQgc2VwYXJhdGUgU0laRSBvcgotICAgICAgIE1EVE0gZGlyZWN0aXZl cywgYW5kIHlvdSBuZWVkIHRoZSBzaXplIGFuZC9vciB0aW1lc3RhbXAKLSAgICAgICBpbmZvcm1h dGlvbiwgTUxTRCBpcyBiZXR0ZXI7IG5vIHNwZWNpYWwgYWN0aW9ucyByZXF1aXJlZC4KLSAgICAg KiBJZiB0aGUgc2VydmVyIHN1cHBvcnRzIE1MU0QgYnV0IGRvZXMgbm90IHN1cHBvcnQgdGhlICJz aXplIiBhbmQKLSAgICAgICAibW9kaWZ5IiBmYWN0cywgYnV0IGl0IGRvZXMgc3VwcG9ydCB0aGUg U0laRSBvciBNRFRNIGRpcmVjdGl2ZXMsCi0gICAgICAgYW5kIHlvdSBuZWVkIHRoZSBzaXplIGFu ZC9vciB0aW1lc3RhbXAgaW5mb3JtYXRpb24sIE5MU1QgaXMgYmV0dGVyLgotCi0zLjExLjQuMy4g RG93bmxvYWRpbmcgYSBEaXJlY3RvcnkgVHJlZQotCi0gICBNTFNEIGlzIHRoZSBvbmx5IGNob2lj ZSBmb3IgcmVjdXJzaXZlIGRvd25sb2FkczsgdGhleSByYXJlbHksIGlmIGV2ZXIsCi0gICB3b3Jr IHdpdGggTkxTVCAodGhlIGZldyBjYXNlcyB3aGVyZSB0aGV5IGRvIHdvcmsgcmVseSBvbiBleHRy YS1wcm90b2NvbAotICAgInNlY3JldCIgbm90YXRpb25zIGZvciB0aGUgTkxTVCBhcmd1bWVudCku IE5vIHNwZWNpYWwgYWN0aW9ucyBhcmUKLSAgIHJlcXVpcmVkIHRvIGZvcmNlIE1MU0Qgd2hlbiB0 aGUgc2VydmVyIHN1cHBvcnRzIGl0LCB1bmxlc3MgeW91IGhhdmUKLSAgIGRpc2FibGVkIGl0LiBF eGFtcGxlczoKLQotICAgTUdFVCAvUkVDVVJTSVZFCi0gICAgICAgICAgVGhpcyB0ZWxscyB0aGUg c2VydmVyIHRvIHNlbmQgYWxsIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbiB0aGUKLSAgICAgICAg ICB0cmVlIHJvb3RlZCBhdCBpdHMgY3VycmVudCBkaXJlY3RvcnkuCi0KLSAgIE1HRVQgL1JFQ1VS U0lWRSAqLnR4dAotICAgICAgICAgIFRoaXMgdGVsbHMgdGhlIHNlcnZlciB0byBzZW5kIGFsbCAq LnR4dCBmaWxlcyBpbiB0aGUgdHJlZSByb290ZWQKLSAgICAgICAgICBhdCBpdHMgY3VycmVudCBk aXJlY3RvcnkuCi0KLSAgIE1HRVQgL01MU0QgL1JFQ1VSU0lWRSAqLnR4dAotICAgICAgICAgIFNh bWUgYXMgdGhlIHByZXZpb3VzIGV4YW1wbGUgYnV0IGZvcmNlcyBLZXJtaXQgdG8gc2VuZCBNTFNE IGluCi0gICAgICAgICAgY2FzZSBpdCB3YXMgZGlzYWJsZWQsIG9yIGluIGNhc2UgdGhlIHNlcnZl ciBpcyBrbm93biB0byBzdXBwb3J0Ci0gICAgICAgICAgaXQgZXZlbiB0aG91Z2ggaXQgZGlkIG5v dCBhbm5vdW5jZSBpdCBpbiBpdHMgRkVBVCBsaXN0aW5nLgotCi0gICBNR0VUIC9SRUNVUlNJVkUg L01BVENIOiouemlwIGFyY2hpdmVzCi0gICAgICAgICAgVGVsbHMgdGhlIHNlcnZlciB0byBzZW5k IGFsbCBaSVAgZmlsZXMgaW4gdGhlIHRyZWUgcm9vdGVkIGF0IGl0cwotICAgICAgICAgICJhcmNo aXZlcyIgZGlyZWN0b3J5LgotCi0gICBNR0VUIC9SRUNVUlNJVkUgL01BVENIOiogW2FiY10KLSAg ICAgICAgICBUaGUgc2VydmVyIGlzIHJ1bm5pbmcgb24gVk1TIGFuZCB5b3Ugd2FudCBpdCB0byBz ZW5kIGFsbCB0aGUKLSAgICAgICAgICBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IHRyZWUgcm9vdGVk IGF0IFtBQkNdLiBCdXQgc2luY2UgIlthYmNdIgotICAgICAgICAgIGxvb2tzIGp1c3QgbGlrZSBh IHdpbGRjYXJkLCB5b3UgaGF2ZSB0byBpbmNsdWRlIGEgL01BVENIOiBzd2l0Y2gKLSAgICAgICAg ICB0byBmb3JjZSBLZXJtaXQgdG8gc2VuZCAiW2FiY10iIGFzIHRoZSBNTFNEIGFyZ3VtZW50Lgot Ci0gICBJbiBhbGwgY2FzZXMgaW4gd2hpY2ggdGhlIC9SRUNVUlNJVkUgc3dpdGNoIGlzIGluY2x1 ZGVkLCB0aGUgc2VydmVyJ3MKLSAgIHRyZWUgaXMgZHVwbGljYXRlZCBsb2NhbGx5LgotCi0gICAg IEFsdGhvdWdoIE1MU0QgYWxsb3dzIHJlY3Vyc2lvbiBhbmQgTkxTVCBkb2VzIG5vdCwgdGhlIE1M U0QKLSAgICAgc3BlY2lmaWNhdGlvbiBwbGFjZXMgYSBoZWF2eSBidXJkZW4gb24gdGhlIGNsaWVu dDsgdGhlIG9idmlvdXMsCi0gICAgIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGVsZWdhbnQgaW1wbGVt ZW50YXRpb24gKGRlcHRoLWZpcnN0LCB0aGUgb25lCi0gICAgIHRoYXQgS2VybWl0IGN1cnJlbnRs eSB1c2VzKSByZXF1aXJlcyBhcyBtYW55IG9wZW4gdGVtcG9yYXJ5IGZpbGVzIGFzCi0gICAgIHRo ZSBzZXJ2ZXIncyBkaXJlY3RvcnkgdHJlZSBpcyBkZWVwLCBhbmQgdGhlcmVmb3JlIGNsaWVudCBy ZXNvdXJjZQotICAgICBleGhhdXN0aW9uIC0tIGUuZy4gZXhjZWVkaW5nIHRoZSBtYXhpbXVtIG51 bWJlciBvZiBvcGVuIGZpbGVzIC0tIGlzCi0gICAgIGEgZGFuZ2VyLiBVbmZvcnR1bmF0ZWx5IE1M U0Qgd2FzIG5vdCBkZXNpZ25lZCB3aXRoIHJlY3Vyc2lvbiBpbgotICAgICBtaW5kLiAoQnJlYWR0 aC1maXJzdCB0cmF2ZXJzYWwgY291bGQgYmUgcHJvYmxlbWF0aWMgZHVlIHRvIGxhY2sgb2YKLSAg ICAgc3VmZmljaWVudCBuYXZpZ2F0aW9uIGluZm9ybWF0aW9uLikKLQotICAgT2YgY291cnNlIGFs bCBvZiBLZXJtaXQncyBvdGhlciBNR0VUIHN3aXRjaGVzIGNhbiBiZSB1c2VkIHRvbywgZS5nLiBm b3IKLSAgIGZpbmVyLWdyYWluZWQgZmlsZSBzZWxlY3Rpb24gKGJ5IGRhdGUsIHNpemUsIGV0Yyks IGZvciBtb3Zpbmcgb3IKLSAgIHJlbmFtaW5nIGZpbGVzIGFzIHRoZXkgYXJyaXZlLCB0byBvdmVy cmlkZSBLZXJtaXQncyBhdXRvbWF0aWMgcGVyLWZpbGUKLSAgIHRleHQvYmluYXJ5IG1vZGUgc3dp dGNoaW5nLCB0byBwYXNzIHRoZSBpbmNvbWluZyBmaWxlcyB0aHJvdWdoIGEKLSAgIGZpbHRlciwg dG8gY29udmVydCB0ZXh0LWZpbGUgY2hhcmFjdGVyIHNldHMsIGFuZCBzbyBvbi4KLQotMy4xMS40 LjQuIE5MU1QvTUxTRCBTdW1tYXJ5IFRhYmxlCi0KLSAgIEhlcmUncyBhIHRhYmxlIHN1bW1hcml6 aW5nIE1HRVQgYmVoYXZpb3Igd2hlbiB0aGUgc2VydmVyIHN1cHBvcnRzIGJvdGgKLSAgIE5MU1Qg YW5kIE1MU0QuIC9OTFNUIGFuZCAvTUxTRCBzd2l0Y2hlcyBhcmUgaW5jbHVkZWQgZm9yIGNsYXJp dHkgdG8KLSAgIGluZGljYXRlIHdoaWNoIHByb3RvY29sIGlzIGJlaW5nIHVzZWQsIGFuZCB0aGUg ZXhwZWN0ZWQgZWZmZWN0cy4gSW4KLSAgIHByYWN0aWNlIHlvdSBjYW4gb21pdCB0aGUgL05MU1Qg YW5kIC9NTFNEIHN3aXRjaGVzIGFuZCB0aGUgS2VybWl0Ci0gICBjbGllbnQgY2hvb3NlcyB0aGUg YXBwcm9wcmlhdGUgb3IgZGVzaXJlZCBwcm90b2NvbCBhcyBkZXNjcmliZWQgYWJvdmUuCi0gICBT YW1wbGUgY29tbWFuZHMgcHJlc3VtZSBhIFVuaXggZmlsZSBzeXN0ZW0gb24gdGhlIHNlcnZlciwg YnV0IG9mIGNvdXJzZQotICAgdGhlIHNlcnZlciBjYW4gaGF2ZSBhbnkgZmlsZSBzeXN0ZW0gb3Ig c3ludGF4IGF0IGFsbC4KLQotICAgVXNlcidzIENvbW1hbmQgRlRQIFNlbmRzIFJlbWFya3MKLSAg IG1nZXQgL25sc3QgTkxTVCBHZXRzIGEgbGlzdCBvZiBhbGwgdGhlIGZpbGVzIGluIHRoZSBzZXJ2 ZXIncyBjdXJyZW50Ci0gICBhbmQgZG93bmxvYWRzIGVhY2ggZmlsZS4gVGhlIGxpc3QgaW5jbHVk ZXMgbmFtZXMgb25seSwgc28gS2VybWl0IGFsc28KLSAgIG11c3Qgc2VuZCBTSVpFIGFuZCBNRFRN IGRpcmVjdGl2ZXMgaWYgc2l6ZSBhbmQgdGltZXN0YW1wIGluZm9ybWF0aW9uIGlzCi0gICByZXF1 aXJlZCAodGhpcyBpcyBhbHdheXMgdHJ1ZSBvZiBOTFNUKS4gU2VuZGluZyBOTFNUIHdpdGhvdXQg YW4KLSAgIGFyZ3VtZW50IGlzIGFsbG93ZWQgYnkgdGhlIFJGQzk1OSBOTFNUIGRlZmluaXRpb24g YW5kIGJ5IHRoZSBLZXJtaXQgRlRQCi0gICBjbGllbnQsIGJ1dCBtaWdodCBub3Qgd29yayB3aXRo IG90aGVyIGNsaWVudHMsIGFuZCBhbHNvIG1pZ2h0IG5vdCB3b3JrCi0gICB3aXRoIGV2ZXJ5IHNl cnZlci4KLSAgIG1nZXQgL25sc3QgZm9vIE5MU1QgZm9vIElmICJmb28iIGlzIGEgZGlyZWN0b3J5 LCB0aGlzIGdldHMgYSBsaXN0IG9mCi0gICBhbGwgdGhlIGZpbGVzIGZyb20gdGhlIHNlcnZlcidz ICJmb28iIGRpcmVjdG9yeSBhbmQgZG93bmxvYWRzIGVhY2gKLSAgIGZpbGU7IG90aGVyd2lzZSB0 aGlzIGRvd25sb2FkcyB0aGUgZmlsZSBuYW1lZCAiZm9vIiAoaWYgYW55KSBmcm9tIHRoZQotICAg c2VydmVyJ3MgY3VycmVudCBkaXJlY3RvcnkuCi0gICBtZ2V0IC9ubHN0ICoudHh0IE5MU1QgKi50 eHQgR2V0cyBhIGxpc3Qgb2YgdGhlIGZpbGVzIGluIHRoZSBzZXJ2ZXIncwotICAgY3VycmVudCBk aXJlY3Rvcnkgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4gKi50eHQsIGFuZCB0aGVuCi0g ICBkb3dubG9hZHMgZWFjaCBmaWxlIGZyb20gdGhlIGxpc3QuIEJlY2F1c2Ugd2UgYXJlIHVzaW5n IE5MU1QsIHdlIHNlbmQKLSAgIHRoZSBmaWxlc3BlYyAoKi50eHQpIHRvIHRoZSBzZXJ2ZXIgYW5k IHRoZSBzZXJ2ZXIgaW50ZXJwcmV0cyBhbnkKLSAgIHdpbGRjYXJkcy4KLSAgIG1nZXQgL25sc3Qg Zm9vLyoudHh0IE5MU1QgZm9vLyoudHh0ICBHZXRzIGEgbGlzdCBvZiB0aGUgZmlsZXMgaW4gdGhl Ci0gICBzZXJ2ZXIncyAiZm9vIiBkaXJlY3Rvcnkgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRl cm4gKi50eHQsIGFuZCB0aGVuCi0gICBkb3dubG9hZHMgZWFjaCBmaWxlIGZyb20gdGhlIGxpc3Qg KHNlcnZlciBpbnRlcnByZXRzIHdpbGRjYXJkcykuCi0gICBtZ2V0IC9ubHN0IC9tYXRjaDoqLnR4 dCBOTFNUIEdldHMgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXMgaW4gdGhlCi0gICBzZXJ2ZXIncyBj dXJyZW50IGRpcmVjdG9yeSBhbmQgdGhlbiBkb3dubG9hZHMgZWFjaCBvbmUgd2hvc2UgbmFtZQot ICAgbWF0Y2hlcyB0aGUgcGF0dGVybiAqLnR4dCAoY2xpZW50IGludGVycHJldHMgd2lsZGNhcmRz KS4KLSAgIG1nZXQgL25sc3QgL21hdGNoOioudHh0IGZvbyAgTkxTVCBmb28gR2V0cyBhIGxpc3Qg b2YgYWxsIHRoZSBmaWxlcyBpbgotICAgdGhlIHNlcnZlcidzICJmb28iIGRpcmVjdG9yeSBhbmQg dGhlbiBkb3dubG9hZHMgZWFjaCBvbmUgd2hvc2UgbmFtZQotICAgbWF0Y2hlcyB0aGUgcGF0dGVy biAqLnR4dCAoY2xpZW50IGludGVycHJldHMgd2lsZGNhcmRzKS4KLSAgIG1nZXQgL21sc2QgTUxT RCBHZXRzIGEgbGlzdCBvZiBhbGwgdGhlIGZpbGVzIGZyb20gdGhlIHNlcnZlcidzIGN1cnJlbnQK LSAgIGRpcmVjdG9yeSBhbmQgdGhlbiBkb3dubG9hZHMgZWFjaCBvbmUuIFRoZSBsaXN0IG1pZ2h0 IGluY2x1ZGUgc2l6ZSBhbmQKLSAgIHRpbWVzdGFtcCBpbmZvcm1hdGlvbiwgaW4gd2hpY2ggY2Fz ZSBLZXJtaXQgZG9lcyBub3QgbmVlZCB0byBzZW5kIFNJWkUKLSAgIGFuZCBNRFRNIGRpcmVjdGl2 ZXMgZm9yIGVhY2ggZmlsZSAodGhpcyBpcyBhbHdheXMgdHJ1ZSBvZiBNTFNEKS4KLSAgIG1nZXQg L21sc2QgZm9vIE1MU0QgZm9vIEdldHMgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXMgZnJvbSB0aGUg c2VydmVyJ3MKLSAgICJmb28iIGRpcmVjdG9yeSAod2hlcmUgdGhlIHN0cmluZyAiZm9vIiBkb2Vz IG5vdCBjb250YWluIHdpbGRjYXJkcykgYW5kCi0gICB0aGVuIGRvd25sb2FkcyBlYWNoIG9uZS4g SWYgImZvbyIgaXMgYSByZWd1bGFyIGZpbGUgYW5kIG5vdCBhCi0gICBkaXJlY3RvcnksIHRoaXMg Y29tbWFuZCBpcyBzdXBwb3NlZCB0byBmYWlsLCBidXQgc29tZSBzZXJ2ZXJzIGhhdmUgYmVlbgot ICAgb2JzZXJ2ZWQgdGhhdCBzZW5kIHRoZSBmaWxlLgotICAgbWdldCAvbWxzZCAqLnR4dCBNTFNE IEdldHMgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXMgZnJvbSB0aGUgc2VydmVyJ3MKLSAgIGN1cnJl bnQgZGlyZWN0b3J5IGFuZCB0aGVuIGRvd25sb2FkcyBvbmx5IHRoZSBvbmVzIHdob3NlIG5hbWVz IG1hdGNoCi0gICB0aGUgcGF0dGVybiAiKi50eHQiLiBCZWNhdXNlIHdlIGFyZSB1c2luZyBNTFNE IGFuZCB0aGUgTUdFVCBmaWxlc3BlYyBpcwotICAgd2lsZCwgd2UgZG8gbm90IHNlbmQgdGhlIGZp bGVzcGVjIHRvIHRoZSBzZXJ2ZXIsIGJ1dCB0cmVhdCBpdCBhcyB0aG91Z2gKLSAgIGl0IGhhZCBi ZWVuIGdpdmVuIGluIGEgL01BVENIOiBzd2l0Y2ggYW5kIHVzZSBpdCBsb2NhbGx5IHRvIG1hdGNo IHRoZQotICAgbmFtZXMgaW4gdGhlIGxpc3QuCi0gICBtZ2V0IC9tbHNkIGZvby8qLnR4dCBNTFNE IFRoaXMgb25lIHdvbid0IHdvcmsgYmVjYXVzZSBNTFNEIHJlcXVpcmVzCi0gICB0aGF0IHRoZSBu b3Rpb25zIG9mIHNlcnZlciBkaXJlY3RvcnkgYW5kIGZpbGVuYW1lLW1hdGNoaW5nIHBhdHRlcm4g YmUKLSAgIHNlcGFyYXRlZC4gSG93ZXZlciwgdGhlIGNsaWVudCwgd2hpY2ggY2FuJ3QgYmUgZXhw ZWN0ZWQgdG8ga25vdyB0aGUKLSAgIHNlcnZlcidzIGZpbGUtc3lzdGVtIHN5bnRheCwgd2luZHMg dXAgc2VuZGluZyBhIHJlcXVlc3QgdGhhdCB0aGUgc2VydmVyCi0gICB3aWxsIChvciBzaG91bGQp IHJlamVjdC4KLSAgIG1nZXQgL21sc2QgL21hdGNoOioudHh0IE1MU0QgR2V0cyBhIGxpc3Qgb2Yg YWxsIHRoZSBmaWxlcyBmcm9tIHRoZQotICAgc2VydmVyJ3MgY3VycmVudCBkaXJlY3RvcnkgYW5k IHRoZW4gZG93bmxvYWRzIG9ubHkgdGhlIG9uZXMgd2hvc2UgbmFtZXMKLSAgIG1hdGNoIHRoZSBw YXR0ZXJuICIqLnR4dCIgKGNsaWVudCBpbnRlcnByZXRzIHdpbGRjYXJkcykuCi0gICBtZ2V0IC9t bHNkIC9tYXRjaDoqLnR4dCBmb28gTUxTRCBmb28gSWYgImZvbyIgaXMgYSBkaXJlY3Rvcnkgb24g dGhlCi0gICBzZXJ2ZXIsIHRoaXMgZ2V0cyBhIGxpc3Qgb2YgYWxsIHRoZSBmaWxlcyBmcm9tIHRo ZSBzZXJ2ZXIncyAiZm9vIgotICAgZGlyZWN0b3J5IGFuZCB0aGVuIGRvd25sb2FkcyBvbmx5IHRo ZSBvbmVzIHdob3NlIG5hbWVzIG1hdGNoIHRoZQotICAgcGF0dGVybiAiKi50eHQiIChjbGllbnQg aW50ZXJwcmV0cyB3aWxkY2FyZHMpLiBUaGlzIGxlYXZlcyB0aGUgc2VydmVyCi0gICBDRCdkIHRv IHRoZSAiZm9vIiBkaXJlY3Rvcnk7IHRoZXJlJ3Mgbm8gd2F5IHRoZSBjbGllbnQgY2FuIHJlc3Rv cmUgdGhlCi0gICBzZXJ2ZXIncyBvcmlnaW5hbCBkaXJlY3RvcnkgYmVjYXVzZSBNTFNEIGRvZXNu J3QgZ2l2ZSB0aGF0IGluZm9ybWF0aW9uLAotICAgYW5kIHNpbmNlIHRoZSBjbGllbnQgY2FuIG5v dCBiZSBleHBlY3RlZCB0byBrbm93IHRoZSBzZXJ2ZXIncwotICAgZmlsZS1zeXN0ZW0gc3ludGF4 LCBpdCB3b3VsZCBub3QgYmUgc2FmZSB0byBndWVzcy4gSWYgImZvbyIgaXMgYQotICAgcmVndWxh ciBmaWxlLCBNTFNEIGZhaWxzLgotICAgbWdldCAvbWxzZCBmb28gYmFyIE1MU0QgVGhpcyBvbmUg aXMgcHJvYmxlbWF0aWMuIFlvdSdyZSBzdXBwb3NlZCB0byBiZQotICAgYWJsZSB0byBnaXZlIE1H RVQgYSBsaXN0IGEgZmlsZXNwZWNzOyBpbiB0aGlzIGNhc2Ugd2UgbmFtZSB0d28KLSAgIGRpcmVj dG9yaWVzLiBUaGUgY2xpZW50IG11c3QgY2hhbmdlIHRoZSBzZXJ2ZXIncyBkaXJlY3RvcnkgdG8g ImZvbyIgdG8KLSAgIGdldCB0aGUgbGlzdCBvZiBmaWxlcywgYW5kIHRoZW4gdGhlIGZpbGVzIHRo ZW1zZWx2ZXMuIEJ1dCB0aGVuIGl0IGhhcwotICAgbm8gd2F5IHRvIHJldHVybiB0byB0aGUgc2Vy dmVyJ3MgcHJldmlvdXMgZGlyZWN0b3J5IGluIG9yZGVyIHRvIGRvIHRoZQotICAgc2FtZSBmb3Ig ImJhciIsIGFzIGV4cGxhaW5lZCBpbiB0aGUgcHJldmlvdXMgZXhhbXBsZS4KLSAgIG1nZXQgL21s c2QgL21hdGNoOiogW2FiY10gTUxTRCBbYWJjXSBJbmNsdWRpbmcgYSAvTUFUQ0g6IHN3aXRjaCBm b3JjZXMKLSAgIFthYmNdIHRvIGJlIHNlbnQgdG8gdGhlIHNlcnZlciBldmVuIHRob3VnaCB0aGUg Y2xpZW50IHdvdWxkIG5vcm1hbGx5Ci0gICB0aGluayBpdCB3YXMgYSB3aWxkY2FyZCBhbmQgaG9s ZCBpdCBmb3IgbG9jYWwgaW50ZXJwcmV0YXRpb24uIEluIHRoaXMKLSAgIGV4YW1wbGUsIFthYmNd IG1pZ2h0IGJlIGEgVk1TIGRpcmVjdG9yeSBuYW1lLgotICAgbWdldCAvbWxzZCAvbWF0Y2g6KiB0 Ki5oIE1MU0QgdCouaCBDb250cmFyeSB0byB0aGUgTUxTRCBzcGVjaWZpY2F0aW9uLAotICAgc29t ZSBNTFNELWNhcGFibGUgRlRQIHNlcnZlcnMgZG8gaW50ZXJwcmV0IHdpbGRjYXJkcy4gVGhpcyBm b3JtIG9mIHRoZQotICAgTUdFVCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGZvcmNlIGEgd2lsZGNh cmQgdG8gYmUgc2VudCB0byB0aGUgc2VydmVyCi0gICBmb3IgaW50ZXJwcmV0YXRpb24uCi0KLSAg IFdoZW4gTUxTRCBpcyB1c2VkIGltcGxpY2l0bHkgKHRoYXQgaXMsIHdpdGhvdXQgYW4gL01MU0Qg c3dpdGNoIGdpdmVuIHRvCi0gICBmb3JjZSB0aGUgdXNlIG9mIE1MU0QpIGFuZCBhbiBNR0VUIGNv bW1hbmQgc3VjaCBhcyAibWdldCBmb28vKi50eHQiCi0gICBmYWlscywgS2VybWl0IGF1dG9tYXRp Y2FsbHkgZmFsbHMgYmFjayB0byBOTFNUIGFuZCB0cmllcyBhZ2Fpbi4KLQotMy4xMS41LiBSZWZl cmVuY2VzCi0KLSAgICAxLiBQb3N0ZWwsIEouLCBhbmQgSi4gUmV5bm9sZHMsIEZpbGUgVHJhbnNm ZXIgUHJvdG9jb2wgKEZUUCksIFJGQyA5NTksCi0gICAgICAgT2N0b2JlciAxOTg1OiBbMzcyXWZ0 cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzk1OS50eHQuCi0gICAgMi4gSGV0aG1vbiwgUCwg YW5kIFIuIEVseiwgRmVhdHVyZSBuZWdvdGlhdGlvbiBtZWNoYW5pc20gZm9yIHRoZSBGaWxlCi0g ICAgICAgVHJhbnNmZXIgUHJvdG9jb2wsIFJGQyAyMzg5LCBBdWd1c3QgMTk5ODoKLSAgICAgICBb MzczXWZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzIzODkudHh0LgotICAgIDMuIEVseiwg UiwgYW5kIFAuIEhldGhtb24sIEV4dGVuc2lvbnMgdG8gRlRQLCBJbnRlcm5ldCBEcmFmdAotICAg ICAgIGRyYWZ0LWlldGYtZnRwZXh0LW1sc3QtMTYudHh0LCBTZXB0ZW1iZXIgMjAwMjoKLSAgICAg ICBbMzc0XWh0dHA6Ly93d3cuaWV0Zi5vcmcvaW50ZXJuZXQtZHJhZnRzL2RyYWZ0LWlldGYtZnRw ZXh0LW1sc3QtMTYuCi0gICAgICAgdHh0LgotICAgIDQuIFszNzVdVGhlIEtlcm1pdCBGVFAgQ2xp ZW50IChvdmVydmlldykuCi0KLSAgIFsgWzM3Nl1Ub3AgXSBbIFszNzddRlRQIFRvcCBdIFsgWzM3 OF1DLUtlcm1pdCBIb21lIF0gWyBbMzc5XUtlcm1pdCBIb21lCi0gICBdCi0KLTQuIEZJTEUgU0NB Tk5JTkcKLQotICAgQSBuZXcgZmVhdHVyZSBjYWxsZWQgZmlsZSBzY2FubmluZyBpcyB1c2VkIGlu IHZhcmlvdXMgY29udGV4dHMgdG8KLSAgIGRldGVybWluZSBpZiBhIGZpbGUgaXMgdGV4dCBvciBi aW5hcnksIGFuZCBpZiBpdCBpcyB0ZXh0LCB3aGF0IGtpbmQgb2YKLSAgIHRleHQuIFRoZSBvdmVy aGVhZCBvZiBmaWxlIHNjYW5uaW5nIGlzIHN1cnByaXNpbmdseSB0b2xlcmFibGUsIHVzdWFsbHkK LSAgIGFib3V0IGEgcXVhcnRlciBzZWNvbmQgcGVyIGZpbGUuIEZpbGUgc2Nhbm5pbmcgaXMgbm93 IHVzZWQgaW5zdGVhZCBvZgotICAgZmlsZW5hbWUgcGF0dGVybnMgdW5sZXNzIHlvdSBTRVQgRklM RSBTQ0FOIE9GRiwgd2hpY2ggcmVzdG9yZXMgdGhlCi0gICBwcmV2aW91cyBiZWhhdmlvci4KLQot ICAgVGhlIHByaW1hcnkgYmVuZWZpdCBvZiBmaWxlIHNjYW5uaW5nIGlzIGluIGZpbGUgdHJhbnNm ZXIuIEZvciBhbGwKLSAgIHByYWN0aWNhbCBwdXJwb3Nlcywgbm93IHlvdSBjYW4gc3RvcCB3b3Jy eWluZyBhYm91dCB3aGV0aGVyIGEgZmlsZQotICAgc2hvdWxkIGJlIHNlbnQgaW4gYmluYXJ5IG9y IHRleHQgbW9kZSwgb3IgYWJvdXQgc2VuZGluZyBtaXh0dXJlcyBvZgotICAgdGV4dCBhbmQgYmlu YXJ5IGZpbGVzIGluIGEgc2luZ2xlIG9wZXJhdGlvbiwgb3IgY29uZmlndXJpbmcgYW5kCi0gICBm aW5lLXR1bmluZyB5b3VyIGxpc3RzIG9mIGJpbmFyeS1maWxlIGFuZCB0ZXh0LWZpbGUgbmFtZSBw YXR0ZXJuczogbm93Ci0gICBpdCBhbGwganVzdCB3b3Jrcy4KLQotICAgRmlsZSBzY2FubmluZyBp cyBkb25lIGJ5IHRoZSBmaWxlIHNlbmRlciwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZgot ICAgZWFjaCBmaWxlIGJlZm9yZSBpdCBzZW5kcyBpdCBhbmQgaW5mb3JtcyB0aGUgcmVjZWl2ZXIg KEtlcm1pdCBvciBGVFAKLSAgIHNlcnZlcikgb2YgdGhlIHR5cGUuIEZpbGUgc2Nhbm5pbmcgaXMg Tk9UIGRvbmUgYnkgdGhlIHJlY2VpdmVyLCBiZWNhdXNlCi0gICBpdCBpcyB0aGUgc2VuZGVyJ3Mg cmVzcG9uc2liaWxpdHkgdG8gZGV0ZXJtaW5lIGVhY2ggZmlsZSdzIHR5cGUsIHNlbmQKLSAgIHRo ZSBmaWxlIGluIHRoZSByaWdodCBtb2RlLCBhbmQgaW5mb3JtIHRoZSByZWNlaXZlciBvZiB0aGUg bW9kZS4gSWYKLSAgIGJvdGggdHJhbnNmZXIgcGFydG5lcnMgYXJlIGNhcGFibGUgb2YgdGhpcyAo b3IgYW55IG90aGVyKSBmb3JtIG9mCi0gICBhdXRvbWF0aWMgdGV4dC9iaW5hcnkgbW9kZSBzd2l0 Y2hpbmcsIHRoZW4gZmlsZXMgY2FuIGJlIHNlbnQgaW4gYm90aAotICAgZGlyZWN0aW9ucyB3aXRo IG5vIHdvcnJpZXMgYWJvdXQgY29ycnVwdGlvbiBkdWUgdG8gaW5hcHByb3ByaWF0ZQotICAgdHJh bnNmZXIgbW9kZS4gKEFzIG5vdGVkIGluIFszODBdU2VjdGlvbiAzLCBGVFAgc2VydmVycyBkb24n dCBkbyB0aGlzLAotICAgc28gdGhpcyBkaXNjdXNzaW9uIGRvZXMgbm90IGFwcGx5IHdoZW4gdXNp bmcgS2VybWl0IHRvIGRvd25sb2FkIGZyb20gYW4KLSAgIEZUUCBzZXJ2ZXIuKQotCi0gICBUaGUg cmVzdCBvZiB0aGlzIHNlY3Rpb24gaXMgbWFpbmx5IGZvciB0aGUgY3VyaW91cy4gSWYgeW91IGRv bid0IHJlYWQKLSAgIGl0IGFuZCBzaW1wbHkgYWNjZXB0IGFsbCBkZWZhdWx0cywgZXZlcnkgZmls ZSB5b3Ugc2VuZCBzaG91bGQgZ28gaW4gdGhlCi0gICBhcHByb3ByaWF0ZSBtb2RlIGF1dG9tYXRp Y2FsbHkuIEFzIGFsd2F5cywgaG93ZXZlciwgZm9yIGNoYXJhY3Rlci1zZXQKLSAgIHRyYW5zbGF0 aW9uIHRvIHdvcmsgZm9yIDctIGFuZCA4LWJpdCBjaGFyYWN0ZXItc2V0IGZpbGVzLCB0aGUKLSAg IGFwcHJvcHJpYXRlIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgY29tbWFuZChzKSBtdXN0IGhhdmUg YmVlbiBleGVjdXRlZAotICAgdG8gaWRlbnRpZnkgdGhlaXIgZW5jb2RpbmcgKEtlcm1pdCdzIGRl ZmF1bHQgZmlsZSBjaGFyYWN0ZXItc2V0IGlzCi0gICBuZXV0cmFsIEFTQ0lJIGV4Y2VwdCBvbiBw bGF0Zm9ybXMgbGlrZSBIUC1VWCBvciBERy9VWCwgd2hlcmUgdGhlCi0gICBkZWZhdWx0IGZpbGUg Y2hhcmFjdGVyLXNldCBpcyBrbm93bikuIEFuZCBvZiBjb3Vyc2UsIHJlY2VpdmluZyBpcwotICAg YW5vdGhlciBtYXR0ZXIgLS0gb2J2aW91c2x5IHRoZSBvdGhlciBLZXJtaXQgbXVzdCBhbHNvIHNl bmQgZWFjaCBmaWxlCi0gICBpbiB0aGUgYXBwcm9wcmlhdGUgbW9kZS4KLQotICAgU2Nhbm5pbmcg aXMgbW9yZSByZWxpYWJsZSB0aGFuIGZpbGVuYW1lIHBhdHRlcm5zIHNpbXBseSBiZWNhdXNlCi0g ICBmaWxlbmFtZXMgYXJlIG5vdCByZWxpYWJsZSBpbmRpY2F0b3JzIG9mIHRoZSBmaWxlJ3MgY29u dGVudHMuIENsYXNzaWMKLSAgIGV4YW1wbGVzIGluY2x1ZGUgIi5kb2MiIGZpbGVzLCB3aGljaCBh cmUgYmluYXJ5IGlmIE1pY3Jvc29mdCBXb3JkCi0gICBkb2N1bWVudHMgYnV0IHRleHQgb24gbW9z dCBvdGhlciBwbGF0Zm9ybXMsIGFuZCAiLmNvbSIgZmlsZXMsIHdoaWNoIGFyZQotICAgYmluYXJ5 IG9uIERPUyBhbmQgV2luZG93cyBidXQgdGV4dCBvbiBWTVMuIEFueXdheSwgbm9ib2R5IGtub3dz IHRoZQotICAgbmFtaW5nIGNvbnZlbnRpb25zIChpZiBhbnkpIG9mIGFsbCB0aGUgYXBwbGljYXRp b25zIChhbmQgcGVyc29ucyEpIG9uCi0gICB5b3VyIGNvbXB1dGVyLiBTY2FubmluZywgb24gdGhl IG90aGVyIGhhbmQsIGRldGVybWluZXMgZWFjaCBmaWxlJ3MgdHlwZQotICAgYnkgaW5zcGVjdGlu ZyBpdHMgY29udGVudHMgcmF0aGVyIHRoYW4ganVzdCBsb29raW5nIGF0IGl0cyBuYW1lLgotCi0g ICBBbHNvLCBmaWxlIHBhdHRlcm5zIC0tIGV2ZW4gd2hlbiB0aGV5IHdvcmsgYXMgaW50ZW5kZWQg LS0gY2F0ZWdvcml6ZQotICAgZWFjaCBmaWxlIG9ubHkgYXMgdGV4dCBvciBiaW5hcnksIHdoZXJl YXMgZmlsZSBzY2FubmluZyBjYW4gbWFrZSBmaW5lcgotICAgZGlzdGluY3Rpb25zOgotCi0gICBC SU5BUlkKLSAgICAgICAgICBCaW5hcnkgZGF0YSwgbm90IHRvIGJlIGNvbnZlcnRlZCBpbiBhbnkg d2F5LiBFeGFtcGxlcyBpbmNsdWRlCi0gICAgICAgICAgYmluYXJ5IG1hY2hpbmUgY29kZSAoZXhl Y3V0YWJsZSBwcm9ncmFtcyksIGdyYXBoaWNzIGltYWdlcyAoR0lGLAotICAgICAgICAgIEpQRywg ZXRjKSwgY29tcHJlc3NlZCBmaWxlcyAoWiwgR1osIGV0YyksIGFyY2hpdmVzIGFuZCBwYWNrYWdl cwotICAgICAgICAgIChaSVAsIFRBUiwgUlBNLCBldGMpLCBvYmplY3QgZmlsZXMgYW5kIGxpYnJh cmllcyAoT0JKLCBETEwsCi0gICAgICAgICAgZXRjKS4KLQotICAgNy1CSVQgVEVYVAotICAgICAg ICAgIFRleHQgZW5jb2RlZCBpbiBhIDctYml0IGNoYXJhY3RlciBzZXQgc3VjaCBhcyBBU0NJSSBv ciBvbmUgb2YKLSAgICAgICAgICB0aGUgSVNPIDY0NiBuYXRpb25hbCB2ZXJzaW9ucy4gS2VybWl0 IGhhcyBubyB3YXkgdG8gdGVsbCB3aGljaAotICAgICAgICAgIGNoYXJhY3RlciBpcyB1c2VkLCBv bmx5IHRoYXQgaXQncyA3LWJpdCB0ZXh0LiBUeXBpY2FsIGV4YW1wbGVzCi0gICAgICAgICAgaW5j bHVkZSBwcm9ncmFtIHNvdXJjZSBjb2RlLCBSRUFETUUgZmlsZXMsIFBlcmwgb3IgS2VybWl0Ci0g ICAgICAgICAgc2NyaXB0cywgcGxhaW4tdGV4dCBlbWFpbCwgSFRNTCwgVGVYLCBhbmQgdmFyaW91 cyB0ZXh0dWFsCi0gICAgICAgICAgZW5jb2RpbmdzIG9mIGJpbmFyeSBmaWxlczogSGV4LCBCYXNl NjQsIGV0Yy4gV2hlbiBzZW5kaW5nIHN1Y2gKLSAgICAgICAgICBmaWxlcywgdGhlIEZJTEUgREVG QVVMVCA3QklULUNIQVJBQ1RFUi1TRVQgaXMgdXNlZCBhcyB0aGUgZmlsZQotICAgICAgICAgIGNo YXJhY3Rlci1zZXQsIGFuZCB0aGVuIHRoZSBhcHByb3ByaWF0ZSB0cmFuc2ZlciBjaGFyYWN0ZXIg c2V0Ci0gICAgICAgICAgaXMgY2hvc2VuIGZyb20gdGhlIGFzc29jaWF0aW9ucyBsaXN0IChBU1NP Q0lBVEUsIFNIT1cKLSAgICAgICAgICBBU1NPQ0lBVElPTlMpLgotCi0gICA4LUJJVCBURVhUCi0g ICAgICAgICAgVGV4dCBlbmNvZGVkIGluIGFuIDgtYml0IGNoYXJhY3RlciBzZXQgc3VjaCBhcyBM YXRpbi0xLCBMYXRpbi0yLAotICAgICAgICAgIExhdGluL0hlYnJldywgTGF0aW4vQ3lyaWxsaWMs IEtPSTgsIEhQLVJvbWFuOCwgSklTIFggMDIwOCwgQ29kZQotICAgICAgICAgIFBhZ2UgNDM3LCBv ciBDb2RlIFBhZ2UgMTI1Mi4gQWdhaW4sIEtlcm1pdCBoYXMgbm8gd2F5IG9mIGtub3dpbmcKLSAg ICAgICAgICB3aGljaCBwYXJ0aWN1bGFyIHNldCBpcyBpbiB1c2UsIG9ubHkgdGhhdCBpdCdzIDgt Yml0IHRleHQuIFdoZW4KLSAgICAgICAgICBzZW5kaW5nIHN1Y2ggZmlsZXMsIHRoZSBGSUxFIERF RkFVTFQgOEJJVC1DSEFSQUNURVItU0VUIGlzIHVzZWQKLSAgICAgICAgICBhcyB0aGUgZmlsZSBj aGFyYWN0ZXItc2V0LCBhbmQgdGhlbiB0aGUgYXBwcm9wcmlhdGUgdHJhbnNmZXIKLSAgICAgICAg ICBjaGFyYWN0ZXIgc2V0IGlzIGNob3NlbiBmcm9tIHRoZSBhc3NvY2lhdGlvbnMgbGlzdC4KLQot ICAgVUNTMiBURVhUCi0gICAgICAgICAgVW5pY29kZSBpbiBpdHMgYmFzaWMgZm9ybSwgMTYgYml0 cyAoMiBvY3RldHMpIHBlciBjaGFyYWN0ZXIuCi0gICAgICAgICAgV2hlbiBzZW5kaW5nIHN1Y2gg ZmlsZXMsIFVDUzIgaXMgdGhlIGZpbGUgY2hhcmFjdGVyLXNldCBhbmQgdGhlCi0gICAgICAgICAg Ynl0ZSBvcmRlciBpcyBpZGVudGlmaWVkIGF1dG9tYXRpY2FsbHk7IHRoZSBhcHByb3ByaWF0ZSB0 cmFuc2ZlcgotICAgICAgICAgIGNoYXJhY3RlciBzZXQgaXMgY2hvc2VuIGZyb20gdGhlIGFzc29j aWF0aW9ucyBsaXN0LiBOb3JtYWxseQotICAgICAgICAgIHRoaXMgd291bGQgYmUgVVRGOC4gVVRG LTE2IGlzIG5vdCBzdXBwb3J0ZWQgeWV0OyBLZXJtaXQncwotICAgICAgICAgIFVuaWNvZGUgdHJh bnNsYXRpb25zIGFyZSByZXN0cmljdGVkIHRvIFBsYW5lIDAsIHRoZSBCYXNlCi0gICAgICAgICAg TXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLgotCi0gICBVVEY4IFRFWFQKLSAgICAgICAgICBVbmlj b2RlIGluIGl0cyA4LWJpdCB0cmFuc2Zvcm1hdGlvbiBmb3JtYXQuIFdoZW4gc2VuZGluZyBzdWNo Ci0gICAgICAgICAgZmlsZXMsIFVURjggaXMgdGhlIGZpbGUgY2hhcmFjdGVyLXNldDsgdGhlIGFw cHJvcHJpYXRlIHRyYW5zZmVyCi0gICAgICAgICAgY2hhcmFjdGVyIHNldCBpcyBjaG9zZW4gZnJv bSB0aGUgYXNzb2NpYXRpb25zIGxpc3QsIG5vcm1hbGx5Ci0gICAgICAgICAgVUNTMiBvciBVVEY4 LgotCi0gICBGaWxlIHNjYW5uaW5nIGlzIGF2YWlsYWJsZSBpbiBVTklYIEMtS2VybWl0LCBpbiBL LTk1LCBhbmQgdG8gYSBsaW1pdGVkCi0gICBleHRlbnQsIGluIFZNUyBDLUtlcm1pdCAoZnVsbCBz Y2FubmluZyBpcyBwcm9ibGVtYXRpYyBpbiBWTVMgYmVjYXVzZQotICAgZXZlbiBwbGFpbi10ZXh0 IGZpbGVzIG1pZ2h0IGNvbnRhaW4gYmluYXJ5IHJlY29yZC1mb3JtYXQgaW5mb3JtYXRpb24pLgot ICAgVGhlIHJlbGV2YW50IGNvbW1hbmRzIGFyZToKLQotICAgU0VUIFRSQU5TRkVSIE1PREUgeyBB VVRPTUFUSUMsIE1BTlVBTCB9Ci0gICAgICAgICAgVGVsbHMgd2hldGhlciB0aGUgZmlsZS10cmFu c2ZlciBtb2RlICh0ZXh0IG9yIGJpbmFyeSkgc2hvdWxkIGJlCi0gICAgICAgICAgc2V0IGJ5IGF1 dG9tYXRpYyBvciAibWFudWFsIiBtZWFucy4gQVVUT01BVElDIGlzIHRoZSBkZWZhdWx0LAotICAg ICAgICAgIHdoaWNoIGFsbG93cyBhbnkgb2YgdGhlIGF1dG9tYXRpYyBtZXRob2RzIHRoYXQgYXJl IGVuYWJsZWQgdG8gZG8KLSAgICAgICAgICB0aGVpciBqb2JzOiBGSUxFIFNDQU4sIEZJTEUgUEFU VEVSTlMsIHBlZXIgcmVjb2duaXRpb24sIGV0Yy4KLSAgICAgICAgICBNQU5VQUwgbGV0cyB5b3Ug Y29udHJvbCB0aGUgdHJhbnNmZXIgbW9kZSB3aXRoIHRoZSBTRVQgRklMRSBUWVBFCi0gICAgICAg ICAgY29tbWFuZHMuIEFzIGFsd2F5cywgL1RFWFQgYW5kIC9CSU5BUlkgc3dpdGNoZXMgb24geW91 cgotICAgICAgICAgIGZpbGUtdHJhbnNmZXIgY29tbWFuZHMgb3ZlcnJpZGUgYWxsIG90aGVyIG1l dGhvZHM7IGlmIHlvdSBnaXZlCi0gICAgICAgICAgb25lIG9mIHRoZXNlIHN3aXRjaGVzLCBzY2Fu bmluZyBpcyBub3QgZG9uZS4gU0hPVyBUUkFOU0ZFUgotICAgICAgICAgIGRpc3BsYXlzIHRoZSBj dXJyZW50IFRSQU5TRkVSIE1PREUgc2V0dGluZy4KLQotICAgU0VUIEZJTEUgU0NBTiB7IE9OIFsg bnVtYmVyIF0sIE9GRiB9Ci0gICAgICAgICAgVHVybnMgdGhpcyBmZWF0dXJlIG9uIGFuZCBvZmYu IEl0J3MgT04gYnkgZGVmYXVsdC4gV2hlbiBPRkYsIHRoZQotICAgICAgICAgIHByZXZpb3VzIHJ1 bGVzIGFwcGx5IChTRVQgRklMRSBQQVRURVJOUywgZXRjKS4gV2hlbiBPTiBpcyBnaXZlbiwKLSAg ICAgICAgICB5b3UgY2FuIGFsc28gc3BlY2lmeSBhIG51bWJlciBvZiBieXRlcyB0byBiZSBzY2Fu bmVkLiBUaGUKLSAgICAgICAgICBkZWZhdWx0IGlzIDQ5MTUyICg9IDQ4SykuIElmIGEgbmVnYXRp dmUgbnVtYmVyIGlzIGdpdmVuLCB0aGUKLSAgICAgICAgICBlbnRpcmUgZmlsZSBpcyBzY2FubmVk LCBubyBtYXR0ZXIgaG93IGJpZywgZm9yIG1heGltdW0gY2VydGFpbnR5Ci0gICAgICAgICAgKGZv ciBleGFtcGxlLCBhIFBvc3RTY3JpcHQgZmlsZSB0aGF0IGFwcGVhcnMgdG8gYmUgcGxhaW4gdGV4 dAotICAgICAgICAgIG1pZ2h0IGluY2x1ZGUgYW4gZW1iZWRkZWQgZ3JhcGhpYyBwYXN0IHRoZSBu b3JtYWwgc2Nhbm5pbmcKLSAgICAgICAgICBsaW1pdCkuIFNIT1cgRklMRSBkaXNwbGF5cyB0aGUg Y3VycmVudCBGSUxFIFNDQU4gc2V0dGluZy4KLQotICAgU0VUIEZJTEUgREVGQVVMVCA3QklULUNI QVJBQ1RFUi1TRVQgbmFtZQotICAgICAgICAgIFRlbGxzIHRoZSA3LWJpdCBjaGFyYWN0ZXItc2V0 IHRvIHVzZSBpZiBzY2FubmluZyBpZGVudGlmaWVzIGEKLSAgICAgICAgICA3LWJpdCB0ZXh0IGZp bGUsIGUuZy4gR0VSTUFOLiBTSE9XIEZJTEUgZGlzcGxheXMgdGhlIGN1cnJlbnQgU0VUCi0gICAg ICAgICAgRklMRSBERUZBVUxUIHNldHRpbmdzLiBTbyBkb2VzIFNIT1cgQ0hBUkFDVEVSLVNFVFMu Ci0KLSAgIFNFVCBGSUxFIERFRkFVTFQgOEJJVC1DSEFSQUNURVItU0VUIG5hbWUKLSAgICAgICAg ICBUZWxscyB0aGUgOC1iaXQgY2hhcmFjdGVyLXNldCB0byB1c2UgaWYgc2Nhbm5pbmcgaWRlbnRp ZmllcyBhbgotICAgICAgICAgIDgtYml0IHRleHQgZmlsZSwgZS5nLiBMQVRJTjEuIFNIT1cgRklM RSBhbmQgU0hPVyBDSEFSQUNURVItU0VUCi0gICAgICAgICAgZGlzcGxheSB0aGlzLgotCi0gICBB U1NPQ0lBVEUgRklMRS1DSEFSQUNURVItU0VUIGZjcyB0Y3MKLSAgICAgICAgICBXaGVuIHNlbmRp bmcgZmlsZXMgYW5kIGEgZmlsZSBjaGFyYWN0ZXItc2V0IChmY3MpIGlzIGlkZW50aWZpZWQKLSAg ICAgICAgICBieSBzY2FubmluZywgdGhpcyB0ZWxscyBDLUtlcm1pdCB3aGljaCB0cmFuc2ZlciBj aGFyYWN0ZXItc2V0Ci0gICAgICAgICAgKHRjcykgdG8gdHJhbnNsYXRlIGl0IHRvLiBJdCBhbHNv IGFsbG93cyBDLUtlcm1pdCB0byBzZXQgdGhlCi0gICAgICAgICAgYXBwcm9wcmlhdGUgdHJhbnNm ZXIgY2hhcmFjdGVyLXNldCBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIHlvdQotICAgICAgICAgIGdp dmUgYSBTRVQgRklMRSBDSEFSQUNURVItU0VUIGNvbW1hbmQuCi0KLSAgIEFTU09DSUFURSBUUkFO U0ZFUi1DSEFSQUNURVItU0VUIHRjcyBmY3MKLSAgICAgICAgICBXaGVuIHJlY2VpdmluZyBmaWxl cyBhbmQgYSBmaWxlIGFycml2ZXMgd2hvc2UgdHJhbnNmZXIKLSAgICAgICAgICBjaGFyYWN0ZXIt c2V0ICh0Y3MpIGlzIGFubm91bmNlZCBieSB0aGUgc2VuZGVyLCB0aGlzIGNvbW1hbmQKLSAgICAg ICAgICB0ZWxscyBDLUtlcm1pdCB3aGljaCBmaWxlIGNoYXJhY3Rlci1zZXQgKGZjcykgdG8gdHJh bnNsYXRlIGl0Ci0gICAgICAgICAgdG8uIEl0IGFsc28gYWxsb3dzIEMtS2VybWl0IHRvIHNldCB0 aGUgYXBwcm9wcmlhdGUgZmlsZQotICAgICAgICAgIGNoYXJhY3Rlci1zZXQgd2hlbmV2ZXIgeW91 IGdpdmUgYSBTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVAotICAgICAgICAgIGNvbW1hbmQuCi0K LSAgIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgbmFtZQotICAgICAgICAgIFdoZW4gZ2l2ZW4gZm9y IGEgNy1iaXQgc2V0LCBhbHNvIHNldHMgRklMRSBERUZBVUxUCi0gICAgICAgICAgN0JJVC1DSEFS QUNURVItU0VUIHRvIHRoZSBzYW1lIHNldC4gV2hlbiBnaXZlbiBmb3IgYW4gOC1iaXQgc2V0LAot ICAgICAgICAgIGFsc28gc2V0cyBGSUxFIERFRkFVTFQgOEJJVC1DSEFSQUNURVItU0VUIHRvIHRo ZSBzYW1lIHNldC4gSWYgYW4KLSAgICAgICAgICBBU1NPQ0lBVEUgRklMRS1DSEFSQUNURVItU0VU IGNvbW1hbmQgaGFzIGJlZW4gZ2l2ZW4gZm9yIHRoaXMKLSAgICAgICAgICBzZXQsIGFsc28gc2V0 cyB0aGUgY29ycmVzcG9uZGluZyB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0LgotCi0gICBESVJFQ1RP UlkgL1hGRVJNT0RFIFsgZmlsZXNwZWMgXQotICAgICAgICAgIFBlcmZvcm1zIGEgZmlsZSBzY2Fu IG9mIHRoZSBnaXZlbiBmaWxlcywgbGlzdGluZyB0aGUgcmVzdWx0IGZvcgotICAgICAgICAgIGVh Y2ggZmlsZS4gSWYgRklMRSBTQ0FOIGlzIE9GRiBidXQgUEFUVEVSTlMgYXJlIE9OLCB0aGUgcmVz dWx0Ci0gICAgICAgICAgc2hvd24gYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IEZJTEUgVEVYVC1Q QVRURVJOUyBhbmQKLSAgICAgICAgICBCSU5BUlktUEFUVEVSTlMsIGFuZCBhcmUgcmVzdHJpY3Rl ZCB0byAoQikgYW5kIChUKS4gV2hlbiBGSUxFCi0gICAgICAgICAgU0NBTiBpcyBPTiwgdGhlIHJl c3VsdHMgYXJlOgotCi0gIChCKSAgICAgICAgICBCaW5hcnkKLSAgKFQpKDdCSVQpICAgIFRleHQ6 IDctYml0Ci0gIChUKSg4QklUKSAgICBUZXh0OiA4LWJpdAotICAoVCkoVVRGOCkgICAgVGV4dDog VW5pY29kZSBVVEY4Ci0gIChUKShVQ1MyQkUpICBUZXh0OiBVbmljb2RlIFVDUzIgQmlnIEVuZGlh bgotICAoVCkoVUNTMkxFKSAgVGV4dDogVW5pY29kZSBVQ1MyIExpdHRsZSBFbmRpYW4KLQotICAg ICAgICAgIFNvIHlvdSBjYW4gdXNlIERJUiAvWEZFUiB0byBnZXQgYSBwcmV2aWV3IG9mIGhvdyBl YWNoIGZpbGUgaW4gYQotICAgICAgICAgIHNlbGVjdGVkIGdyb3VwIHdpbGwgYmUgdHJhbnNmZXJy ZWQuIEV2ZXJ5dGhpbmcgdG8gdGhlIHJpZ2h0IG9mCi0gICAgICAgICAgdGhlIChCKSBvciAoVCkg aXMgbmV3LiBJZiBGSUxFIFNDQU4gaXMgT0ZGLCB5b3Ugb25seSBnZXQgdGhlIChCKQotICAgICAg ICAgIG9yIChUKSBhcyBiZWZvcmUuCi0KLSAgICAgICAgICBOb3RlOiBCaWcgYW5kIExpdHRsZSBF bmRpYW4gcmVmZXIgdG8gdGhlIG9yZGVyaW5nIG9mIGJ5dGVzCi0gICAgICAgICAgd2l0aGluIGEg Y29tcHV0ZXIgd29yZC4gQmlnIEVuZGlhbiBhcmNoaXRlY3R1cmUgaXMgc3RhbmRhcmQgYW5kCi0g ICAgICAgICAgaXMgdXNlZCBvbiBtb3N0IG5vbi1QQyBjb21wdXRlcnMuIExpdHRsZSBFbmRpYW4g YXJjaGl0ZWN0dXJlIGlzCi0gICAgICAgICAgdXNlZCBvbiBQQ3MuCi0KLSAgIFRvIGlsbHVzdHJh dGUgZmlsZS10cmFuc2ZlciB3aXRoIHNjYW5uaW5nLCBzdXBwb3NlIHlvdSBoYXZlIGEgZGlyZWN0 b3J5Ci0gICBjb250YWluaW5nIGEgbWl4dHVyZSBvZiB0ZXh0IGFuZCBiaW5hcnkgZmlsZXMsIGFu ZCBlYWNoIHRleHQgZmlsZSBjYW4KLSAgIGJlIDctYml0IEdlcm1hbiBJU08gNjQ2LCA4LWJpdCBM YXRpbi0xLCBvciBVbmljb2RlIGluIGFueSBvZiB0aGUKLSAgIGZvbGxvd2luZyBmb3JtczogVUNT MiBMaXR0bGUgRW5kaWFuLCBVQ1MyIEJpZyBFbmRpYW4sIG9yIFVURjgKLSAgIChbMzgxXVVURi0x NiBpcyBub3Qgc3VwcG9ydGVkIHlldCkuIEFzc3VtaW5nIGFsbCB0aGUgYnVpbHQtaW4gZGVmYXVs dHMKLSAgIGFyZSBpbiBlZmZlY3QsIHRoZSBmb2xsb3dpbmcgdGhyZWUgY29tbWFuZHMgZG8gdGhl IGpvYjoKLQotICBzZXQgZmlsZSBjaGFyIGdlcm1hbiAgIDsgVGhpcyBzZXRzIHRoZSBkZWZhdWx0 IGZvciA3LWJpdCB0ZXh0IGZpbGVzCi0gIHNldCBmaWxlIGNoYXIgbGF0aW4xICAgOyBUaGlzIHNl dHMgdGhlIGRlZmF1bHQgZm9yIDgtYml0IHRleHQgZmlsZXMKLSAgc2VuZCAqCi0KLSAgIEVhY2gg ZmlsZSBpcyBzZW50IGluIHRoZSBhcHByb3ByaWF0ZSBtb2RlICh0ZXh0IG9yIGJpbmFyeSksIHdp dGggdGV4dAotICAgZmlsZXMgY29udmVydGVkIHRvIHRoZSBhcHByb3ByaWF0ZSB0cmFuc2ZlciBj aGFyYWN0ZXItc2V0IGFuZCBsYWJlbGVkCi0gICBzbyB0aGUgcmVjZWl2ZXIgY2FuIGNvbnZlcnQg dGhlbSBhY2NvcmRpbmcgdG8gaXRzIG93biBsb2NhbAotICAgY29udmVudGlvbnMuCi0KLSAgIEJ5 IHRoZSB3YXksIHdoYXQgaWYgeW91IHdhbnQgdG8gaW5oaWJpdCBjaGFyYWN0ZXItc2V0IHRyYW5z bGF0aW9uIGJ1dAotICAgc3RpbGwgYWxsb3cgYXV0b21hdGljIHRleHQvYmluYXJ5IG1vZGUgc3dp dGNoaW5nPyBQcmV2aW91c2x5LCB5b3UgY291bGQKLSAgIHNpbXBseSBTRVQgVFJBTlNGRVIgQ0hB UkFDVEVSLVNFVCBUUkFOU1BBUkVOVC4gQnV0IG5vdyB3aXRoIGZpbGUKLSAgIHNjYW5uaW5nLCB0 aGUgZmlsZSBhbmQgdHJhbnNmZXIgY2hhcmFjdGVyLXNldHMgYXJlIHNldCBhdXRvbWF0aWNhbGx5 Ci0gICBwZXIgZmlsZS4gQSBuZXcgY29tbWFuZCB3YXMgYWRkZWQgZm9yIHRoaXMgcHVycG9zZToK LQotICAgU0VUIFRSQU5TRkVSIFRSQU5TTEFUSU9OIHsgT04sIE9GRiB9Ci0gICAgICAgICAgRW5h YmxlcyBhbmQgZGlzYWJsZXMgZmlsZS10cmFuc2ZlciBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9u LiBJdAotICAgICAgICAgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KLQotICAgV2hlbiBUUkFOU0ZF UiBUUkFOU0xBVElPTiBpcyBPRkYgYnV0IEZJTEUgU0NBTiBpcyBPTiwgZmlsZXMgYXJlIHN0aWxs Ci0gICBzY2FubmVkIHRvIHNlZSBpZiB0aGV5IGFyZSB0ZXh0IG9yIGJpbmFyeSwgYnV0IG5vIGNo YXJhY3Rlci1zZXQKLSAgIHRyYW5zbGF0aW9uIGlzIGRvbmUgd2hlbiB0aGV5IHRleHQ6IG9ubHkg dGhlIG5vcm1hbCByZWNvcmQtZm9ybWF0Ci0gICBjb252ZXJzaW9uLgotCi0gICBMaWtlIGFsbCBT RVQgY29tbWFuZHMsIFNFVCBUUkFOU0ZFUiBUUkFOU0xBVElPTiBpcyBnbG9iYWwgYW5kCi0gICBw ZXJzaXN0ZW50LiBZb3UgY2FuIGFsc28gZm9yY2UgYSBwYXJ0aWN1bGFyIGZpbGUtdHJhbnNmZXIg Y29tbWFuZAotICAgKFNFTkQsIE1TRU5ELCBHRVQsIFJFQ0VJVkUsIFRSQU5TTUlULCBldGMpIHRv IG5vdCB0cmFuc2xhdGUgd2l0aG91dAotICAgYWZmZWN0aW5nIHRoZSBnbG9iYWwgdHJhbnNsYXRp b24gc2V0dGluZ3MgYnkgaW5jbHVkaW5nIHRoZSBuZXcKLSAgIC9UUkFOU1BBUkVOVCBzd2l0Y2gs IGUuZy4KLQotICBzZW5kIC90cmFuc3BhcmVudCBvb2ZhLnR4dAotCi0gICBBcyBvZiBDLUtlcm1p dCA4LjAuMjA2LCBTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCBUUkFOU1BBUkVOVCBpbXBsaWVz Ci0gICBTRVQgVFJBTlNGRVIgVFJBTlNMQVRJT04gT0ZGLgotCi0gICBGaWxlIHNjYW5uaW5nIGlz IGFsc28gdXNlZCBpbiB0aGUgVFlQRSBjb21tYW5kLiBUaGUgc291cmNlIGZpbGUgdHlwZQotICAg YW5kIGNoYXJhY3RlciBzZXQgYXJlIGRldGVybWluZWQgYXMgYWJvdmUsIGFuZCB0aGVuIHRoZSBm aWxlIGlzCi0gICBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byB5b3VyIGRpc3BsYXkgY2hhcmFj dGVyLXNldCwgbGluZSBieSBsaW5lLiBJbgotICAgS2VybWl0IDk1LCB0aGUgZGlzcGxheSBjaGFy YWN0ZXItc2V0IGlzIFVuaWNvZGUsIHBlcmhhcHMgY29udmVydGVkIHRvCi0gICB5b3VyIGN1cnJl bnQgY29uc29sZSBjb2RlIHBhZ2U7IGluIG90aGVyIHZlcnNpb25zIG9mIEMtS2VybWl0LCBpdCBp cwotICAgeW91ciBjdXJyZW50IGZpbGUgY2hhcmFjdGVyLXNldC4gVGh1cyBpZiB5b3UgaGF2ZSB0 aGUgZm9sbG93aW5nIHNldAotICAgYXBwcm9wcmlhdGVseToKLQotICBTRVQgRklMRSBDSEFSQUNU RVItU0VUIChuZWNlc3NhcnkgaW4gVW5peCBidXQgbm90IEs5NSkKLSAgU0VUIEZJTEUgREVGQVVM VCA3QklUIENIQVJBQ1RFUi1TRVQKLSAgU0VUIEZJTEUgREVGQVVMVCA4QklUIENIQVJBQ1RFUi1T RVQKLQotICAgdGhlbiB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gVFlQRSBhbnkgdGV4dCBmaWxlIGFu ZCBzZWUgc29tZXRoaW5nCi0gICByZWFzb25hYmxlLiBGb3IgZXhhbXBsZSwgaW4gVW5peCwgaWYg eW91ciBERUZBVUxUIDdCSVQtQ0hBUkFDVEVSLVNFVCBpcwotICAgSVRBTElBTiBhbmQgeW91ciBE RUZBVUxUIDhCSVQtQ0hBUkFDVEVSLVNFVCBpcyBMQVRJTjEsIGFuZCB5b3VyIEZJTEUKLSAgIENI QVJBQ1RFUi1TRVQgaXMgTEFUSU4xLCB5b3UgY2FuIFRZUEUgYW4gSXRhbGlhbiBJU08gNjQ2IGZp bGUsIGEKLSAgIExhdGluLTEgZmlsZSwgb3IgYW55IGtpbmQgb2YgVW5pY29kZSBmaWxlLCBhbmQg aGF2ZSBpdCB0cmFuc2xhdGVkCi0gICBhdXRvbWF0aWNhbGx5IHRvIExhdGluLTEgZm9yIHlvdXIg ZGlzcGxheS4KLQotICAgSW4gdGhlIEdVSSB2ZXJzaW9uIG9mIEtlcm1pdCA5NSwgeW91IGNhbiBz ZWUgbWl4dHVyZXMgb2YgbWFueSBkaWZmZXJlbnQKLSAgIHNjcmlwdHMgaWYgdGhlIGZpbGUgaXMg VVRGOCBvciBVQ1MyOiBSb21hbiwgQ3lyaWxsaWMsIEhlYnJldywgR3JlZWssCi0gICBBcm1lbmlh biwgR2VvcmdpYW4sIGV0YywgYWxsIG9uIHRoZSBzYW1lIHNjcmVlbiBhdCBvbmNlLgotCi0gICBG aWxlIHNjYW5uaW5nIGFsc28gYWRkcyBhIG5ldyBjcml0ZXJpb24gZm9yIGZpbGUgc2VsZWN0aW9u LCBpLmUuIHRvCi0gICBzZWxlY3Qgb25seSB0ZXh0IChvciBiaW5hcnkpIGZpbGVzLiBTZXZlcmFs IGNvbW1hbmRzIG5vdyBpbmNsdWRlIGEgbmV3Ci0gICBzd2l0Y2gsIC9UWVBFOntCSU5BUlksVEVY VCxBTEx9LiBCSU5BUlkgbWVhbnMgc2VsZWN0IG9ubHkgYmluYXJ5Ci0gICByZWd1bGFyIGZpbGVz IChub3QgZGlyZWN0b3JpZXMpLiBURVhUIG1lYW5zIHNlbGVjdCBvbmx5IHRleHQgZmlsZXMuIEFM TAotICAgbWVhbnMgZG9uJ3Qgc2Nhbjsgc2VsZWN0IGFsbCBmaWxlcy4gRXhhbXBsZXM6Ci0KLSAg IFNFTkQgL1RZUEU6QklOQVJZICouKgotICAgICAgICAgIFNlbmRzIG9ubHkgYmluYXJ5IGZpbGVz LCBza2lwcGluZyBvdmVyIHRleHQgZmlsZXMuCi0KLSAgIE5PVEU6IEZpbGUgc2Nhbm5pbmcgaXMg Tk9UIGRvbmUgd2hlbiB1c2luZyBleHRlcm5hbCBwcm90b2NvbHMgKGJlY2F1c2UKLSAgIHRoZSBl eHRlcm5hbCBwcm90b2NvbCBwcm9ncmFtcywgc3VjaCBhcyBzeiwgYXJlIHByb2Nlc3NpbmcgZWFj aCBmaWxlLAotICAgbm90IEtlcm1pdCkuCi0KLSAgIERJUkVDVE9SWSAvVFlQRTpURVhUCi0gICAg ICAgICAgTGlzdHMgb25seSB0ZXh0IGZpbGVzIGJ1dCBub3QgYmluYXJ5IGZpbGVzLgotCi0gICBE RUxFVEUgL1RZUEU6QklOQVJZIGZvby4qCi0gICAgICAgICAgRGVsZXRlcyBhbGwgZm9vLiogZmls ZXMgdGhhdCBhcmUgcmVndWxhciBiaW5hcnkgZmlsZXMgYnV0IGRvZXMKLSAgICAgICAgICBub3Qg ZGVsZXRlIGFueSB0ZXh0IGZpbGVzLgotCi0gICBDSE1PRCAvVFlQRTpCSU5BUlkgNzc1ICoKLSAg ICAgICAgICAoVU5JWCkgQ2hhbmdlcyB0aGUgcGVybWlzc2lvbnMgb2YgYWxsIGJpbmFyeSBmaWxl cyB0byA3NzUuCi0KLSAgIFdoZW4gRklMRSBTQ0FOIGlzIE9GRiBhbmQgRklMRSBQQVRURVJOUyBh cmUgT04sIGJlaGF2aW9yIGlzIGFzIGJlZm9yZQotICAgd2l0aCBQQVRURVJOUyBPTiwgYnV0IHdp dGggc29tZSBpbXByb3ZlbWVudHM6Ci0KLSAgICAgKiBQYXRobmFtZXMgYXJlIG5vdyBzdHJpcHBl ZCBwcmlvciB0byBwYXR0ZXJuIG1hdGNoaW5nLgotICAgICAqIEJhY2t1cCBzdWZmaXhlcyAobGlr ZSAufjN+KSBhcmUgc3RyaXBwZWQgcHJpb3IgdG8gcGF0dGVybiBtYXRjaGluZy4KLQotICAgWyBb MzgyXVRvcCBdIFsgWzM4M11Db250ZW50cyBdIFsgWzM4NF1DLUtlcm1pdCBIb21lIF0gWyBbMzg1 XUtlcm1pdAotICAgSG9tZSBdCi0KLTUuIEZJTEUgQU5EIERJUkVDVE9SWSBOQU1FUyBDT05UQUlO SU5HIFNQQUNFUwotCi0gICBQcmlvciB0byB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSBncmFwaGlj YWwgdXNlciBpbnRlcmZhY2UgKEdVSSksIGl0IHdhcwotICAgaW5jb25jZWl2YWJsZSB0aGF0IGZp bGUgb3IgZGlyZWN0b3J5IG5hbWVzIGNvdWxkIGNvbnRhaW4gc3BhY2VzLAotICAgYmVjYXVzZSBz cGFjZSBpcyBhIGZpZWxkIGRlbGltaXRlciBpbiBhbGwgY29tbWFuZCBsYW5ndWFnZXMuIEdVSXMs Ci0gICBob3dldmVyLCB1c2UgZGlhbG9nIGJveGVzIGZvciBmaWxlbmFtZXMsIHNvIHRoZXJlIGlz IG5ldmVyIGFueSBxdWVzdGlvbgotICAgb2YgZGlzdGluZ3Vpc2hpbmcgYSBmaWxlbmFtZSBmcm9t IGFkamFjZW50IGZpZWxkcyAtLSBiZWNhdXNlIHRoZXJlIGFyZQotICAgbm8gYWRqYWNlbnQgZmll bGRzIC0tIGFuZCB0aGVyZWZvcmUgaXQgaGFzIGJlY29tZSBxdWl0ZSBjb21tb24gb24KLSAgIGNv bXB1dGVycyB0aGF0IGhhdmUgR1VJcyB0byBoYXZlIGZpbGUgYW5kIGRpcmVjdG9yeSBuYW1lcyBj b21wb3NlZCBvZgotICAgbXVsdGlwbGUgd29yZHMuIE9mIGNvdXJzZSB0aGlzIHBvc2VzIHByb2Js ZW1zIGZvciBjb21tYW5kIHNoZWxscyBhbmQKLSAgIG90aGVyIHRleHQtb3JpZW50ZWQgcHJvZ3Jh bXMuCi0KLSAgIE1vc3QgY29tbWFuZCBzaGVsbHMgYWRkcmVzcyB0aGVzZSBwcm9ibGVtcyBieSBh bGxvd2luZyBzdWNoIG5hbWVzIHRvIGJlCi0gICBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXMsIGUu Zy46Ci0KLSAgY2QgImM6XFByb2dyYW0gRmlsZXMiCi0KLSAgIEMtS2VybWl0IHByZXZpb3VzbHkg dXNlZCBicmFjZXMgZm9yIHRoaXM6Ci0KLSAgY2Qge2M6XFByb2dyYW0gRmlsZXN9Ci0KLSAgIHdo aWNoIHdhcyBub3Qgd2hhdCBtb3N0IHBlb3BsZSBleHBlY3RlZC4gQW5kIGV2ZW4gd2hlbiBicmFj ZXMgd2VyZQotICAgdXNlZCwgS2VybWl0IGhhZCBkaWZmaWN1bHRpZXMgd2l0aCBjb21wbGV0aW9u LCBmaWxlIG1lbnVzLCBhbmQgc28KLSAgIGZvcnRoLCB3aXRoaW4gYnJhY2VkIGZpZWxkcy4KLQot ICAgQy1LZXJtaXQgOC4wIGFsbG93cyBlaXRoZXIgZG91YmxlcXVvdGVzIG9yIGJyYWNlcyB0byBi ZSB1c2VkIGZvcgotICAgZ3JvdXBpbmc6Ci0KLSAgc2VuZCAidGhpcyBmaWxlIgotICBzZW5kIHt0 aGlzIGZpbGV9Ci0gIHJlbmFtZSAidGhpcyBmaWxlIiAidGhhdCBmaWxlIgotICByZW5hbWUge3Ro aXMgZmlsZX0gInRoYXQgZmlsZSIKLSAgcmVuYW1lICJ0aGlzIGZpbGUiIHt0aGF0IGZpbGV9Ci0g IGNkIHtQcm9ncmFtIEZpbGVzfQotICBjZCAiUHJvZ3JhbSBGaWxlcyIKLQotICAgTm90ZSB0aGF0 IHRoZSBkb3VibGVxdW90ZXMgb3IgYnJhY2tldHMgbXVzdCBlbmNsb3NlIHRoZSB3aG9sZSBmaWxl IG9yCi0gICBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbjoKLQotICAiYzpcTXkgRGlyZWN0b3J5Igot Ci0gICBub3Q6Ci0KLSAgYzpcIk15IERpcmVjdG9yeSIKLQotICAgSW4gQy1LZXJtaXQgOC4wLCB5 b3UgY2FuIGFsc28gdXNlIGNvbXBsZXRpb24gb24gdGhlc2UgZmlsZW5hbWVzLCBpbgotICAgd2hp Y2ggY2FzZSBLZXJtaXQgc3VwcGxpZXMgdGhlIHF1b3RlcyAob3IgYnJhY2VzKSBhdXRvbWF0aWNh bGx5LgotICAgRXhhbXBsZSAoaW4gd2hpY2ggdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGNvbnRhaW5z IG9ubHkgb25lIGZpbGUgd2hvc2UKLSAgIG5hbWUgc3RhcnRzIHdpdGggInRoIiBhbmQgaXRzIGZ1 bGwgbmFtZSBpcyAidGhpcyBmaWxlIiAod2l0aG91dCB0aGUKLSAgIHF1b3RlcywgYnV0IHdpdGgg dGhlIHNwYWNlKSk6Ci0KLSAgY2F0IHRoPFRhYj4KLQotICAgS2VybWl0IHJlcGFpbnRzIHRoZSBm aWxlbmFtZSBmaWVsZCBsaWtlIHRoaXM6Ci0KLSAgY2F0ICJ0aGlzIGZpbGUiCi0KLSAgIFRoYXQg aXMsIGl0IGJhY2tzcGFjZXMgb3ZlciB0aGUgb3JpZ2luYWwgInRoIiBhbmQgdGhlbiB3cml0ZXMg dGhlCi0gICBmaWxlbmFtZSBpbiBkb3VibGVxdW90ZXMuCi0KLSAgIElmIGNvbXBsZXRpb24gaXMg b25seSBwYXJ0aWFsLCBLZXJtaXQgc3RpbGwgc3VwcGxpZXMgdGhlIHF1b3RlcywgYnV0IGluCi0g ICB0aGlzIGNhc2UgYWxzbyBiZWVwcy4gVG8gY29udGludWUgdGhlIGZpbGVuYW1lLCB5b3UgbXVz dCBmaXJzdAotICAgYmFja3NwYWNlIG92ZXIgdGhlIGNsb3NpbmcgcXVvdGUuIFRoZSBjbG9zaW5n IHF1b3RlIGlzIHN1cHBsaWVkIGluIHRoaXMKLSAgIGNhc2UgdG8gbWFrZSBzdXJlIHRoYXQgeW91 IGNhbiBzZWUgdGhlIHNwYWNlcywgZXNwZWNpYWxseSBpZiB0aGV5IGFyZQotICAgdHJhaWxpbmcu IEZvciBleGFtcGxlLCBpZiB0aGUgY3VycmVudCBkaXJlY3RvcnkgY29udGFpbnMgdHdvIGZpbGVz Ci0gICB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICJ0aCIsIGFuZCB0aGVpciBmaWxsIG5hbWVzIGFy ZSAidGhpcyBmaWxlIiBhbmQKLSAgICJ0aGlzIG90aGVyIGZpbGUiOgotCi0gIGNhdCB0aDxUYWI+ Ci0KLSAgIEtlcm1pdCBwcmludHM6Ci0KLSAgY2F0ICJ0aGlzICI8QmVlcD4KLQotICAgSWYgaXQg ZGlkbid0IHByaW50IHRoZSBjbG9zaW5nIHF1b3RlLCB5b3Ugd291bGQgcHJvYmFibHkgd29uZGVy IHdoeSBpdAotICAgd2FzIGJlZXBpbmcuCi0KLSAgIEFsc28sIGlmIHlvdSBiZWdpbiBhIGZpbGVu YW1lIGZpZWxkIHdpdGggYSBkb3VibGVxdW90ZSBvciBvcGVuaW5nCi0gICBicmFjZSwgbm93IHlv dSBjYW4gdXNlIGNvbXBsZXRpb24gb3IgZ2V0ID8taGVscDsgdGhpcyB3YXMgbmV2ZXIKLSAgIHBv c3NpYmxlIGJlZm9yZS4KLQotIEMtS2VybWl0PnR5cGUgInRoaT8gSW5wdXQgZmlsZSBzcGVjaWZp Y2F0aW9uLCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAgIHRoaXMgZmlsZSAgICAgICAgdGhpcyBv dGhlciBmaWxlCi0gQy1LZXJtaXQ+dHlwZSAidGhpXwotCi0gICBbIFszODZdVG9wIF0gWyBbMzg3 XUNvbnRlbnRzIF0gWyBbMzg4XUMtS2VybWl0IEhvbWUgXSBbIFszODldS2VybWl0Ci0gICBIb21l IF0KLQotNi4gT1RIRVIgQ09NTUFORCBQQVJTSU5HIElNUFJPVkVNRU5UUwotCi02LjEuIEdyb3Vw aW5nIE1hY3JvIEFyZ3VtZW50cwotCi0gICBEb3VibGVxdW90ZXMgbm93IGNhbiBiZSB1c2VkIGlu IG1hY3JvIGludm9jYXRpb25zIHRvIGdyb3VwIGFyZ3VtZW50cwotICAgY29udGFpbmluZyBzcGFj ZXMsIHdoZXJlIHByZXZpb3VzbHkgb25seSBicmFjZXMgY291bGQgYmUgdXNlZDoKLQotICBkZWZp bmUgeHggc2hvdyBhcmdzCi0gIHh4IG9uZSAidGhpcyBpcyB0d28iIHRocmVlCi0KLSAgIFJlc3Vs dDoKLQotICBNYWNybyBhcmd1bWVudHMgYXQgbGV2ZWwgMCAoXHYoYXJnYykgPSA0KToKLSAgIFwl MCA9IHh4Ci0gICBcJTEgPSBvbmUKLSAgIFwlMiA9IHRoaXMgaXMgdHdvCi0gICBcJTMgPSB0aHJl ZQotCi0gICBBbHNvLCB5b3UgY2FuIG5vdyBxdW90ZSBicmFjZXMgYW5kIHF1b3RlcyBpbiBtYWNy byBhcmdzICh0aGlzIGRpZG4ndAotICAgd29yayBiZWZvcmUpLiBFeGFtcGxlczoKLQotICB4eCAi eyIgIDsgVGhlIGFyZ3VtZW50IGlzIGEgc2luZ2xlIGxlZnQgYnJhY2UKLSAgeHggeyJ9ICA7IFRo ZSBhcmd1bWVudCBpcyBhIGRvdWJsZXF1b3RlIGNoYXJhY3RlcgotCi0gICBJbiBjYXNlIHRoaXMg bmV3IGJlaGF2aW9yIGludGVyZmVyZXMgd2l0aCB5b3VyIHNjcmlwdHMsIHlvdSBjYW4gcmVzdG9y ZQotICAgdGhlIHByZXZpb3VzIGJlaGF2aW9yIHdpdGg6Ci0KLSAgU0VUIENPTU1BTkQgRE9VQkxF UVVPVElORyBPRkYKLQotNi4yLiBEaXJlY3RvcnkgYW5kIEZpbGUgTmFtZSBDb21wbGV0aW9uCi0K LSAgIEMtS2VybWl0IDguMCBhbHNvIGluY2x1ZGVzIGJldHRlciBjb21wbGV0aW9uIGZvciBkaXJl Y3RvcnkgbmFtZXMsIGUuZy4KLSAgIGluIHRoZSBDRCBjb21tYW5kLiBJZiB0aGUgbmFtZSB0eXBl ZCBzbyBmYXIgdW5pcXVlbHkgbWF0Y2hlcyBhCi0gICBkaXJlY3RvcnkgbmFtZSwgaXQgaXMgY29t cGxldGVkIChhcyBiZWZvcmUpLCBidXQgbm93IGlmIHRoZSBkaXJlY3RvcnkKLSAgIGNvbnRhaW5z IGFueSBzdWJkaXJlY3RvcmllcywgY29tcGxldGlvbiBpcyBwYXJ0aWFsIChhbGxvd2luZyB5b3Ug dG8KLSAgIHN1cHBseSBhZGRpdGlvbmFsIHBhdGggc2VnbWVudHMgd2l0aG91dCBiYWNrc3BhY2lu Zyk7IG90aGVyd2lzZSBpdCBpcwotICAgY29tcGxldGUuCi0KLSAgIENvbXBsZXRpb24gaGFzIGFs c28gYmVlbiBpbXByb3ZlZCBmb3IgZmlsZSBhbmQgZGlyZWN0b3J5IG5hbWVzIHRoYXQKLSAgIGNv bnRhaW4gbm90IG9ubHkgc3BhY2VzIChhcyBkZXNjcmliZWQgYWJvdmUpIGJ1dCBhbHNvICJtZXRh Y2hhcmFjdGVycyIKLSAgIHN1Y2ggYXMgYXN0ZXJpc2sgKCopIGFuZCB0aWxkZSAofik6IG5vdyB0 aGUgZmllbGQgaXMgcmVwYWludGVkIGlmCi0gICBuZWNlc3NhcnkuIEZvciBleGFtcGxlLCBpZiB0 aGUgY3VycmVudCBkaXJlY3RvcnkgY29udGFpbnMgb25seSBvbmUgZmlsZQotICAgd2hvc2UgbmFt ZSBjb250YWlucyAiYmxhaCIsIHRoZW4gaW46Ci0KLSAgdHlwZSAqYmxhaDxUYWI+Ci0KLSAgICIq YmxhaCIgaXMgcmVwbGFjZWQgYnkgdGhlIGZpbGVuYW1lLiBJbiBlYXJsaWVyIHJlbGVhc2VzLCB0 aGUgcGFydAotICAgdHlwZWQgc28gZmFyIHdhcyBsZWZ0IG9uIHRoZSBjb21tYW5kIGxpbmUgKGFu ZCBpbiB0aGUgaGlzdG9yeSBidWZmZXIpLAotICAgc28gZXZlbiB3aGVuIHRoZSBvcmlnaW5hbCBj b21tYW5kIHdvcmtlZCwgdGhlIHJlY2FsbGVkIHZlcnNpb24gd291bGQKLSAgIG5vdC4gU2ltaWxh cmx5IGZvciB+ICh0aGUgbmVhcmx5LXVuaXZlcnNhbCBVbml4IG5vdGF0aW9uIGZvciB1c2VybmFt ZSk6Ci0KLSAgdHlwZSB+b2xnYS94PFRhYj4KLQotICAgaXMgcmVwYWludGVkIGFzIChlLmcuKToK LQotICB0eXBlIC91c2Vycy9ob21lL29sZ2EveChCZWVwKQotCi0gICBTcGVha2luZyBvZiBjb21t YW5kIGhpc3RvcnksIHRoZSBuZXcgU0hPVyBISVNUT1JZIGNvbW1hbmQgc2hvd3MgeW91cgotICAg Y29tbWFuZCBoaXN0b3J5IGFuZCByZWNhbGwgYnVmZmVyLiBTQVZFIENPTU1BTkQgSElTVE9SWSBz YXZlcyBpdCBpbnRvIGEKLSAgIGZpbGUgb2YgeW91ciBjaG9pY2UuCi0KLTYuMy4gUGFzc2luZyBB cmd1bWVudHMgdG8gQ29tbWFuZCBGaWxlcwotCi0gICBUaGUgbWV0aG9kIGZvciBwYXNzaW5nIGFy Z3VtZW50cyB0byBjb21tYW5kIGZpbGVzIGhhcyBiZWVuIGltcHJvdmVkLgotICAgUHJpb3IgdG8g Qy1LZXJtaXQgNy4wIHRoZXJlIHdhcyBubyBwcm92aXNpb24gZm9yIGRvaW5nIHRoaXMuIEluCi0g ICBDLUtlcm1pdCA3LjAsIHRoZSBUQUtFIGNvbW1hbmQgd2FzIGNoYW5nZWQgdG8gYWxsb3cgYXJn dW1lbnRzIHRvIGJlCi0gICBnaXZlbiBhZnRlciB0aGUgZmlsZW5hbWU6Ci0KLSAgdGFrZSBjb21t YW5kZmlsZSBhcmcxIGFyZzIgLi4uCi0KLSAgIFRoaXMgd2FzIGFjY29tcGxpc2hlZCBieSByZXBs YWNpbmcgdGhlIGN1cnJlbnQgXCUxLCBcJTIsIGV0Yywgd2l0aCB0aGUKLSAgIGdpdmVuIGFyZ3Vt ZW50cywgc2luY2UgYSBuZXcgc2V0IG9mIG1hY3JvIGFyZ3VtZW50IHZhcmlhYmxlcyBpcyBjcmVh dGVkCi0gICBvbmx5IHdoZW4gYSBtYWNybyBpcyBleGVjdXRlZCwgbm90IGEgY29tbWFuZCBmaWxl LiBJdCBpcyBtdWNoIG1vcmUKLSAgIGludHVpdGl2ZSwgaG93ZXZlciwgaWYgYXJndW1lbnRzIHRv IGNvbW1hbmQgZmlsZXMgd29ya2VkIGxpa2UgdGhvc2UgdG8KLSAgIG1hY3JvczogdGhlIGNvbW1h bmQgZmlsZSBzZWVzIHRoZSBhcmd1bWVudHMgYXMgaXRzIG93biBcJTEsIFwlMiwgZXRjLAotICAg YnV0IHRoZSBjYWxsZXIncyB2YXJpYWJsZXMgYXJlIG5vdCBkaXN0dXJiZWQuIEMtS2VybWl0IDgu MCBhY2NvbXBsaXNoZXMKLSAgIHRoaXMgYnkgYXV0b21hdGljYWxseSBjcmVhdGluZyBhbiBpbnRl cm1lZGlhdGUgdGVtcG9yYXJ5IG1hY3JvIHRvIHN0YXJ0Ci0gICB0aGUgY29tbWFuZCBmaWxlIChp ZiBhbnkgYXJndW1lbnRzIHdlcmUgZ2l2ZW4pLCB0aHVzIGNyZWF0aW5nIGEgbmV3Ci0gICBsZXZl bCBvZiBhcmd1bWVudHMgYXMgZXhwZWN0ZWQuCi0KLTYuNC4gTW9yZS1Qcm9tcHRpbmcKLQotICAg VGhlIGZhbWlsaWFyIC0tbW9yZT8tLSBwcm9tcHQgdGhhdCBhcHBlYXJzIGF0IHRoZSBlbmQgb2Yg ZWFjaCBzY3JlZW5mdWwKLSAgIG9mIGNvbW1hbmQtcmVzcG9uc2Ugb3V0cHV0IG5vdyBhY2NlcHRz IGEgbmV3IGFuc3dlcjogRyAoR28pIG1lYW5pbmcKLSAgICJzaG93IGFsbCB0aGUgcmVzdCB3aXRo b3V0IHBhdXNpbmcgYW5kIGFza2luZyBtZSBhbnkgbW9yZSBxdWVzdGlvbnMiLiBQCi0gICAoUHJv Y2VlZCkgaXMgYSBzeW5vbnltIGZvciBHLgotCi02LjUuIENvbW1hcyBpbiBNYWNybyBEZWZpbml0 aW9ucwotCi0gICBBcyBub3RlZCBpbiB0aGUgWzM5MF1DLUtlcm1pdCBtYW51YWwsIGNvbW1hIGlz IHVzZWQgdG8gc2VwYXJhdGUKLSAgIGNvbW1hbmRzIGluIGEgbWFjcm8gZGVmaW5pdGlvbi4gRXZl biB3aGVuIHRoZSBtYWNybyBpcyBkZWZpbmVkIG9uCi0gICBtdWx0aXBsZSBsaW5lcyB1c2luZyBj dXJseS1icmFjZSBibG9jay1zdHJ1Y3R1cmUgbm90YXRpb24gd2l0aG91dAotICAgY29tbWFzLCB0 aGUgZGVmaW5pdGlvbiBpcyBzdGlsbCBzdG9yZWQgaW50ZXJuYWxseSBhcyBhIGNvbW1hLXNlcGFy YXRlZAotICAgbGlzdCBvZiBjb21tYW5kcy4gVGhlcmVmb3JlIHNwZWNpYWwgdHJpY2tzIGFyZSBu ZWVkZWQgdG8gaW5jbHVkZSBhCi0gICBjb21tYSBpbiBhIGNvbW1hbmQuIFRoZSBjbGFzc2ljIGV4 YW1wbGUgaXM6Ci0KLSAgZGVmaW5lIGZvbyB7Ci0gICAgICAoc29tZSBjb21tYW5kKQotICAgICAg aWYgZmFpbCBlY2hvIFNvcnJ5LCBibGFoIGZhaWxlZC4uLgotICB9Ci0KLSAgIFRoaXMgd291bGQg cmVzdWx0IGluIEtlcm1pdCB0cnlpbmcgdG8gZXhlY3V0ZSBhICJibGFoIiBjb21tYW5kLiBUaGlz Ci0gICBjb3VsZCBhbHdheXMgYmUgaGFuZGxlZCBieSBlbmNsb3NpbmcgdGhlIHRleHQgaW4gYnJh Y2VzOgotCi0gIGRlZmluZSBmb28gewotICAgICAgKHNvbWUgY29tbWFuZCkKLSAgICAgIGlmIGZh aWwgZWNobyB7U29ycnksIGJsYWggZmFpbGVkLi4ufQotICB9Ci0KLSAgIGJ1dCBkb3VibGVxdW90 ZXMgKG1vcmUgaW50dWl0aXZlKSBzaG91bGQgaGF2ZSB3b3JrZWQgdG9vLiBOb3cgdGhleSBkbzoK LQotICBkZWZpbmUgZm9vIHsKLSAgICAgIChzb21lIGNvbW1hbmQpCi0gICAgICBpZiBmYWlsIGVj aG8gIlNvcnJ5LCBibGFoIGZhaWxlZC4uLiIKLSAgfQotCi02LjYuIEFycm93IEtleXMKLQotICAg QXMgb2YgdmVyc2lvbiA4LjAuMjAxLCBDLUtlcm1pdCBvbiBtb3N0IHBsYXRmb3JtcyBsZXRzIHlv dSBhY2Nlc3MgdGhlCi0gICBjb21tYW5kIGhpc3RvcnkgYnVmZmVyIHdpdGggYXJyb3cga2V5cywg anVzdCBhcyB5b3UgYWx3YXlzIGNvdWxkIHdpdGgKLSAgIGNvbnRyb2wgY2hhcmFjdGVycy4gVGhl IHJlc3RyaWN0aW9ucyBhcmU6Ci0KLSAgICAxLiBPbmx5IFVwIGFuZCBEb3duIGFycm93IGtleXMg YXJlIGFjY2VwdGVkLgotICAgIDIuIE9ubHkgNy1iaXQgQU5TSSBhcnJvdy1rZXkgc2VxdWVuY2Vz IGFyZSB1bmRlcnN0b29kIChFU0MgZm9sbG93ZWQgYnkKLSAgICAgICBbIG9yIHVwcGVyY2FzZSBs ZXR0ZXIgTywgZm9sbG93ZWQgYnkgdXBwZXJjYXNlIGxldHRlciBBIG9yICh1cCkgQgotICAgICAg IChkb3duKS4KLQotICAgVGhpcyBjaGFuZ2Ugd2FzIG1hZGUgdG8gZmFjaWxpdGF0ZSBjb21tYW5k IHJlY2FsbCBpbiBMaW51eC1iYXNlZCBQREFzCi0gICB0aGF0IGRvbid0IGhhdmUgYSBDb250cm9s IGtleSwgb3IgYXQgbGVhc3Qgbm90IG9uZSB0aGF0J3MgZWFzaWx5IChvcgotICAgYWx3YXlzKSBh Y2Nlc3NpYmxlLCBzdWNoIGFzIHRoZSBTaGFycCBaYXVydXMgU0w1NTAwLgotCi0gICBbIFszOTFd VG9wIF0gWyBbMzkyXUNvbnRlbnRzIF0gWyBbMzkzXUMtS2VybWl0IEhvbWUgXSBbIFszOTRdS2Vy bWl0Ci0gICBIb21lIF0KLQotNy4gTkVXIENPTU1BTkRTIEFORCBTV0lUQ0hFUwotCi0gICBTZWUg WzM5NV1TZWN0aW9uIDQgZm9yIG1vcmUgYWJvdXQgZmlsZSBzY2FubmluZyBhbmQgdGhlIC9UWVBF OiBzd2l0Y2guCi0KLSAgIEFTS1tRXSBbIC9USU1FT1VUOm51bWJlciAvUVVJRVQgL0RFRkFVTFQ6 dGV4dCBdIHZhcmlhYmxlIFsgcHJvbXB0IF0KLSAgICAgICAgICBUaGUgbmV3IG9wdGlvbmFsIC9U SU1FT1VUOiBzd2l0Y2ggZm9yIEFTSyBhbmQgQVNLUSBjYXVzZXMgdGhlCi0gICAgICAgICAgY29t bWFuZCB0byB0aW1lIG91dCBhbmQgYW5kIGZhaWwgaWYgbm8gcmVzcG9uc2UgaXMgZ2l2ZW4gd2l0 aGluCi0gICAgICAgICAgdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygc2Vjb25kcywgMSBvciBncmVh dGVyICgwIG9yIGxlc3MgbWVhbnMKLSAgICAgICAgICBubyB0aW1lb3V0LCB3YWl0IGZvcmV2ZXIp LiBUaGlzIHdvcmtzIGp1c3QgbGlrZSBTRVQgQVNLLVRJTUVSLAotICAgICAgICAgIGV4Y2VwdCBp dHMgZWZmZWN0IGlzIGxvY2FsIHRvIHRoZSBBU0sgY29tbWFuZCB3aXRoIHdoaWNoIGl0IGlzCi0g ICAgICAgICAgZ2l2ZW4gYW5kIGl0IGRvZXMgbm90IGRpc3R1cmIgdGhlIGdsb2JhbCBhc2sgdGlt ZXIgc2V0dGluZy4gVGhlCi0gICAgICAgICAgbmV3IC9RVUlFVCBzd2l0Y2ggdGVsbHMgS2VybWl0 IG5vdCB0byBwcmludCBhbiBlcnJvciBtZXNzYWdlIGlmCi0gICAgICAgICAgdGhlIEFTSyBvciBB U0tRIGNvbW1hbmQgdGltZXMgb3V0IHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UuCi0KLSAgICAgICAg ICBWZXJzaW9uIDguMC4yMTEgYWRkcyB0aGUgL0RFRkFVTFQ6dGV4dCBzd2l0Y2ggZm9yIEFTSy1D bGFzcwotICAgICAgICAgIGNvbW1hbmRzIChBU0ssIEFTS1EsIGFuZCBHRVRPSykuIFRoaXMgbGV0 cyB5b3Ugc3VwcGx5IGEgZGVmYXVsdAotICAgICAgICAgIGFuc3dlciBpbiBjYXNlIHRoZSB1c2Vy IHN1cHBsaWVzIGFuIGVtcHR5IGFuc3dlciBvciB0aGUKLSAgICAgICAgICAvVElNRU9VVDogc3dp dGNoIHdhcyBpbmNsdWRlZCBhbmQgdGhlIHRpbWUgbGltaXQgZXhwaXJlZCB3aXRob3V0Ci0gICAg ICAgICAgYW4gYW5zd2VyLiBJbiBib3RoIHRoZXNlIGNhc2VzLCB0aGUgY29tbWFuZCBzdWNjZWVk cy4KLQotICAgQ0FUIGZpbGVuYW1lCi0gICAgICAgICAgRXF1aXZhbGVudCB0byBUWVBFIC9OT1BB R0UuCi0KLSAgIENEVVAKLSAgICAgICAgICBDaGFuZ2VzIEtlcm1pdCdzIGxvY2FsIHdvcmtpbmcg ZGlyZWN0b3J5IHRvIHRoZSBwYXJlbnQgb2YgdGhlCi0gICAgICAgICAgY3VycmVudCBvbmUuIEVx dWl2YWxlbnQgdG8gImNkIC4uIiBpbiBVTklYIG9yIFdpbmRvd3MsICJjZCBbLV0iCi0gICAgICAg ICAgaW4gVk1TLCAiY2QgXiIgaW4gQU9TL1ZTLCBldGM7IGluIG90aGVyIHdvcmRzLCBpdCdzIGEK LSAgICAgICAgICBwbGF0Zm9ybS1pbmRlcGVuZGVudCB3YXkgb2YgbW92aW5nIG9uZSBsZXZlbCB1 cCBpbiBhIGRpcmVjdG9yeQotICAgICAgICAgIHRyZWUuCi0KLSAgIENITU9EIFsgc3dpdGNoZXMg XSBwZXJtaXNzaW9uIGZpbGVzCi0gICAgICAgICAgVU5JWCBvbmx5LiBTZXRzIGZpbGUgcGVybWlz c2lvbnMgZm9yIG9uZSBvciBtb3JlIGZpbGVzIG9yCi0gICAgICAgICAgZGlyZWN0b3JpZXMuIFRo ZSBwZXJtaXNzaW9uIG11c3QgYmUgZ2l2ZW4gYXMgYW4gb2N0YWwgbnVtYmVyLAotICAgICAgICAg IGUuZy4gNjY0LCA3NTUuIFN3aXRjaGVzOiAvRElSRUNUT1JJRVMsIC9GSUxFUywgL05PTElTVCwg L1BBR0UsCi0gICAgICAgICAgL0RPVEZJTEVTLCAvTElTVCwgL05PUEFHRSwgL1JFQ1VSU0lWRSwg L1RZUEU6e1RFWFQsQklOQVJZLEFMTH0sCi0gICAgICAgICAgL1NJTVVMQVRFLiBUaGUgL1RZUEU6 IHN3aXRjaCBhbGxvd3Mgc2VsZWN0aW9uIG9mIG9ubHkgdGV4dCBvcgotICAgICAgICAgIGJpbmFy eSBmaWxlcy4gRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgbWl4dHVyZSBvZiBzb3VyY2UgZmls ZXMKLSAgICAgICAgICBhbmQgZXhlY3V0YWJsZXMsIHlvdSBjYW4gdXNlICJjaG1vZCAvZmlsZXMg L3R5cGU6dGV4dCA2NjQiIHRvCi0gICAgICAgICAgZ2l2ZSBvd25lci9ncm91cCByZWFkL3dyaXRl IGFuZCB3b3JsZCByZWFkIHBlcm1pc3Npb24gdG8gdGhlCi0gICAgICAgICAgdGV4dCBmaWxlcywg YW5kICJjaG1vZCAvZmlsZXMgL3R5cGU6YmluYXJ5IDc3NSIgdG8gZ2l2ZSB0aGUgc2FtZQotICAg ICAgICAgIHBsdXMgZXhlY3V0ZSBwZXJtaXNzaW9uIHRvIHRoZSBleGVjdXRhYmxlcy4gVXNlIC9T SU1VTEFURSB0byBzZWUKLSAgICAgICAgICB3aGljaCBmaWxlcyB3b3VsZCBiZSBhZmZlY3RlZCwg d2l0aG91dCBhY3R1YWxseSBjaGFuZ2luZyB0aGVpcgotICAgICAgICAgIHBlcm1pc3Npb25zLgot Ci0gICBDTEVBUiBLRVlCT0FSRC1CVUZGRVIKLSAgICAgICAgICBGbHVzaGVzIGFueSBhcy15ZXQg dW5yZWFkIGNoYXJhY3RlcnMgZnJvbSB0aGUga2V5Ym9hcmQgaW5wdXQKLSAgICAgICAgICBidWZm ZXIuIFVzZWZ1bCBmb3IgZmx1c2hpbmcgdHlwZWFoZWFkIGluIHNjcmlwdHMuCi0KLSAgIENPTlRJ TlVFCi0gICAgICAgICAgV2hlbiBnaXZlbiBhdCBhbiBpbnRlcmFjdGl2ZSBjb21tYW5kIHByb21w dCB0aGF0IHdhcyByZWFjaGVkIGJ5Ci0gICAgICAgICAgaXNzdWluZyBhIFBST01QVCBjb21tYW5k IChkZXNjcmliZWQgaW4gdGhpcyBzZWN0aW9uKSBmcm9tIGEKLSAgICAgICAgICBzY3JpcHQsIHRo aXMgY29tbWFuZCByZXR1cm5zIHRvIHRoZSBzY3JpcHQsIGNvbnRpbnVpbmcgaXRzCi0gICAgICAg ICAgZXhlY3V0aW9uIGF0IHRoZSBjb21tYW5kIGFmdGVyIHRoZSBQUk9NUFQgY29tbWFuZC4gSW4g dGhpcwotICAgICAgICAgIGNvbnRleHQsIENPTlRJTlVFIGlzIHNpbXBseSBhIG1vcmUtaW50dWl0 aXZlIHN5bm9ueW0gZm9yIEVORC4KLQotICAgQ09QWSwgUkVOQU1FLCBhbmQgVFJBTlNMQVRFCi0g ICAgICAgICAgVGhlc2UgY29tbWFuZHMgbm93IHdvcmsgb24gZmlsZSBncm91cHMgaWYgdGhlIHRh cmdldCBmaWxlbmFtZSBpcwotICAgICAgICAgIGEgZGlyZWN0b3J5LCBlLmcuICJjb3B5IG9vZmEu KiAuLiIsICJyZW5hbWUgKiB+b2xnYS90bXAvIgotCi0gICBDT1BZIC9BUFBFTkQgc291cmNlIGRl c3RpbmF0aW9uCi0gICAgICAgICAgVGhlIHNvdXJjZSBmaWxlIHNwZWNpZmljYXRpb24gY2FuIG5v dyBpbmNsdWRlIHdpbGRjYXJkcywgaW4KLSAgICAgICAgICB3aGljaCBjYXNlIGFsbCBvZiB0aGUg c291cmNlIGZpbGVzIHRoYXQgbWF0Y2ggd2lsbCBnbyBpbnRvIHRoZQotICAgICAgICAgIGRlc3Rp bmF0aW9uIGZpbGUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIGJ5IG5hbWUuCi0KLSAgIERFTEVURSAv QVNLCi0gICAgICAgICAgQXNrcyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBlYWNoIGZpbGUgYmVmb3Jl IGRlbGV0aW5nIGl0LiBJbgotICAgICAgICAgIEMtS2VybWl0IDcuMCwgdGhlIGFuc3dlcnMgd2Vy ZSAieWVzIiAob3IgIm9rIikgYW5kICJubyIuCi0gICAgICAgICAgQy1LZXJtaXQgOC4wIGFkZHMg ImdvIiAobWVhbmluZywgZGVsZXRlIGFsbCB0aGUgcmVzdCB3aXRob3V0Ci0gICAgICAgICAgYXNr aW5nKSBhbmQgInF1aXQiIChjYW5jZWwgdGhlIERFTEVURSBjb21tYW5kIGFuZCByZXR1cm4gdG8g dGhlCi0gICAgICAgICAgcHJvbXB0KS4KLQotICAgREVMRVRFIC9ESVJFQ1RPUklFUwotICAgICAg ICAgIERlbGV0ZXMgbm90IG9ubHkgZmlsZXMgYnV0IGFsc28gZGlyZWN0b3JpZXMuCi0KLSAgIERF TEVURSAvUkVDVVJTSVZFCi0gICAgICAgICAgRGVsZXRlcyBhbGwgZmlsZXMgdGhhdCBtYXRjaCB0 aGUgZ2l2ZW4gZmlsZSBzcGVjaWZpY2F0aW9uIGluIHRoZQotICAgICAgICAgIGN1cnJlbnQgKG9y IGdpdmVuKSBkaXJlY3RvcnkgYW5kIGFsbCBkaXJlY3RvcmllcyBiZW5lYXRoIGl0LgotCi0gICBE RUxFVEUgL1NVTU1BUlkKLSAgICAgICAgICBQcmludHMgb25seSB0aGUgbnVtYmVyIG9mIGZpbGVz IGRlbGV0ZWQgYW5kIHRvdGFsIHNpemUgZnJlZWQsCi0gICAgICAgICAgd2l0aG91dCBsaXN0aW5n IGVhY2ggZmlsZS4KLQotICAgREVMRVRFIC9UUkVFCi0gICAgICAgICAgU2hvcnRoYW5kIGZvciBE RUxFVEUgL1JFQ1VSU0lWRSAvRElSRUNUT1JJRVMgL0RPVEZJTEVTLy4KLSAgICAgICAgICBFcXVp dmFsZW50IHRvIFdpbmRvd3MgREVMVFJFRSBvciBVbml4ICJybSAtUmYiLiBJZiBubyBmaWxlCi0g ICAgICAgICAgc3BlY2lmaWNhdGlvbiBpcyBnaXZlbiwgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJy ZW50IGRpcmVjdG9yeSwKLSAgICAgICAgICBwbHVzIGFsbCBvZiBpdHMgc3ViZGlyZWN0b3JpZXMg YW5kIHRoZWlyIGNvbnRlbnRzLCBhcmUgZGVsZXRlZC4KLQotICAgREVMRVRFIC9UWVBFOkJJTkFS WQotICAgICAgICAgIERlbGV0ZSBvbmx5IHJlZ3VsYXIgYmluYXJ5IGZpbGVzIChyZXF1aXJlcyBG SUxFIFNDQU4gT04pLgotCi0gICBERUxFVEUgL1RZUEU6VEVYVAotICAgICAgICAgIERlbGV0ZSBv bmx5IHJlZ3VsYXIgdGV4dCBmaWxlcyAocmVxdWlyZXMgRklMRSBTQ0FOIE9OKS4KLQotICAgRElS RUNUT1JZIFsgc3dpdGNoZXMgXSBbIGZpbGVzcGVjIFsgZmlsZXNwZWMgWyBmaWxlc3BlYyAuLi4g XSBdIF0KLSAgICAgICAgICBUaGUgRElSRUNUT1JZIGNvbW1hbmQgbm93IGFjY2VwdHMgbW9yZSB0 aGFuIG9uZSBmaWxlCi0gICAgICAgICAgc3BlY2lmaWNhdGlvbjsgZS5nLiAiZGlyZWN0b3J5IG1v b24udHh0IHN1bi5kb2Mgc3RhcnMuKiIuCi0KLSAgIERJUkVDVE9SWSAvTk9SRUNVUlNJVkUgeHh4 Ci0gICAgICAgICAgSWYgeHh4IGlzIGEgZGlyZWN0b3J5IG5hbWUsIGZvcmNlcyBsaXN0aW5nIG9m IHRoZSBkaXJlY3RvcnkKLSAgICAgICAgICBpdHNlbGYgcmF0aGVyIHRoYW4gaXRzIGNvbnRlbnRz LgotCi0gICBESVJFQ1RPUlkgL0ZPTExPV0xJTktTIHh4eAotICAgICAgICAgIChVTklYIG9ubHkp IFRlbGxzIHRoZSBESVJFQ1RPUlkgY29tbWFuZCB0byBmb2xsb3cgc3ltYm9saWMKLSAgICAgICAg ICBsaW5rcy4gVGhpcyBub3QgdGhlIGRlZmF1bHQgYmVjYXVzZSBpdCBjYW4gY2F1c2UgZW5kbGVz cyBsb29wcy4KLQotICAgRElSRUNUT1JZIC9OT0ZPTExPV0xJTktTIHh4eAotICAgICAgICAgIChV TklYIG9ubHkpIFRlbGxzIHRoZSBESVJFQ1RPUlkgY29tbWFuZCBub3QgdG8gZm9sbG93IHN5bWJv bGljCi0gICAgICAgICAgbGlua3MsIGJ1dCByYXRoZXIsIG1lcmVseSB0byBsaXN0IHRoZW0uIFRo aXMgaXMgdGhlIGRlZmF1bHQuCi0KLSAgIERJUkVDVE9SWSAvT1VUUFVUOmZpbGVuYW1lCi0gICAg ICAgICAgU2VuZHMgdGhlIHJlc3VsdHMgb2YgdGhlIERJUkVDVE9SWSBjb21tYW5kIHRvIHRoZSBn aXZlbiBmaWxlLgotCi0gICBESVJFQ1RPUlkgL1NVTU1BUlkKLSAgICAgICAgICBQcmludHMgb25s eSB0aGUgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyBhbmQgdGhlIHRvdGFsCi0gICAg ICAgICAgc2l6ZSwgd2l0aG91dCBsaXN0aW5nIGVhY2ggZmlsZS4KLQotICAgRElSRUNUT1JZIC9U WVBFOntURVhULEJJTkFSWX0KLSAgICAgICAgICBTaG93cyBvbmx5IGZpbGVzIG9mIHRoZSBzZWxl Y3RlZCB0eXBlLCBiYXNlZCBvbiBmaWxlIHNjYW4uCi0KLSAgIERJUkVDVE9SWSAvWEZFUk1PREUK LSAgICAgICAgICBOb3cgc2hvd3MgcmVzdWx0cyBvZiBmaWxlIHNjYW4gKHNlZSBbMzk2XVNlY3Rp b24gNCkuCi0KLSAgIEZPUEVOIFsgc3dpdGNoZXMgXSBjaGFubmVsIGZpbGVuYW1lCi0KLSAgICAg ICAgICBBcyBvZiB2ZXJzaW9uIDguMC4yMTEsIEZPUEVOIGFsbG93cyAvZGV2L3R0eSBhcyBhIGZp bGVuYW1lIGluCi0gICAgICAgICAgVW5peC1iYXNlZCBvcGVyYXRpbmcgc3lzdGVtcy4KLQotICAg RlJFQUQgL1RSSU0KLSAgICAgICAgICAoOC4wLjIxMSkgVHJpbXMgYW55IHRyYWlsaW5nIGJsYW5r cyBvciB0YWJzIGZyb20gdGhlIGl0ZW0gKHN1Y2gKLSAgICAgICAgICBhcyBhIGxpbmUgb2YgdGV4 dCkgdGhhdCBpdCBoYXMgcmVhZC4KLQotICAgRlJFQUQgL1VOVEFCSUZZCi0gICAgICAgICAgKDgu MC4yMTEpIENvbnZlcnRzIEhvcml6b250YWwgVGFiIGNoYXJhY3RlcnMgdG8gdGhlIGFwcHJvcHJp YXRlCi0gICAgICAgICAgbnVtYmVyIG9mIHNwYWNlcywgYmFzZWQgb24gVlQxMDAtbGlrZSB0YWIg c3RvcHMgKDEsOSwxNywyNSwuLi4pLgotCi0gICBHUkVQIFsgc3dpdGNoZXMgXSBwYXR0ZXJuIGZp bGVzCi0gICAgICAgICAgU2ltaWxhciB0byBVbml4IGdyZXAgY29tbWFuZDogZGlzcGxheXMgZmls ZSBsaW5lcyB0aGF0IG1hdGNoIHRoZQotICAgICAgICAgIGdpdmVuIFszOTddcGF0dGVybi4gU3dp dGNoZXM6Ci0KLSAgICAgICAgL0NPVU5UWzp2YXJpYWJsZV0KLSAgICAgICAgICAgICAgICBEb24n dCBzaG93IHRoZSBtYXRjaGluZyBsaW5lcywganVzdCB0ZWxsIGhvdyBtYW55IGxpbmVzCi0gICAg ICAgICAgICAgICAgbWF0Y2guIElmIGEgdmFyaWFibGUgbmFtZSBpcyBzcGVjaWZpZWQsIHRoZSBj b3VudCBpcwotICAgICAgICAgICAgICAgIHN0b3JlZCBpbiB0aGUgZ2l2ZW4gdmFyaWFibGUuCi0K LSAgICAgICAgL0RPVEZJTEVTCi0gICAgICAgICAgICAgICAgSW5jbHVkZSBmaWxlcyB3aG9zZSBu YW1lcyBiZWdpbiB3aXRoIGRvdC4KLQotICAgICAgICAvTElORU5VTUJFUlMKLSAgICAgICAgICAg ICAgICBTaG93IGxpbmUgbnVtYmVycyBvZiBtYXRjaGluZyBsaW5lcy4KLQotICAgICAgICAvTkFN RU9OTFkKLSAgICAgICAgICAgICAgICBvbmx5IGxpc3QgdGhlIG5hbWVzIG9mIGZpbGVzIHRoYXQg Y29udGFpbiBtYXRjaGluZyBsaW5lcywKLSAgICAgICAgICAgICAgICBidXQgbm90IHRoZSBsaW5l cyB0aGVtc2VsdmVzLgotCi0gICAgICAgIC9OT0JBQ0tVUAotICAgICAgICAgICAgICAgIFNraXAg YmFja3VwIGZpbGVzLgotCi0gICAgICAgIC9OT0NBU0UKLSAgICAgICAgICAgICAgICBJZ25vcmUg YWxwaGFiZXRpYyBjYXNlIHdoaWxlIHBhdHRlcm4gbWF0Y2hpbmcuCi0KLSAgICAgICAgL05PRE9U RklMRVMKLSAgICAgICAgICAgICAgICBza2lwIGZpbGVzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGgg ZG90IChwZXJpb2QpLgotCi0gICAgICAgIC9OT0xJU1QKLSAgICAgICAgICAgICAgICBTdXBwcmVz cyBvdXRwdXQgYnV0IHNldCBTVUNDRVNTIG9yIEZBSUxVUkUgYWNjb3JkaW5nIHRvCi0gICAgICAg ICAgICAgICAgc2VhcmNoIHJlc3VsdC4KLQotICAgICAgICAvTk9NQVRDSAotICAgICAgICAgICAg ICAgIExvb2sgZm9yIGxpbmVzIHRoYXQgZG8gbm90IG1hdGNoIHRoZSBwYXR0ZXJuLgotCi0gICAg ICAgIC9OT1BBR0UKLSAgICAgICAgICAgICAgICBEb24ndCBwYXVzZSBiZXR3ZWVuIHNjcmVlbnMg b2Ygb3V0cHV0LgotCi0gICAgICAgIC9PVVRQVVQ6ZmlsZW5hbWUKLSAgICAgICAgICAgICAgICBX cml0ZSByZXN1bHRzIGludG8gdGhlIGdpdmVuIGZpbGUuCi0KLSAgICAgICAgL1BBR0UKLSAgICAg ICAgICAgICAgICBQYXVzZSBiZXR3ZWVuIHNjcmVlbnMgb2Ygb3V0cHV0LgotCi0gICAgICAgIC9S RUNVUlNJVkUKLSAgICAgICAgICAgICAgICBTZWFyY2ggZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMg dG9vLgotCi0gICAgICAgIC9UWVBFOntURVhULEJJTkFSWX0KLSAgICAgICAgICAgICAgICBTZWFy Y2ggb25seSBmaWxlcyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuCi0KLSAgICAgICAgICBTeW5vbnlt czogRklORCwgU0VBUkNILgotCi0gICBHRVRPSyAvVElNRU9VVDpuIC9RVUlFVCAvREVGQVVMVDp0 ZXh0Ci0gICAgICAgICAgVGhlIG5ldyAvUVVJRVQgc3dpdGNoIGluc3RydWN0cyBHRVRPSywgd2hl biBnaXZlbiBhIHRpbWVvdXQsIG5vdAotICAgICAgICAgIHRvIHByaW50IGFuIGVycm9yIG1lc3Nh Z2UgaWYgaXQgdGltZXMgb3V0LiBBcyBvZiA4LjAuMjExLCBhCi0gICAgICAgICAgZGVmYXVsdCBh bnN3ZXIgY2FuIGJlIHN1cHBsaWVkIChzZWUgQVNLKS4KLQotICAgSEVBRCBbIHN3aXRjaGVzIF0g ZmlsZW5hbWUKLSAgICAgICAgICBFcXVpdmFsZW50IHRvIFRZUEUgL0hFQUQgWyBvdGhlci1zd2l0 Y2hlcyBdIGZpbGVuYW1lLgotCi0gICBIRUxQIERBVEUKLSAgICAgICAgICBFeHBsYWlucyBkYXRl LXRpbWUgZm9ybWF0cywgaW5jbHVkaW5nIHRpbWV6b25lIG5vdGF0aW9uIGFuZAotICAgICAgICAg IGRlbHRhIHRpbWVzLgotCi0gICBIRUxQIEZJUkVXQUxMUwotICAgICAgICAgIEV4cGxhaW5zIHRo ZSBmaXJld2FsbCBuZWdvdGlhdGlvbiBjYXBhYmlsaXRpZXMgb2YgeW91ciB2ZXJzaW9uCi0gICAg ICAgICAgb2YgS2VybWl0LgotCi0gICBLQ0QgWyBzeW1ib2xpYy1kaXJlY3RvcnktbmFtZSBdCi0g ICAgICAgICAgQ2hhbmdlcyBLZXJtaXQncyB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgbmFtZWQg c3ltYm9saWMKLSAgICAgICAgICBkaXJlY3RvcnksIHN1Y2ggYXMgc3VjaCBhcyBleGVkaXIsIGlu aWRpciwgc3RhcnR1cCwgZG93bmxvYWQsIG9yCi0gICAgICAgICAgYW5kIGhvbWUuIFR5cGUgImtj ZCA/IiBmb3IgYSBsaXN0IG9mIHN5bWJvbGljIGRpcmVjdG9yeSBuYW1lcwotICAgICAgICAgIGtu b3duIHRvIHlvdXIgY29weSBvZiBLZXJtaXQsIG9yIGdpdmUgdGhlIG5ldyBPUklFTlRBVElPTgot ICAgICAgICAgIGNvbW1hbmQgZm9yIGEgbW9yZSBkZXRhaWxlZCBleHBsYW5hdGlvbi4gSWYgeW91 IGdpdmUgYSBLQ0QKLSAgICAgICAgICBjb21tYW5kIHdpdGhvdXQgYSBkaXJlY3RvcnkgbmFtZSwg S2VybWl0IHJldHVybnMgdG8gaXRzICJob21lIgotICAgICAgICAgIGRpcmVjdG9yeSwgd2hpY2gg aXMgZGV0ZXJtaW5lZCBpbiBzb21lIHdheSB0aGF0IGRlcGVuZHMgb24gdGhlCi0gICAgICAgICAg dW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtLCBidXQgd2hpY2ggeW91IGNhbiByZWRlZmluZSB3 aXRoIHRoZQotICAgICAgICAgIChuZXcpIFNFVCBDRCBIT01FIGNvbW1hbmQuIFlvdXIgaG9tZSBk aXJlY3RvcnkgaXMgc2hvd24gYnkgU0hPVwotICAgICAgICAgIENEIGFuZCBpdCdzIGFsc28gdGhl IHZhbHVlIG9mIHRoZSBcdihob21lKSB2YXJpYWJsZS4KLQotICAgTElDRU5TRQotICAgICAgICAg IERpc3BsYXlzIHRoZSBDLUtlcm1pdCBsaWNlbnNlLgotCi0gICBMLWNvbW1hbmRzCi0gICAgICAg ICAgV2hlbiBLZXJtaXQgaGFzIGEgY29ubmVjdGlvbiB0byBhIEtlcm1pdCBvciBGVFAgc2VydmVy LCBmaWxlCi0gICAgICAgICAgbWFuYWdlbWVudCBjb21tYW5kcyBzdWNoIGFzIENELCBESVJFQ1RP UlksIGFuZCBERUxFVEUgbWlnaHQgYmUKLSAgICAgICAgICBpbnRlbmRlZCBmb3IgdGhlIGxvY2Fs IGNvbXB1dGVyIG9yIHRoZSByZW1vdGUgc2VydmVyLiBDLUtlcm1pdAotICAgICAgICAgIDguMC4y MDAgYW5kIGVhcmxpZXIgYWx3YXlzIGV4ZWN1dGVzIHRoZXNlIGNvbW1hbmRzIG9uIHRoZSBsb2Nh bAotICAgICAgICAgIGNvbXB1dGVyLiBJZiB5b3Ugd2FudCB0aGVtIGV4ZWN1dGVkIGJ5IHRoZSBy ZW1vdGUgc2VydmVyLCB5b3UKLSAgICAgICAgICBoYXZlIHRvIHByZWZpeCB0aGVtIHdpdGggUkVN T1RFIChlLmcuIFJFTU9URSBDRCkgb3IgdXNlIHNwZWNpYWwKLSAgICAgICAgICBSLWNvbW1hbmQg YWxpYXNlcyAoZS5nLiBSQ0QgPSBSRU1PVEUgQ0QsIFJESVIgPSBSRU1PVEUgRElSLAotICAgICAg ICAgIGV0YykuIEJ1dCB0aGlzIGZlZWxzIHVubmF0dXJhbCB0byBGVFAgdXNlcnMsIHdobyBleHBl Y3QKLSAgICAgICAgICB1bnByZWZpeGVkIGZpbGUgbWFuYWdlbWVudCBjb21tYW5kcyB0byBiZSBl eGVjdXRlZCBieSB0aGUgcmVtb3RlCi0gICAgICAgICAgc2VydmVyLCByYXRoZXIgdGhhbiBsb2Nh bGx5LiBDLUtlcm1pdCA4LjAuMjAxIGFkZHMgYXV0b21hdGljCi0gICAgICAgICAgbG9jdXMgc3dp dGNoaW5nIHRvIHByZXNlbnQgYW4gRlRQLWxpa2UgaW50ZXJmYWNlIGZvciBGVFAKLSAgICAgICAg ICBjb25uZWN0aW9ucyBhbmQgdGhlIG5vcm1hbCBLZXJtaXQgaW50ZXJmYWNlIGZvciBLZXJtaXQK LSAgICAgICAgICBjb25uZWN0aW9ucywgYW5kIGEgU0VUIExPQ1VTIGNvbW1hbmQgKGRlc2NyaWJl ZCBiZWxvdykgdG8KLSAgICAgICAgICBjb250cm9sIHdoZXRoZXIgb3IgaG93IHRoaXMgaXMgZG9u ZS4gRm9yIHdoZW4gTE9DVVMgaXMgUkVNT1RFLCBhCi0gICAgICAgICAgbmV3IHNldCBvZiBjb21t YW5kcyB3YXMgYWRkZWQgZm9yIGxvY2FsIG1hbmFnZW1lbnQ6IExDRCAoTG9jYWwKLSAgICAgICAg ICBDRCksIExESVIgKExvY2FsIERJUiksIGV0Yy4gVGhlc2UgYXJlIGRlc2NyaWJlZCBiZWxvdyB1 bmRlciBTRVQKLSAgICAgICAgICBMT0NVUy4KLQotICAgTU9SRSBmaWxlbmFtZQotICAgICAgICAg IEVxdWl2YWxlbnQgdG8gVFlQRSAvUEFHRS4KLQotICAgT1JJRU5UQVRJT04KLSAgICAgICAgICBE aXNwbGF5cyBzeW1ib2xpYyBkaXJlY3RvcnkgbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHZh cmlhYmxlCi0gICAgICAgICAgbmFtZXMgYW5kIHZhbHVlcy4gVGhlIHN5bWJvbGljIG5hbWVzLCBz dWNoIGFzIGV4ZWRpciwgaW5pZGlyLAotICAgICAgICAgIHN0YXJ0dXAsIGRvd25sb2FkLCBhbmQg aG9tZSwgY2FuIGJlIHVzZWQgYXMgYXJndW1lbnRzIHRvIHRoZSBuZXcKLSAgICAgICAgICBLQ0Qg Y29tbWFuZC4KLQotICAgUFJPTVBUIFsgdGV4dCBdCi0gICAgICAgICAgRm9yIHVzZSBpbiBhIG1h Y3JvIG9yIGNvbW1hbmQgZmlsZTogZW50ZXJzIGludGVyYWN0aXZlIGNvbW1hbmQKLSAgICAgICAg ICBtb2RlIHdpdGhpbiB0aGUgY3VycmVudCBjb250ZXh0IChbMzk4XVNlY3Rpb24gOC4xKS4gSWYg dGhlCi0gICAgICAgICAgb3B0aW9uYWwgdGV4dCBpcyBpbmNsdWRlZCwgdGhlIHByb21wdCBpcyBz ZXQgdG8gaXQuIFRoZSB0ZXh0IGNhbgotICAgICAgICAgIGluY2x1ZGUgdmFyaWFibGVzLCBmdW5j dGlvbnMsIGV0YywgYXMgaW4gdGhlIFNFVCBQUk9NUFQgY29tbWFuZC4KLSAgICAgICAgICBUaGV5 IGFyZSBldmFsdWF0ZWQgZWFjaCB0aW1lIHRoZSBwcm9tcHQgaXMgcHJpbnRlZC4gVW5saWtlIHRo ZQotICAgICAgICAgIFNFVCBQUk9NUFQgY29tbWFuZCwgdGhlIHRleHQgYXJndW1lbnQgYXBwbGll cyBvbmx5IHRvIHRoZQotICAgICAgICAgIGN1cnJlbnQgY29tbWFuZCBsZXZlbC4gVGh1cyB5b3Ug Y2FuIGhhdmUgZGlmZmVyZW50IHByb21wdHMgYXQKLSAgICAgICAgICBkaWZmZXJlbnQgbGV2ZWxz LgotCi0gICBSRU1PVEUgU0VUIE1BVENIIHsgRE9URklMRSwgRklGTyB9IHsgT04sIE9GRiB9Ci0g ICAgICAgICAgQWxsb3dzIHRoZSBjbGllbnQgdG8gdGVsbCB0aGUgc2VydmVyIHdoZXRoZXIgd2ls ZGNhcmRzIHNlbnQgdG8KLSAgICAgICAgICB0aGUgc2VydmVyIHNob3VsZCBtYXRjaCBkb3QgZmls ZXMgKGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGgKLSAgICAgICAgICBwZXJpb2QpIG9yIEZJ Rk9zIChuYW1lZCBwaXBlcykuIFNlZSBTRVQgTUFUQ0guCi0KLSAgIFNFVCBBVFRSSUJVVEUgUkVD T1JELUZPUk1BVCB7IE9OLCBPRkYgfQotICAgICAgICAgIEFsbG93cyBjb250cm9sIG9mIHRoZSBL ZXJtaXQncyBSZWNvcmQtRm9ybWF0IGF0dHJpYnV0ZS4gU2V0IHRoaXMKLSAgICAgICAgICB0byBP RkYgaW4gY2FzZSBpbmNvbWluZyBmaWxlIGFyZSByZWZ1c2VkIGR1ZSB0byB1bmtub3duIG9yCi0g ICAgICAgICAgaW52YWxpZCByZWNvcmQgZm9ybWF0cyBpZiB5b3Ugd2FudCB0byBhY2NlcHQgdGhl IGZpbGUgYW55d2F5Ci0gICAgICAgICAgKGFuZCwgcGVyaGFwcywgcG9zdHByb2Nlc3MgaXQgdG8g Zml4IGl0cyByZWNvcmQgZm9ybWF0KS4KLQotICAgU0VUIENEIEhPTUUgWyBkaXJlY3RvcnkgXQot ICAgICAgICAgIFNwZWNpZmllcyB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBmb3IgdGhlIENEIGFuZCBL Q0QgY29tbWFuZHMsIHdoZW4KLSAgICAgICAgICB0aGV5IGFyZSBnaXZlbiB3aXRob3V0IGFuIGFy Z3VtZW50LCBhbmQgYWxzbyBzZXRzIHRoZSB2YWx1ZSBvZgotICAgICAgICAgIHRoZSBcdihob21l KSB2YXJpYWJsZS4KLQotICAgU0VUIEVYSVQgSEFOR1VQIHsgT0ZGLCBPTiB9Ci0gICAgICAgICAg Tm9ybWFsbHkgT04sIG1lYW5pbmcgdGhhdCB3aGVuIEtlcm1pdCBleGl0cywgaXQgYWxzbyBleHBs aWNpdGx5Ci0gICAgICAgICAgaGFuZ3MgdXAgdGhlIGN1cnJlbnQgU0VUIExJTkUgLyBTRVQgUE9S VCBzZXJpYWwgcG9ydCBhY2NvcmRpbmcKLSAgICAgICAgICB0byB0aGUgY3VycmVudCBTRVQgTU9E RU0gVFlQRSBhbmQgU0VUIE1PREVNIEhBTkdVUCBNRVRIT0QsIGFuZAotICAgICAgICAgIGNsb3Nl cyB0aGUgcG9ydCBkZXZpY2UgaWYgaXQgd2FzIG9wZW5lZCBieSBLZXJtaXQgaW4gdGhlIGZpcnN0 Ci0gICAgICAgICAgcGxhY2UgKGFzIG9wcG9zZWQgdG8gaW5oZXJpdGVkKS4gU0VUIEVYSVQgSEFO R1VQIE9GRiB0ZWxscwotICAgICAgICAgIEtlcm1pdCBub3QgdG8gZG8gdGhpcy4gVGhpcyBjYW4n dCBwcmV2ZW50IHRoZSBvcGVyYXRpbmcgc3lzdGVtCi0gICAgICAgICAgZnJvbSBjbG9zaW5nIHRo ZSBkZXZpY2Ugd2hlbiBLZXJtaXQgZXhpdHMgKGFuZCBpdCdzIGEgImxhc3QKLSAgICAgICAgICBj bG9zZSIpIGJ1dCBpZiB0aGUgcG9ydCBvciBtb2RlbSBoYXZlIGJlZW4gY29uZGl0aW9uZWQgdG8K LSAgICAgICAgICBzb21laG93IGlnbm9yZSB0aGUgY2xvc2UgYW5kIGtlZXAgdGhlIGNvbm5lY3Rp b24gb3BlbiwgYXQgbGVhc3QKLSAgICAgICAgICBLZXJtaXQgaXRzZWxmIHdvbid0IGRvIGFueXRo aW5nIGV4cGxpY2l0IHRvIGhhbmcgaXQgdXAgb3IgY2xvc2UKLSAgICAgICAgICBpdC4KLQotICAg U0VUIEZJTEUgRU9GIHsgQ1RSTC1aLCBMRU5HVEggfQotICAgICAgICAgIFNwZWNpZmllcyB0aGUg ZW5kLW9mLWZpbGUgZGV0ZWN0aW9uIG1ldGhvZCB0byBiZSB1c2VkIGJ5Ci0gICAgICAgICAgQy1L ZXJtaXQgd2hlbiBzZW5kaW5nIGFuZCByZWNlaXZpbmcgdGV4dCBmaWxlcywgYW5kIGluIHRoZSBU WVBFCi0gICAgICAgICAgYW5kIHNpbWlsYXIgdGV4dC1maWxlIG9yaWVudGVkIGNvbW1hbmRzLiBU aGUgbm9ybWFsIGFuZCBkZWZhdWx0Ci0gICAgICAgICAgbWV0aG9kIGlzIExFTkdUSC4gWW91IGNh biBzcGVjaWZ5IENUUkwtWiB3aGVuIGhhbmRsaW5nIENQL00gb3IKLSAgICAgICAgICBNUy1ET1Mg Zm9ybWF0IHRleHQgZmlsZXMsIGluIHdoaWNoIGEgQ3RybC1aIChBU0NJSSAyNikgY2hhcmFjdGVy Ci0gICAgICAgICAgd2l0aGluIHRoZSBmaWxlIG1hcmtzIHRoZSBlbmQgb2YgdGhlIGZpbGUuCi0K LSAgIFNFVCBGSUxFIExJU1RTSVpFIG51bWJlcgotICAgICAgICAgIEFsbG9jYXRlcyBzcGFjZSBm b3IgdGhlIGdpdmVuIG51bWJlciBvZiBmaWxlbmFtZXMgdG8gYmUgZmlsbGVkCi0gICAgICAgICAg aW4gYnkgdGhlIHdpbGRjYXJkIGV4cGFuZGVyLiBUaGUgY3VycmVudCBudW1iZXIgaXMgc2hvd24g YnkgU0hPVwotICAgICAgICAgIEZJTEUuIElmIHlvdSBnaXZlIGEgY29tbWFuZCB0aGF0IGluY2x1 ZGVzIGEgZmlsZW5hbWUgY29udGFpbmluZwotICAgICAgICAgIGEgd2lsZGNhcmQgKHN1Y2ggYXMg IioiKSB0aGF0IG1hdGNoZXMgbW9yZSBmaWxlcyB0aGF0IEtlcm1pdCdzCi0gICAgICAgICAgbGlz dCBoYXMgcm9vbSBmb3IsIHlvdSBjYW4gYWRqdXN0IHRoZSBsaXN0IHNpemUgd2l0aCB0aGlzCi0g ICAgICAgICAgY29tbWFuZC4KLQotICAgU0VUIEZJTEUgU1RSSU5HU1BBQ0UgbnVtYmVyCi0gICAg ICAgICAgQWxsb2NhdGVzIHNwYWNlIGZvciB0aGUgZ2l2ZW4gYW1vdW50IG9mIGZpbGVuYW1lIHN0 cmluZ3MgZm9yIHVzZQotICAgICAgICAgIGJ5IHRoZSB3aWxkY2FyZCBleHBhbmRlci4gVGhlIGN1 cnJlbnQgbnVtYmVyIGlzIHNob3duIGJ5IFNIT1cKLSAgICAgICAgICBGSUxFLiBUaGUgbnVtYmVy IGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb2YgYWxsIHRoZSBmaWxlCi0gICAgICAgICAg c3BlY2lmaWNhdGlvbnMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gd2lsZGNhcmQuCi0KLSAgICAgSWYg eW91IG5lZWQgdG8gcHJvY2VzcyBhIGJpZ2dlciBsaXN0IG9mIGZpbGVzIHRoYW4geW91ciBjb21w dXRlciBoYXMKLSAgICAgbWVtb3J5IGZvciwgeW91IG1pZ2h0IGJlIGFibGUgdXNlIGFuIGV4dGVy bmFsIGZpbGUgbGlzdC4gVGhlIEtlcm1pdAotICAgICBTRU5EIGFuZCB0aGUgRlRQIFBVVCBhbmQg R0VUIGNvbW1hbmRzIGFjY2VwdCBhIC9MSVNURklMRTogc3dpdGNoLAotICAgICB3aGljaCBnaXZl cyB0aGUgbmFtZSBvZiBhIGZpbGUgdGhhdCBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyB0byBi ZQotICAgICB0cmFuc2ZlcnJlZC4gRXhhbXBsZSBmb3IgVU5JWDoKLQotICAhZmluZCAuIC1wcmlu dCB8IGdyZXAgLyA+IC90bXAvbmFtZXMKLSAgZnRwIHB1dCAvdXBkYXRlIC9yZWN1cnNpdmUgL2xp c3RmaWxlOi90bXAvbmFtZXMKLQotICAgU0VUIExPQ1VTIHsgQVVUTywgTE9DQUwsIFJFTU9URSB9 Ci0gICAgICAgICAgQWRkZWQgaW4gQy1LZXJtaXQgOC4wLjIwMS4gICBTZXRzIHRoZSBsb2N1cyBm b3IgdW5wcmVmaXhlZCBmaWxlCi0gICAgICAgICAgbWFuYWdlbWVudCBjb21tYW5kcyBzdWNoIGFz IENELCBESVJFQ1RPUlksIE1LRElSLCBldGMuIFdoZW4KLSAgICAgICAgICBMT0NVUyBpcyBMT0NB TCB0aGVzZSBjb21tYW5kcyBhY3QgbG9jYWxseSBhbmQgYSBSRU1PVEUgKG9yIFIpCi0gICAgICAg ICAgcHJlZml4IChlLmcuIFJFTU9URSBDRCwgUkNELCBSRElSKSBpcyByZXF1aXJlZCB0byBzZW5k IGZpbGUKLSAgICAgICAgICBtYW5hZ2VtZW50IGNvbW1hbmRzIHRvIGEgcmVtb3RlIHNlcnZlci4g V2hlbiBMT0NVUyBpcyBSRU1PVEUsIGFuCi0gICAgICAgICAgTCBwcmVmaXggaXMgcmVxdWlyZWQg dG8gaXNzdWUgbG9jYWwgZmlsZSBtYW5hZ2VtZW50IGNvbW1hbmRzCi0gICAgICAgICAgKGUuZy4g TENELCBMRElSKS4gVGhlIHdvcmQgTE9DQUwgY2FuJ3QgYmUgdXNlZCBhcyBhIHByZWZpeCBzaW5j ZQotICAgICAgICAgIGl0IGlzIGFscmVhZHkgdXNlZCBmb3IgZGVjbGFyaW5nIGxvY2FsIHZhcmlh Ymxlcy4gTE9DVVMgYXBwbGllcwotICAgICAgICAgIHRvIGFsbCB0eXBlcyBvZiBjb25uZWN0aW9u cywgYW5kIHRodXMgaXMgb3J0aG9nb25hbCB0byBTRVQKLSAgICAgICAgICBHRVQtUFVULVJFTU9U RSwgd2hpY2ggc2VsZWN0cyBiZXR3ZWVuIEtlcm1pdCBhbmQgRlRQIGZvciByZW1vdGUKLSAgICAg ICAgICBmaWxlLXRyYW5zZmVyIGFuZCBtYW5hZ2VtZW50IGNvbW1hbmRzLiBUaGUgZGVmYXVsdCBM T0NVUyBpcwotICAgICAgICAgIEFVVE8sIHdoaWNoIG1lYW5zIHdlIHN3aXRjaCB0byBSRU1PVEUg d2hlbmV2ZXIgYW4gRlRQIGNvbm5lY3Rpb24KLSAgICAgICAgICBpcyBtYWRlLCBhbmQgdG8gTE9D QUwgd2hlbmV2ZXIgYSBub24tRlRQIGNvbm5lY3Rpb24gaXMgbWFkZSwgYW5kCi0gICAgICAgICAg c3dpdGNoIGJhY2sgYWNjb3JkaW5nbHkgd2hlbmV2ZXIgYSBjb25uZWN0aW9uIGlzIGNsb3NlZC4g U28gYnkKLSAgICAgICAgICBkZWZhdWx0LCBLZXJtaXQgYmVoYXZlcyBpbiBpdHMgdHJhZGl0aW9u YWwgbWFubmVyIHVubGVzcyB5b3UKLSAgICAgICAgICBtYWtlIGFuIEZUUCBjb25uZWN0aW9uLCBp biB3aGljaCBjYXNlIGl0IGFjdHMgbGlrZSBhIHJlZ3VsYXIgRlRQCi0gICAgICAgICAgY2xpZW50 IChidXQgYmV0dGVyIDotKSAgIExPQ1VTIGFwcGxpZXMgdG8gdGhlIGZvbGxvd2luZwotICAgICAg ICAgIGNvbW1hbmRzOgotCi0gIFVucHJlZml4ZWQgICAgUmVtb3RlICAgICAgIExvY2FsICAgICAg ICBEZXNjcmlwdGlvbgotICAgQ0QgKENXRCkgICAgICBSQ0QgICAgICAgICAgTENEICAgICAgICAg IENoYW5nZSAoV29ya2luZykgRGlyZWN0b3J5Ci0gICBDRFVQICAgICAgICAgIFJDRFVQICAgICAg ICBMQ0RVUCAgICAgICAgQ0QgVXAKLSAgIFBXRCAgICAgICAgICAgUlBXRCAgICAgICAgIExQV0Qg ICAgICAgICBQcmludCBXb3JraW5nIERpcmVjdG9yeQotICAgRElSRUNUT1JZICAgICBSRElSICAg ICAgICAgTERJUiAgICAgICAgIFJlcXVlc3QgYSBkaXJlY3RvcnkgbGlzdGluZwotICAgREVMRVRF ICAgICAgICBSREVMICAgICAgICAgTERFTCAgICAgICAgIERlbGV0ZSAoYSkgZmlsZShzKQotICAg UkVOQU1FICAgICAgICBSUkVOICAgICAgICAgTFJFTiAgICAgICAgIFJlbmFtZSBhIGZpbGUKLSAg IE1LRElSICAgICAgICAgUk1LRElSICAgICAgIExNS0RJUiAgICAgICBDcmVhdGUgYSBkaXJlY3Rv cnkKLSAgIFJNRElSICAgICAgICAgUlJNRElSICAgICAgIExSTURJUiAgICAgICBSZW1vdmUgYSBk aXJlY3RvcnkKLQotICAgU0VUIE1BVENIIHsgRE9URklMRSwgRklGTyB9IHsgT04sIE9GRiB9Ci0g ICAgICAgICAgV2hldGhlciBDLUtlcm1pdCBmaWxlbmFtZSBwYXR0ZXJucyAod2lsZGNhcmRzKSBz aG91bGQgbWF0Y2gKLSAgICAgICAgICBmaWxlbmFtZXMgdGhhdCBzdGFydCB3aXRoIGRvdCAocGVy aW9kKSwgb3IgKFVuaXggb25seSkgRklGT3MKLSAgICAgICAgICAobmFtZWQgcGlwZXMpLiBUaGUg ZGVmYXVsdHMgYXJlIHRvIHNraXAgZG90ZmlsZXMgaW4gVW5peCBidXQKLSAgICAgICAgICBtYXRj aCB0aGVtIGVsc2V3aGVyZSwgYW5kIHRvIHNraXAgRklGT3MuIEFwcGxpZXMgdG8gYm90aAotICAg ICAgICAgIGludGVyYWN0aXZlIHVzZSBhbmQgdG8gc2VydmVyIG1vZGUsIHdoZW4gdGhlIHNlcnZl ciByZWNlaXZlcwotICAgICAgICAgIHdpbGRjYXJkcywgZS5nLiBpbiBhIEdFVCBjb21tYW5kLiBB bHNvIHNlZSBSRU1PVEUgU0VUIE1BVENILgotCi0gICBTRVQgT1BUSU9OUyBESVJFQ1RPUlkgL0RP VEZJTEVTCi0gICAgICAgICAgTm93IHdvcmtzIGZvciBzZXJ2ZXIgbGlzdGluZ3MgdG9vIChVTklY IG9ubHkpLiBHaXZlIHRoaXMgY29tbWFuZAotICAgICAgICAgIHByaW9yIHRvIGhhdmluZyBLZXJt aXQgZW50ZXIgc2VydmVyIG1vZGUsIGFuZCB0aGVuIGl0IHdpbGwgc2hvdwotICAgICAgICAgIGZp bGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggZG90IChwZXJpb2QpIHdoZW4gc2VudCBhIFJFTU9U RQotICAgICAgICAgIERJUkVDVE9SWSBjb21tYW5kLgotCi0gICBTRVQgUVVJRVQgT04KLSAgICAg ICAgICAoYXMgd2VsbCBhcyB0aGUgLXEgY29tbWFuZC1saW5lIG9wdGlvbikgTm93IGFwcGxpZXMg YWxzbyB0bzoKLQotICAgICAgICAgICsgU0VUIEhPU1QgY29ubmVjdGlvbiBwcm9ncmVzcyBtZXNz YWdlcy4KLSAgICAgICAgICArICJQcmVzcyB0aGUgWCBvciBFIGtleSB0byBjYW5jZWwiIGZpbGUt dHJhbnNmZXIgbWVzc2FnZS4KLSAgICAgICAgICArIFJFTU9URSBDRCByZXNwb25zZS4KLSAgICAg ICAgICArIFJFTU9URSBMT0dJTiByZXNwb25zZS4KLQotICAgU0VUIFJFQ0VJVkUgUEVSTUlTU0lP TlMgeyBPTiwgT0ZGIH0KLSAgICAgICAgICBUZWxscyBDLUtlcm1pdCB3aGV0aGVyIHRvIHNldCB0 aGUgcGVybWlzc2lvbnMgb2YgaW5jb21pbmcgZmlsZXMKLSAgICAgICAgICAocmVjZWl2ZWQgd2l0 aCBLZXJtaXQgcHJvdG9jb2wpIGZyb20gdGhlIHBlcm1pc3Npb25zIHN1cHBsaWVkIGluCi0gICAg ICAgICAgdGhlIGZpbGUncyBBdHRyaWJ1dGUgcGFja2V0IChpZiBhbnkpLiBOb3JtYWxseSBPTi4g QWxzbyBzZWUgU0VUCi0gICAgICAgICAgU0VORCBQRVJNSVNTSU9OUy4KLQotICAgU0VUIFJPT1Qg ZGlyZWN0b3J5Ci0gICAgICAgICAgTGlrZSBVTklYIGNocm9vdCwgd2l0aG91dCByZXF1aXJpbmcg cHJpdmlsZWdlLiBTZXRzIHRoZSByb290IGZvcgotICAgICAgICAgIGZpbGUgYWNjZXNzLCBkb2Vz IG5vdCBhbGxvdyByZWZlcmVuY2UgdG8gb3IgY3JlYXRpb24gb2YgZmlsZXMKLSAgICAgICAgICBv dXRzaWRlIHRoZSByb290LCBhbmQgY2FuJ3QgYmUgdW5kb25lLgotCi0gICBTRVQgU0VORCBQRVJN SVNTSU9OUyB7IE9OLCBPRkYgfQotICAgICAgICAgIFRlbGxzIEMtS2VybWl0IHdoZXRoZXIgdG8g aW5jbHVkZSBmaWxlIHBlcm1pc3Npb25zIGluIHRoZQotICAgICAgICAgIGF0dHJpYnV0ZXMgaXQg aW5jbHVkZXMgd2l0aCBlYWNoIGZpbGUgd2hlbiBzZW5kaW5nIHdpdGggS2VybWl0Ci0gICAgICAg ICAgcHJvdG9jb2wuIEFsc28gc2VlIFNFVCBSRUNFSVZFIFBFUk1JU1NJT05TLgotCi0gICBTRVQg VENQIHsgSFRUUC1QUk9YWSwgU09DS1MtU0VSVkVSIH0gL1VTRVI6bmFtZSAvUEFTU1dPUkQ6dGV4 dAotICAgICAgICAgIFRoZXNlIGNvbW1hbmRzIG5vdyBhbGxvdyBzcGVjaWZpY2F0aW9uIG9mIHVz ZXJuYW1lIGFuZCBwYXNzd29yZC4KLQotICAgU0VUIFRFUk1JTkFMIC4gLiAuCi0gICAgICAgICAg KFNlZSBbMzk5XVNlY3Rpb24gMTIuKQotCi0gICBTRVQgVFJBTlNGRVIgTUVTU0FHRSBbIHRleHQg XQotICAgICAgICAgIFNldHMgYW4gaW5pdGlhbCB0ZXh0IG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVk IGluIHRoZQotICAgICAgICAgIGZpbGUtdHJhbnNmZXIgZGlzcGxheS4gVGhlIHRyYW5zZmVyIG1l c3NhZ2UgaXMgYXV0b21hdGljYWxseQotICAgICAgICAgIGRlbGV0ZWQgb25jZSB1c2VkLCBzbyBt dXN0IGJlIHNldCBlYWNoIHRpbWUgYSBtZXNzYWdlIGEgZGVzaXJlZC4KLSAgICAgICAgICBBbnkg dmFyaWFibGVzIGluIHRoZSBtZXNzYWdlIGFyZSBldmFsdWF0ZWQgYXQgdGhlIHRpbWUgdGhlIFNF VAotICAgICAgICAgIGNvbW1hbmQgaXMgZ2l2ZW4uIElmIHRoZSBvcHRpb25hbCB0ZXh0IGlzIG9t aXR0ZWQsIGFueSB0cmFuc2ZlcgotICAgICAgICAgIG1lc3NhZ2UgdGhhdCBpcyBjdXJyZW50bHkg c2V0IGlzIHJlbW92ZWQuIFN5bm9ueW06IFNFVCBYRkVSIE1TRy4KLSAgICAgICAgICBTSE9XIFRS QU5TRkVSIGRpc3BsYXlzIGl0IGlmIGl0IGhhcyBiZWVuIHNldCBidXQgbm90IHlldCB1c2VkLgot Ci0gICBTSE9XIENPTU1VTklDQVRJT05TCi0gICAgICAgICAgSW4gQy1LZXJtaXQgOC4wLCBTSE9X IENPTU1VTklDQVRJT05TLCB3aGVuIGdpdmVuIGluIHJlbW90ZSBtb2RlCi0gICAgICAgICAgKGku ZS4gYmVmb3JlIGFueSBjb25uZWN0aW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkKSwgdGVsbHMgdGhl Ci0gICAgICAgICAgdHlwaWNhbCBkaWFsb3V0IGRldmljZSBuYW1lIGZvciB0aGUgcGFydGljdWxh ciBwbGF0Zm9ybSBvbiB3aGljaAotICAgICAgICAgIGl0J3MgcnVubmluZyAoZS5nLiBUWEEwOiBm b3IgVk1TLCBvciAvZGV2L2N1YTBwMCBmb3IgSFAtVVgpLiBPbgotICAgICAgICAgIFVuaXggcGxh dGZvcm1zLCBpdCBhbHNvIHRlbGxzIHRoZSBuYW1lIG9mIHRoZSBsb2NrZmlsZQotICAgICAgICAg IGRpcmVjdG9yeS4gVGhpcyB3YXksIHlvdSBoYXZlIGFuIGlkZWEgb2Ygd2hhdCB0aGUgU0VUIExJ TkUKLSAgICAgICAgICBkZXZpY2UgbmFtZSBzaG91bGQgbG9vayBsaWtlLCBhbmQgaWYgdGhlIFNF VCBMSU5FIGNvbW1hbmQgZmFpbHMsCi0gICAgICAgICAgeW91IGtub3cgdGhlIG5hbWUgb2YgdGhl IGRpcmVjdG9yeSBvciBkZXZpY2UgdGhhdCBpcyBwcm90ZWN0ZWQKLSAgICAgICAgICBhZ2FpbnN0 IHlvdS4KLQotICAgU0hPVyBWQVJJQUJMRVMgWyBuYW1lIFsgbmFtZSBbIC4uLiBdIF0gXQotICAg ICAgICAgIEluIEMtS2VybWl0IDguMC4yMDEgeW91IGNhbiByZXF1ZXN0IHZhbHVlcyBvZiBhIGxp c3Qgb2YgYnVpbHQtaW4KLSAgICAgICAgICAoXHYoeHh4KSkgdmFyaWFibGVzLiBFYWNoIG5hbWUg aXMgYSBwYXR0ZXJuLCBhcyBiZWZvcmUsIGJ1dCBub3cKLSAgICAgICAgICBpdCBhIGZyZWUgcGF0 dGVybiByYXRoZXIgdGhhbiBhbiBhbmNob3JlZCBvbmUgKGV4cGxhaW5lZCBpbgotICAgICAgICAg IFs0MDBdU2VjdGlvbiA4LjEyKSBzbyBub3cgInNob3cgdmFyIGRhdGUgdGltZSIgc2hvd3MgdGhl IHZhbHVlcwotICAgICAgICAgIG9mIGFsbCB2YXJpYWJsZXMgd2hvc2UgbmFtZXMgaW5jbHVkZSB0 aGUgc3RyaW5ncyAiZGF0ZSIgb3IKLSAgICAgICAgICAidGltZSIuCi0KLSAgIFRBSUwgWyBzd2l0 Y2hlcyBdIGZpbGVuYW1lCi0gICAgICAgICAgRXF1aXZhbGVudCB0byBUWVBFIC9UQUlMIFsgb3Ro ZXItc3dpdGNoZXMgXSBmaWxlbmFtZS4KLQotICAgVFJBTlNNSVQgL05PRUNITyBbIG90aGVyIHN3 aXRjaGVzIF0gZmlsZW5hbWUKLSAgICAgICAgICBUaGUgL05PRUNITyBzd2l0Y2ggaXMgZXF1aXZh bGVudCB0byBnaXZpbmcgdGhlIGNvbW1hbmQgU0VUCi0gICAgICAgICAgVFJBTlNNSVQgRUNITyBP RkYgcHJpb3IgdG8gdGhlIFRSQU5TTUlUIGNvbW1hbmQsIGV4Y2VwdCB0aGUKLSAgICAgICAgICBz d2l0Y2ggYWZmZWN0cyBvbmx5IHRoZSBjb21tYW5kIHdpdGggd2hpY2ggaXQgd2FzIGdpdmVuIGFu ZCBkb2VzCi0gICAgICAgICAgbm90IGFmZmVjdCB0aGUgcHJldmFpbGluZyBnbG9iYWwgc2V0dGlu Zy4KLQotICAgVFJBTlNNSVQgL05PV0FJVCBbIG90aGVyIHN3aXRjaGVzIF0gZmlsZW5hbWUKLSAg ICAgICAgICBUaGUgL05PV0FJVCBzd2l0Y2ggaXMgZXF1aXZhbGVudCB0byBnaXZpbmcgdGhlIGNv bW1hbmQgU0VUCi0gICAgICAgICAgVFJBTlNNSVQgUFJPTVBUIDAgcHJpb3IgdG8gdGhlIFRSQU5T TUlUIGNvbW1hbmQsIGV4Y2VwdCB0aGUKLSAgICAgICAgICBzd2l0Y2ggYWZmZWN0cyBvbmx5IHRo ZSBjb21tYW5kIHdpdGggd2hpY2ggaXQgd2FzIGdpdmVuIGFuZCBkb2VzCi0gICAgICAgICAgbm90 IGFmZmVjdCB0aGUgcHJldmFpbGluZyBnbG9iYWwgc2V0dGluZy4KLQotICAgVFJBTlNNSVQgL05P V0FJVCAvTk9FQ0hPIC9CSU5BUlkgWyBvdGhlciBzd2l0Y2hlcyBdIGZpbGVuYW1lCi0gICAgICAg ICAgV2hlbiB0aGUgVFJBTlNNSVQgY29tbWFuZCBpcyBnaXZlbiB3aXRoIHRoZSAvTk9XQUlULCAv Tk9FQ0hPLAotICAgICAgICAgIGFuZCAvQklOQVJZIHN3aXRjaGVzLCB0aGlzIGFjdGl2YXRlcyBh IHNwZWNpYWwgImJsYXN0IHRoZSB3aG9sZQotICAgICAgICAgIGZpbGUgb3V0IHRoZSBjb21tdW5p Y2F0aW9ucyBjb25uZWN0aW9uIGFsbCBhdCBvbmNlIiBtb2RlIHRoYXQKLSAgICAgICAgICBLZXJt aXQgZGlkbid0IGhhdmUgcHJpb3IgdG8gdmVyc2lvbiA4LjAuIFRoZXJlIGhhcyBiZWVuCi0gICAg ICAgICAgaW5jcmVhc2luZyBkZW1hbmQgZm9yIHRoaXMgdHlwZSBvZiB0cmFuc21pc3Npb24gd2l0 aCB0aGUgYWR2ZW50Ci0gICAgICAgICAgb2YgZGV2aWNlcyB0aGF0IGV4cGVjdCBpbWFnZSAoZS5n LiAuSlBHKSBvciBzb3VuZCAoZS5nLiAuTVAzKQotICAgICAgICAgIGZpbGVzIGFzIHJhdyBpbnB1 dC4gVGhlIG9idmlvdXMgcXVlc3Rpb24gaXM6IGhvdyBkb2VzIHRoZQotICAgICAgICAgIHJlY2Vp dmluZyBkZXZpY2Uga25vdyB3aGVuIGl0IGhhcyB0aGUgd2hvbGUgZmlsZT8gVGhpcyBkZXBlbmRz Ci0gICAgICAgICAgb24gdGhlIGRldmljZSwgb2YgY291cnNlOyB1c3VhbGx5IGFmdGVyIGEgY2Vy dGFpbiBhbW91bnQgb2YgdGltZQotICAgICAgICAgIGVsYXBzZXMgd2l0aCBub3RoaW5nIGFycml2 aW5nLCBvciBlbHNlIHdoZW4gS2VybWl0IGhhbmdzIHVwIG9yCi0gICAgICAgICAgY2xvc2VzIHRo ZSBjb25uZWN0aW9uLgotCi0gICBUWVBFIC9DSEFSQUNURVItU0VUOm5hbWUKLSAgICAgICAgICBB bGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGNoYXJhY3RlciBzZXQgaW4gd2hpY2ggdGhlIGZpbGUg dG8gYmUKLSAgICAgICAgICB0eXBlZCBpcyBlbmNvZGVkLgotCi0gICBUWVBFIC9OVU1CRVIKLSAg ICAgICAgICBBZGRzIGxpbmUgbnVtYmVycy4KLQotICAgVFlQRSAvT1VUUFVUOmZpbGVuYW1lCi0g ICAgICAgICAgU2VuZHMgdGhlIHJlc3VsdHMgb2YgdGhlIFRZUEUgY29tbWFuZCB0byB0aGUgZ2l2 ZW4gZmlsZS4KLQotICAgVFlQRSAvVFJBTlNMQVRFLVRPOm5hbWUKLSAgICAgICAgICBVc2VkIGlu IGNvbmp1bmN0aW9uIHdpdGggVFlQRSAvQ0hBUkFDVEVSLVNFVDp4eHg7IGFsbG93cyB5b3UgdG8K LSAgICAgICAgICBzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgc2V0IGluIHdoaWNoIHRoZSBmaWxlIGlz IHRvIGJlIGRpc3BsYXllZC4KLQotICAgVFlQRSAvVFJBTlNQQVJFTlQKLSAgICAgICAgICBVc2Vk IHRvIGRpc2FibGUgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiBpbiB0aGUgVFlQRSBjb21tYW5k LAotICAgICAgICAgIHdoaWNoIG90aGVyd2lzZSBjYW4gdGFrZSBwbGFjZSBhdXRvbWF0aWNhbGx5 IGJhc2VkIG9uIGZpbGUKLSAgICAgICAgICBzY2FubmluZywgZXZlbiB3aGVuIC9DSEFSQUNURVIt U0VUIGFuZCAvVFJBTlNMQVRFLVRPIHN3aXRjaGVzCi0gICAgICAgICAgYXJlIG5vdCBnaXZlbi4K LQotICAgVk9JRCB0ZXh0Ci0gICAgICAgICAgUGFyc2VzIHRoZSB0ZXh0LCBldmFsdWF0aW5nIGFu eSBiYWNrc2xhc2ggaXRlbXMgaW4gaXQgKHN1Y2ggYXMKLSAgICAgICAgICBmdW5jdGlvbiBjYWxs cykgYnV0IGRvZXNuJ3QgZG8gYW55dGhpbmcgZnVydGhlciwgZXhjZXB0IHBvc3NpYmx5Ci0gICAg ICAgICAgcHJpbnRpbmcgZXJyb3IgbWVzc2FnZXMuIFVzZWZ1bCBmb3IgaW52b2tpbmcgZnVuY3Rp b25zIHRoYXQgaGF2ZQotICAgICAgICAgIHNpZGUgZWZmZWN0cyB3aXRob3V0IHVzaW5nIG9yIHBy aW50aW5nIHRoZWlyIGRpcmVjdCByZXN1bHRzLAotICAgICAgICAgIGUuZy4gInZvaWQgXGZzcGxp dChcJWEsJmEpIi4KLQotU3ltYm9saWMgTGlua3MgaW4gVU5JWAotCi0gICBUaGUgVU5JWCB2ZXJz aW9ucyBvZiBDLUtlcm1pdCBoYXZlIGhhZCAvRk9MTE9XTElOS1MgYW5kIC9OT0ZPTExPV0xJTktT Ci0gICBzd2l0Y2hlcyBhZGRlZCB0byBzZXZlcmFsIGNvbW1hbmRzIHRvIGNvbnRyb2wgdGhlIHRy ZWF0bWVudCBvZiBzeW1ib2xpYwotICAgbGlua3MuIERpZmZlcmVudCBjb21tYW5kcyBkZWFsIGRp ZmZlcmVudGx5IHdpdGggc3ltYm9saWMgbGlua3M6Ci0KLSAgIEtlcm1pdCBTRU5ELCBGVFAgTVBV VAotICAgICAgICAgIC9OT0ZPTExPV0xJTktTIGlzIHRoZSBkZWZhdWx0LCB3aGljaCBtZWFucyBz eW1ib2xpYyBsaW5rcyBhcmUKLSAgICAgICAgICBza2lwcGVkIGVudGlyZWx5LiBUaGUgYWx0ZXJu YXRpdmUsIC9GT0xMT1dMSU5LUywgc2hvdWxkIGJlIHVzZWQKLSAgICAgICAgICB3aXRoIGNhdXRp b24sIHNpbmNlIGFuIGlubm9jZW50IGxpbmsgbWlnaHQgcG9pbnQgdG8gYSB3aG9sZSBmaWxlCi0g ICAgICAgICAgc3lzdGVtLCBvciBpdCBtaWdodCBjYXVzZSBhIGxvb3AuIFRoZXJlIGlzIG5vIHdh eSBpbiBLZXJtaXQgb3IKLSAgICAgICAgICBGVFAgcHJvdG9jb2wgdG8gc2VuZCB0aGUgbGluayBp dHNlbGYuIFdlIGVpdGhlciBza2lwIHRoZW0gb3IKLSAgICAgICAgICBmb2xsb3cgdGhlbTsgd2Ug Y2FuJ3QgZHVwbGljYXRlIHRoZW0uCi0KLSAgIERJUkVDVE9SWQotICAgICAgICAgIC9OT0ZPTExP V0xJTktTIGlzIHRoZSBkZWZhdWx0LCB3aGljaCBtZWFucyB0aGUgRElSRUNUT1JZIGNvbW1hbmQK LSAgICAgICAgICBsaXN0cyBzeW1ib2xpYyBsaW5rcyBpbiBhIHdheSB0aGF0IHNob3dzIHRoZXkg YXJlIGxpbmtzLCBidXQgaXQKLSAgICAgICAgICBkb2VzIG5vdCBmb2xsb3cgdGhlbS4gVGhlIGFs dGVybmF0aXZlLCAvRk9MTE9XTElOS1MsIGZvbGxvd3MKLSAgICAgICAgICBsaW5rcyBhbmQgZ2l2 ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmtlZC10byBkaXJlY3RvcmllcyBhbmQKLSAgICAg ICAgICBmaWxlcy4KLQotICAgREVMRVRFLCBSTURJUgotICAgICAgICAgIFRoZSBERUxFVEUgY29t bWFuZCBkb2VzIG5vdCBoYXZlIGxpbmstc3BlY2lmaWMgc3dpdGNoZXMuIERFTEVURQotICAgICAg ICAgIG5ldmVyIGZvbGxvd3MgbGlua3MuIElmIHlvdSB0ZWxsIEtlcm1pdCB0byBkZWxldGUgYSBz eW1ib2xpYwotICAgICAgICAgIGxpbmssIGl0IGRlbGV0ZXMgdGhlIGxpbmsgaXRzZWxmLCBub3Qg dGhlIGxpbmtlZC10byBmaWxlLiBEaXR0bwotICAgICAgICAgIGZvciBSTURJUi4KLQotICAgQ09Q WQotICAgICAgICAgIFRoZSBDT1BZIGNvbW1hbmQgYmVoYXZlcyBqdXN0IGxpa2UgdGhlIFVOSVgg Y3AgY29tbWFuZDsgaXQKLSAgICAgICAgICBhbHdheXMgZm9sbG93cyBsaW5rcy4KLQotICAgUkVO QU1FCi0gICAgICAgICAgVGhlIFJFTkFNRSBjb21tYW5kIGJlaGF2ZXMganVzdCBsaWtlIHRoZSBV TklYIG12IGNvbW1hbmQ7IGl0Ci0gICAgICAgICAgb3BlcmF0ZXMgb24gbGlua3MgZGlyZWN0bHkg cmF0aGVyIHRoYW4gZm9sbG93aW5nLgotCi0gICBbIFs0MDFdVG9wIF0gWyBbNDAyXUNvbnRlbnRz IF0gWyBbNDAzXUMtS2VybWl0IEhvbWUgXSBbIFs0MDRdS2VybWl0Ci0gICBIb21lIF0KLQotOC4g T1RIRVIgU0NSSVBUSU5HIElNUFJPVkVNRU5UUwotCi04LjEuIFBlcmZvcm1hbmNlIGFuZCBEZWJ1 Z2dpbmcKLQotICAgQSBjb21tYW5kIGNhY2hlIGZvciBmcmVxdWVudGx5IHVzZWQgY29tbWFuZHMg cGx1cyBzb21lIHJlbGF0ZWQKLSAgIG9wdGltaXphdGlvbnMgaW5jcmVhc2VzIHRoZSBzcGVlZCBv ZiBjb21wdXRlLWJvdW5kIHNjcmlwdHMgYnkgYW55d2hlcmUKLSAgIGZyb20gNTAlIHRvIDEwMDAl LgotCi0gICBUaGUgbmV3IFBST01QVCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHNldCBicmVha3Bv aW50cyBmb3IgZGVidWdnaW5nCi0gICBzY3JpcHRzLiBJZiBleGVjdXRlZCBpbiBhIGNvbW1hbmQg ZmlsZSBvciBtYWNybywgaXQgZ2l2ZXMgeW91IGFuCi0gICBpbnRlcmFjdGl2ZSBjb21tYW5kIHBy b21wdCBpbiB0aGUgY3VycmVudCBjb250ZXh0IG9mIHRoZSBzY3JpcHQsIHdpdGgKLSAgIGFsbCBp dHMgdmFyaWFibGVzLCBhcmd1bWVudHMsIGNvbW1hbmQgc3RhY2ssIGV0YywgYXZhaWxhYmxlIGZv cgotICAgZXhhbWluYXRpb24gb3IgY2hhbmdlLCBhbmQgdGhlIGFiaWxpdHkgdG8gcmVzdW1lIHRo ZSBzY3JpcHQgYXQgYW55Ci0gICBwb2ludCAoRU5EIHJlc3VtZXMgaXQsIEN0cmwtQyBvciBTVE9Q IGNhbmNlbHMgaXQgYW5kIHJldHVybnMgdG8gdG9wCi0gICBsZXZlbCkuCi0KLSAgIFRoZSBuZXcg Q3RybC1DIHRyYXBwaW5nIGZlYXR1cmUgKFs0MDVdU2VjdGlvbiA4LjE0KSBsZXRzIHlvdSBpbnRl cmNlcHQKLSAgIGludGVycnVwdGlvbiBvZiBzY3JpcHRzLiBUaGlzIGNhbiBiZSB1c2VkIGluIGNv bWJpbmF0aW9uIHdpdGggdGhlCi0gICBQUk9NUFQgY29tbWFuZCB0byBkZWJ1ZyBzY3JpcHRzLiBF eGFtcGxlOgotCi1kZWZpbmUgT05fQ1RSTEMgewotICAgIGVjaG8gSU5URVJSVVBURUQgQlkgQ1RS TC1DLi4uCi0gICAgZWNobyBUaGUgY29tbWFuZCBzdGFjayBoYXMgbm90IHlldCBiZWVuIHJvbGxl ZCBiYWNrOgotICAgIHNob3cgc3RhY2sKLSAgICBlY2hvIFR5cGUgQ3RybC1DIGFnYWluIG9yIHVz ZSB0aGUgRU5EIGNvbW1hbmQgdG8gcmV0dXJuIHRvIHRvcCBsZXZlbC4KLSAgICBwcm9tcHQgRGVi dWc+Ci19Ci0KLSAgIEFkZGluZyB0aGlzIE9OX0NUUkwgZGVmaW5pdGlvbiB0byB5b3VyIHNjcmlw dCBsZXRzIHlvdSBpbnRlcnJ1cHQgaXQgYXQKLSAgIGFueSBwb2ludCBhbmQgZ2V0IHByb21wdCB0 aGF0IGlzIGlzc3VlZCBhdCB0aGUgY3VycmVudCBjb21tYW5kIGxldmVsLAotICAgc28geW91IGNh biBxdWVyeSBsb2NhbCB2YXJpYWJsZXMsIGV0Yy4KLQotICAgWyBbNDA2XVRvcCBdIFsgWzQwN11D b250ZW50cyBdIFsgWzQwOF1DLUtlcm1pdCBIb21lIF0gWyBbNDA5XUtlcm1pdAotICAgSG9tZSBd Ci0KLTguMi4gVXNpbmcgTWFjcm9zIGFzIE51bWVyaWMgVmFyaWFibGVzCi0KLSAgIEEgbWFjcm8g aXMgYSB3YXkgdG8gYXNzaWduIGEgdmFsdWUgdG8gYSBuYW1lLCBhbmQgdGhlbiB1c2UgdGhlIG5h bWUgdG8KLSAgIHJlZmVyIHRvIHRoZSB2YWx1ZS4gTWFjcm9zIGFyZSB1c2VkIGluIHR3byB3YXlz IGluIEtlcm1pdDogYXMKLSAgICJzdWJyb3V0aW5lcyIgb3IgZnVuY3Rpb25zIGNvbXBvc2VkIG9m IEtlcm1pdCBjb21tYW5kcywgd2hpY2ggYXJlCi0gICBleGVjdXRlZCwgb3IgYXMgdmFyaWFibGVz IHRvIGhvbGQgYXJiaXRyYXJ5IHZhbHVlcyAtLSB0ZXh0LCBudW1iZXJzLAotICAgZmlsZW5hbWVz LCBldGMuCi0KLSAgIFdoZW4gYSBtYWNybyBpcyB0byBiZSBleGVjdXRlZCwgaXRzIG5hbWUgaXMg Z2l2ZW4gYXMgaWYgaXQgd2VyZSBhCi0gICBDLUtlcm1pdCBjb21tYW5kLCBvcHRpb25hbGx5IHBy ZWNlZGVkIGJ5IHRoZSB3b3JkICJkbyIuIFdoZW4gYSBtYWNybyBpcwotICAgdXNlZCBhcyBhIHZh cmlhYmxlLCBpdCBtdXN0IGJlICJlc2NhcGVkIiB3aXRoIFxtKHh4eCkgKG9yIGVxdWl2YWxlbnQK LSAgIGZ1bmN0aW9uLCBlLmcuIFxzKHh4eCksIFw6KHh4eCksIFxmZGVmaW5pdGlvbih4eHgpKSwg d2hlcmUgeHh4IGlzIHRoZQotICAgbWFjcm8gbmFtZSwgZm9yIGV4YW1wbGU6Ci0KLSAgZGVmaW5l IGZpbGVuYW1lIC91c3Ivb2xnYS9vb2ZhLnR4dAotICBzZW5kIFxtKGZpbGVuYW1lKQotCi0gICBP ZiBjb3Vyc2UgdmFyaWFibGVzIGNhbiBhbHNvIGhvbGQgbnVtYmVyczoKLQotICBkZWZpbmUgc2l6 ZSAxNwotICBkZWNsYXJlIFwmYVtcbShzaXplKV0KLSAgLi4uCi0gIGRlZmluZSBpbmRleCAzCi0g IGlmICggPT0gXG0oaW5kZXgpIDMgKSBlY2hvIFRoZSB0aGlyZCB2YWx1ZSBpczogXCZhW1xtKGlu ZGV4KV0KLSAgZXZhbHVhdGUgaW5kZXggKFxtKGluZGV4KSAqIDQpCi0gIGlmICggPiBcbShpbmRl eCkgXG0oc2l6ZSkgKSBlY2hvIE91dCBvZiByYW5nZSEKLQotICAgQnV0IHRoZXNlIGFyZSBjb250 ZXh0cyBpbiB3aGljaCBvbmx5IG51bWJlcnMgYXJlIHZhbGlkLiBDLUtlcm1pdCA4LjAKLSAgIGhh cyBiZWVuIGNoYW5nZWQgdG8gdHJlYXQgbm9uLWVzY2FwZWQgbm9uLW51bWVyaWMgaXRlbXMgaW4g c3RyaWN0bHkKLSAgIG51bWVyaWMgY29udGV4dHMgYXMgbWFjcm8gbmFtZXMuIFNvIGl0IGlzIG5v dyBwb3NzaWJsZSAoYnV0IG5vdAotICAgcmVxdWlyZWQpIHRvIG9taXQgdGhlIFxtKC4uLikgbm90 YXRpb24gYW5kIGp1c3QgdXNlIHRoZSBtYWNybyBuYW1lIGluCi0gICB0aGVzZSBjb250ZXh0czoK LQotICBkZWZpbmUgc2l6ZSAxNwotICBkZWNsYXJlIFwmYVtzaXplXQotICAuLi4KLSAgZGVmaW5l IGluZGV4IDMKLSAgaWYgKCA9PSBpbmRleCAzICkgZWNobyBUaGUgdGhpcmQgdmFsdWUgaXM6IFwm YVtpbmRleF0KLSAgZXZhbHVhdGUgaW5kZXggKGluZGV4ICogNCkKLSAgaWYgKCA+IGluZGV4IHNp emUgKSBlY2hvIE91dCBvZiByYW5nZSEKLQotICAgVGhpcyBpcyBlc3BlY2lhbGx5IG5pY2UgZm9y IGxvb3BzIHRoYXQgZGVhbCB3aXRoIGFycmF5cy4gSGVyZSwgZm9yCi0gICBleGFtcGxlLCBpcyBh IGxvb3AgdGhhdCByZXZlcnNlcyB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzIGluIGFuIGFycmF5 LgotICAgV2hlcmVhcyBmb3JtZXJseSBpdCB3YXMgbmVjZXNzYXJ5IHRvIHdyaXRlOgotCi0gIC5c JW4gOjo9IFxmZGltKCZhKQotICBmb3IgXCVpIDEgXCVuLzIgMSB7Ci0gICAgICAudG1wIDo9IFwm YVtcJW4tXCVpKzFdCi0gICAgICAuXCZhW1wlbi1cJWkrMV0gOj0gXCZhW1wlaV0KLSAgICAgIC5c JmFbXCVpXSA6PSBcbSh0bXApCi0gIH0KLQotICAgUmVjb2RpbmcgdGhpcyB0byB1c2UgbWFjcm8g bmFtZXMgImkiIGFuZCAibiIgaW5zdGVhZCBvZiB0aGUgYmFja3NsYXNoCi0gICB2YXJpYWJsZXMg XCVpIGFuZCBcJW4sIHdlIGhhdmU6Ci0KLSAgLm4gOjo9IFxmZGltKCZhKQotICBmb3IgaSAxIG4v MiAxIHsKLSAgICAgIC50bXAgOj0gXCZhW24taSsxXQotICAgICAgLlwmYVtuLWkrMV0gOj0gXCZh W2ldCi0gICAgICAuXCZhW2ldIDo9IFxtKHRtcCkKLSAgfQotCi0gICB3aGljaCByZWR1Y2VzIHRo ZSBiYWNrc2xhc2ggY291bnQgdG8gbGVzcyB0aGFuIGhhbGYuIFRoZSBmaW5hbAotICAgc3RhdGVt ZW50IGluIHRoZSBsb29wIGNvdWxkIGJlIHdyaXR0ZW4gIi5cJmFbaV0gOjo9IHRtcCIgaWYgdGhl IGFycmF5Ci0gICBjb250YWluZWQgb25seSBudW1iZXJzIChzaW5jZSA6Oj0gaW5kaWNhdGVzIGFy aXRobWV0aWMgZXhwcmVzc2lvbgotICAgZXZhbHVhdGlvbikuCi0KLSAgIEFsc28sIG5vdyB5b3Ug Y2FuIHVzZSBmbG9hdGluZy1wb2ludCBudW1iZXJzIGluIGludGVnZXIgY29udGV4dHMgKHN1Y2gK LSAgIGFzIGFycmF5IHN1YnNjcmlwdHMpLCBpbiB3aGljaCBjYXNlIHRoZXkgYXJlIHRydW5jYXRl ZCB0byBhbiBpbnRlZ2VyCi0gICB2YWx1ZSAoaS5lLiB0aGUgZnJhY3Rpb25hbCBwYXJ0IGlzIGRp c2NhcmRlZCkuCi0KLSAgIEV4YW1wbGVzIG9mIG51bWVyaWMgY29udGV4dHMgaW5jbHVkZToKLQot ICAgICAqIEFycmF5IHN1YnNjcmlwdHMuCi0gICAgICogQW55IG51bWVyaWMgZnVuY3Rpb24gYXJn dW1lbnQuCi0gICAgICogUmlnaHQtaGFuZCBzaWRlIG9mIDo6PSBhc3NpZ25tZW50cy4KLSAgICAg KiBFVkFMVUFURSBjb21tYW5kIG9yIFxmZXZhbHVhdGUoKSBmdW5jdGlvbiBleHByZXNzaW9uLgot ICAgICAqIFRoZSBJTkNSRU1FTlQgb3IgREVDUkVNRU5UIGJ5LXZhbHVlLgotICAgICAqIElGID0s ID4sIDwsICE9LCA+PSwgYW5kIDw9IGNvbXBhcmFuZHMuCi0gICAgICogVGhlIElGIG51bWJlciBj b25zdHJ1Y3QuCi0gICAgICogRk9SLWxvb3AgdmFyaWFibGVzLgotICAgICAqIFNUT1AsIEVORCwg YW5kIEVYSVQgc3RhdHVzIGNvZGVzLgotICAgICAqIFRoZSBJTlBVVCB0aW1lb3V0IHZhbHVlLgot ICAgICAqIFBBVVNFLCBXQUlULCBTTEVFUCwgTVNMRUVQIGludGVydmFscy4KLSAgICAgKiBUaGUg U0hJRlQgYXJndW1lbnQuCi0gICAgICogTnVtZXJpYyBzd2l0Y2ggYXJndW1lbnRzLCBlLmcuIFRZ UEUgL1dJRFRIOm51bWJlciwgU0VORAotICAgICAgIC9MQVJHRVI6bnVtYmVyLgotICAgICAqIFND UkVFTiBNT1ZFLVRPIHJvdyBhbmQgY29sdW1uIG51bWJlci4KLSAgICAgKiBWYXJpb3VzIFNFVCBE SUFMIHBhcmFtZXRlcnMgKHRpbWVvdXQsIHJldHJ5IGxpbWl0LCBldGMpLgotICAgICAqIFZhcmlv dXMgU0VUIFNFTkQgb3IgUkVDRUlWRSBwYXJhbWV0ZXJzIChwYWNrZXQgbGVuZ3RoLCB3aW5kb3cg c2l6ZSwKLSAgICAgICBldGMpLgotICAgICAqIFZhcmlvdXMgb3RoZXIgU0VUIHBhcmFtZXRlcnMu Ci0KLSAgIGFuZDoKLQotICAgICAqIFMtRXhwcmVzc2lvbnMgKGV4cGxhaW5lZCBpbiBbNDEwXVNl Y3Rpb24gOSkuCi0KLSAgIE1hY3JvIG5hbWVzIHVzZWQgaW4gbnVtZXJpYyBjb250ZXh0cyBtdXN0 IG5vdCBpbmNsdWRlIG1hdGhlbWF0aWNhbAotICAgb3BlcmF0b3JzLiBBbHRob3VnaCBpdCBpcyBs ZWdhbCB0byBjcmVhdGUgYSBtYWNybyBjYWxsZWQgImZvbytiYXIiLCBpbgotICAgYSBudW1lcmlj IGNvbnRleHQgdGhpcyB3b3VsZCBiZSB0YWtlbiBhcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgb2Yg ImZvbyIKLSAgIGFuZCAiYmFyIi4gQW55IHN1Y2ggY29uZmxpY3QgY2FuIGJlIGF2b2lkZWQsIG9m IGNvdXJzZSwgYnkgZW5jbG9zaW5nCi0gICB0aGUgbWFjcm8gbmFtZSBpbiBcbSguLi4pLgotCi0g ICBbIFs0MTFdVG9wIF0gWyBbNDEyXUNvbnRlbnRzIF0gWyBbNDEzXUMtS2VybWl0IEhvbWUgXSBb IFs0MTRdS2VybWl0Ci0gICBIb21lIF0KLQotOC4zLiBOZXcgSUYgQ29uZGl0aW9ucwotCi0gICBT ZXZlcmFsIG5ldyBJRiBjb25kaXRpb25zIGFyZSBhdmFpbGFibGU6Ci0KLSAgIElGIERFQ0xBUkVE IGFycmF5bmFtZQotICAgICAgICAgIEV4cGxhaW5lZCBpbiBbNDE1XVNlY3Rpb24gOC42LgotCi0g ICBJRiBLQkhJVAotICAgICAgICAgIEFsbG93cyBhIHNjcmlwdCB0byB0ZXN0IHdoZXRoZXIgYSBr ZXkgd2FzIHByZXNzZWQgd2l0aG91dAotICAgICAgICAgIGFjdHVhbGx5IHRyeWluZyB0byByZWFk IGl0LgotCi0gICBJRiBLRVJCQU5HIChVbml4IG9ubHkpCi0gICAgICAgICAgVHJ1ZSBpZiBLZXJt aXQgd2FzIHN0YXJ0ZWQgZnJvbSBhIEtlcmJhbmcgc2NyaXB0LiBUaGlzIGlzIHVzZWZ1bAotICAg ICAgICAgIGZvciBrbm93aW5nIGhvdyB0byBpbnRlcnByZXQgdGhlIFwmQFtdIGFuZCBcJl9bXSBh cmd1bWVudCB2ZWN0b3IKLSAgICAgICAgICBhcnJheXMsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlv bnMgdG8gZXhpdC4KLQotICAgSUYgSU5URUdFUiBuCi0gICAgICAgICAgVGhpcyBpcyBqdXN0IGEg c3lub255bSBmb3IgSUYgTlVNRVJJQywgd2hpY2ggaXMgdHJ1ZSBpZiBuCi0gICAgICAgICAgY29u dGFpbnMgb25seSBkaWdpdHMgKG9yLCBpZiBuIGlzIGEgdmFyaWFibGUsIGl0cyB2YWx1ZSBjb250 YWlucwotICAgICAgICAgIG9ubHkgZGlnaXRzKS4KLQotICAgQnkgY29udHJhc3QsIElGIEZMT0FU IG4gc3VjY2VlZHMgaWYgbiBpcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBPUiBhbgotICAgaW50 ZWdlciAob3IgYSB2YXJpYWJsZSB3aXRoIGZsb2F0aW5nLXBvaW50IG9yIGludGVnZXIgdmFsdWUp LgotICAgVGhlcmVmb3JlLCBJRiBGTE9BVCBzaG91bGQgYmUgdXNlZCB3aGVuZXZlciBhbnkga2lu ZCBvZiBudW1iZXIgaXMKLSAgIGFjY2VwdGFibGUsIHdoZXJlYXMgSUYgSU5URUdFUiAob3IgSUYg TlVNRVJJQykgd2hlbiBvbmx5IGFuIGludGVnZXIgY2FuCi0gICBiZSB1c2VkLgotCi0gICBbIFs0 MTZdVG9wIF0gWyBbNDE3XUNvbnRlbnRzIF0gWyBbNDE4XUMtS2VybWl0IEhvbWUgXSBbIFs0MTld S2VybWl0Ci0gICBIb21lIF0KLQotOC40LiBUaGUgT05fVU5LTk9XTl9DT01NQU5EIE1hY3JvCi0K LSAgIFRoZSBuZXcgT05fVU5LTk9XTl9DT01NQU5EIG1hY3JvLCBpZiBkZWZpbmVkLCBpcyBleGVj dXRlZCB3aGVuZXZlciB5b3UKLSAgIGdpdmUgYSBjb21tYW5kIHRoYXQgaXMgbm90IGtub3duIHRv IEMtS2VybWl0OyBhbnkgb3BlcmFuZHMgYXJlIHBhc3NlZAotICAgYXMgYXJndW1lbnRzLiBIZXJl IGFyZSBzb21lIHNhbXBsZSBkZWZpbml0aW9uczoKLQotICBERUYgT05fVU5LTk9XTl9DT01NQU5E IHRlbG5ldCBcJTEgOyBUcmVhdCB1bmtub3duIGNvbW1hbmRzIGFzIGhvc3RuYW1lcwotICBERUYg T05fVU5LTk9XTl9DT01NQU5EIGRpYWwgXCUxICAgOyBUcmVhdCB1bmtub3duIGNvbW1hbmRzIHBo b25lIG51bWJlcnMKLSAgREVGIE9OX1VOS05PV05fQ09NTUFORCB0YWtlIFwlMSAgIDsgVHJlYXQg dW5rbm93biBjb21tYW5kcyBhcyBmaWxlbmFtZXMKLSAgREVGIE9OX1VOS05PV05fQ09NTUFORCAh XCUqICAgICAgIDsgVHJlYXQgdW5rbm93biBjb21tYW5kcyBhcyBzaGVsbCBjb21tYW5kcwotCi0g ICBUaGUgT05fQ0QgbWFjcm8sIGlmIGRlZmluZWQsIGlzIGV4ZWN1dGVkIHdoZW5ldmVyIEtlcm1p dCBpcyBnaXZlbiBhIENECi0gICAoY2hhbmdlIGRpcmVjdG9yeSkgY29tbWFuZCAoOC4wLjIxMSku IFVwb24gZW50cnkgdG8gdGhpcyBtYWNybywgdGhlCi0gICBkaXJlY3RvcnkgaGFzIGFscmVhZHkg Y2hhbmdlZCBhbmQgdGhlIG5ldyBkaXJlY3Rvcnkgc3RyaW5nIGlzIGF2YWlsYWJsZQotICAgaW4g dGhlIFx2KGRpcmVjdG9yeSkgdmFyaWFibGUsIGFuZCBhbHNvIGFzIHRoZSBmaXJzdCBhcmd1bWVu dCAoXCUxKS4KLQotICAgWyBbNDIwXVRvcCBdIFsgWzQyMV1Db250ZW50cyBdIFsgWzQyMl1DLUtl cm1pdCBIb21lIF0gWyBbNDIzXUtlcm1pdAotICAgSG9tZSBdCi0KLTguNS4gVGhlIFNIT1cgTUFD Uk8gQ29tbWFuZAotCi0gICBUaGUgU0hPVyBNQUNSTyBjb21tYW5kIGhhcyBiZWVuIGNoYW5nZWQg dG8gYWNjZXB0IG1vcmUgdGhhbiBvbmUgbWFjcm8KLSAgIG5hbWU6Ci0KLSAgKHNldHEgYSAxIGIg MiBjIDMpCi0gIHNob3cgbWFjIGEgYiBjCi0gIGEgPSAxCi0gIGIgPSAyCi0gIGMgPSAzCi0KLSAg IEFuIGV4YWN0IG1hdGNoIGlzIHJlcXVpcmVkIGZvciBlYWNoIG5hbWUgKGV4Y2VwdCB0aGF0IGNh c2UgZG9lc24ndAotICAgbWF0dGVyKS4gSWYgeW91IGluY2x1ZGUgd2lsZGNhcmQgY2hhcmFjdGVy cywgaG93ZXZlciwgYSBwYXR0ZXJuIG1hdGNoCi0gICBpcyBwZXJmb3JtZWQ6Ci0KLSAgc2hvdyBt YWMgW2EtY10qeAotCi0gICBzaG93cyBhbGwgbWFjcm9zIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGgg YSwgYiwgb3IgYywgYW5kIGVuZCB3aXRoIHguCi0KLSAgIFsgWzQyNF1Ub3AgXSBbIFs0MjVdQ29u dGVudHMgXSBbIFs0MjZdQy1LZXJtaXQgSG9tZSBdIFsgWzQyN11LZXJtaXQKLSAgIEhvbWUgXQot Ci04LjYuIEFycmF5cwotCi0gICBBIGNsYXJpZmljYXRpb24gcmVnYXJkaW5nIHJlZmVyZW5jZXMg dG8gYXJyYXkgbmFtZXMgKGFzIG9wcG9zZWQgdG8KLSAgIGFycmF5IGVsZW1lbnRzKTogWW91IGNh biB1c2UgYXJyYXktbmFtZSAiYWJicmV2aWF0aW9ucyIgbGlrZSAmYSBvbmx5IGluCi0gICBjb250 ZXh0cyB0aGF0IGV4cGVjdCBhcnJheSBuYW1lcywgbGlrZSBBUlJBWSBjb21tYW5kcyBvciBhcnJh eS1uYW1lCi0gICBmdW5jdGlvbiBhcmd1bWVudHMgc3VjaCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50 IG9mIFxmc3BsaXQoKS4gSW4gYSBMT0NBTAotICAgc3RhdGVtZW50LCBob3dldmVyLCB5b3UgaGF2 ZSB0byB3cml0ZSBcJmFbXSwgc2luY2UgImxvY2FsICZhIiBtaWdodAotICAgcmVmZXIgdG8gYSBt YWNybyBuYW1lZCAiJmEiLgotCi0gICBJbiBmdW5jdGlvbiBhcmd1bWVudHMsIGhvd2V2ZXIsIHlv dSBNVVNUIHVzZSB0aGUgYWJicmV2aWF0ZWQgZm9ybToKLSAgIFxmc3BsaXQoXCVhLCZhKSBvciBc ZnNwbGl0KFwlYSwmYVtdKS4gSWYgeW91IGluY2x1ZGUgdGhlIGJhY2tzbGFzaCAoYXMKLSAgIGlu ICJcZnNwbGl0KFwlYSxcJmFbXSkiKSBhIHBhcnNlIGVycm9yIG9jY3Vycy4KLQotICAgSGVyZSBh cmUgdGhlIG5ldyBhcnJheS1yZWxhdGVkIGNvbW1hbmRzOgotCi0gICBJRiBERUNMQVJFRCBhcnJh eW5hbWUKLSAgICAgICAgICBBbGxvd3MgYSBzY3JpcHQgdG8gdGVzdCB3aGV0aGVyIGFuIGFycmF5 IGhhcyBiZWVuIGRlY2xhcmVkLiBUaGUKLSAgICAgICAgICBhcnJheW5hbWUgY2FuIGJlIGEgbm9u LWFycmF5IGJhY2tzbGFzaCB2YXJpYWJsZSBzdWNoIGFzIFwlMSBvcgotICAgICAgICAgIFxtKG5h bWUpLCBpbiB3aGljaCBjYXNlIGl0IGlzIGV2YWx1YXRlZCBmaXJzdCwgYW5kIHRoZSByZXN1bHQg aXMKLSAgICAgICAgICB0cmVhdGVkIGFzIHRoZSBhcnJheSBuYW1lLiBPdGhlcndpc2UsIGFycmF5 bmFtZSBpcyB0cmVhdGVkIGFzIGluCi0gICAgICAgICAgdGhlIEFSUkFZIGNvbW1hbmRzOiBpdCBj YW4gYmUgYSwgJmEsICZhW10sIFwmYSwgXCZhW10sIFwmYVszXSwKLSAgICAgICAgICBcJmFbMzo5 XSwgZXRjLCB3aXRoIHRoZSBhcHByb3ByaWF0ZSByZXN1bHRzIGluIGVhY2ggY2FzZS4KLSAgICAg ICAgICBTeW5vbnltOiBJRiBEQ0wuCi0KLSAgIFVOREVDTEFSRSBhcnJheW5hbWUKLSAgICAgICAg ICBVTkRFQ0xBUkUgaXMgYSBuZXcgdG9wLWxldmVsIGNvbW1hbmQgdG8gdW5kZWNsYXJlIGFuIGFy cmF5LgotICAgICAgICAgIFByZXZpb3VzbHkgdGhpcyBjb3VsZCBvbmx5IGJlIGRvbmUgd2l0aCAi ZGVjbGFyZSBcJmFbMF0iIChpLmUuCi0gICAgICAgICAgcmUtZGVjbGFyZSB0aGUgYXJyYXkgd2l0 aCBhIGRpbWVuc2lvbiBvZiAwKS4KLQotICAgQVJSQVkgTElOSyBsaW5rbmFtZSBhcnJheW5hbWUK LSAgICAgICAgICBDcmVhdGVzIGEgc3ltYm9saWMgbGluayBmcm9tIHRoZSBhcnJheSBuYW1lZCBi eSBsaW5rbmFtZSAod2hpY2gKLSAgICAgICAgICBtdXN0IGJlIHRoZSBuYW1lIG9mIGFuIGFycmF5 IHRoYXQgaXMgbm90IHlldCBkZWNsYXJlZCBpbiB0aGUKLSAgICAgICAgICBjdXJyZW50IGNvbnRl eHQpIHRvIHRoZSBhcnJheSBuYW1lZCBieSBhcnJheW5hbWUgKHdoaWNoIG11c3QgdGhlCi0gICAg ICAgICAgbmFtZSBvZiBhIGN1cnJlbnRseSBkZWNsYXJlZCBhcnJheSB0aGF0IGlzIG5vdCBpdHNl bGYgYSBsaW5rLCBvcgotICAgICAgICAgIGEgdmFyaWFibGUgY29udGFpbmluZyB0aGUgbmFtZSBv ZiBzdWNoIGFuIGFycmF5KS4gVGhlIHR3byBuYW1lcwotICAgICAgICAgIGluZGljYXRlIHRoZSBz YW1lIGFycmF5OiBpZiB5b3UgY2hhbmdlIGFuIGFycmF5IGVsZW1lbnQsIHRoZQotICAgICAgICAg IGNoYW5nZSBpcyByZWZsZWN0ZWQgaW4gdGhlIGxpbmsgdG9vLCBhbmQgdmljZSB2ZXJzYS4gSWYg eW91Ci0gICAgICAgICAgdW5kZWNsYXJlIHRoZSBsaW5rLCB0aGUgcmVhbCBhcnJheSBpcyB1bmFm ZmVjdGVkLiBJZiB5b3UKLSAgICAgICAgICB1bmRlY2xhcmUgdGhlIHJlYWwgYXJyYXksIGFsbCBs aW5rcyB0byBpdCBkaXNhcHBlYXIuIElmIHlvdQotICAgICAgICAgIHJlc2l6ZSBhbiBhcnJheSAo ZGlyZWN0bHkgb3IgdGhyb3VnaCBhIGxpbmspLCBhbGwgbGlua3MgdG8gaXQKLSAgICAgICAgICBh cmUgdXBkYXRlZCBhdXRvbWF0aWNhbGx5LgotCi0gICBBcnJheSBsaW5rcyBsZXQgeW91IHBhc3Mg YXJyYXkgbmFtZXMgYXMgYXJndW1lbnRzIHRvIG1hY3Jvcy4gRm9yCi0gICBleGFtcGxlLCBzdXBw b3NlIHlvdSBoYWQgYSBwcm9ncmFtIHRoYXQgbmVlZGVkIHRvIHVwcGVyY2FzZSBhbGwgdGhlCi0g ICBlbGVtZW50cyBvZiBkaWZmZXJlbnQgYXJyYXlzIGF0IGRpZmZlcmVudCB0aW1lcy4gWW91IGNv dWxkIHdyaXRlIGEKLSAgIG1hY3JvIHRvIGRvIHRoaXMsIHdpdGggdGhlIGFycmF5IG5hbWUgYXMg YW4gYXJndW1lbnQuIEJ1dCB3aXRob3V0IGFycmF5Ci0gICBsaW5rcywgdGhlcmUgd291bGQgYmUg bm8gd2F5IHRvIHJlZmVyIHRvIHRoZSBhcmd1bWVudCBhcnJheSB3aXRoaW4gdGhlCi0gICBtYWNy by4gQXJyYXkgbGlua3MgbWFrZSBpdCBlYXN5OgotCi0gIGRlZmluZSBhcnJheXVwcGVyIHsKLSAg ICAgIGxvY2FsIFwmZVtdIFwlaQotICAgICAgYXJyYXkgbGluayBcJmVbXSBcJTEKLSAgICAgIGZv ciBpIDEgXGZkaW0oJmUpIDEgeyAuXCZlW2ldIDo9IFxmdXBwZXIoXCZlW2ldKSB9Ci0gIH0KLSAg ZGVjbGFyZSBcJmFbXSA9IHRoZXNlIGFyZSBzb21lIHdvcmRzCi0gIGFycmF5dXBwZXIgJmEKLSAg c2hvdyBhcnJheSAmYQotCi0gICBUaGUgbWFjcm8gZGVjbGFyZXMgdGhlIGFycmF5IGxpbmsgTE9D QUwsIHdoaWNoIG1lYW5zIGl0IGRvZXNuJ3QKLSAgIGNvbmZsaWN0IHdpdGggYW55IGFycmF5IG9m IHRoZSBzYW1lIG5hbWUgdGhhdCBtaWdodCBleGlzdCBvdXRzaWRlIHRoZQotICAgbWFjcm8sIGFu ZCB0aGF0IHRoZSBsaW5rIGlzIGRlc3Ryb3llZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIG1hY3Jv Ci0gICBleGl0cy4gVGhpcyB3b3JrcywgYnkgdGhlIHdheSwgZXZlbiBpZiB0aGUgbGluayBuYW1l IGFuZCB0aGUgbWFjcm8KLSAgIGFyZ3VtZW50IG5hbWUgYXJlIHRoZSBzYW1lLCBhcyBsb25nIGFz IHRoZSBsaW5rIGlzIGRlY2xhcmVkIExPQ0FMLgotCi0gICBBcyBub3RlZCwgeW91IGNhbid0IG1h a2UgYSBsaW5rIHRvIGEgbm9uZXhpc3RlbnQgYXJyYXkuIFNvIHdoZW4gd3JpdGluZwotICAgYSBt YWNybyB3aG9zZSBqb2IgaXMgdG8gY3JlYXRlIGFuIGFycmF5IHdob3NlIG5hbWUgaXMgcGFzc2Vk IGFzIGFuCi0gICBhcmd1bWVudCwgeW91IG11c3QgZGVjbGFyZSB0aGUgYXJyYXkgZmlyc3QgKHRo ZSBzaXplIGRvZXNuJ3QgbWF0dGVyIGFzCi0gICBsb25nIGFzIGl0J3MgZ3JlYXRlciB0aGFuIDAp LiBFeGFtcGxlOgotCi0gIGRlZmluZSB0cnltZSB7ICAgICAgICAgICAgICAgIDsgRGVtb25zdHJh dGlvbiBtYWNybwotICAgICAgbG9jYWwgXCZlW10gICAgICAgICAgICAgICA7IFdlIG9ubHkgbmVl ZCB0aGlzIGluc2lkZSB0aGUgbWFjcm8KLSAgICAgIGFycmF5IGxpbmsgXCZlW10gXCUxICAgICAg OyBNYWtlIGxvY2FsIGxpbmsKLSAgICAgIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgOyBTaGlm dCBhcmd1bWVudCBsaXN0Ci0gICAgICB2b2lkIFxmc3BsaXQoXCUqLCZlKSAgICAgIDsgU3BsaXQg cmVtYWluZGVyIG9mIGFyZyBsaXN0IGludG8gYXJyYXkKLSAgfQotICBkZWNsYXJlIFwmYVsxXSAg ICAgICAgICAgICAgICA7IERlY2xhcmUgdGFyZ2V0IGFycmF5IGluIGFkdmFuY2UKLSAgdHJ5bWUg JmEgaGVyZSBhcmUgc29tZSB3b3JkcyAgOyBJbnZva2UgdGhlIG1hY3JvIHdpdGggYXJyYXkgbmFt ZSBhbmQgd29yZHMKLSAgc2hvdyBhcnJheSBhICAgICAgICAgICAgICAgICAgOyBTZWUgdGhlIHJl c3VsdHMKLQotICAgT25lIGZpbmFsIGltcHJvdmVtZW50IGFsbG93cyB0aGUgbWFjcm8gaXRzZWxm IHRvIGRlY2xhcmUgdGhlIGFycmF5Ci0gICAodGhpcyB3YXMgbm90IHBvc3NpYmxlIGluIGVhcmxp ZXIgS2VybWl0IHJlbGVhc2VzKTogaWYgdGhlIGFycmF5IG5hbWUKLSAgIGluIHRoZSBERUNMQVJF IGNvbW1hbmQgaXMgYSB2YXJpYWJsZSAoYW5kIG5vdCBhbiBhcnJheSBuYW1lKSwgb3IKLSAgIGlu Y2x1ZGVzIHZhcmlhYmxlcywgdGhlIHJlc3VsdGluZyB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBhcnJh eSBuYW1lLiBTbzoKLQotICBkZWZpbmUgdHJ5bWUgeyAgICAgICAgICAgICAgICA7IERlbW9uc3Ry YXRpb24gbWFjcm8KLSAgICAgIGRlY2xhcmUgXCUxWzFdICAgICAgICAgICAgOyBQcmVsaW1pbmFy eSBkZWNsYXJhdGlvbiBmb3IgdGFyZ2V0IGFycmF5Ci0gICAgICBsb2NhbCBcJmVbXSAgICAgICAg ICAgICAgIDsgV2Ugb25seSBuZWVkIHRoaXMgaW5zaWRlIHRoZSBtYWNybwotICAgICAgYXJyYXkg bGluayBcJmVbXSBcJTEgICAgICA7IE1ha2UgbG9jYWwgbGluawotICAgICAgc2hpZnQgICAgICAg ICAgICAgICAgICAgICA7IFNoaWZ0IGFyZ3VtZW50IGxpc3QKLSAgICAgIHZvaWQgXGZzcGxpdChc JSosJmUpICAgICAgOyBTcGxpdCByZW1haW5kZXIgb2YgYXJnIGxpc3QgaW50byBhcnJheQotICB9 Ci0gIHRyeW1lICZhIGhlcmUgYXJlIHNvbWUgd29yZHMgIDsgSW52b2tlIHRoZSBtYWNybyB3aXRo IGFycmF5IG5hbWUgYW5kIHdvcmRzCi0gIHNob3cgYXJyYXkgYSAgICAgICAgICAgICAgICAgIDsg U2VlIHRoZSByZXN1bHRzCi0KLSAgIFRoZSBTSE9XIEFSUkFZIGNvbW1hbmQgbm93IGluZGljYXRl cyB3aGV0aGVyIGFuIGFycmF5IG5hbWUgaXMgYSBsaW5rLgotCi0gICBBbHNvIHNlZSB0aGUgZGVz Y3JpcHRpb25zIG9mIFs0MjhdXGZqb2luKCkgYW5kIFs0MjldXGZzcGxpdCgpLCBwbHVzCi0gICBb NDMwXVNlY3Rpb24gOC4xMCBvbiB0aGUgTUlOUFVUIGNvbW1hbmQsIHdoaWNoIHNob3dzIGhvdyBh biBlbnRpcmUKLSAgIGFycmF5IChvciBzZWdtZW50IG9mIGl0KSBjYW4gYmUgdXNlZCBhcyB0aGUg TUlOUFVUIHRhcmdldCBsaXN0LgotCi0gICBbIFs0MzFdVG9wIF0gWyBbNDMyXUNvbnRlbnRzIF0g WyBbNDMzXUMtS2VybWl0IEhvbWUgXSBbIFs0MzRdS2VybWl0Ci0gICBIb21lIF0KLQotOC43LiBO ZXcgb3IgSW1wcm92ZWQgQnVpbHQtaW4gVmFyaWFibGVzIGFuZCBGdW5jdGlvbnMKLQotICAgVGhl IGZvbGxvd2luZyBuZXcgYnVpbHQtaW4gdmFyaWFibGVzIGFyZSBhdmFpbGFibGU6Ci0KLSAgXHYo YnVpbGRpZCkgICAgICAgQSBkYXRlIHN0cmluZyBsaWtlICIyMDAwMDgwOCIgaW5kaWNhdGluZyB3 aGVuIEMtS2VybWl0IHdhcyBiCi11aWx0LgotICBcdihmdGltZSkgICAgICAgICBDdXJyZW50IHRp bWUsIHNlY3Mgc2luY2UgbWlkbmlnaHQsIGluY2x1ZGluZyBmcmFjdGlvbiBvZiBzZWMKLW9uZC4K LSAgXHYoaXByb21wdCkgICAgICAgVGhlIGN1cnJlbnQgU0VUIFBST01QVCB2YWx1ZQotICBcdihz ZXhwKSAgICAgICAgICBUaGUgbW9zdCByZWNlbnQgUy1FeHByZXNzaW9uIChzZWUgWzQzNV1TZWN0 aW9uIDkpCi0gIFx2KHNkZXB0aCkgICAgICAgIFRoZSBjdXJyZW50IFMtRXhwcmVzc2lvbiBpbnZv Y2F0aW9uIGRlcHRoIChbNDM2XVNlY3Rpb24gOSkKLSAgXHYoc3ZhbHVlKSAgICAgICAgVGhlIHZh bHVlIG9mIHRoZSBtb3N0IHJlY2VudCBTLUV4cHJlc3Npb24gKFs0MzddU2VjdGlvbiA5KQotCi0g IFx2KGZ0cF9jb2RlKSAgICAgIE1vc3QgcmVjZW50IEZUUCByZXNwb25zZSBjb2RlIChbNDM4XVNl Y3Rpb24gMykKLSAgXHYoZnRwX2Nvbm5lY3RlZCkgRlRQIGNvbm5lY3Rpb24gc3RhdHVzIChbNDM5 XVNlY3Rpb24gMykKLSAgXHYoZnRwX2NwbCkgICAgICAgRlRQIENvbW1hbmQgUHJvdGVjdGlvbiBM ZXZlbCAoWzQ0MF1TZWN0aW9uIDMuMikKLSAgXHYoZnRwX2RwbCkgICAgICAgRlRQIERhdGEgUHJv dGVjdGlvbiBMZXZlbCAoWzQ0MV1TZWN0aW9uIDMuMikKLSAgXHYoZnRwX2dldHB1dHJlbW90ZSkg VGhlIGN1cnJlbnQgU0VUIEdFVC1QVVQtUkVNT1RFIHNldHRpbmcgKFs0NDJdU2VjdGlvbiAzLjgp Ci0KLSAgXHYoZnRwX2hvc3QpICAgICAgTmFtZSBvciBJUCBhZGRyZXNzIG9mIEZUUCBzZXJ2ZXIg KFs0NDNdU2VjdGlvbiAzKQotICBcdihmdHBfbG9nZ2VkaW4pICBGVFAgbG9naW4gc3RhdHVzIChb NDQ0XVNlY3Rpb24gMykKLSAgXHYoZnRwX21lc3NhZ2UpICAgTW9zdCByZWNlbnQgRlRQIHJlc3Bv bnNlIG1lc3NhZ2UgKFs0NDVdU2VjdGlvbiAzKQotICBcdihmdHBfc2VjdXJpdHkpICBGVFAgU2Vj dXJpdHkgbWV0aG9kIChbNDQ2XVNlY3Rpb24gMy4yKQotICBcdihmdHBfc2VydmVyKSAgICBPUyB0 eXBlIG9mIEZUUCBzZXJ2ZXIgKFs0NDddU2VjdGlvbiAzKQotCi0gIFx2KGh0dHBfY29kZSkgICAg ICAgTW9zdCByZWNlbnQgSFRUUCByZXNwb25zZSBjb2RlCi0gIFx2KGh0dHBfY29ubmVjdGVkKSAg SFRUUCBjb25uZWN0aW9uIHN0YXR1cwotICBcdihodHRwX2hvc3QpICAgICAgIE5hbWUgb3IgSVAg YWRkcmVzcyBvZiBIVFRQIHNlcnZlcgotICBcdihodHRwX21lc3NhZ2UpICAgIE1vc3QgcmVjZW50 IEhUVFAgcmVzcG9uc2UgbWVzc2FnZQotICBcdihodHRwX3NlY3VyaXR5KSAgIFRMUyBjaXBoZXIg dXNlZCB0byBzZWN1cmUgdGhlIEhUVFAgc2Vzc2lvbgotCi0gIFx2KGhvdXIpICAgICAgICAgICAg SG91ciBvZiB0aGUgZGF5LCAwIHRvIDIzLgotICBcdih0aW1lc3RhbXApICAgICAgIEVxdWl2YWxl bnQgdG8gIlx2KG5kYXRlKSBcdih0aW1lKSIuCi0KLSAgXHYobG9nX2RlYnVnKSAgICAgICBDdXJy ZW50IGRlYnVnIGxvZyBmaWxlLCBpZiBhbnkuCi0gIFx2KGxvZ19wYWNrZXQpICAgICAgQ3VycmVu dCBwYWNrZXQgbG9nIGZpbGUsIGlmIGFueS4KLSAgXHYobG9nX3Nlc3Npb24pICAgICBDdXJyZW50 IHNlc3Npb24gbG9nIGZpbGUsIGlmIGFueS4KLSAgXHYobG9nX3RyYW5zYWN0aW9uKSBDdXJyZW50 IHRyYW5zYWN0aW9uIGxvZyBmaWxlLCBpZiBhbnkuCi0gIFx2KGxvZ19jb25uZWN0aW9uKSAgQ3Vy cmVudCBjb25uZWN0aW9uIGxvZyBmaWxlLCBpZiBhbnkuCi0KLSAgIFRoZSBmb2xsb3dpbmcgbmV3 IG9yIGltcHJvdmVkIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlOgotCi0gIFxmY21k c3RhY2soKSAgICAgICAgICAgIEFsbG93cyBwcm9ncmFtbWF0aWMgYWNjZXNzIHRvIHRoZSBjb21t YW5kIHN0YWNrLgotICBcZmN2dGRhdGUoKSAgICAgICAgICAgICBbNDQ4XVNlY3Rpb24gOC4xMywg Zm9ybWF0IG9wdGlvbnMgYWRkZWQKLSAgXGZkZWx0YTJzZWNzKCkgICAgICAgICAgWzQ0OV1TZWN0 aW9uIDguMTMKLSAgXGZkb3N0b3VuaXhwYXRoKHMxKSAgICAgQ29udmVydHMgYSBET1MgZmlsZW5h bWUgdG8gVW5peCBmb3JtYXQuCi0gIFxmc3BsaXQoKSAgICAgICAgICAgICAgIE5vdyBhbGxvd3Mg Z3JvdXBpbmcvbmVzdGluZyBpbiBzb3VyY2Ugc3RyaW5nLgotICBcZndvcmQoKSAgICAgICAgICAg ICAgICBBbGxvd3MgdGhlIHNhbWUgZ3JvdXBpbmcgYW5kIG5lc3RpbmcuCi0gIFxmam9pbigmYSxz MSxuMSxuMikgICAgIENvcGllcyBhbiBhcnJheSBpbnRvIGEgc2luZ2xlIHN0cmluZy4KLSAgXGZz dWJzdGl0dXRlKHMxLHMyLHMzKSAgU3Vic3RpdHV0ZXMgY2hhcmFjdGVycyB3aXRoaW4gYSBzdHJp bmcuCi0gIFxmcmVwbGFjZSgpICAgICAgICAgICAgIEhhcyBuZXcgNHRoICJvY2N1cnJlbmNlIiBh cmd1bWVudC4KLSAgXGZzZXhwcmVzc2lvbigpICAgICAgICAgRXZhbHVhdGVzIGFuIFMtRXhwcmVz c2lvbiAoZXhwbGFpbmVkIGluIFs0NTBdU2VjdGlvbiA5Ci0pLgotICBcZnRyaW0oKSwgXGZsdHJp bSgpICAgICBOb3cgdHJpbSBDUiBhbmQgTEYgYnkgZGVmYXVsdCwgYXMgd2VsbCBhcyBTUCBhbmQg VGFiLgotICBcZnVuaXh0b2Rvc3BhdGgoczEpICAgICBDb252ZXJ0cyBhIFVuaXggZmlsZW5hbWUg dG8gRE9TIGZvcm1hdC4KLSAgXGZrZXl3b3JkdmFsKHMxLGMxKSAgICAgQXNzaWducyB2YWx1ZXMg dG8ga2V5d29yZHMgKG1hY3JvcykgKGV4cGxhaW5lZCBiZWxvdykuCi0KLSAgIE1vc3QgZnVuY3Rp b25zIHRoYXQgaGF2ZSAiMiIgaW4gdGhlaXIgbmFtZXMgdG8gc3RhbmQgZm9yIHRoZSB3b3JkICJ0 byIKLSAgIGNhbiBub3cgYWxzbyBiZSB3cml0dGVuIHdpdGggInRvIiwgZS5nLiAiXGZkZWx0YTJz ZWNzKCksIgotICAgXGZkZWx0YXRvc2VjcygpLiIKLQotICAgXGZ1bnRhYmlmeShzdHJpbmcpCi0g ICAgICAgICAgKE5ldyB0byA4LjAuMjExKSBSZXBsYWNlcyBIb3Jpem9udGFsIFRhYiBjaGFyYWN0 ZXJzIGluIHRoZSBnaXZlbgotICAgICAgICAgIHN0cmluZyB3aXRoIHNwYWNlcyBiYXNlZCBvbiBW VDEwMC1saWtlIHRhYiBzdG9wcy4KLQotICAgXGZ2ZXJpZnkoczEsczIsbikKLSAgICAgICAgICBB cyBvZiB2ZXJzaW9uIDguMC4yMTEsIHJldHVybnMgLTEgaWYgczIgaXMgYW4gZW1wdHkgc3RyaW5n LgotICAgICAgICAgIFByZXZpb3VzbHkgaXQgcmV0dXJuZWQgMCwgbWFraW5nIFxmdmVyaWZ5KGFi YyxcJWEpIGxvb2sgYXMgaWYKLSAgICAgICAgICBcJWEgd2FzIGEgc3RyaW5nIGNvbXBvc2VkIG9m IGEncywgYidzLCBhbmQvb3IgYydzIHdoZW4gaW4gZmFjdAotICAgICAgICAgIGl0IGNvbnRhaW5l ZCBub3RoaW5nLgotCi0gICBcZmNvZGUoc3RyaW5nKQotICAgICAgICAgIEFzIG9mIHZlcnNpb24g OC4wLjIxMSwgcmV0dXJucyAwIGlmIHN0cmluZyBpcyBlbXB0eSBvciBtaXNzaW5nLgotICAgICAg ICAgIFByZXZpb3VzbHkgaXQgcmV0dXJuZWQgdGhlIGVtcHR5IHN0cmluZywgd2hpY2ggbWFkZSBp dCB1bnNhZmUgdG8KLSAgICAgICAgICB1c2UgaW4gYXJpdGhtZXRpYyBvciBib29sZWFuIGV4cHJl c3Npb25zLgotCi0gICBcdihpbnNjYWxlKQotICAgICAgICAgIE5ldyB0byB2ZXJzaW9uIDguMC4y MTEsIGl0cyB2YWx1ZSBpcyB0aGUgSU5QVVQgU0NBTEUtRkFDVE9SCi0gICAgICAgICAgKFs0NTFd U2VjdGlvbiA4LjEwKSwgZGVmYXVsdCAxLjAuCi0KLTguNy4xLiBUaGUgXGZrZXl3b3JkdmFsKCkg RnVuY3Rpb24KLQotICAgXGZrZXl3b3JkdmFsKHMxLGMxKSBpcyBuZXcgdG8gQy1LZXJtaXQgOC4w LiBHaXZlbiBhIHN0cmluZyBzMSBvZiB0aGUKLSAgIGZvcm0gIm5hbWU9dmFsdWUiLCBpdCBjcmVh dGVzIGEgbWFjcm8gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgYXNzaWducwotICAgaXQgdGhlIGdp dmVuIHZhbHVlLiBJZiBubyB2YWx1ZSBhcHBlYXJzIGFmdGVyIHRoZSBlcXVhbCBzaWduLCBhbnkK LSAgIGV4aXN0aW5nIG1hY3JvIG9mIHRoZSBnaXZlbiBuYW1lIGlzIHVuZGVmaW5lZC4gQmxhbmtz IGFyZSBhdXRvbWF0aWNhbGx5Ci0gICB0cmltbWVkIGZyb20gYXJvdW5kIHRoZSBuYW1lIGFuZCB2 YWx1ZS4gVGhlIG9wdGlvbmFsIGMxIHBhcmFtZXRlciBpcwotICAgdGhlIGFzc2lnbm1lbnQgb3Bl cmF0b3IgY2hhcmFjdGVyLCBlcXVhbCBzaWduICg9KSBieSBkZWZhdWx0LiBUaGlzCi0gICBmdW5j dGlvbiBpcyBoYW5keSBmb3IgcHJvY2Vzc2luZyBrZXl3b3JkIHBhcmFtZXRlcnMgb3IgYW55IG90 aGVyIGZvcm0KLSAgIG9mIHBhcmFtZXRlci12YWx1ZSBwYWlyLiBTdXBwb3NlLCBmb3IgZXhhbXBs ZSwgeW91IHdhbnQgdG8gd3JpdGUgYQotICAgbWFjcm8gdGhhdCBhY2NlcHRzIGtleXdvcmQgcGFy YW1ldGVycyByYXRoZXIgdGhhbiBwb3NpdGlvbmFsIG9uZXM6Ci0KLSAgZGVmaW5lIE1ZRElBTCB7 Ci0gICAgICBsb2NhbCBcJWkgbW9kZW0gaGFuZ3VwIG1ldGhvZCBkZXZpY2Ugc3BlZWQgbnVtYmVy Ci0gICAgICBkZWYgbnVtYmVyIDU1NTEyMzQgICAgICAgICAgOyBBc3NpZ24gZGVmYXVsdCBwYXJh bWV0ZXIgdmFsdWVzCi0gICAgICBkZWYgc3BlZWQgNTc2MDAKLSAgICAgIGRlZiBtb2RlbSB1c3Jv Ym90aWNzCi0gICAgICBkZWYgaGFuZ3VwIHJzMjMyCi0gICAgICBkZWYgbWV0aG9kIHRvbmUKLSAg ICAgIGRlZiBjb3VudHJ5IDEKLSAgICAgIGZvciBcJWkgMSBcdihhcmdjKS0xIDEgeyAgICA7IFBh cnNlIGFueSBrZXl3b3JkIHBhcmFtZXRlcnMuLi4KLSAgICAgICAgICBpZiBub3QgXGZrZXl3b3Jk dmFsKFwmX1tcJWldKSBlbmQgMSBCYWQgcGFyYW1ldGVyOiAiXCZfW1wlaV0iCi0gICAgICB9Ci0g ICAgICBzZXQgZGlhbCBjb3VudHJ5IFxtKGNvdW50cnkpCi0gICAgICBzZXQgbW9kZW0gdHlwZSBc bShtb2RlbSkKLSAgICAgIHNldCBtb2RlbSBoYW5nIFxtKGhhbmd1cCkKLSAgICAgIHNldCBkaWFs IG1ldGhvZCBcbSh0b25lKQotICAgICAgc2V0IGxpbmUgXG0oZGV2aWNlKQotICAgICAgaWYgZmFp bCBzdG9wIDEKLSAgICAgIHNldCBzcGVlZCBcbShzcGVlZCkKLSAgICAgIGlmIGZhaWwgc3RvcCAx Ci0gICAgICBzaG93IGNvbW0KLSAgICAgIHNldCBkaWFsIGRpc3BsYXkgb24KLSAgICAgIGRpYWwg XG0obnVtYmVyKQotICAgICAgaWYgc3VjY2VzcyBjb25uZWN0Ci0gIH0KLQotICAgSW4gdGhpcyBl eGFtcGxlLCBhbGwgdGhlIGRlZmF1bHRzIGFyZSBzZXQgdXAgaW5zaWRlIHRoZSBtYWNybywgYW5k Ci0gICB0aGVyZWZvcmUgaXQgY2FuIGJlIGludm9rZWQgd2l0aCBubyBwYXJhbWV0ZXJzIGF0IGFs bC4gQnV0IGlmIHlvdSB3YW50Ci0gICB0byBoYXZlIHRoZSBtYWNybyBkaWFsIGEgZGlmZmVyZW50 IG51bWJlciwgeW91IGNhbiBzdXBwbHkgaXQgYXMKLSAgIGZvbGxvd3M6Ci0KLSAgbXlkaWFsIG51 bWJlcj03NjU0MzIxCi0KLSAgIFlvdSBjYW4gc3VwcGx5IGFueSBudW1iZXIgb2Yga2V5d29yZCBw YXJhbWV0ZXJzLCBhbmQgeW91IGNhbiBnaXZlIHRoZW0KLSAgIGluIGFueSBvcmRlcjoKLQotICBt eWRpYWwgbnVtYmVyPTc2NTQzMjEgaGFuZ3VwPW1vZGVtIHNwZWVkPTExNTIwMAotCi04LjcuMi4g VGhlIFxmc3BsaXQoKSwgXGZqb2luKCksIGFuZCBcZndvcmQoKSBGdW5jdGlvbnMKLQotICAgXGZq b2luKCZhLHMxLG4xLG4yKSBpcyBhbHNvIG5ldzsgaXQgY3JlYXRlcyBhIHN0cmluZyBmcm9tIGFu IGFycmF5IChvcgotICAgYSBwaWVjZSBvZiBvbmUpLiAmYSBpcyB0aGUgbmFtZSBvZiB0aGUgYXJy YXkgKGEgcmFuZ2Ugc3BlY2lmaWVyIGNhbiBiZQotICAgaW5jbHVkZWQpOyBzMSBpcyBhIGNoYXJh Y3RlciBvciBzdHJpbmcgdG8gc2VwYXJhdGUgZWFjaCBlbGVtZW50IGluIHRoZQotICAgcmVzdWx0 IHN0cmluZyAoY2FuIGJlIG9taXR0ZWQsIGluIHdoaWNoIGNhc2UgdGhlIGVsZW1lbnRzIGFyZSBu b3QKLSAgIHNlcGFyYXRlZCBhdCBhbGwpLCBhbmQgbjEgaXMgYSBncm91cGluZyBtYXNrLCBleHBs YWluZWQgYmVsb3cuIElmIHMxIGlzCi0gICBlbXB0eSBvciBub3Qgc3BlY2lmaWVkLCB0aGUgYXJy YXkgZWxlbWVudHMgYXJlIHNlcGFyYXRlZCB3aXRoIHNwYWNlcy4KLSAgIElmIHlvdSB3YW50IHRo ZSBlbGVtZW50cyBjb25jYXRlbmF0ZWQgd2l0aCBubyBzZXBhcmF0b3IsIGluY2x1ZGUgYQotICAg bm9uemVybyBuMiBhcmd1bWVudC4gR2l2ZW4gdGhlIGFycmF5OgotCi0gIGRlY2xhcmUgXCZhW10g PSAwIDEgMiAzIDQgNSA2IDcgOCA5Ci0KLSAgIHlvdSBjYW4gZ2V0IGVmZmVjdHMgbGlrZSB0aGlz OgotCi0gIFxmam9pbigmYSkgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5Ci0gIFxmam9pbigmYSw6 KSAgICAwOjE6MjozOjQ6NTo2Ojc6ODo5Ci0gIFxmam9pbigmYSx7LH0pICAwLDEsMiwzLDQsNSw2 LDcsOCw5Ci0gIFxmam9pbigmYSwuLi4pICAwLi4uMS4uLjIuLi4zLi4uNC4uLjUuLi42Li4uNy4u LjguLi45Ci0gIFxmam9pbigmYSwsLDEpICAwMTIzNDU2Nzg5Ci0KLSAgIFxmc3BsaXQoKSwgXGZ3 b3JkKCksIFxmc3RyaXBiKCksIGFuZCBcZmpvaW4oKSBhY2NlcHQgYSAiZ3JvdXBpbmcgbWFzayIK LSAgIGFyZ3VtZW50LCBuMSwgd2hpY2ggaXMgYSBudW1iZXIgZnJvbSAwIHRvIDYzLCBpbiB3aGlj aDoKLQotICAgMSA9ICIiIGRvdWJsZXF1b3RlcwotICAgMiA9IHt9IGJyYWNlcwotICAgNCA9ICcn IHNpbmdsZXF1b3RlcwotICAgOCA9ICgpIHBhcmVudGhlc2VzCi0gIDE2ID0gW10gc3F1YXJlIGJy YWNrZXRzCi0gIDMyID0gPD4gYW5nbGUgYnJhY2tldHMKLQotICAgVGhlc2UgY2FuIGJlIE9SJ2Qg KGFkZGVkKSB0b2dldGhlciB0byBtYWtlIGFueSBudW1iZXIgMC02MyAoLTEgaXMKLSAgIHRyZWF0 ZWQgdGhlIHNhbWUgYXMgNjMsIDAgbWVhbnMgbm8gZ3JvdXBpbmcpLiBJZiBhIGJpdCBpcyBvbiwg dGhlCi0gICBjb3JyZXNwb25kaW5nIGtpbmQgb2YgZ3JvdXBpbmcgaXMgc2VsZWN0ZWQuIChJZiBt b3JlIHRoYW4gMSBiaXQgaXMgc2V0Ci0gICBmb3IgXGZqb2luKCksIG9ubHkgdGhlIGxvd2VzdC1v cmRlciBvbmUgaXMgdXNlZC4pCi0KLSAgIElmIHlvdSBpbmNsdWRlIHRoZSBzYW1lIGNoYXJhY3Rl ciBpbiB0aGUgZ3JvdXBpbmcgbWFzayBhbmQgdGhlIGluY2x1ZGUKLSAgIGxpc3QsIHRoZSBncm91 cGluZyBtYXNrIHRha2VzIHByZWNlZGVuY2UuIEV4YW1wbGU6Ci0KLSAgZGVmIFwlYSAgYSAiYiBj IGQiIGUKLSAgXGZzcGxpdChcJWEsJmFbXSwsLC0xKSAgPSAzICA8LS0gZG91YmxlcXVvdGUgdXNl ZCBmb3IgZ3JvdXBpbmcKLSAgXGZzcGxpdChcJWEsJmFbXSwsIiwtMSkgPSAzICA8LS0gZG91Ymxl cXVvdGUgc3RpbGwgdXNlZCBmb3IgZ3JvdXBpbmcKLQotICAgTmVzdGluZyBvZiBtYXRjaGVkIGxl ZnQgYW5kIHJpZ2h0IGdyb3VwaW5nIGNoYXJhY3RlcnMgKHBhcmVudGhlc2VzLAotICAgYnJhY2Vz LCBhbmQgYnJhY2tldHMsIGJ1dCBub3QgcXVvdGVzKSBpcyByZWNvZ25pemVkLiBFeGFtcGxlOgot Ci0gIGRlZiBcJWEgYSAoYiBjIDxkIGUgW2YgZyB7aCBpfSBqIGtdIGwgbT4gbiBvKSBwCi0gIFxm c3BsaXQoXCVhLCZhLCwsMCkgID0gMTYgKG5vIGdyb3VwaW5nKQotICBcZnNwbGl0KFwlYSwmYSws LDIpICA9IDE1IChicmFjZXMgb25seSkKLSAgXGZzcGxpdChcJWEsJmEsLCwxNikgPSAxMSAoc3F1 YXJlIGJyYWNrZXRzIG9ubHkpCi0gIFxmc3BsaXQoXCVhLCZhLCwsMzIpID0gIDcgKGFuZ2xlIGJy YWNrZXRzIG9ubHkpCi0gIFxmc3BsaXQoXCVhLCZhLCwsNjMpID0gIDMgKGFsbCkKLSAgXGZzcGxp dChcJWEsJmEsLCwtMSkgPSAgMyAoYWxsKQotCi0gICBcZnNwbGl0KCkgYW5kIFxmam9pbigpIGFy ZSAicmVjaXByb2NhbCIgZnVuY3Rpb25zLiBZb3UgY2FuIHNwbGl0IGEKLSAgIHN0cmluZyB1cCBp bnRvIGFuIGFycmF5IGFuZCBqb2luIGl0IGJhY2sgaW50byBhIG5ldyBzdHJpbmcgdGhhdCBpcwot ICAgZXF1aXZhbGVudCwgYXMgbG9uZyBhcyBcZnNwbGl0KCkgYW5kIFxmam9pbigpIGFyZSBnaXZl biBlcXVpdmFsZW50Ci0gICBncm91cGluZyBtYXNrcywgZXhjZXB0IHRoYXQgdGhlIHR5cGUgb2Yg YnJhY2VzIG1pZ2h0IGNoYW5nZS4gRXhhbXBsZToKLQotICBkZWYgXCVhIGEge2IgYyBbZCBlXSBm IGd9ICJoIGkiIGogPGsgbD4gbQotICBlY2hvIFNUUklORz1bXCVhXQotICBlY2hvIFdPUkRTPVxm c3BsaXQoXCVhLCZhLCwsLTEpCi0gIHNob3cgYXJyYXkgYQotICBhc2cgXCViIFxmam9pbigmYSx7 IH0sMikKLSAgZWNobyBKT0lOICA9W1wlYl0KLSAgZWNobyBXT1JEUz1cZnNwbGl0KFwlYiwmYiws LC0xKQotICBzaG93IGFycmF5IGIKLQotICAgVGhlIGFycmF5cyBhIGFuZCBiIGFyZSBpZGVudGlj YWwuIFRoZSBzdHJpbmdzIGEgYW5kIGIgYXJlIGFzIGZvbGxvd3M6Ci0KLSAgXCVhOiBhIHtiIGMg W2QgZV0gZiBnfSAiaCBpIiBqIDxrIGw+IG0KLSAgXCViOiBhIHtiIGMgW2QgZV0gZiBnfSB7aCBp fSBqIHtrIGx9IG0KLQotICAgSXQgaXMgcG9zc2libGUgdG8gcXVvdGUgc2VwYXJhdG9yIGdyb3Vw aW5nIGNoYXJhY3RlcnMgd2l0aCBiYWNrc2xhc2ggdG8KLSAgIG92ZXJyaWRlIHRoZWlyIGdyb3Vw aW5nIGZ1bmN0aW9uLiBBbmQgb2YgY291cnNlIHRvIGluY2x1ZGUgYmFja3NsYXNoCi0gICBpdHNl bGYgaW4gdGhlIHN0cmluZywgaXQgbXVzdCBiZSBxdW90ZWQgdG9vLiBGdXJ0aGVybW9yZSwgZWFj aAotICAgYmFja3NsYXNoIG11c3QgYmUgZG91YmxlZCwgc28gdGhlIGNvbW1hbmQgcGFyc2VyIHdp bGwgc3RpbGwgcGFzcyBvbmUKLSAgIGJhY2tzbGFzaCB0byBcZnNwbGl0KCkgZm9yIGVhY2ggdHdv IHRoYXQgaXQgc2Vlcy4gSGVyZSBhcmUgc29tZQotICAgZXhhbXBsZXMgdXNpbmcgXGZzcGxpdCgp IHdpdGggYSBncm91cGluZyBtYXNrIG9mIDggKHRyZWF0IHBhcmVudGhlc2VzCi0gICBhcyBncm91 cGluZyBjaGFyYWN0ZXJzKS4KLQotICBTdHJpbmcgICAgICAgICAgICAgICAgICBSZXN1bHQKLSAg ICBhIGIgYyBkIGUgZiAgICAgICAgICAgICA2Ci0gICAgYSBiXFwgYyBkIGUgZiAgICAgICAgICAg NQotICAgIGEgYiAoYyBkIGUpIGYgICAgICAgICAgIDQKLSAgICBhIGIgXFwoYyBkIGVcXCkgZiAg ICAgICA2Ci0gICAgYSBiIFxcXFwoYyBkIGVcXFxcKSBmICAgNwotCi0gICBcZnNwbGl0KCkgaGFz IGFsc28gYmVlbiBjaGFuZ2VkIHRvIGNyZWF0ZSBpdHMgYXJyYXkgKGlmIG9uZSBpcyBnaXZlbikK LSAgIGVhY2ggdGltZSBpdCBpcyBjYWxsZWQsIHNvIG5vdyBpdCBjYW4gYmUgY29udmVuaWVudGx5 IGNhbGxlZCBpbiBhIGxvb3AKLSAgIHdpdGhvdXQgaGF2aW5nIHRvIHJlZGVjbGFyZSB0aGUgYXJy YXkgZWFjaCB0aW1lLgotCi0gICBJbmNpZGVudGFsbHkuLi4gU29tZXRpbWVzIHlvdSBtaWdodCB3 YW50IHRvIGludm9rZSBcZnNwbGl0KCkgaW4gYQotICAgc2l0dWF0aW9uIHdoZXJlIHlvdSBkb24n dCBjYXJlIGFib3V0IGl0cyByZXR1cm4gdmFsdWUsIGUuZy4gd2hlbiB5b3UKLSAgIGp1c3Qgd2Fu dCB0byBmaWxsIHRoZSBhcnJheS4gTm93IHlvdSBjYW4gImNhbGwiIFxmc3BsaXQoKSBvciBhbnkg b3RoZXIKLSAgIGZ1bmN0aW9uIHdpdGggdGhlIG5ldyBbNDUyXVZPSUQgY29tbWFuZDoKLQotICB2 b2lkIFxmc3BsaXQoXCVhLCZhKQotCi0gICBcZnNwbGl0KCkgYW5kIFxmam9pbigpIGFsc28gYWNj ZXB0IGEgbmV3LCBvcHRpb25hbCA2dGggYXJndW1lbnQsIGFuCi0gICBvcHRpb25zIGZsYWcsIGEg bnVtYmVyIHRoYXQgY2FuIHNwZWNpZnkgYSBudW1iZXIgb2Ygb3B0aW9ucy4gU28gZmFyCi0gICB0 aGVyZSBpcyBqdXN0IG9uZSBvcHRpb24sIHdob3NlIHZhbHVlIGlzIDE6Ci0KLSAgIHNlcGFyYXRv ci1mbGFnCi0gICAgICAgICAgTm9ybWFsbHkgc2VwYXJhdG9ycyBhcmUgY29sbGFwc2VkLiBTbywg Zm9yIGV4YW1wbGUsCi0KLSAgXGZ3b3JkKFRocmVlICAgICAgICBsaXR0bGUgICAgICAgICAgd29y ZHMsMikKLQotICAgICAgICAgIHJldHVybnMgImxpdHRsZSIgKHRoZSBzZWNvbmQgd29yZCkuIFNw YWNlIGlzIGEgc2VwYXJhdG9yLCBidXQKLSAgICAgICAgICB0aGVyZSBhcmUgbXVsdGlwbGUgc3Bh Y2VzIGJldHdlZW4gZWFjaCB3b3JkLiBJZiB0aGUgdmFsdWUgMSBpcwotICAgICAgICAgIGluY2x1 ZGVkIGluIHRoZSBvcHRpb24gZmxhZywgaG93ZXZlciwgZWFjaCBzZXBhcmF0b3IgY291bnRzLiBJ ZgotICAgICAgICAgIHR3byBzZXBhcmF0b3JzIGFyZSBhZGphY2VudCwgYW4gZW1wdHkgd29yZCBp cyBwcm9kdWNlZCBiZXR3ZWVuCi0gICAgICAgICAgdGhlbS4gVGhpcyBpcyB1c2VmdWwgZm9yIHBh cnNpbmcgKGUuZy4pIGNvbW1hLXNlcGFyYXRlZCBsaXN0cwotICAgICAgICAgIGV4cG9ydGVkIGZy b20gZGF0YWJhc2VzIG9yIHNwcmVhZHNoZWV0cy4KLQotOC43LjMuIFRoZSBcZmNtZHN0YWNrKCkg RnVuY3Rpb24KLQotICAgVGhlIG5ldyBcZmNtZHN0YWNrKCkgZnVuY3Rpb24gZ2l2ZXMgYWNjZXNz IHRvIHRoZSBjb21tYW5kIHN0YWNrOgotCi0gICBcZmNtZHN0YWNrKG4xLG4yKQotICAgICAgICAg IEFyZ3VtZW50czogbjEgaXMgdGhlIGNvbW1hbmQgc3RhY2sgbGV2ZWwuIElmIG9taXR0ZWQsIHRo ZQotICAgICAgICAgIGN1cnJlbnQgbGV2ZWwsIFx2KGNtZGxldmVsKSwgaXMgdXNlZC4gbjIgaXMg YSBmdW5jdGlvbiBjb2RlCi0gICAgICAgICAgc3BlY2lmeWluZyB0aGUgZGVzaXJlZCB0eXBlIG9m IGluZm9ybWF0aW9uOgotCi0gIDAgKGRlZmF1bHQpID0gbmFtZSBvZiBvYmplY3QgYXQgbGV2ZWwg bjEuCi0gIDEgKG5vbnplcm8pID0gb2JqZWN0IHR5cGUgKDAgPSBwcm9tcHQ7IDEgPSBjb21tYW5k IGZpbGU7IDIgPSBtYWNybykuCi0KLSAgICAgICAgICBUaGUgZGVmYXVsdCBmb3IgbjIgaXMgMC4K LQotICAgVGhlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHByb21wdCBpcyAiKHByb21wdCkiLiBIZXJl J3MgYSBsb29wIHRoYXQgY2FuCi0gICBiZSBpbmNsdWRlZCBpbiBhIG1hY3JvIG9yIGNvbW1hbmQg ZmlsZSB0byBzaG93IHRoZSBzdGFjayAoc2ltaWxhciB0bwotICAgd2hhdCB0aGUgU0hPVyBTVEFD SyBjb21tYW5kIGRvZXMpOgotCi0gIGZvciBcJWkgXHYoY21kbGV2ZWwpIDAgLTEgewotICAgICAg ZWNobyBcJWkuIFtcZmNtZHN0YWNrKFwlaSwxKV0gXGZjbWRzdGFjayhcJWksMCkKLSAgfQotCi0g ICBJbiB0aGlzIGNvbm5lY3Rpb24sIG5vdGUgdGhhdCBcdihjbWRmaWxlKSBhbHdheXMgaW5kaWNh dGVzIHRoZSBtb3N0Ci0gICByZWNlbnRseSBpbnZva2VkIGFjdGl2ZSBjb21tYW5kIGZpbGUgKGlm IGFueSksIGV2ZW4gaWYgdGhhdCBmaWxlIGlzCi0gICBleGVjdXRpbmcgYSBtYWNyby4gU2ltaWxh cmx5LCBcdihtYWNybykgaW5kaWNhdGVzIHRoZSBtb3N0IHJlY2VudGx5Ci0gICBpbnZva2VkIG1h Y3JvIChpZiBhbnkpLCBldmVuIGlmIHRoZSBjdXJyZW50IGNvbW1hbmQgc291cmNlIGlzIG5vdCBh Ci0gICBtYWNyby4gVGhlIG5hbWUgb2YgdGhlICJjYWxsZXIiIG9mIHRoZSBjdXJyZW50bHkgZXhl Y3V0aW5nIG9iamVjdAotICAgKGNvbW1hbmQgZmlsZSBvciBtYWNybykgaXM6Ci0KLSAgXGZjbWRz dGFjayhcdihjbWRsZXZlbCktMSkKLQotICAgYW5kIGl0cyB0eXBlIGlzOgotCi0gIFxmY21kc3Rh Y2soXHYoY21kbGV2ZWwpLTEsMSkKLQotICAgVG8gZmluZCB0aGUgbmFtZSBvZiB0aGUgbWFjcm8g dGhhdCBpbnZva2VkIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nCi0gICBvYmplY3QsIGV2ZW4gaWYg b25lIG9yIG1vcmUgaW50ZXJtZWRpYXRlIGNvbW1hbmQgZmlsZXMgKG9yIHByb21wdGluZwotICAg bGV2ZWxzKSBhcmUgaW52b2x2ZWQsIHVzZSBhIGxvb3AgbGlrZSB0aGlzOgotCi0gIGZvciBcJWkg XHYoY21kbGV2ZWwpLTEgMCAtMSB7Ci0gICAgICBpZiA9IFxmY21kc3RhY2soXCVpLDEpIDIgZWNo byBDQUxMRVIgPSBcZmNtZHN0YWNrKFwlaSwwKQotICB9Ci0KLSAgIE9mIGNvdXJzZSBpZiB5b3Ug bWFrZSBhIG1hY3JvIHRvIGRvIHRoaXMsIHRoZSBtYWNybyBtdXN0IGFjY291bnQgZm9yCi0gICBp dHMgb3duIGFkZGl0aW9uYWwgbGV2ZWw6Ci0KLSAgZGVmaW5lIENBTExFUiB7Ci0gICAgICBmb3Ig XCVpIFx2KGNtZGxldmVsKS0yIDAgLTEgewotICAgICAgICAgIGlmID0gXGZjbWRzdGFjayhcJWks MSkgMiByZXR1cm4gXGZjbWRzdGFjayhcJWksMCkKLSAgICAgIH0KLSAgICAgIHJldHVybiAiKG5v bmUpIgotICB9Ci0KLSAgIFRoZSBidWlsdC1pbiB2YXJpYWJsZSBcdihjbWRzb3VyY2UpIGdpdmVz IHRoZSBjdXJyZW50IGNvbW1hbmQgc291cmNlIGFzCi0gICBhIHdvcmQgKCJwcm9tcHQiLCAiZmls ZSIsIG9yICJtYWNybyIpLgotCi04LjcuNC4gVGhlIFZPSUQgQ29tbWFuZAotCi0gICBWT0lEIGlz IGxpa2UgRUNITyBpbiB0aGF0IGFsbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiBpdHMgYXJn dW1lbnQKLSAgIHRleHQgYXJlIGV2YWx1YXRlZC4gYnV0IGl0IGRvZXNuJ3QgcHJpbnQgYW55dGhp bmcgKGV4Y2VwdCBwb3NzaWJseSBhbgotICAgZXJyb3IgbWVzc2FnZSBpZiBhIGZ1bmN0aW9uIHdh cyBpbnZvY2F0aW9uIGNvbnRhaW5lZCBvciByZXN1bHRlZCBpbiBhbnkKLSAgIGVycm9ycykuIFZP SUQgc2V0cyBGQUlMVVJFIGlmIGl0IGVuY291bnRlcnMgYW55IGVycm9ycywgU1VDQ0VTUwotICAg b3RoZXJ3aXNlLgotCi0gICBbIFs0NTNdVG9wIF0gWyBbNDU0XUNvbnRlbnRzIF0gWyBbNDU1XUMt S2VybWl0IEhvbWUgXSBbIFs0NTZdS2VybWl0Ci0gICBIb21lIF0KLQotOC44LiBUaGUgUkVUVVJO IGFuZCBFTkQgQ29tbWFuZHMKLQotICAgVGhlIGV4ZWN1dGlvbiBvZiBhIG1hY3JvIGlzIHRlcm1p bmF0ZWQgaW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgd2F5czoKLQotICAgICAqIFdpdGggYW4gRU5E IFsgbnVtYmVyIFsgbWVzc2FnZSBdIF0gY29tbWFuZC4gSWYgYSBudW1iZXIgaXMgZ2l2ZW4sCi0g ICAgICAgdGhlIG1hY3JvIHN1Y2NlZWRzIGlmIHRoZSBudW1iZXIgaXMgMCwgYW5kIGZhaWxzIGlm IGl0IGlzIG5vdCB6ZXJvOwotICAgICAgIGlmIGEgbnVtYmVyIGlzIG5vdCBnaXZlbiwgdGhlIG1h Y3JvIHN1Y2NlZWRzLgotICAgICAqIFdpdGggYSBTVE9QIGNvbW1hbmQsIHdoaWNoIHdvcmtzIGp1 c3QgbGlrZSBFTkQgZXhjZXB0IGl0IHBlZWxzIGJhY2sKLSAgICAgICB0aGUgY29tbWFuZCBzdGFj ayBhbGwgdGhlIHdheSB0byB0b3AgbGV2ZWwuCi0gICAgICogV2l0aCBhIFJFVFVSTiBbIHRleHQg XSBjb21tYW5kLCBpbiB3aGljaCBjYXNlIHRoZSBtYWNybyBhbHdheXMKLSAgICAgICBzdWNjZWVk cy4KLSAgICAgKiBCeSBydW5uaW5nIG91dCBvZiBjb21tYW5kcyB0byBleGVjdXRlLCBpbiB3aGlj aCBjYXNlIHRoZSBtYWNybwotICAgICAgIHN1Y2NlZWRzIG9yIGZhaWxzIGFjY29yZGluZyB0aGUg bW9zdCByZWNlbnRseSBleGVjdXRlZCBjb21tYW5kIHRoYXQKLSAgICAgICBzZXRzIHN1Y2Nlc3Mg b3IgZmFpbHVyZS4KLQotICAgVGhlIHNhbWUgY29uc2lkZXJhdGlvbnMgYXBwbHkgdG8gY29tbWFu ZCBmaWxlcyBpbnZva2VkIGJ5IHRoZSBUQUtFCi0gICBjb21tYW5kLgotCi0gICBJZiBhIG1hY3Jv IGRvZXMgbm90IGV4ZWN1dGUgYW55IGNvbW1hbmRzIHRoYXQgc2V0IHN1Y2Nlc3Mgb3IgZmFpbHVy ZSwKLSAgIHRoZW4gaW52b2tpbmcgdGhlIG1hY3JvIGRvZXMgbm90IGNoYW5nZSB0aGUgY3VycmVu dCBTVUNDRVNTL0ZBSUxVUkUKLSAgIHN0YXR1cy4gSXQgZm9sbG93cywgdGhlbiwgdGhhdCB0aGUg bWVyZSBpbnZvY2F0aW9uIG9mIGEgbWFjcm8gZG9lcyBub3QKLSAgIGNoYW5nZSB0aGUgU1VDQ0VT Uy9GQUlMVVJFIHN0YXR1cyBlaXRoZXIuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8KLSAgIHdy aXRlIG1hY3JvcyB0byByZWFjdCB0byB0aGUgc3RhdHVzIG9mIG90aGVyIGNvbW1hbmRzIChvciBt YWNyb3MpLCBmb3IKLSAgIGV4YW1wbGU6Ci0KLSAgZGVmaW5lIENIS0xJTkUgewotICAgICAgaWYg c3VjY2VzcyBlbmQgMAotICAgICAgc3RvcCAxIFNFVCBMSU5FIGZhaWxlZCAtIHBsZWFzZSB0cnkg YW5vdGhlciBkZXZpY2UuCi0gIH0KLSAgc2V0IG1vZGVtIHR5cGUgdXNyb2JvdGljcwotICBzZXQg bGluZSAvZGV2L2N1YTAKLSAgY2hrbGluZQotICBzZXQgc3BlZWQgNTc2MDAKLSAgZGlhbCA3NjU0 MzIxCi0KLSAgIEJ5IHRoZSB3YXksIG5vbmUgb2YgdGhpcyBpcyBuZXdzLiBCdXQgaXQgd2FzIG5v dCBleHBsaWNpdGx5IGRvY3VtZW50ZWQKLSAgIGJlZm9yZSwgYW5kIEMtS2VybWl0IDcuMCBhbmQg ZWFybGllciBkaWQgbm90IGFsd2F5cyBoYW5kbGUgdGhlIFJFVFVSTgotICAgc3RhdGVtZW50IGFz IGl0IHNob3VsZCBoYXZlLgotCi0gICBbIFs0NTddVG9wIF0gWyBbNDU4XUNvbnRlbnRzIF0gWyBb NDU5XUMtS2VybWl0IEhvbWUgXSBbIFs0NjBdS2VybWl0Ci0gICBIb21lIF0KLQotOC45LiBVTkRF RklOaW5nIEdyb3VwcyBvZiBWYXJpYWJsZXMKLQotICAgVGhlIFVOREVGSU5FIGNvbW1hbmQsIHdo aWNoIHByZXZpb3VzbHkgYWNjZXB0ZWQgb25lIHZhcmlhYmxlIG5hbWUsIG5vdwotICAgYWNjZXB0 cyBhIGxpc3Qgb2YgdGhlbSwgYW5kIGFsc28gYWNjZXB0cyB3aWxkY2FyZCBub3RhdGlvbiB0byBh bGxvdwotICAgZGVsZXRpb24gb2YgdmFyaWFibGVzIHRoYXQgbWF0Y2ggYSBnaXZlbiBwYXR0ZXJu LgotCi0gICBVTkRFRklORSBbIHN3aXRjaGVzIF0gbmFtZSBbIG5hbWUgWyBuYW1lIFsgLi4uIF0g XSBdCi0gICAgICAgICAgVW5kZWZpbmVzIHRoZSB2YXJpYWJsZXMgd2hvc2UgbmFtZXMgYXJlIGdp dmVuLiBVcCB0byA2NCBuYW1lcwotICAgICAgICAgIG1heSBiZSBnaXZlbiBpbiBvbmUgVU5ERUZJ TkUgY29tbWFuZC4KLQotICAgSWYgeW91IG9taXQgdGhlIHN3aXRjaGVzIGFuZCBpbmNsdWRlIG9u bHkgb25lIG5hbWUsIHRoZSBVTkRFRklORQotICAgY29tbWFuZCB3b3JrcyBhcyBiZWZvcmUuCi0K LSAgIFN3aXRjaGVzIGluY2x1ZGU6Ci0KLSAgIC9NQVRDSElORwotICAgICAgICAgIFNwZWNpZmll cyB0aGF0IHRoZSBuYW1lcyBnaXZlbiBhcmUgdG8gdHJlYXRlZCBhcyBwYXR0ZXJucyByYXRoZXIK LSAgICAgICAgICB0aGFuIGxpdGVyYWwgdmFyaWFibGUgbmFtZXMuIE5vdGU6IHBhdHRlcm4gbWF0 Y2hpbmcgY2FuJ3QgYmUKLSAgICAgICAgICB1c2VkIHdpdGggYXJyYXkgcmVmZXJlbmNlczsgdXNl IHRoZSBBUlJBWSBjb21tYW5kIHRvIG1hbmlwdWxhdGUKLSAgICAgICAgICBhcnJheXMgYW5kIHN1 YmFycmF5cy4KLQotICAgL0xJU1QKLSAgICAgICAgICBMaXN0IHRoZSBuYW1lIG9mIGVhY2ggdmFy aWFibGUgdG8gYmUgdW5kZWZpbmVkLCBhbmQgd2hldGhlciBpdAotICAgICAgICAgIHdhcyB1bmRl ZmluZWQgc3VjY2Vzc2Z1bGx5ICgib2siIG9yICJlcnJvciIpLCBwbHVzIGEgc3VtbWFyeQotICAg ICAgICAgIGNvdW50IGF0IHRoZSBlbmQuCi0KLSAgIC9TSU1VTEFURQotICAgICAgICAgIExpc3Qg dGhlIG5hbWVzIG9mIHRoZSB2YXJpYWJsZXMgdGhhdCB3b3VsZCBiZSBkZWxldGVkIHdpdGhvdXQK LSAgICAgICAgICBhY3R1YWxseSBkZWxldGluZyB0aGVtLiBJbXBsaWVzIC9MSVNULgotCi0gICBU aGUgVU5ERUZJTkUgY29tbWFuZCBmYWlscyBpZiB0aGVyZSB3ZXJlIGFueSBlcnJvcnMgYW5kIHN1 Y2NlZWRzCi0gICBvdGhlcndpc2UuCi0KLSAgIFRoZSBuZXcgX1VOREVGSU5FIGNvbW1hbmQgaXMg bGlrZSBVTkRFRklORSwgZXhjZXB0IHRoZSBuYW1lcyBhcmUKLSAgIGFzc3VtZWQgdG8gYmUgdmFy aWFibGUgbmFtZXMgdGhlbXNlbHZlcywgd2hpY2ggY29udGFpbiB0aGUgbmFtZXMgKG9yCi0gICBw YXJ0cyBvZiB0aGVtKSBvZiB0aGUgdmFyaWFibGVzIHRvIGJlIHVuZGVmaW5lZC4gRm9yIGV4YW1w bGUsIGlmIHlvdQotICAgaGF2ZSB0aGUgZm9sbG93aW5nIGRlZmluaXRpb25zOgotCi0gIGRlZmlu ZSBcJWEgZm9vCi0gIGRlZmluZSBmb28gVGhpcyBpcyBzb21lIHRleHQKLQotICAgdGhlbjoKLQot ICB1bmRlZiBcJWEKLQotICAgdW5kZWZpbmVzIHRoZSB2YXJpYWJsZSBcJWEsIGJ1dDoKLQotICBf dW5kZWYgXCVhCi0KLSAgIHVuZGVmaW5lcyB0aGUgbWFjcm8gZm9vLgotCi0gICBOb3JtYWwgS2Vy bWl0IHBhdHRlcm5zIGFyZSB1c2VkIGZvciBtYXRjaGluZzsgbWV0YWNoYXJhY3RlcnMgaW5jbHVk ZQotICAgYXN0ZXJpc2ssIHF1ZXN0aW9uIG1hcmssIGJyYWNlcywgYW5kIHNxdWFyZSBicmFja2V0 cy4gVGh1cywgd2hlbiB1c2luZwotICAgdGhlIC9NQVRDSElORyBzd2l0Y2gsIGlmIHRoZSBuYW1l cyBvZiB0aGUgbWFjcm9zIHlvdSB3YW50IHRvIHVuZGVmaW5lCi0gICBjb250YWluIGFueSBvZiB0 aGVzZSBjaGFyYWN0ZXJzLCB5b3UgbXVzdCBxdW90ZSB0aGVtIHdpdGggYmFja3NsYXNoIHRvCi0g ICBmb3JjZSB0aGVtIHRvIGJlIHRha2VuIGxpdGVyYWxseS4gQWxzbyBub3RlIHRoYXQgXCUqIGlz IG5vdCB0aGUgbmFtZSBvZgotICAgYSB2YXJpYWJsZTsgaXQgaXMgYSBzcGVjaWFsIG5vdGF0aW9u IHVzZWQgd2l0aGluIGEgbWFjcm8gZm9yICJhbGwgbXkKLSAgIGFyZ3VtZW50cyIuIFRoZSBjb21t YW5kICJ1bmRlZiAvbWF0Y2ggXCUqIiBkZWxldGVzIGFsbCBcJXggdmFyaWFibGVzLAotICAgd2hl cmUgeCBpcyAwLi45IGFuZCBhLi56LiBVc2UgInVuZGVmIC9tYXRjaCBcJVswLTldIiB0byBkZWxl dGUgbWFjcm8KLSAgIGFyZ3VtZW50IHZhcmlhYmxlcyBvciAidW5kZWYgL21hdGNoIFwlW2ktbl0i IHRvIGRlbGV0ZSBhIHJhbmdlIG9mIFwleAotICAgdmFyaWFibGVzLgotCi0gICBbIFs0NjFdVG9w IF0gWyBbNDYyXUNvbnRlbnRzIF0gWyBbNDYzXUMtS2VybWl0IEhvbWUgXSBbIFs0NjRdS2VybWl0 Ci0gICBIb21lIF0KLQotOC4xMC4gVGhlIElOUFVUIGFuZCBNSU5QVVQgQ29tbWFuZHMKLQotICAg QXMgb2YgQy1LZXJtaXQgOC4wLjIxMSwgdGhlIElOUFVUIGFuZCBNSU5QVVQgY29tbWFuZHMgYWNj ZXB0IGEgc3dpdGNoOgotCi0gICBbTV1JTlBVVCAvTk9NQVRDSCB0aW1lb3V0Ci0gICAgICAgICAg VGhlIC9OT01BVENIIHN3aXRjaCBhbGxvd3MgSU5QVVQgb3IgTUlOUFVUIHRvIHJlYWQgaW5jb21p bmcKLSAgICAgICAgICBtYXRlcmlhbCBmb3IgdGhlIHNwZWNpZmllZCBhbW91bnQgb2YgdGltZSwg d2l0aG91dCBhdHRlbXB0aW5nIHRvCi0gICAgICAgICAgbWF0Y2ggaXQgd2l0aCBhbnkgdGV4dCBv ciBwYXR0ZXJucy4gV2hlbiB0aGlzIHN3aXRjaCBpcwotICAgICAgICAgIGluY2x1ZGVkLCB0aGUg W01dSU5QVVQgY29tbWFuZCBzdWNjZWVkcyB3aGVuIHRoZSB0aW1lb3V0Ci0gICAgICAgICAgaW50 ZXJ2YWwgZXhwaXJlcywgd2l0aCBcdihpbnN0YXR1cykgc2V0IHRvIDEsIG1lYW5pbmcgInRpbWVk Ci0gICAgICAgICAgb3V0Iiwgb3IgZmFpbHMgdXBvbiBpbnRlcnJ1cHRpb24gb3IgaS9vIGVycm9y LgotCi0gICBBbHNvIGluIHZlcnNpb24gOC4wLjIxMSwgdGhlcmUgaXMgYSBuZXcgd2F5IHRvIGFw cGx5IGEgc2NhbGUgZmFjdG9yIHRvCi0gICBbTV1JTlBVVCB0aW1lb3V0czoKLQotICAgU0VUIElO UFVUIFNDQUxFLUZBQ1RPUiBmbG9hdGluZy1wb2ludC1udW1iZXIKLSAgICAgICAgICBUaGlzIHNj YWxlcyBhbGwgW01dSU5QVVQgdGltZW91dHMgYnkgdGhlIGdpdmVuIGZhY3RvciwgYWxsb3dpbmcK LSAgICAgICAgICB0aW1lLXNlbnNpdGl2ZSBzY3JpcHRzIHRvIGJlIGFkanVzdGVkIHRvIGNoYW5n aW5nIGNvbmRpdGlvbnMKLSAgICAgICAgICBzdWNoIGFzIGNvbmdlc3RlZCBuZXR3b3JrcyBvciBk aWZmZXJlbnQtc3BlZWQgbW9kZW1zIHdpdGhvdXQKLSAgICAgICAgICBoYXZpbmcgdG8gY2hhbmdl IGVhY2ggSU5QVVQtY2xhc3MgY29tbWFuZC4gVGhpcyBhZmZlY3RzIG9ubHkKLSAgICAgICAgICB0 aG9zZSB0aW1lb3V0cyB0aGF0IGFyZSBnaXZlbiBpbiBzZWNvbmRzLCBub3QgYXMgd2FsbC1jbG9j awotICAgICAgICAgIHRpbWVzLiBBbHRob3VnaCB0aGUgc2NhbGUgZmFjdG9yIGNhbiBoYXZlIGEg ZnJhY3Rpb25hbCBwYXJ0LCB0aGUKLSAgICAgICAgICBJTlBVVCB0aW1lb3V0IGlzIHN0aWxsIGFu IGludGVnZXIuIFRoZSBuZXcgYnVpbHQtaW4gdmFyaWFibGUKLSAgICAgICAgICBcdihpbnNjYWxl KSB0ZWxscyB0aGUgY3VycmVudCBJTlBVVCBTQ0FMRS1GQUNUT1IuCi0KLSAgIFRoZSBNSU5QVVQg Y29tbWFuZCBjYW4gYmUgdXNlZCB0byBzZWFyY2ggdGhlIGluY29taW5nIGRhdGEgc3RyZWFtIGZv cgotICAgc2V2ZXJhbCB0YXJnZXRzIHNpbXVsdGFuZW91c2x5LiBGb3IgZXhhbXBsZToKLQotICBN SU5QVVQgOCBvbmUgdHdvIHRocmVlCi0KLSAgIHdhaXRzIHVwIHRvIDggc2Vjb25kcyBmb3Igb25l IG9mIHRoZSB3b3JkcyAib25lIiwgInR3byIsIG9yICJ0aHJlZSIgdG8KLSAgIGFycml2ZS4gV29y ZHMgY2FuIGJlIGdyb3VwZWQgdG8gaW5kaWNhdGUgdGFyZ2V0cyB0aGF0IGNvbnRhaW4gc3BhY2Vz OgotCi0gIE1JTlBVVCA4IG5pbmV0ZWVuIHR3ZW50eSAidHdlbnR5IG9uZSIKLQotICAgQW5kIG9m IGNvdXJzZSB5b3UgY2FuIGFsc28gdXNlIHZhcmlhYmxlcyBpbiBwbGFjZSBvZiAob3IgYXMgcGFy dCBvZikKLSAgIHRoZSB0YXJnZXQgbmFtZXM6Ci0KLSAgTUlOUFVUIDggXCVhIFwmeFszXSBcbShm b28pCi0KLSAgIFVudGlsIG5vdyB5b3UgaGFkIHRvIGtub3cgdGhlIG51bWJlciBvZiB0YXJnZXRz IGluIGFkdmFuY2Ugd2hlbiB3cml0aW5nCi0gICB0aGUgTUlOUFVUIHN0YXRlbWVudC4gRWFjaCBv ZiB0aGUgZXhhbXBsZXMgYWJvdmUgaGFzIGV4YWN0bHkgdGhyZWUKLSAgIHRhcmdldHMuCi0KLSAg IEJ1dCBzdXBwb3NlIHlvdXIgc2NyaXB0IG5lZWRzIHRvIGxvb2sgZm9yIGEgdmFyaWFibGUgbnVt YmVyIG9mIHRhcmdldHMuCi0gICBGb3IgdGhpcyB5b3UgY2FuIHVzZSBhcnJheXMgYW5kIFxmam9p bigpLCBkZXNjcmliZWQgaW4gWzQ2NV1TZWN0aW9uCi0gICA4LjcuIEFueSBudW1iZXIgb2YgXGZq b2luKCkgaW52b2NhdGlvbnMgY2FuIGJlIGluY2x1ZGVkIGluIHRoZSBNSU5QVVQKLSAgIHRhcmdl dCBsaXN0LCBhbmQgZWFjaCBvbmUgaXMgZXhwYW5kZWQgaW50byB0aGUgYXBwcm9wcmlhdGUgbnVt YmVyIG9mCi0gICBzZXBhcmF0ZSB0YXJnZXRzIGVhY2ggdGltZSB0aGUgTUlOUFVUIGNvbW1hbmQg aXMgZXhlY3V0ZWQuIEV4YW1wbGU6Ci0KLSAgZGVjbGFyZSBcJmFbMTBdID0gb25lIHR3byB0aHJl ZQotICBtaW5wdXQgMTAgZm9vIFxmam9pbigmYSkgYmFyCi0KLSAgIFRoaXMgZGVjbGFyZXMgYW4g YXJyYXkgb2YgdGVuIGVsZW1lbnRzLCBhbmQgYXNzaWducyB2YWx1ZXMgdG8gdGhlIGZpcnN0Ci0g ICB0aHJlZSBvZiB0aGVtLiBUaGUgTUlOUFVUIGNvbW1hbmQgbG9va3MgZm9yIHRoZXNlIHRocmVl IChhcyB3ZWxsIGFzIHRoZQotICAgd29yZHMgImZvbyIgYW5kICJiYXIiKS4gTGF0ZXIsIGlmIHlv dSBhc3NpZ24gYWRkaXRpb25hbCBlbGVtZW50cyB0byB0aGUKLSAgIGFycmF5LCB0aGUgc2FtZSBN SU5QVVQgY29tbWFuZCBhbHNvIGxvb2tzIGZvciB0aGUgbmV3IGVsZW1lbnRzLgotCi0gICBJZiBh biBhcnJheSBlbGVtZW50IGNvbnRhaW5zIHNwYWNlcywgZWFjaCB3b3JkIGJlY29tZXMgYSBzZXBh cmF0ZQotICAgdGFyZ2V0LiBUbyBjcmVhdGUgb25lIHRhcmdldCBwZXIgYXJyYXkgZWxlbWVudCwg dXNlIFxmam9pbigpJ3MgZ3JvdXBpbmcKLSAgIGZlYXR1cmU6Ci0KLSAgZGNsIFwmYVtdID0ge2Fh YSBiYmJ9IHtjY2MgZGRkfSB7eHh4IHl5eSB6enp9Ci0KLSAgbWlucHV0IDEwIFxmam9pbigmYSkg ICAgIDwtLSA3IHRhcmdldHMKLSAgbWlucHV0IDEwIFxmam9pbigmYSwsMikgIDwtLSAzIHRhcmdl dHMKLQotICAgWyBbNDY2XVRvcCBdIFsgWzQ2N11Db250ZW50cyBdIFsgWzQ2OF1DLUtlcm1pdCBI b21lIF0gWyBbNDY5XUtlcm1pdAotICAgSG9tZSBdCi0KLTguMTEuIExlYXJuZWQgU2NyaXB0cwot Ci0gICBDLUtlcm1pdCBub3cgaW5jbHVkZXMgYSBzaW1wbGUgc2NyaXB0IHJlY29yZGVyIHRoYXQg bW9uaXRvcnMgeW91cgotICAgY29tbWFuZHMsIHBsdXMgeW91ciBhY3Rpb25zIGR1cmluZyBDT05O RUNUIG1vZGUsIGFuZCBhdXRvbWF0aWNhbGx5Ci0gICBnZW5lcmF0ZXMgYSBzY3JpcHQgcHJvZ3Jh bSB0aGF0IG1pbWljcyB3aGF0IGl0IG9ic2VydmVkLiBZb3Ugc2hvdWxkCi0gICB0aGluayBvZiB0 aGlzIGZlYXR1cmUgYXMgYSBzY3JpcHQtd3JpdGluZyBBU1NJU1RBTlQgc2luY2UsIGFzIHlvdSB3 aWxsCi0gICBzZWUgWzQ3MF1sYXRlciBpbiB0aGlzIHNlY3Rpb24sIHRoZSByZXN1bHQgZ2VuZXJh bGx5IG5lZWRzIHNvbWUgZWRpdGluZwotICAgdG8gbWFrZSBpdCBib3RoIHNlY3VyZSBhbmQgZmxl eGlibGUuIFRoZSBzY3JpcHQgcmVjb3JkZXIgaXMgY29udHJvbGxlZAotICAgYnkgdGhlIG5ldyBM RUFSTiBjb21tYW5kOgotCi0gICBMRUFSTiBbIC9PTiAvT0ZGIC9DTE9TRSBdIFsgZmlsZW5hbWUg XQotICAgICAgICAgIElmIHlvdSBnaXZlIGEgZmlsZW5hbWUsIHRoZSBmaWxlIGlzIG9wZW5lZCBm b3Igc3Vic2VxdWVudAotICAgICAgICAgIHJlY29yZGluZy4gVGhlIC9PTiBzd2l0Y2ggZW5hYmxl cyByZWNvcmRpbmcgdG8gdGhlIGN1cnJlbnQgZmlsZQotICAgICAgICAgIChpZiBhbnkpOyAvT0ZG IGRpc2FibGVzIHJlY29yZGluZy4gL0NMT1NFIGNsb3NlcyB0aGUgY3VycmVudAotICAgICAgICAg IHNjcmlwdCByZWNvcmRpbmcgZmlsZSAoaWYgYW55KS4gSWYgeW91IGdpdmUgYSBmaWxlbmFtZSB3 aXRob3V0Ci0gICAgICAgICAgYW55IHN3aXRjaGVzLCAvT04gaXMgYXNzdW1lZC4KLQotICAgVGhl IC9PRkYgYW5kIC9PTiBzd2l0Y2hlcyBsZXQgeW91IHR1cm4gcmVjb3JkaW5nIG9mZiBhbmQgb24g ZHVyaW5nIGEKLSAgIHNlc3Npb24gd2l0aG91dCBjbG9zaW5nIHRoZSBmaWxlLgotCi0gICBXaGVu IHJlY29yZGluZzoKLQotICAgICAqIEFsbCBjb21tYW5kcyB0aGF0IHlvdSB0eXBlIChvciByZWNh bGwpIGF0IHRoZSBwcm9tcHQgYXJlIHJlY29yZGVkCi0gICAgICAgaW4gdGhlIGZpbGUgZXhjZXB0 OgotICAgICAgICAgICsgTEVBUk4gY29tbWFuZHMgYXJlIG5vdCByZWNvcmRlZC4KLSAgICAgICAg ICArIFRoZSBDT05ORUNUIGNvbW1hbmQgaXMgbm90IHJlY29yZGVkLgotICAgICAgICAgICsgVGhl IFRFTE5FVCBjb21tYW5kIGlzIGNvbnZlcnRlZCB0byBTRVQgSE9TVCAvTkVUV09SSzpUQ1AuCi0g ICAgICogQ29tbWFuZHMgb2J0YWluZWQgZnJvbSBtYWNyb3Mgb3IgY29tbWFuZCBmaWxlcyBhcmUg bm90IHJlY29yZGVkLgotICAgICAqIER1cmluZyBDT05ORUNUOgotICAgICAgICAgICsgRXZlcnkg bGluZSB5b3UgdHlwZSBpcyBjb252ZXJ0ZWQgdG8gYW4gT1VUUFVUIGNvbW1hbmQuCi0gICAgICAg ICAgKyBUaGUgbGFzdCBwcm9tcHQgYmVmb3JlIGFueSBsaW5lIHlvdSB0eXBlIGJlY29tZXMgYW4g SU5QVVQKLSAgICAgICAgICAgIGNvbW1hbmQuCi0gICAgICAgICAgKyBUaW1lb3V0cyBhcmUgY2Fs Y3VsYXRlZCBhdXRvbWF0aWNhbGx5IGZvciBlYWNoIElOUFVUIGNvbW1hbmQuCi0gICAgICAgICAg KyBBIFBBVVNFIGNvbW1hbmQgaXMgaW5zZXJ0ZWQgYmVmb3JlIGVhY2ggT1VUUFVUIGNvbW1hbmQg anVzdCB0bwotICAgICAgICAgICAgYmUgc2FmZS4KLQotICAgVGh1cyB0aGUgc2NyaXB0IHJlY29y ZGVyIGlzIGluaGVyZW50bHkgbGluZS1vcmllbnRlZC4gSXQgY2FuJ3QgYmUgdXNlZAotICAgdG8g c2NyaXB0IGNoYXJhY3Rlci1vcmllbnRlZCBpbnRlcmFjdGlvbnMgbGlrZSB0eXBpbmcgU3BhY2Ug dG8gYQotICAgIk1vcmU/IiBwcm9tcHQgb3IgZWRpdGluZyBhIHRleHQgZmlsZSB3aXRoIFZJIG9y IEVNQUNTLgotCi0gICBCdXQgaXQgaGFzIGFkdmFudGFnZXMgdG9vOyBmb3IgZXhhbXBsZSBpdCB0 YWtlcyBjb250cm9sIGNoYXJhY3RlcnMgaW50bwotICAgYWNjb3VudCB0aGF0IG1pZ2h0IG5vdCBi ZSB2aXNpYmxlIHRvIHlvdSBvdGhlcndpc2UsIGFuZCBpdAotICAgYXV0b21hdGljYWxseSBjb252 ZXJ0cyBjb250cm9sIGNoYXJhY3RlcnMgaW4gYm90aCB0aGUgaW5wdXQgYW5kIG91dHB1dAotICAg c3RyZWFtcyB0byB0aGUgYXBwcm9wcmlhdGUgbm90YXRpb24uIEl0IGNhbiB0ZWxsLCBmb3IgZXhh bXBsZSB0aGF0IHRoZQotICAgIiQgIiBwcm9tcHQgb24gdGhlIGxlZnQgbWFyZ2luIGluIFVOSVgg aXMgcmVhbGx5IHtcezEzfVx7MTB9JCB9LAotICAgd2hlcmVhcyBpbiBWTVMgaXQgbWlnaHQgYmUg e1x7MTN9XHsxMH1cezEzfSQgfS4gVGhlc2Ugc2VxdWVuY2VzIGFyZQotICAgZGV0ZWN0ZWQgYW5k IHJlY29yZGVkIGF1dG9tYXRpY2FsbHkuCi0KLSAgIEEgbGVhcm5lZCBzY3JpcHQgc2hvdWxkIGV4 ZWN1dGUgY29ycmVjdGx5IHdoZW4geW91IGdpdmUgYSBUQUtFIGNvbW1hbmQKLSAgIGZvciBpdC4g SG93ZXZlciwgaXQgaXMgdXN1YWxseSBhcHByb3ByaWF0ZSB0byBlZGl0IHRoZSBzY3JpcHQgYSBi aXQuCi0gICBUaGUgbW9zdCBpbXBvcnRhbnQgY2hhbmdlIHdvdWxkIGJlIHRvIHJlbW92ZSBhbnkg cGFzc3dvcmRzIGZyb20gaXQuIEZvcgotICAgZXhhbXBsZSwgaWYgdGhlIHNjcmlwdCBjb250YWlu czoKLQotICBJTlBVVCA5IHtcezEzfVx7MTB9UGFzc3dvcmQ6IH0KLSAgSUYgRkFJTCBTVE9QIDEg SU5QVVQgdGltZW91dAotICBQQVVTRSAxCi0gIE9VVFBVVCBiaWdzZWNyZXRcezEzfQotCi0gICB5 b3Ugc2hvdWxkIHJlcGxhY2UgdGhpcyBieSBzb21ldGhpbmcgbGlrZToKLQotICBJTlBVVCA5IHtc ezEzfVx7MTB9UGFzc3dvcmQ6IH0KLSAgSUYgRkFJTCBTVE9QIDEgSU5QVVQgdGltZW91dAotICBB U0tRIHBzd2QgUGxlYXNlIHR5cGUgeW91ciBwYXNzd29yZDoKLSAgUEFVU0UgMQotICBPVVRQVVQg XG0ocHN3ZClcezEzfQotCi0gICBUaGUgTEVBUk4gY29tbWFuZCBjYW4ndCBkbyB0aGlzIGZvciB5 b3Ugc2luY2UgaXQga25vd3Mgbm90aGluZyBhYm91dAotICAgImNvbnRlbnQiOyBpdCBvbmx5IGtu b3dzIGFib3V0IGxpbmVzIGFuZCBjYW4ndCBiZSBleHBlY3RlZCB0byBwYXJzZSBvcgotICAgdW5k ZXJzdGFuZCB0aGVtIC0tIGFmdGVyIGFsbCwgdGhlIFBhc3N3b3JkIHByb21wdCBtaWdodCBiZSBp biBzb21lCi0gICBvdGhlciBsYW5ndWFnZS4gU28gcmVtZW1iZXI6IGlmIHlvdSB1c2UgdGhlIExF QVJOIGNvbW1hbmQgdG8gcmVjb3JkIGEKLSAgIGxvZ2luIHNjcmlwdCwgYmUgc3VyZSBlZGl0IHRo ZSByZXN1bHRpbmcgZmlsZSB0byByZW1vdmUgYW55IHBhc3N3b3Jkcy4KLSAgIEFsc28gYmUgc3Vy ZSB0byBkZWxldGUgYW55IGJhY2t1cCBjb3BpZXMgeW91ciBlZGl0b3Igb3IgT1MgbWlnaHQgaGF2 ZQotICAgbWFkZSBvZiB0aGUgZmlsZS4KLQotICAgT3RoZXIgbWFudWFsIGFkanVzdG1lbnRzIG1p Z2h0IGFsc28gYmUgYXBwcm9wcmlhdGU6Ci0KLSAgICAgKiBJZiB0aGUgdGFyZ2V0IG9mIGFuIElO UFVUIGNvbW1hbmQgY2FuIHZhcnksIHlvdSBjYW4gcmVwbGFjZSB0aGUKLSAgICAgICBJTlBVVCBj b21tYW5kIHdpdGggTUlOUFVUIGFuZCB0aGUgYXBwcm9wcmlhdGUgdGFyZ2V0IGxpc3QsIGFuZC9v cgotICAgICAgIHRoZSB0YXJnZXQgd2l0aCBhIFxmcGF0dGVybigpLiBGb3IgZXhhbXBsZSwgc3Vw cG9zZSB5b3UgYXJlIGRpYWxpbmcKLSAgICAgICBhIG51bWJlciB0aGF0IGNhbiBiZSBhbnN3ZXJl ZCBieSBhbnkgb25lIG9mIDEwMCB0ZXJtaW5hbCBzZXJ2ZXJzLAotICAgICAgIHdob3NlIHByb21w dHMgYXJlIHRzLTAwPiwgdHMtMDE+LCB0cy0wMj4sIC4uLiB0cy05OT4uIFRoZSBzY3JpcHQKLSAg ICAgICByZWNvcmRzIGEgcGFydGljdWxhciBvbmUgb2YgdGhlc2UsIGJ1dCB5b3Ugd2FudCBpdCB0 byB3b3JrIGZvciBhbGwKLSAgICAgICBvZiB0aGVtLCBzbyBjaGFuZ2UgKGUuZy4pOgotICBJTlBV VCAxMCB0cy0yMz4gIDsgb3Igd2hhdGV2ZXIKLQotICAgICAgIHRvOgotICBJTlBVVCAxMCBcZnBh dHRlcm4odHMtWzAtOV1bMC05XT4pCi0KLSAgICAgKiBUaGUgSU5QVVQgdGltZW91dCB2YWx1ZXMg YXJlIGNvbnNlcnZhdGl2ZSwgYnV0IHRoZXkgYXJlIGJhc2VkIG9ubHkKLSAgICAgICBvbiBhIHNp bmdsZSBvYnNlcnZhdGlvbjsgeW91IG1pZ2h0IG5lZWQgdG8gdHVuZSB0aGVtLgotICAgICAqIFRo ZSBQQVVTRSBjb21tYW5kcyBtaWdodCBub3QgYmUgbmVjZXNzYXJ5LCBvciB0aGUgUEFVU0UgaW50 ZXJ2YWwKLSAgICAgICBtaWdodCBuZWVkIGFkanVzdG1lbnQuCi0gICAgICogSW4gY2FzZSB5b3Ug bWFkZSB0eXBvZ3JhcGhpY2FsIGVycm9ycyBkdXJpbmcgcmVjb3JkaW5nLCB0aGV5IGFyZQotICAg ICAgIGluY29ycG9yYXRlZCBpbiB5b3VyIHNjcmlwdDsgeW91IGNhbiBlZGl0IHRoZW0gb3V0IGlm IHlvdSB3YW50IHRvLgotCi0gICBIZXJlIGlzIGEgc2FtcGxlIHNjcmlwdCBnZW5lcmF0ZWQgYnkg S2VybWl0ICgibGVhcm4gdm1zLmtzYyIpIGluIHdoaWNoCi0gICBhIFRlbG5ldCBjb25uZWN0aW9u IGlzIG1hZGUgdG8gYSBWTVMgY29tcHV0ZXIsIHRoZSB1c2VyIGxvZ3MgaW4sIHN0YXJ0cwotICAg S2VybWl0IG9uIFZNUywgc2VuZHMgaXQgYSBmaWxlLCBhbmQgdGhlbiBsb2dzIG91dDoKLQotICA7 IFNjcmlwdGZpbGU6IHZtcy5rc2MKLSAgOyBEaXJlY3Rvcnk6ICAvdXNyL29sZ2EKLSAgOyBSZWNv cmRlZDogICAyMDAwMTEyNCAxNToyMToyMwotCi0gIFNFVCBIT1NUIC9ORVRXT1JLOlRDUCB2bXMu eHl6Y29ycC5jb20KLSAgSUYgRkFJTCBTVE9QIDEgQ29ubmVjdGlvbiBmYWlsZWQKLQotICBJTlBV VCA3IHtcezEzfVx7MTB9XHsxM31Vc2VybmFtZTogfQotICBJRiBGQUlMIFNUT1AgMSBJTlBVVCB0 aW1lb3V0Ci0gIFBBVVNFIDEKLSAgT1VUUFVUIG9sZ2FcezEzfQotICBJTlBVVCAzIHtcezEzfVx7 MTB9XHsxM31QYXNzd29yZDogfQotICBJRiBGQUlMIFNUT1AgMSBJTlBVVCB0aW1lb3V0Ci0gIFBB VVNFIDEKLSAgT1VUUFVUIHNlY3JldFx7MTN9Ci0gIElOUFVUIDE4IHtcezEzfVx7MTB9XHsxM30k IH0KLSAgSUYgRkFJTCBTVE9QIDEgSU5QVVQgdGltZW91dAotICBQQVVTRSAxCi0gIE9VVFBVVCBz ZXQgZGVmYXVsdCBbLmluY29taW5nXVx7MTN9Ci0gIElOUFVUIDEyIHtcezEzfVx7MTB9XHsxM30k IH0KLSAgSUYgRkFJTCBTVE9QIDEgSU5QVVQgdGltZW91dAotICBQQVVTRSAxCi0gIE9VVFBVVCBr ZXJtaXRcezEzfQotICBJTlBVVCAxNSB7XHsxM31cezEwfVx7MTN9QUxUTzpbT0xHQS5JTkNPTUlO R10gQy1LZXJtaXQ+fQotICBJRiBGQUlMIFNUT1AgMSBJTlBVVCB0aW1lb3V0Ci0gIFBBVVNFIDEK LSAgT1VUUFVUIHJlY2VpdmVcezEzfQotICBzZW5kIG15ZmlsZS50eHQKLQotICBJTlBVVCAxOCB7 XHsxM31cezEwfVx7MTN9QUxUTzpbT0xHQS5JTkNPTUlOR10gQy1LZXJtaXQ+fQotICBJRiBGQUlM IFNUT1AgMSBJTlBVVCB0aW1lb3V0Ci0gIFBBVVNFIDEKLSAgT1VUUFVUIGV4aXRcezEzfQotICBJ TlBVVCA2IHtcezEzfVx7MTB9XHsxM30kIH0KLSAgSUYgRkFJTCBTVE9QIDEgSU5QVVQgdGltZW91 dAotICBQQVVTRSAxCi0gIE9VVFBVVCBsb2dvdXRcezEzfQotICBjbG9zZQotICBleGl0Ci0KLSAg IFRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgYnkgS2VybWl0IGR1cmluZyBDT05ORUNUIChJTlBVVCwg SUYgRkFJTCwgUEFVU0UsCi0gICBhbmQgT1VUUFVUKSBoYXZlIHVwcGVyY2FzZSBrZXl3b3Jkczsg dGhlIGNvbW1hbmRzIHR5cGVkIGJ5IHRoZSB1c2VyIGFyZQotICAgaW4gd2hhdGV2ZXIgZm9ybSB0 aGUgdXNlciB0eXBlZCB0aGVtIChpbiB0aGlzIGNhc2UsIGxvd2VyY2FzZSkuCi0KLSAgIFsgWzQ3 MV1Ub3AgXSBbIFs0NzJdQ29udGVudHMgXSBbIFs0NzNdQy1LZXJtaXQgSG9tZSBdIFsgWzQ3NF1L ZXJtaXQKLSAgIEhvbWUgXQotCi04LjEyLiBQYXR0ZXJuIE1hdGNoaW5nCi0KLSAgIEEgcGF0dGVy biBpcyBhIGNoYXJhY3RlciBzdHJpbmcgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIG90aGVyIHN0cmlu Z3MuCi0gICBQYXR0ZXJucyBjYW4gY29udGFpbiBtZXRhY2hhcmFjdGVycyB0aGF0IHJlcHJlc2Vu dCBzcGVjaWFsIGFjdGlvbnMgbGlrZQotICAgIm1hdGNoIGFueSBzaW5nbGUgY2hhcmFjdGVyIiwg Im1hdGNoIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzIiwgIm1hdGNoCi0gICBhbnkgc2luZ2xlIGNo YXJhY3RlciBmcm9tIGEgbGlzdCIsIGFuZCBzbyBvbi4gVGhlIGJlc3Qga25vd24KLSAgIGFwcGxp Y2F0aW9uIG9mIHBhdHRlcm5zIGlzIGluIGZpbGUgc3BlY2lmaWNhdGlvbnMgdGhhdCBjb250YWlu Ci0gICB3aWxkY2FyZHMsIGFzIGluICJzZW5kICoudHh0IiwgbWVhbmluZyAic2VuZCBhbGwgZmls ZXMgd2hvc2UgbmFtZXMgZW5kCi0gICB3aXRoIC50eHQiLgotCi0gICBQYXR0ZXJucyBhcmUgYWxz byB1c2VkIGluIGluY3JlYXNpbmdseSBtYW55IG90aGVyIHdheXMsIHRvIHRoZSBleHRlbnQKLSAg IGl0IGlzIHVzZWZ1bCB0byBwb2ludCBvdXQgY2VydGFpbiBpbXBvcnRhbnQgZGlzdGluY3Rpb25z IGluIHRoZSB3YXlzIGluCi0gICB3aGljaCB0aGV5IGFyZSB1c2VkOgotCi0gICBBbmNob3JlZCBQ YXR0ZXJucwotICAgICAgICAgIElmIGFuIGFuY2hvcmVkIHBhdHRlcm4gZG9lcyBub3QgYmVnaW4g d2l0aCAiKiIsIGl0IG11c3QgbWF0Y2gKLSAgICAgICAgICB0aGUgYmVnaW5uaW5nIG9mIHRoZSBz dHJpbmcsIGFuZCBpZiBpdCBkb2VzIG5vdCBlbmQgd2l0aCAiKiIsIGl0Ci0gICAgICAgICAgbXVz dCBtYXRjaCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuIEZvciBleGFtcGxlLCB0aGUgYW5jaG9yZWQK LSAgICAgICAgICBwYXR0ZXJuICJhYmMiIG1hdGNoZXMgb25seSB0aGUgc3RyaW5nICJhYmMiLCBu b3QgImFiY2RlIiBvcgotICAgICAgICAgICJ4eXphYmMiIG9yICJhYmNhYmMiLiBUaGUgYW5jaG9y ZWQgcGF0dGVybiAiYWJjKiIgbWF0Y2hlcyBhbnkKLSAgICAgICAgICBzdHJpbmcgdGhhdCBzdGFy dHMgd2l0aCAiYWJjIjsgdGhlIGFuY2hvcmVkIHBhdHRlcm4gIiphYmMiCi0gICAgICAgICAgbWF0 Y2hlcyBhbnkgc3RyaW5nIHRoYXQgZW5kcyB3aXRoICJhYmMiOyB0aGUgYW5jaG9yZWQgcGF0dGVy bgotICAgICAgICAgICIqYWJjKiIgbWF0Y2hlcyBhbnkgc3RyaW5nIHRoYXQgY29udGFpbnMgImFi YyIgKGluY2x1ZGluZyBhbnkKLSAgICAgICAgICB0aGF0IHN0YXJ0IGFuZC9vciBlbmQgd2l0aCBp dCkuCi0KLSAgIEZsb2F0aW5nIFBhdHRlcm5zCi0gICAgICAgICAgQSBmbG9hdGluZyBwYXR0ZXJu IG1hdGNoZXMgYW55IHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgc3Vic3RyaW5nCi0gICAgICAgICAg dGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuLiBJbiBvdGhlciB3b3JkcywgYSBmbG9hdGluZyBwYXR0 ZXJuIGhhcwotICAgICAgICAgIGFuIGltcGxpZWQgIioiIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVu ZC4gWW91IGNhbiBhbmNob3IgYQotICAgICAgICAgIGZsb2F0aW5nIHBhdHRlcm4gdG8gdGhlIGJl Z2lubmluZyBieSBzdGFydGluZyBpdCB3aXRoICJeIiwgYW5kCi0gICAgICAgICAgeW91IGNhbiBh bmNob3IgaXQgdG8gdGhlIGVuZCBieSBlbmRpbmcgaXQgd2l0aCAiJCIgKHNlZSBleGFtcGxlcwot ICAgICAgICAgIGJlbG93KS4KLQotICAgV2lsZGNhcmRzCi0gICAgICAgICAgQSB3aWxkY2FyZCBp cyBhbiBhbmNob3JlZCBwYXR0ZXJuIHRoYXQgaGFzIHRoZSBhZGRpdGlvbmFsCi0gICAgICAgICAg cHJvcGVydHkgdGhhdCAiKiIgZG9lcyBub3QgbWF0Y2ggZGlyZWN0b3J5IHNlcGFyYXRvcnMuCi0K LSAgIFRoaXMgdGVybWlub2xvZ3kgbGV0cyB1cyBkZXNjcmliZSBLZXJtaXQncyBjb21tYW5kcyB3 aXRoIGEgYml0IG1vcmUKLSAgIHByZWNpc2lvbi4gV2hlbiBhIHBhdHRlcm4gaXMgdXNlZCBmb3Ig bWF0Y2hpbmcgZmlsZW5hbWVzLCBpdCBpcyBhCi0gICB3aWxkY2FyZCwgZXhjZXB0IGluIHRoZSBU RVhULVBBVFRFUk5TIGFuZCBCSU5BUlktUEFUVEVSTlMgbGlzdHMgYW5kCi0gICAvRVhDRVBUOiBj bGF1c2VzLCBpbiB3aGljaCBjYXNlIGRpcmVjdG9yeSBzZXBhcmF0b3JzIGFyZSBub3QKLSAgIHNp Z25pZmljYW50IChmb3IgZXhhbXBsZSwgYSBCSU5BUlktUEFUVEVSTiBvZiAiKi5leGUiIG1hdGNo ZXMgYW55IGZpbGUKLSAgIHdob3NlIG5hbWUgZW5kcyBpbiAuZXhlLCBubyBtYXR0ZXIgaG93IGRl ZXBseSBpdCBtaWdodCBiZSBidXJpZWQgaW4KLSAgIHN1YmRpcmVjdG9yaWVzKS4gV2hlbiBLZXJt aXQgcGFyc2VzIGEgZmlsZSBzcGVjaWZpY2F0aW9uIGRpcmVjdGx5LAotICAgaG93ZXZlciwgaXQg dXNlcyB0aGUgc3RyaWN0IHdpbGRjYXJkIGRlZmluaXRpb24uIEZvciBleGFtcGxlLCAic2VuZAot ICAgYSpiIiBzZW5kcyBhbGwgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAiYSIgYW5kIGVu ZCB3aXRoICJiIiBpbiB0aGUKLSAgIGN1cnJlbnQgZGlyZWN0b3J5LCBhbmQgbm90IGFueSBmaWxl cyB3aG9zZSBuYW1lcyBlbmQgd2l0aCAiYiIgdGhhdAotICAgaGFwcGVuIHRvIGJlIGluIHN1YmRp cmVjdG9yaWVzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggImEiLiBBbmQgYXMKLSAgIG5vdGVkLCB3 aWxkY2FyZHMgYXJlIGFuY2hvcmVkLCBzbyAiZGVsZXRlIGZvbyIgZGVsZXRlcyB0aGUgZmlsZSBu YW1lZAotICAgImZvbyIsIGFuZCBub3QgYWxsIGZpbGVzIHdob3NlIG5hbWVzIGhhcHBlbiB0byBj b250YWluICJmb28iLgotCi0gICBNb3N0IG90aGVyIHBhdHRlcm5zIGFyZSBhbmNob3JlZC4gRm9y IGV4YW1wbGU6Ci0KLSAgaWYgbWF0Y2ggYWJjIGJjIC4uLgotCi0gICBkb2VzIG5vdCBzdWNjZWVk IChhbmQgeW91IHdvdWxkIGJlIHN1cnByaXNlZCBpZiBpdCBkaWQhKS4gSW4gZmFjdCwgdGhlCi0g ICBvbmx5IGZsb2F0aW5nIHBhdHRlcm5zIGFyZSB0aGUgb25lcyB1c2VkIGJ5IGNvbW1hbmRzIG9y IGZ1bmN0aW9ucyB0aGF0Ci0gICBzZWFyY2ggZm9yIHBhdHRlcm5zIGluIGZpbGVzLCBhcnJheXMs IG9yIHN0cmluZ3MuIFRoZXNlIGluY2x1ZGU6Ci0KLSAgICAgKiBUaGUgR1JFUCBhbmQgVFlQRSAv TUFUQ0ggY29tbWFuZHMuCi0gICAgICogVGhlIFxmc2VhcmNoKCksIFxmcnNlYXJjaCgpLCBhbmQg XGZhcnJheWxvb2soKSBmdW5jdGlvbnMuCi0KLSAgIFRodXMgdGhlc2UgYXJlIHRoZSBvbmx5IGNv bnRleHRzIGluIHdoaWNoIGV4cGxpY2l0IGFuY2hvcnMgKCJeIiBhbmQKLSAgICIkIikgbWF5IGJl IHVzZWQ6Ci0KLSAgIGdyZXAgYWJjICoudHh0Ci0gICAgICAgICAgUHJpbnRzIGFsbCBsaW5lcyBj b250YWluaW5nICJhYmMiIGluIGFsbCBmaWxlcyB3aG9zZSBuYW1lcyBlbmQKLSAgICAgICAgICB3 aXRoICIudHh0Ii4KLQotICAgZ3JlcCBeYWJjICoudHh0Ci0gICAgICAgICAgUHJpbnRzIGFsbCBs aW5lcyB0aGF0IHN0YXJ0IHdpdGggImFiYyIgaW4gYWxsICIudHh0IiBmaWxlcy4KLQotICAgZ3Jl cCBhYmMkICoudHh0Ci0gICAgICAgICAgUHJpbnRzIGFsbCBsaW5lcyB0aGF0IGVuZCB3aXRoICJh YmMiIGluIGFsbCAiLnR4dCIgZmlsZXMuCi0KLSAgIGdyZXAgXmEqeiQgKi50eHQKLSAgICAgICAg ICBQcmludHMgYWxsIGxpbmVzIHRoYXQgc3RhcnQgd2l0aCAiYSIgYW5kIGVuZCB3aXRoICJ6IiBp biBhbGwKLSAgICAgICAgICAiLnR4dCIgZmlsZXMuCi0KLSAgIFNpbWlsYXJseSBmb3IgVFlQRSAv UEFHRSwgL2ZzZWFyY2goKSwgL2Zyc2VhcmNoKCksIGFuZCBcZmFycmF5bG9vaygpLgotCi0gICBI ZXJlIGlzIGEgYnJpZWYgc3VtbWFyeSBvZiBhbmNob3JlZCBhbmQgZmxvYXRpbmcgcGF0dGVybiBl cXVpdmFsZW5jZXM6Ci0KLSAgQW5jaG9yZWQgICBGbG9hdGluZwotICAgIGFiYyAgICAgICBeYWJj JAotICAgICphYmMgICAgICBhYmMkCi0gICAgYWJjKiAgICAgIF5hYmMKLSAgICAqYWJjKiAgICAg YWJjCi0KLSAgIFsgWzQ3NV1Ub3AgXSBbIFs0NzZdQ29udGVudHMgXSBbIFs0NzddQy1LZXJtaXQg SG9tZSBdIFsgWzQ3OF1LZXJtaXQKLSAgIEhvbWUgXQotCi04LjEzLiBEYXRlcyBhbmQgVGltZXMK LQotICAgQy1LZXJtaXQncyBjb21wcmVoZW5zaW9uIG9mIGRhdGUtdGltZSBmb3JtYXRzIGlzIGNv bnNpZGVyYWJseSBleHBhbmRlZAotICAgaW4gdmVyc2lvbiA4LjAuIEFueSBjb21tYW5kIHRoYXQg cmVhZHMgZGF0ZXMsIGluY2x1ZGluZyB0aGUgREFURQotICAgY29tbWFuZCBpdHNlbGYsIG9yIGFu eSBzd2l0Y2gsIHN1Y2ggYXMgdGhlIC9CRUZPUkU6IGFuZCAvQUZURVI6Ci0gICBzd2l0Y2hlcywg b3IgYW55IGZ1bmN0aW9uIHN1Y2ggYXMgXGZjdnRkYXRlKCksIG5vdyBjYW4gdW5kZXJzdGFuZCBk YXRlcwotICAgYW5kIHRpbWVzIGV4cHJlc3NlZCBpbiBhbnkgSVNPIDg2MDEgZm9ybWF0LCBpbiBV bml4ICJhc2N0aW1lIiBmb3JtYXQsCi0gICBpbiBGVFAgTURUTSBmb3JtYXQsIGFuZCBpbiBwcmFj dGljYWxseSBhbnkgZm9ybWF0IHVzZWQgaW4gUkZDIDgyMiBvcgotICAgUkZDIDI4MjIgZWxlY3Ry b25pYyBtYWlsLCB3aXRoIG9yIHdpdGhvdXQgdGltZXpvbmVzLCBhbmQgaW4gYSBncmVhdAotICAg bWFueSBvdGhlciBmb3JtYXRzIGFzIHdlbGwuIEhFTFAgREFURSBicmllZmx5IHN1bW1hcml6ZXMg dGhlIGFjY2VwdGFibGUKLSAgIGRhdGUtdGltZSBmb3JtYXRzLgotCi0gICBGdXJ0aGVybW9yZSwg Qy1LZXJtaXQgOC4wIGluY2x1ZGVzIGEgbmV3IGFuZCBlYXN5LXRvLXVzZSBmb3JtIG9mCi0gICBk YXRlLXRpbWUgYXJpdGhtZXRpYywgaW4gd2hpY2ggYW55IGRhdGUgb3IgdGltZSBjYW4gYmUgY29t YmluZWQgd2l0aCBhCi0gICAiZGVsdGEgdGltZSIsIHRvIGFkZCBvciBzdWJ0cmFjdCB0aGUgZGVz aXJlZCB0aW1lIGludGVydmFsICh5ZWFycywKLSAgIG1vbnRocywgd2Vla3MsIGRheXMsIGhvdXJz LCBtaW51dGVzLCBzZWNvbmRzKSB0by9mcm9tIHRoZSBnaXZlbiBkYXRlLgotICAgQW5kIG5ldyBm dW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBjb21wYXJlIGRhdGVzIGFuZCB0byBjb21wdXRlIHRo ZWlyCi0gICBkaWZmZXJlbmNlcy4KLQotICAgQXMgeW91IGNhbiBpbWFnaW5lLCBhbGwgdGhpcyBy ZXF1aXJlcyBxdWl0ZSBhIGJpdCBvZiAic3ludGF4Ii4gVGhlCi0gICBiYXNpYyBmb3JtYXQgaXM6 Ci0KLSAgWyBkYXRlIF0gWyB0aW1lIF0gWyBkZWx0YSBdCi0KLSAgIEVhY2ggZmllbGQgaXMgb3B0 aW9uYWwsIGJ1dCBpbiBtb3N0IGNhc2VzIChkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQpCi0gICB0 aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBmaWVsZC4gSWYgYSBkYXRlIGlzIGdpdmVuLCBpdCBt dXN0IGNvbWUKLSAgIGZpcnN0LiBJZiBubyBkYXRlIGlzIGdpdmVuLCB0aGUgY3VycmVudCBkYXRl IGlzIGFzc3VtZWQuIElmIG5vIHRpbWUgaXMKLSAgIGdpdmVuLCBhbiBhcHByb3ByaWF0ZSB0aW1l IGlzIHN1cHBsaWVkIGRlcGVuZGluZyBvbiB3aGV0aGVyIGEgZGF0ZSB3YXMKLSAgIHN1cHBsaWVk LiBJZiBubyBkZWx0YSBpcyBnaXZlbiwgbm8gYXJpdGhtZXRpYyBpcyBkb25lLiBJZiBhIGRlbHRh IGlzCi0gICBnaXZlbiB3aXRob3V0IGEgZGF0ZSBvciB0aW1lLCB0aGUgY3VycmVudCBkYXRlIGFu ZCB0aW1lIGFyZSB1c2VkIGFzIHRoZQotICAgYmFzZS4KLQotICAgRGF0ZS10aW1lLWRlbHRhIGZp ZWxkcyBhcmUgbGlrZWx5IHRvIGNvbnRhaW4gc3BhY2VzIChhbHRob3VnaCB0aGV5IG5lZWQKLSAg IG5vdDsgc3BhY2UtZnJlZSBmb3JtcyBhcmUgYWx3YXlzIGF2YWlsYWJsZSkuIFRoZXJlZm9yZSwg aW4gbW9zdAotICAgY29udGV4dHMgLS0gYW5kIG5vdGFibHkgYXMgc3dpdGNoIGFyZ3VtZW50cyAt LSBkYXRlLXRpbWUgaW5mb3JtYXRpb24KLSAgIG11c3QgYmUgZW5jbG9zZWQgaW4gYnJhY2VzIG9y IGRvdWJsZXF1b3RlcywgZm9yIGV4YW1wbGU6Ci0KLSAgc2VuZCAvYWZ0ZXI6IjgtQXVnLTIwMDEg MTI6MDAgVVRDIiAqLnR4dAotCi0gICBLZXJtaXQncyBzdGFuZGFyZCBpbnRlcm5hbCBmb3JtYXQg Zm9yIGRhdGVzIGFuZCB0aW1lcyBpczoKLQotICB5eXl5bW1kZCBoaDptbTpzcwotCi0gICBmb3Ig ZXhhbXBsZToKLQotICAyMDAxMDIwOCAxMDoyODowMQotCi0gICBEYXRlLXRpbWVzIGNhbiBhbHdh eXMgYmUgZ2l2ZW4gaW4gdGhpcyBmb3JtYXQuIHl5eXkgaXMgdGhlIDQtZGlnaXQKLSAgIHllYXIs IG1tIGlzIHRoZSB0d28tZGlnaXQgbW9udGggKDEtMTI7IHN1cHBseSBsZWFkaW5nIHplcm8gZm9y Ci0gICBKYW4tU2VwKSwgZGQgaXMgdGhlIDItZGlnaXQgZGF5IChsZWFkaW5nIHplcm8gZm9yIDEt OSksIGhoIGlzIHRoZSBob3VyCi0gICAoMC0yMyksIG1tIHRoZSBtaW51dGUgKDAtNTkpLCBzcyB0 aGUgc2Vjb25kICgwLTU5KSwgZWFjaCB3aXRoIGxlYWRpbmcKLSAgIHplcm8gaWYgbGVzcyB0aGFu IHRoZSBmaWVsZCB3aWR0aC4gVGhlIGRhdGUgYW5kIHRpbWUgY2FuIGJlIHNlcGFyYXRlZAotICAg YnkgYSBzcGFjZSwgYW4gdW5kZXJzY29yZSwgYSBjb2xvbiwgb3IgdGhlIGxldHRlciBULiBUaGUg dGltZSBpcyBpbgotICAgMjQtaG91ciBmb3JtYXQuIFRodXMgdGhlIHZhcmlvdXMgcXVhbnRpdGll cyBhcmUgYXQgdGhlIGZvbGxvd2luZyBmaXhlZAotICAgcG9zaXRpb25zOgotCi1Qb3NpdGlvbiAg Q29udGVudHMKLSAgIDEtNCAgICBZZWFyICAgKDQgZGlnaXRzLCAwMDAwLTk5OTkpCi0gICA1LTYg ICAgTW9udGggICgyIGRpZ2l0cywgMS0xMikKLSAgIDctOCAgICBEYXkgICAgKDIgZGlnaXRzLCAx LTMxKQotICAgOSAgICAgIERhdGUtVGltZSBTZXBhcmF0b3IgKHNwYWNlLCA6LCBfLCBvciB0aGUg bGV0dGVyIFQpCi0gIDEwLTExICAgSG91ciAgICgyIGRpZ2l0cywgMC0yMykKLSAgMTIgICAgICBI b3VyLU1pbnV0ZSBTZXBhcmF0b3IgKGNvbG9uKQotICAxMy0xNCAgIE1pbnV0ZSAoMiBkaWdpdHMs IDAtNTkpCi0gIDE1ICAgICAgTWludXRlLVNlY29uZCBTZXBhcmF0b3IgKGNvbG9uKQotICAxNi0x NyAgIFNlY29uZCAoMiBkaWdpdHMsIDAtNTkpCi0KLSAgIEV4YW1wbGU6Ci0KLSAgMTk4MDA1MjYg MTM6MDc6MTIgIDI2IE1heSAxOTgwLCAxMzowNzoxMiAoMTowNzoxMlBNKQotCi0gICBUaGlzIGlz IHRoZSBmb3JtYXQgcHJvZHVjZWQgYnkgdGhlIERBVEUgY29tbWFuZCBhbmQgYnkgYW55IGZ1bmN0 aW9uCi0gICB0aGF0IHJldHVybnMgYSBkYXRlLXRpbWUuIEl0IGlzIHN1aXRhYmxlIGZvciBsZXhp Y2FsIGNvbXBhcmlzb24gYW5kCi0gICBzb3J0aW5nLCBhbmQgZm9yIHVzZSBhcyBhIGRhdGUtdGlt ZSBpbiBhbnkgS2VybWl0IGNvbW1hbmQuIFdoZW4gdGhpcwotICAgZm9ybWF0IGlzIGdpdmVuIGFz IGlucHV0IHRvIGEgY29tbWFuZCBvciBmdW5jdGlvbiwgdmFyaW91cyBkYXRlLXRpbWUKLSAgIHNl cGFyYXRvcnMgKGFzIG5vdGVkKSBhcmUgYWNjZXB0ZWQ6Ci0KLSAgMTk4MDA1MjYgMTM6MDc6MTIg IDI2IE1heSAxOTgwLCAxMzowNzoxMiAoMTowNzoxMlBNKQotICAyMDAxMDIwOF8xMDoyODozNSAg MiBGZWJydWFyeSAyMDAxLCAxMDoyODozNSBBTQotICAxODU4MDEwMToxMjowMDowMCAgMSBKYW51 YXJ5IDE4NTgsIG5vb24KLSAgMjAxMTAyMDhUMDA6MDA6MDAgIDIgRmVicnVhcnkgMjAxMSwgbWlk bmlnaHQKLQotICAgQ2VydGFpbiBvdGhlciBzcGVjaWFsIGRhdGUtdGltZSBmb3JtYXRzIHRoYXQg YXJlIGVuY291bnRlcmVkIG9uCi0gICBjb21wdXRlciBuZXR3b3JrcyBhcmUgcmVjb2duaXplZDoK LQotICAgQXNjdGltZSBGb3JtYXQKLSAgICAgICAgICBUaGlzIGlzIGEgZml4ZWQgZm9ybWF0IHVz ZWQgYnkgVW5peCwgbmFtZWQgYWZ0ZXIgVW5peCdzCi0gICAgICAgICAgYXNjdGltZSgpICgiQVND SUkgdGltZSIpIGZ1bmN0aW9uLiBJdCBpcyBhbHdheXMgZXhhY3RseSAyNAotICAgICAgICAgIGNo YXJhY3RlcnMgbG9uZy4gRXhhbXBsZTogRnJpIEF1ZyAxMCAxNjozODowMSAyMDAxCi0KLSAgIEFz Y3RpbWUgd2l0aCBUaW1lem9uZQotICAgICAgICAgIFRoaXMgaXMgbGlrZSBBc2N0aW1lIGZvcm1h dCwgYnV0IGluY2x1ZGVzIGEgMy1jaGFyYWN0ZXIgdGltZXpvbmUKLSAgICAgICAgICBiZXR3ZWVu IHRoZSB0aW1lIGFuZCB5ZWFyLiBJdCBpcyBleGFjdGx5IDI4IGNoYXJhY3RlcnMgbG9uZy4KLSAg ICAgICAgICBFeGFtcGxlOiBGcmkgQXVnIDEwIDE2OjM4OjAxIEdNVCAyMDAxCi0KLSAgIEUtTWFp bCBGb3JtYXQKLSAgICAgICAgICBFLW1haWwgZGF0ZS10aW1lIGZvcm1hdHMgYXJlIGRlZmluZWQg aW4gWzQ3OV1SRkMgMjgyMiB3aXRoIGEKLSAgICAgICAgICBmYWlyIGFtb3VudCBvZiBmbGV4aWJp bGl0eSBhbmQgb3B0aW9ucy4gVGhlIGZvbGxvd2luZyBleGFtcGxlcwotICAgICAgICAgIGFyZSB0 eXBpY2FsIG9mIGUtbWFpbHMgYW5kIEhUVFAgKHdlYi1wYWdlKSBoZWFkZXJzOgotCi0gIFNhdCwg MTQgSnVsIDIwMDEgMTE6NDk6MjkgICAgICAgICAgICAgICAgKE5vIHRpbWV6b25lKQotICBGcmks IDI0IE1hciAyMDAwIDE0OjE5OjU5IEVTVCAgICAgICAgICAgIChTeW1ib2xpYyB0aW1lem9uZSkK LSAgVHVlLCAyNiBKdW4gMjAwMSAxMDoxOTo0NSAtMDQwMCAoRURUKSAgICAoR01UIE9mZnNldCAr IGNvbW1lbnQpCi0KLSAgIEZUUCBNRFRNIEZvcm1hdAotICAgICAgICAgIFRoaXMgaXMgdGhlIGRh dGUtdGltZSBmb3JtYXQgc3VwcGxpZWQgYnkgRlRQIHNlcnZlcnMgdGhhdAotICAgICAgICAgIHN1 cHBvcnQgdGhlIChub3QgeWV0IHN0YW5kYXJkIGJ1dCB3aWRlbHkgdXNlZCBuZXZlcnRoZWxlc3Mp IE1EVE0KLSAgICAgICAgICBjb21tYW5kLCBieSB3aGljaCB0aGUgRlRQIGNsaWVudCBhc2tzIGZv ciBhIGZpbGUncyBtb2RpZmljYXRpb24KLSAgICAgICAgICB0aW1lOgotCi0gIHl5eXltbWRkaGht bXNzWy5mZmZmXQotCi0gICAgICAgICAgd2hlcmUgeXl5eSBpcyB0aGUgNC1kaWdpdCB5ZWFyLCBt bSBpcyB0aGUgMi1kaWdpdCBtb250aCwgYW5kIHNvCi0gICAgICAgICAgb24sIGV4YWN0bHkgMTQg ZGlnaXRzIGxvbmcuIEFuIG9wdGlvbmFsIGZyYWN0aW9uYWwgcGFydAotICAgICAgICAgIChmcmFj dGlvbiBvZiBzZWNvbmQpIG1heSBhbHNvIGJlIGluY2x1ZGVkLCBzZXBhcmF0ZWQgYnkgYQotICAg ICAgICAgIGRlY2ltYWwgcG9pbnQgKHBlcmlvZCkuIEtlcm1pdCByb3VuZHMgdG8gdGhlIG5lYXJl c3Qgc2Vjb25kLgotICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgMjAwMjAyMDgxMDI4MzUuNTE1ICAg ICAgICAgICAgICAgICAgICAgICAoOCBGZWJydWFyeSAyMDAyIDEwOjI4OjM2IEFNKQotCi04LjEz LjEuIFRoZSBEYXRlCi0KLSAgIFRoZSBkYXRlLCBpZiBnaXZlbiwgbXVzdCBwcmVjZWRlIHRoZSB0 aW1lIGFuZC9vciBkZWx0YSwgYW5kIGNhbiBiZSBpbgotICAgbWFueSwgbWFueSBmb3JtYXRzLiBG b3Igc3RhcnRlcnMsIHlvdSBjYW4gdXNlIHNldmVyYWwgc3ltYm9saWMgZGF0ZQotICAgbmFtZXMg aW4gcGxhY2Ugb2YgYWN0dWFsIGRhdGVzOgotCi0gICBOT1cKLSAgICAgICAgICBUaGlzIGlzIHJl cGxhY2VkIGJ5IHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuIFRoZSB0aW1lIGNhbiBub3QKLSAg ICAgICAgICBiZSBvdmVycmlkZW4gKGlmIHlvdSB3YW50IHRvIHN1cHBseSBhIHNwZWNpZmljIHRp bWUsIHVzZSBUT0RBWQotICAgICAgICAgIHJhdGhlciB0aGFuIE5PVykuCi0KLSAgIFRPREFZCi0g ICAgICAgICAgVGhpcyBpcyByZXBsYWNlZCBieSB0aGUgY3VycmVudCBkYXRlIGFuZCBhIGRlZmF1 bHQgdGltZSBvZgotICAgICAgICAgIDAwOjAwOjAwIGlzIHN1cHBsaWVkLCBidXQgY2FuIGJlIG92 ZXJyaWRkZW4gYnkgYSBzcGVjaWZpYyB0aW1lOwotICAgICAgICAgIGZvciBleGFtcGxlLCBpZiB0 b2RheSBpcyA4IEZlYnJ1YXJ5IDIwMDIsIHRoZW4gIlRPREFZIiBpcwotICAgICAgICAgICIyMDAy MDgwMiAwMDowMDowMCIgYnV0ICJUT0RBWSAxMDoyOCIgaXMgIjIwMDIwODAyIDEwOjI4OjAwIi4K LQotICAgVE9NT1JST1cKLSAgICAgICAgICBMaWtlIFRPREFZLCBidXQgb25lIGRheSBsYXRlciAo aWYgdG9kYXkgaXMgOCBGZWJydWFyeSAyMDAyLCB0aGVuCi0gICAgICAgICAgIlRPTU9SUk9XIiBp cyAiMjAwMjA4MDMgMDA6MDA6MDAiIGJ1dCAiVE9NT1JST1cgMTY6MzAiIGlzCi0gICAgICAgICAg IjIwMDIwODAzIDE2OjMwOjAwIikuCi0KLSAgIFlFU1RFUkRBWQotICAgICAgICAgIExpa2UgVE9E QVksIGJ1dCBvbmUgZGF5IGVhcmxpZXIuCi0KLSAgIE1PTkRBWSwgVFVFU0RBWSwgV0VETkVTREFZ LCAuLi4sIFNVTkRBWQotICAgICAgICAgIFRoZSBkYXRlIG9uIHRoZSBnaXZlbiBkYXkgb2YgdGhl IHdlZWssIHRvZGF5IG9yIGxhdGVyLiBBIGRlZmF1bHQKLSAgICAgICAgICB0aW1lIG9mIDAwOjAw OjAwIGlzIHN1cHBsaWVkIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbi4gRXhhbXBsZToKLSAgICAgICAg ICAiU0FUVVJEQVkgMTI6MDAiIG1lYW5zIG5leHQgU2F0dXJkYXkgKG9yIHRvZGF5LCBpZiB0b2Rh eSBpcwotICAgICAgICAgIFNhdHVyZGF5KSBhdCBub29uLgotCi0gICBZb3UgY2FuIGdpdmUgYW4g ZXhwbGljaXQgZGF0ZSBpbiBhbG1vc3QgYW55IGNvbmNlaXZhYmxlIGZvcm1hdCwgYnV0Ci0gICB0 aGVyZSBhcmUgc29tZSBydWxlczoKLQotICAgICAqIElmIGEgZGF0ZSBpcyBnaXZlbiwgaXQgbXVz dCBoYXZlIHRocmVlIGZpZWxkczogZGF5LCBtb250aCwgYW5kCi0gICAgICAgeWVhcjsgdGhlIG9y ZGVyIGNhbiB2YXJ5IChleGNlcHQgdGhhdCB0aGUgbW9udGggY2FuIG5vdCBiZSBsYXN0KS4KLSAg ICAgKiBJZiBuYW1lcyBhcmUgdXNlZCBmb3IgZGF5cywgbW9udGhzLCBldGMsIHRoZXkgbXVzdCBi ZSBFbmdsaXNoLgotICAgICAqIFRoZSB5ZWFyIG11c3QgbGllIGJldHdlZW4gMDAwMCBhbmQgOTk5 OSwgaW5jbHVzaXZlLgotICAgICAqIEFsbCBjYWxlbmRhciBjYWxjdWxhdGlvbnMgdXNlIEdyZWdv cmlhbiBkYXRpbmcsIHNvIGNhbGN1bGF0ZWQgZGF0ZXMKLSAgICAgICBmb3IgeWVhcnMgcHJpb3Ig dG8gMTU4MiAob3IgbGF0ZXIsIGRlcGVuZGluZyBvbiB0aGUgY291bnRyeSkgd2lsbAotICAgICAg IG5vdCBhZ3JlZSB3aXRoIGhpc3RvcmljYWwgZGF0ZXMuIE90aGVyIGZvcm1zIG9mIGRhdGluZyAo ZS5nLgotICAgICAgIEhlYnJldywgQ2hpbmVzZSkgYXJlIG5vdCBzdXBwb3J0ZWQuCi0KLSAgIFZh cmlvdXMgZGF0ZS1maWVsZCBzZXBhcmF0b3JzIGFyZSBhY2NlcHRlZDogaHlwaGVuLCBzbGFzaCwg c3BhY2UsCi0gICB1bmRlcnNjb3JlLCBwZXJpb2QuIFRoZSBzYW1lIGZpZWxkIHNlcGFyYXRvciAo aWYgYW55KSBtdXN0IGJlIHVzZWQgaW4KLSAgIGJvdGggcGxhY2VzOyBmb3IgZXhhbXBsZSAxOC1T ZXAtMjAwMSBidXQgbm90IDE4LVNlcC8yMDAxLiBNb250aHMgY2FuIGJlCi0gICBudW1lcmljICgx LTEyKSBvciBFbmdsaXNoIG5hbWVzIG9yIGFiYnJldmlhdGlvbnMuIE1vbnRoIG5hbWUKLSAgIGFi YnJldmlhdGlvbnMgYXJlIG5vcm1hbGx5IHRocmVlIGxldHRlcnMsIGUuZy4gQXByLCBNYXksIEp1 biwgSnVsLgotICAgQ2FwaXRhbGl6YXRpb24gZG9lc24ndCBtYXR0ZXIuCi0KLSAgIEhlcmUgYXJl IGEgZmV3IGV4YW1wbGVzOgotCi0gIDE4IFNlcCAyMDAxICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKEVuZ2xpc2ggbW9udGgsIGFiYnJldmlhdGVkKQotICAxOCBTZXB0ZW1iZXIgMjAwMSAg ICAgICAgICAgICAgICAgICAgICAgIChFbmdsaXNoIG1vbnRoLCBzcGVsbGVkIG91dCkKLSAgMjAw MSBTZXB0IDE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWWVhciwgbW9udGgsIGRheSkK LSAgMTgtU2VwLTIwMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2l0aCBoeXBoZW5z KQotICAxOC8wOS8yMDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBbGwgbnVtZXJp YyB3aXRoIHNsYXNoZXMpCi0gIDE4LjA5LjIwMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKERpdHRvLCB3aXRoIHBlcmlvZHMpCi0gIDE4XzA5XzIwMDEgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKERpdHRvLCB3aXRoIHVuZGVyc2NvcmVzKQotICAwOS8xOC8yMDAxICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChTZWUgYmVsb3cpCi0gIDIwMDEvMDkvMTggICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKFNlZSBiZWxvdykKLSAgU2VwdGVtYmVyIDE4LCAyMDAx ICAgICAgICAgICAgICAgICAgICAgICAoQ29ycmVzcG9uZGVuY2Ugc3R5bGUpCi0gIFNlcC0xOC0y MDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1vbnRoLWRheS15ZWFyKQotICAyMDAx MDkxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOdW1lcmljLCBubyBzZXBhcmF0 b3JzKQotCi0gICBZb3UgY2FuIGFsc28gaW5jbHVkZSB0aGUgZGF5IG9mIHRoZSB3ZWVrIHdpdGgg YSBzcGVjaWZpYyBkYXRlLCBpbiB3aGljaAotICAgY2FzZSBpdCBpcyBhY2NlcHRlZCAoaWYgaXQg aXMgYSB2YWxpZCBkYXkgbmFtZSksIGJ1dCBub3QgdmVyaWZpZWQgdG8KLSAgIGFncmVlIHdpdGgg dGhlIGdpdmVuIGRhdGU6Ci0KLSAgVHVlLCAxOCBTZXAgMjAwMSAgICAgICAgICAgICAgICAgICAg ICAgICAoQWJicmV2aWF0ZWQsIHdpdGggY29tbWEpCi0gIFR1ZSwxOCBTZXAgMjAwMSAgICAgICAg ICAgICAgICAgICAgICAgICAgKENvbW1hIGJ1dCBubyBzcGFjZSkKLSAgVHVlIDE4IFNlcCAyMDAx ICAgICAgICAgICAgICAgICAgICAgICAgICAoQWJicmV2aWF0ZWQsIG5vIGNvbW1hKQotICBUdWVz ZGF5IDE4IFNlcCAyMDAxICAgICAgICAgICAgICAgICAgICAgIChTcGVsbGVkIG91dCkKLSAgVHVl c2RheSwgMTggU2VwIDIwMDEgICAgICAgICAgICAgICAgICAgICAoZXRjKQotICBGcmlkYXksIDE4 IFNlcCAyMDAxICAgICAgICAgICAgICAgICAgICAgIChBY2NlcHRlZCBldmVuIGlmIG5vdCBGcmlk YXkpCi0KLSAgIEluIGFsbC1udW1lcmljIGRhdGVzIHdpdGggdGhlIHllYXIgbGFzdCwgc3VjaCBh cyAxOC8wOS8yMDAxLCBLZXJtaXQKLSAgIGlkZW50aWZpZXMgdGhlIHllYXIgYmVjYXVzZSBpdCdz IDQgZGlnaXRzLCB0aGVuIGRlY2lkZXMgd2hpY2ggb2YgdGhlCi0gICBvdGhlciB0d28gbnVtYmVy cyBpcyB0aGUgbW9udGggb3IgZGF5IGJhc2VkIG9uIGl0cyB2YWx1ZS4gSWYgYm90aCBhcmUKLSAg IDEyIG9yIGxlc3MgYW5kIGFyZSB1bmVxdWFsLCB0aGUgZGF0ZSBpcyBhbWJpZ3VvdXMgYW5kIGlz IHJlamVjdGVkLiBJbgotICAgYWxsLW51bWVyaWMgZGF0ZXMgd2l0aCB0aGUgeWVhciBmaXJzdCwg dGhlIHNlY29uZCBmaWVsZCBpcyBhbHdheXMgdGhlCi0gICBtb250aCBhbmQgdGhlIHRoaXJkIGlz IHRoZSBkYXkuIFRoZSBtb250aCBuZXZlciBjb21lcyBsYXN0LiBBIGRhdGUgd2l0aAotICAgbm8g c2VwYXJhdG9ycyBpcyBhY2NlcHRlZCBvbmx5IGlmIGl0IGlzIGFsbCBudW1lcmljIGFuZCBoYXMg ZXhhY3RseQotICAgZWlnaHQgZGlnaXRzLCBhbmQgaXMgYXNzdW1lZCB0byBiZSBpbiB5eXl5bW1k ZCBmb3JtYXQuCi0KLSAgMjAwMTA5MTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo MTgtU2VwLTIwMDEgMDA6MDA6MDApCi0KLSAgIG9yIDE0IGRpZ2l0cyAoYXMgaW4gRlRQIE1EVE0g Zm9ybWF0KToKLQotICAyMDAxMDkxODEyMzQ1NiAgICAgICAgICAgICAgICAgICAgICAgICAgICgx OC1TZXAtMjAwMSAxMjozNDo1NikKLQotICAgWW91IGNhbiBhbHdheXMgYXZvaWQgYW1iaWd1aXR5 IGJ5IHB1dHRpbmcgdGhlIHllYXIgZmlyc3QsIG9yIGJ5IHVzaW5nCi0gICBhbiBFbmdsaXNoLCBy YXRoZXIgdGhhbiBudW1lcmljLCBtb250aC4gQSBkYXRlIHN1Y2ggYXMgMDkvMDgvMjAwMSB3b3Vs ZAotICAgYmUgYW1iaWd1b3VzIGJ1dCAyMDAxLzA5LzA4IGlzIG5vdCwgbm9yIGlzIDA5LUF1Zy0y MDAxLgotCi0gICBVbnRpbCB0aGUgbGF0ZSAxOTkwcywgaXQgd2FzIGNvbW1vbiB0byBlbmNvdW50 ZXIgMi1kaWdpdCB5ZWFycywgYW5kCi0gICB0aGVzZSBhcmUgZm91bmQgdG8gdGhpcyBkYXkgaW4g b2xkIGUtbWFpbHMgYW5kIG90aGVyIGRvY3VtZW50cy4gS2VybWl0Ci0gICBhY2NlcHRzIHRoZXNl IGRhdGVzIGlmIHRoZXkgaGF2ZSBFbmdsaXNoIG1vbnRocywgYW5kIGludGVycHJldHMgdGhlbQot ICAgYWNjb3JkaW5nIHRvIHRoZSB3aW5kb3dpbmcgcnVsZXMgb2YgWzQ4MF1SRkMgMjgyMjogIklm IGEgdHdvIGRpZ2l0IHllYXIKLSAgIGlzIGVuY291bnRlcmVkIHdob3NlIHZhbHVlIGlzIGJldHdl ZW4gMDAgYW5kIDQ5LCB0aGUgeWVhciBpcwotICAgaW50ZXJwcmV0ZWQgYnkgYWRkaW5nIDIwMDAs IGVuZGluZyB1cCB3aXRoIGEgdmFsdWUgYmV0d2VlbiAyMDAwIGFuZAotICAgMjA0OS4gSWYgYSB0 d28gZGlnaXQgeWVhciBpcyBlbmNvdW50ZXJlZCB3aXRoIGEgdmFsdWUgYmV0d2VlbiA1MCBhbmQK LSAgIDk5LCBvciBhbnkgdGhyZWUgZGlnaXQgeWVhciBpcyBlbmNvdW50ZXJlZCwgdGhlIHllYXIg aXMgaW50ZXJwcmV0ZWQgYnkKLSAgIGFkZGluZyAxOTAwLiIKLQotICAgSWYgeW91IG5lZWQgdG8g c3BlY2lmeSBhIHllYXIgcHJpb3IgdG8gMTAwMCwgdXNlIGxlYWRpbmcgemVyb3MgdG8KLSAgIGVu c3VyZSBpdCBpcyBub3QgbWlzaW50ZXJwcmV0ZWQgYXMgYSAibm9uLVkySy1jb21wbGlhbnQiIG1v ZGVybiB5ZWFyOgotCi0gIDctT2N0LTc3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KDE5NzcxMDA3IDAwOjAwOjAwKQotICA3LU9jdC0wMDc3ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgwMDc3MTAwNyAwMDowMDowMCkKLQotOC4xMy4yLiBUaGUgVGltZQotCi0gICBUaGUg YmFzaWMgdGltZSBmb3JtYXQgaXMgaGg6bW06ZGQ7IHRoYXQgaXMgaG91cnMsIG1pbnV0ZXMsIHNl Y29uZHMsCi0gICBzZXBhcmF0ZWQgYnkgY29sb25zLCBwZXJoYXBzIHdpdGggYW4gb3B0aW9uYWwg ZnJhY3Rpb25hbCBzZWNvbmQKLSAgIHNlcGFyYXRlZCBieSBhIGRlY2ltYWwgcG9pbnQgKHBlcmlv ZCkuIFRoZSBob3VycyBhcmUgaW4gMjQtaG91ciBmb3JtYXQ7Ci0gICAxMiBpcyBub29uLCAxMyBp cyAxcG0sIGFuZCBzbyBvbi4gRmllbGRzIG9taXR0ZWQgZnJvbSB0aGUgcmlnaHQgZGVmYXVsdAot ICAgdG8gemVyby4gRmllbGRzIGNhbiBiZSBvbWl0dGVkIGZyb20gdGhlIGxlZnQgb3IgbWlkZGxl IGJ5IGluY2x1ZGluZyB0aGUKLSAgIGZpZWxkJ3MgdGVybWluYXRpbmcgY29sb24uIEV4YW1wbGVz OgotCi0gIDExOjU5OjU5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjU5OjU5 IEFNKQotICAxMTo1OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMTo1OTow MCBBTSkKLSAgMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6MDA6 MDAgQU0pCi0gIDExOjU5OjU5LjMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjU5 OjU5IEFNKQotICAxMTo1OTo1OS42NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOb29u KQotICAwMzoyMTowMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOjIxOjAwIEFN KQotICAzOjIxOjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOjIxOjAwIEFN KQotICAxNToyMTowMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOjIxOjAwIFBN KQotICA6MjE6MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwMDoyMTowMCBB TSkKLSAgOjowMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMDA6MDA6MDEg QU0pCi0gIDExOjo1OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjAwOjU5 IEFNKQotCi0gICBMZWFkaW5nIHplcm9zIGNhbiBiZSBvbWl0dGVkLCBidXQgaXQgaXMgY3VzdG9t YXJ5IGFuZCBtb3JlIHJlYWRhYmxlIHRvCi0gICBrZWVwIHRoZW0gaW4gdGhlIG1pbnV0ZSBhbmQg c2Vjb25kIGZpZWxkczoKLQotICAwMzowMjowMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgwMzowMjowMSBBTSkKLSAgMzowMjowMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoMDM6MDI6MDEgQU0pCi0gIDM6MjoxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKDAzOjAyOjAxIEFNKQotCi0gICBBTS9QTSBub3RhdGlvbiBpcyBhY2NlcHRlZCBpZiB5 b3Ugd2lzaCB0byB1c2UgaXQ6Ci0KLSAgMTE6NTk6NTkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoMTE6NTk6NTkgQU0pCi0gIDExOjU5OjU5QU0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKDExOjU5OjU5IEFNKQotICAxMTo1OTo1OUEuTS4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgxMTo1OTo1OSBBTSkKLSAgMTE6NTk6NTlhbSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoMTE6NTk6NTkgQU0pCi0gIDExOjU5OjU5YS5tLiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDExOjU5OjU5IEFNKQotICAxMTo1OTo1OVBNICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgxMTo1OTo1OSBQTSA9IDIzOjU5OjU5KQotICAxMTo1OTo1OVAuTS4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgxMTo1OTo1OSBQTSA9IDIzOjU5OjU5KQotICAxMTo1 OTo1OXBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMTo1OTo1OSBQTSA9IDIzOjU5 OjU5KQotICAxMTo1OTo1OXAubS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMTo1OTo1 OSBQTSA9IDIzOjU5OjU5KQotCi0gICBZb3UgY2FuIG9taXQgdGhlIGNvbG9ucyBpZiB5b3Ugd2lz aCwgaW4gd2hpY2ggY2FzZSBLZXJtaXQgdXNlcyB0aGUKLSAgIGZvbGxvd2luZyBydWxlcyB0byBp bnRlcnByZXQgdGhlIHRpbWU6Ci0KLSAgICAxLiA2IGRpZ2l0cyBpcyBoaDptbTpzcywgZS5nLiAx MjM0NTYgaXMgMTI6MzQ6NTYuCi0gICAgMi4gNSBkaWdpdHMgaXMgaDptbTpzcywgZS5nLiAxMjM0 NSBpcyAxOjIzOjQ1LgotICAgIDMuIDQgZGlnaXRzIGlzIGhoOm1tLCBlLmcuIDEyMzQgaXMgMTI6 MzQuCi0gICAgNC4gMyBkaWdpdHMgaXMgaDptbSwgZS5nLiAxMjMgaXMgMToyMy4KLSAgICA1LiAy IGRpZ2l0cyBpcyBoaCwgZS5nLiAxMiBpcyAxMjowMC4KLSAgICA2LiAxIGRpZ2l0IGlzIGggKHRo ZSBob3VyKSwgZS5nLiAxIGlzIDE6MDAuCi0KLSAgIEV4YW1wbGVzOgotCi0gIDEgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAxOjAwOjAwIEFNKQotICAxMCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMDowMDowMCBBTSkKLSAgMjMwICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMDI6MzA6MDAgQU0pCi0gIDIzMHBtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAyOjMwOjAwIFBNID0gMTQ6MzA6MDAp Ci0gIDExMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjE1OjAwIEFN KQotICAyMzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMToxNTowMCBQ TSA9IDIzOjE1OjAwIFBNKQotICAyMzE1MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgwMjozMTo1MCBBTSkKLSAgMjMxNTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoMjM6MTU6MDAgUE0pCi0KLTguMTMuMy4gVGltZSBab25lcwotCi0gICBJZiBhIHRpbWUg aXMgZ2l2ZW4sIGl0IGNhbiAoYnV0IG5lZWQgbm90KSBiZSBmb2xsb3dlZCBieSBhIHRpbWUgem9u ZQotICAgZGVzaWduYXRvci4gSWYgbm8gdGltZSB6b25lIGlzIGluY2x1ZGVkLCB0aGUgdGltZSBp cyB0cmVhdGVkIGFzIGxvY2FsCi0gICB0aW1lIGFuZCBubyB0aW1lem9uZSBjb252ZXJzaW9ucyBh cmUgcGVyZm9ybWVkLgotCi0gICBUaGUgcHJlZmVycmVkIHRpbWUgem9uZSBkZXNpZ25hdG9yIGlz IHRoZSBVVEMgT2Zmc2V0LCBhcyBzcGVjaWZpZWQgaW4KLSAgIFs0ODFdUkZDIDI4MjI6IGEgcGx1 cyBzaWduIG9yIG1pbnVzIHNpZ24gaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkKLSAgIGV4YWN0bHkg Zm91ciBkZWNpbWFsIGRpZ2l0cywgc2lnbmlmeWluZyB0aGUgZGlmZmVyZW5jZSBpbiBoaCAoaG91 cnMpCi0gICBhbmQgbW0gKG1pbnV0ZXMpIGZyb20gVW5pdmVyc2FsIENvb3JkaW5hdGVkIFRpbWUg KFVUQywgYWxzbyBrbm93biBhcwotICAgR3JlZW53aWNoIE1lYW4gVGltZSwgb3IgR01UKSwgd2l0 aCBuZWdhdGl2ZSBudW1iZXJzIHRvIHRoZSBXZXN0IGFuZAotICAgcG9zaXRpdmUgbnVtYmVycyB0 byB0aGUgRWFzdC4gRm9yIGV4YW1wbGU6Ci0KLSAgRnJpLCAxMyBKdWwgMjAwMSAxMjo1NDoyOSAt MDcwMAotCi0gICBpbmRpY2F0ZXMgYSBsb2NhbCB0aW1lIG9mIDEyOjU0OjI5IHRoYXQgaXMgMDcg aG91cnMgYW5kIDAwIG1pbnV0ZXMKLSAgIGJlaGluZCAobGVzcyB0aGFuLCBFYXN0IG9mKSBVbml2 ZXJzYWwgVGltZS4gVGhlIHNwYWNlIGlzIG9wdGlvbmFsLCBzbwotICAgdGhlIGV4YW1wbGUgY291 bGQgYWxzbyBiZSB3cml0dGVuIGFzOgotCi0gIEZyaSwgMTMgSnVsIDIwMDEgMTI6NTQ6MjktMDcw MAotCi0gICBUaGUgZm9sbG93aW5nIHN5bWJvbGljIHRpbWUgem9uZXMgYXJlIGFsc28gYWNjZXB0 ZWQsIGFzIHNwZWNpZmllZCBieQotICAgWzQ4Ml1SRkMgMjgyMiBhbmQvb3IgaW4gSVNPIDg2MDE6 Ci0KLSAgR01UICA9ICArMDAwMCAgICAgICBHcmVlbndpY2ggTWVhbiBUaW1lCi0gIFogICAgPSAg KzAwMDAgICAgICAgWnVsdSAoWmVybyBNZXJpZGlhbikgVGltZQotICBVVEMgID0gICswMDAwICAg ICAgIFVuaXZlcnNhbCBDb29yZGluYXRlZCBUaW1lCi0gIFVUICAgPSAgKzAwMDAgICAgICAgVW5p dmVyc2FsIFRpbWUKLSAgRURUICA9ICAtMDQwMCAgICAgICBFYXN0ZXJuIChVU0EpIERheWxpZ2h0 IFRpbWUKLSAgRVNUICA9ICAtMDUwMCAgICAgICBFYXN0ZXJuIChVU0EpIFN0YW5kYXJkIFRpbWUK LSAgQ0RUICA9ICAtMDUwMCAgICAgICBDZW50cmFsIChVU0EpIERheWxpZ2h0IFRpbWUKLSAgQ1NU ICA9ICAtMDYwMCAgICAgICBDZW50cmFsIChVU0EpIFN0YW5kYXJkIFRpbWUKLSAgTURUICA9ICAt MDYwMCAgICAgICBNb3VudGFpbiAoVVNBKSBEYXlsaWdodCBUaW1lCi0gIE1TVCAgPSAgLTA3MDAg ICAgICAgTW91bnRhaW4gKFVTQSkgU3RhbmRhcmQgVGltZQotICBQRFQgID0gIC0wNzAwICAgICAg IFBhY2lmaWMgKFVTQSkgRGF5bGlnaHQgVGltZQotICBQU1QgID0gIC0wODAwICAgICAgIFBhY2lm aWMgKFVTQSkgU3RhbmRhcmQgVGltZQotCi0gICBOb3RlIHRoYXQgR01ULCBaLCBVVEMsIGFuZCBV VCBhbGwgZXhwcmVzcyB0aGUgc2FtZSBjb25jZXB0OiBzdGFuZGFyZAotICAgKG5vdCBkYXlsaWdo dCkgdGltZSBhdCB0aGUgWmVybyBNZXJpZGlhbi4gVVRDLCBieSB0aGUgd2F5LCBpcyBhbgotICAg aW50ZXJuYXRpb25hbCBzdGFuZGFyZCBzeW1ib2wgYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8g dGhlIG9yZGVyIG9mCi0gICB0aGUgRW5nbGlzaCB3b3JkcywgVW5pdmVyc2FsIENvb3JkaW5hdGVk IFRpbWUsIGJ1dCBpdCBoYXBwZW5zIHRvIGhhdmUKLSAgIHRoZSBzYW1lIGluaXRpYWwgbGV0dGVy cyBhcyB0aGVzZSB3b3Jkcy4gT2YgY291cnNlIGh1bmRyZWRzIG9mIG90aGVyCi0gICBzeW1ib2xp YyB0aW1lem9uZXMgYW5kIHZhcmlhdGlvbnMgZXhpc3QsIGJ1dCB0aGV5IGFyZSBub3Qgc3RhbmRh cmRpemVkLAotICAgYW5kIGFyZSB0aGVyZWZvcmUgbm90IHN1cHBvcnRlZCBieSBLZXJtaXQuCi0K LSAgIFdoZW4gYSB0aW1lIHpvbmUgaXMgaW5jbHVkZWQgd2l0aCBhIHRpbWUsIHRoZSB0aW1lIGlz IGNvbnZlcnRlZCB0bwotICAgbG9jYWwgdGltZS4gSW4gY2FzZSB0aGUgY29udmVyc2lvbiBjcm9z c2VzIGEgbWlkbmlnaHQgYm91bmRhcnksIHRoZQotICAgZGF0ZSBpcyBhZGp1c3RlZCBhY2NvcmRp bmdseS4gRXhhbXBsZXMgY29udmVydGluZyB0byBFU1QgKEVhc3Rlcm4gVVNBCi0gICBTdGFuZGFy ZCBUaW1lID0gLTA1MDApOgotCi0gMTE6MzA6MDAgICAgICA9ICAxMTozMDowMAotIDExOjMwOjAw IEVTVCAgPSAgMTE6MzA6MDAKLSAxMTozMDowMCBHTVQgID0gIDA2OjMwOjAwCi0gMTE6MzA6MDAg UFNUICA9ICAxNDozMDowMAotIDExOjMwOjAwWiAgICAgPSAgMDY6MzA6MDAKLSAxMTozMFBNIEdN VCAgID0gIDE4OjMwOjAwCi0gMTE6MzAgLTA1MDAgICA9ICAxMTozMDowMAotIDExOjMwIC0wODAw ICAgPSAgMDg6MzA6MDAKLSAxMTozMCArMDIwMCAgID0gIDA0OjMwOjAwCi0KLSAgIFVubGlrZSBt b3N0IG9mIEtlcm1pdCdzIG90aGVyIGRhdGUtdGltZSBjb252ZXJzaW9ucywgdGltZXpvbmUga25v d2xlZGdlCi0gICAoc3BlY2lmaWNhbGx5LCB0aGUgb2Zmc2V0IG9mIGxvY2FsIHRpbWUgZnJvbSBV VEMpIGlzIGVtYm9kaWVkIGluIHRoZQotICAgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtLCBu b3QgaW4gS2VybWl0IGl0c2VsZiwgYW5kIGFueSBjb252ZXJzaW9uCi0gICBlcnJvcnMgaW4gdGhp cyBkZXBhcnRtZW50IGFyZSB0aGUgZmF1bHQgb2YgdGhlIE9TLiBGb3IgZXhhbXBsZSwgbW9zdAot ICAgVU5JWCBwbGF0Zm9ybXMgZG8gbm90IHBlcmZvcm0gY29udmVyc2lvbnMgZm9yIHllYXJzIHBy aW9yIHRvIDE5NzAuCi0KLTguMTMuNC4gRGVsdGEgVGltZQotCi0gICBEYXRlL3RpbWUgZXhwcmVz c2lvbnMgY2FuIGJlIGNvbXBvc2VkIG9mIGEgZGF0ZSBhbmQvb3IgdGltZSBhbmQgYSBkZWx0YQot ICAgdGltZSwgb3IgYSBkZWx0YSB0aW1lIGJ5IGl0c2VsZi4gV2hlbiBhIGRlbHRhIHRpbWUgaXMg Z2l2ZW4gYnkgaXRzZWxmLAotICAgaXQgaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgbG9jYWwg ZGF0ZSBhbmQgdGltZS4gRGVsdGEgdGltZXMgaGF2ZSB0aGUKLSAgIGZvbGxvd2luZyBnZW5lcmFs IGZvcm1hdDoKLQotICB7KywtfVtudW1iZXIgdW5pdHNdW2hoWzptbVs6c3NdXV0KLQotICAgSW4g b3RoZXIgd29yZHMsIGEgZGVsdGEgdGltZSBhbHdheXMgc3RhcnRzIHdpdGggYSBwbHVzIG9yIG1p bnVzIHNpZ24sCi0gICB3aGljaCBpcyBmb2xsb3dlZCBieSBhICJwYXJ0MSIsIGEgInBhcnQyIiwg b3IgYm90aC4gVGhlICJwYXJ0MSIsIGlmCi0gICBnaXZlbiwgc3BlY2lmaWVzIGEgbnVtYmVyIG9m IGRheXMsIHdlZWtzLCBtb250aHMsIG9yIHllYXJzOyAicGFydDIiCi0gICBzcGVjaWZpZXMgYSB0 aW1lIGluIGhoOm1tOnNzIG5vdGF0aW9uLiBJbiBhcml0aG1ldGljIHRlcm1zLCB0aGVzZQotICAg cmVwcmVzZW50cyBzb21lIG51bWJlciBvZiBkYXlzIG9yIG90aGVyIGJpZyB0aW1lIHVuaXRzLCBh bmQgdGhlbiBhCi0gICBmcmFjdGlvbiBvZiBhIGRheSBleHByZXNzZWQgYXMgaG91cnMsIG1pbnV0 ZXMsIGFuZCBzZWNvbmRzOyB0aGVzZSBhcmUKLSAgIHRvIGJlIGFkZGVkIHRvIG9yIHN1YnRyYWN0 ZWQgZnJvbSB0aGUgZ2l2ZW4gKG9yIGltcGxpZWQpIGRhdGUgYW5kIHRpbWUuCi0gICBUaGUgc3lu dGF4IGlzIHNvbWV3aGF0IGZsZXhpYmxlLCBhcyBzaG93biBieSB0aGUgZm9sbG93aW5nIGV4YW1w bGVzOgotCi0gICsxIGRheSAgICAgICAgICAgICAgICAoUGx1cyBvbmUgZGF5KQotICArMWRheSAg ICAgICAgICAgICAgICAgKERpdHRvKQotICArMWQgICAgICAgICAgICAgICAgICAgKERpdHRvKQot ICArIDEgZGF5ICAgICAgICAgICAgICAgKERpdHRvKQotICArIDEgZGF5IDM6MDAgICAgICAgICAg KFBsdXMgb25lIGRheSBhbmQgMyBob3VycykKLSAgKzFkMzowMCAgICAgICAgICAgICAgIChEaXR0 bykKLSAgKzFkMyAgICAgICAgICAgICAgICAgIChEaXR0bykKLSAgKzM6MDA6MDAgICAgICAgICAg ICAgIChQbHVzIDMgaG91cnMpCi0gICszOjAwICAgICAgICAgICAgICAgICAoRGl0dG8pCi0gICsz ICAgICAgICAgICAgICAgICAgICAoRGl0dG8pCi0gICsyIGRheXMgICAgICAgICAgICAgICAoUGx1 cyAyIGRheXMpCi0gIC0xMiBkYXlzIDc6MTQ6MjIgICAgICAoTWludXMgMTIgZGF5cywgNyBob3Vy cywgMTQgbWludXRlcywgYW5kIDIyIHNlY29uZHMpCi0KLSAgIFRoZSB3b3JkcyAid2VlayIsICJt b250aCIsIGFuZCAieWVhciIgY2FuIGJlIHVzZWQgbGlrZSAiZGF5IiBpbiB0aGUKLSAgIGV4YW1w bGVzIGFib3ZlLiBBIHdlZWsgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIDcgZGF5cy4gV2hlbiBt b250aHMgYXJlCi0gICBzcGVjaWZpZWQsIHRoZSBudW1lcmljIG1vbnRoIG51bWJlciBvZiB0aGUg ZGF0ZSBpcyBpbmNyZW1lbnRlZCBvcgotICAgZGVjcmVtZW50ZWQgYnkgdGhlIGdpdmVuIG51bWJl ciwgYW5kIHRoZSB5ZWFyIGFuZCBkYXkgYWRqdXN0ZWQKLSAgIGFjY29yZGluZ2x5IGlmIG5lY2Vz c2FyeSAoZm9yIGV4YW1wbGUsIDMxLUphbi0yMDAxICsxbW9udGggPQotICAgMDMtTWFyLTIwMDEg YmVjYXVzZSBGZWJydWFyeSBkb2VzIG5vdCBoYXZlIDMxIGRheXMpLiBXaGVuIHllYXJzIGFyZQot ICAgc3BlY2lmaWVkLCB0aGV5IGFyZSBhZGRlZCBvciBzdWJ0cmFjdGVkIHRvIHRoZSBiYXNlIHll YXIuIEV4YW1wbGVzCi0gICAoYXNzdW1pbmcgdGhlIGN1cnJlbnQgZGF0ZSBpcyAxMC1BdWctMjAw MSBhbmQgdGhlIGN1cnJlbnQgdGltZSBpcwotICAgMTk6MjE6MTEpOgotCi0gIDE4LVNlcC0yMDAx ICsxZGF5ICAgICAgICAgICAgICAoMjAwMTA5MTggMDA6MDA6MDApCi0gIHRvZGF5ICsxZGF5ICAg ICAgICAgICAgICAgICAgICAoMjAwMTA4MTEgMDA6MDA6MDApCi0gIG5vdysxZCAgICAgICAgICAg ICAgICAgICAgICAgICAoMjAwMTA4MTEgMTk6MjE6MTEpCi0gICsgMSBkYXkgICAgICAgICAgICAg ICAgICAgICAgICAoMjAwMTA4MTEgMTk6MjE6MTEpCi0gICsgMSBkYXkgMzoxNDo0MiAgICAgICAg ICAgICAgICAoMjAwMTA4MTEgMjI6MzU6NTQpCi0gICsgNyB3ZWVrcyAgICAgICAgICAgICAgICAg ICAgICAoMjAwMTA5MjggMTk6MjE6MTEpCi0gICsxZDM6MTQ6NDIgICAgICAgICAgICAgICAgICAg ICAoMjAwMTA4MTEgMjI6MzU6NTQpCi0gICsxdzM6MTQ6NDIgICAgICAgICAgICAgICAgICAgICAo MjAwMTA4MTcgMjI6MzU6NTQpCi0gICsxbTM6MTQ6NDIgICAgICAgICAgICAgICAgICAgICAoMjAw MTA5MTAgMjI6MzU6NTQpCi0gICsxeTM6MTQ6NDIgICAgICAgICAgICAgICAgICAgICAoMjAwMjA4 MTAgMjI6MzU6NTQpCi0gIDIgZmViIDIwMDEgKyAxMCB5ZWFycyAgICAgICAgICAoMjAxMTAyMDgg MDA6MDA6MDApCi0gIDIwMDEtMDItMDggKzEweTEyICAgICAgICAgICAgICAoMjAxMTAyMDggMTI6 MDA6MDApCi0gIDMxLWRlYy0xOTk5IDIzOjU5OjU5KzAwOjAwOjAxICAoMjAwMDAxMDEgMDA6MDA6 MDApCi0gIDI4LWZlYi0xOTk2ICsxZGF5ICAgICAgICAgICAgICAoMTk5NjAyMjkgMDA6MDA6MDAp IChsZWFwIHllYXIpCi0gIDI4LWZlYi0xOTk3ICsxZGF5ICAgICAgICAgICAgICAoMTk5NzAzMDEg MDA6MDA6MDApIChub25sZWFwIHllYXIpCi0gIDI4LWZlYi0xOTk3ICsxbW9udGggICAgICAgICAg ICAoMTk5NzAzMjggMDA6MDA6MDApCi0gIDI4LWZlYi0xOTk3ICsxbW9udGggMTE6NTk6NTkgICAo MTk5NzAzMjggMTE6NTk6NTkpCi0gIDI4LWZlYi0xOTk3ICsyMHllYXJzICAgICAgICAgICAoMjAx NzAyMjggMDA6MDA6MDApCi0gIDI4LWZlYi0xOTk3ICs4MDAweWVhcnMgICAgICAgICAoOTk5NzAy MjggMDA6MDA6MDApCi0KLSAgIEZvciBjb21wYXRpYmlsaXR5IHdpdGggVk1TLCB0aGUgZm9sbG93 aW5nIHNwZWNpYWwgZGVsdGEtdGltZSBmb3JtYXQgaXMKLSAgIGFsc28gYWNjZXB0ZWQ6Ci0KLSAg K251bWJlci1oaDptbTpzcwotICAtbnVtYmVyLWhoOm1tOnNzCi0KLSAgIChubyBzcGFjZXMpLiBU aGUgaHlwaGVuIGFmdGVyIHRoZSBudW1iZXIgaW5kaWNhdGVzIGRheXMuIEl0IGNvcnJlc3BvbmRz Ci0gICBleGFjdGx5IHRvIHRoZSBLZXJtaXQgbm90YXRpb246Ci0KLSAgK251bWJlcmRoaDptbTpz cwotICAtbnVtYmVyZGhoOm1tOnNzCi0KLSAgIFRoZSBmb2xsb3dpbmcgZm9ybXMgYWxsIGluZGlj YXRlIGV4YWN0bHkgdGhlIHNhbWUgZGF0ZSBhbmQgdGltZToKLQotICAxOC1TZXAtMjAwMSAxMjoz NDo1NiArMS0zOjIzOjAxCi0gIDE4LVNlcC0yMDAxIDEyOjM0OjU2ICsxZDM6MjM6MDEKLSAgMTgt U2VwLTIwMDEgMTI6MzQ6NTYgKzEgZGF5IDM6MjM6MDEKLQotICAgYW5kIG1lYW4gImFkZCBhIGRh eSBwbHVzIDMgaG91cnMsIDIzIG1pbnV0ZXMsIGFuZCAxIHNlY29uZCIgdG8gdGhlCi0gICBnaXZl biBkYXRlLgotCi0gICBOb3RlIHRoYXQgZGVsdGEgdGltZXMgYXJlIG5vdCBhdCBhbGwgdGhlIHNh bWUgYXMgVVRDIG9mZnNldHM7IHRoZQotICAgZm9ybWVyIHNwZWNpZmllcyBhbiBhZGp1c3RtZW50 IHRvIHRoZSBnaXZlbiBkYXRlL3RpbWUgYW5kIHRoZSBsYXR0ZXIKLSAgIHNwZWNpZmllcyB0aGF0 IHRoZSBsb2NhbCB0aW1lIGlzIGEgcGFydGljdWxhciBkaXN0YW5jZSBmcm9tIFVuaXZlcnNhbAot ICAgVGltZSwgZm9yIGV4YW1wbGU6Ci0KLSAgMTEtQXVnLTIwMDEgMTI6MzQ6NTYgLTA4MDAgICAg ICAgICAgKDIwMDEwODExIDE2OjM0OjU2IC0tIFVUQyBPZmZzZXQpCi0gIDExLUF1Zy0yMDAxIDEy OjM0OjU2IC0wODowMCAgICAgICAgICgyMDAxMDgxMSAwNDozNDo1NiAtLSBEZWx0YSB0aW1lKQot Ci0gICBJZiB5b3UgZ2l2ZSBhIHRpbWUgZm9sbG93ZWQgYnkgYSBtb2RpZmllciB0aGF0IHN0YXJ0 cyB3aXRoIGEgKyBvciAtCi0gICBzaWduLCBob3cgZG9lcyBLZXJtaXQga25vdyB3aGV0aGVyIGl0 J3MgYSBVVEMgb2Zmc2V0IG9yIGEgZGVsdGEgdGltZT8KLSAgIEl0IGlzIHRyZWF0ZWQgYXMgYSBV VEMgb2Zmc2V0IGlmIHRoZSBzaWduIGlzIGZvbGxvd2VkIGJ5IGV4YWN0bHkgZm91cgotICAgZGVj aW1hbCBkaWdpdHM7IG90aGVyd2lzZSBpdCBpcyBhIGRlbHRhIHRpbWUuIEV4YW1wbGVzIChmb3Ig VVNBIEVhc3Rlcm4KLSAgIERheWxpZ2h0IFRpbWUpOgotCi0gIDExLUF1Zy0yMDAxIDEyOjM0OjU2 IC0wODAwICAgICAgICAgICgyMDAxMDgxMSAxNjozNDo1NiAtLSBVVEMgT2Zmc2V0KQotICAxMS1B dWctMjAwMSAxMjozNDo1NiAtMDg6MDAgICAgICAgICAoMjAwMTA4MTEgMDQ6MzQ6NTYgLS0gRGVs dGEgdGltZSkKLSAgMTEtQXVnLTIwMDEgMTI6MzQ6NTYgLTgwMCAgICAgICAgICAgKDIwMDEwODEx IDA0OjM0OjU2IC0tIERlbHRhIHRpbWUpCi0gIDExLUF1Zy0yMDAxIDEyOjM0OjU2IC04ICAgICAg ICAgICAgICgyMDAxMDgxMSAwNDozNDo1NiAtLSBEZWx0YSB0aW1lKQotCi0gICBUaGUgZmlyc3Qg ZXhhbXBsZSBzYXlzIHRoYXQgYXQgc29tZSB1bmtub3duIHBsYWNlIHdoaWNoIGlzIDggaG91cnMK LSAgIGFoZWFkIG9mIFVuaXZlcnNhbCBUaW1lLCB0aGUgdGltZSBpcyAxMjozNDo1NiwgYW5kIHRo aXMgY29ycmVzcG9uZHMgdG8KLSAgIDE2OjM0OjU2IGluIEVhc3Rlcm4gRGF5bGlnaHQgdGltZS4g VGhlIHNlY29uZCBleGFtcGxlIHNheXMgdG8gc3VidHJhY3QKLSAgIDggaG91cnMgZnJvbSB0aGUg bG9jYWwgdGltZS4gVGhlIHRoaXJkIGFuZCBmb3VydGggYXJlIGRlbHRhIHRpbWVzCi0gICBiZWNh dXNlLCBldmVuIHRob3VnaCBhIGNvbG9uIGlzIG5vdCBpbmNsdWRlZCwgdGhlIHRpbWUgZG9lcyBu b3QgY29uc2lzdAotICAgb2YgZXhhY3RseSA0IGRpZ2l0cy4KLQotICAgV2hlbiBhIGRlbHRhIHRp bWUgaXMgd3JpdHRlbiBhZnRlciBhIHRpbWV6b25lLCBob3dldmVyLCB0aGVyZSBpcyBubwotICAg YW1iaWd1aXR5IGFuZCBubyBzeW50YXggZGlzdGluY3Rpb24gaXMgcmVxdWlyZWQ6Ci0KLSAgMTEt QXVnLTIwMDEgMTI6MzQ6NTYgLTA4MDAgLTA4MDAgICAgKDIwMDEwODExIDA4OjM0OjU2KQotICAx MS1BdWctMjAwMSAxMjozNDo1NiAtMDgwMCAtMDg6MDAgICAoRGl0dG8pCi0gIDExLUF1Zy0yMDAx IDEyOjM0OjU2IC0wODowMCAtMDg6MDAgIChJbGxlZ2FsKQotCi04LjEzLjUuIFRoZSBEQVRFIENv bW1hbmQKLQotICAgT2J2aW91c2x5IGEgZ3JlYXQgbWFueSBjb21iaW5hdGlvbnMgb2YgZGF0ZSwg dGltZSwgdGltZSB6b25lLCBhbmQgZGVsdGEKLSAgIHRpbWUgYXJlIHBvc3NpYmxlLCBhcyB3ZWxs IGFzIG1hbnkgZm9ybWF0dGluZyBvcHRpb25zLiBUaGUgcHVycG9zZSBvZgotICAgYWxsIHRoaXMg ZmxleGliaWxpdHkgaXMgdG8gY29tcGx5IHdpdGggYXMgbWFueSBzdGFuZGFyZHMgYXMgcG9zc2li bGUgLS0KLSAgIEludGVybmV0IFJGQ3MsIElTTyBzdGFuZGFyZHMsIGFuZCBwcm92ZW4gY29ycG9y YXRlIHN0YW5kYXJkcyAtLSBhcyB3ZWxsCi0gICBhcyB3aXRoIG5vdGF0aW9ucyBjb21tb25seSB1 c2VkIGJ5IHJlYWwgcGVvcGxlLCBpbiBvcmRlciB0aGF0IGRhdGVzIGFuZAotICAgdGltZXMgZnJv bSB0aGUgd2lkZXN0IHZhcmlldHkgb2Ygc291cmNlcyBjYW4gYmUgYXNzaWduZWQgdG8gYSB2YXJp YWJsZQotICAgYW5kIHVzZWQgaW4gYW55IGRhdGUtdGltZSBmaWVsZCBpbiBhbnkgS2VybWl0IGNv bW1hbmQuCi0KLSAgIFlvdSBjYW4gdGVzdCBhbnkgZGF0ZS1hbmQvb3ItdGltZSBmb3JtYXQgd2l0 aCB0aGUgREFURSBjb21tYW5kLCB3aGljaAotICAgY29udmVydHMgaXQgdG8gc3RhbmRhcmQgeXl5 eW1tZGQgaGg6bW06c3MgZm9ybWF0IGlmIGl0IGlzIHVuZGVyc3Rvb2QsCi0gICBvciBlbHNlIGdp dmVzIGFuIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2UgKHJhdGhlciB0aGFuIGp1c3QgIkJBRCBEQVRF IiBhcwotICAgaW4gcHJldmlvdXMgQy1LZXJtaXQgcmVsZWFzZXMpIHRvIGluZGljYXRlIHdoYXQg aXMgd3Jvbmcgd2l0aCBpdC4KLSAgIEV4YW1wbGVzIChvbiBUdWVzZGF5LCAzMSBKdWx5IDIwMDEg aW4gTmV3IFlvcmsgQ2l0eSwgRWFzdGVybiBEYXlsaWdodAotICAgVGltZSwgVVRDIC0wNDAwKToK LQotICBEQVRFIGNvbW1hbmQgYXJndW1lbnQgICAgICAgICAgICAgICAgICAgUmVzdWx0Ci0gIDEy OjMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDczMSAxMjozMDowMAot ICAxMjozMDowMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MzEgMTI6MzA6 MDEKLSAgMTI6MzA6MDEuNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzMxIDEy OjMwOjAyCi0gIDEyMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDcz MSAxMjozMDowMAotICAyMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAw MTA3MzEgMDI6MzA6MDAKLSAgMjMwKzFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDIwMDEwODAxIDAyOjMwOjAwCi0gIDIzMCsxZDM6MDAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAyMDAxMDgwMSAwNTozMDowMAotICAyMDAxMDcxOCAxOToyMToxNSAgICAgICAgICAgICAg ICAgICAgICAgMjAwMTA3MTggMTk6MjE6MTUKLSAgMjAwMTA3MThfMTkyMTE1ICAgICAgICAgICAg ICAgICAgICAgICAgIDIwMDEwNzE4IDE5OjIxOjE1Ci0gIDIwMDEwNzE4VDE5MjExNSAgICAgICAg ICAgICAgICAgICAgICAgICAyMDAxMDcxOCAxOToyMToxNQotICAxOCBKdWwgMjAwMSArMDQwMCAg ICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MTcgMjM6NTk6NTkKLSAgMTggSnVsIDIwMDEgMTky MTE1ICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzE4IDE5OjIxOjE1Ci0gIDE4IEp1bCAyMDAx IDE5MjExNS44ICAgICAgICAgICAgICAgICAgICAyMDAxMDcxOCAxOToyMToxNgotICAxOC1KdWwt MjAwMVQxOTIxICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MTggMTk6MjE6MDAKLSAgMTgt SnVsLTIwMDEgMTkyMVogICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzE4IDE1OjIxOjAwCi0g IDE4LUp1bC0yMDAxIDE5MjEgR01UICAgICAgICAgICAgICAgICAgICAyMDAxMDcxOCAxNToyMTow MAotICAxOC1KdWwtMjAwMSAxOTIxIFVUQyAgICAgICAgICAgICAgICAgICAgMjAwMTA3MTggMTU6 MjE6MDAKLSAgMTgtSnVsLTIwMDEgMTkyMSBaICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzE4 IDE1OjIxOjAwCi0gIDE4LUp1bC0yMDAxIDE5MjFaICAgICAgICAgICAgICAgICAgICAgICAyMDAx MDcxOCAxNToyMTowMAotICAxOC1KdWwtMjAwMSAxOTIxIC0wNDowMDowMCAgICAgICAgICAgICAg MjAwMTA3MTggMTk6MjE6MDAKLSAgMjEtSnVsLTIwMDFfMDg6MjA6MDBhbSAgICAgICAgICAgICAg ICAgIDIwMDEwNzIxIDA4OjIwOjAwCi0gIDIxLUp1bC0yMDAxXzg6MjA6MDBQLk0uICAgICAgICAg ICAgICAgICAyMDAxMDcyMSAyMDoyMDowMAotICBGcmkgSnVsIDIwIDExOjI2OjI1IDIwMDEgICAg ICAgICAgICAgICAgMjAwMTA3MjAgMTE6MjY6MjUKLSAgRnJpIEp1bCAyMCAxMToyNjoyNSBHTVQg MjAwMSAgICAgICAgICAgIDIwMDEwNzIwIDA3OjI2OjI1Ci0gIFN1biwgOSBBcHIgMjAwMCAwNjo0 Njo0NiArMDEwMCAgICAgICAgICAyMDAwMDQwOSAwMTo0Njo0NgotICBTdW5kYXksIDkgQXByIDIw MDAgMDY6NDY6NDYgKzAxMDAgICAgICAgMjAwMDA0MDkgMDE6NDY6NDYKLSAgbm93ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzMxIDE5OjQxOjEyCi0gIHRvZGF5ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDczMSAwMDowMDowMAotICB0b2Rh eSAwOTowMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MzEgMDk6MDA6MDAKLSAg dG9tb3Jyb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwODAxIDAwOjAwOjAw Ci0gIHRvbW9ycm93IDA5OjAwICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgwMSAwOTow MDowMAotICB0b21vcnJvdyAwOTowMCBHTVQgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4MDEg MDU6MDA6MDAKLSAgeWVzdGVyZGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEw NzMwIDAwOjAwOjAwCi0gIHllc3RlcmRheSAwOTowMCAgICAgICAgICAgICAgICAgICAgICAgICAy MDAxMDczMCAwOTowMDowMAotICArIDMgZGF5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMjAwMTA4MDMgMDA6MDA6MDAKLSAgKzMgZGF5cyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDIwMDEwODAzIDAwOjAwOjAwCi0gICszZGF5cyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAyMDAxMDgwMyAwMDowMDowMAotICArIDNkYXlzICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMjAwMTA4MDMgMDA6MDA6MDAKLSAgKyAzIGRheXMgMDk6MDAgICAgICAg ICAgICAgICAgICAgICAgICAgIDIwMDEwODAzIDA5OjAwOjAwCi0gICsgMiB3ZWVrcyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgxNCAwMDowMDowMAotICArIDEgbW9udGggICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4MzEgMDA6MDA6MDAKLSAgLSA3IG1vbnRo cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDAxMjMxIDAwOjAwOjAwCi0gICsgMTAg eWVhcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDExMDczMSAwMDowMDowMAotICBm cmlkYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4MDMgMDA6MDA6MDAK LSAgc2F0dXJkYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwODA0IDAwOjAw OjAwCi0gIHN1bmRheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgwNSAw MDowMDowMAotICBtb25kYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4 MDYgMDA6MDA6MDAKLSAgdHVlc2RheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIw MDEwNzMxIDAwOjAwOjAwCi0gIHdlZG5lc2RheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAyMDAxMDgwMSAwMDowMDowMAotICB0aHVyc2RheSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMjAwMTA4MDIgMDA6MDA6MDAKLSAgZnJpZGF5IDA3OjAwICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDIwMDEwODAzIDA3OjAwOjAwCi0gIHRodXJzZGF5IDE6MDBwbSAgICAgICAgICAg ICAgICAgICAgICAgICAyMDAxMDgwMiAxMzowMDowMAotICB0aHVyc2RheSAxOjAwcG0gR01UICAg ICAgICAgICAgICAgICAgICAgMjAwMTA4MDIgMDk6MDA6MDAKLSAgVGh1LCAxMCBOb3YgOTQgMTA6 NTA6NDcgRVNUICAgICAgICAgICAgIDE5OTQxMTEwIDEwOjUwOjQ3Ci0gIEZyaSwgMjAgT2N0IDE5 OTUgMTg6MzU6MTUgLTA0MDAgKEVEVCkgICAxOTk1MTAyMCAxODozNToxNQotICAzMS8xMi8yMDAx ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTEyMzEgMDA6MDA6MDAKLSAgMTIvMzEv MjAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDExMjMxIDAwOjAwOjAwCi0gIDIw MDEtSnVseS0yMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDcyMCAwMDowMDowMAot ICAyMDAxLVNlcHRlbWJlci0zMCAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA5MzAgMDA6MDA6 MDAKLSAgMzAtU2VwdGVtYmVyLTIwMDEgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwOTMwIDAw OjAwOjAwCi0gIFNlcCAzMCwgMjAwMSAxMjozNDo1NiAgICAgICAgICAgICAgICAgICAyMDAxMDkz MCAxMjozNDo1NgotICBTZXB0ZW1iZXIgMzAsIDIwMDEgICAgICAgICAgICAgICAgICAgICAgMjAw MTA5MzAgMDA6MDA6MDAKLSAgU2VwdGVtYmVyIDMwLCAyMDAxIDYzMCAgICAgICAgICAgICAgICAg IDIwMDEwOTMwIDA2OjMwOjAwCi0gIFNlcHRlbWJlciAzMCAyMDAxIDYzMCAgICAgICAgICAgICAg ICAgICAyMDAxMDkzMCAwNjozMDowMAotICBTZXAtMzAtMjAwMSAxMjozNDo1OSAgICAgICAgICAg ICAgICAgICAgMjAwMTA5MzAgMTI6MzQ6NTkKLSAgMjAwMTA4MDcxMTM1NDIuMDE0ICAgICAgICAg ICAgICAgICAgICAgIDIwMDEwODA3IDExOjM1LjQyCi0gIDIwMDEwODA3MTEzNTQyLjAxNFogICAg ICAgICAgICAgICAgICAgICAyMDAxMDgwNyAwNzozNTo0MgotCi04LjEzLjYuIE5ldyBEYXRlLVRp bWUgRnVuY3Rpb25zCi0KLSAgIEluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb25zLCBkYXRlLXRp bWUgZnVuY3Rpb24gYXJndW1lbnRzIGFyZSB0aGUKLSAgIHNhbWUgZnJlZS1mb3JtYXQgZGF0ZS10 aW1lIHN0cmluZ3MgZGlzY3Vzc2VkIGFib3ZlLCB3aXRoIHRoZSBzYW1lCi0gICBkZWZhdWx0cyBm b3IgbWlzc2luZyBmaWVsZHMuIFRoZXkgYXJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvCi0g ICBzdGFuZGFyZCBmb3JtYXQgaW50ZXJuYWxseSBwcmlvciB0byBwcm9jZXNzaW5nLgotCi0gICBc ZmN2dGRhdGUoZDEpCi0gICAgICAgICAgQ29udmVydHMgdGhlIGRhdGUtdGltZSBkMSB0byBzdGFu ZGFyZCBmb3JtYXQgYW5kIGxvY2FsIHRpbWUuCi0gICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBu b3QgbmV3LCBidXQgbm93IGl0IGFjY2VwdHMgYSB3aWRlciByYW5nZSBvZgotICAgICAgICAgIGFy Z3VtZW50IGZvcm1hdHMgdGhhdCBjYW4gaW5jbHVkZSB0aW1lem9uZXMgYW5kL29yIGRlbHRhIHRp bWVzLgotICAgICAgICAgIElmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBvbWl0dGVkLCB0aGUgY3Vy cmVudCBkYXRlIGFuZCB0aW1lIGFyZQotICAgICAgICAgIGFzc3VtZWQuIFRoZSBvcHRpb25hbCBz ZWNvbmQgYXJndW1lbnQgaXMgYSBmb3JtYXQgY29kZSBmb3IgdGhlCi0gICAgICAgICAgcmVzdWx0 OgotCi0gICAgIG4xID0gMTogeXl5eS1tbW0tZGQgaGg6bW06c3MgKG1tbSA9IEVuZ2xpc2ggMy1s ZXR0ZXIgbW9udGgKLSAgICAgYWJicmV2aWF0aW9uKQotICAgICBuMSA9IDI6IGRkLW1tbS15eXl5 IGhoOm1tOnNzIChkaXR0bykKLSAgICAgbjEgPSAzOiB5eXl5bW1kZGhobW1zcyAoYWxsIG51bWVy aWMpCi0KLSAgIFxmdXRjZGF0ZShkMSkKLSAgICAgICAgICBDb252ZXJ0cyB0aGUgZGF0ZS10aW1l IGQxIHRvIFVuaXZlcnNhbCBDb29yZGluYXRlZCBUaW1lIChVVEMpLAotICAgICAgICAgIGFsc28g a25vd24gYXMgR01UIG9yIFp1bHUgb3IgWmVyby1NZXJpZGlhbiB0aW1lLiBUaGUgZGVmYXVsdCBk MQotICAgICAgICAgIGlzIE5PVy4gSWYgZDEgaXMgYSB2YWxpZCBkYXRlLXRpbWUsIHRoZSBVVEMg cmVzdWx0IGlzIHJldHVybmVkCi0gICAgICAgICAgaW4gc3RhbmRhcmQgZm9ybWF0LCB5eXl5bW1k ZCBoaDpzczptbS4KLQotICAgXGZjbXBkYXRlcyhkMSxkMikKLSAgICAgICAgICBDb21wYXJlcyB0 d28gZnJlZS1mb3JtYXQgZGF0ZS10aW1lcywgZDEgYW5kIGQyLCBhbmQsIGlmIGJvdGgKLSAgICAg ICAgICBhcmd1bWVudHMgYXJlIHZhbGlkLCByZXR1cm5zIGEgbnVtYmVyOiAtMSBpZiBkMSBpcyBl YXJsaWVyIHRoYW4KLSAgICAgICAgICAoYmVmb3JlKSBkMjsgMCBpZiBkMSBpcyB0aGUgc2FtZSBh cyBkMjsgMSBpZiBkMSBpcyBsYXRlciB0aGFuCi0gICAgICAgICAgKGFmdGVyKSBkMi4KLQotICAg XGZkaWZmZGF0ZXMoZDEsZDIpCi0gICAgICAgICAgQ29tcHV0ZXMgdGhlIGRpZmZlcmVuY2UgYmV0 d2VlbiB0d28gZnJlZS1mb3JtYXQgZGF0ZS10aW1lcywgZDEKLSAgICAgICAgICBhbmQgZDIuIElm IGJvdGggYXJndW1lbnRzIGFyZSB2YWxpZCwgcmV0dXJucyBhIGRlbHRhIHRpbWUgd2hpY2gKLSAg ICAgICAgICBpcyBuZWdhdGl2ZSBpZiBkMSBpcyBlYXJsaWVyIHRoYW4gKGJlZm9yZSkgZDIgYW5k IHBvc2l0aXZlCi0gICAgICAgICAgb3RoZXJ3aXNlLiBJZiBkMSBhbmQgZDIgYXJlIGVxdWFsLCB0 aGUgcmVzdWx0IGlzICIrMDowMCIuCi0gICAgICAgICAgT3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGNv bnNpc3RzIG9mIHRoZSBudW1iZXIgb2YgZGF5cywgaG91cnMsCi0gICAgICAgICAgbWludXRlcywg YW5kIHNlY29uZHMgdGhhdCBzZXBhcmF0ZSB0aGUgdHdvIGRhdGUtdGltZXMuIElmIHRoZQotICAg ICAgICAgIG51bWJlciBvZiBkYXlzIGlzIHplcm8sIGl0IGlzIG9taXR0ZWQuIElmIHRoZSBudW1i ZXIgb2YgZGF5cyBpcwotICAgICAgICAgIG5vbnplcm8gYnV0IHRoZSBob3VycywgbWludXRlcywg YW5kIHNlY29uZHMgYXJlIGFsbCB6ZXJvLCB0aGUKLSAgICAgICAgICB0aW1lIGlzIG9taXR0ZWQu IGlmIHRoZSBzZWNvbmRzIGFyZSB6ZXJvLCB0aGV5IGFyZSBvbWl0dGVkLgotCi0gICBcZmRlbHRh MnNlY3MoZHQpCi0gICAgICAgICAgQ29udmVydHMgYSBkZWx0YSB0aW1lIHRvIHNlY29uZHMuIEZv ciBleGFtcGxlLCAiKzFkMDA6MDA6MDEiIHRvCi0gICAgICAgICAgODY0MDEuIFZhbGlkIGRlbHRh IHRpbWVzIG11c3Qgc3RhcnQgd2l0aCBhICsgb3IgLSBzaWduLiBEYXlzIGFyZQotICAgICAgICAg IGFjY2VwdGVkIGFzIHRpbWUgdW5pdHMsIGJ1dCBub3QgeWVhcnMsIG1vbnRocywgb3Igd2Vla3Mu IElmIHRoZQotICAgICAgICAgIHJlc3VsdCB3b3VsZCBvdmVyZmxvdyBhIGNvbXB1dGVyIGxvbmcg d29yZCAoYXMgd291bGQgaGFwcGVuIHdpdGgKLSAgICAgICAgICAzMi1iaXQgbG9uZyB3b3JkcyB3 aGVuIHRoZSBudW1iZXIgb2YgZGF5cyBpcyBncmVhdGVyIHRoYW4KLSAgICAgICAgICAyNDg1NCks IHRoZSBmdW5jdGlvbiBmYWlscy4KLQotICAgSElOVDogQWx0aG91Z2ggS2VybWl0IGhhcyBhIG51 bWJlciBvZiBidWlsdC1pbiBkYXRlIGFuZCB0aW1lIHZhcmlhYmxlcywKLSAgIGl0IGRvZXNuJ3Qg aGF2ZSBhIHNpbmdsZSBvbmUgc3VpdGFibGUgZm9yIHdyaXRpbmcgYSB0aW1lc3RhbXAuIEZvciB0 aGlzCi0gICB5b3Ugd291bGQgbm9ybWFsbHkgdXNlIHNvbWV0aGluZyBsaWtlICJcdihuZGF0ZSkg XHYodGltZSkiLiBCdXQKLSAgIFxmY3Z0ZGF0ZSgpICh3aXRoIG5vIGFyZ3VtZW50cykgaXMgZXF1 aXZhbGVudDogaXQgcmV0dXJucyB0aGUgY3VycmVudAotICAgZGF0ZSBhbmQgdGltZSBpbiB5eXl5 bW1kZCBoaDptbTpzcyBmb3JtYXQsIHN1aXRhYmxlIGZvciB0aW1lIHN0YW1waW5nLgotCi04LjEz LjcuIERhdGUtVGltZSBQcm9ncmFtbWluZyBFeGFtcGxlcwotCi0gICBIZXJlJ3MgYSBtYWNybyB0 aGF0IGNvbnZlcnRzIGFueSBkYXRlLXRpbWUgdG8gVVRDLCB3aGljaCB5b3UgbWlnaHQgdXNlCi0g ICBpZiBDLUtlcm1pdCBkaWRuJ3QgYWxyZWFkeSBoYXZlIGEgXGZ1dGNkYXRlKCkgZnVuY3Rpb246 Ci0KLSAgZGVmaW5lIHV0Y2RhdGUgewotICAgICAgLmxvY2FsIDo9IFxmY3Z0ZGF0ZShcJSopICAg ICAgICAgICAgICAgICA7IDEuCi0gICAgICAudG1wIDo9IFxmY3Z0ZGF0ZShcbShsb2NhbClVVEMp ICAgICAgICAgIDsgMi4KLSAgICAgIC5vZmZzZXQgOj0gXGZkaWZmZGF0ZShcbShsb2NhbCksXG0o dG1wKSkgOyAzLgotICAgICAgLnV0YyA6PSBcZmN2dGRhdGUoXG0obG9jYWwpXG0ob2Zmc2V0KSkg ICA7IDQuCi0gICAgICBzaG8gbWFjIHV0YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsg NS4KLSAgfQotCi0gICBCcmllZiBleHBsYW5hdGlvbjogTGluZSAxIGNvbnZlcnRzIHRoZSBtYWNy byBhcmd1bWVudCwgYSBmcmVlLWZvcm1hdAotICAgZGF0ZS10aW1lLCB0byBzdGFuZGFyZC1mb3Jt YXQgbG9jYWwgdGltZS4gTGluZSAyIGFwcGVuZHMgdGhlICJVVEMiCi0gICB0aW1lem9uZSB0byB0 aGUgbG9jYWwgdGltZSBhbmQgY29udmVydHMgdGhlIHJlc3VsdCB0byBsb2NhbCB0aW1lLiBJbgot ICAgb3RoZXIgd29yZHMsIHdlIHRha2UgdGhlIHNhbWUgdGltZSBhcyB0aGUgbG9jYWwgdGltZSwg YnV0IHByZXRlbmQgaXQncwotICAgVVRDIHRpbWUsIGFuZCBjb252ZXJ0IGl0IHRvIGxvY2FsIHRp bWUuIEZvciBleGFtcGxlLCBpZiBOZXcgWW9yayB0aW1lCi0gICBpcyA0IGhvdXJzIGFoZWFkIG9m IFVUQywgdGhlbiA2OjAwcG0gTmV3IFlvcmsgdGltZSBpcyAyOjAwcG0gVVRDLiBMaW5lCi0gICAz IGdldHMgdGhlIGRpZmZlcmVuY2Ugb2YgdGhlIHR3byByZXN1bHRzIChlLmcuICIrMDQ6MDAiKS4g TGluZSA0Ci0gICBhcHBlbmRzIHRoZSBkaWZmZXJlbmNlIChkZWx0YSB0aW1lKSB0byB0aGUgbG9j YWwgdGltZSwgYW5kIGNvbnZlcnRzIGl0Ci0gICBhZ2Fpbiwgd2hpY2ggYWRkcyAob3Igc3VidHJh Y3RzKSB0aGUgVVRDIG9mZnNldCB0byB0aGUgZ2l2ZW4gdGltZS4gTGluZQotICAgNSBkaXNwbGF5 cyB0aGUgcmVzdWx0LgotCi0gICBIZXJlJ3MgYSBzY3JpcHQgdGhhdCBvcGVucyBhIHdlYiBwYWdl LCBnZXRzIGl0cyBoZWFkZXJzIGludG8gYW4gYXJyYXksCi0gICBzY2FucyB0aGUgYXJyYXkgZm9y IHRoZSAiTGFzdC1Nb2RpZmllZDoiIGhlYWRlciwgYW5kIGludGVycHJldHMgaXQ6Ci0gIGh0dHAg b3BlbiB3d3cuY29sdW1iaWEuZWR1Ci0gIGlmIGZhaWwgc3RvcCAxIEhUVFAgT1BFTiBmYWlsZWQK LSAgaHR0cCAvYXJyYXk6YSBoZWFkIGluZGV4Lmh0bWwgL2Rldi9udWxsCi0gIGlmIGZhaWwgc3Rv cCAxIEhUVFAgR0VUIGZhaWxlZAotICBzaG93IGFycmF5IGEKLSAgZm9yIFwlaSAxIFxmZGltKCZh KSAxIHsKLSAgICAgIC5cJXggOj0gXGZpbmRleCg6LFwmYVtcJWldKQotICAgICAgaWYgbm90IFwl eCBjb250aW51ZQotICAgICAgLnRhZyA6PSBcZmxlZnQoXCZhW1wlaV0sXCV4LTEpCi0gICAgICAu dmFsIDo9IFxmbHRyaW0oXGZzdWJzdHIoXCZhW1wlaV0sXCV4KzEpKQotICAgICAgaWYgKCBlcSAi XG0odGFnKSIgIkxhc3QtTW9kaWZpZWQiICkgewotICAgICAgICAgIGVjaG8gSFRUUCBEYXRlOiBc bSh2YWwpCi0gICAgICAgICAgLnJkYXRlIDo9IFxmY3Z0ZGF0ZShcbSh2YWwpKQotICAgICAgICAg IGVjaG8ge1N0YW5kYXJkIERhdGUgKGxvY2FsKTogXG0ocmRhdGUpfQotICAgICAgICAgIGVjaG8g e1N0YW5kYXJkIERhdGUgKFVUQyk6ICAgXGZ1dGNkYXRlKFxtKHJkYXRlKSl9Ci0gICAgICAgICAg YnJlYWsKLSAgICAgIH0KLSAgfQotICBodHRwIGNsb3NlCi0KLSAgIFRoZSByZXN1bHQ6Ci0KLSAg SFRUUCBEYXRlOiBNb24sIDEzIEF1ZyAyMDAxIDIwOjA1OjQyIEdNVAotICBTdGFuZGFyZCBEYXRl IChsb2NhbCk6IDIwMDEwODEzIDE2OjA1OjQyCi0gIFN0YW5kYXJkIERhdGUgKFVUQyk6ICAgMjAw MTA4MTMgMjA6MDU6NDIKLQotICAgQXMgeW91IGNhbiBzZWUsIEtlcm1pdCBoYWQgbm8gdHJvdWJs ZSBkZWNvZGluZyB0aGUgZGF0ZS10aW1lLXN0cmluZwotICAgZnJvbSB0aGUgd2Vic2l0ZSwgY29u dmVydGluZyB0byBsb2NhbCB0aW1lLCBhbmQgY29udmVydGluZyBiYWNrIHRvIFVUQwotICAgd2l0 aCBubyBjb25mbGljdHMgb3IgbG9zcyBvZiBpbmZvcm1hdGlvbi4gSWYgaXQgaGFkIGJlZW4gaW4g YW55IG90aGVyCi0gICBrbm93biBmb3JtYXQsIHRoZSByZXN1bHQgd291bGQgaGF2ZSBiZWVuIHRo ZSBzYW1lLgotCi0gICBOb3cgc3VwcG9zZSB3ZSB3YW50IHRvIGRvd25sb2FkIHRoZSB3ZWIgcGFn ZSBvbmx5IGlmIGl0IGlzIG5ld2VyIHRoYW4KLSAgIG91ciBsb2NhbCBjb3B5LiBUaGUgXGZkYXRl KGZpbGVuYW1lKSBmdW5jdGlvbiAod2hpY2ggcmV0dXJucyB0aGUKLSAgIG1vZGlmaWNhdGlvbiBk YXRlLXRpbWUgb2YgdGhlIGdpdmVuIGZpbGUpIGFuZCB0aGUgbmV3IFxmY21wZGF0ZXMoKQotICAg ZnVuY3Rpb24gbWFrZSBpdCBlYXN5LiBJbnNlcnQgdGhlIGZvbGxvd2luZyBqdXN0IGJlZm9yZSB0 aGUgQlJFQUsKLSAgIHN0YXRlbWVudDoKLQotICBpZiAoIDwgMCBcZmNtcGRhdGVzKFxtKHJkYXRl KSxcZmRhdGUoaW5kZXguaHRtbCkpICkgewotICAgICBlY2hvIEdFVFRJTkcgaW5kZXguaHRtbC4u LgotICAgICBodHRwIGdldCBpbmRleC5odG1sIGluZGV4Lmh0bWwKLSAgICAgaWYgc3VjY2VzcyBl Y2hvIEhUVFAgR0VUIE9LCi0gIH0gZWxzZSB7Ci0gICAgIGVjaG8gaW5kZXguaHRtbDogbm8gdXBk YXRlIG5lZWRlZAotICB9Ci0gIGh0dHAgY2xvc2UKLSAgZXhpdAotCi0gICBUaGlzIHNheXMsICJp ZiAwIGlzIGxlc3MgdGhhbiB0aGUgY29tcGFyaXNvbiBvZiB0aGUgcmVtb3RlIGZpbGUgZGF0ZQot ICAgYW5kIHRoZSBsb2NhbCBmaWxlIGRhdGUsIGdldCB0aGUgcmVtb3RlIGZpbGUsIG90aGVyd2lz ZSBza2lwIGl0LiIgQW5kCi0gICBpdCBhdXRvbWF0aWNhbGx5IHJlY29uY2lsZXMgdGhlIHRpbWUt em9uZSBkaWZmZXJlbmNlIChpZiBhbnkpLgotCi0gICBJdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFi bGUgdG8gZXh0ZW5kIHRoaXMgc2NyaXB0IGludG8gYQotICAgZ2VuZXJhbC1wdXJwb3NlIHdlYnNp dGUgdXBkYXRlciwgYnV0IHVuZm9ydHVuYXRlbHkgSFRUUCBwcm90b2NvbAotICAgZG9lc24ndCBw cm92aWRlIGFueSBtZWNoYW5pc20gZm9yIHRoZSBjbGllbnQgdG8gYXNrIHRoZSBzZXJ2ZXIgZm9y IGEKLSAgIGxpc3Qgb2YgZmlsZXMsIHJlY3Vyc2l2ZSBvciBvdGhlcndpc2UuCi0KLSAgIFsgWzQ4 M11Ub3AgXSBbIFs0ODRdQ29udGVudHMgXSBbIFs0ODVdQy1LZXJtaXQgSG9tZSBdIFsgWzQ4Nl1L ZXJtaXQKLSAgIEhvbWUgXQotCi04LjE0LiBUcmFwcGluZyBLZXlib2FyZCBJbnRlcnJ1cHRpb24K LQotICAgTm9ybWFsbHkgd2hlbiB5b3UgdHlwZSBDdHJsLUMgYW5kIEtlcm1pdCBpcyBpbiBjb21t YW5kIG1vZGUgKGFzIG9wcG9zZWQKLSAgIHRvIENPTk5FQ1QgbW9kZSkgd2l0aCBDT01NQU5EIElO VEVSUlVQVElPTiBPTiAoYXMgaXQgaXMgdW5sZXNzIHlvdSBoYXZlCi0gICBzZXQgaXQgT0ZGKSwg S2VybWl0IGludGVycnVwdHMgYW55IGNvbW1hbmQgdGhhdCBpcyBjdXJyZW50bHkgaW4KLSAgIHBy b2dyZXNzLCBhbmQgaWYgYSBjb21tYW5kIGZpbGUgb3IgbWFjcm8gaXMgZXhlY3V0aW5nLCByb2xs cyB0aGUKLSAgIGNvbW1hbmQgc3RhY2sgYmFjayB0byB0b3AgbGV2ZWwsIGNsb3NpbmcgYWxsIG9w ZW4gY29tbWFuZCBmaWxlcywKLSAgIGRlYWN0aXZhdGluZyBhbGwgbWFjcm9zLCBkZWFsbG9jYXRp bmcgYWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgYXJyYXlzLAotICAgYW5kIGxlYXZpbmcgeW91IGF0 IHRoZSBjb21tYW5kIHByb21wdC4KLQotICAgU3VwcG9zZSwgaG93ZXZlciwgeW91IHdhbnQgY2Vy dGFpbiBhY3Rpb25zIHRvIG9jY3VyIHdoZW4gYSBzY3JpcHQgaXMKLSAgIGludGVycnVwdGVkOyBm b3IgZXhhbXBsZSwgY2xvc2luZyBvcGVuIGZpbGVzLCB3cml0aW5nIGxvZyBlbnRyaWVzLCBvcgot ICAgZGlzcGxheWluZyBzdW1tYXJ5IHJlc3VsdHMuIFlvdSBjYW4gZG8gdGhpcyBieSBkZWZpbmlu ZyBhIG1hY3JvIG5hbWVkCi0gICBPTl9DVFJMQy4gV2hlbiBDdHJsLUMgaXMgZGV0ZWN0ZWQsIGFu ZCBhIG1hY3JvIHdpdGggdGhpcyBuYW1lIGlzCi0gICBkZWZpbmVkLCBLZXJtaXQgZXhlY3V0ZXMg aXQgZnJvbSB0aGUgY3VycmVudCBjb21tYW5kIGxldmVsLCB0aHVzIGdpdmluZwotICAgaXQgZnVs bCBhY2Nlc3MgdG8gdGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoZSBpbnRlcnJ1cHRpb24gb2Nj dXJyZWQsCi0gICBpbmNsdWRpbmcgbG9jYWwgdmFyaWFibGVzIGFuZCBvcGVuIGZpbGVzLiBPbmx5 IHdoZW4gdGhlIE9OX0NUUkxDIG1hY3JvCi0gICBjb21wbGV0ZXMgZXhlY3V0aW9uIGlzIHRoZSBj b21tYW5kIHN0YWNrIHJvbGxlZCBiYWNrIHRvIHRvcCBsZXZlbC4KLQotICAgT25jZSB0aGUgT05f Q1RSTEMgbWFjcm8gaXMgZGVmaW5lZCwgaXQgY2FuIGJlIGV4ZWN1dGVkIG9ubHkgb25jZS4gVGhp cwotICAgaXMgdG8gcHJldmVudCByZWN1cnNpb24gaWYgdGhlIHVzZXIgdHlwZXMgQ3RybC1DIHdo aWxlIHRoZSBPTl9DVFJMQwotICAgbWFjcm8gaXMgZXhlY3V0aW5nLiBJZiB5b3UgdHlwZSBDdHJs LUMgd2hpbGUgdGhlIEN0cmwtQyBtYWNybyBpcwotICAgYWN0aXZlLCB0aGlzIGRvZXMgbm90IHN0 YXJ0IGEgbmV3IGNvcHkgb2YgT05fQ1RSTEM7IHJhdGhlciwgaXQgcmV0dXJucwotICAgdG8gdGhl IHRvcC1sZXZlbCBjb21tYW5kIHByb21wdC4gQWZ0ZXIgdGhlIE9OX0NUUkxDIG1hY3JvIHJldHVy bnMsIGl0Ci0gICBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIG1hY3JvIHRhYmxlIHNvIGlmIHlv dSB3YW50IHRvIHVzZSBpdCBhZ2FpbiBvcgotICAgaW5zdGFsbCBhIGRpZmZlcmVudCBDdHJsLUMg dHJhcCwgeW91IG11c3QgZXhlY3V0ZSBhIG5ldyBERUZJTkUgT05fQ1RSTEMKLSAgIGNvbW1hbmQu IEluIGFueSBjYXNlLCBhcyBhbHdheXMgd2hlbiB5b3UgaW50ZXJydXB0IGEgc2NyaXB0IHdpdGgK LSAgIEN0cmwtQywgaXRzIGNvbXBsZXRpb24gc3RhdHVzIGlzIEZBSUxVUkUuCi0KLSAgIE5vcm1h bGx5IHRoZSBPTl9DVFJMQyBtYWNybyB3b3VsZCBiZSBkZWZpbmVkIGluIHRoZSBjb21tYW5kIGZp bGUgb3IKLSAgIG1hY3JvIHRvIHdoaWNoIGl0IGFwcGxpZXMsIGFuZCBzaG91bGQgYmUgZGVjbGFy ZWQgTE9DQUwuIFRoaXMgd2F5LCBpZgotICAgdGhlIGNvbW1hbmQgZmlsZSBvciBtYWNybyBjb21w bGV0ZXMgc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgYmVpbmcKLSAgIGludGVycnVwdGVkLCB0aGUgT05f Q1RSTEMgZGVmaW5pdGlvbiBkaXNhcHBlYXJzIGF1dG9tYXRpY2FsbHkuCi0gICBPdGhlcndpc2Ug dGhlIGRlZmluaXRpb24gd291bGQgc3RpbGwgYmUgdmFsaWQgYW5kIHRoZSBtYWNybyB3b3VsZCBi ZQotICAgZXhlY3V0ZWQsIHByb2JhYmx5IG91dCBvZiBjb250ZXh0LCB0aGUgbmV4dCB0aW1lIHlv dSB0eXBlZCBDdHJsLUMuCi0KLSAgIEhlcmUncyBhIHNpbXBsZSBleGFtcGxlIG9mIGEgY29tbWFu ZCBmaWxlIHRoYXQgc2V0cyBhIEN0cmwtQyB0cmFwIGZvcgotICAgaXRzZWxmOgotCi0gIGxvY2Fs IG9uX2N0cmxjICAgICAgICAgICAgICA7IE1ha2UgQ3RybC1DIHRyYXAgbG9jYWwgdG8gdGhpcyBj b21tYW5kIGZpbGUuCi0gIGRlZmluZSBvbl9jdHJsYyB7ICAgICAgICAgICA7IERlZmluZSB0aGUg T05fQ1RSTEMgbWFjcm8uCi0gICAgICBlY2hvIEludGVycnVwdGVkIGF0IFx2KHRpbWUpLgotICAg ICAgZWNobyBJdGVyYXRpb25zOiBcJW4KLSAgfQotICB4ZWNobyBUeXBlIEN0cmwtQyB0byBxdWl0 Ci0gIGZvciBcJW4gMSA5OTkgMSB7ICAgICAgICAgICA7IFByaW50cyBhIGRvdCBldmVyeSBzZWNv bmQgdW50aWwgaW50ZXJydXB0ZWQuCi0gICAgICBzbGVlcCAxCi0gICAgICB4ZWNobyAuCi0gIH0K LSAgZWNobyBGaW5pc2hlZCBub3JtYWxseSBhdCBcdih0aW1lKSA7IEdldCBoZXJlIG9ubHkgaWYg bm90IGludGVycnVwdGVkLgotICBkZWNyZW1lbnQgXCVuCi0gIGVjaG8gSXRlcmF0aW9uczogXCVu Ci0KLSAgIFRoaXMgcHJpbnRzIGEgc3VtbWFyeSBubyBtYXR0ZXIgd2hldGhlciBpdCBjb21wbGV0 ZXMgbm9ybWFsbHkgb3IgaXMKLSAgIGludGVycnVwdGVkIGZyb20gdGhlIGtleWJvYXJkLiBJbiBi b3RoIGNhc2VzIHRoZSB0cmFwIGlzIGF1dG9tYXRpY2FsbHkKLSAgIHJlbW92ZWQgYWZ0ZXJ3YXJk cy4KLQotICAgRm9yIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSBPTl9DVFJMQyB0byBkZWJ1ZyBz Y3JpcHRzLCBzZWUKLSAgIFs0ODddU2VjdGlvbiA4LjEuCi0KLSAgIFsgWzQ4OF1Ub3AgXSBbIFs0 ODldQ29udGVudHMgXSBbIFs0OTBdQy1LZXJtaXQgSG9tZSBdIFsgWzQ5MV1LZXJtaXQKLSAgIEhv bWUgXQotCi05LiBTLUVYUFJFU1NJT05TCi0KLSAgIFRoaXMgc2VjdGlvbiBpcyBwcmltYXJpbHkg Zm9yIHRob3NlIHdobyB3YW50IHRvIHdyaXRlCi0gICBjYWxjdWxhdGlvbi1pbnRlbnNpdmUgc2Ny aXB0cywgZXNwZWNpYWxseSBpZiB0aGV5IHJlcXVpcmUKLSAgIGZsb2F0aW5nLXBvaW50IGFyaXRo bWV0aWMsIGFuZC9vciBmb3IgdGhvc2Ugd2hvIGFyZSBmYW1pbGlhciB3aXRoIHRoZQotICAgTElT UCBwcm9ncmFtbWluZyBsYW5ndWFnZS4KLQotICAgRXZlciBzaW5jZSBDLUtlcm1pdCB2ZXJzaW9u IDUgd2FzIHJlbGVhc2VkIGluIDE5ODgsIHNjcmlwdGluZyBoYXMgYmVlbgotICAgb25lIG9mIGl0 cyBtYWpvciBhdHRyYWN0aW9ucywgYW5kIGFyaXRobWV0aWMgaXMgYSBrZXkgcGFydCBvZiBpdC4K LSAgIFZlcnNpb25zIDUgYW5kIDYgaW5jbHVkZWQgaW50ZWdlciBhcml0aG1ldGljIG9ubHksIHVz aW5nIHRyYWRpdGlvbmFsCi0gICBhbGdlYnJhaWMgbm90YXRpb24sIGUuZy46Ci0KLSAgZWNobyBc ZmV2YWx1YXRlKDMqKDIrNykvMikKLSAgMTMKLQotICAgQy1LZXJtaXQgNy4wIGFkZGVkIHN1cHBv cnQgZm9yIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMsIGJ1dCBvbmx5Ci0gICB0aHJvdWdoIGZ1 bmN0aW9uIGNhbGxzOgotCi0gIGVjaG8gXGZmcGRpdmlkZShcZmZwbXVsdGlwbHkoMy4wLFxmZnBh ZGQoMi4wLDcuMCkpLDIuMCkKLSAgMTMuNQotCi0gICBDLUtlcm1pdCA4LjAgaW50cm9kdWNlcyBh IHRoaXJkIGZvcm0gb2YgYXJpdGhtZXRpYyB0aGF0IHRyZWF0cyBpbnRlZ2VycwotICAgYW5kIGZs b2F0aW5nLXBvaW50IG51bWJlcnMgdW5pZm9ybWx5LCBpcyBlYXNpZXIgdG8gcmVhZCBhbmQgd3Jp dGUsIGFuZAotICAgZXhlY3V0ZXMgdmVyeSBxdWlja2x5OgotCi0gICgvICgqIDMgKCsgMiA3KSkg MikKLSAgMTMuNQotCi0gICBCdXQgZmlyc3Qgc29tZSBiYWNrZ3JvdW5kLgotCi0gICBUaGUgS2Vy bWl0IGNvbW1hbmQgYW5kIHNjcmlwdGluZyBsYW5ndWFnZSBkaWZmZXJzIGZyb20gdHJ1ZSBwcm9n cmFtbWluZwotICAgbGFuZ3VhZ2VzIChzdWNoIGFzIEMgb3IgRm9ydHJhbikgaW4gbWFueSB3YXlz OyBvbmUgb2YgdGhlIG1vc3QKLSAgIHByb21pbmVudCBkaWZmZXJlbmNlcyBpcyB0aGUgd2F5IGlu IHdoaWNoIHZhcmlhYmxlcyBhcmUgZGlzdGluZ3Vpc2hlZAotICAgZnJvbSBjb25zdGFudHMuIElu IGEgY29tbWFuZCBsYW5ndWFnZSwgd29yZHMgYXJlIHRha2VuIGxpdGVyYWxseTsgZm9yCi0gICBl eGFtcGxlLCB0aGUgVW5peCBzaGVsbDoKLQotICBjYXQgZm9vLmJhcgotCi0gICBkaXNwbGF5cyB0 aGUgZmlsZSBuYW1lZCBmb28uYmFyLiBXaGVyZWFzIGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ug bGlrZQotICAgQywgd29yZHMgYXJlIGFzc3VtZWQgdG8gYmUgdmFyaWFibGVzOgotCi0gIHMgPSBm b28uYmFyOyAgICAvKiBBc3NpZ25zIHRoZSB2YWx1ZSBvZiBmb28uYmFyIHRvIHRoZSB2YXJpYWJs ZSBzICovCi0KLSAgIFRvIG1ha2UgYSBwcm9ncmFtbWluZyBsYW5ndWFnZSB0YWtlIHdvcmRzIGxp dGVyYWxseSwgeW91IGhhdmUgdG8gcXVvdGUKLSAgIG9yICJlc2NhcGUiIHRoZW06Ci0KLSAgcyA9 ICJmb28uYmFyIjsgIC8qIEFzc2lnbnMgYSBwb2ludGVyIHRvIHRoZSBzdHJpbmcgImZvby5iYXIi IHRvIHRoZSB2YXJpYWJsZSBzCi0gKi8KLQotICAgVGhlIG9wcG9zaXRlIGhvbGRzIGZvciBjb21t YW5kIGxhbmd1YWdlczogdG8gZ2V0IHRoZW0gdG8gdHJlYXQgYSB3b3JkCi0gICBhcyBhIHZhcmlh YmxlIHJhdGhlciB0aGFuIGEgY29uc3RhbnQsIHlvdSBoYXZlIHRvIGVzY2FwZSB0aGVtLiBGb3IK LSAgIGV4YW1wbGUsIGluIHRoZSBVbml4IHNoZWxsOgotCi0gIGZvbz0xMjMgICAgICAgICA7IEFz c2lnbiB2YWx1ZSAxMjMgdG8gdmFyaWFibGUgZm9vLgotICBlY2hvIGZvbyAgICAgICAgOyBQcmlu dHMgImZvbyIKLSAgZWNobyAkZm9vICAgICAgIDsgUHJpbnRzICIxMjMiCi0KLSAgIEFuZCBpbiBL ZXJtaXQ6Ci0KLSAgZGVmaW5lIGZvbyAxMjMgIDsgQXNzaWduIHZhbHVlIDEyMyB0byB2YXJpYWJs ZSBmb28uCi0gIGVjaG8gMTIzICAgICAgICA7IFRoaXMgcHJpbnRzICIxMjMiLgotICBlY2hvIGZv byAgICAgICAgOyBUaGlzIHByaW50cyAiZm9vIi4KLSAgZWNobyBcbShmb28pICAgIDsgVGhpcyBw cmludHMgIjEyMyIuCi0KLSAgIEluIG90aGVyIHdvcmRzLCBjaGFyYWN0ZXIgc3RyaW5ncyAoc3Vj aCBhcyAiZm9vIiBhYm92ZSkgYXJlIGludGVycHJldGVkCi0gICBhcyBsaXRlcmFsIHN0cmluZ3Ms IHJhdGhlciB0aGFuIHZhcmlhYmxlIG5hbWVzLCBleGNlcHQgaW4gc3BlY2lhbAotICAgY29tbWFu ZHMgbGlrZSBERUZJTkUgdGhhdCBkZWFsIHNwZWNpZmljYWxseSB3aXRoIHZhcmlhYmxlIG5hbWVz IChvciBpbgotICAgbnVtZXJpYyBjb250ZXh0cyBhcyBleHBsYWluZWQgaW4gWzQ5Ml1TZWN0aW9u IDguMikuIFRoZSBzcGVjaWFsCi0gICAiZXNjYXBlIiBjaGFyYWN0ZXIgKGRvbGxhciBzaWduICgk KSBmb3IgdGhlIHNoZWxsLCBiYWNrc2xhc2ggKFwpIGZvcgotICAgS2VybWl0KSBpbmRpY2F0ZXMg dGhhdCBhIHZhcmlhYmxlIGlzIHRvIGJlIHJlcGxhY2VkIGJ5IGl0cyB2YWx1ZS4KLQotICAgVGhl IHJlcXVpcmVtZW50IHRvIGVzY2FwZSB2YXJpYWJsZSBuYW1lcyBpbiBjb21tYW5kIGxhbmd1YWdl cyBub3JtYWxseQotICAgZG9lcyBub3QgaW1wb3NlIGFueSBzcGVjaWFsIGhhcmRzaGlwLCBidXQg Y2FuIGFkZCBhIGNvbnNpZGVyYWJsZQotICAgbm90YXRpb25hbCBidXJkZW4gdG8gYXJpdGhtZXRp YyBleHByZXNzaW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBmdWxsCi0gICBvZiB2YXJpYWJsZXMu IEVzcGVjaWFsbHkgaW4gS2VybWl0IHdoZW4gZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBhcmUKLSAg IGludm9sdmVkLCB3aGVyZSB5b3UgbXVzdCB1c2Ugc3BlY2lhbCBcZmZweHh4KCkgZnVuY3Rpb25z LCBlLmcuCi0gICAiXGZmcGFkZChcbShhKSxcbShiKSkiIHJhdGhlciB0aGFuIHRoZSBzaW1wbGUg IisiIG9wZXJhdG9yIHRvIGFkZCB0d28KLSAgIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgdG9nZXRo ZXIsIGJlY2F1c2UgdGhlIG9yaWdpbmFsIGFyaXRobWV0aWMKLSAgIGhhbmRsZXIgZG9lc24ndCBz dXBwb3J0IGZsb2F0aW5nIHBvaW50ICh0aGlzIG1pZ2h0IGNoYW5nZSBpbiB0aGUKLSAgIGZ1dHVy ZSkuIFRvIGlsbHVzdHJhdGUsIHRoZSBnZW5lcmFsIGZvcm11bGEgZm9yIHRoZSBhcmVhIG9mIGEg dHJpYW5nbGUKLSAgIGlzOgotCi0gIHNxcnQocyAqIChzIC0gYSkgKiAocyAtIGIpICogKHMgLSBj KSkKLQotICAgd2hlcmUgYSwgYiwgYW5kIGMgYXJlIHRoZSBsZW5ndGhzIG9mIHRoZSB0cmlhbmds ZSdzIHRocmVlIHNpZGVzIGFuZDoKLQotICBzID0gKGEgKyBiICsgYykgLyAyCi0KLSAgIEV4Y2Vw dCBpbiBzcGVjaWFsIGNhc2VzIChlLmcuIGEgPSAzLCBiID0gNCwgYyA9IDUpLCB0aGUgcmVzdWx0 IGhhcyBhCi0gICBmcmFjdGlvbmFsIHBhcnQgc28gdGhlIGNvbXB1dGF0aW9uIG11c3QgYmUgZG9u ZSB1c2luZyBmbG9hdGluZy1wb2ludAotICAgYXJpdGhtZXRpYy4gV2UgY2FuIGNyZWF0ZSBhIEtl cm1pdCA3LjAgZnVuY3Rpb24gZm9yIHRoaXMgYXMgZm9sbG93czoKLQotICBkZWYgYXJlYSB7Ci0g ICAgICBsb2NhbCBzIHQxIHQyIHQzCi0gICAgICBhc3NpZ24gcyBcZmZwZGl2KFxmZnBhZGQoXGZm cGFkZChcJTEsXCUyKSxcJTMpLDIuMCkKLSAgICAgIGFzc2lnbiB0MSBcZmZwc3ViKFxtKHMpLFwl MSkKLSAgICAgIGFzc2lnbiB0MiBcZmZwc3ViKFxtKHMpLFwlMikKLSAgICAgIGFzc2lnbiB0MyBc ZmZwc3ViKFxtKHMpLFwlMykKLSAgICAgIHJldHVybiBcZmZwc3FydChcZmZwbXVsKFxtKHMpLFxm ZnBtdWwoXG0odDEpLFxmZnBtdWwoXG0odDIpLFxtKHQzKSkpKSkKLSAgfQotCi0gICBCdXQgYXMg eW91IGNhbiBzZWUsIHRoaXMgaXMgcmF0aGVyIGN1bWJlcnNvbWUuIE5vdGUsIGluIHBhcnRpY3Vs YXIsCi0gICB0aGF0IGFyaXRobWV0aWMgZnVuY3Rpb25zIGxpa2UgXGZmcGFkZCgpLCBcZmZwbXVs KCksIGV0YywgdGFrZSBleGFjdGx5Ci0gICB0d28gb3BlcmFuZHMgKGxpa2UgdGhlaXIgc3ltYm9s aWMgY291bnRlcnBhcnRzICsgYW5kICopLCBzbyBvYnRhaW5pbmcKLSAgIHRoZSBwcm9kdWN0IG9m IHRocmVlIG9yIG1vcmUgbnVtYmVycyAoYXMgd2UgZG8gaW4gdGhpcyBjYXNlKSBpcwotICAgYXdr d2FyZC4KLQotICAgVXNpbmcgdGhlIGFsdGVybmF0aXZlIFMtRXhwcmVzc2lvbiBub3RhdGlvbiwg d2UgY2FuIHJlZHVjZSB0aGlzIHRvIGEKLSAgIGZvcm0gdGhhdCBpcyBib3RoIGVhc2llciB0byBy ZWFkIGFuZCBleGVjdXRlcyBmYXN0ZXIgKHRoZSBkZXRhaWxzIGFyZQotICAgZXhwbGFpbmVkIGxh dGVyKToKLQotICBkZWYgbmV3YXJlYSB7Ci0gICAgICAobGV0IHMgKC8gKCsgXCUxIFwlMiBcJTMp IDIuMCkpCi0gICAgICAoc3FydCAoKiBzICgtIHMgXCUxKSAoLSBzIFwlMikgKC0gcyBcJTMpKSkK LSAgfQotCi0gICBJbiBib3RoIGV4YW1wbGVzLCB0aGUgXCUxLi4zIHZhcmlhYmxlcyBhcmUgdGhl IG5vcm1hbCBLZXJtaXQgbWFjcm8KLSAgIGFyZ3VtZW50cywgcmVmZXJlbmNlZCBieSB0aGUgbm9y bWFsIGVzY2FwaW5nIG1lY2hhbmlzbS4gRm9yIGluY3JlYXNlZAotICAgcmVhZGFiaWxpdHksIHdl IGNhbiBhbHNvIGFzc2lnbiB0aGUgbWFjcm8gYXJndW1lbnRzIFwlMSwgXCUyLCBhbmQgXCUzCi0g ICB0byB0aGUgbGV0dGVycyBhLCBiLCBhbmQgYyBjb3JyZXNwb25kaW5nIHRvIG91ciBmb3JtdWxh OgotCi1kZWYgbmV3YXJlYSB7Ci0gICAgKGxldCBhIFwlMSBiIFwlMiBjIFwlMykKLSAgICAobGV0 IHMgKC8gKCsgYSBiIGMpIDIuMCkpCi0gICAgKHNxcnQgKCogcyAoLSBzIGEpICgtIHMgYikgKC0g cyBjKSkpCi19Ci0KLSAgIEFuZCBub3cgdGhlIEtlcm1pdCBmdW5jdGlvbiByZWFkcyBhbG1vc3Qg bGlrZSB0aGUgb3JpZ2luYWwgZm9ybXVsYS4KLSAgIEhlcmUgS2VybWl0IGJlaGF2ZXMgbW9yZSBs aWtlIGEgcmVndWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZS4gSW4gYW4KLSAgIFMtRXhwcmVzc2lv biwgbWFjcm8gbmFtZXMgbmVlZCBub3QgYmUgZXNjYXBlZCB3aGVuIHRoZXkgYXJlIHVzZWQgYXMg dGhlCi0gICBuYW1lcyBvZiBudW1lcmljIHZhcmlhYmxlcy4KLQotICAgWyBbNDkzXVRvcCBdIFsg WzQ5NF1Db250ZW50cyBdIFsgWzQ5NV1DLUtlcm1pdCBIb21lIF0gWyBbNDk2XUtlcm1pdAotICAg SG9tZSBdCi0KLTkuMS4gV2hhdCBpcyBhbiBTLUV4cHJlc3Npb24/Ci0KLSAgIFRoZSBTLUV4cHJl c3Npb24gY29uY2VwdCBpcyBib3Jyb3dlZCBmcm9tIHRoZSBMaXNwIHByb2dyYW1taW5nCi0gICBs YW5ndWFnZS4gIlMtRXhwcmVzc2lvbiIgaXMgc2hvcnQgZm9yIFN5bWJvbGljIEV4cHJlc3Npb24g KGl0c2VsZgotICAgc29tZXRpbWVzIHNob3J0ZW5lZCB0byBTRVhQKS4gUy1FeHByZXNzaW9ucyBw cm92aWRlIGEga2luZCBvZgotICAgQWx0ZXJuYXRpdmUgTWluaS1Vbml2ZXJzZSB3aXRoaW4gdGhl IEtlcm1pdCBjb21tYW5kIGxhbmd1YWdlIHdoZW4gdGhlCi0gICByZWd1bGFyIHJ1bGVzIGRvbid0 IGFwcGx5LCBhIHVuaXZlcnNlIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzLgotCi0gICBDLUtlcm1p dCBkb2VzIG5vdCBwcmV0ZW5kIHRvIGJlIGEgZnVsbCBMaXNwIGludGVycHJldGVyOyBvbmx5IHRo ZQotICAgYXJpdGhtZXRpYyBwYXJ0cyBvZiBMaXNwIGhhdmUgYmVlbiBpbmNvcnBvcmF0ZWQ6IFMt RXhwcmVzc2lvbnMgdGhhdAotICAgb3BlcmF0ZSBvbiBudW1iZXJzIGFuZCByZXR1cm4gbnVtZXJp YyB2YWx1ZXMgKHBsdXMgZXh0ZW5zaWJpbGl0eQotICAgZmVhdHVyZXMgZGVzY3JpYmVkIGluIFs0 OTddU2VjdGlvbiA5LjgsIHdoaWNoIGFsbG93IHNvbWUgZGVncmVlIG9mCi0gICBzdHJpbmcgcHJv Y2Vzc2luZykuCi0KLSAgIEFuIFMtRXhwcmVzc2lvbiBpcyBhIGxpc3Qgb2YgemVybyBvciBtb3Jl IGl0ZW1zLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLAotICAgd2l0aGluIHBhcmVudGhlc2VzLiBFeGFt cGxlczoKLQotICAoKQotICAoMSkKLSAgKGEpCi0gICgrIGEgMSkKLSAgKCogMiBhIGIpCi0KLSAg IElmIHRoZSBTLUV4cHJlc3Npb24gaXMgZW1wdHksIGl0IGhhcyB0aGUgTklMIChlbXB0eSkgdmFs dWUuIElmIGl0IGlzCi0gICBub3QgZW1wdHkgYW5kIHRoZSBmaXJzdCBpdGVtIGlzIGFuIG9wZXJh dG9yIChzdWNoIGFzICsgb3IgKiksIHRoZXJlIGNhbgotICAgYmUgemVybyBvciBtb3JlIHN1YnNl cXVlbnQgaXRlbXMsIGNhbGxlZCB0aGUgb3BlcmFuZHM6Ci0KLSAgKCsgMSAyKQotCi0gICBIZXJl IHRoZSBvcGVyYXRvciBpcyAiKyIgYW5kIHRoZSBvcGVyYW5kcyBhcmUgIjEiIGFuZCAiMiIsIGFu ZCB0aGUKLSAgIHZhbHVlIG9mIHRoZSBTLUV4cHJlc3Npb24gaXMgdGhlIHZhbHVlIG9mIHRoZSBv cGVyYXRpb24gKGluIHRoaXMgY2FzZQotICAgMykuIFRoZSBvcGVyYXRvciBhbHdheXMgY29tZXMg Zmlyc3QsIHdoaWNoIGlzIGRpZmZlcmVudCBmcm9tIHRoZQotICAgZmFtaWxpYXIgYWxnZWJyYWlj IG5vdGF0aW9uOyB0aGlzIGJlY2F1c2UgUy1FeHByZXNzaW9uIG9wZXJhdG9ycyBjYW4KLSAgIGhh dmUgZGlmZmVyZW50IG51bWJlcnMgb2Ygb3BlcmFuZHM6Ci0KLSAgKCsgMSkKLSAgKCsgMSAyKQot ICAoKyAxIDIgMyA0IDUgNiA3IDggOSkKLQotICAgSWYgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIFMt RXhwcmVzc2lvbiBpcyBub3QgYW4gb3BlcmF0b3IsIHRoZW4gaXQgbXVzdAotICAgYmUgYSB2YXJp YWJsZSBvciBhIG51bWJlciAob3IgYSBtYWNybzsgc2VlIFs0OThdU2VjdGlvbiA5LjgpLCBhbmQg dGhlCi0gICBTLUV4cHJlc3Npb24gY2FuIG9ubHkgY29udGFpbiBvbmUgaXRlbTsgaW4gdGhpcyBj YXNlLCB0aGUKLSAgIFMtRXhwcmVzc2lvbidzIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGUgdmFy aWFibGUgb3IgbnVtYmVyOgotCi0gIChhKQotICAoMykKLQotICAgT3BlcmFuZHMgY2FuIGJlIG51 bWJlcnMsIHZhcmlhYmxlcyB0aGF0IGhhdmUgbnVtZXJpYyB2YWx1ZXMsIGZ1bmN0aW9ucwotICAg dGhhdCByZXR1cm4gbnVtYmVycywgb3Igb3RoZXIgUy1FeHByZXNzaW9ucy4gVG8gaWxsdXN0cmF0 ZSBhbgotICAgUy1FeHByZXNzaW9uIHdpdGhpbiBhbiBTLUV4cHJlc3Npb24sIG9ic2VydmUgdGhh dDoKLQotICAoKyAxIDIpCi0KLSAgIGlzIGVxdWl2YWxlbnQgdG8gYW55IG9mIHRoZSBmb2xsb3dp bmcgKHBsdXMgYW4gaW5maW5pdGUgbnVtYmVyIG9mCi0gICBvdGhlcnMpOgotCi0gICgrIDEgKCsg MSAxKSkKLSAgKCsgKC0gMyAyKSAoLyAxNCAoKyAzIDQpKSkKLQotICAgUy1FeHByZXNzaW9ucyBj YW4gYmUgbmVzdGVkIHRvIGFueSByZWFzb25hYmxlIGxldmVsOyBmb3IgZXhhbXBsZSwgdGhlCi0g ICB2YWx1ZSBvZiB0aGUgZm9sbG93aW5nIFMtRXhwcmVzc2lvbiBpcyA2NDoKLQotICAoLSAoKiAo KyAyICgqIDMgNCkpICgtIDkgKCogMiAyKSkpIDYpCi0KLSAgIE9wZXJhdG9ycyBoYXZlIG5vIHBy ZWNlZGVuY2UsIGltcGxpZWQgb3Igb3RoZXJ3aXNlLCBzaW5jZSB0aGV5IGNhbid0IGJlCi0gICBt aXhlZC4gVGhlIG9ubHkgZXhjZXB0aW9ucyBhcmUgdW5hcnkgKyBhbmQgLSwgd2hpY2ggc2ltcGx5 IGluZGljYXRlIHRoZQotICAgc2lnbiBvZiBhIG51bWJlcjoKLQotICAoKiAzIC0xKQotCi0gICBP cmRlciBvZiBldmFsdWF0aW9uIGlzIHNwZWNpZmllZCBlbnRpcmVseSBieSBwYXJlbnRoZXNlcywg d2hpY2ggYXJlCi0gICByZXF1aXJlZCBhcm91bmQgZWFjaCBvcGVyYXRvciBhbmQgaXRzIG9wZXJh bmRzOiAoKyBhICgqIGIgYykpIGluc3RlYWQKLSAgIG9mIChhICsgYiAqIGMpLgotCi0gICBTLUV4 cHJlc3Npb25zIHByb3ZpZGUgYSBzaW1wbGUgYW5kIGlzb2xhdGVkIGVudmlyb25tZW50IGluIHdo aWNoCi0gICBLZXJtaXQncyBtYWNybyBuYW1lcyBjYW4gYmUgdXNlZCB3aXRob3V0IHRoZSBcbSgu Li4pIGVzY2FwaW5nIHRoYXQgaXMKLSAgIG5vcm1hbGx5IHJlcXVpcmVkLiBHaXZlbjoKLQotICBk ZWZpbmUgYSAxCi0gIGRlZmluZSBiIDIKLSAgZGVmaW5lIGMgMwotCi0gICBUaGVuOgotCi0gICgr IFxtKGEpIFxtKGIpIFxtKGMpKQotCi0gICBpcyBlcXVpdmFsZW50IHRvOgotCi0gICgrIGEgYiBj KQotCi0gICBXaXRoaW4gYW4gUy1FeHByZXNzaW9uLCBhcyBpbiBvdGhlciBzdHJpY3RseSBudW1l cmljIGNvbnRleHRzCi0gICAoWzQ5OV1TZWN0aW9uIDguMiksIGFueSBvcGVyYW5kIHRoYXQgc3Rh cnRzIHdpdGggYSBsZXR0ZXIgaXMgdHJlYXRlZCBhcwotICAgYSBLZXJtaXQgbWFjcm8gbmFtZS4g SW4gdGhpcyBjb250ZXh0LCBhYmJyZXZpYXRpb25zIGFyZSBub3QgYWNjZXB0ZWQ7Ci0gICB2YXJp YWJsZSBuYW1lcyBtdXN0IGJlIHNwZWxsZWQgb3V0IGluIGZ1bGwuIEFscGhhYmV0aWMgY2FzZSBp cyBub3QKLSAgIHNpZ25pZmljYW50OyAiYSIgYW5kICJBIiBhcmUgdGhlIHNhbWUgdmFyaWFibGUs IGJ1dCBib3RoIGFyZSBkaWZmZXJlbnQKLSAgIGZyb20gImFyZWEiLgotCi0gICBPZiBjb3Vyc2Us IHJlZ3VsYXIgS2VybWl0IHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGluCi0g ICBTLUV4cHJlc3Npb25zIGluIHRoZSBub3JtYWwgd2F5czoKLQotICAoKiBcdihtYXRoX3BpKSAo XiBcJXIgMikpICAgICAgICAgICAgIDsgQXJlYSBvZiBhIGNpcmNsZSB3aXRoIHJhZGl1cyBcJXIK LSAgKCsgXGZqb2luKCZhKSkgICAgICAgICAgICAgICAgICAgICAgICA7IFN1bSBvZiBhbGwgZWxl bWVudHMgb2YgYXJyYXkgXCZhW10KLQotICAgWyBbNTAwXVRvcCBdIFsgWzUwMV1Db250ZW50cyBd IFsgWzUwMl1DLUtlcm1pdCBIb21lIF0gWyBbNTAzXUtlcm1pdAotICAgSG9tZSBdCi0KLTkuMi4g SW50ZWdlciBhbmQgRmxvYXRpbmctUG9pbnQtQXJpdGhtZXRpYwotCi0gICBOb3JtYWxseSwgaWYg YWxsIG51bWJlcnMgaW4gYW4gUy1FeHByZXNzaW9uIGFyZSBpbnRlZ2VycywgdGhlIHJlc3VsdCBp cwotICAgYW4gaW50ZWdlcjoKLQotICAoKyAxIDEpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsgUmVzdWx0IGlzIDIKLSAgKC8gOSAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7IFJlc3VsdCBpcyAzCi0KLSAgIElmIGFueSBvZiB0aGUgb3BlcmFuZHMgaXMgZmxvYXRpbmcg cG9pbnQsIGhvd2V2ZXIsIHRoZSByZXN1bHQgaXMgYWxzbwotICAgZmxvYXRpbmcgcG9pbnQ6Ci0K LSAgKCsgMSAxLjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc3VsdCBpcyAyLjAK LSAgKC8gOS4wIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc3VsdCBpcyAzLjAK LQotICAgSWYgYWxsIHRoZSBvcGVyYW5kcyBhcmUgaW50ZWdlcnMgYnV0IHRoZSByZXN1bHQgaGFz IGEgZnJhY3Rpb25hbCBwYXJ0LAotICAgdGhlIHJlc3VsdCBpcyBmbG9hdGluZyBwb2ludDoKLQot ICAoLyAxMCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzdWx0IGlzIDMuMzMz MzMzMzMzMzMzMzMzCi0KLSAgIFRvIGZvcmNlIGFuIGludGVnZXIgcmVzdWx0IGluIHN1Y2ggY2Fz ZXMsIHVzZSB0aGUgVFJVTkNBVEUgb3BlcmF0b3I6Ci0KLSAgKHRydW5jYXRlICgvIDEwIDMpKSAg ICAgICAgICAgICAgICAgICA7IFJlc3VsdCBpcyAzCi0KLSAgIFNpbWlsYXJseSwgdG8gZm9yY2Ug YSBjb21wdXRhdGlvbiB0byBvY2N1ciBpbiBmbG9hdGluZyBwb2ludCwgeW91IGNhbgotICAgY29l cmNlIG9uZSBvZiBpdHMgb3BlcmFuZHMgdG8gRkxPQVQ6Ci0KLSAgKCsgMSAoZmxvYXQgMSkpICAg ICAgICAgICAgICAgICAgICAgICA7IFJlc3VsdCBpcyAyLjAKLQotICAgVGhlIHJlc3VsdCBpcyBh bHNvIGZsb2F0aW5nIHBvaW50IGlmIHRoZSBtYWduaXR1ZGUgb2YgYW55IGludGVnZXIKLSAgIG9w ZXJhbmQsIGludGVybWVkaWF0ZSByZXN1bHQsIG9yIHRoZSByZXN1bHQgaXRzZWxmLCBpcyBsYXJn ZXIgdGhhbiB0aGUKLSAgIG1heGltdW0gZm9yIHRoZSB1bmRlcmx5aW5nIG1hY2hpbmUgYXJjaGl0 ZWN0dXJlOgotCi0gICheIDEwMCAxMDApCi0KLSAgIElmIHRoZSByZXN1bHQgaXMgdG9vIGxhcmdl IGV2ZW4gZm9yIGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uLAotICAgIkluZmluaXR5IiBp cyBwcmludGVkOyBpZiBpdCBpcyB0b28gc21hbGwgdG8gYmUgZGlzdGluZ3Vpc2hlZCBmcm9tIDAs Ci0gICAwLjAgaXMgcmV0dXJuZWQuCi0KLSAgIExhcmdlIG51bWJlcnMgY2FuIGJlIHVzZWQgYW5k IGxhcmdlIHJlc3VsdHMgZ2VuZXJhdGVkLCBidXQgdGhleSBhcmUKLSAgIGFjY3VyYXRlIG9ubHkg dG8gdGhlIHByZWNpc2lvbiBvZiB0aGUgdW5kZXJseWluZyBtYWNoaW5lLiBGb3IgZXhhbXBsZSwK LSAgIHRoZSByZXN1bHQgb2Y6Ci0KLSAoKyAxMTExMTExMTExMTExMTExMTExMTEgMjIyMjIyMjIy MjIyMjIyMjIyMjIyKQotCi0gICBzaG91bGQgYmUgMzMzMzMzMzMzMzMzMzMzMzMzMzMzLCBidXQg MzMzMzMzMzMzMzMzMzMzMzAwMDAwLjAgaXMKLSAgIHByb2R1Y2VkIGluc3RlYWQgaWYgdGhlIG1h Y2hpbmUgaXMgYWNjdXJhdGUgdG8gb25seSBhYm91dCAxNiBkZWNpbWFsCi0gICBkaWdpdHMsIGV2 ZW4gd2l0aCBjb2VyY2lvbiB0byBmbG9hdGluZy1wb2ludC4gVGhlIG9yZGVyIG9mIG1hZ25pdHVk ZSBpcwotICAgY29ycmVjdCBidXQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGRpZ2l0cyBhcmUgd3Jv bmcuIFRoZSBpbXByZWNpc2UKLSAgIG5hdHVyZSBvZiB0aGUgcmVzdWx0IGlzIGluZGljYXRlZCBi eSB0aGUgIi4wIiBhdCB0aGUgZW5kLiBDb250cmFzdAotICAgd2l0aDoKLQotICgrIDExMTExMTEx MSAyMjIyMjIyMjIpCi0KLSAgIHdoaWNoIHByb2R1Y2VzIGFuIGV4YWN0IGludGVnZXIgcmVzdWx0 LgotCi0gICBbIFs1MDRdVG9wIF0gWyBbNTA1XUNvbnRlbnRzIF0gWyBbNTA2XUMtS2VybWl0IEhv bWUgXSBbIFs1MDddS2VybWl0Ci0gICBIb21lIF0KLQotOS4zLiBIb3cgdG8gVXNlIFMtRXhwcmVz c2lvbnMKLQotICAgUy1FeHByZXNzaW9ucyBtYXkgYmUgZ2l2ZW4gYXMgY29tbWFuZHMgdG8gQy1L ZXJtaXQuIEFueSBjb21tYW5kIHdob3NlCi0gICBmaXJzdCBjaGFyYWN0ZXIgaXMgIigiIChsZWZ0 IHBhcmVudGhlc2lzKSBpcyBpbnRlcnByZXRlZCBhcyBhbgotICAgUy1FeHByZXNzaW9uLgotCi0g ICBJZiB5b3UgZW50ZXIgYW4gUy1FeHByZXNzaW9uIGF0IHRoZSBDLUtlcm1pdD4gcHJvbXB0LCBp dHMgcmVzdWx0IGlzCi0gICBwcmludGVkOgotCi0gIEMtS2VybWl0PigvIDEwLjAgMykKLSAgIDMu MzMzMzMzMzMzMzMzMzMzCi0gIEMtS2VybWl0PgotCi0gICBJZiBhbiBTLUV4cHJlc3Npb24gaXMg ZXhlY3V0ZWQgd2l0aGluIGEgbWFjcm8gb3IgY29tbWFuZCBmaWxlLCBpdHMKLSAgIHZhbHVlIGlz IG5vdCBwcmludGVkLiBIb3dldmVyLCB5b3UgY2FuIGNvbnRyb2wgdGhlIHByaW50aW5nIGFjdGlv bgotICAgd2l0aDoKLQotICAgU0VUIFNFWFBSRVNTSU9OIEVDSE8geyBBVVRPLCBPTiwgT0ZGIH0K LSAgICAgICAgICBBVVRPIGlzIHRoZSBkZWZhdWx0LCBtZWFuaW5nIHByaW50IHRoZSB2YWx1ZSBh dCB0b3AgbGV2ZWwgb25seTsKLSAgICAgICAgICBPTiBtZWFucyBhbHdheXMgcHJpbnQgdGhlIHZh bHVlOyBPRkYgbWVhbnMgbmV2ZXIgcHJpbnQgaXQuCi0KLSAgIEluIGFueSBjYXNlLCB0aGUgdmFs dWUgb2YgdGhlIG1vc3QgcmVjZW50IFMtRXhwcmVzc2lvbiAoYW5kIHRoZQotICAgUy1FeHByZXNz aW9uIGl0c2VsZikgbWF5IGJlIGFjY2Vzc2VkIHByb2dyYW1tYXRpY2FsbHkgdGhyb3VnaCB0aGUK LSAgIGZvbGxvd2luZyB2YXJpYWJsZXM6Ci0KLSAgIFx2KHNleHByZXNzaW9uKQotICAgICAgICAg IFRoZSBTLUV4cHJlc3Npb24gbW9zdCByZWNlbnRseSBleGVjdXRlZC4KLQotICAgXHYoc3ZhbHVl KQotICAgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGUgUy1FeHByZXNzaW9uIG1vc3QgcmVjZW50bHkg ZXhlY3V0ZWQuCi0KLSAgIEJlc2lkZXMgaXNzdWluZyBTLUV4cHJlc3Npb25zIGFzIGNvbW1hbmRz IGluIHRoZW1zZWx2ZXMsIHlvdSBjYW4gYWxzbwotICAgZXhlY3V0ZSB0aGVtIGFueXdoZXJlIHdp dGhpbiBhIEtlcm1pdCBjb21tYW5kLCBidXQgaW4gdGhpcyBjYXNlIHRoZXkKLSAgIG11c3QgYmUg ZW5jbG9zZWQgaW4gYSBmdW5jdGlvbiBjYWxsIChvdGhlcndpc2UgdGhleSBhcmUgdGFrZW4KLSAg IGxpdGVyYWxseSk6Ci0KLSAgIFxmc2V4cHJlc3Npb24ocykKLSAgICAgICAgICBUaGUgYXJndW1l bnQgInMiIGlzIGFuIFMtRXhwcmVzc2lvbjsgdGhlIG91dGVyIHBhcmVudGhlc2VzIG1heQotICAg ICAgICAgIGJlIG9taXR0ZWQuIFRoZSB2YWx1ZSBvZiB0aGUgUy1FeHByZXNzaW9uIGlzIHJldHVy bmVkLiBOb3RlIHRoYXQKLSAgICAgICAgICBzaW5jZSBTLUV4cHJlc3Npb25zIHVzdWFsbHkgY29u dGFpbiBzcGFjZXMsIHNvbWUgZm9ybSBvZgotICAgICAgICAgIGdyb3VwaW5nIG9yIHF1b3Rpbmcg bWlnaHQgYmUgbmVlZGVkIGluIHNvbWUgY29udGV4dHM6Ci0KLSAgZWNobyBcZnNleHByZXNzaW9u KCgrIDEgMSkpICAgICAgICAgICAgOyBPdXRlciBwYXJlbnRoZXNlcyBtYXkgYmUgaW5jbHVkZWQK LSAgZWNobyBcZnNleHByKCsgMSAxKSAgICAgICAgICAgICAgICAgICAgOyBPdXRlciBwYXJlbnRo ZXNlcyBtYXkgYmUgb21pdHRlZAotICBlY2hvIFZhbHVlID0gIlxmc2V4cCgrIDEgYSkiICAgICAg ICAgICA7IENhbiBiZSBlbWJlZGRlZCBpbiBzdHJpbmdzCi0gIGVjaG8gVmFsdWUgPSBcJmFbXGZz ZXhwKC8gYiAyKV0gICAgICAgIDsgQ2FuIGJlIHVzZWQgaW4gYXJyYXkgc3Vic2NyaXB0cwotICBp ZiA9IHtcZnNleHAoKyAxIDEpfSAyIHsgICAgICAgICAgICAgICA7IEJyYWNlcyBuZWVkZWQgaGVy ZSBmb3IgZ3JvdXBpbmcKLSAgICAgIGVjaG8gT25lIHBsdXMgb25lIHN0aWxsIGVxdWFscyB0d28K LSAgfQotCi0gICBUaGUgSUYgc3RhdGVtZW50IGlsbHVzdHJhdGVzIGhvdyB0byB1c2UgUy1FeHBy ZXNzaW9ucyBhcyAob3IgaW4pIElGIG9yCi0gICBXSElMRSBjb25kaXRpb25zOgotCi0gICAgICog QWx0aG91Z2ggUy1FeHByZXNzaW9ucyBhbmQgSUYgY29uZGl0aW9ucyBhcmUgc2ltaWxhciBpbiBh cHBlYXJhbmNlLAotICAgICAgIHRoZXkgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUuIFRoZXJlZm9y ZSB5b3UgbXVzdCB1c2UgXGZzZXhwcigpIHRvCi0gICAgICAgbGV0IEtlcm1pdCBrbm93IGl0J3Mg YW4gUy1FeHByZXNzaW9uIHJhdGhlciB0aGFuIGEgcmVndWxhciBJRgotICAgICAgIGNvbmRpdGlv biwgb3IgYSBib29sZWFuIG9yIGFsZ2VicmFpYyBleHByZXNzaW9uIHdpdGhpbiBhbiBJRgotICAg ICAgIGNvbmRpdGlvbi4KLSAgICAgKiBJbiBjb250ZXh0cyB3aGVyZSBhIHNpbmdsZSAid29yZCIg aXMgZXhwZWN0ZWQsIHlvdSBtdXN0IGVuY2xvc2UgdGhlCi0gICAgICAgXGZzZXhwKCkgaW52b2Nh dGlvbiBpbiBicmFjZXMgaWYgdGhlIFMtRXhwcmVzc2lvbiBjb250YWlucyBzcGFjZXMKLSAgICAg ICAoYW5kIG1vc3Qgb2YgdGhlbSBkbykuCi0KLSAgIElmIGFuIFMtRXhwcmVzc2lvbiBpcyB0aGUg bGFzdCBjb21tYW5kIGV4ZWN1dGVkIGluIGEgbWFjcm8sIGl0cyB2YWx1ZQotICAgYmVjb21lcyB0 aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBtYWNybzsgbm8gUkVUVVJOIGNvbW1hbmQgaXMgbmVlZGVk LgotICAgRXhhbXBsZToKLQotICBkZWYgbmV3YXJlYSB7Ci0gICAgICAobGV0IHMgKC8gKCsgXCUx IFwlMiBcJTMpIDIuMCkpCi0gICAgICAoc3FydCAoKiBzICgtIHMgXCUxKSAoLSBzIFwlMikgKC0g cyBcJTMpKSkKLSAgfQotCi0gICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtb3JlIGVmZmlj aWVudCB0aGFuKToKLQotICBkZWYgbmV3YXJlYSB7Ci0gICAgICAobGV0IHMgKC8gKCsgXCUxIFwl MiBcJTMpIDIuMCkpCi0gICAgICByZXR1cm4gXGZzZXhwKHNxcnQgKCogcyAoLSBzIFwlMSkgKC0g cyBcJTIpICgtIHMgXCUzKSkpCi0gIH0KLQotICAgV2hlbiBhbiBTLUV4cHJlc3Npb24gaXMgZW50 ZXJlZCBhcyBhIGNvbW1hbmQgLS0gdGhhdCBpcywgdGhlIGZpcnN0Ci0gICBub25ibGFuayBjaGFy YWN0ZXIgb2YgdGhlIGNvbW1hbmQgaXMgYSBsZWZ0IHBhcmVudGhlc2lzIC0tIHRoZW4gaXQgaXMK LSAgIGFsbG93ZWQgdG8gc3BhbiBtdWx0aXBsZSBsaW5lcywgYXMgbWFueSBhcyB5b3UgbGlrZSwg dW50aWwgdGhlIGZpcnN0Ci0gICBsZWZ0IHBhcmVudGhlc2lzIGlzIG1hdGNoZWQ6Ci0KLSAgKGxl dCBzICgvCi0gICAgICAgICAgKCsKLSAgICAgICAgICAgXCUxCi0gICAgICAgICAgIFwlMgotICAg ICAgICAgICBcJTMKLSAgICAgICAgICAgKQotICAgICAgICAgIDIuMAotICAgICAgICAgICkKLSAg ICAgICApCi0gIChzcXJ0ICgqCi0gICAgICAgICBzCi0gICAgICAgICAoLSBzIFwlMSkKLSAgICAg ICAgICgtIHMgXCUyKQotICAgICAgICAgKC0gcyBcJTMpCi0gICAgICAgICApCi0gICAgICAgICkK LQotICAgVGhlIFMtRXhwcmVzc2lvbiBjb25jZXB0IGxlbmRzIGl0c2VsZiBlYXNpbHkgdG8gZW1i ZWRkaW5nIGFuZAotICAgcmVjdXJzaW9uLCBidXQgdGhlIGRlcHRoIHRvIHdoaWNoIHJlY3Vyc2lv biBjYW4gb2NjdXIgaXMgbGltaXRlZCBieSB0aGUKLSAgIHJlc291cmNlcyBvZiB0aGUgY29tcHV0 ZXIgKG1lbW9yeSBzaXplLCBhZGRyZXNzIHNwYWNlLCBzd2FwIHNwYWNlIG9uCi0gICBkaXNrKSBh bmQgb3RoZXIgZmFjdG9ycy4gVGhlcmUgaXMgbm8gd2F5IHRoYXQgQy1LZXJtaXQgY2FuIGtub3cg d2hhdAotICAgdGhpcyBsaW1pdCBpcywgc2luY2UgaXQgdmFyaWVzIG5vdCBvbmx5IGZyb20gY29t cHV0ZXIgdG8gY29tcHV0ZXIsIGJ1dAotICAgYWxzbyBmcm9tIG1vbWVudCB0byBtb21lbnQuIElm IHJlc291cmNlcyBhcmUgZXhoYXVzdGVkIGJ5IHJlY3Vyc2lvbiwKLSAgIEMtS2VybWl0IHNpbXBs eSBjcmFzaGVzOyB0aGVyZSdzIG5vIHdheSB0byB0cmFwIHRoaXMgZXJyb3IuIEhvd2V2ZXIsCi0g ICB5b3UgY2FuIHNldCBhIGRlcHRoIGxpbWl0IG9uIFMtRXhwcmVzc2lvbnM6Ci0KLSAgIFNFVCBT RVhQUkVTU0lPTiBERVBUSC1MSU1JVCBudW1iZXIKLSAgICAgICAgICBMaW1pdHMgdGhlIG51bWJl ciBvZiB0aW1lcyB0aGUgUy1FeHByZXNzaW9uIHJlYWRlciBjYW4gaW52b2tlCi0gICAgICAgICAg aXRzZWxmIHdpdGhvdXQgcmV0dXJuaW5nIHRvIHRoZSBnaXZlbiBudW1iZXIuIFRoZSBkZWZhdWx0 IGxpbWl0Ci0gICAgICAgICAgaXMgMTAwMC4gVGhpcyBsaW1pdCBhcHBsaWVzIHRvIFMtRXhwcmVz c2lvbnMgZW1iZWRkZWQgd2l0aGluCi0gICAgICAgICAgb3RoZXIgUy1FeHByZXNzaW9ucyBhcyB3 ZWxsIGFzIHRvIFMtRXhwcmVzc2lvbnMgdGhhdCBpbnZva2UKLSAgICAgICAgICByZWN1cnNpdmUg bWFjcm9zLiBJZiB0aGUgbGltaXQgaXMgZXhjZWVkZWQsIEtlcm1pdCBwcmludHMKLSAgICAgICAg ICAiP1MtRXhwcmVzc2lvbiBkZXB0aCBsaW1pdCBleGNlZWRlZCIgYW5kIHJldHVybnMgdG8gaXRz IHByb21wdC4KLSAgICAgICAgICBNb3JlIGFib3V0IHJlY3Vyc2lvbiBpbiBbNTA4XVNlY3Rpb24g OS44LgotCi0gICBZb3UgY2FuIGFsc28gdGVzdCB0aGUgZGVwdGggcHJvZ3JhbW1hdGljYWxseToK LQotICAgXHYoc2RlcHRoKQotICAgICAgICAgIFRoZSBjdXJyZW50IFMtRXhwcmVzc2lvbiBpbnZv Y2F0aW9uIGRlcHRoLiBUaGUgZGVwdGggaW5jbHVkZXMKLSAgICAgICAgICBib3RoIG5lc3Rpbmcg bGV2ZWwgYW5kIHJlY3Vyc2lvbi4gRm9yIGV4YW1wbGUsIGluOgotICAgICAgICAgIChmb28gKGZv byAoZm9vIChmb28gKGZvbykpKSkpLCB0aGUgaW5uZXJtb3N0IChmb28pIGlzIGF0IGRlcHRoCi0g ICAgICAgICAgNS4KLQotICAgSGVscCwgY29tcGxldGlvbiwgYW5kIHN5bnRheCBjaGVja2luZyBh cmUgbm90IGF2YWlsYWJsZSB3aXRoaW4gYW4KLSAgIFMtRXhwcmVzc2lvbi4gSWYgeW91IHR5cGUg PyB3aXRoaW4gYW4gUy1FeHByZXNzaW9uLCBpdCBzYXlzOgotCi0gIEMtS2VybWl0Pig/IFMtRXhw cmVzc2lvbiAoImhlbHAgc2V4cCIgZm9yIGRldGFpbHMpCi0KLSAgIEFzIGl0IHNheXMsIHR5cGlu ZyAiaGVscCBzZXhwIiB3aWxsIGRpc3BsYXkgYSBicmllZiBoZWxwIHRleHQuCi0KLSAgIFRoZSBT SE9XIFNFWFBSRVNTSU9OIGNvbW1hbmQgZGlzcGxheXMgY3VycmVudCBTRVQgU0VYUFJFU1NJT04g c2V0dGluZ3MKLSAgIGFuZCByZWxhdGVkIGluZm9ybWF0aW9uLgotCi0gICBbIFs1MDldVG9wIF0g WyBbNTEwXUNvbnRlbnRzIF0gWyBbNTExXUMtS2VybWl0IEhvbWUgXSBbIFs1MTJdS2VybWl0Ci0g ICBIb21lIF0KLQotOS40LiBTdW1tYXJ5IG9mIEJ1aWx0LWluIENvbnN0YW50cyBhbmQgT3BlcmF0 b3JzCi0KLSAgIFRocmVlIGNvbnN0YW50cyBhcmUgYnVpbHQgaW46Ci0KLSAgICAgKiBQSSwgd2hv c2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHBpICh0aGUgcXVvdGllbnQgb2YgY2lyY3VtZmVyZW5j ZQotICAgICAgIG9mIGFueSBjaXJjbGUgYW5kIGl0cyBkaWFtZXRlciwgMy4xNDE1OTI2NTMuLi4p IHRvIHRoZSB1bmRlcmx5aW5nCi0gICAgICAgbWFjaGluZSdzIHByZWNpc2lvbjsKLSAgICAgKiBU LCB3aGljaCBhbHdheXMgaGFzIHRoZSB2YWx1ZSAxLCB3aGljaCBzaWduaWZpZXMgdHJ1dGggaW4g S2VybWl0Ci0gICAgICAgbG9naWNhbCBleHByZXNzaW9ucyBvciBTLUV4cHJlc3Npb25zOwotICAg ICAqIE5JTCwgd2hpY2ggYWx3YXlzIGhhcyB0aGUgZW1wdHkgdmFsdWUsIGFuZCBjYW4gc2VydmUg YXMgYSBGYWxzZQotICAgICAgIHRydXRoIHZhbHVlLgotCi0gICBUaGVzZSBjb25zdGFudHMgYXJl IHNwZWNpZmljIHRvIFMtRXhwcmVzc2lvbnMgYW5kIGFyZSBub3QgdmlzaWJsZQotICAgb3V0c2lk ZSB0aGVtLiBUaGV5IG1heSBub3QgYmUgdXNlZCBhcyB0aGUgdGFyZ2V0IG9mIGFuIGFzc2lnbm1l bnQuIFNvLAotICAgZm9yIGV4YW1wbGU6Ci0KLSAgKHNldHEgdCAwKSAgIEZhaWxzCi0gIGFzc2ln biB0IDAgICBTdWNjZWVkcyBidXQgdGhpcyBpcyBub3QgdGhlIHNhbWUgVCEKLQotICAgRSAodGhl IGJhc2Ugb2YgbmF0dXJhbCBsb2dhcml0aG1zLCAyLjcxODI4MTgxODQuLi4pIGlzIG5vdCBidWls dCBpbgotICAgc2luY2UgaXQgaXMgbm90IGludHJpbnNpYyBpbiBtb3N0IExpc3AgZGlhbGVjdHMu IElmIHlvdSB3YW50IEUgdG8gYmUKLSAgIHRoZSBiYXNlIG9mIG5hdHVyYWwgbG9nYXJpdGhtcyB5 b3UgY2FuOgotCi0gIChzZXRxIGUgKGV4cCAxKSkKLQotICAgT3BlcmF0b3JzIGFyZSBlaXRoZXIg c3ltYm9scyAoc3VjaCBhcyAiKyIpIG9yIHdvcmRzLiBXb3JkcyBtdXN0IGJlCi0gICBzcGVsbGVk IG91dCBpbiBmdWxsLCBub3QgYWJicmV2aWF0ZWQuIERpZmZlcmVuY2VzIG9mIGFscGhhYmV0aWMg Y2FzZQotICAgYXJlIGlnbm9yZWQuCi0KLSAgIFRoZSBtb3N0IGJhc2ljIG9wZXJhdGlvbiBpbiBT LUV4cHJlc3Npb25zIGlzIGV2YWx1YXRpb246Ci0KLSAgIEVWQUwgWyBzLWV4cHJlc3Npb24gb3Ig dmFyaWFibGUgb3IgbnVtYmVyIFsgYW5vdGhlciBbIGFub3RoZXIgLi4uIF0gXSBdCi0gICAgICAg ICAgRXZhbHVhdGVzIGl0cyBvcGVyYW5kcyBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxh c3Qgb25lCi0gICAgICAgICAgZXZhbHVhdGVkLiBFeGFtcGxlczoKLQotICAoZXZhbCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSAgKGV2YWwgMSkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxCi0gIChldmFsIGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs dWUgb2YgYQotICAoZXZhbCAoKyAxIGEpKSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9m IGErMQotICAoZXZhbCAoc2V0cSBhIDEpIChzZXRxIGIgKCsgYSAwLjUpKSkgIHZhbHVlIG9mIGIg KD0gYSswLjUpCi0KLSAgICAgICAgICBZb3UgY2FuIHVzZSAiLiIgYXMgYSBzaG9ydGhhbmQgZm9y IEVWQUw6Ci0KLSAgKC4pCi0gICguIDEpCi0gICguIGEpCi0gICguICgrIDEgYSkpCi0gICguIChz ZXRxIGEgMSkgKHNldHEgYiAoKyBhIDAuNSkpKQotCi0gICBPcHBvc2l0ZSBvZiBFVkFMIGlzIHRo ZSBvcGVyYXRvciB0aGF0IHN1cHByZXNzZXMgZXZhbHVhdGlvbiBvZiBpdHMKLSAgIG9wZXJhbmQ6 Ci0KLSAgIFFVT1RFIGl0ZW0KLSAgICAgICAgICBUaGUgdmFsdWUgKHF1b3RlIGl0ZW0pIGlzICJp dGVtIi4gSWYgdGhlIGl0ZW0gaXMgaXRzZWxmIGFuCi0gICAgICAgICAgUy1FeHByZXNzaW9uLCB0 aGUgcmVzdWx0IGlzIHRoZSBTLUV4cHJlc3Npb24gd2l0aCB0aGUgb3V0ZXIKLSAgICAgICAgICBw YXJlbnRoZXNlcyBzdHJpcHBlZC4gRXhhbXBsZXM6Ci0KLSAgKHF1b3RlKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoaWxsZWdhbCkKLSAgKHF1b3RlIGEpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhCi0gIChxdW90ZSBoZWxsbykgICAgICAgICAgICAgICAgICAgICAgICAgaGVs bG8KLSAgKHF1b3RlICh0aGlzIGlzIGEgc3RyaW5nKSkgICAgICAgICAgICB0aGlzIGlzIGEgc3Ry aW5nCi0gIChxdW90ZSB0aGlzIGlzIGEgc3RyaW5nKSAgICAgICAgICAgICAgKGlsbGVnYWwpCi0K LSAgICAgICAgICBBIHNob3J0aGFuZCBub3RhdGlvbiBpcyBhbHNvIGFjY2VwdGVkIGZvciBxdW90 aW5nOgotICAgICAgICAgICdhIGlzIGVxdWl2YWxlbnQgdG8gKHF1b3RlIGEpLiBBbmQgdGhlcmVm b3JlOgotICAgICAgICAgICcoYSBiIGMpIGlzIGVxdWl2YWxlbnQgdG8gKHF1b3RlIChhIGIgYykp LgotICAgICAgICAgIE1vcmUgYWJvdXQgcXVvdGluZyBpbiBbNTEzXVNlY3Rpb24gOS44LgotCi0g ICBTVFJJTkcgaXRlbQotICAgICAgICAgIElzIGEgY29tYmluYXRpb24gb2YgRVZBTCBhbmQgUVVP VEUuIEl0IGV2YWx1YXRlcyB0aGUgaXRlbSBhcyBhbgotICAgICAgICAgIFMtRXhwcmVzc2lvbiwg YW5kIHRoZW4gcHV0cyBxdW90ZXMgYXJvdW5kIHRoZSByZXN1bHQgKG1vcmUgYWJvdXQKLSAgICAg ICAgICB0aGlzIGluIFs1MTRdU2VjdGlvbiA5LjgpLgotCi0gICBUaGUgZm9sbG93aW5nIG9wZXJh dG9ycyBhc3NpZ24gdmFsdWVzIHRvIHZhcmlhYmxlczoKLQotICAgU0VUUSBbIHZhcmlhYmxlIFsg dmFsdWUgWyB2YXJpYWJsZSBbIHZhbHVlIFsgLi4uIF0gXSBdIF0gXQotICAgICAgICAgIEFwcGxp ZXMgdG8gZ2xvYmFsIHZhcmlhYmxlcy4gRm9yIGVhY2ggdmFyaWFibGUgZ2l2ZW46IGlmIGEgdmFs dWUKLSAgICAgICAgICBpcyBub3QgZ2l2ZW4sIHRoZSB2YXJpYWJsZSBpcyB1bmRlZmluZWQuIElm IGEgdmFsdWUgaXMgZ2l2ZW4sCi0gICAgICAgICAgYXNzaWducyB0aGUgdmFsdWUgdG8gdGhlIHZh cmlhYmxlLiBUaGUgdmFsdWUgbWF5IGJlIGEgbnVtYmVyLCBhCi0gICAgICAgICAgdmFyaWFibGUs IG9yIGFueXRoaW5nIHRoYXQgcmVzb2x2ZXMgdG8gYSBudW1iZXIgaW5jbHVkaW5nIGFuCi0gICAg ICAgICAgUy1FeHByZXNzaW9uLiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBhc3NpZ25t ZW50LgotICAgICAgICAgIEV4YW1wbGVzOgotCi0gIChzZXRxKSAgICAgICAgICAgICBEb2VzIG5v dGhpbmcsIHJldHVybnMgTklMLgotICAoc2V0cSBhKSAgICAgICAgICAgVW5kZWZpbmVzIGEsIHJl dHVybnMgTklMLgotICAoc2V0cSBhIDEpICAgICAgICAgQXNzaWducyAxIHRvIGEsIHJldHVybnMg MS4KLSAgKHNldHEgYSAxIGIgMikgICAgIEFzc2lnbnMgMSB0byBhLCAyIHRvIGIsIHJldHVybnMg Mi4KLSAgKHNldHEgYSAxIGIgMiBjKSAgIEFzc2lnbnMgMSB0byBhLCAyIHRvIGIsIHVuZGVmaW5l cyBjLCByZXR1cm5zIE5JTC4KLQotICAgVG8gdW5kZWZpbmUgYSB2YXJpYWJsZSB0aGF0IGlzIG5v dCB0aGUgZmluYWwgb25lIGluIHRoZSBsaXN0LCBnaXZlIGl0IGEKLSAgIHZhbHVlIG9mICIoKSIg b3IgTklMOgotCi0gIChzZXRxIGEgKCkgYiAyKSAgICBVbmRlZmluZXMgYSwgYXNzaWducyAyIHRv IGIsIHJldHVybnMgMi4KLSAgKHNldHEgYSBuaWwgYiAyKSAgIERpdHRvLgotCi0gICBOb3RlIHRo YXQgYSB2YXJpYWJsZSBjYW4gYmUgdXNlZCByaWdodCBhd2F5IG9uY2UgaXQgaGFzIGEgdmFsdWU6 Ci0KLSAgKHNldHEgYSAxIGIgYSkgICAgIEFzc2lnbnMgMSB0byBhLCB0aGUgdmFsdWUgb2YgYSAo MSkgdG8gYiwgcmV0dXJucyAxLgotCi0gICBUaGUgcmVzdWx0cyBvZiBTRVRRICh3aGVuIHVzZWQg d2l0aCBtYWNybyBuYW1lcykgY2FuIGJlIGNoZWNrZWQKLSAgIGNvbnZlbmllbnRseSB3aXRoIFNI T1cgTUFDUk8sIGUuZzoKLQotICBzaG93IG1hYyBhIGIgYwotCi0gICBMRVQgWyB2YXJpYWJsZSBb IHZhbHVlIFsgdmFyaWFibGUgWyB2YWx1ZSBbIC4uLiBdIF0gXSBdIF0KLSAgICAgICAgICBMaWtl IFNFVFEsIGJ1dCBhcHBsaWVzIHRvIGxvY2FsIHZhcmlhYmxlcy4gTm90ZSB0aGF0ICJsb2NhbCIg aXMKLSAgICAgICAgICB1c2VkIGluIHRoZSBLZXJtaXQgc2Vuc2UsIG5vdCB0aGUgTGlzcCBzZW5z ZTsgaXQgYXBwbGllcyB0byB0aGUKLSAgICAgICAgICBjdXJyZW50IEtlcm1pdCBjb21tYW5kIGxl dmVsLCBub3QgdG8gdGhlIGN1cnJlbnQgUy1FeHByZXNzaW9uLgotCi0gICBJZiB5b3Ugd2FudCB0 byB1c2UgU0VUUSBvciBMRVQgdG8gYXNzaWduIGEgdmFsdWUgdG8gYSBiYWNrc2xhc2gKLSAgIHZh cmlhYmxlIHN1Y2ggYXMgXCVhIG9yIFwmYVsyXSwgeW91IG11c3QgZG91YmxlIHRoZSBiYWNrc2xh c2g6Ci0KLSAgKHNldHEgXFwlYSAzKQotICAoc2V0cSBcXCViICgrIFwlYSAxKSkKLSAgKHNldHEg XFwmYVsyXSAoc2V0cSAoXFwlYyAoKyBcJWEgXCViKSkpKQotCi0gICBJbiBvdGhlciB3b3JkczoK LQotICAgICAqIERvdWJsZSB0aGUgYmFja3NsYXNoIHdoZW4geW91IHdhbnQgdG8gaW5kaWNhdGUg dGhlIHZhcmlhYmxlJ3MgTkFNRTsKLSAgICAgKiBEb24ndCBkb3VibGUgdGhlIGJhY2tzbGFzaCB3 aGVuIHlvdSB3YW50IGl0cyBWQUxVRS4KLQotICAgU2VlIFs1MTVdU2VjdGlvbiA5LjYgZm9yIGEg ZnVsbGVyIGV4cGxhbmF0aW9uIG9mIHZhcmlhYmxlIHN5bnRheCBhbmQKLSAgIHNjb3BlLgotCi0g ICBIZXJlJ3MgYSBzdW1tYXJ5IHRhYmxlIG9mIGFyaXRobWV0aWMgb3BlcmF0b3JzOyBpbiB0aGUg ZXhhbXBsZXMsIGEgaXMgMgotICAgYW5kIGIgaXMgLTEuMzoKLQotICBPcGVyYXRvciAgRGVzY3Jp cHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhhbXBsZSAgICAgICAgICAgUmVzdWx0 Ci0gICsgICAgICAgICBBZGRzIGFsbCBvcGVyYW5kcyAoMCBvciBtb3JlKSAgICAgICAgICAoKyBh IGIpICAgICAgICAgICAwLjcKLSAgLSAgICAgICAgIFN1YnRyYWN0cyBhbGwgb3BlcmFuZHMgKDAg b3IgbW9yZSkgICAgICgtIDkgNSAyIDEpICAgICAgIDEKLSAgKiAgICAgICAgIE11bHRpcGxpZXMg YWxsIG9wZXJhbmRzICgwIG9yIG1vcmUpICAgICgqIGEgKCsgYiAxKSAzKSAgLTEuODAKLSAgLyAg ICAgICAgIERpdmlkZXMgYWxsIG9wZXJhbmRzICgyIG9yIG1vcmUpICAgICAgICgvIGIgYSAyKSAg ICAgICAgLTAuMzI1Ci0gIF4gICAgICAgICBSYWlzZSBnaXZlbiBudW1iZXIgdG8gZ2l2ZW4gcG93 ZXIgICAgICAoXiAzIDIpICAgICAgICAgICA5Ci0gICsrICAgICAgICBJbmNyZW1lbnRzIHZhcmlh YmxlcyAgICAgICAgICAgICAgICAgICAoKysgYSAxLjIpICAgICAgICAzLjIKLSAgLS0gICAgICAg IERlY3JlbWVudHMgdmFyaWFibGVzICAgICAgICAgICAgICAgICAgICgtLSBhKSAgICAgICAgICAg IDEKLSAgQUJTICAgICAgIEFic29sdXRlIHZhbHVlIG9mIDEgb3BlcmFuZCAgICAgICAgICAgIChh YnMgKCogYSBiIDMpKSAgIDcuOAotICBNQVggICAgICAgTWF4aW11bSBvZiBhbGwgb3BlcmFuZHMg KDEgb3IgbW9yZSkgICAgKG1heCAxIDIgMyA0KSAgICAgNAotICBNSU4gICAgICAgTWluaW11bSBv ZiBhbGwgb3BlcmFuZHMgKDEgb3IgbW9yZSkgICAgKG1pbiAxIDIgMyA0KSAgICAgMQotICBNT0Qg KCUpICAgTW9kdWx1cyBvZiBhbGwgb3BlcmFuZHMgKDEgb3IgbW9yZSkgICAgKG1vZCA3IDQgMikg ICAgICAgMQotICBGTE9BVCAgICAgQ29udmVydCBhbiBpbnRlZ2VyIHRvIGZsb2F0aW5nLXBvaW50 ICAgKGZsb2F0IDEpICAgICAgICAgMS4wCi0gIFRSVU5DQVRFICBJbnRlZ2VyIHBhcnQgb2YgZmxv YXRpbmctcG9pbnQgb3BlcmFuZCAodHJ1bmNhdGUgMy4zMzMpICAzCi0gIENFSUxJTkcgICBDZWls aW5nIG9mIGZsb2F0aW5nLXBvaW50IG9wZXJhbmQgICAgICAoY2VpbGluZyAxLjI1KSAgICAyCi0g IEZMT09SICAgICBGbG9vciBvZiBmbG9hdGluZy1wb2ludCBvcGVyYW5kICAgICAgICAoZmxvb3Ig MS4yNSkgICAgICAxCi0gIFJPVU5EICAgICBPcGVyYW5kIHJvdW5kZWQgdG8gbmVhcmVzdCBpbnRl Z2VyICAgICAocm91bmQgMS43NSkgICAgICAyCi0gIFNRUlQgICAgICBTcXVhcmUgcm9vdCBvZiAx IG9wZXJhbmQgICAgICAgICAgICAgICAoc3FydCAyKSAgICAgICAgICAxLjQxNC4uCi0gIEVYUCAg ICAgICBlICgyLjcxODI4Li4pIHRvIHRoZSBnaXZlbiBwb3dlciAgICAgICAoZXhwIC0xKSAgICAg ICAgICAwLjM2Ny4uCi0gIFNJTiAgICAgICBTaW5lIG9mIGFuZ2xlLWluLXJhZGlhbnMgICAgICAg ICAgICAgICAoc2luICgvIHBpIDIpKSAgICAxLjAKLSAgQ09TICAgICAgIENvc2luZSBvZiBhbmds ZS1pbi1yYWRpYW5zICAgICAgICAgICAgIChjb3MgcGkpICAgICAgICAgLTEuMAotICBUQU4gICAg ICAgVGFuZ2VudCBvZiBhbmdsZS1pbi1yYWRpYW5zICAgICAgICAgICAgKHRhbiBwaSkgICAgICAg ICAgMC4wCi0gIExPRyAgICAgICBOYXR1cmFsIGxvZyAoYmFzZSBlKSBvZiBnaXZlbiBudW1iZXIg ICAobG9nIDIuNzE4MykgICAgICAxLjAwMC4uCi0gIExPRzEwICAgICBMb2cgYmFzZSAxMCBvZiBn aXZlbiBudW1iZXIgICAgICAgICAgICAobG9nMTAgMTAwMCkgICAgICAzLjAKLQotICAgVGhlICsr IGFuZCAtLSBvcGVyYXRvcnMgYXJlIGFsc28gYXNzaWdubWVudCBvcGVyYXRvcnMgYW5kIHdvcmsg anVzdAotICAgbGlrZSBTRVRRIGFuZCBMRVQgaW4gdGhlaXIgaW50ZXJwcmV0YXRpb25zIG9mIG9w ZXJhdG9ycyBhbmQgb3BlcmFuZHMsCi0gICBidXQ6Ci0KLSAgICAgKiBFYWNoIHRhcmdldCB2YXJp YWJsZSBtdXN0IGFscmVhZHkgYmUgZGVmaW5lZCBhbmQgaGF2ZSBhIG51bWVyaWMKLSAgICAgICB2 YWx1ZTsKLSAgICAgKiBUaGUgYXNzaWdubWVudCB2YWx1ZSBpcyB0aGUgYW1vdW50IGJ5IHdoaWNo IHRvIGluY3JlbWVudCBvcgotICAgICAgIGRlY3JlbWVudCB0aGUgdmFyaWFibGUuCi0gICAgICog SWYgYW4gYXNzaWdubWVudCB2YWx1ZSBpcyBub3QgZ2l2ZW4sIDEgaXMgdXNlZC4KLQotICAgSWYg eW91IGluY2x1ZGUgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZS12YWx1ZSBwYWlyIGluIGEgKysgb3Ig LS0KLSAgIGV4cHJlc3Npb24sIGV2ZXJ5IHZhcmlhYmxlIChleGNlcHQsIG9wdGlvbmFsbHksIHRo ZSBsYXN0KSBtdXN0IGJlCi0gICBmb2xsb3dlZCBieSBhIHZhbHVlLiBFeGFtcGxlczoKLQotICAo KysgYSkgICAgICAgICAgICAgICAgRXF1aXZhbGVudCB0byAoc2V0cSBhICgrIGEgMSkpIGFuZCB0 byAoKysgYSAxKQotICAoKysgYSAyKSAgICAgICAgICAgICAgRXF1aXZhbGVudCB0byAoc2V0cSBh ICgrIGEgMikpCi0gICgtLSBhICgqIDIgcGkpKSAgICAgICBFcXVpdmFsZW50IHRvIChzZXRxIGEg KC0gYSAoKiAyIHBpKSkpCi0gICgrKyBhIDEgYiAxIGMgMSBkKSAgICBFcXVpdmFsZW50IHRvIGZv dXIgU0VUUXMgaW5jcmVtZW50aW5nIGEsYixjLGQgYnkgMS4KLQotICAgQW5vdGhlciBncm91cCBv ZiBvcGVyYXRvcnMgZm9ybXMgdGhlIHByZWRpY2F0ZXMuIFRoZXNlIHJldHVybiBhICJ0cnV0aAot ICAgdmFsdWUiLCBpbiB3aGljaCAwIChvciBOSUwpIGlzIGZhbHNlLCBhbmQgMSBvciBhbnkgb3Ro ZXIgbm9uemVybyBudW1iZXIKLSAgIGlzIHRydWUuCi0KLSAgT3BlcmF0b3IgIERlc2NyaXB0aW9u ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGUgICAgICAgICAgIFJlc3VsdAotICA9 IChvciA9PSkgT3BlcmFuZHMgYXJlIGVxdWFsICAgICAgICAgICAgICAgICAgICAgKD0gMSAxLjAp ICAgICAgICAgMQotICAhPSAgICAgICAgT3BlcmFuZHMgYXJlIG5vdCBlcXVhbCAgICAgICAgICAg ICAgICAgKCE9IDEgMS4wKSAgICAgICAgMAotICA8ICAgICAgICAgT3BlcmFuZHMgaW4gc3RyaWN0 bHkgYXNjZW5kaW5nIG9yZGVyICAgKDwgMSAyIDMpICAgICAgICAgMQotICA8PSAgICAgICAgT3Bl cmFuZHMgaW4gYXNjZW5kaW5nIG9yZGVyICAgICAgICAgICAgKDw9IDEgMSAyIDMpICAgICAgMQot ICA+ICAgICAgICAgT3BlcmFuZHMgaW4gc3RyaWN0bHkgZGVzY2VuZGluZyBvcmRlciAgKD4gMyAy IDEpICAgICAgICAgMQotICA+PSAgICAgICAgT3BlcmFuZHMgaW4gZGVzY2VuZGluZyBvcmRlciAg ICAgICAgICAgKDw9IDMgMyAyIDEpICAgICAgMQotICBBTkQgKCYmKSAgT3BlcmFuZHMgYXJlIGFs bCB0cnVlICAgICAgICAgICAgICAgICAgKGFuZCAxIDEgMSAxIDApICAgMAotICBPUiAgKHx8KSAg QXQgbGVhc3Qgb25lIG9wZXJhbmQgaXMgdHJ1ZSAgICAgICAgICAgKG9yIDEgMSAxIDEgMCkgICAg MQotICBYT1IgICAgICAgTG9naWNhbCBFeGNsdXNpdmUgT1IgICAgICAgICAgICAgICAgICAgKHhv ciAzIDEpICAgICAgICAgMAotICBOT1QgKCEpICAgUmV2ZXJzZXMgdHJ1dGggdmFsdWUgb2Ygb3Bl cmFuZCAgICAgICAgKG5vdCAzKSAgICAgICAgICAgMAotCi0gICBUaGUgRXhjbHVzaXZlIE9SIG9m IHR3byB2YWx1ZXMgaXMgdHJ1ZSBpZiBvbmUgdmFsdWUgaXMgdHJ1ZSBhbmQgdGhlCi0gICBvdGhl ciB2YWx1ZSBpcyBmYWxzZS4KLQotICAgQW5kIGFub3RoZXIgZ3JvdXAgb3BlcmF0ZXMgb24gYml0 cyB3aXRoaW4gYW4gaW50ZWdlciB3b3JkOgotCi0gIE9wZXJhdG9yICBEZXNjcmlwdGlvbiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlICAgICAgICAgICBSZXN1bHQKLSAgJiAgICAg ICAgIEJpdHdpc2UgQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICgmIDcgMikgICAgICAg ICAgIDIKLSAgfCAgICAgICAgIEJpdHdpc2UgT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh8IDEgMiAzIDQpICAgICAgIDcKLSAgIyAgICAgICAgIEJpdHdpc2UgRXhjbHVzaXZlIE9SICAg ICAgICAgICAgICAgICAgICgjIDMgMSkgICAgICAgICAgIDIKLSAgfiAgICAgICAgIFJldmVyc2Vz IGFsbCBiaXRzICAgICAgICAgICAgICAgICAgICAgICh+IDMpICAgICAgICAgICAgLTQKLQotICAg VGhlc2Ugb3BlcmF0b3JzIGNvZXJjZSB0aGVpciBvcGVyYW5kcyB0byBpbnRlZ2VyIGJ5IHRydW5j YXRpb24gaWYKLSAgIG5lY2Vzc2FyeS4gVGhlIHJlc3VsdCBvZiBiaXQgcmV2ZXJzYWwgaXMgaGFy ZHdhcmUgZGVwZW5kZW50LgotCi0gICBUaGUgZmluYWwgY2F0ZWdvcnkgb2Ygb3BlcmF0b3Igd29y a3Mgb24gdHJ1dGggdmFsdWVzOgotCi0gIE9wZXJhdG9yICBEZXNjcmlwdGlvbiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFeGFtcGxlICAgICAgICAgICBSZXN1bHQKLSAgSUYgICAgICAgIENv bmRpdGlvbmFsIGV2YWx1YXRpb24gICAgICAgICAgICAgICAgIChpZiAoMSkgMiAzKSAgICAgIDIK LQotICAgSUYgKHByZWRpY2F0ZSkgKHMxKSBbIChzMikgXQotICAgICAgICAgIFRoZSBJRiBvcGVy YXRvciBpcyBzaW1pbGFyIHRvIEtlcm1pdCdzIElGIGNvbW1hbmQuIElmIHRoZQotICAgICAgICAg IHByZWRpY2F0ZSBpcyB0cnVlIChpLmUuIGV2YWx1YXRlcyB0byBhIG5vbnplcm8gbnVtYmVyKSwg dGhlCi0gICAgICAgICAgZmlyc3QgUy1FeHByZXNzaW9uIChzMSkgaXMgZXZhbHVhdGVkIGFuZCBp dHMgdmFsdWUgaXMgcmV0dXJuZWQuCi0gICAgICAgICAgT3RoZXJ3aXNlLCBpZiAoczIpIGlzIGdp dmVuLCBpdCBpcyBldmFsdWF0ZWQgYW5kIGl0cyB2YWx1ZQotICAgICAgICAgIHJldHVybmVkOyBp ZiAoczIpIGlzIG5vdCBnaXZlbiwgbm90aGluZyBoYXBwZW5zIGFuZCB0aGUgTklMCi0gICAgICAg ICAgKGVtcHR5KSB2YWx1ZSBpcyByZXR1cm5lZC4KLQotICAgWW91IGNhbiBncm91cCBtdWx0aXBs ZSBleHByZXNzaW9ucyBpbiB0aGUgczEgYW5kIHMyIGV4cHJlc3Npb25zIHVzaW5nCi0gICBFVkFM IChvciAiLiIpOgotCi0gIChpZiAoPCBhIDApIChldmFsIChzZXRxIHggMCkgKHNldHEgeSAwKSkg KGV2YWwgKHNldHEgeCBhKSAoc2V0cSB5IGIpKSkKLQotICAgb3IgZXF1aXZhbGVudGx5OgotCi0g IChpZiAoPCBhIDApICguIChzZXRxIHggMCkgKHNldHEgeSAwKSkgKC4gKHNldHEgeCBhKSAoc2V0 cSB5IGIpKSkKLQotICAgRWFjaCBvcGVyYXRvciBoYXMgaXRzIG93biByZXF1aXJlbWVudCBhcyB0 byBudW1iZXIgYW5kIHR5cGUgb2YKLSAgIG9wZXJhbmRzLiBJbiB0aGUgZm9sbG93aW5nIHRhYmxl LCAibnVtYmVyIiBtZWFucyBhbnkga2luZCBvZiBudW1iZXIgLS0KLSAgIGludGVnZXIgb3IgZmxv YXRpbmctcG9pbnQgLS0gb3IgYSB2YXJpYWJsZSwgZnVuY3Rpb24sIG1hY3JvLCBvcgotICAgUy1F eHByZXNzaW9uIHRoYXQgcmV0dXJucyBhIG51bWJlcjsgInZuYW1lIiBtZWFucyB2YXJpYWJsZSBu YW1lLAotICAgImZwbnVtYmVyIiBtZWFucyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciAob3IgYW55 dGhpbmcgdGhhdCByZXNvbHZlcyB0bwotICAgb25lKSwgYW5kICJpbnRlZ2VyIiBtZWFucyBpbnRl Z2VyIChvciBhbnl0aGluZyB0aGF0IHJlc29sdmVzIHRvIG9uZSkuCi0gICAidHJ1dGh2YWx1ZSIg bWVhbnMgYW55dGhpbmcgdGhhdCByZXNvbHZlcyB0byBhIHZhbHVlIG9mIHplcm8gb3IgYW4KLSAg IGVtcHR5IHZhbHVlICh3aGljaCBpbmRpY2F0ZXMgZmFsc2UpIG9yIGEgbm9uemVybyB2YWx1ZSAo d2hpY2ggaW5kaWNhdGVzCi0gICB0cnVlKS4gImFueSIgbWVhbnMgYW55IGtpbmQgb2YgdmFsdWUs IGluY2x1ZGluZyBub25lIGF0IGFsbC4KLQotICBPcGVyYXRvciAgTnVtYmVyIG9mIG9wZXJhbmRz ICAgVHlwZSBvZiBvcGVyYW5kcyAgICBSZXR1cm5zCi0gIEVWQUwgICguKSAwIG9yIG1vcmUgICAg ICAgICAgICBTLUV4cHJlc3Npb24gICAgICAgIExhc3QgdmFsdWUgKGRlZmF1bHQgTklMKQotICBT VFJJTkcgICAgMSAgICAgICAgICAgICAgICAgICAgUy1FeHByZXNzaW9uICAgICAgICBzdHJpbmcK LSAgUVVPVEUgKCcpIDEgICAgICAgICAgICAgICAgICAgIHdvcmQgICAgICAgICAgICAgICAgc3Ry aW5nCi0gIFNFVFEgICAgICAwIG9yIG1vcmUgICAgICAgICAgICB2bmFtZSB2YWx1ZSBwYWlycyAg IExhc3QgdmFsdWUgKGRlZmF1bHQgTklMKQotICBMRVQgICAgICAgMCBvciBtb3JlICAgICAgICAg ICAgdm5hbWUgdmFsdWUgcGFpcnMgICBMYXN0IHZhbHVlIChkZWZhdWx0IE5JTCkKLSAgKyAgICAg ICAgIDAgb3IgbW9yZSAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgbnVtYmVyICAgICAo ZGVmYXVsdCAwKQotICAtICAgICAgICAgMCBvciBtb3JlICAgICAgICAgICAgbnVtYmVyICAgICAg ICAgICAgICBudW1iZXIgICAgIChkZWZhdWx0IDApCi0gICogICAgICAgICAwIG9yIG1vcmUgICAg ICAgICAgICBudW1iZXIgICAgICAgICAgICAgIG51bWJlciAgICAgKHNlZSBub3RlICgxKSkKLSAg LyAgICAgICAgIDIgb3IgbW9yZSAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgbnVtYmVy Ci0gIF4gICAgICAgICAyIG9yIG1vcmUgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIG51 bWJlcgotICArKyAgICAgICAgMSBvciBtb3JlICAgICAgICAgICAgdm5hbWUgdmFsdWUgcGFpcnMg ICBSZXN1bHQgb2YgbGFzdCBpbmNyZW1lbnQKLSAgLS0gICAgICAgIDEgb3IgbW9yZSAgICAgICAg ICAgIHZuYW1lIHZhbHVlIHBhaXJzICAgUmVzdWx0IG9mIGxhc3QgZGVjcmVtZW50Ci0gIEFCUyAg ICAgICAxICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIG51bWJlcgotICBN QVggICAgICAgMSBvciBtb3JlICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBudW1iZXIK LSAgTUlOICAgICAgIDEgb3IgbW9yZSAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgbnVt YmVyCi0gIE1PRCAoJSkgICAyICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAg IG51bWJlcgotICBGTE9BVCAgICAgMSAgICAgICAgICAgICAgICAgICAgbnVtYmVyICAgICAgICAg ICAgICBmcG51bWJlcgotICBUUlVOQ0FURSAgMSAgICAgICAgICAgICAgICAgICAgbnVtYmVyICAg ICAgICAgICAgICBpbnRlZ2VyCi0gIENFSUxJTkcgICAxICAgICAgICAgICAgICAgICAgICBudW1i ZXIgICAgICAgICAgICAgIGludGVnZXIKLSAgRkxPT1IgICAgIDEgICAgICAgICAgICAgICAgICAg IG51bWJlciAgICAgICAgICAgICAgaW50ZWdlcgotICBST1VORCAgICAgMSAgICAgICAgICAgICAg ICAgICAgbnVtYmVyICAgICAgICAgICAgICBpbnRlZ2VyCi0gIFNRUlQgICAgICAxICAgICAgICAg ICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIGZwbnVtYmVyCi0gIEVYUCAgICAgICAxICAg ICAgICAgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIGZwbnVtYmVyCi0gIFNJTiAgICAg ICAxICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIGZwbnVtYmVyCi0gIENP UyAgICAgICAxICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIGZwbnVtYmVy Ci0gIFRBTiAgICAgICAxICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIGZw bnVtYmVyCi0gIExPRyAgICAgICAxICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgICAgICAg ICAgIGZwbnVtYmVyCi0gIExPRzEwICAgICAxICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAg ICAgICAgICAgIGZwbnVtYmVyCi0gID0gKD09KSAgICAxIG9yIG1vcmUgICAgICAgICAgICBudW1i ZXIgICAgICAgICAgICAgIHRydXRodmFsdWUKLSAgIT0gICAgICAgIDEgb3IgbW9yZSAgICAgICAg ICAgIG51bWJlciAgICAgICAgICAgICAgdHJ1dGh2YWx1ZQotICA8ICAgICAgICAgMSBvciBtb3Jl ICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICB0cnV0aHZhbHVlCi0gIDw9ICAgICAgICAx IG9yIG1vcmUgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIHRydXRodmFsdWUKLSAgPiAg ICAgICAgIDEgb3IgbW9yZSAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgdHJ1dGh2YWx1 ZQotICA+PSAgICAgICAgMSBvciBtb3JlICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICB0 cnV0aHZhbHVlCi0gIEFORCAoJiYpICAxIG9yIG1vcmUgICAgICAgICAgICB0cnV0aHZhbHVlICAg ICAgICAgIHRydXRodmFsdWUKLSAgT1IgICh8fCkgIDEgb3IgbW9yZSAgICAgICAgICAgIHRydXRo dmFsdWUgICAgICAgICAgdHJ1dGh2YWx1ZQotICBYT1IgICAgICAgMiAgICAgICAgICAgICAgICAg ICAgdHJ1dGh2YWx1ZSAgICAgICAgICB0cnV0aHZhbHVlCi0gIE5PVCAoISkgICAxICAgICAgICAg ICAgICAgICAgICB0cnV0aHZhbHVlICAgICAgICAgIHRydXRodmFsdWUKLSAgJiAgICAgICAgIDEg b3IgbW9yZSAgICAgICAgICAgIG51bWJlciAoc2VlIG5vdGUgMikgaW50ZWdlcgotICB8ICAgICAg ICAgMSBvciBtb3JlICAgICAgICAgICAgbnVtYmVyIChzZWUgbm90ZSAyKSBpbnRlZ2VyCi0gICMg ICAgICAgICAyICAgICAgICAgICAgICAgICAgICBudW1iZXIgKHNlZSBub3RlIDIpIGludGVnZXIK LSAgfiAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgIG51bWJlciAoc2VlIG5vdGUgMikgaW50 ZWdlcgotICBJRiAgICAgICAgMiBvciAzICAgICAgICAgICAgICAgdHJ1dGh2YWx1ZSxhbnksYW55 ICBhbnkKLQotICAgT3BlcmF0b3JzIHRoYXQgZG9uJ3QgcmVxdWlyZSBhbnkgYXJndW1lbnRzIHJl dHVybiB0aGUgZGVmYXVsdCB2YWx1ZXMKLSAgIHNob3duLgotCi0gICAgMS4gVGhlIHZhbHVlIG9m ICIqIiwgd2hlbiB1c2VkIGFzIGFuIG9wZXJhbmQsIGlzIGluaXRpYWxseSAiMSIgYW5kIHRoZQot ICAgICAgIHZhbHVlIG9mIHRoZSBtb3N0IHJlY2VudCBTLUV4cHJlc3Npb24gdGhlcmVhZnRlciwg YXMgaW4gRnJhbnogTGlzcC4KLSAgICAgICBUaGlzIGlzIGhhbmR5IHdoZW4gZG9pbmcgYSBzZXJp ZXMgb2YgY2FsY3VsYXRpb25zIGJ5IGhhbmQ6Ci0gIEMtS2VybWl0PigqIDEzMjcyLjQyIDAuNDAp Ci0gICA1MzA4Ljk2OAotICBDLUtlcm1pdD4oLyAqIDIpCi0gICAyNjU0LjQ4NDAKLSAgQy1LZXJt aXQ+Ci0KLSAgICAyLiBUaGUgYml0d2lzZSBvcGVyYXRvcnMgY29lcmNlIHRoZWlyIG9wZXJhbmRz IHRvIGludGVnZXIgYnkKLSAgICAgICB0cnVuY2F0aW9uLgotCi0gICBbIFs1MTZdVG9wIF0gWyBb NTE3XUNvbnRlbnRzIF0gWyBbNTE4XUMtS2VybWl0IEhvbWUgXSBbIFs1MTldS2VybWl0Ci0gICBI b21lIF0KLQotOS41LiBWYXJpYWJsZXMKLQotICAgQXMgbm90ZWQgZWxzZXdoZXJlIGluIHRoaXMg ZGlzY3Vzc2lvbiwgYWxsIGJhY2tzbGFzaCBpdGVtcyAodmFyaWFibGVzCi0gICBzdWNoIGFzIFwl YSwgbWFjcm8gcGFyYW1ldGVycyBzdWNoIGFzIFwlMSwgYXJyYXkgZWxlbWVudHMgc3VjaCBhcwot ICAgXCZhW1wlaV0sIGJ1aWx0LWluIHZhcmlhYmxlcyBzdWNoIGFzIFx2KG5kYXRlKSwgYnVpbHQt aW4gZnVuY3Rpb25zIHN1Y2gKLSAgIGFzIFxmam9pbigpLCBtYWNybyBuYW1lcyBlbmNsb3NlZCBp biBcbSgpLCBccygpLCBvciBcOigpLCBldGMpIGFyZQotICAgZXZhbHVhdGVkIGF0ICJ0b3AgbGV2 ZWwiIGJlZm9yZSB0aGUgUy1FeHByZXNzaW9uIGlzIHNlbnQgdG8gdGhlCi0gICBTLUV4cHJlc3Np b24gcmVhZGVyLiBUbyB1c2UgYSBiYWNrc2xhc2ggdmFyaWFibGUgYXMgdGhlIHRhcmdldCBvZiBh bgotICAgYXNzaWdubWVudCAoZS5nLiBieSBTRVRRLCBMRVQsICsrLCBvciAtLSksIHlvdSBtdXN0 IGRvdWJsZSB0aGUKLSAgIGJhY2tzbGFzaCwgZS5nLiAoc2V0cSBcXCVyIDEyMzQpLiBUaGlzIGlz IGRpc2N1c3NlZCBhdCBncmVhdGVyIGxlbmd0aAotICAgaW4gdGhlIG5leHQgc2VjdGlvbi4KLQot ICAgVGh1cyBTLUV4cHJlc3Npb24gcmVhZGVyIGdlbmVyYWxseSBkZWFscyBvbmx5IHdpdGggbWFj cm8gbmFtZXMgKG5vdAotICAgYmFja3NsYXNoIGl0ZW1zKSBhcyB2YXJpYWJsZXMuIEl0IGlzIGlt cG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUKLSAgIHJlYWRlciBoYW5kbGVzIG1hY3JvIG5h bWVzLiBUaGVyZSBhcmUgZnVuZGFtZW50YWxseSB0d28ga2luZHMgb2YKLSAgIFMtRXhwcmVzc2lv bnM6IHRob3NlIHRoYXQgY29udGFpbiBhIHNpbmdsZSBlbGVtZW50LCBzdWNoIGFzOgotCi0gIChm b28pCi0KLSAgIGFuZCB0aG9zZSB0aGF0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBlbGVtZW50Ogot Ci0gIChmb28gYSBiIGMpCi0KLSAgIElmIGFuIFMtRXhwcmVzc2lvbiBjb250YWlucyBvbmx5IG9u ZSBlbGVtZW50LCBhbmQgaXQgaXMgdGhlIG5hbWUgb2YgYQotICAgbWFjcm8sIHRoZSBtYWNybydz IGRlZmluaXRpb24gaXMgZXhhbWluZWQuIElmIHRoZSBkZWZpbml0aW9uIGlzIGEKLSAgIG51bWJl ciAoaW50ZWdlciBvciBmbG9hdGluZy1wb2ludCwgcG9zaXRpdmUgb3IgbmVnYXRpdmUpLCB0aGVu IHRoaXMKLSAgIGJlY29tZXMgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLiBJZiB0aGUgZGVm aW5pdGlvbiBzdGFydHMgd2l0aCAnCi0gICAoYXBvc3Ryb3BoZSksIHRoZW4gdGhlIHF1b3RlZCB3 b3JkIG9yIHN0cmluZyBpcyB0aGUgdmFsdWUgb2YgdGhlCi0gICBleHByZXNzaW9uIChleHBsYWlu ZWQgaW4gWzUyMF1TZWN0aW9uIDkuOCkuIE90aGVyd2lzZSwgdGhlIG1hY3JvIGlzCi0gICBhc3N1 bWVkIHRvIGJlIGNvbXBvc2VkIG9mIEtlcm1pdCBjb21tYW5kcyAocG9zc2libHkgaW5jbHVkaW5n Ci0gICBTLUV4cHJlc3Npb25zKSwgd2hpY2ggYXJlIGV4ZWN1dGVkLiBJZiB0aGUgbWFjcm8gaGFz IGEgUkVUVVJOIHZhbHVlLCBvcgotICAgaXQgZXhlY3V0ZXMgYW4gUy1FeHByZXNzaW9uIGFzIGl0 cyBsYXN0IGNvbW1hbmQsIHRoZSByZXN1bHQgYmVjb21lcyB0aGUKLSAgIHZhbHVlIG9mIHRoZSBT LUV4cHJlc3Npb247IG90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIGVtcHR5LgotCi0gICBGb3IgUy1F eHByZXNzaW9ucyB0aGF0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBlbGVtZW50LCBhbmQgdGhlIGZp cnN0Ci0gICBlbGVtZW50IGlzIHRoZSBuYW1lIG9mIGEgbWFjcm8sIHRoZW4gdGhpcyBtYWNybyBp cyBleGVjdXRlZCB3aXRoIHRoZQotICAgYXJndW1lbnRzIHRoYXQgYXJlIGdpdmVuLCBhZnRlciB0 aGUgYXJndW1lbnRzIGFyZSBldmFsdWF0ZWQgYnkgdGhlCi0gICBTLUV4cHJlc3Npb24gcmVhZGVy LiBMaWtld2lzZSwgSWYgdGhlIGZpcnN0IGVsZW1lbnQgaXMgYSBidWlsdC1pbgotICAgb3BlcmF0 b3IsIHRoZW4gaXQgaXMgYXBwbGllZCB0byB0aGUgb3BlcmFuZHMgYWZ0ZXIgdGhleSBhcmUgZXZh bHVhdGVkLgotICAgSW4gYm90aCBjYXNlcywgZWFjaCBvcGVyYW5kIGlzIGZlZCB0byB0aGUgUy1F eHByZXNzaW9uIHJlYWRlcgotICAgcmVjdXJzaXZlbHkgZm9yIGV2YWx1YXRpb24uIElmIGFuIG9w ZXJhbmQgaXMgYSBudW1iZXIgb3IgYSBxdW90ZWQKLSAgIHN0cmluZywgaXQgaXMgdXNlZCBhcy1p cy4gQnV0IGlmIGl0J3MgYSBtYWNybyBuYW1lLCB0aGlzIGRlZ2VuZXJhdGVzCi0gICBpbnRvIHRo ZSBmaXJzdCBjYXNlLCBhbmQgdGhlIHByZXZpb3VzIHBhcmFncmFwaCBhcHBsaWVzLgotCi0gICBF eGFtcGxlczoKLQotICBkZWZpbmUgZm9vIDEyMwotICAoZm9vKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVzdWx0OiAxMjMKLSAgZGVmaW5lIGZvbyAnYWJjCi0gIChmb28pICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ6IGFiYwotICBkZWZpbmUgZm9vICcob25l IHR3byB0aHJlZSkKLSAgKGZvbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3Vs dDogb25lIHR3byB0aHJlZQotICBkZWZpbmUgZm9vIHJldHVybiBcZnJhbmRvbSgxMDAwKQotICAo Zm9vKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0OiA3MTMgKG9yIG90aGVy IG51bWJlcikKLSAgZGVmaW5lIGZvbyAoKyBhIGIpCi0gIChmb28pICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZXN1bHQ6IFRoZSBzdW0gb2YgYSBhbmQgYgotCi0gICBBIG1vcmUgZGlm ZmljdWx0IGV4YW1wbGU6Ci0KLSAgZGVmaW5lIGZvbyBhYmMKLSAgKGZvbykgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJlc3VsdDogPz8/Ci0KLSAgIFRoZSByZXN1bHQgaW4gdGhlIGxh c3QgZXhhbXBsZSBkZXBlbmRzIG9uIHRoZSBkZWZpbml0aW9uIG9mIGFiYzoKLQotICAgICAqIElm IGl0IGhhcyBubyBkZWZpbml0aW9uLCBhbiBlcnJvciBvY2N1cnM7IG90aGVyd2lzZToKLSAgICAg KiBJZiB0aGUgZGVmaW5pdGlvbiBpcyBhbiBTLUV4cHJlc3Npb24sIHRoZSByZXN1bHQgaXMgdGhl Ci0gICAgICAgUy1FeHByZXNzaW9uJ3MgdmFsdWU7IG90aGVyd2lzZToKLSAgICAgKiBJZiB0aGUg ZGVmaW5pdGlvbiBjb25zaXN0cyBvZiBLZXJtaXQgY29tbWFuZHMsIHRoZXkgYXJlIGV4ZWN1dGVk LgotICAgICAgIEJ1dCBpbiB0aGlzIGNhc2UgIihmb28pIiBwcm9kdWNlcyB0aGUgZW1wdHkgcmVz dWx0LCBiZWNhdXNlIGl0Ci0gICAgICAgZG9lc24ndCBSRVRVUk4gYW55dGhpbmcuCi0KLSAgIFRo ZSB1c2Ugb2YgbWFjcm9zIGFzIFMtRXhwcmVzc2lvbiBvcGVyYXRvcnMgaXMgZGVzY3JpYmVkIGlu Ci0gICBbNTIxXVNlY3Rpb24gOS44LgotCi0gICBbIFs1MjJdVG9wIF0gWyBbNTIzXUNvbnRlbnRz IF0gWyBbNTI0XUMtS2VybWl0IEhvbWUgXSBbIFs1MjVdS2VybWl0Ci0gICBIb21lIF0KLQotOS42 LiBBc3NpZ25tZW50cyBhbmQgU2NvcGUKLQotICAgVGhlIGFzc2lnbm1lbnQgb3BlcmF0b3JzIFNF VFEgYW5kIExFVCBhcHBseSB0byBnbG9iYWwgYW5kIGxvY2FsCi0gICB2YXJpYWJsZXMsIHJlc3Bl Y3RpdmVseS4gU0VUUSBhbmQgTEVUIGFyZSBzdGFuZGFyZCBMaXNwIG9wZXJhdG9ycwotICAgYWRh cHRlZCB0byBLZXJtaXQgc2NvcGluZyBydWxlcy4gV2hlbiB0aGUgb3BlcmFuZHMgYXJlIG51bWVy aWMgb3IKLSAgIGFyaXRobWV0aWMsIFNFVFEgaXMgZXF1aXZhbGVudCB0byBLZXJtaXQncyBFVkFM VUFURSBjb21tYW5kOgotCi0gIChzZXRxIGEgKCsgMSAyKSkKLSAgZXZhbHVhdGUgYSAxICsgMgot Ci0gICBXaGVuIHRoZSBvcGVyYW5kIGlzIGEgc3RyaW5nLCBTRVRRIGlzIGVxdWl2YWxlbnQgdG8g REVGSU5FOgotCi0gIChzZXRxIGEgJyh0aGlzIGlzIGEgc3RyaW5nKSkKLSAgZGVmaW5lIGEgdGhp cyBpcyBhIHN0cmluZwotCi0gICBJbiB0aGUgZmlyc3QgY2FzZSwgYm90aCBzdGF0ZW1lbnRzIGNy ZWF0ZSBhIG1hY3JvIG5hbWVkICJhIiB3aXRoIGEKLSAgIHZhbHVlIG9mIDMuIEJ1dCBpbiBuZWl0 aGVyIGNhc2UgaXMgdGhlIG1hY3JvICJhIiBuZWNlc3NhcmlseSBnbG9iYWwuIElmCi0gICBlaXRo ZXIgb2YgdGhlc2UgY29tbWFuZHMgZXhlY3V0ZXMgaW4gYW4gZW52aXJvbm1lbnQgKGkuZS4gbWFj cm8KLSAgIGludm9jYXRpb24gbGV2ZWwpIHdoZXJlIGEgImxvY2FsIGEiIGNvbW1hbmQgaGFzIGJl ZW4gZ2l2ZW4sIHRoZSAiYSIKLSAgIG1hY3JvIGlzIGdsb2JhbCB0byB0aGF0IGVudmlyb25tZW50 LCBidXQgaXMgbm90IHZpc2libGUgb3V0c2lkZSBpdC4KLQotICAgTEVUIGlzIGVxdWl2YWxlbnQg dG8gdGhlIEtlcm1pdCBMT0NBTCBjb21tYW5kLCBmb2xsb3dlZCBieSB0aGUKLSAgIGNvcnJlc3Bv bmRpbmcgRVZBTFVBVEU6Ci0KLSAgKGxldCBhICgrIDEgMikpCi0KLSAgIGlzIGVxdWl2YWxlbnQg dG86Ci0KLSAgbG9jYWwgYQotICBldmFsdWF0ZSBhIDEgKyAyCi0KLSAgIEFnYWluLCAibG9jYWwi IGluIHRoaXMgY29udGV4dCBhcHBsaWVzIHRvIHRoZSBLZXJtaXQgbWFjcm8gaW52b2NhdGlvbgot ICAgc3RhY2ssIG5vdCB0byB0aGUgUy1FeHByZXNzaW9uIG5lc3RpbmcgbGV2ZWwuIFRvIGlsbHVz dHJhdGUsIHJlY2FsbCBvdXIKLSAgICJuZXdhcmVhIiBtYWNybzoKLQotZGVmIG5ld2FyZWEgewot ICAgIChsZXQgYSBcJTEgYiBcJTIgYyBcJTMpCi0gICAgKGxldCBzICgvICgrIGEgYiBjKSAyLjAp KQotICAgIChzcXJ0ICgqIHMgKC0gcyBhKSAoLSBzIGIpICgtIHMgYykpKQotfQotCi0gICBCZWNh dXNlIFNFVFEgYW5kIExFVCBleHByZXNzaW9ucyByZXR1cm4gYSB2YWx1ZSwgdGhleSBjYW4gYmUg cGxhY2VkCi0gICB3aXRoaW4gYSBsYXJnZXIgUy1FeHByZXNzaW9uLiBJbiB0aGlzIGNhc2Ugd2Ug Y2FuIHJlcGxhY2UgdGhlIGZpcnN0Ci0gICByZWZlcmVuY2UgdG8gdGhlICJzIiB2YXJpYWJsZSBi eSBpdHMgZGVmaW5pbmcgZXhwcmVzc2lvbjoKLQotZGVmIG5ld2FyZWEgewotICAgIChsZXQgYSBc JTEgYiBcJTIgYyBcJTMpCi0gICAgKHNxcnQgKCogKGxldCBzICgvICgrIGEgYiBjKSAyLjApKSAo LSBzIGEpICgtIHMgYikgKC0gcyBjKSkpCi19Ci0KLSAgIFRoaXMgd291bGQgbm90IHdvcmsgaWYg TEVUIHdlcmUgbG9jYWwgdG8gdGhlIFMtRXhwcmVzc2lvbiwgYnV0IGl0IHdvcmtzCi0gICBuaWNl bHkgaW4gdGhlIGNvbnRleHQgb2YgS2VybWl0IG1hY3Jvcy4gVGhlIHByZXZpb3VzIGRlZmluaXRp b24gaXMKLSAgIGVxdWl2YWxlbnQgdG86Ci0KLWRlZiBuZXdhcmVhIHsKLSAgICBsb2NhbCBhIGIg YyBzCi0gICAgKHNldHEgYSBcJTEgYiBcJTIgYyBcJTMpCi0gICAgKHNxcnQgKCogKHNldHEgcyAo LyAoKyBhIGIgYykgMi4wKSkgKC0gcyBhKSAoLSBzIGIpICgtIHMgYykpKQotfQotCi0gICBJbiBi b3RoIGNhc2VzLCB0aGUgdmFyaWFibGVzIGEsIGIsIGMsIGFuZCBzIGFyZSBsb2NhbCB0byB0aGUg Im5ld2FyZWEiCi0gICBtYWNybywgYW5kIGdsb2JhbCB3aXRoaW4gaXQuCi0KLSAgIE11bHRpcGxl IGFzc2lnbm1lbnRzIGNhbiBiZSBoYW5kbGVkIGluIHNldmVyYWwgd2F5cy4gSGVyZSBpcyB0aGUK LSAgIG9idmlvdXMgd2F5IHRvIGluaXRpYWxpemUgYSBzZXJpZXMgb2YgdmFyaWFibGVzIHRvIHRo ZSBzYW1lIHZhbHVlOgotCi0gIChzZXRxIGEgMCkKLSAgKHNldHEgYiAwKQotICAoc2V0cSBjIDAp Ci0gIChzZXRxIHMgMCkKLQotICAgSGVyZSBpcyBhIG1vcmUgY29tcGFjdCBhbmQgZWZmaWNpZW50 IHdheSBvZiBkb2luZyB0aGUgc2FtZSB0aGluZzoKLQotICAoc2V0cSBhIDAgYiAwIGMgMCBzIDAp Ci0KLSAgIEhvd2V2ZXIsIGluIGNhc2UgdGhlIHZhbHVlIHdhcyBtb3JlIGNvbXBsZXgsIGl0J3Mg YmV0dGVyIHRvIHB1dCBvbmx5Ci0gICBvbmUgY29weSBvZiBpdCBpbiB0aGUgUy1FeHByZXNzaW9u OyBpbiB0aGlzIGNhc2Ugd2UgcmVseSBvbiB0aGUgZmFjdAotICAgdGhhdCBTRVRRIHJldHVybnMg dGhlIHZhbHVlIG9mIGl0cyBsYXN0IGFzc2lnbm1lbnQ6Ci0KLSAgKHNldHEgYSAoc2V0cSBiIChz ZXRxIGMgKHNldHEgcyAoKiB4ICheIHkgMikpKSkpKQotCi0gICBTaW1pbGFybHksIHRvIHNldCBh IHNlcmllcyBvZiB2YXJpYWJsZXMgdG8geCwgeCsxLCB4KzIsIC4uLgotCi0gIChzZXRxIGMgKCsg KHNldHEgYiAoKyAoc2V0cSBhICgrIChzZXRxIHMgeCkgMSkpIDEpKSAxKSkKLQotICAgSW4gdGhl IGxhc3QgZXhhbXBsZSwgeW91IGNhbiBzZWUgd2h5ICJsYXN0IiBkb2VzIG5vdCBhbHdheXMgY29y cmVzcG9uZAotICAgdG8gInJpZ2h0bW9zdCIgKHRoZSBsZWZ0bW9zdCB2YXJpYWJsZSAiYyIgaXMg YXNzaWduZWQgbGFzdCkuCi0KLSAgIElmIHlvdSBhcmUgd29ya2luZyB3aXRoIGJhY2tzbGFzaCB2 YXJpYWJsZXMgbGlrZSBcJWEgb3IgYXJyYXkgZWxlbWVudHMKLSAgIGxpa2UgXCZhWzFdLCByZW1l bWJlciB0d28gcnVsZXM6Ci0gICAgMS4gRG9uJ3QgcHV0IHNwYWNlcyBpbnNpZGUgYXJyYXkgYnJh Y2tldHMuCi0gICAgMi4gWW91IG11c3QgZG91YmxlIHRoZSBiYWNrc2xhc2ggd2hlbiB1c2luZyBT RVRRLCBMRVQsICsrLCBvciAtLSB0bwotICAgICAgIGFzc2lnbiBhIHZhbHVlIHRvIGEgYmFja3Ns YXNoIHZhcmlhYmxlLgotCi0gICBFeGFtcGxlcyBvZiBhc3NpZ25pbmcgdG8gYSBiYWNrc2xhc2gg dmFyaWFibGU6Ci0KLSAgKHNldHEgeCAxKQotICAoc2V0cSBcXCVhIDApCi0gIChzZXRxIFxcJmFb eCsxXSAxKQotICAoKysgXFwleCkKLSAgKC0tIFxcJmFbeCsyXSkKLQotICAgRXhhbXBsZXMgb2Yg cmVmZXJyaW5nIHRvIGEgYmFja3NsYXNoIHZhcmlhYmxlJ3MgdmFsdWU6Ci0KLSAgKHNldHEgYSAo KyBcJWEgMSkpCi0gIChzZXRxIGIgKCsgXCVhIFwmYVsxXSkpCi0gICgrKyBhIFwleCkKLSAgKC0t IGIgXCZhWzFdKQotCi0gICBUaGUgc3BlY2lhbCBub3RhdGlvbiBpcyByZXF1aXJlZCBiZWNhdXNl IGFsbCBiYWNrc2xhc2hlZCBpdGVtcyAoXCV4Ci0gICB2YXJpYWJsZXMsIGFycmF5IGVsZW1lbnRz LCBidWlsdC1pbiBcdih4eHgpIHZhcmlhYmxlcywgYW5kIFxmeHh4KCkKLSAgIGZ1bmN0aW9uIGlu dm9jYXRpb25zKSBhcmUgZXZhbHVhdGVkIGluIGEgc2luZ2xlIHBhc3MgQkVGT1JFIHRoZQotICAg Uy1FeHByZXNzaW9uIGlzIGV4ZWN1dGVkOyBhbnkgb3RoZXIgYXBwcm9hY2ggd291bGQgcmVzdWx0 IGluCi0gICB1bmFjY2VwdGFibGUgcGVyZm9ybWFuY2UuIFNvLCBmb3IgZXhhbXBsZSwgaW46Ci0K LSAgZGVjbGFyZSBcJmFbXSA9IDEgMiAzCi0gIGRlZmluZSBcJXggNAotICBkZWZpbmUgXCV5IDAK LSAgKHNldHEgXFwleSAoKyBcJXggXCZhWzFdKSkKLQotICAgdGhlIFMtRXhwcmVzc2lvbiBiZWNv bWVzOgotCi0gIChzZXRxIFwleSAoKyA0IDEpKQotCi0gICBiZWZvcmUgaXQgaXMgc2VudCB0byB0 aGUgUy1FeHByZXNzaW9uIGV2YWx1YXRvci4gSWYgdGhlIGJhY2tzbGFzaCBoYWQKLSAgIG5vdCBi ZWVuIGRvdWJsZWQgb24gdGhlIGFzc2lnbm1lbnQgdGFyZ2V0LCB0aGUgcmVzdWx0IHdvdWxkIGhh dmUgYmVlbjoKLQotICAoc2V0cSAwICgrIDQgMSkpCi0KLSAgIHdoaWNoIGlzIGlsbGVnYWwgYmVj YXVzZSB5b3UgY2FuJ3QgYXNzaWduIGEgdmFsdWUgdG8gYSBudW1iZXIuCi0gICBDb252ZXJzZWx5 LCBpZiBiYWNrc2xhc2hlcyB3ZXJlIGRvdWJsZWQgb24gcmlnaHQtaGFuZC1zaWRlIHZhbHVlczoK LQotICAoc2V0cSBcXCV5ICgrIFxcJXggXFwmYVsxXSkKLQotICAgdGhpcyB0b28sIHdvdWxkIGdp dmUgYW4gZXJyb3IgKG5vdCBudW1lcmljIC0gIlwleCIpLgotCi0gICBJZiB5b3Ugb21pdCB0aGUg ZG91YmxlIGJhY2tzbGFzaCBpbiB0aGUgYXNzaWdubWVudCB0YXJnZXQsIHRoZSByZXN1bHQKLSAg IGRlcGVuZHMgb24gd2hldGhlciB0aGUgdmFyaWFibGUgYWxyZWFkeSBoYXMgYSB2YWx1ZToKLQot ICAoc2V0cSBcJWEgKCogMyAzKSkKLQotICAgSWYgXCVhIGhhcyBhIG5vbi1udW1lcmljIHNpbmds ZS13b3JkIHZhbHVlLCB0aGVuIHRoaXMgYmVjb21lcyB0aGUgbmFtZQotICAgb2YgdGhlIHZhcmlh YmxlIHRoYXQgaXMgYXNzaWduZWQgYnkgU0VUUS4gVG8gaWxsdXN0cmF0ZToKLQotICBkZWZpbmUg XCVhIGZvbwotICBlY2hvIFwlYQotICBmb28KLSAgKHNldHEgXCVhICgqIDMgMykpCi0gIGVjaG8g XCVhCi0gIGZvbwotICBzaG93IG1hY3JvIGZvbwotICBmb28gPSA5Ci0KLSAgIElmIFwlYSBoYXMg bm8gdmFsdWUsIGEgbnVtZXJpYyB2YWx1ZSwgb3IgYSBtdWx0aXdvcmQgdmFsdWUsIGFuICJpbnZh bGlkCi0gICBhc3NpZ25tZW50IiBlcnJvciBvY2N1cnMuCi0KLSAgIFsgWzUyNl1Ub3AgXSBbIFs1 MjddQ29udGVudHMgXSBbIFs1MjhdQy1LZXJtaXQgSG9tZSBdIFsgWzUyOV1LZXJtaXQKLSAgIEhv bWUgXQotCi05LjcuIENvbmRpdGlvbmFsIEV4cHJlc3Npb25zCi0KLSAgIFRoZSBJRiBvcGVyYXRv ciBwcm92aWRlcyBhIGNvbXBhY3QgZm9ybSBvZiBkZWNpc2lvbi1tYWtpbmcgd2l0aGluCi0gICBT LUV4cHJlc3Npb25zLiBBbiBJRiBleHByZXNzaW9uIGNhbiBzdGFuZCB3aGVyZXZlciBhIG51bWJl ciBtaWdodAotICAgc3RhbmQsIGFzIGxvbmcgaXMgaXQgcmV0dXJucyBhIG51bWJlci4gSGVyZSdz IGEgcXVpY2sgd2F5IHRvIG9idGFpbiB0aGUKLSAgIGF2ZXJhZ2UgdmFsdWUgb2YgYWxsIHRoZSBl bGVtZW50cyBpbiBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIG9ubHkKLSAgIG51bWJlcnM6Ci0KLSAg KC8gKCsgXGZqb2luKCZhKSkgKGZsb2F0IFxmZGltKCZhKSkpCi0KLSAgIFRoaXMgcmVzdWx0cyBp biBhICJEaXZpZGUgYnkgemVybyIgZXJyb3IgaWYgdGhlIGFycmF5IGlzIGVtcHR5LiBJZiB5b3UK LSAgIHdhbnQgdG8gZGVmaW5lIHRoZSBhdmVyYWdlIHZhbHVlIG9mIGFuIGVtcHR5IGFycmF5IHRv IGJlIDAgaW5zdGVhZCBvZgotICAgZ2V0dGluZyBhbiBlcnJvciwgeW91IGNhbiB1c2UgSUYgdG8g Y2hlY2sgdGhlIGFycmF5IHNpemU6Ci0KLSAgKGlmIFxmZGltKCZhKSAoLyAoKyBcZmpvaW4oJmEp KSAoZmxvYXQgXGZkaW0oJmEpKSkgMCkKLQotICAgb3IgZXF1aXZhbGVudGx5OgotCi0gIChpZiAo bm90IFxmZGltKCZhKSkgMCAoLyAoKyBcZmpvaW4oJmEpKSAoZmxvYXQgXGZkaW0oJmEpKSkpCi0K LSAgIE9mIGNvdXJzZSwgSUYgY2FuIGZpdCBhbnl3aGVyZSBlbHNlIGludG8gYW4gUy1FeHByZXNz aW9uOgotCi0gIChzZXRxIGEgKCsgYiAoaWYgKDwgYyAwKSAwIGMpKSkKLQotICAgYW5kIHRoZSBJ RiBleHByZXNzaW9uIGNhbiBiZSBhcyBjb21wbGV4IGFzIHlvdSBsaWtlOgotCi0gIChzZXRxIGEg KCsgYiAoaWYgKGFuZCAob3IgKD4geCAwKSAoPiB5IDApKSAoPCBjIDApICg+IGQgMSkgKCE9IGUg MCkpIDEgMCkpKQotCi0gICBhbmQgdGhlICJ0aGVuIiBhbmQgImVsc2UiIHBhcnRzIGNhbiBjb250 YWluIG11bHRpcGxlIFMtRXhwcmVzc2lvbnMKLSAgIGVuY2xvc2VkIHdpdGhpbiAoRVZBTCAuLi4p OgotCi0gIChpZiB4IChldmFsICguLi4pICguLi4pICguLi4pKSAoZXZhbCAoLi4uKSAoLi4uKSAo Li4uKSkpCi0KLSAgIEFORCBhbmQgT1Igb3BlcmF0b3JzIGFyZSBndWFyYW50ZWVkIHRvICJzaG9y dCBjaXJjdWl0Ii4gSWYgYW55IG9wZXJhbmQKLSAgIG9mIEFORCBpcyBmYWxzZSwgbm9uZSBvZiB0 aGUgc3Vic2VxdWVudCBvcGVyYW5kcyBpcyBldmFsdWF0ZWQ7Ci0gICBsaWtld2lzZSwgaWYgYW4g T1Igb3BlcmFuZCBpcyB0cnVlLCBubyBmdXJ0aGVyIG9wZXJhbmRzIGFyZSBldmFsdWF0ZWQuCi0K LSAgIEJlYXIgaW4gbWluZCB0aGF0IHRoZSBTLUV4cHJlc3Npb24gSUYgaXMgbm90IHRoZSBzYW1l IGFzIEtlcm1pdCBJRjsgdGhlCi0gICBjb25kaXRpb24gaXMgb25seSBhbGxvd2VkIHRvIGJlIGFu IFMtRXhwcmVzc2lvbiBvciBhIHZhcmlhYmxlIG9yCi0gICBudW1iZXIsIG5vdCB0aGUgd2hvbGUg bGlzdCBvZiBwb3NzaWJpbGl0aWVzIHlvdSBzZWUgd2hlbiB5b3UgdHlwZSAiaWYKLSAgID8iIGF0 IHRoZSBDLUtlcm1pdD4gcHJvbXB0LiBCdXQga2VlcCByZWFkaW5nLi4uCi0KLSAgIFsgWzUzMF1U b3AgXSBbIFs1MzFdQ29udGVudHMgXSBbIFs1MzJdQy1LZXJtaXQgSG9tZSBdIFsgWzUzM11LZXJt aXQKLSAgIEhvbWUgXQotCi05LjguIEV4dGVuc2liaWxpdHkKLQotICAgVG8gZXh0ZW5kIHRoZSBj YXBhYmlsaXRpZXMgb2YgUy1FeHByZXNzaW9ucywgeW91IGNhbiB1c2UgS2VybWl0IG1hY3JvCi0g ICBuYW1lcyBhcyBvcGVyYXRvcnMsIHdpdGggdGhlIGZvbGxvd2luZyBsaW1pdGF0aW9uczoKLQot ICAgICAqIFRoZSBtYWNybyBtdXN0IG5vdCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgYSBidWlsdC1p biBvcGVyYXRvci4KLSAgICAgKiBZb3UgbXVzdCB1c2UgdGhlIGZ1bGwgbWFjcm8gbmFtZSwgbm90 IGFuIGFiYnJldmlhdGlvbi4KLQotICAgQW5kIHdpdGggdGhlIGZvbGxvd2luZyBlbmhhbmNlbWVu dDoKLQotICAgICAqIElmIHRoZSBsYXN0IHN0YXRlbWVudCBleGVjdXRlZCBieSB0aGUgbWFjcm8g aXMgYW4gUy1FeHByZXNzaW9uLCBpdHMKLSAgICAgICB2YWx1ZSBpcyByZXR1cm5lZCBhdXRvbWF0 aWNhbGx5LiBJbiBvdGhlciB3b3JkczoKLQotICBkZWZpbmUgYnVtcCAoKysgXCUxKQotCi0gICBp cyBlcXVpdmFsZW50IHRvOgotCi0gIGRlZmluZSBidW1wIHJldHVybiBcZnNleHByZXNzaW9uKCsr IFwlMSkKLQotICAgSGVyZSdzIGFuIGV4YW1wbGUgaW4gd2hpY2ggd2UgZGVmaW5lIGEgRklCT05B Q0NJIG9wZXJhdG9yIHRoYXQgcmV0dXJucwotICAgdGhlIG50aCBlbGVtZW50LCBuID49IDAsIG9m IHRoZSBGaWJvbmFjY2kgc2VyaWVzLCAwIDEgMSAyIDMgNSA4IDEzIDIxCi0gICAzNCA1NSwgLiAu IC4sIGluIHdoaWNoIHRoZSBmaXJzdCBlbGVtZW50IGlzIDAsIHRoZSBzZWNvbmQgaXMgMSwgYW5k Ci0gICBlYWNoIHN1YnNlcXVlbnQgZWxlbWVudCBpcyB0aGUgc3VtIG9mIHRoZSB0d28gYmVmb3Jl IGl0LiBUaGlzIHNlcmllcwotICAgd2FzIGRldmlzZWQgYnkgTGVvbmFyZG8gUGlzYW5vLCBGaWxp dXMgQm9uYWNjaSAoRmlib25hY2NpIGZvciBzaG9ydCkgaW4KLSAgIDEyMDIgdG8gZGVzY3JpYmUg aG93IGZhc3QgcmFiYml0cyBjYW4gYnJlZWQsIGFuZCBhbHNvIGZvcm1zIHRoZSBiYXNpcwotICAg Zm9yIHRoZSBHb2xkZW4gTWVhbiwgdGhlIGJyYW5jaGluZyBiZWhhdmlvciBvZiBwbGFudHMsIHRo ZSBzcGlyYWwgb2YgYQotICAgbmF1dGlsdXMgc2hlbGwsIGV0Yy4gKFRoYW5rcyB0byBbNTM0XURh dCBUaHVjIE5ndXllbiBmb3IgRGVjZW1iZXIgMjAwMwotICAgY29ycmVjdGlvbnMgdG8gdGhpcyBz ZWN0aW9uISkKLQotICAgV2UgY2FuIHdyaXRlIGEgRklCT05BQ0NJIGZ1bmN0aW9uIGFzIGEgbWFj cm8gZWFzaWx5IHdpdGggUy1FeHByZXNzaW9uczoKLQotICBkZWZpbmUgRklCT05BQ0NJIHsKLSAg ICAoaWYgKD09IFwlMSAwKSAwCi0gICAgICAgIChpZiAoPT0gXCUxIDEpIDEgKCsgKGZpYm9uYWNj aSAoLSBcJTEgMikpIChmaWJvbmFjY2kgKC0gXCUxIDEpKSkpKQotICB9Ci0KLSAgIFlvdSBjYW4g cmVhZCB0aGlzIGFzOgotCi0gICAgIElmIHRoZSBhcmd1bWVudCAoXCUxKSBpcyAwLCByZXR1cm4g YSByZXN1bHQgb2YgMDsgaWYgaXQgaXMgMSwKLSAgICAgcmV0dXJuIDE7IG90aGVyd2lzZToKLSAg ICAgcmV0dXJuIHRoZSBzdW0gb2YgZmlib25hY2NpKGFyZ3VtZW50IC0gMikgYW5kIGZpYm9uYWNj aShhcmd1bWVudCAtCi0gICAgIDEpCi0KLSAgIE5vdGUgdGhhdCBhIFJFVFVSTiBzdGF0ZW1lbnQg aXMgbm90IG5lZWRlZCwgc2luY2UgUy1FeHByZXNzaW9ucwotICAgYXV0b21hdGljYWxseSBzZXQg dGhlIHJldHVybiB2YWx1ZSBvZiB0aGVpciBjb250YWluaW5nIG1hY3Jvcy4KLQotICAgRm9yIGNv bXBhcmlzb24sIGhlcmUncyBob3cgaXQgd291bGQgYmUgY29kZWQgd2l0aG91dCBTLUV4cHJlc3Np b25zOgotCi0gIGRlZmluZSBGSUJPTkFDQ0kgewotICAgICAgaWYgPT0gXCUxIDAgewotICAgICAg ICAgIHJldHVybiAwCi0gICAgICB9IGVsc2UgaWYgPT0gXCUxIDEgewotICAgICAgICAgIHJldHVy biAxCi0gICAgICB9IGVsc2UgewotICAgICAgICAgIHJldHVybiBcZmV2YWwoXGZleGVjKGZpYm9u YWNjaSBcZmV2YWwoXCUxLTIpKSAtCi0gICAgICAgICAgICAgICArIFxmZXhlYyhmaWJvbmFjY2kg XGZldmFsKFwlMS0xKSkpCi0gICAgICB9Ci0gIH0KLQotICAgTm93IHdlIGNhbiB1c2UgdGhlIEZJ Qk9OQUNDSSBmdW5jdGlvbiAod2hpY2hldmVyIHdheSB5b3Ugd3JpdGUgaXQpIGp1c3QKLSAgIGFz IGlmIGl0IHdlcmUgYSBidWlsdC1pbiBvcGVyYXRvcjoKLQotICAoZmlib25hY2NpIDYpCi0KLSAg IE9yOgotCi0gIChzZXRxIGEgMTApCi0gIChmaWJvbmFjY2kgYSkKLQotICAgV2l0aGluIFMtRXhw cmVzc2lvbnMgb25seSAobm90IG91dHNpZGUgdGhlbSksIFMtRXhwcmVzc2lvbnMgdGhlbXNlbHZl cwotICAgY2FuIGJlIHVzZWQgYXMgbWFjcm8gYXJndW1lbnRzOgotCi0gIChzZXRxIGEgMiBiIDQp Ci0gIChzZXRxIHggKGZpYm9uYWNjaSAoKiBhIGIgKSkpCi0KLSAgIFRoZSB2YWx1ZSBvZiB0aGUg Uy1FeHByZXNzaW9uIChpbiB0aGlzIGNhc2UgIjgiKSwgYW5kIG5vdCB0aGUKLSAgIFMtRXhwcmVz c2lvbiBpdHNlbGYsIGlzIHNlbnQgdG8gdGhlIG1hY3JvLgotCi0gICBZb3VyIG1hY3JvIGlzIHJl c3BvbnNpYmxlIGZvciBhcmd1bWVudCB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZy4gQQot ICAgcm9idXN0IEZpYm9uYWNjaSBtYWNybyB3b3VsZCBiZSBtb3JlIGxpa2UgdGhpczoKLQotICBk ZWZpbmUgRklCT05BQ0NJIHsKLSAgICAgIGlmIDwgXHYoYXJnYykgMiBlbmQgMSA/XCUwOiBNaXNz aW5nIGFyZ3VtZW50Ci0gICAgICBpZiA+IFx2KGFyZ2MpIDIgZW5kIDEgP1wlMDogVG9vIG1hbnkg YXJndW1lbnRzCi0gICAgICBpZiBub3QgaW50ZWdlciBcJTEgZW5kIDEgP1wlMDogSW50ZWdlcnMg b25seQotICAgICAgaWYgPCBcJTEgMSBlbmQgMSA/XCUwOiBBcmd1bWVudCBvdXQgb2YgcmFuZ2UK LSAgICAgIChpZiAoPT0gXCUxIDApIDAKLSAgICAgICAgIChpZiAoPT0gXCUxIDEpIDEgKCsgKGZp Ym9uYWNjaSAoLSBcJTEgMikpIChmaWJvbmFjY2kgKC0gXCUxIDEpKSkpKQotICB9Ci0KLSAgIFJl Y2FsbCB0aGF0ICJFTkQgbm9uemVyby1udW1iZXIgWyBtZXNzYWdlIF0iIGNhdXNlcyBhIG1hY3Jv IGludm9jYXRpb24KLSAgIHRvIGZhaWwuIFdoZW4gdGhlIG1hY3JvIGlzIHRoZSBvcGVyYXRvciBp biBhbiBTLUV4cHJlc3Npb24sIHRoaXMgbWFrZXMKLSAgIHRoZSBTLUV4cHJlc3Npb24gZmFpbCB0 b28uIEFsc28gbm90ZSB0aGF0IG91ciBGaWJvbmFjY2kgbWFjcm8gaXMganVzdAotICAgYW4gaWxs dXN0cmF0aW9uLCBub3QgYSBwcmFjdGljYWwgZXhhbXBsZS4gU2luY2UgaXQgaXMgcmVjdXJzaXZl IChjYWxscwotICAgaXRzZWxmKSwgaXQgd29uJ3Qgd29yayBmb3IgbGFyZ2UgYXJndW1lbnRzIGJl Y2F1c2UgdGhlIGNhbGwgc3RhY2sgY2FuCi0gICBleGNlZWQgYXZhaWxhYmxlIG1lbW9yeS4gU2Vl IFs1MzVdU2VjdGlvbiA5LjkuMiBmb3IgYSBwcmFjdGljYWwKLSAgIGFsdGVybmF0aXZlLgotCi0g ICBLZXJtaXQgbWFjcm9zLCB3aGVuIHVzZWQgYXMgUy1FeHByZXNzaW9uIG9wZXJhdG9ycywgY2Fu IGRvIGFueXRoaW5nIGF0Ci0gICBhbGwgZXhjZXB0IGluaXRpYXRlIGZpbGUgdHJhbnNmZXJzOiB0 aGV5IGNhbiBwcmludCBtZXNzYWdlcyBvbiB0aGUKLSAgIHNjcmVlbiwgcmVhZCBhbmQgd3JpdGUg ZmlsZXMsIGludGVyYWN0IHdpdGggdGhlIHVzZXIsIGFuZCBzbyBvbi4gRm9yCi0gICBleGFtcGxl LCBoZXJlJ3MgYSBtYWNybyBBU0tNRSB0aGF0IGFza3MgeW91IHRvIGVudGVyIGEgbnVtYmVyLCBt YWtlcwotICAgc3VyZSB0aGF0IHlvdSBkaWQsIGFuZCB0aGVuIHJldHVybnMgaXRzIHZhbHVlIGZv ciB1c2UgaW4gdGhlCi0gICBTLUV4cHJlc3Npb246Ci0KLSAgZGVmaW5lIEFTS01FIHsKLSAgICAg IGxvY2FsIFwlbgotICAgICAgd2hpbGUgdHJ1ZSB7Ci0gICAgICAgICAgYXNrIFwlbiB7IE51bWJl cjogfQotICAgICAgICAgIGlmIG5vdCBkZWYgXCVuIGNvbnRpbnVlCi0gICAgICAgICAgaWYgbm90 IG51bWVyaWMgXCVuIHsKLSAgICAgICAgICAgICAgZWNobyBOb3QgbnVtZXJpYyAtICJcJW4iCi0g ICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrCi0gICAg ICB9Ci0gICAgICByZXR1cm4gXCVuCi0gIH0KLSAgKHNldHEgYSAoKiAyIChhc2ttZSkpKSA7IEdl dCBudW1iZXIgZnJvbSB1c2VyLCBkb3VibGUgaXQsIGFzc2lnbiByZXN1bHQgdG8gYS4KLQotICAg SGVyZSdzIGEgbWFjcm8geW91IGNhbiB1c2UgdG8gdmFsaWRhdGUgdGhhdCBhIG51bWJlciBpcyBp biBhIGdpdmVuCi0gICByYW5nZToKLQotICBkZWZpbmUgaW5yYW5nZSB7Ci0gICAgICBpZiAhPSBc dihhcmdjKSA0IGVuZCAxID9cJTA6IFdyb25nIG51bWJlciBvZiBhcmd1bWVudHMKLSAgICAgIGlm ICggPCBcJTEgXCUyIHx8ID4gXCUxIFwlMyApIHJldHVybiAwCi0gICAgICByZXR1cm4gMQotICB9 Ci0KLSAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgbnVtYmVyIHRvIGJlIGNoZWNrZWQsIHRo ZSBzZWNvbmQgaXMgdGhlCi0gICBtaW5pbXVtIGFjY2VwdGFibGUgdmFsdWUsIHRoZSB0aGlyZCBp cyB0aGUgbWF4aW11bS4gWW91IGNhbiB1c2UgdGhpcwotICAgKGZvciBleGFtcGxlKSBpbiBJRiBj b25kaXRpb25zOgotCi0gIGRlZmluZSB5ZXMgZWNobyBcJTEgSVMgT0sKLSAgZGVmaW5lIG5vIGVj aG8gXCUxIElTIE5PVCBPSwotCi0gIChzZXRxIGEgLTEgYiA5OTkpCi0gIChpZiAoaW5yYW5nZSBh IDAgMTAwKSAoeWVzIGEpIChubyBhKSkKLSAgKGlmIChpbnJhbmdlIGIgLTEwMDAgKzEwMDApICh5 ZXMgYikgKG5vIGIpKQotCi0gICBUaGlzIGlzIGp1c3QgYW4gaWxsdXN0cmF0aW9uLCBvZiBjb3Vy c2U7IHRoZXJlJ3MgYWxyZWFkeSBhIGJ1aWx0LWluCi0gICBvcGVyYXRvciB0byBsZXQgeW91IGRv IHJhbmdlIGNoZWNraW5nIHdpdGhvdXQgaGVscCBmcm9tIG1hY3JvczoKLQotICAoaWYgKDw9IDAg YSAxMDApICh5ZXMgYSkgKG5vIGEpKQotICAoaWYgKDw9IC0xMDAwIGIgKzEwMDApICh5ZXMgYikg KG5vIGIpKQotCi0gICBUbyBzZW5kIHN0cmluZyBwYXJhbWV0ZXJzIHRvIGEgbWFjcm8sIHNvbWUg a2luZCBvZiBxdW90aW5nIGlzIHJlcXVpcmVkCi0gICB0byB0ZWxsIHRoZSBTLUV4cHJlc3Npb24g cGFyc2VyIHRvIHRha2UgYSBnaXZlbiAid29yZCIgbGl0ZXJhbGx5IHJhdGhlcgotICAgdGhhbiBy ZXBsYWNpbmcgaXQgYnkgaXRzIHZhbHVlLiBGb3IgdGhpcyB3ZSB1c2UgdGhlIExpc3AgUVVPVEUK LSAgIG9wZXJhdG9yOgotCi0gIGRlZmluZSBsZW5ndGggcmV0dXJuIFxmbGVuZ3RoKFwlMSkKLSAg KGxlbmd0aCAocXVvdGUgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXopKQotICAyNgotCi0gICBU aGlzIGNhdXNlcyB0aGUgc3RyaW5nICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIgdG8gYmUg c2VudAotICAgbGl0ZXJhbGx5IHRvIHRoZSBMRU5HVEggbWFjcm8uIEtlcm1pdCwgbGlrZSBMaXNw LCBhbHNvIG9mZmVycyBhCi0gICBzaG9ydGN1dCBmb3IgUVVPVEUsIHRoYXQgbGV0cyB1cyBxdW90 ZSBhIHdvcmQgYnkgcHJlZml4aW5nIGl0IHdpdGggYQotICAgc2luZ2xlIHF1b3RlICgnKSBjaGFy YWN0ZXIsIGFsc28gY2FsbGVkIGFwb3N0cm9waGUgKEFTQ0lJIDM5KToKLQotICAobGVuZ3RoICdh YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eikKLSAgMjYKLQotICAgVGhlIHR3byBmb3JtcyBhcmUg ZXF1aXZhbGVudC4KLQotICAgSG93IHRoZSBtYWNybyB0cmVhdHMgaXRzIGFyZ3VtZW50cyBpcyB1 cCB0byB0aGUgbWFjcm8uIEluIHRoZSBleGFtcGxlCi0gICBhYm92ZSwgdGhlIGFyZ3VtZW50IGlz IHRyZWF0ZWQgYXMgYSBsaXRlcmFsIHN0cmluZy4gSG93ZXZlciwgaXQgY2FuCi0gICBhbHNvIGJl IHRyZWF0ZWQgYXMgYSB2YXJpYWJsZSBuYW1lOgotCi0gIGRlZmluZSBzdHJpbmcgVGhpcyBpcyBh IHN0cmluZwotICBkZWZpbmUgbGVuZ3RoIHJldHVybiBcZmxlbmd0aChcbShcJTEpKQotICAobGVu Z3RoICdzdHJpbmcpCi0gIDE2Ci0KLSAgIE5vdGUgdGhlIGNvbnN0cnVjdCBcbShcJTEpLiBUaGlz IG1lYW5zICJ0aGUgdmFsdWUgb2YgdGhlIG1hY3JvIHdob3NlCi0gICBuYW1lIGlzIHRoZSB2YWx1 ZSBvZgotICAgXCUxIi4gVGhlIHZhbHVlIG9mIFwlMSBpbiB0aGlzIGNhc2UgaXMgdGhlIHdvcmQg InN0cmluZyIsIGFuZCB0aGUgdmFsdWUKLSAgIG9mIHRoZSBtYWNybyB3aG9zZSBuYW1lIGlzICJz dHJpbmciIGlzICJUaGlzIGlzIGEgc3RyaW5nIi4KLQotICAgV2hhdCBpZiB0aGUgbWFjcm8gdGFr ZXMgbXVsdGlwbGUgYXJndW1lbnRzLCBvciBhIHZhcmlhYmxlIG51bWJlciBvZgotICAgdGhlbT8g SGVyZSdzIGEgc2ltcGxlIG1hY3JvIHRoYXQgcHJpbnRzIGEgcGhyYXNlIHRoYXQgaW5jbHVkZXMg aXRzCi0gICBhcmd1bWVudHM6Ci0KLSAgZGVmaW5lIGNvbXBsYWluIGVjaG8gSXQncyB0b28gXCUq IQotCi0gICAoUmVjYWxsIHRoYXQgXCUqIG1lYW5zICJhbGwgYXJndW1lbnRzIi4pCi0KLSAgIEl0 IGNhbiBiZSBjYWxsZWQgaW4gdGhlIHRyYWRpdGlvbmFsIHdheToKLQotICBjb21wbGFpbiBob3Qg ICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdDogIkl0J3MgdG9vIGhvdCEiCi0gIGNvbXBsYWlu IGNvbGQgYW5kIHdldCAgICAgICAgICAgICAgUmVzdWx0OiAiSXQncyB0b28gY29sZCBhbmQgd2V0 ISIKLQotICAgT3IgZnJvbSBhbiBTLUV4cHJlc3Npb24gaWYgeW91IHF1b3RlIHRoZSBhcmd1bWVu dHM6Ci0KLSAgKGNvbXBsYWluICdob3QpICAgICAgICAgICAgICAgICAgICBSZXN1bHQ6ICJJdCdz IHRvbyBob3QhIgotICAoY29tcGxhaW4gJ2NvbGQgJ2FuZCAnd2V0KSAgICAgICAgIFJlc3VsdDog Ikl0J3MgdG9vIGNvbGQgYW5kIHdldCEiCi0KLSAgIFRvIGdyb3VwIG11bHRpcGxlIHdvcmRzIGlu dG8gYSBzaW5nbGUgYXJndW1lbnQsIHVzZSBwYXJlbnRoZXNlczoKLQotICAoY29tcGxhaW4gKHF1 b3RlIChjb2xkIGFuZCB3ZXQpKSkgIFJlc3VsdDogIkl0J3MgdG9vIGNvbGQgYW5kIHdldCEiCi0g IChjb21wbGFpbiAnKGNvbGQgYW5kIHdldCkpICAgICAgICAgUmVzdWx0OiAiSXQncyB0b28gY29s ZCBhbmQgd2V0ISIKLQotICAgTm90ZSB0aGUgZGlmZmVyZW5jZToKLQotICAoY29tcGxhaW4gJ2Nv bGQgJ2FuZCAnd2V0KSAgICAgICAgIFRocmVlIGFyZ3VtZW50cwotICAoY29tcGxhaW4gJyhjb2xk IGFuZCB3ZXQpKSAgICAgICAgIE9uZSBhcmd1bWVudAotCi0gICBTaW5jZSB0aGUgQ09NUExBSU4g bWFjcm8gdXNlcyBcJSogdG8gcmVmZXIgdG8gYWxsIGl0cyBhcmd1bWVudHMsIG5vCi0gICBtYXR0 ZXIgaG93IG1hbnksIGl0IGRvZXNuJ3QgY2FyZSB3aGljaCBmb3JtIHlvdSB1c2UuIEJ1dCBpdCBt YWtlcyBhCi0gICBkaWZmZXJlbmNlIGluIGNhc2VzIHdoZXJlIHRoZSBtYWNybyByZWZlcnMgdG8g aXRzIGFyZ3VtZW50cwotICAgaW5kaXZpZHVhbGx5LgotCi0gICBUbyBpbGx1c3RyYXRlLCBsZXQn cyBjb25zaWRlciBhIG1hY3JvIHRoYXQgcmVjZWl2ZXMgdGhlIG5hbWUgb2YgYSBtYWNybwotICAg YW5kIGl0cyBhcmd1bWVudCBsaXN0IGFuZCBleGVjdXRlcyBpdCB3aXRoIGl0cyBhcmd1bWVudHMs IHdpdGhvdXQKLSAgIGtub3dpbmcgaG93IG1hbnkgYXJndW1lbnRzIHRoZXJlIGFyZS4gVGhlIGZv bGxvd2luZyBMT09QIG1hY3JvIGlzIHVzZWQKLSAgIHRvIGV4ZWN1dGUgdGhlIGdpdmVuIG1hY3Jv IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50IGxpc3QgdGhlIHJlcXVlc3RlZAotICAgbnVtYmVyIG9m IHRpbWVzOgotCi0gIGRlZiBsb29wIHsgbG9jYWwgaSwgZm9yIGkgMSBcJTEgMSBkbyBcJTIgXCUz IH0KLQotICAgV2l0aGluIHRoZSBMT09QIG1hY3JvLCB0aGUgZmlyc3QgYXJndW1lbnQgKFwlMSkg aXMgdGhlIGxvb3AgY291bnQsIFwlMgotICAgaXMgdGhlIG1hY3JvIG5hbWUsIGFuZCBcJTMgaXMg dGhlIGFyZ3VtZW50IGxpc3QuIFdoZW4gdGhlIExPT1AgbWFjcm8gaXMKLSAgIGludm9rZWQgdHJh ZGl0aW9uYWxseSBsaWtlIHRoaXM6Ci0KLSAgbG9vcCAzIGNvbXBsYWluIGhvdAotCi0gICBpdCBw cmludHMgIkl0J3MgdG9vIGhvdCEiIHRocmVlIHRpbWVzLiBUbyBpbnZva2UgaXQgZnJvbSBhbgot ICAgUy1FeHByZXNzaW9uLCB5b3UgbXVzdCBxdW90ZSBib3RoIHRoZSBtYWNybyBuYW1lIGFzIHdl bGwgYXMgdGhlCi0gICBhcmd1bWVudCwgc2luY2UgaW4gdGhpcyBjYXNlIHRoZSBtYWNybyBuYW1l IGl0c2VsZiBpcyBhbiBhcmd1bWVudDoKLQotICAobG9vcCAzICdjb21wbGFpbiAnaG90KQotCi0g ICBOb3cgd2hhdCBpZiB5b3UgbmVlZCB0byBzZW5kIGRpZmZlcmVudCBvciB2YXJpYWJsZSBudW1i ZXJzIG9mIGFyZ3VtZW50cwotICAgdG8gdGhlIExPT1AgbWFjcm8/IFRoZSBMT09QIG1hY3JvIGNh biBoYW5kbGUgaXQgYWxyZWFkeSwgcHJvdmlkZWQgeW91Ci0gICBncm91cCB0aGUgYXJndW1lbnRz IGludG8gTE9PUCdzIHRoaXJkIGFyZ3VtZW50IChcJTMpLiBJbiBLZXJtaXQgc3ludGF4LAotICAg d2l0aG91dCBncm91cGluZzoKLQotICBsb29wIDMgY29tcGxhaW4gY29sZCBhbmQgd2V0Ci0KLSAg IHByaW50cyAiSXQncyB0b28gY29sZCEiIHRocmVlIHRpbWVzICgiYW5kIHdldCIgaXMgbG9zdCk7 IGJ1dCB3aXRoCi0gICBncm91cGluZyAoZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgdHdvIGZvcm1z KToKLQotICBsb29wIDMgY29tcGxhaW4ge2NvbGQgYW5kIHdldH0KLSAgbG9vcCAzIGNvbXBsYWlu ICJjb2xkIGFuZCB3ZXQiCi0KLSAgIHRoZSBMT09QIG1hY3JvIHByaW50cyAiSXQncyB0b28gY29s ZCBhbmQgd2V0ISIgdGhyZWUgdGltZXMgYXMgZGVzaXJlZC4KLQotICAgVG8gZG8gdGhlIHNhbWUg dGhpbmcgaW4gYW4gUy1FeHByZXNzaW9uLCBqdXN0IHVzZSB0aGUgTGlzcCBmb3JtcyBvZgotICAg cXVvdGluZyBpbnN0ZWFkIG9mIHRoZSBLZXJtaXQgZm9ybXM7IHRoZSBmb2xsb3dpbmcgdHdvIGFy ZSBlcXVpdmFsZW50OgotCi0gIChsb29wIDMgJ2NvbXBsYWluIChxdW90ZSAoY29sZCBhbmQgd2V0 KSkpCi0gIChsb29wIDMgJ2NvbXBsYWluICcoY29sZCBhbmQgd2V0KSkKLQotICAgSGVyZSdzIGEg c2ltaWxhciBleGFtcGxlIGluIHdoaWNoIHdlIHdyaXRlIGEgbWFjcm8gdGhhdCBzaG93cyBib3Ro IHRoZQotICAgbmFtZSBhbmQgdGhlIHZhbHVlIG9mIG9uZSBvciBtb3JlIG90aGVyIG1hY3Jvcywg d2hvc2UgbmFtZXMgYXJlIGdpdmVuCi0gICBhcyBhcmd1bWVudHMgKHNpbWlsYXIgdG8gInNob3cg bWFjcm8iKToKLQotICBkZWZpbmUgZGlzcGxheSB7Ci0gICAgICBsb2NhbCBcJWkKLSAgICAgIGZv ciBcJWkgMSBcdihhcmdjKS0xIDEgewotICAgICAgICAgIGVjaG8gXCZfW1wlaV0gPSBcbShcJl9b XCVpXSkKLSAgICAgIH0KLSAgfQotCi0gICAoUmVjYWxsIHRoYXQgXCZfW10gaXMgdGhlIG1hY3Jv J3MgYXJndW1lbnQgdmVjdG9yIGFycmF5LCBlcXVpdmFsZW50IHRvCi0gICBcJTEsIFwlMiwgLi4u KSBUaGUgRElTUExBWSBtYWNybyBjYW4gYmUgdXNlZCBpbiBTLUV4cHJlc3Npb25zIGxpa2UKLSAg IHRoaXM6Ci0KLSAgKHNldHEgYSAxIGIgMiBjIDMpCi0gIChkaXNwbGF5ICdhICdiICdjICdkKQot Ci0gICB3aGljaCBwcmludHM6Ci0KLSAgYSA9IDEKLSAgYiA9IDIKLSAgYyA9IDMKLSAgZCA9Ci0K LSAgIFRoZSBuYW1lcyBtdXN0IGJlIHF1b3RlZCB0byBwcmV2ZW50IHRoZWlyIGV2YWx1YXRpb24g YmVmb3JlIHRoZXkgYXJlCi0gICBzZW50IHRvIHRoZSBtYWNyby4gVGhpcyBhYmlsaXR5IHRvIHBh c3MgdmFyaWFibGVzICJieSBuYW1lIiB0byBtYWNyb3MsCi0gICByYXRoZXIgdGhhbiBieSB2YWx1 ZSwgbGV0cyB5b3Ugd3JpdGUgbWFjcm9zIHRoYXQgY2hhbmdlIHRoZSB2YWx1ZXMgb2YKLSAgIGFy Z3VtZW50IHZhcmlhYmxlcy4gRm9yIGV4YW1wbGUsIGhlcmUncyBhIG1hY3JvIHRoYXQgZG91Ymxl cyB0aGUgdmFsdWUKLSAgIG9mIGl0cyBhcmd1bWVudCB2YXJpYWJsZToKLQotICBkZWZpbmUgZG91 YmxlICgrKyBcJTEgXCUxKQotCi0gICB3aGljaCB5b3UgY2FuIGNhbGwgbGlrZSB0aGlzOgotCi0g IChzZXRxIGEgMTIpCi0gIChkb3VibGUgJ2EpCi0KLSAgIEluIHRoZSBtYWNybywgXCUxIGlzIHJl cGxhY2UgYnkgdGhlIHZhcmlhYmxlIG5hbWUgImEiOyAiKCsrIGEgYSkiIGFkZHMKLSAgICJhIiB0 byBpdHNlbGYsIGFuZCBzZXRzIHRoZSB2YWx1ZSBvZiAiYSIgdG8gdGhlIHJlc3VsdC4KLQotICAg VGhlcmUgYXJlIG5vIGJ1aWx0LWluIG9wZXJhdG9ycyBvdGhlciB0aGFuIFFVT1RFLCAnLCBhbmQg U1RSSU5HIGZvcgotICAgaGFuZGxpbmcgc3RyaW5ncyBpbiBTLUV4cHJlc3Npb25zLCBidXQgdXNp bmcganVzdCB0aGVzZSwgcGx1cyBtYWNyb3MKLSAgIHRoYXQgdXNlIEtlcm1pdCdzIHJlZ3VsYXIg c3RyaW5nLWhhbmRsaW5nIGZlYXR1cmVzLCB5b3UgY2FuIGVhc2lseQotICAgZXh0ZW5kIFMtRXhw cmVzc2lvbnMgdG8gZG8gc3RyaW5nIG1hbmlwdWxhdGlvbjoKLQotICBkZWZpbmUgbGVuIHJldHVy biBcZmxlbihcJTEpICAgICAgICAgICAgICAgUmV0dXJucyBsZW5ndGggb2YgYXJndW1lbnQgc3Ry aW5nCi0gIGRlZmluZSBjYXAgcmV0dXJuIFxmdXBwZXIoXCUxKSAgICAgICAgICAgICBVcHBlcmNh c2UgYXJndW1lbnQgc3RyaW5nCi0gIGRlZmluZSByZXYgcmV0dXJuIFxmcmV2ZXJzZShcJTEpICAg ICAgICAgICBSZXZlcnNlcyBhcmd1bWVudCBzdHJpbmcKLSAgZGVmaW5lIHN1YiByZXR1cm4gXGZz dWJzdHIoXCUxLFwlMixcJTMpICAgIFJldHVybnMgc3Vic3RyaW5nIG9mIGFyZyBzdHJpbmcKLQot ICAobGVuICcodGhpcyBpcyBhIHN0cmluZykpICAgICAgICAgICAgICAgICAgUmVzdWx0OiAxNgot ICAocmV2ICcodGhpcyBpcyBhIHN0cmluZykpICAgICAgICAgICAgICAgICAgUmVzdWx0OiBnbmly dHMgYSBzaSBzaWh0Ci0gIChyZXYgKGNhcCAnKHRoaXMgaXMgYSBzdHJpbmcpKSkgICAgICAgICAg ICBSZXN1bHQ6IEdOSVJUUyBBIFNJIFNJSFQKLSAgKHN1YiAocmV2IChjYXAgJyh0aGlzIGlzIGEg c3RyaW5nKSkpIDUgOSkgIFJlc3VsdDogVFMgQSBTSSBTCi0KLSAgIFlvdSBjYW4gYXNzaWduIGEg c3RyaW5nIHRvIGEgbWFjcm8gbmFtZSBhcyBmb2xsb3dzOgotCi0gIChzZXRxIGZvbyAnKHRoaXMg aXMgYSBzdHJpbmcpKQotICAoc2V0cSBmb28gKHF1b3RlICh0aGlzIGlzIGEgc3RyaW5nKSkpCi0K LSAgIFRoZSB0d28gYXJlIGV4YWN0bHkgZXF1aXZhbGVudC4gSW4gYm90aCBjYXNlcywgdGhlIG1h Y3JvICJmb28iIGhhcyB0aGUKLSAgIHZhbHVlOgotCi0gICcodGhpcyBpcyBhIHN0cmluZykKLQot ICAgc28gd2hlbiBpdCBpcyByZXRyaWV2ZWQgaXQgY2FuIGJlIGlkZW50aWZpZWQgYXMgYSBzdHJp bmcgcmF0aGVyIHRoYW4gYQotICAgbnVtYmVyIG9yIGNvbW1hbmRzIHRvIGJlIGV4ZWN1dGVkLiBU aHVzOgotCi0gIChzZXRxIGZvbyAocXVvdGUgKHRoaXMgaXMgYSBzdHJpbmcpKSkKLSAgc2hvdyBt YWNybyBmb28KLSAgZm9vID0gJyh0aGlzIGlzIGEgc3RyaW5nKQotICAoZm9vKQotICB0aGlzIGlz IGEgc3RyaW5nCi0KLSAgIE5vdGUgdGhlIGRpZmZlcmVudCByZXN1bHRzIGZvciAic2hvdyBtYWNy byBmb28iIGFuZCAiKGZvbykiLiBUaGUgZm9ybWVyCi0gICBzaG93cyB0aGUgaW50ZXJuYWwgZGVm aW5pdGlvbjsgdGhlIGxhdHRlciBldmFsdWF0ZXMgdGhlIHZhcmlhYmxlLCB3aGljaAotICAgcmVt b3ZlcyB0aGUgcXVvdGluZy4gQW5kIHBlcmhhcHMgbW9yZSBpbXBvcnRhbnQsIG5vdGUgdGhhdCBp ZiB0aGUKLSAgIGFwb3N0cm9waGUgYW5kIHN1cnJvdW5kaW5nIHBhcmVudGhlc2VzIHdlcmUgbm90 IHN0b3JlZCBhcyBwYXJ0IG9mIHRoZQotICAgZGVmaW5pdGlvbiwgKGZvbykgd291bGQgdHJ5IHRv IGV4ZWN1dGUgInRoaXMgaXMgYSBzdHJpbmciIGFzIGEgY29tbWFuZC4KLQotICAgR2l2ZW4gdGhl IGFzc2lnbm1lbnQgYWJvdmUsIHRoZSBmb2xsb3dpbmcgd29yayBhcyBleHBlY3RlZDoKLQotICAo bGVuIGZvbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0OiAxNgotICAo cmV2IGZvbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0OiBnbmlydHMg YSBzaSBzaWh0Ci0gIChyZXYgKGNhcCBmb28pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZXN1bHQ6IEdOSVJUUyBBIFNJIFNJSFQKLSAgKHN1YiAocmV2IChjYXAgZm9vKSkgNSA4KSAgICAg ICAgICAgICAgICAgIFJlc3VsdDogVFMgQSBTSSBTCi0KLSAgIE5vdGUgdGhhdCwgdW5saWtlIGJ1 aWx0LWluIFMtRXhwcmVzc2lvbiBvcGVyYXRvcnMgdGhhdCByZXR1cm4gbnVtYmVycwotICAgb3Ig dHJ1dGggdmFsdWVzLCB0aGVzZSBvcGVyYXRvcnMgcmV0dXJuIHN0cmluZ3MuIElmIHlvdSB3YW50 IHRvIGFzc2lnbgotICAgdGhlaXIgcmV0dXJuIHZhbHVlcyB0byBvdGhlciB2YXJpYWJsZXMsIHlv dSBjYW4gZG8gc286Ci0KLSAgKHNldHEgYmFyIChyZXYgKGNhcCBmb28pKSkgICAgICAgICAgICAg ICAgIFJlc3VsdDogR05JUlRTIEEgU0kgU0lIVAotCi0gICBCdXQgbm93IHRoZSBTLUV4cHJlc3Np b24gcHJvY2Vzc29yIGRvZXNuJ3Qga25vdyB0aGUgdmFsdWUgb2YgImJhciIgaXMKLSAgIHN1cHBv c2VkIHRvIGJlIGEgc3RyaW5nLCByYXRoZXIgdGhhbiBhIG1hY3JvIHRvIGV4ZWN1dGUuIEZvciB0 aGlzIHlvdQotICAgbmVlZCBvbmUgZmluYWwgc3BlY2lhbCBvcGVyYXRvciwgU1RSSU5HLiBUaGUg U1RSSU5HIG9wZXJhdG9yIHRha2VzIGFuCi0gICBTLUV4cHJlc3Npb24gYXMgYW4gb3BlcmFuZCwg ZXZhbHVhdGVzIGl0LCBhbmQgdGhlbiByZXR1cm5zIGl0cyB2YWx1ZQotICAgZW5jbG9zZWQgaW4g JygpLCBzbyB5b3UgY2FuIHVzZSB0aGUgdmFsdWUgYXMgYSBzdHJpbmcgaXMgc3Vic2VxdWVudAot ICAgUy1FeHByZXNzaW9ucy4gVXNlIFNUUklORyBmb3IgcmVmZXJlbmNpbmcgbWFjcm9zIHRoYXQg cmV0dXJuIHN0cmluZ3M6Ci0KLSAgKHNldHEgYmFyIChzdHJpbmcgKHJldiAoY2FwIGZvbykpKSkg ICAgICAgIFJlc3VsdDogJyhHTklSVFMgQSBTSSBTSUhUKQotCi0gICBTVFJJTkcgaXMgbGlrZSBR VU9URSwgZXhjZXB0IHRoYXQgaXQgZXZhbHVhdGVzIGl0cyBvcGVyYW5kIGJlZm9yZQotICAgYXBw bHlpbmcgdGhlIHF1b3RpbmcsIHJhdGhlciB0aGFuIHRha2luZyB0aGUgb3BlcmFuZCBsaXRlcmFs bHkuCi0KLSAgIFRvIHJlZmVyZW5jZSBiYWNrc2xhc2ggdmFyaWFibGVzIG9yIGZ1bmN0aW9ucyB0 aGF0IHJldHVybiBzdHJpbmcKLSAgIHZhbHVlcywgeW91IG11c3QgdXNlIHRoZSByZWd1bGFyIHF1 b3RpbmcgbWVjaGFuaXNtczoKLQotICAoc2V0cSB0aW1lICcoXHYodGltZSkpKQotICAoc2V0cSBk YXRlICcoXHYoZGF0ZSkpKQotICBhc3NpZ24gXCVyIHRoaXMgaXMgYSBzdHJpbmcKLSAgKHNldHEg czEgJyhcJXIpKQotCi0gICBUaGF0J3MgYmVjYXVzZSBiYWNrc2xhc2ggaXRlbXMgYXJlIGV2YWx1 YXRlZCBCRUZPUkUgdGhlIFMtRXhwcmVzc2lvbgotICAgcGFyc2VyIGV2ZXIgc2VlcyB0aGVtLCBh bmQgdGhlIHZhbHVlcyBvZiBcdih0aW1lKSBhbmQgc28gb24gYXJlIG5vdAotICAgdmFsaWQgUy1F eHByZXNzaW9ucywgc28gU1RSSU5HIHdvbid0IGxpa2UgdGhlbS4KLQotICAgRmluYWxseSBhIGJy aWVmIHdvcmQgb24gdGhlIHRvdWNoeSB0b3BpYyBvZiBxdW90aW5nLiBTdXBwb3NlIHlvdSB3YW50 Ci0gICB0byBpbmNsdWRlIChzYXkpIGxpdGVyYWwgcGFyZW50aGVzZXMgaW4gYSBzdHJpbmcgdGhh dCB3aWxsIGxhdGVyIGJlCi0gICBwcm9jZXNzZWQgYnkgdGhlIFMtRXhwcmVzc2lvbiByZWFkZXIg KG9yIFxmc3BsaXQoKSBvciBcZndvcmQoKSkuCi0gICBOb3JtYWxseSwgeW91IGNhbid0IGRvIHRo aXMgYmVjYXVzZSBwYXJlbnRoZXNlcyBhcmUgbWVhbmluZ2Z1bCBpbiB0aGVzZQotICAgY29udGV4 dHMuIFRvIGRlZmVhdCB0aGUgbm9ybWFsIHBhcnNpbmcgcnVsZXMsIHlvdSBjYW4gcXVvdGUgdGhl Ci0gICBwYXJlbnRoZXNlcyB3aXRoIGJhY2tzbGFzaC4gSG93ZXZlciwgZHVlIHRvIHRoZSBtYW55 IGxldmVscyBvZiBzdHJpbmcKLSAgIHByb2Nlc3NpbmcgaW52b2x2ZWQsIGEgc3VycHJpc2luZ2x5 IGxhcmdlIGFtb3VudCBvZiBiYWNrc2xhc2hlcyBtaWdodAotICAgYmUgcmVxdWlyZWQsIGZvciBl eGFtcGxlOgotCi0gIChzZXRxIHMgJyhhIGIgKGMgZCkgXFxcXFxcXFxcXFxcXFxcXChlIGYgKGcg aCkgeFxcXFxcXFxcXFxcXFxcXFwpIGogaykpCi0KLSAgIFRoaXMgaXMgbmVhcmx5IGltcG9zc2li bGUgdG8gZXhwbGFpbigqKS4gSW5zdGVhZCwganVzdCByZW1lbWJlciB0d28KLSAgIHBvaW50czoK LQotICAgICAqIEluIHNpdHVhdGlvbnMgbGlrZSB0aGlzLCBpdCdzIGJldHRlciB0byB1c2UgREVG SU5FIHRvIGNyZWF0ZSB0aGUKLSAgICAgICBzdHJpbmcsIHJhdGhlciB0aGFuIFNFVFEuIFRoZSBl eGFtcGxlIGFib3ZlIHJlcXVpcmVzIG9ubHkgZG91YmxlCi0gICAgICAgYmFja3NsYXNoZXMgd2hl biBERUZJTkUgaXMgdXNlZDoKLSAgZGVmaW5lIHMgJyhhIGIgKGMgZCkgXFwoZSBmIChnIGgpIHhc XCkgaiBrKQotCi0gICAgICogVGhlIGxldmVsIG9mIHF1b3RpbmcgZGVwZW5kcyBvbiBob3cgbWFu eSBsZXZlbHMgb2YgZXZhbHVhdGlvbiB0aGUKLSAgICAgICBzdHJpbmcgbXVzdCBwYXNzIHRocm91 Z2gsIHdoaWNoIGlzIG5vdCBhbHdheXMgb2J2aW91cy4gSG93ZXZlciwgdGhlCi0gICAgICAgbnVt YmVyIG9mIGJhY2tzbGFzaGVzIHJlcXVpcmVkIGluIGFueSBnaXZlbiBzaXR1YXRpb24gaXMgYWx3 YXlzIGEKLSAgICAgICBwb3dlciBvZiAyLiBTbyBpZiAxIGRvZXNuJ3Qgd29yaywgdHJ5IDI7IGlm IDIgZG9lc24ndCB3b3JrLCB0cnkgNDsKLSAgICAgICBpZiA0IGRvZXNuJ3Qgd29yaywgdHJ5IDgs IDE2LCAzMiwgYW5kIHNvIG9uLgotCi0gICBDb25zaWRlcmF0aW9ucyBsaWtlIHRoaXMgYXBwbHkg aW4gYW55IHNjcmlwdGluZyBsYW5ndWFnZSAoc2hlbGwsIFRjbCwKLSAgIFBlcmwsIFB5dGhvbiwg ZXRjKS4gVGhlIHNpdHVhdGlvbiBpcyBrbm93biBhcyAiUXVvdGluZyBIZWxsIi4KLQotICAgKCop IElmIHlvdSByZWFsbHkgd2FudCBhbiBleHBsYW5hdGlvbiwgaGVyZSBpdCBpczoKLQotICAgICAq IEV2ZXJ5IFNFWFAgaGFzIGl0cyBiYWNrc2xhc2ggaXRlbXMgZXZhbHVhdGVkIGluIGEgc2luZ2xl IHBhc3MgYXQKLSAgICAgICB0b3AgbGV2ZWwgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUgU0VY UCByZWFkZXIsIHNvIFwlMSwKLSAgICAgICBcdihmdGltZSksIGV0YywgY2FuIGJlIGV2YWx1YXRl ZCB1cCBmcm9udCwgZnJlZWluZyB0aGUgU0VYUCByZWFkZXIKLSAgICAgICBvZiBoYXZpbmcgdG8g a25vdyBhYm91dCBzdWNoIHRoaW5ncywgd2hpY2ggaW4gdHVybiBtYWtlcyBpdCBtdWNoCi0gICAg ICAgbW9yZSBlZmZpY2llbnQuIFRoZXJlZm9yZSBvbmUgbGV2ZWwgb2YgcXVvdGluZyBpcyBsb3N0 IHJpZ2h0IGF3YXksCi0gICAgICAgYW5kIHRoZXJlZm9yZSB5b3UgbXVzdCBkb3VibGUgZWFjaCBi YWNrc2xhc2ggdGhhdCBpcyB0byBiZSB1c2VkIGFzCi0gICAgICAgYSBxdW90ZS4KLSAgICAgKiBX aGVuIHRoZSBTRVhQIHJlYWRlciBzZWVzICdcJywgaXQgdHJlYXRzIGl0IGFzIGEgcXVvdGU7IGRp c2NhcmRzIGl0Ci0gICAgICAgYW5kIGtlZXBzIHRoZSBuZXh0IGNoYXJhY3Rlci4gVGh1cyAnXFwn IGJlY29tZXMgJ1wnLiBUaGlzIHdvdWxkIGJlCi0gICAgICAgdGhlIGVuZCBvZiBpdCwgZXhjZXB0 IHRoYXQ6Ci0gICAgICogVGhlIFNFWFAgcmVhZGVyIG11c3QgY2FsbCBpdHNlbGYgcmVjdXJzaXZl bHkgb24gaXRzIG9wZXJhbmRzLCBzbyB3ZQotICAgICAgIG11c3QgZG91YmxlIGFueSBxdW90ZXMg aW4gdGhlIG9wZXJhbmRzOiAyXjIgPSA0LgotICAgICAqIElmIHRoZSByZXN1bHQgaXMgdG8gYmUg cGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIGEgbWFjcm8sIHRoZQotICAgICAgIGJhY2tzbGFzaGVz IG11c3QgYWdhaW4gYmUgZG91YmxlZCwgYmVjYXVzZSB0aGUgbWFjcm8gcHJvY2Vzc29yCi0gICAg ICAgZXZhbHVhdGVzIHRoZSBhcmd1bWVudHMgYmVmb3JlIHNlbmRpbmcgdGhlbSB0byB0aGUgbWFj cm86IDJeMyA9IDguCi0gICAgICogSWYgdGhlIG1hY3JvIGl0c2VsZiBpcyB0byBzZWUgdGhlIHF1 b3RlcywgcmF0aGVyIHRoYW4ganVzdCB0aGUKLSAgICAgICByZXN1bHQgb2YgdGhlIHF1b3Rpbmcs IHRoZSBxdW90ZXMgbXVzdCBiZSBkb3VibGVkIGFnYWluOiAyXjQgPSAxNi4KLQotICAgTW9yYWw6 IFRvIGNyZWF0ZSBzdHJpbmcgY29uc3RhbnRzIGluIHdoaWNoIGdyb3VwaW5nIGNoYXJhY3RlcnMg bXVzdCBiZQotICAgcXVvdGVkLCB1c2UgREVGSU5FIHJhdGhlciB0aGFuIFNFVFEuCi0KLSAgIFsg WzUzNl1Ub3AgXSBbIFs1MzddQ29udGVudHMgXSBbIFs1MzhdQy1LZXJtaXQgSG9tZSBdIFsgWzUz OV1LZXJtaXQKLSAgIEhvbWUgXQotCi05LjkuIEV4YW1wbGVzCi0KLTkuOS4xLiBTdGF0aXN0aWNz Ci0KLSAgIFRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBjb21wdXRlcyBzdGF0aXN0aWNzIC0tIG1lYW5z LCBtYXhpbWEsIG1pbmltYSwKLSAgIHZhcmlhbmNlLCBzdGFuZGFyZCBkZXZpYXRpb24sIGFuZCBj b3JyZWxhdGlvbiAtLSBmcm9tIGRhdGEgc3RvcmVkIGluCi0gICBwYXJhbGxlbCBhcnJheXMsIFwm eFtdIGFuZCBcJnlbXSwgd2hpY2ggY2FuIGNvbnRhaW4gYW55IG1peHR1cmUgb2YKLSAgIGludGVn ZXIgYW5kIGZsb2F0aW5nLXBvaW50IG51bWJlcnM6IHBvc2l0aXZlLCBuZWdhdGl2ZSwgb3IgemVy by4gQXJyYXkKLSAgIHNldHVwIGFuZCB2YWxpZGF0aW9uIGFyZSBub3Qgc2hvd24uIEV4Y2VwdCBm b3IgdGhlIHRyYWRpdGlvbmFsIEZPUiBsb29wCi0gICBhbmQgcHJpbnRpbmcgdGhlIHJlc3VsdHMg YXQgdGhlIGVuZCwgdGhlIGVudGlyZSBjb21wdXRhdGlvbiBpcyBkb25lCi0gICB3aXRoIFMtRXhw cmVzc2lvbnM6Ci0KLTsgSW5pdGlhbGl6ZSBzdW1zLCBtYXhpbWEsIG1pbmltYSwgYW5kIG51bWJl ciBvZiBlbGVtZW50cwotCi0gIChzZXRxIHhzdW0gMCB5c3VtIDAgeHN1bTIgMCB5c3VtMiAwIHh5 c3VtIDApCi0gIChzZXRxIHhtaW4gKHNldHEgeG1heCBcJnhbMV0pIHltaW4gKHNldHEgeW1heCBc JnlbMV0pKQotICAoc2V0cSBuIFxmZGltKCZ4KSkKLQotOyBMb29wIHRocm91Z2ggZWxlbWVudHMg YW5kIGFjY3VtdWxhdGUgc3VtcywgbWF4aW1hLCBhbmQgbWluaW1hCi0KLSAgZm9yIGkgMSBuIDEg ewotICAgICAgKHNldHEgeCBcJnhbaV0geSBcJnlbaV0pICAgICAgICAgICAgICAgICAgICA7IE5v dGF0aW9uYWwgY29udmVuaWVuY2UKLSAgICAgIChzZXRxIHhtYXggKG1heCB4bWF4IHgpIHltYXgg KG1heCB5bWF4IHkpKSAgOyBYIGFuZCBZIG1heGltYQotICAgICAgKHNldHEgeG1pbiAobWluIHht aW4geCkgeW1pbiAobWluIHltaW4geSkpICA7IFggYW5kIFkgbWluaW1hCi0gICAgICAoKysgeHN1 bSB4IHlzdW0geSkgICAgICAgICAgICAgICAgICAgICAgICAgIDsgWCBhbmQgWSBzdW1zCi0gICAg ICAoKysgeHN1bTIgKF4geCAyKSB5c3VtMiAoXiB5IDIpKSAgICAgICAgICAgIDsgU3VtIG9mIFgg YW5kIFkgc3F1YXJlcwotICAgICAgKCsrIHh5c3VtICgqIHggeSkpICAgICAgICAgICAgICAgICAg ICAgICAgICA7IFN1bSBvZiBYWSBwcm9kdWN0cwotICB9Ci0KLTsgQ2FsY3VsYXRlIHJlc3VsdHMK LQotICAoc2V0cSB4bWVhbiAoLyB4c3VtIG4pIHltZWFuICgvIHlzdW0gbikpICAgICAgICA7IE1l YW4gWCBhbmQgWQotICAoc2V0cSB4c3MgKC0geHN1bTIgKC8gKF4geHN1bSAyKSBuKSkpICAgICAg ICAgICA7IEludGVybWVkaWF0ZSB2YWx1ZXMKLSAgKHNldHEgeXNzICgtIHlzdW0yICgvICheIHlz dW0gMikgbikpKQotICAoc2V0cSB4eXNzICgtIHh5c3VtICgvICgqIHhzdW0geXN1bSkgbikpKQot ICAoc2V0cSB4dmFyICgvIHhzcyBuKSB5dmFyICgvIHlzcyBuKSkgICAgICAgICAgICA7IFggYW5k IFkgdmFyaWFuY2UKLSAgKHNldHEgc2R4IChzcXJ0IHh2YXIpIHNkeSAoc3FydCB5dmFyKSkgICAg ICAgICAgOyBTdGQgZGV2aWF0aW9uIGluIFggYW5kIFkKLSAgKHNldHEgdG1wICgqIHhzcyB5c3Mp KQotICAoc2V0cSBjYyAoaWYgdG1wICgvIHh5c3MgKHNxcnQgdG1wKSkgMS4wKSkgICAgICA7IENv cnJlbGF0aW9uIGNvZWZmaWNpZW50Ci0gIHNob3cgbWFjcm8geG1lYW4geW1lYW4geHZhciB5dmFy IHNkeCBzZHkgY2MgICAgIDsgUHJpbnQgdGhlIHJlc3VsdHMKLQotICAgVGhlIGZpbmFsICJpZiB0 bXAiIGNoZWNrIGFjY291bnRzIGZvciB0aGUgcG9zc2liaWxpdHkgdGhhdCBib3RoIGFycmF5cwot ICAgY29udGFpbiBhbGwgMCdzLiBSZXN1bHRzIGNhbiBhbHNvIGJlIHByaW50ZWQgd2l0aCAiZWNo byBDQyA9IFxtKGNjKSIsCi0gICBvciBhbnkgb3RoZXIgZGVzaXJlZCB3YXkuIEludGVyZXN0aW5n bHksIGlmIHdlIGhhZCBub3QgbmVlZGVkIHRoZSBzdW0KLSAgIG9mIHRoZSBzcXVhcmVzIGFuZCBw cm9kdWN0cywgd2UgY291bGQgaGF2ZSBvYnRhaW5lZCB0aGUgc3VtcywgbWF4aW1hLAotICAgYW5k IG1pbmltYSBvZiB0aGUgWCdzIGFuZCBZJ3Mgd2l0aG91dCBhIGxvb3AgbGlrZSB0aGlzOgotCi0g IChzZXRxIHhzdW0gKCsgXGZqb2luKCZ4KSkgeXN1bSAoKyBcZmpvaW4oJnkpKSkKLSAgKHNldHEg eG1heCAobWF4IFxmam9pbigmeCkpIHltYXggKG1heCBcZmpvaW4oJnkpKSkKLSAgKHNldHEgeG1p biAobWluIFxmam9pbigmeCkpIHltaW4gKG1pbiBcZmpvaW4oJnkpKSkKLQotICAgQW55IEtlcm1p dCBmdW5jdGlvbiB0aGF0IHJldHVybnMgbnVtYmVycyBvciBsaXN0cyBvZiBudW1iZXJzIGNhbiBi ZQotICAgaW5jbHVkZWQgaW4gYW4gUy1FeHByZXNzaW9uIGFzIGFuIG9wZXJhbmQuCi0KLTkuOS4y LiBQcmFjdGljYWwgRmlib25hY2NpIFNlcmllcwotCi0gICBUaGUgcmVjdXJzaXZlIEZpYm9uYWNj aSBleGFtcGxlIGdpdmVuIHByZXZpb3VzbHkgaXMgc2ltcGxlIGFuZCBlbGVnYW50LAotICAgYnV0 IG5vdCB2ZXJ5IHVzZWZ1bCBzaW5jZSBpdCBjYXVzZXMgbWVtb3J5IG9jY3VwYXRpb24gdG8gZ3Jv dyBlYWNoIHRpbWUKLSAgIGl0IGNhbGxzIGl0c2VsZiwgdW50aWwgZXZlbnR1YWxseSBib3RoIHBo eXNpY2FsIG1lbW9yeSBhbmQgZGlzayBzd2FwCi0gICBzcGFjZSBhcmUgZmlsbGVkIGFuZCB0aGUg cHJvZ3JhbSBjcmFzaGVzLiBFdmVuIGZvciBzbWFsbCBhcmd1bWVudHMsCi0gICBsaWtlIDE3LCBl eGVjdXRpb24gdGltZSBjYW4gYmUgcHJvaGliaXRpdmU6Ci0KLSAgKHNldHEgdDEgXHYoZnRpbWUp KQotICAoc2V0cSByZXN1bHQgKGZpYm9uYWNjaSAxNykpCi0gIChzZXRxIHQyICgtIFx2KGZ0aW1l KSB0MSkpCi0gIGVjaG8gRklCT05BQ0NJKDE3KSA9IFxtKHJlc3VsdCk6IFRJTUUgPSBcZmZwcm91 bmQodDIsMykKLQotICAgcHJpbnRzIChvbiBhIGNlcnRhaW4gcmF0aGVyIHNsb3cgY29tcHV0ZXIp OgotCi0gIEZJQk9OQUNDSSgxNykgPSAxNTk3OiBUSU1FID0gNS44NjEKLQotICAgQW55IHJlY3Vy c2l2ZSBmdW5jdGlvbiBjYW4gYmUgcmVjb2RlZCBpdGVyYXRpdmVseS4gVGhlIHJlc3VsdCBpcyBu b3QgYXMKLSAgIHByZXR0eSwgYnV0IGV4ZWN1dGlvbiBpcyBmYXIgbGVzcyBleHBlbnNpdmU6Ci0K LSAgICBkZWZpbmUgRklCSVRFUiB7Ci0gICAgICAgIChpZiAoPT0gXCUzIDApIChcJTIpIChmaWJp dGVyICgrIFwlMSBcJTIpIFwlMSAoLSBcJTMgMSkpKQotICAgIH0KLSAgICBkZWZpbmUgRklCT05B Q0NJIHsKLSAgICAgICAgKGZpYml0ZXIgMSAwIFwlMSkKLSAgICB9Ci0KLSAgIEhlcmUncyB0aGUg cmVzdWx0IG9uIHRoZSBzYW1lIGNvbXB1dGVyIGZvciB0aGUgc2FtZSBhcmd1bWVudCBvZiAxNzoK LQotICBGSUJPTkFDQ0koMTcpID0gMTU5NzogVElNRSA9IDAuMDE1Ci0KLSAgICg0NyB0aW1lcyBm YXN0ZXIuKSBFeGVjdXRpb24gdGltZSBpbmNyZWFzZXMgcHJvcG9ydGlvbmFsbHkgdG8gdGhlIHNp emUKLSAgIG9mIHRoZSBhcmd1bWVudCBpbiB0aGUgaXRlcmF0aXZlIGNhc2UsIHdoZXJlYXMgaW4g dGhlIHJlY3Vyc2l2ZSBjYXNlIGl0Ci0gICBnb2VzIHVwIGdlb21ldHJpY2FsbHksIHF1aWNrbHkg cmVhY2hpbmcgaW5maW5pdHkuCi0KLSAgIFsgWzU0MF1Ub3AgXSBbIFs1NDFdQ29udGVudHMgXSBb IFs1NDJdQy1LZXJtaXQgSG9tZSBdIFsgWzU0M11LZXJtaXQKLSAgIEhvbWUgXQotCi05LjEwLiBE aWZmZXJlbmNlcyBmcm9tIEFsZ2VicmFpYyBOb3RhdGlvbgotCi0gICBJbiBDLUtlcm1pdDoKLQot ICAgICAqIEFsZ2VicmFpYyBub3RhdGlvbiB1c2VzIGluZml4IG9wZXJhdG9ycyBhbmQgbm9ybWFs IHJ1bGVzIG9mCi0gICAgICAgb3BlcmF0b3IgcHJlY2VkZW5jZSwgd2l0aCBwYXJlbnRoZXNlcyB1 c2VkIHRvIGZvcmNlIGV4Y2VwdGlvbnMgdG8KLSAgICAgICB0aGUgcnVsZXM7IG1hbnkgb3BlcmF0 aW9ucyBjYW4gYmUgaW5jbHVkZWQgaW4gYW4gZXhwcmVzc2lvbi4KLSAgICAgICBTLUV4cHJlc3Np b25zIHVzZSBwcmVmaXggb3BlcmF0b3JzIHdpdGggbm8gaW50cmluc2ljIHByZWNlZGVuY2U7Ci0g ICAgICAgZWFjaCBvcGVyYXRpb24gaXMgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMsIGFuZCB0aGUg YXJyYW5nZW1lbnQgb2YKLSAgICAgICBwYXJlbnRoZXNlcyBkZXRlcm1pbmVzIHByZWNlZGVuY2Uu Ci0gICAgICogQWxnZWJyYWljIGluZml4IG9wZXJhdG9ycyByZXF1aXJlIHR3byBvcGVyYW5kczsg Uy1FeHByZXNzaW9uIHByZWZpeAotICAgICAgIG9wZXJhdG9ycyBjYW4gYWNjZXB0IGEgdmFyaWFi bGUgbnVtYmVyIG9mIG9wZXJhbmRzLgotICAgICAqIFlvdSBjYW4gdXNlIGFsZ2VicmFpYyBub3Rh dGlvbiBhbnl3aGVyZSB0aGF0IEMtS2VybWl0IGFjY2VwdHMgYQotICAgICAgIG51bWJlciwgZS5n LiAiZWNobyBcJmFbKCgxKzEpKjItMV0iLCBidXQgeW91IGNhbiB1c2UgUy1FeHByZXNzaW9ucwot ICAgICAgIG9ubHkgYXMgdG9wLWxldmVsIGNvbW1hbmRzLiBZb3UgY2FuLCBob3dldmVyLCB1c2Ug ZWl0aGVyIGFsZ2VicmFpYwotICAgICAgIG9yIFMtRXhwcmVzc2lvbnMgYW55d2hlcmUgYXQgYWxs IGJ5IGVuY2xvc2luZyB0aGVtIGluIFxmZXZhbHVhdGUoKQotICAgICAgIG9yIFxmc2V4cHJlc3Np b24oKSwgcmVzcGVjdGl2ZWx5LgotICAgICAqIFlvdSBjYW4gdXNlIGFueSBtaXh0dXJlIG9mIGlu dGVnZXIgYW5kIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgaW4KLSAgICAgICBTLUV4cHJlc3Npb25z LCBidXQgb25seSBpbnRlZ2VycyBhcmUgcGVybWl0dGVkIGluIGFsZ2VicmFpYwotICAgICAgIGV4 cHJlc3Npb25zLiBPdXRzaWRlIG9mIFMtRXhwcmVzc2lvbnMsIGZsb2F0aW5nIHBvaW50IGFyaXRo bWV0aWMgaXMKLSAgICAgICBzdXBwb3J0ZWQgb25seSBieSBcZmZwLi4uKCkgZnVuY3Rpb24gY2Fs bHMuCi0gICAgICogT3BlcmF0b3JzIGFuZCBvcGVyYW5kcyBpbiBTLUV4cHJlc3Npb25zIG11c3Qg YmUgc2VwYXJhdGVkIGJ5Ci0gICAgICAgc3BhY2VzLCBlLmcuICIoKyBhIGIpIi4gU3BhY2VzIGFy ZSBub3QgcmVxdWlyZWQgaW4gYWxnZWJyYWljCi0gICAgICAgZXhwcmVzc2lvbnM6ICIoKGErYikq YykiLgotICAgICAqIFdoZW4gYXNzaWduaW5nIHZhbHVlcyB0byBiYWNrc2xhc2ggdmFyaWFibGVz IChzdWNoIGFzIFwleCBvcgotICAgICAgIFwmYVsyXSkgdXNpbmcgU0VUUSBvciBMRVQsIHlvdSBt dXN0IGRvdWJsZSB0aGUgYmFja3NsYXNoLgotCi0gICBbIFs1NDRdVG9wIF0gWyBbNTQ1XUNvbnRl bnRzIF0gWyBbNTQ2XUMtS2VybWl0IEhvbWUgXSBbIFs1NDddS2VybWl0Ci0gICBIb21lIF0KLQot OS4xMS4gRGlmZmVyZW5jZXMgZnJvbSBMaXNwCi0KLSAgICAgKiBLZXJtaXQgaGFzIGEgbG90IG9m IGJ1aWx0LWluIG9wZXJhdG9ycyBub3QgZm91bmQgaW4gTGlzcDogKyssIF4sCi0gICAgICAgZXRj LgotICAgICAqIE1vc3QgZGlhbGVjdHMgb2YgcmVhbCBMaXNwIGRvIG5vdCBhbGxvdyBTLUV4cHJl c3Npb25zIHRoYXQgZG9uJ3QKLSAgICAgICBzdGFydCB3aXRoIGFuIG9wZXJhdG9yLCBmb3IgZXhh bXBsZToKLSAgKGEpCi0KLSAgICAgICBUaGlzIGV4cHJlc3Npb24gY2FuIGNhdXNlIGFuIGVycm9y IGluIExpc3AgKGV2ZW4gaWYgImEiIGhhcyBhCi0gICAgICAgdmFsdWUpLCBidXQgaXMgYWNjZXB0 YWJsZSBpbiBLZXJtaXQsIHdoZXJlIGl0IHJldHVybnMgdGhlIHZhbHVlIG9mCi0gICAgICAgdGhl IHZhcmlhYmxlICJhIi4gU2ltaWxhcmx5LCAoMSkgcmV0dXJucyB0aGUgdmFsdWUgIjEiLgotICAg ICAqIEluIHJlYWwgTGlzcCwgRVZBTCByZXF1aXJlcyBleGFjdGx5IG9uZSBvcGVyYW5kLiBJbiBL ZXJtaXQsIGl0IGNhbgotICAgICAgIGhhdmUgMCwgMSwgMiwgb3IgbW9yZSBvcGVyYW5kcy4gSXQg cmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxhc3QKLSAgICAgICBvcGVyYW5kIGV2YWx1YXRlZC4K LSAgICAgKiBSZWFsIExpc3AgU0VUUSBhbmQgTEVUIHVzdWFsbHkgcmVxdWlyZSBhbiBldmVuIG51 bWJlciBvZiBvcGVyYW5kcy4KLSAgICAgICBLZXJtaXQgYWxsb3dzIGFuIG9kZCBudW1iZXIsIGlu IHdoaWNoIGNhc2UgdGhlIGxhc3QgKG9yIG9ubHkpCi0gICAgICAgdmFyaWFibGUgaXMgdW5kZWZp bmVkIChpLmUuIGRlbGV0ZWQsIGRlc3Ryb3llZCkuCi0gICAgICogS2VybWl0IGRvZXMgbm90IHN1 cHBvcnQgcmF0aW9zIHN1Y2ggYXMgIjcvOCIuIFNvbWUgTGlzcCBkaWFsZWN0cwotICAgICAgIGFj Y2VwdCByYXRpb3MgYXMgbnVtYmVycywgYW5kIGdlbmVyYXRlIHJhdGlvcyB3aGVuIHRvbGQgdG8g ZGl2aWRlCi0gICAgICAgdHdvIGludGVnZXJzIHdob3NlIHF1b3RpZW50IGlzIG5vdCBhIHdob2xl IG51bWJlcjsgZS5nLiBpbiBDb21tb24KLSAgICAgICBMaXNwOgotICBbMTNdIFVTRVIoMzcpOiAo LyAoKyAxIDIgMyA0KSAzKQotICAxMC8zCi0gIFsxM10gVVNFUigzOCk6Ci0KLSAgICAgKiBUaGUg cmVzdWx0IG9mICgvIDEwIDMpIGlzIDMuMzMzLi4uLiBTb21lIExpc3AgZGlhbGVjdHMgdHJ1bmNh dGUgdGhlCi0gICAgICAgcmVzdWx0IHRvIDMgc2luY2UgYm90aCBvcGVyYW5kcyBhcmUgaW50ZWdl cnMsIHNvbWUgZG9uJ3Q7IHNvbWUgZ2l2ZQotICAgICAgIHRoZSByZXN1bHQgYXMgYSByYXRpby4g Qy1LZXJtaXQgYWx3YXlzIGdpdmVzIGEgZmxvYXRpbmcgcG9pbnQKLSAgICAgICByZXN1bHQgd2hl biB0aGVyZSBpcyBhIGZyYWN0aW9uYWwgcGFydC4gSWYgeW91IHdhbnQgYW4gaW50ZWdlcgotICAg ICAgIHJlc3VsdCwgeW91IGNhbiB1c2UgVFJVTkNBVEUsIEZMT09SLCBvciBDRUlMSU5HLCBlLmcu ICh0cnVuY2F0ZSAoLwotICAgICAgIDEwIDMpKS4KLSAgICAgKiBUaGVyZSBpcyBjdXJyZW50bHkg bm8gImJpZ251bSIgc3VwcG9ydC4gTGFyZ2UgbnVtYmVycyBjYW4gYmUgdXNlZAotICAgICAgIGFu ZCBsYXJnZSByZXN1bHRzIGdlbmVyYXRlZCwgYnV0IChhcyBub3RlZCBpbiBbNTQ4XVNlY3Rpb24g OS4yKQotICAgICAgIHRoZXkgYXJlIGFjY3VyYXRlIG9ubHkgdG8gdGhlIHByZWNpc2lvbiBvZiB0 aGUgdW5kZXJseWluZyBtYWNoaW5lLgotICAgICAgIFx2KG1hdGhfcHJlY2lzaW9uKSBnaXZlcyB0 aGUgbWFjaGluZSBwcmVjaXNpb24gYXMgYSBudW1iZXIgb2YKLSAgICAgICBkZWNpbWFsIGRpZ2l0 cywgZS5nLiAxNi4KLSAgICAgKiBTY2llbnRpZmljIG5vdGF0aW9uIGZvciBmbG9hdGluZy1wb2lu dCBudW1iZXJzIGlzIG5vdCBzdXBwb3J0ZWQuIElmCi0gICAgICAgdGhlIG1hZ25pdHVkZSBvZiBh IG51bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIHByZWNpc2lvbiBvZiB0aGUKLSAgICAgICB1bmRl cmx5aW5nIGhhcmR3YXJlLCB0aGUgbGVzcy1zaWduaWZpY2FudCBkaWdpdHMgYXJlIHNob3duIGJ1 dAotICAgICAgIHRoZWlyIHZhbHVlcyBhcmUgbWVhbmluZ2xlc3MuIElmIGl0IHRoZSBudW1iZXIg aXMgdG9vIHNtYWxsIHRvIGJlCi0gICAgICAgcmVwcmVzZW50ZWQgaW50ZXJuYWxseSwgaXQgaXMg c2hvd24gYXMgIjAuMCIuCi0gICAgICogTWFueSBMaXNwIGZlYXR1cmVzIGFyZSBvbWl0dGVkOiBM aXN0IHByb2Nlc3NpbmcgKENBUiwgQ0RSLCBldGMpLAotICAgICAgIERFRlVOLCBMaXNwLXNwZWNp ZmljIGNvbnRyb2wgc3RydWN0dXJlcywgYW5kIHNvIG9uLgotCi0gICBbIFs1NDldVG9wIF0gWyBb NTUwXUNvbnRlbnRzIF0gWyBbNTUxXUMtS2VybWl0IEhvbWUgXSBbIFs1NTJdS2VybWl0Ci0gICBI b21lIF0KLQotMTAuIEZJTEUgVFJBTlNGRVIKLQotICAgTmV3IGNvbW1hbmRzIGFuZCBzd2l0Y2hl czoKLQotICAgU0VUIFRSQU5TRkVSIFJFUE9SVCB7IE9GRiwgT04gfQotICAgICAgICAgIEVuYWJs ZXMgb3IgZGlzYWJsZXMgdGhlIChuZXcpIG9uZS1saW5lIG1lc3NhZ2UgcHJpbnRlZCBieSBLZXJt aXQKLSAgICAgICAgICBhZnRlciBhIHJlbW90ZS1tb2RlIGZpbGUgdHJhbnNmZXIgdG8gaW5kaWNh dGUgdGhlIHNvdXJjZSBhbmQKLSAgICAgICAgICBkZXN0aW5hdGlvbiBmaWxlLCBjb21wbGV0ZSB3 aXRoIHBhdGgsIHRvIGxldCB5b3Uga25vdyB3aGVyZSB0aGUKLSAgICAgICAgICBmaWxlIHdlbnQu Ci0KLSAgIFNFTkQgL1RZUEU6e1RFWFQsQklOQVJZfQotICAgICAgICAgIFNlbmRzIG9ubHkgZmls ZXMgb2YgdGhlIGdpdmVuIHR5cGUgKHNlZSBbNTUzXVNlY3Rpb24gNCkuCi0KLSAgIFNFTkQgL05P Rk9MTE9XTElOS1M6Ci0gICAgICAgICAgKFVOSVggb25seSkgU2tpcCBvdmVyIHN5bWJvbGljIGxp bmtzIHJhdGhlciB0aGFuIGZvbGxvd2luZyB0aGVtCi0gICAgICAgICAgKGRlZmF1bHQpLiBUaGlz IGFwcGxpZXMgdG8gd2lsZGNhcmQgYW5kL29yIHJlY3Vyc2l2ZSBTRU5EczsgaWYgYQotICAgICAg ICAgIHNpbmdsZSBmaWxlbmFtZSBpcyBnaXZlbiwgYW5kIGl0IGhhcHBlbnMgdG8gYmUgYSBzeW1i b2xpYyBsaW5rLAotICAgICAgICAgIHRoZSBmaWxlIGl0IHBvaW50cyB0byBpcyBzZW50LgotCi0g ICBTRU5EIC9GT0xMT1dMSU5LUzoKLSAgICAgICAgICAoVU5JWCBvbmx5KSBGb2xsb3cgKHJlc29s dmUpIHN5bWJvbGljIGxpbmtzLiBXYXRjaCBvdXQgZm9yCi0gICAgICAgICAgY2lyY3VsYXIgbGlu a3MsIGVuZGxlc3MgbG9vcHMsIGV0Yy4KLQotICAgU0VUIFNFTkQgSS1QQUNLRVRTIHsgT0ZGLCBP TiB9Ci0gICAgICAgICAgV2hlbiBzZW5kaW5nIGNvbW1hbmRzIHRvIGEgS2VybWl0IHNlcnZlciwg dGhpcyB0ZWxscyB3aGV0aGVyCi0gICAgICAgICAgY29tbWFuZCBwYWNrZXRzIHNob3VsZCBiZSBw cmVjZWRlZCBieSBhbiBJIChpbmZvcm1hdGlvbikgcGFja2V0LAotICAgICAgICAgIHdoaWNoIGlz IHVzZWQgdG8gc3luY2hyb25pemUgcGFyYW1ldGVycyBwcmlvciB0byBleGVjdXRpbmcgdGhlCi0g ICAgICAgICAgY29tbWFuZC4gTm9ybWFsbHkgT04uIFRoZSBvbmx5IHJlYXNvbiB0byBzZXQgdGhp cyBPRkYgaXMgZm9yCi0gICAgICAgICAgY29tbXVuaWNhdGluZyB3aXRoIGJ1Z2d5IEtlcm1pdCBz ZXJ2ZXJzIHRoYXQgbWlzYmVoYXZlIHdoZW4gYW4gSQotICAgICAgICAgIHBhY2tldCBpcyBzZW50 IHRvIHRoZW0uIFRoZXJlIGlzIGFsc28gYSBTRVQgUkVDRUlWRSBJLVBBQ0tFVFMKLSAgICAgICAg ICBjb21tYW5kLCBidXQgcHJlc2VudGx5IGl0IGhhcyBubyBlZmZlY3QuCi0KLSAgIFNFVCBUUkFO U0ZFUiBNRVNTQUdFIFsgdGV4dCBdCi0gICAgICAgICAgU2V0cyBhbiBpbml0aWFsIG1lc3NhZ2Ug dG8gYmUgc2hvd24gaW4gdGhlIExhc3QgTWVzc2FnZSBmaWVsZCBvZgotICAgICAgICAgIHRoZSBm dWxsc2NyZWVuIGZpbGUtdHJhbnNmZXIgZGlzcGxheS4KLQotICAgU0VUIFRSQU5TRkVSIFRSQU5T TEFUSU9OIHsgT04sIE9GRiB9Ci0gICAgICAgICAgSW5oaWJpdHMgb3IgcmUtZW5hYmxlcyB0ZXh0 LWZpbGUgdHJhbnNmZXIgY2hhcmFjdGVyLXNldAotICAgICAgICAgIHRyYW5zbGF0aW9uIGdsb2Jh bGx5LgotCi0gICB7IFNFTkQsIE1TRU5ELCBHRVQsIFJFQ0VJVkUgfSAvVFJBTlNQQVJFTlQKLSAg ICAgICAgICBJbmhpYml0cyBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIGZvciB0aGlzIHRyYW5z ZmVyIG9ubHkuCi0KLSAgIHsgR0VULCBSRUNFSVZFIH0gL1BJUEVTOntPTixPRkZ9Ci0gICAgICAg ICAgT3ZlcnJpZGVzIGdsb2JhbCBUUkFOU0ZFUiBQSVBFUyBzZXR0aW5nIGZvciB0aGlzIHRyYW5z ZmVyIG9ubHk7Ci0gICAgICAgICAgT04gYWxsb3dzIGluY29taW5nIGZpbGVzIHdpdGggbmFtZXMg bGlrZSAiIXRhciB4ZiAtIiB0byBiZQotICAgICAgICAgIG9wZW5lZCBhcyBwaXBlbGluZXMgcmF0 aGVyIHRoYW4gcmVndWxhciBmaWxlcy4KLQotICAgVGhlIGZvbGxvd2luZyBuZXcgImhvdCBrZXlz IiBhcmUgYXZhaWxhYmxlIHdoZW4gS2VybWl0J3MgZmlsZS10cmFuc2ZlcgotICAgZGlzcGxheSBp cyB2aXNpYmxlOgotCi0gICAgIEQ6IFR1cm4gb24gZGVidWdnaW5nLCBvcGVuICJkZWJ1Zy5sb2ci IGlmIG5vdCBhbHJlYWR5IG9wZW4uCi0gICAgIGQ6IFR1cm4gb2ZmIGRlYnVnZ2luZyBidXQgbGVh dmUgbG9nIG9wZW4gKGlmIGl0IHdhcyBvcGVuKS4KLSAgICAgVDogVHVybiBvbiBkZWJ1Zy1sb2cg dGltZXN0YW1wcy4KLSAgICAgdDogVHVybiBvZmYgZGVidWctbG9nIHRpbWVzdGFtcHMuCi0KLSAg IE90aGVyIGltcHJvdmVtZW50czoKLSAgICAgKiBTRVQgRklMRSBET1dOTE9BRC1ESVJFQ1RPUlkg bm93IHdvcmtzIGZvciBleHRlcm5hbCBwcm90b2NvbHMgKGUuZy4KLSAgICAgICBzei9yeikgdG9v LgotICAgICAqIEltcHJvdmVkIGF1dG9tYXRpYyBwZXItZmlsZSB0ZXh0L2JpbmFyeSBzd2l0Y2hp bmcsIGRlc2NyaWJlZCBpbgotICAgICAgIFs1NTRdU2VjdGlvbiA0LgotICAgICAqIFdoZW4gc2Vu ZGluZyBhIGZpbGUgZ3JvdXAgKGUuZy4gInNlbmQgKi4qIiksIGZhaWx1cmUgdG8gb3BlbiBhIGZp bGUKLSAgICAgICBpcyBubyBsb25nZXIgZmF0YWw7IG5vdyBDLUtlcm1pdCBzaW1wbHkgZ29lcyBh aGVhZCB0byB0aGUgbmV4dAotICAgICAgIGZpbGUuCi0gICAgICogVHJhbnNhY3Rpb24gbG9nIGVu dHJpZXMgYXJlIG5vdyBtYWRlIGZvciBleHRlcm5hbCBwcm90b2NvbHMgdG9vLgotCi0gICBbIFs1 NTVdVG9wIF0gWyBbNTU2XUNvbnRlbnRzIF0gWyBbNTU3XUMtS2VybWl0IEhvbWUgXSBbIFs1NThd S2VybWl0Ci0gICBIb21lIF0KLQotMTEuIE1PREVNUyBBTkQgRElBTElORwotCi0gICBJbiBDLUtl cm1pdCA4LjAsIHRoZSBkZWZhdWx0IG1vZGVtIHR5cGUgZm9yIGRpYWxpbmcgaGFzIGNoYW5nZWQg ZnJvbQotICAgTk9ORSAoPSBESVJFQ1QsIG1lYW5pbmcgbm8gbW9kZW0pIHRvIEdFTkVSSUMuIFRo aXMgY2hhbmdlIHNob3VsZCBoYXZlCi0gICBubyBpbXBhY3Qgb24gZGlyZWN0IGNvbm5lY3Rpb25z LiBGb3IgZGlhbGluZywgaXQgbWVhbnMgdGhhdCwgdW5sZXNzIHlvdQotICAgU0VUIE1PREVNIFRZ UEUgdG8gYSBzcGVjaWZpYyB0eXBlLCBzdWNoIGFzIFVTUk9CT1RJQ1Mgb3IgQ09ORVhBTlQsCi0g ICBLZXJtaXQgYXNzdW1lczoKLQotICAgIDEuIFRoZSBtb2RlbSB1c2VzIHRoZSBIYXllcyBBVCBj b21tYW5kIHNldC4KLSAgICAyLiBUaGUgbW9kZW0gc3VwcG9ydHMgZXJyb3IgY29ycmVjdGlvbiwg ZGF0YSBjb21wcmVzc2lvbiwgYW5kIGhhcmR3YXJlCi0gICAgICAgZmxvdyBjb250cm9sIGFuZCBp cyBhbHJlYWR5IGNvbmZpZ3VyZWQgdG8gdXNlIHRoZW0uCi0KLSAgIEluIGZhY3QsIEtlcm1pdCBh c3N1bWVzIHRoZSBtb2RlbSBpcyBjb21wbGV0ZWx5IGNvbmZpZ3VyZWQsIGFuZAotICAgdGhlcmVm b3JlIGRvZXMgbm90IHNlbmQgaXQgYW4gaW5pdGlhbGl6YXRpb24gc3RyaW5nIG9yIGFueQotICAg Y29uZmlndXJhdGlvbiBjb21tYW5kcy4gSW5zdGVhZCwgaXQgc2VuZHMgb25seSB0aGUgc2ltcGxl c3QgYW5kIG1vc3QKLSAgIHBvcnRhYmxlIGNvbW1hbmRzOgotCi0gICAgIEFUUTBWMSAgICAgICAg ICBHaXZlIGRpYWwgcmVzdWx0IGNvZGVzLgotICAgICBBVERUbnVtYmVyICAgICAgRGlhbCB0aGUg bnVtYmVyLgotCi0gICAob3IgQVREIG9yIEFURFAsIGFzIGFwcHJvcHJpYXRlKS4KLQotICAgVGhl IG5ldyBkZWZhdWx0cyB3b3JrIGZvciBkaXJlY3QgY29ubmVjdGlvbnMgYW5kIGZvciBtb3N0IG1v ZGVybiBtb2RlbXMKLSAgIG9uIG1vc3QgcGxhdGZvcm1zLCBhbmQgdGhleSB3b3JrIG11Y2ggZmFz dGVyIHRoYW4gImZ1bGwtdHJlYXRtZW50IgotICAgZGlhbGluZy4gSWYgdGhlIG5ldyBkZWZhdWx0 cyBkb24ndCB3b3JrIGZvciB5b3UsIG9yIGlmIHlvdSBuZWVkIHRvCi0gICBwZXJmb3JtIGV4cGxp Y2l0IG1vZGVtIGNvbmZpZ3VyYXRpb25zIG9yIGludGVyYWN0aW9ucywgdGhlbiBzZXQgYQotICAg c3BlY2lmaWMgbW9kZW0gdHlwZSBhbmQgdXNlIHRoZSBTRVQgTU9ERU0gYW5kIFNFVCBESUFMIGNv bW1hbmRzIGFzCi0gICBkb2N1bWVudGVkIGluIFVzaW5nIEMtS2VybWl0LgotCi0gICAgIFdBUk5J Tkc6IERvbid0IHVzZSB0aGUgZ2VuZXJpYyBtb2RlbSBvbiBob3N0cyB0aGF0IGRvIG5vdCBzdXBw b3J0Ci0gICAgIFJUUy9DVFMgZmxvdyBjb250cm9sLiBJZiBYb24vWG9mZiBpcyBpbiB1c2Ugb24g dGhlIHNlcmlhbCBwb3J0LAotICAgICB5b3UnbGwgbmVlZCB0byBzZWxlY3QgYSBwYXJ0aWN1bGFy IG1vZGVtIHR5cGUgc28gS2VybWl0IGtub3dzIHdoYXQKLSAgICAgY29tbWFuZCB0byBnaXZlIGl0 IHRvIGVuYWJsZSBYb24vWG9mZiBmbG93IGNvbnRyb2wgYmV0d2VlbiBpdHNlbGYKLSAgICAgYW5k IHlvdXIgc2VyaWFsIHBvcnQuCi0KLSAgIFRoZSBmb2xsb3dpbmcgbmV3IG1vZGVtIHR5cGVzIHdl cmUgYWRkZWQgaW4gQy1LZXJtaXQgOC4wOgotCi0gICAgIGx1Y2VudDogICAgICAgICAgTHVjZW50 IFZlbnVzIGNoaXBzZXQKLSAgICAgcGN0ZWw6ICAgICAgICAgICBQQ1RlbCBWLjkwIGNoaXBzZXQK LSAgICAgY29uZXhhbnQ6ICAgICAgICBDb25leGFudCAoZXgtUm9ja3dlbGwpIG1vZGVtIGZhbWls eQotICAgICB6b29tLXYzMmJpczogICAgIE5ldyBuYW1lIGZvciAiWm9vbSIKLSAgICAgem9vbS12 MzQgICAgICAgICBab29tIFYuMzQKLSAgICAgem9vbS12OTAgICAgICAgICBab29tIFYuOTAgNTZL Ci0gICAgIHpvb20tdjkyOiAgICAgICAgWm9vbSBWLjkyIHdpdGggVi40NCBkYXRhIGNvbXByZXNz aW9uCi0gICAgIHpvbHRyaXgtdjM0OiAgICAgTmV3IG5hbWUgZm9yICJ6b2x0cml4IgotICAgICB6 b2x0cml4LWhzcC12OTA6IFN5bm9ueW0gZm9yIFBDVGVsCi0gICAgIHpvbHRyaXgtaGNmLXY5MDog U3lub255bSBmb3IgSVRVLVQtVjI1MAotICAgICBzbWFydGxpbmstdjkwOiAgIFN5bm9ueW0gZm9y IHVzcm9ib3RpY3MgKHNhbWUgY2hpcHNldCkKLSAgICAgYWNlci12OTA6ICAgICAgICBTeW5vbnlt IGZvciBSb2Nrd2VsbC12OTAKLQotICAgTmV3IERJQUwtcmVsYXRlZCB2YXJpYWJsZXM6Ci0KLSAg ICAgXHYoZG1faGYpOiAgRGlhbCBtb2RpZmllcjogV2FpdCBmb3IgSG9vay1GbGFzaC4KLSAgICAg XHYoZG1fd2IpOiAgRGlhbCBtb2RpZmllcjogV2FpdCBmb3IgQm9uZy4KLQotICAgRmluYWxseSwg aWYgZGlhbGluZyBmYWlscywgS2VybWl0IG5vdyBwcmludHMgYSBjb250ZXh0LXNlbnNpdGl2ZSBo aW50Ci0gICBzdWdnZXN0aW5nIHBvc3NpYmxlIHJlYXNvbnMgYW5kIHJlbWVkaWVzLgotCi0gICBB ZGRlZCBpbiBDLUtlcm1pdCA4LjAuMjAxOiAgIFJ1ZGltZW50YXJ5IHN1cHBvcnQgZm9yIENhbGxl ciBJRCwgZm9yIHVzZQotICAgd2l0aCB0aGUgQU5TV0VSIGNvbW1hbmQuIElmIHRoZSBtb2RlbSBy ZXBvcnRzIENhbGxlciBJRCBpbmZvcm1hdGlvbiwKLSAgIEtlcm1pdCBzdG9yZXMgaXQgaW4gdmFy aWFibGVzIHRoYXQgeW91IGNhbiBhY2Nlc3MgYWZ0ZXIgdGhlIGNhbGwgaXMKLSAgIGFuc3dlcmVk OgotCi0gIFx2KGNhbGxpZF9kYXRlKSAgIFRoZSBkYXRlIG9mIHRoZSBjYWxsCi0gIFx2KGNhbGxp ZF90aW1lKSAgIFRoZSB0aW1lIG9mIHRoZSBjYWxsCi0gIFx2KGNhbGxpZF9uYW1lKSAgIFRoZSBu YW1lIG9mIHRoZSBjYWxsZXIKLSAgXHYoY2FsbGlkX25tYnIpICAgVGhlIHRlbGVwaG9uZSBudW1i ZXIgb2YgdGhlIGNhbGxlcgotICBcdihjYWxsaWRfbWVzZykgICBBIG1lc3NhZ2UKLQotICAgVGhl IGZvcm1hdCBvZiB0aGVzZSBpdGVtcyBkZXBlbmRzIG9uIHRoZSBvcmlnaW5hdGluZyBhbmQgYW5z d2VyaW5nCi0gICBwaG9uZSBjb21wYW5pZXMgYW5kIHRoZSBtb2RlbXMgYW5kIHRoZWlyIGNvbmZp Z3VyYXRpb24uCi0KLSAgIE5vdCB2ZXJ5IG1hbnkgbW9kZW1zIHN1cHBvcnQgQ2FsbGVyIElELCBh bmQgdGhvc2UgdGhhdCBkbyAoYSkgdGVuZCB0bwotICAgaGF2ZSBpdCBkaXNhYmxlZCBieSBkZWZh dWx0LCBhbmQgKGIpIHVzZSBkaWZmZXJlbnQgY29tbWFuZHMgdG8gZW5hYmxlCi0gICBpdC4gQSBx dWljayBzdXJ2ZXkgc2hvd3Mgb2Ygc29tZSBjdXJyZW50IG1vZGVscyBzaG93czoKLQotICAgLSBV U1IgVi45MDogICAgICBObwotICAgLSBJVFUtVCBWLjI1MDogICBObwotICAgLSBMdWNlbnQgVmVu dXM6ICBObwotICAgLSBEaWFtb25kIFN1cHJhOiAjQ0lEPTEKLSAgIC0gUm9ja3dlbGwgNTZLOiAg I0NJRD0xCi0gICAtIFBDVEVMOiAgICAgICAgICNDSUQ9MQotICAgLSBab2x0cml4OiAgICAgICAr VkNJRD0xCi0gICAtIENvbmV4YW50OiAgICAgICtWQ0lEPTEKLQotICAgVG8gdXNlIEtlcm1pdCdz IENhbGxlciBJRCBmZWF0dXJlLCB5b3UgaGF2ZSB0byBzZXQgdGhlIG1vZGVtIHRvIHdhaXQKLSAg IGZvciBhdCBsZWFzdCB0d28gcmluZ3MgYmVmb3JlIGFuc3dlcmluZywgYW5kIHlvdSBoYXZlIHRv IGdpdmUgdGhlCi0gICBjb21tYW5kIHRvIGVuYWJsZSBDYWxsZXIgSUQ7IGZvciBleGFtcGxlIChh ZnRlciBjaG9vc2luZyBhIG1vZGVtIHdpdGgKLSAgIFNFVCBNT0RFTSBUWVBFKToKLQotICBzZXQg bW9kZW0gY29tbWFuZCBhdXRvYW5zd2VyIG9uIEFUUzA9MiNDSUQ9MVx7MTN9Ci0gIHNldCBtb2Rl bSBjb21tYW5kIGF1dG9hbnN3ZXIgb24gQVRTMD0yK1ZDSUQ9MVx7MTN9Ci0KLSAgIFRoZXNlIGNv bW1hbmRzIGNhbiBiZSB1bmRvbmUgd2l0aDoKLQotICBzZXQgbW9kZW0gY29tbWFuZCBhdXRvYW5z d2VyIG9uIEFUUzA9MSNDSUQ9MFx7MTN9Ci0gIHNldCBtb2RlbSBjb21tYW5kIGF1dG9hbnN3ZXIg b24gQVRTMD0xK1ZDSUQ9MFx7MTN9Ci0KLSAgIEtlcm1pdCBwcmVzZW50bHkgaGFzIG5vIGJ1aWx0 LWluIGtub3dsZWRnZSBvZiB0aGUgQ2FsbGVyIElECi0gICBjYXBhYmlsaXRpZXMgb3IgY29tbWFu ZHMgb2YgdGhlIG1vZGVtcyBpbiBpdHMgZGF0YWJhc2UuCi0KLSAgIFNpbmNlIHRoZSB2YXJpYWJs ZXMgY2FuIGJlIGFjY2Vzc2VkIG9ubHkgYWZ0ZXIgdGhlIGNhbGwgaXMgYW5zd2VyZWQsCi0gICB0 aGUgb25seSB3YXkgdG8gcmVmdXNlIGEgY2FsbCBpcyB0byBhbnN3ZXIgaXQsIGluc3BlY3QgdGhl IHZhcmlhYmxlcywKLSAgIGFuZCB0aGVuIGhhbmcgaXQgdXAgaWYgZGVzaXJlZC4KLQotICAgWyBb NTU5XVRvcCBdIFsgWzU2MF1Db250ZW50cyBdIFsgWzU2MV1DLUtlcm1pdCBIb21lIF0gWyBbNTYy XUtlcm1pdAotICAgSG9tZSBdCi0KLTEyLiBURVJNSU5BTCBDT05ORUNUSU9OCi0KLSAgIE5vdyB0 aGF0IDctYml0IGNvbm5lY3Rpb25zIGFyZSBubyBsb25nZXIgdGhlIG5vcm0sIHRoZSBkZWZhdWx0 IHRlcm1pbmFsCi0gICBieXRlc2l6ZSAoYWxzbyBjYWxsZWQgImRhdGEgc2l6ZSIgb3IgIndvcmQg c2l6ZSIpIGluIEMtS2VybWl0IDguMCBpcyA4Ci0gICBiaXRzLCByYXRoZXIgdGhhbiA3IGJpdHMg YXMgaXQgd2FzIGluIEMtS2VybWl0IDcuMCBhbmQgZWFybGllcjoKLQotICAgU0VUIEVTQ0FQRSBj aGFyYWN0ZXIKLSAgICAgICAgICBUaGlzIGNvbW1hbmQsIHdoaWNoIHNwZWNpZmllcyB5b3VyIENP Tk5FQ1QtbW9kZSBlc2NhcGUKLSAgICAgICAgICBjaGFyYWN0ZXIsIGFsbG93cyB5b3UgdG8gc3Bl Y2lmeSBhbnkgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXIgaW4KLSAgICAgICAgICBhIHZhcmlldHkg b2YgZm9ybWF0cy4gQy1LZXJtaXQgOC4wLjIwMSBub3cgYWxzbyBsZXRzIHlvdSBzcGVjaWZ5Ci0g ICAgICAgICAgYW55IDgtYml0IHZhbHVlLCAxMjgtMjU1LCBhcyB0aGUgZXNjYXBlIGNoYXJhY3Rl ci4gSW4gdGhlIFNFVAotICAgICAgICAgIEVTQ0FQRSBjb21tYW5kLCB5b3UgY2FuIHR5cGUgdGhl IDgtYml0IGNoYXJhY3RlciBsaXRlcmFsbHkgb3IKLSAgICAgICAgICB5b3UgY2FuIGVudGVyIGl0 cyBudW1lcmljIGNvZGUuIEhlcmUgYXJlIGV4YW1wbGVzIHRoYXQgeW91IGNhbgotICAgICAgICAg IGVudGVyIGZyb20gYSB0ZXJtaW5hbCBvciBjb25zb2xlIHRoYXQgdXNlcyB0aGUgSVNPIExhdGlu LTEKLSAgICAgICAgICBjaGFyYWN0ZXIgc2V0OgotCi0gIEMtS2VybWl0PiBzZXQgZXNjYXBlIO+/ vQotICBDLUtlcm1pdD4gc2V0IGVzY2FwZSAxOTUKLSAgQy1LZXJtaXQ+IHNob3cgZXNjYXBlCi0g ICBFc2NhcGUgY2hhcmFjdGVyOiBDb2RlIDE5NSAo77+9KTogZW5hYmxlZAotICBDLUtlcm1pdD4K LQotICAgICAgICAgIEJvdGggb2YgdGhlc2UgY29tbWFuZHMgc2V0IHRoZSBlc2NhcGUgY2hhcmFj dGVyIHZhbHVlIHRvIDE5NQotICAgICAgICAgIChkZWNpbWFsKSwgd2hpY2ggaGFwcGVucyB0byBi ZSB1cHBlcmNhc2UgbGV0dGVyIEEgd2l0aCBUaWxkZSBpbgotICAgICAgICAgIExhdGluLTEuIFNI T1cgRVNDQVBFIGFuZCBTSE9XIFRFUk1JTkFMIHNob3cgdGhlIHZhbHVlLCBhcyBkb2VzCi0gICAg ICAgICAgdGhlIENPTk5FQ1QgbWVzc2FnZS4KLQotICAgU0VUIFRFUk1JTkFMIEFVVE9ET1dOTE9B RCBFUlJPUiB7IFNUT1AsIENPTlRJTlVFIH0KLSAgICAgICAgICBXaGVuIEtlcm1pdCBoYXMgYSB0 ZXJtaW5hbCBjb25uZWN0aW9uIHRvIGFub3RoZXIgY29tcHV0ZXIsIGFuZCBhCi0gICAgICAgICAg ZmlsZSB0cmFuc2ZlciBpcyBpbml0aWF0ZWQgYXV0b21hdGljYWxseSBiZWNhdXNlIGEgS2VybWl0 IHBhY2tldAotICAgICAgICAgIHdhcyByZWNlaXZlZCBpbiBDT05ORUNUIG1vZGUgKGkuZS4gaW4g dGhlIHRlcm1pbmFsIHNjcmVlbiksIHRoaXMKLSAgICAgICAgICBjb21tYW5kIHRlbGxzIHdoYXQg S2VybWl0IHNob3VsZCBkbyBpZiB0aGUgdHJhbnNmZXIgZmFpbHMuIFRoZQotICAgICAgICAgIGRl ZmF1bHQgaXMgdG8gU1RPUCwgd2hpY2ggbGVhdmVzIEtlcm1pdCBpbiBjb21tYW5kIG1vZGUgd2l0 aCBpdHMKLSAgICAgICAgICBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgc2hvd2luZywgc28geW91IGNh biBzZWUgdGhhdCB0aGUgdHJhbnNmZXIKLSAgICAgICAgICBmYWlsZWQgYW5kIHdoeS4gSWYgeW91 IFNFVCBURVJNSU5BTCBBVVRPRE9XTkxPQUQgRVJST1IgQ09OVElOVUUsCi0gICAgICAgICAgdGhp cyBjYXVzZXMgS2VybWl0IHRvIHJldHVybiBhdXRvbWF0aWNhbGx5IHRvIGl0cyB0ZXJtaW5hbAot ICAgICAgICAgIHNjcmVlbiAoaS5lLiByZXN1bWUgaXRzIENPTk5FQ1Qgc2Vzc2lvbikgYXMgaWYg dGhlIHRyYW5zZmVyIGhhZAotICAgICAgICAgIHN1Y2NlZWRlZDsgdGhpcyBjYW4gYmUgZGVzaXJh YmxlIGlmIHRoZSBlbnRpcmUgc2Vzc2lvbiBpcyB1bmRlcgotICAgICAgICAgIGNvbnRyb2wgb2Yg YSBob3N0LWJhc2VkIHNjcmlwdC4KLQotICAgU0VUIFRFUk1JTkFMIEJZVEVTSVpFIHsgNywgOCB9 Ci0gICAgICAgICAgVGhlIGJ5dGUgc2l6ZSB0byB1c2UgZHVyaW5nIENPTk5FQ1QgYW5kIElOUFVU IGNvbW1hbmQgZXhlY3V0aW9uLAotICAgICAgICAgIHdoaWNoIGNhbiBiZSBtb3JlIHJlc3RyaWN0 aXZlIHRoYW4gdGhlIGJ5dGVzaXplIGltcGxpZWQgYnkgdGhlCi0gICAgICAgICAgY3VycmVudCBQ QVJJVFkgc2V0dGluZywgYnV0IG5vdCBsZXNzIHJlc3RyaWN0aXZlLiBJbiBDLUtlcm1pdAotICAg ICAgICAgIDcuMCBhbmQgZWFybGllciwgdGhlIHRlcm1pbmFsIGJ5dGVzaXplIHdhcyA3IGJ5IGRl ZmF1bHQgdG8KLSAgICAgICAgICBwcm90ZWN0IGFnYWluc3QgdGhlIGxpa2VsaWhvb2QgdGhhdCBw YXJpdHkgd2FzIGluIHVzZSBvbiB0aGUKLSAgICAgICAgICBjb25uZWN0aW9uIHdpdGhvdXQgdGhl IHVzZXIncyBrbm93bGVkZ2UuIFdoZW4gdGhlIHRlcm1pbmFsCi0gICAgICAgICAgYnl0ZXNpemUg aXMgOCAoYXMgaXQgaXMgaW4gQy1LZXJtaXQgOC4wIGFuZCBsYXRlciksIHRoZSB1c2VyCi0gICAg ICAgICAgd2lsbCBzZWUgZ2FyYmFnZSBpbiB0aGlzIChpbmNyZWFzaW5nbHkgdW5saWtlbHkpIHNp dHVhdGlvbi4gTm90ZQotICAgICAgICAgIHRoYXQgOCBkYXRhIGJpdHMgYXJlIHJlcXVpcmVkIGZv ciBtb3N0IGNoYXJhY3RlciBzZXRzIG90aGVyIHRoYW4KLSAgICAgICAgICBBU0NJSTogTGF0aW4t MSwgVVRGLTgsIGFuZCBzbyBvbi4KLQotICAgQSBuZXcgY29tbWFuZCBoYXMgYmVlbiBhZGRlZCB0 byBwcm9kdWNlIHRpbWVzdGFtcGVkIHNlc3Npb24gbG9nczoKLQotICAgU0VUIFRFUk1JTkFMIFNF U1NJT04tTE9HIFRJTUVTVEFNUEVELVRFWFQKLSAgICAgICAgICBSZWNvcmRzIHRoZSB0ZXJtaW5h bCBzZXNzaW9uIGluIHRleHQgbW9kZSAobGlrZSBTRVQgVEVSTUlOQUwKLSAgICAgICAgICBTRVNT SU9OLUxPRyBURVhUKSBidXQgYWRkcyBhIHRpbWVzdGFtcCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVh Y2gKLSAgICAgICAgICBsaW5lLiBUaGUgdGltZXN0YW1wIGZvcm1hdCBpcyBoaDptbTpzcy5ubm4s IGFuZCBpbmRpY2F0ZXMgdGhlCi0gICAgICAgICAgdGltZSBhdCB3aGljaCB0aGUgZmlyc3QgY2hh cmFjdGVyIG9mIHRoZSBsaW5lIGFwcGVhcmVkLgotCi0gICBJbiBtb3N0IFVOSVggdmVyc2lvbnMg KHRob3NlIGJ1aWx0IHdpdGggdGhlIHNlbGVjdCgpLWNhcGFibGUgQ09OTkVDVAotICAgbW9kdWxl IC0tIHByZXR0eSBtdWNoIGFsbCB0aGUgb25lcyB0aGF0IGhhdmUgb3IgY291bGQgaGF2ZSBURUxO RVQKLSAgIGluY2x1ZGVkKSwgYW4gaWRsZSB0aW1lb3V0IGZlYXR1cmUgaGFzIGJlZW4gYWRkZWQ6 Ci0KLSAgIFNFVCBURVJNSU5BTCBJRExFLVRJTUVPVVQgbnVtYmVyCi0gICAgICAgICAgSWYgdGhl IG51bWJlciBpcyBub3QgMCwgdGhlbiBLZXJtaXQgaXMgdG8gdGFrZSBhbiBhY3Rpb24gd2hlbgot ICAgICAgICAgIHRoZSBnaXZlbiBhbW91bnQgb2YgdGltZSBwYXNzZXMgd2l0aCBubyBhY3Rpdml0 eSBkdXJpbmcgQ09OTkVDVAotICAgICAgICAgIG1vZGUuIElmIHRoZSBudW1iZXIgaXMgcG9zaXRp dmUgaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGlkbGUKLSAgICAgICAgICBzZWNvbmRzOyBp ZiBudW1iZXIgaXMgbmVnYXRpdmUgaXQgcmVwcmVzZW50cyBtaWxsaXNlY29uZHMKLSAgICAgICAg ICAodGhvdXNhbmR0aHMgb2Ygc2Vjb25kcykuIElmIDAgaXMgZ2l2ZW4gYXMgdGhlIG51bWJlciwg dGhlcmUgYXJlCi0gICAgICAgICAgbm8gaWRsZSB0aW1lb3V0cy4gU3lub255bTogU0VUIFRFUk1J TkFMIElETEUtTElNSVQuCi0KLSAgIFNFVCBURVJNSU5BTCBJRExFLUFDVElPTiB7IFJFVFVSTiwg SEFOR1VQLCBFWElULCBPVVRQVVQgWyBzdHJpbmcgXSB9Ci0gICAgICAgICAgVGhlIGFjdGlvbiB0 byBiZSB0YWtlbiB1cG9uIGFuIGlkbGUgdGltZW91dCBpbiBDT05ORUNUIG1vZGUuCi0gICAgICAg ICAgUkVUVVJOIHRvIHRoZSBwcm9tcHQsIEhBTkdVUCB0aGUgY29ubmVjdGlvbiwgRVhJVCBmcm9t IEtlcm1pdCwKLSAgICAgICAgICBvciBPVVRQVVQgdGhlIGdpdmVuIHN0cmluZyAoaWYgbm8gc3Ry aW5nIGlzIGdpdmVuLCBhIE5VTCAoQVNDSUkKLSAgICAgICAgICAwKSBjaGFyYWN0ZXIgaXMgc2Vu dCkuCi0KLSAgIFNFVCBURVJNSU5BTCBJRExFLUFDVElPTiB7IFRFTE5FVC1OT1AsIFRFTE5FVC1B WVQgfQotICAgICAgICAgIEFjdGlvbnMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgb24gVGVsbmV0IGNv bm5lY3Rpb25zIG9ubHksIHRoYXQKLSAgICAgICAgICBtaWdodCBiZSB1c2VmdWwgaWYgaWRsZSBs aW1pdHMgYXJlIGVuZm9yY2VkIGJ5IHRoZSBUZWxuZXQgc2VydmVyCi0gICAgICAgICAgb3IgaW4g dGhlIFRDUC9JUCBwcm90b2NvbDogVEVMTkVULU5PUCBzZW5kcyBhICJOTyBPcGVyYXRpb24iCi0g ICAgICAgICAgKGRvLW5vdGhpbmcpIGNvbW1hbmQsIHdoaWNoIGNhdXNlcyBubyByZXNwb25zZSBm cm9tIHRoZSBzZXJ2ZXI7Ci0gICAgICAgICAgVEVMTkVULUFZVCBzZW5kcyBhbiAiQXJlIFlvdSBU aGVyZSIgbWVzc2FnZSB0byB0aGUgc2VydmVyLCB3aGljaAotICAgICAgICAgIHNob3VsZCBtYWtl IHRoZSBzZXJ2ZXIgc2VuZCBiYWNrIGEgbWVzc2FnZS4gTmVpdGhlciBvZiB0aGVzZQotICAgICAg ICAgIGFjdGlvbnMgaW50ZXJmZXJlcyB3aXRoIHlvdXIgcmVtb3RlIHNlc3Npb24uCi0KLSAgIFNF VCBURVJNSU5BTCBJRExFLUFDVElPTiBpcyB1c2VmdWwgZm9yIGNvbm5lY3Rpb25zIHRvIGhvc3Rz IG9yIHNlcnZpY2VzCi0gICB0aGF0IGF1dG9tYXRpY2FsbHkgbG9nIHlvdSBvdXQgYWZ0ZXIgYSBj ZXJ0YWluIGFtb3VudCBvZiBpZGxlIHRpbWUsCi0gICBlLmcuOgotCi0gIHNldCB0ZXJtIGlkbGUt dGltZW91dCAzMDAKLSAgc2V0IHRlcm0gaWRsZS1hY3Rpb24gb3V0cHV0IFwzMgotCi0gICBzZW5k cyBhIHNwYWNlIChhcyBpZiB5b3UgaGFkIHByZXNzZWQgdGhlIHNwYWNlIGJhcikgZXZlcnkgMzAw IHNlY29uZHMKLSAgIChmaXZlIG1pbnV0ZXMpIHdoaWxlIHRoZXJlIGlzIG5vIGFjdGl2aXR5ICgz MiBpcyB0aGUgQVNDSUkgY29kZSBmb3IKLSAgIHNwYWNlKS4KLQotICAgV2hlbiBDLUtlcm1pdCBy ZXR1cm5zIGZyb20gQ09OTkVDVCB0byBjb21tYW5kIG1vZGUsIHRoZSByZWFzb24gZm9yIHRoZQot ICAgdHJhbnNpdGlvbiBpcyBnaXZlbiBpbiBhIG5ldyB2YXJpYWJsZSwgXHYoY3hfc3RhdHVzKToK LQotICAgICAgMCAgTm8gQ09OTkVDVCBjb21tYW5kIGdpdmVuIHlldC4KLSAgICAgIDEgIFVzZXIg ZXNjYXBlZCBiYWNrIG1hbnVhbGx5LgotICAgICAgMiAgQSB0cmlnZ2VyIHN0cmluZyB3YXMgZW5j b3VudGVyZWQuCi0gICAgICAzICBJS1NEIGVudGVyZWQgc2VydmVyIG1vZGUuCi0gICAgICA0ICBB cHBsaWNhdGlvbiBQcm9ncmFtIENvbW1hbmQgcmVjZWl2ZWQgZnJvbSBob3N0LgotICAgICAgNSAg SWRsZSB0aW1lb3V0LgotICAgICAgNiAgVGVsbmV0IHByb3RvY29sIGVycm9yLgotICAgICAgNyAg S2V5c3Ryb2tlIG1hY3JvLgotICAgICAgOCAgVGltZSBsaW1pdCBleGNlZWRlZC4KLSAgICAxMDAg IEludGVybmFsIGVycm9yLgotICAgIDEwMSAgQ2FycmllciByZXF1aXJlZCBieSBub3QgZGV0ZWN0 ZWQuCi0gICAgMTAyICBJL08gZXJyb3Igb24gY29ubmVjdGlvbi4KLSAgICAxMDMgIERpc2Nvbm5l Y3RlZCBieSBob3N0LgotICAgIDEwNCAgRGlzY29ubmVjdGVkIGJ5IHVzZXIuCi0gICAgMTA1ICBT ZXNzaW9uIGxpbWl0IGV4Y2VlZGVkLgotICAgIDEwNiAgUmVqZWN0ZWQgZHVlIHRvIFRlbG5ldCBw b2xpY3kuCi0gICAgMTA3ICBSZWNlaXZlZCBraWxsIHNpZ25hbC4KLQotICAgVmFsdWVzIDEwMCBh bmQgYWJvdmUgaW5kaWNhdGUgdGhlcmUgaXMgbm8gY29ubmVjdGlvbi4KLQotICAgWyBbNTYzXVRv cCBdIFsgWzU2NF1Db250ZW50cyBdIFsgWzU2NV1DLUtlcm1pdCBIb21lIF0gWyBbNTY2XUtlcm1p dAotICAgSG9tZSBdCi0KLTEzLiBDSEFSQUNURVIgU0VUUwotCi0gICBTZWUgdGhlIHNlY3Rpb24g b24gWzU2N11maWxlIHNjYW5uaW5nIGFib3ZlLCBhbmQgdGhlIHNlY3Rpb24gb24KLSAgIGNoYXJh Y3Rlci1zZXQgY29udmVyc2lvbiBpbiBbNTY4XUZUUC4gQWxzbzoKLQotICAgICAqIFRydWUgc3Vw cG9ydCBmb3IgQ1AxMjUyIChyYXRoZXIgdGhhbiB0cmVhdGluZyBpdCBhcyBMYXRpbi0xKS4KLSAg ICAgKiBQcm9wZXIgaGFuZGxpbmcgb2YgQzEgdmFsdWVzIHdoZW4gY29udmVydGluZyBJU08gOC1i aXQgdGV4dCB0bwotICAgICAgIFVURi04LgotICAgICAqIFRZUEUgL0NIQVJBQ1RFUi1TRVQ6IC9U UkFOU0xBVEUtVE86IGFsbG93cyBzcGVjaWZpYyB0cmFuc2xhdGlvbnMuCi0gICAgICogVGhlIFRS QU5TTEFURSBjb21tYW5kIG5vdyB3b3JrcyBvbiBtdWx0aXBsZSBmaWxlcy4KLSAgICAgKiBLX0NI QVJTRVQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gc2V0IHRoZSBmaWxlIGNoYXJhY3Rlci1zZXQu Ci0gICAgICogU0VUIFRSQU5TRkVSIFRSQU5TTEFUSU9OIE9GRi4KLSAgICAgKiBGVFAgY2xpZW50 IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gKFs1NjldU2VjdGlvbiAzLjcpLgotCi0gICBbIFs1 NzBdVG9wIF0gWyBbNTcxXUNvbnRlbnRzIF0gWyBbNTcyXUMtS2VybWl0IEhvbWUgXSBbIFs1NzNd S2VybWl0Ci0gICBIb21lIF0KLQotMTQuIERJQUxPVVQgRlJPTSBURUxORVQgVEVSTUlOQUwgU0VS VkVSUwotCi0gICBGb3IgeWVhcnMsIEMtS2VybWl0IGhhcyBzdXBwb3J0ZWQgZGlhbGluZyBvdXQg ZnJvbSBUZWxuZXQgbW9kZW0gc2VydmVycwotICAgKGFsc28gY2FsbGVkIHJldmVyc2UgdGVybWlu YWwgc2VydmVycyBvciBhY2Nlc3Mgc2VydmVycyksIGJ1dCB1bnRpbCBub3cKLSAgIHRoZXJlIHdh cyBubyB3YXkgZm9yIEtlcm1pdCB0byBjb250cm9sIHRoZSBjb21tdW5pY2F0aW9uIHBhcmFtZXRl cnMKLSAgIChzcGVlZCwgcGFyaXR5LCBldGMpIG9uIHRoZSBzZXJpYWwgcG9ydCBvZiB0aGUgdGVy bWluYWwgc2VydmVyOyBpdCBoYWQKLSAgIHRvIHVzZSB3aGF0ZXZlciB3YXMgdGhlcmUuCi0KLSAg IEJ1dCBub3csIGlmIHlvdSBtYWtlIGEgY29ubmVjdGlvbiB0byBhIHNlcnZlciB0aGF0IHN1cHBv cnRzIHRoZSBUZWxuZXQKLSAgIENvbSBQb3J0IENvbnRyb2wgT3B0aW9uLCBbNTc0XVJGQyAyMjE3 LCB5b3UgaGF2ZSB0aGUgc2FtZSBkZWdyZWUgb2YKLSAgIGNvbnRyb2wgYXMgeW91IHdvdWxkIGhh dmUgb3ZlciBhIHNlcmlhbCBwb3J0IG9uIHRoZSBjb21wdXRlciB3aGVyZQotICAgS2VybWl0IGlz IHJ1bm5pbmc6IFNFVCBTUEVFRCwgU0VUIEZMT1csIFNFVCBQQVJJVFksIFNFVCBTVE9QLUJJVFMs IFNIT1cKLSAgIENPTU0sIFdBSVQsIFNFVCBDQVJSSUVSLVdBVENILCB0aGUgbW9kZW0tc2lnbmFs IHZhcmlhYmxlcywgc2VuZGluZwotICAgQnJlYWssIGFuZCBzbyBvbiwgYXBwbHkgdG8gdGhlIGNv bm5lY3Rpb24gYmV0d2VlbiB0aGUgdGVybWluYWwgc2VydmVyCi0gICBhbmQgdGhlIG1vZGVtLgot Ci0gICBGb3IgZXhhbXBsZSwgdXNpbmcgYSBDaXNjbyBBY2Nlc3MgU2VydmVyIDI1MDksIHdoZXJl IHNwZWNpZnlpbmcgYSBUQ1AKLSAgIHBvcnQgaW4gdGhlIDYwMDAncyBzZWxlY3RzIGEgc2VyaWFs IHBvcnQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgZGlhbGluZwotICAgb3V0OgotCi0gIHNldCBob3N0 IHh4eCA2MDAxICAgICAgOyB4eHggaXMgdGhlIElQIGhvc3RuYW1lIG9yIGFkZHJlc3Mgb2YgdGhl IHNlcnZlcgotICAobG9nIGluIGlmIG5lY2Vzc2FyeSkgIDsgV2l0aCBhIHNjcmlwdCBvciBieSBo YW5kCi0gIHNldCBtb2RlbSB0eXBlIHVzciAgICAgOyBUZWxsIEtlcm1pdCB3aGF0IGtpbmQgb2Yg bW9kZW0gaXQgaGFzCi0gIHNldCBzcGVlZCA1NzYwMCAgICAgICAgOyBUaGlzIGFmZmVjdHMgdGhl IHNlcnZlcidzIHBvcnQKLSAgc2V0IGZsb3cgcnRzL2N0cyAgICAgICA7IERpdHRvCi0gIGRpYWwg NzY1NDMyMQotCi0gICBUaGUgbW9kZW0gc2VydmVyIG1pZ2h0IG9yIG1pZ2h0IG5vdCByZXF1aXJl IGEgbG9naW4gc2VxdWVuY2UuIEl0IG1pZ2h0Ci0gICBhbHNvIGFsbG93IGZvciBhdXRvbWF0aWMg YXV0aGVudGljYXRpb24sIGUuZy4gdmlhIEtlcmJlcm9zIHRpY2tldHMuCi0gICBOT1RFOiBJZiB0 aGUgbW9kZW0gc2VydmVyIHJlcXVpcmVzIGEgbG9naW4gc2VxdWVuY2UsIHRoZW4gUkVESUFMIG1p Z2h0Ci0gICBub3Qgd29yayBhcyBleHBlY3RlZC4KLQotICAgV2hlbiB5b3UgaGF2ZSBhIFRlbG5l dCBDb20gUG9ydCBjb25uZWN0aW9uLCB5b3VyIFNFVCBTUEVFRCBhbmQgU0VUIEZMT1cKLSAgIG9w dGlvbnMgY2hhbmdlIGF1dG9tYXRpY2FsbHkgdG8gcmVmbGVjdCB0aGUgY2FwYWJpbGl0aWVzIG9m IHRoZSBzZXJ2ZXIsCi0gICByYXRoZXIgdGhhbiB0aG9zZSBvZiB5b3VyIGxvY2FsIGNvbXB1dGVy LgotCi0gICBTZWUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsIGZvciB5b3VyIHNlcnZlciBmb3Ig YWRkaXRpb25hbAotICAgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlLCBob3cgdG8gc2V0IHVwIHRo ZSBzZXJ2ZXIgdG8gZHJvcCB0aGUgVGVsbmV0Ci0gICBjb25uZWN0aW9uIGF1dG9tYXRpY2FsbHkg d2hlbiB0aGUgdGVsZXBob25lIGNhbGwgaXMgaHVuZyB1cCAoZS5nLgotICAgImF1dG9oYW5ndXAi IG9uIENpc2NvIG1vZGVscykuCi0KLSAgIEZvciBhIExpbnV4LWJhc2VkIFRlbG5ldCBDb20tUG9y dCBzZXJ2ZXIsIGNsaWNrIHRoZSBTcmVkaXJkIGxpbms6Ci0KLSAgIFsgWzU3NV1Ub3AgXSBbIFs1 NzZdQ29udGVudHMgXSBbIFs1NzddU3JlZGlyZCBdIFsgWzU3OF1DLUtlcm1pdCBIb21lIF0KLSAg IFsgWzU3OV1LZXJtaXQgSG9tZSBdCi0KLTE1LiBDT1BJTkcgV0lUSCBCUk9LRU4gS0VSTUlUIFBB UlRORVJTCi0KLSAgIFRoZXJlIGFyZSBsb3RzIG9mIGZhdWx0eSBLZXJtaXQgcHJvdG9jb2wgaW1w bGVtZW50YXRpb25zIG91dCB0aGVyZSwKLSAgIGZvdW5kIG1haW5seSBpbiAzcmQtcGFydHkgcHJv ZHVjdHMgcmFuZ2luZyBmcm9tIGNvbW11bmljYXRpb25zIHNvZnR3YXJlCi0gICBwYWNrYWdlcyB0 byBmaWxlLXRyYW5zZmVyIGZ1bmN0aW9ucyBlbWJlZGRlZCB3aXRoaW4gZGV2aWNlcy4gVGhpcyB0 b3BpYwotICAgaXMgY292ZXJlZCBbNTgwXUhFUkUgZm9yIEMtS2VybWl0IDcuMCwgYnV0IEMtS2Vy bWl0IDguMCBhZGRzIHNvbWUKLSAgIGFkZGl0aW9uYWwgdHJpY2tzLgotCi0gICBTRVQgQVRUUklC VVRFIFJFQ09SRC1GT1JNQVQgeyBPTiwgT0ZGIH0KLSAgICAgICAgICBBbGxvd3MgY29udHJvbCBv ZiB0aGUgS2VybWl0J3MgUmVjb3JkLUZvcm1hdCBhdHRyaWJ1dGUuIFNldCB0aGlzCi0gICAgICAg ICAgdG8gT0ZGIGluIGNhc2UgaW5jb21pbmcgZmlsZSBhcmUgcmVmdXNlZCBkdWUgdG8gdW5rbm93 biBvcgotICAgICAgICAgIGludmFsaWQgcmVjb3JkIGZvcm1hdHMgaWYgeW91IHdhbnQgdG8gYWNj ZXB0IHRoZSBmaWxlIGFueXdheS4KLQotICAgU0VUIEFUVFJJQlVURVMgT0ZGCi0gICAgICAgICAg VGhpcyBpcyBub3QgYSBuZXcgdHJpY2ssIGJ1dCBpdCB3YXMgcmVjZW50bHkgZGlzY292ZXJlZCB0 aGF0IHRoZQotICAgICAgICAgIEtlcm1pdCBpbXBsZW1lbnRhdGlvbiBlbWJlZGRlZCB3aXRoaW4g YSBjZXJ0YWluIGtpbmQgb2YKLSAgICAgICAgICBwdW5jaGluZy9iZW5kaW5nIG1hY2hpbmUgKFNh bHZhZ25pbmkgaWYgeW91IG11c3Qga25vdykgaGFuZ3MKLSAgICAgICAgICB1cG9uIHJlY2VwdGlv biBvZiBzdGFuZGFyZCBmb3JtYXQgS2VybWl0IGF0dHJpYnV0ZXMgd2hlbgotICAgICAgICAgIHJl Y2VpdmluZyBmaWxlcy4gV2hlbiBzZW5kaW5nIGZpbGVzLCBpdCBzZW5kcyBhdHRyaWJ1dGVzIG9m IGl0cwotICAgICAgICAgIG93biwgb25lIHBlciBBLXBhY2tldCwgd2hpY2ggaXMgc2xpZ2h0bHkg dW51c3VhbCBidXQgbGVnYWwuIFdoZW4KLSAgICAgICAgICByZWNlaXZpbmcgZmlsZXMgZnJvbSBD LUtlcm1pdCwgSzk1LCBNUy1ET1MgS2VybWl0LCBLZXJtaXQtMzcwLAotICAgICAgICAgIGV0Yywg aXQgc2ltcGx5IGV4aXRzIHVwb24gcmVjZXB0aW9uIG9mIHRoZSBmaXJzdCBBLXBhY2tldDsKLSAg ICAgICAgICBhcHBhcmVudGx5IGl0IHdhcyBub3QgY29kZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm90 b2NvbAotICAgICAgICAgIHNwZWNpZmljYXRpb24sIHdoaWNoIGFsbG93cyBtdWx0aXBsZSBhdHRy aWJ1dGVzIHBlciBBLXBhY2tldC4KLSAgICAgICAgICBTb2x1dGlvbjogdGVsbCB0aGUgZmlsZSBz ZW5kZXIgdG8gU0VUIEFUVFJJQlVURVMgT0ZGLgotCi0gICBTRVQgU0VORCBJLVBBQ0tFVFMgeyBP TiwgT0ZGIH0KLSAgICAgICAgICBBIEtlcm1pdCBzZXJ2ZXIgaXMgc3VwcG9zZWQgdG8gYWNjZXB0 IEktcGFja2V0czsgdGhpcyBpcyBob3cgdGhlCi0gICAgICAgICAgY2xpZW50IGxldHMgdGhlIHNl cnZlciBrbm93IGl0cyBjYXBhYmlsaXRpZXMgYW5kIHByZWZlcmVuY2VzCi0gICAgICAgICAgYmVm b3JlIHNlbmRpbmcgYSBjb21tYW5kLiBBcHBhcmVudGx5IHRoZXJlIGlzIGF0IGxlYXN0IG9uZQot ICAgICAgICAgIEtlcm1pdCBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdCBhY2Nl cHQgSS1wYWNrZXRzLCBhbmQKLSAgICAgICAgICBkb2VzIG5vdCBwcm9wZXJseSByZXNwb25kIHdp dGggYW4gRXJyb3IgcGFja2V0IGlmIGl0IGdldHMgb25lLgotICAgICAgICAgIFRvIGdldCBhcm91 bmQgc3VjaCBzaXR1YXRpb25zIGluIEMtS2VybWl0IDguMCwgeW91IGNhbiB1c2UgU0VUCi0gICAg ICAgICAgU0VORCBJLVBBQ0tFVFMgT0ZGIHRvIGluaGliaXQgdGhlIHNlbmRpbmcgb2YgSSBwYWNr ZXRzLiBJbiB0aGlzCi0gICAgICAgICAgY2FzZSwgdGhlIGNsaWVudCBtdXN0IGJlIGFibGUgdG8g YWRqdXN0IHRvIHRoZSBzZXJ2ZXIncwotICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIHJhdGhlciB0 aGFuIHRoZSBvdGhlciB3YXkgYXJvdW5kIGFzIHdlIGFyZSB1c2VkCi0gICAgICAgICAgdG8uCi0K LSAgIFNFVCBQUk9UT0NPTCBLRVJNSVQge30ge30ge30KLSAgICAgICAgICBDLUtlcm1pdCA2LjAg YW5kIGxhdGVyIGF1dG9tYXRpY2FsbHkgc2VuZCAiYXV0b3VwbG9hZCIgYW5kCi0gICAgICAgICAg ImF1dG9kb3dubG9hZCIgY29tbWFuZHMgd2hlbiBpbiBsb2NhbCBtb2RlIGFuZCB5b3UgZ2l2ZSBh IGZpbGUKLSAgICAgICAgICB0cmFuc2ZlciBjb21tYW5kLiBGb3IgZXhhbXBsZSwgaWYgeW91IHRl bGwga2VybWl0IHRvICJzZW5kCi0gICAgICAgICAgb29mYS50eHQiLCBLZXJtaXQgc2VuZHMgImtl cm1pdCAtciIgYW5kIGEgY2FycmlhZ2UgcmV0dXJuLCBpbgotICAgICAgICAgIGNhc2UgeW91IGhh ZCBmb3Jnb3R0ZW4gdG8gc3RhcnQgS2VybWl0IG9uIHRoZSBmYXIgZW5kIGFuZCB0b2xkCi0gICAg ICAgICAgaXQgdG8gcmVjZWl2ZSBhIGZpbGUuIElmIGEgS2VybWl0IHByb2dyYW0gaGFkIGFscmVh ZHkgYmVlbgotICAgICAgICAgIHN0YXJ0ZWQgb24gdGhlIGZhciBlbmQsIGl0IHNob3VsZCBoYXJt bGVzc2x5IGFic29yYiB0aGlzIHN0cmluZy4KLSAgICAgICAgICBIb3dldmVyLCBzb21lIEtlcm1p dCBwcm9ncmFtcyB2aW9sYXRlIHRoZSBLZXJtaXQgcHJvdG9jb2wKLSAgICAgICAgICBkZWZpbml0 aW9uIGFuZCB0cmVhdCBzdWNoIHN0cmluZ3MgYXMgS2VybWl0IHBhY2tldHMgZXZlbiB0aG91Z2gK LSAgICAgICAgICB0aGV5IGFyZSBub3QuIEluIHN1Y2ggY2FzZXMsIGdpdmUgdGhpcyBjb21tYW5k IHRvIHNldCB0aGUgS2VybWl0Ci0gICAgICAgICAgcHJvdG9jb2wgYXV0b3VwbG9hZCBhbmQgZG93 bmxvYWQgc3RyaW5ncyB0byBub3RoaW5nLCB3aGljaCB0ZWxscwotICAgICAgICAgIEtlcm1pdCBu b3QgdG8gc2VuZCB0aGVtLiAoVGhpcyBpcyBub3QgYSBuZXcgZmVhdHVyZSwgYnV0IGl0IHdhcwot ICAgICAgICAgIG5vdCBwcmV2aW91c2x5IGluY2x1ZGVkIGluIHRoZSAiQ29waW5nIiBzZWN0aW9u IG9mIHRoZQotICAgICAgICAgIGRvY3VtZW50YXRpb24uKQotCi0gICBbIFs1ODFdVG9wIF0gWyBb NTgyXUNvbnRlbnRzIF0gWyBbNTgzXUMtS2VybWl0IEhvbWUgXSBbIFs1ODRdS2VybWl0Ci0gICBI b21lIF0KLQotMTYuIE5FVyBDT01NQU5ELUxJTkUgT1BUSU9OUwotCi0gICBrZXJtaXQgLWggTm93 IHByaW50cyBhIGNvbXBsZXRlIGxpc3Rpbmcgb2YgaXRzIGNvbW1hbmQtbGluZSBvcHRpb25zLAot ICAgcmF0aGVyIHRoYW4gYW4gYWJicmV2aWF0ZWQgbGlzdCBzcXVlZXplZCBpbnRvIGEgMjR4ODAg c3BhY2UuCi0KLSAgIC1kZCAgICAgICAgICAgICAgRGVidWcsIGxpa2UgLWQgYnV0IGFkZHMgdGlt ZXN0YW1wcwotICAgLS12ZXJzaW9uICBTaG93cyBDLUtlcm1pdCB2ZXJzaW9uIG51bWJlci4KLSAg IC0tbm9wZXJtcyAgRXF1aXZhbGVudCB0byBTRVQgQVRUUklCVVRFIFBST1RFQ1RJT04gT0ZGLgot Ci0gICBLZXJtaXQgbm93IGFjY2VwdHMgYSBzZWxlY3Rpb24gb2YgVVJMcyAoVW5pdmVyc2FsIFJl c291cmNlIExvY2F0b3JzKSBhcwotICAgaXRzIGZpcnN0IGNvbW1hbmQtbGluZSBhcmd1bWVudC4g VGhlc2UgYXJlOgotCi0gICB0ZWxuZXQ6aG9zdG5hbWUKLSAgICAgICAgICBNYWtlcyBhIFRlbG5l dCBjb25uZWN0aW9uIHRvIHRoZSBnaXZlbiBob3N0IChJUCBob3N0bmFtZSBvcgotICAgICAgICAg IGFkZHJlc3MpLgotCi0gICBmdHA6Ly9bdXNlcls6cGFzc3dvcmRdQF1ob3N0bmFtZVsvcGF0aC4u Ll0KLSAgICAgICAgICBNYWtlcyBhbiBGVFAgY29ubmVjdGlvbiB0byB0aGUgZ2l2ZW4gaG9zdCAo SVAgaG9zdG5hbWUgb3IKLSAgICAgICAgICBhZGRyZXNzKS4gSWYgYSB1c2VybmFtZSBpcyBnaXZl biwgS2VybWl0IHRyaWVzIHRvIGxvZyB5b3UgaW47IGlmCi0gICAgICAgICAgYSBwYXNzd29yZCBp cyBnaXZlbiwgaXQgaXMgdXNlZDsgaWYgbm90LCB5b3UgYXJlIHByb21wdGVkIGZvcgotICAgICAg ICAgIG9uZS4gSWYgbm8gdXNlcm5hbWUgaXMgZ2l2ZW4sIGFuIGFub255bW91cyBsb2dpbiBpcyBw ZXJmb3JtZWQuCi0gICAgICAgICAgSWYgYSBwYXRobmFtZSBpcyBpbmNsdWRlZCwgS2VybWl0IHRy aWVzIHRvIEdFVCB0aGUgZ2l2ZW4gZmlsZS4KLSAgICAgICAgICBTZWUgWzU4NV1TZWN0aW9uIDMu MS4zIGZvciBkZXRhaWxzLgotCi0gICBmdHBzOi8vW3VzZXJbOnBhc3N3b3JkXUBdaG9zdG5hbWVb L3BhdGguLi5dCi0gICAgICAgICAgTWFrZXMgYSBzZWN1cmUgRlRQIGNvbm5lY3Rpb24gb3ZlciBT U0wuCi0KLSAgIHRlbG5ldHM6Ly9bdXNlcls6cGFzc3dvcmRdQF1ob3N0bmFtZQotICAgICAgICAg IE1ha2VzIGEgc2VjdXJlIFRlbG5ldCBjb25uZWN0aW9uIG92ZXIgU1NMLgotCi0gICBrZXJtaXQ6 Ly9bdXNlcls6cGFzc3dvcmRdQF1ob3N0bmFtZVsvcGF0aC4uLl0KLSAgICAgICAgICBNYWtlcyBh IGNvbm5lY3Rpb24gdG8gYW4gWzU4Nl1JbnRlcm5ldCBLZXJtaXQgU2VydmVyLgotCi0gICBodHRw Oi8vW3VzZXJbOnBhc3N3b3JkXUBdaG9zdG5hbWVbL3BhdGguLi5dCi0gICAgICAgICAgTWFrZXMg YSBjb25uZWN0aW9uIHRvIFdlYiBzZXJ2ZXIuCi0KLSAgIGh0dHBzOi8vW3VzZXJbOnBhc3N3b3Jk XUBdaG9zdG5hbWVbL3BhdGguLi5dCi0gICAgICAgICAgTWFrZXMgYSBjb25uZWN0aW9uIHRvIHNl Y3VyZSBXZWIgc2VydmVyLgotCi0gICBbIFs1ODddVG9wIF0gWyBbNTg4XUNvbnRlbnRzIF0gWyBb NTg5XUMtS2VybWl0IEhvbWUgXSBbIFs1OTBdS2VybWl0Ci0gICBIb21lIF0KLQotMTcuIExPR1MK LQotICAgSW4gQy1LZXJtaXQgOC4wLCB3ZSBtYWtlIGFuIGVmZm9ydCB0byBrZWVwIHBhc3N3b3Jk cyBvdXQgb2YgdGhlIGRlYnVnCi0gICBsb2cuIFRoaXMgY2FuIG5ldmVyIGJlIDEwMCUgZWZmZWN0 aXZlLCBidXQgaXQncyBiZXR0ZXIgdGhhbiBiZWZvcmUsCi0gICB3aGVuIHRoZXJlIHdlcmUgbm8g cHJlY2F1dGlvbnMgYXQgYWxsLiBXaGVuZXZlciBLZXJtaXQga25vd3MgaXQncwotICAgcHJvbXB0 aW5nIGZvciwgcGFyc2luZywgb3IgdHJhbnNtaXR0aW5nIGEgcGFzc3dvcmQsIGl0IHRlbXBvcmFy aWx5Ci0gICB0dXJucyBvZmYgbG9nZ2luZyBhbmQgdGhlbiB0dXJucyBpdCBiYWNrIG9uIGFmdGVy d2FyZHMuIFRoaXMga2VlcHMgdGhlCi0gICBkZWJ1ZyBsb2cgcGFzc3dvcmQtZnJlZSBpbiBtb3N0 IGNvbW1vbiBjYXNlcywgYnV0IHRoZXJlIGNhbiBiZSBubwotICAgZ3VhcmFudGVlcy4KLQotICAg QXMgbm90ZWQgZWxzZXdoZXJlLCB0aGUgbmV3ICItZGQiIGNvbW1hbmQtbGluZSBvcHRpb24gc2Vs ZWN0cyBhCi0gICB0aW1lc3RhbXBlZCBkZWJ1ZyBsb2cgKGVxdWl2YWxlbnQgdG8gInNldCBkZWJ1 ZyB0aW1lc3RhbXBzIG9uIiwgImxvZwotICAgZGVidWcgZGVidWcubG9nIikuCi0KLSAgIEMtS2Vy bWl0IDguMCBhbHNvIHN1cHBvcnRzIGEgbmV3IHRpbWVzdGFtcGVkIHNlc3Npb24gbG9nIHZpYSAi c2V0Ci0gICBzZXNzaW9uLWxvZyB0aW1lc3RhbXBlZC10ZXh0IiwgImxvZyBzZXNzaW9uIi4KLQot ICAgVGhlcmUgaGF2ZSBiZWVuIHJlcXVlc3RzIGZvciBvdGhlciBraW5kcyBvZiBsb2dzLCBmb3Ig ZXhhbXBsZSBhIGNvbW1hbmQKLSAgIGxvZy4gVGhlc2UgbWlnaHQgYmUgYWRkZWQgYXQgc29tZSBw b2ludC4gT25lIHBlcnNvbiB3YW50ZWQgdG8gYmUgYWJsZQotICAgdG8gbG9nIGNvbW1hbmRzIHdp dGggdGltZXN0YW1wcywgYnV0IG9ubHkgY29tbWFuZHMgaXNzdWVkIGF0IHRoZQotICAgcHJvbXB0 LCBub3QgY29tbWFuZHMgZnJvbSBmaWxlcyBvciBtYWNyb3MsIGFuZCBhbHNvIHdhbnRlZCBhIGhl YWRlcgotICAgbGluZSBhdCB0aGUgYmVnaW5uaW5nIHNob3dpbmcgdGhlIGRhdGUsIHVzZXIsIGFu ZCBob3N0LiBUaGlzIGNhbiBiZQotICAgZG9uZSBhcyBmb2xsb3dzOgotCi0gIC5maWxlbmFtZSA6 PSBcdihob21lKWNvbW1hbmRzLmxvZyAgOyAoZm9yIGV4YW1wbGUpCi0gIGZvcGVuIC93cml0ZSBc JWMgXG0oZmlsZW5hbWUpCi0gIGlmIHN1Y2Nlc3MgewotICAgICAgZndyaXRlIC9saW5lIFwlYyBc dihkYXRlKTogVXNlcj1cdih1c2VyKSBIb3N0PVx2KGhvc3QpCi0gICAgICBmY2xvc2UgXCVjCi0g ICAgICBzZXQgZGVidWcgdGltZXN0YW1wcyBvbgotICAgICAgbG9nIGRlYnVnIHt8IGdyZXAgIkNN RChQKSIgPj4gXG0oZmlsZW5hbWUpfSBhcHBlbmQKLSAgfQotCi0gICBbIFs1OTFdVG9wIF0gWyBb NTkyXUNvbnRlbnRzIF0gWyBbNTkzXUMtS2VybWl0IEhvbWUgXSBbIFs1OTRdS2VybWl0Ci0gICBI b21lIF0KLSAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCi0KLQotICAgIEMtS2VybWl0IDguMCBVcGRhdGUgTm90ZXMg LyBbNTk1XVRoZSBLZXJtaXQgUHJvamVjdCAvIENvbHVtYmlhCi0gICAgVW5pdmVyc2l0eSAvIDE1 IERlYyAyMDAzIC0gMTMgU2VwIDIwMTAKLQotUmVmZXJlbmNlcwotCi0gICAxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS8KLSAgIDIuIG1haWx0bzprZXJtaXRAY29sdW1iaWEuZWR1Ci0gICAzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotICAgNC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2s5NS5odG1sCi0gICA1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gICA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tzY3JpcHRzLmh0bWwKLSAgIDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9jdXJyZW50Lmh0bWwKLSAgIDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC93aGF0 c25ldy5odG1sCi0gICA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZmFxLmh0bWwK LSAgMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0bWwKLSAgMTEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwot ICAxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICAxMy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAgMTQuIGh0dHA6Ly93 d3cuYW1hem9uLmNvbS9ncC9wcm9kdWN0LzE1NTU1ODE2NDE/aWU9VVRGOCZ0YWc9YWxlaWRtb3Jl bGRvbS0yMCZsaW5rQ29kZT1hczImY2FtcD0xNzg5JmNyZWF0aXZlPTkzMjUmY3JlYXRpdmVBU0lO PTE1NTU1ODE2NDEKLSAgMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbAotICAxNi4gbWFpbHRvOmtlcm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdQotICAxNy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LwotICAxOC4gaHR0cDovL3d3dy5rZXJtaXQt cHJvamVjdC5vcmcvCi0gIDE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLm55Yy5ueS51cy9rZXJtaXQv Ci0gIDIwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL0NPUFlJTkcuVFhUCi0g IDIxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrY21haS5jCi0gIDIyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeHYKLSAgMjMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazYwbWFudWFsLmh0bWwKLSAgMjQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWk3MC5odG1sCi0gIDI1LiBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrZXJtaXQ3MC50eHQKLSAgMjYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sCi0gIDI3LiBmdHA6Ly9rZXJtaXQuY29s dW1iaWEuZWR1L2tlcm1pdC9mL2NrdWtlci5ucgotICAyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L3NlY3VyaXR5Lmh0bQotICAyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L3RlbG5ldC5odG0KLSAgMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHBz Y3JpcHRzLmh0bWwKLSAgMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3Iu aHRtbAotICAzMi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2Nid3IudHh0 Ci0gIDMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwKLSAgMzQu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2t1YndyLnR4dAotICAzNS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdmJ3ci5odG1sCi0gIDM2LiBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrdmJ3ci50eHQKLSAgMzcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAotICAzOC4gZnRwOi8va2VybWl0LmNvbHVtYmlh LmVkdS9rZXJtaXQvZi9ja3VpbnMudHh0Ci0gIDM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t2aW5zLmh0bWwKLSAgNDAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2YvY2t2aW5zLnR4dAotICA0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2Nm Zy5odG1sCi0gIDQyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrY2NmZy50 eHQKLSAgNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbAotICA0 NC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2NwbG0udHh0Ci0gIDQ1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaWtzZC5odG1sCi0gIDQ2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2tlcm1pdC5odG1sCi0gIDQ3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gIDQ4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gIDQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvaW5kZXguaHRtbAotICA1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3gwCi0gIDUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDEKLSAgNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4MgotICA1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gyLjEKLSAgNTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4Mi4yCi0gIDU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDIuMi4xCi0gIDU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjeDIuMi4yCi0gIDU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDIuMi4zCi0gIDU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDIuMi40Ci0gIDU5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDIuMi41Ci0gIDYwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDIuMi42Ci0gIDYxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMKLSAgNjIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xCi0gIDYzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMS4xCi0gIDY0LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMS4yCi0gIDY1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMS4zCi0gIDY2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMS40Ci0gIDY3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMgotICA2OC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjMKLSAgNjku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My40Ci0gIDcw LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNQotICA3 MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjUuMQot ICA3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjUu MgotICA3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gz LjUuMwotICA3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3gzLjYKLSAgNzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCN4My42LjEKLSAgNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN4My42LjIKLSAgNzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4My42LjMKLSAgNzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4My43Ci0gIDc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDMuNy4xCi0gIDgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDMuNy4yCi0gIDgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjeDMuOAotICA4Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3gzLjkKLSAgODMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMAotICA4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEwLjEKLSAgODUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMC4yCi0gIDg2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMTAuMwotICA4Ny4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjExCi0gIDg4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDQKLSAgODkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4NQotICA5MC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g2Ci0gIDkxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDYuMQotICA5Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g2LjIKLSAgOTMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Ni4zCi0gIDk0LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDYuNAotICA5NS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g2LjUKLSAgOTYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Ni42Ci0gIDk3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDcKLSAgOTguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OAotICA5OS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEKLSAxMDAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4yCi0gMTAxLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMwotIDEwMi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjQKLSAxMDMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC41Ci0gMTA0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguNgotIDEwNS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjcKLSAxMDYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC44Ci0gMTA3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguOQotIDEwOC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEwCi0gMTA5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMTEKLSAx MTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMgot IDExMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEz Ci0gMTEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDgu MTQKLSAxMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4 OQotIDExNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5 LjEKLSAxMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4 OS4yCi0gMTE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj eDkuMwotIDExNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3g5LjQKLSAxMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCN4OS41Ci0gMTE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDkuNgotIDEyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3g5LjcKLSAxMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN4OS44Ci0gMTIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDkuOQotIDEyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3g5LjEwCi0gMTI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDkuMTEKLSAxMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4MTAKLSAxMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4MTEKLSAxMjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4MTIKLSAxMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4MTMKLSAxMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4MTQKLSAxMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4MTUKLSAxMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4MTYKLSAxMzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4MTcKLSAxMzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN0b3AKLSAxMzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0Lmh0bWwKLSAxMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1s Ci0gMTM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUKLSAx MzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAotIDEzOC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g1Ci0gMTM5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDIuMgotIDE0MC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gMTQx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDE1Ci0gMTQy LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNwotIDE0 My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cGRhdGVz Ci0gMTQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRw Y2hlY2sKLSAxNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCNmdHBuYW1lbGlzdAotIDE0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3NydnJlbmFtZQotIDE0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI2Z0cHZkaXIKLSAxNDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCNzZXRmdHB0eXBlCi0gMTQ5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNgotIDE1MC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gxNQotIDE1MS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjcKLSAxNTIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4xCi0gMTUzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDIuMgotIDE1NC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjE0Ci0gMTU1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMTMKLSAxNTYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMwotIDE1Ny4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwKLSAxNTguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAotIDE1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L3NrZXJtaXQuaHRtbAotIDE2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3NldGxvY3VzCi0gMTYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjbGNvbW1hbmRzCi0gMTYyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwdXNlcgotIDE2My4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3Nob3d2YXIKLSAxNjQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjYWxsZXJpZAotIDE2NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g2LjYKLSAxNjYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4MAotIDE2Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjExCi0gMTY4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gMTY5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSAx NzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAxNzEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gMTcyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDAKLSAxNzMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSAxNzQuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwotIDE3NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDE3Ni4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAxNzcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9rOTUuaHRtbAotIDE3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L3NzaGNsaWVudC5odG1sCi0gMTc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2tl cm1pdC5odG1sCi0gMTgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2tlcm1pdC5o dG1sCi0gMTgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3NoY2xpZW4uaHRtCi0g MTgyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMKLSAx ODMuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzE3MzgudHh0Ci0gMTg0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDIuMi4yCi0gMTg1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDIuMi4xCi0gMTg2LiBm dHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMyMzk2LnR4dAotIDE4Ny4gZnRwOi8vZnRwLmlz aS5lZHUvaW4tbm90ZXMvcmZjMjYxNi50eHQKLSAxODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yLjMKLSAxODkuIGZ0cDovL2Z0cC5pc2kuZWR1L2lu LW5vdGVzL3JmYzI2MTYudHh0Ci0gMTkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDguMTMuNwotIDE5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L3NlY3VyaXR5Lmh0bSN4NS40Ci0gMTkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvc2VjdXJpdHkuaHRtI3gxNQotIDE5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L3NlY3VyaXR5Lmh0bSN4Ni4yCi0gMTk0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv c2VjdXJpdHkuaHRtbAotIDE5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gxNgotIDE5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3RvcAotIDE5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI2NvbnRlbnRzCi0gMTk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdC5odG1sCi0gMTk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXgu aHRtbAotIDIwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3gzLjEKLSAyMDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCN4My4yCi0gMjAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDMuMwotIDIwMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3gzLjQKLSAyMDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN4My41Ci0gMjA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDMuNgotIDIwNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3gzLjcKLSAyMDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4My44Ci0gMjA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMuOQotIDIwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzLjEwCi0gMjEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDMuMTEKLSAyMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9z ZWN1cml0eS5odG0KLSAyMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0 eS5odG0jc2VydmVycwotIDIxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3Nl dHMuaHRtbAotIDIxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3VuaWNvZGUuaHRt bAotIDIxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaTcwLmh0bSN4MS41 LjQKLSAyMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jYXNlMTAuaHRtbAotIDIx Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g0Ci0gMjE4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMTEKLSAy MTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHBzY3JpcHRzLmh0bWwKLSAyMjAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSAyMjEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHAKLSAyMjIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHBjbGllbnQuaHRtbAotIDIyMy4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cHNjcmlwdHMuaHRtbAotIDIyNC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDIyNS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAyMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xLjEKLSAyMjcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xLjMKLSAyMjguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xLjQKLSAyMjkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xLjMKLSAyMzAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xLjMKLSAyMzEuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4yCi0gMjMyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNQotIDIzMy4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjYKLSAyMzQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHBzY3JpcHRzLmh0bWwKLSAyMzUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDIzNi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cGF1dG9sb2cKLSAyMzcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHB1c2VyCi0gMjM4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuOAotIDIzOS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjgKLSAyNDAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSAyNDEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHAKLSAyNDIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAyNDMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gMjQ0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvaWJtX2llLmh0bWwKLSAyNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMAotIDI0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDI0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cAotIDI0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDI0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2luZGV4Lmh0bWwKLSAyNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazYw bWFudWFsLmh0bWwKLSAyNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4NC4xNwotIDI1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sCi0gMjUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDMuNgotIDI1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3gzLjExCi0gMjU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMuMS40Ci0gMjU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2Vj dXJpdHkuaHRtbAotIDI1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3gzLjcKLSAyNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4My43Ci0gMjU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDguMTMuNAotIDI2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3Blcm1zd2l0Y2gKLSAyNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCNmdHBjaG1vZAotIDI2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjYuMgotIDI2My4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g0Ci0gMjY0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gMjY1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwCi0gMjY2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMjY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvaW5kZXguaHRtbAotIDI2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3g3Ci0gMjY5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDMuOAotIDI3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gzLjgKLSAyNzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2IyLmh0bQotIDI3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3gzLjEwCi0gMjczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDMuMTAKLSAyNzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4My42Ci0gMjc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjc2V0ZnRwdHlwZQotIDI3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3RvcAotIDI3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI2Z0cAotIDI3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQuaHRtbAotIDI3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4 Lmh0bWwKLSAyODAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4NC45Ci0gMjgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDMuNS4xCi0gMjgyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjZXJyb3JhY3Rpb24KLSAyODMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4MS41Ci0gMjg0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuNwotIDI4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3gxLjYKLSAyODYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN4OC4xMwotIDI4Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaTcwLmh0bSN4MS41LjQKLSAyODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWk3MC5odG0KLSAyODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4NAotIDI5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gzLjcKLSAyOTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4My41LjIKLSAyOTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN4My43Ci0gMjkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjZXJyb3JhY3Rpb24KLSAyOTQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My41LjIKLSAyOTUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNlcnJvcmFjdGlvbgotIDI5Ni4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cGZpbGVuYW1lcwotIDI5Ny4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cHBlcm1zCi0g Mjk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwdW5p cXVlCi0gMjk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj ZnRwZmlsZW5hbWVzCi0gMzAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjbm90ZV91dGMKLSAzMDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCNub3RlX2RhdGUKLSAzMDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4My42Ci0gMzAzLiBodHRwOi8vd3d3LmJvdWxkZXIubmlzdC5n b3YvdGltZWZyZXEvZmFxL2ZhcS5odG0jMTA6Ci0gMzA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNwotIDMwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDMwNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cAotIDMwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDMwOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2luZGV4Lmh0bWwKLSAzMDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4My4xMQotIDMxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaTcwLmh0bSN4NC4zCi0gMzExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwKLSAzMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4NQotIDMxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3gzLjYuMwotIDMxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI2Z0cGZpbGVuYW1lcwotIDMxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaTcwLmh0bSN4NC4xCi0gMzE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pNzAuaHRtI3g0LjIuMgotIDMxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaTcwLmh0bSN4MS41LjQKLSAzMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4My42LjIKLSAzMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMQotIDMyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjExCi0gMzIxLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjc3J2cmVuYW1lCi0gMzIyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pNzAuaHRtI3g0LjEKLSAzMjMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWk3MC5odG0KLSAzMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2IyLmh0bQotIDMyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI2Z0cGZpbGVuYW1lcwotIDMyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjUuMwotIDMyNy4gaHR0cDovL3d3dy5wcm9mdHBk Lm5ldC8KLSAzMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCN0b3AKLSAzMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCNmdHAKLSAzMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwK LSAzMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gMzMyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSAzMzMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2NzZXRzLmh0bWwKLSAzMzQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC91bmljb2RlLmh0bWwKLSAzMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NzZXRzLmh0bWwKLSAzMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NzZXRzLmh0bWwKLSAzMzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4NAotIDMzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3V0Zjgu aHRtbAotIDMzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3NldHMuaHRtbAot IDM0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g0Ci0g MzQxLiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMyNjQwLnR4dAotIDM0Mi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDM0My4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cAotIDM0NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDM0NS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAzNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSAzNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHAKLSAzNDguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAzNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9pbmRleC5odG1sCi0gMzUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjdG9wCi0gMzUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjZnRwCi0gMzUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdC5odG1sCi0gMzUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRt bAotIDM1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cHNjcmlwdHMuaHRtbAot IDM1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjIK LSAzNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4y Ci0gMzU3LiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmM5NTkudHh0Ci0gMzU4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tzY3JpcHRzLmh0bWwKLSAzNTkuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSAzNjAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHAKLSAzNjEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHBzY3JpcHQuaHRtbAotIDM2Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDM2My4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAzNjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMS4xCi0gMzY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMTEuMgotIDM2Ni4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjExLjMKLSAzNjcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMS40Ci0gMzY4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMTEuNQotIDM2OS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDM3MC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2s5NS5odG1sCi0gMzcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMTEuNQotIDM3Mi4gZnRwOi8vZnRwLmlzaS5lZHUv aW4tbm90ZXMvcmZjOTU5LnR4dAotIDM3My4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZj MjM4OS50eHQKLSAzNzQuIGh0dHA6Ly93d3cuaWV0Zi5vcmcvaW50ZXJuZXQtZHJhZnRzL2RyYWZ0 LWlldGYtZnRwZXh0LW1sc3QtMTYudHh0Ci0gMzc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvZnRwY2xpZW50Lmh0bWwKLSAzNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN0b3AKLSAzNzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCNmdHAKLSAzNzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0Lmh0bWwKLSAzNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRl eC5odG1sCi0gMzgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDMKLSAzODEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCN1Y3MyCi0gMzgyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjdG9wCi0gMzgzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjY29udGVudHMKLSAzODQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 Lmh0bWwKLSAzODUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0g Mzg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0g Mzg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVu dHMKLSAzODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAz ODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gMzkwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSAzOTEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSAzOTIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwotIDM5My4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDM5NC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAzOTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4NAotIDM5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3g0Ci0gMzk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMTIKLSAzOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xCi0gMzk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDEyCi0gNDAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMTIKLSA0MDEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSA0MDIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwotIDQwMy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDQwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2luZGV4Lmh0bWwKLSA0MDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN4OC4xNAotIDQwNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDQwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNDA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNDA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvaW5kZXguaHRtbAotIDQxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3g5Ci0gNDExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjdG9wCi0gNDEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjY29udGVudHMKLSA0MTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0Lmh0bWwKLSA0MTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5o dG1sCi0gNDE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj eDguNgotIDQxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3RvcAotIDQxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I2NvbnRlbnRzCi0gNDE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5o dG1sCi0gNDE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDQy MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDQy MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRz Ci0gNDIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNDIz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDQyNC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDQyNS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNDI2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNDI3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDQyOC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Zqb2luCi0gNDI5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnNwbGl0Ci0gNDMwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMTAKLSA0MzEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSA0MzIuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwotIDQzMy4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDQzNC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSA0MzUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OQotIDQzNi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5Ci0gNDM3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkKLSA0MzguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4MwotIDQzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzCi0gNDQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMgotIDQ0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjIKLSA0NDIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My44Ci0gNDQzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMKLSA0NDQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4MwotIDQ0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzCi0gNDQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMgotIDQ0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzCi0gNDQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMTMKLSA0NDkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMwotIDQ1MC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5Ci0gNDUxLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMTAKLSA0NTIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC43LjQKLSA0NTMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSA0NTQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwotIDQ1NS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDQ1Ni4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSA0NTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSA0NTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwotIDQ1OS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDQ2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2luZGV4Lmh0bWwKLSA0NjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN0b3AKLSA0NjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCNjb250ZW50cwotIDQ2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQuaHRtbAotIDQ2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lu ZGV4Lmh0bWwKLSA0NjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN4OC43Ci0gNDY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjdG9wCi0gNDY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjY29udGVudHMKLSA0NjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0Lmh0bWwKLSA0NjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1s Ci0gNDcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjc2Ny aXB0ZWRpdAotIDQ3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3RvcAotIDQ3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI2NvbnRlbnRzCi0gNDczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dC5odG1sCi0gNDc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAot IDQ3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAot IDQ3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRl bnRzCi0gNDc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0g NDc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDQ3OS4gZnRw Oi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMjgyMi50eHQKLSA0ODAuIGZ0cDovL2Z0cC5pc2ku ZWR1L2luLW5vdGVzL3JmYzI4MjIudHh0Ci0gNDgxLiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rl cy9yZmMyODIyLnR4dAotIDQ4Mi4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMjgyMi50 eHQKLSA0ODMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0 b3AKLSA0ODQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNj b250ZW50cwotIDQ4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRt bAotIDQ4Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSA0ODcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xCi0gNDg4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gNDg5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMK LSA0OTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA0OTEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNDkyLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMgotIDQ5My4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDQ5NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNDk1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNDk2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDQ5Ny4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjgKLSA0OTguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OS44Ci0gNDk5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMgotIDUwMC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDUwMS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNTAyLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNTAzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDUwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDUwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNTA2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNTA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvaW5kZXguaHRtbAotIDUwOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3g5LjgKLSA1MDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN0b3AKLSA1MTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwotIDUxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQuaHRtbAotIDUxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2luZGV4Lmh0bWwKLSA1MTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4OS44Ci0gNTE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDkuOAotIDUxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3g5LjYKLSA1MTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN0b3AKLSA1MTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCNjb250ZW50cwotIDUxOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQuaHRtbAotIDUxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4 Lmh0bWwKLSA1MjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCN4OS44Ci0gNTIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDkuOAotIDUyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3RvcAotIDUyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI2NvbnRlbnRzCi0gNTI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dC5odG1sCi0gNTI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAot IDUyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAot IDUyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRl bnRzCi0gNTI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0g NTI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDUzMC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDUzMS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNTMy LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNTMzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDUzNC4gbWFpbHRvOnRodWNk YXRAaG90bWFpbC5jb20KLSA1MzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4OS45LjIKLSA1MzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN0b3AKLSA1MzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCNjb250ZW50cwotIDUzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQuaHRtbAotIDUzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lu ZGV4Lmh0bWwKLSA1NDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN0b3AKLSA1NDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCNjb250ZW50cwotIDU0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQuaHRtbAotIDU0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwK LSA1NDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AK LSA1NDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250 ZW50cwotIDU0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAot IDU0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSA1NDguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OS4yCi0gNTQ5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gNTUwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSA1 NTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA1NTIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNTUzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDQKLSA1NTQuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4NAotIDU1NS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDU1Ni4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNTU3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNTU4LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDU1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDU2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNTYxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNTYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvaW5kZXguaHRtbAotIDU2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3RvcAotIDU2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNTY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdC5odG1sCi0gNTY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv aW5kZXguaHRtbAotIDU2Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3g0Ci0gNTY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDMuNwotIDU2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3gzLjcKLSA1NzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN0b3AKLSA1NzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCNjb250ZW50cwotIDU3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQuaHRtbAotIDU3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0 bWwKLSA1NzQuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzIyMTcudHh0Ci0gNTc1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gNTc2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSA1 NzcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L3NyZWRpcmQvCi0gNTc4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNTc5LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDU4MC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaTcwLmh0bSN4NC4yMgotIDU4MS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDU4Mi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNTgzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNTg0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDU4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEuMwotIDU4Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2N1aWtzZC5odG1sCi0gNTg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjdG9wCi0gNTg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSA1ODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0Lmh0bWwKLSA1OTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9p bmRleC5odG1sCi0gNTkxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjdG9wCi0gNTkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjY29udGVudHMKLSA1OTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0Lmh0bWwKLSA1OTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1s Ci0gNTk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAoKZGlmZiAt LWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tlcm1pdDkwLnR4 dCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tlcm1pdDkwLnR4dApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRmNmVlMy4uMDAwMDAwMAotLS0gYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtaXQ5MC50eHQKKysrIC9kZXYv bnVsbApAQCAtMSwyMTUyICswLDAgQEAKLQotICAgWzFdVGhlIENvbHVtYmlhIENyb3duIFRoZSBL ZXJtaXQgUHJvamVjdCB8IENvbHVtYmlhIFVuaXZlcnNpdHkKLSAgIDYxMiBXZXN0IDExNXRoIFN0 cmVldCwgTmV3IFlvcmsgTlkgMTAwMjUgVVNBIG8gWzJda2VybWl0QGNvbHVtYmlhLmVkdQotICAg Li4uc2luY2UgMTk4MQotICAgWzNdSG9tZSBbNF1LZXJtaXQgOTUgWzVdQy1LZXJtaXQgWzZdU2Ny aXB0cyBbN11DdXJyZW50IFs4XU5ldyBbOV1GQVEKLSAgIFsxMF1TdXBwb3J0Ci0KLQotICAgICAg WzExXUNMSUNLIEhFUkUgdG8gcmVhZCBhYm91dCBzb21lIG9mIHRoZXNlIGl0ZW1zLgotCi0gICAg ICAgICAgWzEyXVRhYmxlIG9mIHBsYXRmb3JtcyAgIFsxM11Cb29rOiBVc2luZyBDLUtlcm1pdCAg IFsxNF1Eb3dubG9hZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDLUtlcm1pdCA5LjAKLQotQy1LZXJtaXQgOS4wIFVwZGF0ZSBO b3RlcwotCi0gICBOb3RlOiAgIEMtS2VybWl0IDkuMC4zMDEgY29udGFpbnMgYSBjb3JyZWN0aW9u IHRoYXQgYXBwbGllcyBvbmx5IHRvCi0gICBTb2xhcmlzIDEwIGFuZCAxMS4KLSAgICAgQy1LZXJt aXQgOS4wLjMwMiBjb250YWlucyBjb3JyZWN0aW9ucyB0aGF0IGFwcGx5IG9ubHkgdG8gRnJlZUJT RCA4Ci0gICBhbmQgOS4KLSAgICAgKiBbMTVdTGFyZ2UgRmlsZXMKLSAgICAgKiBbMTZdSG93IHRv IFRlc3QgTGFyZ2UtRmlsZSBUcmFuc2ZlcgotICAgICAqIFsxN11Bcml0aG1ldGljIHdpdGggTGFy Z2UgSW50ZWdlcnMKLSAgICAgKiBbMThdRk9SQ0UtMyBQYWNrZXQgUHJvdG9jb2wKLSAgICAgKiBb MTldVmFyaWFibGUgRXZhbHVhdGlvbgotCi0gICAgICogWzIwXVRoZSBSRU5BTUUgQ29tbWFuZCBZ b3UgQWx3YXlzIFdhbnRlZAotICAgICAqIFsyMV1PdGhlciBOZXcgRmVhdHVyZXMKLSAgICAgKiBb MjJdSW5jb21wYXRpYmlsaXRpZXMKLSAgICAgKiBbMjNdV2hhdCdzIE5vdCBJbiBDLUtlcm1pdCA5 LjAKLSAgICAgKiBbMjRdQW5kIGEgTG9vc2UgRW5kCi0KLSAgICAgKiBbMjVdRGVtb25zdHJhdGlv bjogU2VjdXJlIFBPUCBtYWlsIGZldGNoZXIKLSAgICAgKiBbMjZdRGVtb25zdHJhdGlvbjogSFAg U3dpdGNoIENvbmZpZ3VyYXRpb24gQmFja3VwCi0gICAgICogWzI3XURlbW9uc3RyYXRpb246IEhQ IGlMTyBCbGFkZSBDb25maWd1cmF0aW9uCi0gICAgICogWzI4XURlbW9uc3RyYXRpb246IElCTS9S b2xtL1NpZW1lbnMgQ0JYIE1hbmFnZW1lbnQKLSAgICAgKiBbMjldRGVtb25zdHJhdGlvbjogQ1NW IGFuZCBUU1YgRmlsZXMKLSAgICAgKiBbMzBdRGVtb25zdHJhdGlvbiBTY3JpcHRzIGZvciBXZWJt YXN0ZXJzCi0KLSAgIFRoaXMgaXMgdGhlIHRoaXJkIHN1cHBsZW1lbnQgdG8gWzMxXVVzaW5nIEMt S2VybWl0LCBTZWNvbmQgRWRpdGlvbi4gSQotICAgYXBvbG9naXplIGZvciB0aGUgc2NhdHRlcmVk IG5hdHVyZSBvZiB0aGUgaW5mb3JtYXRpb24gYW5kIEkgaG9wZSBJIGNhbgotICAgb3JnYW5pemUg aXQgYW5kIGdhdGhlciBpdCBhbGwgaW50byBvbmUgcGxhY2UgZm9yIGVhc3kgYW5kIGRlZmluaXRp dmUKLSAgIHJlZmVyZW5jZSBzb21lIGRheS4gSXQncyBhIGJpZyBqb2Igc28gaXQgZGVwZW5kcyBv biB0aGUgZGVtYW5kLiBGb3IgdGhlCi0gICB0aW1lIGJlaW5nIHRoZSBkZWZpbml0aXZlIHJlZmVy ZW5jZSBhbmQgaW50cm9kdWN0aW9uIGlzIHRoZSBib29rICh3aGljaAotICAgaXMgbm93IGF2YWls YWJsZSBhbHNvIGluIGEgWzMyXUtpbmRsZSBFZGl0aW9uKSwgcGx1cyB0aGUgWzMzXUMtS2VybWl0 Ci0gICA3LjAgdXBkYXRlLCBbMzRdQy1LZXJtaXQgOC4wIHVwZGF0ZSwgYW5kIG5vdyB0aGlzIG9u ZS4gUGx1cyB0b25zIG9mCi0gICBvdGhlciB3ZWIgcGFnZXMgb24gdGhpcyBzaXRlLCBzYW1wbGUg c2NyaXB0IHByb2dyYW1zLCBhbmQgc28gb24uCi0KLSAgIEluIHZlcnNpb24gNi4wLCBDLUtlcm1p dCB3YXMgYSBwcmV0dHkgcG93ZXJmdWwgYW5kIGZsZXhpYmxlCi0gICBjb21tdW5pY2F0aW9uIHBy b2dyYW0gd2l0aCBzY3JpcHRpbmcgY2FwYWJpbGl0aWVzLiBCeSB2ZXJzaW9uIDkuMCwgSSdkCi0g ICBsaWtlIHRvIHRoaW5rIG9mIGl0IG1vcmUgYXMgYSBzY3JpcHRpbmcgbGFuZ3VhZ2Ugd2l0aCBi dWlsdC1pbgotICAgY29tbXVuaWNhdGlvbnMuIFlvdSBjYW4gZ2V0IGFuIGlkZWEgb2YgdGhlIGtp bmRzIG9mIHByb2dyYW1zIHlvdSBjYW4KLSAgIHdyaXRlIGluIEtlcm1pdCBsYW5ndWFnZSBbMzVd aGVyZS4gWW91IGNhbiBkZXZlbG9wIHByb2dyYW1zIHF1aWNrbHkKLSAgIGJlY2F1c2UgaXQncyBh biBpbnRlcmFjdGl2ZSBwcm9ncmFtLCBub3QgYSBjb21waWxlci4gVGhlIHNjcmlwdGluZwotICAg bGFuZ3VhZ2UgaXMgdGhlIGNvbW1hbmQgbGFuZ3VhZ2UuIEtpbmQgb2YgbGlrZSB0aGUgVW5peCBz aGVsbCBidXQKLSAgICJzb21ld2hhdCIgbGVzcyBjcnlwdGljLCBpbmNsdWRpbmcgY29uY2VwdHMg bm90IG9ubHkgZnJvbSBDIGJ1dCBmcm9tCi0gICBQTC9JLCBTbm9ib2wsIExJU1AsIEJsaXNzLCBh bmQgU21hbGx0YWxrLiBUaGUgbGFuZ3VhZ2UgaXRzZWxmIGlzIGJ1aWx0Ci0gICB1cG9uIHRoZSBj b21tYW5kIGxhbmd1YWdlIG9mIHRoZSBtdWNoLWxvdmVkIFszNl1ERUNTWVNURU0tMjAgZnJvbSB0 aGUKLSAgIDE5NzBzIGFuZCA4MHMsIHRoZSBDbGlwcGVyIFNoaXAgb2YgdGhlIFRleHQgRXJhLiAo VGV4dCBpcyBub3QgYSBiYWQKLSAgIHdvcmQuIFRob3NlIG9mIHVzIHdobyBjYW4gdG91Y2gtdHlw ZSBhbmQgd2hvIGFyZSBwcm9maWNpZW50IGluCi0gICB0ZXh0LWJhc2VkIGNvbXB1dGluZyBlbnZp cm9ubWVudHMgbGlrZSBVbml4IHNoZWxsIG9yIFZNUyBEQ0wgYXJlIGxpa2VseQotICAgdG8gYmUg b3JkZXJzIG9mIG1hZ25pdHVkZSBtb3JlIHByb2R1Y3RpdmUgdGhhbiB1c2VycyBvZiBHVUlzLikK LQotICAgVGhhbmtzIHRvIChhdCBsZWFzdCkgSmVmZiBBbHRtYW4sIFdpbGxpYW0gQmFkZXIsIElh biBCZWNrd2l0aCwgTmVsc29uCi0gICBCZWViZSwgR2VycnkgQmVsYW5nZXIsIEpvb3AgQm9vbmVu LCBSb2IgQnJvd24sIENocmlzdGlhbiBDb3J0aSwgQWxleGV5Ci0gICBEb2t1Y2hhZXYsIEpvaG4g RHVubGFwLCBQZXRlciBFaWNoaG9ybiwgQ2FybCBGcmllZGJlcmcsIFRlcnJ5IEtlbm5lZHksCi0g ICBH77+9bnRlciBLbmF1ZiwgSmFzb24gTGVociwgQXJ0aHVyIE1hcnNoLCBMZXdpcyBNY0NhcnRo eSwgR2FyeSBNaWxscywgRWQKLSAgIFJhdmluLCBKb25hdGhhbiBSZWFtcywgTWlrZSBSZWNodG1h biwgTWFyayBTYXBpcm8sIFN0ZXZlbiBTY2h3ZWRhCi0gICAoU01TKSwgS2luamFsIFNoYWgsIE1p Y2hhZWwgU29rb2xvdiwgQW5keSBUYW5lbmJhdW0sIFNldGggVGhlcmlhdWx0LAotICAgWmFjaCBB LiBUaG9tYXMsIE1hcnRpbiBWb3Js77+9bmRlciwgYW5kIEVyaWMgV2VhdmVyIGZvciBhc3Npc3Rh bmNlLCBhbmQKLSAgIHRvIEhld2xldHQtUGFja2FyZCBDb21wYW55IGZvciBzdXBwb3J0LgotCi0g ICAgIC0gRnJhbmsgZGEgQ3J1eiAgIFszN11mZGNAY29sdW1iaWEuZWR1LCAzMCBKdW5lIDIwMTEK LQotICAgUC5TLiBJdCBvY2N1cnJlZCB0byBtZSBqdXN0IGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBk YXkgdGhhdCBtYXliZSBJCi0gICBzaG91bGQgYmFjayB1cCB0aGUgS2VybWl0IHdlYnNpdGUgb24g RFZELCBqdXN0IGluIGNhc2UuIFVzaW5nCi0gICBbMzhdS2VybWl0IDk1IG9uIHRoZSBkZXNrdG9w IG92ZXIgYW4gU1NIIGNvbm5lY3Rpb24gdG8gdGhlIFVuaXggZmlsZQotICAgc3lzdGVtIHdoZXJl IHRoZSB3ZWJzaXRlIHJlc2lkZXMsIEkgbWFkZSBhIGZyZXNoIGRpcmVjdG9yeSBvbiB0aGUgUEMs Ci0gICBDRCdkIHRvIGl0LCBhbmQgb24gVW5peCBjZCdkIHRvIHRoZSBXZWJzaXRlIGRpcmVjdG9y eSwgYW5kIHRvbGQKLSAgIEMtS2VybWl0IDkuMCB0bzoKLQotQy1LZXJtaXQ+IHNlbmQgL3JlY3Vy c2l2ZSAvZG90ZmlsZXMgL25vYmFja3VwICoKLQotICAgYW5kIGl0IHJlLWNyZWF0ZWQgdGhlIHdl YnNpdGUgZGlyZWN0b3J5IHRyZWUgaW4gdGhlIFBDIGRpcmVjdG9yeSwgdGV4dAotICAgZmlsZXMg Y29ycmVjdGx5IGNvbnZlcnRlZCB0byBXaW5kb3dzIGZvcm1hdCBhbmQgYmluYXJ5IGZpbGVzIGNv cnJlY3RseQotICAgbGVmdCBhcy1pcy4gVGhlIC9kb3RmaWxlcyBzd2l0Y2ggbWVhbnMgdG8gaW5j bHVkZSBmaWxlcyBzdWNoIGFzCi0gICAuaHRhY2Nlc3Mgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCBh IGRvdCAocGVyaW9kKSwgYW5kIHRoZSAvbm9iYWNrdXAKLSAgIHN3aXRjaCBtZWFucyB0byBza2lw IGJhY2t1cCBmaWxlcyBjcmVhdGVkIGJ5IEVNQUNzIChzdWNoIGFzCi0gICBpbmRleC5odG1sLn4y NDN+KS4gQW5kIHRoZW4gSSBkaWQgdGhlIHNhbWUgd2l0aCB0aGUgRlRQIHNpdGVzLCBhYm91dAot ICAgOEdCIGluIGFsbC4gV2F0Y2hpbmcgdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSB3YXMga2lu ZCBvZiBsaWtlIGhhdmluZwotICAgMzAgeWVhcnMgb2YgbXkgbGlmZSBmbGFzaCBiZWZvcmUgbXkg ZXllcyBpbiBhIGZldyBtaW51dGVzLiBUaGVuIEkKLSAgIGNvcGllZCB0aGUgdHdvIGRpcmVjdG9y aWVzIHRvIERWRCAodGhlIEZUUCBzaXRlIGhhZCB0byBiZSBzcGxpdCBvdmVyIDIKLSAgIERWRHMp LiBUaGUgd2hvbGUgb3BlcmF0aW9uIHRvb2sgdW5kZXIgaGFsZiBhbiBob3VyLiBUaGUgZGlyZWN0 b3J5IHRyZWUKLSAgIG9uIHRoZSBDRCBpcyBkaXJlY3RseSB1c2FibGUgaW4gV2luZG93cywgVW5p eCwgb3IgYW55IG90aGVyIG9wZXJhdGluZwotICAgc3lzdGVtICh1bmxpa2UgaWYgSSBoYWQgdHJh bnNmZXJyZWQgdGhlIGZpbGVzIGFsbCBpbiBiaW5hcnkgbW9kZSBvciBhbGwKLSAgIGluIHRleHQg bW9kZSwgb3IgaWYgSSBoYWQgbWFkZSwgc2F5LCBhIGd6aXBwZWQgdGFyIGFyY2hpdmUgb3IgYSB6 aXAKLSAgIGFyY2hpdmUpLiBJIGJlbGlldmUgdGhhdCwgdG8gdGhpcyBkYXksIEtlcm1pdCBpcyB0 aGUgb25seSBzb2Z0d2FyZSB0aGF0Ci0gICBjYW4gZG8gdGhpcy4gSWYgc29tZWRheSBJIGhhdmUg dG8gdXBsb2FkIGZyb20gdGhlc2UgRFZEcyB0byBVbml4LCBWTVMsCi0gICBvciBhbnkgb3RoZXIg b3BlcmF0aW5nIHN5c3RlbSwgaXQgY2FuIGJlIGRvbmUgZXhhY3RseSB0aGUgc2FtZSB3YXksCi0g ICB3aXRoIGFueSBuZWNlc3NhcnkgY29udmVyc2lvbnMgb24gdGV4dCBmaWxlcyBkb25lIGF1dG9t YXRpY2FsbHksIGFuZAotICAgYmluYXJ5IGZpbGVzIGxlZnQgaW50YWN0LCByZWN1cnNpdmVseSB0 aHJvdWdoIGEgd2hvbGUgdmVyeSBsYXJnZQotICAgZGlyZWN0b3J5IHRyZWUuCi0KLVdoYXQncyBO ZXcgaW4gR2VuZXJhbAotCi0gICBWZXJ5IGJyaWVmbHksIHRoZSBtYWpvciBpdGVtczoKLSAgICAg KiBbMzldT3BlbiBTb3VyY2UgbGljZW5zZS4KLSAgICAgKiBbNDBdNjQtYml0IGZpbGUgYWNjZXNz IGFuZCB0cmFuc2ZlciBhbmQgNjQtYml0IGludGVnZXIgYXJpdGhtZXRpYwotICAgICAgIG9uIG1v c3QgY29tbW9uIHBsYXRmb3Jtcy4KLSAgICAgKiBTdXBwb3J0IGZvciByZWNlbnQgcmVsZWFzZXMg b2YgTGludXgsIE1hYyBPUyBYLCAqQlNELCBldGMgKFs0MV1zZWUKLSAgICAgICB0YWJsZSkuCi0g ICAgICogU3VwcG9ydCBmb3IgbmV3ZXIgT3BlblNTTCByZWxlYXNlcyB1cCB0byBhbmQgaW5jbHVk aW5nIDEuMC4wZAotICAgICAgIChbNDJdc2VlIHRhYmxlKS4KLSAgICAgKiBbNDNdU3RyZW5ndGhl bmVkIGVycm9yIGNoZWNraW5nIGZvciBmaWxlIHRyYW5zZmVyIHVuZGVyIGV4dHJlbWVseQotICAg ICAgIGhhcnNoIGNvbmRpdGlvbnMuCi0gICAgICogWzQ0XVNpbXBsaWZpZWQgc2VtYW50aWNzIGZv ciB2YXJpYWJsZXMgdXNlZCBpbiBzY3JpcHRzLgotICAgICAqIFN1cGVyLWhhbmR5IFs0NV1leHRl bnNpb25zIHRvIHRoZSBSRU5BTUUgY29tbWFuZC4KLSAgICAgKiBPdGhlciBzY3JpcHRpbmcgaW1w cm92ZW1lbnRzIGluY2x1ZGluZyBzdXBwb3J0IGZvciByZWFkaW5nIGFuZAotICAgICAgIHdyaXRp bmcgWzQ2XUNTViBhbmQgVFNWIGZpbGVzLgotICAgICAqIFs0N11NSU1FIGNoYXJhY3Rlci1zZXQg bmFtZXMgYXJlIG5vdyByZWNvZ25pemVkLgotICAgICAqIEltcHJvdmVkIGxvZ2dpbmcgYW5kIGRl YnVnZ2luZyAoc2VlIGRlbW8gWzQ4XWhlcmUpLgotICAgICAqIExvdHMgbW9yZSBkZXNjcmliZWQg b3IgbGlzdGVkIGJlbG93LCBhbmQgWzQ5XWhlcmUuCi0KLU9wZW4gU291cmNlIExpY2Vuc2UKLQot ICAgQy1LZXJtaXQgOS4wIGhhcyB0aGUgWzUwXVJldmlzZWQgMy1DbGF1c2UgQlNEIExpY2Vuc2Us IGFuIG9wZW4gc291cmNlCi0gICBsaWNlbnNlIGFwcHJvdmVkIGJ5IE9TSSwgdGhlIFs1MV1PcGVu IFNvdXJjZSBJbml0aWF0aXZlLgotCi1MYXJnZSBGaWxlcwotCi0gICBLZXJtaXQgaXMsIGZpcnN0 IGFuZCBmb3JlbW9zdCwgYSBmaWxlLXRyYW5zZmVyIHByb2dyYW0uIE9uZSBtaWdodAotICAgZXhw ZWN0IGl0IHRvIGJlIGFibGUgdG8gdHJhbnNmZXIgYW55IGtpbmQgb2YgZmlsZSwgYnV0IHRoYXQg aGFzIGJlZW4KLSAgIGRlY3JlYXNpbmdseSB0aGUgY2FzZSBhcyBmaWxlIHNpemVzIGJlZ2FuIHRv IGNyb3NzIHRoZSAyIGdpZ2FieXRlCi0gICB0aHJlc2hvbGQuCi0KLSAgIFRoZSBiaWdnZXN0IGNo YW5nZSBzaW5jZSBDLUtlcm1pdCA4LjAuMjExIGlzIHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzIG9u Ci0gICBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHRoZW0uIEEgImxhcmdlIGZpbGUiIGlzIG9uZSB3 aG9zZSBzaXplIGlzCi0gICBncmVhdGVyIHRoYW4gMl4zMS0xICgyLDE0Nyw0ODMsNjQ3KSBieXRl cyAoMkdCLTEpOyB0aGF0IGlzLCBvbmUgd2hvc2UKLSAgIHNpemUgcmVxdWlyZXMgbW9yZSB0aGFu IDMxIGJpdHMgdG8gcmVwcmVzZW50LiBCZWZvcmUgbm93LCBLZXJtaXQgd2FzCi0gICBhYmxlIHRv IGFjY2VzcyBzdWNoIGZpbGVzIG9ubHkgb24gMTAwJSA2NC1iaXQgcGxhdGZvcm1zIHN1Y2ggYXMg RGlnaXRhbAotICAgVW5peCwgbGF0ZXIga25vd24gYXMgVHJ1NjQgVW5peC4gSW4gdGhlIG5ldyBy ZWxlYXNlLCBLZXJtaXQgdGFrZXMKLSAgIGFkdmFudGFnZSBvZiB0aGUgWC9PcGVuIFNpbmdsZSBV TklYIFNwZWNpZmljYXRpb24gVmVyc2lvbiAyIChVTklYIDk4KQotICAgTGFyZ2UgRmlsZSBTdXBw b3J0IChMRlMpIHNwZWNpZmljYXRpb24sIHdoaWNoIGFsbG93cyAzMi1iaXQgcGxhdGZvcm1zCi0g ICB0byBjcmVhdGUsIGFjY2VzcywgYW5kIG1hbmFnZSBmaWxlcyBsYXJnZXIgdGhhbiAyR0IuCi0K LSAgIEFjY29tbW9kYXRpbmcgbGFyZ2UgZmlsZXMgcmVxdWlyZWQgY29kZSBjaGFuZ2VzIGluIG1h bnkgbW9kdWxlcywKLSAgIGFmZmVjdGluZyBub3Qgb25seSBmaWxlIHRyYW5zZmVyLCBidXQgYWxz byBmaWxlIG1hbmFnZW1lbnQgZnVuY3Rpb25zCi0gICBmcm9tIGRpcmVjdG9yeSBsaXN0aW5ncyB0 byBsb2NhbCBmaWxlIG1hbmlwdWxhdGlvbiwgcGx1cyB0aGUgdXNlcgotICAgaW50ZXJmYWNlIGl0 c2VsZiB0byBhbGxvdyBlbnRyeSBhbmQgZGlzcGxheSBvZiBsYXJnZSBudW1iZXJzLiBBbGwgdGhp cwotICAgaGFkIHRvIGJlIGRvbmUgaW4gYSB3YXkgdGhhdCB3b3VsZCBub3QgYWZmZWN0IHB1cmUg MzItYml0IGJ1aWxkcyBvbgotICAgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgbGFyZ2Ug ZmlsZXMuIExhcmdlIGZpbGUgc3VwcG9ydCBpcwotICAgc3VtbWFyaXplZCBpbiB0aGUgWzUyXVRh YmxlIG9mIFBsYXRmb3JtczsgZW50cmllcyBpbiBZZWxsb3cgKDMyLWJpdAotICAgYnVpbGRzIHRo YXQgc3VwcG9ydCA2NC1iaXQgaW50ZWdlcnMpIGFuZCBHcmVlbiAoNjQtYml0IGJ1aWxkcykgc3Vw cG9ydAotICAgbGFyZ2UgZmlsZXMuCi0KLSAgIE5vdGUgdGhhdCBWTVMgQy1LZXJtaXQgYW5kIEtl cm1pdCA5NSBmb3IgV2luZG93cyBoYXZlIGFsd2F5cyBiZWVuIGFibGUKLSAgIHRvIHRyYW5zZmVy IGxhcmdlIGZpbGVzLiBIb3dldmVyIHRoZWlyIHVzZXIgaW50ZXJmYWNlIHVzZWQgMzItYml0Ci0g ICBpbnRlZ2VycyBmb3Igc3RhdGlzdGljcyBhbmQgdGhlIGZpbGUgdHJhbnNmZXIgZGlzcGxheS4g SW4gQy1LZXJtaXQgOS4wCi0gICBBbHBoYS4wMywgVk1TIEMtS2VybWl0IG9uIDY0LWJpdCBwbGF0 Zm9ybXMgKEFscGhhIGFuZCBJdGFuaXVtKSBzaG91bGQKLSAgIG5vdyBnaXZlIGNvcnJlY3Qgc3Rh dGlzdGljcyBhbmQgcHJvZ3Jlc3MgZGlzcGxheXMuIChXZSdsbCBzZWUgYWJvdXQKLSAgIEtlcm1p dCA5NSBsYXRlci4pCi0KLUhvdyB0byBUZXN0IExhcmdlLUZpbGUgVHJhbnNmZXIKLQotICAgU2V2 ZXJhbCBtZXRob2RzIGFyZSBhdmFpbGFibGUgZm9yIHRlc3RpbmcgbGFyZ2UtZmlsZSB0cmFuc2Zl cnM6Ci0gICAgICogQnkgdHJhbnNmZXJyaW5nIGEgcmVhbCBmaWxlIHRoYXQgaXMgbW9yZSB0aGFu IDIxNDc0ODM2NDggYnl0ZXMgbG9uZwotICAgICAgIChhIGZpbGUgd2hvc2UgbGVuZ3RoIHJlcXVp cmVzIG1vcmUgdGhhbiAzMSBiaXRzIHRvIGV4cHJlc3MpOyBvciB0bwotICAgICAgIGJlIHRvdGFs bHkgc3VyZSwgdGhhdCBpcyBsb25nZXIgdGhhbiA0Mjk0OTY3Mjk2IGJ5dGVzICgzMiBiaXRzIG9y Ci0gICAgICAgbW9yZSkuIE9yIHRvIGJlIGRvdWJsZSBzdXBlciBzdXJlLCBsb25nZXIgdGhhbiA4 NTg5OTM0NTkyICgzMwotICAgICAgIGJpdHMpLgotICAgICAqIElmIHlvdSBkb24ndCBoYXZlIHN1 Y2ggYSBmaWxlIG9yIHRoZXJlIGlzIG5vdCBzdWZmaWNpZW50IGRpc2sgc3BhY2UKLSAgICAgICBm b3Igc3VjaCBhIGZpbGUsIHlvdSBjYW4gY3JlYXRlIGEgc3BlY2lhbCBraW5kIG9mIGZpbGUgdGhh dCB0YWtlcwotICAgICAgIHVwIG9uZSBibG9jayBvbiB0aGUgZGlzayBidXQgYXBwZWFycyB0byBi ZSA0LjNHQiBsb25nIGJ5IGNvbXBpbGluZwotICAgICAgIGFuZCBydW5uaW5nIFs1M11USElTIEMg UFJPR1JBTSBvbiBMaW51eCwgU29sYXJpcywgSFAtVVgsIG9yIG90aGVyCi0gICAgICAgVW5peCBw bGF0Zm9ybSB0aGF0IHN1cHBvcnRzIGxhcmdlIGZpbGVzLiBLZXJtaXQgb3IgRlRQIG9yIGFueSBv dGhlcgotICAgICAgIGZpbGUgdHJhbnNmZXIgcHJvZ3JhbSB3aWxsIHRyYW5zZmVyIHRoZSByZXN1 bHQgKEJJR0ZJTEUpIGluIHN1Y2ggYQotICAgICAgIHdheSBhcyB0byBhY3R1YWxseSBwdXQgNC4z R0IgKG9yIG90aGVyIGRlc2lyZWQgc2l6ZTsgc2VlIHNvdXJjZSkgb24KLSAgICAgICB0aGUgd2ly ZS4KLSAgICAgKiBZb3UgY2FuIHVzZSBLZXJtaXQncyBDQUxJQlJBVEUgZmVhdHVyZSB0byB0cmFu c2ZlciBhIGxhcmdlIGZpbGUKLSAgICAgICB0aGF0IGRvZXNuJ3QgZXhpc3QuIEF0IHRoZSByZWNl aXZlciwgdXNlIFJFQ0VJVkUgL0NBTElCUkFURS4gQXQgdGhlCi0gICAgICAgc2VuZGVyLCB1c2Ug U0VORCAvQ0FMSUJSQVRFOmxlbmd0aCwgZS5nLjoKLQotICAgICAoQXQgcmVtb3RlIGtlcm1pdC4u LikKLSAgICAgJCBrZXJtaXQgLVkKLSAgICAgQy1LZXJtaXQ+IHJlY2VpdmUgL2NhbGlicmF0ZQot ICAgICAoUmV0dXJuIHRvIGxvY2FsIGtlcm1pdC4uLikKLSAgICAgQ3RybC1cYwotICAgICBDLUtl cm1pdD4gc2VuZCAvY2FsaWJyYXRlOjQzMDAwMDAwMDAKLSAgICAgICBUaGlzIHNlbmRzIGEgc2lt dWxhdGVkIGZpbGUgNC4zR0IgaW4gbGVuZ3RoLCB0aGF0IGRvZXMgbm90IGV4aXN0IG9uCi0gICAg ICAgdGhlIHNlbmRlciBhbmQgd2lsbCBub3QgdGFrZSB1cCBhbnkgZGlzayBzcGFjZSBvbiB0aGUg cmVjZWl2ZXIuCi0gICAgICAgU0VORCAvQ0FMSUJSQVRFOiBhY2NlcHRzIGJpZyBudW1iZXJzIG9u bHkgaW4gS2VybWl0IHZlcnNpb25zIHRoYXQKLSAgICAgICBzdXBwb3J0IHRoZW0gKHRoaXMgZG9l cyBub3QgaW5jbHVkZSBLZXJtaXQgOTUgb24gV2luZG93cykuIFRoaXMKLSAgICAgICBtZXRob2Qg dGVzdHMgb25seSBLZXJtaXQncyBhYmlsaXR5IHRvIGV4cHJlc3MgYW5kIHVuZGVyc3RhbmQgbGFy Z2UKLSAgICAgICBmaWxlIHNpemVzLCBidXQgZG9lcyBub3QgdGVzdCBLZXJtaXQncyBmaWxlLXN5 c3RlbSBpbnRlcmZhY2UsIHNpbmNlCi0gICAgICAgbm8gZmlsZXMgYXJlIGludm9sdmVkLgotCi1B cml0aG1ldGljIHdpdGggTGFyZ2UgSW50ZWdlcnMKLQotICAgQmVjYXVzZSBsYXJnZSBmaWxlIHN1 cHBvcnQgcmVxdWlyZXMgdGhlIGF2YWlsYWJpbGl0eSBvZiBhIDY0LWJpdCBzaWduZWQKLSAgIGlu dGVnZXIgZGF0YSB0eXBlLCBvdGhlciBhc3BlY3RzIG9mIEMtS2VybWl0IHdlcmUgYWRhcHRlZCB0 byB1c2UgaXQKLSAgIHRvbywgbW9zdCBub3RhYmx5IEtlcm1pdCdzIGFsZ2VicmFpYyBleHByZXNz aW9uIGV2YWx1YXRvciBhbmQgaXRzCi0gICBbNTRdUy1FeHByZXNzaW9uIGludGVycHJldGVyLCBv biBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBsYXJnZSBmaWxlcwotICAgKHRob3NlIGxpc3Rl ZCBhcyA2NCBvciAzMi82NCBpbiB0aGUgV29yZCBjb2x1bW4gb2YgdGhlIFs1NV10YWJsZSkuIElu Ci0gICBmYWN0LCBldmVyeSBLZXJtaXQgY29tbWFuZCB0aGF0IHBhcnNlcyBhIG51bWJlciBpbiBh bnkgZmllbGQgY2FuIG5vdwotICAgcGFyc2UgYSBsYXJnZSBudW1iZXIgb24gdGhvc2UgcGxhdGZv cm1zLgotCi0gICBTLUV4cHJlc3Npb25zIGNhbiBub3cgYmUgZm9yY2VkIHRvIG9wZXJhdGUgd2l0 aCBpbnRlZ2VycyBvbmx5LCB3aXRob3V0Ci0gICBmbG9hdGluZy1wb2ludCBjb252ZXJzaW9uIG9y IGhhdmluZyB0byBleHBsaWNpdGx5IHRydW5jYXRlIGVhY2ggcmVzdWx0OwotICAgYXMgYW4gZXhh bXBsZS4gc2VlIHRoZSByZXZpc2VkIFs1Nl1FYXN0ZXIgZGF0ZSBjYWxjdWxhdGlvbiBzY3JpcHQu Ci0KLUZPUkNFLTMgUGFja2V0IFByb3RvY29sCi0KLSAgIFRoZSBLZXJtaXQgcHJvdG9jb2wgaGFz IHByb3ZlbiBpdHNlbGYgb3ZlciB0aGUgcGFzdCAzMCB5ZWFycyB0byBiZQotICAgcm9idXN0IGlu IHRlcm1zIG9mIHN1cnZpdmluZyBoYXJzaCB0cmFuc21pc3Npb24gZW52aXJvbm1lbnRzIGFuZAot ICAgZGVsaXZlcmluZyB0aGUgZGF0YSBjb3JyZWN0bHkgYW5kIGNvbXBsZXRlbHkuIEluIHRoZXNl IHRpbWVzIG9mCi0gICBJbnRlcm5ldCBldmVyeXdoZXJlIGFuZCBlcnJvci1jb3JyZWN0aW5nIG1v ZGVtcyBpbiB0aGUgZmV3IHBsYWNlcyB3aGVyZQotICAgdGhlIEludGVybmV0IGlzbid0LCBmZXcg cGVvcGxlIGV2ZW4gcmVjYWxsIHRoZSBraW5kcyBvZiBkaWZmaWN1bHQKLSAgIGNvbmRpdGlvbnMg dGhhdCB3ZXJlIGNvbW1vbiB3aGVuIHRoZSBLZXJtaXQgcHJvdG9jb2wgd2FzIGZpcnN0Ci0gICBk ZXZlbG9wZWQ6IG5vaXN5IHRlbGVwaG9uZSBsaW5lcywgc2VyaWFsIGludGVyZmFjZXMgdGhhdCBk cm9wCi0gICBjaGFyYWN0ZXJzLCBsYWNrIG9mIHRyYW5zcGFyZW5jeSB0byBjb250cm9sIG9yIDgt Yml0IGNoYXJhY3RlcnMsCi0gICBhYnNlbmNlIG9mIGZsb3cgY29udHJvbCwgImJhcmUiIG1vZGVt cyB3aXRob3V0IGVycm9yIGNvcnJlY3Rpb24uCi0KLSAgIEJ1dCB0aGUgSW50ZXJuZXQgaXMgbm90 IGV2ZXJ5d2hlcmUsIGFuZCBub3QgYWxsIG1vZGVtcyBhcmUKLSAgIGVycm9yLWNvcnJlY3Rpbmcu IFBlcmhhcHMgdGhlIG1vc3QgZGlmZmljdWx0IHRyaWFsIHNvIGZhciBmb3IgS2VybWl0IG9yCi0g ICBhbnkgb3RoZXIgcHJvdG9jb2wgaXMgdGhlIFs1N11FTS1BUEVYIHByb2plY3QsIGluIHdoaWNo IGZsb2F0cyBhcmUKLSAgIGRyb3BwZWQgaW50byB0aGUgb2NlYW4gZnJvbSBhbiBhaXJjcmFmdCBp bnRvIHRoZSBwYXRoIG9mIGEgaHVycmljYW5lOwotICAgdGhlc2UgZmxvYXRzIGRpdmUgaW50byB0 aGUgd2F0ZXIgbWVhc3VyaW5nIGN1cnJlbnQsIHRlbXBlcmF0dXJlLCBhbmQKLSAgIHNhbGluaXR5 IGF0IGRpZmZlcmVudCBkZXB0aHMgYW5kIHRoZW4gc3VyZmFjZSB0byBwaG9uZSBob21lLCBzZW5k aW5nCi0gICB0aGUgZGF0YSB0byBsYW5kIHN0YXRpb25zIHVzaW5nIEtlcm1pdCBwcm90b2NvbCBv dmVyCi0gICBub24tZXJyb3ItY29ycmVjdGluZyAzMDBicHMgWzU4XUlyaWRpdW0gc2F0ZWxsaXRl IG1vZGVtcywgd2l0aCBoaWdoCi0gICBzZWFzIGFuZCB3aW5kcyBiYXR0ZXJpbmcgdGhlIGZsb2F0 cyBhbmQgaGVhdnkgKFs1OV1zb21ldGltZXMKLSAgIGVsZWN0cmljYWwpIHN0b3JtcyBiZXR3ZWVu IHRoZSBtb2RlbSBhbmQgdGhlIHNhdGVsbGl0ZS4KLQotICAgQmVjYXVzZSBvZiB0aGUgdHJhbnNt aXNzaW9uIHNwZWVkIGFuZCBsb25nIGRpc3RhbmNlcyBpbnZvbHZlZCwgdGhlCi0gICB0cmFuc2Zl cnMgd2VyZSB2ZXJ5IHNsb3cuIFRoZSBLZXJtaXQgc29mdHdhcmUgaW4gdGhlIGZsb2F0cyBpcwot ICAgWzYwXUVtYmVkZGVkIEtlcm1pdCwgd2hpY2ggZGlkIG5vdCBpbXBsZW1lbnQgc2xpZGluZyB3 aW5kb3dzLCB3aGljaAotICAgd291bGQgaGF2ZSBzcGVkIHVwIHRoZSBmbG93IGNvbnNpZGVyYWJs eS4gSm9obiBEdW5sYXAsIGVuZ2luZWVyIGF0IHRoZQotICAgVW5pdmVyc2l0eSBvZiBXYXNoaW5n dG9uJ3MgQXBwbGllZCBQaHlzaWNzIExhYm9yYXRvcnksIHVuZGVydG9vayB0aGUKLSAgIHRhc2sg b2YgYWRkaW5nIHNsaWRpbmcgd2luZG93cyB0byBFLUtlcm1pdC4gRm9yIHRlc3RpbmcsIGhlIHJp Z2dlZCB1cCBhCi0gICBbNjFdc2ltdWxhdG9yIGluIHdoaWNoIEtlcm1pdCB0cmFuc2ZlcnMgdGFr ZSBwbGFjZSBvdmVyIGEgY29ubmVjdGlvbgotICAgd2l0aCBkaWZmZXJlbnQgYW1vdW50cyBvZiBu b2lzZSBhbmQgZGVsYXkuIEhlIGZvdW5kIHRoYXQgb2NjYXNpb25hbGx5LAotICAgYSB0cmFuc2Zl ciB3b3VsZCBhcHBlYXIgdG8gc3VjY2VlZCwgYnV0IHRoZSByZWNlaXZlZCBmaWxlIHdvdWxkIGJl Ci0gICBjb3JydXB0LgotCi0gICBBY2NvcmRpbmcgdG8gdGhlIEtlcm1pdCBwcm90b2NvbCBkZWZp bml0aW9uLCB0aGUgZmlyc3QgcGFja2V0IGFsd2F5cwotICAgaGFzIGJsb2NrLWNoZWNrIHR5cGUg MSwgYSA2LWJpdCBjaGVja3N1bSwgd2hpY2ggaXMgdGhlIG9ubHkgYmxvY2sgY2hlY2sKLSAgIHR5 cGUgdGhhdCBhbGwgS2VybWl0IGltcGxlbWVudGF0aW9ucyBhcmUgcmVxdWlyZWQgdG8gc3VwcG9y dDsgdGh1cyBhbnkKLSAgIEtlcm1pdCBwYXJ0bmVyIGNhbiBwcm9jZXNzIHRoaXMgcGFja2V0LiBU aGlzIHBhY2tldCBpdHNlbGYgY2FuCi0gICBuZWdvdGlhdGUgYSBoaWdoZXIgbGV2ZWwgb2YgY2hl Y2tpbmcsIHN1Y2ggdGhhdCBzdWJzZXF1ZW50IHBhY2tldHMgaGF2ZQotICAgKHNheSkgYmxvY2st Y2hlY2sgdHlwZSAzLCBhIDE2LWJpdCBjeWNsaWMgcmVkdW5kYW5jeSBjaGVjayAoQ1JDKQotICAg ZW5jb2RlZCBhcyB0aHJlZSBwcmludGFibGUgNy1iaXQgQVNDSUkgY2hhcmFjdGVycy4gVGhlIDE2 LWJpdCBDUkMgY2FuCi0gICBjYXRjaCBhbGwgZXJyb3JzIG9mIGNlcnRhaW4ga2luZHMgKHNpbmds ZS1iaXQsIGRvdWJsZS1iaXQsIGJ1cnN0cyBvZiAxNgotICAgYml0cyBvciBsZXNzKSwgYW5kIG1v cmUgdGhhbiA5OS45OTg0NzQxMjEwOTM3JSBvZiBhbGwgb3RoZXIgcG9zc2libGUKLSAgIGVycm9y cy4KLQotICAgSm9obidzIHNpbXVsYXRpb25zIHJldmVhbGVkIHRoYXQgZmlsZSBjb3JydXB0aW9u IGNvdWxkIG9jY3VyIHVuZGV0ZWN0ZWQKLSAgIHdoZW4gdGhlIGluaXRpYWwgcGFja2V0IHdhcyBj b3JydXB0ZWQgaW4gc3VjaCBhIHdheSB0aGF0IGEgcGFyYW1ldGVyIG9yCi0gICBjYXBhYmlsaXR5 IGJ5dGUgd2FzIGNoYW5nZWQgYW5kIHRoZSBjaGVja3N1bSBhbHNvIGNoYW5nZWQgdG8gbWFrZSB0 aGUKLSAgIHBhY2tldCBhcHBlYXIgdG8gYmUgY29ycmVjdCwgdGh1cyBhbGxvd2luZyB0aGUgdHJh bnNmZXIgdG8gcHJvY2VlZCB3aXRoCi0gICB0aGUgdHdvIEtlcm1pdCBwYXJ0bmVycyBvdXQgb2Yg c3luYyBhcyB0byBwYWNrZXQgZW5jb2RpbmcgYW5kCi0gICBpbnRlcnByZXRhdGlvbiAodGhlIGNo YW5jZXMgb2YgdHdvIHN1Y2ggZXJyb3JzIHByb2R1Y2luZyBhIHNlZW1pbmdseQotICAgdmFsaWQg cGFja2V0IGFyZSBhYm91dCAxIGluIDYwMDAgd2hlbiB1c2luZyB0aGUgNi1iaXQgY2hlY2tzdW0p LiBGb3IKLSAgIGV4YW1wbGUsIHRoZSBjb21wcmVzc2lvbiB0ZWNobmlxdWUgbWlnaHQgYmUgbWlz bmVnb3RpYXRlZCBhbmQgdGhlbiB0aGUKLSAgIHJlY2VpdmVyIG1pZ2h0IHN0b3JlIGluY29taW5n IGRhdGEgd2l0aG91dCBkZWNvbXByZXNzaW5nIGl0LgotCi0gICBUaGUgc29sdXRpb24gaXMgYSBu ZXcgb3B0aW9uLCBzZWxlY3RlZCBieToKLQotICAgICBCTE9DSy1DSEVDSyBUWVBFIDUKLQotICAg dG8gcmVxdWlyZSBhIHR5cGUgMyBibG9jayBjaGVjayAoMTYtYml0IENSQykgb24gZXZlcnkgcGFj a2V0LCBpbmNsdWRpbmcKLSAgIHRoZSBpbml0aWFsIG9uZXMsIHRodXMgcmVkdWNpbmcgdGhlIHBy b2JhYmlsaXR5IG9mIGEgbWlzbmVnb3RpYXRpb24gYnkKLSAgIG1hbnkgb3JkZXJzIG9mIG1hZ25p dHVkZS4gVEhJUyBQQVJBTUVURVIgQ0FOIE5PVCBCRSBORUdPVElBVEVELiBFYWNoCi0gICBLZXJt aXQgcHJvZ3JhbSBtdXN0IGJlIGdpdmVuIHRoZSAic2V0IGJsb2NrIDUiIGNvbW1hbmQgcHJpb3Ig dG8KLSAgIHRyYW5zZmVyLiBUaGF0J3MgYmVjYXVzZSBub3JtYWxseSBldmVyeSBLZXJtaXQgcHJv Z3JhbSBleHBlY3RzIHRoZQotICAgZmlyc3QgcGFja2V0IHRvIGhhdmUgYSA2LWJpdCBjaGVja3N1 bSwgYW5kIGlmIHRoZSBmaXJzdCBwYWNrZXQgaGFzIGEKLSAgIDMtYnl0ZSwgMTYtYml0IENSQywg dGhlIHBhY2tldCByZWNlaXZlciB3aWxsIHRoaW5rIGl0IGlzIGNvcnJ1cHRlZC4KLQotICAgSW4g cHJhY3RpY2UsIGhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRvIGNvZGUgdGhlIHBhY2tldCByZWNl aXZlcgotICAgImNoZWF0IiBieSByZWFkaW5nIHRoZSBwYWNrZXQgZGF0YSBiZWZvcmUgdmVyaWZ5 aW5nIHRoZSBibG9jayBjaGVjay4KLSAgIFRodXMgd2hlbiB0aGUgcmVjZWl2ZXIgaXMgQy1LZXJt aXQgOS4wIG9yIGxhdGVyIG9yIEUtS2VybWl0IDEuNyBvcgotICAgbGF0ZXIsIGl0IGlzIG9ubHkg bmVjZXNzYXJ5IHRvIGdpdmUgdGhlICJzZXQgYmxvY2sgNSIgY29tbWFuZCB0byB0aGUKLSAgIGZp bGUgc2VuZGVyLCBhbmQgdGhlIHJlY2VpdmVyIHdpbGwgY2hlY2sgZm9yIGEgRk9SQ0UtMyBmaXJz dCBwYWNrZXQuIElmCi0gICB0aGUgcmVjZWl2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1 cmUsIGhvd2V2ZXIsIHRoZSBpbml0aWFsIHBhY2tldAotICAgd2lsbCBiZSBiZSByZWplY3RlZCAo YWZ0ZXIgc2V2ZXJhbCByZXRyaWVzKSBhbmQgdGhlIGZpbGUgdHJhbnNmZXIgd2lsbAotICAgbm90 IHRha2UgcGxhY2UuIFRoZXJlIGlzIG5vIGF0dGVtcHQgdG8gImJhY2sgb2ZmIiB0byBub3JtYWwg YmVoYXZpb3IuCi0KLSAgIENBUFRJT046IFRhYmxlIDQuIEtlcm1pdCBQcm90b2NvbCBQYWNrZXQg QmxvY2sgQ2hlY2sgVHlwZXMKLQotICAgVHlwZSBDb21tYW5kIEJ5dGVzIFN0YXR1cyBFeHBsYW5h dGlvbgotICAgMSBTRVQgQkxPQ0sgMSAxIFJlcXVpcmVkIGluIGFsbCBLZXJtaXQgaW1wbGVtZW50 YXRpb25zLiBOZWdvdGlhdGVkLgotICAgNi1iaXQgY2hlY2tzdW0sIHN1aXRhYmxlIGZvciBnb29k IGNvbm5lY3Rpb25zLgotICAgMiBTRVQgQkxPQ0sgMiAyIE9wdGlvbmFsLCBuZWdvdGlhdGVkLiAx Mi1iaXQgY2hlY2tzdW0uIDY0IHRpbWVzCi0gICBzdHJvbmdlciB0aGFuIHR5cGUgMS4KLSAgIDMg U0VUIEJMT0NLIDMgMyBPcHRpb25hbCwgbmVnb3RpYXRlZC4gMTYtYml0IENSQy4KLSAgIEJMQU5L LUZSRUUtMiBTRVQgQkxPQ0sgNCAyIE9wdGlvbmFsLCBuZWdvdGlhdGVkLiAxMi1iaXQgY2hlY2tz dW0sIHR3bwotICAgbm9uYmxhbmsgYnl0ZXMuCi0gICBGT1JDRS0zIFNFVCBCTE9DSyA1IDMgT3B0 aW9uYWwsIG5vdCBuZWdvdGlhdGVkLiAxNi1iaXQgQ1JDIGZvcmNlZCBhbGwKLSAgIHBhY2tldHMu Ci0KLSAgIEJMQU5LLUZSRUUtMiBpcyBmb3IgZW52aXJvbm1lbnRzIHdoZXJlIEtlcm1pdCBwYWNr ZXRzIGFyZSB0cmVhdGVkIGFzCi0gICBsaW5lcyBvZiB0ZXh0LCBhbmQgaW4gd2hpY2ggdHJhaWxp bmcgYmxhbmtzIGNhbiBiZSBzdHJpcHBlZDsgZm9yCi0gICBleGFtcGxlLCB3aGVuIHRyYW5zZmVy cmluZyBmaWxlcyB3aXRoIGFuIElCTSBtYWluZnJhbWUgdGhyb3VnaCBhIDMyNzAKLSAgIHByb3Rv Y29sIGNvbnZlcnRlci4KLSAgIFs2Ml1FLUtlcm1pdCAxLjcKLQotVmFyaWFibGUgRXZhbHVhdGlv bgotCi0gICAgIERvZXMgdGhlIHN0cmFuZ2UgYmVoYXZpb3Igb2YgS2VybWl0J3MgXCV4IHZhcmlh YmxlcyBwdXp6bGUgb3IgYW5ub3kKLSAgICAgeW91PwotCi0gICBLZXJtaXQgc29mdHdhcmUgZGV2 ZWxvcG1lbnQgaGFzIGJlZW4gYSBjb2xsYWJvcmF0aXZlIHByb2plY3Qgb3ZlciB0aGUKLSAgIHll YXJzLCB3aXRoIGNvbnRyaWJ1dGlvbnMgY29taW5nIGluIGZyb20gYWxtb3N0IGV2ZXJ5IGNvdW50 cnkgYW5kIGV2ZXJ5Ci0gICBzZWN0b3Igb2YgdGhlIGVjb25vbXkgLSBhY2FkZW1pYywgY29ycG9y YXRlLCBnb3Zlcm5tZW50LiBUaHVzIG5vdCBhbGwKLSAgIHZlcnNpb25zLCBhbmQgbm90IGFsbCBm ZWF0dXJlcyBvZiBhIGdpdmVuIHZlcnNpb24sIGFyZSBhIHByb2R1Y3Qgb2YKLSAgIHN5c3RlbWF0 aWMgZGVzaWduLgotCi0gICBPbmUgZXhhbXBsZSB3YXMgdGhlIGludHJvZHVjdGlvbiBvZiB2YXJp YWJsZXMgZm9yIHRleHQgc3Vic3RpdHV0aW9uLAotICAgZmlyc3QgaW4gYSB2ZXJzaW9uIG9mIE1T LURPUyBLZXJtaXQgdGhhdCB3YXMgc2VudCBpbiBieSBzb21lb25lCi0gICBzb21ld2hlcmUgKEkg Y291bGQgbG9vayBpdCB1cCwgYnV0IG5vIHRpbWUuLi4pIEFsdGhvdWdoIHRoZSBkZXNpZ24gb2YK LSAgIHRoZSBub3RhdGlvbiBmb3IgdmFyaWFibGUgbmFtZXMgKHRhYmxlIGJlbG93KSBpcyBtaW5l LCB0aGUgdW5kZXJseWluZwotICAgY29kZSB3YXMgY29udHJpYnV0ZWQuIEluIHRoYXQgY29kZSB0 aGVyZSB3YXMgb25seSBvbmUga2luZCBvZiB2YXJpYWJsZSwKLSAgIGFuZCBpZiBJIHJlY2FsbCBj b3JyZWN0bHkgdGhlIHZhcmlhYmxlIG5hbWUgd2FzIGEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5Ci0g ICBhIHNpbmdsZSBsZXR0ZXIsIGZvciBleGFtcGxlIFxhLCBcYiwgZXRjLiBUaGUgY29udHJpYnV0 ZWQgY29kZQotICAgZXZhbHVhdGVkIHRoZXNlIHZhcmlhYmxlcyByZWN1cnNpdmVseSwgbWVhbmlu ZyBpZiB0aGUgZGVmaW5pdGlvbiBvZiBhCi0gICB2YXJpYWJsZSBjb250YWluZWQgdmFyaWFibGUg cmVmZXJlbmNlcywgdGhlbiB0aGVzZSB3ZXJlIHJlc29sdmVkIHdoZW4KLSAgIGRlcmVmZXJlbmNp bmcgdGhlIHZhcmlhYmxlLCBhbmQgdGhlIHByb2Nlc3Mgd291bGQgY29udGludWUgYXMgZGVlcCBk b3duCi0gICBhcyBuZWNlc3NhcnkgdG8gcmVzb2x2ZSB0aGUgdGhpbmcgZnVsbHkuCi0KLSAgIFRo aXMgd2FzIHNvbWV0aW1lcyBoYW5keSwgYnV0IGl0IGhhZCBvbmUgc2V2ZXJlIGRyYXdiYWNrOiBU aGVyZSB3YXMgbm8KLSAgIHdheSB0byB1c2UgdmFyaWFibGVzIGluIGEgc3RyYWlnaHRmb3J3YXJk IHdheSB0byByZXByZXNlbnQgc3RyaW5ncyB0aGF0Ci0gICBjb250YWluZWQgbGl0ZXJhbCBiYWNr c2xhc2hlczsgZm9yIGV4YW1wbGUsIERPUyBvciBXaW5kb3dzIHBhdGhuYW1lcy4KLSAgIFRoaXMg Z2F2ZSByaXNlIHRvIGFsbCBraW5kcyBvZiBxdW90aW5nIHJ1bGVzIGFuZCBjb252ZW50aW9ucyAo ZS5nLgotICAgZG91YmxpbmcgYmFja3NsYXNoZXMgb3IgZm9yY2luZyBzaW5nbGUtbGV2ZWwgZXZh bHVhdGlvbiB3aXRoCi0gICBcXGZjb250ZW50cygpKSwgYW5kIGFsc28gdG8gdGhlIGludHJvZHVj dGlvbiBvZiBvdGhlciBraW5kcyBvZgotICAgdmFyaWFibGVzIHRoYXQgd2VyZSBldmFsdWF0ZWQg b25lIGxldmVsIGRlZXAsIHJhdGhlciB0aGFuIHJlY3Vyc2l2ZWx5LgotCi0gICBUbyBhY2NvbW1v ZGF0ZSBjb2V4aXN0ZW5jZSBvZiBkaWZmZXJlbnQga2luZHMgb2YgdmFyaWFibGVzIGFzIHdlbGwg YXMKLSAgICJlc2NhcGUgc2VxdWVuY2VzIiBmb3IgcmVwcmVzZW50aW5nIGNvbnRyb2wgYW5kIDgt Yml0IGNoYXJhY3RlcnMsIHRoZQotICAgc3ludGF4IGZvciB2YXJpYWJsZSBuYW1lcyB3YXMgZXh0 ZW5kZWQgdG8gaW5jbHVkZSB0aHJlZSBlbGVtZW50czogdGhlCi0gICBsZWFkaW5nIGJhY2tzbGFz aCwgdGhlbiBhIHNpbmdsZSBjaGFyYWN0ZXIgaW5kaWNhdGluZyB0aGUgdHlwZSBvZgotICAgdmFy aWFibGUsIGFuZCB0aGVuIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBpbiBhIGZvcm1hdCBjb3Jy ZXNwb25kaW5nCi0gICB0byB0aGUgdHlwZSBkZXNpZ25hdG9yLCBhcyBzaG93biBpbiB0aGlzIHNv bWV3aGF0IHNpbXBsaWZpZWQgdGFibGU6Ci0KLSAgIENBUFRJT046IFRhYmxlIDEuIFZhcmlhYmxl LW5hbWUgU3ludGF4IGluIEtlcm1pdAotCi0gICBOb3RhdGlvbiBNZWFuaW5nCi0gICBcMDAwIC0g XDI1NSA4LWJpdCBjaGFyYWN0ZXIgY29uc3RhbnQgKGRlY2ltYWwpCi0gICBcZDAwMCAtIFxkMjU1 IEFsdGVybmF0aXZlIG5vdGF0aW9uIGZvciA4LWJpdCBjaGFyYWN0ZXIgKGJ5dGUpIGNvbnN0YW50 Ci0gICAoZGVjaW1hbCkKLSAgIFxvMDAwIC0gXG8zNzcgOC1iaXQgY2hhcmFjdGVyIGNvbnN0YW50 IChvY3RhbCkKLSAgIFx4MDAgLSBceGZmIDgtYml0IGNoYXJhY3RlciBjb25zdGFudCAoaGV4YWRl Y2ltYWwpCi0gICBcJWEgLSBcJXogU2NhbGFyIHZhcmlhYmxlLCBldmFsdWF0ZWQgcmVjdXJzaXZl bHkuCi0gICBcJTAgLSBcJTkgTWFjcm8gYXJndW1lbnQsIHNjYWxhciwgZXZhbHVhdGVkIHJlY3Vy c2l2ZWx5LgotICAgXCZhIC0gXCUmIEFycmF5IG5hbWUKLSAgIFwmYVt4XSBBcnJheSByZWZlcmVu Y2UsIGV2YWx1YXRlZCByZWN1cnNpdmVseSAoeCBpcyBhbnkgY29uc3RhbnQgb3IKLSAgIHZhcmlh YmxlKQotICAgXHYobmFtZSkgQnVpbHQtaW4gc2NhbGFyIHZhcmlhYmxlLCBldmFsdWF0ZWQgb25l IGxldmVsIGRlZXAuCi0gICBcbShuYW1lKSBVc2VyLWRlZmluZWQgc2NhbGFyIHZhcmlhYmxlLCBl dmFsdWF0ZWQgb25lIGxldmVsIGRlZXAuCi0gICBcJChuYW1lKSBBbiBlbnZpcm9ubWVudCB2YXJp YWJsZSwgZXZhbHVhdGVkIG9uZSBsZXZlbCBkZWVwLgotICAgXHMobmFtZVtuOm1dKSBDb21wYWN0 IHN1YnN0cmluZyBub3RhdGlvbiwgZXZhbHVhdGVkIG9uZSBsZXZlbCBkZWVwLgotICAgXGZuYW1l KGFyZ3MuLi4pIEJ1aWx0LWluIGZ1bmN0aW9uIHdpdGggemVybyBvciBtb3JlIGFyZ3VtZW50cy4K LSAgIFxcIExpdGVyYWwgYmFja3NsYXNoCi0gICBcTiBPVVRQVVQgY29tbWFuZCBvbmx5OiBOVUws IEFTQ0lJIDAKLSAgIFxCIE9VVFBVVCBjb21tYW5kIG9ubHk6IEJSRUFLICgyNTBtcywgZm9yIHNl cmlhbCBjb25uZWN0aW9ucykKLSAgIFxMIE9VVFBVVCBjb21tYW5kIG9ubHk6IExvbmcgQlJFQUsg KDEuNXNlYywgZGl0dG8pCi0KLSAgIFZhcmlhYmxlIG5hbWVzIGluIEtlcm1pdCBhcmUgY2FzZS1p bmRlcGVuZGVudC4gVGhlIHNpbXBsaWZpY2F0aW9ucyBpbgotICAgdGhlIHRhYmxlIGFyZSB0aGF0 IHRoZSBub3RhdGlvbiBmb3IgZGVjaW1hbCBhbmQgb2N0YWwgYnl0ZXMgY2FuIGhhdmUKLSAgIGZy b20gb25lIHRvIHRocmVlIGRpZ2l0cywgYW5kIGNhbiBpbmNsdWRlIGJyYWNlcyB0byBzZXBhcmF0 ZSB0aGVtIGZyb20KLSAgIHRleHQgZGlnaXRzLCBlLmcuIFw3LCBcezEyM30sIFxvezUwfS4gSGV4 IGJ5dGVzIHRvbywgZXhjZXB0IHRoZXkgbXVzdAotICAgYWx3YXlzIGhhdmUgZXhhY3RseSB0d28g aGV4IGRpZ2l0cywgMC05YS1mLiBBcnJheSBpbmRpY2VzIG11c3QgYmUsIG9yCi0gICBtdXN0IGV2 YWx1YXRlIHRvLCBudW1iZXJzIChmbG9hdGluZyBwb2ludCBudW1iZXJzIGFyZSB0cnVuY2F0ZWQp LgotICAgQXNzb2NpYXRpdmUgYXJyYXlzIGFyZSBhbHNvIGF2YWlsYWJsZSAoZHluYW1pYyBhcnJh eXMgd2l0aCBhcmJpdHJhcnkKLSAgIHRleHQgYXMgc3Vic2NyaXB0KSwgYnV0IHRoZXkgYXJlIHJl YWxseSBqdXN0IGEgdmFyaWF0aW9uIG9uIFxtKCkKLSAgIHZhcmlhYmxlcyAocmVhZCBhYm91dCBh c3NvY2lhdGl2ZSBhcnJheXMgWzYzXWhlcmUpLiBBbHNvLCB0aGVyZSBhcmUKLSAgIHNvbWUgYWx0 ZXJuYXRpdmUgbm90YXRpb25zIGZvciBjb21wYWN0IHN1YnN0cmluZyBub3RhdGlvbi4KLQotICAg V2UgZGlkbid0IHdhbnQgdG8gaGF2ZSBsb3RzIG9mICJkaXN0aW5ndWlzaGVkIiBjaGFyYWN0ZXJz LCBhcyB0aGUgVU5JWAotICAgc2hlbGwgZG9lczsgb25lIGlzIGVub3VnaCwgY2xhcml0eSBvdmVy IGJyZXZpdHkuIEFsdGhvdWdoIHRoZSBub3RhdGlvbgotICAgY2FuIGJlIGEgYml0IGN1bWJlcnNv bWUsIHdlIGNhbiB1c2UgdGhlIFxtKG5hbWUpIGZvcm0gdG8gY2lyY3VtdmVudCB0aGUKLSAgIG92 ZXJldmFsdWF0aW9uIGluIG1vc3QgY29udGV4dHMuIEJ1dCBtYWNybyBhcmd1bWVudHMgYXJlIGFs d2F5cwotICAgYXNzaWduZWQgdG8gdGhlIFwlMC05IHZhcmlhYmxlcywgYW5kIHRodXMgYWx3YXlz IGV2YWx1YXRlZCByZWN1cnNpdmVseSwKLSAgIG1ha2luZyBpdCBkaWZmaWN1bHQgYW5kIGNvbmZ1 c2luZyB0byBwYXNzIChlLmcuKSBXaW5kb3dzIHBhdGhuYW1lcyBhcwotICAgYXJndW1lbnRzIHRv IG1hY3Jvcy4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYXJyYXkgZWxlbWVudHMsIGVzcGVjaWFsbHkg aW4KLSAgIGNvbnRleHRzIHdoZXJlIHRoZXkgYXJlIHVzZWQgdG8gcmV0dXJuIHJlc3VsdHMgZnJv bSBidWlsdC1pbiBmdW5jdGlvbnMKLSAgIChmb3IgZXhhbXBsZSwgXGZzcGxpdCgpIHVzZWQgdG8g cmV0dXJuIHRoZSBlbGVtZW50cyBvZiBhCi0gICBbNjRdY29tbWEtc2VwYXJhdGVkIHZhbHVlIGxp c3QgaWYgYW55IG9mIHRoZSB2YWx1ZXMgY29udGFpbmVkCi0gICBiYWNrc2xhc2hlcykuIEFuIGV2 ZW4gd29yc2Ugc2NlbmFyaW8gaXMgd2hlbiBtYWNybyBhcmd1bWVudHMgYXJlIHBhc3NlZAotICAg ZnJvbSBvbmUgbWFjcm8gdG8gYW5vdGhlcjsgZm9yIHNvbWUgZ3JhcGhpYyBpbGx1c3RyYXRpb25z IHNlZQotICAgWzY1XVRhbWluZyB0aGUgV2lsZCBCYWNrc2xhc2ggLSBQYXJ0IERldXggZnJvbSB0 aGUgWzY2XUMtS2VybWl0IDcuMAotICAgVXBkYXRlIE5vdGVzLgotCi0gICBXZSBjYW4ndCBqdXN0 IGNoYW5nZSBob3cgdmFyaWFibGVzIGFyZSBldmFsdWF0ZWQgYmVjYXVzZSB0aGF0IHdvdWxkCi0g ICBicmVhayBleGlzdGluZyBzY3JpcHRzLiBCdXQgd2UgY2FuIGFsd2F5cyBhZGQgWWV0IEFub3Ro ZXIgU0VUIENvbW1hbmQ6Ci0KLSAgICAgU0VUIENPTU1BTkQgVkFSSUFCTEUtRVZBTFVBVElPTiB7 IFJFQ1VSU0lWRSwgU0lNUExFIH0KLQotICAgVGhpcyBhcHBsaWVzIG9ubHkgdG8gXCVhLXogYW5k IFwlMC05IHZhcmlhYmxlcyBhbmQgdG8gXCZhLXpbXSBhcnJheXMKLSAgIChzaW5jZSBhbGwgb3Ro ZXIga2luZHMgb2YgdmFyaWFibGVzIGFyZSBldmFsdWF0ZWQgb25seSBvbmUgbGV2ZWwgZGVlcCku Ci0gICBUaGUgZGVmYXVsdCwgb2YgY291cnNlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHks IGlzIFJFQ1VSU0lWRS4KLSAgIFNJTVBMRSBmb3JjZXMgdGhlIGV2YWx1YXRpb24gb2YgdGhlc2Ug dmFyaWFibGVzIHRvIHJldHVybiB0aGVpciBsaXRlcmFsCi0gICBjb250ZW50cywgd2l0aG91dCBm dXJ0aGVyIGV2YWx1YXRpb246Ci0KLSAgICAgKiBBbiBleGNlcHRpb24gaXMgbWFkZSBpbiB0aGUg Y2FzZSBvZiBhcnJheSBzdWJzY3JpcHRzLCBiZWNhdXNlCi0gICAgICAgY2hhbmdpbmcgaG93IHRo ZXkgYXJlIGV2YWx1YXRlZCBjb3VsZCBicmVhayBhIGxvdCBvZiBzY3JpcHRzLCBhbmQKLSAgICAg ICBhbnl3YXkgdGhlcmUgc2hvdWxkIG5ldmVyIGJlIGFueSBoYXJtIGluIGV2YWx1YXRpbmcgdGhl bQotICAgICAgIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlaXIgZmluYWwgdmFsdWUgaXMgYWx3YXlz IChvciBzaG91bGQgYmUpCi0gICAgICAgbnVtZXJpYywgbm90IHNvbWUgc3RyaW5nIHRoYXQgbWln aHQgY29udGFpbiBiYWNrc2xhc2hlcy4KLSAgICAgKiBUaGUgVkFSSUFCTEUtRVZBTFVBVElPTiBz ZXR0aW5nIGlzIG9uIHRoZSBjb21tYW5kIHN0YWNrLiBUaHVzIHlvdQotICAgICAgIGNhbiBnaXZl IHRoaXMgY29tbWFuZCBpbiBhIG1hY3JvLCBjb21tYW5kIGZpbGUsIG9yIHVzZXItZGVmaW5lZAot ICAgICAgIGZ1bmN0aW9uIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBjYWxsaW5nIGVudmlyb25tZW50 LgotICAgICAqIFRoZSBuZXcgXGZyZWN1cnNlKCkgZnVuY3Rpb24gZm9yY2VzIHJlY3Vyc2l2ZSBl dmFsdWF0aW9uIG9mIGl0cwotICAgICAgIGFyZ3VtZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIFZBUklB QkxFLUVWQUxVQVRJT04gc2V0dGluZy4gVGhlCi0gICAgICAgYXJndW1lbnQgY2FuIGJlIGFueSBz dHJpbmcgKG9yIG5vdGhpbmcgYXQgYWxsKTsgYWxsIHRoZSB2YXJpYWJsZXMKLSAgICAgICBpbiB0 aGUgc3RyaW5nLCBldmVuIFxtKCkgb25lcywgYXJlIGV2YWx1YXRlZCByZWN1cnNpdmVseToKLQot ZGVmIFwlYSAxIFwlYiAzCi1kZWYgXCViIDIKLWRlZiB4eCBlYXN5IGFzIFwlYQotc2hvdyBtYWMg eHgKLWVjaG8gXGZyZWN1cnNlKFxtKHh4KSkKLWVhc3kgYXMgMSAyIDMKLWVjaG8gXGZyZWN1cnNl KGl0J3MgYXMgZWFzeSBhcyBcbSh4eCkpCi1pdCdzIGFzIGVhc3kgYXMgZWFzeSBhcyAxIDIgMwot Ci0gICAgICogVGhlIG5ldyBcdih2YXJldmFsKSBidWlsdC1pbiB2YXJpYWJsZSBjb250YWlucyB0 aGUgY3VycmVudCBzZXR0aW5nCi0gICAgICAgKHJlY3Vyc2l2ZSBvciBzaW1wbGUpIGF0IHRoZSBj dXJyZW50IGNvbW1hbmQtc3RhY2sgbGV2ZWwuCi0KLSAgIEhlcmUncyBhIHNob3J0IHNjcmlwdCBm b3IgaWxsdXN0cmF0aW9uOgotCi1kZWZpbmUgcGF0aCBjOlx1c2Vyc1xmZGNcc29tZWZpbGUudHh0 Ci1kZWZpbmUgdGVzdDEgeyAgICAgICAgIyBOb3JtYWwgcmVjdXJzaXZlIGFyZ3VtZW50IGV2YWx1 YXRpb24KLSAgZWNobyBcJTA6IGFyZz1cJTEKLX0KLWRlZmluZSB0ZXN0MiB7ICAgICAgICAjIFNp bXBsZSBhcmd1bWVudCBldmFsdWF0aW9uCi0gIHNldCB2YXIgc2ltcGxlCi0gIGVjaG8gXCUwOiBh cmc9XCUxCi19Ci10ZXN0MSBcbShwYXRoKQotdGVzdDIgXG0ocGF0aCkKLWV4aXQKLQotICAgQW5k IGhlcmUncyB0aGUgcmVzdWx0OgotCi0/PEVSUk9SOk5PX1NVQ0hfRlVOQ1RJT046XGZkY1xzb21l ZmlsZS50eHQoKT4KLXRlc3QyOiBhcmc9YzpcdXNlcnNcZmRjXHNvbWVmaWxlLnR4dAotCi0gICBU aGUgZmlyc3QgbGluZSBtaWdodCBzZWVtIHN1cnByaXNpbmcsIGJ1dCB1bmRlciB0aGUgbm9ybWFs IHJ1bGVzIChzZWUKLSAgIHRhYmxlIGFib3ZlKSBcZiBpbmRpY2F0ZXMgYSBmdW5jdGlvbiBjYWxs LCB3aXRoIHRoZSBsZXR0ZXJzIGZvbGxvd2luZwotICAgdGhlICdmJyBiZWluZyB0aGUgbmFtZSBv ZiB0aGUgZnVuY3Rpb24uIEJ1dCB0aGVyZSBpcyBubyBmdW5jdGlvbiBieQotICAgdGhhdCBuYW1l Li4uIGFuZCBpZiB0aGVyZSB3ZXJlLCB5b3UgcHJvYmFibHkgZGlkbid0IGludGVuZCB0byBjYWxs IGl0IQotCi0gICBTRVQgQ09NTUFORCBWQVJJQUJMRS1FVkFMVUFUSU9OIFNJTVBMRSBoYXMgbm8g ZWZmZWN0IG9uIGNvbnN0YW50cywgb25seQotICAgb24gdmFyaWFibGVzLiBOb3RlIGhvdyBcbShw YXRoKSBpcyBkZWZpbmVkLiBUaGUgREVGSU5FIGNvbW1hbmQgYXNzaWducwotICAgdGhlIGxpdGVy YWwgdmFsdWUgb2YgaXRzIGFyZ3VtZW50IHRvIHRoZSBuYW1lZCB2YXJpYWJsZSAoc2VlIFRhYmxl IDMKLSAgIGJlbG93KSwgdGh1cyBpbiB0aGlzIGNhc2Ugbm8gc3BlY2lhbCBzeW50YXggaXMgbmVl ZGVkLiBCdXQgaW4gb3RoZXIKLSAgIGNvbnRleHRzLCB5b3UgbXVzdCBkb3VibGUgdGhlIGJhY2tz bGFzaGVzIG9yIHVzZSB0aGUgXGZsaXRlcmFsKCkKLSAgIGZ1bmN0aW9uIHRvIHVzZSBsaXRlcmFs IGJhY2tzbGFzaGVzIGluIGRhdGE6Ci0KLXRlc3QyIGM6XFx1c2Vyc1xcZmRjXFxzb21lZmlsZS50 eHQKLXRlc3QyIFxmbGl0ZXJhbChjOlx1c2Vyc1xmZGNcc29tZWZpbGUudHh0KQotCi0gICBDLUtl cm1pdCA5LjAgYWRkcyBhIG5ldyBub3RhdGlvbiBmb3IgXGZsaXRlcmFsKCkgd2hpY2ggYWxzbyBo YXMgY2VydGFpbgotICAgYWR2YW50YWdlcyBvdmVyIGl0OiBccShzdHJpbmcpOgotCi10ZXN0MiBc cShjOlx1c2Vyc1xmZGNcc29tZWZpbGUudHh0KQotCi0gICBTaW5jZSBcZmxpdGVyYWwoKSBpcyBh IGZ1bmN0aW9uLCBpdHMgYXJndW1lbnQgbGlzdCAodGhlIHRleHQgd2l0aGluCi0gICBwYXJlbnRo ZXNlcykgaGFzIHNwZWNpYWwgc3ludGF4IG9mIGl0cyBvd24sIGluIHdoaWNoIGNvbW1hcyBhbmQg YnJhY2VzCi0gICBhcmUgdHJlYXRlZCBzcGVjaWFsbHkgYW5kIGludHJvZHVjZSBhbm90aGVyIHNl dCBvZiBxdW90aW5nIHByb2JsZW1zLgotICAgXHEoc3RyaW5nKSBkb2Vzbid0IGhhdmUgdGhlc2Ug cHJvYmxlbXMuIFRoZSBvbmx5IGNvbnNpZGVyYXRpb24gaXMgdGhhdAotICAgcGFyZW50aGVzZXMg bXVzdCBiZSBiYWxhbmNlZCBvciBlbHNlIHF1b3RlZCAocHJlY2VkZWQgYnkgYmFja3NsYXNoKSwg b3IKLSAgIHJlcHJlc2VudGVkIGFzIG51bWVyaWMgY2hhcmFjdGVyIGVudGl0aWVzIChsZWZ0IHBh cmVuID0gXDQwLCAocmlnaHQKLSAgIHBhcmVuID0gXDQxKS4KLQotICAgT3IgZWxzZSBob2xkIHRo ZSB2YWx1ZSBpbiBhIHNpbXBsZSB2YXJpYWJsZSBhcyB3ZSBkaWQgd2l0aCBcXG0ocGF0aCkKLSAg IGFib3ZlLgotCi0gICBTRVQgQ09NTUFORCBWQVJJQUJMRS1FVkFMVUFUSU9OIFNJTVBMRSBpcyBh IGJpZyBjaGFuZ2UgYW5kIG1pZ2h0IGhhdmUKLSAgIHJlcGVyY3Vzc2lvbnMgdGhhdCBkaWRuJ3Qg c2hvdyB1cCBpbiB0aGUgaW5pdGlhbCB0ZXN0czsgYSBsb3QgbW9yZQotICAgdGVzdGluZyBpcyBu ZWVkZWQuCi0KLSAgIE9uIHRoZSB0b3BpYyBvZiB2YXJpYWJsZXMsIGxldCdzIHN1bW1hcml6ZSBp biBvbmUgcGxhY2UgdGhlIHdheXMgaW4KLSAgIHdoaWNoIHZhbHVlcyBjYW4gYmUgZXhwbGljaXRs eSBhc3NpZ25lZCB0byB2YXJpYWJsZXMuIFRoZXJlIGlzIG5vdGhpbmcKLSAgIG5ldyBoZXJlIGV4 Y2VwdCB0aGUgdGFibGUgaXRzZWxmOgotCi0gICBDQVBUSU9OOiBUYWJsZSAyLiBWYXJpYWJsZSBB c3NpZ25tZW50IGluIEtlcm1pdAotCi0gICBDb21tYW5kIFNob3J0aGFuZCBFeHBsYW5hdGlvbgot ICAgREVGSU5FIG5hbWUgdmFsdWUgLm5hbWUgPSB2YWx1ZSBUaGUgbGl0ZXJhbCB2YWx1ZSBiZWNv bWVzIHRoZSBjb250ZW50cwotICAgb2YgdGhlIG5hbWVkIHZhcmlhYmxlOyB2YXJpYWJsZXMgbmFt ZXMgaW4gdGhlIHZhbHVlIGFyZSBjb3BpZWQgd2l0aG91dAotICAgZXZhbHVhdGlvbi4gVGhpcyBj b21tYW5kIGlzIGZvciBkZWZpbmluZyBtYWNyb3MgdGhhdCB0YWtlIHBhcmFtZXRlcnMsCi0gICBh cyB3ZWxsIGFzIGZvciBkZWZpbmluZyBzaW1wbGUgdmFyaWFibGVzLCBlc3BlY2lhbGx5IGlmIHRo ZSB2YWx1ZXMKLSAgIGNvbnRhaW4gYmFja3NsYXNoZXMuCi0gICBfREVGSU5FIG5hbWUgdmFsdWUg ICBMaWtlIERFRklORSBidXQgdGhlIG5hbWUgaXMgZXZhbHVhdGVkIGJlZm9yZSB1c2UuCi0gICBB U1NJR04gbmFtZSB2YWx1ZSAubmFtZSA6PSB2YWx1ZSBUaGUgdmFsdWUgaXMgZXZhbHVhdGVkIGFu ZCB0aGUgcmVzdWx0Ci0gICBiZWNvbWVzIHRoZSBjb250ZW50cyBvZiB0aGUgbmFtZWQgdmFyaWFi bGUuCi0gICBfQVNTSUdOIG5hbWUgdmFsdWUgICBMaWtlIEFTU0lHTiBidXQgdGhlIG5hbWUgaXMg ZXZhbHVhdGVkIGJlZm9yZSB1c2UuCi0gICBFVkFMVUFURSBuYW1lIGV4cHJlc3Npb24gLm5hbWUg Ojo9IHZhbHVlIFRoZSBleHByZXNzaW9uIChpbiByZWd1bGFyCi0gICBhbGdlYnJhaWMgbm90YXRp b24pIGlzIGV2YWx1YXRlZCBhcml0aG1ldGljYWxseSBhbmQgdGhlIHJlc3VsdCBiZWNvbWVzCi0g ICB0aGUgY29udGVudHMgb2YgdGhlIG5hbWVkIHZhcmlhYmxlLiBJZiB0aGUgZXhwcmVzc2lvbiBj b250YWlucyBhbnkKLSAgIHZhcmlhYmxlcyB0aGV5IGFyZSBldmFsdWF0ZWQgZmlyc3QuCi0gICBf RVZBTFVBVEUgbmFtZSBleHByZXNzaW9uICAgTGlrZSBFVkFMVUFURSBidXQgdGhlIG5hbWUgaXMg ZXZhbHVhdGVkCi0gICBiZWZvcmUgdXNlLgotICAgSU5DUkVNRU5UIG5hbWUgZXhwcmVzc2lvbiAg IEV2YWx1YXRlcyB0aGUgdmFyaWFibGVzIGluIHRoZSBleHByZXNzaW9uLAotICAgdGhlbiBldmFs dWF0ZXMgdGhlIGV4cHJlc3Npb24gYXJpdGhtZXRpY2FsbHksIGFuZCB0aGVuIGFkZHMgdGhlIHZh bHVlCi0gICB0byB0aGUgY29udGVudHMgb2YgdGhlIG5hbWVkIHZhcmlhYmxlLCB3aGljaCBtdXN0 IGJlIGEgbnVtYmVyIG9yIGFuCi0gICBhbGdlYnJhaWMgZXhwcmVzc2lvbi4gSWYgdGhlIGV4cHJl c3Npb24gaXMgZW1wdHksIGEgdmFsdWUgb2YgMSBpcyB1c2VkLgotICAgX0lOQ1JFTUVOVCBuYW1l IGV4cHJlc3Npb24gICBMaWtlIElOQ1JFTUVOVCBidXQgdGhlIG5hbWUgaXMgZXZhbHVhdGVkCi0g ICBiZWZvcmUgdXNlLgotICAgREVDUkVNRU5UIG5hbWUgZXhwcmVzc2lvbiAgIEV2YWx1YXRlcyB0 aGUgdmFyaWFibGVzIGluIHRoZSBleHByZXNzaW9uLAotICAgdGhlbiBldmFsdWF0ZXMgdGhlIGV4 cHJlc3Npb24gYXJpdGhtZXRpY2FsbHksIGFuZCB0aGVuIHN1YnRyYWN0cyB0aGUKLSAgIHZhbHVl IGZyb20gdGhlIGNvbnRlbnRzIG9mIHRoZSBuYW1lZCB2YXJpYWJsZSwgd2hpY2ggbXVzdCBiZSBh IG51bWJlcgotICAgb3IgYW4gYWxnZWJyYWljIGV4cHJlc3Npb24uIElmIHRoZSBleHByZXNzaW9u IGlzIGVtcHR5LCBhIHZhbHVlIG9mIDEgaXMKLSAgIHVzZWQuCi0gICBfREVDUkVNRU5UIG5hbWUg ZXhwcmVzc2lvbiAgIExpa2UgREVDUkVNRU5UIGJ1dCB0aGUgbmFtZSBpcyBldmFsdWF0ZWQKLSAg IGJlZm9yZSB1c2UuCi0gICBERUNMQVJFIG5hbWUgPSBsaXN0ICAgQW4gYXJyYXkgZGVjbGFyYXRp b24gY2FuIGluY2x1ZGUgYW4gaW5pdGlhbGl6ZXIKLSAgIGxpc3Q7IGl0ZW1zIGluIHRoZSBsaXN0 IGFyZSBldmFsdWF0ZWQgYmVmb3JlIGFzc2lnbm1lbnQuIFRoaXMgY2FuIGJlCi0gICBkZWZlYXRl ZCBieSBkb3VibGluZyBhbnkgYmFja3NsYXNoZXMgb3IgZW5jbG9zaW5nIGluZGl2aWR1YWwgYXJn dW1lbnRzCi0gICBpbiBcZmxpdGVyYWwoKS4KLSAgIERPIG5hbWUgYXJndW1lbnRzIG5hbWUgYXJn dW1lbnRzIFdoZW4gaW52b2tpbmcgYSBtYWNybyB3aXRoIGEgRE8KLSAgIGNvbW1hbmQgKG9yIGFu IGltcGxpZWQgb25lKSwgdGhlIGFyZ3VtZW50cyBhcmUgZXZhbHVhdGVkLCB0aGVuIGFzc2lnbmVk Ci0gICB0byBcJTEsIFwlMiwgZXRjLCBhbmQgdGhlIG1hY3JvJ3MgbmFtZSB0byBcJTAuCi0gICAo U0VUUSBuYW1lIHZhbHVlKSAgIEtlcm1pdCBhbHNvIGluY2x1ZGVzIGEgbWluaS1bNjddTElTUCBp bnRlcnByZXRlcgotCi0gICBWYXJpYWJsZXMgYXJlIGV2YWx1YXRlZCBhdXRvbWF0aWNhbGx5IGlu IEtlcm1pdCBjb21tYW5kcyBzaW1wbHkgYnkKLSAgIHJlZmVyZW5jaW5nIHRoZW0sIGFjY29yZGlu ZyB0byBydWxlcyBnaXZlbiBpbiBUYWJsZSAxLiBUaGUgZm9sbG93aW5nCi0gICBmdW5jdGlvbnMg Y2FuIGJlIHVzZWQgdG8gY2hhbmdlIGhvdyBhIGEgcGFydGljdWxhciB2YXJpYWJsZSBpcwotICAg ZXZhbHVhdGVkOgotCi0gICBDQVBUSU9OOiBUYWJsZSAzLiBLZXJtaXQgRnVuY3Rpb25zIGZvciBF dmFsdWF0aW5nIFZhcmlhYmxlcwotCi0gICBGdW5jdGlvbiBBcmd1bWVudCBEZXNjcmlwdGlvbgot ICAgXGZjb250ZW50cygpIFwleCBvciBcJnhbeV0gRXZhbHVhdGVzIHRoZSB2YXJpYWJsZSBvciBh cnJheSBlbGVtZW50Ci0gICAod2hpY2ggbm9ybWFsbHkgd291bGQgYmUgZXZhbHVhdGVkIHJlY3Vy c2l2ZWx5KSBvbmUgbGV2ZWwgZGVlcC4KLSAgIFxmZGVmaW5pdGlvbigpIG5hbWUgSWYgdGhlIGFy Z3VtZW50IGlzIGEgXCV4IHZhcmlhYmxlIG9yIGFuIGFycmF5Ci0gICBlbGVtZW50LCBpdCBpcyBl dmFsdWF0ZWQgdG8gZ2V0IHRoZSBuYW1lOyBvdGhlcndpc2UgdGhlIGFyZ3VtZW50IGlzIHRoZQot ICAgbmFtZS4gSXRzIGRlZmluaXRpb24gaXMgcmV0dXJuZWQgd2l0aCBubyByZWN1cnNpb24uCi0g ICBcbSgpIG5hbWUgRXF1aXZhbGVudCB0byBcZmRlZmluaXRpb24oKS4KLSAgIFxmcmVjdXJzZSgp IFxtKG5hbWUpIEZvcmNlcyByZWN1cnNpdmUgZXZhbHVhdGlvbiBvZiBhIG1hY3JvIGRlZmluaXRp b24KLSAgIChhLmsuYS4gbG9uZyB2YXJpYWJsZSBuYW1lKS4gTk9URTogXGZyZWN1cnNlKCkgY2Fu IG9wZXJhdGUgb24gYW55IGtpbmQKLSAgIG9mIHZhcmlhYmxlIGFzIHdlbGwgYXMgb24gYW55IHN0 cmluZyBjb250YWluaW5nIGFueSBtaXh0dXJlIG9mCi0gICB2YXJpYWJsZXMuCi0KLUMtS2VybWl0 J3MgUkVOQU1FIENvbW1hbmQKLQotICAgQy1LZXJtaXQncyBSRU5BTUUgY29tbWFuZCwgd2hpY2gg aXMgdXNlZCBmb3IgY2hhbmdpbmcgdGhlIG5hbWVzIG9mCi0gICBsb2NhbCBmaWxlcyBvciBmb3Ig bW92aW5nIGZpbGVzIGxvY2FsbHksIGhhcyB0d28gYmFzaWMgZm9ybXM6Ci0KLSAgIFJFTkFNRSBb IG9wdGlvbmFsLXN3aXRjaGVzIF0gb2xkZmlsZW5hbWUgbmV3ZmlsZW5hbWUKLSAgICAgICAgICBU aGlzIGZvcm0gbGV0cyB5b3UgY2hhbmdlIHRoZSBuYW1lIG9mIGEgc2luZ2xlIGZpbGUgZnJvbQot ICAgICAgICAgIG9sZGZpbGVuYW1lIHRvIG5ld2ZpbGVuYW1lLiBFeGFtcGxlOgotICAgICAgICAg IHJlbmFtZSB0aGlzbW9udGgubG9nIGxhc3Rtb250aC5sb2cKLQotICAgUkVOQU1FIFsgb3B0aW9u YWwtc3dpdGNoZXMgXSBmaWxlc3BlYyBkaXJlY3RvcnluYW1lCi0gICAgICAgICAgVGhpcyBmb3Jt IGxldHMgeW91IG1vdmUgKHdpdGhvdXQgcmVuYW1pbmcpIG9uZSBvciBtb3JlIGZpbGVzCi0gICAg ICAgICAgKGFsbCB0aGUgZmlsZXMgdGhhdCBtYXRjaCB0aGUgZmlsZXNwZWMsIHdoaWNoIG1heSBj b250YWluCi0gICAgICAgICAgd2lsZGNhcmQgY2hhcmFjdGVycyBzdWNoIGFzICIqIikgdG8gdGhl IGdpdmVuIGRpcmVjdG9yeS4KLSAgICAgICAgICBFeGFtcGxlOgotICAgICAgICAgIHJlbmFtZSAq LnR4dCB+L3RleHRmaWxlcy8KLQotICAgVHJhZGl0aW9uYWxseSwgdGhlIG9wdGlvbmFsIHN3aXRj aGVzIGhhdmUgYmVlbjoKLQotICAgUkVOQU1FIC9MSVNUIG9sZG5hbWUgbmV3bmFtZQotICAgICAg ICAgIERpc3BsYXkgdGhlIG9sZCBhbmQgbmV3IG5hbWUgZm9yIGVhY2ggZmlsZSB3aGlsZSByZW5h bWluZy4KLSAgICAgICAgICBTeW5vbnltczogL0xPRywgL1ZFUkJPU0UuIEV4YW1wbGU6Ci0gICAg ICAgICAgcmVuYW1lIC9saXN0ICoudHh0IH4vdGV4dGZpbGVzLwotCi0gICBSRU5BTUUgL05PTElT VCBvbGRuYW1lIG5ld25hbWUKLSAgICAgICAgICBEb24ndCBkaXNwbGF5IHRoZSBvbGQgYW5kIG5l dyBuYW1lIGZvciBlYWNoIGZpbGUgd2hpbGUgcmVuYW1pbmcuCi0gICAgICAgICAgVGhpcyBpcyB0 aGUgZGVmYXVsdCBiZWhhdmlvci4gU3lub255bXM6IC9OT0xPRywgL1FVSUVULiBFeGFtcGxlOgot ICAgICAgICAgIHJlbmFtZSAvbm9saXN0ICoudHh0IH4vdGV4dGZpbGVzLwotCi0gICBSZW1pbmRl cjogRXZlcnkgc3dpdGNoIHN0YXJ0cyB3aXRoIGEgc2xhc2ggKC8pIGFuZCBtdXN0IGJlIHByZWNl ZGVkIGJ5Ci0gICBhIHNwYWNlLgotCi1OZXcgUkVOQU1FIEZlYXR1cmVzIGZvciBDLUtlcm1pdCA5 LjAKLQotICAgQSBzZXJpZXMgb2YgbmV3IG9wdGlvbnMgKHN3aXRjaGVzKSBoYXZlIGJlZW4gYWRk ZWQgdG8gbGV0IHlvdSBjaGFuZ2UKLSAgIHRoZSBuYW1lcyBvZiBtdWx0aXBsZSBmaWxlcyBhdCBv bmNlIGJ5IGNhc2UgY29udmVyc2lvbiwgc3RyaW5nCi0gICBzdWJzdGl0dXRpb24sIG9yIGNoYXJh Y3Rlci1zZXQgY29udmVyc2lvbiwgYW5kIG9wdGlvbmFsbHkgYWxzbyBtb3ZlCi0gICB0aGVtIHRv IGEgZGlmZmVyZW50IGRpcmVjdG9yeToKLQotICAgICAvTE9XRVI6ICAgICAgQ29udmVydCB0aGUg ZmlsZW5hbWUgdG8gbG93ZXJjYXNlCi0gICAgIC9VUFBFUjogICAgICBDb252ZXJ0IHRoZSBmaWxl bmFtZSB0byB1cHBlcmNhc2UKLSAgICAgL0NPTlZFUlQ6ICAgIENoYW5nZSB0aGUgZmlsZW5hbWUn cyBjaGFyYWN0ZXIgZW5jb2RpbmcKLSAgICAgL1JFUExBQ0U6ICAgIERvIHN0cmluZyBzdWJzdGl0 dXRpb25zIG9uIHRoZSBmaWxlbmFtZQotCi0gICBJZiB0aGUgc291cmNlLWZpbGUgc3BlY2lmaWNh dGlvbiBpbmNsdWRlcyBhIHBhdGggb3IgZGlyZWN0b3J5LCBhbnkKLSAgIGNoYW5nZXMgYXJlIGFw cGxpZWQgdG8gdGhlIGZpbGVuYW1lcyBvbmx5LCBub3QgdG8gdGhlIGRpcmVjdG9yeSBvciBwYXRo Ci0gICBzcGVjaWZpY2F0aW9uLgotCi0gICBTaW5jZSBuYW1lIGNoYW5nZXMsIHdoZW4gYXBwbGll ZCB0byBtYW55IGZpbGVzIGF0IG9uY2UsIGNhbiBoYXZlCi0gICBjb25zZXF1ZW5jZXMgdGhhdCBh cmUgbm90IGVhc2lseSB1bmRvbmUsIHRoZXJlIGFyZSBhbHNvIHNvbWUgbmV3Ci0gICBjb250cm9s cywgc2FmZWd1YXJkcywgYW5kIGNvbnZlbmllbmNlczoKLQotICAgUkVOQU1FIC9TSU1VTEFURQot ICAgICAgICAgIFRoaXMgc3dpdGNoIHRlbGxzIEtlcm1pdCB0byBzaG93IHlvdSB3aGF0IHRoZSBS RU5BTUUgY29tbWFuZAotICAgICAgICAgIHdvdWxkIGRvIHdpdGhvdXQgYWN0dWFsbHkgZG9pbmcg aXQuIC9TSU1VTEFURSBpbXBsaWVzIC9MSVNULgotCi0gICBSRU5BTUUgL0NPTExJU0lPTjp7RkFJ TCxTS0lQLE9WRVJXUklURX0KLSAgICAgICAgICBUaGlzIHN3aXRjaCBnb3Zlcm5zIEtlcm1pdCdz IGJlaGF2aW9yIHdoZW4gcmVuYW1pbmcgbXVsdGlwbGUKLSAgICAgICAgICBmaWxlcywgYW5kIGFu eSBvZiB0aGUgbmFtZXMgd291bGQgY29sbGlkZSB3aXRoIHRoZSBuYW1lIG9mIGEKLSAgICAgICAg ICBmaWxlIHRoYXQgYWxyZWFkeSBleGlzdHMuIFRoZSBkZWZhdWx0LCBmb3IgY29tcGF0aWJpbGl0 eSB3aXRoCi0gICAgICAgICAgZWFybGllciByZWxlYXNlcyBvZiBDLUtlcm1pdCwgaXMgT1ZFUldS SVRFLCBpLmUuIHdyaXRlIG92ZXIgdGhlCi0gICAgICAgICAgZXhpc3RpbmcgZmlsZS4gVGhlIG90 aGVyIHR3byBwcm90ZWN0IGV4aXN0aW5nIGZpbGVzLiBTS0lQIG1lYW5zCi0gICAgICAgICAgdG8g c2tpcCAobm90IHJlbmFtZSkgdGhlIGZpbGUgdGhhdCB3b3VsZCBjYXVzZSB0aGUgY29sbGlzaW9u LAotICAgICAgICAgIGFuZCBwcm9jZWVkIHRvIHRoZSBuZXh0IGZpbGUsIGlmIGFueS4gRkFJTCBt ZWFucyB0aGF0IG5vIGZpbGVzCi0gICAgICAgICAgd2lsbCBiZSByZW5hbWVkIGlmIHRoZXJlIHdv dWxkIGJlIGFueSBjb2xsaXNpb25zOyBmb3IgdGhpcwotICAgICAgICAgIEtlcm1pdCBtYWtlcyB0 d28gcGFzc2VzLCBjaGVja2luZyBlYWNoIG5ldyBuYW1lIGl0IGNvbnN0cnVjdHMKLSAgICAgICAg ICBmb3IgZXhpc3RlbmNlIGJlZm9yZSBzdGFydGluZyB0aGUgc2Vjb25kIHBhc3MgKGhvd2V2ZXIs IHRoZXJlIGlzCi0gICAgICAgICAgbm8gZ3VhcmFudGVlIHRoYXQgaW4gdGhlIHNlY29uZCBwYXNz LCBpdCB3b24ndCBjcmVhdGUgdGhlIHNhbWUKLSAgICAgICAgICBuZXcgbmFtZSBmb3IgbW9yZSB0 aGFuIG9uZSBmaWxlOyBpbiB0aGF0IGNhc2UsIGl0IHdpbGwgc3RvcAotICAgICAgICAgIGJlZm9y ZSBleGVjdXRpbmcgdGhlIHNlY29uZCByZW5hbWUpLiBFeGFtcGxlOgotICAgICAgICAgIHJlbmFt ZSAvc2ltdWxhdGUgL2NvbGxpc2lvbjpwcm9jZWVkICogfi90bXAvCi0KLSAgIFJlbWluZGVyOiBJ biBzd2l0Y2hlcyBzdWNoIGFzIC9DT0xMSVNJT04gdGhhdCB0YWtlIGFyZ3VtZW50cwotICAgKG9w ZXJhbmRzKSwgdGhlIHN3aXRjaCBuYW1lIGFuZCBpdHMgYXJndW1lbnQocykgYXJlIHNlcGFyYXRl ZCBieSBhCi0gICBjb2xvbiAoOikgd2l0aCBubyBpbnRlcnZlbmluZyBzcGFjZXMuIEFsc28gcmVt ZW1iZXIgdGhhdCBLZXJtaXQKLSAgIGtleXdvcmRzIGNhbiBhbHdheXMgYmUgYWJicmV2aWF0ZWQg YnkgbGVhdmluZyBvZmYgY2hhcmFjdGVycyBmcm9tIHRoZQotICAgcmlnaHQsIGFzIGxvbmcgYXMg dGhlIHJlc3VsdCBpcyBzdGlsbCB1bmlxdWUgaW4gaXRzIGNvbnRleHQuIFRodXMgInJlbgotICAg L2NvbDpmIiB3b3VsZCBiZSBlcXVpdmFsZW50IHRvICJyZW5hbWUgL2NvbGxpc2lvbjpmYWlsIi4K LQotICAgWW91IGNhbiBjaGFuZ2UgdGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlcyBmb3IgdGhlIFJF TkFNRSBjb21tYW5kIHdpdGgKLSAgIHRoZSBuZXcgU0VUIFJFTkFNRSBjb21tYW5kOgotCi0gICBT RVQgUkVOQU1FIExJU1QgeyBPTiwgT0ZGIH0KLSAgICAgICAgICBUZWxscyB0aGUgUkVOQU1FIGNv bW1hbmQgd2hldGhlciB0byBsaXN0IGl0cyBhY3Rpb25zIGlmIHlvdQotICAgICAgICAgIGRvbid0 IGluY2x1ZGUgYSAvTElTVCBvciAvTk9MSVNUIG9yIGVxdWl2YWxlbnQgc3dpdGNoLgotCi0gICBT RVQgUkVOQU1FIENPTExJU0lPTiB7IEZBSUwsIE9WRVJXUklURSwgU0tJUCB9Ci0gICAgICAgICAg VGVsbHMgdGhlIFJFTkFNRSBjb21tYW5kIGhvdyB0byBoYW5kbGUgZmlsZW5hbWUgY29sbGlzaW9u cyBpbgotICAgICAgICAgIHRoZSBhYnNlbmNlIG9mIGEgL0NPTExJU0lPTiBzd2l0Y2guIFRoYXQg aXMsIGl0IHJlcGxhY2VzIHRoZQotICAgICAgICAgIGRlZmF1bHQgYWN0aW9uIG9mIE9WRVJXUklU RSB3aXRoIGFjdGlvbiBvZiB5b3VyIGNob29zaW5nLCB3aGljaAotICAgICAgICAgIGlzIHRoZW4g dXNlZCBpbiBhbnkgUkVOQU1FIGNvbW1hbmQgdGhhdCBkb2VzIG5vdCBpbmNsdWRlIGFuCi0gICAg ICAgICAgZXhwbGljaXQgL0NPTExJU0lPTiBzd2l0Y2guCi0KLSAgIFNIT1cgUkVOQU1FCi0gICAg ICAgICAgRGlzcGxheXMgdGhlIGN1cnJlbnQgU0VUIFJFTkFNRSBzZXR0aW5ncy4KLQotQ2hhbmdp bmcgdGhlIENhc2Ugb2YgRmlsZW5hbWVzCi0KLSAgIFJFTkFNRSAvVVBQRVI6e0FMTCxMT1dFUn0g ZmlsZXNwZWMgWyBkaXJlY3RvcnkgXQotICAgICAgICAgIFJFTkFNRSAvTE9XRVI6e0FMTCxVUFBF Un0gZmlsZXNwZWMgWyBkaXJlY3RvcnkgXQotICAgICAgICAgIFRoZXNlIHN3aXRjaGVzIGxldCB5 b3UgY2hhbmdlIHRoZSBhbHBoYWJldGljIGNhc2Ugb2YgbGV0dGVycyBpbgotICAgICAgICAgIGFs bCB0aGUgZmlsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIGZpbGVzcGVjLiBJZiBhIGRpcmVjdG9y eQotICAgICAgICAgIG5hbWUgaXMgZ2l2ZW4gYWZ0ZXIgdGhlIGZpbGVzcGVjLCB0aGVuIHRoZSBm aWxlcyBhcmUgYWxzbyBtb3ZlZAotICAgICAgICAgIHRvIHRoZSBnaXZlbiBkaXJlY3RvcnkuCi0K LSAgIEJ5IGRlZmF1bHQsIGFsbCBmaWxlcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBmaWxlc3BlYyBo YXZlIHRoZWlyIG5hbWVzCi0gICBjaGFuZ2VkIChpZiBuZWNlc3NhcnkpLiBUaGlzIGlzIHdoYXQg dGhlIEFMTCBhcmd1bWVudCBtZWFucywgZS5nLjoKLQotICAgICBSRU5BTUUgL0xPV0VSOkFMTCAq Ci0gICAgIFJFTkFNRSAvTE9XRVIgKgotCi0gICBZb3UgY2FuIHVzZSBlaXRoZXIgZm9ybTogUkVO QU1FIC9MT1dFUiBpcyBlcXVpdmFsZW50IHRvIFJFTkFNRQotICAgL0xPV0VSOkFMTC4gVGhlIG90 aGVyIGFyZ3VtZW50ICgvTE9XRVI6VVBQRVIgb3IgL1VQUEVSOkxPV0VSKSBtZWFucyB0bwotICAg bGVhdmUgbWl4ZWQtY2FzZSBmaWxlbmFtZXMgYWxvbmUsIGFuZCByZW5hbWUgb25seSB0aG9zZSBm aWxlcyB3aG9zZQotICAgbmFtZXMgY29udGFpbiBsZXR0ZXJzIG9mIG9ubHkgdGhlIGdpdmVuIGNh c2UuIEV4YW1wbGVzOgotCi0gICBSRU5BTUUgL1VQUEVSOkFMTCBmb28uYmFyCi0gICAgICAgICAg Q2hhbmdlcyB0aGUgZmlsZW5hbWUgdG8gRk9PLkJBUi4KLQotICAgUkVOQU1FIC9VUFBFUiBmb28u YmFyCi0gICAgICAgICAgU2FtZSBhcyAicmVuYW1lIC91cHBlcjphbGwgZm9vLmJhciIuCi0KLSAg IFJFTkFNRSAvVVBQRVIgZm9vLmJhciB+L29sZC8KLSAgICAgICAgICBSZW5hbWVzIGZvby5iYXIg dG8gRk9PLkJBUiBhbmQgbW92ZXMgaXQgdG8gdGhlIHVzZXIncyBvbGQKLSAgICAgICAgICBkaXJl Y3RvcnkgKFVuaXgpLgotCi0gICBSRU5BTUUgL0xPV0VSICoKLSAgICAgICAgICBDaGFuZ2VzIHRo ZSBuYW1lcyBvZiBhbGwgZmlsZXMgdG8gaGF2ZSBvbmx5IGxvd2VyY2FzZSBsZXR0ZXJzLgotCi0g ICBSRU5BTUUgL0xPV0VSOlVQUEVSICoKLSAgICAgICAgICBDaGFuZ2VzIHRoZSBuYW1lcyBvZiBv bmx5IHRob3NlIGZpbGVzIHdob3NlIG5hbWVzIGNvbnRhaW4gbm8KLSAgICAgICAgICBsb3dlcmNh c2UgbGV0dGVycyB0byBoYXZlIG9ubHkgbG93ZXJjYXNlIGxldHRlcnMuIEZvciBleGFtcGxlLAot ICAgICAgICAgIEZPTy5CQVIgd291bGQgYmUgY2hhbmdlZCwgRm9vLkJhciB3b3VsZCBub3QgYmUg Y2hhbmdlZC4gZm9vLmJhcgotICAgICAgICAgIHdvdWxkIG5vdCBiZSBjaGFuZ2VkIGVpdGhlciBi ZWNhdXNlIGl0J3MgYWxyZWFkeSBhbGwgbG93ZXJjYXNlLgotCi0gICBSRU5BTUUgL0xPV0VSOlVQ UEVSICogfi9uZXcvCi0gICAgICAgICAgU2FtZSBhcyB0aGUgcHJldmlvdXMgZXhhbXBsZSwgYnV0 IGFsc28gbW92ZXMgZWFjaCBmaWxlIHRvIHRoZQotICAgICAgICAgIHVzZXIncyBuZXcgZGlyZWN0 b3J5ICh3aGV0aGVyIGl0IHdhcyByZW5hbWVkIG9yIG5vdCkuCi0KLSAgIENhc2UgY29udmVyc2lv biB3b3JrcyByZWxpYWJseSBmb3IgQVNDSUkgY2hhcmFjdGVycyBvbmx5LiBLZXJtaXQgdXNlcwot ICAgdGhlIEMgbGlicmFyeSBmb3IgdGhpcywgd2hpY2ggb24gYW55IGdpdmVuIHBsYXRmb3JtIG1p Z2h0IG9yIG1pZ2h0IG5vdAotICAgaGFuZGxlIG5vbi1BU0NJSSBsZXR0ZXJzLCBhbmQgaWYgaXQg ZG9lcywgdGhlbiBob3cgaXQgd29ya3Mgd291bGQKLSAgIG5vcm1hbGx5IGRlcGVuZCBvbiB5b3Vy IGxvY2FsZSBkZWZpbml0aW9ucyAodGhlIExDX0NUWVBFIGFuZC9vciBMQU5HCi0gICBlbnZpcm9u bWVudCB2YXJpYWJsZSBpbiBVbml4KS4gV2hlbiBub24tQVNDSUkgbGV0dGVycyBhcmUgbm90IGhh bmRsZWQKLSAgIGJ5IHRoZSBDIGxpYnJhcnksIHRoZSBSRU5BTUUgY29tbWFuZCBkb2VzIGNoYW5n ZSB0aGVpciBjYXNlLiBGb3IKLSAgIGV4YW1wbGUsIE9sZ2FfVGHvv73vv71uLnR4dCBtaWdodCBi ZWNvbWUgT0xHQV9UQe+/ve+/vU4uVFhULgotCi1TdHJpbmcgUmVwbGFjZW1lbnQgaW4gRmlsZW5h bWVzCi0KLSAgIFRoZSBSRU5BTUUgY29tbWFuZCBhbHNvIGxldHMgeW91IGNoYW5nZSBmaWxlbmFt ZXMgYnkgc3RyaW5nCi0gICBzdWJzdGl0dXRpb24uCi0KLSAgIFJFTkFNRSAvRklYU1BBQ0VTWzpT dHJpbmddIGZpbGVzcGVjIFsgZGlyZWN0b3J5IF0KLSAgICAgICAgICBSZXBsYWNlcyBhbGwgc3Bh Y2VzIGluIGVhY2ggbWF0Y2hpbmcgZmlsZW5hbWUgYnkgdGhlIGdpdmVuCi0gICAgICAgICAgc3Ry aW5nLCBpZiBhbnksIG9yIGlmIG5vbmUgaXMgZ2l2ZW4sIGJ5IHVuZGVyc2NvcmUuIEV4YW1wbGVz OgotCi0gICAgIFJFTkFNRSAvRklYICoKLSAgICAgUkVOQU1FIC9GSVhTUEFDRVM6XyAqCi0gICAg IFJFTkFNRSAvRklYU1BBQ0VTOiIiICoKLSAgICAgUkVOQU1FIC9GSVhTUEFDRVM6PDA0MD4gKgot Ci0gICAgICAgICAgVGhlIGZpcnN0IHR3byBhcmUgZXF1aXZhbGVudCwgcmVwbGFjaW5nIGVhY2gg c3BhY2Ugd2l0aAotICAgICAgICAgIHVuZGVyc2NvcmU7IGEgZmlsZSBjYWxsZWQgIk15IEZhdm9y aXRlIFBob3RvLmpwZyIgYmVjb21lcwotICAgICAgICAgICJNeV9GYXZvcml0ZV9QaG90by5qcGci LiBUaGUgdGhpcmQgZXhhbXBsZSByZW1vdmVzIGFsbCBzcGFjZXMKLSAgICAgICAgICAoIk15RmF2 b3JpdGVQaG90by5qcGciKS4gVGhlIGZvdXJ0aCByZXBsYWNlcyBlYWNoIHNwYWNlIHdpdGggdGhl Ci0gICAgICAgICAgc3RyaW5nICI8MDQwPiIgKCJNeTwwNDA+RmF2b3JpdGU8MDQwPlBob3RvLmpw ZyIpLgotCi0gICBSRU5BTUUgL1JFUExBQ0U6e3tTdHJpbmcxfXtTdHJpbmcyfX0gZmlsZXNwZWMg WyBkaXJlY3RvcnkgXQotICAgICAgICAgIFJlbmFtZXMgZWFjaCBtYXRjaGluZyBmaWxlIGJ5IGNo YW5naW5nIG9jY3VycmVuY2VzIG9mIFN0cmluZzEgaW4KLSAgICAgICAgICBpdHMgbmFtZSB0byBT dHJpbmcyLiBJZiBhIGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9uIGlzIGluY2x1ZGVkLAotICAgICAg ICAgIHRoZSBmaWxlIGlzIGFsc28gbW92ZWQgdG8gdGhlIGdpdmVuIGRpcmVjdG9yeSAoZXZlbiBp ZiB0aGUgbmFtZQotICAgICAgICAgIHdhcyBub3QgY2hhbmdlZCkuIE5vdGUgdGhhdCBpbiB0aGlz IGNhc2UsIHRoZSBjdXJseSBicmFjZXMgYXJlCi0gICAgICAgICAgcGFydCBvZiB0aGUgY29tbWFu ZC4gRXhhbXBsZToKLQotICAgICBSRU5BTUUgL1JFUExBQ0U6e3suanBlZ317LmpwZ319ICoKLQot ICAgICAgICAgIGNoYW5nZXMgYWxsICouanBlZyBmaWxlcyB0byAqLmpwZy4KLQotICAgQnkgZGVm YXVsdCwgUkVOQU1FIC9SRVBMQUNFIGNoYW5nZXMgYWxsIG9jY3VycmVuY2VzIG9mIFN0cmluZzEg aW4gZWFjaAotICAgZmlsZW5hbWUgdG8gU3RyaW5nMiBzbywgZm9yIGV4YW1wbGUsIGlmIHlvdSBo YWQgYSBmaWxlIGNhbGxlZAotICAgYWJjanBlZ3h5ei5qcGVnLCB0aGUgY29tbWFuZCBqdXN0IHNo b3duIHdvdWxkIGNoYW5nZSBpdHMgbmFtZSB0bwotICAgYWJjanBneHl6LmpwZy4KLQotICAgRm9y IGdyZWF0ZXIgY29udHJvbCBhbmQgZmxleGliaWxpdHksIHRoZSAvUkVQTEFDRTogc3dpdGNoIGFy Z3VtZW50IGNhbgotICAgdGFrZSBzZXZlcmFsIGRpc3RpbmN0IGZvcm1zOgotCi0gICBSRU5BTUUg L1JFUExBQ0U6U3RyaW5nMSBmaWxlc3BlYyBbIGRpcmVjdG9yeSBdCi0gICAgICAgICAgVGhpcyBt ZWFucyB0byByZW1vdmUgYWxsIG9jY3VycmVuY2VzIG9mIFN0cmluZzEgZnJvbSB0aGUgZ2l2ZW4K LSAgICAgICAgICBmaWxlbmFtZXMgbmFtZS4gSXQgaXMgZXF1aXZhbGVudCB0byAvUkVQTEFDRTp7 e1N0cmluZzF9e319LiBBCi0gICAgICAgICAgaGFuZHkgdXNlIGZvciB0aGlzIG9wdGlvbiBpcyB0 byByZW1vdmUgc3BhY2VzIGZyb20gZmlsZW5hbWVzLgotCi0gICBSRU5BTUUgL1JFUExBQ0U6e3tT dHJpbmcxfXtTdHJpbmcyfX0gZmlsZXNwZWMgWyBkaXJlY3RvcnkgXQotICAgICAgICAgIEFzIGFs cmVhZHkgbm90ZWQsIHRoaXMgcmVwbGFjZXMgZXZlcnkgb2NjdXJyZW5jZSBvZiBTdHJpbmcxIHdp dGgKLSAgICAgICAgICBTdHJpbmcyIGluIGVhY2ggZmlsZW5hbWUuIEFscGhhYmV0aWMgY2FzZSBp biBzdHJpbmcgbWF0Y2hpbmcgaXMKLSAgICAgICAgICBkb25lIGFjY29yZGluZyB0byB0aGUgY3Vy cmVudCBTRVQgQ0FTRSBzZXR0aW5nLgotCi0gICBSRU5BTUUgL1JFUExBQ0U6e3sgfXtffX0gZmls ZXNwZWMgWyBkaXJlY3RvcnkgXQotICAgICAgICAgIFRoaXMgcmVwbGFjZXMgYWxsIHNwYWNlcyBp biB0aGUgZ2l2ZW4gZmlsZW5hbWVzIHdpdGggdW5kZXJzY29yZSwKLSAgICAgICAgICBlcXVpdmFs ZW50IHRvIFJFTkFNRSAvRklYU1BBQ0VTLgotCi0gICBSRU5BTUUgL1JFUExBQ0U6e3tTdHJpbmcx fXtTdHJpbmcyfXtPcHRpb25zfX0gZmlsZXNwZWMgWyBkaXJlY3RvcnkgXQotICAgICAgICAgIE9w dGlvbnMgY2FuIGJlIGluY2x1ZGVkIHRoYXQgYWRkIG1vcmUgY29udHJvbCB0byB0aGUgcHJvY2Vz cy4KLSAgICAgICAgICBUaGUgb3B0aW9uIHN0cmluZyBpcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3Rl cnM7IGVhY2ggY2hhcmFjdGVyIGluCi0gICAgICAgICAgdGhlIHN0cmluZyBpcyBhbiBvcHRpb24u IFRoZSBjaG9pY2VzIGFyZToKLQotICAgQSBTdHJpbmcgbWF0Y2hpbmcgaXMgdG8gYmUgY2FzZS1z ZW5zaXRpdmUsIHJlZ2FyZGxlc3Mgb2YgU0VUIENBU0UuCi0gICBhIFN0cmluZyBtYXRjaGluZyBp cyB0byBiZSBjYXNlLWluZGVwZW5kZW50LCByZWdhcmRsZXNzIG9mIFNFVCBDQVNFLgotICAgXiBT dHJpbmcgcmVwbGFjZW1lbnQgd2lsbCBvY2N1ciBvbmx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhl IGZpbGVuYW1lLgotICAgJCBTdHJpbmcgcmVwbGFjZW1lbnQgd2lsbCBvY2N1ciBvbmx5IGF0IHRo ZSBlbmQgb2YgdGhlIGZpbGVuYW1lLgotICAgMSBPbmx5IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9m IHRoZSBzdHJpbmcgd2lsbCBiZSByZXBsYWNlZC4KLSAgIDIgT25seSB0aGUgc2Vjb25kIG9jY3Vy cmVuY2Ugb2YgdGhlIHN0cmluZyB3aWxsIGJlIHJlcGxhY2VkLgotICAgMyA0IDUgNiA3IDggLi4u Ci0gICA5IE9ubHkgdGhlIG5pbnRoIG9jY3VycmVuY2Ugb2YgdGhlIHN0cmluZyB3aWxsIGJlIHJl cGxhY2VkLgotICAgLSAoaHlwaGVuLCBtaW51cyBzaWduKSBCZWZvcmUgYSBkaWdpdDogb2NjdXJy ZW5jZXMgd2lsbCBiZSBjb3VudGVkIGZyb20KLSAgIHRoZSByaWdodC4KLSAgIH4gKHRpbGRlKSBC ZWZvcmUgZGlnaXQgb3IgbWludXMgc2lnbjogYWxsIG9jY3VycmVuY2VzIGJ1dCB0aGUgZ2l2ZW4g b25lCi0gICB3aWxsIGJlIHJlcGxhY2VkLgotCi0gICBUaGUgdGlsZGUgbW9kaWZpZXIgd29ya3Mg b25seSB3aXRoIHNpbmdsZS1ieXRlIGNoYXJhY3RlciBzZXRzIHN1Y2ggYXMKLSAgIEFTQ0lJLCBD UDQzNywgSVNPIDg4NTktMSwgZXRjLCBidXQgbm90IHdpdGggbXVsdGlieXRlIGNoYXJhY3RlciBz ZXRzCi0gICBzdWNoIGFzIFVDUzIsIFVURjgsIG9yIGFueSBvZiB0aGUgSmFwYW5lc2UgS2Fuamkg c2V0cy4KLQotICAgSGVyZSBhcmUgc29tZSBleGFtcGxlcyBzaG93aW5nIGhvdyB0byB1c2UgdGhl IC9SRVBMQUNFIG9wdGlvbnM6Ci0KLSAgIFJFTkFNRSAvUkVQTEFDRTp7e2Zvb317YmFyfXtefX0g KgotICAgICAgICAgIEZvciBhbGwgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAiZm9vIiwg cmVwbGFjZXMgdGhlICJmb28iCi0gICAgICAgICAgYXQgdGhlIGJlZ2lubmluZyB3aXRoICJiYXIi LgotCi0gICBSRU5BTUUgL1JFUExBQ0U6e3t9e05ldy19e159fSAqCi0gICAgICAgICAgUHJlcGVu ZHMgIk5ldy0iIHRvIHRoZSBuYW1lIG9mIGVhY2ggZmlsZS4KLQotICAgUkVOQU1FIC9SRVBMQUNF Ont7LmpwZWd9ey5qcGd9eyR9fSAqCi0gICAgICAgICAgUmVwbGFjZXMgIi5qcGVnIiBhdCB0aGUg ZW5kIG9mIGVhY2ggZmlsZW5hbWUgd2l0aCAiLmpwZyIuCi0KLSAgIFJFTkFNRSAvUkVQTEFDRTp7 e317LU9sZH17JH19ICoKLSAgICAgICAgICBBcHBlbmRzICItT2xkIiB0byB0aGUgbmFtZSBvZiBl YWNoIGZpbGUuCi0KLSAgIFJFTkFNRSAvUkVQTEFDRTp7e2Zvb317YmFyfXthfX0gKgotICAgICAg ICAgIFJlcGxhY2VzICJmb28iLCAiRk9PIiwgIkZvbyIsICJmT08iLCBldGMsIHdpdGggImJhciIg aW4gZWFjaAotICAgICAgICAgIGZpbGVuYW1lLgotCi0gICBSRU5BTUUgL1JFUExBQ0U6e3tmb299 e2Jhcn17QX19ICoKLSAgICAgICAgICBSZXBsYWNlcyBvbmx5IChsb3dlcmNhc2UpICJmb28iIGlu IGZpbGVuYW1lcyB3aXRoICJiYXIiLgotCi0gICBSRU5BTUUgL1JFUExBQ0U6e3thfXtYWH19ICoK LSAgICAgICAgICBDaGFuZ2VzIGV2ZXJ5ICJhIiB0byAiWFgiLiBGb3IgZXhhbXBsZSBhIGZpbGUg Y2FsbGVkICJhLmEuYS5hIgotICAgICAgICAgIHdvdWxkIGJlY29tZSAiWFguWFguWFguWFgiLgot Ci0gICBSRU5BTUUgL1JFUExBQ0U6e3thfXtYfXsyfX0KLSAgICAgICAgICBDaGFuZ2VzIG9ubHkg dGhlIHNlY29uZCAiYSIgdG8gIlgiLiBGb3IgZXhhbXBsZSBhIGZpbGUgY2FsbGVkCi0gICAgICAg ICAgImEuYS5hLmEiIHdvdWxkIGJlY29tZSAiYS5YLmEuYSIuCi0KLSAgIFJFTkFNRSAvUkVQTEFD RTp7e2F9e1h9ey0xfX0KLSAgICAgICAgICBDaGFuZ2VzIG9ubHkgdGhlIGZpbmFsICJhIiBpbiB0 aGUgZmlsZW5hbWUgKGl0IGRvZXNuJ3QgaGF2ZSB0bwotICAgICAgICAgIGJlIGF0IHRoZSBlbmQp IHRvICJYIi4gRm9yIGV4YW1wbGUgYSBmaWxlIGNhbGxlZCAiYS5iLmEuYy5hLmQiCi0gICAgICAg ICAgd291bGQgYmVjb21lICJhLmIuYS5jLlguZCIuCi0KLSAgIFJFTkFNRSAvUkVQTEFDRTp7e2Zv b317Tk9URk9PfXstMn19Ci0gICAgICAgICAgQ2hhbmdlcyB0aGUgc2Vjb25kLXRvLWxhc3QgImZv byIgKGlmIGFueSkgaW4gdGhlIGZpbGVuYW1lIHRvCi0gICAgICAgICAgIk5PVEZPTyIuCi0KLSAg IFJFTkFNRSAvUkVQTEFDRTp7e2Zvb317fXstMn19Ci0gICAgICAgICAgRGVsZXRlcyB0aGUgc2Vj b25kLXRvLWxhc3QgImZvbyIgKGlmIGFueSkgZnJvbSB0aGUgZmlsZW5hbWUuCi0KLSAgIFJFTkFN RSAvUkVQTEFDRTp7ey59e199e34xfX0KLSAgICAgICAgICBDaGFuZ2VzIGFsbCBidXQgdGhlIGZp cnN0IHBlcmlvZCB0byBhbiB1bmRlcnNjb3JlOyBmb3IgZXhhbXBsZSwKLSAgICAgICAgICAiYS5i LmMuZC5lIiB3b3VsZCBiZWNvbWUgImEuYl9jX2RfZSIuCi0KLSAgIFJFTkFNRSAvUkVQTEFDRTp7 ey59e199e34tMX19Ci0gICAgICAgICAgQ2hhbmdlcyBhbGwgYnV0IHRoZSBmaW5hbCBwZXJpb2Qg dG8gYW4gdW5kZXJzY29yZTsgZm9yIGV4YW1wbGUsCi0gICAgICAgICAgImEuYi5jLmQuZSIgd291 bGQgYmVjb21lICJhX2JfY19kLmUiLgotCi0gICBJbiB0aGUgT3B0aW9ucyBmaWVsZCwgZGlnaXRz IChhbmQgdGhlaXIgbW9kaWZpZXJzKSwgXiwgYW5kICQgYXJlCi0gICBtdXR1YWxseSBleGNsdXNp dmUuIElmIHlvdSBpbmNsdWRlIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UgaW4gdGhlIG9wdGlvbgot ICAgc3RyaW5nLCBvbmx5IHRoZSBsYXN0IG9uZSBpcyB1c2VkLiBTaW1pbGFybHkgZm9yICdhJyBh bmQgJ0EnOgotCi0gICBSRU5BTUUgL1JFUExBQ0U6e3tmb299e2Jhcn17QWEyJF59fSAqCi0gICAg ICAgICAgVGhpcyByZXBsYWNlcyAiZm9vIiB3aXRoICJiYXIiIG5vIG1hdHRlciB3aGF0IGNvbWJp bmF0aW9uIG9mCi0gICAgICAgICAgdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycyBhcmUgdXNl ZCBpbiAiZm9vIiAoJ2EnIG92ZXJyaWRlcwotICAgICAgICAgICdBJyBpbiB0aGUgb3B0aW9uIHN0 cmluZyksIGJ1dCBvbmx5IGlmICJmb28iIGlzIGF0IHRoZSBiZWdpbm5pbmcKLSAgICAgICAgICBv ZiB0aGUgZmlsZW5hbWUgKCdeJyBvdmVycmlkZXMgJyQnIGFuZCAnMicpLgotCi0gICBJZiB5b3Ug Z2l2ZSBhbiAvVVBQRVIgb3IgL0xPV0VSIHN3aXRjaCBhbmQgYSAvUkVQTEFDRSBzd2l0Y2ggaW4g dGhlCi0gICBzYW1lIFJFTkFNRSBjb21tYW5kLCB0aGUgL1JFUExBQ0UgYWN0aW9uIG9jY3VycyBm aXJzdCwgdGhlbiB0aGUgY2FzZQotICAgY29udmVyc2lvbjoKLQotICAgUkVOQU1FIC9SRVBMQUNF Ont7Zm9vfXtiYXJ9fSAvVVBQRVIgKiAvdG1wCi0gICAgICAgICAgRm9yIGVhY2ggZmlsZTogY2hh bmdlcyBhbGwgb2NjdXJyZW5jZXMgb2YgImZvbyIgaW4gdGhlIG5hbWUgdG8KLSAgICAgICAgICAi YmFyIiwgdGhlbiBjb252ZXJ0cyB0aGUgcmVzdWx0IHRvIHVwcGVyY2FzZSwgYW5kIHRoZW4gbW92 ZXMgdGhlCi0gICAgICAgICAgZmlsZSB0byB0aGUgL3RtcCBkaXJlY3RvcnkuIFNvIChmb3IgZXhh bXBsZSkgImZvb3QudHh0IiB3b3VsZAotICAgICAgICAgIGJlY29tZSAiL3RtcC9CQVJULlRYVCIu Ci0KLUNoYW5naW5nIHRoZSBDaGFyYWN0ZXIgRW5jb2Rpbmcgb2YgRmlsZW5hbWVzCi0KLSAgIEFz IHlvdSBrbm93LCB0ZXh0IGlzIHJlcHJlc2VudGVkIG9uIHRoZSBjb21wdXRlciBhcyBhIHNlcmll cyBvZgotICAgbnVtYmVycywgd2l0aCBhIGdpdmVuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIGEg Z2l2ZW4gY2hhcmFjdGVyCi0gICBhY2NvcmRpbmcgdG8gc29tZSBjb252ZW50aW9uIG9yIHN0YW5k YXJkLiBGaWxlbmFtZXMgYXJlIHJlcHJlc2VudGVkIHRoZQotICAgc2FtZSB3YXkuIFRoZSB0cm91 YmxlIGlzLCBkaWZmZXJlbnQgY29tcHV0ZXJzLCBvciBldmVuIGRpZmZlcmVudAotICAgYXBwbGlj YXRpb25zIG9uIHRoZSBzYW1lIGNvbXB1dGVyLCBtaWdodCB1c2UgZGlmZmVyZW50IHN0YW5kYXJk cyBvcgotICAgY29udmVudGlvbnMgKCJjaGFyYWN0ZXIgc2V0cyIpIGZvciByZXByZXNlbnRpbmcg dGhlIHNhbWUgY2hhcmFjdGVycy4KLSAgIFVzdWFsbHkgQVNDSUkgaXMgc2FmZSwgYnV0IGFueXRo aW5nIGJleW9uZCB0aGF0IC0tIG5vbi1BU0NJSSBjaGFyYWN0ZXJzCi0gICBzdWNoIGFzIGFjY2Vu dGVkIG9yIG5vbi1Sb21hbiBsZXR0ZXJzIC0tIGlzIGxpa2VseSB0byB2YXJ5LiBTb21ldGltZXMK LSAgIHlvdSBoYXZlIHRleHQgdGhhdCdzIGluIHRoZSAid3JvbmciIGNoYXJhY3RlciBzZXQgYW5k IHlvdSBuZWVkIHRvCi0gICBjb252ZXJ0IGl0IHRvIHNvbWV0aGluZyB5b3UgY2FuIGNhbiB1c2Uu IEtlcm1pdCBoYXMgYWx3YXlzIGJlZW4gYWJsZSB0bwotICAgaGFuZGxlIHRoaXMgYXMgcGFydCBv ZiBmaWxlIHRyYW5zZmVyIGFuZCB0ZXJtaW5hbCBlbXVsYXRpb24sIGFzIHdlbGwgYXMKLSAgIGJl aW5nIGFibGUgdG8gY29udmVydCB0ZXh0IGZpbGVzIGxvY2FsbHkgd2l0aCBpdHMgVFJBTlNMQVRF IGNvbW1hbmQuCi0gICBOb3cgdGhlcmUncyBhIHdheSB0byBjb252ZXJ0IGZpbGVuYW1lcyB0b28s IGZvciBleGFtcGxlIGFmdGVyIGNvcHlpbmcKLSAgIGZpbGVzIGZyb20gYSBDRCB0aGF0IHVzZXMg YSBkaWZmZXJlbnQgZW5jb2Rpbmc6Ci0KLSAgIFJFTkFNRSAvQ09OVkVSVDpjaGFyc2V0MTpjaGFy c2V0MiBmaWxlc3BlYyBbIGRpcmVjdG9yeSBdCi0gICAgICAgICAgQ29udmVydHMgZmlsZW5hbWVz IGZyb20gdGhlIGZpcnN0IGNoYXJhY3RlciBzZXQgdG8gdGhlIHNlY29uZAotICAgICAgICAgIG9u ZS4gVGhlIHR3byBjaGFyYWN0ZXIgc2V0cyBjYW4gYmUgY2hvc2VuIGZyb20gdGhlIFNFVCBGSUxF Ci0gICAgICAgICAgQ0hBUkFDVEVSLVNFVCBsaXN0OyBmb3IgY29tcGxldGUgZGV0YWlscyBzZWUg WzY4XXRoaXMgcGFnZS4gRm9yCi0gICAgICAgICAgZXhhbXBsZSBzdXBwb3NlIHlvdSBoYXZlIGEg ZmlsZSBjYWxsZWQgIk9sZ2FfVGHvv73vv71uLnR4dCIgb24gYQotICAgICAgICAgIGNvbXB1dGVy IHdoZXJlIElTTyA4ODU5LTEgTGF0aW4gQWxwaGFiZXQgMSBpcyB1c2VkLCBhbmQgeW91IGhhdmUK LSAgICAgICAgICB0cmFuc3BvcnRlZCBpdCAoZS5nLiBvbiBDRFJPTSkgdG8gYW5vdGhlciBjb21w dXRlciB3aGVyZSB0aGUKLSAgICAgICAgICB0ZXh0IGVuY29kaW5nIGlzIFVURjguIE1heWJlIHlv dSBhbHNvIGhhdmUgYSBsb3Qgb2Ygb3RoZXIgZmlsZXMKLSAgICAgICAgICB3aXRoIHNpbWlsYXIg bmFtZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LiBZb3UgY2FuIGNvbnZlcnQgdGhlCi0gICAgICAg ICAgZmlsZW5hbWVzIHRvIFVURjggbGlrZSB0aGlzOgotCi0gICAgIFJFTkFNRSAvQ09OVkVSVDps YXRpbjE6dXRmOCAqCi0KLSAgIC9DT05WRVJUIGNhbiBub3QgYmUgY29tYmluZWQgd2l0aCAvVVBQ RVIsIC9MT1dFUiwgb3IgL1JFUExBQ0UuCi0KLSAgIFlvdSBzaG91bGQgTk9UIHVzZSBVQ1MyIGZv ciBmaWxlbmFtZXMgc2luY2UgdGhpcyBlbmNvZGluZyBpcyBub3QKLSAgIGNvbXBhdGlibGUgd2l0 aCBDIHN0cmluZ3MgdXNlZCBpbiBVbml4IGFuZCBlbHNld2hlcmUuCi0KLSAgIFJFTkFNRSAvQ09O VkVSVCBhZmZlY3RzIG9ubHkgdGhlIGZpbGVuYW1lLCBub3QgdGhlIGZpbGUncyBjb250ZW50cy4g WW91Ci0gICBjYW4gdXNlIHRoZSBUUkFOU0xBVEUgY29tbWFuZCB0byBjb252ZXJ0IHRoZSBlbmNv ZGluZyBvZiB0aGUgY29udGVudHMKLSAgIG9mIGEgdGV4dCBmaWxlLgotCi1PdGhlciBOZXcgRmVh dHVyZXMKLQotICAgU2VlIHRoZSBbNjldQy1LZXJtaXQgRGFpbHkgQnVpbGRzIHBhZ2UgZm9yIGRl dGFpbHMuIFZlcnkgYnJpZWZseToKLQotICAgICAqIFBlcmhhcHMgbW9zdCBpbXBvcnRhbnQsIG1v ZGVybml6ZWQgbWFrZWZpbGUgdGFyZ2V0cyBmb3IgdGhlIG1ham9yCi0gICAgICAgVW5peCBwbGF0 Zm9ybXM6IExpbnV4LCBNYWMgT1MgWCwgQUlYLCBTb2xhcmlzLCBldGMuIFRoZXNlIGFyZQotICAg ICAgIHNvbWV3aGF0IGF1dG9tYXRlZDsgbm90IGF1dG9jb25mIGV4YWN0bHksIGJ1dCB0aGV5IGN1 dCBkb3duCi0gICAgICAgc2lnbmlmaWNhbnRseSBvbiByZWR1bmRhbnQgdGFyZ2V0cy4gRm9yIGV4 YW1wbGUsIG9uZSBzaW5nbGUgImxpbnV4IgotICAgICAgIHRhcmdldCB3b3JrcyBvbiBtYW55ICho b3BlZnVsbHkgYWxsKSBkaWZmZXJlbnQgTGludXgKLSAgICAgICBjb25maWd1cmF0aW9ucywgd2hl cmUgYmVmb3JlIGRpZmZlcmVudCB0YXJnZXRzIHdlcmUgcmVxdWlyZWQgZm9yCi0gICAgICAgZGlm ZmVyZW50IGNvbWJpbmF0aW9ucyBvZiAoZS5nLikgY3Vyc2VzIC8gbmN1cnNlcyAvIG5vIGN1cnNl czsKLSAgICAgICAzMi1iaXQgLyA2NC1iaXQ7IGRpZmZlcmVudCBmZWF0dXJlIHNldHMgYW5kIGxp YnJhcnkgbG9jYXRpb25zLgotICAgICAgIChTZXBhcmF0ZSB0YXJnZXRzIGFyZSBzdGlsbCByZXF1 aXJlZCBmb3IgS2VyYmVyb3MgYW5kL29yIFNTTAotICAgICAgIGJ1aWxkcywgYnV0IHRoZXkgYXJl ICJzdWJyb3V0aW5pemVkIi4pCi0gICAgICogQmlnZ2VyIGJ1ZmZlcnMsIG1vcmUgc3RvcmFnZSBm b3IgY29tbWFuZHMsIG1hY3Jvcywgc2NyaXB0cywKLSAgICAgICBzdHJpbmdzLCBhbmQgZmlsZW5h bWUgZXhwYW5zaW9uIGluIDY0LWJpdCB2ZXJzaW9ucyBhbmQgaW4gMzItYml0Ci0gICAgICAgdmVy c2lvbnMgdGhhdCBzdXBwb3J0IGxhcmdlIGZpbGVzLgotICAgICAqIFVzZXItc2V0dGFibGUgRlRQ IHRpbWVvdXQsIHdvcmtzIG9uIGJvdGggdGhlIGRhdGEgYW5kIGNvbnRyb2wKLSAgICAgICBjb25u ZWN0aW9uLgotICAgICAqIEZUUCBhY2Nlc3MgdG8gcG9ydHMgaGlnaGVyIHRoYW4gMTYzODMuCi0g ICAgICogQnVpbHQtaW4gRlRQIGNsaWVudCBmb3IgVk1TLiBUaGlzIGlzIHRoZSBbNzBdc2FtZSBG VFAgY2xpZW50IFVuaXgKLSAgICAgICBDLUtlcm1pdCBoYXMgaGFkIHNpbmNlIHZlcnNpb24gOC4w LCBtaW5pbWFsbHkgYWRhcHRlZCB0byBWTVMgYnkKLSAgICAgICBTTVMsIHN1cHBvcnRpbmcgYmlu YXJ5IGFuZCBTdHJlYW1fTEYgZmlsZSB0cmFuc2ZlciBvbmx5IChpbiBvdGhlcgotICAgICAgIHdv cmRzLCBub3RoaW5nIHRvIGhhbmRsZSBSTVMgZmlsZXMpLCBidXQgb3RoZXJ3aXNlIGZ1bGx5IGZ1 bmN0aW9uYWwKLSAgICAgICAoYW5kIHNjcmlwdGFibGUpIGFuZCB0aGVvcmV0aWNhbGx5IGNhcGFi bGUgb2YgbWFraW5nIGNvbm5lY3Rpb25zCi0gICAgICAgc2VjdXJlZCBieSBTU0wgKGF0IGxlYXN0 IGl0IGNvbXBpbGVzIGFuZCBsaW5rcyBPSyB3aXRoIFNTTCAtIEhQIFNTTAotICAgICAgIDEuMyBp biB0aGlzIGNhc2UpLgotICAgICAqIExhcmdlIGZpbGUgc3VwcG9ydCBpbiBWTVMsIGFsc28gYnkg U01TLiBBbHBoYSBhbmQgSXRhbml1bSBvbmx5IChub3QKLSAgICAgICBWQVgpLiBWTVMgQy1LZXJt aXQgd2FzIGFscmVhZHkgYWJsZSB0byB0cmFuc2ZlciBsYXJnZSBmaWxlcywgYnV0Ci0gICAgICAg dGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSAobnVtYmVycyBhbmQgcHJvZ3Jlc3MgYmFyKSBhbmQg c3RhdGlzdGljcwotICAgICAgIHdlcmUgd3JvbmcgYmVjYXVzZSB0aGV5IHVzZWQgaW50cy4gSW4g dGhlIHByZXNlbnQgQWxwaGEgdGVzdAotICAgICAgIHJlbGVhc2UsIHRoaXMgaXMgYW4gb3B0aW9u YWwgZmVhdHVyZSByZXF1ZXN0ZWQgYnkgaW5jbHVkaW5nIHRoZSAiZiIKLSAgICAgICBvcHRpb24g aW4gUDEuCi0gICAgICogTmV3IFBVVEVOViBjb21tYW5kIHRoYXQgYWxsb3dzIEtlcm1pdCB0byBw YXNzIGVudmlyb25tZW50IHZhcmlhYmxlcwotICAgICAgIHRvIHN1YnByb2Nlc3NlcyAoVW5peCBv bmx5LCAiaGVscCBwdXRlbnYiKS4KLSAgICAgKiBOZXcgVE9VQ0ggY29tbWFuZCwgbWFueSBmaWxl IHNlbGVjdGlvbiBvcHRpb25zICgiaGVscCB0b3VjaCIpLgotICAgICAqIE5ldyBESVJFQ1RPUlkg Y29tbWFuZCBvcHRpb25zIGFuZCBzd2l0Y2hlcyAoL1RPUCwgL0NPVU5UOwotICAgICAgIEhESVJF Q1RPUlksIFdESVJFQ1RPUlkuLi4pLiBUbyBzZWUgdGhlIHRlbiBiaWdnZXN0IGZpbGVzIGluIHRo ZQotICAgICAgIGN1cnJlbnQgZGlyZWN0b3J5OiAiZGlyIC90b3A6MTAgL3NvcnQ6c2l6ZSAvcmV2 ZXJzZSAqIiBvcgotICAgICAgIGVxdWl2YWxlbnRseSwgImhkaXIgL3RvcDoxMCAqIi4gV0RJUiBs aXN0cyBmaWxlcyBpbiByZXZlcnNlCi0gICAgICAgY2hyb25vbG9naWNhbCBvcmRlciwgc2hvcnRo YW5kIGZvciAiZGlyIC9zb3J0OmRhdGUgL3JldmVyc2UiLgotICAgICAqIE5ldyBjb21tYW5kIEZT RUVLIC9GSU5EOnN0cmluZy1vci1wYXR0ZXJuLCBzZWVrcyB0byB0aGUgZmlyc3QgbGluZQotICAg ICAgIGluIGFuIEZPUEVOJ2QgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcgb3Ig bWF0Y2hlcyB0aGUKLSAgICAgICBnaXZlbiBwYXR0ZXJuLiBFeGFtcGxlOiBTdXBwb3NlIHlvdSBo YXZlIGEgZmlsZSBvZiBsaW5lcyBsaWtlIHRoaXM6Ci0KLSAgICAgcXVhbnRpdHkgICBkZXNjcmlw dGlvbi4uLgotICAgICAgIGluIHdoaWNoIHRoZSBmaXJzdCAid29yZCIgaXMgYSBudW1iZXIsIGZv bGxvd2VkIGJ5IGEgZGVzY3JpcHRpb24KLSAgICAgICAoZm9yIGV4YW1wbGUsIHRoZSBuYW1lIG9m IGFuIGl0ZW0pLiBIZXJlIGlzIGhvdyB0byB1c2UgRlNFRUsgdG8KLSAgICAgICBxdWlja2x5IGdl dCB0aGUgdG90YWwgcXVhbnRpdHkgb2YgYW55IGdpdmVuIGl0ZW0sIHdoaWNoIGlzIHBhc3NlZAot ICAgICAgIGFzIGEgcGFyYW1ldGVyIChlaXRoZXIgYSBsaXRlcmFsIHN0cmluZyBvciBhIHBhdHRl cm4pIG9uIHRoZQotICAgICAgIGNvbW1hbmQgbGluZToKLQotIyEvdXNyL2xvY2FsL2Jpbi9rZXJt aXQgKwotaWYgbm90IGRlZiBcJTEgZXhpdCAxIFVzYWdlOiBcZmJhc2VuYW1lKFwlMCkgc3RyaW5n LW9yLXBhdHRlcm4KLQotLmZpbGVuYW1lID0gL3Vzci9sb2NhbC9kYXRhL2l0ZW1zLmxvZyAgICAg ICAgIyBTdWJzdGl0dXRlIHRoZSBhY3R1YWwgZmlsZW5hbWUKLXNldCBjYXNlIG9mZiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgU2VhcmNoZXMgYXJlIGNhc2UtaW5kZXBlbmRlbnQK LWZvcGVuIC9yZWFkIFwlYyBcbShmaWxlbmFtZSkgICAgICAgICAgICAgICAgICMgT3BlbiB0aGUg ZmlsZQotaWYgZmFpbCBleGl0IDEgIlxtKGZpbGVuYW1lKTogXHYoZXJyc3RyaW5nKSIgIyBGYWls OiBleGl0IHdpdGggZXJyb3IgbWVzc2FnZQotLnRvdGFsID0gMCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBPSzogSW5pdGlhbGl6ZSB0aGUgdG90YWwKLWVjaG8gU2VhcmNoaW5n ICJcJTEiLi4uCi0KLXdoaWxlIHRydWUgewotICAgIGZzZWVrIC9saW5lIC9yZWxhdGl2ZSAvZmlu ZDpcJTEgXCVjIDAgICAgIyBHZXQgbmV4dCBsaW5lIHRoYXQgaGFzIHRhcmdldAotICAgIGlmIGZh aWwgYnJlYWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGYWlsdXJlIGluZGljYXRlcyBF T0YKLSAgICBmcmVhZCAvbGluZSBcJWMgbGluZSAgICAgICAgICAgICAgICAgICAgICMgUmVhZCBp dAotICAgIGlmIGZhaWwgYnJlYWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoc2hvdWxk bid0IGhhcHBlbikKLSAgICBpbmNyZW1lbnQgdG90YWwgXGZ3b3JkKFxtKGxpbmUpLDEpICAgICAg ICMgSW5jcmVtZW50IHRoZSB0b3RhbAotfQotZmNsb3NlIFwlYyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBDbG9zZSB0aGUgZmlsZQotZWNobyBUb3RhbCBmb3IgIlwlMSIgOiBc bSh0b3RhbCkgICAgICAgICAgICAgIyBQcmludCB0aGUgcmVzdWx0Ci1leGl0IDAKLQotICAgICAg IFRoZSBzeW50YXggb2YgdGhlIEZTRUVLIGNvbW1hbmQgaW4gdGhpcyBleGFtcGxlIGluZGljYXRl cyB0aGF0IGVhY2gKLSAgICAgICBzZWFyY2ggc2hvdWxkIHN0YXJ0IHJlbGF0aXZlIHRvIHRoZSBj dXJyZW50IGZpbGUgbGluZS4gU2luY2UgS2VybWl0Ci0gICAgICAgaXMgYW4gaW50ZXJwcmV0aXZl IGxhbmd1YWdlLCBGU0VFSyBpcyBhIGxvdCBmYXN0ZXIgdGhhbiBGUkVBRCdpbmcKLSAgICAgICBl YWNoIGxpbmUgYW5kIGNoZWNraW5nIGl0IGZvciB0aGUgdGFyZ2V0LCBlc3BlY2lhbGx5IGZvciBi aWcgZmlsZXMuCi0gICAgICAgQW4gZXNwZWNpYWxseSBoYW5keSB1c2UgZm9yIEZTRUVLIGlzIGZv ciB1c2Ugd2l0aCBwb3RlbnRpYWxseSBodWdlCi0gICAgICAgc2VxdWVudGlhbGx5IHRpbWVzdGFt cGVkIGxvZ3MsIHRvIHNlZWsgZGlyZWN0bHkgdG8gdGhlIGRhdGUtdGltZQotICAgICAgIHdoZXJl IHlvdSB3YW50IHRvIHN0YXJ0IHByb2Nlc3NpbmcuIFNvbWUgb3RoZXIgaW1wcm92ZW1lbnRzIGZv ciB0aGUKLSAgICAgICBGT1BFTi9GUkVBRC9GV1JJVEUvRkNMT1NFIGZhbWlseSBvZiBjb21tYW5k cyBhcmUgaW5jbHVkZWQgYWxzbwotICAgICAgIChwZXJmb3JtYW5jZSwgYnVnIGZpeGVzLCBjb252 ZW5pZW5jZSBmZWF0dXJlcyksIGxpc3RlZCBpbiB0aGUKLSAgICAgICBbNzFdY2hhbmdlIGxvZy4g KFByaW9yIHRvIDkuMC4yOTkgQWxwaGEuMDIsIHRoZSBGU0VFSyAvRklORDoKLSAgICAgICBjb21t YW5kIGFsd2F5cyBzdGFydGVkIGZyb20gdGhlIHRvcC4pCi0gICAgICogTUlNRSBzeW5vbnltcyBm b3IgY2hhcmFjdGVyLXNldCBuYW1lczogQSBuZXcgZXF1aXZhbGVuY2UgYmV0d2VlbgotICAgICAg IE1JTUUgbmFtZXMgYW5kIEtlcm1pdCBuYW1lcyBmb3IgY2hhcmFjdGVyIHNldHMsIHdpdGggYSBu ZXcgdGFibGUKLSAgICAgICBzaG93aW5nIHRoZSBzdXBwb3J0ZWQgc2V0cyBbNzJdSEVSRSAodGhp cyBmZWF0dXJlIGlzIGFsc28KLSAgICAgICBpbGx1c3RyYXRlZCBpbiB0aGUgWzczXVdlYmxvZyBz Y3JpcHQpLgotICAgICAqIFVuaXggQy1LZXJtaXQgU0VUIFRFUk1JTkFMIFRZUEUgbm93IHBhc3Nl cyBpdHMgYXJndW1lbnRzIHRvCi0gICAgICAgc3VicHJvY2Vzc2VzIGFzIGFuIGVudmlyb25tZW50 IHZhcmlhYmxlLgotICAgICAqIFNFVCBTRVNTSU9OLUxPRyBURVhUIG5vdyBzdHJpcHMgb3V0IEFO U0kgZXNjYXBlIHNlcXVlbmNlcyBmcm9tIHRoZQotICAgICAgIHNlc3Npb24gbG9nLgotICAgICAq IEZvciBpbnRlcmFjdGluZyB3aXRoIFBPUCBzZXJ2ZXJzIG92ZXIgY2xlYXItdGV4dCBvciBTU0wt c2VjdXJlZAotICAgICAgIGNvbm5lY3Rpb25zOgotICAgICAgICAgICsgTmV3IFNTTCBhbmQgVExT ICJyYXciIGNvbm5lY3Rpb25zIChubyBUZWxuZXQgcHJvdG9jb2wpLgotICAgICAgICAgICsgTmV3 IElOUFVUIGNvbW1hbmQgb3B0aW9ucyBmb3IgcmVhZGluZyBhbmQgY2FwdHVyaW5nIChwZXJoYXBz Ci0gICAgICAgICAgICB3aGlsZSBzY2FubmluZykgY29udGludW91cyBpbmNvbWluZyB0ZXh0LCBz dWNoIGFzIElOUFVUCi0gICAgICAgICAgICAvTk9XUkFQIChleHBsYWluZWQgWzc0XUhFUkUpLgot ICAgICAgICAgICsgTmV3IFxmZW1haWxhZGRyZXNzKCkgY29tbWFuZCB0byBleHRyYWN0IHRoZSBl LW1haWwgYWRkcmVzcwotICAgICAgICAgICAgZnJvbSBhbiBJbnRlcm5ldCBtYWlsIG1lc3NhZ2Ug VG86IG9yIEZyb206IGxpbmUsIHVzZWQgaW4KLSAgICAgICAgICAgIGZldGNoaW5nIG1haWwgZnJv bSBQT1Agc2VydmVycy4KLSAgICAgICAgICArIEltcHJvdmVkIGRhdGUgcGFyc2luZyBjb21tYW5k cyBhbmQgZnVuY3Rpb25zIGZvciBwYXJzaW5nIHRoZQotICAgICAgICAgICAgZGlmZmVyZW50IGRh dGUgZm9ybWF0cyB0aGF0IGNhbiBhcHBlYXIgaW4gZS1tYWlsLgotICAgICAgICAgICsgUHJvZHVj dGlvbiBzY3JpcHRzIGZvciBmZXRjaGluZyBtYWlsIGZyb20gYSBzZWN1cmUgUE9QIHNlcnZlciwK LSAgICAgICAgICAgIGF2YWlsYWJsZSBbNzVdSEVSRS4KLSAgICAgKiBWYXJpb3VzIGZlYXR1cmVz IGFkZGVkIHRvIG1ha2UgS2VybWl0IG1vcmUgdXNlZnVsIGZvciB3cml0aW5nIENHSQotICAgICAg IHNjcmlwdHMgc3VjaCBhcyBJTlBVVCAvQ09VTlQ6biB0byBJTlBVVCBleGFjdGx5IG4gY2hhcmFj dGVycwotICAgICAgICh1c2VmdWwgZm9yIHJlYWRpbmcgZm9ybSBkYXRhKS4KLSAgICAgKiBOZXcg XGZwaWN0dXJlaW5mbygpIGZ1bmN0aW9uIGZvciBnZXR0aW5nIG9yaWVudGF0aW9uIGFuZCBkaW1l bnNpb25zCi0gICAgICAgb2YgSlBHIGFuZCBHSUYgaW1hZ2VzLCBkZXNjcmliZWQgWzc2XUhFUkUu Ci0gICAgICogTmV3IFxmZ2V0cGlkaW5mbygpIGZ1bmN0aW9uIGZvciB0ZXN0aW5nIHdoZXRoZXIg YSBnaXZlbiBwcm9jZXNzCi0gICAgICAgZXhpc3RzLgotICAgICAqIFxma3dkdmFsdWUoKSBmdW5j dGlvbiBmaXhlZCB0byBhbGxvdyBtdWx0aXdvcmQgdmFsdWVzLgotICAgICAqIE5ldyBmdW5jdGlv biBcZmNvdW50KHMxLHMyKSB0byB0ZWxsIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgczEK LSAgICAgICBpbiBzMi4KLSAgICAgKiBOZXcgXGZsb3B4KCkgZnVuY3Rpb24gcmV0dXJucyByaWdo dG1vc3QgZmllbGQgZnJvbSBzdHJpbmcgKHN1Y2ggYXMKLSAgICAgICBhIGZpbGUncyBleHRlbnNp b24pLgotICAgICAqIE5ldyBmdW5jdGlvbiBcZmZ1bmN0aW9uKHMxKSB0byB0ZWxsIHdoZXRoZXIg YSBidWlsdC1pbiBzMSBmdW5jdGlvbgotICAgICAgIGV4aXN0cy4KLSAgICAgKiBOZXcgXGZzcXVl ZXplKHMxKSBmdW5jdGlvbiByZW1vdmVzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UK LSAgICAgICBmcm9tIHN0cmluZyBzMSwgY2hhbmdlcyB0YWJzIHRvIHNwYWNlcywgc3F1ZWV6aW5n IGVhY2ggcnVuIG9mCi0gICAgICAgcmVwZWF0ZWQgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRvIGEg c2luZ2xlIHNwYWNlLgotICAgICAqIENvbXBhY3Qgc3Vic3RyaW5nIG5vdGF0aW9uOiBccyhzb21l c3RyaW5nWzEyOjE4XSkgaXMgdGhlIHNhbWUgYXMKLSAgICAgICBcZnN1YnN0cmluZyhcbShzb21l c3RyaW5nKSwxMiwxOCksIGkuZS4gdGhlIHN1YnN0cmluZyBzdGFydGluZyBhdAotICAgICAgIHBv c2l0aW9uIDEyLCAxOCBjaGFyYWN0ZXJzIGxvbmcuIFxzKHNvbWVzdHJpbmdbMTJfMThdKSBtZWFu cwotICAgICAgIGNoYXJhY3RlcnMgMTIgdGhyb3VnaCAxOCBvZiB0aGUgc3RyaW5nICg3IGNoYXJh Y3RlcnMpLiBBbHNvLAotICAgICAgIFxzKHNvbWVzdHJpbmdbMTcuXSkgcmV0dXJucyBjaGFyYWN0 ZXIgbnVtYmVyIDE3IG9mIHNvbWVzdHJpbmcuCi0gICAgICogVGhlIHN0cmluZyBpbmRleGluZyBm dW5jdGlvbnMgbm93IGFjY2VwdCBhbiBvcHRpb25hbCB0cmFpbGluZwotICAgICAgIGFyZ3VtZW50 IHNwZWNpZnlpbmcgdGhlIG9jY3VycmVuY2UgbnVtYmVyIG9mIHRoZSB0YXJnZXQgc3RyaW5nLgot ICAgICAgIExpa2V3aXNlLCBcZndvcmQoKSBjYW4gZmV0Y2ggd29yZHMgZnJvbSB0aGUgcmlnaHQg YXMgd2VsbCBhcyB0aGUKLSAgICAgICBsZWZ0LgotICAgICAqIFRoZSBDT1BZIGNvbW1hbmQgaW4g VW5peCBDLUtlcm1pdCBoYXMgYSBuZXcgL1BSRVNFUlZFIHN3aXRjaCwKLSAgICAgICBlcXVpdmFs ZW50IHRvIFVuaXggImNwIC1wIi4KLSAgICAgKiBBU0tRIC9FQ0hPOmMgY2FuIGJlIHVzZWQgdG8g bWFrZSB0aGUgY2hhcmFjdGVycyB0aGUgdXNlciB0eXBlcyBlY2hvCi0gICAgICAgYXMgdGhlIGNo YXJhY3RlciBjLCBlLmcuIGFzdGVyaXNrIHdoZW4gdHlwaW5nIGEgcGFzc3dvcmQuCi0gICAgICog SUYgTElOSyBmaWxlbmFtZSB0byB0ZXN0IGlmIHRoZSBmaWxlbmFtZSBpcyBhIHN5bWxpbmsuCi0g ICAgICogQ3RybC1LLCB3aGVuIHR5cGVkIGF0IHRoZSBjb21tYW5kIHBhcnNlciwgcmVwbGFjZXMg aXRzZWxmIHdpdGggbW9zdAotICAgICAgIHJlY2VudGx5IGVudGVyZWQgZmlsZSBzcGVjaWZpY2F0 aW9uLgotICAgICAqIEluIFVuaXgsIHRoZSBhYmlsaXR5IHRvIGxvZyBhIHRlcm1pbmFsIHNlc3Np b24gdG8gYSBzZXJpYWwgcG9ydCwKLSAgICAgICBmb3IgdXNlIHdpdGggc3BlYWtpbmcgZGV2aWNl cyBvciBzZXJpYWwgcHJpbnRlcnM7IGRlc2NyaWJlZAotICAgICAgIFs3N11IRVJFLiBBbHNvIGZv ciB0aGUgc2FtZSBwdXJwb3NlLCBTRVQgU0VTU0lPTi1MT0cKLSAgICAgICBOVUxMLVBBRERFRC1M SU5FUyBmb3IgYSBzcGVlY2ggc3ludGhlc2l6ZXIgdGhhbiBuZWVkZWQgdGhpcy4KLSAgICAgKiBB ZGFwdGF0aW9uIHRvIE9wZW5TU0wgMC45LjggYW5kIDEuMC4wLgotICAgICAqIExpZnRlZCB0aGUg cmVzdHJpY3Rpb24gb24gaGF2aW5nIGEgcmVtb3RlIEtlcm1pdCBwcm9ncmFtIHNlbmQKLSAgICAg ICBSRU1PVEUgY29tbWFuZHMgdG8gdGhlIGxvY2FsLiBBIHZlcnkgYmlnIGV4LWNsaWVudCBuZWVk ZWQgdG8gYmUKLSAgICAgICBhYmxlIHRvIGRvIHRoaXMgKGJyYW5jaGVzIHdvdWxkIGNvbm5lY3Qg dG8gaGVhZHF1YXJ0ZXJzIGFuZCB1cGxvYWQKLSAgICAgICBmaWxlczsgSFEgd291bGQgdGhlbiBk b3dubG9hZCBwYXRjaGVzLCBhIFJFTU9URSBIT1NUIGNvbW1hbmQgd2FzCi0gICAgICAgbmVjZXNz YXJ5IHRvIGFsbG93IHRoZSByZW1vdGUgaGVhZHF1YXJ0ZXJzIG1hY2hpbmVzIHRvIGluc3RhbGwg dGhlCi0gICAgICAgcGF0Y2hlcyBvbiB0aGUgbG9jYWwgY2xpZW50OyBvZiBjb3Vyc2UgdGhlIGNs aWVudCBmaXJzdCBoYXMgdG8KLSAgICAgICBFTkFCTEUgSE9TVCBiZWNhdXNlIHRoaXMgaXMgYSBy aXNreSBzY2VuYXJpbykuIFRoZSByZWFzb24gZm9yIHRoZQotICAgICAgIHJlc3RyaWN0aW9uIHdh cyB0aGF0IHRoZSBzZXJ2ZXIsIHVwb24gcmVjZWl2aW5nIGFueSBSRU1PVEUgY29tbWFuZAotICAg ICAgIHdvdWxkIHNlbmQgdGhlIHJlc3VsdHMgKG91dHB1dCkgYmFjayB0byB0aGUgY2xpZW50IGFz IGEgZmlsZQotICAgICAgIHRyYW5zZmVyIHdpdGggImRlc3RpbmF0aW9uIHNjcmVlbiIsIGJ1dCBv ZiBjb3Vyc2UgdGhlIHJlbW90ZSBoYXMgbm8KLSAgICAgICBzY3JlZW4uCi0gICAgICogQWRkZWQg WE1FU1NBR0UsIHdoaWNoIGlzIHRvIFs3OF1NRVNTQUdFIGFzIFhFQ0hPIGlzIEVDSE86IGl0Ci0g ICAgICAgb3V0cHV0cyBhIHN0cmluZyB3aXRoIG5vIGxpbmUgdGVybWluYXRvciBERUJVRyBNRVNT QUdFIGlzIE9OLgotICAgICAqIEZpeGVkIFxmcmVjdXJzZSgpIHRvIG5vdCBkdW1wIGNvcmUgd2hl biBpbnZva2VkIHdpdGggbm8gYXJndW1lbnRzLgotICAgICAqIEltcHJvdmVkIHRleHQgZm9yIEhF TFAgRlVOQ1RJT04gU1BMSVQgYW5kIEhFTFAgRlVOQ1RJT04gV09SRC4KLSAgICAgKiBQYXRjaGVz IGZvciBEZWJpYW4gNi4wICJTcXVlZXplIiBmcm9tIElhbiBCZWNrd2l0aC4KLSAgICAgKiBcZmNv bnRlbnRzKFwmYVszXSkgZ290IGFuIGVycm9yIGlmIHRoZSBhcnJheSB3YXMgZGVjbGFyZWQgYnV0 IGl0cwotICAgICAgIGRpbWVuc2lvbiB3YXMgbGVzcyB0aGFuIDMuIE5vdyBpdCBzaW1wbHkgcmV0 dXJucyBhbmQgZW1wdHkgc3RyaW5nLgotICAgICAqIFxmc3BsaXQoKSwgd2hlbiBwYXJzaW5nIGxp bmVzIGZyb20gQ1NWIGFuZCBUU1YgZmlsZXMsIHdhcyB0cmVhdGluZwotICAgICAgIGJhY2tzbGFz aCBpbiB0aGUgZGF0YSB0aGUgc2FtZSB3YXkgaXQgdHJlYXRzIGJhY2tzbGFzaCBpbiBLZXJtaXQK LSAgICAgICBjb21tYW5kcy4gVGhpcyB3YXMgZml4ZWQgdG8gdHJlYXQgYmFja3NsYXNoIGxpa2Ug YW55IG90aGVyCi0gICAgICAgY2hhcmFjdGVyLgotICAgICAqIEJ1aWxkcyBmb3IgU29sYXJpcyA5 IGFuZCBsYXRlciBub3cgdXNlIHN0cmVhbXMgcHR5cyByYXRoZXIgdGhlbiB0aGUKLSAgICAgICBv bGQgQlNELXN0eWxlIHB0eXMuIFRoYW5rcyB0byBHYXJ5IE1pbGxzIGZvciB0aGlzIG9uZSwgd2hv IG5vdGljZWQKLSAgICAgICB0aGF0IGhlIGNvdWxkbid0IGhhdmUgbW9yZSB0aGFuIDQ4IEMtS2Vy bWl0IFNTSCBzZXNzaW9ucyBnb2luZyBhdAotICAgICAgIG9uY2UgYW5kIGZpZ3VyZWQgb3V0IHdo eS4KLSAgICAgKiBBcyBub3RlZCBbNzldYmVsb3cgREVTIGVuY3J5cHRpb24gaXMgYmVpbmcgcmV0 aXJlZCBmcm9tIG1hbnkKLSAgICAgICBwbGF0Zm9ybXMgYW5kIGxpYnJhcmllcyB0aGF0IG9uY2Ug dXNlZCBpdC4gSSBjaGFuZ2VkIHRoZSBTb2xhcmlzCi0gICAgICAgYW5kIExpbnV4IE9wZW5TU0wg YnVpbGRzIHRvIGFjY291bnQgZm9yIHRoaXMgYnkgdGVzdGluZyBmb3IgaXQuIEkKLSAgICAgICBw cm9iYWJseSBzaG91bGQgYWxzbyBhZGQgYSBPTUlUREVTIG9wdGlvbiB0byBvbWl0IERFUyBldmVu IGlmIGl0IGlzCi0gICAgICAgaW5zdGFsbGVkLCBidXQgIktGTEFHUz0tVUNLX0RFUyIgc2VlbXMg dG8gZG8gdGhlIGpvYiBmb3Igbm93LgotICAgICAqIEkgY2hhbmdlZCB0aGUgTGludXggYnVpbGQg dG8gdGVzdCBmb3IgdGhlIE9wZW5TU0wgdmVyc2lvbiAobGlrZSB0aGUKLSAgICAgICBTb2xhcmlz IHZlcnNpb24gYWxyZWFkeSBkaWQpLCByYXRoZXIgdGhhbiBhc3N1bWluZyBPcGVuU1NMIDAuOS43 LgotICAgICAqIEEgY291cGxlIG1pbm9yIGNoYW5nZXMgZm9yIFRydTY0IFVuaXggNS4xQiBmcm9t IFN0ZXZlbiBTY2h3ZWRhIGJ1dAotICAgICAgIHdlIHN0aWxsIGhhdmUgc29tZSB0cm91YmxlIG9u IHRoYXQgcGxhdGZvcm0uIEFzIGEgd29ya2Fyb3VuZCAibWFrZQotICAgICAgIG9zZjEiIGNhbiBi ZSB1c2VkIHRoZXJlLgotICAgICAqIFVuaXggbWFrZWZpbGUgYW5kIG1hbiBwYWdlIGFyZSBub3cg aW5jbHVkZWQgaW4gdGhlIFppcAotICAgICAgIGRpc3RyaWJ1dGlvbi4KLSAgICAgKiBcZmpvaW4o KSwgd2hpY2ggaXMgdGhlIGludmVyc2UgZnVuY3Rpb24gb2YgZnNwbGl0KCkgbm93IGFjY2VwdHMg Q1NWCi0gICAgICAgYW5kIFRTViBhcyBhIHNlY29uZCBhcmd1bWVudCwgdG8gdHJhbnNmb3JtIGFu IGFycmF5IGludG8gYQotICAgICAgIGNvbW1hLXNlcGFyYXRlZCBvciB0YWItc2VwYXJhdGVkIHZh bHVlIGxpc3QsIGFzIGRlc2NyaWJlZCBbODBdSEVSRS4KLSAgICAgKiBFdmVuIGluIDIwMTAsIFVu aXggZGlzdHJpYnV0aW9ucyBjb250aW51ZSB0byBjaGFuZ2UgdGhlaXIgVVVDUAotICAgICAgIGxv Y2tmaWxlIGNvbnZlbnRpb25zLiBDLUtlcm1pdCA5LjAgY29udGFpbnMgc3VwcG9ydCBmcm9tIEpv b3AKLSAgICAgICBCb29uZW4gZm9yIE9wZW5TdVNFID49IDExLjMgYW5kIHJlY2VudCBEZWJpYW4s IHdoaWNoIG5vIGxvbmdlciBoYXZlCi0gICAgICAgYmF1ZGJveS5oLCB3aGljaCBmaXJzdCBhcHBl YXJlZCBpbiBSZWQgSGF0IDcuMiBpbiAyMDAzLgotICAgICAqIEZyb20gTGV3aXMgTWNDYXJ0aHk6 Ci0KLSAgICAgQmFzZWQgb24gY29kZSBpbnNwZWN0aW9uLCBDLUtlcm1pdCBhcHBlYXJzIHRvIGhh dmUgYW4gU1NMLXJlbGF0ZWQKLSAgICAgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBhbmFsb2dvdXMg dG8gdGhhdCBpZGVudGlmaWVkIGFzIENWRS0yMDA5LTM3NjcKLSAgICAgKHNlZSBlLmcuCi0gICAg IFs4MV1odHRwOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIw MDktMzc2NykuCi0KLSAgICAgSSdtIGF0dGFjaGluZyBhIHBhdGNoIGZvciB0aGlzIGlzc3VlIHJl bGF0aXZlIHRvIHRoZSByZXZpc2lvbiBvZgotICAgICBja19zc2wuYyBvYnRhaW5lZCBmcm9tIGEg Y29weSBvZgotICAgICBbODJdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cC90ZXN0 L3Rhci94LnppcCBkb3dubG9hZGVkIG9uCi0gICAgIDIwMTAvMDcvMzAsIHdoaWNoIEkgYmVsaWV2 ZSBpcyB0aGUgbGF0ZXN0LgotICAgICBXaGVuIHRoaXMgZmxhdyB3YXMgZmlyc3Qgd2lkZWx5IHB1 YmxpY2l6ZWQgYXQgbGFzdCB5ZWFyJ3MgQmxhY2sgSGF0Ci0gICAgIGNvbmZlcmVuY2UsIGl0IHdh cyBjbGFpbWVkIHRoYXQgc29tZSBwdWJsaWMgY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMKLSAgICAg aGFkIGluZGVlZCBpc3N1ZWQgY2VydGlmaWNhdGVzIHRoYXQgY291bGQgYmUgdXNlZCB0byBleHBs b2l0IHRoaXMKLSAgICAgY2xhc3Mgb2YgdnVsbmVyYWJpbGl0eS4gQXMgZmFyIGFzIEkga25vdyB0 aGV5IGhhdmUgbm90IHJldmVhbGVkCi0gICAgIHNwZWNpZmljYWxseSB3aGljaCBwdWJsaWMgQ0Eo cykgaGFkIGJlZW4gZm91bmQgaXNzdWluZyBzdWNoCi0gICAgIGNlcnRpZmljYXRlcy4gU29tZSBy ZWZlcmVuY2VzOgotICAgICAgICAgICsgWzgzXWh0dHA6Ly93d3cubXNlY2xhYi5jb20vP3A9MTgw Ci0gICAgICAgICAgKyBbODRdaHR0cDovL3d3dy50aGVyZWdpc3Rlci5jby51ay8yMDA5LzA3LzMw L3VuaXZlcnNhbF9zc2xfY2VydAotICAgICAgICAgICAgaWZpY2F0ZS8KLQotICAgICAqIFBldGVy IEVpY2hob3JuIHJlcG9ydGVkIHRoYXQgIlJFTkFNRSAuLi94IC4iIGRpZG4ndCB3b3JrOyBmaXhl ZAotICAgICAgIG5vdy4KLSAgICAgKiBJZiBvbmx5IG9uZSBmaWxlIGlzIEZPUEVOJ2QsIEZDTE9T RSBnaXZlbiB3aXRoIG5vIGFyZ3VtZW50cyB3b3VsZAotICAgICAgIGNsb3NlIGl0OyB0aGlzIHdh cyBhICJjb252ZW5pZW5jZSBmZWF0dXJlIiB0aGF0IHR1cm5lZCBvdXQgdG8gYmUKLSAgICAgICBk YW5nZXJvdXMuIEZvciBzYWZldHkgRkNMT1NFIGhhcyB0byByZXF1aXJlIGEgc3BlY2lmaWMgY2hh bm5lbAotICAgICAgIG51bWJlciBvciB0aGUgd29yZCBBTEwuCi0gICAgICogQWRkZWQgXGZzdHJj bXAoczEsczIsY2FzZSxzdGFydCxsZW5ndGgpLCB3aGljaCBoYXMgdGhlIGFkdmFudGFnZQotICAg ICAgIG92ZXIgSUYgRVFVLExHVCxMTFQgdGhhdCBjYXNlIHNlbnNpdGl2aXR5IGNhbiBiZSBzcGVj aWZpZWQgYXMgYQotICAgICAgIGZ1bmN0aW9uIGFyZywgYW5kIGFsc28gc3Vic3RyaW5ncyBjYW4g YmUgc3BlY2lmaWVkLgotICAgICAqIE5ldyBidWlsdC1pbiBmdW5jdGlvbnM6Ci0KLSAgICAgICAg XGZjdnRjc2V0cyhzdHJpbmcsY3MxLGNzMikKLSAgICAgICAgICAgICAgICBGdW5jdGlvbiB0byBj b252ZXJ0IGEgc3RyaW5nIGZyb20gb25lIGNoYXJhY3RlciBzZXQgdG8KLSAgICAgICAgICAgICAg ICBhbm90aGVyLgotCi0gICAgICAgIFxmZGVjb2RlaGV4KHN0cmluZ1sscHJlZml4XSkKLSAgICAg ICAgICAgICAgICBGdW5jdGlvbiB0byBkZWNvZGUgYSBzdHJpbmcgY29udGFpbmluZyBoZXggZXNj YXBlcy4KLQotICAgICAgICBcZnN0cmluZ3R5cGUoc3RyaW5nKQotICAgICAgICAgICAgICAgIEZ1 bmN0aW9uIHRvIHRlbGwgd2hldGhlciBhIHN0cmluZyBpcyA3LWJpdCwgOC1iaXQsIG9yCi0gICAg ICAgICAgICAgICAgVVRGLTguCi0KLSAgICAgICBGb3IgdGhlIG1vdGl2YXRpb24gZm9yIHRoZXNl IGZlYXR1cmVzIGFuZCBhbiBhcHBsaWNhdGlvbiB0aGF0IHVzZXMKLSAgICAgICB0aGVtIHRvIGFu YWx5emUgd2ViIGxvZ3MsIHNlZSB0aGUgV2VibG9nIHNjcmlwdCBiZWxvdy4KLSAgICAgKgotCi0g ICAgICAgIExhenkgSUYgQ29uZGl0aW9uczogTm93IHlvdSBjYW4gZG8gdGhpczoKLSAgICAgICAg ICAgICAgICBkZWZpbmUgZm9vIHNvbWUgbnVtYmVyCi0gICAgICAgICAgICAgICAgaWYgZm9vIGNv bW1hbmQKLQotICAgICAgICBpbnN0ZWFkIG9mIHRoaXM6Ci0gICAgICAgICAgICAgICAgZGVmaW5l IGZvbyBzb21lIG51bWJlcgotICAgICAgICAgICAgICAgIGlmIFxtKGZvbykgY29tbWFuZAotCi0g ICAgICAgT2YgY291cnNlIHRoZSBvbGQgd2F5IHN0aWxsIHdvcmtzIHRvby4gQnV0IHdhdGNoIG91 dCBiZWNhdXNlIGlmIHRoZQotICAgICAgIHZhcmlhYmxlIG5hbWUgaXMgdGhlIHNhbWUgYXMgYSBz eW1ib2xpYyBJRiBjb25kaXRpb24gKGZvciBleGFtcGxlCi0gICAgICAgQ09VTlQpLCBpdCB3b24n dCBkbyB3aGF0IHlvdSBleHBlY3RlZC4gKElGIENPVU5UIHdhcyB1c2VkIGZvciBsb29wCi0gICAg ICAgY29udHJvbCBpbiBlYXJseSB2ZXJzaW9ucyBvZiBNUy1ET1MgS2VybWl0LCBiZWZvcmUgaXQg Z290IHJlYWwgRk9SCi0gICAgICAgYW5kIFdISUxFIGxvb3BzOyBpdCB3YXMgYWRkZWQgdG8gQy1L ZXJtaXQgZm9yIGNvbXBhdGliaWxpdHksIGFuZCBpdAotICAgICAgIGNhbid0IGJlIHJlbW92ZWQg YmVjYXVzZSB0aGF0IGNvdWxkIGJyZWFrIGV4aXN0aW5nIHNjcmlwdHMpLgotICAgICAqIEVzY2Fw ZSBzZXF1ZW5jZXMgYXJlIG5vdyBzdHJpcHBlZCBmcm9tIHRleHQtbW9kZSBzZXNzaW9uIGxvZ3Mg bm90Ci0gICAgICAgb25seSBpbiBDT05ORUNUIHNlc3Npb25zIGJ1dCBhbHNvIGluIHdoYXRldmVy IGlzIGxvZ2dlZCBieSB0aGUKLSAgICAgICBJTlBVVCBjb21tYW5kOyBkZXNjcmliZWQgaW4gdGhl IFs4NV1uZXh0IHNlY3Rpb24uCi0gICAgICogTmV3IGNvbW1hbmRzIGZvciBzZWxlY3RpdmVseSBp c3N1aW5nIHByb2dyZXNzIG9yIGRlYnVnZ2luZyBtZXNzYWdlcwotICAgICAgIGZyb20gc2NyaXB0 cywgYWxzbyBkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbi4KLSAgICAgKiBGaXggZnJvbSBb ODZdSm9obiBEdW5sYXAgdG8gcHJldmVudCB0aGUgZml4ZWQgcGFja2V0LXRpbWVvdXQKLSAgICAg ICBpbnRlcnZhbCBmcm9tIGdvaW5nIHRvIGFuIHVuZXhwZWN0ZWQgdmFsdWUuCi0gICAgICogQWxw aGEuMDQgZml4ZXMgYSBwcm9ibGVtIHdpdGggRlRQIGNvbm5lY3Rpb25zIG1hZGUgZnJvbSA2NC1i aXQgVW5peAotICAgICAgIHBsYXRmb3Jtcy4gQWxsIHRoZSBvdGhlciBjaGFuZ2VzIGluIHRoaXMg c2VjdGlvbiB3ZXJlIHRvIEFscGhhLjAzLgotICAgICAqIFJlbGF1bmNoaW5nIGEgY2xvc2VkIFNT SCBjb25uZWN0aW9uIHdpdGggdGhlIENPTk5FQ1QgY29tbWFuZCBpcyBub3cKLSAgICAgICBwb3Nz aWJsZSwgYXMgaXQgYWx3YXlzIGhhcyBiZWVuIHdpdGggVGVsbmV0IGFuZCBvdGhlciBjb25uZWN0 aW9uCi0gICAgICAgdHlwZXM7IHN1Z2dlc3RlZCBieSBQZXRlciBFaWNoaG9ybiAobmVlZHMgdGVz dGluZykuCi0gICAgICogQSBzeW1ib2wgY29uZmxpY3QgZml4ZWQgdGhhdCBwcmV2ZW50ZWQgc3Vj Y2Vzc2Z1bCBidWlsZCBvbgotICAgICAgIFs4N11GcmVlQlNEIDguMC4KLSAgICAgKiBGaXhlcyBm cm9tIENocmlzdGlhbiBDb3J0aSBmb3IgYnVpbGRpbmcgb24gU3VuT1MgNC4xLgotICAgICAqIE5l dyBhaXhnIHRhcmdldCBmb3IgYnVpbGRpbmcgb24gQUlYIHdpdGggZ2NjLgotICAgICAqIE5ldyBh aXgraWJtc3NsIHRhcmdldC4gVGhpcyBpcyBuaWNlIGJlY2F1c2UgdGhlIElCTS1zdXBwbGllZCBT U0wKLSAgICAgICBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcyBhcmUgaW4gYSBrbm93biBsb2Nh dGlvbjsgbm8gbmVlZCB0bwotICAgICAgIFs4OF1zZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGdp dmluZyB0aGVpciBsb2NhdGlvbnMuCi0gICAgICogIkxhcmdlIEZpbGUgU3VwcG9ydCIgaXMgbm93 IGluY2x1ZGVkIGJ5IGRlZmF1bHQgb24gQWxwaGEgYW5kIElBNjQKLSAgICAgICBoYXJkd2FyZSBv biBWTVMgNy4zIGFuZCBsYXRlciwgYW5kIGl0IHNob3VsZCB3b3JrIG11Y2ggYmV0dGVyIHRoYW4K LSAgICAgICBiZWZvcmUuCi0gICAgICogS2VybWl0J3MgaW50ZXJuYWwgRlRQIGNsaWVudCBpcyBu b3cgaW5jbHVkZWQgYnkgZGVmYXVsdCBpbiBhbnkKLSAgICAgICBidWlsZCB0aGF0IGFsc28gaW5j bHVkZXMgVENQL0lQIG5ldHdvcmtpbmcuIEF0IHByZXNlbnQsIHRoZSBGVFAKLSAgICAgICBjbGll bnQgc2VlbXMgdG8gd29yayB3ZWxsIGZvciBiaW5hcnktbW9kZSB0cmFuc2ZlcnM7IHRleHQgKEFT Q0lJKQotICAgICAgIG1vZGUgdHJhbnNmZXJzIHN0aWxsIG5lZWQgc29tZSB3b3JrLiBJbiBidWls ZHMgdGhhdCBhbHNvIGluY2x1ZGUKLSAgICAgICBTZWN1cmUgU29ja2V0cyBMYXllciAoU1NMKSBz ZWN1cml0eSAobmV4dCBpdGVtKSB0aGUgRlRQIGNsaWVudAotICAgICAgIHNob3VsZCBiZSBhYmxl IHRvIG1ha2Ugc2VjdXJlbHkgYXV0aGVudGljYXRlZCBhbmQgZW5jcnlwdGVkCi0gICAgICAgY29u bmVjdGlvbnMuCi0gICAgICogSW4gbmV0d29yayBidWlsZHMgdGhhdCByZXF1ZXN0IE9wZW5TU0wg c3VwcG9ydCwgZS5nLjoKLQotICAgICAkIEBja3ZrZXIgICIiICAiIiAgIkNLX1NTTCIKLSAgICAg ICB0aGUgT3BlblNTTCB2ZXJzaW9uIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkgYW5kIHRoZSBh cHByb3ByaWF0ZQotICAgICAgIGNvbXBpbGUtdGltZSBvcHRpb25zIGFyZSBlbWl0dGVkIChzdWNo IGFzCi0gICAgICAgT1BFTlNTTF9ESVNBQkxFX09MRF9ERVNfU1VQUE9SVCkuCi0gICAgICogUHJl bGltaW5hcnkgLyBsaW1pdGVkIHN1cHBvcnQgZm9yIHRoZSBPRFMtNSBmaWxlIHN5c3RlbSBvbiBW TVMgNy4yCi0gICAgICAgYW5kIGxhdGVyLCBBbHBoYSBhbmQgSXRhbml1bSBvbmx5IChuZWVkcyB0 ZXN0aW5nKTogRmlsZW5hbWVzIGNhbiBiZQotICAgICAgIG1peGVkIGNhc2UgYW5kIGNhbiBiZSBs b25nZXIuCi0gICAgICogU3VwcG9ydCBmb3Igb2xkZXIgYW5kIG9sZGVyIFZNUyB2ZXJzaW9ucy4K LSAgICAgKiBJbiB0aGUgVk1TIGJ1aWxkIHByb2NlZHVyZSwgQ0tWS0VSLkNPTSwgdGhlICJpIiBv cHRpb24gaW4gUDEgbm93Ci0gICAgICAgbWVhbnMgZG9uJ3QgaW5jbHVkZSB0aGUgaW50ZXJuYWwg RlRQIGNsaWVudCwgYW5kIHRoZSAiZiIgb3B0aW9uCi0gICAgICAgbWVhbnMgZG8gbm90IGluY2x1 ZGUgIkxhcmdlIEZpbGUiIHN1cHBvcnQuIExhcmdlIEZpbGUgc3VwcG9ydCBpbgotICAgICAgIFZN UyByZWFsbHkgb25seSBhcHBsaWVzIHRvIHRoZSBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgYW5kCi0g ICAgICAgc3RhdGlzdGljcywgd2hpY2ggd291bGQgZ28gb3V0IG9mIHdoYWNrIGFzIHNvb24gYXMg dGhlIGJ5dGUgY291bnQKLSAgICAgICBvdmVyZmxvd2VkIDMxIGJpdHMgYmVjYXVzZSB0aGlzIGlz IEMtS2VybWl0LCBidWlsdCB3aXRoIHRoZSBDCi0gICAgICAgY29tcGlsZXIgYW5kIHRoZSBDIGxp YnJhcnkgKHJ1bnRpbWUgc3lzdGVtKSwgd2hpY2ggZGlkIG5vdCBzdXBwb3J0Ci0gICAgICAgbG9u ZyBpbnRlZ2VycyB1bnRpbCBWTVMgNy4zLgotICAgICAqIFRoZSBbODldTElTUCBPcGVyYXRvciBS T1VORCBub3cgdGFrZXMgYW4gb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50Ci0gICAgICAgdGhhdCBz cGVjaWZpZXMgdGhlIG51bWJlciBvZiBwbGFjZXMgdG8gcm91bmQgdG8sIGUuZy4KLSAgICAgICAo Uk9VTkQgZG9sbGFycyAyKSByb3VuZHMgZG9sbGFycyB0byAyIGRlY2ltYWwgcGxhY2VzLgotICAg ICAqIEltcHJvdmVkIHBhdHRlcm4gbWF0Y2hpbmcgaW4gbWFueSBjb21tYW5kcyBmb3IgYm90aCBz dHJpbmdzIGFuZAotICAgICAgIGZpbGVuYW1lcy4KLSAgICAgKiBWYXJpb3VzIG1pbm9yIG5ldyBm ZWF0dXJlcywgcGx1cyBudW1lcm91cyBidWcgZml4ZXMgYW5kIHNwZWVkdXBzLgotCi1JbmNvbXBh dGliaWxpdGllcwotCi0gICBBIHRvcCBwcmlvcml0eSBmb3IgbmV3IEtlcm1pdCBzb2Z0d2FyZSBy ZWxlYXNlcyBoYXMgYWx3YXlzIGJlZW4KLSAgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBBIHNj cmlwdCB3cml0dGVuIGZvciBhIHByZXZpb3VzIEtlcm1pdCByZWxlYXNlCi0gICBzaG91bGQgcnVu IHRoZSBzYW1lIHdheSBpbiB0aGUgbmV3IHJlbGVhc2UuCi0KLSAgIFRoZXJlJ3Mgb25lIGV4Y2Vw dGlvbiB0aGlzIHRpbWUuIFRoZSBbOTBdXGZzcGxpdCgpIGZ1bmN0aW9uIGlzCi0gICBpbmNyZWRp Ymx5IGhhbmR5LCBpdCBjYW4gZG8gYWxtb3N0IGFueXRoaW5nLCB1cCB0byBhbmQgaW5jbHVkaW5n Ci0gICBwYXJzaW5nIGEgTElTUCBwcm9ncmFtICh0aGUgdW5kZXJseWluZyBjb2RlIGlzIHRoZSBi YXNpcyBvZiB0aGUKLSAgIFs5MV1TLUV4cHJlc3Npb24gaW50ZXJwcmV0ZXIpLiBCdXQgZGlkIHlv dSBldmVyIHRyeSB0byB1c2UgaXQgdG8gcGFyc2UKLSAgIChzYXkpIGEgVGFiLVNlcGFyYXRlZC1M aXN0IChUU1YgZmlsZSkgb3IgQ29tbWEtU2VwYXJhdGVkLUxpc3QgKENTVik/IEl0Ci0gICB3b3Jr cyBhcyBleHBlY3RlZCBhcyBsb25nIGFzIHRoZSBkYXRhIGNvbnRhaW5zIG9ubHkgNy1iaXQgY2hh cmFjdGVycy4KLSAgIEJ1dCBpZiB5b3VyIGRhdGEgY29udGFpbnMgKHNheSkgU3BhbmlzaCBvciBH ZXJtYW4gb3IgUnVzc2lhbiB0ZXh0Ci0gICB3cml0dGVuIGluIGFuIDgtYml0IGNoYXJhY3RlciBz ZXQgc3VjaCBhcyBJU08gODg1OS0xLCBldmVyeSA4LWJpdAotICAgY2hhcmFjdGVyIChhbnkgdmFs dWUgMTI4LTI1NSkgaXMgdHJlYXRlZCBhcyBhIGJyZWFrIGNoYXJhY3Rlci4gVGhpcyBpcwotICAg Zml4ZWQgaW4gQy1LZXJtaXQgOS4wIGJ5IHRyZWF0aW5nIGFsbCA4LWJpdCBieXRlcyBhcyAiaW5j bHVkZSIKLSAgIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gYnJlYWsgY2hhcmFjdGVycywgYSB0b3Rh bCByZXZlcnNhbCBvZiBwYXN0Ci0gICBiZWhhdmlvci4gSSBkb24ndCB0aGluayBpdCB3aWxsIGFm ZmVjdCBhbnlvbmUgdGhvdWdoLCBiZWNhdXNlIGlmIHRoaXMKLSAgIGhhZCBoYXBwZW5lZCB0byBh bnlvbmUsIEkgd291bGQgaGF2ZSBoZWFyZCBhYm91dCBpdCEKLQotICAgU2luY2UgbW9zdCBzdGFu ZGFyZCA4LWJpdCBjaGFyYWN0ZXIgc2V0cyBoYXZlIGNvbnRyb2wgY2hhcmFjdGVycyBpbgotICAg cG9zaXRpb25zIDEyOC0xNjAsIGl0IG1pZ2h0IGhhdmUgbWFkZSBzZW5zZSB0byBrZWVwIDEyOC0x NjAgaW4gdGhlCi0gICBicmVhayBzZXQsIGJ1dCB3aXRoIHRoZSBwcm9saWZlcmF0aW9uIG9mIE1p Y3Jvc29mdCBXaW5kb3dzIGNvZGUgcGFnZXMsCi0gICB0aGVyZSBpcyBubyB0ZWxsaW5nIHdoaWNo IDgtYml0IGNoYXJhY3RlciBpcyBsaWtlbHkgdG8gYmUgc29tZSBraW5kIG9mCi0gICB0ZXh0LCBl LmcuICJzbWFydCBxdW90ZXMiIG9yIEVhc3QgRXVyb3BlYW4gb3IgVHVya2lzaCBhY2NlbnRlZCBs ZXR0ZXJzLgotCi1XaGF0J3MgTm90IEluIEMtS2VybWl0IDkuMAotCi0gICBTb21lIGxhcmdlIHBy b2plY3RzIHRoYXQgd2VyZSBjb250ZW1wbGF0ZWQgaGF2ZSBub3QgYmVlbiBkb25lLAotICAgaW5j bHVkaW5nOgotICAgICAqIElQdjYuIEhvbmVzdGx5LCB0aGVyZSBoYXMgYmVlbiB6ZXJvIGRlbWFu ZCBmb3IgdGhpcywgYW5kIGl0IHdvdWxkCi0gICAgICAgYmUgYSBsb3Qgb2Ygd29yayBhbmQgZGlz cnVwdGlvbiB0byB0aGUgY29kZSBiYXNlLiBWb2x1bnRlZXJzCi0gICAgICAgd2VsY29tZSwgSSBn dWVzcy4gSXQgY291bGQgYmUgYSBDUyBwcm9qZWN0LgotICAgICAqIEEgZGF0YWJhc2UgaW50ZXJm YWNlIC0gTXlTUUwgb3IgT0RCQy4gRm9yIHRoaXMgb25lLCB0aGVyZSBpcyBzb21lCi0gICAgICAg ZGVtYW5kIGJ1dCBJIGhhdmVuJ3QgaGFkIGEgY2hhbmNlIHRvIGV2ZW4gbG9vayBpbnRvIGl0Lgot ICAgICAqIFRoZXJlJ3MgYSBsb29taW5nIGlzc3VlIHdpdGggREVTIGVuY3J5cHRpb247IG1ham9y IHZlbmRvcnMgYXJlCi0gICAgICAgcmVtb3ZpbmcgaXQgZnJvbSB0aGVpciBwbGF0Zm9ybXMsIHN0 YXJ0aW5nIHdpdGggQXBwbGUgaW4gTWFjIE9TIFgKLSAgICAgICAxMC42LCB3aXRoIE1pY3Jvc29m dCB0byBmb2xsb3cgc3VpdC4gQSBzZWN1cmUgdmVyc2lvbiBvZiBLZXJtaXQgY2FuCi0gICAgICAg YmUgYnVpbHQgd2l0aG91dCBERVMsIGJ1dCBpbiBsaW1pdGVkIHRlc3Rpbmcgc3VjY2Vzc2Z1bCBj b25uZWN0aW9ucwotICAgICAgIHdlcmUgc3BvdHR5IChlLmcuIHdpdGggS2VyYmVyb3MgNSkuCi0g ICAgICogQ2xlYW5pbmcgdXAgdGhlIFVuaXggbWFrZWZpbGUuIEl0IGhhcyAyNSB5ZWFycycgd29y dGggb2YgdGFyZ2V0cyBpbgotICAgICAgIGl0LiBJdCBpcyB2ZXJ5IGxpa2VseSBzYWZlIHRvIHJl bW92ZSBtb3N0IG9mIHRoZW0sIHNpbmNlIChhKSBtb3N0Ci0gICAgICAgb2xkIHBsYXRmb3JtcyBo YXZlIGdvbmUgYXdheSBieSBub3csIG9yIGhhdmUgYmVlbiB1cGdyYWRlZCwgZHVlIHRvCi0gICAg ICAgaGFja2luZyB2dWxuZXJhYmlsaXRpZXM7IChiKSB0aGUgbWFya2V0IGhhcyBjb25zb2xpZGF0 ZWQKLSAgICAgICBjb25zaWRlcmFibHk7IGFuZCAoYykgbW9zdCBvZiB0aGUgbmV3IGZlYXR1cmVz IG9mIEMtS2VybWl0IDkuMCwKLSAgICAgICBzdWNoIGFzIGxhcmdlIGZpbGVzLCB3b24ndCBiZSBv ZiBhbnkgdXNlIG9uIG9sZGVyIHBsYXRmb3JtcyBhbmQKLSAgICAgICBwcmV2aW91cyBDLUtlcm1p dCB2ZXJzaW9ucyB3aWxsIHJlbWFpbiBhdmFpbGFibGUuCi0gICAgICogUGFja2FnZXMuIEV2ZXJ5 Ym9keSB3YW50cyBhbiBpbnN0YWxsIHBhY2thZ2UgY3VzdG9tIG1hZGUgZm9yIHRoZWlyCi0gICAg ICAgb3duIGNvbXB1dGVyLCBMaW51eCBSUE1zIGJlaW5nIHRoZSBwcmltZSBleGFtcGxlIGJ1dCBm YXIgZnJvbSB0aGUKLSAgICAgICBvbmx5IG9uZS4gVGhlc2Ugd2lsbCBjb21lLCBJIHN1cHBvc2Ug KGVzcGVjaWFsbHkgd2l0aCBzb21lIExpbnV4Ci0gICAgICAgc2l0ZXMgaGF2aW5nIGEgcG9saWN5 IGFnYWluc3QgaW5zdGFsbGluZyBhbnkgYXBwbGljYXRpb24gdGhhdCBkb2VzCi0gICAgICAgbm90 IGNvbWUgYXMgYW4gUlBNKS4gSW4gdGhlIG1lYW50aW1lLCBoZXJlJ3MgYSBwYWdlIHRoYXQgZGVz Y3JpYmVzCi0gICAgICAgc29tZSBLZXJtaXQtc3BlY2lmaWMgaXNzdWVzIGluIHBhY2thZ2UgY29u c3RydWN0aW9uOgotICAgICAgIFs5Ml1ja3BhY2thZ2VzLmh0bWwuCi0KLUFuZCBhIExvb3NlIEVu ZC4uLgotVXNpbmcgRXh0ZXJuYWwgRmlsZS1UcmFuc2ZlciBQcm90b2NvbHMgb24gU2VjdXJlIENv bm5lY3Rpb25zCi0KLSAgIEFmdGVyIEMtS2VybWl0IDguMC4yMTIgRGV2LjI3ICgyMDA2LzEyLzIy KSwgSSBzcGVudCBhIGJpZyBjaHVuayBvZiB0aW1lCi0gICB0cnlpbmcgdG8gc29sdmUgYSBwYXJ0 aWN1bGFyIHByb2JsZW0gdGhhdCBzb21lIG9mIHlvdSBoYXZlIGNvbXBsYWluZWQKLSAgIGFib3V0 IGFuZCBvdGhlcnMgbWlnaHQgYmUgZmFtaWxpYXIgd2l0aDogSWYgeW91IHVzZSBDLUtlcm1pdCB0 byBtYWtlIGEKLSAgIHNlY3VyZSBUZWxuZXQgY29ubmVjdGlvbiB0byBhbm90aGVyIGhvc3QgKGUu Zy4gd2l0aCBUZWxuZXQgU1NML1RMUywKLSAgIEtlcmJlcm9zLCBvciBTUlApIGFuZCB0aGVuIGF0 dGVtcHQgdG8gdHJhbnNmZXIgYSBmaWxlIHVzaW5nIGFuIGV4dGVybmFsCi0gICBwcm90b2NvbCBz dWNoIGFzIFptb2RlbSwgaXQgZG9lc24ndCB3b3JrLgotCi0gICBUaGF0J3MgYmVjYXVzZSBhcyBj b2RlZCAodGhyb3VnaCA4LjAuMjExKSwgQy1LZXJtaXQgc2ltcGx5IHN0YXJ0cyB0aGUKLSAgIGV4 dGVybmFsIHByb3RvY29sIGluIGEgZm9yayB3aXRoIGl0cyBzdGFuZGFyZCBpL28gcmVkaXJlY3Rl ZCB0byB0aGUKLSAgIGNvbm5lY3Rpb24uIFRoaXMgY29tcGxldGVseSBieXBhc3NlcyB0aGUgZW5j cnlwdGlvbiBhbmQgZGVjcnlwdGlvbiB0aGF0Ci0gICBpcyBkb25lIGJ5IEMtS2VybWl0IGl0c2Vs ZiwgYW5kIG9mIGNvdXJzZSBpdCBkb2Vzbid0IHdvcmsuIFRoZSBzYW1lCi0gICB0aGluZyBvY2N1 cnMgaWYgeW91IHVzZSB0aGUgUkVESVJFQ1QgY29tbWFuZC4gVGhlIHJvdXRpbmUgdGhhdCBoYW5k bGVzCi0gICB0aGlzIGlzIHR0cnVuY21kKCkgaW4gY2t1dGlvLmMuCi0KLSAgIEluIG9yZGVyIHRv IGFsbG93IChzYXkpIFptb2RlbSB0cmFuc2ZlcnMgb24gc2VjdXJlIGNvbm5lY3Rpb25zLCBpdCBp cwotICAgbmVjZXNzYXJ5IGZvciBDLUtlcm1pdCB0byBpbnRlcnBvc2UgaXRzZWxmIGJldHdlZW4g dGhlIGV4dGVybmFsIFptb2RlbQotICAgcHJvZ3JhbSBhbmQgdGhlIGNvbm5lY3Rpb24sIGRlY3J5 cHRpbmcgdGhlIGluY29taW5nIHN0cmVhbSBiZWZvcmUKLSAgIGZlZWRpbmcgaXQgdG8gWm1vZGVt IGFuZCBlbmNyeXB0aW5nIFptb2RlbSdzIG91dHB1dCBiZWZvcmUgc2VuZGluZyBvdXQKLSAgIHRo ZSBjb25uZWN0aW9uLgotCi0gICBJbiBwcmluY2lwYWwsIHRoaXMgaXMgc2ltcGxlIGVub3VnaC4g V2Ugb3BlbiBhIHBzZXVkb3Rlcm1pbmFsIHBhaXIKLSAgICgibWFzdGVyIiBhbmQgInNsYXZlIikg Zm9yIFptb2RlbSdzIGkvbyBhbmQgd2UgY3JlYXRlIGEgZm9yayBhbmQgc3RhcnQKLSAgIFptb2Rl bSBpbiBpdDsgd2UgcmVhZCBmcm9tIHRoZSBmb3JrIHB0eSdzIHN0YW5kYXJkIG91dHB1dCwgZW5j cnlwdCwgYW5kCi0gICBzZW5kIHRvIHRoZSBuZXQ7IHdlIHJlYWQgZnJvbSB0aGUgbmV0LCBkZWNy eXB0LCBhbmQgd3JpdGUgdG8gdGhlIGZvcmsKLSAgIHB0eSdzIHN0YW5kYXJkIGlucHV0LgotCi0g ICBJbiBwcmFjdGljZSwgaXQncyBub3Qgc28gc2ltcGxlLiBGaXJzdCBvZiBhbGwsIHBzZXVkb3Rl cm1pbmFscyAocHR5cykKLSAgIGRvbid0IHNlZW0gdG8gaW50ZXJmYWNlIGNvcnJlY3RseSB3aXRo IGNlcnRhaW4gY3J1Y2lhbCBBUElzLCBhdCBsZWFzdAotICAgbm90IGluIHRoZSBPUydzIEkgaGF2 ZSB0cmllZCAoTWFjIE9TIFgsIExpbnV4LCBOZXRCU0QsIGV0YyksIHN1Y2ggYXMKLSAgIHNlbGVj dCgpLiBBbmQgaS9vIHdpdGggdGhlIHB0eSBvZnRlbiAtIHBlcmhhcHMgYWx3YXlzIC0gZmFpbHMg dG8KLSAgIGluZGljYXRlIGVycm9ycyB3aGVuIHRoZXkgb2NjdXI7IGZvciBleGFtcGxlLCB3aGVu IHRoZSBmb3JrIGhhcyBleGl0ZWQuCi0KLSAgIEJ1dCwgZXZlbiBhZnRlciBjb2RpbmcgYXJvdW5k IHRoZSBhcHBhcmVudCB1c2VsZXNzbmVzcyBvZiBzZWxlY3QoKSBmb3IKLSAgIG11bHRpcGxleGlu ZyBwdHkgYW5kIG5ldCwgYW5kIHVzaW5nIHZhcmlvdXMgdHJpY2tzIHRvIGRldGVjdCB3aGVuIHRo ZQotICAgZXh0ZXJuYWwgcHJvdG9jb2wgZXhpdHMgYW5kIHdoYXQgaXRzIGV4aXQgc3RhdHVzIGlz LCBJJ20gc3RpbGwgbGVmdAotICAgd2l0aCBhIHNob3ctc3RvcHBpbmcgcHJvYmxlbTogSSBqdXN0 IHNpbXBseSBjYW4gbm90IGRvd25sb2FkIChyZWNlaXZlKQotICAgYSBmaWxlIHdpdGggWm1vZGVt LCB3aGljaCBpcyB0aGUgbWFpbiB0aGluZyB0aGF0IHBlb3BsZSB3b3VsZCBwcm9iYWJseQotICAg d2FudCB0byBkby4gSSBjYW4gc2VuZCBmaWxlcyBqdXN0IGZpbmUsIGJ1dCBub3QgcmVjZWl2ZS4g VGhlIGluY29taW5nCi0gICBzdHJlYW0gaXMgZGVsaXZlcmVkIHRvIFptb2RlbSAodG8gdGhlIHB0 eSBzbGF2ZSkgYnV0IHVwb24gYXJyaXZhbCBhdAotICAgdGhlIFptb2RlbSBwcm9jZXNzIGl0c2Vs ZiwgcGllY2VzIGFyZSBhbHdheXMgbWlzc2luZyBhbmQvb3IgY29ycnVwdC4KLSAgIFlldCBJIGNh biByZWNlaXZlIGZpbGVzIGp1c3QgZmluZSBpZiBJIHVzZSBLZXJtaXQgaXRzZWxmIChDLUtlcm1p dCBvcgotICAgRy1LZXJtaXQpIGFzIHRoZSBleHRlcm5hbCBwcm90b2NvbCwgcmF0aGVyIHRoYW4g Wm1vZGVtLgotCi0gICBJIGNhbiB0aGluayBvZiB0d28gcmVhc29ucyB3aHkgdGhpcyBtaWdodCBi ZSB0aGUgY2FzZToKLQotICAgIDEuIFptb2RlbSBzZW5kcyBhbGwgOC1iaXQgYnl0ZXMgYW5kIGNv bnRyb2wgY29kZXMgaW4gdGhlIGNsZWFyLCBhbmQKLSAgICAgICBtYXliZSB0aGUgcHR5IGlzIGNo b2tpbmcgb24gdGhlbSBiZWNhdXNlIGl0IHRoaW5rcyBpdCBpcyBhIHJlYWwKLSAgICAgICB0ZXJt aW5hbC4KLQotICAgQnV0IFptb2RlbSBwdXRzIGl0cyBjb250cm9sbGluZyB0ZXJtaW5hbCBpbnRv IHJhdyBtb2RlLiBBbmQgQy1LZXJtaXQKLSAgIHB1dHMgdGhlIHB0eSBpbnRvIHJhdyBtb2RlIHRv bywganVzdCBmb3IgZ29vZCBtZWFzdXJlLiBJZiBhbnkgMHhGRgotICAgY29kZXMgYXJlIGluIHRo ZSBabW9kZW0gZGF0YSBzdHJlYW0sIGFuZCBpdCdzIGEgVGVsbmV0IHNlc3Npb24sIEtlcm1pdAot ICAgZG9lcyBhbnkgbmVlZGVkIGJ5dGUgc3R1ZmZpbmcvdW5zdHVmZmluZyBhdXRvbWF0aWNhbGx5 LiBBbnl3YXksIGlmIEkKLSAgIHRlbGwgWm1vZGVtIHRvIHByZWZpeCBldmVyeXRoaW5nLCBpdCBt YWtlcyBubyBkaWZmZXJlbmNlLgotCi0gICAgMi4gWm1vZGVtIGlzIGEgc3RyZWFtaW5nIHByb3Rv Y29sIGFuZCBwZXJoYXBzIHRoZSBwdHkgZHJpdmVyIGNhbid0Ci0gICAgICAga2VlcCB1cCB3aXRo IGEgc3VzdGFpbmVkIHN0cmVhbSBvZiBpbnB1dCBhdCBuZXR3b3JrIHNwZWVkcy4gV2hhdAotICAg ICAgIHdvdWxkIGJlIHRoZSBtZXRob2Qgb2YgZmxvdyBjb250cm9sPwotCi0gICBJIGNhbiB2YXJ5 IHRoZSBzaXplIG9mIHRoZSBpL28gYnVmZmVycyB1c2VkIGZvciB3cml0aW5nIHRvIHRoZSBwdHks IGFuZAotICAgZ2V0IGRpZmZlcmVudCBlZmZlY3RzLCBidXQgSSBhbSBub3QgYWJsZSB0byBnZXQg YSBjbGVhbiBkb3dubG9hZCwgbm8KLSAgIG1hdHRlciB3aGF0IGJ1ZmZlciBzaXplIEkgdXNlLiB3 cml0ZSgpJ2luZyB0byB0aGUgcHR5IGRvZXMgbm90IHJldHVybgotICAgYW4gZXJyb3IsIGFuZCBJ IGNhbid0IHNlZSB0aGUgZXJyb3JzIGJlY2F1c2UgdGhleSBoYXBwZW4gb24gdGhlIG1hc3Rlcgot ICAgc2lkZS4gSXQncyBhcyBpZiB0aGUgcGF0aCBiZXR3ZWVuIHRoZSBwdHkgc2xhdmUgYW5kIG1h c3RlciBsYWNrcyBmbG93Ci0gICBjb250cm9sOyBJIGRlbGl2ZXIgYSB2YWxpZCBkYXRhIHN0cmVh bSB0byB0aGUgcHR5IHNsYXZlIGFuZCB0aGUgbWFzdGVyCi0gICBnZXRzIGJpdHMgYW5kIHBpZWNl cy4gVGhpcyBpbXByZXNzaW9uIGlzIGJvbHN0ZXJlZCBzb21ld2hhdCBieSB0aGUKLSAgICJbOTNd bWFuIDcgcHR5IiBwYWdlIGluIEhQLVVYLCB3aGljaCB0YWxrcyBhYm91dCBzb21lIHNwZWNpYWwg bW9kZXMgZm9yCi0gICBwdHlzIHRoYXQgdHVybiBvZmYgYWxsIHRlcm1pbyBwcm9jZXNzaW5nIGFu ZCBndWFyYW50ZWUgYQotICAgZmxvdy1jb250cm9sbGVkIHJlbGlhYmxlIHN0cmVhbSBvZiBieXRl cyBpbiBib3RoIGRpcmVjdGlvbnMgLSBhIGZlYXR1cmUKLSAgIHRoYXQgc2VlbXMgdG8gYmUgc3Bl Y2lmaWMgdG8gSFAtVVgsIGFuZCBleGFjdGx5IHRoZSBvbmUgd2UgbmVlZAotICAgZXZlcnl3aGVy ZS4KLQotICAgV2VsbCwgaW4gUGFzcyBPbmUgSSB1c2VkIEMtS2VybWl0J3MgZXhpc3RpbmcgcHR5 IHJvdXRpbmVzIGZyb20KLSAgIGNrdXB0eS5bY2hdLCB3aGljaCBhcmUgd2VsbC1wcm92ZW4gaW4g dGVybXMgb2YgcG9ydGFiaWxpdHkgYW5kIG9mCi0gICBhY3R1YWxseSB3b3JraW5nLiBUaGV5IGFy ZSBjdXJyZW50bHkgdXNlZCBieSBTRVQgSE9TVCAvUFRZIGZvciBtYWtpbmcKLSAgIHRlcm1pbmFs IGNvbm5lY3Rpb25zIHRvIGV4dGVybmFsIHByb2Nlc3Nlcy4gQnV0IHRoZXNlIHJvdXRpbmVzIGFy ZQotICAgd3JpdHRlbiBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBwdHkgaXMgdG8gYmUgYWNj ZXNzZWQgaW50ZXJhY3RpdmVseSwKLSAgIGFuZCBtYXliZSB0aGV5IGFyZSBzZXR0aW5nIHRoZSBm b3JrL3B0eSBhcnJhbmdlbWVudCB1cCBpbiBzdWNoIGEgd2F5Ci0gICB0aGF0IHRoYXQncyBub3Qg c3VpdGFibGUgZm9yIGZpbGUgdHJhbnNmZXIuIFRoZSBQYXNzIE9uZSByb3V0aW5lIGlzCi0gICBj YWxsZWQgeHR0cHR5Y21kKCkgaW4gY2t1dGlvLmMuCi0KLSAgIFNvIGluIFBhc3MgVHdvIEkgbWFk ZSBhIHNlY29uZCBjb3B5IG9mIHRoZSByb3V0aW5lLCB5dHRwdHljbWQoKSwgdGhhdAotICAgbWFu YWdlcyB0aGUgcHR5IGFuZCBmb3JrIGl0c2VsZiwgc28gYWxsIHRoZSBjb2RlIGlzIGluIG9uZSBw bGFjZSBhbmQKLSAgIGl0J3Mgc2ltcGxlIGFuZCB1bmRlcnN0YW5kYWJsZS4gQnV0IGl0IHN0aWxs IGRvZXNuJ3Qgd29yayBmb3IgWm1vZGVtCi0gICBkb3dubG9hZHMuIEluIHRoaXMgcm91dGluZSwg SSB1c2Ugb3BlbnB0eSgpIHRvIGdldCB0aGUgcHR5IHBhaXIsIHdoaWNoCi0gICBpcyBub3QgcG9y dGFibGUsIHNvIEkgY2FuIGhhdmUgYWNjZXNzIHRvIGJvdGggdGhlIG1hc3RlciBhbmQgc2xhdmUg cHR5Ci0gICBmaWxlIGRlc2NyaXB0b3JzLiBUaGlzIHZlcnNpb24gY2FuIGJlIHVzZWQgb25seSBh IHBsYXRmb3JtcyB0aGF0IGhhdmUKLSAgIG9wZW5wdHkoKTogTGludXgsIE1hYyBPUyBYLCBOZXRC U0QsIGV0Yy4KLQotICAgSW4gUGFzcyBUaHJlZSwgenR0cHR5Y21kKCksIEkgdHJpZWQgdXNpbmcg cGlwZXMgaW5zdGVhZCBvZiBwdHlzLCBpbgotICAgY2FzZSBwdHlzIGFyZSBzaW1wbHkgbm90IHVw IHRvIHRoaXMgdGFzayAoYnV0IHRoYXQgY2FuJ3QgYmUgdHJ1ZQotICAgYmVjYXVzZSBpZiBJIG1h a2UgYSBUZWxuZXQgb3IgU1NIIGNvbm5lY3Rpb24gaW50byBhIGhvc3QsIEkgY2FuIHNlbmQKLSAg IGZpbGVzIHRvIGl0IHdpdGggWm1vZGVtLCBhbmQgdGhlIHJlbW90ZSBabW9kZW0gcmVjZWl2ZXIg aXMsIGluZGVlZCwKLSAgIHJ1bm5pbmcgb24gYSBwdHkpLiBCdXQgcGlwZXMgZGlkbid0IHdvcmsg ZWl0aGVyLgotCi0gICBJbiBQYXNzIEZvdXIsIEkgZXh0cmFjdGVkIHRoZSByZWxldmFudCByb3V0 aW5lcyBpbnRvIGEgc3RhbmRhbG9uZQotICAgcHJvZ3JhbSBiYXNlZCBvbiB5dHRwdHljbWQoKSAo dGhlIG9wZW5wdHkoKSB2ZXJzaW9uLCBmb3Igc2ltcGxpY2l0eSksCi0gICB3aGljaCBJIHRlc3Rl ZCBvbiBNYWMgT1MgWCwgdGhlIGlkZWEgYmVpbmcgdG8gcnVsZSBvdXQgYW55Ci0gICAiZW52aXJv bm1lbnRhbCIgZWZmZWN0cyBvZiBydW5uaW5nIGluc2lkZSB0aGUgQy1LZXJtaXQgcHJvY2Vzcy4g VGhlcmUKLSAgIHdhcyBubyBkaWZmZXJlbmNlIC0tIEtlcm1pdCB0cmFuc2ZlcnMgKHdpdGggQy1L ZXJtaXQgaXRzZWxmIGFzIHRoZQotICAgZXh0ZXJuYWwgcHJvdG9jb2wpIHdvcmtlZDsgWm1vZGVt IHRyYW5zZmVycyAobmVpdGhlciBzeiBvciBsc3opIGRpZAotICAgbm90LgotCi0gICBXZWxsLCBp dCdzIGEgbXVjaCBsb25nZXIgc3RvcnkuIEFzIHRoZSBleHRlcm5hbCBwcm90b2NvbCwgSSd2ZSB0 cmllZAotICAgcnpzeiwgY3J6c3osIGFuZCBscnpzei4gV2Uga25vdyB0aGF0IHNvbWUgb2YgdGhl c2UgaGF2ZSBxdWlya3MKLSAgIHJlZ2FyZGluZyBzdGFuZGFyZCBpL28sIGV0Yywgd2hpY2ggaXMg b25lIG9mIHRoZSByZWFzb25zIGZvciB1c2luZyBwdHlzCi0gICBpbiB0aGUgZmlyc3QgcGxhY2Us IGFuZCBpL28gZG9lcyB3b3JrIC0ganVzdCBub3QgcmVsaWFibHkuIEFueXdheSwgdGhlCi0gICAx MTAwIGxpbmVzIG9yIHNvIG9mIFs5NF1ja2MyOTkudHh0LCBzdGFydGluZyBqdXN0IGJlbG93IHdo ZXJlIGl0IHNheXMKLSAgICItLS0gRGV2LjI3IC0tLSIgdGVsbCB0aGUgZnVsbCBzdG9yeS4gQXQg dGhpcyBwb2ludCBJIGhhdmUgdG8gZ2l2ZSB1cAotICAgYW5kIG1vdmUgb247IGl0IG1pZ2h0IGJl IG1vcmUgcHJvZHVjdGl2ZSB0byBsZXQgc29tZWJvZHkgZWxzZSB3aG8gaGFzCi0gICBtb3JlIGV4 cGVyaWVuY2Ugd2l0aCBwdHlzIHRha2UgYSBsb29rIGF0IGl0IC0gaWYgaW5kZWVkIGFueW9uZSBz dGlsbAotICAgY2FyZXMgYWJvdXQgYmVpbmcgYWJsZSB0byBkbyBabW9kZW0gdHJhbnNmZXJzIG92 ZXIgc2VjdXJlIFRlbG5ldAotICAgY29ubmVjdGlvbnMuCi0KLSAgIEMtS2VybWl0IDkuMCBjb250 YWlucyB0aGUgdGhyZWUgbmV3IHJvdXRpbmVzIChhbmQgc29tZSBhdXhpbGlhcnkgb25lcyksCi0g ICBidXQgdGhleSBhcmUgbm90IGNvbXBpbGVkIG9yIGNhbGxlZCB1bmxlc3MgeW91IGJ1aWxkIGl0 IHNwZWNpYWxseToKLQotICAgICBtYWtlIHRhcmdldG5hbWUgS0ZMQUdTPS1EWFRUUFRZQ01EIChi dWlsZHMgd2l0aCB4dHRwdHljbWQoKSkKLSAgICAgbWFrZSB0YXJnZXRuYW1lIEtGTEFHUz0tRFlU VFBUWUNNRCAoYnVpbGRzIHdpdGggeXR0cHR5Y21kKCkpCi0gICAgIG1ha2UgdGFyZ2V0bmFtZSBL RkxBR1M9LURaVFRQVFlDTUQgKGJ1aWxkcyB3aXRoIHp0dHB0eWNtZCgpKQotCi0gICBUaGVzZSBh cmUgYWxsIGluIFs5NV1ja3V0aW8uYy4gQXMgbm90ZWQsIHRoZSBzZWNvbmQgb25lIHdvcmtzIG9u bHkgZm9yCi0gICBMaW51eCwgRnJlZUJTRCwgTmV0QlNELCBhbmQgTWFjIE9TIFgsIGJlY2F1c2Ug aXQgdXNlcyBub24tUE9TSVgsCi0gICBub24tcG9ydGFibGUgb3BlbnB0eSgpLiBJZiB5b3Ugd2Fu dCB0byB0cnkgaXQgb24gc29tZSBvdGhlciBwbGF0Zm9ybQotICAgdGhhdCBoYXMgb3BlbnB0eSgp LCB5b3UgY2FuIGJ1aWxkIGl0IGxpa2UgdGhpczoKLQotICAgICBtYWtlIHRhcmdldG5hbWUgIktG TEFHUz0tRFlUVFBUWUNNRCAtREhBVkVfT1BFTlBUWSIKLQotICAgKGFuZCBsZXQgbWUga25vdywg c28gSSBjYW4gaGF2ZSBIQVZFX09QRU5QVFkgcHJlZGVmaW5lZCBmb3IgdGhhdAotICAgcGxhdGZv cm0gdG9vKS4gVGhlIGJlc3Qgc3RyYXRlZ3kgdG8gZ2V0IHRoaXMgd29ya2luZywgSSB0aGluaywg d291bGQgYmUKLSAgIHRvIGNvbmNlbnRyYXRlIG9uIHl0dHB0eWNtZCgpLCB3aGljaCBpcyB0aGUg c2ltcGxlciBvZiB0aGUgdHdvCi0gICBwdHktYmFzZWQgcm91dGluZXMuIElmIGl0IGNhbiBiZSBt YWRlIHRvIHdvcmssIHRoZW4gd2UnbGwgc2VlIGlmIHdlIGNhbgotICAgcmV0cm9maXQgaXQgdG8g dXNlIHRoZSBja3VwdHkuYyByb3V0aW5lcyBzbyBpdCB3aWxsIGJlIHBvcnRhYmxlIHRvCi0gICBu b24tQlNEIHBsYXRmb3Jtcy4KLQotICAgQnkgdGhlIHdheSwgaWYgeW91IGJ1aWxkIHdpdGggYW55 IG9mIFtYWVpdVFRQVFlDTUQgZGVmaW5lZCwgdGhlbiB0aGUKLSAgIHNlbGVjdGVkIHJvdXRpbmUg d2lsbCBhbHdheXMgYmUgdXNlZCBpbiBwbGFjZSBvZiB0dHJ1bmNtZCgpLiBUaGlzIGlzIHRvCi0g ICBhbGxvdyB0ZXN0aW5nIG9uIGFsbCBraW5kcyBvZiBjb25uZWN0aW9ucywgbm90IGp1c3Qgc2Vj dXJlIG9uZXMsIGluCi0gICBib3RoIGxvY2FsIGFuZCByZW1vdGUgbW9kZS4gT25jZSB0aGUgdGhp bmcgd29ya3MsIGlmIGl0IGV2ZXIgZG9lcywgSSdsbAotICAgYWRkIHRoZSBhcHByb3ByaWF0ZSB0 ZXN0cyBhbmQvb3IgY29tbWFuZHMuCi0KLSAgIEJ5IGRlZmF1bHQsIGluIHRoZSBpbml0aWFsIHRl c3QgcmVsZWFzZSwgQy1LZXJtaXQgOS4wIHVzZXMgdHRydW5jbWQoKQotICAgb24gc2VyaWFsIGNv bm5lY3Rpb25zIGFuZCB0dHlwdHljbWQoKSBvbiBuZXR3b3JrIGNvbm5lY3Rpb25zLiBFdmVuIHdo ZW4KLSAgIGEgbmV0d29yayBjb25uZWN0aW9uIGlzIG5vdCBlbmNyeXB0ZWQsIEtlcm1pdCBzdGls bCBuZWVkcyB0byBoYW5kbGUgdGhlCi0gICBuZXR3b3JrIHByb3RvY29sLCBlLmcuIHRoZSBxdW90 aW5nIG9mIDB4ZmYgYnl0ZXMgb24gVGVsbmV0IGNvbm5lY3Rpb25zLgotCi1EZW1vbnN0cmF0aW9u OiBGZXRjaCBNYWlsIGZyb20gUE9QIFNlcnZlciBTZWN1cmVkIGJ5IFNTTAotCi0gICBbOTZdcG9w LmtzYyBpcyBhIGZ1bGx5IGVsYWJvcmF0ZWQgcHJvZHVjdGlvbiBzY3JpcHQgZm9yIGZldGNoaW5n IG9uZSdzCi0gICBtYWlsIGZyb20gYSBQT1AzIHNlcnZlciBvdmVyIGEgY29ubmVjdGlvbiBzZWN1 cmVkIGJ5IFNTTC4gRm9yCi0gICBleHBsYW5hdGlvbiBhbmQgZG9jdW1lbnRhdGlvbiwgWzk3XUNM SUNLIEhFUkUuIFs5OF1tYWlsY2hlY2sgaXMgYQotICAgd3JhcHBlciBmb3IgdGhlIHBvcC5rc2Mg c2NyaXB0LCB3aGljaCBjb2xsZWN0cyB5b3VyIHBhc3N3b3JkIG9uZSB0aW1lLAotICAgYW5kIHRo ZW4gY2hlY2tzIGZvciBuZXcgbWFpbCBldmVyeSA1IG1pbnV0ZXMgKG9yIG90aGVyIHNlbGVjdGVk Ci0gICBpbnRlcnZhbCkgYW5kIGNhbGxzIHBvcC5rc2MgdG8gZmV0Y2ggaXQgaWYgdGhlcmUgaXMg YW55LgotCi1EZW1vbnN0cmF0aW9uOiBIUCBTd2l0Y2ggQ29uZmlndXJhdGlvbiBCYWNrdXAKLQot ICAgQSBjb21tb24gdXNlIGZvciBLZXJtaXQgc29mdHdhcmUgaXMgdG8gbWFrZSBhdXRvbWF0ZWQg YmFja3VwcyBvZiB0aGUKLSAgIGNvbmZpZ3VyYXRpb24gb2YgbmV0d29yayBzd2l0Y2hlcyBhbmQg cm91dGVycywgc3VjaCBhcyB0aG9zZSBtYWRlIGJ5Ci0gICBDaXNjbyBvciBIZXdsZXR0LVBhY2th cmQgKGFsdGhvdWdoIFs5OV10ZnRwIGNhbiBiZSB1c2VkIGZvciB0aGlzLCBpdCBpcwotICAgbm90 IGF2YWlsYWJsZSBpbiBhbGwgc3VjaCBkZXZpY2VzOyBLZXJtaXQsIGhvd2V2ZXIsIHdvcmtzIHdp dGggdGhvc2UKLSAgIHRoYXQgaGF2ZSB0ZnRwIGFzIHdlbGwgYXMgdGhvc2UgdGhhdCBkb24ndCku Ci0KLSAgIFR5cGljYWxseSBhIGJhY2t1cCBjYW4gYmUgZG9uZSBieSBtYWtpbmcgYSBUZWxuZXQs IFNTSCwgb3Igc2VyaWFsCi0gICBjb25uZWN0aW9uIHRvIHRoZSBkZXZpY2Ugd2l0aCBLZXJtaXQg YW5kIGdpdmluZyBhIGNvbW1hbmQgc3VjaCBhcyAic2hvdwotICAgY29uZmlnIiBhdCB0aGUgY29t bWFuZC1saW5lIHByb21wdCBvZiB0aGUgZGV2aWNlIHdpdGggS2VybWl0J3Mgc2Vzc2lvbgotICAg bG9nIGFjdGl2YXRlZC4gVGhlIHJlc3VsdCBpcyBhIGxpc3Qgb2YgdGhlIGNvbW1hbmRzIHRoYXQg d2VyZSB1c2VkIHRvCi0gICBlc3RhYmxpc2ggdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgc3Vp dGFibGUgZm9yIGZlZWRpbmcgYmFjayB0byB0aGUKLSAgIGRldmljZSdzIGNvbnNvbGUgKGUuZy4g d2l0aCBDLUtlcm1pdCdzIFRSQU5TTUlUIGNvbW1hbmQpIHRvIHJlZXN0YWJsaXNoCi0gICB0aGUg c2FtZSBjb25maWd1cmF0aW9uIG9yIHRvIGR1cGxpY2F0ZSBpdCBvbiBhbm90aGVyIGRldmljZS4K LQotICAgQXQgYW4gSFAgaW5zdGFsbGF0aW9uIGl0IHdhcyBub3RlZCwgaG93ZXZlciwgdGhhdCB3 aGlsZSB0aGUgSFAgc3dpdGNoZXMKLSAgICh2YXJpb3VzIFByb0N1cnZlIG1vZGVscykgcHJvZHVj ZWQgdGhlIGRlc2lyZWQgbGlzdCBvZiBjb21tYW5kcywgdGhleQotICAgd2VyZSBpbnRlcnNwZXJz ZWQgd2l0aCBlc2NhcGUgc2VxdWVuY2VzIGZvciBzcGVjaWFsIGVmZmVjdHMsIHRodXMKLSAgIHJl bmRlcmluZyB0aGUgcmVjb3JkZWQgc2Vzc2lvbnMgdW5zdWl0YWJsZSBmb3IgZmVlZGluZyBiYWNr IGludG8gdGhlCi0gICBzd2l0Y2hlcy4KLQotICAgQy1LZXJtaXQgOS4wIGludHJvZHVjZXMgYSBu ZXcgZmVhdHVyZSB0byBzdHJpcCB0aGUgb2ZmZW5kaW5nIHNlcXVlbmNlcwotICAgb3V0IG9mIGEg c2Vzc2lvbiBsb2csIGxlYXZpbmcganVzdCB0aGUgdGV4dC4gVGhlIGNvbW1hbmQgU0VUCi0gICBT RVNTSU9OLUxPRyBURVhUIGFjdGl2YXRlcyB0aGlzIGZlYXR1cmUuIEluIEMtS2VybWl0IDkuMCBB bHBoYS4wMiBhbmQKLSAgIGVhcmxpZXIsIGVzY2FwZSBzZXF1ZW5jZSBzdHJpcHBpbmcgb2NjdXJy ZWQgb25seSB3aGlsZSBsb2dnaW5nCi0gICBpbnRlcmFjdGl2ZSAoQ09OTkVDVCkgc2Vzc2lvbnM7 IGJlZ2lubmluZyB3aXRoIEFscGhhLjAzIGl0IGlzIGRvbmUgYWxzbwotICAgZm9yIGRhdGEgdGhh dCBpcyByZWFkIGJ5IElOUFVUIGNvbW1hbmRzIGFuZCB0aGVyZWZvcmUgd29ya3MgZm9yIHNjcmlw dHMKLSAgIHRvby4KLQotICAgQSBzYW1wbGUgSFAgU3dpdGNoIENvbmZpZ3VyYXRpb24gQmFja3Vw IHNjcmlwdCBpcyBbMTAwXUhFUkUsIGFuZCBpdHMKLSAgIGRhdGEgZmlsZSBpcyBbMTAxXUhFUkUu IFRoaXMgc2NyaXB0IGFsc28gaWxsdXN0cmF0ZXMgc29tZSBvdGhlciBuZXcKLSAgIGZlYXR1cmVz IG9mIEFscGhhLjAzOgotCi0gICBNRVNTQUdFIHRleHQKLSAgICAgICAgICBUaGlzIGxldHMgeW91 IHB1dCBkZWJ1Z2dpbmcgbWVzc2FnZXMgaW4geW91ciBzY3JpcHQgdGhhdCBjYW4gYmUKLSAgICAg ICAgICBkaXNwbGF5ZWQgb3Igbm90LCBhY2NvcmRpbmcgdG8gU0VUIERFQlVHIE1FU1NBR0UgKGJl bG93KS4gVGhpcwotICAgICAgICAgIHdheSB5b3UgZG9uJ3QgaGF2ZSB0byBjaGFuZ2UgeW91ciBz Y3JpcHQgZm9yIGRlYnVnZ2luZy4gIEhpbnQ6Ci0gICAgICAgICAgSW4gVW5peCwgaW52b2tlIHRo ZSBzY3JpcHQgbGlrZSB0aGlzOgotCi0gICAgICQgREVCVUc9MSBzY3JpcHRuYW1lIGFyZzEgYXJn Mi4uLgotCi0gICAgICAgICAgYW5kIHRoZW4gaW5jbHVkZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQg aW4geW91ciBzY3JpcHQ6Ci0KLSAgICAgaWYgZGVmaW5lZCBcJChERUJVRykgc2V0IGRlYnVnIG1l c3NhZ2Ugb24KLQotICAgWE1FU1NBR0UgdGV4dAotICAgICAgICAgIExpa2UgTUVTU0FHRSBidXQg cHJpbnRzIHRoZSB0ZXh0IHdpdGggbm8gbGluZSB0ZXJtaW5hdG9yLCBzbyBpdAotICAgICAgICAg IGNhbiBiZSBjb250aW51ZWQgYnkgc3Vic2VxdWVudCBtZXNzYWdlcy4KLQotICAgU0VUIERFQlVH IE1FU1NBR0UgeyBPTiwgT0ZGLCBTVERFUlIgfQotICAgICAgICAgIE9OIG1lYW5zIE1FU1NBR0Ug Y29tbWFuZHMgc2hvdWxkIHByaW50IHRvIHN0YW5kYXJkIG91dHB1dDsgT0ZGCi0gICAgICAgICAg bWVhbnMgdGhleSBzaG91bGRuJ3QgcHJpbnQgYW55dGhpbmc7IFNUREVSUiBtZWFucyB0aGUgbWVz c2FnZXMKLSAgICAgICAgICBzaG91bGQgYmUgcHJpbnRlZCB0byBbMTAyXXN0ZGVyci4gREVCVUcg TUVTU0FHRSBpcyBPRkYgYnkKLSAgICAgICAgICBkZWZhdWx0LCBpLmUuIHVubGVzcyB5b3UgU0VU IGl0IHRvIE9OIG9yIFNUREVSUi4KLQotICAgSUYgREVCVUcgY29tbWFuZAotICAgICAgICAgIEV4 ZWN1dGVzIHRoZSBjb21tYW5kIGlmIFNFVCBERUJVRyBNRVNTQUdFIGlzIG5vdCBPRkYuCi0KLSAg IFRoZSBcdihsYXN0Y29tbWFuZCkgdmFyaWFibGUKLSAgICAgICAgICBUaGlzIHZhcmlhYmxlIGNv bnRhaW5zIHRoZSBwcmV2aW91cyBjb21tYW5kLiBZb3UgY2FuIHVzZSBpdCBpbgotICAgICAgICAg IGRlYnVnZ2luZyBhbmQgZXJyb3IgbWVzc2FnZSB0byBzaG93IChmb3IgZXhhbXBsZSkgZXhhY3Rs eSB3aGF0Ci0gICAgICAgICAgdGhlIGNvbW1hbmQgd2FzIHRoYXQganVzdCBmYWlsZWQsIHdpdGhv dXQgaGF2aW5nIHRvIG1ha2UgYSBjb3B5Ci0gICAgICAgICAgb2YgdGhlIGNvbW1hbmQ6Ci0KLXNl dCBob3N0IHNvbWVob3N0LnNvbWVjb21wYW55LmNvbQotaWYgZmFpbCBleGl0IDEgIkZBVEFMIC0g XHYobGFzdGNvbW1hbmQpIgotCi0gICAgICAgICAgd2hpY2gsIGlmIHRoZSBTRVQgSE9TVCBjb21t YW5kIGZhaWxzLCBwcmludHMgIkZBVEFMIC0gc2V0IGhvc3QKLSAgICAgICAgICBzb21laG9zdC5z b21lY29tcGFueS5jb20iIGFuZCB0aGVuIGV4aXRzIHdpdGggc3RhdHVzIDEgKHdoaWNoCi0gICAg ICAgICAgbm9ybWFsbHkgaW5kaWNhdGVzIGZhaWx1cmUpLgotCi1EZW1vbnN0cmF0aW9uOiBIUCBp TE8gQmxhZGUgQ29uZmlndXJhdGlvbgotCi0gICBbMTAzXVRISVMgRE9DVU1FTlQgZGVzY3JpYmVz IGEgc2NyaXB0IGluIHByb2R1Y3Rpb24gdXNlIGF0IENvbHVtYmlhCi0gICBVbml2ZXJzaXR5IGZv ciBjb25maWd1cmluZyBhbmQgZGVwbG95aW5nIHJhY2tzIGZ1bGwgb2YgSFAgYmxhZGUgc2VydmVy cwotICAgdGhyb3VnaCB0aGVpciAiaW50ZWdyYXRlZCBMaWdodHMgT3V0IiAoaUxPKSBtYW5hZ2Vt ZW50IGludGVyZmFjZSwKLSAgIGJ5cGFzc2luZyB0aGUgdGVkaW91cyBhbmQgZXJyb3ItcHJvbmUg cHJvY2VzcyBvZiBjb25maWd1cmluZyB0aGUKLSAgIHNlcnZlcnMgb25lIGJ5IG9uZSB0aHJvdWdo IHRoZSB2ZW5kb3ItcHJvdmlkZWQgcG9pbnQtYW5kLWNsaWNrIFdlYgotICAgaW50ZXJmYWNlLCB3 aGljaCBpcyBpbGwtc3VpdGVkIHRvIGNvbmZpZ3VyaW5nIGxhcmdlIG51bWJlcnMgb2YgYmxhZGVz LgotICAgVGhlIHNjcmlwdCBpbGx1c3RyYXRlcyBzb21lIG9mIEMtS2VybWl0IDkuMCdzIG5ldyBm ZWF0dXJlczsgc291cmNlIGNvZGUKLSAgIGlzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBsaW5rLiBU aGUgY29kZSBpcyBhcHQgdG8gY2hhbmdlIGZyb20gdGltZSB0bwotICAgdGltZSBhcyBuZXcgcmVx dWlyZW1lbnRzIHN1cmZhY2UuCi0KLURlbW9uc3RyYXRpb246IElCTS9Sb2xtL1NpZW1lbnMgQ0JY IE1hbmFnZW1lbnQKLQotICAgWzEwNF1USElTIERPQ1VNRU5UIGRlc2NyaWJlcyBhIHN1aXRlIG9m IHNjcmlwdHMgKHNvbWUgaW4gcHJvZHVjdGlvbiwKLSAgIHNvbWUgaW4gZGV2ZWxvcG1lbnQpIHVz ZWQgdG8gbWFuYWdlIHRoZSBDb2x1bWJpYSBjYW1wdXMgMjAsMDAwLWxpbmUKLSAgIG1haW4gdGVs ZXBob25lIHN3aXRjaCwgYWxvbmcgd2l0aCBhYm91dCAxMCBzYXRlbGxpdGUgc3dpdGNoZXMgYXQK LSAgIG9mZi1jYW1wdXMgbG9jYXRpb25zLiBUaGVzZSBzd2l0Y2hlcyBhcmUgMTk4MHMgdGVjaG5v bG9neSosIHRoZWlyCi0gICBtYW5hZ2VtZW50IGNvbnNvbGVzIGFyZSBzZXJpYWwgcG9ydHMuIEFj Y2VzcyBpcyB2aWEgVGVsbmV0IHRvIHJldmVyc2UKLSAgIHRlcm1pbmFsIHNlcnZlcnMuIFRoZSBz Y3JpcHRzIGFsbG93IGZvciBpbnRlcmFjdGl2ZSBzZXNzaW9ucyBhcyB3ZWxsIGFzCi0gICBhdXRv bWF0aWMgcHJvZHVjdGlvbiAoYW5kIGluIHNvbWUgY2FzZXMgZm9ybWF0dGluZykgb2YgZGlmZmVy ZW50Ci0gICByZXBvcnRzIHJlcXVpcmVkIGJ5IGRpZmZlcmVudCBncm91cHMgYXQgZGlmZmVyZW50 IGludGVydmFscy4gVGhlc2UKLSAgIHNjcmlwdHMgcmVwbGFjZSBhIHdob2xlIGFzc29ydG1lbnQg b2YgYWQtaG9jIFByb0NvbW0gQVNQRUNUIHNjcmlwdHMKLSAgIHRoYXQgd2VyZSBzY2F0dGVyZWQg YWxsIG92ZXIgdGhlIHBsYWNlLCB3aXRoIHBhc3N3b3JkcyBlbWJlZGRlZC4gVGhlCi0gICBuZXcg c2NyaXB0cyBhcmUgaW50ZW5kZWQgdG8gYmUgcnVuIGZyb20gYSBjZW50cmFsaXplZCBzZXJ2ZXIg d2hlcmUKLSAgIHRoZXJlIGlzIGEgc2luZ2xlIHdlbGwtc2VjdXJlZCBjb25maWd1cmF0aW9uIGZp bGUsIGFuZCB3aGVyZSB0aGV5IGNhbgotICAgYmUgdXNlZCBvbiBkZW1hbmQsIG9yIGluIGNyb24g am9icy4gVGhleSBhcmUgbW9kdWxhciBzbyBjb2RlCi0gICBkdXBsaWNhdGlvbiBpcyBtaW5pbWFs LgotICAgX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAgICogIE9mIGNvdXJzZSB0aGUgVW5p dmVyc2l0eSBpcyBkZXBsb3lpbmcgbmV3IHRlY2hub2xvZ3kgYnV0IHRoZSBidXQgdGhlCi0gICBv bGQgc3lzdGVtIHdpbGwgYmUgdXNlZCBpbiBwYXJhbGxlbCBmb3Igc29tZSB0aW1lIHRvIGNvbWUu Ci0KLURlbW9uc3RyYXRpb246IENTViBhbmQgVFNWIEZpbGVzCi0KLSAgIENvbnRlbnRzCi0KLSAg ICAgKiBbMTA1XVJlYWRpbmcgYSBDU1Ygb3IgVFNWIFJlY29yZCBhbmQgQ29udmVydGluZyBpdCB0 byBhbiBBcnJheQotICAgICAqIFsxMDZdVXNpbmcgXGZqb2luKCkgdG8gY3JlYXRlIGEgQ29tbWEt IG9yIFRhYi1TZXBhcmF0ZWQgVmFsdWUgTGlzdAotICAgICAgIGZyb20gYW4gQXJyYXkKLSAgICAg KiBbMTA3XVVzaW5nIENTViBvciBUU1YgRmlsZXMKLQotICAgQ29tbWEtU2VwYXJhdGVkIFZhbHVl IChDU1YpIGZvcm1hdCBpcyBjb21tb25seSBvdXRwdXQgYnkgc3ByZWFkc2hlZXRzCi0gICBhbmQg ZGF0YWJhc2VzIHdoZW4gZXhwb3J0aW5nIGRhdGEgaW50byBwbGFpbi10ZXh0IGZpbGVzIGZvciBp bXBvcnQgaW50bwotICAgb3RoZXIgYXBwbGljYXRpb25zLiBIZXJlIGFyZSB0aGUgZGV0YWlsczoK LQotICAgQ29tbWEtU2VwYXJhdGVkIExpc3QgU3ludGF4Ci0KLSAgICAxLiBFYWNoIHJlY29yZCBp cyBhIHNlcmllcyBvZiBmaWVsZHMuCi0gICAgMi4gUmVjb3JkcyBhcmUgaW4gd2hhdGV2ZXIgZm9y bWF0IGlzIHVzZWQgYnkgdGhlIHVuZGVybHlpbmcgZmlsZQotICAgICAgIHN5c3RlbSBmb3IgbGlu ZXMgb2YgdGV4dC4KLSAgICAzLiBGaWVsZHMgd2l0aGluIHJlY29yZHMgYXJlIHNlcGFyYXRlZCBi eSBjb21tYXMsIHdpdGggemVybyBvciBtb3JlCi0gICAgICAgd2hpdGVzcGFjZSBjaGFyYWN0ZXJz IChzcGFjZSBvciB0YWIpIGJlZm9yZSBhbmQvb3IgYWZ0ZXIgdGhlIGNvbW1hOwotICAgICAgIHN1 Y2ggd2hpdGVzcGFjZSBpcyBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlcGFyYXRvci4KLSAgICA0 LiBGaWVsZHMgd2l0aCBlbWJlZGRlZCBjb21tYXMgbXVzdCBiZSBlbmNsb3NlZCBpbiBBU0NJSSBk b3VibGVxdW90ZQotICAgICAgIGNoYXJhY3RlcnMuCi0gICAgNS4gRmllbGRzIHdpdGggbGVhZGlu ZyBvciB0cmFpbGluZyBzcGFjZXMgbXVzdCBiZSBlbmNsb3NlZCBpbiBBU0NJSQotICAgICAgIGRv dWJsZXF1b3Rlcy4KLSAgICA2LiBBbnkgZmllbGQgbWF5IGJlIGVuY2xvc2VkIGluIEFTQ0lJIGRv dWJsZXF1b3Rlcy4KLSAgICA3LiBGaWVsZHMgd2l0aCBlbWJlZGRlZCBkb3VibGVxdW90ZXMgbXVz dCBiZSBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXMKLSAgICAgICBhbmQgZWFjaCBpbnRlcmlvciBk b3VibGVxdW90ZSBpcyBkb3VibGVkLgotCi0gICBIZXJlIGlzIGFuIGV4YW1wbGU6Ci0KLWFhYSwg YmJiLCBoYXMgc3BhY2VzLCwiZGRkLGVlZSxmZmYiLCAiIGhhcyBzcGFjZXMgIiwiTXVoYW1tYWQg IiJUaGUgR3JlYXRlc3QiIiBBCi1saSIKLQotICAgVGhlIGZpcnN0IHR3byBhcmUgcmVndWxhciBm aWVsZHMuIFRoZSBzZWNvbmQgaXMgYSBmaWVsZCB0aGF0IGhhcyBhbgotICAgZW1iZWRkZWQgc3Bh Y2UgYnV0IGluIHdoaWNoIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIHNwYWNlcyBhcmUgdG8gYmUK LSAgIGlnbm9yZWQuIFRoZSBmb3VydGggaXMgYW4gZW1wdHkgZmllbGQsIGJ1dCBzdGlsbCBhIGZp ZWxkLiBUaGUgZmlmdGggaXMKLSAgIGEgZmllbGQgdGhhdCBjb250YWlucyBlbWJlZGRlZCBjb21t YXMuIFRoZSBzaXh0aCBoYXMgbGVhZGluZyBhbmQKLSAgIHRyYWlsaW5nIHNwYWNlcy4gVGhlIGxh c3QgZmllbGQgaGFzIGVtYmVkZGVkIHF1b3RhdGlvbiBtYXJrcy4KLQotICAgUHJpb3IgdG8gQy1L ZXJtaXQgOS4wIEFscGhhLjA2LCBDLUtlcm1pdCBkaWQgbm90IGhhbmRsZSBDU1YgZmlsZXMKLSAg IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbiBhYm92ZS4gTW9zdCBzZXJpb3VzbHksIHRo ZXJlIHdhcyBubwotICAgcHJvdmlzaW9uIGZvciBhIHNlcGFyYXRvciB0byBiZSBzdXJyb3VuZGVk IGJ5IHdoaXRlc3BhY2UgdGhhdCB3YXMgdG8gYmUKLSAgIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUg c2VwYXJhdG9yLiBBbHNvIHRoZXJlIHdhcyBubyBwcm92aXNpb24gZm9yCi0gICBxdW90aW5nIGRv dWJsZXF1b3RlcyBpbnNpZGUgb2YgYSBxdW90ZWQgc3RyaW5nLgotCi1SZWFkaW5nIGEgQ1NWIHJl Y29yZAotCi0gICBOb3cgdGhlIFxmc3BsaXQoKSBmdW5jdGlvbiBjYW4gaGFuZGxlIGFueSBDU1Yt Zm9ybWF0IHN0cmluZyBpZiB5b3UKLSAgIGluY2x1ZGUgdGhlIHN5bWJvbGljIGluY2x1ZGUgc2V0 ICJDU1YiIGFzIHRoZSA0dGggcGFyYW1ldGVyLiBUbwotICAgaWxsdXN0cmF0ZSwgdGhpcyBwcm9n cmFtOgotCi1kZWYgeHggewotICAgZWNobyBbXGZjb250ZW50cyhcJTEpXQotICAgLlwlOSA6PSBc ZnNwbGl0KFxmY29udGVudHMoXCUxKSwgJmEsIFw0NCwgQ1NWKQotICAgZm9yIFwlaSAxIFwlOSAx IHsgZWNobyAiXGZscGFkKFwlaSwzKS4gW1wmYVtcJWldXSIgfQotICAgZWNobyAiLS0tLS0tLS0t LS0iCi19Ci14eCB7YSxiLGN9Ci14eCB7IGEgLCBiICwgYyB9Ci14eCB7IGFhYSwsY2NjLCIgd2l0 aCBzcGFjZXMgIix6enogfQoteHggeyAiMSIsIjIiLCIzIiwiIiwiNSIgfQoteHggeyB0aGlzIGlz IGEgc2luZ2xlIGZpZWxkIH0KLXh4IHsgdGhpcyBpcyBvbmUgZmllbGQsICIgYW5kIHRoaXMgaXMg YW5vdGhlciAgIiB9Ci14eCB7IG5hbWUsIk1vaGFtbWFkICIiVGhlIEdyZWF0ZXN0IiIgQWxpIiwg YWdlLCA2NyB9Ci14eCB7ICIiImZpZWxkIGVuY2xvc2VkIGluIGRvdWJsZXF1b3RlcyIiIiB9Ci1l eGl0Ci0KLSAgIGdpdmVzIHRoZSBmb2xsb3dpbmcgcmVzdWx0czoKLQotW2EsYixjXQotICAxLiBb YV0KLSAgMi4gW2JdCi0gIDMuIFtjXQotLS0tLS0tLS0tLS0KLVsgYSAsIGIgLCBjIF0KLSAgMS4g W2FdCi0gIDIuIFtiXQotICAzLiBbY10KLS0tLS0tLS0tLS0tCi1bIGFhYSwsY2NjLCIgd2l0aCBz cGFjZXMgIix6enogXQotICAxLiBbYWFhXQotICAyLiBbXQotICAzLiBbY2NjXQotICA0LiBbIHdp dGggc3BhY2VzIF0KLSAgNS4gW3p6el0KLS0tLS0tLS0tLS0tCi1bICIxIiwiMiIsIjMiLCIiLCI1 IiBdCi0gIDEuIFsxXQotICAyLiBbMl0KLSAgMy4gWzNdCi0gIDQuIFtdCi0gIDUuIFs1XQotLS0t LS0tLS0tLS0KLVsgdGhpcyBpcyBhIHNpbmdsZSBmaWVsZCBdCi0gIDEuIFt0aGlzIGlzIGEgc2lu Z2xlIGZpZWxkXQotLS0tLS0tLS0tLS0KLVsgdGhpcyBpcyBvbmUgZmllbGQsICIgYW5kIHRoaXMg aXMgYW5vdGhlciAgIiBdCi0gIDEuIFt0aGlzIGlzIG9uZSBmaWVsZF0KLSAgMi4gWyBhbmQgdGhp cyBpcyBhbm90aGVyICBdCi0tLS0tLS0tLS0tLQotWyBuYW1lLCJNb2hhbW1hZCAiIlRoZSBHcmVh dGVzdCIiIEFsaSIsIGFnZSwgNjcgXQotICAxLiBbbmFtZV0KLSAgMi4gW01vaGFtbWFkICJUaGUg R3JlYXRlc3QiIEFsaV0KLSAgMy4gW2FnZV0KLSAgNC4gWzY3XQotLS0tLS0tLS0tLS0KLVsgIiIi ZmllbGQgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzIiIiIF0KLSAgMS4gWyJmaWVsZCBlbmNsb3Nl ZCBpbiBkb3VibGVxdW90ZXMiXQotLS0tLS0tLS0tLS0KLQotICAgVGhlIHNlcGFyYXRvciBcNDQg KGNvbW1hKSBtdXN0IHN0aWxsIGJlIHNwZWNpZmllZCBhcyB0aGUgYnJlYWsgc2V0ICgzcmQKLSAg IFxmc3BsaXQoKSBwYXJhbWV0ZXIpLiBXaGVuICJDU1YiIGlzIHNwZWNpZmllZCBhcyB0aGUgaW5j bHVkZSBzZXQ6Ci0gICAgICogVGhlIEdyb3VwaW5nIE1hc2sgaXMgYXV0b21hdGljYWxseSBzZXQg dG8gMSAod2hpY2ggc3BlY2lmaWVzIHRoYXQKLSAgICAgICB0aGUgQVNDSUkgZG91YmxlcXVvdGUg Y2hhcmFjdGVyICgiKSBpcyB1c2VkIGZvciBncm91cGluZzsKLSAgICAgKiBUaGUgU2VwYXJhdG9y IEZsYWcgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gMSBzbyB0aGF0IGFkamFjZW50IGZpZWxkCi0g ICAgICAgc2VwYXJhdG9ycyB3aWxsIG5vdCBiZSBjb2xsYXBzZWQ7Ci0gICAgICogQWxsIGJ5dGVz ICh2YWx1ZXMgMCB0aHJvdWdoIDI1NSkgb3RoZXIgdGhhbiB0aGUgYnJlYWsgY2hhcmFjdGVyIGFy ZQotICAgICAgIGFkZGVkIHRvIHRoZSBpbmNsdWRlIHNldDsKLSAgICAgKiBBbnkgbGVhZGluZyB3 aGl0ZXNwYWNlIGlzIHN0cmlwcGVkIGZyb20gdGhlIGZpcnN0IGVsZW1lbnQgdW5sZXNzIGl0Ci0g ICAgICAgaXMgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzOwotICAgICAqIEFueSB0cmFpbGluZyB3 aGl0ZXNwYWNlIGlzIHRyaW1tZWQgZnJvbSB0aGUgZW5kIG9mIHRoZSBsYXN0IGVsZW1lbnQKLSAg ICAgICB1bmxlc3MgaXQgaXMgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzOwotICAgICAqIElmIHRo ZSBzZXBhcmF0b3IgY2hhcmFjdGVyIGhhcyBhbnkgc3BhY2VzIG9yIHRhYnMgcHJlY2VkaW5nIGl0 IG9yCi0gICAgICAgZm9sbG93aW5nIGl0LCB0aGV5IGFyZSBpZ25vcmVkIGFuZCBkaXNjYXJkZWQ7 Ci0gICAgICogVGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIgaXMgdHJlYXRlZCBhcyBhbiBvcmRpbmFy eSBkYXRhIGNoYXJhY3RlciBpZgotICAgICAgIGl0IGFwcGVhcnMgaW4gYSBxdW90ZWQgZmllbGQ7 Ci0gICAgICogQSBzZXF1ZW5jZSBvZiB0d28gZG91YmxlcXVvdGUgY2hhcmFjdGVycyAoIiIpIHdp dGhpbiBhIHF1b3RlZCBmaWVsZAotICAgICAgIGlzIGNvbnZlcnRlZCB0byBhIHNpbmdsZSBkb3Vi bGVxdW90ZS4KLQotICAgVGhlcmUgaXMgYWxzbyBhIG5ldyBUU1Ygc3ltYm9saWMgaW5jbHVkZSBz ZXQsIHdoaWNoIGlzIGxpa2UgQ1NWIGV4Y2VwdAotICAgd2l0aG91dCB0aGUgcXVvdGluZyBydWxl cyBvciB0aGUgc3RyaXBwaW5nIG9mIHdoaXRlc3BhY2UgYXJvdW5kIHRoZQotICAgc2VwYXJhdG9y IGJlY2F1c2UsIGJ5IGRlZmluaXRpb24sIFRTViBmaWVsZHMgZG8gbm90IGNvbnRhaW4gdGFicy4K LQotICAgT2YgY291cnNlIHlvdSBjYW4gc3BlY2lmeSBhbnkgc2VwYXJhdG9yKHMpIHlvdSB3YW50 IHdpdGggZWl0aGVyIHRoZQotICAgQ1NWLCBUU1YsIG9yIEFMTCBzeW1ib2xpYyBpbmNsdWRlIHNl dHMuIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIFRTVgotICAgZmlsZSBpbiB3aGljaCB5b3Ug d2FudCB0aGUgc3BhY2VzIGFyb3VuZCBlYWNoIFRhYiB0byBiZSBkaXNjYXJkZWQsIHlvdQotICAg Y2FuIHVzZToKLQotXGZzcGxpdCh2YXJpYWJsZSwgJmEsIFw5LCBDU1YpCi0KLSAgIFw5IGlzIFRh Yi4KLQotICAgVGhlIG5ldyBzeW1ib2xpYyBpbmNsdWRlIHNldHMgY2FuIGFsc28gYmUgdXNlZCB3 aXRoIFxmd29yZCgpLCB3aGljaCBpcwotICAganVzdCBsaWtlIFxmc3BsaXQoKSBleGNlcHQgdGhh dCBpdCByZXRyaWV2ZXMgdGhlIG50aCB3b3JkIGZyb20gdGhlCi0gICBhcmd1bWVudCBzdHJpbmcs IHJhdGhlciB0aGFuIGFuIGFycmF5IG9mIGFsbCB0aGUgd29yZHMuIEluIEMtS2VybWl0IHlvdQot ICAgY2FuIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBvciBhbnkgb3RoZXIgZnVuY3Rpb25z IHdpdGggdGhlIEhFTFAKLSAgIEZVTkNUSU9OIGNvbW1hbmQsIGUuZy46Ci0KLUMtS2VybWl0PiBo ZWxwIGZ1bmMgd29yZAotCi1GdW5jdGlvbiBcZndvcmQoczEsbjEsczIsczMsbjIsbjMpIC0gRXh0 cmFjdHMgYSB3b3JkIGZyb20gYSBzdHJpbmcuCi0gICAgczEgPSBzb3VyY2Ugc3RyaW5nLgotICAg IG4xID0gd29yZCBudW1iZXIgKDEtYmFzZWQpIGNvdW50aW5nIGZyb20gbGVmdDsgaWYgbmVnYXRp dmUsIGZyb20gcmlnaHQuCi0gICAgczIgPSBvcHRpb25hbCBicmVhayBzZXQuCi0gICAgczMgPSBv cHRpb25hbCBpbmNsdWRlIHNldCAob3IgQUxMLCBDU1YsIG9yIFRTVikuCi0gICAgbjIgPSBvcHRp b25hbCBncm91cGluZyBtYXNrLgotICAgIG4zID0gb3B0aW9uYWwgc2VwYXJhdG9yIGZsYWc6Ci0g ICAgICAgMCA9IGNvbGxhcHNlIGFkamFjZW50IHNlcGFyYXRvcnM7Ci0gICAgICAgMSA9IGRvbid0 IGNvbGxhcHNlIGFkamFjZW50IHNlcGFyYXRvcnMuCi0KLSAgXGZ3b3JkKCkgcmV0dXJucyB0aGUg bjF0aCAid29yZCIgb2YgdGhlIHN0cmluZyBzMSwgYWNjb3JkaW5nIHRvIHRoZQotICBjcml0ZXJp YSBzcGVjaWZpZWQgYnkgdGhlIG90aGVyIHBhcmFtZXRlcnMuCi0KLSAgVGhlIEJSRUFLIFNFVCBp cyB0aGUgc2V0IG9mIGFsbCBjaGFyYWN0ZXJzIHRoYXQgc2VwYXJhdGUgd29yZHMuIFRoZQotICBk ZWZhdWx0IGJyZWFrIHNldCBpcyBhbGwgY2hhcmFjdGVycyBleGNlcHQgQVNDSUkgbGV0dGVycyBh bmQgZGlnaXRzLgotICBBU0NJSSAoQzApIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgdHJlYXRlZCBh cyBicmVhayBjaGFyYWN0ZXJzIGJ5IGRlZmF1bHQsCi0gIGFzIGFyZSBzcGFjaW5nIGFuZCBwdW5j dHVhdGlvbiBjaGFyYWN0ZXJzLCBicmFja2V0cywgYW5kIHNvIG9uLCBhbmQKLSAgYWxsIDgtYml0 IGNoYXJhY3RlcnMuCi0KLSAgVGhlIElOQ0xVREUgU0VUIGlzIHRoZSBzZXQgb2YgY2hhcmFjdGVy cyB0aGF0IGFyZSB0byBiZSB0cmVhdGVkIGFzCi0gIHBhcnRzIG9mIHdvcmRzIGV2ZW4gdGhvdWdo IHRoZXkgbm9ybWFsbHkgd291bGQgYmUgc2VwYXJhdG9ycy4gIFRoZQotICBkZWZhdWx0IGluY2x1 ZGUgc2V0IGlzIGVtcHR5LiAgVGhyZWUgc3BlY2lhbCBzeW1ib2xpYyBpbmNsdWRlIHNldHMgYXJl Ci0gIGFsc28gYWxsb3dlZDoKLQotICAgIEFMTCAobWVhbmluZyBpbmNsdWRlIGFsbCBieXRlcyB0 aGF0IGFyZSBub3QgaW4gdGhlIGJyZWFrIHNldCkKLSAgICBDU1YgKHNwZWNpYWwgdHJlYXRtZW50 IGZvciBDb21tYS1TZXBhcmF0ZWQtVmFsdWUgcmVjb3JkcykKLSAgICBUU1YgKHNwZWNpYWwgdHJl YXRtZW50IGZvciBUYWItU2VwYXJhdGVkLVZhbHVlIHJlY29yZHMpCi0KLSAgRm9yIG9wZXJhdGlu ZyBvbiA4LWJpdCBjaGFyYWN0ZXIgc2V0cywgdGhlIGluY2x1ZGUgc2V0IHNob3VsZCBiZSBBTEwu Ci0KLSAgSWYgdGhlIEdST1VQSU5HIE1BU0sgaXMgZ2l2ZW4gYW5kIGlzIG5vbnplcm8sIHdvcmRz IGNhbiBiZSBncm91cGVkIGJ5Ci0gIHF1b3RlcyBvciBicmFja2V0cyBzZWxlY3RlZCBieSB0aGUg c3VtIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICAgMSA9IGRvdWJsZXF1b3RlczogICAgImEgYiBj IgotICAgICAyID0gYnJhY2VzOiAgICAgICAgICB7YSBiIGN9Ci0gICAgIDQgPSBhcG9zdHJvcGhl czogICAgICdhIGIgYycKLSAgICAgOCA9IHBhcmVudGhlc2VzOiAgICAgKGEgYiBjKQotICAgIDE2 ID0gc3F1YXJlIGJyYWNrZXRzOiBbYSBiIGNdCi0gICAgMzIgPSBhbmdsZSBicmFja2V0czogIDxh IGIgYz4KLQotICBOZXN0aW5nIGlzIHBvc3NpYmxlIHdpdGgge30oKVtdPD4gYnV0IG5vdCB3aXRo IHF1b3RlcyBvciBhcG9zdHJvcGhlcy4KLQotUmV0dXJucyBzdHJpbmc6Ci0gIFdvcmQgbnVtYmVy IG4xLCBpZiB0aGVyZSBpcyBvbmUsIG90aGVyd2lzZSBhbiBlbXB0eSBzdHJpbmcuCi0KLUFsc28g c2VlOgotICBIRUxQIEZVTkNUSU9OIFNQTElUCi0KLUMtS2VybWl0PgotCi1Vc2luZyBcZmpvaW4o KSB0byBjcmVhdGUgQ29tbWEtIG9yIFRhYi1TZXBhcmF0ZWQgVmFsdWUgTGlzdHMgZnJvbSBBcnJh eXMKLQotICAgSW4gQy1LZXJtaXQgOS4wLCBcZnNwbGl0KCkncyBpbnZlcnNlIGZ1bmN0aW9uLCBb MTA4XVxmam9pbigpIHJlY2VpdmVkCi0gICB0aGUgY2FwYWJpbGl0eSBvZiBjb252ZXJ0aW5nIGFu IGFycmF5IGludG8gYSBjb21tYS1zZXBhcmF0ZWQgb3IgYQotICAgdGFiLXNlcGFyYXRlZCB2YWx1 ZSBsaXN0LiBUaHVzLCBnaXZlbiBhIENTViwgaWYgeW91IHNwbGl0IGl0IGludG8gYW4KLSAgIGFy cmF5IHdpdGggXGZzcGxpdCgpIGFuZCB0aGVuIGpvaW4gdGhlIGFycmF5IHdpdGggXGZqb2luKCks IGdpdmluZyBlYWNoCi0gICBmdW5jdGlvbiB0aGUgbmV3IENTViBwYXJhbWV0ZXIgaW4gdGhlIGFw cHJvcHJpYXRlIGFyZ3VtZW50IHBvc2l0aW9uLAotICAgdGhlIHJlc3VsdCB3aWxsIGJlIHdpbGwg YmUgZXF1aXZhbGVudCB0byB0aGUgb3JpZ2luYWwsIGFjY29yZGluZyB0byB0aGUKLSAgIENTViBk ZWZpbml0aW9uLiBJdCBtaWdodCBub3QgYmUgaWRlbnRpY2FsLCBiZWNhdXNlIGlmIHRoZSByZXN1 bHQgaGFkCi0gICBleHRyYW5lb3VzIHNwYWNlcyBiZWZvcmUgb3IgYWZ0ZXIgdGhlIHNlcGFyYXRp bmcgY29tbWFzLCB0aGVzZSBhcmUKLSAgIGRpc2NhcmRlZCwgYnV0IHRoYXQgZG9lcyBub3QgYWZm ZWN0IHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzLiBUaGUgbmV3Ci0gICBzeW50YXggZm9yIFxmam9p bigpIGlzOgotCi0gICBcZmpvaW4oJmEsQ1NWKQotICAgICAgICAgIEdpdmVuIHRoZSBhcnJheSBc JmFbXSBvciBhbnkgb3RoZXIgdmFsaWQgYXJyYXkgZGVzaWduYXRvciwgam9pbnMKLSAgICAgICAg ICBpdHMgZWxlbWVudHMgaW50byBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGFjY29yZGluZyB0byB0 aGUKLSAgICAgICAgICBbMTA5XXJ1bGVzIGxpc3RlZCBhYm92ZS4KLQotICAgXGZqb2luKCZhLFRT VikKLSAgICAgICAgICBKb2lucyB0aGUgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGFycmF5IGludG8g YSB0YWItc2VwYXJhdGVkIGxpc3QsCi0gICAgICAgICAgYWxzbyBkZXNjcmliZWQgYWJvdmUuCi0K LSAgIFsxMTBdUHJldmlvdXMgY2FsbGluZyBjb252ZW50aW9ucyBmb3IgXGZqb2luKCkgYXJlIHVu ZGlzdHVyYmVkLAotICAgaW5jbHVkaW5nIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgYSBwb3J0aW9u IG9mIGFuIGFycmF5LCByYXRoZXIgdGhhbiB0aGUKLSAgIHdob2xlIGFycmF5OgotCi1kZWNsYXJl IFwmYVtdID0gMSAyIDMgNCA1IDYgNyA4IDkKLWVjaG8gXGZqb2luKCZhWzM6N10sQ1NWKQotMyw0 LDUsNiw3Ci0KLSAgIFVzaW5nIFxmc3BsaXQoKSBhbmQgXGZqb2luKCkgaXQgaXMgbm93IHBvc3Np YmxlIHRvIGNvbnZlcnQgYQotICAgY29tbWEtc2VwYXJhdGVkIHZhbHVlIGxpc3QgaW50byBhIHRh Yi1zZXBhcmF0ZWQgdmFsdWUgbGlzdCwgYW5kIHZpY2UKLSAgIHZlcnNhICh3aGljaCBpcyBub3Qg YSBzaW1wbGUgbWF0dGVyIG9mIGNoYW5naW5nIGNvbW1hcyB0byB0YWJzIG9yIHZpY2UKLSAgIHZl cnNhKS4KLQotQXBwbGljYXRpb25zIGZvciBDU1YgRmlsZXMKLQotICAgRGF0YWJhc2VzIHN1Y2gg YXMgTVMgQWNjZXNzIG9yIE15U1FMIGNhbiBleHBvcnQgdGFibGVzIG9yIHJlcG9ydHMgaW4KLSAg IENTViBmb3JtYXQsIGFuZCB0aGVuIEtlcm1pdCBjYW4gcmVhZCB0aGUgcmVzdWx0aW5nIENTViBm aWxlIGFuZCBkbwotICAgd2hhdGV2ZXIgeW91IGxpa2Ugd2l0aCBpdDsgdHlwaWNhbGx5IHNvbWV0 aGluZyB0aGF0IGNvdWxkIG5vdCBiZSBkb25lCi0gICB3aXRoIHRoZSBkYXRhYmFzZSBxdWVyeSBs YW5ndWFnZSBpdHNlbGYgKG9yIHRoYXQgeW91IGRpZG4ndCBrbm93IGhvdyB0bwotICAgZG8gdGhh dCB3YXkpOiBjcmVhdGUgcmVwb3J0cyBvciBkYXRhc2V0cyBiYXNlZCBvbiBjb21wbGV4IGNyaXRl cmlhIG9yCi0gICBwcm9jZWR1cmVzLCBlZGl0IG9yIG1vZGlmeSBzb21lIGZpZWxkcywgZXRjLCBh bmQgdGhlbiB1c2UgXGZqb2luKCkgdG8KLSAgIHB1dCBlYWNoIHJlY29yZCBiYWNrIGluIENTViBm b3JtIHNvIGl0IGNhbiBiZSByZWltcG9ydGVkIGludG8gYQotICAgc3ByZWFkc2hlZXQgb3IgZGF0 YWJhc2UuCi0KLSAgIEhlcmUgaXMgYSBzaW1wbGUgZXhhbXBsZSBpbiB3aGljaCB3ZSBwdXJnZSBh bGwgcmVjb3JkcyBvZiBjdXN0b21lcnMgd2hvCi0gICBoYXZlIHR3byBvciBtb3JlIHVucGFpZCBi aWxscy4gVGhlIGZpbGUgaXMgc29ydGVkIHNvIHRoYXQgZWFjaCBsaWNlbnNlCi0gICBwdXJjaGFz ZSByZWNvcmQgaXMgZm9sbG93ZWQgYnkgaXRzIGFubnVhbCBtYWludGVuYW5jZSBwYXltZW50IHJl Y29yZHMKLSAgIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIuCi0KLSMhL3Vzci9sb2NhbC9iaW4va2Vy bWl0Ci0uZmlsZW5hbWUgPSBzb21lZmlsZS5jc3YgICAgICAgICMgSW5wdXQgZmlsZSBpbiBDU1Yg Zm9ybWF0Ci1mb3BlbiAvcmVhZCBcJWMgXG0oZmlsZW5hbWUpICAgICMgT3BlbiBpdAotaWYgZmFp bCBleGl0ICAgICAgICAgICAgICAgICAgICAjIERvbid0IGdvIG9uIGlmIG9wZW4gZmFpbGVkCi1j b3B5IFxtKGZpbGVuYW1lKSAuL25ldyAgICAgICAgICMgTWFrZSBhIGNvcHkgb2YgdGhlIGZpbGUK LQotLm9sZHNlcmlhbCA9IDAwMDAwMDAwMDAwICAgICAgICAjIE11bHRpcGxlIHJlY29yZHMgZm9y IGVhY2ggc2VyaWFsIG51bWJlcgotLnplcm9zID0gMCAgICAgICAgICAgICAgICAgICAgICAjIFVu cGFpZCBiaWxsIGNvdW50ZXIKLQotd2hpbGUgdHJ1ZSB7ICAgICAgICAgICAgICAgICAgICAjIExv b3AKLSAgICBmcmVhZCAvbGluZSBcJWMgbGluZSAgICAgICAgIyBHZXQgYSByZWNvcmQKLSAgICBp ZiBmYWlsIGV4aXQgICAgICAgICAgICAgICAgIyBFbmQgb2YgZmlsZQotICAgIC5uIDo9IFxmc3Bs aXQoXG0obGluZSksJmEsXDQ0LENTVikgICAgIyBTcGxpdCB0aGUgZmllbGRzIGludG8gYW4gYXJy YXkKLSAgICBpZiBub3QgZXF1ICJcbShvbGRzZXJpYWwpIiAiXCZhWzZdIiB7ICMgSGF2ZSBuZXcg c2VyaWFsIG51bWJlcj8KLSAgICAgICAgIyBSZW1vdmUgYWxsIHJlY29yZHMgZm9yIHByZXZpb3Vz IHNlcmlhbCBudW1iZXIKLSAgICAgICAgIyBpZiB0d28gb3IgbW9yZSBiaWxscyB3ZXJlIG5vdCBw YWlkLi4uCi0gICAgICAgIGlmID4gXG0oemVyb3MpIDEgewotICAgICAgICAgICAgZ3JlcCAvbm9t YXRjaCBcbShvbGRzZXJpYWwpIC9vdXRwdXQ6Li9uZXcyIC4vbmV3Ci0gICAgICAgICAgICByZW5h bWUgLi9uZXcyIC4vbmV3Ci0gICAgICAgIH0KLSAgICAgICAgLm9sZHNlcmlhbCA6PSBcJmFbNl0g ICAgIyBUbyBkZXRlY3QgbmV4dCB0aW1lIHNlcmlhbCBudW1iZXIgY2hhbmdlcwotICAgICAgICAu emVyb3MgPSAwICAgICAgICAgICAgICAjIFJlc2V0IHVucGFpZCBiaWxsIGNvdW50ZXIKLSAgICB9 Ci0gICAgaWYgZXF1ICJcJmFbNV0iICIkMC4wMCIgeyAgICMgRWxlbWVudCA1IGlzIGFtb3VudCBw YWlkCi0gICAgICAgIGluY3JlbWVudCB6ZXJvcyAgICAgICAgICMgSWYgaXQncyB6ZXJvLCBjb3Vu dCBpdC4KLSAgICB9Ci19Ci1mY2xvc2UgXCVjCi0KLSAgIFJld3JpdGluZyB0aGUgZmlsZSBtdWx0 aXBsZSB0aW1lcyBpcyBpbmVsZWdhbnQsIGJ1dCB0aGlzIGlzIGEgcXVpY2sgYW5kCi0gICBkaXJ0 eSB1c2Utb25jZS1hbmQtZGlzY2FyZCBzY3JpcHQsIHNvIGVsZWdhbmNlIGRvZXNuJ3QgY291bnQu IFRoZQotICAgZXhhbXBsZSBpcyBpbnRlcmVzdGluZyBpbiB0aGF0IGl0IHB1cmdlcyBjZXJ0YWlu IHJlY29yZHMgYmFzZWQgb24gdGhlCi0gICBjb250ZW50cyBvZiBvdGhlciByZWNvcmRzLiBNYXli ZSB0aGVyZSBpcyBhIHdheSB0byBkbyB0aGlzIGRpcmVjdGx5Ci0gICB3aXRoIFNRTCwgYnV0IHdo eSB1c2UgU1FMIHdoZW4geW91IGNhbiB1c2UgS2VybWl0PwotCi0gICBIZXJlIGlzIHRoZSBzYW1l IHRhc2sgYnV0IHRoaXMgdGltZSBubyBzaGVsbGluZyBvdXQsIGFuZCB0aGlzIHRpbWUgd2UKLSAg IGRvIGNoYW5nZSBhbmQgYWRkIHNvbWUgZmllbGRzIGFuZCB0aGVuIGpvaW4gdGhlIHJlc3VsdCBi YWNrIGludG8gYSBDU1YKLSAgIHJlY29yZCBhbmQgd3JpdGUgaXQgb3V0IHRvIGEgbmV3IGZpbGUu IFRoZSBvYmplY3QgaXMgdG8gY3JlYXRlIGEgcmVjb3JkCi0gICBmb3IgZWFjaCBsaWNlbnNlIHRo YXQgc2hvd3Mgbm90IG9ubHkgdGhlIGRhdGUgYW5kIHB1cmNoYXNlIHByaWNlIG9mIHRoZQotICAg bGljZW5zZSBidXQgYWxzbyB0aGUgZGF0ZSBhbmQgYW1vdW50IG9mIHRoZSBsYXN0IG1haW50ZW5h bmNlIHBheW1lbnQsCi0gICBhbmQgdG8gYWRkIG5ldyBmaWVsZHMgZm9yIHNvcnRpbmcgYnkgYW5u aXZlcnNhcnkgKG1vbnRoIGFuZCBkYXkpOgotCi0jIXVzci9sb2NhbC9iaW4va2VybWl0ICsKLWNk IH4vc29tZWRpcmVjdG9yeSAgICAgICAgICAgICAgICAgICAgICAjIENEIHRvIGFwcHJvcHJpYXRl IGRpcmVjdG9yeQotaWYgZmFpbCBleGl0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWFr ZSBzdXJlIHdlIGRpZAotLmZpbGVuYW1lIDo9IFwlMSAgICAgICAgICAgICAgICAgICAgICAgICMg RmlsZW5hbWUgZnJvbSBjb21tYW5kIGxpbmUKLWlmIG5vdCBkZWYgZmlsZW5hbWUgeyAgICAgICAg ICAgICAgICAgICAjIElmIG5vbmUgZ2l2ZSB1c2FnZSBtZXNzYWdlCi0gICAgZXhpdCAxICJVc2Fn ZTogXCUwOiBpbmZpbGUgWyBvdXRmaWxlIF0iCi19Ci1mb3BlbiAvcmVhZCBcJWMgXG0oZmlsZW5h bWUpICAgICAgICAgICAgIyBPcGVuIHRoZSBpbnB1dCBDU1YgZmlsZQotaWYgZmFpbCBleGl0ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGRpZAotCi0ub3V0cHV0IDo9 IFwlMiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPdXRwdXQgZmlsZW5hbWUgZnJvbSBjb21t YW5kIGxpbmUKLWlmIG5vdCBkZWYgb3V0cHV0IHsgICAgICAgICAgICAgICAgICAgICAjIFN1cHBs eSBvbmUgaWYgbm90IGdpdmVuCi0gICAgLm91dHB1dCA6PSBOZXdfXG0oZmlsZW5hbWUpCi19Ci1m b3BlbiAvd3JpdGUgXCVvIFxtKG91dHB1dCkgICAgICAgICAgICAgIyBPcGVuIG91dHB1dCBmaWxl Ci1pZiBmYWlsIGV4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IHdl IGRpZAotCi0uc2VyaWFsID0gMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAgIyBJbml0aWFs aXplIHNlcmlhbCBudW1iZXIKLS5saWNlbnNlcyA9IDAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIGFuZCBsaWNlbnNlIGNvdW50ZXIKLQotZnJlYWQgL2xpbmUgXCVjIGxpbmUgICAgICAgICAg ICAgICAgICAgICAgICAjIEZpcnN0IGxpbmUgaXMgY29sdW1uIGxhYmVscwotaWYgZmFpbCBleGl0 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENoZWNrCi1md3JpdGUgL2xpbmUgXCVv ICJcbShsaW5lKSxBTU1fREQsQVlZWVkiICAgICMgV3JpdGUgbmV3IGxhYmVscyBsaW5lCi0KLSMg UmVtYWluaW5nIGxpbmVzIGFyZSBsaWNlbnNlIHB1cmNoYXNlcyAoSzk1QikgZm9sbG93ZWQgYnkg emVybyBvciBtb3JlCi0jIG1haW50ZW5hbmNlIGludm9pY2VzIChLOTVCTSkgZm9yIGVhY2ggbGlj ZW5zZS4KLQotLmRhdGVwYWlkID0gMDAvMDAvMDAwMCAgICAgICAgICAgICAgICAgICMgSW5pdGlh bGl6ZSBsYXN0IG1haW50IHBheW1lbnQgZGF0ZQotLmFtdHBhaWQgPSAkMC4wMCAgICAgICAgICAg ICAgICAgICAgICAgICMgSW5pdGlhbGl6ZSBsYXN0IG1haW50IHBheW1lbnQgYW1vdW50Ci1zZXQg ZmxhZyBvZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGb3IgcmVtZW1iZXJpbmcgd2Un cmUgYXQgZW5kIG9mIGZpbGUKLXdoaWxlIG5vdCBmbGFnIHsgICAgICAgICAgICAgICAgICAgICAg ICAjIExvb3AgdG8gcmVhZCBhbGwgcmVjb3JkcwotICAgIGZyZWFkIC9saW5lIFwlYyBsaW5lICAg ICAgICAgICAgICAgICMgUmVhZCBhIHJlY29yZAotICAgIGlmIGZhaWwgc2V0IGZsYWcgb24gICAg ICAgICAgICAgICAgICMgSWYgRU9GIHNldCBmbGFnIGZvciBsYXRlcgotICAgIC5uIDo9IFxmc3Bs aXQoXG0obGluZSksJmEsXDQ0LENTVikgICMgQnJlYWsgcmVjb3JkIGludG8gYXJyYXkKLSAgICBp ZiAoIGZsYWcgfHwgZXF1ICJcJmFbM10iICJLOTVCIiApIHsgIyBMaWNlbnNlIG9yIEVPRgotICAg ICAgICBpZiBmYWlsIGV4aXQgMSAiRkFJTEVEOiBcdihsYXN0Y29tbWFuZCkiCi0gICAgICAgIGlm IGxpY2Vuc2VzIHsgICAgICAgICAgICAgICAgICAgIyBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qg bGljZW5zZQotICAgICAgICAgICAgLlwmeFs1XSA6PSBcbShhbXRwYWlkKSAgICAgICMgU3Vic3Rp dHV0ZSBtb3N0IHJlY2VudCBhbW91bnQgcGFpZAotICAgICAgICAgICAgLlwmeFsyMV0gOj0gXG0o ZGF0ZXBhaWQpICAgICMgU3Vic3RpdHV0ZSBtb3N0IHJlY2VudCBkYXRlIHBhaWQKLSAgICAgICAg ICAgIHZvaWQgXGZzcGxpdChcJnhbMThdLCZkLC8pICAjIEJyZWFrIHVwIG9yaWdpbmFsIChhbm5p dmVyc2FyeSkgZGF0ZQotICAgICAgICAgICAgIyBhbmQgcHV0IG1tX2RkIGFuZCB5eXl5IGluIHNl cGFyYXRlIGZpZWxkcyBmb3Igc29ydGluZy4uLgotICAgICAgICAgICAgZndyaXRlIC9saW5lIFwl byAiXGZqb2luKCZ4LENTViksXGZscGFkKFwmZFsxXSwyLDApX1xmbHBhZChcJmRbMl0sMiwKLTAp LFwmZFszXSIKLSAgICAgICAgICAgIGlmIGZhaWwgZXhpdCAxIFdSSVRFICAgICAgICAjIENoZWNr IGZvciBlcnJvcgotICAgICAgICAgICAgeGVjaG8gLiAgICAgICAgICAgICAgICAgICAgICMgU2hv dyBwcm9ncmVzcyBhcyBvbmUgZG90IHBlciByZWNvcmQKLSAgICAgICAgfQotICAgICAgICBpZiBm bGFnIGJyZWFrICAgICAgICAgICAgICAgICAgICMgV2UncmUgYXQgRU9GIHNvIHdlJ3JlIGZpbmlz aGVkCi0gICAgICAgIGluY3JlbWVudCBsaWNlbnNlcyAgICAgICAgICAgICAgIyBOZXcgbGljZW5z ZSAtIGNvdW50IGl0Ci0gICAgICAgIGFycmF5IGNvcHkgJmEgJnggICAgICAgICAgICAgICAgIyBL ZWVwIHRoaXMgcmVjb3JkIHdoaWxlIHJlYWRpbmcgbmV4dAotICAgICAgICAuc2VyaWFsIDo9IFwm YVs2XSAgICAgICAgICAgICAgICMgUmVtZW1iZXIgc2VyaWFsIG51bWJlcgotICAgICAgICAuZGF0 ZXBhaWQgPSAwMC8wMC8wMDAwICAgICAgICAgICMgSW5pdGlhbCBtYWludGVuYW5jZSBwYXltZW50 IGRhdGUKLSAgICAgICAgLmFtdHBhaWQgPSAkMC4wMCAgICAgICAgICAgICAgICAjIGFuZCBhbW91 bnQKLSAgICAgICAgY29udGludWUgICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCBnbyBiYWNr IHRvIHJlYWQgbmV4dCByZWNvcmQKLSAgICB9Ci0gICAgaWYgbm90IGVxICJcbShzZXJpYWwpIiAi XCZhWzZdIiB7ICAgIyBDYXRjaCBvdXQtb2Ytc2VxdWVuY2UgcmVjb3JkCi0gICAgICAgIGVjaG8K LSAgICAgICAgZWNobyAiU0VRVUVOQ0U6IFxtKHNlcmlhbCkuLlwmYVs2XTogXCZhWzddIFtcJmFb MV1dIgotICAgICAgICBjb250aW51ZQotICAgIH0KLSAgICBpZiBlcXUgIlwmYVs1XSIgIiIgLlwm YVs1XSA9ICQwLjAwICAjIElmIGFtb3VudCBpcyBlbXB0eSBtYWtlIGl0ICQwLjAwCi0gICAgaWYg bm90IGVxdSAiXCZhWzVdIiAiJDAuMDAiIHsgICAgICAgIyBJZiBhbW91bnQgaXMgbm90ICQwLjAw Ci0gICAgICAgIC5kYXRlcGFpZCA6PSBcJmFbMjFdICAgICAgICAgICAgIyByZW1lbWJlciBkYXRl IHBhaWQKLSAgICAgICAgLmFtdHBhaWQgOj0gXCZhWzVdICAgICAgICAgICAgICAjIGFuZCBhbW91 bnQgcGFpZAotICAgIH0KLX0KLWZjbG9zZSBBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIERvbmUgLSBjbG9zZSBhbGwgZmlsZXMgYW5kIGV4aXQKLWV4aXQgMCBEb25lLgotCi0KLSAg IFRoZSByZXN1bHQgaW1wb3J0cyBiYWNrIGludG8gRXhjZWwsIHdoZXJlIGl0IGNhbiBiZSBzb3J0 ZWQsIGZvcm1hdHRlZCwKLSAgIG9yIG90aGVyd2lzZSBtYW5pcHVsYXRlZCBhcyBkZXNpcmVkLgot Ci1Vc2luZyBDU1YgRmlsZXM6IEV4dGVuZGluZyBLZXJtaXQncyBEYXRhIFN0cnVjdHVyZXMKLQot ICAgTm93IHRoYXQgd2UgY2FuIHBhcnNlIGEgQ1NWIHJlY29yZCwgd2hhdCB3b3VsZCB3ZSBkbyB3 aXRoIGEgQ1NWIGZpbGUgLQotICAgdGhhdCBpcywgYSBzZXF1ZW5jZSBvZiByZWNvcmRzPyBJZiB3 ZSBuZWVkZWQgYWxsIHRoZSBkYXRhIGF2YWlsYWJsZSBhdAotICAgb25jZSwgd2Ugd291bGQgd2Fu dCB0byBsb2FkIGl0IGludG8gYSBtYXRyaXggb2YgKHJvdyxjb2x1bW4pIHZhbHVlcy4KLSAgIEJ1 dCBLZXJtaXQgZG9lc24ndCBoYXZlIG1hdHJpY2VzLiBPciBkb2VzIGl0PwotCi0gICBLZXJtaXQg aGFzIHNldmVyYWwgYnVpbHQtaW4gZGF0YSB0eXBlcywgYnV0IHlvdSBjYW4gaW52ZW50IHlvdXIg b3duCi0gICBkYXRhIHR5cGVzIGFzIG5lZWRlZCB1c2luZyBLZXJtaXQncyBtYWNybyBmZWF0dXJl OgotCi1kZWZpbmUgdmFyaWFibGVuYW1lIHZhbHVlCi0KLSAgIEZvciBleGFtcGxlOgotCi1kZWZp bmUgYWxwaGFiZXQgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLQotICAgVGhpcyBkZWZpbmVz IGEgbWFjcm8gbmFtZWQgYWxwaGFiZXQgYW5kIGdpdmVzIGl0IHRoZSB2YWx1ZQotICAgYWJjZGVm Z2hpamtsbW5vcHFyc3R1dnd4eXouIEEgbW9yZSBjb252ZW5pZW50IG5vdGF0aW9uIChhZGRlZCBp bgotICAgQy1LZXJtaXQgNy4wLCBzZWUgWzExMV1UYWJsZSAyKSBmb3IgdGhpcyBpczoKLQotLmFs cGhhYmV0ID0gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLQotICAgVGhlIHR3byBhcmUgZXhh Y3RseSBlcXVpdmFsZW50OiB0aGV5IG1ha2UgYSBsaXRlcmFsIGNvcHkgdGhlICJyaWdodAotICAg aGFuZCBzaWRlIiBhcyB0aGUgdmFsdWUgb2YgdGhlIG1hY3JvLiBUaGVuIHlvdSBjYW4gcmVmZXIg dG8gdGhlIG1hY3JvCi0gICBhbnl3aGVyZSBpbiBhIEtlcm1pdCBjb21tYW5kIGFzICJcbShtYWNy b25hbWUpIjoKLQotZWNobyAiQWxwaGFiZXQgPSBcbShhbHBoYWJldCkiCi0KLSAgIFRoZXJlIGlz IGEgc2Vjb25kIHdheSB0byBkZWZpbmUgYSBtYWNybywgd2hpY2ggaXMgbGlrZSB0aGUgZmlyc3Qg ZXhjZXB0Ci0gICB0aGF0IHRoZSByaWdodC1oYW5kIHNpZGUgaXMgZXZhbHVhdGVkIGZpcnN0OyB0 aGF0IGlzLCBhbnkgdmFyaWFibGUKLSAgIHJlZmVyZW5jZXMgb3IgZnVuY3Rpb24gY2FsbHMgaW4g dGhlIHJpZ2h0LWhhbmQgc2lkZSBhcmUgcmVwbGFjZWQgYnkKLSAgIHRoZWlyIHZhbHVlcyBiZWZv cmUgdGhlIHJlc3VsdCBpcyBhc3NpZ25lZCB0byB0aGUgbWFjcm8uIFRoZSBjb21tYW5kCi0gICBm b3IgdGhpcyBpcyBBU1NJR04gcmF0aGVyIHRoYW4gREVGSU5FOgotCi1kZWZpbmUgYWxwaGFiZXQg YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLWFzc2lnbiBiYWNrd2FyZHMgXGZyZXZlcnNlKFxt KGFscGhhYmV0KSkKLWVjaG8gIkFscGhhYmV0IGJhY2t3YXJkcyA9IFxtKGJhY2t3YXJkcykiCi0K LSAgIHdoaWNoIHByaW50czoKLQotQWxwaGFiZXQgYmFja3dhcmRzID0genl4d3Z1dHNycXBvbm1s a2ppaGdmZWRjYmEKLQotICAgVGhpcyBraW5kIG9mIGFzc2lnbm1lbnQgY2FuIGFsc28gYmUgZG9u ZSBsaWtlIHRoaXM6Ci0KLS5hbHBoYWJldCA9IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0u YmFja3dhcmRzIDo9IFxmcmV2ZXJzZShcbShhbHBoYWJldCkpCi0KLSAgIFsxMTJdQW55IGNvbW1h bmQgc3RhcnRpbmcgd2l0aCBhIHBlcmlvZCBpcyBhbiBhc3NpZ25tZW50LCBhbmQgdGhlCi0gICBv cGVyYXRvciAoPSBvciA6PSkgdGVsbHMgd2hhdCB0byBkbyB3aXRoIHRoZSByaWdodC1oYW5kIHNp ZGUgYmVmb3JlCi0gICBtYWtpbmcgdGhlIGFzc2lnbm1lbnQuCi0KLSAgIEluIGJvdGggdGhlIERF RklORSBhbmQgQVNTSUdOIGNvbW1hbmRzLCB0aGUgdmFyaWFibGUgbmFtZSBpdHNlbGYgaXMKLSAg IHRha2VuIGxpdGVyYWxseS4gSXQgaXMgYWxzbyBwb3NzaWJsZSwgaG93ZXZlciwgdG8gaGF2ZSBL ZXJtaXQgY29tcHV0ZQotICAgdGhlIHZhcmlhYmxlIG5hbWUuIFRoaXMgaXMgZG9uZSAoYXMgZGVz Y3JpYmVkIGluIFsxMTNdVXNpbmcgQy1LZXJtaXQsCi0gICAybmQgRWQuLCBwLjQ1NyksIHVzaW5n IHBhcmFsbGVsIGNvbW1hbmRzIHRoYXQgc3RhcnQgd2l0aCB1bmRlcnNjb3JlOgotICAgX0RFRklO RSBhbmQgX0FTU0lHTiAoYWxpYXMgX0RFRiBhbmQgX0FTRykuIFRoZXNlIGFyZSBqdXN0IGxpa2Ug REVGSU5FCi0gICBhbmQgQVNTSUdOIGV4Y2VwdCB0aGV5IGV2YWx1YXRlIHRoZSB2YXJpYWJsZSBu YW1lIGJlZm9yZSBtYWtpbmcgdGhlCi0gICBhc3NpZ25tZW50LiBGb3IgZXhhbXBsZToKLQotZGVm aW5lIFwlYSBvbmUKLV9kZWZpbmUgXCVhXCVhXCVhIDExMQotCi0gICB3b3VsZCBjcmVhdGUgYSBt YWNybyBuYW1lZCBPTkVPTkVPTkUgd2l0aCBhIHZhbHVlIG9mIDExMSwgYW5kOgotCi1kZWZpbmUg XCVhIG9uZQotZGVmaW5lIG51bWJlciAxMTEKLV9hc3NpZ24gXCVhXCVhXCVhIFxtKG51bWJlcikK LQotICAgd291bGQgY3JlYXRlIHRoZSBzYW1lIG1hY3JvIHdpdGggdGhlIHNhbWUgdmFsdWUsIGJ1 dDoKLQotZGVmaW5lIFwlYSBvbmUKLWRlZmluZSBudW1iZXIgMTExCi1fZGVmaW5lIFwlYVwlYVwl YSBcbShudW1iZXIpCi0KLSAgIHdvdWxkIGdpdmUgdGhlIG1hY3JvIGEgdmFsdWUgb2YgIlxtKG51 bWJlcikiLgotCi0gICBZb3UgY2FuIHVzZSB0aGUgX0FTU0lHTiBjb21tYW5kIHRvIGNyZWF0ZSBh bnkga2luZCBvZiBkYXRhIHN0cnVjdHVyZQotICAgeW91IHdhbnQ7IHlvdSBjYW4gZmluZCBzb21l IGV4YW1wbGVzIGluIHRoZSBbMTE0XU9iamVjdC1PcmllbnRlZAotICAgUHJvZ3JhbW1pbmcgc2Vj dGlvbiBvZiB0aGUgWzExNV1LZXJtaXQgU2NyaXB0IExpYnJhcnkuIEluIHRoZSBmb2xsb3dpbmcK LSAgIHByb2dyYW0gd2UgdXNlIHRoaXMgY2FwYWJpbGl0eSB0byBjcmVhdGUgYSB0d28tZGltZW5z aW9uYWwgYXJyYXksIG9yCi0gICBtYXRyaXgsIHRvIGhvbGQgdGhlIGFsbCB0aGUgZWxlbWVudHMg b2YgdGhlIENTViBmaWxlLCBhbmQgdGhlbiB0bwotICAgZGlzcGxheSB0aGUgbWF0cml4OgotCi1m b3BlbiAvcmVhZCBcJWMgZGF0YS5jc3YgICAgICAgICAgICAgICAgIyBPcGVuIENTViBmaWxlCi1p ZiBmYWlsIGV4aXQgMQotCi0uXCVyID0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBSb3cKLS5cJW0gPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1heGltdW0g Y29sdW1ucwotd2hpbGUgdHJ1ZSB7Ci0gICAgZnJlYWQgL2xpbmUgXCVjIGxpbmUgICAgICAgICAg ICAgICAgIyBSZWFkIGEgcmVjb3JkCi0gICAgaWYgZmFpbCBicmVhayAgICAgICAgICAgICAgICAg ICAgICAgIyBFbmQgb2YgZmlsZQotICAgIC5cJW4gOj0gXGZzcGxpdChcbShsaW5lKSwmYSxcNDQs Q1NWKSAjIFNwbGl0IHJlY29yZCBpbnRvIGl0ZW1zCi0gICAgaW5jciBcJXIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBDb3VudCB0aGlzIHJvdwotICAgIGZvciBcJWkgMSBcJW4gMSB7ICAg ICAgICAgICAgICAgICAgICMgQXNzaWduIGl0ZW1zIHRvIHRoaXMgcm93IG9mIG1hdHJpeAotICAg ICAgICBfYXNnIGFbXCVyXVtcJWldIFwmYVtcJWldCi0gICAgfQotICAgIGlmID4gXCVpIFwlbSB7 IC5cJW0gOj0gXCVpIH0gICAgICAgICMgUmVtZW1iZXIgd2lkdGggb2Ygd2lkZXN0IHJvdwotfQot ZmNsb3NlIFwlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2xvc2UgQ1NWIGZpbGUK LWRlY3JlbWVudCBcJW0gICAgICAgICAgICAgICAgICAgICAgICAgICAjIChiZWNhdXNlIG9mIGhv dyBGT1IgbG9vcCB3b3JrcykKLWVjaG8gTUFUUklYIEEgUk9XUzogXCVyIENPTFVNTlM6IFwlbSAg ICAjIFNob3cgdGhlIG1hdHJpeAotCi1mb3IgXCVpIDEgXCVyIDEgeyAgICAgICAgICAgICAgICAg ICAgICAgIyBMb29wIHRocm91Z2ggcm93cwotICAgIGZvciBcJWogMSBcJW0gMSB7ICAgICAgICAg ICAgICAgICAgICMgTG9vcCB0aHJvdWdoIGNvbHVtbnMgb2YgZWFjaCByb3cKLSAgICAgICAgeGVj aG8gIlxmbHBhZChcbShhW1wlaV1bXCVqXSksNikiCi0gICAgfQotICAgIGVjaG8KLX0KLWV4aXQg MAotCi0gICBUaGUgbWF0cml4IGlzIGNhbGxlZCBhIGFuZCBpdHMgZWxlbWVudHMgYXJlIGFbMV1b MV0sIGFbMV1bMl0sIGFbMV1bM10sCi0gICAuLi4gYVsyXVsxXSwgZXRjLCBhbmQgeW91IGNhbiB0 cmVhdCB0aGlzIGRhdGEgc3RydWN0dXJlIGV4YWN0bHkgbGlrZSBhCi0gICB0d28tZGltZW5zaW9u YWwgYXJyYXksIGluIHdoaWNoIHlvdSBjYW4gcmVmZXIgdG8gYW55IGVsZW1lbnQgYnkgaXRzICJY Ci0gICBhbmQgWSBjb29yZGluYXRlcyIuIEZvciBleGFtcGxlLCBpZiB0aGUgQ1NWIGZpbGUgY29u dGFpbmVkIG51bWVyaWMgZGF0YQotICAgeW91IGNvdWxkIGNvbXB1dGUgcm93IGFuZCBjb2x1bW4g c3VtcyB1c2luZyBzaW1wbGUgRk9SIGxvb3BzIGFuZAotICAgS2VybWl0J3MgYnVpbHQtaW4gb25l LWRpbWVuc2lvbmFsIGFycmF5IGRhdGEgdHlwZToKLQotZGVjbGFyZSBcJnJbXCVyXSAgICAgICAg ICAgICAgICAgICAgICAgICMgTWFrZSBhbiBhcnJheSBmb3IgdGhlIHJvdyBzdW1zCi1kZWNsYXJl IFwmY1tcJW1dICAgICAgICAgICAgICAgICAgICAgICAgIyBNYWtlIGFuIGFycmF5IGZvciB0aGUg Y29sdW1uIHN1bXMKLWZvciBcJWkgMSBcJXIgMSB7ICAgICAgICAgICAgICAgICAgICAgICAjIExv b3AgdGhyb3VnaCByb3dzCi0gICAgZm9yIFwlaiAxIFwlbSAxIHsgICAgICAgICAgICAgICAgICAg IyBMb29wIHRocm91Z2ggY29sdW1ucyBvZiBlYWNoIHJvdwotICAgICAgICBpbmNyZW1lbnQgXCZy W1wlaV0gXG0oYVtcJWldW1wlal0pICMgQWNjdW11bGF0ZSByb3cgc3VtCi0gICAgICAgIGluY3Jl bWVudCBcJmNbXCVqXSBcbShhW1wlaV1bXCVqXSkgIyBBY2N1bXVsYXRlIGNvbHVtbiBzdW0KLSAg ICB9Ci19Ci0KLSAgIE5vdGUgdGhhdCB0aGUgc3VtIGFycmF5cyBkb24ndCBoYXZlIHRvIGJlIGlu aXRpYWxpemVkIHRvIHplcm8gYmVjYXVzZQotICAgS2VybWl0J3MgSU5DUkVNRU5UIGNvbW1hbmQg dHJlYXRzIGVtcHR5IGRlZmluaXRpb25zIGFzIHplcm8uCi0KLURlbW9uc3RyYXRpb24gU2NyaXB0 cyBmb3IgV2VibWFzdGVycwotCi0gICBUaGVzZSBzY3JpcHRzIGFsbCB1c2UgbmV3IGZlYXR1cmVz IG9mIEMtS2VybWl0IDkuMC4KLQotICAgWzExNl1rc2l0ZW1hcAotICAgICAgICAgIEEgQy1LZXJt aXQgOS4wIHNjcmlwdCB0byBidWlsZCBzaXRlbWFwLnhtbCBmb3IgYSB3ZWJzaXRlLAotICAgICAg ICAgIGNvbXBsZXRlIHdpdGggR29vZ2xlIGltYWdlIGV4dGVuc2lvbnMgKHRoaXMgaXMgdGhlIGZp bGUgdXNlZCBieQotICAgICAgICAgIHdlYm1hc3RlcnMgdG8gZ2V0IHRoZWlyIHNpdGVzIGNyYXds ZWQgYW5kIGluZGV4ZWQgb3B0aW1hbGx5KS4KLQotICAgWzExN11UaGUgV2VibG9nIFNjcmlwdAot ICAgICAgICAgIFJlYWRzIGEgd2ViIGxvZywgZXh0cmFjdHMgdGhlIEdvb2dsZSBzZWFyY2hlcywg bm9ybWFsaXplcyB0aGUKLSAgICAgICAgICBzZWFyY2ggc3RyaW5ncywgYW5kIHByaW50cyB0aGUg dG9wIDIwIHNlYXJjaGVzLCBhbG9uZyB3aXRoIHRoZWlyCi0gICAgICAgICAgY291bnRzLgotCi0g ICBbMTE4XVRoZSBBbWF6b24gU2NyaXB0Ci0gICAgICAgICAgUmVhZHMgYW4gQW1hem9uIEFzc29j aWF0ZSBvcmRlcnMgcmVwb3J0IGFuZCBsaXN0cyB0aGUgcHJvZHVjdHMKLSAgICAgICAgICBhY2Nv cmRpbmcgdG8gdGhlIG51bWJlciBvZiBvcmRlcnMgZm9yIGVhY2gsIG9yIHRoZSBudW1iZXIgb2YK LSAgICAgICAgICBjbGlja3Mgb24gZWFjaC4KLQotICAgWzExOV1QaG90b2FsYnVtCi0gICAgICAg ICAgTWFrZXMgYSB3ZWJzaXRlIGZyb20gYSBjb2xsZWN0aW9uIG9mIEpQRyBpbWFnZXMuCi0KLSAg ICAgICAgICAgIFsxMjBdSG9tZSBbMTIxXUtlcm1pdCA5NSBbMTIyXUMtS2VybWl0IFsxMjNdU2Ny aXB0cyBbMTI0XUN1cnJlbnQKLSAgIFsxMjVdTmV3IFsxMjZdRkFRICBbMTI3XVN1cHBvcnQKLQot Ci0gICAgQy1LZXJtaXQgOS4wIC8gWzEyOF1UaGUgS2VybWl0IFByb2plY3QgLyBbMTI5XUNvbHVt YmlhIFVuaXZlcnNpdHkgLwotICAgIFsxMzBda2VybWl0QGNvbHVtYmlhLmVkdSAvIFsxMzFddmFs aWRhdGUKLQotUmVmZXJlbmNlcwotCi0gICAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS8KLSAg IDIuIG1haWx0bzprZXJtaXRAY29sdW1iaWEuZWR1Ci0gICAzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvaW5kZXguaHRtbAotICAgNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2s5NS5odG1sCi0gICA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dC5odG1sCi0gICA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tzY3JpcHRzLmh0 bWwKLSAgIDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdXJyZW50Lmh0bWwKLSAg IDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC93aGF0c25ldy5odG1sCi0gICA5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZmFxLmh0bWwKLSAgMTAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0bWwKLSAgMTEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2N1L2NvbXB1dGluZ2hpc3RvcnkvYm9va3MvI21lbmFnZXJpZQotICAxMi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrOTB0YWJsZXMuaHRtbAotICAxMy4gaHR0cDovL3d3 dy5hbWF6b24uY29tL2dwL3Byb2R1Y3QvMTU1NTU4MTY0MT9pZT1VVEY4JnRhZz1hbGVpZG1vcmVs ZG9tLTIwJmxpbmtDb2RlPWFzMiZjYW1wPTE3ODkmY3JlYXRpdmU9OTMyNSZjcmVhdGl2ZUFTSU49 MTU1NTU4MTY0MQotICAxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQu aHRtbCNkb3dubG9hZAotICAxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ5MC5odG1sI0xhcmdlRmlsZXMKLSAgMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0OTAuaHRtbCNUZXN0TGFyZ2VGaWxlcwotICAxNy4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI0JpZ251bXMKLSAgMTguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNmb3JjZTMKLSAgMTkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNWYXJldmFsCi0gIDIwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjcmVuYW1lCi0gIDIxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjT3RoZXIKLSAgMjIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNJbmNvbXBhdGliaWxp dGllcwotICAyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1s I05vdEluOS4wCi0gIDI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkw Lmh0bWwjTG9vc2VFbmQKLSAgMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0OTAuaHRtbCNwb3AKLSAgMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0OTAuaHRtbCNIUHN3aXRjaAotICAyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ5MC5odG1sI2lMTwotICAyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ5MC5odG1sI1JvbG0KLSAgMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0OTAuaHRtbCNDU1YKLSAgMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0OTAuaHRtbCNPdGhlcmRlbW9zCi0gIDMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCi0gIDMyLiBodHRwOi8vd3d3LmFtYXpvbi5jb20vZ3Av cHJvZHVjdC9CMDAyQUNQRjlNP2llPVVURjgmdGFnPWFsZWlkbW9yZWxkb20tMjAmbGlua0NvZGU9 YXMyJmNhbXA9MTc4OSZjcmVhdGl2ZT0zOTA5NTcmY3JlYXRpdmVBU0lOPUIwMDJBQ1BGOU0KLSAg MzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbAotICAzNC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sCi0gIDM1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tzY3JpcHRzLmh0bWwKLSAgMzYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2N1L2NvbXB1dGluZ2hpc3RvcnkvZGVjMjAuaHRtbAotICAzNy4gbWFp bHRvOmZkY0Bjb2x1bWJpYS5lZHUKLSAgMzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9rOTUuaHRtbAotICAzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1LWJzZC1s aWNlbnNlLmh0bWwKLSAgNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 OTAuaHRtbCNMYXJnZUZpbGVzCi0gIDQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2s5MHRhYmxlcy5odG1sCi0gIDQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s5 MHRhYmxlcy5odG1sCi0gIDQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDkwLmh0bWwjZm9yY2UzCi0gIDQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDkwLmh0bWwjVmFyZXZhbAotICA0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrcmVuYW1lLmh0bWwKLSAgNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jc3Yu aHRtbAotICA0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NzZXRuYW1lcy5odG1s Ci0gIDQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjSFBz d2l0Y2gKLSAgNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2RhaWx5Lmh0bWwK LSAgNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdS1ic2QtbGljZW5zZS5odG1s Ci0gIDUxLiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnLwotICA1Mi4gaHR0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUvY2s5MHRhYmxlcy5odG1sI0xGCi0gIDUzLiBmdHA6Ly9rZXJtaXQuY29sdW1i aWEuZWR1L2tlcm1pdC91dGlscy9iaWdmaWxlLmMKLSAgNTQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OQotICA1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrOTB0YWJsZXMuaHRtbCNMRgotICA1Ni4gZnRwOi8va2VybWl0LmNvbHVtYmlh LmVkdS9rZXJtaXQvc2NyaXB0cy9ja2VybWl0L2Vhc3RlcjIKLSAgNTcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9lbS1hcGV4Lmh0bWwKLSAgNTguIGh0dHA6Ly93d3cuaXJpZGl1bS5j b20vCi0gIDU5LiBodHRwOi8vc2NpZW5jZTEubmFzYS5nb3Yvc2NpZW5jZS1uZXdzL3NjaWVuY2Ut YXQtbmFzYS8yMDA2LzA5amFuX2VsZWN0cmljaHVycmljYW5lcy8KLSAgNjAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9lay5odG1sCi0gIDYxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2tlcm1pdC9lay9zaW1pcmlkLwotICA2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2VrLmh0bWwKLSAgNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4Ny4xMC4xMAotICA2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nz di5odG1sCi0gIDY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDEuMTEKLSAgNjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbAotICA2Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3g5Ci0gIDY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3NldG5hbWVzLmh0bWwK LSAgNjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2RhaWx5Lmh0bWwKLSAgNzAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHBjbGllbnQuaHRtbAotICA3MS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZGFpbHkuaHRtbAotICA3Mi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NzZXRuYW1lcy5odG1sCi0gIDczLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjT3RoZXJkZW1vcwotICA3NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lucHV0X25vd3JhcC5odG1sCi0gIDc1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9+ZmRjL21tL2luZGV4Lmh0bWwKLSAgNzYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9waG90b2FsYnVtLmh0bWwKLSAgNzcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L35mZGMva2VybWl0L2xvZ3NlcmlhbC5odG1sCi0gIDc4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjbWVzc2FnZQotICA3OS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI05vdEluOS4wCi0gIDgwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3N2Lmh0bWwjam9pbgotICA4MS4gaHR0cDovL2N2ZS5t aXRyZS5vcmcvY2dpLWJpbi9jdmVuYW1lLmNnaT9uYW1lPUNWRS0yMDA5LTM3NjcKLSAgODIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHAvdGVzdC90YXIveC56aXAKLSAgODMuIGh0 dHA6Ly93d3cubXNlY2xhYi5jb20vP3A9MTgwCi0gIDg0LiBodHRwOi8vd3d3LnRoZXJlZ2lzdGVy LmNvLnVrLzIwMDkvMDcvMzAvdW5pdmVyc2FsX3NzbF9jZXJ0aWZpY2F0ZS8KLSAgODUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNIUHN3aXRjaAotICA4Ni4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2VtLWFwZXguaHRtbAotICA4Ny4gaHR0cDov L3d3dy5mcmVlYnNkLm9yZy9yZWxlYXNlcy84LjBSL2Fubm91bmNlLmh0bWwKLSAgODguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eTgxLmh0bWwjeDQuMi4zCi0gIDg5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkKLSAgOTAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC43LjIKLSAgOTEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OQotICA5Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrcGFja2FnZXMuaHRtbAotICA5My4gaHR0 cDovL2RvY3MuaHAuY29tL2VuL0I5MTA2LTkwMDEzL3B0eS43Lmh0bWwKLSAgOTQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC90ZXN0L3RleHQvY2tjMjk5LnR4dAotICA5NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3Rlc3QvdGV4dC9ja3V0aW8uYwotICA5Ni4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUvfmZkYy9tbS9wb3AKLSAgOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L35mZGMvbW0vCi0gIDk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9+ZmRjL21tL21haWxj aGVjawotICA5OS4gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Ucml2aWFsX0ZpbGVfVHJh bnNmZXJfUHJvdG9jb2wKLSAxMDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHAv c2NyaXB0cy9ja2VybWl0L2dldGhwY29uZmlnCi0gMTAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvZnRwL3NjcmlwdHMvY2tlcm1pdC9UZXN0U3dpdGNoZXMudHh0Ci0gMTAyLiBodHRw Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N0YW5kYXJkX3N0cmVhbXMKLSAxMDMuIGh0dHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2N1ZG9jcy9pbG9zZXR1cC5odG1sCi0gMTA0LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3Vkb2NzL2NieC5odG1sCi0gMTA1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjcmVjb3JkCi0gMTA2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjam9pbgotIDEwNy4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI2ZpbGUKLSAxMDguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmam9pbgotIDEwOS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI3J1bGVzCi0gMTEwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZmpvaW4KLSAxMTEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCN2YXJhc2cKLSAxMTIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny45Ci0gMTEz LiBodHRwOi8vd3d3LmFtYXpvbi5jb20vZ3AvcHJvZHVjdC8xNTU1NTgxNjQxP2llPVVURjgmdGFn PWFsZWlkbW9yZWxkb20tMjAmbGlua0NvZGU9YXMyJmNhbXA9MTc4OSZjcmVhdGl2ZT05MzI1JmNy ZWF0aXZlQVNJTj0xNTU1NTgxNjQxCi0gMTE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tzY3JpcHRzLmh0bWwjb29wcwotIDExNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2Nrc2NyaXB0cy5odG1sCi0gMTE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv a3NpdGVtYXAuaHRtbAotIDExNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3dlYmxv Zy5odG1sCi0gMTE4LiBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9mdHAvc2NyaXB0cy9ja2Vy bWl0L2FtYXpvbgotIDExOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3Bob3RvYWxi dW0uaHRtbAotIDEyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwK LSAxMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAotIDEyMi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDEyMy4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nrc2NyaXB0cy5odG1sCi0gMTI0LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY3VycmVudC5odG1sCi0gMTI1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvd2hhdHNuZXcuaHRtbAotIDEyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2ZhcS5odG1sCi0gMTI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3Vw cG9ydC5odG1sCi0gMTI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRt bAotIDEyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvCi0gMTMwLiBtYWlsdG86a2VybWl0QGNv bHVtYmlhLmVkdQotIDEzMS4gaHR0cDovL3ZhbGlkYXRvci53My5vcmcvY2hlY2s/dXJpPWh0dHAl M0ElMkYlMkZrZXJtaXQuY29sdW1iaWEuZWR1JTJGY2tlcm1pdDkwLmh0bWwKCmRpZmYgLS1naXQg YS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtb2QuaW5pIGIvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2VybW9kLmluaQpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggNmIxM2M4NS4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtb2QuaW5pCisrKyAvZGV2L251bGwKQEAgLTEs OCArMCwwIEBACi07IEZpbGUgQ0tFUk1PRC5JTkksIFNhbXBsZSBDLUtlcm1pdCA3LjAgY3VzdG9t aXphdGlvbiBmaWxlLgotOwotZWNobwotZWNobyBUaGUgdmVyeSBsb25nIHN0YW5kYXJkIGluaXRp YWxpemF0aW9uIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQKLWVjaG8gd2l0aCBDLUtlcm1pdCA2 LCA3LCBhbmQgOCBpcyBubyBsb25nZXIgcmVjb21tZW5kZWQgYXMgInN0YW5kYXJkIiwKLWVjaG8g c2luY2UgaXRzIGZlYXR1cmVzIHdlcmUgbGl0dGxlIHVzZWQuICBJdCBpcyBzdGlsbCBhdmFpbGFi bGUgaW4KLWVjaG8gdGhlIEMtS2VybWl0IGRpc3RyaWJ1dGlvbiBhcyBvY2tlcm1vZC5pbmkuCi1l Y2hvCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9j a3VhdDIuaCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1YXQyLmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NzlhOTkuLjAwMDAwMDAKLS0tIGEvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VhdDIuaAorKysgL2Rldi9udWxs CkBAIC0xLDM1OCArMCwwIEBACi0vKgotICBDIEsgVSBBIFQgMiAuIEggIC0tICBLZXJiZXJvcyBo ZWFkZXJzIGZvciBDLUtlcm1pdAotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKLSAgICBU cnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgot ICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZp bGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3Ig ZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0KLSAgQXV0aG9yOgotICAgIEtlcmJlcm9zIElW IGFuZCBWIGludGVyZ3JhdGlvbi4KLSAgICBKZWZmcmV5IEUgQWx0bWFuIChqYWx0bWFuQHNlY3Vy ZS1lbmRwb2ludHMuY29tKQotICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0 eQotKi8KLS8qCi0gKiBCYXNlZCBvbiBhIGNvbmNhdGVuYXRpb24gb2YgYWxsIG5lY2Vzc2FyeSBp bmNsdWRlIGZpbGVzIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIHRoZSBLZXJiZXJvcyA1IE5UIEFscGhh IDIgVGVsbmV0IHBhY2thZ2UgZnJvbSBNSVQuCi0gKi8KLQotI2lmbmRlZiBLUkI1X1RFTE5FVF9I Ci0jZGVmaW5lIEtSQjVfVEVMTkVUX0gKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkz Ci0gKiAgICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBB bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAgIFRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YK LSAqICAgICAgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0 LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRz IGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmlj IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5Z IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK LSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICAgICAgQCgjKWVuY3J5cHQuaCAgIDguMSAoQmVya2Vs ZXkpIDYvNC85MwotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTAgYnkgdGhlIE1hc3Nh Y2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKLSAqCi0gKiBFeHBvcnQgb2YgdGhpcyBz b2Z0d2FyZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EgbWF5Ci0gKiByZXF1aXJl IGEgc3BlY2lmaWMgbGljZW5zZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQuCi0g KiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24g Y29udGVtcGxhdGluZwotICogZXhwb3J0IHRvIG9idGFpbiBzdWNoIGEgbGljZW5zZSBiZWZvcmUg ZXhwb3J0aW5nLgotICoKLSAqIFdJVEhJTiBUSEFUIENPTlNUUkFJTlQsIHBlcm1pc3Npb24gdG8g dXNlLCBjb3B5LCBtb2RpZnksIGFuZAotICogZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBp dHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kCi0gKiB3aXRob3V0IGZlZSBpcyBo ZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp Y2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3Rp Y2UgYW5kCi0gKiB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRv Y3VtZW50YXRpb24sIGFuZCB0aGF0Ci0gKiB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQg aW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcKLSAqIHRvIGRpc3RyaWJ1dGlv biBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgotICogcGVy bWlzc2lvbi4gIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRh YmlsaXR5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3Zp ZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzCi0gKiBvciBpbXBsaWVkIHdhcnJhbnR5LgotICov Ci0KLSNpZmRlZiAgQ0tfRU5DUllQVElPTgotCi0jaWZuZGVmIF9fRU5DUllQVElPTl9fCi0jZGVm aW5lIF9fRU5DUllQVElPTl9fCi0KLSNkZWZpbmUgRElSX0RFQ1JZUFQgICAgICAgICAgICAgMQot I2RlZmluZSBESVJfRU5DUllQVCAgICAgICAgICAgICAyCi0KLSNpZm5kZWYgQ0tfREVTX0MKLSNp Zm5kZWYgTk9CTE9DS0RFRgotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIEJsb2NrWzhdOwotI2VuZGlm IC8qIE5PQkxPQ0tERUYgKi8KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAqQmxvY2tUOwotI2lmbmRl ZiBLUkI0ICAgIC8qIGFscmVhZHkgZGVmaW5lZCBpbiBrZXJiZXJvc2l2L2Rlcy5oICovCi10eXBl ZGVmIHN0cnVjdCBkZXNfa3Nfc3RydWN0IHsgQmxvY2sgXzsgfSBTY2hlZHVsZVsxNl07Ci0jZWxz ZSAvKiBLUkI0ICovCi0jaWZuZGVmIE9TMgotI2lmbmRlZiBOT0JMT0NLREVGICAgIC8qIGFscmVh ZHkgZGVmaW5lZCBpbiBrZXJiZXJvc2l2L2Rlcy5oICovCi10eXBlZGVmIHN0cnVjdCBkZXNfa3Nf c3RydWN0IHsgQmxvY2sgXzsgfSBTY2hlZHVsZVsxNl07Ci0jZW5kaWYgLyogTk9CTE9DS0RFRiAq LwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIEtSQjQgKi8KLQotI2RlZmluZSBWQUxJREtF WShrZXkpIChrZXlbMF18a2V5WzFdfGtleVsyXXxrZXlbM118a2V5WzRdfGtleVs1XXxrZXlbNl18 a2V5WzddKQotCi0jZGVmaW5lIFNBTUVLRVkoazEsIGsyKSAoIW1lbWNtcCgodm9pZCAqKWsxLCAo dm9pZCAqKWsyLCBzaXplb2YoQmxvY2spKSkKLSNlbmRpZiAvKiBDS19ERVNfQyAqLwotCi10eXBl ZGVmIHN0cnVjdCBfc2Vzc2lvbl9rZXkgewotICBzaG9ydCAgICAgICAgIHR5cGU7Ci0gIGludCAg ICAgICAgICAgbGVuZ3RoOwotICB1bnNpZ25lZCBjaGFyICpkYXRhOwotfSBTZXNzaW9uX0tleTsK LQotI2lmZGVmIF9fU1REQ19fCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGNoYXIgICpuYW1lOwotICBp bnQgICB0eXBlOwotICB2b2lkICAoKm91dHB1dCkodW5zaWduZWQgY2hhciAqLCBpbnQpOwotICBp bnQgICAoKmlucHV0KShpbnQpOwotICB2b2lkICAoKmluaXQpKGludCk7Ci0gIGludCAgICgqc3Rh cnQpKGludCwgaW50KTsKLSAgaW50ICAgKCppcykodW5zaWduZWQgY2hhciAqLCBpbnQpOwotICBp bnQgICAoKnJlcGx5KSh1bnNpZ25lZCBjaGFyICosIGludCk7Ci0gIGludCAgICgqc2Vzc2lvbiko U2Vzc2lvbl9LZXkgKiwgaW50KTsKLSAgaW50ICAgKCprZXlpZCkoaW50LCB1bnNpZ25lZCBjaGFy ICosIGludCAqKTsKLSAgdm9pZCAgKCpwcmludHN1YikodW5zaWduZWQgY2hhciAqLCBpbnQsIHVu c2lnbmVkIGNoYXIgKiwgaW50KTsKLX0gRW5jcnlwdGlvbnM7Ci0jaWYgIWRlZmluZWQoUCkKLSNk ZWZpbmUgUCh4KSB4Ci0jZW5kaWYKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGNoYXIgICpu YW1lOwotICBpbnQgICB0eXBlOwotICB2b2lkICAoKm91dHB1dCkoKTsKLSAgaW50ICAgKCppbnB1 dCkoKTsKLSAgdm9pZCAgKCppbml0KSgpOwotICBpbnQgICAoKnN0YXJ0KSgpOwotICBpbnQgICAo KmlzKSgpOwotICBpbnQgICAoKnJlcGx5KSgpOwotICBpbnQgICAoKnNlc3Npb24pKCk7Ci0gIGlu dCAgICgqa2V5aWQpKCk7Ci0gIHZvaWQgICgqcHJpbnRzdWIpKCk7Ci19IEVuY3J5cHRpb25zOwot I2lmICFkZWZpbmVkKFApCi0jZGVmaW5lIFAoeCkgKCkKLSNlbmRpZgotI2VuZGlmCi0KLWludCBl bmNyeXB0X3BhcnNlKHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKLQotI2lmZGVmIERFQlVHCi1pbnQg cHJpbnRzdWIoY2hhciwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpOwotI2VuZGlmCi0KLSNkZWZp bmUgU0tfR0VORVJJQyAgICAgIDAgICAgICAgLyogSnVzdCBhIHN0cmluZyBvZiBiaXRzICovCi0j ZGVmaW5lIFNLX0RFUyAgICAgICAgICAxICAgICAgIC8qIE1hdGNoZWQgS2VyYmVyb3MgdjUgRU5D VFlQRV9ERVMgKi8KLQotdm9pZCBlbmNyeXB0X2luaXQgUCgoa3N0cmVhbSxpbnQpKTsKLUVuY3J5 cHRpb25zICpmaW5kZW5jcnlwdGlvbiBQKChpbnQpKTsKLXZvaWQgZW5jcnlwdF9zZW5kX3N1cHBv cnQgUCgodm9pZCkpOwotdm9pZCBlbmNyeXB0X2F1dG8gUCgoaW50KSk7Ci12b2lkIGRlY3J5cHRf YXV0byBQKChpbnQpKTsKLWludCAgZW5jcnlwdF9pcyBQKCh1bnNpZ25lZCBjaGFyICosIGludCkp OwotaW50ICBlbmNyeXB0X3JlcGx5IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci12b2lkIGVu Y3J5cHRfc3RhcnRfaW5wdXQgUCgoaW50KSk7Ci1pbnQgIGVuY3J5cHRfc2Vzc2lvbl9rZXkgUCgo U2Vzc2lvbl9LZXkgKiwgaW50KSk7Ci1pbnQgIGVuY3J5cHRfZG9udF9zdXBwb3J0IFAoKGludCkp Owotdm9pZCBlbmNyeXB0X2VuZF9pbnB1dCBQKCh2b2lkKSk7Ci12b2lkIGVuY3J5cHRfc3RhcnRf b3V0cHV0IFAoKGludCkpOwotdm9pZCBlbmNyeXB0X2VuZF9vdXRwdXQgUCgodm9pZCkpOwotdm9p ZCBlbmNyeXB0X3NlbmRfcmVxdWVzdF9zdGFydCBQKCh2b2lkKSk7Ci12b2lkIGVuY3J5cHRfc2Vu ZF9yZXF1ZXN0X2VuZCBQKCh2b2lkKSk7Ci12b2lkIGVuY3J5cHRfc2VuZF9lbmQgUCgodm9pZCkp Owotdm9pZCBlbmNyeXB0X3dhaXQgUCgodm9pZCkpOwotaW50ICBlbmNyeXB0X2lzX2VuY3J5cHRp bmcgUCgodm9pZCkpOwotdm9pZCBlbmNyeXB0X3NlbmRfc3VwcG9ydCBQKCh2b2lkKSk7Ci1pbnQg IGVuY3J5cHRfc2VuZF9rZXlpZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQpKTsK LQotaW50IGVuY3J5cHRfY21kIFAoKGludCwgY2hhciAqKikpOwotdm9pZCBlbmNyeXB0X2Rpc3Bs YXkgUCgodm9pZCkpOwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLXZvaWQga3JiZGVzX2VuY3J5cHQg UCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLWludCAga3JiZGVzX2RlY3J5cHQgUCgoaW50KSk7 Ci1pbnQgIGtyYmRlc19pcyBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOwotaW50ICBrcmJkZXNf cmVwbHkgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLXZvaWQga3JiZGVzX2luaXQgUCgoaW50 KSk7Ci1pbnQgIGtyYmRlc19zdGFydCBQKChpbnQsIGludCkpOwotdm9pZCBrcmJkZXNfc2Vzc2lv biBQKChTZXNzaW9uX0tleSAqLCBpbnQpKTsKLXZvaWQga3JiZGVzX3ByaW50c3ViIFAoKHVuc2ln bmVkIGNoYXIgKiwgaW50LCB1bnNpZ25lZCBjaGFyICosIGludCkpOwotI2VuZGlmIC8qIENLX0tF UkJFUk9TICovCi0KLXZvaWQgY2ZiNjRfZW5jcnlwdCBQKCh1bnNpZ25lZCBjaGFyICosIGludCkp OwotaW50IGNmYjY0X2RlY3J5cHQgUCgoaW50KSk7Ci12b2lkIGNmYjY0X2luaXQgUCgoaW50KSk7 Ci1pbnQgY2ZiNjRfc3RhcnQgUCgoaW50LCBpbnQpKTsKLWludCBjZmI2NF9pcyBQKCh1bnNpZ25l ZCBjaGFyICosIGludCkpOwotaW50IGNmYjY0X3JlcGx5IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50 KSk7Ci1pbnQgY2ZiNjRfc2Vzc2lvbiBQKChTZXNzaW9uX0tleSAqLCBpbnQpKTsKLWludCBjZmI2 NF9rZXlpZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICopKTsKLXZvaWQgY2ZiNjRfcHJp bnRzdWIgUCgodW5zaWduZWQgY2hhciAqLCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci0K LXZvaWQgb2ZiNjRfZW5jcnlwdCBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOwotaW50IG9mYjY0 X2RlY3J5cHQgUCgoaW50KSk7Ci12b2lkIG9mYjY0X2luaXQgUCgoaW50KSk7Ci1pbnQgb2ZiNjRf c3RhcnQgUCgoaW50LCBpbnQpKTsKLWludCBvZmI2NF9pcyBQKCh1bnNpZ25lZCBjaGFyICosIGlu dCkpOwotaW50IG9mYjY0X3JlcGx5IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1pbnQgb2Zi NjRfc2Vzc2lvbiBQKChTZXNzaW9uX0tleSAqLCBpbnQpKTsKLWludCBvZmI2NF9rZXlpZCBQKChp bnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICopKTsKLXZvaWQgb2ZiNjRfcHJpbnRzdWIgUCgodW5z aWduZWQgY2hhciAqLCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci0KLXZvaWQgZGVzM19j ZmI2NF9lbmNyeXB0IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1pbnQgIGRlczNfY2ZiNjRf ZGVjcnlwdCBQKChpbnQpKTsKLXZvaWQgZGVzM19jZmI2NF9pbml0IFAoKGludCkpOwotaW50ICBk ZXMzX2NmYjY0X3N0YXJ0IFAoKGludCwgaW50KSk7Ci1pbnQgIGRlczNfY2ZiNjRfaXMgUCgodW5z aWduZWQgY2hhciAqLCBpbnQpKTsKLWludCAgZGVzM19jZmI2NF9yZXBseSBQKCh1bnNpZ25lZCBj aGFyICosIGludCkpOwotaW50ICBkZXMzX2NmYjY0X3Nlc3Npb24gUCgoU2Vzc2lvbl9LZXkgKiwg aW50KSk7Ci1pbnQgIGRlczNfY2ZiNjRfa2V5aWQgUCgoaW50LCB1bnNpZ25lZCBjaGFyICosIGlu dCAqKSk7Ci12b2lkIGRlczNfY2ZiNjRfcHJpbnRzdWIgUCgodW5zaWduZWQgY2hhciAqLCBpbnQs IHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci0KLXZvaWQgZGVzM19vZmI2NF9lbmNyeXB0IFAoKHVu c2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1pbnQgIGRlczNfb2ZiNjRfZGVjcnlwdCBQKChpbnQpKTsK LXZvaWQgZGVzM19vZmI2NF9pbml0IFAoKGludCkpOwotaW50ICBkZXMzX29mYjY0X3N0YXJ0IFAo KGludCwgaW50KSk7Ci1pbnQgIGRlczNfb2ZiNjRfaXMgUCgodW5zaWduZWQgY2hhciAqLCBpbnQp KTsKLWludCAgZGVzM19vZmI2NF9yZXBseSBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOwotaW50 ICBkZXMzX29mYjY0X3Nlc3Npb24gUCgoU2Vzc2lvbl9LZXkgKiwgaW50KSk7Ci1pbnQgIGRlczNf b2ZiNjRfa2V5aWQgUCgoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCAqKSk7Ci12b2lkIGRlczNf b2ZiNjRfcHJpbnRzdWIgUCgodW5zaWduZWQgY2hhciAqLCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwg aW50KSk7Ci0KLSNpZmRlZiBDQVNUX0VOQ1JZUFRJT04KLXZvaWQgY2FzdF9jZmI2NF9lbmNyeXB0 IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1pbnQgIGNhc3RfY2ZiNjRfZGVjcnlwdCBQKChp bnQpKTsKLXZvaWQgY2FzdF9jZmI2NF9pbml0IFAoKGludCkpOwotaW50ICBjYXN0X2NmYjY0X3N0 YXJ0IFAoKGludCwgaW50KSk7Ci1pbnQgIGNhc3RfY2ZiNjRfaXMgUCgodW5zaWduZWQgY2hhciAq LCBpbnQpKTsKLWludCAgY2FzdF9jZmI2NF9yZXBseSBQKCh1bnNpZ25lZCBjaGFyICosIGludCkp OwotaW50ICBjYXN0X2NmYjY0X3Nlc3Npb24gUCgoU2Vzc2lvbl9LZXkgKiwgaW50KSk7Ci1pbnQg IGNhc3RfY2ZiNjRfa2V5aWQgUCgoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCAqKSk7Ci12b2lk IGNhc3RfY2ZiNjRfcHJpbnRzdWIgUCgodW5zaWduZWQgY2hhciAqLCBpbnQsIHVuc2lnbmVkIGNo YXIgKiwgaW50KSk7Ci0KLXZvaWQgY2FzdF9vZmI2NF9lbmNyeXB0IFAoKHVuc2lnbmVkIGNoYXIg KiwgaW50KSk7Ci1pbnQgIGNhc3Rfb2ZiNjRfZGVjcnlwdCBQKChpbnQpKTsKLXZvaWQgY2FzdF9v ZmI2NF9pbml0IFAoKGludCkpOwotaW50ICBjYXN0X29mYjY0X3N0YXJ0IFAoKGludCwgaW50KSk7 Ci1pbnQgIGNhc3Rfb2ZiNjRfaXMgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLWludCAgY2Fz dF9vZmI2NF9yZXBseSBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOwotaW50ICBjYXN0X29mYjY0 X3Nlc3Npb24gUCgoU2Vzc2lvbl9LZXkgKiwgaW50KSk7Ci1pbnQgIGNhc3Rfb2ZiNjRfa2V5aWQg UCgoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCAqKSk7Ci12b2lkIGNhc3Rfb2ZiNjRfcHJpbnRz dWIgUCgodW5zaWduZWQgY2hhciAqLCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci0KLXZv aWQgY2FzdGV4cF9jZmI2NF9lbmNyeXB0IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1pbnQg IGNhc3RleHBfY2ZiNjRfZGVjcnlwdCBQKChpbnQpKTsKLXZvaWQgY2FzdGV4cF9jZmI2NF9pbml0 IFAoKGludCkpOwotaW50ICBjYXN0ZXhwX2NmYjY0X3N0YXJ0IFAoKGludCwgaW50KSk7Ci1pbnQg IGNhc3RleHBfY2ZiNjRfaXMgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLWludCAgY2FzdGV4 cF9jZmI2NF9yZXBseSBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOwotaW50ICBjYXN0ZXhwX2Nm YjY0X3Nlc3Npb24gUCgoU2Vzc2lvbl9LZXkgKiwgaW50KSk7Ci1pbnQgIGNhc3RleHBfY2ZiNjRf a2V5aWQgUCgoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCAqKSk7Ci12b2lkIGNhc3RleHBfY2Zi NjRfcHJpbnRzdWIgUCgodW5zaWduZWQgY2hhciAqLCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50 KSk7Ci0KLXZvaWQgY2FzdGV4cF9vZmI2NF9lbmNyeXB0IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50 KSk7Ci1pbnQgIGNhc3RleHBfb2ZiNjRfZGVjcnlwdCBQKChpbnQpKTsKLXZvaWQgY2FzdGV4cF9v ZmI2NF9pbml0IFAoKGludCkpOwotaW50ICBjYXN0ZXhwX29mYjY0X3N0YXJ0IFAoKGludCwgaW50 KSk7Ci1pbnQgIGNhc3RleHBfb2ZiNjRfaXMgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLWlu dCAgY2FzdGV4cF9vZmI2NF9yZXBseSBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOwotaW50ICBj YXN0ZXhwX29mYjY0X3Nlc3Npb24gUCgoU2Vzc2lvbl9LZXkgKiwgaW50KSk7Ci1pbnQgIGNhc3Rl eHBfb2ZiNjRfa2V5aWQgUCgoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCAqKSk7Ci12b2lkIGNh c3RleHBfb2ZiNjRfcHJpbnRzdWIgUCgodW5zaWduZWQgY2hhciAqLCBpbnQsIHVuc2lnbmVkIGNo YXIgKiwgaW50KSk7Ci0jZW5kaWYgLyogQ0FTVF9FTkNSWVBUSU9OICovCi0KLS8qIGludCAgZGVz X3N0cmluZ190b19rZXkgUCgoY2hhciAqLCBCbG9jaykpOyAqLwotCi0jaWZkZWYgREVCVUcKLWV4 dGVybiBpbnQgZW5jcnlwdF9kZWJ1Z19tb2RlOwotI2VuZGlmCi0KLWludCBkZWNyeXB0X2tzX2hh Y2sodW5zaWduZWQgY2hhciAqLCBpbnQpOwotCi0jZW5kaWYgLyogX19FTkNSWVBUSU9OX18gKi8K LSNlbmRpZiAvKiBFTkNSWVBUSU9OICovCi0KLSNpZmRlZiBDUllQVF9ETEwKLXN0cnVjdCBfY3J5 cHRfZGxsX2luaXQgewotICAgIGludCB2ZXJzaW9uOwotCi0gICAgLyogVmVyc2lvbiAxIHZhcmlh YmxlcyAqLwotICAgIGludCAoKnBfdHRvbCkoY2hhciAqLGludCk7Ci0gICAgaW50ICgqcF9kb2Rl YnVnKShpbnQsY2hhciAqLGNoYXIgKixDS19PRkZfVCk7Ci0gICAgaW50ICgqcF9kb2hleGR1bXAp KGNoYXIgKixjaGFyICosaW50KTsKLSAgICB2b2lkICgqcF90bl9kZWJ1ZykoY2hhciAqKTsKLSAg ICBpbnQgKCpwX3ZzY3JucHJpbnRmKShjaGFyICosIC4uLik7Ci0KLSAgICAvKiBWZXJzaW9uIDIg dmFyaWFibGVzICovCi0gICAgdm9pZCAqIHBfazVfY29udGV4dDsKLQotICAgIC8qIFZlcnNpb24g MyB2YXJpYWJsZXMgKi8KLSAgICB2b2lkICgqcF9pbnN0YWxsX2Z1bmNzKShjaGFyICosdm9pZCAq KTsKLQotICAgIC8qIFZlcnNpb24gNSB2YXJpYWJsZXMgKi8KLSAgICB1bnNpZ25lZCBsb25nICgq cF9yZXF0ZWxtdXRleCkodW5zaWduZWQgbG9uZyk7Ci0gICAgdW5zaWduZWQgbG9uZyAoKnBfcmVs dGVsbXV0ZXgpKHZvaWQpOwotfTsKLSNlbmRpZiAvKiBDUllQVF9ETEwgKi8KLQotLyogcGVyIEtl cmJlcm9zIHY1IHByb3RvY29sIHNwZWMgKi8KLSNpZm5kZWYgRU5DVFlQRV9OVUxMCi0jZGVmaW5l IEVOQ1RZUEVfTlVMTCAgICAgICAgICAgIDB4MDAwMAotI2VuZGlmCi0jaWZuZGVmICBFTkNUWVBF X0RFU19DQkNfQ1JDCi0jZGVmaW5lIEVOQ1RZUEVfREVTX0NCQ19DUkMgICAgIDB4MDAwMSAgLyog REVTIGNiYyBtb2RlIHdpdGggQ1JDLTMyICovCi0jZW5kaWYKLSNpZm5kZWYgIEVOQ1RZUEVfREVT X0NCQ19NRDQKLSNkZWZpbmUgRU5DVFlQRV9ERVNfQ0JDX01ENCAgICAgMHgwMDAyICAvKiBERVMg Y2JjIG1vZGUgd2l0aCBSU0EtTUQ0ICovCi0jZW5kaWYKLSNpZm5kZWYgIEVOQ1RZUEVfREVTX0NC Q19NRDUKLSNkZWZpbmUgRU5DVFlQRV9ERVNfQ0JDX01ENSAgICAgMHgwMDAzICAvKiBERVMgY2Jj IG1vZGUgd2l0aCBSU0EtTUQ1ICovCi0jZW5kaWYKLSNpZm5kZWYgIEVOQ1RZUEVfREVTX0NCQ19S QVcKLSNkZWZpbmUgRU5DVFlQRV9ERVNfQ0JDX1JBVyAgICAgMHgwMDA0ICAvKiBERVMgY2JjIG1v ZGUgcmF3ICovCi0jZW5kaWYKLS8qIFhYWCBkZXByZWNhdGVkPyAqLwotI2lmbmRlZiAgRU5DVFlQ RV9ERVMzX0NCQ19TSEEKLSNkZWZpbmUgRU5DVFlQRV9ERVMzX0NCQ19TSEEgICAgMHgwMDA1ICAv KiBERVMtMyBjYmMgbW9kZSB3aXRoIE5JU1QtU0hBICovCi0jZW5kaWYKLSNpZm5kZWYgIEVOQ1RZ UEVfREVTM19DQkNfUkFXCi0jZGVmaW5lIEVOQ1RZUEVfREVTM19DQkNfUkFXICAgIDB4MDAwNiAg LyogREVTLTMgY2JjIG1vZGUgcmF3ICovCi0jZW5kaWYKLSNpZm5kZWYgIEVOQ1RZUEVfREVTX0hN QUNfU0hBMQotI2RlZmluZSBFTkNUWVBFX0RFU19ITUFDX1NIQTEgICAweDAwMDgKLSNlbmRpZgot I2lmbmRlZiAgRU5DVFlQRV9ERVMzX0NCQ19TSEExCi0jZGVmaW5lIEVOQ1RZUEVfREVTM19DQkNf U0hBMSAgMHgwMDEwCi0jZW5kaWYKLSNpZm5kZWYgRU5DVFlQRV9BRVMxMjhfQ1RTX0hNQUNfU0hB MV85NgotI2RlZmluZSBFTkNUWVBFX0FFUzEyOF9DVFNfSE1BQ19TSEExXzk2ICAweDAwMTEKLSNl bmRpZgotI2lmbmRlZiBFTkNUWVBFX0FFUzI1Nl9DVFNfSE1BQ19TSEExXzk2Ci0jZGVmaW5lIEVO Q1RZUEVfQUVTMjU2X0NUU19ITUFDX1NIQTFfOTYgIDB4MDAxMgotI2VuZGlmCi0jaWZuZGVmIEVO Q1RZUEVfQVJDRk9VUl9ITUFDCi0jZGVmaW5lIEVOQ1RZUEVfQVJDRk9VUl9ITUFDICAgICAweDAw MTcKLSNlbmRpZgotI2lmbmRlZiBFTkNUWVBFX0FSQ0ZPVVJfSE1BQ19FWFAKLSNkZWZpbmUgRU5D VFlQRV9BUkNGT1VSX0hNQUNfRVhQIDB4MDAxOAotI2VuZGlmCi0jaWZuZGVmIEVOQ1RZUEVfTE9D QUxfUkM0X01ENAotI2RlZmluZSBFTkNUWVBFX0xPQ0FMX1JDNF9NRDQgICAgMHhGRkZGRkY4MAot I2VuZGlmCi0jaWZuZGVmICBFTkNUWVBFX1VOS05PV04KLSNkZWZpbmUgRU5DVFlQRV9VTktOT1dO ICAgICAgICAgMHgwMWZmCi0jZW5kaWYKLS8qIGxvY2FsIGNydWQgKi8KLS8qIG1hcmMncyBERVMt MyB3aXRoIDMyLWJpdCBsZW5ndGggKi8KLSNpZm5kZWYgIEVOQ1RZUEVfTE9DQUxfREVTM19ITUFD X1NIQTEKLSNkZWZpbmUgRU5DVFlQRV9MT0NBTF9ERVMzX0hNQUNfU0hBMSAweDcwMDcKLSNlbmRp ZgotI2VuZGlmIC8qIEtSQjVfVEVMTkVUX0ggKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWF0aC5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxk L2NrZXJtaXQtOS4wLjMwMi9ja3VhdGguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg ZWE5YmM3ZC4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrdWF0aC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMzNjIgKzAsMCBAQAotY2hhciAqY2th dGh2ID0gIkF1dGhlbnRpY2F0aW9uLCA5LjAuMjM1LCAxNiBNYXIgMjAxMCI7Ci0vKgotICBDIEsg VSBBIFQgSCAuIEMgIC0tICBBdXRoZW50aWNhdGlvbiBmb3IgQy1LZXJtaXQKLQotICBDb3B5cmln aHQgKEMpIDE5OTksIDIwMTAsCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBp biB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRo ZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGlu IHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotCi0g ICAgQXV0aG9yOiAgSmVmZnJleSBFIEFsdG1hbiAoamFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNv bSkKLSAgICAgICAgICAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQot Ki8KLS8qCi0gKiBBZGRpdGlvbmFsIGNvcHlyaWdodHMgaW5jbHVkZWQgd2l0aCBhZmZlY3RlZCBj b2RlLgotICovCi0KLSNpZmRlZiBIRUlNREFMCi0vKgotICBUdXJuZWQgb2ZmIFVzZXIgdG8gVXNl ciBzdXBwb3J0Ci0gIFR1cm5lZCBvZmYgS0RFU1RST1kgc3VwcG9ydAotICBUdXJuZWQgb2ZmIEtM SVNUIHN1cHBvcnQKLSAgVHVybmVkIG9mZiBrcmI1X3Byb21wdGVyKCkgc3VwcG9ydAotICBUdXJu ZWQgb2ZmIHRpY2tldCB2YWxpZGF0aW9uCi0gIFR1cm5lZCBvZmYgdGlja2V0IHJlbmV3YWwKLSAg VHVybmVkIG9mZiBhbHRlcm5hdGl2ZSBjYWNoZSBzdXBwb3J0IGluIGs1X2dldF9jY2FjaGUoKQot Ci0gIFJlbWFpbmluZyBsaW5rIHByb2JsZW1zOgotCi0gIGNrdWF0aC5vOiBJbiBmdW5jdGlvbiBg Y2tfa3JiNV9pbml0VEdUJzoKLSAgY2t1YXRoLm8oLnRleHQrMHg1MGMyKTogdW5kZWZpbmVkIHJl ZmVyZW5jZSB0byBga3JiNV9zdHJpbmdfdG9fZGVsdGF0JwotICBja3VhdGgubygudGV4dCsweDUx NmQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBrcmI1X3N0cmluZ190b19kZWx0YXQnCi0gIGNr dWF0aC5vKC50ZXh0KzB4NTFlZik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGtyYjVfc3RyaW5n X3RvX2RlbHRhdCcKLSovCi0jZW5kaWYgLyogSEVJTURBTCAqLwotCi0vKgotICogSW1wbGVtZW50 cyBLZXJiZXJvcyA0LzUsIFNSUCwgU1NMLCBOVExNIGF1dGhlbnRpY2F0aW9uIGFuZCBTVEFSVF9U TFMKLSAqLwotCi0jaW5jbHVkZSAiY2tjc3ltLmgiCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0KLSNp ZmRlZiBDS19TRUNVUklUWQotCi0jZGVmaW5lIENLVUFUSF9DCi0jaW5jbHVkZSAiY2tja2VyLmgi Ci0jaW5jbHVkZSAiY2t1dXNyLmgiCi0jaW5jbHVkZSAiY2t1Y21kLmgiICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGb3Igc3RydWN0IGtleXRhYiAqLwotI2luY2x1ZGUgImNrY25ldC5o IgotI2luY2x1ZGUgImNrY3RlbC5oIgotCi1jaGFyIHN6VXNlck5hbWVSZXF1ZXN0ZWRbVUlEQlVG TEVOKzFdOyAgICAvKiBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMgKi8KLWNoYXIgc3pVc2VyTmFt ZUF1dGhlbnRpY2F0ZWRbVUlEQlVGTEVOKzFdOy8qIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucyAq LwotY2hhciBzekhvc3ROYW1lW1VJREJVRkxFTisxXTsKLWNoYXIgc3pVc2VyTmFtZVtVSURCVUZM RU4rMV07Ci1zdGF0aWMgY2hhciBzeklQWzE2XTsKLXN0YXRpYyBpbnQgIHZhbGlkVXNlciA9IEFV VEhfUkVKRUNUOyAgICAvKiBVc2VyIHN0YXJ0cyBvdXQgaW52YWxpZCAqLwotaW50IGF1dGhlbnRp Y2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9OVUxMOwotaW50IGFjY2VwdF9jb21wbGV0ZSA9IDA7 Ci0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotI2lmZGVmIENLX1NTTAotI2lmZGVmIEtSQjUK LSNkZWZpbmUgVExTX1ZFUklGWQotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19TU0wg Ki8KLQotI2lmZGVmIENLX0RFUwotI2lmZGVmIENLX1NTTAotI2lmbmRlZiBMSUJERVMKLSNkZWZp bmUgTElCREVTCi0jZW5kaWYgLyogTElCREVTICovCi0jZW5kaWYgLyogQ0tfU1NMICovCi0jZW5k aWYgLyogQ0tfREVTICovCi0KLSNpZmRlZiBDUllQVF9ETEwKLSNpZm5kZWYgTElCREVTCi0jZGVm aW5lIExJQkRFUwotI2VuZGlmIC8qIExJQkRFUyAqLwotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0j aW5jbHVkZSA8d2luZG93cy5oPgotI2Vsc2UgLyogTlQgKi8KLSNkZWZpbmUgSU5DTF9ET1NNT0RV TEVNR1IKLSNpbmNsdWRlIDxvczIuaD4KLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIENSWVBUX0RMTCAqLwotCi0jaWZkZWYgTlQKLSNkZWZpbmUgS1JCNV9BVVRP Q09ORl9fCi0jZGVmaW5lIE5UTE0KLSNlbmRpZiAvKiBOVCAqLwotCi0jaWZkZWYgQ0tfS0VSQkVS T1MKLSNkZWZpbmUgS0lOSVQKLSNpZm5kZWYgSEVJTURBTAotI2RlZmluZSBLTElTVAotI2RlZmlu ZSBLREVTVFJPWQotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSNkZWZpbmUgQ0hFQ0tBRERSUwotI2Vs c2UgLyogQ0tfS0VSQkVST1MgKi8KLSNpZmRlZiBLUkI0Ci0jdW5kZWYgS1JCNAotI2VuZGlmIC8q IEtSQjQgKi8KLSNpZmRlZiBLUkI1Ci0jdW5kZWYgS1JCNQotI2VuZGlmIC8qIEtSQjUgKi8KLSNp ZmRlZiBLUkI1MjQKLSN1bmRlZiBLUkI1MjQKLSNlbmRpZiAvKiBLUkI1MjQgKi8KLSNlbmRpZiAv KiBDS19LRVJCRVJPUyAqLwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5n Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8ZmNu dGwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2lmbmRlZiBtYWxsb2MKLSNpZm5kZWYgVk1TCi0j aWZuZGVmIEZSRUVCU0Q0Ci0jaWZuZGVmIE9wZW5CU0QKLSNpZmRlZiBNQUNPU1gKLSNpbmNsdWRl IDxzeXMvbWFsbG9jLmg+Ci0jZWxzZSAvKiBNQUNPU1ggKi8KLSNpbmNsdWRlIDxtYWxsb2MuaD4K LSNlbmRpZiAvKiBNQUNPU1ggKi8KLSNlbmRpZiAvKiBPcGVuQlNEICovCi0jZW5kaWYgLyogRlJF RUJTRDQgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBtYWxsb2MgKi8KLSNpZmRlZiBP UzIKLSNpbmNsdWRlIDxpby5oPgotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgS1JCNQotI2lm ZGVmIEhFSU1EQUwKLSNpZmRlZiBwcmludGYKLSNkZWZpbmUgc2F2ZXByaW50ZiBwcmludGYKLSN1 bmRlZiBwcmludGYKLSNlbmRpZiAvKiBwcmludGYgKi8KLSNpbmNsdWRlICJrcmI1LmgiCi0KLSNp bmNsdWRlICJjb21fZXJyLmgiCi0KLSNpZmRlZiBzYXZlcHJpbnRmCi0jZGVmaW5lIHByaW50ZiBz YXZlcHJpbnRmCi0jZW5kaWYgLyogc2F2ZXByaW50ZiAqLwotI2Vsc2UgLyogSEVJTURBTCAqLwot I2luY2x1ZGUgImtyYjUuaCIKLSNpbmNsdWRlICJwcm9maWxlLmgiCi0jaW5jbHVkZSAiY29tX2Vy ci5oIgotI2lmZGVmIEtSQjVfR0VUX0lOSVRfQ1JFRFNfT1BUX1RLVF9MSUZFCi0jZGVmaW5lIEtS QjVfSEFWRV9HRVRfSU5JVF9DUkVEUwotI2Vsc2UKLSNkZWZpbmUga3JiNV9mcmVlX3VucGFyc2Vk X25hbWUoY29uLHZhbCkga3JiNV94ZnJlZSgoY2hhciAqKSh2YWwpKQotI2VuZGlmCi0jaWZuZGVm IEtSQjVfSEFWRV9HRVRfSU5JVF9DUkVEUwotI2RlZmluZSBrcmI1X2ZyZWVfZGF0YV9jb250ZW50 cyhjLHYpIGtyYjVfeGZyZWUoKGNoYXIgKikodiktPmRhdGEpCi0jZW5kaWYKLSNlbmRpZiAvKiBI RUlNREFMICovCi0jaWZkZWYgSEFWRV9QV0RfSAotI2luY2x1ZGUgPHB3ZC5oPgotI2VuZGlmCi0j ZW5kaWYgLyogS1JCNSAqLwotCi0jaWZkZWYgS1JCNAotI2RlZmluZSAgZGVzX2NibG9jayBCbG9j awotI2RlZmluZSAgY29uc3RfZGVzX2NibG9jayBjb25zdCBCbG9jawotI2RlZmluZSAgZGVzX2tl eV9zY2hlZHVsZSBTY2hlZHVsZQotI2lmZGVmIEtSQjUyNAotI2lmZGVmIE5UCi0jZGVmaW5lIF9X SU5ET1dTCi0jZW5kaWYgLyogTlQgKi8KLSNpbmNsdWRlICJrZXJiZXJvc0lWL2tyYi5oIgotI2lm bmRlZiBPUzIKLSNpZmRlZiBLUkI1MjRfQ09OVgotI2luY2x1ZGUgImtyYjUyNC5oIgotI2VuZGlm IC8qIEtSQjUyNF9DT05WICovCi1fUFJPVE9UWVAoY29uc3QgY2hhciAqIGtyYl9nZXRfZXJyX3Rl eHRfZW50cnksIChpbnQpKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbHNlIC8qIEtSQjUyNCAqLwot I2lmZGVmIFNPTEFSSVMKLSNpZm5kZWYgc3VuCi0vKiBmb3Igc29tZSByZWFzb24gdGhlIE1ha2Vm aWxlIGVudHJpZXMgZm9yIHRoZSBTb2xhcmlzIHN5c3RlbXMgaGF2ZSAtVXN1biAqLwotI2RlZmlu ZSBzdW4KLSNlbmRpZiAvKiBzdW4gKi8KLSNlbmRpZiAvKiBTT0xBUklTICovCi0jaW5jbHVkZSAi a3JiLmgiCi0jZGVmaW5lIGtyYl9nZXRfZXJyX3RleHRfZW50cnkga3JiX2dldF9lcnJfdGV4dAot I2VuZGlmIC8qIEtSQjUyNCAqLwotI2Vsc2UgLyogS1JCNCAqLwotI2lmZGVmIENLX1NTTAotI2Rl ZmluZSAgZGVzX2NibG9jayBCbG9jawotI2lmZGVmIENPTU1FTlQKLSNkZWZpbmUgIGNvbnN0X2Rl c19jYmxvY2sgY29uc3QgQmxvY2sKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZGVmaW5lICBkZXNf a2V5X3NjaGVkdWxlIFNjaGVkdWxlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0jZW5kaWYgLyogS1JC NCAqLwotCi0jaW5jbHVkZSAiY2t1YXRoLmgiCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZm5kZWYg S1JCNQotI2RlZmluZSBOT0JMT0NLREVGCi0jZWxzZSAvKiBLUkI1ICovCi0jaWZkZWYgS1JCNTI0 Ci0jZGVmaW5lIE5PQkxPQ0tERUYKLSNlbmRpZiAvKiBLUkI1MjQgKi8KLSNlbmRpZiAvKiBLUkI1 ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNpbmNsdWRlICJja3VhdDIuaCIKLQotI2lm ZGVmIENLX1NTTAotI2lmZGVmIExJQkRFUwotI2lmZGVmIE9QRU5TU0xfMDk3Ci0jaWZkZWYgQ0tf REVTCi0jZGVmaW5lIE9QRU5TU0xfRU5BQkxFX09MRF9ERVNfU1VQUE9SVAotI2luY2x1ZGUgPG9w ZW5zc2wvZGVzLmg+Ci0jZW5kaWYJLyogQ0tfREVTICovCi0jZW5kaWYgLyogT1BFTlNTTF8wOTcg Ki8KLSNpZm5kZWYgSEVBREVSX0RFU19ICi0jZGVmaW5lIEhFQURFUl9ERVNfSAotI2VuZGlmIC8q IEhFQURFUl9ERVNfSCAqLwotI2VuZGlmIC8qIExJQkRFUyAqLwotI2luY2x1ZGUgImNrX3NzbC5o IgotZXh0ZXJuIGludCBzc2xfZmluaXNoZWRfbWVzc2FnZXM7Ci0jZW5kaWYgLyogU1NMICovCi0K LSNkZWZpbmUgUFdEX1NaIDEyOAotCi0jaWZuZGVmIExJQkRFUwotI2lmZGVmIFVOSVgKLSNkZWZp bmUgZGVzX3NldF9yYW5kb21fZ2VuZXJhdG9yX3NlZWQoeCkgZGVzX2luaXRfcmFuZG9tX251bWJl cl9nZW5lcmF0b3IoeCkKLSNlbmRpZiAvKiBVTklYICovCi0jZWxzZSAvKiBMSUJERVMgKi8KLSNk ZWZpbmUgZGVzX2ZpeHVwX2tleV9wYXJpdHkgZGVzX3NldF9vZGRfcGFyaXR5Ci0jZW5kaWYgLyog TElCREVTICovCi0KLSNpZmRlZiBPUzIKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0jZGVmaW5lIE1B UF9ERVMKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgS1JCNAotI2RlZmluZSBN QVBfS1JCNAotI2VuZGlmIC8qIEtSQjQgKi8KLSNpZmRlZiBTUlBETEwKLSNkZWZpbmUgTUFQX1NS UAotI2VuZGlmIC8qIFNSUERMTCAqLwotI2lmZGVmIEtSQjUKLSNkZWZpbmUgTUFQX0tSQjUKLSNl bmRpZiAvKiBLUkI1ICovCi0jaWZkZWYgQ1JZUFRfRExMCi0jZGVmaW5lIE1BUF9DUllQVAotI2Vu ZGlmIC8qIENSWVBUX0RMTCAqLwotI2RlZmluZSBNQVBfTlRMTQotI2luY2x1ZGUgImNrb2F0aC5o IgotI2luY2x1ZGUgImNrb3N5bi5oIgotI2VuZGlmIC8qIE9TMiAqLwotCi0vKgotICogR2xvYmFs cwotICovCi1pbnQgYXV0aF90eXBlX3VzZXJbQVVUSFRZUExTVFNaXSA9IHtBVVRIVFlQRV9BVVRP LCBBVVRIVFlQRV9OVUxMfTsKLWludCBhdXRoX2hvdz0wOwotaW50IGF1dGhfY3J5cHQ9MDsKLWlu dCBhdXRoX2Z3ZD0wOwotCi0vKiBUaGVzZSBhcmUgc3RhdGUgY29tcGxldGlvbiB2YXJpYWJsZXMg Ki8KLXN0YXRpYyBpbnQgbXV0dWFsX2NvbXBsZXRlID0gMDsKLQotI2lmZGVmIEtSQjQKLSNpZmRl ZiBPUzIKLXN0YXRpYyBMRUFTSF9DUkVERU5USUFMUyBjcmVkOwotI2Vsc2UgLyogT1MyICovCi1z dGF0aWMgQ1JFREVOVElBTFMgY3JlZDsKLSNlbmRpZiAvKiBPUzIgKi8KLXN0YXRpYyBLVEVYVF9T VCBrNF9hdXRoOwotc3RhdGljIGNoYXIgICAgIGs0X25hbWVbQU5BTUVfU1pdOwotc3RhdGljIEFV VEhfREFUIGs0X2FkYXQgID0geyAwIH07Ci1zdGF0aWMgTVNHX0RBVCAgazRfbXNnX2RhdGE7Ci0j aWZkZWYgQ0tfRU5DUllQVElPTgotc3RhdGljIEJsb2NrICAgIGs0X3Nlc3Npb25fa2V5ICAgICA9 IHsgMCB9Owotc3RhdGljIFNjaGVkdWxlIGs0X3NjaGVkOwotc3RhdGljIEJsb2NrICAgIGs0X2No YWxsZW5nZSAgICAgICA9IHsgMCB9OwotI2lmZGVmIE1JVF9DVVJSRU5UCi1zdGF0aWMga3JiNV9r ZXlibG9jayBrNF9rcmJrZXk7Ci0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLSNlbmRpZiAvKiBF TkNSWVBUSU9OICovCi0jZGVmaW5lIEtSQjRfU0VSVklDRV9OQU1FICAgICJyY21kIgotCi1fUFJP VE9UWVAoc3RhdGljIGludCBrNF9hdXRoX3NlbmQsKFZPSUQpKTsKLV9QUk9UT1RZUChzdGF0aWMg aW50IGs0X2F1dGhfcmVwbHksKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1fUFJPVE9UWVAoc3Rh dGljIGludCBrNF9hdXRoX2lzLCh1bnNpZ25lZCBjaGFyICosIGludCkpOwotI2VuZGlmIC8qIEtS QjQgKi8KLQotI2lmZGVmIEtSQjUKLXN0YXRpYyBrcmI1X2RhdGEgICAgICAgICAgazVfYXV0aDsK LXN0YXRpYyBrcmI1X2F1dGhfY29udGV4dCAgYXV0aF9jb250ZXh0Owotc3RhdGljIGtyYjVfa2V5 YmxvY2sgICAgICprNV9zZXNzaW9uX2tleSA9IE5VTEw7Ci1zdGF0aWMga3JiNV90aWNrZXQgICAg ICAgKms1X3RpY2tldCA9IE5VTEw7Ci0jaWZuZGVmIEtSQjVfU0VSVklDRV9OQU1FCi0jZGVmaW5l IEtSQjVfU0VSVklDRV9OQU1FICAgICJob3N0IgotI2lmZGVmIE1BQ09TWAotI2RlZmluZSBNSVRf Q1VSUkVOVCAxCi0jZGVmaW5lIGRlY29kZV9rcmI1X3RpY2tldCAga3JiNV9kZWNvZGVfdGlja2V0 Ci0jZGVmaW5lIGtyYjVfcmVhZF9tZXNzYWdlICAgY2tfa3JiNV9yZWFkX21lc3NhZ2UKLSNkZWZp bmUga3JiNV93cml0ZV9tZXNzYWdlICBja19rcmI1X3dyaXRlX21lc3NhZ2UKLSNlbmRpZiAvKiBN QUNPU1ggKi8KLSNlbmRpZgotCi1fUFJPVE9UWVAoc3RhdGljIGludCBrNV9hdXRoX3NlbmQsKGlu dCxpbnQsaW50KSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCBrNV9hdXRoX3JlcGx5LChpbnQsIHVu c2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCBrNV9hdXRoX2lzLChp bnQsdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IFNlbmRLNUF1 dGhTQiwoaW50LCB2b2lkICosIGludCkpOwotI2lmZGVmIFRMU19WRVJJRlkKLXN0YXRpYyBpbnQg a3JiNV90bHNfdmVyaWZpZWQgPSAwOwotI2VuZGlmIC8qIFRMU19WRVJJRlkgKi8KLSNlbmRpZiAv KiBLUkI1ICovCi0KLSNpZmRlZiBHU1NBUElfS1JCNQotI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGku aD4KLSNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpX2dlbmVyaWMuaD4KLSNpbmNsdWRlIDxnc3NhcGkv Z3NzYXBpX2tyYjUuaD4KLQotc3RhdGljIGdzc19jdHhfaWRfdCBnY29udGV4dDsKLSNkZWZpbmUg R1NTX0JVRlNJWiA0MDk2Ci1zdGF0aWMgZ3NzX2J1ZmZlcl9kZXNjIGdzc19zZW5kX3RvaywgZ3Nz X3JlY3ZfdG9rLCAqZ3NzX3Rva2VuX3B0cjsKLXN0YXRpYyBjaGFyIGdzc19zdGJ1ZltHU1NfQlVG U0laXTsKLXN0YXRpYyBnc3NfbmFtZV90IGdzc190YXJnZXRfbmFtZTsKLXN0YXRpYyBzdHJ1Y3Qg Z3NzX2NoYW5uZWxfYmluZGluZ3Nfc3RydWN0IGdzc19jaGFuOwotCi1fUFJPVE9UWVAoc3RhdGlj IGludCBnc3NrNV9hdXRoX3NlbmQsKGludCxpbnQsaW50KSk7Ci1fUFJPVE9UWVAoc3RhdGljIGlu dCBnc3NrNV9hdXRoX3JlcGx5LChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1fUFJPVE9U WVAoc3RhdGljIGludCBnc3NrNV9hdXRoX2lzLChpbnQsdW5zaWduZWQgY2hhciAqLCBpbnQpKTsK LV9QUk9UT1RZUChzdGF0aWMgaW50IFNlbmRHU1NLNUF1dGhTQiwoaW50LCB2b2lkICosIGludCkp OwotI2VuZGlmIC8qIEdTU0FQSV9LUkI1ICovCi0KLSNpZmRlZiBDS19TUlAKLSNpZmRlZiBQUkVf U1JQXzFfN18zCi1fUFJPVE9UWVAoc3RhdGljIGludCBzcnBfcmVwbHksKGludCwgdW5zaWduZWQg Y2hhciAqLCBpbnQpKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IHNycF9pcywoaW50LCB1bnNpZ25l ZCBjaGFyICosIGludCkpOwotI2Vsc2UgLyogUFJFX1NSUF8xXzdfMyAqLwotX1BST1RPVFlQKHN0 YXRpYyBpbnQgbmV3X3NycF9yZXBseSwoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCkpOwotX1BS T1RPVFlQKHN0YXRpYyBpbnQgbmV3X3NycF9pcywoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCkp OwotI2VuZGlmIC8qIFBSRV9TUlBfMV83XzMgKi8KLSNlbmRpZiAvKiBTUlAgKi8KLQotI2lmZGVm IENLX0VOQ1JZUFRJT04KLWludCBlbmNyeXB0X2ZsYWcgPSAxOwotI2VuZGlmCi0jaWZkZWYgRk9S V0FSRAotaW50IGZvcndhcmRfZmxhZyA9IDA7ICAgICAgICAgICAgICAvKiBmb3J3YXJkIHRpY2tl dHM/ICovCi1pbnQgZm9yd2FyZGFibGVfZmxhZyA9IDE7ICAgICAgICAgIC8qIGdldCBmb3J3YXJk YWJsZSB0aWNrZXRzIHRvIGZvcndhcmQ/ICovCi1pbnQgZm9yd2FyZGVkX3RpY2tldHMgPSAwOyAg ICAgICAgIC8qIHdlcmUgdGlja2V0cyBmb3J3YXJkZWQ/ICovCi0jZW5kaWYKLQotc3RhdGljIHVu c2lnbmVkIGNoYXIgc3RyX2RhdGFbNDA5Nl0gPSB7IElBQywgU0IsIFRFTE9QVF9BVVRIRU5USUNB VElPTiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQ RV9LRVJCRVJPU19WNSwgfTsKLSNkZWZpbmUgQVVUSFRNUEJMIDIwNDgKLXN0YXRpYyBjaGFyIHN0 clRtcFtBVVRIVE1QQkwrMV07Ci1zdGF0aWMgY2hhciBzekxvY2FsSG9zdE5hbWVbVUlEQlVGTEVO KzFdOwotc3RhdGljIGtzdHJlYW0gZ19rc3RyZWFtPU5VTEw7Ci0KLSNpZmRlZiBLUkI1Ci1rcmI1 X2NvbnRleHQgazVfY29udGV4dD1OVUxMOwotc3RhdGljIGtyYjVfY3JlZHMgKiByZXRfY3JlZD1O VUxMOwotc3RhdGljIGtyYjVfY29udGV4dCB0ZWxuZXRfY29udGV4dD1OVUxMOwotc3RhdGljIGNo YXIgKiB0ZWxuZXRfa3JiNV9yZWFsbSA9IE5VTEw7Ci1zdGF0aWMga3JiNV9wcmluY2lwYWwgZndk X3NlcnZlciA9IE5VTEw7Ci0jZW5kaWYgLyogS1JCNSAqLwotCi0jaWZkZWYgQ0tfU1JQCi0jaWZk ZWYgUFJFX1NSUF8xXzRfNAotI2lmbmRlZiBQUkVfU1JQXzFfNF81Ci0jZGVmaW5lIFBSRV9TUlBf MV80XzUKLSNlbmRpZiAvKiBQUkVfU1JQXzFfNF81ICovCi0jZW5kaWYgLyogUFJFX1NSUF8xXzRf NSAqLwotI2lmZGVmIFBSRV9TUlBfMV80XzUKLSNpZm5kZWYgUFJFX1NSUF8xXzdfMwotI2RlZmlu ZSBQUkVfU1JQXzFfN18zCi0jZW5kaWYgLyogUFJFX1NSUF8xXzdfMyAqLwotI2VuZGlmIC8qIFBS RV9TUlBfMV80XzUgKi8KLSNpbmNsdWRlIDx0X3B3ZC5oPgotI2luY2x1ZGUgPHRfY2xpZW50Lmg+ Ci0jaW5jbHVkZSA8dF9zZXJ2ZXIuaD4KLXN0YXRpYyBzdHJ1Y3QgdF9zZXJ2ZXIgKiB0cyA9IE5V TEw7Ci1zdGF0aWMgc3RydWN0IHRfY2xpZW50ICogdGMgPSBOVUxMOwotI2lmZGVmIFBSRV9TUlBf MV80XzQKLXN0YXRpYyBzdHJ1Y3QgdF9wdyAqIHRwdyA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IHRf Y29uZiAqIHRjb25mID0gTlVMTDsKLSNlbmRpZiAvKiBQUkVfU1JQXzFfNF80ICovCi0jaWZuZGVm IFBSRV9TUlBfMV83XzMKLSNpZm5kZWYgU1REQ19IRUFERVJTCi0jZGVmaW5lIFNURENfSEVBREVS UyAxCi0jZW5kaWYgLyogU1REQ19IRUFERVJTICovCi0jaW5jbHVkZSA8c3JwLmg+Ci1zdGF0aWMg U1JQICogc19zcnAgPSBOVUxMOwotc3RhdGljIGNzdHIgKiBzX2tleSA9IE5VTEw7Ci1zdGF0aWMg U1JQICogY19zcnAgPSBOVUxMOwotc3RhdGljIGNzdHIgKiBjX2tleSA9IE5VTEw7Ci0jZW5kaWYg LyogUFJFX1NSUF8xXzdfMyAqLwotc3RhdGljIGludCBzcnBfd2FpdHJlc3AgPSAwOyAgICAvKiBG bGFnIHRvIGluZGljYXRlIHJlYWRpbmVzcyBmb3IgcmVzcG9uc2UgKi8KLXN0YXRpYyBjaGFyIHNy cF9wYXNzd2RbUFdEX1NaXTsKLSNlbmRpZiAvKiBDS19TUlAgKi8KLQotI2lmZGVmIENLX0tFUkJF Uk9TCi0jaWZkZWYgUkxPR0NPREUKLSNkZWZpbmUgT1BUU19GT1JXQVJEX0NSRURTICAgICAgICAg ICAweDAwMDAwMDIwCi0jZGVmaW5lIE9QVFNfRk9SV0FSREFCTEVfQ1JFRFMgICAgICAgMHgwMDAw MDAxMAotI2RlZmluZSBLQ01EX0tFWVVTQUdFICAgICAgICAgICAgICAgIDEwMjYKLQotI2RlZmlu ZSBSTE9HX0JVRlNJWiA1MTIwCi1zdGF0aWMgaW50IHJsb2dfZW5jcnlwdCA9IDA7Ci1jaGFyIGRl c19pbmJ1ZlsyKlJMT0dfQlVGU0laXTsgICAgICAgLyogbmVlZHMgdG8gYmUgPiBsYXJnZXN0IHJl YWQgc2l6ZSAqLwotY2hhciBkZXNfb3V0cGt0WzIqUkxPR19CVUZTSVorNF07ICAgIC8qIG5lZWRz IHRvIGJlID4gbGFyZ2VzdCB3cml0ZSBzaXplICovCi0jaWZkZWYgS1JCNQota3JiNV9kYXRhIGRl c2luYnVmLGRlc291dGJ1ZjsKLWtyYjVfZW5jcnlwdF9ibG9jayBlYmxvY2s7ICAgICAgICAgICAg IC8qIGVibG9jayBmb3IgZW5jcnlwdC9kZWNyeXB0ICovCi1zdGF0aWMga3JiNV9kYXRhIGVuY2l2 ZWNfaVsyXSwgZW5jaXZlY19vWzJdOwotCi1lbnVtIGtyYjVfa2NtZF9wcm90byB7Ci0gIC8qIE9s ZCBwcm90b2NvbDogREVTIGVuY3J5cHRpb24gb25seS4gIE5vIHN1YmtleXMuICBObyBwcm90ZWN0 aW9uCi0gICAgIGZvciBjbGVhcnRleHQgbGVuZ3RoLiAgTm8gaXZlYyBzdXBwbGllZC4gIE9PQiBo YWNrcyB1c2VkIGZvcgotICAgICBybG9naW4uICBDaGVja3N1bSBtYXkgYmUgb21pdHRlZCBhdCBj b25uZWN0aW9uIHN0YXJ0dXAuICAqLwotICBLQ01EX09MRF9QUk9UT0NPTCA9IDEsCi0gIC8qIE5l dyBwcm90b2NvbDogQW55IGVuY3J5cHRpb24gc2NoZW1lLiAgQ2xpZW50LWdlbmVyYXRlZCBzdWJr ZXkKLSAgICAgcmVxdWlyZWQuICBQcmVwZW5kIGNsZWFydGV4dC1sZW5ndGggdG8gY2xlYXJ0ZXh0 IGRhdGEgKGJ1dCBkb24ndAotICAgICBpbmNsdWRlIGl0IGluIGNvdW50KS4gIFN0YXJ0aW5nIGl2 ZWMgZGVmaW5lZCwgY2hhaW5lZC4gIEluLWJhbmQKLSAgICAgc2lnbmFsbGluZy4gIENoZWNrc3Vt IHJlcXVpcmVkLiAgKi8KLSAgS0NNRF9ORVdfUFJPVE9DT0wsCi0gIC8qIEhhY2s6IEdldCBjcmVk ZW50aWFscywgYW5kIHVzZSB0aGUgb2xkIHByb3RvY29sIGlmZiB0aGUgc2Vzc2lvbgotICAgICBr ZXkgdHlwZSBpcyBzaW5nbGUtREVTLiAgKi8KLSAgS0NNRF9QUk9UT0NPTF9DT01QQVRfSEFDSywK LSAgS0NNRF9VTktOT1dOX1BST1RPQ09MCi19OwotZW51bSBrcmI1X2tjbWRfcHJvdG8ga3JiNV9y bG9nX3ZlciA9IEtDTURfUFJPVE9DT0xfQ09NUEFUX0hBQ0s7Ci0jZW5kaWYgLyogS1JCNSAqLwot I2VuZGlmIC8qIFJMT0dDT0RFICovCi1zdGF0aWMgY2hhciBzdG9yYWdlWzY1NTM2XTsgICAgICAg ICAgICAvKiBzdG9yYWdlIGZvciB0aGUgZGVjcnlwdGlvbiAqLwotc3RhdGljIGludCBuc3RvcmVk ID0gMDsKLXN0YXRpYyBjaGFyICpzdG9yZV9wdHIgPSBzdG9yYWdlOwotCi1leHRlcm4gY2hhciAq IGtyYjVfZF9wcmluY2lwYWw7ICAgICAgICAgLyogRGVmYXVsdCBwcmluY2lwYWwgKi8KLWV4dGVy biBjaGFyICoga3JiNV9kX2luc3RhbmNlOyAgICAgICAgICAvKiBEZWZhdWx0IGluc3RhbmNlICov Ci1leHRlcm4gY2hhciAqIGtyYjVfZF9yZWFsbTsgICAgICAgICAgICAgLyogRGVmYXVsdCByZWFs bSAqLwotZXh0ZXJuIGNoYXIgKiBrcmI1X2RfY2M7ICAgICAgICAgICAgICAgIC8qIERlZmF1bHQg Y3JlZGVudGlhbHMgY2FjaGUgKi8KLWV4dGVybiBjaGFyICoga3JiNV9kX3NydjsgICAgICAgICAg ICAgICAvKiBEZWZhdWx0IHNlcnZpY2UgbmFtZSAqLwotZXh0ZXJuIGludCAgICBrcmI1X2RfbGlm ZXRpbWU7ICAgICAgICAgIC8qIERlZmF1bHQgbGlmZXRpbWUgKi8KLWV4dGVybiBpbnQgICAga3Ji NV9kX2ZvcndhcmRhYmxlOwotZXh0ZXJuIGludCAgICBrcmI1X2RfcHJveGlhYmxlOwotZXh0ZXJu IGludCAgICBrcmI1X2RfcmVuZXdhYmxlOwotZXh0ZXJuIGludCAgICBrcmI1X2F1dG9nZXQ7Ci1l eHRlcm4gaW50ICAgIGtyYjVfY2hlY2thZGRyczsKLWV4dGVybiBpbnQgICAga3JiNV9kX2dldGs0 OwotZXh0ZXJuIGludCAgICBrcmI1X2Rfbm9fYWRkcmVzc2VzOwotZXh0ZXJuIGNoYXIgKiBrNV9r ZXl0YWI7Ci0KLWV4dGVybiBpbnQgICAga3JiNV9lcnJubzsKLWV4dGVybiBjaGFyICoga3JiNV9l cnJtc2c7Ci0KLWV4dGVybiBjaGFyICoga3JiNF9kX3ByaW5jaXBhbDsgICAgICAgICAvKiBEZWZh dWx0IHByaW5jaXBhbCAqLwotZXh0ZXJuIGNoYXIgKiBrcmI0X2RfcmVhbG07ICAgICAgICAgICAg IC8qIERlZmF1bHQgcmVhbG0gKi8KLWV4dGVybiBjaGFyICoga3JiNF9kX3NydjsgICAgICAgICAg ICAgICAvKiBEZWZhdWx0IHNlcnZpY2UgbmFtZSAqLwotZXh0ZXJuIGludCAgICBrcmI0X2RfbGlm ZXRpbWU7ICAgICAgICAgIC8qIERlZmF1bHQgbGlmZXRpbWUgKi8KLWV4dGVybiBpbnQgICAga3Ji NF9kX3ByZWF1dGg7Ci1leHRlcm4gY2hhciAqIGtyYjRfZF9pbnN0YW5jZTsKLWV4dGVybiBpbnQg ICAga3JiNF9hdXRvZ2V0OwotZXh0ZXJuIGludCAgICBrcmI0X2NoZWNrYWRkcnM7Ci1leHRlcm4g Y2hhciAqIGs0X2tleXRhYjsKLQotZXh0ZXJuIGludCAgICBrcmI0X2Vycm5vOwotZXh0ZXJuIGNo YXIgKiBrcmI0X2Vycm1zZzsKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi1leHRlcm4gY2hh ciB0bl9tc2dbXSwgaGV4YnVmW107ICAgICAgICAgLyogZnJvbSBja2NuZXQuYyAqLwotZXh0ZXJu IENIQVIgcHdidWZbXTsKLWV4dGVybiBpbnQgIHB3ZmxnLCBwd2NyeXB0OwotZXh0ZXJuIGludCBk ZWJsb2csIGRlYnNlcywgdG5fZGViOwotZXh0ZXJuIGludCBzc3RlbG5ldCwgaW5zZXJ2ZXI7Ci0j aWZkZWYgQ0tfTE9HSU4KLWV4dGVybiBpbnQgY2t4YW5vbjsKLSNlbmRpZiAvKiBDS19MT0dJTiAq LwotZXh0ZXJuIGludCB0bl9hdXRoX2hvdzsKLWV4dGVybiBpbnQgdG5fYXV0aF9lbmM7Ci0jaWZk ZWYgQ0tfRU5DUllQVElPTgotZXh0ZXJuIGludCBjeF90eXBlOwotI2VuZGlmIC8qIENLX0VOQ1JZ UFRJT04gKi8KLWV4dGVybiBpbnQgcXVpZXQsIHR0eWZkLCB0dG5wcm90bzsKLQotaW50Ci1ja19n c3NhcGlfaXNfaW5zdGFsbGVkKCkKLXsKLSNpZmRlZiBLUkI1Ci0jaWZkZWYgT1MyCi0gICAgcmV0 dXJuKGhHU1NBUEkgIT0gTlVMTCk7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICByZXR1cm4oMSk7Ci0j ZW5kaWYgLyogT1MyICovCi0jZWxzZSAvKiBLUkI1ICovCi0gICAgcmV0dXJuKDApOwotI2VuZGlm IC8qIEtSQjUgKi8KLX0KLQotaW50Ci1ja19rcmI1X2lzX2luc3RhbGxlZCgpCi17Ci0jaWZkZWYg S1JCNQotI2lmZGVmIE9TMgotICAgIHJldHVybihoS1JCNV8zMiAhPSBOVUxMKTsKLSNlbHNlIC8q IE9TMiAqLwotICAgIHJldHVybigxKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbHNlIC8qIEtSQjUg Ki8KLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogS1JCNSAqLwotfQotCi0KLWludAotY2tfa3Ji NV9pc19pbnN0YWxsZWRfYXNfc2VydmVyKCkKLXsKLSNpZmRlZiBLUkI1Ci0jaWZkZWYgSEVJTURB TAotICAgIGtyYjVfZXJyb3JfY29kZSByZXQ7Ci0gICAga3JiNV9rZXl0YWIga3Q7Ci0gICAga3Ji NV9rdF9jdXJzb3IgY3Vyc29yOwotCi0gICAgcmV0ID0ga3JiNV9rdF9kZWZhdWx0KGs1X2NvbnRl eHQsICZrdCk7Ci0gICAgaWYgKCByZXQgKSB7Ci0gICAgICAgIGtyYjVfa3RfY2xvc2UoazVfY29u dGV4dCwga3QpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAga3Ji NV9rdF9lbmRfc2VxX2dldChrNV9jb250ZXh0LCBrdCwgJmN1cnNvcik7Ci0gICAgICAgIGtyYjVf a3RfY2xvc2UoazVfY29udGV4dCwga3QpOwotICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotI2Vs c2UgLyogSEVJTURBTCAqLwotI2lmbmRlZiBDT01NRU5UCi0gICAgY2hhciBrdG5hbWVbQ0tNQVhQ QVRIXT0iIjsKLQotICAgIGlmICggazVfa2V5dGFiICkgewotICAgICAgICBja3N0cm5jcHkoa3Ru YW1lLGs1X2tleXRhYixDS01BWFBBVEgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGtyYjVfZXJy b3JfY29kZSBjb2RlOwotCi0gICAgICAgIGlmICggazVfY29udGV4dCA9PSBOVUxMKQotICAgICAg ICAgICAgaWYgKGtyYjVfaW5pdF9jb250ZXh0KCZrNV9jb250ZXh0KSkKLSAgICAgICAgICAgICAg ICByZXR1cm4oMCk7Ci0KLSAgICAgICAgY29kZSA9IGtyYjVfa3RfZGVmYXVsdF9uYW1lKGs1X2Nv bnRleHQsa3RuYW1lLENLTUFYUEFUSCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsImtyYjVfa3RfZGVm YXVsdF9uYW1lIiwiIixjb2RlKTsKLSAgICAgICAgaWYgKCBjb2RlICkgewotICAgICAgICAgICAg LyogV2UgY2FuJ3QgY2hlY2sgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZmlsZSBzaW5jZSB3ZSBjYW4n dCAgICovCi0gICAgICAgICAgICAvKiBkZXRlcm1pbmUgdGhlIGZpbGUgbmFtZS4gIFNvIHdlIHJl dHVybiBUUlVFIGFuZCBsZXQgICAgICAgKi8KLSAgICAgICAgICAgIC8qIEtyYjUgYmUgb2ZmZXJl ZCB0byB0aGUgdXNlciBldmVuIHRob3VnaCBpdCBtYXkgZmFpbCBsYXRlciAqLwotICAgICAgICAg ICAgcmV0dXJuKDEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCAhc3RybmNtcCgiRklM RToiLGt0bmFtZSw1KSApIHsKLSAgICAgICAgaWYgKCB6Y2hraSgma3RuYW1lWzVdKSA+IDAgKQot ICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4o MCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGt0bmFtZVswXSkKLSAgICAgICAgICAgIHJl dHVybigxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNl bHNlIC8qIENPTU1FTlQgKi8KLSAgICBrcmI1X2Vycm9yX2NvZGUgICAgICAgICAgICAga3JiNXJj ID0gS1JCNUtSQl9FUlJfR0VORVJJQzsKLSAgICBrcmI1X2NvbnRleHQgICAgICAgICAgICAgICAg a3JiNWNvbnRleHQgPSBOVUxMOwotICAgIGtyYjVfY2NhY2hlICAgICAgICAgICAgICAgICBrcmI1 Y2NkZWYgPSBOVUxMOwotICAgIGtyYjVfY3JlZHMgICAgICAgICAgICAgICAgICBrcmI1Y3JlZHMs ICprcmI1Y3JlZHNwID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcmMg PSAwOwotCi0gICAgaWYgKCAhY2tfa3JiNV9pc19pbnN0YWxsZWQoKSApCi0gICAgICAgIHJldHVy bigwKTsKLQotICAgIG1lbXNldCgoY2hhciAqKSZrcmI1Y3JlZHMsIDAsIHNpemVvZihrcmI1Y3Jl ZHMpKTsKLQotICAgIGlmICgoa3JiNXJjID0ga3JiNV9pbml0X2NvbnRleHQoJmtyYjVjb250ZXh0 KSkgIT0gMCkKLSAgICAgICAgZ290byBlcnI7Ci0KLSAgICBpZiAoKGtyYjVyYyA9IGtyYjVfc25h bWVfdG9fcHJpbmNpcGFsKGtyYjVjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3pIb3N0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGtyYjVfZF9zcnYgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAga3JiNV9kX3NydiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBLUkI1X1NFUlZJQ0VfTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEtSQjVfTlRfU1JWX0hTVCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZrcmI1Y3JlZHMuc2VydmVyKSkgIT0gMCkKLSAgICAgIGdvdG8g ZXJyOwotCi0gICAgaWYgKChrcmI1cmMgPSBrcmI1X2NjX2RlZmF1bHQoa3JiNWNvbnRleHQsICZr cmI1Y2NkZWYpKSAhPSAwKQotICAgICAgICBnb3RvIGVycjsKLQotICAgIGlmICgoa3JiNXJjID0g a3JiNV9jY19nZXRfcHJpbmNpcGFsKGtyYjVjb250ZXh0LCBrcmI1Y2NkZWYsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrcmI1Y3JlZHMuY2xpZW50KSkgIT0gMCkK LSAgICAgICAgZ290byBlcnI7Ci0KLSAgICBpZiAoKGtyYjVyYyA9IGtyYjVfZ2V0X2NyZWRlbnRp YWxzKGtyYjVjb250ZXh0LCAwLCBrcmI1Y2NkZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmtyYjVjcmVkcywgJmtyYjVjcmVkc3ApKSAhPSAwKQotICAgICAgICBn b3RvIGVycjsKLSAgICByYyA9IDE7Ci0KLSAgZXJyOgotCi0gICAgaWYgKGtyYjVjcmVkcy5jbGll bnQpCi0gICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGtyYjVjb250ZXh0LCBrcmI1Y3JlZHMuY2xp ZW50KTsKLSAgICBpZiAoa3JiNWNyZWRzLnNlcnZlcikKLSAgICAgIGtyYjVfZnJlZV9wcmluY2lw YWwoa3JiNWNvbnRleHQsIGtyYjVjcmVkcy5zZXJ2ZXIpOwotICAgIGlmIChrcmI1Y29udGV4dCkK LSAgICAgIGtyYjVfZnJlZV9jb250ZXh0KGtyYjVjb250ZXh0KTsKLSAgICByZXR1cm4ocmMpOwot Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSNlbHNlIC8qIEtS QjUgKi8KLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogS1JCNSAqLwotfQotCi1pbnQKLWNrX2ty YjRfaXNfaW5zdGFsbGVkKCkKLXsKLSNpZmRlZiBLUkI0Ci0jaWZkZWYgT1MyCi0gICAgcmV0dXJu KGhLUkI0XzMyICE9IE5VTEwpOwotI2Vsc2UgLyogT1MyICovCi0gICAgcmV0dXJuKDEpOwotI2Vu ZGlmIC8qIE9TMiAqLwotI2Vsc2UgLyogS1JCNCAqLwotICAgIHJldHVybigwKTsKLSNlbmRpZiAv KiBLUkI0ICovCi19Ci0KLWludAotY2tfa3JiNF9pc19pbnN0YWxsZWRfYXNfc2VydmVyKCkKLXsK LSAgICBpZiAoICFja19rcmI0X2lzX2luc3RhbGxlZCgpICkKLSAgICAgICAgcmV0dXJuKDApOwot Ci0jaWZkZWYgS1JCNAotICAgIGlmICggIWs0X2tleXRhYiApIHsKLSNpZmRlZiBOVAotICAgICAg ICBjaGFyIG5hbWVbQ0tNQVhQQVRIXT0iIjsKLSAgICAgICAgRFdPUkQgbGVuID0gQ0tNQVhQQVRI OwotCi0gICAgICAgIGxlbiA9IEdldFdpbmRvd3NEaXJlY3RvcnkobmFtZSxsZW4pOwotICAgICAg ICBpZiAoIGxlbiA+IDAgKQotICAgICAgICAgICAgY2tzdHJuY2F0KG5hbWUsIi9zcnZ0YWIiLENL TUFYUEFUSCk7Ci0gICAgICAgIGlmICggbmFtZVswXSApCi0gICAgICAgICAgICBtYWtlc3RyKCZr NF9rZXl0YWIsbmFtZSk7Ci0jZWxzZSAvKiBOVCAqLwotICAgICAgICBtYWtlc3RyKCZrNF9rZXl0 YWIsIi9ldGMvc3J2dGFiIik7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICB9Ci0KLSAgICBpZiAoICFr NF9rZXl0YWIgKQotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIHpjaGtpKGs0X2tleXRh YikgPiAwICkKLSAgICAgICAgcmV0dXJuKDEpOwotI2lmZGVmIEtSQjUyNAotICAgIGVsc2UgaWYg KGNrX2tyYjVfaXNfaW5zdGFsbGVkX2FzX3NlcnZlcigpKQotICAgICAgICByZXR1cm4oMSk7Ci0j ZW5kaWYgLyogS1JCNTI0ICovCi0gICAgZWxzZQotICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYg LyogS1JCNCAqLwotfQotCi1pbnQKLWNrX3NycF9pc19pbnN0YWxsZWRfYXNfc2VydmVyKCkKLXsK LSNpZmRlZiBDS19TUlAKLSNpZmRlZiBTUlBETEwKLSAgICBpZiAoIGhTUlAgPT0gTlVMTCApCi0g ICAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBTUlBETEwgKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgLyogVGhpcyBpcyB0aGUgbmV3IEFQSSBhcyBvZiAxLjcuNC4gIEhvd2V2ZXIsIGFsbCBpdCBk b2VzCi0gICAgICAgaXMgYWxsb2NhdGUgYSBkYXRhIHN0cnVjdHVyZS4gIEl0IGNhbiBuZXZlciBm YWlsLgotICAgICAqLwotICAgIHsKLSAgICAgICAgU1JQICogc19zcnAgPSBTUlBfbmV3KFNSUF9S RkMyOTQ1X3NlcnZlcl9tZXRob2QoKSk7Ci0gICAgICAgIGlmICggc19zcnAgKSB7Ci0gICAgICAg ICAgICBTUlBfZnJlZShzX3NycCk7Ci0gICAgICAgICAgICBzX3NycCA9IE5VTEw7Ci0gICAgICAg ICAgICByZXR1cm4oMSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNl bHNlIC8qIENPTU1FTlQgKi8KLSAgICB7Ci0gICAgICAgIHN0cnVjdCB0X3B3ICogdHB3ID0gTlVM TDsKLSAgICAgICAgc3RydWN0IHRfY29uZiAqIHRjb25mID0gTlVMTDsKLSAgICAgICAgaWYoKHRj b25mID0gdF9vcGVuY29uZihOVUxMKSkgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybigwKTsK LSAgICAgICAgaWYoKHRwdyA9IHRfb3BlbnB3KE5VTEwpKSA9PSBOVUxMKSB7Ci0gICAgICAgICAg ICB0X2Nsb3NlY29uZih0Y29uZik7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0K LSAgICAgICAgdF9jbG9zZWNvbmYodGNvbmYpOwotICAgICAgICB0X2Nsb3NlcHcodHB3KTsKLSAg ICAgICAgcmV0dXJuKDEpOwotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZWxzZSAvKiBT UlAgKi8KLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogU1JQICovCi19Ci0KLWludAotY2tfc3Jw X2lzX2luc3RhbGxlZCgpCi17Ci0jaWZkZWYgQ0tfU1JQCi0jaWZkZWYgU1JQRExMCi0gICAgaWYg KCBoU1JQID09IE5VTEwgKQotICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogU1JQRExMICov Ci0gICAgcmV0dXJuKDEpOwotI2Vsc2UgLyogQ0tfU1JQICovCi0gICAgcmV0dXJuKDApOwotI2Vu ZGlmIC8qIENLX1NSUCAqLwotfQotCi1pbnQKLWNrX2tyeXB0b19pc19pbnN0YWxsZWQoKQotewot I2lmZGVmIENLX1NSUAotI2lmZGVmIE9TMgotICAgIGlmICggaExJQktSWVBUTyA9PSBOVUxMICkK LSAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIHJldHVybigxKTsKLSNl bHNlIC8qIENLX1NSUCAqLwotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBDS19TUlAgKi8KLX0K LQotaW50Ci1ja19jcnlwdF9pc19pbnN0YWxsZWQoKQotewotI2lmZGVmIENLX0VOQ1JZUFRJT04K LSNpZmRlZiBDUllQVF9ETEwKLSAgICByZXR1cm4oaENSWVBUICE9IE5VTEwpOwotI2Vsc2UgLyog Q1JZUFRfRExMICovCi0gICAgcmV0dXJuKDEpOwotI2VuZGlmIC8qIENSWVBUX0RMTCAqLwotI2Vs c2UgLyogRU5DUllQVElPTiAqLwotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBFTkNSWVBUSU9O ICovCi19Ci0KLWludAotY2tfbnRsbV9pc19pbnN0YWxsZWQoKQotewotI2lmZGVmIE5UCi0gICAg cmV0dXJuKGhTU1BJICE9IE5VTEwpOwotI2Vsc2UgLyogTlQgKi8KLSAgICByZXR1cm4oMCk7Ci0j ZW5kaWYgLyogTlQgKi8KLX0KLQotaW50Ci1ja190bl9hdXRoX3ZhbGlkKCkKLXsKLSAgICByZXR1 cm4odmFsaWRVc2VyKTsKLX0KLQotLyogQyBLIF8gSyBSIEIgXyBBIFUgVCBIIF8gSSBOIF8gUCBS IE8gRyBSIEUgUyBTCi0gKgotICogSXMgYW4gYXV0aGVudGljYXRpb24gbmVnb3RpYXRpb24gc3Rp bGwgaW4gcHJvZ3Jlc3M/Ci0gKgotICovCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi1ja190bl9h dXRoX2luX3Byb2dyZXNzKHZvaWQpCi0jZWxzZQotY2tfdG5fYXV0aF9pbl9wcm9ncmVzcygpCi0j ZW5kaWYKLXsKLSAgICBzd2l0Y2ggKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24pIHsKLSAgICBjYXNl IEFVVEhUWVBFX0FVVE86Ci0gICAgICAgIHJldHVybigxKTsKLSAgICBjYXNlIEFVVEhUWVBFX05V TEw6Ci0gICAgICAgIHJldHVybigwKTsKLSNpZmRlZiBLUkI0Ci0gICAgY2FzZSBBVVRIVFlQRV9L RVJCRVJPU19WNDoKLSAgICAgICAgaWYgKCFhY2NlcHRfY29tcGxldGUpIHsKLSAgICAgICAgICAg IGRlYnVnKEYxMDAsImNrX2F1dGhfaW5fcHJvZ3Jlc3MoKSBLZXJiZXJvcyA0ICFhY2NlcHRfY29t cGxldGUiLAotICAgICAgICAgICAgICAgICAgICIiLDApOwotICAgICAgICAgICAgcmV0dXJuKDEp OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKChhdXRoX2hvdyAmIEFVVEhfSE9XX01BU0sp ICYmICFtdXR1YWxfY29tcGxldGUpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsImNrX2F1dGhf aW5fcHJvZ3Jlc3MoKSBLZXJiZXJvcyA0ICFtdXR1YWxfY29tcGxldGUiLAotICAgICAgICAgICAg ICAgICAgICIiLDApOwotICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICB9Ci0gICAgICAg IGVsc2UKLSAgICAgICAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBLUkI0ICovCi0jaWZkZWYg S1JCNQotICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjU6Ci0gICAgICAgIGlmICghYWNjZXB0 X2NvbXBsZXRlKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJja19hdXRoX2luX3Byb2dyZXNz KCkgS2VyYmVyb3MgNSAhYWNjZXB0X2NvbXBsZXRlIiwKLSAgICAgICAgICAgICAgICAgICAiIiww KTsKLSAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICgo YXV0aF9ob3cgJiBBVVRIX0hPV19NQVNLKSAmJiAhbXV0dWFsX2NvbXBsZXRlKSB7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJja19hdXRoX2luX3Byb2dyZXNzKCkgS2VyYmVyb3MgNSAhbXV0dWFs X2NvbXBsZXRlIiwKLSAgICAgICAgICAgICAgICAgICAiIiwwKTsKLSAgICAgICAgICAgIHJldHVy bigxKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0j aWZkZWYgR1NTQVBJX0s1Ci0gICAgY2FzZSBBVVRIVFlQRV9HU1NBUElfS1JCNToKLSAgICAgICAg aWYgKCFhY2NlcHRfY29tcGxldGUpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsCi0JCSAgImNr X2F1dGhfaW5fcHJvZ3Jlc3MoKSBHU1NBUEkgS2VyYmVyb3MgNSAhYWNjZXB0X2NvbXBsZXRlIiwK LQkJICAiIiwKLQkJICAwCi0JCSAgKTsKLSAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAg fQotICAgICAgICBlbHNlIGlmICgoYXV0aF9ob3cgJiBBVVRIX0hPV19NQVNLKSAmJiAhbXV0dWFs X2NvbXBsZXRlKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLAotCQkgICJja19hdXRoX2luX3By b2dyZXNzKCkgR1NTQVBJIEtlcmJlcm9zIDUgIW11dHVhbF9jb21wbGV0ZSIsCi0JCSAgIiIsCi0J CSAgMAotCQkgICk7Ci0gICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgIH0gZWxzZQotCSAg cmV0dXJuKDApOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBHU1NBUElfSzUgKi8KLSNlbmRp ZiAvKiBLUkI1ICovCi0jaWZkZWYgQ0tfU1JQCi0gICAgY2FzZSBBVVRIVFlQRV9TUlA6Ci0gICAg ICAgIGlmICghYWNjZXB0X2NvbXBsZXRlIHx8IHNycF93YWl0cmVzcCkKLSAgICAgICAgICAgIHJl dHVybigxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8q IENLX1NSUCAqLwotI2lmZGVmIE5UTE0KLSAgICBjYXNlIEFVVEhUWVBFX05UTE06Ci0gICAgICAg IGlmICghYWNjZXB0X2NvbXBsZXRlKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJja19hdXRo X2luX3Byb2dyZXNzKCkgTlRMTSAhYWNjZXB0X2NvbXBsZXRlIiwKLSAgICAgICAgICAgICAgICAg ICAiIiwwKTsKLSAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTlRMTSAqLwotICAgIGNhc2UgQVVU SFRZUEVfU1NMOgotICAgICAgICBpZiAoIWFjY2VwdF9jb21wbGV0ZSkgewotICAgICAgICAgICAg ZGVidWcoRjEwMCwiY2tfYXV0aF9pbl9wcm9ncmVzcygpIFNTTCAhYWNjZXB0X2NvbXBsZXRlIiwK LSAgICAgICAgICAgICAgICAgICAiIiwwKTsKLSAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAg ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgZGVmYXVsdDoK LSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLQotLyogIEMg SyBfIEsgUiBCIF8gVCBOIF8gQSBVIFQgSCBfIFIgRSBRIFUgRSBTIFQKLSAqCi0gKiAgQnVpbGRz IGEgVGVsbmV0IEF1dGhlbnRpY2F0aW9uIFNlbmQgTmVnb3RpYXRpb24gcHJvdmlkaW5nIHRoZQot ICogIGxpc3Qgb2Ygc3VwcG9ydGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMuICBUbyBiZSB1c2Vk IG9ubHkKLSAqICB3aGVuIGFjY2VwdGluZyBpbmNvbWluZyBjb25uZWN0aW9ucyBhcyBvbmx5IHRo ZSBzZXJ2ZXIgKERPKSBzaWRlIG9mIHRoZQotICogIFRlbG5ldCBuZWdvdGlhdGlvbiBpcyBhbGxv d2VkIHRvIHNlbmQgYW4gQVVUSCBTRU5ELgotICoKLSAqICBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3Mg YW5kIC0xIG9uIGZhaWx1cmUKLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBzdHJfcmVxdWVz dFs2NF0gPSB7IElBQywgU0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBURUxPUFRfQVVUSEVOVElDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBURUxRVUFMX1NFTkQgfTsKLSNpZmRlZiBHU1NBUElfSzUKLXN0 YXRpYyBpbnQKLWNrX3RuX2F1dGhfcmVxdWVzdF9nc3NrcmI1KGludCBpKQotewotICAgIGlmIChj a19nc3NhcGlfaXNfaW5zdGFsbGVkKCkgJiYgY2tfa3JiNV9pc19pbnN0YWxsZWRfYXNfc2VydmVy KCkpIHsKLSAgICAgICAgaWYgKCAodG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfQU5ZIHx8Ci0g ICAgICAgICAgICAgICB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19NVVRVQUwpICAmJgotICAg ICAgICAgICAgICh0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19BTlkgfHwKLSAgICAgICAgICAg ICAgIHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX0VYQ0gpICkgewotICAgICAgICAgICAgc3Ry X3JlcXVlc3RbaSsrXSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1OwotICAgICAgICAgICAgc3RyX3Jl cXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgfCBBVVRIX0hPV19NVVRVQUw7Ci0gICAg ICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfQUZURVJfRVhDSEFOR0U7Ci0K LSAgICAgICAgICAgIGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMgKQotICAgICAgICAg ICAgICAgIGNrc3RybmNhdCh0bl9tc2csCi0gICAgICAgICAgICAgICAgIktFUkJFUk9TX1Y1IENM SUVOVF9UT19TRVJWRVJ8TVVUVUFMfEVOQ1JZUFRfQUZURVJfRVhDSEFOR0UgIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAg IH0KLSAgICB9Ci19Ci0jZW5kaWYgLyogR1NTQVBJX0s1ICovCi0KLSNpZmRlZiBLUkI1Ci1zdGF0 aWMgaW50Ci1ja190bl9hdXRoX3JlcXVlc3Rfa3JiNShpbnQgaSkKLXsKLSAgICBpZiAoY2tfa3Ji NV9pc19pbnN0YWxsZWRfYXNfc2VydmVyKCkpIHsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgaWYg KCBja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgJiYKLSAgICAgICAgICAgICAodGxzX2FjdGl2ZV9m bGFnIHx8IHNzbF9hY3RpdmVfZmxhZykgJiYKLSAgICAgICAgICAgICBzc2xfZmluaXNoZWRfbWVz c2FnZXMgKQotICAgICAgICB7Ci0jaWZkZWYgVVNFX0lOSV9DUkVEX0ZXRAotICAgICAgICAgICAg aWYgKCBmb3J3YXJkX2ZsYWcgJiYKLSAgICAgICAgICAgICAgICAgKHRuX2F1dGhfaG93ID09IFRO X0FVVEhfSE9XX0FOWSB8fAotICAgICAgICAgICAgICAgICAgIHRuX2F1dGhfaG93ID09IFROX0FV VEhfSE9XX01VVFVBTCkgICYmCi0gICAgICAgICAgICAgICAgICh0bl9hdXRoX2VuYyA9PSBUTl9B VVRIX0VOQ19BTlkgfHwKLSAgICAgICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9PSBUTl9BVVRI X0VOQ19URUxPUFQpCi0gICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICBzdHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVfS0VSQkVST1NfVjU7Ci0gICAgICAg ICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgfCBBVVRIX0hP V19NVVRVQUw7Ci0gICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gfD0gQVVUSF9FTkNSWVBU X1NUQVJUX1RMUzsKLSAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBJTklfQ1JFRF9G V0RfT047Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2Vz ICkKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywKLSAiS0VSQkVST1NfVjUg Q0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQVF9TVEFSVF9UTFN8SU5JX0NSRURfRldEX09O ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7Ci0gICAgICAg ICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIFVTRV9JTklfQ1JFRF9GV0Qg Ki8KLSAgICAgICAgICAgIGlmICggKHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX0FOWSB8fAot ICAgICAgICAgICAgICAgICAgIHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX01VVFVBTCkgICYm Ci0gICAgICAgICAgICAgICAgICh0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19BTlkgfHwKLSAg ICAgICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19URUxPUFQpICkgewot ICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2krK10gPSBBVVRIVFlQRV9LRVJCRVJPU19WNTsK LSAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8 IEFVVEhfSE9XX01VVFVBTDsKLSAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRI X0VOQ1JZUFRfU1RBUlRfVExTOwotCi0gICAgICAgICAgICAgICAgaWYgKCBkZWJsb2cgfHwgdG5f ZGViIHx8IGRlYnNlcyApCi0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csCi0g ICAgICAgICAgICAgICAgICAgICAgIktFUkJFUk9TX1Y1IENMSUVOVF9UT19TRVJWRVJ8TVVUVUFM fEVOQ1JZUFRfU1RBUlRfVExTICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTl9N U0dfTEVOKTsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBpZiAoIHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX0FOWSB8fAotICAgICAgICAgICAgICAg ICB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19PTkVfV0FZICkgewotICAgICAgICAgICAgICAg IHN0cl9yZXF1ZXN0W2krK10gPSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKLSAgICAgICAgICAgICAg ICBzdHJfcmVxdWVzdFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhfSE9XX09ORV9X QVk7Ci0gICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gfD0gQVVUSF9FTkNSWVBUX1NUQVJU X1RMUzsKLQotICAgICAgICAgICAgICAgIGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMg KQotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLAotICAgICAgICAgICAgICAg ICAgICAiS0VSQkVST1NfVjUgQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZfEVOQ1JZUFRfU1RBUlRf VExTICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7Ci0gICAg ICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jaWZkZWYgQ0tfRU5D UllQVElPTgotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCi0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotI2lmZGVmIFVT RV9JTklfQ1JFRF9GV0QKLSAgICAgICAgICAgIGlmICggZm9yd2FyZF9mbGFnICYmCi0gICAgICAg ICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19SRiAm JgotICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBU Tl9OR19SRiAmJgotICAgICAgICAgICAgICAgICAodG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1df QU5ZIHx8Ci0gICAgICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfTVVU VUFMKSAgJiYKLSAgICAgICAgICAgICAgICAgKHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX0FO WSB8fAotICAgICAgICAgICAgICAgICAgIHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX1RFTE9Q VCkKLSAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0 cl9yZXF1ZXN0W2krK10gPSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKLSAgICAgICAgICAgICAgICBz dHJfcmVxdWVzdFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhfSE9XX01VVFVBTDsK LSAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVM T1BUOwotICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IElOSV9DUkVEX0ZXRF9PTjsK LQotICAgICAgICAgICAgICAgIGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMgKQotICAg ICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLAotICAiS0VSQkVST1NfVjUgQ0xJRU5U X1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQVF9VU0lOR19URUxPUFR8SU5JX0NSRURfRldEX09OICIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7Ci0gICAgICAgICAg ICAgICAgaSsrOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIFVTRV9JTklfQ1JFRF9GV0QgKi8K LQotICAgICAgICAgICAgaWYgKCBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgIT0g VE5fTkdfUkYgJiYKLSAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQ VElPTikgIT0gVE5fTkdfUkYgJiYKLSAgICAgICAgICAgICAgICAgKHRuX2F1dGhfaG93ID09IFRO X0FVVEhfSE9XX0FOWSB8fAotICAgICAgICAgICAgICAgICAgIHRuX2F1dGhfaG93ID09IFROX0FV VEhfSE9XX01VVFVBTCkgICYmCi0gICAgICAgICAgICAgICAgICh0bl9hdXRoX2VuYyA9PSBUTl9B VVRIX0VOQ19BTlkgfHwKLSAgICAgICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9PSBUTl9BVVRI X0VOQ19URUxPUFQpICkgewotICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2krK10gPSBBVVRI VFlQRV9LRVJCRVJPU19WNTsKLSAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSA9IEFVVEhf Q0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhfSE9XX01VVFVBTDsKLSAgICAgICAgICAgICAgICBzdHJf cmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BUOwotCi0gICAgICAgICAgICAg ICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcyApCi0gICAgICAgICAgICAgICAgICAg IGNrc3RybmNhdCh0bl9tc2csCi0gICAgICAgICAgICAgICJLRVJCRVJPU19WNSBDTElFTlRfVE9f U0VSVkVSfE1VVFVBTHxFTkNSWVBUX1VTSU5HX1RFTE9QVCAiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFROX01TR19MRU4pOwotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAg ICAgIH0KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQotICAgICAgICBpZiAoIFRFTE9QVF9NRV9NT0RFKFRF TE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19NVSAmJgotICAgICAgICAgICAgIFRFTE9QVF9VX01P REUoVEVMT1BUX0VOQ1JZUFRJT04pICE9IFROX05HX01VICYmCi0gICAgICAgICAgICAgKHRuX2F1 dGhfZW5jID09IFROX0FVVEhfRU5DX0FOWSB8fAotICAgICAgICAgICAgICAgdG5fYXV0aF9lbmMg PT0gVE5fQVVUSF9FTkNfTk9ORSkKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAmJiAhKGNr X3NzbGVheV9pc19pbnN0YWxsZWQoKSAmJgotICAgICAgICAgICAgICAgICAgICh0bHNfYWN0aXZl X2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnKSAmJgotICAgICAgICAgICAgICAgICAgIHRsc19pc19h bm9uKDApKQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICkKLSAgICAgICAgewot I2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgIC8qIENhbid0IHBlcmZvcm0gbXV0dWFs IGF1dGhlbnRpY2F0aW9uIHdpdGhvdXQgZW5jcnlwdGlvbiAqLwotICAgICAgICAgICAgaWYgKCB0 bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwKLSAgICAgICAgICAgICAgICAgdG5fYXV0 aF9ob3cgPT0gVE5fQVVUSF9IT1dfTVVUVUFMICkgewotICAgICAgICAgICAgICAgIHN0cl9yZXF1 ZXN0W2krK10gPSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKLSAgICAgICAgICAgICAgICBzdHJfcmVx dWVzdFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhfSE9XX01VVFVBTDsKLSAgICAg ICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfT0ZGOwotCi0gICAgICAg ICAgICAgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcyApCi0gICAgICAgICAgICAg ICAgICAgIGNrc3RybmNhdCh0bl9tc2csIktFUkJFUk9TX1Y1IENMSUVOVF9UT19TRVJWRVJ8TVVU VUFMICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7Ci0gICAg ICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04g Ki8KLSAgICAgICAgICAgIGlmICggdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfQU5ZIHx8Ci0g ICAgICAgICAgICAgICAgIHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX09ORV9XQVkgKSB7Ci0g ICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaSsrXSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1Owot ICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwg QVVUSF9IT1dfT05FX1dBWTsKLSAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRI X0VOQ1JZUFRfT0ZGOwotCi0gICAgICAgICAgICAgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8 IGRlYnNlcyApCi0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIktFUkJFUk9T X1Y1IENMSUVOVF9UT19TRVJWRVJ8T05FX1dBWSAiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFROX01TR19MRU4pOwotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4oaSk7Ci19Ci0jZW5kaWYgLyogS1JCNSAqLwot I2lmZGVmIEtSQjQKLXN0YXRpYyBpbnQKLWNrX3RuX2F1dGhfcmVxdWVzdF9rcmI0KGludCBpKQot ewotICAgIGlmIChja19rcmI0X2lzX2luc3RhbGxlZF9hc19zZXJ2ZXIoKSkgewotI2lmZGVmIENL X0VOQ1JZUFRJT04KLSAgICAgICAgaWYgKFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9O KSAhPSBUTl9OR19SRiAmJgotICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZ UFRJT04pICE9IFROX05HX1JGICYmCi0gICAgICAgICAgICAgKHRuX2F1dGhfaG93ID09IFROX0FV VEhfSE9XX0FOWSB8fAotICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1df TVVUVUFMKSAgJiYKLSAgICAgICAgICAgICAodG5fYXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfQU5Z IHx8Ci0gICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19URUxPUFQpICkK LSAgICAgICAgewotICAgICAgICAgICAgc3RyX3JlcXVlc3RbaSsrXSA9IEFVVEhUWVBFX0tFUkJF Uk9TX1Y0OwotICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9UT19TRVJW RVIgfCBBVVRIX0hPV19NVVRVQUw7Ci0gICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRI X0VOQ1JZUFRfVVNJTkdfVEVMT1BUOwotCi0gICAgICAgICAgICBpZiAoIGRlYmxvZyB8fCB0bl9k ZWIgfHwgZGVic2VzICkKLSAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiS0VSQkVST1Nf VjQgQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQVCAiLAotICAgICAgICAgICAgICAgICAg ICAgICAgVE5fTVNHX0xFTik7Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCi0KLSAgICAgICAgaWYgKFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9F TkNSWVBUSU9OKSAhPSBUTl9OR19NVSAmJgotICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVM T1BUX0VOQ1JZUFRJT04pICE9IFROX05HX01VICYmCi0gICAgICAgICAgICAgKHRuX2F1dGhfZW5j ID09IFROX0FVVEhfRU5DX0FOWSB8fAotICAgICAgICAgICAgICAgdG5fYXV0aF9lbmMgPT0gVE5f QVVUSF9FTkNfTk9ORSkgKQotICAgICAgICB7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAg ICAgICAgLyogQ2FuJ3QgcGVyZm9ybSBtdXR1YWwgYXV0aGVudGljYXRpb24gd2l0aG91dCBlbmNy eXB0aW9uICovCi0gICAgICAgICAgICBpZiAoIHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX0FO WSB8fAotICAgICAgICAgICAgICAgICB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19NVVRVQUwg KSB7Ci0gICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaSsrXSA9IEFVVEhUWVBFX0tFUkJFUk9T X1Y0OwotICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldID0gQVVUSF9DTElFTlRfVE9fU0VS VkVSIHwgQVVUSF9IT1dfTVVUVUFMOwotICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9 IEFVVEhfRU5DUllQVF9PRkY7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGRlYmxvZyB8fCB0bl9k ZWIgfHwgZGVic2VzICkKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiS0VS QkVST1NfVjQgQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUwgIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUTl9NU0dfTEVOKTsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAg ICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAgICAgaWYgKCB0bl9hdXRo X2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwKLSAgICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cg PT0gVE5fQVVUSF9IT1dfT05FX1dBWSApIHsKLSAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtp KytdID0gQVVUSFRZUEVfS0VSQkVST1NfVjQ7Ci0gICAgICAgICAgICAgICAgc3RyX3JlcXVlc3Rb aV0gPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgfCBBVVRIX0hPV19PTkVfV0FZOwotICAgICAgICAg ICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IEFVVEhfRU5DUllQVF9PRkY7Ci0KLSAgICAgICAgICAg ICAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkKLSAgICAgICAgICAgICAgICAg ICAgY2tzdHJuY2F0KHRuX21zZywiS0VSQkVST1NfVjQgQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZ ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7Ci0gICAgICAg ICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0 dXJuKGkpOwotfQotI2VuZGlmIC8qIEtSQjQgKi8KLQotI2lmZGVmIENLX1NSUAotc3RhdGljIGlu dAotY2tfdG5fYXV0aF9yZXF1ZXN0X3NycChpbnQgaSkKLXsKLSAgICBpZiAoY2tfc3JwX2lzX2lu c3RhbGxlZF9hc19zZXJ2ZXIoKSkgewotI2lmbmRlZiBQUkVfU1JQXzFfNF81Ci0gICAgICAgIC8q IERvbnQnIGRvIHRoaXMgeWV0LiAgU1JQIHdoZW4gaXQgdXNlcyB0aGUgRU5DUllQVF9VU0lOR19U RUxPUFQgICAqLwotICAgICAgICAvKiBmbGFnIGl0IG11c3QgcGVyZm9ybSBhIGNoZWNrc3VtIG9m IHRoZSBhdXRoLXR5cGUtcGFpciBidXQgdGhlcmUgKi8KLSAgICAgICAgLyogaXMgbm8gbWVjaGFu c2ltIHRvIGRvIHRoYXQgeWV0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0j aWZkZWYgQ0tfU1NMCi0gICAgICAgIGlmICggY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICYmCi0g ICAgICAgICAgICAgKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcpICYmCi0gICAg ICAgICAgICAgc3NsX2ZpbmlzaGVkX21lc3NhZ2VzICYmCi0gICAgICAgICAgICAgICAgICh0bl9h dXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwKLSAgICAgICAgICAgICAgICAgICB0bl9hdXRo X2hvdyA9PSBUTl9BVVRIX0hPV19PTkVfV0FZKSAgJiYKLSAgICAgICAgICAgICAgICAgKHRuX2F1 dGhfZW5jID09IFROX0FVVEhfRU5DX0FOWSB8fAotICAgICAgICAgICAgICAgICAgIHRuX2F1dGhf ZW5jID09IFROX0FVVEhfRU5DX1RFTE9QVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cl9y ZXF1ZXN0W2krK10gPSBBVVRIVFlQRV9TUlA7Ci0gICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSA9 IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhfSE9XX09ORV9XQVk7Ci0gICAgICAgICAgICBz dHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTOwotCi0gICAgICAgICAgICBp ZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkKLSAgICAgICAgICAgICAgICBja3N0cm5j YXQodG5fbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNSUCBDTElFTlRfVE9fU0VS VkVSfE9ORV9XQVl8RU5DUllQVF9TVEFSVF9UTFMgIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIFROX01TR19MRU4pOwotICAgICAgICAgICAgaSsrOwotICAgICAgICB9Ci0jaWZkZWYgQ0tf RU5DUllQVElPTgotICAgICAgICBlbHNlIHsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0j ZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgaWYg KFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19SRiAmJgotICAgICAg ICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19SRiAm JgotICAgICAgICAgICAgICAgICAodG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfQU5ZIHx8Ci0g ICAgICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfT05FX1dBWSkgICYm Ci0gICAgICAgICAgICAgICAgICh0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19BTlkgfHwKLSAg ICAgICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19URUxPUFQpCi0gICAg ICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2krK10gPSBBVVRI VFlQRV9TUlA7Ci0gICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9U T19TRVJWRVIgfCBBVVRIX0hPV19PTkVfV0FZOwotICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0 W2ldIHw9IEFVVEhfRU5DUllQVF9VU0lOR19URUxPUFQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAo IGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJu Y2F0KHRuX21zZywKLSAgICAgICAgICAgICAgICAgICAgIlNSUCBDTElFTlRfVE9fU0VSVkVSfE9O RV9XQVl8RU5DUllQVF9VU0lOR19URUxPUFQgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBUTl9NU0dfTEVOKTsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0j aWZkZWYgQ0tfU1NMCi0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRpZiAvKiBD S19FTkNSWVBUSU9OICovCi0jZW5kaWYgLyogUFJFX1NSUF8xXzRfNSAqLwotICAgICAgICBpZiAo VEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pICE9IFROX05HX01VICYmCi0gICAgICAg ICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgIT0gVE5fTkdfTVUgJiYKLSAg ICAgICAgICAgICAodG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfQU5ZIHx8Ci0gICAgICAgICAg ICAgICB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19NVVRVQUwpICAmJgotICAgICAgICAgICAg ICh0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19BTlkgfHwKLSAgICAgICAgICAgICAgIHRuX2F1 dGhfZW5jID09IFROX0FVVEhfRU5DX05PTkUpCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAg JiYgIShja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgJiYKLSAgICAgICAgICAgICAgICAgICAodGxz X2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZykgJiYKLSAgICAgICAgICAgICAgICAgICB0 bHNfaXNfYW5vbigwKSkKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICApCi0gICAg ICAgIHsKLSAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2krK10gPSBBVVRIVFlQRV9TUlA7Ci0gICAg ICAgICAgICBzdHJfcmVxdWVzdFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhfSE9X X09ORV9XQVk7Ci0gICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfT0ZG OwotCi0gICAgICAgICAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkKLSAgICAg ICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJTUlAgQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZ ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBUTl9NU0dfTEVOKTsKLSAgICAgICAgICAg IGkrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybihpKTsKLX0KLSNlbmRpZiAvKiBD S19TUlAgKi8KLQotI2lmZGVmIENLX1NTTAotc3RhdGljIGludAotY2tfdG5fYXV0aF9yZXF1ZXN0 X3NzbChpbnQgaSkKLXsKLSAgICBpZiAoY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpCi0gICAgICAg ICAmJiAhdGxzX2FjdGl2ZV9mbGFnICYmICFzc2xfYWN0aXZlX2ZsYWcgJiYgc3NsX2luaXRpYWxp emVkCi0gICAgICAgICApIHsKLSAgICAgICAgaWYgKFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNS WVBUSU9OKSAhPSBUTl9OR19NVSAmJgotICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BU X0VOQ1JZUFRJT04pICE9IFROX05HX01VICYmCi0gICAgICAgICAgICAgKHRuX2F1dGhfaG93ID09 IFROX0FVVEhfSE9XX0FOWSB8fAotICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5fQVVU SF9IT1dfT05FX1dBWSkgICYmCi0gICAgICAgICAgICAgKHRuX2F1dGhfZW5jID09IFROX0FVVEhf RU5DX0FOWSB8fAotICAgICAgICAgICAgICAgdG5fYXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfTk9O RSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVf U1NMOwotICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIg fCBBVVRIX0hPV19PTkVfV0FZOwotICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gfD0gQVVUSF9F TkNSWVBUX09GRjsKLSAgICAgICAgICAgIGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMg KQotICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIlNTTCBDTElFTlRfVE9fU0VSVkVS fE9ORV9XQVkgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFROX01TR19MRU4pOwotICAg ICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuKGkpOwotfQotI2Vu ZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIE5UTE0KLXN0YXRpYyBpbnQKLWNrX3RuX2F1dGhfcmVx dWVzdF9udGxtKGludCBpKQotewotICAgIC8qIE1pY3Jvc29mdCdzIFRlbG5ldCBjbGllbnQgd29u J3QgcGVyZm9ybSBhdXRoZW50aWNhdGlvbiBpZiAqLwotICAgIC8qIE5UTE0gaXMgbm90IGZpcnN0 LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGlmICggY2tf bnRsbV9pc192YWxpZCgxKSApIHsKLSAgICAgICAgaWYgKFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9F TkNSWVBUSU9OKSAhPSBUTl9OR19NVSAmJgotICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVM T1BUX0VOQ1JZUFRJT04pICE9IFROX05HX01VICYmCi0gICAgICAgICAgICAgKHRuX2F1dGhfaG93 ID09IFROX0FVVEhfSE9XX0FOWSB8fAotICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5f QVVUSF9IT1dfT05FX1dBWSkgICYmCi0gICAgICAgICAgICAgKHRuX2F1dGhfZW5jID09IFROX0FV VEhfRU5DX0FOWSB8fAotICAgICAgICAgICAgICAgdG5fYXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNf Tk9ORSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJfcmVxdWVzdFtpKytdID0gQVVUSFRZ UEVfTlRMTTsKLSAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldID0gQVVUSF9DTElFTlRfVE9fU0VS VkVSIHwgQVVUSF9IT1dfT05FX1dBWTsKLSAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IEFV VEhfRU5DUllQVF9PRkY7Ci0gICAgICAgICAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVi c2VzICkKLSAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJOVExNIENMSUVOVF9UT19T RVJWRVJ8T05FX1dBWSAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7 Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4oaSk7Ci19 Ci0jZW5kaWYgLyogTlRMTSAqLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrX3RuX2F1dGhfcmVx dWVzdCh2b2lkKQotI2Vsc2UKLWNrX3RuX2F1dGhfcmVxdWVzdCgpCi0jZW5kaWYKLXsKLSAgICBp bnQgaSA9IDQsIHJjID0gLTE7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRF TE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigw KTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICBpZiAoIGRlYmxvZyB8fCB0bl9k ZWIgfHwgZGVic2VzICkKLSAgICAgICAgc3RyY3B5KHRuX21zZywiVEVMTkVUIFNFTlQgU0IgQVVU SEVOVElDQVRJT04gU0VORCAiKTsKLQotICAgIC8qIENyZWF0ZSBhIGxpc3Qgb2YgYWNjZXB0YWJs ZSBBdXRoZW50aWNhdGlvbiB0eXBlcyB0byBzZW5kIHRvICovCi0gICAgLyogdGhlIGNsaWVudCBh bmQgbGV0IGl0IGNob29zZSBmaW5kIG9uZSB0aGF0IHdlIHN1cHBvcnQgICAgICAgKi8KLQotICAg IC8qIEZvciB0aG9zZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHRoYXQgc3VwcG9ydCBFbmNyeXB0 aW9uIG9yICovCi0gICAgLyogQ3JlZGVudGlhbHMgRm9yd2FyZGluZyB3ZSBtdXN0IHNlbmQgYWxs IG9mIHRoZSBhcHByb3ByaWF0ZSAgKi8KLSAgICAvKiBjb21iaW5hdGlvbnMgYmFzZWQgdXBvbiB0 aGUgc3RhdGUgb2YgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIFRFTE9QVF94X01P REUoVEVMT1BUX0VOQ1JZUFRJT04pIGFuZCBmb3J3YXJkX2ZsYWcuICAgICAgICAgICovCi0KLSAg ICBpZiAoIGF1dGhfdHlwZV91c2VyWzBdID09IEFVVEhUWVBFX0FVVE8gKSB7Ci0jaWZkZWYgR1NT QVBJX0s1Ci0gICAgICAgIGkgPSBja190bl9hdXRoX3JlcXVlc3RfZ3Nza3JiNShpKTsKLSNlbmRp ZiAvKiBHU1NBUElfSzUgKi8KLSNpZmRlZiBLUkI1Ci0gICAgICAgIGkgPSBja190bl9hdXRoX3Jl cXVlc3Rfa3JiNShpKTsKLSNlbmRpZiAvKiBLUkI1ICovCi0jaWZkZWYgS1JCNAotICAgICAgICBp ID0gY2tfdG5fYXV0aF9yZXF1ZXN0X2tyYjQoaSk7Ci0jZW5kaWYgLyogS1JCNCAqLwotI2lmZGVm IENLX1NSUAotICAgICAgICBpID0gY2tfdG5fYXV0aF9yZXF1ZXN0X3NycChpKTsKLSNlbmRpZiAv KiBTUlAgKi8KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgaSA9IGNrX3RuX2F1dGhfcmVxdWVzdF9z c2woaSk7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgTlRMTQotICAgICAgICBpID0gY2tf dG5fYXV0aF9yZXF1ZXN0X250bG0oaSk7Ci0jZW5kaWYgLyogTlRMTSAqLwotICAgIH0gZWxzZSB7 Ci0gICAgICAgIGludCBqOwotICAgICAgICBmb3IgKCBqPTA7Ci0gICAgICAgICAgICAgIGo8QVVU SFRZUExTVFNaICYmIGF1dGhfdHlwZV91c2VyW2pdICE9IEFVVEhUWVBFX05VTEw7Ci0gICAgICAg ICAgICAgIGorKykgewotI2lmZGVmIE5UTE0KLSAgICAgICAgICAgIGlmIChhdXRoX3R5cGVfdXNl cltqXSA9PSBBVVRIVFlQRV9OVExNKQotICAgICAgICAgICAgICAgIGkgPSBja190bl9hdXRoX3Jl cXVlc3RfbnRsbShpKTsKLSNlbmRpZiAvKiBOVExNICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAg ICAgICBpZiAoIGF1dGhfdHlwZV91c2VyW2pdID09IEFVVEhUWVBFX1NTTCApCi0gICAgICAgICAg ICAgICAgaSA9IGNrX3RuX2F1dGhfcmVxdWVzdF9zc2woaSk7Ci0jZW5kaWYgLyogQ0tfU1NMICov Ci0jaWZkZWYgQ0tfU1JQCi0gICAgICAgICAgICBpZiAoIGF1dGhfdHlwZV91c2VyW2pdID09IEFV VEhUWVBFX1NSUCApCi0gICAgICAgICAgICAgICAgaSA9IGNrX3RuX2F1dGhfcmVxdWVzdF9zcnAo aSk7Ci0jZW5kaWYgLyogU1JQICovCi0jaWZkZWYgR1NTQVBJX0s1Ci0gICAgICAgICAgICBpZiAo IGF1dGhfdHlwZV91c2VyW2pdID09IEFVVEhUWVBFX0dTU0FQSV9LUkI1ICkKLSAgICAgICAgICAg ICAgICBpID0gY2tfdG5fYXV0aF9yZXF1ZXN0X2dzc2tyYjUoaSk7Ci0jZW5kaWYgLyogR1NTQVBJ X0s1ICovCi0jaWZkZWYgS1JCNQotICAgICAgICAgICAgaWYgKCBhdXRoX3R5cGVfdXNlcltqXSA9 PSBBVVRIVFlQRV9LRVJCRVJPU19WNSApCi0gICAgICAgICAgICAgICAgaSA9IGNrX3RuX2F1dGhf cmVxdWVzdF9rcmI1KGkpOwotI2VuZGlmIC8qIEtSQjUgKi8KLSNpZmRlZiBLUkI0Ci0gICAgICAg ICAgICBpZiAoIGF1dGhfdHlwZV91c2VyW2pdID09IEFVVEhUWVBFX0tFUkJFUk9TX1Y0ICkKLSAg ICAgICAgICAgICAgICBpID0gY2tfdG5fYXV0aF9yZXF1ZXN0X2tyYjQoaSk7Ci0jZW5kaWYgLyog S1JCNCAqLwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RyX3JlcXVlc3RbaSsrXSA9IElBQzsK LSAgICBzdHJfcmVxdWVzdFtpKytdID0gU0U7Ci0gICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8 IGRlYnNlcyApIHsKLSAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVO KTsKLSAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7Ci0gICAgICAgIGlmICh0bl9kZWIg fHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOwotICAgIH0KLQotICAgIC8qIFNlbmQgZGF0YSAq LwotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJ VCApOwotI2VuZGlmCi0gICAgcmMgPSB0dG9sKChDSEFSICopc3RyX3JlcXVlc3QsIGkpOwotI2lm ZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgaWYgKCByYyA9 PSBpICkKLSAgICAgICAgcmV0dXJuKDApOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuKC0xKTsK LX0KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLVZPSUQKLWNrX3RuX2VuY19zdGFydCgpCi17Ci0g ICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pICYmICFURUxPUFRfVShURUxPUFRf RU5DUllQVElPTikpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIVRFTE9QVF9TQihURUxPUFRf RU5DUllQVElPTikuZW5jcnlwdC5zdG9wICYmCi0gICAgICAgICAoIWVuY3J5cHRfaXNfZGVjcnlw dGluZygpIHx8ICFlbmNyeXB0X2lzX2VuY3J5cHRpbmcoKSkpIHsKLSAgICAgICAgZGVidWcoRjEx MCwiY2tfdG5fZW5jX3N0YXJ0Iiwibm90aGluZyB0byBkbyIsMCk7Ci0gICAgICAgIHJldHVybjsK LSAgICB9Ci0gICAgVEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNyeXB0LnN0b3AgPSAw OwotICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pICYmICFlbmNyeXB0X2lzX2Vu Y3J5cHRpbmcoKSkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl9lbmNfc3RhcnQiLCJlbmNy eXB0X3JlcXVlc3Rfc3RhcnQiLDApOwotICAgICAgICBlbmNyeXB0X3JlcXVlc3Rfc3RhcnQoKTsK LSAgICB9Ci0gICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSAmJiAhZW5jcnlwdF9p c19kZWNyeXB0aW5nKCkpIHsKLSAgICAgICAgZGVidWcoRjExMCwiY2tfdG5fZW5jX3N0YXJ0Iiwi ZW5jcnlwdF9zZW5kX3JlcXVlc3Rfc3RhcnQiLDApOwotICAgICAgICBlbmNyeXB0X3NlbmRfcmVx dWVzdF9zdGFydCgpOwotICAgIH0KLSAgICB0bl93YWl0KCJlbmNyeXB0IHN0YXJ0Iik7Ci0gICAg dG5fcHVzaCgpOwotfQotCi1WT0lECi1ja190bl9lbmNfc3RvcCgpCi17Ci0gICAgaWYgKCFURUxP UFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pICYmICFURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikp Ci0gICAgICAgIHJldHVybjsKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5l bmNyeXB0LnN0b3AgfHwKLSAgICAgICAgICEoZW5jcnlwdF9pc19kZWNyeXB0aW5nKCkgfHwgZW5j cnlwdF9pc19lbmNyeXB0aW5nKCkpKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX2VuY19z dG9wIiwibm90aGluZyB0byBkbyIsMCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIFRFTE9Q VF9TQihURUxPUFRfRU5DUllQVElPTikuZW5jcnlwdC5zdG9wID0gMTsKLSAgICBpZiAoVEVMT1BU X1UoVEVMT1BUX0VOQ1JZUFRJT04pICYmIGVuY3J5cHRfaXNfZGVjcnlwdGluZygpKSB7Ci0gICAg ICAgIGRlYnVnKEYxMTAsImNrX3RuX2VuY19zdG9wIiwiZW5jcnlwdF9zZW5kX3JlcXVlc3RfZW5k IiwwKTsKLSAgICAgICAgZW5jcnlwdF9zZW5kX3JlcXVlc3RfZW5kKCk7Ci0gICAgfQotICAgIGlm IChURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pICYmIGVuY3J5cHRfaXNfZW5jcnlwdGluZygp KSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX2VuY19zdG9wIiwiZW5jcnlwdF9zZW5kX2Vu ZCIsMCk7Ci0gICAgICAgIGVuY3J5cHRfc2VuZF9lbmQoKTsKLSAgICB9Ci0gICAgdG5fd2FpdCgi ZW5jcnlwdCBzdG9wIik7Ci0gICAgdG5fcHVzaCgpOwotfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJ T04gKi8KLQotLyogIEMgSyBfIEsgUiBCIF8gVCBOIF8gUyBCIF8gQSBVIFQgSAotICogIEFuIGlu dGVyZmFjZSBiZXR3ZWVuIHRoZSBDLUtlcm1pdCBUZWxuZXQgQ29tbWFuZCBQYXJzZXIgYW5kIHRo ZSBBdXRoZW50LQotICogIGljYXRpb24gb3B0aW9uIHBhcnNlciBpbXBsZW1lbnRlZCBpbiB0aGUg S2VyYmVyb3MgVGVsbmV0IGNsaWVudC4KLSAqCi0gKiAgc2IgICAtIHRoZSBzdWJuZWdvdGlhdGlv biBhcyBjYWxjdWxhdGVkIGluIGNrY25ldC5jCi0gKiAgbGVuICAtIHRoZSBsZW5ndGggb2YgdGhl IGJ1ZmZlcgotICoKLSAqICBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MgYW5kIC0xIG9uIGZhaWx1cmUK LSAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tfdG5fc2JfYXV0aChjaGFyICogc2IsIGlu dCBsZW4pCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotY2tfdG5fc2JfYXV0aChzYixsZW4pIGNoYXIg KiBzYjsgaW50IGxlbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIC8qIGF1dGhfcGFy c2UoKSBhc3N1bWVzIHRoYXQgc2Igc3RhcnRzIGF0IHBvcyAxIG5vdCAwIGFzIGluIGNrY25ldC5j ICovCi0gICAgLyogYW5kIGl0IHdhbnRzIHRoZSBsZW5ndGggdG8gZXhjbHVkZSB0aGUgSUFDIFNF IGJ5dGVzICAgICAgICAgICAgICAgKi8KLSAgICBDSEFSICogYnVmOwotICAgIGludCByYyA9IC0x OwotCi0gICAgYnVmID0gbWFsbG9jKGxlbi0xKTsKLSAgICBpZiAoICFidWYgKSByZXR1cm4oLTEp OwotCi0gICAgYnVmWzBdID0gU0I7Ci0gICAgbWVtY3B5KCAmYnVmWzFdLCBzYiwgbGVuLTIgKTsK LSAgICByYyA9IGF1dGhfcGFyc2UoYnVmLGxlbi0xKTsKLSAgICBmcmVlKGJ1Zik7Ci0gICAgZGVi dWcoRjExMSwiY2tfdG5fc2JfYXV0aCIsInJjIixyYyk7Ci0gICAgaWYgKHJjID09IEFVVEhfRkFJ TFVSRSkgewotICAgICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfTlVMTDsK LSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgICAgICBpcGFkbDI1KCk7Ci0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgICAgICByZXR1cm4oLTEpOwotICAg IH0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGlwYWRsMjUoKTsKLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgcmV0dXJuKDApOwotfQotCi0vKiAg QyBLIF8gSyBSIEIgXyBUIE4gXyBTIEIgXyBFIE4gQyBSIFkgUCBUCi0gKiAgQW4gaW50ZXJmYWNl IGJldHdlZW4gdGhlIEMtS2VybWl0IFRlbG5ldCBDb21tYW5kIFBhcnNlciBhbmQgdGhlIEVuY3J5 cHRpb24KLSAqICBvcHRpb24gcGFyc2VyIGltcGxlbWVudGVkIGluIHRoZSBLZXJiZXJvcyBUZWxu ZXQgY2xpZW50LgotICoKLSAqICBzYiAgIC0gdGhlIHN1Ym5lZ290aWF0aW9uIGFzIGNhbGN1bGF0 ZWQgaW4gY2tjbmV0LmMKLSAqICBsZW4gIC0gdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyCi0gKgot ICogIFJldHVybnM6IEFsd2F5cyByZXR1cm5zIDAgZm9yIHN1Y2Nlc3Mgc2luY2UgZW5jcnlwdF9w YXJzZSBpcyB2b2lkCi0gKi8KLQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tfdG5fc2JfZW5j cnlwdChjaGFyICogc2IsIGludCBsZW4pCi0jZWxzZQotY2tfdG5fc2JfZW5jcnlwdChzYixsZW4p IGNoYXIgKiBzYjsgaW50IGxlbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIC8qIGVu Y3J5cHRfcGFyc2UoKSBhc3N1bWVzIHRoYXQgc2Igc3RhcnRzIGF0IHBvcyAxIG5vdCAwIGFzIGlu IGNrY25ldC5jICovCi0gICAgLyogYW5kIGl0IHdhbnRzIHRoZSBsZW5ndGggdG8gZXhjbHVkZSB0 aGUgSUFDIFNFIGJ5dGVzICAgICAgICAgICAgICAgICAgKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9O Ci0gICAgY2hhciAqIGJ1ZjsKLSAgICBpbnQgcmMgPSAtMTsKLQotICAgIGJ1ZiA9IG1hbGxvYyhs ZW4tMSk7Ci0gICAgaWYgKCAhYnVmICkgcmV0dXJuKC0xKTsKLQotICAgIGJ1ZlswXSA9IFNCOwot ICAgIG1lbWNweSggJmJ1ZlsxXSwgc2IsIGxlbi0yICk7Ci0gICAgcmMgPSBlbmNyeXB0X3BhcnNl KChDSEFSICopYnVmLGxlbi0xKTsKLQotICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAgZnJlZShi dWYpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIC8qIFRoaXMgaXMgYSBoYWNr LiAgSXQgZG9lcyBub3QgYmVsb25nIGhlcmUgYnV0IHNob3VsZCByZWFsbHkgYmUgaW4gKi8KLSAg ICAvKiBlbmNyeXB0X3BhcnNlKCkgYnV0IGluIEs5NSB0aGUgZW5jcnlwdF9wYXJzZSgpIHJvdXRp bmUgZG9lcyBub3QgICovCi0gICAgLyogaGF2ZSBhY2Nlc3MgdG8gdGhlIHRlbG9wdF9zdGF0ZXMg YXJyYXkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGlmICggYnVmWzFdID09IEVO Q1JZUFRfUkVRRU5EICkKLSAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNy eXB0LnN0b3AgPSAxOwotICAgIGVsc2UgaWYgKCBidWZbMV0gPT0gRU5DUllQVF9SRVFTVEFSVCAp Ci0gICAgICAgIFRFTE9QVF9TQihURUxPUFRfRU5DUllQVElPTikuZW5jcnlwdC5zdG9wID0gMDsK LSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGlwYWRsMjUoKTsKLSNlbmRpZiAvKiBP UzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgZnJlZShidWYpOwotI2VuZGlmIC8qIEVO Q1JZUFRJT04gKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLQotLyogIEMgSyBfIEsgUiBCIF8gRSBO IEMgUiBZIFAgVCBJIE4gRwotICogIFJldHVybnMgMSBpZiB3ZSBhcmUgZW5jcnlwdGluZyBhbmQg MCBpZiB3ZSBhcmUgbm90Ci0gKi8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrX3RuX2VuY3J5 cHRpbmcoVk9JRCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi1ja190bl9lbmNyeXB0aW5nKCkKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotewotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICBpZiAoIGdf a3N0cmVhbSA9PSBOVUxMICkKLSAgICAgICAgcmV0dXJuKDApOwotICAgIGlmICggZ19rc3RyZWFt LT5lbmNyeXB0ICYmIGVuY3J5cHRfaXNfZW5jcnlwdGluZygpKSB7Ci0gICAgICAgIGRlYnVnKEYx MTEsImNrX3RuX2VuY3J5cHRpbmciLCJlbmNyeXB0aW5nIiwKLSAgICAgICAgICAgICAgIGdfa3N0 cmVhbS0+ZW5jcnlwdF90eXBlKTsKLSAgICAgICAgcmV0dXJuKGdfa3N0cmVhbS0+ZW5jcnlwdF90 eXBlKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgIGRlYnVnKEYxMTAs ImNrX3RuX2VuY3J5cHRpbmciLCJub3QgZW5jcnlwdGluZyIsMCk7Ci0gICAgcmV0dXJuKDApOwot fQotCi0vKiAgQyBLIF8gSyBSIEIgXyBEIEUgQyBSIFkgUCBUIEkgTiBHCi0gKiAgUmV0dXJucyAx IGlmIHdlIGFyZSBkZWNyeXB0aW5nIGFuZCAwIGlmIHdlIGFyZSBub3QKLSAqLwotCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotY2tfdG5fZGVjcnlwdGluZyhWT0lEKQotI2Vsc2UKLWNrX3RuX2RlY3J5 cHRpbmcoKQotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgot ICAgIGlmICggZ19rc3RyZWFtID09IE5VTEwgKQotICAgICAgICByZXR1cm4oMCk7Ci0gICAgaWYg KCBnX2tzdHJlYW0tPmRlY3J5cHQgJiYgZW5jcnlwdF9pc19kZWNyeXB0aW5nKCkpIHsKLSAgICAg ICAgZGVidWcoRjExMSwiY2tfdG5fZGVjcnlwdGluZyIsImRlY3J5cHRpbmciLAotICAgICAgICAg ICAgICAgZ19rc3RyZWFtLT5kZWNyeXB0X3R5cGUpOwotICAgICAgICByZXR1cm4oZ19rc3RyZWFt LT5kZWNyeXB0X3R5cGUpOwotICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAg ZGVidWcoRjExMCwiY2tfdG5fZGVjcnlwdGluZyIsIm5vdCBkZWNyeXB0aW5nIiwwKTsKLSAgICBy ZXR1cm4oMCk7Ci19Ci0KLS8qICBDIEsgXyBLIFIgQiBfIEEgVSBUIEggRSBOIFQgSSBDIEEgVCBF IEQKLSAqICBSZXR1cm5zIHRoZSBhdXRoZW50aWNhdGlvbiB0eXBlOiBBVVRIVFlQRV9OVUxMLCBB VVRIVFlQRV9LRVJCRVJPUzQsCi0gKiAgb3IgQVVUSFRZUEVfS0VSQkVST1M1LCBBVVRIVFlQRV9T UlAsIC4uLiAoc2VlIGNrY3RlbC5oKQotICovCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi1ja190 bl9hdXRoZW50aWNhdGVkKFZPSUQpCi0jZWxzZQotY2tfdG5fYXV0aGVudGljYXRlZCgpCi0jZW5k aWYKLXsKLSAgICByZXR1cm4oYXV0aGVudGljYXRpb25fdmVyc2lvbik7Ci19Ci0KLS8qICBDIEsg XyBLIFIgQiBfIEUgTiBDIFIgWSBQIFQKLSAqICBlbmNyeXB0cyBuIGNoYXJhY3RlcnMgaW4gcyBp ZiB3ZSBhcmUgZW5jcnlwdGluZwotICovCi0KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotY2tfdG5f ZW5jcnlwdCggY2hhciAqIHMsIGludCBuICkKLSNlbHNlCi1ja190bl9lbmNyeXB0KCBzLG4gKSBj aGFyICogczsgaW50IG47Ci0jZW5kaWYKLXsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgc3Ry dWN0IGtzdHJlYW1fZGF0YV9ibG9jayBpOwotCi0gICAgaWYgKGdfa3N0cmVhbS0+ZW5jcnlwdCAm JiBlbmNyeXB0X2lzX2VuY3J5cHRpbmcoKSkgewotI2lmZGVmIERFQlVHCi0gICAgICBja2hleGR1 bXAoImZyb20gcGxhaW50ZXh0Iiwgcywgbik7Ci0jZW5kaWYKLSAgICAgICAgaS5wdHIgPSBzOwot ICAgICAgICBpLmxlbmd0aCA9IG47Ci0gICAgICAgIGdfa3N0cmVhbS0+ZW5jcnlwdCgmaSwgTlVM TCk7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgY2toZXhkdW1wKCJ0byBjeXBoZXJ0ZXh0Iiwgcywg bik7Ci0jZW5kaWYKLSAgICB9Ci0gICAgZWxzZSBkZWJ1ZyhGMTAxLCJja190bl9lbmNyeXB0IG5v dCBlbmNyeXB0aW5nIiwiIixuKTsKLSNlbmRpZiAvKiBFTkNSWVBUSU9OICovCi19Ci0KLS8qICBD IEsgXyBLIFIgQiBfIEQgRSBDIFIgWSBQIFQKLSAqICBkZWNyeXB0cyBuIGNoYXJhY3RlcnMgaW4g cyBpZiB3ZSBhcmUgZGVjcnlwdGluZwotICovCi0KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotY2tf dG5fZGVjcnlwdCggY2hhciAqIHMsIGludCBuICkKLSNlbHNlCi1ja190bl9kZWNyeXB0KCBzLG4g KSBjaGFyICogczsgaW50IG47Ci0jZW5kaWYKLXsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAg c3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayBpOwotCi0gICAgaWYgKGdfa3N0cmVhbS0+ZGVjcnlw dCAmJiBlbmNyeXB0X2lzX2RlY3J5cHRpbmcoKSkgewotCi0jaWZkZWYgREVCVUcKLSAgICAgICAg Y2toZXhkdW1wKCJmcm9tIGN5cGhlcnRleHQiLCBzLCBuKTsKLSNlbmRpZgotCi0gICAgICAgIGku cHRyID0gczsKLSAgICAgICAgaS5sZW5ndGggPSBuOwotICAgICAgICBnX2tzdHJlYW0tPmRlY3J5 cHQoJmksIE5VTEwpOwotI2lmZGVmIERFQlVHCi0gICAgICAgIGNraGV4ZHVtcCgidG8gcGxhaW50 ZXh0Iiwgcywgbik7Ci0jZW5kaWYKLSAgICB9Ci0gICAgZWxzZSBkZWJ1ZyhGMTAxLCJja190bl9k ZWNyeXB0IG5vdCBkZWNyeXB0aW5nIiwiIixuKTsKLSNlbmRpZiAvKiBFTkNSWVBUSU9OICovCi19 Ci0KLS8qICBTIEUgTiBEIEsgNSBBIFUgVCBIIFMgQgotICogIFNlbmQgYSBLZXJiZXJvcyA1IEF1 dGhlbnRpY2F0aW9uIFN1Ym5lZ290aWF0aW9uIHRvIGhvc3QgYW5kCi0gKiAgb3V0cHV0IGFwcHJv cHJpYXRlIFRlbG5ldCBEZWJ1ZyBtZXNzYWdlcwotICoKLSAqICB0eXBlIC0gU3ViIE5lZ290aWF0 aW9uIHR5cGUKLSAqICBkYXRhIC0gcHRyIHRvIGJ1ZmZlciBjb250YWluaW5nIGRhdGEKLSAqICBs ZW4gIC0gbGVuIG9mIGJ1ZmZlciBpZiBub3QgTlVMIHRlcm1pbmF0ZWQKLSAqCi0gKiAgcmV0dXJu cyBudW1iZXIgb2YgY2hhcmFjdGVycyBzZW50IG9yIGVycm9yIHZhbHVlCi0gKi8KLQotc3RhdGlj IGludAotI2lmZGVmIENLX0FOU0lDCi1TZW5kSzVBdXRoU0IoaW50IHR5cGUsIHZvaWQgKmRhdGEs IGludCBsZW4pCi0jZWxzZQotU2VuZEs1QXV0aFNCKHR5cGUsZGF0YSxsZW4pIGludCB0eXBlOyB2 b2lkICpkYXRhOyBpbnQgbGVuOwotI2VuZGlmCi17Ci0gICAgaW50IHJjOwotICAgIHVuc2lnbmVk IGNoYXIgKnAgPSBzdHJfZGF0YSArIDM7Ci0gICAgdW5zaWduZWQgY2hhciAqY2QgPSAodW5zaWdu ZWQgY2hhciAqKWRhdGE7Ci0gICAgZXh0ZXJuIGludCBzc3RlbG5ldDsKLQotI2lmZGVmIENLX1NT TAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxv d3MpIHsKLSAgICAgICAgaWYgKHR0Y2hrKCkgPCAwKQotICAgICAgICAgIHJldHVybigwKTsKLSAg ICAgICAgZWxzZQotICAgICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NM ICovCi0KLSAgICBpZiAoIHR5cGUgPCAwIHx8IHR5cGUgPiA3ICkgICAgICAgICAvKiBDaGVjayBm b3IgaW52YWxpZCB2YWx1ZXMgKi8KLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKCFjZCkg ewotICAgICAgICBjZCA9ICh1bnNpZ25lZCBjaGFyICopIiI7Ci0gICAgICAgIGxlbiA9IDA7Ci0g ICAgfQotCi0gICAgaWYgKGxlbiA9PSAtMSkgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2Ug c3RybGVuKCkgZm9yIGxlbiAqLwotICAgICAgICBsZW4gPSBzdHJsZW4oKGNoYXIgKiljZCk7Ci0K LSAgICAvKiBDb25zdHJ1Y3QgTWVzc2FnZSAqLwotICAgICpwKysgPSBzc3RlbG5ldCA/IFRFTFFV QUxfUkVQTFkgOiBURUxRVUFMX0lTOwotICAgICpwKysgPSBBVVRIVFlQRV9LRVJCRVJPU19WNTsK LSAgICAqcCA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUjsKLSAgICAqcCB8PSBhdXRoX2hvdzsKLSNp ZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgKnAgfD0gYXV0aF9jcnlwdDsKLSNlbmRpZgotI2lmZGVm IFVTRV9JTklfQ1JFRF9GV0QKLSAgICBpZiAoYXV0aF9md2QpCi0gICAgICAgICpwIHw9IElOSV9D UkVEX0ZXRF9PTjsKLSNlbmRpZiAvKiBVU0VfSU5JX0NSRURfRldEICovCi0gICAgcCsrOwotICAg ICpwKysgPSB0eXBlOwotICAgIHdoaWxlIChsZW4tLSA+IDApIHsKLSAgICAgICAgaWYgKCgqcCsr ID0gKmNkKyspID09IElBQykKLSAgICAgICAgICAgICpwKysgPSBJQUM7Ci0gICAgfQotICAgICpw KysgPSBJQUM7Ci0gICAgKnArKyA9IFNFOwotCi0gICAgLyogSGFuZGxlIFRlbG5ldCBEZWJ1Z2dp bmcgTWVzc2FnZXMgKi8KLSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAg ICAgICAgaW50IGk7Ci0gICAgICAgIGludCBkZWJsZW49cC1zdHJfZGF0YS0yOwotICAgICAgICBj aGFyICpzPU5VTEw7Ci0gICAgICAgIGludCBtb2RlID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwg KGF1dGhfaG93ICYgQVVUSF9IT1dfTUFTSykgfAotICAgICAgICAgICAgYXV0aF9jcnlwdAotI2lm ZGVmIFVTRV9JTklfQ1JFRF9GV0QKLSAgICAgICAgICAgICAgfCAoYXV0aF9md2Q/SU5JX0NSRURf RldEX09OOklOSV9DUkVEX0ZXRF9PRkYpCi0jZW5kaWYgLyogVVNFX0lOSV9DUkVEX0ZXRCAqLwot ICAgICAgICAgICAgICAgICAgICA7Ci0KLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAg IGNhc2UgMDoKLSAgICAgICAgICAgIHMgPSAiQVVUSCI7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgY2FzZSAxOgotICAgICAgICAgICAgcyA9ICJSRUpFQ1QiOwotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHMgPSAiQUNDRVBUIjsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBzID0gIlJFU1BPTlNFIjsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBzID0gIkZP UldBUkQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAg IHMgPSAiRk9SV0FSRF9BQ0NFUFQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug NjoKLSAgICAgICAgICAgIHMgPSAiRk9SV0FSRF9SRUpFQ1QiOwotICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIHMgPSAiVExTX1ZFUklGWSI7Ci0gICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBja21ha3htc2codG5fbXNnLFRO X01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIiwKLSAgICAgICAg ICAgICAgICAgVEVMT1BUKFRFTE9QVF9BVVRIRU5USUNBVElPTiksIiAiLAotICAgICAgICAgICAg ICAgICBzdHJfZGF0YVszXSA9PSBURUxRVUFMX0lTID8gIklTIiA6Ci0gICAgICAgICAgICAgICAg IHN0cl9kYXRhWzNdID09IFRFTFFVQUxfUkVQTFkgPyAiUkVQTFkiIDogIj8/PyIsIiAiLAotICAg ICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24pLCIgIiwK LSAgICAgICAgICAgICAgICAgQVVUSE1PREVfTkFNRShtb2RlKSwiICIsCi0gICAgICAgICAgICAg ICAgIHMsIiAiLE5VTEwpOwotICAgICAgICB0bl9oZXgoKENIQVIgKil0bl9tc2csVE5fTVNHX0xF Tiwmc3RyX2RhdGFbN10sZGVibGVuLTcpOwotICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMg U0UiLFROX01TR19MRU4pOwotICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKLSAgICAg ICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgfQotCi0gICAg LyogU2VuZCBkYXRhICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1f SU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSAgICByYyA9IHR0b2woKENIQVIgKilzdHJfZGF0 YSwgcCAtIHN0cl9kYXRhKTsKLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsK LSNlbmRpZgotICAgIGRlYnVnKEYxMTEsIlNlbmRLNUF1dGhTQiIsInR0b2woKSIscmMpOwotICAg IHJldHVybihyYyk7Ci19Ci0KLS8qICBTIEUgTiBEIEsgNCBBIFUgVCBIIFMgQgotICogIFNlbmQg YSBLZXJiZXJvcyA0IEF1dGhlbnRpY2F0aW9uIFN1Ym5lZ290aWF0aW9uIHRvIGhvc3QgYW5kCi0g KiAgb3V0cHV0IGFwcHJvcHJpYXRlIFRlbG5ldCBEZWJ1ZyBtZXNzYWdlcwotICoKLSAqICB0eXBl IC0gU3ViIE5lZ290aWF0aW9uIHR5cGUKLSAqICBkYXRhIC0gcHRyIHRvIGJ1ZmZlciBjb250YWlu aW5nIGRhdGEKLSAqICBsZW4gIC0gbGVuIG9mIGJ1ZmZlciBpZiBub3QgTlVMIHRlcm1pbmF0ZWQK LSAqCi0gKiAgcmV0dXJucyBudW1iZXIgb2YgY2hhcmFjdGVycyBzZW50IG9yIGVycm9yIHZhbHVl Ci0gKi8KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1TZW5kSzRBdXRoU0IoaW50IHR5 cGUsIHZvaWQgKmRhdGEsIGludCBsZW4pCi0jZWxzZQotU2VuZEs0QXV0aFNCKHR5cGUsZGF0YSxs ZW4pIGludCB0eXBlOyB2b2lkICpkYXRhOyBpbnQgbGVuOwotI2VuZGlmCi17Ci0gICAgaW50IHJj OwotICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBzdHJfZGF0YSArIDM7Ci0gICAgdW5zaWduZWQgY2hh ciAqY2QgPSAodW5zaWduZWQgY2hhciAqKWRhdGE7Ci0gICAgZXh0ZXJuIGludCBzc3RlbG5ldDsK LSAgICBpbnQgbW9kZSA9IChhdXRoX2hvdyAmIEFVVEhfSE9XX01BU0spIHwKLSAgICAgICAgYXV0 aF9jcnlwdDsKLQotICAgIGlmICggdHlwZSA8IDAgfHwgdHlwZSA+IDQgKSAgICAgICAgIC8qIENo ZWNrIGZvciBpbnZhbGlkIHZhbHVlcyAqLwotICAgICAgICByZXR1cm4oMCk7Ci0KLSNpZmRlZiBD S19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9m b2xsb3dzKSB7Ci0gICAgICAgIGlmICh0dGNoaygpIDwgMCkKLSAgICAgICAgICByZXR1cm4oMCk7 Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotI2VuZGlmIC8qIENL X1NTTCAqLwotCi0gICAgaWYgKCFjZCkgewotICAgICAgICBjZCA9ICh1bnNpZ25lZCBjaGFyICop IiI7Ci0gICAgICAgIGxlbiA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGxlbiA9PSAtMSkgICAgICAg ICAgICAgICAgICAgICAgICAvKiBVc2Ugc3RybGVuKCkgZm9yIGxlbiAqLwotICAgICAgICBsZW4g PSBzdHJsZW4oKGNoYXIgKiljZCk7Ci0KLQotICAgIC8qIENvbnN0cnVjdCBNZXNzYWdlICovCi0g ICAgKnArKyA9IHNzdGVsbmV0ID8gVEVMUVVBTF9SRVBMWSA6IFRFTFFVQUxfSVM7Ci0gICAgKnAr KyA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y0OwotICAgICpwID0gQVVUSF9DTElFTlRfVE9fU0VSVkVS OwotICAgICpwIHw9IG1vZGU7Ci0gICAgcCsrOwotICAgICpwKysgPSB0eXBlOwotICAgIHdoaWxl IChsZW4tLSA+IDApIHsKLSAgICAgICAgaWYgKCgqcCsrID0gKmNkKyspID09IElBQykKLSAgICAg ICAgICAgICpwKysgPSBJQUM7Ci0gICAgICAgIH0KLSAgICAqcCsrID0gSUFDOwotICAgICpwKysg PSBTRTsKLQotICAgIC8qIEhhbmRsZSBUZWxuZXQgRGVidWdnaW5nIE1lc3NhZ2VzICovCi0gICAg aWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGludCBpOwotICAgICAg ICBpbnQgZGVibGVuPXAtc3RyX2RhdGEtMjsKLSAgICAgICAgY2hhciAqcz1OVUxMOwotCi0gICAg ICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBzID0gIkFV VEgiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHMg PSAiUkVKRUNUIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAg ICAgICBzID0gIkFDQ0VQVCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgot ICAgICAgICAgICAgcyA9ICJDSEFMTEVOR0UiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg IGNhc2UgNDoKLSAgICAgICAgICAgIHMgPSAiUkVTUE9OU0UiOwotICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIH0KLQotICAgICAgICBja21ha3htc2codG5fbXNnLFROX01TR19MRU4sIlRFTE5F VCBTRU5UIFNCICIsCi0gICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfQVVUSEVOVElDQVRJ T04pLCIgIiwKLSAgICAgICAgICAgICAgICAgc3RyX2RhdGFbM10gPT0gVEVMUVVBTF9JUyA/ICJJ UyIgOgotICAgICAgICAgICAgICAgICAoc3RyX2RhdGFbM10gPT0gVEVMUVVBTF9SRVBMWSA/ICJS RVBMWSIgOiAiPz8/IiksIiAiLAotICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGF1dGhl bnRpY2F0aW9uX3ZlcnNpb24pLCIgIiwKLSAgICAgICAgICAgICAgICAgQVVUSE1PREVfTkFNRSht b2RlKSwiICIsCi0gICAgICAgICAgICAgICAgIHMsIiAiLE5VTEwpOwotICAgICAgICB0bl9oZXgo KENIQVIgKil0bl9tc2csVE5fTVNHX0xFTiwmc3RyX2RhdGFbN10sZGVibGVuLTcpOwotICAgICAg ICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOwotICAgICAgICBkZWJ1ZyhG MTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVn KHRuX21zZyk7Ci0gICAgfQotCi0gICAgLyogU2VuZCBkYXRhICovCi0jaWZkZWYgT1MyCi0gICAg UmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSAgICBy YyA9IHR0b2woKENIQVIgKilzdHJfZGF0YSwgcCAtIHN0cl9kYXRhKTsKLSNpZmRlZiBPUzIKLSAg ICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGRlYnVnKEYxMTEsIlNlbmRLNEF1 dGhTQiIsInR0b2woKSIscmMpOwotICAgIHJldHVybihyYyk7Ci19Ci0KLS8qICBTIEUgTiBEIFMg UiBQIEEgVSBUIEggUyBCCi0gKiAgU2VuZCBhIFNSUCBBdXRoZW50aWNhdGlvbiBTdWJuZWdvdGlh dGlvbiB0byBob3N0IGFuZAotICogIG91dHB1dCBhcHByb3ByaWF0ZSBUZWxuZXQgRGVidWcgbWVz c2FnZXMKLSAqCi0gKiAgdHlwZSAtIFN1YiBOZWdvdGlhdGlvbiB0eXBlCi0gKiAgZGF0YSAtIHB0 ciB0byBidWZmZXIgY29udGFpbmluZyBkYXRhCi0gKiAgbGVuICAtIGxlbiBvZiBidWZmZXIgaWYg bm90IE5VTCB0ZXJtaW5hdGVkCi0gKgotICogIHJldHVybnMgbnVtYmVyIG9mIGNoYXJhY3RlcnMg c2VudCBvciBlcnJvciB2YWx1ZQotICovCi0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwot U2VuZFNSUEF1dGhTQihpbnQgdHlwZSwgdm9pZCAqZGF0YSwgaW50IGxlbikKLSNlbHNlCi1TZW5k U1JQQXV0aFNCKHR5cGUsZGF0YSxsZW4pIGludCB0eXBlOyB2b2lkICpkYXRhOyBpbnQgbGVuOwot I2VuZGlmCi17Ci0gICAgaW50IHJjOwotICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBzdHJfZGF0YSAr IDM7Ci0gICAgdW5zaWduZWQgY2hhciAqY2QgPSAodW5zaWduZWQgY2hhciAqKWRhdGE7Ci0gICAg ZXh0ZXJuIGludCBzc3RlbG5ldDsKLQotICAgIC8qIENoZWNrIGZvciBpbnZhbGlkIHZhbHVlcyAq LwotICAgIGlmICggdHlwZSAhPSBTUlBfRVhQICYmIHR5cGUgIT0gU1JQX1JFU1BPTlNFICYmCi0g ICAgICAgICB0eXBlICE9IFNSUF9SRUpFQ1QgJiYgdHlwZSAhPSBTUlBfQUNDRVBUICYmCi0gICAg ICAgICB0eXBlICE9IFNSUF9DSEFMTEVOR0UgJiYgdHlwZSAhPSBTUlBfUEFSQU1TICYmCi0gICAg ICAgICB0eXBlICE9IFNSUF9BVVRIKQotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAobGVu ID09IC0xKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBzdHJsZW4oKSBmb3IgbGVuICov Ci0gICAgICAgIGxlbiA9IHN0cmxlbigoY2hhciAqKWNkKTsKLQotICAgIC8qIENvbnN0cnVjdCBN ZXNzYWdlICovCi0gICAgKnArKyA9IHNzdGVsbmV0ID8gVEVMUVVBTF9SRVBMWSA6IFRFTFFVQUxf SVM7Ci0gICAgKnArKyA9IEFVVEhUWVBFX1NSUDsKLSAgICAqcCA9IEFVVEhfQ0xJRU5UX1RPX1NF UlZFUjsKLSAgICAqcCB8PSBhdXRoX2hvdzsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgKnAg fD0gYXV0aF9jcnlwdDsKLSNlbmRpZgotICAgIHArKzsKLSAgICAqcCsrID0gdHlwZTsKLSAgICB3 aGlsZSAobGVuLS0gPiAwKSB7Ci0gICAgICAgIGlmICgoKnArKyA9ICpjZCsrKSA9PSBJQUMpCi0g ICAgICAgICAgICAqcCsrID0gSUFDOwotICAgICAgICB9Ci0gICAgKnArKyA9IElBQzsKLSAgICAq cCsrID0gU0U7Ci0KLSAgICAvKiBIYW5kbGUgVGVsbmV0IERlYnVnZ2luZyBNZXNzYWdlcyAqLwot ICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBpbnQgaTsKLSAg ICAgICAgaW50IGRlYmxlbj1wLXN0cl9kYXRhLTI7Ci0gICAgICAgIGNoYXIgKnM9TlVMTDsKLSAg ICAgICAgaW50IG1vZGUgPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgfCAoYXV0aF9ob3cgJiBBVVRI X0hPV19NQVNLKSB8Ci0gICAgICAgICAgICBhdXRoX2NyeXB0OwotCi0gICAgICAgIHN3aXRjaCAo dHlwZSkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBzID0gIkFVVEgiOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHMgPSAiUkVKRUNUIjsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBzID0gIkFD Q0VQVCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAg cyA9ICJDSEFMTEVOR0UiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDoKLSAg ICAgICAgICAgIHMgPSAiUkVTUE9OU0UiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh c2UgNToKLSAgICAgICAgICAgIHMgPSAiRk9SV0FSRCI7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgY2FzZSA2OgotICAgICAgICAgICAgcyA9ICJGT1JXQVJEX0FDQ0VQVCI7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgcyA9ICJGT1JXQVJEX1JF SkVDVCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA4OgotICAgICAgICAgICAg cyA9ICJFWFAiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgOToKLSAgICAgICAg ICAgIHMgPSAiUEFSQU1TIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg ICAgY2ttYWt4bXNnKHRuX21zZyxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRFTE5F VCBTRU5UIFNCICIsCi0gICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfQVVUSEVOVElDQVRJ T04pLCIgIiwKLSAgICAgICAgICAgICAgICAgc3RyX2RhdGFbM10gPT0gVEVMUVVBTF9SRVBMWSA/ ICJSRVBMWSIgOgotICAgICAgICAgICAgICAgICBzdHJfZGF0YVszXSA9PSBURUxRVUFMX0lTID8g IklTIiA6ICI/Pz8iLCIgIiwKLSAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShhdXRoZW50 aWNhdGlvbl92ZXJzaW9uKSwiICIsCi0gICAgICAgICAgICAgICAgIEFVVEhNT0RFX05BTUUobW9k ZSksIiAiLAotICAgICAgICAgICAgICAgICBzLCIgIixOVUxMKTsKLSAgICAgICAgdG5faGV4KChD SEFSICopdG5fbXNnLFROX01TR19MRU4sJnN0cl9kYXRhWzddLGRlYmxlbi03KTsKLSAgICAgICAg Y2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVOKTsKLSAgICAgICAgZGVidWcoRjEw MCx0bl9tc2csIiIsMCk7Ci0gICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0 bl9tc2cpOwotICAgIH0KLQotICAgIC8qIFNlbmQgZGF0YSAqLwotI2lmZGVmIE9TMgotICAgIFJl cXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0gICAgcmMg PSB0dG9sKChDSEFSICopc3RyX2RhdGEsIHAgLSBzdHJfZGF0YSk7Ci0jaWZkZWYgT1MyCi0gICAg UmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICByZXR1cm4ocmMpOwotfQotCi0jaWZk ZWYgQ0tfRU5DUllQVElPTgotLyoKLSAqIEZ1bmN0aW9uOiBFbmFibGUgb3IgZGlzYWJsZSB0aGUg ZW5jcnlwdGlvbiBwcm9jZXNzLgotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGVuYWJsZSAt IFRSVUUgdG8gZW5hYmxlLCBGQUxTRSB0byBkaXNhYmxlLgotICovCi1zdGF0aWMgVk9JRAotI2lm ZGVmIENLX0FOU0lDCi1hdXRoX2VuY3J5cHRfZW5hYmxlKEJPT0wgZW5hYmxlKQotI2Vsc2UKLWF1 dGhfZW5jcnlwdF9lbmFibGUoZW5hYmxlKSBCT09MIGVuYWJsZTsKLSNlbmRpZgotewotICBlbmNy eXB0X2ZsYWcgPSBlbmFibGU7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIEZ1bmN0aW9uOiBBYm9ydCB0 aGUgYXV0aGVudGljYXRpb24gcHJvY2VzcwotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKi8KLXN0YXRp YyBWT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWF1dGhfYWJvcnQoY2hhciAqZXJybXNnLCBsb25nIHIp Ci0jZWxzZQotYXV0aF9hYm9ydChlcnJtc2cscikgY2hhciAqZXJybXNnOyBsb25nIHI7Ci0jZW5k aWYKLXsKLSAgICBjaGFyIGJ1Zls5XTsKLSAgICBleHRlcm4gaW50IHNzdGVsbmV0OwotCi0jaWZk ZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMu bWVfZm9sbG93cykgewotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAq LwotICAgIGRlYnVnKEYxMTEsImF1dGhfYWJvcnQiLGVycm1zZyxyKTsKLQotICAgIC8qIENvbnN0 cnVjdCBUZWxuZXQgRGVidWdnaW5nIG1lc3NhZ2VzICovCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9k ZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGNrbWFreG1zZyh0bl9tc2csVE5fTVNHX0xFTiwKLSAg ICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQVVUSEVOVElD QVRJT04pLAotICAgICAgICAgICAgICAgICAgIiBJUyAiLEFVVEhUWVBFX05BTUUoQVVUSFRZUEVf TlVMTCksIiAiLAotICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoQVVUSFRZUEVfTlVM TCksIiBJQUMgU0UiLAotICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TAotICAgICAgICAgICAgICAgICApOwotICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsK LSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgfQot Ci0gICAgLyogQ29uc3RydWN0IHRoZSBBYm9ydCBtZXNzYWdlIHRvIHNlbmQgdG8gdGhlIGhvc3Qg ICAqLwotICAgIC8qIEJhc2ljbHkgd2UgY2hhbmdlIHRoZSBhdXRoZW50aWNhdGlvbiB0eXBlIHRv IE5VTEwgKi8KLSAgICBzcHJpbnRmKGJ1ZiwgIiVjJWMlYyVjJWMlYyVjJWMiLCBJQUMsIFNCLCBU RUxPUFRfQVVUSEVOVElDQVRJT04sCi0gICAgICAgICAgICAgc3N0ZWxuZXQgPyBURUxRVUFMX1JF UExZIDogVEVMUVVBTF9JUywgQVVUSFRZUEVfTlVMTCwKLSAgICAgICAgICAgICBBVVRIVFlQRV9O VUxMLCBJQUMsIFNFKTsgICAvKiBzYWZlICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5l dE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSAgICB0dG9sKChDSEFSICop YnVmLCA4KTsKLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgot Ci0gICAgLyogSWYgdGhlcmUgaXMgYW4gZXJyb3IgbWVzc2FnZSwgYW5kIGVycm9yIG51bWJlciBj b25zdHJ1Y3QgKi8KLSAgICAvKiBhbiBleHBsYW5hdGlvbiB0byBkaXNwbGF5IHRvIHRoZSB1c2Vy ICAgICAgICAgICAgICAgICAgICAqLwotICAgIGlmIChlcnJtc2cgIT0gTlVMTCkgewotICAgICAg ICBja3N0cm5jcHkoc3RyVG1wLCBlcnJtc2csIEFVVEhUTVBCTCk7Ci0gICAgfSBlbHNlCi0gICAg ICAgIHN0clRtcFswXSA9ICdcMCc7Ci0KLQotICAgIGlmIChyICE9IEFVVEhfU1VDQ0VTUykgewot ICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCAiXHJcbiIsQVVUSFRNUEJMKTsKLSNpZmRlZiBLUkI0 Ci0gICAgICAgIGlmICggYXV0aGVudGljYXRpb25fdmVyc2lvbiA9PSBBVVRIVFlQRV9LRVJCRVJP U19WNCApIHsKLSAgICAgICAgICAgIGNrc3RybmNhdChzdHJUbXAsIChjaGFyICopa3JiX2dldF9l cnJfdGV4dF9lbnRyeShyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRNUEJMKTsKLSAg ICAgICAgICAgIGRlYnVnKEYxMTEsImF1dGhfYWJvcnQiLChjaGFyICopa3JiX2dldF9lcnJfdGV4 dF9lbnRyeShyKSxyKTsKLSAgICAgICAgfQotI2VuZGlmCi0jaWZkZWYgS1JCNQotICAgICAgICBp ZiAoIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPT0gQVVUSFRZUEVfS0VSQkVST1NfVjUgKSB7Ci0g ICAgICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCBlcnJvcl9tZXNzYWdlKHIpLEFVVEhUTVBCTCk7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJhdXRoX2Fib3J0IixlcnJvcl9tZXNzYWdlKHIpLHIp OwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0gICAgcHJpbnRmKCJBdXRoZW50aWNhdGlvbiBm YWlsZWQ6ICVzXHJcbiIsc3RyVG1wKTsKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNs b2cgPj0gU1lTTEdfTEkgJiYgY2t4bG9nZ2luZykgewotICAgICAgICBja3N5c2xvZyhTWVNMR19M SSwgMCwgIlRlbG5ldCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlIiwKLSAgICAgICAgICAgICAgICAg IChjaGFyICopIHN6VXNlck5hbWVSZXF1ZXN0ZWQsCi0gICAgICAgICAgICAgICAgICBzdHJUbXAp OwotICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNp b24gPSBBVVRIVFlQRV9OVUxMOwotfQotCi0KLS8qCi0gKiBGdW5jdGlvbjogQ29weSBkYXRhIHRv IGJ1ZmZlciwgZG91YmxpbmcgSUFDIGNoYXJhY3RlciBpZiBwcmVzZW50LgotICoKLSAqLwotaW50 Ci0jaWZkZWYgQ0tfQU5TSUMKLWNvcHlfZm9yX25ldCh1bnNpZ25lZCBjaGFyICp0bywgdW5zaWdu ZWQgY2hhciAqZnJvbSwgaW50IGMpCi0jZWxzZQotY29weV9mb3JfbmV0KHRvLGZyb20sYykgdW5z aWduZWQgY2hhciAqdG87IHVuc2lnbmVkIGNoYXIgKmZyb207IGludCBjOwotI2VuZGlmCi17Ci0g ICAgaW50IG47Ci0KLSAgICBuID0gYzsKLSAgICBkZWJ1ZyhGMTExLCJjb3B5X2Zvcl9uZXQiLCJi ZWZvcmUiLG4pOwotICAgIHdoaWxlIChjLS0gPiAwKSB7Ci0gICAgICAgIGlmICgoKnRvKysgPSAq ZnJvbSsrKSA9PSBJQUMpIHsKLSAgICAgICAgICAgIG4rKzsKLSAgICAgICAgICAgICp0bysrID0g SUFDOwotICAgICAgICB9Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsImNvcHlfZm9yX25ldCIsImFm dGVyIixuKTsKLSAgICByZXR1cm4gbjsKLX0KLQotI2lmZGVmIENLX1NTTAotLyogIFMgRSBOIEQg UyBTIEwgQSBVIFQgSCBTIEIKLSAqICBTZW5kIGEgU1NMIEF1dGhlbnRpY2F0aW9uIFN1Ym5lZ290 aWF0aW9uIHRvIGhvc3QgYW5kCi0gKiAgb3V0cHV0IGFwcHJvcHJpYXRlIFRlbG5ldCBEZWJ1ZyBt ZXNzYWdlcwotICoKLSAqICB0eXBlIC0gU3ViIE5lZ290aWF0aW9uIHR5cGUKLSAqICBkYXRhIC0g cHRyIHRvIGJ1ZmZlciBjb250YWluaW5nIGRhdGEKLSAqICBsZW4gIC0gbGVuIG9mIGJ1ZmZlciBp ZiBub3QgTlVMIHRlcm1pbmF0ZWQKLSAqCi0gKiAgcmV0dXJucyBudW1iZXIgb2YgY2hhcmFjdGVy cyBzZW50IG9yIGVycm9yIHZhbHVlCi0gKi8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLVNlbmRT U0xBdXRoU0IoaW50IHR5cGUsIHZvaWQgKmRhdGEsIGludCBsZW4pCi0jZWxzZQotU2VuZFNTTEF1 dGhTQih0eXBlLGRhdGEsbGVuKSBpbnQgdHlwZTsgdm9pZCAqZGF0YTsgaW50IGxlbjsKLSNlbmRp ZgotewotICAgIGludCByYzsKLSAgICB1bnNpZ25lZCBjaGFyICpwID0gc3RyX2RhdGEgKyAzOwot ICAgIHVuc2lnbmVkIGNoYXIgKmNkID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOwotICAgIGV4dGVy biBpbnQgc3N0ZWxuZXQ7Ci0KLSAgICAvKiBDaGVjayBmb3IgaW52YWxpZCB2YWx1ZXMgKi8KLSAg ICBpZiAoIHR5cGUgIT0gU1NMX1NUQVJUICYmIHR5cGUgIT0gU1NMX0FDQ0VQVCAmJgotICAgICAg ICAgdHlwZSAhPSBTU0xfUkVKRUNUKQotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoVEVM T1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0gICAgICAg IGlmICh0dGNoaygpIDwgMCkKLSAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIGVsc2UKLSAg ICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotCi0gICAgaWYgKGxlbiA9PSAtMSkgICAgICAgICAg ICAgICAgICAgICAgICAvKiBVc2Ugc3RybGVuKCkgZm9yIGxlbiAqLwotICAgICAgICBsZW4gPSBz dHJsZW4oKGNoYXIgKiljZCk7Ci0KLSAgICAvKiBDb25zdHJ1Y3QgTWVzc2FnZSAqLwotICAgICpw KysgPSBzc3RlbG5ldCA/IFRFTFFVQUxfUkVQTFkgOiBURUxRVUFMX0lTOwotICAgICpwKysgPSBB VVRIVFlQRV9TU0w7Ci0gICAgKnAgPSBBVVRIX0NMSUVOVF9UT19TRVJWRVI7Ci0gICAgKnAgfD0g YXV0aF9ob3c7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICpwIHw9IGF1dGhfY3J5cHQ7Ci0j ZW5kaWYKLSAgICBwKys7Ci0gICAgKnArKyA9IHR5cGU7Ci0gICAgd2hpbGUgKGxlbi0tID4gMCkg ewotICAgICAgICBpZiAoKCpwKysgPSAqY2QrKykgPT0gSUFDKQotICAgICAgICAgICAgKnArKyA9 IElBQzsKLSAgICAgICAgfQotICAgICpwKysgPSBJQUM7Ci0gICAgKnArKyA9IFNFOwotCi0gICAg LyogSGFuZGxlIFRlbG5ldCBEZWJ1Z2dpbmcgTWVzc2FnZXMgKi8KLSAgICBpZiAoZGVibG9nIHx8 IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIGludCBkZWJsZW49 cC1zdHJfZGF0YS0yOwotICAgICAgICBjaGFyICpzPU5VTEw7Ci0gICAgICAgIGludCBtb2RlID0g QVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgKGF1dGhfaG93ICYgQVVUSF9IT1dfTUFTSykgfAotICAg ICAgICAgICAgKGF1dGhfY3J5cHQ/QVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9QVDpBVVRIX0VOQ1JZ UFRfT0ZGKTsKLQotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBTU0xfU1RB UlQ6Ci0gICAgICAgICAgICBzID0gIlNUQVJUIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICBjYXNlIFNTTF9BQ0NFUFQ6Ci0gICAgICAgICAgICBzID0gIkFDQ0VQVCI7Ci0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgY2FzZSBTU0xfUkVKRUNUOgotICAgICAgICAgICAgcyA9ICJSRUpF Q1QiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBja21ha3htc2co dG5fbXNnLFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIiwK LSAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9BVVRIRU5USUNBVElPTiksIiAiLAotICAg ICAgICAgICAgICAgICBzdHJfZGF0YVszXSA9PSBURUxRVUFMX1JFUExZID8gIlJFUExZIiA6Ci0g ICAgICAgICAgICAgICAgIHN0cl9kYXRhWzNdID09IFRFTFFVQUxfSVMgPyAiSVMiIDogIj8/PyIs IiAiLAotICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGF1dGhlbnRpY2F0aW9uX3ZlcnNp b24pLCIgIiwKLSAgICAgICAgICAgICAgICAgQVVUSE1PREVfTkFNRShtb2RlKSwiICIsCi0gICAg ICAgICAgICAgICAgIHMsIiAiLE5VTEwpOwotICAgICAgICB0bl9oZXgoKENIQVIgKil0bl9tc2cs VE5fTVNHX0xFTiwmc3RyX2RhdGFbN10sZGVibGVuLTcpOwotICAgICAgICBja3N0cm5jYXQodG5f bXNnLCJJQUMgU0UiLFROX01TR19MRU4pOwotICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiww KTsKLSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7Ci0gICAg fQotCi0gICAgLyogU2VuZCBkYXRhICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5ldE11 dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSAgICByYyA9IHR0b2woKENIQVIg KilzdHJfZGF0YSwgcCAtIHN0cl9kYXRhKTsKLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0 TXV0ZXgoKTsKLSNlbmRpZgotICAgIHJldHVybihyYyk7Ci19Ci0jZW5kaWYgIC8qIENLX1NTTCAq LwotCi1pbnQKLXRuX2hvd19vayhpbnQgaG93KQotewotICAgIHN3aXRjaCAoIHRuX2F1dGhfaG93 ICkgewotICAgIGNhc2UgVE5fQVVUSF9IT1dfQU5ZOgotICAgICAgICByZXR1cm4oMSk7Ci0gICAg Y2FzZSBUTl9BVVRIX0hPV19PTkVfV0FZOgotICAgICAgICByZXR1cm4oKGhvdyAmIEFVVEhfSE9X X01BU0spID09IEFVVEhfSE9XX09ORV9XQVkpOwotICAgIGNhc2UgVE5fQVVUSF9IT1dfTVVUVUFM OgotICAgICAgICByZXR1cm4oKGhvdyAmIEFVVEhfSE9XX01BU0spID09IEFVVEhfSE9XX01VVFVB TCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLX0KLQotaW50Ci10 bl9lbmNfb2soaW50IGVuYykKLXsKLSAgICBzd2l0Y2ggKCB0bl9hdXRoX2VuYyApIHsKLSAgICBj YXNlIFROX0FVVEhfRU5DX0FOWToKLSAgICAgICAgaWYgKChlbmMgJiBBVVRIX0VOQ1JZUFRfTUFT SykgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUyAmJgotICAgICAgICAgICAgKCFja19zc2xlYXlf aXNfaW5zdGFsbGVkKCkKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICB8fCAhc3NsX2Zpbmlz aGVkX21lc3NhZ2VzIHx8Ci0gICAgICAgICAgICAgISh0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2Fj dGl2ZV9mbGFnKQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICkpIHsKLSNpZmRl ZiBDS19TU0wKLSAgICAgICAgICAgIGlmICghc3NsX2ZpbmlzaGVkX21lc3NhZ2VzKQotICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDAsInRuX2VuY19vayAhc3NsX2ZpbmlzaGVkX21lc3NhZ2VzIiwi IiwwKTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAg ICAgfQotICAgICAgICByZXR1cm4oMSk7Ci0gICAgY2FzZSBUTl9BVVRIX0VOQ19OT05FOgotICAg ICAgICByZXR1cm4oKGVuYyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfT0ZG KTsKLSAgICBjYXNlIFROX0FVVEhfRU5DX1RFTE9QVDoKLSAgICAgICAgcmV0dXJuKChlbmMgJiBB VVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9QVCk7Ci0gICAgY2Fz ZSBUTl9BVVRIX0VOQ19FWENIOgotICAgICAgICByZXR1cm4oKGVuYyAmIEFVVEhfRU5DUllQVF9N QVNLKSA9PSBBVVRIX0VOQ1JZUFRfQUZURVJfRVhDSEFOR0UpOwotICAgIGNhc2UgVE5fQVVUSF9F TkNfVExTOgotICAgICAgICByZXR1cm4oKChlbmMgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVU SF9FTkNSWVBUX1NUQVJUX1RMUykgJiYKLSAgICAgICAgICAgICAgIGNrX3NzbGVheV9pc19pbnN0 YWxsZWQoKQotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgICAgJiYgc3NsX2ZpbmlzaGVkX21l c3NhZ2VzICYmCi0gICAgICAgICAgICAgICAodGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVf ZmxhZykKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgKTsKLSAgICBkZWZhdWx0Ogot ICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50Ci1hdG9rKGludCBhdCkg ewotICAgIGludCBpOwotICAgIGlmICggYXV0aF90eXBlX3VzZXJbMF0gPT0gQVVUSFRZUEVfQVVU TyApCi0gICAgICAgIHJldHVybigxKTsKLSAgICBpZiAoIGF1dGhfdHlwZV91c2VyWzBdID09IEFV VEhUWVBFX05VTEwgKQotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICBmb3IgKCBpPTA7Ci0gICAg ICAgICAgaTxBVVRIVFlQTFNUU1ogJiYgYXV0aF90eXBlX3VzZXJbaV0gIT0gQVVUSFRZUEVfTlVM TDsKLSAgICAgICAgICBpKysgKSB7Ci0gICAgICAgIGlmICggYXV0aF90eXBlX3VzZXJbaV0gPT0g YXQgKQotICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLQotICAgIHJldHVybigwKTsKLX0K LQotCi0vKgotICogRnVuY3Rpb246IFBhcnNlIGF1dGhlbnRpY2F0aW9uIHNlbmQgY29tbWFuZAot ICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgcGFyc2VkYXQgLSB0aGUgc3ViLWNvbW1hbmQgZGF0YS4K LSAqCi0gKiAgICAgIGVuZF9zdWIgLSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIGluIHRoZSAncGFy c2VkYXQnIGFycmF5IHdoaWNoCi0gKiAgICAgICAgICAgICAgaXMgdGhlIGxhc3QgYnl0ZSBpbiBh IHN1Yi1uZWdvdGlhdGlvbgotICoKLSAqIFJldHVybnM6IEtlcmJlcm9zIGVycm9yIGNvZGUuCi0g Ki8KLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgc2VuZF9saXN0WzUxMl07Ci1zdGF0aWMgaW50ICBz ZW5kX2xlbiA9IDA7Ci0KLV9QUk9UT1RZUChzdGF0aWMgaW50IGF1dGhfc2VuZCwgKHVuc2lnbmVk IGNoYXIgKnBhcnNlZGF0LCBpbnQgZW5kX3N1YikpOwotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tf QU5TSUMKLWF1dGhfcmVzZW5kKGludCB0eXBlKQotI2Vsc2UKLWF1dGhfcmVzZW5kKHR5cGUpIGlu dCB0eXBlOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaW50IGk9MjsKLSAgICB3aGls ZSAoaSsxIDw9IHNlbmRfbGVuKSB7Ci0gICAgICAgIGlmIChzZW5kX2xpc3RbaV0gPT0gdHlwZSkg ewotICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICBzZW5kX2xlbiAtPSAyOwotICAgICAg ICAgICAgZm9yIChqID0gaTsgaiA8IHNlbmRfbGVuOyBqKyspCi0gICAgICAgICAgICAgICAgc2Vu ZF9saXN0W2pdID0gc2VuZF9saXN0W2orMl07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICBpICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKGF1dGhfc2VuZChzZW5kX2xp c3Qsc2VuZF9sZW4pKTsKLX0KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1hdXRoX3Nl bmQodW5zaWduZWQgY2hhciAqcGFyc2VkYXQsIGludCBlbmRfc3ViKQotI2Vsc2UKLWF1dGhfc2Vu ZChwYXJzZWRhdCxlbmRfc3ViKSB1bnNpZ25lZCBjaGFyICpwYXJzZWRhdDsgaW50IGVuZF9zdWI7 Ci0jZW5kaWYKLXsKLSAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBidWZbNDA5Nl07Ci0gICAgdW5z aWduZWQgY2hhciAqcG5hbWU7Ci0gICAgaW50IHBsZW47Ci0gICAgaW50IHI7Ci0gICAgaW50IGk7 Ci0gICAgaW50IG1vZGU7Ci0jaWZkZWYgTUlUX0NVUlJFTlQKLSNpZmRlZiBDS19FTkNSWVBUSU9O Ci0gICAga3JiNV9kYXRhIGRhdGE7Ci0gICAga3JiNV9lbmNfZGF0YSBlbmNkYXRhOwotICAgIGty YjVfZXJyb3JfY29kZSBjb2RlOwotICAgIGtyYjVfa2V5YmxvY2sgcmFuZG9tX2tleTsKLSNlbmRp ZiAvKiBFTkNSWVBUSU9OICovCi0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLSNpZmRlZiBLUkI1 Ci0gICAgaW50IGtyYjVfbXNnID0gMDsKLSNlbmRpZiAvKiBLUkI1ICovCi0jaWZkZWYgS1JCNAot ICAgIGludCBrcmI0X21zZyA9IDA7Ci0jZW5kaWYgLyogS1JCNCAqLwotI2lmZGVmIEdTU0FQSV9L UkI1Ci0gICAgaW50IGdzc2s1X21zZyA9IDA7Ci0jZW5kaWYgLyogR1NTQVBJX0tSQjUgKi8KLSAg ICBpbnQgaWFjY250PTA7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9Q VF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKQotICAgICAgICByZXR1cm4oQVVUSF9T VUNDRVNTKTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIGF1dGhfaG93ID0gLTE7ICAgICAg ICAgICAgICAvKiBXZSBoYXZlIG5vdCBmb3VuZCBhbiBhdXRoIG1ldGhvZCAgKi8KLSAgICBhdXRo X2NyeXB0ID0gMDsgICAgICAgICAgICAgLyogV2UgYXJlIG5vdCB1c2luZyBlbmNyeXB0aW9uICh5 ZXQpICovCi0gICAgc2VuZF9sZW4gPSBlbmRfc3ViID4gNTEyID8gNTEyIDogZW5kX3N1YjsKLSAg ICBtZW1jcHkoc2VuZF9saXN0LHBhcnNlZGF0LHNlbmRfbGVuKTsKLQotICAgIC8qIFNlYXJjaCB0 aGUgbGlzdCBvZiBhY2NlcHRhYmxlIEF1dGhlbnRpY2F0aW9uIHR5cGVzIHNlbnQgZnJvbSAqLwot ICAgIC8qIHRoZSBob3N0IGFuZCBmaW5kIG9uZSB0aGF0IHdlIHN1cHBvcnQgICAgICAgICAgICAg ICAgICAgICAgICAqLwotCi0gICAgLyogRm9yIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9ucywgdHJ5 IHRvIGRldGVybWluZSBpZiB3ZSBoYXZlIGEgICovCi0gICAgLyogdmFsaWQgVEdULCBpZiBub3Qg c2tpcCBvdmVyIHRoZSBhdXRoZW50aWNhdGlvbiB0eXBlIGJlY2F1c2UgICovCi0gICAgLyogd2Ug d291bGRuJ3QgYmUgYWJsZSB0byBzdWNjZXNzZnVsbHkgbG9naW4gYW55d2F5LiAgUGVyaGFwcyAg ICovCi0gICAgLyogdGhlcmUgaXMgYW5vdGhlciBzdXBwb3J0ZWQgYXV0aGVudGljYXRpb24gd2hp Y2ggd2UgY291bGQgdXNlICovCi0KLSNpZmRlZiBOT19GVFBfQVVUSAotICAgIC8qIElmIHRoZSB1 c2VyaWQgaXMgImZ0cCIgb3IgImFub255bW91cyIgcmVmdXNlIHRvIHBlcmZvcm0gQVVUSCAqLwot ICAgIC8qIGZvciBLZXJiZXJvcyBvciBTUlAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLwotI2VuZGlmIC8qIE5PX0ZUUF9BVVRIICovCi0KLSAgICBpZiAoIGF1dGhf dHlwZV91c2VyWzBdID09IEFVVEhUWVBFX0FVVE8gKSB7Ci0gICAgZm9yIChpID0gMjsgaSsxIDw9 IGVuZF9zdWI7IGkgKz0gMikgewotI2lmZGVmIE5UTE0KLSAgICAgICAgaWYgKHBhcnNlZGF0W2ld ID09IEFVVEhUWVBFX05UTE0gJiYKLSAgICAgICAgICAgICBja19udGxtX2lzX3ZhbGlkKDEpICYm Ci0gICAgICAgICAgICAgbnRsbV9hdXRoX3NlbmQoKSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAo KHBhcnNlZGF0W2krMV0gJiBBVVRIX1dIT19NQVNLKSA9PSBBVVRIX0NMSUVOVF9UT19TRVJWRVIg JiYKLSAgICAgICAgICAgICAgICAgdG5faG93X29rKHBhcnNlZGF0W2krMV0pICYmIHRuX2VuY19v ayhwYXJzZWRhdFtpKzFdKSkgewotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAg ICAvKiBOVExNIGRvZXMgbm90IHN1cHBvcnQgVGVsbmV0IEVuY3J5cHRpb24gKi8KLSAgICAgICAg ICAgICAgICBpZiAoKHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSykpCi0gICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGF1dGhfY3J5cHQgPSBwYXJz ZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0s7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LwotICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFRO X05HX1JGOwotICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04p ID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFV VEhUWVBFX05UTE07Ci0gICAgICAgICAgICAgICAgYXV0aF9ob3cgPSBwYXJzZWRhdFtpKzFdICYg QVVUSF9IT1dfTUFTSzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotI2VuZGlmIC8qIE5UTE0gKi8KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgaWYgKCBw YXJzZWRhdFtpXSA9PSBBVVRIVFlQRV9TU0wgJiYgc3NsX2luaXRpYWxpemVkICYmCi0jaWZkZWYg U1NMRExMCi0gICAgICAgICAgICAgY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICYmCi0jZW5kaWYg LyogU1NMRExMICovCi0gICAgICAgICAgICAgIXRsc19hY3RpdmVfZmxhZyAmJiAhc3NsX2FjdGl2 ZV9mbGFnCi0jaWZuZGVmIFVTRV9DRVJUX0NCCi0gICAgICAgICAgICAgJiYgdGxzX2xvYWRfY2Vy dHMoc3NsX2N0eCxzc2xfY29uLDApCi0jZW5kaWYgLyogVVNFX0NFUlRfQ0IgKi8KLSAgICAgICAg ICAgICApIHsKLQotICAgICAgICAgICAgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9XSE9fTUFT SykgPT0gQVVUSF9DTElFTlRfVE9fU0VSVkVSICYmCi0gICAgICAgICAgICAgICAgIHRuX2hvd19v ayhwYXJzZWRhdFtpKzFdKSAmJiB0bl9lbmNfb2socGFyc2VkYXRbaSsxXSkpIHsKLSNpZmRlZiBD S19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgLyogU1NMIGRvZXMgbm90IHN1cHBvcnQgVGVs bmV0IEVuY3J5cHRpb24gKi8KLSAgICAgICAgICAgICAgICBpZiAoKHBhcnNlZGF0W2krMV0gJiBB VVRIX0VOQ1JZUFRfTUFTSykpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg ICAgICAgICAgIGF1dGhfY3J5cHQgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0s7 Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9N T0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwotICAgICAgICAgICAgICAgIFRFTE9Q VF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAg YXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX1NTTDsKLSAgICAgICAgICAgICAgICBh dXRoX2hvdyA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0hPV19NQVNLOwotICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogU1NMICovCi0jaWZk ZWYgQ0tfU1JQCi0gICAgICAgIGlmICggcGFyc2VkYXRbaV0gPT0gQVVUSFRZUEVfU1JQCi0jaWZk ZWYgU1JQRExMCi0gICAgICAgICAgICAgJiYgaFNSUAotI2VuZGlmIC8qIFNSUERMTCAqLwotI2lm ZGVmIE5PX0ZUUF9BVVRICi0gICAgICAgICAgICAgJiYgc3RyY21wKCJmdHAiLHN6VXNlck5hbWUp ICYmIHN0cmNtcCgiYW5vbnltb3VzIixzelVzZXJOYW1lKQotI2VuZGlmIC8qIE5PX0ZUUF9BVVRI ICovCi0gICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBpZiAoKHBhcnNlZGF0W2krMV0gJiBB VVRIX1dIT19NQVNLKSA9PSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgJiYKLSAgICAgICAgICAgICAg ICAgdG5faG93X29rKHBhcnNlZGF0W2krMV0pICYmIHRuX2VuY19vayhwYXJzZWRhdFtpKzFdKSkg ewotI2lmZGVmIFBSRV9TUlBfMV80XzUKLSAgICAgICAgICAgICAgICBpZiAocGFyc2VkYXRbaSsx XSAmIEFVVEhfRU5DUllQVF9NQVNLKQotICAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90IHN1 cHBvcnQgRU5DUllQVF9VU0lOR19URUxPUFQgeWV0LiAqLwotICAgICAgICAgICAgICAgICAgICBj b250aW51ZTsKLSNlbmRpZiAvKiBQUkVfU1JQXzFfNF81ICovCi0gICAgICAgICAgICAgICAgaWYg KCgocGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PQotICAgICAgICAgICAgICAg ICAgICAgQVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9QVCkgJiYKLSAgICAgICAgICAgICAgICAgICAg KFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19SRiB8fAotICAgICAg ICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPT0gVE5fTkdf UkYpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIGF1 dGhfY3J5cHQgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0s7Ci0jaWZkZWYgQ0tf RU5DUllQVElPTgotICAgICAgICAgICAgICAgIGlmICggYXV0aF9jcnlwdCA9PSBBVVRIX0VOQ1JZ UFRfVVNJTkdfVEVMT1BUICkgewotICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShU RUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19NVTsKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BU X1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19NVTsKLSAgICAgICAgICAgICAgICB9 Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAg ICAgIGlmICggYXV0aF9jcnlwdCA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTICYmCi0gICAgICAg ICAgICAgICAgICAgICBja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgJiYKLSAgICAgICAgICAgICAg ICAgICAgICh0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnKSApIHsKLSAgICAgICAg ICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7 Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0g VE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAg ICAgICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9TUlA7Ci0gICAgICAg ICAgICAgICAgYXV0aF9ob3cgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSzsKLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIFNS UCAqLwotI2lmZGVmIEdTU0FQSV9LUkI1Ci0gICAgICAgIGlmIChwYXJzZWRhdFtpXSA9PSBBVVRI VFlQRV9HU1NBUElfS1JCNSAmJgotICAgICAgICAgICAgKHBhcnNlZGF0W2krMV0gJiBBVVRIX0VO Q1JZUFRfTUFTSykgPT0KLSAgICAgICAgICAgIEFVVEhfRU5DUllQVF9BRlRFUl9FWENIQU5HRSAm JgotI2lmZGVmIE9TMgotICAgICAgICAgICAgaEdTU0FQSSAmJgotI2VuZGlmIC8qIE9TMiAqLwot I2lmZGVmIE5PX0ZUUF9BVVRICi0gICAgICAgICAgICAgc3RyY21wKCJmdHAiLHN6VXNlck5hbWUp ICYmIHN0cmNtcCgiYW5vbnltb3VzIixzelVzZXJOYW1lKSAmJgotI2VuZGlmIC8qIE5PX0ZUUF9B VVRIICovCi0gICAgICAgICAgICAgY2tfZ3NzYXBpX2lzX2luc3RhbGxlZCgpICYmICFnc3NrNV9t c2cpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggIWdzc2s1X2F1dGhfc2VuZChwYXJzZWRh dFtpKzFdICYgQVVUSF9IT1dfTUFTSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0ssCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGFyc2VkYXRbaSsxXSAmIElOSV9DUkVEX0ZXRF9NQVNLKSApCi0gICAg ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogSWYgd2UgYXJlIGF1dG8tZ2V0dGluZyBUR1Rz LCB0cnkgKi8KLSAgICAgICAgICAgICAgICBpZiAoICFja19rcmI1X2lzX3RndF92YWxpZCgpICkg ewotICAgICAgICAgICAgICAgIHByaW50ZigiS2VyYmVyb3MgNTogVGlja2V0IEdldHRpbmcgVGlj a2V0IG5vdCB2YWxpZC5cclxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IGdzc2s1X21zZyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICgocGFy c2VkYXRbaSsxXSAmIEFVVEhfV0hPX01BU0spID09Ci0gICAgICAgICAgICAgICAgICAgICAgQVVU SF9DTElFTlRfVE9fU0VSVkVSICYmCi0gICAgICAgICAgICAgICAgICAgICAgdG5faG93X29rKHBh cnNlZGF0W2krMV0pICYmIHRuX2VuY19vayhwYXJzZWRhdFtpKzFdKSkgewotICAgICAgICAgICAg ICAgIGF1dGhfY3J5cHQgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0s7Ci0jaWZk ZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgIGlmICggYXV0aF9jcnlwdCA9PSBBVVRI X0VOQ1JZUFRfQUZURVJfRVhDSEFOR0UgKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9N RV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwotICAgICAgICAgICAgICAgICAg ICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwotICAgICAgICAg ICAgICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgICAgYXV0 aF9md2QgPSBwYXJzZWRhdFtpKzFdICYgSU5JX0NSRURfRldEX01BU0s7Ci0gICAgICAgICAgICAg ICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX0dTU0FQSV9LUkI1OwotICAgICAg ICAgICAgICAgIGF1dGhfaG93ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0s7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBH U1NBUElfS1JCNSAqLwotI2lmZGVmIEtSQjUKLSAgICAgICAgaWYgKHBhcnNlZGF0W2ldID09IEFV VEhUWVBFX0tFUkJFUk9TX1Y1ICYmCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgaEtSQjVfMzIg JiYKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBOT19GVFBfQVVUSAotICAgICAgICAgICAgIHN0 cmNtcCgiZnRwIixzelVzZXJOYW1lKSAmJiBzdHJjbXAoImFub255bW91cyIsc3pVc2VyTmFtZSkg JiYKLSNlbmRpZiAvKiBOT19GVFBfQVVUSCAqLwotICAgICAgICAgICAgIGNrX2tyYjVfaXNfaW5z dGFsbGVkKCkgJiYgIWtyYjVfbXNnKSB7Ci0KLSAgICAgICAgICAgIC8qIFdpdGhvdXQgZW5jcnlw dGlvbiB3ZSBjYW4ndCBwZXJmb3JtIG11dHVhbCBhdXRoZW50aWNhdGlvbiAqLwotICAgICAgICAg ICAgaWYgKCAocGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0spID09IEFVVEhfSE9XX01VVFVB TCAmJgotICAgICAgICAgICAgICAgICAhY2tfY3J5cHRfaXNfaW5zdGFsbGVkKCkpCi0gICAgICAg ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8qIFNraXAgb3ZlciBlbnRyaWVzIHRo YXQgcmVxdWVzdCBjcmVkZW50aWFsIGZvcndhcmRpbmcgKi8KLSAgICAgICAgICAgIC8qIGlmIHdl IGFyZSBub3QgZm9yd2FyZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAg ICAgICAgIGlmICgoIWZvcndhcmRfZmxhZyAmJiAocGFyc2VkYXRbaSsxXSAmIElOSV9DUkVEX0ZX RF9NQVNLKSkgfHwKLSAgICAgICAgICAgICAgICAoZm9yd2FyZF9mbGFnICYmCi0gICAgICAgICAg ICAgICAgICAoKHBhcnNlZGF0W2krMV0gJiBBVVRIX0hPV19NQVNLKSA9PSBBVVRIX0hPV19PTkVf V0FZKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICggIWs1 X2F1dGhfc2VuZChwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRhdFtpKzFdICYgSU5JX0NSRURfRldE X01BU0spICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBJZiB3ZSBhcmUgYXV0 by1nZXR0aW5nIFRHVHMsIHRyeSAqLwotICAgICAgICAgICAgICAgIGlmICggIWNrX2tyYjVfaXNf dGd0X3ZhbGlkKCkgKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJLZXJiZXJvcyA1OiBUaWNr ZXQgR2V0dGluZyBUaWNrZXQgbm90IHZhbGlkLlxyXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAga3JiNV9tc2cgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg ZWxzZSBpZiAoKHBhcnNlZGF0W2krMV0gJiBBVVRIX1dIT19NQVNLKSA9PQotICAgICAgICAgICAg ICAgICAgICAgIEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiAmJgotICAgICAgICAgICAgICAgICAgICAg IHRuX2hvd19vayhwYXJzZWRhdFtpKzFdKSAmJiB0bl9lbmNfb2socGFyc2VkYXRbaSsxXSkpIHsK LSAgICAgICAgICAgICAgICBpZiAoKChwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0sp ID09Ci0gICAgICAgICAgICAgICAgICAgICBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BUKSAmJgot ICAgICAgICAgICAgICAgICAgICAgKFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9 PSBUTl9OR19SRiB8fAotICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9Q VF9FTkNSWVBUSU9OKSA9PSBUTl9OR19SRikpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl OwotICAgICAgICAgICAgICAgIGlmICgoKHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFT SykgPT0KLSAgICAgICAgICAgICAgICAgICAgIEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpICYmCi0g ICAgICAgICAgICAgICAgICAgICAoIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKQotI2lmZGVmIENL X1NTTAotICAgICAgICAgICAgICAgICAgICAgICB8fCAhKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xf YWN0aXZlX2ZsYWcpCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgICAgICAg ICkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgYXV0 aF9jcnlwdCA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSzsKLSNpZmRlZiBDS19F TkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgaWYgKCBhdXRoX2NyeXB0ID09IEFVVEhfRU5DUllQ VF9VU0lOR19URUxPUFQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRF TE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX01VOwotICAgICAgICAgICAgICAgICAgICBURUxPUFRf VV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX01VOwotICAgICAgICAgICAgICAgIH0K LSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAg ICAgaWYgKCBhdXRoX2NyeXB0ID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMgJiYKLSAgICAgICAg ICAgICAgICAgICAgIGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSAmJgotICAgICAgICAgICAgICAg ICAgICAgKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcpICkgewotICAgICAgICAg ICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsK LSAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBU Tl9OR19SRjsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAg ICAgICAgICAgYXV0aF9md2QgPSBwYXJzZWRhdFtpKzFdICYgSU5JX0NSRURfRldEX01BU0s7Ci0g ICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX0tFUkJFUk9T X1Y1OwotICAgICAgICAgICAgICAgIGF1dGhfaG93ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9X X01BU0s7Ci0gICAgICAgICAgICAgICAgaWYgKCBhdXRoX2hvdyA9PSBBVVRIX0hPV19PTkVfV0FZ ICkgewotICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElP TikgPSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRf RU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBLUkI1ICovCi0j aWZkZWYgS1JCNAotICAgICAgICBpZiAocGFyc2VkYXRbaV0gPT0gQVVUSFRZUEVfS0VSQkVST1Nf VjQgJiYKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICBoS1JCNF8zMiAmJgotI2VuZGlmIC8qIE9T MiAqLwotI2lmZGVmIE5PX0ZUUF9BVVRICi0gICAgICAgICAgICAgc3RyY21wKCJmdHAiLHN6VXNl ck5hbWUpICYmIHN0cmNtcCgiYW5vbnltb3VzIixzelVzZXJOYW1lKSAmJgotI2VuZGlmIC8qIE5P X0ZUUF9BVVRIICovCi0gICAgICAgICAgICAgY2tfa3JiNF9pc19pbnN0YWxsZWQoKSAmJiAha3Ji NF9tc2cpIHsKLSAgICAgICAgICAgIGludCByYyA9IDA7Ci0KLSAgICAgICAgICAgIC8qIFdpdGhv dXQgZW5jcnlwdGlvbiB3ZSBjYW4ndCBwZXJmb3JtIG11dHVhbCBhdXRoZW50aWNhdGlvbiAqLwot ICAgICAgICAgICAgaWYgKCAocGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0spID09IEFVVEhf SE9XX01VVFVBTCAmJgotICAgICAgICAgICAgICAgICAhY2tfY3J5cHRfaXNfaW5zdGFsbGVkKCkg KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoICFrNF9hdXRo X3NlbmQoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogSWYgd2UgYXJlIGF1 dG8tZ2V0dGluZyBUR1RzLCB0cnkgKi8KLSAgICAgICAgICAgICAgICBpZiAoICFja19rcmI0X2lz X3RndF92YWxpZCgpICkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIktlcmJlcm9zIDQ6 IFRpY2tldCBHZXR0aW5nIFRpY2tldCBub3QgdmFsaWQuXHJcbiIpOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICBrcmI0X21zZyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBlbHNlIGlmICgocGFyc2VkYXRbaSsxXSAmIEFVVEhfV0hPX01BU0spID09Ci0gICAgICAg ICAgICAgICAgICAgICAgQVVUSF9DTElFTlRfVE9fU0VSVkVSICYmCi0gICAgICAgICAgICAgICAg ICAgICAgdG5faG93X29rKHBhcnNlZGF0W2krMV0pICYmIHRuX2VuY19vayhwYXJzZWRhdFtpKzFd KSkgewotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICBpZiAoKHBhcnNlZGF0 W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSykgJiYKLSAgICAgICAgICAgICAgICAgICAgIChURUxP UFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPT0gVE5fTkdfUkYgfHwKLSAgICAgICAgICAg ICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPT0gVE5fTkdfUkYp KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBhdXRoX2Ny eXB0ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLOwotICAgICAgICAgICAgICAg IGlmICggYXV0aF9jcnlwdCA9PSBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BUICkgewotICAgICAg ICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19N VTsKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikg PSBUTl9OR19NVTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LwotICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9LRVJC RVJPU19WNDsKLSAgICAgICAgICAgICAgICBhdXRoX2hvdyA9IHBhcnNlZGF0W2krMV0gJiBBVVRI X0hPV19NQVNLOwotICAgICAgICAgICAgICAgIGlmICggYXV0aF9ob3cgPT0gQVVUSF9IT1dfT05F X1dBWSApIHsKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZ UFRJT04pID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVM T1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogS1JCNCAq LwotICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGkgPSAyOyBpKzEgPD0gZW5kX3N1 YjsgaSArPSAyKSB7Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICBpZiAoIGF0b2soQVVUSFRZ UEVfU1NMKSAmJiBwYXJzZWRhdFtpXSA9PSBBVVRIVFlQRV9TU0wgJiYKLSNpZmRlZiBTU0xETEwK LSAgICAgICAgICAgICAgICAgY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICYmCi0jZW5kaWYgLyog U1NMRExMICovCi0gICAgICAgICAgICAgICAgICF0bHNfYWN0aXZlX2ZsYWcgJiYgIXNzbF9hY3Rp dmVfZmxhZyAmJiBzc2xfaW5pdGlhbGl6ZWQKLSNpZm5kZWYgVVNFX0NFUlRfQ0IKLSAgICAgICAg ICAgICAgICAgJiYgdGxzX2xvYWRfY2VydHMoc3NsX2N0eCxzc2xfY29uLDApCi0jZW5kaWYgLyog VVNFX0NFUlRfQ0IgKi8KLSAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgewotICAgICAg ICAgICAgICAgIGlmICgocGFyc2VkYXRbaSsxXSAmIEFVVEhfV0hPX01BU0spID09IEFVVEhfQ0xJ RU5UX1RPX1NFUlZFUiAmJgotICAgICAgICAgICAgICAgICAgICAgdG5faG93X29rKHBhcnNlZGF0 W2krMV0pICYmIHRuX2VuY19vayhwYXJzZWRhdFtpKzFdKSkgewotI2lmZGVmIENLX0VOQ1JZUFRJ T04KLSAgICAgICAgICAgICAgICAgICAgLyogU1NMIGRvZXMgbm90IHN1cHBvcnQgVGVsbmV0IEVu Y3J5cHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVU SF9FTkNSWVBUX01BU0spKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg ICAgICAgICAgICAgICAgIGF1dGhfY3J5cHQgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBU X01BU0s7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAgICAgICAgICAgICBU RUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAgICAgICAgICAg ICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAg ICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX1NTTDsK LSAgICAgICAgICAgICAgICAgICAgYXV0aF9ob3cgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1df TUFTSzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfQotI2VuZGlmIC8qIFNTTCAqLwotI2lmZGVmIENLX1NSUAotICAgICAgICAgICAg aWYgKCBhdG9rKEFVVEhUWVBFX1NSUCkgJiYKLSAgICAgICAgICAgICAgICAgcGFyc2VkYXRbaV0g PT0gQVVUSFRZUEVfU1JQCi0jaWZkZWYgU1JQRExMCi0gICAgICAgICAgICAgICAgICYmIGhTUlAK LSNlbmRpZiAvKiBTUlBETEwgKi8KLSNpZmRlZiBOT19GVFBfQVVUSAotICAgICAgICAgICAgICAg ICAmJiBzdHJjbXAoImZ0cCIsc3pVc2VyTmFtZSkgJiYgc3RyY21wKCJhbm9ueW1vdXMiLHN6VXNl ck5hbWUpCi0jZW5kaWYgLyogTk9fRlRQX0FVVEggKi8KLSAgICAgICAgICAgICAgICAgKSB7Ci0g ICAgICAgICAgICAgICAgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9XSE9fTUFTSykgPT0gQVVU SF9DTElFTlRfVE9fU0VSVkVSICYmCi0gICAgICAgICAgICAgICAgICAgICB0bl9ob3dfb2socGFy c2VkYXRbaSsxXSkgJiYgdG5fZW5jX29rKHBhcnNlZGF0W2krMV0pKSB7Ci0jaWZkZWYgUFJFX1NS UF8xXzRfNQotICAgICAgICAgICAgICAgIGlmIChwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBU X01BU0spCi0gICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3Qgc3VwcG9ydCBFTkNSWVBUX1VT SU5HX1RFTE9QVCB5ZXQuICovCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlm IC8qIFBSRV9TUlBfMV80XzUgKi8KLSAgICAgICAgICAgICAgICBpZiAoKChwYXJzZWRhdFtpKzFd ICYgQVVUSF9FTkNSWVBUX01BU0spID09Ci0gICAgICAgICAgICAgICAgICAgICBBVVRIX0VOQ1JZ UFRfVVNJTkdfVEVMT1BUKSAmJgotICAgICAgICAgICAgICAgICAgICAgKFRFTE9QVF9NRV9NT0RF KFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19SRiB8fAotICAgICAgICAgICAgICAgICAgICAg ICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19SRikpCi0gICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmICgoKHBhcnNlZGF0W2kr MV0gJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0KLSAgICAgICAgICAgICAgICAgICAgIEFVVEhfRU5D UllQVF9TVEFSVF9UTFMpICYmCi0gICAgICAgICAgICAgICAgICAgICAoIWNrX3NzbGVheV9pc19p bnN0YWxsZWQoKQotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgICAgICAgICAgICB8fCAhKHRs c19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcpCi0jZW5kaWYgLyogQ0tfU1NMICovCi0g ICAgICAgICAgICAgICAgICAgICAgICkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot ICAgICAgICAgICAgICAgICAgICBhdXRoX2NyeXB0ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5D UllQVF9NQVNLOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICAgICAgaWYg KCBhdXRoX2NyeXB0ID09IEFVVEhfRU5DUllQVF9VU0lOR19URUxPUFQgKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19N VTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJ T04pID0gVE5fTkdfTVU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAgICAgaWYgKCBhdXRoX2NyeXB0 ID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMgJiYKLSAgICAgICAgICAgICAgICAgICAgIGNrX3Nz bGVheV9pc19pbnN0YWxsZWQoKSAmJgotICAgICAgICAgICAgICAgICAgICAgKHRsc19hY3RpdmVf ZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcpICkgewotICAgICAgICAgICAgICAgICAgICBURUxPUFRf TUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICAg ICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAgICAgICAg ICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgICAgIGF1dGhl bnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9TUlA7Ci0gICAgICAgICAgICAgICAgICAgIGF1 dGhfaG93ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0s7Ci0gICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBT UlAgKi8KLSNpZmRlZiBHU1NBUElfS1JCNQotICAgICAgICBpZiAoYXRvayhBVVRIVFlQRV9HU1NB UElfS1JCNSkgJiYKLSAgICAgICAgICAgIHBhcnNlZGF0W2ldID09IEFVVEhUWVBFX0dTU0FQSV9L UkI1ICYmCi0gICAgICAgICAgICAocGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLKSA9 PQotICAgICAgICAgICAgQVVUSF9FTkNSWVBUX0FGVEVSX0VYQ0hBTkdFICYmCi0jaWZkZWYgT1My Ci0gICAgICAgICAgICBoR1NTQVBJICYmCi0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgTk9fRlRQ X0FVVEgKLSAgICAgICAgICAgIHN0cmNtcCgiZnRwIixzelVzZXJOYW1lKSAmJiBzdHJjbXAoImFu b255bW91cyIsc3pVc2VyTmFtZSkgJiYKLSNlbmRpZiAvKiBOT19GVFBfQVVUSCAqLwotICAgICAg ICAgICAgY2tfZ3NzYXBpX2lzX2luc3RhbGxlZCgpICYmICFnc3NrNV9tc2cpCi0gICAgICAgIHsK LSAgICAgICAgICAgIGlmICggIWdzc2s1X2F1dGhfc2VuZChwYXJzZWRhdFtpKzFdICYgQVVUSF9I T1dfTUFTSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRhdFtpKzFd ICYgQVVUSF9FTkNSWVBUX01BU0ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGFyc2VkYXRbaSsxXSAmIElOSV9DUkVEX0ZXRF9NQVNLKSApCi0gICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgLyogSWYgd2UgYXJlIGF1dG8tZ2V0dGluZyBUR1RzLCB0cnkgKi8KLSAgICAg ICAgICAgICAgICBpZiAoICFja19rcmI1X2lzX3RndF92YWxpZCgpICkgewotICAgICAgICAgICAg ICAgIHByaW50ZigiS2VyYmVyb3MgNTogVGlja2V0IEdldHRpbmcgVGlja2V0IG5vdCB2YWxpZC5c clxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGdzc2s1X21zZyA9IDE7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICgocGFyc2VkYXRbaSsxXSAmIEFV VEhfV0hPX01BU0spID09Ci0gICAgICAgICAgICAgICAgICAgICAgQVVUSF9DTElFTlRfVE9fU0VS VkVSICYmCi0gICAgICAgICAgICAgICAgICAgICAgdG5faG93X29rKHBhcnNlZGF0W2krMV0pICYm IHRuX2VuY19vayhwYXJzZWRhdFtpKzFdKSkgewotICAgICAgICAgICAgICAgIGF1dGhfY3J5cHQg PSBwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0s7Ci0jaWZkZWYgQ0tfRU5DUllQVElP TgotICAgICAgICAgICAgICAgIGlmICggYXV0aF9jcnlwdCA9PSBBVVRIX0VOQ1JZUFRfQUZURVJf RVhDSEFOR0UgKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9F TkNSWVBUSU9OKSA9IFROX05HX1JGOwotICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RF KFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwotICAgICAgICAgICAgICAgIH0KLSNlbmRp ZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgICAgYXV0aF9md2QgPSBwYXJzZWRh dFtpKzFdICYgSU5JX0NSRURfRldEX01BU0s7Ci0gICAgICAgICAgICAgICAgYXV0aGVudGljYXRp b25fdmVyc2lvbiA9IEFVVEhUWVBFX0dTU0FQSV9LUkI1OwotICAgICAgICAgICAgICAgIGF1dGhf aG93ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0s7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBHU1NBUElfS1JCNSAqLwot I2lmZGVmIEtSQjUKLSAgICAgICAgICAgIGlmICggYXRvayhBVVRIVFlQRV9LRVJCRVJPU19WNSkg JiYKLSAgICAgICAgICAgICAgICAgcGFyc2VkYXRbaV0gPT0gQVVUSFRZUEVfS0VSQkVST1NfVjUg JiYKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgaEtSQjVfMzIgJiYKLSNlbmRpZiAvKiBP UzIgKi8KLSNpZmRlZiBOT19GVFBfQVVUSAotICAgICAgICAgICAgICAgICBzdHJjbXAoImZ0cCIs c3pVc2VyTmFtZSkgJiYgc3RyY21wKCJhbm9ueW1vdXMiLHN6VXNlck5hbWUpICYmCi0jZW5kaWYg LyogTk9fRlRQX0FVVEggKi8KLSAgICAgICAgICAgICAgICAgY2tfa3JiNV9pc19pbnN0YWxsZWQo KSAmJiAha3JiNV9tc2cpIHsKLQotICAgICAgICAgICAgICAgIC8qIFdpdGhvdXQgZW5jcnlwdGlv biB3ZSBjYW4ndCBwZXJmb3JtIG11dHVhbCBhdXRoZW50aWNhdGlvbiAqLwotICAgICAgICAgICAg ICAgIGlmICggKHBhcnNlZGF0W2krMV0gJiBBVVRIX0hPV19NQVNLKSA9PSBBVVRIX0hPV19NVVRV QUwgJiYKLSAgICAgICAgICAgICAgICAgICAgICFja19jcnlwdF9pc19pbnN0YWxsZWQoKSkKLSAg ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAvKiBTa2lwIG92 ZXIgZW50cmllcyB0aGF0IHJlcXVlc3QgY3JlZGVudGlhbCBmb3J3YXJkaW5nICovCi0gICAgICAg ICAgICAgICAgLyogaWYgd2UgYXJlIG5vdCBmb3J3YXJkaW5nLiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmICgoIWZvcndhcmRfZmxhZyAmJiAocGFyc2Vk YXRbaSsxXSAmIElOSV9DUkVEX0ZXRF9NQVNLKSkgfHwKLSAgICAgICAgICAgICAgICAgICAgIChm b3J3YXJkX2ZsYWcgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgKChwYXJzZWRhdFtpKzFdICYg QVVUSF9IT1dfTUFTSykgPT0gQVVUSF9IT1dfT05FX1dBWSkpKQotICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIGlmICggIWs1X2F1dGhfc2VuZChwYXJzZWRh dFtpKzFdICYgQVVUSF9IT1dfTUFTSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBhcnNlZGF0W2krMV0gJiBJTklfQ1JFRF9GV0RfTUFTSykgKQot ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgYXJlIGF1dG8t Z2V0dGluZyBUR1RzLCB0cnkgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhY2tfa3JiNV9p c190Z3RfdmFsaWQoKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICJLZXJiZXJvcyA1OiBUaWNrZXQgR2V0dGluZyBUaWNrZXQg bm90IHZhbGlkLlxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgICBrcmI1X21zZyA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVs c2UgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9XSE9fTUFTSykgPT0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgQVVUSF9DTElFTlRfVE9fU0VSVkVSICYmCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIHRuX2hvd19vayhwYXJzZWRhdFtpKzFdKSAmJiB0bl9lbmNfb2socGFyc2VkYXRbaSsx XSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoKChwYXJzZWRh dFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0spID09Ci0gICAgICAgICAgICAgICAgICAgICAgICAg QVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9QVCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAo VEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID09IFROX05HX1JGIHx8Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBU Tl9OR19SRikpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKCgocGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PQotICAg ICAgICAgICAgICAgICAgICAgICAgIEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpICYmCi0gICAgICAg ICAgICAgICAgICAgICAgICAgKCFja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkKLSNpZmRlZiBDS19T U0wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICEodGxzX2FjdGl2ZV9mbGFnIHx8IHNz bF9hY3RpdmVfZmxhZykKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg ICAgICAgICAgYXV0aF9jcnlwdCA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSzsK LSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRoX2NyeXB0 KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQ VElPTikgPSBUTl9OR19NVTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUo VEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNl bmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAgICAg ICAgIGlmICggYXV0aF9jcnlwdCA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTICYmCi0gICAgICAg ICAgICAgICAgICAgICAgICAgY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICYmCi0gICAgICAgICAg ICAgICAgICAgICAgICAgKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcpICkgewot ICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04p ID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9Q VF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwotICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYg LyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24g PSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKLSAgICAgICAgICAgICAgICAgICAgYXV0aF9ob3cgPSBw YXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBh dXRoX2hvdyA9PSBBVVRIX0hPV19PTkVfV0FZICkgewotICAgICAgICAgICAgICAgICAgICAgICAg VEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JG OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBLUkI1ICovCi0jaWZkZWYg S1JCNAotICAgICAgICAgICAgaWYgKCBhdG9rKEFVVEhUWVBFX0tFUkJFUk9TX1Y0KSAmJgotICAg ICAgICAgICAgICAgICBwYXJzZWRhdFtpXSA9PSBBVVRIVFlQRV9LRVJCRVJPU19WNCAmJgotI2lm ZGVmIE9TMgotICAgICAgICAgICAgICAgICBoS1JCNF8zMiAmJgotI2VuZGlmIC8qIE9TMiAqLwot I2lmZGVmIE5PX0ZUUF9BVVRICi0gICAgICAgICAgICAgICAgIHN0cmNtcCgiZnRwIixzelVzZXJO YW1lKSAmJiBzdHJjbXAoImFub255bW91cyIsc3pVc2VyTmFtZSkgJiYKLSNlbmRpZiAvKiBOT19G VFBfQVVUSCAqLwotICAgICAgICAgICAgICAgICBja19rcmI0X2lzX2luc3RhbGxlZCgpICYmICFr cmI0X21zZykgewotICAgICAgICAgICAgICAgIGludCByYyA9IDA7Ci0KLSAgICAgICAgICAgICAg ICAvKiBXaXRob3V0IGVuY3J5cHRpb24gd2UgY2FuJ3QgcGVyZm9ybSBtdXR1YWwgYXV0aGVudGlj YXRpb24gKi8KLSAgICAgICAgICAgICAgICBpZiAoIChwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1df TUFTSykgPT0gQVVUSF9IT1dfTVVUVUFMICYmCi0gICAgICAgICAgICAgICAgICAgICAhY2tfY3J5 cHRfaXNfaW5zdGFsbGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg ICAgICAgICAgICAgaWYgKCAhazRfYXV0aF9zZW5kKCkgKQotICAgICAgICAgICAgICAgIHsKLSAg ICAgICAgICAgICAgICAgICAgLyogSWYgd2UgYXJlIGF1dG8tZ2V0dGluZyBUR1RzLCB0cnkgKi8K LSAgICAgICAgICAgICAgICAgICAgaWYgKCAhY2tfa3JiNF9pc190Z3RfdmFsaWQoKSApIHsKLSAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJLZXJiZXJvcyA0OiBUaWNrZXQgR2V0dGluZyBUaWNr ZXQgbm90IHZhbGlkLlxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICBrcmI0X21zZyA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IGVsc2UgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9XSE9fTUFTSykgPT0KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgQVVUSF9DTElFTlRfVE9fU0VSVkVSICYmCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIHRuX2hvd19vayhwYXJzZWRhdFtpKzFdKSAmJiB0bl9lbmNfb2socGFyc2VkYXRb aSsxXSkpCi0gICAgICAgICAgICAgICAgewotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAg ICAgICAgICAgICAgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0spICYmCi0g ICAgICAgICAgICAgICAgICAgICAgICAoVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04p ID09IFROX05HX1JGIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShU RUxPUFRfRU5DUllQVElPTikgPT0gVE5fTkdfUkYpKQotICAgICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBhdXRoX2NyeXB0ID0gcGFyc2VkYXRbaSsxXSAm IEFVVEhfRU5DUllQVF9NQVNLOwotICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aF9jcnlwdCkg ewotICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJ T04pID0gVE5fTkdfTVU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRF TE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX01VOwotICAgICAgICAgICAgICAgICAgICB9Ci0jZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlv bl92ZXJzaW9uID0gQVVUSFRZUEVfS0VSQkVST1NfVjQ7Ci0gICAgICAgICAgICAgICAgICAgIGF1 dGhfaG93ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0s7Ci0gICAgICAgICAgICAgICAg ICAgIGlmICggYXV0aF9ob3cgPT0gQVVUSF9IT1dfT05FX1dBWSApIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwot ICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikg PSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogS1JCNCAq LwotI2lmZGVmIE5UTE0KLSAgICAgICAgaWYgKCBhdG9rKEFVVEhUWVBFX05UTE0pICYmCi0gICAg ICAgICAgICAgcGFyc2VkYXRbaV0gPT0gQVVUSFRZUEVfTlRMTSAmJgotICAgICAgICAgICAgIGNr X250bG1faXNfdmFsaWQoMSkgJiYKLSAgICAgICAgICAgICBudGxtX2F1dGhfc2VuZCgpID09IDAp IHsKLSAgICAgICAgICAgIGlmICgocGFyc2VkYXRbaSsxXSAmIEFVVEhfV0hPX01BU0spID09IEFV VEhfQ0xJRU5UX1RPX1NFUlZFUiAmJgotICAgICAgICAgICAgICAgICB0bl9ob3dfb2socGFyc2Vk YXRbaSsxXSkgJiYgdG5fZW5jX29rKHBhcnNlZGF0W2krMV0pKSB7Ci0jaWZkZWYgQ0tfRU5DUllQ VElPTgotICAgICAgICAgICAgICAgIC8qIE5UTE0gZG9lcyBub3Qgc3VwcG9ydCBUZWxuZXQgRW5j cnlwdGlvbiAqLwotICAgICAgICAgICAgICAgIGlmICgocGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5D UllQVF9NQVNLKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg ICAgYXV0aF9jcnlwdCA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSzsKLSNlbmRp ZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVM T1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9E RShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICBhdXRoZW50 aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfTlRMTTsKLSAgICAgICAgICAgICAgICBhdXRoX2hv dyA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0hPV19NQVNLOwotICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogTlRMTSAqLwotICAgICAgICB9 Ci0gICAgfQotCi0gICAgaWYgKGF1dGhfaG93ID09IC0xKSB7ICAgICAgICAgICAgICAgLyogRGlk IHdlIGZpbmQgb25lPyAqLwotICAgICAgICBzd2l0Y2ggKCBhdXRoX3R5cGVfdXNlclswXSApIHsg IC8qIElmIG5vdCwgYWJvcnQgdGhlIG5lZ290aWF0aW9uICovCi0gICAgICAgIGNhc2UgQVVUSFRZ UEVfTlVMTDoKLSAgICAgICAgICAgIGF1dGhfYWJvcnQoIlVzZXIgcmVmdXNlZCB0byBhY2NlcHQg YW55IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCIsMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgY2FzZSBBVVRIVFlQRV9BVVRPOgotICAgICAgICAgICAgYXV0aF9hYm9ydCgiTm8gYXV0aGVu dGljYXRpb24gbWV0aG9kIGF2YWlsYWJsZSIsIDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIGNoYXIgbXNnWzgwXTsKLSAgICAgICAgICAgIGNr bWFrbXNnKG1zZyw4MCxBVVRIVFlQRV9OQU1FKGF1dGhfdHlwZV91c2VyWzBdKSwKLSAgICAgICAg ICAgICAgICAgICAgICAiIGNvdWxkIG5vdCBiZSBuZWdvdGlhdGVkIixOVUxMLE5VTEwKLSAgICAg ICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBhdXRoX2Fib3J0KG1zZywgMCk7Ci0gICAg ICAgIH0KLSAgICAgICAgfQotICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAg ICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLSAgICB9Ci0KLSAgICBwcmludGYoIkF1dGhlbnRp Y2F0aW5nIHdpdGggJXNcclxuIiwKLSAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoYXV0aGVudGlj YXRpb25fdmVyc2lvbikpOwotCi0gICAgLyogU2VuZCBUZWxuZXQgQXV0aCBOYW1lIG1lc3NhZ2Ug KGlmIG5lY2Vzc2FyeSkgKi8KLSAgICBzd2l0Y2ggKCBhdXRoZW50aWNhdGlvbl92ZXJzaW9uICkg ewotICAgIGNhc2UgQVVUSFRZUEVfU1JQOgotICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjQ6 Ci0gICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNToKLSAgICBjYXNlIEFVVEhUWVBFX0dTU0FQ SV9LUkI1OgotICAgICAgICAvKiBpZiB3ZSBkbyBub3QgaGF2ZSBhIG5hbWUgdG8gbG9naW4gd2l0 aCBnZXQgb25lIG5vdy4gKi8KLSAgICAgICAgd2hpbGUgKCBzelVzZXJOYW1lWzBdID09ICdcMCcg KSB7Ci0gICAgICAgICAgICBleHRlcm4gY2hhciAqIHRuX3ByX3VpZDsKLSAgICAgICAgICAgIGlu dCBvayA9IHVxX3R4dChOVUxMLAotICAgICAgICAgICAgICAgICAgICAgdG5fcHJfdWlkICYmIHRu X3ByX3VpZFswXSA/IHRuX3ByX3VpZCA6ICJIb3N0IFVzZXJpZDogIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxLCBOVUxMLCBzelVzZXJOYW1lLCA2MywgTlVMTCxERUZBVUxUX1VRX1RJ TUVPVVQpOwotICAgICAgICAgICAgaWYgKCAhb2sgKQotICAgICAgICAgICAgICAgIHJldHVybiBB VVRIX0ZBSUxVUkU7Ci0gICAgICAgIH0KLSAgICAgICAgcGxlbiA9IHN0cmxlbihzelVzZXJOYW1l KTsKLSAgICAgICAgcG5hbWUgPSAodW5zaWduZWQgY2hhciAqKSBzelVzZXJOYW1lOwotCi0gICAg ICAgIC8qIENvbnN0cnVjdCBUZWxuZXQgRGVidWdnaW5nIE1lc3NhZ2UgKi8KLSAgICAgICAgaWYg KGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgICAgICBja21ha3htc2codG5f bXNnLFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAi LFRFTE9QVChURUxPUFRfQVVUSEVOVElDQVRJT04pLAotICAgICAgICAgICAgICAgICAgICAgICAi IE5BTUUgIiwoY2hhciAqKXBuYW1lLCIgSUFDIFNFIixOVUxMLAotICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAotICAgICAgICAgICAgICAgICAgICAg KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOwotICAgICAgICAgICAgaWYg KHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgICAgIH0KLQotICAgICAg ICAvKiBDb25zdHJ1Y3QgYW5kIHNlbmQgQXV0aGVudGljYXRpb24gTmFtZSBzdWJuZWdvdGlhdGlv biAqLwotICAgICAgICBpZiAoIHBsZW4gPCBzaXplb2YoYnVmKSAtIDYgKSB7Ci0gICAgICAgICAg ICBzcHJpbnRmKChjaGFyICopYnVmLCAiJWMlYyVjJWMiLCBJQUMsIFNCLCAKLSAgICAgICAgICAg ICAgICAgICAgIFRFTE9QVF9BVVRIRU5USUNBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgIFRF TFFVQUxfTkFNRSk7Ci0gICAgICAgICAgICBtZW1jcHkoJmJ1Zls0XSwgcG5hbWUsIHBsZW4pOyAg ICAgICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgIHNwcmludGYoKGNoYXIgKikmYnVm W3BsZW4gKyA0XSwgIiVjJWMiLCBJQUMsIFNFKTsgICAvKiBzYWZlICovCi0jaWZkZWYgT1MyCi0g ICAgICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNl bmRpZgotICAgICAgICAgICAgdHRvbCgoQ0hBUiAqKWJ1ZiwgcGxlbis2KTsKLSNpZmRlZiBPUzIK LSAgICAgICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICBzcHJpbnRmKChjaGFyICopYnVmLCAiJWMlYyVjJWMlYyVjIiwgSUFD LCBTQiwgCi0gICAgICAgICAgICAgICAgICAgICBURUxPUFRfQVVUSEVOVElDQVRJT04sCi0gICAg ICAgICAgICAgICAgICAgICBURUxRVUFMX05BTUUsIElBQywgU0UpOyAgICAvKiBzYWZlICovCi0j aWZkZWYgT1MyCi0gICAgICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRF X1dBSVQgKTsKLSNlbmRpZgotICAgICAgICAgICAgdHRvbCgoQ0hBUiAqKWJ1ZiwgNik7Ci0jaWZk ZWYgT1MyCi0gICAgICAgICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgICAg ICB9Ci0gICAgfQotCi0gICAgLyogQ29uc3RydWN0IEF1dGhlbnRpY2F0aW9uIE1vZGUgc3VibmVn b3RpYXRpb24gbWVzc2FnZSAoaWYgbmVjZXNzYXJ5KSAqLwotICAgIHN3aXRjaCAoIGF1dGhlbnRp Y2F0aW9uX3ZlcnNpb24gKSB7Ci0gICAgY2FzZSBBVVRIVFlQRV9TUlA6Ci0gICAgY2FzZSBBVVRI VFlQRV9LRVJCRVJPU19WNDoKLSAgICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y1OgotICAgIGNh c2UgQVVUSFRZUEVfR1NTQVBJX0tSQjU6Ci0gICAgY2FzZSBBVVRIVFlQRV9OVExNOgotICAgICAg ICBtb2RlID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgKGF1dGhfaG93ICYgQVVUSF9IT1dfTUFT SykgfCBhdXRoX2NyeXB0Ci0jaWZkZWYgVVNFX0lOSV9DUkVEX0ZXRAotICAgICAgICAgICAgICAg fCAoKChhdXRoZW50aWNhdGlvbl92ZXJzaW9uID09IEFVVEhUWVBFX0tFUkJFUk9TX1Y1KSAmJgot ICAgICAgICAgICAgICAgICAgYXV0aF9md2QpP0lOSV9DUkVEX0ZXRF9PTjpJTklfQ1JFRF9GV0Rf T0ZGKQotI2VuZGlmIC8qIFVTRV9JTklfQ1JFRF9GV0QgKi8KLSAgICAgICAgICAgICAgIDsKLSAg ICAgICAgc3ByaW50ZigoY2hhciAqKWJ1ZiwgIiVjJWMlYyVjJWMlYyVjIiwKLSAgICAgICAgICAg ICAgICAgSUFDLCBTQiwgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OLAotICAgICAgICAgICAgICAgICBU RUxRVUFMX0lTLAotICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uLAotICAg ICAgICAgICAgICAgICBtb2RlLAotICAgICAgICAgICAgICAgICBLUkJfQVVUSCk7ICAgICAvKiBz YWZlICovCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8qIFNlbmQgaW5pdGlhbCBhdXRo ZW50aWNhdGlvbiBkYXRhICovCi0gICAgc3dpdGNoICggYXV0aGVudGljYXRpb25fdmVyc2lvbiAp IHsKLSNpZmRlZiBDS19TU0wKLSAgICBjYXNlIEFVVEhUWVBFX1NTTDoKLSAgICAgICAgU2VuZFNT TEF1dGhTQihTU0xfU1RBUlQsTlVMTCwwKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogU1NM ICovCi0jaWZkZWYgQ0tfU1JQCi0gICAgY2FzZSBBVVRIVFlQRV9TUlA6Ci0gICAgICAgIHNwcmlu dGYoJmJ1Zls3XSwgIiVjJWMiLCBJQUMsIFNFKTsgICAgICAvKiBzYWZlICovCi0gICAgICAgIGlm IChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICAgICAgY2ttYWt4bXNnKHRu X21zZyxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAi LFRFTE9QVChURUxPUFRfQVVUSEVOVElDQVRJT04pLAotICAgICAgICAgICAgICAgICAgICAgICIg SVMgIixBVVRIVFlQRV9OQU1FKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24pLAotICAgICAgICAgICAg ICAgICAgICAgICIgQVVUSCAiLEFVVEhNT0RFX05BTUUobW9kZSksIiBJQUMgU0UiLAotICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAotICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOwotICAgICAgICAg ICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgICAgIH0KLSNp ZmRlZiBPUzIKLSAgICAgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlU ICk7Ci0jZW5kaWYKLSAgICAgICAgdHRvbCgoQ0hBUiAqKWJ1ZiwgOSk7Ci0jaWZkZWYgT1MyCi0g ICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotI2Vu ZGlmIC8qIFNSUCAqLwotI2lmZGVmIE5UTE0KLSAgICBjYXNlIEFVVEhUWVBFX05UTE06IHsKLSAg ICAgICAgaW50IGxlbmd0aCA9IDA7Ci0KLSAgICAgICAgZm9yICggaT0wIDsgaTxOVExNU2VjQnVm WzBdLmNiQnVmZmVyIDsgaSsrICkgewotICAgICAgICAgICAgaWYgKCAoKGNoYXIgKilOVExNU2Vj QnVmWzBdLnB2QnVmZmVyKVtpXSA9PSBJQUMgKQotICAgICAgICAgICAgICAgIGlhY2NudCsrOwot ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAoIDIqc2l6ZW9mKFVMT05HKSArIE5UTE1TZWNCdWZb MF0uY2JCdWZmZXIgKyBpYWNjbnQgKyAxMCkgIDwKLSAgICAgICAgICAgICBzaXplb2YoYnVmKSAp IHsKLSAgICAgICAgICAgIGxlbmd0aCA9IGNvcHlfZm9yX25ldCgmYnVmWzddLChjaGFyICopJk5U TE1TZWNCdWZbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIqc2l6ZW9m KFVMT05HKSk7Ci0gICAgICAgICAgICBsZW5ndGggKz0gY29weV9mb3JfbmV0KCZidWZbNytsZW5n dGhdLCBOVExNU2VjQnVmWzBdLnB2QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5UTE1TZWNCdWZbMF0uY2JCdWZmZXIpOwotICAgICAgICB9Ci0gICAgICAgIHNwcmlu dGYoJmJ1Zls3K2xlbmd0aF0sICIlYyVjIiwgSUFDLCBTRSk7Ci0KLSAgICAgICAgaWYgKGRlYmxv ZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAg IGNrbWFreG1zZyh0bl9tc2csVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICAgICAiVEVM TkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSwKLSAgICAgICAgICAg ICAgICAgICAgICAiIElTICIsQVVUSFRZUEVfTkFNRShhdXRoZW50aWNhdGlvbl92ZXJzaW9uKSwi ICIsCi0gICAgICAgICAgICAgICAgICAgICAgQVVUSE1PREVfTkFNRShtb2RlKSwiIE5UTE1fQVVU SCAiLAotICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKLSAg ICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgdG5faGV4KChjaGFyICopdG5fbXNn LFROX01TR19MRU4sJmJ1Zls3XSxsZW5ndGgpOwotICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21z ZywiSUFDIFNFIixUTl9NU0dfTEVOKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIi LDApOwotICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7 Ci0gICAgICAgIH0KLSNpZmRlZiBPUzIKLSAgICAgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1f SU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSAgICAgICAgdHRvbCgoQ0hBUiAqKWJ1ZiwgbGVu Z3RoKzkpOwotI2lmZGVmIE9TMgotICAgICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRp ZgotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYgLyogTlRMTSAqLwotI2lmZGVmIEtSQjQK LSAgICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y0OgotICAgICAgICBmb3IgKCBpPTAgOyBpPGs0 X2F1dGgubGVuZ3RoIDsgaSsrICkgewotICAgICAgICAgICAgaWYgKCBrNF9hdXRoLmRhdFtpXSA9 PSBJQUMgKQotICAgICAgICAgICAgICAgIGlhY2NudCsrOwotICAgICAgICB9Ci0KLSAgICAgICAg aWYgKCBrNF9hdXRoLmxlbmd0aCArIGlhY2NudCArIDEwIDwgc2l6ZW9mKGJ1ZikgKQotICAgICAg ICAgIGs0X2F1dGgubGVuZ3RoID0gY29weV9mb3JfbmV0KCZidWZbN10sIGs0X2F1dGguZGF0LCBr NF9hdXRoLmxlbmd0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGs0X2F1dGgubGVuZ3Ro ID0gMDsKLSAgICAgICAgc3ByaW50ZigmYnVmW2s0X2F1dGgubGVuZ3RoKzddLCAiJWMlYyIsIElB QywgU0UpOwotCi0gICAgICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAg ICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICBja21ha3htc2codG5fbXNnLFROX01TR19MRU4s Ci0gICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9B VVRIRU5USUNBVElPTiksIiBJUyAiLAotICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05B TUUoYXV0aGVudGljYXRpb25fdmVyc2lvbiksIiAiLAotICAgICAgICAgICAgICAgICAgICAgIEFV VEhNT0RFX05BTUUobW9kZSksIiBBVVRIICIsCi0gICAgICAgICAgICAgICAgICAgICAgTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMCi0gICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg dG5faGV4KChjaGFyICopdG5fbXNnLFROX01TR19MRU4sJmJ1Zls3XSxrNF9hdXRoLmxlbmd0aCk7 Ci0gICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOwotICAg ICAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7Ci0gICAgICAgICAgICBpZiAodG5fZGVi IHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICAgICAgfQotI2lmZGVmIE9TMgotICAg ICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgot ICAgICAgICB0dG9sKChDSEFSICopYnVmLCBrNF9hdXRoLmxlbmd0aCs5KTsKLSNpZmRlZiBPUzIK LSAgICAgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLQotI2lmbmRlZiBSRU1PVkVf Rk9SX0VYUE9SVAotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgLyoKLSAgICAgICAgICog SWYgd2UgYXJlIGRvaW5nIG11dHVhbCBhdXRoZW50aWNhdGlvbiwgZ2V0IHNldCB1cCB0byBzZW5k Ci0gICAgICAgICAqIHRoZSBjaGFsbGVuZ2UsIGFuZCB2ZXJpZnkgaXQgd2hlbiB0aGUgcmVzcG9u c2UgY29tZXMgYmFjay4KLSAgICAgICAgICovCi0gICAgICAgIGlmICgoYXV0aF9ob3cgJiBBVVRI X0hPV19NQVNLKSA9PSBBVVRIX0hPV19NVVRVQUwpIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIGlu dCBpOwotICAgICAgICAgICAgaW50IHJjID0gMDsKLQotI2lmZGVmIE1JVF9DVVJSRU5UCi0gICAg ICAgICAgICBkYXRhLmRhdGEgPSBjcmVkLnNlc3Npb247Ci0gICAgICAgICAgICBkYXRhLmxlbmd0 aCA9IDg7IC8qIHNpemVvZihjcmVkLnNlc3Npb24pICovOwotCi0gICAgICAgICAgICBpZiAoY29k ZSA9IGtyYjVfY19yYW5kb21fc2VlZChrNV9jb250ZXh0LCAmZGF0YSkpIHsKLSAgICAgICAgICAg ICAgICBjb21fZXJyKCJsaWJ0ZWxuZXQiLCBjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAg ICJ3aGlsZSBzZWVkaW5nIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIik7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKDApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29kZSA9IGty YjVfY19tYWtlX3JhbmRvbV9rZXkoazVfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRU5DVFlQRV9ERVNfQ0JDX1JBVywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJhbmRvbV9rZXkpKSB7Ci0gICAg ICAgICAgICAgICAgY29tX2VycigibGlidGVsbmV0IiwgY29kZSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAid2hpbGUgY3JlYXRpbmcgcmFuZG9tIHNlc3Npb24ga2V5Iik7Ci0gICAgICAgICAg ICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiB0aGUga3Ji NCBjb2RlIHVzZXMgZWNiIG1vZGUsIGJ1dCBvbiBhIHNpbmdsZSBibG9jawotICAgICAgICAgICAg d2l0aCBhIHplcm8gaXZlYywgZWNiIGFuZCBjYmMgYXJlIHRoZSBzYW1lICovCi0gICAgICAgICAg ICBrNF9rcmJrZXkuZW5jdHlwZSA9IEVOQ1RZUEVfREVTX0NCQ19SQVc7Ci0gICAgICAgICAgICBr NF9rcmJrZXkubGVuZ3RoID0gODsKLSAgICAgICAgICAgIGs0X2tyYmtleS5jb250ZW50cyA9IGNy ZWQuc2Vzc2lvbjsKLQotICAgICAgICAgICAgZW5jZGF0YS5jaXBoZXJ0ZXh0LmRhdGEgPSByYW5k b21fa2V5LmNvbnRlbnRzOwotICAgICAgICAgICAgZW5jZGF0YS5jaXBoZXJ0ZXh0Lmxlbmd0aCA9 IHJhbmRvbV9rZXkubGVuZ3RoOwotICAgICAgICAgICAgZW5jZGF0YS5lbmN0eXBlID0gRU5DVFlQ RV9VTktOT1dOOwotCi0gICAgICAgICAgICBkYXRhLmRhdGEgPSBrNF9zZXNzaW9uX2tleTsKLSAg ICAgICAgICAgIGRhdGEubGVuZ3RoID0gODsKLQotICAgICAgICAgICAgY29kZSA9IGtyYjVfY19k ZWNyeXB0KGs1X2NvbnRleHQsICZrNF9rcmJrZXksIDAsIDAsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZlbmNkYXRhLCAmZGF0YSk7Ci0KLSAgICAgICAgICAgIGtyYjVfZnJl ZV9rZXlibG9ja19jb250ZW50cyhrNV9jb250ZXh0LCAmcmFuZG9tX2tleSk7Ci0KLSAgICAgICAg ICAgIGlmIChjb2RlKSB7Ci0gICAgICAgICAgICAgICAgY29tX2VycigibGlidGVsbmV0IiwgY29k ZSwgIndoaWxlIGVuY3J5cHRpbmcgcmFuZG9tIGtleSIpOwotICAgICAgICAgICAgICAgIHJldHVy bigwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZW5jZGF0YS5jaXBoZXJ0ZXh0LmRh dGEgPSBrNF9zZXNzaW9uX2tleTsKLSAgICAgICAgICAgIGVuY2RhdGEuY2lwaGVydGV4dC5sZW5n dGggPSA4OwotICAgICAgICAgICAgZW5jZGF0YS5lbmN0eXBlID0gRU5DVFlQRV9VTktOT1dOOwot Ci0gICAgICAgICAgICBkYXRhLmRhdGEgPSBrNF9jaGFsbGVuZ2U7Ci0gICAgICAgICAgICBkYXRh Lmxlbmd0aCA9IDg7Ci0KLSAgICAgICAgICAgIGNvZGUgPSBrcmI1X2NfZGVjcnlwdChrNV9jb250 ZXh0LCAmazRfa3Jia2V5LCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmZW5jZGF0YSwgJmRhdGEpOwotI2Vsc2UgLyogTUlUX0NVUlJFTlQgKi8KLSAgICAgICAgICAg IG1lbXNldChrNF9zY2hlZCwwLHNpemVvZihTY2hlZHVsZSkpOwotICAgICAgICAgICAgY2toZXhk dW1wKCJhdXRoX3NlbmQiLGNyZWQuc2Vzc2lvbiw4KTsKLSAgICAgICAgICAgIHJjID0gZGVzX2tl eV9zY2hlZChjcmVkLnNlc3Npb24sIGs0X3NjaGVkKTsKLSAgICAgICAgICAgIGlmICggcmMgPT0g LTEgKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/SW52YWxpZCBERVMga2V5IHNwZWNpZmll ZCBpbiBjcmVkZW50aWFsc1xyXG4iKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJhdXRo X3NlbmQiLAotICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIERFUyBLZXkgc3BlY2lmaWVk IGluIGNyZWRlbnRpYWxzIiwwKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIHJjID09IC0yICkg ewotICAgICAgICAgICAgICAgIHByaW50ZigiP1dlYWsgREVTIGtleSBzcGVjaWZpZWQgaW4gY3Jl ZGVudGlhbHNcclxuIik7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiYXV0aF9zZW5kIiwK LSAgICAgICAgICAgICAgICAgICAgICAid2VhayBERVMgS2V5IHNwZWNpZmllZCBpbiBjcmVkZW50 aWFscyIsMCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCByYyAhPSAwICkgewotICAgICAgICAg ICAgICAgIHByaW50ZigiP0RFUyBLZXkgU2NoZWR1bGUgbm90IHNldCBieSBjcmVkZW50aWFsc1xy XG4iKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJhdXRoX3NlbmQiLAotICAgICAgICAg ICAgICAgICAgICAgICJERVMgS2V5IFNjaGVkdWxlIG5vdCBzZXQgYnkgY3JlZGVudGlhbHMiLDAp OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2toZXhkdW1wKCJhdXRoX3NlbmQgc2NoZWR1 bGUiLGs0X3NjaGVkLDgqMTYpOwotCi0gICAgICAgICAgICBkZXNfc2V0X3JhbmRvbV9nZW5lcmF0 b3Jfc2VlZChjcmVkLnNlc3Npb24pOwotCi0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAg ICAgZGVzX25ld19yYW5kb21fa2V5KGs0X3Nlc3Npb25fa2V5KTsKLSAgICAgICAgICAgICAgICBk ZXNfZml4dXBfa2V5X3Bhcml0eShrNF9zZXNzaW9uX2tleSk7Ci0gICAgICAgICAgICB9IHdoaWxl ICggY2tfZGVzX2lzX3dlYWtfa2V5KGs0X3Nlc3Npb25fa2V5KSApOwotCi0gICAgICAgICAgICBj a2hleGR1bXAoImF1dGhfc2VuZCBkZXNfbmV3X3JhbmRvbV9rZXkoazRfc2Vzc2lvbl9rZXkpIiwK LSAgICAgICAgICAgICAgICAgICAgIGs0X3Nlc3Npb25fa2V5LDgpOwotCi0gICAgICAgICAgICAv KiBEZWNyeXB0IHRoZSBzZXNzaW9uIGtleSBzbyB0aGF0IHdlIGNhbiBzZW5kIGl0IHRvIHRoZSAq LwotICAgICAgICAgICAgLyogaG9zdCBhcyBhIGNoYWxsZW5nZSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi8KLSNpZmRlZiBOVAotICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0 KGs0X3Nlc3Npb25fa2V5LCBrNF9zZXNzaW9uX2tleSwgazRfc2NoZWQsIDApOwotI2Vsc2UgLyog TlQgKi8KLSAgICAgICAgICAgIGRlc19lY2JfZW5jcnlwdCgmazRfc2Vzc2lvbl9rZXksICZrNF9z ZXNzaW9uX2tleSwgazRfc2NoZWQsIDApOwotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICBj a2hleGR1bXAoCi0gICAgICAgICAgICAgICAgImF1dGhfc2VuZCBkZXNfZWNiX2VuY3J5cHQoazRf c2Vzc2lvbl9rZXksazRfc2Vzc2lvbl9rZXksMCkiLAotICAgICAgICAgICAgICAgIGs0X3Nlc3Np b25fa2V5LDgKLSAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIC8qIFByZXBhcmUg dGhlIHJlc3VsdCBvZiB0aGUgY2hhbGxlbmdlICovCi0gICAgICAgICAgICAvKiBEZWNyeXB0IHRo ZSBzZXNzaW9uX2tleSwgYWRkIDEsIGFuZCB0aGVuIGVuY3J5cHQgaXQgKi8KLSAgICAgICAgICAg IC8qIFRoZSByZXN1bHQgc3RvcmVkIGluIGs0X2NoYWxsZW5nZSBzaG91bGQgbWF0Y2ggdGhlICAq LwotICAgICAgICAgICAgLyogS1JCNF9SRVNQT05TRSB2YWx1ZSBmcm9tIHRoZSBob3N0LiAgICAg ICAgICAgICAgICAgICovCi0jaWZkZWYgTlQKLSAgICAgICAgICAgIGRlc19lY2JfZW5jcnlwdChr NF9zZXNzaW9uX2tleSwgazRfY2hhbGxlbmdlLCBrNF9zY2hlZCwgMCk7Ci0jZWxzZSAvKiBOVCAq LwotICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KCZrNF9zZXNzaW9uX2tleSwgJms0X2NoYWxs ZW5nZSwgazRfc2NoZWQsIDApOwotI2VuZGlmIC8qIE5UICovCi0KLSAgICAgICAgICAgIGNraGV4 ZHVtcCgiYXV0aF9zZW5kIGRlc19lY2JfZW5jcnlwdChrNF9zZXNzaW9uX2tleSxrNF9jaGFsbGVu Z2UsMCkiLAotICAgICAgICAgICAgICAgICAgICAgazRfY2hhbGxlbmdlLDgpOwotI2VuZGlmIC8q IE1JVF9DVVJSRU5UICovCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgKiBJbmNyZW1lbnQg dGhlIGNoYWxsZW5nZSBieSAxLCBhbmQgZW5jcnlwdCBpdCBmb3IKLSAgICAgICAgICAgICogbGF0 ZXIgY29tcGFyaXNvbi4KLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBmb3IgKGkgPSA3OyBp ID49IDA7IC0taSkgewotICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCB4OwotICAgICAgICAg ICAgICAgIHggPSAodW5zaWduZWQgaW50KWs0X2NoYWxsZW5nZVtpXSArIDE7Ci0gICAgICAgICAg ICAgICAgazRfY2hhbGxlbmdlW2ldID0geDsgICAgLyogaWdub3JlIG92ZXJmbG93ICovCi0gICAg ICAgICAgICAgICAgaWYgKHggPCAyNTYpICAgICAgICAgICAgLyogaWYgbm8gb3ZlcmZsb3csIGFs bCBkb25lICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgY2toZXhkdW1wKCJhdXRoX3NlbmQgazRfY2hhbGxlbmdlKzEiLGs0X2NoYWxsZW5n ZSw4KTsKLSNpZmRlZiBNSVRfQ1VSUkVOVAotICAgICAgICAgICAgZGF0YS5kYXRhID0gazRfY2hh bGxlbmdlOwotICAgICAgICAgICAgZGF0YS5sZW5ndGggPSA4OwotCi0gICAgICAgICAgICBlbmNk YXRhLmNpcGhlcnRleHQuZGF0YSA9IGs0X2NoYWxsZW5nZTsKLSAgICAgICAgICAgIGVuY2RhdGEu Y2lwaGVydGV4dC5sZW5ndGggPSA4OwotICAgICAgICAgICAgZW5jZGF0YS5lbmN0eXBlID0gRU5D VFlQRV9VTktOT1dOOwotCi0gICAgICAgICAgICBpZiAoY29kZSA9IGtyYjVfY19lbmNyeXB0KGs1 X2NvbnRleHQsICZrNF9rcmJrZXksIDAsIDAsICZkYXRhLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmVuY2RhdGEpKSB7Ci0gICAgICAgICAgICAgICAgY29tX2Vycigi bGlidGVsbmV0IiwgY29kZSwgIndoaWxlIGVuY3J5cHRpbmcgcmFuZG9tIGtleSIpOwotICAgICAg ICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAgIH0KLSNlbHNlIC8qIE1JVF9DVVJSRU5U ICovCi0jaWZkZWYgTlQKLSAgICAgICAgICAgIGRlc19lY2JfZW5jcnlwdChrNF9jaGFsbGVuZ2Us IGs0X2NoYWxsZW5nZSwgazRfc2NoZWQsIDEpOwotI2Vsc2UgLyogTlQgKi8KLSAgICAgICAgICAg IGRlc19lY2JfZW5jcnlwdCgmazRfY2hhbGxlbmdlLCAmazRfY2hhbGxlbmdlLCBrNF9zY2hlZCwg MSk7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAgIGNraGV4ZHVtcCgiYXV0aF9zZW5kIGRl c19lY2JfZW5jcnlwdChrNF9zZXNzaW9uX2tleSxrNF9jaGFsbGVuZ2UsMSkiLAotICAgICAgICAg ICAgICAgICAgICAgazRfY2hhbGxlbmdlLDgpOwotI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCi0g ICAgICAgIH0KLSNlbmRpZiAgLyogRU5DUllQVElPTiAqLwotI2VuZGlmIC8qIFJFTU9WRV9GT1Jf RVhQT1JUICovCi0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIEtSQjQgKi8KLSNpZmRlZiBHU1NB UElfS1JCNQotICAgIGNhc2UgQVVUSFRZUEVfR1NTQVBJX0tSQjU6Ci0gICAgICAgIGZvciAoIGk9 MCA7IGk8Z3NzX3NlbmRfdG9rLmxlbmd0aCA7IGkrKyApIHsKLSAgICAgICAgICAgIGlmICggKChj aGFyICopZ3NzX3NlbmRfdG9rLnZhbHVlKVtpXSA9PSBJQUMgKQotICAgICAgICAgICAgICAgIGlh Y2NudCsrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBnc3Nfc2VuZF90b2subGVuZ3RoICsg aWFjY250ICsgMTAgPCBzaXplb2YoYnVmKSApCi0gICAgICAgICAgICBnc3Nfc2VuZF90b2subGVu Z3RoID0gY29weV9mb3JfbmV0KCZidWZbN10sIGdzc19zZW5kX3Rvay52YWx1ZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX3NlbmRfdG9rLmxlbmd0 aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdzc19zZW5kX3Rvay5sZW5ndGggPSAwOwot ICAgICAgICBzcHJpbnRmKCZidWZbZ3NzX3NlbmRfdG9rLmxlbmd0aCs3XSwgIiVjJWMiLCBJQUMs IFNFKTsgICAgICAgLyogc2FmZSAqLwotICAgICAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBk ZWJzZXMpIHsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgY2ttYWt4bXNnKHRuX21z ZyxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRF TE9QVChURUxPUFRfQVVUSEVOVElDQVRJT04pLCIgSVMgIiwKLSAgICAgICAgICAgICAgICAgICAg ICBBVVRIVFlQRV9OQU1FKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24pLCIgIiwKLSAgICAgICAgICAg ICAgICAgICAgICBBVVRITU9ERV9OQU1FKG1vZGUpLCIgQVVUSCAiLAotICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAotICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgIHRuX2hleCgoY2hhciAqKXRuX21zZyxUTl9NU0dfTEVOLCZidWZbN10sZ3Nz X3NlbmRfdG9rLmxlbmd0aCk7Ci0gICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0Ui LFROX01TR19MRU4pOwotICAgICAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7Ci0gICAg ICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICAgICAg fQotI2lmZGVmIE9TMgotICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRF X1dBSVQgKTsKLSNlbmRpZgotICAgICAgICB0dG9sKChDSEFSICopYnVmLCBnc3Nfc2VuZF90b2su bGVuZ3RoKzkpOwotI2lmZGVmIE9TMgotICAgICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNl bmRpZgotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBHU1NBUElfS1JCNSAqLwotI2lmZGVmIEtS QjUKLSAgICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y1OgotICAgICAgICBkZWJ1ZyhGMTExLCJh dXRoX3NlbmQgS1JCNSIsIms1X2F1dGgubGVuZ3RoIixrNV9hdXRoLmxlbmd0aCk7Ci0gICAgICAg IGZvciAoIGk9MCA7IGk8azVfYXV0aC5sZW5ndGggOyBpKysgKSB7Ci0gICAgICAgICAgICBpZiAo IChjaGFyICopazVfYXV0aC5kYXRhW2ldID09IElBQyApCi0gICAgICAgICAgICAgICAgaWFjY250 Kys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCBrNV9hdXRoLmxlbmd0aCArIGlhY2NudCArIDEw IDwgc2l6ZW9mKGJ1ZikgKSB7Ci0JICAgIGs1X2F1dGgubGVuZ3RoID0gY29weV9mb3JfbmV0KCZi dWZbN10sCi0JCQkJCSAgKENIQVIgKilrNV9hdXRoLmRhdGEsCi0JCQkJCSAgazVfYXV0aC5sZW5n dGgpOwotCX0gZWxzZSB7Ci0gICAgICAgICAgZGVidWcoRjEwMCwiYXV0aF9zZW5kKCkgS1JCNSBh dXRoIGRhdGEgdG9vIGxhcmdlIGZvciBidWZmZXIiLCIiLDApOwotICAgICAgICAgIGs1X2F1dGgu bGVuZ3RoID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHNwcmludGYoKGNoYXIgKikmYnVmW2s1 X2F1dGgubGVuZ3RoKzddLCAiJWMlYyIsIElBQywgU0UpOyAvKiBzYWZlICovCi0gICAgICAgIGlm IChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICAgICAgaW50IGk7Ci0gICAg ICAgICAgICBja21ha3htc2codG5fbXNnLFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAg ICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9BVVRIRU5USUNBVElPTiksIiBJUyAi LAotICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoYXV0aGVudGljYXRpb25fdmVy c2lvbiksIiAiLAotICAgICAgICAgICAgICAgICAgICAgIEFVVEhNT0RFX05BTUUobW9kZSksIiBB VVRIICIsCi0gICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCi0g ICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgdG5faGV4KChDSEFSICopdG5fbXNn LFROX01TR19MRU4sJmJ1Zls3XSxrNV9hdXRoLmxlbmd0aCk7Ci0gICAgICAgICAgICBja3N0cm5j YXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOwotICAgICAgICAgICAgZGVidWcoRjEwMCx0 bl9tc2csIiIsMCk7Ci0gICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWco dG5fbXNnKTsKLSAgICAgICAgfQotI2lmZGVmIE9TMgotICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0 ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotICAgICAgICB0dG9sKChDSEFSICop YnVmLCBrNV9hdXRoLmxlbmd0aCs5KTsKLSNpZmRlZiBPUzIKLSAgICAgICAgUmVsZWFzZVRlbG5l dE11dGV4KCk7Ci0jZW5kaWYKLSNpZmRlZiBIRUlNREFMCi0gICAgICAgIGtyYjVfZGF0YV9mcmVl KCZrNV9hdXRoKTsKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICAgICAga3JiNV9mcmVlX2RhdGFf Y29udGVudHMoazVfY29udGV4dCwmazVfYXV0aCk7Ci0gICAgICAgIG1lbXNldCgmazVfYXV0aCww LHNpemVvZihrcmI1X2RhdGEpKTsKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAgICAgIGJyZWFr OwotI2VuZGlmIC8qIEtSQjUgKi8KLSAgICB9Ci0gICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKLX0K LQotLyoKLSAqIEZ1bmN0aW9uOiBQYXJzZSBhdXRoZW50aWNhdGlvbiBSRVBMWSBjb21tYW5kCi0g KgotICogUGFyYW1ldGVyczoKLSAqICBwYXJzZWRhdCAtIHRoZSBzdWItY29tbWFuZCBkYXRhLgot ICoKLSAqICAgICAgZW5kX3N1YiAtIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhlICdwYXJz ZWRhdCcgYXJyYXkgd2hpY2gKLSAqICAgICAgICAgICAgICBpcyB0aGUgbGFzdCBieXRlIGluIGEg c3ViLW5lZ290aWF0aW9uCi0gKgotICogUmV0dXJuczogS2VyYmVyb3MgZXJyb3IgY29kZS4KLSAq Lwotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1hdXRoX3JlcGx5KHVuc2lnbmVkIGNoYXIg KnBhcnNlZGF0LCBpbnQgZW5kX3N1YikKLSNlbHNlCi1hdXRoX3JlcGx5KHBhcnNlZGF0LGVuZF9z dWIpIHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0OyBpbnQgZW5kX3N1YjsKLSNlbmRpZgotewotICAg IGludCBuID0gQVVUSF9GQUlMVVJFOwotCi0gICAgaWYgKCBwYXJzZWRhdFsyXSAhPSBhdXRoZW50 aWNhdGlvbl92ZXJzaW9uICkgewotICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0aW9uIHZlcnNp b24gbWlzbWF0Y2ggKCVzIFslZF0gIT0gJXMgWyVkXSlcclxuIiwKLSAgICAgICAgICAgICAgICBB VVRIVFlQRV9OQU1FKHBhcnNlZGF0WzJdKSxwYXJzZWRhdFsyXSwKLSAgICAgICAgICAgICAgICBB VVRIVFlQRV9OQU1FKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24pLGF1dGhlbnRpY2F0aW9uX3ZlcnNp b24pOwotICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgcmV0dXJu KEFVVEhfRkFJTFVSRSk7Ci0gICAgfQotICAgIGlmICggcGFyc2VkYXRbM10gIT0gKGF1dGhfaG93 fGF1dGhfY3J5cHR8YXV0aF9md2QpICkgewotICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0aW9u IG1vZGUgbWlzbWF0Y2ggKCVzICE9ICVzKVxyXG4iLAotICAgICAgICAgICAgICAgIEFVVEhNT0RF X05BTUUocGFyc2VkYXRbM10pLAotICAgICAgICAgICAgICAgIEFVVEhNT0RFX05BTUUoYXV0aF9o b3d8YXV0aF9jcnlwdHxhdXRoX2Z3ZCkpOwotICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVK RUNUKTsKLSAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7Ci0gICAgfQotCi0jaWZkZWYgS1JC NAotICAgIGlmIChhdXRoZW50aWNhdGlvbl92ZXJzaW9uID09IEFVVEhUWVBFX0tFUkJFUk9TX1Y0 KQotICAgICAgICBuID0gazRfYXV0aF9yZXBseShwYXJzZWRhdCwgZW5kX3N1Yik7Ci0jZW5kaWYK LSNpZmRlZiBLUkI1Ci0gICAgaWYgKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPT0gQVVUSFRZUEVf S0VSQkVST1NfVjUpCi0gICAgICAgIG4gPSBrNV9hdXRoX3JlcGx5KGF1dGhfaG93fGF1dGhfY3J5 cHR8YXV0aF9md2QsIHBhcnNlZGF0LCBlbmRfc3ViKTsKLSNlbmRpZgotI2lmZGVmIENLX1NSUAot ICAgIGlmIChhdXRoZW50aWNhdGlvbl92ZXJzaW9uID09IEFVVEhUWVBFX1NSUCkgewotI2lmbmRl ZiBQUkVfU1JQXzFfN18zCi0gICAgICAgIG4gPSBuZXdfc3JwX3JlcGx5KGF1dGhfaG93fGF1dGhf Y3J5cHR8YXV0aF9md2QsIHBhcnNlZGF0LCBlbmRfc3ViKTsKLSNlbHNlIC8qIFBSRV9TUlBfMV83 XzMgKi8KLSAgICAgICAgbiA9IHNycF9yZXBseShhdXRoX2hvd3xhdXRoX2NyeXB0fGF1dGhfZndk LCBwYXJzZWRhdCwgZW5kX3N1Yik7Ci0jZW5kaWYgLyogUFJFX1NSUF8xXzdfMyAqLwotICAgIH0K LSNlbmRpZiAvKiBTUlAgKi8KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoYXV0aGVudGljYXRpb25f dmVyc2lvbiA9PSBBVVRIVFlQRV9TU0wpCi0gICAgICAgIG4gPSBzc2xfcmVwbHkoYXV0aF9ob3d8 YXV0aF9jcnlwdHxhdXRoX2Z3ZCwgcGFyc2VkYXQsIGVuZF9zdWIpOwotI2VuZGlmIC8qIFNTTCAq LwotI2lmZGVmIE5UTE0KLSAgICBpZiAoYXV0aGVudGljYXRpb25fdmVyc2lvbiA9PSBBVVRIVFlQ RV9OVExNKQotICAgICAgICBuID0gbnRsbV9yZXBseShhdXRoX2hvd3xhdXRoX2NyeXB0fGF1dGhf ZndkLCBwYXJzZWRhdCwgZW5kX3N1Yik7Ci0jZW5kaWYgLyogTlRMTSAqLwotICAgIHJldHVybiBu OwotfQotCi0KLS8qCi0gKiBGdW5jdGlvbjogUGFyc2UgYXV0aGVudGljYXRpb24gSVMgY29tbWFu ZAotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgcGFyc2VkYXQgLSB0aGUgc3ViLWNvbW1hbmQgZGF0 YS4KLSAqCi0gKiAgICAgIGVuZF9zdWIgLSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIGluIHRoZSAn cGFyc2VkYXQnIGFycmF5IHdoaWNoCi0gKiAgICAgICAgICAgICAgaXMgdGhlIGxhc3QgYnl0ZSBp biBhIHN1Yi1uZWdvdGlhdGlvbgotICoKLSAqIFJldHVybnM6IEtlcmJlcm9zIGVycm9yIGNvZGUu Ci0gKi8KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotYXV0aF9pcyh1bnNpZ25lZCBjaGFy ICpwYXJzZWRhdCwgaW50IGVuZF9zdWIpCi0jZWxzZQotYXV0aF9pcyhwYXJzZWRhdCxlbmRfc3Vi KSB1bnNpZ25lZCBjaGFyICpwYXJzZWRhdDsgaW50IGVuZF9zdWI7Ci0jZW5kaWYKLXsKLSAgICBp bnQgbiA9IEFVVEhfRkFJTFVSRTsKLQotICAgIGlmICggcGFyc2VkYXRbMl0gPT0gQVVUSFRZUEVf TlVMTCApIHsKLSAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgIHJl dHVybihBVVRIX0ZBSUxVUkUpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogIElmIENMSUVOVF9D SE9PU0VfT05DRSBpcyBzZWxlY3RlZCB0aGUgc2VydmVyIHdpbGwgbm90IGFsbG93IHRoZQotICAg ICAqICBjbGllbnQgdG8gc3dpdGNoIHRvIGFuIGFsdGVybmF0ZSBhdXRoZW50aWNhdGlvbiBtZXRo b2QgaWYgdGhlIG9uZQotICAgICAqICBpdCBvcmlnaW5hbGx5IHNlbGVjdGVkIGZhaWxzLiAgKGll LCBpZiB0aGUgaG9zdCdzIFNSUCBwYXJhbWV0ZXJzCi0gICAgICogIGFyZSBpbnZhbGlkLikgIEhv d2V2ZXIsIEkgdGhpbmsgdGhpcyBpcyBhIGJpdCBvZiBhIHNlY3VyaXR5IHJpc2sKLSAgICAgKiAg c2luY2UgYWxsb3dpbmcgdGhhdCBmdW5jdGlvbmFsaXR5IG1lYW5zIHRoYXQgaXQgaXMgaW1wb3Nz aWJsZSB0bwotICAgICAqICBkZXRlY3QgaWYgYW4gYXR0YWNrIGlzIGJlaW5nIGNhcnJpZWQgb3V0 IG9uCi0gICAgICovCi0jZGVmaW5lIENMSUVOVF9DSE9PU0VfT05DRQotI2lmZGVmIENMSUVOVF9D SE9PU0VfT05DRQotICAgIGlmICggYXV0aGVudGljYXRpb25fdmVyc2lvbiA9PSBBVVRIVFlQRV9B VVRPICkKLSNlbmRpZiAvKiBDTElFTlRfQ0hPT1NFX09OQ0UgKi8KLSAgICB7Ci0gICAgICAgIC8q IHRoaXMgYmxvY2sgb2YgY29kZSBuZWVkcyB0byBjaGVjayB0aGUgaW5pdGlhbCBwYXJhbWV0ZXJz ICovCi0gICAgICAgIC8qIHRvIGVuc3VyZSB0aGF0IHRob3NlIHJldHVybmVkIG1hdGNoIG9uZSBv ZiB0aGUgc2V0cyB0aGF0ICovCi0gICAgICAgIC8qIHdlcmUgc2VudCB0byB0aGUgY2xpZW50IGlu IHRoZSBmaXJzdCBwbGFjZS4gICAgICAgICAgICAgICovCi0KLSAgICAgICAgaW50IGk9MDsKLSAg ICAgICAgZm9yICggaT00OyBzdHJfcmVxdWVzdFtpXSAhPSBJQUMgOyBpKz0yKSB7Ci0gICAgICAg ICAgICBpZiAoc3RyX3JlcXVlc3RbaV0gPT0gcGFyc2VkYXRbMl0gJiYKLSAgICAgICAgICAgICAg ICAgc3RyX3JlcXVlc3RbaSsxXSA9PSBwYXJzZWRhdFszXSkKLSAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggc3RyX3JlcXVlc3RbaV0gPT0gSUFDICkgewot ICAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGF1dGhlbnRpY2F0aW9uIHR5cGUgcGFpciAoJXMs JXMpXHJcbiIsCi0gICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUocGFyc2VkYXRbMl0p LAotICAgICAgICAgICAgICAgICAgICBBVVRITU9ERV9OQU1FKHBhcnNlZGF0WzNdKSk7Ci0gICAg ICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgIHJldHVybihB VVRIX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF1dGhlbnRpY2F0aW9uX3Zl cnNpb24gIT0gcGFyc2VkYXRbMl0pIHsKLSAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNp b24gPSBwYXJzZWRhdFsyXTsKLSAgICAgICAgICAgIGF1dGhfaG93ID0gKHBhcnNlZGF0WzNdICYg QVVUSF9IT1dfTUFTSyk7Ci0gICAgICAgICAgICBhdXRoX2NyeXB0ID0gKHBhcnNlZGF0WzNdICYg QVVUSF9FTkNSWVBUX01BU0spOwotICAgICAgICAgICAgYXV0aF9md2QgPSAocGFyc2VkYXRbM10g JiBJTklfQ1JFRF9GV0RfTUFTSyk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJhdXRoX2lzIiwi YXV0aGVudGljYXRpb25fdmVyc2lvbiIsCi0gICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlv bl92ZXJzaW9uKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImF1dGhfaXMiLCJhdXRoX2hvdyIs YXV0aF9ob3cpOwotICAgICAgICAgICAgZGVidWcoRjExMSwiYXV0aF9pcyIsImF1dGhfY3J5cHQi LGF1dGhfY3J5cHQpOwotICAgICAgICAgICAgZGVidWcoRjExMSwiYXV0aF9pcyIsImF1dGhfZndk IixhdXRoX2Z3ZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZmRlZiBDTElFTlRfQ0hPT1NFX09O Q0UKLSAgICBpZiAoIHBhcnNlZGF0WzJdICE9IGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gKSB7Ci0g ICAgICAgIHByaW50ZigiQXV0aGVudGljYXRpb24gdmVyc2lvbiBtaXNtYXRjaCAoJXMgWyVkXSAh PSAlcyBbJWRdKVxyXG4iLAotICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUocGFyc2VkYXRb Ml0pLHBhcnNlZGF0WzJdLAotICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoYXV0aGVudGlj YXRpb25fdmVyc2lvbiksYXV0aGVudGljYXRpb25fdmVyc2lvbik7Ci0gICAgICAgIGF1dGhfZmlu aXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAgICB9 Ci0gICAgaWYgKCBwYXJzZWRhdFszXSAhPSAoYXV0aF9ob3d8YXV0aF9jcnlwdHxhdXRoX2Z3ZCkg KSB7Ci0gICAgICAgIHByaW50ZigiQXV0aGVudGljYXRpb24gbW9kZSBtaXNtYXRjaCAoJXMgIT0g JXMpXHJcbiIsCi0gICAgICAgICAgICAgICAgQVVUSE1PREVfTkFNRShwYXJzZWRhdFszXSksCi0g ICAgICAgICAgICAgICAgQVVUSE1PREVfTkFNRShhdXRoX2hvd3xhdXRoX2NyeXB0fGF1dGhfZndk KSk7Ci0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICByZXR1cm4o QVVUSF9GQUlMVVJFKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0xJRU5UX0NIT09TRV9PTkNFICovCi0K LSAgICBzd2l0Y2ggKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24pIHsKLSNpZmRlZiBLUkI0Ci0gICAg Y2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNDoKLSAgICAgICAgbiA9IGs0X2F1dGhfaXMocGFyc2Vk YXQsIGVuZF9zdWIpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotI2lmZGVmIEtSQjUKLSAgICBj YXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y1OgotICAgICAgICBuID0gazVfYXV0aF9pcyhwYXJzZWRh dFszXSxwYXJzZWRhdCwgZW5kX3N1Yik7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0jaWZkZWYg Q0tfU1JQCi0gICAgY2FzZSBBVVRIVFlQRV9TUlA6Ci0jaWZuZGVmIFBSRV9TUlBfMV83XzMKLSAg ICAgICAgbiA9IG5ld19zcnBfaXMocGFyc2VkYXRbM10sIHBhcnNlZGF0LCBlbmRfc3ViKTsKLSNl bHNlIC8qIFBSRV9TUlBfMV83XzMgKi8KLSAgICAgICAgbiA9IHNycF9pcyhwYXJzZWRhdFszXSwg cGFyc2VkYXQsIGVuZF9zdWIpOwotI2VuZGlmIC8qIFBSRV9TUlBfMV83XzMgKi8KLSAgICAgICAg YnJlYWs7Ci0jZW5kaWYgLyogU1JQICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgY2FzZSBBVVRIVFlQ RV9TU0w6Ci0gICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05H X1JGOwotICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JG OwotICAgICAgICBuID0gc3NsX2lzKHBhcnNlZGF0LCBlbmRfc3ViKTsKLSAgICAgICAgYnJlYWs7 Ci0jZW5kaWYgLyogU1NMICovCi0jaWZkZWYgTlRMTQotICAgIGNhc2UgQVVUSFRZUEVfTlRMTToK LSAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0g ICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0gICAg ICAgIG4gPSBudGxtX2lzKHBhcnNlZGF0LCBlbmRfc3ViKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5k aWYgLyogTlRMTSAqLwotICAgIGNhc2UgQVVUSFRZUEVfTlVMTDoKLSAgICBkZWZhdWx0OgotICAg ICAgICBuID0gQVVUSF9GQUlMVVJFOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJhdXRoX2lzIiwi biIsbik7Ci0gICAgcmV0dXJuIG47Ci19Ci0KLS8qCi0gKiBGdW5jdGlvbjogUGFyc2UgYXV0aGVu dGljYXRpb24gTkFNRSBjb21tYW5kCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBwYXJzZWRhdCAt IHRoZSBzdWItY29tbWFuZCBkYXRhLgotICoKLSAqICAgICAgZW5kX3N1YiAtIGluZGV4IG9mIHRo ZSBjaGFyYWN0ZXIgaW4gdGhlICdwYXJzZWRhdCcgYXJyYXkgd2hpY2gKLSAqICAgICAgICAgICAg ICBpcyB0aGUgbGFzdCBieXRlIGluIGEgc3ViLW5lZ290aWF0aW9uCi0gKgotICogUmV0dXJuczog S2VyYmVyb3MgZXJyb3IgY29kZS4KLSAqLwotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1h dXRoX25hbWUodW5zaWduZWQgY2hhciAqcGFyc2VkYXQsIGludCBlbmRfc3ViKQotI2Vsc2UKLWF1 dGhfbmFtZShwYXJzZWRhdCxlbmRfc3ViKSB1bnNpZ25lZCBjaGFyICpwYXJzZWRhdDsgaW50IGVu ZF9zdWI7Ci0jZW5kaWYKLXsKLSAgICBpbnQgbGVuID0gKGVuZF9zdWItMikgPiA2MyA/IDYzIDog KGVuZF9zdWItMik7Ci0gICAgaWYgKCBsZW4gPiAwICYmIChsZW4gKyAxKSA8IHNpemVvZihzelVz ZXJOYW1lUmVxdWVzdGVkKSkgewotICAgICAgICBtZW1jcHkoc3pVc2VyTmFtZVJlcXVlc3RlZCwm cGFyc2VkYXRbMl0sbGVuKTsgICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgc3pVc2VyTmFt ZVJlcXVlc3RlZFtsZW5dID0gJ1wwJzsKLSAgICB9IGVsc2UKLSAgICAgIHN6VXNlck5hbWVSZXF1 ZXN0ZWRbMF0gPSAnXDAnOwotICAgIGRlYnVnKEYxMTEsImF1dGhfbmFtZSBzelVzZXJOYW1lUmVx dWVzdGVkIixzelVzZXJOYW1lUmVxdWVzdGVkLGxlbik7Ci0gICAgcmV0dXJuKEFVVEhfU1VDQ0VT Uyk7Ci19Ci0KLS8qCi0gKiBGdW5jdGlvbjogUGFyc2UgdGhlIGF0aG9yaXphdGlvbiBzdWItb3B0 aW9ucyBhbmQgcmVwbHkuCi0gKgotICogUGFyYW1ldGVyczoKLSAqICAgICAgcGFyc2VkYXQgLSBz dWItb3B0aW9uIHN0cmluZyB0byBwYXJzZS4KLSAqCi0gKiAgICAgIGVuZF9zdWIgLSBsYXN0IGNo YXJjdGVyIHBvc2l0aW9uIGluIHBhcnNlZGF0LgotICovCi1pbnQKLWF1dGhfcGFyc2UodW5zaWdu ZWQgY2hhciAqcGFyc2VkYXQsIGludCBlbmRfc3ViKQotewotICAgIGludCByYyA9IEFVVEhfRkFJ TFVSRTsKLSAgICBzd2l0Y2ggKHBhcnNlZGF0WzFdKSB7Ci0gICAgY2FzZSBURUxRVUFMX1NFTkQ6 Ci0gICAgICAgIHJjID0gYXV0aF9zZW5kKHBhcnNlZGF0LCBlbmRfc3ViKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSBURUxRVUFMX1JFUExZOgotICAgICAgICByYz0gYXV0aF9yZXBseShwYXJz ZWRhdCwgZW5kX3N1Yik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVEVMUVVBTF9JUzoKLSAg ICAgICAgcmMgPSBhdXRoX2lzKHBhcnNlZGF0LCBlbmRfc3ViKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSBURUxRVUFMX05BTUU6Ci0gICAgICAgIHJjID0gYXV0aF9uYW1lKHBhcnNlZGF0LCBl bmRfc3ViKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsImF1dGhfcGFy c2UiLCJyYyIscmMpOwotICAgIHJldHVybihyYyk7Ci19Ci0KLQotLyoKLSAqIEZ1bmN0aW9uOiBJ bml0aWFsaXphdGlvbiByb3V0aW5lIGNhbGxlZCBrc3RyZWFtIGVuY3J5cHRpb24gc3lzdGVtLgot ICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgZGF0YSAtIHVzZXIgZGF0YS4KLSAqLwotaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLWF1dGhfaW5pdChrc3RyZWFtIGtzKQotI2Vsc2UKLWF1dGhfaW5pdChrcykg a3N0cmVhbV9wdHIga3M7Ci0jZW5kaWYKLXsKLSNpZmRlZiBGT1JXQVJECi0gICAgZm9yd2FyZGVk X3RpY2tldHMgPSAwOyAgLyogd2VyZSB0aWNrZXRzIGZvcndhcmRlZD8gKi8KLSNlbmRpZiAvKiBG T1JXQVJEICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIGVuY3J5cHRfaW5pdChrcyxjeF90 eXBlKTsKLSNlbmRpZgotICAgIHJldHVybiAwOwotfQotCi0KLS8qCi0gKiBGdW5jdGlvbjogRGVz dHJveSByb3V0aW5lIGNhbGxlZCBrc3RyZWFtIGVuY3J5cHRpb24gc3lzdGVtLgotICoKLSAqIFBh cmFtZXRlcnM6Ci0gKiAgZGF0YSAtIHVzZXIgZGF0YS4KLSAqLwotVk9JRAotI2lmZGVmIENLX0FO U0lDCi1hdXRoX2Rlc3Ryb3kodm9pZCkKLSNlbHNlCi1hdXRoX2Rlc3Ryb3koKQotI2VuZGlmCi17 Ci19Ci0KLQotLyoKLSAqIEZ1bmN0aW9uOiBDYWxsYmFjayB0byBlbmNyeXB0IGEgYmxvY2sgb2Yg Y2hhcmFjdGVycwotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgb3V0IC0gcmV0dXJuIGFzIHBvaW50 ZXIgdG8gY29udmVydGVkIGJ1ZmZlci4KLSAqCi0gKiAgaW4gLSB0aGUgYnVmZmVyIHRvIGNvbnZl cnQKLSAqCi0gKiBSZXR1cm5zOiBudW1iZXIgb2YgY2hhcmFjdGVycyBjb252ZXJ0ZWQuCi0gKi8K LWludAotI2lmZGVmIENLX0FOU0lDCi1hdXRoX2VuY3J5cHQoc3RydWN0IGtzdHJlYW1fZGF0YV9i bG9jayAqb3V0LAotICAgICAgICAgICAgIHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKmluKQot I2Vsc2UKLWF1dGhfZW5jcnlwdChvdXQsaW4pCi0gICAgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9j ayAqb3V0OyBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICppbjsKLSNlbmRpZgotewotICAgIG91 dC0+cHRyID0gaW4tPnB0cjsKLQotICAgIG91dC0+bGVuZ3RoID0gaW4tPmxlbmd0aDsKLQotICAg IHJldHVybihvdXQtPmxlbmd0aCk7Ci19Ci0KLQotLyoKLSAqIEZ1bmN0aW9uOiBDYWxsYmFjayB0 byBkZWNyeXB0IGEgYmxvY2sgb2YgY2hhcmFjdGVycwotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAg b3V0IC0gcmV0dXJuIGFzIHBvaW50ZXIgdG8gY29udmVydGVkIGJ1ZmZlci4KLSAqCi0gKiAgaW4g LSB0aGUgYnVmZmVyIHRvIGNvbnZlcnQKLSAqCi0gKiBSZXR1cm5zOiBudW1iZXIgb2YgY2hhcmFj dGVycyBjb252ZXJ0ZWQuCi0gKi8KLWludAotI2lmZGVmIENLX0FOU0lDCi1hdXRoX2RlY3J5cHQo c3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqb3V0LAotICAgICAgICAgICAgIHN0cnVjdCBrc3Ry ZWFtX2RhdGFfYmxvY2sgKmluKQotI2Vsc2UKLWF1dGhfZGVjcnlwdChvdXQsaW4pCi0gICAgc3Ry dWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqb3V0OyBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICpp bjsKLSNlbmRpZgotewotICAgIG91dC0+cHRyID0gaW4tPnB0cjsKLQotICAgIG91dC0+bGVuZ3Ro ID0gaW4tPmxlbmd0aDsKLQotICAgIHJldHVybihvdXQtPmxlbmd0aCk7Ci19Ci0KLSNpZmRlZiBL UkI0Ci0jaWZkZWYgTlQKLXZvaWQKLWNrX2tyYjRfZGVidWcoaW50IHgpCi17Ci0gICAgc2V0X2ty Yl9kZWJ1Zyh4KTsKLSAgICBzZXRfa3JiX2FwX3JlcV9kZWJ1Zyh4KTsKLX0KLSNlbmRpZiAvKiBO VCAqLwotaW50Ci1ja19rcmI0X2F1dG9nZXRfVEdUKGNoYXIgKiByZWFsbSkKLXsKLSAgICBleHRl cm4gc3RydWN0IGtyYl9vcF9kYXRhIGtyYl9vcDsKLSAgICBleHRlcm4gc3RydWN0IGtyYjRfaW5p dF9kYXRhIGtyYjRfaW5pdDsKLSAgICBjaGFyIHBhc3N3ZFtQV0RfU1pdOwotICAgIGNoYXIgcHJv bXB0WzI1Nl07Ci0gICAgY2hhciAqIHNhdmVyZWFsbT1OVUxMOwotICAgIGludCAgcmMgPSAtMTsK LSAgICBleHRlcm4gY2hhciAqIGs0cHJwcm9tcHQ7Ci0gICAgZXh0ZXJuIGNoYXIgKiBrNHB3cHJv bXB0OwotCi0gICAgaW5pX2tlcmIoKTsgICAgICAgICAvKiBQbGFjZSBkZWZhdWx0cyBpbiBhYm92 ZSBzdHJ1Y3RzICovCi0gICAgcGFzc3dkWzBdID0gJ1wwJzsKLQotICAgIGlmICgga3JiNF9pbml0 LnByaW5jaXBhbCA9PSBOVUxMIHx8Ci0gICAgICAgICBrcmI0X2luaXQucHJpbmNpcGFsWzBdID09 ICdcMCcpIHsKLSAgICAgICAgaW50IG9rID0gdXFfdHh0KE5VTEwsIAotICAgICAgICAgICAgICAg ICBrNHBycHJvbXB0ICYmIGs0cHJwcm9tcHRbMF0gPwotICAgICAgICAgICAgICAgICBrNHBycHJv bXB0IDoKLSAgICAgICAgICAgICAgICAgIktlcmJlcm9zIDQgUHJpbmNpcGFsOiAiLAotICAgICAg ICAgICAgICAgICAyLCBOVUxMLCBwYXNzd2QsUFdEX1NaLTEsIE5VTEwsIERFRkFVTFRfVVFfVElN RU9VVCk7Ci0gICAgICAgIGlmICggb2sgJiYgcGFzc3dkWzBdICkKLSAgICAgICAgICAgIG1ha2Vz dHIoJmtyYjRfaW5pdC5wcmluY2lwYWwscGFzc3dkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg ICAgcmV0dXJuKDApOwotICAgIH0KLQotICAgIC8qIFNhdmUgcmVhbG0gaW4gaW5pdCBzdHJ1Y3R1 cmUgc28gaXQgY2FuIGJlIHJlc3RvcmVkICovCi0gICAgaWYgKCByZWFsbSApIHsKLSAgICAgICAg c2F2ZXJlYWxtID0ga3JiNF9pbml0LnJlYWxtOwotICAgICAgICBrcmI0X2luaXQucmVhbG0gPSBy ZWFsbTsKLSAgICB9Ci0KLSAgICBpZiAoIHBhc3N3ZFswXSB8fCAhKHB3YnVmWzBdICYmIHB3Zmxn KSApIHsKLSAgICAgICAgaW50IG9rOwotICAgICAgICBpZiAoIGs0cHdwcm9tcHQgJiYgazRwd3By b21wdFswXSAmJgotICAgICAgICAgICAgIChzdHJsZW4oazRwd3Byb21wdCkgKyBzdHJsZW4oa3Ji NF9pbml0LnByaW5jaXBhbCkgKwotICAgICAgICAgICAgICAgc3RybGVuKGtyYjRfaW5pdC5yZWFs bSkgLSA0KSA8IHNpemVvZihwcm9tcHQpKSB7Ci0gICAgICAgICAgICBzcHJpbnRmKHByb21wdCxr NHB3cHJvbXB0LGtyYjRfaW5pdC5wcmluY2lwYWwsa3JiNF9pbml0LnJlYWxtKTsKLSAgICAgICAg fSBlbHNlCi0gICAgICAgICAgICBja21ha3htc2cocHJvbXB0LHNpemVvZihwcm9tcHQpLAotICAg ICAgICAgICAgICAgICAgIktlcmJlcm9zIDQgUGFzc3dvcmQgZm9yICIsa3JiNF9pbml0LnByaW5j aXBhbCwiQCIsCi0gICAgICAgICAgICAgICAgICBrcmI0X2luaXQucmVhbG0sIjogIiwKLSAgICAg ICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAg ICBvayA9IHVxX3R4dChOVUxMLHByb21wdCwyLE5VTEwscGFzc3dkLFBXRF9TWi0xLE5VTEwsCi0J CSAgICBERUZBVUxUX1VRX1RJTUVPVVQpOwotICAgICAgICBpZiAoICFvayApCi0gICAgICAgICAg ICBwYXNzd2RbMF0gPSAnXDAnOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNrc3RybmNweShwYXNz d2QscHdidWYsc2l6ZW9mKHBhc3N3ZCkpOwotI2lmZGVmIE9TMgotICAgICAgICBpZiAoIHB3Y3J5 cHQgKQotICAgICAgICAgICAgY2tfZW5jcnlwdCgoY2hhciAqKXBhc3N3ZCk7Ci0jZW5kaWYgLyog T1MyICovCi0gICAgfQotCi0gICAgaWYgKCBwYXNzd2RbMF0gKSB7Ci0gICAgICAgIG1ha2VzdHIo JmtyYjRfaW5pdC5wYXNzd29yZCxwYXNzd2QpOwotICAgICAgICByYyA9IGNrX2tyYjRfaW5pdFRH VCgma3JiX29wLCAma3JiNF9pbml0KTsKLSAgICAgICAgZnJlZShrcmI0X2luaXQucGFzc3dvcmQp OwotICAgICAgICBrcmI0X2luaXQucGFzc3dvcmQgPSBOVUxMOwotICAgIH0KLQotICAgIGtyYjRf aW5pdC5wYXNzd29yZCA9IE5VTEw7Ci0gICAgbWVtc2V0KHBhc3N3ZCwwLFBXRF9TWik7Ci0KLSAg ICAvKiByZXN0b3JlIHJlYWxtIHRvIGluaXQgc3RydWN0dXJlIGlmIG5lZWRlZCAqLwotICAgIGlm ICggc2F2ZXJlYWxtICkKLSAgICAgICAga3JiNF9pbml0LnJlYWxtID0gc2F2ZXJlYWxtOwotICAg IHJldHVybihyYyA9PSAwKTsKLX0KLQotY2hhciAqCi1ja19rcmI0X3JlYWxtb2Zob3N0KGNoYXIg Kmhvc3QpCi17Ci0gICAgcmV0dXJuIChjaGFyICopa3JiX3JlYWxtb2Zob3N0KGhvc3QpOwotfQot Ci0vKgotICoKLSAqIEs0X2F1dGhfc2VuZCAtIGdldHMgYXV0aGVudGljYXRpb24gYml0cyB3ZSBu ZWVkIHRvIHNlbmQgdG8gS0RDLgotICoKLSAqIFJlc3VsdCBpcyBsZWZ0IGluIGF1dGgKLSAqCi0g KiBSZXR1cm5zOiAwIG9uIGZhaWx1cmUsIDEgb24gc3VjY2VzcwotICovCi1zdGF0aWMgaW50Ci0j aWZkZWYgQ0tfQU5TSUMKLWs0X2F1dGhfc2VuZCh2b2lkKQotI2Vsc2UKLWs0X2F1dGhfc2VuZCgp Ci0jZW5kaWYKLXsKLSAgICBpbnQgcj0wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJldHVybiB2YWx1ZSAqLwotICAgIGNoYXIgaW5zdGFuY2VbSU5TVF9TWisxXT0iIjsK LSAgICBjaGFyICpyZWFsbT1OVUxMOwotICAgIGNoYXIgdGd0WzQqUkVBTE1fU1orMV07Ci0KLSAg ICBtZW1zZXQoaW5zdGFuY2UsIDAsIHNpemVvZihpbnN0YW5jZSkpOwotCi0jaWZkZWYgQ09NTUVO VAotICAgIC8qIHdlIG9ubHkgbmVlZCB0byBjYWxsIGtyYl9nZXRfcGhvc3QgaWYgdGhlIGhvc3Ru YW1lICovCi0gICAgLyogaXMgbm90IGZ1bGx5IHF1YWxpZmllZC4gIEJ1dCB3ZSBoYXZlIGFscmVh ZHkgZG9uZSAgKi8KLSAgICAvKiB0aGlzIGluIG5ldG9wZW4oKSBjYWxsLiAgVGhpcyB3aWxsIHNh dmUgYSByb3VuZCBvZiAqLwotICAgIC8qIEROUyBxdWVyaWVzLiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCi0gICAgZGVidWcoRjExMCwiazRfYXV0aF9zZW5kIiwia3Ji X2dldF9waG9zdCIsMCk7Ci0gICAgaWYgKHJlYWxtID0gKGNoYXIgKilrcmJfZ2V0X3Bob3N0KHN6 SG9zdE5hbWUpKSB7Ci0gICAgICAgIGNrc3RybmNweShpbnN0YW5jZSwgcmVhbG0sIElOU1RfU1op OwotICAgIH0KLSNlbHNlIC8qIENPTU1FTlQgKi8KLSAgICB7Ci0gICAgICAgIGNoYXIgKnA7Ci0g ICAgICAgIGNrc3RybmNweShpbnN0YW5jZSwgc3pIb3N0TmFtZSwgSU5TVF9TWik7Ci0gICAgICAg IGZvciAoIHA9aW5zdGFuY2U7ICpwICYmICpwICE9ICcuJyA7IHArKyApOwotICAgICAgICAqcCA9 ICdcMCc7Ci0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIGRlYnVnKEYxMTAsIms0 X2F1dGhfc2VuZCIsImtyYl9nZXRfcmVhbG1vZmhvc3QiLDApOwotICAgIHJlYWxtID0gKGNoYXIg KilrcmJfcmVhbG1vZmhvc3Qoc3pIb3N0TmFtZSk7Ci0KLSAgICBpZiAoIXJlYWxtKSB7Ci0gICAg ICAgIHN0cmNweShzdHJUbXAsICJDYW4ndCBmaW5kIHJlYWxtIGZvciBob3N0IFwiIik7Ci0gICAg ICAgIGNrc3RybmNhdChzdHJUbXAsIHN6SG9zdE5hbWUsQVVUSFRNUEJMKTsKLSAgICAgICAgY2tz dHJuY2F0KHN0clRtcCwgIlwiIixBVVRIVE1QQkwpOwotICAgICAgICBwcmludGYoIj9LZXJiZXJv cyA0IGVycm9yOiAlc1xyXG4iLHN0clRtcCk7Ci0gICAgICAgIGtyYjRfZXJybm8gPSByOwotICAg ICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxzdHJUbXApOwotICAgICAgICByZXR1cm4oMCk7Ci0g ICAgfQotCi0gICAgY2ttYWttc2codGd0LHNpemVvZih0Z3QpLCJrcmJ0Z3QuIixyZWFsbSwiQCIs cmVhbG0pOwotICAgIHIgPSBja19rcmI0X3RrdF9pc3ZhbGlkKHRndCk7Ci0KLSAgICBpZiAoIHIg PD0gMCAmJiBrcmI0X2F1dG9nZXQgKQotICAgICAgICBja19rcmI0X2F1dG9nZXRfVEdUKHJlYWxt KTsKLQotICAgIGRlYnVnKEYxMTAsIms0X2F1dGhfc2VuZCIsImtyYl9ta19yZXEiLDApOwotICAg IHIgPSBrcmJfbWtfcmVxKCZrNF9hdXRoLCBrcmI0X2Rfc3J2ID8ga3JiNF9kX3NydiA6IEtSQjRf U0VSVklDRV9OQU1FLAotICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSwgcmVhbG0sIDApOwot Ci0gICAgaWYgKHIgPT0gMCkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJrNF9hdXRoX3NlbmQiLCJr cmJfZ2V0X2NyZWQiLDApOwotICAgICAgICByID0ga3JiX2dldF9jcmVkKGtyYjRfZF9zcnYgPyBr cmI0X2Rfc3J2IDogS1JCNF9TRVJWSUNFX05BTUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg IGluc3RhbmNlLCByZWFsbSwgJmNyZWQpOwotICAgICAgICBpZiAocikKLSAgICAgICAgICAgIGRl YnVnKEYxMTEsIms0X2F1dGhfc2VuZCIsImtyYl9nZXRfY3JlZCgpIGZhaWxlZCIscik7Ci0gICAg fQotICAgIGVsc2UKLSAgICAgICAgZGVidWcoRjExMSwiazRfYXV0aF9zZW5kIiwia3JiX21rX3Jl cSgpIGZhaWxlZCIscik7Ci0KLSAgICBpZiAocikgewotICAgICAgICBzdHJjcHkoc3RyVG1wLCAi Q2FuJ3QgZ2V0IFwiIik7Ci0gICAgICAgIGNrc3RybmNhdChzdHJUbXAsCi0gICAgICAgICAgICAg ICAgICBrcmI0X2Rfc3J2ID8ga3JiNF9kX3NydiA6IEtSQjRfU0VSVklDRV9OQU1FLEFVVEhUTVBC TCk7Ci0gICAgICAgIGlmIChpbnN0YW5jZVswXSAhPSAwKSB7Ci0gICAgICAgICAgICBja3N0cm5j YXQoc3RyVG1wLCAiLiIsQVVUSFRNUEJMKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChzdHJUbXAs IGluc3RhbmNlLEFVVEhUTVBCTCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY2F0KHN0clRt cCwgIkAiLEFVVEhUTVBCTCk7Ci0gICAgICAgIGNrc3RybmNhdChzdHJUbXAsIHJlYWxtLEFVVEhU TVBCTCk7Ci0gICAgICAgIGNrc3RybmNhdChzdHJUbXAsICJcIiB0aWNrZXRcclxuICAiLEFVVEhU TVBCTCk7Ci0gICAgICAgIGNrc3RybmNhdChzdHJUbXAsIChjaGFyICopa3JiX2dldF9lcnJfdGV4 dF9lbnRyeShyKSxBVVRIVE1QQkwpOwotICAgICAgICBkZWJ1ZyhGMTExLCJrNF9hdXRoX3NlbmQi LChjaGFyICopa3JiX2dldF9lcnJfdGV4dF9lbnRyeShyKSxyKTsKLSAgICAgICAgcHJpbnRmKCI/ S2VyYmVyb3MgNCBlcnJvcjogJXNcclxuIixzdHJUbXApOwotICAgICAgICBrcmI0X2Vycm5vID0g cjsKLSAgICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csa3JiX2dldF9lcnJfdGV4dF9lbnRyeShr cmI0X2Vycm5vKSk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0KLSNpZmRlZiBPUzIKLSAg ICBpZiAoICFzelVzZXJOYW1lWzBdIHx8ICFzdHJpY21wKHN6VXNlck5hbWUsY3JlZC5wbmFtZSkg KSB7Ci0gICAgICAgIGNrc3RybmNweShzelVzZXJOYW1lLCBjcmVkLnBuYW1lLCBVSURCVUZMRU4p OwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBrcmI0X2Vycm5vID0gcjsKLSAgICBtYWtl c3RyKCZrcmI0X2Vycm1zZyxrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5KGtyYjRfZXJybm8pKTsKLSAg ICBkZWJ1ZyhGMTEwLCJrNF9hdXRoX3NlbmQiLGtyYjRfZXJybXNnLDApOwotICAgIHJldHVybigx KTsKLX0KLQotLyoKLSAqIEZ1bmN0aW9uOiBLNCBwYXJzZSBhdXRoZW50aWNhdGlvbiByZXBseSBj b21tYW5kCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBwYXJzZWRhdCAtIHRoZSBzdWItY29tbWFu ZCBkYXRhLgotICoKLSAqICBlbmRfc3ViIC0gaW5kZXggb2YgdGhlIGNoYXJhY3RlciBpbiB0aGUg J3BhcnNlZGF0JyBhcnJheSB3aGljaAotICogICAgICAgICAgICAgIGlzIHRoZSBsYXN0IGJ5dGUg aW4gYSBzdWItbmVnb3RpYXRpb24KLSAqCi0gKiBSZXR1cm5zOiBLZXJiZXJvcyBlcnJvciBjb2Rl LgotICovCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWs0X2F1dGhfcmVwbHkodW5zaWdu ZWQgY2hhciAqcGFyc2VkYXQsIGludCBlbmRfc3ViKQotI2Vsc2UKLWs0X2F1dGhfcmVwbHkocGFy c2VkYXQsZW5kX3N1YikgdW5zaWduZWQgY2hhciAqcGFyc2VkYXQ7IGludCBlbmRfc3ViOwotI2Vu ZGlmCi17Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIFNlc3Npb25fS2V5IHNrZXk7Ci0jaWZk ZWYgTUlUX0NVUlJFTlQKLSAgICBrcmI1X2RhdGEga2RhdGE7Ci0gICAga3JiNV9lbmNfZGF0YSBl bmNkYXRhOwotICAgIGtyYjVfZXJyb3JfY29kZSBjb2RlOwotI2VuZGlmIC8qIE1JVF9DVVJSRU5U ICovCi0jZW5kaWYKLSAgICB0aW1lX3QgdDsKLSAgICBpbnQgeDsKLSAgICBpbnQgaTsKLQotICAg IGlmIChlbmRfc3ViIDwgNCB8fCBwYXJzZWRhdFsyXSAhPSBBVVRIVFlQRV9LRVJCRVJPU19WNCkg ewotICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgcmV0dXJuIEFV VEhfRkFJTFVSRTsKLSAgICB9Ci0KLSAgICBpZiAocGFyc2VkYXRbNF0gPT0gS1JCX1JFSkVDVCkg ewotICAgICAgICBzdHJUbXBbMF0gPSAwOwotCi0gICAgICAgIGZvciAoaSA9IDU7IGkgPD0gZW5k X3N1YjsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAocGFyc2VkYXRbaV0gPT0gSUFDKQotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgc3RyVG1wW2ktNV0gPSBwYXJzZWRhdFtpXTsK LSAgICAgICAgICAgIHN0clRtcFtpLTRdID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh c3RyVG1wWzBdKQotICAgICAgICAgICAgc3RyY3B5KHN0clRtcCwgIkF1dGhlbnRpY2F0aW9uIHJl amVjdGVkIGJ5IHJlbW90ZSBtYWNoaW5lISIpOwotICAgICAgICBwcmludGYoIktlcmJlcm9zIFY0 IGF1dGhlbnRpY2F0aW9uIGZhaWxlZCFcclxuJXNcclxuIixzdHJUbXApOwotICAgICAgICBrcmI0 X2Vycm5vID0gLTE7Ci0gICAgICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLHN0clRtcCk7Ci0gICAg ICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICByZXR1cm4gQVVUSF9GQUlM VVJFOwotICAgIH0KLQotICAgIGlmIChwYXJzZWRhdFs0XSA9PSBLUkJfQUNDRVBUKSB7Ci0gICAg ICAgIGludCBuZXRfbGVuOwotICAgICAgICBpZiAoKHBhcnNlZGF0WzNdICYgQVVUSF9IT1dfTUFT SykgPT0gQVVUSF9IT1dfT05FX1dBWSkgewotICAgICAgICAgICAgY2ttYWttc2coc3RyVG1wLHNp emVvZihzdHJUbXApLCJLZXJiZXJvcyBWNCBhY2NlcHRzIHlvdSBhcyAiLAotICAgICAgICAgICAg ICAgICAgICAgIHN6VXNlck5hbWUsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgIHByaW50ZigiJXNc clxuIixzdHJUbXApOwotICAgICAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKLSAgICAgICAg ICAgIGtyYjRfZXJybm8gPSAwOwotICAgICAgICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csc3Ry VG1wKTsKLSAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsKLSAgICAgICAgICAg IHJldHVybiBBVVRIX1NVQ0NFU1M7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHBhcnNlZGF0 WzNdICYgQVVUSF9IT1dfTUFTSykgIT0gQVVUSF9IT1dfTVVUVUFMKSB7Ci0gICAgICAgICAgICBw cmludGYoIktlcmJlcm9zIFY0IGF1dGhlbnRpY2F0aW9uIGZhaWxlZCFcclxuIik7Ci0gICAgICAg ICAgICBja3N0cm5jcHkoc3RyVG1wLAotICAgICAgICAiS2VyYmVyb3MgVjQgYWNjZXB0ZWQgeW91 LCBidXQgZGlkbid0IHByb3ZpZGUgbXV0dWFsIGF1dGhlbnRpY2F0aW9uIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKHN0clRtcCkpOwotICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4i LHN0clRtcCk7Ci0gICAgICAgICAgICBrcmI0X2Vycm5vID0gLTE7Ci0gICAgICAgICAgICBtYWtl c3RyKCZrcmI0X2Vycm1zZyxzdHJUbXApOwotICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRI X1JFSkVDVCk7Ci0gICAgICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwotICAgICAgICB9Ci0K LSNpZm5kZWYgUkVNT1ZFX0ZPUl9FWFBPUlQKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAg IFNlbmRLNEF1dGhTQihLUkI0X0NIQUxMRU5HRSxrNF9zZXNzaW9uX2tleSxzaXplb2YoazRfc2Vz c2lvbl9rZXkpKTsKLQotICAgICAgICAvKiBXZSBoYXZlIHNlbnQgdGhlIGRlY3J5cHRlZCBzZXNz aW9uIGtleSB0byB0aGUgaG9zdCBhcyBhIGNoYWxsZW5nZSAqLwotICAgICAgICAvKiBub3cgZW5j cnlwdCBpdCB0byByZXN0b3JlIGl0IHRvIGl0cyBvcmlnaW5hbCB2YWxpZCBERVMga2V5IHZhbHVl ICovCi0jaWZkZWYgTUlUX0NVUlJFTlQKLSAgICAgICAga2RhdGEuZGF0YSA9IGs0X3Nlc3Npb25f a2V5OwotICAgICAgICBrZGF0YS5sZW5ndGggPSA4OwotCi0gICAgICAgIGVuY2RhdGEuY2lwaGVy dGV4dC5kYXRhID0gazRfc2Vzc2lvbl9rZXk7Ci0gICAgICAgIGVuY2RhdGEuY2lwaGVydGV4dC5s ZW5ndGggPSA4OwotICAgICAgICBlbmNkYXRhLmVuY3R5cGUgPSBFTkNUWVBFX1VOS05PV047Ci0K LSAgICAgICAgaWYgKGNvZGUgPSBrcmI1X2NfZW5jcnlwdChrNV9jb250ZXh0LCAmazRfa3Jia2V5 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAma2RhdGEsICZlbmNk YXRhKSkgewotICAgICAgICAgICAgY29tX2VycigiazRfYXV0aF9yZXBseSIsIGNvZGUsCi0gICAg ICAgICAgICAgICAgICAgICAid2hpbGUgZW5jcnlwdGluZyBzZXNzaW9uX2tleSIpOwotICAgICAg ICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICByZXR1cm4gQVVU SF9GQUlMVVJFOwotICAgICAgICB9Ci0jZWxzZSAvKiBNSVRfQ1VSUkVOVCAqLwotI2lmZGVmIE5U Ci0gICAgICAgIGRlc19lY2JfZW5jcnlwdChrNF9zZXNzaW9uX2tleSwgazRfc2Vzc2lvbl9rZXks IGs0X3NjaGVkLCAxKTsKLSNlbHNlIC8qIE5UICovCi0gICAgICAgIGRlc19lY2JfZW5jcnlwdCgm azRfc2Vzc2lvbl9rZXksICZrNF9zZXNzaW9uX2tleSwgazRfc2NoZWQsIDEpOwotI2VuZGlmIC8q IE5UICovCi0gICAgICAgIGNraGV4ZHVtcCgKLSAgICAgICAgICAgICJrNF9hdXRoX3JlcGx5IGRl c19lY2JfZW5jcnlwdChrNF9zZXNzaW9uX2tleSxrNF9zZXNzaW9uX2tleSwxKSIsCi0gICAgICAg ICAgICAgazRfc2Vzc2lvbl9rZXksCi0gICAgICAgICAgICAgOAotICAgICAgICAgICAgICAgICk7 Ci0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLQotI2lmZGVmIENLX1NTTAotICAgICAgICBpZiAo IShzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSkKLSNlbmRpZiAvKiBDS19TU0wg Ki8KLSAgICAgICAgewotICAgICAgICAvKiBBbmQgdGhlbiB1c2UgaXQgdG8gY29uZmlndXJlIHRo ZSBlbmNyeXB0aW9uIHN0YXRlIG1hY2hpbmUuICovCi0gICAgICAgICAgICBza2V5LnR5cGUgPSBT S19ERVM7Ci0gICAgICAgICAgICBza2V5Lmxlbmd0aCA9IDg7Ci0gICAgICAgICAgICBza2V5LmRh dGEgPSBrNF9zZXNzaW9uX2tleTsKLSAgICAgICAgICAgIGVuY3J5cHRfc2Vzc2lvbl9rZXkoJnNr ZXksIEFVVEhfQ0xJRU5UX1RPX1NFUlZFUik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBFTkNSWVBU SU9OICovCi0jZW5kaWYgLyogUkVNT1ZFX0ZPUl9FWFBPUlQgKi8KLSAgICAgICAgYWNjZXB0X2Nv bXBsZXRlID0gMTsKLSAgICAgICAgY2ttYWttc2coc3RyVG1wLHNpemVvZihzdHJUbXApLAotICAg ICAgICAgICAgICAgICAiS2VyYmVyb3MgVjQgYWNjZXB0cyB5b3UgYXMgIixzelVzZXJOYW1lLE5V TEwsTlVMTCk7Ci0gICAgICAgIHByaW50ZigiJXNcclxuIixzdHJUbXApOwotICAgICAgICBrcmI0 X2Vycm5vID0gMDsKLSAgICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csc3RyVG1wKTsKLSAgICAg ICAgYXV0aF9maW5pc2hlZChBVVRIX1VTRVIpOwotICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNT OwotICAgIH0KLQotICAgIGlmIChwYXJzZWRhdFs0XSA9PSBLUkI0X1JFU1BPTlNFKSB7Ci0gICAg ICAgIGlmIChlbmRfc3ViIDwgMTIpIHsKLSAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9S RUpFQ1QpOwotICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLSAgICAgICAgfQotCi0g ICAgICAgIGNraGV4ZHVtcCgiS1JCNF9SRVNQT05TRSAmcGFyc2VkYXRbNV0iLCZwYXJzZWRhdFs1 XSw4KTsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgIGNraGV4ZHVtcCgiS1JCNF9SRVNQ T05TRSBrNF9jaGFsbGVuZ2UiLGs0X2NoYWxsZW5nZSw4KTsKLQotICAgICAgICAvKiBUaGUgZGF0 YWJsb2NrIHJldHVybmVkIGZyb20gdGhlIGhvc3Qgc2hvdWxkIG1hdGNoIHRoZSB2YWx1ZSAqLwot ICAgICAgICAvKiB3ZSBzdG9yZWQgaW4gazRfY2hhbGxlbmdlLiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqLwotICAgICAgICBpZiAobWVtY21wKCZwYXJzZWRhdFs1XSwgazRfY2hh bGxlbmdlLCBzaXplb2YoazRfY2hhbGxlbmdlKSkgIT0gMCkgewotICAgICAgICAgICAgcHJpbnRm KCJLZXJiZXJvcyBWNCBhdXRoZW50aWNhdGlvbiBmYWlsZWQhXHJcbiVzXHJcbiIsCi0gICAgICAg ICAgICAiUmVtb3RlIG1hY2hpbmUgaXMgYmVpbmcgaW1wZXJzb25hdGVkISIpOwotICAgICAgICAg ICAga3JiNF9lcnJubyA9IC0xOwotICAgICAgICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csIlJl bW90ZSBtYWNoaW5lIGlzIGJlaW5nIGltcGVyc29uYXRlZCEiKTsKLSAgICAgICAgICAgIGF1dGhf ZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsK LSAgICAgICAgfQotI2Vsc2UgLyogRU5DUllQVElPTiAqLwotICAgICAgICBtYWtlc3RyKCZrcmI0 X2Vycm1zZywiS2VybWl0IGJ1aWx0IHdpdGhvdXQgc3VwcG9ydCBmb3IgZW5jcnlwdGlvbi4iKTsK LSAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLSNlbmRpZiAvKiBFTkNSWVBUSU9OICovCi0g ICAgICAgIG11dHVhbF9jb21wbGV0ZSA9IDE7Ci0gICAgICAgIGNrc3RybmNweShzdHJUbXAsIlJl bW90ZSBtYWNoaW5lIGhhcyBiZWVuIG11dHVhbGx5IGF1dGhlbnRpY2F0ZWQiLAotICAgICAgICAg ICAgICAgICAgIHNpemVvZihzdHJUbXApKTsKLSAgICAgICAgcHJpbnRmKCIlc1xyXG4iLHN0clRt cCk7Ci0gICAgICAgIGtyYjRfZXJybm8gPSAwOwotICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1z ZyxzdHJUbXApOwotICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVVNFUik7Ci0gICAgICAgIHJl dHVybiBBVVRIX1NVQ0NFU1M7Ci0gICAgfQotICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1Qp OwotICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci19Ci0KLS8qCi0gKiBGdW5jdGlvbjogSzQgcGFy c2UgYXV0aGVudGljYXRpb24gSVMgY29tbWFuZAotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgcGFy c2VkYXQgLSB0aGUgc3ViLWNvbW1hbmQgZGF0YS4KLSAqCi0gKiAgZW5kX3N1YiAtIGluZGV4IG9m IHRoZSBjaGFyYWN0ZXIgaW4gdGhlICdwYXJzZWRhdCcgYXJyYXkgd2hpY2gKLSAqICAgICAgICAg ICAgaXMgdGhlIGxhc3QgYnl0ZSBpbiBhIHN1Yi1uZWdvdGlhdGlvbgotICoKLSAqIFJldHVybnM6 IEtlcmJlcm9zIGVycm9yIGNvZGUuCi0gKi8KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lD Ci1rNF9hdXRoX2lzKHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0LCBpbnQgZW5kX3N1YikKLSNlbHNl Ci1rNF9hdXRoX2lzKHBhcnNlZGF0LGVuZF9zdWIpIHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0OyBp bnQgZW5kX3N1YjsKLSNlbmRpZgotewotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICBTZXNzaW9u X0tleSBza2V5OwotI2lmZGVmIE1JVF9DVVJSRU5UCi0gICAgQmxvY2sgZGF0YWJsb2NrLCB0bXBr ZXk7Ci0gICAga3JiNV9kYXRhIGtkYXRhOwotICAgIGtyYjVfZW5jX2RhdGEgZW5jZGF0YTsKLSAg ICBrcmI1X2Vycm9yX2NvZGUgY29kZTsKLSNlbHNlIC8qIE1JVF9DVVJSRU5UICovCi0gICAgQmxv Y2sgZGF0YWJsb2NrOwotI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCi0jZW5kaWYgIC8qIEVOQ1JZ UFRJT04gKi8KLSAgICBjaGFyIHJlYWxtW1JFQUxNX1NaKzFdOwotICAgIGNoYXIgaW5zdGFuY2Vb SU5TVF9TWl07Ci0gICAgaW50IHIgPSAwOwotICAgIGNoYXIgKiBkYXRhID0gJnBhcnNlZGF0WzVd OwotICAgIGludCAgICBjbnQgPSBlbmRfc3ViIC0gNTsKLSAgICBleHRlcm4gY2hhciBteWlwYWRk cltdOwotICAgIHN0cnVjdCBob3N0ZW50ICpob3N0OwotICAgIHN0cnVjdCBpbl9hZGRyIGluYWRk cjsKLSAgICBpbnQgaTsKLQotICAgIGlmIChlbmRfc3ViIDwgNCB8fCBwYXJzZWRhdFsyXSAhPSBB VVRIVFlQRV9LRVJCRVJPU19WNCkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJrNF9hdXRoX2lzIiwi Tm90IGtlcmJlcm9zIHY0IiwwKTsKLSAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7 Ci0gICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0gICAgfQotCi0gICAgc3dpdGNoIChwYXJz ZWRhdFs0XSkgewotICAgIGNhc2UgS1JCX0FVVEg6Ci0gICAgICAgIGRlYnVnKEYxMTAsIms0X2F1 dGhfaXMiLCJLUkJfQVVUSCIsMCk7Ci0gICAgICAgIGNrc3RybmNweShyZWFsbSxja19rcmI0X2dl dHJlYWxtKCksUkVBTE1fU1orMSk7Ci0gICAgICAgIGlmIChyZWFsbVswXSA9PSAnXDAnKSB7Ci0g ICAgICAgICAgICBTZW5kSzRBdXRoU0IoS1JCX1JFSkVDVCwgKHZvaWQgKikiTm8gbG9jYWwgVjQg UmVhbG0uIiwgLTEpOwotICAgICAgICAgICAgcHJpbnRmKCJcclxuPyBLZXJiZXJvcyA0IC0gTm8g TG9jYWwgUmVhbG1cclxuIik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJrNF9hdXRoX2lzIiwi Tm8gbG9jYWwgcmVhbG0iLDApOwotICAgICAgICAgICAga3JiNF9lcnJubyA9IC0xOwotICAgICAg ICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csIk5vIGxvY2FsIHJlYWxtIik7Ci0gICAgICAgICAg ICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgIHJldHVybiBBVVRIX0ZB SUxVUkU7Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMCwiazRfYXV0aF9pcyIscmVhbG0s MCk7Ci0gICAgICAgIGlmICggY250IDwgc2l6ZW9mKGs0X2F1dGguZGF0KSApIHsKLSAgICAgICAg ICAgIGs0X2F1dGgubGVuZ3RoID0gY250OwotICAgICAgICAgICAgbWVtY3B5KCh2b2lkICopazRf YXV0aC5kYXQsICh2b2lkICopZGF0YSwgazRfYXV0aC5sZW5ndGgpOwotICAgICAgICB9IGVsc2UK LSAgICAgICAgICAgIGs0X2F1dGgubGVuZ3RoID0gMDsKLSAgICAgICAgY2toZXhkdW1wKCJrNF9h dXRoLmRhdCIsazRfYXV0aC5kYXQsIGs0X2F1dGgubGVuZ3RoKTsKLQotICAgICAgICAvKiBHZXQg SW5zdGFuY2UgKi8KLSAgICAgICAgaW5hZGRyLnNfYWRkciA9IGluZXRfYWRkcihteWlwYWRkcik7 Ci0gICAgICAgIGhvc3QgPSBnZXRob3N0YnlhZGRyKCh1bnNpZ25lZCBjaGFyICopJmluYWRkciw0 LFBGX0lORVQpOwotICAgICAgICBpZiAoIGhvc3QgKSB7Ci0jaWZkZWYgSEFERFJMSVNUCi0gICAg ICAgICAgICBob3N0ID0gY2tfY29weWhvc3RlbnQoaG9zdCk7Ci0jZW5kaWYgLyogSEFERFJMSVNU ICovCi0gICAgICAgICAgICBja3N0cm5jcHkoaW5zdGFuY2UsaG9zdC0+aF9uYW1lLElOU1RfU1op OwotICAgICAgICAgICAgZm9yICggaT0wO2k8SU5TVF9TWjtpKysgKSB7Ci0gICAgICAgICAgICAg ICAgaWYgKCBpbnN0YW5jZVtpXSA9PSAnLicgKQotICAgICAgICAgICAgICAgICAgICBpbnN0YW5j ZVtpXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBp bnN0YW5jZVtpXSA9IHRvbG93ZXIoaW5zdGFuY2VbaV0pOwotICAgICAgICAgICAgfQotICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgaW5zdGFuY2VbMF0gPSAnKic7Ci0gICAgICAgICAgICBp bnN0YW5jZVsxXSA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAociA9IGtyYl9yZF9yZXEo Jms0X2F1dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiNF9kX3NydiA/IGtyYjRf ZF9zcnYgOiBLUkI0X1NFUlZJQ0VfTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnN0YW5jZSwgMCwgJms0X2FkYXQsIGs0X2tleXRhYikpIHsKLQotICAgICAgICAgICAgY2toZXhk dW1wKCJrNF9hZGF0IiwgJms0X2FkYXQsIHNpemVvZihBVVRIX0RBVCkpOwotICAgICAgICAgICAg a3JiX2tudG9sbigmazRfYWRhdCwgazRfbmFtZSk7Ci0gICAgICAgICAgICBja21ha21zZyhzdHJU bXAsc2l6ZW9mKHN0clRtcCksCi0gICAgICAgICAgICAgICAgICAgICAiS2VyYmVyb3MgZmFpbGVk IGhpbSBhcyAiLCBrNF9uYW1lLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICBwcmludGYoIiVzXHJc biIsc3RyVG1wKTsKLSAgICAgICAgICAgIGtyYjRfZXJybm8gPSByOwotICAgICAgICAgICAgbWFr ZXN0cigma3JiNF9lcnJtc2csc3RyVG1wKTsKLSAgICAgICAgICAgIFNlbmRLNEF1dGhTQihLUkJf UkVKRUNULCAodm9pZCAqKWtyYl9nZXRfZXJyX3RleHRfZW50cnkociksIC0xKTsKLSAgICAgICAg ICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgcmV0dXJuIEFVVEhf RkFJTFVSRTsKLSAgICAgICAgfQotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICBtZW1j cHkoKHZvaWQgKilrNF9zZXNzaW9uX2tleSwgKHZvaWQgKilrNF9hZGF0LnNlc3Npb24sCi0gICAg ICAgICAgICAgICAgc2l6ZW9mKEJsb2NrKSk7ICAgICAgICAgICAgICAgICAvKiBzYWZlICovCi0g ICAgICAgIGNraGV4ZHVtcCgiazRfYXV0aF9pcyBrNF9zZXNzaW9uX2tleSIsazRfc2Vzc2lvbl9r ZXksc2l6ZW9mKEJsb2NrKSk7Ci0jZW5kaWYgLyogRU5DUllQVElPTiAqLwotICAgICAgICBrcmJf a250b2xuKCZrNF9hZGF0LCBrNF9uYW1lKTsKLQotICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFt ZUF1dGhlbnRpY2F0ZWQsazRfbmFtZSxVSURCVUZMRU4pOwotICAgICAgICBpZiAoc3pVc2VyTmFt ZVJlcXVlc3RlZCAmJiAha3VzZXJvaygmazRfYWRhdCwgazRfbmFtZSkpIHsKLSAgICAgICAgICAg IFNlbmRLNEF1dGhTQihLUkJfQUNDRVBULCAodm9pZCAqKTAsIDApOwotICAgICAgICAgICAgaWYg KCAhc3RyY21wKGs0X25hbWUsc3pVc2VyTmFtZVJlcXVlc3RlZCkgKQotICAgICAgICAgICAgICAg IGF1dGhfZmluaXNoZWQoQVVUSF9WQUxJRCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg ICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1VTRVIpOwotICAgICAgICAgICAgYWNjZXB0X2NvbXBs ZXRlID0gMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFNlbmRLNEF1 dGhTQihLUkJfUkVKRUNULAotICAgICAgICAgICAgICAgICAgKHZvaWQgKikidXNlciBpcyBub3Qg YXV0aG9yaXplZCIsIC0xKTsKLSAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1Qp OwotICAgICAgICAgICAga3JiNF9lcnJubyA9IHI7Ci0gICAgICAgICAgICBtYWtlc3RyKCZrcmI0 X2Vycm1zZywidXNlciBpcyBub3QgYXV0aG9yaXplZCIpOwotICAgICAgICAgICAgcmV0dXJuKEFV VEhfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEtSQjRf Q0hBTExFTkdFOgotICAgICAgICBkZWJ1ZyhGMTEwLCJrNF9hdXRoX2lzIiwiS1JCX0NIQUxMRU5H RSIsMCk7Ci0jaWZuZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgU2VuZEs0QXV0aFNCKEtSQjRf UkVTUE9OU0UsICh2b2lkICopMCwgMCk7Ci0jZWxzZSAgIC8qIEVOQ1JZUFRJT04gKi8KLSAgICAg ICAgaWYgKCFWQUxJREtFWShrNF9zZXNzaW9uX2tleSkpIHsKLSAgICAgICAgICAgIC8qCi0gICAg ICAgICAgICAqIFdlIGRvbid0IGhhdmUgYSB2YWxpZCBzZXNzaW9uIGtleSwgc28ganVzdAotICAg ICAgICAgICAgKiBzZW5kIGJhY2sgYSByZXNwb25zZSB3aXRoIGFuIGVtcHR5IHNlc3Npb24KLSAg ICAgICAgICAgICoga2V5LgotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIFNlbmRLNEF1dGhT QihLUkI0X1JFU1BPTlNFLCAodm9pZCAqKTAsIDApOwotICAgICAgICAgICAgbXV0dWFsX2NvbXBs ZXRlID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAg ICAgICAgKiBJbml0aWFsaXplIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBzaW5jZSBpdCdz Ci0gICAgICAgICogdXNlZCBsYXRlciBvbiBieSB0aGUgZW5jcnlwdGlvbiByb3V0aW5lLgotICAg ICAgICAqLwotI2lmZGVmIE1JVF9DVVJSRU5UCi0gICAgICAgIGtkYXRhLmRhdGEgPSBrNF9zZXNz aW9uX2tleTsKLSAgICAgICAga2RhdGEubGVuZ3RoID0gODsKLQotICAgICAgICBpZiAoY29kZSA9 IGtyYjVfY19yYW5kb21fc2VlZChrNV9jb250ZXh0LCAma2RhdGEpKSB7Ci0gICAgICAgICAgICBj b21fZXJyKCJrNF9hdXRoX2lzIiwgY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICJ3aGlsZSBz ZWVkaW5nIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIik7Ci0gICAgICAgICAgICBhdXRoX2Zpbmlz aGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0gICAg ICAgIH0KLQotICAgICAgICBtZW1jcHkoKHZvaWQgKilkYXRhYmxvY2ssICh2b2lkICopZGF0YSwg c2l6ZW9mKEJsb2NrKSk7IC8qIHNhZmUgKi8KLSAgICAgICAgLyoKLSAgICAgICAgKiBUYWtlIHRo ZSByZWNlaXZlZCBlbmNyeXB0ZWQgY2hhbGxlbmdlLCBhbmQgZW5jcnlwdAotICAgICAgICAqIGl0 IGFnYWluIHRvIGdldCBhIHVuaXF1ZSBzZXNzaW9uX2tleSBmb3IgdGhlCi0gICAgICAgICogRU5D UllQVCBvcHRpb24uCi0gICAgICAgICovCi0gICAgICAgIGs0X2tyYmtleS5lbmN0eXBlID0gRU5D VFlQRV9ERVNfQ0JDX1JBVzsKLSAgICAgICAgazRfa3Jia2V5Lmxlbmd0aCA9IDg7Ci0gICAgICAg IGs0X2tyYmtleS5jb250ZW50cyA9IGs0X3Nlc3Npb25fa2V5OwotCi0gICAgICAgIGtkYXRhLmRh dGEgPSBkYXRhYmxvY2s7Ci0gICAgICAgIGtkYXRhLmxlbmd0aCA9IDg7Ci0KLSAgICAgICAgZW5j ZGF0YS5jaXBoZXJ0ZXh0LmRhdGEgPSB0bXBrZXk7Ci0gICAgICAgIGVuY2RhdGEuY2lwaGVydGV4 dC5sZW5ndGggPSA4OwotICAgICAgICBlbmNkYXRhLmVuY3R5cGUgPSBFTkNUWVBFX1VOS05PV047 Ci0KLSAgICAgICAgaWYgKGNvZGUgPSBrcmI1X2NfZW5jcnlwdChrNV9jb250ZXh0LCAmazRfa3Ji a2V5LCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2RhdGEsICZl bmNkYXRhKSkgewotICAgICAgICAgICAgY29tX2VycigiazRfYXV0aF9pcyIsIGNvZGUsICJ3aGls ZSBlbmNyeXB0aW5nIHJhbmRvbSBrZXkiKTsKLSAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVU SF9SRUpFQ1QpOwotICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLSAgICAgICAgfQot Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIGlmICghKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0 aXZlX2ZsYWcpKQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICB7Ci0gICAgICAgICAgICBz a2V5LnR5cGUgPSBTS19ERVM7Ci0gICAgICAgICAgICBza2V5Lmxlbmd0aCA9IDg7Ci0gICAgICAg ICAgICBza2V5LmRhdGEgPSB0bXBrZXk7Ci0gICAgICAgICAgICBlbmNyeXB0X3Nlc3Npb25fa2V5 KCZza2V5LCBBVVRIX1NFUlZFUl9UT19DTElFTlQpOwotICAgICAgICB9Ci0gICAgICAgIC8qCi0g ICAgICAgICogTm93IGRlY3J5cHQgdGhlIHJlY2VpdmVkIGVuY3J5cHRlZCBjaGFsbGVuZ2UsCi0g ICAgICAgICogaW5jcmVtZW50IGJ5IG9uZSwgcmUtZW5jcnlwdCBpdCBhbmQgc2VuZCBpdCBiYWNr LgotICAgICAgICAqLwotICAgICAgICBlbmNkYXRhLmNpcGhlcnRleHQuZGF0YSA9IGRhdGFibG9j azsKLSAgICAgICAgZW5jZGF0YS5jaXBoZXJ0ZXh0Lmxlbmd0aCA9IDg7Ci0gICAgICAgIGVuY2Rh dGEuZW5jdHlwZSA9IEVOQ1RZUEVfVU5LTk9XTjsKLQotICAgICAgICBrZGF0YS5kYXRhID0gazRf Y2hhbGxlbmdlOwotICAgICAgICBrZGF0YS5sZW5ndGggPSA4OwotCi0gICAgICAgIGlmIChjb2Rl ID0ga3JiNV9jX2RlY3J5cHQoazVfY29udGV4dCwgJms0X2tyYmtleSwgMCwgMCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuY2RhdGEsICZrZGF0YSkpIHsKLSAgICAgICAg ICAgIGNvbV9lcnIoIms0X2F1dGhfaXMiLCBjb2RlLCAid2hpbGUgZGVjcnlwdGluZyBjaGFsbGVu Z2UiKTsKLSAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAg ICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLSAgICAgICAgfQotI2Vsc2UgLyogTUlUX0NVUlJFTlQg Ki8KLSAgICAgICAgZGVzX3NldF9yYW5kb21fZ2VuZXJhdG9yX3NlZWQoazRfc2Vzc2lvbl9rZXkp OwotICAgICAgICByID0gZGVzX2tleV9zY2hlZChrNF9zZXNzaW9uX2tleSwgazRfc2NoZWQpOwot ICAgICAgICBpZiAoIHIgPT0gLTEgKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIERF UyBrZXkgc3BlY2lmaWVkIGluIGNyZWRlbnRpYWxzXHJcbiIpOwotICAgICAgICAgICAgZGVidWco RjExMCwiYXV0aF9pcyBDSEFMTEVOR0UiLAotICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIERF UyBLZXkgc3BlY2lmaWVkIGluIGNyZWRlbnRpYWxzIiwwKTsKLSAgICAgICAgfSBlbHNlIGlmICgg ciA9PSAtMiApIHsKLSAgICAgICAgICAgIHByaW50ZigiP1dlYWsgREVTIGtleSBzcGVjaWZpZWQg aW4gY3JlZGVudGlhbHNcclxuIik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJhdXRoX2lzIENI QUxMRU5HRSIsCi0gICAgICAgICAgICAgICAgICAgIndlYWsgREVTIEtleSBzcGVjaWZpZWQgaW4g Y3JlZGVudGlhbHMiLDApOwotICAgICAgICB9IGVsc2UgaWYgKCByICE9IDAgKSB7Ci0gICAgICAg ICAgICBwcmludGYoIj9ERVMgS2V5IFNjaGVkdWxlIG5vdCBzZXQgYnkgY3JlZGVudGlhbHNcclxu Iik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJhdXRoX2lzIENIQUxMRU5HRSIsCi0gICAgICAg ICAgICAgICAgICAgIkRFUyBLZXkgU2NoZWR1bGUgbm90IHNldCBieSBjcmVkZW50aWFscyIsMCk7 Ci0gICAgICAgIH0KLSAgICAgICAgY2toZXhkdW1wKCJhdXRoX2lzIHNjaGVkdWxlIixrNF9zY2hl ZCw4KjE2KTsKLQotICAgICAgICBtZW1jcHkoKHZvaWQgKilkYXRhYmxvY2ssICh2b2lkICopZGF0 YSwgc2l6ZW9mKEJsb2NrKSk7IC8qIHNhZmUgKi8KLSAgICAgICAgY2toZXhkdW1wKCJhdXRoX2lz IGNoYWxsZWdlIixkYXRhYmxvY2ssc2l6ZW9mKEJsb2NrKSk7Ci0KLSAgICAgICAgLyoKLSAgICAg ICAgKiBUYWtlIHRoZSByZWNlaXZlZCBlbmNyeXB0ZWQgY2hhbGxlbmdlLCBhbmQgZW5jcnlwdAot ICAgICAgICAqIGl0IGFnYWluIHRvIGdldCBhIHVuaXF1ZSBrNF9zZXNzaW9uX2tleSBmb3IgdGhl Ci0gICAgICAgICogRU5DUllQVCBvcHRpb24uCi0gICAgICAgICovCi0jaWZkZWYgTlQKLSAgICAg ICAgZGVzX2VjYl9lbmNyeXB0KGRhdGFibG9jaywgazRfc2Vzc2lvbl9rZXksIGs0X3NjaGVkLCAx KTsKLSNlbHNlIC8qIE5UICovCi0gICAgICAgIGRlc19lY2JfZW5jcnlwdCgmZGF0YWJsb2NrLCAm azRfc2Vzc2lvbl9rZXksIGs0X3NjaGVkLCAxKTsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICBj a2hleGR1bXAoImF1dGhfaXMgZGVzX2VjYl9lbmNyeXB0KGRhdGFibG9jayxrNF9zZXNzaW9uX2tl eSwxKSIsCi0gICAgICAgICAgICAgICAgIGs0X3Nlc3Npb25fa2V5LDgpOwotCi0jaWZkZWYgQ0tf U1NMCi0gICAgICAgIGlmICghKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpKQot I2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICB7Ci0gICAgICAgICAgICBza2V5LnR5cGUgPSBT S19ERVM7Ci0gICAgICAgICAgICBza2V5Lmxlbmd0aCA9IDg7Ci0gICAgICAgICAgICBza2V5LmRh dGEgPSBrNF9zZXNzaW9uX2tleTsKLSAgICAgICAgICAgIGVuY3J5cHRfc2Vzc2lvbl9rZXkoJnNr ZXksIEFVVEhfU0VSVkVSX1RPX0NMSUVOVCk7Ci0gICAgICAgIH0KLSAgICAgICAgLyoKLSAgICAg ICAgKiBOb3cgZGVjcnlwdCB0aGUgcmVjZWl2ZWQgZW5jcnlwdGVkIGNoYWxsZW5nZSwKLSAgICAg ICAgKiBpbmNyZW1lbnQgYnkgb25lLCByZS1lbmNyeXB0IGl0IGFuZCBzZW5kIGl0IGJhY2suCi0g ICAgICAgICovCi0jaWZkZWYgTlQKLSAgICAgICAgZGVzX2VjYl9lbmNyeXB0KGRhdGFibG9jaywg azRfY2hhbGxlbmdlLCBrNF9zY2hlZCwgMCk7Ci0jZWxzZSAvKiBOVCAqLwotICAgICAgICBkZXNf ZWNiX2VuY3J5cHQoJmRhdGFibG9jaywgJms0X2NoYWxsZW5nZSwgazRfc2NoZWQsIDApOwotI2Vu ZGlmIC8qIE5UICovCi0gICAgICAgIGNraGV4ZHVtcCgiYXV0aF9pcyBkZXNfZWNiX2VuY3J5cHQo ZGF0YWJsb2NrLGs0X2NoYWxsZW5nZSwwKSIsCi0gICAgICAgICAgICAgICAgIGs0X3Nlc3Npb25f a2V5LDgpOwotI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCi0gICAgICAgIGZvciAociA9IDc7IHIg Pj0gMDsgci0tKSB7Ci0gICAgICAgICAgICByZWdpc3RlciBpbnQgdDsKLSAgICAgICAgICAgIHQg PSAodW5zaWduZWQgaW50KWs0X2NoYWxsZW5nZVtyXSArIDE7Ci0gICAgICAgICAgICBrNF9jaGFs bGVuZ2Vbcl0gPSB0OyAgICAgICAgLyogaWdub3JlIG92ZXJmbG93ICovCi0gICAgICAgICAgICBp ZiAodCA8IDI1NikgICAgICAgICAgICAgICAgLyogaWYgbm8gb3ZlcmZsb3csIGFsbCBkb25lICov Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2toZXhkdW1wKCJh dXRoX2lzIGs0X2NoYWxsZW5nZSsxIixrNF9jaGFsbGVuZ2UsOCk7Ci0KLSNpZmRlZiBNSVRfQ1VS UkVOVAotICAgICAgICBrZGF0YS5kYXRhID0gazRfY2hhbGxlbmdlOwotICAgICAgICBrZGF0YS5s ZW5ndGggPSA4OwotCi0gICAgICAgIGVuY2RhdGEuY2lwaGVydGV4dC5kYXRhID0gazRfY2hhbGxl bmdlOwotICAgICAgICBlbmNkYXRhLmNpcGhlcnRleHQubGVuZ3RoID0gODsKLSAgICAgICAgZW5j ZGF0YS5lbmN0eXBlID0gRU5DVFlQRV9VTktOT1dOOwotCi0gICAgICAgIGlmIChjb2RlID0ga3Ji NV9jX2VuY3J5cHQoazVfY29udGV4dCwgJms0X2tyYmtleSwgMCwgMCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmtkYXRhLCAmZW5jZGF0YSkpIHsKLSAgICAgICAgICAgIGNv bV9lcnIoIms0X2F1dGhfaXMiLCBjb2RlLCAid2hpbGUgZGVjcnlwdGluZyBjaGFsbGVuZ2UiKTsK LSAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgcmV0 dXJuIEFVVEhfRkFJTFVSRTsKLSAgICAgICAgfQotI2Vsc2UgLyogTUlUX0NVUlJFTlQgKi8KLSNp ZmRlZiBOVAotICAgICAgICBkZXNfZWNiX2VuY3J5cHQoazRfY2hhbGxlbmdlLCBrNF9jaGFsbGVu Z2UsIGs0X3NjaGVkLCAxKTsKLSNlbHNlIC8qIE5UICovCi0gICAgICAgIGRlc19lY2JfZW5jcnlw dCgmazRfY2hhbGxlbmdlLCAmazRfY2hhbGxlbmdlLCBrNF9zY2hlZCwgMSk7Ci0jZW5kaWYgLyog TlQgKi8KLSAgICAgICAgY2toZXhkdW1wKCJhdXRoX2lzIGRlc19lY2JfZW5jcnlwdChrNF9jaGFs bGVuZ2Vfa2V5LGs0X2NoYWxsZW5nZSwxKSIsCi0gICAgICAgICAgICAgICAgIGs0X2NoYWxsZW5n ZSw4KTsKLQotI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCi0gICAgICAgIFNlbmRLNEF1dGhTQihL UkI0X1JFU1BPTlNFLCh2b2lkICopazRfY2hhbGxlbmdlLHNpemVvZihrNF9jaGFsbGVuZ2UpKTsK LSNlbmRpZiAgLyogRU5DUllQVElPTiAqLwotICAgICAgICBtdXR1YWxfY29tcGxldGUgPSAxOwot ICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICgxKQotICAgICAgICAg ICAgcHJpbnRmKCJVbmtub3duIEtlcmJlcm9zIG9wdGlvbiAlZFxyXG4iLCBkYXRhWy0xXSk7Ci0g ICAgICAgIFNlbmRLNEF1dGhTQihLUkJfUkVKRUNULCAwLCAwKTsKLSAgICAgICAgcmV0dXJuKEFV VEhfRkFJTFVSRSk7Ci0gICAgfQotICAgIGtyYjRfZXJybm8gPSByOwotICAgIG1ha2VzdHIoJmty YjRfZXJybXNnLGtyYl9nZXRfZXJyX3RleHRfZW50cnkoa3JiNF9lcnJubykpOwotICAgIHJldHVy bihBVVRIX1NVQ0NFU1MpOwotfQotI2VuZGlmIC8qIEtSQjQgKi8KLQotI2lmZGVmIEtSQjUKLWlu dAotY2tfa3JiNV9hdXRvZ2V0X1RHVChjaGFyICogcmVhbG0pCi17Ci0gICAgZXh0ZXJuIHN0cnVj dCBrcmJfb3BfZGF0YSBrcmJfb3A7Ci0gICAgZXh0ZXJuIHN0cnVjdCBrcmI1X2luaXRfZGF0YSBr cmI1X2luaXQ7Ci0gICAgY2hhciBwYXNzd2RbUFdEX1NaXTsKLSAgICBjaGFyIHByb21wdFs2NF07 Ci0gICAgY2hhciAqIHNhdmVyZWFsbT1OVUxMOwotICAgIGludCAgcmMgPSAtMTsKLSAgICBleHRl cm4gY2hhciAqIGs1cHJwcm9tcHQ7Ci0gICAgZXh0ZXJuIGNoYXIgKiBrNXB3cHJvbXB0OwotCi0g ICAgaW5pX2tlcmIoKTsgICAgICAgICAvKiBQbGFjZSBkZWZhdWx0cyBpbiBhYm92ZSBzdHJ1Y3Rz ICovCi0gICAgcGFzc3dkWzBdID0gJ1wwJzsKLQotICAgIGlmICgga3JiNV9pbml0LnByaW5jaXBh bCA9PSBOVUxMIHx8Ci0gICAgICAgICBrcmI1X2luaXQucHJpbmNpcGFsWzBdID09ICdcMCcpIHsK LSAgICAgICAgaW50IG9rID0gdXFfdHh0KE5VTEwsazVwcnByb21wdCAmJiBrNXBycHJvbXB0WzBd ID8gazVwcnByb21wdCA6Ci0gICAgICAgICAgICAgICAgICAiS2VyYmVyb3MgNSBQcmluY2lwYWw6 ICIsMixOVUxMLHBhc3N3ZCxQV0RfU1otMSxOVUxMLAotCQkJREVGQVVMVF9VUV9USU1FT1VUKTsK LSAgICAgICAgaWYgKCBvayAmJiBwYXNzd2RbMF0gKQotICAgICAgICAgICAgbWFrZXN0cigma3Ji NV9pbml0LnByaW5jaXBhbCxwYXNzd2QpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1 cm4oMCk7Ci0gICAgfQotCi0gICAgLyogU2F2ZSByZWFsbSBpbiBpbml0IHN0cnVjdHVyZSBzbyBp dCBjYW4gYmUgcmVzdG9yZWQgKi8KLSAgICBpZiAoIHJlYWxtICkgewotICAgICAgICBzYXZlcmVh bG0gPSBrcmI1X2luaXQucmVhbG07Ci0gICAgICAgIGtyYjVfaW5pdC5yZWFsbSA9IHJlYWxtOwot ICAgIH0KLQotICAgIGlmICggcGFzc3dkWzBdIHx8ICEocHdidWZbMF0gJiYgcHdmbGcpICkgewot ICAgICAgICBpbnQgb2s7Ci0gICAgICAgIGlmICggazVwd3Byb21wdCAmJiBrNXB3cHJvbXB0WzBd ICYmCi0gICAgICAgICAgICAgKHN0cmxlbihrNXB3cHJvbXB0KSArIHN0cmxlbihrcmI1X2luaXQu cHJpbmNpcGFsKSArCi0gICAgICAgICAgICAgIHN0cmxlbihrcmI1X2luaXQucmVhbG0pIC0gNCkg PCBzaXplb2YocHJvbXB0KSkgewotICAgICAgICAgICAgc3ByaW50Zihwcm9tcHQsazVwd3Byb21w dCxrcmI1X2luaXQucHJpbmNpcGFsLGtyYjVfaW5pdC5yZWFsbSk7Ci0gICAgICAgIH0gZWxzZQot ICAgICAgICBja21ha3htc2cocHJvbXB0LHNpemVvZihwcm9tcHQpLAotICAgICAgICAgICAgICAg ICAgazVwd3Byb21wdCAmJiBrNXB3cHJvbXB0WzBdID8gazVwd3Byb21wdCA6Ci0gICAgICAgICAg ICAgICAgICAiS2VyYmVyb3MgNSBQYXNzd29yZCBmb3IgIiwKLSAgICAgICAgICAgICAgICAgIGty YjVfaW5pdC5wcmluY2lwYWwsIkAiLGtyYjVfaW5pdC5yZWFsbSwiOiAiLAotICAgICAgICAgICAg ICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAotICAgICAgICAgICAgICAg ICApOwotICAgICAgICBvayA9IHVxX3R4dChOVUxMLHByb21wdCwyLE5VTEwscGFzc3dkLFBXRF9T Wi0xLE5VTEwsCi0JCSAgICBERUZBVUxUX1VRX1RJTUVPVVQpOwotICAgICAgICBpZiAoICFvayAp Ci0gICAgICAgICAgICBwYXNzd2RbMF0gPSAnXDAnOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNr c3RybmNweShwYXNzd2QsKGNoYXIgKilwd2J1ZixzaXplb2YocGFzc3dkKSk7Ci0jaWZkZWYgT1My Ci0gICAgICAgIGlmICggcHdjcnlwdCApCi0gICAgICAgICAgICBja19lbmNyeXB0KChjaGFyICop cGFzc3dkKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0KLSAgICBpZiAoIHBhc3N3ZFswXSAp IHsKLSAgICAgICAgZXh0ZXJuIHN0cnVjdCBrcmI0X2luaXRfZGF0YSBrcmI0X2luaXQ7Ci0gICAg ICAgIGNoYXIgKiBzYXZlazRyZWFsbT1OVUxMOwotCi0gICAgICAgIG1ha2VzdHIoJmtyYjVfaW5p dC5wYXNzd29yZCxwYXNzd2QpOwotCi0gICAgICAgIGlmICgga3JiNV9kX2dldGs0ICkgewotICAg ICAgICAgICAga3JiNV9pbml0LmdldGs0ID0gMTsKLSAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRf aW5pdC5wcmluY2lwYWwsa3JiNV9pbml0LnByaW5jaXBhbCk7Ci0gICAgICAgICAgICBtYWtlc3Ry KCZrcmI0X2luaXQucGFzc3dvcmQscGFzc3dkKTsKLSAgICAgICAgICAgIGlmICggcmVhbG0gKSB7 Ci0gICAgICAgICAgICAgICAgc2F2ZWs0cmVhbG0gPSBrcmI0X2luaXQucmVhbG07Ci0gICAgICAg ICAgICAgICAga3JiNF9pbml0LnJlYWxtID0gcmVhbG07Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICByYyA9IGNrX2tyYjVfaW5pdFRHVCgma3JiX29wLCAma3JiNV9pbml0LCZrcmI0X2luaXQp OwotCi0gICAgICAgICAgICBpZiAoIHNhdmVrNHJlYWxtICkKLSAgICAgICAgICAgICAgICBrcmI0 X2luaXQucmVhbG0gPSBzYXZlazRyZWFsbTsKLSAgICAgICAgICAgIGZyZWUoa3JiNF9pbml0LnBh c3N3b3JkKTsKLSAgICAgICAgICAgIGtyYjRfaW5pdC5wYXNzd29yZCA9IE5VTEw7Ci0gICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICByYyA9IGNrX2tyYjVfaW5pdFRHVCgma3JiX29wLCAma3Ji NV9pbml0LE5VTEwpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnJlZShrcmI1X2luaXQucGFzc3dv cmQpOwotICAgICAgICBrcmI1X2luaXQucGFzc3dvcmQgPSBOVUxMOwotCi0gICAgICAgIG1lbXNl dChwYXNzd2QsMCxQV0RfU1opOwotICAgIH0KLQotICAgIC8qIHJlc3RvcmUgcmVhbG0gdG8gaW5p dCBzdHJ1Y3R1cmUgaWYgbmVlZGVkICovCi0gICAgaWYgKCBzYXZlcmVhbG0gKQotICAgICAgICBr cmI1X2luaXQucmVhbG0gPSBzYXZlcmVhbG07Ci0gICAgcmV0dXJuKHJjID09IDApOwotfQotCi1z dGF0aWMga3JiNV9lcnJvcl9jb2RlCi0jaWZkZWYgQ0tfQU5TSUMKLWs1X2dldF9jY2FjaGUoIGty YjVfY29udGV4dCBrNV9jb250ZXh0LCBrcmI1X2NjYWNoZSAqIHBfY2NhY2hlLAotICAgICAgICAg ICAgICAgY2hhciAqIGNjX25hbWUgKQotI2Vsc2UgIC8qIENLX0FOU0lDICovCi1rNV9nZXRfY2Nh Y2hlKGs1X2NvbnRleHQsIHBfY2NhY2hlLCBjY19uYW1lKQotICAgIGtyYjVfY29udGV4dCBrNV9j b250ZXh0OwotICAgIGtyYjVfY2NhY2hlICogcF9jY2FjaGU7Ci0gICAgY2hhciAqIGNjX25hbWU7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBrcmI1X2Vycm9yX2NvZGUgcj0wOwotICAg IGNoYXIgY2NfdG1wW0NLTUFYUEFUSCsxXTsKLSAgICBjb25zdCBjaGFyICogZGVmX25hbWUgPSBO VUxMOwotCi0jaWZuZGVmIEhFSU1EQUwKLSAgICBpZiAoIGNjX25hbWUgKSB7Ci0gICAgICAgIGlm ICggc3RybmNtcCgiRklMRToiLGNjX25hbWUsNSkgJiYKLSAgICAgICAgICAgICBzdHJuY21wKCJN RU1PUlk6IixjY19uYW1lLDcpICYmCi0gICAgICAgICAgICAgc3RybmNtcCgiQVBJOiIsY2NfbmFt ZSw0KSAmJgotICAgICAgICAgICAgIHN0cm5jbXAoIlNURElPOiIsY2NfbmFtZSw2KSAmJgotCSAg ICAgc3RybmNtcCgiTVNMU0E6IixjY19uYW1lLDYpKQotI2lmZGVmIE5UCi0gICAgICAgICAgICBj a21ha21zZyhjY190bXAsQ0tNQVhQQVRILCJBUEk6IixjY19uYW1lLE5VTEwsTlVMTCk7Ci0jZWxz ZSAvKiBOVCAqLwotICAgICAgICAgICAgY2ttYWttc2coY2NfdG1wLENLTUFYUEFUSCwiRklMRToi LGNjX25hbWUsTlVMTCxOVUxMKTsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICBlbHNlIHsKLSAg ICAgICAgICAgIGNrc3RybmNweShjY190bXAsY2NfbmFtZSxDS01BWFBBVEgpOwotICAgICAgICB9 Ci0gICAgICAgIHIgPSBrcmI1X2NjX3Jlc29sdmUgKGs1X2NvbnRleHQsIGNjX3RtcCwgcF9jY2Fj aGUpOwotICAgICAgICBpZiAociAhPSAwKSB7Ci0gICAgICAgICAgICBjb21fZXJyKCJrNV9nZXRf Y2NhY2hlIHJlc29sdmluZyBjY2FjaGUiLHIsCi0gICAgICAgICAgICAgICAgICAgICBjY190bXAp OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogTWFrZSBzdXJlIEdTU0FQSSBzZWVz IHRoZSBzYW1lIGNhY2hlIHdlIGFyZSB1c2luZyAqLwotICAgICAgICAgICAgY2hhciBidWZbMTI4 XTsKLSAgICAgICAgICAgIGNrbWFrbXNnKChjaGFyICopYnVmLDEyOCwiS1JCNUNDTkFNRT0iLGNj X3RtcCxOVUxMLE5VTEwpOwotICAgICAgICAgICAgcHV0ZW52KGJ1Zik7Ci0gICAgICAgIH0KLSAg ICB9IGVsc2UgaWYgKCBrcmI1X2RfY2MgKSB7Ci0gICAgICAgIGlmICggc3RybmNtcCgiRklMRToi LGtyYjVfZF9jYyw1KSAmJgotICAgICAgICAgICAgIHN0cm5jbXAoIk1FTU9SWToiLGtyYjVfZF9j Yyw3KSAmJgotICAgICAgICAgICAgIHN0cm5jbXAoIkFQSToiLGtyYjVfZF9jYyw0KSAmJgotICAg ICAgICAgICAgIHN0cm5jbXAoIlNURElPOiIsa3JiNV9kX2NjLDYpICYmCi0JICAgICBzdHJuY21w KCJNU0xTQToiLCBrcmI1X2RfY2MsNikpCi0jaWZkZWYgTlQKLSAgICAgICAgICAgIGNrbWFrbXNn KGNjX3RtcCxDS01BWFBBVEgsIkFQSToiLGtyYjVfZF9jYyxOVUxMLE5VTEwpOwotI2Vsc2UgLyog TlQgKi8KLSAgICAgICAgICAgIGNrbWFrbXNnKGNjX3RtcCxDS01BWFBBVEgsIkZJTEU6IixrcmI1 X2RfY2MsTlVMTCxOVUxMKTsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICBlbHNlIHsKLSAgICAg ICAgICAgIGNrc3RybmNweShjY190bXAsa3JiNV9kX2NjLENLTUFYUEFUSCk7Ci0gICAgICAgIH0K LSAgICAgICAgciA9IGtyYjVfY2NfcmVzb2x2ZSAoazVfY29udGV4dCwgY2NfdG1wLCBwX2NjYWNo ZSk7Ci0gICAgICAgIGlmIChyICE9IDApIHsKLSAgICAgICAgICAgIGNvbV9lcnIoIms1X2dldF9j Y2FjaGUgcmVzb2x2aW5nIGNjYWNoZSIsciwKLSAgICAgICAgICAgICAgICAgICAgIGtyYjVfZF9j Yyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBNYWtlIHN1cmUgR1NTQVBJIHNl ZXMgdGhlIHNhbWUgY2FjaGUgd2UgYXJlIHVzaW5nICovCi0gICAgICAgICAgICBjaGFyIGJ1Zlsx MjhdOwotICAgICAgICAgICAgY2ttYWttc2coKGNoYXIgKilidWYsMTI4LCJLUkI1Q0NOQU1FPSIs Y2NfdG1wLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICBwdXRlbnYoYnVmKTsKLSAgICAgICAgfQot ICAgIH0gZWxzZQotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICB7Ci0gICAgICAgIGlmICgociA9 IGtyYjVfY2NfZGVmYXVsdChrNV9jb250ZXh0LCBwX2NjYWNoZSkpKSB7Ci0gICAgICAgICAgICBj b21fZXJyKCJrNV9nZXRfY2NhY2hlIixyLCJ3aGlsZSBnZXR0aW5nIGRlZmF1bHQgY2NhY2hlIik7 Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogZG8gbm90IHNldCBrcmI1X2Vycm5vL2tyYjVfZXJy bXNnIGhlcmUgc2luY2UgdGhlIHZhbHVlIHJldHVybmVkICovCi0gICAgLyogaXMgYmVpbmcgcGFz c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBrcmI1IGZ1bmN0aW9ucy4gICAgICAgICAgICovCi0g ICAgcmV0dXJuKHIpOwotfQotCi0KLWNoYXIgKgotY2tfa3JiNV9yZWFsbW9maG9zdChjaGFyICpo b3N0KQotewotICAgIGNoYXIgKiogcmVhbG1saXN0PU5VTEw7Ci0gICAga3JiNV9jb250ZXh0IHBy aXZhdGVfY29udGV4dD1OVUxMOwotICAgIHN0YXRpYyBjaGFyICogcmVhbG0gPSBOVUxMOwotCi0g ICAgaWYgKCAhaG9zdCApCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKCByZWFsbSAp IHsKLSAgICAgICAgZnJlZShyZWFsbSk7Ci0gICAgICAgIHJlYWxtID0gTlVMTDsKLSAgICB9Ci0K LSAgICAvKiBjcmVhdGUgcHJpdmF0ZV9jb250ZXh0ICovCi0gICAgaWYgKGtyYjVfaW5pdF9jb250 ZXh0KCZwcml2YXRlX2NvbnRleHQpKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsImNrX2tyYjVfcmVh bG1vZmhvc3QoKSIsInVuYWJsZSB0byBpbml0X2NvbnRleHQiLDApOwotICAgICAgICByZXR1cm4o TlVMTCk7Ci0gICAgfQotCi0gICAga3JiNV9nZXRfaG9zdF9yZWFsbShwcml2YXRlX2NvbnRleHQs aG9zdCwmcmVhbG1saXN0KTsKLSAgICBpZiAocmVhbG1saXN0ICYmIHJlYWxtbGlzdFswXSkgewot ICAgICAgICBtYWtlc3RyKCZyZWFsbSxyZWFsbWxpc3RbMF0pOwotICAgICAgICBrcmI1X2ZyZWVf aG9zdF9yZWFsbShwcml2YXRlX2NvbnRleHQscmVhbG1saXN0KTsKLSAgICAgICAgcmVhbG1saXN0 ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoIHByaXZhdGVfY29udGV4dCApIHsKLSAgICAgICAg a3JiNV9mcmVlX2NvbnRleHQocHJpdmF0ZV9jb250ZXh0KTsKLSAgICAgICAgcHJpdmF0ZV9jb250 ZXh0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoY2tzdHJjaHIocmVhbG0sJy4nKSA9PSBOVUxM KSB7Ci0gICAgICAgIGludCBuID0gMDsKLSAgICAgICAgY2hhciAqIHAgPSBob3N0OwotICAgICAg ICB3aGlsZSAoIChwID0gY2tzdHJjaHIocCwnLicpKSAhPSBOVUxMICkgewotICAgICAgICAgICAg bisrOwotICAgICAgICAgICAgcCsrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChuID09IDEpIHsK LSAgICAgICAgICAgIG1ha2VzdHIoJnJlYWxtLGhvc3QpOwotICAgICAgICAgICAgY2t1cHBlcihy ZWFsbSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmcmVlKHJlYWxtKTsKLSAgICAg ICAgICAgIHJlYWxtID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4ocmVhbG0p OwotfQotCi0vKgotICoKLSAqIEs1X2F1dGhfc2VuZCAtIGdldHMgYXV0aGVudGljYXRpb24gYml0 cyB3ZSBuZWVkIHRvIHNlbmQgdG8gS0RDLgotICoKLSAqIENvZGUgbGlmdGVkIGZyb20gdGVsbmV0 IHNhbXBsZSBjb2RlIGluIHRoZSBhcHBsIGRpcmVjdG9yeS4KLSAqCi0gKiBSZXN1bHQgaXMgbGVm dCBpbiBrNV9hdXRoCi0gKgotICogUmV0dXJuczogMCBvbiBmYWlsdXJlLCAxIG9uIHN1Y2Nlc3MK LSAqCi0gKi8KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1rNV9hdXRoX3NlbmQoaW50 IGhvdywgaW50IGVuY3J5cHQsIGludCBmb3J3YXJkKQotI2Vsc2UKLWs1X2F1dGhfc2VuZChob3cs ZW5jcnlwdCxmb3J3YXJkKSBpbnQgaG93OyBpbnQgZW5jcnlwdDsgaW50IGZvcndhcmQ7Ci0jZW5k aWYKLXsKLSAgICBrcmI1X2Vycm9yX2NvZGUgcj0wOwotICAgIGtyYjVfY2NhY2hlIGNjYWNoZT1O VUxMOwotI2lmbmRlZiBIRUlNREFMCi0gICAga3JiNV9jcmVkcyBjcmVkczsKLSNlbmRpZiAvKiBI RUlNREFMICovCi0gICAga3JiNV9jcmVkcyAqIG5ld19jcmVkcz1OVUxMOwotI2lmZGVmIENLX0VO Q1JZUFRJT04KLSAgICBrcmI1X2tleWJsb2NrICpuZXdrZXkgPSAwOwotI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KLSAgICBrcmI1X2ZsYWdzIGFwX29wdHMsIGF1dGhfZmxhZ3M7Ci0gICAgY2hh ciB0eXBlX2NoZWNrWzMyXTsKLSAgICBrcmI1X2RhdGEgY2hlY2tzdW07Ci0gICAgaW50IGxlbj0w OwotICAgIGNoYXIgKiByZWFsbSA9IE5VTEw7Ci0gICAgY2hhciB0Z3RbMjU2XTsKLQotICAgIHJl YWxtID0gY2tfa3JiNV9yZWFsbW9maG9zdChzekhvc3ROYW1lKTsKLSAgICBpZiAoIXJlYWxtKSB7 Ci0gICAgICAgIGNrc3RybmNweShzdHJUbXAsICJDYW4ndCBmaW5kIHJlYWxtIGZvciBob3N0IFwi IixBVVRIVE1QQkwpOwotICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCBzekhvc3ROYW1lLEFVVEhU TVBCTCk7Ci0gICAgICAgIGNrc3RybmNhdChzdHJUbXAsICJcIiIsQVVUSFRNUEJMKTsKLSAgICAg ICAgcHJpbnRmKCI/S2VyYmVyb3MgNSBlcnJvcjogJXNcclxuIixzdHJUbXApOwotICAgICAgICBr cmI1X2Vycm5vID0gS1JCNV9FUlJfSE9TVF9SRUFMTV9VTktOT1dOOwotICAgICAgICBtYWtlc3Ry KCZrcmI1X2Vycm1zZyxzdHJUbXApOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotCi0gICAg Y2ttYWttc2codGd0LHNpemVvZih0Z3QpLCJrcmJ0Z3QvIixyZWFsbSwiQCIscmVhbG0pOwotICAg IGRlYnVnKEYxMTAsIms1X2F1dGhfc2VuZCBUR1QiLHRndCwwKTsKLSAgICBpZiAoIGtyYjVfYXV0 b2dldCAmJgotICAgICAgICAgISgoY2tfa3JiNV90a3RfaXN2YWxpZChOVUxMLHRndCkgPiAwKSB8 fAotICAgICAgICAgIChja19rcmI1X2lzX3RndF92YWxpZCgpID4gMCkpICkKLSAgICAgICAgY2tf a3JiNV9hdXRvZ2V0X1RHVChyZWFsbSk7Ci0KLSAgICByID0gazVfZ2V0X2NjYWNoZShrNV9jb250 ZXh0LCZjY2FjaGUsTlVMTCk7Ci0gICAgaWYgKCByICkgewotICAgICAgICBjb21fZXJyKE5VTEws IHIsICJ3aGlsZSBhdXRob3JpemluZyAoMCkuIik7Ci0gICAgICAgIGtyYjVfZXJybm8gPSByOwot ICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsK LSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotI2lmbmRlZiBIRUlNREFMCi0gICAgbWVtc2V0 KChjaGFyICopJmNyZWRzLCAwLCBzaXplb2YoY3JlZHMpKTsKLSAgICBpZiAociA9IGtyYjVfc25h bWVfdG9fcHJpbmNpcGFsKGs1X2NvbnRleHQsIHN6SG9zdE5hbWUsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGtyYjVfZF9zcnYgPyBrcmI1X2Rfc3J2IDogS1JCNV9TRVJWSUNFX05B TUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfTlRfU1JWX0hTVCwgJmNy ZWRzLnNlcnZlcikpIHsKLSAgICAgICAgY29tX2VycihOVUxMLCByLCAid2hpbGUgYXV0aG9yaXpp bmcgKDEpLiIpOwotICAgICAgICBrcmI1X2Vycm5vID0gcjsKLSAgICAgICAgbWFrZXN0cigma3Ji NV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Ci0gICAgICAgIHJldHVybigwKTsK LSAgICB9Ci0KLSAgICBpZiAoZm9yd2FyZF9mbGFnKSB7Ci0gICAgICAgIGlmIChmd2Rfc2VydmVy KSB7Ci0gICAgICAgICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGs1X2NvbnRleHQsZndkX3NlcnZl cik7Ci0gICAgICAgICAgICBmd2Rfc2VydmVyID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBr cmI1X2NvcHlfcHJpbmNpcGFsKGs1X2NvbnRleHQsY3JlZHMuc2VydmVyLCZmd2Rfc2VydmVyKTsK LSAgICB9Ci0KLSAgICByID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGs1X2NvbnRleHQsIGNjYWNo ZSwgJmNyZWRzLmNsaWVudCk7Ci0gICAgaWYgKHIpIHsKLSAgICAgICAgY29tX2VycihOVUxMLCBy LCAid2hpbGUgYXV0aG9yaXppbmcgKDIpLiIpOwotICAgICAgICBrcmI1X2ZyZWVfY3JlZF9jb250 ZW50cyhrNV9jb250ZXh0LCAmY3JlZHMpOwotICAgICAgICBrcmI1X2Vycm5vID0gcjsKLSAgICAg ICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Ci0gICAg ICAgIHJldHVybigwKTsKLSAgICB9Ci0KLSAgICBpZiAoc3pVc2VyTmFtZVswXSA9PSAnXDAnKSB7 ICAgICAgICAgICAgICAgIC8qIEdldCB1c2VyIG5hbWUgbm93ICovCi0gICAgICAgIGxlbiAgPSBr cmI1X3ByaW5jX2NvbXBvbmVudChrNV9jb250ZXh0LCBjcmVkcy5jbGllbnQsIDApLT5sZW5ndGg7 Ci0gICAgICAgIGlmICggbGVuIDwgc2l6ZW9mKHN6VXNlck5hbWUpICkgewotICAgICAgICAgICAg bWVtY3B5KHN6VXNlck5hbWUsCi0gICAgICAgICAgICAgICAgICAgIGtyYjVfcHJpbmNfY29tcG9u ZW50KGs1X2NvbnRleHQsIGNyZWRzLmNsaWVudCwgMCktPmRhdGEsCi0gICAgICAgICAgICAgICAg ICAgIGxlbik7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzYWZlICovCi0gICAgICAgIH0gZWxz ZQotICAgICAgICAgICAgbGVuID0gMDsKLSAgICAgICAgc3pVc2VyTmFtZVtsZW5dID0gJ1wwJzsK LSAgICB9IGVsc2UgewotICAgICAgICBjaGFyICogbmFtZSA9IE5VTEw7Ci0gICAgICAgIGxlbiAg PSBrcmI1X3ByaW5jX2NvbXBvbmVudChrNV9jb250ZXh0LCBjcmVkcy5jbGllbnQsIDApLT5sZW5n dGg7Ci0gICAgICAgIGlmICggbGVuID09IHN0cmxlbihzelVzZXJOYW1lKSApIHsKLSAgICAgICAg ICAgIG5hbWUgPSBrcmI1X3ByaW5jX2NvbXBvbmVudChrNV9jb250ZXh0LCBjcmVkcy5jbGllbnQs IDApLT5kYXRhOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgaWYgKCAhc3RybmljbXAoc3pVc2Vy TmFtZSxuYW1lLGxlbikgKQotICAgICAgICAgICAgICAgIG1lbWNweShzelVzZXJOYW1lLG5hbWUs bGVuKTsgICAgLyogc2FmZSAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICB9Ci0gICAgfQot ICAgIGlmICggdG5fYXV0aF9rcmI1X2Rlc19idWcgKSB7ICAgLyogIUFMTE9XX0tSQl8zREVTX0VO Q1JZUFQgKi8KLSAgICAgICAgLyogTm90IHN1cmUgaWYgdGhpcyBpcyBuZWNlc3NhcnkgYW55bW9y ZS4gIFdoYXQgaW1wYWN0IGRvZXMgaXQgaGF2ZQotICAgICAgICAgKiBvbiBXaW4yMDAwIFRHVHMg dGhhdCB1c2UgREVTX0NCQ19NRDUgb3IgUkM0X0hNQUM/Ci0gICAgICAgICAqCi0gICAgICAgICAq IFRoaXMgcHJldmVudHMgdXNpbmcgM0RFUyBTZXJ2aWNlIFRpY2tldHMuCi0gICAgICAgICAqLwot ICAgICAgICBjcmVkcy5rZXlibG9jay5lbmN0eXBlPUVOQ1RZUEVfREVTX0NCQ19DUkM7Ci0gICAg fQotCi0gICAgaWYgKHIgPSBrcmI1X2dldF9jcmVkZW50aWFscyhrNV9jb250ZXh0LCAwLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjYWNoZSwgJmNyZWRzLCAmbmV3X2NyZWRz KSkgewotICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJ3aGlsZSBhdXRob3JpemluZyAoMykuIik7 Ci0gICAgICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGs1X2NvbnRleHQsICZjcmVkcyk7Ci0g ICAgICAgIGtyYjVfZXJybm8gPSByOwotICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJv cl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRp ZiAvKiBIRUlNREFMICovCi0KLSAgICBpZiAoYXV0aF9jb250ZXh0KSB7Ci0gICAgICAgIGtyYjVf YXV0aF9jb25fZnJlZShrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQpOwotICAgICAgICBhdXRoX2Nv bnRleHQgPSAwOwotICAgIH0KLSAgICBpZiAociA9IGtyYjVfYXV0aF9jb25faW5pdChrNV9jb250 ZXh0LCAmYXV0aF9jb250ZXh0KSkgewotICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJ3aGlsZSBp bml0aWFsaXppbmcgYXV0aCBjb250ZXh0Iik7Ci0gICAgICAgIGtyYjVfZXJybm8gPSByOwotICAg ICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAg ICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotICAgIC8qIFVQREFURSBmb3IgU1RBUlRfVExTLiAg QVVUSF9FTkNSWVBUX1NUQVJUX1RMUyBhbmQgaW5jbHVzaW9uIG9mICovCi0gICAgLyogY2xpZW50 IGFuZCB0aGVuIHNlcnZlciBmaW5pc2hlZCBtZXNzYWdlcy4gICAgICAgICAgICAgICAgICAgICAg Ki8KLQotICAgIHR5cGVfY2hlY2tbMF0gPSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKLSAgICB0eXBl X2NoZWNrWzFdID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwKLSAgICAgICAgKGhvdyA/IEFVVEhf SE9XX01VVFVBTCA6IEFVVEhfSE9XX09ORV9XQVkpIHwKLSAgICAgICAgKGVuY3J5cHQpIHwKLSAg ICAgICAgKGZvcndhcmQgPyBJTklfQ1JFRF9GV0RfT04gOiBJTklfQ1JFRF9GV0RfT0ZGKTsKLSNp ZmRlZiBDS19TU0wKLSAgICBpZiAoZW5jcnlwdCA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSB7 Ci0gICAgICAgIHNzbF9nZXRfY2xpZW50X2ZpbmlzaGVkKCZ0eXBlX2NoZWNrWzJdLDEyKTsKLSAg ICAgICAgc3NsX2dldF9zZXJ2ZXJfZmluaXNoZWQoJnR5cGVfY2hlY2tbMTRdLDEyKTsKLSAgICB9 Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSNpZm5kZWYgSEVJTURBTAotICAgIGNoZWNrc3VtLm1h Z2ljID0gS1Y1TV9EQVRBOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICBjaGVja3N1bS5sZW5n dGggPQotI2lmZGVmIENLX1NTTAotICAgICAgICAoZW5jcnlwdCA9PSBBVVRIX0VOQ1JZUFRfU1RB UlRfVExTKSA/IDI2IDoKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgMjsKLSAgICBjaGVj a3N1bS5kYXRhID0gKGNoYXIgKikmdHlwZV9jaGVjazsKLQotICAgIGFwX29wdHMgPSAwOwotICAg IGlmICgoaG93ICYgQVVUSF9IT1dfTUFTSykgPT0gQVVUSF9IT1dfTVVUVUFMKQotICAgICAgICBh cF9vcHRzIHw9IEFQX09QVFNfTVVUVUFMX1JFUVVJUkVEOwotCi0jaWZkZWYgSEVJTURBTAotICAg IHIgPSBrcmI1X2F1dGhfc2V0a2V5dHlwZShrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsIEtFWVRZ UEVfREVTKTsKLSAgICBpZiAocikKLSAgICAgICAgY29tX2VycihOVUxMLCByLCAid2hpbGUgc2V0 dGluZyBhdXRoIGtleXR5cGUiKTsKLSAgICByID0ga3JiNV9hdXRoX2Nvbl9zZXRhZGRyc19mcm9t X2ZkKGs1X2NvbnRleHQsYXV0aF9jb250ZXh0LCAmdHR5ZmQpOwotICAgIGlmIChyKQotICAgICAg ICBjb21fZXJyKE5VTEwsIHIsICJ3aGlsZSBzZXR0aW5nIGF1dGggYWRkcnMiKTsKLSAgICByID0g a3JiNV9ta19yZXEoazVfY29udGV4dCwgJmF1dGhfY29udGV4dCwgYXBfb3B0cywKLSAgICAgICAg ICAgICAgICAgICAga3JiNV9kX3NydiA/IGtyYjVfZF9zcnYgOiBLUkI1X1NFUlZJQ0VfTkFNRSwK LSAgICAgICAgICAgICAgICAgICAgc3pIb3N0TmFtZSwgJmNoZWNrc3VtLCBjY2FjaGUsICZrNV9h dXRoKTsKLSAgICBpZiAocikKLSAgICAgICAgY29tX2VycihOVUxMLCByLCAid2hpbGUgbWFraW5n IHJlcXVlc3QiKTsKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICBhdXRoX2ZsYWdzID0gS1JCNV9B VVRIX0NPTlRFWFRfUkVUX1RJTUU7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIGFwX29wdHMg fD0gQVBfT1BUU19VU0VfU1VCS0VZOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRl ZiBUTFNfVkVSSUZZCi0gICAgaWYgKChob3cgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9F TkNSWVBUX1NUQVJUX1RMUykgewotICAgICAgICBhdXRoX2ZsYWdzIHw9IEtSQjVfQVVUSF9DT05U RVhUX0RPX1NFUVVFTkNFOwotICAgICAgICBpZiAoIWtyYjVfZF9ub19hZGRyZXNzZXMpCi0gICAg ICAgICAgICByID0ga3JiNV9hdXRoX2Nvbl9nZW5hZGRycyhrNV9jb250ZXh0LCBhdXRoX2NvbnRl eHQsIHR0eWZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9BVVRIX0NP TlRFWFRfR0VORVJBVEVfUkVNT1RFX0ZVTExfQUREUik7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NT TCAqLwotICAgIGtyYjVfYXV0aF9jb25fc2V0ZmxhZ3MoazVfY29udGV4dCwgYXV0aF9jb250ZXh0 LCBhdXRoX2ZsYWdzKTsKLSAgICByID0ga3JiNV9ta19yZXFfZXh0ZW5kZWQoazVfY29udGV4dCwg JmF1dGhfY29udGV4dCwgYXBfb3B0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZj aGVja3N1bSwgbmV3X2NyZWRzLCAmazVfYXV0aCk7Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotCi0j aWZkZWYgQ0tfRU5DUllQVElPTgotICAgIGlmICghcikgewotICAgICAgICByID0ga3JiNV9hdXRo X2Nvbl9nZXRsb2NhbHN1YmtleShrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsICZuZXdrZXkpOwot ICAgICAgICBpZiAocikKLSAgICAgICAgICAgIHIgPSBrcmI1X2F1dGhfY29uX2dldGtleShrNV9j b250ZXh0LCBhdXRoX2NvbnRleHQsICZuZXdrZXkpOwotCi0gICAgICAgIGlmIChrNV9zZXNzaW9u X2tleSkgewotICAgICAgICAgICAga3JiNV9mcmVlX2tleWJsb2NrKGs1X2NvbnRleHQsIGs1X3Nl c3Npb25fa2V5KTsKLSAgICAgICAgICAgIGs1X3Nlc3Npb25fa2V5ID0gMDsKLSAgICAgICAgfQot ICAgIH0KLSAgICBpZiAobmV3a2V5KSB7Ci0gICAgICAgIC8qCi0gICAgICAgICoga2VlcCB0aGUg a2V5IGluIG91ciBwcml2YXRlIHN0b3JhZ2UsIGJ1dCBkb24ndCB1c2UgaXQKLSAgICAgICAgKiB5 ZXQtLS1zZWUga2VyYmVyb3M1X3JlcGx5KCkgYmVsb3cKLSAgICAgICAgKi8KLSNpZmRlZiBIRUlN REFMCi0gICAgICAgIGlmICgobmV3a2V5LT5rZXl0eXBlID09IEVUWVBFX0RFU19DQkNfQ1JDKSB8 fAotICAgICAgICAgICAgIChuZXdrZXktPmtleXR5cGUgPT0gRVRZUEVfREVTX0NCQ19NRDUpIHx8 Ci0gICAgICAgICAgICAgKG5ld2tleS0+a2V5dHlwZSA9PSBFVFlQRV9ERVNfQ0JDX01ENCkpCi0g ICAgICAgIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfc2VuZCgpIiwibmV3a2V5 LT5rZXl0eXBlIixuZXdrZXktPmtleXR5cGUpOwotICAgICAgICAgICAga3JiNV9jb3B5X2tleWJs b2NrKGs1X2NvbnRleHQsIG5ld2tleSwgJms1X3Nlc3Npb25fa2V5KTsKLSAgICAgICAgfQotI2Vs c2UgLyogSEVJTURBTCAqLwotICAgICAgICAvKiBsb29rIGZvciBhbGwgcG9zc2libGUgREVTIGtl eXMgZmlyc3QgLSBqdXN0IGZvciBjb21wYXRpYmlsaXR5ICovCi0gICAgICAgIC8qIG90aGVyIGtl eSB0eXBlcyBhcmUgbXVjaCBsZXNzIGxpa2VseSB0byBiZSBhdmFpbGFibGUgICAgICAgICAgKi8K LSAgICAgICAgaWYgKChuZXdrZXktPmVuY3R5cGUgPT0gRU5DVFlQRV9ERVNfQ0JDX0NSQykgfHwK LSAgICAgICAgICAgICAobmV3a2V5LT5lbmN0eXBlID09IEVOQ1RZUEVfREVTX0NCQ19NRDUpIHx8 Ci0gICAgICAgICAgICAgKG5ld2tleS0+ZW5jdHlwZSA9PSBFTkNUWVBFX0RFU19DQkNfTUQ0KSkK LSAgICAgICAgewotICAgICAgICAgICAgZGVidWcoRjExMSwiazVfYXV0aF9zZW5kKCkiLCJuZXdr ZXktPmVuY3R5cGUiLG5ld2tleS0+ZW5jdHlwZSk7Ci0gICAgICAgICAgICBrcmI1X2NvcHlfa2V5 YmxvY2soazVfY29udGV4dCwgbmV3a2V5LCAmazVfc2Vzc2lvbl9rZXkpOwotICAgICAgICB9Ci0g ICAgICAgIGVsc2UgaWYgKChuZXdfY3JlZHMtPmtleWJsb2NrLmVuY3R5cGUgPT0gRU5DVFlQRV9E RVNfQ0JDX0NSQykgfHwKLSAgICAgICAgICAgICAgICAgKG5ld19jcmVkcy0+a2V5YmxvY2suZW5j dHlwZSA9PSBFTkNUWVBFX0RFU19DQkNfTUQ1KSkKLSAgICAgICAgewotICAgICAgICAgICAgLyog dXNlIHRoZSBzZXNzaW9uIGtleSBpbiBjcmVkZW50aWFscyBpbnN0ZWFkICovCi0gICAgICAgICAg ICBkZWJ1ZyhGMTExLCJrNV9hdXRoX3NlbmQoKSIsIm5ld19jcmVkcy0+a2V5YmxvY2suZW5jdHlw ZSIsCi0gICAgICAgICAgICAgICAgICAgbmV3X2NyZWRzLT5rZXlibG9jay5lbmN0eXBlKTsKLSAg ICAgICAgICAgIGtyYjVfY29weV9rZXlibG9jayhrNV9jb250ZXh0LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmbmV3X2NyZWRzLT5rZXlibG9jaywgJms1X3Nlc3Npb25fa2V5KTsK LSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChuZXdrZXktPmVuY3R5cGUgIT0gMCkKLSAgICAg ICAgewotICAgICAgICAgICAgZGVidWcoRjExMSwiazVfYXV0aF9zZW5kKCkiLCJuZXdrZXktPmVu Y3R5cGUiLG5ld2tleS0+ZW5jdHlwZSk7Ci0gICAgICAgICAgICBrcmI1X2NvcHlfa2V5YmxvY2so azVfY29udGV4dCwgbmV3a2V5LCAmazVfc2Vzc2lvbl9rZXkpOwotICAgICAgICB9Ci0gICAgICAg IGVsc2UgaWYgKG5ld19jcmVkcy0+a2V5YmxvY2suZW5jdHlwZSAhPSAwKQotICAgICAgICB7Ci0g ICAgICAgICAgICAvKiB1c2UgdGhlIHNlc3Npb24ga2V5IGluIGNyZWRlbnRpYWxzIGluc3RlYWQg Ki8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfc2VuZCgpIiwibmV3X2NyZWRzLT5r ZXlibG9jay5lbmN0eXBlIiwKLSAgICAgICAgICAgICAgICAgICBuZXdfY3JlZHMtPmtleWJsb2Nr LmVuY3R5cGUpOwotICAgICAgICAgICAga3JiNV9jb3B5X2tleWJsb2NrKGs1X2NvbnRleHQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfY3JlZHMtPmtleWJsb2NrLCAmazVf c2Vzc2lvbl9rZXkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZGVi dWcoRjExMCwiazVfYXV0aF9zZW5kKCkiLCJOTyBLRVkgaW4gbmV3a2V5IiwwKTsKLSAgICAgICAg fQotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAgICAga3JiNV9mcmVlX2tleWJsb2NrKGs1X2Nv bnRleHQsIG5ld2tleSk7Ci0gICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZm5k ZWYgSEVJTURBTAotICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGs1X2NvbnRleHQsICZjcmVk cyk7Ci0gICAga3JiNV9mcmVlX2NyZWRzKGs1X2NvbnRleHQsIG5ld19jcmVkcyk7Ci0jZW5kaWYg LyogSEVJTURBTCAqLwotICAgIGtyYjVfY2NfY2xvc2UoazVfY29udGV4dCxjY2FjaGUpOwotCi0g ICAgaWYgKHIpIHsKLSAgICAgICAgY29tX2VycihOVUxMLCByLCAid2hpbGUgYXV0aG9yaXppbmcg KDQpLiIpOwotICAgICAgICBrcmI1X2Vycm5vID0gcjsKLSAgICAgICAgbWFrZXN0cigma3JiNV9l cnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Ci0gICAgICAgIHJldHVybigwKTsKLSAg ICB9Ci0gICAga3JiNV9lcnJubyA9IDA7Ci0gICAgbWFrZXN0cigma3JiNV9lcnJtc2csIk9LIik7 Ci0gICAgcmV0dXJuKDEpOwotfQotCi0vKgotICogSzVfYXV0aF9yZXBseSAtLSBjaGVja3MgdGhl IHJlcGx5IGZvciBtdXR1YWwgYXV0aGVudGljYXRpb24uCi0gKi8KLXN0YXRpYyBpbnQKLSNpZmRl ZiBDS19BTlNJQwotazVfYXV0aF9yZXBseShpbnQgaG93LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBp bnQgY250KQotI2Vsc2UKLWs1X2F1dGhfcmVwbHkoaG93LGRhdGEsY250KSBpbnQgaG93OyB1bnNp Z25lZCBjaGFyICpkYXRhOyBpbnQgY250OwotI2VuZGlmCi17Ci0jaWZkZWYgQ0tfRU5DUllQVElP TgotICAgIFNlc3Npb25fS2V5IHNrZXk7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotCi0g ICAgZGF0YSArPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0 byBzdGF0dXMgYnl0ZSAqLwotICAgIGNudCAtPTU7Ci0KLSAgICBzd2l0Y2ggKCpkYXRhKyspIHsK LSAgICBjYXNlIEtSQl9SRUpFQ1Q6Ci0gICAgICAgIGlmIChjbnQgPiAwKSB7Ci0gICAgICAgICAg ICBjaGFyICpzOwotICAgICAgICAgICAgaW50IGxlbjsKLSAgICAgICAgICAgIGNrc3RybmNweShz dHJUbXAsIktlcmJlcm9zIFY1IHJlZnVzZXMgYXV0aGVudGljYXRpb24gYmVjYXVzZVxyXG4iLAot ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJUbXApKTsKLSAgICAgICAgICAgIGxlbiA9 IHN0cmxlbihzdHJUbXApOwotICAgICAgICAgICAgaWYgKCBsZW4gKyBjbnQgPCBzaXplb2Yoc3Ry VG1wKSApIHsKLSAgICAgICAgICAgICAgICBzID0gc3RyVG1wICsgc3RybGVuKHN0clRtcCk7Ci0g ICAgICAgICAgICAgICAgbWVtY3B5KHMsIGRhdGEsIGNudCk7ICAgICAgICAgICAvKiBzYWZlICov Ci0gICAgICAgICAgICAgICAgc1tjbnRdID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl bHNlCi0gICAgICAgICAgICBja3N0cm5jcHkoc3RyVG1wLCJLZXJiZXJvcyBWNSByZWZ1c2VzIGF1 dGhlbnRpY2F0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RyVG1wKSk7Ci0g ICAgICAgIGtyYjVfZXJybm8gPSAtMTsKLSAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csc3Ry VG1wKTsKLSAgICAgICAgcHJpbnRmKCJLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBmYWlsZWQhXHJc biVzXHJcbiIsc3RyVG1wKTsKLSAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0g ICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0KLSAgICBjYXNlIEtSQl9BQ0NFUFQ6Ci0gICAg ICAgIGlmICghbXV0dWFsX2NvbXBsZXRlKSB7Ci0gICAgICAgICAgICBpZiAoKGhvdyAmIEFVVEhf SE9XX01BU0spID09IEFVVEhfSE9XX01VVFVBTCAmJiAhbXV0dWFsX2NvbXBsZXRlKSB7Ci0gICAg ICAgICAgICAgICAgY2tzdHJuY3B5KHN0clRtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IktlcmJlcm9zIFY1IGFjY2VwdGVkIHlvdSwgYnV0IGRpZG4ndCBwcm92aWRlIgotICAgICAgICAg ICAgICAgICAgICAgICAgICAiIG11dHVhbCBhdXRoZW50aWNhdGlvbiIsc2l6ZW9mKHN0clRtcCkp OwotICAgICAgICAgICAgICAgIHByaW50ZigiS2VyYmVyb3MgYXV0aGVudGljYXRpb24gZmFpbGVk IVxyXG4lc1xyXG4iLHN0clRtcCk7Ci0gICAgICAgICAgICAgICAga3JiNV9lcnJubyA9IC0xOwot ICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLHN0clRtcCk7Ci0gICAgICAgICAg ICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu IEFVVEhfRkFJTFVSRTsKLSAgICAgICAgICAgIH0KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAg ICAgICAgICAgIGlmIChrNV9zZXNzaW9uX2tleSkgewotICAgICAgICAgICAgICAgIGlmICggdG5f YXV0aF9rcmI1X2Rlc19idWcgKSB7ICAgLyogIUFMTE9XX0tSQl8zREVTX0VOQ1JZUFQgKi8KLSAg ICAgICAgICAgICAgICAgICAgc2tleS50eXBlID0gU0tfREVTOwotICAgICAgICAgICAgICAgICAg ICBza2V5Lmxlbmd0aCA9IDg7Ci0jaWZkZWYgSEVJTURBTAotICAgICAgICAgICAgICAgICAgICBz a2V5LmRhdGEgPSBrNV9zZXNzaW9uX2tleS0+a2V5dmFsdWUuZGF0YTsKLSNlbHNlIC8qIEhFSU1E QUwgKi8KLSAgICAgICAgICAgICAgICAgICAgc2tleS5kYXRhID0gazVfc2Vzc2lvbl9rZXktPmNv bnRlbnRzOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot I2lmZGVmIEhFSU1EQUwKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggazVfc2Vzc2lvbl9r ZXktPmtleXR5cGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRVRZUEVfREVTX0NCQ19D UkM6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRVRZUEVfREVTX0NCQ19NRDU6Ci0gICAgICAg ICAgICAgICAgICAgIGNhc2UgRVRZUEVfREVTX0NCQ19NRDQ6Ci0gICAgICAgICAgICAgICAgICAg ICAgICBza2V5LnR5cGUgPSBTS19ERVM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBza2V5Lmxl bmd0aCA9IDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNrZXkudHlwZSA9IFNLX0dF TkVSSUM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBza2V5Lmxlbmd0aCA9IGs1X3Nlc3Npb25f a2V5LT5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0X2RvbnRfc3VwcG9y dChFTkNUWVBFX0RFU19DRkI2NCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0X2Rv bnRfc3VwcG9ydChFTkNUWVBFX0RFU19PRkI2NCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgc2tleS5kYXRhID0gazVfc2Vzc2lvbl9rZXktPmtleXZhbHVlLmRh dGE7Ci0jZWxzZSAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoIGs1 X3Nlc3Npb25fa2V5LT5lbmN0eXBlICkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEVOQ1RZ UEVfREVTX0NCQ19DUkM6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRU5DVFlQRV9ERVNfQ0JD X01ENToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFTkNUWVBFX0RFU19DQkNfTUQ0OgotICAg ICAgICAgICAgICAgICAgICAgICAgc2tleS50eXBlID0gU0tfREVTOwotICAgICAgICAgICAgICAg ICAgICAgICAgc2tleS5sZW5ndGggPSA4OwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogot ICAgICAgICAgICAgICAgICAgICAgICAgc2tleS50eXBlID0gU0tfR0VORVJJQzsKLSAgICAgICAg ICAgICAgICAgICAgICAgIHNrZXkubGVuZ3RoID0gazVfc2Vzc2lvbl9rZXktPmxlbmd0aDsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHRfZG9udF9zdXBwb3J0KEVOQ1RZUEVfREVTX0NG QjY0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHRfZG9udF9zdXBwb3J0KEVOQ1RZ UEVfREVTX09GQjY0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICBza2V5LmRhdGEgPSBrNV9zZXNzaW9uX2tleS0+Y29udGVudHM7Ci0jZW5kaWYgLyogSEVJTURB TCAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbmNyeXB0X3Nlc3Npb25f a2V5KCZza2V5LCBBVVRIX0NMSUVOVF9UT19TRVJWRVIpOwotICAgICAgICAgICAgfQotI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgfQotICAgICAgICBpZiAoIGNudCA+IDAgKSB7 Ci0gICAgICAgICAgICBjaGFyICpzOwotICAgICAgICAgICAgaW50IGxlbjsKLSAgICAgICAgICAg IGNrc3RybmNweShzdHJUbXAsIktlcmJlcm9zIFY1IGFjY2VwdHMgeW91IGFzICIsc2l6ZW9mKHN0 clRtcCkpOwotICAgICAgICAgICAgbGVuID0gc3RybGVuKHN0clRtcCk7Ci0gICAgICAgICAgICBp ZiAoIGxlbiArIGNudCA8IHNpemVvZihzdHJUbXApICkgewotICAgICAgICAgICAgICAgIHMgPSBz dHJUbXAgKyBzdHJsZW4oc3RyVG1wKTsKLSAgICAgICAgICAgICAgICBtZW1jcHkocyxkYXRhLGNu dCk7Ci0gICAgICAgICAgICAgICAgc1tjbnRdID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAxOwotICAgICAgICBwcmludGYoIiVzXHJcbiIs c3RyVG1wKTsKLQotI2lmZGVmIEZPUldBUkQKLSAgICAgICAgaWYgKGZvcndhcmRfZmxhZwotI2lm ZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAvKiBNYXJjIEhvcm93aXR6IDxtYXJjQG1pdC5lZHU+ IGhhcyBzdWNjZXNzZnVsbHkgYXJndWVkCi0gICAgICAgICAgICAgICAgdGhhdCBpdCBpcyBpbmRl ZWQgc2FmZSB0byBzZW5kIEZvcndhcmRlZCBjcmVkZW50aWFscwotICAgICAgICAgICAgICAgIHRv IGFuIHVudHJ1c3RlZCBob3N0LgotICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICYmIChh dXRoX2hvdyAmIEFVVEhfSE9XX01BU0spID09IEFVVEhfSE9XX01VVFVBTAotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSAgICAgICAgICAgICApCi0gICAgICAgICAgICBrZXJiZXJvczVfZm9yd2FyZCgp OwotI2VuZGlmIC8qIEZPUldBUkQgKi8KLSAgICAgICAga3JiNV9lcnJubyA9IDA7Ci0gICAgICAg IG1ha2VzdHIoJmtyYjVfZXJybXNnLHN0clRtcCk7Ci0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVU SF9VU0VSKTsKLSAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKLQotICAgIGNhc2UgS1JCNV9S RVNQT05TRToKLSNpZmRlZiBUTFNfVkVSSUZZCi0gICAgICAgIGlmICgoaG93ICYgQVVUSF9FTkNS WVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMgJiYKLSAgICAgICAgICAgICFrcmI1 X3Rsc192ZXJpZmllZCkgewotICAgICAgICAgICAgcHJpbnRmKAotICAgICJNYW4gaW4gdGhlIG1p ZGRsZSBhdHRhY2sgZGV0ZWN0ZWQuICBTZXNzaW9uIHRlcm1pbmF0ZWQuXHJcbiIpOwotI2lmbmRl ZiBCRVRBVEVTVAotICAgICAgICAgICAgbmV0Y2xvcygpOwotI2VuZGlmIC8qIEJFVEFURVNUICov Ci0gICAgICAgICAgICBrcmI1X2Vycm5vID0gLTE7Ci0gICAgICAgICAgICBtYWtlc3RyKCZrcmI1 X2Vycm1zZywiVExTIG5vdCB2ZXJpZmllZCIpOwotICAgICAgICAgICAgYXV0aF9maW5pc2hlZChB VVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwotICAgICAgICB9 Ci0gICAgICAgIGlmKChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSAmJgotICAg ICAgICAgICAgKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRf VExTKSB7Ci0gICAgICAgICAgICBwcmludGYoIlRMUyBzZXNzaW9uIHBhcmFtZXRlcnMgdmVyaWZp ZWQgYnkgS2VyYmVyb3MgNVxyXG4iKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIFRMU19WRVJJRlkg Ki8KLSAgICAgICAgaWYgKChob3cgJiBBVVRIX0hPV19NQVNLKSA9PSBBVVRIX0hPV19NVVRVQUwp IHsKLSAgICAgICAgICAgIC8qIHRoZSByZXN0IG9mIHRoZSByZXBseSBzaG91bGQgY29udGFpbiBh IGtyYl9hcF9yZXAgKi8KLSAgICAgICAgICAgIGtyYjVfYXBfcmVwX2VuY19wYXJ0ICpyZXBseTsK LSAgICAgICAgICAgIGtyYjVfZGF0YSBpbmJ1ZjsKLSAgICAgICAgICAgIGtyYjVfZXJyb3JfY29k ZSByOwotCi0gICAgICAgICAgICBpbmJ1Zi5sZW5ndGggPSBjbnQ7Ci0gICAgICAgICAgICBpbmJ1 Zi5kYXRhID0gKGNoYXIgKilkYXRhOwotCi0gICAgICAgICAgICBpZiAociA9IGtyYjVfcmRfcmVw KGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCwgJmluYnVmLCAmcmVwbHkpKSB7Ci0gICAgICAgICAg ICAgICAgY29tX2VycihOVUxMLCByLCAid2hpbGUgYXV0aG9yaXppbmcuICg1KSIpOwotICAgICAg ICAgICAgICAgIGtyYjVfZXJybm8gPSByOwotICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVf ZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOwotICAgICAgICAgICAgICAgIGF1dGhf ZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxV UkU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBrcmI1X2ZyZWVfYXBfcmVwX2VuY19wYXJ0 KGs1X2NvbnRleHQsIHJlcGx5KTsKLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAg IGlmIChlbmNyeXB0X2ZsYWcgJiYgazVfc2Vzc2lvbl9rZXkpIHsKLSAgICAgICAgICAgICAgICBp ZiAoIHRuX2F1dGhfa3JiNV9kZXNfYnVnICkgeyAgIC8qICFBTExPV19LUkJfM0RFU19FTkNSWVBU ICovCi0gICAgICAgICAgICAgICAgICAgIHNrZXkudHlwZSA9IFNLX0RFUzsKLSAgICAgICAgICAg ICAgICAgICAgc2tleS5sZW5ndGggPSA4OwotI2lmZGVmIEhFSU1EQUwKLSAgICAgICAgICAgICAg ICAgICAgc2tleS5kYXRhID0gazVfc2Vzc2lvbl9rZXktPmtleXZhbHVlLmRhdGE7Ci0jZWxzZSAv KiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAgICAgIHNrZXkuZGF0YSA9IGs1X3Nlc3Npb25f a2V5LT5jb250ZW50czsKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAgfSBl bHNlIHsKLSNpZmRlZiBIRUlNREFMCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoIGs1X3Nl c3Npb25fa2V5LT5rZXl0eXBlICkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEVUWVBFX0RF U19DQkNfQ1JDOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEVUWVBFX0RFU19DQkNfTUQ1Ogot ICAgICAgICAgICAgICAgICAgICBjYXNlIEVUWVBFX0RFU19DQkNfTUQ0OgotICAgICAgICAgICAg ICAgICAgICAgICAgc2tleS50eXBlID0gU0tfREVTOwotICAgICAgICAgICAgICAgICAgICAgICAg c2tleS5sZW5ndGggPSA4OwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg ICAgICAgICAgICAgICAgc2tleS50eXBlID0gU0tfR0VORVJJQzsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHNrZXkubGVuZ3RoID0gazVfc2Vzc2lvbl9rZXktPmxlbmd0aDsKLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBza2V5LmRhdGEgPSBrNV9zZXNzaW9uX2tl eS0+a2V5dmFsdWUuZGF0YTsKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICAg ICAgc3dpdGNoICggazVfc2Vzc2lvbl9rZXktPmVuY3R5cGUgKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGNhc2UgRU5DVFlQRV9ERVNfQ0JDX0NSQzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBF TkNUWVBFX0RFU19DQkNfTUQ1OgotICAgICAgICAgICAgICAgICAgICBjYXNlIEVOQ1RZUEVfREVT X0NCQ19NRDQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBza2V5LnR5cGUgPSBTS19ERVM7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBza2V5Lmxlbmd0aCA9IDg7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg ICAgICAgICAgICAgIHNrZXkudHlwZSA9IFNLX0dFTkVSSUM7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBza2V5Lmxlbmd0aCA9IGs1X3Nlc3Npb25fa2V5LT5sZW5ndGg7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc2tleS5kYXRhID0gazVfc2Vzc2lvbl9rZXkt PmNvbnRlbnRzOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgZW5jcnlwdF9zZXNzaW9uX2tleSgmc2tleSwgQVVUSF9DTElFTlRfVE9fU0VS VkVSKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBFTkNSWVBUSU9OICovCi0gICAgICAgICAg ICBtdXR1YWxfY29tcGxldGUgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNweShzdHJU bXAsIlJlbW90ZSBtYWNoaW5lIGhhcyBiZWVuIG11dHVhbGx5IGF1dGhlbnRpY2F0ZWQiLAotICAg ICAgICAgICAgICAgICAgc2l6ZW9mKHN0clRtcCkpOwotICAgICAgICBrcmI1X2Vycm5vID0gMDsK LSAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csc3RyVG1wKTsKLSAgICAgICAgcHJpbnRmKCIl c1xyXG4iLHN0clRtcCk7Ci0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsKLSAgICAg ICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKLQotI2lmZGVmIEZPUldBUkQKLSAgICBjYXNlIEtSQjVf Rk9SV0FSRF9BQ0NFUFQ6Ci0gICAgICAgIGZvcndhcmRlZF90aWNrZXRzID0gMTsKLSAgICAgICAg Y2tzdHJuY3B5KHN0clRtcCwiUmVtb3RlIG1hY2hpbmUgaGFzIGFjY2VwdGVkIGZvcndhcmRlZCBj cmVkZW50aWFscyIsCi0gICAgICAgICAgICAgICAgICBzaXplb2Yoc3RyVG1wKSk7Ci0gICAgICAg IGtyYjVfZXJybm8gPSAwOwotICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxzdHJUbXApOwot ICAgICAgICBwcmludGYoIiVzXHJcbiIsc3RyVG1wKTsKLSAgICAgICAgcmV0dXJuIEFVVEhfU1VD Q0VTUzsKLQotICAgIGNhc2UgS1JCNV9GT1JXQVJEX1JFSkVDVDoKLSAgICAgICAgZm9yd2FyZGVk X3RpY2tldHMgPSAwOwotICAgICAgICBpZiAoY250ID4gMCkgewotICAgICAgICAgICAgY2hhciAq czsKLSAgICAgICAgICAgIGludCBsZW47Ci0gICAgICAgICAgICBsZW4gPSBja3N0cm5jcHkoc3Ry VG1wLAotICAgICAgICAgICAgICAgICAgICAgICJLZXJiZXJvcyBWNSByZWZ1c2VzIGZvcndhcmRl ZCBjcmVkZW50aWFscyBiZWNhdXNlICIsCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihz dHJUbXApKTsKLSAgICAgICAgICAgIGlmICggbGVuICsgY250IDwgc2l6ZW9mKHN0clRtcCkgKSB7 Ci0gICAgICAgICAgICAgICAgcyA9IHN0clRtcCArIHN0cmxlbihzdHJUbXApOwotICAgICAgICAg ICAgICAgIG1lbWNweShzLCBkYXRhLCBjbnQpOwotICAgICAgICAgICAgICAgIHNbY250XSA9IDA7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2tzdHJuY3B5KHN0 clRtcCwgIktlcmJlcm9zIFY1IHJlZnVzZXMgZm9yd2FyZGVkIGNyZWRlbnRpYWxzIiwKLSAgICAg ICAgICAgICAgICAgICAgICBzaXplb2Yoc3RyVG1wKSk7Ci0KLSAgICAgICAgcHJpbnRmKCIlc1xy XG4iLHN0clRtcCk7Ci0gICAgICAgIGtyYjVfZXJybm8gPSAtMTsKLSAgICAgICAgbWFrZXN0cigm a3JiNV9lcnJtc2csc3RyVG1wKTsKLSAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKLSNlbmRp ZiAgLyogRk9SV0FSRCAqLwotCi0jaWZkZWYgVExTX1ZFUklGWQotICAgIGNhc2UgS1JCNV9UTFNf VkVSSUZZOgotICAgICAgICBpZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VO Q1JZUFRfU1RBUlRfVExTKSB7Ci0gICAgICAgICAgICBrcmI1X2RhdGEgcmVwbHksIG1zZzsKLSAg ICAgICAgICAgIGNoYXIgdGxzX3ZlcmlmeVsyNF07Ci0gICAgICAgICAgICBrcmI1X3JlcGxheV9k YXRhIHJlcGRhdGE7Ci0gICAgICAgICAgICBrcmI1X2Vycm9yX2NvZGUgcjsKLQotICAgICAgICAg ICAgc3NsX2dldF9zZXJ2ZXJfZmluaXNoZWQoJnRsc192ZXJpZnlbMF0sMTIpOwotICAgICAgICAg ICAgc3NsX2dldF9jbGllbnRfZmluaXNoZWQoJnRsc192ZXJpZnlbMTJdLDEyKTsKLQotICAgICAg ICAgICAgcmVwbHkuZGF0YSA9IChjaGFyICopZGF0YTsKLSAgICAgICAgICAgIHJlcGx5Lmxlbmd0 aCA9IGNudDsKLQotCQkJa3JiNV9hdXRoX2Nvbl9nZW5hZGRycyhrNV9jb250ZXh0LCBhdXRoX2Nv bnRleHQsIHR0eWZkLAotCQkJCQkJCQkgICBLUkI1X0FVVEhfQ09OVEVYVF9HRU5FUkFURV9SRU1P VEVfRlVMTF9BRERSKTsKLQotICAgICAgICAgICAgaWYgKHIgPSBrcmI1X3JkX3NhZmUoazVfY29u dGV4dCxhdXRoX2NvbnRleHQsJnJlcGx5LCZtc2csJnJlcGRhdGEpKQotICAgICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgY29tX2VycigiIiwgciwgImRlY29kaW5nIHRscyB2ZXJpZmllciIp OwotICAgICAgICAgICAgICAgIGtyYjVfZXJybm8gPSByOwotICAgICAgICAgICAgICAgIG1ha2Vz dHIoJmtyYjVfZXJybXNnLCJUTFMgdmVyaWZ5IGZhaWx1cmUiKTsKLSAgICAgICAgICAgICAgICBh dXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oQVVUSF9G QUlMVVJFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICggbXNnLmxlbmd0aCA9PSAy NCAmJiAhbWVtY21wKG1zZy5kYXRhLHRsc192ZXJpZnksMjQpICkKLSAgICAgICAgICAgICAgICAg a3JiNV90bHNfdmVyaWZpZWQgPSAxOwotICAgICAgICAgICAga3JiNV9mcmVlX2RhdGFfY29udGVu dHMoazVfY29udGV4dCwmbXNnKTsKLSAgICAgICAgICAgIGlmIChrcmI1X3Rsc192ZXJpZmllZCkK LSAgICAgICAgICAgICAgICByZXR1cm4oQVVUSF9TVUNDRVNTKTsKLSAgICAgICAgfQotICAgICAg ICBwcmludGYoIk1hbiBpbiB0aGUgbWlkZGxlIGF0dGFjayBkZXRlY3RlZC4gIFNlc3Npb24gdGVy bWluYXRlZC5cclxuIik7Ci0gICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAga3JiNV9lcnJubyA9 IC0xOwotICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZywiVExTIHZlcmlmeSBmYWlsdXJlIik7 Ci0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICByZXR1cm4oQVVU SF9GQUlMVVJFKTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAg IGtyYjVfZXJybm8gPSAtMTsKLSAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csIlVua25vd24g cmVwbHkgdHlwZSIpOwotICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAg ICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3du IHJlcGx5IHR5cGUgKi8KLSAgICB9Ci19Ci0KLSNpZmRlZiBGT1JXQVJECi0vKiBEZWNvZGUsIGRl Y3J5cHQgYW5kIHN0b3JlIHRoZSBmb3J3YXJkZWQgY3JlZHMgaW4gdGhlIGxvY2FsIGNjYWNoZS4g Ki8KLS8qIE5lZWRlZCBmb3IgS1JCNV9GT1JXQVJEICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLwotc3RhdGljIGtyYjVfZXJyb3JfY29kZQotcmRfYW5kX3N0b3Jl X2Zvcl9jcmVkcyhjb250ZXh0LCBhdXRoX2NvbnRleHQsIGluYnVmLCBjbGllbnQpCi0gICAga3Ji NV9jb250ZXh0IGNvbnRleHQ7Ci0gICAga3JiNV9hdXRoX2NvbnRleHQgYXV0aF9jb250ZXh0Owot ICAgIGtyYjVfZGF0YSAqaW5idWY7Ci0gICAga3JiNV9jb25zdF9wcmluY2lwYWwgY2xpZW50Owot ewotICAgIGtyYjVfY3JlZHMgKiogY3JlZHM9TlVMTDsKLSAgICBrcmI1X2Vycm9yX2NvZGUgcmV0 dmFsOwotICAgIGtyYjVfY2NhY2hlIGNjYWNoZT1OVUxMOwotCi0jaWZkZWYgSEVJTURBTAotICAg IC8qCi0gICAgSGVpbWRhbCBUZWxuZXRkIGNyZWF0ZXMgdGhlIGNhY2hlIGZpbGUgYXQgdGhpcyBw b2ludCBhbmQgc2V0cwotICAgIHRoZSBLUkI1Q0NOQU1FIGVudmlyb25tZW50IHZhcmlhYmxlLgot Ci0gICAgc3RydWN0IHBhc3N3ZCAqcHdkOwotICAgIGNoYXIgY2NuYW1lWzEwMjRdOwotCi0gICAg cHdkID0gZ2V0cHduYW0oc3pVc2VyTmFtZVJlcXVlc3RlZCk7Ci0gICAgaWYgKHB3ZCA9PSBOVUxM KQotICAgICAgICBicmVhazsKLSAgICBzbnByaW50ZihjY25hbWUsIHNpemVvZihjY25hbWUpLTEs ICJGSUxFOi90bXAva3JiNWNjXyV1Iixwd2QtPnB3X3VpZCk7Ci0gICAgcmV0dmFsID0ga3JiNV9j Y19yZXNvbHZlKGNvbnRleHQsY2NuYW1lLCZjY2FjaGUpOwotCi0gICAgY2hvd24oY2NuYW1lICsg NSwgcHdkLT5wd191aWQsIC0xKTsKLSAgICAqLwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLQotICAg IGlmIChyZXR2YWwgPSBrNV9nZXRfY2NhY2hlKGNvbnRleHQsJmNjYWNoZSxOVUxMKSkKLSAgICAg ICAgcmV0dXJuKHJldHZhbCk7Ci0KLSNpZmRlZiBIRUlNREFMCi0gICAgaWYgKChyZXR2YWwgPSBr cmI1X2NjX2luaXRpYWxpemUoY29udGV4dCwgY2NhY2hlLCBjbGllbnQpKSkKLSAgICAgICAgcmV0 dXJuKHJldHZhbCk7Ci0KLSAgICBpZiAoKHJldHZhbCA9IGtyYjVfcmRfY3JlZChjb250ZXh0LCBh dXRoX2NvbnRleHQsIGNjYWNoZSwgaW5idWYpKSkKLSAgICAgICAgcmV0dXJuKHJldHZhbCk7Ci0j ZWxzZSAvKiBIRUlNREFMICovCi0gICAgaWYgKChyZXR2YWwgPSBrcmI1X3JkX2NyZWQoY29udGV4 dCwgYXV0aF9jb250ZXh0LCBpbmJ1ZiwgJmNyZWRzLCBOVUxMKSkpCi0gICAgICAgIHJldHVybihy ZXR2YWwpOwotCi0gICAgaWYgKChyZXR2YWwgPSBrcmI1X2NjX2luaXRpYWxpemUoY29udGV4dCwg Y2NhY2hlLCBjcmVkc1swXS0+Y2xpZW50KSkpCi0gICAgICAgIGdvdG8gY2xlYW51cDsKLQotICAg IGlmICgocmV0dmFsID0ga3JiNV9jY19zdG9yZV9jcmVkKGNvbnRleHQsIGNjYWNoZSwgY3JlZHNb MF0pKSkKLSAgICAgICAgZ290byBjbGVhbnVwOwotCi0gICAgaWYgKChyZXR2YWwgPSBrcmI1X2Nj X2Nsb3NlKGNvbnRleHQsIGNjYWNoZSkpKQotICAgICAgICBnb3RvIGNsZWFudXA7Ci0KLSAgY2xl YW51cDoKLSAgICBrcmI1X2ZyZWVfdGd0X2NyZWRzKGNvbnRleHQsIGNyZWRzKTsKLSNlbmRpZiAv KiBIRUlNREFMICovCi0gICAgcmV0dXJuIHJldHZhbDsKLX0KLSNlbmRpZiAvKiBGT1JXQVJEICov Ci0KLS8qCi0gKgotICogSzVfYXV0aF9pcy4KLSAqCi0gKi8KLQotc3RhdGljIGludAotI2lmZGVm IENLX0FOU0lDCi1rNV9hdXRoX2lzKGludCBob3csIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBj bnQpCi0jZWxzZQotazVfYXV0aF9pcyhob3csZGF0YSxjbnQpIGludCBob3c7IHVuc2lnbmVkIGNo YXIgKmRhdGE7IGludCBjbnQ7Ci0jZW5kaWYKLXsKLSAgICBpbnQgciA9IDA7Ci0gICAga3JiNV9w cmluY2lwYWwgc2VydmVyOwotICAgIGtyYjVfa2V5YmxvY2sgKm5ld2tleSA9IE5VTEw7Ci0gICAg a3JiNV9kYXRhIG91dGJ1ZjsKLSAgICBjaGFyIGVycmJ1ZlsxMjhdPSIiOwotICAgIGNoYXIgKmdl dGVudigpOwotI2lmbmRlZiBIRUlNREFMCi0gICAga3JiNV9hdXRoZW50aWNhdG9yICphdXRoZW50 aWNhdG9yOwotICAgIGtyYjVfa2V5dGFiIGtleXRhYmlkID0gMDsKLSNlbmRpZiAvKiBIRUlNREFM ICovCi0gICAga3JiNV9kYXRhIGluYnVmOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICBTZXNz aW9uX0tleSBza2V5OwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICBjaGFyIHByaW5j WzI1Nl09IiI7Ci0gICAgaW50IGxlbjsKLQotICAgIGRhdGEgKz0gNDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gc3RhdHVzIGJ5dGUgKi8KLSAgICBjbnQgLT0g NDsKLQotICAgIGNraGV4ZHVtcCgiazVfYXV0aF9pcyBkYXRhIixkYXRhLGNudCk7Ci0gICAgZGVi dWcoRjExMSwiazVfYXV0aF9pcyIsImhvdyIsaG93KTsKLQotICAgIGlmIChjbnQtLSA8IDEpIHsK LSAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgIHJldHVybiBBVVRI X0ZBSUxVUkU7Ci0gICAgfQotICAgIHN3aXRjaCAoKmRhdGErKykgewotICAgIGNhc2UgS1JCX0FV VEg6Ci0gICAgICAgIGs1X2F1dGguZGF0YSA9IChjaGFyICopZGF0YTsKLSAgICAgICAgazVfYXV0 aC5sZW5ndGggPSBjbnQ7Ci0KLSAgICAgICAgZGVidWcoRjExMCwiazVfYXV0aF9pcyIsIktSQl9B VVRIIiwwKTsKLSAgICAgICAgZGVidWcoRjExMSwiazVfYXV0aF9pcyIsImF1dGhfY29udGV4dCIs YXV0aF9jb250ZXh0KTsKLQotICAgICAgICBpZiAoIXIgJiYgIWF1dGhfY29udGV4dCkgewotICAg ICAgICAgICAgciA9IGtyYjVfYXV0aF9jb25faW5pdChrNV9jb250ZXh0LCAmYXV0aF9jb250ZXh0 KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfaXMiLCJrcmI1X2F1dGhfY29uX2lu aXQiLHIpOwotICAgICAgICB9Ci0KLSNpZmRlZiBIRUlNREFMCi0gICAgICAgIGlmICghcikKLSAg ICAgICAgICAgIHIgPSBrcmI1X2F1dGhfY29uX3NldGFkZHJzX2Zyb21fZmQoazVfY29udGV4dCwK LQkJCQkJICAgICAgIGF1dGhfY29udGV4dCwKLQkJCQkJICAgICAgICZ0dHlmZCk7Ci0gICAgICAg IGlmICghcikKLSAgICAgICAgICAgIHIgPSBrcmI1X3NvY2tfdG9fcHJpbmNpcGFsKGs1X2NvbnRl eHQsCi0JCQkJICAgICAgIDAsCi0JCQkJICAgICAgICJob3N0IiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEtSQjVfTlRfU1JWX0hTVCwKLQkJCQkgICAgICAgJnNlcnZl cik7Ci0gICAgICAgIGlmICghcikKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgaWYgKCFy KSB7Ci0gICAgICAgICAgICBrcmI1X3JjYWNoZSByY2FjaGUgPSBOVUxMOwotCi0gICAgICAgICAg ICByID0ga3JiNV9hdXRoX2Nvbl9nZXRyY2FjaGUoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmNhY2hlKTsKLSAgICAg ICAgICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfaXMiLCJrcmI1X2F1dGhfY29uX2dldHJjYWNoZSIs cik7Ci0KLSAgICAgICAgICAgIGlmICghciAmJiAhcmNhY2hlKSB7Ci0gICAgICAgICAgICAgICAg LyogRG8gbm90IHJlc29sdmUgc2VydmVyJ3MgcHJpbmNpcGFsIG5hbWUsIHdlIHdpbGwgY2hlY2sg Ki8KLSAgICAgICAgICAgICAgICAvKiBmb3IgdmFsaWRpdHkgYWZ0ZXIgdGhlIGtyYjVfcmRfcmVx KCkgY2FsbC4gICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHIgPSBrcmI1X3NuYW1lX3Rv X3ByaW5jaXBhbChrNV9jb250ZXh0LCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgS1JCNV9OVF9TUlZfSFNULCAmc2VydmVyKTsKLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRoX2lzIiwia3JiNV9zbmFtZV90b19wcmluY2lwYWwiLHIp OwotCi0gICAgICAgICAgICAgICAgaWYgKCFyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBr cmI1X2dldF9zZXJ2ZXJfcmNhY2hlKGs1X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg ICBrcmI1X3ByaW5jX2NvbXBvbmVudChrNV9jb250ZXh0LCBzZXJ2ZXIsIDApLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJjYWNoZSk7Ci0gICAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfaXMiLCJrcmI1X2dldF9zZXJ2ZXJfcmNh Y2hlIixyKTsKLSAgICAgICAgICAgICAgICAgICAga3JiNV9mcmVlX3ByaW5jaXBhbChrNV9jb250 ZXh0LCBzZXJ2ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGlmICghcikgewotICAgICAgICAgICAgICAgIHIgPSBrcmI1X2F1dGhfY29uX3NldHJjYWNo ZShrNV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXV0aF9jb250ZXh0LCByY2FjaGUpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1 X2F1dGhfaXMiLCJrcmI1X2F1dGhfY29uX3NldHJjYWNoZSIscik7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0KLSAgICAgICAgaWYgKCFyICYmIGs1X2tleXRhYikgewotICAgICAgICAgICAgciA9 IGtyYjVfa3RfcmVzb2x2ZShrNV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgazVfa2V5dGFiLCAma2V5dGFiaWQpOwotICAgICAgICAgICAgZGVidWcoRjExMSwiazVf YXV0aF9pcyIsImtyYjVfa3RfcmVzb2x2ZSIscik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBIRUlN REFMICovCi0gICAgICAgIGlmICghcikgewotICAgICAgICAgICAgciA9IGtyYjVfcmRfcmVxKGs1 X2NvbnRleHQsICZhdXRoX2NvbnRleHQsICZrNV9hdXRoLAotI2lmZGVmIEhFSU1EQUwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLCBOVUxMLCBOVUxMLAotI2Vsc2UgLyogSEVJ TURBTCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBrZXl0YWJpZCwgTlVM TCwKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZr NV90aWNrZXQpOwotICAgICAgICAgICAgZGVidWcoRjExMSwiazVfYXV0aF9pcyIsImtyYjVfcmRf cmVxIixyKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocikgewotICAgICAgICAgICAgKHZvaWQp IGNrc3RybmNweShlcnJidWYsICJrcmI1X3JkX3JlcSBmYWlsZWQ6ICIsc2l6ZW9mKGVycmJ1Zikp OwotICAgICAgICAgICAgKHZvaWQpIGNrc3RybmNhdChlcnJidWYsIGVycm9yX21lc3NhZ2Uociks c2l6ZW9mKGVycmJ1ZikpOwotICAgICAgICAgICAgZ290byBlcnJvdXQ7Ci0gICAgICAgIH0KLSNp ZmRlZiBIRUlNREFMCi0gICAgICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoazVfY29udGV4dCwgc2Vy dmVyKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIHR5cGVfY2hlY2tbMjZdOwotCi0g ICAgICAgICAgICAvKiBVUERBVEUgZm9yIFNUQVJUX1RMUy4gQVVUSF9FTkNSWVBUX1NUQVJUX1RM UyBhbmQgaW5jbHVzaW9uIG9mICovCi0gICAgICAgICAgICAvKiBjbGllbnQgYW5kIHRoZW4gc2Vy dmVyIGZpbmlzaGVkIG1lc3NhZ2VzLiAqLwotCi0gICAgICAgICAgICB0eXBlX2NoZWNrWzBdID0g QVVUSFRZUEVfS0VSQkVST1NfVjU7Ci0gICAgICAgICAgICB0eXBlX2NoZWNrWzFdID0gaG93OyAg ICAgICAgLyogbm90IGJyb2tlbiBpbnRvIHBhcnRzICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAg ICAgICBpZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRf VExTKSB7Ci0gICAgICAgICAgICAgICAgc3NsX2dldF9jbGllbnRfZmluaXNoZWQoJnR5cGVfY2hl Y2tbMl0sMTIpOwotICAgICAgICAgICAgICAgIHNzbF9nZXRfc2VydmVyX2ZpbmlzaGVkKCZ0eXBl X2NoZWNrWzE0XSwxMik7Ci0gICAgICAgICAgICAgICAgY2toZXhkdW1wKCJrNV9hdXRoX2lzIHR5 cGVfY2hlY2siLHR5cGVfY2hlY2ssMjYpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX1NT TCAqLwotCi0gICAgICAgICAgICByID0ga3JiNV92ZXJpZnlfYXV0aGVudGljYXRvcl9jaGVja3N1 bShrNV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGF1dGhfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0eXBlX2NoZWNrLAotI2lmZGVmIENLX1NTTAotICAgICAgICAg ICAgICAgICgoaG93ICYgQVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9U TFMpID8gMjYgOgotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpOwotICAgICAgICB9Ci0jZWxzZSAvKiBIRUlN REFMICovCi0gICAgICAgIGxlbiA9IGtyYjVfcHJpbmNfY29tcG9uZW50KGs1X2NvbnRleHQsazVf dGlja2V0LT5zZXJ2ZXIsMCktPmxlbmd0aDsKLSAgICAgICAgaWYgKGxlbiA8IDI1NikKLSAgICAg ICAgewotICAgICAgICAgICAgbWVtY3B5KHByaW5jLAotICAgICAgICAgICAgICAgICAgIGtyYjVf cHJpbmNfY29tcG9uZW50KGs1X2NvbnRleHQsazVfdGlja2V0LT5zZXJ2ZXIsMCktPmRhdGEsCi0g ICAgICAgICAgICAgICAgICAgbGVuKTsKLSAgICAgICAgICAgIHByaW5jW2xlbl0gPSAnXDAnOwot ICAgICAgICB9Ci0gICAgICAgIGlmICggc3RyY21wKChrcmI1X2Rfc3J2ID8ga3JiNV9kX3NydiA6 IEtSQjVfU0VSVklDRV9OQU1FKSwgcHJpbmMpICkKLSAgICAgICAgewotICAgICAgICAgICAgZGVi dWcoRjExMCwiazVfYXV0aF9pcyBpbmNvcnJlY3Qgc2VydmljZSBuYW1lIixwcmluYywwKTsKLSAg ICAgICAgICAgIGNrc3RybmNweShlcnJidWYsImluY29ycmVjdCBzZXJ2aWNlIG5hbWU6ICIsc2l6 ZW9mKGVycmJ1ZikpOwotICAgICAgICAgICAgY2tzdHJuY2F0KGVycmJ1ZixrcmI1X2Rfc3J2ID8g a3JiNV9kX3NydiA6IEtSQjVfU0VSVklDRV9OQU1FLAotICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mKGVycmJ1ZikpOwotICAgICAgICAgICAgY2tzdHJuY2F0KGVycmJ1ZiwiICE9ICIsc2l6ZW9m KGVycmJ1ZikpOwotICAgICAgICAgICAgY2tzdHJuY2F0KGVycmJ1ZixwcmluYyxzaXplb2YoZXJy YnVmKSk7Ci0gICAgICAgICAgICBnb3RvIGVycm91dDsKLSAgICAgICAgfQotCi0gICAgICAgIHIg PSBrcmI1X2F1dGhfY29uX2dldGF1dGhlbnRpY2F0b3IoazVfY29udGV4dCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9jb250ZXh0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXV0aGVudGljYXRvcik7Ci0gICAg ICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfaXMiLCJrcmI1X2F1dGhfY29uX2dldGF1dGhlbnRpY2F0 b3IiLHIpOwotICAgICAgICBpZiAocikgewotICAgICAgICAgICAgKHZvaWQpIGNrc3RybmNweShl cnJidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrcmI1X2F1dGhfY29uX2dldGF1 dGhlbnRpY2F0b3IgZmFpbGVkOiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2YoZXJyYnVmKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg KHZvaWQpIGNrc3RybmNhdChlcnJidWYsIGVycm9yX21lc3NhZ2Uociksc2l6ZW9mKGVycmJ1Zikp OwotICAgICAgICAgICAgZ290byBlcnJvdXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXV0 aGVudGljYXRvci0+Y2hlY2tzdW0pIHsKLSAgICAgICAgICAgIGNoYXIgdHlwZV9jaGVja1syNl07 Ci0gICAgICAgICAgICBrcmI1X2NoZWNrc3VtICpja3N1bSA9IGF1dGhlbnRpY2F0b3ItPmNoZWNr c3VtOwotICAgICAgICAgICAga3JiNV9rZXlibG9jayAqa2V5OwotCi0gICAgICAgICAgICAvKiBV UERBVEUgZm9yIFNUQVJUX1RMUy4gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUyBhbmQgaW5jbHVzaW9u IG9mICovCi0gICAgICAgICAgICAvKiBjbGllbnQgYW5kIHRoZW4gc2VydmVyIGZpbmlzaGVkIG1l c3NhZ2VzLiAqLwotCi0gICAgICAgICAgICB0eXBlX2NoZWNrWzBdID0gQVVUSFRZUEVfS0VSQkVS T1NfVjU7Ci0gICAgICAgICAgICB0eXBlX2NoZWNrWzFdID0gaG93OyAgICAgICAgLyogbm90IGJy b2tlbiBpbnRvIHBhcnRzICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICBpZiAoKGhvdyAm IEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSB7Ci0gICAgICAg ICAgICAgICAgc3NsX2dldF9jbGllbnRfZmluaXNoZWQoJnR5cGVfY2hlY2tbMl0sMTIpOwotICAg ICAgICAgICAgICAgIHNzbF9nZXRfc2VydmVyX2ZpbmlzaGVkKCZ0eXBlX2NoZWNrWzE0XSwxMik7 Ci0gICAgICAgICAgICAgICAgY2toZXhkdW1wKCJrNV9hdXRoX2lzIHR5cGVfY2hlY2siLHR5cGVf Y2hlY2ssMjYpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgICAg ICAgICByID0ga3JiNV9hdXRoX2Nvbl9nZXRrZXkoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5KTsKLSAgICAgICAgICAg IGRlYnVnKEYxMTEsIms1X2F1dGhfaXMiLCJrcmI1X2F1dGhfY29uX2dldGtleSIscik7Ci0gICAg ICAgICAgICBpZiAocikgewotICAgICAgICAgICAgICAgICh2b2lkKSBja3N0cm5jcHkoZXJyYnVm LCAia3JiNV9hdXRoX2Nvbl9nZXRrZXkgZmFpbGVkOiAiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZihlcnJidWYpKTsKLSAgICAgICAgICAgICAgICAodm9pZCkgY2tz dHJuY2F0KGVycmJ1ZiwgZXJyb3JfbWVzc2FnZShyKSxzaXplb2YoZXJyYnVmKSk7Ci0gICAgICAg ICAgICAgICAgZ290byBlcnJvdXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHIgPSBr cmI1X3ZlcmlmeV9jaGVja3N1bShrNV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBja3N1bS0+Y2hlY2tzdW1fdHlwZSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2tzdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZ0eXBlX2NoZWNrLAotICAgICAgICAgICAgICAgICAgKChob3cgJiBBVVRIX0VOQ1JZ UFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUykgPyAyNiA6Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGtleS0+Y29udGVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGtleS0+bGVuZ3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRoX2lzIiwia3JiNV92ZXJpZnlfY2hl Y2tzdW0iLHIpOwotICAgICAgICAgICAgaWYgKHIpIHsKLSAgICAgICAgICAgICAgICAodm9pZCkg Y2tzdHJuY3B5KGVycmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGVj a3N1bSB2ZXJpZmljYXRpb24gZmFpbGVkOiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mKGVycmJ1ZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgICAgICAgICAgKHZvaWQpIGNrc3RybmNhdChlcnJidWYsIGVycm9yX21lc3NhZ2Uo ciksc2l6ZW9mKGVycmJ1ZikpOwotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3V0OwotICAgICAg ICAgICAgfQotICAgICAgICAgICAga3JiNV9mcmVlX2tleWJsb2NrKGs1X2NvbnRleHQsIGtleSk7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9N QVNLKSA9PSBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BUKSB7Ci0gICAgICAgICAgICAgICAgKHZv aWQpIHN0cmNweShlcnJidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dGhl bnRpY2F0b3IgaXMgbWlzc2luZyByZXF1aXJlZCBjaGVja3N1bSIpOwotICAgICAgICAgICAgICAg IGdvdG8gZXJyb3V0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAga3JiNV9m cmVlX2F1dGhlbnRpY2F0b3IoazVfY29udGV4dCwgYXV0aGVudGljYXRvcik7Ci0jZW5kaWYgLyog SEVJTURBTCAqLwotCi0jaWZkZWYgVExTX1ZFUklGWQotICAgICAgICBpZiAoKGhvdyAmIEFVVEhf RU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSB7Ci0gICAgICAgICAgICBr cmI1X2RhdGEgaW4sIG1zZzsKLSAgICAgICAgICAgIGNoYXIgdGxzX3ZlcmlmeVsyNF07Ci0gICAg ICAgICAgICBrcmI1X3JlcGxheV9kYXRhIHJlcGRhdGE7Ci0KLSAgICAgICAgICAgIHNzbF9nZXRf c2VydmVyX2ZpbmlzaGVkKCZ0bHNfdmVyaWZ5WzBdLDEyKTsKLSAgICAgICAgICAgIHNzbF9nZXRf Y2xpZW50X2ZpbmlzaGVkKCZ0bHNfdmVyaWZ5WzEyXSwxMik7Ci0KLSAgICAgICAgICAgIGluLmRh dGEgPSB0bHNfdmVyaWZ5OwotICAgICAgICAgICAgaW4ubGVuZ3RoID0gMjQ7Ci0KLSAgICAgICAg ICAgIGtyYjVfYXV0aF9jb25fZ2VuYWRkcnMoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LCB0dHlm ZCwKLQkJCQkJCQkJICAgS1JCNV9BVVRIX0NPTlRFWFRfR0VORVJBVEVfTE9DQUxfRlVMTF9BRERS KTsKLSAgICAgICAgICAgIGlmIChyID0ga3JiNV9ta19zYWZlKGs1X2NvbnRleHQsYXV0aF9jb250 ZXh0LCZpbiwmbXNnLCZyZXBkYXRhKSkgewotICAgICAgICAgICAgICAgIGNvbV9lcnIoIiIsIHIs ICJlbmNvZGluZyB0bHMgdmVyaWZpZXIiKTsKLSAgICAgICAgICAgICAgICAodm9pZCkgY2tzdHJu Y2F0KGVycmJ1ZiwgZXJyb3JfbWVzc2FnZShyKSxzaXplb2YoZXJyYnVmKSk7Ci0gICAgICAgICAg ICAgICAgZ290byBlcnJvdXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTZW5kSzVBdXRo U0IoS1JCNV9UTFNfVkVSSUZZLCBtc2cuZGF0YSwgbXNnLmxlbmd0aCk7Ci0gICAgICAgICAgICBr cmI1X2ZyZWVfZGF0YV9jb250ZW50cyhrNV9jb250ZXh0LCZtc2cpOwotICAgICAgICB9Ci0jZW5k aWYgLyogQ0tfU1NMICovCi0gICAgICAgIGlmICgoaG93ICYgQVVUSF9IT1dfTUFTSykgPT0gQVVU SF9IT1dfTVVUVUFMKSB7Ci0gICAgICAgICAgICAvKiBkbyBhcF9yZXAgc3R1ZmYgaGVyZSAqLwot ICAgICAgICAgICAgaWYgKChyID0ga3JiNV9ta19yZXAoazVfY29udGV4dCwKLSNpZmRlZiBIRUlN REFMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF1dGhfY29udGV4dCwKLSNl bHNlIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRo X2NvbnRleHQsCi0jZW5kaWYgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZvdXRidWYpKSkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1X2F1 dGhfaXMiLCJrcmI1X21rX3JlcCIscik7Ci0gICAgICAgICAgICAgICAgKHZvaWQpIGNrc3RybmNw eShlcnJidWYsICJNYWtlIHJlcGx5IGZhaWxlZDogIixzaXplb2YoZXJyYnVmKSk7Ci0gICAgICAg ICAgICAgICAgKHZvaWQpIGNrc3RybmNhdChlcnJidWYsIGVycm9yX21lc3NhZ2Uociksc2l6ZW9m KGVycmJ1ZikpOwotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3V0OwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgZGVidWcoRjExMSwiazVfYXV0aF9pcyIsImtyYjVfbWtfcmVwIixyKTsKLQot ICAgICAgICAgICAgU2VuZEs1QXV0aFNCKEtSQjVfUkVTUE9OU0UsIG91dGJ1Zi5kYXRhLCBvdXRi dWYubGVuZ3RoKTsKLSAgICAgICAgICAgIG11dHVhbF9jb21wbGV0ZSA9IDE7Ci0gICAgICAgIH0K LQotI2lmZGVmIEhFSU1EQUwKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciAqIG5hbWUgPSBO VUxMOwotICAgICAgICAgICAgaWYgKGtyYjVfdW5wYXJzZV9uYW1lKGs1X2NvbnRleHQsIGs1X3Rp Y2tldC0+Y2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSkp Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRb MF0gPSAnXDAnOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBja3N0cm5j cHkoc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQsVUlEQlVGTEVOLG5hbWUpOwotICAgICAgICAgICAg ICAgIGZyZWUobmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbHNlIC8qIEhFSU1E QUwgKi8KLSAgICAgICAgaWYgKCBrcmI1X2FuYW1lX3RvX2xvY2FsbmFtZShrNV9jb250ZXh0LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrNV90aWNrZXQtPmVuY19wYXJ0 Mi0+Y2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSURCVUZM RU4sc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQpICkKLSAgICAgICAgICAgIHN6VXNlck5hbWVBdXRo ZW50aWNhdGVkWzBdID0gJ1wwJzsKLSNlbmRpZiAvKiBIRUlNREFMICovCi0KLSAgICAgICAgU2Vu ZEs1QXV0aFNCKEtSQl9BQ0NFUFQsIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkLAotICAgICAgICAg ICAgICAgICAgICAgIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkWzBdID8gLTEgOiAwKTsKLSAgICAg ICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKLSAgICAgICAgY2ttYWttc2coc3RyVG1wLHNpemVvZihz dHJUbXApLAotICAgICAgICAgICAgICAgICAiS2VyYmVyb3M1IGlkZW50aWZpZXMgaGltIGFzIGBg IiwKLSAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQsIicnIixOVUxMKTsK LSAgICAgICAgcHJpbnRmKCIlc1xyXG4iLHN0clRtcCk7Ci0KLSAgICAgICAgaWYgKHN6VXNlck5h bWVSZXF1ZXN0ZWRbMF0gJiYKLSAgICAgICAgICAgIGtyYjVfa3VzZXJvayhrNV9jb250ZXh0LAot I2lmZGVmIEhFSU1EQUwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgazVfdGlja2V0LT5jbGll bnQsCi0jZWxzZSAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGs1X3Rp Y2tldC0+ZW5jX3BhcnQyLT5jbGllbnQsCi0jZW5kaWYgLyogSEVJTURBTCAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgICBzelVzZXJOYW1lUmVxdWVzdGVkKSkKLSAgICAgICAgICAgIGF1dGhf ZmluaXNoZWQoQVVUSF9WQUxJRCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGF1dGhfZmlu aXNoZWQoQVVUSF9VU0VSKTsKLQotICAgICAgICBrcmI1X2F1dGhfY29uX2dldHJlbW90ZXN1Ymtl eShrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmbmV3a2V5KTsKLSAgICAgICAgaWYgKGs1X3Nlc3Npb25fa2V5KSB7Ci0gICAg ICAgICAgICBrcmI1X2ZyZWVfa2V5YmxvY2soazVfY29udGV4dCwgazVfc2Vzc2lvbl9rZXkpOwot ICAgICAgICAgICAgazVfc2Vzc2lvbl9rZXkgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGlmIChu ZXdrZXkpIHsKLSAgICAgICAgICAgIGtyYjVfY29weV9rZXlibG9jayhrNV9jb250ZXh0LCBuZXdr ZXksICZrNV9zZXNzaW9uX2tleSk7Ci0gICAgICAgICAgICBrcmI1X2ZyZWVfa2V5YmxvY2soazVf Y29udGV4dCwgbmV3a2V5KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGtyYjVfY29w eV9rZXlibG9jayhrNV9jb250ZXh0LAotI2lmZGVmIEhFSU1EQUwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJms1X3RpY2tldC0+dGlja2V0LmtleSwKLSNlbHNlIC8qIEhFSU1EQUwg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazVfdGlja2V0LT5lbmNfcGFydDIt PnNlc3Npb24sCi0jZW5kaWYgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmazVfc2Vzc2lvbl9rZXkpOwotICAgICAgICB9Ci0KLSNpZmRlZiBDS19FTkNSWVBU SU9OCi0jaWZkZWYgSEVJTURBTAotICAgICAgICBza2V5LnR5cGUgPSBrNV9zZXNzaW9uX2tleS0+ a2V5dmFsdWUubGVuZ3RoID09IDggPyBTS19ERVMgOiBTS19HRU5FUklDOwotICAgICAgICBza2V5 Lmxlbmd0aCA9IGs1X3Nlc3Npb25fa2V5LT5rZXl2YWx1ZS5sZW5ndGg7Ci0gICAgICAgIHNrZXku ZGF0YSA9IGs1X3Nlc3Npb25fa2V5LT5rZXl2YWx1ZS5kYXRhOwotI2Vsc2UgLyogSEVJTURBTCAq LwotICAgICAgICBza2V5LnR5cGUgPSBrNV9zZXNzaW9uX2tleS0+bGVuZ3RoID09IDggPyBTS19E RVMgOiBTS19HRU5FUklDOwotICAgICAgICBza2V5Lmxlbmd0aCA9IGs1X3Nlc3Npb25fa2V5LT5s ZW5ndGg7Ci0gICAgICAgIHNrZXkuZGF0YSA9IGs1X3Nlc3Npb25fa2V5LT5jb250ZW50czsKLSNl bmRpZiAvKiBIRUlNREFMICovCi0gICAgICAgIGVuY3J5cHRfc2Vzc2lvbl9rZXkoJnNrZXksIEFV VEhfU0VSVkVSX1RPX0NMSUVOVCk7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAg ICBkZWJ1ZyhGMTAwLCJrNV9hdXRoX2lzIEFVVEhfU1VDQ0VTUyIsIiIsMCk7Ci0gICAgICAgIGty YjVfZXJybm8gPSByOwotICAgICAgICBpZiAoIGtyYjVfZXJybm8gKQotICAgICAgICAgICAgbWFr ZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Ci0gICAgICAgIGVs c2UKLSAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLHN0clRtcCk7Ci0gICAgICAgIHJl dHVybiBBVVRIX1NVQ0NFU1M7Ci0KLSNpZmRlZiBGT1JXQVJECi0gICAgY2FzZSBLUkI1X0ZPUldB UkQ6Ci0gICAgICAgIGlmICggIWZvcndhcmRfZmxhZyApIHsKLSAgICAgICAgICAgIFNlbmRLNUF1 dGhTQihLUkI1X0ZPUldBUkRfUkVKRUNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9y d2FyZGVkIGNyZWRlbnRpYWxzIGFyZSBiZWluZyByZWZ1c2VkLiIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIC0xKTsKLSAgICAgICAgICAgIHJldHVybihBVVRIX1NVQ0NFU1MpOwotICAgICAg ICB9Ci0KLSAgICAgICAgaW5idWYubGVuZ3RoID0gY250OwotICAgICAgICBpbmJ1Zi5kYXRhID0g KGNoYXIgKilkYXRhOwotICAgICAgICBpZiAoCi0jaWZuZGVmIEhFSU1EQUwKLSAgICAgICAgICAg ICgha3JiNV9kX25vX2FkZHJlc3NlcyAmJgotICAgICAgICAgICAgKHIgPSBrcmI1X2F1dGhfY29u X2dlbmFkZHJzKGs1X2NvbnRleHQsYXV0aF9jb250ZXh0LGdfa3N0cmVhbS0+ZmQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBLUkI1X0FVVEhfQ09OVEVYVF9HRU5FUkFURV9SRU1PVEVf RlVMTF9BRERSKSkpIHx8Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgKHIgPSBy ZF9hbmRfc3RvcmVfZm9yX2NyZWRzKGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCwmaW5idWYsCi0j aWZkZWYgSEVJTURBTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr NV90aWNrZXQtPmNsaWVudAotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBrNV90aWNrZXQtPmVuY19wYXJ0Mi0+Y2xpZW50Ci0jZW5k aWYgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApKSkgewotICAgICAgICAgICAgKHZvaWQpIGNrc3RybmNweShlcnJidWYsICJSZWFkIGZvcndh cmRlZCBjcmVkcyBmYWlsZWQ6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2YoZXJyYnVmKSk7Ci0gICAgICAgICAgICAodm9pZCkgY2tzdHJuY2F0KGVycmJ1ZiwgZXJyb3Jf bWVzc2FnZShyKSxzaXplb2YoZXJyYnVmKSk7Ci0gICAgICAgICAgICBTZW5kSzVBdXRoU0IoS1JC NV9GT1JXQVJEX1JFSkVDVCwgZXJyYnVmLCAtMSk7Ci0gICAgICAgICAgICBwcmludGYoIkNvdWxk IG5vdCByZWFkIGZvcndhcmRlZCBjcmVkZW50aWFsc1xyXG4iKTsKLSAgICAgICAgICAgIGtyYjVf ZXJybm8gPSByOwotICAgICAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2Fn ZShrcmI1X2Vycm5vKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBT ZW5kSzVBdXRoU0IoS1JCNV9GT1JXQVJEX0FDQ0VQVCwgMCwgMCk7Ci0gICAgICAgICAgICBja3N0 cm5jcHkoc3RyVG1wLCJGb3J3YXJkZWQgY3JlZGVudGlhbHMgb2J0YWluZWQiLHNpemVvZihzdHJU bXApKTsKLSAgICAgICAgICAgIHByaW50ZigiJXNcclxuIixzdHJUbXApOwotICAgICAgICAgICAg a3JiNV9lcnJubyA9IDA7Ci0gICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxzdHJUbXAp OwotICAgICAgICB9Ci0gICAgICAgIC8qIEEgZmFpbHVyZSB0byBhY2NlcHQgZm9yd2FyZGVkIGNy ZWRlbnRpYWxzIGlzIG5vdCBhbiAqLwotICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiBmYWlsdXJl LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgcmV0dXJuIEFVVEhfU1VD Q0VTUzsKLSNlbmRpZiAgLyogRk9SV0FSRCAqLwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByaW50 ZigiVW5rbm93biBLZXJiZXJvcyBvcHRpb24gJWRcclxuIiwgZGF0YVstMV0pOwotICAgICAgICBT ZW5kSzVBdXRoU0IoS1JCX1JFSkVDVCwgMCwgMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg ICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwot Ci0gIGVycm91dDoKLSAgICBTZW5kSzVBdXRoU0IoS1JCX1JFSkVDVCwgZXJyYnVmLCAtMSk7Ci0g ICAga3JiNV9lcnJubyA9IHI7Ci0gICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyYnVmKTsKLSAg ICBwcmludGYoIiVzXHJcbiIsIGVycmJ1Zik7Ci0gICAgaWYgKGF1dGhfY29udGV4dCkgewotICAg ICAgICBrcmI1X2F1dGhfY29uX2ZyZWUoazVfY29udGV4dCwgYXV0aF9jb250ZXh0KTsKLSAgICAg ICAgYXV0aF9jb250ZXh0ID0gMDsKLSAgICB9Ci0gICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7Ci0gICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLX0KLQotI2lmZGVmIEZPUldBUkQKLWludAot I2lmZGVmIENLX0FOU0lDCi1rZXJiZXJvczVfZm9yd2FyZCh2b2lkKQotI2Vsc2UKLWtlcmJlcm9z NV9mb3J3YXJkKCkKLSNlbmRpZgotewotICAgIGtyYjVfZXJyb3JfY29kZSByOwotICAgIGtyYjVf Y2NhY2hlIGNjYWNoZT1OVUxMOwotICAgIGtyYjVfcHJpbmNpcGFsIGNsaWVudCA9IDA7Ci0gICAg a3JiNV9wcmluY2lwYWwgc2VydmVyID0gMDsKLSAgICBrcmI1X2RhdGEgZm9yd19jcmVkczsKLSNp ZmRlZiBIRUlNREFMCi0gICAga3JiNV9jcmVkcyAgICAgIGNyZWRzOwotI2VuZGlmIC8qIEhFSU1E QUwgKi8KLQotICAgIGZvcndfY3JlZHMuZGF0YSA9IDA7Ci0KLSAgICByID0gazVfZ2V0X2NjYWNo ZShrNV9jb250ZXh0LCZjY2FjaGUsTlVMTCk7Ci0gICAgaWYgKCByICkgewotICAgICAgICBjb21f ZXJyKE5VTEwsIHIsICJLZXJiZXJvcyBWNTogY291bGQgbm90IGdldCBkZWZhdWx0IGNjYWNoZSIp OwotICAgICAgICBrcmI1X2Vycm5vID0gcjsKLSAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2cs ZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Ci0gICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUp OwotICAgIH0KLQotICAgIGlmICgociA9IGtyYjVfY2NfZ2V0X3ByaW5jaXBhbChrNV9jb250ZXh0 LCBjY2FjaGUsICZjbGllbnQpKSkgewotICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJLZXJiZXJv cyBWNTogY291bGQgbm90IGdldCBkZWZhdWx0IHByaW5jaXBhbCIpOwotICAgICAgICBnb3RvIGNs ZWFudXA7Ci0gICAgfQotCi0jaWZkZWYgSEVJTURBTAotICAgIG1lbXNldCgmY3JlZHMsIDAsIHNp emVvZihjcmVkcykpOwotICAgIGNyZWRzLmNsaWVudCA9IGNsaWVudDsKLQotICAgIGlmIChyID0g a3JiNV9idWlsZF9wcmluY2lwYWwoazVfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmNyZWRzLnNlcnZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVu KGNsaWVudC0+cmVhbG0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LT5y ZWFsbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrcmJ0Z3QiLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2xpZW50LT5yZWFsbSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMKSkgewotICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJLZXJiZXJv cyBWNTogY291bGQgbm90IGdldCBwcmluY2lwYWwiKTsKLSAgICAgICAgZ290byBjbGVhbnVwOwot ICAgIH0KLQotICAgIGNyZWRzLnRpbWVzLmVuZHRpbWUgPSAwOwotCi0gICAgaWYgKHIgPSBrcmI1 X2dldF9mb3J3YXJkZWRfY3JlZHMoazVfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXV0aF9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6SG9zdE5hbWUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcmVkcywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcndfY3JlZHMpKSB7Ci0gICAgICAgIGNvbV9l cnIoTlVMTCwgciwgIktlcmJlcm9zIFY1OiBlcnJvciBnZXR0aW5nIGZvcndhcmRlZCBjcmVkcyIp OwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotI2Vsc2UgLyogSEVJTURBTCAqLwotICAg IC8qIHdlIHNob3VsZCBub3QgbmVlZCB0byBtYWtlIHRoaXMgY2FsbCBzaW5jZSB3ZSBhcmUgc3Rv cmluZyB0aGUgKi8KLSAgICAvKiBzZXJ2ZXIncyBwcmluY2lwYWwgaW4gZndkX3NlcnZlciBmcm9t IG91ciBjYWxsIHRvICAgICAgICAgICAgICovCi0gICAgLyoga3JiNV9zbmFtZV90b19wcmluY2lw YWwoKSBpbiBrNV9hdXRoX3NlbmQoKSAgICAgICAgICAgICAgICAgICAqLwotICAgIGlmIChmd2Rf c2VydmVyID09IE5VTEwpIHsKLSAgICAgICAgaWYgKChyID0ga3JiNV9zbmFtZV90b19wcmluY2lw YWwoazVfY29udGV4dCwgc3pIb3N0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGtyYjVfZF9zcnYgPyBrcmI1X2Rfc3J2IDogS1JCNV9TRVJWSUNFX05BTUUsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLUkI1X05UX1NSVl9IU1QsICZzZXJ2 ZXIpKSkgewotICAgICAgICAgICAgY29tX2VycihOVUxMLCByLCAiS2VyYmVyb3MgVjU6IGNvdWxk IG5vdCBtYWtlIHNlcnZlciBwcmluY2lwYWwiKTsKLSAgICAgICAgICAgIGdvdG8gY2xlYW51cDsK LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgha3JiNV9kX25vX2FkZHJlc3NlcyAmJgotICAg ICAgICAociA9IGtyYjVfYXV0aF9jb25fZ2VuYWRkcnMoazVfY29udGV4dCwgYXV0aF9jb250ZXh0 LCBnX2tzdHJlYW0tPmZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLUkI1X0FVVEhf Q09OVEVYVF9HRU5FUkFURV9MT0NBTF9GVUxMX0FERFIpKSkKLSAgICB7Ci0gICAgICAgIGNvbV9l cnIoTlVMTCwgciwgIktlcmJlcm9zIFY1OiBjb3VsZCBub3QgZ2VuIGxvY2FsIGZ1bGwgYWRkcmVz cyIpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotCi0gICAgaWYgKHIgPSBrcmI1X2Z3 ZF90Z3RfY3JlZHMoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LCAwLCBjbGllbnQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZ3ZF9zZXJ2ZXIgPyBmd2Rfc2VydmVyIDogc2VydmVy LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY2FjaGUsIGZvcndhcmRhYmxlX2Zs YWcsICZmb3J3X2NyZWRzKSkgewotICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJLZXJiZXJvcyBW NTogZXJyb3IgZ2V0dGluZyBmb3J3YXJkYWJsZSBjcmVkZW50aWFscyIpOwotICAgICAgICBnb3Rv IGNsZWFudXA7Ci0gICAgfQotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLQotICAgIC8qIFNlbmQgZm9y d2FyZGVkIGNyZWRlbnRpYWxzICovCi0gICAgaWYgKCFTZW5kSzVBdXRoU0IoS1JCNV9GT1JXQVJE LCBmb3J3X2NyZWRzLmRhdGEsIGZvcndfY3JlZHMubGVuZ3RoKSkgewotICAgICAgICBwcmludGYo IktlcmJlcm9zIFY1IGZvcndhcmRpbmcgZXJyb3IhXHJcbiVzXHJcbiIsCi0gICAgICAgICAgICAg ICAgICAgICJOb3QgZW5vdWdoIHJvb20gZm9yIGF1dGhlbnRpY2F0aW9uIGRhdGEiKTsKLSAgICB9 Ci0KLWNsZWFudXA6Ci0gICAgaWYgKGNsaWVudCkKLSAgICAgICAga3JiNV9mcmVlX3ByaW5jaXBh bChrNV9jb250ZXh0LCBjbGllbnQpOwotICAgIGlmIChzZXJ2ZXIpCi0gICAgICAgIGtyYjVfZnJl ZV9wcmluY2lwYWwoazVfY29udGV4dCwgc2VydmVyKTsKLSNpZmRlZiBIRUlNREFMCi0gICAga3Ji NV9kYXRhX2ZyZWUoJmZvcndfY3JlZHMpOwotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgIGtyYjVf ZnJlZV9kYXRhX2NvbnRlbnRzKGs1X2NvbnRleHQsJmZvcndfY3JlZHMpOwotI2VuZGlmIC8qIEhF SU1EQUwgKi8KLSAgICBrcmI1X2NjX2Nsb3NlKGs1X2NvbnRleHQsIGNjYWNoZSk7Ci0KLSAgICBr cmI1X2Vycm5vID0gcjsKLSAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxrcmI1X2Vycm5vP2Vycm9y X21lc3NhZ2Uoa3JiNV9lcnJubyk6Ik9LIik7Ci0gICAgcmV0dXJuKHI/QVVUSF9GQUlMVVJFOkFV VEhfU1VDQ0VTUyk7Ci19Ci0jZW5kaWYgLyogRk9SV0FSRCAqLwotI2Vsc2UgLyogS1JCNSAqLwot aW50Ci1ja19rcmI1X2F1dG9nZXRfVEdUKGNoYXIgKiBkdW1teSkKLXsKLSAgICByZXR1cm4oMCk7 Ci19Ci0jaWZkZWYgQ0tfS0VSQkVST1MKLWludAotI2lmZGVmIENLX0FOU0lDCi1ja19rcmI1X2lu aXRUR1QoIHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wLCBzdHJ1Y3Qga3JiNV9pbml0X2RhdGEgKiBp bml0LAotICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3JiNF9pbml0X2RhdGEgKiBrNF9pbml0KQot I2Vsc2UKLWNrX2tyYjVfaW5pdFRHVChvcCxpbml0LGs0X2luaXQpCi0gICAga3JiX29wX2RhdGEg KiBvcDsgc3RydWN0IGtyYjVfaW5pdF9kYXRhICogaW5pdDsKLSAgICBzdHJ1Y3Qga3JiNF9pbml0 X2RhdGEgKiBrNF9pbml0OwotI2VuZGlmIC8qIENLX0FOU0lDKi8KLXsKLSAgICByZXR1cm4oLTEp OwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tfa3JiNV9kZXN0cm95KHN0cnVjdCBrcmJf b3BfZGF0YSAqIG9wKQotI2Vsc2UKLWNrX2tyYjVfZGVzdHJveShvcCkgc3RydWN0IGtyYl9vcF9k YXRhICogb3A7Ci0jZW5kaWYKLXsKLSAgICByZXR1cm4oLTEpOwotfQotCi1pbnQKLSNpZmRlZiBD S19BTlNJQwotY2tfa3JiNV9saXN0X2NyZWRzKHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wLCBzdHJ1 Y3Qga3JiNV9saXN0X2NyZWRfZGF0YSAqIGxjKQotI2Vsc2UKLWNrX2tyYjVfbGlzdF9jcmVkcyhv cCxsYykKLSAgICBzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcDsgc3RydWN0IGtyYjVfbGlzdF9jcmVk X2RhdGEgKiBsYzsKLSNlbmRpZgotewotICAgIHJldHVybigtMSk7Ci19Ci0jZWxzZSAvKiBDS19L RVJCRVJPUyAqLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrX2tyYjVfaW5pdFRHVCh2b2lkICog b3AsIHZvaWQgKiBpbml0LCB2b2lkICogazRfaW5pdCApCi0jZWxzZQotY2tfa3JiNV9pbml0VEdU KG9wLGluaXQsazRfaW5pdCkKLSAgICB2b2lkICogb3A7IHZvaWQgKiBpbml0OyB2b2lkICogazRf aW5pdDsKLSNlbmRpZiAvKiBDS19BTlNJQyovCi17Ci0gICAgcmV0dXJuKC0xKTsKLX0KLQotaW50 Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrX2tyYjVfZGVzdHJveSh2b2lkICogb3ApCi0jZWxzZQotY2tf a3JiNV9kZXN0cm95KG9wKSB2b2lkICogb3A7Ci0jZW5kaWYKLXsKLSAgICByZXR1cm4oLTEpOwot fQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tfa3JiNV9saXN0X2NyZWRzKHZvaWQgKiBvcCwg dm9pZCAqIGxjKQotI2Vsc2UKLWNrX2tyYjVfbGlzdF9jcmVkcyhvcCxsYykKLSAgICB2b2lkICog b3A7IHZvaWQgKiBsYzsKLSNlbmRpZgotewotICAgIHJldHVybigtMSk7Ci19Ci0jZW5kaWYgLyog Q0tfS0VSQkVST1MgKi8KLSNlbmRpZiAvKiBLUkI1ICovCi0KLSNpZmRlZiBHU1NBUElfS1JCNQot LyoKLSAqCi0gKiBnc3NrNV9hdXRoX3NlbmQgLSBnZXRzIGF1dGhlbnRpY2F0aW9uIGJpdHMgd2Ug bmVlZCB0byBzZW5kIHRvIEtEQy4KLSAqCi0gKiBSZXN1bHQgaXMgbGVmdCBpbiBrNV9hdXRoCi0g KgotICogUmV0dXJuczogMCBvbiBmYWlsdXJlLCAxIG9uIHN1Y2Nlc3MKLSAqCi0gKi8KLQotc3Rh dGljIGludAotI2lmZGVmIENLX0FOU0lDCi1nc3NrNV9hdXRoX3NlbmQoaW50IGhvdywgaW50IGVu Y3J5cHQsIGludCBmb3J3YXJkKQotI2Vsc2UKLWdzc2s1X2F1dGhfc2VuZChob3csZW5jcnlwdCxm b3J3YXJkKSBpbnQgaG93OyBpbnQgZW5jcnlwdDsgaW50IGZvcndhcmQ7Ci0jZW5kaWYKLXsKLSAg ICBPTV91aW50MzIgbWFqX3N0YXQsIG1pbl9zdGF0OwotI2lmZGVmIEtSQjUKLSAgICBjaGFyICog cmVhbG0gPSBOVUxMOwotICAgIGNoYXIgdGd0WzI1Nl07Ci0jZW5kaWYgLyogS1JCNSAqLwotCi0g ICAgZ3NzX2NoYW4uaW5pdGlhdG9yX2FkZHJ0eXBlID0gR1NTX0NfQUZfSU5FVDsgLyogT01fdWlu dDMyICAqLwotICAgIGdzc19jaGFuLmluaXRpYXRvcl9hZGRyZXNzLmxlbmd0aCA9IDQ7Ci0gICAg Z3NzX2NoYW4uaW5pdGlhdG9yX2FkZHJlc3MudmFsdWUgPSAmbXljdGxhZGRyLnNpbl9hZGRyLnNf YWRkcjsKLSAgICBnc3NfY2hhbi5hY2NlcHRvcl9hZGRydHlwZSA9IEdTU19DX0FGX0lORVQ7IC8q IE9NX3VpbnQzMiAqLwotICAgIGdzc19jaGFuLmFjY2VwdG9yX2FkZHJlc3MubGVuZ3RoID0gNDsK LSAgICBnc3NfY2hhbi5hY2NlcHRvcl9hZGRyZXNzLnZhbHVlID0gJmhpc2N0bGFkZHIuc2luX2Fk ZHIuc19hZGRyOwotICAgIGdzc19jaGFuLmFwcGxpY2F0aW9uX2RhdGEubGVuZ3RoID0gMDsKLSAg ICBnc3NfY2hhbi5hcHBsaWNhdGlvbl9kYXRhLnZhbHVlID0gMDsKLQotI2lmZGVmIEtSQjUKLSAg ICByZWFsbSA9IGNrX2tyYjVfcmVhbG1vZmhvc3QoZnRwX2hvc3QpOwotICAgIGlmIChyZWFsbSkg ewotICAgICAgICBja21ha21zZyh0Z3Qsc2l6ZW9mKHRndCksImtyYnRndC8iLHJlYWxtLCJAIixy ZWFsbSk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImZ0cF9hdXRoKEdTU0FQSSkgVEdUIix0Z3QsMCk7 Ci0gICAgICAgIGlmICgga3JiNV9hdXRvZ2V0ICYmCi0gICAgICAgICAgICAgISgoY2tfa3JiNV90 a3RfaXN2YWxpZChOVUxMLHRndCkgPiAwKSB8fAotICAgICAgICAgICAgICAgIChja19rcmI1X2lz X3RndF92YWxpZCgpID4gMCkpICkKLSAgICAgICAgICAgIGNrX2tyYjVfYXV0b2dldF9UR1QocmVh bG0pOwotICAgIH0KLSNlbmRpZiAvKiBLUkI1ICovCi0KLSAgICAvKiBCbG9iIGZyb20gZ3NzLWNs aWVudCAqLwotICAgIC8qIGhvc3RAaG9zdG5hbWUgKi8KLSAgICAvKiB0aGUgVjUgR1NTQVBJIGJp bmRpbmcgY2Fub25pY2FsaXplcyB0aGlzIGZvciB1cy4uLiAqLwotICAgIGNrbWFrbXNnKGdzc19z dGJ1ZixHU1NfQlVGU0laLAotICAgICAgICAgICAgIGtyYjVfZF9zcnYgPyBrcmI1X2Rfc3J2IDog S1JCNV9TRVJWSUNFX05BTUUsCi0gICAgICAgICAgICAgIkAiLAotICAgICAgICAgICAgIHN6SG9z dE5hbWUsCi0gICAgICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgICAgKTsKLSAgICBmcHJpbnRm KHN0ZGVyciwgIkF1dGhlbnRpY2F0aW5nIHRvIDwlcz4uLi5cbiIsIGdzc19zdGJ1Zik7Ci0gICAg Z3NzX3NlbmRfdG9rLnZhbHVlID0gZ3NzX3N0YnVmOwotICAgIGdzc19zZW5kX3Rvay5sZW5ndGgg PSBzdHJsZW4oZ3NzX3N0YnVmKTsKLSAgICBtYWpfc3RhdCA9IGdzc19pbXBvcnRfbmFtZSgmbWlu X3N0YXQsICZnc3Nfc2VuZF90b2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdz c19udF9zZXJ2aWNlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnc3Nf dGFyZ2V0X25hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBpZiAo bWFqX3N0YXQgIT0gR1NTX1NfQ09NUExFVEUpIHsKLSAgICAgICAgdXNlcl9nc3NfZXJyb3IobWFq X3N0YXQsIG1pbl9zdGF0LCAicGFyc2luZyBuYW1lIik7Ci0gICAgICAgIHNlY3VyZV9lcnJvcigi bmFtZSBwYXJzZWQgPCVzPlxuIiwgZ3NzX3N0YnVmKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAg IH0KLSAgICB0b2tlbl9wdHIgPSBHU1NfQ19OT19CVUZGRVI7Ci0gICAgZ2NvbnRleHQgPSBHU1Nf Q19OT19DT05URVhUOyAvKiBzdHJ1Y3R1cmUgY29weSAqLwotCi0gICAgZnByaW50ZihzdGRlcnIs ICJjYWxsaW5nIGdzc19pbml0X3NlY19jb250ZXh0XG4iKTsKLSAgICBtYWpfc3RhdCA9Ci0gICAg ICAgIGdzc19pbml0X3NlY19jb250ZXh0KCZtaW5fc3RhdCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdTU19DX05PX0NSRURFTlRJQUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZ2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfdGFyZ2V0 X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfbWVjaF9rcmI1LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfTVVUVUFMX0ZMQUcgfAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR1NTX0NfUkVQTEFZX0ZMQUcgfAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKChmb3J3YXJkICYmIGZvcndhcmRfZmxhZykgPwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHU1NfQ19ERUxFR19GTEFHIDogMCksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtyYjVf ZF9ub19hZGRyZXNzZXMgPyAvKiBjaGFubmVsIGJpbmRpbmdzICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdTU19DX05PX0NIQU5ORUxfQklORElOR1MgOgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmZ3NzX2NoYW4pLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3NzX3Rva2VuX3B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEws ICAgICAvKiBpZ25vcmUgbWVjaCB0eXBlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmZ3NzX3NlbmRfdG9rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAg IC8qIGlnbm9yZSByZXRfZmxhZ3MgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7ICAgICAgICAvKiBpZ25vcmUgdGlt ZV9yZWMgKi8KLQotCi0gICAgICAgIGlmIChtYWpfc3RhdCAhPSBHU1NfU19DT01QTEVURSAmJgot ICAgICAgICAgICAgIG1hal9zdGF0ICE9IEdTU19TX0NPTlRJTlVFX05FRURFRCkgewotICAgICAg ICAgICAgdXNlcl9nc3NfZXJyb3IobWFqX3N0YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWluX3N0YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWxpemluZyBj b250ZXh0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBnc3Nf cmVsZWFzZV9uYW1lKCZtaW5fc3RhdCwgJmdzc190YXJnZXRfbmFtZSk7Ci0gICAgICAgICAgICBy ZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKDEpOwotfQotCi0vKgotICogZ3Nz azVfYXV0aF9yZXBseSAtLSBjaGVja3MgdGhlIHJlcGx5IGZvciBtdXR1YWwgYXV0aGVudGljYXRp b24uCi0gKi8KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotZ3NzazVfYXV0aF9yZXBseShp bnQgaG93LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY250KQotI2Vsc2UKLWdzc2s1X2F1dGhf cmVwbHkoaG93LGRhdGEsY250KSBpbnQgaG93OyB1bnNpZ25lZCBjaGFyICpkYXRhOyBpbnQgY250 OwotI2VuZGlmCi17Ci0gICAgZGF0YSArPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQb2ludCB0byBzdGF0dXMgYnl0ZSAqLwotICAgIGNudCAtPTU7Ci0KLSAgICBzd2l0 Y2ggKCpkYXRhKyspIHsKLSAgICBjYXNlIEdTU19SRUpFQ1Q6Ci0gICAgICAgIGlmIChjbnQgPiAw KSB7Ci0gICAgICAgICAgICBjaGFyICpzOwotICAgICAgICAgICAgaW50IGxlbjsKLSAgICAgICAg ICAgIGNrc3RybmNweShzdHJUbXAsIkdTU0FQSSByZWZ1c2VzIGF1dGhlbnRpY2F0aW9uIGJlY2F1 c2VcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RyVG1wKSk7Ci0gICAgICAg ICAgICBsZW4gPSBzdHJsZW4oc3RyVG1wKTsKLSAgICAgICAgICAgIGlmICggbGVuICsgY250IDwg c2l6ZW9mKHN0clRtcCkgKSB7Ci0gICAgICAgICAgICAgICAgcyA9IHN0clRtcCArIHN0cmxlbihz dHJUbXApOwotICAgICAgICAgICAgICAgIG1lbWNweShzLCBkYXRhLCBjbnQpOyAgICAgICAgICAg Lyogc2FmZSAqLwotICAgICAgICAgICAgICAgIHNbY250XSA9IDA7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2tzdHJuY3B5KHN0clRtcCwiR1NTQVBJIHJlZnVz ZXMgYXV0aGVudGljYXRpb24iLAotICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJUbXAp KTsKLSAgICAgICAgcHJpbnRmKCJHU1NBUEkgYXV0aGVudGljYXRpb24gZmFpbGVkIVxyXG4lc1xy XG4iLHN0clRtcCk7Ci0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAg ICByZXR1cm4gQVVUSF9GQUlMVVJFOwotCi0gICAgY2FzZSBHU1NfQUNDRVBUOgotICAgICAgICBp ZiAoIGNudCA+IDAgKSB7Ci0gICAgICAgICAgICBjaGFyICpzOwotICAgICAgICAgICAgaW50IGxl bjsKLSAgICAgICAgICAgIGNrc3RybmNweShzdHJUbXAsIkdTU0FQSSBhY2NlcHRzIHlvdSBhcyAi LHNpemVvZihzdHJUbXApKTsKLSAgICAgICAgICAgIGxlbiA9IHN0cmxlbihzdHJUbXApOwotICAg ICAgICAgICAgaWYgKCBsZW4gKyBjbnQgPCBzaXplb2Yoc3RyVG1wKSApIHsKLSAgICAgICAgICAg ICAgICBzID0gc3RyVG1wICsgc3RybGVuKHN0clRtcCk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5 KHMsZGF0YSxjbnQpOwotICAgICAgICAgICAgICAgIHNbY250XSA9IDA7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKLSAgICAgICAgcHJpbnRm KCIlc1xyXG4iLHN0clRtcCk7Ci0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsKLSAg ICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKLQotICAgIGNhc2UgR1NTX1JFU1BPTlNFOgotICAg ICAgICBnc3NfdG9rZW5fcHRyID0gJmdzc19yZWN2X3RvazsKLSAgICAgICAgZ3NzX3JlY3ZfdG9r LnZhbHVlID0gZGF0YTsKLSAgICAgICAgZ3NzX3JlY3ZfdG9rLmxlbmd0aCA9IGNudDsKLQotICAg ICAgICBtYWpfc3RhdCA9Ci0gICAgICAgICAgICBnc3NfaW5pdF9zZWNfY29udGV4dCgmbWluX3N0 YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfTk9fQ1JFREVOVElB TCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2NvbnRleHQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX3RhcmdldF9uYW1lLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdzc19rcmI1X21lY2gsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR1NTX0NfTVVUVUFMX0ZMQUcgfAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdTU19DX1JFUExBWV9GTEFHIHwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoZm9yd2FyZF9mbGFnID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdTU19DX0RFTEVHX0ZMQUcgOiAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrcmI1X2Rfbm9f YWRkcmVzc2VzID8gLyogY2hhbm5lbCBiaW5kaW5ncyAqLwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR1NTX0NfTk9fQ0hBTk5FTF9CSU5ESU5HUyA6Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmZ3NzX2NoYW4pLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdzc190b2tlbl9wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwgLyogaWdub3JlIG1lY2ggdHlwZSAqLwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZnc3Nfc2VuZF90b2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwgLyogaWdub3JlIHJldF9mbGFncyAqLwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOyAg ICAvKiBpZ25vcmUgdGltZV9yZWMgKi8KLQotICAgICAgICBpZiAoIG1hal9zdGF0ID09IEdTU19T X0NPTVBMRVRFICkKLSAgICAgICAgewotCi0gICAgICAgIH0gZWxzZSBpZiAoIG1hal9zdGF0ID09 IENTU19TX0NPTlRJTlVFX05FRURFRCApIHsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgfQot Ci0gICAgICAgIGNrc3RybmNweShzdHJUbXAsIlJlbW90ZSBtYWNoaW5lIGhhcyBiZWVuIG11dHVh bGx5IGF1dGhlbnRpY2F0ZWQiLAotICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0clRtcCkpOwot ICAgICAgICBwcmludGYoIiVzXHJcbiIsc3RyVG1wKTsKLSAgICAgICAgYXV0aF9maW5pc2hlZChB VVRIX1VTRVIpOwotICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOwotCi0gICAgZGVmYXVsdDoK LSAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgIHJldHVybiBBVVRI X0ZBSUxVUkU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93biByZXBseSB0eXBlICov Ci0gICAgfQotfQotCi0vKgotICoKLSAqIGdzc2s1X2F1dGhfaXMuCi0gKgotICovCi0KLXN0YXRp YyBpbnQKLSNpZmRlZiBDS19BTlNJQwotazVfYXV0aF9pcyhpbnQgaG93LCB1bnNpZ25lZCBjaGFy ICpkYXRhLCBpbnQgY250KQotI2Vsc2UKLWs1X2F1dGhfaXMoaG93LGRhdGEsY250KSBpbnQgaG93 OyB1bnNpZ25lZCBjaGFyICpkYXRhOyBpbnQgY250OwotI2VuZGlmCi17Ci0gICAgaW50IHJlcGxp ZWQgPSAwOwotICAgIGdzc19jcmVkX2lkX3Qgc2VydmVyX2NyZWRzLCBkZWxlZ19jcmVkczsKLSAg ICBnc3NfbmFtZV90IGNsaWVudDsKLSAgICBpbnQgcmV0X2ZsYWdzOwotICAgIGdzc19idWZmZXJf ZGVzYyBuYW1lX2J1ZjsKLSAgICBnc3NfbmFtZV90IHNlcnZlcl9uYW1lOwotICAgIE9NX3VpbnQz MiBhY3F1aXJlX21haiwKLSAgICAgIGFjcXVpcmVfbWluLAotICAgICAgYWNjZXB0X21haiwKLSAg ICAgIGFjY2VwdF9taW4sCi0gICAgICBzdGF0X21haiwKLSAgICAgIHN0YXRfbWluOwotICAgIGdz c19PSUQgbWVjaGlkOwotICAgIGdzc19idWZmZXJfZGVzYyB0b2ssIG91dF90b2s7Ci0gICAgY2hh ciBnYnVmW0dTU19CVUZTSVpdOwotICAgIHVfY2hhciBnb3V0X2J1ZltHU1NfQlVGU0laXTsKLSAg ICBjaGFyIGxvY2FsbmFtZVtNQVhIT1NUTkFNRUxFTl07Ci0gICAgY2hhciBzZXJ2aWNlX25hbWVb TUFYSE9TVE5BTUVMRU4rMTBdOwotICAgIGNoYXIgKipzZXJ2aWNlOwotICAgIHN0cnVjdCBob3N0 ZW50ICpocDsKLQotICAgIGRhdGEgKz0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUG9pbnQgdG8gc3RhdHVzIGJ5dGUgKi8KLSAgICBjbnQgLT0gNDsKLQotICAgIGNraGV4 ZHVtcCgiZ3NzazVfYXV0aF9pcyBkYXRhIixkYXRhLGNudCk7Ci0gICAgZGVidWcoRjExMSwiZ3Nz azVfYXV0aF9pcyIsImhvdyIsaG93KTsKLQotICAgIGlmIChjbnQtLSA8IDEpIHsKLSAgICAgICAg YXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7 Ci0gICAgfQotICAgIHN3aXRjaCAoKmRhdGErKykgewotICAgIGNhc2UgR1NTX0FVVEg6Ci0gICAg ICAgIGdzc19jaGFuLmluaXRpYXRvcl9hZGRydHlwZSA9IEdTU19DX0FGX0lORVQ7Ci0gICAgICAg IGdzc19jaGFuLmluaXRpYXRvcl9hZGRyZXNzLmxlbmd0aCA9IDQ7Ci0gICAgICAgIGdzc19jaGFu LmluaXRpYXRvcl9hZGRyZXNzLnZhbHVlID0gJmhpc19hZGRyLnNpbl9hZGRyLnNfYWRkcjsKLSAg ICAgICAgZ3NzX2NoYW4uYWNjZXB0b3JfYWRkcnR5cGUgPSBHU1NfQ19BRl9JTkVUOwotICAgICAg ICBnc3NfY2hhbi5hY2NlcHRvcl9hZGRyZXNzLmxlbmd0aCA9IDQ7Ci0gICAgICAgIGdzc19jaGFu LmFjY2VwdG9yX2FkZHJlc3MudmFsdWUgPSAmY3RybF9hZGRyLnNpbl9hZGRyLnNfYWRkcjsKLSAg ICAgICAgZ3NzX2NoYW4uYXBwbGljYXRpb25fZGF0YS5sZW5ndGggPSAwOwotICAgICAgICBnc3Nf Y2hhbi5hcHBsaWNhdGlvbl9kYXRhLnZhbHVlID0gMDsKLQotICAgICAgICB0b2sudmFsdWUgPSBk YXRhOwotICAgICAgICB0b2subGVuZ3RoID0gY250OwotCi0gICAgICAgIGlmIChnZXRob3N0bmFt ZShsb2NhbG5hbWUsIE1BWEhPU1ROQU1FTEVOKSkgewotICAgICAgICAgICAgYXV0aF9maW5pc2hl ZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwotICAgICAg ICB9Ci0gICAgICAgIGlmICghKGhwID0gZ2V0aG9zdGJ5bmFtZShsb2NhbG5hbWUpKSkgewotICAg ICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICByZXR1cm4g QVVUSF9GQUlMVVJFOwotICAgICAgICB9Ci0jaWZkZWYgSEFERFJMSVNUCi0gICAgICAgIGhwID0g Y2tfY29weWhvc3RlbnQoaHApOwotI2VuZGlmIC8qIEhBRERSTElTVCAqLwotICAgICAgICBzdHJu Y3B5KGxvY2FsbmFtZSwgaHAtPmhfbmFtZSwgc2l6ZW9mKGxvY2FsbmFtZSkgLSAxKTsKLSAgICAg ICAgbG9jYWxuYW1lW3NpemVvZihsb2NhbG5hbWUpIC0gMV0gPSAnXDAnOwotCi0gICAgICAgIHNw cmludGYoc2VydmljZV9uYW1lLCAiJXNAJXMiLCAqc2VydmljZSwgbG9jYWxuYW1lKTsKLSAgICAg ICAgbmFtZV9idWYudmFsdWUgPSBzZXJ2aWNlX25hbWU7Ci0gICAgICAgIG5hbWVfYnVmLmxlbmd0 aCA9IHN0cmxlbihuYW1lX2J1Zi52YWx1ZSkgKyAxOwotICAgICAgICBzdGF0X21haiA9IGdzc19p bXBvcnRfbmFtZSgmc3RhdF9taW4sICZuYW1lX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdzc19udF9zZXJ2aWNlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmc2VydmVyX25hbWUpOwotICAgICAgICBpZiAoc3RhdF9tYWogIT0gR1NT X1NfQ09NUExFVEUpIHsKLSAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwot ICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLSAgICAgICAgfQotCi0gICAgICAgIGFj cXVpcmVfbWFqID0gZ3NzX2FjcXVpcmVfY3JlZCgmYWNxdWlyZV9taW4sIHNlcnZlcl9uYW1lLCAw LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX05VTExfT0lE X1NFVCwgR1NTX0NfQUNDRVBULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZzZXJ2ZXJfY3JlZHMsIE5VTEwsIE5VTEwpOwotICAgICAgICAodm9pZCkgZ3NzX3JlbGVh c2VfbmFtZSgmc3RhdF9taW4sICZzZXJ2ZXJfbmFtZSk7Ci0KLSAgICAgICAgaWYgKGFjcXVpcmVf bWFqICE9IEdTU19TX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICByZXBseV9nc3NfZXJyb3IoNTM1 LCBhY2NlcHRfbWFqLCBhY2NlcHRfbWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImFjY2VwdGluZyBjb250ZXh0Iik7Ci0gICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgImZh aWxlZCBhY2NlcHRpbmcgY29udGV4dCIpOwotICAgICAgICAgICAgKHZvaWQpIGdzc19yZWxlYXNl X2NyZWQoJnN0YXRfbWluLCAmc2VydmVyX2NyZWRzKTsKLSAgICAgICAgICAgIGlmIChyZXRfZmxh Z3MgJiBHU1NfQ19ERUxFR19GTEFHKQotICAgICAgICAgICAgICAgICh2b2lkKSBnc3NfcmVsZWFz ZV9jcmVkKCZzdGF0X21pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmRlbGVnX2NyZWRzKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAg ICAgICAgZ2NvbnRleHQgPSBHU1NfQ19OT19DT05URVhUOwotICAgICAgICBhY2NlcHRfbWFqID0g Z3NzX2FjY2VwdF9zZWNfY29udGV4dCgmYWNjZXB0X21pbiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmdjb250ZXh0LCAvKiBjb250ZXh0X2hhbmRsZSAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2ZXJpZmllcl9j cmVkX2hhbmRsZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzZXJ2ZXJfY3JlZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZ0b2ssIC8qIGlucHV0X3Rva2VuICovCi0JCQkJCSAgICAoa3JiNV9kX25vX2FkZHJlc3Nl cyA/Ci0JCQkJCSAgICAgLyogY2hhbm5lbCBiaW5kaW5ncyAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19OT19DSEFOTkVMX0JJTkRJTkdTIDoK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdzc19jaGFu KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbGllbnQs IC8qIHNyY19uYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZtZWNoaWQsIC8qIG1lY2hfdHlwZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmb3V0X3RvaywgLyogb3V0cHV0X3Rva2VuICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXRfZmxhZ3MsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgIC8qIGlnbm9yZSB0 aW1lX3JlYyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBmb3J3YXJkZWQgY3JlZGVudGlhbHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmRlbGVnX2NyZWRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0KLSAgICAgICAgaWYgKGFjY2VwdF9tYWohPUdTU19TX0NPTVBM RVRFICYmIGFjY2VwdF9tYWohPUdTU19TX0NPTlRJTlVFX05FRURFRCkgewotICAgICAgICAgICAg cmVwbHlfZ3NzX2Vycm9yKDUzNSwgYWNjZXB0X21haiwgYWNjZXB0X21pbiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImFjY2VwdGluZyBjb250ZXh0Iik7Ci0gICAgICAgICAgICBzeXNs b2coTE9HX0VSUiwgImZhaWxlZCBhY2NlcHRpbmcgY29udGV4dCIpOwotICAgICAgICAgICAgKHZv aWQpIGdzc19yZWxlYXNlX2NyZWQoJnN0YXRfbWluLCAmc2VydmVyX2NyZWRzKTsKLSAgICAgICAg ICAgIGlmIChyZXRfZmxhZ3MgJiBHU1NfQ19ERUxFR19GTEFHKQotICAgICAgICAgICAgICAgICh2 b2lkKSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0X21pbiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmRlbGVnX2NyZWRzKTsKLSAgICAgICAgICAgIHJldHVybiAwOwot ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG91dF90b2subGVuZ3RoKSB7Ci0gICAgICAgICAgICBp ZiAoa2Vycm9yID0gcmFkaXhfZW5jb2RlKG91dF90b2sudmFsdWUsZ2J1Ziwmb3V0X3Rvay5sZW5n dGgsIDApKSB7Ci0gICAgICAgICAgICAgICAgc2VjdXJlX2Vycm9yKCJDb3VsZG4ndCBlbmNvZGUg QURBVCByZXBseSAoJXMpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXhfZXJy b3Ioa2Vycm9yKSk7Ci0gICAgICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJjb3VsZG4ndCBl bmNvZGUgQURBVCByZXBseSIpOwotICAgICAgICAgICAgICAgICh2b2lkKSBnc3NfcmVsZWFzZV9j cmVkKCZzdGF0X21pbiwgJnNlcnZlcl9jcmVkcyk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldF9m bGFncyAmIEdTU19DX0RFTEVHX0ZMQUcpCi0gICAgICAgICAgICAgICAgICAgICAgICAodm9pZCkg Z3NzX3JlbGVhc2VfY3JlZCgmc3RhdF9taW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmZGVsZWdfY3JlZHMpOwotICAgICAgICAgICAgICAgIHJldHVy bigwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdGF0X21haiA9PSBHU1NfU19D T01QTEVURSkgewotICAgICAgICAgICAgICAgIHJlcGx5KDIzNSwgIkFEQVQ9JXMiLCBnYnVmKTsK LSAgICAgICAgICAgICAgICByZXBsaWVkID0gMTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgLyogSWYgdGhlIHNlcnZlciBhY2NlcHRzIHRoZSBzZWN1cml0eSBkYXRhLCBh bmQKLSAgICAgICAgICAgICAgICAgICByZXF1aXJlcyBhZGRpdGlvbmFsIGRhdGEsIGl0IHNob3Vs ZCByZXNwb25kCi0gICAgICAgICAgICAgICAgICAgd2l0aCByZXBseSBjb2RlIDMzNS4gKi8KLSAg ICAgICAgICAgICAgICByZXBseSgzMzUsICJBREFUPSVzIiwgZ2J1Zik7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICAodm9pZCkgZ3NzX3JlbGVhc2VfYnVmZmVyKCZzdGF0X21pbiwgJm91dF90 b2spOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0YXRfbWFqID09IEdTU19TX0NPTVBMRVRF KSB7Ci0gICAgICAgICAgICAvKiBHU1NBUEkgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkICovCi0g ICAgICAgICAgICBzdGF0X21haiA9IGdzc19kaXNwbGF5X25hbWUoJnN0YXRfbWluLCBjbGllbnQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbGllbnRfbmFtZSwg Jm1lY2hpZCk7Ci0gICAgICAgICAgICBpZiAoc3RhdF9tYWogIT0gR1NTX1NfQ09NUExFVEUpIHsK LSAgICAgICAgICAgICAgICAvKiAiSWYgdGhlIHNlcnZlciByZWplY3RzIHRoZSBzZWN1cml0eSBk YXRhIChpZgotICAgICAgICAgICAgICAgICAgIGEgY2hlY2tzdW0gZmFpbHMsIGZvciBpbnN0YW5j ZSksIGl0IHNob3VsZAotICAgICAgICAgICAgICAgICAgIHJlc3BvbmQgd2l0aCByZXBseSBjb2Rl IDUzNS4iICovCi0gICAgICAgICAgICAgICAgcmVwbHlfZ3NzX2Vycm9yKDUzNSwgc3RhdF9tYWos IHN0YXRfbWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh0cmFjdGluZyBH U1NBUEkgaWRlbnRpdHkgbmFtZSIpOwotICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfRVJSLCAi Z3NzYXBpIGVycm9yIGV4dHJhY3RpbmcgaWRlbnRpdHkiKTsKLSAgICAgICAgICAgICAgICAodm9p ZCkgZ3NzX3JlbGVhc2VfY3JlZCgmc3RhdF9taW4sICZzZXJ2ZXJfY3JlZHMpOwotICAgICAgICAg ICAgICAgIGlmIChyZXRfZmxhZ3MgJiBHU1NfQ19ERUxFR19GTEFHKQotICAgICAgICAgICAgICAg ICAgICAgICAgKHZvaWQpIGdzc19yZWxlYXNlX2NyZWQoJnN0YXRfbWluLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlbGVnX2NyZWRzKTsKLSAgICAg ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dGhfdHlw ZSA9IHRlbXBfYXV0aF90eXBlOwotICAgICAgICAgICAgdGVtcF9hdXRoX3R5cGUgPSBOVUxMOwot Ci0gICAgICAgICAgICAodm9pZCkgZ3NzX3JlbGVhc2VfY3JlZCgmc3RhdF9taW4sICZzZXJ2ZXJf Y3JlZHMpOwotICAgICAgICAgICAgaWYgKHJldF9mbGFncyAmIEdTU19DX0RFTEVHX0ZMQUcpIHsK LSAgICAgICAgICAgICAgICBpZiAod2FudF9jcmVkcykKLSAgICAgICAgICAgICAgICAgICAgZnRw ZF9nc3NfY29udmVydF9jcmVkcyhjbGllbnRfbmFtZS52YWx1ZSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZWdfY3JlZHMpOwotICAgICAgICAgICAgICAg ICh2b2lkKSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0X21pbiwgJmRlbGVnX2NyZWRzKTsKLSAgICAg ICAgICAgIH0KLQotICAgICAgICAgICAgLyogSWYgdGhlIHNlcnZlciBhY2NlcHRzIHRoZSBzZWN1 cml0eSBkYXRhLCBidXQgZG9lcwotICAgICAgICAgICAgICAgbm90IHJlcXVpcmUgYW55IGFkZGl0 aW9uYWwgZGF0YSAoaS5lLiwgdGhlIHNlY3VyaXR5Ci0gICAgICAgICAgICAgICBkYXRhIGV4Y2hh bmdlIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5KSwgaXQgbXVzdAotICAgICAgICAgICAgICAg cmVzcG9uZCB3aXRoIHJlcGx5IGNvZGUgMjM1LiAqLwotICAgICAgICAgICAgaWYgKCFyZXBsaWVk KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChyZXRfZmxhZ3MgJiBHU1NfQ19E RUxFR19GTEFHICYmICFoYXZlX2NyZWRzKQotICAgICAgICAgICAgICAgICAgcmVwbHkoMjM1LAot ICJHU1NBUEkgQXV0aGVudGljYXRpb24gc3VjY2VlZGVkLCBidXQgY291bGQgbm90IGFjY2VwdCBm b3J3YXJkZWQgY3JlZGVudGlhbHMiCi0gICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHJlcGx5KDIzNSwgIkdTU0FQSSBBdXRo ZW50aWNhdGlvbiBzdWNjZWVkZWQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy bigxKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdGF0X21haiA9PSBHU1NfU19DT05USU5VRV9ORUVE RUQpIHsKLSAgICAgICAgICAgIC8qIElmIHRoZSBzZXJ2ZXIgYWNjZXB0cyB0aGUgc2VjdXJpdHkg ZGF0YSwgYW5kCi0gICAgICAgICAgICByZXF1aXJlcyBhZGRpdGlvbmFsIGRhdGEsIGl0IHNob3Vs ZCByZXNwb25kIHdpdGgKLSAgICAgICAgICAgIHJlcGx5IGNvZGUgMzM1LiAqLwotICAgICAgICAg ICAgcmVwbHkoMzM1LCAibW9yZSBkYXRhIG5lZWRlZCIpOwotICAgICAgICAgICAgKHZvaWQpIGdz c19yZWxlYXNlX2NyZWQoJnN0YXRfbWluLCAmc2VydmVyX2NyZWRzKTsKLSAgICAgICAgICAgIGlm IChyZXRfZmxhZ3MgJiBHU1NfQ19ERUxFR19GTEFHKQotICAgICAgICAgICAgICAgICh2b2lkKSBn c3NfcmVsZWFzZV9jcmVkKCZzdGF0X21pbiwgJmRlbGVnX2NyZWRzKTsKLSAgICAgICAgICAgIHJl dHVybigwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qICJJZiB0aGUgc2VydmVy IHJlamVjdHMgdGhlIHNlY3VyaXR5IGRhdGEgKGlmCi0gICAgICAgICAgICBhIGNoZWNrc3VtIGZh aWxzLCBmb3IgaW5zdGFuY2UpLCBpdCBzaG91bGQKLSAgICAgICAgICAgIHJlc3BvbmQgd2l0aCBy ZXBseSBjb2RlIDUzNS4iICovCi0gICAgICAgICAgICByZXBseV9nc3NfZXJyb3IoNTM1LCBzdGF0 X21haiwgc3RhdF9taW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHU1NBUEkgZmFp bGVkIHByb2Nlc3NpbmcgQURBVCIpOwotICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJHU1NB UEkgZmFpbGVkIHByb2Nlc3NpbmcgQURBVCIpOwotICAgICAgICAgICAgKHZvaWQpIGdzc19yZWxl YXNlX2NyZWQoJnN0YXRfbWluLCAmc2VydmVyX2NyZWRzKTsKLSAgICAgICAgICAgIGlmIChyZXRf ZmxhZ3MgJiBHU1NfQ19ERUxFR19GTEFHKQotICAgICAgICAgICAgICAgICh2b2lkKSBnc3NfcmVs ZWFzZV9jcmVkKCZzdGF0X21pbiwgJmRlbGVnX2NyZWRzKTsKLSAgICAgICAgICAgIHJldHVybigw KTsKLSAgICAgICAgfQotCi0gICAgICAgIGRlYnVnKEYxMDAsImdzc2s1X2F1dGhfaXMgQVVUSF9T VUNDRVNTIiwiIiwwKTsKLSAgICAgICAga3JiNV9lcnJubyA9IHI7Ci0gICAgICAgIGlmICgga3Ji NV9lcnJubyApCi0gICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdl KGtyYjVfZXJybm8pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWFrZXN0cigma3JiNV9l cnJtc2csc3RyVG1wKTsKLSAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKLQotICAgIGRlZmF1 bHQ6Ci0gICAgICAgIHByaW50ZigiVW5rbm93biBLZXJiZXJvcyBvcHRpb24gJWRcclxuIiwgZGF0 YVstMV0pOwotICAgICAgICBTZW5kR1NTSzVBdXRoU0IoR1NTX1JFSkVDVCwgMCwgMCk7Ci0gICAg ICAgIGJyZWFrOwotICAgIH0KLSAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICBy ZXR1cm4gQVVUSF9GQUlMVVJFOwotfQotI2VuZGlmIC8qIEdTU0FQSV9LUkI1ICovCi0KLSNpZmRl ZiBDS19TUlAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTcgU3RhbmZvcmQgVW5pdmVyc2l0eQot ICoKLSAqIFRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgcmV2ZW51ZS1nZW5lcmF0aW5nIHB1 cnBvc2VzIG1heSByZXF1aXJlIGEKLSAqIGxpY2Vuc2UgZnJvbSB0aGUgb3duZXJzIG9mIHRoZSB1 bmRlcmx5aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eS4KLSAqIFNwZWNpZmljYWxseSwgdGhlIFNS UC0zIHByb3RvY29sIG1heSBub3QgYmUgdXNlZCBmb3IgcmV2ZW51ZS1nZW5lcmF0aW5nCi0gKiBw dXJwb3NlcyB3aXRob3V0IGEgbGljZW5zZS4KLSAqCi0gKiBOT1RFOiBDb2x1bWJpYSBVbml2ZXJz aXR5IGhhcyBhIGxpY2Vuc2UuCi0gKgotICogV2l0aGluIHRoYXQgY29uc3RyYWludCwgcGVybWlz c2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUKLSAqIHRoaXMgc29mdHdh cmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRl ZAotICogd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2VzIGFuZCB0aGlzIHBlcm1pc3Npb24KLSAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBv ZiB0aGUgc29mdHdhcmUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTLUlTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwKLSAqIEVYUFJFU1MsIElNUExJRUQgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcgV0lUSE9VVCBM SU1JVEFUSU9OLCBBTlkKLSAqIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBTVEFO Rk9SRCBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLAotICogSU5ESVJFQ1Qg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5ELCBPUiBBTlkgREFNQUdFUyBXSEFU U09FVkVSCi0gKiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBX SEVUSEVSIE9SIE5PVCBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgREFNQUdFLCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgot ICovCi0KLXN0YXRpYyB2b2lkCi1zcnBfZW5jb2RlX2xlbmd0aChkYXRhLCBudW0pCi0gICAgdW5z aWduZWQgY2hhciAqIGRhdGE7Ci0gICAgaW50IG51bTsKLXsKLSAgICAqZGF0YSA9IChudW0gPj4g OCkgJiAweGZmOwotICAgICorK2RhdGEgPSBudW0gJiAweGZmOwotfQotCi1zdGF0aWMgaW50Ci1z cnBfZGVjb2RlX2xlbmd0aChkYXRhKQotICAgIHVuc2lnbmVkIGNoYXIgKiBkYXRhOwotewotICAg IHJldHVybiAoKChpbnQpICpkYXRhICYgMHhmZikgPDwgOCkgfCAoKihkYXRhICsgMSkgJiAweGZm KTsKLX0KLQotI2lmZGVmIFBSRV9TUlBfMV83XzMKLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJ Qwotc3JwX3JlcGx5KGludCBob3csIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBjbnQpCi0jZWxz ZQotc3JwX3JlcGx5KGhvdyxkYXRhLGNudCkgaW50IGhvdzsgdW5zaWduZWQgY2hhciAqZGF0YTsg aW50IGNudDsKLSNlbmRpZgotewotICAgIHN0cnVjdCB0X251bSBuOwotICAgIHN0cnVjdCB0X251 bSBnOwotICAgIHN0cnVjdCB0X251bSBzOwotICAgIHN0cnVjdCB0X251bSBCOwotICAgIHN0cnVj dCB0X251bSAqIEE7Ci0gICAgY2hhciB0eXBlX2NoZWNrWzI2XTsKLSAgICBpbnQgcGZsYWc7Ci0K LSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgU2Vzc2lvbl9LZXkgc2tleTsKLSNlbmRpZiAvKiBF TkNSWVBUSU9OICovCi0KLSAgICBjaGFyICogc3RyPU5VTEw7Ci0KLSAgICBkYXRhICs9IDQ7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBzdGF0dXMgYnl0ZSAqLwotICAgIGNu dCAgLT0gNDsKLQotICAgIGlmKGNudC0tIDwgMSkgewotICAgICAgICBhdXRoX2ZpbmlzaGVkKEFV VEhfUkVKRUNUKTsKLSAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLSAgICB9Ci0KLSAgICBz d2l0Y2goKmRhdGErKykgewotICAgIGNhc2UgU1JQX1JFSkVDVDoKLSAgICAgICAgY2ttYWttc2co c3RyVG1wLHNpemVvZihzdHJUbXApLAotICAgICAgICAgICAgICAgICAgIlNSUCByZWZ1c2VzIGF1 dGhlbnRpY2F0aW9uIGZvciAnIixzelVzZXJOYW1lLAotICAgICAgICAgICAgICAgICAgIidcclxu IixOVUxMKTsKLSAgICAgICAgaWYgKGNudCA+IDApIHsKLSAgICAgICAgICAgIGludCBsZW4gPSBz dHJsZW4oc3RyVG1wKTsKLSAgICAgICAgICAgIGlmICggbGVuICsgY250IDwgc2l6ZW9mKHN0clRt cCkgKSB7Ci0gICAgICAgICAgICAgICAgc3RyID0gc3RyVG1wICsgc3RybGVuKHN0clRtcCk7Ci0g ICAgICAgICAgICAgICAgbWVtY3B5KHN0cixkYXRhLGNudCk7Ci0gICAgICAgICAgICAgICAgc3Ry W2NudF0gPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiU1JQ IGF1dGhlbnRpY2F0aW9uIGZhaWxlZCFcclxuJXNcclxuIixzdHJUbXApOwotICAgICAgICBpZiAo dGMgIT0gTlVMTCkgewotICAgICAgICAgICAgdF9jbGllbnRjbG9zZSh0Yyk7Ci0gICAgICAgICAg ICB0YyA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7Ci0gICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0KLSAgICBjYXNlIFNSUF9BQ0NFUFQ6 Ci0gICAgICAgIGlmKGNudCA8IFJFU1BPTlNFX0xFTiB8fCAhc3JwX3dhaXRyZXNwIHx8Ci0gICAg ICAgICAgICB0YyA9PSBOVUxMCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgIHByaW50Zigi U1JQIFByb3RvY29sIGVycm9yXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKGF1dGhfcmVzZW5k KEFVVEhUWVBFX1NSUCkpOwotICAgICAgICB9Ci0gICAgICAgIHNycF93YWl0cmVzcCA9IDA7Ci0K LSAgICAgICAgaWYodF9jbGllbnR2ZXJpZnkodGMsIGRhdGEpID09IDApIHsKLSAgICAgICAgICAg IHByaW50ZigiU1JQIGFjY2VwdHMgeW91IGFzICVzXHJcbiIsc3pVc2VyTmFtZSk7Ci0jaWZkZWYg Q0tfU1NMCi0gICAgICAgICAgICBpZigoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxh ZykgJiYKLSAgICAgICAgICAgICAgICAoaG93ICYgQVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhf RU5DUllQVF9TVEFSVF9UTFMpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIlRMUyBzZXNzaW9u IHBhcmFtZXRlcnMgdmVyaWZpZWQgYnkgU1JQXHJcbiIpOwotICAgICAgICAgICAgfSBlbHNlCi0j ZW5kaWYgLyogQ0tfU1NMICovCi0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgc2tleS50eXBlID0gU0tfR0VORVJJQzsKLSAgICAgICAgICAgICAg ICBza2V5Lmxlbmd0aCA9IFNFU1NJT05fS0VZX0xFTjsKLSAgICAgICAgICAgICAgICBza2V5LmRh dGEgPSB0Yy0+c2Vzc2lvbl9rZXk7Ci0gICAgICAgICAgICAgICAgZW5jcnlwdF9zZXNzaW9uX2tl eSgmc2tleSwgQVVUSF9DTElFTlRfVE9fU0VSVkVSKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAv KiBFTkNSWVBUSU9OICovCi0gICAgICAgICAgICB0X2NsaWVudGNsb3NlKHRjKTsKLSAgICAgICAg ICAgIHRjID0gTlVMTDsKLSAgICAgICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9IDE7Ci0gICAgICAg ICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVkFMSUQpOwotICAgICAgICAgICAgcmV0dXJuIEFVVEhf U1VDQ0VTUzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZigiU1JQIHNlcnZl ciBhdXRoZW50aWNhdGlvbiBmYWlsZWQhXHJcbiIpOwotICAgICAgICAgICAgdF9jbGllbnRjbG9z ZSh0Yyk7Ci0gICAgICAgICAgICB0YyA9IE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4oYXV0aF9y ZXNlbmQoQVVUSFRZUEVfU1JQKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj YXNlIFNSUF9QQVJBTVM6Ci0gICAgICAgIGlmKCFzelVzZXJOYW1lKSB7Ci0gICAgICAgICAgICBw cmludGYoIk5vIHVzZXJuYW1lIGF2YWlsYWJsZVxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihh dXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKLSAgICAgICAgfQotCi0gICAgICAgIG4ubGVuID0g c3JwX2RlY29kZV9sZW5ndGgoZGF0YSk7Ci0gICAgICAgIGRhdGEgKz0gMjsKLSAgICAgICAgY250 IC09IDI7Ci0gICAgICAgIGlmKG4ubGVuID4gY250KSB7Ci0gICAgICAgICAgICBwcmludGYoIm4g dG9vIGxvbmdcclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVf U1JQKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbi5kYXRhID0gZGF0YTsKLSAgICAgICAgZGF0YSAr PSBuLmxlbjsKLSAgICAgICAgY250IC09IG4ubGVuOwotCi0gICAgICAgIGcubGVuID0gc3JwX2Rl Y29kZV9sZW5ndGgoZGF0YSk7Ci0gICAgICAgIGRhdGEgKz0gMjsKLSAgICAgICAgY250IC09IDI7 Ci0gICAgICAgIGlmKGcubGVuID4gY250KSB7Ci0gICAgICAgICAgICBwcmludGYoImcgdG9vIGxv bmdcclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7 Ci0gICAgICAgIH0KLSAgICAgICAgZy5kYXRhID0gZGF0YTsKLSAgICAgICAgZGF0YSArPSBnLmxl bjsKLSAgICAgICAgY250IC09IGcubGVuOwotCi0gICAgICAgIHMubGVuID0gc3JwX2RlY29kZV9s ZW5ndGgoZGF0YSk7Ci0gICAgICAgIGRhdGEgKz0gMjsKLSAgICAgICAgY250IC09IDI7Ci0gICAg ICAgIGlmKHMubGVuID4gY250KSB7Ci0gICAgICAgICAgICBwcmludGYoInNhbHQgdG9vIGxvbmdc clxuIik7Ci0gICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7Ci0g ICAgICAgIH0KLSAgICAgICAgcy5kYXRhID0gZGF0YTsKLSAgICAgICAgZGF0YSArPSBzLmxlbjsK LSAgICAgICAgY250IC09IHMubGVuOwotCi0gICAgICAgIC8qIElmIHRoZSBwYXJhbWV0ZXJzIHBy b3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIgY2Fubm90IGJlCi0gICAgICAgICAqIHZhbGlkYXRlZCB0aGUg Zm9sbG93aW5nIGZ1bmN0aW9uIHdpbGwgZmFpbC4KLSAgICAgICAgICovCi0gICAgICAgIHRjID0g dF9jbGllbnRvcGVuKHN6VXNlck5hbWUsICZuLCAmZywgJnMpOwotICAgICAgICBpZiAodGMgPT0g TlVMTCkgewotICAgICAgICAgICAgcHJpbnRmKCJTUlAgcGFyYW1ldGVyIGluaXRpYWxpemF0aW9u IGVycm9yXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKGF1dGhfcmVzZW5kKEFVVEhUWVBFX1NS UCkpOwotICAgICAgICB9Ci0gICAgICAgIEEgPSB0X2NsaWVudGdlbmV4cCh0Yyk7Ci0gICAgICAg IGlmKEEgPT0gTlVMTCkgewotICAgICAgICAgICAgcHJpbnRmKCJTUlAgcHJvdG9jb2wgZXJyb3Jc clxuIik7Ci0gICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7Ci0g ICAgICAgIH0KLSAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfRVhQLCBBLT5kYXRhLCBBLT5sZW4p OwotCi0gICAgICAgIGlmICggcHdidWZbMF0gJiYgcHdmbGcgKSB7Ci0gICAgICAgICAgICBwcmlu dGYoIlNSUCB1c2luZyAlZC1iaXQgbW9kdWx1cyBmb3IgJyVzJ1xyXG4iLAotICAgICAgICAgICAg ICAgICAgIDggKiBuLmxlbiwKLSAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1lCi0gICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGNrc3RybmNweShzcnBfcGFzc3dkLHB3YnVmLHNp emVvZihzcnBfcGFzc3dkKSk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICBpZiAoIHB3Y3J5cHQg KQotICAgICAgICAgICAgICAgIGNrX2VuY3J5cHQoKGNoYXIgKilzcnBfcGFzc3dkKTsKLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyICog c3JwcHdwcm9tcHQ7Ci0gICAgICAgICAgICBjaGFyIHByZWZhY2VbMTI4XTsKLSAgICAgICAgICAg IGludCBvazsKLQotICAgICAgICAgICAgaWYgKHNycHB3cHJvbXB0ICYmIHNycHB3cHJvbXB0WzBd ICYmCi0JCShzdHJsZW4oc3JwcHdwcm9tcHQpICsgc3RybGVuKHN6VXNlck5hbWUpIC0gMikgPAot CQlzaXplb2YocHJlZmFjZSkpIHsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHByZWZhY2Usc3Jw cHdwcm9tcHQsc3pVc2VyTmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgIGNrbWFreG1zZyggcHJlZmFjZSxzaXplb2YocHJlZmFjZSksCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICJTUlAgdXNpbmcgIixja2l0b2EoOCpuLmxlbiksIi1iaXQgbW9kdWx1cyBmb3Ig JyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWUsICInIiwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVM TCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvayA9IHVxX3R4dCggcHJlZmFjZSwiUGFz c3dvcmQ6ICIsMixOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNycF9wYXNzd2Qsc2l6 ZW9mKHNycF9wYXNzd2QpLTEsTlVMTCwKLQkJCSBERUZBVUxUX1VRX1RJTUVPVVQpOwotICAgICAg ICAgICAgaWYgKCAhb2sgKQotICAgICAgICAgICAgICAgIHNycF9wYXNzd2RbMF0gPSAnXDAnOwot ICAgICAgICB9Ci0KLSAgICAgICAgdF9jbGllbnRwYXNzd2QodGMsIHNycF9wYXNzd2QpOwotICAg ICAgICBtZW1zZXQoc3JwX3Bhc3N3ZCwgMCwgc2l6ZW9mKHNycF9wYXNzd2QpKTsKLSAgICAgICAg cmV0dXJuIEFVVEhfU1VDQ0VTUzsKLQotICAgIGNhc2UgU1JQX0NIQUxMRU5HRToKLSAgICAgICAg aWYodGMgPT0gTlVMTCkgewotICAgICAgICAgICAgcHJpbnRmKCJTUlAgcHJvdG9jb2wgZXJyb3Jc clxuIik7Ci0gICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7Ci0g ICAgICAgIH0KLQotI2lmbmRlZiBQUkVfU1JQXzFfNF81Ci0gICAgICAgIC8qCi0gICAgICAgICAq IFRoZSBvcmlnaW5hbCBTUlAgQVVUSCBpbXBsZW1lbnRhdGlvbiBkaWQgbm90IHByb3RlY3QgYWdh aW5zdAotICAgICAgICAgKiB0YW1wZXJpbmcgb2YgdGhlIGF1dGgtdHlwZS1wYWlycy4gIFRoZXJl Zm9yZSwgd2hlbiB0aGUKLSAgICAgICAgICogQVVUSF9FTkNSWVBUX01BU0sgYml0cyBhcmUgemVy bywgbm8gZXh0cmEgZGF0YSBpcyBpbnNlcnRlZAotICAgICAgICAgKiBpbnRvIHRoZSBTUlAgaGFz aCBjb21wdXRhdGlvbi4gIFdoZW4gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUwotICAgICAgICAgKiBp cyBzZXQgd2UgYWxzbyBpbnNlcnQgdGhlIFNTTC9UTFMgY2xpZW50IGFuZCBzZXJ2ZXIgZmluaXNo ZWQKLSAgICAgICAgICogbWVzc2FnZXMgdG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gbWFuIGlu IHRoZSBtaWRkbGUgYXR0YWNrCi0gICAgICAgICAqIHVuZGVyd2F5IG9uIHRoZSBTU0wvVExTIGNv bm5lY3Rpb24uCi0gICAgICAgICAqLwotICAgICAgICBpZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9N QVNLKSAhPSBBVVRIX0VOQ1JZUFRfT0ZGKSB7Ci0gICAgICAgICAgICB0eXBlX2NoZWNrWzBdID0g QVVUSFRZUEVfU1JQOwotICAgICAgICAgICAgdHlwZV9jaGVja1sxXSA9IGhvdzsKLSNpZmRlZiBD S19TU0wKLSAgICAgICAgICAgIGlmICgoaG93ICYgQVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhf RU5DUllQVF9TVEFSVF9UTFMpIHsKLSAgICAgICAgICAgICAgICBzc2xfZ2V0X2NsaWVudF9maW5p c2hlZCgmdHlwZV9jaGVja1syXSwxMik7Ci0gICAgICAgICAgICAgICAgc3NsX2dldF9zZXJ2ZXJf ZmluaXNoZWQoJnR5cGVfY2hlY2tbMTRdLDEyKTsKLSAgICAgICAgICAgICAgICB0X2NsaWVudGFk ZGV4ZGF0YSh0Yyx0eXBlX2NoZWNrLDI2KTsKLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8q IENLX1NTTCAqLwotICAgICAgICAgICAgICAgIHRfY2xpZW50YWRkZXhkYXRhKHRjLHR5cGVfY2hl Y2ssMik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBQUkVfU1JQXzFfNF81ICovCi0KLSAgICAgICAg Qi5kYXRhID0gZGF0YTsKLSAgICAgICAgQi5sZW4gPSBjbnQ7Ci0gICAgICAgIHRfY2xpZW50Z2V0 a2V5KHRjLCAmQik7Ci0KLSAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVTUE9OU0UsIHRfY2xp ZW50cmVzcG9uc2UodGMpLCBSRVNQT05TRV9MRU4pOwotICAgICAgICBzcnBfd2FpdHJlc3AgPSAx OwotICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAg cmV0dXJuKGF1dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOwotICAgIH0KLSAgICByZXR1cm4gQVVU SF9GQUlMVVJFOwotfQotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXNycF9pcyhpbnQg aG93LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY250KQotI2Vsc2UKLXNycF9pcyhob3csZGF0 YSxjbnQpIGludCBob3c7IHVuc2lnbmVkIGNoYXIgKmRhdGE7IGludCBjbnQ7Ci0jZW5kaWYKLXsK LSAgICBjaGFyICogcGJ1ZiA9IE5VTEw7Ci0gICAgY2hhciAqIHB0cjsKLSNpZmRlZiBDS19FTkNS WVBUSU9OCi0gICAgU2Vzc2lvbl9LZXkgc2tleTsKLSNlbmRpZgotICAgIHN0cnVjdCB0X251bSBB OwotICAgIHN0cnVjdCB0X3B3ICogdHB3ID0gTlVMTDsKLSAgICBzdHJ1Y3QgdF9jb25mICogdGNv bmYgPSBOVUxMOwotICAgIHN0cnVjdCBwYXNzd2QgKiBwYXNzOwotICAgIHN0YXRpYyBzdHJ1Y3Qg dF9udW0gKiBCID0gTlVMTDsgICAgIC8qIEhvbGRlciBmb3IgQiAqLwotI2lmZGVmIENLX1NTTAot ICAgIGNoYXIgdHlwZV9jaGVja1syNl07Ci0jZWxzZQotICAgIGNoYXIgdHlwZV9jaGVja1syXTsK LSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIGlmICgoY250IC09IDQpIDwgMSkgewotICAgICAg ICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVS RTsKLSAgICB9Ci0KLSAgICBkYXRhICs9IDQ7Ci0gICAgY250ICAtPSAxOwotICAgIHN3aXRjaCgq ZGF0YSsrKSB7Ci0gICAgY2FzZSBTUlBfQVVUSDoKLSAgICAgICAgLyogU2VuZCBwYXJhbWV0ZXJz IGJhY2sgdG8gY2xpZW50ICovCi0gICAgICAgIGlmKHRzICE9IE5VTEwpIHsKLSAgICAgICAgICAg IHRfc2VydmVyY2xvc2UodHMpOwotICAgICAgICAgICAgdHMgPSBOVUxMOwotICAgICAgICB9Ci0g ICAgICAgIGlmKCFzelVzZXJOYW1lUmVxdWVzdGVkWzBdKSB7Ci0gICAgICAgICAgICBpZiAoMSkK LSAgICAgICAgICAgICAgICBwcmludGYoIk5vIHVzZXJuYW1lIGF2YWlsYWJsZVxyXG4iKTsKLSAg ICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQgKikgIk5vIHVzZXJuYW1l IHN1cHBsaWVkIiwgLTEpOwotICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7 Ci0gICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAgICAgICAgfQotI2lmZGVmIElL U0QKLSNpZmRlZiBDS19MT0dJTgotICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgY2t4YW5vbiAmJgot ICAgICAgICAgICAgICFzdHJjbXAoc3pVc2VyTmFtZVJlcXVlc3RlZCwiYW5vbnltb3VzIikpIHsK LSAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQgKikKLSAgICAgICAg ICAgICJhbm9ueW1vdXMgbG9naW4gY2Fubm90IGJlIHBlcmZvcm1lZCB3aXRoIFNlY3VyZSBSZW1v dGUgUGFzc3dvcmQiLAotICAgICAgICAgICAgLTEpOwotICAgICAgICAgICAgYXV0aF9maW5pc2hl ZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAgICAg ICAgfQotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jZW5kaWYgLyogSUtTRCAqLwotI2lmbmRlZiBQ UkVfU1JQXzFfNF80Ci0gICAgICAgIGlmKHRwdyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZigo dHB3ID0gdF9vcGVucHcoTlVMTCkpID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoMSkK LSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJVbmFibGUgdG8gb3BlbiBwYXNzd29yZCBmaWxl XHJcbiIpOwotICAgICAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQg KikgIk5vIHBhc3N3b3JkIGZpbGUiLCAtMSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKEFVVEhf RkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYodGNvbmYgPT0g TlVMTCkgewotICAgICAgICAgICAgaWYoKHRjb25mID0gdF9vcGVuY29uZihOVUxMKSkgPT0gTlVM TCkgewotICAgICAgICAgICAgICAgIGlmICgxKQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCJV bmFibGUgdG8gb3BlbiBjb25maWd1cmF0aW9uIGZpbGVcclxuIik7Ci0gICAgICAgICAgICAgICAg U2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULCAodm9pZCAqKSJObyBjb25maWd1cmF0aW9uIGZpbGUi LCAtMSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLSAgICAgICAgdHMgPSB0X3NlcnZlcm9wZW5mcm9tZmlsZXMoc3pVc2Vy TmFtZVJlcXVlc3RlZCwgdHB3LCB0Y29uZik7Ci0gICAgICAgIHRfY2xvc2Vwdyh0cHcpOwotICAg ICAgICB0cHcgPSBOVUxMOwotICAgICAgICB0X2Nsb3NlY29uZih0Y29uZik7Ci0gICAgICAgIHRj b25mID0gTlVMTDsKLSNlbHNlIC8qIFBSRV9TUlBfMV80XzQgKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgIC8qIHRoZSBjb2RlIGluIHRoaXMgYmxvY2sgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWNl c3Nhcnkgb24gT1MvMgotICAgICAgICAgICBvciBXaW5kb3dzIGJlY2F1c2UgSSBoYXZlIGFkZGVk IGZ1bmN0aW9uYWxpdHkgdG8gbGlic3JwLmxpYgotICAgICAgICAgICB0byBmaW5kIHRoZSBzcnAg ZmlsZXMuICAgNC8yMi8yMDAwCi0gICAgICAgICovCi0KLSAgICAgICAgLyogT24gV2luZG93cyBh bmQgT1MvMiB0aGVyZSBpcyBubyB3ZWxsIGRlZmluZWQgcGxhY2UgZm9yIHRoZSAqLwotICAgICAg ICAvKiBFVEMgZGlyZWN0b3J5LiAgU28gd2UgbG9vayBmb3IgZWl0aGVyIGFuIFNSUF9FVEMgb3Ig RVRDICAgICovCi0gICAgICAgIC8qIGVudmlyb25tZW50IHZhcmlhYmxlIGluIHRoYXQgb3JkZXIu ICBJZiB3ZSBmaW5kIG9uZSB3ZSAgICAgKi8KLSAgICAgICAgLyogYXR0ZW1wdCB0byBvcGVuIHRo ZSBmaWxlcyBtYW51YWxseS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiBX ZSB3aWxsIHJldXNlIHRoZSBzdHJUbXBbXSBmb3IgdGhlIGZpbGUgbmFtZXMuICovCi0gICAgICAg IHB0ciA9IGdldGVudigiU1JQX0VUQyIpOwotICAgICAgICBpZiAoICFwdHIgKQotICAgICAgICAg ICAgcHRyID0gZ2V0ZW52KCJFVEMiKTsKLSNpZmRlZiBOVAotICAgICAgICBpZiAoICFwdHIgKSB7 Ci0gICAgICAgICAgICBEV09SRCBsZW47Ci0gICAgICAgICAgICBsZW4gPSBBVVRIVE1QQkw7Ci0K LSAgICAgICAgICAgIGxlbiA9IEdldFdpbmRvd3NEaXJlY3Rvcnkoc3RyVG1wLGxlbik7Ci0gICAg ICAgICAgICBpZiAoIGxlbiA+IDAgJiYgbGVuIDwgQVVUSFRNUEJMKSB7Ci0gICAgICAgICAgICAg ICAgaWYgKCAhaXNXaW45NSgpICkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIGxlbiA9PSAx ICkKLQkJICAgICAgY2tzdHJuY2F0KHN0clRtcCwiU1lTVEVNMzIvRFJJVkVSUy9FVEMiLHNpemVv ZihzdHJUbXApKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotCQkgICAgICBja3N0cm5jYXQo c3RyVG1wLCIvU1lTVEVNMzIvRFJJVkVSUy9FVEMiLHNpemVvZihzdHJUbXApKTsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdHIgPSBzdHJUbXA7Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICBpZiAoIHB0ciApIHsKLSAgICAgICAgICAg IGludCBsZW4gPSBzdHJsZW4ocHRyKTsKLSAgICAgICAgICAgIGludCBpOwotCSAgICBpZiAocHRy ICE9IHN0clRtcCkKLQkJc3RyY3B5KHN0clRtcCxwdHIpOwotICAgICAgICAgICAgZm9yICggaT0w O2k8bGVuO2krKyApIHsKLSAgICAgICAgICAgICAgICBpZiAoIHN0clRtcFtpXSA9PSAnXFwnICkK LSAgICAgICAgICAgICAgICAgICAgc3RyVG1wW2ldID0gJy8nOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgaWYgKCBzdHJUbXBbbGVuLTFdICE9ICcvJyApCi0gICAgICAgICAgICAgICAgY2tz dHJuY2F0KHN0clRtcCwiL3RwYXNzd2QiLHNpemVvZihzdHJUbXApKTsKLSAgICAgICAgICAgIGVs c2UKLSAgICAgICAgICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCJ0cGFzc3dkIixzaXplb2Yoc3Ry VG1wKSk7Ci0gICAgICAgICAgICB0cHcgPSB0X29wZW5wd2J5bmFtZShzdHJUbXApOwotCi0gICAg ICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCIuY29uZiIsc2l6ZW9mKHN0clRtcCkpOwotICAgICAg ICAgICAgdGNvbmYgPSB0X29wZW5jb25mYnluYW1lKHN0clRtcCk7Ci0gICAgICAgIH0KLQotICAg ICAgICBpZiAoIHRwdyAmJiB0Y29uZiApCi0gICAgICAgICAgICB0cyA9IHRfc2VydmVyb3BlbmZy b21maWxlcyhzelVzZXJOYW1lUmVxdWVzdGVkLCB0cHcsIHRjb25mKTsKLSAgICAgICAgZWxzZQot ICAgICAgICAgICAgdHMgPSB0X3NlcnZlcm9wZW4oc3pVc2VyTmFtZVJlcXVlc3RlZCk7Ci0gICAg ICAgIGlmICggdHB3ICkgewotICAgICAgICAgICAgdF9jbG9zZXB3KHRwdyk7Ci0gICAgICAgICAg ICB0cHcgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGlmICggdGNvbmYgKSB7Ci0gICAgICAg ICAgICB0X2Nsb3NlY29uZih0Y29uZik7Ci0gICAgICAgICAgICB0Y29uZiA9IE5VTEw7Ci0gICAg ICAgIH0KLSNlbHNlIC8qIENPTU1FTlQgKi8KLSAgICAgICAgdHMgPSB0X3NlcnZlcm9wZW4oc3pV c2VyTmFtZVJlcXVlc3RlZCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIFBSRV9T UlBfMV80XzQgKi8KLQotICAgICAgICBpZiggdHMgPT0gTlVMTCApIHsKLSAgICAgICAgICAgIHBy aW50ZigiVXNlciAlcyBub3QgZm91bmRcclxuIiwgc3pVc2VyTmFtZVJlcXVlc3RlZCk7Ci0gICAg ICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsICh2b2lkICopICJQYXNzd29yZCBub3Qg c2V0IiwgLTEpOwotICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7Ci0gICAgICAgIH0K LQotCXBidWYgPSAoY2hhciAqKW1hbGxvYyh0cy0+bi5sZW4gKyB0cy0+Zy5sZW4gKyB0cy0+cy5s ZW4gKyA3KTsKLQlwdHIgPSBwYnVmOwotCi0gICAgICAgIHNycF9lbmNvZGVfbGVuZ3RoKHB0ciwg dHMtPm4ubGVuKTsKLSAgICAgICAgcHRyICs9IDI7Ci0gICAgICAgIG1lbWNweShwdHIsIHRzLT5u LmRhdGEsIHRzLT5uLmxlbik7ICAgICAvKiBzYWZlICovCi0gICAgICAgIHB0ciArPSB0cy0+bi5s ZW47Ci0KLSAgICAgICAgc3JwX2VuY29kZV9sZW5ndGgocHRyLCB0cy0+Zy5sZW4pOwotICAgICAg ICBwdHIgKz0gMjsKLSAgICAgICAgbWVtY3B5KHB0ciwgdHMtPmcuZGF0YSwgdHMtPmcubGVuKTsg ICAgIC8qIHNhZmUgKi8KLSAgICAgICAgcHRyICs9IHRzLT5nLmxlbjsKLQotICAgICAgICBzcnBf ZW5jb2RlX2xlbmd0aChwdHIsIHRzLT5zLmxlbik7Ci0gICAgICAgIHB0ciArPSAyOwotICAgICAg ICBtZW1jcHkocHRyLCB0cy0+cy5kYXRhLCB0cy0+cy5sZW4pOyAgICAgLyogc2FmZSAqLwotICAg ICAgICBwdHIgKz0gdHMtPnMubGVuOwotCi0gICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1BBUkFN UywgcGJ1ZiwgcHRyIC0gcGJ1Zik7Ci0JZnJlZShwYnVmKTsgcGJ1ZiA9IE5VTEw7Ci0KLSAgICAg ICAgQiA9IHRfc2VydmVyZ2VuZXhwKHRzKTsKLSAgICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWVB dXRoZW50aWNhdGVkLHN6VXNlck5hbWVSZXF1ZXN0ZWQsVUlEQlVGTEVOKTsKLSAgICAgICAgcmV0 dXJuIEFVVEhfU1VDQ0VTUzsKLQotICAgIGNhc2UgU1JQX0VYUDoKLSAgICAgICAgLyogQ2xpZW50 IGlzIHNlbmRpbmcgQSB0byB1cywgY29tcHV0ZSBjaGFsbGVuZ2UgJiBleHBlY3RlZCByZXNwb25z ZS4gKi8KLSAgICAgICAgaWYgKHRzID09IE5VTEwgfHwgQiA9PSBOVUxMKSB7Ci0gICAgICAgICAg ICBwcmludGYoIlByb3RvY29sIGVycm9yOiBTUlBfRVhQIHVuZXhwZWN0ZWRcclxuIik7Ci0gICAg ICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICh2b2lkICopICJQcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCBFWFAiLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAtMQotICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBXYWl0 IHVudGlsIG5vdyB0byBzZW5kIEIsIHNpbmNlIGl0IGNvbnRhaW5zIHRoZSBrZXkgdG8gInUiICov Ci0gICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX0NIQUxMRU5HRSwgQi0+ZGF0YSwgQi0+bGVuKTsK LSAgICAgICAgQiA9IE5VTEw7Ci0KLSNpZm5kZWYgUFJFX1NSUF8xXzRfNQotICAgICAgICAvKgot ICAgICAgICAgKiBUaGUgb3JpZ2luYWwgU1JQIEFVVEggaW1wbGVtZW50YXRpb24gZGlkIG5vdCBw cm90ZWN0IGFnYWluc3QKLSAgICAgICAgICogdGFtcGVyaW5nIG9mIHRoZSBhdXRoLXR5cGUtcGFp cnMuICBUaGVyZWZvcmUsIHdoZW4gdGhlCi0gICAgICAgICAqIEFVVEhfRU5DUllQVF9NQVNLIGJp dHMgYXJlIHplcm8sIG5vIGV4dHJhIGRhdGEgaXMgaW5zZXJ0ZWQKLSAgICAgICAgICogaW50byB0 aGUgU1JQIGhhc2ggY29tcHV0YXRpb24uICBXaGVuIEFVVEhfRU5DUllQVF9TVEFSVF9UTFMKLSAg ICAgICAgICogaXMgc2V0IHdlIGFsc28gaW5zZXJ0IHRoZSBTU0wvVExTIGNsaWVudCBhbmQgc2Vy dmVyIGZpbmlzaGVkCi0gICAgICAgICAqIG1lc3NhZ2VzIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGlz IG5vIG1hbiBpbiB0aGUgbWlkZGxlIGF0dGFjawotICAgICAgICAgKiB1bmRlcndheSBvbiB0aGUg U1NML1RMUyBjb25uZWN0aW9uLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCAoaG93ICYgQVVU SF9FTkNSWVBUX01BU0spICE9IEFVVEhfRU5DUllQVF9PRkYgKSB7Ci0gICAgICAgICAgICB0eXBl X2NoZWNrWzBdID0gQVVUSFRZUEVfU1JQOwotICAgICAgICAgICAgdHlwZV9jaGVja1sxXSA9IGhv dzsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgIGlmICgoaG93ICYgQVVUSF9FTkNSWVBUX01B U0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpIHsKLSAgICAgICAgICAgICAgICBzc2xfZ2V0 X2NsaWVudF9maW5pc2hlZCgmdHlwZV9jaGVja1syXSwxMik7Ci0gICAgICAgICAgICAgICAgc3Ns X2dldF9zZXJ2ZXJfZmluaXNoZWQoJnR5cGVfY2hlY2tbMTRdLDEyKTsKLSAgICAgICAgICAgIH0K LSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgIHRfc2VydmVyYWRkZXhkYXRhKHRzLHR5 cGVfY2hlY2ssCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAgICAgICAoKGhvdyAmIEFVVEhf RU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSA/IDI2IDoKLSNlbmRpZiAv KiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKTsKLSAgICAgICAg fQotI2VuZGlmIC8qIFBSRV9TUlBfMV80XzUgKi8KLQotICAgICAgICBBLmRhdGEgPSBkYXRhOwot ICAgICAgICBBLmxlbiA9IGNudDsKLSAgICAgICAgcHRyID0gdF9zZXJ2ZXJnZXRrZXkodHMsICZB KTsKLQotICAgICAgICBpZihwdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKDEpCi0gICAg ICAgICAgICAgIHByaW50ZigiU2VjdXJpdHkgYWxlcnQ6IFRyaXZpYWwgc2Vzc2lvbiBrZXkgYXR0 ZW1wdGVkXHJcbiIpOwotICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULAotICAg ICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAiVHJpdmlhbCBzZXNzaW9uIGtleSBkZXRl Y3RlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC0xCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAgICAgICAgfQot ICAgICAgICBzcnBfd2FpdHJlc3AgPSAxOwotICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOwot Ci0gICAgY2FzZSBTUlBfUkVTUE9OU0U6Ci0gICAgICAgIC8qIEdvdCB0aGUgcmVzcG9uc2U7IHNl ZSBpZiBpdCdzIGNvcnJlY3QgKi8KLSAgICAgICAgaWYgKCFzcnBfd2FpdHJlc3AgfHwKLSAgICAg ICAgICAgICB0cyA9PSBOVUxMCi0gICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBpZiAoMSkK LSAgICAgICAgICAgICAgcHJpbnRmKCJQcm90b2NvbCBlcnJvcjogU1JQX1JFU1BPTlNFIHVuZXhw ZWN0ZWRcclxuIik7Ci0gICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICJQcm90b2NvbCBlcnJvcjogdW5leHBlY3Rl ZCBSRVNQT05TRSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC0xCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAgICAg ICAgfQotICAgICAgICBzcnBfd2FpdHJlc3AgPSAwOyAgICAgICAvKiB3ZSBnb3QgYSByZXNwb25z ZSAqLwotCi0gICAgICAgIGlmIChjbnQgPCBSRVNQT05TRV9MRU4pIHsKLSAgICAgICAgICAgIGlm ICgxKQotICAgICAgICAgICAgICBwcmludGYoIlByb3RvY29sIGVycm9yOiBtYWxmb3JtZWQgcmVz cG9uc2VcclxuIik7Ci0gICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICJQcm90b2NvbCBlcnJvcjogbWFsZm9ybWVk IHJlc3BvbnNlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLTEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOwotICAgICAg ICB9Ci0KLSAgICAgICAgaWYgKHRfc2VydmVydmVyaWZ5KHRzLCBkYXRhKSA9PSAwKSB7Ci0gICAg ICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9BQ0NFUFQsIHRfc2VydmVycmVzcG9uc2UodHMpLCBS RVNQT05TRV9MRU4pOwotICAgICAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKLSNpZmRlZiBD S19FTkNSWVBUSU9OCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICBpZiAoIShzc2xfYWN0aXZl X2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSkKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAg ICAgIHsKLSAgICAgICAgICAgICAgICBja2hleGR1bXAoIlNSUF9SRVNQT05TRSB0cyIsdHMsc2l6 ZW9mKHRzKSk7Ci0gICAgICAgICAgICAgICAgY2toZXhkdW1wKCJTUlBfUkVTUE9OU0Ugc2Vzc2lv bl9rZXkiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRzLT5zZXNzaW9uX2tleSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICBTRVNTSU9OX0tFWV9MRU4KLSAgICAgICAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgICAgIHNrZXkudHlwZSA9IFNLX0dFTkVSSUM7Ci0gICAgICAg ICAgICAgICAgc2tleS5sZW5ndGggPSBTRVNTSU9OX0tFWV9MRU47Ci0gICAgICAgICAgICAgICAg c2tleS5kYXRhID0gdHMtPnNlc3Npb25fa2V5OwotICAgICAgICAgICAgICAgIGVuY3J5cHRfc2Vz c2lvbl9rZXkoJnNrZXksIEFVVEhfU0VSVkVSX1RPX0NMSUVOVCk7Ci0gICAgICAgICAgICB9Ci0j ZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRI X1ZBTElEKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFNlbmRTUlBB dXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQgKikgIkxvZ2luIGluY29ycmVjdCIsIC0xKTsKLSAgICAg ICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgcmV0dXJuKEFV VEhfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKLQot ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByaW50ZigiVW5rbm93biBTUlAgb3B0aW9uICVkXHJcbiIs IGRhdGFbLTFdKTsKLSAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULCAodm9pZCAqKSAi VW5rbm93biBvcHRpb24gcmVjZWl2ZWQiLCAtMSk7Ci0gICAgICAgIHJldHVybihBVVRIX0ZBSUxV UkUpOwotICAgIH0KLX0KLSNlbHNlIC8qIFBSRV9TUlBfMV83XzMgKi8KLXN0YXRpYyBpbnQKLSNp ZmRlZiBDS19BTlNJQwotbmV3X3NycF9yZXBseShpbnQgaG93LCB1bnNpZ25lZCBjaGFyICpkYXRh LCBpbnQgY250KQotI2Vsc2UKLW5ld19zcnBfcmVwbHkoaG93LGRhdGEsY250KSBpbnQgaG93OyB1 bnNpZ25lZCBjaGFyICpkYXRhOyBpbnQgY250OwotI2VuZGlmCi17Ci0gICAgZGF0YSArPSA0OyAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gc3RhdHVzIGJ5dGUgKi8KLSAgICBj bnQgIC09IDQ7Ci0KLSAgICBpZihjbnQtLSA8IDEpIHsgICAgICAgICAgICAgICAgICAgICAvKiBN YXRjaGVzIHdpdGggZGF0YSsrICovCi0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1Qp OwotICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwotICAgIH0KLQotICAgIHN3aXRjaCgqZGF0 YSsrKSB7Ci0gICAgY2FzZSBTUlBfUEFSQU1TOiB7Ci0gICAgICAgIHN0cnVjdCB0X251bSBuOwot ICAgICAgICBzdHJ1Y3QgdF9udW0gZzsKLSAgICAgICAgc3RydWN0IHRfbnVtIHM7Ci0gICAgICAg IGNzdHIgKiBBOwotCi0gICAgICAgIGlmKCFzelVzZXJOYW1lKSB7Ci0gICAgICAgICAgICBwcmlu dGYoIk5vIHVzZXJuYW1lIGF2YWlsYWJsZVxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihhdXRo X3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKLSAgICAgICAgfQotCi0gICAgICAgIG4ubGVuID0gc3Jw X2RlY29kZV9sZW5ndGgoZGF0YSk7Ci0gICAgICAgIGRhdGEgKz0gMjsKLSAgICAgICAgY250IC09 IDI7Ci0gICAgICAgIGlmKG4ubGVuID4gY250KSB7Ci0gICAgICAgICAgICBwcmludGYoIm4gdG9v IGxvbmdcclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQ KSk7Ci0gICAgICAgIH0KLSAgICAgICAgbi5kYXRhID0gZGF0YTsKLSAgICAgICAgZGF0YSArPSBu LmxlbjsKLSAgICAgICAgY250IC09IG4ubGVuOwotCi0gICAgICAgIGcubGVuID0gc3JwX2RlY29k ZV9sZW5ndGgoZGF0YSk7Ci0gICAgICAgIGRhdGEgKz0gMjsKLSAgICAgICAgY250IC09IDI7Ci0g ICAgICAgIGlmKGcubGVuID4gY250KSB7Ci0gICAgICAgICAgICBwcmludGYoImcgdG9vIGxvbmdc clxuIik7Ci0gICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7Ci0g ICAgICAgIH0KLSAgICAgICAgZy5kYXRhID0gZGF0YTsKLSAgICAgICAgZGF0YSArPSBnLmxlbjsK LSAgICAgICAgY250IC09IGcubGVuOwotCi0gICAgICAgIHMubGVuID0gc3JwX2RlY29kZV9sZW5n dGgoZGF0YSk7Ci0gICAgICAgIGRhdGEgKz0gMjsKLSAgICAgICAgY250IC09IDI7Ci0gICAgICAg IGlmKHMubGVuICE9IGNudCkgewotICAgICAgICAgICAgcHJpbnRmKCJpbnZhbGlkIHNhbHRcclxu Iik7Ci0gICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7Ci0gICAg ICAgIH0KLSAgICAgICAgcy5kYXRhID0gZGF0YTsKLSAgICAgICAgZGF0YSArPSBzLmxlbjsKLSAg ICAgICAgY250IC09IHMubGVuOwotCi0gICAgICAgIC8qIElmIHRoZSBwYXJhbWV0ZXJzIHByb3Zp ZGVkIGJ5IHRoZSBzZXJ2ZXIgY2Fubm90IGJlCi0gICAgICAgICAqIHZhbGlkYXRlZCB0aGUgZm9s bG93aW5nIGZ1bmN0aW9uIHdpbGwgZmFpbC4KLSAgICAgICAgICovCi0gICAgICAgIGNfc3JwID0g U1JQX25ldyhTUlBfUkZDMjk0NV9jbGllbnRfbWV0aG9kKCkpOwotICAgICAgICBpZiAoY19zcnAg PT0gTlVMTCB8fAotCSAgICBTUlBfc2V0X3VzZXJuYW1lKGNfc3JwLCBzelVzZXJOYW1lKSAhPSBT UlBfU1VDQ0VTUyB8fAotCSAgICBTUlBfc2V0X3BhcmFtcyhjX3NycCxuLmRhdGEsbi5sZW4sZy5k YXRhLGcubGVuLHMuZGF0YSxzLmxlbikgIT0KLQkgICAgU1JQX1NVQ0NFU1MpIHsKLSAgICAgICAg ICAgIHByaW50ZigiU1JQIFBhcmFtZXRlciBpbml0aWFsaXphdGlvbiBlcnJvclxyXG4iKTsKLSAg ICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKLSAgICAgICAgfQot Ci0gICAgICAgIEEgPSBjc3RyX25ldygpOwotICAgICAgICBpZihTUlBfZ2VuX3B1YihjX3NycCwg JkEpICE9IFNSUF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNSUCBFcnJvciBnZW5l cmF0aW5nIGtleSBleGNoYW5nZVxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2Vu ZChBVVRIVFlQRV9TUlApKTsKLSAgICAgICAgfQotCi0gICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQ X0VYUCwgQS0+ZGF0YSwgQS0+bGVuZ3RoKTsKLSAgICAgICAgY3N0cl9mcmVlKEEpOwotCi0gICAg ICAgIGlmICggcHdidWZbMF0gJiYgcHdmbGcgKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNSUCB1 c2luZyAlZC1iaXQgbW9kdWx1cyBmb3IgJyVzJ1xyXG4iLAotICAgICAgICAgICAgICAgICAgIDgg KiBuLmxlbiwKLSAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1lCi0gICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgIGNrc3RybmNweShzcnBfcGFzc3dkLHB3YnVmLHNpemVvZihzcnBf cGFzc3dkKSk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICBpZiAoIHB3Y3J5cHQgKQotICAgICAg ICAgICAgICAgIGNrX2VuY3J5cHQoKGNoYXIgKilzcnBfcGFzc3dkKTsKLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyICogc3JwcHdwcm9t cHQ7Ci0gICAgICAgICAgICBjaGFyIHByZWZhY2VbMTI4XTsKLSAgICAgICAgICAgIGludCBvazsK LQotICAgICAgICAgICAgaWYgKHNycHB3cHJvbXB0ICYmIHNycHB3cHJvbXB0WzBdICYmCi0JCShz dHJsZW4oc3JwcHdwcm9tcHQpICsgc3RybGVuKHN6VXNlck5hbWUpIC0gMikgPAotCQlzaXplb2Yo cHJlZmFjZSkpIHsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHByZWZhY2Usc3JwcHdwcm9tcHQs c3pVc2VyTmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNrbWFr eG1zZyggcHJlZmFjZSxzaXplb2YocHJlZmFjZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICJTUlAgdXNpbmcgIixja2l0b2EoOCpuLmxlbiksIi1iaXQgbW9kdWx1cyBmb3IgJyIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWUsICInIiwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBvayA9IHVxX3R4dChwcmVmYWNlLCJQYXNzd29yZDogIiwy LE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICBzcnBfcGFzc3dkLHNpemVvZihzcnBfcGFz c3dkKS0xLE5VTEwsCi0JCQlERUZBVUxUX1VRX1RJTUVPVVQpOwotICAgICAgICAgICAgaWYgKCAh b2sgKQotICAgICAgICAgICAgICAgIHNycF9wYXNzd2RbMF0gPSAnXDAnOwotICAgICAgICB9Ci0K LSAgICAgICAgaWYoU1JQX3NldF9hdXRoX3Bhc3N3b3JkKGNfc3JwLCBzcnBfcGFzc3dkKSAhPSBT UlBfU1VDQ0VTUykgewotICAgICAgICAgICAgbWVtc2V0KHNycF9wYXNzd2QsIDAsIHNpemVvZihz cnBfcGFzc3dkKSk7Ci0gICAgICAgICAgICBwcmludGYoIlNSUCBFcnJvciBzZXR0aW5nIGNsaWVu dCBwYXNzd29yZFxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQ RV9TUlApKTsKLSAgICAgICAgfQotICAgICAgICBtZW1zZXQoc3JwX3Bhc3N3ZCwgMCwgc2l6ZW9m KHNycF9wYXNzd2QpKTsKLSAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKLSAgICB9Ci0gICAg Y2FzZSBTUlBfQ0hBTExFTkdFOiB7Ci0gICAgICAgIGNoYXIgdHlwZV9jaGVja1syNl07Ci0gICAg ICAgIGNzdHIgKiByZXNwID0gTlVMTDsKLQotICAgICAgICBpZihjX3NycCA9PSBOVUxMKSB7Ci0g ICAgICAgICAgICBwcmludGYoIlNSUCBwcm90b2NvbCBlcnJvclxyXG4iKTsKLSAgICAgICAgICAg IHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKLSAgICAgICAgfQotCi0gICAgICAg IC8qCi0gICAgICAgICAqIFRoZSBvcmlnaW5hbCBTUlAgQVVUSCBpbXBsZW1lbnRhdGlvbiBkaWQg bm90IHByb3RlY3QgYWdhaW5zdAotICAgICAgICAgKiB0YW1wZXJpbmcgb2YgdGhlIGF1dGgtdHlw ZS1wYWlycy4gIFRoZXJlZm9yZSwgd2hlbiB0aGUKLSAgICAgICAgICogQVVUSF9FTkNSWVBUX01B U0sgYml0cyBhcmUgemVybywgbm8gZXh0cmEgZGF0YSBpcyBpbnNlcnRlZAotICAgICAgICAgKiBp bnRvIHRoZSBTUlAgaGFzaCBjb21wdXRhdGlvbi4gIFdoZW4gQVVUSF9FTkNSWVBUX1NUQVJUX1RM UwotICAgICAgICAgKiBpcyBzZXQgd2UgYWxzbyBpbnNlcnQgdGhlIFNTTC9UTFMgY2xpZW50IGFu ZCBzZXJ2ZXIgZmluaXNoZWQKLSAgICAgICAgICogbWVzc2FnZXMgdG8gZW5zdXJlIHRoYXQgdGhl cmUgaXMgbm8gbWFuIGluIHRoZSBtaWRkbGUgYXR0YWNrCi0gICAgICAgICAqIHVuZGVyd2F5IG9u IHRoZSBTU0wvVExTIGNvbm5lY3Rpb24uCi0gICAgICAgICAqLwotICAgICAgICBpZiAoKGhvdyAm IEFVVEhfRU5DUllQVF9NQVNLKSAhPSBBVVRIX0VOQ1JZUFRfT0ZGKSB7Ci0gICAgICAgICAgICB0 eXBlX2NoZWNrWzBdID0gQVVUSFRZUEVfU1JQOwotICAgICAgICAgICAgdHlwZV9jaGVja1sxXSA9 IGhvdzsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgIGlmICgoaG93ICYgQVVUSF9FTkNSWVBU X01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpIHsKLSAgICAgICAgICAgICAgICBzc2xf Z2V0X2NsaWVudF9maW5pc2hlZCgmdHlwZV9jaGVja1syXSwxMik7Ci0gICAgICAgICAgICAgICAg c3NsX2dldF9zZXJ2ZXJfZmluaXNoZWQoJnR5cGVfY2hlY2tbMTRdLDEyKTsKLSAgICAgICAgICAg ICAgICBTUlBfYWRkX2V4X2RhdGEoY19zcnAsIHR5cGVfY2hlY2ssIDI2KTsKLSAgICAgICAgICAg IH0gZWxzZQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICAgIFNSUF9hZGRfZXhf ZGF0YShjX3NycCwgdHlwZV9jaGVjaywgMik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZihTUlBf Y29tcHV0ZV9rZXkoY19zcnAsICZjX2tleSwgZGF0YSwgY250KSAhPSBTUlBfU1VDQ0VTUykgewot ICAgICAgICAgICAgcHJpbnRmKCJTUlAgRVJST1I6IHVuYWJsZSB0byBjb21wdXRlIGNsaWVudCBr ZXlcclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7 Ci0gICAgICAgIH0KLQotICAgICAgICByZXNwID0gY3N0cl9uZXcoKTsKLSAgICAgICAgaWYoU1JQ X3Jlc3BvbmQoY19zcnAsICZyZXNwKSAhPSBTUlBfU1VDQ0VTUykgewotICAgICAgICAgICAgcHJp bnRmKCJTUlAgRVJST1I6IHVuYWJsZSB0byBjb21wdXRlIGNsaWVudCByZXNwb25zZVxyXG4iKTsK LSAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKLSAgICAgICAg fQotICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRVNQT05TRSwgcmVzcC0+ZGF0YSwgcmVzcC0+ bGVuZ3RoKTsKLSAgICAgICAgY3N0cl9mcmVlKHJlc3ApOwotICAgICAgICBzcnBfd2FpdHJlc3Ag PSAxOwotICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOwotICAgIH0KLSAgICBjYXNlIFNSUF9B Q0NFUFQ6IHsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgIFNlc3Npb25fS2V5IHNrZXk7 Ci0jZW5kaWYgLyogRU5DUllQVElPTiAqLwotCi0gICAgICAgIGlmKGNudCA8IFJFU1BPTlNFX0xF TiB8fCAhc3JwX3dhaXRyZXNwIHx8IGNfc3JwID09IE5VTEwpIHsKLSAgICAgICAgICAgIHByaW50 ZigiU1JQIFByb3RvY29sIGVycm9yXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKGF1dGhfcmVz ZW5kKEFVVEhUWVBFX1NSUCkpOwotICAgICAgICB9Ci0gICAgICAgIHNycF93YWl0cmVzcCA9IDA7 Ci0KLSAgICAgICAgaWYoU1JQX3ZlcmlmeShjX3NycCwgZGF0YSwgY250KSA9PSBTUlBfU1VDQ0VT UykgewotICAgICAgICAgICAgcHJpbnRmKCJTUlAgYWNjZXB0cyB5b3UgYXMgJXNcclxuIixzelVz ZXJOYW1lKTsKLQotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgaWYoKHNzbF9hY3RpdmVfZmxh ZyB8fCB0bHNfYWN0aXZlX2ZsYWcpICYmCi0gICAgICAgICAgICAgICAgKGhvdyAmIEFVVEhfRU5D UllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSB7Ci0gICAgICAgICAgICAgICAg cHJpbnRmKCJUTFMgc2Vzc2lvbiBwYXJhbWV0ZXJzIHZlcmlmaWVkIGJ5IFNSUFxyXG4iKTsKLSAg ICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIENLX0VOQ1JZUFRJ T04KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBza2V5LnR5cGUgPSBTS19HRU5FUklD OwotICAgICAgICAgICAgICAgIHNrZXkubGVuZ3RoID0gY19rZXktPmxlbmd0aDsKLSAgICAgICAg ICAgICAgICBza2V5LmRhdGEgPSBjX2tleS0+ZGF0YTsKLSAgICAgICAgICAgICAgICBlbmNyeXB0 X3Nlc3Npb25fa2V5KCZza2V5LCBBVVRIX0NMSUVOVF9UT19TRVJWRVIpOwotICAgICAgICAgICAg ICAgIGNzdHJfY2xlYXJfZnJlZShjX2tleSk7Ci0gICAgICAgICAgICAgICAgY19rZXkgPSBOVUxM OwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgICAg IGFjY2VwdF9jb21wbGV0ZSA9IDE7Ci0gICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVkFM SUQpOwotICAgICAgICAgICAgU1JQX2ZyZWUoY19zcnApOwotICAgICAgICAgICAgY19zcnAgPSBO VUxMOwotICAgICAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKLSAgICAgICAgfQotICAgICAg ICBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZigiWyBFcnJvcjogU1JQIHNlcnZlciBhdXRoZW50 aWNhdGlvbiBmYWlsZWQgXVxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChB VVRIVFlQRV9TUlApKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXNlIFNSUF9SRUpFQ1Q6IHsK LSAgICAgICAgY2hhciAqIHN0cj1OVUxMOwotCi0gICAgICAgIGNrbWFrbXNnKHN0clRtcCxzaXpl b2Yoc3RyVG1wKSwKLSAgICAgICAgICAgICAgICAgICJTUlAgcmVmdXNlcyBhdXRoZW50aWNhdGlv biBmb3IgJyIsc3pVc2VyTmFtZSwKLSAgICAgICAgICAgICAgICAgICInXHJcbiIsTlVMTCk7Ci0g ICAgICAgIGlmIChjbnQgPiAwKSB7Ci0gICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKHN0clRt cCk7Ci0gICAgICAgICAgICBpZiAoIGxlbiArIGNudCA8IHNpemVvZihzdHJUbXApICkgewotICAg ICAgICAgICAgICAgIHN0ciA9IHN0clRtcCArIHN0cmxlbihzdHJUbXApOwotICAgICAgICAgICAg ICAgIG1lbWNweShzdHIsZGF0YSxjbnQpOwotICAgICAgICAgICAgICAgIHN0cltjbnRdID0gMDsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwcmludGYoIlNSUCBhdXRoZW50aWNh dGlvbiBmYWlsZWQhXHJcbiVzXHJcbiIsc3RyVG1wKTsKLSAgICAgICAgYXV0aF9maW5pc2hlZChB VVRIX1JFSkVDVCk7Ci0gICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0gICAgfQotICAgIGRl ZmF1bHQ6Ci0gICAgICAgIHByaW50ZigiVW5rbm93biBTUlAgb3B0aW9uICVkXHJcbiIsIGRhdGFb LTFdKTsKLSAgICAgICAgcmV0dXJuKGF1dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOwotICAgIH0K LSAgICAvKiBORVZFUiBSRUFDSEVEICovCi19Ci0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJ QwotbmV3X3NycF9pcyhpbnQgaG93LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY250KQotI2Vs c2UKLW5ld19zcnBfaXMoaG93LGRhdGEsY250KSBpbnQgaG93OyB1bnNpZ25lZCBjaGFyICpkYXRh OyBpbnQgY250OwotI2VuZGlmCi17Ci0gICAgY2hhciAqIHBidWYgPSBOVUxMOwotICAgIGNoYXIg KiBwdHI7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIFNlc3Npb25fS2V5IHNrZXk7Ci0jZW5k aWYKLSAgICBzdGF0aWMgY3N0ciAqIEIgPSBOVUxMOyAgICAgICAgICAgICAvKiBIb2xkZXIgZm9y IEIgKi8KLSAgICBzdHJ1Y3QgdF9wYXNzd2QgKiBwYXNzOwotICAgIGNzdHIgKiByZXNwOwotICAg IGNoYXIgdHlwZV9jaGVja1syNl07Ci0KLSAgICBpZiAoKGNudCAtPSA0KSA8IDEpIHsKLSAgICAg ICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgIHJldHVybiBBVVRIX0ZBSUxV UkU7Ci0gICAgfQotCi0gICAgZGF0YSArPSA0OwotICAgIGNudCAgLT0gMTsKLSAgICBzd2l0Y2go KmRhdGErKykgewotICAgIGNhc2UgU1JQX0FVVEg6Ci0gICAgICAgIC8qIFNlbmQgcGFyYW1ldGVy cyBiYWNrIHRvIGNsaWVudCAqLwotICAgICAgICBpZihzX3NycCAhPSBOVUxMKSB7Ci0gICAgICAg ICAgICBTUlBfZnJlZShzX3NycCk7Ci0gICAgICAgICAgICBzX3NycCA9IE5VTEw7Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKEIgIT0gTlVMTCkgewotICAgICAgICAgICAgY3N0cl9mcmVlKEIpOwot ICAgICAgICAgICAgQiA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYoIXN6VXNlck5hbWVS ZXF1ZXN0ZWRbMF0pIHsKLSAgICAgICAgICAgIGlmICgxKQotICAgICAgICAgICAgICAgIHByaW50 ZigiTm8gdXNlcm5hbWUgYXZhaWxhYmxlXHJcbiIpOwotICAgICAgICAgICAgU2VuZFNSUEF1dGhT QihTUlBfUkVKRUNULCAodm9pZCAqKSAiTm8gdXNlcm5hbWUgc3VwcGxpZWQiLCAtMSk7Ci0gICAg ICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgIHJldHVybihB VVRIX0ZBSUxVUkUpOwotICAgICAgICB9Ci0jaWZkZWYgSUtTRAotI2lmZGVmIENLX0xPR0lOCi0g ICAgICAgIGlmIChpbnNlcnZlciAmJiBja3hhbm9uICYmCi0gICAgICAgICAgICAgIXN0cmNtcChz elVzZXJOYW1lUmVxdWVzdGVkLCJhbm9ueW1vdXMiKSkgewotICAgICAgICAgICAgU2VuZFNSUEF1 dGhTQihTUlBfUkVKRUNULCAodm9pZCAqKQotICAgICAgICAgICAgImFub255bW91cyBsb2dpbiBj YW5ub3QgYmUgcGVyZm9ybWVkIHdpdGggU2VjdXJlIFJlbW90ZSBQYXNzd29yZCIsCi0gICAgICAg ICAgICAtMSk7Ci0gICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAg ICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfTE9H SU4gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgIHNfc3JwID0gU1JQX25ldyhTUlBfUkZD Mjk0NV9zZXJ2ZXJfbWV0aG9kKCkpOwotICAgICAgICBpZihzX3NycCA9PSBOVUxMKSB7Ci0gICAg ICAgICAgICBwcmludGYoIkVycm9yIGluaXRpYWxpemluZyBTUlAgc2VydmVyXHJcbiIpOwotICAg ICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULAotICAgICAgICAgICAgICAgICAgICAg ICAgICAodm9pZCAqKSAiU1JQIHNlcnZlciBpbml0IGZhaWxlZCIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIC0xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBy ZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAgICAgICBwYXNzID0gZ2V0dHBuYW0o c3pVc2VyTmFtZVJlcXVlc3RlZCk7Ci0gICAgICAgIGlmKHBhc3MgPT0gTlVMTCkgewotICAgICAg ICAgICAgcHJpbnRmKCJVc2VyICVzIG5vdCBmb3VuZFxyXG4iLCBzelVzZXJOYW1lUmVxdWVzdGVk KTsKLSAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQgKikgIlBhc3N3 b3JkIG5vdCBzZXQiLCAtMSk7Ci0gICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAg ICAgICAgfQotICAgICAgICBpZihTUlBfc2V0X3VzZXJuYW1lKHNfc3JwLCBzelVzZXJOYW1lUmVx dWVzdGVkKSAhPSBTUlBfU1VDQ0VTUyB8fAotCSAgIFNSUF9zZXRfcGFyYW1zKHNfc3JwLCBwYXNz LT50Yy5tb2R1bHVzLmRhdGEsCi0JCQkgIHBhc3MtPnRjLm1vZHVsdXMubGVuLAotCQkJICBwYXNz LT50Yy5nZW5lcmF0b3IuZGF0YSwKLQkJCSAgcGFzcy0+dGMuZ2VuZXJhdG9yLmxlbiwKLQkJCSAg cGFzcy0+dHAuc2FsdC5kYXRhLAotCQkJICBwYXNzLT50cC5zYWx0LmxlbikgIT0gU1JQX1NVQ0NF U1MgfHwKLQkgICBTUlBfc2V0X2F1dGhlbnRpY2F0b3Ioc19zcnAsCi0JCQkJIHBhc3MtPnRwLnBh c3N3b3JkLmRhdGEsCi0JCQkJIHBhc3MtPnRwLnBhc3N3b3JkLmxlbikgIT0gU1JQX1NVQ0NFU1Mp IHsKLSAgICAgICAgICAgIHByaW50ZigiRXJyb3IgaW5pdGlhbGl6aW5nIFNSUCBwYXJhbWV0ZXJz XHJcbiIpOwotICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULCh2b2lkICopIlNS UCBwYXJhbWV0ZXIgaW5pdCBmYWlsZWQiLCAtMSk7Ci0gICAgICAgICAgICByZXR1cm4oQVVUSF9G QUlMVVJFKTsKLSAgICAgICAgfQotCi0JcGJ1ZiA9IChjaGFyICopbWFsbG9jKHBhc3MtPnRjLm1v ZHVsdXMubGVuICsgcGFzcy0+dGMuZ2VuZXJhdG9yLmxlbiArCi0JCQkgICAgICAgcGFzcy0+dHAu c2FsdC5sZW4gKyA3KTsKLSAgICAgICAgcHRyID0gcGJ1ZjsKLQotICAgICAgICBzcnBfZW5jb2Rl X2xlbmd0aChwdHIsIHBhc3MtPnRjLm1vZHVsdXMubGVuKTsKLSAgICAgICAgcHRyICs9IDI7Ci0g ICAgICAgIG1lbWNweShwdHIsIHBhc3MtPnRjLm1vZHVsdXMuZGF0YSwgcGFzcy0+dGMubW9kdWx1 cy5sZW4pOwotICAgICAgICBwdHIgKz0gcGFzcy0+dGMubW9kdWx1cy5sZW47Ci0KLSAgICAgICAg c3JwX2VuY29kZV9sZW5ndGgocHRyLCBwYXNzLT50Yy5nZW5lcmF0b3IubGVuKTsKLSAgICAgICAg cHRyICs9IDI7Ci0gICAgICAgIG1lbWNweShwdHIsIHBhc3MtPnRjLmdlbmVyYXRvci5kYXRhLCBw YXNzLT50Yy5nZW5lcmF0b3IubGVuKTsKLSAgICAgICAgcHRyICs9IHBhc3MtPnRjLmdlbmVyYXRv ci5sZW47Ci0KLSAgICAgICAgc3JwX2VuY29kZV9sZW5ndGgocHRyLCBwYXNzLT50cC5zYWx0Lmxl bik7Ci0gICAgICAgIHB0ciArPSAyOwotICAgICAgICBtZW1jcHkocHRyLCBwYXNzLT50cC5zYWx0 LmRhdGEsIHBhc3MtPnRwLnNhbHQubGVuKTsKLSAgICAgICAgcHRyICs9IHBhc3MtPnRwLnNhbHQu bGVuOwotCi0gICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1BBUkFNUywgcGJ1ZiwgcHRyIC0gcGJ1 Zik7Ci0JZnJlZShwYnVmKTsKLQlwYnVmID0gTlVMTDsKLQotICAgICAgICBpZihTUlBfZ2VuX3B1 YihzX3NycCwgJkIpICE9IFNSUF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBwcmludGYoIkVycm9y IGdlbmVyYXRpbmcgU1JQIHB1YmxpYyB2YWx1ZVxyXG4iKTsKLSAgICAgICAgICAgIFNlbmRTUlBB dXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQgKikgIlNSUF9nZW5fcHViIGZhaWxlZCIsIC0xKTsKLSAg ICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIGNrc3Ry bmNweShzelVzZXJOYW1lQXV0aGVudGljYXRlZCxzelVzZXJOYW1lUmVxdWVzdGVkLFVJREJVRkxF Tik7Ci0gICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7Ci0KLSAgICBjYXNlIFNSUF9FWFA6Ci0g ICAgICAvKiBDbGllbnQgaXMgc2VuZGluZyBBIHRvIHVzLCBjb21wdXRlIGNoYWxsZW5nZSBhbmQg ZXhwZWN0ZWQgcmVzcG9uc2UuICovCi0gICAgICAgIGlmIChzX3NycCA9PSBOVUxMIHx8IEIgPT0g TlVMTCkgewotCSAgICBwcmludGYoIlByb3RvY29sIGVycm9yOiBTUlBfRVhQIHVuZXhwZWN0ZWRc clxuIik7Ci0JICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwKLQkJICAJKHZvaWQgKikiUHJv dG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgRVhQIiwgLTEpOwotCSAgICByZXR1cm4oQVVUSF9GQUlM VVJFKTsKLQl9Ci0gICAgICAgIC8qIFdhaXQgdW50aWwgbm93IHRvIHNlbmQgQiwgc2luY2UgaXQg Y29udGFpbnMgdGhlIGtleSB0byAidSIgKi8KLSAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfQ0hB TExFTkdFLCBCLT5kYXRhLCBCLT5sZW5ndGgpOwotICAgICAgICBjc3RyX2ZyZWUoQik7Ci0gICAg ICAgIEIgPSBOVUxMOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoZSBvcmlnaW5hbCBTUlAg QVVUSCBpbXBsZW1lbnRhdGlvbiBkaWQgbm90IHByb3RlY3QgYWdhaW5zdAotICAgICAgICAgKiB0 YW1wZXJpbmcgb2YgdGhlIGF1dGgtdHlwZS1wYWlycy4gIFRoZXJlZm9yZSwgd2hlbiB0aGUKLSAg ICAgICAgICogQVVUSF9FTkNSWVBUX01BU0sgYml0cyBhcmUgemVybywgbm8gZXh0cmEgZGF0YSBp cyBpbnNlcnRlZAotICAgICAgICAgKiBpbnRvIHRoZSBTUlAgaGFzaCBjb21wdXRhdGlvbi4gIFdo ZW4gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUwotICAgICAgICAgKiBpcyBzZXQgd2UgYWxzbyBpbnNl cnQgdGhlIFNTTC9UTFMgY2xpZW50IGFuZCBzZXJ2ZXIgZmluaXNoZWQKLSAgICAgICAgICogbWVz c2FnZXMgdG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gbWFuIGluIHRoZSBtaWRkbGUgYXR0YWNr Ci0gICAgICAgICAqIHVuZGVyd2F5IG9uIHRoZSBTU0wvVExTIGNvbm5lY3Rpb24uCi0gICAgICAg ICAqLwotICAgICAgICBpZiAoIChob3cgJiBBVVRIX0VOQ1JZUFRfTUFTSykgIT0gQVVUSF9FTkNS WVBUX09GRiApIHsKLSAgICAgICAgICAgIHR5cGVfY2hlY2tbMF0gPSBBVVRIVFlQRV9TUlA7Ci0g ICAgICAgICAgICB0eXBlX2NoZWNrWzFdID0gaG93OwotI2lmZGVmIENLX1NTTAotICAgICAgICAg ICAgaWYgKChob3cgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RM UykgewotICAgICAgICAgICAgICAgIHNzbF9nZXRfY2xpZW50X2ZpbmlzaGVkKCZ0eXBlX2NoZWNr WzJdLDEyKTsKLSAgICAgICAgICAgICAgICBzc2xfZ2V0X3NlcnZlcl9maW5pc2hlZCgmdHlwZV9j aGVja1sxNF0sMTIpOwotICAgICAgICAgICAgICAgIFNSUF9hZGRfZXhfZGF0YShzX3NycCwgdHlw ZV9jaGVjaywgMjYpOwotICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0g ICAgICAgICAgICAgICAgU1JQX2FkZF9leF9kYXRhKHNfc3JwLCB0eXBlX2NoZWNrLCAyKTsKLSAg ICAgICAgfQotCi0gICAgICAgIGlmKFNSUF9jb21wdXRlX2tleShzX3NycCwgJnNfa2V5LCBkYXRh LCBjbnQpICE9IFNSUF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNlY3VyaXR5IGFs ZXJ0OiBUcml2aWFsIHNlc3Npb24ga2V5IGF0dGVtcHRlZFxyXG4iKTsKLSAgICAgICAgICAgIFNl bmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwKLQkJCSAgKHZvaWQgKikgIlRyaXZpYWwgc2Vzc2lvbiBr ZXkgZGV0ZWN0ZWQiLCAtMSk7Ci0gICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAg ICAgICAgfQotICAgICAgICBzcnBfd2FpdHJlc3AgPSAxOwotICAgICAgICByZXR1cm4gQVVUSF9T VUNDRVNTOwotCi0gICAgY2FzZSBTUlBfUkVTUE9OU0U6Ci0gICAgICAgIC8qIEdvdCB0aGUgcmVz cG9uc2U7IHNlZSBpZiBpdCdzIGNvcnJlY3QgKi8KLSAgICAgICAgaWYgKCFzcnBfd2FpdHJlc3Ag fHwgc19zcnAgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKDEpCi0gICAgICAgICAgICAgIHBy aW50ZigiUHJvdG9jb2wgZXJyb3I6IFNSUF9SRVNQT05TRSB1bmV4cGVjdGVkXHJcbiIpOwotICAg ICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULAotICAgICAgICAgICAgICAgICAgICAg ICAgICAodm9pZCAqKSAiUHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgUkVTUE9OU0UiLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAtMQotICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3Jw X3dhaXRyZXNwID0gMDsgICAgICAgLyogd2UgZ290IGEgcmVzcG9uc2UgKi8KLQotICAgICAgICBp ZiAoY250IDwgUkVTUE9OU0VfTEVOKSB7Ci0gICAgICAgICAgICBpZiAoMSkKLSAgICAgICAgICAg ICAgcHJpbnRmKCJQcm90b2NvbCBlcnJvcjogbWFsZm9ybWVkIHJlc3BvbnNlXHJcbiIpOwotICAg ICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULAotICAgICAgICAgICAgICAgICAgICAg ICAgICAodm9pZCAqKSAiUHJvdG9jb2wgZXJyb3I6IG1hbGZvcm1lZCByZXNwb25zZSIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgIC0xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm KFNSUF92ZXJpZnkoc19zcnAsIGRhdGEsIGNudCkgPT0gU1JQX1NVQ0NFU1MpIHsKLSAgICAgICAg ICAgIHJlc3AgPSBjc3RyX25ldygpOwotICAgICAgICAgICAgaWYoU1JQX3Jlc3BvbmQoc19zcnAs ICZyZXNwKSAhPSBTUlBfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3Ig Y29tcHV0aW5nIHJlc3BvbnNlXHJcbiIpOwotICAgICAgICAgICAgICAgIFNlbmRTUlBBdXRoU0Io U1JQX1JFSkVDVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICJFcnJv ciBjb21wdXRpbmcgcmVzcG9uc2UiLCAtMSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKEFVVEhf RkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9B Q0NFUFQsIHJlc3AtPmRhdGEsIHJlc3AtPmxlbmd0aCk7Ci0gICAgICAgICAgICBhY2NlcHRfY29t cGxldGUgPSAxOwotICAgICAgICAgICAgY3N0cl9mcmVlKHJlc3ApOwotCi0jaWZkZWYgQ0tfRU5D UllQVElPTgotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgaWYgKCEoc3NsX2FjdGl2ZV9mbGFn IHx8IHRsc19hY3RpdmVfZmxhZykpCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgc2tleS50eXBlID0gU0tfR0VORVJJQzsKLSAgICAgICAgICAgICAg ICBza2V5Lmxlbmd0aCA9IHNfa2V5LT5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgc2tleS5kYXRh ID0gc19rZXktPmRhdGE7Ci0gICAgICAgICAgICAgICAgZW5jcnlwdF9zZXNzaW9uX2tleSgmc2tl eSwgQVVUSF9TRVJWRVJfVE9fQ0xJRU5UKTsKLSAgICAgICAgICAgICAgICBjc3RyX2NsZWFyX2Zy ZWUoc19rZXkpOwotICAgICAgICAgICAgICAgIHNfa2V5ID0gTlVMTDsKLSAgICAgICAgICAgIH0K LSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFV VEhfVkFMSUQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgU2VuZFNS UEF1dGhTQihTUlBfUkVKRUNULCAodm9pZCAqKSAiTG9naW4gaW5jb3JyZWN0IiwgLTEpOwotICAg ICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICByZXR1cm4o QVVUSF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOwot Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRmKCJVbmtub3duIFNSUCBvcHRpb24gJWRcclxu IiwgZGF0YVstMV0pOwotICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsICh2b2lkICop ICJVbmtub3duIG9wdGlvbiByZWNlaXZlZCIsIC0xKTsKLSAgICAgICAgcmV0dXJuKEFVVEhfRkFJ TFVSRSk7Ci0gICAgfQotfQotI2VuZGlmIC8qIFBSRV9TUlBfMV83XzMgKi8KLSNlbmRpZiAvKiBT UlAgKi8KLQotI2lmZGVmIEtSQjUKLSNpZmRlZiBLSU5JVAotLyoKLSAqIGNsaWVudHMva2luaXQv a2luaXQuYwotICoKLSAqIENvcHlyaWdodCAxOTkwIGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3Rp dHV0ZSBvZiBUZWNobm9sb2d5LgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBFeHBv cnQgb2YgdGhpcyBzb2Z0d2FyZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EgbWF5 Ci0gKiAgIHJlcXVpcmUgYSBzcGVjaWZpYyBsaWNlbnNlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMg R292ZXJubWVudC4KLSAqICAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGFueSBwZXJzb24g b3Igb3JnYW5pemF0aW9uIGNvbnRlbXBsYXRpbmcKLSAqICAgZXhwb3J0IHRvIG9idGFpbiBzdWNo IGEgbGljZW5zZSBiZWZvcmUgZXhwb3J0aW5nLgotICoKLSAqIFdJVEhJTiBUSEFUIENPTlNUUkFJ TlQsIHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZAotICogZGlzdHJpYnV0ZSB0 aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kCi0g KiB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0gKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0 aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kCi0gKiB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVh ciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0Ci0gKiB0aGUgbmFtZSBvZiBN LkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcK LSAqIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3Jp dHRlbiBwcmlvcgotICogcGVybWlzc2lvbi4gIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlv bnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVy cG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzCi0gKiBvciBpbXBs aWVkIHdhcnJhbnR5LgotICoKLSAqCi0gKiBJbml0aWFsaXplIGEgY3JlZGVudGlhbHMgY2FjaGUu Ci0gKi8KLQotI2RlZmluZSBLUkI1X0RFRkFVTFRfT1BUSU9OUyAwCi0jZGVmaW5lIEtSQjVfREVG QVVMVF9MSUZFIDYwKjYwKjEwIC8qIDEwIGhvdXJzICovCi0KLXN0YXRpYyBrcmI1X2RhdGEgdGd0 bmFtZSA9IHsKLSNpZm5kZWYgSEVJTURBTAotICAgIDAsCi0jZW5kaWYgLyogSEVJTURBTCAqLwot ICAgIEtSQjVfVEdTX05BTUVfU0laRSwKLSAgICBLUkI1X1RHU19OQU1FCi19OwotCi0vKiBJbnRl cm5hbCBwcm90b3R5cGVzICovCi1fUFJPVE9UWVAoc3RhdGljIGtyYjVfZXJyb3JfY29kZSBrcmI1 X3ZhbGlkYXRlX3RndCwKLSAgICAgICAgKGtyYjVfY29udGV4dCwga3JiNV9jY2FjaGUsa3JiNV9w cmluY2lwYWwsIGtyYjVfZGF0YSAqKSk7Ci1fUFJPVE9UWVAoc3RhdGljIGtyYjVfZXJyb3JfY29k ZSBrcmI1X3JlbmV3X3RndCwKLSAgICAgICAgKGtyYjVfY29udGV4dCwga3JiNV9jY2FjaGUsCi0g ICAgICAgICAgICAgICAgICAgICAgICBrcmI1X3ByaW5jaXBhbCwga3JiNV9kYXRhICopKTsKLV9Q Uk9UT1RZUChzdGF0aWMga3JiNV9lcnJvcl9jb2RlIGtyYjVfdGd0X2dlbiwKLSAgICAgICAgKGty YjVfY29udGV4dCwga3JiNV9jY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBrcmI1X3By aW5jaXBhbCwga3JiNV9kYXRhICosIGludCBvcHQpKTsKLQotI2lmZGVmIEtSQjVfSEFWRV9HRVRf SU5JVF9DUkVEUwotc3RhdGljIGtyYjVfZXJyb3JfY29kZSBLUkI1X0NBTExDT05WCi1ja19rcmI1 X3Byb21wdGVyKCBrcmI1X2NvbnRleHQgY29udGV4dCwKLSAgICAgICAgICAgICAgICAgIHZvaWQg KmRhdGEsCi0gICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqYmFubmVyLAotICAgICAgICAgICAgICAgICAgaW50IG51bV9wcm9t cHRzLAotICAgICAgICAgICAgICAgICAga3JiNV9wcm9tcHQgcHJvbXB0c1tdKQotewotICAgIGty YjVfZXJyb3JfY29kZSAgICAgZXJyY29kZSA9IDA7Ci0gICAgaW50ICAgICAgICAgICAgICAgICBp OwotI2lmZGVmIEtVSQotICAgIHN0cnVjdCB0eHRib3ggKiB0YiA9IE5VTEw7Ci0jZWxzZSAvKiBL VUkgKi8KLSAgICBjaGFyICogcHJvbXB0ID0gTlVMTDsKLSNlbmRpZiAvKiBLVUkgKi8KLSAgICBp bnQgICAgbGVuID0gMCwgYmxlbj0wLCBubGVuPTA7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJja19rcmI1 X3Byb21wdGVyIG5hbWUiLG5hbWUsMCk7Ci0gICAgZGVidWcoRjExMCwiY2tfa3JiNV9wcm9tcHRl ciBiYW5uZXIiLGJhbm5lciwwKTsKLSAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3Byb21wdGVyIG51 bV9wcm9tcHRzIiwiIixudW1fcHJvbXB0cyk7Ci0KLSAgICBpZiAobmFtZSkKLSAgICAgICAgbmxl biA9IHN0cmxlbihuYW1lKSsyOwotCi0gICAgaWYgKGJhbm5lcikKLSAgICAgICAgYmxlbiA9IHN0 cmxlbihiYW5uZXIpKzI7Ci0KLSNpZmRlZiBLVUkKLSAgICB0YiA9IChzdHJ1Y3QgdHh0Ym94ICop IG1hbGxvYyhzaXplb2Yoc3RydWN0IHR4dGJveCkgKiBudW1fcHJvbXB0cyk7Ci0gICAgaWYgKCB0 YiAhPSBOVUxMICkgewotICAgICAgICBpbnQgb2s7Ci0gICAgICAgIG1lbXNldCh0YiwwLHNpemVv ZihzdHJ1Y3QgdHh0Ym94KSAqIG51bV9wcm9tcHRzKTsKLSAgICAgICAgZm9yICggaT0wOyBpIDwg bnVtX3Byb21wdHM7IGkrKyApIHsKLSAgICAgICAgICAgIHRiW2ldLnRfYnVmID0gcHJvbXB0c1tp XS5yZXBseS0+ZGF0YTsKLSAgICAgICAgICAgIHRiW2ldLnRfbGVuID0gcHJvbXB0c1tpXS5yZXBs eS0+bGVuZ3RoOwotICAgICAgICAgICAgdGJbaV0udF9sYmwgPSBwcm9tcHRzW2ldLnByb21wdDsK LSAgICAgICAgICAgIHRiW2ldLnRfZGZsdCA9IE5VTEw7Ci0gICAgICAgICAgICB0YltpXS50X2Vj aG8gPSAocHJvbXB0c1tpXS5oaWRkZW4gPyAyIDogMSk7Ci0gICAgICAgIH0gICAKLQotICAgICAg ICBvayA9IHVxX210eHQoKGNoYXIgKiliYW5uZXIsTlVMTCxudW1fcHJvbXB0cyx0Yik7Ci0gICAg ICAgIGlmICggb2sgKSB7Ci0gICAgICAgICAgICBmb3IgKCBpPTA7IGkgPCBudW1fcHJvbXB0czsg aSsrICkKLSAgICAgICAgICAgICAgICBwcm9tcHRzW2ldLnJlcGx5LT5sZW5ndGggPSBzdHJsZW4o cHJvbXB0c1tpXS5yZXBseS0+ZGF0YSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZXJy Y29kZSA9IC0yOwotICAgIH0KLSNlbHNlIC8qIEtVSSAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBu dW1fcHJvbXB0czsgaSsrKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsImNrX2tyYjVfcHJvbXB0ZXIg cHJvbXB0Iixwcm9tcHRzW2ldLnByb21wdCxpKTsKLQotICAgICAgICBpZiAoIHByb21wdCAmJiBs ZW4gPCAobmxlbiArIGJsZW4gKyBzdHJsZW4ocHJvbXB0c1tpXS5wcm9tcHQpKzIpICkgewotICAg ICAgICAgICAgZnJlZShwcm9tcHQpOwotICAgICAgICAgICAgcHJvbXB0ID0gTlVMTDsKLSAgICAg ICAgfQotICAgICAgICBpZiAoICFwcm9tcHQgKQotICAgICAgICAgICAgcHJvbXB0ID0gKGNoYXIg KiltYWxsb2MobmxlbiArIGJsZW4gKyBzdHJsZW4ocHJvbXB0c1tpXS5wcm9tcHQpKzIpOwotICAg ICAgICBpZiAoICFwcm9tcHQgKSB7Ci0gICAgICAgICAgICBlcnJjb2RlID0gS1JCNV9SQ19NQUxM T0M7Ci0gICAgICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuID0g bmxlbiArIGJsZW4gKyBzdHJsZW4ocHJvbXB0c1tpXS5wcm9tcHQpKzI7Ci0gICAgICAgIGNrbWFr eG1zZyhwcm9tcHQsbGVuLAotICAgICAgICAgICAgICAgICAoY2hhciAqKSAobmFtZT9uYW1lOiIi KSwKLSAgICAgICAgICAgICAgICAgbmFtZT8iXHJcbiI6IiIsCi0gICAgICAgICAgICAgICAgIChj aGFyICopIChiYW5uZXI/YmFubmVyOiIiKSwKLSAgICAgICAgICAgICAgICAgYmFubmVyPyJcclxu IjoiIiwKLSAgICAgICAgICAgICAgICAgKGNoYXIgKilwcm9tcHRzW2ldLnByb21wdCwKLSAgICAg ICAgICAgICAgICAgIjogIixOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0KLSAgICAg ICAgbWVtc2V0KHByb21wdHNbaV0ucmVwbHktPmRhdGEsIDAsIHByb21wdHNbaV0ucmVwbHktPmxl bmd0aCk7Ci0gICAgICAgIGlmIChwcm9tcHRzW2ldLmhpZGRlbikgewotICAgICAgICAgICAgcmVh ZHBhc3MocHJvbXB0LCBwcm9tcHRzW2ldLnJlcGx5LT5kYXRhLAotICAgICAgICAgICAgICAgICAg ICAgIHByb21wdHNbaV0ucmVwbHktPmxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICByZWFkdGV4dChwcm9tcHQsIHByb21wdHNbaV0ucmVwbHktPmRhdGEsCi0gICAgICAgICAg ICAgICAgICAgICAgcHJvbXB0c1tpXS5yZXBseS0+bGVuZ3RoKTsKLSAgICAgICAgfQotICAgICAg ICBwcm9tcHRzW2ldLnJlcGx5LT5sZW5ndGggPSBzdHJsZW4ocHJvbXB0c1tpXS5yZXBseS0+ZGF0 YSk7Ci0gICAgfQotI2VuZGlmIC8qIEtVSSAqLwotCi0gIGNsZWFudXA6Ci0jaWZkZWYgS1VJCi0g ICAgaWYgKCB0YiApCi0gICAgICAgIGZyZWUodGIpOwotI2Vsc2UgLyogS1VJICovCi0gICAgaWYg KCBwcm9tcHQgKQotICAgICAgICBmcmVlKHByb21wdCk7Ci0jZW5kaWYgLyogS1VJICovCi0gICAg aWYgKGVycmNvZGUpIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9wcm9tcHRzOyBpKysp IHsKLSAgICAgICAgICAgIG1lbXNldChwcm9tcHRzW2ldLnJlcGx5LT5kYXRhLCAwLCBwcm9tcHRz W2ldLnJlcGx5LT5sZW5ndGgpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlcnJjb2Rl OwotfQotCi0vKgotICogICAgICBJJ20gbm90IHJlYWxseSBzdXJlIHdoYXQgdG8gZG8gd2l0aCB0 aGlzLiAgVGhlIE5STCBETExzIHVzZSBhCi0gKiAgICAgIGRpZmZlcmVudCBpbnRlcmZhY2UgZm9y IHRoZSBrcmI1X3Byb21wdGVyIGNhbGxiYWNrLiAgSXQgaGFzCi0gKiAgICAgIG9uZSBsZXNzIHBh cmFtZXRlci4gICBUaGlzIGlzIGdvaW5nIHRvIGJlIHVnbHkuCi0gKi8KLXN0YXRpYyBrcmI1X2Vy cm9yX2NvZGUgS1JCNV9DQUxMQ09OVgotY2tfTlJMX2tyYjVfcHJvbXB0ZXIoIGtyYjVfY29udGV4 dCBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0gICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmFubmVyLAotICAgICAgICAgICAgICAgICAg ICAgIGludCBudW1fcHJvbXB0cywKLSAgICAgICAgICAgICAgICAgICAgICBrcmI1X3Byb21wdCBw cm9tcHRzW10pCi17Ci0gICAgcmV0dXJuKGNrX2tyYjVfcHJvbXB0ZXIoY29udGV4dCxOVUxMLG5h bWUsYmFubmVyLG51bV9wcm9tcHRzLHByb21wdHMpKTsKLX0KLSNlbmRpZiAvKiBLUkI1X0hBVkVf R0VUX0lOSVRfQ1JFRFMgKi8KLQotI2lmZGVmIEtSQjUyNF9DT05WCi1sb25nCi10cnlfY29udmVy dDUyNChrcmI1X2NvbnRleHQgY3R4LCBrcmI1X3ByaW5jaXBhbCBtZSwga3JiNV9jY2FjaGUgY2Mp Ci17Ci0gICAgY2hhciAqIHByb2duYW1lID0gImNvbnZlcnQ1MjQiOwotICAgIGtyYjVfZXJyb3Jf Y29kZSBjb2RlID0gMDsKLSAgICBpbnQgaWNvZGUgPSAwOwotICAgIGtyYjVfcHJpbmNpcGFsIGtw Y3NlcnZlciA9IDA7Ci0gICAga3JiNV9jcmVkcyAqdjVjcmVkcyA9IDA7Ci0gICAga3JiNV9jcmVk cyBpbmNyZWRzOwotI2lmZGVmIE9TMgotICAgIExFQVNIX0NSRURFTlRJQUxTIHY0Y3JlZHM7Ci0j ZWxzZSAvKiBPUzIgKi8KLSAgICBDUkVERU5USUFMUyB2NGNyZWRzOwotI2VuZGlmIC8qIE9TMiAq LwotCi0gICAgbWVtc2V0KChjaGFyICopICZpbmNyZWRzLCAwLCBzaXplb2YoaW5jcmVkcykpOwot ICAgIC8qCi0gICAgICBGcm9tIHRoaXMgcG9pbnQgb24sIHdlIGNhbiBnb3RvIGNsZWFudXAgYmVj YXVzZSBpbmNyZWRzIGlzCi0gICAgICBpbml0aWFsaXplZC4KLSAgICAqLwotCi0gICAgaWYgKChj b2RlID0ga3JiNV9idWlsZF9wcmluY2lwYWwoY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZrcGNzZXJ2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAga3JiNV9wcmluY19yZWFsbShjdHgsIG1lKS0+bGVuZ3RoLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGtyYjVfcHJpbmNfcmVhbG0oY3R4LCBtZSktPmRhdGEsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtyYnRndCIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9wcmluY19yZWFsbShjdHgsIG1lKS0+ZGF0 YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkpIHsKLSAgICAg ICAgY29tX2Vycihwcm9nbmFtZSwgY29kZSwKLSAgICAgICAgICAgICAgICAid2hpbGUgY3JlYXRp bmcgc2VydmljZSBwcmluY2lwYWwgbmFtZSIpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAg fQotCi0gICAgbWVtc2V0KChjaGFyKikgJmluY3JlZHMsIDAsIHNpemVvZihpbmNyZWRzKSk7Ci0g ICAgaW5jcmVkcy5jbGllbnQgPSBtZTsKLSAgICBpbmNyZWRzLnNlcnZlciA9IGtwY3NlcnZlcjsK LSAgICAvKiBQcmV2ZW50IGR1cGxpY2F0ZSBmcmVlIGNhbGxzLiAgKi8KLSAgICBrcGNzZXJ2ZXIg PSAwOwotCi0gICAgaW5jcmVkcy50aW1lcy5lbmR0aW1lID0gMDsKLSAgICBpbmNyZWRzLmtleWJs b2NrLmVuY3R5cGUgPSBFTkNUWVBFX0RFU19DQkNfQ1JDOwotICAgIGlmICgoY29kZSA9IGtyYjVf Z2V0X2NyZWRlbnRpYWxzKGN0eCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5jcmVkcywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdjVjcmVkcykpKSB7Ci0gICAg ICAgIGNvbV9lcnIocHJvZ25hbWUsIGNvZGUsCi0gICAgICAgICAgICAgICAgImdldHRpbmcgVjUg Y3JlZGVudGlhbHMiKTsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLSAgICBpZiAoKGlj b2RlID0ga3JiNTI0X2NvbnZlcnRfY3JlZHNfa2RjKGN0eCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHY1Y3JlZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmdjRjcmVkcykpKSB7Ci0gICAgICAgIGNvbV9lcnIocHJvZ25hbWUs IGljb2RlLAotICAgICAgICAgICAgICAgICJjb252ZXJ0aW5nIHRvIFY0IGNyZWRlbnRpYWxzIik7 Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0gICAgLyogdGhpcyBpcyBzdG9sZW4gZnJv bSB0aGUgdjQga2luaXQgKi8KLSAgICAvKiBpbml0aWFsaXplIHRpY2tldCBjYWNoZSAqLwotICAg IGlmICgoaWNvZGUgPSBrcmJfaW5fdGt0KHY0Y3JlZHMucG5hbWUsIHY0Y3JlZHMucGluc3QsIHY0 Y3JlZHMucmVhbG0pCi0gICAgICAgICAhPSBLU1VDQ0VTUykpIHsKLSAgICAgICAgY29tX2Vycihw cm9nbmFtZSwgaWNvZGUsCi0gICAgICAgICAgICAgICAgInRyeWluZyB0byBjcmVhdGUgdGhlIFY0 IHRpY2tldCBmaWxlIik7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0gICAgLyogc3Rh c2ggdGlja2V0LCBzZXNzaW9uIGtleSwgZXRjLiBmb3IgZnV0dXJlIHVzZSAqLwotICAgIGlmICgo aWNvZGUgPSBrcmJfc2F2ZV9jcmVkZW50aWFscyh2NGNyZWRzLnNlcnZpY2UsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY0Y3JlZHMuaW5zdGFuY2UsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY0Y3JlZHMucmVhbG0sCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHY0Y3JlZHMuc2Vzc2lvbiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdjRjcmVkcy5saWZldGltZSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdjRjcmVkcy5rdm5vLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmKHY0Y3JlZHMudGlja2V0X3N0KSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdjRjcmVkcy5pc3N1ZV9kYXRlKSkpIHsKLSAgICAgICAg Y29tX2Vycihwcm9nbmFtZSwgaWNvZGUsCi0gICAgICAgICAgICAgICAgInRyeWluZyB0byBzYXZl IHRoZSBWNCB0aWNrZXQiKTsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLQotIGNsZWFu dXA6Ci0gICAgbWVtc2V0KCZ2NGNyZWRzLCAwLCBzaXplb2YodjRjcmVkcykpOwotICAgIGlmICh2 NWNyZWRzKQotICAgICAgICBrcmI1X2ZyZWVfY3JlZHMoY3R4LCB2NWNyZWRzKTsKLSAgICBpbmNy ZWRzLmNsaWVudCA9IDA7Ci0gICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoY3R4LCAmaW5jcmVk cyk7Ci0gICAgaWYgKGtwY3NlcnZlcikKLSAgICAgICAga3JiNV9mcmVlX3ByaW5jaXBhbChjdHgs IGtwY3NlcnZlcik7Ci0gICAgcmV0dXJuICEoY29kZSB8fCBpY29kZSk7Ci19Ci0jZW5kaWYgLyog S1JCNTI0X0NPTlYgKi8KLQotI2RlZmluZSBOT19LRVlUQUIKLQotaW50Ci0jaWZkZWYgQ0tfQU5T SUMKLWNrX2tyYjVfaW5pdFRHVCggc3RydWN0IGtyYl9vcF9kYXRhICogb3AsIHN0cnVjdCBrcmI1 X2luaXRfZGF0YSAqIGluaXQsCi0gICAgICAgICAgICAgICAgIHN0cnVjdCBrcmI0X2luaXRfZGF0 YSAqIGs0X2luaXQpCi0jZWxzZQotY2tfa3JiNV9pbml0VEdUKG9wLGluaXQsazRfaW5pdCkKLSAg ICBrcmJfb3BfZGF0YSAqIG9wOyBzdHJ1Y3Qga3JiNV9pbml0X2RhdGEgKiBpbml0OwotICAgIHN0 cnVjdCBrcmI0X2luaXRfZGF0YSAqIGs0X2luaXQ7Ci0jZW5kaWYgLyogQ0tfQU5TSUMqLwotewot ICAgIGtyYjVfY29udGV4dCBrY29udGV4dDsKLSAgICBrcmI1X2NjYWNoZSBjY2FjaGUgPSBOVUxM OwotICAgIGtyYjVfZGVsdGF0IGxpZmV0aW1lID0gS1JCNV9ERUZBVUxUX0xJRkU7ICAgLyogLWwg b3B0aW9uICovCi0gICAga3JiNV90aW1lc3RhbXAgc3RhcnR0aW1lID0gMDsKLSAgICBrcmI1X2Rl bHRhdCBybGlmZSA9IDA7Ci0gICAgaW50IG9wdGlvbnMgPSBLUkI1X0RFRkFVTFRfT1BUSU9OUzsK LSAgICBpbnQgb3B0aW9uOwotICAgIGludCBlcnJmbGcgPSAwOwotICAgIGtyYjVfZXJyb3JfY29k ZSBjb2RlOwotICAgIGtyYjVfcHJpbmNpcGFsIG1lPU5VTEw7Ci0gICAga3JiNV9wcmluY2lwYWwg c2VydmVyPU5VTEw7Ci0gICAga3JiNV9jcmVkcyBteV9jcmVkczsKLSAgICBrcmI1X3RpbWVzdGFt cCBub3c7Ci0jaWZuZGVmIEhFSU1EQUwKLSAgICBrcmI1X2FkZHJlc3MgKiphZGRycyA9IChrcmI1 X2FkZHJlc3MgKiopMDsKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAgaW50IGFkZHJfY291bnQ9 MDsKLSAgICBpbnQgaSxqOwotI2lmbmRlZiBOT19LRVlUQUIKLSAgICBpbnQgdXNlX2tleXRhYiA9 IDA7ICAgICAgICAgICAgICAgICAvKiAtayBvcHRpb24gKi8KLSAgICBrcmI1X2tleXRhYiBrZXl0 YWIgPSBOVUxMOwotI2VuZGlmIC8qIE5PX0tFWVRBQiAqLwotICAgIHN0cnVjdCBwYXNzd2QgKnB3 ID0gMDsKLSAgICBpbnQgcHdzaXplOwotICAgIGNoYXIgKmNsaWVudF9uYW1lPU5VTEwsIHByaW5j aXBhbFsyNTZdPSIiLCByZWFsbVsyNTZdPSIiLCBudW1zdHJbNDBdPSIiOwotICAgIGNoYXIgKnBh c3N3b3JkPU5VTEwsIHBhc3N3ZFs4MF09IiI7Ci0jaWZkZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NS RURTCi0gICAga3JiNV9nZXRfaW5pdF9jcmVkc19vcHQgb3B0czsKLSNlbmRpZgotICAgIGNoYXIg KiBuYW1lOwotICAgIGludCBsZW47Ci0KLSAgICBpZiAoICFja19rcmI1X2lzX2luc3RhbGxlZCgp ICkKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotI2lmZGVmIENPTU1FTlQKLSAgICBwcmludGYoIktl cmJlcm9zIFYgaW5pdGlhbGl6YXRpb25cclxuIik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0g ICAgY29kZSA9IGtyYjVfaW5pdF9jb250ZXh0KCZrY29udGV4dCk7Ci0gICAgaWYgKGNvZGUpIHsK LSAgICAgICAgY29tX2Vycigia3JiNV9raW5pdCIsY29kZSwid2hpbGUgaW5pdF9jb250ZXh0Iik7 Ci0gICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOwotICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1z ZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9 Ci0KLSAgICBkZWJ1ZyhGMTEwLCJrcmI1X2luaXQiLCJrcmI1X2luaXRfY29udGV4dCIsMCk7Ci0K LSAgICBpZiAoKGNvZGUgPSBrcmI1X3RpbWVvZmRheShrY29udGV4dCwgJm5vdykpKSB7Ci0gICAg ICAgIGNvbV9lcnIoImtyYjVfa2luaXQiLGNvZGUsIndoaWxlIGdldHRpbmcgdGltZSBvZiBkYXki KTsKLSAgICAgICAgZ290byBleGl0X2s1X2luaXQ7Ci0gICAgfQotCi0jaWZkZWYgS1JCNV9IQVZF X0dFVF9JTklUX0NSRURTCi0gICAgbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOwotICAg IGtyYjVfZ2V0X2luaXRfY3JlZHNfb3B0X2luaXQoJm9wdHMpOwotICAgIGRlYnVnKEYxMTAsImty YjVfaW5pdCIsImtyYjVfZ2V0X2luaXRfY3JlZHNfb3B0X2luaXQiLDApOwotI2VuZGlmCi0KLSAg ICBpZiAoIGluaXQtPnJlbmV3YWJsZSApIHsKLSAgICAgICAgb3B0aW9ucyB8PSBLRENfT1BUX1JF TkVXQUJMRTsKLSAgICAgICAgY2ttYWttc2cobnVtc3RyLHNpemVvZihudW1zdHIpLGNraXRvYShp bml0LT5yZW5ld2FibGUpLCJtIixOVUxMLE5VTEwpOwotI2lmZGVmIEhFSU1EQUwKLSAgICAgICAg Y29kZSA9IC0xOwotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgICAgICBjb2RlID0ga3JiNV9zdHJp bmdfdG9fZGVsdGF0KG51bXN0ciwgJnJsaWZlKTsKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAg ICAgIGlmIChjb2RlICE9IDAgfHwgcmxpZmUgPT0gMCkgewotICAgICAgICAgICAgcHJpbnRmKCJC YWQgcmVuZXdhYmxlIHRpbWUgdmFsdWUgJXNcclxuIiwgbnVtc3RyKTsKLSAgICAgICAgICAgIGVy cmZsZysrOwotICAgICAgICB9Ci0jaWZkZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTCi0gICAg ICAgIGtyYjVfZ2V0X2luaXRfY3JlZHNfb3B0X3NldF9yZW5ld19saWZlKCZvcHRzLCBybGlmZSk7 Ci0jZW5kaWYKLSAgICB9Ci0gICAgaWYgKCBpbml0LT5yZW5ldyApIHsKLSAgICAgICAgLyogcmVu ZXcgdGhlIHRpY2tldCAqLwotICAgICAgICBvcHRpb25zIHw9IEtEQ19PUFRfUkVORVc7Ci0gICAg fQotCi0gICAgaWYgKCBpbml0LT52YWxpZGF0ZSApIHsKLSAgICAgICAgLyogdmFsaWRhdGUgdGhl IHRpY2tldCAqLwotICAgICAgICBvcHRpb25zIHw9IEtEQ19PUFRfVkFMSURBVEU7Ci0gICAgfQot ICAgIGlmICggaW5pdC0+cHJveGlhYmxlICkgewotICAgICAgICBvcHRpb25zIHw9IEtEQ19PUFRf UFJPWElBQkxFOwotI2lmZGVmIEtSQjVfSEFWRV9HRVRfSU5JVF9DUkVEUwotICAgICAgICBrcmI1 X2dldF9pbml0X2NyZWRzX29wdF9zZXRfcHJveGlhYmxlKCZvcHRzLCAxKTsKLSNlbmRpZgotICAg IH0KLSAgICBpZiAoIGluaXQtPmZvcndhcmRhYmxlICkgewotICAgICAgICBvcHRpb25zIHw9IEtE Q19PUFRfRk9SV0FSREFCTEU7Ci0jaWZkZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTCi0gICAg ICAgIGtyYjVfZ2V0X2luaXRfY3JlZHNfb3B0X3NldF9mb3J3YXJkYWJsZSgmb3B0cywgMSk7Ci0j ZW5kaWYKLSAgICB9Ci0jaWZuZGVmIE5PX0tFWVRBQgotICAgIGlmICggICkgewotICAgICAgICB1 c2Vfa2V5dGFiID0gMTsKLSAgICB9Ci0gICAgaWYgKCAgKSB7Ci0gICAgICAgIGlmIChrZXl0YWIg PT0gTlVMTCAmJiBrZXl0YWJfbmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBjb2RlID0ga3Ji NV9rdF9yZXNvbHZlKGtjb250ZXh0LCBrZXl0YWJfbmFtZSwgJmtleXRhYik7Ci0gICAgICAgICAg ICBpZiAoY29kZSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwia3JiNV9pbml0 IHJlc29sdmluZyBrZXl0YWIiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGtleXRhYl9uYW1l LGNvZGUpOwotICAgICAgICAgICAgICAgIGVycmZsZysrOwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgfQotI2VuZGlmIC8qIE5PX0tFWVRBQiAqLwotICAgIGlmICggaW5pdC0+bGlmZXRp bWUgKSB7Ci0gICAgICAgIGNrbWFrbXNnKG51bXN0cixzaXplb2YobnVtc3RyKSxja2l0b2EoaW5p dC0+bGlmZXRpbWUpLCJtIixOVUxMLE5VTEwpOwotI2lmZGVmIEhFSU1EQUwKLSAgICAgICAgY29k ZSA9IC0xOwotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgICAgICBjb2RlID0ga3JiNV9zdHJpbmdf dG9fZGVsdGF0KG51bXN0ciwgJmxpZmV0aW1lKTsKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAg ICAgIGlmIChjb2RlICE9IDAgfHwgbGlmZXRpbWUgPT0gMCkgewotICAgICAgICAgICAgcHJpbnRm KCJCYWQgbGlmZXRpbWUgdmFsdWUgJXNcclxuIiwgbnVtc3RyKTsKLSAgICAgICAgICAgIGVycmZs ZysrOwotICAgICAgICB9Ci0jaWZkZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTCi0gICAgICAg IGtyYjVfZ2V0X2luaXRfY3JlZHNfb3B0X3NldF90a3RfbGlmZSgmb3B0cywgbGlmZXRpbWUpOwot I2VuZGlmCi0gICAgfQotICAgIGlmICggaW5pdC0+cG9zdGRhdGUgKSB7Ci0gICAgICAgIC8qIENv bnZlcnQgY21kYXRlKCkgdG8gYSB0aW1lX3QgdmFsdWUgKi8KLSAgICAgICAgc3RydWN0IHRtICog dGltZV90bTsKLSAgICAgICAgc3RydWN0IHRtICogY21kYXRlMnRtKGNoYXIgKixpbnQpOwotICAg ICAgICB0aW1lX3RtID0gY21kYXRlMnRtKGluaXQtPnBvc3RkYXRlLDApOwotICAgICAgICBpZiAo IHRpbWVfdG0gKQotICAgICAgICAgICAgc3RhcnR0aW1lID0gKGtyYjVfdGltZXN0YW1wKSBta3Rp bWUodGltZV90bSk7Ci0KLSAgICAgICAgaWYgKGNvZGUgIT0gMCB8fCBzdGFydHRpbWUgPT0gMCB8 fCBzdGFydHRpbWUgPT0gLTEpIHsKLSAgICAgICAgICAgIGtyYjVfZGVsdGF0IGt0bXA7Ci0jaWZk ZWYgSEVJTURBTAotICAgICAgICAgICAgY29kZSA9IC0xOwotI2Vsc2UgLyogSEVJTURBTCAqLwot ICAgICAgICAgICAgY29kZSA9IGtyYjVfc3RyaW5nX3RvX2RlbHRhdChpbml0LT5wb3N0ZGF0ZSwg Jmt0bXApOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgIGlmIChjb2RlID09IDAg JiYga3RtcCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnR0aW1lID0gbm93ICsga3RtcDsK LSAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEtEQ19PUFRfUE9TVERBVEVEOwotICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIkJhZCBwb3N0ZGF0ZSBzdGFydCB0 aW1lIHZhbHVlICVzXHJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbml0LT5wb3N0ZGF0 ZSk7Ci0gICAgICAgICAgICAgICAgZXJyZmxnKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICBvcHRpb25zIHw9IEtEQ19PUFRfUE9TVERBVEVEOwotICAgICAg ICB9Ci0gICAgfQotCi0gICAgZGVidWcoRjExMCwia3JiNV9pbml0IHNlYXJjaGluZyBmb3IgY2Nh Y2hlIixvcC0+Y2FjaGUsMCk7Ci0KLSAgICBjb2RlID0gazVfZ2V0X2NjYWNoZShrY29udGV4dCwm Y2NhY2hlLG9wLT5jYWNoZSk7Ci0gICAgaWYgKGNvZGUgIT0gMCkgewotICAgICAgICBjb21fZXJy KCJrcmI1X2tpbml0Iixjb2RlLCJ3aGlsZSBnZXR0aW5nIGRlZmF1bHQgY2NhY2hlIik7Ci0gICAg ICAgIGdvdG8gZXhpdF9rNV9pbml0OwotICAgIH0KLQotICAgIC8qIFRoaXMgaXMgb3VyIHJlYWxt IHVubGVzcyBpdCBpcyBjaGFuZ2VkICovCi0gICAgY2tzdHJuY3B5KHJlYWxtLGluaXQtPnJlYWxt ID8gaW5pdC0+cmVhbG0gOiBrcmI1X2RfcmVhbG0sIDI1Nik7Ci0KLSNpZmRlZiBCRVRBVEVTVAot ICAgIC8qIFRoaXMgY29kZSBpcyBnb2luZyB0byB0YWtlIHRoZSByZWFsbSBhbmQgYXR0ZW1wdCB0 byBjb3JyZWN0ICovCi0gICAgLyogdGhlIGNhc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICB7Ci0gICAgICAgIHByb2ZpbGVfdCBwcm9m aWxlOwotCi0gICAgICAgIGNvZGUgPSBrcmI1X2dldF9wcm9maWxlKGtjb250ZXh0LCAmcHJvZmls ZSk7Ci0gICAgICAgIGlmICggIWNvZGUgKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICAqbmFt ZXNbNF07Ci0gICAgICAgICAgICBjaGFyICoqIHJlYWxtczsKLSAgICAgICAgICAgIGludCBmb3Vu ZCA9IDA7Ci0KLSAgICAgICAgICAgIG5hbWVzWzBdID0gInJlYWxtcyI7Ci0gICAgICAgICAgICBu YW1lc1sxXSA9IE5VTEw7Ci0KLSAgICAgICAgICAgIGNvZGUgPSBwcm9maWxlX2dldF9zdWJzZWN0 aW9uX25hbWVzKHByb2ZpbGUsbmFtZXMsJnJlYWxtcyk7Ci0gICAgICAgICAgICBpZiAoIGNvZGUg PT0gMCApIHsKLSAgICAgICAgICAgICAgICBpbnQgaT0wOwotICAgICAgICAgICAgICAgIHdoaWxl ICggcmVhbG1zW2ldICkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2tzdHJjbXAocmVhbG0s cmVhbG1zW2ldLC0xLDApID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweShy ZWFsbSxyZWFsbXNbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAxOwotICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot I2lmZGVmIENLX0ROU19TUlYKLSAgICAgICAgICAgIGlmICggIWZvdW5kICkgewotICAgICAgICAg ICAgICAgIGNoYXIgKiBkbnNfcmVhbG0gPSBOVUxMOwotCi0gICAgICAgICAgICAgICAgLyogV2Ug ZGlkIG5vdCBmaW5kIHRoZSByZWFsbSBpbiB0aGUgcHJvZmlsZSBzbyBsZXQncyB0cnkgRE5TICov Ci0gICAgICAgICAgICAgICAgbG9jYXRlX3R4dF9ycigiX2tlcmJlcm9zIixyZWFsbSwmZG5zX3Jl YWxtKTsKLSAgICAgICAgICAgICAgICBpZiAoIGRuc19yZWFsbSAmJgotICAgICAgICAgICAgICAg ICAgICAgY2tzdHJjbXAocmVhbG0sZG5zX3JlYWxtLC0xLDApID09IDAgJiYKLSAgICAgICAgICAg ICAgICAgICAgIGNrc3RyY21wKHJlYWxtLGRuc19yZWFsbSwtMSwxKSAhPSAwCi0gICAgICAgICAg ICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHJlYWxtLGRuc19y ZWFsbSwyNTYpOwotICAgICAgICAgICAgICAgICAgICBmcmVlKGRuc19yZWFsbSk7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX0ROU19TUlYgKi8KLSAgICAg ICAgfQotCi0gICAgICAgIGlmIChpbml0LT5yZWFsbSAmJgotICAgICAgICAgICAgIGNrc3RyY21w KHJlYWxtLGluaXQtPnJlYWxtLC0xLDApID09IDAgJiYKLSAgICAgICAgICAgICBja3N0cmNtcChy ZWFsbSxpbml0LT5yZWFsbSwtMSwxKSAhPSAwKQotICAgICAgICAgICAgc3RyY3B5KGluaXQtPnJl YWxtLHJlYWxtKTsKLSAgICAgICAgaWYgKGNrc3RyY21wKHJlYWxtLGtyYjVfZF9yZWFsbSwtMSww KSA9PSAwICYmCi0gICAgICAgICAgICAgY2tzdHJjbXAocmVhbG0sa3JiNV9kX3JlYWxtLC0xLDEp ICE9IDApCi0gICAgICAgICAgICBzdHJjcHkoa3JiNV9kX3JlYWxtLHJlYWxtKTsKLSAgICB9Ci0j ZW5kaWYgLyogQkVUQVRFU1QgKi8KLQotICAgIGlmIChpbml0LT5wcmluY2lwYWwgPT0gTlVMTCkg eyAgICAgICAvKiBObyBwcmluY2lwYWwgbmFtZSBzcGVjaWZpZWQgKi8KLSNpZm5kZWYgTk9fS0VZ VEFCCi0gICAgICAgIGlmICh1c2Vfa2V5dGFiKSB7Ci0gICAgICAgICAgICAvKiBVc2UgdGhlIGRl ZmF1bHQgaG9zdC9zZXJ2aWNlIG5hbWUgKi8KLSAgICAgICAgICAgIGNvZGUgPSBrcmI1X3NuYW1l X3RvX3ByaW5jaXBhbChrY29udGV4dCwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9OVF9TUlZfSFNULCAmbWUpOwotICAgICAgICAg ICAgaWYgKGNvZGUgPT0gMCAmJgotICAgICAgICAgICAgICAgIGtyYjVfcHJpbmNfcmVhbG0oa2Nv bnRleHQsIG1lKS0+bGVuZ3RoIDwgc2l6ZW9mKHJlYWxtKSkKLSAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICAvKiBTYXZlIHRoZSByZWFsbSAqLwotICAgICAgICAgICAgICAgIG1lbWNweShy ZWFsbSxrcmI1X3ByaW5jX3JlYWxtKGtjb250ZXh0LCBtZSktPmRhdGEsCi0gICAgICAgICAgICAg ICAgICAgICAgICBrcmI1X3ByaW5jX3JlYWxtKGtjb250ZXh0LCBtZSktPmxlbmd0aCk7IC8qIHNh ZmUgKi8KLSAgICAgICAgICAgICAgICByZWFsbVtrcmI1X3ByaW5jX3JlYWxtKGtjb250ZXh0LCBt ZSktPmxlbmd0aF09J1wwJzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg Y29tX2Vycigia3JiNV9raW5pdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlLAotICAg ICAgICAgICAgICAgICAgICAgICAgIndoZW4gY3JlYXRpbmcgZGVmYXVsdCBzZXJ2ZXIgcHJpbmNp cGFsIG5hbWUiKTsKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogTk9fS0VZVEFCICovCi0gICAgICAgIHsK LSAgICAgICAgICAgIGludCBsZW47Ci0gICAgICAgICAgICBjaGFyICogbmFtZTsKLQotICAgICAg ICAgICAgLyogR2V0IGRlZmF1bHQgcHJpbmNpcGFsIGZyb20gY2FjaGUgaWYgb25lIGV4aXN0cyAq LwotICAgICAgICAgICAgY29kZSA9IGtyYjVfY2NfZ2V0X3ByaW5jaXBhbChrY29udGV4dCwgY2Nh Y2hlLCAmbWUpOwotI2lmZGVmIEhFSU1EQUwKLSAgICAgICAgICAgIG5hbWUgPSBtZS0+cmVhbG07 Ci0gICAgICAgICAgICBsZW4gPSBzdHJsZW4obmFtZSk7Ci0jZWxzZSAvKiBIRUlNREFMICovCi0g ICAgICAgICAgICBsZW4gPSBrcmI1X3ByaW5jX3JlYWxtKGtjb250ZXh0LCBtZSktPmxlbmd0aDsK LSAgICAgICAgICAgIG5hbWUgPSBrcmI1X3ByaW5jX3JlYWxtKGtjb250ZXh0LCBtZSktPmRhdGE7 Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgaWYgKGNvZGUgPT0gMCAmJiBsZW4g PCBzaXplb2YocmVhbG0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIFNhdmUg dGhlIHJlYWxtICovCi0gICAgICAgICAgICAgICAgbWVtY3B5KHJlYWxtLG5hbWUsbGVuKTsgLyog c2FmZSAqLwotICAgICAgICAgICAgICAgIHJlYWxtW2xlbl09J1wwJzsKLSAgICAgICAgICAgIH0g ZWxzZSB7Ci0jaWZkZWYgSEFWRV9QV0RfSAotICAgICAgICAgICAgICAgIC8qIEVsc2Ugc2VhcmNo IHBhc3N3ZCBmaWxlIGZvciBjbGllbnQgKi8KLQotICAgICAgICAgICAgICAgIHB3ID0gZ2V0cHd1 aWQoKGludCkgZ2V0dWlkKCkpOwotICAgICAgICAgICAgICAgIGlmIChwdykgewotICAgICAgICAg ICAgICAgICAgICBjaGFyIHByaW5jX3JlYWxtWzI1Nl07Ci0gICAgICAgICAgICAgICAgICAgIGlm ICggKHN0cmxlbihwdy0+cHdfbmFtZSkgKyBzdHJsZW4ocmVhbG0pICsgMSkgPiAyNTUgKQotICAg ICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7Ci0KLSAgICAgICAgICAgICAg ICAgICAgY2tzdHJuY3B5KHByaW5jaXBhbCxwdy0+cHdfbmFtZSwyNTYpOwotICAgICAgICAgICAg ICAgICAgICBja3N0cm5jcHkocHJpbmNfcmVhbG0scHctPnB3X25hbWUsMjU2KTsKLSAgICAgICAg ICAgICAgICAgICAgY2tzdHJuY2F0KHByaW5jX3JlYWxtLCJAIiwyNTYpOwotICAgICAgICAgICAg ICAgICAgICBja3N0cm5jYXQocHJpbmNfcmVhbG0scmVhbG0sMjU2KTsKLQotICAgICAgICAgICAg ICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X3BhcnNlX25hbWUoa2NvbnRleHQscHJpbmNfcmVhbG0s Jm1lKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOwotICAg ICAgICAgICAgICAgICAgICAgICAgY29tX2Vycigia3JiNV9raW5pdCIsY29kZSwid2hlbiBwYXJz aW5nIG5hbWUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW5jX3JlYWxt KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKAotICAgICAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBpZGVudGlmeSB1 c2VyIGZyb20gcGFzc3dvcmQgZmlsZVxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBl eGl0X2s1X2luaXQ7Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UgLyogSEFWRV9QV0RfSCAqLwot ICAgICAgICAgICAgICAgIHByaW50ZigiVW5hYmxlIHRvIGlkZW50aWZ5IHVzZXJcclxuIik7Ci0g ICAgICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7Ci0jZW5kaWYgLyogSEFWRV9QV0RfSCAq LwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSNpZmRlZiBIRUlNREFMCi0gICAgICAgIGxl biA9IG1lLT5uYW1lLm5hbWVfc3RyaW5nLmxlbjsKLSAgICAgICAgbmFtZSA9ICptZS0+bmFtZS5u YW1lX3N0cmluZy52YWw7Ci0jZWxzZSAvKiBIRUlNREFMICovCi0gICAgICAgIGxlbiA9IGtyYjVf cHJpbmNfbmFtZShrY29udGV4dCwgbWUpLT5sZW5ndGg7Ci0gICAgICAgIG5hbWUgPSBrcmI1X3By aW5jX25hbWUoa2NvbnRleHQsIG1lKS0+ZGF0YTsKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAg ICAgIGlmICggbGVuIDwgc2l6ZW9mKHByaW5jaXBhbCkgKSB7Ci0gICAgICAgICAgICBtZW1jcHko cHJpbmNpcGFsLG5hbWUsbGVuKTsgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgIHByaW5jaXBh bFtsZW5dPSdcMCc7Ci0gICAgICAgIH0KLSAgICB9IC8qIFVzZSBzcGVjaWZpZWQgbmFtZSAqLwot ICAgIGVsc2UgewotICAgICAgICBjaGFyIHByaW5jX3JlYWxtWzI1Nl07Ci0gICAgICAgIGlmICgg KHN0cmxlbihpbml0LT5wcmluY2lwYWwpICsKLSAgICAgICAgICAgICAgKGluaXQtPmluc3RhbmNl ID8gc3RybGVuKGluaXQtPmluc3RhbmNlKSsxIDogMCkgKwotICAgICAgICAgICAgICBzdHJsZW4o cmVhbG0pCi0gICAgICAgICAgICAgICsgMikgPiAyNTUgKQotICAgICAgICAgICAgIGdvdG8gZXhp dF9rNV9pbml0OwotCi0gICAgICAgIGNrc3RybmNweShwcmluY2lwYWwsaW5pdC0+cHJpbmNpcGFs LDI1Nik7Ci0gICAgICAgIGNrc3RybmNweShwcmluY19yZWFsbSxpbml0LT5wcmluY2lwYWwsMjU2 KTsKLSAgICAgICAgaWYgKGluaXQtPmluc3RhbmNlKSB7Ci0gICAgICAgICAgICBja3N0cm5jYXQo cHJpbmNfcmVhbG0sIi8iLDI1Nik7Ci0gICAgICAgICAgICBja3N0cm5jYXQocHJpbmNfcmVhbG0s aW5pdC0+aW5zdGFuY2UsMjU2KTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVhbG1bMF0pIHsK LSAgICAgICAgICBja3N0cm5jYXQocHJpbmNfcmVhbG0sIkAiLDI1Nik7Ci0gICAgICAgICAgY2tz dHJuY2F0KHByaW5jX3JlYWxtLHJlYWxtLDI1Nik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChj b2RlID0ga3JiNV9wYXJzZV9uYW1lIChrY29udGV4dCwgcHJpbmNfcmVhbG0sICZtZSkpKSB7Ci0g ICAgICAgICAgICBjb21fZXJyKCJrcmI1X2tpbml0Iixjb2RlLCJ3aGVuIHBhcnNpbmcgbmFtZSIs cHJpbmNfcmVhbG0pOwotICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7Ci0gICAgICAgIH0K LSAgICB9Ci0KLSAgICBpZiAoKGNvZGUgPSBrcmI1X3VucGFyc2VfbmFtZShrY29udGV4dCwgbWUs ICZjbGllbnRfbmFtZSkpKSB7Ci0gICAgICAgIGNvbV9lcnIoImtyYjVfa2luaXQiLGNvZGUsIndo ZW4gdW5wYXJzaW5nIG5hbWUiKTsKLSAgICAgICAgZ290byBleGl0X2s1X2luaXQ7Ci0gICAgfQot ICAgIGRlYnVnKEYxMTAsImtyYjVfaW5pdCBjbGllbnRfbmFtZSIsY2xpZW50X25hbWUsMCk7Ci0K LQotICAgIG1lbXNldCgoY2hhciAqKSZteV9jcmVkcywgMCwgc2l6ZW9mKG15X2NyZWRzKSk7Ci0g ICAgbXlfY3JlZHMuY2xpZW50ID0gbWU7Ci0KLSAgICBpZiAoaW5pdC0+c2VydmljZSA9PSBOVUxM KSB7Ci0gICAgICAgIGlmICgoY29kZSA9Ci0gICAgICAgICAgICAga3JiNV9idWlsZF9wcmluY2lw YWxfZXh0KGtjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm c2VydmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4ocmVh bG0pLHJlYWxtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Z3RuYW1l Lmxlbmd0aCwgdGd0bmFtZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJsZW4ocmVhbG0pLHJlYWxtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwKSkpIHsKLSAgICAgICAgICAgIGNvbV9lcnIoImtyYjVfa2luaXQiLGNvZGUsIndo aWxlIGJ1aWxkaW5nIHNlcnZlciBuYW1lIik7Ci0gICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5p dDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChjb2RlID0ga3JiNV9wYXJz ZV9uYW1lKGtjb250ZXh0LCBpbml0LT5zZXJ2aWNlLCAmc2VydmVyKSkgewotICAgICAgICAgICAg Y29tX2Vycigia3JiNV9raW5pdCIsY29kZSwid2hpbGUgcGFyc2luZyBzZXJ2aWNlIG5hbWUiLAot ICAgICAgICAgICAgICAgICAgICBpbml0LT5zZXJ2aWNlKTsKLSAgICAgICAgICAgIGdvdG8gZXhp dF9rNV9pbml0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbXlfY3JlZHMuc2VydmVyID0gc2Vy dmVyOwotCi0gICAgaWYgKG9wdGlvbnMgJiBLRENfT1BUX1BPU1REQVRFRCkgewotICAgICAgICBt eV9jcmVkcy50aW1lcy5zdGFydHRpbWUgPSBzdGFydHRpbWU7Ci0gICAgICAgIG15X2NyZWRzLnRp bWVzLmVuZHRpbWUgPSBzdGFydHRpbWUgKyBsaWZldGltZTsKLSAgICB9IGVsc2UgewotICAgICAg ICBteV9jcmVkcy50aW1lcy5zdGFydHRpbWUgPSAwOyAgIC8qIHN0YXJ0IHRpbWVyIHdoZW4gcmVx dWVzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHMgdG8g S0RDICovCi0gICAgICAgIG15X2NyZWRzLnRpbWVzLmVuZHRpbWUgPSBub3cgKyBsaWZldGltZTsK LSAgICB9Ci0gICAgaWYgKG9wdGlvbnMgJiBLRENfT1BUX1JFTkVXQUJMRSkgewotICAgICAgICBt eV9jcmVkcy50aW1lcy5yZW5ld190aWxsID0gbm93ICsgcmxpZmU7Ci0gICAgfSBlbHNlCi0gICAg ICAgIG15X2NyZWRzLnRpbWVzLnJlbmV3X3RpbGwgPSAwOwotCi0gICAgaWYgKG9wdGlvbnMgJiBL RENfT1BUX1ZBTElEQVRFKSB7Ci0gICAgICAgIGtyYjVfZGF0YSBvdXRidWY7Ci0KLSNpZmRlZiBL UkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMKLSAgICAgICAgY29kZSA9IGtyYjVfZ2V0X3ZhbGlkYXRl ZF9jcmVkcyhrY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmbXlfY3JlZHMsIG1lLCBjY2FjaGUsIGluaXQtPnNlcnZpY2UpOwotICAgICAgICBpZiAoIGNv ZGUgPT0gLTEgKQotI2VuZGlmCi0gICAgICAgIHsKLSNpZmRlZiBIRUlNREFMCi0gICAgICAgICAg ICBwcmludGYoIj92YWxpZGF0ZSBub3QgaW1wbGVtZW50ZWRcclxuIik7Ci0gICAgICAgICAgICBj b2RlID0gLTE7Ci0gICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKLSNlbHNlIC8qIEhFSU1E QUwgKi8KLSAgICAgICAgICAgIGNvZGUgPSBrcmI1X3ZhbGlkYXRlX3RndChrY29udGV4dCwgY2Nh Y2hlLCBzZXJ2ZXIsICZvdXRidWYpOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgfQot ICAgICAgICBpZiAoY29kZSkgewotICAgICAgICAgICAgY29tX2Vycigia3JiNV9raW5pdCIsY29k ZSwidmFsaWRhdGluZyB0Z3QiKTsKLSAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OwotICAg ICAgICB9Ci0gICAgICAgIC8qIHNob3VsZCBiZSBkb25lLi4uICovCi0gICAgICAgIGdvdG8gZXhp dF9rNV9pbml0OwotICAgIH0KLQotICAgIGlmIChvcHRpb25zICYgS0RDX09QVF9SRU5FVykgewot ICAgICAgICBrcmI1X2RhdGEgb3V0YnVmOwotCi0jaWZkZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NS RURTCi0gICAgICAgIGNvZGUgPSBrcmI1X2dldF9yZW5ld2VkX2NyZWRzKGtjb250ZXh0LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXlfY3JlZHMsIG1lLCBjY2FjaGUs IGluaXQtPnNlcnZpY2UpOwotICAgICAgICBpZiAoIGNvZGUgPT0gLTEgKQotI2VuZGlmCi0gICAg ICAgIHsKLSNpZmRlZiBIRUlNREFMCi0gICAgICAgICAgICBwcmludGYoIj9yZW5ldyBub3QgaW1w bGVtZW50ZWRcclxuIik7Ci0gICAgICAgICAgICBjb2RlID0gLTE7Ci0gICAgICAgICAgICBnb3Rv IGV4aXRfazVfaW5pdDsKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgIGNvZGUgPSBr cmI1X3JlbmV3X3RndChrY29udGV4dCwgY2NhY2hlLCBzZXJ2ZXIsICZvdXRidWYpOwotI2VuZGlm IC8qIEhFSU1EQUwgKi8KLSAgICAgICAgfQotICAgICAgICBpZiAoY29kZSkgewotICAgICAgICAg ICAgY29tX2Vycigia3JiNV9raW5pdCIsY29kZSwid2hpbGUgcmVuZXdpbmcgdGd0Iik7Ci0gICAg ICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKLSAgICAgICAgfQotICAgICAgICAvKiBzaG91bGQg YmUgZG9uZS4uLiAqLwotICAgICAgICBnb3RvIHN0b3JlX2NyZWQ7Ci0gICAgfQotCi0jaWZuZGVm IEhFSU1EQUwKLSAgICBpZiAoIGluaXQtPmFkZHJzICYmICFpbml0LT5ub19hZGRyZXNzZXMgKSB7 Ci0gICAgICAgIC8qIGNvbnN0cnVjdCBhbiBhcnJheSBvZiBrcmI1X2FkZHJlc3Mgc3RydWN0cyB0 byBwYXNzIHRvIGdldF9pbl90a3QgKi8KLSAgICAgICAgLyogaW5jbHVkZSBib3RoIHRoZSBsb2Nh bCBpcCBhZGRyZXNzZXMgYXMgd2VsbCBhcyBhbnkgb3RoZXIgdGhhdCAgICAqLwotICAgICAgICAv KiBhcmUgc3BlY2lmaWVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgaXBhZGRyOwotCi0gICAgICAgIGZv ciAoIGFkZHJfY291bnQ9MDthZGRyX2NvdW50PEtSQjVfTlVNX09GX0FERFJTO2FkZHJfY291bnQr KyApCi0gICAgICAgICAgICBpZiAoIGluaXQtPmFkZHJzW2FkZHJfY291bnRdID09IE5VTEwgKQot ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChhZGRyX2NvdW50ID4gMCkgewot ICAgICAgICAgICAga3JiNV9hZGRyZXNzICoqIGxvY2FsX2FkZHJzPU5VTEw7Ci0gICAgICAgICAg ICBrcmI1X29zX2xvY2FsYWRkcihrY29udGV4dCwgJmxvY2FsX2FkZHJzKTsKLSAgICAgICAgICAg IGkgPSAwOwotICAgICAgICAgICAgd2hpbGUgKCBsb2NhbF9hZGRyc1tpXSApCi0gICAgICAgICAg ICAgICAgaSsrOwotICAgICAgICAgICAgYWRkcl9jb3VudCArPSBpOwotCi0gICAgICAgICAgICBh ZGRycyA9IChrcmI1X2FkZHJlc3MgKiopCi0gICAgICAgICAgICAgIG1hbGxvYygoYWRkcl9jb3Vu dCsxKSAqIHNpemVvZihrcmI1X2FkZHJlc3MgKikpOwotICAgICAgICAgICAgaWYgKCAhYWRkcnMg KSB7Ci0gICAgICAgICAgICAgICAga3JiNV9mcmVlX2FkZHJlc3NlcyhrY29udGV4dCwgbG9jYWxf YWRkcnMpOwotICAgICAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OwotICAgICAgICAgICAg fQotICAgICAgICAgICAgbWVtc2V0KGFkZHJzLCAwLCBzaXplb2Yoa3JiNV9hZGRyZXNzICopICog KGFkZHJfY291bnQrMSkpOwotICAgICAgICAgICAgaSA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAo IGxvY2FsX2FkZHJzW2ldICkgewotICAgICAgICAgICAgICAgIGFkZHJzW2ldID0gKGtyYjVfYWRk cmVzcyAqKW1hbGxvYyhzaXplb2Yoa3JiNV9hZGRyZXNzKSk7Ci0gICAgICAgICAgICAgICAgaWYg KGFkZHJzW2ldID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAga3JiNV9mcmVlX2FkZHJl c3NlcyhrY29udGV4dCwgbG9jYWxfYWRkcnMpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGV4 aXRfazVfaW5pdDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBhZGRyc1tp XS0+bWFnaWMgPSBsb2NhbF9hZGRyc1tpXS0+bWFnaWM7Ci0gICAgICAgICAgICAgICAgYWRkcnNb aV0tPmFkZHJ0eXBlID0gbG9jYWxfYWRkcnNbaV0tPmFkZHJ0eXBlOwotICAgICAgICAgICAgICAg IGFkZHJzW2ldLT5sZW5ndGggPSBsb2NhbF9hZGRyc1tpXS0+bGVuZ3RoOwotICAgICAgICAgICAg ICAgIGFkZHJzW2ldLT5jb250ZW50cyA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKGFkZHJzW2ld LT5sZW5ndGgpOwotICAgICAgICAgICAgICAgIGlmICghYWRkcnNbaV0tPmNvbnRlbnRzKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGtyYjVfZnJlZV9hZGRyZXNzZXMoa2NvbnRleHQsIGxvY2FsX2Fk ZHJzKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7Ci0gICAgICAgICAg ICAgICAgfQotCi0gICAgICAgICAgICAgICAgbWVtY3B5KGFkZHJzW2ldLT5jb250ZW50cyxsb2Nh bF9hZGRyc1tpXS0+Y29udGVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRy c1tpXS0+bGVuZ3RoKTsgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgICAgICBpKys7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBrcmI1X2ZyZWVfYWRkcmVzc2VzKGtjb250ZXh0LCBs b2NhbF9hZGRycyk7Ci0KLSAgICAgICAgICAgIGZvciAoIGo9MDtpPGFkZHJfY291bnQ7aSsrLGor KyApIHsKLSAgICAgICAgICAgICAgICBhZGRyc1tpXSA9IChrcmI1X2FkZHJlc3MgKiltYWxsb2Mo c2l6ZW9mKGtyYjVfYWRkcmVzcykpOwotICAgICAgICAgICAgICAgIGlmIChhZGRyc1tpXSA9PSBO VUxMKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKLQotICAgICAgICAg ICAgICAgIGFkZHJzW2ldLT5tYWdpYyA9IEtWNU1fQUREUkVTUzsKLSAgICAgICAgICAgICAgICBh ZGRyc1tpXS0+YWRkcnR5cGUgPSBBRl9JTkVUOwotICAgICAgICAgICAgICAgIGFkZHJzW2ldLT5s ZW5ndGggPSA0OwotICAgICAgICAgICAgICAgIGFkZHJzW2ldLT5jb250ZW50cyA9ICh1bnNpZ25l ZCBjaGFyICopbWFsbG9jKGFkZHJzW2ldLT5sZW5ndGgpOwotICAgICAgICAgICAgICAgIGlmICgh YWRkcnNbaV0tPmNvbnRlbnRzKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5p dDsKLQotICAgICAgICAgICAgICAgIGlwYWRkciA9IGluZXRfYWRkcihpbml0LT5hZGRyc1tqXSk7 Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGFkZHJzW2ldLT5jb250ZW50cywmaXBhZGRyLDQpOyAg IC8qIHNhZmUgKi8KLSAgICAgICAgICAgIH0KLSNpZmRlZiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JF RFMKLSAgICAgICAgICAgIGtyYjVfZ2V0X2luaXRfY3JlZHNfb3B0X3NldF9hZGRyZXNzX2xpc3Qo Jm9wdHMsYWRkcnMpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgfQotI2VuZGlmIC8qICFIRUlN REFMICovCi0jaWZkZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTCi0gICAgaWYgKCBpbml0LT5u b19hZGRyZXNzZXMgKQotICAgICAgICBrcmI1X2dldF9pbml0X2NyZWRzX29wdF9zZXRfYWRkcmVz c19saXN0KCZvcHRzLE5VTEwpOwotI2VuZGlmCi0KLSNpZm5kZWYgTk9fS0VZVEFCCi0gICAgaWYg KCF1c2Vfa2V5dGFiKQotI2VuZGlmCi0gICAgewotICAgICAgICBpZiAoIGluaXQtPnBhc3N3b3Jk ICkgewotICAgICAgICAgICAgcHdzaXplID0gc3RybGVuKGluaXQtPnBhc3N3b3JkKTsKLSAgICAg ICAgICAgIGlmICggcHdzaXplICkKLSAgICAgICAgICAgICAgICBwYXNzd29yZCA9IGluaXQtPnBh c3N3b3JkOwotICAgICAgICB9IGVsc2UgaWYgKGluaXQtPmdldGs0ICYmIGs0X2luaXQpIHsKLSAg ICAgICAgICAgIC8qIFdoZW4gd2UgYXJlIHJlcXVlc3RpbmcgdGhhdCBLNCB0aWNrZXRzIGJlIGF1 dG9tYXRpY2FsbHkgKi8KLSAgICAgICAgICAgIC8qIGFjcXVpcmVkIHdoZW4gSzUgdGlja2V0cyBh cmUgYWNxdWlyZWQsIHdlIG11c3QgZ2V0IHRoZSAgKi8KLSAgICAgICAgICAgIC8qIHBhc3N3b3Jk IHVwIGZyb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAg ICAgICAgIGNoYXIgcHJtcHRbMjU2XTsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyICogazVwcnBy b21wdDsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyICogazVwd3Byb21wdDsKLSAgICAgICAgICAg IGludCBvayA9IDA7Ci0KLSAgICAgICAgICAgIGlmICggazVwd3Byb21wdCAmJiBrNXB3cHJvbXB0 WzBdICYmCi0gICAgICAgICAgICAgICAgIChzdHJsZW4oazVwd3Byb21wdCkgKyBzdHJsZW4ocHJp bmNpcGFsKSArCi0gICAgICAgICAgICAgICAgICBzdHJsZW4ocmVhbG0pIC0gNCkgPCBzaXplb2Yo cHJtcHQpKSB7Ci0gICAgICAgICAgICAgICAgc3ByaW50Zihwcm1wdCxrNXB3cHJvbXB0LHByaW5j aXBhbCxyZWFsbSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBja21ha3ht c2cocHJtcHQsc2l6ZW9mKHBybXB0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGs1cHdw cm9tcHQgJiYgazVwd3Byb21wdFswXSA/IGs1cHdwcm9tcHQgOgotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIktlcmJlcm9zIDUgUGFzc3dvcmQgZm9yICIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBwcmluY2lwYWwsIkAiLHJlYWxtLCI6ICIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICApOwotICAgICAgICAgICAgb2sgPSB1cV90eHQoTlVMTCxwcm1wdCwyLE5VTEws cGFzc3dkLDgwLE5VTEwsREVGQVVMVF9VUV9USU1FT1VUKTsKLSAgICAgICAgICAgIGlmICggb2sg KQotICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gcGFzc3dkOwotCi0gICAgICAgICAgICBpZiAo IGs0X2luaXQtPnBhc3N3b3JkID09IE5VTEwgKQotICAgICAgICAgICAgICAgIG1ha2VzdHIoJms0 X2luaXQtPnBhc3N3b3JkLHBhc3N3ZCk7Ci0gICAgICAgIH0KLSNpZmRlZiBLUkI1X0hBVkVfR0VU X0lOSVRfQ1JFRFMKLSAgICAgICAgZGVidWcoRjEwMCwia3JiNV9pbml0IGNhbGxpbmcga3JiNV9n ZXRfaW5pdF9jcmVkc19wYXNzd29yZCgpIiwiIiwwKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgaWYg KCBpc19OUkxfS1JCNSgpICkKLSAgICAgICAgICAgIGNvZGUgPSBrcmI1X2dldF9pbml0X2NyZWRz X3Bhc3N3b3JkKGtjb250ZXh0LCAmbXlfY3JlZHMsIG1lLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopY2tfTlJMX2tyYjVfcHJvbXB0 ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFy dHRpbWUsIGluaXQtPnNlcnZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJm9wdHMpOwotICAgICAgICBlbHNlCi0jZW5kaWYgLyogT1MyICovCi0g ICAgICAgICAgICBjb2RlID0ga3JiNV9nZXRfaW5pdF9jcmVkc19wYXNzd29yZChrY29udGV4dCwg Jm15X2NyZWRzLCBtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwYXNzd29yZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBja19rcmI1X3Byb21wdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RhcnR0aW1lLCBpbml0LT5zZXJ2aWNlLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRzKTsKLSAgICAgICAg ZGVidWcoRjExMSwia3JiNV9pbml0Iiwia3JiNV9nZXRfaW5pdF9jcmVkc19wYXNzd29yZCgpIixj b2RlKTsKLQotICAgICAgICBpZiAoIGNvZGUgPT0gLTEgKQotICAgICAgICB7Ci0gICAgICAgICAg ICBpZiAoIXBhc3N3b3JkKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBwcm1wdFsyNTZdOwotICAg ICAgICAgICAgICAgIGludCBvazsKLQotICAgICAgICAgICAgICAgIGNrbWFrbXNnKHBybXB0LHNp emVvZihwcm1wdCksIktlcmJlcm9zIDUgUGFzc3dvcmQgZm9yICIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIGNsaWVudF9uYW1lLCI6ICIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgb2sgPSB1 cV90eHQoTlVMTCxwcm1wdCwyLE5VTEwscGFzc3dkLDgwLE5VTEwsCi0JCQkgICAgREVGQVVMVF9V UV9USU1FT1VUKTsKLSAgICAgICAgICAgICAgICBpZiAoIG9rICkKLSAgICAgICAgICAgICAgICAg ICAgcGFzc3dvcmQgPSBwYXNzd2Q7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg ICAgICAgICAgIGNvZGUgPSAtMjsKLSAgICAgICAgICAgICAgICAgICAgZ290byBleGl0X2s1X2lu aXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo ICFwYXNzd29yZCApIAotICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gIiI7Ci0gICAgICAgICAg ICBjb2RlID0ga3JiNV9nZXRfaW5fdGt0X3dpdGhfcGFzc3dvcmQoa2NvbnRleHQsIG9wdGlvbnMs Ci0jaWZkZWYgSEVJTURBTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLAotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0LT5ub19hZGRyZXNzZXMgPyBOVUxMIDphZGRy cywKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmbXlfY3JlZHMsIE5VTEwpOwotICAg ICAgICAgICAgaWYgKCBjb2RlICkKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJrcmI1X2lu aXQiLCJrcmI1X2dldF9pbl90a3Rfd2l0aF9wYXNzd29yZCgpIixjb2RlKTsKLSAgICAgICAgfQot I2Vsc2UgLyogS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTICovCi0gICAgICAgIGlmICghcGFzc3dv cmQpIHsKLSAgICAgICAgICAgIGNoYXIgcHJtcHRbMjU2XTsKLSAgICAgICAgICAgIGludCBvazsK LQotICAgICAgICAgICAgY2ttYWttc2cocHJtcHQsc2l6ZW9mKHBybXB0KSwiS2VyYmVyb3MgNSBQ YXNzd29yZCBmb3IgIiwKLSAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfbmFtZSwiOiAiLE5V TEwpOwotICAgICAgICAgICAgb2sgPSB1cV90eHQoTlVMTCxwcm1wdCwyLE5VTEwscGFzc3dkLDgw LE5VTEwsREVGQVVMVF9VUV9USU1FT1VUKTsKLSAgICAgICAgICAgIGlmICggb2sgKQotICAgICAg ICAgICAgICAgIHBhc3N3b3JkID0gcGFzc3dkOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg ICAgICAgICAgY29kZSA9IC0yOwotICAgICAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0Owot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICggIXBhc3N3b3JkICkgCi0gICAg ICAgICAgICBwYXNzd29yZCA9ICIiOwotICAgICAgICBjb2RlID0ga3JiNV9nZXRfaW5fdGt0X3dp dGhfcGFzc3dvcmQoa2NvbnRleHQsIG9wdGlvbnMsCi0jaWZkZWYgSEVJTURBTAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0jZWxzZSAvKiBIRUlN REFMICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXQt Pm5vX2FkZHJlc3NlcyA/IE5VTEwgOmFkZHJzLAotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZteV9jcmVk cywgTlVMTCk7Ci0gICAgICAgIGlmICggY29kZSApCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJr cmI1X2luaXQiLCJrcmI1X2dldF9pbl90a3Rfd2l0aF9wYXNzd29yZCgpIixjb2RlKTsKLSNlbmRp ZiAvKiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMgKi8KLQotICAgICAgICBpZiAoIGluaXQtPnBh c3N3b3JkICYmIHB3c2l6ZSA+IDAgKQotICAgICAgICAgICAgbWVtc2V0KGluaXQtPnBhc3N3b3Jk LCAwLCBwd3NpemUpOwotICAgICAgICBtZW1zZXQocGFzc3dkLDAsODApOwotICAgIH0KLSNpZm5k ZWYgTk9fS0VZVEFCCi0gICAgZWxzZSB7Ci0jaWZkZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NSRURT Ci0gICAgICAgIGNvZGUgPSBrcmI1X2dldF9pbml0X2NyZWRzX2tleXRhYihrY29udGV4dCwgJm15 X2NyZWRzLCBtZSwga2V5dGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0YXJ0dGltZSwgaW5pdC0+c2VydmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmb3B0cyk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIGlmICggY29k ZSA9PSAtMSkKLSAgICAgICAgICAgIGNvZGUgPSBrcmI1X2dldF9pbl90a3Rfd2l0aF9rZXl0YWIo a2NvbnRleHQsIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5pdC0+bm9fYWRkcmVzc2VzID8gTlVMTCA6YWRkcnMsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBrZXl0YWIsIE5VTEws Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXlfY3Jl ZHMsIDApOwotI2VuZGlmIC8qIE9TMiAqLwotI2Vsc2UgLyogS1JCNV9IQVZFX0dFVF9JTklUX0NS RURTICovCi0gICAgICAgIGNvZGUgPSBrcmI1X2dldF9pbl90a3Rfd2l0aF9rZXl0YWIoa2NvbnRl eHQsIG9wdGlvbnMsCi0jaWZkZWYgSEVJTURBTAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0LT5ub19hZGRyZXNzZXMg PyBOVUxMIDphZGRycywKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIGtleXRhYiwgTlVMTCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm15X2NyZWRzLCAwKTsKLSNl bmRpZiAvKiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMgKi8KLSAgICB9Ci0jZW5kaWYKLQotICAg IGlmIChjb2RlKSB7Ci0gICAgICAgIHN3aXRjaCAoY29kZSkgewotICAgICAgICBjYXNlIEtSQjVL UkJfQVBfRVJSX0JBRF9JTlRFR1JJVFk6Ci0gICAgICAgICAgICBwcmludGYoIlBhc3N3b3JkIGlu Y29ycmVjdFxyXG4iKTsKLSAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OwotICAgICAgICBj YXNlIEtSQjVLUkJfQVBfRVJSX1Y0X1JFUExZOgotICAgICAgICAgICAgaWYgKGluaXQtPmdldGs0 ICYmIGs0X2luaXQpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIktlcmJlcm9zIDUgVGlja2V0 cyBub3Qgc3VwcG9ydCBieSBzZXJ2ZXIuICAiKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIkEg dmVyc2lvbiA0IFRpY2tldCB3aWxsIGJlIHJlcXVlc3RlZC5cclxuIik7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg ICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OwotICAgICAgICB9Ci0gICAgfQotCi0gIHN0b3JlX2Ny ZWQ6Ci0gICAgZGVidWcoRjEwMCwia3JiNV9pbml0IGNhbGxpbmcga3JiNV9jY19pbml0aWFsaXpl KCkiLCIiLDApOwotCi0gICAgY29kZSA9IGtyYjVfY2NfaW5pdGlhbGl6ZSAoa2NvbnRleHQsIGNj YWNoZSwgbWUpOwotICAgIGlmICggY29kZSA9PSBLUkI1X0NDX0JBRE5BTUUgKSB7Ci0gICAgICAg IC8qIFRoaXMgaXMgYSByZWFsbHkgdWdseSBoYWNrIHRoYXQgc2hvdWxkIG5vdCBoYXZlIHRvIGJl IGhlcmUuCi0gICAgICAgICAqIGtyYjVfY2NfaW5pdGlhbGl6ZSBzaG91bGQgbm90IGZhaWwgd2l0 aCBhbiBlcnJvciBpZiB0aGUKLSAgICAgICAgICogY2FjaGUgYWxyZWFkeSBleGlzdHMuICBUaGUg cmVhc29uIHRoZSBwcm9ibGVtIGlzIG9jY3VyaW5nCi0gICAgICAgICAqIGlzIHRoYXQgdGhlIGty YjUgbGlicmFyeSBpcyBubyBsb25nZXIgY2FsbGluZyBjY19kZXN0cm95KCkKLSAgICAgICAgICog d2hlbiBjY19pbml0aWFsaXplKCkgaXMgY2FsbGVkIGFuZCB0aGUgQ0NBUEkgaW1wbGVtZW50YXRp b24KLSAgICAgICAgICogb24gV2luZG93cyBoYXMgbm90IHlldCBiZWVuIGNvcnJlY3RlZCB0byBo YW5kbGUgaXQuICBUbwotICAgICAgICAgKiBlbnN1cmUgdGhhdCBLOTUgd2lsbCBjb250aW51ZSB0 byB3b3JrIHdpdGggYm90aCB3ZSB3aWxsIGNhbGwKLSAgICAgICAgICogY2NfZGVzdHJveSgpIGlm IHRoZSBjY19pbml0aWFsaXplKCkgY2FsbCBmYWlscyB3aXRoIGEgQkFETkFNRQotICAgICAgICAg KiBlcnJvci4gIElmIHRoZSBjY19kZXN0cm95KCkgaXMgc3VjY2Vzc2Z1bCwgd2Ugd2lsbCB0cnkg YWdhaW4uCi0gICAgICAgICAqLwotCi0gICAgICAgIGRlYnVnKEYxMDAsImtyYjVfaW5pdCBjYWxs aW5nIGtyYjVfY2NfZGVzdHJveSgpIiwiIiwwKTsKLSAgICAgICAgY29kZSA9IGtyYjVfY2NfZGVz dHJveSAoa2NvbnRleHQsIGNjYWNoZSk7Ci0gICAgICAgIGlmICggIWNvZGUgKSB7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJrcmI1X2luaXQgY2FsbGluZyBrNV9nZXRfY2NhY2hlKCkiLCIiLDAp OwotICAgICAgICAgICAgY29kZSA9IGs1X2dldF9jY2FjaGUoa2NvbnRleHQsJmNjYWNoZSxvcC0+ Y2FjaGUpOwotICAgICAgICAgICAgZGVidWcoRjEwMCwia3JiNV9pbml0IGNhbGxpbmcga3JiNV9j Y19pbml0aWFsaXplKCkiLCIiLDApOwotICAgICAgICAgICAgY29kZSA9IGtyYjVfY2NfaW5pdGlh bGl6ZSAoa2NvbnRleHQsIGNjYWNoZSwgbWUpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg IGNvZGUgPSBLUkI1X0NDX0JBRE5BTUU7Ci0gICAgfQotICAgIGlmIChjb2RlKSB7Ci0gICAgICAg IGNvbV9lcnIoImtyYjVfa2luaXQiLGNvZGUsIndoZW4gaW5pdGlhbGl6aW5nIGNhY2hlIixvcC0+ Y2FjaGUpOwotICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKLSAgICB9Ci0KLSAgICBkZWJ1ZyhG MTAwLCJrcmI1X2luaXQgY2FsbGluZyBrcmI1X2NjX3N0b3JlX2NyZWQoKSIsIiIsMCk7Ci0gICAg Y29kZSA9IGtyYjVfY2Nfc3RvcmVfY3JlZChrY29udGV4dCwgY2NhY2hlLCAmbXlfY3JlZHMpOwot ICAgIGlmIChjb2RlKSB7Ci0gICAgICAgIGNvbV9lcnIoImtyYjVfa2luaXQiLGNvZGUsIndoaWxl IHN0b3JpbmcgY3JlZGVudGlhbHMiKTsKLSAgICAgICAgZ290byBleGl0X2s1X2luaXQ7Ci0gICAg fQotCi0gICAgaWYgKCBpbml0LT5nZXRrNCAmJiAKLSNpZmRlZiBLUkI1MjRfQ09OVgotICAgICAg ICAgIXRyeV9jb252ZXJ0NTI0KGtjb250ZXh0LG1lLGNjYWNoZSkgJiYgCi0jZW5kaWYgLyogS1JC NTI0X0NPTlYgKi8KLSAgICAgICAgIGs0X2luaXQgKSB7Ci0gICAgICAgIGludCBrNHJjID0gY2tf a3JiNF9pbml0VEdUKG9wLGs0X2luaXQpOwotICAgICAgICBpZiAoazRyYyA8IDApCi0gICAgICAg ICAgICBjb2RlID0gLTM7Ci0gICAgfQotCi1leGl0X2s1X2luaXQ6Ci0gICAgZGVidWcoRjEwMCwi a3JiNV9pbml0IGV4aXRfazVfaW5pdCIsIiIsMCk7Ci0KLSNpZm5kZWYgSEVJTURBTAotICAgIC8q IEZyZWUga3JiNV9hZGRyZXNzIHN0cnVjdHVyZXMgaWYgd2UgY3JlYXRlZCB0aGVtICovCi0gICAg aWYgKCBhZGRycyApIHsKLSAgICAgICAgZm9yICggaT0wO2k8YWRkcl9jb3VudDtpKysgKSB7Ci0g ICAgICAgICAgICBpZiAoIGFkZHJzW2ldICkgewotICAgICAgICAgICAgICAgIGlmICggYWRkcnNb aV0tPmNvbnRlbnRzICkKLSAgICAgICAgICAgICAgICAgICAgZnJlZShhZGRyc1tpXS0+Y29udGVu dHMpOwotICAgICAgICAgICAgICAgIGZyZWUoYWRkcnNbaV0pOwotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLQotCi0gICAga3JiNV9lcnJubyA9 IGNvZGU7Ci0gICAgbWFrZXN0cigma3JiNV9lcnJtc2csa3JiNV9lcnJubyA/IGVycm9yX21lc3Nh Z2Uoa3JiNV9lcnJubykgOiAiT0siKTsKLQotICAgIGlmIChjbGllbnRfbmFtZSkKLSAgICAgICAg a3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsIGNsaWVudF9uYW1lKTsKLQotICAgIC8q IG15X2NyZWRzIGlzIHBvaW50aW5nIGF0IHNlcnZlciAqLwotICAgIGRlYnVnKEYxMDAsImtyYjVf aW5pdCBjYWxsaW5nIGtyYjVfZnJlZV9wcmluY2lwYWwoKSIsIiIsMCk7Ci0gICAga3JiNV9mcmVl X3ByaW5jaXBhbChrY29udGV4dCwgc2VydmVyKTsKLSAgICBkZWJ1ZyhGMTAwLCJrcmI1X2luaXQg Y2FsbGluZyBrcmI1X2NjX2Nsb3NlKCkiLCIiLDApOwotICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRl eHQsY2NhY2hlKTsKLSAgICBkZWJ1ZyhGMTAwLCJrcmI1X2luaXQgY2FsbGluZyBrcmI1X2ZyZWVf Y29udGV4dCgpIiwiIiwwKTsKLSAgICBrcmI1X2ZyZWVfY29udGV4dChrY29udGV4dCk7Ci0KLSAg ICBpZiAoY29kZSAhPSAtMikKLSAgICAgICAgcHJpbnRmKCJSZXN1bHQgZnJvbSByZWFsbSAlczog JXNcclxuIixyZWFsbSwKLSAgICAgICAgICAgICAgICBjb2RlPT0tMz8iVW5hYmxlIHRvIHJldHJp ZXZlIEtlcmJlcm9zIElWIGNyZWRlbnRpYWxzIjoKLSAgICAgICAgICAgICAgICBjb2RlP2Vycm9y X21lc3NhZ2UoY29kZSk6Ik9LIik7Ci0gICAgcmV0dXJuKGNvZGU/LTE6MCk7Ci19Ci0KLSNpZm5k ZWYgSEVJTURBTAotI2RlZmluZSBWQUxJREFURSAwCi0jZGVmaW5lIFJFTkVXIDEKLQotLyogc3Ry aXBwZWQgZG93biB2ZXJzaW9uIG9mIGtyYjVfbWtfcmVxICovCi1zdGF0aWMga3JiNV9lcnJvcl9j b2RlCi0jaWZkZWYgQ0tfQU5TSUMKLWtyYjVfdmFsaWRhdGVfdGd0KCBrcmI1X2NvbnRleHQgY29u dGV4dCwKLSAgICAgICAgICAgICAgICAgICBrcmI1X2NjYWNoZSBjY2FjaGUsCi0gICAgICAgICAg ICAgICAgICAga3JiNV9wcmluY2lwYWwgICAgIHNlcnZlciwgLyogdGd0bmFtZSAqLwotICAgICAg ICAgICAgICAgICAgIGtyYjVfZGF0YSAqb3V0YnVmICkKLSNlbHNlCi1rcmI1X3ZhbGlkYXRlX3Rn dChjb250ZXh0LCBjY2FjaGUsIHNlcnZlciwgb3V0YnVmKQotICAgICBrcmI1X2NvbnRleHQgY29u dGV4dDsKLSAgICAga3JiNV9jY2FjaGUgY2NhY2hlOwotICAgICBrcmI1X3ByaW5jaXBhbCAgICAg c2VydmVyOyAvKiB0Z3RuYW1lICovCi0gICAgIGtyYjVfZGF0YSAqb3V0YnVmOwotI2VuZGlmCi17 Ci0gICAgcmV0dXJuIGtyYjVfdGd0X2dlbihjb250ZXh0LCBjY2FjaGUsIHNlcnZlciwgb3V0YnVm LCBWQUxJREFURSk7Ci19Ci0KLS8qIHN0cmlwcGVkIGRvd24gdmVyc2lvbiBvZiBrcmI1X21rX3Jl cSAqLwotc3RhdGljIGtyYjVfZXJyb3JfY29kZQotI2lmZGVmIENLX0FOU0lDCi1rcmI1X3JlbmV3 X3RndChrcmI1X2NvbnRleHQgY29udGV4dCwKLSAgICAgICAgICAgICAgICBrcmI1X2NjYWNoZSBj Y2FjaGUsCi0gICAgICAgICAgICAgICAga3JiNV9wcmluY2lwYWwgICAgc2VydmVyLCAvKiB0Z3Ru YW1lICovCi0gICAgICAgICAgICAgICAga3JiNV9kYXRhICpvdXRidWYpCi0jZWxzZQota3JiNV9y ZW5ld190Z3QoY29udGV4dCwgY2NhY2hlLCBzZXJ2ZXIsIG91dGJ1ZikKLSAgICAga3JiNV9jb250 ZXh0IGNvbnRleHQ7Ci0gICAgIGtyYjVfY2NhY2hlIGNjYWNoZTsKLSAgICAga3JiNV9wcmluY2lw YWwgICAgICAgc2VydmVyOyAvKiB0Z3RuYW1lICovCi0gICAgIGtyYjVfZGF0YSAqb3V0YnVmOwot I2VuZGlmCi17Ci0gICAgcmV0dXJuIGtyYjVfdGd0X2dlbihjb250ZXh0LCBjY2FjaGUsIHNlcnZl ciwgb3V0YnVmLCBSRU5FVyk7Ci19Ci0KLQotLyogc3RyaXBwZWQgZG93biB2ZXJzaW9uIG9mIGty YjVfbWtfcmVxICovCi1zdGF0aWMga3JiNV9lcnJvcl9jb2RlCi0jaWZkZWYgQ0tfQU5TSUMKLWty YjVfdGd0X2dlbihrcmI1X2NvbnRleHQgY29udGV4dCwKLSAgICAgICAgICAgICAga3JiNV9jY2Fj aGUgY2NhY2hlLAotICAgICAgICAgICAgICBrcmI1X3ByaW5jaXBhbCAgICAgIHNlcnZlciwgLyog dGd0bmFtZSAqLwotICAgICAgICAgICAgICBrcmI1X2RhdGEgKm91dGJ1ZiwKLSAgICAgICAgICAg ICAgaW50IG9wdCkKLSNlbHNlCi1rcmI1X3RndF9nZW4oY29udGV4dCwgY2NhY2hlLCBzZXJ2ZXIs IG91dGJ1Ziwgb3B0KQotICAgICBrcmI1X2NvbnRleHQgY29udGV4dDsKLSAgICAga3JiNV9jY2Fj aGUgY2NhY2hlOwotICAgICBrcmI1X3ByaW5jaXBhbCAgICAgICBzZXJ2ZXI7IC8qIHRndG5hbWUg Ki8KLSAgICAga3JiNV9kYXRhICpvdXRidWY7Ci0gICAgIGludCBvcHQ7Ci0jZW5kaWYKLXsKLSAg ICBrcmI1X2Vycm9yX2NvZGUgICAgICAgcmV0dmFsOwotICAgIGtyYjVfY3JlZHMgICAgICAgICAg KiBjcmVkc3A7Ci0gICAga3JiNV9jcmVkcyAgICAgICAgICAgIGNyZWRzOwotCi0gICAgLyogb2J0 YWluIHRpY2tldCAmIHNlc3Npb24ga2V5ICovCi0gICAgbWVtc2V0KChjaGFyICopJmNyZWRzLCAw LCBzaXplb2YoY3JlZHMpKTsKLSAgICBpZiAoKHJldHZhbCA9IGtyYjVfY29weV9wcmluY2lwYWwo Y29udGV4dCwgc2VydmVyLCAmY3JlZHMuc2VydmVyKSkpCi0gICAgICAgIGdvdG8gY2xlYW51cDsK LQotICAgIGlmICgocmV0dmFsID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGNvbnRleHQsIGNjYWNo ZSwgJmNyZWRzLmNsaWVudCkpKQotICAgICAgICBnb3RvIGNsZWFudXBfY3JlZHM7Ci0KLSAgICBp ZiAob3B0ID09IFZBTElEQVRFKSB7Ci0gICAgICAgIGlmICgocmV0dmFsID0ga3JiNV9nZXRfY3Jl ZGVudGlhbHNfdmFsaWRhdGUoY29udGV4dCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjY2FjaGUsICZjcmVkcywgJmNyZWRzcCkpKQotICAg ICAgICAgIGdvdG8gY2xlYW51cF9jcmVkczsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoKHJl dHZhbCA9IGtyYjVfZ2V0X2NyZWRlbnRpYWxzX3JlbmV3KGNvbnRleHQsIDAsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NhY2hlLCAmY3JlZHMsICZj cmVkc3ApKSkKLSAgICAgICAgICBnb3RvIGNsZWFudXBfY3JlZHM7Ci0gICAgfQotCi0gICAgLyog d2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBkbyB0aGUgbWtfcmVxLCBqdXN0IGdldCB0aGUgY3Jl ZHMuICovCi1jbGVhbnVwX2NyZWRzOgotICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGNvbnRl eHQsICZjcmVkcyk7Ci0KLWNsZWFudXA6Ci0KLSAgICByZXR1cm4gcmV0dmFsOwotfQotI2VuZGlm IC8qIEhFSU1EQUwgKi8KLSNlbmRpZiAvKiBLSU5JVCAqLwotI2lmZGVmIEtERVNUUk9ZCi1pbnQK LSNpZmRlZiBDS19BTlNJQwotY2tfa3JiNV9kZXN0cm95KHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9w KQotI2Vsc2UKLWNrX2tyYjVfZGVzdHJveShvcCkgc3RydWN0IGtyYl9vcF9kYXRhICogb3A7Ci0j ZW5kaWYKLXsKLSAgICBrcmI1X2NvbnRleHQga2NvbnRleHQ7Ci0gICAga3JiNV9lcnJvcl9jb2Rl IHJldHZhbDsKLSAgICBpbnQgYzsKLSAgICBrcmI1X2NjYWNoZSBjY2FjaGUgPSBOVUxMOwotICAg IGNoYXIgKmNhY2hlX25hbWUgPSBOVUxMOwotICAgIGludCBjb2RlOwotICAgIGludCBlcnJmbGc9 MDsKLSAgICBpbnQgcXVpZXQgPSAwOwotCi0gICAgaWYgKCAhY2tfa3JiNV9pc19pbnN0YWxsZWQo KSApCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAgICBjb2RlID0ga3JiNV9pbml0X2NvbnRleHQo Jmtjb250ZXh0KTsKLSAgICBpZiAoY29kZSkgewotICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1 X2Rlc3Ryb3kgd2hpbGUgaW5pdGlhbGl6aW5nIGtyYjUiLCIiLGNvZGUpOwotICAgICAgICBrcmI1 X2Vycm5vID0gY29kZTsKLSAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2Fn ZShrcmI1X2Vycm5vKSk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgY29kZSA9 IGs1X2dldF9jY2FjaGUoa2NvbnRleHQsJmNjYWNoZSxvcC0+Y2FjaGUpOwotICAgIGlmIChjb2Rl ICE9IDApIHsKLSAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9kZXN0cm95IHdoaWxlIGdldHRp bmcgY2NhY2hlIiwKLSAgICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAgICBrcmI1X2ZyZWVf Y29udGV4dChrY29udGV4dCk7Ci0gICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOwotICAgICAgICBt YWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAg cmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBjb2RlID0ga3JiNV9jY19kZXN0cm95IChrY29udGV4 dCwgY2NhY2hlKTsKLSAgICBpZiAoY29kZSAhPSAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsImNr X2tyYjVfZGVzdHJveSB3aGlsZSBkZXN0cm95aW5nIGNhY2hlIiwiIixjb2RlKTsKLSAgICAgICAg aWYgKCBjb2RlID09IEtSQjVfRkNDX05PRklMRSApCi0gICAgICAgICAgICBwcmludGYoIk5vIHRp Y2tldCBjYWNoZSB0byBkZXN0cm95LlxyXG4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg cHJpbnRmKCJUaWNrZXQgY2FjaGUgTk9UIGRlc3Ryb3llZCFcclxuIik7Ci0gICAgICAgIGtyYjVf Y2NfY2xvc2Uoa2NvbnRleHQsY2NhY2hlKTsKLSAgICAgICAga3JiNV9mcmVlX2NvbnRleHQoa2Nv bnRleHQpOwotICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsKLSAgICAgICAgbWFrZXN0cigma3Ji NV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Ci0gICAgICAgIHJldHVybigtMSk7 Ci0gICAgfQotCi0gICAgcHJpbnRmKCJUaWNrZXRzIGRlc3Ryb3llZC5cclxuIik7Ci0gICAgLyog RG8gbm90IGNhbGwga3JiNV9jY19jbG9zZSgpIGJlY2F1c2UgY2FjaGUgaGFzIGJlZW4gZGVzdHJv eWVkICovCi0gICAga3JiNV9mcmVlX2NvbnRleHQoa2NvbnRleHQpOwotICAgIGtyYjVfZXJybm8g PSAwOwotICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLCJPSyIpOwotICAgIHJldHVybiAoMCk7Ci19 Ci0jZWxzZSAvKiBLREVTVFJPWSAqLwotI2lmZGVmIEtSQjUKLWludAotI2lmZGVmIENLX0FOU0lD Ci1ja19rcmI1X2Rlc3Ryb3koc3RydWN0IGtyYl9vcF9kYXRhICogb3ApCi0jZWxzZQotY2tfa3Ji NV9kZXN0cm95KG9wKSBzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcDsKLSNlbmRpZgotewotICAgIHBy aW50ZigiP05vdCBpbXBsZW1lbnRlZC5cclxuIik7Ci0gICAgcmV0dXJuKC0xKTsKLX0KLSNlbmRp ZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogS0RFU1RST1kgKi8KLSNpZm5kZWYgS0xJU1QKLSNpZmRl ZiBLUkI1Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tfa3JiNV9saXN0X2NyZWRzKHN0cnVjdCBr cmJfb3BfZGF0YSAqIG9wLCBzdHJ1Y3Qga3JiNV9saXN0X2NyZWRfZGF0YSAqIGxjKQotI2Vsc2UK LWNrX2tyYjVfbGlzdF9jcmVkcyhvcCxsYykKLSAgICBzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcDsg c3RydWN0IGtyYjVfbGlzdF9jcmVkX2RhdGEgKiBsYzsKLSNlbmRpZgotewotICAgIHByaW50Zigi P05vdCBpbXBsZW1lbnRlZC5cclxuIik7Ci0gICAgcmV0dXJuKC0xKTsKLX0KLSNlbmRpZiAvKiBL UkI1ICovCi0jZWxzZSAvKiBLTElTVCAqLwotc3RhdGljIGludCBzaG93X2ZsYWdzID0gMCwgc2hv d190aW1lID0gMCwgc3RhdHVzX29ubHkgPSAwLCBzaG93X2tleXMgPSAwOwotc3RhdGljIGludCBz aG93X2V0eXBlID0gMCwgc2hvd19hZGRyID0gMDsKLXN0YXRpYyBjaGFyICpkZWZuYW1lOwotc3Rh dGljIGNoYXIgKnByb2duYW1lOwotc3RhdGljIGtyYjVfaW50MzIgbm93Owotc3RhdGljIGludCB0 aW1lc3RhbXBfd2lkdGg7Ci0KLV9QUk9UT1RZUChzdGF0aWMgY2hhciAqIGV0eXBlX3N0cmluZywg KGtyYjVfZW5jdHlwZSApKTsKLV9QUk9UT1RZUChzdGF0aWMgdm9pZCBzaG93X2NyZWRlbnRpYWws KGtyYjVfY29udGV4dCxrcmI1X2NyZWRzICopKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IGRvX2Nj YWNoZSwgKGtyYjVfY29udGV4dCxjaGFyICopKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IGRvX2tl eXRhYiwgKGtyYjVfY29udGV4dCxjaGFyICopKTsKLV9QUk9UT1RZUChzdGF0aWMgdm9pZCBwcmlu dHRpbWUsICh0aW1lX3QpKTsKLV9QUk9UT1RZUChzdGF0aWMgdm9pZCBmaWxsaXQsIChpbnQsIGlu dCkpOwotCi0jZGVmaW5lIERFRkFVTFQgMAotI2RlZmluZSBDQ0FDSEUgMQotI2RlZmluZSBLRVlU QUIgMgotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tfa3JiNV9saXN0X2NyZWRzKHN0cnVjdCBr cmJfb3BfZGF0YSAqIG9wLCBzdHJ1Y3Qga3JiNV9saXN0X2NyZWRfZGF0YSAqIGxjKQotI2Vsc2UK LWNrX2tyYjVfbGlzdF9jcmVkcyhvcCxsYykKLSAgICBzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcDsg c3RydWN0IGtyYjVfbGlzdF9jcmVkX2RhdGEgKiBsYzsKLSNlbmRpZgotewotICAgIGtyYjVfY29u dGV4dCBrY29udGV4dDsKLSAgICBrcmI1X2Vycm9yX2NvZGUgcmV0dmFsOwotICAgIGludCBjb2Rl OwotICAgIGNoYXIgKm5hbWUgPSBvcC0+Y2FjaGU7Ci0gICAgaW50IG1vZGU7Ci0KLSAgICBpZiAo ICFja19rcmI1X2lzX2luc3RhbGxlZCgpICkKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGNv ZGUgPSBrcmI1X2luaXRfY29udGV4dCgma2NvbnRleHQpOwotICAgIGlmIChjb2RlKSB7Ci0gICAg ICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBpbml0aWFsaXppbmcga3Ji NSIsIiIsY29kZSk7Ci0gICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOwotICAgICAgICBtYWtlc3Ry KCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAgcmV0dXJu KC0xKTsKLSAgICB9Ci0KLSAgICBuYW1lID0gb3AtPmNhY2hlOwotICAgIG1vZGUgPSBERUZBVUxU OwotICAgIHNob3dfZmxhZ3MgPSAwOwotICAgIHNob3dfdGltZSA9IDA7Ci0gICAgc3RhdHVzX29u bHkgPSAwOwotICAgIHNob3dfa2V5cyA9IDA7Ci0gICAgc2hvd19ldHlwZSA9IDA7Ci0gICAgc2hv d19hZGRyID0gMDsKLQotICAgIHNob3dfZmxhZ3MgPSBsYy0+ZmxhZ3M7Ci0gICAgc2hvd19ldHlw ZSA9IGxjLT5lbmNyeXB0aW9uOwotICAgIHNob3dfYWRkciAgPSBsYy0+YWRkcjsKLSAgICBzaG93 X3RpbWUgPSAxOwotICAgIHNob3dfa2V5cyA9IDE7Ci0gICAgbW9kZSA9IENDQUNIRTsKLQotICAg IGlmICgoY29kZSA9IGtyYjVfdGltZW9mZGF5KGtjb250ZXh0LCAmbm93KSkpIHsKLSAgICAgICAg aWYgKCFzdGF0dXNfb25seSkKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9j cmVkcyB3aGlsZSBnZXR0aW5nIHRpbWUgb2YgZGF5LiIsCi0gICAgICAgICAgICAgICAgICAgIiIs Y29kZSk7Ci0gICAgICAgIGtyYjVfZnJlZV9jb250ZXh0KGtjb250ZXh0KTsKLSAgICAgICAga3Ji NV9lcnJubyA9IGNvZGU7Ci0gICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3Nh Z2Uoa3JiNV9lcnJubykpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBlbHNlIHsK LSAgICAgICAgY2hhciB0bXBbQlVGU0laXTsKLQotICAgICAgICBpZiAoIWtyYjVfdGltZXN0YW1w X3RvX3Nmc3RyaW5nKG5vdywgdG1wLCAyMCwgKGNoYXIgKikgTlVMTCkgfHwKLSAgICAgICAgICAg ICFrcmI1X3RpbWVzdGFtcF90b19zZnN0cmluZyhub3csIHRtcCwgc2l6ZW9mKHRtcCksIChjaGFy ICopIE5VTEwpKQotICAgICAgICAgICAgdGltZXN0YW1wX3dpZHRoID0gKGludCkgc3RybGVuKHRt cCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRpbWVzdGFtcF93aWR0aCA9IDE1OwotICAg IH0KLQotICAgIGlmIChtb2RlID09IERFRkFVTFQgfHwgbW9kZSA9PSBDQ0FDSEUpCi0gICAgICAg ICByZXR2YWwgPSBkb19jY2FjaGUoa2NvbnRleHQsbmFtZSk7Ci0gICAgZWxzZQotICAgICAgICAg cmV0dmFsID0gZG9fa2V5dGFiKGtjb250ZXh0LG5hbWUpOwotICAgIGtyYjVfZnJlZV9jb250ZXh0 KGtjb250ZXh0KTsKLSAgICByZXR1cm4ocmV0dmFsKTsKLX0KLQotc3RhdGljIGludAotI2lmZGVm IENLX0FOU0lDCi1kb19rZXl0YWIoa3JiNV9jb250ZXh0IGtjb250ZXh0LCBjaGFyICogbmFtZSkK LSNlbHNlCi1kb19rZXl0YWIoa2NvbnRleHQsbmFtZSkga3JiNV9jb250ZXh0IGtjb250ZXh0OyBj aGFyICogbmFtZTsKLSNlbmRpZgotewotICAgIGtyYjVfa2V5dGFiIGt0OwotICAgIGtyYjVfa2V5 dGFiX2VudHJ5IGVudHJ5OwotICAgIGtyYjVfa3RfY3Vyc29yIGN1cnNvcjsKLSAgICBjaGFyIGJ1 ZltCVUZTSVpdOyAvKiBob3BlZnVsbHkgbGFyZ2UgZW5vdWdoIGZvciBhbnkgdHlwZSAqLwotICAg IGNoYXIgKnBuYW1lOwotICAgIGludCBjb2RlID0gMDsKLQotICAgIGlmIChuYW1lID09IE5VTEwp IHsKLSAgICAgICAgaWYgKChjb2RlID0ga3JiNV9rdF9kZWZhdWx0KGtjb250ZXh0LCAma3QpKSkg ewotICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIGdldHRp bmcgZGVmYXVsdCBrZXl0YWIiLAotICAgICAgICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAg ICAgICAga3JiNV9lcnJubyA9IGNvZGU7Ci0gICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1z ZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X2t0X3Jlc29s dmUoa2NvbnRleHQsIG5hbWUsICZrdCkpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJja19r cmI1X2xpc3RfY3JlZHMgd2hpbGUgcmVzb2x2aW5nIGtleXRhYiIsCi0gICAgICAgICAgICAgICAg ICAgICBuYW1lLGNvZGUpOwotICAgICAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7Ci0gICAgICAg ICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAg ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoKGNvZGUg PSBrcmI1X2t0X2dldF9uYW1lKGtjb250ZXh0LCBrdCwgYnVmLCBCVUZTSVopKSkgewotICAgICAg ICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgZ2V0dGluZyBrZXl0YWIgbmFt ZSIsCi0gICAgICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7 Ci0gICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykp OwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgICBwcmludGYoIktleXRhYiBuYW1l OiAlc1xyXG4iLCBidWYpOwotCi0gICAgIGlmICgoY29kZSA9IGtyYjVfa3Rfc3RhcnRfc2VxX2dl dChrY29udGV4dCwga3QsICZjdXJzb3IpKSkgewotICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3Ji NV9saXN0X2NyZWRzIHdoaWxlIHN0YXJ0aW5nIGtleXRhYiBzY2FuIiwKLSAgICAgICAgICAgICAg ICAiIixjb2RlKTsKLSAgICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOwotICAgICAgICAgbWFrZXN0 cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Ci0gICAgICAgICByZXR1 cm4oLTEpOwotICAgICB9Ci0KLSAgICAgaWYgKHNob3dfdGltZSkgewotICAgICAgICAgIHByaW50 ZigiS1ZOTyBUaW1lc3RhbXAiKTsKLSAgICAgICAgICBmaWxsaXQodGltZXN0YW1wX3dpZHRoIC0g c2l6ZW9mKCJUaW1lc3RhbXAiKSArIDIsIChpbnQpICcgJyk7Ci0gICAgICAgICAgcHJpbnRmKCJQ cmluY2lwYWxcclxuIik7Ci0gICAgICAgICAgcHJpbnRmKCItLS0tICIpOwotICAgICAgICAgIGZp bGxpdCh0aW1lc3RhbXBfd2lkdGgsIChpbnQpICctJyk7Ci0gICAgICAgICAgcHJpbnRmKCIgIik7 Ci0gICAgICAgICAgZmlsbGl0KDc4IC0gdGltZXN0YW1wX3dpZHRoIC0gc2l6ZW9mKCJLVk5PIiks IChpbnQpICctJyk7Ci0gICAgICAgICAgcHJpbnRmKCJcclxuIik7Ci0gICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgcHJpbnRmKCJLVk5PIFByaW5jaXBhbFxyXG4iKTsKLSAgICAgICAgICBwcmludGYo Ci0iLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLVwKLS0tLS0tLVxyXG4iKTsKLSAgICAgfQotCi0gICAgd2hpbGUg KChjb2RlID0ga3JiNV9rdF9uZXh0X2VudHJ5KGtjb250ZXh0LCBrdCwgJmVudHJ5LCAmY3Vyc29y KSkgPT0gMCkgewotICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X3VucGFyc2VfbmFtZShrY29udGV4 dCwgZW50cnkucHJpbmNpcGFsLCAmcG5hbWUpKSkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwi Y2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHVucGFyc2luZyBwcmluY2lwYWwgbmFtZSIsCi0gICAg ICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsK LSAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJu bykpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGYo IiU0ZCAiLCBlbnRyeS52bm8pOwotICAgICAgICBpZiAoc2hvd190aW1lKSB7Ci0gICAgICAgICAg ICBwcmludHRpbWUoZW50cnkudGltZXN0YW1wKTsKLSAgICAgICAgICAgIHByaW50ZigiICIpOwot ICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiJXMiLCBwbmFtZSk7Ci0gICAgICAgIGlmIChzaG93 X2V0eXBlKQotICAgICAgICAgICAgcHJpbnRmKCIgKCVzKSAiICwKLSNpZmRlZiBIRUlNREFMCi0g ICAgICAgICAgICAgICAgICAgIGV0eXBlX3N0cmluZyhlbnRyeS5rZXkua2V5dHlwZSkKLSNlbHNl IC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgZXR5cGVfc3RyaW5nKGVudHJ5Lmtl eS5lbmN0eXBlKQotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgaWYgKHNob3dfa2V5cykgewotICAgICAgICAgICAgcHJpbnRmKCIgKDB4Iik7Ci0g ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICAgICAgZm9y IChpID0gMDsgaSA8IGVudHJ5LmtleS5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCIlMDJ4IiwKLSNpZmRlZiBIRUlNREFMCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgZW50cnkua2V5LmtleXZhbHVlW2ldCi0jZWxzZSAvKiBIRUlNREFMICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW50cnkua2V5LmNvbnRlbnRzW2ldCi0jZW5kaWYgLyogSEVJTURB TCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBwcmludGYoIikiKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoIlxyXG4iKTsK LSAgICAgICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQscG5hbWUpOwotICAgIH0K LSAgICBpZiAoY29kZSAmJiBjb2RlICE9IEtSQjVfS1RfRU5EKSB7Ci0gICAgICAgIGRlYnVnKEYx MDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBzY2FubmluZyBrZXl0YWIiLAotICAgICAgICAg ICAgICAgIiIsY29kZSk7Ci0gICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOwotICAgICAgICBtYWtl c3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAgcmV0 dXJuKC0xKTsKLSAgICB9Ci0gICAgaWYgKChjb2RlID0ga3JiNV9rdF9lbmRfc2VxX2dldChrY29u dGV4dCwga3QsICZjdXJzb3IpKSkgewotICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3Rf Y3JlZHMgd2hpbGUgZW5kaW5nIGtleXRhYiBzY2FuIiwKLSAgICAgICAgICAgICAgICIiLGNvZGUp OwotICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsKLSAgICAgICAgbWFrZXN0cigma3JiNV9lcnJt c2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAg fQotICAgIGtyYjVfZXJybm8gPSAwOwotICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLCJPSyIpOwot ICAgIHJldHVybigwKTsKLX0KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1kb19jY2Fj aGUoa3JiNV9jb250ZXh0IGtjb250ZXh0LCBjaGFyICogY2NfbmFtZSkKLSNlbHNlCi1kb19jY2Fj aGUoa2NvbnRleHQsbmFtZSkga3JiNV9jb250ZXh0IGtjb250ZXh0OyBjaGFyICogY2NfbmFtZTsK LSNlbmRpZgotewotICAgIGtyYjVfY2NhY2hlIGNhY2hlID0gTlVMTDsKLSAgICBrcmI1X2NjX2N1 cnNvciBjdXI7Ci0gICAga3JiNV9jcmVkcyBjcmVkczsKLSAgICBrcmI1X3ByaW5jaXBhbCBwcmlu Yz1OVUxMOwotICAgIGtyYjVfZmxhZ3MgZmxhZ3M9MDsKLSAgICBrcmI1X2Vycm9yX2NvZGUgY29k ZSA9IDA7Ci0gICAgaW50IGV4aXRfc3RhdHVzID0gMDsKLQotICAgIGlmIChzdGF0dXNfb25seSkK LSAgICAgICAgLyogZXhpdF9zdGF0dXMgaXMgc2V0IGJhY2sgdG8gMCBpZiBhIHZhbGlkIHRndCBp cyBmb3VuZCAqLwotICAgICAgICBleGl0X3N0YXR1cyA9IDE7Ci0KLSAgICBjb2RlID0gazVfZ2V0 X2NjYWNoZShrY29udGV4dCwmY2FjaGUsY2NfbmFtZSk7Ci0gICAgaWYgKGNvZGUgIT0gMCkgewot ICAgICAgICBkZWJ1ZyhGMTExLCJkb19jY2FjaGUgd2hpbGUgZ2V0dGluZyBjY2FjaGUiLAotICAg ICAgICAgICAgICAgZXJyb3JfbWVzc2FnZShjb2RlKSxjb2RlKTsKLSAgICAgICAga3JiNV9lcnJu byA9IGNvZGU7Ci0gICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3Ji NV9lcnJubykpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIGZsYWdzID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHR1cm5zIG9mZiBPUEVOQ0xPU0UgbW9kZSAqLwot ICAgIGlmICgoY29kZSA9IGtyYjVfY2Nfc2V0X2ZsYWdzKGtjb250ZXh0LCBjYWNoZSwgZmxhZ3Mp KSkgewotICAgICAgICBpZiAoY29kZSA9PSBFTk9FTlQpIHsKLSAgICAgICAgICAgIGRlYnVnKEYx MTEsImNrX2tyYjVfbGlzdF9jcmVkcyAodGlja2V0IGNhY2hlKSIsCi0gICAgICAgICAgICAgICAg ICAga3JiNV9jY19nZXRfbmFtZShrY29udGV4dCwgY2FjaGUpLGNvZGUpOwotICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgZGVidWcoRjExMSwKLSAgICAgICAgICAgICAgICAgImNrX2tyYjVf bGlzdF9jcmVkcyB3aGlsZSBzZXR0aW5nIGNhY2hlIGZsYWdzICh0aWNrZXQgY2FjaGUpIiwKLSAg ICAgICAgICAgICAgICAgIGtyYjVfY2NfZ2V0X25hbWUoa2NvbnRleHQsIGNhY2hlKSxjb2RlKTsK LSAgICAgICAgfQotICAgICAgICBwcmludGYoIk5vIHRpY2tldCBGaWxlLlxyXG4iKTsKLSAgICAg ICAga3JiNV9lcnJubyA9IGNvZGU7Ci0gICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9y X21lc3NhZ2Uoa3JiNV9lcnJubykpOwotICAgICAgICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0LGNh Y2hlKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgaWYgKChjb2RlID0ga3JiNV9j Y19nZXRfcHJpbmNpcGFsKGtjb250ZXh0LCBjYWNoZSwgJnByaW5jKSkpIHsKLSAgICAgICAgZGVi dWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHJldHJpZXZpbmcgcHJpbmNpcGFsIG5h bWUiLAotICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgIGtyYjVfZXJybm8gPSBjb2Rl OwotICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8p KTsKLSAgICAgICAga3JiNV9jY19jbG9zZShrY29udGV4dCxjYWNoZSk7Ci0gICAgICAgIHJldHVy bigtMSk7Ci0gICAgfQotICAgIGlmICgoY29kZSA9IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250ZXh0 LCBwcmluYywgJmRlZm5hbWUpKSkgewotICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3Rf Y3JlZHMgd2hpbGUgdW5wYXJzaW5nIHByaW5jaXBhbCBuYW1lIiwKLSAgICAgICAgICAgICAgICIi LGNvZGUpOwotICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsKLSAgICAgICAgbWFrZXN0cigma3Ji NV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Ci0gICAgICAgIGtyYjVfY2NfY2xv c2Uoa2NvbnRleHQsY2FjaGUpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAo IXN0YXR1c19vbmx5KSB7Ci0gICAgICAgIHByaW50ZigiVGlja2V0IGNhY2hlOiAgICAgICVzOiVz XHJcbkRlZmF1bHQgcHJpbmNpcGFsOiAlc1xyXG5cclxuIiwKLSAgICAgICAgICAgICAgICBrcmI1 X2NjX2dldF90eXBlKGtjb250ZXh0LCBjYWNoZSksCi0gICAgICAgICAgICAgICAga3JiNV9jY19n ZXRfbmFtZShrY29udGV4dCwgY2FjaGUpLCBkZWZuYW1lKTsKLSAgICAgICAgcHJpbnRmKCJWYWxp ZCBzdGFydGluZyIpOwotICAgICAgICBmaWxsaXQodGltZXN0YW1wX3dpZHRoIC0gc2l6ZW9mKCJW YWxpZCBzdGFydGluZyIpICsgMywKLSAgICAgICAgICAgICAgIChpbnQpICcgJyk7Ci0gICAgICAg IHByaW50ZigiRXhwaXJlcyIpOwotICAgICAgICBmaWxsaXQodGltZXN0YW1wX3dpZHRoIC0gc2l6 ZW9mKCJFeHBpcmVzIikgKyAzLAotICAgICAgICAgICAgICAgKGludCkgJyAnKTsKLSAgICAgICAg cHJpbnRmKCJTZXJ2aWNlIHByaW5jaXBhbFxyXG4iKTsKLSAgICB9Ci0gICAgaWYgKChjb2RlID0g a3JiNV9jY19zdGFydF9zZXFfZ2V0KGtjb250ZXh0LCBjYWNoZSwgJmN1cikpKSB7Ci0gICAgICAg IGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBzdGFydGluZyB0byByZXRyaWV2 ZSB0aWNrZXRzIiwKLSAgICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAgICBrcmI1X2Vycm5v ID0gY29kZTsKLSAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1 X2Vycm5vKSk7Ci0gICAgICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRleHQsY2FjaGUpOwotICAgICAg ICByZXR1cm4oLTEpOwotICAgIH0KLSAgICB3aGlsZSAoIShjb2RlID0ga3JiNV9jY19uZXh0X2Ny ZWQoa2NvbnRleHQsIGNhY2hlLCAmY3VyLCAmY3JlZHMpKSkgewotICAgICAgICBpZiAoc3RhdHVz X29ubHkpIHsKLSAgICAgICAgICAgIGlmIChleGl0X3N0YXR1cyAmJiBjcmVkcy5zZXJ2ZXItPmxl bmd0aCA9PSAyICYmCi0gICAgICAgICAgICAgICAgc3RyY21wKGNyZWRzLnNlcnZlci0+cmVhbG0u ZGF0YSwgcHJpbmMtPnJlYWxtLmRhdGEpID09IDAgJiYKLSAgICAgICAgICAgICAgICBzdHJjbXAo KGNoYXIgKiljcmVkcy5zZXJ2ZXItPmRhdGFbMF0uZGF0YSwgImtyYnRndCIpID09IDAgJiYKLSAg ICAgICAgICAgICAgICBzdHJjbXAoKGNoYXIgKiljcmVkcy5zZXJ2ZXItPmRhdGFbMV0uZGF0YSwK LSAgICAgICAgICAgICAgICAgICAgICAgcHJpbmMtPnJlYWxtLmRhdGEpID09IDAgJiYKLSAgICAg ICAgICAgICAgICBjcmVkcy50aW1lcy5lbmR0aW1lID4gbm93KQotICAgICAgICAgICAgICAgIGV4 aXRfc3RhdHVzID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNob3dfY3JlZGVu dGlhbChrY29udGV4dCwgJmNyZWRzKTsKLSAgICAgICAgfQotICAgICAgICBrcmI1X2ZyZWVfY3Jl ZF9jb250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsKLSAgICB9Ci0gICAgcHJpbnRmKCJcclxuIik7 Ci0gICAgaWYgKGNvZGUgPT0gS1JCNV9DQ19FTkQgfHwgY29kZSA9PSBLUkI1X0NDX05PVEZPVU5E KSB7Ci0gICAgICAgIGlmICgoY29kZSA9IGtyYjVfY2NfZW5kX3NlcV9nZXQoa2NvbnRleHQsIGNh Y2hlLCAmY3VyKSkpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVk cyB3aGlsZSBmaW5pc2hpbmcgdGlja2V0IHJldHJpZXZhbCIsCi0gICAgICAgICAgICAgICAgICAg IiIsY29kZSk7Ci0gICAgICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsKLSAgICAgICAgICAgIG1h a2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOwotICAgICAgICAg ICAga3JiNV9jY19jbG9zZShrY29udGV4dCxjYWNoZSk7Ci0gICAgICAgICAgICByZXR1cm4oLTEp OwotICAgICAgICB9Ci0gICAgICAgIGZsYWdzID0gS1JCNV9UQ19PUEVOQ0xPU0U7ICAgICAgLyog dHVybnMgb24gT1BFTkNMT1NFIG1vZGUgKi8KLSAgICAgICAgaWYgKChjb2RlID0ga3JiNV9jY19z ZXRfZmxhZ3Moa2NvbnRleHQsIGNhY2hlLCBmbGFncykpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgY2xvc2luZyBjY2FjaGUiLAotICAgICAgICAg ICAgICAgICAgICIiLGNvZGUpOwotICAgICAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7Ci0gICAg ICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsK LSAgICAgICAgICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRleHQsY2FjaGUpOwotICAgICAgICAgICAg cmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICBrcmI1X2Vycm5vID0gMDsKLSAgICAgICAg bWFrZXN0cigma3JiNV9lcnJtc2csIk9LIik7Ci0gICAgICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRl eHQsY2FjaGUpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVi dWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHJldHJpZXZpbmcgYSB0aWNrZXQiLCIi LGNvZGUpOwotICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsKLSAgICAgICAgbWFrZXN0cigma3Ji NV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Ci0gICAgICAgIGtyYjVfY2NfY2xv c2Uoa2NvbnRleHQsY2FjaGUpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBrcmI1 X2Vycm5vID0gMDsKLSAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZywiT0siKTsKLSAgICBrcmI1X2Nj X2Nsb3NlKGtjb250ZXh0LGNhY2hlKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLXN0YXRpYyBjaGFy ICoKLSNpZmRlZiBDS19BTlNJQwotI2lmZGVmIEhFSU1EQUwKLWV0eXBlX3N0cmluZyhrcmI1X2tl eXR5cGUgZW5jdHlwZSkKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLWV0eXBlX3N0cmluZyhrcmI1X2Vu Y3R5cGUgZW5jdHlwZSkKLSNlbmRpZiAvKiBIRUlNREFMICovCi0jZWxzZQotI2lmZGVmIEhFSU1E QUwKLWV0eXBlX3N0cmluZyhlbmN0eXBlKSBrcmI1X2tleXR5cGUgZW5jdHlwZTsKLSNlbHNlIC8q IEhFSU1EQUwgKi8KLWV0eXBlX3N0cmluZyhlbmN0eXBlKSBrcmI1X2VuY3R5cGUgZW5jdHlwZTsK LSNlbmRpZiAvKiBIRUlNREFMICovCi0jZW5kaWYKLXsKLSAgICBzdGF0aWMgY2hhciBidWZbMTJd OwotCi0gICAgc3dpdGNoIChlbmN0eXBlKSB7Ci0gICAgY2FzZSBFTkNUWVBFX05VTEw6Ci0gICAg ICAgIHJldHVybiAiTlVMTCI7Ci0gICAgY2FzZSBFTkNUWVBFX0RFU19DQkNfQ1JDOgotICAgICAg ICByZXR1cm4gIkRFUy1DQkMtQ1JDIjsKLSAgICBjYXNlIEVOQ1RZUEVfREVTX0NCQ19NRDQ6Ci0g ICAgICAgIHJldHVybiAiREVTLUNCQy1NRDQiOwotICAgIGNhc2UgRU5DVFlQRV9ERVNfQ0JDX01E NToKLSAgICAgICAgcmV0dXJuICJERVMtQ0JDLU1ENSI7Ci0gICAgY2FzZSBFTkNUWVBFX0RFU19D QkNfUkFXOgotICAgICAgICByZXR1cm4gIkRFUy1DQkMtUkFXIjsKLSAgICBjYXNlIEVOQ1RZUEVf REVTM19DQkNfU0hBOgotICAgICAgICByZXR1cm4gIkRFUzMtQ0JDLVNIQSI7Ci0gICAgY2FzZSBF TkNUWVBFX0RFUzNfQ0JDX1JBVzoKLSAgICAgICAgcmV0dXJuICJERVMzLUNCQy1SQVciOwotICAg IGNhc2UgRU5DVFlQRV9ERVNfSE1BQ19TSEExOgotICAgICAgICByZXR1cm4gIkRFUy1ITUFDLVNI QTEiOwotICAgIGNhc2UgRU5DVFlQRV9ERVMzX0NCQ19TSEExOgotICAgICAgICByZXR1cm4gIkRF UzMtQ0JDLVNIQTEiOwotICAgIGNhc2UgRU5DVFlQRV9BRVMxMjhfQ1RTX0hNQUNfU0hBMV85NjoK LSAgICAgICAgcmV0dXJuICJBRVMxMjhfQ1RTLUhNQUMtU0hBMV85NiI7Ci0gICAgY2FzZSBFTkNU WVBFX0FFUzI1Nl9DVFNfSE1BQ19TSEExXzk2OgotICAgICAgICByZXR1cm4gIkFFUzI1Nl9DVFMt SE1BQy1TSEExXzk2IjsKLSAgICBjYXNlIEVOQ1RZUEVfQVJDRk9VUl9ITUFDOgotICAgICAgICBy ZXR1cm4gIlJDNC1ITUFDLU5UIjsKLSAgICBjYXNlIEVOQ1RZUEVfQVJDRk9VUl9ITUFDX0VYUDoK LSAgICAgICAgcmV0dXJuICJSQzQtSE1BQy1OVC1FWFAiOwotICAgIGNhc2UgRU5DVFlQRV9VTktO T1dOOgotICAgICAgICByZXR1cm4gIlVOS05PV04iOwotICAgIGNhc2UgRU5DVFlQRV9MT0NBTF9E RVMzX0hNQUNfU0hBMToKLSAgICAgICAgcmV0dXJuICJMT0NBTC1ERVMzLUhNQUMtU0hBMSI7Ci0g ICAgY2FzZSBFTkNUWVBFX0xPQ0FMX1JDNF9NRDQ6Ci0gICAgICAgIHJldHVybiAiTE9DQUwtUkM0 LU1ENCI7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgY2ttYWttc2coYnVmLCBzaXplb2YoYnVmKSwi ZXR5cGUgIiwgY2tpdG9hKGVuY3R5cGUpLE5VTEwsTlVMTCk7Ci0gICAgICAgIHJldHVybiBidWY7 Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIGNoYXIgKgotI2lmZGVmIENLX0FO U0lDCi1mbGFnc19zdHJpbmcocmVnaXN0ZXIga3JiNV9jcmVkcyAqY3JlZCkKLSNlbHNlCi1mbGFn c19zdHJpbmcoY3JlZCkgcmVnaXN0ZXIga3JiNV9jcmVkcyAqY3JlZDsKLSNlbmRpZgotewotICAg IHN0YXRpYyBjaGFyIGJ1ZlszMl07Ci0gICAgaW50IGkgPSAwOwotCi0gICAgaWYgKGNyZWQtPnRp Y2tldF9mbGFncyAmIFRLVF9GTEdfRk9SV0FSREFCTEUpCi0gICAgICAgIGJ1ZltpKytdID0gJ0Yn OwotICAgIGlmIChjcmVkLT50aWNrZXRfZmxhZ3MgJiBUS1RfRkxHX0ZPUldBUkRFRCkKLSAgICAg ICAgYnVmW2krK10gPSAnZic7Ci0gICAgaWYgKGNyZWQtPnRpY2tldF9mbGFncyAmIFRLVF9GTEdf UFJPWElBQkxFKQotICAgICAgICBidWZbaSsrXSA9ICdQJzsKLSAgICBpZiAoY3JlZC0+dGlja2V0 X2ZsYWdzICYgVEtUX0ZMR19QUk9YWSkKLSAgICAgICAgYnVmW2krK10gPSAncCc7Ci0gICAgaWYg KGNyZWQtPnRpY2tldF9mbGFncyAmIFRLVF9GTEdfTUFZX1BPU1REQVRFKQotICAgICAgICBidWZb aSsrXSA9ICdEJzsKLSAgICBpZiAoY3JlZC0+dGlja2V0X2ZsYWdzICYgVEtUX0ZMR19QT1NUREFU RUQpCi0gICAgICAgIGJ1ZltpKytdID0gJ2QnOwotICAgIGlmIChjcmVkLT50aWNrZXRfZmxhZ3Mg JiBUS1RfRkxHX0lOVkFMSUQpCi0gICAgICAgIGJ1ZltpKytdID0gJ2knOwotICAgIGlmIChjcmVk LT50aWNrZXRfZmxhZ3MgJiBUS1RfRkxHX1JFTkVXQUJMRSkKLSAgICAgICAgYnVmW2krK10gPSAn Uic7Ci0gICAgaWYgKGNyZWQtPnRpY2tldF9mbGFncyAmIFRLVF9GTEdfSU5JVElBTCkKLSAgICAg ICAgYnVmW2krK10gPSAnSSc7Ci0gICAgaWYgKGNyZWQtPnRpY2tldF9mbGFncyAmIFRLVF9GTEdf SFdfQVVUSCkKLSAgICAgICAgYnVmW2krK10gPSAnSCc7Ci0gICAgaWYgKGNyZWQtPnRpY2tldF9m bGFncyAmIFRLVF9GTEdfUFJFX0FVVEgpCi0gICAgICAgIGJ1ZltpKytdID0gJ0EnOwotICAgIGJ1 ZltpXSA9ICdcMCc7Ci0gICAgcmV0dXJuKGJ1Zik7Ci19Ci0KLXN0YXRpYyBjaGFyICAgKgotI2lm ZGVmIENLX0FOU0lDCi1zaG9ydF9kYXRlKGxvbmcgICAqZHApCi0jZWxzZQotc2hvcnRfZGF0ZShk cCkgbG9uZyAgICpkcDsKLSNlbmRpZgotewotICAgIHJlZ2lzdGVyIGNoYXIgKmNwOwotI2lmbmRl ZiBjdGltZQotICAgIGV4dGVybiBjaGFyICpjdGltZSgpOwotI2VuZGlmIC8qIGN0aW1lICovCi0g ICAgY3AgPSBjdGltZShkcCkgKyA0OwotICAgIGNwWzE1XSA9ICdcMCc7Ci0gICAgcmV0dXJuIChj cCk7Ci19Ci0KLQotc3RhdGljIFZPSUQKLSNpZmRlZiBDS19BTlNJQwotcHJpbnR0aW1lKHRpbWVf dCB0dikKLSNlbHNlCi1wcmludHRpbWUodHYpIHRpbWVfdCB0djsKLSNlbmRpZgotewotICAgIGNo YXIgdGltZXN0cmluZ1tCVUZTSVpdOwotICAgIGNoYXIgZm9ybWF0WzEyXTsKLSAgICBjaGFyIGZp bGw7Ci0KLSAgICBmaWxsID0gJyAnOwotICAgIHNwcmludGYoZm9ybWF0LCIlJS0lZHMiLHRpbWVz dGFtcF93aWR0aCk7ICAgLyogc2FmZSAqLwotICAgIGlmICgha3JiNV90aW1lc3RhbXBfdG9fc2Zz dHJpbmcoKGtyYjVfdGltZXN0YW1wKSB0diwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aW1lc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRpbWVzdGFtcF93aWR0aCsxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZmaWxsKSkgewotICAgICAgICBwcmludGYoZm9ybWF0LHRpbWVzdHJpbmcpOwotICAgIH0KLSAg ICBlbHNlIHsKLSAgICAgICAgcHJpbnRmKGZvcm1hdCxzaG9ydF9kYXRlKCZ0dikpOwotICAgIH0K LQotfQotCi1zdGF0aWMgdm9pZAotI2lmZGVmIENLX0FOU0lDCi1vbmVfYWRkcihrcmI1X2FkZHJl c3MgKmEpCi0jZWxzZQotb25lX2FkZHIoYSkga3JiNV9hZGRyZXNzICphOwotI2VuZGlmCi17Ci0g ICAgc3RydWN0IGhvc3RlbnQgKmg7Ci0gICAgZXh0ZXJuIHRjcF9yZG5zOwotCi0gICAgaWYgKChh LT5hZGRydHlwZSA9PSBBRERSVFlQRV9JTkVUKSAmJgotICAgICAgICAoYS0+bGVuZ3RoID09IDQp KSB7Ci0gICAgICAgIGlmICh0Y3BfcmRucyAhPSBTRVRfT0ZGKSB7Ci0gICAgICAgICAgICBoID0g Z2V0aG9zdGJ5YWRkcihhLT5jb250ZW50cywgNCwgQUZfSU5FVCk7Ci0gICAgICAgICAgICBpZiAo aCkgewotI2lmZGVmIEhBRERSTElTVAotICAgICAgICAgICAgICAgIGggPSBja19jb3B5aG9zdGVu dChoKTsKLSNlbmRpZiAvKiBIQUREUkxJU1QgKi8KLSAgICAgICAgICAgICAgICBwcmludGYoIiVz ICglZC4lZC4lZC4lZCkiLCBoLT5oX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBhLT5j b250ZW50c1swXSwgYS0+Y29udGVudHNbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBhLT5j b250ZW50c1syXSwgYS0+Y29udGVudHNbM10pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g ICAgICAgIGlmICh0Y3BfcmRucyA9PSBTRVRfT0ZGIHx8ICFoKSB7Ci0gICAgICAgICAgICBwcmlu dGYoIiVkLiVkLiVkLiVkIiwgYS0+Y29udGVudHNbMF0sIGEtPmNvbnRlbnRzWzFdLAotICAgICAg ICAgICAgICAgICAgIGEtPmNvbnRlbnRzWzJdLCBhLT5jb250ZW50c1szXSk7Ci0gICAgICAgIH0K LSAgICB9IGVsc2UgewotICAgICAgICBwcmludGYoInVua25vd24gYWRkciB0eXBlICVkIiwgYS0+ YWRkcnR5cGUpOwotICAgIH0KLX0KLQotc3RhdGljIFZPSUQKLSNpZmRlZiBDS19BTlNJQwotc2hv d19jcmVkZW50aWFsKGtyYjVfY29udGV4dCBrY29udGV4dCwgcmVnaXN0ZXIga3JiNV9jcmVkcyAq IGNyZWQpCi0jZWxzZQotc2hvd19jcmVkZW50aWFsKGtjb250ZXh0LCBjcmVkKQotICAgIGtyYjVf Y29udGV4dCAgICAgICAgICBrY29udGV4dDsKLSAgICByZWdpc3RlciBrcmI1X2NyZWRzICogY3Jl ZDsKLSNlbmRpZgotewotICAgIGtyYjVfZXJyb3JfY29kZSByZXR2YWw9MDsKLSAgICBrcmI1X3Rp Y2tldCAqdGt0PU5VTEw7Ci0gICAgY2hhciAqbmFtZT1OVUxMLCAqc25hbWU9TlVMTCwgKmZsYWdz PU5VTEw7Ci0gICAgaW50IGV4dHJhX2ZpZWxkID0gMDsKLQotICAgIHJldHZhbCA9IGtyYjVfdW5w YXJzZV9uYW1lKGtjb250ZXh0LCBjcmVkLT5jbGllbnQsICZuYW1lKTsKLSAgICBpZiAocmV0dmFs KSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSB1bnBhcnNp bmcgY2xpZW50IG5hbWUiLCIiLHJldHZhbCk7Ci0gICAgICAgIGtyYjVfZXJybm8gPSByZXR2YWw7 Ci0gICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykp OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHJldHZhbCA9IGtyYjVfdW5wYXJzZV9uYW1l KGtjb250ZXh0LCBjcmVkLT5zZXJ2ZXIsICZzbmFtZSk7Ci0gICAgaWYgKHJldHZhbCkgewotICAg ICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgdW5wYXJzaW5nIHNlcnZl ciBuYW1lIiwiIixyZXR2YWwpOwotICAgICAgICBmcmVlKG5hbWUpOwotICAgICAgICBrcmI1X2Vy cm5vID0gcmV0dmFsOwotICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdl KGtyYjVfZXJybm8pKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWNyZWQtPnRp bWVzLnN0YXJ0dGltZSkKLSAgICAgICAgY3JlZC0+dGltZXMuc3RhcnR0aW1lID0gY3JlZC0+dGlt ZXMuYXV0aHRpbWU7Ci0KLSAgICBwcmludHRpbWUoY3JlZC0+dGltZXMuc3RhcnR0aW1lKTsKLSAg ICBwcmludGYoIiAgIik7Ci0KLSAgICBpZiAoIHRpbWUoMCkgPCBjcmVkLT50aW1lcy5lbmR0aW1l ICkKLSAgICAgICAgcHJpbnR0aW1lKGNyZWQtPnRpbWVzLmVuZHRpbWUpOwotICAgIGVsc2UKLSAg ICAgICAgcHJpbnRmKCIqKiBleHBpcmVkICoqICIpOwotCi0gICAgcHJpbnRmKCIgICVzXHJcbiIs IHNuYW1lKTsKLQotICAgIGlmIChzdHJjbXAobmFtZSwgZGVmbmFtZSkpIHsKLSAgICAgICAgcHJp bnRmKCIgICBmb3IgY2xpZW50ICVzIiwgbmFtZSk7Ci0gICAgICAgIGV4dHJhX2ZpZWxkKys7Ci0g ICAgfQotCi0gICAgaWYgKGNyZWQtPnRpbWVzLnJlbmV3X3RpbGwpIHsKLSAgICAgICAgaWYgKCFl eHRyYV9maWVsZCkKLSAgICAgICAgICAgIHByaW50ZigiICAgIik7Ci0gICAgICAgIGVsc2UKLSAg ICAgICAgICAgIHByaW50ZigiLCAiKTsKLSAgICAgICAgcHJpbnRmKCJyZW5ldyB1bnRpbCAiKTsK LSAgICAgICAgcHJpbnR0aW1lKGNyZWQtPnRpbWVzLnJlbmV3X3RpbGwpOwotICAgICAgICBleHRy YV9maWVsZCArPSAyOwotICAgIH0KLQotICAgIGlmIChleHRyYV9maWVsZCA+IDMpIHsKLSAgICAg ICAgcHJpbnRmKCJcclxuIik7Ci0gICAgICAgIGV4dHJhX2ZpZWxkID0gMDsKLSAgICB9Ci0KLSAg ICBpZiAoc2hvd19mbGFncykgewotICAgICAgICBmbGFncyA9IGZsYWdzX3N0cmluZyhjcmVkKTsK LSAgICAgICAgaWYgKGZsYWdzICYmICpmbGFncykgewotICAgICAgICAgICAgaWYgKCFleHRyYV9m aWVsZCkKLSAgICAgICAgICAgICAgICBwcmludGYoIiAgICIpOwotICAgICAgICAgICAgZWxzZQot ICAgICAgICAgICAgICAgIHByaW50ZigiLCAiKTsKLSAgICAgICAgICAgIHByaW50ZigiRmxhZ3M6 ICVzIiwgZmxhZ3MpOwotICAgICAgICAgICAgZXh0cmFfZmllbGQrKzsKLSAgICAgICAgfQotICAg IH0KLQotICAgIGlmIChleHRyYV9maWVsZCA+IDIpIHsKLSAgICAgICAgcHJpbnRmKCJcclxuIik7 Ci0gICAgICAgIGV4dHJhX2ZpZWxkID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoc2hvd19ldHlwZSkg ewotICAgICAgICByZXR2YWwgPSBkZWNvZGVfa3JiNV90aWNrZXQoJmNyZWQtPnRpY2tldCwgJnRr dCk7Ci0gICAgICAgIGlmICghZXh0cmFfZmllbGQpCi0gICAgICAgICAgICBwcmludGYoIiAgICIp OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcmludGYoIiwgIik7Ci0jaWZkZWYgSEVJTURB TAotICAgICAgICBwcmludGYoIkV0eXBlIChza2V5LCB0a3QpOiAlcywgJXMgIiwKLSAgICAgICAg ICAgICAgIGV0eXBlX3N0cmluZyhjcmVkLT5zZXNzaW9uLmtleXR5cGUpLAotICAgICAgICAgICAg ICAgZXR5cGVfc3RyaW5nKHRrdC0+ZW5jX3BhcnQua2V5dHlwZSkpOwotI2Vsc2UgLyogSEVJTURB TCAqLwotICAgICAgICBwcmludGYoIkV0eXBlIChza2V5LCB0a3QpOiAlcywgJXMgIiwKLSAgICAg ICAgICAgICAgIGV0eXBlX3N0cmluZyhjcmVkLT5rZXlibG9jay5lbmN0eXBlKSwKLSAgICAgICAg ICAgICAgIGV0eXBlX3N0cmluZyh0a3QtPmVuY19wYXJ0LmVuY3R5cGUpKTsKLSNlbmRpZiAvKiBI RUlNREFMICovCi0gICAgICAgIGtyYjVfZnJlZV90aWNrZXQoa2NvbnRleHQsIHRrdCk7Ci0gICAg ICAgIGV4dHJhX2ZpZWxkKys7Ci0gICAgfQotCi0gICAgLyogaWYgYW55IGFkZGl0aW9uYWwgaW5m byB3YXMgcHJpbnRlZCwgZXh0cmFfZmllbGQgaXMgbm9uLXplcm8gKi8KLSAgICBpZiAoZXh0cmFf ZmllbGQpCi0gICAgICAgIHByaW50ZigiXHJcbiIpOwotCi0gICAgaWYgKCBzaG93X2FkZHIgKSB7 Ci0gICAgICAgIGlmICghY3JlZC0+YWRkcmVzc2VzIHx8ICFjcmVkLT5hZGRyZXNzZXNbMF0pIHsK LSAgICAgICAgICAgIHByaW50ZigiXHRBZGRyZXNzZXM6IChub25lKVxyXG4iKTsKLSAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgZm9yIChpPTA7IGNyZWQt PmFkZHJlc3Nlc1tpXTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkpCi0gICAgICAgICAg ICAgICAgICAgIHByaW50ZigiICAgICAgICAgICAgICAiKTsKLSAgICAgICAgICAgICAgICBlbHNl Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgQWRkcmVzc2VzOiAiKTsKLSAgICAgICAg ICAgICAgICBvbmVfYWRkcihjcmVkLT5hZGRyZXNzZXNbaV0pOwotICAgICAgICAgICAgICAgIHBy aW50ZigiXHJcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAga3Ji NV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsbmFtZSk7Ci0gICAga3JiNV9mcmVlX3VucGFy c2VkX25hbWUoa2NvbnRleHQsc25hbWUpOwotCi0gICAga3JiNV9lcnJubyA9IDA7Ci0gICAgbWFr ZXN0cigma3JiNV9lcnJtc2csIk9LIik7Ci19Ci0KLXN0YXRpYyBWT0lECi0jaWZkZWYgQ0tfQU5T SUMKLWZpbGxpdChpbnQgbnVtLCBpbnQgYykKLSNlbHNlCi1maWxsaXQobnVtLCBjKSBpbnQgbnVt OyBpbnQgYzsKLSNlbmRpZgotewotICAgIGludCBpOwotCi0gICAgZm9yIChpPTA7IGk8bnVtOyBp KyspCi0gICAgICAgIHByaW50ZigiJWMiLGMpOwotfQotI2VuZGlmIC8qIEtMSVNUICovCi0jZW5k aWYgLyogS1JCNSAqLwotCi0jaWZkZWYgS1JCNAotI2RlZmluZSBLREVCVUcgMQotaW50IGs0ZGVi dWcgPSAwOyAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA0IHJ1bnRpbWUgZGVidWdnaW5nICov Ci0KLSNpZmRlZiBLSU5JVAotI2RlZmluZSBLUkJfREVGQVVMVF9MSUZFIDEyMCAvKiAxMCBob3Vy cyBpbiA1IG1pbnV0ZSBpbnRlcnZhbHMgKi8KLQotI2lmZGVmIFNOSzQKLS8qIFNOSzQgaXMgYSBo YXJkd2FyZSBhdXRoZW50aWNhdGlvbiBzeXN0ZW0gdXNlZCB0byBwcmUtYXV0aGVudGljYXRlICAg ICovCi0vKiBhIHRpY2tldCBnZXR0aW5nIHRpY2tldC4gIFdlIGRvIG5vdCBzdXBwb3J0IHRoaXMg Y29kZSBhdCB0aGUgcHJlc2VudCAqLwotLyogdGltZSBpbiBLZXJtaXQuICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLXZvaWQKLWdldF9pbnB1 dChzLCBzaXplLCBzdHJlYW0pCi1jaGFyICpzOwotaW50IHNpemU7Ci1GSUxFICpzdHJlYW07Ci17 Ci0gICAgY2hhciAqcDsKLQotICAgIGlmIChmZ2V0cyhzLCBzaXplLCBzdHJlYW0pID09IE5VTEwp Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgaWYgKCAocCA9IHN0cmNocihzLCAnXG4nKSkgIT0gTlVM TCkKLSAgICAgICAgKnAgPSAnXDAnOwotfQotI2VuZGlmIC8qIFNOSzQgKi8KLQotI2lmZGVmIENP TU1FTlQKLXN0YXRpYyBjaGFyCi0jaWZkZWYgQ0tfQU5TSUMKLWhleF9zY2FuX255YmJsZShjaGFy IGMpCi0jZWxzZQotaGV4X3NjYW5fbnliYmxlKGMpIGNoYXIgYzsKLSNlbmRpZgotewotICAgIGlm IChjID49ICcwJyAmJiBjIDw9ICc5JykKLSAgICAgICAgcmV0dXJuIGMgLSAnMCc7Ci0gICAgaWYg KGMgPj0gJ0EnICYmIGMgPD0gJ0YnKQotICAgICAgICByZXR1cm4gYyAtICdBJyArIDEwOwotICAg IGlmIChjID49ICdhJyAmJiBjIDw9ICdmJykKLSAgICAgICAgcmV0dXJuIGMgLSAnYScgKyAxMDsK LSAgICByZXR1cm4gLTE7Ci19Ci0KLS8qIHJldHVybnM6IE5VTEwgZm9yIG9rLCBwb2ludGVyIHRv IGVycm9yIHN0cmluZyBmb3IgYmFkIGlucHV0ICovCi1zdGF0aWMgY2hhcioKLSNpZmRlZiBDS19B TlNJQwotaGV4X3NjYW5fZm91cl9ieXRlcyhjaGFyICpvdXQsIGNoYXIgKmluKQotI2Vsc2UKLWhl eF9zY2FuX2ZvdXJfYnl0ZXMob3V0LCBpbikgY2hhciAqb3V0OyBjaGFyICppbjsKLSNlbmRpZgot ewotICAgIGludCBpOwotICAgIGludCBjOwotICAgIGNoYXIgYzE7Ci0gICAgZm9yIChpPTA7IGk8 ODsgaSsrKSB7Ci0gICAgICAgIGlmKCFpbltpXSkKLSAgICAgICAgICAgIHJldHVybiAibm90IGVu b3VnaCBpbnB1dCI7Ci0gICAgICAgIGMgPSBoZXhfc2Nhbl9ueWJibGUoaW5baV0pOwotICAgICAg ICBpZihjPDApCi0gICAgICAgICAgICByZXR1cm4gImludmFsaWQgZGlnaXQiOwotICAgICAgICBj MSA9IGM7Ci0gICAgICAgIGkrKzsKLSAgICAgICAgaWYoIWluW2ldKQotICAgICAgICAgICAgcmV0 dXJuICJub3QgZW5vdWdoIGlucHV0IjsKLSAgICAgICAgYyA9IGhleF9zY2FuX255YmJsZShpbltp XSk7Ci0gICAgICAgIGlmKGM8MCkKLSAgICAgICAgICAgIHJldHVybiAiaW52YWxpZCBkaWdpdCI7 Ci0gICAgICAgICpvdXQrKyA9IChjMSA8PCA0KSArIGM7Ci0gICAgfQotICAgIHN3aXRjaChpbltp XSkgewotICAgIGNhc2UgMDoKLSAgICBjYXNlICdccic6Ci0gICAgY2FzZSAnXG4nOgotICAgICAg ICByZXR1cm4gTlVMTDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gImV4dHJhIGNoYXJh Y3RlcnMgYXQgZW5kIG9mIGlucHV0IjsKLSAgICB9Ci19Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot Ci0vKiBja19rcmI0X2luaXRUR1QoKSByZXR1cm5zIDAgb24gc3VjY2VzcyAqLwotaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLWNrX2tyYjRfaW5pdFRHVChzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCwgc3Ry dWN0IGtyYjRfaW5pdF9kYXRhICogaW5pdCkKLSNlbHNlCi1ja19rcmI0X2luaXRUR1Qob3AsaW5p dCkKLSAgICBzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCwgc3RydWN0IGtyYjRfaW5pdF9kYXRhICog aW5pdAotI2VuZGlmCi17Ci0gICAgY2hhciAgICBhbmFtZVtBTkFNRV9TWisxXTsKLSAgICBjaGFy ICAgIGluc3RbSU5TVF9TWisxXTsKLSAgICBjaGFyICAgIHJlYWxtW1JFQUxNX1NaKzFdOwotICAg IGNoYXIgICAgKnBhc3N3b3JkPU5VTEw7Ci0gICAgY2hhciAgICBwYXNzd2RbODBdPSIiOwotICAg IGNoYXIgICAgKnVzZXJuYW1lID0gTlVMTDsKLSAgICBjaGFyICAgICp1c2VybmFtZXB0cj1OVUxM OwotICAgIGludCAgICAgaWZsYWcsICAgICAgLyogSW5zdGFuY2UgKi8KLSAgICAgICAgICAgIHJm bGFnLCAgICAgIC8qIFJlYWxtICovCi0gICAgICAgICAgICB2ZmxhZywgICAgICAvKiBWZXJib3Nl ICovCi0gICAgICAgICAgICBsZmxhZywgICAgICAvKiBMaWZldGltZSAqLwotICAgICAgICAgICAg cGZsYWcsICAgICAgLyogUHJlYXV0aCAqLwotICAgICAgICAgICAgbGlmZXRpbWU9S1JCX0RFRkFV TFRfTElGRSwgICAvKiBMaWZlIFRpbWUgKi8KLSAgICAgICAgICAgIGtfZXJybm87Ci0gICAgcmVn aXN0ZXIgY2hhciAqY3A7Ci0gICAgcmVnaXN0ZXIgaTsKLQotICAgIGlmICggIWNrX2tyYjRfaXNf aW5zdGFsbGVkKCkgKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgKmluc3QgPSAqcmVhbG0g PSAnXDAnOwotICAgIGlmbGFnID0gcmZsYWcgPSB2ZmxhZyA9IGxmbGFnID0gcGZsYWcgPSAwOwot Ci0gICAgdmZsYWcgPSBpbml0LT52ZXJib3NlOwotICAgIHBmbGFnID0gaW5pdC0+cHJlYXV0aDsK LQotICAgIGlmICggaW5pdC0+bGlmZXRpbWUgKSB7Ci0gICAgICAgIGxpZmV0aW1lID0gaW5pdC0+ bGlmZXRpbWU8NT8xOmluaXQtPmxpZmV0aW1lLzU7Ci0gICAgICAgIGlmICggbGlmZXRpbWUgPiAy NTUgKSBsaWZldGltZSA9IDI1NTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBsaWZldGltZSA9 IEtSQl9ERUZBVUxUX0xJRkU7Ci0KLSAgICB1c2VybmFtZSA9IGluaXQtPnByaW5jaXBhbDsKLQot ICAgIGlmICh1c2VybmFtZSAmJiB1c2VybmFtZVswXSAmJgotICAgICAgICAoa19lcnJubyA9IGtu YW1lX3BhcnNlKGFuYW1lLCBpbnN0LCByZWFsbSwgdXNlcm5hbWUpKQotICAgICAgICAhPSBBVVRI X1NVQ0NFU1MpIHsKLSAgICAgICAga3JiNF9lcnJubyA9IGtfZXJybm87Ci0gICAgICAgIG1ha2Vz dHIoJmtyYjRfZXJybXNnLGtyYl9nZXRfZXJyX3RleHRfZW50cnkoa19lcnJubykpOwotICAgICAg ICBwcmludGYoIiVzXHJcbiIsIGtyYl9nZXRfZXJyX3RleHRfZW50cnkoa19lcnJubykpOwotICAg ICAgICBpZmxhZyA9IHJmbGFnID0gMTsKLSAgICAgICAgdXNlcm5hbWUgPSBOVUxMOwotICAgIH0K LQotICAgIGlmICggaW5pdC0+cmVhbG0gKSB7Ci0gICAgICAgIGNrc3RybmNweShyZWFsbSxpbml0 LT5yZWFsbSxSRUFMTV9TWik7Ci0gICAgfQotCi0gICAgaWYgKCBpbml0LT5pbnN0YW5jZSApIHsK LSAgICAgICAgY2tzdHJuY3B5KGluc3QsaW5pdC0+aW5zdGFuY2UsIElOU1RfU1opOwotICAgIH0K LQotI2lmZGVmIENPTU1FTlQKLSAgICBpZiAoIHZmbGFnICkKLSAgICAgICAgcHJpbnRmKCJLZXJi ZXJvcyBJViBpbml0aWFsaXphdGlvblxyXG4iKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAg ICBpZiAoIXVzZXJuYW1lIHx8ICF1c2VybmFtZVswXSkgewotICAgICAgICBkZWJ1ZyhGMTAwLCJj a19rcmI0X2luaXRUR1Qgbm8gdXNlcm5hbWUgc3BlY2lmaWVkIiwiIiwwKTsKLSAgICAgICAgcHJp bnRmKCI/SW52YWxpZCBwcmluY2lwYWwgc3BlY2lmaWVkLlxyXG4iKTsKLSAgICAgICAga3JiNF9l cnJubyA9IC0xOwotICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZywiTm8gcHJpbmNpcGFsIHNw ZWNpZmllZCIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAoISpyZWFsbSkg ewotICAgICAgICBja3N0cm5jcHkocmVhbG0sY2tfa3JiNF9nZXRyZWFsbSgpLFJFQUxNX1NaKTsK LSAgICB9Ci0KLSAgICBpZiAoIGluaXQtPnBhc3N3b3JkICkKLSAgICAgICAgcGFzc3dvcmQgPSBp bml0LT5wYXNzd29yZDsKLSAgICBlbHNlIHsKLSAgICAgICAgY2hhciBwcm1wdFs4MF07Ci0gICAg ICAgIGludCBvazsKLQotICAgICAgICBja21ha3htc2cocHJtcHQsc2l6ZW9mKHBybXB0KSwKLSAg ICAgICAgICAgICAgICAgICJLZXJiZXJvcyA0IFBhc3N3b3JkIGZvciAiLHVzZXJuYW1lLCJAIixy ZWFsbSwiOiAiLAotICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwpOwotICAgICAgICBvayA9IHVxX3R4dChOVUxMLHBybXB0LDIsTlVMTCxwYXNzd2Qs ODAsTlVMTCxERUZBVUxUX1VRX1RJTUVPVVQpOwotICAgICAgICBpZiAoIG9rICkKLSAgICAgICAg ICAgIHBhc3N3b3JkID0gcGFzc3dkOwotICAgIH0KLQotICAgIGlmIChwZmxhZykgewotICAgICAg ICBrX2Vycm5vID0ga3JiX2dldF9wd19pbl90a3RfcHJlYXV0aCggYW5hbWUsIGluc3QsIHJlYWxt LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtyYnRndCIs IHJlYWxtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlm ZXRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNz d29yZCk7Ci0gICAgICAgIGlmIChrX2Vycm5vID09IC0xKSB7ICAgIC8qIHByZWF1dGggbWV0aG9k IG5vdCBhdmFpbGFibGUgKi8KLSAgICAgICAgICAgIGtfZXJybm8gPSBrcmJfZ2V0X3B3X2luX3Rr dChhbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCwg cmVhbG0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrcmJ0Z3Qi LCByZWFsbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRp bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkKTsK LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGtfZXJybm8gPSBrcmJfZ2V0X3B3X2lu X3RrdChhbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LCBy ZWFsbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia3JidGd0IiwgcmVh bG0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQpOwotICAgIH0KLQotICAg IG1lbXNldChwYXNzd2QsMCxzaXplb2YocGFzc3dkKSk7Ci0gICAgaWYgKGtfZXJybm8pIHsKLSAg ICAgICAgcHJpbnRmKCIlcyBmb3IgcHJpbmNpcGFsICVzJXMlc0Alc1xyXG4iLAotICAgICAgICAg ICAgICAgIGtyYl9nZXRfZXJyX3RleHRfZW50cnkoa19lcnJubyksIGFuYW1lLAotICAgICAgICAg ICAgICAgIGluc3RbMF0/Ii4iOiIiLCBpbnN0LCByZWFsbSk7Ci0gICAgICAgIGtyYjRfZXJybm8g PSBrX2Vycm5vOwotICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxrcmJfZ2V0X2Vycl90ZXh0 X2VudHJ5KGtfZXJybm8pKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9IGVsc2UgaWYgKHZm bGFnKSB7Ci0gICAgICAgIHByaW50ZigiUmVzdWx0IGZyb20gcmVhbG0gJXM6ICIsIHJlYWxtKTsK LSAgICAgICAgcHJpbnRmKCIlc1xyXG4iLCBrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5KGtfZXJybm8p KTsKLSAgICB9Ci0gICAga3JiNF9lcnJubyA9IGtfZXJybm87Ci0gICAgbWFrZXN0cigma3JiNF9l cnJtc2csa3JiX2dldF9lcnJfdGV4dF9lbnRyeShrX2Vycm5vKSk7Ci0gICAgcmV0dXJuKDApOwot fQotI2VuZGlmIC8qIEtJTklUICovCi0jaWZkZWYgS0RFU1RST1kKLWludAotI2lmZGVmIENLX0FO U0lDCi1ja19rcmI0X2Rlc3Ryb3koc3RydWN0IGtyYl9vcF9kYXRhICogb3ApCi0jZWxzZQotY2tf a3JiNF9kZXN0cm95KG9wKSBzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcDsKLSNlbmRpZgotewotICAg IGludCBrX2Vycm5vPTA7Ci0KLSAgICBpZiAoICFja19rcmI0X2lzX2luc3RhbGxlZCgpICkKLSAg ICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGtfZXJybm8gPSBkZXN0X3RrdCgpOwotCi0gICAga3Ji NF9lcnJubyA9IGtfZXJybm87Ci0gICAgbWFrZXN0cigma3JiNF9lcnJtc2csa3JiX2dldF9lcnJf dGV4dF9lbnRyeShrX2Vycm5vKSk7Ci0KLSAgICBpZiAoa19lcnJubyA9PSAwKQotICAgICAgICBw cmludGYoIlRpY2tldHMgZGVzdHJveWVkLlxyXG4iKTsKLSAgICBlbHNlIGlmIChrX2Vycm5vID09 IFJFVF9US0ZJTCkKLSAgICAgICAgcHJpbnRmKCJObyB0aWNrZXRzIHRvIGRlc3Ryb3kuXHJcbiIp OwotICAgIGVsc2UgewotICAgICAgICBwcmludGYoIlRpY2tldHMgTUFZIE5PVCBiZSBkZXN0cm95 ZWQuXHJcbiIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19 Ci0jZW5kaWYgLyogS0RFU1RST1kgKi8KLSNpZmRlZiBLTElTVAotX1BST1RPVFlQKHN0YXRpYyBp bnQgZGlzcGxheV90a3RmaWxlLChjaGFyICosIGludCwgaW50LCBpbnQpKTsKLQotaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLWNrX2tyYjRfbGlzdF9jcmVkcyhzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCkK LSNlbHNlCi1ja19rcmI0X2xpc3RfY3JlZHMob3ApIHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wOwot I2VuZGlmCi17Ci0gICAgaW50ICAgICBsb25nX2Zvcm0gPSAxOwotICAgIGludCAgICAgdGd0X3Rl c3QgPSAwOwotICAgIGludCAgICAgZG9fc3J2dGFiID0gMDsKLSAgICBpbnQgICAgIHNob3dfa3Zu b3MgPSAwOwotICAgIGNoYXIgICAqdGt0X2ZpbGUgPSBOVUxMOwotCi0gICAgaWYgKCAhY2tfa3Ji NF9pc19pbnN0YWxsZWQoKSApCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAoIG9wLT5j YWNoZSApCi0gICAgICAgIHRrdF9maWxlID0gb3AtPmNhY2hlOwotCi0gICAgaWYgKCBrNGRlYnVn ICkgewotICAgICAgICBzaG93X2t2bm9zID0gMTsKLSAgICB9Ci0KLSAgICBpZiAoZG9fc3J2dGFi KQotICAgICAgICByZXR1cm4oZGlzcGxheV9zcnZ0YWIodGt0X2ZpbGUpKTsKLSAgICBlbHNlCi0g ICAgICAgIHJldHVybihkaXNwbGF5X3RrdGZpbGUodGt0X2ZpbGUsIHRndF90ZXN0LCBsb25nX2Zv cm0sIHNob3dfa3Zub3MpKTsKLX0KLQotI2lmbmRlZiBLUkI1Ci1zdGF0aWMgaW50IHRpbWVzdGFt cF93aWR0aD0wOwotCi1zdGF0aWMgY2hhciAgICoKLSNpZmRlZiBDS19BTlNJQwotc2hvcnRfZGF0 ZShsb25nICAgKmRwKQotI2Vsc2UKLXNob3J0X2RhdGUoZHApIGxvbmcgICAqZHA7Ci0jZW5kaWYK LXsKLSAgICByZWdpc3RlciBjaGFyICpjcDsKLSAgICBleHRlcm4gY2hhciAqY3RpbWUoKTsKLSAg ICBjcCA9IGN0aW1lKGRwKSArIDQ7Ci0gICAgY3BbMTVdID0gJ1wwJzsKLSAgICByZXR1cm4gKGNw KTsKLX0KLQotCi1zdGF0aWMgVk9JRAotI2lmZGVmIENLX0FOU0lDCi1wcmludHRpbWUodGltZV90 IHR2KQotI2Vsc2UKLXByaW50dGltZSh0dikgdGltZV90IHR2OwotI2VuZGlmCi17Ci0gICAgY2hh ciB0aW1lc3RyaW5nW0JVRlNJWl07Ci0gICAgY2hhciBmb3JtYXRbMTJdOwotICAgIGNoYXIgZmls bDsKLQotICAgIGZpbGwgPSAnICc7Ci0gICAgc3ByaW50Zihmb3JtYXQsIiUlLSVkcyIsdGltZXN0 YW1wX3dpZHRoKTsgICAvKiBzYWZlICovCi0gICAgcHJpbnRmKGZvcm1hdCxzaG9ydF9kYXRlKCZ0 dikpOwotfQotI2VuZGlmIC8qIEtSQjUgKi8KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lD Ci1kaXNwbGF5X3RrdGZpbGUoY2hhciAqZmlsZSwgaW50IHRndF90ZXN0LCBpbnQgbG9uZ19mb3Jt LCBpbnQgc2hvd19rdm5vcykKLSNlbHNlCi1kaXNwbGF5X3RrdGZpbGUoZmlsZSx0Z3RfdGVzdCxs b25nX2Zvcm0sc2hvd19rdm5vcykKLSAgICBjaGFyICpmaWxlOyBpbnQgdGd0X3Rlc3Q7IGludCBs b25nX2Zvcm07IGludCBzaG93X2t2bm9zOwotI2VuZGlmCi17Ci0gICAgY2hhciAgICBwbmFtZVtB TkFNRV9TWl07Ci0gICAgY2hhciAgICBwaW5zdFtJTlNUX1NaXTsKLSAgICBjaGFyICAgIHByZWFs bVtSRUFMTV9TWl07Ci0gICAgY2hhciAgICBidWYxWzIwXSwgYnVmMlsyMF07Ci0gICAgaW50ICAg ICBrX2Vycm5vOwotI2lmZGVmIE9TMgotICAgIExFQVNIX0NSRURFTlRJQUxTIGNyZWRzOwotI2Vs c2UgLyogT1MyICovCi0gICAgQ1JFREVOVElBTFMgY3JlZHM7Ci0jZW5kaWYgLyogT1MyICovCi0g ICAgaW50ICAgICBoZWFkZXIgPSAxOwotCi0gICAgZmlsZSA9IHRrdF9zdHJpbmcoKTsKLQotICAg IGlmIChsb25nX2Zvcm0pIHsKLSAgICAgICAgcHJpbnRmKCJUaWNrZXQgY2FjaGU6ICAgICAgJXNc clxuIiwgZmlsZSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBTaW5jZSBrcmJfZ2V0X3RmX3Jl YWxtIHdpbGwgcmV0dXJuIGEgdGlja2V0X2ZpbGUgZXJyb3IsCi0gICAgICogd2Ugd2lsbCBjYWxs IHRmX2luaXQgYW5kIHRmX2Nsb3NlIGZpcnN0IHRvIGZpbHRlciBvdXQKLSAgICAgKiB0aGluZ3Mg bGlrZSBubyB0aWNrZXQgZmlsZS4gIE90aGVyd2lzZSwgdGhlIGVycm9yIHRoYXQKLSAgICAgKiB0 aGUgdXNlciB3b3VsZCBzZWUgd291bGQgYmUKLSAgICAgKiBrbGlzdDogY2FuJ3QgZmluZCByZWFs bSBvZiB0aWNrZXQgZmlsZTogTm8gdGlja2V0IGZpbGUgKHRmX3V0aWwpCi0gICAgICogaW5zdGVh ZCBvZgotICAgICAqIGtsaXN0OiBObyB0aWNrZXQgZmlsZSAodGZfdXRpbCkKLSAgICAgKi8KLQot ICAgIC8qIE9wZW4gdGlja2V0IGZpbGUgKi8KLSAgICBpZiAoa19lcnJubyA9IHRmX2luaXQoZmls ZSwgUl9US1RfRklMKSkgewotICAgICAgICBpZiAoIXRndF90ZXN0KQotICAgICAgICAgICAgcHJp bnRmKCIlc1xyXG4iLCBrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5IChrX2Vycm5vKSk7Ci0gICAgICAg IGtyYjRfZXJybm8gPSBrX2Vycm5vOwotICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxrcmJf Z2V0X2Vycl90ZXh0X2VudHJ5KGtfZXJybm8pKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9 Ci0KLQotICAgIC8qIENsb3NlIHRpY2tldCBmaWxlICovCi0gICAgKHZvaWQpIHRmX2Nsb3NlKCk7 Ci0KLSAgICAvKgotICAgICAqIFdlIG11c3QgZmluZCB0aGUgcmVhbG0gb2YgdGhlIHRpY2tldCBm aWxlIGhlcmUgYmVmb3JlIGNhbGxpbmcKLSAgICAgKiB0Zl9pbml0IGJlY2F1c2Ugc2luY2UgdGhl IHJlYWxtIG9mIHRoZSB0aWNrZXQgZmlsZSBpcyBub3QKLSAgICAgKiByZWFsbHkgc3RvcmVkIGlu IHRoZSBwcmluY2lwYWwgc2VjdGlvbiBvZiB0aGUgZmlsZSwgdGhlCi0gICAgICogcm91dGluZSB3 ZSB1c2UgbXVzdCBpdHNlbGYgY2FsbCB0Zl9pbml0IGFuZCB0Zl9jbG9zZS4KLSAgICAgKi8KLSAg ICBpZiAoKGtfZXJybm8gPSBrcmJfZ2V0X3RmX3JlYWxtKGZpbGUsIHByZWFsbSkpICE9IEFVVEhf U1VDQ0VTUykgewotICAgICAgICBpZiAoIXRndF90ZXN0KQotICAgICAgICAgICAgcHJpbnRmKCJj YW4ndCBmaW5kIHJlYWxtIG9mIHRpY2tldCBmaWxlOiAlc1xyXG4iLAotICAgICAgICAgICAgICAg ICAgICBrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5IChrX2Vycm5vKSk7Ci0gICAgICAgIGtyYjRfZXJy bm8gPSBrX2Vycm5vOwotICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxrcmJfZ2V0X2Vycl90 ZXh0X2VudHJ5KGtfZXJybm8pKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICAv KiBPcGVuIHRpY2tldCBmaWxlICovCi0gICAgaWYgKGtfZXJybm8gPSB0Zl9pbml0KGZpbGUsIFJf VEtUX0ZJTCkpIHsKLSAgICAgICAgaWYgKCF0Z3RfdGVzdCkKLSAgICAgICAgICAgIHByaW50Zigi JXNcclxuIiwga3JiX2dldF9lcnJfdGV4dF9lbnRyeSAoa19lcnJubykpOwotICAgICAgICBrcmI0 X2Vycm5vID0ga19lcnJubzsKLSAgICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csa3JiX2dldF9l cnJfdGV4dF9lbnRyeShrX2Vycm5vKSk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAg IC8qIEdldCBwcmluY2lwYWwgbmFtZSBhbmQgaW5zdGFuY2UgKi8KLSAgICBpZiAoKGtfZXJybm8g PSB0Zl9nZXRfcG5hbWUocG5hbWUpKSB8fAotICAgICAgICAgKGtfZXJybm8gPSB0Zl9nZXRfcGlu c3QocGluc3QpKSkgewotICAgICAgICAodm9pZCkgdGZfY2xvc2UoKTsKLSAgICAgICAgaWYgKCF0 Z3RfdGVzdCkKLSAgICAgICAgICAgIHByaW50ZigiJXNcclxuIiwga3JiX2dldF9lcnJfdGV4dF9l bnRyeSAoa19lcnJubykpOwotICAgICAgICBrcmI0X2Vycm5vID0ga19lcnJubzsKLSAgICAgICAg bWFrZXN0cigma3JiNF9lcnJtc2csa3JiX2dldF9lcnJfdGV4dF9lbnRyeShrX2Vycm5vKSk7Ci0g ICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBZb3UgbWF5IHRoaW5r IHRoYXQgdGhpcyBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBnZXQgdGhlCi0gICAgICogcmVhbG0g b2YgdGhlIHRpY2tldCBmaWxlLCBidXQgaXQgY2FuJ3QgYmUgZG9uZSBoZXJlIGFzIHRoZQotICAg ICAqIHJvdXRpbmUgdG8gZG8gdGhpcyBtdXN0IG9wZW4gdGhlIHRpY2tldCBmaWxlLiAgVGhpcyBp cyB3aHkKLSAgICAgKiBpdCB3YXMgZG9uZSBiZWZvcmUgdGZfaW5pdC4KLSAgICAgKi8KLQotICAg IGlmICghdGd0X3Rlc3QgJiYgbG9uZ19mb3JtKQotICAgICAgICBwcmludGYoIkRlZmF1bHQgcHJp bmNpcGFsOiAlcyVzJXMlcyVzXHJcblxyXG4iLCBwbmFtZSwKLSAgICAgICAgICAgICAgIChwaW5z dFswXSA/ICIuIiA6ICIiKSwgcGluc3QsCi0gICAgICAgICAgICAgICAocHJlYWxtWzBdID8gIkAi IDogIiIpLCBwcmVhbG0pOwotCi0gICAgd2hpbGUgKChrX2Vycm5vID0gdGZfZ2V0X2NyZWQoJmNy ZWRzKSkgPT0gQVVUSF9TVUNDRVNTKSB7Ci0gICAgICAgIGlmICghdGd0X3Rlc3QgJiYgbG9uZ19m b3JtICYmIGhlYWRlcikgewotICAgICAgICAgICAgcHJpbnRmKCIlLTE3cyAgJS0xN3MgICVzXHJc biIsCi0gICAgICAgICAgICAgICAgICAgIlZhbGlkIHN0YXJ0aW5nIiwgIkV4cGlyZXMiLCAiU2Vy dmljZSBwcmluY2lwYWwiKTsKLSAgICAgICAgICAgIGhlYWRlciA9IDA7Ci0gICAgICAgIH0KLSAg ICAgICAgaWYgKHRndF90ZXN0KSB7Ci0gICAgICAgICAgICBjcmVkcy5pc3N1ZV9kYXRlICs9ICgo dW5zaWduZWQgY2hhcikgY3JlZHMubGlmZXRpbWUpICogNSAqIDYwOwotICAgICAgICAgICAgaWYg KCFzdHJjbXAoY3JlZHMuc2VydmljZSwgImtyYnRndCIpICYmCi0gICAgICAgICAgICAgICAgIXN0 cmNtcChjcmVkcy5pbnN0YW5jZSwgcHJlYWxtKSkgewotICAgICAgICAgICAgICAgIGtyYjRfZXJy bm8gPSBrX2Vycm5vOwotICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLGtyYl9n ZXRfZXJyX3RleHRfZW50cnkoa19lcnJubykpOwotCi0gICAgICAgICAgICAgICAgKHZvaWQpIHRm X2Nsb3NlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRpbWUoMCkgPCBjcmVkcy5pc3N1ZV9kYXRl KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsgICAgICAgICAgLyogdGd0IGhhc24n dCBleHBpcmVkICovCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC0xKTsgICAgICAgICAvKiBoYXMgZXhwaXJlZCAqLwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAg ICAvKiBub3QgYSB0Z3QgKi8KLSAgICAgICAgfQotICAgICAgICBpZiAobG9uZ19mb3JtKSB7Ci0g ICAgICAgICAgICB0aW1lc3RhbXBfd2lkdGggPSAxNzsgICAgICAgLyogZm9yIGs1IGRpc3BsYXkg ZnVuY3Rpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBp ZiBhdmFpbGFibGUgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHJpbnR0aW1lKGNyZWRzLmlz c3VlX2RhdGUpOwotICAgICAgICAgICAgcHJpbnRmKCIgICIpOwotICAgICAgICAgICAgY3JlZHMu aXNzdWVfZGF0ZSArPSAoKHVuc2lnbmVkIGNoYXIpIGNyZWRzLmxpZmV0aW1lKSAqIDUgKiA2MDsK LSAgICAgICAgICAgIGlmICggdGltZSgwKSA8IGNyZWRzLmlzc3VlX2RhdGUgKQotICAgICAgICAg ICAgICAgIHByaW50dGltZShjcmVkcy5pc3N1ZV9kYXRlKTsKLSAgICAgICAgICAgIGVsc2UKLSAg ICAgICAgICAgICAgICBwcmludGYoIioqKiBleHBpcmVkICoqKiAgIik7Ci0gICAgICAgICAgICBw cmludGYoIiAgIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNob3dfa3Zub3MpCi0gICAgICAg ICAgcHJpbnRmKCIlcyVzJXMlcyVzICglZClcclxuIiwKLSAgICAgICAgICAgICAgICAgY3JlZHMu c2VydmljZSwgKGNyZWRzLmluc3RhbmNlWzBdID8gIi4iIDogIiIpLCBjcmVkcy5pbnN0YW5jZSwK LSAgICAgICAgICAgICAgICAgKGNyZWRzLnJlYWxtWzBdID8gIkAiIDogIiIpLCBjcmVkcy5yZWFs bSwgY3JlZHMua3Zubyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwcmludGYoIiVzJXMlcyVz JXNcclxuIiwKLSAgICAgICAgICAgICAgICAgY3JlZHMuc2VydmljZSwgKGNyZWRzLmluc3RhbmNl WzBdID8gIi4iIDogIiIpLCBjcmVkcy5pbnN0YW5jZSwKLSAgICAgICAgICAgICAgICAgKGNyZWRz LnJlYWxtWzBdID8gIkAiIDogIiIpLCBjcmVkcy5yZWFsbSk7Ci0KLSNpZmRlZiBPUzIKLSAgICAg ICAgaWYgKCBjcmVkcy5hZGRyZXNzWzBdICkKLSAgICAgICAgICAgIHByaW50ZigiICAgQWRkcmVz czogJXNcclxuIixjcmVkcy5hZGRyZXNzKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0KLSAg ICAodm9pZCkgdGZfY2xvc2UoKTsKLQotICAgIGlmICh0Z3RfdGVzdCkgewotICAgICAgICByZXR1 cm4oLTEpOwotICAgIH0vKiBubyB0Z3QgZm91bmQgKi8KLSAgICBpZiAoaGVhZGVyICYmIGxvbmdf Zm9ybSAmJiBrX2Vycm5vID09IEVPRikgewotICAgICAgICBwcmludGYoIk5vIHRpY2tldHMgaW4g ZmlsZS5cclxuIik7Ci0gICAgfQotICAgIGtyYjRfZXJybm8gPSBrX2Vycm5vOwotICAgIG1ha2Vz dHIoJmtyYjRfZXJybXNnLGtyYl9nZXRfZXJyX3RleHRfZW50cnkoa19lcnJubykpOwotICAgIHJl dHVybigwKTsKLX0KLQotI2lmZGVmIENPTU1FTlQKLS8qIEp1c3Qgc28gd2UgcmVtZW1iZXIgd2hh dCB0aGUgY29tbWFuZCBsaW5lIGludGVyZmFjZSBsb29rZWQgbGlrZSAqLwotdXNhZ2UoKQotewot ICAgIHByaW50ZigKLSAgICAgICAgIlVzYWdlOiBbIC1zIHwgLXQgXSBbIC1maWxlIGZpbGVuYW1l IF0gWyAtc3J2dGFiIF0gWyAtdmVyc2lvbiBdXHJcbiIpOwotICAgIHJldHVybigtMSk7Ci19Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKiBhZGFwdGVkIGZyb20gZ2V0c3QoKSBpbiBsaWJya2Ig Ki8KLS8qCi0gKiBva19nZXRzdCgpIHRha2VzIGEgZmlsZSBkZXNjcmlwdG9yLCBhIHN0cmluZyBh bmQgYSBjb3VudC4gIEl0IHJlYWRzCi0gKiBmcm9tIHRoZSBmaWxlIHVudGlsIGVpdGhlciBpdCBo YXMgcmVhZCAiY291bnQiIGNoYXJhY3RlcnMsIG9yIHVudGlsCi0gKiBpdCByZWFkcyBhIG51bGwg Ynl0ZS4gIFdoZW4gZmluaXNoZWQsIHdoYXQgaGFzIGJlZW4gcmVhZCBleGlzdHMgaW4KLSAqIHRo ZSBnaXZlbiBzdHJpbmcgInMiLiAgSWYgImNvdW50IiBjaGFyYWN0ZXJzIHdlcmUgYWN0dWFsbHkg cmVhZCwgdGhlCi0gKiBsYXN0IGlzIGNoYW5nZWQgdG8gYSBudWxsLCBzbyB0aGUgcmV0dXJuZWQg c3RyaW5nIGlzIGFsd2F5cyBudWxsLQotICogdGVybWluYXRlZC4gIG9rX2dldHN0KCkgcmV0dXJu cyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgaW5jbHVkaW5nCi0gKiB0aGUgbnVsbCB0 ZXJtaW5hdG9yLgotICoKLSAqIElmIHRoZXJlIGlzIGEgcmVhZCBlcnJvciwgaXQgcmV0dXJucyAt MSAobGlrZSB0aGUgcmVhZCgyKSBzeXN0ZW0gY2FsbCkKLSAqLwotCi1zdGF0aWMgaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLW9rX2dldHN0KGludCBmZCwgcmVnaXN0ZXIgY2hhciAqcywgaW50IG4pCi0j ZWxzZQotb2tfZ2V0c3QoZmQsIHMsIG4pIGludCBmZDsgcmVnaXN0ZXIgY2hhciAqczsgaW50IG47 Ci0jZW5kaWYKLXsKLSAgICByZWdpc3RlciBpbnQgY291bnQgPSBuOwotICAgIGludCBlcnI7Ci0g ICAgd2hpbGUgKChlcnIgPSByZWFkKGZkLCBzLCAxKSkgPiAwICYmIC0tY291bnQpCi0gICAgICAg IGlmICgqcysrID09ICdcMCcpCi0gICAgICAgICAgICByZXR1cm4gKG4gLSBjb3VudCk7Ci0gICAg aWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybigtMSk7Ci0gICAgKnMgPSAnXDAnOwotICAgIHJl dHVybiAobiAtIGNvdW50KTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWRpc3BsYXlfc3J2 dGFiKGNoYXIgKmZpbGUpCi0jZWxzZQotZGlzcGxheV9zcnZ0YWIoZmlsZSkgY2hhciAqZmlsZTsK LSNlbmRpZgotewotICAgIGludCBzdGFiOwotICAgIGNoYXIgc2VydltTTkFNRV9TWl07Ci0gICAg Y2hhciBpbnN0W0lOU1RfU1pdOwotICAgIGNoYXIgcmxtW1JFQUxNX1NaXTsKLSAgICB1bnNpZ25l ZCBjaGFyIGtleVs4XTsKLSAgICB1bnNpZ25lZCBjaGFyIHZubzsKLSAgICBpbnQgY291bnQ7Ci0K LSAgICBwcmludGYoIlNlcnZlciBrZXkgZmlsZTogICAlc1xyXG4iLCBmaWxlKTsKLSNpZmRlZiBO VAotI2lmbmRlZiBPX1JET05MWQotI2RlZmluZSBPX1JET05MWSBfT19SRE9OTFkKLSNlbmRpZiAv KiBPX1JET05MWSAqLwotI2VuZGlmIC8qIE5UICovCi0KLSAgICBpZiAoKHN0YWIgPSBvcGVuKGZp bGUsIE9fUkRPTkxZLCAwNDAwKSkgPCAwKSB7Ci0gICAgICAgIHBlcnJvcihmaWxlKTsKLSAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgcHJpbnRmKCIlLTE1cyAlLTE1cyAlLTEwcyAlc1xy XG4iLCJTZXJ2aWNlIiwiSW5zdGFuY2UiLCJSZWFsbSIsCi0gICAgICAgICAgICJLZXkgVmVyc2lv biIpOwotICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tXHJcbiIpOwotCi0gICAgLyogYXJnaC4gZ2V0c3QgZG9lc24ndCByZXR1 cm4gZXJyb3IgY29kZXMsIGl0IHNpbGVudGx5IGZhaWxzICovCi0gICAgd2hpbGUgKCgoY291bnQg PSBva19nZXRzdChzdGFiLCBzZXJ2LCBTTkFNRV9TWikpID4gMCkKLSAgICAgICAgICAgJiYgKChj b3VudCA9IG9rX2dldHN0KHN0YWIsIGluc3QsIElOU1RfU1opKSA+IDApCi0gICAgICAgICAgICYm ICgoY291bnQgPSBva19nZXRzdChzdGFiLCBybG0sIFJFQUxNX1NaKSkgPiAwKSkgewotICAgICAg ICBpZiAoKChjb3VudCA9IHJlYWQoc3RhYiwoY2hhciAqKSAmdm5vLDEpKSAhPSAxKSB8fAotICAg ICAgICAgICAgICgoY291bnQgPSByZWFkKHN0YWIsKGNoYXIgKikga2V5LDgpKSAhPSA4KSkgewot ICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgICAgICAgICBwZXJyb3IoInJlYWRp bmcgZnJvbSBrZXkgZmlsZSIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBy aW50Zigia2V5IGZpbGUgdHJ1bmNhdGVkXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsK LSAgICAgICAgfQotICAgICAgICBwcmludGYoIiUtMTVzICUtMTVzICUtMTVzICVkXHJcbiIsc2Vy dixpbnN0LHJsbSx2bm8pOwotICAgIH0KLSAgICBpZiAoY291bnQgPCAwKQotICAgICAgICBwZXJy b3IoZmlsZSk7Ci0gICAgKHZvaWQpIGNsb3NlKHN0YWIpOwotICAgIHJldHVybigwKTsKLX0KLSNl bmRpZiAvKiBLTElTVCAqLwotI2Vsc2UgLyogS1JCNCAqLwotaW50Ci1ja19rcmI0X2F1dG9nZXRf VEdUKGNoYXIgKiBkdW1teSkKLXsKLSAgICByZXR1cm4oLTEpOwotfQotI2lmZGVmIENLX0tFUkJF Uk9TCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tfa3JiNF9pbml0VEdUKHN0cnVjdCBrcmJfb3Bf ZGF0YSAqIG9wLCBzdHJ1Y3Qga3JiNF9pbml0X2RhdGEgKiBpbml0KQotI2Vsc2UKLWNrX2tyYjRf aW5pdFRHVChvcCxpbml0KQotICAgIHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wLCBzdHJ1Y3Qga3Ji NF9pbml0X2RhdGEgKiBpbml0Ci0jZW5kaWYKLXsKLSAgICByZXR1cm4oLTEpOwotfQotCi0jaWZk ZWYgQ0tfQU5TSUMKLWNrX2tyYjRfZGVzdHJveShzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCkKLSNl bHNlCi1ja19rcmI0X2Rlc3Ryb3kob3ApIHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wOwotI2VuZGlm Ci17Ci0gICAgcmV0dXJuKC0xKTsKLX0KLWludAotI2lmZGVmIENLX0FOU0lDCi1ja19rcmI0X2xp c3RfY3JlZHMoc3RydWN0IGtyYl9vcF9kYXRhICogb3ApCi0jZWxzZQotY2tfa3JiNF9saXN0X2Ny ZWRzKG9wKSBzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcDsKLSNlbmRpZgotewotICAgIHJldHVybigt MSk7Ci19Ci0jZWxzZSAvKiBDS19LRVJCRVJPUyAqLwotaW50IGNrX2tyYjRfaW5pdFRHVCh2b2lk ICogYSwgdm9pZCAqYikKLXsKLSAgICByZXR1cm4oLTEpOwotfQotaW50IGNrX2tyYjRfZGVzdHJv eSh2b2lkICphKQotewotICAgIHJldHVybigtMSk7Ci19Ci1pbnQgY2tfa3JiNF9saXN0X2NyZWRz KHZvaWQgKmEpCi17Ci0gICAgcmV0dXJuKC0xKTsKLX0KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAq LwotI2VuZGlmIC8qIEtSQjQgKi8KLQotLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHVz ZWQgdG8gaW1wbGVtZW50IHRoZSBLZXJtaXQgU2NyaXB0IExhbmd1YWdlICovCi0vKiBmdW5jdGlv bnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi8KLQotc3RydWN0IHRrdF9saXN0X2l0ZW0gewotICAgIGNoYXIgKiBuYW1lOwot ICAgIHN0cnVjdCB0a3RfbGlzdF9pdGVtICogbmV4dDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdGt0 X2xpc3RfaXRlbSAqIGs0X3RrdF9saXN0ID0gTlVMTDsKLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMK LWNrX2tyYjRfZ2V0X3RrdHMoVk9JRCkKLSNlbHNlCi1ja19rcmI0X2dldF90a3RzKCkKLSNlbmRp ZgotewotI2lmZGVmIEtSQjQKLSAgICBjaGFyICAgKmZpbGU9TlVMTDsKLSAgICBjaGFyICAgIHBu YW1lW0FOQU1FX1NaXTsKLSAgICBjaGFyICAgIHBpbnN0W0lOU1RfU1pdOwotICAgIGNoYXIgICAg cHJlYWxtW1JFQUxNX1NaXTsKLSAgICBjaGFyICAgIGJ1ZjFbMjBdLCBidWYyWzIwXTsKLSAgICBp bnQgICAgIGtfZXJybm87Ci0jaWZkZWYgT1MyCi0gICAgTEVBU0hfQ1JFREVOVElBTFMgY3JlZHM7 Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICBDUkVERU5USUFMUyBjcmVkczsKLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICBpbnQgICAgIHRrdF9jb3VudD0wOwotICAgIHN0cnVjdCAgdGt0X2xpc3RfaXRlbSAq KiBsaXN0ID0gJms0X3RrdF9saXN0OwotCi0gICAgd2hpbGUgKCBrNF90a3RfbGlzdCApIHsKLSAg ICAgICAgc3RydWN0IHRrdF9saXN0X2l0ZW0gKiBuZXh0OwotICAgICAgICBuZXh0ID0gazRfdGt0 X2xpc3QtPm5leHQ7Ci0gICAgICAgIGZyZWUoazRfdGt0X2xpc3QtPm5hbWUpOwotICAgICAgICBm cmVlKGs0X3RrdF9saXN0KTsKLSAgICAgICAgazRfdGt0X2xpc3QgPSBuZXh0OwotICAgIH0KLQot ICAgIGlmICggIWNrX2tyYjRfaXNfaW5zdGFsbGVkKCkgKQotICAgICAgICByZXR1cm4oLTEpOwot Ci0gICAgZmlsZSA9IHRrdF9zdHJpbmcoKTsKLQotICAgIC8qCi0gICAgICogU2luY2Uga3JiX2dl dF90Zl9yZWFsbSB3aWxsIHJldHVybiBhIHRpY2tldF9maWxlIGVycm9yLAotICAgICAqIHdlIHdp bGwgY2FsbCB0Zl9pbml0IGFuZCB0Zl9jbG9zZSBmaXJzdCB0byBmaWx0ZXIgb3V0Ci0gICAgICog dGhpbmdzIGxpa2Ugbm8gdGlja2V0IGZpbGUuICBPdGhlcndpc2UsIHRoZSBlcnJvciB0aGF0Ci0g ICAgICogdGhlIHVzZXIgd291bGQgc2VlIHdvdWxkIGJlCi0gICAgICoga2xpc3Q6IGNhbid0IGZp bmQgcmVhbG0gb2YgdGlja2V0IGZpbGU6IE5vIHRpY2tldCBmaWxlICh0Zl91dGlsKQotICAgICAq IGluc3RlYWQgb2YKLSAgICAgKiBrbGlzdDogTm8gdGlja2V0IGZpbGUgKHRmX3V0aWwpCi0gICAg ICovCi0KLSAgICAvKiBPcGVuIHRpY2tldCBmaWxlICovCi0gICAgaWYgKGtfZXJybm8gPSB0Zl9p bml0KGZpbGUsIFJfVEtUX0ZJTCkpIHsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAg ICAvKiBDbG9zZSB0aWNrZXQgZmlsZSAqLwotICAgICh2b2lkKSB0Zl9jbG9zZSgpOwotCi0gICAg LyoKLSAgICAgKiBXZSBtdXN0IGZpbmQgdGhlIHJlYWxtIG9mIHRoZSB0aWNrZXQgZmlsZSBoZXJl IGJlZm9yZSBjYWxsaW5nCi0gICAgICogdGZfaW5pdCBiZWNhdXNlIHNpbmNlIHRoZSByZWFsbSBv ZiB0aGUgdGlja2V0IGZpbGUgaXMgbm90Ci0gICAgICogcmVhbGx5IHN0b3JlZCBpbiB0aGUgcHJp bmNpcGFsIHNlY3Rpb24gb2YgdGhlIGZpbGUsIHRoZQotICAgICAqIHJvdXRpbmUgd2UgdXNlIG11 c3QgaXRzZWxmIGNhbGwgdGZfaW5pdCBhbmQgdGZfY2xvc2UuCi0gICAgICovCi0gICAgaWYgKChr X2Vycm5vID0ga3JiX2dldF90Zl9yZWFsbShmaWxlLCBwcmVhbG0pKSAhPSBBVVRIX1NVQ0NFU1Mp IHsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICAvKiBPcGVuIHRpY2tldCBmaWxl ICovCi0gICAgaWYgKGtfZXJybm8gPSB0Zl9pbml0KGZpbGUsIFJfVEtUX0ZJTCkpIHsKLSAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgLyogR2V0IHByaW5jaXBhbCBuYW1lIGFuZCBpbnN0 YW5jZSAqLwotICAgIGlmICgoa19lcnJubyA9IHRmX2dldF9wbmFtZShwbmFtZSkpIHx8Ci0gICAg ICAgICAoa19lcnJubyA9IHRmX2dldF9waW5zdChwaW5zdCkpKSB7Ci0gICAgICAgIHJldHVybigt MSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBZb3UgbWF5IHRoaW5rIHRoYXQgdGhpcyBpcyB0 aGUgb2J2aW91cyBwbGFjZSB0byBnZXQgdGhlCi0gICAgICogcmVhbG0gb2YgdGhlIHRpY2tldCBm aWxlLCBidXQgaXQgY2FuJ3QgYmUgZG9uZSBoZXJlIGFzIHRoZQotICAgICAqIHJvdXRpbmUgdG8g ZG8gdGhpcyBtdXN0IG9wZW4gdGhlIHRpY2tldCBmaWxlLiAgVGhpcyBpcyB3aHkKLSAgICAgKiBp dCB3YXMgZG9uZSBiZWZvcmUgdGZfaW5pdC4KLSAgICAgKi8KLQotICAgIHdoaWxlICgoa19lcnJu byA9IHRmX2dldF9jcmVkKCZjcmVkcykpID09IEFVVEhfU1VDQ0VTUykgewotICAgICAgICBjaGFy IHRrdF9idWZbMjU2XTsKLSAgICAgICAgY2ttYWt4bXNnKHRrdF9idWYsc2l6ZW9mKHRrdF9idWYp LAotICAgICAgICAgICAgICAgICBjcmVkcy5zZXJ2aWNlLCAoY3JlZHMuaW5zdGFuY2VbMF0gPyAi LiIgOiAiIiksIGNyZWRzLmluc3RhbmNlLAotICAgICAgICAgICAgICAgICAoY3JlZHMucmVhbG1b MF0gPyAiQCIgOiAiIiksIGNyZWRzLnJlYWxtLAotICAgICAgICAgICAgICAgICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgKmxpc3QgPSAoc3RydWN0IHRrdF9s aXN0X2l0ZW0gKikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGt0X2xpc3RfaXRlbSkpOwotICAgICAg ICAoKmxpc3QpLT5uYW1lID0gc3RyZHVwKHRrdF9idWYpOwotICAgICAgICAoKmxpc3QpLT5uZXh0 ID0gTlVMTDsKLSAgICAgICAgbGlzdCA9ICYoKCpsaXN0KS0+bmV4dCk7Ci0gICAgICAgIHRrdF9j b3VudCsrOwotICAgIH0KLQotICAgIHRmX2Nsb3NlKCk7Ci0gICAgcmV0dXJuKHRrdF9jb3VudCk7 Ci0jZWxzZSAvKiBLUkI0ICovCi0gICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIEtSQjQgKi8KLX0K LQotY2hhciAqCi0jaWZkZWYgQ0tfQU5TSUMKLWNrX2tyYjRfZ2V0X25leHRfdGt0KFZPSUQpCi0j ZWxzZQotY2tfa3JiNF9nZXRfbmV4dF90a3QoKQotI2VuZGlmCi17Ci0jaWZkZWYgS1JCNAotICAg IHN0YXRpYyBjaGFyICogcz1OVUxMOwotICAgIHN0cnVjdCB0a3RfbGlzdF9pdGVtICogbmV4dD1O VUxMOwotCi0gICAgaWYgKCBzICkgewotICAgICAgICBmcmVlKHMpOwotICAgICAgICBzID0gTlVM TDsKLSAgICB9Ci0KLSAgICBpZiAoIGs0X3RrdF9saXN0ID09IE5VTEwgKQotICAgICAgICByZXR1 cm4oTlVMTCk7Ci0KLSAgICBuZXh0ID0gazRfdGt0X2xpc3QtPm5leHQ7Ci0gICAgcyA9IGs0X3Rr dF9saXN0LT5uYW1lOwotICAgIGZyZWUoazRfdGt0X2xpc3QpOwotICAgIGs0X3RrdF9saXN0ID0g bmV4dDsKLSAgICByZXR1cm4ocyk7Ci0jZWxzZSAvKiBLUkI0ICovCi0gICAgcmV0dXJuKE5VTEwp OwotI2VuZGlmIC8qIEtSQjQgKi8KLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrX2tyYjRf dGt0X2lzdmFsaWQoY2hhciAqIHRrdG5hbWUpCi0jZWxzZQotY2tfa3JiNF90a3RfaXN2YWxpZCh0 a3RuYW1lKSBjaGFyICogdGt0bmFtZTsKLSNlbmRpZgotewotI2lmZGVmIEtSQjQKLSAgICBjaGFy ICAgKmZpbGU9TlVMTDsKLSAgICBjaGFyICAgIHBuYW1lW0FOQU1FX1NaXTsKLSAgICBjaGFyICAg IHBpbnN0W0lOU1RfU1pdOwotICAgIGNoYXIgICAgcHJlYWxtW1JFQUxNX1NaXTsKLSAgICBjaGFy ICAgIGJ1ZjFbMjBdLCBidWYyWzIwXTsKLSAgICBpbnQgICAgIGtfZXJybm87Ci0gICAgdGltZV90 ICBpc3N1ZV90LCBleHBpcmVfdCwgbm93X3Q7Ci0jaWZkZWYgT1MyCi0gICAgTEVBU0hfQ1JFREVO VElBTFMgY3JlZHM7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICBDUkVERU5USUFMUyBjcmVkczsKLSNl bmRpZiAvKiBPUzIgKi8KLQotICAgIGlmICggIWNrX2tyYjRfaXNfaW5zdGFsbGVkKCkgKQotICAg ICAgICByZXR1cm4oLTEpOwotCi0gICAgZGVidWcoRjExMCwiY2tfa3JiNF90a3RfaXN2YWxpZCIs InRrdF9zdHJpbmciLDApOwotICAgIGZpbGUgPSB0a3Rfc3RyaW5nKCk7Ci0KLSAgICAvKgotICAg ICAqIFNpbmNlIGtyYl9nZXRfdGZfcmVhbG0gd2lsbCByZXR1cm4gYSB0aWNrZXRfZmlsZSBlcnJv ciwKLSAgICAgKiB3ZSB3aWxsIGNhbGwgdGZfaW5pdCBhbmQgdGZfY2xvc2UgZmlyc3QgdG8gZmls dGVyIG91dAotICAgICAqIHRoaW5ncyBsaWtlIG5vIHRpY2tldCBmaWxlLiAgT3RoZXJ3aXNlLCB0 aGUgZXJyb3IgdGhhdAotICAgICAqIHRoZSB1c2VyIHdvdWxkIHNlZSB3b3VsZCBiZQotICAgICAq IGtsaXN0OiBjYW4ndCBmaW5kIHJlYWxtIG9mIHRpY2tldCBmaWxlOiBObyB0aWNrZXQgZmlsZSAo dGZfdXRpbCkKLSAgICAgKiBpbnN0ZWFkIG9mCi0gICAgICoga2xpc3Q6IE5vIHRpY2tldCBmaWxl ICh0Zl91dGlsKQotICAgICAqLwotCi0gICAgLyogT3BlbiB0aWNrZXQgZmlsZSAqLwotICAgIGRl YnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFsaWQiLCJ0Zl9pbml0IiwwKTsKLSAgICBpZiAoa19l cnJubyA9IHRmX2luaXQoZmlsZSwgUl9US1RfRklMKSkgewotICAgICAgICByZXR1cm4oLTEpOwot ICAgIH0KLQotICAgIC8qIENsb3NlIHRpY2tldCBmaWxlICovCi0gICAgZGVidWcoRjExMCwiY2tf a3JiNF90a3RfaXN2YWxpZCIsInRmX2Nsb3NlIiwwKTsKLSAgICAodm9pZCkgdGZfY2xvc2UoKTsK LQotICAgIC8qCi0gICAgICogV2UgbXVzdCBmaW5kIHRoZSByZWFsbSBvZiB0aGUgdGlja2V0IGZp bGUgaGVyZSBiZWZvcmUgY2FsbGluZwotICAgICAqIHRmX2luaXQgYmVjYXVzZSBzaW5jZSB0aGUg cmVhbG0gb2YgdGhlIHRpY2tldCBmaWxlIGlzIG5vdAotICAgICAqIHJlYWxseSBzdG9yZWQgaW4g dGhlIHByaW5jaXBhbCBzZWN0aW9uIG9mIHRoZSBmaWxlLCB0aGUKLSAgICAgKiByb3V0aW5lIHdl IHVzZSBtdXN0IGl0c2VsZiBjYWxsIHRmX2luaXQgYW5kIHRmX2Nsb3NlLgotICAgICAqLwotICAg IGRlYnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFsaWQiLCJrcmJfZ2V0X3RmX3JlYWxtIiwwKTsK LSAgICBpZiAoKGtfZXJybm8gPSBrcmJfZ2V0X3RmX3JlYWxtKGZpbGUsIHByZWFsbSkpICE9IEFV VEhfU1VDQ0VTUykgewotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIC8qIE9wZW4g dGlja2V0IGZpbGUgKi8KLSAgICBkZWJ1ZyhGMTEwLCJja19rcmI0X3RrdF9pc3ZhbGlkIiwidGZf aW5pdCIsMCk7Ci0gICAgaWYgKGtfZXJybm8gPSB0Zl9pbml0KGZpbGUsIFJfVEtUX0ZJTCkpIHsK LSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgLyogR2V0IHByaW5jaXBhbCBuYW1lIGFu ZCBpbnN0YW5jZSAqLwotICAgIGRlYnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFsaWQiLCJ0Zl9n ZXRfbmFtZS90Zl9nZXRfcGluc3QiLDApOwotICAgIGlmICgoa19lcnJubyA9IHRmX2dldF9wbmFt ZShwbmFtZSkpIHx8Ci0gICAgICAgICAoa19lcnJubyA9IHRmX2dldF9waW5zdChwaW5zdCkpKSB7 Ci0KLSAgICAgICAgLyogQ2xvc2UgdGlja2V0IGZpbGUgKi8KLSAgICAgICAgZGVidWcoRjExMCwi Y2tfa3JiNF90a3RfaXN2YWxpZCIsInRmX2Nsb3NlIiwwKTsKLSAgICAgICAgKHZvaWQpIHRmX2Ns b3NlKCk7Ci0KLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFlv dSBtYXkgdGhpbmsgdGhhdCB0aGlzIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGdldCB0aGUKLSAg ICAgKiByZWFsbSBvZiB0aGUgdGlja2V0IGZpbGUsIGJ1dCBpdCBjYW4ndCBiZSBkb25lIGhlcmUg YXMgdGhlCi0gICAgICogcm91dGluZSB0byBkbyB0aGlzIG11c3Qgb3BlbiB0aGUgdGlja2V0IGZp bGUuICBUaGlzIGlzIHdoeQotICAgICAqIGl0IHdhcyBkb25lIGJlZm9yZSB0Zl9pbml0LgotICAg ICAqLwotCi0gICAgZGVidWcoRjExMCwiY2tfa3JiNF90a3RfaXN2YWxpZCIsInRmX2dldF9jcmVk IiwwKTsKLSAgICB3aGlsZSAoKGtfZXJybm8gPSB0Zl9nZXRfY3JlZCgmY3JlZHMpKSA9PSBBVVRI X1NVQ0NFU1MpIHsKLSAgICAgICAgY2hhciB0a3RfYnVmWzI1Nl07Ci0gICAgICAgIGNrbWFreG1z Zyh0a3RfYnVmLHNpemVvZih0a3RfYnVmKSwKLSAgICAgICAgICAgICAgICAgY3JlZHMuc2Vydmlj ZSwgKGNyZWRzLmluc3RhbmNlWzBdID8gIi4iIDogIiIpLCBjcmVkcy5pbnN0YW5jZSwKLSAgICAg ICAgICAgICAgICAgKGNyZWRzLnJlYWxtWzBdID8gIkAiIDogIiIpLCBjcmVkcy5yZWFsbSwKLSAg ICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAg ICAgIGlmICggIXN0cmNtcCh0a3RuYW1lLHRrdF9idWYpICkgewotCi0gICAgICAgICAgICAvKiB3 ZSBmb3VuZCB0aGUgdGlja2V0IHdlIGFyZSBsb29raW5nIGZvciAqLwotICAgICAgICAgICAgaXNz dWVfdCA9IGNyZWRzLmlzc3VlX2RhdGU7Ci0gICAgICAgICAgICBleHBpcmVfdCA9IGNyZWRzLmlz c3VlX2RhdGUKLSAgICAgICAgICAgICAgICArICgodW5zaWduZWQgY2hhcikgY3JlZHMubGlmZXRp bWUpICogNSAqIDYwOwotICAgICAgICAgICAgbm93X3QgPSB0aW1lKDApOwotCi0gICAgICAgICAg ICAvKiBXZSBhZGQgYSA1IG1pbnV0ZXMgZnVkZ2UgZmFjdG9yIHRvIGNvbXBlbnNhdGUgZm9yIHBv dGVudGlhbCAqLwotICAgICAgICAgICAgLyogY2xvY2sgc2tldyBlcnJvcnMgYmV0d2VlbiB0aGUg S0RDIGFuZCBLOTUncyBob3N0IE9TICAgICAgICAgKi8KLQotICAgICAgICAgICAgaWYgKCBub3df dCA+PSAoaXNzdWVfdC0zMDApICYmIG5vd190IDwgZXhwaXJlX3QpIHsKLSNpZmRlZiBPUzIKLSNp ZmRlZiBDSEVDS0FERFJTCi0gICAgICAgICAgICAgICAgaWYgKCBrcmI0X2NoZWNrYWRkcnMgKSB7 Ci0gICAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyIG15aXBhZGRyWzIwXTsgICAgICAgLyog RnJvbSBja2NuZXQuYyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoICFteWlwYWRkclswXSAp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciBidWZbNjBdOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaT0wO2k8NjQ7 aSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZ2V0bG9jYWxpcGFkZHJz KGJ1Ziw2MCxpKSA8IDAgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXN0cmNtcChidWYsY3JlZHMuYWRk cmVzcykgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIHRpY2tl dCBmaWxlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNr X2tyYjRfdGt0X2lzdmFsaWQiLCJ0Zl9jbG9zZSIsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICh2b2lkKSB0Zl9jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oMSk7IC8qIFRoZXkncmUgdGhlIHNhbWUgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENsb3NlIHRpY2tldCBmaWxlICovCi0gICAgICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJja19rcmI0X3RrdF9pc3ZhbGlkIiwidGZfY2xvc2UiLDApOwotICAgICAg ICAgICAgICAgICAgICAgICAgKHZvaWQpIHRmX2Nsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgLyogVGhleSdyZSBkaWZmZXJlbnQgKi8K LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggc3RyY21wKG15aXBhZGRyLGNyZWRzLmFk ZHJlc3MpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgdGlja2V0IGZpbGUg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFs aWQiLCJ0Zl9jbG9zZSIsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAodm9pZCkgdGZfY2xv c2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAg ICAvKiBUaGV5J3JlIGRpZmZlcmVudCAqLwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgdGlj a2V0IGZpbGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX2tyYjRf dGt0X2lzdmFsaWQiLCJ0Zl9jbG9zZSIsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAodm9p ZCkgdGZfY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigxKTsgICAgICAg ICAgICAgICAgICAvKiBUaGV5J3JlIHRoZSBzYW1lICovCi0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSB0 aWNrZXQgZmlsZSAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19rcmI0X3Rr dF9pc3ZhbGlkIiwidGZfY2xvc2UiLDApOwotICAgICAgICAgICAgICAgICAgICAodm9pZCkgdGZf Y2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDEpOyAgICAgICAgICAgICAgICAg IC8qIFRoZXkncmUgdGhlIHNhbWUgKi8KLSAgICAgICAgICAgICAgICB9Ci0jZWxzZSAvKiBDSEVD S0FERFJTICovCi0gICAgICAgICAgICAgICAgLyogQ2xvc2UgdGlja2V0IGZpbGUgKi8KLSAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19rcmI0X3RrdF9pc3ZhbGlkIiwidGZfY2xvc2UiLDAp OwotICAgICAgICAgICAgICAgICh2b2lkKSB0Zl9jbG9zZSgpOwotICAgICAgICAgICAgICAgIHJl dHVybigxKTsgICAgICAvKiB2YWxpZCBidXQgbm8gaXAgYWRkcmVzcyBjaGVjayAqLwotI2VuZGlm IC8qIENIRUNLQUREUlMgKi8KLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIC8qIENs b3NlIHRpY2tldCBmaWxlICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfa3JiNF90 a3RfaXN2YWxpZCIsInRmX2Nsb3NlIiwwKTsKLSAgICAgICAgICAgICAgICAodm9pZCkgdGZfY2xv c2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oMSk7ICAgICAgLyogVmFsaWQgYnV0IG5vIGlw IGFkZHJlc3MgY2hlY2sgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qIENsb3NlIHRpY2tldCBmaWxlICovCi0g ICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfa3JiNF90a3RfaXN2YWxpZCIsInRmX2Nsb3Nl IiwwKTsKLSAgICAgICAgICAgICAgICAodm9pZCkgdGZfY2xvc2UoKTsKLSAgICAgICAgICAgICAg ICByZXR1cm4oMCk7ICAgICAgLyogZXhwaXJlZCBvciBvdGhlcndpc2UgaW52YWxpZCAqLwotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIC8qIENsb3NlIHRpY2tldCBmaWxlICov Ci0gICAgZGVidWcoRjExMCwiY2tfa3JiNF90a3RfaXN2YWxpZCIsInRmX2Nsb3NlIiwwKTsKLSAg ICAodm9pZCkgdGZfY2xvc2UoKTsKLSAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgLyog Y291bGQgbm90IGZpbmQgdGhlIGRlc2lyZWQgdGlja2V0ICovCi0jZWxzZSAvKiBLUkI0ICovCi0g ICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBLUkI0ICovCi19Ci0KLWludAotI2lmZGVmIENLX0FO U0lDCi1ja19rcmI0X2lzX3RndF92YWxpZChWT0lEKQotI2Vsc2UKLWNrX2tyYjRfaXNfdGd0X3Zh bGlkKCkKLSNlbmRpZgotewotI2lmZGVmIEtSQjQKLSAgICBjaGFyIHRndFsyNTZdOwotICAgIGNo YXIgKiBzOwotICAgIGludCByYyA9IDA7Ci0KLSAgICBzID0ga3JiNF9kX3JlYWxtID8ga3JiNF9k X3JlYWxtIDogY2tfa3JiNF9nZXRyZWFsbSgpOwotICAgIGNrbWFrbXNnKHRndCxzaXplb2YodGd0 KSwia3JidGd0LiIscywiQCIscyk7Ci0gICAgcmMgPSBja19rcmI0X3RrdF9pc3ZhbGlkKHRndCk7 Ci0gICAgZGVidWcoRjExMSwiY2tfa3JiNF9pc190Z3RfdmFsaWQiLHRndCxyYyk7Ci0gICAgcmV0 dXJuKHJjID4gMCk7Ci0jZWxzZSAvKiBLUkI0ICovCi0gICAgcmV0dXJuKDApOwotI2VuZGlmIC8q IEtSQjQgKi8KLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrX2tyYjRfdGt0X3RpbWUoY2hh ciAqIHRrdG5hbWUpCi0jZWxzZQotY2tfa3JiNF90a3RfdGltZSh0a3RuYW1lKSBjaGFyICogdGt0 bmFtZTsKLSNlbmRpZgotewotI2lmZGVmIEtSQjQKLSAgICBjaGFyICAgKmZpbGU9TlVMTDsKLSAg ICBjaGFyICAgIHBuYW1lW0FOQU1FX1NaXTsKLSAgICBjaGFyICAgIHBpbnN0W0lOU1RfU1pdOwot ICAgIGNoYXIgICAgcHJlYWxtW1JFQUxNX1NaXTsKLSAgICBjaGFyICAgIGJ1ZjFbMjBdLCBidWYy WzIwXTsKLSAgICBpbnQgICAgIGtfZXJybm87Ci0jaWZkZWYgT1MyCi0gICAgTEVBU0hfQ1JFREVO VElBTFMgY3JlZHM7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICBDUkVERU5USUFMUyBjcmVkczsKLSNl bmRpZiAvKiBPUzIgKi8KLQotICAgIGlmICggIWNrX2tyYjRfaXNfaW5zdGFsbGVkKCkgKQotICAg ICAgICByZXR1cm4oLTEpOwotCi0gICAgZmlsZSA9IHRrdF9zdHJpbmcoKTsKLQotICAgIC8qCi0g ICAgICogU2luY2Uga3JiX2dldF90Zl9yZWFsbSB3aWxsIHJldHVybiBhIHRpY2tldF9maWxlIGVy cm9yLAotICAgICAqIHdlIHdpbGwgY2FsbCB0Zl9pbml0IGFuZCB0Zl9jbG9zZSBmaXJzdCB0byBm aWx0ZXIgb3V0Ci0gICAgICogdGhpbmdzIGxpa2Ugbm8gdGlja2V0IGZpbGUuICBPdGhlcndpc2Us IHRoZSBlcnJvciB0aGF0Ci0gICAgICogdGhlIHVzZXIgd291bGQgc2VlIHdvdWxkIGJlCi0gICAg ICoga2xpc3Q6IGNhbid0IGZpbmQgcmVhbG0gb2YgdGlja2V0IGZpbGU6IE5vIHRpY2tldCBmaWxl ICh0Zl91dGlsKQotICAgICAqIGluc3RlYWQgb2YKLSAgICAgKiBrbGlzdDogTm8gdGlja2V0IGZp bGUgKHRmX3V0aWwpCi0gICAgICovCi0KLSAgICAvKiBPcGVuIHRpY2tldCBmaWxlICovCi0gICAg aWYgKGtfZXJybm8gPSB0Zl9pbml0KGZpbGUsIFJfVEtUX0ZJTCkpIHsKLSAgICAgICAgcmV0dXJu KC0xKTsKLSAgICB9Ci0KLSAgICAvKiBDbG9zZSB0aWNrZXQgZmlsZSAqLwotICAgICh2b2lkKSB0 Zl9jbG9zZSgpOwotCi0gICAgLyoKLSAgICAgKiBXZSBtdXN0IGZpbmQgdGhlIHJlYWxtIG9mIHRo ZSB0aWNrZXQgZmlsZSBoZXJlIGJlZm9yZSBjYWxsaW5nCi0gICAgICogdGZfaW5pdCBiZWNhdXNl IHNpbmNlIHRoZSByZWFsbSBvZiB0aGUgdGlja2V0IGZpbGUgaXMgbm90Ci0gICAgICogcmVhbGx5 IHN0b3JlZCBpbiB0aGUgcHJpbmNpcGFsIHNlY3Rpb24gb2YgdGhlIGZpbGUsIHRoZQotICAgICAq IHJvdXRpbmUgd2UgdXNlIG11c3QgaXRzZWxmIGNhbGwgdGZfaW5pdCBhbmQgdGZfY2xvc2UuCi0g ICAgICovCi0gICAgaWYgKChrX2Vycm5vID0ga3JiX2dldF90Zl9yZWFsbShmaWxlLCBwcmVhbG0p KSAhPSBBVVRIX1NVQ0NFU1MpIHsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICAv KiBPcGVuIHRpY2tldCBmaWxlICovCi0gICAgaWYgKGtfZXJybm8gPSB0Zl9pbml0KGZpbGUsIFJf VEtUX0ZJTCkpIHsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgLyogR2V0IHByaW5j aXBhbCBuYW1lIGFuZCBpbnN0YW5jZSAqLwotICAgIGlmICgoa19lcnJubyA9IHRmX2dldF9wbmFt ZShwbmFtZSkpIHx8Ci0gICAgICAgICAoa19lcnJubyA9IHRmX2dldF9waW5zdChwaW5zdCkpKSB7 Ci0gICAgICAgIHRmX2Nsb3NlKCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAg LyoKLSAgICAgKiBZb3UgbWF5IHRoaW5rIHRoYXQgdGhpcyBpcyB0aGUgb2J2aW91cyBwbGFjZSB0 byBnZXQgdGhlCi0gICAgICogcmVhbG0gb2YgdGhlIHRpY2tldCBmaWxlLCBidXQgaXQgY2FuJ3Qg YmUgZG9uZSBoZXJlIGFzIHRoZQotICAgICAqIHJvdXRpbmUgdG8gZG8gdGhpcyBtdXN0IG9wZW4g dGhlIHRpY2tldCBmaWxlLiAgVGhpcyBpcyB3aHkKLSAgICAgKiBpdCB3YXMgZG9uZSBiZWZvcmUg dGZfaW5pdC4KLSAgICAgKi8KLQotICAgIHdoaWxlICgoa19lcnJubyA9IHRmX2dldF9jcmVkKCZj cmVkcykpID09IEFVVEhfU1VDQ0VTUykgewotICAgICAgICBjaGFyIHRrdF9idWZbMjU2XTsKLSAg ICAgICAgY2ttYWt4bXNnKHRrdF9idWYsc2l6ZW9mKHRrdF9idWYpLAotICAgICAgICAgICAgICAg ICBjcmVkcy5zZXJ2aWNlLCAoY3JlZHMuaW5zdGFuY2VbMF0gPyAiLiIgOiAiIiksCi0gICAgICAg ICAgICAgICAgIGNyZWRzLmluc3RhbmNlLAotICAgICAgICAgICAgICAgICAoY3JlZHMucmVhbG1b MF0gPyAiQCIgOiAiIiksIGNyZWRzLnJlYWxtLAotICAgICAgICAgICAgICAgICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYgKCAhc3RyY21wKHRrdG5hbWUs dGt0X2J1ZikgKSB7Ci0gICAgICAgICAgICAvKiB3ZSBmb3VuZCB0aGUgdGlja2V0IHdlIGFyZSBs b29raW5nIGZvciAqLwotICAgICAgICAgICAgaW50IG4gPSAoY3JlZHMuaXNzdWVfZGF0ZQotICAg ICAgICAgICAgICAgICAgICAgICsgKCgodW5zaWduZWQgY2hhcikgY3JlZHMubGlmZXRpbWUpICog NSAqIDYwKSkKLSAgICAgICAgICAgICAgICAtIHRpbWUoMCk7Ci0gICAgICAgICAgICB0Zl9jbG9z ZSgpOwotICAgICAgICAgICAgcmV0dXJuKG4gPD0gMCA/IDAgOiBuKTsKLSAgICAgICAgfQotICAg IH0KLSAgICB0Zl9jbG9zZSgpOwotICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAvKiBj b3VsZCBub3QgZmluZCB0aGUgZGVzaXJlZCB0aWNrZXQgKi8KLSNlbHNlIC8qIEtSQjQgKi8KLSAg ICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIEtSQjQgKi8KLX0KLQotY2hhciAqCi0jaWZkZWYgQ0tf QU5TSUMKLWNrX2tyYjRfZ2V0cmVhbG0odm9pZCkKLSNlbHNlCi1ja19rcmI0X2dldHJlYWxtKCkK LSNlbmRpZgotewotI2lmZGVmIEtSQjQKLSAgICBjaGFyICAgKmZpbGU9TlVMTDsKLSAgICBpbnQg ICAgIGtfZXJybm87Ci0gICAgc3RhdGljIGNoYXIgcmVhbG1bMjU2XT0iIjsKLSAgICByZWFsbVsw XT0nXDAnOwotCi0gICAgaWYgKCAhY2tfa3JiNF9pc19pbnN0YWxsZWQoKSApCi0gICAgICAgIHJl dHVybihyZWFsbSk7Ci0KLSAgICAvKiBUcnkgdG8gZ2V0IHJlYWxtIGZyb20gdGlja2V0IGZpbGUg Ki8KLSAgICAvKiBJZiBmYWlsdXJlIGdldCB0aGUgbG9jYWwgcmVhbG0gICAgKi8KLQotICAgIC8q Ci0gICAgKiBTaW5jZSBrcmJfZ2V0X3RmX3JlYWxtIHdpbGwgcmV0dXJuIGEgdGlja2V0X2ZpbGUg ZXJyb3IsCi0gICAgKiB3ZSB3aWxsIGNhbGwgdGZfaW5pdCBhbmQgdGZfY2xvc2UgZmlyc3QgdG8g ZmlsdGVyIG91dAotICAgICogdGhpbmdzIGxpa2Ugbm8gdGlja2V0IGZpbGUuCi0gICAgKi8KLQot ICAgIC8qIE9wZW4gdGlja2V0IGZpbGUgKi8KLSAgICBmaWxlID0gdGt0X3N0cmluZygpOwotICAg IGlmIChmaWxlID09IE5VTEwgfHwgIWZpbGVbMF0pCi0gICAgICAgIHJldHVybihyZWFsbSk7Ci0K LSAgICBpZiAoKGtfZXJybm8gPSB0Zl9pbml0KGZpbGUsIFJfVEtUX0ZJTCkpID09IEtTVUNDRVNT KSB7Ci0gICAgICAgIC8qIENsb3NlIHRpY2tldCBmaWxlICovCi0gICAgICAgICh2b2lkKSB0Zl9j bG9zZSgpOwotCi0gICAgICAgIGtfZXJybm8gPSBrcmJfZ2V0X3RmX3JlYWxtKGZpbGUsIHJlYWxt KTsKLSAgICB9Ci0gICAgaWYgKGtfZXJybm8gIT0gS1NVQ0NFU1MpIHsKLSAgICAgICAga19lcnJu byA9IGtyYl9nZXRfbHJlYWxtKHJlYWxtLCAxKTsKLSAgICB9Ci0gICAgcmV0dXJuKHJlYWxtKTsK LSNlbHNlIC8qIEtSQjQgKi8KLSAgICByZXR1cm4oIiIpOwotI2VuZGlmIC8qIEtSQjQgKi8KLX0K LQotY2hhciAqCi0jaWZkZWYgQ0tfQU5TSUMKLWNrX2tyYjRfZ2V0cHJpbmNpcGFsKHZvaWQpCi0j ZWxzZQotY2tfa3JiNF9nZXRwcmluY2lwYWwoKQotI2VuZGlmCi17Ci0jaWZkZWYgS1JCNAotICAg IGNoYXIgICAqZmlsZT1OVUxMOwotICAgIGludCAgICAga19lcnJubzsKLSAgICBzdGF0aWMgY2hh ciBwcmluY2lwYWxbMjU2XT0iIjsKLSAgICBjaGFyICAgICAgICBpbnN0YW5jZVsyNTZdPSIiOwot ICAgIGNoYXIgICAgICAgIHJlYWxtWzI1Nl09IiI7Ci0gICAgcHJpbmNpcGFsWzBdPSdcMCc7Ci0K LSAgICBpZiAoICFja19rcmI0X2lzX2luc3RhbGxlZCgpICkKLSAgICAgICAgcmV0dXJuKHByaW5j aXBhbCk7Ci0KLSAgICAvKiBUcnkgdG8gZ2V0IHJlYWxtIGZyb20gdGlja2V0IGZpbGUgKi8KLSAg ICAvKiBJZiBmYWlsdXJlIGdldCB0aGUgbG9jYWwgcmVhbG0gICAgKi8KLQotICAgIC8qCi0gICAg KiBTaW5jZSBrcmJfZ2V0X3RmX3JlYWxtIHdpbGwgcmV0dXJuIGEgdGlja2V0X2ZpbGUgZXJyb3Is Ci0gICAgKiB3ZSB3aWxsIGNhbGwgdGZfaW5pdCBhbmQgdGZfY2xvc2UgZmlyc3QgdG8gZmlsdGVy IG91dAotICAgICogdGhpbmdzIGxpa2Ugbm8gdGlja2V0IGZpbGUuCi0gICAgKi8KLQotICAgIC8q IE9wZW4gdGlja2V0IGZpbGUgKi8KLSAgICBmaWxlID0gdGt0X3N0cmluZygpOwotICAgIGlmIChm aWxlID09IE5VTEwgfHwgIWZpbGVbMF0pCi0gICAgICAgIHJldHVybihwcmluY2lwYWwpOwotCi0g ICAgaWYgKChrX2Vycm5vID0gdGZfaW5pdChmaWxlLCBSX1RLVF9GSUwpKSA9PSBLU1VDQ0VTUykg ewotICAgICAgICAvKiBDbG9zZSB0aWNrZXQgZmlsZSAqLwotICAgICAgICAodm9pZCkgdGZfY2xv c2UoKTsKLQotICAgICAgICBrX2Vycm5vID0ga3JiX2dldF90Zl9mdWxsbmFtZShmaWxlLCBwcmlu Y2lwYWwsIGluc3RhbmNlLCByZWFsbSk7Ci0gICAgfQotICAgIHJldHVybihwcmluY2lwYWwpOwot I2Vsc2UgLyogS1JCNCAqLwotICAgIHJldHVybigiIik7Ci0jZW5kaWYgLyogS1JCNCAqLwotfQot Ci1zdGF0aWMgc3RydWN0IHRrdF9saXN0X2l0ZW0gKiBrNV90a3RfbGlzdCA9IE5VTEw7Ci0KLWlu dAotI2lmZGVmIENLX0FOU0lDCi1ja19rcmI1X2dldF90a3RzKGNoYXIgKiBjY19uYW1lKQotI2Vs c2UKLWNrX2tyYjVfZ2V0X3RrdHMoY2NfbmFtZSkgY2hhciAqIGNjX25hbWU7Ci0jZW5kaWYKLXsK LSNpZmRlZiBLUkI1Ci0jaWZuZGVmIEhFSU1EQUwKLSAgICBrcmI1X2NvbnRleHQga2NvbnRleHQ7 Ci0gICAga3JiNV9lcnJvcl9jb2RlIHJldHZhbDsKLSAgICBrcmI1X2NjYWNoZSBjYWNoZSA9IE5V TEw7Ci0gICAga3JiNV9jY19jdXJzb3IgY3VyOwotICAgIGtyYjVfY3JlZHMgY3JlZHM7Ci0gICAg a3JiNV9wcmluY2lwYWwgcHJpbmM9TlVMTDsKLSAgICBrcmI1X2ZsYWdzIGZsYWdzPTA7Ci0gICAg a3JiNV9lcnJvcl9jb2RlIGNvZGU9MDsKLSAgICBpbnQgZXhpdF9zdGF0dXMgPSAwOwotCi0gICAg aW50ICAgICB0a3RfY291bnQ9MDsKLSAgICBzdHJ1Y3QgIHRrdF9saXN0X2l0ZW0gKiogbGlzdCA9 ICZrNV90a3RfbGlzdDsKLQotICAgIHdoaWxlICggazVfdGt0X2xpc3QgKSB7Ci0gICAgICAgIHN0 cnVjdCB0a3RfbGlzdF9pdGVtICogbmV4dDsKLSAgICAgICAgbmV4dCA9IGs1X3RrdF9saXN0LT5u ZXh0OwotICAgICAgICBmcmVlKGs1X3RrdF9saXN0LT5uYW1lKTsKLSAgICAgICAgZnJlZShrNV90 a3RfbGlzdCk7Ci0gICAgICAgIGs1X3RrdF9saXN0ID0gbmV4dDsKLSAgICB9Ci0KLSAgICBpZiAo ICFja19rcmI1X2lzX2luc3RhbGxlZCgpICkKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotICAgIHJl dHZhbCA9IGtyYjVfaW5pdF9jb250ZXh0KCZrY29udGV4dCk7Ci0gICAgaWYgKHJldHZhbCkgewot ICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2dldF90a3RzIHdoaWxlIGluaXRpYWxpemluZyBr cmI1IiwiIixyZXR2YWwpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIGNvZGUg PSBrNV9nZXRfY2NhY2hlKGtjb250ZXh0LCZjYWNoZSxjY19uYW1lKTsKLSAgICBpZiAoY29kZSAh PSAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsImNrX2tyYjVfZ2V0X3RrdHMgd2hpbGUgZ2V0dGlu ZyBjY2FjaGUiLAotICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZShjb2RlKSxjb2RlKTsKLSAg ICAgICAgdGt0X2NvdW50ID0gLTE7Ci0gICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OwotICAg IH0KLQotICAgIGZsYWdzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHR1cm5zIG9m ZiBPUEVOQ0xPU0UgbW9kZSAqLwotICAgIGlmICgoY29kZSA9IGtyYjVfY2Nfc2V0X2ZsYWdzKGtj b250ZXh0LCBjYWNoZSwgZmxhZ3MpKSkgewotICAgICAgICBpZiAoY29kZSA9PSBFTk9FTlQpIHsK LSAgICAgICAgICAgIGRlYnVnKEYxMTEsImNrX2tyYjVfZ2V0X3RrdHMgKHRpY2tldCBjYWNoZSki LAotICAgICAgICAgICAgICAgICAgIGtyYjVfY2NfZ2V0X25hbWUoa2NvbnRleHQsIGNhY2hlKSxj b2RlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsCi0gICAgICAg ICAgICAgICAgICJja19rcmI1X2dldF90a3RzIHdoaWxlIHNldHRpbmcgY2FjaGUgZmxhZ3MgKHRp Y2tldCBjYWNoZSkiLAotICAgICAgICAgICAgICAgICAga3JiNV9jY19nZXRfbmFtZShrY29udGV4 dCwgY2FjaGUpLGNvZGUpOwotICAgICAgICB9Ci0gICAgICAgIHRrdF9jb3VudCA9IC0xOwotICAg ICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0gICAgaWYgKChjb2RlID0ga3JiNV9j Y19nZXRfcHJpbmNpcGFsKGtjb250ZXh0LCBjYWNoZSwgJnByaW5jKSkpIHsKLSAgICAgICAgZGVi dWcoRjEwMSwiY2tfa3JiNV9nZXRfdGt0cyB3aGlsZSByZXRyaWV2aW5nIHByaW5jaXBhbCBuYW1l IiwKLSAgICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAgICB0a3RfY291bnQgPSAtMTsKLSAg ICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0gICAgfQotICAgIGlmICgoY29kZSA9IGtyYjVf dW5wYXJzZV9uYW1lKGtjb250ZXh0LCBwcmluYywgJmRlZm5hbWUpKSkgewotICAgICAgICBkZWJ1 ZyhGMTAxLCJja19rcmI1X2dldF90a3RzIHdoaWxlIHVucGFyc2luZyBwcmluY2lwYWwgbmFtZSIs Ci0gICAgICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAgdGt0X2NvdW50ID0gLTE7Ci0gICAg ICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OwotICAgIH0KLQotICAgIGlmICgoY29kZSA9IGtyYjVf Y2Nfc3RhcnRfc2VxX2dldChrY29udGV4dCwgY2FjaGUsICZjdXIpKSkgewotICAgICAgICBkZWJ1 ZyhGMTAxLCJja19rcmI1X2dldF90a3RzIHdoaWxlIHN0YXJ0aW5nIHRvIHJldHJpZXZlIHRpY2tl dHMiLAotICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgIHRrdF9jb3VudCA9IC0xOwot ICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIShjb2Rl ID0ga3JiNV9jY19uZXh0X2NyZWQoa2NvbnRleHQsIGNhY2hlLCAmY3VyLCAmY3JlZHMpKSkgewot ICAgICAgICBjaGFyICpzbmFtZT1OVUxMOwotCi0gICAgICAgIHJldHZhbCA9IGtyYjVfdW5wYXJz ZV9uYW1lKGtjb250ZXh0LCBjcmVkcy5zZXJ2ZXIsICZzbmFtZSk7Ci0gICAgICAgIGlmIChyZXR2 YWwpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsCi0gICAgICAgICAgICAgICAgICAiY2tfa3Ji NV9nZXRfdGt0cyB3aGlsZSB1bnBhcnNpbmcgc2VydmVyIG5hbWUiLCIiLHJldHZhbCk7Ci0gICAg ICAgICAgICB0a3RfY291bnQgPSAtMTsKLSAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0 OwotICAgICAgICB9Ci0KLSAgICAgICAgKmxpc3QgPSAoc3RydWN0IHRrdF9saXN0X2l0ZW0gKikg bWFsbG9jKHNpemVvZihzdHJ1Y3QgdGt0X2xpc3RfaXRlbSkpOwotICAgICAgICAoKmxpc3QpLT5u YW1lID0gc25hbWU7Ci0gICAgICAgICgqbGlzdCktPm5leHQgPSBOVUxMOwotICAgICAgICBsaXN0 ID0gJigoKmxpc3QpLT5uZXh0KTsKLQotICAgICAgICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShr Y29udGV4dCxzbmFtZSk7Ci0gICAgICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGtjb250ZXh0 LCAmY3JlZHMpOwotICAgICAgICB0a3RfY291bnQrKzsKLSAgICB9Ci0KLSAgICBpZiAoY29kZSA9 PSBLUkI1X0NDX0VORCkgewotICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX2VuZF9zZXFfZ2V0 KGtjb250ZXh0LCBjYWNoZSwgJmN1cikpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19r cmI1X2dldF90a3RzIHdoaWxlIGZpbmlzaGluZyB0aWNrZXQgcmV0cmlldmFsIiwKLSAgICAgICAg ICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAgICAgIHRrdF9jb3VudCA9IC0xOwotICAgICAg ICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0gICAgICAgIH0KLSAgICAgICAgZmxhZ3MgPSBL UkI1X1RDX09QRU5DTE9TRTsgICAgICAvKiB0dXJucyBvbiBPUEVOQ0xPU0UgbW9kZSAqLwotICAg ICAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX3NldF9mbGFncyhrY29udGV4dCwgY2FjaGUsIGZsYWdz KSkpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfZ2V0X3RrdHMgd2hpbGUgY2xv c2luZyBjY2FjaGUiLAotICAgICAgICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAgICAgICAg dGt0X2NvdW50ID0gLTE7Ci0gICAgICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICAg ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfZ2V0X3RrdHMg d2hpbGUgcmV0cmlldmluZyBhIHRpY2tldCIsIiIsY29kZSk7Ci0gICAgICAgIHRrdF9jb3VudCA9 IC0xOwotICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0KLSAgZXhpdF9rNV9n ZXRfdGt0OgotICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoa2NvbnRleHQscHJpbmMpOwotICAgIGty YjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LGRlZm5hbWUpOwotICAgIGtyYjVfY2NfY2xv c2Uoa2NvbnRleHQsY2FjaGUpOwotICAgIGtyYjVfZnJlZV9jb250ZXh0KGtjb250ZXh0KTsKLSAg ICByZXR1cm4odGt0X2NvdW50KTsKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICByZXR1cm4oLTEp OwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSNlbHNlIC8qIEtSQjUgKi8KLSAgICByZXR1cm4oMCk7 Ci0jZW5kaWYgLyogS1JCNSAqLwotfQotCi1jaGFyICoKLSNpZmRlZiBDS19BTlNJQwotY2tfa3Ji NV9nZXRfbmV4dF90a3QoVk9JRCkKLSNlbHNlCi1ja19rcmI1X2dldF9uZXh0X3RrdCgpCi0jZW5k aWYKLXsKLSNpZmRlZiBLUkI1Ci0jaWZuZGVmIEhFSU1EQUwKLSAgICBzdGF0aWMgY2hhciAqIHM9 TlVMTDsKLSAgICBzdHJ1Y3QgdGt0X2xpc3RfaXRlbSAqIG5leHQ9TlVMTDsKLQotICAgIGlmICgg cyApIHsKLSAgICAgICAgZnJlZShzKTsKLSAgICAgICAgcyA9IE5VTEw7Ci0gICAgfQotCi0gICAg aWYgKCBrNV90a3RfbGlzdCA9PSBOVUxMICkKLSAgICAgICAgcmV0dXJuKE5VTEwpOwotCi0gICAg bmV4dCA9IGs1X3RrdF9saXN0LT5uZXh0OwotICAgIHMgPSBrNV90a3RfbGlzdC0+bmFtZTsKLSAg ICBmcmVlKGs1X3RrdF9saXN0KTsKLSAgICBrNV90a3RfbGlzdCA9IG5leHQ7Ci0gICAgcmV0dXJu KHMpOwotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgIHJldHVybigiTm90IGltcGxlbWVudGVkIik7 Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotI2Vsc2UgLyogS1JCNSAqLwotICAgIHJldHVybihOVUxM KTsKLSNlbmRpZiAvKiBLUkI1ICovCi19Ci0KLWNoYXIgKgotI2lmZGVmIENLX0FOU0lDCi1ja19r cmI1X3RrdF9mbGFncyhjaGFyICogY2NfbmFtZSwgY2hhciAqIHRrdG5hbWUpCi0jZWxzZQotY2tf a3JiNV90a3RfZmxhZ3MoY2NfbmFtZSx0a3RuYW1lKSBjaGFyICogY2NfbmFtZTsgY2hhciAqIHRr dG5hbWU7Ci0jZW5kaWYKLXsKLSNpZmRlZiBLUkI1Ci0jaWZuZGVmIEhFSU1EQUwKLSAgICBrcmI1 X2NvbnRleHQga2NvbnRleHQ7Ci0gICAga3JiNV9lcnJvcl9jb2RlIHJldHZhbDsKLSAgICBrcmI1 X2NjYWNoZSBjYWNoZSA9IE5VTEw7Ci0gICAga3JiNV9jY19jdXJzb3IgY3VyOwotICAgIGtyYjVf Y3JlZHMgY3JlZHM7Ci0gICAga3JiNV9wcmluY2lwYWwgcHJpbmM9TlVMTDsKLSAgICBrcmI1X2Zs YWdzIGZsYWdzPTA7Ci0gICAga3JiNV9lcnJvcl9jb2RlIGNvZGU9MDsKLSAgICBjaGFyICogZmxh Z19zdHIgPSAiIjsKLQotICAgIGlmICggIWNrX2tyYjVfaXNfaW5zdGFsbGVkKCkgKQotICAgICAg ICByZXR1cm4oIiIpOwotCi0gICAgcmV0dmFsID0ga3JiNV9pbml0X2NvbnRleHQoJmtjb250ZXh0 KTsKLSAgICBpZiAocmV0dmFsKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfdGt0X2Zs YWdzIHdoaWxlIGluaXRpYWxpemluZyBrcmI1IiwiIixyZXR2YWwpOwotICAgICAgICByZXR1cm4o IiIpOwotICAgIH0KLQotICAgIGNvZGUgPSBrNV9nZXRfY2NhY2hlKGtjb250ZXh0LCZjYWNoZSxj Y19uYW1lKTsKLSAgICBpZiAoY29kZSAhPSAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsImNrX2ty YjVfdGt0X2lzdmFsaWQgd2hpbGUgZ2V0dGluZyBjY2FjaGUiLAotICAgICAgICAgICAgICAgZXJy b3JfbWVzc2FnZShjb2RlKSxjb2RlKTsKLSAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0g ICAgfQotCi0gICAgZmxhZ3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHVybnMg b2ZmIE9QRU5DTE9TRSBtb2RlICovCi0gICAgaWYgKChjb2RlID0ga3JiNV9jY19zZXRfZmxhZ3Mo a2NvbnRleHQsIGNhY2hlLCBmbGFncykpKSB7Ci0gICAgICAgIGlmIChjb2RlID09IEVOT0VOVCkg ewotICAgICAgICAgICAgZGVidWcoRjExMSwiY2tfa3JiNV90a3RfZmxhZ3MgKHRpY2tldCBjYWNo ZSkiLAotICAgICAgICAgICAgICAgICAgIGtyYjVfY2NfZ2V0X25hbWUoa2NvbnRleHQsIGNhY2hl KSxjb2RlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsCi0gICAg ICAgICAgICAgICAgICJja19rcmI1X3RrdF9mbGFncyB3aGlsZSBzZXR0aW5nIGNhY2hlIGZsYWdz ICh0aWNrZXQgY2FjaGUpIiwKLSAgICAgICAgICAgICAgICAgIGtyYjVfY2NfZ2V0X25hbWUoa2Nv bnRleHQsIGNhY2hlKSxjb2RlKTsKLSAgICAgICAgfQotICAgICAgICByZXR2YWwgPSAtMTsKLSAg ICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0gICAgfQotICAgIGlmICgoY29kZSA9IGtyYjVf Y2NfZ2V0X3ByaW5jaXBhbChrY29udGV4dCwgY2FjaGUsICZwcmluYykpKSB7Ci0gICAgICAgIGRl YnVnKEYxMDEsImNrX2tyYjVfdGt0X2ZsYWdzIHdoaWxlIHJldHJpZXZpbmcgcHJpbmNpcGFsIG5h bWUiLAotICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgIHJldHZhbCA9IC0xOwotICAg ICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0gICAgaWYgKChjb2RlID0ga3JiNV91 bnBhcnNlX25hbWUoa2NvbnRleHQsIHByaW5jLCAmZGVmbmFtZSkpKSB7Ci0gICAgICAgIGRlYnVn KEYxMDEsImNrX2tyYjVfdGt0X2ZsYWdzIHdoaWxlIHVucGFyc2luZyBwcmluY2lwYWwgbmFtZSIs Ci0gICAgICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAgICAg IGdvdG8gZXhpdF9rNV9nZXRfdGt0OwotICAgIH0KLQotICAgIGlmICgoY29kZSA9IGtyYjVfY2Nf c3RhcnRfc2VxX2dldChrY29udGV4dCwgY2FjaGUsICZjdXIpKSkgewotICAgICAgICBkZWJ1ZyhG MTAxLCJja19rcmI1X3RrdF9mbGFncyB3aGlsZSBzdGFydGluZyB0byByZXRyaWV2ZSB0aWNrZXRz IiwKLSAgICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAgICByZXR2YWwgPSAtMTsKLSAgICAg ICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0gICAgfQotCi0gICAgaWYgKChjb2RlID0ga3JiNV90 aW1lb2ZkYXkoa2NvbnRleHQsICZub3cpKSkgewotICAgICAgICBpZiAoIXN0YXR1c19vbmx5KQot ICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV90a3RfZmxhZ3Mgd2hpbGUgZ2V0dGluZyB0 aW1lIG9mIGRheS4iLAotICAgICAgICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAgICByZXR2 YWwgPSAtMTsKLSAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0gICAgfQotCi0gICAgd2hp bGUgKCEoY29kZSA9IGtyYjVfY2NfbmV4dF9jcmVkKGtjb250ZXh0LCBjYWNoZSwgJmN1ciwgJmNy ZWRzKSkpIHsKLSAgICAgICAgY2hhciAqc25hbWU9TlVMTDsKLQotICAgICAgICByZXR2YWwgPSBr cmI1X3VucGFyc2VfbmFtZShrY29udGV4dCwgY3JlZHMuc2VydmVyLCAmc25hbWUpOwotICAgICAg ICBpZiAocmV0dmFsKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLAotICAgICAgICAgICAgICAg ICAgImNrX2tyYjVfdGt0X2ZsYWdzIHdoaWxlIHVucGFyc2luZyBzZXJ2ZXIgbmFtZSIsIiIscmV0 dmFsKTsKLSAgICAgICAgICAgIHJldHZhbCA9IC0xOwotICAgICAgICAgICAga3JiNV9mcmVlX2Ny ZWRfY29udGVudHMoa2NvbnRleHQsICZjcmVkcyk7Ci0gICAgICAgICAgICBnb3RvIGV4aXRfazVf Z2V0X3RrdDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggIXN0cmNtcChzbmFtZSx0a3RuYW1l KSApIHsKLSAgICAgICAgICAgIC8qIHdlIGZvdW5kIHRoZSB0aWNrZXQgd2UgYXJlIGxvb2tpbmcg Zm9yICovCi0KLSAgICAgICAgICAgIGZsYWdfc3RyID0gZmxhZ3Nfc3RyaW5nKCZjcmVkcyk7Ci0K LSAgICAgICAgICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LHNuYW1lKTsKLSAg ICAgICAgICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3JlZHMpOwotICAg ICAgICAgICAgY29kZSA9IEtSQjVfQ0NfRU5EOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg IH0KLSAgICAgICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsc25hbWUpOwotICAg ICAgICBrcmI1X2ZyZWVfY3JlZF9jb250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsKLSAgICB9Ci0K LSAgICBpZiAoY29kZSA9PSBLUkI1X0NDX0VORCkgewotICAgICAgICBpZiAoKGNvZGUgPSBrcmI1 X2NjX2VuZF9zZXFfZ2V0KGtjb250ZXh0LCBjYWNoZSwgJmN1cikpKSB7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9mbGFncyB3aGlsZSBmaW5pc2hpbmcgdGlja2V0IHJldHJp ZXZhbCIsCi0gICAgICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgICAgICBnb3RvIGV4 aXRfazVfZ2V0X3RrdDsKLSAgICAgICAgfQotICAgICAgICBmbGFncyA9IEtSQjVfVENfT1BFTkNM T1NFOyAgICAgIC8qIHR1cm5zIG9uIE9QRU5DTE9TRSBtb2RlICovCi0gICAgICAgIGlmICgoY29k ZSA9IGtyYjVfY2Nfc2V0X2ZsYWdzKGtjb250ZXh0LCBjYWNoZSwgZmxhZ3MpKSkgewotICAgICAg ICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV90a3RfZmxhZ3Mgd2hpbGUgY2xvc2luZyBjY2FjaGUi LAotICAgICAgICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAgICAgICAgZ290byBleGl0X2s1 X2dldF90a3Q7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBkZWJ1ZyhGMTAxLCJj a19rcmI1X3RrdF9mbGFncyB3aGlsZSByZXRyaWV2aW5nIGEgdGlja2V0IiwiIixjb2RlKTsKLSAg ICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0gICAgfQotCi0gIGV4aXRfazVfZ2V0X3RrdDoK LSAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGtjb250ZXh0LHByaW5jKTsKLSAgICBrcmI1X2ZyZWVf dW5wYXJzZWRfbmFtZShrY29udGV4dCxkZWZuYW1lKTsKLSAgICBrcmI1X2NjX2Nsb3NlKGtjb250 ZXh0LGNhY2hlKTsKLSAgICBrcmI1X2ZyZWVfY29udGV4dChrY29udGV4dCk7Ci0gICAgcmV0dXJu KGZsYWdfc3RyKTsKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICByZXR1cm4oIk5vdCBpbXBsZW1l bnRlZCIpOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSNlbHNlIC8qIEtSQjUgKi8KLSAgICByZXR1 cm4oIiIpOwotI2VuZGlmIC8qIEtSQjUgKi8KLX0KLQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwot Y2tfa3JiNV90a3RfaXN2YWxpZChjaGFyICogY2NfbmFtZSwgY2hhciAqIHRrdG5hbWUpCi0jZWxz ZQotY2tfa3JiNV90a3RfaXN2YWxpZChjY19uYW1lLHRrdG5hbWUpIGNoYXIgKiBjY19uYW1lOyBj aGFyICogdGt0bmFtZTsKLSNlbmRpZgotewotI2lmZGVmIEtSQjUKLSNpZm5kZWYgSEVJTURBTAot ICAgIGtyYjVfY29udGV4dCBrY29udGV4dD1OVUxMOwotICAgIGtyYjVfZXJyb3JfY29kZSByZXR2 YWw7Ci0gICAga3JiNV9jY2FjaGUgY2FjaGUgPSBOVUxMOwotICAgIGtyYjVfY2NfY3Vyc29yIGN1 cjsKLSAgICBrcmI1X2NyZWRzIGNyZWRzOwotICAgIGtyYjVfcHJpbmNpcGFsIHByaW5jPU5VTEw7 Ci0gICAga3JiNV9mbGFncyBmbGFncz0wOwotICAgIGtyYjVfZXJyb3JfY29kZSBjb2RlPTA7Ci0j aWZkZWYgQ0hFQ0tBRERSUwotICAgIGtyYjVfYWRkcmVzcyAqKiAgICAgbXlBZGRycz1OVUxMOwot ICAgIGtyYjVfYWRkcmVzcyAqKiAgICAgcD1OVUxMOwotICAgIEJPT0wgICAgICAgICAgICAgICAg QWRkcmZvdW5kID0gRkFMU0U7Ci0jZW5kaWYgLypDSEVDS0FERFJTKi8KLQotICAgIGlmICggIWNr X2tyYjVfaXNfaW5zdGFsbGVkKCkgKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgcmV0dmFs ID0ga3JiNV9pbml0X2NvbnRleHQoJmtjb250ZXh0KTsKLSAgICBpZiAocmV0dmFsKSB7Ci0gICAg ICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfdGt0X2lzdmFsaWQgd2hpbGUgaW5pdGlhbGl6aW5nIGty YjUiLCIiLHJldHZhbCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgY29kZSA9 IGs1X2dldF9jY2FjaGUoa2NvbnRleHQsJmNhY2hlLGNjX25hbWUpOwotICAgIGlmIChjb2RlICE9 IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwiY2tfa3JiNV90a3RfaXN2YWxpZCB3aGlsZSBnZXR0 aW5nIGNjYWNoZSIsCi0gICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlKGNvZGUpLGNvZGUpOwot ICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0KLSAgICBmbGFncyA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0dXJucyBvZmYgT1BFTkNMT1NFIG1vZGUgKi8KLSAg ICBpZiAoKGNvZGUgPSBrcmI1X2NjX3NldF9mbGFncyhrY29udGV4dCwgY2FjaGUsIGZsYWdzKSkp IHsKLSAgICAgICAgaWYgKGNvZGUgPT0gRU5PRU5UKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEx LCJja19rcmI1X3RrdF9pc3ZhbGlkICh0aWNrZXQgY2FjaGUpIiwKLSAgICAgICAgICAgICAgICAg ICBrcmI1X2NjX2dldF9uYW1lKGtjb250ZXh0LCBjYWNoZSksY29kZSk7Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAgICAgICAgICJja19rcmI1X3Rr dF9pc3ZhbGlkIHdoaWxlIHNldHRpbmcgY2FjaGUgZmxhZ3MgKHRpY2tldCBjYWNoZSkiLAotICAg ICAgICAgICAgICAgICAga3JiNV9jY19nZXRfbmFtZShrY29udGV4dCwgY2FjaGUpLGNvZGUpOwot ICAgICAgICB9Ci0gICAgICAgIHJldHZhbCA9IC0xOwotICAgICAgICBnb3RvIGV4aXRfazVfZ2V0 X3RrdDsKLSAgICB9Ci0gICAgaWYgKChjb2RlID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGtjb250 ZXh0LCBjYWNoZSwgJnByaW5jKSkpIHsKLSAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV90a3Rf aXN2YWxpZCB3aGlsZSByZXRyaWV2aW5nIHByaW5jaXBhbCBuYW1lIiwKLSAgICAgICAgICAgICAg ICIiLGNvZGUpOwotICAgICAgICByZXR2YWwgPSAtMTsKLSAgICAgICAgZ290byBleGl0X2s1X2dl dF90a3Q7Ci0gICAgfQotICAgIGlmICgoY29kZSA9IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250ZXh0 LCBwcmluYywgJmRlZm5hbWUpKSkgewotICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9p c3ZhbGlkIHdoaWxlIHVucGFyc2luZyBwcmluY2lwYWwgbmFtZSIsCi0gICAgICAgICAgICAgICAi Iixjb2RlKTsKLSAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAgICAgIGdvdG8gZXhpdF9rNV9nZXRf dGt0OwotICAgIH0KLQotICAgIGlmICgoY29kZSA9IGtyYjVfY2Nfc3RhcnRfc2VxX2dldChrY29u dGV4dCwgY2FjaGUsICZjdXIpKSkgewotICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9p c3ZhbGlkIHdoaWxlIHN0YXJ0aW5nIHRvIHJldHJpZXZlIHRpY2tldHMiLAotICAgICAgICAgICAg ICAgIiIsY29kZSk7Ci0gICAgICAgIHJldHZhbCA9IC0xOwotICAgICAgICBnb3RvIGV4aXRfazVf Z2V0X3RrdDsKLSAgICB9Ci0KLSAgICBpZiAoKGNvZGUgPSBrcmI1X3RpbWVvZmRheShrY29udGV4 dCwgJm5vdykpKSB7Ci0gICAgICAgIGlmICghc3RhdHVzX29ubHkpCi0gICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJja19rcmI1X3RrdF9pc3ZhbGlkIHdoaWxlIGdldHRpbmcgdGltZSBvZiBkYXkuIiwK LSAgICAgICAgICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAg ICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OwotICAgIH0KLQotICAgIHdoaWxlICghKGNvZGUgPSBr cmI1X2NjX25leHRfY3JlZChrY29udGV4dCwgY2FjaGUsICZjdXIsICZjcmVkcykpKSB7Ci0gICAg ICAgIGNoYXIgKnNuYW1lPU5VTEw7Ci0KLSAgICAgICAgcmV0dmFsID0ga3JiNV91bnBhcnNlX25h bWUoa2NvbnRleHQsIGNyZWRzLnNlcnZlciwgJnNuYW1lKTsKLSAgICAgICAgaWYgKHJldHZhbCkg ewotICAgICAgICAgICAgZGVidWcoRjEwMSwKLSAgICAgICAgICAgICAgICAgICJja19rcmI1X3Rr dF9pc3ZhbGlkIHdoaWxlIHVucGFyc2luZyBzZXJ2ZXIgbmFtZSIsIiIscmV0dmFsKTsKLSAgICAg ICAgICAgIHJldHZhbCA9IC0xOwotICAgICAgICAgICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMo a2NvbnRleHQsICZjcmVkcyk7Ci0gICAgICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAg ICAgICAgfQotCi0gICAgICAgIGlmICggIXN0cmNtcChzbmFtZSx0a3RuYW1lKSApIHsKLSAgICAg ICAgICAgIC8qIHdlIGZvdW5kIHRoZSB0aWNrZXQgd2UgYXJlIGxvb2tpbmcgZm9yICovCi0KLSAg ICAgICAgICAgIC8qIFdlIGFkZCBhIDUgbWludXRlcyBmdWRnZSBmYWN0b3IgdG8gY29tcGVuc2F0 ZSBmb3IgcG90ZW50aWFsICovCi0gICAgICAgICAgICAvKiBjbG9jayBza2V3IGVycm9ycyBiZXR3 ZWVuIHRoZSBLREMgYW5kIEs5NSdzIGhvc3QgT1MgICAgICAgICAqLwotCi0gICAgICAgICAgICBy ZXR2YWwgPSAoKGNyZWRzLnRpbWVzLnN0YXJ0dGltZSA+IDApICYmCi0gICAgICAgICAgICAgICAg ICAgICAgIG5vdyA+PSAoY3JlZHMudGltZXMuc3RhcnR0aW1lIC0gMzAwKSAmJgotICAgICAgICAg ICAgICAgICAgICAgICBub3cgPCAoY3JlZHMudGltZXMuZW5kdGltZSArIDMwMCkgJiYKLSAgICAg ICAgICAgICAgICAgICAgICAgIShjcmVkcy50aWNrZXRfZmxhZ3MgJiBUS1RfRkxHX0lOVkFMSUQp KTsKLQotI2lmZGVmIENIRUNLQUREUlMKLSAgICAgICAgICAgIGlmICggcmV0dmFsICYmIGtyYjVf Y2hlY2thZGRycyAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlZHMuYWRk cmVzc2VzICYmIGNyZWRzLmFkZHJlc3Nlc1swXSApIHsKLSAgICAgICAgICAgICAgICAvKiBpZiB3 ZSB0aGluayBpdCBpcyB2YWxpZCwgdGhlbiBsZXRzIGNoZWNrIHRoZSBJUCBBZGRyZXNzZXMgKi8K LSAgICAgICAgICAgICAgICAvKiB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQgZm9yIG91ciBjdXJy ZW50IGNvbm5lY3Rpb24uICAgICAgKi8KLSAgICAgICAgICAgICAgICAvKiBBbHNvIG1ha2Ugc3Vy ZSBpdCdzIGZvciB0aGUgY29ycmVjdCBJUCBhZGRyZXNzICovCi0gICAgICAgICAgICAgICAgcmV0 dmFsID0ga3JiNV9vc19sb2NhbGFkZHIoa2NvbnRleHQsICZteUFkZHJzKTsKLSAgICAgICAgICAg ICAgICBpZiAocmV0dmFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbV9lcnIoTlVMTCwgcmV0 dmFsLCAicmV0cmlldmluZyBteSBJUCBhZGRyZXNzIik7Ci0gICAgICAgICAgICAgICAgICAgIGty YjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LHNuYW1lKTsKLSAgICAgICAgICAgICAgICAg ICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoa2NvbnRleHQsICZjcmVkcyk7Ci0gICAgICAgICAg ICAgICAgICAgIGNvZGUgPSBLUkI1X0NDX0VORDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFs ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQot ICAgICAgICAgICAgIC8qIFNlZSBpZiBhbnkgb2Ygb3VyIGFkZHJlc3NlcyBtYXRjaCBhbnkgaW4g Y2FjaGVkIGNyZWRlbnRpYWxzICovCi0KLSAgICAgICAgICAgICAgICBmb3IgKEFkZHJmb3VuZD1G QUxTRSwgcD1teUFkZHJzOwotICAgICAgICAgICAgICAgICAgICAgKEFkZHJmb3VuZD09RkFMU0Up ICYmICgqcCk7Ci0gICAgICAgICAgICAgICAgICAgICBwKysKLSAgICAgICAgICAgICAgICAgICAg ICkgewotICAgICAgICAgICAgICAgICAgICBpZiAoa3JiNV9hZGRyZXNzX3NlYXJjaChrY29udGV4 dCwgKnAsIGNyZWRzLmFkZHJlc3NlcykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJm b3VuZCA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAga3JiNV9mcmVlX2FkZHJlc3NlcyhrNV9jb250ZXh0LCBteUFkZHJzKTsK LQotICAgICAgICAgICAgICAgIGlmIChBZGRyZm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAg a3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsc25hbWUpOwotICAgICAgICAgICAgICAg ICAgICBrcmI1X2ZyZWVfY3JlZF9jb250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsKLSAgICAgICAg ICAgICAgICAgICAgY29kZSA9IEtSQjVfQ0NfRU5EOwotICAgICAgICAgICAgICAgICAgICByZXR2 YWwgPSAxOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgICAgICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4 dCxzbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGtj b250ZXh0LCAmY3JlZHMpOwotICAgICAgICAgICAgICAgICAgICBjb2RlID0gS1JCNV9DQ19FTkQ7 Ci0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDSEVDS0FE RFJTICovCi0KLSAgICAgICAgICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LHNu YW1lKTsKLSAgICAgICAgICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3Jl ZHMpOwotICAgICAgICAgICAgY29kZSA9IEtSQjVfQ0NfRU5EOwotICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIH0KLSAgICAgICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsc25h bWUpOwotICAgICAgICBrcmI1X2ZyZWVfY3JlZF9jb250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsK LSAgICB9Ci0KLSAgICBpZiAoY29kZSA9PSBLUkI1X0NDX0VORCkgewotICAgICAgICBpZiAoKGNv ZGUgPSBrcmI1X2NjX2VuZF9zZXFfZ2V0KGtjb250ZXh0LCBjYWNoZSwgJmN1cikpKSB7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9pc3ZhbGlkIHdoaWxlIGZpbmlzaGluZyB0 aWNrZXQgcmV0cmlldmFsIiwKLSAgICAgICAgICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAg ICAgIHJldHZhbCA9IC0xOwotICAgICAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0gICAg ICAgIH0KLSAgICAgICAgZmxhZ3MgPSBLUkI1X1RDX09QRU5DTE9TRTsgICAgICAvKiB0dXJucyBv biBPUEVOQ0xPU0UgbW9kZSAqLwotICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX3NldF9mbGFn cyhrY29udGV4dCwgY2FjaGUsIGZsYWdzKSkpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImNr X2tyYjVfdGt0X2lzdmFsaWQgd2hpbGUgY2xvc2luZyBjY2FjaGUiLAotICAgICAgICAgICAgICAg ICAgICIiLGNvZGUpOwotICAgICAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAgICAgICAgICBnb3Rv IGV4aXRfazVfZ2V0X3RrdDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlYnVn KEYxMDEsImNrX2tyYjVfdGt0X2lzdmFsaWQgd2hpbGUgcmV0cmlldmluZyBhIHRpY2tldCIsIiIs Y29kZSk7Ci0gICAgICAgIHJldHZhbCA9IC0xOwotICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3Rr dDsKLSAgICB9Ci0KLSAgZXhpdF9rNV9nZXRfdGt0OgotICAgIGtyYjVfZnJlZV9wcmluY2lwYWwo a2NvbnRleHQscHJpbmMpOwotICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LGRl Zm5hbWUpOwotICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRleHQsY2FjaGUpOwotICAgIGtyYjVfZnJl ZV9jb250ZXh0KGtjb250ZXh0KTsKLSAgICByZXR1cm4ocmV0dmFsKTsKLSNlbHNlIC8qIEhFSU1E QUwgKi8KLSAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSNlbHNlIC8qIEtS QjUgKi8KLSAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIEtSQjUgKi8KLX0KLQotaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLWNrX2tyYjVfaXNfdGd0X3ZhbGlkKFZPSUQpCi0jZWxzZQotY2tfa3JiNV9p c190Z3RfdmFsaWQoKQotI2VuZGlmCi17Ci0jaWZkZWYgS1JCNQotI2lmbmRlZiBIRUlNREFMCi0g ICAgY2hhciB0Z3RbMjU2XTsKLSAgICBjaGFyICogczsKLSAgICBpbnQgcmMgPSAwOwotCi0gICAg cyA9IGNrX2tyYjVfZ2V0cmVhbG0oa3JiNV9kX2NjKTsKLSAgICBja21ha21zZyh0Z3Qsc2l6ZW9m KHRndCksImtyYnRndC8iLHMsIkAiLHMpOwotICAgIHJjID0gY2tfa3JiNV90a3RfaXN2YWxpZChr cmI1X2RfY2MsdGd0KTsKLSAgICBkZWJ1ZyhGMTExLCJja19rcmI1X2lzX3RndF92YWxpZCIsdGd0 LHJjKTsKLSAgICByZXR1cm4ocmM+MCk7Ci0jZWxzZSAvKiBIRUlNREFMICovCi0gICAgcmV0dXJu KC0xKTsKLSNlbmRpZiAvKiBIRUlNREFMICovCi0jZWxzZSAvKiBLUkI1ICovCi0gICAgcmV0dXJu KDApOwotI2VuZGlmIC8qIEtSQjUgKi8KLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrX2ty YjVfdGt0X3RpbWUoY2hhciAqIGNjX25hbWUsIGNoYXIgKiB0a3RuYW1lKQotI2Vsc2UKLWNrX2ty YjVfdGt0X3RpbWUoY2NfbmFtZSwgdGt0bmFtZSkgY2hhciAqIGNjX25hbWU7IGNoYXIgKiB0a3Ru YW1lOwotI2VuZGlmCi17Ci0jaWZkZWYgS1JCNQotI2lmbmRlZiBIRUlNREFMCi0gICAga3JiNV9j b250ZXh0IGtjb250ZXh0OwotICAgIGtyYjVfZXJyb3JfY29kZSByZXR2YWw7Ci0gICAga3JiNV9j Y2FjaGUgY2FjaGUgPSBOVUxMOwotICAgIGtyYjVfY2NfY3Vyc29yIGN1cjsKLSAgICBrcmI1X2Ny ZWRzIGNyZWRzOwotICAgIGtyYjVfcHJpbmNpcGFsIHByaW5jPU5VTEw7Ci0gICAga3JiNV9mbGFn cyBmbGFncz0wOwotICAgIGtyYjVfZXJyb3JfY29kZSBjb2RlPTA7Ci0KLSAgICBpZiAoICFja19r cmI1X2lzX2luc3RhbGxlZCgpICkKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotICAgIHJldHZhbCA9 IGtyYjVfaW5pdF9jb250ZXh0KCZrY29udGV4dCk7Ci0gICAgaWYgKHJldHZhbCkgewotICAgICAg ICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgaW5pdGlhbGl6aW5nIGtyYjUi LCIiLHJldHZhbCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgY29kZSA9IGs1 X2dldF9jY2FjaGUoa2NvbnRleHQsJmNhY2hlLGNjX25hbWUpOwotICAgIGlmIChjb2RlICE9IDAp IHsKLSAgICAgICAgZGVidWcoRjExMSwiY2tfa3JiNV90a3RfdGltZSB3aGlsZSBnZXR0aW5nIGNj YWNoZSIsCi0gICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlKGNvZGUpLGNvZGUpOwotICAgICAg ICByZXR2YWwgPSAtMTsKLSAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0gICAgfQotCi0g ICAgZmxhZ3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHVybnMgb2ZmIE9QRU5D TE9TRSBtb2RlICovCi0gICAgaWYgKChjb2RlID0ga3JiNV9jY19zZXRfZmxhZ3Moa2NvbnRleHQs IGNhY2hlLCBmbGFncykpKSB7Ci0gICAgICAgIGlmIChjb2RlID09IEVOT0VOVCkgewotICAgICAg ICAgICAgZGVidWcoRjExMSwiY2tfa3JiNV9saXN0X2NyZWRzICh0aWNrZXQgY2FjaGUpIiwKLSAg ICAgICAgICAgICAgICAgICBrcmI1X2NjX2dldF9uYW1lKGtjb250ZXh0LCBjYWNoZSksY29kZSk7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAgICAg ICAgICAiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHNldHRpbmcgY2FjaGUgZmxhZ3MgKHRpY2tl dCBjYWNoZSkiLAotICAgICAgICAgICAgICAgICAga3JiNV9jY19nZXRfbmFtZShrY29udGV4dCwg Y2FjaGUpLGNvZGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHZhbCA9IC0xOwotICAgICAgICBn b3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0gICAgaWYgKChjb2RlID0ga3JiNV9jY19nZXRf cHJpbmNpcGFsKGtjb250ZXh0LCBjYWNoZSwgJnByaW5jKSkpIHsKLSAgICAgICAgZGVidWcoRjEw MSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHJldHJpZXZpbmcgcHJpbmNpcGFsIG5hbWUiLAot ICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgIHJldHZhbCA9IC0xOwotICAgICAgICBn b3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0gICAgaWYgKChjb2RlID0ga3JiNV91bnBhcnNl X25hbWUoa2NvbnRleHQsIHByaW5jLCAmZGVmbmFtZSkpKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEs ImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSB1bnBhcnNpbmcgcHJpbmNpcGFsIG5hbWUiLAotICAg ICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgIHJldHZhbCA9IC0xOwotICAgICAgICBnb3Rv IGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0KLSAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX3N0YXJ0 X3NlcV9nZXQoa2NvbnRleHQsIGNhY2hlLCAmY3VyKSkpIHsKLSAgICAgICAgZGVidWcoRjEwMSwi Y2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHN0YXJ0aW5nIHRvIHJldHJpZXZlIHRpY2tldHMiLAot ICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgIHJldHZhbCA9IC0xOwotICAgICAgICBn b3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0KLSAgICBpZiAoKGNvZGUgPSBrcmI1X3RpbWVv ZmRheShrY29udGV4dCwgJm5vdykpKSB7Ci0gICAgICAgIGlmICghc3RhdHVzX29ubHkpCi0gICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgZ2V0dGluZyB0aW1l IG9mIGRheS4iLAotICAgICAgICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAgICBrcmI1X2Zy ZWVfY29udGV4dChrY29udGV4dCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAg d2hpbGUgKCEoY29kZSA9IGtyYjVfY2NfbmV4dF9jcmVkKGtjb250ZXh0LCBjYWNoZSwgJmN1ciwg JmNyZWRzKSkpIHsKLSAgICAgICAgY2hhciAqc25hbWU9TlVMTDsKLQotICAgICAgICByZXR2YWwg PSBrcmI1X3VucGFyc2VfbmFtZShrY29udGV4dCwgY3JlZHMuc2VydmVyLCAmc25hbWUpOwotICAg ICAgICBpZiAocmV0dmFsKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLAotICAgICAgICAgICAg ICAgICAgImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSB1bnBhcnNpbmcgc2VydmVyIG5hbWUiLCIi LHJldHZhbCk7Ci0gICAgICAgICAgICByZXR2YWwgPSAtMTsKLSAgICAgICAgICAgIGtyYjVfZnJl ZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LHNuYW1lKTsKLSAgICAgICAgICAgIGtyYjVfZnJlZV9j cmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3JlZHMpOwotICAgICAgICAgICAgZ290byBleGl0X2s1 X2dldF90a3Q7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoICFzdHJjbXAoc25hbWUsdGt0bmFt ZSkgKSB7Ci0gICAgICAgICAgICAvKiB3ZSBmb3VuZCB0aGUgdGlja2V0IHdlIGFyZSBsb29raW5n IGZvciAqLwotICAgICAgICAgICAgaW50IHZhbGlkID0gKGNyZWRzLnRpbWVzLnN0YXJ0dGltZSAm JgotICAgICAgICAgICAgICAgICAgICAgICBub3cgPiBjcmVkcy50aW1lcy5zdGFydHRpbWUgJiYK LSAgICAgICAgICAgICAgICAgICAgICAgbm93IDwgY3JlZHMudGltZXMuZW5kdGltZSAmJgotICAg ICAgICAgICAgICAgICAgICAgICAhKGNyZWRzLnRpY2tldF9mbGFncyAmIFRLVF9GTEdfSU5WQUxJ RCkpOwotICAgICAgICAgICAgaWYgKCB2YWxpZCApIHsKLSAgICAgICAgICAgICAgICByZXR2YWwg PSBjcmVkcy50aW1lcy5lbmR0aW1lIC0gbm93OwotICAgICAgICAgICAgfQotICAgICAgICAgICAg ZWxzZQotICAgICAgICAgICAgICAgIHJldHZhbCA9IDA7Ci0gICAgICAgICAgICBrcmI1X2ZyZWVf dW5wYXJzZWRfbmFtZShrY29udGV4dCxzbmFtZSk7Ci0gICAgICAgICAgICBrcmI1X2ZyZWVfY3Jl ZF9jb250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsKLSAgICAgICAgICAgIGNvZGUgPSBLUkI1X0ND X0VORDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGtyYjVfZnJlZV91 bnBhcnNlZF9uYW1lKGtjb250ZXh0LHNuYW1lKTsKLSAgICAgICAga3JiNV9mcmVlX2NyZWRfY29u dGVudHMoa2NvbnRleHQsICZjcmVkcyk7Ci0gICAgfQotCi0gICAgaWYgKGNvZGUgPT0gS1JCNV9D Q19FTkQpIHsKLSAgICAgICAgaWYgKChjb2RlID0ga3JiNV9jY19lbmRfc2VxX2dldChrY29udGV4 dCwgY2FjaGUsICZjdXIpKSkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0 X2NyZWRzIHdoaWxlIGZpbmlzaGluZyB0aWNrZXQgcmV0cmlldmFsIiwKLSAgICAgICAgICAgICAg ICAgICAiIixjb2RlKTsKLSAgICAgICAgICAgIHJldHZhbCA9IC0xOwotICAgICAgICAgICAgZ290 byBleGl0X2s1X2dldF90a3Q7Ci0gICAgICAgIH0KLSAgICAgICAgZmxhZ3MgPSBLUkI1X1RDX09Q RU5DTE9TRTsgICAgICAvKiB0dXJucyBvbiBPUEVOQ0xPU0UgbW9kZSAqLwotICAgICAgICBpZiAo KGNvZGUgPSBrcmI1X2NjX3NldF9mbGFncyhrY29udGV4dCwgY2FjaGUsIGZsYWdzKSkpIHsKLSAg ICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBjbG9zaW5nIGNj YWNoZSIsCi0gICAgICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgICAgICByZXR2YWwg PSAtMTsKLSAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OwotICAgICAgICB9Ci0gICAg fSBlbHNlIHsKLSAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHJl dHJpZXZpbmcgYSB0aWNrZXQiLCIiLGNvZGUpOwotICAgICAgICByZXR2YWwgPSAtMTsKLSAgICAg ICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0gICAgfQotCi0gIGV4aXRfazVfZ2V0X3RrdDoKLSAg ICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGtjb250ZXh0LHByaW5jKTsKLSAgICBrcmI1X2ZyZWVfdW5w YXJzZWRfbmFtZShrY29udGV4dCxkZWZuYW1lKTsKLSAgICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0 LGNhY2hlKTsKLSAgICBrcmI1X2ZyZWVfY29udGV4dChrY29udGV4dCk7Ci0gICAgcmV0dXJuKHJl dHZhbCk7Ci0jZWxzZSAvKiBIRUlNREFMICovCi0gICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBI RUlNREFMICovCi0jZWxzZSAvKiBLUkI1ICovCi0gICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBL UkI1ICovCi19Ci0KLWNoYXIgKgotI2lmZGVmIENLX0FOU0lDCi1ja19rcmI1X2dldF9jY19uYW1l KHZvaWQpCi0jZWxzZQotY2tfa3JiNV9nZXRfY2NfbmFtZSgpCi0jZW5kaWYKLXsKLSNpZmRlZiBL UkI1Ci0jaWZuZGVmIEhFSU1EQUwKLSAgICBzdGF0aWMgY2hhciBjY19uYW1lW0NLTUFYUEFUSCsx XT0iIjsKLSAgICBrcmI1X2NvbnRleHQga2NvbnRleHQgPSBOVUxMOwotICAgIGtyYjVfY2NhY2hl IGNjYWNoZSA9IE5VTEw7Ci0gICAga3JiNV9lcnJvcl9jb2RlIGNvZGU7Ci0gICAgY2hhciAqIHA9 TlVMTDsKLQotICAgIGNjX25hbWVbMF0gPSAnXDAnOwotCi0gICAgaWYgKCAhY2tfa3JiNV9pc19p bnN0YWxsZWQoKSApCi0gICAgICAgIHJldHVybihjY19uYW1lKTsKLQotICAgIHAgPSBnZXRlbnYo IktSQjVDQ05BTUUiKTsKLSAgICBpZiAoICFwICkgewotICAgICAgICBjb2RlID0ga3JiNV9pbml0 X2NvbnRleHQoJmtjb250ZXh0KTsKLSAgICAgICAgaWYgKGNvZGUpIHsKLSAgICAgICAgICAgIGNv bV9lcnIoImNrX2tyYjVfZ2V0X2NjX25hbWUiLGNvZGUsIndoaWxlIGluaXRfY29udGV4dCIpOwot ICAgICAgICAgICAgcmV0dXJuKGNjX25hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoY29k ZSA9IGtyYjVfY2NfZGVmYXVsdChrY29udGV4dCwgJmNjYWNoZSkpKSB7Ci0gICAgICAgICAgICBj b21fZXJyKCJja19rcmI1X2dldF9jY19uYW1lIixjb2RlLCJ3aGlsZSBnZXR0aW5nIGRlZmF1bHQg Y2NhY2hlIik7Ci0gICAgICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X2NjOwotICAgICAgICB9Ci0K LSAgICAgICAgY2ttYWttc2coY2NfbmFtZSxzaXplb2YoY2NfbmFtZSksCi0gICAgICAgICAgICAg ICAgIChjaGFyICopa3JiNV9jY19nZXRfdHlwZShrY29udGV4dCxjY2FjaGUpLCI6IiwKLSAgICAg ICAgICAgICAgICAgKGNoYXIgKilrcmI1X2NjX2dldF9uYW1lKGtjb250ZXh0LGNjYWNoZSksTlVM TCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2tzdHJuY3B5KGNjX25hbWUscCxDS01BWFBBVEgp OwotICAgIH0KLQotICAgIGlmICggIXN0cm5jbXAoIkZJTEU6IixjY19uYW1lLDUpICkgewotICAg ICAgICBmb3IgKCBwPWNjX25hbWU7ICpwIDsgcCsrICkKLSAgICAgICAgICAgIGlmICggKnAgPT0g J1xcJyApICpwID0gJy8nOwotICAgIH0KLQotICBleGl0X2s1X2dldF9jYzoKLSAgICBpZiAoIGNj YWNoZSApCi0gICAgICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRleHQsY2NhY2hlKTsKLSAgICBpZiAo IGtjb250ZXh0ICkKLSAgICAgICAga3JiNV9mcmVlX2NvbnRleHQoa2NvbnRleHQpOwotICAgIHJl dHVybihjY19uYW1lKTsKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICByZXR1cm4oIk5vdCBpbXBs ZW1lbnRlZCIpOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSNlbHNlIC8qIEtSQjUgKi8KLSAgICBy ZXR1cm4oIiIpOwotI2VuZGlmIC8qIEtSQjUgKi8KLX0KLQotY2hhciAqCi0jaWZkZWYgQ0tfQU5T SUMKLWNrX2tyYjVfZ2V0cmVhbG0oY2hhciAqIGNjX25hbWUpCi0jZWxzZQotY2tfa3JiNV9nZXRy ZWFsbShjY19uYW1lKSBjaGFyICogY2NfbmFtZTsKLSNlbmRpZgotewotI2lmZGVmIEtSQjUKLSNp Zm5kZWYgSEVJTURBTAotICAgIHN0YXRpYyBjaGFyIHJlYWxtWzI1Nl09IiI7Ci0gICAga3JiNV9j b250ZXh0IGtjb250ZXh0OwotICAgIGtyYjVfY2NhY2hlIGNjYWNoZSA9IE5VTEw7Ci0gICAga3Ji NV9lcnJvcl9jb2RlIGNvZGU7Ci0gICAga3JiNV9wcmluY2lwYWwgbWU9TlVMTDsKLQotICAgIHJl YWxtWzBdID0gJ1wwJzsKLQotICAgIGlmICggIWNrX2tyYjVfaXNfaW5zdGFsbGVkKCkgKQotICAg ICAgICByZXR1cm4ocmVhbG0pOwotCi0gICAgY29kZSA9IGtyYjVfaW5pdF9jb250ZXh0KCZrY29u dGV4dCk7Ci0gICAgaWYgKGNvZGUpIHsKLSAgICAgICAgcmV0dXJuKHJlYWxtKTsKLSAgICB9Ci0K LSAgICBjb2RlID0gazVfZ2V0X2NjYWNoZShrY29udGV4dCwmY2NhY2hlLGNjX25hbWUpOwotICAg IGlmIChjb2RlICE9IDApIHsKLSAgICAgICAgZ290byBleGl0X2s1X2dldHJlYWxtOwotICAgIH0K LQotCWNvZGUgPSBrcmI1X2NjX2dldF9wcmluY2lwYWwoa2NvbnRleHQsIGNjYWNoZSwgJm1lKTsK LQlpZiAoY29kZSkKLQkJY29kZSA9IGtyYjVfcGFyc2VfbmFtZShrY29udGV4dCwgImZvbyIsICZt ZSk7Ci0gICAgaWYgKGNvZGUpIHsKLSAgICAgICAgZ290byBleGl0X2s1X2dldHJlYWxtOwotICAg IH0KLSAgICBpZiAoIGtyYjVfcHJpbmNfcmVhbG0oa2NvbnRleHQsIG1lKS0+bGVuZ3RoIDwgc2l6 ZW9mKHJlYWxtKSApIHsKLSAgICAgICAgbWVtY3B5KHJlYWxtLGtyYjVfcHJpbmNfcmVhbG0oa2Nv bnRleHQsIG1lKS0+ZGF0YSwKLSAgICAgICAgICAgICAgICBrcmI1X3ByaW5jX3JlYWxtKGtjb250 ZXh0LCBtZSktPmxlbmd0aCk7ICAgICAgICAvKiBzYWZlICovCi0gICAgICAgcmVhbG1ba3JiNV9w cmluY19yZWFsbShrY29udGV4dCwgbWUpLT5sZW5ndGhdPSdcMCc7Ci0gICAgfQotICBleGl0X2s1 X2dldHJlYWxtOgotICAgIGlmICggbWUgKQotICAgICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGtj b250ZXh0LG1lKTsKLSAgICBpZiAoIGNjYWNoZSApCi0gICAgICAgIGtyYjVfY2NfY2xvc2Uoa2Nv bnRleHQsY2NhY2hlKTsKLSAgICBpZiAoa2NvbnRleHQpCi0gICAgICAgIGtyYjVfZnJlZV9jb250 ZXh0KGtjb250ZXh0KTsKLSAgICByZXR1cm4ocmVhbG0pOwotI2Vsc2UgLyogSEVJTURBTCAqLwot ICAgIHJldHVybigiTm90IGltcGxlbWVudGVkIik7Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotI2Vs c2UgLyogS1JCNSAqLwotICAgIHJldHVybigiIik7Ci0jZW5kaWYgLyogS1JCNSAqLwotfQotCi1j aGFyICoKLSNpZmRlZiBDS19BTlNJQwotY2tfa3JiNV9nZXRwcmluY2lwYWwoY2hhciAqIGNjX25h bWUpCi0jZWxzZQotY2tfa3JiNV9nZXRwcmluY2lwYWwoY2NfbmFtZSkgY2hhciAqIGNjX25hbWU7 Ci0jZW5kaWYKLXsKLSNpZmRlZiBLUkI1Ci0jaWZuZGVmIEhFSU1EQUwKLSAgICBzdGF0aWMgY2hh ciBwcmluY2lwYWxbVUlEQlVGTEVOKzFdPSIiOwotICAgIGtyYjVfY29udGV4dCBrY29udGV4dDsK LSAgICBrcmI1X2NjYWNoZSBjY2FjaGUgPSBOVUxMOwotICAgIGtyYjVfZXJyb3JfY29kZSBjb2Rl OwotICAgIGtyYjVfcHJpbmNpcGFsIG1lOwotICAgIGNoYXIgKiBwPU5VTEw7Ci0gICAgaW50IGk7 Ci0KLSAgICBwcmluY2lwYWxbMF0gPSAnXDAnOwotCi0gICAgaWYgKCAhY2tfa3JiNV9pc19pbnN0 YWxsZWQoKSApCi0gICAgICAgIHJldHVybihwcmluY2lwYWwpOwotCi0gICAgY29kZSA9IGtyYjVf aW5pdF9jb250ZXh0KCZrY29udGV4dCk7Ci0gICAgaWYgKGNvZGUpIHsKLSAgICAgICAgcmV0dXJu KHByaW5jaXBhbCk7Ci0gICAgfQotCi0gICAgY29kZSA9IGs1X2dldF9jY2FjaGUoa2NvbnRleHQs JmNjYWNoZSxjY19uYW1lKTsKLSAgICBpZiAoY29kZSAhPSAwKSB7Ci0gICAgICAgIGdvdG8gZXhp dF9rNV9nZXRwcmluY2lwYWw7Ci0gICAgfQotCi0gICAgaWYgKChjb2RlID0ga3JiNV9jY19nZXRf cHJpbmNpcGFsKGtjb250ZXh0LCBjY2FjaGUsICZtZSkpKSB7Ci0gICAgICAgIGdvdG8gZXhpdF9r NV9nZXRwcmluY2lwYWw7Ci0gICAgfQotCi0gICAgaWYgKChjb2RlID0ga3JiNV91bnBhcnNlX25h bWUgKGtjb250ZXh0LCBtZSwgJnApKSkgewotICAgICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGtj b250ZXh0LG1lKTsKLSAgICAgICAgZ290byBleGl0X2s1X2dldHByaW5jaXBhbDsKLSAgICB9Ci0K LSAgICBja3N0cm5jcHkocHJpbmNpcGFsLHAsVUlEQlVGTEVOKTsKLSAgICBpID0gY2tpbmRleCgi QCIscHJpbmNpcGFsLDAsMCwwKTsKLSAgICBpZiAoaSkKLSAgICAgIHByaW5jaXBhbFtpLTFdID0g J1wwJzsKLQotICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LHApOwotCi0gIGV4 aXRfazVfZ2V0cHJpbmNpcGFsOgotICAgIGlmICggY2NhY2hlICkKLSAgICAgICAga3JiNV9jY19j bG9zZShrY29udGV4dCxjY2FjaGUpOwotICAgIGlmIChrY29udGV4dCkKLSAgICAgICAga3JiNV9m cmVlX2NvbnRleHQoa2NvbnRleHQpOwotICAgIHJldHVybihwcmluY2lwYWwpOwotI2Vsc2UgLyog SEVJTURBTCAqLwotICAgIHJldHVybigiTm90IGltcGxlbWVudGVkIik7Ci0jZW5kaWYgLyogSEVJ TURBTCAqLwotI2Vsc2UgLyogS1JCNSAqLwotICAgIHJldHVybigiIik7Ci0jZW5kaWYgLyogS1JC NSAqLwotfQotCi0jaWZuZGVmIENSWVBUX0RMTAotaW50Ci1ja19nZXRfY3J5cHRfdGFibGUoc3Ry dWN0IGtleXRhYiAqKiBwVGFibGUsIGludCAqIHBOKQotewotI2lmZGVmIENLX0VOQ1JZUFRJT04K LSAgICByZXR1cm4oZ2V0X2NyeXB0X3RhYmxlKHBUYWJsZSwgcE4pKTsKLSNlbHNlIC8qIEVOQ1JZ UFRJT04gKi8KLSAgICBpbnQgaT0wOwotI2lmbmRlZiBPUzIKLSAgICBjaGFyICogdG1wc3RyaW5n ID0gTlVMTDsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGlmICggKnBUYWJsZSApCi0gICAgewot ICAgICAgICBmb3IgKCBpPTAgOyBpIDwgKnBOIDsgaSsrICkKLSAgICAgICAgICAgIGZyZWUoICgq cFRhYmxlKVtpXS5rd2QgKSA7Ci0gICAgICAgIGZyZWUgKCAqcFRhYmxlICkgIDsKLSAgICB9Ci0g ICAgKnBUYWJsZSA9IE5VTEw7Ci0gICAgKnBOID0gMDsKLQotICAgICpwVGFibGUgPSBtYWxsb2Mo IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSAqIDIgKSA7Ci0gICAgaWYgKCAhKCpwVGFibGUpICkKLSAg ICAgICAgcmV0dXJuKDApOwotCi0jaWZkZWYgT1MyCi0gICAgKCpwVGFibGUpWzBdLmt3ZCA9c3Ry ZHVwKCJhdXRvbWF0aWMiKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgIG1ha2VzdHIoJnRtcHN0cmlu ZywiYXV0b21hdGljIik7Ci0gICAgKCpwVGFibGUpWzBdLmt3ZCA9IHRtcHN0cmluZzsKLSAgICB0 bXBzdHJpbmcgPSBOVUxMOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICgqcFRhYmxlKVswXS5rd3Zh bCA9IEVOQ1RZUEVfQU5ZOwotICAgICgqcFRhYmxlKVswXS5mbGdzID0gMDsKLSNpZmRlZiBPUzIK LSAgICAoKnBUYWJsZSlbMV0ua3dkID1zdHJkdXAoIm5vbmUiKTsKLSNlbHNlIC8qIE9TMiAqLwot ICAgIG1ha2VzdHIoJnRtcHN0cmluZywibm9uZSIpOwotICAgICgqcFRhYmxlKVsxXS5rd2QgPSB0 bXBzdHJpbmc7Ci0gICAgdG1wc3RyaW5nID0gTlVMTDsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAo KnBUYWJsZSlbMV0ua3d2YWwgPSA5OTk7Ci0gICAgKCpwVGFibGUpWzFdLmZsZ3MgPSAwOwotICAg ICgqcE4pID0gMjsKLQotICAgIHJldHVybigyKTsKLSNlbmRpZiAvKiBFTkNSWVBUSU9OICovCi19 Ci0KLVZPSUQKLWNrX2VuY3J5cHRfc2VuZF9zdXBwb3J0KCkKLXsKLSNpZmRlZiBDS19FTkNSWVBU SU9OCi0gICAgZW5jcnlwdF9zZW5kX3N1cHBvcnQoKTsKLSNlbmRpZiAvKiBFTkNSWVBUSU9OICov Ci19Ci0jZW5kaWYgLyogQ1JZUFRfRExMICovCi0KLS8qCi0gKgotICogS3N0cmVhbQotICoKLSAq IEVtdWxhdGVzIHRoZSBrc3RyZWFtIHBhY2thZ2UgaW4gS2VyYmVyb3MgNAotICoKLSAqLwotCi1p bnQKLWtzdHJlYW1fZGVzdHJveSgpCi17Ci0gICAgaWYgKGdfa3N0cmVhbSAhPSBOVUxMKSB7Ci0g ICAgICAgIGF1dGhfZGVzdHJveSgpOyAgICAgICAgICAgICAgICAgICAgICAgLyogRGVzdHJveSBh dXRob3JpemluZyAqLwotICAgICAgICBmcmVlKGdfa3N0cmVhbSk7Ci0gICAgICAgIGdfa3N0cmVh bT1OVUxMOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotVk9JRAotI2lmZGVmIENLX0FOU0lD Ci1rc3RyZWFtX3NldF9idWZmZXJfbW9kZShpbnQgbW9kZSkKLSNlbHNlCi1rc3RyZWFtX3NldF9i dWZmZXJfbW9kZShtb2RlKSBpbnQgbW9kZTsKLSNlbmRpZgotewotfQotCi0KLWludAotI2lmZGVm IENLX0FOU0lDCi1rc3RyZWFtX2NyZWF0ZV9mcm9tX2ZkKGludCBmZCwKLSAgICAgICAgICAgICAg ICAgICAgICAga3N0cmVhbV9wdHIgZGF0YSkKLSNlbHNlCi1rc3RyZWFtX2NyZWF0ZV9mcm9tX2Zk KGZkLGRhdGEpCi0gICAgaW50IGZkOyBrc3RyZWFtX3B0ciBkYXRhOwotI2VuZGlmCi17Ci0gICAg aW50IG47Ci0KLSAgICBnX2tzdHJlYW0gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBrc3RyZWFtX2lu dCkpOwotICAgIGlmIChnX2tzdHJlYW0gPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg ICBnX2tzdHJlYW0tPmZkID0gZmQ7Ci0KLSAgICBuID0gYXV0aF9pbml0KGdfa3N0cmVhbSk7ICAg ICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgYXV0aG9yaXppbmcgKi8KLSAgICBpZiAobikg ewotICAgICAgICBmcmVlKGdfa3N0cmVhbSk7Ci0gICAgICAgIGdfa3N0cmVhbSA9IE5VTEw7Ci0g ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGdfa3N0cmVhbS0+ZW5jcnlwdCA9IE5VTEw7 Ci0gICAgZ19rc3RyZWFtLT5kZWNyeXB0ID0gTlVMTDsKLSAgICBnX2tzdHJlYW0tPmVuY3J5cHRf dHlwZSA9IEVOQ1RZUEVfQU5ZOwotICAgIGdfa3N0cmVhbS0+ZGVjcnlwdF90eXBlID0gRU5DVFlQ RV9BTlk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIFJM T0dDT0RFCi1zdGF0aWMgaW50IGRvX2xlbmNoZWNrLCB1c2VfaXZlY3M7Ci1leHRlcm4gaW50IHJs b2dfaW5iYW5kOwotCi0jaWZkZWYgS1JCNQotdm9pZAotcmNtZF9zdHJlYW1faW5pdF9rcmI1KGlu X2tleWJsb2NrLCBlbmNyeXB0X2ZsYWcsIGxlbmNoZWNrLCBhbV9jbGllbnQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICBwcm90b251bSkKLSAgICAga3JiNV9rZXlibG9jayAqaW5fa2V5Ymxv Y2s7Ci0gICAgIGludCBlbmNyeXB0X2ZsYWc7Ci0gICAgIGludCBsZW5jaGVjazsKLSAgICAgaW50 IGFtX2NsaWVudDsKLSAgICAgZW51bSBrcmI1X2tjbWRfcHJvdG8gcHJvdG9udW07Ci17Ci0gICAg a3JiNV9lcnJvcl9jb2RlIHN0YXR1czsKLSAgICBzaXplX3QgYmxvY2tzaXplOwotCi0gICAgaWYg KCFlbmNyeXB0X2ZsYWcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlc2luYnVmLmRhdGEgPSBk ZXNfaW5idWY7Ci0gICAgZGVzb3V0YnVmLmRhdGEgPSBkZXNfb3V0cGt0KzQ7ICAgICAgLyogU2V0 IHVwIGRlcyBidWZmZXJzICovCi0gICAgazVfc2Vzc2lvbl9rZXkgPSBpbl9rZXlibG9jazsKLQot ICAgIGRvX2xlbmNoZWNrID0gbGVuY2hlY2s7Ci0KLSAgICBpZiAoIHByb3RvbnVtID09IEtDTURf T0xEX1BST1RPQ09MICkgewotICAgICAgICB1c2VfaXZlY3MgPSAwOwotICAgICAgICByZXR1cm47 Ci0gICAgfQotCi0gICAgdXNlX2l2ZWNzID0gMTsKLQotICAgIGlmIChzdGF0dXMgPSBrcmI1X2Nf YmxvY2tfc2l6ZShrNV9jb250ZXh0LCBrNV9zZXNzaW9uX2tleS0+ZW5jdHlwZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJsb2Nrc2l6ZSkpIHsKLSAgICAgICAgLyogWFhY IHdoYXQgZG8gSSBkbz8gKi8KLSAgICAgICAgcHJpbnRmKCJmYXRhbCBrZXJiZXJvcyA1IGNyeXB0 byBsaWJyYXJ5IGVycm9yXG4iKTsKLSAgICAgICAgdHRjbG9zKDApOwotICAgICAgICByZXR1cm47 Ci0gICAgfQotCi0gICAgZW5jaXZlY19pWzBdLmxlbmd0aCA9IGVuY2l2ZWNfaVsxXS5sZW5ndGgg PSAKLSAgICBlbmNpdmVjX29bMF0ubGVuZ3RoID0gZW5jaXZlY19vWzFdLmxlbmd0aCA9IGJsb2Nr c2l6ZTsKLQotICAgIGlmICgoZW5jaXZlY19pWzBdLmRhdGEgPSBtYWxsb2MoZW5jaXZlY19pWzBd Lmxlbmd0aCAqIDQpKSA9PSBOVUxMKSB7Ci0gICAgICAgIC8qIFhYWCB3aGF0IGRvIEkgZG8/ICov Ci0gICAgICAgIHByaW50ZigiZmF0YWwgbWFsbG9jIGZhaWxlZFxuIik7Ci0gICAgICAgIHR0Y2xv cygwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGVuY2l2ZWNfaVsxXS5kYXRhID0g ZW5jaXZlY19pWzBdLmRhdGEgKyBlbmNpdmVjX2lbMF0ubGVuZ3RoOwotICAgIGVuY2l2ZWNfb1sw XS5kYXRhID0gZW5jaXZlY19pWzFdLmRhdGEgKyBlbmNpdmVjX2lbMV0ubGVuZ3RoOwotICAgIGVu Y2l2ZWNfb1sxXS5kYXRhID0gZW5jaXZlY19vWzBdLmRhdGEgKyBlbmNpdmVjX29bMF0ubGVuZ3Ro OwotCi0gICAgLyogaXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvIGluaXRpYWxpemUgdGhpcz8gKi8K LSAgICBtZW1zZXQoZW5jaXZlY19pWzBdLmRhdGEsIGFtX2NsaWVudCwgYmxvY2tzaXplKTsKLSAg ICBtZW1zZXQoZW5jaXZlY19vWzBdLmRhdGEsIDEgLSBhbV9jbGllbnQsIGJsb2Nrc2l6ZSk7Ci0g ICAgbWVtc2V0KGVuY2l2ZWNfaVsxXS5kYXRhLCAyIHwgYW1fY2xpZW50LCBibG9ja3NpemUpOwot ICAgIG1lbXNldChlbmNpdmVjX29bMV0uZGF0YSwgMiB8ICgxIC0gYW1fY2xpZW50KSwgYmxvY2tz aXplKTsKLX0KLSNlbmRpZiAvKiBLUkI1ICovCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi1ja19r cmJfcmxvZ2luKENIQVIgKiBob3N0bmFtZSwgaW50IHBvcnQsCi0gICAgICAgICAgICAgICBDSEFS ICogbG9jYWx1c2VyLCBDSEFSICogcmVtb3RldXNlciwgQ0hBUiAqIHRlcm1fc3BlZWQsCi0gICAg ICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiBsX2FkZHIsIHN0cnVjdCBzb2NrYWRkcl9p biAqIHJfYWRkciwKLSAgICAgICAgICAgICAgIGludCBrdmVyc2lvbiwgaW50IGVuY3J5cHRfZmxh ZykKLSNlbHNlIC8qIENLX0FOU0lDICovCi1ja19rcmJfcmxvZ2luKGhvc3RuYW1lLCBwb3J0LAot ICAgICAgICAgICAgICAgbG9jYWx1c2VyLCByZW1vdGV1c2VyLCB0ZXJtX3NwZWVkLCBsX2FkZHIs IHJfYWRkciwgZW5jcnlwdF9mbGFnKQotICAgIENIQVIgKiBob3N0bmFtZTsgaW50IHBvcnQ7Ci0g ICAgQ0hBUiAqIGxvY2FsdXNlcjsgQ0hBUiAqIHJlbW90ZXVzZXI7IENIQVIgKiB0ZXJtX3NwZWVk OwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqIGxfYWRkcjsgc3RydWN0IHNvY2thZGRyX2luICog cl9hZGRyOwotICAgIGludCBrdmVyc2lvbjsgaW50IGVuY3J5cHRfZmxhZzsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotewotICAgIHVuc2lnbmVkIGxvbmcgc3RhdHVzOwotICAgIGNoYXIgKiByZWFs bT1OVUxMOwotICAgIGV4dGVybiBpbnQgdHR5ZmQ7Ci0gICAgaW50IGM7Ci0gICAgbG9uZyBtc2ds ZW47Ci0KLSAgICBkZWJ1ZyhGMTExLCJja19rcmJfcmxvZ2luIixob3N0bmFtZSxwb3J0KTsKLQot ICAgIGlmICgga3ZlcnNpb24gPT0gNCAmJiAhY2tfa3JiNF9pc19pbnN0YWxsZWQoKSApIHsKLSAg ICAgICAgcHJpbnRmKCI/S2VyYmVyb3MgNCBpcyBub3QgaW5zdGFsbGVkXHJcbiIpOwotICAgICAg ICByZXR1cm4oLTEpOwotICAgIH0gZWxzZSBpZiAoIGt2ZXJzaW9uID09IDUgJiYgIWNrX2tyYjVf aXNfaW5zdGFsbGVkKCkgKSB7Ci0gICAgICAgIHByaW50ZigiP0tlcmJlcm9zIDUgaXMgbm90IGlu c3RhbGxlZFxyXG4iKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBpZiAoIGVu Y3J5cHRfZmxhZyAmJiAhY2tfY3J5cHRfaXNfaW5zdGFsbGVkKCkgKSB7Ci0gICAgICAgIHByaW50 ZigiP0VuY3J5cHRpb24gaXMgbm90IGluc3RhbGxlZFxyXG4iKTsKLSAgICAgICAgcmV0dXJuKC0x KTsKLSAgICB9Ci0KLSAgICBpZiAoIGt2ZXJzaW9uID09IDUgKSB7Ci0jaWZkZWYgS1JCNQotICAg ICAgICBrcmI1X2ZsYWdzIGF1dGhvcHRzPTA7Ci0gICAgICAgIGtyYjVfY2NhY2hlIGNjYWNoZT1O VUxMOwotICAgICAgICBjaGFyICpja3N1bWJ1Zj1OVUxMOwotICAgICAgICBjaGFyICpzZXJ2aWNl PU5VTEw7Ci0gICAgICAgIGNoYXIgKiBrY21kX3ZlcnNpb249TlVMTDsKLSAgICAgICAgZW51bSBr cmI1X2tjbWRfcHJvdG8gdXNlX3Byb3RvOwotICAgICAgICBrcmI1X2RhdGEgY2tzdW1kYXQ7Ci0g ICAgICAgIGtyYjVfY3JlZHMgKmdldF9jcmVkID0gMDsKLSAgICAgICAga3JiNV9lcnJvcl9jb2Rl IHN0YXR1czsKLSAgICAgICAga3JiNV9lcnJvciAgICAgICplcnJvciA9IDA7Ci0gICAgICAgIGty YjVfYXBfcmVwX2VuY19wYXJ0ICpyZXBfcmV0ID0gTlVMTDsKLSAgICAgICAga3JiNV9kYXRhIG91 dGJ1ZjsKLSAgICAgICAgaW50IHJjOwotICAgICAgICBrcmI1X2ludDMyIHNlcW5vPTA7Ci0gICAg ICAgIGtyYjVfaW50MzIgc2VydmVyX3NlcW5vPTA7Ci0gICAgICAgIGNoYXIgKiogcmVhbG1saXN0 PU5VTEw7Ci0gICAgICAgIGludCBidWZsZW47Ci0gICAgICAgIGNoYXIgdGd0WzI1Nl07Ci0KLSAg ICAgICAgZGVidWcoRjEwMCwiY2tfa3JiX3Jsb2dpbiB2ZXJzaW9uIDUiLCIiLDApOwotCi0gICAg ICAgIHJlYWxtID0gY2tfa3JiNV9yZWFsbW9maG9zdCgoY2hhciAqKWhvc3RuYW1lKTsKLSAgICAg ICAgaWYgKCFyZWFsbSkgewotICAgICAgICAgICAgY2tzdHJuY3B5KHN0clRtcCwgIkNhbid0IGZp bmQgcmVhbG0gZm9yIGhvc3QgXCIiLEFVVEhUTVBCTCk7Ci0gICAgICAgICAgICBja3N0cm5jYXQo c3RyVG1wLCAoY2hhciAqKWhvc3RuYW1lLEFVVEhUTVBCTCk7Ci0gICAgICAgICAgICBja3N0cm5j YXQoc3RyVG1wLCAiXCIiLEFVVEhUTVBCTCk7Ci0gICAgICAgICAgICBwcmludGYoIj9LZXJiZXJv cyA1IGVycm9yOiAlc1xyXG4iLHN0clRtcCk7Ci0gICAgICAgICAgICBrcmI1X2Vycm5vID0gS1JC NV9FUlJfSE9TVF9SRUFMTV9VTktOT1dOOwotICAgICAgICAgICAgbWFrZXN0cigma3JiNV9lcnJt c2csc3RyVG1wKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotCi0gICAgICAg IGNrbWFrbXNnKHRndCxzaXplb2YodGd0KSwia3JidGd0LyIscmVhbG0sIkAiLHJlYWxtKTsKLSAg ICAgICAgZGVidWcoRjExMCwiY2tfcmxvZ19ybG9naW4gVEdUIix0Z3QsMCk7Ci0gICAgICAgIGlm ICgga3JiNV9hdXRvZ2V0ICYmCi0gICAgICAgICAgICAgISgoY2tfa3JiNV90a3RfaXN2YWxpZChO VUxMLHRndCkgPiAwKSB8fAotICAgICAgICAgICAgICAgIChja19rcmI1X2lzX3RndF92YWxpZCgp ID4gMCkpICkKLSAgICAgICAgICAgIGNrX2tyYjVfYXV0b2dldF9UR1QocmVhbG0pOwotCi0gICAg ICAgIGJ1ZmxlbiA9IHN0cmxlbigoY2hhciAqKXRlcm1fc3BlZWQpICsgc3RybGVuKChjaGFyICop cmVtb3RldXNlcikgKyA2NDsKLSAgICAgICAgaWYgKChja3N1bWJ1ZiA9IG1hbGxvYyhidWZsZW4p KSA9PSAwKSB7Ci0gICAgICAgICAgICBwcmludGYoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkg Zm9yIGNoZWNrc3VtIGJ1ZmZlci5cclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAg ICAgICB9Ci0gICAgICAgIGNrbWFrbXNnKGNrc3VtYnVmLGJ1Zmxlbixja3VpdG9hKCh1bnNpZ25l ZCBzaG9ydCkgbnRvaHMocG9ydCkpLCI6IiwKLQkJIChjaGFyICopdGVybV9zcGVlZCwoY2hhciAq KXJlbW90ZXVzZXIpOwotICAgICAgICBja3N1bWRhdC5kYXRhID0gY2tzdW1idWY7Ci0gICAgICAg IGNrc3VtZGF0Lmxlbmd0aCA9IHN0cmxlbihja3N1bWJ1Zik7Ci0KLSAgICAgICAgc3RhdHVzID0g a3JiNV9pbml0X2NvbnRleHQoJms1X2NvbnRleHQpOwotICAgICAgICBpZiAoc3RhdHVzKSB7Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19rcmJfcmxvZ2luKCkiLCJ1bmFibGUgdG8gaW5pdF9j b250ZXh0IiwwKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLQotICAgICAg ICBkZXNpbmJ1Zi5kYXRhID0gZGVzX2luYnVmOwotICAgICAgICBkZXNvdXRidWYuZGF0YSA9IGRl c19vdXRwa3QrNDsgIC8qIFNldCB1cCBkZXMgYnVmZmVycyAqLwotCi0gICAgICAgIHJjID0gazVf Z2V0X2NjYWNoZShrNV9jb250ZXh0LCZjY2FjaGUsTlVMTCk7Ci0gICAgICAgIGlmIChyYyAhPSAw KSB7Ci0gICAgICAgICAgICBjb21fZXJyKE5VTEwsIHJjLCAid2hpbGUgZ2V0dGluZyBjY2FjaGUu Iik7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzZXJ2aWNl ID0ga3JiNV9kX3NydiA/IGtyYjVfZF9zcnYgOiBLUkI1X1NFUlZJQ0VfTkFNRTsKLQotICAgICAg ICBpZiAoIShnZXRfY3JlZCA9IChrcmI1X2NyZWRzICopY2FsbG9jKDEsIHNpemVvZihrcmI1X2Ny ZWRzKSkpKSB7Ci0gICAgICAgICAgICBwcmludGYoImNrX2tyYl9ybG9naW46IG5vIG1lbW9yeVxy XG4iKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0 KGdldF9jcmVkLDAsc2l6ZW9mKGtyYjVfY3JlZHMpKTsKLSAgICAgICAgc3RhdHVzID0ga3JiNV9z bmFtZV90b19wcmluY2lwYWwoazVfY29udGV4dCwgKGNoYXIgKikgaG9zdG5hbWUsCi0JCQkJCSBz ZXJ2aWNlLCBLUkI1X05UX1NSVl9IU1QsCi0JCQkJCSAmZ2V0X2NyZWQtPnNlcnZlcik7Ci0gICAg ICAgIGlmIChzdGF0dXMpIHsKLSAgICAgICAgICAgIHByaW50ZigiY2tfa3JiX3Jsb2dpbjoga3Ji NV9zbmFtZV90b19wcmluY2lwYWwgZmFpbGVkOiAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAg ICAgZXJyb3JfbWVzc2FnZShzdGF0dXMpKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAg ICAgIH0KLQotICAgICAgICB0dG9jKDApOwotCi0gICAgICAgIGlmIChzdGF0dXMgPSBrcmI1X2Nj X2dldF9wcmluY2lwYWwoazVfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmdldF9jcmVkLT5jbGllbnQpCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAg ICh2b2lkKSBrcmI1X2NjX2Nsb3NlKGs1X2NvbnRleHQsIGNjYWNoZSk7Ci0gICAgICAgICAgICBr cmI1X2ZyZWVfY3JlZHMoazVfY29udGV4dCwgZ2V0X2NyZWQpOwotICAgICAgICAgICAgZ290byBi YWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa3JiNV9ybG9nX3ZlciA9PSBLQ01EX09MRF9Q Uk9UT0NPTCkKLSAgICAgICAgICAgIGdldF9jcmVkLT5rZXlibG9jay5lbmN0eXBlPUVOQ1RZUEVf REVTX0NCQ19DUkM7Ci0KLSAgICAgICAgLyogR2V0IHRpY2tldCBmcm9tIGNyZWRlbnRpYWxzIGNh Y2hlIG9yIGtkYyAqLwotICAgICAgICBzdGF0dXMgPSBrcmI1X2dldF9jcmVkZW50aWFscyhrNV9j b250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY2FjaGUsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdldF9jcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmcmV0X2NyZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAga3JiNV9mcmVlX2NyZWRzKGs1X2NvbnRleHQsIGdldF9jcmVkKTsK LSAgICAgICAgZ2V0X2NyZWQgPSBOVUxMOwotICAgICAgICAodm9pZCkga3JiNV9jY19jbG9zZShr NV9jb250ZXh0LCBjY2FjaGUpOwotCi0gICAgICAgIGlmIChzdGF0dXMpIAotICAgICAgICAgICAg Z290byBiYWQ7Ci0KLSAgICAgICAgLyogUmVzZXQgaW50ZXJuYWwgZmxhZ3M7IHRoZXNlIHNob3Vs ZCBub3QgYmUgc2V0LiAqLwotICAgICAgICBhdXRob3B0cyAmPSAofk9QVFNfRk9SV0FSRF9DUkVE Uyk7Ci0gICAgICAgIGF1dGhvcHRzICY9ICh+T1BUU19GT1JXQVJEQUJMRV9DUkVEUyk7Ci0KLSAg ICAgICAgaWYgKGtyYjVfYXV0aF9jb25faW5pdChrNV9jb250ZXh0LCAmYXV0aF9jb250ZXh0KSkK LSAgICAgICAgICAgIGdvdG8gYmFkOwotCi0gICAgICAgIGlmIChrcmI1X2F1dGhfY29uX3NldGZs YWdzKGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEtSQjVfQVVUSF9DT05URVhUX1JFVF9USU1FKSkKLSAgICAgICAgICAgIGdvdG8g YmFkOwotCi0gICAgICAgIC8qIE9ubHkgbmVlZCBsb2NhbCBhZGRyZXNzIGZvciBta19jcmVkKCkg dG8gc2VuZCB0byBrcmxvZ2luZCAqLwotICAgICAgICBpZiAoIWtyYjVfZF9ub19hZGRyZXNzZXMp Ci0gICAgICAgICAgICBpZiAoc3RhdHVzID0ga3JiNV9hdXRoX2Nvbl9nZW5hZGRycyhrNV9jb250 ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0 aF9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHR0eWZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLUkI1X0FVVEhfQ09O VEVYVF9HRU5FUkFURV9MT0NBTF9GVUxMX0FERFIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApKQotICAgICAgICAgICAgICAgIGdvdG8gYmFkOwotCi0g ICAgICAgIC8qIEhlcmUgaXMgd2hlcmUgd2Ugc3RhcnQgdG8gaGFuZGxlIHRoZSBuZXcgcHJvdG9j b2wgaW4gZWFybmVzdCAqLwotICAgICAgICBpZiAoIGtyYjVfcmxvZ192ZXIgPT0gS0NNRF9QUk9U T0NPTF9DT01QQVRfSEFDSyApIHsKLSAgICAgICAgICAgIGtyYjVfYm9vbGVhbiBpc19kZXM7Ci0K LSAgICAgICAgICAgIGlmIChzdGF0dXMgPSBrcmI1X2NfZW5jdHlwZV9jb21wYXJlKCBrNV9jb250 ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVO Q1RZUEVfREVTX0NCQ19DUkMsCi0jaWZkZWYgSEVJTURBTAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldF9jcmVkLT5zZXNzaW9uLmtleXR5cGUsCi0j ZWxzZSAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0X2NyZWQtPmtleWJsb2NrLmVuY3R5cGUsCi0jZW5kaWYgLyogSEVJTURB TCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZp c19kZXMpKSB7Ci0gICAgICAgICAgICAgICAga3JiNV9mcmVlX2NyZWRzKGs1X2NvbnRleHQsIHJl dF9jcmVkKTsKLSAgICAgICAgICAgICAgICByZXRfY3JlZCA9IE5VTEw7Ci0gICAgICAgICAgICAg ICAgZ290byBiYWQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICggaXNfZGVzICkg ewotICAgICAgICAgICAgICAgIGtjbWRfdmVyc2lvbiA9ICJLQ01EVjAuMSI7Ci0gICAgICAgICAg ICAgICAgdXNlX3Byb3RvID0gS0NNRF9PTERfUFJPVE9DT0w7Ci0gICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgIGF1dGhvcHRzID0gQVBfT1BUU19VU0VfU1VCS0VZOwotICAgICAg ICAgICAgICAgIGtjbWRfdmVyc2lvbiA9ICJLQ01EVjAuMiI7Ci0gICAgICAgICAgICAgICAgdXNl X3Byb3RvID0gS0NNRF9ORVdfUFJPVE9DT0w7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICB1c2VfcHJvdG8gPSBrcmI1X3Jsb2dfdmVyOwotICAgICAgICAgICAg c3dpdGNoICgga3JiNV9ybG9nX3ZlciApIHsKLSAgICAgICAgICAgIGNhc2UgS0NNRF9ORVdfUFJP VE9DT0w6Ci0gICAgICAgICAgICAgICAgYXV0aG9wdHMgPSBBUF9PUFRTX1VTRV9TVUJLRVk7Ci0g ICAgICAgICAgICAgICAga2NtZF92ZXJzaW9uID0gIktDTURWMC4yIjsKLSAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgS0NNRF9PTERfUFJPVE9DT0w6Ci0gICAgICAgICAg ICAgICAga2NtZF92ZXJzaW9uID0gIktDTURWMC4xIjsKLSAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgZ290byBiYWQ7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBjYWxsIEtlcmJlcm9zIGxpYnJhcnkgcm91 dGluZSB0byBvYnRhaW4gYW4gYXV0aGVudGljYXRvciwKLSAgICAgICAgICAgcGFzcyBpdCBvdmVy IHRoZSBzb2NrZXQgdG8gdGhlIHNlcnZlciwgYW5kIG9idGFpbiBtdXR1YWwKLSAgICAgICAgICAg YXV0aGVudGljYXRpb24uCi0gICAgICAgICAqLwotICAgICAgICBzdGF0dXMgPSBrcmI1X3NlbmRh dXRoKGs1X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF1dGhfY29u dGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa3JiNV9wb2ludGVyKSAmdHR5 ZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2NtZF92ZXJzaW9uLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldF9jcmVkLT5jbGllbnQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0X2NyZWQtPnNlcnZlciwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXV0aG9wdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNr c3VtZGF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldF9jcmVkLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXBfcmV0LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICBrcmI1X2ZyZWVfZGF0YV9jb250ZW50cyhrNV9jb250ZXh0LCZj a3N1bWRhdCk7Ci0KLSAgICAgICAgaWYgKHN0YXR1cykgewotICAgICAgICAgICAgaWYgKCAhcXVp ZXQgKQotICAgICAgICAgICAgICAgIHByaW50ZigiQ291bGRuJ3QgYXV0aGVudGljYXRlIHRvIHNl cnZlcjogJXNcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2Uoc3Rh dHVzKSk7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBpZiAoICFx dWlldCApIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTZXJ2ZXIgcmV0dXJuZWQgZXJy b3IgY29kZSAlZCAoJXMpXHJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvci0+ZXJy b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlKEVSUk9SX1RBQkxFX0JB U0Vfa3JiNSArIGVycm9yLT5lcnJvcikpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3It PnRleHQubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yIHRl eHQgc2VudCBmcm9tIHNlcnZlcjogJXNcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZXJyb3ItPnRleHQuZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAga3JiNV9mcmVlX2Vycm9yKGs1X2NvbnRleHQsIGVy cm9yKTsKLSAgICAgICAgICAgICAgICBlcnJvciA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBnb3RvIGJhZDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXBfcmV0KSB7Ci0gICAg ICAgICAgICBzZXJ2ZXJfc2Vxbm8gPSByZXBfcmV0LT5zZXFfbnVtYmVyOwotICAgICAgICAgICAg a3JiNV9mcmVlX2FwX3JlcF9lbmNfcGFydChrNV9jb250ZXh0LCByZXBfcmV0KTsKLSAgICAgICAg fQotCi0gICAgICAgICh2b2lkKSB0dG9sKHJlbW90ZXVzZXIsIHN0cmxlbigoY2hhciAqKXJlbW90 ZXVzZXIpKzEpOwotICAgICAgICAodm9pZCkgdHRvbCh0ZXJtX3NwZWVkLCBzdHJsZW4oKGNoYXIg Kil0ZXJtX3NwZWVkKSsxKTsKLSAgICAgICAgKHZvaWQpIHR0b2wobG9jYWx1c2VyLCBzdHJsZW4o KGNoYXIgKilsb2NhbHVzZXIpKzEpOwotCi0gICAgICAgIGlmIChmb3J3YXJkX2ZsYWcpIHsgICAv KiBGb3J3YXJkIGNyZWRlbnRpYWxzIChnbG9iYWwpICovCi0gICAgICAgICAgICBpZiAoc3RhdHVz ID0ga3JiNV9md2RfdGd0X2NyZWRzKCBrNV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9jb250ZXh0LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilob3N0bmFtZSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldF9jcmVkLT5jbGllbnQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRfY3JlZC0+c2VydmVy LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkYWJsZV9mbGFn ID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BUU19G T1JXQVJEQUJMRV9DUkVEUyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJm91dGJ1ZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQotICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJp bnRmKCJFcnJvciBmb3J3YXJkaW5nIGNyZWRlbnRpYWxzOiAlc1xyXG4iLAotICAgICAgICAgICAg ICAgICAgICAgICAgIGVycm9yX21lc3NhZ2Uoc3RhdHVzKSk7Ci0gICAgICAgICAgICAgICAgZ290 byBiYWQyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBTZW5kIGZvcndhcmRlZCBj cmVkZW50aWFscyAqLwotICAgICAgICAgICAgc3RhdHVzID0ga3JiNV93cml0ZV9tZXNzYWdlKGs1 X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrcmI1 X3BvaW50ZXIpJnR0eWZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmb3V0YnVmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgICAgIH0KLSAgICAgICAgZWxzZSB7IC8qIER1bW15IHdyaXRlIHRvIHNpZ25hbCBubyBmb3J3 YXJkaW5nICovCi0gICAgICAgICAgYmFkMjoKLSAgICAgICAgICAgIG91dGJ1Zi5sZW5ndGggPSAw OwotICAgICAgICAgICAgc3RhdHVzID0ga3JiNV93cml0ZV9tZXNzYWdlKGs1X2NvbnRleHQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrcmI1X3BvaW50ZXIpJnR0 eWZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0YnVmKTsK LSAgICAgICAgfSAgICAgICAKLQotICAgICAgICBpZiAoKGMgPSB0dGluYygwKSkgPCAwKSB7Ci0g ICAgICAgICAgICBpZiAoYz09LTEpIHsKLSAgICAgICAgICAgICAgICBwZXJyb3IoKGNoYXIgKilo b3N0bmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50Zigi Y2tfa3JiX3Jsb2dpbjogYmFkIGNvbm5lY3Rpb24gd2l0aCByZW1vdGUgaG9zdFxyXG4iKTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXR1cyA9IC0xOwotICAgICAgICAgICAgZ290byBi YWQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGMgIT0gMCkgewotICAgICAgICAgICAgd2hpbGUg KChjID0gdHRpbmMoMSkpID49IDApIHsKLSAgICAgICAgICAgICAgICAodm9pZCkgcHJpbnRmKCIl YyIsYyk7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJykKLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0dXMgPSAtMTsKLSAgICAg ICAgICAgIGdvdG8gYmFkOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBzdGF0dXMgPT0gMCAp IHsgICAgICAgIC8qIHN1Y2Nlc3MgKi8KLSAgICAgICAgICAgIGtyYjVfa2V5YmxvY2sgKiBrZXkg PSAwOwotCi0gICAgICAgICAgICBpZiAoIHVzZV9wcm90byA9PSBLQ01EX05FV19QUk9UT0NPTCAp IHsKLSAgICAgICAgICAgICAgICBpbnQgb24gPSAxOwotICAgICAgICAgICAgICAgIHJsb2dfaW5i YW5kID0gMTsKLSAgICAgICAgICAgICAgICBzZXRzb2Nrb3B0KHR0eWZkLCBTT0xfU09DS0VULCBT T19PT0JJTkxJTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSAmb24sIHNp emVvZiBvbik7Ci0KLSAgICAgICAgICAgICAgICBzdGF0dXMgPSBrcmI1X2F1dGhfY29uX2dldGxv Y2Fsc3Via2V5KCBrNV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGF1dGhfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5KTsKLSAgICAgICAgICAgICAg ICBpZiAoKHN0YXR1cyB8fCAha2V5KSAmJiBlbmNyeXB0X2ZsYWcgKQotICAgICAgICAgICAgICAg ICAgICBnb3RvIGJhZDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIGtleSA9PSAw ICkgewotI2lmZGVmIEhFSU1EQUwKLSAgICAgICAgICAgICAgICBrZXkgPSAmcmV0X2NyZWQtPnNl c3Npb247Ci0jZWxzZSAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAga2V5ID0gJnJldF9j cmVkLT5rZXlibG9jazsKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAgICAgICAgICB9Ci0KLSAg ICAgICAgICAgIHJjbWRfc3RyZWFtX2luaXRfa3JiNShrZXksIGVuY3J5cHRfZmxhZywgMSwgMSwg dXNlX3Byb3RvKTsKLSAgICAgICAgICAgIGlmICggZW5jcnlwdF9mbGFnICkKLSAgICAgICAgICAg ICAgICBybG9nX2VuY3J5cHQgPSAxOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAoMCk7ICAg ICAvKiBzdWNjZXNzICovCi0KLSAgICAgIGJhZDoKLSAgICAgICAgaWYgKCBzdGF0dXMgJiYgIXF1 aWV0ICkgewotICAgICAgICAgICAgcHJpbnRmKCJLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBlcnJv cjogJXNcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZShzdGF0dXMpKTsK LSAgICAgICAgfQotICAgICAgICBpZiAocmV0X2NyZWQpIHsKLSAgICAgICAgICAgIGtyYjVfZnJl ZV9jcmVkcyhrNV9jb250ZXh0LCByZXRfY3JlZCk7Ci0gICAgICAgICAgICByZXRfY3JlZCA9IE5V TEw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIChzdGF0dXMpOwotI2Vsc2UgLyogS1JCNSAq LwotICAgICAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIEtSQjUgKi8KLSAgICB9IGVsc2UgaWYg KGt2ZXJzaW9uID09IDQpIHsKLSNpZmRlZiBLUkI0Ci0gICAgICAgIGNoYXIgdGd0WzQqUkVBTE1f U1orMV07Ci0gICAgICAgIGRlYnVnKEYxMDAsImNrX2tyYl9ybG9naW4gdmVyc2lvbiA0IiwiIiww KTsKLQotICAgICAgICByZWFsbSA9IChjaGFyICopa3JiX3JlYWxtb2Zob3N0KGhvc3RuYW1lKTsK LSAgICAgICAgaWYgKCFyZWFsbSkgewotICAgICAgICAgICAgc3RyY3B5KHN0clRtcCwgIkNhbid0 IGZpbmQgcmVhbG0gZm9yIGhvc3QgXCIiKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChzdHJUbXAs IGhvc3RuYW1lLEFVVEhUTVBCTCk7Ci0gICAgICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCAiXCIi LEFVVEhUTVBCTCk7Ci0gICAgICAgICAgICBwcmludGYoIj9LZXJiZXJvcyA0IGVycm9yOiAlc1xy XG4iLHN0clRtcCk7Ci0gICAgICAgICAgICBrcmI0X2Vycm5vID0gMDsKLSAgICAgICAgICAgIG1h a2VzdHIoJmtyYjRfZXJybXNnLHN0clRtcCk7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAg ICAgIH0KLQotICAgICAgICBja21ha21zZyh0Z3Qsc2l6ZW9mKHRndCksImtyYnRndC4iLHJlYWxt LCJAIixyZWFsbSk7Ci0gICAgICAgIHN0YXR1cyA9IGNrX2tyYjRfdGt0X2lzdmFsaWQodGd0KTsK LQotICAgICAgICBpZiAoIHN0YXR1cyA8PSAwICYmIGtyYjRfYXV0b2dldCApCi0gICAgICAgICAg ICBja19rcmI0X2F1dG9nZXRfVEdUKHJlYWxtKTsKLQotICAgICAgICB0dG9jKDApOyAgICAgICAg Lyogd3JpdGUgYSBOVUwgKi8KLQotICAgICAgICBzdGF0dXMgPSBrcmJfc2VuZGF1dGgoZW5jcnlw dF9mbGFnP0tPUFRfRE9fTVVUVUFMOjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dHR5ZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJms0X2F1dGgsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAga3JiNF9kX3NydiA/IGtyYjRfZF9zcnYgOiBLUkI0X1NF UlZJQ0VfTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0bmFtZSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAodW5zaWduZWQgbG9uZykgZ2V0cGlkKCksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJms0X21zZ19kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZjcmVkLAotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmazRfc2NoZWQsCi0jZWxzZSAvKiBFTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCwKLSNlbmRpZiAvKiBFTkNSWVBUSU9OICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbF9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS0NNRFYwLjEiKTsK LSAgICAgICAgZGVidWcoRjExMSwiY2tfa3JiX3Jsb2dpbiIsImtyYl9zZW5kYXV0aCIsc3RhdHVz KTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBLU1VDQ0VTUykgewotICAgICAgICAgICAgcHJpbnRm KCAia3JiX3NlbmRhdXRoIGZhaWxlZDogJXNcclxuIiwKLSAgICAgICAgICAgICAgICAgICAga3Ji X2dldF9lcnJfdGV4dF9lbnRyeShzdGF0dXMpCi0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAgIHR0b2wocmVtb3RldXNlcixz dHJsZW4ocmVtb3RldXNlcikrMSk7Ci0gICAgICAgIHR0b2wodGVybV9zcGVlZCxzdHJsZW4odGVy bV9zcGVlZCkrMSk7Ci0KLSAgICAgIHJlcmVhZDoKLSAgICAgICAgaWYgKChjID0gdHRpbmMoMCkp IDwgMCkgewotICAgICAgICAgICAgcHJpbnRmKCJyY21kOiBiYWQgY29ubmVjdGlvbiB3aXRoIHJl bW90ZSBob3N0XHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAg ICAgICBkZWJ1ZyhGMTExLCJja19rcmJfcmxvZ2luIiwiZmlyc3QgYnl0ZSIsYyk7Ci0KLSAgICAg ICAgaWYgKGMgIT0gMCkgewotICAgICAgICAgICAgY2hhciAqY2hlY2sgPSAibGQuc286IHdhcm5p bmc6IjsKLSAgICAgICAgICAgIC8qIElmIHJsb2dpbmQgd2FzIGNvbXBpbGVkIG9uIFN1bk9TNCwg YW5kIGl0IHNvbWVob3cKLSAgICAgICAgICAgIGdvdCB0aGUgc2hhcmVkIGxpYnJhcnkgdmVyc2lv biBudW1iZXJzIHdyb25nLCBpdAotICAgICAgICAgICAgbWF5IGdpdmUgYW4gbGQuc28gd2Fybmlu ZyBhYm91dCBhbiBvbGQgdmVyc2lvbiBvZiBhCi0gICAgICAgICAgICBzaGFyZWQgbGlicmFyeS4g IEp1c3QgaWdub3JlIGFueSBzdWNoIHdhcm5pbmcuCi0gICAgICAgICAgICBOb3RlIHRoYXQgdGhl IHdhcm5pbmcgaXMgYSBjaGFyYWN0ZXJpc3RpYyBvZiB0aGUKLSAgICAgICAgICAgIHNlcnZlcjsg d2UgbWF5IG5vdCBvdXJzZWx2ZXMgYmUgcnVubmluZyB1bmRlcgotICAgICAgICAgICAgU3VuT1M0 LiAgKi8KLSAgICAgICAgICAgIGlmIChjID09ICdsJykgewotICAgICAgICAgICAgICAgIGNoYXIg KnA7Ci0gICAgICAgICAgICAgICAgY2hhciBjYzsKLQotICAgICAgICAgICAgICAgIHAgPSAmY2hl Y2tbMV07Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChjID0gdHRpbmMoMCkpID49IDApIHsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKCpwID09ICdcMCcpIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChjID09ICdcbicpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo YyAhPSAqcCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICAgICAgICAgICsrcDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IH0KLQotICAgICAgICAgICAgICAgIGlmICgqcCA9PSAnXDAnKQotICAgICAgICAgICAgICAgICAg ICBnb3RvIHJlcmVhZDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpbnRmKGNoZWNr KTsKLSAgICAgICAgICAgIHdoaWxlICgoYyA9IHR0aW5jKDEpKSA+PSAwKSB7Ci0gICAgICAgICAg ICAgICAgcHJpbnRmKCIlYyIsYyk7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJykKLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJja19rcmJfcmxvZ2luIiwiZmF0YWwgZXJyb3IgMSIsMCk7Ci0gICAgICAgICAgICBy ZXR1cm4oLTEpOwotICAgICAgICB9Ci0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgIGlm ICggZW5jcnlwdF9mbGFnICkgewotICAgICAgICAgICAgLyogaWYgd2UgYXJlIGVuY3J5cHRpbmcg d2UgbmVlZCB0byBzZXR1cCB0aGUgZW5jcnlwdGlvbiAqLwotICAgICAgICAgICAgLyogcm91dGlu ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAg ICAgICAgZGVzX2tleV9zY2hlZChjcmVkLnNlc3Npb24sIGs0X3NjaGVkKTsKLSAgICAgICAgICAg IHJsb2dfZW5jcnlwdCA9IDE7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBFTkNSWVBUSU9OICovCi0j ZWxzZSAvKiBLUkI0ICovCi0gICAgICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogS1JCNCAqLwot ICAgIH0KLSAgICByZXR1cm4oMCk7IC8qIHN1Y2Nlc3MgKi8KLX0KLQotI2RlZmluZSBTUkFORCAg IHNyYW5kCi0jZGVmaW5lIFJBTkQgICAgcmFuZAotI2RlZmluZSBSQU5EX1RZUEUgICAgICAgaW50 Ci0KLXN0YXRpYyBsb25nCi1yYW5kb21fY29uZm91bmRlcihzaXplLCBmaWxsaW4pCi1zaXplX3Qg c2l6ZTsKLWNoYXIgKiBmaWxsaW47Ci17Ci0gICAgc3RhdGljIGludCBzZWVkZWQgPSAwOwotICAg IHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKnJlYWxfZmlsbDsKLSAgICBSQU5EX1RZUEUgICBydmFs OwotCi0gICAgaWYgKCFzZWVkZWQpIHsKLSAgICAgICAgLyogdGltZSgpIGRlZmluZWQgaW4gNC4x Mi4yLjQsIGJ1dCByZXR1cm5zIGEgdGltZV90LCB3aGljaCBpcyBhbgotICAgICAgICAgICAiYXJp dGhtZXRpYyB0eXBlIiAoNC4xMi4xKSAqLwotICAgICAgICBydmFsID0gKFJBTkRfVFlQRSkgdGlt ZSgwKTsKLSAgICAgICAgU1JBTkQocnZhbCk7Ci0gICAgICAgIHJ2YWwgPSBSQU5EKCk7Ci0gICAg ICAgIHJ2YWwgXj0gZ2V0cGlkKCk7Ci0gICAgICAgIFNSQU5EKHJ2YWwpOwotICAgICAgICBzZWVk ZWQgPSAxOwotICAgIH0KLQotICAgIHJlYWxfZmlsbCA9ICh1bnNpZ25lZCBjaGFyICopZmlsbGlu OwotICAgIHdoaWxlIChzaXplID4gMCkgewotICAgICAgICBydmFsID0gUkFORCgpOwotICAgICAg ICAqcmVhbF9maWxsID0gcnZhbCAmIDB4ZmY7Ci0gICAgICAgIHJlYWxfZmlsbCsrOwotICAgICAg ICBzaXplLS07Ci0gICAgICAgIGlmIChzaXplKSB7Ci0gICAgICAgICAgICAqcmVhbF9maWxsID0g KHJ2YWwgPj4gOCkgJiAweGZmOwotICAgICAgICAgICAgcmVhbF9maWxsKys7Ci0gICAgICAgICAg ICBzaXplLS07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBL UkI1Ci1pbnQKLWtyYjVfZGVzX2F2YWlsKGZkKQotICAgIGludCBmZDsKLXsKLSAgICByZXR1cm4o bnN0b3JlZCk7Ci19Ci0KLWludAota3JiNV9kZXNfcmVhZChmZCwgYnVmLCBsZW4sIHNlY29uZGFy eSkKLSAgICBpbnQgZmQ7Ci0gICAgcmVnaXN0ZXIgY2hhciAqYnVmOwotICAgIGludCBsZW47Ci0g ICAgaW50IHNlY29uZGFyeTsKLXsKLSAgICBpbnQgbnJldHVybmVkID0gMDsKLSAgICBsb25nIG5l dF9sZW4scmRfbGVuOwotICAgIGludCBjYzsKLSAgICBrcmI1X2Vycm9yX2NvZGUgc3RhdHVzOwot ICAgIHVuc2lnbmVkIGNoYXIgYzsKLSAgICBrcmI1X2RhdGEgcGxhaW47Ci0gICAga3JiNV9lbmNf ZGF0YSBjaXBoZXI7Ci0KLSAgICBkZWJ1ZyhGMTExLCJrcmI1X2Rlc19yZWFkIiwibGVuIixsZW4p OwotICAgIGRlYnVnKEYxMTEsImtyYjVfZGVzX3JlYWQiLCJybG9nX2VuY3J5cHQiLHJsb2dfZW5j cnlwdCk7Ci0gICAgaWYgKCAhcmxvZ19lbmNyeXB0ICkgewotICAgICAgICBjYyA9IG5ldF9yZWFk KGZkLCBidWYsIGxlbik7Ci0gICAgICAgIGRlYnVnKEYxMTEsImtyYjVfZGVzX3JlYWQiLCJjaGFy cyByZWFkIixjYyk7Ci0gICAgICAgIGlmICggY2MgPCAwICkKLSAgICAgICAgICAgIG5ldGNsb3Mo KTsKLSAgICAgICAgcmV0dXJuKGNjKTsKLSAgICB9Ci0KLSAgICBpZiAobnN0b3JlZCA+PSBsZW4p IHsKLSAgICAgICAgaWYgKCBidWYgKSB7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmLCBzdG9yZV9w dHIsIGxlbik7ICAgICAgICAvKiBzYWZlICovCi0gICAgICAgICAgICBzdG9yZV9wdHIgKz0gbGVu OwotICAgICAgICAgICAgbnN0b3JlZCAtPSBsZW47Ci0gICAgICAgICAgICByZXR1cm4obGVuKTsK LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgfSBlbHNlIGlmIChu c3RvcmVkKSB7Ci0gICAgICAgIGlmICggYnVmICkgewotICAgICAgICAgICAgbWVtY3B5KGJ1Ziwg c3RvcmVfcHRyLCBuc3RvcmVkKTsgICAgLyogc2FmZSAqLwotICAgICAgICAgICAgbnJldHVybmVk ICs9IG5zdG9yZWQ7Ci0gICAgICAgICAgICBidWYgKz0gbnN0b3JlZDsKLSAgICAgICAgICAgIGxl biAtPSBuc3RvcmVkOwotICAgICAgICAgICAgbnN0b3JlZCA9IDA7Ci0gICAgICAgIH0KLSAgICAg ICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotICAgIC8qIFNlZSB0aGUg Y29tbWVudCBpbiB2NF9kZXNfcmVhZC4gKi8KLSAgICB3aGlsZSAoMSkgewotICAgICAgICBjYyA9 IG5ldF9yZWFkKGZkLCAmYywgMSk7Ci0gICAgICAgIC8qIHdlIHNob3VsZCBjaGVjayBmb3Igbm9u LWJsb2NraW5nIGhlcmUsIGJ1dCB3ZSdkIGhhdmUKLSAgICAgICAgdG8gbWFrZSBpdCBzYXZlIHBh cnRpYWwgcmVhZHMgYXMgd2VsbC4gKi8KLSAgICAgICAgaWYgKGNjIDw9IDApIHsKLSAgICAgICAg ICAgIHJldHVybiBjYzsgLyogcmVhZCBlcnJvciAqLwotICAgICAgICB9Ci0gICAgICAgIGlmIChj YyA9PSAxKSB7Ci0gICAgICAgICAgICBpZiAoYyA9PSAwIHx8ICFkb19sZW5jaGVjaykgCi0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZF9sZW4gPSBjOwot ICAgIGlmICgoY2MgPSBuZXRfcmVhZChmZCwgJmMsIDEpKSAhPSAxKSByZXR1cm4gMDsKLSAgICBy ZF9sZW4gPSAocmRfbGVuIDw8IDgpIHwgYzsKLSAgICBpZiAoKGNjID0gbmV0X3JlYWQoZmQsICZj LCAxKSkgIT0gMSkgcmV0dXJuIDA7Ci0gICAgcmRfbGVuID0gKHJkX2xlbiA8PCA4KSB8IGM7Ci0g ICAgaWYgKChjYyA9IG5ldF9yZWFkKGZkLCAmYywgMSkpICE9IDEpIHJldHVybiAwOwotICAgIHJk X2xlbiA9IChyZF9sZW4gPDwgOCkgfCBjOwotCi0gICAgaWYgKHN0YXR1cyA9IGtyYjVfY19lbmNy eXB0X2xlbmd0aChrNV9jb250ZXh0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGs1X3Nlc3Npb25fa2V5LT5lbmN0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdXNlX2l2ZWNzID8gcmRfbGVuICsgNCA6IHJkX2xlbiwKLQkJCQkgICAgKHNpemVf dCAqKSZuZXRfbGVuKSkgewotICAgICAgICBlcnJubyA9IHN0YXR1czsKLSAgICAgICAgcmV0dXJu KC0xKTsKLSAgICB9Ci0KLSAgICBpZiAoKG5ldF9sZW4gPD0gMCkgfHwgKG5ldF9sZW4gPiBzaXpl b2YoZGVzX2luYnVmKSkpIHsKLSAgICAgICAgLyogcHJlcG9zdGVyb3VzIGxlbmd0aDsgYXNzdW1l IG91dC1vZi1zeW5jOyBvbmx5Ci0gICAgICAgICAgIHJlY291cnNlIGlzIHRvIGNsb3NlIGNvbm5l Y3Rpb24sIHNvIHJldHVybiAwICovCi0gICAgICAgIHByaW50ZigiUmVhZCBzaXplIHByb2JsZW0u XHJcbiIpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmICgoY2MgPSBuZXRfcmVh ZChmZCwgZGVzaW5idWYuZGF0YSwgbmV0X2xlbikpICE9IG5ldF9sZW4gKQotICAgIHsKLSAgICAg ICAgLyogcGlwZSBtdXN0IGhhdmUgY2xvc2VkLCByZXR1cm4gMCAqLwotICAgICAgICBwcmludGYo ICJSZWFkIGVycm9yOiBsZW5ndGggcmVjZWl2ZWQgJWQgIT0gZXhwZWN0ZWQgJWQuXHJcbiIsCi0g ICAgICAgICAgICAgICAgY2MsCi0gICAgICAgICAgICAgICAgbmV0X2xlbgotICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgIHJldHVybihjYyk7Ci0gICAgfQotCi0KLSAgICAvKiBkZWNyeXB0IGlu Zm8gKi8KLSAgICBjaXBoZXIuZW5jdHlwZSA9IEVOQ1RZUEVfVU5LTk9XTjsKLSAgICBjaXBoZXIu Y2lwaGVydGV4dC5sZW5ndGggPSBuZXRfbGVuOwotICAgIGNpcGhlci5jaXBoZXJ0ZXh0LmRhdGEg PSBkZXNpbmJ1Zi5kYXRhOwotICAgIHBsYWluLmxlbmd0aCA9IHNpemVvZihzdG9yYWdlKTsKLSAg ICBwbGFpbi5kYXRhID0gc3RvcmFnZTsKLQotICAgIGlmICggc3RhdHVzID0ga3JiNV9jX2RlY3J5 cHQoazVfY29udGV4dCwgazVfc2Vzc2lvbl9rZXksIEtDTURfS0VZVVNBR0UsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1c2VfaXZlY3MgPyBlbmNpdmVjX2kgKyBzZWNvbmRhcnkg OiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaXBoZXIsJnBsYWluKSAp IHsKLSAgICAgICAgLyogcHJvYmFibHkgb3V0IG9mIHN5bmMgKi8KLSAgICAgICAgcHJpbnRmKCJD YW5ub3QgZGVjcnlwdCBkYXRhIGZyb20gbmV0d29yazogJXNcclxuIiwKLSAgICAgICAgICAgICAg ICAgZXJyb3JfbWVzc2FnZShzdGF0dXMpKTsKLSAgICAgICAgZXJybm8gPSBFSU87Ci0gICAgICAg IHJldHVybigtMSk7Ci0gICAgfQotICAgIAotICAgIHN0b3JlX3B0ciA9IHN0b3JhZ2U7Ci0gICAg bnN0b3JlZCA9IHJkX2xlbjsKLQotICAgIGlmICggdXNlX2l2ZWNzICkgewotICAgICAgICBpbnQg cmRfbGVuMjsKLSAgICAgICAgcmRfbGVuMiA9IHN0b3JhZ2VbMF0gJiAweGZmOwotICAgICAgICBy ZF9sZW4yIDw8PSA4OyByZF9sZW4yIHw9IHN0b3JhZ2VbMV0gJiAweGZmOwotICAgICAgICByZF9s ZW4yIDw8PSA4OyByZF9sZW4yIHw9IHN0b3JhZ2VbMl0gJiAweGZmOwotICAgICAgICByZF9sZW4y IDw8PSA4OyByZF9sZW4yIHw9IHN0b3JhZ2VbM10gJiAweGZmOwotICAgICAgICBpZiAocmRfbGVu MiAhPSByZF9sZW4pIHsKLSAgICAgICAgICAgIC8qIGNsZWFydGV4dCBsZW5ndGggdHJhc2hlZD8g Ki8KLSAgICAgICAgICAgIGVycm5vID0gRUlPOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAg ICAgICB9Ci0gICAgICAgIHN0b3JlX3B0ciArPSA0OwotICAgIH0KLQotICAgIGlmICggIWJ1ZiAp Ci0gICAgICAgIHJldHVybigwKTsKLQotI2lmZGVmIFJMT0dDT0RFICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGJsYWggKi8KLSAgICBpZiAocmxvZ19pbmJhbmQgJiYgKHR0bnByb3RvID09IE5Q X0s1TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pKQotICAgIHsKLSAgICAgICAgaW50 IGksIGxlZnQsIG47Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG5zdG9yZWQ7IGkrKykgewot ICAgICAgICAgICAgaWYgKHN0b3JlX3B0cltpXSA9PSAnXDM3NycgJiYKLSAgICAgICAgICAgICAg ICBzdG9yZV9wdHJbaSsxXSA9PSAnXDM3NycpIHsKLSAgICAgICAgICAgICAgICBsZWZ0ID0gbnN0 b3JlZCAtIGk7Ci0gICAgICAgICAgICAgICAgbiA9IHJsb2dfY3RybCgmc3RvcmVfcHRyW2ldLCBs ZWZ0KTsKLSAgICAgICAgICAgICAgICBpZiAobiA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAg bGVmdCAtPSAoLW4pOwotICAgICAgICAgICAgICAgICAgICBuc3RvcmVkID0gbGVmdDsKLSAgICAg ICAgICAgICAgICAgICAgLyogZmx1c2ggYmVmb3JlLCBhbmQgKC1uKSBieXRlcyAqLwotICAgICAg ICAgICAgICAgICAgICBpZiAobGVmdCA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW1t b3ZlKHN0b3JlX3B0ciwgJnN0b3JlX3B0cltpLW5dLCBsZWZ0KTsKLSAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKG4pIHsKLSAgICAgICAgICAgICAgICAgICAgbGVmdCAtPSBuOwotICAgICAgICAg ICAgICAgICAgICBuc3RvcmVkIC09IG47Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0ID4g MCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbW1vdmUoc3RvcmVfcHRyLCAmc3RvcmVfcHRy W25dLCBsZWZ0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLQotICAgIGlmIChuc3RvcmVkID4gbGVuKSB7 Ci0gICAgICAgIG1lbWNweShidWYsIHN0b3JlX3B0ciwgbGVuKTsgICAgICAgICAgICAvKiBzYWZl ICovCi0gICAgICAgIG5yZXR1cm5lZCArPSBsZW47Ci0gICAgICAgIHN0b3JlX3B0ciArPSBsZW47 Ci0gICAgICAgIG5zdG9yZWQgLT0gbGVuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1lbWNweShi dWYsIHN0b3JlX3B0ciwgbnN0b3JlZCk7ICAgICAgICAvKiBzYWZlICovCi0gICAgICAgIG5yZXR1 cm5lZCArPSBuc3RvcmVkOwotICAgICAgICBuc3RvcmVkID0gMDsKLSAgICB9Ci0gICAgcmV0dXJu KG5yZXR1cm5lZCk7Ci19Ci0KLWludAota3JiNV9kZXNfd3JpdGUoZmQsIGJ1ZiwgbGVuLCBzZWNv bmRhcnkpCi0gICAgaW50IGZkOwotICAgIGNoYXIgKmJ1ZjsKLSAgICBpbnQgbGVuOwotICAgIGlu dCBzZWNvbmRhcnk7Ci17Ci0gICAgY2hhciB0bXBidWZbMipSTE9HX0JVRlNJWis4XTsKLSAgICB1 bnNpZ25lZCBjaGFyICpsZW5fYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgdG1wYnVmOwotICAgIGty YjVfZXJyb3JfY29kZSBzdGF0dXM7Ci0gICAga3JiNV9kYXRhIHBsYWluOwotICAgIGtyYjVfZW5j X2RhdGEgY2lwaGVyOwotCi0gICAgZGVidWcoRjExMSwia3JiNV9kZXNfd3JpdGUiLCJybG9nX2Vu Y3J5cHQiLHJsb2dfZW5jcnlwdCk7Ci0gICAgaWYgKCAhcmxvZ19lbmNyeXB0ICkgewotICAgICAg ICBpbnQgY2MgPSBuZXRfd3JpdGUoZmQsIGJ1ZiwgbGVuKTsKLSAgICAgICAgZGVidWcoRjExMSwi bmV0X3dyaXRlIiwiY2hhcnMgd3JpdHRlbiIsY2MpOwotICAgICAgICByZXR1cm4oY2MgIT0gbGVu ID8gLTEgOiBsZW4pOwotICAgIH0KLQotICAgIGlmICh1c2VfaXZlY3MpIHsKLSAgICAgICAgdW5z aWduZWQgY2hhciAqbGVuYnVmMiA9ICh1bnNpZ25lZCBjaGFyICopIHRtcGJ1ZjsKLSAgICAgICAg aWYgKGxlbiArIDQgPiBzaXplb2YodG1wYnVmKSkKLSAgICAgICAgICAgIGFib3J0ICgpOwotICAg ICAgICBsZW5idWYyWzBdID0gKGxlbiAmIDB4ZmYwMDAwMDApID4+IDI0OwotICAgICAgICBsZW5i dWYyWzFdID0gKGxlbiAmIDB4ZmYwMDAwKSA+PiAxNjsKLSAgICAgICAgbGVuYnVmMlsyXSA9IChs ZW4gJiAweGZmMDApID4+IDg7Ci0gICAgICAgIGxlbmJ1ZjJbM10gPSAobGVuICYgMHhmZik7Ci0g ICAgICAgIG1lbWNweSAodG1wYnVmICsgNCwgYnVmLCBsZW4pOwotCi0gICAgICAgIHBsYWluLmRh dGEgPSB0bXBidWY7Ci0gICAgICAgIHBsYWluLmxlbmd0aCA9IGxlbiArIDQ7Ci0gICAgfSBlbHNl IHsKLSAgICAgICAgcGxhaW4uZGF0YSA9IGJ1ZjsKLSAgICAgICAgcGxhaW4ubGVuZ3RoID0gbGVu OwotICAgIH0KLQotICAgIGNpcGhlci5jaXBoZXJ0ZXh0Lmxlbmd0aCA9IHNpemVvZihkZXNfb3V0 cGt0KS00OwotICAgIGNpcGhlci5jaXBoZXJ0ZXh0LmRhdGEgPSBkZXNvdXRidWYuZGF0YTsKLQot ICAgIGlmICggc3RhdHVzID0ga3JiNV9jX2VuY3J5cHQoazVfY29udGV4dCwgazVfc2Vzc2lvbl9r ZXksIEtDTURfS0VZVVNBR0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2l2ZWNzID8g ZW5jaXZlY19vICsgc2Vjb25kYXJ5IDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAmcGxh aW4sICZjaXBoZXIpKSB7Ci0gICAgICAgIHByaW50ZigiV3JpdGUgZW5jcnlwdCBwcm9ibGVtOiAl cy5cclxuIiwKLSAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZShzdGF0dXMpKTsKLSAgICAg ICAgZXJybm8gPSBFSU87Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGRlc291dGJ1 Zi5sZW5ndGggPSBjaXBoZXIuY2lwaGVydGV4dC5sZW5ndGg7Ci0KLSAgICBsZW5fYnVmID0gKHVu c2lnbmVkIGNoYXIgKikgZGVzX291dHBrdDsKLSAgICBsZW5fYnVmWzBdID0gKGxlbiAmIDB4ZmYw MDAwMDApID4+IDI0OwotICAgIGxlbl9idWZbMV0gPSAobGVuICYgMHhmZjAwMDApID4+IDE2Owot ICAgIGxlbl9idWZbMl0gPSAobGVuICYgMHhmZjAwKSA+PiA4OwotICAgIGxlbl9idWZbM10gPSAo bGVuICYgMHhmZik7Ci0KLSAgICBpZiAobmV0X3dyaXRlKGZkLCBkZXNfb3V0cGt0LGRlc291dGJ1 Zi5sZW5ndGgrNCkKLSAgICAgICAgICE9IGRlc291dGJ1Zi5sZW5ndGgrNCl7Ci0gICAgICAgIHBy aW50ZigiQ291bGQgbm90IHdyaXRlIG91dCBhbGwgZGF0YVxyXG4iKTsKLSAgICAgICAgcmV0dXJu KC0xKTsKLSAgICB9Ci0gICAgZWxzZSByZXR1cm4obGVuKTsKLX0KLSNlbmRpZiAvKiBLUkI1ICov Ci0KLSNpZmRlZiBLUkI0Ci0vKgotICogTm90ZSB0aGF0IHRoZSBlbmNyeXB0ZWQgcmxvZ2luIHBh Y2tldHMgdGFrZSB0aGUgZm9ybSBvZiBhIGZvdXItYnl0ZQotICogbGVuZ3RoIGZvbGxvd2VkIGJ5 IGVuY3J5cHRlZCBkYXRhLiAgT24gd3JpdGluZyB0aGUgZGF0YSBvdXQsIGEgc2lnbmlmaWNhbnQK LSAqIHBlcmZvcm1hbmNlIHBlbmFsdHkgaXMgc3VmZmVyZWQgKGF0IGxlYXN0IG9uZSBSVFQgcGVy IGNoYXJhY3RlciwgdHdvIGlmIHdlCi0gKiBhcmUgd2FpdGluZyBmb3IgYSBzaGVsbCB0byBlY2hv KSBieSB3cml0aW5nIHRoZSBkYXRhIHNlcGFyYXRlbHkgZnJvbSB0aGUKLSAqIGxlbmd0aC4gIFNv LCB1bmxpa2UgdGhlIGlucHV0IGJ1ZmZlciwgd2hpY2gganVzdCBjb250YWlucyB0aGUgb3V0cHV0 Ci0gKiBkYXRhLCB0aGUgb3V0cHV0IGJ1ZmZlciByZXByZXNlbnRzIHRoZSBlbnRpcmUgcGFja2V0 LgotICovCi0KLWludAota3JiNF9kZXNfYXZhaWwoZmQpCi0gICAgaW50IGZkOwotewotICAgIHJl dHVybihuc3RvcmVkKTsKLX0KLQotaW50Ci1rcmI0X2Rlc19yZWFkKGZkLCBidWYsIGxlbikKLWlu dCBmZDsKLXJlZ2lzdGVyIGNoYXIgKmJ1ZjsKLWludCBsZW47Ci17Ci0gICAgaW50IG5yZXR1cm5l ZCA9IDA7Ci0gICAgdW5zaWduZWQgbG9uZyBuZXRfbGVuLCByZF9sZW47Ci0gICAgaW50IGNjOwot ICAgIHVuc2lnbmVkIGNoYXIgYzsKLSAgICBpbnQgZ290emVybyA9IDA7Ci0KLSAgICBkZWJ1ZyhG MTExLCJrcmI0X2Rlc19yZWFkIiwicmxvZ19lbmNyeXB0IixybG9nX2VuY3J5cHQpOwotICAgIGRl YnVnKEYxMTEsImtyYjRfZGVzX3JlYWQiLCJsZW4iLGxlbik7Ci0gICAgaWYgKCAhcmxvZ19lbmNy eXB0ICkgewotICAgICAgICBjYyA9IG5ldF9yZWFkKGZkLCBidWYsIGxlbik7Ci0gICAgICAgIGRl YnVnKEYxMTEsImtyYjRfZGVzX3JlYWQiLCJjaGFycyByZWFkIixjYyk7Ci0gICAgICAgIGlmICgg Y2MgPCAwICkKLSAgICAgICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgcmV0dXJuKGNjKTsKLSAg ICB9Ci0KLSAgICBpZiAobnN0b3JlZCA+PSBsZW4pIHsKLSAgICAgICAgaWYgKCBidWYgKSB7Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTExLCJrcmI0X2Rlc19yZWFkIChuc3RvcmVkID49IGxlbikiLCJu c3RvcmVkIixuc3RvcmVkKTsKLSAgICAgICAgICAgIG1lbWNweShidWYsIHN0b3JlX3B0ciwgbGVu KTsgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgIHN0b3JlX3B0ciArPSBsZW47Ci0gICAg ICAgICAgICBuc3RvcmVkIC09IGxlbjsKLSAgICAgICAgICAgIHJldHVybihsZW4pOwotICAgICAg ICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICB9IGVsc2UgaWYgKG5zdG9yZWQp IHsKLSAgICAgICAgaWYgKCBidWYgKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJrcmI0X2Rl c19yZWFkIChuc3RvcmVkKSIsIm5zdG9yZWQiLG5zdG9yZWQpOwotICAgICAgICAgICAgbWVtY3B5 KGJ1Ziwgc3RvcmVfcHRyLCBuc3RvcmVkKTsgICAgLyogc2FmZSAqLwotICAgICAgICAgICAgbnJl dHVybmVkICs9IG5zdG9yZWQ7Ci0gICAgICAgICAgICBidWYgKz0gbnN0b3JlZDsKLSAgICAgICAg ICAgIGxlbiAtPSBuc3RvcmVkOwotICAgICAgICAgICAgbnN0b3JlZCA9IDA7Ci0gICAgICAgIH0g ZWxzZQotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotICAgIC8qIFdlJ3JlIGZldGNo aW5nIHRoZSBsZW5ndGggd2hpY2ggaXMgTVNCIGZpcnN0LCBhbmQgdGhlIE1TQgotICAgIGhhcyB0 byBiZSB6ZXJvIHVubGVzcyB0aGUgY2xpZW50IGlzIHNlbmRpbmcgbW9yZSB0aGFuIDJeMjQKLSAg ICAoMTZNKSBieXRlcyBpbiBhIHNpbmdsZSB3cml0ZSAod2hpY2ggaXMgd2h5IHRoaXMgY29kZSBp cyBpbgotICAgIHJsb2dpbiBidXQgbm90IHJjcCBvciByc2guKSBUaGUgb25seSByZWFzb25zIHdl J2QgZ2V0IHNvbWV0aGluZwotICAgIG90aGVyIHRoYW4gemVybyBhcmU6Ci0gICAgLS0gY29ycnVw dGlvbiBvZiB0aGUgdGNwIHN0cmVhbSAod2hpY2ggd2lsbCBzaG93IHVwIHdoZW4KLSAgICBldmVy eXRoaW5nIGVsc2UgaXMgb3V0IG9mIHN5bmMgdG9vKQotICAgIC0tIHVuLWNhdWdodCBCZXJrZWxl eS1zdHlsZSAicHNldWRvIG91dC1vZi1iYW5kIGRhdGEiIHdoaWNoCi0gICAgaGFwcGVucyBhbnkg dGltZSB0aGUgdXNlciBoaXRzIF5DIHR3aWNlLgotICAgIFRoZSBsYXR0ZXIgaXMgKnZlcnkqIGNv bW1vbiwgYXMgc2hvd24gYnkgYW4gJ3Jsb2dpbiAteCAtZCcKLSAgICB1c2luZyB0aGUgQ05TIFY0 IHJsb2dpbi4gICAgICAgICBNYXJrIEVJY2hpbiAxLzk1Ci0gICAgKi8KLSAgICBkZWJ1ZyhGMTEw LCJrcmI0X2Rlc19yZWFkIiwKLSAgICAgICAgICAiYWJvdXQgdG8gY2FsbCBuZXRfcmVhZCgpIHRo aXMgd2lsbCBibG9jayIsCi0gICAgICAgICAgMAotICAgICAgICAgICk7Ci0gICAgZG8gewotICAg ICAgICBjYyA9IG5ldF9yZWFkKGZkLCAmYywgMSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsIm5ldF9y ZWFkIiwiY2hhcnMgcmVhZCIsY2MpOwotICAgICAgICBpZiAoY2MgPD0gMCkgewotICAgICAgICAg ICAgbmV0Y2xvcygpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAg ICBpZiAoY2MgIT0gMSkgcmV0dXJuIDA7IC8qIHJlYWQgZXJyb3IgKi8KLSAgICAgICAgaWYgKGNj ID09IDEpIHsKLSAgICAgICAgICAgIGlmIChjID09IDApIGdvdHplcm8gPSAxOwotICAgICAgICB9 Ci0gICAgfSB3aGlsZSAoIWdvdHplcm8pOwotCi0gICAgZGVidWcoRjExMCwia3JiNF9kZXNfcmVh ZCIsImdvdHplcm8iLDApOwotICAgIGNjID0gbmV0X3JlYWQoZmQsICZjLCAxKTsKLSAgICBkZWJ1 ZyhGMTExLCJuZXRfcmVhZCIsImNoYXJzIHJlYWQiLGNjKTsKLSAgICBpZiAoY2MgPCAwKSB7Ci0g ICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9IGVsc2UgaWYgKCBj YyAhPSAxICkKLSAgICAgICAgcmV0dXJuKDApOwotICAgIG5ldF9sZW4gPSBjOwotICAgIGNjID0g bmV0X3JlYWQoZmQsICZjLCAxKTsKLSAgICBkZWJ1ZyhGMTExLCJuZXRfcmVhZCIsImNoYXJzIHJl YWQiLGNjKTsKLSAgICBpZiAoY2MgPCAwKSB7Ci0gICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAg cmV0dXJuKC0xKTsKLSAgICB9IGVsc2UgaWYgKCBjYyAhPSAxICkKLSAgICAgICAgcmV0dXJuKDAp OwotICAgIG5ldF9sZW4gPSAobmV0X2xlbiA8PCA4KSB8IGM7Ci0gICAgZGVidWcoRjExMSwibmV0 X3JlYWQiLCJjaGFycyByZWFkIixjYyk7Ci0gICAgY2MgPSBuZXRfcmVhZChmZCwgJmMsIDEpOwot ICAgIGlmIChjYyA8IDApIHsKLSAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICByZXR1cm4oLTEp OwotICAgIH0gZWxzZSBpZiAoIGNjICE9IDEgKQotICAgICAgICByZXR1cm4oMCk7Ci0gICAgbmV0 X2xlbiA9IChuZXRfbGVuIDw8IDgpIHwgYzsKLSAgICBkZWJ1ZyhGMTExLCJrcmI0X2Rlc19yZWFk IiwibmV0X2xlbiIsbmV0X2xlbik7Ci0KLSAgICAvKiBOb3RlOiBuZXRfbGVuIGlzIHVuc2lnbmVk ICovCi0gICAgaWYgKG5ldF9sZW4gPiBzaXplb2YoZGVzX2luYnVmKSkgewotICAgICAgICAvKiBY WFggcHJlcG9zdGVyb3VzIGxlbmd0aCwgcHJvYmFibHkgb3V0IG9mIHN5bmMuCi0gICAgICAgIGFj dCBhcyBpZiBwaXBlIGNsb3NlZCAqLwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIC8q IHRoZSB3cml0ZXIgdGVsbHMgdXMgaG93IG11Y2ggcmVhbCBkYXRhIHdlIGFyZSBnZXR0aW5nLCBi dXQKLSAgICB3ZSBuZWVkIHRvIHJlYWQgdGhlIHBhZCBieXRlcyAoOC1ieXRlIGJvdW5kYXJ5KSAq LwotI2lmbmRlZiByb3VuZHVwCi0jZGVmaW5lIHJvdW5kdXAoeCx5KSAoKCgoeCkrKHkpLTEpLyh5 KSkqKHkpKQotI2VuZGlmIC8qIHJvdW5kdXAgKi8KLSAgICByZF9sZW4gPSByb3VuZHVwKG5ldF9s ZW4sIDgpOwotICAgIGRlYnVnKEYxMTEsImtyYjRfZGVzX3JlYWQiLCJyZF9sZW4iLHJkX2xlbik7 Ci0gICAgY2MgPSBuZXRfcmVhZChmZCwgZGVzX2luYnVmLCByZF9sZW4pOwotICAgIGRlYnVnKEYx MTEsIm5ldF9yZWFkIiwiY2hhcnMgcmVhZCIsY2MpOwotICAgIGlmIChjYyA8IDApIHsKLSAgICAg ICAgbmV0Y2xvcygpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0gZWxzZSBpZiAoIGNjICE9 IHJkX2xlbiApCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIGNraGV4ZHVtcCgia3JiNF9kZXNf cmVhZCBkZXNfaW5idWYiLGRlc19pbmJ1Ziw4KTsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0jaWZk ZWYgS1JCNTI0Ci0gICAgKHZvaWQpIGRlc19wY2JjX2VuY3J5cHQoZGVzX2luYnVmLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobmV0X2xlbiA8IDgpID8gOCA6IG5ldF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGs0X3NjaGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVkLnNlc3Np b24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQ1JZUFQpOwotI2Vsc2UgLyogS1JC NTI0ICovCi0gICAgKHZvaWQpIGRlc19wY2JjX2VuY3J5cHQoKEJsb2NrICopZGVzX2luYnVmLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQmxvY2sgKilzdG9yYWdlLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobmV0X2xlbiA8IDgpID8gOCA6IG5ldF9sZW4sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGs0X3NjaGVkLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmY3JlZC5zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUNSWVBU KTsKLSNlbmRpZiAvKiBLUkI1MjQgKi8KLSNlbmRpZiAvKiBFTkNSWVBUSU9OICovCi0gICAgY2to ZXhkdW1wKCJrcmI0X2Rlc19yZWFkIHN0b3JhZ2UiLHN0b3JhZ2UsOCk7Ci0KLSAgICAvKgotICAg ICogd2hlbiB0aGUgY2xlYXJ0ZXh0IGJsb2NrIGlzIDwgOCBieXRlcywgaXQgaXMgInJpZ2h0LWp1 c3RpZmllZCIKLSAgICAqIGluIHRoZSBibG9jaywgc28gd2UgbmVlZCB0byBhZGp1c3QgdGhlIHBv aW50ZXIgdG8gdGhlIGRhdGEKLSAgICAqLwotICAgIGlmIChuZXRfbGVuIDwgOCkKLSAgICAgICAg c3RvcmVfcHRyID0gc3RvcmFnZSArIDggLSBuZXRfbGVuOwotICAgIGVsc2UKLSAgICAgICAgc3Rv cmVfcHRyID0gc3RvcmFnZTsKLSAgICBuc3RvcmVkID0gbmV0X2xlbjsKLQotICAgIGlmICggIWJ1 ZiApCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIGlmIChuc3RvcmVkID4gbGVuKSB7Ci0gICAg ICAgIG1lbWNweShidWYsIHN0b3JlX3B0ciwgbGVuKTsgICAgICAgICAgICAvKiBzYWZlICovCi0g ICAgICAgIG5yZXR1cm5lZCArPSBsZW47Ci0gICAgICAgIHN0b3JlX3B0ciArPSBsZW47Ci0gICAg ICAgIG5zdG9yZWQgLT0gbGVuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1lbWNweShidWYsIHN0 b3JlX3B0ciwgbnN0b3JlZCk7ICAgICAgICAvKiBzYWZlICovCi0gICAgICAgIG5yZXR1cm5lZCAr PSBuc3RvcmVkOwotICAgICAgICBuc3RvcmVkID0gMDsKLSAgICB9Ci0KLSAgICBkZWJ1ZyhGMTEx LCJuZXRfcmVhZCIsIm5yZXR1cm5lZCIsbnJldHVybmVkKTsKLSAgICByZXR1cm4obnJldHVybmVk KTsKLX0KLQotaW50Ci1rcmI0X2Rlc193cml0ZShmZCwgYnVmLCBsZW4pCi1pbnQgZmQ7Ci1jaGFy ICpidWY7Ci1pbnQgbGVuOwotewotICAgIHN0YXRpYyBjaGFyIGdhcmJhZ2VfYnVmWzhdOwotICAg IHVuc2lnbmVkIGNoYXIgKmxlbl9idWYgPSAodW5zaWduZWQgY2hhciAqKSBkZXNfb3V0cGt0Owot ICAgIGludCBjYzsKLQotICAgIGRlYnVnKEYxMTEsImtyYjRfZGVzX3dyaXRlIiwicmxvZ19lbmNy eXB0IixybG9nX2VuY3J5cHQpOwotICAgIGlmICggIXJsb2dfZW5jcnlwdCApIHsKLSAgICAgICAg Y2MgPSBuZXRfd3JpdGUoZmQsIGJ1ZiwgbGVuKTsKLSAgICAgICAgZGVidWcoRjExMSwibmV0X3dy aXRlIiwiY2hhcnMgd3JpdHRlbiIsY2MpOwotICAgICAgICByZXR1cm4oY2MpOwotICAgIH0KLQot ICAgIC8qCi0gICAgKiBwY2JjX2VuY3J5cHQgb3V0cHV0cyBpbiA4LWJ5dGUgKDY0IGJpdCkgaW5j cmVtZW50cwotICAgICoKLSAgICAqIGl0IHplcm8tZmlsbHMgdGhlIGNsZWFydGV4dCB0byA4LWJ5 dGUgcGFkZGluZywKLSAgICAqIHNvIGlmIHdlIGhhdmUgY2xlYXJ0ZXh0IG9mIDwgOCBieXRlcywg d2Ugd2FudAotICAgICogdG8gaW5zZXJ0IHJhbmRvbSBnYXJiYWdlIGJlZm9yZSBpdCBzbyB0aGF0 IHRoZSBjaXBoZXJ0ZXh0Ci0gICAgKiBkaWZmZXJzIGZvciBlYWNoIHRyYW5zbWlzc2lvbiBvZiB0 aGUgc2FtZSBjbGVhcnRleHQuCi0gICAgKiBpZiBsZW4gPCA4IC0gc2l6ZW9mKGxvbmcpLCBzaXpl b2YobG9uZykgYnl0ZXMgb2YgcmFuZG9tCi0gICAgKiBnYXJiYWdlIHNob3VsZCBiZSBzdWZmaWNp ZW50OyBsZWF2ZSB0aGUgcmVzdCBhcy1pcyBpbiB0aGUgYnVmZmVyLgotICAgICogaWYgbGVuID4g OCAtIHNpemVvZihsb25nKSwganVzdCBnYXJiYWdlIGZpbGwgdGhlIHJlc3QuCi0gICAgKi8KLSAg ICBpZiAobGVuIDwgOCkgewotICAgICAgICByYW5kb21fY29uZm91bmRlcig4IC0gbGVuLCBnYXJi YWdlX2J1Zik7Ci0gICAgICAgIC8qIHRoaXMgInJpZ2h0LWp1c3RpZmllcyIgdGhlIGRhdGEgaW4g dGhlIGJ1ZmZlciAqLwotICAgICAgICAodm9pZCkgbWVtY3B5KGdhcmJhZ2VfYnVmICsgOCAtIGxl biwgYnVmLCBsZW4pOyAvKiBzYWZlICovCi0gICAgICAgIGNraGV4ZHVtcCgia3JiNF9kZXNfd3Jp dGUgZ2FyYmFnZV9idWYiLGdhcmJhZ2VfYnVmLDgpOwotICAgIH0gZWxzZQotICAgICAgICBja2hl eGR1bXAoImtyYjRfZGVzX3dyaXRlIGJ1ZiIsYnVmLDgpOwotI2lmZGVmIENLX0VOQ1JZUFRJT04K LSNpZmRlZiBLUkI1MjQKLSAgICAodm9pZCkgZGVzX3BjYmNfZW5jcnlwdCgobGVuIDwgOCkgPyBn YXJiYWdlX2J1ZiA6IGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzX291dHBr dCs0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGVuIDwgOCkgPyA4IDogbGVuLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrNF9zY2hlZCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY3JlZC5zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF TkNSWVBUKTsKLSNlbHNlIC8qIEtSQjUyNCAqLwotICAgICh2b2lkKSBkZXNfcGNiY19lbmNyeXB0 KChCbG9jayAqKSgobGVuIDwgOCkgPyBnYXJiYWdlX2J1ZiA6IGJ1ZiksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChCbG9jayAqKShkZXNfb3V0cGt0KzQpLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobGVuIDwgOCkgPyA4IDogbGVuLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBrNF9zY2hlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNyZWQuc2Vz c2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DUllQVCk7Ci0jZW5kaWYgLyog S1JCNTI0ICovCi0jZW5kaWYgLyogRU5DUllQVElPTiAqLwotICAgIGlmICggbGVuIDwgOCApCi0g ICAgICAgIGNraGV4ZHVtcCgia3JiNF9kZXNfd3JpdGUgKHBvc3QgcGNiYykgZ2FyYmFnZV9idWYi LGdhcmJhZ2VfYnVmLDgpOwotICAgIGVsc2UKLSAgICAgICAgY2toZXhkdW1wKCJrcmI0X2Rlc193 cml0ZSAocG9zdCBwY2JjKSBidWYiLGJ1Ziw4KTsKLSAgICBja2hleGR1bXAoImtyYjRfZGVzX3dy aXRlIChkZXNfb3V0cGt0KzQpIiwoZGVzX291dHBrdCs0KSw4KTsKLQotICAgIC8qIHRlbGwgdGhl IG90aGVyIGVuZCB0aGUgcmVhbCBhbW91bnQsIGJ1dCBzZW5kIGFuIDgtYnl0ZSBwYWRkZWQKLSAg ICBwYWNrZXQgKi8KLSAgICBsZW5fYnVmWzBdID0gKGxlbiAmIDB4ZmYwMDAwMDApID4+IDI0Owot ICAgIGxlbl9idWZbMV0gPSAobGVuICYgMHhmZjAwMDApID4+IDE2OwotICAgIGxlbl9idWZbMl0g PSAobGVuICYgMHhmZjAwKSA+PiA4OwotICAgIGxlbl9idWZbM10gPSAobGVuICYgMHhmZik7Ci0g ICAgY2toZXhkdW1wKCJrcmI0X2Rlc193cml0ZSBkZXNfb3V0cGt0IGxlbiIsZGVzX291dHBrdCwx Mik7Ci0gICAgY2MgPSBuZXRfd3JpdGUoZmQsIGRlc19vdXRwa3QsIHJvdW5kdXAobGVuLDgpKzQp OwotICAgIGRlYnVnKEYxMTEsIm5ldF93cml0ZSIsImNoYXJzIHdyaXR0ZW4iLGNjKTsKLSAgICBy ZXR1cm4obGVuKTsKLX0KLSNlbmRpZiAvKiBLUkI0ICovCi0jZW5kaWYgLyogUkxPR0NPREUgKi8K LQotI2lmZGVmIEtSQjUyNAotI2lmbmRlZiBPUzIKLS8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25z IGFyZSBtaXNzaW5nIGZyb20gdGhlIGNvbXBhdGliaWxpdHkgbGlicmFyeSAqLwotY29uc3QgY2hh ciAqCi1rcmJfZ2V0X2Vycl90ZXh0X2VudHJ5KHIpIGludCByOwotewotICAgIGV4dGVybiBjaGFy IGtyYl9lcnJfdGV4dFtdOwotICAgIHJldHVybihrcmJfZXJyX3R4dFtyXSk7Ci19Ci0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogS1JCNTI0ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8K LQotI2lmZGVmIENLX0tFUkJFUk9TCi0jaWZkZWYgS1JCNV9VMlUKLS8qIEtlcmJlcm9zIDUgVXNl ciB0byBVc2VyIENsaWVudCAqLwotaW50Ci1rNV91c2VyX3RvX3VzZXJfY2xpZW50X2F1dGgoKQot ewotICAgIGV4dGVybiBpbnQgdHR5ZmQ7Ci0gICAgcmVnaXN0ZXIgaW50IHJldHZhbCwgaTsKLSAg ICBjaGFyICoqc3JlYWxtczsgICAgICAgICAgICAgLyogcmVhbG0ocykgb2Ygc2VydmVyICovCi0g ICAgY2hhciAqcHJpbmM7ICAgICAgICAgICAgICAgIC8qIHByaW5jaXBhbCBpbiBjcmVkZW50aWFs cyBjYWNoZSAqLwotICAgIGtyYjVfY2NhY2hlIGNjOwotICAgIGtyYjVfY3JlZHMgY3JlZHMsICpu ZXdfY3JlZHM7Ci0gICAga3JiNV9kYXRhIHJlcGx5LCBtc2csIG1zZ3RleHQsIHByaW5jX2RhdGE7 Ci0gICAga3JiNV90aWNrZXQgKiB0aWNrZXQgPSBOVUxMOwotCi0gICAgaWYgKHJldHZhbCA9IGs1 X2dldF9jY2FjaGUoazVfY29udGV4dCwmY2MsTlVMTCkpCi0gICAgewotICAgICAgICBjb21fZXJy KCJ1dS1jbGllbnQiLCByZXR2YWwsICJnZXR0aW5nIGNyZWRlbnRpYWxzIGNhY2hlIik7Ci0gICAg ICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgbWVtc2V0ICgoY2hhciopJmNyZWRzLCAwLCBz aXplb2YoY3JlZHMpKTsKLSAgICBpZiAocmV0dmFsID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGs1 X2NvbnRleHQsIGNjLCAmY3JlZHMuY2xpZW50KSkKLSAgICB7Ci0gICAgICAgIGNvbV9lcnIoInV1 LWNsaWVudCIsIHJldHZhbCwgImdldHRpbmcgcHJpbmNpcGFsIG5hbWUiKTsKLSAgICAgICAgcmV0 dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBpZiAocmV0dmFsID0ga3JiNV9nZXRfaG9zdF9yZWFsbShr NV9jb250ZXh0LCBzekhvc3ROYW1lLCAmc3JlYWxtcykpCi0gICAgewotICAgICAgICBjb21fZXJy KCJ1dS1jbGllbnQiLCByZXR2YWwsICJnZXR0aW5nIHJlYWxtcyBmb3IgXCIlc1wiIiwgc3pIb3N0 TmFtZSk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgaWYgKHJldHZhbCA9IGty YjVfYnVpbGRfcHJpbmNpcGFsX2V4dChrNV9jb250ZXh0LCAmY3JlZHMuc2VydmVyLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9wcmluY19yZWFsbShrNV9j b250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3JlZHMuY2xpZW50KS0+bGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAga3JiNV9wcmluY19yZWFsbShrNV9jb250ZXh0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlZHMuY2xp ZW50KS0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYs ICJrcmJ0Z3QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3Ji NV9wcmluY19yZWFsbShrNV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlZHMuY2xpZW50KS0+bGVuZ3RoLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9wcmluY19yZWFsbShrNV9j b250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3JlZHMuY2xpZW50KS0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDApKQotICAgIHsKLSAgICAgICAgY29tX2VycigidXUtY2xpZW50Iiwg cmV0dmFsLCAic2V0dGluZyB1cCB0Z3Qgc2VydmVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuKC0x KTsKLSAgICB9Ci0KLSAgICAvKiBHZXQgVEdUIGZyb20gY3JlZGVudGlhbHMgY2FjaGUgKi8KLSAg ICBpZiAocmV0dmFsID0ga3JiNV9nZXRfY3JlZGVudGlhbHMoazVfY29udGV4dCwgS1JCNV9HQ19D QUNIRUQsIGNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNyZWRz LCAmbmV3X2NyZWRzKSkKLSAgICB7Ci0gICAgICAgIGNvbV9lcnIoInV1LWNsaWVudCIsIHJldHZh bCwgImdldHRpbmcgVEdUIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgaWYg KHJldHZhbCA9IGtyYjVfdW5wYXJzZV9uYW1lKGs1X2NvbnRleHQsIGNyZWRzLmNsaWVudCwgJnBy aW5jKSkgewotICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJwcmludGluZyBw cmluY2lwYWwgbmFtZSIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBpID0gc3Ry bGVuKHByaW5jKSArIDE7Ci0gICAgcHJpbmNfZGF0YS5kYXRhID0gcHJpbmM7Ci0gICAgcHJpbmNf ZGF0YS5sZW5ndGggPSBpOyAgICAgICAgICAgICAgLyogaW5jbHVkZSBudWxsIHRlcm1pbmF0b3Ig Zm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyJ3Mg Y29udmVuaWVuY2UgKi8KLSAgICByZXR2YWwgPSBrcmI1X3dyaXRlX21lc3NhZ2UoazVfY29udGV4 dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtyYjVfcG9pbnRlcikgJnR0eWZk LCAmcHJpbmNfZGF0YSk7Ci0gICAgaWYgKHJldHZhbCkKLSAgICB7Ci0gICAgICAgIGNvbV9lcnIo InV1LWNsaWVudCIsIHJldHZhbCwgInNlbmRpbmcgcHJpbmNpcGFsIG5hbWUgdG8gc2VydmVyIik7 Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1l KGs1X2NvbnRleHQscHJpbmMpOwotCi0gICAgcmV0dmFsID0ga3JiNV93cml0ZV9tZXNzYWdlKGs1 X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrcmI1X3BvaW50ZXIp ICZ0dHlmZCwgJm5ld19jcmVkcy0+dGlja2V0KTsKLSAgICBpZiAocmV0dmFsKQotICAgIHsKLSAg ICAgICAgY29tX2VycigidXUtY2xpZW50IiwgcmV0dmFsLCAic2VuZGluZyB0aWNrZXQgdG8gc2Vy dmVyIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgcmV0dmFsID0ga3JiNV9y ZWFkX21lc3NhZ2UoazVfY29udGV4dCwgKGtyYjVfcG9pbnRlcikgJnR0eWZkLCAmcmVwbHkpOwot ICAgIGlmIChyZXR2YWwpCi0gICAgewotICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2 YWwsICJyZWFkaW5nIHJlcGx5IGZyb20gc2VydmVyIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0g ICAgfQotCi0gICAgaWYgKHJldHZhbCA9IGtyYjVfYXV0aF9jb25faW5pdChrNV9jb250ZXh0LCAm YXV0aF9jb250ZXh0KSkgewotICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJp bml0aWFsaXppbmcgdGhlIGF1dGhfY29udGV4dCIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAg IH0KLQotICAgIGlmICgha3JiNV9kX25vX2FkZHJlc3NlcykgewotICAgICAgaWYgKHJldHZhbCA9 IGtyYjVfYXV0aF9jb25fZ2VuYWRkcnMoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LCB0dHlmZCwK LSAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfQVVUSF9DT05URVhUX0dFTkVSQVRFX0xPQ0FM X0ZVTExfQUREUiB8Ci0gICAgICAgICAgICAgICAgICAgICAgICBLUkI1X0FVVEhfQ09OVEVYVF9H RU5FUkFURV9SRU1PVEVfRlVMTF9BRERSKSkgewotICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQi LCByZXR2YWwsICJnZW5lcmF0aW5nIGFkZHJzIGZvciBhdXRoX2NvbnRleHQiKTsKLSAgICAgICAg cmV0dXJuKC0xKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmV0dmFsID0ga3JiNV9hdXRo X2Nvbl9zZXRmbGFncyhrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9BVVRIX0NPTlRFWFRfRE9fU0VRVUVOQ0UpKSB7 Ci0gICAgICAgIGNvbV9lcnIoInV1LWNsaWVudCIsIHJldHZhbCwgImluaXRpYWxpemluZyB0aGUg YXV0aF9jb250ZXh0IGZsYWdzIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAg aWYgKHJldHZhbCA9IGtyYjVfYXV0aF9jb25fc2V0dXNlcnVzZXJrZXkoazVfY29udGV4dCwgYXV0 aF9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZuZXdfY3JlZHMtPmtleWJsb2NrKSkgewotICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCBy ZXR2YWwsICJzZXR0aW5nIHVzZXJ1c2Vya2V5IGZvciBhdXRoY29udGV4dCIpOwotICAgICAgICBy ZXR1cm4oLTEpOwotICAgIH0KLQotICAgIC8qIHJlYWQgdGhlIGFwX3JlcSB0byBnZXQgdGhlIHNl c3Npb24ga2V5ICovCi0gICAgcmV0dmFsID0ga3JiNV9yZF9yZXEoazVfY29udGV4dCwgJmF1dGhf Y29udGV4dCwgJnJlcGx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBO VUxMLCAmdGlja2V0KTsKLSAgICBpZiAocmV0dmFsKSB7Ci0gICAgICAgIGNvbV9lcnIoInV1LWNs aWVudCIsIHJldHZhbCwgInJlYWRpbmcgQVBfUkVRIGZyb20gc2VydmVyIik7Ci0gICAgICAgIHJl dHVybigtMSk7Ci0gICAgfQotCi0gICAgaWYgKGs1X3UydV9yZWFkX21zZyhrNV9jb250ZXh0LCZt c2cpIDwgMCkKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmICggc3RyY21wKCJLZXJtaXQg aW1wbGVtZW50cyBLZXJiZXJvcyA1IFVzZXIgdG8gVXNlciIsbXNnLmRhdGEpICkKLSAgICAgICAg cmV0dXJuKC0xKTsKLSAgICBrcmI1X2ZyZWVfZGF0YV9jb250ZW50cyhrNV9jb250ZXh0LCZtc2cp OwotCi0gICAgbXNndGV4dC5kYXRhID0gIkFzIGRvIEkhIDotKSI7Ci0gICAgbXNndGV4dC5sZW5n dGggPSBzdHJsZW4obXNndGV4dC5kYXRhKSsxOwotCi0gICAgaWYgKGs1X3UydV93cml0ZV9tc2co azVfY29udGV4dCwmbXNndGV4dCkgPCAwKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYg KHJldHZhbCA9IGtyYjVfdW5wYXJzZV9uYW1lKGs1X2NvbnRleHQsCi0jaWZkZWYgSEVJTURBTAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0LT5jbGllbnQsCi0jZWxz ZSAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNr ZXQtPmVuY19wYXJ0Mi0+Y2xpZW50LAotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZwcmluYykpCi0gICAgICAgIGNvbV9lcnIoInV1LWNs aWVudCIsIHJldHZhbCwgIndoaWxlIHVucGFyc2luZyBjbGllbnQgbmFtZSIpOwotICAgIGVsc2Ug ewotICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQscHJpbmMsVUlEQlVG TEVOKTsKLSAgICAgICAgdmFsaWRVc2VyID0gQVVUSF9WQUxJRDsKLSAgICAgICAgYXV0aGVudGlj YXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1OwotICAgICAgICBpZiAoICFxdWll dCApCi0gICAgICAgICAgICBwcmludGYoIlBlZXIgbmFtZSBpcyBcIiVzXCJcbiIsIHByaW5jKTsK LSAgICAgICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoazVfY29udGV4dCxwcmluYyk7Ci0gICAg fQotICAgIHJldHVybiAwOwotfQotCi0vKiBLZXJiZXJvcyA1IFVzZXIgdG8gVXNlciBTZXJ2ZXIg Ki8KLQotaW50Ci1rNV91c2VyX3RvX3VzZXJfc2VydmVyX2F1dGgoKQotewotICAgIGtyYjVfZGF0 YSBwbmFtZV9kYXRhLCB0a3RfZGF0YTsKLSAgICBpbnQgcmV0dmFsOwotICAgIGtyYjVfY3JlZHMg Y3JlZHMsICpuZXdfY3JlZHM7Ci0gICAga3JiNV9jY2FjaGUgY2M7Ci0gICAga3JiNV9kYXRhIG1z ZywgbXNndGV4dDsKLSAgICBleHRlcm4gaW50IHR0eWZkOwotCi0gICAgaWYgKHJldHZhbCA9IGty YjVfcmVhZF9tZXNzYWdlKGs1X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChrcmI1X3BvaW50ZXIpICZ0dHlmZCwgJnBuYW1lX2RhdGEpKSB7Ci0gICAgICAgIGNv bV9lcnIgKCJ1dS1zZXJ2ZXIiLCByZXR2YWwsICJyZWFkaW5nIHBuYW1lIik7Ci0gICAgICAgIHJl dHVybigtMSk7Ci0gICAgfQotICAgIC8qIGNsaWVudCBzZW5kcyBpdCBhbHJlYWR5IG51bGwtdGVy bWluYXRlZC4gKi8KLSAgICBpZiAoICFxdWlldCApCi0gICAgICAgIHByaW50ZiAoIlBlZXIgbmFt ZSBpcyBcIiVzXCIuXG4iLCBwbmFtZV9kYXRhLmRhdGEpOwotICAgIGNrc3RybmNweShzelVzZXJO YW1lQXV0aGVudGljYXRlZCxwbmFtZV9kYXRhLmRhdGEsVUlEQlVGTEVOKTsKLSAgICB2YWxpZFVz ZXIgPSBBVVRIX1ZBTElEOwotICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9L RVJCRVJPU19WNTsKLQotICAgIGlmIChyZXR2YWwgPSBrcmI1X3JlYWRfbWVzc2FnZShrNV9jb250 ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa3JiNV9wb2ludGVyKSAm dHR5ZmQsICZ0a3RfZGF0YSkpIHsKLSAgICAgICAgY29tX2VyciAoInV1LXNlcnZlciIsIHJldHZh bCwgInJlYWRpbmcgdGlja2V0IGRhdGEiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0K LSAgICBpZiAocmV0dmFsID0gazVfZ2V0X2NjYWNoZShrNV9jb250ZXh0LCZjYyxOVUxMKSkKLSAg ICB7Ci0gICAgICAgIGNvbV9lcnIoInV1LXNlcnZlciIsIHJldHZhbCwgImdldHRpbmcgY3JlZGVu dGlhbHMgY2FjaGUiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBtZW1zZXQg KChjaGFyKikmY3JlZHMsIDAsIHNpemVvZihjcmVkcykpOwotICAgIGlmIChyZXR2YWwgPSBrcmI1 X2NjX2dldF9wcmluY2lwYWwoazVfY29udGV4dCwgY2MsICZjcmVkcy5jbGllbnQpKQotICAgIHsK LSAgICAgICAgY29tX2VycigidXUtc2VydmVyIiwgcmV0dmFsLCAiZ2V0dGluZyBwcmluY2lwYWwg bmFtZSIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIGlmIChyZXR2YWwgPSBr cmI1X3BhcnNlX25hbWUoazVfY29udGV4dCwgcG5hbWVfZGF0YS5kYXRhLCAmY3JlZHMuc2VydmVy KSkKLSAgICB7Ci0gICAgICAgIGNvbV9lcnIoInV1LXNlcnZlciIsIHJldHZhbCwgInBhcnNpbmcg Y2xpZW50IG5hbWUiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgY3JlZHMuc2Vj b25kX3RpY2tldCA9IHRrdF9kYXRhOwotCi0gICAgaWYgKHJldHZhbCA9IGtyYjVfZ2V0X2NyZWRl bnRpYWxzKGs1X2NvbnRleHQsIEtSQjVfR0NfVVNFUl9VU0VSLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2MsICZjcmVkcywgJm5ld19jcmVkcykpCi0gICAgewotICAg ICAgICBjb21fZXJyKCJ1dS1zZXJ2ZXIiLCByZXR2YWwsICJnZXR0aW5nIHVzZXItdXNlciB0aWNr ZXQiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICAvKiBzZW5kIGEgdGlja2V0 L2F1dGhlbnRpY2F0b3IgdG8gdGhlIG90aGVyIHNpZGUsIHNvIGl0IGNhbiBnZXQgdGhlIGtleQot ICAgICAgIHdlJ3JlIHVzaW5nIGZvciB0aGUga3JiX3NhZmUgYmVsb3cuICovCi0KLSAgICBpZiAo cmV0dmFsID0ga3JiNV9hdXRoX2Nvbl9pbml0KGs1X2NvbnRleHQsICZhdXRoX2NvbnRleHQpKSB7 Ci0gICAgICAgIGNvbV9lcnIoInV1LXNlcnZlciIsIHJldHZhbCwgIm1ha2luZyBhdXRoX2NvbnRl eHQiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBpZiAocmV0dmFsID0ga3Ji NV9hdXRoX2Nvbl9zZXRmbGFncyhrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfQVVUSF9DT05URVhUX0RPX1NFUVVF TkNFKSkgewotICAgICAgICBjb21fZXJyKCJ1dS1zZXJ2ZXIiLCByZXR2YWwsICJpbml0aWFsaXpp bmcgdGhlIGF1dGhfY29udGV4dCBmbGFncyIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0K LQotICAgIGlmICgha3JiNV9kX25vX2FkZHJlc3NlcykgewotICAgICAgaWYgKHJldHZhbCA9IGty YjVfYXV0aF9jb25fZ2VuYWRkcnMoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LCB0dHlmZCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9BVVRIX0NPTlRFWFRfR0VORVJBVEVf TE9DQUxfRlVMTF9BRERSIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9B VVRIX0NPTlRFWFRfR0VORVJBVEVfUkVNT1RFX0ZVTExfQUREUikpIHsKLSAgICAgICAgY29tX2Vy cigidXUtc2VydmVyIiwgcmV0dmFsLCAiZ2VuZXJhdGluZyBhZGRycyBmb3IgYXV0aF9jb250ZXh0 Iik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJldHZh bCA9IGtyYjVfYXV0aF9jb25fc2V0dXNlcnVzZXJrZXkoazVfY29udGV4dCwgYXV0aF9jb250ZXh0 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfY3Jl ZHMtPmtleWJsb2NrKSkgewotICAgICAgICBjb21fZXJyKCJ1dS1zZXJ2ZXIiLCByZXR2YWwsICJz ZXR0aW5nIHVzZXJ1c2Vya2V5IGZvciBhdXRoY29udGV4dCIpOwotICAgICAgICByZXR1cm4oLTEp OwotICAgIH0KLQotICAgIGlmIChyZXR2YWwgPSBrcmI1X21rX3JlcV9leHRlbmRlZChrNV9jb250 ZXh0LCAmYXV0aF9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBUF9PUFRTX1VTRV9TRVNTSU9OX0tFWSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFQX09QVFNfTVVUVUFMX1JFUVVJUkVELAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLCBuZXdfY3JlZHMsICZtc2cpKSB7Ci0gICAgICAgIGNvbV9l cnIoInV1LXNlcnZlciIsIHJldHZhbCwgIm1ha2luZyBBUF9SRVEiKTsKLSAgICAgICAgcmV0dXJu KC0xKTsKLSAgICB9Ci0gICAgcmV0dmFsID0ga3JiNV93cml0ZV9tZXNzYWdlKGs1X2NvbnRleHQs IChrcmI1X3BvaW50ZXIpICZ0dHlmZCwgJm1zZyk7Ci0gICAgaWYgKHJldHZhbCkgewotICAgICAg ICBjb21fZXJyKCJ1dS1zZXJ2ZXIiLCByZXR2YWwsICJ3cml0aW5nIG1lc3NhZ2UgdG8gY2xpZW50 Iik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGtyYjVfZnJlZV9kYXRhX2NvbnRl bnRzKGs1X2NvbnRleHQsJm1zZyk7Ci0KLSAgICBtc2d0ZXh0LmRhdGEgPSAiS2VybWl0IGltcGxl bWVudHMgS2VyYmVyb3MgNSBVc2VyIHRvIFVzZXIiOwotICAgIG1zZ3RleHQubGVuZ3RoID0gc3Ry bGVuKG1zZ3RleHQuZGF0YSkrMTsKLQotICAgIGlmIChrNV91MnVfd3JpdGVfbXNnKGs1X2NvbnRl eHQsJm1zZ3RleHQpIDwgMCkKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmIChrNV91MnVf cmVhZF9tc2coazVfY29udGV4dCwmbXNnKSA8IDApCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAg ICBpZiAoIHN0cmNtcCgiQXMgZG8gSSEgOi0pIixtc2cuZGF0YSkgKQotICAgICAgICByZXR1cm4o LTEpOwotICAgIGtyYjVfZnJlZV9kYXRhX2NvbnRlbnRzKGs1X2NvbnRleHQsJm1zZyk7Ci0KLQot ICAgIHJldHVybigwKTsKLX0KLQotaW50Ci1rNV91MnVfcmVhZF9tc2coa3JiNV9jb250ZXh0IGNv bnRleHQsIGludCBmZCwga3JiNV9kYXRhICogbXNnKQotewotICAgIGludCByZXR2YWw7Ci0gICAg a3JiNV9kYXRhIHJlcGx5OwotCi0gICAgcmV0dmFsID0ga3JiNV9yZWFkX21lc3NhZ2UoY29udGV4 dCwgKGtyYjVfcG9pbnRlcikgJmZkLCAmcmVwbHkpOwotICAgIGlmIChyZXR2YWwpCi0gICAgewot ICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJyZWFkaW5nIHJlcGx5Iik7Ci0g ICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgaWYgKHJldHZhbCA9IGtyYjVfcmRfcHJp dihjb250ZXh0LCBhdXRoX2NvbnRleHQsICZyZXBseSwgbXNnLCBOVUxMKSkgewotICAgICAgICBj b21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJkZWNvZGluZyByZXBseSIpOwotICAgICAgICBy ZXR1cm4oLTEpOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotazVfdTJ1X3dyaXRl X21zZyhrcmI1X2NvbnRleHQgY29udGV4dCwgaW50IGZkLCBrcmI1X2RhdGEgKiBtc2d0ZXh0KQot ewotICAgIGludCByZXR2YWw7Ci0gICAga3JiNV9kYXRhIG1zZzsKLQotICAgIGlmIChyZXR2YWwg PSBrcmI1X21rX3ByaXYoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LCBtc2d0ZXh0LCAmbXNnLCBO VUxMKSkKLSAgICB7Ci0gICAgICAgIGNvbV9lcnIoInV1LXNlcnZlciIsIHJldHZhbCwgImVuY29k aW5nIG1lc3NhZ2UiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICByZXR2YWwg PSBrcmI1X3dyaXRlX21lc3NhZ2UoazVfY29udGV4dCwgKGtyYjVfcG9pbnRlcikgJmZkLCAmbXNn KTsKLSAgICBrcmI1X2ZyZWVfZGF0YV9jb250ZW50cyhrNV9jb250ZXh0LCZtc2cpOwotICAgIGlm IChyZXR2YWwpCi0gICAgewotICAgICAgICBjb21fZXJyKCJ1dS1zZXJ2ZXIiLCByZXR2YWwsICJ3 cml0aW5nIG1lc3NhZ2UiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgcmV0dXJu KDApOwotfQotCi1pbnQKLWtyYjVfdTJ1X2F2YWlsKGZkKQotICAgIGludCBmZDsKLXsKLSAgICBy ZXR1cm4obnN0b3JlZCk7Ci19Ci0KLWludAota3JiNV91MnVfcmVhZChmZCwgYnVmLCBsZW4pCi0g ICAgIGludCBmZDsKLSAgICAgcmVnaXN0ZXIgY2hhciAqYnVmOwotICAgICBpbnQgbGVuOwotewot ICAgIGludCBucmV0dXJuZWQgPSAwOwotICAgIGtyYjVfZGF0YSBtc2c7Ci0KLSAgICBkZWJ1ZyhG MTExLCJrcmI1X3UydV9yZWFkIiwibGVuIixsZW4pOwotCi0gICAgaWYgKCAhYnVmICkKLSAgICAg ICAgcmV0dXJuKDApOwotCi0gICAgaWYgKG5zdG9yZWQgPj0gbGVuKSB7Ci0gICAgICAgIG1lbWNw eShidWYsIHN0b3JlX3B0ciwgbGVuKTsgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgc3RvcmVf cHRyICs9IGxlbjsKLSAgICAgICAgbnN0b3JlZCAtPSBsZW47Ci0gICAgICAgIHJldHVybihsZW4p OwotICAgIH0gZWxzZSBpZiAobnN0b3JlZCkgewotICAgICAgICBtZW1jcHkoYnVmLCBzdG9yZV9w dHIsIG5zdG9yZWQpOyAgICAvKiBzYWZlICovCi0gICAgICAgIG5yZXR1cm5lZCArPSBuc3RvcmVk OwotICAgICAgICBidWYgKz0gbnN0b3JlZDsKLSAgICAgICAgbGVuIC09IG5zdG9yZWQ7Ci0gICAg ICAgIG5zdG9yZWQgPSAwOwotICAgIH0KLQotICAgIGlmIChrNV91MnVfcmVhZF9tc2coazVfY29u dGV4dCwgZmQsICZtc2cpIDwgMCkKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmICggbXNn Lmxlbmd0aCA8PSBsZW4gKSB7Ci0gICAgICAgIG1lbWNweShidWYsIG1zZy5kYXRhLCBtc2cubGVu Z3RoKTsKLSAgICAgICAgbnJldHVybmVkICs9IG1zZy5sZW5ndGg7Ci0gICAgICAgIG5zdG9yZWQg PSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1lbWNweShidWYsIG1zZy5kYXRhLCBsZW4pOwot ICAgICAgICBucmV0dXJuZWQgKz0gbGVuOwotCi0gICAgICAgIGlmICggbXNnLmxlbmd0aCAtIGxl biA8IHNpemVvZihzdG9yYWdlKSApIHsKLSAgICAgICAgICAgIHN0b3JlX3B0ciA9IHN0b3JhZ2U7 Ci0gICAgICAgICAgICBuc3RvcmVkID0gbXNnLmxlbmd0aCAtIGxlbjsKLSAgICAgICAgICAgIG1l bWNweShzdG9yYWdlLG1zZy5kYXRhK2xlbixuc3RvcmVkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgIG5zdG9yZWQgPSAwOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAg fQotICAgIH0KLSAgICByZXR1cm4obnJldHVybmVkKTsKLX0KLQotaW50Ci1rcmI1X3UydV93cml0 ZShmZCwgYnVmLCBsZW4pCi0gICAgIGludCBmZDsKLSAgICAgY2hhciAqYnVmOwotICAgICBpbnQg bGVuOwotewotICAgIGtyYjVfZGF0YSBtc2c7Ci0KLSAgICBtc2cubGVuZ3RoID0gbGVuOwotICAg IG1zZy5kYXRhID0gYnVmOwotCi0gICAgaWYgKCBrNV91MnVfd3JpdGVfbXNnKGs1X2NvbnRleHQs IGZkLCAmbXNnKSA8IDAgKQotICAgICAgICByZXR1cm4oLTEpOwotICAgIGVsc2UKLSAgICAgICAg cmV0dXJuKGxlbik7Ci19Ci0KLSNlbmRpZiAvKiBLUkI1X1UyVSAqLwotI2VuZGlmIC8qIENLX0tF UkJFUk9TICovCi0KLSNpZmRlZiBDS19GT1JXQVJEX1gKLS8qCi0KLUNvcHlyaWdodCAoYykgMTk4 OCAgWCBDb25zb3J0aXVtCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLW9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBk ZWFsCi1pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi10byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi1jb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMK LWZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 Ci0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IHNoYWxsIGJlIGluY2x1ZGVkIGluCi1hbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZSBTb2Z0d2FyZS4KLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLUlNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAot RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRQotWCBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgotQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KLUNP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJ TiBUSEUgU09GVFdBUkUuCi0KLUV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRo ZSBuYW1lIG9mIHRoZSBYIENvbnNvcnRpdW0gc2hhbGwgbm90IGJlCi11c2VkIGluIGFkdmVydGlz aW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGlu Z3MKLWluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24g ZnJvbSB0aGUgWCBDb25zb3J0aXVtLgotCi0qLwotLyogIE1vZGlmaWVkIGZvciBzdGFuZC1hbG9u ZSBjb21waWxpbmcgYnkKLSAqICBQZXRlciAnTHVuYScgUnVuZXN0aWcgPHBldGVyQHJ1bmVzdGln LmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0j aW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHRpbWUu aD4KLSNkZWZpbmUgVGltZV90IHRpbWVfdAotCi12b2lkCi1YYXVEaXNwb3NlQXV0aCAoYXV0aCkK LVhhdXRoICAgKmF1dGg7Ci17Ci0gICAgaWYgKGF1dGgpIHsKLSAgICAgICAgaWYgKGF1dGgtPmFk ZHJlc3MpICh2b2lkKSBmcmVlIChhdXRoLT5hZGRyZXNzKTsKLSAgICAgICAgaWYgKGF1dGgtPm51 bWJlcikgKHZvaWQpIGZyZWUgKGF1dGgtPm51bWJlcik7Ci0gICAgICAgIGlmIChhdXRoLT5uYW1l KSAodm9pZCkgZnJlZSAoYXV0aC0+bmFtZSk7Ci0gICAgICAgIGlmIChhdXRoLT5kYXRhKSB7Ci0g ICAgICAgICAgICAodm9pZCkgYnplcm8gKGF1dGgtPmRhdGEsIGF1dGgtPmRhdGFfbGVuZ3RoKTsK LSAgICAgICAgICAgICh2b2lkKSBmcmVlIChhdXRoLT5kYXRhKTsKLSAgICAgICAgfQotICAgICAg ICBmcmVlICgoY2hhciAqKSBhdXRoKTsKLSAgICB9Ci0gICAgcmV0dXJuOwotfQotCi1jaGFyICoK LVhhdUZpbGVOYW1lICgpCi17Ci0gICAgY2hhciAqc2xhc2hEb3RYYXV0aG9yaXR5ID0gIi8uWGF1 dGhvcml0eSI7Ci0gICAgY2hhciAgICAqbmFtZTsKLSAgICBzdGF0aWMgY2hhciAqYnVmPU5VTEw7 Ci0gICAgc3RhdGljIGludCAgYnNpemU9MDsKLSAgICBpbnQgICAgIHNpemUsIG5hbWVsZW47Ci0g ICAgZXh0ZXJuIGNoYXIgKiB0bl9md2R4X3hhdXRob3JpdHk7Ci0KLSAgICBpZiAoIHRuX2Z3ZHhf eGF1dGhvcml0eSApCi0gICAgICAgIHJldHVybih0bl9md2R4X3hhdXRob3JpdHkpOwotCi0gICAg aWYgKG5hbWUgPSBnZXRlbnYgKCJYQVVUSE9SSVRZIikpCi0gICAgICAgIHJldHVybihuYW1lKTsK LSAgICBuYW1lID0gemhvbWUoKTsKLSAgICBpZiAoICFuYW1lICkKLSAgICAgICAgcmV0dXJuKE5V TEwpOwotICAgIG5hbWVsZW4gPSBzdHJsZW4gKG5hbWUpOwotICAgIHNpemUgPSBuYW1lbGVuICsg c3RybGVuKHNsYXNoRG90WGF1dGhvcml0eSkgKyAxOwotICAgIGlmIChzaXplID4gYnNpemUpIHsK LSAgICAgICAgaWYgKGJ1ZikKLSAgICAgICAgICAgIGZyZWUgKGJ1Zik7Ci0gICAgICAgIGJ1ZiA9 IG1hbGxvYyAoKHVuc2lnbmVkKSBzaXplKTsKLSAgICAgICAgaWYgKCFidWYpCi0gICAgICAgICAg ICByZXR1cm4gMDsKLSAgICAgICAgYnNpemUgPSBzaXplOwotICAgIH0KLSAgICBja3N0cm5jcHkg KGJ1ZiwgbmFtZSwgYnNpemUpOwotICAgIGlmICggbmFtZVtuYW1lbGVuLTFdICE9ICcvJwotI2lm ZGVmIE9TMgotICAgICAgICAgJiYgbmFtZVtuYW1lbGVuLTFdICE9ICdcXCcKLSNlbmRpZiAvKiBP UzIgKi8KLSAgICAgICAgICkKLSAgICAgICAgY2tzdHJuY2F0IChidWYsIHNsYXNoRG90WGF1dGhv cml0eSwgYnNpemUpOwotICAgIGVsc2UKLSAgICAgICAgY2tzdHJuY2F0IChidWYsICZzbGFzaERv dFhhdXRob3JpdHlbMV0sIGJzaXplKTsKLSAgICByZXR1cm4oYnVmKTsKLX0KLQotc3RhdGljIGlu dAotYmluYXJ5RXF1YWwgKGEsIGIsIGxlbikKLXJlZ2lzdGVyIGNoYXIgICAqYSwgKmI7Ci1yZWdp c3RlciBpbnQgICAgbGVuOwotewotICAgIHdoaWxlIChsZW4tLSkKLSAgICAgICAgaWYgKCphKysg IT0gKmIrKykKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAxOwotfQotCi0jaWZu ZGVmIFJfT0sKLSNkZWZpbmUgUl9PSyAwNAotI2VuZGlmIC8qIFJfT0sgKi8KLQotWGF1dGggKgot WGF1R2V0QXV0aEJ5QWRkciAoZmFtaWx5LCBhZGRyZXNzX2xlbmd0aCwgYWRkcmVzcywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX2xlbmd0aCwgbnVtYmVyLAotICAgICAgICAgICAg ICAgICAgICAgICAgICBuYW1lX2xlbmd0aCwgbmFtZSkKLXVuc2lnbmVkIGludCAgICBmYW1pbHk7 Ci11bnNpZ25lZCBpbnQgICAgYWRkcmVzc19sZW5ndGg7Ci1jb25zdCBjaGFyICAgICAgKmFkZHJl c3M7Ci11bnNpZ25lZCBpbnQgICAgbnVtYmVyX2xlbmd0aDsKLWNvbnN0IGNoYXIgICAgICAqbnVt YmVyOwotdW5zaWduZWQgaW50ICAgIG5hbWVfbGVuZ3RoOwotY29uc3QgY2hhciAgICAgICpuYW1l OwotewotICAgIEZJTEUgICAgKmF1dGhfZmlsZTsKLSAgICBjaGFyICAgICphdXRoX25hbWU7Ci0g ICAgWGF1dGggICAqZW50cnk7Ci0KLSAgICBhdXRoX25hbWUgPSBYYXVGaWxlTmFtZSgpOwotICAg IGlmICghYXV0aF9uYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoYWNjZXNzIChhdXRo X25hbWUsIFJfT0spICE9IDApICAgICAgICAgIC8qIGNoZWNrcyBSRUFMIGlkICovCi0gICAgICAg IHJldHVybiAwOwotICAgIGF1dGhfZmlsZSA9IGZvcGVuIChhdXRoX25hbWUsICJyYiIpOwotICAg IGlmICghYXV0aF9maWxlKQotICAgICAgICByZXR1cm4gMDsKLSAgICBmb3IgKDs7KSB7Ci0gICAg ICAgIGVudHJ5ID0gWGF1UmVhZEF1dGggKGF1dGhfZmlsZSk7Ci0gICAgICAgIGlmICghZW50cnkp Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLyoKLSAgICAgICAgICogTWF0Y2ggd2hlbjoK LSAgICAgICAgICogICBlaXRoZXIgZmFtaWx5IG9yIGVudHJ5LT5mYW1pbHkgYXJlIEZhbWlseVdp bGQgb3IKLSAgICAgICAgICogICAgZmFtaWx5IGFuZCBlbnRyeS0+ZmFtaWx5IGFyZSB0aGUgc2Ft ZQotICAgICAgICAgKiAgYW5kCi0gICAgICAgICAqICAgZWl0aGVyIGFkZHJlc3Mgb3IgZW50cnkt PmFkZHJlc3MgYXJlIGVtcHR5IG9yCi0gICAgICAgICAqICAgIGFkZHJlc3MgYW5kIGVudHJ5LT5h ZGRyZXNzIGFyZSB0aGUgc2FtZQotICAgICAgICAgKiAgYW5kCi0gICAgICAgICAqICAgZWl0aGVy IG51bWJlciBvciBlbnRyeS0+bnVtYmVyIGFyZSBlbXB0eSBvcgotICAgICAgICAgKiAgICBudW1i ZXIgYW5kIGVudHJ5LT5udW1iZXIgYXJlIHRoZSBzYW1lCi0gICAgICAgICAqICBhbmQKLSAgICAg ICAgICogICBlaXRoZXIgbmFtZSBvciBlbnRyeS0+bmFtZSBhcmUgZW1wdHkgb3IKLSAgICAgICAg ICogICAgbmFtZSBhbmQgZW50cnktPm5hbWUgYXJlIHRoZSBzYW1lCi0gICAgICAgICAqLwotCi0v KiAgICAgIGlmICgoZmFtaWx5ID09IEZhbWlseVdpbGQgfHwgZW50cnktPmZhbWlseSA9PSBGYW1p bHlXaWxkIHx8Ci0gICAgICAgICAgICAgKGVudHJ5LT5mYW1pbHkgPT0gZmFtaWx5ICYmCi0gICAg ICAgICAgICAgIGFkZHJlc3NfbGVuZ3RoID09IGVudHJ5LT5hZGRyZXNzX2xlbmd0aCAmJgotICAg ICAgICAgICAgICBiaW5hcnlFcXVhbCAoZW50cnktPmFkZHJlc3MsIGFkZHJlc3MsIChpbnQpYWRk cmVzc19sZW5ndGgpKSkgJiYKLSAgICAgICAgICAgIChudW1iZXJfbGVuZ3RoID09IDAgfHwgZW50 cnktPm51bWJlcl9sZW5ndGggPT0gMCB8fAotICAgICAgICAgICAgIChudW1iZXJfbGVuZ3RoID09 IGVudHJ5LT5udW1iZXJfbGVuZ3RoICYmCi0gICAgICAgICAgICAgIGJpbmFyeUVxdWFsIChlbnRy eS0+bnVtYmVyLCBudW1iZXIsIChpbnQpbnVtYmVyX2xlbmd0aCkpKSAmJgotICAgICAgICAgICAg KG5hbWVfbGVuZ3RoID09IDAgfHwgZW50cnktPm5hbWVfbGVuZ3RoID09IDAgfHwKLSAgICAgICAg ICAgICAoZW50cnktPm5hbWVfbGVuZ3RoID09IG5hbWVfbGVuZ3RoICYmCi0gICAgICAgICAgICAg IGJpbmFyeUVxdWFsIChlbnRyeS0+bmFtZSwgbmFtZSwgKGludCluYW1lX2xlbmd0aCkpKSkgKi8K LSAgICAgICAgLyogdGhlIG9yaWdpbmFsIG1hdGNoaW5nIGNvZGUgYWJvdmUgZG9lc24ndCBzZWVt IHRvIG1lZXQgdGhlIG1hdGNoaW5nCi0gICAgICAgICAqIGFsZ29yaXRobSwgaXQgZG9lc24ndCBj aGVjayBpZiAiYWRkcmVzc19sZW5ndGggPT0gMCB8fAotICAgICAgICAgKiBlbnRyeS0+YWRkcmVz c19sZW5ndGggPT0gMCIuIC8gTHVuYSAyMDAwLTAyLTA5Ci0gICAgICAgICAqLwotICAgICAgICBp ZiAoKGZhbWlseSA9PSBGYW1pbHlXaWxkIHx8IGVudHJ5LT5mYW1pbHkgPT0gRmFtaWx5V2lsZCB8 fAotICAgICAgICAgICAgICBlbnRyeS0+ZmFtaWx5ID09IGZhbWlseSkgJiYKLSAgICAgICAgICAg IChhZGRyZXNzX2xlbmd0aCA9PSAwIHx8IGVudHJ5LT5hZGRyZXNzX2xlbmd0aCA9PSAwIHx8Ci0g ICAgICAgICAgICAgIChhZGRyZXNzX2xlbmd0aCA9PSBlbnRyeS0+YWRkcmVzc19sZW5ndGggJiYK LSAgICAgICAgICAgICAgYmluYXJ5RXF1YWwgKGVudHJ5LT5hZGRyZXNzLCBhZGRyZXNzLCAoaW50 KWFkZHJlc3NfbGVuZ3RoKSkpICYmCi0gICAgICAgICAgICAobnVtYmVyX2xlbmd0aCA9PSAwIHx8 IGVudHJ5LT5udW1iZXJfbGVuZ3RoID09IDAgfHwKLSAgICAgICAgICAgICAobnVtYmVyX2xlbmd0 aCA9PSBlbnRyeS0+bnVtYmVyX2xlbmd0aCAmJgotICAgICAgICAgICAgICBiaW5hcnlFcXVhbCAo ZW50cnktPm51bWJlciwgbnVtYmVyLCAoaW50KW51bWJlcl9sZW5ndGgpKSkgJiYKLSAgICAgICAg ICAgIChuYW1lX2xlbmd0aCA9PSAwIHx8IGVudHJ5LT5uYW1lX2xlbmd0aCA9PSAwIHx8Ci0gICAg ICAgICAgICAgKGVudHJ5LT5uYW1lX2xlbmd0aCA9PSBuYW1lX2xlbmd0aCAmJgotICAgICAgICAg ICAgICBiaW5hcnlFcXVhbCAoZW50cnktPm5hbWUsIG5hbWUsIChpbnQpbmFtZV9sZW5ndGgpKSkp Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgWGF1RGlzcG9zZUF1dGggKGVudHJ5KTsKLSAg ICB9Ci0gICAgKHZvaWQpIGZjbG9zZSAoYXV0aF9maWxlKTsKLSAgICByZXR1cm4gZW50cnk7Ci19 Ci0KLXN0YXRpYyBpbnQKLXJlYWRfc2hvcnQgKHNob3J0cCwgZmlsZSkKLXVuc2lnbmVkIHNob3J0 ICAqc2hvcnRwOwotRklMRSAgICAgICAgICAgICpmaWxlOwotewotICAgIHVuc2lnbmVkIGNoYXIg ICBmaWxlX3Nob3J0WzJdOwotCi0gICAgaWYgKGZyZWFkICgoY2hhciAqKSBmaWxlX3Nob3J0LCAo aW50KSBzaXplb2YgKGZpbGVfc2hvcnQpLCAxLCBmaWxlKSAhPSAxKQotICAgICAgICByZXR1cm4g MDsKLSAgICAqc2hvcnRwID0gZmlsZV9zaG9ydFswXSAqIDI1NiArIGZpbGVfc2hvcnRbMV07Ci0g ICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQKLXJlYWRfY291bnRlZF9zdHJpbmcgKGNvdW50 cCwgc3RyaW5ncCwgZmlsZSkKLXVuc2lnbmVkIHNob3J0ICAqY291bnRwOwotY2hhciAgICAqKnN0 cmluZ3A7Ci1GSUxFICAgICpmaWxlOwotewotICAgIHVuc2lnbmVkIHNob3J0ICBsZW47Ci0gICAg Y2hhciAgICAgICAgICAgICpkYXRhOwotCi0gICAgaWYgKHJlYWRfc2hvcnQgKCZsZW4sIGZpbGUp ID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChsZW4gPT0gMCkgewotICAgICAgICBk YXRhID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBkYXRhID0gbWFsbG9jICgodW5zaWduZWQp IGxlbik7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg ICBpZiAoZnJlYWQgKGRhdGEsIChpbnQpIHNpemVvZiAoY2hhciksIChpbnQpIGxlbiwgZmlsZSkg IT0gbGVuKSB7Ci0gICAgICAgICAgICBiemVybyAoZGF0YSwgbGVuKTsKLSAgICAgICAgICAgIGZy ZWUgKGRhdGEpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg KnN0cmluZ3AgPSBkYXRhOwotICAgICpjb3VudHAgPSBsZW47Ci0gICAgcmV0dXJuIDE7Ci19Ci0K LVhhdXRoICoKLVhhdVJlYWRBdXRoIChhdXRoX2ZpbGUpCi1GSUxFICAgICphdXRoX2ZpbGU7Ci17 Ci0gICAgWGF1dGggICBsb2NhbDsKLSAgICBYYXV0aCAgICpyZXQ7Ci0KLSAgICBpZiAocmVhZF9z aG9ydCAoJmxvY2FsLmZhbWlseSwgYXV0aF9maWxlKSA9PSAwKQotICAgICAgICByZXR1cm4gMDsK LSAgICBpZiAocmVhZF9jb3VudGVkX3N0cmluZyAoJmxvY2FsLmFkZHJlc3NfbGVuZ3RoLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYWwuYWRkcmVzcywgYXV0aF9maWxlKSA9PSAw KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAocmVhZF9jb3VudGVkX3N0cmluZyAoJmxvY2Fs Lm51bWJlcl9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsb2NhbC5udW1i ZXIsIGF1dGhfZmlsZSkgPT0gMCkgewotICAgICAgICBpZiAobG9jYWwuYWRkcmVzcykgZnJlZSAo bG9jYWwuYWRkcmVzcyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAocmVhZF9j b3VudGVkX3N0cmluZyAoJmxvY2FsLm5hbWVfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmbG9jYWwubmFtZSwgYXV0aF9maWxlKSA9PSAwKSB7Ci0gICAgICAgIGlmIChsb2Nh bC5hZGRyZXNzKSBmcmVlIChsb2NhbC5hZGRyZXNzKTsKLSAgICAgICAgaWYgKGxvY2FsLm51bWJl cikgZnJlZSAobG9jYWwubnVtYmVyKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlm IChyZWFkX2NvdW50ZWRfc3RyaW5nICgmbG9jYWwuZGF0YV9sZW5ndGgsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZsb2NhbC5kYXRhLCBhdXRoX2ZpbGUpID09IDApIHsKLSAgICAgICAg aWYgKGxvY2FsLmFkZHJlc3MpIGZyZWUgKGxvY2FsLmFkZHJlc3MpOwotICAgICAgICBpZiAobG9j YWwubnVtYmVyKSBmcmVlIChsb2NhbC5udW1iZXIpOwotICAgICAgICBpZiAobG9jYWwubmFtZSkg ZnJlZSAobG9jYWwubmFtZSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXQgPSAo WGF1dGggKikgbWFsbG9jIChzaXplb2YgKFhhdXRoKSk7Ci0gICAgaWYgKCFyZXQpIHsKLSAgICAg ICAgaWYgKGxvY2FsLmFkZHJlc3MpIGZyZWUgKGxvY2FsLmFkZHJlc3MpOwotICAgICAgICBpZiAo bG9jYWwubnVtYmVyKSBmcmVlIChsb2NhbC5udW1iZXIpOwotICAgICAgICBpZiAobG9jYWwubmFt ZSkgZnJlZSAobG9jYWwubmFtZSk7Ci0gICAgICAgIGlmIChsb2NhbC5kYXRhKSB7Ci0gICAgICAg ICAgICBiemVybyAobG9jYWwuZGF0YSwgbG9jYWwuZGF0YV9sZW5ndGgpOwotICAgICAgICAgICAg ZnJlZSAobG9jYWwuZGF0YSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot ICAgICpyZXQgPSBsb2NhbDsKLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci13cml0 ZV9zaG9ydCAocywgZmlsZSkKLXVuc2lnbmVkIHNob3J0ICBzOwotRklMRSAgICAgICAgICAgICpm aWxlOwotewotICAgIHVuc2lnbmVkIGNoYXIgICBmaWxlX3Nob3J0WzJdOwotCi0gICAgZmlsZV9z aG9ydFswXSA9IChzICYgKHVuc2lnbmVkKTB4ZmYwMCkgPj4gODsKLSAgICBmaWxlX3Nob3J0WzFd ID0gcyAmIDB4ZmY7Ci0gICAgaWYgKGZ3cml0ZSAoKGNoYXIgKikgZmlsZV9zaG9ydCwgKGludCkg c2l6ZW9mIChmaWxlX3Nob3J0KSwgMSwgZmlsZSkgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g ICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQKLXdyaXRlX2NvdW50ZWRfc3RyaW5nIChjb3Vu dCwgc3RyaW5nLCBmaWxlKQotdW5zaWduZWQgc2hvcnQgIGNvdW50OwotY2hhciAgICAqc3RyaW5n OwotRklMRSAgICAqZmlsZTsKLXsKLSAgICBpZiAod3JpdGVfc2hvcnQgKGNvdW50LCBmaWxlKSA9 PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoZndyaXRlIChzdHJpbmcsIChpbnQpIHNp emVvZiAoY2hhciksIChpbnQpIGNvdW50LCBmaWxlKSAhPSBjb3VudCkKLSAgICAgICAgcmV0dXJu IDA7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLWludAotWGF1V3JpdGVBdXRoIChhdXRoX2ZpbGUsIGF1 dGgpCi1GSUxFICAgICphdXRoX2ZpbGU7Ci1YYXV0aCAgICphdXRoOwotewotICAgIGlmICh3cml0 ZV9zaG9ydCAoYXV0aC0+ZmFtaWx5LCBhdXRoX2ZpbGUpID09IDApCi0gICAgICAgIHJldHVybiAw OwotICAgIGlmICh3cml0ZV9jb3VudGVkX3N0cmluZyAoYXV0aC0+YWRkcmVzc19sZW5ndGgsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoLT5hZGRyZXNzLCBhdXRoX2ZpbGUpID09 IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICh3cml0ZV9jb3VudGVkX3N0cmluZyAoYXV0 aC0+bnVtYmVyX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGgtPm51 bWJlciwgYXV0aF9maWxlKSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAod3JpdGVf Y291bnRlZF9zdHJpbmcgKGF1dGgtPm5hbWVfbGVuZ3RoLCBhdXRoLT5uYW1lLCBhdXRoX2ZpbGUp ID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICh3cml0ZV9jb3VudGVkX3N0cmluZyAo YXV0aC0+ZGF0YV9sZW5ndGgsIGF1dGgtPmRhdGEsIGF1dGhfZmlsZSkgPT0gMCkKLSAgICAgICAg cmV0dXJuIDA7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLSNpZmRlZiBLUkI1Ci0jaWZkZWYgSzVfWEFV VEgKLS8qCi0gKiBmdW5jdGlvbnMgdG8gZW5jb2RlL2RlY29kZSBLZXJiZXJvcyBWNSBwcmluY2lw YWxzCi0gKiBpbnRvIHNvbWV0aGluZyB0aGF0IGNhbiBiZSByZWFzb25hYmxlIHNwZXdlZCBvdmVy Ci0gKiB0aGUgd2lyZQotICoKLSAqIEF1dGhvcjogVG9tIFl1IDx0bHl1QE1JVC5FRFU+Ci0gKgot ICogU3RpbGwgbmVlZHMgdG8gYmUgZml4ZWQgdXAgd3J0IHNpZ25lZC91bnNpZ25lZCBsZW5ndGhz LCBidXQgd2UnbGwgd29ycnkKLSAqIGFib3V0IHRoYXQgbGF0ZXIuCi0gKi8KLQotLyoKLSAqIFhh dUtyYjVFbmNvZGUKLSAqCi0gKiB0aGlzIGZ1bmN0aW9uIGVuY29kZXMgdGhlIHByaW5jaXBhbCBw YXNzZWQgdG8gaXQgaW4gYSBmb3JtYXQgdGhhdCBjYW4KLSAqIGVhc2lseSBiZSBkZWFsdCB3aXRo IGJ5IHN0dWZmaW5nIGl0IGludG8gYW4gWCBwYWNrZXQuICBFbmNvZGluZyBpcyBhcwotICogZm9s bG93czoKLSAqICAgbGVuZ3RoIGNvdW50IG9mIHRoZSByZWFsbSBuYW1lCi0gKiAgIHJlYWxtCi0g KiAgIGNvbXBvbmVudCBjb3VudAotICogICBsZW5ndGggb2YgY29tcG9uZW50Ci0gKiAgIGFjdHVh bCBwcmluY2lwYWwgY29tcG9uZW50Ci0gKiAgIGV0Yy4uLi4KLSAqCi0gKiBOb3RlIHRoYXQgdGhp cyBmdW5jdGlvbiBhbGxvY2F0ZXMgYSBodW5rIG9mIG1lbW9yeSwgd2hpY2ggbXVzdCBiZQotICog ZnJlZWQgdG8gYXZvaWQgbmFzdHkgbWVtb3J5IGxlYWsgdHlwZSB0aGluZ3MuICBBbGwgY291bnRz IGFyZQotICogYnl0ZS1zd2FwcGVkIGlmIG5lZWRlZC4gKGV4Y2VwdCBmb3IgdGhlIHRvdGFsIGxl bmd0aCByZXR1cm5lZCkKLSAqCi0gKiBuZXZlcm1pbmQuLi4uIHN0dWZmaW5nIHRoZSBlbmNvZGVk IHBhY2tldCBpbiBuZXQgYnl0ZSBvcmRlciBqdXN0IHRvCi0gKiBhbHdheXMgZG8gdGhlIHJpZ2h0 IHRoaW5nLiAgRG9uJ3QgaGF2ZSB0byBmcm9iIHdpdGggYWxpZ25tZW50IHRoYXQgd2F5LgotICov Ci1pbnQKLVhhdUtyYjVFbmNvZGUocHJpbmMsIG91dGJ1ZikKLSAgICBrcmI1X3ByaW5jaXBhbCBw cmluYzsgICAgICAgLyogcHJpbmNpcGFsIHRvIGVuY29kZSAqLwotICAgIGtyYjVfZGF0YSAqb3V0 YnVmOyAgICAgICAgICAvKiBvdXRwdXQgYnVmZmVyICovCi17Ci0gICAgQ0FSRDE2IGksIG51bXBh cnRzLCB0b3RsZW4gPSAwLCBwbGVuLCBybGVuOwotICAgIGNoYXIgKmNwLCAqcGRhdGE7Ci0KLSAg ICBybGVuID0ga3JiNV9wcmluY19yZWFsbShwcmluYyktPmxlbmd0aDsKLSAgICBudW1wYXJ0cyA9 IGtyYjVfcHJpbmNfc2l6ZShwcmluYyk7Ci0gICAgdG90bGVuID0gMiArIHJsZW4gKyAyOyAgICAg IC8qIGluY2x1ZGUgcm9vbSBmb3IgcmVhbG0gbGVuZ3RoCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFuZCBjb21wb25lbnQgY291bnQgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwg bnVtcGFydHM7IGkrKykKLSAgICAgICAgdG90bGVuICs9IGtyYjVfcHJpbmNfY29tcG9uZW50KHBy aW5jLCBpKS0+bGVuZ3RoICsgMjsKLSAgICAvKiBhZGQgMiBieXRlcyBlYWNoIHRpbWUgZm9yIGxl bmd0aCAqLwotICAgIGlmICgob3V0YnVmLT5kYXRhID0gKGNoYXIgKiltYWxsb2ModG90bGVuKSkg PT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGNwID0gb3V0YnVmLT5kYXRhOwotICAg ICpjcCsrID0gKGNoYXIpKChpbnQpKDB4ZmYwMCAmIHJsZW4pID4+IDgpOwotICAgICpjcCsrID0g KGNoYXIpKDB4MDBmZiAmIHJsZW4pOwotICAgIG1lbWNweShjcCwga3JiNV9wcmluY19yZWFsbShw cmluYyktPmRhdGEsIHJsZW4pOyAgICAvKiBzYWZlICovCi0gICAgY3AgKz0gcmxlbjsKLSAgICAq Y3ArKyA9IChjaGFyKSgoaW50KSgweGZmMDAgJiBudW1wYXJ0cykgPj4gOCk7Ci0gICAgKmNwKysg PSAoY2hhcikoMHgwMGZmICYgbnVtcGFydHMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBudW1wYXJ0 czsgaSsrKQotICAgIHsKLSAgICAgICAgcGxlbiA9IGtyYjVfcHJpbmNfY29tcG9uZW50KHByaW5j LCBpKS0+bGVuZ3RoOwotICAgICAgICBwZGF0YSA9IGtyYjVfcHJpbmNfY29tcG9uZW50KHByaW5j LCBpKS0+ZGF0YTsKLSAgICAgICAgKmNwKysgPSAoY2hhcikoKGludCkoMHhmZjAwICYgcGxlbikg Pj4gOCk7Ci0gICAgICAgICpjcCsrID0gKGNoYXIpKDB4MDBmZiAmIHBsZW4pOwotICAgICAgICBt ZW1jcHkoY3AsIHBkYXRhLCBwbGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzYWZlICov Ci0gICAgICAgIGNwICs9IHBsZW47Ci0gICAgfQotICAgIG91dGJ1Zi0+bGVuZ3RoID0gdG90bGVu OwotICAgIHJldHVybiAwOwotfQotCi0vKgotICogWGF1S3JiNURlY29kZQotICoKLSAqIFRoaXMg ZnVuY3Rpb24gZXNzZW50aWFsbHkgcmV2ZXJzZXMgd2hhdCBYYXVLcmI1RW5jb2RlIGRvZXMuCi0g KiByZXR1cm4gdmFsdWU6IDAgaWYgb2theSwgLTEgaWYgbWFsbG9jIGZhaWxzLCAtMiBpZiBpbmJ1 ZiBmb3JtYXQgYmFkCi0gKi8KLWludAotWGF1S3JiNURlY29kZShpbmJ1ZiwgcHJpbmMpCi0gICAg a3JiNV9kYXRhIGluYnVmOwotICAgIGtyYjVfcHJpbmNpcGFsICpwcmluYzsKLXsKLSAgICBDQVJE MTYgaSwgbnVtcGFydHMsIHBsZW4sIHJsZW47Ci0gICAgQ0FSRDggKmNwLCAqcGRhdGE7Ci0KLSAg ICBpZiAoaW5idWYubGVuZ3RoIDwgNCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAtMjsKLSAgICB9 Ci0gICAgKnByaW5jID0gKGtyYjVfcHJpbmNpcGFsKW1hbGxvYyhzaXplb2YgKGtyYjVfcHJpbmNp cGFsX2RhdGEpKTsKLSAgICBpZiAoKnByaW5jID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsK LSAgICBiemVybygqcHJpbmMsIHNpemVvZiAoa3JiNV9wcmluY2lwYWxfZGF0YSkpOwotICAgIGNw ID0gKENBUkQ4ICopaW5idWYuZGF0YTsKLSAgICBybGVuID0gKmNwKysgPDwgODsKLSAgICBybGVu IHw9ICpjcCsrOwotICAgIGlmIChpbmJ1Zi5sZW5ndGggPCA0ICsgKGludClybGVuICsgMikKLSAg ICB7Ci0gICAgICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoKnByaW5jKTsKLSAgICAgICAgcmV0dXJu IC0yOwotICAgIH0KLSAgICBrcmI1X3ByaW5jX3JlYWxtKCpwcmluYyktPmRhdGEgPSAoY2hhciAq KW1hbGxvYyhybGVuKTsKLSAgICBpZiAoa3JiNV9wcmluY19yZWFsbSgqcHJpbmMpLT5kYXRhID09 IE5VTEwpCi0gICAgewotICAgICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKCpwcmluYyk7Ci0gICAg ICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAga3JiNV9wcmluY19yZWFsbSgqcHJpbmMpLT5sZW5n dGggPSBybGVuOwotICAgIG1lbWNweShrcmI1X3ByaW5jX3JlYWxtKCpwcmluYyktPmRhdGEsIGNw LCBybGVuKTsgICAvKiBzYWZlICovCi0gICAgY3AgKz0gcmxlbjsKLSAgICBudW1wYXJ0cyA9ICpj cCsrIDw8IDg7Ci0gICAgbnVtcGFydHMgfD0gKmNwKys7Ci0gICAga3JiNV9wcmluY19uYW1lKCpw cmluYykgPQotICAgICAgICAoa3JiNV9kYXRhICopbWFsbG9jKG51bXBhcnRzICogc2l6ZW9mIChr cmI1X2RhdGEpKTsKLSAgICBpZiAoa3JiNV9wcmluY19uYW1lKCpwcmluYykgPT0gTlVMTCkKLSAg ICB7Ci0gICAgICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoKnByaW5jKTsKLSAgICAgICAgcmV0dXJu IC0xOwotICAgIH0KLSAgICBrcmI1X3ByaW5jX3NpemUoKnByaW5jKSA9IDA7Ci0gICAgZm9yIChp ID0gMDsgaSA8IG51bXBhcnRzOyBpKyspCi0gICAgewotICAgICAgICBpZiAoY3AgKyAyID4gKENB UkQ4ICopaW5idWYuZGF0YSArIGluYnVmLmxlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAg a3JiNV9mcmVlX3ByaW5jaXBhbCgqcHJpbmMpOwotICAgICAgICAgICAgcmV0dXJuIC0yOwotICAg ICAgICB9Ci0gICAgICAgIHBsZW4gPSAqY3ArKyA8PCA4OwotICAgICAgICBwbGVuIHw9ICpjcCsr OwotICAgICAgICBpZiAoY3AgKyBwbGVuID4gKENBUkQ4ICopaW5idWYuZGF0YSArIGluYnVmLmxl bmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAga3JiNV9mcmVlX3ByaW5jaXBhbCgqcHJpbmMp OwotICAgICAgICAgICAgcmV0dXJuIC0yOwotICAgICAgICB9Ci0gICAgICAgIHBkYXRhID0gKENB UkQ4ICopbWFsbG9jKHBsZW4pOwotICAgICAgICBpZiAocGRhdGEgPT0gTlVMTCkKLSAgICAgICAg ewotICAgICAgICAgICAga3JiNV9mcmVlX3ByaW5jaXBhbCgqcHJpbmMpOwotICAgICAgICAgICAg cmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGtyYjVfcHJpbmNfY29tcG9uZW50KCpwcmlu YywgaSktPmRhdGEgPSAoY2hhciAqKXBkYXRhOwotICAgICAgICBrcmI1X3ByaW5jX2NvbXBvbmVu dCgqcHJpbmMsIGkpLT5sZW5ndGggPSBwbGVuOwotICAgICAgICBtZW1jcHkocGRhdGEsIGNwLCBw bGVuKTsgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgY3AgKz0gcGxlbjsKLSAgICAgICAga3Ji NV9wcmluY19zaXplKCpwcmluYykrKzsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYg LyogSzVfWEFVVEggKi8KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tfRk9SV0FSRF9Y ICovCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotLyogQyBLIF8gQSBVIFQgSCBf IEkgTiBJIFQKLSAqIEluaXRpYWxpemUgdGhlIEtlcmJlcm9zIHN5c3RlbSBmb3IgYSBwZW5kaW5n IGNvbm5lY3Rpb24KLSAqICAgaG9zdG5hbWUgLSBhIHJldmVyc2UgRE5TIGxvb2t1cCBvZiB0aGUg aG9zdG5hbWUgd2hlbiBwb3NzaWJsZQotICogICBpcGFkZHIgICAtIHRoZSBpcCBhZGRyZXNzIG9m IHRoZSBob3N0Ci0gKiAgIHVzZXJuYW1lIC0gdGhlIG5hbWUgdGhlIHVzZXIgd2FudHMgdG8gY29u bmVjdCB1bmRlciBub3QgbmVjZXNzYXJpbHkKLSAqICAgICAgICAgICAgICB0aGUgc2FtZSBhcyBw cmluY2lwYWwKLSAqICAgc29ja2V0ICAgLSB0aGUgc29ja2V0IGhhbmRsZSAodHR5ZmQgaW4gS2Vy bWl0IHNwZWFrKQotICoKLSAqIFJldHVybnM6IDEgb24gc3VjY2VzcyBhbmQgMCBvbiBmYWlsdXJl Ci0gKi8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrX2F1dGhfaW5pdCggY2hhciAqIGhvc3Ru YW1lLCBjaGFyICogaXBhZGRyLCBjaGFyICogdXNlcm5hbWUsIGludCBzb2NrZXQgKQotI2Vsc2Ug LyogQ0tfQU5TSUMgKi8KLWNrX2F1dGhfaW5pdCggaG9zdG5hbWUsIGlwYWRkciwgdXNlcm5hbWUs IHNvY2tldCApCi0gICAgY2hhciAqIGhvc3RuYW1lOyBjaGFyICogaXBhZGRyOyBjaGFyICp1c2Vy bmFtZTsgaW50IHNvY2tldDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotI2lmZGVmIENLX0FV VEhFTlRJQ0FUSU9OCi0jaWZkZWYgT1MyCi0gICAgaWYgKCAhY2tfc2VjdXJpdHlfbG9hZGRsbCgp ICkgewotICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5f TkdfUkY7Ci0gICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFRO X05HX1JGOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotI2Vu ZGlmIC8qIENLX0FVVEhFTlRJQ0FJVE9OICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIGlm ICggISFja19jcnlwdF9pc19pbnN0YWxsZWQoKSApIHsKLSAgICAgICAgVEVMT1BUX01FX01PREUo VEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0gICAgICAgIFRFTE9QVF9VX01PREUoVEVM T1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0gICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJ T04gKi8KLQotICAgIGlmICghaG9zdG5hbWUpIGhvc3RuYW1lID0gIiI7Ci0gICAgaWYgKCFpcGFk ZHIpIGlwYWRkciA9ICIiOwotICAgIGlmICghdXNlcm5hbWUpIHVzZXJuYW1lID0gIiI7Ci0KLSAg ICBkZWJ1ZyhGMTEwLCJja19hdXRoX2luaXQgVXNlcm5hbWUiLHVzZXJuYW1lLDApOwotICAgIGRl YnVnKEYxMTAsImNrX2F1dGhfaW5pdCBIb3N0bmFtZSIsaG9zdG5hbWUsMCk7Ci0gICAgZGVidWco RjExMCwiY2tfYXV0aF9pbml0IElwYWRkciIsaXBhZGRyLDApOwotCi0gICAgY2tzdHJuY3B5KCBz elVzZXJOYW1lLCB1c2VybmFtZSwgVUlEQlVGTEVOICk7Ci0gICAgY2tzdHJuY3B5KCBzekhvc3RO YW1lLCBob3N0bmFtZSwgVUlEQlVGTEVOICk7Ci0gICAgY2tzdHJuY3B5KCBzeklQLCBpcGFkZHIs IDE2ICk7Ci0gICAgc3pVc2VyTmFtZVJlcXVlc3RlZFswXSA9ICdcMCc7Ci0gICAgc3pVc2VyTmFt ZUF1dGhlbnRpY2F0ZWRbMF0gPSAnXDAnOwotICAgIHZhbGlkVXNlciA9IEFVVEhfUkVKRUNUOwot ICAgIGFjY2VwdF9jb21wbGV0ZSA9IDA7Ci0gICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFV VEhUWVBFX05VTEw7Ci0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgIGF1dGhfaG93ID0g MDsKLSAgICBhdXRoX2NyeXB0ID0gMDsKLSAgICBhdXRoX2Z3ZCA9IDA7Ci0gICAgbXV0dWFsX2Nv bXBsZXRlID0gMDsKLSAgICBpZiAoIHNzdGVsbmV0ICkKLSAgICAgICAgc3RyX2RhdGFbM10gPSBU RUxRVUFMX1JFUExZOwotICAgIGVsc2UKLSAgICAgICAgc3RyX2RhdGFbM10gPSBURUxRVUFMX0lT OwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0KLSNpZmRlZiBDS19TUlAKLSAgICBz cnBfd2FpdHJlc3AgPSAwOwotI2VuZGlmIC8qIFNSUCAqLwotCi0jaWZkZWYgQ0tfS0VSQkVST1MK LSNpZmRlZiBLUkI1Ci0gICAgLyogZnJlZSBwcmV2aW91cyByZXRfY3JlZCAgKi8KLSAgICBpZiAo IHJldF9jcmVkICkgewotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSNpZmRlZiBIRUlNREFMCi0gICAg ICAgIGlmICggazVfc2Vzc2lvbl9rZXkgPT0gJnJldF9jcmVkLT5zZXNzaW9uKQotICAgICAgICAg ICAgazVfc2Vzc2lvbl9rZXkgPSBOVUxMOwotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgICAgICBp ZiAoIGs1X3Nlc3Npb25fa2V5ID09ICZyZXRfY3JlZC0+a2V5YmxvY2spCi0gICAgICAgICAgICBr NV9zZXNzaW9uX2tleSA9IE5VTEw7Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotI2VuZGlmIC8qIENL X0VOQ1JZUFRJT04gKi8KLSAgICAgICAga3JiNV9mcmVlX2NyZWRzKGs1X2NvbnRleHQsIHJldF9j cmVkKTsKLSAgICAgICAgcmV0X2NyZWQgPSBOVUxMOwotICAgIH0KLSAgICBpZiAoazVfdGlja2V0 KSB7Ci0gICAgICAgIGtyYjVfZnJlZV90aWNrZXQoazVfY29udGV4dCwgazVfdGlja2V0KTsKLSAg ICAgICAgazVfdGlja2V0ID0gTlVMTDsKLSAgICB9Ci0gICAgLyogYW5kIGNvbnRleHQgKi8KLSAg ICBpZiAoIGs1X2NvbnRleHQgKSB7Ci0gICAgICAgIGtyYjVfZnJlZV9jb250ZXh0KGs1X2NvbnRl eHQpOwotICAgICAgICBrNV9jb250ZXh0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICAvKiBjcmVhdGUg azVfY29udGV4dCAqLwotICAgIGtyYjVfaW5pdF9jb250ZXh0KCZrNV9jb250ZXh0KTsKLSNpZm5k ZWYgTUlUX0NVUlJFTlQKLSNpZm5kZWYgTk9fS1JCNV9JTklUX0VUUwotLyogVGhpcyByb3V0aW5l IGlzIGEgbm8tb3AgaW4gS2VyYmVyb3MgMS40LnggYW5kIGxhdGVyICovCi0vKiBhbmQgaW4gc29t ZSBpbnN0YWxsYXRpb25zIGl0IGNhbid0IGJlIGZvdW5kIGluIHdoaWNoIGNhc2UgKi8KLS8qIGRl ZmluZSBOT19LUkI1X0lOSVRfRVRTICovCi0gICAgaWYgKGs1X2NvbnRleHQpCi0gICAgICAgIGty YjVfaW5pdF9ldHMoazVfY29udGV4dCk7Ci0jZW5kaWYJLyogTk9fS1JCNV9JTklUX0VUUyAqLwot I2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCi0jaWZkZWYgS1JCNTI0X0NPTlYKLSAgICBrcmI1MjRf aW5pdF9ldHMoazVfY29udGV4dCk7Ci0jZW5kaWYgLyogS1JCNTI0X0NPTlYgKi8KLSAgICBtZW1z ZXQoJms1X2F1dGgsMCxzaXplb2YoazVfYXV0aCkpOwotICAgIGlmIChhdXRoX2NvbnRleHQpIHsK LSAgICAgICAga3JiNV9hdXRoX2Nvbl9mcmVlKGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCk7Ci0g ICAgICAgIGF1dGhfY29udGV4dCA9IDA7Ci0gICAgfQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAg ICBpZiAoazVfc2Vzc2lvbl9rZXkpIHsKLSAgICAgICAga3JiNV9mcmVlX2tleWJsb2NrKGs1X2Nv bnRleHQsIGs1X3Nlc3Npb25fa2V5KTsKLSAgICAgICAgazVfc2Vzc2lvbl9rZXkgPSAwOwotICAg IH0KLSNlbmRpZiAvKiBFTkNSWVBUSU9OICovCi0jaWZkZWYgVExTX1ZFUklGWQotICAgIGtyYjVf dGxzX3ZlcmlmaWVkID0gMDsKLSNlbmRpZiAvKiBUTFNfVkVSSUZZICovCi0jZW5kaWYgLyogS1JC NSAqLwotCi0jaWZkZWYgS1JCNAotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAvKiBJbml0aWFs aXplIGJ1ZmZlcnMgdXNlZCBmb3IgYXV0aGVudGljYXRpb24gKi8KLSAgICBtZW1zZXQoJms0X3Nl c3Npb25fa2V5LCAwLCBzaXplb2YoazRfc2Vzc2lvbl9rZXkpKTsKLSAgICBtZW1zZXQoJms0X2No YWxsZW5nZSwgMCwgc2l6ZW9mKGs0X2NoYWxsZW5nZSkpOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJ T04gKi8KLSNlbmRpZiAvKiBLUkI0ICovCi0KLSNpZmRlZiBSTE9HQ09ERQotICAgIHJsb2dfZW5j cnlwdCA9IDA7Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSAgICBuc3RvcmVkID0gMDsKLSAgICBz dG9yZV9wdHIgPSBzdG9yYWdlOwotICAgIG1lbXNldChzdG9yYWdlLDAsc2l6ZW9mKHN0b3JhZ2Up KTsKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAg IGtzdHJlYW1fZGVzdHJveSgpOwotICAgIGlmICgha3N0cmVhbV9jcmVhdGVfZnJvbV9mZChzb2Nr ZXQsIE5VTEwpKQotICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LwotICAgIHJldHVybigxKTsKLX0KLQotdm9pZAotYXV0aF9maW5pc2hlZChyZXN1bHQpIGludCBy ZXN1bHQ7IHsKLSAgICBleHRlcm4gY2hhciB1aWRidWZbXTsKLSAgICBleHRlcm4gaW50IHNzdGVs bmV0OwotCi0gICAgdmFsaWRVc2VyID0gcmVzdWx0OwotICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0g ICAgY2FzZSBBVVRIX1JFSkVDVDogICAgICAgICAgIC8qIFJlamVjdGVkICovCi0gICAgICAgIGlm IChzc3RlbG5ldCkKLSAgICAgICAgICAgIHVpZGJ1ZlswXSA9ICdcMCc7Ci0gICAgICAgIGF1dGhl bnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9OVUxMOwotICAgICAgICBicmVhazsKLSAgICBj YXNlIEFVVEhfVU5LTk9XTjogICAgICAgICAgLyogV2UgZG9uJ3Qga25vdyB3aG8gaGUgaXMsIGJ1 dCBoZSdzIG9rYXkgKi8KLSAgICAgICAgaWYgKHNzdGVsbmV0KQotICAgICAgICAgICAgc3RyY3B5 KHVpZGJ1ZiwiKHVua25vd24pIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQVVUSF9PVEhF UjogICAgICAgICAgICAvKiBXZSBrbm93IGhpbSwgYnV0IG5vdCBoaXMgbmFtZSAqLwotICAgICAg ICBpZiAoc3N0ZWxuZXQpCi0gICAgICAgICAgICBzdHJjcHkodWlkYnVmLCIob3RoZXIpIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQVVUSF9VU0VSOiAgICAgICAgICAgICAvKiBXZSBrbm93 IGhlIG5hbWUgKi8KLSAgICBjYXNlIEFVVEhfVkFMSUQ6ICAgICAgICAgICAgLyogV2Uga25vdyBo aW0sIGFuZCBoZSBuZWVkcyBubyBwYXNzd29yZCAqLwotICAgICAgICBpZiAoc3N0ZWxuZXQpCi0g ICAgICAgICAgICBzdHJjcHkodWlkYnVmLHN6VXNlck5hbWVSZXF1ZXN0ZWQpOwotICAgICAgICBi cmVhazsKLSAgICB9Ci19Ci0KLSNpZmRlZiBNQUNPU1gKLSNpZmRlZiBLUkI1Ci0KLWtyYjVfZXJy b3JfY29kZQotY2tfa3JiNV93cml0ZV9tZXNzYWdlKGtyYjVfY29udGV4dCBjb24sIGtyYjVfcG9p bnRlciBwdHIsIGtyYjVfZGF0YSAqZGF0YSkKLXsKLSAgICBpbnQgZmQgPSAqKChpbnQgKilwdHIp OwotICAgIGxvbmcgbXNnbGVuOwotCi0gICAgbXNnbGVuID0gaHRvbmwoZGF0YS0+bGVuZ3RoKTsK LSAgICBpZiAobmV0X3dyaXRlKGZkLChDSEFSICopJm1zZ2xlbiw0KSAhPSA0KSB7Ci0gICAgICAg IHJldHVybigtMSk7Ci0gICAgfQotICAgIGlmICggZGF0YS0+bGVuZ3RoICkgewotICAgICAgICBp ZiAobmV0X3dyaXRlKGZkLGRhdGEtPmRhdGEsZGF0YS0+bGVuZ3RoKSAhPSBkYXRhLT5sZW5ndGgp IHsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu KDApOwotfQotCi1rcmI1X2Vycm9yX2NvZGUKLWNrX2tyYjVfcmVhZF9tZXNzYWdlKCBrcmI1X2Nv bnRleHQgY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICBrcmI1X3BvaW50ZXIgcHRyLAot ICAgICAgICAgICAgICAgICAgICAgIGtyYjVfZGF0YSAqIGRhdGEpCi17Ci0gICAgZXh0ZXJuIGlu dCB0dHlmZDsKLSAgICBpbnQgZmQgPSAqKChpbnQgKilwdHIpOwotICAgIGxvbmcgbXNnbGVuOwot ICAgIGNoYXIgKnA7Ci0gICAgaW50IGksIHJjOwotCi0gICAgaWYgKG5ldF9yZWFkKGZkLCZtc2ds ZW4sNCkgPCAwKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgZGF0YS0+bGVuZ3RoID0gbnRv aGwobXNnbGVuKTsKLSAgICBpZiAoIGRhdGEtPmxlbmd0aCApIHsKLSAgICAgICAgZGF0YS0+ZGF0 YSA9IG1hbGxvYyhkYXRhLT5sZW5ndGgpOwotCi0gICAgICAgIGkgPSAwOwotICAgICAgICB3aGls ZSAoIGkgPCBkYXRhLT5sZW5ndGggKSB7Ci0gICAgICAgICAgICBpZiAoKHJjID0gbmV0X3JlYWQo ZmQsJmRhdGEtPmRhdGFbaV0sKGRhdGEtPmxlbmd0aCAtIGkpKSkgPCAwKQotICAgICAgICAgICAg ICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICBpICs9IHJjOwotICAgICAgICB9Ci0gICAgfQot ICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogTUFDT1NYICov Ci0jZW5kaWYgLyogQ0tfU0VDVVJJVFkgKi8KLQotCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VhdGguaCBiL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2t1YXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDkxNGEwNmYuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja3VhdGguaAorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0vKiAgQyBLIFUg QSBUIEggLiBIIC0tICAiQy1LZXJtaXQgdG8gQXV0aGVudGljYXRpb24iIGludGVyZmFjZSAgKi8K LQotLyoKLSAgQXV0aG9yOiBKZWZmcmV5IEUgQWx0bWFuIDxqYWx0bWFuQHNlY3VyZS1lbmRwb2lu dHMuY29tPiwKLSAgICAgICAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0 eS4KLQotICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDksCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1i aWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJl c2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNv cHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBl cm1pc3Npb25zLgotKi8KLQotLyoKLSAqIEJhc2VkIG9uIGEgY29uY2F0ZW5hdGlvbiBvZiBhbGwg bmVjZXNzYXJ5IGluY2x1ZGUgZmlsZXMgZGlzdHJpYnV0ZWQgd2l0aAotICogdGhlIEtlcmJlcm9z IDUgTlQgQWxwaGEgMiBUZWxuZXQgcGFja2FnZSBmcm9tIE1JVC4KLSAqLwotCi0jaWZuZGVmIEtS QjVfS0VSTUlUX0gKLSNkZWZpbmUgS1JCNV9LRVJNSVRfSAotCi0jaWZuZGVmIEJPT0wKLSNkZWZp bmUgQk9PTCBpbnQKLSNlbmRpZgotCi0vKiBIZWFkZXIgZmlsZSBmb3IgZW5jcnlwdGVkLXN0cmVh bSBsaWJyYXJ5LgotICogV3JpdHRlbiBieSBLZW4gUmFlYnVybiAoUmFlYnVybkBDeWdudXMuQ09N KS4KLSAqIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5NCBieSBDeWdudXMgU3VwcG9ydC4K LSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQKLSAqIGRpc3RyaWJ1 dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFu ZAotICogd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFi b3ZlIGNvcHlyaWdodAotICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJv dGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZAotICogdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBh cHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgotICogQ3lnbnVzIFN1cHBvcnQgbWFr ZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgotICogdGhpcyBz b2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQg ZXhwcmVzcwotICogb3IgaW1wbGllZCB3YXJyYW50eS4KLSAqLwotCi0jaWZuZGVmIEs1U1RSRUFN X0gKLSNkZWZpbmUgSzVTVFJFQU1fSAotCi10eXBlZGVmIHZvaWQgKmtzdHJlYW1fcHRyOyAgICAg ICAgICAgICAgICAgICAgICAvKiBEYXRhIHNlbmQgb24gdGhlIGtzdHJlYW0gKi8KLXN0cnVjdCBr c3RyZWFtX2RhdGFfYmxvY2sgewotICBrc3RyZWFtX3B0ciBwdHI7Ci0gIHNpemVfdCBsZW5ndGg7 Ci19OwotCi10eXBlZGVmIHN0cnVjdCBrc3RyZWFtX2ludCB7ICAgICAgICAgICAgICAgICAgICAv KiBPYmplY3Qgd2UgcGFzcyBhcm91bmQgKi8KLSAgICBpbnQgZmQ7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogT3BlbiBzb2NrZXQgZGVzY3JpcHRvciAqLwotICAgIGlu dCAoKmVuY3J5cHQpKHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKiwgLyogb3V0cHV0ICovCi0g ICAgICAgICAgICAgICAgICAgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqKTsgLyogaW5wdXQg Ki8KLSAgICBpbnQgZW5jcnlwdF90eXBlOwotICAgIGludCAoKmRlY3J5cHQpKHN0cnVjdCBrc3Ry ZWFtX2RhdGFfYmxvY2sgKiwgLyogb3V0cHV0ICovCi0gICAgICAgICAgICAgICAgICAgc3RydWN0 IGtzdHJlYW1fZGF0YV9ibG9jayAqKTsgLyogaW5wdXQgKi8KLSAgICBpbnQgZGVjcnlwdF90eXBl OwotfSAqa3N0cmVhbTsKLQotLyogUHJvdG90eXBlcyAqLwotCi1pbnQgIGtzdHJlYW1fZGVzdHJv eSgpOwotdm9pZCBrc3RyZWFtX3NldF9idWZmZXJfbW9kZShpbnQpOwotaW50ICBrc3RyZWFtX2Ny ZWF0ZV9mcm9tX2ZkKGludCBmZCwga3N0cmVhbV9wdHIpOwotaW50IGtzdHJlYW1fd3JpdGUodm9p ZCAqLCBzaXplX3QpOwotaW50IGtzdHJlYW1fcmVhZCh2b2lkICosIHNpemVfdCk7Ci0KLSNlbmRp ZiAvKiBLNVNUUkVBTV9IICovCi0KLS8qCi0gKiBJbXBsZW1lbnRzIFRlbG5ldCBhdXRoZW50aWNh dGlvbiBhbmQgZW5jcnlwdGlvbgotICovCi0KLSNpZm5kZWYgVEVMTkVUX0FVVEhfSAotI2RlZmlu ZSBURUxORVRfQVVUSF9ICi0KLWludCBhdXRoX3BhcnNlKHVuc2lnbmVkIGNoYXIgKiwgaW50KTsK LQotaW50IGF1dGhfaW5pdChrc3RyZWFtKTsKLQotdm9pZCBhdXRoX2Rlc3Ryb3kodm9pZCk7Ci0K LWludCBhdXRoX2VuY3J5cHQoc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqLCBzdHJ1Y3Qga3N0 cmVhbV9kYXRhX2Jsb2NrICopOwotCi1pbnQgYXV0aF9kZWNyeXB0KHN0cnVjdCBrc3RyZWFtX2Rh dGFfYmxvY2sgKiwgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqKTsKLQotZXh0ZXJuIEJPT0wg Zm9yd2FyZF9mbGFnOwotZXh0ZXJuIEJPT0wgZm9yd2FyZGFibGVfZmxhZzsKLWV4dGVybiBCT09M IGZvcndhcmRlZF90aWNrZXRzOwotI2VuZGlmIC8qIFRFTF9BVVRIX0ggKi8KLQotCi0vKiBDLUtl cm1pdCBzcGVjaWZpYyBmdW5jdGlvbnMgKi8KLV9QUk9UT1RZUCh2b2lkIGF1dGhfZmluaXNoZWQs KGludCkpOwotX1BST1RPVFlQKGludCBja19hdXRoX2luaXQsIChjaGFyICosIGNoYXIgKiwgY2hh ciAqLCBpbnQpKTsKLV9QUk9UT1RZUChpbnQgY2tfdG5fYXV0aF92YWxpZCwgKFZPSUQpKTsKLV9Q Uk9UT1RZUChpbnQgY2tfdG5fYXV0aF9pbl9wcm9ncmVzcywoVk9JRCkpOwotX1BST1RPVFlQKGlu dCBja190bl9zYl9hdXRoLCAoY2hhciAqLCBpbnQpKTsKLV9QUk9UT1RZUChpbnQgY2tfdG5fc2Jf ZW5jcnlwdCwgKGNoYXIgKiwgaW50KSk7Ci1fUFJPVE9UWVAoaW50IGNrX3RuX2F1dGhfcmVxdWVz dCwgKFZPSUQpKTsKLV9QUk9UT1RZUCh2b2lkIGNrX3RuX2VuY3J5cHQsIChjaGFyICosIGludCkp OwotX1BST1RPVFlQKHZvaWQgY2tfdG5fZGVjcnlwdCwgKGNoYXIgKiwgaW50KSk7Ci1fUFJPVE9U WVAodm9pZCBja190bl9lbmNyeXB0X3N0YXJ0LCAoVk9JRCkpOwotX1BST1RPVFlQKHZvaWQgY2tf dG5fZW5jcnlwdF9zdG9wLCAoVk9JRCkpOwotX1BST1RPVFlQKGludCBja190bl9hdXRoZW50aWNh dGVkLCAoVk9JRCkpOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLV9QUk9UT1RZUChpbnQgY2tfdG5f ZW5jcnlwdGluZywgKFZPSUQpKTsKLV9QUk9UT1RZUChpbnQgY2tfdG5fZGVjcnlwdGluZywgKFZP SUQpKTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi1fUFJPVE9U WVAoaW50IGNrX3RuX3Rsc19uZWdvdGlhdGUsIChWT0lEKSk7Ci1fUFJPVE9UWVAoaW50IFNlbmRT U0xBdXRoU0IsIChpbnQsIHZvaWQgKiwgaW50KSk7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSNp ZmRlZiBDS19LRVJCRVJPUwotICAgIC8qIERlZmluZSBNSVRfQ1VSUkVOVCB0byBjb21waWxlIHRo ZSBjb2RlIGZvciB1c2Ugd2l0aCB2ZXJzaW9ucyBvZiAqLwotICAgIC8qIEtlcmJlcm9zIGxhdGVy IHRoYW4gS1JCNSAxLjAuNS4gIE5vdGUuICBUaGlzIHdpbGwgbm90IGNvbXBpbGUgICAqLwotICAg IC8qIHN1Y2Nlc3NmdWxseSBpbiBLZXJtaXQgOTUgZHVlIHRvIHRoZSBzZWdtZW50YXRpb24gb2Yg Y3J5cHRvICAgICAqLwotICAgIC8qIGludG8gYSBzZXBhcmF0ZSBETEwuICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0jaWZuZGVmIEtSQjVfSU5JVF9FVFMK LS8qIGtyYjVfaW5pdF9ldHMoKSBpcyBhIG5vLW9wIGluIEtlcmJlcm9zIDEuNC54IGFuZCBsYXRl ciAqLwotLyogYW5kIGluIHNvbWUgaW5zdGFsbGF0aW9ucyBpdCBjYW4ndCBiZSBmb3VuZCBzbyBu b3cgYnkgZGVmYXVsdCAqLwotLyogd2UgZG9uJ3QgdXNlIGl0LiAqLwotI2RlZmluZSBOT19LUkI1 X0lOSVRfRVRTCi0jZW5kaWYJLyogS1JCNV9JTklUX0VUUyAqLwotCi0jZGVmaW5lIEtSQl9ERUZU SU0gNjAwICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBsaWZldGltZSAobWludXRlcykgKi8K LQotLyogS2VyYmVyb3Mgc3RydWN0dXJlIGRlZmluaXRpb25zICovCi0KLXN0cnVjdCBrcmJfb3Bf ZGF0YSB7ICAgICAgICAgICAgICAgICAgICAvKiBPcGVyYXRpb25hbCBkYXRhIGZvciBhbGwgYWN0 aW9ucyAqLwotICAgIGludCB2ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtlcmJl cm9zIHZlcnNpb24gICAgKi8KLSAgICBjaGFyICogY2FjaGU7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBLZXJiZXJvcyBjYWNoZSBmaWxlICovCi19OwotCi1zdHJ1Y3Qga3JiNF9pbml0X2RhdGEg eyAgICAgICAgICAgICAgICAgLyogSU5JVElBTElaRSBkYXRhIHN0cnVjdHVyZSAqLwotICAgIGlu dCBsaWZldGltZTsKLSAgICBjaGFyICogcHJpbmNpcGFsOyAgICAgICAgICAgICAgICAgICAvKiBQ cmluY2lwYWwgc3RyaW5nICovCi0gICAgY2hhciAqIGluc3RhbmNlOwotICAgIGNoYXIgKiByZWFs bTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWxtIHN0cmluZyAqLwotICAgIGNoYXIgKiBw YXNzd29yZDsgICAgICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIHBhc3N3b3JkICovCi0gICAg aW50ICAgIHByZWF1dGg7ICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHByZWF1dGggbW9kZT8g Ki8KLSAgICBpbnQgICAgdmVyYm9zZTsgICAgICAgICAgICAgICAgICAgICAvKiBWZXJib3NlIG91 dHB1dD8gKi8KLX07Ci0KLSNkZWZpbmUgS1JCNV9OVU1fT0ZfQUREUlMgMTYKLXN0cnVjdCBrcmI1 X2luaXRfZGF0YSB7ICAgICAgICAgICAgICAgICAvKiBJTklUSUFMSVpFIGRhdGEgc3RydWN0dXJl ICovCi0gICAgaW50IGZvcndhcmRhYmxlOyAgICAgICAgICAgICAgICAgICAgLyogU3dpdGNoIHZh bHVlcyAqLwotICAgIGludCBwcm94aWFibGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIENvcnJl c3BvbmQgdG8gc3dpdGNoIG5hbWVzLi4uICovCi0gICAgaW50IGxpZmV0aW1lOwotICAgIGludCBy ZW5ldzsKLSAgICBpbnQgcmVuZXdhYmxlOwotICAgIGludCB2YWxpZGF0ZTsKLSAgICBjaGFyICog cG9zdGRhdGU7Ci0gICAgY2hhciAqIHNlcnZpY2U7Ci0gICAgY2hhciAqIHByaW5jaXBhbDsgICAg ICAgICAgICAgICAgICAgLyogUHJpbmNpcGFsIHN0cmluZyAqLwotICAgIGNoYXIgKiBpbnN0YW5j ZTsKLSAgICBjaGFyICogcmVhbG07ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFsbSBzdHJp bmcgKi8KLSAgICBjaGFyICogcGFzc3dvcmQ7ICAgICAgICAgICAgICAgICAgICAvKiBLZXJiZXJv cyBwYXNzd29yZCAqLwotICAgIGludCAgICBwcmVhdXRoOyAgICAgICAgICAgICAgICAgICAgIC8q IFVzZSBwcmVhdXRoIG1vZGU/ICovCi0gICAgaW50ICAgIHZlcmJvc2U7ICAgICAgICAgICAgICAg ICAgICAgLyogVmVyYm9zZSBvdXRwdXQ/ICovCi0gICAgaW50ICAgIGdldGs0OyAgICAgICAgICAg ICAgICAgICAgICAgLyogR2V0IEs0IFRHVD8gKi8KLSAgICBjaGFyICogYWRkcnNbS1JCNV9OVU1f T0ZfQUREUlMrMV07ICAvKiBMaXN0IG9mIElQIEFkZHJlc3NlcyAqLwotICAgIGludCAgbm9fYWRk cmVzc2VzOyAgICAgICAgICAgICAgICAgIC8qIERvIG5vdCBpbmNsdWRlIElQIEFkZHJlc3NlcyAq LwotfTsKLQotc3RydWN0IGtyYjVfbGlzdF9jcmVkX2RhdGEgeyAgICAgICAgICAgIC8qIExpc3Qg Q3JlZGVudGlhbHMgZGF0YSAqLwotICAgIGludCBlbmNyeXB0aW9uOwotICAgIGludCBmbGFnczsK LSAgICBpbnQgYWRkcjsKLX07Ci0KLV9QUk9UT1RZUChpbnQgY2tfa3JiNV9hdXRvZ2V0X1RHVCwg KGNoYXIgKikpOwotX1BST1RPVFlQKGludCBja19rcmI1X2luaXRUR1QsIChzdHJ1Y3Qga3JiX29w X2RhdGEgKixzdHJ1Y3Qga3JiNV9pbml0X2RhdGEgKiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBrcmI0X2luaXRfZGF0YSAqKSk7Ci1fUFJPVE9UWVAoaW50IGNrX2ty YjVfZGVzdHJveSwgKHN0cnVjdCBrcmJfb3BfZGF0YSAqKSk7Ci1fUFJPVE9UWVAoaW50IGNrX2ty YjVfbGlzdF9jcmVkcywgKHN0cnVjdCBrcmJfb3BfZGF0YSAqLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGtyYjVfbGlzdF9jcmVkX2RhdGEgKikpOwotX1BST1RP VFlQKGNoYXIgKiBja19rcmI1X2dldHJlYWxtLCAoY2hhciAqKSk7Ci1fUFJPVE9UWVAoY2hhciAq IGNrX2tyYjVfZ2V0cHJpbmNpcGFsLCAoY2hhciAqKSk7Ci1fUFJPVE9UWVAoY2hhciAqIGNrX2ty YjVfZ2V0X2NjX25hbWUsIChWT0lEKSk7Ci0KLV9QUk9UT1RZUChpbnQgY2tfa3JiNF9hdXRvZ2V0 X1RHVCwgKGNoYXIgKikpOwotX1BST1RPVFlQKGludCBja19rcmI0X2luaXRUR1QsIChzdHJ1Y3Qg a3JiX29wX2RhdGEgKixzdHJ1Y3Qga3JiNF9pbml0X2RhdGEgKikpOwotX1BST1RPVFlQKGludCBj a19rcmI0X2Rlc3Ryb3ksIChzdHJ1Y3Qga3JiX29wX2RhdGEgKikpOwotX1BST1RPVFlQKGludCBj a19rcmI0X2xpc3RfY3JlZHMsIChzdHJ1Y3Qga3JiX29wX2RhdGEgKikpOwotX1BST1RPVFlQKGNo YXIgKiBja19rcmI0X2dldHJlYWxtLCAoVk9JRCkpOwotX1BST1RPVFlQKGNoYXIgKiBja19rcmI0 X2dldHByaW5jaXBhbCwgKFZPSUQpKTsKLQotX1BST1RPVFlQKGludCBja19rcmI0X2dldF90a3Rz LCAoVk9JRCkpOwotX1BST1RPVFlQKGNoYXIgKiBja19rcmI0X2dldF9uZXh0X3RrdCwgKFZPSUQp KTsKLV9QUk9UT1RZUChpbnQgY2tfa3JiNF90a3RfaXN2YWxpZCwoY2hhciAqKSk7Ci1fUFJPVE9U WVAoaW50IGNrX2tyYjRfaXNfdGd0X3ZhbGlkLChWT0lEKSk7Ci1fUFJPVE9UWVAoaW50IGNrX2ty YjRfdGt0X3RpbWUsKGNoYXIgKikpOwotCi1fUFJPVE9UWVAoaW50IGNrX2tyYjVfZ2V0X3RrdHMs IChjaGFyICopKTsKLV9QUk9UT1RZUChjaGFyICogY2tfa3JiNV9nZXRfbmV4dF90a3QsIChWT0lE KSk7Ci1fUFJPVE9UWVAoaW50IGNrX2tyYjVfdGt0X2lzdmFsaWQsKGNoYXIgKixjaGFyICopKTsK LV9QUk9UT1RZUChjaGFyICogY2tfa3JiNV90a3RfZmxhZ3MsKGNoYXIgKixjaGFyICopKTsKLV9Q Uk9UT1RZUChpbnQgY2tfa3JiNV9pc190Z3RfdmFsaWQsKFZPSUQpKTsKLV9QUk9UT1RZUChpbnQg Y2tfa3JiNV90a3RfdGltZSwoY2hhciAqLGNoYXIgKikpOwotCi1fUFJPVE9UWVAoaW50IGtyYjRf ZGVzX2F2YWlsLChpbnQpKTsKLV9QUk9UT1RZUChpbnQga3JiNF9kZXNfd3JpdGUsKGludCxjaGFy ICosaW50KSk7Ci1fUFJPVE9UWVAoaW50IGtyYjRfZGVzX3JlYWQsIChpbnQsY2hhciAqLGludCkp OwotX1BST1RPVFlQKGludCBrcmI1X2Rlc19hdmFpbCwoaW50KSk7Ci1fUFJPVE9UWVAoaW50IGty YjVfZGVzX3dyaXRlLChpbnQsY2hhciAqLGludCxpbnQpKTsKLV9QUk9UT1RZUChpbnQga3JiNV9k ZXNfcmVhZCwgKGludCxjaGFyICosaW50LGludCkpOwotX1BST1RPVFlQKGludCBrcmI1X3UydV9h dmFpbCwoaW50KSk7Ci1fUFJPVE9UWVAoaW50IGtyYjVfdTJ1X3dyaXRlLChpbnQsY2hhciAqLGlu dCkpOwotX1BST1RPVFlQKGludCBrcmI1X3UydV9yZWFkLCAoaW50LGNoYXIgKixpbnQpKTsKLV9Q Uk9UT1RZUChpbnQgazVfdXNlcl90b191c2VyX3NlcnZlcl9hdXRoLChWT0lEKSk7Ci1fUFJPVE9U WVAoaW50IGs1X3VzZXJfdG9fdXNlcl9jbGllbnRfYXV0aCwoVk9JRCkpOwotI2VuZGlmIC8qIENL X0tFUkJFUk9TICovCi0KLV9QUk9UT1RZUChpbnQgY2tfa3JiNV9pc19pbnN0YWxsZWQsKHZvaWQp KTsKLV9QUk9UT1RZUChpbnQgY2tfa3JiNF9pc19pbnN0YWxsZWQsKHZvaWQpKTsKLV9QUk9UT1RZ UChpbnQgY2tfc3JwX2lzX2luc3RhbGxlZCwodm9pZCkpOwotX1BST1RPVFlQKGludCBja19udGxt X2lzX2luc3RhbGxlZCwodm9pZCkpOwotX1BST1RPVFlQKGludCBja19jcnlwdF9pc19pbnN0YWxs ZWQsKHZvaWQpKTsKLV9QUk9UT1RZUChpbnQgY2tfc3NsZWF5X2lzX2luc3RhbGxlZCwodm9pZCkp OwotX1BST1RPVFlQKGludCBja19nc3NhcGlfaXNfaW5zdGFsbGVkLCh2b2lkKSk7Ci1fUFJPVE9U WVAoaW50IGNrX2tyeXB0b19pc19pbnN0YWxsZWQsKHZvaWQpKTsKLQotX1BST1RPVFlQKFZPSUQg Y2tfZW5jcnlwdF9zZW5kX3N1cHBvcnQsKFZPSUQpKTsKLV9QUk9UT1RZUChpbnQgY2tfZ2V0X2Ny eXB0X3RhYmxlLChzdHJ1Y3Qga2V5dGFiICoqLCBpbnQgKikpOwotX1BST1RPVFlQKGNoYXIgKiBj a19rcmI0X3JlYWxtb2Zob3N0LChjaGFyICopKTsKLV9QUk9UT1RZUChjaGFyICogY2tfa3JiNV9y ZWFsbW9maG9zdCwoY2hhciAqKSk7Ci0KLSNkZWZpbmUgRk9SV0FSRCAgLyogYWxsb3cgZm9yd2Fy ZGluZyBvZiBjcmVkZW50aWFsICovCi0jaWZkZWYgRk9SV0FSRAotX1BST1RPVFlQKGludCBrZXJi ZXJvczVfZm9yd2FyZCwoVk9JRCkpOwotI2VuZGlmIC8qIEZPUldBUkQgKi8KLQotI2RlZmluZSBB VVRIVFlQTFNUU1ogOAotI2VuZGlmIC8qS1JCNV9LRVJNSVRfSCovCgpkaWZmIC0tZ2l0IGEvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3Vid3IudHh0IGIvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3Vid3IudHh0CmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAzOGIwNjRhLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2t1YndyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUzNjMgKzAs MCBAQAotCi0gICBbMV1UaGUgQ29sdW1iaWEgQ3Jvd24gVGhlIEtlcm1pdCBQcm9qZWN0IHwgQ29s dW1iaWEgVW5pdmVyc2l0eQotICAgNjEyIFdlc3QgMTE1dGggU3RyZWV0LCBOZXcgWW9yayBOWSAx MDAyNSBVU0EgbyBbMl1rZXJtaXRAY29sdW1iaWEuZWR1Ci0gICAuLi5zaW5jZSAxOTgxCi0gICBb M11Ib21lIFs0XUtlcm1pdCA5NSBbNV1DLUtlcm1pdCBbNl1TY3JpcHRzIFs3XUN1cnJlbnQgWzhd TmV3IFs5XUZBUQotICAgWzEwXVN1cHBvcnQKLQotQy1LZXJtaXQgVW5peCBIaW50cyBhbmQgVGlw cwotCi0gICAgIEZyYW5rIGRhIENydXoKLSAgICAgWzExXVRoZSBLZXJtaXQgUHJvamVjdCwgWzEy XUNvbHVtYmlhIFVuaXZlcnNpdHkKLQotICAgQXMgb2Y6IEMtS2VybWl0IDkuMC4zMDIsIDIwIEF1 Z3VzdCAyMDExCi0gICBUaGlzIHBhZ2UgbGFzdCB1cGRhdGVkOiBTdW4gQXVnIDIxIDEyOjA4OjUy IDIwMTEgKE5ldyBZb3JrIFVTQSBUaW1lKQotCi0gICAgIElGIFlPVSBBUkUgUkVBRElORyBBIFBM QUlOLVRFWFQgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50LCBub3RlIGl0IGlzCi0gICAgIGEgcGxh aW4tdGV4dCBkdW1wIG9mIGEgV2ViIHBhZ2UuIFlvdSBjYW4gdmlzaXQgdGhlIG9yaWdpbmFsIChh bmQKLSAgICAgcG9zc2libHkgbW9yZSB1cC10by1kYXRlKSBXZWIgcGFnZSBoZXJlOgotCi0gIFsx M11odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwKLQotICAgICBTaW5j ZSB0aGUgbWF0ZXJpYWwgaW4gdGhpcyBmaWxlIGhhcyBiZWVuIGFjY3VtdWxhdGluZyBzaW5jZSAx OTg1LAotICAgICBzb21lIChtdWNoKSBvZiBpdCBtaWdodCBiZSBkYXRlZC4KLQotS25vd24gcHJv YmxlbXMgd2l0aCBDLUtlcm1pdCA5LjAKLQotICAgICAqIERvbWFpbiBuYW1lIHJlc29sdXRpb24g ZG9lcyBub3Qgd29yayBpbiBTb2xhcmlzIDEwIG9yIDExIChmaXhlZCBpbgotICAgICAgIFsxNF05 LjAuMzAxKS4KLSAgICAgKiBVVUNQIGxvY2tmaWxlIGZhaWx1cmUgaW4gRnJlZUJTRCA4IChmaXhl ZCBpbiBbMTVdOS4wLjMwMikuCi0gICAgICogQnVpbGQgZmFpbHVyZSBGcmVlQlNEIDkgKGZpeGVk IGluIFsxNl05LjAuMzAyKS4KLSAgICAgKiBPcGVuaW5nIG5ldyBTU0ggc2Vzc2lvbnMgYWZ0ZXIg Y2xvc2luZyBwcmV2aW91cyBvbmVzIHNvbWV0aW1lcwotICAgICAgIGZhaWxzLgotICAgICAqIEhl aW1kYWwgS2VyYmVyb3Mgbm90IHN1cHBvcnRlZC4KLQotICAgWyBbMTddQy1LZXJtaXQgXSBbIFsx OF1JbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25zIF0gWyBbMTldVFVUT1JJQUwgXQotCi1DT05URU5U UwotCi0gICAgMS4gWzIwXUlOVFJPRFVDVElPTgotICAgIDIuIFsyMV1QUkVCVUlMVCBDLUtFUk1J VCBCSU5BUklFUwotICAgIDMuIFsyMl1QTEFURk9STS1TUEVDSUZJQyBOT1RFUwotICAgIDQuIFsy M11HRU5FUkFMIFVOSVgtU1BFQ0lGSUMgTElNSVRBVElPTlMgQU5EIEJVR1MKLSAgICA1LiBbMjRd SU5JVElBTElaQVRJT04gQU5EIENPTU1BTkQgRklMRVMKLSAgICA2LiBbMjVdQ09NTVVOSUNBVElP TiBTUEVFRCBTRUxFQ1RJT04KLSAgICA3LiBbMjZdQ09NTVVOSUNBVElPTlMgQU5EIERJQUxJTkcK LSAgICA4LiBbMjddSEFSRFdBUkUgRkxPVyBDT05UUk9MCi0gICAgOS4gWzI4XVRFUk1JTkFMIENP Tk5FQ1RJT04gQU5EIEtFWSBNQVBQSU5HCi0gICAxMC4gWzI5XUZJTEUgVFJBTlNGRVIKLSAgIDEx LiBbMzBdRVhURVJOQUwgRklMRSBUUkFOU0ZFUiBQUk9UT0NPTFMKLSAgIDEyLiBbMzFdU0VDVVJJ VFkKLSAgIDEzLiBbMzJdTUlTQ0VMTEFORU9VUyBVU0VSIFJFUE9SVFMKLSAgIDE0LiBbMzNdVEhJ UkQtUEFSVFkgRFJJVkVSUwotCi0gICBRdWljayBMaW5rczogICBbIFszNF1MaW51eCBdIFsgWzM1 XSpCU0QgXSBbWzM2XU1hYyBPUyBYXSBbIFszN11BSVggXSBbCi0gICBbMzhdSFAtVVggXSBbIFsz OV1Tb2xhcmlzIF0gWyBbNDBdU0NPIF0KLQotMS4gSU5UUk9EVUNUSU9OCi0KLSAgIFsgWzQxXVRv cCBdIFsgWzQyXUNvbnRlbnRzIF0gWyBbNDNdTmV4dCBdCi0KLSAgIFNFQ1RJT04gQ09OVEVOVFMK LQotICAxLjEuIFs0NF1Eb2N1bWVudGF0aW9uCi0gIDEuMi4gWzQ1XVRlY2huaWNhbCBTdXBwb3J0 Ci0gIDEuMy4gWzQ2XVRoZSBZZWFyIDIwMDAKLSAgMS40LiBbNDddVGhlIEV1cm8KLQotICAgVEhJ UyBJUyBXSEFUIFVTRUQgVE8gQkUgQ0FMTEVEIHRoZSAiYmV3YXJlIGZpbGUiIGZvciB0aGUgVW5p eCB2ZXJzaW9uCi0gICBvZiBDLUtlcm1pdCwgcHJldmlvdXNseSBkaXN0cmlidXRlZCBhcyBja3Vi d3IudHh0IGFuZCwgYmVmb3JlIHRoYXQsIGFzCi0gICBja3VrZXIuYndyLCBhZnRlciB0aGUgZmFz aGlvbiBvZiBvbGQgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24KLSAgIChERUMpIHNvZnR3 YXJlIHJlbGVhc2VzIHRoYXQgY2FtZSB3aXRoIHJlbGVhc2Ugbm90ZXMgKGRlc2NyaWJpbmcgd2hh dAotICAgaGFkIGNoYW5nZWQpIGFuZCBhICJiZXdhcmUgZmlsZSIgbGlzdGluZyBrbm93biBidWdz LCBsaW1pdGF0aW9ucywKLSAgICJub24tZ29hbHMiLCBhbmQgdGhpbmdzIHRvIHdhdGNoIG91dCBm b3IuIFRoZSBDLUtlcm1pdCBiZXdhcmUgZmlsZSBoYXMKLSAgIGJlZW4gYWNjdW11bGF0aW5nIHNp bmNlIDE5ODUsIGFuZCBpdCBhcHBsaWVzIHRvIG1hbnkgZGlmZmVyZW50IGhhcmR3YXJlCi0gICBw bGF0Zm9ybXMgYW5kIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQgbWFueSB2ZXJzaW9ucyBvZiB0aGVt LCBzbyBpdCBpcwotICAgcXVpdGUgbGFyZ2UuIFByaW9yIHRvIEMtS2VybWl0IDguMCwgaXQgd2Fz IGRpc3RyaWJ1dGVkIG9ubHkgaW4KLSAgIHBsYWluLXRleHQgZm9ybWF0LiBOb3cgaXQgaXMgYXZh aWxhYmxlIGFzIGEgV2ViIGRvY3VtZW50IHdpdGggbGlua3MsCi0gICBpbnRlcm5hbCBjcm9zcyBy ZWZlcmVuY2VzLCBhbmQgc28gb24sIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHVzZS4KLQotICAgVGhp cyBkb2N1bWVudCBhcHBsaWVzIHRvIFVuaXggQy1LZXJtaXQgaW4gZ2VuZXJhbCwgYXMgd2VsbCBh cyB0bwotICAgc3BlY2lmaWMgVW5peCB2YXJpYXRpb25zIGxpa2UgWzQ4XUxpbnV4LCBbNDldQUlY LCBbNTBdSFAtVVgsCi0gICBbNTFdU29sYXJpcywgYW5kIHNvIG9uLCBhbmQgc2hvdWxkIGJlIHJl YWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKLSAgIFs1Ml1wbGF0Zm9ybS1pbmRlcGVuZGVudCBD LUtlcm1pdCBiZXdhcmUgZmlsZSwgd2hpY2ggY29udGFpbnMgc2ltaWxhcgotICAgaW5mb3JtYXRp b24sIGJ1dCBhcHBseWluZyB0byBhbGwgdmVyc2lvbnMgb2YgQy1LZXJtaXQgKFZNUywgV2luZG93 cywKLSAgIE9TLzIsIEFPUy9WUywgVk9TLCBldGMsIGFzIHdlbGwgYXMgdG8gVW5peCkuCi0KLSAg IFRoZXJlIGlzIG11Y2ggaW4gdGhpcyBkb2N1bWVudCB0aGF0IGlzIChvbmx5KSBvZiBoaXN0b3Jp Y2FsIGludGVyZXN0LgotICAgVGhlIG5hdmlnYXRpb24gbGlua3Mgc2hvdWxkIGhlbHAgeW91IHNr aXAgZGlyZWN0bHkgdG8gdGhlIHNlY3Rpb25zIHRoYXQKLSAgIGFyZSByZWxldmFudCB0byB5b3Uu IE51bWVyb3VzIG9mZnNpdGUgV2ViIGxpbmtzIGFyZSBzdXBwb3NlZCB0byBsZWFkIHRvCi0gICBm dXJ0aGVyIGluZm9ybWF0aW9uIGJ1dCwgYXMgeW91IGtub3csIFdlYiBsaW5rcyBnbyBzdGFsZSBm cmVxdWVudGx5IGFuZAotICAgd2l0aG91dCB3YXJuaW5nLiBJZiB5b3UgY2FuIHN1cHBseSBhZGRp dGlvbmFsLCBjb3JyZWN0ZWQsIHVwZGF0ZWQsIG9yCi0gICBiZXR0ZXIgV2ViIGxpbmtzLCBwbGVh c2UgZmVlbCBmcmVlIHRvIFs1M11sZXQgbWUga25vdy4KLQotMS4xLiBEb2N1bWVudGF0aW9uCi0K LSAgIFsgWzU0XVRvcCBdIFsgWzU1XUNvbnRlbnRzIF0gWyBbNTZdTmV4dCBdCi0KLSAgIEMtS2Vy bWl0IDYuMCBpcyBkb2N1bWVudGVkIGluIHRoZSBib29rIFs1N11Vc2luZyBDLUtlcm1pdCwgU2Vj b25kCi0gICBFZGl0aW9uLCBieSBGcmFuayBkYSBDcnV6IGFuZCBDaHJpc3RpbmUgTS4gR2lhbm9u ZSwgRGlnaXRhbCBQcmVzcywKLSAgIEJ1cmxpbmd0b24sIE1BLCBVU0EsIElTQk4gMS01NTU1OC0x NjQtMSAoMTk5NyksIDYyMiBwYWdlcy4gVGhpcyByZW1haW5zCi0gICB0aGUgZGVmaW5pdGl2ZSBD LUtlcm1pdCBkb2N1bWVudGF0aW9uLiBVbnRpbCB0aGUgdGhpcmQgZWRpdGlvbiBpcwotICAgcHVi bGlzaGVkIChzb3JyeSwgdGhlcmUgaXMgbm8gZmlybSB0aW1lZnJhbWUgZm9yIHRoaXMpLCBwbGVh c2UgYWxzbwotICAgcmVmZXIgdG86Ci0KLSAgIFs1OF1TdXBwbGVtZW50IHRvIFVzaW5nIEMtS2Vy bWl0LCBTZWNvbmQgRWRpdGlvbiwgRm9yIEMtS2VybWl0IDcuMAotICAgICAgICAgIFRob3JvdWdo IGRvY3VtZW50YXRpb24gb2YgZmVhdHVyZXMgbmV3IHRvIHZlcnNpb24gNy4wLgotCi0gICBbNTld U3VwcGxlbWVudCB0byBVc2luZyBDLUtlcm1pdCwgU2Vjb25kIEVkaXRpb24sIEZvciBDLUtlcm1p dCA4LjAKLSAgICAgICAgICBUaG9yb3VnaCBkb2N1bWVudGF0aW9uIG9mIGZlYXR1cmVzIG5ldyB0 byB2ZXJzaW9uIDguMC4KLQotICAgWzYwXVN1cHBsZW1lbnQgdG8gVXNpbmcgQy1LZXJtaXQsIFNl Y29uZCBFZGl0aW9uLCBGb3IgQy1LZXJtaXQgOS4wCi0gICAgICAgICAgVGhvcm91Z2ggZG9jdW1l bnRhdGlvbiBvZiBmZWF0dXJlcyBuZXcgdG8gdmVyc2lvbiA5LjAuCi0KLTEuMi4gVGVjaG5pY2Fs IFN1cHBvcnQKLQotICAgWyBbNjFdVG9wIF0gWyBbNjJdQ29udGVudHMgXSBbIFs2M11TZWN0aW9u IENvbnRlbnRzIF0gWyBbNjRdTmV4dCBdIFsKLSAgIFs2NV1QcmV2aW91cyBdCi0KLSAgIEZvciBp bmZvcm1hdGlvbiBvbiBob3cgdG8gZ2V0IHRlY2huaWNhbCBzdXBwb3J0LCBwbGVhc2UgdmlzaXQ6 Ci0KLSAgICBbNjZdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRtbAot Ci0xLjMuIFRoZSBZZWFyIDIwMDAKLQotICAgWyBbNjddVG9wIF0gWyBbNjhdQ29udGVudHMgXSBb IFs2OV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbNzBdTmV4dCBdIFsKLSAgIFs3MV1QcmV2aW91cyBd Ci0KLSAgIFRoZSBVbml4IHZlcnNpb24gb2YgQy1LZXJtaXQsIHJlbGVhc2UgNi4wIGFuZCBsYXRl ciwgaXMgIlllYXIgMjAwMAotICAgY29tcGxpYW50IiwgYnV0IG9ubHkgaWYgdGhlIHVuZGVybHlp bmcgb3BlcmF0aW5nIHN5c3RlbSBpcyB0b28uIENvbnRhY3QKLSAgIHlvdXIgVW5peCBvcGVyYXRp bmcgc3lzdGVtIHZlbmRvciB0byBmaW5kIG91dCB3aGljaCBvcGVyYXRpbmcgc3lzdGVtCi0gICB2 ZXJzaW9ucywgcGF0Y2hlcywgaGFyZHdhcmUsIGFuZC9vciB1cGRhdGVzIGFyZSByZXF1aXJlZC4g KFF1aXRlIGEgZmV3Ci0gICBvbGQgVW5peGVzIGFyZSBzdGlsbCBpbiBvcGVyYXRpb24gaW4gdGhl IG5ldyBtaWxsZW5pdW0sIGJ1dCB3aXRoIHRoZWlyCi0gICBkYXRlIHNldCAyOCB5ZWFycyBpbiB0 aGUgcGFzdCBzbyBhdCBsZWFzdCB0aGUgbm9uLXllYXIgcGFydHMgb2YgdGhlCi0gICBjYWxlbmRh ciBhcmUgY29ycmVjdC4pCi0KLSAgIEFzIG9mIEMtS2VybWl0IDYuMCAoNiBTZXB0ZW1iZXIgMTk5 NiksIHBvc3QtbWlsbGVuaXVtIGZpbGUgZGF0ZXMgYXJlCi0gICByZWNvZ25pemVkLCB0cmFuc21p dHRlZCwgcmVjZWl2ZWQsIGFuZCByZXByb2R1Y2VkIGNvcnJlY3RseSBkdXJpbmcgdGhlCi0gICBm aWxlIHRyYW5zZmVyIHByb2Nlc3MgaW4gQy1LZXJtaXQncyBGaWxlIEF0dHJpYnV0ZSBwYWNrZXRz LiBJZgotICAgcG9zdC1taWxsZW5pdW0gZGF0ZXMgYXJlIG5vdCBwcm9jZXNzZWQgY29ycmVjdGx5 IG9uIHRoZSBvdGhlciBlbmQsIGZpbGUKLSAgIHRyYW5zZmVyIHN0aWxsIHRha2VzIHBsYWNlLCBi dXQgdGhlIG1vZGlmaWNhdGlvbiBvciBjcmVhdGlvbiBkYXRlIG9mCi0gICB0aGUgcmVjZWl2ZWQg ZmlsZSBtaWdodCBiZSBpbmNvcnJlY3QuIFRoZSBvbmx5IGV4Y2VwdGlvbiB3b3VsZCBiZSBpZgot ICAgdGhlICJmaWxlIGNvbGxpc2lvbiB1cGRhdGUiIGZlYXR1cmUgaXMgYmVpbmcgdXNlZCB0byBw cmV2ZW50Ci0gICB1bm5lY2Vzc2FyeSB0cmFuc2ZlciBvZiBmaWxlcyB0aGF0IGhhdmUgbm90IGNo YW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZQotICAgYSB0cmFuc2ZlciB0b29rIHBsYWNlOyBpbiB0 aGlzIGNhc2UsIGEgZmlsZSBtaWdodCBiZSB0cmFuc2ZlcnJlZAotICAgdW5uZWNlc3NhcmlseSwg b3IgaXQgbWlnaHQgbm90IGJlIHRyYW5zZmVycmVkIHdoZW4gaXQgc2hvdWxkIGhhdmUgYmVlbi4K LSAgIENvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSB1cGRhdGUgZmVhdHVyZSBkZXBlbmRzIG9uIGJv dGggS2VybWl0IHByb2dyYW1zCi0gICBoYXZpbmcgdGhlIGNvcnJlY3QgZGF0ZSBhbmQgdGltZS4K LQotICAgT2Ygc2Vjb25kYXJ5IGltcG9ydGFuY2UgYXJlIHRoZSB0aW1lIHN0YW1wcyBpbiB0aGUg dHJhbnNhY3Rpb24gYW5kL29yCi0gICBkZWJ1ZyBsb2dzLCBhbmQgdGhlIGRhdGUtcmVsYXRlZCBz Y3JpcHQgcHJvZ3JhbW1pbmcgY29uc3RydWN0cywgc3VjaCBhcwotICAgXHYoZGF0ZSksIFx2KG5k YXRlKSwgXHYoZGF5KSwgXHYobmRheSksIGFuZCBwZXJoYXBzIGFsc28gdGhlCi0gICB0aW1lLXJl bGF0ZWQgb25lcywgXHYodGltZSkgYW5kIFx2KG50aW1lKSwgaW5zb2ZhciBhcyB0aGV5IG1pZ2h0 IGJlCi0gICBhZmZlY3RlZCBieSB0aGUgZGF0ZS4gVGhlIFx2KG5kYXRlKSBpcyBhIG51bWVyaWMt Zm9ybWF0IGRhdGUgb2YgdGhlCi0gICBmb3JtIHl5eXltbWRkLCBzdWl0YWJsZSBmb3IgYm90aCBs ZXhpY2FsIGFuZCBudW1lcmljIGNvbXBhcmlzb24gYW5kCi0gICBzb3J0aW5nOiBlLmcuIDE5OTcw MjA4IG9yIDIwMDExMjMxLiBJZiB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtCi0gICBy ZXR1cm5zIHRoZSBjb3JyZWN0IGRhdGUgaW5mb3JtYXRpb24sIHRoZXNlIHZhcmlhYmxlcyB3aWxs IGhhdmUgdGhlCi0gICBwcm9wZXIgdmFsdWVzLiBJZiBub3QsIHRoZW4gc2NyaXB0cyB0aGF0IG1h a2UgZGVjaXNpb25zIGJhc2VkIG9uIHRoZXNlCi0gICB2YXJpYWJsZXMgbWlnaHQgbm90IG9wZXJh dGUgY29ycmVjdGx5LgotCi0gICBNb3N0IGRhdGUtcmVsYXRlZCBjb2RlIGlzIGJhc2VkIHVwb24g dGhlIEMgTGlicmFyeSBhc2N0aW1lKCkgc3RyaW5nLAotICAgd2hpY2ggYWx3YXlzIGhhcyBhIGZv dXItZGlnaXQgeWVhci4gSW4gVW5peCwgdGhlIG9uZSBiaXQgb2YgY29kZSBpbgotICAgQy1LZXJt aXQgdGhhdCBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlIGlzIHNldmVyYWwgY2FsbHMgdG8K LSAgIGxvY2FsdGltZSgpLCB3aGljaCByZXR1cm5zIGEgcG9pbnRlciB0byBhIHRtIHN0cnVjdCwg aW4gd2hpY2ggdGhlIHllYXIKLSAgIGlzIHByZXN1bWVkIHRvIGJlIGV4cHJlc3NlZCBhcyAieWVh cnMgc2luY2UgMTkwMCIuIFRoZSBjb2RlIGRlcGVuZHMgb24KLSAgIHRoaXMgYXNzdW1wdGlvbi4g QW55IHBsYXRmb3JtcyB0aGF0IHZpb2xhdGUgaXQgd2lsbCBuZWVkIHNwZWNpYWwKLSAgIGNvZGlu Zy4gQXMgb2YgdGhpcyB3cml0aW5nLCBubyBzdWNoIHBsYXRmb3JtcyBhcmUga25vd24uCi0KLSAg IENvbW1hbmQgYW5kIHNjcmlwdCBwcm9ncmFtbWluZyBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGgg ZGF0ZXMgdXNlCi0gICBDLUtlcm1pdCBzcGVjaWZpYyBjb2RlIHRoYXQgYWx3YXlzIHVzZXMgZnVs bCB5ZWFycy4KLQotMS40LiBUaGUgRXVybwotCi0gICBbIFs3Ml1Ub3AgXSBbIFs3M11Db250ZW50 cyBdIFsgWzc0XVNlY3Rpb24gQ29udGVudHMgXSBbIFs3NV1QcmV2aW91cyBdCi0KLSAgIEMtS2Vy bWl0IDcuMCBhbmQgbGF0ZXIgc3VwcG9ydCBVbmljb2RlIChJU08gMTA2NDYpLCBJU08gODg1OS0x NSBMYXRpbgotICAgQWxwaGFiZXQgOSwgUEMgQ29kZSBQYWdlIDg1OCwgV2luZG93cyBDb2RlIFBh Z2VzIDEyNTAgYW5kIDEyNTEsIGFuZAotICAgcGVyaGFwcyBvdGhlciBjaGFyYWN0ZXIgc2V0cywg dGhhdCBlbmNvZGUgdGhlIEV1cm8gc3ltYm9sLCBhbmQgY2FuCi0gICB0cmFuc2xhdGUgYW1vbmcg dGhlbSBhcyBsb25nIGFzIG5vIGludGVybWVkaWF0ZSBjaGFyYWN0ZXItc2V0IGlzCi0gICBpbnZv bHZlZCB0aGF0IGRvZXMgbm90IGluY2x1ZGUgdGhlIEV1cm8uCi0KLTIuIFBSRUJVSUxUIEMtS0VS TUlUIEJJTkFSSUVTCi0KLSAgIFsgWzc2XVRvcCBdIFsgWzc3XUNvbnRlbnRzIF0gWyBbNzhdTmV4 dCBdIFsgWzc5XVByZXZpb3VzIF0KLQotICAgSXQgaXMgb2Z0ZW4gZGFuZ2Vyb3VzIHRvIHJ1biBh IGJpbmFyeSBDLUtlcm1pdCAob3IgYW55IG90aGVyKSBwcm9ncmFtCi0gICBidWlsdCBvbiBhIGRp ZmZlcmVudCBjb21wdXRlci4gUGFydGljdWxhcmx5IGlmIHRoYXQgY29tcHV0ZXIgaGFkIGEKLSAg IGRpZmZlcmVudCBDIGNvbXBpbGVyLCBsaWJyYXJpZXMsIG9wZXJhdGluZyBzeXN0ZW0gdmVyc2lv biwgcHJvY2Vzc29yCi0gICBmZWF0dXJlcywgZXRjLCBhbmQgZXNwZWNpYWxseSBpZiB0aGUgcHJv Z3JhbSB3YXMgYnVpbHQgd2l0aCBzaGFyZWQKLSAgIGxpYnJhcmllcywgYmVjYXVzZSBhcyBzb29u IGFzIHlvdSB1cGRhdGUgdGhlIGxpYnJhcmllcyBvbiB5b3VyIHN5c3RlbSwKLSAgIHRoZXkgbm8g bG9uZ2VyIG1hdGNoIHRoZSBvbmVzIHJlZmVyZW5jZWQgaW4gdGhlIGJpbmFyeSwgYW5kIHRoZSBi aW5hcnkKLSAgIG1pZ2h0IHJlZnVzZSB0byBsb2FkIHdoZW4geW91IHJ1biBpdCwgaW4gd2hpY2gg Y2FzZSB5b3UnbGwgc2VlIGVycm9yCi0gICBtZXNzYWdlcyBzaW1pbGFyIHRvOgotCi0gIENvdWxk IG5vdCBsb2FkIHByb2dyYW0ga2VybWl0Ci0gIE1lbWJlciBzaHI0Lm8gbm90IGZvdW5kIG9yIGZp bGUgbm90IGFuIGFyY2hpdmUKLSAgQ291bGQgbm90IGxvYWQgbGlicmFyeSBsaWJjdXJzZXMuYVtz aHI0Lm9dCi0gIEVycm9yIHdhczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQotCi0gICAoVGhl c2Ugc2FtcGxlcyBhcmUgZnJvbSBBSVguKSBUbyBhdm9pZCB0aGlzIHByb2JsZW0sIHdlIHRyeSB0 byBidWlsZAotICAgQy1LZXJtaXQgd2l0aCBzdGF0aWNhbGx5IGxpbmtlZCBsaWJyYXJpZXMgd2hl bmV2ZXIgd2UgY2FuLCBidXQgdGhpcyBpcwotICAgaW5jcmVhc2luZ2x5IGltcG9zc2libGUgYXMg c2hhcmVkIGxpYnJhcmllcyBiZWNvbWUgdGhlIG5vcm0uCi0KLSAgIEl0IGlzIG9mdGVuIE9LIHRv IHJ1biBhIGJpbmFyeSBidWlsdCBvbiBhbiBlYXJsaWVyIE9TIHZlcnNpb24sIGJ1dCBpdAotICAg aXMgcmFyZWx5IHBvc3NpYmxlIChvciBzYWZlKSB0byBydW4gYSBiaW5hcnkgYnVpbHQgb24gYSBs YXRlciBvbmUsIGZvcgotICAgZXhhbXBsZSB0byBydW4gYSBiaW5hcnkgYnVpbHQgdW5kZXIgU29s YXJpcyA4IG9uIFNvbGFyaXMgMi42LiBTb21ldGltZXMKLSAgIGV2ZW4gdGhlIE9TLW9yLWxpYnJh cnkgcGF0Y2gvRUNPIGxldmVsIG1ha2VzIGEgZGlmZmVyZW5jZS4KLQotICAgQSBwYXJ0aWN1bGFy bHkgaW5zaWRpb3VzIHByb2JsZW0gb2NjdXJzIHdoZW4gYSBiaW5hcnkgd2FzIGJ1aWx0IG9uIGEK LSAgIHZlcnNpb24gb2YgdGhlIE9TIHRoYXQgaGFzIHBhdGNoZXMgZnJvbSB0aGUgdmVuZG9yIChl LmcuIHRvIGxpYnJhcmllcyk7Ci0gICBpbiBtYW55IGNhc2VzIHlvdSB3b24ndCBiZSBhYmxlIHRv IHJ1biBzdWNoIGEgYmluYXJ5IG9uIGFuIHVucGF0Y2hlZAotICAgdmVyc2lvbiBvZiB0aGUgc2Ft ZSBwbGF0Zm9ybS4KLQotICAgV2hlbiBpbiBkb3VidCwgYnVpbGQgQy1LZXJtaXQgZnJvbSB0aGUg c291cmNlIGNvZGUgb24gdGhlIGNvbXB1dGVyCi0gICB3aGVyZSBpdCBpcyB0byBiZSBydW4gKGlm IHBvc3NpYmxlISkuIElmIG5vdCwgYXNrIHVzIGZvciBhIGJpbmFyeQotICAgc3BlY2lmaWMgdG8g eW91ciBjb25maWd1cmF0aW9uLiBXZSBtaWdodCBoYXZlIG9uZSwgYW5kIGlmIHdlIGRvbid0LCB3 ZQotICAgbWlnaHQgYmUgYWJsZSB0byBmaW5kIHNvbWVib2R5IHdobyB3aWxsIGJ1aWxkIG9uZSBm b3IgeW91LgotCi0zLiBOT1RFUyBPTiBTUEVDSUZJQyBVTklYIFZFUlNJT05TCi0KLSAgIFsgWzgw XVRvcCBdIFsgWzgxXUNvbnRlbnRzIF0gWyBbODJdTmV4dCBdIFsgWzgzXVByZXZpb3VzIF0KLQot ICAgU0VDVElPTiBDT05URU5UUwotCi0gIDMuMC4gIFs4NF1DLUtFUk1JVCBPTiBQQy1CQVNFRCBV TklYRVMKLSAgMy4xLiAgWzg1XUMtS0VSTUlUIEFORCBBSVgKLSAgMy4yLiAgWzg2XUMtS0VSTUlU IEFORCBIUC1VWAotICAzLjMuICBbODddQy1LRVJNSVQgQU5EIExJTlVYCi0gIDMuNC4gIFs4OF1D LUtFUk1JVCBBTkQgTkVYVFNURVAKLSAgMy41LiAgWzg5XUMtS0VSTUlUIEFORCBRTlgKLSAgMy42 LiAgWzkwXUMtS0VSTUlUIEFORCBTQ08KLSAgMy43LiAgWzkxXUMtS0VSTUlUIEFORCBTT0xBUklT Ci0gIDMuOC4gIFs5Ml1DLUtFUk1JVCBBTkQgU1VOT1MKLSAgMy45LiAgWzkzXUMtS0VSTUlUIEFO RCBVTFRSSVgKLSAgMy4xMC4gWzk0XUMtS0VSTUlUIEFORCBVTklYV0FSRQotICAzLjExLiBbOTVd Qy1LRVJNSVQgQU5EIEFQT0xMTyBTUjEwCi0gIDMuMTIuIFs5Nl1DLUtFUk1JVCBBTkQgVEFORFkg WEVOSVggMy4wCi0gIDMuMTMuIFs5N11DLUtFUk1JVCBBTkQgT1NGLzEgKERJR0lUQUwgVU5JWCkg KFRSVTY0IFVOSVgpCi0gIDMuMTQuIFs5OF1DLUtFUk1JVCBBTkQgU0dJIElSSVgKLSAgMy4xNS4g Wzk5XUMtS0VSTUlUIEFORCBUSEUgQkVCT1gKLSAgMy4xNi4gWzEwMF1DLUtFUk1JVCBBTkQgREcv VVgKLSAgMy4xNy4gWzEwMV1DLUtFUk1JVCBBTkQgU0VRVUVOVCBEWU5JWAotICAzLjE4LiBbMTAy XUMtS0VSTUlUIEFORCB7RlJFRSxPUEVOLE5FVH1CU0QKLSAgMy4xOS4gWzEwM11DLUtFUk1JVCBB TkQgTUFDIE9TIFgKLSAgMy4yMC4gWzEwNF1DLUtFUk1JVCBBTkQgQ09IRVJFTlQKLQotICAgVGhl IGZvbGxvd2luZyBzZWN0aW9ucyBhcHBseSB0byBzcGVjaWZpYyBVbml4IHZlcnNpb25zLiBNb3N0 IG9mIHRoZW0KLSAgIGNvbnRhaW4gcmVmZXJlbmNlcyB0byBGQVFzIChGcmVxdWVudGx5IEFza2Vk IFF1ZXN0aW9ucyksIGJ1dCB0aGVzZSB0ZW5kCi0gICB0byBiZSBlcGhlbWVyYWwuIEZvciBwb3Nz aWJseSBtb3JlIGN1cnJlbnQgaW5mb3JtYXRpb24gc2VlOgotCi0gIFsxMDVdaHR0cDovL3d3dy5m YXFzLm9yZwotICBbMTA2XWh0dHA6Ly9hcGxhd3JlbmNlLmNvbS9Vbml4YXJ0L25ld3RvdW5peC5o dG1sCi0KLSAgIE9uZSB0aHJlYWQgdGhhdCBydW5zIHRocm91Z2ggbWFueSBvZiB0aGVtLCBhbmQg aW1wbGljaXRseSBwZXJoYXBzCi0gICB0aHJvdWdoIGFsbCwgY29uY2VybnMgdGhlIHByb2JsZW1z IHRoYXQgb2NjdXIgd2hlbiB0cnlpbmcgdG8gZGlhbCBvdXQKLSAgIG9uIGEgc2VyaWFsIGRldmlj ZSB0aGF0IGlzIChhbHNvKSBlbmFibGVkIGZvciBkaWFsaW5nIGluLiBUaGUKLSAgICJzb2x1dGlv bnMiIHRvIHRoaXMgcHJvYmxlbSBhcmUgbWFueSwgdmFyaWVkLCBkaXZlcnNlLCBhbmQgdXN1YWxs eQotICAgZ3Jvc3MsIGludm9sdmluZyBjb25maWd1cmluZyB0aGUgZGV2aWNlIGZvciBiaWRpcmVj dGlvbmFsIHVzZS4gVGhpcyBpcwotICAgZG9uZSBpbiBhIGhpZ2hseSBPUy1kZXBlbmRlbnQgYW5k IG9mdGVuIG9ic2N1cmUgbWFubmVyLCBhbmQgdGhlIGVmZmVjdHMKLSAgIChnb29kIG9yIGV2aWwp IGFyZSBhbHNvIGhpZ2hseSBkZXBlbmRlbnQgb24gdGhlIHBhcnRpY3VsYXIgT1MgKGFuZAotICAg Z2V0dHkgdmFyaWV0eSwgZXRjKS4gTWFueSBleGFtcGxlcyBhcmUgZ2l2ZW4gaW4gdGhlIFsxMDdd T1Mtc3BlY2lmaWMKLSAgIHNlY3Rpb25zIGJlbG93LgotCi0gICBBbiBpbXBvcnRhbnQgcG9pbnQg dG8ga2VlcCBpbiBtaW5kIGlzIHRoYXQgQy1LZXJtaXQgaXMgYQotICAgY3Jvc3MtcGxhdGZvcm0s IHBvcnRhYmxlIHNvZnR3YXJlIHByb2dyYW0uIEl0IHdhcyBub3QgZGVzaWduZWQKLSAgIHNwZWNp ZmljYWxseSBhbmQgb25seSBmb3IgeW91ciBwYXJ0aWN1bGFyIFVuaXggdmVyc2lvbiwgb3IgZm9y IHRoYXQKLSAgIG1hdHRlciwgZm9yIFVuaXggaW4gcGFydGljdWxhciBhdCBhbGwuIEl0IGFsc28g cnVucyBvbiBWTVMsIEFPUy9WUywKLSAgIFZPUywgYW5kIG90aGVyIG5vbi1Vbml4IHBsYXRmb3Jt cy4gQWxsIHRoZSBVbml4IHZlcnNpb25zIG9mIEMtS2VybWl0Ci0gICBzaGFyZSBjb21tb24gaS9v IG1vZHVsZXMsIHdpdGggY29tcGlsZS10aW1lICNpZmRlZiBjb25zdHJ1Y3Rpb25zIHVzZWQKLSAg IHRvIGFjY291bnQgZm9yIHRoZSBkaWZmZXJlbmNlcyBhbW9uZyB0aGUgbWFueSBVbml4IHByb2R1 Y3RzIGFuZAotICAgcmVsZWFzZXMuIElmIHlvdSB0aGluayB0aGF0IEMtS2VybWl0IGlzIGJlaGF2 aW5nIGJhZGx5IG9yIG1pc3NpbmcKLSAgIHNvbWV0aGluZyBvbiB5b3VyIHBhcnRpY3VsYXIgVW5p eCB2ZXJzaW9uLCB5b3UgbWlnaHQgYmUgcmlnaHQgLS0gd2UKLSAgIGNhbid0IGNsYWltIHRvIGJl IGV4cGVydCBpbiBodW5kcmVkcyBvZiBkaWZmZXJlbnQgT1MgLyB2ZXJzaW9uIC8KLSAgIGhhcmR3 YXJlIC8gbGlicmFyeSBjb21iaW5hdGlvbnMuIElmIHlvdSdyZSBhIHByb2dyYW1tZXIsIHRha2Ug YSBsb29rIGF0Ci0gICB0aGUgc291cmNlIGNvZGUgYW5kIFsxMDhdc2VuZCB1cyB5b3VyIHN1Z2dl c3RlZCBmaXhlcyBvciBjaGFuZ2VzLiBPcgotICAgZWxzZSBqdXN0IFsxMDldc2VuZCB1cyBhIHJl cG9ydCBhYm91dCB3aGF0IHNlZW1zIHRvIGJlIHdyb25nIGFuZCB3ZSdsbAotICAgc2VlIHdoYXQg d2UgY2FuIGRvLgotCi0zLjAuIEMtS0VSTUlUIE9OIFBDLUJBU0VEIFVOSVhFUwotCi0gICBbIFsx MTBdVG9wIF0gWyBbMTExXUNvbnRlbnRzIF0gWyBbMTEyXVNlY3Rpb24gQ29udGVudHMgXSBbIFsx MTNdTmV4dCBdCi0KLSAgIEFsc28gc2VlOiBbMTE0XWh0dHA6Ly93d3cucGN1bml4LmNvbS8uCi0K LSAgIFNFQ1RJT04gQ09OVEVOVFMKLQotICAzLjAuMS4gWzExNV1JbnRlcnJ1cHQgQ29uZmxpY3Rz Ci0gIDMuMC4yLiBbMTE2XVdpbmRvd3MtU3BlY2lmaWMgSGFyZHdhcmUKLSAgMy4wLjMuIFsxMTdd TW9kZW1zCi0gIDMuMC40LiBbMTE4XUNoYXJhY3RlciBTZXRzCi0gIDMuMC41LiBbMTE5XUtleWJv YXJkLCBTY3JlZW4sIGFuZCBNb3VzZSBBY2Nlc3MKLSAgMy4wLjYuIFsxMjBdTGFwdG9wcwotCi0z LjAuMS4gSW50ZXJydXB0IENvbmZsaWN0cwotCi0gICBbIFsxMjFdVG9wIF0gWyBbMTIyXUNvbnRl bnRzIF0gWyBbMTIzXVNlY3Rpb24gQ29udGVudHMgXSBbIFsxMjRdTmV4dCBdCi0KLSAgIFBDcyBh cmUgbm90IHRoZSBiZXN0IHBsYXRmb3JtIGZvciByZWFsIG9wZXJhdGluZyBzeXN0ZW1zIGxpa2Ug VW5peC4gVGhlCi0gICBhcmNoaXRlY3R1cmUgc3VmZmVycyBmcm9tIG51bWVyb3VzIGRlZmljaWVu Y2llcywgbm90IHRoZSBsZWFzdCBvZiB3aGljaAotICAgaXMgdGhlIHN0aWZsaW5nbHkgc21hbGwg bnVtYmVyIG9mIGhhcmR3YXJlIGludGVycnVwdHMgKGVpdGhlciA3IG9yIDE1LAotICAgbWFueSBv ZiB3aGljaCBhcmUgcHJlYWxsb2NhdGVkKS4gVGh1cyBhZGRpbmcgZGV2aWNlcywgdXNpbmcgbXVs dGlwbGUKLSAgIHNlcmlhbCBwb3J0cywgZXRjLCBpcyBhbHdheXMgYSBjaGFsbGVuZ2UgYW5kIG9m dGVuIGEgbmlnaHRtYXJlLiBUaGUKLSAgIGZyZWUtZm9yLWFsbCBuYXR1cmUgb2YgdGhlIFBDIG1h cmtldCBhbmQgdGhlIGxhY2sgb2Ygc3RhbmRhcmRzIGNvbWJpbmVkCi0gICB3aXRoIHRoZSBkaXZl cnNpdHkgb2YgVW5peCBPUyB2ZXJzaW9ucyBtYWtlIGl0IGRpZmZpY3VsdCB0byBmaW5kCi0gICBk cml2ZXJzIGZvciBhbnkgcGFydGljdWxhciBkZXZpY2Ugb24gYW55IHBhcnRpY3VsYXIgdmVyc2lv biBvZiBVbml4LgotCi0gICBPZiBzcGVjaWFsIGludGVyZXN0IHRvIEtlcm1pdCB1c2VycyBpcyB0 aGUgZmFjdCB0aGF0IHRoZXJlIGlzIG5vCi0gICBzdGFuZGFyZCBwcm92aXNpb24gaW4gdGhlIFBD IGFyY2hpdGVjdHVyZSBmb3IgbW9yZSB0aGFuIDIgY29tbXVuaWNhdGlvbgotICAgKHNlcmlhbCkg cG9ydHMuIENPTTMgYW5kIENPTTQgKG9yIGhpZ2hlcikgd2lsbCBub3Qgd29yayB1bmxlc3MgeW91 IChhKQotICAgZmluZCBvdXQgdGhlIGhhcmR3YXJlIGFkZHJlc3MgYW5kIGludGVycnVwdCBmb3Ig ZWFjaCwgKGIpIGZpbmQgb3V0IGhvdwotICAgdG8gcHJvdmlkZSB5b3VyIFVuaXggdmVyc2lvbiB3 aXRoIHRoaXMgaW5mb3JtYXRpb24sIGFuZCAoYykgYWN0dWFsbHkKLSAgIHNldCB1cCB0aGUgY29u ZmlndXJhdGlvbiBpbiB0aGUgVW5peCBzdGFydHVwIGZpbGVzIChvciB3aGF0ZXZlciBvdGhlcgot ICAgbWV0aG9kIGlzIHVzZWQpLiBXYXRjaCBvdXQgZm9yIGludGVycnVwdCBjb25mbGljdHMsIGVz cGVjaWFsbHkgd2hlbgotICAgdXNpbmcgYSBzZXJpYWwgbW91c2UsIGFuZCBkb24ndCBleHBlY3Qg dG8gYmUgYWJsZSB0byB1c2UgbW9yZSB0aGFuIHR3bwotICAgc2VyaWFsIHBvcnRzLgotCi0gICBU aGUgdGVjaG5pcXVlcyBmb3IgcmVzb2x2aW5nIGludGVycnVwdCBjb25mbGljdHMgYXJlIGRpZmZl cmVudCBmb3IgZWFjaAotICAgb3BlcmF0aW5nIHN5c3RlbSAoTGludXgsIE5ldEJTRCwgZXRjKS4g SW4gZ2VuZXJhbCwgdGhlcmUgaXMgYQotICAgY29uZmlndXJhdGlvbiBmaWxlIHNvbWV3aGVyZSB0 aGF0IGxpc3RzIENPTSBwb3J0cywgc29tZXRoaW5nIGxpa2UgdGhpczoKLQotICBjb20wICAgIGF0 IGlzYT8gcG9ydCAweDNmOCBpcnEgNCAgICAgICMgRE9TIENPTTEKLSAgY29tMSAgICBhdCBpc2E/ IHBvcnQgMHgyZjggaXJxIDMgICAgICAjIERPUyBDT00yCi0KLSAgIFRoZSBhZGRyZXNzIGFuZCBJ UlEgdmFsdWVzIGluIHRoaXMgZmlsZSBtdXN0IGFncmVlIHdpdGggdGhlIHZhbHVlcyBpbgotICAg dGhlIFBDIEJJT1MgYW5kIHdpdGggdGhlIHBvcnRzIHRoZW1zZWx2ZXMsIGFuZCB0aGVyZSBtdXN0 IG5vdCBiZSBtb3JlCi0gICB0aGFuIG9uZSBkZXZpY2Ugd2l0aCB0aGUgc2FtZSBpbnRlcnJ1cHQu IFVuZm9ydHVuYXRlbHksIGR1ZSB0byB0aGUKLSAgIHNtYWxsIG51bWJlciBvZiBhdmFpbGFibGUg aW50ZXJydXB0cywgaW5zdGFsbGluZyBuZXcgZGV2aWNlcyBvbiBhIFBDCi0gICBhbG1vc3QgYWx3 YXlzIGNyZWF0ZXMgYSBjb25mbGljdC4gSGVyZSBpcyBhIHR5cGljYWwgdGFsZSBmcm9tIGEgTGlu dXgKLSAgIHVzZXIgKEZyZWQgU21pdGgpIGFib3V0IGluc3RhbGxpbmcgYSB0aGlyZCBzZXJpYWwg cG9ydDoKLQotICAgICAuLi5wcm9ibGVtcyBjYW4gY29tZSBmcm9tIGEgbnVtYmVyIG9mIGNhdXNl cy4gVGhlIG9uZSBJIGZvdWdodCB3aXRoCi0gICAgIGZvciBzb21lIHRpbWUsIGFuZCBmaW5hbGx5 IGNvbnF1ZXJlZCwgd2FzIHRoYXQgbXkgbW9kZW0gaXMgb24gYW4KLSAgICAgYWRkLWluIHNlcmlh bCBwb3J0LCBjdWEzL0lSUTUuIEJ5IGRlZmF1bHQgSVJRNSBoYXMgYSB2ZXJ5IGxvdwotICAgICBw cmlvcml0eSwgYW5kIGRvZXMgbm90IGdldCBlbm91Z2ggc2VydmljZSBpbiB0aW1lcyB3aGVuIHRo ZSBzeXN0ZW0KLSAgICAgaXMgYnVzeSB0byBwcmV2ZW50IGxvc2luZyBkYXRhLiBUaGlzIGluIHR1 cm4gY2F1c2VzIG1hbnkgcmVzZW5kcy4KLSAgICAgVGhlcmUgYXJlIHR3byAnZml4ZXMnIHRoYXQg SSBrbm93IG9mLCBvbmUgaXMgdG8gcmVsYXggaGFyZCBkaXNrCi0gICAgIGludGVycnVwdCBob2dn aW5nIGJ5IHVzaW5nIHRoZSBjb3JyZWN0IHBhcmFtZXRlciB0byBoZHBhcm0sIGJ1dCBJCi0gICAg IGRvbid0IGxpa2UgdGhhdCBvbmUgYmVjYXVzZSB0aGUgaGRwYXJtIG1hbiBwYWdlIGluZGljYXRl cyBpdCBpcwotICAgICByaXNreSB0byB1c2UuIFRoZSBvdGhlciBvbmUsIHRoZSBvbmUgSSB1c2Vk LCB3YXMgdG8gZ2V0ICdpcnF0dW5lJwotICAgICBhbmQgdXNlIGl0IHRvIGdpdmUgSVJRNSB0aGUg aGlnaGVzdCBwcmlvcml0eSBpbnN0ZWFkIG9mIG5lYXJseSB0aGUKLSAgICAgbG93ZXN0LiBDb21w bGV0ZWx5IGN1cmVkIHRoZSBwcm9ibGVtLgotCi0gICBIZXJlJ3MgYW5vdGhlciBvbmUgZnJvbSBh IG5ld3Nncm91cCBwb3N0aW5nOgotCi0gICAgIEFmdGVyIG11Y2ggaGFpciBwdWxsaW5nLCBJJ3Zl IGRpc2NvdmVyZWQgd2h5IG15IHNlcmlhbCBwb3J0IHdvbid0Ci0gICAgIHdvcmsuIEFwcGFyZW50 bHkgbXkgW1BDXSBoYXMgdGhyZWUgc2VyaWFsIGRldmljZXMgKHR3byBjb21tIHBvcnRzCi0gICAg IGFuZCBhbiBJUiBwb3J0KSwgb2Ygd2hpY2ggb25seSB0d28gYXQgYSB0aW1lIGNhbiBiZSBhY3Rp dmUuIEkgbG9va2VkCi0gICAgIGluIHRoZSBCSU9TIHNldHVwIGFuZCBub3RpY2VkIHRoYXQgdGhl IElSIHBvcnQgd2FzIGFjdGl2YXRlZCwgYnV0Ci0gICAgIGRpZG4ndCByZWFsaXplIGF0IHRoZSB0 aW1lIHRoYXQgdGhpcyBtZWFudCB0aGF0IENPTTIgd2FzIHRoZXJlYnkKLSAgICAgZGUtYWN0aXZh dGVkLiBJIHR1cm5lZCBvZmYgdGhlIElSIHBvcnQgYW5kIG5vdyB0aGUgc2VyaWFsIHBvcnQgd29y a3MKLSAgICAgYXMgYWR2ZXJ0aXNlZC4KLQotMy4wLjIuIFdpbmRvd3MtU3BlY2lmaWMgSGFyZHdh cmUKLQotICAgWyBbMTI1XVRvcCBdIFsgWzEyNl1Db250ZW50cyBdIFsgWzEyN11TZWN0aW9uIENv bnRlbnRzIF0gWyBbMTI4XU5leHQgXQotICAgWyBbMTI5XVByZXZpb3VzIF0KLQotICAgVG8gY29t cGxpY2F0ZSBtYXR0ZXJzLCB0aGUgUEMgcGxhdGZvcm0gaXMgYmVjb21pbmcgaW5jcmVhc2luZ2x5 IGFuZAotICAgaW5leG9yYWJseSBXaW5kb3dzLW9yaWVudGVkLiBNb3JlIGFuZCBtb3JlIGFkZC1v biBkZXZpY2VzIGFyZSAiV2luZG93cwotICAgb25seSIgLS0gbWVhbmluZyB0aGV5IGFyZSBpbmNv bXBsZXRlIGFuZCByZWx5IG9uIHByb3ByaWV0YXJ5Ci0gICBXaW5kb3dzLWJhc2VkIHNvZnR3YXJl IGRyaXZlcnMgdG8gZG8gdGhlIGpvYnMgdGhhdCB5b3Ugd291bGQgZXhwZWN0IHRoZQotICAgZGV2 aWNlIGl0c2VsZiB0byBkby4gUENNQ0lBLCBQQ0ksIG9yICJQbHVnLW4tUGxheSIgZGV2aWNlcyBh cmUgcmFyZWx5Ci0gICBzdXBwb3J0ZWQgb24gUEMtYmFzZWQgVW5peCB2ZXJzaW9ucyBzdWNoIGFz IFNDTzsgV2lubW9kZW1zLAotICAgV2lucHJpbnRlcnMsIGFuZCB0aGUgbGlrZSBhcmUgbm90IHN1 cHBvcnRlZCBvbiBhbnkgVW5peCB2YXJpZXR5ICh3aXRoCi0gICBbMTMwXWEgZmV3IGV4Y2VwdGlv bnMpLiBUaGUgc2VsZi1wcm9jbGFpbWVkIE1pY3Jvc29mdCBQQyA5NyAob3IgbGF0ZXIpCi0gICBz dGFuZGFyZCBvbmx5IG1ha2VzIG1hdHRlcnMgd29yc2Ugc2luY2UgaXRzIG9ubHkgcHVycG9zZSB0 byBlbnN1cmUgdGhhdAotICAgUENzIGFyZSAib3B0aW1pemVkIHRvIHJ1biBXaW5kb3dzIDk1IGFu ZCBXaW5kb3dzIE5UIDQuMCBhbmQgZnV0dXJlCi0gICB2ZXJzaW9ucyBvZiB0aGVzZSBvcGVyYXRp bmcgc3lzdGVtcyIuCi0KLSAgIFdpdGggdGhlIGV4Y2VwdGlvbiBub3RlZCAodGhlIEx1Y2VudCBt b2RlbSwgcGVyaGFwcyBhIGhhbmRmdWwgb2Ygb3RoZXJzCi0gICBieSB0aGUgdGltZSB5b3UgcmVh ZCB0aGlzKSwgZHJpdmVycyBmb3IgIldpbiIgZGV2aWNlcyBhcmUgYXZhaWxhYmxlCi0gICBvbmx5 IGZvciBXaW5kb3dzLCBzaW5jZSB0aGUgV2luZG93cyBtYXJrZXQgZHdhcmZzIHRoYXQgb2YgYW55 Ci0gICBwYXJ0aWN1bGFyIFVuaXggYnJhbmQsIGFuZCBmb3IgdGhhdCBtYXR0ZXIgYWxsIFVuaXhl cyAob3IgZm9yIHRoYXQKLSAgIG1hdHRlciwgYWxsIG5vbi1XaW5kb3dzIG9wZXJhdGluZyBzeXN0 ZW1zKSBjb21iaW5lZC4gSWYgeW91ciB2ZXJzaW9uIG9mCi0gICBVbml4IChTQ08sIExpbnV4LCBC U0RJLCBGcmVlQlNELCBldGMpIGRvZXMgbm90IHN1cHBvcnQgYSBwYXJ0aWN1bGFyCi0gICBkZXZp Y2UsIHRoZW4gQy1LZXJtaXQgY2FuJ3QgdXNlIGl0IGVpdGhlci4gQy1LZXJtaXQsIGxpa2UgYW55 IFVuaXgKLSAgIGFwcGxpY2F0aW9uLCBtdXN0IGFjY2VzcyBhbGwgZGV2aWNlcyB0aHJvdWdoIGRy aXZlcnMgYW5kIG5vdCBkaXJlY3RseQotICAgYmVjYXVzZSBVbml4IGlzIGEgcmVhbCBvcGVyYXRp bmcgc3lzdGVtLgotCi0gICBEb24ndCB3YXN0ZSB0aW1lIHRoaW5raW5nIHRoYXQgeW91LCBvciBh bnlib2R5IGVsc2UsIGNvdWxkIHdyaXRlIGEKLSAgIExpbnV4IChvciBvdGhlciBVbml4KSBkcml2 ZXIgZm9yIGEgV2lubW9kZW0gb3Igb3RoZXIgIldpbiIgZGV2aWNlLgotICAgRmlyc3Qgb2YgYWxs LCB0aGVzZSBkZXZpY2VzIGdlbmVyYWxseSByZXF1aXJlIHJlYWx0aW1lIGNvbnRyb2wsIGJ1dAot ICAgc2luY2UgVW5peCBpcyBhIHRydWUgbXVsdGl0YXNraW5nIG9wZXJhdGluZyBzeXN0ZW0sIHJl YWx0aW1lIGRldmljZQotICAgY29udHJvbCBpcyBub3QgcG9zc2libGUgb3V0c2lkZSB0aGUga2Vy bmVsLiBTZWNvbmQsIHRoZSBzcGVjaWZpY2F0aW9ucwotICAgZm9yIHRoZXNlIGRldmljZXMgYXJl IHNlY3JldCBhbmQgcHJvcHJpZXRhcnksIGFuZCBlYWNoIG9uZSAoYW5kIGVhY2gKLSAgIHZlcnNp b24gb2YgZWFjaCBvbmUpIGlzIHBvdGVudGlhbGx5IGRpZmZlcmVudC4gVGhpcmQsIGEgV2lubW9k ZW0gZHJpdmVyCi0gICB3b3VsZCBiZSBlbm9ybW91c2x5IGNvbXBsZXg7IGl0IHdvdWxkIHRha2Ug eWVhcnMgdG8gd3JpdGUgYW5kIGRlYnVnLCBieQotICAgd2hpY2ggdGltZSBpdCB3b3VsZCBiZSBv YnNvbGV0ZS4KLQotICAgQSBtb3JlIHJlY2VudCBnZW5lcmF0aW9uIG9mIFBDcyAoY2lyY2EgMTk5 OS0yMDAwKSBpcyBtYXJrZXRlZCBhcwotICAgIkxlZ2FjeSBGcmVlIi4gT25lIGNhbiBvbmx5IHNw ZWN1bGF0ZSB3aGF0IHRoYXQgY291bGQgbWVhbi4gTW9zdCBsaWtlbHkKLSAgIGl0IG1lYW5zIGl0 IHdpbGwgT05MWSBydW4gdGhlIHZlcnkgbGF0ZXN0IHZlcnNpb25zIG9mIFdpbmRvd3MsIGFuZCBp cwotICAgbWFkZSBleGNsdXNpdmVseSBvZiBXaW5tb2RlbXMsIFdpbnByaW50ZXJzLCBXaW5tZW1v cnksIGFuZCBXaW4tQ1BVLWZhbnMKLSAgIChMZWdhY3kgRnJlZSBpcyBhIGNvbmNlcHQgWzEzMV1w aW9uZWVyZWQgYnkgTWljcm9zb2Z0KS4KLQotICAgQmVmb3JlIHlvdSBidXkgYSBuZXcgUEMgb3Ig YWRkLW9uIGVxdWlwbWVudCwgZXNwZWNpYWxseSBzZXJpYWwgcG9ydHMsCi0gICBpbnRlcm5hbCBt b2RlbXMsIG9yIHByaW50ZXJzLCBtYWtlIHN1cmUgdGhleSBhcmUgY29tcGF0aWJsZSB3aXRoIHlv dXIKLSAgIHZlcnNpb24gb2YgVW5peC4gVGhpcyBpcyBiZWNvbWluZyBhbiBldmVyLWdyZWF0ZXIg Y2hhbGxlbmdlOyBvbmx5IGEKLSAgIGh1Z2UgY29tcGFueSBsaWtlIE1pY3Jvc29mdCBjYW4gYWZm b3JkIHRvIGJlIGNvbnN0YW50bHkgY3Jhbmtpbmcgb3V0Ci0gICBhbmQvb3IgdmVyaWZ5aW5nIGRy aXZlcnMgZm9yIHRoZSB0aG91c2FuZHMgb2YgdmlkZW8gYm9hcmRzLCBzb3VuZAotICAgY2FyZHMs IG5ldHdvcmsgYWRhcHRlcnMsIFNDU0kgYWRhcHRlcnMsIGJ1c2VzLCBldGMsIHRoYXQgc3BldyBm b3J0aCBpbgotICAgYW4gdW5jb250cm9sbGVkIG1hbm5lciBmcm9tIGFsbCBjb3JuZXJzIG9mIHRo ZSB3b3JsZCBvbiBhIGRhaWx5IGJhc2lzLgotICAgV2l0aCB2ZXJ5IGZldyBleGNlcHRpb25zLCBt YWtlcnMgb2YgUENzIGFzc2VtYmxlIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMKLSAgIGFuZCB0aGVu IHZlcmlmeSB0aGVtIG9ubHkgd2l0aCBXaW5kb3dzLCB3aGljaCB0aGV5IG11c3QgZG8gc2luY2Ug dGhleQotICAgYXJlLCBubyBkb3VidCwgcHJlbG9hZGluZyB0aGUgUEMgd2l0aCBXaW5kb3dzLiBU byBmaW5kIGEgbW9kZXJuIFBDIHRoYXQKLSAgIGlzIGNhcGFibGUgb2YgcnVubmluZyBhIHZhcmll dHkgb2Ygbm9uLVdpbmRvd3Mgb3BlcmF0aW5nIHN5c3RlbXMgKGUuZy4KLSAgIExpbnV4LCBTQ08g T3BlblNlcnZlciwgVW5peHdhcmUsIGFuZCBTb2xhcmlzKSBpcyBhIGZvcm1pZGFibGUgY2hhbGxl bmdlCi0gICByZXF1aXJpbmcgY2FyZWZ1bCBzdHVkeSBvZiBlYWNoIHZlbmRvcidzICJjb21wYXRp YmlsaXR5IGxpc3RzIiBhbmQKLSAgIHByZWNpc2UgYXR0ZW50aW9uIHRvIGV4YWN0IGNvbXBvbmVu dCBtb2RlbCBudW1iZXJzIGFuZCByZXZpc2lvbiBsZXZlbHMuCi0KLTMuMC4zLiBNb2RlbXMKLQot ICAgWyBbMTMyXVRvcCBdIFsgWzEzM11Db250ZW50cyBdIFsgWzEzNF1TZWN0aW9uIENvbnRlbnRz IF0gWyBbMTM1XU5leHQgXQotICAgWyBbMTM2XVByZXZpb3VzIF0KLQotICAgRXh0ZXJuYWwgbW9k ZW1zIGFyZSByZWNvbW1lbmRlZDoKLQotICAgICAqIFRoZXkgZG9uJ3QgbmVlZCBhbnkgc3BlY2lh bCBkcml2ZXJzLgotICAgICAqIFlvdSBjYW4gdXNlIHRoZSBsaWdodHMgYW5kIHNwZWFrZXIgdG8g dHJvdWJsZXNob290IGRpYWxpbmcuCi0gICAgICogWW91IGNhbiBzaGFyZSB0aGVtIGFtb25nIGFs bCB0eXBlcyBvZiBjb21wdXRlcnMuCi0gICAgICogWW91IGNhbiBlYXNpbHkgdHVybiB0aGVtIG9m ZiBhbmQgb24gd2hlbiBwb3dlci1jeWNsaW5nIHNlZW1zCi0gICAgICAgd2FycmFudGVkLgotICAg ICAqIFRoZXkgYXJlIG1vcmUgbGlrZWx5IHRvIGhhdmUgbWFudWFscy4KLQotICAgSW50ZXJuYWwg UEMgbW9kZW1zIChldmVuIHdoZW4gdGhleSBhcmUgbm90IFdpbm1vZGVtcywgd2hpY2ggaXMKLSAg IGluY3JlYXNpbmdseSB1bmxpa2VseSBpbiBuZXcgUENzKSBhcmUgYWx3YXlzIHRyb3VibGUsIGVz cGVjaWFsbHkgaW4KLSAgIFVuaXguIEV2ZW4gd2hlbiB0aGV5IHdvcmsgZm9yIGRpYWxpbmcgb3V0 LCB0aGV5IG1pZ2h0IG5vdCB3b3JrIGZvcgotICAgZGlhbGluZyBpbiwgZXRjLiBQcm9ibGVtcyB0 aGF0IG9jY3VyIHdoZW4gdXNpbmcgYW4gaW50ZXJuYWwgbW9kZW0gY2FuCi0gICBhbG1vc3QgYWx3 YXlzIGJlIGVsaW1pbmF0ZWQgYnkgc3dpdGNoaW5nIHRvIGFuIGV4dGVybmFsIG9uZS4gRXZlbiB3 aGVuCi0gICBhbiBpbnRlcm5hbCBtb2RlbSBpcyBub3QgYSBXaW5tb2RlbSBvciBQbHVnLW4tUGxh eSwgaXQgaXMgb2Z0ZW4gYQotICAgbm8tbmFtZSBtb2RlbCBvZiB1bmtub3duIHF1YWxpdHkgLS0g bm90IHRoZSBzb3J0IG9mIHRoaW5nIHlvdSB3YW50Ci0gICBzaXR0aW5nIGRpcmVjdGx5IG9uIHlv dXIgY29tcHV0ZXIncyBidXMuIChFdmVuIGlmIGl0IGRvZXMgbm90IGNhdXNlCi0gICBoYXJkd2Fy ZSBwcm9ibGVtcywgaXQgcHJvYmFibHkgY2FtZSB3aXRob3V0IGEgY29tbWFuZCBsaXN0LCBzbyBu byBVbml4Ci0gICBzb2Z0d2FyZSB3aWxsIGtub3cgaG93IHRvIGNvbnRyb2wgaXQuKSBGb3IgbW9y ZSBhYm91dCBVbml4IGNvbXBhdGlibGUKLSAgIG1vZGVtcywgc2VlOgotCi0gIFsxMzddaHR0cDov L3d3dy5pZGlyLm5ldC9+Z3JvbWl0a2Mvd2lubW9kZW0uaHRtbAotCi0gICBSZW1lbWJlciB0aGF0 IFBDcywgZXZlbiBub3cgLS0gbW9yZSB0aGFuIHR3byBkZWNhZGVzIGFmdGVyIHRoZXkgd2VyZQot ICAgZmlyc3QgaW50cm9kdWNlZCAtLSBhcmUgbm90IChpbiBnZW5lcmFsKSBjYXBhYmxlIG9mIHN1 cHBvcnRpbmcgbW9yZQotICAgdGhhbiAyIHNlcmlhbCBkZXZpY2VzLiBIZXJlJ3MgYSBzaG9ydCBz dWNjZXNzIHN0b3J5IGZyb20gYSByZWNlbnQKLSAgIG5ld3Nncm91cCBwb3N0aW5nOiAiSSBoYXZl IGEgRGlhbW9uZCBTdXByYVNvbmljIElJIGR1YWwgbW9kZW0gaW4gbXkKLSAgIG1hY2hpbmUuIFdo YXQgSSBoYWQgdG8gZW5kIHVwIGRvaW5nIGlzIGJ1eWluZyBhIFBTLzIgbW91c2UgYW5kIHBvcnQg YW5kCi0gICBpbnN0YWxsIGl0LiBIYWQgdG8gZ2V0IHJpZCBvZiBteSBzZXJpYWwgbW91c2UuIEkg YWxzbyBoYWQgdG8gZGlzYWJsZQotICAgUG5QIGluIG15IGNvbXB1dGVyIGJpb3MuIEkgd2FzIGhh dmluZyBJUlEgY29uZmxpY3RzIGJldHdlZW4gbXkgc2VyaWFsCi0gICBtb3VzZSBhbmQgJ2NvbSAz Jy4gQm90aCBtb2RlbXMgd29yayBmaW5lIGZvciBtZS4gTXkgZmlyc3QgbW9kZW0gaXMKLSAgIHR0 eVMwIGFuZCBteSBzZWNvbmQgaXMgdHR5UzEuIiBTcGVjaWFsIHRoaXJkLXBhcnR5IG11bHRpcG9y dCBib2FyZHMKLSAgIHN1Y2ggYXMgWzEzOF1EaWdpQm9hcmQgYXJlIGF2YWlsYWJsZSBmb3IgY2Vy dGFpbiBVbml4IHBsYXRmb3JtcwotICAgKHR5cGljYWxseSBTQ08sIG1heWJlIExpbnV4KSB0aGF0 IGNvbWUgd2l0aCBzcGVjaWFsIHBsYXRmb3JtLXNwZWNpZmljCi0gICBkcml2ZXJzLgotCi0zLjAu NC4gQ2hhcmFjdGVyIFNldHMKLQotICAgWyBbMTM5XVRvcCBdIFsgWzE0MF1Db250ZW50cyBdIFsg WzE0MV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMTQyXU5leHQgXQotICAgWyBbMTQzXVByZXZpb3Vz IF0KLQotICAgUENzIGdlbmVyYWxseSBoYXZlIFBDIGNvZGUgcGFnZXMgc3VjaCBhcyBDUDQzNyBv ciBDUDg1MCwgYW5kIHRoZXNlIGFyZQotICAgb2Z0ZW4gdXNlZCBieSBQQy1iYXNlZCBVbml4IG9w ZXJhdGluZyBzeXN0ZW1zLCBwYXJ0aWN1bGFybHkgb24gdGhlCi0gICBjb25zb2xlLiBUaGVzZSBh cmUgc3VwcG9ydGVkIGRpcmVjdGx5IGJ5IEMtS2VybWl0J3MgU0VUIEZJTEUKLSAgIENIQVJBQ1RF Ui1TRVQgYW5kIFNFVCBURVJNSU5BTCBDSEFSQUNURVItU0VUIGNvbW1hbmRzLiBTb21lIFBDLWJh c2VkCi0gICBVbml4IHZlcnNpb25zLCBzdWNoIGFzIHJlY2VudCBSZWQgSGF0IExpbnV4IHJlbGVh c2VzLCBtaWdodCBhbHNvCi0gICBzdXBwb3J0IE1pY3Jvc29mdCBXaW5kb3dzIGNvZGUgcGFnZXMg c3VjaCBhcyBDUDEyNTIsIG9yIGV2ZW4gTGF0aW4KLSAgIEFscGhhYmV0IDEgaXRzZWxmIChwZXJo YXBzIGRpc3BsYXllZCB3aXRoIENQNDM3IGdseXBocykuIChBbmQgd29yayBpcwotICAgaW4gcHJv Z3Jlc3MgdG8gc3VwcG9ydCBVbmljb2RlIFVURjggaW4gTGludXguKQotCi0gICBDZXJ0YWluIFdp bmRvd3MgY29kZSBwYWdlcyBhcmUgbm90IHN1cHBvcnRlZCBkaXJlY3RseSBieSBDLUtlcm1pdCwg YnV0Ci0gICBzaW5jZSB0aGV5IGFyZSBJU08gTGF0aW4gQWxwaGFiZXRzIHdpdGggbm9uc3RhbmRh cmQgImV4dGVuc2lvbnMiIGluIHRoZQotICAgQzEgY29udHJvbCByYW5nZSwgeW91IGNhbiBzdWJz dGl0dXRlIHRoZSBjb3JyZXNwb25kaW5nIExhdGluIGFscGhhYmV0Ci0gICAob3Igb3RoZXIgY2hh cmFjdGVyIHNldCkgaW4gYW55IEMtS2VybWl0IGNoYXJhY3Rlci1zZXQgcmVsYXRlZAotICAgY29t bWFuZHM6Ci0KLSAgV2luZG93cyBDb2RlIFBhZ2UgICAgU3Vic3RpdHV0aW9uCi0gICBDUCAxMDA0 ICAgICAgICAgICAgICBMYXRpbi0xCi0gICBDUCAxMDUxICAgICAgICAgICAgICBIUCBSb21hbi04 Ci0KLSAgIE90aGVyIFdpbmRvd3MgY29kZSBwYWdlcyBhcmUgbW9zdGx5IChvciB0b3RhbGx5KSBp bmNvbXBhdGlibGUgd2l0aAotICAgdGhlaXIgTGF0aW4gQWxwaGFiZXQgY291bnRlcnBhcnRzIChl LmcuIENQMTI1MCBhbmQgTGF0aW4tMiksIGFuZAotICAgc2V2ZXJhbCBvZiB0aGVzZSBhcmUgYWxy ZWFkeSBzdXBwb3J0ZWQgYnkgQy1LZXJtaXQgNy4wIGFuZCBsYXRlciAoMTI1MCwKLSAgIDEyNTEs IGFuZCAxMjUyKS4KLQotMy4wLjUuIEtleWJvYXJkLCBTY3JlZW4sIGFuZCBNb3VzZSBBY2Nlc3MK LQotICAgWyBbMTQ0XVRvcCBdIFsgWzE0NV1Db250ZW50cyBdIFsgWzE0Nl1TZWN0aW9uIENvbnRl bnRzIF0gWyBbMTQ3XU5leHQgXQotICAgWyBbMTQ4XVByZXZpb3VzIF0KLQotICAgRmluYWxseSwg bm90ZSB0aGF0IGFzIGEgcmVhbCBvcGVyYXRpbmcgc3lzdGVtLCBVbml4ICh1bmxpa2UgV2luZG93 cykKLSAgIGRvZXMgbm90IHByb3ZpZGUgdGhlIGludGltYXRlIGNvbm5lY3Rpb24gdG8gdGhlIFBD IGtleWJvYXJkLCBzY3JlZW4sCi0gICBhbmQgbW91c2UgdGhhdCB5b3UgbWlnaHQgZXhwZWN0LiBV bml4IGFwcGxpY2F0aW9ucyBjYW4gbm90ICJzZWUiIHRoZQotICAga2V5Ym9hcmQsIGFuZCB0aGVy ZWZvcmUgY2FuIG5vdCBiZSBwcm9ncmFtbWVkIHRvIHVuZGVyc3RhbmQgRi1rZXlzLAotICAgRWRp dGluZyBrZXlzLCBBcnJvdyBrZXlzLCBBbHQta2V5IGNvbWJpbmF0aW9ucywgYW5kIHRoZSBsaWtl LiBUaGlzIGlzCi0gICBiZWNhdXNlOgotCi0gICAgYS4gVW5peCBpcyBhIHBvcnRhYmxlIG9wZXJh dGluZyBzeXN0ZW0sIG5vdCBvbmx5IGZvciBQQ3M7Ci0gICAgYi4gVW5peCBzZXNzaW9ucyBjYW4g Y29tZSBmcm9tIGFueXdoZXJlLCBub3QganVzdCB0aGUgUEMncyBvd24KLSAgICAgICBrZXlib2Fy ZCBhbmQgc2NyZWVuOyBhbmQ6Ci0gICAgYy4gZXZlbiB0aG91Z2ggaXQgbWlnaHQgYmUgcG9zc2li bGUgZm9yIGFuIGFwcGxpY2F0aW9uIHRoYXQgYWN0dWFsbHkKLSAgICAgICBpcyBydW5uaW5nIG9u IHRoZSBQQydzIGtleWJvYXJkIGFuZCBzY3JlZW4gdG8gYWNjZXNzIHRoZXNlIGRldmljZXMKLSAg ICAgICBkaXJlY3RseSwgdGhlcmUgYXJlIG5vIEFQSXMgKG91dHNpZGUgb2YgWCkgZm9yIHRoaXMu Ci0KLTMuMC42LiBMYXB0b3BzCi0KLSAgIFsgWzE0OV1Ub3AgXSBbIFsxNTBdQ29udGVudHMgXSBb IFsxNTFdU2VjdGlvbiBDb250ZW50cyBdIFsKLSAgIFsxNTJdUHJldmlvdXMgXQotCi0gICAoVG8g YmUgZmlsbGVkIGluIC4gLiAuKQotCi0zLjEuIEMtS0VSTUlUIEFORCBBSVgKLQotICAgWyBbMTUz XVRvcCBdIFsgWzE1NF1Db250ZW50cyBdIFsgWzE1NV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMTU2 XU5leHQgXQotICAgWyBbMTU3XVByZXZpb3VzIF0KLQotICAgU0VDVElPTiBDT05URU5UUwotCi0g IDMuMS4xLiBbMTU4XUFJWDogR2VuZXJhbAotICAzLjEuMi4gWzE1OV1BSVg6IE5ldHdvcmsgQ29u bmVjdGlvbnMKLSAgMy4xLjMuIFsxNjBdQUlYOiBTZXJpYWwgQ29ubmVjdGlvbnMKLSAgMy4xLjQu IFsxNjFdQUlYOiBGaWxlIFRyYW5zZmVyCi0gIDMuMS41LiBbMTYyXUFJWDogWHRlcm0gS2V5IE1h cAotCi0gICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBzZWU6Ci0gICAgICogWzE2M11odHRw Oi8vd3d3LmVtZXJzb24uZW1vcnkuZWR1L3NlcnZpY2VzL2FpeC1mYXEvCi0gICAgICogWzE2NF1o dHRwOi8vd3d3LmZhcXMub3JnL2ZhcXMvYnktbmV3c2dyb3VwL2NvbXAvY29tcC51bml4LmFpeC5o dG1sCi0gICAgICogWzE2NV1odHRwOi8vd3d3LmNpcy5vaGlvLXN0YXRlLmVkdS9oeXBlcnRleHQv ZmFxL3VzZW5ldC9haXgtZmFxL3RvcAotICAgICAgIC5odG1sCi0gICAgICogWzE2Nl1odHRwOi8v YWl4cGRzbGliLnNlYXMudWNsYS5lZHUvCi0gICAgICogWzE2N11odHRwOi8vd3d3LnJvb3R2Zy5u ZXQgKEFJWCBoaXN0b3J5KQotICAgICAqIFsxNjhdZnRwOi8vcnRmbS5taXQuZWR1L3B1Yi91c2Vu ZXQvbmV3cy5hbnN3ZXJzL2FpeC1mYXEvcGFydDEKLSAgICAgKiBbMTY5XWZ0cDovL21pcnJvcnMu YW9sLmNvbS9wdWIvcnRmbS91c2VuZXQtYnktaGllcmFyY2h5L2NvbXAvdW5peC9hCi0gICAgICAg aXgKLQotICAgYW5kL29yIHJlYWQgdGhlIFsxNzBdY29tcC51bml4LmFpeCBuZXdzZ3JvdXAuCi0g IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwotCi0zLjEuMS4gQUlYOiBHZW5lcmFsCi0KLSAgIFsgWzE3MV1Ub3Ag XSBbIFsxNzJdQ29udGVudHMgXSBbIFsxNzNdU2VjdGlvbiBDb250ZW50cyBdIFsgWzE3NF1OZXh0 IF0KLQotICAgQWJvdXQgQUlYIHZlcnNpb24gbnVtYmVyczogInVuYW1lIC1hIiB0ZWxscyB0aGUg dHdvLWRpZ2l0IHZlcnNpb24KLSAgIG51bWJlciwgc3VjaCBhcyAzLjIgb3IgNC4xLiBUaGUgdGhy ZWUtZGlnaXQgZm9ybSBjYW4gYmUgc2VlbiB3aXRoIHRoZQotICAgIm9zbGV2ZWwiIGNvbW1hbmQg KHRoaXMgaW5mb3JtYXRpb24gaXMgdW5hdmFpbGFibGUgYXQgdGhlIEFQSSBsZXZlbCBhbmQKLSAg IGlzIHJlcG9ydGVkbHkgb2J0YWluZWQgYnkgc2Nhbm5pbmcgdGhlIGluc3RhbGxlZCBwYXRjaCBs aXN0KS4KLSAgIFN1cHBvc2VkbHkgYWxsIHRocmVlLWRpZ2l0IHZlcnNpb25zIHdpdGhpbiB0aGUg c2FtZSB0d28tZGlnaXQgdmVyc2lvbgotICAgKGUuZy4gNC4zLjEsIDQuMy4yKSBhcmUgYmluYXJ5 IGNvbXBhdGlibGU7IGkuZS4gYSBiaW5hcnkgYnVpbHQgb24gYW55Ci0gICBvbmUgb2YgdGhlbSBz aG91bGQgcnVuIG9uIGFsbCBvdGhlcnMsIGJ1dCB3aG8ga25vd3MuIE1vc3QgQUlYIGFkdm9jYXRl cwotICAgdGVsbCB5b3UgdGhhdCBhbnkgQUlYIGJpbmFyeSB3aWxsIHJ1biBvbiBhbnkgQUlYIHZl cnNpb24gZ3JlYXRlciB0aGFuCi0gICBvciBlcXVhbCB0byB0aGUgb25lIHVuZGVyIHdoaWNoIGl0 IHdhcyBidWlsdCwgYnV0IGV4cGVyaWVuY2Ugd2l0aAotICAgQy1LZXJtaXQgc3VnZ2VzdHMgb3Ro ZXJ3aXNlLiBJdCBpcyBhbHdheXMgYmVzdCB0byBydW4gYSBiaW5hcnkgYnVpbHQKLSAgIHVuZGVy IHlvdXIgZXhhY3Qgc2FtZSBBSVggdmVyc2lvbiwgZG93biB0byB0aGUgdGhpcmQgZGVjaW1hbCBw bGFjZSwgaWYKLSAgIHBvc3NpYmxlLiBJZGVhbGx5LCBidWlsZCBpdCBmcm9tIHNvdXJjZSBjb2Rl IHlvdXJzZWxmLiBZZXMsIHRoaXMgYWR2aWNlCi0gICB3b3VsZCBiZSBlYXNpZXIgdG8gZm9sbG93 IGlmIEFJWCBjYW1lIHdpdGggYSBDIGNvbXBpbGVyLgotICBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLQotMy4x LjIuIEFJWDogTmV0d29yayBDb25uZWN0aW9ucwotCi0gICBbIFsxNzVdVG9wIF0gWyBbMTc2XUNv bnRlbnRzIF0gWyBbMTc3XVNlY3Rpb24gQ29udGVudHMgXSBbIFsxNzhdTmV4dCBdCi0gICBbIFsx NzldUHJldmlvdXMgXQotCi0gICBGaWxlIHRyYW5zZmVycyBpbnRvIEFJWCA0LjIgb3IgNC4zIHRo cm91Z2ggdGhlIEFJWCBUZWxuZXQgb3IgUmxvZ2luCi0gICBzZXJ2ZXIgaGF2ZSBiZWVuIG9ic2Vy dmVkIHRvIGZhaWwgKG9yIGFjY3VtdWxhdGUgaHVnZSBudW1iZXJzIG9mCi0gICBjb3JyZWN0YWJs ZSBlcnJvcnMsIG9yIGV2ZW4gZGlzY29ubmVjdCB0aGUgc2Vzc2lvbiksIHdoZW4gZXhhY3RseSB0 aGUKLSAgIHNhbWUga2luZCBvZiB0cmFuc2ZlcnMgaW50byBBSVggNC4xIHdvcmsgd2l0aG91dCBp bmNpZGVudCwgYXMgZG8gc3VjaAotICAgdHJhbnNmZXJzIGludG8gYWxsIG5vbi1BSVggcGxhdGZv cm1zIG9uIHRoZSBzYW1lIGtpbmQgb2YgY29ubmVjdGlvbnMKLSAgICh3aXRoIGEgZmV3IGV4Y2Vw dGlvbnMgbm90ZWQgZWxzZXdoZXJlIGluIHRoaXMgZG9jdW1lbnQpLiBBSVggNC4zLjMKLSAgIHNl ZW1zIHRvIGJlIHBhcnRpY3VsYXJseSBmcmFnaWxlIGluIHRoaXMgcmVnYXJkOyB0aGUgd2Vha25l c3Mgc2VlbXMgdG8KLSAgIGJlIGluIGl0cyBwc2V1ZG90ZXJtaW5hbCAocHR5KSBkcml2ZXIuIEhp Z2gtc3BlZWQgc3RyZWFtaW5nIHRyYW5zZmVycwotICAgd29yayBwZXJmZWN0bHksIGhvd2V2ZXIs IGlmIHRoZSBBSVggVGVsbmV0IHNlcnZlciBhbmQgcHR5IGRyaXZlciBhcmUKLSAgIHJlbW92ZWQg ZnJvbSB0aGUgcGljdHVyZTsgZS5nLCBieSB1c2luZyAic2V0IGhvc3QgKiAzMDAwIiBvbiBBSVgu Ci0KLSAgIFRoZSBwcm9ibGVtIGNhbiBiZSBjb21wbGV0ZWx5IGN1cmVkIGJ5IHJlcGxhY2luZyB0 aGUgSUJNIFRlbG5ldCBzZXJ2ZXIKLSAgIHdpdGggWzE4MF1NSVQncyBLZXJiZXJvcyBUZWxuZXQg c2VydmVyIC0tIGV2ZW4gaWYgeW91IGRvbid0IGFjdHVhbGx5Ci0gICB1c2UgdGhlIEtlcmJlcm9z IHBhcnQuIERpYWdub3NpczogQUlYIHBzZXVkb3Rlcm1pbmFscyAod2hpY2ggYXJlCi0gICBjb250 cm9sbGVkIGJ5IHRoZSBUZWxuZXQgc2VydmVyIHRvIGdpdmUgeW91IGEgbG9naW4gdGVybWluYWwg Zm9yIHlvdXIKLSAgIHNlc3Npb24pIGhhdmUgcXVpcmtzIHRoYXQgbm90IGV2ZW4gSUJNIGtub3dz IGFib3V0LiBUaGUgc2l0dWF0aW9uIHdpdGgKLSAgIEFJWCA1LnggaXMgbm90IGtub3duLCBidXQg aWYgaXQgaGFzIHRoZSBzYW1lIHByb2JsZW0sIHRoZSBzYW1lIGN1cmUgaXMKLSAgIGF2YWlsYWJs ZS4KLQotICAgTWVhbndoaWxlLCB0aGUgb25seSByZW1lZHkgd2hlbiBnb2luZyB0aHJvdWdoIHRo ZSBJQk0gVGVsbmV0IHNlcnZlciBpcwotICAgdG8gY3V0IGJhY2sgb24gS2VybWl0J3MgcGVyZm9y bWFuY2Ugc2V0dGluZ3MgdW50aWwgeW91IGZpbmQgYQotICAgY29tYmluYXRpb24gdGhhdCB3b3Jr czoKLQotICAgICAqIFNFVCBTVFJFQU1JTkcgT0ZGCi0gICAgICogU0VUIFdJTkRPVy1TSVpFIHNt YWxsLW51bWJlcgotICAgICAqIFNFVCB7IFNFTkQsIFJFQ0VJVkUgfSBQQUNLRVQtTEVOR1RIIHNt YWxsLW51bWJlcgotICAgICAqIFNFVCBQUkVGSVhJTkcgeyBDQVVUSU9VUywgQUxMIH0KLQotICAg SW4gc29tZSBjYXNlcywgc2V2ZXJlIGN1dGJhY2tzIGFyZSByZXF1aXJlZCwgZS5nLiB0aG9zZSBp bXBsaWVkIGJ5IHRoZQotICAgUk9CVVNUIGNvbW1hbmQuIEFsc28gYmUgc3VyZSB0aGF0IHRoZSBB SVggQy1LZXJtaXQgb24gdGhlIHJlbW90ZSBlbmQKLSAgIGhhcyAic2V0IGZsb3cgbm9uZSIgKHdo aWNoIGlzIHRoZSBkZWZhdWx0KS4gTk9URTogTWF5YmUgdGhpcyBvbmUgY2FuCi0gICBhbHNvIGJl IGFkZHJlc3NlZCBieSBzdGFydGluZyBBSVggdGVsbmV0ZCB3aXRoIHRoZSAiLWEiIG9wdGlvbi4g VGhlCi0gICBzaXR1YXRpb24gd2l0aCBTU0ggY29ubmVjdGlvbnMgaXMgbm90IGtub3duLCBidXQg YWxtb3N0IGNlcnRhaW5seSB0aGUKLSAgIHNhbWUuCi0KLSAgIFdoZW4gdGhlc2UgcHJvYmxlbXMg b2NjdXIsIHRoZSBzeXN0ZW0gZXJyb3IgbG9nIGNvbnRhaW5zOgotCi0gIExBQkVMOiAgICAgICAg ICBUVFlfVFRZSE9HCi0gIElERU5USUZJRVI6ICAgICAwODczQ0Y5RgotICBUeXBlOiAgICAgICAg ICAgVEVNUAotICBSZXNvdXJjZSBOYW1lOiAgcHRzLzEKLQotICBEZXNjcmlwdGlvbgotICBUVFlI T0cgT1ZFUi1SVU4KLQotICBGYWlsdXJlIENhdXNlcwotICBFWENFU1NJVkUgTE9BRCBPTiBQUk9D RVNTT1IKLQotICBSZWNvbW1lbmRlZCBBY3Rpb25zCi0gIFJFRFVDRSBTWVNURU0gTE9BRC4KLSAg UkVEVUNFIFNFUklBTCBQT1JUIEJBVUQgUkFURQotCi0gICBCZWZvcmUgbGVhdmluZyB0aGUgdG9w aWMgb2YgQUlYIHBzZXVkb3Rlcm1pbmFscywgaXQgaXMgdmVyeSBsaWtlbHkgdGhhdAotICAgS2Vy bWl0J3MgUFRZIGFuZCBTU0ggY29tbWFuZHMgZG8gbm90IHdvcmsgd2VsbCBlaXRoZXIsIGZvciB0 aGUgc2FtZQotICAgcmVhc29uIHRoYXQgVGVsbmV0IGNvbm5lY3Rpb25zIGludG8gQUlYIGRvbid0 IHdvcmsgd2VsbC4gQSBicmllZiB0ZXN0Ci0gICB3aXRoICJwdHkgcmxvZ2luIHNvbWVob3N0IiBn b3QgYSBwZXJmZWN0bHkgdXNhYmxlIHRlcm1pbmFsIChDT05ORUNUKQotICAgc2Vzc2lvbiwgYnV0 IGZpbGUtdHJhbnNmZXIgcHJvYmxlbXMgbGlrZSB0aG9zZSBqdXN0IGRlc2NyaWJlZC4KLQotICAg UmVwb3J0ZWRseSwgdGVsbmV0IGZyb20gQUlYIDQuMS1wb2ludC1zb21ldGhpbmcgdG8gbm9uLVRl bG5ldCBwb3J0cwotICAgZG9lcyBub3Qgd29yayB1bmxlc3MgdGhlIHBvcnQgbnVtYmVyIGlzIGlu IHRoZSAvZXRjL3NlcnZpY2VzIGZpbGU7IGl0J3MKLSAgIG5vdCBjbGVhciBmcm9tIHRoZSByZXBv cnQgd2hldGhlciB0aGlzIGlzIGEgcHJvYmxlbSB3aXRoIEFJWCBUZWxuZXQgKGluCi0gICB3aGlj aCBjYXNlIGl0IHdvdWxkIG5vdCBhZmZlY3QgS2VybWl0KSwgb3Igd2l0aCB0aGUgc29ja2V0cyBs aWJyYXJ5IChpbgotICAgd2hpY2ggY2FzZSBpdCB3b3VsZCkuIFRoZSBwdXJwb3J0ZWQgZml4IGlz IElCTSBBUEFSIElYNjE1MjMuCi0KLSAgIEMtS2VybWl0IFNFVCBIT1NUIG9yIFRFTE5FVCBmcm9t IG9uZSBBSVggMy4xIChvciBlYXJsaWVyKSBzeXN0ZW0gdG8KLSAgIGFub3RoZXIgd29uJ3Qgd29y ayByaWdodCB1bmxlc3MgeW91IHNldCB5b3VyIGxvY2FsIHRlcm1pbmFsIHR5cGUgdG8KLSAgIHNv bWV0aGluZyBvdGhlciB0aGFuIEFJWFRFUk0uIFdoZW4geW91ciB0ZXJtaW5hbCB0eXBlIGlzIEFJ WFRFUk0sIEFJWAotICAgVEVMTkVUIHNlbmRzIHR3byBlc2NhcGVzIHdoZW5ldmVyIHlvdSB0eXBl IG9uZSwgYW5kIHRoZSBBSVggdGVsbmV0Ci0gICBzZXJ2ZXIgc3dhbGxvd3Mgb25lIG9mIHRoZW0u IFRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSAiaGZ0IgotICAgZGV2aWNlLiBUaGlz IGJlaGF2aW9yIHNlZW1zIHRvIGJlIHJlbW92ZWQgaW4gQUlYIDMuMiBhbmQgbGF0ZXIuCi0gIF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwotCi0zLjEuMy4gQUlYOiBTZXJpYWwgQ29ubmVjdGlvbnMKLQotICAgWyBb MTgxXVRvcCBdIFsgWzE4Ml1Db250ZW50cyBdIFsgWzE4M11TZWN0aW9uIENvbnRlbnRzIF0gWyBb MTg0XU5leHQgXQotICAgWyBbMTg1XVByZXZpb3VzIF0KLQotICAgSW4gQUlYIDMsIDQsIG9yIDUs IEMtS2VybWl0IHdvbid0IGJlIGFibGUgdG8gInNldCBsaW5lIC9kZXYvdHR5MCIgKG9yCi0gICBh bnkgb3RoZXIgZGlhbG91dCBkZXZpY2UpIGlmIHlvdSBoYXZlbid0IGluc3RhbGxlZCAiY3UiIG9y ICJ1dWNwIiBvbgotICAgeW91ciBzeXN0ZW0sIGJlY2F1c2UgaW5zdGFsbGluZyB0aGVzZSBpcyB3 aGF0IGNyZWF0ZXMgdGhlIFVVQ1AgbG9ja2ZpbGUKLSAgIGRpcmVjdG9yeS4gSWYgU0VUIExJTkUg Y29tbWFuZHMgYWx3YXlzIHJlc3VsdCBpbiAiU29ycnksIGFjY2VzcyB0byBsb2NrCi0gICBkZW5p ZWQiLCBldmVuIHdoZW4gQy1LZXJtaXQgaGFzIGJlZW4gZ2l2ZW4gdGhlIHNhbWUgb3duZXIsIGdy b3VwLCBhbmQKLSAgIHBlcm1pc3Npb25zIGFzIGN1OgotCi0gIC1yLXNyLXhyLXggICAxIHV1Y3Ag ICAgIHV1Y3AgICAgICAgNjcyMTYgSnVsIDI3IDE5OTkgIGN1Ci0KLSAgIGFuZCBldmVuIHdoZW4g eW91IHJ1biBpdCBhcyByb290LCB0aGVuIHlvdSBtdXN0IGdvIGJhY2sgYW5kIGluc3RhbGwKLSAg ICJjdSIgZnJvbSB5b3VyIEFJWCBpbnN0YWxsYXRpb24gbWVkaWEuCi0KLSAgIEFjY29yZGluZyB0 byBJQk0ncyAiRnJvbSBTdHJlbmd0aCB0byBTdHJlbmd0aCIgZG9jdW1lbnQgKDIxIEFwcmlsCi0g ICAxOTk4KSwgaW4gQUlYIDQuMiBhbmQgbGF0ZXIgIkFzeW5jIHN1cHBvcnRzIHNwZWVkcyBvbiBu YXRpdmUgc2VyaWFsCi0gICBwb3J0cyB1cCB0byAxMTUuMmticHMiLiBIb3dldmVyLCBubyBBUEkg aXMgZG9jdW1lbnRlZCB0byBhY2hpZXZlIHNlcmlhbAotICAgc3BlZWRzIGhpZ2hlciB0aGFuIDM4 NDAwIGJwcy4gQXBwYXJlbnRseSB0aGUgd2F5IHRvIGRvIHRoaXMgLS0gd2hpY2gKLSAgIG1pZ2h0 IG9yIG1pZ2h0IG5vdCB3b3JrIG9ubHkgb24gdGhlIElCTSAxMjgtcG9ydCBtdWx0aXBsZXhlciAt LSBpczoKLQotICBjeG1hLXN0dHkgZmFzdGJhdWQgL2Rldi90dHkwCi0KLSAgIHdoaWNoLCBhY2Nv cmRpbmcgdG8gIm1hbiBjeG1hLXN0dHkiOgotCi0gICAgIGZhc3RiYXVkIEFsdGVycyB0aGUgYmF1 ZCByYXRlIHRhYmxlLCBzbyA1MCBiYXVkIGJlY29tZXMgNTc2MDAgYmF1ZC4KLSAgICAgLWZhc3Ri YXVkIFJlc3RvcmVzIHRoZSBiYXVkIHJhdGUgdGFibGUsIHNvIDU3NjAwIGJhdWQgYmVjb21lcyA1 MAotICAgICBiYXVkLgotCi0gICBQcmVzdW1hYmx5IChidXQgbm90IGNlcnRhaW5seSkgdGhpcyBl eHRyYXBvbGF0ZXMgdG8gMTEwICJiYXVkIiBiZWNvbWVzCi0gICA3NjgwMCBicHMsIGFuZCAxNTAg YmVjb21lcyAxMTUyMDAgYnBzLiBTbyB0byB1c2UgaGlnaCBzZXJpYWwgc3BlZWRzIGluCi0gICBB SVggNC4yIG9yIDQuMywgdGhlIHRyaWNrIHdvdWxkIGJlIHRvIGdpdmUgdGhlICJjeG1hLXN0dHkg ZmFzdGJhdWQiCi0gICBjb21tYW5kIGZvciB0aGUgZGVzaXJlZCB0dHkgZGV2aWNlIGJlZm9yZSBz dGFydGluZyBLZXJtaXQsIGFuZCB0aGVuIHVzZQotICAgInNldCBzcGVlZCA1MCIsICJzZXQgc3Bl ZWQgMTEwIiwgb3IgInNldCBzcGVlZCAxNTAiIHRvIHNlbGVjdCA1NjcwMCwKLSAgIDc2ODAwLCBv ciAxMTUyMDAgYnBzLiBJdCBpcyBub3Qga25vd24gd2hldGhlciBjeG1hLXN0dHkgcmVxdWlyZXMK LSAgIHByaXZpbGVnZS4KLQotICAgQWNjb3JkaW5nIHRvIG9uZSByZXBvcnQsICJGdXJ0aGVyIGlu dmVzdGlnYXRpb24gd2l0aCBJQk0gc2VlbXMgdG8KLSAgIGluZGljYXRlIHRoYXQgdGhlIG9ubHkg aGFyZHdhcmUgY2FwYWJsZSBvZiBkb2luZyB0aGlzIGlzIHRoZSAxMjgtcG9ydAotICAgbXVsdGlw bGV4b3Igd2l0aCBvbmUgKG9yIG1vcmUpIG9mIHRoZSAxNiBwb3J0IGJyZWFrb3V0IGNhYmxlcyAo RW5oYW5jZWQKLSAgIFJlbW90ZSBBc3luYyBOb2RlIDE2LVBvcnQgRUlBLTIzMikuIFdlIGFyZSBs b29raW5nIGF0IGFib3V0IENETiQ0LDAwMAotICAgaW4gaGFyZHdhcmUganVzdCB0byBoYW5nIGEg NTZrYiBtb2RlbSBvbiB0aGVyZS4gT2YgY291cnNlLCB3ZSBjYW4gdGhlbgotICAgaGFuZyAxNSBt b3JlLCBpZiB3ZSB3YW50LiBUaGlzIGhhcmR3YXJlIGNvbWJvIGlzIGRlc2NyaWJlZCB0byBiZSBn b29kCi0gICB0byAyMzAuNGticHMuIgotCi0gICBBbm90aGVyIHJlcG9ydCBzYXlzIChxdW90ZSBm cm9tIEFJWCBuZXdzZ3JvdXAsIE1hcmNoIDE5OTkpOgotCi0gICAgIFRoZSBtYWNoaW5lIHR5cGUg YW5kIHRoZSBhZGFwdGVyIGRldGVybWluZSB0aGUgc3BlZWQgdGhhdCBvbmUgY2FuCi0gICAgIGFj dHVhbGx5IHJ1biBhdC4gVGhlIG9sZGVyIG1pY3JvY2hhbm5lbCBtYWNoaW5lcyBoYXZlIG11Y2gg c2xvd2VyCi0gICAgIGNyeXN0YWwgZnJlcXVlbmNpZXMgYW5kIG1heSBub3QgZ28gYmV5b25kIDc2 LDgwMC4gQSBmZWF0dXJlIHB1dCBpbnRvCi0gICAgIEFJWCA0MjEgYWxsb3dzIG9uZSB0byBrZXkg aW4gbm9uLVBPU0lYIGJhdWQgcmF0ZXMgYW5kIGlmIHRoZSB1YXJ0Ci0gICAgIGNhbiBzdXBwb3J0 IHRoYXQgc3BlZWQsIGl0IHdpbGwgZ2V0IHNldC4gdGhpcyBhcHBsaWVzIGFsc28gdG8gNDNwJ3MK LSAgICAgYW5kIGJleW9uZC4gMTE1MjAwIGlzIHRoZSBtYXggZm9yIHRoZSA0M1AncyBuYXRpdmUg c2VyaWFsIHBvcnQuIEFzCi0gICAgIGNyeXRhbCBmcmVxdWVuY2llcyBjb250aW51ZSB0byBpbmNy ZWFzZSwgdGhlIGJ1aWx0LWluIHNlcmlhbCBwb3J0cwotICAgICBzcGVlZHMgd2lsbCBpbXByb3Zl LiBUbyB1c2UgJ3V1Y3AnIG9yICdhdGUnIGF0IHRoZSBoaWdoZXIgYmF1ZAotICAgICByYXRlcywg Y29uZmlndXJlIHRoZSBwb3J0IGZvciB0aGUgZGVzaXJlZCBzcGVlZCwgYnV0IHNldCB0aGUgc3Bl ZWQKLSAgICAgb2YgdXVjcCBvciBhdGUgdG8gNTAuIEFueSBub24tUE9TSVggc3BlZWRzIHNldCBp biB0aGUgdHR5cwotICAgICBjb25maWd1cmF0aW9uIHdpbGwgdGhlIGJlIHVzZWQuIEluIHRoZSBj YXNlIG9mIHRoZSAxMjgtcG9ydCBhZGFwdGVycwotICAgICBvciB0aGUgSVNBIDgtcG9ydCBvciBQ Q0kgOC1wb3J0IGFkYXB0ZXIsIHRoZXJlIGFyZSBvbmx5IGEgZmV3IGhpZ2hlcgotICAgICBiYXVk IHJhdGVzLgotCi0gICAgYS4gQ2hhbmdlIHRoZSBwb3J0IHRvIGVuYWJsZSBoaWdoIGJhdWQgcmF0 ZXM6Ci0gICAgICAgICAgKyBCNTAgZm9yIDU3NjAwCi0gICAgICAgICAgKyBCNzUgZm9yIDc2ODAw Ci0gICAgICAgICAgKyBCMTEwIGZvciAxMTUyMDAKLSAgICAgICAgICArIEIyMDAgZm9yIDIzMDAw MAotICAgIGIuIGNoZGV2IC1sIHR0eVggLWEgZmFzdGJhdWQ9ZW5hYmxlCi0gICAgICAgICAgKyBG b3IgdGhlIDEyOCBwb3J0cyBvcmlnaW5hbCBzdHlsZSByYW5zLCBvbmx5IDU3NjAwIGJwcyBpcwot ICAgICAgICAgICAgc3VwcG9ydGVkLgotICAgICAgICAgICsgRm9yIHRoZSBuZXcgZW5oYW5jZWQg UkFOcywgdXAgdG8gMjMwS2JwcyBpcyBzdXBwb3J0ZWQuCi0KLSAgIEluIEFJWCAyLjIuMSBvbiB0 aGUgUlQgUEMgd2l0aCB0aGUgOC1wb3J0IG11bHRpcGxleGVyLCBTRVQgU1BFRUQgMzg0MDAKLSAg IGdpdmVzIDk2MDAgYnBzLCBidXQgU0VUIFNQRUVEIDE5MjAwIGdpdmVzIDE5MjAwIChvbiB0aGUg YnVpbHQtaW4gUzEKLSAgIHBvcnQpLgotCi0gICBOb3RlIHRoYXQgc29tZSBSUy82MDAwcyAoZS5n LiB0aGUgSUJNIFBvd2VyU2VydmVyIDMyMCkgaGF2ZSBub25zdGFuZGFyZAotICAgcmVjdGFuZ3Vs YXIgMTAtcGluIHNlcmlhbCBwb3J0czsgdGhlIERCLTI1IGNvbm5lY3RvciBpcyBOT1QgYSBzZXJp YWwKLSAgIHBvcnQ7IGl0IGlzIGEgcGFyYWxsZWwgcHJpbnRlciBwb3J0LiBJQk0gY2FibGVzIGFy ZSByZXF1aXJlZCBmb3IgdGhlCi0gICBzZXJpYWwgcG9ydHMsIChUaGUgSUJNIFJUIFBDIGFsc28g aGFkIHJlY3Rhbmd1bGFyIHNlcmlhbCBwb3J0cyAtLQotICAgcGVyaGFwcyB0aGUgc2FtZSBhcyB0 aGVzZSwgcGVyaGFwcyBkaWZmZXJlbnQuKQotCi0gICBJZiB5b3UgZGlhbCBpbiB0byBBSVggdGhy b3VnaCBhIG1vZGVtIHRoYXQgaXMgY29ubmVjdGVkIGRpcmVjdGx5IHRvIGFuCi0gICBBSVggcG9y dCAoZS5nLiBvbiB0aGUgMTI4LXBvcnQgbXVsdGlwbGV4ZXIpIGFuZCBmaW5kIHRoYXQgZGF0YSBp cyBsb3N0LAotICAgZXNwZWNpYWxseSB3aGVuIHVwbG9hZGluZyBmaWxlcyB0byB0aGUgQUlYIHN5 c3RlbSAoYW5kIHN5c3RlbSBlcnJvcgotICAgbG9ncyByZXBvcnQgYnVmZmVyIG92ZXJydW5zIG9u IHRoZSBwb3J0KToKLQotICAgIDEuIE1ha2Ugc3VyZSB0aGUgcG9ydCBhbmQgbW9kZW0gYXJlIEJP VEggY29uZmlndXJlZCBmb3IgaGFyZHdhcmUKLSAgICAgICAoUlRTL0NUUykgZmxvdyBjb250cm9s LiBUaGUgcG9ydCBpcyBjb25maWd1cmVkIHNvbWV3aGVyZSBpbiB0aGUKLSAgICAgICBzeXN0ZW0g Y29uZmlndXJhdGlvbiwgb3V0c2lkZSBvZiBLZXJtaXQuCi0gICAgMi4gVGVsbCBDLUtlcm1pdCB0 byAic2V0IGZsb3cga2VlcCI7IGV4cGVyaW1lbnRhdGlvbiBzaG93cyB0aGF0IFNFVAotICAgICAg IEZMT1cgUlRTL0NUUyBoYXMgbm8gZWZmZWN0IHdoZW4gdXNlZCBpbiByZW1vdGUgbW9kZSAoaS5l LiBvbgotICAgICAgIC9kZXYvdHR5LCBhcyBvcHBvc2VkIHRvIGEgc3BlY2lmeSBwb3J0IGRldmlj ZSkuCi0gICAgMy4gRml4ZXMgZm9yIGJ1Z3MgaW4gdGhlIG9yaWdpbmFsIEFJWCA0LjIgdHR5IChz ZXJpYWwgaS9vKSBzdXBwb3J0IGFuZAotICAgICAgIG90aGVyIEFJWCBidWdzIGFyZSBhdmFpbGFi bGUgZnJvbSBJQk0gYXQ6Ci0gIFsxODZdaHR0cDovL3NlcnZpY2Uuc29mdHdhcmUuaWJtLmNvbS9y czYwMDAvCi0KLSAgICAgICBEb3dubG9hZHMgLT4gU29mdHdhcmUgRml4ZXMgLT4gRG93bmxvYWQg Rml4RGlzdCBnZXRzIGFuIGFwcGxpY2F0aW9uCi0gICAgICAgZm9yIGxvb2tpbmcgdXAga25vd24g cHJvYmxlbXMuCi0KLSAgIE1hbnkgcHJvYmxlbXMgcmVwb3J0ZWQgd2l0aCBiaWRpcmVjdGlvbmFs IHRlcm1pbmFsIGxpbmVzIG9uIEFJWCAzLjIueAotICAgb24gdGhlIFJTLzYwMDAuIFdvcmthcm91 bmQ6IGRvbid0IHVzZSBiaWRpcmVjdGlvbmFsIHRlcm1pbmFsIGxpbmVzLCBvcgotICAgd3JpdGUg YSBzaGVsbC1zY3JpcHQgd3JhcHBlciBmb3IgS2VybWl0IHRoYXQgdHVybnMgZ2V0dHkgb2ZmIG9u IHRoZQotICAgbGluZSBiZWZvcmUgc3RhcnRpbmcgS2VybWl0LCBvciBiZWZvcmUgS2VybWl0IGF0 dGVtcHRzIHRvIGRvIHRoZSBTRVQKLSAgIExJTkUuIChCdXQgbm90ZTogVGhlc2UgcHJvYmxlbXMg TUlHSFQgYmUgZml4ZWQgaW4gQy1LZXJtaXQgNi4wIGFuZAotICAgbGF0ZXIuKSBUaGUgY29tbWFu ZHMgZm9yIHR1cm5pbmcgZ2V0dHkgb2ZmIGFuZCBvbiAocmVzcGVjdGl2ZWx5KSBhcmUKLSAgIC91 c3Ivc2Jpbi9wZGlzYWJsZSBhbmQgL3Vzci9zYmluL3BlbmFibGUuCi0gIF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwotCi0zLjEuNC4gQUlYOiBGaWxlIFRyYW5zZmVyCi0KLSAgIFsgWzE4N11Ub3AgXSBbIFsxODhd Q29udGVudHMgXSBbIFsxODldU2VjdGlvbiBDb250ZW50cyBdIFsgWzE5MF1OZXh0IF0KLSAgIFsg WzE5MV1QcmV2aW91cyBdCi0KLSAgIEV2aWRlbnRseSBBSVggNC4zIChJIGRvbid0IGtub3cgYWJv dXQgZWFybGllciB2ZXJzaW9ucykgZG9lcyBub3QgYWxsb3cKLSAgIG9wZW4gZmlsZXMgdG8gYmUg b3ZlcndyaXR0ZW4uIFRoaXMgY2FuIGNhdXNlIEtlcm1pdCB0cmFuc2ZlcnMgdG8gZmFpbAotICAg d2hlbiBGSUxFIENPTExJU0lPTiBpcyBPVkVSV1JJVEUsIHdoZXJlIHRoZXkgbWlnaHQgd29yayBv biBvdGhlciBVbml4Ci0gICB2YXJpZXRpZXMgb3IgZWFybGllciBBSVggdmVyc2lvbnMuCi0KLSAg IFRyYW5zZmVyIG9mIGJpbmFyeSAtLSBhbmQgbWF5YmUgZXZlbiB0ZXh0IC0tIGZpbGVzIGNhbiBm YWlsIGluIEFJWCBpZgotICAgdGhlIEFJWCB0ZXJtaW5hbCBoYXMgcGFydGljdWxhciBwb3J0IGNh biBoYXZlIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24KLSAgIGRvbmUgZm9yIGl0IGJ5IHRoZSB0 dHkgZHJpdmVyLiBUaGUgZm9sbG93aW5nIGFkdmljZSBmcm9tIGEKLSAgIGtub3dsZWRnZWFibGUg QUlYIHVzZXI6Ci0KLSAgICAgW1RoaXMgZmVhdHVyZV0gaGFzIHRvIGJlIGNoZWNrZWQgKGFuZCBz ZXQvY2xlYXJlZCkgd2l0aCBhIHNlcGFyYXRlCi0gICAgIGNvbW1hbmQsIHVuZm9ydHVuYXRlbHkg c3R0eSBkb2Vzbid0IGhhbmRsZSB0aGlzLiBUbyBjaGVjazoKLQotICAkIHNldG1hcHMKLSAgaW5w dXQgbWFwOiBub25lIGluc3RhbGxlZAotICBvdXRwdXQgbWFwOiBub25lIGluc3RhbGxlZAotCi0g ICAgIElmIGl0IHNheXMgYW55dGhpbmcgb3RoZXIgdGhhbiAibm9uZSBpbnN0YWxsZWQiIGZvciBl aXRoZXIgb25lLCBpdAotICAgICBpcyBsaWtlbHkgdG8gY2F1c2UgYSBwcm9ibGVtIHdpdGgga2Vy bWl0LiBUbyBnZXQgcmlkIG9mIGluc3RhbGxlZAotICAgICBtYXBzOgotCi0gICQgc2V0bWFwcyAt dCBOT01BUAotCi0gICAgIEhvd2V2ZXIsIEkgc2VlbSB0byByZWNhbGwgdGhhdCB3aXRoIHNvbWUg dmVyc2lvbnMgb2YgQUlYIGJlZm9yZQotICAgICAzLjIuNSwgb25seSByb290IGNvdWxkIGNoYW5n ZSB0aGUgc2V0dGluZy4gSSdtIG5vdCBzdXJlIHdoYXQKLSAgICAgdmVyc2lvbnMgLSBpdCBtaWdo dCBoYXZlIG9ubHkgYmVlbiB1bmRlciBBSVggMy4xIHRoYXQgdGhpcyB3YXMgdHJ1ZS4KLSAgICAg QXQgbGVhc3Qgd2l0aCBBSVggMy4yLjUgYW4gb3JkaW5hcnkgdXNlciBjYW4gc2V0IG9yIGNsZWFy IHRoZSBtYXBzLgotCi0gICBPbiB0aGUgc2FtZSBwcm9ibGVtLCBhbm90aGVyIGtub3dsZWRnZWFi bGUgQUlYIHVzZXIgc2F5czoKLQotICAgICBUaGUgd2F5IHRvIGdldCBpbmZvcm1hdGlvbiBvbiB0 aGUgTkxTIG1hcHBpbmcgdW5kZXIgQUlYICgzLjIuNQotICAgICBhbnl3YXkpIGlzIGFzIGZvbGxv d3MuIEZyb20gdGhlIGNvbW1hbmQgbGluZSB0eXBlOgotCi0gIGxzYXR0ciAtbCB0dHkjIC1hIGlt YXAgLWEgb21hcCAtRSAtSAotCi0gICAgIFJlcGxhY2UgdGhlIHR0eSBudW1iZXIgZm9yIHRoZSBu dW1iZXIgc2lnbiBhYm92ZS4gVGhpcyB3aWxsIGdpdmUgYQotICAgICBodW1hbiByZWFkYWJsZSBv dXRwdXQgb2YgdGhlIHNldHRpbmdzIHRoYXQgbG9va3MgbGlrZSB0aGlzOwotCi0gICMgbHNhdHRy IC1sIHR0eTIgLWEgaW1hcCAtYSBvbWFwIC1FIC1ICi0gIGF0dHJpYnV0ZSB2YWx1ZSBkZXNjcmlw dGlvbiAgICAgdXNlcl9zZXR0YWJsZQotCi0gIGltYXAgICAgICBub25lICBJTlBVVCBtYXAgZmls ZSAgVHJ1ZQotICBvbWFwICAgICAgbm9uZSAgT1VUUFVUIG1hcCBmaWxlIFRydWUKLQotICAgICBJ ZiB5b3UgY2hhbmdlIHRoZSAtSCB0byBhIC1PLCB5b3UgZ2V0IG91dHB1dCB0aGF0IGNhbiBlYXNp bHkgYmUKLSAgICAgcHJvY2Vzc2VkIGJ5IGFub3RoZXIgcHJvZ3JhbSBvciBhIHNoZWxsIHNjcmlw dCwgZm9yIGV4YW1wbGU6Ci0KLSAgIyBsc2F0dHIgLWwgdHR5MiAtYSBpbWFwIC1hIG9tYXAgLUUg LU8KLSAgI2ltYXA6b21hcAotICBub25lOm5vbmUKLQotICAgICBUbyBjaGFuZ2UgdGhlIHNldHRp bmdzIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgdGhlIGNoZGV2IGNvbW1hbmQgaXMKLSAgICAgdXNl ZCB3aXRoIHRoZSBmb2xsb3dpbmcgc3ludGF4LgotCi0gIGNoZGV2IC1sIHR0eSMgLWEgaW1hcD0n bm9uZScgLWEgb21hcD0nbm9uZScKLQotICAgICBBZ2FpbiBzdWJzdGl0dXRpbmcgdGhlIGFwcHJv cHJpYXRlIHR0eSBwb3J0IG51bWJlciBmb3IgdGhlIG51bWJlcgotICAgICBzaWduLCAibm9uZSIg YmVpbmcgdGhlIHZhbHVlIHdlIHdhbnQgZm9yIEMtS2VybWl0LiBPZiBjb3Vyc2UsIHRoZQotICAg ICBhYm92ZSBjYW4gYWxzbyBiZSBjaGFuZ2VkIGJ5IHVzaW5nIHRoZSBTTUlUIHV0aWxpdHkgYW5k IHNlbGVjdGluZwotICAgICBkZXZpY2VzIC0gdHR5LiAoLi4uZW5kIHF1b3RlKQotCi0gICBJbiAy MDA3IEkgbm90aWNlZCB0aGUgZm9sbG93aW5nIG9uIGhpZ2gtc3BlZWQgU1NIIGNvbm5lY3Rpb25z IChsb2NhbAotICAgbmV0d29yaykgaW50byBBSVggNS4zOiBzdHJlYW1pbmcgdHJhbnNmZXJzIGlu dG8gQUlYIGp1c3QgZG9uJ3Qgd29yay4KLSAgIFRoZSBzYW1lIG1pZ2h0IGJlIHRydWUgZm9yIFRl bG5ldCBjb25uZWN0aW9uczsgSSBoYXZlIG5vIHdheSB0byBjaGVjay4KLSAgIEl0IGFwcGVhcnMg dGhhdCB0aGUgQUlYIHB0eSBkcml2ZXIgYW5kL29yIHRoZSBTU0ggKGFuZCBwb3NzaWJseSBUZWxu ZXQpCi0gICBzZXJ2ZXIgYXJlIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmluZyBhIHN0ZWFkeSBzdHJl YW0gb2YgaW5jb21pbmcgZGF0YSBhdAotICAgaGlnaCBzcGVlZC4gU29sdXRpb246IHVua25vd24u IFdvcmthcm91bmQ6IHB1dCAic2V0IHN0cmVhbWluZyBvZmYiIGluCi0gICB5b3VyIC5rZXJtcmMg b3IgLm15a2VybXJjIGZpbGUsIHNpbmNlIHN0cmVhbWluZyBpcyB0aGUgZGVmYXVsdCBmb3IKLSAg IG5ldHdvcmsgY29ubmVjdGlvbnMuCi0gIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwotCi0zLjEuNS4gQUlYOiBY dGVybSBLZXkgTWFwCi0KLSAgIFsgWzE5Ml1Ub3AgXSBbIFsxOTNdQ29udGVudHMgXSBbIFsxOTRd U2VjdGlvbiBDb250ZW50cyBdIFsKLSAgIFsxOTVdUHJldmlvdXMgXQotCi0gICBIZXJlIGlzIGEg c2FtcGxlIGNvbmZpZ3VyYXRpb24gZm9yIHNldHRpbmcgdXAgYW4geHRlcm0ga2V5Ym9hcmQgZm9y Ci0gICBWVDIyMCBvciBoaWdoZXIgdGVybWluYWwgZW11bGF0aW9uIG9uIEFJWCwgY291cnRlc3kg b2YgQnJ1Y2UgTW9tamlhbiwKLSAgIERyZXhlbCBIaWxsLCBQQS4gWHRlcm0gY2FuIGJlIHN0YXJ0 ZWQgbGlrZSB0aGlzOgotCi0gIHh0ZXJtICRYVEVSTUZMQUdTICtydyArc2IgK2xzICRAIC10bSAn ZXJhc2UgXj8gaW50ciBeYycgLW5hbWUgdnQyMjAgXAotICAgICAgICAgIC10aXRsZSB2dDIyMCAt dG4geHRlcm0tMjIwICIkQCIgJgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgWFRlcm0qVlQxMDAu VHJhbnNsYXRpb25zOiAjb3ZlcnJpZGUgXG5cCi0gICAgICAgICAgPEtleT5Ib21lOiBzdHJpbmco MHgxYikgc3RyaW5nKCJbM34iKSBcbiBcCi0gICAgICAgICAgPEtleT5FbmQ6IHN0cmluZygweDFi KSBzdHJpbmcoIls0fiIpIFxuCi0gIHZ0MjIwKlZUMTAwLlRyYW5zbGF0aW9uczogI292ZXJyaWRl IFxuXAotICBTaGlmdCAgIDxLZXk+RjE6IHN0cmluZygiWzIzfiIpIFxuIFwKLSAgU2hpZnQgICA8 S2V5PkYyOiBzdHJpbmcoIlsyNH4iKSBcbiBcCi0gIFNoaWZ0ICAgPEtleT5GMzogc3RyaW5nKCJb MjV+IikgXG4gXAotICBTaGlmdCAgIDxLZXk+RjQ6IHN0cmluZygiWzI2fiIpIFxuIFwKLSAgU2hp ZnQgICA8S2V5PkY1OiBzdHJpbmcoIltLfiIpIFxuIFwKLSAgU2hpZnQgICA8S2V5PkY2OiBzdHJp bmcoIlszMX4iKSBcbiBcCi0gIFNoaWZ0ICAgPEtleT5GNzogc3RyaW5nKCJbMzF+IikgXG4gXAot ICBTaGlmdCAgIDxLZXk+Rjg6IHN0cmluZygiWzMyfiIpIFxuIFwKLSAgU2hpZnQgICA8S2V5PkY5 OiBzdHJpbmcoIlszM34iKSBcbiBcCi0gIFNoaWZ0ICAgPEtleT5GMTA6IHN0cmluZygiWzM0fiIp IFxuIFwKLSAgU2hpZnQgICA8S2V5PkYxMTogc3RyaW5nKCJbMjh+IikgXG4gXAotICBTaGlmdCAg IDxLZXk+RjEyOiBzdHJpbmcoIlsyOX4iKSBcbiBcCi0gICAgICAgICAgPEtleT5QcmludDogc3Ry aW5nKDB4MWIpIHN0cmluZygiWzMyfiIpIFxuXAotICAgICAgICAgIDxLZXk+Q2FuY2VsOiBzdHJp bmcoMHgxYikgc3RyaW5nKCJbMzN+IikgXG5cCi0gICAgICAgICAgPEtleT5QYXVzZTogc3RyaW5n KDB4MWIpIHN0cmluZygiWzM0fiIpIFxuXAotICAgICAgICAgIDxLZXk+SW5zZXJ0OiBzdHJpbmco MHgxYikgc3RyaW5nKCJbMn4iKSBcblwKLSAgICAgICAgICA8S2V5PkRlbGV0ZTogc3RyaW5nKDB4 MWIpIHN0cmluZygiWzN+IikgXG5cCi0gICAgICAgICAgPEtleT5Ib21lOiBzdHJpbmcoMHgxYikg c3RyaW5nKCJbMX4iKSBcblwKLSAgICAgICAgICA8S2V5PkVuZDogc3RyaW5nKDB4MWIpIHN0cmlu ZygiWzR+IikgXG5cCi0gICAgICAgICAgPEtleT5Qcmlvcjogc3RyaW5nKDB4MWIpIHN0cmluZygi WzV+IikgXG5cCi0gICAgICAgICAgPEtleT5OZXh0OiBzdHJpbmcoMHgxYikgc3RyaW5nKCJbNn4i KSBcblwKLSAgICAgICAgICA8S2V5PkJhY2tTcGFjZTogc3RyaW5nKDB4N2YpIFxuXAotICAgICAg ICAgIDxLZXk+TnVtX0xvY2s6IHN0cmluZygweDFiKSBzdHJpbmcoIk9QIikgXG5cCi0gICAgICAg ICAgPEtleT5LUF9EaXZpZGU6IHN0cmluZygweDFiKSBzdHJpbmcoIk9sIikgXG5cCi0gICAgICAg ICAgPEtleT5LUF9NdWx0aXBseTogc3RyaW5nKDB4MWIpIHN0cmluZygiT20iKSBcblwKLSAgICAg ICAgICA8S2V5PktQX1N1YnRyYWN0OiBzdHJpbmcoMHgxYikgc3RyaW5nKCJPUyIpIFxuXAotICAg ICAgICAgIDxLZXk+S1BfQWRkOiBzdHJpbmcoMHgxYikgc3RyaW5nKCJPTSIpIFxuXAotICAgICAg ICAgIDxLZXk+S1BfRW50ZXI6IHN0cmluZygweDFiKSBzdHJpbmcoIk9NIikgXG5cCi0gICAgICAg ICAgPEtleT5LUF9EZWNpbWFsOiBzdHJpbmcoMHgxYikgc3RyaW5nKCJPbiIpIFxuXAotICAgICAg ICAgIDxLZXk+S1BfMDogc3RyaW5nKDB4MWIpIHN0cmluZygiT3AiKSBcblwKLSAgICAgICAgICA8 S2V5PktQXzE6IHN0cmluZygweDFiKSBzdHJpbmcoIk9xIikgXG5cCi0gICAgICAgICAgPEtleT5L UF8yOiBzdHJpbmcoMHgxYikgc3RyaW5nKCJPciIpIFxuXAotICAgICAgICAgIDxLZXk+S1BfMzog c3RyaW5nKDB4MWIpIHN0cmluZygiT3MiKSBcblwKLSAgICAgICAgICA8S2V5PktQXzQ6IHN0cmlu ZygweDFiKSBzdHJpbmcoIk90IikgXG5cCi0gICAgICAgICAgPEtleT5LUF81OiBzdHJpbmcoMHgx Yikgc3RyaW5nKCJPdSIpIFxuXAotICAgICAgICAgIDxLZXk+S1BfNjogc3RyaW5nKDB4MWIpIHN0 cmluZygiT3YiKSBcblwKLSAgICAgICAgICA8S2V5PktQXzc6IHN0cmluZygweDFiKSBzdHJpbmco Ik93IikgXG5cCi0gICAgICAgICAgPEtleT5LUF84OiBzdHJpbmcoMHgxYikgc3RyaW5nKCJPeCIp IFxuXAotICAgICAgICAgIDxLZXk+S1BfOTogc3RyaW5nKDB4MWIpIHN0cmluZygiT3kiKSBcbgot Ci0gICEgICAgICAgPEtleT5VcDogc3RyaW5nKDB4MWIpIHN0cmluZygiW0EiKSBcblwKLSAgISAg ICAgICA8S2V5PkRvd246IHN0cmluZygweDFiKSBzdHJpbmcoIltCIikgXG5cCi0gICEgICAgICAg PEtleT5SaWdodDogc3RyaW5nKDB4MWIpIHN0cmluZygiW0MiKSBcblwKLSAgISAgICAgICA8S2V5 PkxlZnQ6IHN0cmluZygweDFiKSBzdHJpbmcoIltEIikgXG5cCi0KLSAgKnZpc3VhbEJlbGw6ICAg IHRydWUKLSAgKnNhdmVMaW5lczogICAgIDEwMDAKLSAgKmN1cnNlc2VtdWw6ICAgIHRydWUKLSAg KnNjcm9sbEtleTogICAgIHRydWUKLSAgKnNjcm9sbEJhcjogICAgIHRydWUKLQotMy4yLiBDLUtF Uk1JVCBBTkQgSFAtVVgKLQotICAgWyBbMTk2XVRvcCBdIFsgWzE5N11Db250ZW50cyBdIFsgWzE5 OF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMTk5XU5leHQgXQotICAgWyBbMjAwXVByZXZpb3VzIF0K LQotICAgU0VDVElPTiBDT05URU5UUwotCi0gIDMuMi4wLiBbMjAxXUNvbW1vbiBQcm9ibGVtcwot ICAzLjIuMS4gWzIwMl1CdWlsZGluZyBDLUtlcm1pdCBvbiBIUC1VWAotICAzLjIuMi4gWzIwM11G aWxlIFRyYW5zZmVyCi0gIDMuMi4zLiBbMjA0XURpYWxpbmcgT3V0IGFuZCBVVUNQIExvY2tmaWxl cyBpbiBIUC1VWAotICAzLjIuNC4gWzIwNV1Ob3RlcyBvbiBTcGVjaWZpYyBIUC1VWCBSZWxlYXNl cwotICAzLjIuNS4gWzIwNl1IUC1VWCBhbmQgWC4yNQotCi0gICBSRUZFUkVOQ0VTCi0KLSAgIEZv ciBmdXJ0aGVyIGluZm9ybWF0aW9uLCByZWFkIHRoZSBbMjA3XWNvbXAuc3lzLmhwLmhwdXggbmV3 c2dyb3VwLgotCi0gICBDLUtlcm1pdCBpcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBIUC1VWCBv cGVyYXRpbmcgc3lzdGVtIGJ5IGNvbnRyYWN0Ci0gICBiZXR3ZWVuIEhld2xldHQgUGFja2FyZCBh bmQgQ29sdW1iaWEgVW5pdmVyc2l0eSBmb3IgSFAtVVggMTAuMDAgYW5kCi0gICBsYXRlci4gRWFj aCBsZXZlbCBvZiBIUC1VWCBpbmNsdWRlcyBhIGZyZXNobHkgYnVpbHQgQy1LZXJtaXQgYmluYXJ5 IGluCi0gICAvYmluL2tlcm1pdCwgd2hpY2ggc2hvdWxkIHdvcmsgY29ycmVjdGx5LiBCaW5hcmll cyBidWlsdCBmb3IgcmVndWxhcgotICAgSFAtVVggbWF5IGJlIHVzZWQgb24gVHJ1c3RlZCBIUC1V WCBhbmQgdmljZS12ZXJzYSwgZXhjZXB0IGZvciB1c2UgYXMKLSAgIElLU0QgYmVjYXVzZSBvZiB0 aGUgZGlmZmVyZW50IGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMuCi0KLSAgIE5vdGUgdGhhdCBIUCBk b2VzIG5vdCB1cGRhdGUgQy1LZXJtaXQgdmVyc2lvbnMgZm9yIGFueSBidXQgaXRzIG1vc3QKLSAg IGN1cnJlbnQgSFAtVVggcmVsZWFzZS4gU28sIGZvciBleGFtcGxlLCBIUC1VWCAxMC4yMCBoYXMg Qy1LZXJtaXQgNi4wOwotICAgMTEuMDAgaGFzIEMtS2VybWl0IDcuMCwgYW5kIDExLjIyIGhhcyA4 LjAuIE9mIGNvdXJzZSwgYXMgd2l0aCBhbGwKLSAgIHNvZnR3YXJlLCBvbGRlciBLZXJtaXQgdmVy c2lvbnMgaGF2ZSBidWdzIChzdWNoIGFzIGJ1ZmZlciBvdmVyZmxvdwotICAgdnVsbmVyYWJpbGl0 aWVzKSB0aGF0IGFyZSBmaXhlZCBpbiBsYXRlciB2ZXJzaW9ucy4gRnJvbSB0aW1lIHRvIHRpbWUs Ci0gICBIUCBkaXNjb3ZlcnMgb25lIG9mIHRoZXNlIChsb25nLWFnbyBmaXhlZCkgYnVncyBhbmQg aXNzdWVzIGEgc2VjdXJpdHkKLSAgIGFsZXJ0IGZvciB0aGUgb2xkZXIgT1MncywgcmVjb21tZW5k aW5nIHNvbWUgZHJhY29uaWFuIG1lYXN1cmUgdG8gYXZvaWQKLSAgIHRoZSBwcm9ibGVtLiBUaGUg dHJ1ZSBmaXggaW4gZWFjaCBzaXR1YXRpb24gaXMgdG8gaW5zdGFsbCB0aGUgY3VycmVudAotICAg cmVsZWFzZSBvZiBDLUtlcm1pdC4KLQotMy4yLjAuIENvbW1vbiBQcm9ibGVtcwotCi0gICBbIFsy MDhdVG9wIF0gWyBbMjA5XUNvbnRlbnRzIF0gWyBbMjEwXVNlY3Rpb24gQ29udGVudHMgXSBbIFsy MTFdTmV4dCBdCi0KLSAgIFNvbWUgSFAgd29ya3N0YXRpb25zIGhhdmUgYSBCUkVBSy9SRVNFVCBr ZXkuIElmIHlvdSBoaXQgdGhpcyBrZXkgd2hpbGUKLSAgIEMtS2VybWl0IGlzIHJ1bm5pbmcsIGl0 IG1pZ2h0IGtpbGwgb3Igc3VzcGVuZCB0aGUgQy1LZXJtaXQgcHJvY2Vzcy4KLSAgIEMtS2VybWl0 IGFybXMgaXRzZWxmIGFnYWluc3QgdGhlc2Ugc2lnbmFscywgYnV0IGV2aWRlbnRseSB0aGUKLSAg IEJSRUFLL1JFU0VUIGtleSBpcyAtLSBhdCBsZWFzdCBpbiBzb21lIGNpcmN1bXN0YW5jZXMsIG9u IGNlcnRhaW4gSFAtVVgKLSAgIHZlcnNpb25zIC0tIHRvbyBwb3dlcmZ1bCB0byBiZSBjYXVnaHQu IChTb21lIHJlcG9ydCB0aGF0IHRoZSBmaXJzdAotICAgQlJFQUsvUkVTRVQgc2hvd3MgdXAgYXMg U0lHSU5UIGFuZCBpcyBjYXVnaHQgYnkgQy1LZXJtaXQncyBmb3JtZXIKLSAgIFNJR0lOVCBoYW5k bGVyIGV2ZW4gd2hlbiBTSUdJTlQgaXMgY3VycmVudGx5IHNldCB0byBTSUdfSUdOOyB0aGUgc2Vj b25kCi0gICBraWxscyBLZXJtaXQ7IG90aGVyIHJlcG9ydHMgc3VnZ2VzdCB0aGUgZmlyc3QgQlJF QUsvUkVTRVQgc2VuZHMgYQotICAgU0lHVFNUUCAoc3VzcGVuZCBzaWduYWwpIHRvIEtlcm1pdCwg d2hpY2ggaXQgY2F0Y2hlcyBhbmQgc3VzcGVuZHMKLSAgIGl0c2VsZi4gWW91IGNhbiB0ZWxsIEMt S2VybWl0IHRvIGlnbm9yZSBzdXNwZW5kIHNpZ25hbHMgd2l0aCBTRVQKLSAgIFNVU1BFTkQgT0ZG LiBZb3UgY2FuIHRlbGwgQy1LZXJtaXQgdG8gaWdub3JlIFNJR0lOVCB3aXRoIFNFVCBDT01NQU5E Ci0gICBJTlRFUlJVUFRJT04gT0ZGLiBJdCBpcyBub3Qga25vd24gd2hldGhlciB0aGVzZSBjb21t YW5kcyBhbHNvIGdyYW50Ci0gICBpbW11bml0eSB0byB0aGUgQlJFQUsvUkVTRVQga2V5IChvbmUg cmVwb3J0IHN0YXRlcyB0aGF0IHdpdGggU0VUCi0gICBTVVNQRU5EIE9GRiwgdGhlIEJSRUFLL1JF U0VUIGtleSBpcyBpZ25vcmVkIHRoZSBmaXJzdCBmb3VyIHRpbWVzLCBidXQKLSAgIGtpbGxzIEtl cm1pdCB0aGUgNXRoIHRpbWUpLiBJbiBhbnkgY2FzZToKLQotICAgIDEuIElmIHRoaXMga2V5IGlz IG1hcHBlZCB0byBTSUdJTlQgb3IgU0lHVFNUUCwgQy1LZXJtaXQgY2F0Y2hlcyBvcgotICAgICAg IGlnbm9yZXMgaXQsIGRlcGVuZGluZyBvbiB3aGljaCBtb2RlIChDT05ORUNULCBjb21tYW5kLCBl dGMpIEtlcm1pdAotICAgICAgIGlzIGluLgotICAgIDIuIElmIGl0IGNhdXNlcyBIUC1VWCB0byBr aWxsIEMtS2VybWl0LCB0aGVyZSBpcyBub3RoaW5nIEMtS2VybWl0IGNhbgotICAgICAgIGRvIHRv IHByZXZlbnQgaXQuCi0KLSAgIFdoZW4gSFAtVVggaXMgb24gdGhlIHJlbW90ZSBlbmQgb2YgdGhl IGNvbm5lY3Rpb24sIGl0IGlzIGVzc2VudGlhbCB0aGF0Ci0gICBIUC1VWCBDLUtlcm1pdCBiZSBj b25maWd1cmVkIGZvciBYb24vWG9mZiBmbG93IGNvbnRyb2wgKHRoaXMgaXMgdGhlCi0gICBkZWZh dWx0LCBidXQgaW4gY2FzZSB5b3UgY2hhbmdlIGl0IGFuZCB0aGVuIGV4cGVyaWVuY2UgZmlsZS10 cmFuc2ZlcgotICAgZmFpbHVyZXMsIHRoaXMgaXMgYSBsaWtlbHkgcmVhc29uKS4KLQotMy4yLjEu IEJ1aWxkaW5nIEMtS2VybWl0IG9uIEhQLVVYCi0KLSAgIFsgWzIxMl1Ub3AgXSBbIFsyMTNdQ29u dGVudHMgXSBbIFsyMTRdU2VjdGlvbiBDb250ZW50cyBdIFsgWzIxNV1OZXh0IF0KLSAgIFsgWzIx Nl1QcmV2aW91cyBdCi0KLSAgICAgVGhpcyBzZWN0aW9uIGFwcGxpZXMgbWFpbmx5IHRvIG9sZCAo cHJlLTEwLjIwKSBIUC1VWCB2ZXJzaW9uIG9uIG9sZCwKLSAgICAgc2xvdywgYW5kL29yIG1lbW9y eS1jb25zdHJhaW5lZCBoYXJkd2FyZS4KLQotICAgRHVyaW5nIHRoZSBDLUtlcm1pdCA2LjAgQmV0 YSBjeWNsZSwgc29tZXRoaW5nIGhhcHBlbmVkIHRvIGNrY3Byby53IChvciwKLSAgIG1vcmUgcHJl Y2lzZWx5LCB0aGUgY2tjcHJvLmMgZmlsZSB0aGF0IGlzIGdlbmVyYXRlZCBmcm9tIGl0KSB3aGlj aAotICAgY2F1c2VzIEhQIG9wdGltaXppbmcgY29tcGlsZXJzIHVuZGVyIEhQLVVYIHZlcnNpb25z IDcuMCBhbmQgOC4wCi0gICAoYXBwYXJlbnRseSBvbiBhbGwgcGxhdGZvcm1zKSBhcyB3ZWxsIGFz IHVuZGVyIEhQLVVYIDkuMCBvbiBNb3Rvcm9sYQotICAgcGxhdGZvcm1zIG9ubHksIHRvIGJsb3cg dXAuIEluIHZlcnNpb25zIDcuMCBhbmQgOC4wIHRoZSBwcm9ibGVtIGhhcwotICAgc3ByZWFkIHRv IG90aGVyIG1vZHVsZXMuCi0KLSAgIFRoZSBzeW1wdG9tcyB2YXJ5IGZyb20gdGhlIHN5c3RlbSBn cmluZGluZyB0byBhIGhhbHQsIHRvIHRoZSBjb21waWxlcgotICAgY3Jhc2hpbmcsIHRvIHRoZSBj b21waWxhdGlvbiBvZiB0aGUgY2tjcHJvLmMgbW9kdWxlIHRha2luZyB2ZXJ5IGxvbmcKLSAgIHBl cmlvZHMgb2YgdGltZSwgbGlrZSA5IGhvdXJzLiBUaGlzIHByb2JsZW0gaXMgaGFuZGxlZCBieSBj b21waWxpbmcgdGhlCi0gICBtb2R1bGVzIHRoYXQgdGlja2xlIGl0IHdpdGhvdXQgb3B0aW1pemF0 aW9uOyB0aGUgbmV3IEMtS2VybWl0IG1ha2VmaWxlCi0gICB0YWtlcyBjYXJlIG9mIHRoaXMsIGFu ZCBzaG93cyBob3cgdG8gZG8gaXQgaW4gY2FzZSB0aGUgc2FtZSB0aGluZwotICAgYmVnaW5zIGhh cHBlbmluZyB3aXRoIG90aGVyIG1vZHVsZXMuCi0KLSAgIE9uIEhQLVVYIDkuMCwgYSBrZXJuZWwg cGFyYW1ldGVyLCBtYXhkc2l6IChtYXhpbXVtIHByb2Nlc3MgZGF0YSBzZWdtZW50Ci0gICBzaXpl KSwgc2VlbXMgdG8gYmUgaW1wb3J0YW50LiBPbiBNb3Rvcm9sYSBzeXN0ZW1zLCBpdCBpcyAxNk1C IGJ5Ci0gICBkZWZhdWx0LCB3aGVyZWFzIG9uIFJJU0Mgc3lzdGVtcyB0aGUgZGVmYXVsdCBpcyBt dWNoIGJpZ2dlci4gSW5jcmVhc2luZwotICAgbWF4ZHNpeiB0byBhYm91dCA4ME1CIHNlZW1zIHRv IG1ha2UgdGhlIHByb2JsZW0gZ28gYXdheSwgYnV0IG9ubHkgaWYKLSAgIHRoZSBzeXN0ZW0gYWxz byBoYXMgYSBsb3Qgb2YgcGh5c2ljYWwgbWVtb3J5IC0tIG90aGVyd2lzZSBpdCBzd2FwcwotICAg aXRzZWxmIHRvIGRlYXRoLgotCi0gICBUaGUgb3B0aW1pemluZyBjb21waWxlciBtaWdodCBjb21w bGFpbiBhYm91dCAic29tZSBvcHRpbWl6YXRpb25zCi0gICBza2lwcGVkIiBvbiBjZXJ0YWluIG1v ZHVsZXMsIGR1ZSB0byBsYWNrIG9mIHNwYWNlIGF2YWlsYWJsZSB0byB0aGUKLSAgIG9wdGltaXpl ci4gWW91IGNhbiBpbmNyZWFzZSB0aGUgc3BhY2UgKHRoZSBpbmNhbnRhdGlvbiBkZXBlbmRzIG9u IHRoZQotICAgcGFydGljdWxhciBjb21waWxlciB2ZXJzaW9uIC0tIHNlZSB0aGUgWzIxN11tYWtl ZmlsZSksIGJ1dCBkb2luZyBzbwotICAgdGVuZHMgdG8gbWFrZSB0aGUgY29tcGlsYXRpb25zIHRh a2UgYSBtdWNoIGxvbmdlciB0aW1lLiBGb3IgZXhhbXBsZSwKLSAgIHRoZSAiaHB1eDAxMDBvKyIg bWFrZWZpbGUgdGFyZ2V0IGFkZHMgdGhlICIrT25vbGltaXQiIGNvbXBpbGVyIGZsYWcsCi0gICBh bmQgYWJvdXQgYW4gaG91ciB0byB0aGUgY29tcGlsZSB0aW1lIG9uIGFuIEhQLTkwMDAvNzMwLiBC dXQgaXQgKmRvZXMqCi0gICBwcm9kdWNlIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhYm91dCAxMEsg c21hbGxlciA6LSkKLQotICAgSW4gdGhlIG1ha2VmaWxlLCBhbGwgSFAtVVggZW50cmllcyBhdXRv bWF0aWNhbGx5IHNraXAgb3B0aW1pemF0aW9uIG9mCi0gICBwcm9ibGVtYXRpYyBtb2R1bGVzLgot Ci0zLjIuMi4gRmlsZSBUcmFuc2ZlcgotCi0gICBbIFsyMThdVG9wIF0gWyBbMjE5XUNvbnRlbnRz IF0gWyBbMjIwXVNlY3Rpb24gQ29udGVudHMgXSBbIFsyMjFdTmV4dCBdCi0gICBbIFsyMjJdUHJl dmlvdXMgXQotCi0gICBUZWxuZXQgY29ubmVjdGlvbnMgaW50byBIUC1VWCB2ZXJzaW9ucyB1cCB0 byBhbmQgaW5jbHVkaW5nIDExLjExIChhbmQKLSAgIHBvc3NpYmx5IDExLjIwKSB0ZW5kIG5vdCB0 byBsZW5kIHRoZW1zZWx2ZXMgdG8gZmlsZSB0cmFuc2ZlciBkdWUgdG8KLSAgIGxpbWl0YXRpb25z LCByZXN0cmljdGlvbnMsIGFuZC9vciBidWdzIGluIHRoZSBIUC1VWCBUZWxuZXQgc2VydmVyCi0g ICBhbmQvb3IgcHNldWRvdGVybWluYWwgKHB0eSkgZHJpdmVyLgotCi0gICBJbiBDLUtlcm1pdCA2 LjAgKDE5OTYpIGFuIHVuZXhwZWN0ZWQgc2xvd25lc3Mgd2FzIG5vdGVkIHdoZW4KLSAgIHRyYW5z ZmVycmluZyBmaWxlcyBvdmVyIGxvY2FsIEV0aGVybmV0IGNvbm5lY3Rpb25zIHdoZW4gYW4gSFAt VVggc3lzdGVtCi0gICAoOS4wNSBvciAxMC4wMCkgd2FzIG9uIHRoZSByZW1vdGUgZW5kLiBUaGUg Zm9sbG93aW5nIGV4cGVyaW1lbnQgd2FzCi0gICBjb25kdWN0ZWQgdG8gZGV0ZXJtaW5lIHRoZSBj YXVzZS4gQy1LZXJtaXQgNi4wIHdhcyB1c2VkOyB0aGUgc2l0dWF0aW9uCi0gICBpcyBzbGlnaHRs eSBiZXR0ZXIgdXNpbmcgQy1LZXJtaXQgNy4wJ3Mgc3RyZWFtaW5nIGZlYXR1cmUgYW5kIEhQLVVY Ci0gICAxMC4yMCBvbiB0aGUgZmFyIGVuZC4KLQotICAgVGhlIHN5c3RlbXMgd2VyZSBIUC1VWCAx MC4wMCAob24gNzE1LzMzKSBhbmQgU3VuT1MgNC4xLjMgKG9uIFNwYXJjLTIwKSwKLSAgIGJvdGgg b24gdGhlIHNhbWUgbG9jYWwgMTBNYnBzIEV0aGVybmV0LCBwYWNrZXQgbGVuZ3RoIDQwOTYsIHBh cml0eQotICAgbm9uZSwgY29udHJvbCBwcmVmaXhpbmcgImNhdXRpb3VzIiwgdXNpbmcgb25seSBs b2NhbCBkaXNrcyBvbiBlYWNoCi0gICBtYWNoaW5lIC0tIG5vIE5GUy4gSW4gdGhlIEMtS2VybWl0 IDYuMCAoQUNLL05BSykgY2FzZSwgdGhlIHdpbmRvdyBzaXplCi0gICB3YXMgMjA7IGluIHRoZSBz dHJlYW1pbmcgY2FzZSB0aGVyZSBpcyBubyB3aW5kb3cgc2l6ZSAoaS5lLiBpdCBpcwotICAgaW5m aW5pdGUpLiBUaGUgdGVzdCBmaWxlIHdhcyBDLUtlcm1pdCBleGVjdXRhYmxlLCB0cmFuc2ZlcnJl ZCBpbiBiaW5hcnkKLSAgIG1vZGUuIENvbmRpdGlvbnMgd2VyZSByZWxhdGl2ZWx5IHBvb3I6IHRo ZSBTdW4gYW5kIHRoZSBsb2NhbCBuZXQKLSAgIGhlYXZpbHkgbG9hZGVkOyB0aGUgSFAgc3lzdGVt IGlzIG9sZCwgc2xvdywgYW5kIG1lbW9yeS1jb25zdHJhaW5lZC4KLQotICAgICAgICAgICAgICAg ICAgIEMtS2VybWl0IDYuMC4uLiAgICBDLUtlcm1pdCA3LjAuLi4KLSBMb2NhbCAgICBSZW1vdGUg ICBBQ0svTkFLLi4uLi4uLi4gICAgU3RyZWFtaW5nLi4uLi4uCi0gQ2xpZW50ICAgU2VydmVyICAg U2VuZCAgICBSZWNlaXZlICAgIFNlbmQgICAgUmVjZWl2ZQotICBTdW4gICAgICBIUCAgICAgICAz NiAgICAgICAxOCAgICAgICAgNjQgICAgICAgMTgKLSAgSFAgICAgICAgSFAgICAgICAgMjUgICAg ICAgMTUgICAgICAgIDM3ICAgICAgIDE2Ci0gIEhQICAgICAgIFN1biAgICAgIDc3ICAgICAgIDgz ICAgICAgIDExOCAgICAgICA5MgotICBTdW4gICAgICBTdW4gICAgICA2MCAgICAgICA2MCAgICAg ICAxNTMgICAgICAxNTgKLQotICAgU28gd2hlbmV2ZXIgSFAgaXMgdGhlIHJlbW90ZSB3ZSBoYXZl IHBvb3IgcGVyZm9ybWFuY2UuIFdoeT8KLQotICAgICAqIENoYW5naW5nIGZpbGUgZGlzcGxheSB0 byBDUlQgaGFzIG5vIGVmZmVjdCAoc28gaXQncyBub3QgdGhlIGN1cnNlcwotICAgICAgIGxpYnJh cnkgb24gdGhlIGNsaWVudCBzaWRlKS4KLSAgICAgKiBDaGFuZ2luZyBUQ1AgUkVDVi1CVUZGRVIg b3IgU0VORC1CVUZGRVIgaGFzIGxpdHRsZSBlZmZlY3QuCi0gICAgICogVGVsbGluZyB0aGUgY2xp ZW50IHRvIG1ha2UgYSBiaW5hcnktbW9kZSBjb25uZWN0aW9uIChTRVQgVEVMTkVUCi0gICAgICAg QklOQVJZIFJFUVVFU1RFRCwgd2hpY2ggc3VjY2Vzc2Z1bGx5IG5lZ290aWF0ZXMgYSBiaW5hcnkK LSAgICAgICBjb25uZWN0aW9uKSBoYXMgbm8gZWZmZWN0IG9uIHRocm91Z2hwdXQuCi0KLSAgIEJV VC4uLiBJZiBJIHN0YXJ0IEhQLVVYIEMtS2VybWl0IGFzIGEgVENQIHNlcnZpY2U6Ci0KLSAgc2V0 IGhvc3QgKiAzMDAwCi0gIHNlcnZlcgotCi0gICBhbmQgdGhlbiBmcm9tIHRoZSBjbGllbnQgInNl dCBob3N0IHh4eCAzMDAwIiwgSSBnZXQ6Ci0KLSAgICAgICAgICAgICAgICAgICBDLUtlcm1pdCA2 LjAuLi4gICAgQy1LZXJtaXQgNy4wLi4uCi0gTG9jYWwgICAgUmVtb3RlICAgQUNLL05BSy4uLi4u Li4uICAgIFN0cmVhbWluZy4uLi4uLgotIENsaWVudCAgIFNlcnZlciAgIFNlbmQgICAgUmVjZWl2 ZSAgICBTZW5kICAgIFJlY2VpdmUKLSAgU3VuICAgICAgSFAgICAgICAgNzcgICAgICAgNjcgICAg ICAgMTA2ICAgICAgMTM5Ci0gIEhQICAgICAgIEhQICAgICAgIDUwICAgICAgIDUwICAgICAgICA2 NCAgICAgICA2MgotICBIUCAgICAgICBTdW4gICAgICA1NyAgICAgICA4NSAgICAgICAxNTUgICAg ICAxMDUKLSAgU3VuICAgICAgU3VuICAgICAgNTcgICAgICAgNTAgICAgICAgMzIxICAgICAgMzE0 Ci0KLSAgIFRoZXJlZm9yZSB0aGUgSFAtVVggdGVsbmV0IHNlcnZlciBvciBwdHkgZHJpdmVyIHNl ZW1zIHRvIGJlIGFkZGluZyBtb3JlCi0gICBvdmVyaGVhZCB0aGFuIHRoZSBTdW5PUyBvbmUsIGFu ZCBtb3N0IG90aGVycy4gV2hlbiBnb2luZyB0aHJvdWdoIHRoaXMKLSAgIHR5cGUgb2YgY29ubmVj dGlvbiAoYSByZW1vdGUgdGVsbmV0IHNlcnZlcikgdGhlcmUgaXMgbGl0dGxlIEtlcm1pdCBjYW4K LSAgIGRvIGltcHJvdmUgbWF0dGVycywgc2luY2UgdGhlIHRlbG5ldCBzZXJ2ZXIgYW5kIHB0eSBk cml2ZXIgYXJlIGJldHdlZW4KLSAgIHRoZSB0d28gS2VybWl0cywgYW5kIG5laXRoZXIgS2VybWl0 IHByb2dyYW0gY2FuIGhhdmUgYW55IGluZmx1ZW5jZSBvdmVyCi0gICB0aGVtIChleGNlcHQgcHV0 dGluZyB0aGUgVGVsbmV0IGNvbm5lY3Rpb24gaW4gYmluYXJ5IG1vZGUsIGJ1dCB0aGF0Ci0gICBk b2Vzbid0IGhlbHApLgotCi0gICAoVGhlIG51bWJlcnMgZm9yIHRoZSBIUC1IUCB0cmFuc2ZlcnMg YXJlIGxvd2VyIHRoYW4gdGhlIG90aGVycyBzaW5jZQotICAgYm90aCBLZXJtaXQgcHJvY2Vzc2Vz IGFyZSBydW5uaW5nIG9uIHRoZSBzYW1lIHNsb3cgMzNNSHogQ1BVLikKLQotICAgTWF0dGVycyBz ZWVtIHRvIGhhdmUgZGV0ZXJpb3JhdGVkIGluIEhQLVVYIDExLiBOb3cgZmlsZSB0cmFuc2ZlcnMg b3ZlcgotICAgVGVsbmV0IGNvbm5lY3Rpb25zIGZhaWwgY29tcGxldGVseSwgcmF0aGVyIHRoYW4g anVzdCBiZWluZyBzbG93LiBJbiB0aGUKLSAgIGZvbGxvd2luZyB0cmlhbCwgYSBUZWxuZXQgY29u bmVjdGlvbiB3YXMgbWFkZSBmcm9tIEtlcm1pdCA5NSB0byBIUC1VWAotICAgMTEuMTEgb24gYW4g SFAtOTAwMC83ODUvQjIwMDAgb3ZlciBsb2NhbCAxME1icHMgRXRoZXJuZXQgcnVubmluZwotICAg Qy1LZXJtaXQgOC4wMCBpbiBzZXJ2ZXIgbW9kZSAodW5kZXIgdGhlIEhQLVVYIFRlbG5ldCBzZXJ2 ZXIpOgotCi0gICAgICAgICAgICAgICAgICAgVGV4dC4uLi4uLi4uICAgIEJpbmFyeS4uLi4uLgot ICBTdHJlYW0gIFBrdGxlbiAgIEdFVCAgICAgU0VORCAgICBHRVQgICAgIFNFTkQKLSAgICBPbiAg ICAgNDAwMCAgICBGYWlsICAgIEZhaWwgICAgRmFpbCAgICBGYWlsCi0gICAgT2ZmICAgIDQwMDAg ICAgRmFpbCAgICBGYWlsICAgIEZhaWwgICAgRmFpbAotICAgIE9mZiAgICAyMDAwICAgIE9LICAg ICAgRmFpbCAgICBPSyAgICAgIEZhaWwKLSAgICBPbiAgICAgMjAwMCAgICBPSyAgICAgIEZhaWwg ICAgT0sgICAgICBGYWlsCi0gICAgT24gICAgIDMwMDAgICAgRmFpbCAgICBGYWlsICAgIEZhaWwg ICAgRmFpbAotICAgIE9uICAgICAyNTAwICAgIEZhaWwgICAgRmFpbCAgICBGYWlsICAgIEZhaWwK LSAgICBPbiAgICAgMjA0NyAgICBPSyAgICAgIEZhaWwgICAgT0sgICAgICBGYWlsCi0gICAgT24g ICAgIDIwNDUgICAgT0sgICAgICBGYWlsICAgIE9LICAgICAgRmFpbAotICAgIE9mZiAgICAgNTAw ICAgIE9LICAgICAgT0sgICAgICBPSyAgICAgIE9LCi0gICAgT24gICAgICA1MDAgICAgT0sgICAg ICBGYWlsICAgIE9LICAgICAgRmFpbAotICAgIE9uICAgICAgMjQwICAgIE9LICAgICAgRmFpbCAg ICBPSyAgICAgIEZhaWwKLQotICAgQXMgeW91IGNhbiBzZWUsIGRvd25sb2FkcyBhcmUgcHJvYmxl bWF0aWMgdW5sZXNzIHRoZSByZWNlaXZlcidzIEtlcm1pdAotICAgcGFja2V0IGxlbmd0aCBpcyAy MDQ1IG9yIGxlc3MsIGJ1dCB1cGxvYWRzIHdvcmsgb25seSB3aXRoIHN0cmVhbWluZwotICAgZGlz YWJsZWQgYW5kIHRoZSBwYWNrZXQgbGVuZ3RoIHJlc3RyaWN0ZWQgdG8gNTAwLiBUbyBmb3JjZSBm aWxlCi0gICB0cmFuc2ZlcnMgdG8gd29yayBvbiB0aGlzIGNvbm5lY3Rpb24sIHRoZSBkZXNrdG9w IEtlcm1pdCBtdXN0IGJlIHRvbGQKLSAgIHRvOgotCi0gIHNldCBzdHJlYW1pbmcgb2ZmCi0gIHNl dCByZWNlaXZlIHBhY2tldC1sZW5ndGggMjAwMAotICBzZXQgc2VuZCBwYWNrZXQtbGVuZ3RoIDUw MAotCi0gICBIb3dldmVyLCBpZiBhIGNvbm5lY3Rpb24gaXMgbWFkZSBiZXR3ZWVuIHRoZSBzYW1l IHR3byBwcm9ncmFtcyBvbiB0aGUKLSAgIHNhbWUgdHdvIGNvbXB1dGVycyBvdmVyIHRoZSBzYW1l IG5ldHdvcmssIGJ1dCB0aGlzIHRpbWUgYSBkaXJlY3QKLSAgIHNvY2tldC10by1zb2NrZXQgY29u bmVjdGlvbiBieXBhc3NpbmcgdGhlIEhQLVVYIFRlbG5ldCBzZXJ2ZXIgYW5kIHB0eQotICAgZHJp dmVyICh0ZWxsIEhQLVVYIEMtS2VybWl0IHRvICJzZXQgaG9zdCAvc2VydmVyICogMzAwMCAvcmF3 IjsgdGVsbAotICAgZGVza3RvcCBjbGllbnQgcHJvZ3JhbSB0byAic2V0IGhvc3QgYmxhaCAzMDAw IC9yYXciKSwgZXZlcnl0aGluZyB3b3JrcwotICAgcGVyZmVjdGx5IHdpdGggdGhlIGRlZmF1bHQg S2VybWl0IHNldHRpbmdzIChzdHJlYW1pbmcsIDRLIHBhY2tldHMsCi0gICBsaWJlcmFsIGNvbnRy b2wtY2hhcmFjdGVyIHVucHJlZml4aW5nLCA4LWJpdCB0cmFuc3BhcmVuY3ksIGV0Yyk6Ci0KLSAg ICAgICAgICAgICAgICAgICBUZXh0Li4uLi4uLi4gICAgQmluYXJ5Li4uLi4uCi0gIFN0cmVhbSAg UGt0bGVuICAgR0VUICAgICBTRU5EICAgIEdFVCAgICAgU0VORAotICAgIE9uICAgICA0MDAwICAg IE9LICAgICAgT0sgICAgICBPSyAgICAgIE9LCi0KLSAgIEFuZCBpbiB0aGlzIGNhc2UsIHRyYW5z ZmVyIHJhdGVzIHdlcmUgYXBwcm94aW1hdGVseSA5MDAsMDAwIGNwcy4gVG8KLSAgIHZlcmlmeSB0 aGF0IHRoZSBiZWhhdmlvciByZXBvcnRlZCBoZXJlIGlzIG5vdCBjYXVzZWQgYnkgdGhlIG5ldyBL ZXJtaXQKLSAgIHJlbGVhc2UsIHRoZSBzYW1lIGV4cGVyaW1lbnQgd2FzIHBlcmZvcm1lZCBvbiBh IFRlbG5ldCBjb25uZWN0aW9uIGZyb20KLSAgIHRoZSBzYW1lIFBDIG92ZXIgdGhlIHNhbWUgbmV0 d29yayB0byB0aGUgb2xkIDcxNS8zMyBydW5uaW5nIEhQLVVYIDEwLjIwCi0gICBhbmQgQy1LZXJt aXQgOC4wMC4gVGV4dCBhbmQgYmluYXJ5IHVwbG9hZHMgYW5kIGRvd25sb2FkcyB3b3JrZWQKLSAg IHBlcmZlY3RseSAoYWxiZWl0IHNsb3dseSkgd2l0aCBhbGwgdGhlIGRlZmF1bHQgc2V0dGluZ3Mg LS0gc3RyZWFtaW5nLAotICAgNEsgcGFja2V0cywgZXRjLgotCi0zLjIuMy4gRGlhbGluZyBPdXQg YW5kIFVVQ1AgTG9ja2ZpbGVzIGluIEhQLVVYCi0KLSAgIFsgWzIyM11Ub3AgXSBbIFsyMjRdQ29u dGVudHMgXSBbIFsyMjVdU2VjdGlvbiBDb250ZW50cyBdIFsgWzIyNl1OZXh0IF0KLSAgIFsgWzIy N11QcmV2aW91cyBdCi0KLSAgIEhQIHdvcmtzdGF0aW9ucyBkbyBub3QgY29tZSB3aXRoIGRpYWxv dXQgZGV2aWNlcyBjb25maWd1cmVkOyB5b3UgaGF2ZQotICAgdG8gZG8gaXQgeW91cnNlbGYgKGFz IHJvb3QpLiBGaXJzdCBsb29rIGluIC9kZXYgdG8gc2VlIHdoYXQncyB0aGVyZTsKLSAgIGZvciBl eGFtcGxlIGluIEhQLVVYIDEwLjAwIG9yIGxhdGVyOgotCi0gIGxzIC1sIC9kZXYvY3VhKgotICBs cyAtbCAvZGV2L3R0eSoKLQotICAgSWYgeW91IGZpbmQgYSB0dHkwcDAgZGV2aWNlIGJ1dCBubyBj dWEwcDAsIHlvdSdsbCBuZWVkIHRvIGNyZWF0IG9uZSBpZgotICAgeW91IHdhbnQgdG8gZGlhbCBv dXQ7IHRoZSB0dHkwcDAgZG9lcyBub3Qgd29yayBmb3IgZGlhbGluZyBvdXQuIEl0J3MKLSAgIGVh c3k6IHN0YXJ0IFNBTTsgaW4gdGhlIG1haW4gU2FtIHdpbmRvdywgZG91YmxlLWNsaWNrIG9uIFBl cmlwaGVyYWwKLSAgIERldmljZSwgdGhlbiBpbiB0aGUgUGVyaXBoZXJhbCBEZXZpY2VzIHdpbmRv dywgZG91YmxlLWNsaWNrIG9uCi0gICBUZXJtaW5hbHMgYW5kIE1vZGVtcy4gSW4gdGhlIFRlcm1p bmFscyBhbmQgTW9kZW1zIGRpYWxvZywgY2xpY2sgb24KLSAgIEFjdGlvbnMsIHRoZW4gY2hvb3Nl ICJBZGQgbW9kZW0iIGFuZCBmaWxsIGluIHRoZSBibGFua3MuIEZvciBleGFtcGxlOgotICAgUG9y dCBudW1iZXIgMCwgc3BlZWQgNTc2MDAgKGhpZ2hlciBzcGVlZHMgdGVuZCBub3QgdG8gd29yayBy ZWxpYWJseSksCi0gICAiVXNlIGRldmljZSBmb3IgY2FsbGluZyBvdXQiLCBkbyBOT1QgIlJlY2Vp dmUgaW5jb21pbmcgY2FsbHMiICh1bmxlc3MKLSAgIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2lu ZyksIGxlYXZlICJDQ0lUVCBtb2RlbSIgdW5jaGVja2VkIHVubGVzcyB5b3UKLSAgIHJlYWxseSBo YXZlIG9uZSwgYW5kIGRvIHNlbGVjdCAiVXNlIGhhcmR3YXJlIGZsb3cgY29udHJvbCAoUlRTL0NU UykiLgotICAgVGhlbiBjbGljayBPSy4gVGhpcyBjcmVhdGVzIGN1YTBwMCBhcyB3ZWxsIGFzIGN1 bDBwMCBhbmQgdHR5ZDBwMAotCi0gICBJZiB0aGUgZm9sbG93aW5nIHNlcXVlbmNlOgotCi0gIHNl dCBsaW5lIC9kZXYvY3VhMHAwIDsgb3Igb3RoZXIgZGV2aWNlCi0gIHNldCBzcGVlZCAxMTUyMDAg ICAgIDsgb3Igb3RoZXIgbm9ybWFsIHNwZWVkCi0KLSAgIHByb2R1Y2VzIHRoZSBtZXNzYWdlICI/ VW5zdXBwb3J0ZWQgbGluZSBzcGVlZCIuIFRoaXMgbWVhbnMgZWl0aGVyIHRoYXQKLSAgIHRoZSBw b3J0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkaWFsb3V0IChnbyBpbnRvIFNBTSBhcyBkZXNjcmli ZWQgYWJvdmUKLSAgIGFuZCBtYWtlIHN1cmUgIlVzZSBkZXZpY2UgZm9yIGNhbGxpbmcgb3V0IiBp cyBzZWxlY3RlZCksIG9yIGVsc2UgdGhhdAotICAgc3BlZWQgeW91IGhhdmUgZ2l2ZW4gKHN1Y2gg YXMgNDYwODAwKSBpcyBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZwotICAgc3lzdGVtIGJ1dCBu b3QgYnkgdGhlIHBoeXNpY2FsIGRldmljZSAoaW4gd2hpY2ggY2FzZSwgdXNlIGEgbG93ZXIgc3Bl ZWQKLSAgIGxpa2UgNTc2MDApLgotCi0gICBJbiBIUC1VWCA5LjAsIHNlcmlhbCBkZXZpY2UgbmFt ZXMgYmVnYW4gdG8gY2hhbmdlLiBUaGUgb2xkZXIgbmFtZXMKLSAgIGxvb2tlZCBsaWtlICIvZGV2 L2N1YTAwIiwgIi9kZXYvdHR5MDEiLCBldGMgKHNvbWV0aW1lcyB3aXRoIG9ubHkgb25lCi0gICBk aWdpdCkuIFRoZSBuZXdlciBuYW1lcyBoYXZlIHR3byBkaWdpdHMgd2l0aCB0aGUgbGV0dGVyICJw IiBpbiBiZXR3ZWVuLgotICAgSFAtVVggOC54eCBhbmQgZWFybGllciBoYXZlIHRoZSBvbGRlciBm b3JtLCBIUC1VWCAxMC4wMCBhbmQgbGF0ZXIgaGF2ZQotICAgdGhlIG5ld2VyIGZvcm0uIEhQLVVY IDkueHggaGFzIHRoZSBuZXdlciBmb3JtIG9uIFNlcmllcyA4MDAgbWFjaGluZXMsCi0gICBhbmQg dGhlIG9sZGVyIGZvcm0gb24gb3RoZXIgaGFyZHdhcmUgbW9kZWxzLiBUaGUgc2l0dWF0aW9uIGlz Ci0gICBzdW1tYXJpemVkIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgKHRoZSBDb252aW8gMTAuMCBj b2x1bW4gYXBwbGllcyB0bwotICAgSFAtVVggMTAgYW5kIDExKS4KLQotICBDb252ZXJnZWQgSFAt VVggU2VyaWFsIEkvTyBGaWxlbmFtZXMgOiBUVFkgTXV4IE5hbWluZwotICAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSAgR2VuZXJhbCBtZWFuaW5nICAgICAgT2xkIEZvcm0gICAgIFM4MDAgOS4wICAgICAgICAgICBD b252aW8gMTAuMAotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgdHR5KiBoYXJkd2lyZWQgcG9ydHMgIHR0eTxZ WT4gICAgIHR0eTxYPnA8WT4gICAgICAgICB0dHk8RD5wPHA+Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkaWFnOm11eDxYPiAgICAgICAgZGlhZzptdXg8RD4KLSAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0gIHR0eWQqIGRpYWwtaW4gbW9kZW1zICB0dHlkPFlZPiAgICB0dHlkPFg+cDxZPiAg ICAgICAgdHR5ZDxEPnA8cD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp YWc6dHR5ZDxYPnA8WT4gICBkaWFnOnR0eWQ8RD5wPHA+Ci0gIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBjdWEq IGF1dG8tZGlhbCBvdXQgICAgY3VhPFlZPiAgICAgY3VhPFg+cDxZPiAgICAgICAgIGN1YTxEPnA8 cD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWc6Y3VhPFg+cDxZPgot ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLSAgY3VsKiBkaWFsLW91dCAgICAgICAgIGN1bDxZWT4gICAgIGN1bDxY PnA8WT4gICAgICAgICBjdWw8RD5wPHA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkaWFnOmN1bDxYPnA8WT4KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICA8WD49IExVIChMb2dpY2Fs IFVuaXQpICA8RD49IERldnNwZWMgKGRlY2ltYWwgY2FyZCBpbnN0YW5jZSkKLSAgIDxZPiBvciA8 WVk+ID0gUG9ydCAgICAgIDxwPj0gUG9ydAotCi0gICBGb3IgZGlhbGluZyBvdXQsIHlvdSBzaG91 bGQgdXNlIHRoZSBjdWEgb3IgY3VsIGRldmljZXMuIFdoZW4gQy1LZXJtaXQncwotICAgQ0FSUklF UiBzZXR0aW5nIGlzIEFVVE8gb3IgT04sIEMtS2VybWl0IHNob3VsZCBwb3AgYmFjayB0byBpdHMg cHJvbXB0Ci0gICBhdXRvbWF0aWNhbGx5IGlmIHRoZSBjYXJyaWVyIHNpZ25hbCBkcm9wcywgZS5n LiB3aGVuIHlvdSBsb2cgb3V0IGZyb20KLSAgIHRoZSByZW1vdGUgY29tcHV0ZXIgb3Igc2Vydmlj ZS4gSWYgeW91IHVzZSB0aGUgdHR5PEQ+cDxkPiAoZS5nLiB0dHkwcDApCi0gICBkZXZpY2UsIHRo ZSBjYXJyaWVyIHNpZ25hbCBzaG91bGQgYmUgaWdub3JlZC4gVGhlIHR0eTxEPnA8ZD4gZGV2aWNl Ci0gICBzaG91bGQgYmUgdXNlZCBmb3IgZGlyZWN0IGNvbm5lY3Rpb25zIHdoZXJlIHRoZSBjYXJy aWVyIHNpZ25hbCBkb2VzIG5vdAotICAgZm9sbG93IFJTLTIzMiBjb252ZW50aW9ucyAodXNlIHRo ZSBjdWwgZGV2aWNlIGZvciBoYXJkd2lyZWQgY29ubmVjdGlvbnMKLSAgIHRocm91Z2ggYSB0cnVl IG51bGwgbW9kZW0pLiBEbyBub3QgdXNlIHRoZSB0dHlkPEQ+cDxkPiBkZXZpY2UgZm9yCi0gICBk aWFsaW5nIG91dC4KLQotICAgS2VybWl0J3MgYWNjZXNzIHRvIHNlcmlhbCBkZXZpY2VzIGlzIGNv bnRyb2xsZWQgYnkgIlVVQ1AgbG9ja2ZpbGVzIiwKLSAgIHdoaWNoIGFyZSBpbnRlbmRlZCB0byBw cmV2ZW50IGRpZmZlcmVudCB1c2VycyB1c2luZyBkaWZmZXJlbnQgc29mdHdhcmUKLSAgIHByb2dy YW1zIChLZXJtaXQsIGN1LCBldGMsIGFuZCBVVUNQIGl0c2VsZikgZnJvbSBhY2Nlc3NpbmcgdGhl IHNhbWUKLSAgIHNlcmlhbCBkZXZpY2UgYXQgdGhlIHNhbWUgdGltZS4gV2hlbiBhIGRldmljZSBp cyBpbiB1c2UgYnkgYSBwYXJ0aWN1bGFyCi0gICB1c2VyLCBhIGZpbGUgd2l0aCBhIHNwZWNpYWwg bmFtZSBpcyBjcmVhdGVkIGluOgotCi0gIC92YXIvc3Bvb2wvbG9ja3MgIChIUC1VWCAxMC4wMCBh bmQgbGF0ZXIpCi0gIC91c3Ivc3Bvb2wvdXVjcCAgIChIUC1VWCA5Lnh4IGFuZCBlYXJsaWVyKQot Ci0gICBUaGUgZmlsZSdzIG5hbWUgaW5kaWNhdGVzIHRoZSBkZXZpY2UgdGhhdCBpcyBpbiB1c2Us IGFuZCBpdHMgY29udGVudHMKLSAgIGluZGljYXRlcyB0aGUgcHJvY2VzcyBJRCAocGlkKSBvZiB0 aGUgcHJvY2VzcyB0aGF0IGlzIHVzaW5nIHRoZSBkZXZpY2UuCi0gICBTaW5jZSBzZXJpYWwgZGV2 aWNlcyBhbmQgdGhlIGxvY2tzIGRpcmVjdG9yeSBhcmUgbm90IGJvdGggcHVibGljbHkKLSAgIHJl YWRhYmxlIGFuZCB3cml0YWJsZSwgS2VybWl0IGFuZCBvdGhlciBjb21tdW5pY2F0aW9uIHNvZnR3 YXJlIG11c3QgYmUKLSAgIGluc3RhbGxlZCBzZXR1aWQgdG8gdGhlIG93bmVyIChiaW4pIG9mIHRo ZSBzZXJpYWwgZGV2aWNlIGFuZCBzZXRnaWQgdG8KLSAgIHRoZSBncm91cCAoZGFlbW9uKSBvZiB0 aGUgL3Zhci9zcG9vbC9sb2NrcyBkaXJlY3RvcnkuIEtlcm1pdCdzIHNldHVpZAotICAgYW5kIHNl dGdpZCBwcml2aWxlZ2VzIGFyZSBlbmFibGVkIG9ubHkgd2hlbiBvcGVuaW5nIHRoZSBkZXZpY2Ug YW5kCi0gICBhY2Nlc3NpbmcgdGhlIGxvY2tmaWxlcy4KLQotICAgTGV0J3Mgc2F5ICJ1bml0IiBt ZWFucyBhIHN0cmluZyBvZiBkZWNpbWFsIGRpZ2l0cyAodGhlIGludGVyZmFjZQotICAgaW5zdGFu Y2UgbnVtYmVyKSBmb2xsb3dlZCAoaW4gSFAtVVggMTAuMDAgYW5kIGxhdGVyKSBieSB0aGUgbGV0 dGVyICJwIgotICAgKGxvd2VyY2FzZSksIGZvbGxvd2VkIGJ5IGFub3RoZXIgc3RyaW5nIG9mIGRl Y2ltYWwgZGlnaXRzICh0aGUgcG9ydAotICAgbnVtYmVyIG9uIHRoZSBpbnRlcmZhY2UpLCBlLmcu OgotCi0gICIwcDAiLCAiMHAxIiwgIjFwMCIsIGV0YyAgICAgICAoSFAtVVggMTAuMDAgYW5kIGxh dGVyKQotICAiMHAwIiwgIjBwMSIsICIxcDAiLCBldGMgICAgICAgKEhQLVVYIDkueHggb24gU2Vy aWVzIDgwMCkKLSAgIjAwIiwgICIwMSIsICAiMTAiLCAgIjAiLCBldGMgIChIUC1VWCA5Lnh4IG5v dCBvbiBTZXJpZXMgODAwKQotICAiMDAiLCAgIjAxIiwgICIxMCIsICAiMCIsIGV0YyAgKEhQLVVY IDgueHggYW5kIGVhcmxpZXIpCi0KLSAgIFRoZW4gYSBub3JtYWwgc2VyaWFsIGRldmljZSAoZHJp dmVyKSBuYW1lIGNvbnNpc3RzIG9mIGEgcHJlZml4ICgidHR5IiwKLSAgICJ0dHlkIiwgImN1YSIs ICJjdWwiLCBvciBwb3NzaWJseSAiY3VhZCIgb3IgImN1bGQiKSBmb2xsb3dlZCBieSBhIHVuaXQs Ci0gICBlLmcuICJjdWEwcDAiLiBLZXJtaXQncyB0cmVhdG1lbnQgb2YgVVVDUCBsb2NrZmlsZXMg aXMgYXMgY2xvc2UgYXMKLSAgIHBvc3NpYmxlIHRvIHRoYXQgb2YgdGhlIEhQLVVYICJjdSIgcHJv Z3JhbS4gSGVyZSBpcyBhIHRhYmxlIG9mIHRoZQotICAgbG9ja2ZpbGVzIHRoYXQgS2VybWl0IGNy ZWF0ZXMgZm9yIHVuaXQgMHAwOgotCi0gIFNlbGVjdGlvbiAgICAgIExvY2tmaWxlIDEgICAgIExv Y2tmaWxlIDIKLSAgL2Rldi90dHkwcDAgICAgTENLLi50dHkwcDAgICAgKG5vbmUpCi0qIC9kZXYv dHR5ZDBwMCAgIExDSy4udHR5ZDBwMCAgIChub25lKQotICAvZGV2L2N1YTBwMCAgICBMQ0suLmN1 YTBwMCAgICBMQ0suLnR0eWQwcDAKLSAgL2Rldi9jdWwwcDAgICAgTENLLi5jdWwwcDAgICAgTENL Li50dHlkMHAwCi0gIC9kZXYvY3VhZDBwMCAgIExDSy4uY3VhZDBwMCAgIExDSy4udHR5ZDBwMAot ICAvZGV2L2N1bGQwcDAgICBMQ0suLmN1bGQwcDAgICBMQ0suLnR0eWQwcDAKLSAgPG90aGVyPiAg ICAgICAgTENLLi48b3RoZXI+ICAgKG5vbmUpCi0KLSAgICgqID0gRGlhbGluIGRldmljZSwgc2hv dWxkIG5vdCBiZSB1c2VkLikKLQotICAgSW4gb3RoZXIgd29yZHMsIGlmIHRoZSBkZXZpY2UgbmFt ZSBiZWdpbnMgd2l0aCAiY3UiLCBhIHNlY29uZCBsb2NrZmlsZQotICAgZm9yIHRoZSAidHR5ZCIg ZGV2aWNlLCBzYW1lIHVuaXQsIGlzIGNyZWF0ZWQsIHdoaWNoIHNob3VsZCBwcmV2ZW50Ci0gICBk aWFsaW4gYWNjZXNzIG9uIHRoYXQgZGV2aWNlLgotCi0gICBUaGUgPG90aGVyPiBjYXNlIGFsbG93 cyBmb3Igc3ltYm9saWMgbGlua3MsIGV0YywgYnV0IG9mIGNvdXJzZSBpdCBpcwotICAgbm90IGZv b2xwcm9vZiBzaW5jZSB3ZSBoYXZlIG5vIHdheSBvZiB0ZWxsaW5nIHdoaWNoIGRldmljZSBpcyBy ZWFsbHkKLSAgIGJlaW5nIHVzZWQuCi0KLSAgIFdoZW4gQy1LZXJtaXQgdHJpZXMgdG8gb3BlbiBh IGRpYWxvdXQgZGV2aWNlIHdob3NlIG5hbWUgZW5kcyB3aXRoIGEKLSAgICJ1bml0IiwgaXQgc2Vh cmNoZXMgdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSBmb3IgYWxsIHBvc3NpYmxlIG5hbWVzIGZvcgot ICAgdGhlIHNhbWUgdW5pdC4gRm9yIGV4YW1wbGUsIGlmIHVzZXIgc2VsZWN0cyAvZGV2L2N1bDJw MywgS2VybWl0IGxvb2tzCi0gICBmb3IgbG9ja2ZpbGVzIG5hbWVkOgotCi0gIExDSy4udHR5MnAz Ci0gIExDSy4udHR5ZDJwMwotICBMQ0suLmN1YTJwMwotICBMQ0suLmN1bDJwMwotICBMQ0suLmN1 YWQycDMKLSAgTENLLi5jdWxkMnAzCi0KLSAgIElmIGFueSBvZiB0aGVzZSBmaWxlcyBhcmUgZm91 bmQsIEtlcm1pdCBvcGVucyB0aGVtIHRvIGZpbmQgb3V0IHRoZSBJRAotICAgKHBpZCkgb2YgdGhl IHByb2Nlc3MgdGhhdCBjcmVhdGVkIHRoZW07IGlmIHRoZSBwaWQgaXMgc3RpbGwgdmFsaWQsIHRo ZQotICAgcHJvY2VzcyBpcyBzdGlsbCBhY3RpdmUsIGFuZCBzbyB0aGUgU0VUIExJTkUgY29tbWFu ZCBmYWlscyBhbmQgdGhlIHVzZXIKLSAgIGlzIGluZm9ybWVkIG9mIHRoZSBwaWQgc28gcy9oZSBj YW4gdXNlICJwcyIgdG8gZmluZCBvdXQgd2hvIGlzIHVzaW5nCi0gICB0aGUgZGV2aWNlLgotCi0g ICBJZiB0aGUgcGlkIGlzIG5vdCB2YWxpZCwgdGhlIGZpbGUgaXMgZGVsZXRlZC4gSWYgYWxsIHN1 Y2ggZmlsZXMgKGkuZS4KLSAgIHdpdGggc2FtZSAidW5pdCIgZGVzaWduYXRpb24pIGFyZSBzdWNj ZXNzZnVsbHkgcmVtb3ZlZCwgdGhlbiB0aGUgU0VUCi0gICBMSU5FIGNvbW1hbmQgc3VjY2VlZHM7 IHVwIHRvIHNpeCBtZXNzYWdlcyBhcmUgcHJpbnRlZCB0ZWxsaW5nIHRoZSB1c2VyCi0gICB3aGlj aCAic3RhbGUgbG9ja2ZpbGVzIiBhcmUgYmVpbmcgcmVtb3ZlZC4KLQotICAgV2hlbiB0aGUgInNl dCBsaW5lIiBjb21tYW5kIHN1Y2NlZWRzIGluIEhQLVVYIDEwLjAwIGFuZCBsYXRlciwgQy1LZXJt aXQKLSAgIGFsc28gY3JlYXRlcyBhIFVuaXggU3lzdGVtIFYgUjQgImFkdmlzb3J5IGxvY2siIGFz IGEgZnVydGhlciBwcmVjYXV0aW9uCi0gICAoYnV0IG5vdCBndWFyYW50ZWUpIGFnYWluc3QgYW55 IG90aGVyIHByb2Nlc3Mgb2J0YWluaW5nIGFjY2VzcyB0byB0aGUKLSAgIGRldmljZSB3aGlsZSB5 b3UgYXJlIHVzaW5nIGl0LgotCi0gICBJZiB0aGUgc2VsZWN0ZWQgZGV2aWNlIHdhcyBpbiB1c2Ug YnkgImN1IiwgS2VybWl0IGNhbid0IG9wZW4gaXQsCi0gICBiZWNhdXNlICJjdSIgaGFzIGNoYW5n ZWQgaXRzIG93bmVyc2hpcCwgc28gd2UgbmV2ZXIgZ2V0IGFzIGZhciBhcwotICAgbG9va2luZyBh dCB0aGUgbG9ja2ZpbGVzLiBJbiB0aGUgbm9ybWFsIGNhc2UsIHdlIGNhbid0IGV2ZW4gbG9vayBh dCB0aGUKLSAgIGRldmljZSB0byBzZWUgd2hvIHRoZSBvd25lciBpcyBiZWNhdXNlIGl0IGlzIHZp c2libGUgb25seSB0byBpdHMKLSAgIChwcmVzZW50KSBvd25lci4gSW4gdGhpcyBjYXNlLCBLZXJt aXQgc2F5cyAoZm9yIGV4YW1wbGUpOgotCi0gIC9kZXYvY3VhMHAwOiBQZXJtaXNzaW9uIGRlbmll ZAotCi0gICBXaGVuIEtlcm1pdCByZWxlYXNlcyBhIGRldmljZSBpdCBoYXMgc3VjY2Vzc2Z1bGx5 IG9wZW5lZCwgaXQgcmVtb3ZlcwotICAgYWxsIHRoZSBsb2NrZmlsZXMgdGhhdCBpdCBjcmVhdGVk LiBUaGlzIGFsc28gaGFwcGVucyB3aGVuZXZlciBLZXJtaXQKLSAgIGV4aXRzICJ1bmRlciBpdHMg b3duIHBvd2VyIi4KLQotICAgSWYgS2VybWl0IGlzIGtpbGxlZCB3aXRoIGEgZGV2aWNlIG9wZW4s IHRoZSBsb2NrZmlsZShzKSBhcmUgbGVmdAotICAgYmVoaW5kLiBUaGUgbmV4dCBLZXJtaXQgcHJv Z3JhbSB0aGF0IHRyaWVzIHRvIGFzc2lnbiB0aGUgZGV2aWNlLCB1bmRlcgotICAgYW55IG9mIGl0 cyB2YXJpb3VzIG5hbWVzLCB3aWxsIGF1dG9tYXRpY2FsbHkgY2xlYW4gdXAgdGhlIHN0YWxlCi0g ICBsb2NrZmlsZXMgYmVjYXVzZSB0aGUgcGlkcyB0aGV5IGNvbnRhaW4gYXJlIGludmFsaWQuIFRo ZSBiZWhhdmlvciBvZiBjdQotICAgYW5kIG90aGVyIGNvbW11bmljYXRpb24gcHJvZ3JhbXMgdW5k ZXIgdGhlc2UgY29uZGl0aW9ucyBzaG91bGQgYmUgdGhlCi0gICBzYW1lLgotCi0gICBIZXJlLCBi eSB0aGUgd2F5LCBpcyBhIHN1bW1hcnkgb2YgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIEhQ LVVYCi0gICBwb3J0IGRyaXZlciB0eXBlcyBmcm9tIEpvaG4gUGV6emFubyBvZiBIUDoKLQotICAg ICBUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgZGV2aWNlIGZpbGVzIGZvciBlYWNoIHBvcnQuCi0K LSAgICAgVGhlIHR0eWRYWFggZGV2aWNlIGZpbGUgaXMgZGVzaWduZWQgdG8gd29yayBhcyBmb2xs b3dzOgotCi0gICAgMS4gVGhlIHByb2Nlc3MgdGhhdCBvcGVucyBpdCBkb2VzIE5PVCBnZXQgY29u dHJvbCBvZiB0aGUgcG9ydCB1bnRpbCBDRAotICAgICAgIGlzIGFzc2VydGVkLiBUaGlzIHdhcyBp bnRlbnRpb25hbCAob3ZlciAxNSB5ZWFycyBhZ28pIHRvIGFsbG93Ci0gICAgICAgZ2V0dHkgdG8g b3BlbiB0aGUgcG9ydCBidXQgbm90IGNvbnRyb2wgaXQgdW50aWwgc29tZW9uZSBjYWxsZWQgaW4u Ci0gICAgICAgSWYgYSBwcm9jZXNzIHdhbnRzIHRvIHVzZSB0aGUgZGlyZWN0IG9yIGNhbGxvdXQg ZGV2aWNlIGZpbGVzCi0gICAgICAgKHR0eVhYWCBhbmQgY3VsWFhYIHJlc3BlY3RpdmVseSksIHRo ZXkgd2lsbCB0aGVuIGdldCBjb250cm9sIGFuZAotICAgICAgIGdldHR5IHdvdWxkIGJlIGJsb2Nr ZWQuIFRoaXMgZWxpbWluYXRlZCB0aGUgbmVlZCB0byB1c2UgdXVnZXR0eQotICAgICAgIChhbmQg aXRzIGluaGVyZW50IHByb2JsZW1zIHdpdGggbG9jayBmaWxlcykgZm9yIG1vZGVtcy4gWW91IGNh biBzZWUKLSAgICAgICB0aGlzIGRlbW9uc3RyYXRlZCBieSB0aGUgZmFjdCB0aGF0ICJwcyAtZWYi IHNob3dzIGEgPyBpbiB0aGUgdHR5Ci0gICAgICAgY29sdW1uIGZvciB0aGUgZ2V0dHkgcHJvY2Vz cyBhcyBnZXR0eSBkb2VzIG5vdCBoYXZlIHRoZSBwb3J0IHlldC4KLSAgICAyLiBPbmNlIENEIGlz IGFzc2VydGVkLCB0aGUgcG9ydCBpcyBjb250cm9sbGVkIGJ5IGdldHR5IChvciB0aGUKLSAgICAg ICBwcm9jZXNzIGhhbmRsaW5nIGFuIGluY29taW5nIGNhbGwpIGlmIHRoZXJlIHdhcyBubyBwcm9j ZXNzIHVzaW5nCi0gICAgICAgdGhlIHBvcnQuIFRoZSA/IGluIHRoZSAicHMiIGNvbW1hbmQgbm93 IHNob3dzIHRoZSBwb3J0LiBBdCB0aGlzCi0gICAgICAgcG9pbnQsIHRoZSBwb3J0IGFjY2VwdHMg ZGF0YS4KLQotICAgICBUaGVyZWZvcmUgeW91IHNob3VsZCB1c2UgZWl0aGVyIHRoZSBjYWxsb3V0 IGN1bFhYWCBkZXZpY2UgZmlsZQotICAgICAoaW1tZWRpYXRlIGNvbnRyb2wgYnV0IG5vIGRhdGEg dW50aWwgQ0QgaXMgYXNzZXJ0ZWQpIG9yIHRoZSBkaXJlY3QKLSAgICAgZGV2aWNlIGZpbGUgdHR5 WFhYIHdoaWNoIGdpdmVzIGltbWVkaWF0ZSBjb250cm9sIGFuZCBpbW1lZGlhdGUgZGF0YQotICAg ICBhbmQgd2hpY2ggaWdub3JlcyBieSBkZWZhdWx0IG1vZGVtIGNvbnRyb2wgc2lnbmFscy4KLQot ICAgICBUaGUgdHR5ZFhYWCBkZXZpY2Ugc2hvdWxkIGJlIHVzZWQgb25seSBmb3IgY2FsbGluIGFu ZCBteQotICAgICByZWNvbW1lbmRhdGlvbiBpcyB0byB1c2UgaXQgb25seSBmb3IgZ2V0dHkgYW5k IHV1Z2V0dHkuCi0KLTMuMi40IE5vdGVzIG9uIFNwZWNpZmljIEhQLVVYIFJlbGVhc2VzCi0KLSAg IFNFQ1RJT04gQ09OVEVOVFMKLQotICAzLjIuNC4xLiBbMjI4XUhQLVVYIDExCi0gIDMuMi40LjIu IFsyMjldSFAtVVggMTAKLSAgMy4yLjQuMy4gWzIzMF1IUC1VWCA5Ci0gIDMuMi40LjQuIFsyMzFd SFAtVVggOAotICAzLjIuNC41LiBbMjMyXUhQLVVYIDcgYW5kIEVhcmxpZXIKLQotMy4yLjQuMS4g SFAtVVggMTEKLQotICAgWyBbMjMzXVRvcCBdIFsgWzIzNF1Db250ZW50cyBdIFsgWzIzNV1TZWN0 aW9uIENvbnRlbnRzIF0gWyBbMjM2XU5leHQgXQotCi0gICBBcyBub3RlZCBpbiBbMjM3XVNlY3Rp b24gMy4yLjIsIHRoZSBIUC1VWCAxMSBUZWxuZXQgc2VydmVyIGFuZC9vcgotICAgcHNldWRvdGVy bWluYWwgZHJpdmVyIGFyZSBhIHNlcmlvdXMgaW1wZWRpbWVudCB0byBmaWxlIHRyYW5zZmVyIG92 ZXIKLSAgIFRlbG5ldCBjb25uZWN0aW9ucyBpbnRvIEhQLVVYLiBJZiB5b3UgaGF2ZSBhIFRlbG5l dCBjb25uZWN0aW9uIGludG8KLSAgIEhQLVVYIDExLCB0ZWxsIHlvdXIgZGVza3RvcCBLZXJtaXQg cHJvZ3JhbSB0bzoKLQotICBzZXQgc3RyZWFtaW5nIG9mZgotICBzZXQgcmVjZWl2ZSBwYWNrZXQt bGVuZ3RoIDIwMDAKLSAgc2V0IHNlbmQgcGFja2V0LWxlbmd0aCA1MDAKLQotICAgRmlsZSB0cmFu c2ZlciBzcGVlZHMgb3ZlciBjb25uZWN0aW9ucyBmcm9tIEhQLVVYIDExIChkaWFsZWQgb3IgVGVs bmV0KQotICAgYXJlIG5vdCBpbXBlZGVkIHdoYXRzb2V2ZXIsIGFuZCBjYW4gZ28gYXQgd2hhdGV2 ZXIgc3BlZWQgaXMgYWxsb3dlZCBieQotICAgdGhlIGNvbm5lY3Rpb24gYW5kIHRoZSBLZXJtaXQg cGFydG5lciBvbiB0aGUgZmFyIGVuZC4KLQotICAgUEEtUklTQyBiaW5hcmllcyBmb3IgSFAtVVgg MTAuMjAgb3IgbGF0ZXIgc2hvdWxkIHJ1biBvbiBhbnkgUEEtUklTQwotICAgc3lzdGVtLCBTNzAw IG9yIFM4MDAsIGFzIGxvbmcgYXMgdGhlIGJpbmFyeSB3YXMgbm90IGJ1aWx0IHVuZGVyIGEgbGF0 ZXIKLSAgIEhQLVVYIHZlcnNpb24gdGhhbiB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBIUC1V WCAxMS4wMCBhbmQgMTEuMTEgYXJlCi0gICBvbmx5IGZvciBQQS1SSVNDIHN5c3RlbXMuIEhQLVVY IDExLjIwIGlzIG9ubHkgZm9yIElBNjQgKHN1YnNlcXVlbnQKLSAgIEhQLVVYIHJlbGVhc2VzIHdp bGwgYmUgZm9yIGJvdGggUEEtUklTQyBhbmQgSUE2NCkuIFRvIGNoZWNrIGJpbmFyeQotICAgY29t cGF0aWJpbGl0eSwgdGhlIGZvbGxvd2luZyBDLUtlcm1pdCA4LjAgYmluYXJpZXMgd2VyZSBydW4K LSAgIHN1Y2Nlc3NmdWxseSBvbiBhbiBIUC05MDAwLzc4NSB3aXRoIEhQLVVYIDExLjExOgotCi0g ICAgICogTW9kZWwgN3h4IEhQLVVYIDEwLjIwCi0gICAgICogTW9kZWwgOHh4IEhQLVVYIDEwLjIw Ci0gICAgICogTW9kZWwgN3h4IEhQLVVYIDExLjAwCi0gICAgICogTW9kZWwgOHh4IEhQLVVYIDEx LjAwCi0gICAgICogTW9kZWwgN3h4IEhQLVVYIDExLjExCi0gICAgICogTW9kZWwgOHh4IEhQLVVY IDExLjExCi0KLSAgIEJpbmFyaWVzIGJ1aWx0IHVuZGVyIHNvbWUgb2YgdGhlIGVhcmxpZXIgSFAt VVggcmVsZWFzZXMsIHN1Y2ggYXMgOS4wNSwKLSAgIG1pZ2h0IGFsc28gd29yaywgYnV0IG9ubHkg aWYgYnVpbHQgZm9yIHRoZSBzYW1lIGhhcmR3YXJlIGZhbWlseSAoZS5nLgotICAgczcwMCkuCi0K LTMuMi40LjIuIEhQLVVYIDEwCi0KLSAgIFsgWzIzOF1Ub3AgXSBbIFsyMzldQ29udGVudHMgXSBb IFsyNDBdU2VjdGlvbiBDb250ZW50cyBdIFsgWzI0MV1OZXh0IF0KLSAgIFsgWzI0Ml1QcmV2aW91 cyBdCi0KLSAgIEJlZ2lubmluZyBpbiBIUC1VWCAxMC4xMCwgbGliY3Vyc2VzIGlzIGxpbmtlZCB0 byBsaWJ4Y3Vyc2VzLCB0aGUgbmV3Ci0gICBVTklYOTUgKFgvT3BlbikgdmVyc2lvbiBvZiBjdXJz ZXMsIHdoaWNoIGhhcyBzb21lIHNlcmlvdXMgYnVnczsgc29tZQotICAgcm91dGluZXMsIHdoZW4g Y2FsbGVkLCB3b3VsZCBoYW5nIGFuZCBuZXZlciByZXR1cm4sIHNvbWUgd291bGQgZHVtcAotICAg Y29yZS4gRXZpZGVudGx5IGxpYnhjdXJzZXMgY29udGFpbnMgYSBzZWxlY3QoKSByb3V0aW5lLCBh bmQgd2hlbmV2ZXIKLSAgIEMtS2VybWl0IGNhbGxzIHdoYXQgaXQgdGhpbmtzIGlzIHRoZSByZWd1 bGFyIChzb2NrZXRzKSBzZWxlY3QoKSwgaXQKLSAgIGdldHMgdGhlIGN1cnNlcyBvbmUsIGNhdXNp bmcgYSBzZWdtZW50YXRpb24gZmF1bHQuIFRoZXJlIGlzIGEgcGF0Y2ggZm9yCi0gICB0aGlzIGZy b20gSFAsIFBIQ09fODA4NiwgInM3MDBfODAwIDEwLjEwIGxpYmN1cnNlcyBwYXRjaCIsICJzaGFy ZWQgbGliCi0gICBjdXJzZXMgcHJvZ3JhbSBoYW5ncyBvbiAxMC4xMCIsICIxMC4xMCBlbmhhbmNl ZCBYL09wZW4gY3Vyc2VzIGNvcmUKLSAgIGR1bXBzIGR1ZSB0byB1c2luZyB3cm9uZyBzZWxlY3Qg Y2FsbCIsIDk2LzA4LzAyICh5b3UgY2FuIHRlbGwgaWYgdGhlCi0gICBwYXRjaCBpcyBpbnN0YWxs ZWQgd2l0aCAid2hhdCAvdXNyL2xpYi9saWJ4Y3Vyc2VzLjEiOyB0aGUgdW5wYXRjaGVkCi0gICB2 ZXJzaW9uIGlzIDc2LjIwLCB0aGUgcGF0Y2hlZCBvbmUgaXMgNzYuMjAuMS4yKS4gSXQgaGFzIGJl ZW4gdmVyaWZpZWQKLSAgIHRoYXQgQy1LZXJtaXQgd29ya3MgT0sgd2l0aCB0aGUgcGF0Y2hlZCBs aWJyYXJ5LCBidXQgcmVzdWx0cyBhcmUgbm90Ci0gICBkZWZpbml0ZSBmb3IgSFAtVVggMTAuMjAg b3IgaGlnaGVyLgotCi0gICBUbyBlbnN1cmUgdGhhdCBDLUtlcm1pdCB3b3JrcyBldmVuIG9uIG5v bi1wYXRjaGVkIEhQLVVYIDEwLjEwIHN5c3RlbXMsCi0gICBzZXBhcmF0ZSBtYWtlZmlsZSBlbnRy aWVzIGFyZSBwcm92aWRlZCBmb3IgSFAtVVggMTAuMDAvMTAuMDEsIDEwLjEwLAotICAgMTAuMjAs IGV0YywgaW4gd2hpY2ggdGhlIGVudHJpZXMgZm9yIDEwLjEwIGFuZCBhYm92ZSBsaW5rIHdpdGgK LSAgIGxpYkhjdXJzZXMsIHdoaWNoIGlzICJIUCBjdXJzZXMiLCB0aGUgb25lIHRoYXQgd2FzIHVz ZWQgaW4gMTAuMDAvMTAuMDEuCi0gICBIUC1VWCAxMS4yMCBhbmQgbGF0ZXIsIGhvd2V2ZXIsIGxp bmsgd2l0aCBsaWJjdXJzZXMsIGFzIGxpYkhjdXJzZXMKLSAgIGRpc2FwcGVhcmVkIGluIDExLjIw LgotCi0zLjIuNC4zLiBIUC1VWCA5Ci0KLSAgIFsgWzI0M11Ub3AgXSBbIFsyNDRdQ29udGVudHMg XSBbIFsyNDVdU2VjdGlvbiBDb250ZW50cyBdIFsgWzI0Nl1OZXh0IF0KLSAgIFsgWzI0N11QcmV2 aW91cyBdCi0KLSAgIEhQLVVYIDkuMDAgYW5kIDkuMDEgbmVlZCBwYXRjaCBQSE5FXzEwNTcyIChu b3RlOiB0aGlzIHJlcGxhY2VzCi0gICBQSE5FXzM2NDEpIGZvciBocHR0MC5vLCBhc2lvMC5vLCBh bmQgdHR5Y29tbi5vIGluIGxpYmhwLXV4LmEuIENvbnRhY3QKLSAgIEhld2xldHQgUGFja2FyZCBp ZiB5b3UgbmVlZCB0aGlzIHBhdGNoLiBXaXRob3V0IGl0LCB0aGUgZGlhbG91dCBkZXZpY2UKLSAg ICh0dHkpIHdpbGwgYmUgaHVuZyBhZnRlciBmaXJzdCB1c2U7IHN1YnNlcXVlbnQgYXR0ZW1wdHMg dG8gdXNlIHdpbGwKLSAgIHJldHVybiBhbiBlcnJvciBsaWtlICJkZXZpY2UgYnVzeSIuIChUaGVy ZSBhcmUgYWxzbyBlcXVpdmFsZW50IHBhdGNoZXMKLSAgIGZvciBzNzAwIDkuMDMgOS4wNSA5LjA3 IChQSE5FXzEwNTczKSBhbmQgczgwMCA5LjAwIDkuMDQgKFBITkVfMTA0MTYpLgotCi0gICBXaGVu IEMtS2VybWl0IGlzIGluIHNlcnZlciBtb2RlLCBpdCBtaWdodCBoYXZlIHRyb3VibGUgZXhlY3V0 aW5nIFJFTU9URQotICAgSE9TVCBjb21tYW5kcy4gVGhpcyBwcm9ibGVtIGhhcHBlbnMgdW5kZXIg SFAtVVggOS4wMCAoTW90b3JvbGEpIGFuZAotICAgSFAtVVggOS4wMSAoUklTQykgSUYgdGhlIEMt U2hlbGwgaXMgdGhlIGxvZ2luIHNoZWxsIEFORCB3aXRoIHRoZQotICAgQy1TaGVsbCBSZXZpc2lv biA3MC4xNS4gQmVzdCB0aGluZyBpcyB0byBpbnN0YWxsIEhQJ3MgUGF0Y2ggUEhDT180OTE5Ci0g ICBmb3IgU2VyaWVzIDMwMC80MDAgYW5kIFBIQ09fNTAxNSBmb3IgdGhlIFNlcmllcyA3MDAvODAw LiBQSENPXzUwMTUgaXMKLSAgIGNhbGxlZCAiczcwMF84MDAgOS5YIGN1bXVsYXRpdmUgY3NoKDEp IHBhdGNoIHdpdGggbWVtb3J5IGxlYWsgZml4IgotICAgd2hpY2ggd29ya3MgZm9yIEhQLVVYIDku MDAsIDkuMDEsIDkuMDMsIDkuMDQsIDkuMDUgYW5kIDkuMDcuIEF0IGxlYXN0Ci0gICB5b3UgbmVl ZCBDLVNoZWxsIFJldmlzaW9uIDcyLjEyIQotCi0gICBDLUtlcm1pdCB3b3JrcyBmaW5lIC0tIGlu Y2x1ZGluZyBpdHMgY3Vyc2VzLWJhc2VkIGZpbGUtdHJhbnNmZXIgZGlzcGxheQotICAgLS0gb24g dGhlIGNvbnNvbGUgdGVybWluYWwsIGluIGEgcmVtb3RlIHNlc3Npb24gKGUuZy4gd2hlbiBsb2dn ZWQgaW4gdG8KLSAgIHRoZSBIUCA5MDAwIG9uIGEgdGVybWluYWwgcG9ydCBvciB3aGVuIHRlbG5l dHRlZCBvciBybG9naW4nZCksIGFuZCBpbgotICAgYW4gSFAtVlVFIGhwdGVybSB3aW5kb3cgb3Ig YW4geHRlcm0gd2luZG93LgotCi0zLjIuNC40LiBIUC1VWCA4Ci0KLSAgIFsgWzI0OF1Ub3AgXSBb IFsyNDldQ29udGVudHMgXSBbIFsyNTBdU2VjdGlvbiBDb250ZW50cyBdIFsgWzI1MV1OZXh0IF0K LSAgIFsgWzI1Ml1QcmV2aW91cyBdCi0KLSAgIFRvIG1ha2UgQy1LZXJtaXQgd29yayBvbiBIUC1V WCA4LjA1IG9uIGEgbW9kZWwgNzIwLCBvYnRhaW4gYW5kIGluc3RhbGwKLSAgIEhQLVVYIHBhdGNo IFBITkVfMDg5OS4gVGhpcyBwYXRjaCBkZWFscyB3aXRoIGEgbG90IG9mIGRyaXZlciBpc3N1ZXMs Ci0gICBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBjb21tdW5pY2F0aW9uIGF0IGhpZ2hlciBzcGVl ZHMuCi0KLSAgIE9uZSB1c2VyIHJlcG9ydHM6Ci0KLSAgICAgT24gSFAtVVggOCBET04nVCBpbnN0 YWxsICd0dHkgcGF0Y2gnIFBIS0xfNDY1NiwgaW5zdGFsbCBQSEtMXzMwNDcKLSAgICAgaW5zdGVh ZCEgWWVzdGVyZGF5IEkgdHJpZWQgdGhpcyBsYXRlc3QgdHR5IHBhdGNoIFBIS0xfNDY1NiBhbmQg aGFkCi0gICAgIHRlcnJpYmxlIHByb2JsZW1zLiBUaGlzIHBhdGNoIHNob3VsZCBmaXggUlRTL0NU UyBwcm9ibGVtcy4gV2l0aCB0ZXh0Ci0gICAgIHRyYW5zZmVyIGFsbCBsb29rcyBuaWNlLiBCdXQg d2hlbiBJIHN3aXRjaGVkIG92ZXIgdG8gYmluYXJ5IGZpbGVzCi0gICAgIHRoZSBzZXJpYWwgaW50 ZXJmYWNlIHJldHVybmVkIG9ubHkgcnViaXNoIHRvIEMtS2VybWl0LiBBbGwgc29ydHMgb2YKLSAg ICAgcHJvdG9jb2wsIENSQyBhbmQgcGFja2VkIGVycm9ycyBJIGhhZC4gQWZ0ZXIgc2V2ZXJhbCB0 ZXN0cyBhbmQgYWZ0ZXIKLSAgICAgdW5pbnN0YWxsaW5nIHRoYXQgcGF0Y2gsIGFsbCB0cmFuc2Zl cnMgd29ya2VkIGZpbmUuIE1CJ3Mgb2YgZGF0YQotICAgICB3aXRob3V0IGFueSBlcnJvcnMuIFNv IGtlZXAgeW91ciBmaW5nZXJzIGF3YXkgZnJvbSB0aGF0IHBhdGNoLiBJZgotICAgICBhbnlib2R5 IG5lZWRzIHRoZSBQSEtMXzMwNDcgcGF0Y2ggSSBoYXZlIGl0IGhlcmUuIEl0IGlzIG5vIGxvbmdl cgotICAgICBhdmFpbGFibGUgZnJvbSBIUCdzIHBhdGNoIGJhc2UuCi0KLTMuMi40LjUuIEhQLVVY IDcgYW5kIEVhcmxpZXIKLQotICAgWyBbMjUzXVRvcCBdIFsgWzI1NF1Db250ZW50cyBdIFsgWzI1 NV1TZWN0aW9uIENvbnRlbnRzIF0gWwotICAgWzI1Nl1QcmV2aW91cyBdCi0KLSAgIFdoZW4gdHJh bnNmZXJyaW5nIGZpbGVzIGludG8gSFAtVVggNSBvciA2IG92ZXIgYSBUZWxuZXQgY29ubmVjdGlv biwgeW91Ci0gICBtdXN0IG5vdCB1c2Ugc3RyZWFtaW5nLCBhbmQgeW91IG11c3Qgbm90IHVzZSBh IHBhY2tldCBsZW5ndGggZ3JlYXRlcgotICAgdGhhbiA1MTIuIEhvd2V2ZXIsIHlvdSBjYW4gdXNl IHN0cmVhbWluZyBhbmQgbG9uZ2VyIHBhY2tldHMgd2hlbgotICAgc2VuZGluZyBmaWxlcyBmcm9t IEhQLVVYIG9uIGEgVGVsbmV0IGNvbm5lY3Rpb24uIEluIEMtS2VybWl0IDguMCwgdGhlCi0gICBk ZWZhdWx0IHJlY2VpdmUgcGFja2V0IGxlbmd0aCBmb3IgSFAtVVggNSBhbmQgNiB3YXMgY2hhbmdl ZCB0byA1MDAgKGJ1dAotICAgeW91IGNhbiBzdGlsbCBpbmNyZWFzZSBpdCB3aXRoIFNFVCBSRUNF SVZFIFBBQ0tFVC1MRU5HVEggaWYgeW91IHdpc2gsCi0gICBlLmcuIGZvciBub24tVGVsbmV0IGNv bm5lY3Rpb25zKS4gRGlzYWJsZSBzdHJlYW1pbmcgd2l0aCBTRVQgU1RSRUFNSU5HCi0gICBPRkYu Ci0KLSAgIFRoZSBIUC1VWCA1LjAwIHZlcnNpb24gb2YgQy1LZXJtaXQgZG9lcyBub3QgaW5jbHVk ZSB0aGUgZnVsbHNjcmVlbgotICAgZmlsZS10cmFuc2ZlciBiZWNhdXNlIG9mIHByb2JsZW1zIHdp dGggdGhlIGN1cnNlcyBsaWJyYXJ5LgotCi0gICBJZiBIUC1VWCA1LjIxIHdpdGggV29sbG9uZ29u ZyBUQ1AvSVAgaXMgb24gdGhlIHJlbW90ZSBlbmQgb2YgYSBUZWxuZXQKLSAgIGNvbm5lY3Rpb24s IHN0cmVhbWluZyB0cmFuc2ZlcnMgdG8gSFAtVVggaW52YXJpYWJseSBmYWlsLiBXb3JrYXJvdW5k OgotICAgU0VUIFNUUkVBTUlORyBPRkYuIFBhY2tldHMgbG9uZ2VyIHRoYW4gYWJvdXQgMTAwMCBz aG91bGQgbm90IGJlIHVzZWQuCi0gICBUcmFuc2ZlcnMgZnJvbSB0aGVzZSBzeXN0ZW1zLCBob3dl dmVyLCBjYW4gdXNlIHN0cmVhbWluZyBhbmQvb3IgbG9uZ2VyCi0gICBwYWNrZXRzLgotCi0gICBS ZXBvcnRlZGx5LCAiW3RoZXJlIGlzXSBhIGJ1ZyBpbiBDLUtlcm1pdCB1c2luZyBIUC1VWCB2ZXJz aW9uIDUuMjEgb24KLSAgIHRoZSBIUC05MDAwIHNlcmllcyA1MDAgY29tcHV0ZXJzLiBJdCBvbmx5 IG9jY3VycyB3aGVuIHRoZSBjb250cm9sbGluZwotICAgdGVybWluYWwgaXMgdXNpbmcgYW4gSFAt MjcxNDAgc2l4LXBvcnQgbW9kZW0gbXV4LiBUaGUgcHJvYmxlbSBpcyBub3QKLSAgIHByZXNlbnQg aWYgdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGlzIGxvZ2dlZCBpbnRvIGFuIEhQLTI3MTMwCi0g ICBlaWdodC1wb3J0IG11eC4gVGhlIHN5bXB0b20gaXMgdGhhdCBqdXN0IGFmdGVyIGRpYWxpbmcg c3VjY2Vzc2Z1bGx5IGFuZAotICAgY29ubmVjdGluZyBLZXJtaXQgbG9ja3MgdXAgYW5kIHRoZSBw b3J0IGlzIHVudXNhYmxlIHVudGlsIGJvdGggZm9ya3Mgb2YKLSAgIEtlcm1pdCBhbmQgdGhlIGxv Z2luIHNoZWxsIGFyZSBraWxsZWQuIiAoVGhpcyByZXBvcnQgcHJlZGF0ZXMgQy1LZXJtaXQKLSAg IDYuMCBhbmQgbWlnaHQgbm8gbG9uZ2VyIGFwcGx5LikKLQotMy4yLjUuIEhQLVVYIGFuZCBYLjI1 Ci0KLSAgIFsgWzI1N11Ub3AgXSBbIFsyNThdQ29udGVudHMgXSBbIFsyNTldU2VjdGlvbiBDb250 ZW50cyBdIFsKLSAgIFsyNjBdUHJldmlvdXMgXQotCi0gICBBbHRob3VnaCBDLUtlcm1pdCBwcmVz ZW50bHkgZG9lcyBub3QgaW5jbHVkZSBidWlsdC1pbiBzdXBwb3J0IGZvciBIUC1VWAotICAgWC4y NSAoYXMgaXQgZG9lcyBmb3IgdGhlIFN1biBhbmQgSUJNIFguMjUgcHJvZHVjdHMpLCBpdCBjYW4g c3RpbGwgYmUKLSAgIHVzZWQgdG8gbWFrZSBYLjI1IGNvbm5lY3Rpb25zIGFzIGZvbGxvd3M6IHN0 YXJ0IEtlcm1pdCBhbmQgdGhlbiB0ZWxuZXQKLSAgIHRvIGxvY2FsaG9zdC4gQWZ0ZXIgbG9nZ2lu ZyBiYWNrIGluLCBzdGFydCBwYWRlbSBhcyB5b3Ugd291bGQgbm9ybWFsbHkKLSAgIGRvIHRvIGNv bm5lY3Qgb3ZlciBYLjI1LiBQYWRlbSBhY3RzIGFzIGEgcGlwZSBiZXR3ZWVuIEtlcm1pdCBhbmQg WC4yNS4KLSAgIEluIEMtS2VybWl0IDcuMCwgeW91IG1pZ2h0IGFsc28gYmUgYWJsZSB0byBhdm9p ZCB0aGUgInRlbG5ldCBsb2NhbGhvc3QiCi0gICBzdGVwIGJ5IHVzaW5nOgotCi0gIEMtS2VybWl0 PiBwdHkgcGFkZW0gYWRkcmVzcwotCi0gICBUaGlzIHdvcmtzIGlmIHBhZGVtIHVzZXMgc3RhbmRh cmQgaS9vICh3aG8ga25vd3M/KS4KLQotMy4zLiBDLUtFUk1JVCBBTkQgTElOVVgKLQotICAgWyBb MjYxXVRvcCBdIFsgWzI2Ml1Db250ZW50cyBdIFsgWzI2M11TZWN0aW9uIENvbnRlbnRzIF0gWyBb MjY0XU5leHQgXQotICAgWyBbMjY1XVByZXZpb3VzIF0KLQotICAgU0VDVElPTiBDT05URU5UUwot Ci0gIDMuMy4xLiBbMjY2XVByb2JsZW1zIEJ1aWxkaW5nIEMtS2VybWl0IGZvciBMaW51eAotICAz LjMuMi4gWzI2N11Qcm9ibGVtcyB3aXRoIFNlcmlhbCBEZXZpY2VzIGluIExpbnV4Ci0gIDMuMy4z LiBbMjY4XVRlcm1pbmFsIEVtdWxhdGlvbiBpbiBMaW51eAotICAzLjMuNC4gWzI2OV1EYXRlcyBh bmQgVGltZXMKLSAgMy4zLjUuIFsyNzBdU3RhcnR1cCBFcnJvcnMKLSAgMy4zLjYuIFsyNzFdVGhl IEZ1bGxzY3JlZW4gRmlsZSBUcmFuc2ZlciBEaXNwbGF5Ci0KLSAgICAgKEF1Z3VzdCAyMDEwKSBS ZXBvcnRlZGx5IEMtS2VybWl0IHBhY2thZ2VzIGZvciBjZXJ0YWluIExpbnV4Ci0gICAgIGRpc3Ry aWJ1dGlvbnMgc3VjaCBhcyBDZW50b3MgYW5kIFVidW50dSBoYXZlIGNlcnRhaW4gZmVhdHVyZXMK LSAgICAgZGlzYWJsZWQsIGZvciBleGFtcGxlIHRoZSBTU0ggY29tbWFuZCwgU0VUIEhPU1QgUFRZ IC9TU0gsIGFuZAotICAgICBwZXJoYXBzIGFueXRoaW5nIGVsc2UgdG8gZG8gd2l0aCBTU0ggYW5k L29yIHBzZXVkb3Rlcm1pbmFscyBhbmQgd2hvCi0gICAgIGtub3dzIHdoYXQgZWxzZS4gSWYgeW91 IGRvd25sb2FkIHRoZSByZWd1bGFyIHBhY2thZ2UgKCJ0YXJiYWxsIikKLSAgICAgZnJvbSB0aGUg S2VybWl0IFByb2plY3QgYW5kIGJ1aWxkIGZyb20gaXQgKCJtYWtlIGxpbnV4IiksIGV2ZXJ5dGhp bmcKLSAgICAgaXMgZmluZS4KLQotICAgICBDLUtlcm1pdCBpbiBVYnVudHUgMTAuMDQgYW5kIDku MTAgd2FzIHJlcG9ydGVkIHNsb3cgdG8gc3RhcnQgYmVjYXVzZQotICAgICBpdCB3YXMgdHJ5aW5n IHRvIHJlc29sdmUgdGhlIElQIGFkZHJlc3MgMjU1LjI1NS4yNTUuMjU1LiBMYXRlciwgYWxzbwot ICAgICBpbiByZWNlbnQgRGViaWFuIHZlcnNpb25zLiBUaGUgZm9sbG93aW5nIGlzIHNlZW4gaW4g dGhlIHN0cmFjZToKLQotd3JpdGUoMywgIlJFU09MVkUtQUREUkVTUyAyNTUuMjU1LjI1NS4yNTVc biIsIDMyKQotCi0gICAgIFRoaXMgaXMgbm90IEtlcm1pdCBQcm9qZWN0IGNvZGUuIFR1cm5zIG91 dCB0byBiZSBzb21ldGhpbmcgaW4KLSAgICAgZ2xpYmMncyByZXNvbHZlciwgYW5kIGNhbiBiZSBm aXhlZCBieSBjaGFuZ2luZyAvZXRjL25zc3dpdGNoLmNvbmYsCi0gICAgIGJ1dCBpdCBtaWdodCBi cmVhayBvdGhlciBzb2Z0d2FyZSwgc3VjaCBhcyBbMjcyXUF2YWhpIG9yIGFueXRoaW5nCi0gICAg IChzdWNoIGFzIEdub21lLCBKYXZhLCBvciBDdXBzKSB0aGF0IGRlcGVuZHMgb24gaXQuIEknbSBu b3Qgc3VyZQotICAgICB3aGVyZSBpdCBoYXBwZW5zOyBJIGRvbid0IHRoaW5rIEtlcm1pdCB0cmll cyB0byBnZXQgaXRzIElQIGFkZHJlc3MKLSAgICAgYXQgc3RhcnR1cCB0aW1lLCBvbmx5IHdoZW4g aXQncyBuZWVkZWQgb3IgYXNrZWQgZm9yLCBlLmcuIHdoZW4KLSAgICAgbWFraW5nIGEgY29ubmVj dGlvbiBvciBldmFsdWF0aW5nIFx2KGlwYWRkcmVzcykuCi0KLSAgIFJFRkVSRU5DRVMKLQotICAg Rm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHJlYWQgdGhlIFsyNzNdY29tcC5vcy5saW51eC5taXNj LAotICAgWzI3NF1jb21wLm9zLmxpbnV4LmFuc3dlcnMsIGFuZCBvdGhlciBMaW51eC1vcmllbnRl ZCBuZXdzZ3JvdXBzLCBhbmQKLSAgIHNlZToKLQotICAgVGhlIExpbnV4IERvY3VtZW50IFByb2pl Y3QgKExEUCkKLSAgICAgICAgICBbMjc1XWh0dHA6Ly93d3cudGxkcC5vcmcvCi0KLSAgIFRoZSBM aW51eCBGQVEKLSAgICAgICAgICBbMjc2XWh0dHA6Ly93d3cudGxkcC5vcmcvRkFRL0xpbnV4LUZB US5odG1sCi0KLSAgIFRoZSBMaW51eCBIT1dUT3MgKGVzcGVjaWFsbHkgdGhlIFNlcmlhbCBIT1dU TykKLQotICAgICBbMjc3XWh0dHA6Ly93d3cudGxkcC5vcmcvSE9XVE8vU2VyaWFsLUhPV1RPLmh0 bWwKLQotICAgICBbMjc4XWh0dHA6Ly90bGRwLm9yZy9IT1dUTy9Nb2RlbS1IT1dUTy5odG1sCi0K LSAgICAgWzI3OV1mdHA6Ly9zdW5zaXRlLnVuYy5lZHUvcHViL0xpbnV4L2RvY3MvSE9XVE8KLQot ICAgICBbMjgwXWZ0cDovL3RzeC0xMS5taXQuZWR1L3B1Yi9saW51eC9kb2NzL0hPV1RPCi0KLSAg ICAgWzI4MV1odHRwOi8vd3d3LnRsZHAub3JnL0hPV1RPLwotCi0gICAgIFsyODJdaHR0cDovL3d3 dy50bGRwLm9yZy9obWlycm9ycy5odG1sCi0KLSAgIExpbnV4IFZlbmRvciBUZWNoIFN1cHBvcnQg UGFnZXM6Ci0KLSAgICAgWzI4M11odHRwOi8vd3d3LnJlZGhhdC5jb20vYXBwcy9zdXBwb3J0Lwot Ci0gICAgIFsyODRdaHR0cDovL3d3dy5kZWJpYW4ub3JnL3N1cHBvcnQKLQotICAgICBbMjg1XWh0 dHA6Ly93d3cuc2xhY2t3YXJlLmNvbS9zdXBwb3J0LwotCi0gICAgIFsyODZdaHR0cDovL3d3dy5j YWxkZXJhLmNvbS9zdXBwb3J0LwotCi0gICAgIFsyODddU1VTRSBMaW51eCBTdXBwb3J0Ci0KLSAg ICAgWzI4OF1odHRwOi8vd3d3Lm1hbmRyYWtlLmNvbS9zdXBwb3J0LwotCi0gICAgIFsyODldaHR0 cDovL3d3dy50dXJib2xpbnV4LmNvbS9zdXBwb3J0LwotCi0gICBMaW51eCBXaW5tb2RlbSBTdXBw b3J0Ci0gICAgICAgICAgWzI5MF1odHRwOi8vd3d3Lmxpbm1vZGVtcy5vcmcvCi0KLSAgIEFsc28g c2VlIGdlbmVyYWwgY29tbWVudHMgb24gUEMtYmFzZWQgVW5peGVzIGluIFsyOTFdU2VjdGlvbiAz LjAuCi0KLSAgIFdoYXQgTGludXggdmVyc2lvbiBpcyBpdD8gLS0gInVuYW1lIC1hIiBzdXBwbGll cyBvbmx5IGtlcm5lbAotICAgaW5mb3JtYXRpb24sIGJ1dCB0aGVzZSBkYXlzIGl0J3MgdGhlIGRp c3RyaWJ1dGlvbiB0aGF0IG1hdHRlcnM6IFJlZCBIYXQKLSAgIDcuMywgRGViaWFuIDIuMiwgU2xh Y2t3YXJlIDguMCwgZXRjLiBVbmZvcnR1bmF0ZWx5IHRoZXJlJ3Mgbm8KLSAgIGNvbnNpc3RlbnQg d2F5IHRvIGdldCB0aGUgZGlzdHJpYnV0aW9uIHZlcnNpb24uIFVzdWFsbHkgaXQncyBpbiBhCi0g ICBkaXN0cmlidXRpb24tc3BlY2lmaWMgZmlsZToKLQotICAgICBSZWQgSGF0OiAgIC9ldGMvaXNz dWUgb3IgL2V0Yy9yZWRoYXQtcmVsZWFzZQotICAgICBEZWJpYW46ICAgIC9ldGMvZGViaWFuX3Zl cnNpb24KLSAgICAgU2xhY2t3YXJlOiAvZXRjL3NsYWNrd2FyZS12ZXJzaW9uIChhdCBsZWFzdCBp biBsYXRlciB2ZXJzaW9ucykKLQotICAgRGlkIHlvdSBrbm93OiBERUNuZXQgaXMgYXZhaWxhYmxl IGZvciBMaW51eD8gU2VlOgotCi0gIFsyOTJdaHR0cDovL2xpbnV4LmRyZWFtdGltZS5vcmcvZGVj bmV0LwotCi0gICAoQnV0IHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIGl0IGluIEMtS2VybWl0IC0t IGFueWJvZHkgaW50ZXJlc3RlZCBpbgotICAgYWRkaW5nIGl0LCBwbGVhc2UgWzI5M11sZXQgbWUg a25vdykuCi0KLSAgIEJlZm9yZSBwcm9jZWVkaW5nLCBsZXQncyBoYW5kbGUgdGhlIHNvbWUgb2Yg dGhlIG1vc3QgZnJlcXVlbnRseSBhc2tlZAotICAgcXVlc3Rpb24gaW4gdGhlIExpbnV4IG5ld3Nn cm91cHM6Ci0KLSAgICAxLiBOZWl0aGVyIEMtS2VybWl0IG5vciBhbnkgb3RoZXIgTGludXggYXBw bGljYXRpb24gY2FuIHVzZSBXaW5tb2RlbXMsCi0gICAgICAgZXhjZXB0IGluIHRoZSBbMjk0XXJh cmUgY2FzZXMgd2hlcmUgTGludXggZHJpdmVycyBoYXZlIGJlZW4gd3JpdHRlbgotICAgICAgIGZv ciB0aGVtLiBTZWUgWzI5NV1TZWN0aW9uIDMuMC4yIGZvciBkZXRhaWxzLgotICAgIDIuICJXaHkg ZG9lcyBpdCB0YWtlIHN1Y2ggYSBsb25nIHRpbWUgdG8gbWFrZSBhIHRlbG5ldCBjb25uZWN0aW9u IHRvCi0gICAgICAgKG9yIGZyb20pIG15IExpbnV4IFBDPyIgKHRoaXMgYXBwbGllcyB0byBDLUtl cm1pdCBhbmQgdG8gcmVndWxhcgotICAgICAgIFRlbG5ldCkuIE1vc3QgdGVsbmV0IHNlcnZlcnMg dGhlc2UgZGF5cyBwZXJmb3JtIHJldmVyc2UgRE5TIGxvb2t1cHMKLSAgICAgICBvbiB0aGUgY2xp ZW50IChmb3Igc2VjdXJpdHkgYW5kL29yIGxvZ2dpbmcgcmVhc29ucykuIElmIHRoZSBUZWxuZXQK LSAgICAgICBjbGllbnQncyBhZGRyZXNzIGNhbm5vdCBiZSBmb3VuZCBieSB0aGUgc2VydmVyJ3Mg bG9jYWwgRE5TIHNlcnZlciwKLSAgICAgICB0aGUgRE5TIHJlcXVlc3QgZ29lcyBvdXQgdG8gdGhl IEludGVybmV0IGF0IGxhcmdlLCBhbmQgdGhpcyBjYW4KLSAgICAgICB0YWtlIHF1aXRlIHNvbWUg dGltZS4gVGhlIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB0byBtYWtlIHN1cmUKLSAgICAg ICB0aGF0IGJvdGggY2xpZW50IGFuZCBob3N0IGFyZSByZWdpc3RlcmVkIGluIEROUywgYW5kIHRo YXQgdGhlCi0gICAgICAgcmVnaXN0cmF0aW9ucyBhcmUgZXhwb3J0ZWQuIEMtS2VybWl0IGl0c2Vs ZiBwZXJmb3JtcyByZXZlcnNlIEROUwotICAgICAgIGxvb2t1cHMgdW5sZXNzIHlvdSB0ZWxsIGl0 IG5vdCB0bzsgdGhpcyBpcyB0byBhbGxvdyBDLUtlcm1pdCB0byBsZXQKLSAgICAgICB5b3Uga25v dyB3aGljaCBob3N0IGl0IGlzIGFjdHVhbGx5IGNvbm5lY3RlZCB0byBpbiBjYXNlIHlvdSBoYXZl Ci0gICAgICAgbWFkZSBhIGNvbm5lY3Rpb24gdG8gYSBob3N0IHBvb2wgKG11bHRpaG9tZWQgaG9z dCkuIFlvdSBjYW4gZGlzYWJsZQotICAgICAgIEMtS2VybWl0J3MgcmV2ZXJzZSBETlMgbG9va3Vw IHdpdGggU0VUIFRDUCBSRVZFUlNFLUROUy1MT09LVVAgT0ZGLgotICAgIDMuIChBbnkgcXVlc3Rp b24gdGhhdCBoYXMgdGhlIHdvcmQgIlRlbG5ldCIgaW4gaXQuLi4pIFRoZSBrbmVlLWplcmsKLSAg ICAgICByZWFjdGlvbiBpcyAiZG9uJ3QgdXNlIFRlbG5ldCwgdXNlIFNTSCEiIFRoZXJlJ3Mgbm90 aGluZyB3cm9uZyB3aXRoCi0gICAgICAgVGVsbmV0LiBJbiBmYWN0IGl0J3MgZmFyIHN1cGVyaW9y IHRvIFNTSCBhcyBhIHByb3RvY29sIGluIHRlcm1zIG9mCi0gICAgICAgZmVhdHVyZXMgYW5kIGV4 dGVuc2liaWxpdHksIG5vdCB0byBtZW50aW9uIHBsYXRmb3JtIG5ldXRyYWxpdHkuIFRoZQotICAg ICAgIGlzc3VlIGx1cmtpbmcgYmVoaW5kIHRoZSBrbmVlLWplcmsgcmVhY3Rpb24gaXMgc2VjdXJp dHkuIFNTSCBpcwotICAgICAgIHRob3VnaHQgdG8gYmUgc2VjdXJlLCB3aGVyZWFzIFRlbG5ldCBp cyB0aG91Z2h0IHRvIGJlIGluc2VjdXJlLgotICAgICAgIFRoaXMgaXMgdHJ1ZSBmb3IgY2xlYXIt dGV4dCBUZWxuZXQgKGJlY2F1c2UgcGFzc3dvcmRzIHRyYXZlbCBpbiB0aGUKLSAgICAgICBjbGVh ciBhY3Jvc3MgdGhlIG5ldHdvcmspLCBidXQgYXBwYXJlbnRseSBmZXcgcGVvcGxlIHJlYWxpemUg dGhhdAotICAgICAgIFsyOTZdc2VjdXJlIFRlbG5ldCBjbGllbnRzIGFuZCBzZXJ2ZXJzIGhhdmUg YmVlbiBhdmFpbGFibGUgZm9yCi0gICAgICAgeWVhcnMsIGFuZCB0aGVzZSBhcmUgbW9yZSBzZWN1 cmUgdGhhbiBTU0ggKGZvciByZWFzb25zIGV4cGxhaW5lZAotICAgICAgIFsyOTddSEVSRSkuCi0g ICAgNC4gKEFueSBxdWVzdGlvbiB0aGF0IGhhcyB0aGUgd29yZCAiRlRQIiBpbiBpdC4uLikgVGhl IGtuZWUtamVyawotICAgICAgIHJlYWN0aW9uIGJlaW5nICJEb24ndCB1c2UgRlRQLCB1c2UgU0NQ ISIgKG9yIFNGVFApLiBTYW1lIGFuc3dlciBhcwotICAgICAgIGFib3ZlLCBidXQgbW9yZXNvLiBT Q1AgYW5kIFNGVFAgYXJlIG5vdCBvbmx5IG5vdCBwbGF0Zm9ybSBuZXV0cmFsLAotICAgICAgIHRo ZXkncmUgZGl2ZXJzaXR5LWhvc3RpbGUuIFRoZXkgdHJhbnNmZXIgZmlsZXMgb25seSBpbiBiaW5h cnkgbW9kZSwKLSAgICAgICB3aGljaCBtYW5nbGVzIHRleHQgZmlsZXMgYWNyb3NzIGRpZmZlcmVu dCBwbGF0Zm9ybXMsIHRvIHRoZSBzYW1lCi0gICAgICAgZGVncmVlIHRoZSBwbGF0Zm9ybSdzIHRl eHQtZmlsZSByZWNvcmQgZm9ybWF0IGFuZCBjaGFyYWN0ZXIgc2V0Ci0gICAgICAgZGlmZmVyLiBB biBleHRyZW1lIGV4YW1wbGUgd291bGQgYmUgYW4gVmFyaWFibGUtQmxvY2sgZm9ybWF0IEVCQ0RJ QwotICAgICAgIHRleHQgZmlsZSBvbiBhbiBJQk0gbWFpbmZyYW1lLCBiaW5hcnkgdHJhbnNmZXIg b2Ygd2hpY2ggdG8gVW5peAotICAgICAgIHdvdWxkIGRvIHlvdSBsaXR0bGUgZ29vZCBpbmRlZWQu IEZUUCB3YXMgZGVzaWduZWQgd2l0aCBkaXZlcnNpdHkgaW4KLSAgICAgICBtaW5kIGFuZCBzZWN1 cmUgdmVyc2lvbnMgYXJlIGF2YWlsYWJsZS4KLQotMy4zLjEuIFByb2JsZW1zIEJ1aWxkaW5nIEMt S2VybWl0IGZvciBMaW51eAotCi0gICBbIFsyOThdVG9wIF0gWyBbMjk5XUNvbnRlbnRzIF0gWyBb MzAwXVNlY3Rpb24gQ29udGVudHMgXSBbIFszMDFdTmV4dCBdCi0KLSAgIE1vZGVybiBMaW51eCBk aXN0cmlidXRpb25zIGxpa2UgUmVkIEhhdCBnaXZlIHlvdSBhIGNob2ljZSBhdAotICAgaW5zdGFs bGF0aW9uIHdoZXRoZXIgdG8gaW5jbHVkZSAiZGV2ZWxvcGVyIHRvb2xzIi4gT2J2aW91c2x5LCB5 b3UgY2FuJ3QKLSAgIGJ1aWxkIEMtS2VybWl0IG9yIGFueSBvdGhlciBDIHByb2dyYW0gZnJvbSBz b3VyY2UgY29kZSBpZiB5b3UgaGF2ZSBub3QKLSAgIGluc3RhbGxlZCB0aGUgZGV2ZWxvcGVyIHRv b2xzLiBCdXQgdG8gY29uZnVzZSBtYXR0ZXJzLCB5b3UgbWlnaHQgYWxzbwotICAgaGF2ZSB0byBj aG9vc2UgKHNlcGFyYXRlbHkpIHRvIGluc3RhbGwgdGhlICJjdXJzZXMiIG9yICJuY3Vyc2VzIgot ICAgdGVybWluYWwgY29udHJvbCBsaWJyYXJ5OyB0aHVzIGl0IGlzIHBvc3NpYmxlIHRvIGluc3Rh bGwgdGhlIEMgY29tcGlsZXIKLSAgIGFuZCBsaW5rZXIsIGJ1dCBvbWl0IHRoZSAobiljdXJzZXMg bGlicmFyeSBhbmQgaGVhZGVycy4gSWYgY3Vyc2VzIGlzCi0gICBub3QgaW5zdGFsbGVkLCB5b3Ug d2lsbCBub3QgYmUgYWJsZSB0byBidWlsZCBhIHZlcnNpb24gb2YgQy1LZXJtaXQgdGhhdAotICAg c3VwcG9ydHMgdGhlIGZ1bGxzY3JlZW4gZmlsZS10cmFuc2ZlciBkaXNwbGF5LCBpbiB3aGljaCBj YXNlIHlvdSdsbAotICAgbmVlZCB0byB1c2UgdGhlICJsaW51eG5jIiBtYWtlZmlsZSB0YXJnZXQg KG5jID0gTm8gQ3Vyc2VzKSBvciBlbHNlCi0gICBpbnN0YWxsIG5jdXJzZXMgYmVmb3JlIGJ1aWxk aW5nLgotCi0gICBUaGVyZSBhcmUgYWxsIHNvcnRzIG9mIGNvbmZ1c2luZyBpc3N1ZXMgY2F1c2Vk IGJ5IHRoZSBtYW55IGFuZCB2YXJpZWQKLSAgIExpbnV4IGRpc3RyaWJ1dGlvbnMuIFNvbWUgb2Yg dGhlIHdvcnN0IGludm9sdmUgdGhlIGN1cnNlcyBsaWJyYXJ5IGFuZAotICAgaGVhZGVyIGZpbGVz OiB3aGVyZSBhcmUgdGhleSwgd2hhdCBhcmUgdGhleSBjYWxsZWQsIHdoaWNoIG9uZXMgYXJlIHRo ZXkKLSAgIHJlYWxseT8gT3RoZXIgdmV4aW5nIHF1ZXN0aW9ucyBpbnZvbHZlIGxpYmM1IHZzIGxp YmM2IHZzIGdsaWJjIHZzCi0gICBnbGliYzIgKEMgbGlicmFyaWVzKSwgZ2NjIHZzIGVnY3MgdnMg bGNjIChjb21waWxlcnMpLCBwbHVzIHVzaW5nIG9yCi0gICBhdm9pZGluZyBmZWF0dXJlcyB0aGF0 IHdlcmUgYWRkZWQgaW4gYSBjZXJ0YWluIHZlcnNpb24gb2YgTGludXggb3IgYQotICAgbGlicmFy eSBvciBhIGRpc3RyaWJ1dGlvbiwgYW5kIGFyZSBub3QgYXZhaWxhYmxlIGluIG90aGVycy4gQXMg b2YKLSAgIEMtS2VybWl0IDguMCwgdGhlc2UgcXVlc3Rpb25zIHNob3VsZCBiZSByZXNvbHZlZCBi eSB0aGUgImxpbnV4IgotICAgbWFrZWZpbGUgdGFyZ2V0IGl0c2VsZiwgd2hpY2ggZG9lcyBhIGJp dCBvZiBsb29raW5nIGFyb3VuZCB0byBzZWUKLSAgIHdoYXQncyB3aGF0LCBhbmQgdGhlbiBzZXRz IHRoZSBhcHByb3ByaWF0ZSBDRkxBR1MuCi0KLTMuMy4yLiBQcm9ibGVtcyB3aXRoIFNlcmlhbCBE ZXZpY2VzIGluIExpbnV4Ci0KLSAgIFsgWzMwMl1Ub3AgXSBbIFszMDNdQ29udGVudHMgXSBbIFsz MDRdU2VjdGlvbiBDb250ZW50cyBdIFsgWzMwNV1OZXh0IF0KLSAgIFsgWzMwNl1QcmV2aW91cyBd Ci0KLSAgICAgQWxzbyBzZWU6ICJtYW4gc2V0c2VyaWFsIiwgIm1hbiBpcnF0dW5lIi4KLSAgICAg QW5kOiBbMzA3XVNlY3Rpb25zIDMuMCwgWzMwOF02LCBbMzA5XTcsIGFuZCBbMzEwXTggb2YgdGhp cyBkb2N1bWVudC4KLQotICAgICBOT1RFOiBSZWQgSGF0IExpbnV4IDcuMiBhbmQgbGF0ZXIgaW5j bHVkZSBhIG5ldyBBUEkgdGhhdCBhbGxvd3MKLSAgICAgc2VyaWFsLXBvcnQgYXJiaXRyYXRpb24g Ynkgbm9uLXNldHVpZC9naWQgcHJvZ3JhbXMuIFRoaXMgQVBJIGhhcyBub3QKLSAgICAgeWV0IGJl ZW4gYWRkZWQgdG8gQy1LZXJtaXQuIElmIEMtS2VybWl0IGlzIHRvIGJlIHVzZWQgZm9yIGRpYWxp bmcKLSAgICAgb3V0IG9uIFJlZCBIYXQgNy4yIG9yIGxhdGVyLCBpdCBtdXN0IHN0aWxsIGJlIGlu c3RhbGxlZCBhcyBkZXNjcmliZWQKLSAgICAgaW4gaW4gU2VjdGlvbnMgWzMxMV0xMCBhbmQgWzMx Ml0xMSBvZiB0aGUgWzMxM11JbnN0YWxsYXRpb24KLSAgICAgSW5zdHJ1Y3Rpb25zLgotCi0gICBE b24ndCBleHBlY3QgaXQgdG8gYmUgZWFzeS4gUXVlcmllcyBsaWtlIHRoZSBmb2xsb3dpbmcgYXJl IHBvc3RlZCB0bwotICAgdGhlIExpbnV4IG5ld3Nncm91cHMgYWxtb3N0IGRhaWx5OgotCi0gICAg IFByb2JsZW0gb2YgYSBtYWpvciBraW5kIHdpdGggbXkgQ29tcGFxIFByZXNhcmlvIDE4MDUgaW4g dGhlIHNlbnNlCi0gICAgIHRoYXQgdGhlIHBucGR1bXAgZG9lc24ndCBmaW5kIHRoZSBtb2RlbSBh bmQgdGhlIGNvbmZpZ3VyYXRpb24gdGVsbHMKLSAgICAgbWUgdGhhdCB0aGUgbW9kZW0gaXMgYnVz eSB3aGVuIEkgc2V0IGV2ZXJ5dGhpbmcgYnkgaGFuZCEKLQotICAgICBJIGhhdmUgPHNvbWUgcmVj ZW50IFN1U0UgZGlzdHJpYnV0aW9uPiwga2VybmVsIDIuMC4zNS4gVXNpbmcgdGhlCi0gICAgIENv bXBhcSB0ZWxscyBtZSB0aGF0IHRoZSBtb2RlbSAod2hpY2ggaXMgaW50ZXJuYWwpIGlzIG9uIENP TTIsIHdpdGgKLSAgICAgdGhlIHVzdWFsIElSUSBhbmQgcG9ydCBudW1iZXJzLiBSdW5uaW5nIHZh cmlvdXMgV2luZG93cyBkaWFnbm9zdGljcwotICAgICBzaG93IG1lIEFULXN0eWxlIGNvbW1hbmRz IGV4Y2hhbmdlZCBzbyBJIGhhdmUgbm8gcmVhc29uIHRvIGJlbGlldmUKLSAgICAgdGhhdCBpdCBp cyBhIFdpbm1vZGVtLiBBbHNvLCB0aGUgZGlhZ25vc3RpY3MgdW5kZXIgV2luOTggdGVsbCBtZQot ICAgICB0aGF0IEkgYW0gdGFsa2luZyB0byBhbiBOUyAxNjU1MEFOLgotCi0gICBbRWRpdG9yJ3Mg bm90ZTogVGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGl0IGlzbid0IGEgV2lubW9kZW0u XQotCi0gICAgIFVuZGVyIExpbnV4LCBubyBqb3kgdHJ5aW5nIHRvIHRhbGsgdG8gdGhlIG1vZGVt IG9uIC9kZXYvY3VhMSB3aGV0aGVyCi0gICAgIHZpYSBtaW5pY29tLCBrcHBwLCBvciBjaGF0OyBr cHBwIGF0IGxlYXN0IHRlbGxzIG1lIHRoYXQgdGNnZXRhdHRyKCkKLSAgICAgZmFpbGVkLgotCi0g ICAgIFVzYWdlIG9mIHNldHNlcmlhbDoKLQotICBzZXRzZXJpYWwgL2Rldi9jdWExIHBvcnQgMHgy RjggaXJxIDMgYXV0b2NvbmZpZwotICBzZXRzZXJpYWwgLWcgL2Rldi9jdWExCi0KLSAgICAgdGVs bHMgbWUgdGhhdCB0aGUgdWFydCBpcyAndW5rbm93bicuIEkgaGF2ZSB0cmllZCBzZXR0aW5nIHRo ZSBVQVJUCi0gICAgIG1hbnVhbGx5IHZpYS4gc2V0c2VyaWFsIHRvIDE2NTUwQSwgMTY1NTAsIGFu ZCB0aGUgb3RoZXIgb25lICg4NTUwPykKLSAgICAgKEkgZGlkbid0IHRyeSAxNjU0MCkuIE5vbmUg b2YgdGhlc2UgbWFudWFsIHNldHRpbmdzIHJlc3VsdGVkIGluIGFueQotICAgICBzdWNjZXNzLgot Ci0gICAgIEEgbG9vayBhdCBwYXN0IGFydGljbGVzIGxlYWRzIG1lIHRvIGludmVzdGlnYXRlIFBO UCBpc3N1ZXMgYnkKLSAgICAgY2FsbGluZyBwbnBkdW1wIGJ1dCBwbnBkdW1wIHJldHVybnMgIm5v IGJvYXJkcyBmb3VuZCIuIEkgaGF2ZSBsb29rZWQKLSAgICAgYXJvdW5kIG9uIG15IEJJT1MgKFBo b2VuaXgpIGFuZCB0aGVyZSBpcyBub3QgbXVjaCBldmlkZW5jZSBvZiBpdAotICAgICBiZWluZyBQ TlAgYXdhcmUuIEhvd2V2ZXIgZm9yIHdoYXQgaXQgY2FsbHMgIlNlcmlhbCBwb3J0IEEiLCBpdAot ICAgICBvZmZlcnMgYSBjaG9pY2Ugb2YgQXV0bywgRGlzYWJsZWQgb3IgTWFudWFsIHNldHRpbmdz IChjdXJyZW50bHkgc2V0Ci0gICAgIHRvIEF1dG8pLCBidXQgdXNpbmcgdGhlIEJJT1MgaW50ZXJm YWNlIEkgdHJpZWQgdG8gY2hhbmdlIHRvICdtYW51YWwnCi0gICAgIGFuZCBzYXcgdGhlIGRlZmF1 bHQgc2V0dGluZ3Mgb2ZmZXJlZCB0byBiZSB3ZXJlIDB4M0Y4IGFuZCBJUlEgNAotICAgICAoQ09N MSkuIFRoZSBCSU9TIG1lbnVzIGRpZCBub3QgZ2l2ZSBtZSBhbnkgY2hhbmNlIHRvIGNvbmZpZ3Vy ZSBDT00yCi0gICAgIG9yIGFueSAibW9kZW0iLiBJIGVuZGVkIHVwIG5vdCBzYXZpbmcgYW55IEJJ T1MgY2hhbmdlcyBpbiB0aGUgY291cnNlCi0gICAgIG9mIG15IGludmVzdGlnYXRpb25zLgotCi0g ICBZb3UgY2FuIGFsc28gZmluZCBvdXQgYSBmYWlyIGFtb3VudCBhYm91dCB5b3VyIFBDJ3MgaGFy ZHdhcmUKLSAgIGNvbmZpZ3VyYXRpb24gaW4gdGhlIHRleHQgZmlsZXMgaW4gL3Byb2MsIGUuZy46 Ci0KLSAgLXItLXItLXItLSAgICAxIHJvb3QgICAgICAgICAgICAwIFNlcCAgNCAxNDowMCAvcHJv Yy9kZXZpY2VzCi0gIC1yLS1yLS1yLS0gICAgMSByb290ICAgICAgICAgICAgMCBTZXAgIDQgMTQ6 MDAgL3Byb2MvaW50ZXJydXB0cwotICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgICAgICAgIDAg U2VwICA0IDE0OjAwIC9wcm9jL2lvcG9ydHMKLSAgLXItLXItLXItLSAgICAxIHJvb3QgICAgICAg ICAgICAwIFNlcCAgNCAxNDowMCAvcHJvYy9wY2kKLQotICAgRnJvbSB0aGUgZGlyZWN0b3J5IGxp c3RpbmcgdGhleSBsb29rIGxpa2UgZW1wdHkgZmlsZXMsIGJ1dCBpbiBmYWN0IHRoZXkKLSAgIGFy ZSB0ZXh0IGZpbGVzIHRoYXQgeW91ICJjYXQiOgotCi0kIGNhdCAvcHJvYy9wY2kKLSAgIEJ1cyAg MCwgZGV2aWNlICAxNCwgZnVuY3Rpb24gIDA6Ci0gICAgIFNlcmlhbCBjb250cm9sbGVyOiBVUyBS b2JvdGljcy8zQ29tIDU2SyBGYXhNb2RlbSBNb2RlbCA1NjEwIChyZXYgMSkuCi0gICAgICAgSVJR IDEwLgotICAgICAgIEkvTyBhdCAweDEwNTAgWzB4MTA1N10uCi0KLSQgc2V0c2VyaWFsIC1nIC9k ZXYvdHR5UzQKLS9kZXYvdHR5UzQsIFVBUlQ6IDE2NTUwQSwgUG9ydDogMHgxMDUwLCBJUlE6IDEw Ci0KLSQgY2F0IC9wcm9jL2lvcG9ydHMKLTEwNTAtMTA1NyA6IFVTIFJvYm90aWNzLzNDb20gNTZL IEZheE1vZGVtIE1vZGVsIDU2MTAKLSAgIDEwNTAtMTA1NyA6IHNlcmlhbChhdXRvKQotCi0kIGNh dCAvcHJvYy9pbnRlcnJ1cHRzCi0gICAgICAgICAgICBDUFUwCi0gICAwOiAgICA3MDM3NTE1ICAg ICAgICAgIFhULVBJQyAgdGltZXIKLSAgIDE6ICAgICAgICAgIDIgICAgICAgICAgWFQtUElDICBr ZXlib2FyZAotICAgMjogICAgICAgICAgMCAgICAgICAgICBYVC1QSUMgIGNhc2NhZGUKLSAgIDQ6 ICAgICAgICAgIDAgICAgICAgICAgWFQtUElDICBzZXJpYWwKLSAgIDg6ICAgICAgICAgIDEgICAg ICAgICAgWFQtUElDICBydGMKLSAgIDk6ICAgICAyMDk4MTEgICAgICAgICAgWFQtUElDICB1c2It dWhjaSwgZXRoMAotICAxNDogICAgIDI4MjAxNSAgICAgICAgICBYVC1QSUMgIGlkZTAKLSAgMTU6 ICAgICAgICAgIDYgICAgICAgICAgWFQtUElDICBpZGUxCi0KLSAgIFdhdGNoIG91dCBmb3IgUENJ LCBQQ01DSUEgYW5kIFBsdWctbi1QbGF5IGRldmljZXMsIFdpbm1vZGVtcywgYW5kIHRoZQotICAg bGlrZSAoc2VlIGNhdXRpb25zIGluIFszMTRdU2VjdGlvbiAzLjAgTGludXggc3VwcG9ydHMgUGx1 Zy1uLVBsYXkKLSAgIGRldmljZXMgdG8gc29tZSBkZWdyZWUgdmlhIHRoZSBpc2FwbnAgYW5kIHBu cGR1bXAgcHJvZ3JhbXM7IHJlYWQgdGhlCi0gICBtYW4gcGFnZXMgZm9yIHRoZW0uIChJZiB5b3Ug ZG9uJ3QgaGF2ZSB0aGVtLCBsb29rIG9uIHlvdXIgaW5zdGFsbGF0aW9uCi0gICBDRCBmb3IgaXNh cG5wdG9vbCBvciBkb3dubG9hZCBpdCBmcm9tIHN1bnNpdGUgb3IgYSBzdW5zaXRlIG1pcnJvciBv cgotICAgb3RoZXIgcG9saXRpY2FsbHkgY29ycmVjdCBsb2NhdGlvbiBkdSBqb3VyKS4KLQotICAg UENJIG1vZGVtcyBkbyBub3QgdXNlIHN0YW5kYXJkIENPTSBwb3J0IGFkZHJlc3Nlcy4gVGhlIEkv TyBhZGRyZXNzIGFuZAotICAgSVJRIGFyZSBhc3NpZ25lZCBieSB0aGUgQklPUy4gQWxsIHlvdSBu ZWVkIHRvIGRvIHRvIGdldCBvbmUgd29ya2luZywKLSAgIGZpbmQgb3V0IHRoZSBJL08gYWRkcmVz cyBhbmQgaW50ZXJydXB0IG51bWJlciB3aXRoIChhcyByb290KSAibHNwY2kgLXYKLSAgIHwgbW9y ZSIgYW5kIHRoZW4gZ2l2ZSB0aGUgcmVzdWx0aW5nIGFkZHJlc3MgYW5kIGludGVycnVwdCBudW1i ZXIgdG8KLSAgIHNldHNlcmlhbC4KLQotICAgRXZlbiB3aGVuIHlvdSBoYXZlIGEgcmVhbCBzZXJp YWwgcG9ydCwgYWx3YXlzIGJlIHdhcnkgb2YgaW50ZXJydXB0Ci0gICBjb25mbGljdHMgYW5kIHNp bWlsYXIgUEMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBpc3N1ZXM6IGEgUEMgaXMgbm90IGEKLSAg IHJlYWwgY29tcHV0ZXIgbGlrZSBvdGhlciBVbml4IHdvcmtzdGF0aW9ucyAtLSBpdCBpcyBnZW5l cmFsbHkgcGllY2VkCi0gICB0b2dldGhlciBmcm9tIHdoYXRldmVyIHJhbmRvbSBjb21wb25lbnRz IHdlcmUgdGhlIGJlc3QgYmFyZ2FpbiBvbiB0aGUKLSAgIGNvbW1vZGl0eSBtYXJrZXQgdGhlIHdl ZWsgaXQgd2FzIGJ1aWx0LiBPbmNlIGl0J3MgYXNzZW1ibGVkIGFuZCBib3hlZCwKLSAgIG5vdCBl dmVuIHRoZSBtYW51ZmFjdHVyZXIgd2lsbCByZW1lbWJlciB3aGF0IGl0J3MgbWFkZSBvZiBvciBo b3cgaXQgd2FzCi0gICBwdXQgdG9nZXRoZXIgYmVjYXVzZSB0aGV5J3ZlIG1vdmVkIG9uIHRvIGEg bmV3IG1vZGVsLiBUaGVpciBqb2IgaXMgdG8KLSAgIGdldCBpdCAoYmFyZWx5KSB3b3JraW5nIHdp dGggV2luZG93czsgZm9yIExpbnV4IGFuZCBvdGhlciBPUydzIHlvdSBhcmUKLSAgIG9uIHlvdXIg b3duLgotCi0gICAic2V0IGxpbmUgL2Rldi9tb2RlbSIgb3IgInNldCBsaW5lIC9kZXYvdHR5UzIi LCBldGMsIHJlc3VsdHMgaW4gYW4KLSAgIGVycm9yLCAiL2Rldi9tb2RlbSBpcyBub3QgYSB0dHki LiBDYXVzZSB1bmtub3duLCBidXQgb2J2aW91c2x5IGEgZHJpdmVyCi0gICBpc3N1ZSwgbm90IGEg S2VybWl0IG9uZSAoS2VybWl0IHVzZXMgImlzYXR0eSgpIiB0byBjaGVjayB0aGF0IHRoZQotICAg ZGV2aWNlIGlzIGEgdHR5LCBzbyBpdCBrbm93cyBpdCB3aWxsIGJlIGFibGUgdG8gaXNzdWUgYWxs IHRoZQotICAgdHR5LXJlbGF0ZWQgaW9jdGwncyBvbiBpdCwgbGlrZSBzZXR0aW5nIHRoZSBzcGVl ZCAmIGZsb3cgY29udHJvbCkuIFRyeQotICAgYSBkaWZmZXJlbnQgbmFtZSAoaS5lLiBkcml2ZXIp IGZvciB0aGUgc2FtZSBwb3J0LCBlLmcuICJzZXQgbGluZQotICAgL2Rldi9jdWEyIiBvciB3aGF0 ZXZlci4KLQotICAgVG8gZmluZCB3aGF0IHNlcmlhbCBwb3J0cyB3ZXJlIHJlZ2lzdGVyZWQgYXQg dGhlIG1vc3QgcmVjZW50IHN5c3RlbQotICAgYm9vdCwgdHlwZSAoYXMgcm9vdCk6ICJncmVwIHR0 eSAvdmFyL2xvZy9kbWVzZyIuCi0KLSAgICJzZXQgbW9kZW0gdHlwZSB4eHgiICh3aGVyZSB4eHgg aXMgdGhlIG5hbWUgb2YgYSBtb2RlbSkgZm9sbG93ZWQgYnkKLSAgICJzZXQgbGluZSAvZGV2L21v ZGVtIiBvciAic2V0Ci0gICBsaW5lIC9kZXYvdHR5UzIiLCBldGMsIGhhbmdzIChidXQgY2FuIGJl IGludGVycnVwdGVkIHdpdGggQ3RybC1DKS4KLSAgIEV4cGVyaW1lbnRhdGlvbiBzaG93cyB0aGF0 IGlmIHRoZSBtb2RlbSBpcyBjb25maWd1cmVkIHRvIGFsd2F5cyBhc3NlcnQKLSAgIGNhcnJpZXIg KCZDMCkgdGhlIHNhbWUgY29tbWFuZCBkb2VzIG5vdCBoYW5nLiBBZ2FpbiwgYSBkcml2ZXIgaXNz dWUuCi0gICBVc2UgL2Rldi9jdWEyIChvciB3aGF0ZXZlcikgaW5zdGVhZC4gKE9yIG5vdCAtLSBo b3BlZnVsbHkgbm9uZSBvZiB0aGVzZQotICAgc3ltcHRvbXMgb2NjdXJzIGluIEMtS2VybWl0IDcu MCBvciBsYXRlci4pCi0KLSAgICJzZXQgbGluZSAvZGV2L2N1YTAiIHJlcG9ydHMgIkRldmljZSBp cyBidXN5IiwgYnV0ICJzZXQgbGluZQotICAgL2Rldi90dHlTMCIgd29ya3MgT0suCi0KLSAgIElu IHNob3J0OiBJZiB0aGUgY3VhIGRldmljZSBkb2Vzbid0IHdvcmssIHRyeSB0aGUgY29ycmVzcG9u ZGluZyB0dHlTCi0gICBkZXZpY2UuIElmIHRoZSB0dHlTIGRldmljZSBkb2Vzbid0IHdvcmssIHRy eSB0aGUgY29ycmVzcG9uZGluZyBjdWEKLSAgIGRldmljZSAtLSBidXQgbm90ZSB0aGF0IExpbnV4 IGRldmVsb3BlcnMgZG8gbm90IHJlY29tbWVuZCB0aGlzLCBhbmQgYXJlCi0gICBwaGFzaW5nIG91 dCB0aGUgY3VhIGRldmljZXMuIEZyb20gL3Vzci9kb2MvZmFxL2hvd3RvL1NlcmlhbC1IT1dUTzoK LQotICAgMTIuNC4gV2hhdCdzIFRoZSBSZWFsIERpZmZlcmVuY2UgQmV0d2VlbiB0aGUgL2Rldi9j dWFOIEFuZCAvZGV2L3R0eVNOCi0gICAgICAgICAgRGV2aWNlcz8KLSAgICAgICAgICBUaGUgb25s eSBkaWZmZXJlbmNlIGlzIHRoZSB3YXkgdGhhdCB0aGUgZGV2aWNlcyBhcmUgb3BlbmVkLiBUaGUK LSAgICAgICAgICBkaWFsaW4gZGV2aWNlcyAvZGV2L3R0eVNOIGFyZSBvcGVuZWQgaW4gYmxvY2tp bmcgbW9kZSwgdW50aWwgQ0QKLSAgICAgICAgICBpcyBhc3NlcnRlZCAoaWUgc29tZW9uZSBjb25u ZWN0cykuIFNvLCB3aGVuIHNvbWVvbmUgd2FudHMgdG8gdXNlCi0gICAgICAgICAgdGhlIC9kZXYv Y3VhTiBkZXZpY2UsIHRoZXJlIGlzIG5vIGNvbmZsaWN0IHdpdGggYSBwcm9ncmFtCi0gICAgICAg ICAgd2F0Y2hpbmcgdGhlIC9kZXYvdHR5U04gZGV2aWNlICh1bmxlc3Mgc29tZW9uZSBpcyBjb25u ZWN0ZWQgb2YKLSAgICAgICAgICBjb3Vyc2UpLiBUaGUgbXVsdGlwbGUgL2RldiBlbnRyaWVzLCBh bGxvdyBvcGVyYXRpb24gb2YgdGhlIHNhbWUKLSAgICAgICAgICBwaHlzaWNhbCBkZXZpY2Ugd2l0 aCBkaWZmZXJlbnQgb3BlcmF0aW5nIGNoYXJhY3RlcmlzdGljcy4gSXQKLSAgICAgICAgICBhbHNv IGFsbG93cyBzdGFuZGFyZCBnZXR0eSBwcm9ncmFtcyB0byBjb2V4aXN0IHdpdGggYW55IG90aGVy Ci0gICAgICAgICAgc2VyaWFsIHByb2dyYW0sIHdpdGhvdXQgdGhlIGdldHR5IGJlaW5nIHJldHJv Zml0dGVkIHdpdGggbG9ja2luZwotICAgICAgICAgIG9mIHNvbWUgc29ydC4gSXQncyBlc3BlY2lh bGx5IHVzZWZ1bCBzaW5jZSBzdGFuZGFyZCBVbml4IGtlcm5lbAotICAgICAgICAgIGZpbGUgbG9j a2luZywgYW5kIFVVQ1AgbG9ja2luZyBhcmUgYm90aCBhZHZpc29yeSBhbmQgbm90Ci0gICAgICAg ICAgbWFuZGF0b3J5LgotCi0gICBJdCB3YXMgZGlzY292ZXJlZCBkdXJpbmcgZGV2ZWxvcG1lbnQg b2YgQy1LZXJtaXQgNy4wIHRoYXQgcmVidWlsZGluZwotICAgQy1LZXJtaXQgd2l0aCAtRE5PQ09U Rk1DIChObyBDbG9zZS9PcGVuIFRvIEZvcmNlIE1vZGUgQ2hhbmdlKSBtYWRlIHRoZQotICAgYWZv cmVtZW50aW9uZWQgcHJvYmxlbSB3aXRoIC9kZXYvdHR5UzAgZ28gYXdheS4gSXQgaXMgbm90IHll dCBjbGVhciwKLSAgIGhvd2V2ZXIsIHdoYXQgaXRzIGFmZmVjdCBtaWdodCBiZSBvbiB0aGUgL2Rl di9jdWEqIGRldmljZXMuIEFzIG9mIDE5Ci0gICBNYXJjaCAxOTk4LCB0aGlzIG9wdGlvbiBoYXMg YmVlbiBhZGRlZCB0byB0aGUgQ0ZMQUdTIGluIHRoZSBtYWtlZmlsZQotICAgZW50cmllcyBmb3Ig TGludXggKCJtYWtlIGxpbnV4IikuCi0KLSAgIE5vdGUgdGhhdCB0aGUgY3VhIGRldmljZSBpcyBu b3cgImRlcHJlY2F0ZWQiLCBhbmQgbmV3IGVkaXRpb25zIG9mIExpbnV4Ci0gICB3aWxsIHBoYXNl IChoYXZlIHBoYXNlZCkgaXQgb3V0IGluIGZhdm9yIG9mIHRoZSB0dHlTIGRldmljZS4gU2VlIChp ZgotICAgaXQncyBzdGlsbCB0aGVyZSk6Ci0KLSAgWzMxNV1odHRwOi8vbGludXh3d3cuZGIuZXJh dS5lZHUvbWFpbF9hcmNoaXZlcy9saW51eC1rZXJuZWwvTWFyXzk4LzE0NDEuaHRtbAotCi0gICAo bm8sIG9mIGNvdXJzZSBpdCBpc24ndDsgeW91J2xsIGhhdmUgdG8gdXNlIHlvdXIgaW1hZ2luYXRp b24pLiBPbmUgdXNlcgotICAgcmVwb3J0ZWQgdGhhdCBDLUtlcm1pdCA3LjAsIHdoZW4gYnVpbHQg d2l0aCBlZ2NzIDEuMS4yIGFuZCBydW4gb24gTGludXgKLSAgIDIuMi42IHdpdGggZ2xpYmMgMi4x IChoYXJkd2FyZSB1bmtub3duIGJ1dCBwcm9iYWJseSBhIFBDKSBkdW1wcyBjb3JlCi0gICB3aGVu IGdpdmVuIGEgInNldCBsaW5lIC9kZXYvdHR5UzEiIGNvbW1hbmQuIFdoZW4gcmVidWlsdCB3aXRo IGdjYywgaXQKLSAgIHdvcmtzIGZpbmUuCi0KLSAgIEFsbCB2ZXJzaW9ucyBvZiBMaW51eCBzZWVt IHRvIGhhdmUgdGhlIGZvbGxvd2luZyBkZWZpY2llbmN5OiBXaGVuIGEKLSAgIG1vZGVtIGNhbGwg aXMgaHVuZyB1cCBhbmQgQ0QgZHJvcHMsIEtlcm1pdCBjYW4gbm8gbG9uZ2VyIHJlYWQgdGhlIG1v ZGVtCi0gICBzaWduYWxzOyBTSE9XIENPTU1VTklDQVRJT05TIHNheXMgIk1vZGVtIHNpZ25hbHMg bm90IGF2YWlsYWJsZSIuIFRoZQotICAgVElPQ01HRVQgaW9jdGwoKSByZXR1cm5zIC0xIHdpdGgg ZXJybm8gNSAoIkkvTyBFcnJvciIpLgotCi0gICBUaGUgTGludXggdmVyc2lvbiBvZiBQT1NJWCB0 Y3NlbmRicmVhaygpLCB3aGljaCBpcyB1c2VkIGJ5IEMtS2VybWl0IHRvCi0gICBzZW5kIHJlZ3Vs YXIgKDI3NW1zZWMpIGFuZCBsb25nICgxLjVzZWMpIEJSRUFLIHNpZ25hbHMsIGFwcGVhcnMgdG8K LSAgIGlnbm9yZSBpdHMgYXJndW1lbnQgKGRlc3BpdGUgaXRzIGRlc2NyaXB0aW9uIGluIHRoZSBt YW4gcGFnZSBhbmQgaW5mbwotICAgdG9waWMpLCBhbmQgYWx3YXlzIHNlbmRzIGEgcmVndWxhciAy NzVtc2VjIEJSRUFLLiBUaGlzIGhhcyBiZWVuCi0gICBvYnNlcnZlZCBpbiBMaW51eCB2ZXJzaW9u cyByYW5naW5nIGZyb20gRGViaWFuIDIuMSB0byBSZWQgSGF0IDcuMS4KLQotMy4zLjMuIFRlcm1p bmFsIEVtdWxhdGlvbiBpbiBMaW51eAotCi0gICBbIFszMTZdVG9wIF0gWyBbMzE3XUNvbnRlbnRz IF0gWyBbMzE4XVNlY3Rpb24gQ29udGVudHMgXSBbIFszMTldTmV4dCBdCi0gICBbIFszMjBdUHJl dmlvdXMgXQotCi0gICBDLUtlcm1pdCBpcyBub3QgYSB0ZXJtaW5hbCBlbXVsYXRvci4gRm9yIGEg YnJpZWYgZXhwbGFuYXRpb24gb2Ygd2h5Ci0gICBub3QsIHNlZSBbMzIxXVNlY3Rpb24gMy4wLjUu IEZvciBhIGZ1bGxlciBleHBsYW5hdGlvbiwgWzMyMl1DbElDSyBIRVJFLgotCi0gICBJbiBVbml4 LCB0ZXJtaW5hbCBlbXVsYXRpb24gaXMgc3VwcGxpZWQgYnkgdGhlIFdpbmRvdyBpbiB3aGljaCB5 b3UgcnVuCi0gICBLZXJtaXQ6IHRoZSByZWd1bGFyIGNvbnNvbGUgc2NyZWVuLCB3aGljaCBwcm92 aWRlcyBMaW51eCBDb25zb2xlCi0gICAiZW11bGF0aW9uIiB2aWEgdGhlICJjb25zb2xlIiB0ZXJt Y2FwIGVudHJ5LCBvciB1bmRlciBYLVdpbmRvd3MgaW4gYW4KLSAgIHh0ZXJtIHdpbmRvdywgd2hp Y2ggZ2l2ZXMgVlR4eHggZW11bGF0aW9uLiBBbiB4dGVybSB0aGF0IGluY2x1ZGVzIGNvbG9yCi0g ICBBTlNJIGFuZCBWVDIyMCBlbXVsYXRpb24gaXMgYXZhaWxhYmxlIHdpdGggWGZyZWU4NjoKLQot ICBbMzIzXWh0dHA6Ly9kaWNrZXkuaGlzLmNvbS94dGVybS94dGVybS5odG1sCi0KLSAgIEJlZm9y ZSBzdGFydGluZyBDLUtlcm1pdCBpbiBhbiB4dGVybSB3aW5kb3csIHlvdSBtaWdodCBuZWVkIHRv IHRlbGwgdGhlCi0gICB4dGVybSB3aW5kb3cncyBzaGVsbCB0byAic3R0eSBzYW5lIi4KLQotICAg VG8gc2V0IHVwIHlvdXIgUEMgY29uc29sZSBrZXlib2FyZCB0byBzZW5kIFZUMjIwIGtleSBzZXF1 ZW5jZXMgd2hlbgotICAgdXNpbmcgQy1LZXJtaXQgYXMgeW91ciBjb21tdW5pY2F0aW9ucyBwcm9n cmFtIGluIGFuIFggdGVybWluYWwgd2luZG93Ci0gICAoaWYgaXQgZG9lc24ndCBhbHJlYWR5KSwg Y3JlYXRlIGEgZmlsZSBzb21ld2hlcmUgKGUuZy4gaW4gL3Jvb3QvKQotICAgY2FsbGVkIC54bW9k bWFwcmMsIGNvbnRhaW5pbmcgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKLQotICBrZXlj b2RlIDc3ICA9IEtQX0YxICAgICAgICEgTnVtIExvY2sgICAgID0+IERFQyBHb2xkIChQRjEpCi0g IGtleWNvZGUgMTEyID0gS1BfRjIgICAgICAgISBLZXlwYWQgLyAgICAgPT4gREVDIFBGMQotICBr ZXljb2RlIDYzICA9IEtQX0YzICAgICAgICEgS2V5cGFkICogICAgID0+IERFQyBQRjMKLSAga2V5 Y29kZSA4MiAgPSBLUF9GNCAgICAgICAhIEtleXBhZCAtICAgICA9PiBERUMgUEY0Ci0gIGtleWNv ZGUgMTExID0gSGVscCAgICAgICAgISBQcmludCBTY3JlZW4gPT4gREVDIEhlbHAKLSAga2V5Y29k ZSA3OCAgPSBGMTYgICAgICAgICAhIFNjcm9sbCBMb2NrICA9PiBERUMgRG8KLSAga2V5Y29kZSAx MTAgPSBGMTYgICAgICAgICAhIFBhdXNlICAgICAgICA9PiBERUMgRG8KLSAga2V5Y29kZSAxMDYg PSBGaW5kICAgICAgICAhIEluc2VydCAgICAgICA9PiBERUMgRmluZAotICBrZXljb2RlIDk3ICA9 IEluc2VydCAgICAgICEgSG9tZSAgICAgICAgID0+IERFQyBJbnNlcnQKLSAga2V5Y29kZSA5OSAg PSAweDEwMDBmZjAwICAhIFBhZ2UgVXAgICAgICA9PiBERUMgUmVtb3ZlCi0gIGtleWNvZGUgMTA3 ID0gU2VsZWN0ICAgICAgISBEZWxldGUgICAgICAgPT4gREVDIFNlbGVjdAotICBrZXljb2RlIDEw MyA9IFBhZ2VfVXAgICAgICEgRW5kICAgICAgICAgID0+IERFQyBQcmV2IFNjcmVlbgotICBrZXlj b2RlIDIyICA9IERlbGV0ZSAgICAgICEgQmFja3NwYWNlIHNlbmRzIERlbGV0ZSAoMTI3KQotCi0g ICBUaGVuIHB1dCAieG1vZG1hcCBmaWxlbmFtZSIgaW4geW91ciAueGluaXRyYyBmaWxlIChpbiB5 b3VyIGxvZ2luCi0gICBkaXJlY3RvcnkpLCBlLmcuCi0KLSAgeG1vZG1hcCAvcm9vdC8ueG1vZG1h cHJjCi0KLSAgIE9mIGNvdXJzZSB5b3UgY2FuIG1vdmUgdGhpbmdzIGFyb3VuZC4gVXNlIHRoZSB4 ZXYgcHJvZ3JhbSB0byBmaW5kIG91dAotICAga2V5IGNvZGVzLgotCi0gICBDb25zb2xlLW1vZGUg a2V5cyBhcmUgbWFwcGVkIHNlcGFyYXRlbHkgdXNpbmcgbG9hZGtleXMsIGFuZCBkaWZmZXJlbnQK LSAgIGtleWNvZGVzIGFyZSB1c2VkLiBGaW5kIG91dCB3aGF0IHRoZXkgYXJlIHdpdGggc2hvd2tl eS4KLQotICAgRm9yIGEgbXVjaCBtb3JlIGNvbXBsZXRlIFZUMjIwLzMyMCBrZXkgbWFwcGluZyBm b3IgWzMyNF1YZnJlZTg2IHh0ZXJtLAotICAgWzMyNV1DTElDSyBIRVJFLgotCi0zLjMuNC4gRGF0 ZXMgYW5kIFRpbWVzCi0KLSAgIFsgWzMyNl1Ub3AgXSBbIFszMjddQ29udGVudHMgXSBbIFszMjhd U2VjdGlvbiBDb250ZW50cyBdIFsgWzMyOV1OZXh0IF0KLSAgIFsgWzMzMF1QcmV2aW91cyBdCi0K LSAgIElmIEMtS2VybWl0J3MgZGF0ZS10aW1lIChlLmcuIGFzIHNob3duIGJ5IGl0cyBEQVRFIGNv bW1hbmQpIGRpZmZlcnMKLSAgIGZyb20gdGhlIHN5c3RlbSdzIGRhdGUgYW5kIHRpbWU6Ci0KLSAg ICBhLiBNYWtlIHN1cmUgdGhlIGxpYmMgdG8gd2hpY2ggS2VybWl0IGlzIGxpbmtlZCBpcyBzZXQg dG8gR01UIG9yIGlzCi0gICAgICAgbm90IHNldCB0byBhbnkgdGltZSB6b25lLiBXYXRjaCBvdXQg Zm9yIG1peGVkIGxpYmM1L2xpYmM2IHN5c3RlbXM7Ci0gICAgICAgZWFjaCBtdXN0IGJlIHNldCBp bmRlcGVuZGVudGx5LgotICAgIGIuIElmIHlvdSBoYXZlIGNoYW5nZWQgeW91ciBUWiBlbnZpcm9u bWVudCB2YXJpYWJsZSwgbWFrZSBzdXJlIGl0IGlzCi0gICAgICAgZXhwb3J0ZWQuIFRoaXMgaXMg bm9ybWFsbHkgZG9uZSBpbiAvZXRjL3Byb2ZpbGUgb3IgL2V0Yy9UWi4KLQotMy4zLjUuIFN0YXJ0 dXAgRXJyb3JzCi0KLSAgIFsgWzMzMV1Ub3AgXSBbIFszMzJdQ29udGVudHMgXSBbIFszMzNdU2Vj dGlvbiBDb250ZW50cyBdIFsgWzMzNF1OZXh0IF0KLSAgIFsgWzMzNV1QcmV2aW91cyBdCi0KLSAg IEMtS2VybWl0IHNob3VsZCB3b3JrIG9uIGFsbCB2ZXJzaW9ucyBvZiBMaW51eCBjdXJyZW50IHRo cm91Z2ggTWFyY2gKLSAgIDIwMDMsIHByb3ZpZGVkIGl0IHdhcyBidWlsdCBvbiB0aGUgc2FtZSB2 ZXJzaW9uIHlvdSBoYXZlLCB3aXRoIHRoZSBzYW1lCi0gICBsaWJyYXJpZXMgYW5kIGhlYWRlciBm aWxlcyAoanVzdCBnZXQgdGhlIHNvdXJjZSBjb2RlIGFuZCAibWFrZSBsaW51eCIpLgotICAgQmlu YXJpZXMgdGVuZCBub3QgdG8gdHJhdmVsIHdlbGwgZnJvbSBvbmUgTGludXggbWFjaGluZSB0byBh bm90aGVyLCBkdWUKLSAgIHRvIHRoZWlyIG1hbnkgZGlmZmVyZW5jZXMuIFRoZXJlIGlzIG5vIGd1 YXJhbnRlZSB0aGF0IGEgcGFydGljdWxhcgotICAgQy1LZXJtaXQgYmluYXJ5IHdpbGwgbm90IHN0 b3Agd29ya2luZyBhdCBhIGxhdGVyIGRhdGUsIHNpbmNlIExpbnV4Ci0gICB0ZW5kcyB0byBjaGFu Z2Ugb3V0IGZyb20gdW5kZXIgaXRzIGFwcGxpY2F0aW9ucy4gSWYgdGhhdCBoYXBwZW5zLAotICAg cmVidWlsZCBDLUtlcm1pdCBmcm9tIHNvdXJjZS4gSWYgc29tZXRoaW5nIGdvZXMgd3Jvbmcgd2l0 aCB0aGUgYnVpbGQKLSAgIHByb2Nlc3MsIGxvb2sgb24gdGhlIFszMzZdQy1LZXJtaXQgd2Vic2l0 ZSBmb3IgYSBuZXdlciB2ZXJzaW9uLiBJZiB5b3UKLSAgIGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9u LCB0aGVuIFszMzddcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHVzLgotCi0gICBJbmFiaWxpdHkgdG8g dHJhbnNmZXIgZmlsZXMgaW4gUmVkIEhhdCA3LjI6IHRoZSB0eXBpY2FsIHN5bXB0b20gd291bGQK LSAgIGJlIGlmIHlvdSBzdGFydCBLZXJtaXQgYW5kIHRlbGwgaXQgdG8gUkVDRUlWRSwgaXQgZmFp bHMgcmlnaHQgYXdheSB3aXRoCi0gICAiPy9kZXYvdHR5OiBObyBzdWNoIGRldmljZSBvciBhZGRy ZXNzIiBvciAiP0JhZCBmaWxlIGRlc2NyaXB0b3IiLiBPbmUKLSAgIHJlcG9ydCBzYXlzIHRoaXMg aXMgYmVjYXVzZSBvZiBjc2gsIGFuZCBpZiB5b3UgY2hhbmdlIHlvdXIgc2hlbGwgdG8KLSAgIGJh c2ggb3Igb3RoZXIgc2hlbGwsIGl0IGRvZXNuJ3QgaGFwcGVuLiBBbm90aGVyIHJlcG9ydCBjaXRl IGJ1Z3MgaW4gUmVkCi0gICBIYXQgNy4yIFRlbG5ldGQgInZlcnkgc2VsZG9tIChpZiBldmVyKSBw cm92aWRpbmcgYSBjb250cm9sbGluZyB0dHksIGFuZAotICAgbG90cyBvZiBvdGhlciBwZW9wbGUg cGlsZWQgb24gc2F5aW5nIHRoZXkgaGF2ZSB0aGUgc2FtZSBwcm9ibGVtLiIpIEEKLSAgIHRoaXJk IHRoZW9yeSBpcyB0aGF0IHRoaXMgaGFwcGVucyBvbmx5IHdoZW4gTGludXggaGFzIGJlZW4gaW5z dGFsbGVkCi0gICB3aXRob3V0ICJ2aXJ0dWFsIHRlcm1pbmFsIHN1cHBvcnQiLgotCi0gICBBIHNl YXJjaCBvZiBSZWRIYXQncyBlcnJhdGEgcGFnZXMgc2hvd3MgYSBidWcgYWR2aXNvcnkgKFJIQkEt MjAwMS0xNTMpCi0gICBpc3N1ZWQgMTMgTm92ZW1iZXIgMjAwMSwgYnV0IHVwZGF0ZWQgNiBEZWNl bWJlciwgYWJvdXQgdGhpcyBzYW1lCi0gICBzeW1wdG9tIChidXQgd2l0aCB0Y3NoIGFuZCBsb2dp bi4pIFNlZW1zIHRoYXQgbG9naW4gd2FzIG5vdCBhbHdheXMKLSAgIGFzc2lnbmluZyBhIGNvbnRy b2xsaW5nIFRUWSBmb3IgdGhlIHNlc3Npb24sIHdoaWNoIHdvdWxkIG1ha2UgbW9zdCB1c2UKLSAg IG9mICIvZGV2L3R0eSIgc29tZXdoYXQgbGVzcyB0aGFuIHVzZWZ1bC4KLQotICBbMzM4XWh0dHA6 Ly93d3cucmVkaGF0LmNvbS9zdXBwb3J0L2VycmF0YS9SSEJBLTIwMDEtMTUzLmh0bWwKLQotICAg UXVvdGluZzogIkR1ZSB0byB0ZXJtaW5hbCBoYW5kbGluZyBwcm9ibGVtcyBpbiAvYmluL2xvZ2lu LCB0Y3NoIHdvdWxkCi0gICBub3QgZmluZCB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgY29ycmVj dGx5LCBhbmQgYSBzaGVsbCBpbiBzaW5nbGUgdXNlcgotICAgbW9kZSB3b3VsZCBleGhpYml0IHN0 cmFuZ2UgdGVybWluYWwgaW5wdXQgY2hhcmFjdGVyaXN0aWNzLiBUaGlzIHVwZGF0ZQotICAgZml4 ZXMgYm90aCBvZiB0aGVzZSBwcm9ibGVtcy4iCi0KLSAgIFNpbmNlIHRoZSBSZWQgSGF0IDUuMSBy ZWxlYXNlIChjaXJjYSBBdWd1c3QgMTk5OCksIHRoZXJlIGhhdmUgYmVlbgotICAgbnVtZXJvdXMg cmVwb3J0cyBvZiBwcmVidWlsdCBMaW51eCBleGVjdXRhYmxlcywgYW5kIHBhcnRpY3VsYXJseSB0 aGUKLSAgIEtlcm1pdCBSUE0gZm9yIFJlZCBIYXQgTGludXgsIG5vdCB3b3JraW5nOyBlaXRoZXIg aXQgd29uJ3Qgc3RhcnQgYXQKLSAgIGFsbCwgb3IgaXQgZ2l2ZXMgZXJyb3IgbWVzc2FnZXMgYWJv dXQgInRlcm1pbmFsIHR5cGUgdW5rbm93biIgYW5kCi0gICByZWZ1c2VzIHRvIGluaXRpYWxpemUg aXRzIGN1cnNlcyBzdXBwb3J0LiBUaGUgZm9sbG93aW5nIGlzIGZyb20gdGhlCi0gICBbMzM5XUtl cm1pdCBuZXdzZ3JvdXA6Ci0KLSAgICAgRnJvbTogcmNoYW5kcmFAaGFsOTAwMC5idWYuc2VydnRl Y2guY29tCi0gICAgIE5ld3Nncm91cHM6IGNvbXAucHJvdG9jb2xzLmtlcm1pdC5taXNjCi0gICAg IFN1YmplY3Q6IFJlZCBIYXQgTGludXgvSW50ZWwgNS4xIGFuZCBuY3Vyc2VzOiBzdWdnZXN0aW9u cwotICAgICBEYXRlOiAyMiBBdWcgMTk5OCAxNTo1NDo0NiBHTVQKLSAgICAgT3JnYW5pemF0aW9u OiBWZXJpbyBOZXcgWW9yawotICAgICBLZXl3b3JkczogUmVkSGF0IFJQTSA1LjEKLQotICAgICBT ZXZlcmFsIGZhY3RvcnMgY2FuIGluZmx1ZW5jZSB3aGV0aGVyICJsaW51eCIgaXMgcmVjb2duaXpl ZCBhcyBhCi0gICAgIHRlcm1pbmFsIHR5cGUgb24gbWFueSBMaW51eCBzeXN0ZW1zLgotCi0gICAg MS4gWW91ciBwcm9ncmFtLCBvciB0aGUgbGlicmFyaWVzIGl0IGxpbmtlZCB3aXRoIChpZiBzdGF0 aWNhbGx5Ci0gICAgICAgbGlua2VkKSwgb3IgdGhlIGxpYnJhcmllcyBpdCBkeW5hbWljYWxseSBs aW5rcyB3aXRoIGF0IHJ1bnRpbWUsIGFyZQotICAgICAgIGxvb2tpbmcgZm9yIGFuIGVudHJ5IGlu IC9ldGMvdGVybWNhcCB0aGF0IGlzbid0IHRoZXJlLiAobm90IGxpa2VseSwKLSAgICAgICBidXQg cG9zc2libGUuLi4gSSBiZWxpZXZlIGJ1dCBhbSBub3QgY2VydGFpbiB0aGF0IHRoaXMgaXMgYSB2 ZXJ5Ci0gICAgICAgb2xkIHByYWN0aWNlIGluIHZlcnkgb2xkIFtuXWN1cnNlcyBsaWJyYXJ5IGlt cGxlbWVudGF0aW9ucyB0byB1c2UgYQotICAgICAgIHNpbmdsZSBmaWxlIGZvciBhbGwgdGVybWlu YWwgZGVzY3JpcHRpb25zLikKLSAgICAyLiBZb3VyIHByb2dyYW0sIG9yIHRoZSBsaWJyYXJpZXMu Li5hcmUgbG9va2luZyBmb3IgYSB0ZXJtaW5mbyBmaWxlCi0gICAgICAgdGhhdCBqdXN0IHBsYWlu IGlzbid0IHRoZXJlLiAoYWxzbyBub3Qgc28gbGlrZWx5LCBzaW5jZSBtYW55IHBlb3BsZQotICAg ICAgIGluIG90aGVyIHJlY2VudCBtZXNzYWdlIHRocmVhZHMgc2FpZCB0aGF0IG90aGVyIHByb2dy YW1zIHdvcmsgT0spLgotICAgIDMuIFlvdXIgcHJvZ3JhbSwgb3IgdGhlIGxpYnJhcmllcy4uLmFy ZSBsb29raW5nIGZvciBhIHRlcm1pbmZvIGZpbGUKLSAgICAgICB0aGF0IGlzIHN0b3JlZCBhdCBh IHBhdGhuYW1lIHRoYXQgaXNuJ3QgZXhwZWN0ZWQgYnkgeW91ciBwcm9ncmFtLAotICAgICAgIHRo ZSBsaWJyYXJpZXMtLWFuZCBzbyBvbi4gSSBmb3Jnb3QgaWYgSSByZWFkIHRoaXMgaW4gdGhlIGVy cmF0YSBXZWIKLSAgICAgICBwYWdlIG9yIHdoZXJlIGV4YWN0bHkgSSBkaXNjb3ZlcmVkIHRoaXMg KE5ldHNjYXBlIGluc3RhbGw/IEFjcm9iYXQKLSAgICAgICBpbnN0YWxsPyksIGJ1dCBpdCBtYXkg anVzdCBiZSB0aGF0IG9uZSBsaWJjIChsZXQncyBzYXkgZm9yIHNha2Ugb2YKLSAgICAgICBhcmd1 bWVudCwgbGliYzUsIGJ1dCBJIGRvbid0IGtub3cgdGhpcyB0byBiZSB0cnVlKSBleHBlY3RzIHlv dXIKLSAgICAgICB0ZXJtaW5mbyB0byBiZSBpbiAvdXNyL3NoYXJlL3Rlcm1pbmZvLCBhbmQgdGhl IG90aGVyIChsZXQncyBzYXkKLSAgICAgICBsaWJjNi9nbGliYykgZXhwZWN0cyAvdXNyL2xpYi90 ZXJtaW5mby4gSSByZW1lbWJlciB0aGF0IHRoZQotICAgICAgIHNwZWNpZmljIGluc3RydWN0aW9u cyBpbiB0aGlzIGJ1Z2ZpeC93b3JrYXJvdW5kIHdlcmUgdG8gZG8gdGhlCi0gICAgICAgZm9sbG93 aW5nIG9yIGVxdWl2YWxlbnQ6Ci0gIGNkIC91c3IvbGliCi0gIGxuIC1zIC4uL3NoYXJlL3Rlcm1p bmZvIC4vdGVybWluZm8KLQotICAgICAgIG9yOgotICBsbiAtcyAvdXNyL3NoYXJlL3Rlcm1pbmZv IC91c3IvbGliL3Rlcm1pbmZvCi0KLSAgICAgU28gd2hhdCB0aGlzIHNheXMgaXMgdGhhdCB0aGUg dGVybWluZm8gZGF0YWJhc2UvZGlyZWN0b3J5IHN0cnVjdHVyZQotICAgICBjYW4gYmUgYWNjZXNz ZWQgYnkgZWl0aGVyIHBhdGguIFdoZW4gc29tZXRoaW5nIGdvZXMgdG8gcmVmZXJlbmNlCi0gICAg IC91c3IvbGliL3Rlcm1pbmZvLCB0aGUgc3ltbGluayByZWRpcmVjdHMgaXQgdG8gZXNzZW50aWFs bHkKLSAgICAgL3Vzci9zaGFyZS90ZXJtaW5mbywgd2hpY2ggaXMgd2hlcmUgaXQgcmVhbGx5IHJl c2lkZXMgb24geW91cgotICAgICBzeXN0ZW0uIEkgcGVyc29uYWxseSBwcmVmZXIgd2hlcmV2ZXIg cG9zc2libGUgdG8gdXNlIHJlbGF0aXZlCi0gICAgIHN5bWxpbmtzLCBiZWNhdXNlIHRoZXkgc3Rp bGwgaG9sZCwgbW9yZSBvZnRlbiB0aGFuIGJyZWFrLCBhY3Jvc3MKLSAgICAgbW91bnQgcG9pbnRz LCBwYXJ0aWN1bGFybHkgTkZTIG1vdW50cywgd2hlcmUgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUK LSAgICAgbWF5IGJlIGRpZmZlcmVudCBvbiB0aGUgZGlmZmVyZW50IHN5c3RlbXMuCi0KLSAgIEV2 aWRlbnRseSB0aGUgdGVybWluZm8gZmlsZSBtb3ZlZCBiZXR3ZWVuIFJlZCBIYXQgNS4wIGFuZCA1 LjEsIGJ1dCBSZWQKLSAgIEhhdCBkaWQgbm90IGluY2x1ZGUgYSBsaW5rIHRvIGxldCBhcHBsaWNh dGlvbnMgYnVpbHQgcHJpb3IgdG8gNS4xIGZpbmQKLSAgIGl0LiBVc2VycyByZXBvcnRlZCB0aGF0 IGluc3RhbGxpbmcgdGhlIGxpbmsgZml4ZXMgdGhlIHByb2JsZW0uCi0KLTMuMy42LiBUaGUgRnVs bHNjcmVlbiBGaWxlIFRyYW5zZmVyIERpc3BsYXkKLQotICAgWyBbMzQwXVRvcCBdIFsgWzM0MV1D b250ZW50cyBdIFsgWzM0Ml1TZWN0aW9uIENvbnRlbnRzIF0gWwotICAgWzM0M11QcmV2aW91cyBd Ci0KLSAgIFN0YXJ0aW5nIHdpdGggbmN1cnNlcyB2ZXJzaW9ucyBkYXRlZCAxOTk4LTEyLTEyIChh Ym91dCBhIHllYXIgYmVmb3JlCi0gICBuY3Vyc2VzIDUuMCksIG5jdXJzZXMgc2V0cyB0aGUgdGVy bWluYWwgZm9yIGJ1ZmZlcmVkIGkvbywgYnV0Ci0gICB1bmZvcnR1bmF0ZWx5IGlzIG5vdCBhYmxl IHRvIHJlc3RvcmUgaXQgdXBvbiBleGl0IGZyb20gY3Vyc2VzICh2aWEKLSAgIGVuZHdpbigpKS4g VGh1cyBhZnRlciBhIGZpbGUgdHJhbnNmZXIgdGhhdCB1c2VzIHRoZSBmdWxsc2NyZWVuIGZpbGUK LSAgIHRyYW5zZmVyIGRpc3BsYXksIHRoZSB0ZXJtaW5hbCBubyBsb25nZXIgZWNob3Mgbm9yIHJl c3BvbmRzIGltbWVkaWF0ZWx5Ci0gICB0byBUYWIsID8sIGFuZCBvdGhlciBzcGVjaWFsIGNvbW1h bmQgY2hhcmFjdGVycy4gVGhlIHNhbWUgdGhpbmcgaGFwcGVucwotICAgb24gb3RoZXIgcGxhdGZv cm1zIHRoYXQgdXNlIG5jdXJzZXMsIGUuZy4gRnJlZUJTRC4gV29ya2Fyb3VuZHM6Ci0KLSAgICAg KiBVc2UgU0VUIFhGRVIgRElTUExBWSBCUklFRiwgQ1JULCBTRVJJQUwsIG9yIE5PTkUgaW5zdGVh ZCBvZgotICAgICAgIEZVTExTQ1JFRU47IG9yOgotICAgICAqIFJlYnVpbGQgd2l0aCBLRkxBR1M9 LUROT05PU0VUQlVGIChDLUtlcm1pdCA4LjApCi0KLSAgIEluIFJlZCBIYXQgNy4xLCB3aGVuIHVz aW5nIEMtS2VybWl0IGluIGEgR25vbWUgdGVybWluYWwgd2luZG93LCBpdCB3YXMKLSAgIG5vdGlj ZWQgdGhhdCB3aGVuIHRoZSBmdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSBleGl0cyAo dmlhCi0gICBlbmR3aW4oKSksIHRoZSBwcmV2aW91cyAocHJlLWZpbGUtdHJhbnNmZXItZGlzcGxh eSkgc2NyZWVuIGlzIHJlc3RvcmVkLgotICAgVGh1cyB5b3UgY2FuJ3QgbG9vayBhdCB0aGUgY29t cGxldGVkIGRpc3BsYXkgdG8gc2VlIHdoYXQgaGFwcGVuZWQuIFRoaXMKLSAgIGlzIGEgZXZpZGVu dGx5IGEgbmV3IGZlYXR1cmUgb2YgeHRlcm0uIEkgY2FuIG9ubHkgc3BlY3VsYXRlIHRoYXQKLSAg IGluaXRzY3JlZW4oKSBhbmQgZW5kd2luKCkgbXVzdCBzZW5kIHNvbWUga2luZCBvZiBzcGVjaWFs IGVzY2FwZQotICAgc2VxdWVuY2VzIHRoYXQgY29tbWFuZCB4dGVybSB0byBzYXZlIGFuZCByZXN0 b3JlIHRoZSBzY3JlZW4uIFRvIGRlZmVhdAotICAgdGhpcyBlZmZlY3QsIHRlbGwgTGludXggeW91 IGhhdmUgYSB2dDEwMCBvciBvdGhlciB4dGVybS1jb21wYXRpYmxlCi0gICB0ZXJtaW5hbCB0aGF0 IGlzIG5vdCBhY3R1YWxseSBhbiB4dGVybSwgb3IgZWxzZSB0ZWxsIEtlcm1pdCB0byBTRVQKLSAg IFRSQU5TRkVSIERJU1BMQVkgdG8gc29tZXRoaW5nIGJlc2lkZXMgRlVMTFNDUkVFTi4KLQotMy40 LiBDLUtFUk1JVCBBTkQgTkVYVFNURVAKLQotICAgWyBbMzQ0XVRvcCBdIFsgWzM0NV1Db250ZW50 cyBdIFsgWzM0Nl1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMzQ3XU5leHQgXQotICAgWyBbMzQ4XVBy ZXZpb3VzIF0KLQotICAgUnVuIEMtS2VybWl0IGluIGEgVGVybWluYWwsIFN0dWFydCwgb3IgeHRl cm0gd2luZG93LCBvciB3aGVuIGxvZ2dlZCBpbgotICAgcmVtb3RlbHkgdGhyb3VnaCBhIHNlcmlh bCBwb3J0IG9yIFRFTE5FVCBjb25uZWN0aW9uLiBDLUtlcm1pdCBkb2VzIG5vdAotICAgd29yayBj b3JyZWN0bHkgd2hlbiBpbnZva2VkIGRpcmVjdGx5IGZyb20gdGhlIE5lWFRTVEVQIEZpbGUgVmll d2VyIG9yCi0gICBEb2NrLiBUaGlzIGlzIGJlY2F1c2UgdGhlIHRlcm1pbmFsLW9yaWVudGVkIGd0 dHksIHN0dHksICYgaW9jdGwgY2FsbHMKLSAgIGRvbid0IHdvcmsgb24gdGhlIGxpdHRsZSB3aW5k b3cgdGhhdCBOZVhUU1RFUCBwb3BzIHVwIGZvciBub24tTmVYVFNURVAKLSAgIGFwcGxpY2F0aW9u cyBsaWtlIEtlcm1pdC4gQ0JSRUFLIGFuZCBOby1FQ0hPIHNldHRpbmdzIGRvIG5vdCB0YWtlCi0g ICBlZmZlY3QgaW4gdGhlIGNvbW1hbmQgcGFyc2VyIC0tIGNvbW1hbmRzIGFyZSBwYXJzZWQgc3Ry aWN0bHkgbGluZSBhdCBhCi0gICB0aW1lLiAic2V0IGxpbmUgL2Rldi9jdWEiIHdvcmtzLiBEdXJp bmcgQ09OTkVDVCBtb2RlLCB0aGUgY29uc29sZSBzdGF5cwotICAgaW4gY29va2VkIG1vZGUsIHNv IGNoYXJhY3RlcnMgYXJlIG5vdCB0cmFuc21pdHRlZCB1bnRpbCBjYXJyaWFnZSByZXR1cm4KLSAg IG9yIGxpbmVmZWVkIGlzIHR5cGVkLCBhbmQgeW91IGNhbid0IGVzY2FwZSBiYWNrLiBJZiB5b3Ug d2FudCB0byBydW4KLSAgIEtlcm1pdCBkaXJlY3RseSBmcm9tIHRoZSBGaWxlIFZpZXdlciwgdGhl biBsYXVuY2ggaXQgZnJvbSBhIHNoZWxsCi0gICBzY3JpcHQgdGhhdCBwdXRzIGl0IGluIHRoZSBk ZXNpcmVkIGtpbmQgb2Ygd2luZG93LCBzb21ldGhpbmcgbGlrZSB0aGlzCi0gICAoZm9yICJUZXJt aW5hbCIpOgotCi0gIFRlcm1pbmFsIC1MaW5lcyAyNCAtQ29sdW1ucyA4MCAtV2luTG9jWCAxMDAg LVdpbkxvY1kgMTAwICRGT05UICRGT05UU0laRSBcCi0gIC1Tb3VyY2VEb3RMb2dpbiAtU2hlbGwg L3Vzci9sb2NhbC9iaW4va2VybWl0ICYKLQotICAgQy1LZXJtaXQgZG9lcyBub3Qgd29yayBjb3Jy ZWN0bHkgb24gYSBOZVhUIHdpdGggTmVYVFNURVAgMy4wIHRvIHdoaWNoCi0gICB5b3UgaGF2ZSBl c3RhYmxpc2hlZCBhbiBybG9naW4gY29ubmVjdGlvbiwgZHVlIHRvIGEgYnVnIGluIE5lWFRTVEVQ Ci0gICAzLjAsIHdoaWNoIGhhcyBiZWVuIHJlcG9ydGVkIHRvIE5lWFQuCi0KLSAgIFRoZSBTRVQg Q0FSUklFUiBjb21tYW5kIGhhcyBubyBlZmZlY3Qgb24gdGhlIE5lWFQgLS0gdGhpcyBpcyBhCi0g ICBsaW1pdGF0aW9uIG9mIHRoZSBOZVhUU1RFUCBzZXJpYWwtcG9ydCBkZXZpY2UgZHJpdmVycy4K LQotICAgSGFyZHdhcmUgZmxvdyBjb250cm9sIG9uIHRoZSBOZVhUIGlzIHNlbGVjdGVkIG5vdCBi eSAic2V0IGZsb3cgcnRzL2N0cyIKLSAgIGluIEtlcm1pdCAoc2luY2UgTmVYVFNURVAgb2ZmZXJz IG5vIEFQSSBmb3IgdGhpcyksIGJ1dCByYXRoZXIsIGJ5IHVzaW5nCi0gICBhIHNwZWNpYWxseS1u YW1lZCBkcml2ZXIgZm9yIHRoZSBzZXJpYWwgZGV2aWNlOiAvZGV2L2N1ZmEgaW5zdGVhZAotICAg L2Rldi9jdWE7IC9kZXYvY3VmYiBpbnN0ZWFkIG9mIC9kZXYvY3ViLiBUaGlzIGlzIGF2YWlsYWJs ZSBvbmx5IG9uCi0gICA2ODA0MC1iYXNlZCBOZVhUIG1vZGVscyAodGhlIHNpdHVhdGlvbiBmb3Ig SW50ZWwgTmVYVFNURVAKLSAgIGltcGxlbWVudGF0aW9ucyBpcyB1bmtub3duKS4KLQotICAgTmVY VC1idWlsdCA2ODAzMCBhbmQgNjgwNDAgbW9kZWxzIGhhdmUgZGlmZmVyZW50IGtpbmRzIG9mIHNl cmlhbAotICAgaW50ZXJmYWNlczsgdGhlIDY4MDMwIGhhcyBhIE1hY2ludG9zaC1saWtlIFJTLTQy MiBpbnRlcmZhY2UsIHdoaWNoCi0gICBsYWNrcyBSVFMgYW5kIENUUyBzaWduYWxzOyB0aGUgNjgw NDAgaGFzIGFuIFJTLTQyMyAoUlMtMjMyIGNvbXBhdGlibGUpCi0gICBpbnRlcmZhY2UsIHdoaWNo IHN1cHBvcnRzIHRoZSBjb21tb25seS11c2VkIG1vZGVtIHNpZ25hbHMuIFdBUk5JTkc6IHRoZQot ICAgY29ubmVjdG9ycyBsb29rIGV4YWN0bHkgdGhlIHNhbWUsIGJ1dCB0aGUgcGlucyBhcmUgdXNl ZCBpbiBjb21wbGV0ZWx5Ci0gICBESUZGRVJFTlQgd2F5cyAtLSBkaWZmZXJlbnQgY2FibGVzIGFy ZSByZXF1aXJlZCBmb3IgdGhlIHR3byBraW5kcyBvZgotICAgaW50ZXJmYWNlcy4KLQotICAgICBJ RiBZT1UgR0VUIExPVFMgT0YgUkVUUkFOU01JU1NJT05TIGR1cmluZyBmaWxlIHRyYW5zZmVyLCBl dmVuIHdoZW4KLSAgICAgdXNpbmcgYSAvZGV2L2N1ZiogZGV2aWNlIGFuZCB0aGUgbW9kZW0gaXMg Y29ycmVjdGx5IGNvbmZpZ3VyZWQgZm9yCi0gICAgIFJUUy9DVFMgZmxvdyBjb250cm9sLCBZT1Ug UFJPQkFCTFkgSEFWRSBUSEUgV1JPTkcgS0lORCBPRiBDQUJMRS4KLQotICAgT24gdGhlIE5lWFQs IEtlcm1pdCByZXBvcnRlZGx5IChieSBUaW1lTW9uKSBjYXVzZXMgdGhlIGtlcm5lbCB0byB1c2Ug YQotICAgbG90IG9mIENQVSB0aW1lIHdoZW4gdXNpbmcgYSAic2V0IGxpbmUiIGNvbm5lY3Rpb24u IFRoYXQncyBiZWNhdXNlCi0gICB0aGVyZSBpcyBubyBETUEgY2hhbm5lbCBmb3IgdGhlIE5lWFQg c2VyaWFsIHBvcnQsIHNvIHRoZSBwb3J0IG11c3QKLSAgIGludGVycnVwdCB0aGUga2VybmVsIGZv ciBlYWNoIGNoYXJhY3RlciBpbiBvciBvdXQuCi0KLSAgIE9uZSB1c2VyIHJlcG9ydGVkIHRyb3Vi bGUgcnVubmluZyBDLUtlcm1pdCBvbiBhIE5lWFQgZnJvbSB3aXRoaW4gTmVYVCdzCi0gICBTdWJw cm9jZXNzIGNsYXNzIHVuZGVyIE5lWFRzdGVwIDMuMCwgYW5kL29yIHdoZW4gcmxvZ2luJ2QgZnJv bSBvbmUgTmVYVAotICAgdG8gYW5vdGhlcjogRXJyb3Igb3BlbmluZyAvZGV2L3R0eTosIGNvbmdt OiBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzLgotICAgRGlhZ25vc2lzOiBCdWcgaW4gTmVYVFNU RVAgMy4wLCBjdXJlIHVua25vd24uCi0KLTMuNS4gQy1LRVJNSVQgQU5EIFFOWAotCi0gICBbIFsz NDldVG9wIF0gWyBbMzUwXUNvbnRlbnRzIF0gWyBbMzUxXVNlY3Rpb24gQ29udGVudHMgXSBbIFsz NTJdTmV4dCBdCi0gICBbIFszNTNdUHJldmlvdXMgXQotCi0gICBTZWUgYWxzbzogVGhlIFszNTRd Y29tcC5vcy5xbnggbmV3c2dyb3VwLgotCi0gICBTdXBwb3J0IGZvciBRTlggNC54IHdhcyBhZGRl ZCBpbiBDLUtlcm1pdCA1QSgxOTApLiBUaGlzIGlzIGEKLSAgIGZ1bGwtZnVuY3Rpb24gaW1wbGVt ZW50YXRpb24sIHRob3JvdWdobHkgdGVzdGVkIG9uIFFOWCA0LjIxIGFuZCBsYXRlciwKLSAgIGFu ZCB2ZXJpZmllZCB0byB3b3JrIGluIGJvdGggMTYtYml0IGFuZCAzMi1iaXQgdmVyc2lvbnMuIFRo ZSAxNi1iaXQKLSAgIHZlcnNpb24gd2FzIGRyb3BwZWQgaW4gQy1LZXJtaXQgNy4wIHNpbmNlIGl0 IGNhbiBubyBsb25nZXIgYmUgYnVpbHQKLSAgIHN1Y2Nlc3NmdWxseSAoYWZ0ZXIgc3RyaXBwaW5n IG1vc3QgbW9zdCBmZWF0dXJlcywgSSBzdWNjZWVkZWQgaW4KLSAgIGdldHRpbmcgaXQgdG8gY29t cGlsZSBhbmQgbGluayB3aXRob3V0IGNvbXBsYWludCwgYnV0IHRoZSBleGVjdXRhYmxlCi0gICBq dXN0IGJlZXBzIHdoZW4geW91IHJ1biBpdCk7IGZvciAxNi1iaXQgUU5YIDQuMngsIHVzZSBDLUtl cm1pdCA2LjAgb3IKLSAgIGVhcmxpZXIsIG9yIGVsc2UgWzM1NV1HLUtlcm1pdC4KLQotICAgVGhl IDMyLWJpdCB2ZXJzaW9uIChhbmQgdGhlIDE2LWJpdCB2ZXJzaW9uIHByaW9yIHRvIEMtS2VybWl0 IDcuMCkKLSAgIHN1cHBvcnRzIG1vc3Qgb2YgQy1LZXJtaXQncyBhZHZhbmNlZCBmZWF0dXJlcyBp bmNsdWRpbmcgVENQL0lQLCBoaWdoCi0gICBzZXJpYWwgc3BlZWRzLCBoYXJkd2FyZSBmbG93LWNv bnRyb2wsIG1vZGVtLXNpZ25hbCBhd2FyZW5lc3MsIGN1cnNlcwotICAgc3VwcG9ydCwgZXRjLgot Ci0gICBCVUc6IEluIEMtS2VybWl0IDYuMCBvbiBRTlggNC4yMiBhbmQgZWFybGllciwgdGhlIGZ1 bGxzY3JlZW4gZmlsZQotICAgdHJhbnNmZXIgZGlzcGxheSB3b3JrZWQgZmluZSB0aGUgZmlyc3Qg dGltZSwgYnV0IHdhcyBmcmFjdHVyZWQgb24KLSAgIHN1YnNlcXVlbnQgZmlsZSB0cmFuc2ZlcnMu IENhdXNlIGFuZCBjdXJlIHVua25vd24uIEluIEMtS2VybWl0IDcuMCBhbmQKLSAgIFFOWCA0LjI1 LCB0aGlzIG5vIGxvbmdlciBvY2N1cnMuIEl0IGlzIG5vdCBrbm93biBpZiBpdCB3b3VsZCBvY2N1 ciBpbgotICAgQy1LZXJtaXQgNy4wIG9yIGxhdGVyIG9uIGVhcmxpZXIgUU5YIHZlcnNpb25zLgot Ci0gICBEaWFsb3V0IGRldmljZXMgYXJlIG5vcm1hbGx5IC9kZXYvc2VyMSwgL2Rldi9zZXIyLCAu Li4sIGFuZCBjYW4gYmUKLSAgIG9wZW5lZCBleHBsaWNpdGx5IHdpdGggU0VUIExJTkUuIFJlcG9y dGVkbHksICIvZGV2L3NlciIgKG5vIHVuaXQKLSAgIG51bWJlcikgb3BlbnMgdGhlIGZpcnN0IGF2 YWlsYWJsZSAvZGV2L3Nlcm4gZGV2aWNlLgotCi0gICBMaWtlIGFsbCBvdGhlciBVbml4IEMtS2Vy bWl0IGltcGxlbWVudGF0aW9ucywgUU5YIEMtS2VybWl0IGRvZXMgbm90Ci0gICBwcm92aWRlIGFu eSBraW5kIG9mIHRlcm1pbmFsIGVtdWxhdGlvbi4gVGVybWluYWwgc3BlY2lmaWMgZnVuY3Rpb25z IGFyZQotICAgcHJvdmlkZWQgYnkgeW91ciB0ZXJtaW5hbCwgdGVybWluYWwgd2luZG93IChlLmcu IFFOWCBUZXJtaW5hbCBvcgotICAgeHRlcm0pLCBvciBlbXVsYXRvci4KLQotICAgUU5YIEMtS2Vy bWl0LCBhcyBkaXN0cmlidXRlZCwgZG9lcyBub3QgaW5jbHVkZSBzdXBwb3J0IGZvciBVVUNQCi0g ICBsaW5lLWxvY2tpbmc7IHRoZSBRTlggbWFrZWZpbGUgZW50cmllcyAocW54MzIgYW5kIHFueDE2 KSBpbmNsdWRlIHRoZQotICAgLUROT1VVQ1Agc3dpdGNoLiBUaGlzIGlzIGJlY2F1c2UgUU5YLCBh cyBkaXN0cmlidXRlZCwgZG9lcyBub3QgaW5jbHVkZQotICAgVVVDUCwgYW5kIGl0cyBvd24gY29t bXVuaWNhdGlvbnMgc29mdHdhcmUgKGUuZy4gcXRlcm0pIGRvZXMgbm90IHVzZQotICAgVVVDUCBs aW5lIGxvY2tpbmcuIElmIHlvdSBoYXZlIGEgVVVDUCBwcm9kdWN0IGluc3RhbGxlZCBvbiB5b3Vy IFFOWAotICAgc3lzdGVtLCByZW1vdmUgdGhlIC1ETk9VVUNQIHN3aXRjaCBmcm9tIHRoZSBtYWtl ZmlsZSBlbnRyeSBhbmQgcmVidWlsZC4KLSAgIFRoZW4gY2hlY2sgdG8gc2VlIHRoYXQgS2VybWl0 J3MgVVVDUCBsb2NrZmlsZSBjb252ZW50aW9ucyBhcmUgdGhlIHNhbWUKLSAgIGFzIHRob3NlIG9m IHlvdXIgVVVDUCBwYWNrYWdlOyBpZiBub3QsIHJlYWQgdGhlIFszNTZdVVVDUCBsb2NrZmlsZQot ICAgc2VjdGlvbiBvZiB0aGUgWzM1N11JbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25zIGFuZCBtYWtl IHRoZSBuZWNlc3NhcnkKLSAgIGNoYW5nZXMgdG8gdGhlIG1ha2VmaWxlIGVudHJ5IChlLmcuIGFk ZCAtREhEQlVVQ1ApLgotCi0gICBRTlggZG9lcywgaG93ZXZlciwgYWxsb3cgYSBwcm9ncmFtIHRv IGdldCB0aGUgZGV2aWNlIG9wZW4gY291bnQuIFRoaXMKLSAgIGNhbiBub3QgYmUgYSByZWxpYWJs ZSBmb3JtIG9mIGxvY2tpbmcgdW5sZXNzIGFsbCBhcHBsaWNhdGlvbnMgZG8gaXQsIHNvCi0gICBi eSBkZWZhdWx0LCBLZXJtaXQgdXNlcyB0aGlzIGluZm9ybWF0aW9uIG9ubHkgZm9yIHByaW50aW5n IGEgd2FybmluZwotICAgbWVzc2FnZSBzdWNoIGFzOgotCi0gIEMtS2VybWl0PnNldCBsaW5lIC9k ZXYvc2VyMQotICBXQVJOSU5HIC0gIi9kZXYvc2VyMSIgbG9va3MgYnVzeS4uLgotCi0gICBIb3dl dmVyLCBpZiB5b3Ugd2FudCB0byB1c2UgaXQgYXMgYSBsb2NrLCB5b3UgY2FuIGRvIHNvIHdpdGg6 Ci0KLSAgU0VUIFFOWC1QT1JULUxPQ0sgeyBPTiwgT0ZGIH0KLQotICAgVGhpcyBpcyBPRkYgYnkg ZGVmYXVsdDsgaWYgeW91IHNldCBpbiBPTiwgQy1LZXJtaXQgd2lsbCBmYWlsIHRvIG9wZW4KLSAg IGFueSBkaWFsb3V0IGRldmljZSB3aGVuIGl0cyBvcGVuIGNvdW50IGluZGljYXRlcyB0aGF0IGFu b3RoZXIgcHJvY2VzcwotICAgaGFzIGl0IG9wZW4uIFNIT1cgQ09NTSAoaW4gUU5YIG9ubHkpIGRp c3BsYXlzIHRoZSBzZXR0aW5nLCBhbmQgaWYgeW91Ci0gICBoYXZlIGEgcG9ydCBvcGVuLCBpdCBh bHNvIHNob3dzIHRoZSBvcGVuIGNvdW50LgotCi0gICBBcyBvZiBDLUtlcm1pdCA4LjAsIEMtS2Vy bWl0J3MgIm9wZW4tY291bnQiIGZvcm0gb2YgbGluZSBsb2NraW5nIHdvcmtzCi0gICBvbmx5IGlu IFFOWDQsIG5vdCBpbiBRTlg2ICh0aGlzIG1pZ2h0IGNoYW5nZSBpbiBhIGZ1dHVyZSBDLUtlcm1p dAotICAgcmVsZWFzZSkuCi0KLTMuNi4gQy1LRVJNSVQgQU5EIFNDTwotCi0gICBbIFszNThdVG9w IF0gWyBbMzU5XUNvbnRlbnRzIF0gWyBbMzYwXVNlY3Rpb24gQ29udGVudHMgXSBbIFszNjFdTmV4 dCBdCi0gICBbIFszNjJdUHJldmlvdXMgXQotCi0gICBTRUNUSU9OIENPTlRFTlRTCi0KLTMuNi4x LiBbMzYzXVNDTyBYRU5JWAotMy42LjIuIFszNjRdU0NPIFVOSVggYW5kIE9TUjUKLTMuNi4zLiBb MzY1XVVuaXh3YXJlCi0zLjYuNC4gWzM2Nl1PcGVuIFVOSVggOAotCi0gICBSRUZFUkVOQ0VTCi0K LSAgICAgKiBUaGUgY29tcC51bml4LnNjby4qIG5ld3Nncm91cHMuCi0gICAgICogWzM2N11TZWN0 aW9uIDMuMTAgYmVsb3cgZm9yIFVuaXh3YXJlLgotICAgICAqIFRoZSBmb2xsb3dpbmcgRkFRczoK LQotICAgICAgICBUaGUgY29tcC5zY28ubWlzYyBGQVE6Ci0gICAgICAgICAgICAgICAgWzM2OF1o dHRwOi8vYXBsYXdyZW5jZS5jb20vU0NPRkFRLwotCi0gICAgICAgIENhbGRlcmEgKFNDTykgY29t cC51bml4LnNjby5wcm9ncmFtbWVyIEZBUToKLSAgICAgICAgICAgICAgICBbMzY5XWh0dHA6Ly93 d3cuemVuZXouY29tL2NnaS1iaW4vc2NvcHJvZ2ZhcS9mYXEucGwKLQotICAgICAgICBUaGUgVW5p eFdhcmUgNy9PcGVuVU5JWCA4IEZBUToKLSAgICAgICAgICAgICAgICBbMzcwXWh0dHA6Ly93d3cu emVuZXouY29tL2NnaS1iaW4vc2NvdXc3ZmFxL2ZhcS5wbAotICAgICAgICAgICAgICAgIFszNzFd aHR0cDovL3plbmV6LnBjdW5peC5jb20vY2dpLWJpbi9zY291dzdmYXEvZmFxLnBsCi0KLSAgICAg ICAgSGlnaCBTcGVlZCBNb2RlbXMgZm9yIFNDTyBVbml4OgotICAgICAgICAgICAgICAgIFszNzJd aHR0cDovL3BjdW5peC5jb20vVW5peGFydC9tb2RlbXMuaHRtbAotCi0gICAgICAgIFRoZSBVbml4 V2FyZSBGQVEKLSAgICAgICAgICAgICAgICBbMzczXWh0dHA6Ly93d3cuZnJlZWJpcmQub3JnL2Zh cS8KLQotICAgICAgICBUaGUgVW5peFdhcmUgMS54IGFuZCAyLjAgUHJvZ3JhbW1lciBGQVEKLSAg ICAgICAgICAgICAgICBbMzc0XWh0dHA6Ly93d3cuZnJlZWJpcmQub3JnL2ZhcS9kZXZlbG9wZXIu aHRtbAotCi0gICAgICAgIENhbGRlcmEgU3VwcG9ydCBLbm93bGVkZ2UgQmFzZQotICAgICAgICAg ICAgICAgIFszNzVdaHR0cDovL3N1cHBvcnQuY2FsZGVyYS5jb20vY2FsZGVyYQotCi0gICAgICAg IFszNzZdaHR0cDovL3N0YWdlLmNhbGRlcmEuY29tL3RhLwotICAgICAgICAgICAgICAgIENhbGRl cmEgKFNDTykgVGVjaG5pY2FsIEFydGljbGUgU2VhcmNoIENlbnRlcgotCi0gICAgICAgIFszNzdd aHR0cDovL2FwbGF3cmVuY2UuY29tL25ld3Rvc2NvLmh0bWwKLSAgICAgICAgICAgICAgICBOZXcg dG8gU0NPIChUb255IExhd3JlbmNlKQotCi0gICBUaGUgc2FtZSBjb21tZW50cyByZWdhcmRpbmcg dGVybWluYWwgZW11bGF0aW9uIGFuZCBrZXkgbWFwcGluZyBhcHBseSB0bwotICAgU0NPIG9wZXJh dGluZyBzeXN0ZW1zIGFzIHRvIGFsbCBvdGhlciBVbml4ZXMuIEMtS2VybWl0IGlzIG5vdCBhCi0g ICB0ZXJtaW5hbCBlbXVsYXRvciwgYW5kIHlvdSBjYW4ndCB1c2UgaXQgdG8gbWFwIEYta2V5cywg QXJyb3cga2V5cywgZXRjLgotICAgVGhlIHdheSB0byBkbyB0aGlzIGlzIHdpdGggeG1vZG1hcCAo eHRlcm0pIG9yIGxvYWRrZXlzIChjb25zb2xlKS4gRm9yIGEKLSAgIGJyaWVmIGV4cGxhbmF0aW9u LCBzZWUgWzM3OF1TZWN0aW9uIDMuMC41LiBGb3IgYSBmdWxsZXIgZXhwbGFuYXRpb24sCi0gICBb Mzc5XUNsSUNLIEhFUkUuCi0KLSAgIEFsc28gc2VlIGdlbmVyYWwgY29tbWVudHMgb24gUEMtYmFz ZWQgVW5peGVzIGluIFszODBdU2VjdGlvbiAzLjAuCi0KLTMuNi4xLiBTQ08gWEVOSVgKLQotICAg WyBbMzgxXVRvcCBdIFsgWzM4Ml1Db250ZW50cyBdIFsgWzM4M11TZWN0aW9uIENvbnRlbnRzIF0g WyBbMzg0XU5leHQgXQotCi0gICBPbGQgWGVuaXggdmVyc2lvbnMuLi4gRGlkIHlvdSBrbm93OiBY ZW5peCAzLjAgaXMgKm9sZGVyKiB0aGFuIFhlbml4Ci0gICAyLjA/Ci0KLSAgIEluIFhlbml4IDIu My40IGFuZCBwcm9iYWJseSBvdGhlciBYZW5peCB2ZXJzaW9ucywgbW9tZW50YXJpbHkgZHJvcHBp bmcKLSAgIERUUiB0byBoYW5nIHVwIGEgbW9kZW0gZG9lcyBub3Qgd29yay4gRFRSIGdvZXMgZG93 biBidXQgZG9lcyBub3QgY29tZQotICAgdXAgYWdhaW4uIFdvcmthcm91bmQ6IFVzZSBTRVQgTU9E RU0gSEFOR1VQLU1FVEhPRCBNT0RFTS1DT01NQU5ELgotICAgQW55Ym9keSB3aG8gd291bGQgbGlr ZSB0byBmaXggdGhpcyBpcyB3ZWxjb21lIHRvIHRha2UgYSBsb29rIGF0Ci0gICB0dGhhbmcoKSBp biBbMzg1XWNrdXRpby5jLiBBbHNvOiBtb2RlbSBzaWduYWxzIGNhbiBub3QgYmUgcmVhZCBpbgot ICAgWGVuaXgsIGFuZCB0aGUgbWF4aW11bSBzZXJpYWwgc3BlZWQgaXMgMzg0MDAuCi0KLSAgIFRo ZXJlIGlzIGFsbCBzb3J0cyBvZiBjb25mdXNpb24gYW1vbmcgU0NPIHZlcnNpb25zLCBwYXJ0aWN1 bGFybHkgd2hlbgotICAgdGhpcmQtIHBhcnR5IGNvbW11bmljYXRpb25zIGJvYXJkcyBhbmQgZHJp dmVycyBhcmUgaW5zdGFsbGVkLCByZWdhcmRpbmcKLSAgIGxvY2tmaWxlIG5hbWluZyBjb252ZW50 aW9ucywgYXMgd2VsbCBhcyBiYXNpYyBmdW5jdGlvbmFsaXR5LiBBcyBmYXIgYXMKLSAgIGxvY2tm aWxlcyBnbywgYWxsIGJldHMgYXJlIG9mZiBpZiB5b3UgYXJlIHVzaW5nIGEgdGhpcmQtcGFydHkg bXVsdGlwb3J0Ci0gICBib2FyZC4gQXQgbGVhc3QgeW91IGhhdmUgdGhlIHNvdXJjZSBjb2RlLiBI b3BlZnVsbHkgeW91IGFsc28gaGF2ZSBhIEMKLSAgIGNvbXBpbGVyIDotKQotCi0gICBYZW5peCAy LjMuMCBhbmQgbGF0ZXIgY2xhaW0gdG8gc3VwcG9ydCBSVFNGTE9XIGFuZCBDVFNGTE9XLCBidXQg dGhpcyBpcwotICAgbm90IG1vZGVybiBiaWRpcmVjdGlvbmFsIGhhcmR3YXJlIGZsb3cgY29udHJv bDsgcmF0aGVyIGl0IGltcGxlbWVudHMKLSAgIHRoZSBvcmlnaW5hbCBSUy0yMzIgbWVhbmluZ3Mg b2YgdGhlc2Ugc2lnbmFscyBmb3IgdW5pZGlyZWN0aW9uYWwKLSAgIGhhbGYtZHVwbGV4IGxpbmUg YWNjZXNzOiBJZiBib3RoIFJUU0ZMT1cgYW5kIENUU0ZMT1cgYml0cyBhcmUgc2V0LAotICAgWGVu aXggYXNzZXJ0cyBSVFMgd2hlbiBpdCB3YW50cyB0byBzZW5kIGRhdGEgYW5kIHdhaXRzIGZvciBD VFMKLSAgIGFzc2VydGlvbiBiZWZvcmUgaXQgYWN0dWFsbHkgc3RhcnRzIHNlbmRpbmcgZGF0YSAo YWxzbywgcmVwb3J0ZWRseSwKLSAgIGV2ZW4gdGhpcyBpcyBicm9rZW4gaW4gWGVuaXggMi4zLjAg YW5kIDIuMy4xKS4KLQotMy42LjIuIFNDTyBVTklYIEFORCBPU1I1Ci0KLSAgIFsgWzM4Nl1Ub3Ag XSBbIFszODddQ29udGVudHMgXSBbIFszODhdU2VjdGlvbiBDb250ZW50cyBdIFsgWzM4OV1OZXh0 IF0KLSAgIFsgWzM5MF1QcmV2aW91cyBdCi0KLSAgIFNDTyBzeXN0ZW1zIHRlbmQgdG8gdXNlIGRp ZmZlcmVudCBuYW1lcyAoaS5lLiBkcml2ZXJzKSBmb3IgdGhlIHNhbWUKLSAgIGRldmljZS4gVHlw aWNhbGx5IC9kZXYvdHR5MWEgcmVmZXJzIHRvIGEgdGVybWluYWwgZGV2aWNlIHRoYXQgaGFzIG5v Ci0gICBtb2RlbSBjb250cm9sOyBvcGVuLCByZWFkLCB3cml0ZSwgYW5kIGNsb3NlIG9wZXJhdGlv bnMgZG8gbm90IGRlcGVuZCBvbgotICAgY2Fycmllci4gT24gdGhlIG90aGVyIGhhbmQsIC9kZXYv dHR5MUEgKHNhbWUgbmFtZSwgYnV0IHdpdGggZmluYWwKLSAgIGxldHRlciB1cHBlciBjYXNlKSwg aXMgdGhlIHNhbWUgZGV2aWNlIHdpdGggbW9kZW0gY29udHJvbCwgaW4gd2hpY2gKLSAgIGNhcnJp ZXIgaXMgcmVxdWlyZWQgKHRoZSBTRVQgTElORSBjb21tYW5kIGRvZXMgbm90IGNvbXBsZXRlIHVu dGlsCi0gICBjYXJyaWVyIGFwcGVhcnMsIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBmYWlsIGlmIHRo ZXJlIGlzIG5vIGNhcnJpZXIsCi0gICBldGMpLgotCi0gICBTQ08gT3BlblNlcnZlciA1LjAuNSBh bmQgZWFybGllciBkbyBub3Qgc3VwcG9ydCB0aGUgcmVhZGluZyBvZiBtb2RlbQotICAgc2lnbmFs cy4gVGh1cyAic2hvdyBjb21tIiBkb2VzIG5vdCBsaXN0IG1vZGVtIHNpZ25hbHMsIGFuZCBDLUtl cm1pdAotICAgZG9lcyBub3QgYXV0b21hdGljYWxseSBwb3AgYmFjayB0byBpdHMgcHJvbXB0IHdo ZW4gdGhlIG1vZGVtIGhhbmdzIHVwCi0gICB0aGUgY29ubmVjdGlvbiAoZHJvcHMgQ0QpLiBUaGUg aW9jdGwoKSBjYWxsIGZvciB0aGlzIGlzIHNpbXBseSBub3QKLSAgIGltcGxlbWVudGVkLCBhdCBs ZWFzdCBub3QgaW4gdGhlIHN0YW5kYXJkIGRyaXZlcnMuIE9TUjUuMC42IGF0dGVtcHRzIHRvCi0g ICBkZWFsIHdpdGggbW9kZW0gc2lnbmFscyBidXQgZmFpbHM7IGhvd2V2ZXIgT1NSNS4wLjZhIGFw cGVhcnMgdG8KLSAgIGZ1bmN0aW9uIHByb3Blcmx5LgotCi0gICBEaWFsaW5nIGlzIGxpa2VseSBu b3QgdG8gd29yayB3ZWxsIGluIFNDTyBPcGVuU2VydmVyIDUuMC54IGJlY2F1c2UgbWFueQotICAg b2YgdGhlIHNlcmlhbC1wb3J0IEFQSXMgc2ltcGx5IGRvIG5vdCBvcGVyYXRlIHdoZW4gdXNpbmcg dGhlIHN0YW5kYXJkCi0gICBkcml2ZXJzLiBGb3IgZXhhbXBsZSwgaWYgRFRSIGlzIGRyb3BwZWQg YnkgdGhlIHJlY29tbWVuZGVkIG1ldGhvZAotICAgKHNldHRpbmcgc3BlZWQgdG8gMCBmb3IgaGFs ZiBhIHNlY29uZHMsIHRoZW4gcmVzdG9yaW5nIHRoZSBzcGVlZCksIERUUgotICAgYW5kIFJUUyBn byBkb3duIGJ1dCBuZXZlciBjb21lIGJhY2sgdXAuIFdoZW4gaW4gZG91YnQgU0VUIE1PREVNCi0g ICBIQU5HVVAtTUVUSE9EIE1PREVNLUNPTU1BTkQgb3IgU0VUIERJQUwgSEFOR1VQIE9GRi4KLQot ICAgT24gdGhlIG90aGVyIGhhbmQsIGNlcnRhaW4gZnVuY3Rpb25zIHRoYXQgbWlnaHQgbm90IChk byBub3QpIHdvcmsgcmlnaHQKLSAgIG9yIGF0IGFsbCB3aGVuIHVzaW5nIFNDTyBkcml2ZXJzIChl LmcuIGhpZ2ggc2VyaWFsIHNwZWVkcywgaGFyZHdhcmUKLSAgIGZsb3cgY29udHJvbCwgYW5kL29y IHJlYWRpbmcgb2YgbW9kZW0gc2lnbmFscykgbWlnaHQgd29yayByaWdodCB3aGVuCi0gICB1c2lu ZyB0aGlyZC1wYXJ0eSBkcml2ZXJzLiAoRXhhbXBsZTogaGFyZHdhcmUgZmxvdyBjb250cm9sIHdv cmtzLAotICAgcmVwb3J0ZWRseSwgb25seSBvbiB1cHBlcmNhc2UgZGV2aWNlIGxpa2UgdHR5MUEg LS0gbm90IHR0eTFhIC0tIGFuZAotICAgb25seSB3aGVuIENMT0NBTCBpcyBjbGVhciB3aGVuIHVz aW5nIHRoZSBTQ08gc2lvIGRyaXZlciwgYnV0IHRoZXJlIGFyZQotICAgbm8gc3VjaCByZXN0cmlj dGlvbnMgaW4sIGUuZy4sIFszOTFdRGlnaWJvYXJkIGRyaXZlcnMpLgotCi0gICBPbmUgdXNlciBy ZXBvcnRzIHRoYXQgaGUgY2FuJ3QgdHJhbnNmZXIgbGFyZ2UgZmlsZXMgd2l0aCBDLUtlcm1pdCB1 bmRlcgotICAgU0NPIE9TUjUuMC4wIGFuZCA1LjAuNCAtLSBhZnRlciB0aGUgZmlyc3QgNUssIGV2 ZXJ5dGhpbmcgZmFsbHMgYXBhcnQuCi0gICBTYW1lIHRoaW5nIHdpdGhvdXQgS2VybWl0IC0tIGUu Zy4gd2l0aCBmdHAgb3ZlciBhIFBQUCBjb25uZWN0aW9uLgotICAgTGF0ZXIsIGhlIHNhaWQgdGhh dCByZXBsYWNpbmcgU0NPJ3MgU0lPIGRyaXZlciB3aXRoIEZBUywgYW4gYWx0ZXJuYXRpdmUKLSAg IGNvbW11bmljYXRpb25zIGRyaXZlciwgbWFkZSB0aGUgcHJvYmxlbSBnbyBhd2F5OgotCi0gIFsz OTJdZnRwOi8vZnRwLmZ1LWJlcmxpbi5kZS9wdWIvdW5peC9kcml2ZXIvZmFzCi0KLSAgIFdpdGgg cmVnYXJkIHRvIGJpZGlyZWN0aW9uYWwgc2VyaWFsIHBvcnRzIG9uIE9wZW5TZXJ2ZXIgNS4wLjQs IHRoZQotICAgZm9sbG93aW5nIGFkdmljZSBhcHBlYXJlZCBvbiBhbiBTQ08tcmVsYXRlZCBuZXdz Z3JvdXA6Ci0KLSAgICAgTm8gYW1vdW50IG9mIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMg Z29pbmcgdG8gaGVscCB5b3Ugb24gNS4wLjQKLSAgICAgdW5sZXNzIGl0IGluY2x1ZGVzIHRoZSBr bHVkZ2UgZm9yIHRoZSBwcmltYXJ5IHByb2JsZW0uIFdpdGggYWxtb3N0Ci0gICAgIGV2ZXJ5IG1v ZGVtLCB0aGUgNS4wLjQgZ2V0dHkgd2lsbCBiYXJmIG1lc3NhZ2VzIGFuZCBtYXkgb3IgbWF5IG5v dAotICAgICBjb25uZWN0LiBUaGVyZSBhcmUgMiBzb2x1dGlvbnMgYW5kIG9ubHkgb25lIHdvcmtz IG9uIDUuMC40LiBHZXQgdGhlCi0gICAgIGF0ZGlhbGVyIGJpbmFyeSBmcm9tIGEgNS4wLjAgc3lz dGVtIGFuZCBzdWJzdGl0dXRlIGl0IGZvciB0aGUgbmF0aXZlCi0gICAgIDUuMC40IGF0ZGlhbGVy LiBUaGUgb3RoZXIgc29sdXRpb24gaXMgdG8gdXBncmFkZSB0byA1LjAuNS4gQW5kLCBtb3N0Ci0g ICAgIG9mIGFsbCwgb24gYW55IE9wZW5TZXJ2ZXIgcHJvZHVjdHMsIGRvIE5PVCBydW4gdGhlIGJh ZGx5IGJyb2tlbgotICAgICBNb2RlbSBNYW5hZ2VyLiBDb25maWd1cmUgdGhlIG1vZGVtcyBpbiB0 aGUgdGltZSBob25vcmVkIHdheSB0aGF0Ci0gICAgIGRhdGVzIGJhY2sgdG8gWGVuaXguCi0KLSAg IFVzZSBTQ08tcHJvdmlkZWQgdXRpbGl0aWVzIGZvciBzd2l0Y2hpbmcgdGhlIGRpcmVjdGlvbmFs aXR5IG9mIGEgbW9kZW0KLSAgIGxpbmUsIHN1Y2ggYXMgImVuYWJsZSIgYW5kICJkaXNhYmxlIiBj b21tYW5kcy4gRm9yIGV4YW1wbGUsIHRvIGRpYWwgb3V0Ci0gICBvbiB0dHkxYSwgd2hpY2ggaXMg bm9ybWFsbHkgc2V0IHVwIGZvciBsb2dpbnM6Ci0KLSAgZGlzYWJsZSB0dHkxYQotICBrZXJtaXQg LWwgL2Rldi90dHkxYQotICBlbmFibGUgdHR5MWEKLQotICAgSWYgYSB0dHkgZGV2aWNlIGlzIGxp c3RlZCBhcyBhbiBBQ1UgaW4gL3Vzci9saWIvdXVjcC9EZXZpY2VzIGFuZCBpcwotICAgZW5hYmxl ZCwgZ2V0dHkgcmVzZXRzIHRoZSBvd25lcnNoaXAgYW5kIHBlcm1pc3Npb25zIHRvIHV1Y3AudXVj cCBhbmQKLSAgIDY0MCBldmVyeSB0aW1lIHRoZSBkZXZpY2UgaXMgcmVsZWFzZWQuIElmIHlvdSB3 YW50IHRvIHVzZSB0aGUgZGV2aWNlCi0gICBvbmx5IGZvciBkaWFsb3V0LCBhbmQgeW91IHdhbnQg dG8gc3BlY2lmeSBvdGhlciBvd25lcnMgb3IgcGVybWlzc2lvbnMsCi0gICB5b3Ugc2hvdWxkIGRp c2FibGUgaXQgaW4gL3Vzci9saWIvdXVjcC9EZXZpY2VzOyB0aGlzIHdpbGwgcHJldmVudCBnZXR0 eQotICAgZnJvbSBkb2luZyB0aGluZ3MgdG8gaXQuIFlvdSBzaG91bGQgYWxzbyBjaGFuZ2VzIHRo ZSBkZXZpY2UncyBmaWxlCi0gICBtb2RlcyBpbiAvZXRjL2NvbmYvbm9kZS5kL3NpbyBieSBjaGFu Z2luZyBmaWVsZHMgNS03IGZvciB0aGUgZGVzaXJlZAotICAgZGV2aWNlKHMpOyB0aGlzIGRldGVy bWluZXMgaG93IHRoZSBkZXZpY2VzIGFyZSBzZXQgaWYgeW91IHJlbGluayB0aGUKLSAgIGtlcm5l bC4KLQotICAgT25lIFNDTyB1c2VyIG9mIEMtS2VybWl0IDVBKDE5MCkgcmVwb3J0ZWQgdGhhdCBv bmx5IG9uZSBjb3B5IG9mIEtlcm1pdAotICAgY2FuIHJ1biBhdCBhIHRpbWUgd2hlbiBhIFN0YWxs aW9uIFRlY2hub2xvZ2llcyBtdWx0aXBvcnQgYm9hcmRzIGFyZQotICAgaW5zdGFsbGVkLiBDYXVz ZSwgY3VyZSwgYW5kIHByZXNlbnQgc3RhdHVzIHVua25vd24gKHNlZSBbMzkzXVNlY3Rpb24gMTQK LSAgIGZvciBtb3JlIGluZm8gcmVnYXJkaW5nIFN0YWxsaW9uKS4KLQotICAgUHJpb3IgdG8gU0NP IE9wZW5TZXJ2ZXIgNS4wLjQsIHRoZSBoaWdoZXN0IHNlcmlhbCBwb3J0IHNwZWVkIHN1cHBvcnRl ZAotICAgYnkgU0NPIHdhcyAzODQwMC4gSG93ZXZlciwgaW4gc29tZSBTQ08gdmVyc2lvbnMgKGUu Zy4gT1NSNSkgaXQgaXMKLSAgIHBvc3NpYmxlIHRvIG1hcCByYXJlbHktdXNlZCBsb3dlciBzcGVl ZHMgKGxpa2UgNjAwIGFuZCAxODAwKSB0byBoaWdoZXIKLSAgIG9uZXMgbGlrZSA1NzYwMCBhbmQg MTE1MjAwLiBUbyBmaW5kIG91dCBob3csIGdvIHRvCi0gICBbMzk0XWh0dHA6Ly93d3cuc2NvLmNv bS8gYW5kIHNlYXJjaCBmb3IgIjExNTIwMCIuIEluIE9TUjUuMC40LCBzZXJpYWwKLSAgIHNwZWVk cyB1cCB0byA5MjE2MDAgYXJlIHN1cHBvcnRlZCB0aHJvdWdoIHRoZSBQT1NJWCBpbnRlcmZhY2U7 IEMtS2VybWl0Ci0gICA2LjEuMTkzIG9yIGxhdGVyLCB3aGVuIGJ1aWx0IGZvciBPU1I1LjAuNCB1 c2luZyAvYmluL2NjIChOT1QgdGhlIFVESywKLSAgIHdoaWNoIGhpZGVzIHRoZSBoaWdoLXNwZWVk IGRlZmluaXRpb25zIGZyb20gQ1BQKSwgc3VwcG9ydHMgdGhlc2UKLSAgIHNwZWVkcywgYnV0IHlv dSBtaWdodCBiZSBhYmxlIHRvIHJ1biB0aGlzIGJpbmFyeSBvbiBlYXJsaWVyIHJlbGVhc2VzIHRv Ci0gICBnZXQgdGhlIGhpZ2ggc2VyaWFsIHNwZWVkcywgZGVwZW5kaW5nIG9uIHZhcmlvdXMgZmFj dG9ycywgZGVzY3JpYmVkIGJ5Ci0gICBCZWxhIEx1YmtpbiBvZiBTQ086Ci0KLSAgU2VyaWFsIHNw ZWVkcyB1bmRlciBTQ08gVW5peCAvIE9wZW4gRGVza3RvcCAvIE9wZW5TZXJ2ZXIKLSAgPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgVGhp cmQgcGFydHkgZHJpdmVycyAoaW50ZWxsaWdlbnQgc2VyaWFsIGJvYXJkcykgbWF5IHByb3ZpZGUg YW55IHNwZWVkcwotICB0aGV5IGRlc2lyZTsgbW9zdCBzdXBwb3J0IHVwIHRvIDExNS4yS2Jwcy4K LQotICBTQ08ncyAic2lvIiBkcml2ZXIsIHdoaWNoIGlzIHVzZWQgdG8gZHJpdmUgc3RhbmRhcmQg c2VyaWFsIHBvcnRzIHdpdGgKLSAgODI1MC8xNjQ1MC8xNjU1MCBhbmQgc2ltaWxhciBVQVJUcywg d2FzIGxpbWl0ZWQgdG8gMzg0MDBicHMgaW4gb2xkZXIKLSAgcmVsZWFzZXMuICBTdXBwb3J0IGZv ciByYXRlcyB0aHJvdWdoIDExNS4yS2JwcyB3YXMgYWRkZWQgaW4gdGhlCi0gIGZvbGxvd2luZyBy ZWxlYXNlczoKLQotICAgIFNDTyBPcGVuU2VydmVyIFJlbGVhc2UgNS4wLjAgKHJlcXVpcmVzIHN1 cHBsZW1lbnQgInJzNDBiIikKLSAgICBTQ08gT3BlblNlcnZlciBSZWxlYXNlIDUuMC4yIChyZXF1 aXJlcyBzdXBwbGVtZW50ICJyczQwYSIgb3IgInJzNDBiIikKLSAgICBTQ08gT3BlblNlcnZlciBS ZWxlYXNlIDUuMC40IG9yIGxhdGVyCi0gICAgU0NPIEludGVybmV0IEZhc3RTdGFydCBSZWxlYXNl IDEuMC4wIG9yIGxhdGVyCi0KLSAgIFNDTyBzdXBwbGVtZW50cyBhcmUgYXQgWzM5NV1mdHA6Ly9m dHAuc2NvLmNvbS87IHRoZSAicnM0MCIgc2VyaWVzIGFyZQotICAgdW5kZXIgZGlyZWN0b3J5IC9T dXBwbGVtZW50cy9pbnRlcm5ldAotCi0gICBLZXJtaXQgaW5jbHVkZXMgdGhlIGhpZ2ggc2VyaWFs IHNwZWVkcyBpbiBhbGwgT1NSNSBidWlsZHMsIGJ1dCB0aGF0Ci0gICBkb2VzIG5vdCBuZWNlc3Nh cmlseSBtZWFuIHRoZXkgd29yay4gRm9yIGV4YW1wbGUsIG9uIG91ciBpbi1ob3VzZSA1LjAuNQot ICAgc3lzdGVtLCBTRVQgU1BFRUQgNTc2MDAgb3IgaGlnaGVyIHNlZW1zIHRvIHN1Y2NlZWQgKG5v IGVycm9yIG9jY3VycykKLSAgIGJ1dCB3aGVuIHdlIHJlYWQgdGhlIHNwZWVkIGJhY2sgdGhlIGRy aXZlciBzYXlzIGl0IGlzIDUwLiBTaW1pbGFybHksCi0gICA3NjgwMCBiZWNvbWVzIDc1LCBhbmQg MTE1MjAwIGJlY29tZXMgMTEwLiBUZXN0aW5nIHNob3dzIHRoZSByZXN1bHRpbmcKLSAgIHNwZWVk IGlzIGluZGVlZCB0aGUgbG93IG9uZSB3ZSByZWFkIGJhY2ssIG5vdCB0aGUgaGlnaCBvbmUgd2Ug YXNrZWQKLSAgIGZvci4gTW9yYWw6IFVzZSBzcGVlZHMgaGlnaGVyIHRoYW4gMzg0MDAgd2l0aCBj YXV0aW9uIG9uIFNDTyBPU1I1LgotCi0gICBSZXBvcnRlZGx5LCBpZiB5b3UgaGF2ZSBhIHNjcmlw dCB0aGF0IG1ha2VzIGEgVENQL0lQIFNFVCBIT1NUIChlLmcuCi0gICBUZWxuZXQpIGNvbm5lY3Rp b24gdG8gU0NPIDMuMnY0LjIgd2l0aCBUQ1AvSVAgMS4yLjEsIGFuZCB0aGVuIGRvZXMgdGhlCi0g ICBmb2xsb3dpbmc6Ci0KLSAgc2NyaXB0ICQgZXhpdAotICBoYW5ndXAKLQotICAgdGhpcyBjYXVz ZXMgYSBwc2V1ZG90ZXJtaW5hbCAocHR5KSB0byBiZSBjb25zdW1lZCBvbiB0aGUgU0NPIHN5c3Rl bTsgaWYKLSAgIHlvdSBkbyBpdCBlbm91Z2ggdGltZXMsIGl0IHdpbGwgcnVuIG91dCBvZiBwdHlz LiBBbiAiZXhpdCIgY29tbWFuZCBpcwotICAgYmVpbmcgc2VudCB0byB0aGUgU0NPIHNoZWxsLCBh bmQgYSBIQU5HVVAgY29tbWFuZCBpcyBleGVjdXRlZCBsb2NhbGx5LAotICAgc28gdGhlIGNoYW5j ZXMgYXJlIGdvb2QgdGhhdCBib3RoIHNpZGVzIGFyZSB0cnlpbmcgdG8gY2xvc2UgdGhlCi0gICBj b25uZWN0aW9uIGF0IG9uY2UsIHBlcmhhcHMgaW5kdWNpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB3 aGljaCB0aGUKLSAgIHJlbW90ZSBwdHkgaXMgbm90IHJlbGVhc2VkLiBJdCB3YXMgc3BlY3VsYXRl ZCB0aGF0IHRoaXMgd291bGQgYmUgZml4ZWQKLSAgIGJ5IGFwcGx5aW5nIFNMUyBuZXQzODJlLCBi dXQgaXQgZGlkIG5vdC4gTWVhbndoaWxlLCB0aGUgd29ya2Fyb3VuZCBpcwotICAgdG8gaW5zZXJ0 IGEgInBhdXNlIiBiZXR3ZWVuIHRoZSBTQ1JJUFQgYW5kIEhBTkdVUCBjb21tYW5kcy4gKFRoZQot ICAgc2l0dWF0aW9uIHdpdGggbGF0ZXIgU0NPIHJlbGVhc2VzIGlzIG5vdCBrbm93bi4pCi0KLSAg IFNDTyBVTklYIGFuZCBPcGVuU2VydmVyIGFsbG93IHRoZWlyIGNvbnNvbGUgYW5kL29yIHRlcm1p bmFsIGRyaXZlcnMgdG8KLSAgIGJlIGNvbmZpZ3VyZWQgdG8gdHJhbnNsYXRlIGNoYXJhY3RlciBz ZXRzIGZvciB5b3UuIERPTidUIERPIFRISVMgV0hFTgotICAgVVNJTkcgS0VSTUlUISBGaXJzdCBv ZiBhbGwsIHlvdSBkb24ndCBuZWVkIGl0IC0tIEtlcm1pdCBpdHNlbGYgYWxyZWFkeQotICAgZG9l cyB0aGlzIGZvciB5b3UuIEFuZCBzZWNvbmQsIGl0IHdpbGwgKGEpIHByb2JhYmx5IHJ1aW4gdGhl IGZvcm1hdHRpbmcKLSAgIG9mIHlvdXIgc2NyZWVucyAoZGVwZW5kaW5nIG9uIHdoaWNoIGVtdWxh dGlvbiB5b3UgYXJlIHVzaW5nKTsgYW5kIChiKQotICAgaW50ZXJmZXJlIHdpdGggYWxsIHNvcnRz IG9mIG90aGVyIHRoaW5ncyAtLSBsZWdpYmlsaXR5IG9mIG5vbi1BU0NJSQotICAgdGV4dCBvbiB0 aGUgdGVybWluYWwgc2NyZWVuLCBmaWxlIHRyYW5zZmVyLCBldGMuIFVzZToKLQotICBtYXBjaGFu IC1uCi0KLSAgIHRvIHR1cm4gb2ZmIHRoaXMgZmVhdHVyZS4KLQotICAgTm90ZSB0aGF0IHRoZXJl IGlzIGEgbXVsdGl0dWRlIG9mIFNDTyBlbnRyaWVzIGluIHRoZSBtYWtlZmlsZSwgbWFueSBvZgot ICAgdGhlbSBleGhpYml0aW5nIGFuIHVudXN1YWxseSBsYXJnZSBudW1iZXIgb2YgY29tcGlsZXIg b3B0aW9ucy4gU29tZQotICAgcGVvcGxlIGFjdHVhbGx5IHVuZGVyc3RhbmQgYWxsIG9mIHRoaXMu IFJlcG9ydGVkbHksIHRoaW5ncyBhcmUgc2V0dGxpbmcKLSAgIGRvd24gd2l0aCBTQ08gT3BlblNl cnZlciA1LnggYW5kIFVuaXh3YXJlIDcgKGFuZCBPcGVuIFVOSVggOCBhbmQgd2hvCi0gICBrbm93 cyB3aGF0IHRoZSBuZXh0IG9uZSB3aWxsIGJlIC0tIExpbnV4IHByb2JhYmx5KSAtLSB0aGUgU0NP IFVESwotICAgY29tcGlsZXIgaXMgc2FpZCB0byBnZW5lcmF0ZSBiaW5hcmllcyB0aGF0IHdpbGwg cnVuIG9uIGVpdGhlciBwbGF0Zm9ybSwKLSAgIGJ5IGRlZmF1bHQsIGF1dG9tYXRpY2FsbHkuIFdo ZW4gdXNpbmcgZ2NjIG9yIGVnY3MsIG9uIHRoZSBvdGhlciBoYW5kLAotICAgZGlmZmVyZW5jZXMg cGVyc2lzdCwgcGx1cyBpc3N1ZXMgcmVnYXJkaW5nIHRoZSB0eXBlIG9mIGJpbmFyeSB0aGF0IGlz Ci0gICBnZW5lcmF0ZWQgKENPRkYsIEVMRiwgZXRjKSwgYW5kIHdoZXJlIGFuZCBob3cgaXQgY2Fu IHJ1bi4gQWxsIG9mIHRoaXMKLSAgIGNvdWxkIHN0YW5kIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBi eSBTQ08gZXhwZXJ0cy4KLQotMy42LjMuIFVuaXh3YXJlCi0KLSAgIFsgWzM5Nl1Ub3AgXSBbIFsz OTddQ29udGVudHMgXSBbIFszOThdU2VjdGlvbiBDb250ZW50cyBdIFsgWzM5OV1OZXh0IF0KLSAg IFsgWzQwMF1QcmV2aW91cyBdCi0KLSAgIFVuaXh3YXJlIGNoYW5nZWQgaGFuZHMgc2V2ZXJhbCB0 aW1lcyBiZWZvcmUgbGFuZGluZyBhdCBTQ08sIGFuZCBzbyBoYXMKLSAgIGl0cyBbNDAxXW93biBz ZWN0aW9uIGluIHRoaXMgZG9jdW1lbnQuIChCcmllZmx5OiBBVCZUIFVOSVggU3lzdGVtcwotICAg TGFib3JhdG9yaWVzIHNvbGQgdGhlIHJpZ2h0cyB0byB0aGUgVU5JWCBuYW1lIGFuZCB0byBTeXN0 ZW0gViBSNCAob3IKLSAgIFI1PykgdG8gTm92ZWxsOyBsYXRlciBOb3ZlbGwgc3B1biBpdHMgVU5J WCBkaXZpc2lvbiBvZmYgaW50byBhIG5ldwotICAgY29tcGFueSBjYWxsZWQgVW5pdmVsLCB3aGlj aCBldmVudHVhbGx5IHdhcyBib3VnaHQgYnkgU0NPLCB3aGljaCBsYXRlcgotICAgd2FzIGJvdWdo dCBieSBDYWxkZXJhLCB3aGljaCBsYXRlciBzb3J0IG9mIHNlbWktc3B1bi1vZmYgU0NPLi4uKQot Ci0zLjYuNC4gT3BlbiBVTklYIDgKLQotICAgWyBbNDAyXVRvcCBdIFsgWzQwM11Db250ZW50cyBd IFsgWzQwNF1TZWN0aW9uIENvbnRlbnRzIF0gWwotICAgWzQwNV1QcmV2aW91cyBdCi0KLSAgIFND TyB3YXMgYm91Z2h0IGJ5IENhbGRlcmEgaW4gMjAwMCBvciAyMDAxIGFuZCBldm9sdmVkIFVuaXh3 YXJlIDcuMSBpbnRvCi0gICBDYWxkZXJhIE9wZW4gVU5JWCA4LjAwLiBJdCdzIGp1c3QgbGlrZSBV bml4d2FyZSA3LjEgYXMgZmFyIGFzIEtlcm1pdCBpcwotICAgY29uY2VybmVkICh0aGUgVW5peHdh cmUgNy4xIG1ha2VmaWxlIHRhcmdldCB3b3JrcyBmb3IgT3BlbiBVTklYIDguMDAsCi0gICBhbmQg aW4gZmFjdCBhIFVuaXh3YXJlIDcuMSBLZXJtaXQgYmluYXJ5IGJ1aWx0IG9uIFVuaXh3YXJlIDcu MSBydW5zCi0gICB1bmRlciBPVTg7IGEgc2VwYXJhdGUgT1U4IG1ha2VmaWxlIHRhcmdldCBleGlz dHMgc2ltcGx5IHRvIGdlbmVyYXRlIGFuCi0gICBhcHByb3ByaWF0ZSBwcm9ncmFtIHN0YXJ0dXAg aGVyYWxkKS4gT3BlbiBVbml4IGlzIG5vdyBkZWZ1bmN0OwotICAgc3Vic2VxdWVudCByZWxlYXNl cyBhcmUgY2FsbGVkIFVuaXhXYXJlIGFnYWluIChlLmcuIFVuaXhXYXJlIDcuMS4zKS4KLQotMy43 LiBDLUtFUk1JVCBBTkQgU09MQVJJUwotCi0gICBbIFs0MDZdVG9wIF0gWyBbNDA3XUNvbnRlbnRz IF0gWyBbNDA4XVNlY3Rpb24gQ29udGVudHMgXSBbIFs0MDldTmV4dCBdCi0gICBbIFs0MTBdUHJl dmlvdXMgXQotCi0gICBTRUNUSU9OIENPTlRFTlRTCi0KLTMuNy4xLiBbNDExXVNlcmlhbCBQb3J0 IENvbmZpZ3VyYXRpb24KLTMuNy4yLiBbNDEyXVNlcmlhbCBQb3J0IFByb2JsZW1zCi0zLjcuMy4g WzQxM11TdW5MaW5rIFguMjUKLTMuNy40LiBbNDE0XVN1biBXb3Jrc3RhdGlvbiBLZXlib2FyZCBN YXBwaW5nCi0zLjcuNS4gWzQxNV1Tb2xhcmlzIDIuNCBhbmQgRWFybGllcgotCi0gICBSRUZFUkVO Q0VTCi0KLSAgICAgKiBUaGUgWzQxNl1jb21wLnVuaXguc29sYXJpcyBuZXdzZ3JvdXAKLSAgICAg KiBbNDE3XWh0dHA6Ly9hY2Nlc3MxLnN1bi5jb20vCi0gICAgICogWzQxOF1odHRwOi8vZG9jcy5z dW4uY29tLwotICAgICAqIFs0MTldaHR0cDovL3d3dy5zdW5oZWxwLmNvbS8KLSAgICAgKiBbNDIw XWh0dHA6Ly93d3cud2lucy51dmEubmwvcHViL3NvbGFyaXMvc29sYXJpczIvCi0gICAgICogWzQy MV1odHRwOi8vd3d3LndpbnMudXZhLm5sL2NnaS1iaW4vc2ZhcS5jZ2kKLSAgICAgKiBbNDIyXWZ0 cDovL2Z0cC53aW5zLnV2YS5ubC9wdWIvc29sYXJpcwotICAgICAqIFs0MjNdaHR0cDovL3d3dy5z Y2llbmNlLnV2YS5ubC9wdWIvc29sYXJpcy9zb2xhcmlzMi5odG1sCi0KLSAgIEFuZCBhYm91dCBz ZXJpYWwgY29tbXVuaWNhdGlvbnMgaW4gcGFydGljdWxhciwgc2VlICJDZWxlc3RlJ3MgVHV0b3Jp YWwKLSAgIG9uIFNvbGFyaXMgMi54IE1vZGVtcyBhbmQgVGVybWluYWxzIjoKLQotICBbNDI0XWh0 dHA6Ly93d3cuc3Rva2VseS5jb20vCi0KLSAgIEluIHBhcnRpY3VsYXI6Ci0KLSAgWzQyNV1odHRw Oi8vd3d3LnN0b2tlbHkuY29tL3VuaXguc3lzYWRtLnJlc291cmNlcy9mYXFzLnN1bi5odG1sCi0K LSAgIEZvciBQQy1iYXNlZCBTb2xhcmlzLCBhbHNvIHNlZSBnZW5lcmFsIGNvbW1lbnRzIG9uIFBD LWJhc2VkIFVuaXhlcyBpbgotICAgWzQyNl1TZWN0aW9uIDMuMC4gRG9uJ3QgZXhwZWN0IFNvbGFy aXMgb3IgYW55IG90aGVyIGtpbmQgb2YgVW5peCB0bwotICAgd29yayByaWdodCBvbiBhIFBDIHVu dGlsIHlvdSByZXNvbHZlIGFsbCBpbnRlcnJ1cHQgY29uZmxpY3RzLiBEb24ndAotICAgZXhwZWN0 IHRvIGJlIGFibGUgdG8gdXNlIENPTTMgb3IgQ09NNCAob3IgZXZlbiBDT00yKSB1bnRpbCB5b3Ug aGF2ZQotICAgY29uZmlndXJlZCB0aGVpciBhZGRyZXNzZXMgYW5kIGludGVycnVwdHMuCi0KLTMu Ny4xLiBTZXJpYWwgUG9ydCBDb25maWd1cmF0aW9uCi0KLSAgIFsgWzQyN11Ub3AgXSBbIFs0Mjhd Q29udGVudHMgXSBbIFs0MjldU2VjdGlvbiBDb250ZW50cyBdIFsgWzQzMF1TZWN0aW9uCi0gICBD b250ZW50cyBdIFsgWzQzMV1OZXh0IF0KLQotICAgWW91ciBzZXJpYWwgcG9ydCBjYW4ndCBiZSB1 c2VkIC0tIG9yIGF0IGxlYXN0IHdvbid0IHdvcmsgcmlnaHQgLS0gdW50aWwKLSAgIGl0IGlzIGVu YWJsZWQgaW4gU29sYXJpcy4gRm9yIGV4YW1wbGUsIHlvdSBnZXQgYSBtZXNzYWdlIGxpa2UgIlNF UklBTDoKLSAgIE9wZXJhdGlvbiB3b3VsZCBibG9jayIgd2hlbiBhdHRlbXB0aW5nIHRvIGRpYWwu IFRoaXMgcHJvYmFibHkgaW5kaWNhdGVzCi0gICB0aGF0IHRoZSBzZXJpYWwgcG9ydCBoYXMgbm90 IGJlZW4gZW5hYmxlZCBmb3IgdXNlIHdpdGggbW9kZW1zLiBZb3UnbGwKLSAgIG5lZWQgdG8gZm9s bG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBzeXN0ZW0gc2V0dXAgb3IgbWFuYWdlbWVudAot ICAgbWFudWFsLCBzdWNoIGFzIChlLmcuKSB0aGUgRGVza3RvcCBTUEFSQyBTdW4gU3lzdGVtICYg TmV0d29yayBNYW5hZ2VyJ3MKLSAgIEd1aWRlLCB3aGljaCBzaG91bGQgY29udGFpbiBhIHNlY3Rp b24gIlNldHRpbmcgdXAgTW9kZW0gU29mdHdhcmUiOyByZWFkCi0gICBpdCBhbmQgZm9sbG93IHRo ZSBpbnN0cnVjdGlvbnMuIFRoZXNlIG1pZ2h0IChvciBtaWdodCBub3QpIGluY2x1ZGUKLSAgIHJ1 bm5pbmcgYSBwcm9ncmFtIGNhbGxlZCAiZWVwcm9tIiwgZWRpdGluZyBzb21lIHN5c3RlbSBjb25m aWd1cmF0aW9uCi0gICBmaWxlIChzdWNoIGFzLCBmb3IgZXhhbXBsZToKLQotICAvcGxhdGZvcm0v aTg2cGMva2VybmVsL2Rydi9hc3kuY29uZgotCi0gICBhbmQgdGhlbiBkb2luZyBhIGNvbmZpZ3Vy YXRpb24gcmVib290LCBvciBydW5uaW5nIHNvbWUgb3RoZXIgcHJvZ3JhbXMKLSAgIGxpa2UgZHJ2 Y29uZmlnIGFuZCBkZXZsaW5rcy4gIm1hbiBlZXByb20iIGZvciBkZXRhaWxzLgotCi0gICBBbHNv LCBvbiBjZXJ0YWluIFN1biBtb2RlbHMgbGlrZSBJUEMsIHRoZSBzZXJpYWwgcG9ydCBoYXJkd2Fy ZSBtaWdodAotICAgbmVlZCB0byBoYXZlIGEganVtcGVyIGNoYW5nZWQgdG8gbWFrZSBpdCBhbiBS Uy0yMzIgcG9ydCByYXRoZXIgdGhhbgotICAgUlMtNDIzLgotCi0gICBlZXByb20gYXBwbGllcyBv bmx5IHRvIHJlYWwgc2VyaWFsIHBvcnRzLCBub3QgdG8gIlNwaWZmIiBkZXZpY2VzCi0gICAoc2Vy aWFsIHBvcnQgZXhwYW5kZXIpLCBpbiB3aGljaCBjYXNlIHNldHVwIHdpdGggU29sYXJpcycgYWRt aW50b29sIGlzCi0gICByZXF1aXJlZC4KLQotICAgQW5vdGhlciBjb21tYW5kIHlvdSBtaWdodCBu ZWVkIHRvIHVzZSBpcyBwbWFkbSwgZS5nLjoKLQotICBwbWFkbSAtZCAtcCB6c21vbiAtcyB0dHkz Ci0gIHBtYWRtIC1lIC1wIHpzbW9uIC1zIHR0eTMKLQotICAgWW91IGNhbiB1c2UgdGhlIGZvbGxv d2luZyBjb21tYW5kIHRvIGNoZWNrIGlmIGEgcHJvY2VzcyBoYXMgdGhlIGRldmljZQotICAgb3Bl bjoKLQotICBmdXNlciAtZiAvZGV2L3Rlcm0vMwotCi0gICBJbiBzb21lIGNhc2VzLCBob3dldmVy IChhY2NvcmRpbmcgdG8gU3VuIHN1cHBvcnQsIE1heSAyMDAxKSAiSXQgaXMKLSAgIHN0aWxsIHBv c3NpYmxlIHRoYXQgYSB6b21iaWUgcHJvY2VzcyBoYXMgaG9sZCBvZiB0aGUgcG9ydCBFVkVOIElG IHRoZXJlCi0gICBpcyBubyBsb2NrIGZpbGUgYW5kIHRoZSBmdXNlciBjb21tYW5kIGNvbWVzIHVw IGVtcHR5LiBJbiB0aGF0IGNhc2UsIHRoZQotICAgb25seSB3YXkgdG8gcmVzb2x2ZSB0aGUgcHJv YmxlbSBpcyBieSByZWJvb3RpbmcuIgotCi0gICBJZiB5b3UgY2FuJ3QgZXN0YWJsaXNoIGNvbW11 bmljYXRpb24gdGhyb3VnaCBhIHNlcmlhbCBwb3J0IHRvIGEgZGV2aWNlCi0gICB0aGF0IGlzIG5v dCBhc3NlcnRpbmcgQ0QgKENhcnJpZXIgRGV0ZWN0KSwgdHJ5IHNldHRpbmcgdGhlIGVudmlyb25t ZW50Ci0gICB2YXJpYWJsZSAidHR5YS1pZ25vcmUtY2QiIHRvICJ0cnVlIiAocmVwbGFjZSAidHR5 YSIgd2l0aCB0aGUgcG9ydAotICAgbmFtZSkuCi0KLTMuNy4yLiBTZXJpYWwgUG9ydCBQcm9ibGVt cwotCi0gICBbIFs0MzJdVG9wIF0gWyBbNDMzXUNvbnRlbnRzIF0gWyBbNDM0XVNlY3Rpb24gQ29u dGVudHMgXSBbIFs0MzVdTmV4dCBdCi0gICBbIFs0MzZdUHJldmlvdXMgXQotCi0gICBDdXJyZW50 IGFkdmljZSBmcm9tIFN1biBpcyB0byBhbHdheXMgdGhlIC9kZXYvY3VhL3ggZGV2aWNlcyBmb3Ig ZGlhbGluZwotICAgb3V0LCByYXRoZXIgdGhhbiB0aGUgL2Rldi90ZXJtL3guIE5ldmVydGhlbGVz cywgaWYgeW91IGhhdmUgdHJvdWJsZQotICAgZGlhbGluZyBvdXQgd2l0aCBvbmUsIHRyeSB0aGUg b3RoZXIuCi0KLSAgIFJlcG9ydGVkbHksIGlmIHlvdSBzdGFydCBDLUtlcm1pdCBhbmQgInNldCBs aW5lIiB0byBhIHBvcnQgdGhhdCBoYXMgYQotICAgbW9kZW0gY29ubmVjdGVkIHRvIGl0IHRoYXQg aXMgbm90IHR1cm5lZCBvbiwgYW5kIHRoZW4gInNldCBmbG93Ci0gICBydHMvY3RzIiwgdGhlcmUg bWlnaHQgYmUgc29tZSAodW5zcGVjaWZpZWQpIGRpZmZpY3VsdGllcyBjbG9zaW5nIHRoZQotICAg ZGV2aWNlIGJlY2F1c2UgdGhlIENUUyBzaWduYWwgaXMgbm90IGNvbWluZyBpbiBmcm9tIHRoZSBt b2RlbS4KLQotMy43LjMuIFN1bkxpbmsgWC4yNQotCi0gICBbIFs0MzddVG9wIF0gWyBbNDM4XUNv bnRlbnRzIF0gWyBbNDM5XVNlY3Rpb24gQ29udGVudHMgXSBbIFs0NDBdTmV4dCBdCi0gICBbIFs0 NDFdUHJldmlvdXMgXQotCi0gICBUaGUgYnVpbHQtaW4gU3VuTGluayBYLjI1IHN1cHBvcnQgZm9y IFNvbGFyaXMgMi4zLzIuNC4vMjUgYW5kIFN1bkxpbmsKLSAgIDguMDEgb3IgOS4wMCB3b3JrcyBP SyBwcm92aWRlZCB0aGUgWC4yNSBzeXN0ZW0gaGFzIGJlZW4gaW5zdGFsbGVkIGFuZAotICAgaW5p dGlhbGl6ZWQgcHJvcGVybHkuIFBhY2tldCBzaXplcyBtaWdodCBuZWVkIHRvIGJlIHJlZHVjZWQg dG8gMjU2LAotICAgbWF5YmUgZXZlbiBsZXNzLCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRp b24gb2YgdGhlIFguMjUKLSAgIGluc3RhbGxhdGlvbi4gT24gb25lIGNvbm5lY3Rpb24gd2hlcmUg Qy1LZXJtaXQgNi4wIHdhcyB0ZXN0ZWQsIHZlcnkKLSAgIGxhcmdlIHBhY2tldHMgYW5kIHdpbmRv dyBzaXplcyBjb3VsZCBiZSB1c2VkIGluIG9uZSBkaXJlY3Rpb24sIGJ1dCBvbmx5Ci0gICB2ZXJ5 IHNtYWxsIG9uZXMgd291bGQgd29yayBpbiB0aGUgb3RoZXIuCi0KLSAgIEluIGFueSBjYXNlLCBh Y2NvcmRpbmcgdG8gU3VuLCBDLUtlcm1pdCdzIFguMjUgc3VwcG9ydCBpcyBzdXBlcmZsdW91cwot ICAgd2l0aCBTdW5MaW5rIDgueCAvIFNvbGFyaXMgMi4zLiBRdW90aW5nIGFuIGFub255bW91cyBT dW4gZW5naW5lZXI6Ci0KLSAgICAgLi4uIHRoZXJlIGlzIG5vdyBubyBuZWVkIHRvIGluY2x1ZGUg YW55IFguMjUgY29kZSB3aXRoaW4ga2VybWl0LiBBcwotICAgICBvZiBYLjI1IDguMC4xIHdlIHN1 cHBvcnQgdGhlIHVzZSBvZiBrZXJtaXQsIHV1Y3AgYW5kIHNpbWlsYXIKLSAgICAgcHJvdG9jb2xz IG92ZXIgZGV2aWNlcyBvZiB0eXBlIC9kZXYveHR5LiBUaGlzIGZhY2lsaXR5IHdhcyB0aGVyZSBp bgotICAgICA4LjAsIGFuZCBzaG91bGQgYWxzbyB3b3JrIG9uIHRoZSA4LjAgcmVsZWFzZSBpZiBw YXRjaCAxMDE1MjQgaXMKLSAgICAgYXBwbGllZCwgYnV0IEknbSBub3QgMTAwJSBzdXJlIGl0IHdp bGwgd29yayBpbiBhbGwgY2FzZXMsIHdoaWNoIGlzCi0gICAgIHdoeSB3ZSBvbmx5IGNsYWltIHN1 cHBvcnQgZnJvbSA4LjAuMSBvbndhcmRzLgotCi0gICAgIFdoZW4gY29uZmlndXJpbmcgWC4yNSwg b24gdGhlICJBZHZhbmNlZCBDb25maWd1cmF0aW9uLT5QYXJhbWV0ZXJzIgotICAgICBzY3JlZW4g b2YgdGhlIHgyNXRvb2wgeW91IGNhbiBzZWxlY3QgYSBudW1iZXIgb2YgWFRZIGRldmljZXMuIElm IHlvdQotICAgICBzZXQgdGhpcyB0byBiZSA+IDEsIHByZXNzIEFwcGx5LCBhbmQgcmVib290LCB5 b3Ugd2lsbCBnZXQgYSBudW1iZXIKLSAgICAgb2YgL2Rldi94dHkgZW50cmllcyBjcmVhdGVkLgot Ci0gICAgIElnbm9yZSAvZGV2L3h0eTAsIGl0IGlzIGEgc3BlY2lhbCBjYXNlLiBBbGwgdGhlIG90 aGVycyBjYW4gYmUgdXNlZAotICAgICBleGFjdGx5IGFzIGlmIHRoZXkgd2VyZSBhIHNlcmlhbCBs aW5lIChlLmcuIC9kZXYvdHR5KSBjb25uZWN0ZWQgdG8gYQotICAgICBtb2RlbSwgZXhjZXB0IHRo YXQgaW5zdGVhZCBvZiB1c2luZyBIYXllcy1zdHlsZSBjb21tYW5kcywgeW91IHVzZQotICAgICBQ QUQgY29tbWFuZHMuCi0KLSAgICAgRnJvbSBrZXJtaXQgeW91IGNhbiBkbyBhICdzZXQgbGluZScg Y29tbWFuZCB0bywgc2F5LCAvZGV2L3h0eTEsIHRoZW4KLSAgICAgc2V0IHlvdXIgZGlhbGluZyBj b21tYW5kIHRvIGJlICJDQUxMIDEyMzQ1Njc4IiwgZXRjLiBBbGwgdGhlIHVzdWFsCi0gICAgIFBB RCBjb21tYW5kcyB3aWxsIHdvcmsgKFNFVCwgUEFSLCBldGMpLgotCi0gICAgIEkga25vdyBvZiBv bmUgY3VzdG9tZXIgaW4gQXVzdHJhbGlhIHdobyBpcyBzdWNjZXNzZnVsbHkgdXNpbmcgdGhpcywK LSAgICAgd2l0aCBrZXJtaXQgc2NyaXB0cywgdG8gbWFuYWdlIHNvbWUgWC4yNS1jb25uZWN0ZWQg c3dpdGNoZXMuIEhlIHVzZWQKLSAgICAgc3RhbmRhcmQga2VybWl0LCBjb21waWxlZCBmb3IgU29s YXJpcyAyLCB3aXRoIFguMjUgOC4wIHh0eSBkZXZpY2VzLgotCi0zLjcuNC4gU3VuIFdvcmtzdGF0 aW9uIEtleWJvYXJkIE1hcHBpbmcKLQotICAgWyBbNDQyXVRvcCBdIFsgWzQ0M11Db250ZW50cyBd IFsgWzQ0NF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbNDQ1XU5leHQgXQotICAgWyBbNDQ2XVByZXZp b3VzIF0KLQotICAgSGludHMgZm9yIHVzaW5nIGEgU3VuIHdvcmtzdGF0aW9uIGtleWJvYXJkIGZv ciBWVCBlbXVsYXRpb24gd2hlbgotICAgYWNjZXNzaW5nIFZNUywgZnJvbSB0aGUgWzQ0N11jb21w Lm9zLnZtcyBuZXdzZ3JvdXA6Ci0KLSAgICAgRnJvbTogSmVycnkgTGVpY2h0ZXIgPGxlaWNodGVy QHNtYXJ0cy5jb20+Ci0gICAgIE5ld3Nncm91cHM6IGNvbXAub3Mudm1zCi0gICAgIFN1YmplY3Q6 IFJlOiBWVDEwMCBrZXlib2FyZCBtYXBwaW5nIHRvIFN1biBYIHNlcnZlcgotICAgICBEYXRlOiBN b24sIDE5IEF1ZyAxOTk2IDEyOjQ0OjIxIC0wNDAwCi0KLSAgICAgPiBJIGFtIHN0dWNrIHJpZ2h0 IG5vdyB1c2luZyBhIFN1biBrZXlib2FyZCAodHlwZSA1KSBvbiBzeXN0ZW1zCi0gICAgIHJ1bm5p bmcgU3VuT1MKLSAgICAgPiBhbmQgU29sYXJpcy4gSSB3b3VsZCBsaWtlIHRvIHVzZSBFVkUgb24g YW4gT3BlblZNUyBib3ggd2l0aAotICAgICBkaXNwbGF5IGJhY2sgdG8KLSAgICAgPiB0aGUgU3Vu LiBEb2VzIGFueW9uZSBrbm93IG9mIGEga2V5Ym9hcmQgbWFwcGluZyAob3Igc29tZSBvdGhlcgot ICAgICBwcm9jZWR1cmUpCi0gICAgID4gd2hpY2ggd2lsbCBhbGxvdyB0aGUgU3VuIGtleWJvYXJk IHRvIGFwcHJveGltYXRlIGEgVlQxMDAvVlQyMjA/Ci0KLSAgICAgWW91IGNhbid0IGdldCBpdCBl eGFjdGx5IC0gYmVjYXVzZSB0aGUga2V5cGFkIGhhcyBvbmUgZmV3ZXIga2V5IC0KLSAgICAgYnV0 IHlvdSBjYW4gY29tZSBwcmV0dHkgY2xvc2UuIEhlcmUncyBhIHNldCBvZiBrZXlkZWZzIEkgdXNl OgotCi0gIGtleWNvZGUgMTAxPUtQXzAKLSAga2V5Y29kZSAxMTk9S1BfMQotICBrZXljb2RlIDEy MD1LUF8yCi0gIGtleWNvZGUgMTIxPUtQXzMKLSAga2V5Y29kZSA5OD1LUF80Ci0gIGtleWNvZGUg OTk9S1BfNQotICBrZXljb2RlIDEwMD1LUF82Ci0gIGtleWNvZGUgNzU9S1BfNwotICBrZXljb2Rl IDc2PUtQXzgKLSAga2V5Y29kZSA3Nz1LUF85Ci0gIGtleWNvZGUgNTI9S1BfRjEKLSAga2V5Y29k ZSA1Mz1LUF9GMgotICBrZXljb2RlIDU0PUtQX0YzCi0gIGtleWNvZGUgNTc9S1BfRGVjaW1hbAot ICBrZXljb2RlIDI4PUxlZnQKLSAga2V5Y29kZSAyOT1SaWdodAotICBrZXljb2RlIDMwPUtQX1Nl cGFyYXRvcgotICBrZXljb2RlIDEwNT1LUF9GNAotICBrZXljb2RlIDc4PUtQX1N1YnRyYWN0Ci0g IGtleWNvZGUgOD1MZWZ0Ci0gIGtleWNvZGUgMTA9UmlnaHQKLSAga2V5Y29kZSAzMj1VcAotICBr ZXljb2RlIDMzPURvd24KLSAga2V5Y29kZSA5Nz1LUF9FbnRlcgotCi0gICAgIFB1dCB0aGlzIGlu IGEgZmlsZSAtIEkgdXNlICJrZXlkZWZzIiBpbiBteSBob21lIGRpcmVjdG9yeSBhbmQgZmVlZAot ICAgICBpdCBpbnRvIHhtb2RtYXA6Ci0KLSAgeG1vZG1hcCAtIDwkSE9NRS9rZXlkZWZzCi0KLSAg ICAgVGhpcyB0YWtlcyBjYXJlIG9mIHRoZSBhcnJvdyBrZXlzIGFuZCB0aGUgImNhbGN1bGF0b3Ii IGtleSBjbHVzdGVyLgotICAgICBUaGUgIisiIGtleSB3aWxsIHBsYXkgdGhlIHJvbGUgb2YgdGhl IERFQyAiLCIga2V5LiBUaGUgU3VuICItIiBrZXkKLSAgICAgd2lsbCBiZSBsaWtlIHRoZSBERUMg Ii0iIGtleSwgdGhvdWdoIGl0J3MgaW4gYSBwaHlzaWNhbGx5IGRpZmZlcmVudAotICAgICBwb3Np dGlvbiAtIHdoZXJlIHRoZSBERUMgUEY0IGtleSBpcy4gVGhlIFBGNCBrZXkgaXMgLi4uIGRhbW4s IEknbQotICAgICBub3Qgc3VyZSB3aGVyZSAia2V5IDEwNSIgaXMuIEkgKnRoaW5rKiBpdCBtYXkg YmUgb24gdGhlIGxlZnRtb3N0IGtleQotICAgICBvZiB0aGUgZ3JvdXAgb2YgZm91ciBqdXN0IGFi b3ZlIHRoZSAiY2FsY3VsYXRvciIga2V5IGNsdXN0ZXIuCi0KLSAgICAgSSBhbHNvIGV4ZWN1dGUg dGhlIGZvbGxvd2luZyAodGhpcyBpcyBhbGwgaW4gbXkgeGluaXRyYyBmaWxlKToKLQotICB4bW9k bWFwIC1lICdrZXlzeW0gS1BfRGVjaW1hbCA9IEtQX0RlY2ltYWwnCi0gIHhtb2RtYXAgLWUgJ2tl eXN5bSBCYWNrU3BhY2UgPSBEZWxldGUgQmFja1NwYWNlJyBcCi0gICAgICAgICAgLWUgJ2tleXN5 bSBEZWxldGUgPSBCYWNrU3BhY2UgRGVsZXRlJwotICB4bW9kbWFwIC1lICdrZXlzeW0gS1BfRGVj aW1hbCA9IERlbGV0ZSBEZWxldGUgS1BfRGVjaW1hbCcKLSAgeG1vZG1hcCAtZSAnYWRkIG1vZDEg PSBNZXRhX1InCi0gIHhtb2RtYXAgLWUgJ2FkZCBtb2QxID0gTWV0YV9MJwotCi0gICAgIEJld2Fy ZSBvZiBvbmUgdGhpbmcgYWJvdXQgeG1vZG1hcDogS2V5bWFwIGNoYW5nZXMgYXJlIGFwcGxpZWQg dG8gdGhlCi0gICAgICp3aG9sZSB3b3Jrc3RhdGlvbiosIG5vdCBqdXN0IHRvIGluZGl2aWR1YWwg d2luZG93cy4gVGhlcmUgaXMsIGluCi0gICAgIGZhY3QsIG5vIHdheSBJIGtub3cgb2YgdG8gYXBw bHkgdGhlbSB0byBpbmRpdmlkdWFsIHdpbmRvd3MuIFRoZXNlCi0gICAgIGRlZmluaXRpb25zICpt YXkqIGNvbmZ1c2Ugc29tZSBVbml4IHByb2dyYW1zIChhbmQvb3Igc29tZSBVbml4Ci0gICAgIHVz ZXJzKS4KLQotICAgICBJZiB5b3UncmUgdXNpbmcgTW90aWYsIHlvdSBtYXkgYWxzbyBuZWVkIHRv IGFwcGx5IGJpbmRpbmdzIGF0IHRoZQotICAgICBNb3RpZiBsZXZlbC4gSWYganVzdCB1c2luZyB4 bW9kbWFwIGRvZXNuJ3Qgd29yaywgSSBjYW4gdHJ5IGFuZCBkaWcKLSAgICAgdGhhdCBzdHVmZiB1 cCBmb3IgeW91LgotCi0zLjcuNS4gU29sYXJpcyBQUFAgQ29ubmVjdGlvbnMKLQotICAgWyBbNDQ4 XVRvcCBdIFsgWzQ0OV1Db250ZW50cyBdIFsgWzQ1MF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbNDUx XU5leHQgXQotICAgWyBbNDUyXVByZXZpb3VzIF0KLQotICAgVGhlIGZvbGxvd2luZyBpcyBhIHJl cG9ydCBmcm9tIGEgdXNlciBvZiBDLUtlcm1pdCA4LjAgb24gU29sYXJpcyA4IGFuZAotICAgOSwg d2hvIGhhZCBjb21wbGFpbmVkIHRoYXQgd2hpbGUgS2VybWl0IGZpbGUgdHJhbnNmZXJzIHdvcmtl ZCBwZXJmZWN0bHkKLSAgIG9uIGRpcmVjdCAobm9uLVBQUCkgZGlhbG91dCBjb25uZWN0aW9ucywg dGhleSBmYWlsZWQgbWlzZXJhYmx5IG9uIFBQUAotICAgY29ubmVjdGlvbnMuIFdlIHN1Z2dlc3Rl ZCB0aGF0IHRoZSBQUFAgZGlhbGVyIHByb2JhYmx5IHdhcyBub3Qgc2V0dGluZwotICAgdGhlIHBv cnQgYW5kL29yIG1vZGVtIHVwIGluIHRoZSBzYW1lIHdheSB0aGF0IEtlcm1pdCBkaWQ6Ci0KLSAg ICAgSSB3YW50IHRvIGdldCBiYWNrIG9uIHRoaXMgYW5kIHRlbGwgeW91IHdoYXQgdGhlIHJlc29s dXRpb24gd2FzLiBZb3UKLSAgICAgcG9pbnRlZCBtZSBpbiB0aGUgZGlyZWN0aW9uIG9mIGZsb3cg Y29udHJvbCwgd2hpY2ggdHVybmVkIG91dCB0byBiZQotICAgICB0aGUga2V5LgotCi0gICAgIFNv bWUgZGlzY3Vzc2lvbiBvbiB0aGUgY29tcC51bml4LnNvbGFyaXMgbmV3c2dyb3VwIGxlZCB0byBz b21lCi0gICAgIGNvbW1lbnRzIGZyb20gR3JlZyBBbmRyZXdzIGFib3V0IHRoZSBuZWVkIHRvIHVz ZSB0aGUgdXVjcCBkcml2ZXIgdG8KLSAgICAgdGFsayB0byB0aGUgbW9kZW0gKC9kZXYvY3VhL2Ep LiBJIGhhZCB0byByZW1pbmQgR3JlZyB0aGF0IG5vIG1hdHRlcgotICAgICB3aGF0IHRoZSBtYW5w YWdlcyBmb3IgdGhlIHpzIGFuZCBzZSBkcml2ZXJzIHNheSwgdGhlIHBwcCB0aGF0IFN1bgotICAg ICByZWxlYXNlZCB3aXRoIFNvbGFyaXMgOCA3LzAxLCBhbmQgaGFzIGluIFNvbGFyaXMgOSwgaXMg YSBzZXR1aWQgcm9vdAotICAgICBwcm9ncmFtLCBhbmQgc2ltcGx5IHRyeWluZyB0byBtYWtlIGEg cHBwZCBjYWxsIGZyb20gdXNlciBzcGFjZQotICAgICBzcGVjaWZ5aW5nIC9kZXYvY3VhL2Egd291 bGQgZmFpbCBiZWNhdXNlIG9mIHBlcm1pc3Npb25zLiBHcmVnCi0gICAgIGZpbmFsbHkgcHV0IHRo ZSBxdWVzdGlvbiB0byB0aGUgcHBwIHBlb3BsZSwgd2hvIGNhbWUgYmFjayB3aXRoCi0gICAgIGlu Zm9ybWF0aW9uIHRoYXQgaXMgbm90IGxhaWQgb3V0IGFueXdoZXJlIGluIHRoZSBkb2NzIGF2YWls YWJsZSBmb3IKLSAgICAgU29sYXJpcyB1c2Vycy4gTmFtZWx5LCBwdXQgL2Rldi9jdWEvYSBpbiBv bmUgb2YgdGhlIHByaXZpbGVnZWQKLSAgICAgb3B0aW9ucyBmaWxlcyBpbiB0aGUgL2V0Yy9wcHAg ZGlyZWN0b3J5LiBUaGF0LCBwbHVzIHJlc2V0dGluZyB0aGUKLSAgICAgT0JQIHR0eWEtaWdub3Jl LWNkIGZsYWcgKHRoaXMgaXMgU3VuIGhhcmR3YXJlKSB0byBmYWxzZSwgc2VlbXMgdG8KLSAgICAg aGF2ZSBzb2x2ZWQgdGhlIHByb2JsZW1zLgotCi0gICAgIFdoaWxlIEkgbm90ZSB0aGF0IEkgaGFk IGluc3RhbGxlZCBLZXJtaXQgc3VpZCB0byB1dWNwIHRvIHVzZQotICAgICAvZGV2L2N1YS9hIG9u IHRoaXMgcGFydGljdWxhciBib3gsIGl0IHNlZW1zIHRvIHJ1biBmaW5lIHRocm91Z2gKLSAgICAg L2Rldi90ZXJtL2EuIE5vdCBzbyB3aXRoIHBwcGQuCi0KLSAgICAgV2l0aCB0aGlzIGNoYW5nZSBp biBwbGFjZSwgSSBzZWVtIHRvIGJlIGFibGUgdG8gdXBsb2FkIGFuZCBkb3dubG9hZAotICAgICB0 aHJvdWdoIHRlbG5ldCBydW4gb24gS2VybWl0IHdpdGggdGhlIG1heGltdW0gbGVuZ3RoIHBhY2tl dHMuIEkgbm90ZQotICAgICB0aGF0IHRoZSB3aW5kb3cgYWxsb2NhdGlvbiBkaXNwbGF5IGRvZXMg c2hvdyBTVFJFQU1JTkcsIHVzaW5nCi0gICAgIHRlbG5ldC4gUnVubmluZyBzc2ggb24gS2VybWl0 LCBJIHNlZSB0aGUgc3RhbmRhcmQgMSBvZiAzMCB3aW5kb3dzCi0gICAgIGRpc3BsYXksIGFuZCBu b3RlIHRoYXQgdGhlcmUgYXBwZWFycyB0byBiZSBhIGJ1ZmZlciBsZW5ndGggbGltaXQKLSAgICAg YmV0d2VlbiAxMDAwIGFuZCAyMDAwIGJ5dGVzLiBSdW4gd2l0aCAxMDAwLCBhbmQgaXQncyB0aWNr LXRvY2ssCi0gICAgIHNvbGlkIGFzIGEgcm9jay4gV2l0aCAyMDAwIEkgc2VlIHRpbWVvdXQgZXJy b3JzIGFuZCBSVFMvQ1RTIGFjdGlvbgotICAgICBvbiB0aGUgbW9kZW0uCi0KLSAgIEtlcm1pdCdz IHBhY2tldC1sZW5ndGggYW5kIG90aGVyIGNvbnRyb2xzIGxldCB5b3UgbWFrZSBhZGp1c3RtZW50 cyBsaWtlCi0gICB0aGlzIHRvIGdldCBhcm91bmQgd2hhdGV2ZXIgb2JzdGFjbGVzIG1pZ2h0IGJl IHRocm93biB1cCAtLSBpbiB0aGlzCi0gICBjYXNlIChydW5uaW5nIEtlcm1pdCBvdmVyIHNzaCks IHRoZSB1bmRlcmxpbmcgU29sYXJpcyBQVFkgZHJpdmVyLgotCi0zLjcuNi4gU29sYXJpcyAyLjQg YW5kIEVhcmxpZXIKLQotICAgWyBbNDUzXVRvcCBdIFsgWzQ1NF1Db250ZW50cyBdIFsgWzQ1NV1T ZWN0aW9uIENvbnRlbnRzIF0gWwotICAgWzQ1Nl1QcmV2aW91cyBdCi0KLSAgIEMtS2VybWl0IGNh bid0IGJlIGNvbXBpbGVkIHN1Y2Nlc3NmdWxseSB1bmRlciBTb2xhcmlzIDIuMyB1c2luZwotICAg U1VOV3Nwcm8gY2MgMi4wLjEgdW5sZXNzIGF0IGxlYXN0IHNvbWUgb2YgdGhlIGZvbGxvd2luZyBw YXRjaGVzIGFyZQotICAgYXBwbGllZCB0byBjYyAoaXQgaXMgbm90IGtub3duIHdoaWNoIG9uZShz KSwgaWYgYW55LCBmaXggdGhlIHByb2JsZW0pOgotCi0gICAgICogMTAwOTM1LTAxIFNwYXJjQ29t cGlsZXIgQyAyLjAuMTogYmFkIGNvZGUgZ2VuZXJhdGVkIHdoZW4gYWRkcmVzc2VzCi0gICAgICAg b2YgdHdvIGRvdWJsZSBhcmd1bWVudHMgYXJlIGludm9sdmVkCi0gICAgICogMTAwOTYxLTA1IFNQ QVJDY29tcGlsZXJzIEMgMi4wLjE6IGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gd2l0aAotICAgICAg IGZ1bmN0aW9uIHJldHVybmluZyBzdHJ1Y3R1cmUgZ2l2ZXMgd3JvbmcgdmFsdWUKLSAgICAgKiAx MDA5NzQtMDEgU3BhcmNXb3JrcyAyLjAuMTogZGJ4IGp1bWJvIHBhdGNoCi0gICAgICogMTAxNDI0 LTAxIFNQQVJDd29ya3MgMi4wLjEgbWFrZXRvb2wgU0VHVidzIGluc3RhbnRseSBvbiBTb2xhcmlz IDIuMwotCi0gICBXaXRoIHVucGF0Y2hlZCBjYyAyLjAuMSwgdGhlIHN5bXB0b20gaXMgdGhhdCBj ZXJ0YWluIG1vZHVsZXMgZ2VuZXJhdGUKLSAgIHRydW5jYXRlZCBvYmplY3QgZmlsZXMsIHJlc3Vs dGluZyBpbiBtYW55IHVucmVzb2x2ZWQgcmVmZXJlbmNlcyBhdCBsaW5rCi0gICB0aW1lLgotCi0g ICAgIFRoZSByZXN0IG9mIHRoZSBwcm9ibGVtcyBpbiB0aGlzIHNlY3Rpb24gaGF2ZSB0byBkbyB3 aXRoCi0gICAgIGJpZGlyZWN0aW9uYWwgdGVybWluYWwgcG9ydHMgYW5kIHRoZSBTb2xhcmlzIFBv cnQgTW9uaXRvci4gQSBidWcgaW4KLSAgICAgQy1LZXJtaXQgNUEgdGlja2VkIGEgYnVnIGluIFNv bGFyaXMuIFRoZSBDLUtlcm1pdCBidWcgd2FzIGZpeGVkIGluCi0gICAgIHZlcnNpb24gNi4wLCBh bmQgdGhlIFNvbGFyaXMgYnVnIHdhcyBmaXhlZCBpbiAyLjQgKEkgdGhpbmssIG9yIG1heWJlCi0g ICAgIDIuNSkuCi0KLSAgIFJlcG9ydGVkbHksICJDLUtlcm1pdCAuLi4gY2F1c2VzIGEgU1BBUkNz dGF0aW9uIHJ1bm5pbmcgU29sYXJpcyAyLjMgdG8KLSAgIHBhbmljIGFmdGVyIHRoZSBtb2RlbSBj b25uZWN0cy4gSSBoYXZlIHRyaWVkIGNvbXBpbGluZyBDLUtlcm1pdCB3aXRoCi0gICBTdW4ncyB1 bmJ1bmRsZWQgQyBjb21waWxlciwgd2l0aCBHQ0MgVmVyc2lvbnMgMi40LjUgYW5kIDIuNS4zLCB3 aXRoCi0gICBtYWtlIHRhcmdldHMgJ3N1bm9zNTEnLCAnc3Vub3M1MXRjcCcsICdzdW5vczUxZ2Nj JywgYW5kIGV2ZW4gJ3N5czVyNCcsCi0gICBhbmQgZWFjaCB0aW1lIGl0IGNvbXBpbGVzIGFuZCBz dGFydHMgdXAgY2xlYW5seSwgYnV0IHdpdGhvdXQgZmFpbCwgYXMKLSAgIHNvb24gYXMgSSBkaWFs IHRoZSBudW1iZXIgYW5kIGdldCBhICdDT05ORUNUJyBtZXNzYWdlIGZyb20gdGhlIG1vZGVtLCBJ Ci0gICBnZXQ6Ci0KLSAgQkFEIFRSQVAKLSAga2VybWl0OiBEYXRhIGZhdWx0Ci0gIGtlcm5lbCBy ZWFkIGZhdWx0IGF0IGFkZHI9MHg0NWMsIHBtZT0weDAKLSAgU3luYyBFcnJvciBSZWcgODAgPElO VkFMSUQ+Ci0gIC4uLgotICBwYW5pYzogRGF0YSBGYXVsdC4KLSAgLi4uCi0gIFJlYm9vdGluZy4u LgotCi0gICBUaGUgc2FtZSBtb2RlbSB3b3JrcyBmaW5lIGZvciBVVUNQL3RpcCBjYWxsaW5nLiIg QWxzbyAocmVwb3J0ZWRseSksCi0gICB0aGlzIG9ubHkgaGFwcGVucyBpZiB0aGUgZGlhbG91dCBw b3J0IGlzIGNvbmZpZ3VyZWQgYXMgaW4vb3V0IHZpYQotICAgYWRtaW50b29sLiBJZiBpdCBpcyBj b25maWd1cmVkIGFzIG91dC1vbmx5LCBubyBwcm9ibGVtLiBUaGlzIGlzIHRoZQotICAgc2FtZSBk aWFsaW5nIGNvZGUgdGhhdCB3b3JrcyBvbiBodW5kcmVkcyBvZiBvdGhlciBTeXN0ZW0tViBiYXNl ZCBVbml4Ci0gICBPUydzLiBTaW5jZSBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3IgYSB1c2Vy IHByb2dyYW0gdG8gY3Jhc2ggdGhlCi0gICBvcGVyYXRpbmcgc3lzdGVtLCB0aGlzIHByb2JsZW0g bXVzdCBiZSBjaGFsa2VkIHVwIHRvIGEgU29sYXJpcyBidWcuCi0gICBFdmVuIGlmIHlvdSBTRVQg Q0FSUklFUiBPRkYsIENPTk5FQ1QsIGFuZCBkaWFsIG1hbnVhbGx5IGJ5IHR5cGluZwotICAgQVRE VG5ubm5ubm4sIHRoZSBzeXN0ZW0gcGFuaWNzIGFzIHNvb24gYXMgdGhlIG1vZGVtIGlzc3VlcyBp dHMgQ09OTkVDVAotICAgbWVzc2FnZS4gKENsZWFybHksIHdoZW4geW91IGFyZSBkaWFsaW5nIG1h bnVhbGx5LCBDLUtlcm1pdCBkb2VzIG5vdAotICAga25vdyBhIHRoaW5nIGFib3V0IHRoZSBDT05O RUNUIG1lc3NhZ2UsIGFuZCBzbyB0aGUgcGFuaWMgaXMgYWxtb3N0Ci0gICBjZXJ0YWlubHkgY2F1 c2VkIGJ5IHRoZSB0cmFuc2l0aW9uIG9mIHRoZSBDYXJyaWVyIERldGVjdCAoQ0QpIGxpbmUgZnJv bQotICAgb2ZmIHRvIG9uLikgVGhpcyBwcm9ibGVtIHdhcyByZXBvcnRlZCBieSBtYW55IHVzZXJz LCBhbGwgb2Ygd2hvbSBzYXkKLSAgIHRoYXQgQy1LZXJtaXQgd29ya2VkIGZpbmUgb24gU29sYXJp cyAyLjEgYW5kIDIuMi4gSWYgdGhlIHNwZWN1bGF0aW9uCi0gICBhYm91dCBDRCBpcyB0cnVlLCB0 aGVuIGEgcG9zc2libGUgd29ya2Fyb3VuZCBtaWdodCBiZSB0byBjb25maWd1cmUgdGhlCi0gICBt b2RlbSB0byBsZWF2ZSBDRCBvbiAob3Igb2ZmKSBhbGwgdGhlIHRpbWUuIFBlcmhhcHMgYnkgdGhl IHRpbWUgeW91Ci0gICByZWFkIHRoaXMsIGEgcGF0Y2ggd2lsbCBoYXZlIGJlZW4gaXNzdWVkIGZv ciBTb2xhcmlzIDIuMy4KLQotICAgVGhlIGZvbGxvd2luZyBpcyBmcm9tIEthcmwgUy4gTWFyc2gs IFN5c3RlbXMgJiBOZXR3b3JrcyBBZG1pbmlzdHJhdG9yLAotICAgQU1CSVggU3lzdGVtcyBDb3Jw LCBSb2NoZXN0ZXIsIE5ZOgotCi0gICAgIEVudmlyb25tZW50OiBTb2xhcmlzIDIuMyBQYXRjaCAx MDEzMTgtNDUgQy1LZXJtaXQgNUEoMTg5KSAoYW5kCi0gICAgIHByZXN1bWFibHkgdGhpcyBhcHBs aWVzIHRvIDE4OCBhbmQgMTkwIGFsc28pLiBlZXByb20gc2V0dGluZzoKLQotICB0dHlhLXJ0cy1k dHItb2ZmPWZhbHNlCi0gIHR0eWEtaWdub3JlLWNkPWZhbHNlCi0gIHR0eWEtbW9kZT0xOTIwMCw4 LG4sOCwtCi0KLSAgICAgVG8gdXNlIEMtS2VybWl0IG9uIGEgYmlkaXJlY3Rpb25hbCBwb3J0IGlu IHRoaXMgZW52aXJvbm1lbnQsIGRvIG5vdAotICAgICB1c2UgYWRtaW50b29sIHRvIGNvbmZpZ3Vy ZSB0aGUgcG9ydC4gVXNlIGFkbWludG9vbCB0byBkZWxldGUgYW55Ci0gICAgIHNlcnZpY2VzIHJ1 bm5pbmcgb24gdGhlIHBvcnQgYW5kIHRoZW4gcXVpdCBhZG1pbnRvb2wgYW5kIGlzc3VlIHRoZQot ICAgICBmb2xsb3dpbmcgY29tbWFuZDoKLQotICBwbWFkbSAtYSAtcCB6c21vbiAtcyB0dHliIC1p IHJvb3QgLWZ1IC12IDEgLW0gImB0dHlhZG0gLWIgLWQgL2Rldi90ZXJtL2IgXAotICAtbCBjb250 dHlIIC1tIGxkdGVybSx0dGNvbXBhdCAtcyAvdXNyL2Jpbi9sb2dpbiAtUyBuYCIKLQotICAgICBb Tk9URTogVGhpcyB3YXMgY29waWVkIGZyb20gYSBibHVycnkgZmF4LCBzbyBwbGVhc2UgY2hlY2sg aXQKLSAgICAgY2FyZWZ1bGx5XSB3aGVyZToKLQotICAtYSA9IEFkZCBzZXJ2aWNlCi0gIC1wID0g cG10YWcgKHpzbW9uKQotICAtcyA9IHNlcnZpY2UgdGFnICh0dHliKQotICAtaSA9IGlkIHRvIGJl IGFzc29jaWF0ZWQgd2l0aCBzZXJ2aWNlIHRhZyAocm9vdCkKLSAgLWZ1ID0gY3JlYXRlIHV0bXAg ZW50cnkKLSAgLXYgPSB2ZXJzaW9uIG9mIHR0eWFkbQotICAtbSA9IHBvcnQgbW9uaXRvci1zcGVj aWZpYyBwb3J0aW9uIG9mIHRoZSBwb3J0IG1vbml0b3IgYWRtaW5pc3RyYXRpdmUgZmlsZQotICAg ICAgIGVudHJ5IGZvciB0aGUgc2VydmljZQotICAtYiA9IHNldCB1cCBwb3J0IGZvciBiaWRpcmVj dGlvbmFsIHVzZQotICAtZCA9IGZ1bGwgcGF0aCBuYW1lIG9mIGRldmljZQotICAtbCA9IHdoaWNo IHR0eWxhYmVsIGluIHRoZSAvZXRjL3R0eWRlZnMgZmlsZSB0byB1c2UKLSAgLW0gPSBhIGxpc3Qg b2YgcHVzaGFibGUgU1RSRUFNUyBtb2R1bGVzCi0gIC1zID0gcGF0aG5hbWUgb2Ygc2VydmljZSB0 byBiZSBpbnZva2VkIHdoZW4gY29ubmVjdGlvbiByZXF1ZXN0IHJlY2VpdmVkCi0gIC1TID0gc29m dHdhcmUgY2FycmllciBkZXRlY3Qgb24gb3Igb2ZmIChuID0gb2ZmKQotCi0gICAgICJUaGlzIGlz IGV4YWN0bHkgaG93IEkgd2FzIGFibGUgdG8gZ2V0IEtlcm1pdCB0byB3b3JrIG9uIGEKLSAgICAg YmktZGlyZWN0aW9uYWwgcG9ydCB3aXRob3V0IGNyYXNoaW5nIHRoZSBzeXN0ZW0uIgotCi0gICBP biB0aGUgU29sYXJpcyBwcm9ibGVtLCBhbHNvIHNlZSBTdW5Tb2x2ZSBCdWcgSUQgMTE1MDQ1NyAo IlVzaW5nCi0gICBDLUtlcm1pdCwgZ2V0IEJhZCBUcmFwIG9uIHJlY2VpdmluZyBwcm9tcHQgZnJv bSByZW1vdGUgc3lzdGVtIikuCi0gICBBbm90aGVyIHVzZXIgcmVwb3J0ZWQgIlNvLCBJIGhhdmUg Y29tbXVuaWNhdGVkIHdpdGggdGhlIFN1biB0ZWNoCi0gICBzdXBwb3J0IHBlcnNvbiB0aGF0IHN1 Ym1pdHRlZCB0aGlzIGJ1ZyByZXBvcnQgWzExNTA0NTddLiBBcHBhcmVudGx5LAotICAgdGhpcyBi dWcgd2FzIGZpeGVkIHVuZGVyIG9uZSBvZiB0aGUganVtYm8ga2VybmVsIHBhdGNoZXMuIEl0IHdv dWxkIHNlZW0KLSAgIHRoYXQgdGhlIGZpeCBkaWQgbm90IGxpdmUgb24gaW50byAxMDEzMTgtNDUs IGFzIHRoaXMgaXMgRVhBQ1RMWSB0aGUKLSAgIGVycm9yIHRoYXQgSSBzZWUgd2hlbiBJIGF0dGVt cHQgdG8gdXNlIGtlcm1pdCBvbiBteSBzeXN0ZW0uIgotCi0gICBMYXRlciAoQXVnIDk0KS4uLiBD LUtlcm1pdCBkaWFsb3V0IHN1Y2Nlc3NmdWxseSB0ZXN0ZWQgb24gYSBTdW40bSB3aXRoCi0gICBh IGhlYXZpbHkgcGF0Y2hlZCBTb2xhcmlzIDIuMy4gVGhlIHBhdGNoZXMgbW9zdCBsaWtlbHkgdG8g aGF2ZSBiZWVuCi0gICByZWxldmFudDoKLQotICAgICAqIDEwMTMxOC01MDogU3VuT1MgNS4zOiBK dW1ibyBwYXRjaCBmb3Iga2VybmVsIChpbmNsdWRlcyBsaWJjLCBsb2NrZCkKLSAgICAgKiAxMDE3 MjAtMDE6IFN1bk9TIDUuMzogdHR5bW9uIC0gcHJvbXB0IG5vdCBhbHdheXMgdmlzaWJsZSBvbiBh IG1vZGVtCi0gICAgICAgY29ubmVjdGlvbgotICAgICAqIDEwMTgxNS0wMTogU3VuT1MgNS4zOiBE YXRhIGZhdWx0IGluIHB1dCgpIE5VTEwgcXVldWUgcGFzc2VkIGZyb20KLSAgICAgICB0dHljb21t b25fcWZ1bGwoKQotICAgICAqIDEwMTMyOC0wMTogU3VuT1MgNS4zOiBBdXRvbWF0aW9uIHNjcmlw dCB0byBwcm9wZXJseSBzZXR1cCB0dHkgcG9ydHMKLSAgICAgICBwcmlvciB0byBQQ1RTIGV4ZWN1 dGlvbgotCi0gICBTdGlsbCBsYXRlciAoTm92IDk0KTogYW5vdGhlciB1c2VyIChCbyBLdWxsbWFy IGluIFN3ZWRlbikgcmVwb3J0cyB0aGF0Ci0gICBhZnRlciB1c2luZyBDLUtlcm1pdCB0byBkaWFs IG91dCBvbiBhIGJpZGlyZWN0aW9uYWwgcG9ydCwgdGhlIHBvcnQKLSAgIG1pZ2h0IG5vdCBhbnN3 ZXIgc3Vic2VxdWVudCBpbmNvbWluZyBjYWxscywgYW5kIHNheXMgInRoZSBwcm9ibGVtIGlzCi0g ICBlYXN5IGVub3VnaCB0byBmaXggd2l0aCB0aGUgU2VyaWFsIFBvcnQgTWFuYWdlcjsgSSBqdXN0 IGRlbGV0ZSB0aGUKLSAgIHNlcnZpY2UgYW5kIGluc3RhbGwgaXQgYWdhaW4gdXNpbmcgdGhlIGdy YXBoaWNhbCBpbnRlcmZhY2UsIHdoaWNoCi0gICB1bmRlcm5lYXRoIHVzZXMgY29tbWFuZHMgbGlr ZSBzYWNhZG0gYW5kIHBtYWRtLiIgTGF0ZXIgQm8gcmVwb3J0cywgIkkKLSAgIGhhdmUgZm91bmQg dGhhdCBpZiBJIHJ1biBLZXJtaXQgd2l0aCB0aGUgZm9sbG93aW5nIHNjcmlwdCB0aGVuIGl0Ci0g ICB3b3Jrcy4gVGhpcyBzY3JpcHQgaXMgZm9yIC9kZXYvY3VhL2EsICItcyBhIiBpcyB0aGUgbGFz dCBhIGluCi0gICAvZGV2L2N1YS9hOgotCi0gICMhIC9iaW4vc2gKLSAga2VybWl0Ci0gIHNsZWVw IDIKLSAgc3VydW4gcG1hZG0gLWUgLXAgenNtb24gLXMgYQotCi0zLjguIEMtS0VSTUlUIEFORCBT VU5PUwotCi0gICBbIFs0NTddVG9wIF0gWyBbNDU4XUNvbnRlbnRzIF0gWyBbNDU5XVNlY3Rpb24g Q29udGVudHMgXSBbIFs0NjBdTmV4dCBdCi0gICBbIFs0NjFdUHJldmlvdXMgXQotCi0gICBGb3Ig YWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgc2VlICJDZWxlc3RlJ3MgVHV0b3JpYWwgb24gU3VuT1Mg NC4xLjMrCi0gICBNb2RlbXMgYW5kIFRlcm1pbmFscyI6Ci0KLSAgWzQ2Ml1odHRwOi8vd3d3LnN0 b2tlbHkuY29tLwotCi0gICBGb3IgRkFRcywgZXRjLCBmcm9tIFN1biwgc2VlOgotICAgICAqIFs0 NjNdaHR0cDovL2FjY2VzczEuc3VuLmNvbS8KLQotICAgRm9yIGhpc3Rvcnkgb2YgU3VuIG1vZGVs cyBhbmQgU3VuT1MgdmVyc2lvbnMsIHNlZSAoc2hvdWxkIGJlIGFsbCB0aGUKLSAgIHNhbWUpOgot ICAgICAqIFs0NjRdaHR0cDovL3d3dy5sdWRkLmx1dGguc2UvfmJlYXIvcHJvamVjdC9zdW4vc3Vu LmhhcmR3YXJlLnR4dAotICAgICAqIFs0NjVdZnRwOi8vZnRwLm5ldGNvbS5jb20vcHViL3J1L3J1 Ymljb24vc3VuLmhkd3IucmVmCi0gICAgICogWzQ2Nl1mdHA6Ly9mdHAuaW50bmV0Lm5ldC9wdWIv U1VOL1N1bi1IYXJkd2FyZS1SZWYKLQotICAgU3VuIFNQQVJDc3RhdGlvbiB1c2VycyBzaG91bGQg cmVhZCB0aGUgc2VjdGlvbiAiU2V0dGluZyB1cCBNb2RlbQotICAgU29mdHdhcmUiIGluIHRoZSBE ZXNrdG9wIFNQQVJDIFN1biBTeXN0ZW0gJiBOZXR3b3JrIE1hbmFnZXIncyBHdWlkZS4gSWYKLSAg IHlvdSBkb24ndCBzZXQgdXAgeW91ciBzZXJpYWwgcG9ydHMgY29ycmVjdGx5LCBLZXJtaXQgKGFu ZCBvdGhlcgotICAgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUpIHdvbid0IHdvcmsgcmlnaHQuCi0K LSAgIEFsc28sIG9uIGNlcnRhaW4gU3VuIG1vZGVscyBsaWtlIElQQywgdGhlIHNlcmlhbCBwb3J0 IGhhcmR3YXJlIG1pZ2h0Ci0gICBuZWVkIHRvIGhhdmUgYSBqdW1wZXIgY2hhbmdlZCB0byBtYWtl IGl0IGFuIFJTLTIzMiBwb3J0IHJhdGhlciB0aGFuCi0gICBSUy00MjMuCi0KLSAgIFJlcG9ydGVk bHksIEMtS2VybWl0IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IG9uIGEgU3VuIFNQQVJDc3RhdGlv biBpbgotICAgYW4gT3BlbiBXaW5kb3dzIHdpbmRvdyB3aXRoIHNjcm9sbGluZyBlbmFibGVkLiBE aXNhYmxlIHNjcm9sbGluZywgb3IKLSAgIGVsc2UgaW52b2tlIEtlcm1pdCBpbiBhIHRlcm1pbmFs IGVtdWxhdGlvbiB3aW5kb3cgKHh0ZXJtLCBjcnR0b29sLAotICAgdnR0b29sKSB1bmRlciBTdW5W aWV3ICh0aGlzIG1pZ2h0IGJlIGZpeGVkIGluIGxhdGVyIFN1bk9TIHJlbGVhc2VzKS4KLQotICAg T24gdGhlIFN1biB3aXRoIE9wZW4gV2luZG93cywgYW4gYWRkaXRpb25hbCBzeW1wdG9tIGhhcyBi ZWVuIHJlcG9ydGVkOgotICAgb3V0Ym91bmQgU3VuTGluayBYLjI1IGNvbm5lY3Rpb25zICJtYWdp Y2FsbHkiIHRyYW5zbGF0ZSBDUiB0eXBlZCBhdCB0aGUKLSAgIGtleWJvYXJkIGludG8gTEYgYmVm b3JlIHRyYW5zbWlzc2lvbiB0byB0aGUgcmVtb3RlIGhvc3QuIFRoaXMgZG9lc24ndAotICAgaGFw cGVuIHVuZGVyIFN1blZpZXcuCi0KLSAgIFNFVCBDQVJSSUVSIE9OLCB3aGVuIHVzZWQgb24gdGhl IFN1bk9TIDQuMSB2ZXJzaW9uIG9mIEMtS2VybWl0Ci0gICAoY29tcGlsZWQgaW4gdGhlIEJTRCB1 bml2ZXJzZSksIGNhdXNlcyB0aGUgcHJvZ3JhbSB0byBoYW5nCi0gICB1bmludGVycnVwdGlibHkg d2hlbiBTRVQgTElORSBpcyBpc3N1ZWQgZm9yIGEgZGV2aWNlIHRoYXQgaXMgbm90Ci0gICBhc3Nl cnRpbmcgY2Fycmllci4gV2hlbiBLZXJtaXQgaXMgYnVpbHQgaW4gdGhlIFN5cyBWIHVuaXZlcnNl IG9uIHRoZQotICAgc2FtZSBjb21wdXRlciwgdGhlcmUgaXMgbm8gcHJvYmxlbSAoaXQgY2FuIGJl IGludGVycnVwdGVkIHdpdGggQ3RybC1DKS4KLSAgIFRoaXMgaXMgYXBwYXJlbnRseSBhIGxpbWl0 YXRpb24gb2YgdGhlIEJTRC1zdHlsZSB0dHkgZHJpdmVyLgotCi0gICBTdW5PUyA0LjEgQy1LZXJt aXQgaGFzIGJlZW4gb2JzZXJ2ZWQgdG8gZHVtcCBjb3JlIHdoZW4gcnVubmluZyBhCi0gICBjb21w bGljYXRlZCBzY3JpcHQgcHJvZ3JhbSB1bmRlciBjcm9uLiBUaGUgZHVtcCBpbnZhcmlhYmx5IG9j Y3VycyBpbgotICAgdHRvYygpLCB3aGlsZSB0cnlpbmcgdG8gb3V0cHV0IGEgY2hhcmFjdGVyIHRv IGEgVENQL0lQIFRFTE5FVAotICAgY29ubmVjdGlvbi4gdHRvYygpIGNvbnRhaW5zIGEgd3JpdGUo KSBjYWxsLCBhbmQgd2hlbiB0aGUgc3lzdGVtIG9yIHRoZQotICAgbmV0d29yayBpcyB2ZXJ5IGJ1 c3ksIHRoZSB3cml0ZSgpIGNhbGwgY2FuIGdldCBzdHVjayBmb3IgbG9uZyBwZXJpb2RzCi0gICBv ZiB0aW1lLiBUbyBicmVhayBvdXQgb2YgZGVhZGxvY2tzIGNhdXNlZCBieSBzdHVjayB3cml0ZSgp IGNhbGxzLCB0aGVyZQotICAgaXMgYW4gYWxhcm0gYXJvdW5kIHRoZSB3cml0ZSgpLiBJdCBpcyBw b3NzaWJsZSB0aGF0IHRoZSBjb3JlIGR1bXAKLSAgIG9jY3VycyB3aGVuIHRoaXMgYWxhcm0gc2ln bmFsIGlzIGNhdWdodC4gKFRoaXMgb25lIGhhcyBub3QgYmVlbgotICAgb2JzZXJ2ZWQgcmVjZW50 bHkgLS0gcG9zc2libHkgZml4ZWQgaW4gZWRpdCAxOTAuKQotCi0gICBPbiBTdW4gY29tcHV0ZXJz IHdpdGggU3VuT1MgNC4wIG9yIDQuMSwgU0VUIEZMT1cgUlRTL0NUUyB3b3JrcyBvbmx5IGlmCi0g ICB0aGUgY2FycmllciBzaWduYWwgaXMgcHJlc2VudCBmcm9tIHRoZSBjb21tdW5pY2F0aW9uIGRl dmljZSBhdCB0aGUgdGltZQotICAgd2hlbiBDLUtlcm1pdCBlbnRlcnMgcGFja2V0IG1vZGUgb3Ig Q09OTkVDVCBtb2RlLiBJZiBjYXJyaWVyIGlzIG5vdAotICAgc2Vuc2VkIChlLmcuIHdoZW4gZGlh bGluZyksIEMtS2VybWl0IGRvZXMgbm90IGF0dGVtcHQgdG8gdHVybiBvbgotICAgUlRTL0NUUyBm bG93IGNvbnRyb2wuIFRoaXMgaXMgYmVjYXVzZSB0aGUgU3VuT1Mgc2VyaWFsIGRldmljZSBkcml2 ZXIKLSAgIGRvZXMgbm90IGFsbG93IGNoYXJhY3RlcnMgdG8gYmUgb3V0cHV0IGlmIFJUUy9DVFMg aXMgc2V0IChDUlRTQ1RTKSBidXQKLSAgIGNhcnJpZXIgKGFuZCBEU1IpIGFyZSBub3QgcHJlc2Vu dC4gV29ya2Fyb3VuZCAobWF5YmUpOiBTRVQgQ0FSUklFUiBPRkYKLSAgIGJlZm9yZSBnaXZpbmcg dGhlIFNFVCBMSU5FIGNvbW1hbmQsIGVzdGFibGlzaCB0aGUgY29ubmVjdGlvbiwgdGhlbiBTRVQK LSAgIEZMT1cgUlRTL0NUUwotCi0gICBJdCBoYXMgYWxzbyBiZWVuIHJlcG9ydGVkIHRoYXQgUlRT L0NUUyBmbG93IGNvbnRyb2wgdW5kZXIgU3VuT1MgNC4xCi0gICB0aHJvdWdoIDQuMS4zIHdvcmtz IG9ubHkgb24gSU5QVVQsIG5vdCBvbiBvdXRwdXQsIGFuZCB0aGF0IHRoZXJlIGlzIGEKLSAgIHBh dGNoIGZyb20gU3VuIHRvIGNvcnJlY3QgdGhpcyBwcm9ibGVtOiBQYXRjaC1JRCMgVDEwMDUxMy0w NCwgMjAgSnVseQotICAgMTk5MyAodGhpcyBwYXRjaCBtaWdodCBhcHBseSBvbmx5IHRvIFN1bk9T IDQuMS4zKS4gSXQgbWlnaHQgYWxzbyBiZQotICAgbmVjZXNzYXJ5IHRvIGNvbmZpZ3VyZSB0aGUg ZWVwcm9tIHBhcmFtZXRlcnMgb2YgdGhlIHNlcmlhbCBwb3J0OyBlLmcuCi0gICBkbyB0aGUgZm9s bG93aW5nIGFzIHJvb3QgYXQgdGhlIHNoZWxsIHByb21wdDoKLQotICBlZXByb20gIHR0eWEtaWdu b3JlLWNkPWZhbHNlCi0gIGVlcHJvbSAgdHR5YS1ydHMtZHRyLW9mZj10cnVlCi0KLSAgIFRoZXJl IGhhdmUgYmVlbiByZXBvcnRzIG9mIGZpbGUgdHJhbnNmZXIgZmFpbHVyZXMgb24gU3VuLTMgc3lz dGVtcyB3aGVuCi0gICB1c2luZyBsb25nIHBhY2tldHMgYW5kL29yIGxhcmdlIHdpbmRvdyBzaXpl cy4gT25lIHVzZXIgc2F5cyB0aGF0IHdoZW4KLSAgIHRoaXMgaGFwcGVucywgdGhlIGNvbnNvbGUg aXNzdWVzIG1hbnkgY29waWVzIG9mIHRoaXMgbWVzc2FnZToKLQotICBjaGFvcyB2bXVuaXg6IHpz MTogcmluZyBidWZmZXIgb3ZlcmZsb3cKLQotICAgVGhpcyBtZWFucyB0aGF0IFN1bk9TIGlzIG5v dCBzY2hlZHVsaW5nIEtlcm1pdCBmcmVxdWVudGx5IGVub3VnaCB0bwotICAgc2VydmljZSBpbnRl cnJ1cHRzIGZyb20gdGhlIHpzIHNlcmlhbCBkZXZpY2UgKFppbG9nIDgzNTAgU0NDIHNlcmlhbAot ICAgY29tbXVuaWNhdGlvbiBwb3J0KSBiZWZvcmUgaXRzIGlucHV0IHNpbG8gb3ZlcmZsb3dzLiBX b3JrYXJvdW5kOiB1c2UKLSAgIHNtYWxsZXIgcGFja2V0cyBhbmQvb3IgYSBzbWFsbGVyIHdpbmRv dyBzaXplLCBvciB1c2UgIm5pY2UiIHRvIGluY3JlYXNlCi0gICBLZXJtaXQncyBwcmlvcml0eS4g VXNlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBpZiBhdmFpbGFibGUsIG9yIHJlbW92ZQotICAgb3Ro ZXIgYWN0aXZlIHByb2Nlc3NlcyBiZWZvcmUgcnVubmluZyBLZXJtaXQuCi0KLSAgIFN1bkxpbmsg WC4yNSBzdXBwb3J0IGluIEMtS2VybWl0IDVBKDE5MCkgd2FzIGJ1aWx0IGFuZCB0ZXN0ZWQKLSAg IHN1Y2Nlc3NmdWxseSB1bmRlciBTdW5PUyA0LjEuM2IgYW5kIFN1bkxpbmsgWC4yNSA3LjAwLgot Ci0zLjkuIEMtS0VSTUlUIEFORCBVTFRSSVgKLQotICAgWyBbNDY3XVRvcCBdIFsgWzQ2OF1Db250 ZW50cyBdIFsgWzQ2OV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbNDcwXU5leHQgXQotICAgWyBbNDcx XVByZXZpb3VzIF0KLQotICAgU2VlIGFsc286IFRoZSBbNDcyXWNvbXAudW5peC51bHRyaXggYW5k IFs0NzNdY29tcC5zeXMuZGVjIG5ld3Nncm91cHMuCi0KLSAgIFRoZXJlIGlzIG5vIGhhcmR3YXJl IGZsb3cgY29udHJvbCBpbiBVbHRyaXguIFRoYXQncyBub3QgYSBLZXJtaXQKLSAgIGRlZmljaWVu Y3ksIGJ1dCBhbiBVbHRyaXggb25lLgotCi0gICBXaGVuIHNlbmRpbmcgZmlsZXMgdG8gQy1LZXJt aXQgb24gYSBUZWxuZXQgY29ubmVjdGlvbiB0byBhIHJlbW90ZQotICAgVWx0cml4IHN5c3RlbSwg eW91IG11c3QgU0VUIFBSRUZJWElORyBBTEwgKG9yIGF0IGxlYXN0IHByZWZpeCBtb3JlCi0gICBj b250cm9sIGNoYXJhY3RlcnMgdGhhbiBhcmUgc2VsZWN0ZWQgYnkgU0VUIFBSRUZJWElORyBDQVVU SU9VUykuCi0KLSAgIFJlcG9ydGVkbHksIERFQyBVTFRSSVggNC4zIGlzIGltbXVuZSB0byBDLUtl cm1pdCdzIGRpc2FibGluZyBvZgotICAgU0lHUVVJVCwgd2hpY2ggaXMgdGhlIHNpZ25hbCB0aGF0 IGlzIGdlbmVyYXRlZCB3aGVuIHRoZSB1c2VyIHR5cGVzCi0gICBDdHJsLVwsIHdoaWNoIGtpbGxz IHRoZSBjdXJyZW50IHByb2Nlc3MgKGkuZS4gQy1LZXJtaXQpIGFuZCBkdW1wcyBjb3JlLgotICAg RGlhZ25vc2lzIGFuZCBjdXJlIHVua25vd24uIFdvcmthcm91bmQ6IGJlZm9yZSBzdGFydGluZyBD LUtlcm1pdCAtLSBvcgotICAgZm9yIHRoYXQgbWF0dGVyLCB3aGVuIHlvdSBmaXJzdCBsb2cgaW4g YmVjYXVzZSB0aGlzIGFwcGxpZXMgdG8gYWxsCi0gICBwcm9jZXNzZXMsIG5vdCBqdXN0IEtlcm1p dCAtLSBnaXZlIHRoZSBmb2xsb3dpbmcgVW5peCBjb21tYW5kOgotCi0gIHN0dHkgcXVpdCB1bmRl ZgotCi0gICBDZXJ0YWluIG9wZXJhdGlvbnMgZHJpdmVuIGJ5IFJTLTIzMiBtb2RlbSBzaWduYWwg ZG8gbm90IHdvcmsgb24KLSAgIERFQ3N0YXRpb25zIG9yIG90aGVyIERFQyBwbGF0Zm9ybXMgd2hv c2Ugc2VyaWFsIGludGVyZmFjZXMgdXNlIE1NUAotICAgY29ubmVjdG9ycyAoREVDIHZlcnNpb24g b2YgUko0NSB0ZWxlcGhvbmUgamFjayB3aXRoIG9mZnNldCB0YWIpLiBUaGVzZQotICAgY29ubmVj dG9ycyBjb252ZXkgb25seSB0aGUgRFNSIGFuZCBEVFIgbW9kZW0gc2lnbmFscywgYnV0IG5vdCBj YXJyaWVyCi0gICAoQ0QpLCBSVFMsIENUUywgb3IgUkkuIFVzZSBTRVQgQ0FSUklFUiBPRkYgdG8g ZW5hYmxlIGNvbW11bmljYXRpb24sIG9yCi0gICAiaG90d2lyZSIgRFNSIHRvIENELgotCi0gICBU aGUgbWF4aW11bSBzZXJpYWwgc3BlZWQgb24gdGhlIERFQ3N0YXRpb24gNTAwMCBpcyBub3JtYWxs eSAxOTIwMCwgYnV0Ci0gICB2YXJpb3VzIHRyaWNrcyBhcmUgYXZhaWxhYmxlIChvdXRzaWRlIEtl cm1pdCkgdG8gZW5hYmxlIGhpZ2hlciByYXRlcy4KLSAgIEZvciBleGFtcGxlLCBvbiB0aGUgNTAw MC8yMDAsIDE5MjAwIGNhbiBiZSByZW1hcHBlZCAoc29tZWhvdywgc29tZXRoaW5nCi0gICB0byBk byB3aXRoICJhIGJpdCBpbiB0aGUgU0lSIiwgd2hhdGV2ZXIgdGhhdCBpcykgdG8gMzg0MDAsIGJ1 dCBpbgotICAgc29mdHdhcmUgeW91IG11c3Qgc3RpbGwgcmVmZXIgdG8gdGhpcyBzcGVlZCBhcyAx OTIwMDsgeW91IGNhbid0IGhhdmUKLSAgIDE5MjAwIGFuZCAzODQwMCBhdmFpbGFibGUgYXQgdGhl IHNhbWUgdGltZS4KLQotICAgMTkyMDAsIHJlcG9ydGVkbHksIGlzIGFsc28gdGhlIGhpZ2hlc3Qg c3BlZWQgc3VwcG9ydGVkIGJ5IFVsdHJpeCwgYnV0Ci0gICBOZXRCU0QgcmVwb3J0ZWRseSBzdXBw b3J0cyBzcGVlZHMgdXAgdG8gNTc2MDAgb24gdGhlIERFQ3N0YXRpb24sCi0gICBhbHRob3VnaCB3 aGV0aGVyIGFuZCBob3cgd2VsbCB0aGlzIHdvcmtzIGlzIGFub3RoZXIgcXVlc3Rpb24uCi0KLSAg IEluIGFueSBjYXNlLCBnaXZlbiB0aGUgbGFjayBvZiBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaW4g VWx0cml4LCBoaWdoCi0gICBzZXJpYWwgc3BlZWRzIGFyZSBwcm9ibGVtYXRpYyBhdCBiZXN0Lgot Ci0zLjEwLiBDLUtFUk1JVCBBTkQgVU5JWFdBUkUKLQotICAgWyBbNDc0XVRvcCBdIFsgWzQ3NV1D b250ZW50cyBdIFsgWzQ3Nl1TZWN0aW9uIENvbnRlbnRzIF0gWyBbNDc3XU5leHQgXQotICAgWyBb NDc4XVByZXZpb3VzIF0KLQotICAgU2VlIGFsc286Ci0gICAgICogVGhlIEZyZWViaXJkIFByb2pl Y3QgKFVuaXh3YXJlIHNvZnR3YXJlIHJlcG9zaXRvcnkpCi0gICAgICAgWzQ3OV1odHRwOi8vd3d3 LmZyZWViaXJkLm9yZy8KLSAgICAgKiBUaGUgVW5peFdhcmUgRkFROiBbNDgwXWh0dHA6Ly93d3cu ZnJlZWJpcmQub3JnL2ZhcS8KLSAgICAgKiBUaGUgZm9sbG93aW5nIG5ld3Nncm91cHM6Ci0gICAg ICAgICAgKyBbNDgxXWNvbXAudW5peC51bml4d2FyZS5taXNjCi0gICAgICAgICAgKyBbNDgyXWNv bXAudW5peC5zY28ubWlzYy4KLQotICAgQWxzbyBzZWUgZ2VuZXJhbCBjb21tZW50cyBvbiBQQy1i YXNlZCBVbml4ZXMgaW4gWzQ4M11TZWN0aW9uIDMuMC4gQnkKLSAgIHRoZSB3YXksIHRoaXMgc2Vj dGlvbiBpcyBzZXBhcmF0ZSBmcm9tIHRoZSBTQ08gKENhbGRlcmEpIHNlY3Rpb24KLSAgIGJlY2F1 c2UgYXQgdGhlIHRpbWUgdGhpcyBzZWN0aW9uIHdhcyBzdGFydGVkLCBVbml4d2FyZSB3YXMgb3du ZWQgYnkgYQotICAgY29tcGFueSBjYWxsZWQgVW5pdmVsLiBMYXRlciBpdCB3YXMgc29sZCB0byBO b3ZlbGwsIGFuZCB0aGVuIHRvIFNDTy4KLSAgIFN0aWxsIGxhdGVyLCBTQ08gd2FzIHNvbGQgdG8g Q2FsZGVyYS4KLQotICAgSW4gVW5peHdhcmUgMi4wIGFuZCBsYXRlciwgdGhlIHByZWZlcnJlZCBz ZXJpYWwgZGV2aWNlIG5hbWVzIChkcml2ZXJzKQotICAgYXJlIC9kZXYvdGVybS8wMCAoZXRjKSwg cmF0aGVyIHRoYW4gL2Rldi90dHkwMCAoZXRjKS4gTm90ZSB0aGUKLSAgIGZvbGxvd2luZyBjb3Jy ZXNwb25kZW5jZSBvZiBkZXZpY2UgbmFtZXMgYW5kIGRyaXZlciBjaGFyYWN0ZXJpc3RpY3M6Ci0K LSAgTmV3IG5hbWUgICAgICAgT2xkIG5hbWUgICAgIERlc2NyaXB0aW9uCi0gIC9kZXYvdGVybS8w MCAgIC9kZXYvdHR5MDAgICA/Pz8KLSAgL2Rldi90ZXJtLzAwaCAgL2Rldi90dHkwMGggIE1vZGVt IHNpZ25hbHMgYW5kIGhhcmR3YXJlIGZsb3cgY29udHJvbAotICAvZGV2L3Rlcm0vMDBtICAvZGV2 L3R0eTAwbSAgTW9kZW0gc2lnbmFscyg/KQotICAvZGV2L3Rlcm0vMDBzICAvZGV2L3R0eTAwcyAg TW9kZW0gc2lnbmFscyBhbmQgc29mdHdhcmUgZmxvdyBjb250cm9sCi0gIC9kZXYvdGVybS8wMHQg IC9kZXYvdHR5MDB0ICA/Pz8KLQotICAgTG9ja2ZpbGUgbmFtZXMgdXNlIGRldmljZS5tYWpvci5t aW5vciBudW1iZXJzLCBlLmcuOgotCi0gIC92YXIvc3Bvb2wvbG9ja3MvTEsuNzY3OS4wMDMuMDA1 Ci0KLSAgIFRoZSBtaW5vciBudW1iZXIgdmFyaWVzIGFjY29yZGluZyB0byB0aGUgZGV2aWNlIG5h bWUgc3VmZml4IChub25lLCBoLAotICAgbSwgcywgb3IgdCkuIE9ubHkgdGhlIGRldmljZSBhbmQg bWFqb3IgbnVtYmVyIGFyZSBjb21wYXJlZCwgYW5kIHRodXMKLSAgIGFsbCBvZiB0aGUgZGlmZmVy ZW50IG5hbWVzIGZvciB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UgKGUuZy4gYWxsIG9mCi0gICB0 aG9zZSBzaG93biBpbiB0aGUgdGFibGUgYWJvdmUpIGludGVybG9jayBlZmZlY3RpdmVseS4KLQot ICAgUHJpb3IgdG8gVW5peFdhcmUgNywgc2VyaWFsIHNwZWVkcyBoaWdoZXIgdGhhbiAzODQwMCBh cmUgbm90IHN1cHBvcnRlZC4KLSAgIEluIFVuaXhXYXJlIDcsIHdlIGFsc28gc3VwcG9ydCA1NzYw MCBhbmQgMTE1MjAwLCBwbHVzIHNvbWUgdW5leHBlY3RlZAotICAgb25lcyBsaWtlIDE0NDAwLCAy ODgwMCwgYW5kIDc2ODAwLCBieSB2aXJ0dWUgb2YgYSBzdHJhbmdlIG5ldwotICAgaW50ZXJmYWNl LCBldmlkZW50bHkgcGVjdWxpYXIgdG8gVW5peFdhcmUgNywgZGlzY292ZXJlZCB3aGlsZSBkaWdn aW5nCi0gICB0aHJvdWdoIHRoZSBoZWFkZXIgZmlsZXM6IHRjc2V0c3BlZWQoKS4gQWNjZXNzIHRv IHRoaXMgaW50ZXJmYWNlIGlzCi0gICBhbGxvd2VkIG9ubHkgaW4gUE9TSVggYnVpbGRzLCBhbmQg dGh1cyB0aGUgVW5peFdhcmUgNyB2ZXJzaW9uIG9mCi0gICBDLUtlcm1pdCBpcyBQT1NJWC1iYXNl ZCwgdW5saWtlIEMtS2VybWl0IGZvciBVbml4d2FyZSAxLnggYW5kIDIueAotICAgKHNpbmNlIHRo ZSBlYXJsaWVyIFVuaXhXYXJlIHZlcnNpb25zIGRpZCBub3Qgc3VwcG9ydCBoaWdoIHNlcmlhbAot ICAgc3BlZWRzLCBwZXJpb2QpLgotCi0gICBIT1dFVkVSLCB0dXJuaW5nIG9uIFBPU0lYIGZlYXR1 cmVzIGVuZ2FnZXMgYWxsIG9mIHRoZSAiI2lmCi0gICAoIV9QT1NJWF9TT1VSQ0UpIiBjbGF1c2Vz IGluIHRoZSBVbml4V2FyZSBoZWFkZXIgZmlsZXMsIHdoaWNoIGluIHR1cm4KLSAgIHByZXZlbnQg dXMgZnJvbSBoYXZpbmcgbW9kZW0gc2lnbmFscywgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBmbG93 Ci0gICBjb250cm9sIEFQSXMsIHNlbGVjdCgpLCBldGMgLS0gaW4gc2hvcnQsIGFsbCB0aGUgb3Ro ZXIgdGhpbmdzIHdlIG5lZWQKLSAgIGluIGNvbW11bmljYXRpb25zIHNvZnR3YXJlLCBlc3BlY2lh bGx5IHdoZW4gaGlnaCBzcGVlZHMgYXJlIHVzZWQuIE9oCi0gICB0aGUgaXJvbnkuIEFuZCBzbyBD LUtlcm1pdCBtdXN0IGJlIHNoYW1lbGVzc2x5IGJ1dGNoZXJlZCAtLSBhcyBpdCBoYXMKLSAgIGJl ZW4gc28gbWFueSB0aW1lcyBiZWZvcmUgLS0gdG8gYWxsb3cgdXMgdG8gaGF2ZSB0aGUgbmVlZGVk IGZlYXR1cmVzCi0gICBmcm9tIHRoZSBQT1NJWCBhbmQgbm9uLVBPU0lYIHdvcmxkcy4gU2VlIHRo ZSBVTklYV0FSRVBPU0lYIHNlY3Rpb25zIG9mCi0gICBbNDg0XWNrdXRpby5jLgotCi0gICBBZnRl ciB0aGUgYnV0Y2hlcnksIHdlIHdpbmQgdXAgd2l0aCBVbml4d2FyZSAyLnggaGF2aW5nIGZ1bGwK LSAgIG1vZGVtLXNpZ25hbCBjYXBhYmlsaXR5LCBidXQgcG9saXRpY2FsbHktY29ycmVjdCBVbml4 d2FyZSA3LnggbGFja2luZwotICAgdGhlIGFiaWxpdHkgdG8gYXV0b21hdGljYWxseSBkZXRlY3Qg YSBicm9rZW4gY29ubmVjdGlvbiB3aGVuIGNhcnJpZXIKLSAgIGRyb3BzLgotCi0gICBNZWFud2hp bGUgdGhlIFVuaXh3YXJlIHRjc2V0c3BlZWQoKSBmdW5jdGlvbiBhbGxvd3MgYW55IG51bWJlciBh dCBhbGwKLSAgIChhbnkgbG9uZywgMCBvciBwb3NpdGl2ZSkgYXMgYW4gYXJndW1lbnQgYW5kIHN1 Y2NlZWRzIGlmIHRoZSBudW1iZXIgaXMKLSAgIGEgbGVnYWwgYml0IHJhdGUgZm9yIHRoZSBzZXJp YWwgZGV2aWNlLCBhbmQgZmFpbHMgb3RoZXJ3aXNlLiBUaGVyZSBpcwotICAgbm8gbGlzdCBhbnl3 aGVyZSBvZiBsZWdhbCBzcGVlZHMuIFRodXMgdGhlIFNFVCBTUEVFRCBrZXl3b3JkIHRhYmxlCi0g ICAoInNldCBzcGVlZCA/IiB0byBzZWUgaXQpIGlzIGhhcmR3aXJlZCBiYXNlZCBvbiB0cmlhbCBh bmQgZXJyb3Igd2l0aAotICAgYWxsIGtub3duIHNlcmlhbCBzcGVlZHMsIHRoZSBtYXhpbXVtIGJl aW5nIDExNTIwMC4gSG93ZXZlciwgdG8gYWxsb3cKLSAgIGZvciB0aGUgcG9zc2liaWxpdHkgdGhh dCBvdGhlciBzcGVlZHMgbWlnaHQgYmUgYWxsb3dlZCBpbiB0aGUgZnV0dXJlCi0gICAob3Igd2l0 aCBkaWZmZXJlbnQgcG9ydCBkcml2ZXJzKSwgdGhlIFNFVCBTUEVFRCBjb21tYW5kIGZvciBVbml4 V2FyZSA3Ci0gICBvbmx5IGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhbnkgbnVtYmVyIGF0IGFsbDsg YSB3YXJuaW5nIGlzIHByaW50ZWQgaWYKLSAgIHRoZSBudW1iZXIgaXMgbm90IGluIHRoZSBsaXN0 LCBidXQgdGhlIG51bWJlciBpcyBhY2NlcHRlZCBhbnl3YXk7IHRoZQotICAgY29tbWFuZCBzdWNj ZWVkcyBpZiB0Y3NldHNwZWVkKCkgYWNjZXB0cyB0aGUgbnVtYmVyLCBhbmQgZmFpbHMKLSAgIG90 aGVyd2lzZS4KLQotICAgSW4gQy1LZXJtaXQgOC4wIHRlc3RpbmcsIGl0IHdhcyBub3RpY2VkIHRo YXQgdGhlIFBPU0lYIG1ldGhvZCBmb3IKLSAgIGhhbmdpbmcgdXAgdGhlIHBob25lIGJ5IGRyb3Bw aW5nIERUUiAoc2V0IHNwZWVkIDAsIHBhdXNlLCByZXN0b3JlCi0gICBzcGVlZCkgZGlkIG5vdCBh Y3R1YWxseSBkcm9wIERUUi4gVGhlIEFQSXMgZG8gbm90IHJldHVybiBhbnkgZXJyb3IKLSAgIGlu ZGljYXRpb24sIGJ1dCBub3RoaW5nIGhhcHBlbnMuIEkgY2hhbmdlZCB0dGhhbmcoKSB0byBza2lw IHRoZSBzcGVjaWFsCi0gICBjYXNlIEkgaGFkIG1hZGUgZm9yIFVuaXh3YXJlIGFuZCBpbnN0ZWFk IGZvbGxvdyB0aGUgbm9ybWFsIHBhdGg6IGlmCi0gICBUSU9DU0RUUiBpcyBkZWZpbmVkIHVzZSB0 aGF0LCBvdGhlcndpc2UgYmxhaCBibGFoLi4uIEl0IHR1cm5zIG91dAotICAgVElPQ1NEVFIgKmlz KiBkZWZpbmVkLCBhbmQgaXQgd29ya3MuCi0KLSAgIFNvIGluIFVuaXh3YXJlIChhdCBsZWFzdCBp biAyLjEuMykgd2UgY2FuIHJlYWQgbW9kZW0gc2lnbmFscywgaGFuZ3VwIGJ5Ci0gICB0b2dnbGlu ZyBEVFIsIGFuZCBzbyBvbiwgQlVULi4uIEJ1dCBvbmNlIHRoZSByZW1vdGUgaGFuZ3MgdXAgYW5k Ci0gICBDYXJyaWVyIGRyb3BzLCB0aGUgQVBJIGZvciByZWFkaW5nIG1vZGVtIHNpZ25hbHMgY2Vh c2VzIHRvIGZ1bmN0aW9uOwotICAgYWx0aG91Z2ggdGhlIGRldmljZSBpcyBzdGlsbCBvcGVuLCB0 aGUgVElPQ01HRVQgaW9jdGwgYWx3YXlzIHJhaXNlcwotICAgZXJybm8gNiA9IEVOWElPLCAiTm8g c3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyIuCi0KLSAgIE9sZCBidXNpbmVzczoKLQotICAgVXNpbmcg Qy1LZXJtaXQgNi4wIG9uIHRoZSBVbml4V2FyZSAxLjEgQXBwbGljYXRpb24gU2VydmVyLCBvbmUg dXNlcgotICAgcmVwb3J0ZWQgYSBzeXN0ZW0gcGFuaWMgd2hlbiB0aGUgZm9sbG93aW5nIHNjcmlw dCBwcm9ncmFtIGlzIGV4ZWN1dGVkOgotCi0gIHNldCBsaW5lIC9kZXYvdHR5NAotICBzZXQgc3Bl ZWQgOTYwMAotICBvdXRwdXQgXDEzCi0gIGNvbm5lY3QKLQotICAgVGhlIHBhbmljIGRvZXMgbm90 IGhhcHBlbiBpZiBhIFBBVVNFIGlzIGluc2VydGVkOgotCi0gIHNldCBsaW5lIC9kZXYvdHR5NAot ICBzZXQgc3BlZWQgOTYwMAotICBwYXVzZSAxCi0gIG91dHB1dCBcMTMKLSAgY29ubmVjdAotCi0g ICBUaGlzIGlzIHVzaW5nIGEgU3RhbGxpb24gRWFzeUlPIGNhcmQgaW5zdGFsbGVkIGFzIGJvYXJk IDAgb24gSVJRIDEyIG9uCi0gICBhIEdhdGV3YXkgMzg2IHdpdGggdGhlIFN0YWxsaW9uLXN1cHBs aWVkIGRyaXZlci4gVGhlIHByb2JsZW0gd2FzCi0gICByZXBvcnRlZCB0byBOb3ZlbGwgYW5kIFN0 YWxsaW9uIGFuZCAocmVwb3J0ZWRseSkgaXMgbm93IGZpeGVkLgotCi0zLjExLiBDLUtFUk1JVCBB TkQgQVBPTExPIFNSMTAKLQotICAgWyBbNDg1XVRvcCBdIFsgWzQ4Nl1Db250ZW50cyBdIFsgWzQ4 N11TZWN0aW9uIENvbnRlbnRzIF0gWyBbNDg4XU5leHQgXQotICAgWyBbNDg5XVByZXZpb3VzIF0K LQotICAgUmVwb3J0ZWRseSwgdmVyc2lvbiA1QSgxOTApLCB3aGVuIGJ1aWx0IHVuZGVyIEFwb2xs byBTUjEwIHVzaW5nICJtYWtlCi0gICBzcjEwLWJzZCIsIGNvbXBpbGVzLCBsaW5rcywgYW5kIGV4 ZWN1dGVzIE9LLCBidXQgbGVhdmVzIHRoZSB0ZXJtaW5hbAotICAgdW51c2FibGUgYWZ0ZXIgaXQg ZXhpdHMgLS0gdGhlICJjczciIG9yICJjczgiIChjaGFyYWN0ZXIgc2l6ZSkKLSAgIHBhcmFtZXRl ciBoYXMgYmVjb21lIGNzNS4gVGhlIHRlcm1pbmFsIG11c3QgYmUgcmVzZXQgZnJvbSBhbm90aGVy Ci0gICB0ZXJtaW5hbC4gQ2F1c2UgYW5kIGN1cmUgdW5rbm93bi4gU3VnZ2VzdGVkIHdvcmthcm91 bmQ6IFdyYXAgS2VybWl0IGluCi0gICBhIHNoZWxsIHNjcmlwdCBzb21ldGhpbmcgbGlrZToKLQot ICBrZXJtaXQgQCoKLSAgc3R0eSBzYW5lCi0KLTMuMTIuIEMtS0VSTUlUIEFORCBUQU5EWSBYRU5J WCAzLjAKLQotICAgWyBbNDkwXVRvcCBdIFsgWzQ5MV1Db250ZW50cyBdIFsgWzQ5Ml1TZWN0aW9u IENvbnRlbnRzIF0gWyBbNDkzXU5leHQgXQotICAgWyBbNDk0XVByZXZpb3VzIF0KLQotICAgQy1L ZXJtaXQgNy4wIHdhcyB0b28gYmlnIHRvIGJlIGJ1aWx0IG9uIFRhbmR5IFhlbml4LCBldmVuIGlu IGEgbWluaW11bQotICAgY29uZmlndXJhdGlvbjsgdmVyc2lvbiA2LjAgaXMgdGhlIGxhc3Qgb25l IHRoYXQgZml0cy4KLQotICAgUmVwb3J0ZWRseSwgaW4gQy1LZXJtaXQgNi4wLCBpZiB5b3UgdHlw ZSBsb3RzIG9mIEN0cmwtQydzIGR1cmluZwotICAgZXhlY3V0aW9uIG9mIHRoZSBpbml0aWFsaXph dGlvbiBmaWxlLCBnaG9zdCBLZXJtaXQgcHJvY2Vzc2VzIHdpbGwgYmUKLSAgIGNyZWF0ZWQsIGFu ZCB3aWxsIGNvbXBldGUgZm9yIHRoZSBrZXlib2FyZC4gVGhleSBjYW4gb25seSBiZSByZW1vdmVk Ci0gICB2aWEgImtpbGwgLTkiIGZyb20gYW5vdGhlciB0ZXJtaW5hbCwgb3IgYnkgcmVib290aW5n LiBEaWFnbm9zaXMgLS0KLSAgIHNvbWV0aGluZyBzdHJhbmdlIGhhcHBlbmluZyB3aXRoIHRoZSBT SUdJTlQgaGFuZGxlciB3aGlsZSB0aGUgcHJvY2VzcwotICAgaXMgcmVhZGluZyB0aGUgZGlyZWN0 b3J5IChpdCBzZWVtcyB0byBvY2N1ciBkdXJpbmcgdGhlIFNFVCBQUk9NUFQKLSAgIFtcdihkaXIp XSAuLi4gc2VxdWVuY2UpLiBDdXJlOiB1bmtub3duLiBXb3JrYXJvdW5kOiBkb24ndCBpbnRlcnJ1 cHQKLSAgIEMtS2VybWl0IHdoaWxlIGl0IGlzIGV4ZWN1dGluZyBpdHMgaW5pdCBmaWxlIG9uIHRo ZSBUYW5keSAxNi82MDAwLgotCi0zLjEzLiBDLUtFUk1JVCBBTkQgT1NGLzEgKERJR0lUQUwgVU5J WCkgKFRSVTY0IFVOSVgpCi0KLSAgIFsgWzQ5NV1Ub3AgXSBbIFs0OTZdQ29udGVudHMgXSBbIFs0 OTddU2VjdGlvbiBDb250ZW50cyBdIFsgWzQ5OF1OZXh0IF0KLSAgIFsgWzQ5OV1QcmV2aW91cyBd Ci0KLSAgIFdoaWxlIHB1dHRpbmcgdG9nZXRoZXIgYW5kIHRlc3RpbmcgQy1LZXJtaXQgOC4wLCBp dCB3YXMgZGlzY292ZXJlZCB0aGF0Ci0gICBiaW5hcmllcyBidWlsdCBmb3Igb25lIHZlcnNpb24g b2YgVHJ1NjQgVW5peCAoZS5nLiA0LjBHKSBtaWdodCBleGhpYml0Ci0gICB2ZXJ5IHN0cmFuZ2Ug YmVoYXZpb3IgaWYgcnVuIG9uIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgVHJ1NjQgVW5peCAoZS5n LgotICAgNS4xQSkuIFRoZSB0eXBpY2FsIHN5bXB0b20gd2FzIHRoYXQgYSBzZWN0aW9uIG9mIHRo ZSBpbml0aWFsaXphdGlvbgotICAgZmlsZSB3b3VsZCBiZSBza2lwcGVkLCBub3RhYmx5IGxvY2F0 aW5nIHRoZSBkaWFsaW5nIGFuZC9vciBuZXR3b3JrCi0gICBkaXJlY3RvcnkgYXMgd2VsbCBhcyBm aW5kaW5nIGFuZCBleGVjdXRpbmcgdGhlIGN1c3RvbWl6YXRpb24gZmlsZSwKLSAgIH4vLm15a2Vy bXJjLiBUaGlzIHByb2JsZW0gYWxzbyBpcyByZXBvcnRlZCB0byBvY2N1ciBvbiBUcnU2NCBVbml4 IDUuMAotICAgKFJldiA3MzIpIGV2ZW4gd2hlbiBydW5uaW5nIGEgQy1LZXJtaXQgYmluYXJ5IHRo YXQgd2FzIGJ1aWx0IHRoZXJlLgotICAgSG93ZXZlciwgdGhlIFRydTY0IDUuMUEgYmluYXJ5IHdv cmtzIGNvcnJlY3RseSBvbiA1LjAuIEdvIGZpZ3VyZS4KLQotICAgV2hlbiBtYWtpbmcgVGVsbmV0 IGNvbm5lY3Rpb25zIHRvIGEgRGlnaXRhbCBVbml4IG9yIFRydTY0IHN5c3RlbSwgYW5kCi0gICB5 b3VyIFRlbG5ldCBjbGllbnQgZm9yd2FyZHMgeW91ciB1c2VyIG5hbWUsIHRoZSBUZWxuZXQgc2Vy dmVyIGV2aWRlbnRseQotICAgc3R1ZmZzIHRoZSB1c2VybmFtZSBpbnRvIGxvZ2luJ3Mgc3RhbmRh cmQgaW5wdXQsIGFuZCB5b3Ugc2VlOgotCi0gIGxvZ2luOiBpdmFuCi0gIFBhc3N3b3JkOgotCi0g ICBUaGlzIGlzIGNsZWFybHkgZ29pbmcgdG8gcGxheSBoYXZvYyB3aXRoIHNjcmlwdHMgdGhhdCBs b29rIGZvcgotICAgImxvZ2luOiIuIFdvcmthcm91bmQgKHdoZW4gS2VybWl0IGlzIHlvdXIgVGVs bmV0IGNsaWVudCk6IFNFVCBMT0dJTgotICAgVVNFUiB0byBub3RoaW5nLCB0byBwcmV2ZW50IEtl cm1pdCBmcm9tIHNlbmRpbmcgeW91ciB1c2VyIElELgotCi0gICBCZWZvcmUgeW91IGNhbiB1c2Ug YSBzZXJpYWwgcG9ydCBvbiBhIG5ldyBEaWdpdGFsIFVuaXggc3lzdGVtLCB5b3UgbXVzdAotICAg cnVuIHV1Y3BzZXR1cCB0byBlbmFibGUgb3IgY29uZmlndXJlIHRoZSBwb3J0LiBFdmlkZW50bHkg dGhlIC9kZXYvdHR5MDAKLSAgIGFuZCAwMSBkZXZpY2VzIHRoYXQgYXBwZWFyIGluIHRoZSBjb25m aWd1cmF0aW9uIGFyZSBub3QgdXNhYmxlOwotICAgdXVjcHNldHVwIHR1cm5zIHRoZW0gaW50byAv ZGV2L3R0eWQwMCBhbmQgMDEsIHdoaWNoIGFyZS4gTm90ZSB0aGF0Ci0gICB1dWNwc2V0dXAgYW5k IG90aGVyIHV1Y3AtZmFtaWx5IHByb2dyYW1zIGFyZSBxdWl0ZSBwcmltaXRpdmUgLS0gdGhleQot ICAgb25seSBrbm93IGFib3V0IHNwZWVkcyB1cCB0byA5NjAwIGJwcyBhbmQgdGhlaXIgc2VsZWN0 aW9uIG9mIG1vZGVtcwotICAgZGF0ZXMgZnJvbSB0aGUgZWFybHkgMTk4MHMuIE5vbmUgb2YgdGhp cyBhZmZlY3RzIEtlcm1pdCwgdGhvdWdoIC0tIHdpdGgKLSAgIEMtS2VybWl0LCB5b3UgY2FuIHVz ZSBzcGVlZHMgdXAgdG8gMTE1MjAwIGJwcyAoYXQgbGVhc3QgaW4gRFU0LjAgYW5kCi0gICBsYXRl cikgYW5kIG1vZGVybiBtb2RlbXMgd2l0aCBoYXJkd2FyZSBmbG93IGNvbnRyb2wgYW5kIGFsbCB0 aGUgcmVzdC4KLQotICAgUmVwb3J0ZWRseSwgaWYgYSBtb2RlbSBpcyBzZXQgZm9yICZTMCAoYXNz ZXJ0IERTUiBhdCBhbGwgdGltZXMpLCB0aGUKLSAgIHN5c3RlbSByZXNldHMgb3IgZHJvcHMgRFRS IGV2ZXJ5IDMwIHNlY29uZHM7IHJlcG9ydGVkbHkgREVDIHNheXMgdG8gc2V0Ci0gICAmUzEuCi0K LSAgIERpZ2l0YWwgVW5peCAzLjIgZXZpZGVudGx5IHdhbnRzIHRvIGJlbGlldmUgeW91ciB0ZXJt aW5hbCBpcyBvbmUgbGluZQotICAgbG9uZ2VyIHRoYW4geW91IHNheSBpdCBpcywgZS5nLiB3aGVu IGEgIm1vcmUiIG9yICJtYW4iIGNvbW1hbmQgaXMKLSAgIGdpdmVuLiBUaGlzIGlzIGhhcyBub3Ro aW5nIHRvIGRvIHdpdGggQy1LZXJtaXQsIGJ1dCB0ZW5kcyB0byBhbm5veQotICAgdGhvc2Ugd2hv IHVzZSBLZXJtaXQgb3Igb3RoZXIgdGVybWluYWwgZW11bGF0b3JzIHRvIGFjY2VzcyBEaWdpdGFs IFVuaXgKLSAgIHN5c3RlbXMuIFdvcmthcm91bmQ6IHRlbGwgVW5peCB0byAic3R0eSByb3dzIDIz IiAob3Igd2hhdGV2ZXIpLgotCi0gICBSZXBvcnRlZGx5LCB0aGVyZSBpcyBzb21lIGJpemFycmUg YmVoYXZpb3Igd2hlbiB0cnlpbmcgdG8gdXNlIGEgdmVyc2lvbgotICAgb2YgQy1LZXJtaXQgYnVp bHQgb24gb25lIERpZ2l0YWwgVW5peCA0LjAgc3lzdGVtIG9uIGFub3RoZXIgb25lLAotICAgcG9z c2libHkgZHVlIHRvIGRpZmZlcmluZyBPUyBvciBsaWJyYXJ5IHJldmlzaW9uIGxldmVsczsgZm9y IGV4YW1wbGUsCi0gICB0aGUgaW5hYmlsaXR5IHRvIGNvbm5lY3QgdG8gY2VydGFpbiBUQ1AvSVAg aG9zdHMuIFNvbHV0aW9uOiByZWJ1aWxkCi0gICBDLUtlcm1pdCBmcm9tIHNvdXJjZSBjb2RlIG9u IHRoZSBzeXN0ZW0gd2hlcmUgeW91IHdpbGwgYmUgdXNpbmcgaXQuCi0KLSAgIERpZ2l0YWwgVW5p eCB0Z2V0c3RyKCkgY2F1c2VzIGEgc2VnbWVudGF0aW9uIGZhdWx0LiBDLUtlcm1pdCA3LjAgYWRk ZWQKLSAgICNpZmRlZnMgdG8gYXZvaWQgY2FsbGluZyB0aGlzIHJvdXRpbmUgaW4gRGlnaXRhbCBV bml4LiBBcyBhIHJlc3VsdCwgdGhlCi0gICBTQ1JFRU4gY29tbWFuZHMgYWx3YXlzIHNlbmQgQU5T SSBlc2NhcGUgc2VxdWVuY2VzIC0tIGV2ZW4gdGhvdWdoIGN1cnNlcwotICAga25vd3MgeW91ciBh Y3R1YWwgdGVybWluYWwgdHlwZS4KLQotICAgUmVwb3J0ZWRseSB0aGUgVHJ1NjQgVW5peCA0LjBF IDEwOTEgVGVsbmV0IHNlcnZlciBkb2VzIG5vdCB0b2xlcmF0ZQotICAgc3RyZWFtaW5nIHRyYW5z ZmVycyBpbnRvIGl0c2VsZiwgYXQgbGVhc3Qgbm90IHdoZW4gdGhlIHNlbmRpbmcgS2VybWl0Ci0g ICBpcyBvbiB0aGUgc2FtZSBsb2NhbCBuZXR3b3JrLiBTb2x1dGlvbjogdGVsbCBvbmUgS2VybWl0 IG9yIHRoZSBvdGhlcgotICAgKG9yIGJvdGgpIHRvICJzZXQgc3RyZWFtaW5nIG9mZiIuIFRoaXMg bWlnaHQgb3IgbWlnaHQgYmUgdGhlIGNhc2Ugd2l0aAotICAgZWFybGllciBhbmQvb3IgbGF0ZXIg VHJ1NjQsIERpZ2l0YWwgVW5peCwgYW5kIE9TRi8xIHJlbGVhc2VzLgotCi0zLjE0LiBDLUtFUk1J VCBBTkQgU0dJIElSSVgKLQotICAgWyBbNTAwXVRvcCBdIFsgWzUwMV1Db250ZW50cyBdIFsgWzUw Ml1TZWN0aW9uIENvbnRlbnRzIF0gWyBbNTAzXU5leHQgXQotICAgWyBbNTA0XVByZXZpb3VzIF0K LQotICAgU2VlIGFsc286Ci0gICAgICogVGhlIFs1MDVdY29tcC5zeXMuc2dpLm1pc2MgYW5kIFs1 MDZdY29tcC5zeXMuc2dpLmFkbWluIG5ld3Nncm91cHMuCi0gICAgICAgWzUwN11UaGUgU0dJIHdl YnNpdGUKLSAgICAgKiBUaGUgU0dJIEZBUToKLSAgICAgICAgICArIFs1MDhdaHR0cDovL3d3dy12 aXoudGFtdS5lZHUvfnNnaS1mYXEvCi0gICAgICAgICAgKyBbNTA5XWZ0cDovL3Zpei50YW11LmVk dS9wdWIvc2dpL2ZhcS8KLQotICAgQWJvdXQgSVJJWCB2ZXJzaW9uIG51bWJlcnM6ICJ1bmFtZSAt YSIgdGVsbHMgdGhlICJ0d28tZGlnaXQiIHZlcnNpb24KLSAgIG51bWJlciwgc3VjaCBhcyAiNS4z IiBvciAiNi41Ii4gVGhlIHRocmVlLWRpZ2l0IGZvcm0gY2FuIGJlIHNlZW4gd2l0aAotICAgInVu YW1lIC1SIi4gKHRoaXMgaW5mb3JtYXRpb24gaXMgdW5hdmFpbGFibGUgYXQgdGhlIHNpbXBsZSBB UEkgbGV2ZWwpLgotICAgU3VwcG9zZWRseSBhbGwgdGhyZWUtZGlnaXQgdmVyc2lvbnMgd2l0aGlu IHRoZSBzYW1lIHR3by1kaWdpdCB2ZXJzaW9uCi0gICAoZS5nLiA2LjUuMiwgNi41LjMpIGFyZSBi aW5hcnkgY29tcGF0aWJsZTsgaS5lLiBhIGJpbmFyeSBidWlsdCBvbiBhbnkKLSAgIG9uZSBvZiB0 aGVtIHNob3VsZCBydW4gb24gYWxsIG90aGVycy4gVGhlICJtIiBzdWZmaXggZGVub3RlcyBqdXN0 Ci0gICBwYXRjaGVzOyB0aGUgImYiIHN1ZmZpeCBpbmRpY2F0ZXMgdGhhdCBmZWF0dXJlcyB3ZXJl IGFkZGVkLgotCi0gICBBbiBJUklYIGJpbmFyeSBidWlsdCBvbiBsb3dlciBNSVBTIG1vZGVsIChJ bnN0cnVjdGlvbiBTZXQgQXJjaGl0ZWN0dXJlLAotICAgSVNBKSBjYW4gcnVuIG9uIGhpZ2hlciBt b2RlbHMsIGJ1dCBub3QgdmljZSB2ZXJzYToKLQotICAgICBNSVBTMSBSMzAwMCBhbmQgYmVsb3cK LSAgICAgTUlQUzIgUjQwMDAKLSAgICAgTUlQUzMgUjR4MDAKLSAgICAgTUlQUzQgUjUwMDAgYW5k IGFib3ZlCi0KLSAgIEZ1cnRoZXJtb3JlLCB0aGVyZSBhcmUgZGlmZmVyZW50IEFwcGxpY2F0aW9u IEJpbmFyeSBJbnRlcmZhY2VzIChBQklzKToKLQotICAgICBDT0ZGICAgIDMyIGJpdHMsIElSSVgg NS4zLCA1LjIsIDUuMSwgNC54IGFuZCBiZWxvdwotICAgICBvMzIgRUxGIDMyIGJpdHMsIElSSVgg NS4zLCA2LjAgLSA2LjUKLSAgICAgTjMyIEVMRiAzMiBiaXRzLCBJUklYIDYuMiAtIDYuNQotICAg ICBONjQgRUxGIDY0IGJpdHMsIElSSVggNi4yIC0gNi41Ci0KLSAgIFRodXMgYSBwcmVidWlsdCBJ UklYIGJpbmFyeSB3b3JrcyBvbiBhIHBhcnRpY3VsYXIgbWFjaGluZSBvbmx5IGlmIChhKQotICAg dGhlIG1hY2hpbmUncyBJUklYIHZlcnNpb24gKHRvIG9uZSBkZWNpbWFsIHBsYWNlKSBpcyBlcXVh bCB0byBvcgotICAgZ3JlYXRlciB0aGFuIHRoZSB2ZXJzaW9uIHVuZGVyIHdoaWNoIHRoZSBiaW5h cnkgd2FzIGJ1aWx0OyAoYikgdGhlCi0gICBtYWNoaW5lJ3MgTUlQUyBsZXZlbCBpcyBncmVhdGVy IG9yIGVxdWFsIHRvIHRoYXQgb2YgdGhlIGJpbmFyeTsgYW5kIChjKQotICAgdGhlIG1hY2hpbmUg c3VwcG9ydHMgdGhlIEFCSSBvZiB0aGUgYmluYXJ5LiBJZiBhbGwgdGhyZWUgY29uZGl0aW9ucyBh cmUKLSAgIG5vdCBzYXRpc2ZpZWQsIG9mIGNvdXJzZSwgeW91IGNhbiBidWlsZCBhIGJpbmFyeSB5 b3Vyc2VsZiBmcm9tIHNvdXJjZQotICAgY29kZSBzaW5jZSwgdW5saWtlIHNvbWUgb3RoZXIgVW5p eCB2ZW5kb3JzLCBTR0kgZG9lcyBzdXBwbHkgYSBDCi0gICBjb21waWxlciBhbmQgbGlicmFyaWVz LgotCi0gICBTR0kgZGlkIG5vdCBzdXBwbHkgYW4gQVBJIGZvciBoYXJkd2FyZSBmbG93IGNvbnRy b2wgcHJpb3IgdG8gSVJJWCA1LjIuCi0gICBDLUtlcm1pdCA2LjEgYW5kIGhpZ2hlciBmb3IgSVJJ WCA1LjIgYW5kIGhpZ2hlciBzdXBwb3J0cyBoYXJkd2FyZSBmbG93Ci0gICBjb250cm9sIGluIHRo ZSBub3JtYWwgd2F5LCB2aWEgInNldCBmbG93IHJ0cy9jdHMiLgotCi0gICBGb3IgaGFyZHdhcmUg ZmxvdyBjb250cm9sIG9uIGVhcmxpZXIgSVJJWCBhbmQvb3IgQy1LZXJtaXQgdmVyc2lvbnMsIHVz ZQotICAgdGhlIHR0eWYqIChtb2RlbSBjb250cm9sIEFORCBoYXJkd2FyZSBmbG93IGNvbnRyb2wp IGRldmljZXMgYW5kIG5vdCB0aGUKLSAgIHR0eWQqIChkaXJlY3QpIG9yIHR0eW0qIChtb2RlbSBj b250cm9sIGJ1dCBubyBoYXJkd2FyZSBmbG93IGNvbnRyb2wpCi0gICBvbmVzLCBhbmQgb2J0YWlu IHRoZSBwcm9wZXIgImhhcmR3YXJlIGhhbmRzaGFraW5nIiBjYWJsZSBmcm9tIFNHSSwKLSAgIHdo aWNoIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBvbmVzIGZvciB0aGUgTWFjaW50b3NoIGFuZCBO ZVhUIGV2ZW4KLSAgIHRob3VnaCB0aGV5IGxvb2sgdGhlIHNhbWUgKCJtYW4gc2VyaWFsIiBmb3Ig ZnVydGhlciBpbmZvKSBhbmQgdGVsbAotICAgS2VybWl0IHRvICJzZXQgZmxvdyBrZWVwIiBhbmQg InNldCBtb2RlbSBmbG93IHJ0cy9jdHMiLgotCi0gICBTZXJpYWwgc3BlZWRzIGhpZ2hlciB0aGFu IDM4NDAwIGFyZSBhdmFpbGFibGUgaW4gSVJJWCA2LjIgYW5kIGxhdGVyLCBvbgotICAgTy1jbGFz cyBtYWNoaW5lcyAoZS5nLiBPcmlnaW4sIE9jdGFuZSkgb25seSwgYW5kIGFyZSBzdXBwb3J0ZWQg YnkKLSAgIEMtS2VybWl0IDcuMCBhbmQgbGF0ZXIuIENvbW1hbmRzIHN1Y2ggYXMgInNldCBzcGVl ZCAxMTUyMDAiIG1heSBiZQotICAgZ2l2ZW4gb24gb3RoZXIgbW9kZWxzIChlLmcuIElyaXMsIElu ZHksIEluZGlnbykgYnV0IHdpbGwgZmFpbCBiZWNhdXNlCi0gICB0aGUgT1MgcmVwb3J0cyBhbiBp bnZhbGlkIHNwZWVkIGZvciB0aGUgZGV2aWNlLgotCi0gICBFeHBlcmltZW50YXRpb24gd2l0aCBi b3RoIElSSVggNS4zIGFuZCA2LjIgc2hvd3MgdGhhdCB3aGVuIGxvZ2dlZCBpbiB0bwotICAgSVJJ WCB2aWEgVGVsbmV0LCB0aGF0IHJlbW90ZS1tb2RlIEMtS2VybWl0IGNhbid0IHNlbmQgZmlsZXMg aWYgdGhlCi0gICBwYWNrZXQgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiA0MDk2OyB0aGUgVGVsbmV0 IHNlcnZlciBldmlkZW50bHkgaGFzCi0gICB0aGlzIHJlc3RyaWN0aW9uIChvciBidWcpLCBzaW5j ZSB0aGVyZSBpcyBubyBwcm9ibGVtIHNlbmRpbmcgbG9uZwotICAgcGFja2V0cyBvbiBzZXJpYWwg b3IgcmxvZ2luIGNvbm5lY3Rpb25zLiBIb3dldmVyLCBpdCBjYW4gcmVjZWl2ZSBmaWxlcwotICAg d2l0aCBubyBwcm9ibGVtIGlmIHRoZSBwYWNrZXQgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiA0MDk2 LiBBcyBhCi0gICB3b3JrYXJvdW5kLCB0aGUgRkFTVCBtYWNybyBmb3IgSVJJWCBpbmNsdWRlcyAi c2V0IHNlbmQgcGFja2V0LWxlbmd0aAotICAgNDAwMCIuIElSSVggNi41LjEgZG9lcyBub3QgaGF2 ZSB0aGlzIHByb2JsZW0sIHNvIGV2aWRlbnRseSBpdCB3YXMgZml4ZWQKLSAgIHNvbWUgdGltZSBh ZnRlciBJUklYIDYuMi4gVGVzdHMgc2hvdyBmaWxlLXRyYW5zZmVyIHNwZWVkcyBhcmUgYmV0dGVy Ci0gICAobm90IHdvcnNlKSB3aXRoIDhLIHBhY2tldHMgdGhhbiB3aXRoIDRLIHBhY2tldHMgZnJv bSBJUklYIDYuNS4xLgotCi0gICBSZXBvcnRlZGx5IHNvbWUgSW5keXMgaGF2ZSBiYWQgc2VyaWFs IHBvcnQgaGFyZHdhcmUuIElSSVggNS4yLCBmb3IKLSAgIGV4YW1wbGUsIG5lZWRzIHBhdGNoIDE1 MSB0byB3b3JrIGFyb3VuZCB0aGlzOyBvciB1cGdyYWRlIHRvIGEgbGF0ZXIKLSAgIHJlbGVhc2Uu IFNpbWlsYXJseSwgSVJJWCA1LjIgaGFzIHNldmVyYWwgcHJvYmxlbXMgd2l0aCBzZXJpYWwgaS9v LCBmbG93Ci0gICBjb250cm9sLCBldGMuIEFnYWluLCBwYXRjaCBvciB1cGdyYWRlLgotCi0gICBS ZXBvcnRlZGx5IG9uIG1hY2hpbmVzIHdpdGggSVJJWCA0LjAsIEtlcm1pdCBjYW5ub3QgYmUgc3Vz cGVuZGVkIGJ5Ci0gICB0eXBpbmcgdGhlIHN1c3BlbmQgKCJzd3RjaCIpIGNoYXJhY3RlciBpZiBp dCB3YXMgc3RhcnRlZCBmcm9tIGNzaCwgZXZlbgotICAgdGhvdWdoIG90aGVyIHByb2dyYW1zIGNh biBiZSBzdXNwZW5kZWQgdGhpcyB3YXksIGFuZCBldmVuIHRob3VnaCB0aGUgWgotICAgYW5kIFNV U1BFTkQgY29tbWFuZHMgc3RpbGwgd29yayBjb3JyZWN0bHkuIFRoaXMgaXMgZXZpZGVudGx5IGJl Y2F1c2UKLSAgIElSSVgncyBjc2ggZG9lcyBub3QgZGVsaXZlciB0aGUgU0lHVFNUUCBzaWduYWwg dG8gS2VybWl0LiBUaGUgcmVhc29uCi0gICBvdGhlciBwcm9ncmFtcyBjYW4gYmUgc3VzcGVuZGVk IGluIHRoZSBzYW1lIGVudmlyb25tZW50IGlzIHByb2JhYmx5Ci0gICB0aGF0IHRoZXkgZG8gbm90 IHRyYXAgU0lHVFNUUCB0aGVtc2VsdmVzLCBzbyB0aGUgc2hlbGwgaXMgZG9pbmcgdGhlCi0gICBz dXNwZW5kaW5nIHJhdGhlciB0aGFuIHRoZSBhcHBsaWNhdGlvbi4KLQotICAgQWxzbyBzZWUgbm90 ZXMgYWJvdXQgSVJJWCAzLnggaW4gdGhlIFs1MTBdQy1LZXJtaXQgZm9yIFVuaXgKLSAgIEluc3Rh bGxhdGlvbiBJbnN0cnVjdGlvbnMuCi0KLSAgIElmIHlvdSBoYXZlIHByb2JsZW1zIG1ha2luZyBU Q1AvSVAgY29ubmVjdGlvbnMgaW4gdmVyc2lvbnMgb2YgSVJJWAotICAgYnVpbHQgd2l0aCBHQ0Mg Mi45NS4yLCBzZWUgdGhlIGJ1Z3Mgc2VjdGlvbiBvZjoKLQotICBbNTExXWh0dHA6Ly9mcmVld2Fy ZS5zZ2kuY29tL0luc3RhbGxhYmxlL2djYy0yLjk1LjIuaHRtbC4KLQotICAgUmVwb3J0ZWRseSwg aWYgeW91IGFsbG93IGdjYyB0byBjb21waWxlIEMtS2VybWl0IG9uIElyaXggeW91IHNob3VsZCBi ZQotICAgYXdhcmUgdGhhdCB0aGVyZSBtaWdodCBiZSBwcm9ibGVtcyB3aXRoIHNvbWUgb2YgdGhl IG5ldHdvcmsgY29kZS4gVGhlCi0gICBzcGVjaWZpY3MgYXJlIGF0Ci0gICBbNTEyXWh0dHA6Ly9m cmVld2FyZS5zZ2kuY29tL0luc3RhbGxhYmxlL2djYy0yLjk1LjIuaHRtbDsgc2Nyb2xsIGRvd24K LSAgIHRvIHRoZSAia25vd24gYnVncyIgc2VjdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVu dC4KLQotMy4xNS4gQy1LRVJNSVQgQU5EIFRIRSBCRUJPWAotCi0gICBbIFs1MTNdVG9wIF0gWyBb NTE0XUNvbnRlbnRzIF0gWyBbNTE1XVNlY3Rpb24gQ29udGVudHMgXSBbIFs1MTZdTmV4dCBdCi0g ICBbIFs1MTddUHJldmlvdXMgXQotCi0gICBTZWUgYWxzbzogVGhlIFs1MThdY29tcC5zeXMuYmUg bmV3c2dyb3VwLgotCi0gICBUaGUgQmVCb3ggaGFzIGJlZW4gZGlzY29udGludWVkIGFuZCBCZU9T IHJlcG9zaXRpb25lZCBmb3IgUEMgcGxhdGZvcm1zLgotICAgVGhlIFBPU0lYIHBhcnRzIG9mIEJl T1MgYXJlIG5vdCBmaW5pc2hlZCwgbm9yIGlzIHRoZSBzb2NrZXRzIGxpYnJhcnksCi0gICB0aGVy ZWZvcmUgYSBmdWxseSBmdW5jdGlvbmFsIHZlcnNpb24gb2YgQy1LZXJtaXQgaXMgbm90IHBvc3Np YmxlLiBJbgotICAgdmVyc2lvbiA2LjAgb2YgQy1LZXJtaXQsIHdyaXR0ZW4gZm9yIEJlT1MgRFI3 LCBpdCB3YXMgcG9zc2libGUgdG86Ci0KLSAgICAgKiBzZXQgbGluZSAvZGV2L3NlcmlhbDIgKGFu ZCBwcm9iYWJseSB0aGUgb3RoZXIgc2VyaWFsIHBvcnRzKQotICAgICAqIHNldCBzcGVlZCAxMTUy MDAgKGFuZCBhdCBsZWFzdCBzb21lIG9mIHRoZSBsb3dlciBiYXVkIHJhdGVzKQotICAgICAqIGNv bm5lY3QKLSAgICAgKiBzZXQgbW9kZW0gdHlwZSBoYXllcyAoYW5kIGxpa2VseSBvdGhlcnMsIHRv bykKLSAgICAgKiBkaWFsIHBob25lLW51bWJlcgotICAgICAqIHNldCBzZW5kIHBhY2tldC1sZW5n dGggMjA0OCAob3RoZXIgbGVuZ3RocyBmb3IgYm90aCBzZW5kIGFuZAotICAgICAgIHJlY2VpdmUp Ci0gICAgICogc2V0IHJlY2VpdmUgcGFja2V0IGxlbmd0aCAyMDQ4Ci0gICAgICogc2V0IGZpbGUg dHlwZSBiaW5hcnkgKHRleHQgbW9kZSB3b3JrcywgdG9vKSAod2l0aCByZW1vdGUga2VybWl0Ci0g ICAgICAgc2Vzc2lvbiBpbiBzZXJ2ZXIgbW9kZSkKLSAgICAgKiBwdXQgYmVkcm9wLmpwZwotICAg ICAqIGdldCBiZWRyb3AuanBnCi0gICAgICogZ2V0IGJlZHJvcC5qcGcgYmVkcm9wLmpwZzIKLSAg ICAgKiBmaW5pc2gsIGJ5ZQotCi0gICBUaGUgZm9sbG93aW5nIGRvIG5vdCB3b3JrOgotICAgICAq IGtlcm1pdCBkb2VzIG5vdCBkZXRlY3QgbW9kZW0gaGFuZ3VwCi0gICAgICogIS9SVU4vUFVTSCBb Y29tbWFuZGxpbmUgY29tbWFuZF0KLSAgICAgKiBSdW5uaW5nIGtlcm1pdCBpbiByZW1vdGUgbW9k ZQotICAgICAqIFVzaW5nIG90aGVyIHByb3RvY29scyAoeC95L3ptb2RlbSkKLSAgICAgKiBUQ1Ag bmV0d29ya2luZyBpbnRlcmZhY2UgKEJlJ3MgVENQL0lQIEFQSSBoYXMgYSB3YXlzIHRvIGdvLCBz dGlsbCkKLQotICAgQy1LZXJtaXQgZG9lcyBub3Qgd29yayBvbiBCZU9TIERSOCBiZWNhdXNlIG9m IGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcKLSAgIEFQSXMuIFVuZm9ydHVuYXRlbHkgbm90IGVu b3VnaCBjaGFuZ2VzIHdlcmUgbWFkZSB0byBhbGxvdyB0aGUgcmVndWxhcgotICAgUE9TSVgtYmFz ZWQgQy1LZXJtaXQgdG8gd29yayBlaXRoZXIuIE5vdGU6IHRoZSBsYWNrIG9mIGEgZm9yaygpIHNl cnZpY2UKLSAgIHJlcXVpcmVzIHRoZSBzZWxlY3QoKS1iYXNlZCBDT05ORUNUIG1vZHVsZSwgYnV0 IHRoZXJlIGlzIG5vIHNlbGVjdCgpLgotICAgVGhlcmUgaXMgYSBzZWxlY3QoKSBpbiBEUjgsIGJ1 dCBpdCBkb2Vzbid0IHdvcmsuCi0KLSAgIEMtS2VybWl0IDcuMCB3YXMgYnVpbHQgZm9yIEJlT1Mg NC41IGFuZCB3b3JrcyBpbiByZW1vdGUgbW9kZS4gSXQgZG9lcwotICAgbm90IGluY2x1ZGUgbmV0 d29ya2luZyBzdXBwb3J0IHNpbmNlIHRoZSBBUElzIGFyZSBzdGlsbCBub3QgdGhlcmUuIEl0Ci0g ICBpcyBub3Qga25vd24gaWYgZGlhbGluZyBvdXQgd29ya3MsIGJ1dCBwcm9iYWJseSBub3QuIEJl IGV4cGVydHMgYXJlCi0gICB3ZWxjb21lIHRvIGxlbmQgYSBoYW5kLgotCi0zLjE2LiBDLUtFUk1J VCBBTkQgREcvVVgKLQotICAgWyBbNTE5XVRvcCBdIFsgWzUyMF1Db250ZW50cyBdIFsgWzUyMV1T ZWN0aW9uIENvbnRlbnRzIF0gWyBbNTIyXU5leHQgXQotICAgWyBbNTIzXVByZXZpb3VzIF0KLQot ICAgU29tZWJvZHkgZG93bmxvYWRlZCB0aGUgQy1LZXJtaXQgNi4wIGJpbmFyeSBidWlsdCB1bmRl ciBERy9VWCA1LjQwIGFuZAotICAgcmFuIGl0IHVuZGVyIERHL1VYIDUuNFIzLjEwIC0tIGl0IHdv cmtlZCBPSyBleGNlcHQgdGhhdCBmaWxlIGRhdGVzIGZvcgotICAgaW5jb21pbmcgZmlsZXMgd2Vy ZSBhbGwgd3JpdHRlbiBhcyAxIEphbiAxOTcwLiBDYXVzZSBhbmQgY3VyZSB1bmtub3duLgotICAg V29ya2Fyb3VuZDogU0VUIEFUVFJJQlVURSBEQVRFIE9GRi4gQmV0dGVyOiBVc2UgYSB2ZXJzaW9u IG9mIEMtS2VybWl0Ci0gICBidWlsdCB1bmRlciBhbmQgZm9yIERHL1VYIDUuNFIzLjEwLgotCi0z LjE3LiBDLUtFUk1JVCBBTkQgU0VRVUVOVCBEWU5JWAotCi0gICBbIFs1MjRdVG9wIF0gWyBbNTI1 XUNvbnRlbnRzIF0gWyBbNTI2XVNlY3Rpb24gQ29udGVudHMgXSBbIFs1MjddTmV4dCBdCi0gICBb IFs1MjhdUHJldmlvdXMgXQotCi0gICBSZXBvcnRlZGx5LCB3aGVuIGNvbWluZyBpbnRvIGEgU2Vx dWVudCBVbml4IChEWU5JWCkgc3lzdGVtIHRocm91Z2ggYW4KLSAgIFguMjUgY29ubmVjdGlvbiwg S2VybWl0IGRvZXNuJ3Qgd29yayByaWdodCBiZWNhdXNlIHRoZSBTZXF1ZW50J3MKLSAgIEZJT05S RUFEIGlvY3RsIHJldHVybnMgaW5jb3JyZWN0IGRhdGEuIFRvIHdvcmsgYXJvdW5kLCB1c2UgdGhl Ci0gICAxLWNoYXJhY3Rlci1hdC1hLXRpbWUgdmVyc2lvbiBvZiBteXJlYWQoKSBpbiBja3V0aW8u YyAoaS5lLiB1bmRlZmluZQotICAgTVlSRUFEIGluIGNrdXRpby5jIGFuZCByZWJ1aWxkIHRoZSBw cm9ncmFtKS4gVGhpcyBpcyB1bnNhdGlzZnlpbmcKLSAgIGJlY2F1c2UgdHdvIHZlcnNpb25zIG9m IHRoZSBwcm9ncmFtIHdvdWxkIGJlIG5lZWRlZCAtLSBvbmUgZm9yIHVzZSBvdmVyCi0gICBYLjI1 LCBhbmQgdGhlIG90aGVyIGZvciBzZXJpYWwgYW5kIFRDUC9JUCBjb25uZWN0aW9ucy4KLQotMy4x OC4gQy1LRVJNSVQgQU5EIEZSRUVCU0QsIE9QRU5CU0QsIGFuZCBORVRCU0QKLQotICAgWyBbNTI5 XVRvcCBdIFsgWzUzMF1Db250ZW50cyBdIFsgWzUzMV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbNTMy XU5leHQgXQotICAgWyBbNTMzXVByZXZpb3VzIF0KLQotICAgU29tZSBOZWJCU0QgdXNlcnMgaGF2 ZSByZXBvcnRlZCBkaWZmaWN1bHR5IGVzY2FwaW5nIGJhY2sgZnJvbSBDT05ORUNUCi0gICBtb2Rl LCB1c3VhbGx5IHdoZW4gcnVubmluZyBOZXRCU0Qgb24gbm9uLVBDIGhhcmR3YXJlLiBQcm9iYWJs eSBhCi0gICBrZXlib2FyZCBpc3N1ZS4KLQotICAgTmV0QlNEIHVzZXJzIGhhdmUgYWxzbyByZXBv cnRlZCB0aGF0IEMtS2VybWl0IGRvZXNuJ3QgcG9wIGJhY2sgdG8gdGhlCi0gICBwcm9tcHQgaWYg dGhlIG1vZGVtIGRyb3BzIGNhcnJpZXIuIFRoaXMgbmVlZHMgdG8gYmUgY2hlY2tlZCBvdXQgJiBm aXhlZAotICAgaWYgcG9zc2libGUuCi0KLSAgIChBbGwgdGhlIGFib3ZlIHNlZW1zIHRvIHdvcmsg cHJvcGVybHkgaW4gQy1LZXJtaXQgNy4wIGFuZCBsYXRlci4pCi0KLTMuMTkuIEMtS0VSTUlUIEFO RCBNQUMgT1MgWAotCi0gICBbIFs1MzRdVG9wIF0gWyBbNTM1XUNvbnRlbnRzIF0gWyBbNTM2XVNl Y3Rpb24gQ29udGVudHMgXSBbIFs1MzddTmV4dCBdCi0gICBbIFs1MzhdUHJldmlvdXMgXQotCi0g ICBNYWMgT1MgWCBpcyBBcHBsZSdzIDQuNEJTRCBVbml4IHZhcmlldHksIGNsb3NlbHkgcmVsYXRl ZCB0byBGcmVlQlNELAotICAgYnV0IGRpZmZlcmVudC4gInVuYW1lIC1hIiBpcyBzaW5ndWxhcmx5 IHVuaW5mb3JtYXRpdmUsIGFzIGluIExpbnV4LAotICAgZ2l2aW5nIG9ubHkgdGhlIERhcndpbiBr ZXJuZWwgdmVyc2lvbiBudW1iZXIuIFRoZSB3YXkgdG8gZmluZCBvdXQgdGhlCi0gICBhY3R1YWwg TWFjIE9TIFggdmVyc2lvbiBpcyB3aXRoCi0KLSAgICAgL3Vzci9iaW4vc3dfdmVycyAtcHJvZHVj dE5hbWUKLSAgICAgL3Vzci9iaW4vc3dfdmVycyAtcHJvZHVjdFZlcnNpb24KLQotICAgb3I6Ci0K LSAgICAgZmdyZXAgLUEgMSAnUHJvZHVjdFZlcnNpb24nCi0gICAgIC9TeXN0ZW0vTGlicmFyeS9D b3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlzdAotCi0gICBIZXJlIGFyZSBzb21lIHBvaW50 cyB0byBiZSBhd2FyZSBvZjoKLQotICAgICAqIEEgYmlnIGdvdGNoYSBmb3IgS2VybWl0IHVzZXJz IGlzIHRoYXQgTWFjIE9TIFggZG9lcyBub3Qgc3VwcG9ydAotICAgICAgIHNlcmlhbCBwb3J0cyBh bmQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBkb2Vzbid0IHN1cHBvcnQgaXRzCi0gICAgICAgYnVp bHQtaW4gbW9kZW0gZWl0aGVyLCBmb3IgYW55dGhpbmcgb3RoZXIgdGhhbiBtYWtpbmcgSW50ZXJu ZXQKLSAgICAgICBjb25uZWN0aW9ucy4gTWFjaW50b3NoZXMgY2FwYWJsZSBvZiBydW5uaW5nIE1h YyBPUyBYLCBzdWNoIGFzIHRoZQotICAgICAgIEc1IGFuZCBsYXRlciwgY29tZSB3aXRob3V0IHNl cmlhbCBwb3J0cyBhbmQgd2l0aG91dCBhbnkgQVBJcyB0bwotICAgICAgIHN1cHBvcnQgdGhlbSwg YW5kIGFsc28gd2l0aG91dCB0aGUgVVVDUCBmYW1pbHkgb2YgcHJvZ3JhbXMKLSAgICAgICAoaW5j bHVkaW5nIGN1KSwgbm9yIGFueSBzdGFuZGFyZCBmb3Igc2VyaWFsLXBvcnQgbG9ja2ZpbGUKLSAg ICAgICBkaXJlY3RvcnkuCi0gICAgICogRWFybHkgdmVyc2lvbnMgb2YgTWFjIE9TIFggY2FtZSB3 aXRob3V0IEN1cnNlcywgVGVybWxpYiwgb3IKLSAgICAgICBUZXJtaW5mbyBsaWJyYXJpZXMuIExh dGVyIHZlcnNpb25zIHNlZW0gdG8gaGF2ZSBuY3Vyc2VzIChpdCB3b3VsZAotICAgICAgIHNlZW0g dGhhdCBNYWMgT1MgWCAxMC4zLjkgd2FzIHRoZSBmaXJzdCBtYXR1cmUgYW5kIGNvbXBsZXRlIHZl cnNpb24KLSAgICAgICBvZiBNYWMgT1MgWCkuIEtlcm1pdCB1c2VzIGN1cnNlcyBmb3IgaXRzIGZp bGUtdHJhbnNmZXIgZGlzcGxheS4gU2VlCi0gICAgICAgZWxzZXdoZXJlIGFib3V0IGN1cnNlcy12 cy1uY3Vyc2VzIGNvbmZ1c2lvbi4KLSAgICAgKiBJbiB0aGUgSEZTKyBmaWxlIHN5c3RlbSwgZmls ZW5hbWVzIGFyZSBjYXNlLWZvbGRlZC4gVGh1cyAibWFrZWZpbGUiCi0gICAgICAgYW5kICJNYWtl ZmlsZSIgYXJlIHRoZSBzYW1lIGZpbGUuIFNvLCBmb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJl Ci0gICAgICAgc2VuZGluZyB0d28gZGlzdGluY3QgZmlsZXMsIEZvbyBhbmQgRk9PLCBmcm9tIChz YXkpIExpbnV4IHRvIE1hYyBPUwotICAgICAgIFguIFRoaXMgd2lsbCBwcm9kdWNlIGEgZmlsZSBj b2xsaXNpb24gdGhhdCB3aWxsIGJlIGhhbmRsZWQKLSAgICAgICBhY2NvcmRpbmcgdG8gTWFjIE9T IFggQy1LZXJtaXQncyBGSUxFIENPTExJU0lPTiBzZXR0aW5nLCB3aGljaCBieQotICAgICAgIGRl ZmF1bHQgaXMgQkFDS1VQLCBzbyB0aGUgTWFjIHdpbGwgd2luZCB1cCB3aXRoIGZpbGVzIGNhbGxl ZCBGT08KLSAgICAgICBhbmQgRm9vLn4xfi4KLSAgICAgKiBIU0YrIGZpbGVzIHRoYXQgYXJlIGNv bXBvc2VkIG9mIGEgcmVzb3VyY2UgZm9yayBhbmQgYSBkYXRhIGZvcmsuLi4KLSAgICAgICBJIGRv dWJ0IHRoYXQgQy1LZXJtaXQgZG9lcyBhbnl0aGluZyB1c2VmdWwgd2l0aCB0aGVtLiBUaGVyZSBp cyBubwotICAgICAgIGNvZGUgaW4gQy1LZXJtaXQgZm9yIHRyYWRpdGlvbmFsIHR3by1mb3JrZWQg TWFjaW50b3NoIGZpbGVzLCBidXQgaXQKLSAgICAgICBjb3VsZCBiZSBhZGRlZCBpZiB0aGVyZSBp cyBhbnkgZGVtYW5kIChjb2RlIGZvciB0aGlzIGV4aXN0ZWQgaW4KLSAgICAgICBbNTM5XU1hYyBL ZXJtaXQsIHRoZSBvbGQgcHJlLU1hYy1PUy1YIE1hY2ludG9zaCB2ZXJzaW9uIG9mCi0gICAgICAg Qy1LZXJtaXQpLgotICAgICAqIEluIGNhc2UgeW91IHdhbnQgdG8gdHJhbnNmZXIgYSB0cmFkaXRp b25hbCBNYWNpbnRvc2ggdGV4dCBmaWxlIChvcgotICAgICAgIGRhdGEgZm9yayBvZiBhIGZpbGUg dGhhdCBpcyBwbGFpbiB0ZXh0KSwgeW91IGNhbiB1c2UgdGhlc2UgQy1LZXJtaXQKLSAgICAgICBj b21tYW5kczoKLQotc2V0IGZpbGUgZW9sIGNyCi1zZXQgZmlsZSBjaGFyYWN0ZXItc2V0IGFwcGxl LXF1aWNrZHJhdwotc2VuZCAvdGV4dCBmaWxlbmFtZQotCi0gICAgICogRmlsZSBvciBwYXRobmFt ZXMgdGhhdCBpbmNsdWRlIHNwYWNlcyBtdXN0IGJlIGVuY2xvc2VkIGluIGVpdGhlcgotICAgICAg IGRvdWJsZXF1b3RlcyBvciBjdXJseSBicmFjZXMgaW4gQy1LZXJtaXQgY29tbWFuZHMuCi0gICAg ICogTWFjIE9TIFggY2FuIHVzZSBhIHRoaXJkLXBhcnR5IHBhY2thZ2UgbWFuYWdlciBjYWxsZWQg ImZpbmsiLgotICAgICAgIFZhcmlvdXMgZmluayBwYWNrYWdlcyBmb3IgQy1LZXJtaXQgYXJlIGZs b2F0aW5nIGFyb3VuZCB0aGF0IGFyZSBub3QKLSAgICAgICBzdGFuZGFyZCByZWxlYXNlcy4gRm9y IGV4YW1wbGUsIHRoZXJlJ3MgYSBDLUtlcm1pdCA4LjAuMjAxIHBhY2thZ2UKLSAgICAgICBpbiB3 aGljaCBDLUtlcm1pdCB3YXMgbW9kaWZpZWQgKGF0IGxlYXN0KSB0byB1c2UgYSBVVUNQIGxvY2tm aWxlCi0gICAgICAgZGlyZWN0b3J5IHRoYXQgZG9lcyBub3QgZXhpc3Qgb24gdmFuaWxsYSBNYWMg T1MgWCBzeXN0ZW1zLgotCi1NYWMgT1MgWCBhbmQgU2VyaWFsIFBvcnRzCi0KLSAgIEFwcGxlIGlz IGluIHRoZSBmb3JlZnJvbnQgb2YgY29tcGFuaWVzIHRoYXQgYmVsaWV2ZSBzZXJpYWwgcG9ydHMg aGF2ZQotICAgbm8gdXNlIGluIHRoZSBtb2Rlcm4gd29ybGQgYW5kIHNvIGhhcyBzaW1wbHkgZWxp bWluYXRlZCBhbGwgdHJhY2VzIG9mCi0gICB0aGVtIGZyb20gaXRzIG1hY2hpbmVzIGFuZCBPUy4g QnV0IG9mIGNvdXJzZSBzZXJpYWwgcG9ydHMgYXJlIHN0aWxsCi0gICBuZWVkZWQgdG8gY29ubmVj dCBub3Qgb25seSB0byBleHRlcm5hbCBtb2RlbXMsIGJ1dCBhbHNvIHRvIHRoZSBjb250cm9sCi0g ICBwb3J0cyBvZiBodWJzLCByb3V0ZXJzLCB0ZXJtaW5hbCBzZXJ2ZXJzLCBQQlhzLCBhbmQgc2lt aWxhciBkZXZpY2VzLAotICAgbm90IHRvIG1lbnRpb24gYmFyY29kZSByZWFkZXJzLCBQT1Mgc3lz dGVtcyBhbmQgY29tcG9uZW50cywgc3BlYWtpbmcKLSAgIGRldmljZXMsIGhhbmQgY2FsY3VsYXRv cnMgc3VjaCBhcyB0aGUgSFA0OCwgYXV0b21hdGVkIGZhY3RvcnktZmxvb3IKLSAgIGVxdWlwbWVu dCwgYW5kIHNjaWVudGlmaWMsIG1lZGljYWwsIGFuZCBsYWIgZXF1aXBtZW50ICh0byBuYW1lIGEg ZmV3KS4KLSAgIEFtb25nIHdvcmtlcnMgaW4gdGhlc2UgYXJlYXMsIHRoZXJlIGlzIGEgbmVlZCB0 byBhZGQgc2VyaWFsIHBvcnRzIGJhY2sKLSAgIG9udG8gdGhpcyBwbGF0Zm9ybSwgd2hpY2ggaXMg YmVpbmcgZmlsbGVkIGJ5IHRoaXJkLXBhcnR5IHByb2R1Y3RzIHN1Y2gKLSAgIGFzIHRoZSBbNTQw XUtleXNwYW4gSGlnaCBTcGVlZCBVU0IgU2VyaWFsIEFkYXB0ZXIgVVNBLTE5SFMsIHdoaWNoIGhh cyBhCi0gICBEQi05IG1hbGUgY29ubmVjdG9yLiBUbyB1c2UgdGhlIEtleXNwYW4gZGV2aWNlLCB5 b3UgbXVzdCBpbnN0YWxsIHRoZQotICAgYWNjb21wYW55aW5nIGRldmljZSBkcml2ZXJzLCB3aGlj aCB3aW5kcyB1cCBnaXZpbmcgeW91IHNlcmlhbCBwb3J0cwotICAgd2l0aCBuYW1lcyBsaWtlIC9k ZXYvY3UuVVNBMTlIM2IxUDEuMSwgL2Rldi9jdS5LZXlTZXJpYWwxLAotICAgL2Rldi90dHkuS2V5 U2VyaWFsMS4KLQotICAgQy1LZXJtaXQgOS4wIHdvcmtzICJvdXQgb2YgdGhlIGJveCIgd2l0aCB0 aGlyZC1wYXJ0eSBzZXJpYWwgcG9ydHMgb24KLSAgIE1hYyBPUyBYLCBiZWNhdXNlIGl0IGlzIGJ1 aWx0IGJ5IGRlZmF1bHQgKCJtYWtlIG1hY29zeCIpIHdpdGhvdXQgdGhlCi0gICAiVVVDUCBsb2Nr ZmlsZSIgZmVhdHVyZS4gSWYgeW91IGhhdmUgQy1LZXJtaXQgOS4wIG9uIGEgcGVyc29uYWwKLSAg IE1hY2ludG9zaCwgeW91IGNhbiBza2lwIHRoZSBuZXh0IHNlY3Rpb24uCi0KLU1hYyBPUyBYIFNl cmlhbCBQb3J0cyB3aXRoIEMtS2VybWl0IDguMCBhbmQgZWFybGllcgotCi0gICBJbiBlYXJsaWVy IHZlcnNpb25zIG9mIEMtS2VybWl0LCB5b3UnbGwgbmVlZCB0byBlaXRoZXIgYnVpbGQgYSBzcGVj aWFsCi0gICAtRE5PVVVDUCB2ZXJzaW9uLCBvciBkZWFsIHdpdGggdGhlIFVVQ1AgcG9ydCBjb250 ZW50aW9uIHN5dGVtIGluCi0gICBbNTQxXWFsbCBpdHMgZ2xvcnkgKHRoaXMgaXMgdXN1YWxseSBh biBleGVyY2lzZSBpbiBmdXRpbGl0eSBiZWNhdXNlIGFueQotICAgb3RoZXIgYXBwbGljYXRpb25z IG9uIHlvdXIgTWFjIHRoYXQgdXNlIHRoZSBzZXJpYWwgcG9ydCB3aWxsIG5vdAotICAgbmVjZXNz YXJpbHkgZm9sbG93IHRoZSBzYW1lIGNvbnZlbnRpb25zKToKLQotICAgIDEuIHN1IChvciBzdWRv IC1zKQotICAgICAgIGNoZ3JwIHh4eHggL3Zhci9zcG9vbC9sb2NrCi0gICAgICAgY2htb2QgZyt3 IC92YXIvc3Bvb2wvbG9jawotICAgICAgIGNoZ3JwIHh4eHggL2Rldi9jdS4qCi0gICAgICAgKHdo ZXJlIHh4eHggaXMgdGhlIG5hbWUgb2YgdGhlIGdyb3VwIGZvciB1c2VycyB0byB3aG9tIHNlcmlh bC1wb3J0Ci0gICAgICAgYWNjZXNzIGlzIHRvIGJlIGdyYW50ZWQpLiBVc2UgImFkbWluIiBvciBv dGhlciBleGlzdGluZyBncm91cCwgb3IKLSAgICAgICBjcmVhdGUgYSBuZXcgZ3JvdXAgaWYgZGVz aXJlZC4gTkI6Ci0KLSAgICAgSW4gdGhlIGFic2VuY2Ugb2Ygb2ZmaWNpYWwgZ3VpZGFuY2UgZnJv bSBBcHBsZSBvciBhbnlvbmUgZWxzZSwgd2UKLSAgICAgY2hvb3NlIC92YXIvc3Bvb2wvbG9jayBh cyB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5IGJlY2F1c2UgdGhpcwotICAgICBkaXJlY3RvcnkgKGEp IGFscmVhZHkgZXhpc3RzIG9uIHZhbmlsbGEgTWFjIE9TIFggaW5zdGFsbGF0aW9ucywgYW5kCi0g ICAgIChiKSBpdCBpcyB0aGUgZGlyZWN0b3J5IHVzZWQgZm9yIHNlcmlhbC1wb3J0IGxvY2tmaWxl cyBvbiBtYW55IG90aGVyCi0gICAgIHBsYXRmb3Jtcy4KLSAgICAyLiBQdXQgYWxsIHVzZXJzIHdo byBuZWVkIGFjY2VzcyB0byB0aGUgc2VyaWFsIHBvcnQgaW4gdGhlIHNhbWUgZ3JvdXAuCi0gICAg My4gTWFrZSBzdXJlIHRoZSBzZXJpYWwgZGV2aWNlIGZpbGVzIHRoYXQgYXJlIHRvIGJlIHVzZWQg YnkgQy1LZXJtaXQKLSAgICAgICBoYXZlIGdyb3VwIHJlYWQtd3JpdGUgcGVybWlzc2lvbiBhbmQg KGlmIHlvdSBjYXJlKSBsYWNrIHdvcmxkCi0gICAgICAgcmVhZC13cml0ZSBwZXJtaXNzaW9uLCBl LmcuOgotCi0gICAgIGNobW9kIGcrcncsby1ydyAvZGV2L2N1LioKLQotICAgSWYgeW91IGRvIHRo ZSBhYm92ZSwgdGhlbiB0aGVyZSdzIG5vIG5lZWQgdG8gYmVjb21lIHJvb3QgdG8gdXNlIEtlcm1p dCwKLSAgIG9yIHRvIG1ha2UgS2VybWl0IHN1aWQgb3Igc2dpZC4gSnVzdCBkbyB0aGlzOgotCi1j aG1vZCA3NzUgd2VybWl0Ci1tdiB3ZXJtaXQgL3Vzci9sb2NhbC9rZXJtaXQKLQotICAgKG9yIHdo YXRldmVyIHNwb3QgaXMgbW9yZSBhcHByb3ByaWF0ZSwgZS5nLiAvdXNyL2Jpbi8pLiBGb3IgZ3Jl YXRlcgotICAgZGV0YWlsIGFib3V0IGluc3RhbGxhdGlvbiwgWzU0Ml1DTElDSyBIRVJFLgotCi0g ICBBbHRlcm5hdGl2ZWx5LCB0byBidWlsZCBhIHByZS05LjAgdmVyc2lvbiBvZiBDLUtlcm1pdCB3 aXRob3V0IFVVQ1AKLSAgIGxvY2tmaWxlIHN1cHBvcnQsIHNldCB0aGUgTk9VVUNQIGZsYWc7IGUu Zy4gKGZvciBNYWMgT1MgMTAuNCk6Ci0KLSAgICAgbWFrZSBtYWNvc3gxMC40IEtGTEFHUz0tRE5P VVVDUAotCi0gICBUaGlzIGNpcmN1bXZlbnRzIHRoZSBTRVQgUE9SVCBmYWlsdXJlICI/QWNjZXNz IHRvIGxvY2tmaWxlIGRpcmVjdG9yeQotICAgZGVuaWVkIi4gQnV0IGl0IGFsc28gc2FjcmlmaWNl cyBLZXJtaXQncyBhYmlsaXR5IHRvIGVuc3VyZSB0aGF0IG9ubHkKLSAgIG9uZSBjb3B5IG9mIEtl cm1pdCBjYW4gaGF2ZSB0aGUgZGV2aWNlIG9wZW4gYXQgYSB0aW1lLCBzaW5jZSBNYWMgT1MgWAot ICAgaXMgdGhlIHNhbWUgYXMgYWxsIG90aGVyIHZhcmlldGllcyBvZiBVbml4IGluIHRoYXQgZXhj bHVzaXZlIGFjY2VzcyB0bwotICAgc2VyaWFsIHBvcnRzIGlzIG5vdCBlbmZvcmNlZCBpbiBhbnkg d2F5LiBCdXQgaWYgaXQncyBmb3IgeW91ciBvd24KLSAgIGRlc2t0b3AgbWFjaGluZSB0aGF0IG5v Ym9keSBlbHNlIHVzZXMsIGEgLUROT1VVQ1AgdmVyc2lvbiBtaWdodCBiZQotICAgYWRlcXVhdGUg YW5kIHByZWZlcmFibGUgdG8gdGhlIGFsdGVybmF0aXZlcy4KLQotICAgVG8gYnVpbGQgQy1LZXJt aXQgOS4wIHdpdGggVVVDUCBzdXBwb3J0LCBkbzoKLQotICAgICBtYWtlIG1hY29zeCBLRkxBR1M9 LVVOT1VVQ1AKLQotICAgKG5vdGU6ICItVSIsIG5vdCAiLUQpLgotCi1SUy0yMzIgdmVyc3VzIFJT LTQyMgotCi0gICBNZWFud2hpbGUsIGJhY2sgd2hlbiBNYWNzIGhhZCBzZXJpYWwgcG9ydHMsIHRo ZXkgd2VyZSBub3QgUlMtMjMyICh0aGUKLSAgIHN0YW5kYXJkIGZvciBjb25uZWN0aW5nIGNvbXB1 dGVycyB3aXRoIG5lYXJieSBtb2RlbXMpIGJ1dCByYXRoZXIgUlMtNDIyCi0gICBvciAtNDIzIChh IHN0YW5kYXJkIGZvciBjb25uZWN0aW5nIHNlcmlhbCBkZXZpY2VzIG92ZXIgbG9uZ2VyCi0gICBk aXN0YW5jZXMpLiBNYWNpbnRvc2ggc2VyaWFsIHBvcnRzIGRvIG5vdCBzdXBwb3J0IG1vZGVtcyB3 ZWxsIGJlY2F1c2UKLSAgIHRoZXkgZG8gbm90IGhhdmUgZW5vdWdoIHdpcmVzIChvciBtb3JlIHBy b3Blcmx5IGluIHRoZSBjYXNlIFJTLTQyMi80MjMsCi0gICB3aXJlIHBhaXJzKSB0byBjb252ZXkg YSB1c2VmdWwgc3Vic2V0IG9mIG1vZGVtIHNpZ25hbHMuCi0KLSAgIEtleXNwYW4gYWxzbyBzZWxs cyBhIFs1NDNdVVNCIFR3aW4gU2VyaWFsIEFkYXB0ZXIgdGhhdCBnaXZlcyB5b3UgdHdvCi0gICBN aW5pLURpbjggUlMtNDIyIHBvcnRzLCB0aGF0IGFyZSBubyBiZXR0ZXIgKG9yIHdvcnNlKSBmb3Ig Y29tbXVuaWNhdGluZwotICAgd2l0aCBtb2RlbXMgb3Igc2VyaWFsIGRldmljZXMgdGhhbiBhIHJl YWwgTWFjIERpbi04IHBvcnQgd2FzLiBJbgotICAgZXNzZW5jZSwgeW91IGdldCBEYXRhIEluLCBE YXRhIE91dCwgYW5kIHR3byBtb2RlbSBzaWduYWxzLiBJdCBsb29rcyB0bwotICAgbWUgYXMgaWYg dGhlIHNpZ25hbHMgY2hvc2VuIGJ5IEtleXNwYW4gYXJlIFJUUyBhbmQgQ1RTLiBUaGlzIGdpdmVz IHlvdQotICAgaGFyZHdhcmUgZmxvdyBjb250cm9sLCBidXQgYXQgdGhlIGV4cGVuc2Ugb2YgQ2Fy cmllciBEZXRlY3QuIFRodXMgdG8KLSAgIHVzZSBDLUtlcm1pdCB3aXRoIGEgS2V5c3BhbiBVU0Ig c2VyaWFsIHBvcnQsIHlvdSBtdXN0IHRlbGwgQy1LZXJtaXQgdG86Ci0KLXNldCBtb2RlbSB0eXBl IG5vbmUgICAgICAgICAgICAgICAgOyAoZG9uJ3QgZXhwZWN0IGEgbW9kZW0pCi1zZXQgY2Fycmll ci13YXRjaCBvZmYgICAgICAgICAgICAgIDsgKGlnbm9yZSBjYXJyaWVyIHNpZ25hbCkKLXNldCBw b3J0IC9kZXYvY3UuVVNBMTlIM2IxUDEuMSAgICAgOyAob3BlbiB0aGUgcG9ydCkKLXNldCBmbG93 IHJ0cy9jdHMgICAgICAgICAgICAgICAgICAgOyAodGhpcyBpcyB0aGUgZGVmYXVsdCkKLXNldCBz cGVlZCA1NzYwMCAgICAgICAgICAgICAgICAgICAgOyAob3Igd2hhdGV2ZXIpCi1jb25uZWN0ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsgKG9yIERJQUwgb3Igd2hhdGV2ZXIpCi0KLSAgIFVz ZSBDdHJsLVxDIGluIHRoZSBub3JtYWwgbWFubmVyIHRvIGVzY2FwZSBiYWNrIHRvIHRoZSBDLUtl cm1pdD4KLSAgIHByb21wdC4gS2VybWl0IGNhbid0IHBvcCBiYWNrIHRvIGl0cyBwcm9tcHQgYXV0 b21hdGljYWxseSB3aGVuIENhcnJpZXIKLSAgIGRyb3BzIGJlY2F1c2UgdGhlcmUgaXMgbm8gQ2Fy cmllciBzaWduYWwgaW4gdGhlIHBoeXNpY2FsIGludGVyZmFjZS4KLQotICAgSGVyZSdzIGEgdHlw aWNhbCBzZXF1ZW5jZSBmb3IgY29ubmVjdGluZyB0byBDaXNjbyBkZXZpY2VzICh1c2luZyBhCi0g ICBtaXh0dXJlIG9mIGNvbW1hbmQtbGluZSBvcHRpb25zIGFuZCBpbnRlcmFjdGl2ZSBjb21tYW5k cyBhdCB0aGUKLSAgIHByb21wdCk6Ci0KLSQgY2tlcm1pdCAtbCAvZGV2L2N1LlVTQTE5SDNiMVAx LjEgLWIgOTYwMAotQy1LZXJtaXQ+IHNldCBjYXJyaWVyLXdhdGNoIG9mZgotQy1LZXJtaXQ+IGNv bm5lY3QKLQotICAgSW5zdHJ1Y3Rpb25zIGZvciB0aGUgYnVpbHQtaW4gbW9kZW0gKGlmIGFueSkg cmVtYWluIHRvIGJlIHdyaXR0ZW4gZHVlCi0gICB0byBsYWNrIG9mIGtub3dsZWRnZS4gSWYgeW91 IGNhbiBjb250cmlidXRlIGluc3RydWN0aW9ucywgaGludHMsIG9yCi0gICB0aXBzLCBwbGVhc2Ug WzU0NF1zZW5kIHRoZW0gaW4uCi0KLTMuMjAuIEMtS0VSTUlUIEFORCBDT0hFUkVOVAotCi0gICBb IFs1NDVdVG9wIF0gWyBbNTQ2XUNvbnRlbnRzIF0gWyBbNTQ3XVNlY3Rpb24gQ29udGVudHMgXSBb Ci0gICBbNTQ4XVByZXZpb3VzIF0KLQotICAgQWxzbyBzZWU6Ci0KLSAgICAgWzU0OV1odHRwOi8v d3d3LnVuaS1naWVzc2VuLmRlL2ZhcS9hcmNoaXYvY29oZXJlbnQtZmFxLmdlbmVyYWwvbXNnMDAw Ci0gICAwMC5odG1sCi0KLSAgIE1hcmsgV2lsbGlhbXMgQ09IRVJFTlQgd2FzIHBlcmhhcHMgdGhl IGZpcnN0IGNvbW1lcmNpYWwgVW5peC1iYXNlZAotICAgb3BlcmF0aW5nIHN5c3RlbSBmb3IgUENz LCBmaXJzdCBhcHBlYXJpbmcgYWJvdXQgMTk4MyBvciAtODQgZm9yIHRoZQotICAgUEMvWFQgKD8p LCBhbmQgcG9wdWxhciB1bnRpbCBhYm91dCAxOTkzLCB3aGVuIExpbnV4IHRvb2sgb3Zlci4KLSAg IEMtS2VybWl0LCBhcyBvZiB2ZXJzaW9uIDguMCwgaXMgc3RpbGwgY3VycmVudCBmb3IgQ09IRVJF TlQgMzg2IDQuMgotICAgKGkuZS4gb25seSBmb3IgaTM4NiBhbmQgYWJvdmUpLiBDdXJzZXMgaXMg aW5jbHVkZWQsIGJ1dCBsb3RzIG9mIG90aGVyCi0gICBmZWF0dXJlcyBhcmUgb21pdHRlZCBkdWUg dG8gbGFjayBvZiB0aGUgYXBwcm9wcmlhdGUgT1MgZmVhdHVyZXMsIEFQSXMsCi0gICBsaWJyYXJp ZXMsIGhhcmR3YXJlLCBvciBqdXN0IHNwYWNlOiBlLmcuIFRDUC9JUCwgZmxvYXRpbmctcG9pbnQK LSAgIGFyaXRobWV0aWMsIGxlYXJuZWQgc2NyaXB0cy4gRWFybGllciB2ZXJzaW9ucyBvZiBDT0hF UkVOVCByYW4gb24gODA4NgotICAgYW5kIDgwMjg2LCBidXQgdGhlc2UgYXJlIHRvIHNtYWxsIHRv IGJ1aWxkIG9yIHJ1biBDLUtlcm1pdCwgYnV0Ci0gICBHLUtlcm1pdCBzaG91bGQgYmUgT0sgKGFz IG1pZ2h0IGJlIGFuY2llbnQgdmVyc2lvbnMgb2YgQy1LZXJtaXQpLgotCi0gICBZb3UgY2FuIGFj dHVhbGx5IGJ1aWxkIGEgdmVyc2lvbiB3aXRoIGZsb2F0aW5nIHBvaW50IHN1cHBvcnQgLS0ganVz dAotICAgdGFrZSAtRE5PRkxPQVQgb3V0IG9mIENGTEFHUyBhbmQgYWRkIC1sbSB0byBMSUJTOyBO T0ZMT0FUIGlzIHRoZQotICAgZGVmYXVsdCBiZWNhdXNlIENPSEVSRU5UIHRlbmRzIHRvIHJ1biBv biBvbGQgUENzIHRoYXQgZG9uJ3QgaGF2ZQotICAgZmxvYXRpbmctcG9pbnQgaGFyZHdhcmUuIFlv dSBjYW4gYWxzbyBhZGQgIi1mIiB0byBDRkxBR1MgdG8gaGF2ZSBpdAotICAgbGluayBpbiB0aGUg ZmxvYXRpbmctcG9pbnQgZW11bGF0aW9uIGxpYnJhcnkuIEFsc28gSSdtIG5vdCBzdXJlIHdoeQot ICAgLUROT0xFQVJOIGlzIGluY2x1ZGVkLCBzaW5jZSBpdCBkZXBlbmRzIG9uIHNlbGVjdCgpLCB3 aGljaCBDT0hFUkVOVAotICAgaGFzLgotCi00LiBHRU5FUkFMIFVOSVgtU1BFQ0lGSUMgSElOVFMs IExJTUlUQVRJT05TLCBBTkQgQlVHUwotCi0gICBbIFs1NTBdVG9wIF0gWyBbNTUxXUNvbnRlbnRz IF0gWyBbNTUyXU5leHQgXSBbIFs1NTNdUHJldmlvdXMgXQotCi00LjEuIE1vZGVtIFNpZ25hbHMK LQotICAgVGhlcmUgc2VlbXMgdG8gYmUgYW4gZXNjYWxhdGluZyBkZW1hbmQgZm9yIHRoZSBhYmls aXR5IHRvIGNvbnRyb2wgImR1bWIKLSAgIHNlcmlhbCBkZXZpY2VzIiAoc3VjaCBhcyAic21hcnRj YXJkIHJlYWRlcnMiLCBiYXJjb2RlIHJlYWRlcnMsIGV0YykgYnkKLSAgIGV4cGxpY2l0bHkgbWFu aXB1bGF0aW5nIG1vZGVtIHNpZ25hbHMsIHBhcnRpY3VsYXJseSBSVFMuIFRoaXMgbWlnaHQKLSAg IGhhdmUgYmVlbiBlYXN5IHRvIGRvIGluIERPUywgd2hlcmUgdGhlcmUgaXMgbm8gb3BlcmF0aW5n IHN5c3RlbQotICAgc3RhbmRpbmcgYmV0d2VlbiB0aGUgYXBwbGljYXRpb24gYW5kIHRoZSBzZXJp YWwgZGV2aWNlLCBidXQgaXQgaXMKLSAgIHByb2JsZW1hdGljIGluIFVuaXgsIHdoZXJlIG1vZGVt IHNpZ25hbHMgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIHNlcmlhbAotICAgZGV2aWNlIGRyaXZlci4g SWYgdGhlIGRyaXZlciBkb2VzIG5vdCBwcm92aWRlIGFuIEFQSSBmb3IgZG9pbmcgdGhpcywKLSAg IHRoZW4gdGhlIGFwcGxpY2F0aW9uIGNhbid0IGRvIGl0LiBJZiBpdCBkb2VzIHByb3ZpZGUgYW4g QVBJLCBleHBlY3QgaXQKLSAgIHRvIGJlIHRvdGFsbHkgZGlmZmVyZW50IG9uIGVhY2ggVW5peCBw bGF0Zm9ybSwgc2luY2UgdGhlcmUgaXMgbm8KLSAgIHN0YW5kYXJkIGZvciB0aGlzLgotCi00LjIu IE5GUyBUcm91YmxlcwotCi0gICBCZWdpbm5pbmcgd2l0aCBDLUtlcm1pdCA2LjAsIHRoZSBkZWZh dWx0IEMtS2VybWl0IHByb21wdCBpbmNsdWRlcyB5b3VyCi0gICBjdXJyZW50ICh3b3JraW5nKSBk aXJlY3Rvcnk7IGZvciBleGFtcGxlOgotCi0gIFsvdXNyL29sZ2FdIEMtS2VybWl0PgotCi0gICAo SW4gQy1LZXJtaXQgNy4wIHRoZSBzcXVhcmUgYnJhY2VzIHdlcmUgcmVwbGFjZWQgYnkgcm91bmQg cGFyZW50aGVzZXMKLSAgIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIElTTyA2NDYgbmF0aW9uYWwg Y2hhcmFjdGVyIHNldHMuKQotCi0gICBJZiB0aGF0IGRpcmVjdG9yeSBpcyBvbiBhbiBORlMtbW91 bnRlZCBkaXNrLCBhbmQgTkZTIHN0b3BzIHdvcmtpbmcgb3IKLSAgIHRoZSBkaXNrIGJlY29tZXMg dW5hdmFpbGFibGUsIEMtS2VybWl0IHdpbGwgaGFuZyB3YWl0aW5nIGZvciBORlMgYW5kL29yCi0g ICB0aGUgZGlzayB0byBjb21lIGJhY2suIFdoZXRoZXIgeW91IGNhbiBpbnRlcnJ1cHQgQy1LZXJt aXQgd2hlbiBpdCBpcwotICAgaHVuZyB0aGlzIHdheSBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyBP Uy4gS2VybWl0IGhhcyBjYWxsZWQgdGhlCi0gICBvcGVyYXRpbmcgc3lzdGVtcydzIGdldGN3ZCgp IGZ1bmN0aW9uLCBhbmQgaXMgd2FpdGluZyBmb3IgaXQgdG8gcmV0dXJuLgotICAgU29tZSB2ZXJz aW9ucyBvZiBVbml4IChlLmcuIEhQLVVYIDkueCkgYWxsb3cgdGhpcyBmdW5jdGlvbiB0byBiZQot ICAgaW50ZXJydXB0ZWQgd2l0aCBTSUdJTlQgKEN0cmwtQyksIG90aGVycyAoc3VjaCBhcyBIUC1V WCA4LngpIGRvIG5vdC4gVG8KLSAgIGF2b2lkIHRoaXMgZWZmZWN0LCB5b3UgY2FuIGFsd2F5cyB1 c2UgU0VUIFBST01QVCB0byBjaGFuZ2UgeW91ciBwcm9tcHQKLSAgIHRvIHNvbWV0aGluZyB0aGF0 IGRvZXMgbm90IGludm9sdmUgY2FsbGluZyBnZXRjd2QoKSwgYnV0IGlmIE5GUyBpcyBub3QKLSAg IHJlc3BvbmRpbmcsIEMtS2VybWl0IHdpbGwgc3RpbGwgaGFuZyBhbnkgdGltZSB5b3UgZ2l2ZSBh IGNvbW1hbmQgdGhhdAotICAgcmVmZXJzIHRvIGFuIE5GUy1tb3VudGVkIGRpcmVjdG9yeS4gQWxz byBub3RlIHRoYXQgaW4gc29tZSBjYXNlcywgdGhlCi0gICB1bmludGVycnVwdGliaWxpdHkgb2Yg TkZTLWRlcGVuZGVudCBzeXN0ZW0gb3IgbGlicmFyeSBjYWxscyBpcwotICAgY29uc2lkZXJlZCBh IGJ1ZywgYW5kIHNvbWV0aW1lcyB0aGVyZSBhcmUgcGF0Y2hlcy4gRm9yIEhQLVVYLCBmb3IKLSAg IGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVwbGFjZWQgYnk6Ci0gIEhQLVVYIDEwLjIwICAgICBsaWJjICAgIFBIQ09f ODc2NCAgICAgICAgICAgICAgICAgICAgIFBIQ09fMTQ4OTEvUEhDT18xNjcyMwotICBIUC1VWCAx MC4xMCAgICAgbGliYyAgICBQSENPXzg3NjMgICAgICAgICAgICAgICAgICAgICBQSENPXzE0MjU0 L1BIQ09fMTY3MjIKLSAgSFAtVVggOS54ICAgICAgIGxpYmMgICAgUEhDT183NzQ3ICAgICAgIFM3 MDAgICAgICAgICAgUEhDT18xMzA5NQotICBIUC1VWCA5LnggICAgICAgbGliYyAgICBQSENPXzY3 NzkgICAgICAgUzgwMCAgICAgICAgICBQSENPXzExMTYyCi0KLTQuMy4gQy1LZXJtaXQgYXMgTG9n aW4gU2hlbGwKLQotICAgWW91IG1pZ2h0IGhhdmUgcmVhc29uIHRvIG1ha2UgQy1LZXJtaXQgdGhl IGxvZ2luIHNoZWxsIGZvciBhIHNwZWNpZmljCi0gICB1c2VyLCBieSBlbnRlcmluZyB0aGUgcGF0 aG5hbWUgb2YgS2VybWl0IChwb3NzaWJseSB3aXRoIGNvbW1hbmQtbGluZQotICAgc3dpdGNoZXMs IHN1Y2ggYXMgLXggdG8gcHV0IGl0IGluIHNlcnZlciBtb2RlKSBpbnRvIHRoZSBzaGVsbCBmaWVs ZCBvZgotICAgdGhlIC9ldGMvcGFzc3dkIGZpbGUuIFRoaXMgd29ya3MgcHJldHR5IHdlbGwuIElu IHNvbWUgY2FzZXMsIGZvcgotICAgInVsdGltYXRlIHNlY3VyaXR5IiwgeW91IG1pZ2h0IHdhbnQg dG8gdXNlIGEgdmVyc2lvbiBidWlsdCB3aXRoCi0gICAtRE5PUFVTSCAoc2VlIHRoZSBbNTU0XUNv bmZpZ3VyYXRpb25zIE9wdGlvbnMgZG9jdW1lbnQgZm9yIHRoaXMsIGJ1dAotICAgZXZlbiBpZiB5 b3UgZG9uJ3QsIHRoZW4gUFVTSGluZyBvciBzaGVsbGluZyBvdXQgZnJvbSBDLUtlcm1pdCBqdXN0 Ci0gICBicmluZ3MgdXAgYSBuZXcgY29weSBvZiBDLUtlcm1pdCAoYnV0IHdhcm5pbmc6IHRoaXMg ZG9lcyBub3QgcHJldmVudAotICAgdGhlIHVzZXIgZnJvbSBleHBsaWNpdGx5IHJ1bm5pbmcgYSBz aGVsbDsgZS5nLiAicnVuIC9iaW4vc2giOyB1c2UKLSAgIE5PUFVTSCB0byBwcmV2ZW50IHRoaXMp LgotCi00LjQuIEMtS2VybWl0IHZlcnN1cyBzY3JlZW4gYW5kIHNwbGl0dnQKLQotICAgQy1LZXJt aXQgZmlsZSB0cmFuc2ZlcnMgd2lsbCBwcm9iYWJseSBub3Qgd29yayBpZiBhdHRlbXB0ZWQgdGhy b3VnaCB0aGUKLSAgICJzcGxpdHZ0IiBvciBHTlUgInNjcmVlbiIgcHJvZ3JhbXMgYmVjYXVzZSB0 aGUgc2NyZWVuIG9wdGltaXphdGlvbiAob3IKLSAgIGF0IGxlYXN0LCBsaW5lIHdyYXBwaW5nLCBj b250cm9sLWNoYXJhY3RlciBhYnNvcnB0aW9uKSBkb25lIGJ5IHRoaXMKLSAgIHBhY2thZ2UgaW50 ZXJmZXJlcyB3aXRoIEtlcm1pdCdzIHBhY2tldHMuCi0KLSAgIFRoZSBzYW1lIGNhbiBhcHBseSB0 byBhbnkgb3RoZXIgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIHVzZXIncyBzZXNzaW9uCi0gICBp cyBjYXB0dXJlZCwgbW9uaXRvcmVkLCByZWNvcmRlZCwgb3IgbWFuaXB1bGF0ZWQuIEV4YW1wbGVz IGluY2x1ZGUgdGhlCi0gICAnc2NyaXB0JyBwcm9ncmFtIChmb3IgbWFraW5nIGEgdHlwZXNjcmlw dCBvZiBhIHNlc3Npb24pLCB0aGUKLSAgIENvbXB1dHJvbmljcyBQRUVLIHBhY2thZ2UgYW5kIHBr c2ggKGF0IGxlYXN0IHZlcnNpb25zIG9mIGl0IHByaW9yIHRvCi0gICAxLjlLKSwgYW5kIHNvIG9u LgotCi0gICBZb3UgbWlnaHQgdHJ5IHRoZSBmb2xsb3dpbmcgLS0gd2hhdCB3ZSBjYWxsICJkb29t c2RheSBLZXJtaXQiIC0tCi0gICBzZXR0aW5ncyB0byBwdXNoIHBhY2tldHMgdGhyb3VnaCBldmVu IHRoZSBkZW5zZXN0IGFuZCBtb3N0IG9ic3RydWN0aXZlCi0gICBjb25uZWN0aW9ucywgc3VjaCBh cyAic2NyZWVuIiBhbmQgInNwbGl0dnQiIChhbmQgY2VydGFpbiBraW5kcyBvZiAzMjcwCi0gICBw cm90b2NvbCBlbXVsYXRvcnMpOiBHaXZlIHRoZXNlIGNvbW1hbmRzIHRvIEJPVEggS2VybWl0IHBy b2dyYW1zOgotCi0gIFNFVCBGTE9XIE5PTkUKLSAgU0VUIENPTlRST0wgUFJFRklYIEFMTAotICBT RVQgUkVDRUlWRSBQQUNLRVQtTEVOR1RIIDcwCi0gIFNFVCBSRUNFSVZFIFNUQVJUIDYyCi0gIFNF VCBTRU5EIFNUQVJUIDYyCi0gIFNFVCBTRU5EIFBBVVNFIDEwMAotICBTRVQgQkxPQ0sgQgotCi0g ICBJZiBpdCB3b3JrcywgaXQgd2lsbCBiZSBzbG93LgotCi00LjUuIEMtS2VybWl0IHZlcnN1cyBE T1MgRW11bGF0b3JzCi0KLSAgIE9uIFVuaXggd29ya3N0YXRpb25zIGVxdWlwcGVkIHdpdGggRE9T IGVtdWxhdG9ycyBsaWtlIFNvZnRQQywgd2F0Y2ggb3V0Ci0gICBmb3Igd2hhdCB0aGVzZSBlbXVs YXRvcnMgZG8gdG8gdGhlIHNlcmlhbCBwb3J0IGRyaXZlcnMuIEFmdGVyIHVzaW5nIGEKLSAgIERP UyBlbXVsYXRvciwgcGFydGljdWxhcmx5IGlmIHlvdSB1c2UgaXQgdG8gcnVuIERPUyBjb21tdW5p Y2F0aW9ucwotICAgc29mdHdhcmUsIHlvdSBtaWdodCBoYXZlIHRvIHJlY29uZmlndXJlIHRoZSBz ZXJpYWwgcG9ydHMgZm9yIHVzZSBieQotICAgVW5peC4KLQotNC42LiBDLUtlcm1pdCB2ZXJzdXMg Sm9iIENvbnRyb2wKLQotICAgSW50ZXJydXB0aW9uIGJ5IEN0cmwtWiBtYWtlcyBVbml4IEMtS2Vy bWl0IHRyeSB0byBzdXNwZW5kIGl0c2VsZiB3aXRoCi0gICBraWxsKDAsU0lHVFNUUCksIGJ1dCBv bmx5IG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgam9iIGNvbnRyb2wsIGFzCi0gICBkZXRlcm1p bmVkIGJ5IHdoZXRoZXIgdGhlIHN5bWJvbCBTSUdUU1RQIGlzIGRlZmluZWQgKG9yIG9uIFBPU0lY IG9yCi0gICBTVlI0IHN5c3RlbXMsIGlmIHN5Y29uZihfU0NfSk9CX0NPTlRST0wpIG9yIF9QT1NJ WF9KT0JfQ09OVFJPTCBpbgotICAgYWRkaXRpb24gdG8gU0lHVFNUUCkuIEhvd2V2ZXIsIGlmIEtl cm1pdCBpcyBydW5uaW5nIHVuZGVyIGEgbG9naW4gc2hlbGwKLSAgIChzdWNoIGFzIHRoZSBvcmln aW5hbCBCb3VybmUgc2hlbGwpIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBqb2IgY29udHJvbCwKLSAg IHRoZSB1c2VyJ3Mgc2Vzc2lvbiBoYW5ncyBhbmQgbXVzdCBiZSBsb2dnZWQgb3V0IGZyb20gYW5v dGhlciB0ZXJtaW5hbCwKLSAgIG9yIGh1bmcgdXAgb24uIFRoZXJlIGlzIG5vIHdheSBLZXJtaXQg Y2FuIGRlZmVuZCBpdHNlbGYgYWdhaW5zdCB0aGlzLgotICAgSWYgeW91IHVzZSBhIG5vbi1qb2Ig Y29udHJvbCBzaGVsbCBvbiBhIGNvbXB1dGVyIHRoYXQgc3VwcG9ydHMgam9iCi0gICBjb250cm9s LCBnaXZlIGEgY29tbWFuZCBsaWtlICJzdHR5IHN1c3AgdW5kZWYiIHRvIGZpeCBpdCBzbyB0aGUg c3VzcGVuZAotICAgc2lnbmFsIGlzIG5vdCBhdHRhY2hlZCB0byBhbnkgcGFydGljdWxhciBrZXks IG9yIGdpdmUgdGhlIGNvbW1hbmQgU0VUCi0gICBTVVNQRU5EIE9GRiB0byBDLUtlcm1pdCwgb3Ig YnVpbGQgQy1LZXJtaXQgd2l0aCAtRE5PSkMuCi0KLTQuNy4gRGF0ZXMgYW5kIFRpbWVzCi0KLSAg IFVuaXggdGltZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB0eXBpY2FsbHkgYXBwbHkgbG9jYWxlIHJ1 bGVzIHRvIHJldHVybgotICAgbG9jYWwgdGltZSBpbiB0ZXJtcyBvZiBhbnkgc2Vhc29uYWwgdGlt ZSB6b25lIGNoYW5nZSBpbiBlZmZlY3QgZm9yIHRoZQotICAgZ2l2ZW4gZGF0ZS4gVGhlIGRpZmZk YXRlIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgc2FtZSB0aW1lem9uZSBydWxlcwotICAgYXJl IGluIGVmZmVjdCBmb3IgYm90aCBkYXRlcywgYnV0IGEgZGF0ZSB3aXRoIHRpbWV6b25lIGluZm9y bWF0aW9uIHdpbGwKLSAgIGJlIGNvbnZlcnRlZCB0byB0aGUgbG9jYWwgdGltZSB6b25lIGluIGVm ZmVjdCBhdCB0aGUgZ2l2ZW4gdGltZSwgZS5nLiwKLSAgIGEgR01UIHNwZWNpZmljYXRpb24gd2ls bCBwcm9kdWNlIGVpdGhlciBhIFN0YW5kYXJkIFRpbWUgb3IgRGF5bGlnaHQKLSAgIFNhdmluZ3Mg VGltZSwgZGVwZW5kaW5nIG9uIHdoaWNoIGFwcGxpZXMgYXQgdGhlIGdpdmVuIHRpbWUuIEFuIGV4 YW1wbGUKLSAgIHVzaW5nIHRoZSAyMDAxIHNlYXNvbmFsIGNoYW5nZSBmcm9tIEVEVCAoLTA0MDAp IHRvIEVTVCAoLTA1MDApOgotCi0gIEMtS2VybWl0PiBEQVRFIDIwMDExMDI4IDA1OjAxOjAyIEdN VCAgOyBFRFQKLSAgMjAwMTEwMjggMDE6MDE6MDIKLSAgQy1LZXJtaXQ+IERBVEUgMjAwMTEwMjgg MDY6MDE6MDIgR01UICA7IEVTVAotICAyMDAxMTAyOCAwMTowMTowMgotICBDLUtlcm1pdD4KLQot ICAgYnV0IHRoZSBpbXBsaWNpdCBjaGFuZ2UgaW4gdGltZXpvbmUgb2Zmc2V0IGlzIG5vdCByZWNv Z25pemVkOgotCi0gIEMtS2VybWl0PiBlY2hvIFxmZGlmZmRhdGUoMjAwMTEwMjggMDU6MDE6MDIg R01ULCAyMDAxMTAyOCAwNjowMTowMiBHTVQpCi0gICswOjAwCi0gIEMtS2VybWl0PgotCi0gICBE YXRlL3RpbWUgYXJpdGhtZXRpYywgb2Zmc2V0cywgZGVsdGEgdGltZXMsIGFuZCB0aW1lem9uZSBz dXBwb3J0IGFyZQotICAgbmV3IHRvIEMtS2VybWl0IDguMCwgYW5kIG1pZ2h0IGJlIGV4cGVjdGVk IHRvIGV2b2x2ZSBhbmQgaW1wcm92ZSBpbgotICAgc3Vic2VxdWVudCByZWxlYXNlcy4KLQotICAg T24gc29tZSBwbGF0Zm9ybXMsIGZpbGVzIGRvd25sb2FkZWQgd2l0aCBIVFRQIHJlY2VpdmUgdGhl IGN1cnJlbnQKLSAgIHRpbWVzdGFtcCwgcmF0aGVyIHRoYW4gdGhlIEhUVFAgIkxhc3QgTW9kaWZp ZWQiIHRpbWUgKHRoaXMgY2FuIGJlIGZpeGVkCi0gICBieSBpbmNsdWRpbmcgdXRpbWUuaCwgZS5n LiBpbiBTdW5PUyBhbmQgVHJ1NjQuLi4pLgotCi00LjguIFBzZXVkb3Rlcm1pbmFscwotCi0gICBU aGUgU1NIIGFuZCBQVFkgY29tbWFuZHMgd29yayBieSBhc3NpZ25pbmcgYSBwc2V1ZG90ZXJtaW5h bCBhbmQgcmVhZGluZwotICAgYW5kIHdyaXRpbmcgZnJvbSBpdC4gUGVyZm9ybWFuY2UgdmFyaWVz IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWMKLSAgIHBsYXRmb3JtIHJhbmdpbmcgZnJvbSB2ZXJ5 IGZhc3QgdG8gdmVyeSBmbG93LgotCi0gICBTU0ggYW5kIFBUWSBjb21tYW5kcyBjYW4gZmFpbCBp ZiAoYSkgYWxsIHBzZXVkb3Rlcm1pbmFscyBhcmUgaW4gdXNlOyBvcgotICAgKGIpIHlvdSBkbyBu b3QgaGF2ZSByZWFkL3dyaXRlIGFjY2VzcyB0byB0aGUgcHNldWRvdGVybWluYWwgdGhhdCB3YXMK LSAgIGFzc2lnbmVkLiBBbiBleGFtcGxlIG9mIChiKSB3YXMgcmVwb3J0ZWQgd2l0aCB0aGUgWmlw c2xhY2sgU2xhY2t3YXJlCi0gICBMaW51eCBkaXN0cmlidXRpb24sIGluIHdoaWNoIHRoZSBwc2V1 ZG90ZXJtaW5hbHMgd2VyZSBjcmVhdGVkIHdpdGgKLSAgIGNydy1yLS1yLS0gcGVybWlzc2lvbiwg aW5zdGVhZCBvZiBjcnctcnctcnctLgotCi00LjkuIE1pc2NlbGxhbmVvdXMKLQotICAgICAqIFJl cG9ydGVkbHksIHRoZSBVbml4IEMtS2VybWl0IHNlcnZlciwgdW5kZXIgc29tZSBjb25kaXRpb25z LCBvbgotICAgICAgIGNlcnRhaW4gcGFydGljdWxhciBzeXN0ZW1zLCBmYWlscyB0byBsb2cgb3V0 IGl0cyBsb2dpbiBzZXNzaW9uIHVwb24KLSAgICAgICByZWNlaXB0IG9mIGEgQllFIGNvbW1hbmQu IEJlZm9yZSByZWx5aW5nIG9uIHRoZSBCWUUgY29tbWFuZAotICAgICAgIHdvcmtpbmcsIHRlc3Qg aXQgYSBmZXcgdGltZXMgdG8gbWFrZSBzdXJlIGl0IHdvcmtzIG9uIHlvdXIgc3lzdGVtOgotICAg ICAgIHRoZXJlIG1pZ2h0IGJlIHN5c3RlbSBjb25maWd1cmF0aW9uIG9yIHNlY3VyaXR5IG1lY2hh bmlzbXMgdG8KLSAgICAgICBwcmV2ZW50IGFuIGluZmVyaW9yIHByb2Nlc3MgKGxpa2UgS2VybWl0 KSBmcm9tIGtpbGxpbmcgYSBzdXBlcmlvcgotICAgICAgIG9uZSAobGlrZSB0aGUgbG9naW4gc2hl bGwpLgotICAgICAqIE9uIEFUJlQgNzMwMCAoM0IxKSBtYWNoaW5lcywgeW91IG1pZ2h0IGhhdmUg dG8gInN0dHkgbmwxIiBiZWZvcmUKLSAgICAgICBzdGFydGluZyBDLUtlcm1pdC4gRG8gdGhpcyBp ZiBjaGFyYWN0ZXJzIGFyZSBsb3N0IGR1cmluZwotICAgICAgIGNvbW11bmljYXRpb25zIG9wZXJh dGlvbnMuCi0gICAgICogVW5kZXIgdGhlIGJhc2ggc2hlbGwgKHZlcnNpb25zIHByaW9yIHRvIDEu MDcgZnJvbSBDV1JVKSwgInB1c2hpbmciCi0gICAgICAgdG8gYW4gaW5mZXJpb3Igc2hlbGwgYW5k IHRoZW4gZXhpdGluZyBiYWNrIHRvIEtlcm1pdCBsZWF2ZXMgS2VybWl0Ci0gICAgICAgaW4gdGhl IGJhY2tncm91bmQgc3VjaCB0aGF0IGl0IG11c3QgYmUgZXhwbGljaXRseSBmZydkLiBUaGlzIGlz Ci0gICAgICAgcmVwb3J0ZWRseSBmaXhlZCBpbiB2ZXJzaW9uIDEuMDcgb2YgYmFzaCAoYW5kIGRl ZmluaXRlbHkgaW4gbW9kZXJuCi0gICAgICAgYmFzaCB2ZXJzaW9ucykuCi0KLTUuIElOSVRJQUxJ WkFUSU9OIEFORCBDT01NQU5EIEZJTEVTCi0KLSAgIFsgWzU1NV1Ub3AgXSBbIFs1NTZdQ29udGVu dHMgXSBbIFs1NTddTmV4dCBdIFsgWzU1OF1QcmV2aW91cyBdCi0KLSAgIEMtS2VybWl0J3MgaW5p dGlhbGl6YXRpb24gZmlsZSBmb3IgVW5peCBpcyAua2VybXJjIChsb3dlcmNhc2UsIHN0YXJ0cwot ICAgd2l0aCBwZXJpb2QpIGluIHlvdXIgaG9tZSBkaXJlY3RvcnksIHVubGVzcyBLZXJtaXQgd2Fz IGJ1aWx0IHdpdGggdGhlCi0gICBzeXN0ZW0td2lkZSBpbml0aWFsaXphdGlvbi1maWxlIG9wdGlv biAoc2VlIHRoZSBbNTU5XUMtS2VybWl0IGZvciBVbml4Ci0gICBJbnN0YWxsYXRpb24gSW5zdHJ1 Y3Rpb25zKS4KLQotICAgQy1LZXJtaXQgaWRlbnRpZmllcyB5b3VyIGhvbWUgZGlyZWN0b3J5IGJh c2VkIG9uIHRoZSBlbnZpcm9ubWVudAotICAgdmFyaWFibGUsIEhPTUUuIE1vc3QgVW5peCBzeXN0 ZW1zIHNldCB0aGlzIHZhcmlhYmxlIGF1dG9tYXRpY2FsbHkgd2hlbgotICAgeW91IGxvZyBpbi4g SWYgQy1LZXJtaXQgY2FuJ3QgZmluZCB5b3VyIGluaXRpYWxpemF0aW9uIGZpbGUsIGNoZWNrIHlv dXIKLSAgIEhPTUUgdmFyaWFibGU6Ci0KLSAgZWNobyAkSE9NRSAgICAgIChhdCB0aGUgVW5peCBw cm9tcHQpCi0KLSAgIG9yOgotCi0gIGVjaG8gXCQoSE9NRSkgICAoYXQgdGhlIEMtS2VybWl0IHBy b21wdCkKLQotICAgSWYgSE9NRSBpcyBub3QgZGVmaW5lZCwgb3IgaXMgZGVmaW5lZCBpbmNvcnJl Y3RseSwgYWRkIHRoZSBhcHByb3ByaWF0ZQotICAgZGVmaW5pdGlvbiB0byB5b3VyIFVuaXggLnBy b2ZpbGUgb3IgLmxvZ2luIGZpbGUsIGRlcGVuZGluZyBvbiB5b3VyCi0gICBzaGVsbDoKLQotICBz ZXRlbnYgSE9NRSBmdWxsLXBhdGhuYW1lLW9mLXlvdXItaG9tZS1kaXJlY3RvcnkgIChDLVNoZWxs LCAubG9naW4gZmlsZSkKLQotICAgb3I6Ci0KLSAgSE9NRT1mdWxsLXBhdGhuYW1lLW9mLXlvdXIt aG9tZS1kaXJlY3RvcnkgICAgICAgICAoc2gsIGtzaCwgLnByb2ZpbGUgZmlsZSkKLSAgZXhwb3J0 IEhPTUUKLQotICAgTk9URTogVmFyaW91cyBvdGhlciBvcGVyYXRpb25zIGRlcGVuZCBvbiB0aGUg Y29ycmVjdCBkZWZpbml0aW9uIG9mCi0gICBIT01FLiBUaGVzZSBpbmNsdWRlIHRoZSAidGlsZGUt ZXhwYW5zaW9uIiBmZWF0dXJlLCB3aGljaCBhbGxvd3MgeW91IHRvCi0gICByZWZlciB0byB5b3Vy IGhvbWUgZGlyZWN0b3J5IGFzICJ+IiBpbiBmaWxlbmFtZXMgdXNlZCBpbiBDLUtlcm1pdAotICAg Y29tbWFuZHMsIGUuZy46Ci0KLSAgc2VuZCB+Ly5rZXJtcmMKLQotICAgYXMgd2VsbCBhcyB0aGUg XHYoaG9tZSkgdmFyaWFibGUuCi0KLSAgIFByaW9yIHRvIHZlcnNpb24gNUEoMTkwKSwgQy1LZXJt aXQgd291bGQgbG9vayBmb3IgaXRzIGluaXRpYWxpemF0aW9uCi0gICBmaWxlIGluIHRoZSBjdXJy ZW50IGRpcmVjdG9yeSBpZiBpdCB3YXMgbm90IGZvdW5kIGluIHRoZSBob21lCi0gICBkaXJlY3Rv cnkuIFRoaXMgZmVhdHVyZSB3YXMgcmVtb3ZlZCBmcm9tIDVBKDE5MCkgYmVjYXVzZSBpdCB3YXMg YQotICAgc2VjdXJpdHkgcmlzay4gU29tZSBwZW9wbGUsIGhvd2V2ZXIsIGxpa2VkIHRoaXMgYmVo YXZpb3IgYW5kIGhhZAotICAgLmtlcm1yYyBmaWxlcyBpbiBhbGwgdGhlaXIgZGlyZWN0b3JpZXMg dGhhdCB3b3VsZCBzZXQgdXAgdGhpbmdzCi0gICBhcHByb3ByaWF0ZWx5IGZvciB0aGUgZmlsZXMg dGhlcmVpbi4gSWYgeW91IHdhbnQgdGhpcyBiZWhhdmlvciwgeW91IGNhbgotICAgYWNjb21wbGlz aCBpdCBpbiB2YXJpb3VzIHdheXMsIGZvciBleGFtcGxlOgotCi0gICAgICogQ3JlYXRlIGEgc2hl bGwgYWxpYXMsIGZvciBleGFtcGxlOgotICBhbGlhcyBrZD0ia2VybWl0IC1ZIC4vLmtlcm1yYyIK LQotICAgICAqIENyZWF0ZSBhIC5rZXJtcmMgZmlsZSBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5LCB3 aG9zZSBjb250ZW50cyBhcmU6Ci0gIHRha2UgLi8ua2VybXJjCi0KLSAgIFN1cHBvc2UgeW91IG5l ZWQgdG8gcGFzcyBhIHBhc3N3b3JkIGZyb20gdGhlIFVuaXggY29tbWFuZCBsaW5lIHRvIGEKLSAg IEMtS2VybWl0IHNjcmlwdCBwcm9ncmFtLCBpbiBzdWNoIGEgd2F5IHRoYXQgaXQgZG9lcyBub3Qg c2hvdyB1cCBpbiAicHMiCi0gICBvciAidyIgbGlzdGluZ3MuIEhlcmUgaXMgYSBtZXRob2QgKG5v dCBndWFyYW50ZWVkIHRvIGJlIDEwMCUgc2VjdXJlLAotICAgYnV0IGRlZmluaXRlbHkgbW9yZSBz ZWN1cmUgdGhhbiB0aGUgbW9yZSBvYnZpb3VzIG1ldGhvZHMpOgotCi0gIGVjaG8gbXlwYXNzd29y ZCB8IGtlcm1pdCBteXNjcmlwdAotCi0gICBUaGUgIm15c2NyaXB0IiBmaWxlIGNvbnRhaW5zIGFs bCB0aGUgY29tbWFuZHMgdGhhdCBuZWVkIHRvIGJlIGV4ZWN1dGVkCi0gICBkdXJpbmcgdGhlIEtl cm1pdCBzZXNzaW9uLCB1cCB0byBhbmQgaW5jbHVkaW5nIEVYSVQsIGFuZCBhbHNvIGluY2x1ZGVz Ci0gICBhbiBBU0sgb3IgQVNLUSBjb21tYW5kIHRvIHJlYWQgdGhlIHBhc3N3b3JkIGZyb20gc3Rh bmRhcmQgaW5wdXQsIHdoaWNoCi0gICBoYXMgYmVlbiBwaXBlZCBpbiBmcm9tIHRoZSBVbml4ICdl Y2hvJyBjb21tYW5kLCBidXQgaXQgbXVzdCBub3QgaW5jbHVkZQotICAgYSBDT05ORUNUIGNvbW1h bmQuIE9ubHkgImtlcm1pdCBteXNjcmlwdCIgc2hvd3MgdXAgaW4gdGhlIHBzIGxpc3RpbmcuCi0K LTYuIENPTU1VTklDQVRJT04gU1BFRUQgU0VMRUNUSU9OCi0KLSAgIFsgWzU2MF1Ub3AgXSBbIFs1 NjFdQ29udGVudHMgXSBbIFs1NjJdTmV4dCBdIFsgWzU2M11QcmV2aW91cyBdCi0KLSAgIFZlcnNp b24tNyBiYXNlZCBVbml4IGltcGxlbWVudGF0aW9ucywgaW5jbHVkaW5nIDQuMyBCU0QgYW5kIGVh cmxpZXIgYW5kCi0gICBVbml4IHN5c3RlbXMgYmFzZWQgdXBvbiBCU0QsIHVzZSBhIDQtYml0IGZp ZWxkIHRvIHJlY29yZCBhIHNlcmlhbAotICAgZGV2aWNlJ3MgdGVybWluYWwgc3BlZWQuIFRoaXMg bGVhdmVzIHJvb20gZm9yIDE2IHNwZWVkcywgb2Ygd2hpY2ggdGhlCi0gICBmaXJzdCAxNCBhcmUg bm9ybWFsbHk6Ci0KLSAgICAgMCwgNTAsIDc1LCAxMTAsIDEzNC41LCAxNTAsIDIwMCwgMzAwLCA2 MDAsIDEyMDAsIDE4MDAsIDI0MDAsIDQ4MDAsCi0gICAgIGFuZCA5NjAwCi0KLSAgIFRoZSByZW1h aW5pbmcgdHdvIGFyZSB1c3VhbGx5IGNhbGxlZCBFWFRBIGFuZCBFWFRCLCBhbmQgYXJlIGRlZmlu ZWQgYnkKLSAgIHRoZSBwYXJ0aWN1bGFyIFVuaXggaW1wbGVtZW50YXRpb24uIEMtS2VybWl0IGRl dGVybWluZXMgd2hpY2ggc3BlZWRzCi0gICBhcmUgYXZhaWxhYmxlIG9uIHlvdXIgc3lzdGVtIGJh c2VkIG9uIHdoZXRoZXIgc3ltYm9scyBmb3IgdGhlbSBhcmUKLSAgIGRlZmluZWQgaW4geW91ciB0 ZXJtaW5hbCBkZXZpY2UgaGVhZGVyIGZpbGVzLiBFWFRBIGlzIGdlbmVyYWxseSBhc3N1bWVkCi0g ICB0byBiZSAxOTIwMCBhbmQgRVhUQiAzODQwMCwgYnV0IHRoZXNlIGFzc3VtcHRpb25zIG1pZ2h0 IGJlIHdyb25nLCBvcgotICAgdGhleSBtaWdodCBub3QgYXBwbHkgdG8gYSBwYXJ0aWN1bGFyIGRl dmljZSB0aGF0IGRvZXMgbm90IHN1cHBvcnQgdGhlc2UKLSAgIHNwZWVkcy4gUHJlc3VtYWJseSwg aWYgeW91IHRyeSB0byBzZXQgYSBzcGVlZCB0aGF0IGlzIG5vdCBsZWdhbCBvbiBhCi0gICBwYXJ0 aWN1bGFyIGRldmljZSwgdGhlIGRyaXZlciB3aWxsIHJldHVybiBhbiBlcnJvciwgYnV0IHRoaXMg Y2FuIG5vdCBiZQotICAgZ3VhcmFudGVlZC4KLQotICAgT24gdGhlc2Ugc3lzdGVtcywgaXQgaXMg dXN1YWxseSBub3QgcG9zc2libGUgdG8gc2VsZWN0IGEgc3BlZWQgb2YgMTQ0MDAKLSAgIGJwcyBm b3IgdXNlIHdpdGggVi4zMmJpcyBtb2RlbXMuIEluIHRoYXQgY2FzZSwgdXNlIDE5MjAwIG9yIDM4 NDAwIGJwcywKLSAgIGNvbmZpZ3VyZSB5b3VyIG1vZGVtIHRvIGxvY2sgaXRzIGludGVyZmFjZSBz cGVlZCBhbmQgdG8gdXNlIFJUUy9DVFMKLSAgIGZsb3cgY29udHJvbCwgYW5kIHRlbGwgQy1LZXJt aXQgdG8gU0VUIEZMT1cgUlRTL0NUUyBhbmQgU0VUIERJQUwKLSAgIFNQRUVELU1BVENISU5HIE9G Ri4KLQotICAgVGhlIHNpdHVhdGlvbiBpcyBzaW1pbGFyLCBidXQgZGlmZmVyZW50LCBpbiBTeXN0 ZW0gVi4gU1ZJRCBUaGlyZAotICAgRWRpdGlvbiBsaXN0cyB0aGUgc2FtZSBzcGVlZHMsIDAgdGhy b3VnaCAzODQwMC4KLQotICAgU29tZSB2ZXJzaW9ucyBvZiBVbml4LCBhbmQvb3IgdGVybWluYWwg ZGV2aWNlIGRyaXZlcnMgdGhhdCBjb21lIHdpdGgKLSAgIGNlcnRhaW4gdGhpcmQtcGFydHkgYWRk LWluIGhpZ2gtc3BlZWQgc2VyaWFsIGNvbW11bmljYXRpb24gaW50ZXJmYWNlcywKLSAgIHVzZSB0 aGUgbG93ICJiYXVkIHJhdGVzIiB0byBzdGFuZCBmb3IgaGlnaGVyIG9uZXMuIEZvciBleGFtcGxl LCBTRVQKLSAgIFNQRUVEIDUwIGdldHMgeW91IDU3NjAwIGJwczsgU0VUIFNQRUVEIDc1IGdldHMg eW91IDc2ODAwOyBTRVQgU1BFRUQgMTEwCi0gICBnZXRzIDExNTIwMC4KLQotICAgU0NPIE9EVCAz LjAgaXMgYW4gZXhhbXBsZSB3aGVyZSBhICJiYXVkLXJhdGUtdGFibGUgcGF0Y2giIGNhbiBiZQot ICAgYXBwbGllZCB0aGF0IGNhbiByb3RhdGUgdGhlIHR0eSBkcml2ZXIgYmF1ZCByYXRlIHRhYmxl IHN1Y2ggdGhhdAotICAgNjAwPTU3NjAwIGFuZCAxODAwPTExNWsgYmF1ZC4gU2ltaWxhcmx5IGZv ciBEaWdpYm9hcmQKLSAgIG11bHRpcG9ydC9wb3J0c2VydmVycywgd2hpY2ggaGF2ZSBhICJmYXN0 YmF1ZCIgc2V0dGluZyB0aGF0IGRvZXMgdGhpcy4KLSAgIExpbnV4IGhhcyBhICJzZXRzZXJpYWwi IGNvbW1hbmQgdGhhdCBjYW4gZG8gaXQsIGV0Yy4KLQotICAgTW9yZSBtb2Rlcm4gVW5peGVzIHN1 cHBvcnQgUE9TSVgtYmFzZWQgc3BlZWQgc2V0dGluZywgaW4gd2hpY2ggdGhlCi0gICBzZWxlY3Rp b24gb2Ygc3BlZWRzIGlzIG5vdCBsaW1pdGVkIGJ5IGEgNC1iaXQgZmllbGQuIEMtS2VybWl0IDYu MQotICAgaW5jb3Jwb3JhdGVzIGEgbmV3IG1lY2hhbmlzbSBmb3IgZmluZGluZyBvdXQgKGF0IGNv bXBpbGUgdGltZSkgd2hpY2gKLSAgIHNlcmlhbCBzcGVlZHMgYXJlIHN1cHBvcnRlZCBieSB0aGUg b3BlcmF0aW5nIHN5c3RlbSB0aGF0IGRvZXMgbm90Ci0gICBpbnZvbHZlIGVkaXRpbmcgb2Ygc291 cmNlIGNvZGUgYnkgaGFuZDsgb24gc3lzdGVtcyBsaWtlIFNvbGFyaXMgNS4xLAotICAgSVJJWCA2 LjIsIGFuZCBTQ08gT1NSNS4wLjQsICJzZXQgc3BlZWQgPyIgd2lsbCBsaXN0IHNwZWVkcyB1cCB0 byA0NjA4MDAKLSAgIG9yIDkyMTYwMC4gSW4gQy1LZXJtaXQgNy4wIGFuZCBsYXRlcjoKLQotICAg IDEuIElmIGEgc3ltYm9sIGZvciBhIHBhcnRpY3VsYXIgc3BlZWQgKHNheSBCMjMwNDAwIGZvciAy MzA0MDAgYnBzKQotICAgICAgIGFwcGVhcnMgaW4gd2hhdGV2ZXIgaGVhZGVyIGZpbGUgZGVmaW5l cyBhY2NlcHRhYmxlIHNlcmlhbCBzcGVlZHMKLSAgICAgICAoZS5nLiA8dGVybWJpdHMuaD4gb3Ig PHN5cy90ZXJtaW9zLmg+IG9yIDxzeXMvdHR5ZGV2Lmg+LCBldGMpLCB0aGUKLSAgICAgICBjb3Jy ZXNwb25kaW5nIHNwZWVkIHdpbGwgYXBwZWFyIGluIEMtS2VybWl0J3MgInNldCBzcGVlZCA/IiBs aXN0LgotICAgIDIuIFRoZSBmYWN0IHRoYXQgYSBnaXZlbiBzcGVlZCBpcyBsaXN0ZWQgaW4gdGhl IGhlYWRlciBmaWxlcyBhbmQKLSAgICAgICBhcHBlYXJzIGluIEMtS2VybWl0J3MgbGlzdCBkb2Vz IG5vdCBtZWFuIHRoZSBkcml2ZXIgd2lsbCBhY2NlcHQgaXQuCi0gICAgICAgRm9yIGV4YW1wbGUs IGEgY29tcHV0ZXIgbWlnaHQgaGF2ZSBzb21lIHN0YW5kYXJkIHNlcmlhbCBwb3J0cyBwbHVzCi0g ICAgICAgc29tZSBhZGQtb24gb25lcyB3aXRoIGRpZmZlcmVudCBkcml2ZXJzIHRoYXQgYWNjZXB0 IGEgZGlmZmVyZW50Ci0gICAgICAgcmVwZXJ0b2lyZSBvZiBzcGVlZHMuCi0gICAgMy4gVGhlIGZh Y3QgdGhhdCBhIGdpdmVuIHNwZWVkIGlzIGFjY2VwdGVkIGJ5IHRoZSBkcml2ZXIgZG9lcyBub3QK LSAgICAgICBndWFyYW50ZWUgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FuIGFjY2VwdCBpdC4K LQotICAgV2hlbiBLZXJtaXQgaXMgZ2l2ZW4gYSAic2V0IHNwZWVkIiBjb21tYW5kIGZvciBhIHBh cnRpY3VsYXIgZGV2aWNlLCB0aGUKLSAgIHVuZGVybHlpbmcgc3lzdGVtIHNlcnZpY2UgaXMgY2Fs bGVkIHRvIHNldCB0aGUgc3BlZWQ7IGl0cyByZXR1cm4gY29kZQotICAgaXMgY2hlY2tlZCBhbmQg dGhlIFNFVCBTUEVFRCBjb21tYW5kIGZhaWxzIGlmIHRoZSByZXR1cm4gY29kZSBpbmRpY2F0ZXMK LSAgIGZhaWx1cmUuIFJlZ2FyZGxlc3Mgb2YgdGhlIHN5c3RlbSBzZXJ2aWNlIHJldHVybiBzdGF0 dXMsIHRoZSBkZXZpY2UncwotICAgc3BlZWQgaXMgdGhlbiByZWFkIGJhY2sgYW5kIGlmIGl0IGRv ZXMgbm90IG1hdGNoIHRoZSBzcGVlZCB0aGF0IHdhcwotICAgcmVxdWVzdGVkLCBhbiBlcnJvciBt ZXNzYWdlIGlzIHByaW50ZWQgYW5kIHRoZSBjb21tYW5kIGZhaWxzLgotCi0gICBFdmVuIHdoZW4g dGhlIGNvbW1hbmQgc3VjY2VlZHMsIHRoaXMgZG9lcyBub3QgZ3VhcmFudGVlIHN1Y2Nlc3NmdWwK LSAgIG9wZXJhdGlvbiBhdCBhIHBhcnRpY3VsYXIgc3BlZWQsIGVzcGVjaWFsbHkgYSBoaWdoIG9u ZS4gVGhhdCBkZXBlbmRzIG9uCi0gICBlbGVjdHJpY2l0eSwgaW5mb3JtYXRpb24gdGhlb3J5LCBl dGMuIEhvdyBsb25nIGlzIHRoZSBjYWJsZSwgd2hhdCBpcwotICAgaXRzIGNhcGFjaXRhbmNlLCBo b3cgd2VsbCBpcyBpdCBzaGllbGRlZCwgZXRjLCBub3QgdG8gbWVudGlvbiB0aGF0Ci0gICBldmVy eSBjb25uZWN0aW9uIGhhcyB0d28gZW5kcyBhbmQgaXRzIHN1Y2Nlc3MgZGVwZW5kcyBvbiBib3Ro IG9mIHRoZW0uCi0gICAoV2l0aCB0aGUgb2J2aW91cyBjYXZlYXRzIGFib3V0IGludGVybmFsIG1v ZGVtcywgaXMgdGhlIGNhYmxlIHJlYWxseQotICAgY29ubmVjdGVkLCBpbnRlcnJ1cHQgY29uZmxp Y3RzLCBldGMgZXRjIGV0YykuCi0KLSAgIE5vdGUsIGluIHBhcnRpY3VsYXIsIHRoYXQgdGhlcmUg aXMgYSBjZXJ0YWluIHRocmVzaG9sZCBhYm92ZSB3aGljaAotICAgbW9kZW1zIGNhbiBub3QgImF1 dG9iYXVkIiAtLSBpLmUuIGRldGVjdCB0aGUgc2VyaWFsIGludGVyZmFjZSBzcGVlZAotICAgd2hl biB5b3UgdHlwZSBBVCAob3Igd2hhdGV2ZXIgZWxzZSB0aGUgbW9kZW0ncyByZWNvZ25pdGlvbiBz ZXF1ZW5jZQotICAgbWlnaHQgYmUpLiBTdWNoIG1vZGVtcyBuZWVkIHRvIGJlIGVuZ2FnZWQgYXQg YSBsb3dlciBzcGVlZCAoc2F5IDI0MDAgb3IKLSAgIDk2MDAgb3IgZXZlbiAxMTUyMDAgLS0gYW55 IHNwZWVkIGJlbG93IHRoZWlyIGF1dG9iYXVkIHRocmVzaG9sZCkgYW5kCi0gICB0aGVuIG11c3Qg YmUgZ2l2ZW4gYSBtb2RlbS1zcGVjaWZpYyBjb21tYW5kICh3aGljaCBjYW4gYmUgZm91bmQgaW4g dGhlCi0gICBtb2RlbSBtYW51YWwpIHRvIGNoYW5nZSB0aGVpciBpbnRlcmZhY2Ugc3BlZWQgdG8g dGhlIGRlc2lyZWQgaGlnaGVyCi0gICBzcGVlZCwgYW5kIHRoZW4gdGhlIHNvZnR3YXJlIG11c3Qg YWxzbyBiZSB0b2xkIHRvIGNoYW5nZSB0byB0aGUgbmV3LAotICAgaGlnaGVyIHNwZWVkLgotCi0g ICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgcmVhZCBbNTY0XVNlY3Rpb24gOS41IG9mIHRo ZSBJbnN0YWxsYXRpb24KLSAgIEluc3RydWN0aW9ucywgcGx1cyBhbnkgcGxhdGZvcm0tc3BlY2lm aWMgbm90ZXMgaW4gWzU2NV1TZWN0aW9uIDMgYWJvdmUuCi0KLTcuIENPTU1VTklDQVRJT05TIEFO RCBESUFMSU5HCi0KLSAgIFsgWzU2Nl1Ub3AgXSBbIFs1NjddQ29udGVudHMgXSBbIFs1NjhdTmV4 dCBdIFsgWzU2OV1QcmV2aW91cyBdCi0KLTcuMS4gU2VyaWFsIFBvcnRzIGFuZCBNb2RlbXMKLQot ICAgSWYgeW91IFNFVCBMSU5FIHRvIGEgc2VyaWFsIHBvcnQgbW9kZW0tY29udHJvbCBkZXZpY2Ug dGhhdCBoYXMgbm90aGluZwotICAgcGx1Z2dlZCBpbiB0byBpdCwgb3IgaGFzIGEgbW9kZW0gY29u bmVjdGVkIHRoYXQgaXMgcG93ZXJlZCBvZmYsIGFuZCB5b3UKLSAgIGhhdmUgbm90IGdpdmVuIGEg cHJpb3IgU0VUIE1PREVNIFRZUEUgb3IgU0VUIENBUlJJRVItV0FUQ0ggT0ZGIGNvbW1hbmQsCi0g ICB0aGUgU0VUIExJTkUgY29tbWFuZCBpcyBsaWtlbHkgdG8gaGFuZy4gSW4gbW9zdCBjYXNlcywg eW91IGNhbiBDdHJsLUMKLSAgIG91dC4gSWYgbm90LCB5b3UnbGwgaGF2ZSB0byBraWxsIEMtS2Vy bWl0IGZyb20gYW5vdGhlciB0ZXJtaW5hbC4KLQotICAgU2ltaWxhcmx5LCBpZiB5b3UgZ2l2ZSBh IFNFVCBNT0RFTSBUWVBFIEhBWUVTIChvciBVU1IsIG9yIGFueSBvdGhlcgotICAgbW9kZW0gdHlw ZSBiZXNpZGVzIERJUkVDVCwgTk9ORSwgb3IgVU5LTk9XTikgYW5kIHRoZW4gU0VUIExJTkUgdG8g YW4KLSAgIGVtcHR5IHBvcnQsIHRoZSBzdWJzZXF1ZW50IGNsb3NlIChpbXBsaWNpdCBvciBleHBs aWNpdCkgaXMgbGlhYmxlIHRvCi0gICBoYW5nIG9yIGV2ZW4gY3Jhc2ggKHRocm91Z2ggbm8gZmF1 bHQgb2YgS2VybWl0J3MgLS0gdGhlIGhhbmdpbmcgb3IKLSAgIGNyYXNoaW5nIGlzIGluc2lkZSBh IHN5c3RlbSBjYWxsIHN1Y2ggYXMgY2ZzZXRvc3BlZWQoKSBvciBjbG9zZSgpKS4KLQotICAgVGhl IFNFVCBDQVJSSUVSLVdBVENIIGNvbW1hbmQgd29ya3MgYXMgYWR2ZXJ0aXNlZCBvbmx5IGlmIHRo ZQotICAgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtIGFuZCBkZXZpY2UgZHJpdmVycyBzdXBw b3J0IHRoaXMgZmVhdHVyZTsgaW4KLSAgIHBhcnRpY3VsYXIgb25seSBpZiBhIHJlYWQoKSBvcGVy YXRpb24gcmV0dXJucyBpbW1lZGlhdGVseSB3aXRoIGFuIGVycm9yCi0gICBjb2RlIGlmIHRoZSBj YXJyaWVyIHNpZ25hbCBnb2VzIGF3YXkgb3IsIGZhaWxpbmcgdGhhdCwgaWYgQy1LZXJtaXQgY2Fu Ci0gICBvYnRhaW4gdGhlIG1vZGVtIHNpZ25hbHMgZnJvbSB0aGUgZGV2aWNlIGRyaXZlciAoeW91 IGNhbiB0ZWxsIGJ5IGdpdmluZwotICAgYSAic2V0IGxpbmUiIGNvbW1hbmQgdG8gYSBzZXJpYWwg ZGV2aWNlLCBhbmQgdGhlbiBhICJzaG93Ci0gICBjb21tdW5pY2F0aW9ucyIgY29tbWFuZCAtLSBp ZiBtb2RlbSBzaWduYWxzIGFyZSBub3QgbGlzdGVkLCBDLUtlcm1pdAotICAgd29uJ3QgYmUgYWJs ZSB0byBkZXRlY3QgY2FycmllciBsb3NzLCB0aGUgV0FJVCBjb21tYW5kIHdpbGwgbm90IHdvcmss Ci0gICBldGMpLiBPZiBjb3Vyc2UsIHRoZSBkZXZpY2UgaXRzZWxmIChlLmcuIG1vZGVtKSBtdXN0 IGJlIGNvbmZpZ3VyZWQKLSAgIGFwcHJvcHJpYXRlbHkgYW5kIHRoZSBjYWJsZXMgY29udmV5IHRo ZSBjYXJyaWVyIGFuZCBvdGhlciBuZWVkZWQKLSAgIHNpZ25hbHMsIGV0Yy4KLQotICAgSWYgeW91 IGRpYWwgb3V0IGZyb20gVW5peCBzeXN0ZW0sIGJ1dCB0aGVuIG5vdGljZSBhIGxvdCBvZiB3ZWly ZAotICAgY2hhcmFjdGVyIHN0cmluZ3MgYmVpbmcgc3R1Y2sgaW50byB5b3VyIHNlc3Npb24gYXQg cmFuZG9tIHRpbWVzCi0gICAoZXNwZWNpYWxseSBpZiB0aGV5IGxvb2sgbGlrZSArKytBVFEwSDAg b3IgbG9naW4gYmFubmVycyBvciBwcm9tcHRzKSwKLSAgIHRoYXQgbWVhbnMgdGhhdCBnZXR0eSBp cyBhbHNvIHRyeWluZyB0byBjb250cm9sIHRoZSBzYW1lIGRldmljZS4gWW91J2xsCi0gICBuZWVk IHRvIGRpYWwgb3V0IG9uIGEgZGV2aWNlIHRoYXQgaXMgbm90IHdhaXRpbmcgZm9yIGEgbG9naW4s IG9yIGVsc2UKLSAgIGRpc2FibGUgZ2V0dHkgb24gdGhlIGRldmljZS4KLQotICAgQXMgb2YgdmVy c2lvbiA3LjAsIEMtS2VybWl0IG1ha2VzIGV4cGxpY2l0IGNoZWNrcyBmb3IgdGhlIENhcnJpZXIK LSAgIERldGVjdCBzaWduYWwsIGFuZCBzbyBjYXRjaGVzIGh1bmctdXAgY29ubmVjdGlvbnMgbXVj aCBiZXR0ZXIgdGhhbiA2LjAKLSAgIGFuZCBlYXJsaWVyLiBIb3dldmVyLCBpdCBzdGlsbCBjYW4g bm90IGJlIGd1YXJhbnRlZWQgdG8gY2F0Y2ggZXZlcnkKLSAgIGV2ZXIgQ0Qgb24tdG8tb2ZmIHRy YW5zaXRpb24uIEZvciBleGFtcGxlLCB3aGVuIHRoZSBIUC1VWCB2ZXJzaW9uIG9mCi0gICBDLUtl cm1pdCBpcyBpbiBDT05ORUNUIG1vZGUgb24gYSBkaWFsZWQgY29ubmVjdGlvbiBhbmQgQ0FSUklF Ui1XQVRDSCBPTgotICAgb3IgQVVUTywgYW5kIHlvdSB0dXJuIG9mZiB0aGUgbW9kZW0sIEhQLVVY IGlzIHN0dWNrIGluIGEgcmVhZCgpIHRoYXQKLSAgIG5ldmVyIHJldHVybnMuIChDLUtlcm1pdCBk b2VzIG5vdCBwb3AgYmFjayB0byBpdHMgcHJvbXB0IGF1dG9tYXRpY2FsbHksCi0gICBidXQgeW91 IGNhbiBzdGlsbCBlc2NhcGUgYmFjay4pCi0KLSAgIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwgeW91 IGxvZyBvdXQgZnJvbSB0aGUgcmVtb3RlIHN5c3RlbSwgYW5kIGl0IGhhbmdzCi0gICB1cCwgYW5k IENEIGRyb3BzIG9uIHRoZSBsb2NhbCBtb2RlbSwgQy1LZXJtaXQgZGV0ZWN0cyB0aGlzIGFuZCBw b3BzCi0gICBiYWNrIHRvIHRoZSBwcm9tcHQgYXMgaXQgc2hvdWxkLiAoRXZpZGVudGx5IHRoZXJl IGNhbiBiZSBhIGRpZmZlcmVuY2UKLSAgIGJldHdlZW4gQ0QgYW5kIERTUiB0dXJuaW5nIG9mZiBh dCB0aGUgc2FtZSB0aW1lLCB2ZXJzdXMgQ0QgdHVybmluZyBvZmYKLSAgIHdoaWxlIERTUiBzdGF5 cyBvbjsgZXhwZXJpbWVudGF0aW9uIHdpdGggJlMwLyZTMS8mUzIgb24geW91ciBtb2RlbQotICAg bWlnaHQgcHJvZHVjZSB0aGUgZGVzaXJlZCByZXN1bHRzKS4KLQotICAgV2hlbiBVbml4IEMtS2Vy bWl0IGV4aXRzLCBpdCBjbG9zZXMgKGFuZCBtdXN0IGNsb3NlKSB0aGUgY29tbXVuaWNhdGlvbnMK LSAgIGRldmljZS4gSWYgeW91IHdlcmUgZGlhbGVkIG91dCwgdGhpcyB3aWxsIG1vc3QgbGlrZWx5 IGhhbmcgdXAgdGhlCi0gICBjb25uZWN0aW9uLiBJZiB5b3Ugd2FudCB0byBnZXQgb3V0IG9mIEtl cm1pdCBhbmQgc3RpbGwgdXNlIEtlcm1pdCdzCi0gICBjb21tdW5pY2F0aW9uIGRldmljZSwgeW91 IGhhdmUgc2V2ZXJhbCBjaG9pY2VzOgotCi0gICAgMS4gU2hlbGwgb3V0IGZyb20gS2VybWl0IG9y IHN1c3BlbmQgS2VybWl0LCBhbmQgcmVmZXIgdG8gdGhlIGRldmljZQotICAgICAgIGxpdGVyYWxs eSAoYXMgaW4gInRlcm0gLWJsYWggLWJsYWggPCAvZGV2L2N1YSA+IC9kZXYvY3VhIikuCi0gICAg Mi4gU2hlbGwgb3V0IGZyb20gS2VybWl0IGFuZCB1c2UgdGhlIGRldmljZSdzIGZpbGUgZGVzY3Jp cHRvciB3aGljaAotICAgICAgIEtlcm1pdCBtYWtlcyBhdmFpbGFibGUgdG8geW91IGluIHRoZSBc dih0dHlmZCkgdmFyaWFibGUuCi0gICAgMy4gVXNlIEMtS2VybWl0J3MgUkVESVJFQ1QgY29tbWFu ZC4KLSAgICA0LiBVc2UgQy1LZXJtaXQgbmV3IEVYRUMgL1JFRElSRUNUIGNvbW1hbmQuCi0KLSAg IElmIHlvdSBhcmUgaGF2aW5nIHRyb3VibGUgZGlhbGluZzoKLQotICAgIDEuIE1ha2Ugc3VyZSB0 aGUgZGlhbG91dCBsaW5lIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBNb3JlIGFib3V0IHRoaXMK LSAgICAgICBiZWxvdy4KLSAgICAyLiBNYWtlIHN1cmUgYWxsIG5lY2Vzc2FyeSBwYXRjaGVzIGFy ZSBpbnN0YWxsZWQgZm9yIHlvdXIgb3BlcmF0aW5nCi0gICAgICAgc3lzdGVtLgotICAgIDMuIElm IHlvdSBjYW4ndCBkaWFsIG9uIGEgImJpZGlyZWN0aW9uYWwiIGxpbmUsIHRoZW4gY29uZmlndXJl IGl0IGZvcgotICAgICAgIG91dGJvdW5kLW9ubHkgKHJlbW92ZSB0aGUgZ2V0dHkpIGFuZCB0cnkg YWdhaW4uIChUaGUgbWVjaGFuaXNtcyAtLQotICAgICAgIGlmIGFueSAtLSBmb3IgZ3JhYmJpbmcg YmlkaXJlY3Rpb25hbCBsaW5lcyBmb3IgZGlhbG91dCB2YXJ5IHdpbGRseQotICAgICAgIGFtb25n IFVuaXggaW1wbGVtZW50YXRpb25zIGFuZCByZWxlYXNlcywgYW5kIEMtS2VybWl0IC0tIHdoaWNo IHJ1bnMKLSAgICAgICBvbiB3ZWxsIG92ZXIgMzAwIGRpZmZlcmVudCBVbml4IHZhcmlhdGlvbnMg LS0gbWFrZXMgbm8gZWZmb3J0IHRvCi0gICAgICAga2VlcCB1cCB3aXRoIHRoZW07IHRoZSByZWNv bW1lbmRlZCBtZXRob2QgZm9yIGNvcGluZyB3aXRoIHRoaXMKLSAgICAgICBzaXR1YXRpb24gaXMg dG8gd3JhcCBDLUtlcm1pdCBpbiBhIHNoZWxsIHNjcmlwdCB0aGF0IHRha2VzIHRoZQotICAgICAg IGFwcHJvcHJpYXRlIGFjdGlvbnMuKQotICAgIDQuIE1ha2Ugc3VyZSBDLUtlcm1pdCdzIFNFVCBE SUFMIGFuZCBTRVQgTU9ERU0gcGFyYW1ldGVycyBhZ3JlZSB3aXRoCi0gICAgICAgdGhlIG1vZGVt IHlvdSBhcmUgYWN0dWFsbHkgdXNpbmcgLS0gcGF5IHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIFNF VAotICAgICAgIERJQUwgU1BFRUQtTUFUQ0hJTkcuCi0gICAgNS4gSWYgTU9ERU0gSEFOR1VQLU1F VEhPRCBpcyBzZXQgdG8gUlMyMzItU0lHTkFMLCBjaGFuZ2UgaXQgdG8KLSAgICAgICBNT0RFTS1D T01NQU5ELiBPciB2aWNlLXZlcnNhLgotICAgIDYuIFRyeSBTRVQgRElBTCBIQU5HVVAgT0ZGIGJl Zm9yZSB0aGUgRElBTCBjb21tYW5kLiBBbHNvLCBTRVQgRElBTAotICAgICAgIERJU1BMQVkgT04g dG8gd2F0Y2ggd2hhdCdzIGhhcHBlbmluZy4gU2VlIFs1NzBdU2VjdGlvbiA4IG9mIHRoZQotICAg ICAgIFs1NzFdSW5zdGFsbGF0aW9uIEluc3RydWN0aW9ucy4KLSAgICA3LiBSZWFkIHBhZ2VzIDUw LTY3IG9mIFs1NzJdVXNpbmcgQy1LZXJtaXQuCi0gICAgOC4gQXMgYSBsYXN0IHJlc29ydCwgZG9u J3QgdXNlIHRoZSBESUFMIGNvbW1hbmQgYXQgYWxsOyBTRVQgQ0FSUklFUgotICAgICAgIE9GRiBh bmQgQ09OTkVDVCB0byB0aGUgbW9kZW0gYW5kIGRpYWwgaW50ZXJhY3RpdmVseSwgb3Igd3JpdGUg YQotICAgICAgIHNjcmlwdCBwcm9ncmFtIHRvIGRpYWwgdGhlIG1vZGVtLgotCi0gICBNYWtlIHN1 cmUgeW91ciBkaWFsb3V0IGxpbmUgaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgZm9yIGRpYWxpbmcg b3V0IChhcwotICAgb3Bwb3NlZCB0byBsb2dpbikuIFRoZSBtZXRob2QgZm9yIGRvaW5nIHRoaXMg aXMgZGlmZmVyZW50IGZvciBlYWNoIGtpbmQKLSAgIG9mIFVuaXggc3lzdGVtLiBDb25zdWx0IHlv dXIgc3lzdGVtIGRvY3VtZW50YXRpb24gZm9yIGNvbmZpZ3VyaW5nIGxpbmVzCi0gICBmb3IgZGlh bGluZyBvdXQgKGZvciBleGFtcGxlLCBTdW4gU3BhcmNTdGF0aW9uIElQQyB1c2VycyBzaG91bGQg cmVhZAotICAgdGhlIHNlY3Rpb24gIlNldHRpbmcgdXAgTW9kZW0gU29mdHdhcmUiIGluIHRoZSBE ZXNrdG9wIFNQQVJDIFN1biBTeXN0ZW0KLSAgICYgTmV0d29yayBNYW5hZ2VyJ3MgR3VpZGU7IEhQ LTkwMDAgd29ya3N0YXRpb24gdXNlcnMgc2hvdWxkIGNvbnN1bHQgdGhlCi0gICBtYW51YWwgQ29u ZmlndXJpbmcgSFAtVVggZm9yIFBlcmlwaGVyYWxzLCBldGMpLgotCi0gICBTeW1wdG9tOiBESUFM IHdvcmtzLCBidXQgYSBzdWJzZXF1ZW50IENPTk5FQ1QgY29tbWFuZCBkb2VzIG5vdC4KLSAgIERp YWdub3NpczogdGhlIG1vZGVtIGlzIG5vdCBhc3NlcnRpbmcgQ2FycmllciBEZXRlY3QgKENEKSBh ZnRlciB0aGUKLSAgIGNvbm5lY3Rpb24gaXMgbWFkZSwgb3IgdGhlIGNhYmxlIGRvZXMgbm90IGNv bnZleSB0aGUgQ0Qgc2lnbmFsLiBDdXJlOgotICAgUmVjb25maWd1cmUgdGhlIG1vZGVtLCByZXBs YWNlIHRoZSBjYWJsZS4gV29ya2Fyb3VuZDogU0VUIENBUlJJRVIgT0ZGCi0gICAoYXQgbGVhc3Qg aW4gU3lzdGVtLVYgYmFzZWQgVW5peCB2ZXJzaW9ucykuCi0KLSAgIEZvciBCZXJrZWxleS1Vbml4 LWJhc2VkIHN5c3RlbXMgKDQuM0JTRCBhbmQgZWFybGllciksIEtlcm1pdCBpbmNsdWRlcwotICAg Y29kZSB0byB1c2UgTFBBU1M4IG1vZGUgd2hlbiBwYXJpdHkgaXMgbm9uZSwgd2hpY2ggaXMgc3Vw cG9zZWQgdG8gYWxsb3cKLSAgIDgtYml0IGRhdGEgYW5kIFhvbi9Yb2ZmIGZsb3cgY29udHJvbCBh dCB0aGUgc2FtZSB0aW1lLiBIb3dldmVyLCBhcyBvZgotICAgZWRpdCAxNzQsIHRoaXMgY29kZSBp cyBlbnRpcmVseSBkaXNhYmxlZCBiZWNhdXNlIGl0IGlzIHVucmVsaWFibGU6IGV2ZW4KLSAgIHRo b3VnaCB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtIG1pZ2h0IChvciBtaWdodCBub3QpIHN1cHBv cnQgTFBBU1M4Ci0gICBtb2RlIGNvcnJlY3RseSwgdGhlIGhvc3QgYWNjZXNzIHByb3RvY29scyAo dGVybWluYWwgc2VydmVycywgdGVsbmV0LAotICAgcmxvZ2luLCBldGMpIGdlbmVyYWxseSBoYXZl IG5vIHdheSBvZiBmaW5kaW5nIG91dCBhYm91dCBpdCBhbmQKLSAgIHRoZXJlZm9yZSByZW5kZXIg aXQgaW5lZmZlY3RpdmUsIGNhdXNpbmcgZmlsZSB0cmFuc2ZlciBmYWlsdXJlcy4gU28gYXMKLSAg IG9mIGVkaXQgMTc0LCBLZXJtaXQgb25jZSBhZ2FpbiB1c2VzIHJhd21vZGUgZm9yIDgtYml0IGRh dGEsIGFuZCBzbwotICAgdGhlcmUgaXMgbm8gWG9uL1hvZmYgZmxvdyBjb250cm9sIGR1cmluZyBm aWxlIHRyYW5zZmVyIG9yIHRlcm1pbmFsCi0gICBlbXVsYXRpb24gaW4gdGhlIEJlcmtlbGV5LWJh c2VkIHZlcnNpb25zICg0LjMgYW5kIGVhcmxpZXIsIG5vdCA0LjQpLgotCi0gICBBbHNvIG9uIEJl cmtlbGV5LWJhc2VkIHN5c3RlbXMgKDQuMyBhbmQgZWFybGllciksIHRoZXJlIGlzIGFwcGFyZW50 bHkKLSAgIG5vIHdheSB0byBjb25maWd1cmUgYSBkaWFsb3V0IGxpbmUgZm9yIHByb3BlciBjYXJy aWVyIGhhbmRsaW5nLCBpLmUuCi0gICBpZ25vcmUgY2FycmllciBkdXJpbmcgZGlhbGluZywgcmVx dWlyZSBjYXJyaWVyIHRoZXJlYWZ0ZXIsIGdldCBhIGZhdGFsCi0gICBlcnJvciBvbiBhbnkgYXR0 ZW1wdCB0byByZWFkIGZyb20gdGhlIGRldmljZSBhZnRlciBjYXJyaWVyIGRyb3BzICh0aGlzCi0g ICBpcyBoYW5kbGVkIG5pY2VseSBpbiBTeXN0ZW0gViBieSBtYW5pcHVsYXRpb24gb2YgdGhlIENM T0NBTCBmbGFnKS4gVGhlCi0gICBzeW1wdG9tIGlzIHRoYXQgY2FycmllciBsb3NzIGRvZXMgbm90 IG1ha2UgQy1LZXJtaXQgcG9wIGJhY2sgdG8gdGhlCi0gICBwcm9tcHQgYXV0b21hdGljYWxseS4g VGhpcyBpcyBldmlkZW50IG9uIHRoZSBOZVhULCBmb3IgZXhhbXBsZSwgYnV0IG5vdAotICAgb24g U3VuT1MsIHdoaWNoIHN1cHBvcnRzIHRoZSBDTE9DQUwgZmxhZy4gVGhpcyBpcyBub3QgYSBLZXJt aXQgcHJvYmxlbSwKLSAgIGJ1dCBhIGxpbWl0YXRpb24gb2YgdGhlIHVuZGVybHlpbmcgb3BlcmF0 aW5nIHN5c3RlbS4gRm9yIGV4YW1wbGUsIHRoZQotICAgY3UgcHJvZ3JhbSBvbiB0aGUgTmVYVCBk b2Vzbid0IG5vdGljZSBjYXJyaWVyIGxvc3MgZWl0aGVyLCB3aGVyZWFzIGN1Ci0gICBvbiB0aGUg U3VuIGRvZXMuCi0KLSAgIE9uIGNlcnRhaW4gQVQmVCBVbml4IHN5c3RlbXMgZXF1aXBwZWQgd2l0 aCBBVCZUIG1vZGVtcywgRElBTCBhbmQgSEFOR1VQCi0gICBkb24ndCB3b3JrIHJpZ2h0LiBXb3Jr YXJvdW5kczogKDEpIFNFVCBESUFMIEhBTkdVUCBPRkYgYmVmb3JlCi0gICBhdHRlbXB0aW5nIHRv IGRpYWw7ICgyKSBJZiBIQU5HVVAgZG9lc24ndCB3b3JrLCBTRVQgTElORSwgYW5kIHRoZW4gU0VU Ci0gICBMSU5FIDxkZXZpY2U+IHRvIHRvdGFsbHkgY2xvc2UgYW5kIHJlb3BlbiB0aGUgZGV2aWNl LiBJZiBhbGwgZWxzZQotICAgZmFpbHMsIFNFVCBDQVJSSUVSIE9GRi4KLQotICAgQy1LZXJtaXQg ZG9lcyBub3QgY29udGFpbiBhbnkgcGFydGljdWxhciBzdXBwb3J0IGZvciBBVCZUIERhdGFLaXQK LSAgIGRldmljZXMuIFlvdSBjYW4gdXNlIEtlcm1pdCBzb2Z0d2FyZSB0byBkaWFsIGluIHRvIGEg RGF0YUtpdCBsaW5lLCBidXQKLSAgIEMtS2VybWl0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNp YWxpemVkIGNvZGUgcmVxdWlyZWQgdG8gZGlhbCBvdXQKLSAgIGZyb20gYSBEYXRhS2l0IGxpbmUu IElmIHRoZSBVbml4IHN5c3RlbSBpcyBjb25uZWN0ZWQgdG8gRGF0YUtpdCB2aWEKLSAgIHNlcmlh bCBwb3J0cywgZGlhbG91dCBzaG91bGQgd29yayBub3JtYWxseSAoZS5nLiBzZXQgbGluZSAvZGV2 L3R0eW0xLAotICAgc2V0IHNwZWVkIDE5MjAwLCBjb25uZWN0LCBhbmQgdGhlbiBzZWUgdGhlIERF U1RJTkFUSU9OOiBwcm9tcHQsIGZyb20KLSAgIHdoaWNoIHlvdSBjYW4gY29ubmVjdCB0byBhbm90 aGVyIGNvbXB1dGVyIG9uIHRoZSBEYXRhS2l0IG5ldHdvcmsgb3IgdG8KLSAgIGFuIG91dGdvaW5n IG1vZGVtIHBvb2wsIGV0YykuIEJ1dCBpZiB0aGUgVW5peCBzeXN0ZW0gaXMgY29ubmVjdGVkIHRv Ci0gICB0aGUgRGF0YUtpdCBuZXR3b3JrIHRocm91Z2ggdGhlIHNwZWNpYWwgRGF0YUtpdCBpbnRl cmZhY2UgYm9hcmQsIHRoZW4KLSAgIFNFVCBMSU5FIHRvIGEgRGF0YUtpdCBwc2V1ZG9kZXZpY2Ug KHN1Y2ggYXMgL2Rldi9kazAzMXQpIHdpbGwgbm90IHdvcmsKLSAgICh5b3UgbXVzdCB1c2UgdGhl IERhdGFLaXQgImRrIiBvciAiZGtjdSIgcHJvZ3JhbSBpbnN0ZWFkKS4gSW4gQy1LZXJtaXQKLSAg IDcuMCBhbmQgbGF0ZXIsIHlvdSBjYW4gbWFrZSBLZXJtaXQgY29ubmVjdGlvbnMgInRob3VnaCIg ZGsgb3IgZGtjdQotICAgdXNpbmcgInNldCBsaW5lIC9wdHkiLgotCi0gICBJbiBzb21lIEJTRC1i YXNlZCBVbml4IEMtS2VybWl0IHZlcnNpb25zLCBTRVQgTElORSB0byBhIHBvcnQgdGhhdCBoYXMK LSAgIG5vdGhpbmcgcGx1Z2dlZCBpbiB0byBpdCB3aXRoIFNFVCBDQVJSSUVSIE9OIHdpbGwgaGFu ZyB0aGUgcHJvZ3JhbSAoYXMKLSAgIGl0IHNob3VsZCksIGJ1dCBpdCBjYW4ndCBiZSBpbnRlcnJ1 cHRlZCB3aXRoIEN0cmwtQy4gVGhlIGludGVycnVwdCB0cmFwCi0gICBpcyBjb3JyZWN0bHkgYXJt ZWQsIGJ1dCBhcHBhcmVudGx5IHRoZSBVbml4IG9wZW4oKSBjYWxsIGNhbm5vdCBiZQotICAgaW50 ZXJydXB0ZWQgaW4gdGhpcyBjYXNlLiBXaGVuIFNFVCBDQVJSSUVSIGlzIE9GRiBvciBBVVRPLCB0 aGUgU0VUIExJTkUKLSAgIHdpbGwgZXZlbnR1YWxseSByZXR1cm4sIGJ1dCB0aGVuIHRoZSBwcm9n cmFtIGhhbmdzICh1bmludGVycnVwdGlibHkpCi0gICB3aGVuIHRoZSBFWElUIG9yIFFVSVQgY29t bWFuZCAob3IsIHByZXN1bWFibHksIGFub3RoZXIgU0VUIExJTkUKLSAgIGNvbW1hbmQpIGlzIGdp dmVuLiBUaGUgbGF0dGVyIGlzIHByb2JhYmx5IGJlY2F1c2Ugb2YgdGhlIGF0dGVtcHQgdG8KLSAg IGhhbmcgdXAgdGhlIG1vZGVtLiAoSW4gZWRpdCAxNjksIGEgdGltZW91dCBhbGFybSB3YXMgcGxh Y2VkIGFyb3VuZCB0aGlzCi0gICBvcGVyYXRpb24uKQotCi0gICBXaXRoIFNFVCBESUFMIEhBTkdV UCBPRkYgaW4gZWZmZWN0LCB0aGUgRElBTCBjb21tYW5kIG1pZ2h0IHdvcmsgb25seQotICAgb25j ZSwgYnV0IG5vdCBhZ2FpbiBvbiB0aGUgc2FtZSBkZXZpY2UuIEluIHRoYXQgY2FzZSwgZ2l2ZSBh IENMT1NFCi0gICBjb21tYW5kIHRvIGNsb3NlIHRoZSBkZXZpY2UsIGFuZCB0aGVuIGFub3RoZXIg U0VUIExJTkUgY29tbWFuZCB0bwotICAgcmUtb3BlbiB0aGUgc2FtZSBkZXZpY2UuIE9yIHJlYnVp bGQgeW91ciB2ZXJzaW9uIG9mIEtlcm1pdCB3aXRoIHRoZQotICAgLURDTFNPUE4gY29tcGlsZS10 aW1lIHN3aXRjaC4KLQotICAgVGhlIERJQUwgY29tbWFuZCBzYXlzICJUbyBjYW5jZWw6IFR5cGUg eW91ciBpbnRlcnJ1cHQgY2hhcmFjdGVyCi0gICAobm9ybWFsbHkgQ3RybC1DKS4iIFRoaXMgaXMg anVzdCBvbmUgZXhhbXBsZSBvZiB3aGVyZSBwcm9ncmFtIG1lc3NhZ2VzCi0gICBhbmQgZG9jdW1l bnRhdGlvbiBhc3N1bWUgeW91ciBpbnRlcnJ1cHQgY2hhcmFjdGVyIGlzIEN0cmwtQy4gQnV0IGl0 Ci0gICBtaWdodCBiZSBzb21ldGhpbmcgZWxzZS4gSW4gbW9zdCAoYnV0IG5vdCBuZWNlc3Nhcmls eSBhbGwpIGNhc2VzLCB0aGUKLSAgIGNoYXJhY3RlciByZWZlcnJlZCB0byBpcyB0aGUgb25lIHRo YXQgZ2VuZXJhdGVzIHRoZSBTSUdJTlQgc2lnbmFsLiBJZgotICAgQ3RybC1DIGRvZXNuJ3QgYWN0 IGFzIGFuIGludGVycnVwdCBjaGFyYWN0ZXIgZm9yIHlvdSwgdHlwZSB0aGUgVW5peAotICAgY29t bWFuZCAic3R0eSAtYSIgb3IgInN0dHkgYWxsIiBvciAic3R0eSBldmVyeXRoaW5nIiB0byBzZWUg d2hhdCB5b3VyCi0gICBpbnRlcnJ1cHQgY2hhcmFjdGVyIGlzLiAoS2VybWl0IGNvdWxkIGJlIG1h ZGUgdG8gZmluZCBvdXQgd2hhdCB0aGUKLSAgIGludGVycnVwdCBjaGFyYWN0ZXIgaXMsIGJ1dCB0 aGlzIHdvdWxkIHJlcXVpcmUgYSBsb3Qgb2YKLSAgIHBsYXRmb3JtLWRlcGVuZGVudCBjb2Rpbmcg YW5kICNpZmRlZnMsIGFuZCBhIG5ldyByb3V0aW5lIGFuZCBpbnRlcmZhY2UKLSAgIGJldHdlZW4g dGhlIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgcGxhdGZvcm0taW5kZXBlbmRlbnQgcGFydHMgb2Yg dGhlCi0gICBwcm9ncmFtLikKLQotICAgSW4gZ2VuZXJhbCwgdGhlIGhhbmd1cCBvcGVyYXRpb24g b24gYSBzZXJpYWwgY29tbXVuaWNhdGlvbiBkZXZpY2UgaXMKLSAgIHByb25lIHRvIGZhaWx1cmUu IEMtS2VybWl0IHRyaWVzIHRvIHN1cHBvcnQgbWFueSwgbWFueSBkaWZmZXJlbnQga2luZHMKLSAg IG9mIGNvbXB1dGVycywgYW5kIHRoZXJlIHNlZW1zIHRvIGJlIG5vIHBvcnRhYmxlIG1ldGhvZCBm b3IgaGFuZ2luZyB1cCBhCi0gICBtb2RlbSBjb25uZWN0aW9uIChpLmUuIHR1cm5pbmcgb2ZmIHRo ZSBSUy0yMzIgRFRSIHNpZ25hbCBhbmQgdGhlbgotICAgdHVybmluZyBpdCBiYWNrIG9uIGFnYWlu KS4gSWYgSEFOR1VQLCBESUFMLCBhbmQvb3IgQ3RybC1cSCBkbyBub3Qgd29yawotICAgZm9yIHlv dSwgYW5kIHlvdSBhcmUgYSBwcm9ncmFtbWVyLCBsb29rIGF0IHRoZSB0dGhhbmcoKSBmdW5jdGlv biBpbgotICAgY2t1dGlvLmMgYW5kIHNlZSBpZiB5b3UgY2FuIGFkZCBjb2RlIHRvIG1ha2UgaXQg d29yayBjb3JyZWN0bHkgZm9yIHlvdXIKLSAgIHN5c3RlbSwgYW5kIHNlbmQgdGhlIGNvZGUgdG8g dGhlIGFkZHJlc3MgYWJvdmUuIChOT1RFOiBUaGlzIHByb2JsZW0gaGFzCi0gICBiZWVuIGxhcmdl bHkgc2lkZXN0ZXBwZWQgYXMgb2YgZWRpdCAxODgsIGluIHdoaWNoIEtlcm1pdCBmaXJzdCBhdHRl bXB0cwotICAgdG8gaGFuZyB1cCB0aGUgbW9kZW0gYnkgImVzY2FwaW5nIGJhY2siIHZpYSArKysg YW5kIHRoZW4gZ2l2aW5nIHRoZQotICAgbW9kZW0ncyBoYW5ndXAgY29tbWFuZCwgZS5nLiBBVEgw LCB3aGVuIERJQUwgTU9ERU0tSEFOR1VQIGlzIE9OLCB3aGljaAotICAgaXMgdGhlIGRlZmF1bHQg c2V0dGluZy4pCi0KLSAgIEV2ZW4gd2hlbiBLZXJtaXQncyBtb2RlbS1jb250cm9sIHNvZnR3YXJl IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGZvcgotICAgeW91ciBjb21wdXRlciwgaXQgY2FuIG9u bHkgd29yayByaWdodCBpZiB5b3VyIG1vZGVtIGlzIGFsc28gY29uZmlndXJlZAotICAgdG8gYXNz ZXJ0IHRoZSBDRCBzaWduYWwgd2hlbiBpdCBpcyBjb25uZWN0ZWQgdG8gdGhlIHJlbW90ZSBtb2Rl bSBhbmQgdG8KLSAgIGhhbmcgdXAgdGhlIGNvbm5lY3Rpb24gd2hlbiB5b3VyIGNvbXB1dGVyIGRy b3BzIHRoZSBEVFIgc2lnbmFsLiBTbwotICAgYmVmb3JlIGRlY2lkaW5nIEtlcm1pdCBkb2Vzbid0 IHdvcmsgd2l0aCB5b3VyIG1vZGVtLCBjaGVjayB5b3VyIG1vZGVtCi0gICBjb25maWd1cmF0aW9u IEFORCB0aGUgY2FibGUgKGlmIGFueSkgY29ubmVjdGluZyB5b3VyIG1vZGVtIHRvIHRoZQotICAg Y29tcHV0ZXIgLS0gaXQgc2hvdWxkIGJlIGEgc3RyYWlnaHQtdGhyb3VnaCBbNTczXW1vZGVtIGNh YmxlIGNvbmR1Y3RpbmcKLSAgIHRoZSBzaWduYWxzIEZHLCBTRywgVEQsIFJELCBSVFMsIENUUywg RFNSLCBEVFIsIENELCBhbmQgUkkuCi0KLSAgIE1hbnkgVW5peCBzeXN0ZW1zIGtlZXAgYWxpYXNl cyBmb3IgZGlhbG91dCBkZXZpY2VzOyBmb3IgZXhhbXBsZSwKLSAgIC9kZXYvYWN1IG1pZ2h0IGJl IGFuIGFsaWFzIGZvciAvZGV2L3R0eTAwLiBCdXQgbW9zdCBvZiB0aGVzZSBVbml4Ci0gICBzeXN0 ZW1zIGFsc28gdXNlIFVVQ1AgbG9ja2ZpbGUgY29udmVudGlvbnMgdGhhdCBkbyBub3QgdGFrZSB0 aGlzCi0gICBhbGlhc2luZyBpbnRvIGFjY291bnQsIHNvIGlmIG9uZSB1c2VyIGFzc2lnbnMgKGUu Zy4pIC9kZXYvYWN1LCB0aGVuCi0gICBhbm90aGVyIHVzZXIgY2FuIHN0aWxsIGFzc2lnbiB0aGUg c2FtZSBkZXZpY2UgYnkgcmVmZXJyaW5nIHRvIGl0cyBvdGhlcgotICAgbmFtZS4gVGhpcyBpcyBu b3QgYSBLZXJtaXQgcHJvYmxlbSAtLSBLZXJtaXQgbXVzdCBmb2xsb3cgdGhlIGxvY2tmaWxlCi0g ICBjb252ZW50aW9ucyB1c2VkIGJ5IHRoZSB2ZW5kb3Itc3VwcGxpZWQgc29mdHdhcmUgKGN1LCB0 aXAsIHV1Y3ApLgotCi0gICBUaGUgU0VUIEZMT1ctQ09OVFJPTCBLRUVQIG9wdGlvbiBzaG91bGQg YmUgZ2l2ZW4gKmJlZm9yZSogYW55Ci0gICBjb21tdW5pY2F0aW9uIChkaWFsaW5nLCB0ZXJtaW5h bCBlbXVsYXRpb24sIGZpbGUgdHJhbnNmZXIsCi0gICBJTlBVVC9PVVRQVVQvVFJBTlNNSVQsIGV0 YykgaXMgYXR0ZW1wdGVkLCBpZiB5b3Ugd2FudCBDLUtlcm1pdCB0byB1c2UKLSAgIGFsbCBvZiB0 aGUgZGV2aWNlJ3MgcHJlZXhpc3RpbmcgZmxvdy1jb250cm9sIHJlbGF0ZWQgc2V0dGluZ3MuIFRo ZQotICAgZGVmYXVsdCBmbG93LWNvbnRyb2wgc2V0dGluZyBpcyBYT04vWE9GRiwgYW5kIGl0IHdp bGwgdGFrZSBlZmZlY3Qgd2hlbgotICAgdGhlIGZpcnN0IGNvbW11bmljYXRpb24tcmVsYXRlZCBj b21tYW5kIGlzIGdpdmVuLCBhbmQgYSBzdWJzZXF1ZW50IFNFVAotICAgRkxPVyBLRUVQIGNvbW1h bmQgd2lsbCBub3QgbmVjZXNzYXJpbHkga25vdyBob3cgdG8gcmVzdG9yZSAqYWxsKiBvZiB0aGUK LSAgIGRldmljZSdzIG9yaWdpbmFsIGZsb3ctY29udHJvbCBzZXR0aW5ncy4KLQotNy4yLiBOZXR3 b3JrIENvbm5lY3Rpb25zCi0KLSAgIEMtS2VybWl0IHRyaWVzIHRvIHVzZSB0aGUgOHRoIGJpdCBm b3IgZGF0YSB3aGVuIHBhcml0eSBpcyBOT05FLCBhbmQKLSAgIHRoaXMgZ2VuZXJhbGx5IHdvcmtz IG9uIHJlYWwgVW5peCB0ZXJtaW5hbCAodHR5KSBkZXZpY2VzLCBidXQgaXQgb2Z0ZW4KLSAgIGRv ZXMgbm90IHdvcmsgd2hlbiB0aGUgVW5peCBzeXN0ZW0gaXMgYWNjZXNzZWQgb3ZlciBhIG5ldHdv cmsgdmlhCi0gICB0ZWxuZXQgb3IgcmxvZ2luIHByb3RvY29scywgaW5jbHVkaW5nIChpbiBtYW55 IGNhc2VzKSB0aHJvdWdoIHRlcm1pbmFsCi0gICBzZXJ2ZXJzLiBGb3IgZXhhbXBsZSwgYW4gRW5j b3JlIGNvbXB1dGVyIHdpdGggQW5uZXggdGVybWluYWwgc2VydmVycwotICAgb25seSBnaXZlcyBh IDctYml0IHBhdGggaWYgdGhlIHJsb2dpbiBwcm90b2NvbCBpcyBzZWxlY3RlZCBpbiB0aGUKLSAg IHRlcm1pbmFsIHNlcnZlciBidXQgaXQgZ2l2ZXMgdGhlIGZ1bGwgOCBiaXRzIGlmIHRoZSBwcm9w cmlldGFyeSBSRFAKLSAgIHByb3RvY29sIGlzIHVzZWQuCi0KLSAgIElmIGZpbGUgdHJhbnNmZXIg ZG9lcyBub3Qgd29yayB0aHJvdWdoIGEgaG9zdCB0byB3aGljaCB5b3UgaGF2ZQotICAgcmxvZ2lu J2QsIHVzZSAicmxvZ2luIC04IiByYXRoZXIgdGhhbiAicmxvZ2luIi4gSWYgdGhhdCBkb2Vzbid0 IHdvcmssCi0gICB0ZWxsIGJvdGggS2VybWl0IHByb2dyYW1zIHRvICJzZXQgcGFyaXR5IHNwYWNl Ii4KLQotICAgVGhlIEVuY29yZSBURUxORVQgc2VydmVyIGRvZXMgbm90IGFsbG93IGxvbmcgYnVy c3RzIG9mIGlucHV0LiBXaGVuIHlvdQotICAgaGF2ZSBhIFRFTE5FVCBjb25uZWN0aW9uIHRvIGFu IEVuY29yZSwgdGVsbCBDLUtlcm1pdCBvbiB0aGUgRW5jb3JlIHRvCi0gICBTRVQgUkVDRUlWRSBQ QUNLRVQtTEVOR1RIIDIwMCBvciB0aGVyZWFib3V0cy4KLQotOC4gSEFSRFdBUkUgRkxPVyBDT05U Uk9MCi0KLSAgIFsgWzU3NF1Ub3AgXSBbIFs1NzVdQ29udGVudHMgXSBbIFs1NzZdTmV4dCBdIFsg WzU3N11QcmV2aW91cyBdCi0KLSAgIFNFVCBGTE9XIFJUUy9DVFMgaXMgYXZhaWxhYmxlIGluIFVu aXggQy1LZXJtaXQgb25seSB3aGVuIHRoZSB1bmRlcmx5aW5nCi0gICBvcGVyYXRpbmcgc3lzdGVt IHByb3ZpZGVzIGFuIEFwcGxpY2F0aW9uIFByb2dyYW0gSW50ZXJmYWNlIChBUEkpIGZvcgotICAg dHVybmluZyB0aGlzIGZlYXR1cmUgb24gYW5kIG9mZiB1bmRlciBwcm9ncmFtIGNvbnRyb2wsIHdo aWNoIHR1cm5zIG91dAotICAgdG8gYmUgYSByYXRoZXIgcmFyZSBmZWF0dXJlIGFtb25nIFVuaXgg c3lzdGVtcy4gVG8gc2VlIGlmIHlvdXIgVW5peAotICAgQy1LZXJtaXQgdmVyc2lvbiBzdXBwb3J0 cyBoYXJkd2FyZSBmbG93IGNvbnRyb2wsIHR5cGUgInNldCBmbG93ID8iIGF0Ci0gICB0aGUgQy1L ZXJtaXQgcHJvbXB0LCBhbmQgbG9vayBmb3IgInJ0cy9jdHMiIGFtb25nIHRoZSBvcHRpb25zLiBP dGhlcgotICAgY29tbW9uIHNpdHVhdGlvbnMgaW5jbHVkZToKLQotICAgIDEuIFRoZSBBUEkgaXMg YXZhaWxhYmxlLCBzbyAic2V0IGZsb3cgcnRzL2N0cyIgYXBwZWFycyBhcyBhIHZhbGlkCi0gICAg ICAgQy1LZXJtaXQgY29tbWFuZCwgYnV0IGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcgYmVjYXVzZSB0 aGUgZGV2aWNlCi0gICAgICAgZHJpdmVyIChwYXJ0IG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtKSB3 YXMgbmV2ZXIgY29kZWQgdG8gZG8KLSAgICAgICBoYXJkd2FyZSBmbG93IGNvbnRyb2wuIFRoaXMg aXMgY29tbW9uIGFtb25nIFN5c3RlbSBWIFI0Ci0gICAgICAgaW1wbGVtZW50YXRpb25zIChkZXRh aWxzIGJlbG93KS4KLSAgICAyLiBUaGUgQVBJIGlzIG5vdCBhdmFpbGFibGUsIHNvICJzZXQgZmxv dyBydHMvY3RzIiBkb2VzIE5PVCBhcHBlYXIgYXMKLSAgICAgICBhIHZhbGlkIEMtS2VybWl0IGNv bW1hbmQsIGJ1dCB5b3UgY2FuIHN0aWxsIGdldCBSVFMvQ1RTIGZsb3cKLSAgICAgICBjb250cm9s IGJ5IHNlbGVjdGluZyBhIHNwZWNpYWxseSBuYW1lZCBkZXZpY2UgaW4geW91ciBTRVQgTElORQot ICAgICAgIGNvbW1hbmQuIEV4YW1wbGVzOgotICAgICAgICAgICsgTmVYVFNURVA6IC9kZXYvY3Vm YSBpbnN0ZWFkIG9mIC9kZXYvY3VhLCAvZGV2L2N1ZmIgaW5zdGVhZCBvZgotICAgICAgICAgICAg L2Rldi9jdWIgKDY4MDQwIG9ubHk7ICJtYW4genMiIGZvciBmdXJ0aGVyIGluZm8pLgotICAgICAg ICAgICsgSVJJWDogL2Rldi90dHlmMiBpbnN0ZWFkIG9mIC9kZXYvdHR5ZDIgb3IgL2Rldi90dHlt MiAoIm1hbiA3Ci0gICAgICAgICAgICBzZXJpYWwiKS4KLSAgICAzLiBUaGUgQVBJIGlzIGF2YWls YWJsZSwgZG9lc24ndCB3b3JrLCBidXQgYSB3b3JrYXJvdW5kIGFzIGluICgyKSBjYW4KLSAgICAg ICBiZSB1c2VkLgotICAgIDQuIFRoZSBBUEkgaXMgYXZhaWxhYmxlLCBidXQgS2VybWl0IGRvZXNu J3Qga25vdyBhYm91dCBpdC4gSW4gdGhlc2UKLSAgICAgICBjYXNlcywgeW91IGNhbiB1c3VhbGx5 IHVzZSBhbiBzdHR5IGNvbW1hbmQgdG8gZW5hYmxlIFJUUy9DVFMgb24gdGhlCi0gICAgICAgZGV2 aWNlLCBlLmcuICJzdHR5IGNydHNjdHMiIG9yICJzdHR5IGN0c2Zsb3ciLCAic3R0eSBydHNmbG93 IiwKLSAgICAgICBiZWZvcmUgc3RhcnRpbmcgS2VybWl0LCBhbmQgdGhlbiB0ZWxsIEtlcm1pdCB0 byBTRVQgRkxPVyBLRUVQLgotICAgIDUuIE5vIEFQSSBhbmQgbm8gc3BlY2lhbCBkZXZpY2UgZHJp dmVycy4gSGFyZHdhcmUgZmxvdyBjb250cm9sIGlzCi0gICAgICAgY29tcGxldGVseSB1bmF2YWls YWJsZS4KLQotICAgU3lzdGVtIFYgUjQgYmFzZWQgVW5peGVzIGFyZSBzdXBwb3NlZCB0byBzdXBw bHkgYSA8dGVybWlveC5oPiBmaWxlLAotICAgd2hpY2ggZ2l2ZXMgS2VybWl0IHRoZSBuZWNlc3Nh cnkgaW50ZXJmYWNlIHRvIGNvbW1hbmQgdGhlIHRlcm1pbmFsCi0gICBkcml2ZXIgdG8gZW5hYmxl L2Rpc2FibGUgaGFyZHdhcmUgZmxvdyBjb250cm9sLiBVbmZvcnR1bmF0ZWx5LCBidXQKLSAgIHBy ZWRpY3RhYmx5LCBtYW55IGltcGxlbWVudGF0aW9ucyBvZiBTVlI0IHdoaW1zaWNhbGx5IHBsYWNl IHRoaXMgZmlsZQotICAgaW4gL3Vzci9pbmNsdWRlL3N5cyByYXRoZXIgdGhhbiAvdXNyL2luY2x1 ZGUgKHdoZXJlIFNWSUQgY2xlYXJseQotICAgc3BlY2lmaWVzIGl0IHNob3VsZCBiZTsgc2VlIFNW SUQsIFRoaXJkIEVkaXRpb24sIFYxLCB0ZXJtaW94KEJBX0RFVikuCi0gICBUaHVzIGlmIHlvdSBi dWlsZCBDLUtlcm1pdCB3aXRoIGFueSBvZiB0aGUgbWFrZWZpbGUgZW50cmllcyB0aGF0Ci0gICBj b250YWluIC1EVEVSTUlPWCBvciAtRFNURVJNSU9YICh0aGUgbGF0dGVyIHRvIHNlbGVjdCA8c3lz L3Rlcm1pb3guaD4pLAotICAgQy1LZXJtaXQgd2lsbCBoYXZlICJzZXQgZmxvdyBydHMvY3RzIiBh bmQgcG9zc2libHkgb3RoZXIgaGFyZHdhcmUKLSAgIGZsb3ctY29udHJvbCByZWxhdGVkIGNvbW1h bmRzLiBCVVQuLi4gVGhhdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuCi0gICB0aGF0IHRoZXkg d2lsbCB3b3JrLiBJbiBzb21lIGNhc2VzLCB0aGUgdW5kZXJseWluZyBmdW5jdGlvbnMgYXJlIHNp bXBseQotICAgbm90IGNvZGVkIGludG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0uCi0KLSAgIFdBUk5J Tkc6IFdoZW4gaGFyZHdhcmUgZmxvdyBjb250cm9sIGlzIGF2YWlsYWJsZSwgYW5kIHlvdSBlbmFi bGUgaW4KLSAgIEtlcm1pdCBvbiBhIGRldmljZSB0aGF0IGlzIG5vdCByZWNlaXZpbmcgdGhlIENU UyBzaWduYWwsIEtlcm1pdCBjYW4KLSAgIGhhbmcgd2FpdGluZyBmb3IgQ1RTIHRvIGNvbWUgdXAu IFRoaXMgaXMgbW9zdCBlYXNpbHkgc2VlbiB3aGVuIHRoZQotICAgbG9jYWwgc2VyaWFsIHBvcnQg aGFzIG5vdGhpbmcgcGx1Z2dlZCBpbiB0byBpdCwgb3IgaXMgY29ubmVjdGVkIHRvIGFuCi0gICBl eHRlcm5hbCBtb2RlbSB0aGF0IGlzIHBvd2VyZWQgb2ZmLgotCi05LiBURVJNSU5BTCBDT05ORUNU SU9OIEFORCBLRVkgTUFQUElORwotCi0gICBbIFs1NzhdVG9wIF0gWyBbNTc5XUNvbnRlbnRzIF0g WyBbNTgwXU5leHQgXSBbIFs1ODFdUHJldmlvdXMgXQotCi0gICBDLUtlcm1pdCBpcyBub3QgYSB0 ZXJtaW5hbCBlbXVsYXRvci4gUmVmZXIgdG8gcGFnZSAxNDcgb2YgWzU4Ml1Vc2luZwotICAgQy1L ZXJtaXQsIDJuZCBFZGl0aW9uOiAiTW9zdCB2ZXJzaW9ucyBvZiBDLUtlcm1pdCAtLSBVbml4LCBW TVMsIEFPUy9WUywKLSAgIFZPUywgZXRjIC0tIHByb3ZpZGUgdGVybWluYWwgY29ubmVjdGlvbiB3 aXRob3V0IGVtdWxhdGlvbi4gVGhlc2UKLSAgIHZlcnNpb25zIGFjdCBhcyBhICdzZW1pdHJhbnNw YXJlbnQgcGlwZScgYmV0d2VlbiB0aGUgcmVtb3RlIGNvbXB1dGVyCi0gICBhbmQgeW91ciB0ZXJt aW5hbCwgdGVybWluYWwgZW11bGF0b3IsIGNvbnNvbGUgZHJpdmVyLCBvciB3aW5kb3csIHdoaWNo Ci0gICBpbiB0dXJuIGVtdWxhdGVzIChvciBpcykgYSBzcGVjaWZpYyBraW5kIG9mIHRlcm1pbmFs LiIgVGhlIGVudmlyb25tZW50Ci0gICBpbiB3aGljaCB5b3UgcnVuIEMtS2VybWl0IGlzIHVwIHRv IHlvdS4KLQotICAgSWYgeW91IGFyZSBhbiBYIFdpbmRvd3MgdXNlciwgeW91IHNob3VsZCBiZSBh d2FyZSBvZiBhbiBhbHRlcm5hdGl2ZSB0bwotICAgeHRlcm0gdGhhdCBzdXBwb3J0cyBWVDIyMCBl bXVsYXRpb24sIGZyb20gVGhvbWFzIEUuIERpY2tleToKLQotICBbNTgzXWh0dHA6Ly9kaWNrZXku aGlzLmNvbS94dGVybS94dGVybS5odG1sCi0KLSAgIFVuaXggQy1LZXJtaXQncyBTRVQgS0VZIGNv bW1hbmQgY3VycmVudGx5IGNhbiBub3QgYmUgdXNlZCB3aXRoIGtleXMKLSAgIHRoYXQgZ2VuZXJh dGUgIndpZGUiIHNjYW4gY29kZXMgb3IgbXVsdGlieXRlIHNlcXVlbmNlcywgc3VjaCBhcwotICAg d29ya3N0YXRpb24gZnVuY3Rpb24gb3IgYXJyb3cga2V5cywgYmVjYXVzZSBVbml4IEMtS2VybWl0 IGRvZXMgbm90IGhhdmUKLSAgIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGtleWJvYXJkLgotCi0gICBI b3dldmVyLCBtYW55IFVuaXggd29ya3N0YXRpb25zIGFuZC9vciBjb25zb2xlIGRyaXZlcnMgcHJv dmlkZSB0aGVpcgotICAgb3duIGtleSBtYXBwaW5nIGZlYXR1cmUuIFdpdGggeHRlcm0sIGZvciBl eGFtcGxlLCB5b3UgY2FuIHVzZSAneG1vZG1hcCcKLSAgICgibWFuIHhtb2RtYXAiIGZvciBkZXRh aWxzKTsgaGVyZSBpcyBhbiB4dGVybSBtYXBwaW5nIHRvIG1hcCB0aGUgU3VuCi0gICBrZXlib2Fy ZCB0byBERUMgVlQyMDAgdmFsdWVzIGZvciB1c2Ugd2l0aCBWVC10ZXJtaW5hbCBvcmllbnRlZAot ICAgYXBwbGljYXRpb25zIGxpa2UgVk1TIEVWRToKLQotICBrZXljb2RlIDEwMT1LUF8wCi0gIGtl eWNvZGUgMTE5PUtQXzEKLSAga2V5Y29kZSAxMjA9S1BfMgotICBrZXljb2RlIDEyMT1LUF8zCi0g IGtleWNvZGUgOTg9S1BfNAotICBrZXljb2RlIDk5PUtQXzUKLSAga2V5Y29kZSAxMDA9S1BfNgot ICBrZXljb2RlIDc1PUtQXzcKLSAga2V5Y29kZSA3Nj1LUF84Ci0gIGtleWNvZGUgNzc9S1BfOQot ICBrZXljb2RlIDUyPUtQX0YxCi0gIGtleWNvZGUgNTM9S1BfRjIKLSAga2V5Y29kZSA1ND1LUF9G MwotICBrZXljb2RlIDU3PUtQX0RlY2ltYWwKLSAga2V5Y29kZSAyOD1MZWZ0Ci0gIGtleWNvZGUg Mjk9UmlnaHQKLSAga2V5Y29kZSAzMD1LUF9TZXBhcmF0b3IKLSAga2V5Y29kZSAxMDU9S1BfRjQK LSAga2V5Y29kZSA3OD1LUF9TdWJ0cmFjdAotICBrZXljb2RlIDg9TGVmdAotICBrZXljb2RlIDEw PVJpZ2h0Ci0gIGtleWNvZGUgMzI9VXAKLSAga2V5Y29kZSAzMz1Eb3duCi0gIGtleWNvZGUgOTc9 S1BfRW50ZXIKLQotICAgVXNlcnMgb2YgTGludXggY29uc29sZXMgY2FuIHVzZSBsb2Fka2V5cyAo Im1hbiBkdW1wa2V5cyBsb2Fka2V5cwotICAga2V5dGFibGVzIiBmb3IgZGV0YWlscy4gVGhlIGZv cm1hdCB1c2VkIGJ5IGxvYWRrZXlzIGlzIGNvbXBhdGlibGUgd2l0aAotICAgdGhhdCB1c2VkIGJ5 IFhtb2RtYXAsIGFsdGhvdWdoIGl0IGlzIG5vdCBkZWZpbml0ZWx5IGNlcnRhaW4gdGhhdCB0aGUK LSAgIGtleWNvZGVzIGFyZSBjb21wYXRpYmxlIGZvciBkaWZmZXJlbnQga2V5Ym9hcmQgdHlwZXMg KGUuZy4gU3VuIHZzIEhQIHZzCi0gICBQQywgZXRjKS4KLQotMTAuIEZJTEUgVFJBTlNGRVIKLQot ICAgWyBbNTg0XVRvcCBdIFsgWzU4NV1Db250ZW50cyBdIFsgWzU4Nl1OZXh0IF0gWyBbNTg3XVBy ZXZpb3VzIF0KLQotICAgT24gbW9zdCBwbGF0Zm9ybXMsIEMtS2VybWl0IGNhbiBub3QgaGFuZGxl IGZpbGVzIGxvbmdlciB0aGFuIDJeMzEgb3IKLSAgIDJeMzIgYnl0ZXMgbG9uZywgYmVjYXVzZSBp dCB1c2VzIHRoZSB0cmFkaXRpb25hbCBmaWxlIGkvbyBBUElzIHRoYXQgdXNlCi0gICAzMi1iaXQg d29yZHMgdG8gcmVwcmVzZW50IHRoZSBmaWxlIHNpemUuIFRvIGFjY29tbW9kYXRlIGxvbmdlciBm aWxlcywKLSAgIHdlIHdvdWxkIGhhdmUgdG8gc3dpdGNoIHRvIGEgbmV3IGFuZCBkaWZmZXJlbnQg QVBJLiBVbmZvcnR1bmF0ZWx5LCBlYWNoCi0gICBwbGF0Zm9ybSBoYXMgYSBkaWZmZXJlbnQgb25l LCBhIG5pZ2h0bWFyZSB0byBoYW5kbGUgaW4gcG9ydGFibGUgY29kZS4KLSAgIFRoZSBDLUtlcm1p dCBmaWxlIGNvZGUgd2FzIHdyaXR0ZW4gaW4gdGhlIGRheXMgbG9uZyBiZWZvcmUgZmlsZXMgbG9u Z2VyCi0gICB0aGFuIDJHQiB3ZXJlIHN1cHBvcnRlZCBvciBldmVuIGNvbnRlbXBsYXRlZCBpbiB0 aGUgb3BlcmF0aW5nIHN5c3RlbXMKLSAgIHdoZXJlIEMtS2VybWl0IHJhbi4KLQotICAgSWYgdXBs b2FkcyAob3IgZG93bmxvYWRzKSBmYWlsIGltbWVkaWF0ZWx5LCBnaXZlIHRoZSBDQVVUSU9VUyBj b21tYW5kCi0gICB0byBLZXJtaXQgYW5kIHRyeSBhZ2Fpbi4gSWYgdGhleSBzdGlsbCBmYWlsLCB0 aGVuIHRyeSBTRVQgUFJFRklYSU5HCi0gICBBTEwuIElmIHRoZXkgc3RpbGwgZmFpbCwgdHJ5IFNF VCBQQVJJVFkgU1BBQ0UuIElmIHRoZXkgc3RpbGwgZmFpbCwgdHJ5Ci0gICBST0JVU1QuCi0KLSAg IElmIHJlY2VwdGlvbiAocGFydGljdWxhcmx5IG9mIGxhcmdlIGZpbGVzIGFuZC9vciBiaW5hcnkg ZmlsZXMpIGJlZ2lucwotICAgc3VjY2Vzc2Z1bGx5IGJ1dCB0aGVuIGZhaWwgY29uc2lzdGVudGx5 IGFmdGVyIGEgY2VydGFpbiBhbW91bnQgb2YgYnl0ZXMKLSAgIGhhdmUgYmVlbiBzZW50LCBjaGVj azoKLQotICAgICAqIFlvdXIgdWxpbWl0ICgidWxpbWl0IC1hIikKLSAgICAgKiBUaGUgYW1vdW50 IG9mIGF2YWlsYWJsZSBzcGFjZSBvbiB0aGUgdGFyZ2V0IGRpc2sgKCJkZiAuIiBvciAiZGYgLWsK LSAgICAgICAuIikKLSAgICAgKiBZb3VyIHBlcnNvbmFsIGRpc2sgcXVvdGEgKHBsYXRmb3JtLSBh bmQgc2l0ZS1kZXBlbmRlbnQpCi0gICAgICogVGhlIG1heGltdW0gZmlsZSBzaXplIG9uIHRoZSBy ZWNlaXZlcidzIGZpbGUgc3lzdGVtIChlLmcuIDJHQiBpbgotICAgICAgIG9sZCB2ZXJzaW9ucyB0 aGUgTGludXggVkZTIGZpbGUgc3lzdGVtLCBhbmQvb3IgaW4gYXBwbGljYXRpb25zIHRoYXQKLSAg ICAgICBoYXZlIG5vdCBiZWVuIHJlY29kZWQgdG8gdXNlIG5ldyAibGFyZ2UgZmlsZSIgQVBJcyku Ci0gICAgICogSWYgaXQncyBhbiBORlMtbW91bnRlZCBkaXNrIChpZiBzbywgdHJ5IHVwbG9hZGlu ZyB0byBhIGxvY2FsIGRpc2spCi0gICAgICogSXMgdGhlcmUgYW4gImlkbGUgbGltaXQiIG9uIHRo ZSByZWNlaXZpbmcgZW5kPwotCi0gICBJZiBub25lIG9mIHRoZXNlIHNlZW0gdG8gZXhwbGFpbiBp dCwgdGhlbiB0aGUgcHJvYmxlbSBpcyBub3Qgc2l6ZQotICAgcmVsYXRlZCwgYnV0IHJlZmxlY3Rz IHNvbWUgY2xhc2ggYmV0d2VlbiB0aGUgZmlsZSBjb250ZW50cyBhbmQgdGhlCi0gICBjaGFyYWN0 ZXJpc3RpY3Mgb2YgdGhlIGNvbm5lY3Rpb24sIGluIHdoaWNoIGNhc2UgZm9sbG93IHRoZQotICAg aW5zdHJ1Y3Rpb25zIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGhpcyBzZWN0aW9uLgotCi0g ICBTdXBwb3NlIHR3byBjb3BpZXMgb2YgS2VybWl0IGFyZSByZWNlaXZpbmcgZmlsZXMgaW50byB0 aGUgc2FtZQotICAgZGlyZWN0b3J5LCBhbmQgdGhlIGZpbGVzIGhhdmUgdGhlIHNhbWUgbmFtZSwg ZS5nLiAiZm9vLmJhciIuIFdoaWNoZXZlcgotICAgb25lIHN0YXJ0cyBmaXJzdCBvcGVucyBhbiBv dXRwdXQgZmlsZSBjYWxsZWQgImZvby5iYXIiLiBUaGUgc2Vjb25kIG9uZQotICAgc2VlcyB0aGVy ZSBpcyBhbHJlYWR5IGEgZm9vLmJhciBmaWxlLCBhbmQgc28gcmVuYW1lcyB0aGUgZXhpc3RpbmcK LSAgIGZvby5iYXIgdG8gZm9vLmJhci5+MX4gKG9yIHdoYXRldmVyKS4gV2hlbiB0aGUgZmlyc3Qg ZmlsZSBoYXMgYmVlbgotICAgcmVjZWl2ZWQgY29tcGxldGVseSwgS2VybWl0IGdvZXMgdG8gY2hh bmdlIGl0cyBtb2RpZmljYXRpb24gdGltZSBhbmQKLSAgIHBlcm1pc3Npb25zIHRvIHRob3NlIGdp dmVuIGJ5IHRoZSBmaWxlIHNlbmRlciBpbiB0aGUgQXR0cmlidXRlIHBhY2tldC4KLSAgIEJ1dCBp biBVbml4LCB0aGUgQVBJcyBmb3IgZG9pbmcgdGhpcyB0YWtlIGEgZmlsZW5hbWUsIG5vdCBhIGZp bGUKLSAgIGRlc2NyaXB0b3IuIFNpbmNlIHRoZSBmaXJzdCBLZXJtaXQncyBmaWxlIGhhcyBiZWVu IHJlbmFtZWQsIGFuZCB0aGUKLSAgIHNlY29uZCBLZXJtaXQgaXMgdXNpbmcgdGhlIG9yaWdpbmFs IG5hbWUsIHRoZSBmaXJzdCBLZXJtaXQgY2hhbmdlcyB0aGUKLSAgIG1vZHRpbWUgYW5kIHBlcm1p c3Npb25zIG9mIHRoZSBzZWNvbmQgS2VybWl0J3MgZmlsZSwgbm90IGl0cyBvd24uCi0gICBBbHRo b3VnaCB0aGVyZSBtaWdodCBiZSBhIHdheSB0byB3b3JrIGFyb3VuZCB0aGlzIGluIHRoZSBjb2Rl LCBlLmcuCi0gICB1c2luZyBpbm9kZSBudW1iZXJzIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggZmls ZSBpcyB3aGljaCwgdGhpcyB3b3VsZCBiZQotICAgdHJpY2t5IGFuZCBtb3N0IGxpa2VseSBub3Qg dmVyeSBwb3J0YWJsZS4gSXQncyBiZXR0ZXIgdG8gc2V0IHVwIHlvdXIKLSAgIGFwcGxpY2F0aW9u IHRvIHByZXZlbnQgc3VjaCB0aGluZ3MgZnJvbSBoYXBwZW5pbmcsIHdoaWNoIGlzIGVhc3kgZW5v dWdoCi0gICB1c2luZyB0aGUgc2NyaXB0IGxhbmd1YWdlLCBmaWxlbmFtZSB0ZW1wbGF0ZXMsIGV0 Yy4KLQotICAgU3VwcG9zZSB5b3Ugc3RhcnQgQy1LZXJtaXQgd2l0aCBhIGNvbW1hbmQtbGluZSBh cmd1bWVudCB0byBzZW5kIG9yCi0gICByZWNlaXZlIGEgZmlsZSAoZS5nLiAia2VybWl0IC1yIikg YW5kIHRoZW4gdHlwZSBDdHJsLVxjIGltbWVkaWF0ZWx5Ci0gICBhZnRlcndhcmRzIHRvIGVzY2Fw ZSBiYWNrIGFuZCBpbml0aWF0ZSB0aGUgb3RoZXIgZW5kIG9mIHRoZSB0cmFuc2ZlciwKLSAgIEJV VCB5b3VyIGxvY2FsIEtlcm1pdCdzIGVzY2FwZSBjaGFyYWN0ZXIgaXMgbm90IEN0cmwtXC4gSW4g dGhpcyBjYXNlLAotICAgdGhlIGxvY2FsIEtlcm1pdCBwYXNzZXMgdGhlIEN0cmwtXCB0byB0aGUg cmVtb3RlIHN5c3RlbSwgYW5kIGlmIHRoaXMgaXMKLSAgIFVuaXgsIEN0cmwtXCBpcyBsaWtlbHkg dG8gYmUgaXRzIFNJR1FVSVQgY2hhcmFjdGVyLCB3aGljaCBjYXVzZXMgdGhlCi0gICBjdXJyZW50 IHByb2dyYW0gdG8gaGFsdCBhbmQgZHVtcCBjb3JlLiBXZWxsLCBqdXN0IGFib3V0IHRoZSBmaXJz dCB0aGluZwotICAgQy1LZXJtaXQgZG9lcyB3aGVuIGl0IHN0YXJ0cyBpcyB0byBkaXNhYmxlIHRo ZSBTSUdRVUlUIHNpZ25hbC4gSG93ZXZlciwKLSAgIGl0IGlzIHN0aWxsIHBvc3NpYmxlIGZvciBT SUdRVUlUIHRvIGNhdXNlIEtlcm1pdCB0byBxdWl0IGFuZCBkdW1wIGNvcmUKLSAgIGlmIGl0IGlz IGRlbGl2ZXJlZCB3aGlsZSBLZXJtaXQgaXMgYmVpbmcgbG9hZGVkIG9yIHN0YXJ0ZWQsIGJlZm9y ZSB0aGUKLSAgIHNpZ25hbCBjYW4gYmUgZGlzYWJsZWQuIFRoZXJlJ3Mgbm90aGluZyBLZXJtaXQg aXRzZWxmIGNhbiBkbyBhYm91dAotICAgdGhpcywgYnV0IHlvdSBjYW4gcHJldmVudCBpdCBmcm9t IGhhcHBlbmluZyBieSBkaXNhYmxpbmcgU0lHUVVJVCBpbgotICAgeW91ciBVbml4IHNlc3Npb24u IFRoZSBjb21tYW5kIGlzIHVzdWFsbHkgc29tZXRoaW5nIGxpa2U6Ci0KLSAgc3R0eSBxdWl0IHVu ZGVmCi0KLSAgIFVuaXggQy1LZXJtaXQgZG9lcyBub3QgcmVqZWN0IGluY29taW5nIGZpbGVzIG9u IHRoZSBiYXNpcyBvZiBzaXplLgotICAgVGhlcmUgYXBwZWFycyB0byBiZSBubyBnb29kIChyZWxp YWJsZSwgcG9ydGFibGUpIHdheSB0byBkZXRlcm1pbmUgaW4KLSAgIGFkdmFuY2UgaG93IG11Y2gg ZGlzayBzcGFjZSBpcyBhdmFpbGFibGUsIGVpdGhlciBvbiB0aGUgZGV2aWNlLCBvcgotICAgKHdo ZW4gcXVvdGFzIG9yIG90aGVyIGxpbWl0cyBhcmUgaW52b2x2ZWQpIHRvIHRoZSB1c2VyLgotCi0g ICBVbml4IEMtS2VybWl0IGRpc2NhcmRzIGFsbCBjYXJyaWFnZSByZXR1cm5zIGZyb20gaW5jb21p bmcgZmlsZXMgd2hlbiBpbgotICAgdGV4dCBtb2RlLgotCi0gICBJZiBDLUtlcm1pdCBoYXMgcHJv YmxlbXMgY3JlYXRpbmcgZmlsZXMgaW4gd3JpdGFibGUgZGlyZWN0b3JpZXMgd2hlbiBpdAotICAg aXMgaW5zdGFsbGVkIHNldHVpZCBvciBzZXRnaWQgb24gQlNELWJhc2VkIHZlcnNpb25zIG9mIFVu aXggc3VjaCBhcwotICAgTmVYVFNURVAgMy4wLCBpdCBwcm9iYWJseSBuZWVkcyB0byBiZSByZWJ1 aWx0IHdpdGggdGhlIC1EU1dfQUNDX0lECi0gICBjb21waWxhdGlvbiBzd2l0Y2guCi0KLSAgIElm IHlvdSBTRVQgRklMRSBESVNQTEFZIEZVTExTQ1JFRU4sIGFuZCBDLUtlcm1pdCBjb21wbGFpbnMg IlNvcnJ5LAotICAgdGVybWluYWwgdHlwZSBub3Qgc3VwcG9ydGVkIiwgaXQgbWVhbnMgdGhhdCB0 aGUgdGVybWluYWwgbGlicmFyeQotICAgKHRlcm1jYXAgb3IgdGVybWxpYikgdGhhdCBDLUtlcm1p dCB3YXMgYnVpbHQgd2l0aCBkb2VzIG5vdCBrbm93IGFib3V0IGEKLSAgIHRlcm1pbmFsIHdob3Nl IG5hbWUgaXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgeW91ciBURVJNIGVudmlyb25tZW50Ci0gICB2 YXJpYWJsZS4gSWYgdGhpcyBoYXBwZW5zLCBidXQgeW91IHdhbnQgdG8gaGF2ZSB0aGUgZnVsbHNj cmVlbiBmaWxlCi0gICB0cmFuc2ZlciBkaXNwbGF5LCBFWElUIGZyb20gQy1LZXJtaXQgYW5kIHNl dCBhIFVuaXggdGVybWluYWwgdHlwZSBmcm9tCi0gICBhbW9uZyB0aGUgc3VwcG9ydGVkIHZhbHVl cyB0aGF0IGlzIGFsc28gc3VwcG9ydGVkIGJ5IHlvdXIgdGVybWluYWwKLSAgIGVtdWxhdG9yLCBv ciBlbHNlIGhhdmUgYW4gZW50cnkgZm9yIHlvdXIgdGVybWluYWwgdHlwZSBhZGRlZCB0byB0aGUK LSAgIHN5c3RlbSB0ZXJtY2FwIGFuZC9vciB0ZXJtaW5mbyBkYXRhYmFzZS4KLQotICAgSWYgeW91 IGF0dGVtcHQgdG8gc3VzcGVuZCBDLUtlcm1pdCBkdXJpbmcgbG9jYWwtbW9kZSBmaWxlIHRyYW5z ZmVyIGFuZAotICAgdGhlbiBjb250aW51ZSBpdCBpbiB0aGUgYmFja2dyb3VuZCAodmlhIGJnKSwg aXQgd2lsbCBibG9jayBmb3IgInR0eQotICAgb3V0cHV0IiBpZiB5b3UgYXJlIHVzaW5nIHRoZSBG VUxMU0NSRUVOIGZpbGUgdHJhbnNmZXIgZGlzcGxheS4gVGhpcyBpcwotICAgYXBwYXJlbnRseSBh IHByb2JsZW0gd2l0aCBjdXJzZXMuIE1vdmluZyBhIGxvY2FsLW1vZGUgZmlsZSB0cmFuc2Zlcgot ICAgYmFjayBhbmQgZm9ydGggYmV0d2VlbiBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIHdvcmtz IGNvcnJlY3RseSwKLSAgIGhvd2V2ZXIsIHdpdGggdGhlIFNFUklBTCwgQ1JULCBCUklFRiwgb3Ig Tk9ORSBmaWxlIHRyYW5zZmVyIGRpc3BsYXlzLgotCi0gICBJZiBDLUtlcm1pdCdzIGNvbW1hbmQg cGFyc2VyIG5vIGxvbmdlciBlY2hvZXMsIG9yIG90aGVyd2lzZSBhY3RzCi0gICBzdHJhbmdlbHks IGFmdGVyIHJldHVybmluZyBmcm9tIGEgZmlsZSB0cmFuc2ZlciB3aXRoIHRoZSBmdWxsc2NyZWVu Ci0gICAoY3Vyc2VzKSBkaXNwbGF5LCBhbmQgdGhlIGN1cnNlcyBsaWJyYXJ5IGZvciB5b3VyIHZl cnNpb24gb2YgVW5peAotICAgaW5jbHVkZXMgdGhlIG5ld3Rlcm0oKSBmdW5jdGlvbiwgdGhlbiB0 cnkgcmVidWlsZGluZyB5b3VyIHZlcnNpb24gb2YKLSAgIEMtS2VybWl0IHdpdGggLURDS19ORVdU RVJNLiBTaW1pbGFybHkgaWYgaXQgZWNob2VzIGRvdWJseSwgd2hpY2ggbWlnaHQKLSAgIGV2ZW4g aGFwcGVuIGR1cmluZyBhIHN1YnNlcXVlbnQgQ09OTkVDVCBzZXNzaW9uLiBJZiByZWJ1aWxkaW5n IHdpdGgKLSAgIC1EQ0tfTkVXVEVSTSBkb2Vzbid0IGZpeCBpdCwgdGhlbiB0aGVyZSBpcyBzb21l dGhpbmcgdmVyeSBzdHJhbmdlIGFib3V0Ci0gICB5b3VyIHN5c3RlbSdzIGN1cnNlcyBsaWJyYXJ5 LCBhbmQgeW91IHNob3VsZCBwcm9iYWJseSBub3QgdXNlIGl0LiBUZWxsCi0gICBDLUtlcm1pdCB0 byBTRVQgRklMRSBESVNQTEFZIENSVCwgQlJJRUYsIG9yIGFueXRoaW5nIGVsc2Ugb3RoZXIgdGhh bgotICAgRlVMTFNDUkVFTiwgYW5kL29yIHJlYnVpbGQgd2l0aG91dCAtRENLX0NVUlNFUywgYW5k IHdpdGhvdXQgbGlua2luZwotICAgd2l0aCAodGVybWxpYiBhbmQpIGN1cnNlcy4gTm90ZTogVGhp cyBwcm9ibGVtIHNlZW1lZCB0byBoYXZlIGVzY2FsYXRlZAotICAgaW4gQy1LZXJtaXQgNy4wLCBh bmQgLURDS19ORVdURVJNIGhhZCB0byBiZSBhZGRlZCB0byBtYW55IGJ1aWxkcyB0aGF0Ci0gICBw cmV2aW91c2x5IHdvcmtlZCB3aXRob3V0IGl0OiBMaW51eCwgQUlYIDQuMSwgREcvVVgsIGV0Yy4g SW4gdGhlIExpbnV4Ci0gICBjYXNlLCBpdCBpcyBvYnZpb3VzbHkgYmVjYXVzZSBvZiBjaGFuZ2Vz IGluIHRoZSAobiljdXJzZXMgbGlicmFyeTsgdGhlCi0gICBjYXVzZSBpbiB0aGUgb3RoZXIgY2Fz ZXMgaXMgbm90IGtub3duLgotCi0gICBDLUtlcm1pdCBjcmVhdGVzIGJhY2t1cC1maWxlIG5hbWVz IChzdWNoIGFzICJvb2ZhLnR4dC5+MX4iKSBiYXNlZCBvbgotICAgaXRzIGtub3dsZWRnZSBvZiB0 aGUgbWF4aW11bSBmaWxlbmFtZSBsZW5ndGggb24gdGhlIHBsYXRmb3JtIHdoZXJlIGl0Ci0gICBp cyBydW5uaW5nLCB3aGljaCBpcyBsZWFybmVkIGF0IGNvbXBpbGUgdGltZSwgYmFzZWQgb24gTUFY TkFNTEVOIG9yCi0gICBlcXVpdmFsZW50IHN5bWJvbHMgZnJvbSB0aGUgc3lzdGVtIGhlYWRlciBm aWxlcy4gQnV0IHN1cHBvc2UgQy1LZXJtaXQKLSAgIGlzIHJlY2VpdmluZyBmaWxlcyBvbiBhIFVu aXggcGxhdGZvcm0gdGhhdCBzdXBwb3J0cyBsb25nIGZpbGVuYW1lcywgYnV0Ci0gICB0aGUgaW5j b21pbmcgZmlsZXMgYXJlIGJlaW5nIHN0b3JlZCBvbiBhbiBORlMtbW91bnRlZCBmaWxlIHN5c3Rl bSB0aGF0Ci0gICBzdXBwb3J0cyBvbmx5IHNob3J0IG5hbWVzLiBORlMgbWFwcyB0aGUgZXh0ZXJu YWwgc3lzdGVtIHRvIHRoZSBsb2NhbAotICAgQVBJcywgc28gQy1LZXJtaXQgaGFzIG5vIHdheSBv ZiBrbm93aW5nIHRoYXQgbG9uZyBuYW1lcyB3aWxsIGJlCi0gICB0cnVuY2F0ZWQuIE9yIHRoYXQg Qy1LZXJtaXQgaXMgcnVubmluZyBvbiBhIHZlcnNpb24gb2YgVW5peCB0aGF0Ci0gICBzdXBwb3J0 cyBib3RoIGxvbmctbmFtZSBhbmQgc2hvcnQtbmFtZSBmaWxlIHN5c3RlbXMgc2ltdWx0YW5lb3Vz bHkKLSAgIChzdWNoIGFzIEhQLVVYIDcuMDApLiBUaGlzIGNhbiBjYXVzZSB1bmV4cGVjdGVkIGJl aGF2aW9yIHdoZW4gY3JlYXRpbmcKLSAgIGJhY2t1cCBmaWxlcywgb3Igd29yc2UuIEZvciBleGFt cGxlLCB5b3UgYXJlIHNlbmRpbmcgYSBncm91cCBvZiBmaWxlcwotICAgd2hvc2UgbmFtZXMgYXJl IGRpZmZlcmVudGlhdGVkIG9ubHkgYnkgY2hhcmFjdGVycyBwYXN0IHRoZSBwb2ludCBhdAotICAg d2hpY2ggdGhleSB3b3VsZCBiZSB0cnVuY2F0ZWQsIGVhY2ggZmlsZSB3aWxsIG92ZXJ3cml0ZSB0 aGUgcHJldmlvdXMKLSAgIG9uZSB1cG9uIGFycml2YWwuCi0KLTExLiBFWFRFUk5BTCBGSUxFIFRS QU5TRkVSIFBST1RPQ09MUwotCi0gICBbIFs1ODhdVG9wIF0gWyBbNTg5XUNvbnRlbnRzIF0gWyBb NTkwXU5leHQgXSBbIFs1OTFdUHJldmlvdXMgXQotCi0gICBTRUNUSU9OIENPTlRFTlRTCi0KLSAg MTEuMS4gWzU5Ml1DLUtlcm1pdCBhcyBhbiBFeHRlcm5hbCBQcm90b2NvbAotICAxMS4yLiBbNTkz XUludm9raW5nIEV4dGVybmFsIFByb3RvY29scyBmcm9tIEMtS2VybWl0Ci0KLSAgIFVuaXggQy1L ZXJtaXQgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBjb21tdW5pY2F0aW9u cwotICAgc29mdHdhcmUgaW4gdmFyaW91cyB3YXlzLiBDLUtlcm1pdCBjYW4gYmUgaW52b2tlZCBm cm9tIGFub3RoZXIKLSAgIGNvbW11bmljYXRpb25zIHByb2dyYW0gYXMgYW4gImV4dGVybmFsIHBy b3RvY29sIiwgYW5kIEMtS2VybWl0IGNhbiBhbHNvCi0gICBpbnZva2Ugb3RoZXIgY29tbXVuaWNh dGlvbiBzb2Z0d2FyZSB0byBwZXJmb3JtIGV4dGVybmFsIHByb3RvY29scy4KLQotICAgVGhpcyBz b3J0IG9mIG9wZXJhdGlvbiBtYWtlcyBzZW5zZSBvbmx5IHdoZW4geW91IGFyZSBkaWFsaW5nIG91 dCBmcm9tCi0gICB5b3VyIFVuaXggc3lzdGVtIChvciBtYWtpbmcgYSBuZXR3b3JrIGNvbm5lY3Rp b24gZnJvbSBpdCkuIElmIHRoZSBVbml4Ci0gICBzeXN0ZW0gaXMgdGhlIG9uZSB5b3UgaGF2ZSBk aWFsZWQgaW4gdG8sIHlvdSBkb24ndCBuZWVkIGFueSBvZiB0aGVzZQotICAgdHJpY2tzLiBKdXN0 IHJ1biB0aGUgZGVzaXJlZCBzb2Z0d2FyZSBvbiB5b3VyIFVuaXggc3lzdGVtIGluc3RlYWQgb2YK LSAgIEtlcm1pdC4gV2hlbiBkaWFsaW5nIG91dCBmcm9tIGEgVW5peCBzeXN0ZW0sIHRoZSBkaWZm aWN1bHR5IGlzIGdldHRpbmcKLSAgIHR3byBwcm9ncmFtcyB0byBzaGFyZSB0aGUgc2FtZSBjb21t dW5pY2F0aW9uIGRldmljZSBpbiBzcGl0ZSBvZiB0aGUKLSAgIFVuaXggVVVDUCBsb2NrZmlsZSBt ZWNoYW5pc20sIHdoaWNoIHdvdWxkIG5vcm1hbGx5IHByZXZlbnQgYW55IHNoYXJpbmcsCi0gICBh bmQgcHJldmVudGluZyB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wgZnJvbSBjbG9zaW5nIChhbmQgdGhl cmVmb3JlCi0gICBoYW5naW5nIHVwKSB0aGUgZGV2aWNlIHdoZW4gaXQgZXhpdHMgYmFjayB0byB0 aGUgcHJvZ3JhbSB0aGF0IGludm9rZWQKLSAgIGl0LgotCi0xMS4xLiBDLUtFUk1JVCBBUyBBTiBF WFRFUk5BTCBQUk9UT0NPTAotCi0gICBbIFs1OTRdVG9wIF0gWyBbNTk1XUNvbnRlbnRzIF0gWyBb NTk2XVNlY3Rpb24gQ29udGVudHMgXSBbIFs1OTddTmV4dCBdCi0KLSAgIChUaGlzIHNlY3Rpb24g ZGVsZXRlZDsgc2VlIFs1OThdVXNpbmcgQy1LZXJtaXQsIDJuZCBFZCwgQ2hhcHRlciAxNC4pCi0K LSAgICJwY29tbSIgaXMgYSBnZW5lcmFsLXB1cnBvc2UgdGVybWluYWwgcHJvZ3JhbSB0aGF0IHBy b3ZpZGVzIGZpbGUKLSAgIHRyYW5zZmVyIGNhcGFiaWxpdGllcyBpdHNlbGYgKFgtIGFuZCBZTU9E RU0gdmFyaWF0aW9ucykgYW5kIHRoZSBhYmlsaXR5Ci0gICB0byBjYWxsIG9uIGV4dGVybmFsIHBy b2dyYW1zIHRvIGRvIGZpbGUgdHJhbnNmZXJzIChaTU9ERU0gYW5kIEtlcm1pdCwKLSAgIGZvciBl eGFtcGxlKS4gWW91IGNhbiB0ZWxsIHBjb21tIHRoZSBjb21tYW5kIHRvIHNlbmQgb3IgcmVjZWl2 ZSBhIGZpbGUKLSAgIHdpdGggYW4gZXh0ZXJuYWwgcHJvdG9jb2w6Ci0gICAgICAgICAgICAgICAg ICAgICAgICBTZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY2VpdmUKLSAgICAgICAg Wk1PREVNICAgICAgICAgIHN6IGZpbGVuYW1lICAgICAgICAgICAgICAgICAgICAgcnoKLSAgICAg ICAgS2VybWl0ICAgICAgICAgIGtlcm1pdCAtcyBmaWxlbmFtZSAgICAgICAgICAgICAga2VybWl0 IC1yCi0KLSAgIHBjb21tIHJ1bnMgZXh0ZXJuYWwgcHJvZ3JhbXMgZm9yIGZpbGUgdHJhbnNmZXIg YnkgbWFraW5nIHN0ZGluIGFuZAotICAgc3Rkb3V0IHBvaW50IHRvIHRoZSBtb2RlbSBwb3J0LCBh bmQgdGhlbiBleGVjLWluZyAiL2Jpbi9zaCAtYyB4eHgiCi0gICAod2hlcmUgeHh4IGlzIHRoZSBh cHByb3ByaWF0ZSBjb21tYW5kKS4gSG93ZXZlciwgQy1LZXJtaXQgZG9lcyBub3QKLSAgIHRyZWF0 IHN0ZGluIGFuZCBzdGRvdXQgYXMgdGhlIGNvbW11bmljYXRpb24gZGV2aWNlIHVubGVzcyB5b3Ug aW5zdHJ1Y3QKLSAgIGl0OgotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVjZWl2ZQotICAgICAgICBLZXJtaXQgICAgICAgICAga2Vy bWl0IC1sIDAgLXMgZmlsZW5hbWUgICAgICAgICBrZXJtaXQgLWwgMCAtcgotCi0gICBUaGUgIi1s IDAiIG9wdGlvbiBtZWFucyB0byB1c2UgZmlsZSBkZXNjcmlwdG9yIDAgZm9yIHRoZSBjb21tdW5p Y2F0aW9uCi0gICBkZXZpY2UuCi0KLSAgIEluIGdlbmVyYWwsIGFueSBwcm9ncmFtIGNhbiBwYXNz IGFueSBvcGVuIGZpbGUgZGVzY3JpcHRvciB0byBDLUtlcm1pdAotICAgZm9yIHRoZSBjb21tdW5p Y2F0aW9uIGRldmljZSBpbiB0aGUgIi1sIiBjb21tYW5kLWxpbmUgb3B0aW9uLiBXaGVuCi0gICBL ZXJtaXQgaXMgZ2l2ZW4gYSBudW1iZXIgYXMgdGhlIGFyZ3VtZW50IHRvIHRoZSAiLWwiIG9wdGlv biwgaXQgc2ltcGx5Ci0gICB1c2VzIGl0IGFzIGEgZmlsZSBkZXNjcmlwdG9yLCBhbmQgaXQgZG9l cyBub3QgYXR0ZW1wdCB0byBjbG9zZSBpdCB1cG9uCi0gICBleGl0LgotCi0gICBIZXJlJ3MgYW5v dGhlciBleGFtcGxlLCBmb3IgU2V5b24gKGEgTGludXggY29tbXVuaWNhdGlvbiBwcm9ncmFtKS4K LSAgIEZpcnN0IHRyeSB0aGUgdGVjaG5pcXVlIGFib3ZlLiBJZiB0aGF0IHdvcmtzLCBmaW5lOyBv dGhlcndpc2UuLi4gSWYKLSAgIFNleW9uIGRvZXMgbm90IGdpdmUgeW91IGEgd2F5IHRvIGFjY2Vz cyBhbmQgcGFzcyBhbG9uZyB0aGUgZmlsZQotICAgZGVzY3JpcHRvciwgYnV0IGl0IHN0YXJ0cyB1 cCB0aGUgS2VybWl0IHByb2dyYW0gd2l0aCBpdHMgc3RhbmRhcmQgaS9vCi0gICByZWRpcmVjdGVk IHRvIGl0cyAoU2V5b24ncykgY29tbXVuaWNhdGlvbnMgZmlsZSBkZXNjcmlwdG9yLCB5b3UgY2Fu Ci0gICBhbHNvIGV4cGVyaW1lbnQgd2l0aCB0aGUgZm9sbG93aW5nIG1ldGhvZCwgd2hpY2ggd29y a2VkIGhlcmUgaW4gYnJpZWYKLSAgIHRlc3RzIG9uIFN1bk9TLiBJbnN0ZWFkIG9mIGhhdmluZyBT ZXlvbiB1c2UgImtlcm1pdCAtciIgb3IgImtlcm1pdCAtcwotICAgZmlsZW5hbWUiIGFzIGl0cyBL ZXJtaXQgcHJvdG9jb2wgY29tbWFuZHMsIHVzZSBzb21ldGhpbmcgbGlrZSB0aGlzCi0gICAoZXhh bXBsZXMgYXNzdW1lIEMtS2VybWl0IDYuMCk6Ci0KLSAgIEZvciBzZXJpYWwgY29ubmVjdGlvbnM6 Ci0KLSAga2VybWl0IC1ZcVFsIDAgLXIgICAgICAgICAgICAgICAgICAgICA8LS0gdG8gcmVjZWl2 ZQotICBrZXJtaXQgLVlxUWwgMCAtcyBmaWxlbmFtZShzKSAgICAgICAgIDwtLSB0byBzZW5kIG9u ZSBvciBtb3JlIGZpbGVzCi0KLSAgIEZvciBUZWxuZXQgY29ubmVjdGlvbnM6Ci0KLSAga2VybWl0 IC1ZcVFGIDAgLXIgICAgICAgICAgICAgICAgICAgICA8LS0gdG8gcmVjZWl2ZQotICBrZXJtaXQg LVlxUUYgMCAtcyBmaWxlbmFtZShzKSAgICAgICAgIDwtLSB0byBzZW5kIG9uZSBvciBtb3JlIGZp bGVzCi0KLSAgIENvbW1hbmQgbGluZSBvcHRpb25zOgotCi0gIFkgICAgLSBza2lwIGV4ZWN1dGlu ZyB0aGUgaW5pdCBmaWxlCi0gIFEgICAgLSB1c2UgZmFzdCBmaWxlIHRyYW5zZmVyIHNldHRpbmdz IChkZWZhdWx0IGluIDguMCkKLSAgbCAwICAtIHRyYW5zZmVyIGZpbGVzIHVzaW5nIGZpbGUgZGVz Y3JpcHRvciAwIGZvciBhIHNlcmlhbCBjb25uZWN0aW9uCi0gIEYgMCAgLSB0cmFuc2ZlciBmaWxl cyB1c2luZyBmaWxlIGRlc2NyaXB0b3IgMCBmb3IgYSBUZWxuZXQgY29ubmVjdGlvbgotICBxICAg IC0gcXVpZXQgLSBubyBtZXNzYWdlcwotICByICAgIC0gcmVjZWl2ZQotICBzICAgIC0gc2VuZAot Ci0xMS4yLiBJTlZPS0lORyBFWFRFUk5BTCBQUk9UT0NPTFMgRlJPTSBDLUtFUk1JVAotCi0gICBb IFs1OTldVG9wIF0gWyBbNjAwXUNvbnRlbnRzIF0gWyBbNjAxXVNlY3Rpb24gQ29udGVudHMgXSBb Ci0gICBbNjAyXVByZXZpb3VzIF0KLQotICAgICAoVGhpcyBzZWN0aW9uIGlzIG9ic29sZXRlLCBi dXQgbm90IHRvdGFsbHkgdXNlbGVzcy4gU2VlIENoYXB0ZXIgMTQKLSAgICAgb2YgWzYwM11Vc2lu ZyBDLUtlcm1pdCwgMm5kIEVkaXRpb24pLgotCi0gICBBZnRlciB5b3UgaGF2ZSBvcGVuZWQgYSBj b21tdW5pY2F0aW9uIGxpbmsgd2l0aCBDLUtlcm1pdCdzIFNFVCBMSU5FCi0gICAoU0VUIFBPUlQp IG9yIFNFVCBIT1NUIChURUxORVQpIGNvbW1hbmQsIEMtS2VybWl0IG1ha2VzIGl0cyBmaWxlCi0g ICBkZXNjcmlwdG9yIGF2YWlsYWJsZSB0byB5b3UgaW4gdGhlIFx2KHR0eWZkKSB2YXJpYWJsZSBz byB5b3UgY2FuIHBhc3MKLSAgIGl0IGFsb25nIHRvIG90aGVyIHByb2dyYW1zIHRoYXQgeW91IFJV TiBmcm9tIEMtS2VybWl0LiBIZXJlLCBmb3IKLSAgIGV4YW1wbGUsIEMtS2VybWl0IHJ1bnMgaXRz ZWxmIGFzIGFuIGV4dGVybmFsIHByb3RvY29sOgotCi0gIEMtS2VybWl0PnNldCBtb2RlbSB0eXBl IGhheWVzCi0gIEMtS2VybWl0PnNldCBsaW5lIC9kZXYvYWN1Ci0gIEMtS2VybWl0PnNldCBzcGVl ZCAyNDAwCi0gIEMtS2VybWl0PmRpYWwgNzY1NDMyMQotICAgQ2FsbCBjb21wbGV0ZS4KLSAgQy1L ZXJtaXQ+ZWNobyBcdih0dHlmZCkKLSAgIDMKLSAgQy1LZXJtaXQ+cnVuIGtlcm1pdCAtbCBcdih0 dHlmZCkKLQotICAgT3RoZXIgcHJvZ3JhbXMgdGhhdCBhY2NlcHQgb3BlbiBmaWxlIGRlc2NyaXB0 b3JzIG9uIHRoZSBjb21tYW5kIGxpbmUKLSAgIGNhbiBiZSBzdGFydGVkIGluIHRoZSBzYW1lIHdh eS4KLQotICAgWW91IGNhbiBhbHNvIHVzZSB5b3VyIHNoZWxsJ3MgaS9vIHJlZGlyZWN0aW9uIGZh Y2lsaXRpZXMgdG8gYXNzaWduCi0gICBDLUtlcm1pdCdzIG9wZW4gZmlsZSBkZXNjcmlwdG9yICh0 dHlmZCkgdG8gc3RkaW4gb3Igc3Rkb3V0LiBGb3IKLSAgIGV4YW1wbGUsIG9sZCB2ZXJzaW9ucyBv ZiB0aGUgVW5peCBaTU9ERU0gcHJvZ3JhbXMsIHN6IGFuZCByeiwgd2hlbgotICAgaW52b2tlZCBh cyBleHRlcm5hbCBwcm90b2NvbHMsIGV4cGVjdCB0byBmaW5kIHRoZSBjb21tdW5pY2F0aW9uIGRl dmljZQotICAgYXNzaWduZWQgdG8gc3RkaW4gYW5kIHN0ZG91dCB3aXRoIG5vIG9wdGlvbiBmb3Ig c3BlY2lmeWluZyBhbnkgb3RoZXIKLSAgIGZpbGUgZGVzY3JpcHRvciBvbiB0aGUgc3ogb3Igcnog Y29tbWFuZCBsaW5lLiBIb3dldmVyLCB5b3UgY2FuIHN0aWxsCi0gICBpbnZva2Ugc3ogYW5kIHJ6 IGFzIGV4dGVyaW9yIHByb3RvY29scyBmcm9tIEMtS2VybWl0IGlmIHlvdXIgY3VycmVudAotICAg c2hlbGwgKCRTSEVMTCB2YXJpYWJsZSkgaXMga3NoICh0aGUgS29ybiBzaGVsbCkgb3IgYmFzaCAo dGhlCi0gICBCb3VybmUtQWdhaW4gc2hlbGwpLCB3aGljaCBhbGxvd3MgYXNzaWdubWVudCBvZiBh cmJpdHJhcnkgZmlsZQotICAgZGVzY3JpcHRvcnMgdG8gc3RkaW4gYW5kIHN0ZG91dDoKLQotICBD LUtlcm1pdD4gcnVuIHJ6IDwmXHYodHR5ZmQpID4mXHYodHR5ZmQpCi0KLSAgIG9yOgotCi0gIEMt S2VybWl0PiBydW4gc3ogb29mYS56aXAgPCZcdih0dHlmZCkgPiZcdih0dHlmZCkKLQotICAgSW4g dmVyc2lvbiA1QSgxOTApIGFuZCBsYXRlciwgeW91IGNhbiB1c2UgQy1LZXJtaXQncyBSRURJUkVD VCBjb21tYW5kLAotICAgaWYgaXQgaXMgYXZhaWxhYmxlIGluIHlvdXIgdmVyc2lvbiBvZiBDLUtl cm1pdCwgdG8gYWNjb21wbGlzaCB0aGUgc2FtZQotICAgdGhpbmcgd2l0aG91dCBnb2luZyB0aHJv dWdoIHRoZSBzaGVsbDoKLQotICBDLUtlcm1pdD4gcmVkaXJlY3QgcnoKLQotICAgb3I6Ci0KLSAg Qy1LZXJtaXQ+IHJlZGlyZWN0IHN6IG9vZmEuemlwCi0KLSAgIEEgY29tcGxldGUgc2V0IG9mIHJ6 LHN6LHJiLHNiLHJ4LHN4IG1hY3JvcyBmb3IgVW5peCBDLUtlcm1pdCBpcyBkZWZpbmVkCi0gICBp biB0aGUgZmlsZSBja3VyenN6LmluaS4gSXQgYXV0b21hdGljYWxseSBjaG9vc2VzIHRoZSBiZXN0 IHJlZGlyZWN0aW9uCi0gICBtZXRob2QgKGJ1dCBpcyByZWR1bmRhbnQgc2luY2UgQy1LZXJtaXQg Ni4wLCB3aGljaCBub3cgaGFzIGJ1aWx0LWluCi0gICBzdXBwb3J0IGZvciBleHRlcm5hbCBwcm90 b2NvbHMgdmlhIGl0cyBTRVQgUFJPVE9DT0wgY29tbWFuZCkuCi0KLSAgIE5vdGUgdGhhdCBleHRl cm5hbCBwcm90b2NvbHMgY2FuIGJlIHVzZWQgb24gQy1LZXJtaXQgU0VUIExJTkUgb3IgU0VUCi0g ICBIT1NUIGNvbm5lY3Rpb25zIG9ubHkgaWYgdGhleSBvcGVyYXRlIHRocm91Z2ggc3RhbmRhcmQg aW5wdXQgYW5kCi0gICBzdGFuZGFyZCBvdXRwdXQuIElmIHRoZXkgb3BlbiB0aGVpciBvd24gY29u bmVjdGlvbnMsIEtlcm1pdCBjYW4ndAotICAgcmVkaXJlY3QgdGhlbSBvdmVyIGl0cyBvd24gY29u bmVjdGlvbi4KLQotMTIuIFNFQ1VSSVRZCi0KLSAgIFsgWzYwNF1Ub3AgXSBbIFs2MDVdQ29udGVu dHMgXSBbIFs2MDZdTmV4dCBdIFsgWzYwN11QcmV2aW91cyBdCi0KLSAgIEFzIG9mIHZlcnNpb24g Ny4wLCBDLUtlcm1pdCBzdXBwb3J0cyBhIHdpZGUgcmFuZ2Ugb2Ygc2VjdXJpdHkgb3B0aW9ucwot ICAgZm9yIGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0aW9uOiBLZXJiZXJvcyA0LCBLZXJiZXJv cyA1IC8gR1NTQVBJLAotICAgU1NML1RMUywgYW5kIFNSUC4gU2VlIHRoZSBzZXBhcmF0ZSBbNjA4 XXNlY3VyaXR5IGRvY3VtZW50IGZvciBkZXRhaWxzLgotCi0xMy4gTUlTQ0VMTEFORU9VUyBVU0VS IFJFUE9SVFMKLQotICAgWyBbNjA5XVRvcCBdIFsgWzYxMF1Db250ZW50cyBdIFsgWzYxMV1OZXh0 IF0gWyBbNjEyXVByZXZpb3VzIF0KLQotRGF0ZTogVGh1LCAxMiBNYXIgOTIgMTo1OToyNSBNRVoK LUZyb206IFdhbHRlciBNZWNreSA8d2FsdGVyQHJlbnQtYS1ndXJ1LmRlPgotU3ViamVjdDogSGVs cC5Vbml4LnN3Ci1Ubzogc3ZyNEBwY3Nic3QucGNzLmNvbSwgc291cmNlQHVzbC5jb20KLQotUFJP RFVDVDogICAgICAgIFVuaXgKLVJFTEVBU0U6ICAgICAgICBEZWxsIFNWUjQgVjIuMSAoaXMgVVNM IFYzLjApCi1NQUNISU5FOiAgICAgICAgQVQtMzg2Ci1QQVRITkFNRTogICAgICAgL3Vzci9saWIv bGliYy5zby4xCi0gICAgICAgICAgICAgICAgL3Vzci9jY3MvbGliL2xpYmMuYQotQUJTVFJBQ1Q6 ICAgICAgIEZ1bmN0aW9uIHR0eW5hbWUoKSBkb2VzIG5vdCBjbG9zZSBpdHMgZmlsZSBkZXNjcmlw dG9yCi1ERVNDUklQVElPTjoKLSAgICAgICAgdHR5bmFtZSgzQykgb3BlbnMgL2RldiBidXQgbmV2 ZXIgY2xvc2VzIGl0LiBTbyBpZiBpdCBpcyBjYWxsZWQKLSAgICAgICAgb2Z0ZW4gZW5vdWdoIHRo ZSBvcGVuKDIpIGluIHR0eW5hbWUoKSBmYWlscy4gQmVjYXVzZSB0aGUgYnJva2VuCi0gICAgICAg IHR0eW5hbWUoKSBpcyBpbiB0aGUgc2hhcmVkIGxpYiB0b28gYWxsIHByb2dyYW1zIHVzaW5nIGl0 IGNhbgotICAgICAgICBmYWlsIGlmIHRoZXkgY2FsbCBpdCBvZnRlbiBlbm91Z2guIE9uZSBpbXBv cnRhbnQgcHJvZ3JhbSBpcwotICAgICAgICB1dWNpY28gd2hpY2ggY2FsbHMgdHR5bmFtZSBmb3Ig ZXZlcnkgZmlsZSBpdCB0cmFuc2ZlcnMuCi0KLQotICAgSGVyZSBpcyBhIGxpdHRsZSB0ZXN0IHBy b2dyYW0gaWYgeW91ciBzeXN0ZW0gaGFzIHRoZSBidWc6Ci0KLSNpbmNsdWRlIDxzdGRsaWIuaD4K LSNpbmNsdWRlIDxzdGRpby5oPgotbWFpbigpIHsKLSAgICBpbnQgaSA9IDA7Ci0gICAgd2hpbGUg KHR0eW5hbWUoMCkgIT0gTlVMTCkKLSAgICAgIGkrKzsKLSAgICBwZXJyb3IoInR0eW5hbWUiKTsK LSAgICBwcmludGYoImk9JWRcbiIsIGkpOwotfQotCi0gICBJZiB0aGlzIHByb2dyYW0gcnVucyBs b25nZXIgdGhhbiBzb21lIHNlY29uZHMgeW91IGRvbid0IGhhdmUgdGhlIGJ1Zy4KLQotICAgV09S S0FST1VORDogTm9uZSBGSVg6IFZlcnkgZWFzeSBpZiB5b3UgaGF2ZSBzb3VyY2UgY29kZS4KLQot ICAgQW5vdGhlciB1c2VyIHJlcG9ydHMgc29tZSBtb3JlIGV4cGxpY2l0IHN5bXB0b21zIGFuZCBy ZWNvdmVyaWVzOgotCi0+IFdoYXQgaGFwcGVucyBpcyB3aGVuIGludm9raW5nIGNrZXJtaXQgd2Ug Z2V0IG9uZSBvZiB0aGUgZm9sbG93aW5nCi0+IGVycm9yIG1lc3NhZ2VzOgotPiAgIFlvdSBtdXN0 IHNldCBsaW5lCi0+ICAgTm90IGEgdHR5Ci0+ICAgTm8gbW9yZSBwcm9jZXNzZXMuCi0+IE9uZSBv ZiB0aGUgZm9sbG93aW5nIHRocmVlIGFjdGlvbnMgY2xlYXJzIHRoZSBwcm9ibGVtOgotPiAgIHNo dXRkb3duIC15IC1nMCAtaTYKLT4gICBraWxsIC05IHRoZSB0dHltb24gd2l0aCB0aGUgaGlnaGVz dCBQSUQKLT4gICBJbnZva2Ugc3lzYWRtIGFuZCBkaXNhYmxlIHRoZW4gZW5hYmxlIHRoZSBsaW5l IHlvdSB3YW50IHRvIHVzZS4KLT4gVHVybmluZyBvZmYgcmVzcGF3biBvZiBzYWMgLXQgMzAwIGFu ZCBnb2luZyB0byBnZXR0eSdzIGFuZCB1dWdldHR5J3MKLT4gZG9lcyBub3QgaGVscC4KLT4KLT4g QWxzbyBDLUtlcm1pdCByZXBvcnRzICI/dGltZWQgb3V0IGNsb3NpbmcgL2Rldi90dHl4eCIuCi0+ IElmIHRoaXMgaGFwcGVucyBhbGwgaXMgd2VsbC4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0KLSAgIChOb3RlOiB0aGUgZm9sbG93aW5nIHByb2JsZW0gYWxzbyBvY2N1cnMgb24g U0dJIGFuZCBwcm9iYWJseSBtYW55IG90aGVyCi0gICBVbml4IHN5c3RlbXMpOgotCi0gICBGcm9t OiBKYW1lcyBTcGF0aCA8c3BhdGhAamh1bml4LmhjZi5qaHUuZWR1PgotICAgVG86IEluZm8tS2Vy bWl0LVJlcXVlc3RAY3VuaXhmLmNjLmNvbHVtYmlhLmVkdQotICAgRGF0ZTogV2VkLCA5IFNlcCAx OTkyIDIwOjIwOjI4IC0wNDAwCi0gICBTdWJqZWN0OiBDLUtlcm1pdCB2cyB1dWdldHR5IChvciBp bml0KSBvbiBTcGVycnkgNTAwMAotCi0gICBXZSBoYXZlIHN1Y2Nlc3NmdWxseSBjb21waWxlZCB0 aGUgYWJvdmUgcmVsZWFzZSBvbiBhIFVuaXN5cy9TcGVycnkKLSAgIDUwMDAvOTUuIFdlIHVzZWQg dGhlIHN5czVyMyBvcHRpb24sIHJhdGhlciB0aGFuIHN5czVyMiBzaW5jZSB3ZSBoYXZlCi0gICBW UjMgcnVubmluZyBvbiBvdXIgc3lzdGVtLiBJbiBvcmRlciB0byBhbGxvdyBkaWFsb3V0IGFjY2Vz cyB0bwotICAgbm9uLXN1cGVydXNlcnMsIHdlIGhhZCB0byBkbyAiY2htb2QgNjY2IC9kZXYvdHR5 IyMjLCB3aGVyZSBpdCBoYWQgYmVlbgotICAgLXJ3LS13LS13LSAob3duZWQgYnkgdXVjcCksIGFu ZCB0byBkbyAiY2htb2QgK3cgL3Vzci9zcG9vbC9sb2NrcyIuIFdlCi0gICBoYXZlIGRvbmUgdGV4 dCBhbmQgYmluYXJ5IGZpbGUgdHJhbnNmZXJzIHRocm91Z2ggbG9jYWwgYW5kIHJlbW90ZQotICAg Y29ubmVjdGlvbnMuCi0KLSAgIFRoZSBwcm9ibGVtIGNvbmNlcm5pbmcgdXVjcCBvd25lcnNoaXAg YW5kIHBlcm1pc3Npb25zIGlzIHdvcnNlIHRoYW4gSQotICAgdGhvdWdodCBhdCBmaXJzdC4gQXBw YXJlbnRseSBpbml0IG9yIHV1Z2V0dHkgY2hhbmdlcyB0aGUgZmlsZQotICAgcGVybWlzc2lvbnMg YWZ0ZXIgZWFjaCBzZXNzaW9uLiBTbyBJIHdyb3RlIHRoZSBmb2xsb3dpbmcgQyBwcm9ncmFtIHRv Ci0gICBvcGVuIGEgc2V0IG9mIHJlcXVlc3RlZCB0dHkgbGluZXMuIEkgcnVuIHRoaXMgZm9yIGFu eSByZXF1aXJlZCBvdXRnb2luZwotICAgbGluZSBwcmlvciB0byBhIEtlcm1pdCBzZXNzaW9uLgot Ci0gICAtLS0tLS0gY3V0IGhlcmUgLS0tLS0tLQotLyogb3BlbnR0eS5jIC0tIGZvcmNlIGFsbG93 IHJlYWQgb24gdHR5IGxpbmVzIGZvciBtb2RlbSBpL28gKi8KLS8qIGlkZWEgZnJvbTogcmVzdHJp Y3QuYyAtLSBTeXN0ZW0gNSBBZG1pbiBib29rIFRob21hcy9GYXJyb3cgcC4gNjA1ICovCi0vKiAv amVzIGppbSBzcGF0aCB7c3BhdGhAamh1bml4Lmhjai5qaHUuZWR1IH0gKi8KLS8qIDA4LVNlcC05 MiBOTyBDT1BZUklHSFQuICovCi0vKiB0aGlzIG11c3QgYmUgc3VpZCB0byBvcGVuIG90aGVyIHR0 eSBsaW5lcyAqLwotCi0vKiAjZGVmaW5lIERFQlVHICovCi0jZGVmaW5lIFRUWSAiL2Rldi90dHki Ci0jZGVmaW5lIExPSyAiL3Vzci9zcG9vbC9sb2Nrcy9MQ0suLnR0eSIKLSNpbmNsdWRlIDxzdGRp by5oPgotCi0vKiBhbGxvd2FibGUgbGluZXM6ICovCi0jZGVmaW5lIFRPVEFMX0xJTkVTIDMKLXN0 YXRpYyBjaGFyIGFsbG93YWJsZVtUT1RBTF9MSU5FU11bNF0gPSB7ICIyMDAiLCAiMjAxIiwgIjMw MCIgfTsKLXN0YXRpYyBpbnQgdG90YWw9VE9UQUxfTElORVM7Ci1pbnQgYWxsb3c7Ci0KLS8qIHN0 YXRlczogKi8KLSNkZWZpbmUgVFRZX1VOREVGIDAKLSNkZWZpbmUgVFRZX0xPQ0sgIDEKLSNkZWZp bmUgVFRZX09LQVkgIDIKLQotbWFpbihhcmdjLCBhcmd2KQotaW50IGFyZ2M7IGNoYXIgKmFyZ3Zb XTsgewotICAgIGNoYXIgZGV2aWNlWzUxMl07Ci0gICAgY2hhciBsb2NrZGV2WzUxMl07Ci0gICAg aW50IGk7Ci0gICAgaWYgKGFyZ2MgPT0gMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVz YWdlOiBvcGVuIDIwMCBbLi4uXVxuIik7Ci0gICAgfQotICAgIHdoaWxlICgtLWFyZ2MgPiAwICYm ICgqKythcmd2KSAhPSBOVUxMICkgewotI2lmZGVmIERFQlVHCi0gICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiVFJZSU5HOiAlcyVzXG4iLCBUVFksICphcmd2KTsKLSNlbmRpZgotICAgICAgICBzcHJp bnRmKGRldmljZSwgIiVzJXMiLCBUVFksICphcmd2KTsKLSAgICAgICAgc3ByaW50Zihsb2NrZGV2 LCAiJXMlcyIsIExPSywgKmFyZ3YpOwotICAgICAgICBhbGxvdyA9IFRUWV9VTkRFRjsgaSA9IDA7 Ci0gICAgICAgIHdoaWxlIChpIDw9IHRvdGFsKSB7IC8qIGxvb2sgYXQgYWxsIGRlZmluZWQgbGlu ZXMgKi8KLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJMT0NLRklM RT8gJXM/XG4iLCBsb2NrZGV2KTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKGFjY2Vzcyhsb2Nr ZGV2LCAwMCkgPT0gMCkgewotICAgICAgICAgICAgICAgIGFsbG93PVRUWV9MT0NLOwotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotI2lmZGVmIERFQlVHCi0gICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIkRPRVM6JXM9PSVzP1xuIiwgYWxsb3dhYmxlW2ldLCAqYXJndik7 Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChzdHJjbXAoYWxsb3dhYmxlW2ldLCAqYXJndikgPT0g MCkKLSAgICAgICAgICAgICAgYWxsb3c9VFRZX09LQVk7Ci0gICAgICAgICAgICBpKys7Ci0gICAg ICAgIH0KLSNpZmRlZiBERUJVRwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImFsbG93PSVkXG4i LCBhbGxvdyk7Ci0jZW5kaWYKLSAgICAgICAgc3dpdGNoIChhbGxvdykgewotICAgICAgICAgIGNh c2UgVFRZX1VOREVGOgotICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAib3Blbjogbm90IGFs bG93ZWQgb24gJXNcbiIsICphcmd2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh c2UgVFRZX0xPQ0s6Ci0gICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJvcGVuOiBkZXZpY2Ug bG9ja2VkOiAlc1xuIiwgbG9ja2Rldik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj YXNlIFRUWV9PS0FZOgotICAgICAgICAgICAgLyogYXR0ZW1wdCB0byBjaGFuZ2UgbW9kZSBvbiBk ZXZpY2UgKi8KLSAgICAgICAgICAgIGlmIChjaG1vZCAoZGV2aWNlLCAwMDY2NikgPCAwKQotICAg ICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJvcGVuOiBjYW5ub3QgY2htb2Qgb24gJXNcbiIs IGRldmljZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg ICAgICAgZnByaW50ZiAoc3RkZXJyLCAib3BlbjogRkFVTFRcbiIpOwotICAgICAgICB9Ci0gICAg fQotICAgIGV4aXQgKDApOwotfQotCi0xNC4gVEhJUkQtUEFSVFkgRFJJVkVSUwotCi0gICBbIFs2 MTNdVG9wIF0gWyBbNjE0XUNvbnRlbnRzIF0gWyBbNjE1XU5leHQgXSBbIFs2MTZdUHJldmlvdXMg XQotCi0gICBVbml4IHZlcnNpb25zLCBlc3BlY2lhbGx5IHRob3NlIGZvciBQQ3MgKFNDTywgVW5p eHdhcmUsIGV0YykgbWlnaHQgYmUKLSAgIGF1Z21lbnRlZCBieSB0aGlyZC1wYXJ0eSBjb21tdW5p Y2F0aW9uLWJvYXJkIGRyaXZlcnMgZnJvbSBEaWdpYm9hcmQsCi0gICBTdGFsbGlvbiwgZXRjLiBU aGVzZSBjYW4gc29tZXRpbWVzIGNvbXBsaWNhdGUgbWF0dGVycyBmb3IgS2VybWl0Ci0gICBjb25z aWRlcmFibHkgc2luY2UgS2VybWl0IGhhcyBubyB3YXkgb2Yga25vd2luZyB0aGF0IGl0IGlzIGdv aW5nCi0gICB0aHJvdWdoIGEgcG9zc2libHkgbm9uc3RhbmRhcmQgZHJpdmVyLiBWYXJpb3VzIGV4 YW1wbGVzIGFyZSBsaXN0ZWQgaW4KLSAgIHRoZSBlYXJsaWVyIHNlY3Rpb25zIG9mIHRoaXMgZG9j dW1lbnQ7IHNlYXJjaCBmb3IgU3RhbGxpb24sIERpZ2lib2FyZCwKLSAgIGV0Yy4gQWRkaXRpb25h bGx5OgotCi0gICAgICogVGhlIFN0YWxsaW9uIFRlY2hub2xvZ2llcyBFYXN5Q29ubmVjdGlvbiBz ZXJpYWwgYm9hcmQgZHJpdmVyIGRvZXMKLSAgICAgICBub3QgYWx3YXlzIHJlcG9ydCB0aGUgc3Rh dGUgb2YgRFNSIGFzIGxvdy4gRnJvbSBTdGFsbGlvbiAoT2N0b2JlcgotICAgICAgIDE5OTcpOiAi VW5mb3J0dW5hdGVseSwgdGhpcyBpcyBhIGJ1ZyBpbiBvdXIgZHJpdmVyLiBXZSBoYXZlCi0gICAg ICAgaW1wbGVtZW50ZWQgYWxsIG9mIHRoZSBvdGhlciBUSU9NQyBmdW5jdGlvbnMsIGVnIERUUiwg RENELCBSVFMgYW5kCi0gICAgICAgQ1RTLCBidXQgbm90IERTUi4gT3VyIGRyaXZlciBzaG91bGQg cmVwb3J0IHRoZSBhY3R1YWwgc3RhdGUgb2YgRFNSCi0gICAgICAgb24gdGhvc2Ugb2Ygb3VyIGNh cmRzIHRoYXQgaGF2ZSBhIERTUiBzaWduYWwuIFRoYXQgdGhlIGRyaXZlcgotICAgICAgIGFsd2F5 cyByZXBvcnRzIERTUiBhcyBub3QgYXNzZXJ0ZWQgKDApLCBpcyBhIGJ1ZyBpbiB0aGUgZHJpdmVy LiBUaGUKLSAgICAgICBkcml2ZXIgc2hvdWxkIGJlIGVpdGhlciByZXBvcnRpbmcgdGhlIHN0YXRl IG9mIERTUiBjb3JyZWN0bHkgb24KLSAgICAgICB0aG9zZSBjYXJkcyB0aGF0IHN1cHBvcnQgRFNS IG9yIGFzIGFsd2F5cyBhc3NlcnRlZCAoMSkgb24gdGhvc2UKLSAgICAgICBjYXJkcyB0aGF0IGRv IG5vdCBoYXZlIGEgRFNSIHNpZ25hbC4gVGhpcyB3aWxsIGJlIGZpeGVkIGluIGEgZnV0dXJlCi0g ICAgICAgdmVyc2lvbiBvZiBvdXIgZHJpdmVyczsgYXQgdGhpcyB0aW1lIEkgY2Fubm90IHNheSB3 aGVuIHRoaXMgd2lsbAotICAgICAgIGJlLiIgQW5kIGxhdGVyLCAiQXMgZmFyIGFzIEkgY2FuIHRl bGwsIHdlIGRvbid0IHN1cHBvcnQgdGhlCi0gICAgICAgdGVybWlvcy90ZXJtaW94IGlvY3RscyB0 aGF0IHJlbGF0ZSBzcGVjaWZpY2FsbHkgdG8gRFNSIGFuZCBSSTsgYWxsCi0gICAgICAgdGhlIHJl c3QgYXJlIHN1cHBvcnRlZC4gVGhpcyB3aWxsLCBhcyBJIG1lbnRpb25lZCBlYXJsaWVyLCBiZSBm aXhlZAotICAgICAgIGluIHRoZSBuZXh0IHJlbGVhc2Ugb2Ygb3VyIEFUQSBzb2Z0d2FyZS4iCi0g ICAgICAgLSBXb3JsZCBXaWRlIEVzY2FsYXRpb24gU3VwcG9ydCwgU3RhbGxpb24gVGVjaG5vbG9n aWVzLCBUb293b25nCi0gICAgICAgUUxELCBbNjE3XXN1cHBvcnRAc3RhbGxpb24ub3ouYXUuCi0K LSAgIExhdGVyIChEZWNlbWJlciAxOTk3LCBmcm9tIHRoZSBzYW1lIHNvdXJjZSk6Ci0KLSAgICAg KiBXZSBoYXZlIG5vdyByZWxlYXNlZCBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBVEEgc29mdHdhcmUs IHZlcnNpb24KLSAgICAgICA1LjQuMC4gVGhpcyB2ZXJzaW9uIGZpeGVzIHRoZSBwcm9ibGVtIHdp dGggdGhlIHN0YXRlcyBvZiB0aGUgRFNSCi0gICAgICAgYW5kIFJJIHNpZ25hbHMgYW5kIGhvdyB0 aGV5IHdlcmUgYmVpbmcgcmVwb3J0ZWQgYnkgdGhlIGRyaXZlci4gVGhpcwotICAgICAgIGlzIHRo ZSBwcm9ibGVtIHRoYXQgeW91IHJlcG9ydGVkIGluIE9jdG9iZXIuIFRoZSBEU1Igc2lnbmFsIGlz Ci0gICAgICAgcmVwb3J0ZWQgY29ycmVjdGx5IG9uIHRob3NlIGNhcmRzIHRoYXQgc3VwcG9ydCB0 aGUgRFNSIHNpZ25hbCwgc3VjaAotICAgICAgIGFzIHRoZSBlYXJseSByZXZpc2lvbiBvZiB0aGUg RWFzeUlPIGNhcmQgYW5kIHRoZSBFYXN5Q29ubmVjdGlvbiA4RDQKLSAgICAgICBwYW5lbCwgYW5k IGFzIGFsd2F5cyBhc3NlcnRlZCBvbiB0aG9zZSBjYXJkcyB0aGF0IGRvIG5vdCBzdXBwb3J0Ci0g ICAgICAgdGhlIERTUiBzaWduYWwgaW4gdGhlIGhhcmR3YXJlLiBUaGUgbmV3IGRyaXZlciBpcyBh dmFpbGFibGUgZnJvbQotICAgICAgIG91ciBXZWIgc2l0ZSwgWzYxOF13d3cuc3RhbGxpb24uY29t LCBpbiB0aGUgL2RyaXZlcnMvYXRhNS9Vbml4V2FyZQotICAgICAgIGRpcmVjdG9yeS4KLQotICAg WyBbNjE5XVRvcCBdIFsgWzYyMF1Db250ZW50cyBdIFsgWzYyMV1DLUtlcm1pdCBIb21lIF0gWyBb NjIyXUMtS2VybWl0Ci0gICA4LjAgT3ZlcnZpZXcgXSBbIFs2MjNdS2VybWl0IEhvbWUgXQotICAg ICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KLQotICAgICBDLUtlcm1pdCA4LjAgVW5peCBIaW50cyBhbmQgVGlwcyAvIFs2 MjRdVGhlIEtlcm1pdCBQcm9qZWN0IC8KLSAgIFs2MjVdQ29sdW1iaWEgVW5pdmVyc2l0eSAvIFs2 MjZda2VybWl0QGNvbHVtYmlhLmVkdQotCi1SZWZlcmVuY2VzCi0KLSAgIDEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1LwotICAgMi4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKLSAgIDMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gICA0LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1Lmh0bWwKLSAgIDUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgIDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3NjcmlwdHMuaHRtbAotICAgNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2N1cnJlbnQuaHRtbAotICAgOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3doYXRz bmV3Lmh0bWwKLSAgIDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mYXEuaHRtbAot ICAxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRtbAotICAxMS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LwotICAxMi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUvCi0gIDEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwK LSAgMTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2RhaWx5Lmh0bWwKLSAgMTUu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2RhaWx5Lmh0bWwKLSAgMTYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2RhaWx5Lmh0bWwKLSAgMTcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgMTguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAotICAxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdXR1dG9yLmh0bWwKLSAgMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4MQotICAyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gyCi0gIDIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMKLSAgMjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4NAotICAyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g1 Ci0gIDI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDYKLSAg MjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4NwotICAyNy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g4Ci0gIDI4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDkKLSAgMjkuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTAKLSAgMzAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTEKLSAgMzEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTIKLSAgMzIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTMKLSAgMzMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTQKLSAgMzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zCi0gIDM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMTgKLSAgMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4xOQotICAzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjEKLSAgMzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4My4yCi0gIDM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuNwotICA0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gzLjYKLSAgNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN0b3AKLSAgNDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCNjb250ZW50cwotICA0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gyCi0gIDQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDEuMQotICA0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gxLjIKLSAgNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 MS4zCi0gIDQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEu NAotICA0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMK LSAgNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xCi0g IDUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMgotICA1 MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcKLSAgNTIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbAotICA1My4gbWFpbHRv Omtlcm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdQotICA1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotICA1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gIDU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDEuMgotICA1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrNjBtYW51YWwuaHRtbAotICA1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sCi0gIDU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwKLSAgNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0OTAuaHRtbAotICA2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3RvcAotICA2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I2NvbnRlbnRzCi0gIDYzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDEKLSAgNjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 MS4zCi0gIDY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEu MQotICA2Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRtbAotICA2 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotICA2OC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gIDY5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEKLSAgNzAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MS40Ci0gIDcxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEuMgotICA3Mi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotICA3My4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gIDc0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEKLSAgNzUuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MS4zCi0gIDc2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gIDc3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAgNzguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MwotICA3OS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxCi0gIDgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gIDgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAgODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4NAotICA4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gyCi0gIDg0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuMAotICA4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gzLjEKLSAgODYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My4yCi0gIDg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuMwotICA4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjQKLSAgODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My41Ci0gIDkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuNgotICA5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjcKLSAgOTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My44 Ci0gIDkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuOQot ICA5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEwCi0g IDk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTEKLSAg OTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xMgotICA5 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEzCi0gIDk4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTQKLSAgOTku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xNQotIDEwMC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjE2Ci0gMTAxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTcKLSAxMDIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xOAotIDEwMy4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjE5Ci0gMTA0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMjAKLSAxMDUuIGh0dHA6 Ly93d3cuZmFxcy5vcmcvCi0gMTA2LiBodHRwOi8vYXBsYXdyZW5jZS5jb20vVW5peGFydC9uZXd0 b3VuaXguaHRtbAotIDEwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzCi0gMTA4LiBtYWlsdG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1Ci0gMTA5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCi0gMTEwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMTExLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAxMTIuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MwotIDExMy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEKLSAxMTQuIGh0dHA6Ly93d3cucGN1 bml4LmNvbS8KLSAxMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4wLjEKLSAxMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4wLjIKLSAxMTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4wLjMKLSAxMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4wLjQKLSAxMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4wLjUKLSAxMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4wLjYKLSAxMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN0b3AKLSAxMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNj b250ZW50cwotIDEyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzLjAKLSAxMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 My4wLjIKLSAxMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0 b3AKLSAxMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250 ZW50cwotIDEyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjAKLSAxMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4w LjMKLSAxMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4w LjEKLSAxMzAuIGh0dHA6Ly93d3cubGlubW9kZW1zLm9yZy8KLSAxMzEuIGh0dHA6Ly93d3cubWlj cm9zb2Z0LmNvbS9od2Rldi9wbGF0Zm9ybS9QQ2Rlc2lnbi9MUi9kZWZhdWx0LmFzcAotIDEzMi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDEzMy4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMTM0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMAotIDEzNS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjAuNAotIDEzNi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjAuMgotIDEzNy4gaHR0 cDovL3d3dy5pZGlyLm5ldC9+Z3JvbWl0a2Mvd2lubW9kZW0uaHRtbAotIDEzOC4gaHR0cDovL3d3 dy5kaWdpLmNvbS8KLSAxMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN0b3AKLSAxNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCNjb250ZW50cwotIDE0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjAKLSAxNDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4wLjUKLSAxNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4wLjMKLSAxNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN0b3AKLSAxNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNj b250ZW50cwotIDE0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzLjAKLSAxNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 My4wLjYKLSAxNDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 My4wLjQKLSAxNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0 b3AKLSAxNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250 ZW50cwotIDE1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjAKLSAxNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4w LjUKLSAxNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AK LSAxNTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50 cwotIDE1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCi0g MTU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMgotIDE1 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjAKLSAxNTgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xLjEKLSAxNTku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xLjIKLSAxNjAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xLjMKLSAxNjEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xLjQKLSAxNjIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xLjUKLSAxNjMu IGh0dHA6Ly93d3cuZW1lcnNvbi5lbW9yeS5lZHUvc2VydmljZXMvYWl4LWZhcS8KLSAxNjQuIGh0 dHA6Ly93d3cuZmFxcy5vcmcvZmFxcy9ieS1uZXdzZ3JvdXAvY29tcC9jb21wLnVuaXguYWl4Lmh0 bWwKLSAxNjUuIGh0dHA6Ly93d3cuY2lzLm9oaW8tc3RhdGUuZWR1L2h5cGVydGV4dC9mYXEvdXNl bmV0L2FpeC1mYXEvdG9wLmh0bWwKLSAxNjYuIGh0dHA6Ly9haXhwZHNsaWIuc2Vhcy51Y2xhLmVk dS8KLSAxNjcuIGh0dHA6Ly93d3cucm9vdHZnLm5ldChBSVhoaXN0b3J5KS8KLSAxNjguIGZ0cDov L3J0Zm0ubWl0LmVkdS9wdWIvdXNlbmV0L25ld3MuYW5zd2Vycy9haXgtZmFxL3BhcnQxCi0gMTY5 LiBmdHA6Ly9taXJyb3JzLmFvbC5jb20vcHViL3J0Zm0vdXNlbmV0LWJ5LWhpZXJhcmNoeS9jb21w L3VuaXgvYWl4Ci0gMTcwLiBuZXdzOmNvbXAudW5peC5haXgKLSAxNzEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAxNzIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDE3My4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEKLSAxNzQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xLjIKLSAxNzUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAxNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDE3Ny4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEKLSAxNzguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xLjMKLSAxNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xLjEKLSAxODAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9zZWN1cml0eS5odG1sI3NlcnZlcnMKLSAxODEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAxODIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDE4My4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEKLSAxODQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xLjQKLSAxODUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xLjIKLSAxODYuIGh0dHA6Ly9zZXJ2aWNlLnNvZnR3 YXJlLmlibS5jb20vcnM2MDAwLwotIDE4Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3RvcAotIDE4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI2NvbnRlbnRzCi0gMTg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuMQotIDE5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gzLjEuNQotIDE5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gzLjEuMwotIDE5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3RvcAotIDE5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI2NvbnRlbnRzCi0gMTk0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuMQotIDE5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gzLjEuNAotIDE5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3RvcAotIDE5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI2NvbnRlbnRzCi0gMTk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMKLSAxOTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4zCi0gMjAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMQotIDIwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjIuMAotIDIwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjIuMQotIDIwMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjIuMgotIDIwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjIuMwotIDIwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjIuNAotIDIwNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjIuNQotIDIwNy4gbmV3czpjb21wLnN5cy5ocC5ocHV4Ci0gMjA4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMjA5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAyMTAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yCi0gMjExLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi4xCi0gMjEyLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMjEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAyMTQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yCi0gMjE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi4yCi0gMjE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi4wCi0gMjE3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2tlcm1pdC9mL21ha2VmaWxlCi0gMjE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjdG9wCi0gMjE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjY29udGVudHMKLSAyMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4My4yCi0gMjIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuMi4zCi0gMjIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuMi4xCi0gMjIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjdG9wCi0gMjI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjY29udGVudHMKLSAyMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My4yCi0gMjI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuMi40Ci0gMjI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuMi4yCi0gMjI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuMi40LjEKLSAyMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My4yLjQuMgotIDIzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjIuNC4zCi0gMjMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMi40LjQKLSAyMzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4yLjQuNQotIDIzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDIzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMjM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMgotIDIzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjIuNC4yCi0gMjM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMi4yCi0gMjM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMjM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAyNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4yLjQKLSAyNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4yLjQuMwotIDI0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC4xCi0gMjQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMjQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAyNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQKLSAyNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQuNAotIDI0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC4yCi0gMjQ4LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMjQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAyNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQKLSAyNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQuNQotIDI1Mi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC4zCi0gMjUzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMjU0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAyNTUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQKLSAyNTYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQuNAotIDI1Ny4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDI1OC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMjU5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMgotIDI2MC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNAotIDI2MS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDI2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMjYzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKLSAyNjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My40Ci0gMjY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMgotIDI2Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjMuMQotIDI2Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjMuMgotIDI2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjMuMwotIDI2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjMuNAotIDI3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjMuNQotIDI3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjMuNgotIDI3Mi4gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lr aS9BdmFoaV8oc29mdHdhcmUpCi0gMjczLiBuZXdzOmNvbXAub3MubGludXgubWlzYwotIDI3NC4g bmV3czpjb21wLm9zLmxpbnV4LmFuc3dlcnMKLSAyNzUuIGh0dHA6Ly93d3cudGxkcC5vcmcvCi0g Mjc2LiBodHRwOi8vd3d3LnRsZHAub3JnL0ZBUS9MaW51eC1GQVEuaHRtbAotIDI3Ny4gaHR0cDov L3d3dy50bGRwLm9yZy9IT1dUTy9TZXJpYWwtSE9XVE8uaHRtbAotIDI3OC4gaHR0cDovL3RsZHAu b3JnL0hPV1RPL01vZGVtLUhPV1RPLmh0bWwKLSAyNzkuIGZ0cDovL3N1bnNpdGUudW5jLmVkdS9w dWIvTGludXgvZG9jcy9IT1dUTwotIDI4MC4gZnRwOi8vdHN4LTExLm1pdC5lZHUvcHViL2xpbnV4 L2RvY3MvSE9XVE8KLSAyODEuIGh0dHA6Ly93d3cudGxkcC5vcmcvSE9XVE8vCi0gMjgyLiBodHRw Oi8vd3d3LnRsZHAub3JnL2htaXJyb3JzLmh0bWwKLSAyODMuIGh0dHA6Ly93d3cucmVkaGF0LmNv bS9hcHBzL3N1cHBvcnQvCi0gMjg0LiBodHRwOi8vd3d3LmRlYmlhbi5vcmcvc3VwcG9ydAotIDI4 NS4gaHR0cDovL3d3dy5zbGFja3dhcmUuY29tL3N1cHBvcnQvCi0gMjg2LiBodHRwOi8vd3d3LmNh bGRlcmEuY29tL3N1cHBvcnQvCi0gMjg3LiBodHRwOi8vd3d3Lm5vdmVsbC5jb20vc3VwcG9ydC9t aWNyb3NpdGVzL21pY3Jvc2l0ZS5kbwotIDI4OC4gaHR0cDovL3d3dy5tYW5kcmFrZS5jb20vc3Vw cG9ydC8KLSAyODkuIGh0dHA6Ly93d3cudHVyYm9saW51eC5jb20vc3VwcG9ydC8KLSAyOTAuIGh0 dHA6Ly93d3cubGlubW9kZW1zLm9yZy8KLSAyOTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4wCi0gMjkyLiBodHRwOi8vbGludXguZHJlYW10aW1lLm9yZy9k ZWNuZXQvCi0gMjkzLiBtYWlsdG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1Ci0gMjk0LiBo dHRwOi8vd3d3Lmxpbm1vZGVtcy5vcmcvCi0gMjk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMC4yCi0gMjk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvc2VjdXJpdHkuaHRtbCNzZXJ2ZXJzCi0gMjk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvc3NoY2xpZW50Lmh0bWwKLSAyOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAyOTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDMwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzCi0gMzAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuMy4yCi0gMzAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjdG9wCi0gMzAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjY29udGVudHMKLSAzMDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My4zCi0gMzA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuMy4zCi0gMzA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuMy4xCi0gMzA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuMAotIDMwOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3g2Ci0gMzA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDcKLSAzMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 OAotIDMxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMAot IDMxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMQotIDMx My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCi0gMzE0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMAotIDMxNS4gaHR0cDov L2xpbnV4d3d3LmRiLmVyYXUuZWR1L21haWxfYXJjaGl2ZXMvbGludXgta2VybmVsL01hcl85OC8x NDQxLmh0bWwKLSAzMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN0b3AKLSAzMTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNj b250ZW50cwotIDMxOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzLjMKLSAzMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 My4zLjQKLSAzMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 My4zLjIKLSAzMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 My4wLjUKLSAzMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sI3Rl cm0KLSAzMjMuIGh0dHA6Ly9kaWNrZXkuaGlzLmNvbS94dGVybS94dGVybS5odG1sCi0gMzI0LiBo dHRwOi8vZGlja2V5Lmhpcy5jb20veHRlcm0veHRlcm0uaHRtbAotIDMyNS4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi94bW9kbWFwLnR4dAotIDMyNi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDMyNy4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMzI4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMwotIDMyOS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMuNQotIDMzMC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMuMwotIDMzMS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDMzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMzMzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMwotIDMzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMuNgotIDMzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMuNAotIDMzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDMzNy4gbWFpbHRvOmtlcm1pdC1zdXBwb3J0QGNvbHVt YmlhLmVkdQotIDMzOC4gaHR0cDovL3d3dy5yZWRoYXQuY29tL3N1cHBvcnQvZXJyYXRhL1JIQkEt MjAwMS0xNTMuaHRtbAotIDMzOS4gbmV3czpjb21wLnByb3RvY29scy5rZXJtaXQubWlzYwotIDM0 MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDM0MS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMzQy LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMwotIDM0My4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMuNQotIDM0NC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDM0NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMzQ2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKLSAzNDcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My41Ci0gMzQ4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMwotIDM0OS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDM1MC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMzUxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKLSAzNTIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42Ci0gMzUzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNAotIDM1NC4gbmV3czpjb21wLm9zLnFueAot IDM1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2drZXJtaXQuaHRtbAotIDM1Ni4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMAotIDM1Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCi0gMzU4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMzU5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAzNjAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MwotIDM2MS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcKLSAzNjIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My41Ci0gMzYzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNi4xCi0gMzY0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNi4yCi0gMzY1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNi4zCi0gMzY2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNi40Ci0gMzY3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTAKLSAzNjguIGh0dHA6Ly9hcGxhd3JlbmNlLmNv bS9TQ09GQVEvCi0gMzY5LiBodHRwOi8vd3d3LnplbmV6LmNvbS9jZ2ktYmluL3Njb3Byb2dmYXEv ZmFxLnBsCi0gMzcwLiBodHRwOi8vd3d3LnplbmV6LmNvbS9jZ2ktYmluL3Njb3V3N2ZhcS9mYXEu cGwKLSAzNzEuIGh0dHA6Ly96ZW5lei5wY3VuaXguY29tL2NnaS1iaW4vc2NvdXc3ZmFxL2ZhcS5w bAotIDM3Mi4gaHR0cDovL3BjdW5peC5jb20vVW5peGFydC9tb2RlbXMuaHRtbAotIDM3My4gaHR0 cDovL3d3dy5mcmVlYmlyZC5vcmcvZmFxLwotIDM3NC4gaHR0cDovL3d3dy5mcmVlYmlyZC5vcmcv ZmFxL2RldmVsb3Blci5odG1sCi0gMzc1LiBodHRwOi8vc3VwcG9ydC5jYWxkZXJhLmNvbS9jYWxk ZXJhCi0gMzc2LiBodHRwOi8vc3RhZ2UuY2FsZGVyYS5jb20vdGEvCi0gMzc3LiBodHRwOi8vYXBs YXdyZW5jZS5jb20vbmV3dG9zY28uaHRtbAotIDM3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjAuNQotIDM3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZmFxLmh0bWwjdGVybQotIDM4MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjAKLSAzODEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN0b3AKLSAzODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCNjb250ZW50cwotIDM4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjYKLSAzODQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My42LjEKLSAzODUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2Mta2VybWl0L2NrdXRpby5jCi0gMzg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjdG9wCi0gMzg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjY29udGVudHMKLSAzODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My42Ci0gMzg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuNi4zCi0gMzkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuNi4xCi0gMzkxLiBodHRwOi8vd3d3LmRpZ2kuY29tLwotIDM5Mi4gZnRwOi8v ZnRwLmZ1LWJlcmxpbi5kZS9wdWIvdW5peC9kcml2ZXIvZmFzCi0gMzkzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDE0Ci0gMzk0LiBodHRwOi8vd3d3LnNjby5j b20vCi0gMzk1LiBmdHA6Ly9mdHAuc2NvLmNvbS8KLSAzOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAzOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDM5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYKLSAzOTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42LjQKLSA0MDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42LjIKLSA0MDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xMAotIDQwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDQwMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gNDA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuNgotIDQwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjYuMwotIDQwNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3RvcAotIDQwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gNDA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMKLSA0MDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My44Ci0gNDEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuNgotIDQxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gzLjcuMQotIDQxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gzLjcuMgotIDQxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gzLjcuMwotIDQxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gzLjcuNAotIDQxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gzLjcuNQotIDQxNi4gbmV3czpjb21wLnVuaXguc29sYXJpcwotIDQxNy4gaHR0cDov L2FjY2VzczEuc3VuLmNvbS8KLSA0MTguIGh0dHA6Ly9kb2NzLnN1bi5jb20vCi0gNDE5LiBodHRw Oi8vd3d3LnN1bmhlbHAuY29tLwotIDQyMC4gaHR0cDovL3d3dy53aW5zLnV2YS5ubC9wdWIvc29s YXJpcy9zb2xhcmlzMi8KLSA0MjEuIGh0dHA6Ly93d3cud2lucy51dmEubmwvY2dpLWJpbi9zZmFx LmNnaQotIDQyMi4gZnRwOi8vZnRwLndpbnMudXZhLm5sL3B1Yi9zb2xhcmlzCi0gNDIzLiBodHRw Oi8vd3d3LnNjaWVuY2UudXZhLm5sL3B1Yi9zb2xhcmlzL3NvbGFyaXMyLmh0bWwKLSA0MjQuIGh0 dHA6Ly93d3cuc3Rva2VseS5jb20vCi0gNDI1LiBodHRwOi8vd3d3LnN0b2tlbHkuY29tL3VuaXgu c3lzYWRtLnJlc291cmNlcy9mYXFzLnN1bi5odG1sCi0gNDI2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMAotIDQyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDQyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gNDI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKLSA0MzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My43Ci0gNDMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuNy4yCi0gNDMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjdG9wCi0gNDMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjY29udGVudHMKLSA0MzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4My43Ci0gNDM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuNy4zCi0gNDM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuNy4xCi0gNDM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjdG9wCi0gNDM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjY29udGVudHMKLSA0MzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My43Ci0gNDQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuNy40Ci0gNDQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuNy4yCi0gNDQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjdG9wCi0gNDQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjY29udGVudHMKLSA0NDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My43Ci0gNDQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuNy41Ci0gNDQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuNy4zCi0gNDQ3LiBuZXdzOmNvbXAub3Mudm1zCi0gNDQ4LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNDQ5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA0NTAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43Ci0gNDUxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNy42Ci0gNDUyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNy40Ci0gNDUzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNDU0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA0NTUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43Ci0gNDU2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNy41Ci0gNDU3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNDU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA0NTkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MwotIDQ2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjkKLSA0NjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My43Ci0gNDYyLiBodHRwOi8vd3d3LnN0b2tlbHkuY29tLwotIDQ2 My4gaHR0cDovL2FjY2VzczEuc3VuLmNvbS8KLSA0NjQuIGh0dHA6Ly93d3cubHVkZC5sdXRoLnNl L35iZWFyL3Byb2plY3Qvc3VuL3N1bi5oYXJkd2FyZS50eHQKLSA0NjUuIGZ0cDovL2Z0cC5uZXRj b20uY29tL3B1Yi9ydS9ydWJpY29uL3N1bi5oZHdyLnJlZgotIDQ2Ni4gZnRwOi8vZnRwLmludG5l dC5uZXQvcHViL1NVTi9TdW4tSGFyZHdhcmUtUmVmCi0gNDY3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNDY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA0NjkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MwotIDQ3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjEwCi0gNDcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuOAotIDQ3Mi4gbmV3czpjb21wLnVuaXgudWx0cml4Ci0gNDcz LiBuZXdzOmNvbXAuc3lzLmRlYwotIDQ3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3RvcAotIDQ3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI2NvbnRlbnRzCi0gNDc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMKLSA0NzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My4xMQotIDQ3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gzLjkKLSA0NzkuIGh0dHA6Ly93d3cuZnJlZWJpcmQub3JnLwotIDQ4MC4gaHR0cDov L3d3dy5mcmVlYmlyZC5vcmcvZmFxLwotIDQ4MS4gbmV3czpjb21wLnVuaXgudW5peHdhcmUubWlz YwotIDQ4Mi4gbmV3czpjb21wLnVuaXguc2NvLm1pc2MKLSA0ODMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4wCi0gNDg0LiBmdHA6Ly9rZXJtaXQuY29sdW1i aWEuZWR1L2tlcm1pdC9mL2NrdXRpby5jCi0gNDg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNDg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA0ODcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4MwotIDQ4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjEyCi0gNDg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuMTAKLSA0OTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN0b3AKLSA0OTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCNjb250ZW50cwotIDQ5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gzCi0gNDkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuMTMKLSA0OTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN4My4xMQotIDQ5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3RvcAotIDQ5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I2NvbnRlbnRzCi0gNDk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDMKLSA0OTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 My4xNAotIDQ5OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjEyCi0gNTAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9w Ci0gNTAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVu dHMKLSA1MDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4Mwot IDUwMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjE1Ci0g NTA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTMKLSA1 MDUuIG5ld3M6Y29tcC5zeXMuc2dpLm1pc2MKLSA1MDYuIG5ld3M6Y29tcC5zeXMuc2dpLmFkbWlu Ci0gNTA3LiBodHRwOi8vd3d3LnNnaS5jb20vCi0gNTA4LiBodHRwOi8vd3d3LXZpei50YW11LmVk dS9+c2dpLWZhcS8KLSA1MDkuIGZ0cDovL3Zpei50YW11LmVkdS9wdWIvc2dpL2ZhcS8KLSA1MTAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAotIDUxMS4gaHR0cDov L2ZyZWV3YXJlLnNnaS5jb20vSW5zdGFsbGFibGUvZ2NjLTIuOTUuMi5odG1sCi0gNTEyLiBodHRw Oi8vZnJlZXdhcmUuc2dpLmNvbS9JbnN0YWxsYWJsZS9nY2MtMi45NS4yLmh0bWwKLSA1MTMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA1MTQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDUxNS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCi0gNTE2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTYKLSA1MTcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xNAotIDUxOC4gbmV3czpjb21w LnN5cy5iZQotIDUxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3RvcAotIDUyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2Nv bnRlbnRzCi0gNTIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMKLSA1MjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4x NwotIDUyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjE1 Ci0gNTI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0g NTI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMK LSA1MjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MwotIDUy Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjE4Ci0gNTI4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTYKLSA1Mjku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA1MzAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDUzMS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCi0gNTMyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTkKLSA1MzMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xNwotIDUzNC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDUzNS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gNTM2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKLSA1MzcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yMAotIDUzOC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjE4Ci0gNTM5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvbWFjLmh0bWwKLSA1NDAuIGh0dHA6Ly93d3cuYW1hem9uLmNvbS9n cC9wcm9kdWN0L0IwMDAwVllKUlk/aWU9VVRGOCZ0YWc9YWxlaWRtb3JlbGRvbS0yMCZsaW5rQ29k ZT1hczImY2FtcD0xNzg5JmNyZWF0aXZlPTM5MDk1NyZjcmVhdGl2ZUFTSU49QjAwMDBWWUpSWQot IDU0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMAotIDU0 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCi0gNTQzLiBodHRw Oi8vd3d3LmFtYXpvbi5jb20vZ3AvcHJvZHVjdC9CMDAwRlg2MU1TP2llPVVURjgmdGFnPWFsZWlk bW9yZWxkb20tMjAmbGlua0NvZGU9YXMyJmNhbXA9MTc4OSZjcmVhdGl2ZT0zOTA5NTcmY3JlYXRp dmVBU0lOPUIwMDBGWDYxTVMKLSA1NDQuIG1haWx0bzprZXJtaXRAY29sdW1iaWEuZWR1Ci0gNTQ1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNTQ2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA1NDcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MwotIDU0OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjE5Ci0gNTQ5LiBodHRw Oi8vd3d3LnVuaS1naWVzc2VuLmRlL2ZhcS9hcmNoaXYvY29oZXJlbnQtZmFxLmdlbmVyYWwvbXNn MDAwMDAuaHRtbAotIDU1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3RvcAotIDU1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I2NvbnRlbnRzCi0gNTUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDUKLSA1NTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 MwotIDU1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sCi0gNTU1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNTU2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA1NTcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4NgotIDU1OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g0Ci0gNTU5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKLSA1NjAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA1NjEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDU2Mi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g3Ci0gNTYzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDUKLSA1NjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCM5LjUKLSA1NjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4MwotIDU2Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3RvcAotIDU2Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI2NvbnRlbnRzCi0gNTY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDgKLSA1NjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4NgotIDU3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3g4Ci0gNTcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwK LSA1NzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazYwbWFudWFsLmh0bWwKLSA1 NzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jYWJsZS5odG1sCi0gNTc0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNTc1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA1NzYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4OQotIDU3Ny4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g3Ci0gNTc4LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNTc5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA1ODAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTAKLSA1ODEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4OAotIDU4Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrNjBtYW51YWwuaHRtbAotIDU4My4gaHR0cDovL2RpY2tleS5oaXMuY29tL3h0 ZXJtL3h0ZXJtLmh0bWwKLSA1ODQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN0b3AKLSA1ODUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCNjb250ZW50cwotIDU4Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gxMQotIDU4Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3g5Ci0gNTg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj dG9wCi0gNTg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29u dGVudHMKLSA1OTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 MTIKLSA1OTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTAK LSA1OTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTEuMQot IDU5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMS4yCi0g NTk0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNTk1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA1 OTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTEKLSA1OTcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTEuMgotIDU5OC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrNjBtYW51YWwuaHRtbAotIDU5OS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDYwMC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gNjAxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDExCi0gNjAyLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDExLjEKLSA2MDMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazYwbWFudWFsLmh0bWwKLSA2MDQuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA2MDUuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDYwNi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMwotIDYwNy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMQotIDYwOC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKLSA2MDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA2MTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDYxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gxNAotIDYxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gxMgotIDYxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3RvcAotIDYxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI2NvbnRlbnRzCi0gNjE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDE1Ci0gNjE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDE0Ci0gNjE3LiBtYWlsdG86c3VwcG9ydEBzdGFsbGlvbi5vei5hdQotIDYxOC4g aHR0cDovL3d3dy5zdGFsbGlvbi5jb20vCi0gNjE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNjIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA2MjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0Lmh0bWwKLSA2MjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j azgwLmh0bWwKLSA2MjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1s Ci0gNjI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDYyNS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvCi0gNjI2LiBtYWlsdG86a2VybWl0QGNvbHVtYmlhLmVk dQoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1 Y21kLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWNtZC5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzA3NzBlLi4wMDAwMDAwCi0tLSBhL2NrZXJt aXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1Y21kLmMKKysrIC9kZXYvbnVsbApA QCAtMSw3OTE5ICswLDAgQEAKLSNpbmNsdWRlICJja2NzeW0uaCIKLQotY2hhciAqY21kdiA9ICJD b21tYW5kIHBhY2thZ2UgOS4wLjE2OCwgMTIgTWFyY2ggMjAxMCI7Ci0KLS8qICBDIEsgVSBDIE0g RCAgLS0gIEludGVyYWN0aXZlIGNvbW1hbmQgcGFja2FnZSBmb3IgVW5peCAgKi8KLQotLyogKElu IHJlYWxpdHksIGl0J3MgZm9yIGFsbCBwbGF0Zm9ybXMsIG5vdCBqdXN0IFVuaXgpICovCi0KLS8q Ci0gIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiAoZmRjQGNvbHVtYmlhLmVkdSksCi0gIENvbHVtYmlh IFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4K LQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTAsCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEg VW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2Vy dmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHly aWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1p c3Npb25zLgotKi8KLQotI2RlZmluZSBUT0tQUkVDSEVDSwotCi0jZGVmaW5lIERPQ0hLVkFSCi0K LS8qIENvbW1hbmQtdGVybWluYWwtdG8tQy1LZXJtaXQgY2hhcmFjdGVyIG1hc2sgKi8KLQotI2lm ZGVmIE9TMgkJCQkvKiBLOTUgKi8KLWludCBjbWRtc2sgPSAyNTU7CQkJLyogKGFsd2F5cyB3YXMg MjU1KSAqLwotI2Vsc2UJCQkJCS8qIEFsbCBvdGhlcnMuLi4gKi8KLWludCBjbWRtc2sgPSAyNTU7 CQkJLyogMzEgRGVjIDIwMDAgKHdhcyAxMjcpICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRl ZiBCU19ESVJTRVAJCQkvKiBEaXJlY3Rvcnkgc2VwYXJhdG9yIGlzIGJhY2tzbGFzaCAqLwotI3Vu ZGVmIEJTX0RJUlNFUAotI2VuZGlmIC8qIEJTX0RJUlNFUCAqLwotCi0jaWZkZWYgT1MyCi0jZGVm aW5lIEJTX0RJUlNFUAotI2VuZGlmIC8qIEJTX0RJUlNFUCAqLwotCi0jZGVmaW5lIENLVUNNRF9D Ci0KLSNpbmNsdWRlICJja2NkZWIuaCIgICAgICAgICAgICAgICAgICAgICAvKiBGb3JtYXRzIGZv ciBkZWJ1ZygpLCBldGMuICovCi0jaW5jbHVkZSAiY2tja2VyLmgiCQkJLyogTmVlZGVkIGZvciBC SUdCVUZPSyBkZWZpbml0aW9uICovCi0jaW5jbHVkZSAiY2tjbmV0LmgiCQkJLyogTmVlZGVkIGZv ciBzZXJ2ZXItc2lkZSBUZWxuZXQgKi8KLSNpbmNsdWRlICJja3VjbWQuaCIJCQkvKiBOZWVkZWQg Zm9yIGV2ZXJ5dGhpbmcgKi8KLSNpbmNsdWRlICJja3V1c3IuaCIgICAgICAgICAgICAgICAgICAg ICAvKiBOZWVkZWQgZm9yIHByb21wdCBsZW5ndGggKi8KLQotI2lmbmRlZiBOT0FSUk9XS0VZUwot I2lmbmRlZiBOT0VTQ1NFUQotI2lmZGVmIFZNU09SVU5JWAotI2RlZmluZSBVU0VfQVJST1dLRVlT CQkJLyogVXNlIGFycm93IGtleXMgZm9yIGNvbW1hbmQgcmVjYWxsICovCi0jZW5kaWYgLyogVk1T T1JVTklYICovCi0jZW5kaWYgLyogTk9FU0NTRVEgKi8KLSNlbmRpZiAvKiBOT0FSUk9XS0VZUyAq LwotCi0jdW5kZWYgQ0tVQ01EX0MKLQotX1BST1RPVFlQKCBpbnQgdW5oZXgsIChjaGFyKSApOwot X1BST1RPVFlQKCBzdGF0aWMgVk9JRCBjbWRjbHJzY24sICh2b2lkKSApOwotCi0jaWZkZWYgQ0tM RUFSTgotX1BST1RPVFlQKCBWT0lEIGxlYXJuY21kLCAoY2hhciAqKSApOwotI2VuZGlmIC8qIENL TEVBUk4gKi8KLQotc3RhdGljIGNoYXIgKm1vbmFtZVtdID0gewotICAgICJKYW4iLCAiRmViIiwg Ik1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsCi0gICAgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9j dCIsICJOb3YiLCAiRGVjIgotfTsKLQotc3RydWN0IGtleXRhYiBjbW9udGhzW10gPSB7Ci0gIHsg ImFwcmlsIiwgICAgIDQsIDAgfSwKLSAgeyAiYXVndXN0IiwgICAgOCwgMCB9LAotICB7ICJkZWNl bWJlciIsIDEyLCAwIH0sCi0gIHsgImZlYnJ1YXJ5IiwgIDIsIDAgfSwKLSAgeyAiamFudWFyeSIs ICAgMSwgMCB9LAotICB7ICJqdWx5IiwgICAgICA3LCAwIH0sCi0gIHsgImp1bmUiLCAgICAgIDYs IDAgfSwKLSAgeyAibWFyY2giLCAgICAgMywgMCB9LAotICB7ICJtYXkiLCAgICAgICA1LCAwIH0s Ci0gIHsgIm5vdmVtYmVyIiwgMTEsIDAgfSwKLSAgeyAib2N0b2JlciIsICAxMCwgMCB9LAotICB7 ICJzZXB0ZW1iZXIiLCA5LCAwIH0KLX07Ci0KLSNpZm5kZWYgTk9JQ1AgICAgIC8qIFRoZSByZXN0 IG9ubHkgaWYgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzaW5nIHNlbGVjdGVkICovCi0KLSNpZm5k ZWYgTk9TUEwKLV9QUk9UT1RZUCggaW50IGNoa3ZhciwgKGNoYXIgKikgKTsKLWV4dGVybiBpbnQg YXNrZmxhZywgZWNob3N0YXJzOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBDS1JPT1QK LWV4dGVybiBpbnQgY2tyb290ZXJyOwotI2VuZGlmIC8qIENLUk9PVCAqLwotCi0jaWZkZWYgSUtT RAotZXh0ZXJuIGludCBpbnNlcnZlcjsKLSNlbmRpZiAvKiBJS1NEICovCi0KLWludCBjbWZsZGZs Z3MgPSAwOwkJCS8qIEZsYWdzIGZvciBjbWZsZCgpICovCi1pbnQgY21rd2ZsZ3MgPSAwOwkJCS8q IEZsYWdzIGZyb20gbGFzdCBrZXl3b3JkIHBhcnNlICovCi1zdGF0aWMgaW50IG5vbXNnID0gMDsK LXN0YXRpYyBpbnQgYmxvY2tsdmwgPSAwOwkJLyogQmxvY2sgbmVzdGluZyBsZXZlbCAqLwotc3Rh dGljIGludCBsaW5lYmVnaW4gPSAwOwkJLyogRmxhZyBmb3IgYXQgc3RhcnQgb2YgYSBsaW5lICov Ci1zdGF0aWMgaW50IHF1b3RpbmcgPSAxOwkJCS8qIFF1b3RpbmcgaXMgYWxsb3dlZCAqLwotc3Rh dGljIGludCBzd2FyZyA9IDA7CQkJLyogUGFyc2luZyBhIHN3aXRjaCBhcmd1bWVudCAqLwotc3Rh dGljIGludCB4Y21mZGIgPSAwOwkJCS8qIEZsYWcgZm9yIHBhcnNpbmcgY2hhaW5lZCBmZGJzLi4u ICovCi1zdGF0aWMgaW50IGNoc3JjID0gMDsJCQkvKiBTb3VyY2Ugb2YgY2hhcmFjdGVyLCAxID0g dHR5ICovCi1zdGF0aWMgaW50IG5ld2NtZCA9IDA7CQkJLyogU2VlIGFkZGNtZCgpICovCi0KLSNp ZmRlZiBCU19ESVJTRVAKLXN0YXRpYyBpbnQgZGlybmFtZmxnID0gMDsKLSNlbmRpZiAvKiBCU19E SVJTRVAgKi8KLQotLyoKLU1vZGVsZWQgYWZ0ZXIgdGhlIERFQ1NZU1RFTS0yMCBjb21tYW5kIHBh cnNlciAodGhlIENPTU5EIEpTWVMpLCBSSVAuIEZlYXR1cmVzOgotCi0gLiBwYXJzZXMgYW5kIHZl cmlmaWVzIGtleXdvcmRzLCBmaWxlbmFtZXMsIHRleHQgc3RyaW5ncywgbnVtYmVycywgb3RoZXIg ZGF0YQotIC4gZGlzcGxheXMgYXBwcm9wcmlhdGUgbWVudSBvciBoZWxwIG1lc3NhZ2Ugd2hlbiB1 c2VyIHR5cGVzICI/IgotIC4gZG9lcyBrZXl3b3JkIGFuZCBmaWxlbmFtZSBjb21wbGV0aW9uIHdo ZW4gdXNlciB0eXBlcyBFU0Mgb3IgVEFCCi0gLiBkb2VzIHBhcnRpYWwga2V5d29yZCBhbmQgZmls ZW5hbWUgY29tcGxldGlvbgotIC4gYWNjZXB0cyBhbnkgdW5pcXVlIGFiYnJldmlhdGlvbiBmb3Ig YSBrZXl3b3JkCi0gLiBhbGxvd3Mga2V5d29yZHMgdG8gaGF2ZSBhdHRyaWJ1dGVzLCBsaWtlICJp bnZpc2libGUiIGFuZCAiYWJicmV2aWF0aW9uIgotIC4gY2FuIHN1cHBseSBkZWZhdWx0cyBmb3Ig ZmllbGRzIG9taXR0ZWQgYnkgdXNlcgotIC4gcHJvdmlkZXMgY29tbWFuZCByZXRyeSBhbmQgcmVj YWxsCi0gLiBwcm92aWRlcyBjaGFyYWN0ZXIsIHdvcmQsIGFuZCBsaW5lIGRlbGV0aW9uIChidXQg b25seSBmcm9tIHRoZSBlbmQpCi0gLiBhY2NlcHRzIGlucHV0IGZyb20ga2V5Ym9hcmQsIGNvbW1h bmQgZmlsZXMsIG1hY3Jvcywgb3IgcmVkaXJlY3RlZCBzdGRpbgotIC4gYWxsb3dzIGZvciBmdWxs IG9yIGhhbGYgZHVwbGV4IG9wZXJhdGlvbiwgY2hhcmFjdGVyIG9yIGxpbmUgaW5wdXQKLSAuIGFs bG93cyBcLWVzY2FwZXMgZm9yIHNwZWNpYWwgY2hhcmFjdGVycwotIC4gYWxsb3dzIHNwZWNpZmlj YXRpb24gb2YgYSB1c2VyIGV4aXQgdG8gZXhwYW5kIHZhcmlhYmxlcywgZXRjLgotIC4gc2V0dGFi bGUgcHJvbXB0LCBwcm90ZWN0ZWQgZnJvbSBkZWxldGlvbiwgZHluYW1pY2FsbHkgcmUtZXZhbHVh dGVkIGVhY2ggdGltZQotIC4gYWxsb3dzIGNoYWluZWQgcGFyc2UgZnVuY3Rpb25zLgotCi1GdW5j dGlvbnM6Ci0gY21zZXRwIC0gU2V0IHByb21wdCAoY21wcm9tIGlzIHByb21wdCBzdHJpbmcpCi0g Y21zYXZwIC0gU2F2ZSBjdXJyZW50IHByb21wdAotIGNtZ2V0cCA9IEdldCBjdXJyZW50IHByb21w dAotIHByb21wdCAtIElzc3VlIHByb21wdAotIGNtaW5pICAtIENsZWFyIHRoZSBjb21tYW5kIGJ1 ZmZlciAoYmVmb3JlIHBhcnNpbmcgYSBuZXcgY29tbWFuZCkKLSBjbXJlcyAgLSBSZXNldCBjb21t YW5kIGJ1ZmZlciBwb2ludGVycyAoYmVmb3JlIHJlcGFyc2luZykKLSBjbWtleSAgLSBQYXJzZSBh IGtleXdvcmQgb3IgdG9rZW4gKGFsc28gY21rZXkyKQotIGNtc3dpICAtIFBhcnNlIGEgc3dpdGNo Ci0gY21udW0gIC0gUGFyc2UgYSBudW1iZXIKLSBjbWlmaSAgLSBQYXJzZSBhbiBpbnB1dCBmaWxl IG5hbWUKLSBjbW9maSAgLSBQYXJzZSBhbiBvdXRwdXQgZmlsZSBuYW1lIChhbHNvIGNtaWZpcCwg Y21pZmkyLCAuLi4pCi0gY21kaXIgIC0gUGFyc2UgYSBkaXJlY3RvcnkgbmFtZSAoYWxzbyBjbWRp cnApCi0gY21mbGQgIC0gUGFyc2UgYW4gYXJiaXRyYXJ5IGZpZWxkCi0gY210eHQgIC0gUGFyc2Ug YSB0ZXh0IHN0cmluZwotIGNtZGF0ZSAtIFBhcnNlIGEgZGF0ZS10aW1lIHN0cmluZwotIGNtY2Zt ICAtIFBhcnNlIGNvbW1hbmQgY29uZmlybWF0aW9uIChlbmQgb2YgbGluZSkKLSBjbWZkYiAgLSBQ YXJzZSBhbnkgb2YgYSBsaXN0IG9mIHRoZSBmb3JlZ29pbmcgKGNoYWluZWQgcGFyc2UgZnVuY3Rp b25zKQotCi1SZXR1cm4gY29kZXM6Ci0gLTk6IGxpa2UgLTIgZXhjZXB0IHRoaXMgbW9kdWxlIGFs cmVhZHkgcHJpbnRlZCB0aGUgZXJyb3IgbWVzc2FnZQotIC0zOiBubyBpbnB1dCBwcm92aWRlZCB3 aGVuIHJlcXVpcmVkCi0gLTI6IGlucHV0IHdhcyBpbnZhbGlkIChlLmcuIG5vdCBhIG51bWJlciB3 aGVuIGEgbnVtYmVyIHdhcyByZXF1aXJlZCkKLSAtMTogcmVwYXJzZSByZXF1aXJlZCAodXNlciBk ZWxldGVkIGludG8gYSBwcmVjZWRpbmcgZmllbGQpCi0gIDAgb3IgZ3JlYXRlcjogc3VjY2Vzcwot U2VlIGluZGl2aWR1YWwgZnVuY3Rpb25zIGZvciBncmVhdGVyIGRldGFpbC4KLQotQmVmb3JlIHVz aW5nIHRoZXNlIHJvdXRpbmVzLCB0aGUgY2FsbGVyIHNob3VsZCAjaW5jbHVkZSAiY2t1Y21kLmgi IGFuZCBzZXQgdGhlCi1wcm9ncmFtJ3MgcHJvbXB0IGJ5IGNhbGxpbmcgY21zZXRwKCkuICBJZiB0 aGUgZmlsZSBwYXJzaW5nIGZ1bmN0aW9ucyBjbWlmaSwKLWNtb2ZpLCBvciBjbWRpciBhcmUgdG8g YmUgdXNlZCwgdGhpcyBtb2R1bGUgbXVzdCBiZSBsaW5rZWQgd2l0aCBhIGNrP2ZpbyBmaWxlCi1z eXN0ZW0gc3VwcG9ydCBtb2R1bGUgZm9yIHRoZSBhcHByb3ByaWF0ZSBzeXN0ZW0sIGUuZy4gY2t1 ZmlvIGZvciBVbml4LiAgSWYKLXRoZSBjYWxsZXIgcHV0cyB0aGUgdGVybWluYWwgaW4gY2hhcmFj dGVyIHdha2V1cCAoImNicmVhayIpIG1vZGUgd2l0aCBubyBlY2hvLAotdGhlbiB0aGVzZSBmdW5j dGlvbnMgd2lsbCBwcm92aWRlIGxpbmUgZWRpdGluZyAtLSBjaGFyYWN0ZXIsIHdvcmQsIGFuZCBs aW5lCi1kZWxldGlvbiwgYXMgd2VsbCBhcyBrZXl3b3JkIGFuZCBmaWxlbmFtZSBjb21wbGV0aW9u IHVwb24gRVNDIGFuZCBoZWxwCi1zdHJpbmdzLCBrZXl3b3JkLCBvciBmaWxlIG1lbnVzIHVwb24g Jz8nLiAgSWYgdGhlIGNhbGxlciBwdXRzIHRoZSB0ZXJtaW5hbAotaW50byBjaGFyYWN0ZXIgd2Fr ZXVwL25vZWNobyBtb2RlLCBjYXJlIHNob3VsZCBiZSB0YWtlbiB0byByZXN0b3JlIGl0IGJlZm9y ZQotZXhpdCBmcm9tIG9yIGludGVycnVwdGlvbiBvZiB0aGUgcHJvZ3JhbS4gIElmIHRoZSBjaGFy YWN0ZXIgd2FrZXVwIG1vZGUgaXMgbm90Ci1zZXQsIHRoZSBzeXN0ZW0ncyBvd24gbGluZSBlZGl0 b3IgbWF5IGJlIHVzZWQuCi0KLU5PVEU6IENvbnRyYXJ5IHRvIGV4cGVjdGF0aW9ucywgbWFueSAj aWZkZWYncyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhpcyBtb2R1bGUuCi1Bbnkgb3BlcmF0aW9uIHJl cXVpcmluZyBhbiAjaWZkZWYgKGxpa2UgY2xlYXIgc2NyZWVuLCBnZXQgY2hhcmFjdGVyIGZyb20K LWtleWJvYXJkLCBlcmFzZSBjaGFyYWN0ZXIgZnJvbSBzY3JlZW4sIGV0Yykgc2hvdWxkIGV2ZW50 dWFsbHkgYmUgdHVybmVkIGludG8gYQotY2FsbCB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgZGVmaW5l ZCBpbiBjaz90aW8uYywgYnV0IHRoZW4gYWxsIHRoZSBjaz90aW8uYwotbW9kdWxlcyB3b3VsZCBo YXZlIHRvIGJlIGNoYW5nZWQuLi4KLSovCi0KLS8qIEluY2x1ZGVzICovCi0KLSNpbmNsdWRlICJj a2NrZXIuaCIKLSNpbmNsdWRlICJja2Nhc2MuaCIJCQkvKiBBU0NJSSBjaGFyYWN0ZXIgc3ltYm9s cyAqLwotI2luY2x1ZGUgImNrdWNtZC5oIiAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQg cGFyc2luZyBkZWZpbml0aW9ucyAqLwotCi0jaWZkZWYgT1NGMTMKLSNpZmRlZiBDS19BTlNJQwot I2lmZGVmIF9OT19QUk9UTwotI3VuZGVmIF9OT19QUk9UTwotI2VuZGlmIC8qIF9OT19QUk9UTyAq LwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0jZW5kaWYgLyogT1NGMTMgKi8KLQotI2lmbmRlZiBI UFVYUFJFNjUKLSNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51bWJlciBzeW1ib2xzICov Ci0jZWxzZQotI2lmbmRlZiBFUlJOT19JTkNMVURFRAotI2luY2x1ZGUgPGVycm5vLmg+CQkJLyog RXJyb3IgbnVtYmVyIHN5bWJvbHMgKi8KLSNlbmRpZgkvKiBFUlJOT19JTkNMVURFRCAqLwotI2Vu ZGlmCS8qIEhQVVhQUkU2NSAqLwotCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5UCi0jZGVmaW5lIElO Q0xfTk9QTQotI2RlZmluZSBJTkNMX1ZJTwkJCS8qIE5lZWRlZCBmb3IgY2tvY29uLmggKi8KLSNp bmNsdWRlIDxvczIuaD4KLSN1bmRlZiBDT01NRU5UCi0jZWxzZQotI2RlZmluZSBBUElSRVQgVUxP TkcKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZW5kaWYgLyogTlQgKi8KLSNpbmNsdWRlICJja29j b24uaCIKLSNpbmNsdWRlIDxpby5oPgotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgT1NLCi0j ZGVmaW5lIGNjIGNjb3VudAkJCS8qIE9TLTkvNjhLIGNvbXBpbGVyIGJ1ZyAqLwotI2VuZGlmIC8q IE9TSyAqLwotCi0jaWZkZWYgR0VNRE9TCQkJCS8qIEF0YXJpIFNUICovCi0jaWZkZWYgcHV0Y2hh cgotI3VuZGVmIHB1dGNoYXIKLSNlbmRpZiAvKiBwdXRjaGFyICovCi0jZGVmaW5lIHB1dGNoYXIo eCkgY29ub2MoeCkKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQotI2lmZGVmIENLX0FVVE9ETAotZXh0 ZXJuIGludCBjbWRhZGwsIGp1c3RvbmU7Ci0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0KLWV4dGVy biBpbnQgdGltZWxpbWl0LCBuenhvcHRzLCBub3B1c2gsIG5vbG9jYWwsIHhjbWRzcmMsIGtlZXBh bGxjaGFyczsKLQotI2lmZGVmIENLU1lTTE9HCi0jaWZkZWYgVU5JWAotI2lmZGVmIENLWFBSSU5U RgkJCS8qIE91ciBwcmludGYgbWFjcm8gY29uZmxpY3RzIHdpdGggKi8KLSN1bmRlZiBwcmludGYJ CQkJLyogdXNlIG9mICJwcmludGYiIGluIHN5c2xvZy5oICovCi0jZW5kaWYgLyogQ0tYUFJJTlRG ICovCi0jaWZkZWYgUlRBSVgKLSNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+Ci0jZWxzZSAgLyogUlRB SVggKi8KLSNpbmNsdWRlIDxzeXNsb2cuaD4KLSNlbmRpZiAvKiBSVEFJWCAqLwotI2lmZGVmIENL WFBSSU5URgotI2RlZmluZSBwcmludGYgY2t4cHJpbnRmCi0jZW5kaWYgLyogQ0tYUFJJTlRGICov Ci0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0KLS8qIExvY2FsIHZh cmlhYmxlcyAqLwotCi1zdGF0aWMKLWludCBwc2V0ZiA9IDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBGbGFnIHRoYXQgcHJvbXB0IGhhcyBiZWVuIHNldCAqLwotICAgIGNjID0gMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBjb3VudCAqLwotICAgIGRweCA9 IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIER1cGxleCAoMCA9IGZ1bGwpICovCi0g ICAgaW53b3JkID0gMDsJCQkJLyogSW4gdGhlIG1pZGRsZSBvZiBnZXR0aW5nIGEgd29yZCAqLwot Ci1jaGFyICpkZnByb20gPSAiQ29tbWFuZD8gIjsgICAgICAgICAgICAgLyogRGVmYXVsdCBwcm9t cHQgKi8KLSNpZm5kZWYgTk9MQVNURklMRQotY2hhciAqbGFzdGZpbGUgPSBOVUxMOwkJCS8qIExh c3QgZmlsZXNwZWMgKi8KLXN0YXRpYyBjaGFyICp0bXBsYXN0ZmlsZSA9IE5VTEw7CS8qIExhc3Qg ZmlsZXNwZWMgY2FuZGlkYXRlICovCi0jZW5kaWYJLyogTk9MQVNURklMRSAqLwotCi1pbnQgY21m bGdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBmbGFncyAqLwotaW50 IGNtZnNhdjsJCQkJLyogQSBzYXZlZCB2ZXJzaW9uIG9mIHRoZW0gKi8KLQotc3RhdGljIGNoYXIg cHVzaGMgPSBOVUw7Ci1zdGF0aWMgY2hhciBicmtjaGFyID0gTlVMOwotCi0jZGVmaW5lIENNREVG QVVMVCAxMDIzCi1zdGF0aWMgY2hhciBjbWRlZmF1bHRbQ01ERUZBVUxUKzFdOwotCi0jaWZkZWYg RENNREJVRgotY2hhciAqY21kYnVmID0gTlVMTDsJCQkvKiBDb21tYW5kIGJ1ZmZlciAqLwotY2hh ciAqc2F2YnVmID0gTlVMTDsJCQkvKiBCdWZmZXIgdG8gc2F2ZSBjb3B5IG9mIGNvbW1hbmQgKi8K LWNoYXIgKmF0bWJ1ZiA9IE5VTEw7CQkJLyogQXRvbSBidWZmZXIgLSBmb3IgY3VycmVudCBmaWVs ZCAqLwotY2hhciAqYXR4YnVmID0gTlVMTDsJCQkvKiBGb3IgZXhwYW5kaW5nIHRoZSBhdG9tIGJ1 ZmZlciAqLwotY2hhciAqcHJldmNtZCA9IE5VTEw7Ci1zdGF0aWMgY2hhciAqYXR5YnVmID0gTlVM TDsJCS8qIEZvciBjb3B5aW5nIGF0b20gYnVmZmVyICovCi1zdGF0aWMgY2hhciAqZmlsYnVmID0g TlVMTDsJCS8qIEZpbGUgbmFtZSBidWZmZXIgKi8KLXN0YXRpYyBjaGFyICpjbXByb20gPSBOVUxM OwkJLyogUHJvZ3JhbSdzIHByb21wdCAqLwotc3RhdGljIGNoYXIgKmNtcHJ4eCA9IE5VTEw7CQkv KiBQcm9ncmFtJ3MgcHJvbXB0LCB1bmV2YWx1YXRlZCAqLwotCi0jaWZkZWYgQ0tfUkVDQUxMCi0v KgotICBDb21tYW5kIHJlY2FsbCBpcyBhdmFpbGFibGUgb25seSBpZiB3ZSBjYW4gbWFrZSBwcm9m bGlnYXRlIHVzZSBvZiBtYWxsb2MoKS4KLSovCi0jZGVmaW5lIFJfTUFYIDEwCQkJLyogSG93IG1h bnkgY29tbWFuZHMgdG8gc2F2ZSAqLwotaW50IGNtX3JlY2FsbCA9IFJfTUFYOwkJCS8qIFNpemUg b2YgY29tbWFuZCByZWNhbGwgYnVmZmVyICovCi1pbnQgb25fcmVjYWxsID0gMTsJCQkvKiBSZWNh bGwgZmVhdHVyZSBpcyBPTiAqLwotc3RhdGljIGludCBub19yZWNhbGwgPSAwOwkJLyogUmVjYWxs IE9GRiBmb3IgdGhpcyBjbWQgb25seSAqLwotc3RhdGljIGludCBmb3JjZV9hZGQgPSAwOwkJLyog Rm9yY2UgY21kIGludG8gcmVjYWxsIGJ1ZmZlciAqLwotc3RhdGljIGludCBsYXN0X3JlY2FsbCA9 IC0xOwkJLyogTGFzdCByZWNhbGwtcmVsYXRlZCBhY3Rpb24gKi8KLS8qCi0gIC0xID0gbm9uZQot ICAgMCA9IENSIChhIGNvbW1hbmQgd2FzIGVudGVyZWQpCi0gICAxID0gVXAKLSAgIDIgPSBEb3du Ci0qLwotaW50IGluX3JlY2FsbCA9IDA7CQkJLyogUmVjYWxsIGJ1ZmZlcnMgYXJlIGluaXQnZCAq Lwotc3RhdGljIGludAotICBjdXJyZW50ID0gLTEsCQkJCS8qIFBvaW50ZXIgdG8gY3VycmVudCBj b21tYW5kICovCi0gIHJsYXN0ID0gLTE7CQkJCS8qIEluZGV4IG9mIGxhc3QgY29tbWFuZCBpbiBi dWZmZXIgKi8KLXN0YXRpYyBjaGFyICoqcmVjYWxsID0gTlVMTDsJCS8qIEFycmF5IG9mIHJlY2Fs bCBidWZmZXIgcG9pbnRlcnMgKi8KLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSNlbHNlICAvKiAh RENNREJVRiAqLwotY2hhciBjbWRidWZbQ01EQkwrNF07ICAgICAgICAgICAgICAgICAgIC8qIENv bW1hbmQgYnVmZmVyICovCi1jaGFyIHNhdmJ1ZltDTURCTCs0XTsgICAgICAgICAgICAgICAgICAg LyogQnVmZmVyIHRvIHNhdmUgY29weSBvZiBjb21tYW5kICovCi1jaGFyIGF0bWJ1ZltBVE1CTCs0 XTsgICAgICAgICAgICAgICAgICAgLyogQXRvbSBidWZmZXIgKi8KLWNoYXIgYXR4YnVmW0NNREJM KzRdOyAgICAgICAgICAgICAgICAgICAvKiBGb3IgZXhwYW5kaW5nIHRoZSBhdG9tIGJ1ZmZlciAq LwotY2hhciBwcmV2Y21kW0NNREJMKzRdOwkJCS8qIEZvciBkaXNwbGF5aW5nIHRoZSBsYXN0IGNv bW1hbmQgKi8KLXN0YXRpYyBjaGFyIGF0eWJ1ZltBVE1CTCs0XTsJCS8qIEZvciBjb3B5aW5nIGF0 b20gYnVmZmVyICovCi1zdGF0aWMgY2hhciBmaWxidWZbQVRNQkwrNF07CQkvKiBGaWxlIG5hbWUg YnVmZmVyICovCi1zdGF0aWMgY2hhciBjbXByb21bUFJPTVBUTCsxXTsJCS8qIFByb2dyYW0ncyBw cm9tcHQgKi8KLXN0YXRpYyBjaGFyIGNtcHJ4eFtQUk9NUFRMKzFdOwkJLyogUHJvZ3JhbSdzIHBy b21wdCwgdW5ldmFsdWF0ZWQgKi8KLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLS8qIENvbW1hbmQg YnVmZmVyIHBvaW50ZXJzICovCi0KLSNkZWZpbmUgUFBWTEVOIFZOQU1MCQkJLyogMjAwODAzMDUg V29sZnJhbSBTYW5nICh3YXMgMjQpICovCi1jaGFyIHBwdm5hbWJ1ZltQUFZMRU4rMV0gPSB7IE5V TCwgTlVMIH07Ci0KLWNoYXIgKiBjbWJwdHIgPSBOVUxMOwkJCS8qIEN1cnJlbnQgcG9zaXRpb24g KGZvciBleHBvcnQpICovCi0KLXN0YXRpYyBjaGFyICpicCwgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDdXJyZW50IGNvbW1hbmQgYnVmZmVyIHBvc2l0aW9uICovCi0gICAgKnBwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgb2YgY3VycmVudCBmaWVsZCAqLwotICAg ICpucDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9mIG5leHQgZmll bGQgKi8KLQotc3RhdGljIGludCB1bmd3LAkJCS8qIEZvciB1bmdldHRpbmcgd29yZHMgKi8KLSAg ICBhdHhuOwkJCQkvKiBFeHBhbnNpb24gYnVmZmVyIChhdHhidWYpIGxlbmd0aCAqLwotCi0jaWZk ZWYgT1MyCi1leHRlcm4gaW50IHdpZGVyZXN1bHQ7Ci0jZW5kaWYgLyogT1MyICovCi0KLWV4dGVy biBpbnQgY21kX2NvbHMsIGNtZF9yb3dzLCBsb2NhbCwgcXVpZXQ7Ci0KLSNpZmRlZiBUTkNPREUK LSNpZmRlZiBJQUMKLSN1bmRlZiBJQUMKLSNlbmRpZiAvKiBJQUMgKi8KLSNkZWZpbmUgSUFDIDI1 NQotI2VuZGlmIC8qIFROQ09ERSAqLwotCi1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgZ3R3b3JkLCAo aW50KSApOwotX1BST1RPVFlQKCBzdGF0aWMgaW50IGFkZGJ1ZiwgKGNoYXIgKikgKTsKLV9QUk9U T1RZUCggc3RhdGljIGludCBzZXRhdG0sIChjaGFyICosIGludCkgKTsKLV9QUk9UT1RZUCggc3Rh dGljIFZPSUQgY21kbmV3bCwgKGNoYXIpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBWT0lEIGNtZGNo YXJkZWwsICh2b2lkKSApOwotX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBjbWRlY2hvLCAoY2hhciwg aW50KSApOwotX1BST1RPVFlQKCBzdGF0aWMgaW50IHRlc3QsIChpbnQsIGludCkgKTsKLSNpZmRl ZiBHRU1ET1MKLV9QUk9UT1RZUCggZXh0ZXJuIGNoYXIgKnN0cmNociwgKGNoYXIgKiwgaW50KSAp OwotI2VuZGlmIC8qIEdFTURPUyAqLwotCi1leHRlcm4gY2hhciAqIGRmdHR5OwotCi0vKiBUaGUg Zm9sbG93aW5nIGFyZSBmb3IgdXNlIHdpdGggY2hhaW5lZCBGREIncyAqLwotCi1zdGF0aWMgaW50 IGNyZmxhZyA9IDA7CQkJLyogQ2FycmlhZ2UgcmV0dXJuIHdhcyB0eXBlZCAqLwotc3RhdGljIGlu dCBxbWZsYWcgPSAwOwkJCS8qIFF1ZXN0aW9uIG1hcmsgd2FzIHR5cGVkICovCi1zdGF0aWMgaW50 IGVzZmxhZyA9IDA7CQkJLyogRXNjYXBlIHdhcyB0eXBlZCAqLwotCi0vKiBEaXJlY3Rvcnkgc2Vw YXJhdG9yICovCi0KLSNpZmRlZiBHRU1ET1MKLXN0YXRpYyBjaGFyIGRpcnNlcCA9ICdcXCc7Ci0j ZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi1zdGF0aWMgY2hhciBkaXJzZXAgPSAnOic7Ci0jZWxz ZQotI2lmZGVmIE1BQwotc3RhdGljIGNoYXIgZGlyc2VwID0gJzonOwotI2Vsc2UKLSNpZmRlZiBW TVMKLXN0YXRpYyBjaGFyIGRpcnNlcCA9ICcuJzsKLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotc3Rh dGljIGNoYXIgZGlyc2VwID0gJz4nOwotI2Vsc2UKLXN0YXRpYyBjaGFyIGRpcnNlcCA9ICcvJzsJ CS8qIFVOSVgsIE9TLzIsIE9TLTksIEFtaWdhLCBldGMuICovCi0jZW5kaWYgLyogU1RSQVRVUyAq LwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCi0jZW5kaWYgLyogR0VNRE9TICovCi0KLS8qICBIIEEgUyBOIE8gUCBBIFQgSCAgKi8K LQotLyogIFJldHVybnMgMCBpZiBmaWxlc3BlYyBzIGluY2x1ZGVzIGFueSBwYXRoIHNlZ21lbnRz OyAxIGlmIGl0IGRvZXNuJ3QuICovCi0KLWludAotaGFzbm9wYXRoKHMpIGNoYXIgKiBzOyB7Ci0g ICAgY2hhciAqIHAgPSBOVUxMOwotICAgIGlmICghcykgcmV0dXJuKDApOwotICAgIGlmICghKnMp IHJldHVybigwKTsKLSAgICB6c3RyaXAocywmcCk7Ci0gICAgcmV0dXJuKGNrc3RyY21wKHMscCxD S01BWFBBVEgsZmlsZWNhc2UpID09IDAgPyAxIDogMCk7Ci19Ci0KLS8qICBDIEsgUyBQIFIgRSBB IEQgIC0tICBQcmludCBzdHJpbmcgZG91YmxlLXNwYWNlZCAgKi8KLQotc3RhdGljIGNoYXIgKiBz cHJwdHIgPSBOVUxMOwotCi1zdGF0aWMgY2hhciAqCi1ja3NwcmVhZChzKSBjaGFyICogczsgewot ICAgIGludCBuID0gMDsKLSAgICBjaGFyICogcDsKLSAgICBuID0gc3RybGVuKHMpOwotICAgIGlm IChzcHJwdHIpCi0gICAgICBmcmVlKHNwcnB0cik7Ci0gICAgc3BycHRyID0gbWFsbG9jKG4gKyBu ICsgMyk7Ci0gICAgaWYgKHNwcnB0cikgewotCXAgPSBzcHJwdHI7Ci0Jd2hpbGUgKCpzKSB7Ci0J ICAgICpwKysgPSAqcysrOwotCSAgICAqcCsrID0gU1A7Ci0JfQotCSpwID0gTlVMOwotICAgIH0K LSAgICByZXR1cm4oc3BycHRyID8gc3BycHRyIDogIiIpOwotfQotCi0vKiAgVCBFIFMgVCAgLS0g IEJpdCB0ZXN0ICAqLwotCi1zdGF0aWMgaW50Ci10ZXN0KHgsbSkgaW50IHgsIG07IHsgLyogIFJl dHVybnMgMSBpZiBhbnkgYml0cyBmcm9tIG0gYXJlIG9uIGluIHgsIGVsc2UgMCAgKi8KLSAgICBy ZXR1cm4oKHggJiBtKSA/IDEgOiAwKTsKLX0KLQotLyogIEsgVyBEIEggRSBMIFAgIC0tICBHaXZl biBhIGtleXdvcmQgdGFibGUsIHByaW50IGtleXdvcmRzIGluIGNvbHVtbnMuICAqLwotLyoKLSAg Q2FsbCB3aXRoOgotICAgIHMgICAgIC0ga2V5d29yZCB0YWJsZQotICAgIG4gICAgIC0gbnVtYmVy IG9mIGVudHJpZXMKLSAgICBwYXQgICAtIHBhdHRlcm4gKGxlZnQgc3Vic3RyaW5nKSB0aGF0IG11 c3QgbWF0Y2ggZm9yIGVhY2gga2V5d29yZAotICAgIHByZSAgIC0gcHJlZml4IHRvIGFkZCB0byBl YWNoIGtleXdvcmQKLSAgICBwb3N0ICAtIHN1ZmZpeCB0byBhZGQgdG8gZWFjaCBrZXl3b3JkCi0g ICAgb2ZmICAgLSBvZmZzZXQgb24gZmlyc3Qgc2NyZWVuZnVsLCBhbGxvd2luZyByb29tIGZvciBp bnRyb2R1Y3RvcnkgdGV4dAotICAgIHhobHAgIC0gMSB0byBwcmludCBhbnkgQ01fSU5WIGtleXdv cmRzIHRoYXQgYXJlIG5vdCBhbHNvIGFiYnJldmlhdGlvbnMuCi0gICAgICAgICAgICAyIHRvIHBy aW50IENNX0lOViBrZXl3b3JkcyBpZiBDTV9ITFAgYWxzbyBzZXQKLSAgICAgICAgICAgIDQgaWYg aXQncyBhIHN3aXRjaCB0YWJsZSAodG8gc2hvdyAnOicgaWYgQ01fQVJHKQotCi0gIEFycmFuZ2Vz IGtleXdvcmRzIGluIGNvbHVtbnMgd2l0aCB3aWR0aCBiYXNlZCBvbiBsb25nZXN0IGtleXdvcmQu Ci0gIERvZXMgIm1vcmU/IiBwcm9tcHRpbmcgYXQgZW5kIG9mIHNjcmVlbi4KLSAgVXNlcyBnbG9i YWwgY21kX3Jvd3MgYW5kIGNtZF9jb2xzIGZvciBzY3JlZW4gc2l6ZS4KLSovCi1WT0lECi1rd2Ro ZWxwKHMsbixwYXQscHJlLHBvc3Qsb2ZmLHhobHApCi0gICAgc3RydWN0IGtleXRhYiBzW107IGlu dCBuLCBvZmYsIHhobHA7IGNoYXIgKnBhdCwgKnByZSwgKnBvc3Q7Ci0vKiBrd2RoZWxwICovIHsK LQotICAgIGludCB3aWR0aCA9IDA7Ci0gICAgaW50IGNjOwotICAgIGludCBjb2xzLCBoZWlnaHQs IGksIGosIGssIGxjLCBuMiA9IDA7Ci0gICAgY2hhciAqYiA9IE5VTEwsICpwLCAqcTsKLSAgICBj aGFyICpwYSwgKnB4OwotICAgIGNoYXIgKipzMiA9IE5VTEw7Ci0gICAgY2hhciAqdG1wYnVmID0g TlVMTDsKLQotICAgIGNjID0gc3RybGVuKHBhdCk7Ci0KLSAgICBpZiAoIXMpIHJldHVybjsJCQkv KiBOb3RoaW5nIHRvIGRvICovCi0gICAgaWYgKG4gPCAxKSByZXR1cm47CQkJLyogRGl0dG8gKi8K LSAgICBpZiAob2ZmIDwgMCkgb2ZmID0gMDsJCS8qIE9mZnNldCBmb3IgZmlyc3QgcGFnZSAqLwot ICAgIGlmICghcHJlKSBwcmUgPSAiIjsJCQkvKiBIYW5kbGUgbnVsbCBzdHJpbmcgcG9pbnRlcnMg Ki8KLSAgICBpZiAoIXBvc3QpIHBvc3QgPSAiIjsKLSAgICBsYyA9IG9mZjsJCQkJLyogU2NyZWVu LWxpbmUgY291bnRlciAqLwotCi0gICAgaWYgKHhobHAgJiA0KQkJCS8qIEZvciBzd2l0Y2hlcyAq LwotICAgICAgdG1wYnVmID0gKGNoYXIgKiltYWxsb2MoVE1QQlVGU0laKzEpOwotCi0gICAgaWYg KChzMiA9IChjaGFyICoqKSBtYWxsb2MobiAqIHNpemVvZihjaGFyICopKSkpIHsKLQlmb3IgKGkg PSAwOyBpIDwgbjsgaSsrKSB7CS8qIEZpbmQgbG9uZ2VzdCBrZXl3b3JkICovCi0JICAgIHMyW2ld ID0gTlVMTDsKLQkgICAgaWYgKGNrc3RyY21wKHNbaV0ua3dkLHBhdCxjYywwKSkKLQkgICAgICBj b250aW51ZTsKLQotCSAgICBpZiAoc1tpXS5mbGdzICYgQ01fUFNICS8qIE5PUFVTSCBvciBub3B1 c2ggc2NyZWVuaW5nICovCi0jaWZuZGVmIE5PUFVTSAotCQkmJiBub3B1c2gKLSNlbmRpZiAvKiBO T1BVU0ggKi8KLQkJKQotCSAgICAgIGNvbnRpbnVlOwotCSAgICBpZiAoc1tpXS5mbGdzICYgQ01f TE9DCS8qIE5PTE9DQUwgb3Igbm9sb2NhbCBzY3JlZW5pbmcgKi8KLSNpZm5kZWYgTk9MT0NBTAot CQkmJiBub2xvY2FsCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCQkpCi0JICAgICAgY29udGludWU7 Ci0KLQkgICAgaWYgKHNbaV0uZmxncyAmIENNX0lOVikgewotI2lmZGVmIENPTU1FTlQKLS8qIFRo aXMgY29kZSBkb2VzIG5vdCBzaG93IGludmlzaWJsZSBrZXl3b3JkcyBhdCBhbGwgZXhjZXB0IGZv ciAiaGVscCA/IiAqLwotLyogYW5kIHRoZW4gb25seSBoZWxwIHRvcGljcyAoQ01fSExQKSBpbiB0 aGUgdG9wLWxldmVsIGtleXdvcmQgbGlzdC4gKi8KLQotCQlpZiAoKHhobHAgJiAyKSA9PSAwKQot CQkgIGNvbnRpbnVlOwotCQllbHNlIGlmICgoc1tpXS5mbGdzICYgQ01fSExQKSA9PSAwKQotCQkg IGNvbnRpbnVlOwotI2Vsc2UKLS8qIFRoaXMgY29kZSBzaG93cyBpbnZpc2libGUga2V5d29yZHMg dGhhdCBhcmUgbm90IGFsc28gYWJicmV2aWF0aW9ucyB3aGVuICovCi0vKiA/IHdhcyB0eXBlZCBB RlRFUiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWVsZCBzbyB0aGUgdXNlciBjYW4gZmluZCBvdXQg Ki8KLS8qIHdoYXQgdGhleSBhcmUgYW5kIChmb3IgZXhhbXBsZSkgd2h5IGNvbXBsZXRpb24gZG9l c24ndCB3b3JrIGF0IHRoaXMgcG9pbnQgKi8KLQotCQlpZiAoc1tpXS5mbGdzICYgQ01fQUJSKQot CQkgIGNvbnRpbnVlOwotCQllbHNlIGlmICgoeGhscCAmIDMpID09IDApCi0JCSAgY29udGludWU7 Ci0JCWVsc2UgaWYgKCh4aGxwICYgMikgJiYgKChzW2ldLmZsZ3MgJiBDTV9ITFApID09IDApKQot CQkgIGNvbnRpbnVlOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgfQotCSAgICBqID0gc3Ry bGVuKHNbaV0ua3dkKTsKLQkgICAgaWYgKCEoeGhscCAmIDQpIHx8ICF0bXBidWYpIHsgLyogUmVn dWxhciBrZXl3b3JkIHRhYmxlICovCi0JCXMyW24yKytdID0gc1tpXS5rd2Q7CS8qIENvcHkgcG9p bnRlcnMgdG8gdmlzaWJsZSBvbmVzICovCi0JICAgIH0gZWxzZSB7CQkJLyogU3dpdGNoZXMgKi8K LQkJY2ttYWttc2codG1wYnVmLAkvKiBNYWtlIGEgY29weSB0aGF0IHNob3dzICI6IiBpZiAqLwot CQkJIFRNUEJVRlNJWiwJLyogdGhlIHN3aXRjaCB0YWtlcyBhbiBhcmd1bWVudC4gKi8KLQkJCSBz W2ldLmt3ZCwKLQkJCSAoc1tpXS5mbGdzICYgQ01fQVJHKSA/ICI6IiA6ICIiLAotCQkJIE5VTEws Ci0JCQkgTlVMTAotCQkJICk7Ci0JCW1ha2VzdHIoJihzMltuMl0pLHRtcGJ1Zik7Ci0JCWlmIChz W2ldLmZsZ3MgJiBDTV9BUkcpIGorKzsKLQkJbjIrKzsKLQkgICAgfQotCSAgICBpZiAoaiA+IHdp ZHRoKQotCSAgICAgIHdpZHRoID0gajsKLQl9Ci0JLyogQ29sdW1uIHdpZHRoICovCi0JbiA9IG4y OwotICAgIH0KLSAgICBpZiAoczIgJiYgKGIgPSAoY2hhciAqKSBtYWxsb2MoY21kX2NvbHMgKyAx KSkpIHsgLyogTWFrZSBhIGxpbmUgYnVmZmVyICAgKi8KLQljaGFyICogYng7Ci0JYnggPSBiICsg Y21kX2NvbHM7Ci0Jd2lkdGggKz0gKGludClzdHJsZW4ocHJlKSArIChpbnQpc3RybGVuKHBvc3Qp ICsgMjsKLQljb2xzID0gY21kX2NvbHMgLyB3aWR0aDsJLyogSG93IG1hbnkgY29sdW1ucz8gKi8K LQlpZiAoY29scyA8IDEpIGNvbHMgPSAxOwotCWhlaWdodCA9IG4gLyBjb2xzOwkJLyogSG93IGxv bmcgaXMgZWFjaCBjb2x1bW4/ICovCi0JaWYgKG4gJSBjb2xzKSBoZWlnaHQrKzsJCS8qIEFkZCBv bmUgZm9yIHJlbWFpbmRlciwgaWYgYW55ICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBp KyspIHsJICAgIC8qIExvb3AgZm9yIGVhY2ggcm93ICovCi0JICAgIGZvciAoaiA9IDA7IGogPCBj bWRfY29sczsgaisrKSAgLyogRmlyc3QgZmlsbCByb3cgd2l0aCBibGFua3MgKi8KLQkgICAgICBi W2pdID0gU1A7Ci0JICAgIGZvciAoaiA9IDA7IGogPCBjb2xzOyBqKyspIHsgICAgLyogTG9vcCBm b3IgZWFjaCBjb2x1bW4gaW4gcm93ICovCi0JCWsgPSBpICsgKGogKiBoZWlnaHQpOyAgICAgICAv KiBJbmRleCBvZiBuZXh0IGtleXdvcmQgKi8KLQkJaWYgKGsgPCBuKSB7CQkgICAgLyogSW4gcmFu Z2U/ICovCi0JCSAgICBwYSA9IHByZTsKLQkJICAgIHB4ID0gcG9zdDsKLQkJICAgIHAgPSBzMltr XTsJCSAgICAvKiBQb2ludCB0byB2ZXJiIG5hbWUgKi8KLQkJICAgIHEgPSBiICsgKGogKiB3aWR0 aCkgKyAxOyAvKiBXaGVyZSB0byBjb3B5IGl0IHRvICovCi0JCSAgICB3aGlsZSAoKHEgPCBieCkg JiYgKCpxKysgPSAqcGErKykpIDsgLyogQ29weSBwcmVmaXggKi8KLQkJICAgIHEtLTsJCSAgICAg ICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLwotCQkgICAgd2hpbGUgKChxIDwgYngp ICYmICgqcSsrID0gKnArKykpIDsJIC8qIENvcHkgZmlsZW5hbWUgKi8KLQkJICAgIHEtLTsJCSAg ICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLwotCQkgICAgd2hpbGUgKChxIDwg YngpICYmICgqcSsrID0gKnB4KyspKSA7IC8qIENvcHkgc3VmZml4ICovCi0JCSAgICBpZiAoaiA8 IGNvbHMgLSAxKSB7Ci0JCQlxLS07Ci0JCQkqcSA9IFNQOwkvKiBSZXBsYWNlIHRoZSBzcGFjZSAq LwotCQkgICAgfQotCQl9Ci0JICAgIH0KLQkgICAgcCA9IGIgKyBjbWRfY29scyAtIDE7CS8qIExh c3QgY2hhciBpbiBsaW5lICovCi0JICAgIHdoaWxlICgqcC0tID09IFNQKSA7CS8qIFRyaW0gKi8K LQkgICAgKihwKzIpID0gTlVMOwotCSAgICBwcmludGYoIiVzXG4iLGIpOwkJLyogUHJpbnQgdGhl IGxpbmUgKi8KLQkgICAgaWYgKCsrbGMgPiAoY21kX3Jvd3MgLSAyKSkgeyAvKiBTY3JlZW4gZnVs bD8gKi8KLQkJaWYgKCFhc2ttb3JlKCkpCQkvKiBEbyBtb3JlLXByb21wdGluZy4uLiAqLwotCQkg IGdvdG8geGt3ZGhlbHA7Ci0JCWVsc2UKLQkJICBsYyA9IDA7Ci0JICAgIH0KLQl9Ci0JLyogcHJp bnRmKCJcbiIpOyAqLwkJLyogQmxhbmsgbGluZSBhdCBlbmQgb2YgcmVwb3J0ICovCi0gICAgfSBl bHNlIHsJCQkJLyogTWFsbG9jIGZhaWx1cmUsIG5vIGNvbHVtbnMgKi8KLQlmb3IgKGkgPSAwOyBp IDwgbjsgaSsrKSB7Ci0JICAgIGlmIChzW2ldLmZsZ3MgJiBDTV9JTlYpCS8qIFVzZSBvcmlnaW5h bCBrZXl3b3JkIHRhYmxlICovCi0JICAgICAgY29udGludWU7CQkJLyogc2tpcHBpbmcgaW52aXNp YmxlIGVudHJpZXMgKi8KLQkgICAgcHJpbnRmKCIlcyVzJXNcbiIscHJlLHNbaV0ua3dkLHBvc3Qp OwotCSAgICBpZiAoKytsYyA+IChjbWRfcm93cyAtIDIpKSB7IC8qIFNjcmVlbiBmdWxsPyAqLwot CQlpZiAoIWFza21vcmUoKSkJCS8qIERvIG1vcmUtcHJvbXB0aW5nLi4uICovCi0JCSAgZ290byB4 a3dkaGVscDsKLQkJZWxzZQotCQkgIGxjID0gMDsKLQkgICAgfQotCX0KLSAgICB9Ci0gIHhrd2Ro ZWxwOgotICAgIGlmICh4aGxwICYgNCkgewotCWlmICh0bXBidWYpIGZyZWUoKGNoYXIgKil0bXBi dWYpOwotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0JICBpZiAoczJbaV0pIGZyZWUoczJbaV0p OwotICAgIH0KLSAgICBpZiAoczIpIGZyZWUoczIpOwkJCS8qIEZyZWUgYXJyYXkgY29weSAqLwot ICAgIGlmIChiKSBmcmVlKGIpOwkJCS8qIEZyZWUgbGluZSBidWZmZXIgKi8KLSAgICByZXR1cm47 Ci19Ci0KLS8qICBYIEYgSSBMIEggRSBMIFAgIC0tICBHaXZlbiBhIGZpbGUgbGlzdCwgcHJpbnQg bmFtZXMgaW4gY29sdW1ucy4gICovCi0vKgotICBDYWxsIHdpdGg6Ci0gICAgbiAgICAgLSBudW1i ZXIgb2YgZW50cmllcwotICAgIHByZSAgIC0gcHJlZml4IHRvIGFkZCB0byBlYWNoIGZpbGVuYW1l Ci0gICAgcG9zdCAgLSBzdWZmaXggdG8gYWRkIHRvIGVhY2ggZmlsZW5hbWUKLSAgICBvZmYgICAt IG9mZnNldCBvbiBmaXJzdCBzY3JlZW5mdWwsIGFsbG93aW5nIHJvb20gZm9yIGludHJvZHVjdG9y eSB0ZXh0Ci0gICAgY21kaXJmbGcgLSAxIGlmIG9ubHkgZGlyZWN0b3J5IG5hbWVzIHNob3VsZCBi ZSBsaXN0ZWQsIDAgdG8gbGlzdCBhbGwgZmlsZXMKLSAgICBmcyAgICAtIGNhbGwgZmlsZXNlbGVj dCgpIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgZWFjaCBmaWxlLgotICAgIFRoZSByZXN0 IG9mIHRoZSBhcmdzIGFyZSB0aGUgc2FtZSBhcyBmb3IgZmlsZXNlbGVjdCgpLgotCi0gIEFycmFu Z2VzIGZpbGVuYW1lcyBpbiBjb2x1bW5zIHdpdGggd2lkdGggYmFzZWQgb24gbG9uZ2VzdCBmaWxl bmFtZS4KLSAgRG9lcyAibW9yZT8iIHByb21wdGluZyBhdCBlbmQgb2Ygc2NyZWVuLgotICBVc2Vz IGdsb2JhbCBjbWRfcm93cyBhbmQgY21kX2NvbHMgZm9yIHNjcmVlbiBzaXplLgotKi8KLQotaW50 Ci0jaWZkZWYgQ0tfQU5TSUMKLXhmaWxoZWxwKAotICAgIGludCBuLCBjaGFyICpwcmUsIGNoYXIg KnBvc3QsIGludCBvZmYsIGludCBjbWRpcmZsYWcsCi0gICAgaW50IGZzLCBjaGFyICpzYSwgY2hh ciAqc2IsIGNoYXIgKnNuYSwgY2hhciAqc25iLAotICAgIENLX09GRl9UIG1pbnNpeiwgQ0tfT0ZG X1QgbWF4c2l6LAotICAgIGludCBuYnUsIGludCBueGxpc3QsCi0gICAgY2hhciAqKiB4bGlzdAot KQotI2Vsc2UKLXhmaWxoZWxwKG4scHJlLHBvc3Qsb2ZmLGNtZGlyZmxnLAotCSBmcyxzYSxzYixz bmEsc25iLG1pbnNpeixtYXhzaXosbmJ1LG54bGlzdCx4bGlzdCkKLSAgICBpbnQgbiwgb2ZmOyBj aGFyICpwcmUsICpwb3N0OyBpbnQgY21kaXJmbGc7Ci0gICAgaW50IGZzOyBjaGFyICpzYSwqc2Is KnNuYSwqc25iOyBDS19PRkZfVCBtaW5zaXosbWF4c2l6OwotICAgIGludCBuYnUsbnhsaXN0OyBj aGFyICoqIHhsaXN0OwotI2VuZGlmCS8qIENLX0FOU0lDICovCi0gewotICAgIGNoYXIgZmlsYnVm W0NLTUFYUEFUSCArIDFdOwkJLyogVGVtcCBidWZmZXIgZm9yIG9uZSBmaWxlbmFtZSAqLwotICAg IGludCB3aWR0aCA9IDA7Ci0gICAgaW50IGNvbHMsIGhlaWdodCwgaSwgaiwgaywgbGMsIG4yID0g MCwgcmMgPSAwLCBpdHNhZGlyID0gMDsKLSAgICBjaGFyICpiID0gTlVMTCwgKnAsICpxOwotICAg IGNoYXIgKnBhLCAqcHg7Ci0gICAgY2hhciAqKnMyID0gTlVMTDsKLSNpZmRlZiBWTVMKLSAgICBj aGFyICogY2RwID0gemd0ZGlyKCk7Ci0jZW5kaWYgLyogVk1TICovCi0KLSAgICBpZiAobiA8IDEp IHJldHVybigwKTsKLSAgICBpZiAob2ZmIDwgMCkgb2ZmID0gMDsJCS8qIE9mZnNldCBmb3IgZmly c3QgcGFnZSAqLwotICAgIGlmICghcHJlKSBwcmUgPSAiIjsJCQkvKiBIYW5kbGUgbnVsbCBzdHJp bmcgcG9pbnRlcnMgKi8KLSAgICBpZiAoIXBvc3QpIHBvc3QgPSAiIjsKLQotICAgIGxjID0gb2Zm OwkJCQkvKiBTY3JlZW4tbGluZSBjb3VudGVyICovCi0KLSAgICBpZiAoKHMyID0gKGNoYXIgKiop IG1hbGxvYyhuICogc2l6ZW9mKGNoYXIgKikpKSkgewotCWZvciAoaSA9IDA7IGkgPCBuOyBpKysp IHsJLyogTG9vcCB0aHJvdWdoIGZpbGVuYW1lcyAqLwotCSAgICBpdHNhZGlyID0gMDsKLQkgICAg czJbaV0gPSBOVUxMOwkJLyogSW5pdGlhbGl6ZSBlYWNoIHBvaW50ZXIgdG8gTlVMTCAqLwotCSAg ICB6bmV4dChmaWxidWYpOwkJLyogR2V0IG5leHQgZmlsZW5hbWUgKi8KLQkgICAgaWYgKCFmaWxi dWZbMF0pCQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCi0JICAgICAgYnJlYWs7Ci0jaWZkZWYgQ09N TUVOVAotCSAgICBpdHNhZGlyID0gaXNkaXIoZmlsYnVmKTsJLyogSXMgaXQgYSBkaXJlY3Rvcnk/ ICovCi0JICAgIGlmIChjbWRpcmZsZyAmJiAhaXRzYWRpcikJLyogTm8sIGxpc3RpbmcgZGlyZWN0 b3JpZXMgb25seT8gKi8KLQkgICAgICBjb250aW51ZTsJCQkvKiBTbyBza2lwIHRoaXMgb25lLiAq LwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgaWYgKGZzKSBpZiAoZmlsZXNlbGVjdChmaWxi dWYsCi0JCQkgICBzYSxzYixzbmEsc25iLAotCQkJICAgbWluc2l6LG1heHNpeixuYnUsbnhsaXN0 LHhsaXN0KSA8IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0JICAgIH0KLSNp ZmRlZiBWTVMKLQkgICAgY2tzdHJuY3B5KGZpbGJ1Zix6cmVsbmFtZShmaWxidWYsY2RwKSxDS01B WFBBVEgpOwotI2VuZGlmIC8qIFZNUyAqLwotCSAgICBqID0gc3RybGVuKGZpbGJ1Zik7Ci0jaWZu ZGVmIFZNUwotCSAgICBpZiAoaXRzYWRpciAmJiBqIDwgQ0tNQVhQQVRIIC0gMSAmJiBqID4gMCkg ewotCQlpZiAoZmlsYnVmW2otMV0gIT0gZGlyc2VwKSB7Ci0JCSAgICBmaWxidWZbaisrXSA9IGRp cnNlcDsKLQkJICAgIGZpbGJ1ZltqXSA9IE5VTDsKLQkJfQotCSAgICB9Ci0jZW5kaWYgLyogVk1T ICovCi0JICAgIGlmICghKHMyW24yXSA9IG1hbGxvYyhqKzEpKSkgewotCQlwcmludGYoIj9NZW1v cnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKLQkJcmMgPSAtOTsKLQkJZ290byB4ZmlsaGVscDsK LQkgICAgfQotCSAgICBpZiAoaiA8PSBDS01BWFBBVEgpIHsKLQkJc3RyY3B5KHMyW24yXSxmaWxi dWYpOwotCQluMisrOwotCSAgICB9IGVsc2UgewotCQlwcmludGYoIj9OYW1lIHRvbyBsb25nIC0g JXNcbiIsIGZpbGJ1Zik7Ci0JCXJjID0gLTk7Ci0JCWdvdG8geGZpbGhlbHA7Ci0JICAgIH0KLQkg ICAgaWYgKGogPiB3aWR0aCkJCS8qIEdldCB3aWR0aCBvZiB3aWRlc3Qgb25lICovCi0JICAgICAg d2lkdGggPSBqOwotCX0KLQluID0gbjI7CQkJCS8qIEhvdyBtYW55IHdlIGFjdHVhbGx5IGdvdCAq LwotICAgIH0KLSAgICBzaF9zb3J0KHMyLE5VTEwsbiwwLDAsZmlsZWNhc2UpOwkvKiBBbHBoYWJl dGl6ZSB0aGUgbGlzdCAqLwotCi0gICAgcmMgPSAxOwotICAgIGlmIChzMiAmJiAoYiA9IChjaGFy ICopIG1hbGxvYyhjbWRfY29scyArIDEpKSkgeyAvKiBNYWtlIGEgbGluZSBidWZmZXIgKi8KLQlj aGFyICogYng7Ci0JYnggPSBiICsgY21kX2NvbHM7Ci0Jd2lkdGggKz0gKGludClzdHJsZW4ocHJl KSArIChpbnQpc3RybGVuKHBvc3QpICsgMjsKLQljb2xzID0gY21kX2NvbHMgLyB3aWR0aDsJLyog SG93IG1hbnkgY29sdW1ucz8gKi8KLQlpZiAoY29scyA8IDEpIGNvbHMgPSAxOwotCWhlaWdodCA9 IG4gLyBjb2xzOwkJLyogSG93IGxvbmcgaXMgZWFjaCBjb2x1bW4/ICovCi0JaWYgKG4gJSBjb2xz KSBoZWlnaHQrKzsJCS8qIEFkZCBvbmUgZm9yIHJlbWFpbmRlciwgaWYgYW55ICovCi0KLQlmb3Ig KGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsJICAgIC8qIExvb3AgZm9yIGVhY2ggcm93ICovCi0J ICAgIGZvciAoaiA9IDA7IGogPCBjbWRfY29sczsgaisrKSAgLyogRmlyc3QgZmlsbCByb3cgd2l0 aCBibGFua3MgKi8KLQkgICAgICBiW2pdID0gU1A7Ci0JICAgIGZvciAoaiA9IDA7IGogPCBjb2xz OyBqKyspIHsgICAgLyogTG9vcCBmb3IgZWFjaCBjb2x1bW4gaW4gcm93ICovCi0JCWsgPSBpICsg KGogKiBoZWlnaHQpOyAgICAgICAvKiBJbmRleCBvZiBuZXh0IGZpbGVuYW1lICovCi0JCWlmIChr IDwgbikgewkJICAgIC8qIEluIHJhbmdlPyAqLwotCQkgICAgcGEgPSBwcmU7Ci0JCSAgICBweCA9 IHBvc3Q7Ci0JCSAgICBwID0gczJba107CQkgICAgICAgICAgICAgICAvKiBQb2ludCB0byBmaWxl bmFtZSAqLwotCQkgICAgcSA9IGIgKyAoaiAqIHdpZHRoKSArIDE7ICAgICAgICAgICAgIC8qIGFu ZCBkZXN0aW5hdGlvbiAqLwotCQkgICAgd2hpbGUgKChxIDwgYngpICYmICgqcSsrID0gKnBhKysp KSA7IC8qIENvcHkgcHJlZml4ICovCi0JCSAgICBxLS07CQkgICAgICAgICAgICAgICAgIC8qIEJh Y2sgdXAgb3ZlciBOVUwgKi8KLQkJICAgIHdoaWxlICgocSA8IGJ4KSAmJiAoKnErKyA9ICpwKysp KSA7CSAvKiBDb3B5IGZpbGVuYW1lICovCi0JCSAgICBxLS07CQkgICAgICAgICAgICAgICAgIC8q IEJhY2sgdXAgb3ZlciBOVUwgKi8KLQkJICAgIHdoaWxlICgocSA8IGJ4KSAmJiAoKnErKyA9ICpw eCsrKSkgOyAvKiBDb3B5IHN1ZmZpeCAqLwotCQkgICAgaWYgKGogPCBjb2xzIC0gMSkgewotCQkJ cS0tOwotCQkJKnEgPSBTUDsJLyogUmVwbGFjZSB0aGUgc3BhY2UgKi8KLQkJICAgIH0KLQkJfQot CSAgICB9Ci0JICAgIHAgPSBiICsgY21kX2NvbHMgLSAxOwkvKiBMYXN0IGNoYXIgaW4gbGluZSAq LwotCSAgICB3aGlsZSAoKnAtLSA9PSBTUCkgOwkvKiBUcmltICovCi0JICAgICoocCsyKSA9IE5V TDsKLQkgICAgcHJpbnRmKCIlc1xuIixiKTsJCS8qIFByaW50IHRoZSBsaW5lICovCi0JICAgIGlm ICgrK2xjID4gKGNtZF9yb3dzIC0gMikpIHsgLyogU2NyZWVuIGZ1bGw/ICovCi0JCWlmICghYXNr bW9yZSgpKSB7CS8qIERvIG1vcmUtcHJvbXB0aW5nLi4uICovCi0JCSAgICByYyA9IDA7Ci0JCSAg ICBnb3RvIHhmaWxoZWxwOwotCQl9IGVsc2UKLQkJICBsYyA9IDA7Ci0JICAgIH0KLQl9Ci0JcHJp bnRmKCJcbiIpOwkJCS8qIEJsYW5rIGxpbmUgYXQgZW5kIG9mIHJlcG9ydCAqLwotCWdvdG8geGZp bGhlbHA7Ci0gICAgfSBlbHNlIHsJCQkJLyogTWFsbG9jIGZhaWx1cmUsIG5vIGNvbHVtbnMgKi8K LQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JICAgIHpuZXh0KGZpbGJ1Zik7Ci0JICAgIGlm ICghZmlsYnVmWzBdKSBicmVhazsKLQkgICAgcHJpbnRmKCIlcyVzJXNcbiIscHJlLGZpbGJ1Zixw b3N0KTsKLQkgICAgaWYgKCsrbGMgPiAoY21kX3Jvd3MgLSAyKSkgeyAvKiBTY3JlZW4gZnVsbD8g Ki8KLQkJaWYgKCFhc2ttb3JlKCkpIHsJIC8qIERvIG1vcmUtcHJvbXB0aW5nLi4uICovCi0JCSAg ICByYyA9IDA7Ci0JCSAgICBnb3RvIHhmaWxoZWxwOwotCQl9IGVsc2UgbGMgPSAwOwotCSAgICB9 Ci0JfQoteGZpbGhlbHA6Ci0JaWYgKGIpIGZyZWUoYik7Ci0JZm9yIChpID0gMDsgaSA8IG4yOyBp KyspCi0JICBpZiAoczJbaV0pIGZyZWUoczJbaV0pOwotCWlmIChzMikgZnJlZSgoY2hhciAqKXMy KTsKLQlyZXR1cm4ocmMpOwotICAgIH0KLX0KLQotLyoKLSAgU2ltcGxlciBmcm9udCBlbmQgZm9y IHhmaWxoZWxwKCkgd2l0aCBzaG9ydGVyIGFyZyBsaXN0IHdoZW4gbm8KLSAgZmlsZSBzZWxlY3Rp b24gaXMgbmVlZGVkLgotKi8KLWludAotZmlsaGVscChuLHByZSxwb3N0LG9mZixjbWRpcmZsZykg aW50IG4sIG9mZjsgY2hhciAqcHJlLCAqcG9zdDsgaW50IGNtZGlyZmxnOyB7Ci0gICAgcmV0dXJu KHhmaWxoZWxwKG4scHJlLHBvc3Qsb2ZmLGNtZGlyZmxnLAotCQkgICAgMCxOVUxMLE5VTEwsTlVM TCxOVUxMLAotCQkgICAgKENLX09GRl9UKTAsKENLX09GRl9UKTAsMCwwLChjaGFyICoqKU5VTEwp KTsKLX0KLQotLyogIEMgTSBTIEUgVCBVIFAgIC0tICBTZXQgdXAgY29tbWFuZCBidWZmZXJzICAq LwotCi0jaWZkZWYgRENNREJVRgotaW50Ci1jbXNldHVwKCkgewotICAgIGlmICghKGNtZGJ1ZiA9 IG1hbGxvYyhDTURCTCArIDQpKSkgcmV0dXJuKC0xKTsKLSAgICBpZiAoIShzYXZidWYgPSBtYWxs b2MoQ01EQkwgKyA0KSkpIHJldHVybigtMSk7Ci0gICAgc2F2YnVmWzBdID0gJ1wwJzsKLSAgICBp ZiAoIShwcmV2Y21kID0gbWFsbG9jKENNREJMICsgNCkpKSByZXR1cm4oLTEpOwotICAgIHByZXZj bWRbMF0gPSAnXDAnOwotICAgIGlmICghKGF0bWJ1ZiA9IG1hbGxvYyhBVE1CTCArIDQpKSkgcmV0 dXJuKC0xKTsKLSAgICBpZiAoIShhdHhidWYgPSBtYWxsb2MoQ01EQkwgKyA0KSkpIHJldHVybigt MSk7Ci0gICAgaWYgKCEoYXR5YnVmID0gbWFsbG9jKEFUTUJMICsgNCkpKSByZXR1cm4oLTEpOwot ICAgIGlmICghKGZpbGJ1ZiA9IG1hbGxvYyhBVE1CTCArIDQpKSkgcmV0dXJuKC0xKTsKLSAgICBp ZiAoIShjbXByb20gPSBtYWxsb2MoUFJPTVBUTCArIDQpKSkgcmV0dXJuKC0xKTsKLSAgICBpZiAo IShjbXByeHggPSBtYWxsb2MoUFJPTVBUTCArIDQpKSkgcmV0dXJuKC0xKTsKLSNpZmRlZiBDS19S RUNBTEwKLSAgICBjbXJpbmkoY21fcmVjYWxsKTsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSAg ICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogRENNREJVRiAqLwotCi0vKiAgQyBNIFMgRSBUIFAg IC0tICBTZXQgdGhlIHByb2dyYW0gcHJvbXB0LiAgKi8KLQotVk9JRAotY21zZXRwKHMpIGNoYXIg KnM7IHsKLSAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICBja3N0cm5jcHkoY21wcnh4LHMsUFJPTVBU TCk7Ci0gICAgcHNldGYgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyB0aGF0 IHByb21wdCBoYXMgYmVlbiBzZXQuICovCi19Ci0KLS8qICBDIE0gUyBBIFYgUCAgLS0gIFNhdmUg YSBjb3B5IG9mIHRoZSBjdXJyZW50IHByb21wdC4gICovCi0KLVZPSUQKLSNpZmRlZiBDS19BTlNJ QwotY21zYXZwKGNoYXIgc1tdLCBpbnQgbikKLSNlbHNlCi1jbXNhdnAocyxuKSBjaGFyIHNbXTsg aW50IG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGNtc2F2cCAqLyB7Ci0gICAgaWYgKHBz ZXRmKQkJCQkvKiBCdXQgbm90IGlmIG5vIHByb21wdCBpcyBzZXQuICovCi0gICAgICBja3N0cm5j cHkocyxjbXByeHgsbik7Ci19Ci0KLWNoYXIgKgotY21nZXRwKCkgewotICAgIHJldHVybihjbXBy eHgpOwotfQotCi1pbnQKLWNtZ2JyaygpIHsKLSAgICByZXR1cm4oYnJrY2hhcik7Ci19Ci0KLWlu dAotY21na3dmbGdzKCkgewotICAgIHJldHVybihjbWt3Zmxncyk7Ci19Ci0KLS8qICBQIFIgTyBN IFAgVCAgLS0gIElzc3VlIHRoZSBwcm9ncmFtIHByb21wdC4gICovCi0KLVZPSUQKLXByb21wdChm KSB4eF9zdHJwIGY7IHsKLSAgICBjaGFyICpzeCwgKnN5OyBpbnQgbjsKLSNpZmRlZiBDS19TU0wK LSAgICBleHRlcm4gaW50IHNzbF9hY3RpdmVfZmxhZywgdGxzX2FjdGl2ZV9mbGFnOwotI2VuZGlm IC8qIENLX1NTTCAqLwotI2lmZGVmIE9TMgotICAgIGV4dGVybiBpbnQgZGlzcGxheV9kZW1vOwot Ci0gICAgLyogSWYgdGhlcmUgaXMgYSBkZW1vIHNjcmVlbiB0byBiZSBkaXNwbGF5ZWQsIGRpc3Bs YXkgaXQgKi8KLSAgICBpZiAoZGlzcGxheV9kZW1vICYmIHhjbWRzcmMgPT0gMCkgewotICAgICAg ICBkZW1vc2NybihWQ01EKTsKLSAgICAgICAgZGlzcGxheV9kZW1vID0gMDsKLSAgICB9Ci0jZW5k aWYgLyogT1MyICovCi0KLSAgICBpZiAocHNldGYgPT0gMCkJCQkvKiBJZiBubyBwcm9tcHQgc2V0 LCBzZXQgZGVmYXVsdC4gKi8KLSAgICAgIGNtc2V0cChkZnByb20pOwotCi0gICAgc3ggPSBjbXBy eHg7CQkJLyogVW5ldmFsdWF0ZWQgY29weSAqLwotICAgIGlmIChmKSB7CQkJCS8qIElmIGNvbnZl cnNpb24gZnVuY3Rpb24gZ2l2ZW4gKi8KLQlzeSA9IGNtcHJvbTsJCQkvKiBFdmFsdWF0ZSBpdCAq LwotI2lmZGVmIENPTU1FTlQKLQlkZWJ1ZyhGMTAxLCJwcm9tcHQgc3giLCIiLHN4KTsKLQlkZWJ1 ZyhGMTAxLCJwcm9tcHQgc3kiLCIiLHN5KTsKLSNlbmRpZgkvKiBDT01NRU5UICovCi0JbiA9IFBS T01QVEw7Ci0JaWYgKCgqZikoc3gsJnN5LCZuKSA8IDApCS8qIElmIGV2YWx1YXRpb24gZmFpbGVk ICovCi0JICBzeCA9IGNtcHJ4eDsJCQkvKiByZXZlcnQgdG8gdW5ldmFsdWF0ZWQgY29weSAqLwot CWVsc2UgaWYgKCEqY21wcm9tKQkJLyogZGl0dG8gaWYgaXQgY2FtZSB1cCBlbXB0eSAqLwotCSAg c3ggPSBjbXByeHg7Ci0JZWxzZQotCSAgc3ggPSBjbXByb207Ci0gICAgfSBlbHNlCi0gICAgICBj a3N0cm5jcHkoY21wcm9tLHN4LFBST01QVEwpOwotICAgIGNtcHJvbVtQUk9NUFRMLTFdID0gTlVM OwotICAgIGlmICghKnN4KQkJCQkvKiBEb24ndCBwcmludCBpZiBlbXB0eSAqLwotICAgICAgcmV0 dXJuOwotCi0jaWZkZWYgT1NLCi0gICAgZnB1dHMoc3gsIHN0ZG91dCk7Ci0jZWxzZQotI2lmZGVm IE1BQwotICAgIHByaW50ZigiJXMiLCBzeCk7Ci0jZWxzZQotI2lmZGVmIElLU0QKLSAgICBpZiAo aW5zZXJ2ZXIpIHsJCQkvKiBQcmludCB0aGUgcHJvbXB0LiAqLwotICAgICAgICB0dG9jKENSKTsJ CQkvKiBJZiBURUxORVQgU2VydmVyICovCi0gICAgICAgIHR0b2MoTlVMKTsJCQkvKiBtdXN0IGZv bGxvVyBDUiBieSBOVUwgKi8KLSAgICAgICAgcHJpbnRmKCIlcyIsc3gpOwotICAgIH0gZWxzZQot I2VuZGlmIC8qIElLU0QgKi8KLSAgICAgIHByaW50ZigiXHIlcyIsc3gpOwotI2lmZGVmIENLX1NT TAotICAgIGlmICghKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpKQotI2VuZGlm IC8qIENLX1NTTCAqLwotICAgICAgZmZsdXNoKHN0ZG91dCk7CQkJLyogTm93ISAqLwotI2VuZGlm IC8qIE1BQyAqLwotI2VuZGlmIC8qIE9TSyAqLwotfQotCi0jaWZuZGVmIE5PU1BMCi1WT0lECi1w dXNoY21kKHMpIGNoYXIgKiBzOyB7CQkJLyogRm9yIHVzZSB3aXRoIElGIGNvbW1hbmQuICovCi0g ICAgaWYgKCFzKSBzID0gbnA7Ci0gICAgY2tzdHJuY3B5KHNhdmJ1ZixzLENNREJMKTsJCS8qIFNh dmUgdGhlIGRlcGVuZGVudCBjbGF1c2UsICAqLwotICAgIGNtcmVzKCk7CQkJCS8qIGFuZCBjbGVh ciB0aGUgY29tbWFuZCBidWZmZXIuICovCi0gICAgZGVidWcoRjExMCwgInB1c2hjbWQgc2F2YnVm Iiwgc2F2YnVmLCAwKTsKLX0KLQotVk9JRAotcHVzaHFjbWQocykgY2hhciAqIHM7IHsJCQkvKiBG b3IgdXNlIHdpdGggRUxTRSBjb21tYW5kLiAqLwotICAgIGNoYXIgYywgKiBwID0gc2F2YnVmOwkJ LyogRGVzdCAqLwotICAgIGlmICghcykgcyA9IG5wOwkJCS8qIFNvdXJjZSAqLwotICAgIHdoaWxl ICgqcykgewkJCS8qIEdldCBmaXJzdCBub253aGl0ZXNwYWNlIGNoYXIgKi8KLQlpZiAoKnMgIT0g U1ApCi0JICBicmVhazsKLQllbHNlCi0JICBzKys7Ci0gICAgfQotICAgIGlmICgqcyAhPSAneycp IHsJCQkvKiBJZiBpdCdzIG5vdCAieyIgKi8KLQlwdXNoY21kKHMpOwkJCS8qIGRvIHJlZ3VsYXIg cHVzaGNtZCAqLwotCXJldHVybjsKLSAgICB9Ci0gICAgd2hpbGUgKChjID0gKnMrKykpIHsJCS8q IE90aGVyd2lzZSBpbnNlcnQgcXVvdGVzICovCi0JaWYgKGMgPT0gQ01EUSkKLQkgICpwKysgPSBD TURROwotCSpwKysgPSBjOwotICAgIH0KLSAgICBjbXJlcygpOwkJCQkvKiBhbmQgY2xlYXIgdGhl IGNvbW1hbmQgYnVmZmVyLiAqLwotICAgIGRlYnVnKEYxMTAsICJwdXNocWNtZCBzYXZidWYiLCBz YXZidWYsIDApOwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBu byBsb25nZXIgdXNlZC4uLiAqLwotVk9JRAotcG9wY21kKCkgewotICAgIGNrc3RybmNweShjbWRi dWYsc2F2YnVmLENNREJMKTsJLyogUHV0IGJhY2sgdGhlIHNhdmVkIG1hdGVyaWFsICovCi0gICAg KnNhdmJ1ZiA9ICdcMCc7CQkJLyogYW5kIGNsZWFyIHRoZSBzYXZlIGJ1ZmZlciAqLwotICAgIGNt cmVzKCk7Ci19Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKiAgQyBNIFIgRSBTICAtLSAgUmVz ZXQgcG9pbnRlcnMgdG8gYmVnaW5uaW5nIG9mIGNvbW1hbmQgYnVmZmVyLiAgKi8KLQotVk9JRAot Y21yZXMoKSB7Ci0gICAgaW53b3JkID0gMDsJCQkJLyogV2UncmUgbm90IGluIGEgd29yZCAqLwot ICAgIGNjID0gMDsJCQkJLyogQ2hhcmFjdGVyIGNvdW50IGlzIHplcm8gKi8KLQotLyogSW5pdGlh bGl6ZSBwb2ludGVycyAqLwotCi0gICAgcHAgPSBjbWRidWY7CQkJLyogQmVnaW5uaW5nIG9mIGN1 cnJlbnQgZmllbGQgKi8KLSAgICBicCA9IGNtZGJ1ZjsJCQkvKiBDdXJyZW50IHBvc2l0aW9uIHdp dGhpbiBidWZmZXIgKi8KLSAgICBucCA9IGNtZGJ1ZjsJCQkvKiBXaGVyZSB0byBzdGFydCBuZXh0 IGZpZWxkICovCi0KLSAgICBjbWZsZGZsZ3MgPSAwOwotICAgIGNtZmxncyA9IC01OyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFBhcnNlIG5vdCB5ZXQgc3RhcnRlZC4gKi8KLSAgICB1bmd3ID0g MDsJCQkJLyogRG9uJ3QgbmVlZCB0byB1bmdldCBhIHdvcmQuICovCi19Ci0KLS8qICBDIE0gSSBO IEkgIC0tICBDbGVhciB0aGUgY29tbWFuZCBhbmQgYXRvbSBidWZmZXJzLCByZXNldCBwb2ludGVy cy4gICovCi0KLS8qCi1UaGUgYXJndW1lbnQgc3BlY2lmaWVzIHdobyBpcyB0byBlY2hvIHRoZSB1 c2VyJ3MgdHlwZWluIC0tCi0gIDEgbWVhbnMgdGhlIGNtZCBwYWNrYWdlIGVjaG9lcwotICAwIHNv bWVib2R5IGVsc2UgKHN5c3RlbSwgZnJvbnQgZW5kLCB0ZXJtaW5hbCkgZWNob2VzCi0qLwotVk9J RAotY21pbmkoZCkgaW50IGQ7IHsKLSNpZmRlZiBEQ01EQlVGCi0gICAgaWYgKCFhdG1idWYpCi0g ICAgICBpZiAoY21zZXR1cCgpPDApCi0JZmF0YWwoImZhdGFsIGVycm9yOiB1bmFibGUgdG8gYWxs b2NhdGUgY29tbWFuZCBidWZmZXJzIik7Ci0jZW5kaWYgLyogRENNREJVRiAqLwotI2lmZGVmIFVT RV9NRU1DUFkKLSAgICBtZW1zZXQoY21kYnVmLDAsQ01EQkwpOwotICAgIG1lbXNldChhdG1idWYs MCxBVE1CTCk7Ci0jZWxzZQotICAgIGZvciAoYnAgPSBjbWRidWY7IGJwIDwgY21kYnVmK0NNREJM OyBicCsrKSAqYnAgPSBOVUw7Ci0gICAgZm9yIChicCA9IGF0bWJ1ZjsgYnAgPCBhdG1idWYrQVRN Qkw7IGJwKyspICpicCA9IE5VTDsKLSNlbmRpZiAvKiBVU0VfTUVNQ1BZICovCi0KLSAgICAqYXRt YnVmID0gKnNhdmJ1ZiA9ICphdHhidWYgPSAqYXR5YnVmID0gKmZpbGJ1ZiA9IE5VTDsKLSAgICBi bG9ja2x2bCA9IDA7CQkJLyogQmxvY2sgbGV2ZWwgaXMgMCAqLwotICAgIGxpbmViZWdpbiA9IDE7 CQkJLyogQXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgKi8KLSAgICBkcHggPSBkOwkJCQkvKiBH bG9iYWwgY29weSBvZiB0aGUgZWNobyBmbGFnICovCi0gICAgZGVidWcoRjEwMSwiY21pbmkgZHB4 IiwiIixkcHgpOwotICAgIGNyZmxhZyA9IDA7CQkJCS8qIFJlc2V0IGZsYWdzICovCi0gICAgcW1m bGFnID0gMDsKLSAgICBlc2ZsYWcgPSAwOwotI2lmZGVmIENLX1JFQ0FMTAotICAgIG5vX3JlY2Fs bCA9IDA7CQkJLyogU3RhcnQgb3V0IHdpdGggcmVjYWxsIGVuYWJsZWQgKi8KLSNlbmRpZiAvKiBD S19SRUNBTEwgKi8KLSAgICBjbXJlcygpOwkJCQkvKiBTZXRzIGJwIGV0YyAqLwotICAgIG5ld2Nt ZCA9IDE7CQkJCS8qIFNlZSBhZGRjbWQoKSAqLwotfQotCi0jaWZuZGVmIE5PU1BMCi0vKgotICBU aGUgZm9sbG93aW5nIGJpdHMgYXJlIHRvIGFsbG93IHRoZSBjb21tYW5kIHBhY2thZ2UgdG8gY2Fs bCBpdHNlbGYKLSAgaW4gdGhlIG1pZGRsZSBvZiBhIHBhcnNlLiAgVG8gZG8gdGhpcywgYmVnaW4g YnkgY2FsbGluZyBjbXB1c2gsIGFuZAotICBlbmQgYnkgY2FsbGluZyBjbXBvcC4gIEFzIHlvdSBj YW4gc2VlLCB0aGlzIGlzIHJhdGhlciBleHBlbnNpdmUuCi0qLwotI2lmZGVmIERDTURCVUYKLXN0 cnVjdCBjbXAgewotICAgIGludCBpWzVdOwkJCQkvKiBzdGFjayBmb3IgaW50ZWdlcnMgKi8KLSAg ICBjaGFyICpjWzNdOwkJCQkvKiBzdGFjayBmb3IgcG9pbnRlcnMgKi8KLSAgICBjaGFyICpiWzhd OwkJCQkvKiBzdGFjayBmb3IgYnVmZmVyIGNvbnRlbnRzICovCi19Owotc3RydWN0IGNtcCAqY21w ID0gMDsKLSNlbHNlCi1pbnQgY21wX2lbQ01EREVQKzFdWzVdOwkJCS8qIFN0YWNrIGZvciBpbnRl Z2VycyAqLwotY2hhciAqY21wX2NbQ01EREVQKzFdWzVdOwkJLyogZm9yIG1pc2MgcG9pbnRlcnMg Ki8KLWNoYXIgKmNtcF9iW0NNRERFUCsxXVs3XTsJCS8qIGZvciBidWZmZXIgY29udGVudHMgcG9p bnRlcnMgKi8KLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLWludCBjbWRkZXAgPSAtMTsJCQkvKiBD dXJyZW50IHN0YWNrIGRlcHRoICovCi0KLWludAotY21wdXNoKCkgewkJCQkvKiBTYXZlIHRoZSBj b21tYW5kIGVudmlyb25tZW50ICovCi0gICAgY2hhciAqY3A7CQkJCS8qIENoYXJhY3RlciBwb2lu dGVyICovCi0KLSAgICBpZiAoY21kZGVwID49IENNRERFUCkJCS8qIEVudGVyIGEgbmV3IGNvbW1h bmQgZGVwdGggKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAgY21kZGVwKys7Ci0gICAgZGVidWco RjEwMSwiJmNtcHVzaCB0byBkZXB0aCIsIiIsY21kZGVwKTsKLQotI2lmZGVmIERDTURCVUYKLSAg ICAvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNtcCBpZiBub3QgYWxyZWFkeSBkb25lICovCi0gICAg aWYgKCFjbXAgJiYgIShjbXAgPSAoc3RydWN0IGNtcCAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBj bXApKihDTURERVArMSkpKSkKLSAgICAgIGZhdGFsKCJjbXB1c2g6IG5vIG1lbW9yeSBmb3IgY21w Iik7Ci0gICAgY21wW2NtZGRlcF0uaVswXSA9IGNtZmxnczsJCS8qIEZpcnN0IGRvIHRoZSBnbG9i YWwgaW50cyAqLwotICAgIGNtcFtjbWRkZXBdLmlbMV0gPSBjbWZzYXY7Ci0gICAgY21wW2NtZGRl cF0uaVsyXSA9IGF0eG47Ci0gICAgY21wW2NtZGRlcF0uaVszXSA9IHVuZ3c7Ci0KLSAgICBjbXBb Y21kZGVwXS5jWzBdID0gYnA7CQkvKiBUaGVuIHRoZSBnbG9iYWwgcG9pbnRlcnMgKi8KLSAgICBj bXBbY21kZGVwXS5jWzFdID0gcHA7Ci0gICAgY21wW2NtZGRlcF0uY1syXSA9IG5wOwotI2Vsc2UK LSAgICBjbXBfaVtjbWRkZXBdWzBdID0gY21mbGdzOwkJLyogRmlyc3QgZG8gdGhlIGdsb2JhbCBp bnRzICovCi0gICAgY21wX2lbY21kZGVwXVsxXSA9IGNtZnNhdjsKLSAgICBjbXBfaVtjbWRkZXBd WzJdID0gYXR4bjsKLSAgICBjbXBfaVtjbWRkZXBdWzNdID0gdW5ndzsKLQotICAgIGNtcF9jW2Nt ZGRlcF1bMF0gPSBicDsJCS8qIFRoZW4gdGhlIGdsb2JhbCBwb2ludGVycyAqLwotICAgIGNtcF9j W2NtZGRlcF1bMV0gPSBwcDsKLSAgICBjbXBfY1tjbWRkZXBdWzJdID0gbnA7Ci0jZW5kaWYgLyog RENNREJVRiAqLwotCi0gICAgLyogTm93IHRoZSBidWZmZXJzIHRoZW1zZWx2ZXMuICBBIGxvdCBv ZiByZXBpdGl0aW91cyBjb2RlLi4uICovCi0KLSNpZmRlZiBEQ01EQlVGCi0gICAgY3AgPSBtYWxs b2MoKGludClzdHJsZW4oY21kYnVmKSsxKTsJLyogMDogQ29tbWFuZCBidWZmZXIgKi8KLSAgICBp ZiAoY3ApIHN0cmNweShjcCxjbWRidWYpOwotICAgIGNtcFtjbWRkZXBdLmJbMF0gPSBjcDsKLSAg ICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKLQotICAgIGNwID0gbWFsbG9jKChpbnQpc3Ry bGVuKHNhdmJ1ZikrMSk7CS8qIDE6IFNhdmUgYnVmZmVyICovCi0gICAgaWYgKGNwKSBzdHJjcHko Y3Asc2F2YnVmKTsKLSAgICBjbXBbY21kZGVwXS5iWzFdID0gY3A7Ci0gICAgaWYgKGNwID09IE5V TEwpIHJldHVybigtMSk7Ci0KLSAgICBjbXBbY21kZGVwXS5iWzJdID0gTlVMTDsKLQotICAgIGNw ID0gbWFsbG9jKChpbnQpc3RybGVuKGF0bWJ1ZikrMSk7CS8qIDM6IEF0b20gYnVmZmVyICovCi0g ICAgaWYgKGNwKSBzdHJjcHkoY3AsYXRtYnVmKTsKLSAgICBjbXBbY21kZGVwXS5iWzNdID0gY3A7 Ci0gICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7Ci0KLSAgICBjcCA9IG1hbGxvYygoaW50 KXN0cmxlbihhdHhidWYpKzEpOwkvKiA0OiBFeHBhbnNpb24gYnVmZmVyICovCi0gICAgaWYgKGNw KSBzdHJjcHkoY3AsYXR4YnVmKTsKLSAgICBjbXBbY21kZGVwXS5iWzRdID0gY3A7Ci0gICAgaWYg KGNwID09IE5VTEwpIHJldHVybigtMSk7Ci0KLSAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihh dHlidWYpKzEpOwkvKiA1OiBBdG9tIGJ1ZmZlciBjb3B5ICovCi0gICAgaWYgKGNwKSBzdHJjcHko Y3AsYXR5YnVmKTsKLSAgICBjbXBbY21kZGVwXS5iWzVdID0gY3A7Ci0gICAgaWYgKGNwID09IE5V TEwpIHJldHVybigtMSk7Ci0KLSAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihmaWxidWYpKzEp OwkvKiA2OiBGaWxlIG5hbWUgYnVmZmVyICovCi0gICAgaWYgKGNwKSBzdHJjcHkoY3AsZmlsYnVm KTsKLSAgICBjbXBbY21kZGVwXS5iWzZdID0gY3A7Ci0gICAgaWYgKGNwID09IE5VTEwpIHJldHVy bigtMSk7Ci0jZWxzZQotICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKGNtZGJ1ZikrMSk7CS8q IDA6IENvbW1hbmQgYnVmZmVyICovCi0gICAgaWYgKGNwKSBzdHJjcHkoY3AsY21kYnVmKTsKLSAg ICBjbXBfYltjbWRkZXBdWzBdID0gY3A7Ci0gICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7 Ci0KLSAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihzYXZidWYpKzEpOwkvKiAxOiBTYXZlIGJ1 ZmZlciAqLwotICAgIGlmIChjcCkgc3RyY3B5KGNwLHNhdmJ1Zik7Ci0gICAgY21wX2JbY21kZGVw XVsxXSA9IGNwOwotICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOwotCi0gICAgY21wX2Jb Y21kZGVwXVsyXSA9IE5VTEw7Ci0KLSAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihhdG1idWYp KzEpOwkvKiAzOiBBdG9tIGJ1ZmZlciAqLwotICAgIGlmIChjcCkgc3RyY3B5KGNwLGF0bWJ1Zik7 Ci0gICAgY21wX2JbY21kZGVwXVszXSA9IGNwOwotICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4o LTEpOwotCi0gICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oYXR4YnVmKSsxKTsJLyogNDogRXhw YW5zaW9uIGJ1ZmZlciAqLwotICAgIGlmIChjcCkgc3RyY3B5KGNwLGF0eGJ1Zik7Ci0gICAgY21w X2JbY21kZGVwXVs0XSA9IGNwOwotICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOwotCi0g ICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oYXR5YnVmKSsxKTsJLyogNTogQXRvbSBidWZmZXIg Y29weSAqLwotICAgIGlmIChjcCkgc3RyY3B5KGNwLGF0eWJ1Zik7Ci0gICAgY21wX2JbY21kZGVw XVs1XSA9IGNwOwotICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOwotCi0gICAgY3AgPSBt YWxsb2MoKGludClzdHJsZW4oZmlsYnVmKSsxKTsJLyogNjogRmlsZSBuYW1lIGJ1ZmZlciAqLwot ICAgIGlmIChjcCkgc3RyY3B5KGNwLGZpbGJ1Zik7Ci0gICAgY21wX2JbY21kZGVwXVs2XSA9IGNw OwotICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOwotI2VuZGlmIC8qIERDTURCVUYgKi8K LQotICAgIGNtaW5pKGRweCk7CQkJCS8qIEluaXRpemUgdGhlIGNvbW1hbmQgcGFyc2VyICovCi0g ICAgcmV0dXJuKDApOwotfQotCi1pbnQKLWNtcG9wKCkgewkJCQkvKiBSZXN0b3JlIHRoZSBjb21t YW5kIGVudmlyb25tZW50ICovCi0gICAgaWYgKGNtZGRlcCA8IDApIHsKLQlkZWJ1ZyhGMTAwLCIm Y21wb3AgY2FsbGVkIGZyb20gdG9wIGxldmVsIiwiIiwwKTsKLQlyZXR1cm4oLTEpOwkJCS8qIERv bid0IHBvcCB0b28gbXVjaCEgKi8KLSAgICB9Ci0jaWZkZWYgRENNREJVRgotICAgIGNtZmxncyA9 IGNtcFtjbWRkZXBdLmlbMF07CQkvKiBGaXJzdCBkbyB0aGUgZ2xvYmFsIGludHMgKi8KLSAgICBj bWZzYXYgPSBjbXBbY21kZGVwXS5pWzFdOwotICAgIGF0eG4gPSBjbXBbY21kZGVwXS5pWzJdOwot ICAgIHVuZ3cgPSBjbXBbY21kZGVwXS5pWzNdOwotCi0gICAgYnAgPSBjbXBbY21kZGVwXS5jWzBd OwkJLyogVGhlbiB0aGUgZ2xvYmFsIHBvaW50ZXJzICovCi0gICAgcHAgPSBjbXBbY21kZGVwXS5j WzFdOwotICAgIG5wID0gY21wW2NtZGRlcF0uY1syXTsKLSNlbHNlCi0gICAgY21mbGdzID0gY21w X2lbY21kZGVwXVswXTsJCS8qIEZpcnN0IGRvIHRoZSBnbG9iYWwgaW50cyAqLwotICAgIGNtZnNh diA9IGNtcF9pW2NtZGRlcF1bMV07Ci0gICAgYXR4biA9IGNtcF9pW2NtZGRlcF1bMl07Ci0gICAg dW5ndyA9IGNtcF9pW2NtZGRlcF1bM107Ci0KLSAgICBicCA9IGNtcF9jW2NtZGRlcF1bMF07CQkv KiBUaGVuIHRoZSBnbG9iYWwgcG9pbnRlcnMgKi8KLSAgICBwcCA9IGNtcF9jW2NtZGRlcF1bMV07 Ci0gICAgbnAgPSBjbXBfY1tjbWRkZXBdWzJdOwotI2VuZGlmIC8qIERDTURCVUYgKi8KLQotICAg IC8qIE5vdyB0aGUgYnVmZmVycyB0aGVtc2VsdmVzLiAqLwotICAgIC8qIE5vdGU6IHN0cm5jcHko KSwgbm90IGNrc3RybmNweSgpIC0tIEhlcmUgd2UgV0FOVCB0aGUgTlVMIHBhZGRpbmcuLi4gKi8K LQotI2lmZGVmIERDTURCVUYKLSAgICBpZiAoY21wW2NtZGRlcF0uYlswXSkgewotCi0Jc3RybmNw eShjbWRidWYsY21wW2NtZGRlcF0uYlswXSxDTURCTCk7IC8qIDA6IENvbW1hbmQgYnVmZmVyICov Ci0JZnJlZShjbXBbY21kZGVwXS5iWzBdKTsKLQljbXBbY21kZGVwXS5iWzBdID0gTlVMTDsKLSAg ICB9Ci0gICAgaWYgKGNtcFtjbWRkZXBdLmJbMV0pIHsKLQlzdHJuY3B5KHNhdmJ1ZixjbXBbY21k ZGVwXS5iWzFdLENNREJMKTsgLyogMTogU2F2ZSBidWZmZXIgKi8KLQlmcmVlKGNtcFtjbWRkZXBd LmJbMV0pOwotCWNtcFtjbWRkZXBdLmJbMV0gPSBOVUxMOwotICAgIH0KLSAgICBpZiAoY21wW2Nt ZGRlcF0uYlszXSkgewotCXN0cm5jcHkoYXRtYnVmLGNtcFtjbWRkZXBdLmJbM10sQVRNQkwpOyAv KiAzOiBBdG9taWMgYnVmZmVyISAqLwotCWZyZWUoY21wW2NtZGRlcF0uYlszXSk7Ci0JY21wW2Nt ZGRlcF0uYlszXSA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChjbXBbY21kZGVwXS5iWzRdKSB7Ci0J c3RybmNweShhdHhidWYsY21wW2NtZGRlcF0uYls0XSxBVE1CTCk7IC8qIDQ6IGVYcGFuc2lvbiBi dWZmZXIgKi8KLQlmcmVlKGNtcFtjbWRkZXBdLmJbNF0pOwotCWNtcFtjbWRkZXBdLmJbNF0gPSBO VUxMOwotICAgIH0KLSAgICBpZiAoY21wW2NtZGRlcF0uYls1XSkgewotCXN0cm5jcHkoYXR5YnVm LGNtcFtjbWRkZXBdLmJbNV0sQVRNQkwpOyAvKiA1OiBBdG9tIGJ1ZmZlciBjb3BZICovCi0JZnJl ZShjbXBbY21kZGVwXS5iWzVdKTsKLQljbXBbY21kZGVwXS5iWzVdID0gTlVMTDsKLSAgICB9Ci0g ICAgaWYgKGNtcFtjbWRkZXBdLmJbNl0pIHsKLQlzdHJuY3B5KGZpbGJ1ZixjbXBbY21kZGVwXS5i WzZdLEFUTUJMKTsgLyogNjogRmlsZW5hbWUgYnVmZmVyICovCi0JZnJlZShjbXBbY21kZGVwXS5i WzZdKTsKLQljbXBbY21kZGVwXS5iWzZdID0gTlVMTDsKLSAgICB9Ci0jZWxzZQotICAgIGlmIChj bXBfYltjbWRkZXBdWzBdKSB7Ci0Jc3RybmNweShjbWRidWYsY21wX2JbY21kZGVwXVswXSxDTURC TCk7IC8qIDA6IENvbW1hbmQgYnVmZmVyICovCi0JZnJlZShjbXBfYltjbWRkZXBdWzBdKTsKLQlj bXBfYltjbWRkZXBdWzBdID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGNtcF9iW2NtZGRlcF1bMV0p IHsKLQlzdHJuY3B5KHNhdmJ1ZixjbXBfYltjbWRkZXBdWzFdLENNREJMKTsgLyogMTogU2F2ZSBi dWZmZXIgKi8KLQlmcmVlKGNtcF9iW2NtZGRlcF1bMV0pOwotCWNtcF9iW2NtZGRlcF1bMV0gPSBO VUxMOwotICAgIH0KLSAgICBpZiAoY21wX2JbY21kZGVwXVszXSkgewotCXN0cm5jcHkoYXRtYnVm LGNtcF9iW2NtZGRlcF1bM10sQVRNQkwpOyAvKiAzOiBBdG9taWMgYnVmZmVyISAqLwotCWZyZWUo Y21wX2JbY21kZGVwXVszXSk7Ci0JY21wX2JbY21kZGVwXVszXSA9IE5VTEw7Ci0gICAgfQotICAg IGlmIChjbXBfYltjbWRkZXBdWzRdKSB7Ci0Jc3RybmNweShhdHhidWYsY21wX2JbY21kZGVwXVs0 XSxBVE1CTCk7IC8qIDQ6IGVYcGFuc2lvbiBidWZmZXIgKi8KLQlmcmVlKGNtcF9iW2NtZGRlcF1b NF0pOwotCWNtcF9iW2NtZGRlcF1bNF0gPSBOVUxMOwotICAgIH0KLSAgICBpZiAoY21wX2JbY21k ZGVwXVs1XSkgewotCXN0cm5jcHkoYXR5YnVmLGNtcF9iW2NtZGRlcF1bNV0sQVRNQkwpOyAvKiA1 OiBBdG9tIGJ1ZmZlciBjb3BZICovCi0JZnJlZShjbXBfYltjbWRkZXBdWzVdKTsKLQljbXBfYltj bWRkZXBdWzVdID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGNtcF9iW2NtZGRlcF1bNl0pIHsKLQlz dHJuY3B5KGZpbGJ1ZixjbXBfYltjbWRkZXBdWzZdLEFUTUJMKTsgLyogNjogRmlsZW5hbWUgYnVm ZmVyICovCi0JZnJlZShjbXBfYltjbWRkZXBdWzZdKTsKLQljbXBfYltjbWRkZXBdWzZdID0gTlVM TDsKLSAgICB9Ci0jZW5kaWYgLyogRENNREJVRiAqLwotCi0gICAgY21kZGVwLS07CQkJCS8qIFJp c2UsIHJpc2UgKi8KLSAgICBkZWJ1ZyhGMTAxLCImY21wb3AgdG8gZGVwdGgiLCIiLGNtZGRlcCk7 Ci0gICAgcmV0dXJuKGNtZGRlcCk7Ci19Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIENP TU1FTlQKLVZPSUQJCQkJCS8qIE5vdCB1c2VkICovCi1zdHJpcHEocykgY2hhciAqczsgeyAgICAg ICAgICAgICAgICAgICAgLyogRnVuY3Rpb24gdG8gc3RyaXAgJ1wnIHF1b3RlcyAqLwotICAgIGNo YXIgKnQ7Ci0gICAgd2hpbGUgKCpzKSB7Ci0gICAgICAgIGlmICgqcyA9PSBDTURRKSB7Ci0gICAg ICAgICAgICBmb3IgKHQgPSBzOyAqdCAhPSAnXDAnOyB0KyspICp0ID0gKih0KzEpOwotICAgICAg ICB9Ci0gICAgICAgIHMrKzsKLSAgICB9Ci19Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKiBD b252ZXJ0IHRhYnMgdG8gc3BhY2VzLCBvbmUgZm9yIG9uZSAqLwotVk9JRAotdW50YWIocykgY2hh ciAqczsgewotICAgIHdoaWxlICgqcykgewotCWlmICgqcyA9PSBIVCkgKnMgPSBTUDsKLQlzKys7 Ci0gICAgfQotfQotCi0vKiAgQyBNIE4gVSBNICAtLSAgUGFyc2UgYSBudW1iZXIgaW4gdGhlIGlu ZGljYXRlZCByYWRpeCAgKi8KLQotLyoKLSBUaGUgcmFkaXggaXMgc3BlY2lmaWVkIGluIHRoZSBh cmcgbGlzdC4KLSBQYXJzZXMgdW5xdW90ZWQgbnVtZXJpYyBzdHJpbmdzIGluIHRoZSBnaXZlbiBy YWRpeC4KLSBQYXJzZXMgYmFja3NsYXNoLXF1b3RlZCBudW1iZXJzIGluIHRoZSByYWRpeCBpbmRp Y2F0ZWQgYnkgdGhlIHF1b3RlOgotICAgXG5ubiA9IFxkbm5uID0gZGVjaW1hbCwgXG9ubm4gPSBv Y3RhbCwgXHhubiA9IEhleGFkZWNpbWFsLgotIElmIHRoZXNlIGZhaWwsIHRoZW4gaWYgYSBwcmVw cm9jZXNzaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLCB0aGF0IGlzIGFwcGxpZWQKLSBhbmQgdGhl biBhIHNlY29uZCBhdHRlbXB0IGlzIG1hZGUgdG8gcGFyc2UgYW4gdW5xdW90ZWQgZGVjaW1hbCBz dHJpbmcuCi0gQW5kIGlmIHRoYXQgZmFpbHMsIHRoZSBwcmVwcm9jZXNzZWQgc3RyaW5nIGlzIHBh c3NlZCB0byBhbiBhcml0aG1ldGljCi0gZXhwcmVzc2lvbiBldmFsdWF0b3IuCi0KLSBSZXR1cm5z OgotICAgLTMgaWYgbm8gaW5wdXQgcHJlc2VudCB3aGVuIHJlcXVpcmVkLAotICAgLTIgaWYgdXNl ciB0eXBlZCBhbiBpbGxlZ2FsIG51bWJlciwKLSAgIC0xIGlmIHJlcGFyc2UgbmVlZGVkLAotICAg IDAgb3RoZXJ3aXNlLCB3aXRoIGFyZ3VtZW50IG4gc2V0IHRvIHRoZSBudW1iZXIgdGhhdCB3YXMg cGFyc2VkCi0qLwotLyogVGhpcyBpcyB0aGUgdHJhZGl0aW9uYWwgY21udW0oKSB0aGF0IGdldHMg YW4gaW50ICovCi1pbnQKLWNtbnVtKHhobHAseGRlZixyYWRpeCxuLGYpIGNoYXIgKnhobHAsICp4 ZGVmOyBpbnQgcmFkaXgsICpuOyB4eF9zdHJwIGY7IHsKLSAgICBDS19PRkZfVCB6ID0gKENLX09G Rl9UKTAsIGNoZWNrOwotICAgIGludCB4OwotICAgIHggPSBjbW51bXcoeGhscCx4ZGVmLHJhZGl4 LCZ6LGYpOwotICAgICpuID0gejsKLSAgICBjaGVjayA9ICpuOwotICAgIGlmIChjaGVjayAhPSB6 KSB7Ci0JcHJpbnRmKCI/TWFnbml0dWRlIG9mIHJlc3VsdCB0b28gbGFyZ2UgZm9yIGludGVnZXIg LSAlc1xuIixja2ZzdG9hKHopKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICByZXR1cm4oeCk7 Ci19Ci0KLS8qCi0gIFRoaXMgaXMgdGhlIG5ldyBjbW51bSgpIHRoYXQgZ2V0cyBhICJ3aWRlIiBy ZXN1bHQsIHdoYXRldmVyIENLX09GRl9UCi0gIGlzIGRlZmluZWQgdG8gYmUsIG5vcm1hbGx5IDMy IG9yIDY0IGJpdHMsIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCi0gIGZkYywgMjQgRGVjIDIw MDUuCi0qLwotaW50Ci1jbW51bXcoeGhscCx4ZGVmLHJhZGl4LG4sZikKLSAgICBjaGFyICp4aGxw LCAqeGRlZjsgaW50IHJhZGl4OyBDS19PRkZfVCAqbjsgeHhfc3RycCBmOyB7Ci0gICAgaW50IHg7 IGNoYXIgKnMsICp6cCwgKnpxOwotI2lmZGVmIENPTU1FTlQKLSAgICBjaGFyIGxicmFjZSwgcmJy YWNlOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIGlmICgheGhscCkgeGhscCA9ICIiOwot ICAgIGlmICgheGRlZikgeGRlZiA9ICIiOwotCi0jaWZkZWYgQ09NTUVOVAotICAgIGlmIChjbWZs ZGZsZ3MgJiAxKSB7Ci0JbGJyYWNlID0gJygnOwotCXJicmFjZSA9ICcpJzsKLSAgICB9IGVsc2Ug ewotCWxicmFjZSA9ICd7JzsKLQlyYnJhY2UgPSAnfSc7Ci0gICAgfQotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQotICAgIGlmIChyYWRpeCAhPSAxMCAmJiByYWRpeCAhPSA4KSB7CS8qIEp1c3QgZG8g YmFzZXMgOCBhbmQgMTAgKi8KLSAgICAgICAgcHJpbnRmKCJjbW51bTogaWxsZWdhbCByYWRpeCAt ICVkXG4iLHJhZGl4KTsKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9IC8qIEVhc3kgdG8gYWRk IG90aGVycyBidXQgdGhlcmUgaGFzIG5ldmVyIGJlZW4gYSBuZWVkIGZvciBpdC4gKi8KLSAgICB4 ID0gY21mbGQoeGhscCx4ZGVmLCZzLCh4eF9zdHJwKTApOwotICAgIGRlYnVnKEYxMDEsImNtbnVt OiBjbWZsZCIsIiIseCk7Ci0gICAgaWYgKHggPCAwKSByZXR1cm4oeCk7CQkvKiBQYXJzZSBhIGZp ZWxkICovCi0gICAgenAgPSBhdG1idWY7Ci0vKgotICBFZGl0IDE5MiAtIEFsbG93IGFueSBudW1i ZXIgZmllbGQgdG8gYmUgYnJhY2VkLiAgVGhpcyBsZXRzIHVzIGluY2x1ZGUKLSAgc3BhY2VzIGlu IGV4cHJlc3Npb25zLCBidXQgcGVyaGFwcyBtb3JlIGltcG9ydGFudCBsZXRzIHVzIGhhdmUgdXNl ci1kZWZpbmVkCi0gIGZ1bmN0aW9ucyBpbiBudW1lcmljIGZpZWxkcy4KLSovCi0gICAgenAgPSBi cnN0cmlwKHpwKTsJCQkvKiBTdHJpcCBicmFjZXMgKi8KLSAgICBpZiAoY21mbGRmbGdzICYgMSAm JiAqenAgPT0gJygnKSB7CS8qIFBhcmVucyB0b28uLiAqLwotCXggPSAoaW50KSBzdHJsZW4oYXRt YnVmKTsKLQlpZiAoeCA+IDApIHsKLQkgICAgaWYgKCooYXRtYnVmK3gtMSkgPT0gJyknKSB7Ci0J CSooYXRtYnVmK3gtMSkgPSBOVUw7Ci0JCXpwKys7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIGlm IChjaGtudW0oenApKSB7CQkJLyogQ2hlY2sgZm9yIG51bWJlciAqLwotCWlmIChyYWRpeCA9PSA4 KSB7CQkvKiBJZiBpdCdzIHN1cHBvc2VkIHRvIGJlIG9jdGFsICovCi0JICAgIHpwID0gY2tyYWRp eCh6cCw4LDEwKTsJLyogY29udmVydCB0byBkZWNpbWFsICovCi0JICAgIGlmICghenApIHJldHVy bigtMik7Ci0JICAgIGlmICghc3RyY21wKHpwLCItMSIpKSByZXR1cm4oLTIpOwotCX0KLQllcnJu byA9IDA7CQkJLyogR290IG9uZSwgd2UncmUgZG9uZS4gKi8KLSAgICAgICAgKm4gPSBja2F0b2Zz KHpwKTsKLQlpZiAoZXJybm8pIHsKLQkgICAgcGVycm9yKHpwKTsKLQkgICAgcmV0dXJuKC05KTsK LQl9Ci0JZGVidWcoRjEwMSwiY21udW0gMXN0IGNoa251bSBvayIsIiIsKm4pOwotICAgICAgICBy ZXR1cm4oMCk7Ci0gICAgfSBlbHNlIGlmICgoeCA9IHh4ZXNjKCZ6cCkpID4gLTEpIHsJLyogQ2hl Y2sgZm9yIGJhY2tzbGFzaCBlc2NhcGUgKi8KLQotI2lmbmRlZiBPUzIKLQkqbiA9IHg7Ci0jZWxz ZQotCSpuID0gd2lkZXJlc3VsdDsKLSNlbmRpZiAvKiBPUzIgKi8KLQotCWRlYnVnKEYxMDEsImNt bnVtIHh4ZXNjIG9rIiwiIiwqbik7Ci0JcmV0dXJuKCp6cCA/IC0yIDogMCk7Ci0gICAgfSBlbHNl IGlmIChmKSB7CQkJLyogSWYgY29udmVyc2lvbiBmdW5jdGlvbiBnaXZlbiAqLwotCXpxID0gYXR4 YnVmOwkJCS8qIFRyeSB0aGF0ICovCi0JYXR4biA9IENNREJMOwotCWlmICgoKmYpKHpwLCZ6cSwm YXR4bikgPCAwKQkvKiBDb252ZXJ0ICovCi0JICByZXR1cm4oLTIpOwotCXpwID0gYXR4YnVmOwot ICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJjbW51bSB6cCAxIix6cCwwKTsKLSAgICBpZiAoISp6cCkg enAgPSB4ZGVmOwkJLyogUmVzdWx0IGVtcHR5LCBzdWJzdGl0dXRlIGRlZmF1bHQgKi8KLSAgICBk ZWJ1ZyhGMTEwLCJjbW51bSB6cCAyIix6cCwwKTsKLSAgICBpZiAoY2hrbnVtKHpwKSkgewkJCS8q IENoZWNrIGFnYWluIGZvciBkZWNpbWFsIG51bWJlciAqLwotCWlmIChyYWRpeCA9PSA4KSB7CQkv KiBJZiBpdCdzIHN1cHBvc2VkIHRvIGJlIG9jdGFsICovCi0JICAgIHpwID0gY2tyYWRpeCh6cCw4 LDEwKTsJLyogY29udmVydCB0byBkZWNpbWFsICovCi0JICAgIGlmICghenApIHJldHVybigtMik7 Ci0JICAgIGlmICghc3RyY21wKHpwLCItMSIpKSByZXR1cm4oLTIpOwotCX0KLQllcnJubyA9IDA7 Ci0gICAgICAgICpuID0gY2thdG9mcyh6cCk7Ci0JaWYgKGVycm5vKSB7Ci0JICAgIHBlcnJvcih6 cCk7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCWRlYnVnKEYxMDEsImNtbnVtIDJuZCBjaGtudW0g b2siLCIiLCpuKTsKLSAgICAgICAgcmV0dXJuKDApOwotI2lmbmRlZiBOT1NQTAotICAgIH0gIGVs c2UgaWYgKCh4ID0geHhlc2MoJnpwKSkgPiAtMSkgeyAvKiBDaGVjayBmb3IgYmFja3NsYXNoIGVz Y2FwZSAqLwotI2lmbmRlZiBPUzIKLQkqbiA9IHg7Ci0jZWxzZQotCSpuID0gd2lkZXJlc3VsdDsK LSNlbmRpZiAvKiBPUzIgKi8KLQlkZWJ1ZyhGMTAxLCJjbW51bSB4eGVzYyAyIG9rIiwiIiwqbik7 Ci0JcmV0dXJuKCp6cCA/IC0yIDogMCk7Ci0gICAgfSBlbHNlIGlmIChmKSB7CQkJLyogTm90IG51 bWVyaWMsIG1heWJlIGFuIGV4cHJlc3Npb24gKi8KLQljaGFyICogcDsKLQlwID0gZXZhbGEoenAp OwotCWlmIChjaGtudW0ocCkpIHsKLQkgICAgaWYgKHJhZGl4ID09IDgpIHsJCS8qIElmIGl0J3Mg c3VwcG9zZWQgdG8gYmUgb2N0YWwgKi8KLQkJenAgPSBja3JhZGl4KHpwLDgsMTApOwkvKiBjb252 ZXJ0IHRvIGRlY2ltYWwgKi8KLQkJaWYgKCF6cCkgcmV0dXJuKC0yKTsKLQkJaWYgKCFzdHJjbXAo enAsIi0xIikpIHJldHVybigtMik7Ci0JICAgIH0KLQkgICAgZXJybm8gPSAwOwotCSAgICAqbiA9 IGNrYXRvZnMocCk7Ci0JICAgIGlmIChlcnJubykgewotCQlwZXJyb3IocCk7Ci0JCXJldHVybigt OSk7Ci0JICAgIH0KLQkgICAgZGVidWcoRjEwMSwiY21udW0gZXhwIGV2YWwgb2siLCIiLCpuKTsK LQkgICAgcmV0dXJuKDApOwotCX0gZWxzZSByZXR1cm4oLTIpOwotI2VuZGlmIC8qIE5PU1BMICov Ci0gICAgfSBlbHNlIHsJCQkJLyogTm90IG51bWVyaWMgKi8KLQlyZXR1cm4oLTIpOwotICAgIH0K LX0KLQotI2lmZGVmIENLQ0hBTk5FTElPCi1leHRlcm4gaW50IHpfZXJyb3I7Ci0jZW5kaWYgLyog Q0tDSEFOTkVMSU8gKi8KLQotLyogIEMgTSBPIEYgSSAgLS0gIFBhcnNlIHRoZSBuYW1lIG9mIGFu IG91dHB1dCBmaWxlICAqLwotCi0vKgotIERlcGVuZHMgb24gdGhlIGV4dGVybmFsIGZ1bmN0aW9u IHpjaGtvKCk7IGlmIHpjaGtvKCkgbm90IGF2YWlsYWJsZSwgdXNlCi0gY21mbGQoKSB0byBwYXJz ZSBvdXRwdXQgZmlsZSBuYW1lcy4KLQotIFJldHVybnM6Ci0gICAtOSBsaWtlIC0yLCBleGNlcHQg bWVzc2FnZSBhbHJlYWR5IHByaW50ZWQsCi0gICAtMyBpZiBubyBpbnB1dCBwcmVzZW50IHdoZW4g cmVxdWlyZWQsCi0gICAtMiBpZiBwZXJtaXNzaW9uIHdvdWxkIGJlIGRlbmllZCB0byBjcmVhdGUg dGhlIGZpbGUsCi0gICAtMSBpZiByZXBhcnNlIG5lZWRlZCwKLSAgICAwIG9yIDEgaWYgZmlsZSBj YW4gYmUgY3JlYXRlZCwgd2l0aCB4cCBwb2ludGluZyB0byBuYW1lLgotICAgIDIgaWYgZ2l2ZW4g dGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LgotKi8KLWludAotY21vZmkoeGhscCx4 ZGVmLHhwLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyB4eF9zdHJwIGY7IHsKLSAgICBpbnQg eDsgY2hhciAqcywgKnpxOwotI2lmZGVmIERPQ0hLVkFSCi0gICAgaW50IHRyaWVzOwotI2VuZGlm IC8qIERPQ0hLVkFSICovCi0jaWZkZWYgRFRJTERFCi0gICAgY2hhciAqZGlycDsKLSNlbmRpZiAv KiBEVElMREUgKi8KLQotICAgIGNtZmxkZmxncyA9IDA7Ci0KLSAgICBpZiAoIXhobHApIHhobHAg PSAiIjsKLSAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKLQotICAgIGlmICgqeGhscCA9PSBOVUwp IHhobHAgPSAiT3V0cHV0IGZpbGUiOwotICAgICp4cCA9ICIiOwotCi0gICAgZGVidWcoRjExMCwi Y21vZmkgeGRlZiIseGRlZiwwKTsKLSAgICB4ID0gY21mbGQoeGhscCx4ZGVmLCZzLCh4eF9zdHJw KTApOwotICAgIGRlYnVnKEYxMTEsImNtb2ZpIGNtZmxkIHJldHVybnMiLHMseCk7Ci0gICAgaWYg KHggPCAwKQotICAgICAgcmV0dXJuKHgpOwotCi0gICAgcyA9IGJyc3RyaXAocyk7CQkJLyogU3Ry aXAgZW5jbG9zaW5nIGJyYWNlcyAqLwotICAgIGRlYnVnKEYxMTAsImNtb2ZpIDEuNSIscywwKTsK LQotI2lmZGVmIERPQ0hLVkFSCi0gICAgdHJpZXMgPSAwOwotICAgIHsKLQljaGFyICpwID0gczsK LSAgICAvKgotICAgICAgVGhpcyBpcyByZWFsbHkgdWdseS4gIElmIHdlIHNraXAgY29udmVyc2lv biB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLAotICAgICAgdGhlbiB2YXJpYWJsZSBuYW1lcyBsaWtl IFwlYSB3aWxsIGJlIHVzZWQgYXMgZmlsZW5hbWVzIChlLmcuIGNyZWF0aW5nCi0gICAgICBhIGZp bGUgY2FsbGVkICVBIGluIHRoZSByb290IGRpcmVjdG9yeSkuICBJZiB3ZSBET04nVCBza2lwIGNv bnZlcnNpb24KLSAgICAgIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIHRoZW4gc2luZ2xlIGJhY2tz bGFzaGVzIHVzZWQgYXMgZGlyZWN0b3J5Ci0gICAgICBzZXBhcmF0b3JzIGluIGZpbGVuYW1lcyB3 aWxsIGJlIG1pc2ludGVycHJldGVkIGFzIHZhcmlhYmxlIGxlYWQtaW5zLgotICAgICAgU28gd2Ug cHJlc2NhbiB0byBzZWUgaWYgaXQgaGFzIGFueSB2YXJpYWJsZSByZWZlcmVuY2VzLiAgQnV0IHRo aXMKLSAgICAgIG1vZHVsZSBpcyBub3Qgc3VwcG9zZWQgdG8ga25vdyBhbnl0aGluZyBhYm91dCB2 YXJpYWJsZXMsIGZ1bmN0aW9ucywKLSAgICAgIGV0Yywgc28gdGhpcyBjb2RlIGRvZXMgbm90IHJl YWxseSBiZWxvbmcgaGVyZSwgYnV0IHJhdGhlciBpdCBzaG91bGQKLSAgICAgIGJlIGF0IHRoZSBz YW1lIGxldmVsIGFzIHp6c3RyaW5nKCkuCi0gICAgKi8KLS8qCi0gIEhtbW0sIHRoaXMgbG9va3Mg YSBsb3QgbGlrZSBjaGt2YXIoKSBleGNlcHQgaXQgdGhhdCBpbmNsdWRlcyBcbm5uIG51bWJlcgot ICBlc2NhcGVzLiAgQnV0IHdoeT8gIFRoaXMgbWFrZXMgY29tbWFuZHMgbGlrZSAibWtkaXIgYzpc MTIzIiBpbXBvc3NpYmxlLgotICBBbmQgaW4gZmFjdCwgIm1rZGlyIGM6XDEyMyIgY3JlYXRlcyBh IGRpcmVjdG9yeSBjYWxsZWQgImM6eyIuICBXaGF0J3Mgd29yc2UsCi0gIHJtZGlyKCksIHdoaWNo ICpkb2VzKiBjYWxsIGNoa3ZhcigpLCB3b24ndCBsZXQgdXMgcmVtb3ZlIGl0LiAgU28gbGV0J3Mg YXQKLSAgbGVhc3QgdHJ5IG1ha2luZyBjbW9maSgpIHN5bW1ldHJpY2FsIHdpdGggY21pZmkoKS4u LgotKi8KLSNpZmRlZiBDT01NRU5UCi0JY2hhciAqIHE7Ci0Jd2hpbGUgKCAodHJpZXMgPT0gMCkg JiYgKHAgPSBzdHJjaHIocCxDTURRKSkgKSB7Ci0JICAgIHEgPSAqKHArMSk7CQkJLyogQ2hhciBh ZnRlciBiYWNrc2xhc2ggKi8KLQkgICAgaWYgKCFxKQkJCS8qIE5vbmUsIHF1aXQgKi8KLQkgICAg ICBicmVhazsKLQkgICAgaWYgKGlzdXBwZXIocSkpCQkvKiBJZiBsZXR0ZXIsIGNvbnZlcnQgdG8g bG93ZXJjYXNlICovCi0JICAgICAgcSA9IHRvbG93ZXIocSk7Ci0JICAgIGlmIChpc2RpZ2l0KHEp KSB7CQkvKiBJZiBpdCdzIGEgZGlnaXQsICovCi0JCXRyaWVzID0gMTsJCS8qIGFzc3VtZSBpdCdz IGEgYmFja3NsYXNoIGNvZGUgICovCi0JCWJyZWFrOwotCSAgICB9Ci0JICAgIHN3aXRjaCAocSkg ewotCSAgICAgIGNhc2UgQ01EUToJCS8qIERvdWJsZSBiYWNrc2xhc2ggKi8KLQkJdHJpZXMgPSAx OwkJLyogc28gY2FsbCB0aGUgY29udmVyc2lvbiBmdW5jdGlvbiAqLwotCQlicmVhazsKLQkgICAg ICBjYXNlICclJzoJCQkvKiBWYXJpYWJsZSBvciBhcnJheSByZWZlcmVuY2UgKi8KLQkgICAgICBj YXNlICcmJzoJCQkvKiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGxldHRlciAqLwotCQlpZiAoaXNhbHBo YSgqKHArMikpIHx8ICgqKHArMikgPj0gJzAnICYmICoocCsyKSA8PSAnOScpKQotCQkgIHRyaWVz ID0gMTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAnbSc6IGNhc2UgJ3YnOiBjYXNlICckJzogLyog XG0oKSwgXHYoKSwgXCQoKSAqLwotCQlpZiAoKihwKzIpID09ICcoJykKLQkJICBpZiAoc3RyY2hy KHArMiwnKScpKQotCQkgICAgdHJpZXMgPSAxOwotCQlicmVhazsKLQkgICAgICBjYXNlICdmJzoJ CQkvKiBcRm5hbWUoKSAqLwotCQlpZiAoc3RyY2hyKHArMiwnKCcpKQotCQkgIGlmIChzdHJjaHIo cCsyLCcpJykpCi0JCSAgICAgIHRyaWVzID0gMTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAneyc6 CQkJLyogXHsuLi59ICovCi0JCWlmIChzdHJjaHIocCsyLCd9JykpCi0JCSAgdHJpZXMgPSAxOwot CQlicmVhazsKLQkgICAgICBjYXNlICdkJzogY2FzZSAnbyc6CS8qIERlY2ltYWwgb3IgT2N0YWwg bnVtYmVyICovCi0JICAgICAgICBpZiAoaXNkaWdpdCgqKHArMikpKQotCQkgIHRyaWVzID0gMTsK LQkJYnJlYWs7Ci0JICAgICAgY2FzZSAneCc6CQkJLyogSGV4IG51bWJlciAqLwotCQlpZiAoaXNk aWdpdCgqKHArMikpIHx8Ci0JCSAgICAoKCoocCsyKSA+PSAnYScgJiYgKihwKzIpIDw9ICdmJykg fHwKLQkJICAgICAoKCoocCsyKSA+PSAnQScgJiYgKihwKzIpIDw9ICdGJykpKSkKLQkJICB0cmll cyA9IDE7Ci0JICAgICAgZGVmYXVsdDoKLQkJYnJlYWs7Ci0JICAgIH0KLQkgICAgcCsrOwotCX0K LSNlbHNlCi0jaWZuZGVmIE5PU1BMCi0JaWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVu Y3Rpb24gaXMgZ2l2ZW4gKi8KLQkgICAgY2hhciAqcyA9IHA7CQkvKiBTZWUgaWYgdGhlcmUgYXJl IGFueSB2YXJpYWJsZXMgaW4gKi8KLQkgICAgd2hpbGUgKCpzKSB7CQkvKiB0aGUgc3RyaW5nIGFu ZCBpZiBzbywgZXhwYW5kIHRoZW0gKi8KLQkJaWYgKGNoa3ZhcihzKSkgewotCQkgICAgdHJpZXMg PSAxOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkJcysrOwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIE5P U1BMICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0KLSNpZmRlZiBPUzIKLW9fYWdhaW46 Ci0jZW5kaWYgLyogT1MyICovCi0gICAgaWYgKHRyaWVzID09IDEpCi0jZW5kaWYgLyogRE9DSEtW QVIgKi8KLSAgICBpZiAoZikgewkJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2 ZW4gKi8KLQl6cSA9IGF0eGJ1ZjsJCQkvKiBkbyB0aGUgY29udmVyc2lvbi4gKi8KLQlhdHhuID0g Q01EQkw7Ci0JaWYgKCh4ID0gKCpmKShzLCZ6cSwmYXR4bikpIDwgMCkKLQkgIHJldHVybigtMik7 Ci0JcyA9IGF0eGJ1ZjsKLQlpZiAoISpzKQkJCS8qIFJlc3VsdCBlbXB0eSwgc3Vic3RpdHV0ZSBk ZWZhdWx0ICovCi0JICBzID0geGRlZjsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwiY21vZmkgMiIs cyx4KTsKLQotI2lmZGVmIERUSUxERQotICAgIGRpcnAgPSB0aWxkZV9leHBhbmQocyk7CQkvKiBF eHBhbmQgdGlsZGUsIGlmIGFueSwgKi8KLSAgICBpZiAoKmRpcnAgIT0gJ1wwJykgewkJLyogcmln aHQgaW4gdGhlIGF0b20gYnVmZmVyLiAqLwotCWlmIChzZXRhdG0oZGlycCwxKSA8IDApIHsKLQkg ICAgcHJpbnRmKCI/TmFtZSB0b28gbG9uZ1xuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotICAg IH0KLSAgICBzID0gYXRtYnVmOwotICAgIGRlYnVnKEYxMTAsImNtb2ZpIDMiLHMsMCk7Ci0jZW5k aWYgLyogRFRJTERFICovCi0KLSAgICBpZiAoaXN3aWxkKHMpKSB7Ci0gICAgICAgIHByaW50Zigi P1dpbGRjYXJkcyBub3QgYWxsb3dlZCAtICVzXG4iLHMpOwotICAgICAgICByZXR1cm4oLTIpOwot ICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJjbW9maSA0IixzLDApOwotCi0jaWZkZWYgQ0tfVE1QRElS Ci0gICAgLyogaXNkaXIoKSBmdW5jdGlvbiByZXF1aXJlZCBmb3IgdGhpcyEgKi8KLSAgICBpZiAo aXNkaXIocykpIHsKLQlkZWJ1ZyhGMTEwLCJjbW9maSA1OiBpcyBkaXJlY3RvcnkiLHMsMCk7Ci0g ICAgICAgICp4cCA9IHM7Ci0JcmV0dXJuKDIpOwotICAgIH0KLSNlbmRpZiAvKiBDS19UTVBESVIg Ki8KLQotICAgIGlmIChzdHJjbXAocyxDVFROQU0pICYmICh6Y2hrbyhzKSA8IDApKSB7IC8qIE9L IHRvIHdyaXRlIHRvIGNvbnNvbGUgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgT1MyCi0vKgot ICBXZSBkb24ndCB0cnkgYWdhaW4gYmVjYXVzZSB3ZSBhbHJlYWR5IHByZXNjYW5uZWQgdGhlIHN0 cmluZyB0byBzZWUgaWYKLSAgaWYgaXQgY29udGFpbmVkIGFueXRoaW5nIHRoYXQgY291bGQgYmUg dXNlZCBieSB6enN0cmluZygpLgotKi8KLQlpZiAodHJpZXMrKyA8IDEpCi0JICBnb3RvIG9fYWdh aW47Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotLyoKLSAgTm90ZTog dGhlcmUgYXJlIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB3aGVyZSB6Y2hrbygpIGNhbiBnaXZlIGEg ZmFsc2UKLSAgcG9zaXRpdmUsIHNvIGRvbid0IHJlbHkgb24gaXQgdG8gY2F0Y2ggZXZlcnkgY29u Y2VpdmFibGUgc2l0dWF0aW9uIGluCi0gIHdoaWNoIHRoZSBnaXZlbiBvdXRwdXQgZmlsZSBjYW4n dCBiZSBjcmVhdGVkLiAgSW4gb3RoZXIgd29yZHMsIHdlIHByaW50Ci0gIGEgbWVzc2FnZSBhbmQg ZmFpbCBoZXJlIGlmIHdlIEtOT1cgdGhlIGZpbGUgY2FuJ3QgYmUgY3JlYXRlZC4gIElmIHdlCi0g IHN1Y2NlZWQgYnV0IHRoZSBmaWxlIGNhbid0IGJlIG9wZW5lZCwgdGhlIGNvZGUgdGhhdCB0cmll cyB0byBvcGVuIHRoZSBmaWxlCi0gIGhhcyB0byBwcmludCBhIG1lc3NhZ2UuCi0qLwotCWRlYnVn KEYxMTAsImNtb2ZpIDY6IGZhaWx1cmUiLHMsMCk7Ci0jaWZkZWYgQ0tST09UCi0JaWYgKGNrcm9v dGVycikKLQkgIHByaW50ZigiP09mZiBMaW1pdHM6ICVzXG4iLHMpOwotCWVsc2UKLSNlbmRpZiAv KiBDS1JPT1QgKi8KLQkgIHByaW50ZigiP1dyaXRlIHBlcm1pc3Npb24gZGVuaWVkIC0gJXNcbiIs cyk7Ci0jaWZkZWYgQ0tDSEFOTkVMSU8KLQl6X2Vycm9yID0gRlhfQUNDOwotI2VuZGlmIC8qIENL Q0hBTk5FTElPICovCi0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfSBlbHNlIHsKLQlkZWJ1ZyhG MTEwLCJjbW9maSA3OiBvayIscywwKTsKLSAgICAgICAgKnhwID0gczsKLSAgICAgICAgcmV0dXJu KHgpOwotICAgIH0KLX0KLQotLyogIEMgTSBJIEYgSSAgLS0gIFBhcnNlIHRoZSBuYW1lIG9mIGFu IGV4aXN0aW5nIGZpbGUgICovCi0KLS8qCi0gVGhpcyBmdW5jdGlvbiBkZXBlbmRzIG9uIHRoZSBl eHRlcm5hbCBmdW5jdGlvbnM6Ci0gICB6Y2hraSgpICAtIENoZWNrIGlmIGlucHV0IGZpbGUgZXhp c3RzIGFuZCBpcyByZWFkYWJsZS4KLSAgIHp4cGFuZCgpIC0gRXhwYW5kIGEgd2lsZCBmaWxlIHNw ZWNpZmljYXRpb24gaW50byBhIGxpc3QuCi0gICB6bmV4dCgpICAtIFJldHVybiBuZXh0IGZpbGUg bmFtZSBmcm9tIGxpc3QuCi0gSWYgdGhlc2UgZnVuY3Rpb25zIGFyZW4ndCBhdmFpbGFibGUsIHRo ZW4gdXNlIGNtZmxkKCkgdG8gcGFyc2UgZmlsZW5hbWVzLgotKi8KLS8qCi0gUmV0dXJucwotICAg LTQgRU9GCi0gICAtMyBpZiBubyBpbnB1dCBwcmVzZW50IHdoZW4gcmVxdWlyZWQsCi0gICAtMiBp ZiBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFkYWJsZSwKLSAgIC0xIGlmIHJlcGFy c2UgbmVlZGVkLAotICAgIDAgb3IgMSBvdGhlcndpc2UsIHdpdGg6Ci0gICAgICAgIHhwIHBvaW50 aW5nIHRvIG5hbWUsCi0gICAgICAgIHdpbGQgPSAxIGlmIG5hbWUgY29udGFpbnMgJyonIG9yICc/ JywgMCBvdGhlcndpc2UuCi0qLwotCi0jaWZkZWYgQ09NTUVOVCAvKiBUaGlzIGhvcnJpYmxlIGhh Y2sgaGFzIGJlZW4gcmVwbGFjZWQgLSBzZWUgZnVydGhlciBkb3duICovCi0vKgotICAgQyBNIEkg TyBGIEkgIC0tICBQYXJzZSBhbiBpbnB1dCBmaWxlIE9SIHRoZSBuYW1lIG9mIGEgbm9uZXhpc3Rl bnQgZmlsZS4KLQotICAgVXNlIHRoaXMgd2hlbiBhbiBleGlzdGluZyBmaWxlIGlzIHdhbnRlZCAo c28gd2UgZ2V0IGhlbHAsIGNvbXBsZXRpb24sIGV0YyksCi0gICBidXQgaWYgYSBmaWxlIG9mIHRo ZSBnaXZlbiBuYW1lIGRvZXMgbm90IGV4aXN0LCB0aGUgbmFtZSBvZiBhIG5ldyBmaWxlIGlzCi0g ICBhY2NlcHRlZC4gIEZvciBleGFtcGxlLCB3aXRoIHRoZSBFRElUIGNvbW1hbmQgKGVkaXQgYW4g ZXhpc3RpbmcgZmlsZSwgb3IKLSAgIGNyZWF0ZSBhIG5ldyBmaWxlKS4gIFJldHVybnMgLTkgaWYg ZmlsZSBkb2VzIG5vdCBleGlzdC4gIEl0IGlzIHVwIHRvIHRoZQotICAgY2FsbGVyIHRvIGNoZWNr IGNyZWF0YWJpbGl0eS4KLSovCi1zdGF0aWMgaW50IG5vbXNnID0gMDsKLWludAotY21pb2ZpKHho bHAseGRlZix4cCx3aWxkLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyBpbnQgKndpbGQ7IHh4 X3N0cnAgZjsgewotICAgIGludCBtc2dzYXZlLCB4OwotICAgIG1zZ3NhdmUgPSBub21zZzsKLSAg ICBub21zZyA9IDE7Ci0gICAgeCA9IGNtaWZpMih4aGxwLHhkZWYseHAsd2lsZCwwLE5VTEwsZiww KTsKLSAgICBub21zZyA9IG1zZ3NhdmU7Ci0gICAgcmV0dXJuKHgpOwotfQotI2VuZGlmCS8qIENP TU1FTlQgKi8KLQotaW50Ci1jbWlmaSh4aGxwLHhkZWYseHAsd2lsZCxmKSBjaGFyICp4aGxwLCAq eGRlZiwgKip4cDsgaW50ICp3aWxkOyB4eF9zdHJwIGY7IHsKLSAgICByZXR1cm4oY21pZmkyKHho bHAseGRlZix4cCx3aWxkLDAsTlVMTCxmLDApKTsKLX0KLS8qCi0gIGNtaWZpcCgpIGlzIGNhbGxl ZCB3aGVuIHdlIHdhbnQgdG8gc3VwcGx5IGEgcGF0aCBvciBwYXRoIGxpc3QgdG8gc2VhcmNoCi0g IGluIGNhc2UgdGhlIGZpbGVuYW1lIHRoYXQgdGhlIHVzZXIgZ2l2ZXMgaXMgKGEpIG5vdCBhYnNv bHV0ZSwgYW5kIChiKSBjYW4ndAotICBiZSBmb3VuZCBhcyBnaXZlbi4gIFRoZSBwYXRoIHN0cmlu ZyBjYW4gYmUgdGhlIG5hbWUgb2YgYSBzaW5nbGUgZGlyZWN0b3J5LAotICBvciBhIGxpc3Qgb2Yg ZGlyZWN0b3JpZXMgc2VwYXJhdGVkIGJ5IHRoZSBQQVRIU0VQIGNoYXJhY3RlciwgZGVmaW5lZCBp bgotICBja3VjbWQuaC4gIExvb2sgaW4gY2t1dXNyLmMgYW5kIGNrdXVzMy5jIGZvciBleGFtcGxl cyBvZiB1c2FnZS4KLSovCi1pbnQKLWNtaWZpcCh4aGxwLHhkZWYseHAsd2lsZCxkLHBhdGgsZikK LSAgICBjaGFyICp4aGxwLCp4ZGVmLCoqeHA7IGludCAqd2lsZCwgZDsgY2hhciAqIHBhdGg7IHh4 X3N0cnAgZjsgewotICAgIHJldHVybihjbWlmaTIoeGhscCx4ZGVmLHhwLHdpbGQsMCxwYXRoLGYs MCkpOwotfQotCi0vKiAgQyBNIEQgSSBSICAtLSAgUGFyc2UgYSBkaXJlY3RvcnkgbmFtZSAgKi8K LQotLyoKLSBUaGlzIGZ1bmN0aW9uIGRlcGVuZHMgb24gdGhlIGV4dGVybmFsIGZ1bmN0aW9uczoK LSAgIGlzZGlyKHMpICAtIENoZWNrIGlmIHN0cmluZyBzIGlzIHRoZSBuYW1lIG9mIGEgZGlyZWN0 b3J5Ci0gICB6Y2hraShzKSAgLSBDaGVjayBpZiBpbnB1dCBmaWxlIHMgZXhpc3RzIGFuZCB3aGF0 IHR5cGUgaXQgaXMuCi0gSWYgdGhlc2UgZnVuY3Rpb25zIGFyZW4ndCBhdmFpbGFibGUsIHRoZW4g dXNlIGNtZmxkKCkgdG8gcGFyc2UgZGlyIG5hbWVzLgotCi0gUmV0dXJucwotICAgLTkgRm9yIGFs bCBzb3J0cyBvZiByZWFzb25zLCBhZnRlciBwcmludGluZyBhcHByb3ByaWF0ZSBlcnJvciBtZXNz YWdlLgotICAgLTQgRU9GCi0gICAtMyBpZiBubyBpbnB1dCBwcmVzZW50IHdoZW4gcmVxdWlyZWQs Ci0gICAtMiBpZiBvdXQgb2Ygc3BhY2Ugb3Igb3RoZXIgaW50ZXJuYWwgZXJyb3IsCi0gICAtMSBp ZiByZXBhcnNlIG5lZWRlZCwKLSAgICAwIG9yIDEsIHdpdGggeHAgcG9pbnRpbmcgdG8gbmFtZSwg aWYgZGlyZWN0b3J5IHNwZWNpZmllZCwKLSovCi1pbnQKLWNtZGlyKHhobHAseGRlZix4cCxmKSBj aGFyICp4aGxwLCAqeGRlZiwgKip4cDsgeHhfc3RycCBmOyB7Ci0gICAgaW50IHdpbGQ7Ci0gICAg cmV0dXJuKGNtaWZpMih4aGxwLHhkZWYseHAsJndpbGQsMCxOVUxMLGYsMSkpOwotfQotCi0vKiBM aWtlIENNRElSIGJ1dCBpbmNsdWRlcyBQQVRIIHNlYXJjaCAqLwotCi1pbnQKLWNtZGlycCh4aGxw LHhkZWYseHAscGF0aCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsgY2hhciAqIHBhdGg7IHh4 X3N0cnAgZjsgewotICAgIGludCB3aWxkOwotICAgIHJldHVybihjbWlmaTIoeGhscCx4ZGVmLHhw LCZ3aWxkLDAscGF0aCxmLDEpKTsKLX0KLQotLyoKLSAgY21pZmkyKCkgaXMgdGhlIGJhc2UgZmls ZW5hbWUgcGFyc2VyIGNhbGxlZCBieSBjbWlmaSwgY21pZmlwLCBjbWRpciwgZXRjLgotICBVc2Ug aXQgZGlyZWN0bHkgd2hlbiB5b3UgYWxzbyB3YW50IHRvIHBhcnNlIGEgZGlyZWN0b3J5IG9yIGRl dmljZQotICBuYW1lIGFzIGFuIGlucHV0IGZpbGUsIGFzIGluIHRoZSBESVJFQ1RPUlkgY29tbWFu ZC4gIENhbGwgd2l0aDoKLSAgICB4aGxwICAtLSBoZWxwIG1lc3NhZ2Ugb24gPwotICAgIHhkZWYg IC0tIGRlZmF1bHQgcmVzcG9uc2UKLSAgICB4cCAgICAtLSBwb2ludGVyIHRvIHJlc3VsdCAoaW4g b3VyIHNwYWNlLCBtdXN0IGJlIGNvcGllZCBmcm9tIGhlcmUpCi0gICAgd2lsZCAgLS0gZmxhZyBz ZXQgdXBvbiByZXR1cm4gdG8gaW5kaWNhdGUgaWYgZmlsZXNwZWMgd2FzIHdpbGQKLSAgICBkICAg ICAtLSAwIHRvIHBhcnNlIGZpbGVzLCAxIHRvIHBhcnNlIGZpbGVzIG9yIGRpcmVjdG9yaWVzCi0g ICAgICAgICAgICAgQWRkIDIgdG8gaW5oaWJpdCBmb2xsb3dpbmcgb2Ygc3ltbGlua3MuCi0gICAg cGF0aCAgLS0gc2VhcmNoIHBhdGggZm9yIGZpbGVzCi0gICAgZiAgICAgLS0gcG9pbnRlciB0byBz dHJpbmcgcHJvY2Vzc2luZyBmdW5jdGlvbiAoZS5nLiB0byBldmFsdWF0ZSB2YXJpYWJsZXMpCi0g ICAgZGlyZmxnIC0tIDEgdG8gcGFyc2UgKm9ubHkqIGRpcmVjdG9yaWVzLCAwIG90aGVyd2lzZQot Ki8KLWludAotY21pZmkyKHhobHAseGRlZix4cCx3aWxkLGQscGF0aCxmLGRpcmZsZykKLSAgICBj aGFyICp4aGxwLCp4ZGVmLCoqeHA7IGludCAqd2lsZCwgZDsgY2hhciAqIHBhdGg7IHh4X3N0cnAg ZjsgaW50IGRpcmZsZzsgewotICAgIGV4dGVybiBpbnQgcmVjdXJzaXZlLCBkaXJhY3RpdmUsIGNk YWN0aXZlLCBkYmxxdW87Ci0gICAgaW50IGksIHgsIGl0c2FkaXIsIHhjLCBleHBhbmRlZCA9IDAs IG5maWxlcyA9IDAsIGNoaWxkcmVuID0gLTE7Ci0gICAgaW50IHFmbGFnID0gMDsKLSAgICBsb25n IHk7Ci0gICAgQ0tfT0ZGX1QgZmlsZXNpemU7Ci0gICAgY2hhciAqc3AgPSBOVUxMLCAqenEsICpu cCA9IE5VTEw7Ci0gICAgY2hhciAqc3YgPSBOVUxMLCAqcCA9IE5VTEw7Ci0jaWZkZWYgRFRJTERF Ci0gICAgY2hhciAqZGlycDsKLSNlbmRpZiAvKiBEVElMREUgKi8KLQotI2lmbmRlZiBOT1BBUlRJ QUwKLSNpZm5kZWYgT1MyCi0jaWZkZWYgT1NLCi0gICAgLyogVGhpcyBsYXJnZSBhcnJheSBpcyBk eW5hbWljIGZvciBPUy05IC0tIHNob3VsZCBkbyBmb3Igb3RoZXJzIHRvby4uLiAqLwotICAgIGV4 dGVybiBjaGFyICoqbXRjaHM7Ci0jZWxzZQotI2lmZGVmIFVOSVgKLSAgICAvKiBPSywgZm9yIFVO SVggdG9vICovCi0gICAgZXh0ZXJuIGNoYXIgKiptdGNoczsKLSNlbHNlCi0jaWZkZWYgVk1TCi0g ICAgZXh0ZXJuIGNoYXIgKiptdGNoczsKLSNlbHNlCi0gICAgZXh0ZXJuIGNoYXIgKm10Y2hzW107 Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIE9TSyAqLwot I2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PUEFSVElBTCAqLwotCi0gICAgaWYgKCF4aGxw KSB4aGxwID0gIiI7Ci0gICAgaWYgKCF4ZGVmKSB4ZGVmID0gIiI7Ci0KLSNpZm5kZWYgTk9MQVNU RklMRQotICAgIG1ha2VzdHIoJnRtcGxhc3RmaWxlLE5VTEwpOwotI2VuZGlmCS8qIE5PTEFTVEZJ TEUgKi8KLSAgICBuenhvcHRzID0gMDsJCQkvKiB6eHBhbmQoKSBvcHRpb25zICovCi0gICAgZGVi dWcoRjEwMSwiY21pZmkgZCIsIiIsZCk7Ci0gICAgaWYgKGQgJiAyKSB7CQkJLyogZCAmIDIgbWVh bnMgZG9uJ3QgZm9sbG93IHN5bWxpbmtzICovCi0JZCBePSAyOwotCW56eG9wdHMgPSBaWF9OT0xJ TktTOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBuenhvcHRzIiwiIixuenhvcHRzKTsK LSAgICBjbWZsZGZsZ3MgPSAwOwotICAgIGlmIChwYXRoKQotICAgICAgaWYgKCEqcGF0aCkKLQlw YXRoID0gTlVMTDsKLSAgICBpZiAocGF0aCkgewkJCQkvKiBNYWtlIGEgY29weSB3ZSBjYW4gcG9r ZSAqLwotCXggPSBzdHJsZW4ocGF0aCk7Ci0JbnAgPSAoY2hhciAqKSBtYWxsb2MoeCArIDEpOwot CWlmIChucCkgewotCSAgICBzdHJjcHkobnAsIHBhdGgpOwotCSAgICBwYXRoID0gc3AgPSBucDsK LQl9Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImNtaWZpMiBwYXRoIixwYXRoLDApOwotCi0gICAg Y2tzdHJuY3B5KGNtZGVmYXVsdCx4ZGVmLENNREVGQVVMVCk7IC8qIENvcHkgZGVmYXVsdCAqLwot ICAgIHhkZWYgPSBjbWRlZmF1bHQ7Ci0KLSAgICBpbndvcmQgPSAwOwkJCQkvKiBJbml0aWFsaXpl IGNvdW50cyAmIHBvaW50ZXJzICovCi0gICAgY2MgPSAwOwotICAgIHhjID0gMDsKLSAgICAqeHAg PSAiIjsJCQkJLyogUG9pbnRlciB0byByZXN1bHQgc3RyaW5nICovCi0gICAgaWYgKCh4ID0gY21m bGdzKSAhPSAxKSB7ICAgICAgICAgICAgLyogQWxyZWFkeSBjb25maXJtZWQ/ICovCi0jaWZkZWYg QlNfRElSU0VQCi0JZGlybmFtZmxnID0gMTsKLSAgICAgICAgeCA9IGd0d29yZCgwKTsJCQkvKiBO bywgZ2V0IGEgd29yZCAqLwotCWRpcm5hbWZsZyA9IDA7Ci0jZWxzZQotICAgICAgICB4ID0gZ3R3 b3JkKDApOyAgICAgICAgICAgICAgICAgIC8qIE5vLCBnZXQgYSB3b3JkICovCi0jZW5kaWYgLyog QlNfRElSU0VQICovCi0gICAgfSBlbHNlIHsJCQkJLyogSWYgc28sIHVzZSBkZWZhdWx0LCBpZiBh bnkuICovCi0gICAgICAgIGlmIChzZXRhdG0oeGRlZiwxKSA8IDApIHsKLQkgICAgcHJpbnRmKCI/ RGVmYXVsdCBuYW1lIHRvbyBsb25nXG4iKTsKLQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKLQkgICAg cmV0dXJuKC05KTsKLQl9Ci0gICAgfQotICBpX3BhdGg6Ci0gICAgKnhwID0gYXRtYnVmOyAgICAg ICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0LiAqLwotCi0gICAgd2hpbGUgKDEp IHsKLSAgICAgICAgeGMgKz0gY2M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCB0aGlz IGNoYXJhY3Rlci4gKi8KLSAgICAgICAgZGVidWcoRjExMSwiY21pZmkgZ3R3b3JkIixhdG1idWYs eGMpOwotCWRlYnVnKEYxMDEsImNtaWZpIHN3aXRjaCB4IiwiIix4KTsKLSAgICAgICAgc3dpdGNo ICh4KSB7CQkJLyogeCA9IGd0d29yZCgpIHJldHVybiBjb2RlICovCi0JICBjYXNlIC0xMDoKLQkg ICAgaWYgKGd0aW1lcigpID4gdGltZWxpbWl0KSB7Ci0jaWZkZWYgSUtTRAotICAgICAgICAgICAg ICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxyXG5JS1NE IElETEUgVElNRU9VVDogJWQgc2VjXHJcbiIsIHRpbWVsaW1pdCk7Ci0gICAgICAgICAgICAgICAg ICAgIGRvZXhpdChHT09EX0VYSVQsMCk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIElL U0QgKi8KLQkJLyogaWYgKCFxdWlldCkgcHJpbnRmKCI/VGltZWQgb3V0XG4iKTsgKi8KLQkJcmV0 dXJuKC0xMCk7Ci0JICAgIH0gZWxzZSB7Ci0JCXggPSBndHdvcmQoMCk7Ci0JCWNvbnRpbnVlOwot CSAgICB9Ci0JICBjYXNlIC05OgotCSAgICBwcmludGYoIkNvbW1hbmQgb3IgZmllbGQgdG9vIGxv bmdcbiIpOwotCSAgY2FzZSAtNDoJCQkvKiBFT0YgKi8KLQkgIGNhc2UgLTI6CQkJLyogT3V0IG9m IHNwYWNlLiAqLwotCSAgY2FzZSAtMToJCQkvKiBSZXBhcnNlIG5lZWRlZCAqLwotCSAgICBpZiAo bnApIGZyZWUobnApOwotCSAgICByZXR1cm4oeCk7Ci0JICBjYXNlIDE6CQkJLyogQ1IgKi8KLQkg IGNhc2UgMDoJCQkvKiBTUCAqLwotCSAgICBpZiAoeGMgPT0gMCkJCS8qIElmIG5vIGlucHV0Li4u ICovCi0JICAgICAgKnhwID0geGRlZjsJCS8qIHN1YnN0aXR1dGUgdGhlIGRlZmF1bHQgKi8KLSNp Zm5kZWYgTk9MQVNURklMRQotCSAgICBtYWtlc3RyKCZ0bXBsYXN0ZmlsZSwqeHApOwkvKiBNYWtl IGEgY29weSBiZWZvcmUgYnN0cmlwcGluZyAqLwotI2VuZGlmCS8qICNpZm5kZWYgTk9MQVNURklM RSAqLwotCSAgICAqeHAgPSBicnN0cmlwKCp4cCk7CQkvKiBTdHJpcCBicmFjZXMgKi8KLQkgICAg aWYgKCoqeHAgPT0gTlVMKSB7CQkvKiAxMiBtYXIgMjAwMSAqLwotCQlpZiAobnApIGZyZWUobnAp OwotCQlyZXR1cm4oLTMpOwotCSAgICB9Ci0JICAgIGRlYnVnKEYxMTAsImNtaWZpIGJyc3RyaXAi LCp4cCwwKTsKLSNpZm5kZWYgTk9TUEwKLQkgICAgaWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNp b24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KLSNpZmRlZiBET0NIS1ZBUgotCQljaGFyICpzID0gKnhw OwkJLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgdmFyaWFibGVzIGluICovCi0JCWludCB4OwotCQl3 aGlsZSAoKnMpIHsJCS8qIHRoZSBzdHJpbmcgYW5kIGlmIHNvLCBleHBhbmQgdGhlbSAqLwotCQkg ICAgeCA9IGNoa3ZhcihzKTsKLQkJICAgIC8qIGRlYnVnKEYxMTEsImNtaWZpIGNoa3ZhciIsKnhw LHgpOyAqLwotCQkgICAgaWYgKHgpIHsKLSNlbmRpZiAvKiBET0NIS1ZBUiAqLwotCQkJenEgPSBh dHhidWY7Ci0JCQlhdHhuID0gQ01EQkw7Ci0JCQlpZiAoKCpmKSgqeHAsJnpxLCZhdHhuKSA8IDAp IHsKLQkJCSAgICBpZiAobnApIGZyZWUobnApOwotCQkJICAgIHJldHVybigtMik7Ci0JCQl9Ci0J CQkqeHAgPSBhdHhidWY7Ci0JCQlpZiAoIWF0eGJ1ZlswXSkKLQkJCSAgKnhwID0geGRlZjsKLSNp ZmRlZiBET0NIS1ZBUgotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCSAgICBzKys7Ci0JCX0KLSNlbmRp ZiAvKiBET0NIS1ZBUiAqLwotCSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQkgICAgaWYgKCoq eHAgPT0gTlVMKSB7CQkvKiAxMiBtYXIgMjAwMSAqLwotCQlpZiAobnApIGZyZWUobnApOwotCQly ZXR1cm4oLTMpOwotCSAgICB9Ci0jaWZkZWYgRFRJTERFCi0JICAgIGlmIChkaXJmbGcpIHsKLQkJ ZGlycCA9IHRpbGRlX2V4cGFuZCgqeHApOyAvKiBFeHBhbmQgdGlsZGUsIGlmIGFueSwgKi8KLQkJ aWYgKCpkaXJwICE9ICdcMCcpIHsJLyogaW4gdGhlIGF0b20gYnVmZmVyLiAqLwotCQkgICAgaWYg KHNldGF0bShkaXJwLDEpIDwgMCkgewotCQkJcHJpbnRmKCJFeHBhbmRlZCBuYW1lIHRvbyBsb25n XG4iKTsKLQkJCWlmIChucCkgZnJlZShucCk7Ci0JCQlyZXR1cm4oLTkpOwotCQkgICAgfQotCQl9 Ci0JCSp4cCA9IGF0bWJ1ZjsKLQkJZGVidWcoRjExMCwiY21pZmkgdGlsZGVfZXhwYW5kIiwqeHAs MCk7Ci0JICAgIH0KLSNlbmRpZiAvKiBEVElMREUgKi8KLQkgICAgaWYgKCFzdikgewkJCS8qIE9u bHkgZG8gdGhpcyBvbmNlICovCi0JCXN2ID0gbWFsbG9jKChpbnQpc3RybGVuKCp4cCkrMSk7IC8q IE1ha2UgYSBzYWZlIGNvcHkgKi8KLQkJaWYgKCFzdikgewotCQkgICAgcHJpbnRmKCI/Y21pZmk6 IG1hbGxvYyBlcnJvclxuIik7Ci0JCSAgICBpZiAobnApIGZyZWUobnApOwotCQkgICAgcmV0dXJu KC05KTsKLQkJfQotCQlzdHJjcHkoc3YsKnhwKTsKLQkJZGVidWcoRjExMCwiY21pZmkgc3YiLHN2 LDApOwotCSAgICB9Ci0KLS8qIFRoaXMgaXMgdG8gZ2V0IGFyb3VuZCAiY2QgLyIgZmFpbGluZyBi ZWNhdXNlICJ0b28gbWFueSBkaXJlY3RvcmllcyBtYXRjaCIgKi8KLQotCSAgICBleHBhbmRlZCA9 IDA7CQkvKiBEaWRuJ3QgY2FsbCB6eHBhbmQgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotCSAgICBk ZWJ1ZyhGMTEwLCJjbWlmaSBpc2RpciAxIiwqeHAsMCk7Ci0JICAgIHsKLQkJaW50IHk7IGNoYXIg KnM7Ci0JCXMgPSAqeHA7Ci0JCXkgPSBzdHJsZW4ocyk7Ci0JCWlmICh5ID4gMSAmJgotCQkgICAg KHNbeS0xXSA9PSAnOicgfHwKLQkJICAgICBzW3ktMV0gPT0gJ14nIHx8Ci0JCSAgICAgc1t5LTFd ID09ICc9JykKLQkJICAgICkKLQkJICBzW3ktMV0gPSBOVUw7Ci0JICAgIH0KLQkgICAgZGVidWco RjExMCwiY21pZmkgaXNkaXIgMiIsKnhwLDApOwotI2VuZGlmIC8qICBkYXRhZ2VuZXJhbCAqLwot Ci0jaWZkZWYgVk1TCi0JICAgIGlmIChkaXJmbGcpIHsKLQkJaWYgKCFzdHJjbXAoKnhwLCIuLiIp KSB7IC8qIEZvciBVTklYZXJzLi4uICovCi0JCSAgICBzZXRhdG0oIi0iLDApOwotCQkgICAgKnhw ID0gYXRtYnVmOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAoKnhwLCIuIikpIHsKLQkJICAgIHNldGF0 bSgiW10iLDApOwotCQkgICAgKnhwID0gYXRtYnVmOwotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBW TVMgKi8KLQkgICAgaXRzYWRpciA9IGlzZGlyKCp4cCk7CS8qIElzIGl0IGEgZGlyZWN0b3J5PyAq LwotCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBpdHNhZGlyIiwqeHAsaXRzYWRpcik7Ci0jaWZkZWYg Vk1TCi0JICAgIC8qIElmIHRoZXkgc2FpZCAiYmxhaCIgd2hlcmUgImJsYWguZGlyIiBpcyBhIGRp cmVjdG9yeS4uLiAqLwotCSAgICAvKiBjaGFuZ2UgaXQgdG8gWy5ibGFoXS4gKi8KLQkgICAgaWYg KCFpdHNhZGlyKSB7Ci0JCWNoYXIgdG1wYnVmWzYwMF07Ci0JCWludCBmbGFnID0gMDsgY2hhciBj LCAqIHA7Ci0JCXAgPSAqeHA7Ci0JCXdoaWxlICgoYyA9ICpwKyspICYmICFmbGFnKQotCQkgIGlm IChja3N0cmNocigiLltdOio/PD4iLGMpKQotCQkgICAgZmxhZyA9IDE7Ci0JCWRlYnVnKEYxMTEs ImNtaWZpIFZNUyBkaXJuYW1lIGZsYWciLCp4cCxmbGFnKTsKLQkJaWYgKCFmbGFnKSB7Ci0JCSAg ICBja21ha21zZyh0bXBidWYsVE1QQlVGU0laLCJbLiIsKnhwLCJdIixOVUxMKTsKLQkJICAgIGl0 c2FkaXIgPSBpc2Rpcih0bXBidWYpOwotCQkgICAgaWYgKGl0c2FkaXIpIHsKLQkJCXNldGF0bSh0 bXBidWYsMCk7Ci0JCQkqeHAgPSBhdG1idWY7Ci0JCSAgICB9Ci0JCSAgICBkZWJ1ZyhGMTExLCJj bWlmaSBWTVMgZGlybmFtZSBmbGFnIGl0c2FkaXIiLCp4cCxpdHNhZGlyKTsKLQkJfQotCSAgICB9 IGVsc2UgaWYgKGl0c2FkaXIgPT0gMSAmJiAqKHhwWzBdKSA9PSAnLicgJiYgKih4cFsxXSkpIHsK LQkJY2hhciAqcDsKLQkJaWYgKHAgPSBtYWxsb2MoY2MgKyA0KSkgewotCQkgICAgY2ttYWttc2co cCxjYys0LCJbIiwqeHAsIl0iLE5VTEwpOwotCQkgICAgc2V0YXRtKHAsMCk7Ci0JCSAgICAqeHAg PSBhdG1idWY7Ci0JCSAgICBkZWJ1ZyhGMTEwLCJjbWRpciAuZm9vIiwqeHAsMCk7Ci0JCSAgICBm cmVlKHApOwotCQl9Ci0JICAgIH0gZWxzZSBpZiAoaXRzYWRpciA9PSAyICYmICFkaXJhY3RpdmUp IHsKLQkJaW50IHg7CQkJLyogW0ZPT11CQVIuRElSIGluc3RlYWQgb2YgW0ZPTy5CQVJdICovCi0J CWNoYXIgKnA7Ci0JCXAgPSBtYWxsb2MoY2MgKyA0KTsKLQkJaWYgKHApIHsKLQkJICAgIHggPSBj dnRkaXIoKnhwLHAsQVRNQkwpOyAvKiBDb252ZXJ0IHRvIFtGT08uQkFSXSAqLwotCQkgICAgaWYg KHggPiAwKSB7Ci0JCQlzZXRhdG0ocCwwKTsKLQkJCSp4cCA9IGF0bWJ1ZjsKLQkJCWRlYnVnKEYx MTAsImNtZGlyIGN2dGRpciIsKnhwLDApOwotCQkgICAgfQotCQkgICAgZnJlZShwKTsKLQkJfQot CSAgICB9Ci0jZW5kaWYgLyogVk1TICovCi0KLQkgICAgZGVidWcoRjEwMSwiY21pZmkgZGlyZmxn IiwiIixkaXJmbGcpOwotCSAgICBpZiAoZGlyZmxnKSB7CQkvKiBQYXJzaW5nIGEgZGlyZWN0b3J5 IG5hbWU/ICovCi0JCS8qIFllcywgZG9lcyBpdCBjb250YWluIHdpbGRjYXJkcz8gKi8KLQkJaWYg KGlzd2lsZCgqeHApIHx8Ci0JCSAgICAoZGlyYWN0aXZlICYmICghc3RyY21wKCp4cCwiLiIpICB8 fCAhc3RyY21wKCp4cCwiLi4iKSkpCi0JCSAgICApIHsKLQkJICAgIG56eG9wdHMgfD0gWlhfRElS T05MWTsgLyogTWF0Y2ggb25seSBkaXJlY3RvcnkgbmFtZXMgKi8KLQkJICAgIGlmIChtYXRjaGRv dCkgIG56eG9wdHMgfD0gWlhfTUFUQ0hET1Q7Ci0JCSAgICBpZiAocmVjdXJzaXZlKSBuenhvcHRz IHw9IFpYX1JFQ1VSU0U7Ci0JCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBuenhvcHRzIDIiLCp4cCxu enhvcHRzKTsKLQkJICAgIHkgPSBuenhwYW5kKCp4cCxuenhvcHRzKTsKLQkJICAgIGRlYnVnKEYx MTEsImNtaWZpIG56eHBhbmQgMiIsKnhwLHkpOwotCQkgICAgbmZpbGVzID0geTsKLQkJICAgIGV4 cGFuZGVkID0gMTsKLQkJfSBlbHNlIHsKLSNpZmRlZiBWTVMKLS8qCi0gIFRoaXMgaXMgdG8gYWxs b3cgKGUuZy4pICJjZCBmb28iLCB3aGVyZSBGT08uRElSOzEgaXMgaW4gdGhlCi0gIGN1cnJlbnQg ZGlyZWN0b3J5LgotKi8KLQkJICAgIGRlYnVnKEYxMTEsImNtZGlyIGl0c2FkaXIiLCp4cCxpdHNh ZGlyKTsKLQkJICAgIGlmICghaXRzYWRpcikgewotCQkJY2hhciAqczsKLQkJCWludCBuOwotCQkJ cyA9ICp4cDsKLQkJCW4gPSBzdHJsZW4ocyk7Ci0JCQlpZiAobiA+IDAgJiYKLSNpZmRlZiBDT01N RU5UCi0JCQkgICAgKnMgIT0gJ1snICYmIHNbbi0xXSAhPSAnXScgJiYKLQkJCSAgICAqcyAhPSAn PCcgJiYgc1tuLTFdICE9ICc+JyAmJgotI2Vsc2UKLQkJCSAgICBja2luZGV4KCJbIixzLDAsMCwx KSA9PSAwICYmCi0JCQkgICAgY2tpbmRleCgiPCIscywwLDAsMSkgPT0gMCAmJgotI2VuZGlmIC8q IENPTU1FTlQgKi8KLQkJCSAgICBzW24tMV0gIT0gJzonKSB7Ci0JCQkgICAgY2hhciAqIGRpcmJ1 ZiA9IE5VTEw7Ci0JCQkgICAgZGlyYnVmID0gKGNoYXIgKiltYWxsb2Mobis0KTsKLQkJCSAgICBp ZiAoZGlyYnVmKSB7Ci0JCQkJaWYgKCpzID09ICcuJykKLQkJCQkgIGNrbWFrbXNnKGRpcmJ1Zixu KzQsIlsiLHMsIl0iLE5VTEwpOwotCQkJCWVsc2UKLQkJCQkgIGNrbWFrbXNnKGRpcmJ1ZixuKzQs IlsuIixzLCJdIixOVUxMKTsKLQkJCQlpdHNhZGlyID0gaXNkaXIoZGlyYnVmKTsKLQkJCQlkZWJ1 ZyhGMTExLCJjbWRpciBkaXJidWYiLGRpcmJ1ZixpdHNhZGlyKTsKLQkJCQlpZiAoaXRzYWRpcikg ewotCQkJCSAgICBzZXRhdG0oZGlyYnVmLDApOwotCQkJCSAgICAqeHAgPSBhdG1idWY7Ci0JCQkJ ICAgIGRlYnVnKEYxMTAsImNtZGlyIG5ldyAqeHAiLCp4cCwwKTsKLQkJCQl9Ci0JCQkJZnJlZShk aXJidWYpOwotCQkJICAgIH0KLQotLyogVGhpcyBpcyB0byBhbGxvdyBDRFBBVEggdG8gd29yayBp biBWTVMuLi4gKi8KLQotCQkJfSBlbHNlIGlmIChuID4gMCkgewotCQkJICAgIGNoYXIgKiBwOyBp bnQgaSwgaiwgaywgZDsKLQkJCSAgICBjaGFyIHJiWzJdID0gIl0iOwotCQkJICAgIGlmIChwID0g bWFsbG9jKHggKyA4KSkgewotCQkJCWNrc3RybmNweShwLCp4cCx4KzgpOwotCQkJCWkgPSBja2lu ZGV4KCIuIixwLC0xLDEsMSk7Ci0JCQkJZCA9IGNraW5kZXgoIi5kaXIiLHAsMCwwLDApOwotCQkJ CWogPSBja2luZGV4KCJdIixwLC0xLDEsMSk7Ci0JCQkJaWYgKGogPT0gMCkgewotCQkJCSAgICBq ID0gY2tpbmRleCgiPiIscCwtMSwxLDEpOwotCQkJCSAgICByYlswXSA9ICc+JzsKLQkJCQl9Ci0J CQkJayA9IGNraW5kZXgoIjoiLHAsLTEsMSwxKTsKLQkJCQlpZiAoaSA8IGogfHwgaSA8IGspIGkg PSAwOwotCQkJCWlmIChkIDwgaiB8fCBkIDwgaykgZCA9IDA7Ci0JCQkJLyogQ2hhbmdlIFtGT09d QkFSIG9yIFtGT09dQkFSLkRJUiAqLwotCQkJCS8qIHRvIFtGT08uQkFSXSAqLwotCQkJCWlmIChq ID4gMCAmJiBqIDwgbikgewotCQkJCSAgICBwW2otMV0gPSAnLic7Ci0JCQkJICAgIGlmIChkID4g MCkgcFtkLTFdID0gTlVMOwotCQkJCSAgICBja3N0cm5jYXQocCxyYix4KzgpOwotCQkJCSAgICBk ZWJ1ZyhGMTEwLCJjbWRpciB4eHgiLHAsMCk7Ci0JCQkJfQotCQkJCWl0c2FkaXIgPSBpc2Rpcihw KTsKLQkJCQlkZWJ1ZyhGMTExLCJjbWRpciBwIixwLGl0c2FkaXIpOwotCQkJCWlmIChpdHNhZGly KSB7Ci0JCQkJICAgIHNldGF0bShwLDApOwotCQkJCSAgICAqeHAgPSBhdG1idWY7Ci0JCQkJICAg IGRlYnVnKEYxMTAsImNtZGlyIG5ldyAqeHAiLCp4cCwwKTsKLQkJCQl9Ci0JCQkJZnJlZShwKTsK LQkJCSAgICB9Ci0JCQl9Ci0JCSAgICB9Ci0jZW5kaWYgLyogVk1TICovCi0JCSAgICB5ID0gKCFp dHNhZGlyKSA/IDAgOiAxOwotCQkgICAgZGVidWcoRjExMSwiY21pZmkgeSBpdHNhZGlyIiwqeHAs eSk7Ci0JCX0KLQkgICAgfSBlbHNlIHsJCQkvKiBQYXJzaW5nIGEgZmlsZW5hbWUuICovCi0JCWRl YnVnKEYxMTAsImNtaWZpICp4cCBwcmUtenhwYW5kIiwqeHAsMCk7Ci0jaWZuZGVmIENPTU1FTlQK LQkJbnp4b3B0cyB8PSAoZCA9PSAwKSA/IFpYX0ZJTE9OTFkgOiAwOyAvKiBTbyBhbHdheXMgZXhw YW5kLiAqLwotCQlpZiAobWF0Y2hkb3QpICBuenhvcHRzIHw9IFpYX01BVENIRE9UOwotCQlpZiAo cmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7Ci0JCXkgPSBuenhwYW5kKCp4cCxuenhv cHRzKTsKLSNlbHNlCi0vKiBIZXJlIHdlJ3JlIHRyeWluZyB0byBmaXggYSBwcm9ibGVtIGluIHdo aWNoIGEgZGlyZWN0b3J5IG5hbWUgaXMgYWNjZXB0ZWQgKi8KLS8qIGFzIGEgZmlsZW5hbWUsIGJ1 dCB0aGlzIGJyZWFrcyB0b28gbWFueSBvdGhlciB0aGluZ3MuICovCi0JCS8qIG56eG9wdHMgPSAw OyAqLwotCQlpZiAoIWQpIHsKLQkJICAgIGlmIChpdHNhZGlyICYgIWlzd2lsZCgqeHApKSB7Ci0J CQlkZWJ1ZyhGMTAwLCJjbWlmaSBkaXIgd2hlbiBmaWxvbmx5IiwiIiwwKTsKLQkJCXByaW50Zigi P05vdCBhIHJlZ3VsYXIgZmlsZTogXCIlc1wiXG4iLCp4cCk7Ci0JCQlpZiAoc3YpIGZyZWUoc3Yp OwotCQkJaWYgKG5wKSBmcmVlKG5wKTsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9IGVsc2Ugewot CQkJbnp4b3B0cyB8PSBaWF9GSUxPTkxZOwotCQkJaWYgKG1hdGNoZG90KSAgbnp4b3B0cyB8PSBa WF9NQVRDSERPVDsKLQkJCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKLQkJ CXkgPSBuenhwYW5kKCp4cCxuenhvcHRzKTsKLQkJICAgIH0KLQkJfQotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQkJbmZpbGVzID0geTsKLQkJZGVidWcoRjExMSwiY21pZmkgeSBuenhwYW5kIiwqeHAs eSk7Ci0JCWRlYnVnKEYxMTEsImNtaWZpIHkgYXRtYnVmIixhdG1idWYsaXRzYWRpcik7Ci0JCWV4 cGFuZGVkID0gMTsKLQkgICAgfQotCSAgICAvKiBkb215ZGlyKCkgY2FsbHMgenhyZXdpbmQoKSBz byB3ZSBNVVNUIGNhbGwgbnp4cGFuZCgpIGhlcmUgKi8KLQkgICAgaWYgKCFleHBhbmRlZCAmJiBk aXJhY3RpdmUpIHsKLQkJZGVidWcoRjExMCwiY21pZmkgZGlyYWN0aXZlIGNhdGNoLWFsbCB6eHBh bmQiLCp4cCwwKTsKLQkJbnp4b3B0cyB8PSAoZCA9PSAwKSA/IFpYX0ZJTE9OTFkgOiAoZGlyZmxn ID8gWlhfRElST05MWSA6IDApOwotCQlpZiAobWF0Y2hkb3QpICBuenhvcHRzIHw9IFpYX01BVENI RE9UOwotCQlpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7Ci0JCXkgPSBuenhw YW5kKCp4cCxuenhvcHRzKTsKLQkJZGVidWcoRjExMSwiY21pZmkgZGlyYWN0aXZlIG56eHBhbmQi LCp4cCx5KTsKLQkJbmZpbGVzID0geTsKLQkJZXhwYW5kZWQgPSAxOwotCSAgICB9Ci0JICAgICp3 aWxkID0gKGlzd2lsZChzdikgfHwgKHkgPiAxKSkgJiYgKGl0c2FkaXIgPT0gMCk7Ci0KLSNpZmRl ZiBSRUNVUlNJVkUKLQkgICAgaWYgKCEqd2lsZCkgKndpbGQgPSByZWN1cnNpdmU7Ci0jZW5kaWYg LyogUkVDVVJTSVZFICovCi0KLQkgICAgZGVidWcoRjExMSwiY21pZmkgc3Ygd2lsZCIsc3YsKndp bGQpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSB5IiwiIix5KTsKLQkgICAgaWYgKGRpcmZsZyAm JiAqd2lsZCAmJiBjZGFjdGl2ZSkgewotCQlpZiAoeSA+IDEpIHsKLQkJICAgIHByaW50ZigiP1dp bGRjYXJkIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSBkaXJlY3RvcnlcbiIpOwotCQkgICAgaWYgKHN2 KSBmcmVlKHN2KTsKLQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0JCSAgICByZXR1cm4oLTkpOwot CQl9IGVsc2UgewotCQkgICAgem5leHQoKnhwKTsKLQkJfQotCSAgICB9Ci0JICAgIGlmIChpdHNh ZGlyICYmIGQgJiYgIWRpcmZsZykgeyAvKiBJdCdzIGEgZGlyZWN0b3J5IGFuZCBub3Qgd2lsZCAq LwotCQlpZiAoc3YpIGZyZWUoc3YpOwkvKiBhbmQgaXQncyBvayB0byBwYXJzZSBkaXJlY3Rvcmll cyAqLwotCQlpZiAobnApIGZyZWUobnApOwotI2lmbmRlZiBOT0xBU1RGSUxFCi0JCW1ha2VzdHIo Jmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsKLSNlbmRpZgkvKiBOT0xBU1RGSUxFICovCi0JCXJldHVy bih4KTsKLQkgICAgfQotCSAgICBpZiAoeSA9PSAwKSB7CQkvKiBGaWxlIHdhcyBub3QgZm91bmQg Ki8KLQkJaW50IGRvc2VhcmNoID0gMDsKLQkJZG9zZWFyY2ggPSAocGF0aCAhPSBOVUxMKTsgLyog QSBzZWFyY2ggcGF0aCB3YXMgZ2l2ZW4gKi8KLQkJaWYgKGRvc2VhcmNoKSB7Ci0JCSAgICBkb3Nl YXJjaCA9IGhhc25vcGF0aChzdik7IC8qIEZpbGVuYW1lIGluY2x1ZGVzIG5vIHBhdGggKi8KLQkJ ICAgIGRlYnVnKEYxMTEsImNtaWZpcCBoYXNub3BhdGgiLHN2LGRvc2VhcmNoKTsKLQkJfQotCQlp ZiAoZG9zZWFyY2gpIHsJCS8qIFNlYXJjaCB0aGUgcGF0aC4uLiAqLwotCQkgICAgY2hhciAqIHB0 ciA9IHBhdGg7Ci0JCSAgICBjaGFyIGM7Ci0JCSAgICB3aGlsZSAoMSkgewotCQkJYyA9ICpwdHI7 Ci0JCQlpZiAoYyA9PSBQQVRIU0VQIHx8IGMgPT0gTlVMKSB7Ci0JCQkgICAgaWYgKCEqcGF0aCkg ewotCQkJCXBhdGggPSBOVUxMOwotCQkJCWJyZWFrOwotCQkJICAgIH0KLQkJCSAgICAqcHRyID0g TlVMOwotI2lmZGVmIFVOSVgKLS8qIEJ5IGRlZmluaXRpb24gb2YgQ0RQQVRILCBhbiBlbXB0eSBt ZW1iZXIgZGVub3RlcyB0aGUgY3VycmVudCBkaXJlY3RvcnkgKi8KLQkJCSAgICBpZiAoISpwYXRo KQotCQkJICAgICAgY2tzdHJuY3B5KGF0bWJ1ZiwiLiIsQVRNQkwpOwotCQkJICAgIGVsc2UKLSNl bmRpZiAvKiBVTklYICovCi0JCQkgICAgICBja3N0cm5jcHkoYXRtYnVmLHBhdGgsQVRNQkwpOwot I2lmZGVmIFZNUwotCQkJICAgIGF0bWJ1ZltBVE1CTF0gPSBOVUw7Ci0vKiBJZiB3ZSBoYXZlIGEg bG9naWNhbCBuYW1lLCBldmFsdWF0ZSBpdCByZWN1cnNpdmVseSAqLwotCQkJICAgIGlmICgqKHB0 ci0xKSA9PSAnOicpIHsgLyogTG9naWNhbCBuYW1lIGVuZHMgaW4gOiAqLwotCQkJCWNoYXIgKnA7 IGludCBuOwotCQkJCXdoaWxlICgoKG4gPSBzdHJsZW4oYXRtYnVmKSkgID4gMCkgJiYKLQkJCQkg ICAgICAgYXRtYnVmW24tMV0gPT0gJzonKSB7Ci0JCQkJICAgIGF0bWJ1ZltuLTFdID0gTlVMOwot CQkJCSAgICBmb3IgKHAgPSBhdG1idWY7ICpwOyBwKyspCi0JCQkJICAgICAgaWYgKGlzbG93ZXIo KnApKSAqcCA9IHRvdXBwZXIoKnApOwotCQkJCSAgICBkZWJ1ZyhGMTExLCJjbWRpciBDRFBBVEgg TE4gMSIsYXRtYnVmLG4pOwotCQkJCSAgICBwID0gZ2V0ZW52KGF0bWJ1Zik7Ci0JCQkJICAgIGRl YnVnKEYxMTAsImNtZGlyIENEUEFUSCBMTiAyIixwLDApOwotCQkJCSAgICBpZiAoIXApCi0JCQkJ ICAgICAgYnJlYWs7Ci0JCQkJICAgIHN0cm5jcHkoYXRtYnVmLHAsQVRNQkwpOwotCQkJCSAgICBh dG1idWZbQVRNQkxdID0gTlVMOwotCQkJCX0KLQkJCSAgICB9Ci0jZWxzZQotI2lmZGVmIE9TMgot CQkJICAgIGlmICgqKHB0ci0xKSAhPSAnXFwnICYmICoocHRyLTEpICE9ICcvJykKLQkJCSAgICAg IGNrc3RybmNhdChhdG1idWYsIlxcIixBVE1CTCk7Ci0jZWxzZQotI2lmZGVmIFVOSVgKLQkJCSAg ICBpZiAoKihwdHItMSkgIT0gJy8nKQotCQkJICAgICAgY2tzdHJuY2F0KGF0bWJ1ZiwiLyIsQVRN QkwpOwotI2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJhbAotCQkJICAgIGlmICgqKHB0ci0xKSAhPSAn OicpCi0JCQkgICAgICBja3N0cm5jYXQoYXRtYnVmLCI6IixBVE1CTCk7Ci0jZW5kaWYgLyogZGF0 YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYg LyogVk1TICovCi0JCQkgICAgY2tzdHJuY2F0KGF0bWJ1ZixzdixBVE1CTCk7Ci0JCQkgICAgZGVi dWcoRjExMCwiY21pZmlwIGFkZCBwYXRoIixhdG1idWYsMCk7Ci0JCQkgICAgaWYgKGMgPT0gUEFU SFNFUCkgcHRyKys7Ci0JCQkgICAgcGF0aCA9IHB0cjsKLQkJCSAgICBicmVhazsKLQkJCX0KLQkJ CXB0cisrOwotCQkgICAgfQotCQkgICAgeCA9IDE7Ci0JCSAgICBpbndvcmQgPSAwOwotCQkgICAg Y2MgPSAwOwotCQkgICAgeGMgPSAoaW50KSBzdHJsZW4oYXRtYnVmKTsKLQkJICAgICp4cCA9ICIi OwotCQkgICAgZ290byBpX3BhdGg7Ci0JCX0KLQkJaWYgKGQpIHsKLQkJICAgIGlmIChzdikgZnJl ZShzdik7Ci0JCSAgICBpZiAobnApIGZyZWUobnApOwotCQkgICAgcmV0dXJuKC0yKTsKLQkJfSBl bHNlIHsKLQkJICAgIGlmICghbm9tc2cpIHsKLSNpZmRlZiBDS1JPT1QKLQkJCWlmIChja3Jvb3Rl cnIpCi0JCQkgIHByaW50ZigiP09mZiBMaW1pdHM6ICVzXG4iLHN2KTsKLQkJCWVsc2UKLSNlbmRp ZiAvKiBDS1JPT1QgKi8KLQkJCSAgaWYgKCFxdWlldCkKLQkJCSAgICBwcmludGYoIj9ObyAlcyBt YXRjaCAtICVzXG4iLAotCQkJCSBkaXJmbGcgPyAiZGlyZWN0b3JpZXMiIDogImZpbGVzIiwgc3Yp OwotCQkgICAgfQotCQkgICAgaWYgKHN2KSBmcmVlKHN2KTsKLQkJICAgIGlmIChucCkgZnJlZShu cCk7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0JICAgIH0gZWxzZSBpZiAoeSA8IDApIHsKLSNp ZmRlZiBDS1JPT1QKLQkJaWYgKGNrcm9vdGVycikKLQkJICBwcmludGYoIj9PZmYgTGltaXRzOiAl c1xuIixzdik7Ci0JCWVsc2UKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQkJICBwcmludGYoIj9Ub28g bWFueSAlcyBtYXRjaCAtICVzXG4iLAotCQkJIGRpcmZsZyA/ICJkaXJlY3RvcmllcyIgOiAiZmls ZXMiLCBzdik7Ci0JCWlmIChzdikgZnJlZShzdik7Ci0JCWlmIChucCkgZnJlZShucCk7Ci0JCXJl dHVybigtOSk7Ci0JICAgIH0gZWxzZSBpZiAoKndpbGQgfHwgeSA+IDEpIHsKLQkJaWYgKHN2KSBm cmVlKHN2KTsKLQkJaWYgKG5wKSBmcmVlKG5wKTsKLSNpZm5kZWYgTk9MQVNURklMRQotCQltYWtl c3RyKCZsYXN0ZmlsZSx0bXBsYXN0ZmlsZSk7Ci0jZW5kaWYJLyogTk9MQVNURklMRSAqLwotCQly ZXR1cm4oeCk7Ci0JICAgIH0KLQotCSAgICAvKiBJZiBub3Qgd2lsZCwgc2VlIGlmIGl0IGV4aXN0 cyBhbmQgaXMgcmVhZGFibGUuICovCi0KLQkgICAgZGVidWcoRjExMSwiY21pZmkgc3Ygbm90IHdp bGQiLHN2LCp3aWxkKTsKLQkgICAgaWYgKGV4cGFuZGVkKQotCSAgICAgIHpuZXh0KCp4cCk7CQkv KiBHZXQgZmlyc3QgKG9ubHk/KSBtYXRjaGluZyBmaWxlICovCi0JICAgIGlmIChkaXJmbGcpCQkJ LyogTWF5YmUgd2lsZCBhbmQgZXhwYW5kZWQgKi8KLQkgICAgICBpdHNhZGlyID0gaXNkaXIoKnhw KTsJLyogc28gZG8gdGhpcyBhZ2Fpbi4gKi8KLQkgICAgZmlsZXNpemUgPSBkaXJmbGcgPyBpdHNh ZGlyIDogemNoa2koKnhwKTsgLyogQ2hlY2sgYWNjZXNzaWJpbGl0eSAqLwotCSAgICBpZiAoZXhw YW5kZWQpIHsKLSNpZmRlZiBaWFJFV0lORAotCQluZmlsZXMgPSB6eHJld2luZCgpOwkvKiBSZXdp bmQgc28gbmV4dCB6bmV4dCgpIGdldHMgMXN0ICovCi0jZWxzZQotCi0JCW56eG9wdHMgfD0gZGly ZmxnID8gWlhfRElST05MWSA6IDA7Ci0JCWlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhfTUFU Q0hET1Q7Ci0JCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKLQkJbmZpbGVz ID0gbnp4cGFuZCgqeHAsbnp4b3B0cyk7Ci0jZW5kaWYgLyogWlhSRVdJTkQgKi8KLQkgICAgfQot CSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBuZmlsZXMiLCp4cCxuZmlsZXMpOwotCSAgICBkZWJ1ZyhG MTAxLCJjbWlmaSBmaWxlc2l6ZSIsIiIsZmlsZXNpemUpOwotCSAgICBmcmVlKHN2KTsJCQkvKiBk b25lIHdpdGggdGhpcyAqLwotCSAgICBzdiA9IE5VTEw7Ci0JICAgIGlmIChkaXJmbGcgJiYgIWZp bGVzaXplKSB7Ci0JCXByaW50ZigiP05vdCBhIGRpcmVjdG9yeSAtICVzXG4iLCp4cCk7Ci0jaWZk ZWYgQ0tDSEFOTkVMSU8KLQkJel9lcnJvciA9IEZYX0FDQzsKLSNlbmRpZiAvKiBDS0NIQU5ORUxJ TyAqLwotCQlyZXR1cm4oLTkpOwotCSAgICB9IGVsc2UgaWYgKGZpbGVzaXplID09IChDS19PRkZf VCktMykgewotCQlpZiAoIXhjbWZkYikgewotCQkgICAgaWYgKGRpcmFjdGl2ZSkKLQkJICAgICAg LyogRG9uJ3Qgc2hvdyBmaWxlbmFtZSBpZiB3ZSdyZSBub3QgYWxsb3dlZCB0byBzZWUgaXQgKi8K LQkJICAgICAgcHJpbnRmKCI/UmVhZCBwZXJtaXNzaW9uIGRlbmllZFxuIik7Ci0JCSAgICBlbHNl Ci0JCSAgICAgIHByaW50ZigiP1JlYWQgcGVybWlzc2lvbiBkZW5pZWQgLSAlc1xuIiwqeHApOwot CQl9Ci0JCWlmIChucCkgZnJlZShucCk7Ci0jaWZkZWYgQ0tDSEFOTkVMSU8KLQkJel9lcnJvciA9 IEZYX0FDQzsKLSNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLwotCQlyZXR1cm4oeGNtZmRiID8gLTYg OiAtOSk7Ci0JICAgIH0gZWxzZSBpZiAoZmlsZXNpemUgPT0gKENLX09GRl9UKS0yKSB7Ci0JCWlm ICghcmVjdXJzaXZlKSB7Ci0JCSAgICBpZiAobnApIGZyZWUobnApOwotCQkgICAgaWYgKGQpIHsK LSNpZm5kZWYgTk9MQVNURklMRQotCQkJbWFrZXN0cigmbGFzdGZpbGUsdG1wbGFzdGZpbGUpOwot I2VuZGlmCS8qIE5PTEFTVEZJTEUgKi8KLQkJCXJldHVybigwKTsKLQkJICAgIH0KLQkJICAgIGlm ICgheGNtZmRiKQotCQkgICAgICBwcmludGYoIj9GaWxlIG5vdCByZWFkYWJsZSAtICVzXG4iLCp4 cCk7Ci0jaWZkZWYgQ0tDSEFOTkVMSU8KLQkJICAgIHpfZXJyb3IgPSBGWF9BQ0M7Ci0jZW5kaWYg LyogQ0tDSEFOTkVMSU8gKi8KLQkJICAgIHJldHVybih4Y21mZGIgPyAtNiA6IC05KTsKLQkJfQot CSAgICB9IGVsc2UgaWYgKGZpbGVzaXplIDwgKENLX09GRl9UKTApIHsKLQkJaWYgKG5wKSBmcmVl KG5wKTsKLQkJaWYgKCFub21zZyAmJiAheGNtZmRiKQotCQkgIHByaW50ZigiP0ZpbGUgbm90IGZv dW5kIC0gJXNcbiIsKnhwKTsKLSNpZmRlZiBDS0NIQU5ORUxJTwotCQl6X2Vycm9yID0gRlhfRk5G OwotI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCi0JCXJldHVybih4Y21mZGIgPyAtNiA6IC05KTsK LQkgICAgfQotCSAgICBpZiAobnApIGZyZWUobnApOwotI2lmbmRlZiBOT0xBU1RGSUxFCi0JICAg IG1ha2VzdHIoJmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsKLSNlbmRpZgkvKiBOT0xBU1RGSUxFICov Ci0JICAgIHJldHVybih4KTsKLQotI2lmbmRlZiBNQUMKLQkgIGNhc2UgMjoJCQkvKiBFU0MgKi8K LQkgICAgZGVidWcoRjEwMSwiY21pZmkgZXNjLCB4YyIsIiIseGMpOwotCSAgICBpZiAoeGMgPT0g MCkgewotCQlpZiAoKnhkZWYpIHsKLQkJICAgIHByaW50ZigiJXMgIix4ZGVmKTsgLyogSWYgYXQg YmVnaW5uaW5nIG9mIGZpZWxkICovCi0jaWZkZWYgR0VNRE9TCi0JCSAgICBmZmx1c2goc3Rkb3V0 KTsKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQkJICAgIGlud29yZCA9IGNtZmxncyA9IDA7Ci0JCSAg ICBhZGRidWYoeGRlZik7CS8qIFN1cHBseSBkZWZhdWx0LiAqLwotCQkgICAgaWYgKHNldGF0bSh4 ZGVmLDApIDwgMCkgewotCQkJcHJpbnRmKCJEZWZhdWx0IG5hbWUgdG9vIGxvbmdcbiIpOwotCQkJ aWYgKG5wKSBmcmVlKG5wKTsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9Ci0JCX0gZWxzZSB7CQkv KiBObyBkZWZhdWx0ICovCi0JCSAgICBibGVlcChCUF9XQVJOKTsKLQkJfQotCQlicmVhazsKLQkg ICAgfQotCSAgICBpZiAoKip4cCA9PSAneycpIHsJCS8qIERpZCB1c2VyIHR5cGUgb3BlbmluZyBi cmFjZS4uLiAqLwotCQkqeHAgPSAqeHAgKyAxOwotCQl4Yy0tOwotCQljYy0tOwotCQlxZmxhZyA9 ICd9JzsKLQkgICAgfSBlbHNlIGlmIChkYmxxdW8gJiYgKip4cCA9PSAnIicpIHsJLyogb3IgZG91 YmxlcXVvdGU/ICovCi0JCSp4cCA9ICp4cCArIDE7CQkvKiBJZiBzbyBpZ25vcmUgaXQgYW5kIHNw YWNlIHBhc3QgaXQgKi8KLQkJeGMtLTsKLQkJY2MtLTsKLQkJcWZsYWcgPSAnIic7Ci0JICAgIH0K LSNpZm5kZWYgTk9TUEwKLQkgICAgaWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rp b24gaXMgZ2l2ZW4gKi8KLSNpZmRlZiBET0NIS1ZBUgotCQljaGFyICpzID0gKnhwOwkJLyogU2Vl IGlmIHRoZXJlIGFyZSBhbnkgdmFyaWFibGVzIGluICovCi0JCXdoaWxlICgqcykgewkJLyogdGhl IHN0cmluZyBhbmQgaWYgc28sIGV4cGFuZCBpdC4gICovCi0JCSAgICBpZiAoY2hrdmFyKHMpKSB7 Ci0jZW5kaWYgLyogRE9DSEtWQVIgKi8KLQkJCXpxID0gYXR4YnVmOwotCQkJYXR4biA9IENNREJM OwotCQkJaWYgKCh4ID0gKCpmKSgqeHAsJnpxLCZhdHhuKSkgPCAwKSB7Ci0JCQkgICAgaWYgKG5w KSBmcmVlKG5wKTsKLQkJCSAgICByZXR1cm4oLTIpOwotCQkJfQotI2lmZGVmIERPQ0hLVkFSCi0J CSAgICAvKiByZWR1Y2UgY2MgYnkgbnVtYmVyIG9mIFxcIGNvbnN1bWVkIGJ5IGNvbnZlcnNpb24g Ki8KLQkJICAgIC8qIGZ1bmN0aW9uIChuZWVkZWQgZm9yIE9TLzIsIHdoZXJlIFwgaXMgcGF0aCBz ZXBhcmF0b3IpICovCi0JCQljYyAtPSAoc3RybGVuKCp4cCkgLSBzdHJsZW4oYXR4YnVmKSk7Ci0j ZW5kaWYgLyogRE9DSEtWQVIgKi8KLQkJCSp4cCA9IGF0eGJ1ZjsKLQkJCWlmICghYXR4YnVmWzBd KSB7IC8qIFJlc3VsdCBlbXB0eSwgdXNlIGRlZmF1bHQgKi8KLQkJCSAgICAqeHAgPSB4ZGVmOwot CQkJICAgIGNjID0gc3RybGVuKHhkZWYpOwotCQkJfQotI2lmZGVmIERPQ0hLVkFSCi0JCQlicmVh azsKLQkJICAgIH0KLQkJICAgIHMrKzsKLQkJfQotI2VuZGlmIC8qIERPQ0hLVkFSICovCi0JICAg IH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgRFRJTERFCi0JICAgIGlmIChkaXJmbGcg JiYgKigqeHApID09ICd+JykgewotCQlkZWJ1ZyhGMTExLCJjbWlmaSB0aWxkZV9leHBhbmQgQSIs KnhwLGNjKTsKLQkJZGlycCA9IHRpbGRlX2V4cGFuZCgqeHApOyAvKiBFeHBhbmQgdGlsZGUsIGlm IGFueS4uLiAqLwotCQlpZiAoIWRpcnApIGRpcnAgPSAiIjsKLQkJaWYgKCpkaXJwKSB7Ci0JCSAg ICBpbnQgaSwgeHg7Ci0JCSAgICBjaGFyICogc3A7Ci0JCSAgICB4YyA9IGNjOwkJLyogTGVuZ3Ro IG9mIH50aGluZyAqLwotCQkgICAgeHggPSBzZXRhdG0oZGlycCwwKTsgLyogQ29weSBleHBhbnNp b24gdG8gYXRvbSBidWZmZXIgKi8KLQkJICAgIGRlYnVnKEYxMTEsImNtaWZpIHRpbGRlX2V4cGFu ZCBCIixhdG1idWYsY2MpOwotCQkgICAgaWYgKHh4IDwgMCkgewotCQkJcHJpbnRmKCJFeHBhbmRl ZCBuYW1lIHRvbyBsb25nXG4iKTsKLQkJCWlmIChucCkgZnJlZShucCk7Ci0JCQlyZXR1cm4oLTkp OwotCQkgICAgfQotCQkgICAgZGVidWcoRjExMSwiY21pZmkgdGlsZGVfZXhwYW5kIHhjIiwiIix4 Yyk7Ci0JCSAgICBmb3IgKGkgPSAwOyBpIDwgeGM7IGkrKykgewotCQkJY21kY2hhcmRlbCgpOwkv KiBCYWNrIHVwIG92ZXIgfnRoaW5nICovCi0JCQlicC0tOwotCQkgICAgfQotCQkgICAgeGMgPSBj YzsJCS8qIEhvdyBtYW55IG5ldyBvbmVzIHdlIGp1c3QgZ290ICovCi0JCSAgICBzcCA9IGF0bWJ1 ZjsKLQkJICAgIHByaW50ZigiJXMiLHNwKTsJLyogUHJpbnQgdGhlbSAqLwotCQkgICAgd2hpbGUg KCgqYnArKyA9ICpzcCsrKSkgOwkvKiBDb3B5IHRvIGNvbW1hbmQgYnVmZmVyICovCi0JCSAgICBi cC0tOwkgICAgCSAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLwotCQl9Ci0JCSp4cCA9IGF0 bWJ1ZjsKLQkgICAgfQotI2VuZGlmIC8qIERUSUxERSAqLwotCi0JICAgIHNwID0gKnhwICsgY2M7 Ci0KLSNpZmRlZiBVTklYT1JPU0sKLQkgICAgaWYgKCFzdHJjbXAoYXRtYnVmLCIuLiIpKSB7Ci0J CXByaW50ZigiICIpOwotCQlja3N0cm5jYXQoY21kYnVmLCIgIixDTURCTCk7Ci0JCWNjKys7Ci0J CWJwKys7Ci0JCSp3aWxkID0gMDsKLQkJKnhwID0gYXRtYnVmOwotCQlicmVhazsKLQkgICAgfSBl bHNlIGlmICghc3RyY21wKGF0bWJ1ZiwiLiIpKSB7Ci0JCWJsZWVwKEJQX1dBUk4pOwotCQlpZiAo bnApIGZyZWUobnApOwotCQlyZXR1cm4oLTEpOwotCSAgICB9IGVsc2UgewotCQkvKiBUaGlzIHBh dGNoZXMgYSBnbGl0Y2ggd2hlbiB1c2VyIHR5cGVzICIuL2ZvbzxFU0M+IiAqLwotCQkvKiBpbiB3 aGljaCB0aGUgbmV4dCB0d28gY2hhcnMgYXJlIG9taXR0ZWQgZnJvbSB0aGUgKi8KLQkJLyogZXhw YW5zaW9uLiAgVGhlcmUgc2hvdWxkIGJlIGEgYmV0dGVyIGZpeCwgaG93ZXZlciwgKi8KLQkJLyog c2luY2UgdGhlcmUgaXMgbm8gcHJvYmxlbSB3aXRoICIuLi9mb288RVNDPiIuICovCi0JCWNoYXIg KnAgPSAqeHA7Ci0JCWlmICgqcCA9PSAnLicgJiYgKihwKzEpID09ICcvJykKLQkJICBjYyAtPSAy OwotCSAgICB9Ci0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbAot CSAgICAqc3ArKyA9ICcrJzsJCS8qIERhdGEgR2VuZXJhbCBBT1Mgd2lsZGNhcmQgKi8KLSNlbHNl Ci0JICAgICpzcCsrID0gJyonOwkJLyogT3RoZXJzICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwg Ki8KLQkgICAgKnNwLS0gPSAnXDAnOwotI2lmZGVmIEdFTURPUwotCSAgICBpZiAoIXN0cmNocigq eHAsICcuJykpCS8qIGFiZGUuZSAtPiBhYmNkZS5lKiAqLwotCSAgICAgIHN0cmNhdCgqeHAsICIu KiIpOwkvKiBhYmMgLT4gYWJjKi4qICovCi0jZW5kaWYgLyogR0VNRE9TICovCi0JICAgIC8qIEFk ZCB3aWxkY2FyZCBhbmQgZXhwYW5kIGxpc3QuICovCi0jaWZkZWYgQ09NTUVOVAotCSAgICAvKiBU aGlzIGtpbGxzIHBhcnRpYWwgY29tcGxldGlvbiB3aGVuIEVTQyBnaXZlbiBpbiBwYXRoIHNlZ21l bnQgKi8KLQkgICAgbnp4b3B0cyB8PSBkaXJmbGcgPyBaWF9ESVJPTkxZIDogKGQgPyAwIDogWlhf RklMT05MWSk7Ci0jZWxzZQotCSAgICAvKiBuenhvcHRzID0gMDsgKi8KLSNlbmRpZiAvKiBDT01N RU5UICovCi0JICAgIGlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhfTUFUQ0hET1Q7Ci0JICAg IGlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKLQkgICAgeSA9IG56eHBhbmQo KnhwLG56eG9wdHMpOwotCSAgICBuZmlsZXMgPSB5OwotCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBu enhwYW5kIiwqeHAseSk7Ci0JICAgIGlmICh5ID4gMCkgewotI2lmZGVmIE9TMgotICAgICAgICAg ICAgICAgIHpuZXh0KGZpbGJ1Zik7CQkvKiBHZXQgZmlyc3QgKi8KLSNpZmRlZiBaWFJFV0lORAot CQl6eHJld2luZCgpOwkJLyogTXVzdCAicmV3aW5kIiAqLwotI2Vsc2UKLQkJbnp4cGFuZCgqeHAs bnh6b3B0cyk7Ci0jZW5kaWYgLyogWlhSRVdJTkQgKi8KLSNlbHNlICAvKiBOb3QgT1MyICovCi0g ICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZpbGJ1ZixtdGNoc1swXSxDS01BWFBBVEgpOwotI2Vu ZGlmIC8qIE9TMiAqLwotCSAgICB9IGVsc2UKLQkgICAgICAqZmlsYnVmID0gJ1wwJzsKLQkgICAg ZmlsYnVmW0NLTUFYUEFUSF0gPSBOVUw7Ci0JICAgICpzcCA9ICdcMCc7CQkJLyogUmVtb3ZlIHdp bGRjYXJkLiAqLwotCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBmaWxidWYiLGZpbGJ1Zix5KTsKLQkg ICAgZGVidWcoRjExMSwiY21pZmkgKnhwIiwqeHAsY2MpOwotCi0JICAgICp3aWxkID0gKHkgPiAx KTsKLQkgICAgaWYgKHkgPT0gMCkgewotCQlpZiAoIW5vbXNnKSB7Ci0jaWZkZWYgQ0tST09UCi0J CSAgICBpZiAoY2tyb290ZXJyKQotCQkgICAgICBwcmludGYoIj9PZmYgTGltaXRzOiAlc1xuIixh dG1idWYpOwotCQkgICAgZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwotCQkgICAgICBwcmludGYo Ij9ObyAlcyBtYXRjaCAtICVzXG4iLAotCQkJICAgZGlyZmxnID8gImRpcmVjdG9yaWVzIiA6ICJm aWxlcyIsIGF0bWJ1Zik7Ci0JCSAgICBpZiAobnApIGZyZWUobnApOwotCQkgICAgcmV0dXJuKC05 KTsKLQkJfSBlbHNlIHsKLQkJICAgIGJsZWVwKEJQX1dBUk4pOwotCQkgICAgaWYgKG5wKSBmcmVl KG5wKTsKLQkJICAgIHJldHVybigtMSk7Ci0JCX0KLQkgICAgfSBlbHNlIGlmICh5IDwgMCkgewot I2lmZGVmIENLUk9PVAotCQlpZiAoY2tyb290ZXJyKQotCQkgIHByaW50ZigiP09mZiBMaW1pdHM6 ICVzXG4iLGF0bWJ1Zik7Ci0JCWVsc2UKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQkJICBwcmludGYo Ij9Ub28gbWFueSAlcyBtYXRjaCAtICVzXG4iLAotCQkJIGRpcmZsZyA/ICJkaXJlY3RvcmllcyIg OiAiZmlsZXMiLCBhdG1idWYpOwotCQlpZiAobnApIGZyZWUobnApOwotCQlyZXR1cm4oLTkpOwot CSAgICB9IGVsc2UgaWYgKHkgPiAxCQkvKiBOb3QgdW5pcXVlICovCi0jaWZuZGVmIFZNUwotCQkg ICAgICAgfHwgKHkgPT0gMSAmJiBpc2RpcihmaWxidWYpKSAvKiBVbmlxdWUgZGlyZWN0b3J5ICov Ci0jZW5kaWYgLyogVk1TICovCi0JCSAgICAgICApIHsKLSNpZm5kZWYgTk9QQVJUSUFMCi0vKiBQ YXJ0aWFsIGZpbGVuYW1lIGNvbXBsZXRpb24gKi8KLQkJaW50IGosIGs7IGNoYXIgYzsKLQkJayA9 IDA7Ci0JCWRlYnVnKEYxMTEsImNtaWZpIHBhcnRpYWwiLGZpbGJ1ZixjYyk7Ci0jaWZkZWYgT1My Ci0JCXsKLQkJICAgIGludCBjdXIgPSAwLAotCQkgICAgbGVuID0gMCwKLQkJICAgIGxlbjIgPSAw LAotCQkgICAgbWluID0gc3RybGVuKGZpbGJ1ZiksCi0JCSAgICBmb3VuZCA9IDA7Ci0JCSAgICBj aGFyIGxvY2FsZm5bQ0tNQVhQQVRIKzFdOwotCi0JCSAgICBsZW4gPSBtaW47Ci0JCSAgICBmb3Ig KGogPSAxOyBqIDw9IHk7IGorKykgewotCQkJem5leHQobG9jYWxmbik7Ci0JCQlpZiAoZGlyZmxn ICYmICFpc2Rpcihsb2NhbGZuKSkKLQkJCSAgY29udGludWU7Ci0JCQlmb3VuZCA9IDE7Ci0JCQls ZW4yID0gc3RybGVuKGxvY2FsZm4pOwotCQkJZm9yIChjdXIgPSBjYzsKLQkJCSAgICAgY3VyIDwg bGVuICYmIGN1ciA8IGxlbjIgJiYgY3VyIDw9IG1pbjsKLQkJCSAgICAgY3VyKysKLQkJCSAgICAg KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1MvMiBvciBXaW5kb3dzLCBjYXNl IGRvZXNuJ3QgbWF0dGVyICovCi0JCQkgICAgaWYgKHRvbG93ZXIoZmlsYnVmW2N1cl0pICE9IHRv bG93ZXIobG9jYWxmbltjdXJdKSkKLQkJCSAgICAgIGJyZWFrOwotCQkJfQotCQkJaWYgKGN1ciA8 IG1pbikKLQkJCSAgbWluID0gY3VyOwotCQkgICAgfQotCQkgICAgaWYgKCFmb3VuZCkKLQkJICAg ICAgbWluID0gY2M7Ci0JCSAgICBmaWxidWZbbWluXSA9IE5VTDsKLQkJICAgIGlmIChtaW4gPiBj YykKLQkJICAgICAgaysrOwotCQl9Ci0jZWxzZSAvKiBPUzIgKi8KLQkJZm9yIChpID0gY2M7IChj ID0gZmlsYnVmW2ldKTsgaSsrKSB7Ci0JCSAgICBmb3IgKGogPSAxOyBqIDwgeTsgaisrKQotCQkg ICAgICBpZiAobXRjaHNbal1baV0gIT0gYykgYnJlYWs7Ci0JCSAgICBpZiAoaiA9PSB5KSBrKys7 Ci0JCSAgICBlbHNlIGZpbGJ1ZltpXSA9IGZpbGJ1ZltpKzFdID0gTlVMOwotCQl9Ci0jZW5kaWYg LyogT1MyICovCi0KLQotI2lmbmRlZiBWTVMKLQkJLyogaXNkaXIoKSBmdW5jdGlvbiByZXF1aXJl ZCBmb3IgdGhpcyEgKi8KLQkJaWYgKHkgPT0gMSAmJiBpc2RpcihmaWxidWYpKSB7IC8qIERvbnQg d2UgYWxyZWFkeSBrbm93IHRoaXM/ICovCi0JCSAgICBpbnQgbGVuOwotCQkgICAgbGVuID0gc3Ry bGVuKGZpbGJ1Zik7Ci0JCSAgICBpZiAobGVuID4gMCAmJiBsZW4gPCBBVE1CTCAtIDEpIHsKLQkJ CWlmIChmaWxidWZbbGVuLTFdICE9IGRpcnNlcCkgewotCQkJICAgIGZpbGJ1ZltsZW5dID0gZGly c2VwOwotCQkJICAgIGZpbGJ1ZltsZW4rMV0gPSBOVUw7Ci0JCQl9Ci0JCSAgICB9Ci0vKgotICBB dCB0aGlzIHBvaW50LCBiZWZvcmUganVzdCBkb2luZyBwYXJ0aWFsIGNvbXBsZXRpb24sIHdlIHNo b3VsZCBsb29rIGZpcnN0IHRvCi0gIHNlZSBpZiB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGRvZXMgaW5k ZWVkIGhhdmUgYW55IHN1YmRpcmVjdG9yaWVzIChkaXJmbGcpIG9yCi0gIGZpbGVzICghZGlyZmxn KTsgaWYgaXQgZG9lc24ndCB3ZSBzaG91bGQgZG8gZnVsbCBjb21wbGV0aW9uLiAgT3RoZXJ3aXNl LCB0aGUKLSAgcmVzdWx0IGxvb2tzIGZ1bm55IHRvIHRoZSB1c2VyIGFuZCAiPyIgYmxvd3MgdXAg dGhlIGNvbW1hbmQgZm9yIG5vIGdvb2QKLSAgcmVhc29uLgotKi8KLQkJICAgIHsKLQkJCWludCBm bGFncyA9IDA7Ci0JCQlmaWxidWZbbGVuKzFdID0gJyonOwotCQkJZmlsYnVmW2xlbisyXSA9IE5V TDsKLQkJCWlmIChkaXJmbGcpIGZsYWdzID0gWlhfRElST05MWTsKLQkJCWNoaWxkcmVuID0gbnp4 cGFuZChmaWxidWYsZmxhZ3MpOwotCQkJZGVidWcoRjExMSwiY21pZmkgY2hpbGRyZW4iLGZpbGJ1 ZixjaGlsZHJlbik7Ci0JCQlmaWxidWZbbGVuKzFdID0gTlVMOwotCQkJbnp4cGFuZChmaWxidWYs ZmxhZ3MpOyAvKiBSZXN0b3JlIHByZXZpb3VzIGxpc3QgKi8KLQkJCWlmIChjaGlsZHJlbiA9PSAw KQotCQkJICBnb3RvIE5PU1VCRElSUzsKLQkJICAgIH0KLQkJICAgIGlmIChsZW4gKyAxID4gY2Mp Ci0JCSAgICAgIGsrKzsKLQkJfQotICAgICAgICAgICAgICAgIC8qIEFkZCBkb3VibGVxdW90ZXMg aWYgdGhlcmUgYXJlIHNwYWNlcyBpbiB0aGUgbmFtZSAqLwotCQl7Ci0JCSAgICBpbnQgeDsKLQkJ ICAgIGlmIChxZmxhZykgewotCQkJeCA9IChxZmxhZyA9PSAnfScpOyAvKiAob3IgYnJhY2VzKSAq LwotCQkgICAgfSBlbHNlIHsKLQkJCXggPSAhZGJscXVvOwotCQkgICAgfQotCQkgICAgaWYgKGZp bGJ1ZlswXSAhPSAnIicgJiYgZmlsYnVmWzBdICE9ICd7JykKLQkJICAgICAgayA9IGRxdW90ZShm aWxidWYsQVRNQkwseCk7Ci0JCX0KLSNlbmRpZiAvKiBWTVMgKi8KLQkJZGVidWcoRjExMSwiY21p ZmkgUkVQQUlOVCBmaWxidWYiLGZpbGJ1ZixrKTsKLQkJaWYgKGsgPiAwKSB7CQkvKiBHb3QgbW9y ZSBjaGFyYWN0ZXJzICovCi0JCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBSRVBBSU5UIGNjIiwiIixj Yyk7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBSRVBBSU5UIHhjIiwiIix4Yyk7Ci0JCSAgICBk ZWJ1ZyhGMTEwLCJjbWlmaSBSRVBBSU5UIGJwLWNjIixicC1jYywwKTsKLQkJICAgIGRlYnVnKEYx MTAsImNtaWZpIFJFUEFJTlQgYnAteGMiLGJwLXhjLDApOwotCQkgICAgc3AgPSBmaWxidWYgKyBj YzsJLyogUG9pbnQgdG8gbmV3IG9uZXMgKi8KLQkJICAgIGlmIChxZmxhZyB8fCBzdHJuY21wKGZp bGJ1ZixicC1jYyxjYykpIHsgLyogUmVwYWludD8gKi8KLQkJCWludCB4OwotCQkJeCA9IGNjOwot CQkJaWYgKHFmbGFnKSB4Kys7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgeDsgaSsrKSB7Ci0JCQkgICAg Y21kY2hhcmRlbCgpOyAvKiBCYWNrIHVwIG92ZXIgb2xkIHBhcnRpYWwgc3BlYyAqLwotCQkJICAg IGJwLS07Ci0JCQl9Ci0JCQlzcCA9IGZpbGJ1ZjsJLyogUG9pbnQgdG8gbmV3IHdvcmQgc3RhcnQg Ki8KLQkJCWRlYnVnKEYxMTAsImNtaWZpIGVyYXNlIG9rIixzcCwwKTsKLQkJICAgIH0KLQkJICAg IGNjID0gazsJCS8qIEhvdyBtYW55IG5ldyBvbmVzIHdlIGp1c3QgZ290ICovCi0JCSAgICBwcmlu dGYoIiVzIixzcCk7CS8qIFByaW50IHRoZW0gKi8KLQkJICAgIHdoaWxlICgoKmJwKysgPSAqc3Ar KykpIDsJLyogQ29weSB0byBjb21tYW5kIGJ1ZmZlciAqLwotCQkgICAgYnAtLTsJICAgIAkgICAg ICAgIC8qIEJhY2sgdXAgb3ZlciBOVUwgKi8KLQkJICAgIGRlYnVnKEYxMTAsImNtaWZpIHBhcnRp YWwgY21kYnVmIixjbWRidWYsMCk7Ci0JCSAgICBpZiAoc2V0YXRtKGZpbGJ1ZiwwKSA8IDApIHsK LQkJCXByaW50ZigiP1BhcnRpYWwgbmFtZSB0b28gbG9uZ1xuIik7Ci0JCQlpZiAobnApIGZyZWUo bnApOwotCQkJcmV0dXJuKC05KTsKLQkJICAgIH0KLQkJICAgIGRlYnVnKEYxMTEsImNtaWZpIHBh cnRpYWwgYXRtYnVmIixhdG1idWYsY2MpOwotCQkgICAgKnhwID0gYXRtYnVmOwotCQl9Ci0jZW5k aWYgLyogTk9QQVJUSUFMICovCi0JCWJsZWVwKEJQX1dBUk4pOwotCSAgICB9IGVsc2UgewkJCS8q IFVuaXF1ZSwgY29tcGxldGUgaXQuICAqLwotI2lmbmRlZiBWTVMKLSNpZmRlZiBDS19UTVBESVIK LQkJLyogaXNkaXIoKSBmdW5jdGlvbiByZXF1aXJlZCBmb3IgdGhpcyEgKi8KLQkgICAgICBOT1NV QkRJUlM6Ci0JCWRlYnVnKEYxMTEsImNtaWZpIHVuaXF1ZSIsZmlsYnVmLGNoaWxkcmVuKTsKLQkJ aWYgKGlzZGlyKGZpbGJ1ZikgJiYgY2hpbGRyZW4gPiAwKSB7Ci0JCSAgICBpbnQgbGVuOwotCQkg ICAgbGVuID0gc3RybGVuKGZpbGJ1Zik7Ci0JCSAgICBpZiAobGVuID4gMCAmJiBsZW4gPCBBVE1C TCAtIDEpIHsKLQkJCWlmIChmaWxidWZbbGVuLTFdICE9IGRpcnNlcCkgewotCQkJICAgIGZpbGJ1 ZltsZW5dID0gZGlyc2VwOwotCQkJICAgIGZpbGJ1ZltsZW4rMV0gPSBOVUw7Ci0JCQl9Ci0JCSAg ICB9Ci0JCSAgICBzcCA9IGZpbGJ1ZiArIGNjOwotCQkgICAgYmxlZXAoQlBfV0FSTik7Ci0JCSAg ICBwcmludGYoIiVzIixzcCk7Ci0JCSAgICBjYysrOwotCQkgICAgd2hpbGUgKCgqYnArKyA9ICpz cCsrKSkgOwotCQkgICAgYnAtLTsKLQkJICAgIGlmIChzZXRhdG0oZmlsYnVmLDApIDwgMCkgewot CQkJcHJpbnRmKCI/RGlyZWN0b3J5IG5hbWUgdG9vIGxvbmdcbiIpOwotCQkJaWYgKG5wKSBmcmVl KG5wKTsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9Ci0JCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBk aXJlY3RvcnkgYXRtYnVmIixhdG1idWYsY2MpOwotCQkgICAgKnhwID0gYXRtYnVmOwotCQl9IGVs c2UgewkJLyogTm90IGEgZGlyZWN0b3J5IG9yIGRpcmZsZyAqLwotI2VuZGlmIC8qIENLX1RNUERJ UiAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2lmbmRlZiBWTVMJCQkJLyogVk1TIGRpciBuYW1lcyBh cmUgc3BlY2lhbCAqLwotI2lmbmRlZiBkYXRhZ2VuZXJhbAkJCS8qIFZTIGRpcm5hbWVzIG11c3Qg bm90IGVuZCBpbiAiOiIgKi8KLQkJICAgIGlmIChkaXJmbGcpIHsKLQkJCWludCBsZW47Ci0JCQls ZW4gPSBzdHJsZW4oZmlsYnVmKTsKLQkJCWlmIChsZW4gPiAwICYmIGxlbiA8IEFUTUJMIC0gMSkg ewotCQkJICAgIGlmIChmaWxidWZbbGVuLTFdICE9IGRpcnNlcCkgewotCQkJCWZpbGJ1ZltsZW5d ID0gZGlyc2VwOwotCQkJCWZpbGJ1ZltsZW4rMV0gPSBOVUw7Ci0JCQkgICAgfQotCQkJfQotCQkg ICAgfQotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogVk1TICovCi0JCSAgICBz cCA9IGZpbGJ1ZiArIGNjOwkvKiBQb2ludCBwYXN0IHdoYXQgdXNlciB0eXBlZC4gKi8KLQkJICAg IHsKLQkJCWludCB4OwotCQkJaWYgKHFmbGFnKSB7Ci0JCQkgICAgeCA9IChxZmxhZyA9PSAnfScp OwotCQkJfSBlbHNlIHsKLQkJCSAgICB4ID0gIWRibHF1bzsKLQkJCX0KLQkJCWlmIChmaWxidWZb MF0gIT0gJyInICYmIGZpbGJ1ZlswXSAhPSAneycpCi0JCQkgIGRxdW90ZShmaWxidWYsQVRNQkws eCk7Ci0JCSAgICB9Ci0JCSAgICBpZiAocWZsYWcgfHwgc3RybmNtcChmaWxidWYsYnAtY2MsY2Mp KSB7IC8qIFJlcGFpbnQ/ICovCi0JCQlpbnQgeDsKLQkJCXggPSBjYzsKLQkJCWlmIChxZmxhZykg eCsrOwotCQkJZm9yIChpID0gMDsgaSA8IHg7IGkrKykgewotCQkJICAgIGNtZGNoYXJkZWwoKTsg LyogQmFjayB1cCBvdmVyIG9sZCBwYXJ0aWFsIHNwZWMgKi8KLQkJCSAgICBicC0tOwotCQkJfQot CQkJc3AgPSBmaWxidWY7CS8qIFBvaW50IHRvIG5ldyB3b3JkIHN0YXJ0ICovCi0JCQlkZWJ1ZyhG MTExLCJjbWlmaSBhZnRlciBlcmFzZSBzcD0iLHNwLGNjKTsKLQkJICAgIH0KLQkJICAgIHByaW50 ZigiJXMgIixzcCk7CS8qIFByaW50IHRoZSBjb21wbGV0ZWQgbmFtZS4gKi8KLSNpZmRlZiBHRU1E T1MKLQkJICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIEdFTURPUyAqLwotCQkgICAgYWRk YnVmKHNwKTsJCS8qIEFkZCB0aGUgY2hhcmFjdGVycyB0byBjbWRidWYuICovCi0JCSAgICBpZiAo c2V0YXRtKGZpbGJ1ZiwwKSA8IDApIHsgLyogQW5kIHRvIGF0bWJ1Zi4gKi8KLQkJCXByaW50Zigi P0NvbXBsZXRlZCBuYW1lIHRvbyBsb25nXG4iKTsKLQkJCWlmIChucCkgZnJlZShucCk7Ci0JCQly ZXR1cm4oLTkpOwotCQkgICAgfQotCQkgICAgaW53b3JkID0gY21mbGdzID0gMDsKLQkJICAgICp4 cCA9IGJyc3RyaXAoYXRtYnVmKTsgLyogUmV0dXJuIHBvaW50ZXIgdG8gYXRtYnVmLiAqLwotCQkg ICAgaWYgKGRpcmZsZyAmJiAhaXNkaXIoKnhwKSkgewotCQkJcHJpbnRmKCI/Tm90IGEgZGlyZWN0 b3J5IC0gJXNcbiIsIGZpbGJ1Zik7Ci0JCQlpZiAobnApIGZyZWUobnApOwotCQkJcmV0dXJuKC05 KTsKLQkJICAgIH0KLQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0jaWZuZGVmIE5PTEFTVEZJTEUK LQkJICAgIG1ha2VzdHIoJmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsKLSNlbmRpZgkvKiBOT0xBU1RG SUxFICovCi0JCSAgICByZXR1cm4oMCk7Ci0jaWZuZGVmIFZNUwotI2lmZGVmIENLX1RNUERJUgot CQl9Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0jZW5kaWYgLyogVk1TICovCi0JICAgIH0KLQkg ICAgYnJlYWs7Ci0KLQkgIGNhc2UgMzoJCQkvKiBRdWVzdGlvbiBtYXJrIC0gZmlsZSBtZW51IHdh bnRlZCAqLwotCSAgICBpZiAoKnhobHAgPT0gTlVMKQotCSAgICAgIHByaW50ZihkaXJmbGcgPyAi IERpcmVjdG9yeSBuYW1lIiA6ICIgSW5wdXQgZmlsZSBzcGVjaWZpY2F0aW9uIik7Ci0JICAgIGVs c2UKLQkgICAgICBwcmludGYoIiAlcyIseGhscCk7Ci0jaWZkZWYgR0VNRE9TCi0JICAgIGZmbHVz aChzdGRvdXQpOwotI2VuZGlmIC8qIEdFTURPUyAqLwotCSAgICAvKiBJZiB1c2VyIHR5cGVkIGFu IG9wZW5pbmcgcXVvdGUgb3IgYnJhY2UsIGp1c3Qgc2tpcCBwYXN0IGl0ICovCi0KLQkgICAgaWYg KCoqeHAgPT0gJyInIHx8ICoqeHAgPT0gJ3snKSB7Ci0JCSp4cCA9ICp4cCArIDE7Ci0JCXhjLS07 Ci0JCWNjLS07Ci0JICAgIH0KLSNpZm5kZWYgTk9TUEwKLQkgICAgaWYgKGYpIHsJCQkvKiBJZiBh IGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KLSNpZmRlZiBET0NIS1ZBUgotCQljaGFy ICpzID0gKnhwOwkJLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgdmFyaWFibGVzIGluICovCi0JCXdo aWxlICgqcykgewkJLyogdGhlIHN0cmluZyBhbmQgaWYgc28sIGV4cGFuZCB0aGVtICovCi0JCSAg ICBpZiAoY2hrdmFyKHMpKSB7Ci0jZW5kaWYgLyogRE9DSEtWQVIgKi8KLQkJCXpxID0gYXR4YnVm OwotCQkJYXR4biA9IENNREJMOwotCQkJaWYgKCh4ID0gKCpmKSgqeHAsJnpxLCZhdHhuKSkgPCAw KSB7Ci0JCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKLQkJCSAgICByZXR1cm4oLTIpOwotCQkJfQot I2lmZGVmIERPQ0hLVkFSCi0JCSAgICAvKiByZWR1Y2UgY2MgYnkgbnVtYmVyIG9mIFxcIGNvbnN1 bWVkIGJ5IGNvbnZlcnNpb24gKi8KLQkJICAgIC8qIGZ1bmN0aW9uIChuZWVkZWQgZm9yIE9TLzIs IHdoZXJlIFwgaXMgcGF0aCBzZXBhcmF0b3IpICovCi0JCQljYyAtPSAoc3RybGVuKCp4cCkgLSBz dHJsZW4oYXR4YnVmKSk7Ci0jZW5kaWYgLyogRE9DSEtWQVIgKi8KLQkJCSp4cCA9IGF0eGJ1ZjsK LSNpZmRlZiBET0NIS1ZBUgotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCSAgICBzKys7Ci0JCX0KLSNl bmRpZiAvKiBET0NIS1ZBUiAqLwotCSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQkgICAgZGVi dWcoRjExMSwiY21pZmkgPyAqeHAsIGNjIiwqeHAsY2MpOwotCSAgICBzcCA9ICp4cCArIGNjOwkJ LyogSW5zZXJ0ICIqIiBhdCBlbmQgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotCSAgICAqc3ArKyA9 ICcrJzsJCS8qIEluc2VydCArLCB0aGUgREcgd2lsZCBjYXJkICovCi0jZWxzZQotCSAgICAqc3Ar KyA9ICcqJzsKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotCSAgICAqc3AtLSA9ICdcMCc7Ci0j aWZkZWYgR0VNRE9TCi0JICAgIGlmICghIHN0cmNocigqeHAsICcuJykpCS8qIGFiZGUuZSAtPiBh YmNkZS5lKiAqLwotCSAgICAgIHN0cmNhdCgqeHAsICIuKiIpOwkvKiBhYmMgLT4gYWJjKi4qICov Ci0jZW5kaWYgLyogR0VNRE9TICovCi0JICAgIGRlYnVnKEYxMTAsImNtaWZpID8gd2lsZCIsKnhw LDApOwotCi0JICAgIG56eG9wdHMgfD0gZGlyZmxnID8gWlhfRElST05MWSA6IChkID8gMCA6IFpY X0ZJTE9OTFkpOwotCi0JICAgIGRlYnVnKEYxMDEsImNtaWZpIG1hdGNoZG90IiwiIixtYXRjaGRv dCk7Ci0JICAgIGlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhfTUFUQ0hET1Q7Ci0JICAgIGlm IChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKLQkgICAgeSA9IG56eHBhbmQoKnhw LG56eG9wdHMpOwotCSAgICBuZmlsZXMgPSB5OwotCSAgICAqc3AgPSAnXDAnOwotCSAgICBpZiAo eSA9PSAwKSB7Ci0JCWlmIChub21zZykgewotCQkgICAgcHJpbnRmKCI6ICVzXG4iLGF0bWJ1Zik7 Ci0JCSAgICBwcmludGYoIiVzJXMiLGNtcHJvbSxjbWRidWYpOwotCQkgICAgZmZsdXNoKHN0ZG91 dCk7Ci0JCSAgICBpZiAobnApIGZyZWUobnApOwotCQkgICAgcmV0dXJuKC0xKTsKLQkJfSBlbHNl IHsKLSNpZmRlZiBDS1JPT1QKLQkJICAgIGlmIChja3Jvb3RlcnIpCi0JCSAgICAgIHByaW50Zigi P09mZiBMaW1pdHM6ICVzXG4iLGF0bWJ1Zik7Ci0JCSAgICBlbHNlCi0jZW5kaWYgLyogQ0tST09U ICovCi0JCSAgICAgIHByaW50ZigiP05vICVzIG1hdGNoIC0gJXNcbiIsCi0JCQkgICAgIGRpcmZs ZyA/ICJkaXJlY3RvcmllcyIgOiAiZmlsZXMiLCBhdG1idWYpOwotCQkgICAgaWYgKG5wKSBmcmVl KG5wKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkgICAgfSBlbHNlIGlmICh5IDwgMCkgewot I2lmZGVmIENLUk9PVAotCQlpZiAoY2tyb290ZXJyKQotCQkgIHByaW50ZigiP09mZiBMaW1pdHM6 ICVzXG4iLGF0bWJ1Zik7Ci0JCWVsc2UKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQkJICBwcmludGYo Ij9Ub28gbWFueSAlcyBtYXRjaCAtICVzXG4iLAotCQkJIGRpcmZsZyA/ICJkaXJlY3RvcmllcyIg OiAiZmlsZXMiLCBhdG1idWYpOwotCQlpZiAobnApIGZyZWUobnApOwotCQlyZXR1cm4oLTkpOwot CSAgICB9IGVsc2UgewotCQlwcmludGYoIiwgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4iKTsKLQkJ aWYgKGZpbGhlbHAoKGludCl5LCIiLCIiLDEsZGlyZmxnKSA8IDApIHsKLQkJICAgIGlmIChucCkg ZnJlZShucCk7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0JICAgIH0KLQkgICAgcHJpbnRmKCIl cyVzIixjbXByb20sY21kYnVmKTsKLQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0JICAgIGJyZWFrOwot I2VuZGlmIC8qIE1BQyAqLwotCX0KLSNpZmRlZiBCU19ESVJTRVAKLSAgICAgICAgZGlybmFtZmxn ID0gMTsKLSAgICAgICAgeCA9IGd0d29yZCgwKTsgICAgICAgICAgICAgICAgICAvKiBObywgZ2V0 IGEgd29yZCAqLwotCWRpcm5hbWZsZyA9IDA7Ci0jZWxzZQotICAgICAgICB4ID0gZ3R3b3JkKDAp OyAgICAgICAgICAgICAgICAgIC8qIE5vLCBnZXQgYSB3b3JkICovCi0jZW5kaWYgLyogQlNfRElS U0VQICovCi0JKnhwID0gYXRtYnVmOwotICAgIH0KLX0KLQotLyogIEMgTSBGIEwgRCAgLS0gIFBh cnNlIGFuIGFyYml0cmFyeSBmaWVsZCAgKi8KLS8qCi0gIFJldHVybnM6Ci0gICAgLTMgaWYgbm8g aW5wdXQgcHJlc2VudCB3aGVuIHJlcXVpcmVkLAotICAgIC0yIGlmIGZpZWxkIHRvbyBiaWcgZm9y IGJ1ZmZlciwKLSAgICAtMSBpZiByZXBhcnNlIG5lZWRlZCwKLSAgICAgMCBvdGhlcndpc2UsIHhw IHBvaW50aW5nIHRvIHN0cmluZyByZXN1bHQuCi0KLSAgTk9URTogR2xvYmFsIGZsYWcga2VlcGFs bGNoYXJzIHNheXMgd2hldGhlciB0aGlzIHJvdXRpbmUgc2hvdWxkIGJyZWFrIG9uIENSCi0gIG9y IExGOiBuZWVkZWQgZm9yIE1JTlBVVCB0YXJnZXRzIGFuZCBERUNMQVJFIGluaXRpYWxpemVycywg d2hlcmUgd2Ugd2FudCB0bwotICBrZWVwIGNvbnRyb2wgY2hhcmFjdGVycyBpZiB0aGUgdXNlciBz cGVjaWZpZXMgdGhlbSAoTWFyY2ggMjAwMykuICBJdCBtaWdodAotICBoYXZlIGJlZW4gYmV0dGVy IHRvIGNoYW5nZSB0aGUgY2FsbGluZyBzZXF1ZW5jZSBidXQgdGhhdCB3YXMgbm90IHByYWN0aWNh bC4KLSovCi1pbnQKLWNtZmxkKHhobHAseGRlZix4cCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4 cDsgeHhfc3RycCBmOyB7Ci0gICAgaW50IHgsIHhjOwotICAgIGNoYXIgKnpxOwotCi0gICAgaW53 b3JkID0gMDsJCQkJLyogSW5pdGlhbGl6ZSBjb3VudHMgJiBwb2ludGVycyAqLwotICAgIGNjID0g MDsKLSAgICB4YyA9IDA7Ci0gICAgKnhwID0gIiI7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJjbWZsZCB4 ZGVmIDEiLHhkZWYsMCk7Ci0KLSAgICBpZiAoIXhobHApIHhobHAgPSAiIjsKLSAgICBpZiAoIXhk ZWYpIHhkZWYgPSAiIjsKLSAgICBja3N0cm5jcHkoY21kZWZhdWx0LHhkZWYsQ01ERUZBVUxUKTsg LyogQ29weSBkZWZhdWx0ICovCi0gICAgeGRlZiA9IGNtZGVmYXVsdDsKLQotICAgIGRlYnVnKEYx MTEsImNtZmxkIHhkZWYgMiIseGRlZixjbWZsZ3MpOwotICAgIGRlYnVnKEYxMTEsImNtZmxkIGF0 bWJ1ZiAxIixhdG1idWYseGMpOwotCi0gICAgaWYgKCh4ID0gY21mbGdzKSAhPSAxKSB7ICAgICAg ICAgICAgLyogQWxyZWFkeSBjb25maXJtZWQ/ICovCi0gICAgICAgIHggPSBndHdvcmQoMCk7ICAg ICAgICAgICAgICAgICAgLyogTm8sIGdldCBhIHdvcmQgKi8KLSAgICB9IGVsc2UgewotCWlmIChz ZXRhdG0oeGRlZiwwKSA8IDApIHsJLyogSWYgc28sIHVzZSBkZWZhdWx0LCBpZiBhbnkuICovCi0J ICAgIHByaW50ZigiP0RlZmF1bHQgdG9vIGxvbmdcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0K LSAgICB9Ci0gICAgKnhwID0gYXRtYnVmOyAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQg dG8gcmVzdWx0LiAqLwotICAgIGRlYnVnKEYxMTEsImNtZmxkIGF0bWJ1ZiAyIixhdG1idWYsY21m bGdzKTsKLQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIHhjICs9IGNjOyAgICAgICAgICAgICAg ICAgICAgICAgLyogQ291bnQgdGhlIGNoYXJhY3RlcnMuICovCi0gICAgICAgIGRlYnVnKEYxMTEs ImNtZmxkIGd0d29yZCIsYXRtYnVmLHhjKTsKLSAgICAgICAgZGVidWcoRjEwMSwiY21mbGQgeCIs IiIseCk7Ci0gICAgICAgIHN3aXRjaCAoeCkgewotCSAgY2FzZSAtOToKLQkgICAgcHJpbnRmKCJD b21tYW5kIG9yIGZpZWxkIHRvbyBsb25nXG4iKTsKLQkgIGNhc2UgLTQ6CQkJLyogRU9GICovCi0J ICBjYXNlIC0zOgkJCS8qIEVtcHR5LiAqLwotCSAgY2FzZSAtMjoJCQkvKiBPdXQgb2Ygc3BhY2Uu ICovCi0JICBjYXNlIC0xOgkJCS8qIFJlcGFyc2UgbmVlZGVkICovCi0JICAgIHJldHVybih4KTsK LQkgIGNhc2UgMToJCQkvKiBDUiAqLwotCSAgY2FzZSAwOgkJCS8qIFNQICovCi0JICAgIGRlYnVn KEYxMTEsImNtZmxkIDEiLGF0bWJ1Zix4Yyk7Ci0JICAgIGlmICh4YyA9PSAwKSB7CQkvKiBJZiBu byBpbnB1dCwgcmV0dXJuIGRlZmF1bHQuICovCi0JCWlmIChzZXRhdG0oeGRlZiwwKSA8IDApIHsK LQkJICAgIHByaW50ZigiP0RlZmF1bHQgdG9vIGxvbmdcbiIpOwotCQkgICAgcmV0dXJuKC05KTsK LQkJfQotCSAgICB9Ci0JICAgICp4cCA9IGF0bWJ1ZjsJCS8qIFBvaW50IHRvIHdoYXQgd2UgZ290 LiAqLwotCSAgICBkZWJ1ZyhGMTExLCJjbWZsZCAyIixhdG1idWYsKChmKSA/IDEgOiAwKSk7Ci0J ICAgIGlmIChmKSB7CQkJLyogSWYgYSBjb252ZXJzaW9uIGZ1bmN0aW9uIGlzIGdpdmVuICovCi0J CXpxID0gYXR4YnVmOwkJLyogZW1wbG95IGl0IG5vdy4gKi8KLQkJYXR4biA9IENNREJMOwotCQlp ZiAoKCpmKSgqeHAsJnpxLCZhdHhuKSA8IDApCi0JCSAgcmV0dXJuKC0yKTsKLQkJZGVidWcoRjEx MSwiY21mbGQgMyIsYXR4YnVmLHhjKTsKLQkJLyogUmVwbGFjZSBieSBuZXcgdmFsdWUgLS0gZm9y IE1JTlBVVCBvbmx5IGtlZXAgYWxsIGNoYXJzICovCi0JCWlmIChzZXRhdG0oYXR4YnVmLGtlZXBh bGxjaGFycyA/IDM6MSkgPCAwKSB7IC8qIDE2IE1hciAyMDAzICovCi0JCSAgICBwcmludGYoIlZh bHVlIHRvbyBsb25nXG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkJKnhwID0gYXRtYnVm OwotCSAgICB9Ci0JICAgIGRlYnVnKEYxMTEsImNtZmxkIDQiLGF0bWJ1Zix4Yyk7Ci0JICAgIGlm ICgqKnhwID09IE5VTCkgewkJLyogSWYgdmFyaWFibGUgZXZhbHVhdGVzIHRvIG51bGwgKi8KLQkJ aWYgKHNldGF0bSh4ZGVmLDApIDwgMCkgewotCQkgICAgcHJpbnRmKCI/RGVmYXVsdCB0b28gbG9u Z1xuIik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0JCWlmICgqKnhwID09IE5VTCkgeCA9IC0z OyAvKiBJZiBzdGlsbCBlbXB0eSwgcmV0dXJuIC0zLiAqLwotCSAgICB9Ci0JICAgIGRlYnVnKEYx MTEsImNtZmxkIHJldHVybnMiLCp4cCx4KTsKLQkgICAgcmV0dXJuKHgpOwotCSAgY2FzZSAyOgkJ CS8qIEVTQyAqLwotCSAgICBpZiAoeGMgPT0gMCAmJiAqeGRlZikgewotCQlwcmludGYoIiVzICIs eGRlZik7IC8qIElmIGF0IGJlZ2lubmluZyBvZiBmaWVsZCwgKi8KLSNpZmRlZiBHRU1ET1MKLQkJ ZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogR0VNRE9TICovCi0JCWFkZGJ1Zih4ZGVmKTsJCS8q IFN1cHBseSBkZWZhdWx0LiAqLwotCQlpbndvcmQgPSBjbWZsZ3MgPSAwOwotCQlpZiAoc2V0YXRt KHhkZWYsMCkgPCAwKSB7Ci0JCSAgICBwcmludGYoIj9EZWZhdWx0IHRvbyBsb25nXG4iKTsKLQkJ ICAgIHJldHVybigtOSk7Ci0JCX0gZWxzZQkJCS8qIFJldHVybiBhcyBpZiB3aG9sZSBmaWVsZCAq LwotCQkgIHJldHVybigwKTsJCS8qIHR5cGVkLCBmb2xsb3dlZCBieSBzcGFjZS4gKi8KLQkgICAg fSBlbHNlIHsKLQkJYmxlZXAoQlBfV0FSTik7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNl IDM6CQkJLyogUXVlc3Rpb24gbWFyayAqLwotCSAgICBkZWJ1ZyhGMTEwLCJjbWZsZCBRVUVTVElP Tk1BUksiLGNtZGJ1ZiwwKTsKLQkgICAgaWYgKCp4aGxwID09IE5VTCkKLQkgICAgICBwcmludGYo IiBQbGVhc2UgY29tcGxldGUgdGhpcyBmaWVsZCIpOwotCSAgICBlbHNlCi0JICAgICAgcHJpbnRm KCIgJXMiLHhobHApOwotCSAgICBwcmludGYoIlxuJXMlcyIsY21wcm9tLGNtZGJ1Zik7Ci0JICAg IGZmbHVzaChzdGRvdXQpOwotCSAgICBicmVhazsKLSAgICAgICAgfQotCWRlYnVnKEYxMTEsImNt ZmxkIGd0d29yZCBBIHgiLGNtZGJ1Zix4KTsKLQl4ID0gZ3R3b3JkKDApOwotCWRlYnVnKEYxMTEs ImNtZmxkIGd0d29yZCBCIHgiLGNtZGJ1Zix4KTsKLSAgICB9Ci19Ci0KLQotLyogIEMgTSBUIFgg VCAgLS0gIEdldCBhIHRleHQgc3RyaW5nLCBpbmNsdWRpbmcgY29uZmlybWF0aW9uICAqLwotCi0v KgotICBQcmludCBoZWxwIG1lc3NhZ2UgJ3hobHAnIGlmID8gdHlwZWQsIHN1cHBseSBkZWZhdWx0 ICd4ZGVmJyBpZiBudWxsCi0gIHN0cmluZyB0eXBlZC4gIFJldHVybnM6Ci0KLSAgIC0xIGlmIHJl cGFyc2UgbmVlZGVkIG9yIGJ1ZmZlciBvdmVyZmxvd3MuCi0gICAgMSBvdGhlcndpc2UuCi0KLSAg d2l0aCBjbWZsZ3Mgc2V0IHRvIHJldHVybiBjb2RlLCBhbmQgeHAgcG9pbnRpbmcgdG8gcmVzdWx0 IHN0cmluZy4KLSovCi1pbnQKLWNtdHh0KHhobHAseGRlZix4cCxmKSBjaGFyICp4aGxwOyBjaGFy ICp4ZGVmOyBjaGFyICoqeHA7IHh4X3N0cnAgZjsgewotCi0gICAgaW50IHgsIGk7Ci0gICAgY2hh ciAqeHgsICp6cTsKLSAgICBzdGF0aWMgaW50IHhjOwotCi0gICAgaWYgKCF4aGxwKSB4aGxwID0g IiI7Ci0gICAgaWYgKCF4ZGVmKSB4ZGVmID0gIiI7Ci0KLSAgICBjbWZsZGZsZ3MgPSAwOwotCi0g ICAgY21kZWZhdWx0WzBdID0gTlVMOwotICAgIGlmICgqeGRlZikKLSAgICAgIGNrc3RybmNweShj bWRlZmF1bHQseGRlZixDTURFRkFVTFQpOyAvKiBDb3B5IGRlZmF1bHQgKi8KLSAgICB4ZGVmID0g Y21kZWZhdWx0OwotCi0gICAgZGVidWcoRjEwMSwiY210eHQgY21mbGdzIiwiIixjbWZsZ3MpOwot ICAgIGlud29yZCA9IDA7CQkJCS8qIFN0YXJ0IGF0bWJ1ZiBjb3VudGVyIG9mZiBhdCAwICovCi0g ICAgY2MgPSAwOwotICAgIGlmIChjbWZsZ3MgPT0gLTEpIHsgICAgICAgICAgICAgICAgIC8qIElm IHJlcGFyc2luZywgKi8KLQkqeHAgPSBwcDsKLSAgICAgICAgeGMgPSAoaW50KXN0cmxlbigqeHAp OwkJLyogZ2V0IGJhY2sgdGhlIHRvdGFsIHRleHQgbGVuZ3RoLCAqLwotCWJwID0gKnhwOwkJCS8q IGFuZCBiYWNrIHVwIHRoZSBwb2ludGVycy4gKi8KLQlucCA9ICp4cDsKLQlwcCA9ICp4cDsKLSAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndpc2UsICovCi0J LyogZGVidWcoRjEwMCwiY210eHQ6IGZyZXNoIHN0YXJ0IiwiIiwwKTsgKi8KLSAgICAgICAgKnhw ID0gIiI7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFydCBmcmVzaC4gKi8KLSAgICAgICAg eGMgPSAwOwotICAgIH0KLSAgICAqYXRtYnVmID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAv KiBBbmQgZW1wdHkgdGhlIGF0b20gYnVmZmVyLiAqLwotICAgIHJ0aW1lcigpOwkJCQkvKiBSZXNl dCB0aW1lciAqLwotICAgIGlmICgoeCA9IGNtZmxncykgIT0gMSkgewotCWludCBkb25lID0gMDsK LQl3aGlsZSAoIWRvbmUpIHsKLQkgICAgeCA9IGd0d29yZCgwKTsJCS8qIEdldCBmaXJzdCB3b3Jk LiAqLwotCSAgICAqeHAgPSBwcDsJCQkvKiBTYXZlIHBvaW50ZXIgdG8gaXQuICovCi0JICAgIC8q IGRlYnVnKEYxMTEsImNtdHh0OiIsKnhwLGNjKTsgKi8KLQkgICAgaWYgKHggPT0gLTEwKSB7Ci0J CWlmIChndGltZXIoKSA+IHRpbWVsaW1pdCkgewotCQkgICAgLyogaWYgKCFxdWlldCkgcHJpbnRm KCI/VGltZWQgb3V0XG4iKTsgKi8KLQkJICAgIHJldHVybih4KTsKLQkJfQotCSAgICB9IGVsc2UK LQkgICAgICBkb25lID0gMTsKLQl9Ci0gICAgfQotICAgIHdoaWxlICgxKSB7CQkJCS8qIExvb3Ag Zm9yIGVhY2ggd29yZCBpbiB0ZXh0LiAqLwotICAgICAgICB4YyArPSBjYzsgICAgICAgICAgICAg ICAgICAgICAgIC8qIENoYXIgY291bnQgZm9yIGFsbCB3b3Jkcy4gKi8KLSAgICAgICAgLyogZGVi dWcoRjExMSwiY210eHQgZ3R3b3JkIixhdG1idWYseGMpOyAqLwotICAgICAgICAvKiBkZWJ1ZyhG MTAxLCJjbXR4dCB4IiwiIix4KTsgKi8KLSAgICAgICAgc3dpdGNoICh4KSB7Ci0JICBjYXNlIC0x MDoKLQkgICAgaWYgKGd0aW1lcigpID4gdGltZWxpbWl0KSB7Ci0jaWZkZWYgSUtTRAotICAgICAg ICAgICAgICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7Ci0gICAgICAgICAgICAgICAgaWYgKGluc2Vy dmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbklLU0QgSURMRSBUSU1FT1VU OiAlZCBzZWNcclxuIiwgdGltZWxpbWl0KTsKLSAgICAgICAgICAgICAgICAgICAgZG9leGl0KEdP T0RfRVhJVCwwKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCQkvKiBp ZiAoIXF1aWV0KSBwcmludGYoIj9UaW1lZCBvdXRcbiIpOyAqLwotCQlyZXR1cm4oLTEwKTsKLQkg ICAgfSBlbHNlIHsKLQkJeCA9IGd0d29yZCgwKTsKLQkJY29udGludWU7Ci0JICAgIH0KLQkgIGNh c2UgLTk6CQkJLyogQnVmZmVyIG92ZXJmbG93ICovCi0JICAgIHByaW50ZigiQ29tbWFuZCBvciBm aWVsZCB0b28gbG9uZ1xuIik7Ci0JICBjYXNlIC00OgkJCS8qIEVPRiAqLwotI2lmZGVmIE1BQwot CSAgY2FzZSAtMzoJCQkvKiBRdWl0L1RpbWVvdXQgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQkgIGNh c2UgLTI6CQkJLyogT3ZlcmZsb3cgKi8KLQkgIGNhc2UgLTE6CQkJLyogRGVsZXRpb24gKi8KLQkg ICAgcmV0dXJuKHgpOwotCSAgY2FzZSAwOgkJCS8qIFNwYWNlICovCi0JICAgIHhjKys7CQkJLyog SnVzdCBjb3VudCBpdCAqLwotCSAgICBicmVhazsKLQkgIGNhc2UgMToJCQkvKiBDUiBvciBMRiAq LwotCSAgICBpZiAoeGMgPT0gMCkgKnhwID0geGRlZjsKLQkgICAgaWYgKGYpIHsJCQkvKiBJZiBh IGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KLQkJY2hhciAqIHN4ID0gYXR4YnVmOwot CQl6cSA9IGF0eGJ1ZjsJCS8qIFBvaW50IHRvIHRoZSBleHBhbnNpb24gYnVmZmVyICovCi0JCWF0 eG4gPSBDTURCTDsJCS8qIHNwZWNpZnkgaXRzIGxlbmd0aCAqLwotCQkvKiBkZWJ1ZyhGMTExLCJj bXR4dCBjYWxsaW5nICgqZikiLCp4cCxhdHhidWYpOyAqLwotCQlpZiAoKHggPSAoKmYpKCp4cCwm enEsJmF0eG4pKSA8IDApIHJldHVybigtMik7Ci0JCXN4ID0gYXR4YnVmOwotI2lmbmRlZiBDT01N RU5UCi0JCWNjID0gMDsKLQkJd2hpbGUgKCpzeCsrKSBjYysrOwkvKiAoZmFzdGVyIHRoYW4gY2Fs bGluZyBzdHJsZW4pICovCi0jZWxzZQotCQljYyA9IChpbnQpc3RybGVuKGF0eGJ1Zik7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotCQkvKiBTaG91bGQgYmUgZXF1YWwgdG8gKENNREJMIC0gYXR4bikg YnV0IGlzbid0IGFsd2F5cy4gKi8KLQkJLyogV2h5IG5vdD8gKi8KLQkJaWYgKGNjIDwgMSkgewkJ LyogTm90aGluZyBpbiBleHBhbnNpb24gYnVmZmVyPyAqLwotCQkgICAgKnhwID0geGRlZjsJCS8q IFBvaW50IHRvIGRlZmF1bHQgc3RyaW5nIGluc3RlYWQuICovCi0jaWZuZGVmIENPTU1FTlQKLQkJ ICAgIHN4ID0geGRlZjsKLQkJICAgIHdoaWxlICgqc3grKykgY2MrKzsJLyogKGZhc3RlciB0aGFu IGNhbGxpbmcgc3RybGVuKSAqLwotI2Vsc2UKLQkJICAgIGNjID0gc3RybGVuKHhkZWYpOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQkJfSBlbHNlIHsJCS8qIEV4cGFuc2lvbiBmdW5jdGlvbiBnb3Qg c29tZXRoaW5nICovCi0JCSAgICAqeHAgPSBhdHhidWY7CS8qIHJldHVybiBwb2ludGVyIHRvIGl0 LiAqLwotCQl9Ci0JCWRlYnVnKEYxMTEsImNtdHh0ICgqZikiLCp4cCxjYyk7Ci0JICAgIH0gZWxz ZSB7CQkJLyogTm8gZXhwYW5zaW9uIGZ1bmN0aW9uICovCi0jaWZuZGVmIENPTU1FTlQKLQkJLyog QXZvaWQgYSBzdHJsZW4oKSBjYWxsICovCi0JCXh4ID0gKnhwOwotCQljYyA9IDA7Ci0JCXdoaWxl ICgqeHgrKykgY2MrKzsKLSNlbHNlCi0JCS8qIE5PISAgeGMgaXMgYXBwYXJlbnRseSBub3QgYWx3 YXlzIHNldCBhcHByb3ByaWF0ZWx5ICovCi0JCWNjID0geGM7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotCSAgICB9Ci0JICAgIHh4ID0gKnhwOwotI2lmZGVmIENPTU1FTlQKLQkgICAgLyogc3RybGVu KCkgbm8gbG9uZ2VyIG5lZWRlZCAqLwotCSAgICBmb3IgKGkgPSAoaW50KXN0cmxlbih4eCkgLSAx OyBpID4gMDsgaS0tKQotI2Vsc2UKLQkgICAgZm9yIChpID0gY2MgLSAxOyBpID4gMDsgaS0tKQot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgICBpZiAoeHhbaV0gIT0gU1ApCQkvKiBUcmltIHRy YWlsaW5nIGJsYW5rcyAqLwotCQlicmVhazsKLQkgICAgICBlbHNlCi0JCXh4W2ldID0gTlVMOwot CSAgICByZXR1cm4oeCk7Ci0JICBjYXNlIDI6CQkJLyogRVNDICovCi0JICAgIGlmICh4YyA9PSAw KSB7CQkvKiBOb3RoaW5nIHR5cGVkIHlldCAqLwotCQlpZiAoKnhkZWYpIHsJCS8qIEhhdmUgYSBk ZWZhdWx0IGZvciB0aGlzIGZpZWxkPyAqLwotCQkgICAgcHJpbnRmKCIlcyAiLHhkZWYpOwkvKiBZ ZXMsIHN1cHBseSBpdCAqLwotCQkgICAgaW53b3JkID0gY21mbGdzID0gMDsKLSNpZmRlZiBHRU1E T1MKLQkJICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIEdFTURPUyAqLwotCQkgICAgY2Mg PSBhZGRidWYoeGRlZik7Ci0JCX0gZWxzZSBibGVlcChCUF9XQVJOKTsJLyogTm8gZGVmYXVsdCAq LwotCSAgICB9IGVsc2UgewkJCS8qIEFscmVhZHkgaW4gZmllbGQgKi8KLQkJaW50IHg7IGNoYXIg KnA7Ci0JCXggPSBzdHJsZW4oYXRtYnVmKTsKLQkJaWYgKGNrc3RyY21wKGF0bWJ1Zix4ZGVmLHgs MCkpIHsgICAgLyogTWF0Y2hlcyBkZWZhdWx0PyAqLwotCQkgICAgYmxlZXAoQlBfV0FSTik7CSAg ICAgICAgICAgIC8qIE5vICovCi0JCX0gZWxzZSBpZiAoKGludClzdHJsZW4oeGRlZikgPiB4KSB7 IC8qIFllcyAqLwotCQkgICAgcCA9IHhkZWYgKyB4OwotCQkgICAgcHJpbnRmKCIlcyAiLCBwKTsK LSNpZmRlZiBHRU1ET1MKLQkJICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIEdFTURPUyAq LwotCQkgICAgYWRkYnVmKHApOwotCQkgICAgaW53b3JkID0gY21mbGdzID0gMDsKLQkJICAgIGRl YnVnKEYxMTAsImNtdHh0OiBhZGRidWYiLGNtZGJ1ZiwwKTsKLQkJfSBlbHNlIHsKLQkJICAgIGJs ZWVwKEJQX1dBUk4pOwotCQl9Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIDM6CQkJLyog UXVlc3Rpb24gTWFyayAqLwotCSAgICBpZiAoKnhobHAgPT0gTlVMKQotCSAgICAgIHByaW50Zigi IFRleHQgc3RyaW5nIik7Ci0JICAgIGVsc2UKLQkgICAgICBwcmludGYoIiAlcyIseGhscCk7Ci0J ICAgIHByaW50ZigiXG4lcyVzIixjbXByb20sY21kYnVmKTsKLQkgICAgZmZsdXNoKHN0ZG91dCk7 Ci0JICAgIGJyZWFrOwotCSAgZGVmYXVsdDoKLQkgICAgcHJpbnRmKCI/VW5leHBlY3RlZCByZXR1 cm4gY29kZSBmcm9tIGd0d29yZCgpIC0gJWRcbiIseCk7Ci0JICAgIHJldHVybigtMik7Ci0gICAg ICAgIH0KLSAgICAgICAgeCA9IGd0d29yZCgwKTsKLSAgICB9Ci19Ci0KLS8qICBDIE0gSyBFIFkg IC0tICBQYXJzZSBhIGtleXdvcmQgICovCi0KLS8qCi0gQ2FsbCB3aXRoOgotICAgdGFibGUgICAg LS0gIGtleXdvcmQgdGFibGUsIGluICdzdHJ1Y3Qga2V5dGFiJyBmb3JtYXQ7Ci0gICBuICAgICAg ICAtLSAgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGFibGU7Ci0gICB4aGxwICAgICAtLSAgcG9pbnRl ciB0byBoZWxwIHN0cmluZzsKLSAgIHhkZWYgICAgIC0tICBwb2ludGVyIHRvIGRlZmF1bHQga2V5 d29yZDsKLSAgIGYgICAgICAgIC0tICBzdHJpbmcgcHJlcHJvY2Vzc2luZyBmdW5jdGlvbiAoZS5n LiB0byBldmFsdWF0ZSB2YXJpYWJsZXMpCi0gICBwbXNnICAgICAtLSAgMCA9IGRvbid0IHByaW50 IGVycm9yIG1lc3NhZ2VzCi0gICAgICAgICAgICAgICAgMSA9IHByaW50IGVycm9yIG1lc3NhZ2Vz Ci0gICAgICAgICAgICAgICAgMiA9IGluY2x1ZGUgQ01fSExQIGtleXdvcmRzIGV2ZW4gaWYgaW52 aXNpYmxlCi0gICAgICAgICAgICAgICAgMyA9IDErMgotICAgICAgICAgICAgICAgIDQgPSBwYXJz ZSBhIHN3aXRjaCAoa2V5d29yZCBwb3NzaWJseSBlbmRpbmcgaW4gOiBvciA9KQotICAgICAgICAg ICAgICAgIDggPSBkb24ndCBzdHJpcCBjb21tZW50cyAodXNlZCwgZS5nLiwgZm9yICJoZWxwICMi KQotIFJldHVybnM6Ci0gICAtMyAgICAgICAtLSAgbm8gaW5wdXQgc3VwcGxpZWQgYW5kIG5vIGRl ZmF1bHQgYXZhaWxhYmxlCi0gICAtMiAgICAgICAtLSAgaW5wdXQgZG9lc24ndCB1bmlxdWVseSBt YXRjaCBhIGtleXdvcmQgaW4gdGhlIHRhYmxlCi0gICAtMSAgICAgICAtLSAgdXNlciBkZWxldGVk IHRvbyBtdWNoLCBjb21tYW5kIHJlcGFyc2UgcmVxdWlyZWQKLSAgICBuID49IDAgIC0tICB2YWx1 ZSBhc3NvY2lhdGVkIHdpdGgga2V5d29yZAotKi8KLQotLyoKLSAgRnJvbnQgZW5kcyBmb3IgY21r ZXkyKCk6IAotICBjbWtleSgpICAtIFRoZSBub3JtYWwga2V5d29yZCBwYXJzZXIKLSAgY21rZXl4 KCkgLSBMaWtlIGNta2V5KCkgYnV0IHN1cHByZXNzZXMgZXJyb3IgbWVzc2FnZXMKLSAgY21zd2ko KSAgLSBTd2l0Y2ggcGFyc2VyCi0qLwotaW50Ci1jbWtleSh0YWJsZSxuLHhobHAseGRlZixmKQot LyogY21rZXkgKi8gIHN0cnVjdCBrZXl0YWIgdGFibGVbXTsgaW50IG47IGNoYXIgKnhobHAsICp4 ZGVmOyB4eF9zdHJwIGY7IHsKLSAgICByZXR1cm4oY21rZXkyKHRhYmxlLG4seGhscCx4ZGVmLCIi LGYsMSkpOwotfQotaW50Ci1jbWtleXgodGFibGUsbix4aGxwLHhkZWYsZikKLS8qIGNta2V5eCAq LyAgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBpbnQgbjsgY2hhciAqeGhscCwgKnhkZWY7IHh4X3N0 cnAgZjsgewotICAgIHJldHVybihjbWtleTIodGFibGUsbix4aGxwLHhkZWYsIiIsZiwwKSk7Ci19 Ci1pbnQKLWNtc3dpKHRhYmxlLG4seGhscCx4ZGVmLGYpCi0vKiBjbXN3aSAqLyAgc3RydWN0IGtl eXRhYiB0YWJsZVtdOyBpbnQgbjsgY2hhciAqeGhscCwgKnhkZWY7IHh4X3N0cnAgZjsgewotICAg IHJldHVybihjbWtleTIodGFibGUsbix4aGxwLHhkZWYsIiIsZiw0KSk7Ci19Ci0KLWludAotY21r ZXkyKHRhYmxlLG4seGhscCx4ZGVmLHRvayxmLHBtc2cpCi0gICAgc3RydWN0IGtleXRhYiB0YWJs ZVtdOwotICAgIGludCBuOwotICAgIGNoYXIgKnhobHAsICp4ZGVmOwotICAgIGNoYXIgKnRvazsK LSAgICB4eF9zdHJwIGY7Ci0gICAgaW50IHBtc2c7Ci17IC8qIGNta2V5MiAqLwotICAgIGV4dGVy biBpbnQgaGF2ZXRva2VuOwotICAgIGludCBpLCB0bCwgeSwgeiA9IDAsIHp6LCB4Yywgd29yZGxl biA9IDAsIGNtc3dpdGNoOwotICAgIGNoYXIgKnhwLCAqenE7Ci0KLSAgICBpZiAoIXhobHApIHho bHAgPSAiIjsKLSAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKLQotICAgIGNtZmxkZmxncyA9IDA7 Ci0gICAgaWYgKCF0YWJsZSkgewotCXByaW50ZigiP0tleXdvcmQgdGFibGUgbWlzc2luZ1xuIik7 Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgdGwgPSAoaW50KXN0cmxlbih0b2spOwotCi0gICAg aW53b3JkID0geGMgPSBjYyA9IDA7CQkvKiBDbGVhciBjaGFyYWN0ZXIgY291bnRlcnMuICovCi0g ICAgY21zd2l0Y2ggPSBwbXNnICYgNDsJCS8qIEZsYWcgZm9yIHBhcnNpbmcgYSBzd2l0Y2ggKi8K LQotICAgIGRlYnVnKEYxMDEsImNta2V5OiBwbXNnIiwiIixwbXNnKTsKLSAgICBkZWJ1ZyhGMTAx LCJjbWtleTogY21mbGdzIiwiIixjbWZsZ3MpOwotICAgIGRlYnVnKEYxMDEsImNta2V5OiBjbXN3 aXRjaCIsIiIsY21zd2l0Y2gpOwotICAgIC8qIGRlYnVnKEYxMDEsImNta2V5OiBjbWRidWYiLCIi LGNtZGJ1Zik7Ki8KLQotICAgIHBwdm5hbWJ1ZlswXSA9IE5VTDsKLQotICAgIGlmICgoenogPSBj bWZsZ3MpID09IDEpIHsJCS8qIENvbW1hbmQgYWxyZWFkeSBlbnRlcmVkPyAqLwotCWlmIChzZXRh dG0oeGRlZiwwKSA8IDApIHsJLyogWWVzLCBjb3B5IGRlZmF1bHQgaW50byBhdG9tIGJ1ZiAqLwot CSAgICBwcmludGYoIj9EZWZhdWx0IHRvbyBsb25nXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9 Ci0gICAgICAgIHJ0aW1lcigpOwkJCSAvKiBSZXNldCB0aW1lciAqLwotICAgIH0gZWxzZSB7CQkJ CSAvKiBPdGhlcndpc2UgZ2V0IGEgY29tbWFuZCB3b3JkICovCi0gICAgICAgIHJ0aW1lcigpOwkJ CSAvKiBSZXNldCB0aW1lciAqLwotCWlmIChwbXNnICYgOCkJCQkgLyogOCBpcyBmb3IgcGFyc2lu ZyBIRUxQIHRva2VucyAqLwotCSAgenogPSBndHdvcmQoNCk7Ci0JZWxzZQotCSAgenogPSBndHdv cmQoKHBtc2cgPT0gNCkgPyAxIDogMCk7Ci0gICAgfQotCi0gICAgZGVidWcoRjEwMSwiY21rZXkg dGFibGUgbGVuZ3RoIiwiIixuKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWtleSBjbWZsZ3MiLCIiLGNt Zmxncyk7Ci0gICAgZGVidWcoRjEwMSwiY21rZXkgY2MiLCIiLGNjKTsKLQotICAgIHdoaWxlICgx KSB7Ci0JeGMgKz0gY2M7Ci0JZGVidWcoRjExMSwiY21rZXkgZ3R3b3JkIHhjIixhdG1idWYseGMp OwotCWRlYnVnKEYxMDEsImNta2V5IGd0d29yZCB6eiIsIiIsenopOwotCi0Jc3dpdGNoICh6eikg ewotCSAgY2FzZSAtMTA6CQkJLyogVGltZW91dCAqLwotCSAgICBpZiAoZ3RpbWVyKCkgPCB0aW1l bGltaXQpIHsKLQkJaWYgKHBtc2cgJiA4KQkJLyogOCBpcyBmb3IgcGFyc2luZyBIRUxQIHRva2Vu cyAqLwotCQkgIHp6ID0gZ3R3b3JkKDQpOwotCQllbHNlCi0JCSAgenogPSBndHdvcmQoKHBtc2cg PT0gNCkgPyAxIDogMCk7Ci0JCWNvbnRpbnVlOwotCSAgICB9IGVsc2UgewotI2lmZGVmIElLU0QK LSAgICAgICAgICAgICAgICBleHRlcm4gaW50IGluc2VydmVyOwotICAgICAgICAgICAgICAgIGlm IChpbnNlcnZlcikgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxyXG5JS1NEIElETEUg VElNRU9VVDogJWQgc2VjXHJcbiIsIHRpbWVsaW1pdCk7Ci0gICAgICAgICAgICAgICAgICAgIGRv ZXhpdChHT09EX0VYSVQsMCk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8K LQkJcmV0dXJuKC0xMCk7Ci0gICAgICAgICAgICB9Ci0JICBjYXNlIC01OgotCSAgICByZXR1cm4o Y21mbGdzID0gMCk7Ci0JICBjYXNlIC05OgotCSAgICBwcmludGYoIkNvbW1hbmQgb3IgZmllbGQg dG9vIGxvbmdcbiIpOwotCSAgY2FzZSAtNDoJCQkvKiBFT0YgKi8KLQkgIGNhc2UgLTM6CQkJLyog TnVsbCBDb21tYW5kL1F1aXQvVGltZW91dCAqLwotCSAgY2FzZSAtMjoJCQkvKiBCdWZmZXIgb3Zl cmZsb3cgKi8KLQkgIGNhc2UgLTE6CQkJLyogT3IgdXNlciBkaWQgc29tZSBkZWxldGluZy4gKi8K LQkgICAgcmV0dXJuKGNtZmxncyA9IHp6KTsKLQotCi0JICBjYXNlIDE6CQkJLyogQ1IgKi8KLQkg IGNhc2UgMDoJCQkvKiBVc2VyIHRlcm1pbmF0ZWQgd29yZCB3aXRoIHNwYWNlICovCi0JICBjYXNl IDQ6CQkJLyogb3Igc3dpdGNoIGVuZGluZyBpbiA6IG9yID0gKi8KLQkgICAgd29yZGxlbiA9IGNj OwkJLyogTGVuZ3RoIGlmIG5vIGNvbnZlcnNpb24gKi8KLQkgICAgaWYgKGNjID09IDApIHsJCS8q IFN1cHBseSBkZWZhdWx0IGlmIHdlIGdvdCBub3RoaW5nICovCi0JCWlmICgod29yZGxlbiA9IHNl dGF0bSh4ZGVmLCh6eiA9PSA0KSA/IDIgOiAwKSkgPCAwKSB7Ci0JCSAgICBwcmludGYoIj9EZWZh dWx0IHRvbyBsb25nXG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkgICAgfQotCSAgICBp ZiAoenogPT0gMSAmJiBjYyA9PSAwKQkvKiBSZXF1aXJlZCBmaWVsZCBtaXNzaW5nICovCi0JICAg ICAgcmV0dXJuKC0zKTsKLQotCSAgICBpZiAoZikgewkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5j dGlvbiBpcyBnaXZlbiAqLwotCQljaGFyICogcDI7Ci0JCXpxID0gYXR4YnVmOwkJLyogYXBwbHkg aXQgKi8KLQkJcDIgPSBhdHhidWY7Ci0JCWF0eG4gPSBDTURCTDsKLQkJaWYgKCgqZikoYXRtYnVm LCZ6cSwmYXR4bikgPCAwKSByZXR1cm4oLTIpOwotCQlkZWJ1ZyhGMTEwLCJjbWtleSBhdHhidWYg YWZ0ZXIgKmYiLGF0eGJ1ZiwwKTsKLQkJaWYgKCEqcDIpCQkvKiBTdXBwbHkgZGVmYXVsdCBpZiB3 ZSBnb3Qgbm90aGluZyAqLwotCQkgIHAyID0geGRlZjsKLQkJY2tzdHJuY3B5KHBwdm5hbWJ1Zixh dG1idWYsUFBWTEVOKTsKLQkJaWYgKCh3b3JkbGVuID0gc2V0YXRtKHAyLCh6eiA9PSA0KSA/IDIg OiAwKSkgPCAwKSB7Ci0JCSAgICBwcmludGYoIkV2YWx1YXRlZCBrZXl3b3JkIHRvbyBsb25nXG4i KTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLSNpZmRlZiBNX1VOR1cKLQkJLyoKLQkJICBUaGlz IGJpdCBsZXRzIHVzIHNhdmUgbW9yZSB0aGFuIG9uZSAid29yZCIuCi0JCSAgRm9yIGV4YW1wbGUs ICJkZWZpbmUgXCV4IGVjaG8gb25lIHR3byB0aHJlZSIsICJcJXgiLgotCQkgIEl0IHdvcmtzIHRv bywgYnV0IGl0IGJyZWFrcyBsYWJlbHMsIGFuZCB0aGVyZWZvcmUKLQkJICBXSElMRSBhbmQgRk9S IGxvb3BzLCBldGMuCi0JCSovCi0JCWlmIChwMlt3b3JkbGVuXSA+PSBTUCkgewotCQkgICAgcDIg Kz0gd29yZGxlbjsKLQkJICAgIHdoaWxlICgqcDIgPT0gU1ApIHAyKys7Ci0JCSAgICBpZiAoKnAy KSB7Ci0JCQl1bmd3b3JkKCk7Ci0JCQlwcCA9IHAyOwotCQkgICAgfQotCQl9Ci0jZW5kaWYgLyog TV9VTkdXICovCi0JICAgIH0KLSNpZmRlZiBDT01NRU5UCQkJCS8qIF5eXiAqLwotCSAgICBpZiAo Y21zd2l0Y2ggJiYgKmF0bWJ1ZiAhPSAnLycpIHsKLQkJaWYgKHBtc2cgJiAxKSB7Ci0JCSAgICBi bGVlcChCUF9GQUlMKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm90IGEgc3dpdGNo IC0gJXNcbiIsYXRtYnVmKTsKLQkJfQotCQljbWZsZ3MgPSAtMjsKLQkJcmV0dXJuKC02KTsKLQkg ICAgfQotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQkgICAgaWYgKGNtc3dpdGNoKSB7Ci0JCWludCBp OwotCQlmb3IgKGkgPSAwOyBpIDwgd29yZGxlbjsgaSsrKSB7Ci0JCSAgICBpZiAoYXRtYnVmW2ld ID09ICc6JyB8fCBhdG1idWZbaV0gPT0gJz0nKSB7Ci0JCQlicmtjaGFyID0gYXRtYnVmW2ldOwot CQkJYXRtYnVmW2ldID0gTlVMOwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotCi0j aWZkZWYgVE9LUFJFQ0hFQ0sKLS8qIFRoaXMgd2FzIGFuIGVmZmVjdGl2ZSBvcHRpbWl6YXRpb24g YnV0IGl0IGJyZWFrcyBzb21ldGltZXMgb24gbGFiZWxzLiAqLwotCSAgICBpZiAodGwgJiYgIWlz YWxwaGEoYXRtYnVmWzBdKSkgeyAvKiBQcmVjaGVjayBmb3IgdG9rZW4gKi8KLQkJZm9yIChpID0g MDsgaSA8IHRsOyBpKyspIHsgLyogU2F2ZSBmdW5jdGlvbiBjYWxsIHRvIGNrc3RyY2hyICovCi0J CSAgICBpZiAodG9rW2ldID09IGF0bWJ1ZlswXSkgewotCQkJZGVidWcoRjAwMCwiY21rZXkgdG9r ZW46IixhdG1idWYsKmF0bWJ1Zik7Ci0JCQl1bmd3b3JkKCk7ICAvKiBQdXQgYmFjayB0aGUgZm9s bG93aW5nIHdvcmQgKi8KLQkJCXJldHVybigtNSk7IC8qIFNwZWNpYWwgcmV0dXJuIGNvZGUgZm9y IHRva2VuICovCi0JCSAgICB9Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIFRPS1BSRUNIRUNLICov Ci0KLQkgICAgeSA9IGxvb2t1cCh0YWJsZSxhdG1idWYsbiwmeik7IC8qIExvb2sgdXAgd29yZCBp biB0aGUgdGFibGUgKi8KLQkgICAgZGVidWcoRjExMSwiY21rZXkgbG9va3VwIixhdG1idWYseSk7 Ci0JICAgIGRlYnVnKEYxMDEsImNta2V5IHp6IiwiIix6eik7Ci0JICAgIGRlYnVnKEYxMDEsImNt a2V5IGNtZmxncyIsIiIsY21mbGdzKTsKLQkgICAgZGVidWcoRjEwMSwiY21rZXkgY3JmbGFnIiwi IixjcmZsYWcpOwotCSAgICBzd2l0Y2ggKHkpIHsKLQkgICAgICBjYXNlIC0zOgkJCS8qIE5vdGhp bmcgdG8gbG9vayB1cCAqLwotCQlicmVhazsKLQkgICAgICBjYXNlIC0yOgkJCS8qIEFtYmlndW91 cyAqLwotCQljbWZsZ3MgPSAtMjsKLQkJaWYgKHBtc2cgJiAxKSB7Ci0JCSAgICBibGVlcChCUF9G QUlMKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QW1iaWd1b3VzIC0gJXNcbiIsYXRt YnVmKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkJcmV0dXJuKC0yKTsKLQkgICAgICBjYXNl IC0xOgkJCS8qIE5vdCBmb3VuZCBhdCBhbGwgKi8KLSNpZm5kZWYgVE9LUFJFQ0hFQ0sKLQkJaWYg KHRsKSB7Ci0JCSAgICBmb3IgKGkgPSAwOyBpIDwgdGw7IGkrKykgLyogQ2hlY2sgZm9yIHRva2Vu ICovCi0JCSAgICAgIGlmICh0b2tbaV0gPT0gKmF0bWJ1ZikgeyAvKiBHb3Qgb25lICovCi0JCQkg IGRlYnVnKEYwMDAsImNta2V5IHRva2VuOiIsYXRtYnVmLCphdG1idWYpOwotCQkJICB1bmd3b3Jk KCk7ICAvKiBQdXQgYmFjayB0aGUgZm9sbG93aW5nIHdvcmQgKi8KLQkJCSAgcmV0dXJuKC01KTsg LyogU3BlY2lhbCByZXR1cm4gY29kZSBmb3IgdG9rZW4gKi8KLQkJICAgICAgfQotCQl9Ci0jZW5k aWYgLyogVE9LUFJFQ0hFQ0sgKi8KLQotCQlpZiAodGwgPT0gMCkgewkJLyogTm8gdG9rZW5zIHdl cmUgaW5jbHVkZWQgKi8KLSNpZmRlZiBPUzIKLQkJICAgIC8qIEluIE9TLzIgYW5kIFdpbmRvd3Ms IGFsbG93IGZvciBhIGRpc2sgbGV0dGVyIGxpa2UgRE9TICovCi0JCSAgICBpZiAoaXNhbHBoYSgq YXRtYnVmKSAmJiAqKGF0bWJ1ZisxKSA9PSAnOicpCi0JCSAgICAgIHJldHVybigtNyk7Ci0jZW5k aWYgLyogT1MyICovCi0JCSAgICBpZiAoKHBtc2cgJiAxKSAmJiAhcXVpZXQpIHsKLQkJCWJsZWVw KEJQX0ZBSUwpOwotCQkJcHJpbnRmKCI/Tm8ga2V5d29yZHMgbWF0Y2ggLSAlc1xuIixhdG1idWYp OyAvKiBjbWtleSAqLwotCQkgICAgfQotCQkgICAgcmV0dXJuKGNtZmxncyA9IC05KTsKLQkJfSBl bHNlIHsKLQkJICAgIGlmIChjbWZsZ3MgPT0gMSB8fCBjbXN3aXRjaCkgLyogY21rZXkyIG9yIGNt c3dpICovCi0JCSAgICAgIHJldHVybihjbWZsZ3MgPSAtNik7Ci0JCSAgICBlbHNlCi0JCSAgICAg IHJldHVybihjbWZsZ3MgPSAtMik7Ci0JCSAgICAvKiBUaGUgLTYgY29kZSBpcyB0byBsZXQgY2Fs bGVyIHRyeSBhbm90aGVyIHRhYmxlICovCi0JCX0KLQkJYnJlYWs7Ci0JICAgICAgZGVmYXVsdDoK LSNpZmRlZiBDS19SRUNBTEwKLQkJaWYgKHRlc3QodGFibGVbel0uZmxncyxDTV9OT1IpKSBub19y ZWNhbGwgPSAxOwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotCQlpZiAoenogPT0gNCkKLQkJICBz d2FyZyA9IDE7Ci0JCWNta3dmbGdzID0gdGFibGVbel0uZmxnczsKLQkJYnJlYWs7Ci0JICAgIH0K LQkgICAgcmV0dXJuKHkpOwotCi0JICBjYXNlIDI6CQkJLyogVXNlciB0ZXJtaW5hdGVkIHdvcmQg d2l0aCBFU0MgKi8KLQkgICAgZGVidWcoRjEwMSwiY21rZXkgRXNjIGNjIiwiIixjYyk7Ci0gICAg ICAgICAgICBpZiAoY2MgPT0gMCkgewotCQlpZiAoKnhkZWYgIT0gTlVMKSB7ICAgICAvKiBOb3Ro aW5nIGluIGF0bWJ1ZiAqLwotCQkgICAgcHJpbnRmKCIlcyAiLHhkZWYpOyAvKiBTdXBwbHkgZGVm YXVsdCBpZiBhbnkgKi8KLSNpZmRlZiBHRU1ET1MKLQkJICAgIGZmbHVzaChzdGRvdXQpOwotI2Vu ZGlmIC8qIEdFTURPUyAqLwotCQkgICAgYWRkYnVmKHhkZWYpOwotCQkgICAgaWYgKHNldGF0bSh4 ZGVmLDApIDwgMCkgewotCQkJcHJpbnRmKCI/RGVmYXVsdCB0b28gbG9uZ1xuIik7Ci0JCQlyZXR1 cm4oLTkpOwotCQkgICAgfQotCQkgICAgaW53b3JkID0gY21mbGdzID0gMDsKLQkJICAgIGRlYnVn KEYxMTEsImNta2V5OiBkZWZhdWx0IixhdG1idWYsY2MpOwotCQl9IGVsc2UgewotCQkgICAgZGVi dWcoRjEwMSwiY21rZXkgRXNjIHBtc2ciLCIiLDApOwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIENo YWluZWQgRkRCcy4uLiAgVGhlIGlkZWEgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIG1pZ2h0IG5vdCBo YXZlIGEgZGVmYXVsdCwKLSAgYnV0IHRoZSBuZXh0IG9uZSBtaWdodC4gIEJ1dCBpZiBpdCBkb2Vz bid0LCB0aGVyZSBpcyBubyB3YXkgdG8gY29tZSBiYWNrIHRvCi0gIHRoaXMgb25lLiAgVG8gYmUg cmV2aXNpdGVkIGxhdGVyLi4uCi0qLwotCQkgICAgaWYgKHhjbWZkYikJCS8qIENoYWluZWQgZmRi IC0tIHRyeSBuZXh0IG9uZSAqLwotCQkgICAgICByZXR1cm4oLTMpOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQkJICAgIGlmIChwbXNnICYgKDF8NCkpIHsJLyogU28gZm9yIG5vdyBqdXN0IGJlZXAg Ki8KLQkJCWJsZWVwKEJQX1dBUk4pOwotCQkgICAgfQotCQkgICAgYnJlYWs7Ci0JCX0KLSAgICAg ICAgICAgIH0KLQkgICAgaWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMg Z2l2ZW4gKi8KLQkJY2hhciAqIHBwOwotCQl6cSA9IGF0eGJ1ZjsJCS8qIGFwcGx5IGl0ICovCi0J CXBwID0gYXR4YnVmOwotCQlhdHhuID0gQ01EQkw7Ci0JCWlmICgoKmYpKGF0bWJ1ZiwmenEsJmF0 eG4pIDwgMCkKLQkJICByZXR1cm4oLTIpOwotCQlpZiAoISpwcCkKLQkJICBwcCA9IHhkZWY7Ci0J CWlmIChzZXRhdG0ocHAsMCkgPCAwKSB7Ci0JCSAgICBwcmludGYoIkV2YWx1YXRlZCBrZXl3b3Jk IHRvbyBsb25nXG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkgICAgfQotCSAgICB5ID0g bG9va3VwKHRhYmxlLGF0bWJ1ZixuLCZ6KTsgLyogU29tZXRoaW5nIGluIGF0bWJ1ZiAqLwotCSAg ICBkZWJ1ZyhGMTExLCJjbWtleSBsb29rdXAgeSIsYXRtYnVmLHkpOwotCSAgICBkZWJ1ZyhGMTEx LCJjbWtleSBsb29rdXAgeiIsYXRtYnVmLHopOwotCSAgICBpZiAoeSA9PSAtMiAmJiB6ID49IDAg JiYgeiA8IG4pIHsgLyogQW1iaWd1b3VzICovCi0jaWZuZGVmIE5PUEFSVElBTAotCQlpbnQgaiwg aywgbGVuID0gOTk5OTsJLyogRG8gcGFydGlhbCBjb21wbGV0aW9uICovCi0JCS8qIFNraXAgcGFz dCBhbnkgYWJicmV2aWF0aW9ucyBpbiB0aGUgdGFibGUgKi8KLQkJZm9yICggOyB6IDwgbjsgeisr KSB7Ci0JCSAgICBpZiAoKHRhYmxlW3pdLmZsZ3MgJiBDTV9BQlIpID09IDApCi0JCSAgICAgIGJy ZWFrOwotCQkgICAgaWYgKCEodGFibGVbel0uZmxncyAmIENNX0hMUCkgfHwgKHBtc2cgJiAyKSkK LQkJICAgICAgYnJlYWs7Ci0JCX0KLQkJZGVidWcoRjExMSwiY21rZXkgcGFydGlhbCB6IixhdG1i dWYseik7Ci0JCWRlYnVnKEYxMTEsImNta2V5IHBhcnRpYWwgbiIsYXRtYnVmLG4pOwotCQlmb3Ig KGogPSB6KzE7IGogPCBuOyBqKyspIHsKLQkJICAgIGRlYnVnKEYxMTEsImNta2V5IHBhcnRpYWwg aiIsdGFibGVbal0ua3dkLGopOwotCQkgICAgaWYgKGNrc3RyY21wKGF0bWJ1Zix0YWJsZVtqXS5r d2QsY2MsMCkpCi0JCSAgICAgIGJyZWFrOwotCQkgICAgaWYgKHRhYmxlW2pdLmZsZ3MgJiBDTV9B QlIpCi0JCSAgICAgIGNvbnRpbnVlOwotCQkgICAgaWYgKCh0YWJsZVtqXS5mbGdzICYgQ01fSExQ KSAmJiAhKHBtc2cgJiAyKSkKLQkJICAgICAgY29udGludWU7Ci0JCSAgICBrID0gY2tzdHJwcmUo dGFibGVbel0ua3dkLHRhYmxlW2pdLmt3ZCk7Ci0JCSAgICBkZWJ1ZyhGMTExLCJjbWtleSBwYXJ0 aWFsIGsiLHRhYmxlW3pdLmt3ZCxrKTsKLQkJICAgIGlmIChrIDwgbGVuKQotCQkgICAgICBsZW4g PSBrOyAvKiBMZW5ndGggb2YgbG9uZ2VzdCBjb21tb24gcHJlZml4ICovCi0JCX0KLQkJZGVidWco RjExMSwiY21rZXkgcGFydGlhbCBsZW4iLHRhYmxlW3pdLmt3ZCxsZW4pOwotCQlpZiAobGVuICE9 IDk5OTkgJiYgbGVuID4gY2MpIHsKLQkJICAgIGNrc3RybmNhdChhdG1idWYsdGFibGVbel0ua3dk K2NjLEFUTUJMKTsKLQkJICAgIGF0bWJ1ZltsZW5dID0gTlVMOwotCQkgICAgcHJpbnRmKCIlcyIs YXRtYnVmK2NjKTsKLQkJICAgIGNrc3RybmNhdChjbWRidWYsYXRtYnVmK2NjLENNREJMKTsKLQkJ ICAgIHhjICs9IChsZW4gLSBjYyk7Ci0JCSAgICBjYyA9IGxlbjsKLQkJfQotI2VuZGlmIC8qIE5P UEFSVElBTCAqLwotCQlibGVlcChCUF9XQVJOKTsKLQkJYnJlYWs7Ci0JICAgIH0gZWxzZSBpZiAo eSA9PSAtMykgewotCQlibGVlcChCUF9XQVJOKTsKLQkJYnJlYWs7Ci0JICAgIH0gZWxzZSBpZiAo eSA9PSAtMSkgewkvKiBOb3QgZm91bmQgKi8KLQkJaWYgKChwbXNnICYgMSkgJiYgIXF1aWV0KSB7 Ci0JCSAgICBibGVlcChCUF9GQUlMKTsKLQkJICAgIHByaW50ZigiP05vIGtleXdvcmRzIG1hdGNo IC0gXCIlc1wiXG4iLGF0bWJ1Zik7Ci0JCX0KLQkJY21mbGdzID0gLTI7Ci0JCXJldHVybigtOSk7 Ci0JICAgIH0KLS8qCi0gIElmIHdlIGZvdW5kIGl0LCBidXQgaXQncyBhIGhlbHAtb25seSBrZXl3 b3JkIGFuZCB0aGUgImhlbHAiIGJpdCBpcyBub3QKLSAgc2V0IGluIHBtc2csIHRoZW4gbm90IGZv dW5kLgotKi8KLQkgICAgZGVidWcoRjEwMSwiY21rZXkgZmxncyIsIiIsdGFibGVbel0uZmxncyk7 Ci0JICAgIGlmICh0ZXN0KHRhYmxlW3pdLmZsZ3MsQ01fSExQKSAmJiAoKHBtc2cgJiAyKSA9PSAw KSkgewotCQlpZiAoKHBtc2cgJiAxKSAmJiAhcXVpZXQpIHsKLQkJICAgIGJsZWVwKEJQX0ZBSUwp OwotCQkgICAgcHJpbnRmKCI/Tm8ga2V5d29yZHMgbWF0Y2ggLSAlc1xuIixhdG1idWYpOwotCQl9 Ci0JCWNtZmxncyA9IC0yOwotCQlyZXR1cm4oLTkpOwotCSAgICB9Ci0vKgotICBTZWUgaWYgdGhl IGtleXdvcmQganVzdCBmb3VuZCBoYXMgdGhlIENNX0FCUiBiaXQgc2V0IGluIGl0cyBmbGdzIGZp ZWxkLCBhbmQKLSAgaWYgc28sIHNlYXJjaCBmb3J3YXJkcyBpbiB0aGUgdGFibGUgZm9yIGEga2V5 d29yZCB0aGF0IGhhcyB0aGUgc2FtZSBrd3ZhbAotICBidXQgZG9lcyBub3QgaGF2ZSBDTV9BQlIg KG9yIENNX0lOVj8pIHNldCwgYW5kIHRoZW4gZXhwYW5kIHVzaW5nIHRoZSBmdWxsCi0gIGtleXdv cmQuICBXQVJOSU5HOiBUaGlzIGFzc3VtZXMgdGhhdCAoYSkga2V5d29yZHMgYXJlIGluIGFscGhh YmV0aWNhbCBvcmRlciwKLSAgYW5kIChiKSB0aGUgQ01fQUJSIGJpdCBpcyBzZXQgb25seSBpZiB0 aGUgdGhlIGFiYnJldmlhdGVkIGtleXdvcmQgaXMgYSB0cnVlCi0gIGFiYnJldmlhdGlvbiAobGVm dCBzdWJzdHJpbmcpIG9mIHRoZSBmdWxsIGtleXdvcmQuCi0qLwotCSAgICBpZiAodGVzdCh0YWJs ZVt6XS5mbGdzLENNX0FCUikpIHsKLQkJaW50IHp6OwotCQlmb3IgKHp6ID0geisxOyB6eiA8IG47 IHp6KyspCi0JCSAgaWYgKCh0YWJsZVt6el0ua3d2YWwgPT0gdGFibGVbel0ua3d2YWwpICYmCi0J CSAgICAgICghdGVzdCh0YWJsZVt6el0uZmxncyxDTV9BQlIpKSAmJgotCQkgICAgICAoIXRlc3Qo dGFibGVbenpdLmZsZ3MsQ01fSU5WKSkpIHsKLQkJICAgICAgeiA9IHp6OwotCQkgICAgICBicmVh azsKLQkJICB9Ci0JICAgIH0KLQkgICAgeHAgPSB0YWJsZVt6XS5rd2QgKyBjYzsKLQkgICAgaWYg KGNtc3dpdGNoICYmIHRlc3QodGFibGVbel0uZmxncyxDTV9BUkcpKSB7Ci0jaWZkZWYgVk1TCi0J CXByaW50ZigiJXM9Iix4cCk7Ci0JCWJya2NoYXIgPSAnPSc7Ci0jZWxzZQotCQlwcmludGYoIiVz OiIseHApOwotCQlicmtjaGFyID0gJzonOwotI2VuZGlmIC8qIFZNUyAqLwotCSAgICB9IGVsc2Ug ewotCQlwcmludGYoIiVzICIseHApOwotCQlicmtjaGFyID0gU1A7Ci0JICAgIH0KLSNpZmRlZiBD S19SRUNBTEwKLQkgICAgaWYgKHRlc3QodGFibGVbel0uZmxncyxDTV9OT1IpKSBub19yZWNhbGwg PSAxOwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotCSAgICBjbWt3ZmxncyA9IHRhYmxlW3pdLmZs Z3M7Ci0jaWZkZWYgR0VNRE9TCi0JICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIEdFTURP UyAqLwotCSAgICBhZGRidWYoeHApOwotCSAgICBpZiAoY21zd2l0Y2ggJiYgdGVzdCh0YWJsZVt6 XS5mbGdzLENNX0FSRykpIHsKLQkJYnAtLTsJCQkvKiBSZXBsYWNlIHRyYWlsaW5nIHNwYWNlIHdp dGggOiAqLwotI2lmZGVmIFZNUwotCQkqYnArKyA9ICc9JzsKLSNlbHNlCi0JCSpicCsrID0gJzon OwotI2VuZGlmIC8qIFZNUyAqLwotCQkqYnAgPSBOVUw7Ci0JCW5wID0gYnA7Ci0JCXN3YXJnID0g MTsKLQkgICAgfQotCSAgICBpbndvcmQgPSAwOwotCSAgICBjbWZsZ3MgPSAwOwotCSAgICBkZWJ1 ZyhGMTEwLCJjbWtleTogYWRkYnVmIixjbWRidWYsMCk7Ci0JICAgIHJldHVybih5KTsKLQotCSAg Y2FzZSAzOgkJCS8qIFVzZXIgdHlwZWQgIj8iICovCi0JICAgIGlmIChmKSB7CQkJLyogSWYgYSBj b252ZXJzaW9uIGZ1bmN0aW9uIGlzIGdpdmVuICovCi0JCWNoYXIgKiBwcDsKLQkJenEgPSBhdHhi dWY7CQkvKiBkbyB0aGUgY29udmVyc2lvbiBub3cuICovCi0JCXBwID0gYXR4YnVmOwotCQlhdHhu ID0gQ01EQkw7Ci0JCWlmICgoKmYpKGF0bWJ1ZiwmenEsJmF0eG4pIDwgMCkgcmV0dXJuKC0yKTsK LQkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKLQkJICAgIHByaW50ZigiP0V2YWx1YXRlZCBrZXl3 b3JkIHRvbyBsb25nXG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkgICAgfQotCSAgICB5 ID0gbG9va3VwKHRhYmxlLGF0bWJ1ZixuLCZ6KTsgLyogTG9vayB1cCB3aGF0IHdlIGhhdmUgc28g ZmFyLiAqLwotCSAgICBpZiAoeSA9PSAtMSkgewotCQkvKgotCQkgIFN0cmljdGx5IHNwZWFraW5n IGlmIHRoZSBtYWluIGtleXdvcmQgdGFibGUgc2VhcmNoIGZhaWxzLAotCQkgIHRoZW4gd2Ugc2hv dWxkIGxvb2sgaW4gdGhlIHRva2VuIHRhYmxlIGlmIG9uZSBpcyBnaXZlbi4KLQkJICBCdXQgaW4g cHJhY3RpY2UsIHRva2VucyBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0aGUgbWFpbgotCQkgIGtleXdv cmQgdGFibGUuCi0JCSovCi0JCWNtZmxncyA9IC0yOwotCQlpZiAoKHBtc2cgJiAxKSAmJiAhcXVp ZXQpIHsKLQkJICAgIGJsZWVwKEJQX0ZBSUwpOwotCQkgICAgcHJpbnRmKCIgTm8ga2V5d29yZHMg bWF0Y2hcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCQlyZXR1cm4oLTIpOwotCSAgICB9 Ci0jaWZuZGVmIENPTU1FTlQKLQkgICAgLyogVGhpcyBpcyB0byBhbGxvdyA/LWhlbHAgdG8gd29y ayBpbW1lZGlhdGVseSBhZnRlciBhIHRva2VuICovCi0JICAgIC8qIHdpdGhvdXQgaGF2aW5nIHRv IHR5cGUgYW4gaW50ZXJtZWRpYXRlIHNwYWNlICovCi0JICAgIGlmICh0bCkgewotCQlmb3IgKGkg PSAwOyBpIDwgdGw7IGkrKykgLyogQ2hlY2sgZm9yIHRva2VuICovCi0JCSAgaWYgKHRva1tpXSA9 PSAqYXRtYnVmKSB7IC8qIEdvdCBvbmUgKi8KLQkJICAgICAgZGVidWcoRjAwMCwiY21rZXkgdG9r ZW46IixhdG1idWYsKmF0bWJ1Zik7Ci0JCSAgICAgIHVuZ3dvcmQoKTsJLyogUHV0IGJhY2sgdGhl IGZvbGxvd2luZyB3b3JkICovCi0JCSAgICAgIGNtZmxncyA9IDM7CS8qIEZvcmNlIGhlbHAgbmV4 dCB0aW1lIGFyb3VuZCAqLwotCQkgICAgICByZXR1cm4oLTUpOwkvKiBTcGVjaWFsIHJldHVybiBj b2RlIGZvciB0b2tlbiAqLwotCQkgIH0KLQkgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQot CSAgICBpZiAoKnhobHAgPT0gTlVMKQotCSAgICAgIHByaW50ZigiIE9uZSBvZiB0aGUgZm9sbG93 aW5nOlxuIik7Ci0JICAgIGVsc2UKLQkgICAgICBwcmludGYoIiAlcywgb25lIG9mIHRoZSBmb2xs b3dpbmc6XG4iLHhobHApOwotCSAgICB7Ci0JCWludCB4OwotCQl4ID0gcG1zZyAmICgyfDQpOwkv KiBTZWUga3dkaGVscCgpIGNvbW1lbnRzICovCi0JCWlmIChhdG1idWZbMF0pCQkvKiBJZiBub3Qg YXQgYmVnaW5uaW5nIG9mIGZpZWxkICovCi0JCSAgeCB8PSAxOwkJLyogYWxzbyBzaG93IGludmlz aWJsZXMgKi8KLQkJa3dkaGVscCh0YWJsZSxuLGF0bWJ1ZiwiIiwiIiwxLHgpOwotCSAgICB9Ci0j aWZuZGVmIE5PU1BMCi0JICAgIGlmICghaGF2ZXRva2VuKSB7Ci0JCWV4dGVybiBpbnQgdG9wY21k OwotCQlpZiAodGwgPiAwICYmIHRvcGNtZCAhPSBYWEhMUCkgLyogVGhpcyBpcyBiYWQuLi4gKi8K LQkJICBwcmludGYoIm9yIGEgbWFjcm8gbmFtZSAoXCJkbyA/XCIgZm9yIGEgbGlzdCkgIik7Ci0J ICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCSAgICBpZiAoKmF0bWJ1ZiA9PSBOVUwgJiYgIWhh dmV0b2tlbikgewotCQlpZiAodGwgPT0gMSkKLQkJICBwcmludGYoIm9yIHRoZSB0b2tlbiAlY1xu IiwqdG9rKTsKLQkJZWxzZSBpZiAodGwgPiAxKQotCQkgIHByaW50Zigib3Igb25lIG9mIHRoZSB0 b2tlbnM6ICVzXG4iLGNrc3ByZWFkKHRvaykpOwotCSAgICB9Ci0JICAgIHByaW50ZigiJXMlcyIs IGNtcHJvbSwgY21kYnVmKTsKLQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0JICAgIGJyZWFrOwotCi0J ICBkZWZhdWx0OgotCSAgICBwcmludGYoIlxuJWQgLSBVbmV4cGVjdGVkIHJldHVybiBjb2RlIGZy b20gZ3R3b3JkXG4iLHp6KTsKLQkgICAgcmV0dXJuKGNtZmxncyA9IC0yKTsKLQl9Ci0JenogPSAo cG1zZyAmIDgpID8gZ3R3b3JkKDQpIDogZ3R3b3JkKChwbXNnID09IDQpID8gMSA6IDApOwotCWRl YnVnKEYxMTEsImNta2V5IGd0d29yZCB6eiIsYXRtYnVmLHp6KTsKLSAgICB9Ci19Ci0KLWludAot Y2hrdG9rKHRsaXN0KSBjaGFyICp0bGlzdDsgewotICAgIGNoYXIgKnA7Ci0gICAgcCA9IHRsaXN0 OwotICAgIHdoaWxlICgqcCAhPSBOVUwgJiYgKnAgIT0gKmF0bWJ1ZikgcCsrOwotICAgIHJldHVy bigoKnApID8gKGludCkgKnAgOiAwKTsKLX0KLQotLyogUm91dGluZXMgZm9yIHBhcnNpbmcgYW5k IGNvbnZlcnRpbmcgZGF0ZXMgYW5kIHRpbWVzICovCi0KLSNkZWZpbmUgaXNkYXRlc2VwKGMpIChj a3N0cmNocigiIC0vLl8iLGMpKQotCi0jZGVmaW5lIENNREFURUJVRiAxMDI0Ci1jaGFyIGNtZGF0 ZWJ1ZltDTURBVEVCVUYrNF0gPSB7IE5VTCwgTlVMIH07Ci1zdGF0aWMgY2hhciAqIGNtZGF0ZWJw ID0gY21kYXRlYnVmOwotY2hhciAqIGNtZGF0ZW1zZyA9IE5VTEw7Ci0KLXN0YXRpYyBzdHJ1Y3Qg a2V5dGFiIHRpbWV1bml0c1tdID0gewotICAgIHsgImRheXMiLCAgIFRVX0RBWVMsICAgMCB9LAot ICAgIHsgIm1vbnRocyIsIFRVX01PTlRIUywgMCB9LAotICAgIHsgIndlZWtzIiwgIFRVX1dFRUtT LCAgMCB9LAotICAgIHsgIndrcyIsICAgIFRVX1dFRUtTLCAgMCB9LAotICAgIHsgInllYXJzIiwg IFRVX1lFQVJTLCAgMCB9LAotICAgIHsgInlycyIsICAgIFRVX1lFQVJTLCAgMCB9Ci19Owotc3Rh dGljIGludCBudW5pdHMgPSAoc2l6ZW9mKHRpbWV1bml0cykgLyBzaXplb2Yoc3RydWN0IGtleXRh YikpOwotCi0jZGVmaW5lIFNZTV9OT1cgIDAKLSNkZWZpbmUgU1lNX1RPREEgMQotI2RlZmluZSBT WU1fVE9NTyAyCi0jZGVmaW5lIFNZTV9ZRVNUIDMKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgc3lt ZGF5dGFiW10gPSB7Ci0gICAgeyAibm93IiwgICAgICAgU1lNX05PVywgIDAgfSwKLSAgICB7ICJ0 b2RheSIsICAgICBTWU1fVE9EQSwgMCB9LAotICAgIHsgInRvbW9ycm93IiwgIFNZTV9UT01PLCAw IH0sCi0gICAgeyAieWVzdGVyZGF5IiwgU1lNX1lFU1QsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnN5 bWRheXMgPSAoc2l6ZW9mKHN5bWRheXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1z dGF0aWMgc3RydWN0IGtleXRhYiBkYXlzb2Z3ZWVrW10gPSB7Ci0gICAgeyAiRnJpZGF5IiwgICAg NSwgMCB9LAotICAgIHsgIk1vbmRheSIsICAgIDEsIDAgfSwKLSAgICB7ICJTYXR1cmRheSIsICA2 LCAwIH0sCi0gICAgeyAiU3VuZGF5IiwgICAgMCwgMCB9LAotICAgIHsgIlRodXJzZGF5IiwgIDQs IDAgfSwKLSAgICB7ICJUdWVzZGF5IiwgICAyLCAwIH0sCi0gICAgeyAiV2VkbmVzZGF5IiwgMywg MCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiB1c2F0eltdID0gewkvKiBSRkMgODIyIHRp bWV6b25lcyAgKi8KLSAgICB7ICJjZHQiLCAgNSwgMCB9LAkJCS8qIFZhbHVlcyBhcmUgR01UIG9m ZnNldHMgKi8KLSAgICB7ICJjc3QiLCAgNiwgMCB9LAotICAgIHsgImVkdCIsICA0LCAwIH0sCi0g ICAgeyAiZXN0IiwgIDUsIDAgfSwKLSAgICB7ICJnbXQiLCAgMCwgMCB9LAotICAgIHsgIm1kdCIs ICA2LCAwIH0sCi0gICAgeyAibXN0IiwgIDcsIDAgfSwKLSAgICB7ICJwZHQiLCAgNywgMCB9LAot ICAgIHsgInBzdCIsICA4LCAwIH0sCi0gICAgeyAidXRjIiwgIDAsIDAgfSwKLSAgICB7ICJ6dWx1 IiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBudXNhdHogPSAoc2l6ZW9mKHVzYXR6KSAvIHNpemVv ZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLQotLyogIEMgTSBDIFYgVCBEIEEgVCBFICAtLSAgQ29udmVy dHMgZnJlZS1mb3JtIGRhdGUgdG8gc3RhbmRhcmQgZm9ybS4gICovCi0KLS8qCi0gICBDYWxsIHdp dGgKLSAgICAgcyA9IHBvaW50ZXIgdG8gZnJlZS1mb3JtYXQgZGF0ZSwgdGltZSwgb3IgZGF0ZSBh bmQgdGltZS4KLSAgICAgdCA9IDA6IHJldHVybiB0aW1lIG9ubHkgaWYgdGltZSB3YXMgZ2l2ZW4g aW4gcy4KLSAgICAgdCA9IDE6IGFsd2F5cyByZXR1cm4gdGltZSAoMDA6MDA6MDAgaWYgbm8gdGlt ZSBnaXZlbiBpbiBzKS4KLSAgICAgdCA9IDI6IGFsbG93IHRpbWUgdG8gYmUgPiAyNDowMDowMC4K LSAgIFJldHVybnM6Ci0gICAgIE5VTEwgb24gZmFpbHVyZTsKLSAgICAgUG9pbnRlciB0byAieXl5 eW1tZGQgaGg6bW06c3MiIChsb2NhbCBkYXRlLXRpbWUpIG9uIHN1Y2Nlc3MuCi0qLwotCi0vKgot ICBCZWZvcmUgZmluYWwgcmVsZWFzZSB0aGUgZm9sbG93aW5nIGxvbmcgbGluZXMgc2hvdWxkIGJl IHdyYXBwZWQuCi0gIFVudGlsIHRoZW4gd2UgbGVhdmUgdGhlbSBsb25nIHNpbmNlIHdyYXBwaW5n IHRoZW0gd3JlY2tzIEVNQUNTJ3MKLSAgQyBpbmRlbnRhdGlvbi4KLSovCi0KLS8qIGFzY3RpbWUg cGF0dGVybiAqLwotc3RhdGljIGNoYXIgKiBhdHAxID0gIltBLVpdW2Etel1bYS16XSBbQS1aXVth LXpdW2Etel0gWyAwLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTldOlswLTldWzAtOV0gWzAt OV1bMC05XVswLTldWzAtOV0iOwotCi0vKiBhc2N0aW1lIHBhdHRlcm4gd2l0aCB0aW1lem9uZSAq Lwotc3RhdGljIGNoYXIgKiBhdHAyID0gIltBLVpdW2Etel1bYS16XSBbQS1aXVthLXpdW2Etel0g WyAwLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTldOlswLTldWzAtOV0gW0EtWl1bQS1aXVtB LVpdIFswLTldWzAtOV1bMC05XVswLTldIjsKLQotI2RlZmluZSBEQVRFQlVGTEVOIDEyNwotI2Rl ZmluZSBZWVlZTU1ERCAxMgotCi0jZGVmaW5lIGlzbGVhcCh5KSAoKCh5KSAlIDQgPT0gMCAmJiAo eSkgJSAxMDAgIT0gMCkgfHwgKHkpICUgNDAwID09IDApCi1zdGF0aWMgaW50IG1kYXlzWzEzXSA9 IHsgMCwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSB9Owot Ci0jZGVmaW5lIE5FRURfREFZUyAxCi0jZGVmaW5lIE5FRURfSFJTICAyCi0jZGVmaW5lIE5FRURf TUlOUyAzCi0jZGVmaW5lIE5FRURfU0VDUyA0Ci0jZGVmaW5lIE5FRURfRlJBQyA1Ci0KLSNkZWZp bmUgREVMVEFCVUYgMjU2Ci1zdGF0aWMgY2hhciBkZWx0YWJ1ZltERUxUQUJVRl07Ci1zdGF0aWMg Y2hhciAqIGRlbHRhYnAgPSBkZWx0YWJ1ZjsKLQotY2hhciAqCi1jbWRlbHRhKHl5LCBtbywgZGQs IGhoLCBtbSwgc3MsIHNpZ24sIGR5eSwgZG1vLCBkZGQsIGRoaCwgZG1tLCBkc3MpCi0gICAgaW50 IHl5LCBtbywgZGQsIGhoLCBtbSwgc3MsIHNpZ24sIGR5eSwgZG1vLCBkZGQsIGRoaCwgZG1tLCBk c3M7Ci0vKiBjbWRlbHRhICovIHsKLSAgICBpbnQgenl5LCB6bW8sIHpkZCwgemhoLCB6bW0sIHpz czsKLSAgICBsb25nIHQxLCB0MiwgdDMsIHQ0OwotICAgIGxvbmcgZDEgPSAwLCBkMiwgZDM7Ci0g ICAgY2hhciBkYXRlYnVmW0RBVEVCVUZMRU4rMV07Ci0KLSNpZmRlZiBERUJVRwotICAgIGlmIChk ZWJsb2cpIHsKLQlkZWJ1ZyhGMTAxLCJjbWRlbHRhIHl5IiwiIix5eSk7Ci0JZGVidWcoRjEwMSwi Y21kZWx0YSBtbyIsIiIsbW8pOwotCWRlYnVnKEYxMDEsImNtZGVsdGEgZGQiLCIiLGRkKTsKLQlk ZWJ1ZyhGMTAxLCJjbWRlbHRhIGhoIiwiIixoaCk7Ci0JZGVidWcoRjEwMSwiY21kZWx0YSBtbSIs IiIsbW0pOwotCWRlYnVnKEYxMDEsImNtZGVsdGEgc3MiLCIiLHNzKTsKLQlkZWJ1ZyhGMTAxLCJj bWRlbHRhIHNpZ24iLCIiLHNpZ24pOwotCWRlYnVnKEYxMDEsImNtZGVsdGEgZHl5IiwiIixkeXkp OwotCWRlYnVnKEYxMDEsImNtZGVsdGEgZG1vIiwiIixkbW8pOwotCWRlYnVnKEYxMDEsImNtZGVs dGEgZGRkIiwiIixkZGQpOwotCWRlYnVnKEYxMDEsImNtZGVsdGEgZGhoIiwiIixkaGgpOwotCWRl YnVnKEYxMDEsImNtZGVsdGEgZG1tIiwiIixkbW0pOwotCWRlYnVnKEYxMDEsImNtZGVsdGEgZHNz IiwiIixkc3MpOwotICAgIH0KLSNlbmRpZiAvKiBERUJMT0cgKi8KLQotICAgIGlmICh5eSA8IDAg fHwgeXkgPiA5OTk5KSB7Ci0JbWFrZXN0cigmY21kYXRlbXNnLCJCYXNlIHllYXIgb3V0IG9mIHJh bmdlIik7Ci0JZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVM TCk7Ci0gICAgfQotICAgIGlmIChtbyA8IDEgfHwgbW8gPiAxMikgewotCW1ha2VzdHIoJmNtZGF0 ZW1zZywiQmFzZSBtb250aCBvdXQgb2YgcmFuZ2UiKTsKLQlkZWJ1ZyhGMTExLCJjbWRlbHRhIixj bWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgaWYgKGRkIDwgMSB8fCBk ZCA+IG1kYXlzW21vXSkgewotCW1ha2VzdHIoJmNtZGF0ZW1zZywiQmFzZSBkYXkgb3V0IG9mIHJh bmdlIik7Ci0JZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVM TCk7Ci0gICAgfQotICAgIGlmIChoaCA8IDAgfHwgaGggPiAyMykgewotCW1ha2VzdHIoJmNtZGF0 ZW1zZywiQmFzZSBob3VyIG91dCBvZiByYW5nZSIpOwotCWRlYnVnKEYxMTEsImNtZGVsdGEiLGNt ZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBpZiAobW0gPCAwIHx8IG1t ID4gNTkpIHsKLQltYWtlc3RyKCZjbWRhdGVtc2csIkJhc2UgbWludXRlIG91dCBvZiByYW5nZSIp OwotCWRlYnVnKEYxMTEsImNtZGVsdGEiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwot ICAgIH0KLSAgICBpZiAoc3MgPCAwIHx8IHNzID4gNjApIHsKLQltYWtlc3RyKCZjbWRhdGVtc2cs IkJhc2Ugc2Vjb25kIG91dCBvZiByYW5nZSIpOwotCWRlYnVnKEYxMTEsImNtZGVsdGEiLGNtZGF0 ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBzaWduID0gKHNpZ24gPCAwKSA/ IC0xIDogMTsKLSAgICBpZiAoZG1vICE9IDApIHsKLSAgICAgICAgaWYgKHNpZ24gPiAwKSB7Ci0g ICAgICAgICAgICBtbyArPSAoc2lnbiAqIGRtbyk7Ci0gICAgICAgICAgICBpZiAobW8gPiAxMikg ewotICAgICAgICAgICAgICAgIHl5ICs9IG1vIC8gMTI7Ci0gICAgICAgICAgICAgICAgbW8gPSBt byAlIDEyOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHNpZ24gPCAwKSB7Ci0g ICAgICAgICAgICB3aGlsZSAoZG1vID4gMTIpIHsKLSAgICAgICAgICAgICAgICB5eS0tOwotICAg ICAgICAgICAgICAgIGRtbyAtPSAxMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChk bW8gPCBtbykgewotICAgICAgICAgICAgICAgIG1vIC09IGRtbzsKLSAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgeXktLTsKLSAgICAgICAgICAgICAgICBtbyA9IDEyIC0gKGRt byAtIG1vKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZHl5ICE9 IDApIHsKLQl5eSArPSAoc2lnbiAqIGR5eSk7Ci0JaWYgKHl5ID4gOTk5OSB8fCB5eSA8IDApIHsK LQkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJSZXN1bHQgeWVhciBvdXQgb2YgcmFuZ2UiKTsKLQkg ICAgZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0xKTsKLQkgICAgcmV0dXJuKE5VTEwp OwotCX0KLSAgICB9Ci0gICAgc3ByaW50ZihkYXRlYnVmLCIlMDRkJTAyZCUwMmQgJTAyZDolMDJk OiUwMmQiLHl5LG1vLGRkLGhoLG1tLHNzKTsKLSAgICBkMSA9IG1qZChkYXRlYnVmKTsKLSAgICBk ZWJ1ZyhGMTExLCJjbWRlbHRhIG1qZCIsZGF0ZWJ1ZixkMSk7ICAgIAotCi0gICAgdDEgPSBoaCAq IDM2MDAgKyBtbSAqIDYwICsgc3M7CS8qIEJhc2UgdGltZSB0byBzZWNzIHNpbmNlIG1pZG5pZ2h0 ICovCi0gICAgdDIgPSBkaGggKiAzNjAwICsgZG1tICogNjAgKyBkc3M7CS8qIERlbHRhIHRpbWUs IGRpdHRvICovCi0gICAgdDMgPSB0MSArIChzaWduICogdDIpOwkJLyogR2V0IHN1bSAob3IgZGlm ZmVyZW5jZSkgKi8KLSAgICAKLSAgICBkMiA9IChzaWduICogZGRkKTsJCQkvKiBEZWx0YSBkYXlz ICovCi0gICAgZDIgKz0gdDMgLyA4NjQwMEw7Ci0KLSAgICB0NCA9IHQzICUgODY0MDBMOwkJCS8q IEZyYWN0aW9uYWwgcGFydCBvZiBkYXkgKi8KLSAgICBpZiAodDQgPCAwKSB7CQkJLyogSWYgbmVn YXRpdmUgKi8KLQlkMi0tOwkJCQkvKiBvbmUgbGVzcyBkZWx0YSBkYXkgKi8KLQl0NCArPSA4NjQw MEw7CQkJLyogZ2V0IHBvc2l0aXZlIHNlY29uZHMgKi8KLSAgICB9Ci0gICAgaGggPSAoaW50KSAo dDQgLyAzNjAwTCk7Ci0gICAgbW0gPSAoaW50KSAodDQgJSAzNjAwTCkgLyA2MDsKLSAgICBzcyA9 IChpbnQpICh0NCAlIDM2MDBMKSAlIDYwOwotCi0gICAgc3ByaW50ZihkYXRlYnVmLCIlcyAlMDJk OiUwMmQ6JTAyZCIsIG1qZDJkYXRlKGQxK2QyKSxoaCxtbSxzcyk7Ci0gICAgewotCWludCBsZW4s IGssIG47Ci0JY2hhciAqIHA7Ci0JbGVuID0gc3RybGVuKGRhdGVidWYpOwotCWsgPSBkZWx0YWJw IC0gKGNoYXIgKilkZWx0YWJ1ZjsJLyogU3BhY2UgdXNlZCAqLwotCW4gPSBERUxUQUJVRiAtIGsg LSAxOwkJLyogU3BhY2UgbGVmdCAqLwotCWlmIChuIDwgbGVuKSB7CQkJLyogTm90IGVub3VnaD8g Ki8KLQkgICAgZGVsdGFicCA9IGRlbHRhYnVmOwkJLyogV3JhcCBhcm91bmQgKi8KLQkgICAgbiA9 IERFTFRBQlVGOwotCX0KLQlja3N0cm5jcHkoZGVsdGFicCxkYXRlYnVmLG4pOwotCXAgPSBkZWx0 YWJwOwotCWRlbHRhYnAgKz0gbGVuICsgMTsKLQlyZXR1cm4ocCk7Ci0gICAgfQotfQotCi0KLS8q IENvbnZlcnQgRGVsdGEgVGltZSB0byBTZWNvbmRzICovCi0KLWludAotZGVsdGEyc2VjKHMscmVz dWx0KSBjaGFyICogczsgbG9uZyAqIHJlc3VsdDsgewotICAgIGxvbmcgZGRheXMgPSAwTCwgeno7 Ci0gICAgaW50IGRzaWduID0gMSwgZGhvdXJzID0gMCwgZG1pbnMgPSAwLCBkc2VjcyA9IDAsIHVu aXRzOwotICAgIGludCBzdGF0ZSA9IE5FRURfREFZUzsKLSAgICBjaGFyICpwLCAqcDIsICpwMywg YyA9IDA7Ci0gICAgY2hhciBidWZbNjRdOwotCi0gICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgaWYg KCEqcykKLSAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKChpbnQpc3RybGVuKHMpID4gNjMpCi0g ICAgICByZXR1cm4oLTEpOwotICAgIGNrc3RybmNweShidWYscyw2NCk7Ci0gICAgcCA9IGJ1ZjsK LQotICAgIGlmICgqcCAhPSAnKycgJiYgKnAgIT0gJy0nKQotICAgICAgcmV0dXJuKC0xKTsKLQot ICAgIGlmICgqcCsrID09ICctJykKLSAgICAgIGRzaWduID0gLTE7Ci0gICAgd2hpbGUgKCpwID09 IFNQKQkJCS8qIFNraXAgaW50ZXJ2ZW5pbmcgc3BhY2VzICovCi0gICAgICBwKys7Ci0KLSAgICB3 aGlsZSAoc3RhdGUpIHsJCQkvKiBGU0EgdG8gcGFyc2UgZGVsdGEgdGltZSAqLwotCWlmIChzdGF0 ZSA8IDAgfHwgIWlzZGlnaXQoKnApKQotCSAgcmV0dXJuKC0xKTsKLQlwMiA9IHA7CQkJCS8qIEdl dCBuZXh0IG51bWVyaWMgZmllbGQgKi8KLQl3aGlsZSAoaXNkaWdpdCgqcDIpKQotCSAgcDIrKzsK LQljID0gKnAyOwkJCS8qIEFuZCBicmVhayBjaGFyYWN0ZXIgKi8KLQkqcDIgPSBOVUw7CQkJLyog VGVybWluYXRlIHRoZSBudW1iZXIgKi8KLQlzd2l0Y2ggKHN0YXRlKSB7CQkvKiBJbnRlcnByZXQg YWNjb3JkaW5nIHRvIHN0YXRlICovCi0JICBjYXNlIE5FRURfREFZUzoJCS8qIEluaXRpYWwgKi8K LQkgICAgaWYgKChjID09ICctJykgfHwJCS8qIFZNUyBmb3JtYXQgKi8KLQkJKChjID09ICdkJyB8 fCBjID09ICdEJykKLQkJICYmICFpc2FscGhhKCoocDIrMSkpKSkgeyAvKiBEYXlzICovCi0JCWRk YXlzID0gYXRvbChwKTsKLQkJaWYgKCEqKHAyKzEpKQkJCQotCQkgIHN0YXRlID0gMDsKLQkJZWxz ZQkJCS8qIGlmIGFueXRoaW5nIGlzIGxlZnQgKi8KLQkJICBzdGF0ZSA9IE5FRURfSFJTOwkvKiBu b3cgd2Ugd2FudCBob3Vycy4gKi8KLQkgICAgfSBlbHNlIGlmIChjID09ICc6JykgewkvKiBkZWxp bWl0ZXIgaXMgY29sb24gKi8KLQkJZGhvdXJzID0gYXRvaShwKTsJLyogc28gaXQncyBob3VycyAq LwotCQlzdGF0ZSA9IE5FRURfTUlOUzsJLyogbm93IHdlIHdhbnQgbWludXRlcyAqLwotCSAgICB9 IGVsc2UgaWYgKCFjKSB7CQkvKiBlbmQgb2Ygc3RyaW5nICovCi0JCWRob3VycyA9IGF0b2kocCk7 CS8qIGl0J3Mgc3RpbGwgaG91cnMgKi8KLQkJc3RhdGUgPSAwOwkJLyogYW5kIHdlJ3JlIGRvbmUg Ki8KLQkgICAgfSBlbHNlIGlmIChpc2FscGhhKGMpIHx8IGMgPT0gU1ApIHsKLQkJaWYgKGMgPT0g U1ApIHsJCS8qIEl0J3MgYSBrZXl3b3JkPyAqLwotCQkgICAgcDIrKzsJCS8qIFNraXAgc3BhY2Vz ICovCi0JCSAgICB3aGlsZSAoKnAyID09IFNQKQotCQkgICAgICBwMisrOwotCQl9IGVsc2UgewkJ Lyogb3IgcmVwbGFjZSBmaXJzdCBsZXR0ZXIgKi8KLQkJICAgICpwMiA9IGM7Ci0JCX0KLQkJcDMg PSBwMjsJCS8qIHAyIHBvaW50cyB0byBiZWdpbm5pbmcgb2Yga2V5d29yZCAqLwotCQl3aGlsZSAo aXNhbHBoYSgqcDMpKQkvKiBGaW5kIGVuZCBvZiBrZXl3b3JkICovCi0JCSAgcDMrKzsKLQkJYyA9 ICpwMzsJCS8qIE5VTCBpdCBvdXQgc28gd2UgY2FuIGxvb2sgaXQgdXAgKi8KLQkJaWYgKCpwMykJ CS8qIHAzIHBvaW50cyB0byBrZXl3b3JkIHRlcm1pbmF0b3IgKi8KLQkJICAqcDMgPSBOVUw7Ci0J CWlmICgodW5pdHMgPSBsb29rdXAodGltZXVuaXRzLHAyLG51bml0cyxOVUxMKSkgPCAwKQotCQkg IHJldHVybigtMSk7Ci0JCSpwMiA9IE5VTDsJCS8qIFJlLXRlcm1pbmF0ZSB0aGUgbnVtYmVyICov Ci0JCSpwMyA9IGM7Ci0JCXdoaWxlICgqcDMgPT0gU1ApCS8qIFBvaW50IGF0IGZpZWxkIGFmdGVy IHVuaXRzICovCi0JCSAgcDMrKzsKLQkJcDIgPSBwMzsKLQkJc3dpdGNoICh1bml0cykgewotCQkg IGNhc2UgVFVfREFZUzoKLQkJICAgIGRkYXlzID0gYXRvbChwKTsKLQkJICAgIGJyZWFrOwotCQkg IGRlZmF1bHQ6Ci0JCSAgICByZXR1cm4oLTEpOwotCQl9Ci0JCWlmICgqcDIpIHsKLQkJICAgIHN0 YXRlID0gTkVFRF9IUlM7Ci0JCSAgICBwMi0tOwotCQl9IGVsc2UKLQkJICBzdGF0ZSA9IDA7Ci0J ICAgIH0gZWxzZSB7CQkJLyogQW55dGhpbmcgZWxzZSAqLwotCQlzdGF0ZSA9IC0xOwkJLyogaXMg YW4gZXJyb3IgKi8KLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNhc2UgTkVFRF9IUlM6CQkvKiBM b29raW5nIGZvciBob3VycyAqLwotCSAgICBpZiAoYyA9PSAnOicpIHsKLQkJZGhvdXJzID0gYXRv aShwKTsKLQkJc3RhdGUgPSBORUVEX01JTlM7Ci0JICAgIH0gZWxzZSBpZiAoIWMpIHsKLQkJZGhv dXJzID0gYXRvaShwKTsKLQkJc3RhdGUgPSAwOwotCSAgICB9IGVsc2UgewotCQlzdGF0ZSA9IC0x OwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBORUVEX01JTlM6CQkvKiBMb29raW5nIGZv ciBtaW51dGVzICovCi0JICAgIGlmIChjID09ICc6JykgewotCQlkbWlucyA9IGF0b2kocCk7Ci0J CXN0YXRlID0gTkVFRF9TRUNTOwotCSAgICB9IGVsc2UgaWYgKCFjKSB7Ci0JCWRtaW5zID0gYXRv aShwKTsKLQkJc3RhdGUgPSAwOwotCSAgICB9IGVsc2UgewotCQlzdGF0ZSA9IC0xOwotCSAgICB9 Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBORUVEX1NFQ1M6CQkvKiBMb29raW5nIGZvciBzZWNvbmRz ICovCi0JICAgIGlmIChjID09ICcuJykgewotCQlkc2VjcyA9IGF0b2kocCk7Ci0JCXN0YXRlID0g TkVFRF9GUkFDOwotCSAgICB9IGVsc2UgaWYgKCFjKSB7Ci0JCWRzZWNzID0gYXRvaShwKTsKLQkJ c3RhdGUgPSAwOwotCSAgICB9IGVsc2UgewotCQlzdGF0ZSA9IC0xOwotCSAgICB9Ci0JICAgIGJy ZWFrOwotCSAgY2FzZSBORUVEX0ZSQUM6CQkvKiBGcmFjdGlvbiBvZiBzZWNvbmQgKi8KLQkgICAg aWYgKCFjICYmIHJkaWdpdHMocCkpIHsKLQkJaWYgKCpwID4gJzQnKQotCQkgIGRzZWNzKys7Ci0J CXN0YXRlID0gMDsKLQkgICAgfSBlbHNlIHsKLQkJc3RhdGUgPSAtMTsKLQkgICAgfQotCSAgICBi cmVhazsKLQl9Ci0JaWYgKGMpCQkJCS8qIG5leHQgZmllbGQgaWYgYW55ICovCi0JICBwID0gcDIg KyAxOwotICAgIH0KLSAgICBpZiAoc3RhdGUgPCAwKQotICAgICAgcmV0dXJuKC0xKTsKLQotICAg IC8qIGlmIGRheXMgPiAyNDg1NCBhbmQgc2l6ZW9mKGxvbmcpID09IDMyIHdlIG92ZXJmbG93ICov Ci0KLSAgICB6eiA9IGRkYXlzICogODY0MDBMOwotICAgIGlmICh6eiA8IDBMKQkJCS8qIFRoaXMg Y2F0Y2hlcyBpdCAqLwotICAgICAgcmV0dXJuKC0yKTsKLSAgICB6eiArPSBkaG91cnMgKiAzNjAw TCArIGRtaW5zICogNjBMICsgZHNlY3M7Ci0gICAgenogKj0gZHNpZ247Ci0gICAgKnJlc3VsdCA9 IHp6OwotICAgIHJldHVybigwKTsKLX0KLQotCi1jaGFyICoKLWNtY3Z0ZGF0ZShzLHQpIGNoYXIg KiBzOyBpbnQgdDsgewotICAgIGludCB4LCBpLCBqLCBrLCBoaCwgbW0sIHNzLCBmZiwgcG1mbGFn ID0gMCwgbm9kYXRlID0gMCwgbGVuLCBkb3c7Ci0gICAgaW50IHVuaXRzLCBpc2dtdCA9IDAsIGdt dHNpZ24gPSAwLCBkID0gMCwgc3RhdGUgPSAwLCBuZGF5OwotICAgIGludCBrbiA9IDAsIGZ0Wzhd LCBpc2xldHRlciA9IDAsIGYybGVuID0gMDsKLQotICAgIGludCB6aGggPSAwOwkJCS8qIFRpbWV6 b25lIGFkanVzdG1lbnRzICovCi0gICAgaW50IHptbSA9IDA7Ci0gICAgaW50IHpkZCA9IDA7Ci0K LSAgICBpbnQgZHNpZ24gPSAxOwkJCS8qIERlbHRhLXRpbWUgYWRqdXN0bWVudHMgKi8KLSAgICBp bnQgZGRheXMgPSAwOwotICAgIGludCBkbW9udGhzID0gMDsKLSAgICBpbnQgZHllYXJzID0gMDsK LSAgICBpbnQgZGhvdXJzID0gMDsKLSAgICBpbnQgZG1pbnMgPSAwOwotICAgIGludCBkc2VjcyA9 IDA7Ci0gICAgaW50IGhhdmVkZWx0YSA9IDA7Ci0KLSAgICBjaGFyICogZmxkWzhdLCAqIHAgPSAi IiwgKiBwMiwgKiBwMzsgLyogQXNzb3J0ZWQgYnVmZmVycyBhbmQgcG9pbnRlcnMgICovCi0gICAg Y2hhciAqIHMyLCAqIHMzOwotICAgIGNoYXIgKiB5ZWFyID0gTlVMTCwgKiBtb250aCA9IE5VTEws ICogZGF5ID0gTlVMTDsKLSAgICBjaGFyICogaG91ciA9ICIwMCIsICogbWluID0gIjAwIiwgKiBz ZWMgPSAiMDAiOwotICAgIGNoYXIgZGF0ZXNlcCA9IDA7Ci0gICAgY2hhciB0bXBidWZbOF07Ci0g ICAgY2hhciB4YnVmW0RBVEVCVUZMRU4rMV07Ci0gICAgY2hhciB5YnVmW0RBVEVCVUZMRU4rMV07 Ci0gICAgY2hhciB6YnVmW0RBVEVCVUZMRU4rMV07Ci0gICAgY2hhciB5eXl5bW1kZFtZWVlZTU1E RF07Ci0gICAgY2hhciBkYnVmWzI2XTsKLSAgICBjaGFyIGRheWJ1ZlszXTsKLSAgICBjaGFyIG1v bmJ1ZlszXTsKLSAgICBjaGFyIHllYXJidWZbNV07Ci0gICAgY2hhciB0aW1idWZbMTZdLCAqdGIs IGNjOwotICAgIGNoYXIgKiBkcCA9IE5VTEw7CQkJLyogUmVzdWx0IHBvaW50ZXIgKi8KLQotICAg IGlmICghcykgcyA9ICIiOwotICAgIHRtcGJ1ZlswXSA9IE5VTDsKLQotICAgIHdoaWxlICgqcyA9 PSBTUCkgcysrOwkJLyogR29iYmxlIGFueSBsZWFkaW5nIGJsYW5rcyAqLwotICAgIGlmIChpc2Fs cGhhKCpzKSkJCQkvKiBSZW1lbWJlciBpZiAxc3QgY2hhciBpcyBhIGxldHRlciAqLwotICAgICAg aXNsZXR0ZXIgPSAxOwotCi0gICAgbGVuID0gc3RybGVuKHMpOwotICAgIGRlYnVnKEYxMTAsImNt Y3Z0ZGF0ZSIscyxsZW4pOwotICAgIGlmIChsZW4gPT0gMCkgewkJCS8qIE5vIGFyZyAtIHJldHVy biBjdXJyZW50IGRhdGUtdGltZSAqLwotCWRwID0gY2tkYXRlKCk7Ci0JZ290byB4Y3Z0ZGF0ZTsK LSAgICB9Ci0gICAgaWYgKGxlbiA+IERBVEVCVUZMRU4pIHsJCS8qIENoZWNrIGxlbmd0aCBvZiBh cmcgKi8KLQltYWtlc3RyKCZjbWRhdGVtc2csIkRhdGUtdGltZSBzdHJpbmcgdG9vIGxvbmciKTsK LQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwot ICAgIH0KLSAgICBoaCA9IDA7CQkJCS8qIEluaXQgdGltZSB0byAwMDowMDowMC4wICovCi0gICAg bW0gPSAwOwotICAgIHNzID0gMDsKLSAgICBmZiA9IDA7Ci0gICAgenRpbWUoJnApOwotICAgIGlm ICghcCkKLSAgICAgIHAgID0gIiI7Ci0gICAgaWYgKCpwKSB7CQkJCS8qIEluaXQgdGltZSB0byBj dXJyZW50IHRpbWUgKi8KLQl4ID0gY2tzdHJuY3B5KGRidWYscCwyNik7Ci0JaWYgKHggPiAxNykg ewotCSAgICBoaCA9IGF0b2koJmRidWZbMTFdKTsKLQkgICAgbW0gPSBhdG9pKCZkYnVmWzE0XSk7 Ci0JICAgIHNzID0gYXRvaSgmZGJ1ZlsxN10pOwotCX0KLSAgICB9Ci0gICAgY2tzdHJuY3B5KHl5 eXltbWRkLHp6bmRhdGUoKSxZWVlZTU1ERCk7IC8qIEluaXQgZGF0ZSB0byBjdXJyZW50IGRhdGUg Ki8KLSAgICBja3N0cm5jcHkoeWVhcmJ1Zix5eXl5bW1kZCw1KTsKLSAgICBja3N0cm5jcHkobW9u YnVmLCZ5eXl5bW1kZFs0XSwzKTsKLSAgICBja3N0cm5jcHkoZGF5YnVmLCZ5eXl5bW1kZFs2XSwz KTsKLSAgICB5ZWFyID0geWVhcmJ1ZjsKLSAgICBtb250aCA9IG1vbmJ1ZjsKLSAgICBkYXkgPSBk YXlidWY7Ci0gICAgbmRheSA9IGF0b2koZGF5YnVmKTsKLSAgICBja3N0cm5jcHkoeGJ1ZixzLERB VEVCVUZMRU4pOwkvKiBNYWtlIGEgbG9jYWwgY29weSB3ZSBjYW4gcG9rZSAqLwotICAgIHMgPSB4 YnVmOwkJCQkvKiBQb2ludCB0byBpdCAqLwotICAgIHNbbGVuXSA9IE5VTDsKLSAgICBpZiAoc1sw XSA9PSAnOicpIHsKLQlwID0gczsKLQlnb3RvIGRvdGltZTsKLSAgICB9Ci0gICAgLyogU3BlY2lh bCBwcmVzZXQgZm9ybWF0cy4uLiAqLwotCi0gICAgaWYgKGxlbiA+PSAxNCkgewkJCS8qIEZUUCBN RFRNIGFsbC1udW1lcmljIGRhdGUgKi8KLQljaGFyIGM7Ci0JYyA9IHNbMTRdOwkJCS8qIGUuZy4g MTk5ODA2MTUxMDAwNDUuMDE0ICovCi0Jc1sxNF0gPSBOVUw7Ci0JeCA9IHJkaWdpdHMocyk7Ci0J c1sxNF0gPSBjOwotCWlmICh4KSB7Ci0JICAgIGNrc3RybmNweSh5eXl5bW1kZCxzLDgrMSk7Ci0J ICAgIHllYXIgPSBOVUxMOwotCSAgICBwID0gJnNbOF07Ci0JICAgIGdvdG8gZG90aW1lOwotCX0K LSAgICB9Ci0gICAgeCA9IDA7CQkJCS8qIEJlY29tZXMgPiAwIGZvciBhc2N0aW1lIGZvcm1hdCAq LwotICAgIGlmIChpc2FscGhhKHNbMF0pKSB7Ci0JaWYgKGxlbiA9PSAyNCkgewkJLyogQXNjdGlt ZSBmb3JtYXQ/ICovCi0JICAgIC8qIFNhdCBKdWwgMTQgMTU6NTc6MzIgMjAwMSAqLwotCSAgICB4 ID0gY2ttYXRjaChhdHAxLHMsMCwwKTsKLQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIGFzY3Rp bWUiLHMseCk7Ci0JfSBlbHNlIGlmIChsZW4gPT0gMjgpIHsJCS8qIE9yIEFzY3RpbWUgcGx1cyB0 aW1lem9uZT8gKi8KLQkgICAgLyogU2F0IEp1bCAxNCAxNToxNTozOSBFRFQgMjAwMSAqLwotCSAg ICB4ID0gY2ttYXRjaChhdHAyLHMsMCwwKTsKLQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIGFz Y3RpbWUrdGltZXpvbmUiLHMseCk7Ci0JfQotICAgIH0KLSAgICBpZiAoeCA+IDApIHsJCQkvKiBB c2N0aW1lIGZvcm1hdCAqLwotICAgICAgICBpbnQgeHg7Ci0gICAgICAgIHN0cm5jcHkoeWVhcmJ1 ZixzICsgbGVuIC0gNCw0KTsKLSAgICAgICAgeWVhcmJ1Zls0XSA9IE5VTDsKLSAgICAgICAgZm9y IChpID0gMDsgaSA8IDM7IGkrKykKLSAgICAgICAgICB0bXBidWZbaV0gPSBzW2krNF07Ci0gICAg ICAgIHRtcGJ1ZlszXSA9IE5VTDsKLQlpZiAoKHh4ID0gbG9va3VwKGNtb250aHMsdG1wYnVmLDEy LE5VTEwpKSA8IDApIHsKLQkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIG1vbnRoIik7 Ci0JICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkgICAgcmV0dXJu KE5VTEwpOwotCX0KLSAgICAgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGFzY3RpbWUgbW9udGgi LCIiLHh4KTsKLSAgICAgICAgbW9uYnVmWzBdID0gKHh4IC8gMTApICsgJzAnOyAKLSAgICAgICAg bW9uYnVmWzFdID0gKHh4ICUgMTApICsgJzAnOyAKLSAgICAgICAgbW9uYnVmWzJdID0gTlVMOwot ICAgICAgICBkYXlidWZbMF0gPSAoc1s4XSA9PSAnICcgPyAnMCcgOiBzWzhdKTsKLSAgICAgICAg ZGF5YnVmWzFdID0gc1s5XTsKLSAgICAgICAgZGF5YnVmWzJdID0gTlVMOwotCXhidWZbMF0gPSBT UDsKLSAgICAgICAgZm9yIChpID0gMTE7IGkgPCAxOTsgaSsrKQotICAgICAgICAgIHhidWZbaS0x MF0gPSBzW2ldOwotICAgICAgICB4YnVmWzldID0gTlVMOwotCWNrbWFrbXNnKHpidWYsMTgseWVh cmJ1Zixtb25idWYsZGF5YnVmLHhidWYpOwotCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBhc2N0aW1l IG9rIix6YnVmLDApOwotCWlmIChsZW4gPT0gMjQpIHsKLQkgICAgZHAgPSB6YnVmOwotCSAgICBn b3RvIHhjdnRkYXRlOwotCX0gZWxzZSB7Ci0JICAgIGludCBuOwotCSAgICBuID0gY2ttYWttc2co eWJ1ZixEQVRFQlVGTEVOLTQsemJ1ZiwiICIsTlVMTCxOVUxMKTsKLQkgICAgeWJ1ZltuKytdID0g c1syMF07Ci0JICAgIHlidWZbbisrXSA9IHNbMjFdOwotCSAgICB5YnVmW24rK10gPSBzWzIyXTsK LQkgICAgeWJ1ZltuKytdID0gTlVMOwotCSAgICBja3N0cm5jcHkoeGJ1Zix5YnVmLERBVEVCVUZM RU4pOwotCSAgICBzID0geGJ1ZjsKLQkgICAgaXNsZXR0ZXIgPSAwOwotCX0KLSAgICB9Ci0KLS8q IENoZWNrIGZvciBkYXkgb2Ygd2VlayAqLwotCi0gICAgcCA9IHM7Ci0gICAgd2hpbGUgKCpwID09 IFNQKSBwKys7Ci0gICAgZG93ID0gLTE7Ci0gICAgaWYgKCpwKSB7Ci0JcDIgPSBwOwotCWNjID0g TlVMOwotCXdoaWxlICgxKSB7Ci0JICAgIGlmICgqcDIgPT0gJywnIHx8ICpwMiA9PSBTUCB8fCAh KnAyKSB7Ci0JCWNjID0gKnAyOwkJLyogU2F2ZSBicmVhayBjaGFyICovCi0JCSpwMiA9IE5VTDsJ CS8qIE5VTCBpdCBvdXQgKi8KLQkJcDMgPSBwMjsJCS8qIFJlbWVtYmVyIHRoaXMgc3BvdCAqLwot CQlpZiAoKGRvdyA9IGxvb2t1cChkYXlzb2Z3ZWVrLHAsNyxOVUxMKSkgPiAtMSkgewotCQkgICAg ZGVidWcoRjExMSwiY21jdnRkYXRlIGRvdyIscCxkb3cpOwotCQkgICAgcyA9IHAyOwotCQkgICAg aWYgKGNjID09ICcsJyB8fCBjYyA9PSBTUCkgeyAvKiBQb2ludCB0byBuZXh0IGZpZWxkICovCi0J CQlzKys7Ci0JCQl3aGlsZSAoKnMgPT0gU1ApIHMrKzsKLQkJICAgIH0KLQkJICAgIHAgPSBzOwot CQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIGRvdyBuZXcgcCIscCxkb3cpOwotCQkgICAgYnJl YWs7Ci0JCX0gZWxzZSBpZiAoaXNhbHBoYSgqcCkgJiYgY2MgPT0gJywnKSB7Ci0JCSAgICBtYWtl c3RyKCZjbWRhdGVtc2csIlVucmVjb2duaXplZCBkYXkgb2Ygd2VlayIpOwotCQkgICAgZGVidWco RjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCQkgICAgcmV0dXJuKE5VTEwpOwotCQl9 IGVsc2UgewotCQkgICAgKnAzID0gY2M7Ci0JCSAgICBicmVhazsKLQkJfQotCSAgICB9Ci0JICAg IHAyKys7Ci0JfQotICAgIH0KLSAgICBsZW4gPSBzdHJsZW4ocyk7CQkvKiBVcGRhdGUgbGVuZ3Ro ICovCi0gICAgZGVidWcoRjExMSwiY21jdnRkYXRlIHMiLHMsbGVuKTsKLQotICAgIGRlYnVnKEYx MTEsImNtY3Z0ZGF0ZSBkb3ciLHMsZG93KTsKLSAgICBpZiAoZG93ID4gLTEpIHsJCQkvKiBIYXZl IGEgZGF5LW9mLXdlZWsgbnVtYmVyICovCi0JbG9uZyB6ejsgaW50IG4sIGo7Ci0JenogPSBtamQo enpuZGF0ZSgpKTsJCS8qIEdldCB0b2RheSdzIE1KRCAqLwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0 ZSB6eiIsIiIsenopOwotCWogPSAoKChpbnQpKHp6ICUgN0wpKSArIDMpICUgNzsgLyogVG9kYXkn cyBkYXktb2Ytd2VlayBudW1iZXIgKi8KLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgaiIsIiIsaik7 Ci0JaGggPSAwOwkJCQkvKiBJbml0IHRpbWUgdG8gbWlkbmlnaHQgKi8KLQltbSA9IDA7Ci0Jc3Mg PSAwOwotCWlmIChqID09IGRvdykgewotCSAgICBja3N0cm5jcHkoeXl5eW1tZGQsenpuZGF0ZSgp LFlZWVlNTUREKTsKLQkgICAgeWVhciA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkgICAgbiA9IGRvdyAt IGo7CQkvKiBEYXlzIGZyb20gbm93ICovCi0JICAgIGlmIChkb3cgPCBqKQotCSAgICAgIG4gKz0g NzsKLQkgICAgaWYgKG4gPCAwKSBuICs9IDc7CQkvKiBBZGQgdG8gTUpEICovCi0JICAgIHp6ICs9 IG47Ci0JICAgIGNrc3RybmNweSh5eXl5bW1kZCxtamQyZGF0ZSh6eiksWVlZWU1NREQpOyAvKiBO ZXcgZGF0ZSAqLwotCSAgICB5ZWFyID0gTlVMTDsKLQl9Ci0JZGVidWcoRjExMSwiY21jdnRkYXRl IEEiLHl5eXltbWRkLGxlbik7Ci0JaWYgKGxlbiA9PSAwKSB7CQkJLyogTm8gbW9yZSBmaWVsZHMg YWZ0ZXIgdGhpcyAqLwotCSAgICBja21ha21zZyh6YnVmLDE4LHl5eXltbWRkLCIgMDA6MDA6MDAi LE5VTEwsTlVMTCk7Ci0JICAgIGRwID0gemJ1ZjsKLQkgICAgZ290byB4Y3Z0ZGF0ZTsKLQl9Ci0J aXNsZXR0ZXIgPSAwOwotCWlmIChyZGlnaXRzKHApICYmIGxlbiA8IDgpCS8qIE5leHQgZmllbGQg aXMgdGltZT8gKi8KLQkgIGdvdG8gZG90aW1lOwkJCS8qIElmIHNvIGdvIHN0cmFpZ2h0IHRvIHRp bWUgc2VjdGlvbiAqLwotCWlmIChpc2RpZ2l0KCpwKSkgewotCSAgICBpZiAoKihwKzEpID09ICc6 JykKLQkgICAgICBnb3RvIGRvdGltZTsKLQkgICAgZWxzZSBpZiAoaXNkaWdpdCgqKHArMSkpICYm ICgqKHArMikgPT0gJzonKSkKLQkgICAgICBnb3RvIGRvdGltZTsKLQl9Ci0gICAgfQotICAgIGRl YnVnKEYxMTEsImNtY3Z0ZGF0ZSBCIHMiLHMsZG93KTsKLSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRh dGUgQiBwIixwLGRvdyk7Ci0KLSAgICBpZiAoKnMgPT0gJysnIHx8ICpzID09ICctJykgewkvKiBE ZWx0YSB0aW1lIG9ubHkgLSBza2lwIGFoZWFkLiAqLwotCXAgPSBzOwotCWdvdG8gZGVsdGE7Ci0g ICAgfQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFdoYXQgaXMgdGhlIHB1cnBvc2Ugb2YgdGhpcz8g IEl0IGJyZWFrcyBwYXJzaW5nIG9mIGVtYWlsIGRhdGVzIGxpa2UKLSAgIldlZCwgMTMgRmViIDIw MDIgMTc6NDM6MDIgLTA4MDAgKFBTVCkiLiAgUmVtb3ZpbmcgdGhpcyBjb2RlIGZpeGVzIHRoZQot ICBwcm9ibGVtIGFuZCBLZXJtaXQgc3RpbGwgcGFzc2VzIHRoZSAnZGF0ZXMnIHNjcmlwdC4KLSAg LSBmZGMsIFNhdCBOb3YgMjYgMTA6NTI6NDUgMjAwNS4KLSovCi0gICAgaWYgKGRvdyA+IC0xKSB7 Ci0JLyogRGF5IG9mIHdlZWsgZ2l2ZW4gZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgaXMgbm90 IGEgdGltZSAqLwotCS8qIG9yIGEgZGVsdGEgc28gaXQgY2FuJ3QgYmUgdmFsaWQgKi8KLQltYWtl c3RyKCZjbWRhdGVtc2csIkludmFsaWQgdG9rZW5zIGFmdGVyIGRheSBvZiB3ZWVrIik7Ci0JZGVi dWcoRjExMSwiY21jdnRkYXRlIGZhaWwiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwot ICAgIH0KLSNlbmRpZgkvKiBDT01NRU5UICovCi0KLSAgICAvKiBIYW5kbGUgInRvZGF5IiwgInll c3RlcmRheSIsICJ0b21vcnJvdyIsIGFuZCArLy0gbiB1bml0cyAqLwotCi0gICAgaWYgKGNrc3Ry Y2hyKCJUdFl5Tm4iLHNbMF0pKSB7Ci0JaW50IGksIGssIG4sIG1pbnVzID0gMDsKLQljaGFyIGM7 Ci0JbG9uZyBqZDsKLQlqZCA9IG1qZChja2RhdGUoKSk7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRl IG1qZCIscyxqZCk7Ci0KLQkvKiBTeW1ib2xpYyBkYXRlOiBUT0RBWSwgVE9NT1JST1csIGV0Yy4u Lj8gKi8KLQotCXMyID0gczsJCQkJLyogRmluZCBlbmQgb2Yga2V5d29yZCAqLwotCWkgPSAwOwot CXdoaWxlIChpc2FscGhhKCpzMikpIHsJCS8qIGFuZCBnZXQgaXRzIGxlbmd0aCAqLwotCSAgICBp Kys7Ci0JICAgIHMyKys7Ci0JfQotCWMgPSAqczI7CQkJLyogWmFwIGJ1dCBzYXZlIGRlbGltaXRl ciAqLwotCSpzMiA9IE5VTDsKLQlrID0gbG9va3VwKHN5bWRheXRhYixzLG5zeW1kYXlzLE5VTEwp OyAvKiBMb29rIHVwIGtleXdvcmQgKi8KLQkqczIgPSBjOwkJCS8qIFJlcGxhY2UgZGVsaW1pdGVy ICovCi0JaWYgKGsgPCAwKQkJCS8qIEtleXdvcmQgbm90IGZvdW5kICovCi0JICBnb3RvIG5vcm1h bDsKLQlzMyA9ICZzW2ldOwotCXdoaWxlICgqczMgPT0gU1ApCQkvKiBTa2lwIHdoaXRlc3BhY2Ug Ki8KLQkgIHMzKys7Ci0JaWYgKCpzMyA9PSAnXycgfHwgKnMzID09ICc6JykKLQkgIHMzKys7Ci0K LQlzd2l0Y2ggKGspIHsJCQkvKiBIYXZlIGtleXdvcmQgKi8KLQkgIGNhc2UgU1lNX05PVzoJCQkv KiBOT1cgKi8KLQkgICAgY2tzdHJuY3B5KHlidWYsY2tkYXRlKCksREFURUJVRkxFTik7Ci0JICAg IGNrc3RybmNweSh5eXl5bW1kZCx5YnVmLFlZWVlNTUREKTsKLQkgICAgeWVhciA9IE5VTEw7Ci0J ICAgIGlmICgqczMpIHsJCQkvKiBObyBvdmVyd3JpdGluZyBjdXJyZW50IHRpbWUuICovCi0JCWNr c3RybmNhdCh5YnVmLCIgIixEQVRFQlVGTEVOKTsKLQkJY2tzdHJuY2F0KHlidWYsczMsREFURUJV RkxFTik7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBkZWZhdWx0OgkJCS8qIFllc3RlcmRheSwg VG9kYXksIGFuZCBUb21vcnJvdyAqLwotCSAgICBpZiAoayA9PSBTWU1fVE9NTykgewkvKiBUT01P UlJPVyAqLwotCQlzdHJuY3B5KHlidWYsbWpkMmRhdGUoamQrMSksOCk7Ci0JICAgIH0gZWxzZSBp ZiAoayA9PSBTWU1fWUVTVCkgewkvKiBZRVNURVJEQVkgKi8KLQkJc3RybmNweSh5YnVmLG1qZDJk YXRlKGpkLTEpLDgpOwotCSAgICB9IGVsc2UgewkJCS8qIFRPREFZICovCi0JCXN0cm5jcHkoeWJ1 Zixja2RhdGUoKSw4KTsKLQkgICAgfQotCSAgICBzdHJuY3B5KHlidWYrOCwiIDAwOjAwOjAwIixE QVRFQlVGTEVOLTgpOyAvKiBEZWZhdWx0IHRpbWUgaXMgMCAqLwotCSAgICBja3N0cm5jcHkoeXl5 eW1tZGQseWJ1ZixZWVlZTU1ERCk7Ci0JICAgIHllYXIgPSBOVUxMOwotCSAgICBpZiAoKnMzKSB7 CQkJLyogSWYgc29tZXRoaW5nIGZvbGxvd3Mga2V5d29yZC4uLiAqLwotCQlpZiAoaXNkaWdpdCgq czMpKSB7CS8qIFRpbWUgLSBvdmVyd3JpdGUgZGVmYXVsdCB0aW1lICovCi0JCSAgICBzdHJuY3B5 KHlidWYrOCxzK2ksREFURUJVRkxFTi04KTsKLQkJfSBlbHNlIHsJCS8qIFNvbWV0aGluZyBlbHNl LCBrZWVwIGRlZmF1bHQgdGltZSAqLwotCQkgICAgY2tzdHJuY2F0KHlidWYsIiAiLERBVEVCVUZM RU4pOyAvKiBhbmQgYXBwZW5kICovCi0JCSAgICBja3N0cm5jYXQoeWJ1ZixzMyxEQVRFQlVGTEVO KTsgLyogd2hhdGV2ZXIgd2UgaGF2ZSAqLwotCQl9Ci0JICAgIH0KLQl9Ci0JcyA9IHlidWY7CQkJ LyogUG9pbnQgdG8gcmV3cml0dGVuIGRhdGUtdGltZSAqLwotCWxlbiA9IHN0cmxlbihzKTsJCS8q IFVwZGF0ZSBsZW5ndGggKi8KLQlpc2xldHRlciA9IDA7CQkJLyogQ2FuY2VsIHRoaXMgKi8KLSAg ICB9Ci0KLS8qIFJlZ3VsYXIgZnJlZS1mb3JtYXQgbm9uLXN5bWJvbGljIGRhdGUgKi8KLQotICBu b3JtYWw6Ci0KLSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFMIixzLGxlbik7Ci0gICAg ZGVidWcoRjExMSwiY21jdnRkYXRlIGRvdyIscyxkb3cpOwotICAgIGlmICh5eXl5bW1kZFswXSAm JiAheWVhcikgewotCWNrc3RybmNweSh5ZWFyYnVmLHl5eXltbWRkLDUpOwotCWNrc3RybmNweSht b25idWYsJnl5eXltbWRkWzRdLDMpOwotCWNrc3RybmNweShkYXlidWYsJnl5eXltbWRkWzZdLDMp OwotCXllYXIgPSB5ZWFyYnVmOwotCW1vbnRoID0gbW9uYnVmOwotCWRheSA9IGRheWJ1ZjsKLQlu ZGF5ID0gYXRvaShkYXlidWYpOwotICAgIH0KLSAgICBpZiAoaXNkaWdpdChzWzBdKSkgewkJLyog VGltZSB3aXRob3V0IGRhdGU/ICovCi0JcCA9IHM7Ci0JaWYgKHNbMV0gPT0gJzonKSB7Ci0JICAg IGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBOT1JNQUwgWDEiLHMsbGVuKTsKLQkgICAgZ290byBkb3Rp bWU7Ci0JfSBlbHNlIGlmIChsZW4gPiAxICYmIGlzZGlnaXQoc1sxXSkgJiYgc1syXSA9PSAnOicp IHsKLQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIE5PUk1BTCBYMiIscyxsZW4pOwotCSAgICBn b3RvIGRvdGltZTsKLQl9IGVsc2UgaWYgKHJkaWdpdHMocykgJiYgbGVuIDwgOCkgewotCSAgICBk ZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFMIFgzIixzLGxlbik7Ci0JICAgIGdvdG8gZG90aW1l OwotCX0KLSAgICB9Ci0gICAgaWYgKGxlbiA+PSA4ICYmIGlzZGlnaXQoKnMpKSB7CS8qIENoZWNr IGZpcnN0IGZvciB5eXl5bW1kZCogKi8KLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFMIEEi LHMsbGVuKTsKLQljYyA9IHNbOF07Ci0Jc1s4XSA9IE5VTDsJCQkvKiBJc29sYXRlIGZpcnN0IDgg Y2hhcmFjdGVycyAqLwotCWlmIChyZGlnaXRzKHMpKSB7Ci0JICAgIC8qIEhhdmUgdmFsaWQgdGlt ZSBzZXBhcmF0b3I/ICovCi0JICAgIHAyID0gY2MgPyBja3N0cmNocigiIFR0Xy06IixjYykgOiBO VUxMOwotCSAgICBpZiAoIWNjIHx8IHAyKSB7Ci0JCWNrc3RybmNweSh5eXl5bW1kZCxzLFlZWVlN TUREKTsJLyogVmFsaWQgc2VwYXJhdG9yICovCi0JCXllYXIgPSBOVUxMOwotCQlzICs9IDg7CQkJ ICAgICAgICAvKiBvciB0aW1lIG5vdCBnaXZlbiAqLwotCQlpZiAoY2MpIHMrKzsJCSAgICAgICAg LyogS2VlcCBkYXRlICovCi0JCXAgPSBzOwkJCSAgICAgICAgLyogYW5kIGdvIGhhbmRsZSB0aW1l ICovCi0JCWdvdG8gZG90aW1lOwotCSAgICB9IGVsc2UgaWYgKCFwMikgewotCQlpZiAoaXNkaWdp dChjYykpCi0JCSAgbWFrZXN0cigmY21kYXRlbXNnLCJOdW1lcmljIGRhdGUgdG9vIGxvbmciKTsK LQkJZWxzZQotCQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCBkYXRlLXRpbWUgc2VwYXJh dG9yIik7Ci0JCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkJcmV0dXJu KE5VTEwpOwotCSAgICB9Ci0JfQotCXNbOF0gPSBjYzsJCQkvKiBQdXQgdGhpcyBiYWNrISAqLwot ICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFMIG5vbi15eXl5bW1kZCIscyxs ZW4pOwotCi0gICAgLyogRnJlZS1mb3JtYXQgZGF0ZSAtLSBmaWd1cmUgaXQgb3V0ICovCi0KLSNp ZmRlZiBDT01NRU5UCi0gICAgaWYgKCpzICYmICFpc2RpZ2l0KCpzKSkgewotCW1ha2VzdHIoJmNt ZGF0ZW1zZywiVW5yZWNvZ25pemVkIHdvcmQgaW4gZGF0ZSIpOwotCWRlYnVnKEYxMTEsImNtY3Z0 ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQkJLyogRmllbGQgdHlwZXMgKi8K LSAgICAgIGZ0W2ldID0gLTE7Ci0gICAgZmxkW2kgPSAwXSA9IChwID0gcyk7CQkvKiBGaXJzdCBm aWVsZCAqLwotICAgIHdoaWxlICgqcCkgewkJCS8qIEdldCBuZXh0IHR3byBmaWVsZHMgKi8KLQlp ZiAoaXNkYXRlc2VwKCpwKSkgewkJLyogSGF2ZSBhIGRhdGUgc2VwYXJhdG9yICovCi0JICAgIGlm IChpID09IDApIHsKLQkJZGF0ZXNlcCA9ICpwOwotCSAgICB9IGVsc2UgaWYgKGkgPT0gMSAmJiAq cCAhPSBkYXRlc2VwKSB7Ci0JCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW5jb25zaXN0ZW50IGRhdGUg c2VwYXJhdG9ycyIpOwotCQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0J CXJldHVybihOVUxMKTsKLQkgICAgfQotCSAgICAqcCsrID0gTlVMOwkJCS8qIFJlcGxhY2UgYnkg TlVMICovCi0JICAgIGlmICgqcCkgewkJCS8qIE5vdyB3ZSdyZSBhdCB0aGUgbmV4dCBmaWVsZCAq LwotCQl3aGlsZSAoKnAgPT0gU1ApIHArKzsJLyogU2tpcCBsZWFkaW5nIHNwYWNlcyAqLwotCQlp ZiAoISpwKSBicmVhazsJCS8qIE1ha2Ugc3VyZSB3ZSBzdGlsbCBoYXZlIHNvbWV0aGluZyAqLwot CQlpZiAoaSA9PSAyKQkJLyogTGFzdCBvbmU/ICovCi0JCSAgYnJlYWs7Ci0JCWZsZFsrK2ldID0g cDsJCS8qIE5vLCByZWNvcmQgcG9pbnRlciB0byB0aGlzIG9uZSAqLwotCSAgICB9IGVsc2Ugewot CQlicmVhazsKLQkgICAgfQkgICAgCi0JfSBlbHNlIGlmICgoKnAgPT0gJ1QnIHx8ICpwID09ICd0 JykgJiYgaXNkaWdpdCgqKHArMSkpKSB7IC8qIFRpbWUgKi8KLQkgICAgKnArKyA9IE5VTDsKLQkg ICAgYnJlYWs7Ci0JfSBlbHNlIGlmICgqcCA9PSAnOicpIHsKLQkgICAgaWYgKGkgPT0gMCAmJiBw ID09IHMpIHsKLQkJbm9kYXRlID0gMTsKLQkJYnJlYWs7Ci0JICAgIH0gZWxzZSBpZiAoaSAhPSAw KSB7CS8qIEFmdGVyIGEgZGF0ZSAqLwotCQlpZiAoaSA9PSAyKSB7CQkvKiBPSyBhcyBkYXRlLXRp bWUgc2VwYXJhdG9yIChWTVMpICovCi0JCSAgICAqcCsrID0gTlVMOwotCQkgICAgYnJlYWs7Ci0J CX0KLQkJaWYgKGkgPCAyKQotCQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiVG9vIGZldyBmaWVsZHMg aW4gZGF0ZSIpOwotCQllbHNlCi0JCSAgbWFrZXN0cigmY21kYXRlbXNnLCJNaXNwbGFjZWQgdGlt ZSBzZXBhcmF0b3IiKTsKLQkJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwot CQlyZXR1cm4oTlVMTCk7Ci0JICAgIH0KLQkgICAgbm9kYXRlID0gMTsJCQkvKiBPciB3aXRob3V0 IGEgZGF0ZSAqLwotCSAgICBicmVhazsKLQl9Ci0JcCsrOwotICAgIH0KLSAgICBpZiAocCA+IHMg JiYgaSA9PSAwKQkJLyogTWFrZSBzdXJlIHdlIGhhdmUgYSBkYXRlICovCi0gICAgICBub2RhdGUg PSAxOwkJCS8qIE5vIGRhdGUuICovCi0KLSAgICBpZiAobm9kYXRlICYmIGRvdyA+IC0xKSB7CQkv KiBIYXZlIGltcGxpZWQgZGF0ZSBmcm9tIERPVz8gKi8KLQlnb3RvIGRvdGltZTsJCQkvKiBVc2Us IHVzZSB0aGF0LCBnbyBkbyB0aW1lLiAqLwotCi0gICAgfSBlbHNlIGlmIChub2RhdGUpIHsJCS8q IE5vIGRhdGUgYW5kIG5vIGltcGxpZWQgZGF0ZSAqLwotCWNoYXIgKnRtcCA9IE5VTEw7CQkvKiBT dWJzdGl0dXRlIHRvZGF5J3MgZGF0ZSAqLwotCXp0aW1lKCZ0bXApOwotCWlmICghdG1wKQotCSAg dG1wICA9ICIiOwotCWlmICghKnRtcCkgewotCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIlByb2Js ZW0gc3VwcGx5aW5nIGN1cnJlbnQgZGF0ZSIpOwotCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUi LGNtZGF0ZW1zZywtMSk7Ci0JICAgIHJldHVybihOVUxMKTsKLQl9Ci0JY2tzdHJuY3B5KGRidWYs dG1wLDI2KTsJCS8qIFJlZm9ybWF0ICovCi0JaWYgKGRidWZbOF0gPT0gU1ApIGRidWZbOF0gPSAn MCc7Ci0JZmxkWzBdID0gZGJ1Zis4OwkJLyogZGQgKi8KLQlkYnVmWzEwXSA9IE5VTDsKLQlmbGRb MV0gPSBkYnVmKzQ7CQkvKiBtbW0gKi8KLQlkYnVmWzddID0gTlVMOwotCWZsZFsyXSA9IGRidWYr MjA7CQkvKiB5eXl5ICovCi0JZGJ1ZlsyNF0gPSBOVUw7Ci0JaGggPSBhdG9pKCZkYnVmWzExXSk7 Ci0JbW0gPSBhdG9pKCZkYnVmWzE0XSk7Ci0Jc3MgPSBhdG9pKCZkYnVmWzE3XSk7Ci0JcCA9IHM7 CQkJCS8qIEJhY2sgdXAgc291cmNlIHBvaW50ZXIgdG8gcmVwYXJzZSAqLwotICAgIH0gZWxzZSBp ZiAoaSA8IDIpIHsKLQltYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBmZXcgZmllbGRzIGluIGRhdGUi KTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwp OwotICAgIH0KLSAgICAvKiBIYXZlIHRocmVlIGRhdGUgZmllbGRzIC0gc2VlIHdoYXQgdGhleSBh cmUgKi8KLQotICAgIGZvciAoayA9IDAsIGogPSAwOyBqIDwgMzsgaisrKSB7CS8qIEdldCBudW1i ZXIgb2Ygbm9uLW51bWVyaWMgZmllbGRzICovCi0JZnRbal0gPSByZGlnaXRzKGZsZFtqXSk7Ci0J ZGVidWcoRjExMSwiY21jdnRkYXRlIGZsZCIsZmxkW2pdLGopOwotCWlmIChmdFtqXSA9PSAwKQot CSAgaysrOwotICAgIH0KLSAgICBrbiA9IGs7CQkJCS8qIEhvdyBtYW55IG51bWVyaWMgZmllbGRz ICovCi0gICAgbW9udGggPSBOVUxMOwkJCS8qIFN0cmlrZSBvdXQgZGVmYXVsdCB2YWx1ZXMgKi8K LSAgICB5ZWFyID0gTlVMTDsKLSAgICBkYXkgPSBOVUxMOwotCi0gICAgaWYgKGsgPT0gMiAmJiBm dFsyXSA+IDApIHsJCS8qIEp1bCAyMCwgMjAwMSAqLwotCWludCB4eDsKLQl4eCA9IHN0cmxlbihm bGRbMV0pOwotCXAzID0gZmxkWzFdOwotCWlmICh4eCA+IDApIGlmIChwM1t4eC0xXSA9PSAnLCcp IHsKLQkgICAgcDNbeHgtMV0gPSBOVUw7Ci0JICAgIGlmIChyZGlnaXRzKHAzKSkgewotCQlrID0g MTsJCi0JCWZ0WzFdID0gMTsKLQkgICAgfSBlbHNlIHAzW3h4LTFdID0gJywnOwotCX0KLSAgICB9 Ci0gICAgaWYgKGsgPiAxKSB7CQkJLyogV2UgY2FuIGhhdmUgb25seSBvbmUgbm9uLW51bWVyaWMg Ki8KLQlpZiAobm9kYXRlKQotCSAgbWFrZXN0cigmY21kYXRlbXNnLCJVbnJlY29nbml6ZWQgd29y ZCBpbiBkYXRlIik7IAotCWVsc2UgaWYgKCFmdFsyXSAmJiBpc2RpZ2l0KCooZmxkWzJdKSkpCi0J ICBtYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQgZGF0ZS10aW1lIHNlcGFyYXRvciIpOyAKLQll bHNlCi0JICBtYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBtYW55IG5vbi1udW1lcmljIGZpZWxkcyBp biBkYXRlIik7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVy bihOVUxMKTsKLSAgICB9Ci0gICAgaWYgKCFmdFswXSkgewotCWsgPSAwOwotICAgIH0gZWxzZSBp ZiAoIWZ0WzFdKSB7Ci0JayA9IDE7Ci0gICAgfSBlbHNlIGlmICghZnRbMl0pIHsKLQltYWtlc3Ry KCZjbWRhdGVtc2csIk5vbi1kaWdpdCBpbiB0aGlyZCBkYXRlIGZpZWxkIik7Ci0JZGVidWcoRjEx MSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9IGVsc2UK LSAgICAgIGsgPSAtMTsKLQotICAgIGlmIChrID4gLTEpIHsKLQlpZiAoKHggPSBsb29rdXAoY21v bnRocyxmbGRba10sMTIsTlVMTCkpIDwgMCkgewotCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIlVu a25vd24gbW9udGgiKTsKLQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEp OwotCSAgICByZXR1cm4oTlVMTCk7Ci0JfQotCXNwcmludGYodG1wYnVmLCIlMDJkIix4KTsKLQlt b250aCA9IHRtcGJ1ZjsKLSAgICB9Ci0gICAgZjJsZW4gPSBzdHJsZW4oZmxkWzJdKTsJCS8qIExl bmd0aCBvZiAzcmQgZmllbGQgKi8KLQotICAgIGlmIChrID09IDApIHsJCQkvKiBtb250aG5hbWUg ZGQsIHl5eXkgKi8KLQlkYXkgPSBmbGRbMV07Ci0JeWVhciA9IGZsZFsyXTsKLSAgICB9IGVsc2Ug aWYgKCgoaW50KXN0cmxlbihmbGRbMF0pID09IDQpKSB7IC8qIHl5eXkteHgtZGQgKi8KLQl5ZWFy ID0gZmxkWzBdOwotCWRheSA9IGZsZFsyXTsKLQlpZiAoIW1vbnRoKQotCSAgbW9udGggPSBmbGRb MV07CQkvKiB5eXl5LW1tLWRkICovCi0gICAgfSBlbHNlIGlmIChmMmxlbiA9PSA0KSB7CQkvKiB4 eC14eC15eXl5ICovCi0JeWVhciA9IGZsZFsyXTsKLQlpZiAobW9udGgpIHsJCQkvKiBkZC1uYW1l LXl5eXkgKi8KLQkgICAgZGF5ID0gZmxkWzBdOwotCX0gZWxzZSB7CQkJLyogeHgteHgteXl5eSAq LwotCSAgICBpbnQgZjAsIGYxOwotCSAgICBmMCA9IGF0b2koZmxkWzBdKTsKLQkgICAgZjEgPSBh dG9pKGZsZFsxXSk7Ci0JICAgIGlmICgoKGYwID4gMTIpICYmIChmMSA8PSAxMikpIHx8IChmMSA8 PSAxMiAmJiBmMCA9PSBmMSkpIHsKLQkJZGF5ID0gZmxkWzBdOwkJLyogbW0tZGQteXl5eSAqLwot CQltb250aCA9IGZsZFsxXTsKLQkgICAgfSBlbHNlIGlmICgoZjAgPD0gMTIpICYmIChmMSA+IDEy KSkgewotCQlpZiAoIXJkaWdpdHMoZmxkWzFdKSkgewotCQkgICAgbWFrZXN0cigmY21kYXRlbXNn LCJEYXkgbm90IG51bWVyaWMiKTsKLQkJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRl bXNnLC0xKTsKLQkJICAgIHJldHVybihOVUxMKTsKLQkJfSBlbHNlIHsKLQkJICAgIGRheSA9IGZs ZFsxXTsJLyogZGQtbW0teXl5eSAqLwotCQl9Ci0JCW1vbnRoID0gZmxkWzBdOwotCSAgICB9IGVs c2UgewotCQlpZiAoIWYwIHx8ICFmMSkKLQkJICBtYWtlc3RyKCZjbWRhdGVtc2csIkRheSBvciBt b250aCBvdXQgb2YgcmFuZ2UiKTsKLQkJZWxzZQotCQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiRGF5 IGFuZCBtb250aCBhcmUgYW1iaWd1b3VzIik7Ci0JCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21k YXRlbXNnLC0xKTsKLQkJcmV0dXJuKE5VTEwpOwotCSAgICB9Ci0JfQotICAgIH0gZWxzZSBpZiAo KGYybGVuIDwgNCkgJiYJCS8qIGRkIG1tbSB5eSAoUkZDODIyKSAqLwotCSAgICAgICAhcmRpZ2l0 cyhmbGRbMV0pICYmCS8qIG1pZGRsZSBmaWVsZCBpcyBtb250aG5hbWUgKi8KLQkgICAgICAgcmRp Z2l0cyhmbGRbMl0pKSB7Ci0JaW50IHRtcHllYXI7Ci0JZGF5ID0gZmxkWzBdOwotCWlmICghZmxk WzJdWzFdKSB7Ci0JICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiVG9vIGZldyBkaWdpdHMgaW4geWVh ciIpOwotCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JICAgIHJl dHVybihOVUxMKTsKLQl9Ci0JdG1weWVhciA9IGF0b2koZmxkWzJdKTsKLQlpZiAodG1weWVhciA8 IDUwKQkJLyogUkZDIDI4MjIgd2luZG93aW5nICovCi0JICB0bXB5ZWFyICs9IDIwMDA7Ci0JZWxz ZQkJCQkvKiBUaGlzIGluY2x1ZGVzIDMtZGlnaXQgeWVhcnMuICovCi0JICB0bXB5ZWFyICs9IDE5 MDA7Ci0JeWVhciA9IGNraXRvYSh0bXB5ZWFyKTsKLQotICAgIH0gZWxzZSBpZiAoKGYybGVuIDwg NCkgJiYgKGsgPCAwKSAmJiAoKGludClzdHJsZW4oZmxkWzBdKSA8IDQpKSB7Ci0JbWFrZXN0cigm Y21kYXRlbXNnLCJBbWJpZ3VvdXMgbnVtZXJpYyBkYXRlIik7Ci0JZGVidWcoRjExMSwiY21jdnRk YXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9IGVsc2UgaWYgKChmMmxl biA+IDQpICYmIGZ0WzJdKSB7Ci0JbWFrZXN0cigmY21kYXRlbXNnLCJUb28gbWFueSBkaWdpdHMg aW4geWVhciIpOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1 cm4oTlVMTCk7Ci0gICAgfSBlbHNlIHsKLQltYWtlc3RyKCZjbWRhdGVtc2csIlVuZXhwZWN0ZWQg ZGF0ZSBmb3JtYXQiKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0J cmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICB4ID0gYXRvaShtb250aCk7Ci0gICAgc3ByaW50Zih0 bXBidWYsIiUwMmQiLHgpOwkJLyogMi1kaWdpdCBudW1lcmljIG1vbnRoICovCi0KLS8qCi0gICBz dGF0ZSA9IDEgPSBob3VycwotICAgc3RhdGUgPSAyID0gbWludXRlcwotICAgc3RhdGUgPSAzID0g c2Vjb25kcwotICAgc3RhdGUgPSA0ID0gZnJhY3Rpb25zIG9mIHNlY29uZHMKLSovCi0KLSAgZG90 aW1lOgotICAgIGlmIChpc2xldHRlciAmJiAocyA9PSBwKSkgewotCW1ha2VzdHIoJmNtZGF0ZW1z ZywiVW5rbm93biBkYXRlLXRpbWUgd29yZCIpOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21k YXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIGlmICgheWVhciAmJiB5eXl5 bW1kZFswXSkgewotCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBkb3RpbWUgeXl5eW1tZGQiLHl5eXlt bWRkLDApOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JICB5ZWFyYnVmW2ldID0geXl5eW1t ZGRbaV07Ci0JeWVhcmJ1Zls0XSA9IE5VTDsKLQltb25idWZbMF0gPSB5eXl5bW1kZFs0XTsKLQlt b25idWZbMV0gPSB5eXl5bW1kZFs1XTsKLQltb25idWZbMl0gPSBOVUw7Ci0JZGF5YnVmWzBdID0g eXl5eW1tZGRbNl07Ci0JZGF5YnVmWzFdID0geXl5eW1tZGRbN107Ci0JZGF5YnVmWzJdID0gTlVM OwotCWRheSA9IGRheWJ1ZjsKLQluZGF5ID0gYXRvaShkYXlidWYpOwotCW1vbnRoID0gbW9uYnVm OwotCXllYXIgPSB5ZWFyYnVmOwotICAgIH0KLSAgICBpZiAoIXllYXIpIHsKLQltYWtlc3RyKCZj bWRhdGVtc2csIkludGVybmFsIGVycm9yIC0gZGF0ZSBub3QgZGVmYXVsdGVkIik7Ci0JZGVidWco RjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0g ICAgLyogR2V0IGhlcmUgd2l0aCBkYXksIG1vbnRoLCBhbmQgeWVhciBzZXQgKi8KLSAgICBkZWJ1 ZyhGMTEwLCJjbWN2dGRhdGUgZG90aW1lIGRheSIsZGF5LDApOwotICAgIGRlYnVnKEYxMTAsImNt Y3Z0ZGF0ZSBkb3RpbWUgbW9udGgiLG1vbnRoLDApOwotICAgIGRlYnVnKEYxMTAsImNtY3Z0ZGF0 ZSBkb3RpbWUgeWVhciIseWVhciwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgZG90aW1l IHMiLHMsMCk7Ci0gICAgZGVidWcoRjExMCwiY21jdnRkYXRlIGRvdGltZSBwIixwLDApOwotICAg IHggPSBhdG9pKG1vbnRoKTsKLSAgICBpZiAoeCA+IDEyIHx8IHggPCAxKSB7Ci0JbWFrZXN0cigm Y21kYXRlbXNnLCJNb250aCBvdXQgb2YgcmFuZ2UiKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUi LGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBuZGF5ICA9IGF0b2ko ZGF5KTsKLSAgICBpID0gbWRheXNbeF07Ci0gICAgaWYgKHggPT0gMikgaWYgKGlzbGVhcChhdG9p KHllYXIpKSkgaSsrOwotICAgIGlmIChuZGF5ID4gaSB8fCBuZGF5IDwgMSkgewotCW1ha2VzdHIo JmNtZGF0ZW1zZywiRGF5IG91dCBvZiByYW5nZSIpOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIs Y21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIGlmICghKnAgJiYgdCA9 PSAwKSB7Ci0Jc3ByaW50Zih6YnVmLCIlMDRkJTAyZCUwMmQiLGF0b2koeWVhciksYXRvaShtb250 aCksbmRheSk7CQotCWRwID0gemJ1ZjsKLQlnb3RvIHhjdnRkYXRlOwotICAgIH0KLSAgICBpZiAo KnAgPT0gJysnIHx8ICpwID09ICctJykgewkvKiBHTVQgb2Zmc2V0IHdpdGhvdXQgYSB0aW1lICov Ci0JaGggPSAwOwkJCQkvKiBzbyBkZWZhdWx0IHRpbWUgdG8gMDA6MDA6MDAgKi8KLQltbSA9IDA7 Ci0Jc3MgPSAwOwotCWdvdG8gY210aW1lem9uZTsJCS8qIGFuZCBnbyBkbyB0aW1lem9uZSAqLwot ICAgIH0KLSAgICBpZiAoKnAgJiYgIWlzZGlnaXQoKnApICYmICpwICE9ICc6JykgewotCW1ha2Vz dHIoJmNtZGF0ZW1zZywiSW52YWxpZCB0aW1lIik7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRlIixj bWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgc3ByaW50Zih5eXl5bW1k ZCwiJXMlcyUwMmQiLHllYXIsbW9udGgsbmRheSk7IC8qIGZvciB0eiBjYWxjdWxhdGlvbnMuLi4g Ki8KLQotICAgIHN0YXRlID0gMTsJCQkJLyogSW5pdGlhbGl6ZSB0aW1lLXBhcnNpbmcgRlNBICov Ci0gICAgaGggPSAwOwkJCQkvKiBob3VycyAqLwotICAgIG1tID0gMDsJCQkJLyogbWludXRlcyAq LwotICAgIHNzID0gMDsJCQkJLyogc2Vjb25kcyAqLwotICAgIGZmID0gLTE7CQkJCS8qIGZyYWN0 aW9uICovCi0gICAgZCA9IDA7CQkJCS8qIERpZ2l0IGNvdW50ZXIgKi8KLSAgICBwMiA9IHA7CQkJ CS8qIFByZWxpbWluYXJ5IGRpZ2l0IGNvdW50Li4uICovCi0gICAgd2hpbGUgKGlzZGlnaXQoKnAy KSkgewotCWQrKzsKLQlwMisrOwotICAgIH0KLSAgICBpZiAoZCA+IDYpIHsKLQltYWtlc3RyKCZj bWRhdGVtc2csIlRvbyBtYW55IHRpbWUgZGlnaXRzIik7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRl IixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgZCA9IChkICYgMSAm JiAqcDIgIT0gJzonKSA/IDEgOiAwOwkvKiBPZGQgaW1wbGllcyBsZWFkaW5nICcwJyAqLwotCi0g ICAgd2hpbGUgKCpwKSB7CQkJLyogR2V0IHRoZSB0aW1lLCBpZiBhbnkgKi8KLQlpZiAoaXNkaWdp dCgqcCkpIHsJCS8qIGRpZ2l0ICovCi0JICAgIGlmIChkKysgPiAxKSB7Ci0JCXN0YXRlKys7Ci0J CWQgPSAxOwotCSAgICB9Ci0JICAgIHN3aXRjaCAoc3RhdGUpIHsKLQkgICAgICBjYXNlIDE6CQkJ LyogSG91cnMgKi8KLQkJaGggPSBoaCAqIDEwICsgKCpwIC0gJzAnKTsKLQkJYnJlYWs7Ci0JICAg ICAgY2FzZSAyOgkJCS8qIE1pbnV0ZXMgKi8KLQkJbW0gPSBtbSAqIDEwICsgKCpwIC0gJzAnKTsK LQkJYnJlYWs7Ci0JICAgICAgY2FzZSAzOgkJCS8qIFNlY29uZHMgKi8KLQkJc3MgPSBzcyAqIDEw ICsgKCpwIC0gJzAnKTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSA0OgkJCS8qIEZyYWN0aW9uIG9m IHNlY29uZCAqLwotCQlpZiAoZmYgPCAwKQotCQkgIGZmID0gKCpwID4gJzQnKSA/IDEgOiAwOwot CQlicmVhazsKLQkgICAgfQotCX0gZWxzZSBpZiAoKnAgPT0gJzonKSB7CQkvKiBDb2xvbiAqLwot CSAgICBzdGF0ZSsrOwotCSAgICBkID0gMDsKLQkgICAgaWYgKHN0YXRlID4gMykgewotCQltYWtl c3RyKCZjbWRhdGVtc2csIlRvbyBtYW55IHRpbWUgZmllbGRzIik7Ci0JCWRlYnVnKEYxMTEsImNt Y3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkJcmV0dXJuKE5VTEwpOwotCSAgICB9Ci0JfSBlbHNl IGlmICgqcCA9PSAnLicpIHsKLQkgICAgaWYgKHN0YXRlID09IDMpIHsKLQkJc3RhdGUgPSA0Owot CQlkID0gMDsKLQkgICAgfSBlbHNlIHsKLQkJbWFrZXN0cigmY21kYXRlbXNnLCJJbXByb3BlciBm cmFjdGlvbiIpOwotCQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JCXJl dHVybihOVUxMKTsKLQkgICAgfQotCX0gZWxzZSBpZiAoKnAgPT0gU1ApIHsJCS8qIFNwYWNlICov Ci0JICAgIHdoaWxlICgqcCAmJiAoKnAgPT0gU1ApKQkvKiBwb3NpdGlvbiB0byBmaXJzdCBub25z cGFjZSAqLwotCSAgICAgIHArKzsKLQkgICAgYnJlYWs7Ci0JfSBlbHNlIGlmIChpc2FscGhhKCpw KSkgewkvKiBBTS9QTS9aIG9yIHRpbWV6b25lICovCi0JICAgIGJyZWFrOwotCX0gZWxzZSBpZiAo KnAgPT0gJysnIHx8ICpwID09ICctJykgeyAvKiBHTVQgb2Zmc2V0ICovCi0JICAgIGJyZWFrOwot CX0gZWxzZSB7Ci0JICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCB0aW1lIGNoYXJhY3Rl cnMiKTsKLQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCSAgICBy ZXR1cm4oTlVMTCk7Ci0JfQotCXArKzsKLSAgICB9Ci0gICAgaWYgKCEqcCkJCQkJLyogSWYgbm90 aGluZyBsZWZ0ICovCi0gICAgICBnb3RvIHhjbWRhdGU7CQkJLyogZ28gZmluaXNoIHVwICovCi0K LSAgICAvKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgSEgsIE1NLCBTUywgYW5kIEZGICovCi0gICAg LyogTm93IGhhbmRsZSB0aGUgcmVzdDogQU0sIFBNLCBhbmQvb3IgdGltZXpvbmUgaW5mbyAqLwot Ci0gICAgaWYgKCFja3N0cmNtcChwLCJhbSIsMiwwKSkgewkvKiBBTS9QTS4uLiAqLwotCXBtZmxh ZyA9IDA7Ci0JcCArPSAyOwotICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKHAsImEubS4iLDQsMCkp IHsKLQlwbWZsYWcgPSAwOwotCXAgKz0gNDsKLSAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChwLCJw bSIsMiwwKSkgewotCXBtZmxhZyA9IDE7Ci0JcCArPSAyOwotICAgIH0gZWxzZSBpZiAoIWNrc3Ry Y21wKHAsInAubS4iLDQsMCkpIHsKLQlwbWZsYWcgPSAxOwotCXAgKz0gNDsKLSAgICB9Ci0gICAg aWYgKHBtZmxhZyAmJiBoaCA8IDEyKQkJLyogSWYgUE0gd2FzIGdpdmVuICovCi0gICAgICBoaCAr PSAxMjsJCQkJLyogYWRkIDEyIHRvIHRoZSBob3VyICovCi0KLSAgICAvKiBOb3cgaGFuZGxlIHRp bWV6b25lICovCi0KLSAgY210aW1lem9uZToKLSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgdGlt ZXpvbmUiLHAsMCk7Ci0KLSAgICB6aGggPSAwOwkJCQkvKiBHTVQgb2Zmc2V0IEhIICovCi0gICAg em1tID0gMDsJCQkJLyogR01UIG9mZnNldCBNTSAqLwotICAgIGdtdHNpZ24gPSAwOwkJCS8qIFNp Z24gb2YgR01UIG9mZnNldCAqLwotICAgIGlzZ210ID0gMDsJCQkJLyogMSBpZiB0aW1lIGlzIEdN VCAqLwotCi0gICAgd2hpbGUgKCpwICYmICpwID09IFNQKQkJLyogR29iYmxlIHNwYWNlcyAqLwot ICAgICAgcCsrOwotICAgIGlmICghKnApCQkJCS8qIElmIG5vdGhpbmcgbGVmdCAqLwotICAgICAg Z290byB4Y21kYXRlOwkJCS8qIHdlJ3JlIGRvbmUgKi8KLQotICAgIGlmIChpc2FscGhhKCpwKSkg ewkJCS8qIFNvbWV0aGluZyBsZWZ0ICovCi0JaW50IHpvbmUgPSAwOwkJCS8qIEFscGhhYmV0aWMg bXVzdCBiZSB0aW1lem9uZSAqLwotCXAyID0gcDsJCQkJLyogSXNvbGF0ZSB0aW1lem9uZSAqLwot CXArKzsKLQl3aGlsZSAoaXNhbHBoYSgqcCkpCi0JICBwKys7Ci0JcDMgPSBwOwotCWNjID0gKnA7 Ci0JKnAgPSBOVUw7Ci0JcCA9IHAyOwkJCQkvKiBIYXZlIHRpbWV6b25lLCBsb29rIGl0IHVwICov Ci0Jem9uZSA9IGxvb2t1cCh1c2F0eixwLG51c2F0eixOVUxMKTsKLQlkZWJ1ZyhGMTExLCJjbWN2 dGRhdGUgdGltZXpvbmUgYWxwaGEiLHAsem9uZSk7Ci0KLQlpZiAoem9uZSA8IDApIHsJCQkvKiBO b3QgZm91bmQgKi8KLQkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJVbmtub3duIHRpbWV6b25lIik7 Ci0JICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkgICAgcmV0dXJu KE5VTEwpOwotCX0KLQlpc2dtdCsrOwkJCS8qIEFsbCBkYXRlcyBhcmUgR01UIGZyb20gaGVyZSBk b3duICovCi0JaWYgKHpvbmUgIT0gMCkgewkJLyogQnV0IG5vdCB0aGlzIG9uZSBzbyBtYWtlIGl0 IEdNVCAqLwotCSAgICBoaCArPSB6b25lOwkJCS8qIFJGQyA4MjIgdGltZXpvbmU6IEVTVCBldGMg Ki8KLQkgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGhoICsgem9uZSIsIiIsaGgpOwotCSAgICBp ZiAoaGggPiAyMykgewkJLyogT2Zmc2V0IGNyb3NzZXMgZGF0ZSBib3VuZGFyeSAqLwotCQlpbnQg aTsKLQkJbG9uZyBqZDsKLQkJamQgPSBtamQoeXl5eW1tZGQpOwkvKiBHZXQgTUpEICovCi0JCWpk ICs9IGhoIC8gMjQ7CQkvKiBBZGQgbmV3IGRheShzKSAqLwotCQloaCA9IGhoICUgMjQ7CQkvKiBh bmQgY29udmVydCBiYWNrIHRvIHl5eXltbWRkICovCi0JCWNrc3RybmNweSh5eXl5bW1kZCxtamQy ZGF0ZShqZCksWVlZWU1NREQpOwotCQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgem9uZS1hZGp1c3Rl ZCBkYXRlIix5eXl5bW1kZCxoaCk7Ci0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCSAgeWVh cmJ1ZltpXSA9IHl5eXltbWRkW2ldOwotCQl5ZWFyYnVmWzRdID0gTlVMOwotCQltb25idWZbMF0g PSB5eXl5bW1kZFs0XTsKLQkJbW9uYnVmWzFdID0geXl5eW1tZGRbNV07Ci0JCW1vbmJ1ZlsyXSA9 IE5VTDsKLQkJZGF5YnVmWzBdID0geXl5eW1tZGRbNl07Ci0JCWRheWJ1ZlsxXSA9IHl5eXltbWRk WzddOwotCQlkYXlidWZbMl0gPSBOVUw7Ci0JCWRheSA9IGRheWJ1ZjsKLQkJbmRheSA9IGF0b2ko ZGF5YnVmKTsKLQkJbW9udGggPSBtb25idWY7Ci0JCXllYXIgPSB5ZWFyYnVmOwotCSAgICB9Ci0J fQotCXAgPSBwMzsJCQkJLyogUHV0IGJhY2sgd2hhdGV2ZXIgd2UgcG9rZWQgYWJvdmUgKi8KLQkq cCA9IGNjOwotCi0gICAgfSBlbHNlIGlmICgqcCA9PSAnKycgfHwgKnAgPT0gJy0nKSB7IC8qIEdN VC9VVEMgb2Zmc2V0ICovCi0JcDMgPSBwOwotCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSB0aW1lem9u ZSBHTVQgb2Zmc2V0IixwLDApOwotCWdtdHNpZ24gPSAoKnAgPT0gJysnKSA/IC0xIDogMTsKLQlp c2dtdCsrOwotCXArKzsKLQl3aGlsZSAoKnAgPT0gU1ApIHArKzsKLQlkID0gMDsKLQlwMiA9IHA7 Ci0Jd2hpbGUgKGlzZGlnaXQoKnApKSB7CQkvKiBDb3VudCBkaWdpdHMgKi8KLQkgICAgZCsrOwot CSAgICBwKys7Ci0JfQotCWlmIChkICE9IDQpIHsJCQkvKiBTdHJpY3QgUkZDIFsyXTgyMiAqLwot CSAgICBpc2dtdCA9IDA7CQkJLyogSWYgbm90IGV4YWN0bHkgNCBkaWdpdHMgKi8KLQkgICAgcCA9 IHAzOwkJCS8qIGl0J3Mgbm90IGEgR01UIG9mZnNldC4gKi8KLQkgICAgZ290byBkZWx0YTsJCQkv KiBTbyB0cmVhdCBpdCBhcyBhIGRlbHRhIHRpbWUuICovCi0JfQotCWQgPSAoZCAmIDEgJiYgKnAg IT0gJzonKSA/IDEgOiAwOyAvKiBPZGQgaW1wbGllcyBsZWFkaW5nICcwJyAqLwotCXAgPSBwMjsK LQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgR01UIG9mZnNldCBzaWduIixwLGdtdHNpZ24pOwotCWRl YnVnKEYxMDEsImNtY3Z0ZGF0ZSBHTVQgb2Zmc2V0IGQiLCIiLGQpOwotCXN0YXRlID0gMTsKLQl3 aGlsZSAoKnApIHsKLQkgICAgaWYgKGlzZGlnaXQoKnApKSB7CQkvKiBkaWdpdCAqLwotCQlpZiAo ZCsrID4gMSkgewotCQkgICAgc3RhdGUrKzsKLQkJICAgIGQgPSAxOwotCQl9Ci0JCXN3aXRjaCAo c3RhdGUpIHsKLQkJICBjYXNlIDE6Ci0JCSAgICB6aGggPSB6aGggKiAxMCArICgqcCAtICcwJyk7 Ci0JCSAgICBicmVhazsKLQkJICBjYXNlIDI6Ci0JCSAgICB6bW0gPSB6bW0gKiAxMCArICgqcCAt ICcwJyk7Ci0JCSAgICBicmVhazsKLQkJICBkZWZhdWx0OgkJLyogSWdub3JlIHNlY29uZHMgb3Ig ZnJhY3Rpb25zICovCi0JCSAgICBicmVhazsKLQkJfQkJCQotCSAgICB9IGVsc2UgaWYgKCpwID09 ICc6JykgewkvKiBDb2xvbiAqLwotCQlzdGF0ZSsrOwotCQlkID0gMDsKLQkgICAgfSBlbHNlIGlm ICgqcCA9PSBTUCB8fCAqcCA9PSAnKCcpIHsKLQkJYnJlYWs7Ci0JICAgIH0gZWxzZSB7Ci0JCXAg PSBwMzsJCQkvKiBNYXliZSBpdCdzIG5vdCBhIEdNVCBvZmZzZXQuICovCi0JCWdvdG8gZGVsdGE7 CQkvKiBTbyB0cmVhdCBpdCBhcyBhIGRlbHRhIHRpbWUuICovCi0JICAgIH0KLQkgICAgcCsrOwot CX0KLSAgICB9Ci0gICAgZGVidWcoRjExMCwiY21jdnRkYXRlIHNvdXJjZSBzdHJpbmcgYWZ0ZXIg dGltZXpvbmUiLHAsMCk7Ci0KLSAgICBpZiAoKnApIHsJCQkJLyogQW55dGhpbmcgbGVmdD8gKi8K LQlwMiA9IHA7Ci0Jd2hpbGUgKCpwMiA9PSBTUCkJCS8qIFNraXAgcGFzdCBzcGFjZXMgKi8KLQkg IHAyKys7Ci0JaWYgKCpwMiA9PSAnKCcpIHsJCS8qIFJGQy04MjIgY29tbWVudD8gKi8KLQkgICAg aW50IHBjID0gMTsJCQkvKiBwYXJlbiBjb3VudGVyICovCi0JICAgIHAyKys7Ci0JICAgIHdoaWxl ICgqcDIpIHsKLQkJaWYgKCpwMiA9PSAnKScpIHsKLQkJICAgIGlmICgtLXBjID09IDApIHsKLQkJ CXAyKys7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJfSBlbHNlIGlmICgqcDIgPT0gJyknKSB7Ci0J CSAgICBwYysrOwotCQl9Ci0JCXAyKys7Ci0JICAgIH0JCQotCSAgICB3aGlsZSAoKnAyID09IFNQ KQkJLyogU2tpcCBwYXN0IHNwYWNlcyAqLwotCSAgICAgIHAyKys7Ci0JICAgIGlmICghKnAyKQkJ CS8qIEFueXRoaW5nIGxlZnQ/ICovCi0JICAgICAgKnAgPSBOVUw7CQkJLyogTm8sIGVyYXNlIGNv bW1lbnQgKi8KLQl9Ci0JaWYgKCEqcDIpCQkJLyogQW55dGhpbmcgbGVmdD8gKi8KLQkgIGdvdG8g eGNtZGF0ZTsJCQkvKiBObywgZG9uZS4gKi8KLQlwID0gcDI7Ci0KLSAgICAgIGRlbHRhOgotCWRl YnVnKEYxMTAsImNtY3Z0ZGF0ZSBkZWx0YSB5eXl5bW1kZCIseXl5eW1tZGQsMCk7Ci0JZGVidWco RjExMCwiY21jdnRkYXRlIGRlbHRhIHllYXIiLHllYXIsMCk7Ci0JZGVidWcoRjExMCwiY21jdnRk YXRlIGRlbHRhIHAiLHAsMCk7Ci0KLQlpZiAoKnAgPT0gJysnIHx8ICpwID09ICctJykgewkvKiBE ZWx0YSB0aW1lICovCi0JICAgIGludCBzdGF0ZSA9IE5FRURfREFZUzsJLyogU3RhcnQgb2ZmIGxv b2tpbmcgZm9yIGRheXMgKi8KLQkgICAgY2hhciBjID0gMDsKLQkgICAgZHNpZ24gPSAxOwkJCS8q IEdldCBzaWduICovCi0JICAgIGlmICgqcCsrID09ICctJykKLQkgICAgICBkc2lnbiA9IC0xOwot CSAgICB3aGlsZSAoKnAgPT0gU1ApCQkvKiBTa2lwIGludGVydmVuaW5nIHNwYWNlcyAqLwotCSAg ICAgIHArKzsKLQkgICAgd2hpbGUgKHN0YXRlKSB7CQkvKiBGU0EgdG8gcGFyc2UgZGVsdGEgdGlt ZSAqLwotCQlpZiAoc3RhdGUgPCAwIHx8ICFpc2RpZ2l0KCpwKSkgewotCQkgICAgbWFrZXN0cigm Y21kYXRlbXNnLCJJbnZhbGlkIGRlbHRhIHRpbWUiKTsKLQkJICAgIGRlYnVnKEYxMTEsImNtY3Z0 ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkJICAgIHJldHVybihOVUxMKTsKLQkJfQotCQlwMiA9IHA7 CQkJLyogR2V0IG5leHQgbnVtZXJpYyBmaWVsZCAqLwotCQl3aGlsZSAoaXNkaWdpdCgqcDIpKQot CQkgIHAyKys7Ci0JCWMgPSAqcDI7CQkvKiBBbmQgYnJlYWsgY2hhcmFjdGVyICovCi0JCSpwMiA9 IE5VTDsJCS8qIFRlcm1pbmF0ZSB0aGUgbnVtYmVyICovCi0KLQkJc3dpdGNoIChzdGF0ZSkgewkv KiBJbnRlcnByZXQgYWNjb3JkaW5nIHRvIHN0YXRlICovCi0JCSAgY2FzZSBORUVEX0RBWVM6CS8q IEluaXRpYWwgKi8KLQkJICAgIGlmICgoYyA9PSAnLScpIHx8CS8qIFZNUyBmb3JtYXQgKi8KLQkJ CSgoYyA9PSAnZCcgfHwgYyA9PSAnRCcpCi0JCQkgJiYgIWlzYWxwaGEoKihwMisxKSkpKSB7IC8q IERheXMgKi8KLQkJCWRkYXlzID0gYXRvaShwKTsKLQkJCWlmICghKihwMisxKSkJCQkKLQkJCSAg c3RhdGUgPSAwOwotCQkJZWxzZQkJICAgICAgLyogaWYgYW55dGhpbmcgaXMgbGVmdCAqLwotCQkJ ICBzdGF0ZSA9IE5FRURfSFJTOyAgIC8qIG5vdyB3ZSB3YW50IGhvdXJzLiAqLwotCQkgICAgfSBl bHNlIGlmICgoYyA9PSAnVycgfHwgYyA9PSAndycpICYmICFpc2FscGhhKCoocDIrMSkpKSB7Ci0J CQlkZGF5cyA9IGF0b2kocCkgKiA3OyAgIC8qIHdlZWtzLi4uICovCi0JCQlpZiAoISoocDIrMSkp CQkJCi0JCQkgIHN0YXRlID0gMDsKLQkJCWVsc2UKLQkJCSAgc3RhdGUgPSBORUVEX0hSUzsKLQkJ ICAgIH0gZWxzZSBpZiAoKGMgPT0gJ00nIHx8IGMgPT0gJ20nKSAmJiAhaXNhbHBoYSgqKHAyKzEp KSkgewotCQkJZG1vbnRocyA9IGF0b2kocCk7IC8qIG1vbnRocy4uLiAqLwotCQkJaWYgKCEqKHAy KzEpKQkJCQotCQkJICBzdGF0ZSA9IDA7Ci0JCQllbHNlCi0JCQkgIHN0YXRlID0gTkVFRF9IUlM7 Ci0JCSAgICB9IGVsc2UgaWYgKChjID09ICdZJyB8fCBjID09ICd5JykgJiYgIWlzYWxwaGEoKihw MisxKSkpIHsKLQkJCWR5ZWFycyA9IGF0b2kocCk7IC8qIHllYXJzLi4uICovCi0JCQlpZiAoISoo cDIrMSkpCQkJCi0JCQkgIHN0YXRlID0gMDsKLQkJCWVsc2UKLQkJCSAgc3RhdGUgPSBORUVEX0hS UzsKLQkJICAgIH0gZWxzZSBpZiAoYyA9PSAnOicpIHsgLyogZGVsaW1pdGVyIGlzIGNvbG9uICov Ci0JCQlkaG91cnMgPSBhdG9pKHApOyAgLyogc28gaXQncyBob3VycyAqLwotCQkJc3RhdGUgPSBO RUVEX01JTlM7IC8qIG5vdyB3ZSB3YW50IG1pbnV0ZXMgKi8KLQkJICAgIH0gZWxzZSBpZiAoIWMp IHsgICAgICAgLyogZW5kIG9mIHN0cmluZyAqLwotCQkJZGhvdXJzID0gYXRvaShwKTsgIC8qIGl0 J3Mgc3RpbGwgaG91cnMgKi8KLQkJCXN0YXRlID0gMDsgICAgICAgICAvKiBhbmQgd2UncmUgZG9u ZSAqLwotCQkgICAgfSBlbHNlIGlmIChpc2FscGhhKGMpIHx8IGMgPT0gU1ApIHsKLQkJCWlmIChj ID09IFNQKSB7CS8qIEl0J3MgYSBrZXl3b3JkPyAqLwotCQkJICAgIHAyKys7CS8qIFNraXAgc3Bh Y2VzICovCi0JCQkgICAgd2hpbGUgKCpwMiA9PSBTUCkKLQkJCSAgICAgIHAyKys7Ci0JCQl9IGVs c2UgewkvKiBvciByZXBsYWNlIGZpcnN0IGxldHRlciAqLwotCQkJICAgICpwMiA9IGM7Ci0JCQl9 Ci0JCQlwMyA9IHAyOwkvKiBwMiBwb2ludHMgdG8gYmVnaW5uaW5nIG9mIGtleXdvcmQgKi8KLQkJ CXdoaWxlIChpc2FscGhhKCpwMykpIC8qIEZpbmQgZW5kIG9mIGtleXdvcmQgKi8KLQkJCSAgcDMr KzsKLQkJCWMgPSAqcDM7CS8qIE5VTCBpdCBvdXQgc28gd2UgY2FuIGxvb2sgaXQgdXAgKi8KLQkJ CWlmICgqcDMpCS8qIHAzIHBvaW50cyB0byBrZXl3b3JkIHRlcm1pbmF0b3IgKi8KLQkJCSAgKnAz ID0gTlVMOwotCQkJdW5pdHMgPSBsb29rdXAodGltZXVuaXRzLHAyLG51bml0cyxOVUxMKTsKLQkJ CWlmICh1bml0cyA8IDApIHsKLQkJCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQgdW5p dHMgaW4gZGVsdGEgdGltZSIpOwotCQkJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRl bXNnLC0xKTsKLQkJCSAgICByZXR1cm4oTlVMTCk7Ci0JCQl9Ci0JCQkqcDIgPSBOVUw7CS8qIFJl LXRlcm1pbmF0ZSB0aGUgbnVtYmVyICovCi0JCQkqcDMgPSBjOwotCQkJd2hpbGUgKCpwMyA9PSBT UCkgLyogUG9pbnQgYXQgZmllbGQgYWZ0ZXIgdW5pdHMgKi8KLQkJCSAgcDMrKzsKLQkJCXAyID0g cDM7Ci0JCQlzd2l0Y2ggKHVuaXRzKSB7Ci0JCQkgIGNhc2UgVFVfREFZUzoKLQkJCSAgICBkZGF5 cyA9IGF0b2kocCk7Ci0JCQkgICAgYnJlYWs7Ci0JCQkgIGNhc2UgVFVfV0VFS1M6Ci0JCQkgICAg ZGRheXMgPSBhdG9pKHApICogNzsKLQkJCSAgICBicmVhazsKLQkJCSAgY2FzZSBUVV9NT05USFM6 Ci0JCQkgICAgZG1vbnRocyA9IGF0b2kocCk7Ci0JCQkgICAgYnJlYWs7Ci0JCQkgIGNhc2UgVFVf WUVBUlM6Ci0JCQkgICAgZHllYXJzID0gYXRvaShwKTsKLQkJCSAgICBicmVhazsKLQkJCX0KLQkJ CWlmICgqcDIpIHsKLQkJCSAgICBzdGF0ZSA9IE5FRURfSFJTOwotCQkJICAgIHAyLS07Ci0JCQl9 IGVsc2UKLQkJCSAgc3RhdGUgPSAwOwotCi0JCSAgICB9IGVsc2UgewkJLyogQW55dGhpbmcgZWxz ZSAqLwotCQkJc3RhdGUgPSAtMTsJLyogaXMgYW4gZXJyb3IgKi8KLQkJICAgIH0KLQkJICAgIGJy ZWFrOwotCQkgIGNhc2UgTkVFRF9IUlM6CS8qIExvb2tpbmcgZm9yIGhvdXJzICovCi0JCSAgICBk ZWJ1ZyhGMDAwLCJjbWN2dGRhdGUgTkVFRF9IUlMiLHAsYyk7Ci0JCSAgICBpZiAoYyA9PSAnOicp IHsKLQkJCWRob3VycyA9IGF0b2kocCk7Ci0JCQlzdGF0ZSA9IE5FRURfTUlOUzsKLQkJICAgIH0g ZWxzZSBpZiAoIWMpIHsKLQkJCWRob3VycyA9IGF0b2kocCk7Ci0JCQlzdGF0ZSA9IDA7Ci0JCSAg ICB9IGVsc2UgewotCQkJc3RhdGUgPSAtMTsKLQkJICAgIH0KLQkJICAgIGJyZWFrOwotCQkgIGNh c2UgTkVFRF9NSU5TOgkvKiBMb29raW5nIGZvciBtaW51dGVzICovCi0JCSAgICBpZiAoYyA9PSAn OicpIHsKLQkJCWRtaW5zID0gYXRvaShwKTsKLQkJCXN0YXRlID0gTkVFRF9TRUNTOwotCQkgICAg fSBlbHNlIGlmICghYykgewotCQkJZG1pbnMgPSBhdG9pKHApOwotCQkJc3RhdGUgPSAwOwotCQkg ICAgfSBlbHNlIHsKLQkJCXN0YXRlID0gLTE7Ci0JCSAgICB9Ci0JCSAgICBicmVhazsKLQkJICBj YXNlIE5FRURfU0VDUzoJLyogTG9va2luZyBmb3Igc2Vjb25kcyAqLwotCQkgICAgaWYgKGMgPT0g Jy4nKSB7Ci0JCQlkc2VjcyA9IGF0b2kocCk7Ci0JCQlzdGF0ZSA9IE5FRURfRlJBQzsKLQkJICAg IH0gZWxzZSBpZiAoIWMpIHsKLQkJCWRzZWNzID0gYXRvaShwKTsKLQkJCXN0YXRlID0gMDsKLQkJ ICAgIH0gZWxzZSB7Ci0JCQlzdGF0ZSA9IC0xOwotCQkgICAgfQotCQkgICAgYnJlYWs7Ci0JCSAg Y2FzZSBORUVEX0ZSQUM6CS8qIEZyYWN0aW9uIG9mIHNlY29uZCAqLwotCQkgICAgaWYgKCFjICYm IHJkaWdpdHMocCkpIHsKLQkJCWlmICgqcCA+ICc0JykKLQkJCSAgZHNlY3MrKzsKLQkJCXN0YXRl ID0gMDsKLQkJICAgIH0gZWxzZSB7Ci0JCQlzdGF0ZSA9IC0xOwotCQkgICAgfQotCQkgICAgYnJl YWs7Ci0JCX0KLQkJaWYgKGMpCQkJLyogbmV4dCBmaWVsZCBpZiBhbnkgKi8KLQkJICBwID0gcDIg KyAxOwotCSAgICB9Ci0JICAgIGhhdmVkZWx0YSA9IDE7Ci0KLQl9IGVsc2UgewotCSAgICBtYWtl c3RyKCZjbWRhdGVtc2csIkV4dHJhbmVvdXMgbWF0ZXJpYWwgYXQgZW5kIik7Ci0JICAgIGRlYnVn KEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkgICAgcmV0dXJuKE5VTEwpOwotCX0K LSAgICB9Ci0KLSB4Y21kYXRlOgotCi0gICAgaWYgKCh0ICE9IDIgJiYgaGggPiAyNCkgfHwgaGgg PCAwKSB7IC8qIEhvdXIgcmFuZ2UgY2hlY2sgKi8KLQltYWtlc3RyKCZjbWRhdGVtc2csIkludmFs aWQgaG91cnMiKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0 dXJuKE5VTEwpOwotICAgIH0KLSAgICBpZiAobW0gPiA1OSkgewkJCS8qIE1pbnV0ZSByYW5nZSBj aGVjayAqLwotCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCBtaW51dGVzIik7Ci0JZGVidWco RjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0g ICAgaWYgKGZmID4gMCkgewkJCS8qIEZyYWN0aW9uIG9mIHNlY29uZD8gKi8KLQlpZiAoc3MgPCA1 OSkgewotCSAgICBzcysrOwotCSAgICBmZiA9IDA7Ci0JfSBlbHNlIGlmIChtbSA8IDU5KSB7Ci0J ICAgIHNzID0gMDsKLQkgICAgbW0rKzsKLQkgICAgZmYgPSAwOwotCX0gZWxzZSBpZiAoaGggPCAy NCkgewotCSAgICBzcyA9IDA7Ci0JICAgIG1tID0gMDsKLQkgICAgaGgrKzsKLQkgICAgZmYgPSAw OwotCX0KLQkvKiBNdXN0IGFkZCBhIGRheSAtLSBsZWF2ZSBmZiBhdCAxLi4uICovCi0JLyogKERP IFNPTUVUSElORyBBQk9VVCBUSElTIExBVEVSKSAqLwotICAgIH0KLSAgICBpZiAoc3MgPiA2MCkg ewkJCS8qIFNlY29uZHMgcmFuZ2UgY2hlY2sgKi8KLQltYWtlc3RyKCZjbWRhdGVtc2csIkludmFs aWQgc2Vjb25kcyIpOyAvKiA2MCBpcyBvayBiZWNhdXNlIG9mICovCi0JZGVidWcoRjExMSwiY21j dnRkYXRlIixjbWRhdGVtc2csLTEpOyAgLyogTGVhcCBTZWNvbmQuICovCi0JcmV0dXJuKE5VTEwp OwotICAgIH0KLSAgICBpZiAoKG1tIDwgMCB8fCBzcyA8IDApIHx8Ci0JKHQgIT0gMiAmJiAoc3Mg PiAwIHx8IG1tID4gMCkgJiYgaGggPiAyMykpIHsKLQltYWtlc3RyKCZjbWRhdGVtc2csIkludmFs aWQgbWludXRlcyBvciBzZWNvbmRzIik7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVt c2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwiY21jdnRkYXRl IHllYXIiLHllYXIsMCk7Ci0gICAgZGVidWcoRjExMCwiY21jdnRkYXRlIG1vbnRoIixtb250aCww KTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgbmRheSIsIiIsbmRheSk7Ci0gICAgZGVidWco RjEwMSwiY21jdnRkYXRlIGhoIiwiIixoaCk7Ci0gICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIG1t IiwiIixtbSk7Ci0gICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIHNzIiwiIixzcyk7Ci0gICAgZGVi dWcoRjEwMSwiY21jdnRkYXRlIGdtdHNpZ24iLCIiLGdtdHNpZ24pOwotICAgIGRlYnVnKEYxMDEs ImNtY3Z0ZGF0ZSB6aGgiLCIiLHpoaCk7Ci0gICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIHptbSIs IiIsem1tKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgaXNnbXQiLCIiLGlzZ210KTsKLQot I2lmZGVmIFpMT0NBTFRJTUUKLS8qIEhhbmRsZSB0aW1lem9uZSAtLSBmaXJzdCBjb252ZXJ0IHRv IEdNVCAqLwotCi0gICAgemRkID0gMDsJCQkJLyogRGF5cyBjaGFuZ2VkICovCi0gICAgaWYgKGlz Z210ICYmICh6bW0gfHwgemhoKSkgewkvKiBJZiBHTVQgb2Zmc2V0IGdpdmVuICovCi0JbG9uZyBz ZWMxLCBzZWMyLCB6ejsKLQlzZWMxID0gc3MgKyA2MCAqIG1tICsgMzYwMCAqIGhoOwotCXNlYzIg PSBnbXRzaWduICogKDYwICogem1tICsgMzYwMCAqIHpoaCk7Ci0Jc2VjMSArPSBzZWMyOwotCWlm IChzZWMxIDwgMCkgewotCSAgICBzZWMxID0gMCAtIHNlYzE7Ci0JICAgIHpkZCA9IDBMIC0gKHNl YzEgLyA4NjQwMEwpOwotCSAgICBzZWMxID0gc2VjMSAlIDg2NDAwTDsKLQl9IGVsc2UgaWYgKHNl YzEgPiA4NjQwMEwpIHsKLQkgICAgemRkID0gc2VjMSAvIDg2NDAwTDsKLQkgICAgc2VjMSA9IHNl YzEgJSA4NjQwMEw7Ci0JfQotCXNzID0gc2VjMSAlIDYwOwotCXp6ID0gc2VjMSAvIDYwOwotCW1t ID0genogJSA2MDsKLQloaCA9IHp6IC8gNjA7Ci0JZGVidWcoRjEwMSwiY21jdnRkYXRlIE5FVyBo aCIsIiIsaGgpOwotCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBORVcgbW0iLCIiLG1tKTsKLQlkZWJ1 ZyhGMTAxLCJjbWN2dGRhdGUgTkVXIGRkIiwiIix6ZGQpOwotCi0vKiBBdCB0aGlzIHBvaW50IGho Om1tOnNzIGlzIGluIEdNVCBhbmQgemRkIGlzIHRoZSBjYWxlbmRhciBhZGp1c3RtZW50ICovCi0K LSAgICB9Ci0jZW5kaWYgLyogWkxPQ0FMVElNRSAqLwotCi0gICAgaWYgKHl5eXltbWRkWzBdICYm ICF5ZWFyKSB7Ci0JY2tzdHJuY3B5KHllYXJidWYseXl5eW1tZGQsNSk7Ci0JY2tzdHJuY3B5KG1v bmJ1ZiwmeXl5eW1tZGRbNF0sMyk7Ci0JY2tzdHJuY3B5KGRheWJ1ZiwmeXl5eW1tZGRbNl0sMyk7 Ci0JeWVhciA9IHllYXJidWY7Ci0JbW9udGggPSBtb25idWY7Ci0JZGF5ID0gZGF5YnVmOwotCW5k YXkgPSBhdG9pKGRheWJ1Zik7Ci0gICAgfQotICAgIHNwcmludGYoemJ1ZiwiJTA0ZCUwMmQlMDJk ICUwMmQ6JTAyZDolMDJkIiwgLyogU0FGRSAqLwotCSAgICBhdG9pKHllYXIpLGF0b2kobW9udGgp LG5kYXksaGgsbW0sc3MKLQkgICAgKTsKLSAgICBkcCA9IHpidWY7Ci0KLSNpZmRlZiBaTE9DQUxU SU1FCi0gICAgLyogTm93IGNvbnZlcnQgZnJvbSBHTVQgdG8gbG9jYWwgdGltZSAqLwotCi0gICAg aWYgKGlzZ210KSB7CQkJLyogSWYgR01UIGNvbnZlcnQgdG8gbG9jYWwgdGltZSAqLwotCWRlYnVn KEYxMTAsImNtY3Z0ZGF0ZSBHTVQgMSIsZHAsMCk7Ci0JaWYgKHpkZCkgewkJCS8qIEFwcGx5IGFu eSBjYWxlbmRhciBhZGp1c3RtZW50ICovCi0JICAgIGxvbmcgeno7Ci0JICAgIHp6ID0gbWpkKGRw KSArIHpkZDsKLQkgICAgc3ByaW50Zih6YnVmLCIlcyAlMDJkOiUwMmQ6JTAyZCIsbWpkMmRhdGUo enopLGhoLG1tLHNzKTsKLQl9Ci0JZGVidWcoRjExMCwiY21jdnRkYXRlIEdNVCAyIixkcCwwKTsK LQlpZiAoKHAgPSB6bG9jYWx0aW1lKGRwKSkpIHsKLQkgICAgZGVidWcoRjExMCwiY21jdnRkYXRl IGFzY3RpbWUgemxvY2FsdGltZSIscCwwKTsKLQkgICAgaWYgKHApIGNrc3RybmNweSh6YnVmLHAs MTgpOwotCX0KLQlkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgR01UIDMiLGRwLDApOwotCWZvciAoaSA9 IDA7IGkgPCA0OyBpKyspCi0JICB5ZWFyYnVmW2ldID0gZHBbaV07Ci0JeWVhcmJ1Zls0XSA9IE5V TDsKLQltb25idWZbMF0gPSBkcFs0XTsKLQltb25idWZbMV0gPSBkcFs1XTsKLQltb25idWZbMl0g PSBOVUw7Ci0JZGF5YnVmWzBdID0gZHBbNl07Ci0JZGF5YnVmWzFdID0gZHBbN107Ci0JZGF5YnVm WzJdID0gTlVMOwotCWRheSA9IGRheWJ1ZjsKLQluZGF5ID0gYXRvaShkYXlidWYpOwotCW1vbnRo ID0gbW9uYnVmOwotCXllYXIgPSB5ZWFyYnVmOwotCWhoID0gYXRvaSgmZHBbOV0pOwotCW1tID0g YXRvaSgmZHBbMTJdKTsKLQlzcyA9IGF0b2koJmRwWzE1XSk7Ci0gICAgfQotI2VuZGlmIC8qIFpM T0NBTFRJTUUgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYx MDEsImNtY3Z0ZGF0ZSBob3VyIiwiIixoaCk7Ci0JZGVidWcoRjEwMSwiY21jdnRkYXRlIG1pbnV0 ZSIsIiIsbW0pOwotCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBzZWNvbmQiLCIiLHNzKTsKLSAgICB9 Ci0jZW5kaWYgLyogREVCTE9HICovCi0KLSAgICBtYWtlc3RyKCZjbWRhdGVtc2csTlVMTCk7Ci0g ICAgaWYgKGhhdmVkZWx0YSkgewotI2lmZGVmIERFQlVHCi0JaWYgKGRlYmxvZykgewotCSAgICBk ZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgYmFzZSAiLGRwLDApOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWN2 dGRhdGUgZGVsdGEgc2lnbiIsIiIsZHNpZ24pOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUg ZGVsdGEgeXJzICIsIiIsZHllYXJzKTsKLQkgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGRlbHRh IG1vcyAiLCIiLGRtb250aHMpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgZGVsdGEgZGF5 cyIsIiIsZGRheXMpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgZGVsdGEgaHJzICIsIiIs ZGhvdXJzKTsKLQkgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGRlbHRhIG1pbnMiLCIiLGRtaW5z KTsKLQkgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGRlbHRhIHNlY3MiLCIiLGRzZWNzKTsKLQl9 Ci0jZW5kaWYgLyogREVCTE9HICovCi0JaWYgKCEoZHAgPSBjbWRlbHRhKGF0b2koeWVhciksCi0J CSAgICBhdG9pKG1vbnRoKSwKLQkJICAgIG5kYXksIGhoLCBtbSwgc3MsCi0JCSAgICBkc2lnbiwg ZHllYXJzLCBkbW9udGhzLCBkZGF5cywgZGhvdXJzLCBkbWlucywgZHNlY3MpKSkgewotCSAgICBk ZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JICAgIHJldHVybihOVUxMKTsK LQl9Ci0gICAgfQotCi0gIHhjdnRkYXRlOgkJCQkvKiBFeGl0IHBvaW50IGZvciBzdWNjZXNzICov Ci0gICAgewotCWludCBsZW4sIGssIG47Ci0JY2hhciAqIHA7Ci0JZGVidWcoRjExMCwiY21jdnRk YXRlIHhjdnRkYXRlIGRwIixkcCwwKTsKLQlpZiAoIWRwKSBkcCA9ICIiOwkJLyogU2hvdWxkbid0 IGhhcHBlbiAqLwotCWlmICghKmRwKSByZXR1cm4oTlVMTCk7CQkvKiAuLi4gKi8KLQlsZW4gPSBz dHJsZW4oZHApOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSByZXN1bHQiLGRwLGxlbik7Ci0JayA9 IGNtZGF0ZWJwIC0gKGNoYXIgKiljbWRhdGVidWY7IC8qIFNwYWNlIHVzZWQgKi8KLQluID0gQ01E QVRFQlVGIC0gayAtIDE7CQkvKiBTcGFjZSBsZWZ0ICovCi0JaWYgKG4gPCBsZW4pIHsJCQkvKiBO b3QgZW5vdWdoPyAqLwotCSAgICBjbWRhdGVicCA9IGNtZGF0ZWJ1ZjsJLyogV3JhcCBhcm91bmQg Ki8KLQkgICAgbiA9IENNREFURUJVRjsKLQl9Ci0JY2tzdHJuY3B5KGNtZGF0ZWJwLGRwLG4pOwot CXAgPSBjbWRhdGVicDsKLQljbWRhdGVicCArPSBsZW4gKyAxOwotCXJldHVybihwKTsKLSAgICB9 Ci19Ci0KLWludAotY212ZGF0ZShkKSBjaGFyICogZDsgewkJCS8qIFZlcmlmeSBkYXRlLXRpbWUg Ki8KLSAgICBpbnQgaTsKLSAgICBpZiAoIWQpIHJldHVybigwKTsKLSAgICBpZiAoKGludClzdHJs ZW4oZCkgIT0gMTcpIHJldHVybigwKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7IGlm ICghaXNkaWdpdChkW2ldKSkgcmV0dXJuKDApOyB9Ci0gICAgaWYgKCFpc2RpZ2l0KGRbOV0pICB8 fCAhaXNkaWdpdChkWzEwXSkgfHwKLQkhaXNkaWdpdChkWzEyXSkgfHwgIWlzZGlnaXQoZFsxM10p IHx8Ci0JIWlzZGlnaXQoZFsxNV0pIHx8ICFpc2RpZ2l0KGRbMTZdKSkKLSAgICAgIHJldHVybigw KTsKLSAgICBpZiAoIWNrc3RyY2hyKCIgVHRfLToiLGRbOF0pKSByZXR1cm4oMCk7Ci0gICAgaWYg KGRbMTFdICE9ICc6JyAmJiBkWzE0XSAhPSAnOicpIHJldHVybigwKTsKLSAgICByZXR1cm4oMSk7 Ci19Ci0KLS8qIGMgbSBkIGkgZiBmIGQgYSB0IGUgIC0tICBHZXQgZGlmZmVyZW5jZSBiZXR3ZWVu IHR3byBkYXRlLXRpbWVzICovCi0KLWNoYXIgKgotY21kaWZmZGF0ZShkMSxkMikgY2hhciAqIGQx LCAqIGQyOyB7Ci0gICAgY2hhciBkMWJ1Zls5XSwgZDJidWZbOV07Ci0gICAgY2hhciB4MWJ1Zlsx OF0sIHgyYnVmWzE4XTsKLSAgICBjaGFyICogcDsKLQotICAgIGludCBoaDEgPSAwLCBtbTEgPSAw LCBzczEgPSAwOwotICAgIGludCBoaDIgPSAwLCBtbTIgPSAwLCBzczIgPSAwOwotICAgIGludCBo aCwgbW0sIHNzOwotICAgIGludCBzaWduOwotICAgIGxvbmcgamQxLCBqZDIsIGpkLCBmMSwgZjIs IGZ4OwotICAgIHN0YXRpYyBjaGFyIHJlc3VsdFsyNF0sICpycDsKLQotICAgIGRlYnVnKEYxMTAs ImNtZGlmZmRhdGUgZDEgQSIsZDEsMCk7Ci0gICAgZGVidWcoRjExMCwiY21kaWZmZGF0ZSBkMiBB IixkMiwwKTsKLQotICAgIGlmICghKHAgPSBjbWN2dGRhdGUoZDEsMSkpKQkJLyogQ29udmVydCBk YXRlcyB0byBzdGFuZGFyZCBmb3JtYXQgKi8KLSAgICAgIHJldHVybihOVUxMKTsKLSAgICBja3N0 cm5jcHkoeDFidWYscCwxOCk7Ci0gICAgZDEgPSB4MWJ1ZjsKLQotICAgIGlmICghKHAgPSBjbWN2 dGRhdGUoZDIsMSkpKQotICAgICAgcmV0dXJuKE5VTEwpOwotICAgIGNrc3RybmNweSh4MmJ1Zixw LDE4KTsKLSAgICBkMiA9IHgyYnVmOwotCi0gICAgZGVidWcoRjExMCwiY21kaWZmZGF0ZSBkMSBC IixkMSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWRpZmZkYXRlIGQyIEIiLGQyLDApOwotICAgIGlm ICghY212ZGF0ZShkMSkgfHwgIWNtdmRhdGUoZDIpKQotICAgICAgcmV0dXJuKE5VTEwpOwotCi0g ICAgaGgxID0gYXRvaSgmZDFbOV0pOwkJCS8qIEdldCBob3VycywgbWludXRlcywgYW5kIHNlY29u ZHMgKi8KLSAgICBtbTEgPSBhdG9pKCZkMVsxMl0pOwkJLyogZm9yIGZpcnN0IGRhdGUgKi8KLSAg ICBzczEgPSBhdG9pKCZkMVsxNV0pOwotICAgIGNrc3RybmNweShkMWJ1ZixkMSw5KTsKLQotICAg IGhoMiA9IGF0b2koJmQyWzldKTsJCQkvKiBkaXR0byBmb3Igc2Vjb25kIGRhdGUgKi8KLSAgICBt bTIgPSBhdG9pKCZkMlsxMl0pOwotICAgIHNzMiA9IGF0b2koJmQyWzE1XSk7Ci0gICAgY2tzdHJu Y3B5KGQyYnVmLGQyLDkpOwotICAgIAotICAgIGpkMSA9IG1qZChkMWJ1Zik7CQkJLyogR2V0IHRo ZSB0d28gSnVsaWFuIGRhdGVzICovCi0gICAgamQyID0gbWpkKGQyYnVmKTsKLSAgICBmMSA9IHNz MSArIDYwICogbW0xICsgMzYwMCAqIGhoMTsJLyogQ29udmVydCBmaXJzdCB0aW1lIHRvIHNlY29u ZHMgKi8KLQotICAgIGYyID0gc3MyICsgNjAgKiBtbTIgKyAzNjAwICogaGgyOwkvKiBEaXR0byBm b3Igc2Vjb25kIHRpbWUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJjbWRpZmZkYXRlIGpkMSIsIiIsamQx KTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWRpZmZkYXRlIGYxIiwiIixmMSk7Ci0gICAgZGVidWcoRjEw MSwiY21kaWZmZGF0ZSBqZDIiLCIiLGpkMik7Ci0gICAgZGVidWcoRjEwMSwiY21kaWZmZGF0ZSBm MiIsIiIsZjIpOwotICAKLSAgICBpZiAoamQyID4gamQxIHx8IChqZDEgPT0gamQyICYmIGYyID4g ZjEpKSB7Ci0gICAgICAgIHNpZ24gPSAtMTsgCi0gICAgICAgIGlmIChmMSA+IGYyKSB7amQyLS07 IGYyICs9IDg2NDAwTDt9Ci0gICAgICAgIGpkID0gamQyIC0gamQxOwotICAgICAgICBmeCA9IGYy IC0gZjE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2lnbiA9IDE7Ci0gICAgICAgIGlmIChmMiA+ IGYxKSB7amQxLS07IGYxICs9IDg2NDAwTDt9Ci0gICAgICAgIGpkID0gamQxIC0gamQyOwotICAg ICAgICBmeCA9IGYxIC0gZjI7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsImNtZGlmZmRhdGUgc2ln biBqZCIsc2lnbjwwPyItIjoiKyIsamQpOwotICAgIGRlYnVnKEYxMDEsImNtZGlmZmRhdGUgZngi LCIiLGZ4KTsKLSAgCi0gICAgaGggPSAoaW50KSAoZnggLyAzNjAwTCk7CQkvKiBDb252ZXJ0IHNl Y29uZHMgdG8gaGg6bW06c3MgKi8KLQotICAgIG1tID0gKGludCkgKGZ4ICUgMzYwMEwpIC8gNjBM OwotICAgIHNzID0gKGludCkgKGZ4ICUgMzYwMEwpICUgNjBMOwotCi0gICAgcnAgPSByZXN1bHQ7 CQkJLyogRm9ybWF0IHRoZSByZXN1bHQgKi8KLSAgICAqcnArKyA9IChzaWduIDwgMCkgPyAnLScg OiAnKyc7Ci0gICAgaWYgKGpkICE9IDAgJiYgaGgrbW0rc3MgPT0gMCkgewotCXNwcmludGYocnAs IiVsZGQiLGpkKTsKLSAgICB9IGVsc2UgaWYgKGpkID09IDApIHsKLQlpZiAoc3MgPT0gMCkKLQkg IHNwcmludGYocnAsIiVkOiUwMmQiLGhoLG1tKTsKLQllbHNlCi0JICBzcHJpbnRmKHJwLCIlZDol MDJkOiUwMmQiLGhoLG1tLHNzKTsKLSAgICB9IGVsc2UgewotCWlmIChzcyA9PSAwKQotCSAgc3By aW50ZihycCwiJWxkZCVkOiUwMmQiLGpkLGhoLG1tKTsKLQllbHNlCi0JICBzcHJpbnRmKHJwLCIl bGRkJWQ6JTAyZDolMDJkIixqZCxoaCxtbSxzcyk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImNt ZGlmZmRhdGUgcmVzdWx0IixyZXN1bHQsMCk7Ci0gICAgcmV0dXJuKChjaGFyICopcmVzdWx0KTsK LX0KLQotI2lmbmRlZiBOT1NQTAotLyogcyBoIHUgZiBmIGwgZSBkIGEgdCBlICAtLSAgUmVhcnJh bmdlIGRhdGUgc3RyaW5nICovCi0KLS8qCi0gIENhbGwgd2l0aDoKLSAgICBBIGRhdGUgc3RyaW5n IGluIHN0YW5kYXJkIGZvcm1hdDogeXl5eW1tZGQgaGg6bW06c3MgKHRpbWUgb3B0aW9uYWwpLgot ICAgIE9wdGlvbnM6Ci0gICAgICAxOiBSZWZvcm1hdCBkYXRlIHRvIHl5eXktbW1tLWRkIChtbW0g PSBFbmdsaXNoIG1vbnRoIGFiYnJldmlhdGlvbikuCi0gICAgICAyOiBSZWZvcm1hdCBkYXRlIHRv IGRkLW1tbS15eXl5IChtbW0gPSBFbmdsaXNoIG1vbnRoIGFiYnJldmlhdGlvbikuCi0gICAgICAz OiBSZWZvcm1hdCBhcyBudW1lcmljIHl5eXltbWRkaGhtbXNzLgotICAgICAgNDogUmVmb3JtYXQg aW4gYXNjdGltZSgpIGZvcm1hdCBTYXQgTm92IDI2IDExOjEwOjM0IDIwMDUKLSAgICBSZXR1cm5z OgotICAgICAgUG9pbnRlciB0byByZXN1bHQgaWYgYXJncyB2YWxpZCwgb3RoZXJ3aXNlIG9yaWdp bmFsIGFyZyBwb2ludGVyLgotKi8KLWNoYXIgKgotc2h1ZmZsZWRhdGUocCxvcHQpIGNoYXIgKiBw OyBpbnQgb3B0OyB7Ci0gICAgZXh0ZXJuIGNoYXIgKiB3a2RheXNbXTsKLSAgICBpbnQgbGVuOwot ICAgIGNoYXIgaWJ1ZlszMl07Ci0gICAgc3RhdGljIGNoYXIgb2J1Zls0OF07Ci0gICAgY2hhciBj OwotICAgIGludCB5eSwgZGQsIG1tOwotCi0gICAgaWYgKCFwKSBwID0gIiI7Ci0gICAgaWYgKCEq cCkgcCA9IGNrZGF0ZSgpOwotICAgIGlmIChvcHQgPCAxIHx8IG9wdCA+IDQpCi0gICAgICByZXR1 cm4ocCk7Ci0gICAgbGVuID0gc3RybGVuKHApOwotICAgIGlmIChsZW4gPCA4IHx8IGxlbiA+IDMx KSByZXR1cm4ocCk7Ci0gICAgaWYgKG9wdCA9PSA0KSB7CQkJLyogQXNjdGltZSBmb3JtYXQgKDI2 IE5vdiAyMDA1KSAqLwotCWNoYXIgYywgKiBzOwotCWxvbmcgejsgaW50IGs7Ci0JY2tzdHJuY3B5 KGlidWYscCwzMSk7Ci0JayA9IGxlbjsKLQl3aGlsZSAoayA+PSAwICYmIGlidWZba10gPT0gQ1Ig fHwgaWJ1ZltrXSA9PSBMRikKLQkgIGlidWZbay0tXSA9IE5VTDsKLQl3aGlsZSAoayA+PSAwICYm IGlidWZba10gPT0gU1AgfHwgaWJ1ZltrXSA9PSBIVCkKLQkgIGlidWZbay0tXSA9IE5VTDsKLQlp ZiAoayA8IDkpIGNrc3RybmNweSgmaWJ1Zls4XSwiIDAwOjAwOjAwIiw5KTsKLQlwID0gaWJ1ZjsK LSAgICAgICAgeiA9IG1qZChwKTsgICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IHRvIG1v ZGlmaWVkIEp1bGlhbiBkYXRlICovCi0gICAgICAgIHogPSB6ICUgN0w7Ci0gICAgICAgIGlmICh6 IDwgMCkgewotICAgICAgICAgICAgeiA9IDAgLSB6OwotICAgICAgICAgICAgayA9IDYgLSAoKGlu dCl6ICsgMykgJSA3OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgayA9ICgoaW50KXog KyAzKSAlIDc7CS8qIERheSBvZiB3ZWVrICovCi0gICAgICAgIH0KLQlzID0gd2tkYXlzW2tdOwot ICAgICAgICBvYnVmWzBdID0gc1swXTsJCQkvKiBEYXkgb2Ygd2VlayAqLwotICAgICAgICBvYnVm WzFdID0gc1sxXTsKLSAgICAgICAgb2J1ZlsyXSA9IHNbMl07Ci0gICAgICAgIG9idWZbM10gPSBT UDsJCQkvKiBTcGFjZSAqLwotCWMgPSBwWzZdOwotICAgICAgICBwWzZdID0gTlVMOwotCW1tID0g YXRvaSgmaWJ1Zls0XSk7CQkvKiBNb250aCAqLwotCXMgPSBtb25hbWVbbW0tMV07CQkvKiBOYW1l IG9mIG1vbnRoICovCi0JcFs2XSA9IGM7Ci0KLSAgICAgICAgb2J1Zls0XSA9IHNbMF07CQkJLyog TW9udGggKi8KLSAgICAgICAgb2J1Zls1XSA9IHNbMV07Ci0gICAgICAgIG9idWZbNl0gPSBzWzJd OwotICAgICAgICBvYnVmWzddID0gU1A7CQkJLyogU3BhY2UgKi8KLQlpZiAocFs2XSA9PSAnMCcp CQkvKiBEYXRlIG9mIG1vbnRoICovCi0JICBvYnVmWzhdID0gU1A7Ci0JZWxzZQotCSAgb2J1Zls4 XSA9IHBbNl07Ci0gICAgICAgIG9idWZbOV0gPSBwWzddOwotCWNrc3RybmNweSgmb2J1ZlsxMF0s JnBbOF0sMTApOwkvKiBUaW1lICovCi0gICAgICAgIG9idWZbMTldID0gU1A7CQkJLyogU3BhY2Ug Ki8KLQlvYnVmWzIwXSA9IHBbMF07CQkvKiBZZWFyICovCi0Jb2J1ZlsyMV0gPSBwWzFdOwotCW9i dWZbMjJdID0gcFsyXTsKLQlvYnVmWzIzXSA9IHBbM107Ci0Jb2J1ZlsyNF0gPSBOVUw7Ci0JcmV0 dXJuKChjaGFyICopb2J1Zik7Ci0gICAgfQotICAgIGlmIChvcHQgPT0gMykgewotCWNrc3RybmNw eShvYnVmLHAsNDgpOwotCS8qIHl5eXltbWRkIGhoOm1tOnNzICovCi0JLyogMDEyMzQ1Njc4OTAx MjM0NTYgKi8KLQkvKiB5eXl5bW1kZGhobW1zcyAgICAqLwotCW9idWZbOF0gPSBvYnVmWzldOwot CW9idWZbOV0gPSBvYnVmWzEwXTsKLQlvYnVmWzEwXSA9IG9idWZbMTJdOwotCW9idWZbMTFdID0g b2J1ZlsxM107Ci0Jb2J1ZlsxMl0gPSBvYnVmWzE1XTsKLQlvYnVmWzEzXSA9IG9idWZbMTZdOwot CW9idWZbMTRdID0gTlVMOwotCXJldHVybigoY2hhciAqKW9idWYpOwotICAgIH0KLSAgICBja3N0 cm5jcHkoaWJ1ZixwLDMyKTsKLSAgICBjID0gaWJ1Zls0XTsJCQkvKiBXYXJuaW5nOiBub3QgWTEw SyBjb21wbGlhbnQgKi8KLSAgICBpYnVmWzRdID0gTlVMOwotICAgIGlmICghcmRpZ2l0cyhpYnVm KSkKLSAgICAgIHJldHVybihwKTsKLSAgICB5eSA9IGF0b2koaWJ1Zik7Ci0gICAgaWYgKHl5IDwg MSB8fCB5eSA+IDk5OTkpCi0gICAgICByZXR1cm4ocCk7Ci0gICAgaWJ1Zls0XSA9IGM7Ci0gICAg YyA9IGlidWZbNl07Ci0gICAgaWJ1Zls2XSA9IE5VTDsKLSAgICBpZiAoIXJkaWdpdHMoJmlidWZb NF0pKQotICAgICAgcmV0dXJuKHApOwotICAgIG1tID0gYXRvaSgmaWJ1Zls0XSk7Ci0gICAgaWYg KG1tIDwgMSB8fCBtbSA+IDEyKQotICAgICAgcmV0dXJuKHApOwotICAgIGlidWZbNl0gPSBjOwot ICAgIGMgPSBpYnVmWzhdOwotICAgIGlidWZbOF0gPSBOVUw7Ci0gICAgaWYgKCFyZGlnaXRzKCZp YnVmWzZdKSkKLSAgICAgIHJldHVybihwKTsKLSAgICBkZCA9IGF0b2koJmlidWZbNl0pOwotICAg IGlidWZbOF0gPSBjOwotICAgIGlmIChkZCA8IDEgfHwgbW0gPiAzMSkKLSAgICAgIHJldHVybihw KTsKLSAgICAvKiBJR05PUkUgV0FSTklOR1MgQUJPVVQgbW9uYW1lW10gUkVGUyBPVVQgT0YgUkFO R0UgLSBpdCdzIHByZWNoZWNrZWQuICovCi0gICAgc3dpdGNoIChvcHQpIHsKLSAgICAgIGNhc2Ug MToKLQlzcHJpbnRmKG9idWYsIiUwNGQtJXMtJTAyZCVzIix5eSxtb25hbWVbbW0tMV0sZGQsJmli dWZbOF0pOwotCWJyZWFrOwotICAgICAgY2FzZSAyOgotCXNwcmludGYob2J1ZiwiJTAyZC0lcy0l MDRkJXMiLGRkLG1vbmFtZVttbS0xXSx5eSwmaWJ1Zls4XSk7Ci0gICAgfQotICAgIHJldHVybigo Y2hhciAqKW9idWYpOwotfQotI2VuZGlmCS8qIE5PU1BMICovCi0KLS8qICBDIEsgQyBWIFQgRCBB IFQgRSAgLS0gIExpa2UgY21jdnRkYXRlKCksIGJ1dCByZXR1cm5zIHN0cmluZy4gICovCi0vKiAg Rm9yIHVzZSBieSBkYXRlLXJlbGF0ZWQgZnVuY3Rpb25zICovCi0vKiAgU2VlIGNhbGxpbmcgY29u dmVudGlvbnMgZm9yIGNtY3Z0ZGF0ZSgpIGFib3ZlLiAqLwotCi1jaGFyICoKLWNrY3Z0ZGF0ZShw LHQpIGNoYXIgKiBwOyBpbnQgdDsgewotICAgIGNoYXIgKiBzOwotICAgIGlmICghKHMgPSBjbWN2 dGRhdGUocCx0KSkpCi0gICAgICByZXR1cm4oIjxCQURfREFURV9PUl9USU1FPiIpOwkvKiBcZmJs YWgoKSBlcnJvciBtZXNzYWdlICovCi0gICAgZWxzZQotICAgICAgcmV0dXJuKHMpOwotfQotCi0K LS8qICBDIE0gRCBBIFQgRSAgLS0gIFBhcnNlIGEgZGF0ZSBhbmQvb3IgdGltZSAgKi8KLQotLyoK LSAgQWNjZXB0cyBkYXRlIGluIHZhcmlvdXMgZm9ybWF0cy4gIElmIHRoZSBkYXRlIGlzIHJlY29n bml6ZWQsCi0gIHRoaXMgcm91dGluZSByZXR1cm5zIDAgb3IgZ3JlYXRlciB3aXRoIHRoZSByZXN1 bHQgc3RyaW5nIHBvaW50ZXIKLSAgcG9pbnRpbmcgdG8gYSBidWZmZXIgY29udGFpbmluZyB0aGUg ZGF0ZSBhcyAieXl5eW1tZGQgaGg6bW06c3MiLgotKi8KLWludAotY21kYXRlKHhobHAseGRlZix4 cCxxdWlldCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsgaW50IHF1aWV0OyB4eF9zdHJwIGY7 IHsKLSAgICBpbnQgeCwgcmM7Ci0gICAgY2hhciAqbywgKnMsICp6cSwgKmRwOwotCi0gICAgY21m bGRmbGdzID0gMDsKLSAgICBpZiAoIXhobHApIHhobHAgPSAiIjsKLSAgICBpZiAoIXhkZWYpIHhk ZWYgPSAiIjsKLSAgICBpZiAoISp4aGxwKSB4aGxwID0gIkRhdGUgYW5kL29yIHRpbWUiOwotICAg ICp4cCA9ICIiOwotCi0gICAgcmMgPSBjbWZsZCh4aGxwLHhkZWYsJnMsKHh4X3N0cnApMCk7Ci0g ICAgZGVidWcoRjEwMSwiY21kYXRlIGNtZmxkIHJjIiwiIixyYyk7Ci0gICAgaWYgKHJjIDwgMCkK LSAgICAgIHJldHVybihyYyk7Ci0gICAgZGVidWcoRjExMCwiY21kYXRlIDEiLHMsMCk7Ci0gICAg byA9IHM7CQkJCS8qIFJlbWVtYmVyIHdoYXQgdGhleSB0eXBlZC4gKi8KLSAgICBzID0gYnJzdHJp cChzKTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWRhdGUgMiIscywwKTsKLQotICAgIHggPSAwOwotICAg IGlmIChmKSB7CQkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLwotCWNo YXIgKiBwcDsKLQl6cSA9IGF0eGJ1ZjsJCQkvKiBkbyB0aGUgY29udmVyc2lvbi4gKi8KLQlwcCA9 IGF0eGJ1ZjsKLQlhdHhuID0gQ01EQkw7Ci0JaWYgKCh4ID0gKCpmKShzLCZ6cSwmYXR4bikpIDwg MCkgcmV0dXJuKC0yKTsKLQlpZiAoISpwcCkKLQkgIHBwID0geGRlZjsKLQlpZiAoc2V0YXRtKHBw LDApIDwgMCkgewotCSAgICBpZiAoIXF1aWV0KSBwcmludGYoIj9FdmFsdWF0ZWQgZGF0ZSB0b28g bG9uZ1xuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCXMgPSBhdHhidWY7Ci0gICAgfQotICAg IGRwID0gY21jdnRkYXRlKHMsMSk7Ci0gICAgaWYgKCFkcCkgewotCWlmICghcXVpZXQpIHByaW50 ZigiPyVzXG4iLGNtZGF0ZW1zZyk7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgKnhwID0gZHA7 Ci0gICAgcmV0dXJuKDApOwotfQotCi0jaWZkZWYgQ0tfUkVDQUxMCQkJLyogQ29tbWFuZC1yZWNh bGwgZnVuY3Rpb25zICovCi0KLS8qICBDIE0gUiBJIE4gSSAgLS0gIEluaXRpYWxpemUgb3IgY2hh bmdlIHNpemUgb2YgY29tbWFuZCByZWNhbGwgYnVmZmVyICovCi0KLWludAotY21yaW5pKG4pIGlu dCBuOyB7Ci0gICAgaW50IGk7Ci0gICAgaWYgKHJlY2FsbCAmJiBpbl9yZWNhbGwpIHsJCS8qIEZy ZWUgb2xkIHN0b3JhZ2UsIGlmIGFueSAqLwotCWZvciAoaSA9IDA7IGkgPCBjbV9yZWNhbGw7IGkr KykgewotCSAgICBpZiAocmVjYWxsW2ldKSB7Ci0JCWZyZWUocmVjYWxsW2ldKTsKLQkJcmVjYWxs W2ldID0gTlVMTDsKLQkgICAgfQotCX0KLQlmcmVlKHJlY2FsbCk7Ci0JcmVjYWxsID0gTlVMTDsK LSAgICB9Ci0gICAgY21fcmVjYWxsID0gbjsJCQkvKiBTZXQgbmV3IHNpemUgKi8KLSAgICBybGFz dCA9IGN1cnJlbnQgPSAtMTsJCS8qIEluaXRpYWxpemUgcG9pbnRlcnMgKi8KLSAgICBpZiAobiA+ IDApIHsKLQlyZWNhbGwgPSAoY2hhciAqKiltYWxsb2MoKGNtX3JlY2FsbCArIDEpICogc2l6ZW9m KGNoYXIgKikpOwotCWlmICghcmVjYWxsKQotCSAgcmV0dXJuKDEpOwotCWZvciAoaSA9IDA7IGkg PCBjbV9yZWNhbGw7IGkrKykgewotCSAgICByZWNhbGxbaV0gPSBOVUxMOwotCX0KLQlpbl9yZWNh bGwgPSAxOwkJCS8qIFJlY2FsbCBidWZmZXJzIGluaXQnZCAqLwotICAgIH0KLSAgICByZXR1cm4o MCk7Ci19Ci0KLS8qICBDIE0gQSBEIEQgTiBFIFggVCAgLS0gIEZvcmNlIGFkZGl0aW9uIG9mIG5l eHQgY29tbWFuZCAqLwotCi1WT0lECi1jbWFkZG5leHQoKSB7Ci0gICAgaWYgKG9uX3JlY2FsbCAm JiBpbl9yZWNhbGwpIHsJLyogRXZlbiBpZiBpdCBkb2Vzbid0IGNvbWUgKi8KLQlmb3JjZV9hZGQg PSAxOwkJCS8qIGZyb20gdGhlIGtleWJvYXJkICovCi0JbmV3Y21kID0gMTsKLQlub19yZWNhbGwg PSAwOwotICAgIH0KLX0KLQotLyogIEMgTSBHIEUgVCBDIE0gRCAgLS0gIEZpbmQgbW9zdCByZWNl bnQgbWF0Y2hpbmcgY29tbWFuZCAgKi8KLQotY2hhciAqCi1jbWdldGNtZChzKSBjaGFyICogczsg ewotICAgIGludCBpOwotICAgIGZvciAoaSA9IGN1cnJlbnQ7IGkgPj0gMDsgaS0tKSB7CS8qIFNl YXJjaCBiYWNrd2FyZCB0aHJ1IGhpc3RvcnkgbGlzdCAqLwotCWlmICghcmVjYWxsW2ldKSBjb250 aW51ZTsJLyogVGhpcyBvbmUncyBudWxsLCBza2lwIGl0ICovCi0JaWYgKGNrbWF0Y2gocyxyZWNh bGxbaV0sMCwxKSkJLyogTWF0Y2g/ICovCi0JICByZXR1cm4ocmVjYWxsW2ldKTsJCS8qIFllcywg cmV0dXJuIHBvaW50ZXIgKi8KLSAgICB9Ci0gICAgcmV0dXJuKE5VTEwpOwkJCS8qIE5vIG1hdGNo LCByZXR1cm4gTlVMTCBwb2ludGVyICovCi19Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0KLS8q ICBBIEQgRCBDIE0gRCAgLS0gIEFkZCBhIGNvbW1hbmQgdG8gdGhlIHJlY2FsbCBidWZmZXIgICov Ci0KLVZPSUQKLWFkZGNtZChzKSBjaGFyICogczsgewotICAgIGludCBsZW4gPSAwLCBucSA9IDA7 Ci0gICAgY2hhciAqIHA7Ci0jaWZkZWYgQ0tMRUFSTgotICAgIGV4dGVybiBpbnQgbGVhcm5pbmc7 Ci0jZW5kaWYgLyogQ0tMRUFSTiAqLwotCi0gICAgaWYgKHhjbWRzcmMpCQkJLyogT25seSBmb3Ig aW50ZXJhY3RpdmUgY29tbWFuZHMgKi8KLSAgICAgIHJldHVybjsKLQotICAgIGlmICghbmV3Y21k KQkJCS8qIFRoZSBjb21tYW5kIGhhcyBiZWVuIGhlcmUgYWxyZWFkeSAqLwotICAgICAgcmV0dXJu OwkJCQkvKiBzbyBpZ25vcmUgaXQuICovCi0gICAgbmV3Y21kID0gMDsJCQkJLyogSXQncyBuZXcg YnV0IGRvIHRoaXMgb25seSBvbmNlLiAqLwotCi0gICAgaWYgKCFzKSBzID0gY21kYnVmOwotICAg IGlmIChzWzBdKQotICAgICAgbGVuID0gc3RybGVuKHMpOwotCi0gICAgaWYgKGxlbiA8IDEpCQkJ LyogRG9uJ3Qgc2F2ZSBlbXB0eSBjb21tYW5kcyAqLwotICAgICAgcmV0dXJuOwotCi0gICAgcCA9 IHM7Ci0gICAgd2hpbGUgKCpwKSB7IGlmICgqcCsrID09ICc/JykgbnErKzsgfSAvKiBDb3VudCBx dWVzdGlvbiBtYXJrcyAqLwotCi0jaWZkZWYgQ0tMRUFSTgotICAgIGlmIChsZWFybmluZykJCQkv KiBJZiBhIGxlYXJuZWQgc2NyaXB0IGlzIGFjdGl2ZSAqLwotICAgICAgbGVhcm5jbWQocyk7CQkJ LyogcmVjb3JkIHRoaXMgY29tbWFuZC4gKi8KLSNlbmRpZiAvKiBDS0xFQVJOICovCi0KLSAgICBk ZWJ1ZyhGMDEwLCJDTUQoUCkiLHMsMCk7CQkvKiBNYXliZSByZWNvcmQgaXQgaW4gdGhlIGRlYnVn IGxvZyAqLwotCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4bG9nZ2luZykgewkJCS8qIE1h eWJlIHJlY29yZCBpdCBpbiBzeXNsb2cgKi8KLQlpZiAoY2t4c3lzbG9nID49IFNZU0xHX0NYIHx8 IGNreHN5c2xvZyA+PSBTWVNMR19DTSkKLQkgIGNrc3lzbG9nKFNZU0xHX0NYLCAxLCAiY29tbWFu ZCIsIHMsIE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCi0jaWZkZWYgQ0tf UkVDQUxMCi0gICAgbGFzdF9yZWNhbGwgPSAwOwotCi0gICAgaWYgKG9uX3JlY2FsbCAmJgkJCS8q IENvbW1hbmQgcmVjYWxsIGlzIG9uPyAqLwotCWNtX3JlY2FsbCA+IDAgJiYJCS8qIFJlY2FsbCBi dWZmZXIgc2l6ZSBpcyA+IDA/ICovCi0JIW5vX3JlY2FsbCkgewkJCS8qIE5vdCBub3Qgc2F2aW5n IHRoaXMgY29tbWFuZD8gKi8KLQotCWlmICghZm9yY2VfYWRkICYmIHJsYXN0ID4gLTEpCS8qIElm IHByZXZpb3VzIGNvbW1hbmQgd2FzIGlkZW50aWNhbCAqLwotCSAgaWYgKCFzdHJjbXAocyxyZWNh bGxbcmxhc3RdKSkgLyogZG9uJ3QgYWRkIGFub3RoZXIgY29weSAqLwotCSAgICByZXR1cm47Ci0K LQlmb3JjZV9hZGQgPSAwOwkJCS8qIFJlc2V0IG5vdyBpbiBjYXNlIGl0IHdhcyBzZXQgKi8KLQot ICAgICAgICBpZiAocmxhc3QgPj0gY21fcmVjYWxsIC0gMSkgewkvKiBSZWNhbGwgYnVmZmVyIGZ1 bGw/ICovCi0JICAgIGludCBpOwotCSAgICBpZiAocmVjYWxsWzBdKSB7CQkvKiBEaXNjYXJkIG9s ZGVzdCBjb21tYW5kICovCi0JCWZyZWUocmVjYWxsWzBdKTsKLQkJcmVjYWxsWzBdID0gTlVMTDsK LQkgICAgfQotCSAgICBmb3IgKGkgPSAwOyBpIDwgcmxhc3Q7IGkrKykgeyAgLyogVGhlIHJlc3Qg Ki8KLQkJcmVjYWxsW2ldID0gcmVjYWxsW2krMV07ICAgLyogbW92ZSBiYWNrICovCi0JICAgIH0K LQkgICAgcmxhc3QtLTsJCQkvKiBOb3cgd2UgaGF2ZSBvbmUgbGVzcyAqLwotCX0KLSAgICAgICAg cmxhc3QrKzsJCQkvKiBJbmRleCBvZiBsYXN0IGNvbW1hbmQgaW4gYnVmZmVyICovCi0JY3VycmVu dCA9IHJsYXN0OwkJLyogQWxzbyBub3cgdGhlIGN1cnJlbnQgY29tbWFuZCAqLwotCWlmIChjdXJy ZW50ID49IGNtX3JlY2FsbCkgewkvKiBTaG91bGRuJ3QgaGFwcGVuICovCi0JICAgIHByaW50Zigi P0NvbW1hbmQgaGlzdG9yeSBlcnJvclxuIik7CS8qIGJ1dCBpZiBpdCBkb2VzICovCi0JICAgIG9u X3JlY2FsbCA9IDA7CQkgICAgICAgIC8qIHR1cm4gb2ZmIGNvbW1hbmQgc2F2aW5nICovCi0jaWZk ZWYgQ09NTUVOVAotCX0gZWxzZSBpZiAobnEgPiAwKSB7CQkvKiBIYXZlIGF0IGxlYXN0IG9uZSBx dWVzdGlvbiBtYXJrICovCi0JICAgIHJlY2FsbFtjdXJyZW50XSA9IG1hbGxvYyhsZW4rbnErMSk7 Ci0JICAgIGlmIChyZWNhbGxbY3VycmVudF0pIHsKLQkJcCA9IHJlY2FsbFtjdXJyZW50XTsKLQkJ d2hpbGUgKCpzKSB7Ci0JCSAgICBpZiAoKnMgPT0gJz8nKQotCQkgICAgICAqcCsrID0gJ1xcJzsK LQkJICAgICpwKysgPSAqcysrOwotCQl9Ci0JCSpwID0gTlVMOwotCSAgICB9Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotCX0gZWxzZSB7CQkJLyogTm9ybWFsIGNhc2UsIGp1c3QgY29weSAqLwotCSAg ICByZWNhbGxbY3VycmVudF0gPSBtYWxsb2MobGVuKzEpOwotCSAgICBpZiAocmVjYWxsW2N1cnJl bnRdKQotCSAgICAgIGNrc3RybmNweShyZWNhbGxbY3VycmVudF0scyxsZW4rMSk7Ci0JfQotICAg IH0KLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLX0KLQotCi0jaWZkZWYgQ0tfUkVDQUxMCi0KLS8q IEMgTSBIIEkgUyBUIE8gUiBZICovCi0KLVZPSUQKLWNtaGlzdG9yeSgpIHsKLSAgICBpbnQgaSwg bGMgPSAxOwotICAgIGZvciAoaSA9IDA7IGkgPD0gY3VycmVudDsgaSsrKSB7Ci0JcHJpbnRmKCIg JXNcbiIsIHJlY2FsbFtpXSk7Ci0JaWYgKCsrbGMgPiAoY21kX3Jvd3MgLSAyKSkgewkvKiBTY3Jl ZW4gZnVsbD8gKi8KLQkgICAgaWYgKCFhc2ttb3JlKCkpCQkvKiBEbyBtb3JlLXByb21wdGluZy4u LiAqLwotCSAgICAgIGJyZWFrOwotCSAgICBlbHNlCi0JICAgICAgbGMgPSAwOwotCX0KLSAgICB9 Ci19Ci0KLWludAotc2F2aGlzdG9yeShzLGRpc3ApIGNoYXIgKnM7IGludCBkaXNwOyB7Ci0gICAg RklMRSAqIGZwOwotICAgIGludCBpOwotCi0gICAgZnAgPSBmb3BlbihzLCBkaXNwID8gImEiIDog InciKTsKLSAgICBpZiAoIWZwKSB7Ci0JcGVycm9yKHMpOwotCXJldHVybigwKTsKLSAgICB9Ci0g ICAgZm9yIChpID0gMDsgaSA8PSBjdXJyZW50OyBpKyspCi0gICAgICBmcHJpbnRmKGZwLCIlc1xu IiwgcmVjYWxsW2ldKTsKLSAgICBmY2xvc2UoZnApOwotICAgIHJldHVybigxKTsKLX0KLSNlbmRp ZiAvKiBDS19SRUNBTEwgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIGFwcGFyZW50bHkgbm90IHVz ZWQgKi8KLWludAotY21nZXRsYyhzKSBjaGFyICogczsgewkJCS8qIEdldCBsZWFkaW5nIGNoYXIg Ki8KLSAgICBjaGFyIGM7Ci0gICAgd2hpbGUgKChjID0gKnMrKykgPD0gU1ApIHsKLQlpZiAoIWMp Ci0JICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuKGMpOwotfQotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLQotCi0vKiAgQyBNIEMgRiBNICAtLSAgUGFyc2UgY29tbWFuZCBjb25maXJtYXRpb24gKGVu ZCBvZiBsaW5lKSAgKi8KLQotLyoKLSBSZXR1cm5zCi0gICAtMjogVXNlciB0eXBlZCBhbnl0aGlu ZyBidXQgd2hpdGVzcGFjZSBvciBuZXdsaW5lCi0gICAtMTogUmVwYXJzZSBuZWVkZWQKLSAgICAw OiBDb25maXJtYXRpb24gd2FzIHJlY2VpdmVkCi0qLwotaW50Ci1jbWNmbSgpIHsKLSAgICBpbnQg eCwgeGM7Ci0gICAgZGVidWcoRjEwMSwiY21jZm06IGNtZmxncyIsIiIsY21mbGdzKTsKLSAgICBk ZWJ1ZyhGMTEwLCJjbWNmbTogYXRtYnVmIixhdG1idWYsMCk7Ci0gICAgaW53b3JkID0geGMgPSBj YyA9IDA7Ci0KLSAgICBzZXRhdG0oIiIsMCk7CQkJLyogKFByb2JhYmx5IHVubmVjZXNzYXJ5KSAq LwotCi0gICAgd2hpbGUgKGNtZmxncyAhPSAxKSB7Ci0gICAgICAgIHggPSBndHdvcmQoMCk7Ci0g ICAgICAgIHhjICs9IGNjOwotCi0gICAgICAgIHN3aXRjaCAoeCkgewotCSAgY2FzZSAtOToKLQkg ICAgcHJpbnRmKCJDb21tYW5kIG9yIGZpZWxkIHRvbyBsb25nXG4iKTsKLQkgIGNhc2UgLTQ6CQkJ LyogRU9GICovCi0JICBjYXNlIC0yOgotCSAgY2FzZSAtMToKLQkgICAgcmV0dXJuKHgpOwotCSAg Y2FzZSAxOgkJCS8qIEVuZCBvZiBsaW5lICovCi0JICAgIGlmICh4YyA+IDApIHsKLQkJaWYgKHhj bWZkYikgewotCQkgICAgcmV0dXJuKC02KTsKLQkJfSBlbHNlIHsKLQkJICAgIHByaW50ZigiP05v dCBjb25maXJtZWQgLSAlc1xuIixhdG1idWYpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCSAg ICB9IGVsc2UKLQkgICAgICBicmVhazsJCQkvKiBGaW5pc2ggdXAgYmVsb3cgKi8KLQkgIGNhc2Ug MjoJCQkvKiBFU0MgKi8KLQkgICAgaWYgKHhjID09IDApIHsKLQkJYmxlZXAoQlBfV0FSTik7Ci0J CWNvbnRpbnVlOwkJLyogb3IgZmFsbCB0aHJ1LiAqLwotCSAgICB9Ci0JICBjYXNlIDA6CQkJLyog U3BhY2UgKi8KLQkgICAgaWYgKHhjID09IDApCQkvKiBJZiBubyBjaGFycyB0eXBlZCwgY29udGlu dWUsICovCi0JICAgICAgY29udGludWU7CQkJLyogZWxzZSBmYWxsIHRocnUuICovCi0JICAgIC8q IGVsc2UgZmFsbCB0aHJ1Li4uICovCi0KLQkgIGNhc2UgMzoJCQkvKiBRdWVzdGlvbiBtYXJrICov Ci0JICAgIGlmICh4YyA+IDApIHsKLQkJaWYgKHhjbWZkYikgewotCQkgICAgcmV0dXJuKC02KTsK LQkJfSBlbHNlIHsKLQkJICAgIHByaW50ZigiP05vdCBjb25maXJtZWQgLSAlc1xuIixhdG1idWYp OwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCSAgICB9Ci0JICAgIHByaW50ZigKLQkgICAgICAg IlxuIFByZXNzIHRoZSBSZXR1cm4gb3IgRW50ZXIga2V5IHRvIGNvbmZpcm0gdGhlIGNvbW1hbmRc biIpOwotCSAgICBwcmludGYoIiVzJXMiLGNtcHJvbSxjbWRidWYpOwotCSAgICBmZmx1c2goc3Rk b3V0KTsKLQkgICAgY29udGludWU7Ci0JfQotICAgIH0KLSAgICBkZWJvayA9IDE7Ci0gICAgcmV0 dXJuKDApOwotfQotCi0KLS8qIFRoZSBmb2xsb3dpbmcgbWF0ZXJpYWwgc3VwcG9ydHMgY2hhaW5l ZCBwYXJzaW5nIGZ1bmN0aW9ucy4gKi8KLS8qIFNlZSBja3VjbWQuaCBmb3IgRkRCIGFuZCBPRkRC IGRlZmluaXRpb25zLiAqLwotCi1zdHJ1Y3QgT0ZEQiBjbXJlc3VsdCA9IHsJCS8qIFVuaXZlcnNh bCBjbWZkYiByZXN1bHQgaG9sZGVyICovCi0gICAgTlVMTCwJCQkJLyogQWRkcmVzcyBvZiBzdWNj ZWVkaW5nIEZEQiBzdHJ1Y3QgKi8KLSAgICAwLAkJCQkJLyogRnVuY3Rpb24gY29kZSAqLwotICAg IE5VTEwsCQkJCS8qIFN0cmluZyByZXN1bHQgKi8KLSAgICAwLAkJCQkJLyogSW50ZWdlciByZXN1 bHQgKi8KLSAgICAoQ0tfT0ZGX1QpMAkJCQkvKiBXaWRlIHJlc3VsdCAqLwotfTsKLQotVk9JRAot Y21mZGJpKHAsZmMsczEsczIsczMsbjEsbjIsZixrLG54dCkJLyogSW5pdGlhbGl6ZSBhbiBGREIg Ki8KLSAgICBzdHJ1Y3QgRkRCICogcDsKLSAgICBpbnQgZmM7Ci0gICAgY2hhciAqIHMxLCAqIHMy LCAqIHMzOwotICAgIGludCBuMSwgbjI7Ci0gICAgeHhfc3RycCBmOwotICAgIHN0cnVjdCBrZXl0 YWIgKiBrOwotICAgIHN0cnVjdCBGREIgKiBueHQ7IHsKLQotICAgIHAtPmZjb2RlID0gZmM7Ci0g ICAgcC0+aGxwbXNnID0gczE7Ci0gICAgcC0+ZGZsdCA9IHMyOwotICAgIHAtPnNkYXRhID0gczM7 Ci0gICAgcC0+bmRhdGExID0gbjE7Ci0gICAgcC0+bmRhdGEyID0gbjI7Ci0gICAgcC0+c3BmID0g ZjsKLSAgICBwLT5rd2R0YmwgPSBrOwotICAgIHAtPm54dGZkYiA9IG54dDsKLX0KLQotLyogIEMg TSBGIEQgQiAgLS0gIFBhcnNlIGEgZmllbGQgd2l0aCBzZXZlcmFsIHBvc3NpYmxlIGZ1bmN0aW9u cyAgKi8KLQotaW50Ci1jbWZkYihmZGJpbikgc3RydWN0IEZEQiAqIGZkYmluOyB7Ci0jaWZuZGVm IE5PU1BMCi0gICAgZXh0ZXJuIGludCB4X2lmbnVtOyAgICAgICAgICAgICAgICAgLyogSUYgTlVN RVJJQyAtIGRpc2FibGVzIHdhcm5pbmdzICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICBzdHJ1 Y3QgRkRCICogaW4gPSBmZGJpbjsKLSAgICBzdHJ1Y3QgT0ZEQiAqIG91dCA9ICZjbXJlc3VsdDsK LSAgICBpbnQgeCA9IDAsIG4sIHI7Ci0gICAgQ0tfT0ZGX1QgdyA9IChDS19PRkZfVCkwOwotICAg IGNoYXIgKnMsICp4cCwgKm0gPSBOVUxMOwotICAgIGludCBlcnJiaXRzID0gMDsKLQotICAgIHhw ID0gYnA7Ci0KLSAgICBvdXQtPmZjb2RlID0gLTE7CQkJLyogSW5pdGlhbGl6ZSBvdXRwdXQgc3Ry dWN0ICovCi0gICAgb3V0LT5mZGJhZGRyID0gTlVMTDsKLSAgICBvdXQtPnNyZXN1bHQgPSBOVUxM OwotICAgIG91dC0+bnJlc3VsdCA9IDA7Ci0vKgotICBDdXJyZW50bHkgd2UgbWFrZSBvbmUgdHJp cCB0aHJvdWdoIHRoZSBGREJzLiAgU28gaWYgdGhlIHVzZXIgdHlwZXMgRXNjIG9yCi0gIFRhYiBh dCB0aGUgYmVnaW5uaW5nIG9mIGEgZmllbGQsIG9ubHkgdGhlIGZpcnN0IEZEQiBpcyBleGFtaW5l ZCBmb3IgYQotICBkZWZhdWx0LiAgSWYgdGhlIHVzZXIgdHlwZXMgPywgaGVscCBpcyBnaXZlbiBv bmx5IGZvciBvbmUgRkRCLiAgV2Ugc2hvdWxkCi0gIHNlYXJjaCB0aHJvdWdoIHRoZSBGREJzIGZv ciBhbGwgbWF0Y2hpbmcgcG9zc2liaWxpdGllcyAtLSBhbmQgaW4gcGFydGljdWxhcgotICBkaXNw bGF5IHRoZSBwZXJ0aW5lbnQgY29udGV4dC1zZW5zaXRpdmUgaGVscCBmb3IgZWFjaCBmdW5jdGlv biwgcmF0aGVyIHRoYW4KLSAgdGhlIG9ubHkgdGhlIGZpcnN0IG9uZSB0aGF0IHdvcmtzLCBhbmQg dGhlbiByZXdpbmQgdGhlIEZEQiBwb2ludGVyIHNvIHdlCi0gIGFyZSBub3QgbG9ja2VkIG91dCBv ZiB0aGUgZWFybGllciBvbmVzLgotKi8KLSAgICBjbWZsZGZsZ3MgPSAwOwotICAgIHdoaWxlICgx KSB7CQkJCS8qIExvb3AgdGhyb3VnaCB0aGUgY2hhaW4gb2YgRkRCcyAqLwotCW5vbXNnID0gMTsK LQl4Y21mZGIgPSAxOwotCXMgPSBOVUxMOwotCW4gPSAwOwotCWRlYnVnKEYxMDEsImNtZmRiIGlu LT5mY29kZSIsIiIsaW4tPmZjb2RlKTsKLQlzd2l0Y2ggKGluLT5mY29kZSkgewkJLyogQ3VycmVu dCBwYXJzaW5nIGZ1bmN0aW9uIGNvZGUgKi8KLQkgIGNhc2UgX0NNTlVNOgotCSAgICByID0gaW4t Pm5kYXRhMTsKLQkgICAgaWYgKHIgIT0gMTAgJiYgciAhPSA4KSByID0gMTA7Ci0jaWZuZGVmIE5P U1BMCi0gICAgICAgICAgICB4X2lmbnVtID0gMTsgICAgICAgICAgICAgICAgLyogRGlzYWJsZXMg d2FybmluZyBtZXNzYWdlcyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0JICAgIHggPSBjbW51bShp bi0+aGxwbXNnLGluLT5kZmx0LHIsJm4saW4tPnNwZik7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAg ICAgICB4X2lmbnVtID0gMDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCSAgICBkZWJ1ZyhGMTAxLCJj bWZkYiBjbW51bSIsIiIseCk7Ci0JICAgIGlmICh4IDwgMCkgZXJyYml0cyB8PSAxOwotCSAgICBi cmVhazsKLQkgIGNhc2UgX0NNTlVXOgkJCS8qIFdpZGUgY21udW0gLSAyNCBEZWMgMjAwNSAqLwot CSAgICByID0gaW4tPm5kYXRhMTsKLQkgICAgaWYgKHIgIT0gMTAgJiYgciAhPSA4KSByID0gMTA7 Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICB4X2lmbnVtID0gMTsgICAgICAgICAgICAgICAg LyogRGlzYWJsZXMgd2FybmluZyBtZXNzYWdlcyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0JICAg IHggPSBjbW51bXcoaW4tPmhscG1zZyxpbi0+ZGZsdCxyLCZ3LGluLT5zcGYpOwotI2lmbmRlZiBO T1NQTAotICAgICAgICAgICAgeF9pZm51bSA9IDA7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQkgICAg ZGVidWcoRjEwMSwiY21mZGIgY21udW13IiwiIix3KTsKLQkgICAgaWYgKHggPCAwKSBlcnJiaXRz IHw9IDE7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBfQ01PRkk6Ci0JICAgIHggPSBjbW9maShpbi0+ aGxwbXNnLGluLT5kZmx0LCZzLGluLT5zcGYpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbW9m aSIsIiIseCk7Ci0JICAgIGlmICh4IDwgMCkgZXJyYml0cyB8PSAyOwotCSAgICBicmVhazsKLQkg IGNhc2UgX0NNSUZJOgotCSAgICB4ID0gY21pZmkyKGluLT5obHBtc2csCi0JCSAgICAgICBpbi0+ ZGZsdCwKLQkJICAgICAgICZzLAotCQkgICAgICAgJm4sCi0JCSAgICAgICBpbi0+bmRhdGExLAot CQkgICAgICAgaW4tPnNkYXRhLAotCQkgICAgICAgaW4tPnNwZiwKLQkJICAgICAgIGluLT5uZGF0 YTIKLQkJICAgICAgICk7Ci0JICAgIGRlYnVnKEYxMDEsImNtZmRiIGNtaWZpMiB4IiwiIix4KTsK LQkgICAgZGVidWcoRjEwMSwiY21mZGIgY21pZmkyIG4iLCIiLG4pOwotCSAgICBpZiAoeCA8IDAp IGVycmJpdHMgfD0gNDsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIF9DTUZMRDoKLQkgICAgY21mbGRm bGdzID0gaW4tPm5kYXRhMTsKLQkgICAgeCA9IGNtZmxkKGluLT5obHBtc2csaW4tPmRmbHQsJnMs aW4tPnNwZik7Ci0JICAgIGRlYnVnKEYxMDEsImNtZmRiIGNtZmxkIiwiIix4KTsKLQkgICAgaWYg KHggPCAwKSBlcnJiaXRzIHw9IDg7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBfQ01UWFQ6Ci0JICAg IHggPSBjbXR4dChpbi0+aGxwbXNnLGluLT5kZmx0LCZzLGluLT5zcGYpOwotCSAgICBkZWJ1ZyhG MTAxLCJjbWZkYiBjbXR4dCIsIiIseCk7Ci0JICAgIGlmICh4IDwgMCkgZXJyYml0cyB8PSAxNjsK LQkgICAgYnJlYWs7Ci0JICBjYXNlIF9DTUtFWToKLQkgICAgeCA9IGNta2V5Mihpbi0+a3dkdGJs LAotCQkgICAgICAgaW4tPm5kYXRhMSwKLQkJICAgICAgIGluLT5obHBtc2csaW4tPmRmbHQsaW4t PnNkYXRhLGluLT5zcGYsaW4tPm5kYXRhMik7Ci0JICAgIGRlYnVnKEYxMDEsImNtZmRiIGNta2V5 IiwiIix4KTsKLQkgICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9ICgoaW4tPm5kYXRhMiAmIDQpID8g MzIgOiA2NCk7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBfQ01DRk06Ci0JICAgIHggPSBjbWNmbSgp OwotCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbWNmbSIsIiIseCk7Ci0JICAgIGlmICh4IDwgMCkg ZXJyYml0cyB8PSAxMjg7Ci0JICAgIGJyZWFrOwotCSAgZGVmYXVsdDoKLQkgICAgZGVidWcoRjEw MSwiY21mZGIgLSB1bmV4cGVjdGVkIGZ1bmN0aW9uIGNvZGUiLCIiLGluLT5mY29kZSk7Ci0JICAg IHByaW50ZigiP2NtZmRiIC0gdW5leHBlY3RlZCBmdW5jdGlvbiBjb2RlOiAlZFxuIixpbi0+ZmNv ZGUpOwotCX0KLQlkZWJ1ZyhGMTAxLCJjbWZkYiB4IiwiIix4KTsKLQlkZWJ1ZyhGMTAxLCJjbWZk YiBjbWZsZ3MiLCIiLGNtZmxncyk7Ci0JZGVidWcoRjEwMSwiY21mZGIgY3JmbGFnIiwiIixjcmZs YWcpOwotCWRlYnVnKEYxMDEsImNtZmRiIHFtZmxhZyIsIiIscW1mbGFnKTsKLQlkZWJ1ZyhGMTAx LCJjbWZkYiBlc2ZsYWciLCIiLGVzZmxhZyk7Ci0KLQlpZiAoeCA+IC0xKSB7CQkJLyogU3VjY2Vz cyAqLwotCSAgICBvdXQtPmZjb2RlID0gaW4tPmZjb2RlOwkvKiBGaWxsIGluIG91dHB1dCBzdHJ1 Y3QgKi8KLQkgICAgb3V0LT5mZGJhZGRyID0gaW47Ci0JICAgIG91dC0+c3Jlc3VsdCA9IHM7Ci0J ICAgIG91dC0+bnJlc3VsdCA9IChpbi0+ZmNvZGUgPT0gX0NNS0VZKSA/IHggOiBuOwotCSAgICBv dXQtPndyZXN1bHQgPSB3OwotCSAgICBvdXQtPmtmbGFncyA9IChpbi0+ZmNvZGUgPT0gX0NNS0VZ KSA/IGNta3dmbGdzIDogMDsKLQkgICAgZGVidWcoRjExMSwiY21mZGIgb3V0LT5ucmVzdWx0Iixv dXQtPnNyZXN1bHQsb3V0LT5ucmVzdWx0KTsKLQkgICAgZGVidWcoRjExMSwiY21mZGIgb3V0LT53 cmVzdWx0IixvdXQtPnNyZXN1bHQsb3V0LT53cmVzdWx0KTsKLQkgICAgbm9tc2cgPSAwOwotCSAg ICB4Y21mZGIgPSAwOwotCSAgICAvKiBkZWJ1ZyhGMTExLCJjbWZkYiBjbWRidWYgJiBjcmZsYWci LGNtZGJ1ZixjcmZsYWcpOyAqLwotCSAgICBpZiAoY3JmbGFnKSB7Ci0JCWNtZmxncyA9IDE7Ci0J ICAgIH0KLQkgICAgcmV0dXJuKHgpOwkJCS8qIGFuZCByZXR1cm4gKi8KLQl9Ci0JaW4gPSBpbi0+ bnh0ZmRiOwkJLyogRmFpbGVkLCBnZXQgbmV4dCBwYXJzaW5nIGZ1bmN0aW9uICovCi0Jbm9tc2cg PSAwOwotCXhjbWZkYiA9IDA7Ci0JaWYgKCFpbikgewkJCS8qIE5vIG1vcmUgKi8KLQkgICAgZGVi dWcoRjEwMSwiY21mZGIgZmFpbHVyZSB4IiwiIix4KTsKLQkgICAgZGVidWcoRjEwMSwiY21mZGIg ZmFpbHVyZSBlcnJiaXRzIiwiIixlcnJiaXRzKTsKLQkgICAgaWYgKHggPT0gLTYpCi0JICAgICAg eCA9IC05OwotCSAgICBpZiAoeCA9PSAtOSkgewotI2lmZGVmIENLUk9PVAotCQlpZiAoY2tyb290 ZXJyKQotCQkgIG0gPSAiT2ZmIExpbWl0cyI7Ci0JCWVsc2UKLSNlbmRpZiAvKiBDS1JPT1QgKi8K LQkJLyogTWFrZSBpbmZvcm1hdGl2ZSBtZXNzYWdlcyBmb3IgYSBmZXcgY29tbW9uIGNhc2VzICov Ci0JCXN3aXRjaCAoZXJyYml0cykgewotCQkgIGNhc2UgNCszMjogbSA9ICJEb2VzIG5vdCBtYXRj aCBmaWxlbmFtZSBvciBzd2l0Y2giOyBicmVhazsKLQkJICBjYXNlIDQrNjQ6IG0gPSAiRG9lcyBu b3QgbWF0Y2ggZmlsZW5hbWUgb3Iga2V5d29yZCI7IGJyZWFrOwotCQkgIGNhc2UgMSszMjogbSA9 ICJOb3QgYSBudW1iZXIgb3IgdmFsaWQga2V5d29yZCI7IGJyZWFrOwotCQkgIGNhc2UgMSs2NDog bSA9ICJOb3QgYSBudW1iZXIgb3IgdmFsaWQgc3dpdGNoIjsgYnJlYWs7Ci0JCSAgZGVmYXVsdDog bSA9ICJOb3QgdmFsaWQgaW4gdGhpcyBwb3NpdGlvbiI7Ci0JCX0KLQkJcHJpbnRmKCI/JXM6IFwi JXNcIlxuIixtLCBhdG1idWYpOwotCSAgICB9Ci0JICAgIHJldHVybih4KTsKLQl9Ci0JaWYgKHgg IT0gLTIgJiYgeCAhPSAtNiAmJiB4ICE9IC05ICYmIHggIT0gLTMpIC8qIEVkaXRpbmcgb3Igc29t ZXN1Y2ggKi8KLQkgIHJldHVybih4KTsJCQkvKiBHbyBiYWNrIGFuZCByZXBhcnNlICovCi0JcHAg PSBucCA9IGJwID0geHA7CQkvKiBCYWNrIHVwIHBvaW50ZXJzICovCi0JY21mbGdzID0gLTE7CQkJ LyogRm9yY2UgYSByZXBhcnNlICovCi0KLSNpZm5kZWYgTk9TUEwKLQlpZiAoIWFza2ZsYWcpIHsJ CQkvKiBJZiBub3QgZXhlY3V0aW5nIEFTSy1jbGFzcyBjbWQuLi4gKi8KLSNlbmRpZiAvKiBOT1NQ TCAqLwotCSAgICBpZiAoY3JmbGFnKSB7CQkvKiBJZiBDUiB3YXMgdHlwZWQsIHB1dCBpdCBiYWNr ICovCi0JCXB1c2hjID0gTEY7CQkvKiBCdXQgYXMgYSBsaW5lZmVlZCAqLwotCSAgICB9IGVsc2Ug aWYgKHFtZmxhZykgewkvKiBEaXR0byBmb3IgUXVlc3Rpb24gbWFyayAqLwotCQlwdXNoYyA9ICc/ JzsKLQkgICAgfSBlbHNlIGlmIChlc2ZsYWcpIHsJLyogYW5kIEVzY2FwZSBvciBUYWIgKi8KLQkJ cHVzaGMgPSBFU0M7Ci0JICAgIH0KLSNpZm5kZWYgTk9TUEwKLQl9Ci0jZW5kaWYgLyogTk9TUEwg Ki8KLSAgICB9Ci19Ci0KLS8qCi0gICBDIE0gSSBPIEYgSSAgLS0gIFBhcnNlIGFuIGlucHV0IGZp bGUgT1IgdGhlIG5hbWUgb2YgYSBub25leGlzdGVudCBmaWxlLgotCi0gICBSZXBsYWNlcyB0aGUg Y29tbWVudGVkLW91dCB2ZXJzaW9uIGFib3ZlLiAgVGhpcyBvbmUgYWN0dWFsbHkgd29ya3MgYW5k Ci0gICBoYXMgdGhlIGV4cGVjdGVkIHN0cmFpZ2h0Zm9yd2FyZCBpbnRlcmZhY2UuCi0qLwotaW50 Ci1jbWlvZmkoeGhscCx4ZGVmLHhwLHdpbGQsZikgY2hhciAqeGhscCwgKnhkZWYsICoqeHA7IGlu dCAqd2lsZDsgeHhfc3RycCBmOyB7Ci0gICAgaW50IHg7Ci0gICAgc3RydWN0IEZEQiBmMSwgZjI7 Ci0gICAgY21mZGJpKCZmMSxfQ01JRkkseGhscCx4ZGVmLCIiLDAsMCxmLE5VTEwsJmYyKTsKLSAg ICBjbWZkYmkoJmYyLF9DTU9GSSwiIiwiIiwiIiwwLDAsZixOVUxMLE5VTEwpOwotICAgIHggPSBj bWZkYigmZjEpOwotICAgIGlmICh4IDwgMCkgewotCWlmICh4ID09IC0zKSB7Ci0JICAgIHggPSAt OTsKLQkgICAgcHJpbnRmKCI/RmlsZW5hbWUgcmVxdWlyZWRcbiIpOwotCX0KLSAgICB9Ci0gICAg KndpbGQgPSBjbXJlc3VsdC5ucmVzdWx0OwotICAgICp4cCA9IGNtcmVzdWx0LnNyZXN1bHQ7Ci0g ICAgcmV0dXJuKHgpOwotfQotCi0vKiAgRyBUIFcgTyBSIEQgIC0tICBHZXRzIGEgIndvcmQiIGZy b20gdGhlIGNvbW1hbmQgaW5wdXQgc3RyZWFtICAqLwotCi0vKgotVXNhZ2U6IHJldGNvZGUgPSBn dHdvcmQoYnJrKTsKLSAgYnJrID0gMCBmb3Igbm9ybWFsIHdvcmQgYnJlYWtzIChzcGFjZSwgQ1Is IEVzYywgPykKLSAgYnJrID0gMSB0byBhZGQgJzonIGFuZCAnPScgKGZvciBwYXJzaW5nIHN3aXRj aGVzKS4gIFRoZXNlIGNoYXJhY3RlcnMKLSAgICAgICAgYWN0IGFzIGJyZWFrIGNoYXJhY3RlcnMg b25seSBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaWVsZAotICAgICAgICBpcyBzbGFz aCAoJy8nKSwgaS5lLiBzd2l0Y2ggaW50cm9kdWNlci4KLSAgYnJrID0gNCB0byBub3Qgc3RyaXAg Y29tbWVudHMgKHVzZWQgb25seSBmb3IgImhlbHAgIyIgYW5kICJoZWxwIDsiKS4KLQotUmV0dXJu czoKLS0xMCBUaW1lbGltaXQgc2V0IGFuZCB0aW1lZCBvdXQKLSAtOSBpZiBpbnB1dCB3YXMgdG9v IGxvbmcKLSAtNCBpZiBlbmQgb2YgZmlsZSAoZS5nLiBwaXBlIGJyb2tlbikKLSAtMyBpZiBudWxs IGZpZWxkCi0gLTIgaWYgY29tbWFuZCBidWZmZXIgb3ZlcmZsb3dzCi0gLTEgaWYgdXNlciBkaWQg c29tZSBkZWxldGluZwotICAwIGlmIHdvcmQgdGVybWluYXRlcyB3aXRoIFNQIG9yIHRhYgotICAx IGlmIC4uLiBDUgotICAyIGlmIC4uLiBFU0MKLSAgMyBpZiAuLi4gPyAocXVlc3Rpb24gbWFyaykK LSAgNCBpZiAuLi4gOiBvciA9IGFuZCBjYWxsZWQgd2l0aCBicmsgIT0gMAotCi1XaXRoOgotICBw cCBwb2ludGluZyB0byBiZWdpbm5pbmcgb2Ygd29yZCBpbiBidWZmZXIKLSAgYnAgcG9pbnRpbmcg dG8gYWZ0ZXIgY3VycmVudCBwb3NpdGlvbgotICBhdG1idWYgY29udGFpbmluZyBhIGNvcHkgb2Yg dGhlIHdvcmQKLSAgY2MgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhl IHdvcmQgY29waWVkIHRvIGF0bWJ1ZgotKi8KLQotaW50Ci11bmd3b3JkKCkgewkJCQkvKiBVbmdl dCBhIHdvcmQgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ1bmd3b3JkIGNtZmxncyIsIiIsY21mbGdzKTsK LSAgICBpZiAodW5ndykgcmV0dXJuKDApOwotICAgIGNtZnNhdiA9IGNtZmxnczsKLSAgICB1bmd3 ID0gMTsKLSAgICBjbWZsZ3MgPSAwOwotICAgIHJldHVybigwKTsKLX0KLQotLyogVW4tdW4tZ2V0 IHdvcmQuICBVbmRvIHVuZ3dvcmQoKSBpZiBpdCBoYXMgYmVlbiBkb25lLiAqLwotCi1WT0lECi11 bnVuZ3coKSB7Ci0gICAgZGVidWcoRjAxMCwidW51bmd3IGF0bWJ1ZiIsYXRtYnVmLDApOwotICAg IGlmICh1bmd3KSB7Ci0JdW5ndyA9IDA7Ci0JY21mbGdzID0gY21mc2F2OwotCWF0bWJ1ZlswXSA9 IE5VTDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQKLWd0d29yZChicmspIGludCBicms7IHsKLSAg ICBpbnQgYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IGNoYXIgKi8K LSAgICBpbnQgcXVvdGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBxdW90 ZSBjaGFyYWN0ZXIgKi8KLSAgICBpbnQgZWNob2YgPSAwOyAgICAgICAgICAgICAgICAgICAgICAv KiBGbGFnIGZvciB3aGV0aGVyIHRvIGVjaG8gKi8KLSAgICBpbnQgY29tbWVudCA9IDA7CQkJLyog RmxhZyBmb3IgaW4gY29tbWVudCAqLwotICAgIGNoYXIgKmNwID0gTlVMTDsJCQkvKiBDb21tZW50 IHBvaW50ZXIgKi8KLSAgICBpbnQgZWludHIgPSAwOwkJCS8qIEZsYWcgZm9yIHN5c2NhbGwgaW50 ZXJydXB0ZWQgKi8KLSAgICBpbnQgYnJhY2VsdmwgPSAwOwkJCS8qIG5lc3RlZCBicmFjZSBjb3Vu dGVyIFtqcnNdICovCi0gICAgaW50IGlzY29udGQgPSAwOwkJCS8qIEZsYWcgZm9yIGNvbnRpbnVh dGlvbiAqLwotICAgIGludCByZWFsdHR5ID0gMDsJCQkvKiBTdGRpbiBpcyByZWFsbHkgYSB0dHkg Ki8KLSAgICBjaGFyIGZpcnN0bmIgID0gTlVMOwotICAgIGNoYXIgbGFzdGNoYXIgPSBOVUw7Ci0g ICAgY2hhciBwcmV2Y2hhciA9IE5VTDsKLSAgICBjaGFyIGxicmFjZSwgcmJyYWNlOwotICAgIGlu dCBkcSA9IDA7CQkJCS8qIERvdWJsZXF1b3RlIGZsYWcgKi8KLSAgICBpbnQgZHFuID0gMDsJCQkv KiBhbmQgY291bnQgKi8KLSAgICBpbnQgaXNlc2MgPSAwOwotCi0jaWZkZWYgUlRVCi0gICAgZXh0 ZXJuIGludCBydHVfYnVnOwotI2VuZGlmIC8qIFJUVSAqLwotCi0jaWZkZWYgSUtTRAotICAgIGV4 dGVybiBpbnQgaW5zZXJ2ZXI7Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgIGV4dGVybiBpbnQga3N0 YXJ0YWN0aXZlOwotCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICBleHRlcm4gaW50IHRlcm10eXBl OyAgICAgICAgICAgICAgICAvKiBERyB0ZXJtaW5hbCB0eXBlIGZsYWcgKi8KLSAgICBleHRlcm4g aW50IGNvbl9yZWFkc19tdDsgICAgICAgICAgICAvKiBDb25zb2xlIHJlYWQgYXN5bmNoIGlzIGFj dGl2ZSAqLwotICAgIGlmIChjb25fcmVhZHNfbXQpIGNvbm5vaV9tdCgpOyAgICAgIC8qIFRhc2sg d291bGQgaW50ZXJmZXJlIHcvY29ucyByZWFkICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8K LQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1 ZyhGMTAxLCJndHdvcmQgYnJrIiwiIixicmspOwotCWRlYnVnKEYxMDEsImd0d29yZCBjbWZsZGZs Z3MiLCIiLGNtZmxkZmxncyk7Ci0JZGVidWcoRjEwMSwiZ3R3b3JkIHN3YXJnIiwiIixzd2FyZyk7 Ci0JZGVidWcoRjEwMSwiZ3R3b3JkIGRweCIsIiIsZHB4KTsKLQlkZWJ1ZyhGMTAxLCJndHdvcmQg ZWNob2YiLCIiLGVjaG9mKTsKLSNpZm5kZWYgTk9TUEwKLQlkZWJ1ZyhGMTAxLCJndHdvcmQgYXNr ZmxhZyIsIiIsYXNrZmxhZyk7Ci0JZGVidWcoRjEwMSwiZ3R3b3JkIHRpbWVsaW1pdCIsIiIsdGlt ZWxpbWl0KTsKLSNpZm5kZWYgTk9MT0NBTAotI2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBDS19BVVRP REwKLQlkZWJ1ZyhGMTAxLCJndHdvcmQgY21kYWRsIiwiIixjbWRhZGwpOwotI2VuZGlmIC8qIENL X0FVVE9ETCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNl bmRpZiAvKiBOT1NQTCAqLwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLQotICAgIHJlYWx0dHkgPSBpc19hX3R0eSgwKTsJCS8qIFN0ZGluIGlzIHJlYWxs eSBhIHR0eT8gKi8KLQotICAgIGlmIChjbWZsZGZsZ3MgJiAxKSB7Ci0JbGJyYWNlID0gJygnOwot CXJicmFjZSA9ICcpJzsKLSAgICB9IGVsc2UgewotCWxicmFjZSA9ICd7JzsKLQlyYnJhY2UgPSAn fSc7Ci0gICAgfQotICAgIGNyZmxhZyA9IDA7Ci0gICAgcW1mbGFnID0gMDsKLSAgICBlc2ZsYWcg PSAwOwotCi0gICAgaWYgKHN3YXJnKSB7CQkJLyogTm8gbGVhZGluZyBzcGFjZSBmb3Igc3dpdGNo IGFyZ3MgKi8KLQlpbndvcmQgPSAxOwotCXN3YXJnID0gMDsKLSAgICB9Ci0gICAgaWYgKHVuZ3cp IHsJCQkJLyogSGF2ZSBhIHdvcmQgc2F2ZWQ/ICovCi0jaWZkZWYgTV9VTkdXCi0JLyogRXhwZXJp bWVudGFsIGNvZGUgdG8gYWxsb3cgdW5nZXR0aW5nIG11bHRpcGxlIHdvcmRzLiAqLwotCS8qIFNl ZSBjb21tZW50cyBpbiBja21rZXkyKCkgYWJvdmUuICovCi0JaW50IHg7Ci0JaWYgKG5wID4gcHAp IHBwID0gbnA7Ci0Jd2hpbGUgKCpwcCA9PSBTUCkgcHArKzsKLQlpZiAoISpwcCkgewotCSAgICB1 bmd3ID0gMDsKLQkgICAgY21mbGdzID0gY21mc2F2OwotCX0gZWxzZSB7Ci0JICAgIGlmICgoeCA9 IHNldGF0bShwcCwyKSkgPCAwKSB7Ci0JCXByaW50ZigiP1NhdmVkIHdvcmQgdG9vIGxvbmdcbiIp OwotCQlyZXR1cm4oLTkpOwotCSAgICB9Ci0JICAgIGlmIChwcFt4XSA+PSBTUCkgewotCQljaGFy ICpwMjsKLQkJcDIgPSBwcDsKLQkJcDIgKz0geDsKLQkJd2hpbGUgKCpwMiA9PSBTUCkgcDIrKzsK LQkJaWYgKCpwMikgewotCQkgICAgbnAgPSBwMjsKLQkJICAgIHVuZ3dvcmQoKTsKLQkJfQotCSAg ICB9IGVsc2UgewotCQl1bmd3ID0gMDsKLQkJY21mbGdzID0gY21mc2F2OwotCQlkZWJ1ZyhGMDEw LCJndHdvcmQgdW5ndyByZXR1cm4gYXRtYnVmIixhdG1idWYsMCk7Ci0JICAgIH0KLQl9Ci0JcmV0 dXJuKGNtZmxncyk7Ci0jZWxzZQotCS8qCi0JICAgWW91IHdvdWxkIHRoaW5rIHRoZSBmb2xsb3dp bmcgc2hvdWxkIGJlOgotICAgICAgICAgICAgIHdoaWxlICgqcHAgPT0gU1ApIHBwKys7Ci0gICAg ICAgICAgIGJ1dCB5b3Ugd291bGQgYmUgd3JvbmcgLS0gbWFraW5nIHRoaXMgY2hhbmdlIGJyZWFr cyBHT1RPLgotICAgICAgICAqLwotCXdoaWxlICgqcHArKyA9PSBTUCkgOwotCWlmIChzZXRhdG0o cHAsMikgPCAwKSB7Ci0JICAgIHByaW50ZigiP1NhdmVkIHdvcmQgdG9vIGxvbmdcbiIpOwotCSAg ICByZXR1cm4oLTkpOwotCX0KLQl1bmd3ID0gMDsKLQljbWZsZ3MgPSBjbWZzYXY7Ci0JZGVidWco RjAxMCwiZ3R3b3JkIHVuZ3cgcmV0dXJuIGF0bWJ1ZiIsYXRtYnVmLDApOwotCXJldHVybihjbWZs Z3MpOwotI2VuZGlmIC8qIE1fVU5HVyAqLwotICAgIH0KLSAgICBwcCA9IG5wOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiBjdXJyZW50IGZpZWxkICovCi0KLSNpZmRlZiBD T01NRU5UCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjExMCwiZ3R3 b3JkIGNtZGJ1ZiIsY21kYnVmLDApOwotCWRlYnVnKEYxMTAsImd0d29yZCBicCIsYnAsMCk7Ci0J ZGVidWcoRjExMCwiZ3R3b3JkIHBwIixwcCwwKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8K LSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgewotCS8qIElmIHdlIGFyZSByZXBhcnNpbmcgd2Ug aGF2ZSB0byByZWNvdW50IGFueSBicmFjZXMgb3IgZG91YmxlcXVvdGVzICovCi0JY2hhciAqIHAg PSBwcDsKLQljaGFyIGM7Ci0JaWYgKCpwID09ICciJykKLQkgIGRxKys7Ci0Jd2hpbGUgKChjID0g KnArKykpCi0JICBpZiAoYyA9PSBsYnJhY2UpCi0JICAgIGJyYWNlbHZsKys7Ci0JICBlbHNlIGlm IChjID09IHJicmFjZSkKLQkgICAgYnJhY2VsdmwtLTsKLQkgIGVsc2UgaWYgKGRxICYmIGMgPT0g JyInKQotCSAgICBkcW4rKzsKLSAgICB9Ci0gICAgd2hpbGUgKGJwIDwgY21kYnVmK0NNREJMKSB7 ICAgICAgICAgLyogQmlnIGdldC1hLWNoYXJhY3RlciBsb29wICovCi0JZWNob2YgPSAwOwkJCS8q IEFzc3VtZSB3ZSBkb24ndCBlY2hvIGJlY2F1c2UgKi8KLQljaHNyYyA9IDA7CQkJLyogY2hhcmFj dGVyIGNhbWUgZnJvbSByZXBhcnNlIGJ1Zi4gKi8KLSNpZmRlZiBCU19ESVJTRVAKLUNNRElSUEFS U0U6Ci0jZW5kaWYgLyogQlNfRElSU0VQICovCi0KLQljID0gKmJwOwotICAgICAgICBpZiAoIWMp IHsJCQkvKiBJZiBubyBjaGFyIHdhaXRpbmcgaW4gcmVwYXJzZSBidWYgKi8KLQkgICAgaWYgKChk cHgKLSNpZm5kZWYgTk9TUEwKLQkJIHx8IGVjaG9zdGFycwotI2VuZGlmIC8qIE5PU1BMICovCi0J CSApICYmICghcHVzaGMKLSNpZm5kZWYgTk9TUEwKLQkJCXx8IGFza2ZsYWcKLSNlbmRpZiAvKiBO T1NQTCAqLwotCQkJKSkJCS8qIEdldCBmcm9tIHR0eSwgc2V0IGVjaG8gZmxhZyAqLwotCSAgICAg IGVjaG9mID0gMTsKLQkgICAgYyA9IGNtZGdldGModGltZWxpbWl0KTsJLyogUmVhZCBhIGNvbW1h bmQgY2hhcmFjdGVyLiAqLwotI2lmZGVmIERFQlVHCi0JICAgIGRlYnVnKEYxMDEsImd0d29yZCBj IiwiIixjKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotCi0JICAgIGlmICh0aW1lbGltaXQgJiYgYyA8 IC0xKSB7CS8qIFRpbWVkIG91dCAqLwotCQlyZXR1cm4oLTEwKTsKLQkgICAgfQotCi0jaWZuZGVm IE5PWEZFUgotLyoKLSAgVGhlIGZvbGxvd2luZyBhbGxvd3MgcGFja2V0IHJlY29nbml0aW9uIGlu IHRoZSBjb21tYW5kIHBhcnNlci4KLSAgUHJlc2VudGx5IGl0IHdvcmtzIG9ubHkgZm9yIEtlcm1p dCBwYWNrZXRzLCBhbmQgaWYgb3VyIGN1cnJlbnQgcHJvdG9jb2wKLSAgaGFwcGVucyB0byBiZSBh bnl0aGluZyBiZXNpZGVzIEtlcm1pdCwgd2Ugc2ltcGx5IGZvcmNlIGl0IHRvIEtlcm1pdC4KLSAg V2UgZG9uJ3QgdXNlIHRoZSBBUEMgbWVjaGFuaXNtIGhlcmUgZm9yIG1lY2hhbmljYWwgcmVhc29u cywgYW5kIGFsc28KLSAgYmVjYXVzZSB0aGlzIHdheSwgaXQgd29ya3MgZXZlbiB3aXRoIG1pbmlt YWxseSBjb25maWd1cmVkIGludGVyYWN0aXZlCi0gIHZlcnNpb25zLiAgQWRkIFptb2RlbSBsYXRl ci4uLgotKi8KLSNpZmRlZiBDS19BVVRPREwKLQkgICAgaWYgKCghbG9jYWwgJiYgY21kYWRsKQkv KiBBdXRvZG93bmxvYWQgZW5hYmxlZD8gKi8KLSNpZmRlZiBJS1NfT1BUSU9OCi0JCXx8IFRFTE9Q VF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQKLSNlbmRpZiAvKiBJS1NfT1BUSU9O ICovCi0JCSkgewotCQlpbnQgazsKLQkJayA9IGtzdGFydCgoQ0hBUiljKTsJLyogS2VybWl0IFMg b3IgSSBwYWNrZXQ/ICovCi0JCWlmIChrKSB7Ci0JCSAgICBpbnQga3NpZ24gPSAwOwotCQkgICAg aWYgKGsgPCAwKSB7CS8qIE1pbnVzLVByb3RvY29sPyAqLwotI2lmZGVmIE5PU0VSVkVSCi0JCQln b3RvIG5vc2VydmVyOwkvKiBOZWVkIHNlcnZlciBtb2RlIGZvciB0aGlzICovCi0jZWxzZQotCQkJ a3NpZ24gPSAxOwkvKiBSZW1lbWJlciAqLwotCQkJayA9IDAgLSBrOwkvKiBDb252ZXJ0IHRvIGFj dHVhbCBwcm90b2NvbCAqLwotCQkJanVzdG9uZSA9IDE7CS8qIEZsYWcgZm9yIHByb3RvY29sIG1v ZHVsZSAqLwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0JCSAgICB9IGVsc2UKLQkJICAgICAganVz dG9uZSA9IDA7Ci0JCSAgICBrLS07CQkvKiBBZGp1c3Qga3N0YXJ0J3MgcmV0dXJuIHZhbHVlICov Ci0JCSAgICBpZiAoayA9PSBQUk9UT19LKSB7Ci0JCQlleHRlcm4gaW50IHByb3RvY29sLCBnX3By b3RvOwotCQkJZXh0ZXJuIENIQVIgc3N0YXRlOwotCQkJZ19wcm90byA9IHByb3RvY29sOwotCQkJ cHJvdG9jb2wgPSBQUk9UT19LOyAvKiBDcnVkZS4uLiAqLwotCQkJc3N0YXRlID0ga3NpZ24gPyAn eCcgOiAndic7Ci0JCQljbWRidWZbMF0gPSBOVUw7Ci0JCQlyZXR1cm4oLTMpOwotCQkgICAgfQot CQl9Ci0JICAgIH0KLSNpZmRlZiBOT1NFUlZFUgotCSAgbm9zZXJ2ZXI6Ci0jZW5kaWYgLyogTk9T RVJWRVIgKi8KLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQot CSAgICBjaHNyYyA9IDE7CQkJLyogUmVtZW1iZXIgY2hhcmFjdGVyIHNvdXJjZSBpcyB0dHkuICov Ci0JICAgIGJya2NoYXIgPSBjOwotCi0jaWZkZWYgSUtTRAotICAgICAgICAgICAgaWYgKGluc2Vy dmVyICYmIGMgPCAwKSB7ICAgIC8qIEVuZCBvZiBzZXNzaW9uPyAqLwotICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsImd0d29yZCBjIDwgMCIsImV4aXRpbmciLGMpOwotICAgICAgICAgICAgICAg IHJldHVybigtNCk7ICAgICAgICAgICAgIC8qIENsZWFudXAgYW5kIHRlcm1pbmF0ZSAqLwotICAg ICAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotI2lmZGVmIE9TMgotICAgICAgICAgICBp ZiAoYyA8IDApIHsJCQkvKiBFcnJvciAqLwotCSAgICAgICBpZiAoYyA9PSAtMykgewkJLyogRW1w dHkgd29yZD8gKi8KLQkJICAgaWYgKGJsb2NrbHZsID4gMCkJLyogSW4gYSBibG9jayAqLwotCQkg ICAgIGNvbnRpbnVlOwkJLyogc28ga2VlcCBsb29raW5nIGZvciBibG9jayBlbmQgKi8KLQkJICAg ZWxzZQotCQkgICAgIHJldHVybigtMyk7CS8qIE90aGVyd2lzZSBzYXkgd2UgZ290IG5vdGhpbmcg Ki8KLQkgICAgICAgfSBlbHNlIHsJCQkvKiBOb3QgZW1wdHkgd29yZCAqLwotCQkgICByZXR1cm4o LTQpOwkJLyogU28gc29tZSBraW5kIG9mIGkvbyBlcnJvciAqLwotCSAgICAgICB9Ci0gICAgICAg ICAgIH0KLSNlbHNlCi0jaWZkZWYgTUFDCi0JICAgaWYgKGMgPT0gLTMpCQkJLyogRW1wdHkgd29y ZC4uLiAqLwotCSAgICAgaWYgKGJsb2NrbHZsID4gMCkKLQkgICAgICAgY29udGludWU7Ci0JICAg ICBlbHNlCi0JICAgICAgIHJldHVybigtMyk7Ci0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyog T1MyICovCi0JICAgaWYgKGMgPT0gRU9GKSB7CQkvKiBUaGlzIGNhbiBoYXBwZW4gaWYgc3RkaW4g bm90IHR0eS4gKi8KLSNpZmRlZiBFSU5UUgotLyoKLSAgU29tZSBvcGVyYXRpbmcgYW5kL29yIEMg cnVudGltZSBzeXN0ZW1zIHJldHVybiBFSU5UUiBmb3Igbm8gZ29vZCByZWFzb24sCi0gIHdoZW4g dGhlIGVuZCBvZiB0aGUgc3RhbmRhcmQgaW5wdXQgImZpbGUiIGlzIGVuY291bnRlcmVkLiAgSW4g Y2FzZXMgbGlrZQotICB0aGlzLCB3ZSBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wOyBoZW5jZSB0 aGUgZWludHIgY291bnRlciwgd2hpY2ggaXMgcmVzZXQKLSAgdG8gMCB1cG9uIGVhY2ggY2FsbCB0 byB0aGlzIHJvdXRpbmUuCi0qLwotCQlkZWJ1ZyhGMTAxLCJndHdvcmQgRU9GIiwiIixlcnJubyk7 Ci0JCWlmIChlcnJubyA9PSBFSU5UUiAmJiArK2VpbnRyIDwgNCkgLyogV2hlbiBiZydkIHByb2Nl c3MgaXMgKi8KLQkJICBjb250aW51ZTsJCS8qIGZnJ2QgYWdhaW4uICovCi0jZW5kaWYgLyogRUlO VFIgKi8KLQkJcmV0dXJuKC00KTsKLQkgICAgfQotCSAgICBjICY9IGNtZG1zazsJCS8qIFN0cmlw IGFueSBwYXJpdHkgYml0ICovCi0JfQkJCQkvKiBpZiBkZXNpcmVkLiAqLwotCi0vKiBOb3cgd2Ug aGF2ZSB0aGUgbmV4dCBjaGFyYWN0ZXIgKi8KLQotCWlzZXNjID0gKGMgPT0gRVNDKTsJCS8qIEEg cmVhbCBFU0M/ICovCi0KLQlpZiAoIWZpcnN0bmIgJiYgYyA+IFNQKSB7CS8qIEZpcnN0IG5vbmJs YW5rICovCi0JICAgIGZpcnN0bmIgPSBjOwotCSAgICBpZiAoYyA9PSAnIicpCQkvKiBTdGFydHMg d2l0aCBkb3VibGVxdW90ZSAqLwotCSAgICAgIGRxID0gMTsKLQl9Ci0JaWYgKGMgPT0gJyInKQkJ CS8qIENvdW50IGRvdWJsZXF1b3RlcyAqLwotCSAgZHFuKys7Ci0KLQlpZiAocXVvdGUgJiYgKGMg PT0gQ1IgfHwgYyA9PSBMRikpIHsgLyogRW50ZXIga2V5IGZvbGxvd2luZyBxdW90ZSAqLwotCSAg ICAqYnArKyA9IENNRFE7CQkvKiBEb3VibGUgaXQgKi8KLQkgICAgKmJwID0gTlVMOwotCSAgICBx dW90ZSA9IDA7Ci0JfQotICAgICAgICBpZiAocXVvdGUgPT0gMCkgewkJLyogSWYgdGhpcyBpcyBu b3QgYSBxdW90ZWQgY2hhcmFjdGVyICovCi0JICAgIHN3aXRjaCAoYykgewotCSAgICAgIGNhc2Ug Q01EUToJCS8qIEdvdCB0aGUgcXVvdGUgY2hhcmFjdGVyIGl0c2VsZiAqLwotCQlpZiAoIWNvbW1l bnQgJiYgcXVvdGluZykKLQkJICBxdW90ZSA9IDE7CQkvKiBGbGFnIGl0IGlmIG5vdCBpbiBhIGNv bW1lbnQgKi8KLQkJYnJlYWs7Ci0JICAgICAgY2FzZSBGRjoJCQkvKiBGb3JtZmVlZC4gKi8KLSAg ICAgICAgICAgICAgICBjID0gTkw7ICAgICAgICAgICAgICAgICAvKiBSZXBsYWNlIHdpdGggbmV3 bGluZSAqLwotCQljbWRjbHJzY24oKTsJCS8qIENsZWFyIHRoZSBzY3JlZW4gKi8KLQkJYnJlYWs7 Ci0JICAgICAgY2FzZSBIVDoJCQkvKiBIb3Jpem9udGFsIFRhYiAqLwotCQlpZiAoY29tbWVudCkJ CS8qIElmIGluIGNvbW1lbnQsICovCi0JCSAgYyA9IFNQOwkJLyogc3Vic3RpdHV0ZSBzcGFjZSAq LwotCQllbHNlCQkJLyogb3RoZXJ3aXNlICovCi0JCSAgYyA9IEVTQzsJCS8qIHN1YnN0aXR1dGUg RVNDIChmb3IgY29tcGxldGlvbikgKi8KLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAnOyc6CQkJLyog VHJhaWxpbmcgY29tbWVudCAqLwotCSAgICAgIGNhc2UgJyMnOgotCQlpZiAoISAoYnJrICYgNCkg KSB7CS8qIElmIG5vdCBrZWVwaW5nIGNvbW1lbnRzICovCi0JCSAgICBpZiAoaW53b3JkID09IDAg JiYgcXVvdGluZykgeyAvKiBJZiBub3QgaW4gYSB3b3JkICovCi0JCQljb21tZW50ID0gMTsJLyog c3RhcnQgYSBjb21tZW50LiAqLwotCQkJY3AgPSBicDsJLyogcmVtZW1iZXIgd2hlcmUgaXQgc3Rh cnRzLiAqLwotCQkgICAgfQotCQl9Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIGlmICgha3N0YXJ0 YWN0aXZlICYmCS8qIE5vdCBpbiBwb3NzaWJsZSBLZXJtaXQgcGFja2V0ICovCi0JCSFjb21tZW50 ICYmIGMgPT0gU1ApIHsJLyogU3BhY2Ugbm90IGluIGNvbW1lbnQgKi8KLSAgICAgICAgICAgICAg ICAqYnArKyA9IChjaGFyKSBjOwkvKiBkZXBvc2l0IGluIGJ1ZmZlciBpZiBub3QgYWxyZWFkeSAq LwotCQkvKiBkZWJ1ZyhGMTAxLCJndHdvcmQgZWNob2YgMiIsIiIsZWNob2YpOyAqLwotI2lmZGVm IEJFQk9YCi0gICAgICAgICAgICAgICAgaWYgKGVjaG9mKSB7Ci0JCSAgICBjbWRlY2hvKChjaGFy KSBjLCAwKTsgLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KLSAgICAgICAgICAgICAgICAgICAg ZmZsdXNoKHN0ZG91dCk7Ci0gICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOwotICAg ICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKGVjaG9mKSB7Ci0JCSAg ICBjbWRlY2hvKChjaGFyKSBjLCAwKTsgLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KLQkJICAg IGlmICh0aW1lbGltaXQpCi0JCSAgICAgIGZmbHVzaChzdGRvdXQpOwotCQl9Ci0jZW5kaWYgLyog QkVCT1ggKi8KLSAgICAgICAgICAgICAgICBpZiAoaW53b3JkID09IDApIHsgICAgICAvKiBJZiBs ZWFkaW5nLCBnb2JibGUgaXQuICovCi0gICAgICAgICAgICAgICAgICAgIHBwKys7Ci0gICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgIC8qIElmIHRlcm1pbmF0aW5nLCByZXR1cm4uICovCi0JCSAgICBpZiAoKCFkcSAmJiAo KCpwcCAhPSBsYnJhY2UpIHx8IChicmFjZWx2bCA9PSAwKSkpIHx8Ci0JCQkoZHEgJiYgZHFuID4g MSAmJiAqKGJwLTIpID09ICciJykpIHsKLQkJCW5wID0gYnA7Ci0JCQljbWJwdHIgPSBucDsKLQkJ CWlmIChzZXRhdG0ocHAsMCkgPCAwKSB7Ci0JCQkgICAgcHJpbnRmKCI/RmllbGQgdG9vIGxvbmcg ZXJyb3IgMVxuIik7Ci0JCQkgICAgZGVidWcoRjExMSwiZ3R3b3JkIHRvbyBsb25nICMxIixwcCxz dHJsZW4ocHApKTsKLQkJCSAgICByZXR1cm4oLTkpOwotCQkJfQotCQkJYnJrY2hhciA9IGM7Ci0J CQlpbndvcmQgPSBjbWZsZ3MgPSAwOwotCQkJcmV0dXJuKDApOwotCQkgICAgfQotICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBpZiAoYyA9PSBsYnJhY2UpIHsKLQkJYnJhY2VsdmwrKzsKLQkJLyogZGVidWco RjEwMSwiZ3R3b3JkIGJyYWNlbHZsKysiLCIiLGJyYWNlbHZsKTsgKi8KLQkgICAgfQotICAgICAg ICAgICAgaWYgKGMgPT0gcmJyYWNlICYmIGJyYWNlbHZsID4gMCkgewotICAgICAgICAgICAgICAg IGJyYWNlbHZsLS07Ci0JCS8qIGRlYnVnKEYxMDEsImd0d29yZCBicmFjZWx2bC0tIiwiIixicmFj ZWx2bCk7ICovCi0gICAgICAgICAgICAgICAgaWYgKGxpbmViZWdpbikKLQkJICBibG9ja2x2bC0t OwotICAgICAgICAgICAgfQotCSAgICBpZiAoKGMgPT0gJz0nIHx8IGMgPT0gJzonKSAmJgotCQkv KiBeXl4gKi8KLQkJIWtzdGFydGFjdGl2ZSAmJiAhY29tbWVudCAmJiBicmsgLyogJiYgKGZpcnN0 bmIgPT0gJy8nKSAqLwotCQkpIHsKLSAgICAgICAgICAgICAgICAqYnArKyA9IChjaGFyKSBjOwkv KiBTd2l0Y2ggYXJndW1lbnQgc2VwYXJhdG9yICovCi0JCS8qIGRlYnVnKEYxMTEsImd0d29yZCBz d2l0Y2ggYXJnc2VwIixjbWRidWYsYnJrKTsgKi8KLSNpZmRlZiBCRUJPWAotICAgICAgICAgICAg ICAgIGlmIChlY2hvZikgewotCQkgICAgY21kZWNobygoY2hhcikgYywgMCk7IC8qIEVjaG8gd2hh dCB3YXMgdHlwZWQuICovCi0gICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAg ICAgICAgICAgICAgICAgICBmZmx1c2goc3RkZXJyKTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxz ZQotCQlpZiAoZWNob2YpIHsKLQkJICAgIGNtZGVjaG8oKGNoYXIpIGMsIDApOyAvKiBFY2hvIHdo YXQgd2FzIHR5cGVkLiAqLwotCQkgICAgaWYgKHRpbWVsaW1pdCkKLQkJICAgICAgZmZsdXNoKHN0 ZG91dCk7Ci0JCX0KLSNlbmRpZiAvKiBCRUJPWCAqLwotCQlpZiAoKCpwcCAhPSBsYnJhY2UpIHx8 IChicmFjZWx2bCA9PSAwKSkgewotCQkgICAgbnAgPSBicDsKLQkJICAgIGNtYnB0ciA9IG5wOwot CQkgICAgaWYgKHNldGF0bShwcCwyKSA8IDApIHsgLyogXl5eICovCi0JCQlwcmludGYoIj9GaWVs ZCB0b28gbG9uZyBlcnJvciAxXG4iKTsKLQkJCWRlYnVnKEYxMTEsImd0d29yZCB0b28gbG9uZyAj MSIscHAsc3RybGVuKHBwKSk7Ci0JCQlyZXR1cm4oLTkpOwotCQkgICAgfQotCQkgICAgaW53b3Jk ID0gY21mbGdzID0gMDsKLQkJICAgIGJya2NoYXIgPSBjOwotCQkgICAgcmV0dXJuKDQpOwotCQl9 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYyA9PSBMRiB8fCBjID09IENSKSB7CS8q IENSIG9yIExGLiAqLwotCQlpZiAoZWNob2YpIHsKLSAgICAgICAgICAgICAgICAgICAgY21kbmV3 bCgoY2hhciljKTsJLyogZWNobyBpdC4gKi8KLSNpZmRlZiBCRUJPWAotICAgICAgICAgICAgICAg ICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGVycik7 Ci0jZW5kaWYgLyogQkVCT1ggKi8KLSAgICAgICAgICAgICAgICB9Ci0JCXsKLQkJICAgIC8qIFRy aW0gdHJhaWxpbmcgY29tbWVudCBhbmQgd2hpdGVzcGFjZSAqLwotCQkgICAgY2hhciAqcXE7Ci0J CSAgICBpZiAoY29tbWVudCkgewkvKiBFcmFzZSBjb21tZW50ICovCi0JCQl3aGlsZSAoYnAgPj0g Y3ApIC8qIEJhY2sgdG8gY29tbWVudCBwb2ludGVyICovCi0JCQkgICpicC0tID0gTlVMOwotCQkJ YnArKzsKLQkJCXBwID0gYnA7CS8qIEFkanVzdCBvdGhlciBwb2ludGVycyAqLwotCQkJaW53b3Jk ID0gMDsJLyogYW5kIGZsYWdzICovCi0JCQljb21tZW50ID0gMDsKLQkJCWNwID0gTlVMTDsKLQkJ ICAgIH0KLQkJICAgIHFxID0gaW53b3JkID8gcHAgOiAoY2hhciAqKWNtZGJ1ZjsKLQkJICAgIC8q IEVyYXNlIHRyYWlsaW5nIHdoaXRlc3BhY2UgKi8KLQkJICAgIHdoaWxlIChicCA+IHFxICYmICgq KGJwLTEpID09IFNQIHx8ICooYnAtMSkgPT0gSFQpKSB7Ci0JCQlicC0tOwotCQkJLyogZGVidWco RjAwMCwiZXJhc2luZyIsIiIsKmJwKTsgKi8KLQkJCSpicCA9IE5VTDsKLQkJICAgIH0KLQkJICAg IGxhc3RjaGFyID0gKGJwID4gcXEpID8gKihicC0xKSA6IE5VTDsKLQkJICAgIHByZXZjaGFyID0g KGJwID4gcXErMSkgPyAqKGJwLTIpIDogTlVMOwotCQl9Ci0JCWlmIChsaW5lYmVnaW4gJiYgYmxv Y2tsdmwgPiAwKSAvKiBCbGFuayBsaW5lIGluIHsuLi59IGJsb2NrICovCi0JCSAgY29udGludWU7 Ci0KLQkJbGluZWJlZ2luID0gMTsJCS8qIEF0IGJlZ2lubmluZyBvZiBuZXh0IGxpbmUgKi8KLQkJ aXNjb250ZCA9IHByZXZjaGFyICE9IENNRFEgJiYKLQkJICAobGFzdGNoYXIgPT0gJy0nIHx8IGxh c3RjaGFyID09IGxicmFjZSk7Ci0JCWRlYnVnKEYxMDEsImd0d29yZCBpc2NvbnRkIiwiIixpc2Nv bnRkKTsKLQotICAgICAgICAgICAgICAgIGlmIChpc2NvbnRkKSB7CQkvKiBJZiBsaW5lIGlzIGNv bnRpbnVlZC4uLiAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hzcmMpIHsJLyogSWYgcmVh ZGluZyBmcm9tIHR0eSwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqKGJwLTEpID09 IGxicmFjZSkgeyAvKiBDaGVjayBmb3IgImJlZ2luIGJsb2NrIiAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpicCsrID0gU1A7CS8qIEluc2VydCBhIHNwYWNlIGZvciBuZWF0bmVzcyAq LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrbHZsKys7CS8qIENvdW50IGJsb2Nr IG5lc3RpbmcgbGV2ZWwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CS8qIE9y IGh5cGhlbiAqLwotCQkJICAgIGJwLS07CS8qIE92ZXJ3cml0ZSB0aGUgaHlwaGVuICovCi0gICAg ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAqYnAgPSBOVUw7 CS8qIGVyYXNlIHRoZSBkYXNoLCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7 CS8qIGFuZCBnbyBiYWNrIGZvciBuZXh0IGNoYXIgbm93LiAqLwotICAgICAgICAgICAgICAgICAg ICB9Ci0JCX0gZWxzZSBpZiAoYmxvY2tsdmwgPiAwKSB7IC8qIE5vIGNvbnRpbnVhdGlvbiBjaGFy YWN0ZXIgKi8KLQkJICAgIGlmIChjaHNyYykgewkvKiBCdXQgd2UncmUgaW4gYSAiYmxvY2siICov Ci0JCQkqYnArKyA9ICcsJzsJLyogQWRkIGNvbW1hICovCi0JCQkqYnAgPSBOVUw7Ci0JCQljb250 aW51ZTsKLQkJICAgIH0KLQkJfSBlbHNlIHsJCS8qIE5vIGNvbnRpbnVhdGlvbiwgZW5kIG9mIGNv bW1hbmQuICovCi0JCSAgICAqYnAgPSBOVUw7CQkvKiBUZXJtaW5hdGUgdGhlIGNvbW1hbmQgc3Ry aW5nLiAqLwotCQkgICAgaWYgKGNvbW1lbnQpIHsJLyogSWYgd2UncmUgaW4gYSBjb21tZW50LCAq LwotCQkJY29tbWVudCA9IDA7CS8qIFNheSB3ZSdyZSBub3QgYW55IG1vcmUsICovCi0JCQkqY3Ag PSBOVUw7CS8qIGN1dCBpdCBvZmYuICovCi0JCSAgICB9Ci0JCSAgICBucCA9IGJwOwkJLyogV2hl cmUgdG8gc3RhcnQgbmV4dCBmaWVsZC4gKi8KLQkJICAgIGNtYnB0ciA9IG5wOwotCQkgICAgaWYg KHNldGF0bShwcCwwKSA8IDApIHsgLyogQ29weSBmaWVsZCB0byBhdG9tIGJ1ZmZlciAqLwotCQkJ ZGVidWcoRjExMSwiZ3R3b3JkIHRvbyBsb25nICMyIixwcCxzdHJsZW4ocHApKTsKLQkJCXByaW50 ZigiP0ZpZWxkIHRvbyBsb25nIGVycm9yIDJcbiIpOwotCQkJcmV0dXJuKC05KTsKLQkJICAgIH0K LQkJICAgIGlud29yZCA9IDA7CQkvKiBOb3QgaW4gYSB3b3JkIGFueSBtb3JlLiAqLwotCQkgICAg Y3JmbGFnID0gMTsKLSAgICAgICAgICAgICAgICAgICAgLyogZGVidWcoRjExMCwiZ3R3b3JkIiwi Y3JmbGFnIGlzIHNldCIsMCk7ICovCi0jaWZkZWYgQ0tfUkVDQUxMCi0JCSAgICBjdXJyZW50ID0g cmxhc3Q7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0JCSAgICBjbWZsZ3MgPSAxOwotCQkgICAg aWYgKCF4Y21kc3JjCi0jaWZkZWYgQ0tfUkVDQUxMCi0JCQl8fCBmb3JjZV9hZGQKLSNlbmRpZiAv KiBDS19SRUNBTEwgKi8KLQkJCSkKLSAgCQkgICAgICBhZGRjbWQoY21kYnVmKTsKLQkJICAgIHJl dHVybihjbWZsZ3MpOwotCQl9Ci0gICAgICAgICAgICB9Ci0vKgotICBUaGlzIHNlY3Rpb24gaGFu ZGxlcyBpbnRlcmFjdGl2ZSBoZWxwLCBjb21wbGV0aW9uLCBlZGl0aW5nLCBhbmQgaGlzdG9yeS4K LSAgUmVhcnJhbmdlZCBhcyBhIHN3aXRjaCBzdGF0ZW1lbnQgZXhlY3V0ZWQgb25seSBpZiB3ZSdy ZSBhdCB0b3AgbGV2ZWwgc2luY2UKLSAgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW55IG9mIHRoaXMg d2l0aGluIGNvbW1hbmQgZmlsZXMgYW5kIG1hY3JvczogQXVnIDIwMDAuCi0gIEp1biAyMDAxOiBF dmVuIGlmIGF0IHRvcCBsZXZlbCwgc2tpcCB0aGlzIGlmIHRoZSBjaGFyYWN0ZXIgd2FzIGZldGNo ZWQgZnJvbQotICB0aGUgcmVwYXJzZSBvciByZWNhbGwgYnVmZmVyLCBvciBpZiBzdGRpbiBpcyBy ZWRpcmVjdGVkLgotKi8KLQkgICAgaWYgKCh4Y21kc3JjID09IDAJCS8qIE9ubHkgYXQgdG9wIGxl dmVsICovCi0jaWZuZGVmIE5PU1BMCi0JCXx8IGFza2ZsYWcJCS8qIG9yIHVzZXIgaXMgdHlwaW5n IEFTSyByZXNwb25zZSAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0JCSApICYmIGNoc3JjICE9IDAg JiYgcmVhbHR0eSkgeyAvKiBmcm9tIHRoZSByZWFsIGtleWJvYXJkICovCi0KLS8qIFVzZSBBTlNJ IC8gVlQxMDAgdXAgYW5kIGRvd24gYXJyb3cga2V5cyBmb3IgY29tbWFuZCByZWNhbGwuICAqLwot Ci0JCWlmIChpc2VzYyAmJiAoCi0jaWZkZWYgSUtTRAotCQkgICAgaW5zZXJ2ZXIKLSNlbHNlCi0J CSAgICAwCi0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIFVTRV9BUlJPV0tFWVMKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHx8IDEKLSNlbmRpZiAvKiBVU0VfQVJST1dLRVlTICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICkgewkJ LyogQSByZWFsIEVTQyB3YXMgdHlwZWQgKi8KLQkJICAgIGludCB4OwotCQkgICAgbXNsZWVwKDIw MCk7CS8qIFdhaXQgMS81IHNlYyAqLwotCQkgICAgeCA9IGNtZGNvbmNoaygpOwkvKiBXYXMgaXQg Zm9sbG93ZWQgYnkgYW55dGhpbmc/ICovCi0JCSAgICBkZWJ1ZyhGMTAxLCJBcnJvd2tleSBFU0Mg Y21kY29uY2hrIiwiIix4KTsKLQotCQkgICAgaWYgKHggPiAxKSB7CS8qIElmIGZvbGxvd2VkIGJ5 IGF0IGxlYXN0IDIgY2hhcnMgKi8KLQkJCWludCBjMjsKLQkJCWMyID0gY21kZ2V0YygwKTsgLyog R2V0IHRoZSBmaXJzdCBvbmUgKi8KLQkJCWRlYnVnKEYxMDEsIkFycm93a2V5IEVTQyBjMiIsIiIs YzIpOwotCi0JCQlpZiAoYzIgIT0gJ1snICYmIGMyICE9ICdPJykgeyAvKiBJZiBub3QgWyBvciBP ICovCi0JCQkgICAgcHVzaGMgPSBjMjsJLyogUHVzaCBpdCBhbmQgdGFrZSB0aGUgRVNDIHNvbG8g Ki8KLQkJCX0gZWxzZSB7Ci0JCQkgICAgYzIgPSBjbWRnZXRjKDApOyAvKiBHZXQgdGhlIHNlY29u ZCBvbmUgKi8KLQkJCSAgICBkZWJ1ZyhGMTAxLCJBcnJvd2tleSBFU0MgYzMiLCIiLGMyKTsKLQkJ CSAgICBzd2l0Y2ggKGMyKSB7Ci0jaWZuZGVmIE5PUkVDQUxMCi0JCQkgICAgICBjYXNlICdBJzoJ LyogVXAgKi8KLQkJCQljID0gQkVMOwotCQkJCWMgPSBDX1VQOwotCQkJCWJyZWFrOwotCQkJICAg ICAgY2FzZSAnQic6CS8qIERvd24gKi8KLQkJCQljID0gQkVMOwotCQkJCWMgPSBDX0ROOwotCQkJ CWJyZWFrOwotCQkJICAgICAgY2FzZSAnQyc6CS8qIFJpZ2h0ICovCi0JCQkgICAgICBjYXNlICdE JzoJLyogTGVmdCAqLwotI2Vsc2UKLQkJCSAgICAgIGRlZmF1bHQ6Ci0jZW5kaWYgLyogTk9SRUNB TEwgKi8KLQkJCQljID0gQkVMOyAvKiBXZSBkb24ndCB1c2UgdGhlc2UgeWV0ICovCi0JCQkJYnJl YWs7Ci0JCQkgICAgfQotCQkJfQotCQkgICAgfQotCQl9Ci0KLQkJc3dpdGNoIChjKSB7Ci0JCSAg Y2FzZSAnPyc6CQkvKiA/LUhlbHAgKi8KLSNpZm5kZWYgTk9TUEwKLQkJICAgIGlmIChhc2tmbGFn KQkvKiBObyBoZWxwIGluIEFTSyByZXNwb25zZSAqLwotCQkgICAgICBicmVhazsKLSNlbmRpZiAv KiBOT1NQTCAqLwotCQkgICAgaWYgKHF1b3RpbmcKLQkJCSYmICFrc3RhcnRhY3RpdmUKLQkJCSYm ICFjb21tZW50Ci0JCQkpIHsKLQkJCWNtZGVjaG8oKGNoYXIpIGMsIDApOwotCQkJKmJwID0gTlVM OwotCQkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKLQkJCSAgICBkZWJ1ZyhGMTExLCJndHdvcmQg dG9vIGxvbmcgPyIscHAsc3RybGVuKHBwKSk7Ci0JCQkgICAgcHJpbnRmKCI/VG9vIGxvbmdcbiIp OwotCQkJICAgIHJldHVybigtOSk7Ci0JCQl9Ci0JCQlxbWZsYWcgPSAxOwotCQkJcmV0dXJuKGNt ZmxncyA9IDMpOwotCQkgICAgfQotCi0JCSAgY2FzZSBFU0M6CQkvKiBFc2Mgb3IgVGFiIGNvbXBs ZXRpb24gKi8KLQkJICAgIGlmICghY29tbWVudCkgewotCQkJKmJwID0gTlVMOwotCQkJaWYgKHNl dGF0bShwcCwwKSA8IDApIHsKLQkJCSAgICBkZWJ1ZyhGMTExLCJndHdvcmQgdG9vIGxvbmcgRXNj IixwcCxzdHJsZW4ocHApKTsKLQkJCSAgICBwcmludGYoIj9Ub28gbG9uZ1xuIik7Ci0JCQkgICAg cmV0dXJuKC05KTsKLQkJCX0KLQkJCWVzZmxhZyA9IDE7Ci0JCQlyZXR1cm4oY21mbGdzID0gMik7 Ci0JCSAgICB9IGVsc2UgewotCQkJYmxlZXAoQlBfV0FSTik7Ci0JCQljb250aW51ZTsKLQkJICAg IH0KLQotCQkgIGNhc2UgQlM6CQkvKiBDaGFyYWN0ZXIgZGVsZXRpb24gKi8KLQkJICBjYXNlIFJV QjoKLQkJICAgIGlmIChicCA+IGNtZGJ1ZikgewkvKiBJZiBzdGlsbCBpbiBidWZmZXIuLi4gKi8K LQkJCWNtZGNoYXJkZWwoKTsJLyogZXJhc2UgaXQuICovCi0JCQlicC0tOwkJLyogcG9pbnQgYmVo aW5kIGl0LCAqLwotCQkJaWYgKCpicCA9PSBsYnJhY2UpIGJyYWNlbHZsLS07IC8qIEFkanVzdCBi cmFjZSBjb3VudCAqLwotCQkJaWYgKCpicCA9PSByYnJhY2UpIGJyYWNlbHZsKys7Ci0JCQlpZiAo KCpicCA9PSBTUCkgJiYgLyogRmxhZyBpZiBjdXJyZW50IGZpZWxkIGdvbmUgKi8KLQkJCSAgICAo KnBwICE9IGxicmFjZSB8fCBicmFjZWx2bCA9PSAwKSkKLQkJCSAgaW53b3JkID0gMDsKLQkJCSpi cCA9IE5VTDsJLyogRXJhc2UgY2hhcmFjdGVyIGZyb20gYnVmZmVyLiAqLwotCQkgICAgfSBlbHNl IHsJCS8qIE90aGVyd2lzZSwgKi8KLQkJCWJsZWVwKEJQX1dBUk4pOwotCQkJY21yZXMoKTsJLyog YW5kIHN0YXJ0IHBhcnNpbmcgYSBuZXcgY29tbWFuZC4gKi8KLQkJCSpicCA9ICphdG1idWYgPSBO VUw7Ci0JCSAgICB9Ci0JCSAgICBpZiAocHAgPCBicCkKLQkJICAgICAgY29udGludWU7Ci0JCSAg ICBlbHNlCi0JCSAgICAgIHJldHVybihjbWZsZ3MgPSAtMSk7Ci0KLQkJICBjYXNlIExERUw6CQkv KiBeVSwgbGluZSBkZWxldGlvbiAqLwotCQkgICAgd2hpbGUgKChicC0tKSA+IGNtZGJ1Zikgewot CQkJY21kY2hhcmRlbCgpOwotCQkJKmJwID0gTlVMOwotCQkgICAgfQotCQkgICAgY21yZXMoKTsJ CS8qIFJlc3RhcnQgdGhlIGNvbW1hbmQuICovCi0JCSAgICAqYnAgPSAqYXRtYnVmID0gTlVMOwot CQkgICAgaW53b3JkID0gMDsKLQkJICAgIHJldHVybihjbWZsZ3MgPSAtMSk7Ci0KLQkJICBjYXNl IFdERUw6CQkvKiBeVywgd29yZCBkZWxldGlvbiAqLwotCQkgICAgaWYgKGJwIDw9IGNtZGJ1Zikg ewkvKiBCZWVwIGlmIG5vdGhpbmcgdG8gZGVsZXRlICovCi0JCQlibGVlcChCUF9XQVJOKTsKLQkJ CWNtcmVzKCk7Ci0JCQkqYnAgPSAqYXRtYnVmID0gTlVMOwotCQkJcmV0dXJuKGNtZmxncyA9IC0x KTsKLQkJICAgIH0KLQkJICAgIGJwLS07Ci0JCSAgICAvKiBCYWNrIHVwIG92ZXIgYW55IHRyYWls aW5nIG5vbmFscGhhbnVtcyAqLwotCQkgICAgLyogVGhpcyBpcyBkZXBlbmRlbnQgb24gQVNDSUkg Y29sbGF0aW5nIHNlcXVlbmNlICovCi0JCSAgICAvKiBidXQgaXNhbHBoYW51bSgpIGlzIG5vdCBh dmFpbGFibGUgZXZlcnl3aGVyZS4gKi8KLQkJICAgIGZvciAoIDsKLQkJCSAoYnAgPj0gY21kYnVm KSAmJgotCQkJICgoKmJwIDwgJzAnKSB8fAotCQkJICgoKmJwID4gJzknKSAmJiAoKmJwIDwgJ0An KSkgfHwKLQkJCSAoKCpicCA+ICdaJykgJiYgKCpicCA8ICdhJykpIHx8Ci0JCQkgKCpicCA+ICd6 JykpOwotCQkJIGJwLS0KLQkJCSApIHsKLQkJCWNtZGNoYXJkZWwoKTsKLQkJCSpicCA9IE5VTDsK LQkJICAgIH0KLQkJICAgIC8qIE5vdyBkZWxldGUgYmFjayB0byByaWdodG1vc3QgcmVtYWluaW5n IG5vbmFscGhhbnVtICovCi0JCSAgICBmb3IgKCA7IChicCA+PSBjbWRidWYpICYmICgqYnApIDsg YnAtLSkgewotCQkJaWYgKCgqYnAgPCAnMCcpIHx8Ci0JCQkgICAgKCpicCA+ICc5JyAmJiAqYnAg PCAnQCcpIHx8Ci0JCQkgICAgKCpicCA+ICdaJyAmJiAqYnAgPCAnYScpIHx8Ci0JCQkgICAgKCpi cCA+ICd6JykpCi0JCQkgIGJyZWFrOwotCQkJY21kY2hhcmRlbCgpOwotCQkJKmJwID0gTlVMOwot CQkgICAgfQotCQkgICAgYnArKzsKLQkJICAgIGlud29yZCA9IDA7Ci0JCSAgICByZXR1cm4oY21m bGdzID0gLTEpOwotCi0JCSAgY2FzZSBSRElTOiB7CQkvKiBeUiwgcmVkaXNwbGF5ICovCi0JCSAg ICAgIGNoYXIgKmNweDsgY2hhciBjeDsKLQkJICAgICAgKmJwID0gTlVMOwotCQkgICAgICBwcmlu dGYoIlxuJXMiLGNtcHJvbSk7Ci0JCSAgICAgIGNweCA9IGNtZGJ1ZjsKLQkJICAgICAgd2hpbGUg KChjeCA9ICpjcHgrKykpIHsKLQkJCSAgY21kZWNobyhjeCwwKTsKLQkJICAgICAgfQotCQkgICAg ICBmZmx1c2goc3Rkb3V0KTsKLQkJICAgICAgY29udGludWU7Ci0JCSAgfQotI2lmbmRlZiBOT0xB U1RGSUxFCi0JCSAgY2FzZSBWVDoKLQkJICAgIGlmIChsYXN0ZmlsZSkgewotCQkJcHJpbnRmKCIl cyAiLGxhc3RmaWxlKTsKLSNpZmRlZiBHRU1ET1MKLQkJCWZmbHVzaChzdGRvdXQpOwotI2VuZGlm IC8qIEdFTURPUyAqLwotCQkJaW53b3JkID0gY21mbGdzID0gMDsKLQkJCWFkZGJ1ZihsYXN0Zmls ZSk7CS8qIFN1cHBseSBkZWZhdWx0LiAqLwotCQkJaWYgKHNldGF0bShsYXN0ZmlsZSwwKSA8IDAp IHsKLQkJCSAgICBwcmludGYoIkxhc3QgbmFtZSB0b28gbG9uZ1xuIik7Ci0JCQkgICAgaWYgKG5w KSBmcmVlKG5wKTsKLQkJCSAgICByZXR1cm4oLTkpOwotCQkJfQotCQkgICAgfSBlbHNlIHsJCS8q IE5vIGRlZmF1bHQgKi8KLQkJCWJsZWVwKEJQX1dBUk4pOwotCQkgICAgfQotCQkgICAgcmV0dXJu KDApOwotI2VuZGlmCS8qIE5PTEFTVEZJTEUgKi8KLQkJfQotCi0jaWZkZWYgQ0tfUkVDQUxMCi0J CWlmIChvbl9yZWNhbGwgJiYJLyogUmVhZGluZyBjb21tYW5kcyBmcm9tIGtleWJvYXJkPyAqLwot CQkgICAgKGNtX3JlY2FsbCA+IDApICYmCS8qIFNhdmluZyBjb21tYW5kcz8gKi8KLQkJICAgIChj ID09IENfVVAgfHwgYyA9PSBDX1VQMikpIHsgLyogR28gdXAgb25lICovCi0JCSAgICBpZiAobGFz dF9yZWNhbGwgPT0gMiAmJiBjdXJyZW50ID4gMCkKLQkJICAgICAgY3VycmVudC0tOwotCQkgICAg aWYgKGN1cnJlbnQgPCAwKSB7CS8qIE5vd2hlcmUgdG8gZ28sICovCi0JCQlibGVlcChCUF9XQVJO KTsKLQkJCWNvbnRpbnVlOwotCQkgICAgfQotCQkgICAgaWYgKHJlY2FsbFtjdXJyZW50XSkgeyAv KiBXZSBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCAqLwotCQkJd2hpbGUgKChicC0tKSA+IGNtZGJ1 ZikgeyAvKiBFcmFzZSBjdXJyZW50IGxpbmUgKi8KLQkJCSAgICBjbWRjaGFyZGVsKCk7Ci0JCQkg ICAgKmJwID0gTlVMOwotCQkJfQotCQkJY2tzdHJuY3B5KGNtZGJ1ZixyZWNhbGxbY3VycmVudF0s Q01EQkwpOwotI2lmZGVmIE9TSwotCQkJZmZsdXNoKHN0ZG91dCk7Ci0JCQl3cml0ZShmaWxlbm8o c3Rkb3V0KSwgIlxyIiwgMSk7Ci0JCQlwcmludGYoIiVzJXMiLGNtcHJvbSxjbWRidWYpOwotI2Vs c2UKLQkJCXByaW50ZigiXHIlcyVzIixjbXByb20sY21kYnVmKTsKLSNlbmRpZiAvKiBPU0sgKi8K LQkJCWN1cnJlbnQtLTsKLQkJICAgIH0KLQkJICAgIGxhc3RfcmVjYWxsID0gMTsKLQkJICAgIHJl dHVybihjbWZsZ3MgPSAtMSk7IC8qIEZvcmNlIGEgcmVwYXJzZSAqLwotCQl9Ci0JCWlmIChvbl9y ZWNhbGwgJiYJLyogUmVhZGluZyBjb21tYW5kcyBmcm9tIGtleWJvYXJkPyAqLwotCQkgICAgKGNt X3JlY2FsbCA+IDApICYmCS8qIFNhdmluZyBjb21tYW5kcz8gKi8KLQkJICAgIChjID09IENfRE4p KSB7CS8qIERvd24gb25lICovCi0JCSAgICBpbnQgeCA9IDE7Ci0JCSAgICBpZiAobGFzdF9yZWNh bGwgPT0gMSkKLQkJICAgICAgeCsrOwotCQkgICAgaWYgKGN1cnJlbnQgKyB4ID4gcmxhc3QpIHsg LyogQWxyZWFkeSBhdCBib3R0b20sIGJlZXAgKi8KLQkJCWJsZWVwKEJQX1dBUk4pOwotCQkJY29u dGludWU7Ci0JCSAgICB9Ci0JCSAgICBjdXJyZW50ICs9IHg7CS8qIE9LIHRvIGdvIGRvd24gKi8K LQkJICAgIGlmIChyZWNhbGxbY3VycmVudF0pIHsKLQkJCXdoaWxlICgoYnAtLSkgPiBjbWRidWYp IHsgLyogRXJhc2UgY3VycmVudCBsaW5lICovCi0JCQkgICAgY21kY2hhcmRlbCgpOwotCQkJICAg ICpicCA9IE5VTDsKLQkJCX0KLQkJCWNrc3RybmNweShjbWRidWYscmVjYWxsW2N1cnJlbnRdLENN REJMKTsKLSNpZmRlZiBPU0sKLQkJCWZmbHVzaChzdGRvdXQpOwotCQkJd3JpdGUoZmlsZW5vKHN0 ZG91dCksICJcciIsIDEpOwotCQkJcHJpbnRmKCIlcyVzIixjbXByb20sY21kYnVmKTsKLSNlbHNl Ci0JCQlwcmludGYoIlxyJXMlcyIsY21wcm9tLGNtZGJ1Zik7Ci0jZW5kaWYgLyogT1NLICovCi0J CQlsYXN0X3JlY2FsbCA9IDI7Ci0JCQlyZXR1cm4oY21mbGdzID0gLTEpOyAvKiBGb3JjZSByZXBh cnNlICovCi0JCSAgICB9Ci0JCX0KLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLQkgICAgfQotCi0J ICAgIGlmIChjIDwgU1AgJiYgcXVvdGUgPT0gMCkgeyAvKiBBbnkgb3RoZXIgdW5xdW90ZWQgY29u dHJvbCBjaGFyICovCi0JCWlmICghY2hzcmMpIHsJCS8qIElmIGNtZCBmaWxlLCBwb2ludCBwYXN0 IGl0ICovCi0JCSAgICBicCsrOwotCQl9IGVsc2UgewotCQkgICAgYmxlZXAoQlBfV0FSTik7Ci0J CX0KLQkJY29udGludWU7CQkvKiBjb250aW51ZSwgZG9uJ3QgcHV0IGluIGJ1ZmZlciAqLwotCSAg ICB9Ci0JICAgIGxpbmViZWdpbiA9IDA7CQkvKiBOb3QgYXQgYmVnaW5uaW5nIG9mIGxpbmUgKi8K LSNpZmRlZiBCRUJPWAotCSAgICBpZiAoZWNob2YpIHsKLSAgICAgICAgICAgICAgICBjbWRlY2hv KChjaGFyKSBjLCAwKTsJLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KLSAgICAgICAgICAgICAg ICBmZmx1c2ggKHN0ZG91dCk7Ci0gICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGVycik7Ci0gICAg ICAgICAgICB9Ci0jZWxzZQotI2lmZGVmIE5PU1BMCi0gICAgICAgICAgICBpZiAoZWNob2YgfHwg Y2hzcmMpCi0jZWxzZQotICAgICAgICAgICAgaWYgKGVjaG9mIHx8IChlY2hvc3RhcnMgJiYgY2hz cmMpKQotI2VuZGlmCS8qIE5PU1BMICovCi0JICAgICAgY21kZWNobygoY2hhcikgYywgMCk7CS8q IEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCi0jZW5kaWYgLyogQkVCT1ggKi8KLSAgICAgICAgfSBl bHNlIHsJCQkvKiBUaGlzIGNoYXJhY3RlciB3YXMgcXVvdGVkLiAqLwotCSAgICBpbnQgcWYgPSAx OwotCSAgICBxdW90ZSA9IDA7CQkJLyogVW5zZXQgdGhlIHF1b3RlIGZsYWcuICovCi0JICAgIC8q IGRlYnVnKEYwMDAsImd0d29yZCBxdW90ZSAwIiwiIixjKTsgKi8KLQkgICAgLyogUXVvdGUgY2hh cmFjdGVyIGF0IHRoaXMgbGV2ZWwgaXMgb25seSBmb3IgU1AsID8sIGFuZCBjb250cm9scyAqLwot ICAgICAgICAgICAgLyogSWYgYW55dGhpbmcgZWxzZSB3YXMgcXVvdGVkLCBsZWF2ZSBxdW90ZSBp biwgYW5kIGxldCAqLwotCSAgICAvKiB0aGUgY29tbWFuZC1zcGVjaWZpYyBwYXJzaW5nIHJvdXRp bmVzIGhhbmRsZSBpdCwgZS5nLiBcMDA3ICovCi0JICAgIGlmIChjID4gMzIgJiYgYyAhPSAnPycg JiYgYyAhPSBSVUIgJiYgY2hzcmMgIT0gMCkgewotCQkvKiBkZWJ1ZyhGMDAwLCJndHdvcmQgcXVv dGUgMSIsIiIsYyk7ICovCi0JCSpicCsrID0gQ01EUTsJCS8qIERlcG9zaXQgXCBpZiBpdCBjYW1l IGZyb20gdHR5ICovCi0JCXFmID0gMDsJCQkvKiBhbmQgZG9uJ3QgZXJhc2UgaXQgZnJvbSBzY3Jl ZW4gKi8KLQkJbGluZWJlZ2luID0gMDsJCS8qIE5vdCBhdCBiZWdpbm5pbmcgb2YgbGluZSAqLwot I2lmZGVmIEJTX0RJUlNFUAotLyoKLSAgVGhpcyBpcyBhIGhhY2sgdG8gaGFuZGxlICJjZCBcIiBv ciAiY2QgZm9vXCIgb24gT1MvMiBhbmQgc2ltaWxhciBzeXN0ZW1zLgotICBJZiB3ZSB3ZXJlIGNh bGxlZCBmcm9tIGNtZGlyKCkgYW5kIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgd2FzIHRoZSBxdW90 ZQotICBjaGFyYWN0ZXIsIGkuZS4gYmFja3NsYXNoLCBhbmQgdGhpcyBjaGFyYWN0ZXIgaXMgdGhl IGNvbW1hbmQgdGVybWluYXRvciwKLSAgdGhlbiB3ZSBzdHVmZiBhbiBleHRyYSBiYWNrc2xhc2gg aW50byB0aGUgYnVmZmVyIHdpdGhvdXQgZWNob2luZywgdGhlbgotICB3ZSBzdHVmZiB0aGUgY2Fy cmlhZ2UgcmV0dXJuIGJhY2sgaW4gYWdhaW4sIGFuZCBnbyBiYWNrIGFuZCBwcm9jZXNzIGl0LAot ICB0aGlzIHRpbWUgd2l0aCB0aGUgcXVvdGUgZmxhZyBvZmYuCi0qLwotCSAgICB9IGVsc2UgaWYg KGRpcm5hbWZsZyAmJiAoYyA9PSBDUiB8fCBjID09IExGIHx8IGMgPT0gU1ApKSB7Ci0JCS8qIGRl YnVnKEYwMDAsImd0d29yZCBxdW90ZSAyIiwiIixjKTsgKi8KLQkJKmJwKysgPSBDTURROwotCQls aW5lYmVnaW4gPSAwOwkJLyogTm90IGF0IGJlZ2lubmluZyBvZiBsaW5lICovCi0JCSpicCA9IChj ID09IFNQID8gU1AgOiBDUik7Ci0JCWdvdG8gQ01ESVJQQVJTRTsKLSNlbmRpZiAvKiBCU19ESVJT RVAgKi8KLQkgICAgfQotI2lmZGVmIEJFQk9YCi0JICAgIGlmIChlY2hvZikgewotICAgICAgICAg ICAgICAgIGNtZGVjaG8oKGNoYXIpIGMsIHFmKTsJLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8K LSAgICAgICAgICAgICAgICBmZmx1c2ggKHN0ZG91dCk7Ci0gICAgICAgICAgICAgICAgZmZsdXNo KHN0ZGVycik7Ci0gICAgICAgICAgICB9Ci0jZWxzZQotCSAgICBpZiAoZWNob2YpIGNtZGVjaG8o KGNoYXIpIGMsIHFmKTsgLyogTm93IGVjaG8gcXVvdGVkIGNoYXJhY3RlciAqLwotI2VuZGlmIC8q IEJFQk9YICovCi0JICAgIC8qIGRlYnVnKEYxMTEsImd0d29yZCBxdW90ZSIsY21kYnVmLGMpOyAq LwotCX0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIGlmIChlY2hvZikgY21kZWNobygoY2hhcikg YyxxdW90ZSk7IC8qIEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCi0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgICBpZiAoIWNvbW1lbnQpIGlud29yZCA9IDE7CS8qIEZsYWcgd2UncmUgaW4gYSB3 b3JkLiAqLwotCWlmIChxdW90ZSkgY29udGludWU7CQkvKiBEb24ndCBkZXBvc2l0IHF1b3RlIGNo YXJhY3Rlci4gKi8KLSAgICAgICAgaWYgKGMgIT0gTkwpIHsJCQkvKiBEZXBvc2l0IGNvbW1hbmQg Y2hhcmFjdGVyLiAqLwotCSAgICAqYnArKyA9IChjaGFyKSBjOwkJLyogYW5kIG1ha2Ugc3VyZSB0 aGVyZSBpcyBhIE5VTCAqLwotI2lmZGVmIENPTU1FTlQKLQkgICAgKmJwID0gTlVMOwkJCS8qIGFm dGVyIGl0ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCX0KLSAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgYmlnIHdoaWxlICovCi0gICAgYmxlZXAoQlBf V0FSTik7Ci0gICAgcHJpbnRmKCI/Q29tbWFuZCB0b28gbG9uZywgbWF4aW11bSBsZW5ndGg6ICVk LlxuIixDTURCTCk7Ci0gICAgY21mbGdzID0gLTI7Ci0gICAgcmV0dXJuKC05KTsKLX0KLQotLyog VXRpbGl0eSBmdW5jdGlvbnMgKi8KLQotLyogQSBEIEQgQiBVIEYgIC0tIEFkZCB0aGUgc3RyaW5n IHBvaW50ZWQgdG8gYnkgY3AgdG8gdGhlIGNvbW1hbmQgYnVmZmVyICAqLwotCi1zdGF0aWMgaW50 Ci1hZGRidWYoY3ApIGNoYXIgKmNwOyB7Ci0gICAgaW50IGxlbiA9IDA7Ci0gICAgd2hpbGUgKCgq Y3AgIT0gTlVMKSAmJiAoYnAgPCBjbWRidWYrQ01EQkwpKSB7Ci0gICAgICAgICpicCsrID0gKmNw Kys7ICAgICAgICAgICAgICAgICAgLyogQ29weSBhbmQgKi8KLSAgICAgICAgbGVuKys7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBjb3VudCB0aGUgY2hhcmFjdGVycy4gKi8KLSAgICB9Ci0g ICAgKmJwKysgPSBTUDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHV0IGEgc3BhY2UgYXQg dGhlIGVuZCAqLwotICAgICpicCA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRl cm1pbmF0ZSB3aXRoIGEgbnVsbCAqLwotICAgIG5wID0gYnA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFVwZGF0ZSB0aGUgbmV4dC1maWVsZCBwb2ludGVyICovCi0gICAgY21icHRyID0g bnA7Ci0gICAgcmV0dXJuKGxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHRo ZSBsZW5ndGggKi8KLX0KLQotLyogIFMgRSBUIEEgVCBNICAtLSAgRGVwb3NpdCBhIHRva2VuIGlu IHRoZSBhdG9tIGJ1ZmZlci4gICovCi0vKgotICBCcmVhayBvbiBzcGFjZSwgbmV3bGluZSwgY2Fy cmlhZ2UgcmV0dXJuLCBvciBOVUwuCi0gIENhbGwgd2l0aDoKLSAgICBjcCA9IFBvaW50ZXIgdG8g c3RyaW5nIHRvIGNvcHkgdG8gYXRvbSBidWZmZXIuCi0gICAgZmNvZGUgPSAwIG1lYW5zIGJyZWFr IG9uIHdoaXRlc3BhY2Ugb3IgRU9MLgotICAgIGZjb2RlID0gMSBtZWFucyBkb24ndCBicmVhayBv biBzcGFjZS4KLSAgICBmY29kZSA9IDIgbWVhbnMgYnJlYWsgb24gc3BhY2UsICc6Jywgb3IgJz0n LgotICAgIGZjb2RlID0gMyBtZWFucyBjb3B5IHRoZSB3aG9sZSBzdHJpbmcuCi0gIE51bGwtdGVy bWluYXRlIHRoZSByZXN1bHQuCi0gIFJldHVybiBsZW5ndGggb2YgdG9rZW4sIGFuZCBhbHNvIHNl dCBnbG9iYWwgImNjIiB0byB0aGlzIGxlbmd0aC4KLSAgUmV0dXJuIC0xIGlmIHRva2VuIHdhcyB0 b28gbG9uZy4KLSovCi1zdGF0aWMgaW50Ci1zZXRhdG0oY3AsZmNvZGUpIGNoYXIgKmNwOyBpbnQg ZmNvZGU7IHsKLSAgICBjaGFyICphcCwgKnhwLCAqZHFwID0gTlVMTCwgbGJyYWNlLCByYnJhY2U7 Ci0gICAgaW50IGJyYWNlbHZsID0gMCwgZHEgPSAwOwotCi0gICAgcmVnaXN0ZXIgY2hhciAqIHM7 Ci0gICAgcmVnaXN0ZXIgaW50IG4gPSAwOwotCi0gICAgaWYgKGNtZmxkZmxncyAmIDEpIHsJCS8q IEhhbmRsZSBncm91cGluZyAqLwotCWxicmFjZSA9ICcoJzsKLQlyYnJhY2UgPSAnKSc7Ci0gICAg fSBlbHNlIHsKLQlsYnJhY2UgPSAneyc7Ci0JcmJyYWNlID0gJ30nOwotICAgIH0KLSAgICBjYyA9 IDA7CQkJCS8qIENoYXJhY3RlciBjb3VudGVyICovCi0gICAgYXAgPSBhdG1idWY7CQkJLyogQWRk cmVzcyBvZiBhdG9tIGJ1ZmZlciAqLwotCi0gICAgcyA9IGNwOwotCi0gICAgd2hpbGUgKCpzKysp IG4rKzsJCQkvKiBTYXZlIGEgY2FsbCB0byBzdHJsZW4gKi8KLQotICAgIGlmIChuID4gQVRNQkwp IHsKLQlwcmludGYoIj9Db21tYW5kIGJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0JcmV0dXJuKC0xKTsK LSAgICB9Ci0gICAgLyogZGVidWcoRjExMSwic2V0YXRtIixjcCxuKTsgKi8KLSAgICBpZiAoY3Ag PT0gYXApIHsJCQkvKiBJbiBjYXNlIHNvdXJjZSBpcyBhdG9tIGJ1ZmZlciAqLwotCXhwID0gYXR5 YnVmOwkJCS8qIG1ha2UgYSBjb3B5ICovCi0jaWZkZWYgQ09NTUVOVAotCXN0cm5jcHkoeHAsYXAs QVRNQkwpOwkJLyogc28gd2UgY2FuIGNvcHkgaXQgYmFjaywgZWRpdGVkLiAqLwotCWNwID0geHA7 Ci0jZWxzZQotCXMgPSBhcDsKLQl3aGlsZSAoKCp4cCsrID0gKnMrKykpIDsJLyogV2UgYWxyZWFk eSBrbm93IGl0J3MgYmlnIGVub3VnaCAqLwotCWNwID0geHAgPSBhdHlidWY7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgIH0KLSAgICAqYXAgPSBOVUw7CQkJCS8qIFplcm8gdGhlIGF0b20gYnVm ZmVyICovCi0gICAgaWYgKGZjb2RlID09IDEpIHsJCQkvKiBUcmltIHRyYWlsaW5nIGJsYW5rcyAq LwotCXdoaWxlICgtLW4gPj0gMCAmJiBjcFtuXSA9PSBTUCkKLQkgIDsKLQljcFtuKzFdID0gTlVM OwotICAgIH0KLSAgICB3aGlsZSAoKmNwID09IFNQKSB7CQkJLyogVHJpbSBsZWFkaW5nIHNwYWNl cyAqLwotCWNwKys7Ci0Jbi0tOwotICAgIH0KLSAgICBpZiAoKmNwID09ICciJykgewkJCS8qIFN0 YXJ0cyB3aXRoIGRvdWJsZXF1b3RlPyAqLwotCWRxID0gMTsKLQlkcXAgPSBjcDsKLSAgICB9Ci0g ICAgd2hpbGUgKCpjcCkgewotICAgICAgICBpZiAoKmNwID09IGxicmFjZSkKLQkgIGJyYWNlbHZs Kys7Ci0gICAgICAgIGVsc2UgaWYgKCpjcCA9PSByYnJhY2UpCi0JICBicmFjZWx2bC0tOwotCWlm IChicmFjZWx2bCA8IDApCi0JICBicmFjZWx2bCA9IDA7Ci0JaWYgKGJyYWNlbHZsID09IDApIHsK LQkgICAgaWYgKGRxKSB7Ci0JCWlmICgqY3AgPT0gU1AgfHwgKmNwID09IEhUKSB7Ci0JCSAgICBp ZiAoY3AgPiBkcXArMSkgewotCQkJaWYgKCooY3AtMSkgPT0gJyInICYmICooY3AtMikgIT0gQ01E USkgewotCQkJICAgIGJyZWFrOwotCQkJfQotCQkgICAgfQotCQl9Ci0JICAgIH0gZWxzZSBpZiAo KCpjcCA9PSBTUCB8fCAqY3AgPT0gSFQpICYmIGZjb2RlICE9IDEgJiYgZmNvZGUgIT0gMykKLQkg ICAgICBicmVhazsKLQkgICAgaWYgKChmY29kZSA9PSAyKSAmJiAoKmNwID09ICc9JyB8fCAqY3Ag PT0gJzonKSkgYnJlYWs7Ci0JICAgIGlmICgoZmNvZGUgIT0gMykgJiYgKCpjcCA9PSBMRiB8fCAq Y3AgPT0gQ1IpKSBicmVhazsKLQl9Ci0gICAgICAgICphcCsrID0gKmNwKys7Ci0gICAgICAgIGNj Kys7Ci0gICAgfQotICAgICphcCA9IE5VTDsJCQkJLyogVGVybWluYXRlIHRoZSBzdHJpbmcuICov Ci0gICAgLyogZGVidWcoRjExMSwic2V0YXRtIHJlc3VsdCIsYXRtYnVmLGNjKTsgKi8KLSAgICBy ZXR1cm4oY2MpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gbGVuZ3RoLiAqLwot fQotCi0vKgotICBUaGVzZSBmdW5jdGlvbnMgYXR0ZW1wdCB0byBoaWRlIHN5c3RlbSBkZXBlbmRl bmNpZXMgZnJvbSB0aGUgbWFpbmxpbmUKLSAgY29kZSBpbiBndHdvcmQoKS4gIER1bW15IGFyZyBm b3IgY21kZ2V0YygpIG5lZWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCi0gIGNvbmluYygpLCB0 dGluYygpLCBldGMsIHNpbmNlIGEgcG9pbnRlciB0byB0aGlzIHJvdXRpbmUgY2FuIGJlIHBhc3Nl ZCBpbgotICBwbGFjZSBvZiB0aG9zZSB0byB0bl9kb29wKCkuCi0KLSAgTm8gbG9uZ2VyIHN0YXRp Yy4gIFVzZWQgYnkgYXNrbW9yZSgpLiAgRnJpIEF1ZyAyMCAxNTowMzozNCAxOTk5LgotKi8KLSNk ZWZpbmUgQ01EX0NPTklOQwkJCS8qIEhvdyB3ZSBnZXQga2V5Ym9hcmQgY2hhcnMgKi8KLQotaW50 Ci1jbWRnZXRjKHRpbWVsaW1pdCkgaW50IHRpbWVsaW1pdDsgewkvKiBHZXQgYSBjaGFyYWN0ZXIg ZnJvbSB0aGUgdHR5LiAqLwotICAgIGludCBjOwotI2lmZGVmIElLU0QKLSAgICBleHRlcm4gaW50 IGluc2VydmVyOwotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBDS19MT0dJTgotICAgIGV4dGVy biBpbnQgeF9sb2dnZWQ7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNpZmRlZiBUTkNPREUKLSAg ICBzdGF0aWMgaW50IGdvdF9jciA9IDA7Ci0gICAgZXh0ZXJuIGludCBja3hlY2g7Ci0gICAgaW50 IHR4ID0gMCwgaXNfdG4gPSAwOwotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0gICAgaWYgKHB1c2hj Ci0jaWZuZGVmIE5PU1BMCi0JJiYgIWFza2ZsYWcKLSNlbmRpZiAvKiBOT1NQTCAqLwotCSkgewot ICAgICAgICBkZWJ1ZyhGMTExLCJjbWRnZXRjKCkiLCJwdXNoYyIscHVzaGMpOwotCWMgPSBwdXNo YzsKLQlwdXNoYyA9IE5VTDsKLQlpZiAoeGNtZmRiICYmIGMgPT0gJz8nKQkJLyogRG9uJ3QgZWNo byA/IHR3aWNlIGlmIGNoYWluaW5nLiAqLwotCSAgY21kY2hhcmRlbCgpOwotCXJldHVybihjKTsK LSAgICB9Ci0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICB7Ci0JY2hhciBjaDsKLQljID0gZGduY2lu YigwLCZjaCwxKTsJCS8qIC0xIGlzIEVPRiwgLTIgVE8sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICogLWMgaXMgQU9TL1ZTIGVycm9yICovCi0JaWYgKGMgPT0gLTIp IHsJCQkvKiB0aW1lb3V0IHdhcyBlbmFibGVkPyAqLwotCSAgICByZXN0byhjaGFubmVsKDApKTsJ CS8qIHJlc2V0IHRpbWVvdXRzICovCi0JICAgIGMgPSBkZ25jaW5iKDAsJmNoLDEpOwkvKiByZXRy eSB0aGlzIG5vdyEgKi8KLQl9Ci0JaWYgKGMgPCAwKSByZXR1cm4oLTQpOwkJLyogRU9GIG9yIHNv bWUgZXJyb3IgKi8KLQllbHNlIGMgPSAoaW50KSBjaCAmIDAxNzc7CS8qIEdldCBjaGFyIHdpdGhv dXQgcGFyaXR5ICovCi0vKgllY2hvZiA9IDE7ICovCi0gICAgfQotI2Vsc2UgLyogTm90IGRhdGFn ZW5lcmFsICovCi0jaWZuZGVmIE1JTklYMgotICAgIGlmICgKLSNpZmRlZiBJS1NECi0JKCFsb2Nh bCAmJiBpbnNlcnZlcikgfHwKLSNlbmRpZiAvKiBJS1NEICovCi0JdGltZWxpbWl0ID4gMCkgewot I2lmZGVmIFROQ09ERQotICAgICAgICAgIEdFVE5FWFRDSDoKLSAgICAgICAgICAgIGlzX3RuID0g IXB1c2hjICYmICFsb2NhbCAmJiBzc3RlbG5ldDsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNpZmRl ZiBDT01NRU5UCi0JICAgIGMgPSBjb25pbmModGltZWxpbWl0ID4gMCA/IDEgOiAwKTsKLSNlbHNl IC8qIENPTU1FTlQgKi8KLQkgICAgLyogVGhpcyBpcyBsaWtlbHkgdG8gYnJlYWsgdGhlIGFza3Rp bWVvdXQuLi4gKi8KLQkgICAgYyA9IGNvbmluYyh0aW1lbGltaXQpOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQkgICAgLyogZGVidWcoRjEwMSwiY21kZ2V0YyBjb25pbmMiLCIiLGMpOyAqLwotI2lm ZGVmIFROQ09ERQotICAgICAgICAgICAgaWYgKGMgPj0gMCAmJiBpc190bikgewkvKiBTZXJ2ZXIt c2lkZSBUZWxuZXQgKi8KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLQkJICBjYXNlIElB QzoKLSAgICAgICAgICAgICAgICAgICAgLyogZGVidWcoRjExMSwiZ3R3b3JkIElBQyIsImMiLGMp OyAqLwotICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOwotICAgICAgICAgICAgICAgICAg ICBpZiAoKHR4ID0gdG5fZG9vcCgoQ0hBUikoYyAmIDB4ZmYpLGNreGVjaCxjb25pbmMpKSA9PSAw KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEdFVE5FWFRDSDsKLSAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIGlmICh0eCA8PSAtMSkgeyAvKiBJL08gZXJyb3IgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIHdhcyBhIGZhdGFsIEkvTyBlcnJvciB0aGVuIHR0 Y2xvcygpICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBoYXMgYmVlbiBjYWxsZWQg YW5kIHRoZSBuZXh0IEdFVE5FWFRDSCBhdHRlbXB0ICAqLwotICAgICAgICAgICAgICAgICAgICAg ICAgLyogd2lsbCBiZSAhaXNfdG4gc2luY2UgdHRjbG9zKCkgc2V0cyBzc3RlbG5ldCA9IDAgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwtMSk7IC8qIChvciByZXR1 cm4oLTQpPyAqLwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR4ID09IDEpIHsgLyog RUNITyBjaGFuZ2UgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNreGVjaCA9IGRweCA9IDE7 IC8qIEdldCBuZXh0IGNoYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gR0VUTkVY VENIOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR4ID09IDIpIHsgLyogRUNITyBj aGFuZ2UgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNreGVjaCA9IGRweCA9IDA7IC8qIEdl dCBuZXh0IGNoYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gR0VUTkVYVENIOwot ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR4ID09IDMpIHsgLyogUXVvdGVkIElBQyAq LwotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IDI1NTsJLyogcHJvY2VlZWQgd2l0aCBpdC4g Ki8KLSAgICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIElLU19PUFRJT04KLSAgICAgICAgICAg ICAgICAgICAgZWxzZSBpZiAodHggPT0gNCkgewkvKiBJS1MgU3RhdGUgQ2hhbmdlICovCi0gICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIEdFVE5FWFRDSDsKLSAgICAgICAgICAgICAgICAgICAg fQotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo dHggPT0gNikgewkvKiBSZW1vdGUgTG9nb3V0ICovCi0JCQlkb2V4aXQoR09PRF9FWElULDApOwot ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotCQkJZ290byBHRVRORVhUQ0g7CS8qIFVua25v d24sIGdldCBuZXh0IGNoYXIgKi8KLQkJICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgICAgY2FzZSBDUjoKLSAgICAgICAgICAg ICAgICAgICAgaWYgKCFURUxPUFRfVShURUxPUFRfQklOQVJZKSkgewotCQkJaWYgKGdvdF9jcikg ewotCQkJICAgIC8qIFRoaXMgbWVhbnMgdGhlIHNlbmRlciBpcyB2aW9sYXRpbmcgVGVsbmV0ICAg Ki8KLQkJCSAgICAvKiBwcm90b2NvbCBiZWNhdXNlIHdlIHJlY2VpdmVkIHR3byBDUnMgaW4gYSAg ICovCi0JCQkgICAgLyogcm93IHdpdGhvdXQgZ2V0dGluZyBlaXRoZXIgTEYgb3IgTlVMLiAgICAg ICAqLwotCQkJICAgIC8qIFRoaXMgd2lsbCBub3Qgc29sdmUgdGhlIHByb2JsZW0gYnV0IGl0ICAg ICAgKi8KLQkJCSAgICAvKiB3aWxsIGF0IGxlYXN0IGFsbG93IHR3byBDUnMgdG8gZG8gc29tZXRo aW5nICovCi0JCQkgICAgLyogd2hlcmVhcyBiZWZvcmUgdGhlIHVzZXIgd291bGQgaGF2ZSB0byBn dWVzcyAqLwotCQkJICAgIC8qIHRvIHNlbmQgTEYgb3IgTlVMIGFmdGVyIHRoZSBDUi4gICAgICAg ICAgICAgKi8KLQkJCSAgICBkZWJ1ZyhGMTAwLCJndHdvcmQgQ1IgdGVsbmV0IGVycm9yIiwiIiww KTsKLQkJCSAgICBjID0gTEY7Ci0JCQl9IGVsc2UgewotCQkJICAgIGRlYnVnKEYxMDAsImd0d29y ZCBza2lwcGluZyBDUiIsIiIsMCk7Ci0JCQkgICAgZ290X2NyID0gMTsJLyogUmVtZW1iZXIgYSBD UiB3YXMgcmVjZWl2ZWQgKi8KLQkJCSAgICBnb3RvIEdFVE5FWFRDSDsKLQkJCX0KLSAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsKLQkJCWRlYnVnKEYxMDAsImd0d29yZCBDUiB0byBMRiIsIiIs MCk7Ci0JCQljID0gTEY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIExGOgotICAgICAgICAgICAgICAgICAg ICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpKSB7Ci0JCQlnb3RfY3IgPSAwOwotCQkJZGVi dWcoRjEwMCwiZ3R3b3JkIExGIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK LQkJCWlmIChnb3RfY3IpIHsKLQkJCSAgICBnb3RfY3IgPSAwOwotCQkJICAgIGRlYnVnKEYxMDAs Imd0d29yZCBza2lwcGluZyBMRiIsIiIsMCk7Ci0JCQkgICAgZ290byBHRVRORVhUQ0g7Ci0JCQl9 Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICBjYXNlIE5VTDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFURUxPUFRf VShURUxPUFRfQklOQVJZKSAmJiBnb3RfY3IpIHsKLQkJCWMgPSBMRjsKLQkJCWRlYnVnKEYxMDAs Imd0d29yZCBOVUwgdG8gTEYiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot CQkJZGVidWcoRjEwMCwiZ3R3b3JkIE5VTCIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0jZWxzZSAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgICBjYXNlIENSOgotICAg ICAgICAgICAgICAgICAgICBpZiAoICFURUxPUFRfVShURUxPUFRfQklOQVJZKSAmJiBnb3RfY3Ig KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIG1lYW5zIHRoZSBzZW5kZXIgaXMg dmlvbGF0aW5nIFRlbG5ldCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2Nv bCBiZWNhdXNlIHdlIHJlY2VpdmVkIHR3byBDUnMgaW4gYSAgICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAvKiByb3cgd2l0aG91dCBnZXR0aW5nIGVpdGhlciBMRiBvciBOVUwuICAgICAgICov Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIHdpbGwgbm90IHNvbHZlIHRoZSBwcm9i bGVtIGJ1dCBpdCAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiB3aWxsIGF0IGxl YXN0IGFsbG93IHR3byBDUnMgdG8gZG8gc29tZXRoaW5nICovCi0gICAgICAgICAgICAgICAgICAg ICAgICAvKiB3aGVyZWFzIGJlZm9yZSB0aGUgdXNlciB3b3VsZCBoYXZlIHRvIGd1ZXNzICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAvKiB0byBzZW5kIExGIG9yIE5VTCBhZnRlciB0aGUgQ1Iu ICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJndHdv cmQgQ1IgdGVsbmV0IGVycm9yIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9jciA9IDE7CS8qIFJlbWVtYmVyIGEgQ1Igd2Fz IHJlY2VpdmVkICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg LyogZGVidWcoRjEwMCwiZ3R3b3JkIENSIHRvIExGIiwiIiwwKTsgKi8KLSAgICAgICAgICAgICAg ICAgICAgYyA9IExGOwotCQkgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIExGOgot ICAgICAgICAgICAgICAgICAgICBpZiAoZ290X2NyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBnb3RfY3IgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVidWcoRjEwMCwiZ3R3 b3JkIHNraXBwaW5nIExGIiwiIiwwKTsgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g R0VUTkVYVENIOwotICAgICAgICAgICAgICAgICAgICB9Ci0JCSAgICBicmVhazsKLSAgICAgICAg ICAgICAgICAgIGNhc2UgTlVMOgotICAgICAgICAgICAgICAgICAgICBpZiAoZ290X2NyKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOwotICAgICAgICAgICAgICAgICAgICAg ICAgLyogZGVidWcoRjEwMCwiZ3R3b3JkIHNraXBwaW5nIE5VTCIsIiIsMCk7ICovCi0gICAgICAg ICAgICAgICAgICAgICAgICBnb3RvIEdFVE5FWFRDSDsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAg ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwi Z3R3b3JkIE5VTCIsIiIsMCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSNpZmRlZiBJS1NECi0JCSAgY2FzZSBFVFg6CQkvKiBDdHJsLUMuLi4gKi8KLSAgICAgICAgICAg ICAgICAgIGNhc2UgRU9UOgkJLyogRU9UID0gRU9GICovCi0gICAgICAgICAgICAgICAgICAgICAg aWYgKGluc2VydmVyCi0jaWZkZWYgQ0tfTE9HSU4KLQkJCSAgJiYgIXhfbG9nZ2VkCi0jZW5kaWYg LyogQ0tfTE9HSU4gKi8KLQkJCSAgKQotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4o LTQpOwotCQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogSUtTRCAqLwotCQkgIGRlZmF1bHQ6Ci0gICAg ICAgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICB9Ci0jZW5kaWYgLyogVE5DT0RFICovCi0gICAgfSBlbHNlIHsKLSNpZmRlZiBPUzIKLQlj ID0gY29uaW5jKDApOwotI2Vsc2UgLyogT1MyICovCi0jaWZkZWYgQ01EX0NPTklOQwotI3VuZGVm IENNRF9DT05JTkMKLSNlbmRpZiAvKiBDTURfQ09OSU5DICovCi0JYyA9IGdldGNoYXIoKTsKLSNl bmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0jZWxzZSAgLyogTUlOSVgyICovCi0jdW5kZWYgZ2V0Ywot I2lmZGVmIENNRF9DT05JTkMKLSN1bmRlZiBDTURfQ09OSU5DCi0jZW5kaWYgLyogQ01EX0NPTklO QyAqLwotICAgIGMgPSBnZXRjKHN0ZGluKTsKLSAgICAvKiBkZWJ1ZyhGMTAxLCJjbWRnZXRjIGdl dGMiLCIiLGMpOyAqLwotI2VuZGlmIC8qIE1JTklYMiAqLwotI2lmZGVmIFJUVQotICAgIGlmIChy dHVfYnVnKSB7Ci0jaWZkZWYgQ01EX0NPTklOQwotI3VuZGVmIENNRF9DT05JTkMKLSNlbmRpZiAv KiBDTURfQ09OSU5DICovCi0JYyA9IGdldGNoYXIoKTsJCQkvKiBSVFUgZG9lc24ndCBkaXNjYXJk IHRoZSBeWiAqLwotCXJ0dV9idWcgPSAwOwotICAgIH0KLSNlbmRpZiAvKiBSVFUgKi8KLSNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLwotICAgIHJldHVybihjKTsJCQkJLyogUmV0dXJuIHdoYXQgd2Ug Z290ICovCi19Ci0KLS8qICNpZmRlZiBVU0VfQVJST1dLRVlTICovCi0KLS8qIE1lY2hhbmlzbSB0 byB1c2UgZm9yIHBlZWtpbmcgaW50byBzdGRpbiBidWZmZXIgKi8KLQotI2lmbmRlZiBVU0VfRklM RV9DTlQJCQkvKiBzdGRpbi0+X19jbnQgKi8KLSNpZm5kZWYgVVNFX0ZJTEVfX0NOVAkJCS8qIE5v dGU6IHR3byB1bmRlcnNjb3JlcyAqLwotI2lmZGVmIEhQVVgJCQkJLyogSFBVWCA3LTExICovCi0j aWZuZGVmIEhQVVg1Ci0jaWZuZGVmIEhQVVg2Ci0jZGVmaW5lIFVTRV9GSUxFX19DTlQKLSNlbmRp ZiAvKiBIUFVYNiAqLwotI2VuZGlmIC8qIEhQVVg1ICovCi0jZWxzZQotI2lmZGVmIEFOWVNDTwkJ CQkvKiBTQ08gVU5JWCwgT1NSNSwgVW5peHdhcmUsIGV0YyAqLwotI2lmbmRlZiBPTERfVU5JWFdB UkUJCQkvKiBCdXQgbm90IFVuaXh3YXJlIDEueCBvciAyLjAgKi8KLSNpZm5kZWYgVU5JWFdBUkUy CQkJLyogb3IgMi4xLjAgKi8KLSNkZWZpbmUgVVNFX0ZJTEVfX0NOVAotI2VuZGlmIC8qIFVOSVhX QVJFMiAqLwotI2VuZGlmIC8qIE9MRF9VTklYV0FSRSAqLwotI2VuZGlmIC8qIEFOWVNDTyAqLwot I2VuZGlmIC8qIEhQVVggKi8KLSNlbmRpZiAvKiBVU0VfRklMRV9fQ05UICovCi0jZW5kaWYgLyog VVNFX0ZJTEVfQ05UICovCi0KLSNpZm5kZWYgVVNFX0ZJTEVfUgkJCS8qIHN0ZGluLT5fciAqLwot I2lmbmRlZiBVU0VfRklMRV9DTlQKLSNpZm5kZWYgVVNFX0ZJTEVfX0NOVAotI2lmZGVmIEJTRDQ0 CQkJCS8qIHtGcmVlLE9wZW4sTmV0fUJTRCwgQlNESSAqLwotI2RlZmluZSBVU0VfRklMRV9SCi0j ZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBVU0VfRklMRV9fQ05UICovCi0jZW5kaWYgLyog VVNFX0ZJTEVfQ05UICovCi0jZW5kaWYgLyogVVNFX0ZJTEVfUiAqLwotCi0jaWZuZGVmIFVTRV9G SUxFX1IJCQkvKiBzdGRpbi0+X2NudCAqLwotI2lmbmRlZiBVU0VfRklMRV9DTlQKLSNpZm5kZWYg VVNFX0ZJTEVfX0NOVAotI2RlZmluZSBVU0VfRklMRV9DTlQJCQkvKiBFdmVyeWJvZHkgZWxzZSAo YnV0IExpbnV4KSAqLwotI2VuZGlmIC8qIFVTRV9GSUxFX19DTlQgKi8KLSNlbmRpZiAvKiBVU0Vf RklMRV9DTlQgKi8KLSNlbmRpZiAvKiBVU0VfRklMRV9SICovCi0KLQotLyoKLSAgYyBtIGQgYyBv IG4gYyBoIGsKLQotICBIb3cgbWFueSBjaGFyYWN0ZXJzIGFyZSB3YWl0aW5nIHRvIGJlIHJlYWQg YXQgdGhlIGNvbnNvbGU/ICBOb3JtYWxseQotICBjb25jaGsoKSB3b3VsZCB0ZWxsIHVzLCBidXQg aW4gVW5peCBhbmQgVk1TIGNtZGdldGMoKSB1c2VzIHN0ZGlvIGdldGNoYXIoKSwKLSAgdGh1cyBi eXBhc3NpbmcgY29uaW5jKCkvY29uY2hrKCksIHNvIHdlIGhhdmUgdG8gcGVlayBpbnRvIHRoZSBz dGRpbiBidWZmZXIsCi0gIHdoaWNoIGlzIHRvdGFsbHkgbm9ucG9ydGFibGUuICBXaGljaCBpcyB3 aHkgdGhpcyByb3V0aW5lIGlzLCBhdCBsZWFzdCBmb3IKLSAgbm93LCB1c2VkIG9ubHkgZm9yIGNo ZWNraW5nIGZvciBhcnJvdy1rZXkgc2VxdWVuY2VzIGZyb20gdGhlIGtleWJvYXJkIGFmdGVyCi0g IGFuIEVTQyB3YXMgcmVhZC4gIFdvdWxkbid0IGl0IGJlIG5pY2UgaWYgdGhlIHN0ZGlvIHBhY2th Z2UgaGFkIGEgZnVuY3Rpb24KLSAgdGhhdCByZXR1cm5lZCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdh aXRpbmcgdG8gYmUgcmVhZCBmcm9tIGl0cyBidWZmZXI/Ci0gIFJldHVybnMgMCBvciBncmVhdGVy IGFsd2F5cy4KLSovCi1pbnQKLWNtZGNvbmNoaygpIHsKLSAgICBpbnQgeCA9IDAsIHk7Ci0gICAg eSA9IHB1c2hjID8gMSA6IDA7CQkJLyogSGF2ZSBjb21tYW5kIGNoYXJhY3RlciBwdXNoZWQ/ICov Ci0jaWZkZWYgT1MyCi0gICAgeCA9IGNvbmNoaygpOwkJCS8qIENoZWNrIGRldmljZS1kcml2ZXIg YnVmZmVyICovCi0gICAgaWYgKHggPCAwKSB4ID0gMDsKLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVm IENNRF9DT05JTkMJCQkvKiBTZWUgY21kZ2V0YygpICovCi0gICAgeCA9IGNvbmNoaygpOwkJCS8q IENoZWNrIGRldmljZS1kcml2ZXIgYnVmZmVyICovCi0gICAgaWYgKHggPCAwKSB4ID0gMDsKLSNl bHNlICAvKiBDTURfQ09OSU5DICovCi0KLS8qIEhlcmUgd2UgbXVzdCBsb29rIGluc2lkZSB0aGUg c3RkaW4gYnVmZmVyIC0gaGlnaGx5IHBsYXRmb3JtIGRlcGVuZGVudCAqLwotCi0jaWZkZWYgX0lP X0VPRl9TRUVOCQkJLyogTGludXggKi8KLSAgICB4ID0gKGludCkgKChzdGRpbi0+X0lPX3JlYWRf ZW5kKSAtIChzdGRpbi0+X0lPX3JlYWRfcHRyKSk7Ci0gICAgZGVidWcoRjEwMSwiY21kY29uY2hr IF9JT19maWxlX2ZsYWdzIiwiIix4KTsKLSNlbHNlICAvKiBfSU9fZmlsZV9mbGFncyAqLwotI2lm ZGVmIFVTRV9GSUxFX0NOVAkJCS8qIFRyYWRpdGlvbmFsICovCi0jaWZkZWYgVk1TCi0gICAgZGVi dWcoRjEwMSwiY21kY29uY2hrICgqc3RkaW4pLT5fY250IiwiIiwoKnN0ZGluKS0+X2NudCk7Ci0g ICAgeCA9ICgqc3RkaW4pLT5fY250OwotI2Vsc2UKLSNpZmRlZiBOT0FSUk9XS0VZUwotICAgIGRl YnVnKEYxMDEsImNtZGNvbmNoayBOT0FSUk9XS0VZUyB4IiwiIiwwKTsKLSNlbHNlCi0gICAgZGVi dWcoRjEwMSwiY21kY29uY2hrIHN0ZGluLT5fY250IiwiIixzdGRpbi0+X2NudCk7Ci0gICAgeCA9 IHN0ZGluLT5fY250OwotI2VuZGlmIC8qIE5PQVJST1dLRVlTICovCi0jZW5kaWYgLyogVk1TICov Ci0gICAgaWYgKHggPT0gMCkgeCA9IGNvbmNoaygpOwotICAgIGlmICh4IDwgMCkgeCA9IDA7Ci0j ZWxzZSAgLyogVVNFX0ZJTEVfQ05UICovCi0jaWZkZWYgVVNFX0ZJTEVfX0NOVAkJCS8qIEhQLVVY ICovCi0gICAgZGVidWcoRjEwMSwiY21kY29uY2hrIHN0ZGluLT5fX2NudCIsIiIsc3RkaW4tPl9f Y250KTsKLSAgICB4ID0gc3RkaW4tPl9fY250OwotICAgIGlmICh4ID09IDApIHggPSBjb25jaGso KTsKLSAgICBpZiAoeCA8IDApIHggPSAwOwotI2Vsc2UgIC8qIFVTRV9GSUxFX0NOVCAqLwotI2lm ZGVmIFVTRV9GSUxFX1IJCQkvKiBGcmVlQlNELCBPcGVuQlNELCBldGMgKi8KLSAgICBkZWJ1ZyhG MTAxLCJjbWRjb25jaGsgc3RkaW4tPl9yIiwiIixzdGRpbi0+X3IpOwotICAgIHggPSBzdGRpbi0+ X3I7Ci0gICAgaWYgKHggPT0gMCkgeCA9IGNvbmNoaygpOwotICAgIGlmICh4IDwgMCkgeCA9IDA7 Ci0KLSAgICAvKiBGaWxsIGluIGFueSBvdGhlcnMgaGVyZS4uLiAqLwotCi0jZW5kaWYgLyogVVNF X0ZJTEVfUiAqLwotI2VuZGlmIC8qIFVTRV9GSUxFX19DTlQgKi8KLSNlbmRpZiAvKiBVU0VfRklM RV9DTlQgKi8KLSNlbmRpZiAvKiBfSU9fZmlsZV9mbGFncyAqLwotI2VuZGlmIC8qIENNRF9DT05J TkMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICByZXR1cm4oeCArIHkpOwotfQotLyogI2VuZGlm ICovIC8qIFVTRV9BUlJPV0tFWVMgKi8KLQotCi1zdGF0aWMgVk9JRAotY21kY2xyc2NuKCkgewkJ CQkvKiBDbGVhciB0aGUgc2NyZWVuICovCi0gICAgY2tfY2xzKCk7Ci19Ci0KLXN0YXRpYyBWT0lE CQkJCS8qIFdoYXQgdG8gZWNobyBhdCBlbmQgb2YgY29tbWFuZCAqLwotI2lmZGVmIENLX0FOU0lD Ci1jbWRuZXdsKGNoYXIgYykKLSNlbHNlCi1jbWRuZXdsKGMpIGNoYXIgYzsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotLyogY21kbmV3bCAqLyB7Ci0jaWZkZWYgT1MyCi0jaWZkZWYgSUtTRAotICAg IGV4dGVybiBpbnQgaW5zZXJ2ZXI7Ci0gICAgaWYgKGluc2VydmVyICYmIGMgPT0gTEYpCi0gICAg ICBwdXRjaGFyKENSKTsKLSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogT1MyICovCi0KLSAg ICBwdXRjaGFyKGMpOwkJCQkvKiBjIGlzIHRoZSB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIgKi8KLQot I2lmZGVmIFdJTlRDUAkJCQkvKiB3aGF0IGlzIHRoaXMgZG9pbmcgaGVyZT8gKi8KLSAgICBpZiAo YyA9PSBDUikgcHV0Y2hhcihOTCk7Ci0jZW5kaWYgLyogV0lOVENQICovCi0KLS8qCi0gIEEuQS4g Q2hlcm5vdiwgd2hvIHNlbnQgaW4gY2hhbmdlcyBmb3IgRnJlZUJTRCwgc2FpZCB3ZSBhbHNvIG5l ZWRlZCB0aGlzCi0gIGZvciBTVk9SUE9TSVggYmVjYXVzZSAic2V0dXAgdGVybWluYWwgYnkgdGVy bWlvcyBhbmQgY3Vyc2VzIGRvZXMKLSAgbm90IGNvbnZlcnQgXHIgdG8gXG4sIHNvIGFkZGl0aW9u YWwgXG4gbmVlZGVkIGluIG5ld2xpbmUgZnVuY3Rpb24uIiAgQnV0Ci0gIGl0IGlzIGFsc28gdmVy eSBsaWtlbHkgdG8gcmVzdWx0IGluIHVud2FudGVkIGJsYW5rIGxpbmVzLgotKi8KLSNpZmRlZiBC U0Q0NAotICAgIGlmIChjID09IENSKSBwdXRjaGFyKE5MKTsKLSNlbmRpZiAvKiBCU0Q0NCAqLwot Ci0jaWZkZWYgQ09NTUVOVAotICAgIC8qIE9TMiBubyBsb25nZXIgbmVlZHMgdGhpcyBhcyBhbGwg Q1IgYXJlIGNvbnZlcnRlZCB0byBOTCBpbiBjb25pbmMoKSAqLwotICAgIC8qIFRoaXMgZWxpbWlu YXRlcyB0aGUgdWdseSBleHRyYSBibGFuayBsaW5lcyBkaXNjdXNzZWQgYWJvdmUuICAgICAgICAq LwotI2lmZGVmIE9TMgotICAgIGlmIChjID09IENSKSBwdXRjaGFyKE5MKTsKLSNlbmRpZiAvKiBP UzIgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYgYWVnaXMKLSAgICBpZiAoYyA9PSBD UikgcHV0Y2hhcihOTCk7Ci0jZW5kaWYgLyogYWVnaXMgKi8KLSNpZmRlZiBBTUlHQQotICAgIGlm IChjID09IENSKSBwdXRjaGFyKE5MKTsKLSNlbmRpZiAvKiBBTUlHQSAqLwotI2lmZGVmIGRhdGFn ZW5lcmFsCi0gICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOwotI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCi0jaWZkZWYgR0VNRE9TCi0gICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOwotI2Vu ZGlmIC8qIEdFTURPUyAqLwotI2lmZGVmIFNUUkFUVVMKLSAgICBpZiAoYyA9PSBDUikgcHV0Y2hh cihOTCk7Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwotfQotCi1zdGF0aWMgVk9JRAotY21kY2hhcmRl bCgpIHsJCQkJLyogRXJhc2UgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgc2NyZWVuICovCi0jaWZuZGVm IE5PU1BMCi0gICAgaWYgKCFlY2hvc3RhcnMpCi0jZW5kaWYJLyogTk9TUEwgKi8KLSAgICAgIGlm ICghZHB4KSByZXR1cm47Ci0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICAvKiBERyAnXGInIGlzIEVN ICheeSBvciBcMDMxKSAqLwotICAgIGlmICh0ZXJtdHlwZSA9PSAxKQotICAgICAgLyogRXJhc2Ug YSBjaGFyYWN0ZXIgZnJvbSBub24tREcgc2NyZWVuLCAqLwotICAgICAgZGduY291YigxLCJcMDEw IFwwMTAiLDMpOwotICAgIGVsc2UKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotICAgICAgcHJp bnRmKCJcYiBcYiIpOwotI2lmZGVmIEdFTURPUwotICAgIGZmbHVzaChzdGRvdXQpOwotI2Vsc2UK LSNpZmRlZiBCRUJPWAotICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIEJFQk9YICovCi0j ZW5kaWYgLyogR0VNRE9TICovCi19Ci0KLXN0YXRpYyBWT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWNt ZGVjaG8oY2hhciBjLCBpbnQgcXVvdGUpCi0jZWxzZQotY21kZWNobyhjLHF1b3RlKSBjaGFyIGM7 IGludCBxdW90ZTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiBjbWRlY2hvICovCi0jaWZk ZWYgTk9TUEwKLSAgICBpZiAoIWRweCkgcmV0dXJuOwotI2Vsc2UKLSAgICBpZiAoIWVjaG9zdGFy cykgewotCWlmICghZHB4KSByZXR1cm47Ci0gICAgfSBlbHNlIHsKLQljID0gKGNoYXIpZWNob3N0 YXJzOwotICAgIH0KLSNlbmRpZgkvKiBOT1NQTCAqLwotICAgIC8qIEVjaG8gdHR5IGlucHV0IGNo YXJhY3RlciBjICovCi0gICAgaWYgKHF1b3RlKSB7Ci0JcHV0Y2hhcihCUyk7Ci0JcHV0Y2hhcihT UCk7Ci0JcHV0Y2hhcihCUyk7Ci0jaWZkZWYgaXNwcmludAotCXB1dGNoYXIoKENIQVIpIChpc3By aW50KGMpID8gYyA6ICdeJyApKTsKLSNlbHNlCi0JcHV0Y2hhcigoQ0hBUikgKChjID49IFNQICYm IGMgPCBERUwpID8gYyA6ICdeJykpOwotI2VuZGlmIC8qIGlzcHJpbnQgKi8KLSAgICB9IGVsc2Ug ewotCXB1dGNoYXIoYyk7Ci0gICAgfQotI2lmZGVmIE9TMgotICAgIGlmIChxdW90ZT09MSAmJiBj PT1DUikgcHV0Y2hhcigoQ0hBUikgTkwpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIGlmICh0aW1l bGltaXQpCi0gICAgICBmZmx1c2goc3Rkb3V0KTsKLX0KLQotLyogUmV0dXJuIHBvaW50ZXIgdG8g Y3VycmVudCBwb3NpdGlvbiBpbiBjb21tYW5kIGJ1ZmZlci4gKi8KLQotY2hhciAqCi1jbXBlZWso KSB7Ci0gICAgcmV0dXJuKG5wKTsKLX0KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0KLSNpZmRlZiBO T0lDUAotI2luY2x1ZGUgImNrY2RlYi5oIgotI2luY2x1ZGUgImNrdWNtZC5oIgotI2luY2x1ZGUg ImNrY2FzYy5oIgotI2VuZGlmIC8qIE5PSUNQICovCi0KLS8qICBYIFggRSBTIEMgIC0tICBJbnRl cnByZXRzIGJhY2tzbGFzaCBjb2RlcyAgKi8KLS8qICBSZXR1cm5zIHRoZSBpbnQgdmFsdWUgb2Yg dGhlIGJhY2tzbGFzaCBjb2RlIGlmIGl0IGlzID4gLTEgYW5kIDwgMjU2ICovCi0vKiAgYW5kIHVw ZGF0ZXMgdGhlIHN0cmluZyBwb2ludGVyIHRvIGZpcnN0IGNoYXJhY3RlciBhZnRlciBiYWNrc2xh c2ggY29kZS4gKi8KLS8qICBJZiB0aGUgYXJndW1lbnQgaXMgaW52YWxpZCwgbGVhdmVzIHBvaW50 ZXIgdW5jaGFuZ2VkIGFuZCByZXR1cm5zIC0xLiAqLwotCi1pbnQKLXh4ZXNjKHMpIGNoYXIgKipz OyB7CQkJLyogRXhwYW5kIGJhY2tzbGFzaCBlc2NhcGVzICovCi0gICAgaW50IHgsIHksIGJyYWNl LCByYWRpeDsJCS8qIFJldHVybnMgdGhlIGludCB2YWx1ZSAqLwotICAgIGNoYXIgaGQgPSAnOSc7 CQkJLyogSGlnaGVzdCBkaWdpdCBpbiByYWRpeCAqLwotICAgIGNoYXIgKnA7Ci0KLSAgICBwID0g KnM7CQkJCS8qIHBvaW50ZXIgdG8gYmVnaW5uaW5nICovCi0gICAgaWYgKCFwKSByZXR1cm4oLTEp OwkJCS8qIHdhdGNoIG91dCBmb3IgbnVsbCBwb2ludGVyICovCi0gICAgeCA9ICpwKys7CQkJCS8q IGNoYXJhY3RlciBhdCBiZWdpbm5pbmcgKi8KLSAgICBpZiAoeCAhPSBDTURRKSByZXR1cm4oLTEp OwkJLyogbWFrZSBzdXJlIGl0J3MgYSBiYWNrc2xhc2ggY29kZSAqLwotCi0gICAgeCA9ICpwOwkJ CQkvKiBpdCBpcywgZ2V0IHRoZSBuZXh0IGNoYXJhY3RlciAqLwotICAgIGlmICh4ID09ICd7Jykg ewkJCS8qIGJyYWNrZXRlZCBxdWFudGl0eT8gKi8KLQlwKys7CQkJCS8qIGJlZ2luIHBhc3QgYnJh Y2tldCAqLwotCXggPSAqcDsKLQlicmFjZSA9IDE7Ci0gICAgfSBlbHNlIGJyYWNlID0gMDsKLSAg ICBzd2l0Y2ggKHgpIHsJCQkvKiBTdGFydCBpbnRlcnByZXRpbmcgKi8KLSAgICAgIGNhc2UgJ2Qn OgkJCQkvKiBEZWNpbWFsIHJhZGl4IGluZGljYXRvciAqLwotICAgICAgY2FzZSAnRCc6Ci0JcCsr OwkJCQkvKiBKdXN0IHBvaW50IHBhc3QgaXQgYW5kIGZhbGwgdGhydSAqLwotICAgICAgY2FzZSAn MCc6CQkJCS8qIFN0YXJ0cyB3aXRoIGRpZ2l0ICovCi0gICAgICBjYXNlICcxJzoKLSAgICAgIGNh c2UgJzInOiAgY2FzZSAnMyc6ICBjYXNlICc0JzogIGNhc2UgJzUnOgotICAgICAgY2FzZSAnNic6 ICBjYXNlICc3JzogIGNhc2UgJzgnOiAgY2FzZSAnOSc6Ci0JcmFkaXggPSAxMDsJCQkvKiBEZWNp bWFsICovCi0JaGQgPSAnOSc7CQkJLyogaGlnaGVzdCB2YWxpZCBkaWdpdCAqLwotCWJyZWFrOwot ICAgICAgY2FzZSAnbyc6CQkJCS8qIFN0YXJ0cyB3aXRoIG8gb3IgTyAqLwotICAgICAgY2FzZSAn Tyc6Ci0JcmFkaXggPSA4OwkJCS8qIE9jdGFsICovCi0JaGQgPSAnNyc7CQkJLyogaGlnaGVzdCB2 YWxpZCBkaWdpdCAqLwotCXArKzsJCQkJLyogcG9pbnQgcGFzdCByYWRpeCBpbmRpY2F0b3IgKi8K LQlicmVhazsKLSAgICAgIGNhc2UgJ3gnOgkJCQkvKiBTdGFydHMgd2l0aCB4IG9yIFggKi8KLSAg ICAgIGNhc2UgJ1gnOgotCXJhZGl4ID0gMTY7CQkJLyogSGV4YWRlY2ltYWwgKi8KLQlwKys7CQkJ CS8qIHBvaW50IHBhc3QgcmFkaXggaW5kaWNhdG9yICovCi0JYnJlYWs7Ci0gICAgICBkZWZhdWx0 OgkJCQkvKiBBbGwgb3RoZXJzICovCi0jaWZkZWYgQ09NTUVOVAotCSpzID0gcCsxOwkJCS8qIFRy ZWF0IGFzIHF1b3RlIG9mIG5leHQgY2hhciAqLwotCXJldHVybigqcCk7Ci0jZWxzZQotCXJldHVy bigtMSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0KLSAgICAvKiBGb3IgT1MvMiwgdGhl cmUgYXJlICJ3aWRlIiBjaGFyYWN0ZXJzIHJlcXVpcmVkIGZvciB0aGUga2V5Ym9hcmQKLSAgICAg KiBiaW5kaW5nLCBpLmUgXDY0NCBhbmQgc2ltaWxhciBjb2RlcyBsYXJnZXIgdGhhbiAyNTUgKGJ5 dGUpLgotICAgICAqIEZvciB0aGlzIHB1cnBvc2UsIGdpdmUgdXAgY2hlY2tpbmcgZm9yIDwgMjU2 LiBJZiBzb21lb25lIG1lYW5zCi0gICAgICogXDI2NiBzaG91bGQgcmVzdWx0IGluIFwyNiBmb2xs b3dlZCBieSBhICI2IiBjaGFyYWN0ZXIsIGhlIHNob3VsZAotICAgICAqIGFsd2F5cyB3cml0ZSBc ezI2fTYgYW55d2F5LiAgTm93LCByZXR1cm4gb25seSB0aGUgbG93ZXIgYnl0ZSBvZgotICAgICAq IHRoZSByZXN1bHQsIGkuZS4gMTAsIGJ1dCBlYXQgdXAgdGhlIHdob2xlIFwyNjYgc2VxdWVuY2Ug YW5kCi0gICAgICogcHV0IHRoZSB3aWRlIHJlc3VsdCAyNjYgaW50byBhIGdsb2JhbCB2YXJpYWJs ZS4gIFllcywgdGhhdCdzIG5vdAotICAgICAqIHRoZSBtb3N0IGJlYXV0aWZ1bCBwcm9ncmFtbWlu ZyBzdHlsZSBidXQgcmVxdWlyZXMgdGhlIGxlYXN0Ci0gICAgICogYW1vdW50IG9mIGNoYW5nZXMg dG8gb3RoZXIgcm91dGluZXMuCi0gICAgICovCi0gICAgaWYgKCpwID09ICd7JykgewkJCS8qIFN1 biBNYXkgMTEgMjA6MDA6NDAgMjAwMyAqLwotCWJyYWNlID0gMTsJCQkvKiBBbGxvdyB7fSBhZnRl ciByYWRpeCBpbmRpY2F0b3IgKi8KLQlwKys7Ci0gICAgfQotICAgIGlmIChyYWRpeCA8PSAxMCkg ewkJCS8qIE51bWJlciBpbiByYWRpeCA4IG9yIDEwICovCi0JZm9yICggeCA9IHkgPSAwOwotIAkg ICAgICAoKnApICYmICgqcCA+PSAnMCcpICYmICgqcCA8PSBoZCkKLSNpZmRlZiBPUzIKLSAgICAg ICAgICAgICAgICAgICAmJiAoeSA8IDUpICYmICh4KnJhZGl4IDwgS01TSVpFKTsKLSAgICAgICAg ICAgICAgLyogdGhlIG1heGltdW0gbmVlZGVkIHZhbHVlIFw4MTk2IGlzIDQgZGlnaXRzIGxvbmcg Ki8KLSAgICAgICAgICAgICAgLyogd2hpbGUgYXMgb2N0YWwgaXQgcmVxdWlyZXMgXDEzNzcsIGku ZS4gNSBkaWdpdHMgKi8KLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgJiYgKHkgPCAzKSAmJiAo eCpyYWRpeCA8IDI1Nik7Ci0jZW5kaWYgLyogT1MyICovCi0JICAgICAgcCsrLHkrKykgewotCSAg ICB4ID0geCAqIHJhZGl4ICsgKGludCkgKnAgLSA0ODsKLQl9Ci0jaWZkZWYgT1MyCi0gICAgICAg IHdpZGVyZXN1bHQgPSB4OwkJCS8qIFJlbWVtYmVyIHdpZGUgcmVzdWx0ICovCi0gICAgICAgIHgg Jj0gMjU1OwotI2VuZGlmIC8qIE9TMiAqLwotCWlmICh5ID09IDAgfHwgeCA+IDI1NSkgewkvKiBO byB2YWxpZCBkaWdpdHM/ICovCi0JICAgICpzID0gcDsJCQkvKiBwb2ludCBhZnRlciBpdCAqLwot CSAgICByZXR1cm4oLTEpOwkJCS8qIHJldHVybiBmYWlsdXJlLiAqLwotCX0KLSAgICB9IGVsc2Ug aWYgKHJhZGl4ID09IDE2KSB7CQkvKiBTcGVjaWFsIGNhc2UgZm9yIGhleCAqLwotCWlmICgoeCA9 IHVuaGV4KCpwKyspKSA8IDApIHsgKnMgPSBwIC0gMTsgcmV0dXJuKC0xKTsgfQotCWlmICgoeSA9 IHVuaGV4KCpwKyspKSA8IDApIHsgKnMgPSBwIC0gMjsgcmV0dXJuKC0xKTsgfQotCXggPSAoKHgg PDwgNCkgJiAweEYwKSB8ICh5ICYgMHgwRik7Ci0jaWZkZWYgT1MyCi0gICAgICAgIHdpZGVyZXN1 bHQgPSB4OwotICAgICAgICBpZiAoKHkgPSB1bmhleCgqcCkpID49IDApIHsKLSAgICAgICAgICAg cCsrOwotCSAgIHdpZGVyZXN1bHQgPSAoKHggPDwgNCkgJiAweEZGMCkgfCAoeSAmIDB4MEYpOwot ICAgICAgICAgICB4ID0gd2lkZXJlc3VsdCAmIDI1NTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE9T MiAqLwotICAgIH0gZWxzZSB4ID0gLTE7Ci0gICAgaWYgKGJyYWNlICYmICpwID09ICd9JyAmJiB4 ID4gLTEpCS8qIFBvaW50IHBhc3QgY2xvc2luZyBicmFjZSwgaWYgYW55ICovCi0gICAgICBwKys7 Ci0gICAgKnMgPSBwOwkJCQkvKiBQb2ludCB0byBuZXh0IGNoYXIgYWZ0ZXIgc2VxdWVuY2UgKi8K LSAgICByZXR1cm4oeCk7CQkJCS8qIFJldHVybiB2YWx1ZSBvZiBzZXF1ZW5jZSAqLwotfQotCi1p bnQJCQkJCS8qIENvbnZlcnQgaGV4IHN0cmluZyB0byBpbnQgKi8KLSNpZmRlZiBDS19BTlNJQwot dW5oZXgoY2hhciB4KQotI2Vsc2UKLXVuaGV4KHgpIGNoYXIgeDsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotLyogdW5oZXggKi8gewotCi0gICAgaWYgKHggPj0gJzAnICYmIHggPD0gJzknKQkJLyog MC05IGlzIG9mZnNldCBieSBoZXggMzAgKi8KLSAgICAgIHJldHVybih4IC0gMHgzMCk7Ci0gICAg ZWxzZSBpZiAoeCA+PSAnQScgJiYgeCA8PSAnRicpCS8qIEEtRiBvZmZzZXQgYnkgaGV4IDM3ICov Ci0gICAgICByZXR1cm4oeCAtIDB4MzcpOwotICAgIGVsc2UgaWYgKHggPj0gJ2EnICYmIHggPD0g J2YnKQkvKiBhLWYgb2Zmc2V0IGJ5IGhleCA1NyAqLwotICAgICAgcmV0dXJuKHggLSAweDU3KTsJ CQkvKiAob2J2aW91c2x5IEFTQ0lJIGRlcGVuZGVudCkgKi8KLSAgICBlbHNlIHJldHVybigtMSk7 Ci19Ci0KLS8qICBMIE8gTyBLIFUgUCAgLS0gIExvb2t1cCB0aGUgc3RyaW5nIGluIHRoZSBnaXZl biBhcnJheSBvZiBzdHJpbmdzICAqLwotCi0vKgotICBDYWxsIHRoaXMgd2F5OiAgdiA9IGxvb2t1 cCh0YWJsZSx3b3JkLG4sJngpOwotCi0gICAgdGFibGUgLSBhICdzdHJ1Y3Qga2V5dGFiJyB0YWJs ZS4KLSAgICB3b3JkICAtIHRoZSB0YXJnZXQgc3RyaW5nIHRvIGxvb2sgdXAgaW4gdGhlIHRhYmxl LgotICAgIG4gICAgIC0gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdGFibGUuCi0gICAg eCAgICAgLSBhZGRyZXNzIG9mIGFuIGludGVnZXIgZm9yIHJldHVybmluZyB0aGUgdGFibGUgYXJy YXkgaW5kZXgsCi0JICAgIG9yIE5VTEwgaWYgeW91IGRvbid0IG5lZWQgYSB0YWJsZSBpbmRleC4K LQotICBUaGUga2V5d29yZCB0YWJsZSBtdXN0IGJlIGFycmFuZ2VkIGluIGFzY2VuZGluZyBhbHBo YWJldGljYWwgb3JkZXI7Ci0gIGFscGhhYmV0aWMgY2FzZSBkb2Vzbid0IG1hdHRlciBidXQgbGV0 dGVycyBhcmUgdHJlYXRlZCBhcyBsb3dlcmNhc2UKLSAgZm9yIHB1cnBvc2VzIG9mIG9yZGVyaW5n OyB0aHVzICJeIiBhbmQgIl8iIGNvbWUgKmJlZm9yZSogdGhlIGxldHRlcnMsCi0gIG5vdCBhZnRl ciB0aGVtLgotCi0gIFJldHVybnMgdGhlIGtleXdvcmQncyBhc3NvY2lhdGVkIHZhbHVlICh6ZXJv IG9yIGdyZWF0ZXIpIGlmIGZvdW5kLAotICB3aXRoIHRoZSB2YXJpYWJsZSB4IHNldCB0byB0aGUg a2V5d29yZC10YWJsZSBpbmRleC4gIElmIGlzIGxvb2t1cCgpCi0gIGlzIG5vdCBzdWNjZXNzZnVs LCBpdCByZXR1cm5zOgotCi0gICAtMyBpZiBub3RoaW5nIHRvIGxvb2sgdXAgKHRhcmdldCB3YXMg bnVsbCksCi0gICAtMiBpZiBhbWJpZ3VvdXMsCi0gICAtMSBpZiBub3QgZm91bmQuCi0KLSAgQSBt YXRjaCBpcyBzdWNjZXNzZnVsIGlmIHRoZSB0YXJnZXQgbWF0Y2hlcyBhIGtleXdvcmQgZXhhY3Rs eSwgb3IgaWYKLSAgdGhlIHRhcmdldCBpcyBhIHByZWZpeCBvZiBleGFjdGx5IG9uZSBrZXl3b3Jk LiAgSXQgaXMgYW1iaWd1b3VzIGlmIHRoZQotICB0YXJnZXQgbWF0Y2hlcyB0d28gb3IgbW9yZSBr ZXl3b3JkcyBmcm9tIHRoZSB0YWJsZS4KLQotICBMb29rdXAoKSBpcyB0aGUgY3JpdGljYWwgcm91 dGluZSBpbiBzY3JpcHRzIGFuZCBzbyBpcyBvcHRpbWl6ZWQgd2l0aCBhCi0gIHNpbXBsZSBzdGF0 aWMgY2FjaGUgcGx1cyBzb21lIG90aGVyIHRyaWNrcy4gIE1heWJlIGl0IGNvdWxkIGJlIGltcHJv dmVkCi0gIGZ1cnRoZXIgd2l0aCBiaW5hcnkgc2VhcmNoIG9yIGhhc2ggdGVjaG5pcXVlcyBidXQg SSBkb3VidCBpdCBzaW5jZSBtb3N0Ci0gIGtleXdvcmQgdGFibGVzIGFyZSBmYWlybHkgc2hvcnQu Ci0qLwotCi0jaWZkZWYgVVNFX0xVQ0FDSEUJCQkvKiBMb29rdXAgY2FjaGUgKi8KLWV4dGVybiBp bnQgbHVzaXplOwkJCS8qIChpbml0aWFsaXplZCBpbiBja3V1czUuYykgKi8KLWV4dGVybiBjaGFy ICogbHVjbWRbXTsKLWV4dGVybiBpbnQgbHV2YWxbXTsKLWV4dGVybiBpbnQgbHVpZHhbXTsKLWV4 dGVybiBzdHJ1Y3Qga2V5dGFiICogbHV0YWJbXTsKLWxvbmcgbHVoaXRzID0gMEw7Ci1sb25nIGx1 Y2FsbHMgPSAwTDsKLWxvbmcgeHhoaXRzID0gMEw7Ci1sb25nIGx1bG9vcCA9IDBMOwotI2VuZGlm IC8qIFVTRV9MVUNBQ0hFICovCi0KLWludAotbG9va3VwKHRhYmxlLGNtZCxuLHgpIGNoYXIgKmNt ZDsgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBpbnQgbiwgKng7IHsKLQotICAgIHJlZ2lzdGVyIGlu dCBpLCBtOwotICAgIGludCB2LCBsZW4sIGNtZGxlbiA9IDA7Ci0gICAgY2hhciBjID0gTlVMLCBj MSwgKnM7Ci0KLS8qIEdldCAxc3QgY2hhciBvZiBzZWFyY2ggb2JqZWN0LCBpZiBpdCdzIG51bGwg cmV0dXJuIC0zLiAqLwotCi0gICAgaWYgKCFjbWQgfHwgbiA8IDEpCQkJLyogRGVmZW5zZSBkZSBu dWxsYXJnICovCi0gICAgICByZXR1cm4oLTMpOwotICAgIGMxID0gKmNtZDsJCQkJLyogRmlyc3Qg Y2hhcmFjdGVyICovCi0gICAgaWYgKCFjMSkJCQkJLyogTWFrZSBzdXJlIHRoZXJlIGlzIG9uZSAq LwotICAgICAgcmV0dXJuKC0zKTsKLSAgICBpZiAoaXN1cHBlcihjMSkpCQkJLyogSWYgbGV0dGVy IG1ha2UgaXQgbG93ZXJjYXNlICovCi0gICAgICBjMSA9IHRvbG93ZXIoYzEpOwotCi0jaWZkZWYg VVNFX0xVQ0FDSEUJCQkvKiBsb29rdXAoKSBjYWNoZSAqLwotICAgIG0gPSBsdXNpemU7Ci0gICAg bHVjYWxscysrOwkJCQkvKiBDb3VudCB0aGlzIGxvb2t1cCgpIGNhbGwgKi8KLSAgICBmb3IgKGkg PSAwOyBpIDwgbTsgaSsrKSB7CQkvKiBMb29wIHRocnUgY2FjaGUgKi8KLQlpZiAoKihsdWNtZFtp XSkgPT0gYzEpIHsJLyogU2FtZSBhcyAxc3QgY2hhciBvZiBzZWFyY2ggaXRlbT8gKi8KLQkgICAg aWYgKGx1dGFiW2ldID09IHRhYmxlKSB7CS8qIFllcyAtIHNhbWUgdGFibGUgdG9vPyAqLwotCQlp ZiAoIXN0cmNtcChjbWQsbHVjbWRbaV0pKSB7IC8qIFllcyAtIGNvbXBhcmUgKi8KLQkJICAgIGlm ICh4KSAqeCA9IGx1aWR4W2ldOyAgICAvKiBNYXRjaCAtIHJldHVybiBpbmRleCAqLwotCQkgICAg bHVoaXRzKys7ICAgICAgICAgICAgICAgIC8qIENvdW50IGNhY2hlIGhpdCAqLwotCQkgICAgcmV0 dXJuKGx1dmFsW2ldKTsgICAgICAgIC8qIFJldHVybiBhc3NvY2lhdGVkIHZhbHVlICovCi0JCX0K LQkgICAgfQotCX0KLSAgICB9Ci0jZW5kaWYgLyogVVNFX0xVQ0FDSEUgKi8KLQotLyogTm90IG51 bGwsIG5vdCBpbiBjYWNoZSwgbG9vayBpdCB1cCAqLwotCi0gICAgcyA9IGNtZDsKLSAgICB3aGls ZSAoKnMrKykgY21kbGVuKys7CQkvKiBMZW5ndGggb2YgdGFyZ2V0ICovCi0vKgotICBRdWljayBi aW5hcnkgc2VhcmNoIHRvIGZpbmQgbGFzdCB0YWJsZSBlbnRyeSB3aG9zZSBmaXJzdCBjaGFyYWN0 ZXIgaXMKLSAgbGV4aWNhbGx5IGxlc3MgdGhhbiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBz ZWFyY2ggb2JqZWN0LiAgVGhpcyBpcwotICB0aGUgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIG5leHQg bG9vcCwgd2hpY2ggbXVzdCBnbyBpbiBzZXF1ZW5jZSBzaW5jZSBpdAotICBjb21wYXJlcyBhZGph Y2VudCB0YWJsZSBlbnRyaWVzLgotKi8KLSAgICBpZiAobiA8IDUpIHsJCQkvKiBOb3Qgd29ydGgg aXQgZm9yIHNtYWxsIHRhYmxlcyAqLwotCWkgPSAwOwotICAgIH0gZWxzZSB7Ci0JaW50IGxvID0g MDsKLQlpbnQgaGkgPSBuOwotCWludCBjb3VudCA9IDA7Ci0Jd2hpbGUgKGxvKzIgPCBoaSAmJiAr K2NvdW50IDwgMTIpIHsKLQkgICAgaSA9IGxvICsgKChoaSAtIGxvKSAvIDIpOwotCSAgICBjID0g Kih0YWJsZVtpXS5rd2QpOwotCSAgICBpZiAoaXN1cHBlcihjKSkgYyA9IHRvbG93ZXIoYyk7Ci0J ICAgIGlmIChjIDwgYzEpIHsKLQkJbG8gPSBpOwotCSAgICB9IGVsc2UgewotCQloaSA9IGk7Ci0J ICAgIH0KLQl9Ci0JaSA9IChjIDwgYzEpID8gbG8rMSA6IGxvOwotI2lmZGVmIFVTRV9MVUNBQ0hF Ci0JaWYgKGkgPiAwKSB4eGhpdHMrKzsKLSNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLwotICAgIH0K LSAgICBmb3IgKCA7IGkgPCBuLTE7IGkrKykgewotI2lmZGVmIFVTRV9MVUNBQ0hFCi0JbHVsb29w Kys7Ci0jZW5kaWYgLyogVVNFX0xVQ0FDSEUgKi8KLQl2ID0gMDsKLQljID0gKih0YWJsZVtpXS5r d2QpOwotCWlmIChjKSB7Ci0JICAgIGlmIChpc3VwcGVyKGMpKSBjID0gdG9sb3dlcihjKTsKLQot CSAgICAvKiBUaGUgZm9sbG93aW5nIGlzIGEgYmlnIHBlcmZvcm1hbmNlIGJvb3N0ZXIgYnV0IG1h a2VzIGl0ICovCi0JICAgIC8qIGFic29sdXRlbHkgZXNzZW50aWFsIHRoYXQgYWxsIGxvb2t1cCgp IHRhYmxlcyBhcmUgaW4gb3JkZXIuICovCi0KLQkgICAgaWYgKGMgPiBjMSkJCQkvKiBMZWF2ZSBl YXJseSBpZiBwYXN0IG91ciBtYXJrICovCi0JICAgICAgcmV0dXJuKC0xKTsKLQotI2lmZGVmIERF QlVHCi0JICAgIC8qIFVzZSBMT0cgREVCVUcgdG8gY2hlY2sgKi8KLQotCSAgICBpZiAoZGVibG9n KSB7Ci0JCWlmIChja3N0cmNtcCh0YWJsZVtpXS5rd2QsdGFibGVbaSsxXS5rd2QsMCwwKSA+IDAp IHsKLQkJICAgIHByaW50ZigiVEFCTEUgT1VUIE9GIE9SREVSIFslc10gWyVzXVxuIiwKLQkJCSAg IHRhYmxlW2ldLmt3ZCx0YWJsZVtpKzFdLmt3ZCk7Ci0KLQkJfQotCSAgICB9Ci0jZW5kaWYgLyog REVCVUcgKi8KLQotCSAgICBpZiAoYyA9PSBjMSkgewotCQlsZW4gPSAwOwotCQlzID0gdGFibGVb aV0ua3dkOwotCQl3aGlsZSAoKnMrKykgbGVuKys7Ci0JCWlmICgobGVuID09IGNtZGxlbiAmJiAh Y2tzdHJjbXAodGFibGVbaV0ua3dkLGNtZCxsZW4sMCkpIHx8Ci0JCSAgICAoKHYgPSAhY2tzdHJj bXAodGFibGVbaV0ua3dkLGNtZCxjbWRsZW4sMCkpICYmCi0JCSAgICAgY2tzdHJjbXAodGFibGVb aSsxXS5rd2QsY21kLGNtZGxlbiwwKSkpIHsKLQkJICAgIGlmICh4KSAqeCA9IGk7Ci0JCSAgICBy ZXR1cm4odGFibGVbaV0ua3d2YWwpOwotCQl9Ci0JICAgIH0gZWxzZSB2ID0gMDsKLQl9Ci0gICAg ICAgIGlmICh2KSB7CQkJLyogQW1iaWd1b3VzICovCi0JICAgIGlmICh4KSAqeCA9IGk7CQkvKiBT ZXQgaW5kZXggb2YgZmlyc3QgbWF0Y2ggKi8KLQkgICAgcmV0dXJuKC0yKTsKLQl9Ci0gICAgfQot Ci0vKiBMYXN0IChvciBvbmx5KSBlbGVtZW50ICovCi0KLSAgICBpZiAoIWNrc3RyY21wKHRhYmxl W24tMV0ua3dkLGNtZCxjbWRsZW4sMCkpIHsKLSAgICAgICAgaWYgKHgpICp4ID0gbi0xOwotCS8q IGRlYnVnKEYxMTEsImxvb2t1cCIsdGFibGVbaV0ua3dkLHRhYmxlKTsgKi8KLSAgICAgICAgcmV0 dXJuKHRhYmxlW24tMV0ua3d2YWwpOwotICAgIH0gZWxzZSByZXR1cm4oLTEpOwotfQotCi0vKgot ICB4IGwgbyBvIGsgdSBwCi0KLSAgTGlrZSBsb29rdXAsIGJ1dCByZXF1aXJlcyBhIGZ1bGwgKGJ1 dCBjYXNlLWluZGVwZW5kZW50KSBtYXRjaAotICBhbmQgZG9lcyBOT1QgcmVxdWlyZSB0aGUgdGFi bGUgdG8gYmUgaW4gb3JkZXIuCi0qLwotaW50Ci14bG9va3VwKHRhYmxlLGNtZCxuLHgpIHN0cnVj dCBrZXl0YWIgdGFibGVbXTsgY2hhciAqY21kOyBpbnQgbiwgKng7IHsKLSAgICByZWdpc3RlciBp bnQgaTsKLSAgICBpbnQgbGVuLCBjbWRsZW4sIG9uZSA9IDA7Ci0gICAgcmVnaXN0ZXIgY2hhciBj LCBjMiwgKiBzLCAqIHMyOwotCi0gICAgaWYgKCFjbWQpIGNtZCA9ICIiOwkJCS8qIENoZWNrIGFy Z3MgKi8KLSAgICBpZiAoISpjbWQgfHwgbiA8IDEpIHJldHVybigtMyk7Ci0KLSAgICBjID0gKmNt ZDsJCQkJLyogRmlyc3QgY2hhciBvZiBzdHJpbmcgdG8gbG9vayB1cCAqLwotICAgIGlmICghKihj bWQrMSkpIHsJCQkvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciAxLWNoYXIgbmFtZXMgKi8KLQljbWRs ZW4gPSAxOwotCWlmIChpc3VwcGVyKGMpKQotCSAgYyA9IHRvbG93ZXIoYyk7Ci0Jb25lID0gMTsK LSAgICB9IGVsc2UgewotCWNtZGxlbiA9IDA7Ci0JcyA9IGNtZDsKLQl3aGlsZSAoKnMrKykgY21k bGVuKys7Ci0JYyA9ICpjbWQ7Ci0JaWYgKGlzdXBwZXIoYykpCi0JICBjID0gdG9sb3dlcihjKTsK LSAgICB9Ci0gICAgaWYgKGNtZGxlbiA8IDEpCi0gICAgICByZXR1cm4oLTMpOwotCi0gICAgZm9y IChpID0gMDsgaSA8IG47IGkrKykgewotCXMgPSB0YWJsZVtpXS5rd2Q7CQkvKiBUaGlzIGVudHJ5 ICovCi0JaWYgKCFzKSBzID0gIiI7Ci0JaWYgKCEqcykgY29udGludWU7CQkvKiBFbXB0eSB0YWJs ZSBlbnRyeSAqLwotCWMyID0gKnM7Ci0JaWYgKGlzdXBwZXIoYzIpKSBjMiA9IHRvbG93ZXIoYzIp OwotCWlmIChjICE9IGMyKSBjb250aW51ZTsJCS8qIEZpcnN0IGNoYXIgZG9lc24ndCBtYXRjaCAq LwotCWlmIChvbmUpIHsJCQkvKiBOYW1lIGlzIG9uZSBjaGFyIGxvbmcgKi8KLQkgICAgaWYgKCEq KHMrMSkpIHsKLQkJaWYgKHgpICp4ID0gaTsKLSAgICAgICAgICAgICAgICAqY21kID0gYzsgCi0J CXJldHVybih0YWJsZVtpXS5rd3ZhbCk7CS8qIFNvIGlzIHRhYmxlIGVudHJ5ICovCi0JICAgIH0K LQl9IGVsc2UgewkJCS8qIE90aGVyd2lzZSBkbyBzdHJpbmcgY29tcGFyaXNvbiAqLwotCSAgICBz MiA9IHM7Ci0JICAgIGxlbiA9IDA7Ci0JICAgIHdoaWxlICgqczIrKykgbGVuKys7Ci0JICAgIGlm IChsZW4gPT0gY21kbGVuICYmICFja3N0cmNtcChzLGNtZCwtMSwwKSkgewotCQlpZiAoeCkgKngg PSBpOwotCQlyZXR1cm4odGFibGVbaV0ua3d2YWwpOwotCSAgICB9Ci0JfQotICAgIH0KLSAgICBy ZXR1cm4oLTEpOwotfQotCi0vKiBSZXZlcnNlIGxvb2t1cCAqLwotCi1jaGFyICoKLXJsb29rdXAo dGFibGUsbix4KSBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107IGludCBuLCB4OyB7Ci0gICAgaW50IGk7 Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBpZiAodGFibGVbaV0ua3d2 YWwgPT0geCkKLQkgIHJldHVybih0YWJsZVtpXS5rd2QpOwotICAgIH0KLSAgICByZXR1cm4oTlVM TCk7Ci19Ci0KLSNpZm5kZWYgTk9JQ1AKLWludAotY21kc3F1byh4KSBpbnQgeDsgewotICAgIHF1 b3RpbmcgPSB4OwotICAgIHJldHVybigxKTsKLX0KLQotaW50Ci1jbWRncXVvKCkgewotICAgIHJl dHVybihxdW90aW5nKTsKLX0KLSNlbmRpZiAvKiBOT0lDUCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJt aXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1Y21kLmMuZ2xpYmMyXzI4IGIvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VjbWQuYy5nbGliYzJfMjgKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NGRjMmQuLjAwMDAwMDAKLS0tIGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VjbWQuYy5nbGliYzJfMjgKKysrIC9k ZXYvbnVsbApAQCAtMSw3OTE5ICswLDAgQEAKLSNpbmNsdWRlICJja2NzeW0uaCIKLQotY2hhciAq Y21kdiA9ICJDb21tYW5kIHBhY2thZ2UgOS4wLjE2OCwgMTIgTWFyY2ggMjAxMCI7Ci0KLS8qICBD IEsgVSBDIE0gRCAgLS0gIEludGVyYWN0aXZlIGNvbW1hbmQgcGFja2FnZSBmb3IgVW5peCAgKi8K LQotLyogKEluIHJlYWxpdHksIGl0J3MgZm9yIGFsbCBwbGF0Zm9ybXMsIG5vdCBqdXN0IFVuaXgp ICovCi0KLS8qCi0gIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiAoZmRjQGNvbHVtYmlhLmVkdSksCi0g IENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlv cmsgQ2l0eS4KLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTAsCi0gICAgVHJ1c3RlZXMgb2Yg Q29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmln aHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQot ICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIg YW5kIHBlcm1pc3Npb25zLgotKi8KLQotI2RlZmluZSBUT0tQUkVDSEVDSwotCi0jZGVmaW5lIERP Q0hLVkFSCi0KLS8qIENvbW1hbmQtdGVybWluYWwtdG8tQy1LZXJtaXQgY2hhcmFjdGVyIG1hc2sg Ki8KLQotI2lmZGVmIE9TMgkJCQkvKiBLOTUgKi8KLWludCBjbWRtc2sgPSAyNTU7CQkJLyogKGFs d2F5cyB3YXMgMjU1KSAqLwotI2Vsc2UJCQkJCS8qIEFsbCBvdGhlcnMuLi4gKi8KLWludCBjbWRt c2sgPSAyNTU7CQkJLyogMzEgRGVjIDIwMDAgKHdhcyAxMjcpICovCi0jZW5kaWYgLyogT1MyICov Ci0KLSNpZmRlZiBCU19ESVJTRVAJCQkvKiBEaXJlY3Rvcnkgc2VwYXJhdG9yIGlzIGJhY2tzbGFz aCAqLwotI3VuZGVmIEJTX0RJUlNFUAotI2VuZGlmIC8qIEJTX0RJUlNFUCAqLwotCi0jaWZkZWYg T1MyCi0jZGVmaW5lIEJTX0RJUlNFUAotI2VuZGlmIC8qIEJTX0RJUlNFUCAqLwotCi0jZGVmaW5l IENLVUNNRF9DCi0KLSNpbmNsdWRlICJja2NkZWIuaCIgICAgICAgICAgICAgICAgICAgICAvKiBG b3JtYXRzIGZvciBkZWJ1ZygpLCBldGMuICovCi0jaW5jbHVkZSAiY2tja2VyLmgiCQkJLyogTmVl ZGVkIGZvciBCSUdCVUZPSyBkZWZpbml0aW9uICovCi0jaW5jbHVkZSAiY2tjbmV0LmgiCQkJLyog TmVlZGVkIGZvciBzZXJ2ZXItc2lkZSBUZWxuZXQgKi8KLSNpbmNsdWRlICJja3VjbWQuaCIJCQkv KiBOZWVkZWQgZm9yIGV2ZXJ5dGhpbmcgKi8KLSNpbmNsdWRlICJja3V1c3IuaCIgICAgICAgICAg ICAgICAgICAgICAvKiBOZWVkZWQgZm9yIHByb21wdCBsZW5ndGggKi8KLQotI2lmbmRlZiBOT0FS Uk9XS0VZUwotI2lmbmRlZiBOT0VTQ1NFUQotI2lmZGVmIFZNU09SVU5JWAotI2RlZmluZSBVU0Vf QVJST1dLRVlTCQkJLyogVXNlIGFycm93IGtleXMgZm9yIGNvbW1hbmQgcmVjYWxsICovCi0jZW5k aWYgLyogVk1TT1JVTklYICovCi0jZW5kaWYgLyogTk9FU0NTRVEgKi8KLSNlbmRpZiAvKiBOT0FS Uk9XS0VZUyAqLwotCi0jdW5kZWYgQ0tVQ01EX0MKLQotX1BST1RPVFlQKCBpbnQgdW5oZXgsIChj aGFyKSApOwotX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBjbWRjbHJzY24sICh2b2lkKSApOwotCi0j aWZkZWYgQ0tMRUFSTgotX1BST1RPVFlQKCBWT0lEIGxlYXJuY21kLCAoY2hhciAqKSApOwotI2Vu ZGlmIC8qIENLTEVBUk4gKi8KLQotc3RhdGljIGNoYXIgKm1vbmFtZVtdID0gewotICAgICJKYW4i LCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsCi0gICAgIkp1bCIsICJBdWciLCAi U2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIgotfTsKLQotc3RydWN0IGtleXRhYiBjbW9udGhzW10g PSB7Ci0gIHsgImFwcmlsIiwgICAgIDQsIDAgfSwKLSAgeyAiYXVndXN0IiwgICAgOCwgMCB9LAot ICB7ICJkZWNlbWJlciIsIDEyLCAwIH0sCi0gIHsgImZlYnJ1YXJ5IiwgIDIsIDAgfSwKLSAgeyAi amFudWFyeSIsICAgMSwgMCB9LAotICB7ICJqdWx5IiwgICAgICA3LCAwIH0sCi0gIHsgImp1bmUi LCAgICAgIDYsIDAgfSwKLSAgeyAibWFyY2giLCAgICAgMywgMCB9LAotICB7ICJtYXkiLCAgICAg ICA1LCAwIH0sCi0gIHsgIm5vdmVtYmVyIiwgMTEsIDAgfSwKLSAgeyAib2N0b2JlciIsICAxMCwg MCB9LAotICB7ICJzZXB0ZW1iZXIiLCA5LCAwIH0KLX07Ci0KLSNpZm5kZWYgTk9JQ1AgICAgIC8q IFRoZSByZXN0IG9ubHkgaWYgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzaW5nIHNlbGVjdGVkICov Ci0KLSNpZm5kZWYgTk9TUEwKLV9QUk9UT1RZUCggaW50IGNoa3ZhciwgKGNoYXIgKikgKTsKLWV4 dGVybiBpbnQgYXNrZmxhZywgZWNob3N0YXJzOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRl ZiBDS1JPT1QKLWV4dGVybiBpbnQgY2tyb290ZXJyOwotI2VuZGlmIC8qIENLUk9PVCAqLwotCi0j aWZkZWYgSUtTRAotZXh0ZXJuIGludCBpbnNlcnZlcjsKLSNlbmRpZiAvKiBJS1NEICovCi0KLWlu dCBjbWZsZGZsZ3MgPSAwOwkJCS8qIEZsYWdzIGZvciBjbWZsZCgpICovCi1pbnQgY21rd2ZsZ3Mg PSAwOwkJCS8qIEZsYWdzIGZyb20gbGFzdCBrZXl3b3JkIHBhcnNlICovCi1zdGF0aWMgaW50IG5v bXNnID0gMDsKLXN0YXRpYyBpbnQgYmxvY2tsdmwgPSAwOwkJLyogQmxvY2sgbmVzdGluZyBsZXZl bCAqLwotc3RhdGljIGludCBsaW5lYmVnaW4gPSAwOwkJLyogRmxhZyBmb3IgYXQgc3RhcnQgb2Yg YSBsaW5lICovCi1zdGF0aWMgaW50IHF1b3RpbmcgPSAxOwkJCS8qIFF1b3RpbmcgaXMgYWxsb3dl ZCAqLwotc3RhdGljIGludCBzd2FyZyA9IDA7CQkJLyogUGFyc2luZyBhIHN3aXRjaCBhcmd1bWVu dCAqLwotc3RhdGljIGludCB4Y21mZGIgPSAwOwkJCS8qIEZsYWcgZm9yIHBhcnNpbmcgY2hhaW5l ZCBmZGJzLi4uICovCi1zdGF0aWMgaW50IGNoc3JjID0gMDsJCQkvKiBTb3VyY2Ugb2YgY2hhcmFj dGVyLCAxID0gdHR5ICovCi1zdGF0aWMgaW50IG5ld2NtZCA9IDA7CQkJLyogU2VlIGFkZGNtZCgp ICovCi0KLSNpZmRlZiBCU19ESVJTRVAKLXN0YXRpYyBpbnQgZGlybmFtZmxnID0gMDsKLSNlbmRp ZiAvKiBCU19ESVJTRVAgKi8KLQotLyoKLU1vZGVsZWQgYWZ0ZXIgdGhlIERFQ1NZU1RFTS0yMCBj b21tYW5kIHBhcnNlciAodGhlIENPTU5EIEpTWVMpLCBSSVAuIEZlYXR1cmVzOgotCi0gLiBwYXJz ZXMgYW5kIHZlcmlmaWVzIGtleXdvcmRzLCBmaWxlbmFtZXMsIHRleHQgc3RyaW5ncywgbnVtYmVy cywgb3RoZXIgZGF0YQotIC4gZGlzcGxheXMgYXBwcm9wcmlhdGUgbWVudSBvciBoZWxwIG1lc3Nh Z2Ugd2hlbiB1c2VyIHR5cGVzICI/IgotIC4gZG9lcyBrZXl3b3JkIGFuZCBmaWxlbmFtZSBjb21w bGV0aW9uIHdoZW4gdXNlciB0eXBlcyBFU0Mgb3IgVEFCCi0gLiBkb2VzIHBhcnRpYWwga2V5d29y ZCBhbmQgZmlsZW5hbWUgY29tcGxldGlvbgotIC4gYWNjZXB0cyBhbnkgdW5pcXVlIGFiYnJldmlh dGlvbiBmb3IgYSBrZXl3b3JkCi0gLiBhbGxvd3Mga2V5d29yZHMgdG8gaGF2ZSBhdHRyaWJ1dGVz LCBsaWtlICJpbnZpc2libGUiIGFuZCAiYWJicmV2aWF0aW9uIgotIC4gY2FuIHN1cHBseSBkZWZh dWx0cyBmb3IgZmllbGRzIG9taXR0ZWQgYnkgdXNlcgotIC4gcHJvdmlkZXMgY29tbWFuZCByZXRy eSBhbmQgcmVjYWxsCi0gLiBwcm92aWRlcyBjaGFyYWN0ZXIsIHdvcmQsIGFuZCBsaW5lIGRlbGV0 aW9uIChidXQgb25seSBmcm9tIHRoZSBlbmQpCi0gLiBhY2NlcHRzIGlucHV0IGZyb20ga2V5Ym9h cmQsIGNvbW1hbmQgZmlsZXMsIG1hY3Jvcywgb3IgcmVkaXJlY3RlZCBzdGRpbgotIC4gYWxsb3dz IGZvciBmdWxsIG9yIGhhbGYgZHVwbGV4IG9wZXJhdGlvbiwgY2hhcmFjdGVyIG9yIGxpbmUgaW5w dXQKLSAuIGFsbG93cyBcLWVzY2FwZXMgZm9yIHNwZWNpYWwgY2hhcmFjdGVycwotIC4gYWxsb3dz IHNwZWNpZmljYXRpb24gb2YgYSB1c2VyIGV4aXQgdG8gZXhwYW5kIHZhcmlhYmxlcywgZXRjLgot IC4gc2V0dGFibGUgcHJvbXB0LCBwcm90ZWN0ZWQgZnJvbSBkZWxldGlvbiwgZHluYW1pY2FsbHkg cmUtZXZhbHVhdGVkIGVhY2ggdGltZQotIC4gYWxsb3dzIGNoYWluZWQgcGFyc2UgZnVuY3Rpb25z LgotCi1GdW5jdGlvbnM6Ci0gY21zZXRwIC0gU2V0IHByb21wdCAoY21wcm9tIGlzIHByb21wdCBz dHJpbmcpCi0gY21zYXZwIC0gU2F2ZSBjdXJyZW50IHByb21wdAotIGNtZ2V0cCA9IEdldCBjdXJy ZW50IHByb21wdAotIHByb21wdCAtIElzc3VlIHByb21wdAotIGNtaW5pICAtIENsZWFyIHRoZSBj b21tYW5kIGJ1ZmZlciAoYmVmb3JlIHBhcnNpbmcgYSBuZXcgY29tbWFuZCkKLSBjbXJlcyAgLSBS ZXNldCBjb21tYW5kIGJ1ZmZlciBwb2ludGVycyAoYmVmb3JlIHJlcGFyc2luZykKLSBjbWtleSAg LSBQYXJzZSBhIGtleXdvcmQgb3IgdG9rZW4gKGFsc28gY21rZXkyKQotIGNtc3dpICAtIFBhcnNl IGEgc3dpdGNoCi0gY21udW0gIC0gUGFyc2UgYSBudW1iZXIKLSBjbWlmaSAgLSBQYXJzZSBhbiBp bnB1dCBmaWxlIG5hbWUKLSBjbW9maSAgLSBQYXJzZSBhbiBvdXRwdXQgZmlsZSBuYW1lIChhbHNv IGNtaWZpcCwgY21pZmkyLCAuLi4pCi0gY21kaXIgIC0gUGFyc2UgYSBkaXJlY3RvcnkgbmFtZSAo YWxzbyBjbWRpcnApCi0gY21mbGQgIC0gUGFyc2UgYW4gYXJiaXRyYXJ5IGZpZWxkCi0gY210eHQg IC0gUGFyc2UgYSB0ZXh0IHN0cmluZwotIGNtZGF0ZSAtIFBhcnNlIGEgZGF0ZS10aW1lIHN0cmlu ZwotIGNtY2ZtICAtIFBhcnNlIGNvbW1hbmQgY29uZmlybWF0aW9uIChlbmQgb2YgbGluZSkKLSBj bWZkYiAgLSBQYXJzZSBhbnkgb2YgYSBsaXN0IG9mIHRoZSBmb3JlZ29pbmcgKGNoYWluZWQgcGFy c2UgZnVuY3Rpb25zKQotCi1SZXR1cm4gY29kZXM6Ci0gLTk6IGxpa2UgLTIgZXhjZXB0IHRoaXMg bW9kdWxlIGFscmVhZHkgcHJpbnRlZCB0aGUgZXJyb3IgbWVzc2FnZQotIC0zOiBubyBpbnB1dCBw cm92aWRlZCB3aGVuIHJlcXVpcmVkCi0gLTI6IGlucHV0IHdhcyBpbnZhbGlkIChlLmcuIG5vdCBh IG51bWJlciB3aGVuIGEgbnVtYmVyIHdhcyByZXF1aXJlZCkKLSAtMTogcmVwYXJzZSByZXF1aXJl ZCAodXNlciBkZWxldGVkIGludG8gYSBwcmVjZWRpbmcgZmllbGQpCi0gIDAgb3IgZ3JlYXRlcjog c3VjY2VzcwotU2VlIGluZGl2aWR1YWwgZnVuY3Rpb25zIGZvciBncmVhdGVyIGRldGFpbC4KLQot QmVmb3JlIHVzaW5nIHRoZXNlIHJvdXRpbmVzLCB0aGUgY2FsbGVyIHNob3VsZCAjaW5jbHVkZSAi Y2t1Y21kLmgiIGFuZCBzZXQgdGhlCi1wcm9ncmFtJ3MgcHJvbXB0IGJ5IGNhbGxpbmcgY21zZXRw KCkuICBJZiB0aGUgZmlsZSBwYXJzaW5nIGZ1bmN0aW9ucyBjbWlmaSwKLWNtb2ZpLCBvciBjbWRp ciBhcmUgdG8gYmUgdXNlZCwgdGhpcyBtb2R1bGUgbXVzdCBiZSBsaW5rZWQgd2l0aCBhIGNrP2Zp byBmaWxlCi1zeXN0ZW0gc3VwcG9ydCBtb2R1bGUgZm9yIHRoZSBhcHByb3ByaWF0ZSBzeXN0ZW0s IGUuZy4gY2t1ZmlvIGZvciBVbml4LiAgSWYKLXRoZSBjYWxsZXIgcHV0cyB0aGUgdGVybWluYWwg aW4gY2hhcmFjdGVyIHdha2V1cCAoImNicmVhayIpIG1vZGUgd2l0aCBubyBlY2hvLAotdGhlbiB0 aGVzZSBmdW5jdGlvbnMgd2lsbCBwcm92aWRlIGxpbmUgZWRpdGluZyAtLSBjaGFyYWN0ZXIsIHdv cmQsIGFuZCBsaW5lCi1kZWxldGlvbiwgYXMgd2VsbCBhcyBrZXl3b3JkIGFuZCBmaWxlbmFtZSBj b21wbGV0aW9uIHVwb24gRVNDIGFuZCBoZWxwCi1zdHJpbmdzLCBrZXl3b3JkLCBvciBmaWxlIG1l bnVzIHVwb24gJz8nLiAgSWYgdGhlIGNhbGxlciBwdXRzIHRoZSB0ZXJtaW5hbAotaW50byBjaGFy YWN0ZXIgd2FrZXVwL25vZWNobyBtb2RlLCBjYXJlIHNob3VsZCBiZSB0YWtlbiB0byByZXN0b3Jl IGl0IGJlZm9yZQotZXhpdCBmcm9tIG9yIGludGVycnVwdGlvbiBvZiB0aGUgcHJvZ3JhbS4gIElm IHRoZSBjaGFyYWN0ZXIgd2FrZXVwIG1vZGUgaXMgbm90Ci1zZXQsIHRoZSBzeXN0ZW0ncyBvd24g bGluZSBlZGl0b3IgbWF5IGJlIHVzZWQuCi0KLU5PVEU6IENvbnRyYXJ5IHRvIGV4cGVjdGF0aW9u cywgbWFueSAjaWZkZWYncyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhpcyBtb2R1bGUuCi1Bbnkgb3Bl cmF0aW9uIHJlcXVpcmluZyBhbiAjaWZkZWYgKGxpa2UgY2xlYXIgc2NyZWVuLCBnZXQgY2hhcmFj dGVyIGZyb20KLWtleWJvYXJkLCBlcmFzZSBjaGFyYWN0ZXIgZnJvbSBzY3JlZW4sIGV0Yykgc2hv dWxkIGV2ZW50dWFsbHkgYmUgdHVybmVkIGludG8gYQotY2FsbCB0byBhIGZ1bmN0aW9uIHRoYXQg aXMgZGVmaW5lZCBpbiBjaz90aW8uYywgYnV0IHRoZW4gYWxsIHRoZSBjaz90aW8uYwotbW9kdWxl cyB3b3VsZCBoYXZlIHRvIGJlIGNoYW5nZWQuLi4KLSovCi0KLS8qIEluY2x1ZGVzICovCi0KLSNp bmNsdWRlICJja2NrZXIuaCIKLSNpbmNsdWRlICJja2Nhc2MuaCIJCQkvKiBBU0NJSSBjaGFyYWN0 ZXIgc3ltYm9scyAqLwotI2luY2x1ZGUgImNrdWNtZC5oIiAgICAgICAgICAgICAgICAgICAgIC8q IENvbW1hbmQgcGFyc2luZyBkZWZpbml0aW9ucyAqLwotCi0jaWZkZWYgT1NGMTMKLSNpZmRlZiBD S19BTlNJQwotI2lmZGVmIF9OT19QUk9UTwotI3VuZGVmIF9OT19QUk9UTwotI2VuZGlmIC8qIF9O T19QUk9UTyAqLwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0jZW5kaWYgLyogT1NGMTMgKi8KLQot I2lmbmRlZiBIUFVYUFJFNjUKLSNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51bWJlciBz eW1ib2xzICovCi0jZWxzZQotI2lmbmRlZiBFUlJOT19JTkNMVURFRAotI2luY2x1ZGUgPGVycm5v Lmg+CQkJLyogRXJyb3IgbnVtYmVyIHN5bWJvbHMgKi8KLSNlbmRpZgkvKiBFUlJOT19JTkNMVURF RCAqLwotI2VuZGlmCS8qIEhQVVhQUkU2NSAqLwotCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5UCi0j ZGVmaW5lIElOQ0xfTk9QTQotI2RlZmluZSBJTkNMX1ZJTwkJCS8qIE5lZWRlZCBmb3IgY2tvY29u LmggKi8KLSNpbmNsdWRlIDxvczIuaD4KLSN1bmRlZiBDT01NRU5UCi0jZWxzZQotI2RlZmluZSBB UElSRVQgVUxPTkcKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZW5kaWYgLyogTlQgKi8KLSNpbmNs dWRlICJja29jb24uaCIKLSNpbmNsdWRlIDxpby5oPgotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZk ZWYgT1NLCi0jZGVmaW5lIGNjIGNjb3VudAkJCS8qIE9TLTkvNjhLIGNvbXBpbGVyIGJ1ZyAqLwot I2VuZGlmIC8qIE9TSyAqLwotCi0jaWZkZWYgR0VNRE9TCQkJCS8qIEF0YXJpIFNUICovCi0jaWZk ZWYgcHV0Y2hhcgotI3VuZGVmIHB1dGNoYXIKLSNlbmRpZiAvKiBwdXRjaGFyICovCi0jZGVmaW5l IHB1dGNoYXIoeCkgY29ub2MoeCkKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQotI2lmZGVmIENLX0FV VE9ETAotZXh0ZXJuIGludCBjbWRhZGwsIGp1c3RvbmU7Ci0jZW5kaWYgLyogQ0tfQVVUT0RMICov Ci0KLWV4dGVybiBpbnQgdGltZWxpbWl0LCBuenhvcHRzLCBub3B1c2gsIG5vbG9jYWwsIHhjbWRz cmMsIGtlZXBhbGxjaGFyczsKLQotI2lmZGVmIENLU1lTTE9HCi0jaWZkZWYgVU5JWAotI2lmZGVm IENLWFBSSU5URgkJCS8qIE91ciBwcmludGYgbWFjcm8gY29uZmxpY3RzIHdpdGggKi8KLSN1bmRl ZiBwcmludGYJCQkJLyogdXNlIG9mICJwcmludGYiIGluIHN5c2xvZy5oICovCi0jZW5kaWYgLyog Q0tYUFJJTlRGICovCi0jaWZkZWYgUlRBSVgKLSNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+Ci0jZWxz ZSAgLyogUlRBSVggKi8KLSNpbmNsdWRlIDxzeXNsb2cuaD4KLSNlbmRpZiAvKiBSVEFJWCAqLwot I2lmZGVmIENLWFBSSU5URgotI2RlZmluZSBwcmludGYgY2t4cHJpbnRmCi0jZW5kaWYgLyogQ0tY UFJJTlRGICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0KLS8q IExvY2FsIHZhcmlhYmxlcyAqLwotCi1zdGF0aWMKLWludCBwc2V0ZiA9IDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGbGFnIHRoYXQgcHJvbXB0IGhhcyBiZWVuIHNldCAqLwotICAgIGNj ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBjb3VudCAqLwot ICAgIGRweCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIER1cGxleCAoMCA9IGZ1 bGwpICovCi0gICAgaW53b3JkID0gMDsJCQkJLyogSW4gdGhlIG1pZGRsZSBvZiBnZXR0aW5nIGEg d29yZCAqLwotCi1jaGFyICpkZnByb20gPSAiQ29tbWFuZD8gIjsgICAgICAgICAgICAgLyogRGVm YXVsdCBwcm9tcHQgKi8KLSNpZm5kZWYgTk9MQVNURklMRQotY2hhciAqbGFzdGZpbGUgPSBOVUxM OwkJCS8qIExhc3QgZmlsZXNwZWMgKi8KLXN0YXRpYyBjaGFyICp0bXBsYXN0ZmlsZSA9IE5VTEw7 CS8qIExhc3QgZmlsZXNwZWMgY2FuZGlkYXRlICovCi0jZW5kaWYJLyogTk9MQVNURklMRSAqLwot Ci1pbnQgY21mbGdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBmbGFn cyAqLwotaW50IGNtZnNhdjsJCQkJLyogQSBzYXZlZCB2ZXJzaW9uIG9mIHRoZW0gKi8KLQotc3Rh dGljIGNoYXIgcHVzaGMgPSBOVUw7Ci1zdGF0aWMgY2hhciBicmtjaGFyID0gTlVMOwotCi0jZGVm aW5lIENNREVGQVVMVCAxMDIzCi1zdGF0aWMgY2hhciBjbWRlZmF1bHRbQ01ERUZBVUxUKzFdOwot Ci0jaWZkZWYgRENNREJVRgotY2hhciAqY21kYnVmID0gTlVMTDsJCQkvKiBDb21tYW5kIGJ1ZmZl ciAqLwotY2hhciAqc2F2YnVmID0gTlVMTDsJCQkvKiBCdWZmZXIgdG8gc2F2ZSBjb3B5IG9mIGNv bW1hbmQgKi8KLWNoYXIgKmF0bWJ1ZiA9IE5VTEw7CQkJLyogQXRvbSBidWZmZXIgLSBmb3IgY3Vy cmVudCBmaWVsZCAqLwotY2hhciAqYXR4YnVmID0gTlVMTDsJCQkvKiBGb3IgZXhwYW5kaW5nIHRo ZSBhdG9tIGJ1ZmZlciAqLwotY2hhciAqcHJldmNtZCA9IE5VTEw7Ci1zdGF0aWMgY2hhciAqYXR5 YnVmID0gTlVMTDsJCS8qIEZvciBjb3B5aW5nIGF0b20gYnVmZmVyICovCi1zdGF0aWMgY2hhciAq ZmlsYnVmID0gTlVMTDsJCS8qIEZpbGUgbmFtZSBidWZmZXIgKi8KLXN0YXRpYyBjaGFyICpjbXBy b20gPSBOVUxMOwkJLyogUHJvZ3JhbSdzIHByb21wdCAqLwotc3RhdGljIGNoYXIgKmNtcHJ4eCA9 IE5VTEw7CQkvKiBQcm9ncmFtJ3MgcHJvbXB0LCB1bmV2YWx1YXRlZCAqLwotCi0jaWZkZWYgQ0tf UkVDQUxMCi0vKgotICBDb21tYW5kIHJlY2FsbCBpcyBhdmFpbGFibGUgb25seSBpZiB3ZSBjYW4g bWFrZSBwcm9mbGlnYXRlIHVzZSBvZiBtYWxsb2MoKS4KLSovCi0jZGVmaW5lIFJfTUFYIDEwCQkJ LyogSG93IG1hbnkgY29tbWFuZHMgdG8gc2F2ZSAqLwotaW50IGNtX3JlY2FsbCA9IFJfTUFYOwkJ CS8qIFNpemUgb2YgY29tbWFuZCByZWNhbGwgYnVmZmVyICovCi1pbnQgb25fcmVjYWxsID0gMTsJ CQkvKiBSZWNhbGwgZmVhdHVyZSBpcyBPTiAqLwotc3RhdGljIGludCBub19yZWNhbGwgPSAwOwkJ LyogUmVjYWxsIE9GRiBmb3IgdGhpcyBjbWQgb25seSAqLwotc3RhdGljIGludCBmb3JjZV9hZGQg PSAwOwkJLyogRm9yY2UgY21kIGludG8gcmVjYWxsIGJ1ZmZlciAqLwotc3RhdGljIGludCBsYXN0 X3JlY2FsbCA9IC0xOwkJLyogTGFzdCByZWNhbGwtcmVsYXRlZCBhY3Rpb24gKi8KLS8qCi0gIC0x ID0gbm9uZQotICAgMCA9IENSIChhIGNvbW1hbmQgd2FzIGVudGVyZWQpCi0gICAxID0gVXAKLSAg IDIgPSBEb3duCi0qLwotaW50IGluX3JlY2FsbCA9IDA7CQkJLyogUmVjYWxsIGJ1ZmZlcnMgYXJl IGluaXQnZCAqLwotc3RhdGljIGludAotICBjdXJyZW50ID0gLTEsCQkJCS8qIFBvaW50ZXIgdG8g Y3VycmVudCBjb21tYW5kICovCi0gIHJsYXN0ID0gLTE7CQkJCS8qIEluZGV4IG9mIGxhc3QgY29t bWFuZCBpbiBidWZmZXIgKi8KLXN0YXRpYyBjaGFyICoqcmVjYWxsID0gTlVMTDsJCS8qIEFycmF5 IG9mIHJlY2FsbCBidWZmZXIgcG9pbnRlcnMgKi8KLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSNl bHNlICAvKiAhRENNREJVRiAqLwotY2hhciBjbWRidWZbQ01EQkwrNF07ICAgICAgICAgICAgICAg ICAgIC8qIENvbW1hbmQgYnVmZmVyICovCi1jaGFyIHNhdmJ1ZltDTURCTCs0XTsgICAgICAgICAg ICAgICAgICAgLyogQnVmZmVyIHRvIHNhdmUgY29weSBvZiBjb21tYW5kICovCi1jaGFyIGF0bWJ1 ZltBVE1CTCs0XTsgICAgICAgICAgICAgICAgICAgLyogQXRvbSBidWZmZXIgKi8KLWNoYXIgYXR4 YnVmW0NNREJMKzRdOyAgICAgICAgICAgICAgICAgICAvKiBGb3IgZXhwYW5kaW5nIHRoZSBhdG9t IGJ1ZmZlciAqLwotY2hhciBwcmV2Y21kW0NNREJMKzRdOwkJCS8qIEZvciBkaXNwbGF5aW5nIHRo ZSBsYXN0IGNvbW1hbmQgKi8KLXN0YXRpYyBjaGFyIGF0eWJ1ZltBVE1CTCs0XTsJCS8qIEZvciBj b3B5aW5nIGF0b20gYnVmZmVyICovCi1zdGF0aWMgY2hhciBmaWxidWZbQVRNQkwrNF07CQkvKiBG aWxlIG5hbWUgYnVmZmVyICovCi1zdGF0aWMgY2hhciBjbXByb21bUFJPTVBUTCsxXTsJCS8qIFBy b2dyYW0ncyBwcm9tcHQgKi8KLXN0YXRpYyBjaGFyIGNtcHJ4eFtQUk9NUFRMKzFdOwkJLyogUHJv Z3JhbSdzIHByb21wdCwgdW5ldmFsdWF0ZWQgKi8KLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLS8q IENvbW1hbmQgYnVmZmVyIHBvaW50ZXJzICovCi0KLSNkZWZpbmUgUFBWTEVOIFZOQU1MCQkJLyog MjAwODAzMDUgV29sZnJhbSBTYW5nICh3YXMgMjQpICovCi1jaGFyIHBwdm5hbWJ1ZltQUFZMRU4r MV0gPSB7IE5VTCwgTlVMIH07Ci0KLWNoYXIgKiBjbWJwdHIgPSBOVUxMOwkJCS8qIEN1cnJlbnQg cG9zaXRpb24gKGZvciBleHBvcnQpICovCi0KLXN0YXRpYyBjaGFyICpicCwgICAgICAgICAgICAg ICAgICAgICAgICAvKiBDdXJyZW50IGNvbW1hbmQgYnVmZmVyIHBvc2l0aW9uICovCi0gICAgKnBw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgb2YgY3VycmVudCBmaWVs ZCAqLwotICAgICpucDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9m IG5leHQgZmllbGQgKi8KLQotc3RhdGljIGludCB1bmd3LAkJCS8qIEZvciB1bmdldHRpbmcgd29y ZHMgKi8KLSAgICBhdHhuOwkJCQkvKiBFeHBhbnNpb24gYnVmZmVyIChhdHhidWYpIGxlbmd0aCAq LwotCi0jaWZkZWYgT1MyCi1leHRlcm4gaW50IHdpZGVyZXN1bHQ7Ci0jZW5kaWYgLyogT1MyICov Ci0KLWV4dGVybiBpbnQgY21kX2NvbHMsIGNtZF9yb3dzLCBsb2NhbCwgcXVpZXQ7Ci0KLSNpZmRl ZiBUTkNPREUKLSNpZmRlZiBJQUMKLSN1bmRlZiBJQUMKLSNlbmRpZiAvKiBJQUMgKi8KLSNkZWZp bmUgSUFDIDI1NQotI2VuZGlmIC8qIFROQ09ERSAqLwotCi1fUFJPVE9UWVAoIHN0YXRpYyBpbnQg Z3R3b3JkLCAoaW50KSApOwotX1BST1RPVFlQKCBzdGF0aWMgaW50IGFkZGJ1ZiwgKGNoYXIgKikg KTsKLV9QUk9UT1RZUCggc3RhdGljIGludCBzZXRhdG0sIChjaGFyICosIGludCkgKTsKLV9QUk9U T1RZUCggc3RhdGljIFZPSUQgY21kbmV3bCwgKGNoYXIpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBW T0lEIGNtZGNoYXJkZWwsICh2b2lkKSApOwotX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBjbWRlY2hv LCAoY2hhciwgaW50KSApOwotX1BST1RPVFlQKCBzdGF0aWMgaW50IHRlc3QsIChpbnQsIGludCkg KTsKLSNpZmRlZiBHRU1ET1MKLV9QUk9UT1RZUCggZXh0ZXJuIGNoYXIgKnN0cmNociwgKGNoYXIg KiwgaW50KSApOwotI2VuZGlmIC8qIEdFTURPUyAqLwotCi1leHRlcm4gY2hhciAqIGRmdHR5Owot Ci0vKiBUaGUgZm9sbG93aW5nIGFyZSBmb3IgdXNlIHdpdGggY2hhaW5lZCBGREIncyAqLwotCi1z dGF0aWMgaW50IGNyZmxhZyA9IDA7CQkJLyogQ2FycmlhZ2UgcmV0dXJuIHdhcyB0eXBlZCAqLwot c3RhdGljIGludCBxbWZsYWcgPSAwOwkJCS8qIFF1ZXN0aW9uIG1hcmsgd2FzIHR5cGVkICovCi1z dGF0aWMgaW50IGVzZmxhZyA9IDA7CQkJLyogRXNjYXBlIHdhcyB0eXBlZCAqLwotCi0vKiBEaXJl Y3Rvcnkgc2VwYXJhdG9yICovCi0KLSNpZmRlZiBHRU1ET1MKLXN0YXRpYyBjaGFyIGRpcnNlcCA9 ICdcXCc7Ci0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi1zdGF0aWMgY2hhciBkaXJzZXAgPSAn Oic7Ci0jZWxzZQotI2lmZGVmIE1BQwotc3RhdGljIGNoYXIgZGlyc2VwID0gJzonOwotI2Vsc2UK LSNpZmRlZiBWTVMKLXN0YXRpYyBjaGFyIGRpcnNlcCA9ICcuJzsKLSNlbHNlCi0jaWZkZWYgU1RS QVRVUwotc3RhdGljIGNoYXIgZGlyc2VwID0gJz4nOwotI2Vsc2UKLXN0YXRpYyBjaGFyIGRpcnNl cCA9ICcvJzsJCS8qIFVOSVgsIE9TLzIsIE9TLTksIEFtaWdhLCBldGMuICovCi0jZW5kaWYgLyog U1RSQVRVUyAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogR0VNRE9TICovCi0KLS8qICBIIEEgUyBOIE8gUCBB IFQgSCAgKi8KLQotLyogIFJldHVybnMgMCBpZiBmaWxlc3BlYyBzIGluY2x1ZGVzIGFueSBwYXRo IHNlZ21lbnRzOyAxIGlmIGl0IGRvZXNuJ3QuICovCi0KLWludAotaGFzbm9wYXRoKHMpIGNoYXIg KiBzOyB7Ci0gICAgY2hhciAqIHAgPSBOVUxMOwotICAgIGlmICghcykgcmV0dXJuKDApOwotICAg IGlmICghKnMpIHJldHVybigwKTsKLSAgICB6c3RyaXAocywmcCk7Ci0gICAgcmV0dXJuKGNrc3Ry Y21wKHMscCxDS01BWFBBVEgsZmlsZWNhc2UpID09IDAgPyAxIDogMCk7Ci19Ci0KLS8qICBDIEsg UyBQIFIgRSBBIEQgIC0tICBQcmludCBzdHJpbmcgZG91YmxlLXNwYWNlZCAgKi8KLQotc3RhdGlj IGNoYXIgKiBzcHJwdHIgPSBOVUxMOwotCi1zdGF0aWMgY2hhciAqCi1ja3NwcmVhZChzKSBjaGFy ICogczsgewotICAgIGludCBuID0gMDsKLSAgICBjaGFyICogcDsKLSAgICBuID0gc3RybGVuKHMp OwotICAgIGlmIChzcHJwdHIpCi0gICAgICBmcmVlKHNwcnB0cik7Ci0gICAgc3BycHRyID0gbWFs bG9jKG4gKyBuICsgMyk7Ci0gICAgaWYgKHNwcnB0cikgewotCXAgPSBzcHJwdHI7Ci0Jd2hpbGUg KCpzKSB7Ci0JICAgICpwKysgPSAqcysrOwotCSAgICAqcCsrID0gU1A7Ci0JfQotCSpwID0gTlVM OwotICAgIH0KLSAgICByZXR1cm4oc3BycHRyID8gc3BycHRyIDogIiIpOwotfQotCi0vKiAgVCBF IFMgVCAgLS0gIEJpdCB0ZXN0ICAqLwotCi1zdGF0aWMgaW50Ci10ZXN0KHgsbSkgaW50IHgsIG07 IHsgLyogIFJldHVybnMgMSBpZiBhbnkgYml0cyBmcm9tIG0gYXJlIG9uIGluIHgsIGVsc2UgMCAg Ki8KLSAgICByZXR1cm4oKHggJiBtKSA/IDEgOiAwKTsKLX0KLQotLyogIEsgVyBEIEggRSBMIFAg IC0tICBHaXZlbiBhIGtleXdvcmQgdGFibGUsIHByaW50IGtleXdvcmRzIGluIGNvbHVtbnMuICAq LwotLyoKLSAgQ2FsbCB3aXRoOgotICAgIHMgICAgIC0ga2V5d29yZCB0YWJsZQotICAgIG4gICAg IC0gbnVtYmVyIG9mIGVudHJpZXMKLSAgICBwYXQgICAtIHBhdHRlcm4gKGxlZnQgc3Vic3RyaW5n KSB0aGF0IG11c3QgbWF0Y2ggZm9yIGVhY2gga2V5d29yZAotICAgIHByZSAgIC0gcHJlZml4IHRv IGFkZCB0byBlYWNoIGtleXdvcmQKLSAgICBwb3N0ICAtIHN1ZmZpeCB0byBhZGQgdG8gZWFjaCBr ZXl3b3JkCi0gICAgb2ZmICAgLSBvZmZzZXQgb24gZmlyc3Qgc2NyZWVuZnVsLCBhbGxvd2luZyBy b29tIGZvciBpbnRyb2R1Y3RvcnkgdGV4dAotICAgIHhobHAgIC0gMSB0byBwcmludCBhbnkgQ01f SU5WIGtleXdvcmRzIHRoYXQgYXJlIG5vdCBhbHNvIGFiYnJldmlhdGlvbnMuCi0gICAgICAgICAg ICAyIHRvIHByaW50IENNX0lOViBrZXl3b3JkcyBpZiBDTV9ITFAgYWxzbyBzZXQKLSAgICAgICAg ICAgIDQgaWYgaXQncyBhIHN3aXRjaCB0YWJsZSAodG8gc2hvdyAnOicgaWYgQ01fQVJHKQotCi0g IEFycmFuZ2VzIGtleXdvcmRzIGluIGNvbHVtbnMgd2l0aCB3aWR0aCBiYXNlZCBvbiBsb25nZXN0 IGtleXdvcmQuCi0gIERvZXMgIm1vcmU/IiBwcm9tcHRpbmcgYXQgZW5kIG9mIHNjcmVlbi4KLSAg VXNlcyBnbG9iYWwgY21kX3Jvd3MgYW5kIGNtZF9jb2xzIGZvciBzY3JlZW4gc2l6ZS4KLSovCi1W T0lECi1rd2RoZWxwKHMsbixwYXQscHJlLHBvc3Qsb2ZmLHhobHApCi0gICAgc3RydWN0IGtleXRh YiBzW107IGludCBuLCBvZmYsIHhobHA7IGNoYXIgKnBhdCwgKnByZSwgKnBvc3Q7Ci0vKiBrd2Ro ZWxwICovIHsKLQotICAgIGludCB3aWR0aCA9IDA7Ci0gICAgaW50IGNjOwotICAgIGludCBjb2xz LCBoZWlnaHQsIGksIGosIGssIGxjLCBuMiA9IDA7Ci0gICAgY2hhciAqYiA9IE5VTEwsICpwLCAq cTsKLSAgICBjaGFyICpwYSwgKnB4OwotICAgIGNoYXIgKipzMiA9IE5VTEw7Ci0gICAgY2hhciAq dG1wYnVmID0gTlVMTDsKLQotICAgIGNjID0gc3RybGVuKHBhdCk7Ci0KLSAgICBpZiAoIXMpIHJl dHVybjsJCQkvKiBOb3RoaW5nIHRvIGRvICovCi0gICAgaWYgKG4gPCAxKSByZXR1cm47CQkJLyog RGl0dG8gKi8KLSAgICBpZiAob2ZmIDwgMCkgb2ZmID0gMDsJCS8qIE9mZnNldCBmb3IgZmlyc3Qg cGFnZSAqLwotICAgIGlmICghcHJlKSBwcmUgPSAiIjsJCQkvKiBIYW5kbGUgbnVsbCBzdHJpbmcg cG9pbnRlcnMgKi8KLSAgICBpZiAoIXBvc3QpIHBvc3QgPSAiIjsKLSAgICBsYyA9IG9mZjsJCQkJ LyogU2NyZWVuLWxpbmUgY291bnRlciAqLwotCi0gICAgaWYgKHhobHAgJiA0KQkJCS8qIEZvciBz d2l0Y2hlcyAqLwotICAgICAgdG1wYnVmID0gKGNoYXIgKiltYWxsb2MoVE1QQlVGU0laKzEpOwot Ci0gICAgaWYgKChzMiA9IChjaGFyICoqKSBtYWxsb2MobiAqIHNpemVvZihjaGFyICopKSkpIHsK LQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CS8qIEZpbmQgbG9uZ2VzdCBrZXl3b3JkICovCi0J ICAgIHMyW2ldID0gTlVMTDsKLQkgICAgaWYgKGNrc3RyY21wKHNbaV0ua3dkLHBhdCxjYywwKSkK LQkgICAgICBjb250aW51ZTsKLQotCSAgICBpZiAoc1tpXS5mbGdzICYgQ01fUFNICS8qIE5PUFVT SCBvciBub3B1c2ggc2NyZWVuaW5nICovCi0jaWZuZGVmIE5PUFVTSAotCQkmJiBub3B1c2gKLSNl bmRpZiAvKiBOT1BVU0ggKi8KLQkJKQotCSAgICAgIGNvbnRpbnVlOwotCSAgICBpZiAoc1tpXS5m bGdzICYgQ01fTE9DCS8qIE5PTE9DQUwgb3Igbm9sb2NhbCBzY3JlZW5pbmcgKi8KLSNpZm5kZWYg Tk9MT0NBTAotCQkmJiBub2xvY2FsCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCQkpCi0JICAgICAg Y29udGludWU7Ci0KLQkgICAgaWYgKHNbaV0uZmxncyAmIENNX0lOVikgewotI2lmZGVmIENPTU1F TlQKLS8qIFRoaXMgY29kZSBkb2VzIG5vdCBzaG93IGludmlzaWJsZSBrZXl3b3JkcyBhdCBhbGwg ZXhjZXB0IGZvciAiaGVscCA/IiAqLwotLyogYW5kIHRoZW4gb25seSBoZWxwIHRvcGljcyAoQ01f SExQKSBpbiB0aGUgdG9wLWxldmVsIGtleXdvcmQgbGlzdC4gKi8KLQotCQlpZiAoKHhobHAgJiAy KSA9PSAwKQotCQkgIGNvbnRpbnVlOwotCQllbHNlIGlmICgoc1tpXS5mbGdzICYgQ01fSExQKSA9 PSAwKQotCQkgIGNvbnRpbnVlOwotI2Vsc2UKLS8qIFRoaXMgY29kZSBzaG93cyBpbnZpc2libGUg a2V5d29yZHMgdGhhdCBhcmUgbm90IGFsc28gYWJicmV2aWF0aW9ucyB3aGVuICovCi0vKiA/IHdh cyB0eXBlZCBBRlRFUiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWVsZCBzbyB0aGUgdXNlciBjYW4g ZmluZCBvdXQgKi8KLS8qIHdoYXQgdGhleSBhcmUgYW5kIChmb3IgZXhhbXBsZSkgd2h5IGNvbXBs ZXRpb24gZG9lc24ndCB3b3JrIGF0IHRoaXMgcG9pbnQgKi8KLQotCQlpZiAoc1tpXS5mbGdzICYg Q01fQUJSKQotCQkgIGNvbnRpbnVlOwotCQllbHNlIGlmICgoeGhscCAmIDMpID09IDApCi0JCSAg Y29udGludWU7Ci0JCWVsc2UgaWYgKCh4aGxwICYgMikgJiYgKChzW2ldLmZsZ3MgJiBDTV9ITFAp ID09IDApKQotCQkgIGNvbnRpbnVlOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgfQotCSAg ICBqID0gc3RybGVuKHNbaV0ua3dkKTsKLQkgICAgaWYgKCEoeGhscCAmIDQpIHx8ICF0bXBidWYp IHsgLyogUmVndWxhciBrZXl3b3JkIHRhYmxlICovCi0JCXMyW24yKytdID0gc1tpXS5rd2Q7CS8q IENvcHkgcG9pbnRlcnMgdG8gdmlzaWJsZSBvbmVzICovCi0JICAgIH0gZWxzZSB7CQkJLyogU3dp dGNoZXMgKi8KLQkJY2ttYWttc2codG1wYnVmLAkvKiBNYWtlIGEgY29weSB0aGF0IHNob3dzICI6 IiBpZiAqLwotCQkJIFRNUEJVRlNJWiwJLyogdGhlIHN3aXRjaCB0YWtlcyBhbiBhcmd1bWVudC4g Ki8KLQkJCSBzW2ldLmt3ZCwKLQkJCSAoc1tpXS5mbGdzICYgQ01fQVJHKSA/ICI6IiA6ICIiLAot CQkJIE5VTEwsCi0JCQkgTlVMTAotCQkJICk7Ci0JCW1ha2VzdHIoJihzMltuMl0pLHRtcGJ1Zik7 Ci0JCWlmIChzW2ldLmZsZ3MgJiBDTV9BUkcpIGorKzsKLQkJbjIrKzsKLQkgICAgfQotCSAgICBp ZiAoaiA+IHdpZHRoKQotCSAgICAgIHdpZHRoID0gajsKLQl9Ci0JLyogQ29sdW1uIHdpZHRoICov Ci0JbiA9IG4yOwotICAgIH0KLSAgICBpZiAoczIgJiYgKGIgPSAoY2hhciAqKSBtYWxsb2MoY21k X2NvbHMgKyAxKSkpIHsgLyogTWFrZSBhIGxpbmUgYnVmZmVyICAgKi8KLQljaGFyICogYng7Ci0J YnggPSBiICsgY21kX2NvbHM7Ci0Jd2lkdGggKz0gKGludClzdHJsZW4ocHJlKSArIChpbnQpc3Ry bGVuKHBvc3QpICsgMjsKLQljb2xzID0gY21kX2NvbHMgLyB3aWR0aDsJLyogSG93IG1hbnkgY29s dW1ucz8gKi8KLQlpZiAoY29scyA8IDEpIGNvbHMgPSAxOwotCWhlaWdodCA9IG4gLyBjb2xzOwkJ LyogSG93IGxvbmcgaXMgZWFjaCBjb2x1bW4/ICovCi0JaWYgKG4gJSBjb2xzKSBoZWlnaHQrKzsJ CS8qIEFkZCBvbmUgZm9yIHJlbWFpbmRlciwgaWYgYW55ICovCi0KLQlmb3IgKGkgPSAwOyBpIDwg aGVpZ2h0OyBpKyspIHsJICAgIC8qIExvb3AgZm9yIGVhY2ggcm93ICovCi0JICAgIGZvciAoaiA9 IDA7IGogPCBjbWRfY29sczsgaisrKSAgLyogRmlyc3QgZmlsbCByb3cgd2l0aCBibGFua3MgKi8K LQkgICAgICBiW2pdID0gU1A7Ci0JICAgIGZvciAoaiA9IDA7IGogPCBjb2xzOyBqKyspIHsgICAg LyogTG9vcCBmb3IgZWFjaCBjb2x1bW4gaW4gcm93ICovCi0JCWsgPSBpICsgKGogKiBoZWlnaHQp OyAgICAgICAvKiBJbmRleCBvZiBuZXh0IGtleXdvcmQgKi8KLQkJaWYgKGsgPCBuKSB7CQkgICAg LyogSW4gcmFuZ2U/ICovCi0JCSAgICBwYSA9IHByZTsKLQkJICAgIHB4ID0gcG9zdDsKLQkJICAg IHAgPSBzMltrXTsJCSAgICAvKiBQb2ludCB0byB2ZXJiIG5hbWUgKi8KLQkJICAgIHEgPSBiICsg KGogKiB3aWR0aCkgKyAxOyAvKiBXaGVyZSB0byBjb3B5IGl0IHRvICovCi0JCSAgICB3aGlsZSAo KHEgPCBieCkgJiYgKCpxKysgPSAqcGErKykpIDsgLyogQ29weSBwcmVmaXggKi8KLQkJICAgIHEt LTsJCSAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLwotCQkgICAgd2hpbGUg KChxIDwgYngpICYmICgqcSsrID0gKnArKykpIDsJIC8qIENvcHkgZmlsZW5hbWUgKi8KLQkJICAg IHEtLTsJCSAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLwotCQkgICAgd2hp bGUgKChxIDwgYngpICYmICgqcSsrID0gKnB4KyspKSA7IC8qIENvcHkgc3VmZml4ICovCi0JCSAg ICBpZiAoaiA8IGNvbHMgLSAxKSB7Ci0JCQlxLS07Ci0JCQkqcSA9IFNQOwkvKiBSZXBsYWNlIHRo ZSBzcGFjZSAqLwotCQkgICAgfQotCQl9Ci0JICAgIH0KLQkgICAgcCA9IGIgKyBjbWRfY29scyAt IDE7CS8qIExhc3QgY2hhciBpbiBsaW5lICovCi0JICAgIHdoaWxlICgqcC0tID09IFNQKSA7CS8q IFRyaW0gKi8KLQkgICAgKihwKzIpID0gTlVMOwotCSAgICBwcmludGYoIiVzXG4iLGIpOwkJLyog UHJpbnQgdGhlIGxpbmUgKi8KLQkgICAgaWYgKCsrbGMgPiAoY21kX3Jvd3MgLSAyKSkgeyAvKiBT Y3JlZW4gZnVsbD8gKi8KLQkJaWYgKCFhc2ttb3JlKCkpCQkvKiBEbyBtb3JlLXByb21wdGluZy4u LiAqLwotCQkgIGdvdG8geGt3ZGhlbHA7Ci0JCWVsc2UKLQkJICBsYyA9IDA7Ci0JICAgIH0KLQl9 Ci0JLyogcHJpbnRmKCJcbiIpOyAqLwkJLyogQmxhbmsgbGluZSBhdCBlbmQgb2YgcmVwb3J0ICov Ci0gICAgfSBlbHNlIHsJCQkJLyogTWFsbG9jIGZhaWx1cmUsIG5vIGNvbHVtbnMgKi8KLQlmb3Ig KGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JICAgIGlmIChzW2ldLmZsZ3MgJiBDTV9JTlYpCS8qIFVz ZSBvcmlnaW5hbCBrZXl3b3JkIHRhYmxlICovCi0JICAgICAgY29udGludWU7CQkJLyogc2tpcHBp bmcgaW52aXNpYmxlIGVudHJpZXMgKi8KLQkgICAgcHJpbnRmKCIlcyVzJXNcbiIscHJlLHNbaV0u a3dkLHBvc3QpOwotCSAgICBpZiAoKytsYyA+IChjbWRfcm93cyAtIDIpKSB7IC8qIFNjcmVlbiBm dWxsPyAqLwotCQlpZiAoIWFza21vcmUoKSkJCS8qIERvIG1vcmUtcHJvbXB0aW5nLi4uICovCi0J CSAgZ290byB4a3dkaGVscDsKLQkJZWxzZQotCQkgIGxjID0gMDsKLQkgICAgfQotCX0KLSAgICB9 Ci0gIHhrd2RoZWxwOgotICAgIGlmICh4aGxwICYgNCkgewotCWlmICh0bXBidWYpIGZyZWUoKGNo YXIgKil0bXBidWYpOwotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0JICBpZiAoczJbaV0pIGZy ZWUoczJbaV0pOwotICAgIH0KLSAgICBpZiAoczIpIGZyZWUoczIpOwkJCS8qIEZyZWUgYXJyYXkg Y29weSAqLwotICAgIGlmIChiKSBmcmVlKGIpOwkJCS8qIEZyZWUgbGluZSBidWZmZXIgKi8KLSAg ICByZXR1cm47Ci19Ci0KLS8qICBYIEYgSSBMIEggRSBMIFAgIC0tICBHaXZlbiBhIGZpbGUgbGlz dCwgcHJpbnQgbmFtZXMgaW4gY29sdW1ucy4gICovCi0vKgotICBDYWxsIHdpdGg6Ci0gICAgbiAg ICAgLSBudW1iZXIgb2YgZW50cmllcwotICAgIHByZSAgIC0gcHJlZml4IHRvIGFkZCB0byBlYWNo IGZpbGVuYW1lCi0gICAgcG9zdCAgLSBzdWZmaXggdG8gYWRkIHRvIGVhY2ggZmlsZW5hbWUKLSAg ICBvZmYgICAtIG9mZnNldCBvbiBmaXJzdCBzY3JlZW5mdWwsIGFsbG93aW5nIHJvb20gZm9yIGlu dHJvZHVjdG9yeSB0ZXh0Ci0gICAgY21kaXJmbGcgLSAxIGlmIG9ubHkgZGlyZWN0b3J5IG5hbWVz IHNob3VsZCBiZSBsaXN0ZWQsIDAgdG8gbGlzdCBhbGwgZmlsZXMKLSAgICBmcyAgICAtIGNhbGwg ZmlsZXNlbGVjdCgpIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgZWFjaCBmaWxlLgotICAg IFRoZSByZXN0IG9mIHRoZSBhcmdzIGFyZSB0aGUgc2FtZSBhcyBmb3IgZmlsZXNlbGVjdCgpLgot Ci0gIEFycmFuZ2VzIGZpbGVuYW1lcyBpbiBjb2x1bW5zIHdpdGggd2lkdGggYmFzZWQgb24gbG9u Z2VzdCBmaWxlbmFtZS4KLSAgRG9lcyAibW9yZT8iIHByb21wdGluZyBhdCBlbmQgb2Ygc2NyZWVu LgotICBVc2VzIGdsb2JhbCBjbWRfcm93cyBhbmQgY21kX2NvbHMgZm9yIHNjcmVlbiBzaXplLgot Ki8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXhmaWxoZWxwKAotICAgIGludCBuLCBjaGFyICpw cmUsIGNoYXIgKnBvc3QsIGludCBvZmYsIGludCBjbWRpcmZsYWcsCi0gICAgaW50IGZzLCBjaGFy ICpzYSwgY2hhciAqc2IsIGNoYXIgKnNuYSwgY2hhciAqc25iLAotICAgIENLX09GRl9UIG1pbnNp eiwgQ0tfT0ZGX1QgbWF4c2l6LAotICAgIGludCBuYnUsIGludCBueGxpc3QsCi0gICAgY2hhciAq KiB4bGlzdAotKQotI2Vsc2UKLXhmaWxoZWxwKG4scHJlLHBvc3Qsb2ZmLGNtZGlyZmxnLAotCSBm cyxzYSxzYixzbmEsc25iLG1pbnNpeixtYXhzaXosbmJ1LG54bGlzdCx4bGlzdCkKLSAgICBpbnQg biwgb2ZmOyBjaGFyICpwcmUsICpwb3N0OyBpbnQgY21kaXJmbGc7Ci0gICAgaW50IGZzOyBjaGFy ICpzYSwqc2IsKnNuYSwqc25iOyBDS19PRkZfVCBtaW5zaXosbWF4c2l6OwotICAgIGludCBuYnUs bnhsaXN0OyBjaGFyICoqIHhsaXN0OwotI2VuZGlmCS8qIENLX0FOU0lDICovCi0gewotICAgIGNo YXIgZmlsYnVmW0NLTUFYUEFUSCArIDFdOwkJLyogVGVtcCBidWZmZXIgZm9yIG9uZSBmaWxlbmFt ZSAqLwotICAgIGludCB3aWR0aCA9IDA7Ci0gICAgaW50IGNvbHMsIGhlaWdodCwgaSwgaiwgaywg bGMsIG4yID0gMCwgcmMgPSAwLCBpdHNhZGlyID0gMDsKLSAgICBjaGFyICpiID0gTlVMTCwgKnAs ICpxOwotICAgIGNoYXIgKnBhLCAqcHg7Ci0gICAgY2hhciAqKnMyID0gTlVMTDsKLSNpZmRlZiBW TVMKLSAgICBjaGFyICogY2RwID0gemd0ZGlyKCk7Ci0jZW5kaWYgLyogVk1TICovCi0KLSAgICBp ZiAobiA8IDEpIHJldHVybigwKTsKLSAgICBpZiAob2ZmIDwgMCkgb2ZmID0gMDsJCS8qIE9mZnNl dCBmb3IgZmlyc3QgcGFnZSAqLwotICAgIGlmICghcHJlKSBwcmUgPSAiIjsJCQkvKiBIYW5kbGUg bnVsbCBzdHJpbmcgcG9pbnRlcnMgKi8KLSAgICBpZiAoIXBvc3QpIHBvc3QgPSAiIjsKLQotICAg IGxjID0gb2ZmOwkJCQkvKiBTY3JlZW4tbGluZSBjb3VudGVyICovCi0KLSAgICBpZiAoKHMyID0g KGNoYXIgKiopIG1hbGxvYyhuICogc2l6ZW9mKGNoYXIgKikpKSkgewotCWZvciAoaSA9IDA7IGkg PCBuOyBpKyspIHsJLyogTG9vcCB0aHJvdWdoIGZpbGVuYW1lcyAqLwotCSAgICBpdHNhZGlyID0g MDsKLQkgICAgczJbaV0gPSBOVUxMOwkJLyogSW5pdGlhbGl6ZSBlYWNoIHBvaW50ZXIgdG8gTlVM TCAqLwotCSAgICB6bmV4dChmaWxidWYpOwkJLyogR2V0IG5leHQgZmlsZW5hbWUgKi8KLQkgICAg aWYgKCFmaWxidWZbMF0pCQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCi0JICAgICAgYnJlYWs7Ci0j aWZkZWYgQ09NTUVOVAotCSAgICBpdHNhZGlyID0gaXNkaXIoZmlsYnVmKTsJLyogSXMgaXQgYSBk aXJlY3Rvcnk/ICovCi0JICAgIGlmIChjbWRpcmZsZyAmJiAhaXRzYWRpcikJLyogTm8sIGxpc3Rp bmcgZGlyZWN0b3JpZXMgb25seT8gKi8KLQkgICAgICBjb250aW51ZTsJCQkvKiBTbyBza2lwIHRo aXMgb25lLiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgaWYgKGZzKSBpZiAoZmlsZXNl bGVjdChmaWxidWYsCi0JCQkgICBzYSxzYixzbmEsc25iLAotCQkJICAgbWluc2l6LG1heHNpeixu YnUsbnhsaXN0LHhsaXN0KSA8IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0J ICAgIH0KLSNpZmRlZiBWTVMKLQkgICAgY2tzdHJuY3B5KGZpbGJ1Zix6cmVsbmFtZShmaWxidWYs Y2RwKSxDS01BWFBBVEgpOwotI2VuZGlmIC8qIFZNUyAqLwotCSAgICBqID0gc3RybGVuKGZpbGJ1 Zik7Ci0jaWZuZGVmIFZNUwotCSAgICBpZiAoaXRzYWRpciAmJiBqIDwgQ0tNQVhQQVRIIC0gMSAm JiBqID4gMCkgewotCQlpZiAoZmlsYnVmW2otMV0gIT0gZGlyc2VwKSB7Ci0JCSAgICBmaWxidWZb aisrXSA9IGRpcnNlcDsKLQkJICAgIGZpbGJ1ZltqXSA9IE5VTDsKLQkJfQotCSAgICB9Ci0jZW5k aWYgLyogVk1TICovCi0JICAgIGlmICghKHMyW24yXSA9IG1hbGxvYyhqKzEpKSkgewotCQlwcmlu dGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKLQkJcmMgPSAtOTsKLQkJZ290byB4 ZmlsaGVscDsKLQkgICAgfQotCSAgICBpZiAoaiA8PSBDS01BWFBBVEgpIHsKLQkJc3RyY3B5KHMy W24yXSxmaWxidWYpOwotCQluMisrOwotCSAgICB9IGVsc2UgewotCQlwcmludGYoIj9OYW1lIHRv byBsb25nIC0gJXNcbiIsIGZpbGJ1Zik7Ci0JCXJjID0gLTk7Ci0JCWdvdG8geGZpbGhlbHA7Ci0J ICAgIH0KLQkgICAgaWYgKGogPiB3aWR0aCkJCS8qIEdldCB3aWR0aCBvZiB3aWRlc3Qgb25lICov Ci0JICAgICAgd2lkdGggPSBqOwotCX0KLQluID0gbjI7CQkJCS8qIEhvdyBtYW55IHdlIGFjdHVh bGx5IGdvdCAqLwotICAgIH0KLSAgICBzaF9zb3J0KHMyLE5VTEwsbiwwLDAsZmlsZWNhc2UpOwkv KiBBbHBoYWJldGl6ZSB0aGUgbGlzdCAqLwotCi0gICAgcmMgPSAxOwotICAgIGlmIChzMiAmJiAo YiA9IChjaGFyICopIG1hbGxvYyhjbWRfY29scyArIDEpKSkgeyAvKiBNYWtlIGEgbGluZSBidWZm ZXIgKi8KLQljaGFyICogYng7Ci0JYnggPSBiICsgY21kX2NvbHM7Ci0Jd2lkdGggKz0gKGludClz dHJsZW4ocHJlKSArIChpbnQpc3RybGVuKHBvc3QpICsgMjsKLQljb2xzID0gY21kX2NvbHMgLyB3 aWR0aDsJLyogSG93IG1hbnkgY29sdW1ucz8gKi8KLQlpZiAoY29scyA8IDEpIGNvbHMgPSAxOwot CWhlaWdodCA9IG4gLyBjb2xzOwkJLyogSG93IGxvbmcgaXMgZWFjaCBjb2x1bW4/ICovCi0JaWYg KG4gJSBjb2xzKSBoZWlnaHQrKzsJCS8qIEFkZCBvbmUgZm9yIHJlbWFpbmRlciwgaWYgYW55ICov Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsJICAgIC8qIExvb3AgZm9yIGVhY2gg cm93ICovCi0JICAgIGZvciAoaiA9IDA7IGogPCBjbWRfY29sczsgaisrKSAgLyogRmlyc3QgZmls bCByb3cgd2l0aCBibGFua3MgKi8KLQkgICAgICBiW2pdID0gU1A7Ci0JICAgIGZvciAoaiA9IDA7 IGogPCBjb2xzOyBqKyspIHsgICAgLyogTG9vcCBmb3IgZWFjaCBjb2x1bW4gaW4gcm93ICovCi0J CWsgPSBpICsgKGogKiBoZWlnaHQpOyAgICAgICAvKiBJbmRleCBvZiBuZXh0IGZpbGVuYW1lICov Ci0JCWlmIChrIDwgbikgewkJICAgIC8qIEluIHJhbmdlPyAqLwotCQkgICAgcGEgPSBwcmU7Ci0J CSAgICBweCA9IHBvc3Q7Ci0JCSAgICBwID0gczJba107CQkgICAgICAgICAgICAgICAvKiBQb2lu dCB0byBmaWxlbmFtZSAqLwotCQkgICAgcSA9IGIgKyAoaiAqIHdpZHRoKSArIDE7ICAgICAgICAg ICAgIC8qIGFuZCBkZXN0aW5hdGlvbiAqLwotCQkgICAgd2hpbGUgKChxIDwgYngpICYmICgqcSsr ID0gKnBhKyspKSA7IC8qIENvcHkgcHJlZml4ICovCi0JCSAgICBxLS07CQkgICAgICAgICAgICAg ICAgIC8qIEJhY2sgdXAgb3ZlciBOVUwgKi8KLQkJICAgIHdoaWxlICgocSA8IGJ4KSAmJiAoKnEr KyA9ICpwKyspKSA7CSAvKiBDb3B5IGZpbGVuYW1lICovCi0JCSAgICBxLS07CQkgICAgICAgICAg ICAgICAgIC8qIEJhY2sgdXAgb3ZlciBOVUwgKi8KLQkJICAgIHdoaWxlICgocSA8IGJ4KSAmJiAo KnErKyA9ICpweCsrKSkgOyAvKiBDb3B5IHN1ZmZpeCAqLwotCQkgICAgaWYgKGogPCBjb2xzIC0g MSkgewotCQkJcS0tOwotCQkJKnEgPSBTUDsJLyogUmVwbGFjZSB0aGUgc3BhY2UgKi8KLQkJICAg IH0KLQkJfQotCSAgICB9Ci0JICAgIHAgPSBiICsgY21kX2NvbHMgLSAxOwkvKiBMYXN0IGNoYXIg aW4gbGluZSAqLwotCSAgICB3aGlsZSAoKnAtLSA9PSBTUCkgOwkvKiBUcmltICovCi0JICAgICoo cCsyKSA9IE5VTDsKLQkgICAgcHJpbnRmKCIlc1xuIixiKTsJCS8qIFByaW50IHRoZSBsaW5lICov Ci0JICAgIGlmICgrK2xjID4gKGNtZF9yb3dzIC0gMikpIHsgLyogU2NyZWVuIGZ1bGw/ICovCi0J CWlmICghYXNrbW9yZSgpKSB7CS8qIERvIG1vcmUtcHJvbXB0aW5nLi4uICovCi0JCSAgICByYyA9 IDA7Ci0JCSAgICBnb3RvIHhmaWxoZWxwOwotCQl9IGVsc2UKLQkJICBsYyA9IDA7Ci0JICAgIH0K LQl9Ci0JcHJpbnRmKCJcbiIpOwkJCS8qIEJsYW5rIGxpbmUgYXQgZW5kIG9mIHJlcG9ydCAqLwot CWdvdG8geGZpbGhlbHA7Ci0gICAgfSBlbHNlIHsJCQkJLyogTWFsbG9jIGZhaWx1cmUsIG5vIGNv bHVtbnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JICAgIHpuZXh0KGZpbGJ1Zik7 Ci0JICAgIGlmICghZmlsYnVmWzBdKSBicmVhazsKLQkgICAgcHJpbnRmKCIlcyVzJXNcbiIscHJl LGZpbGJ1Zixwb3N0KTsKLQkgICAgaWYgKCsrbGMgPiAoY21kX3Jvd3MgLSAyKSkgeyAvKiBTY3Jl ZW4gZnVsbD8gKi8KLQkJaWYgKCFhc2ttb3JlKCkpIHsJIC8qIERvIG1vcmUtcHJvbXB0aW5nLi4u ICovCi0JCSAgICByYyA9IDA7Ci0JCSAgICBnb3RvIHhmaWxoZWxwOwotCQl9IGVsc2UgbGMgPSAw OwotCSAgICB9Ci0JfQoteGZpbGhlbHA6Ci0JaWYgKGIpIGZyZWUoYik7Ci0JZm9yIChpID0gMDsg aSA8IG4yOyBpKyspCi0JICBpZiAoczJbaV0pIGZyZWUoczJbaV0pOwotCWlmIChzMikgZnJlZSgo Y2hhciAqKXMyKTsKLQlyZXR1cm4ocmMpOwotICAgIH0KLX0KLQotLyoKLSAgU2ltcGxlciBmcm9u dCBlbmQgZm9yIHhmaWxoZWxwKCkgd2l0aCBzaG9ydGVyIGFyZyBsaXN0IHdoZW4gbm8KLSAgZmls ZSBzZWxlY3Rpb24gaXMgbmVlZGVkLgotKi8KLWludAotZmlsaGVscChuLHByZSxwb3N0LG9mZixj bWRpcmZsZykgaW50IG4sIG9mZjsgY2hhciAqcHJlLCAqcG9zdDsgaW50IGNtZGlyZmxnOyB7Ci0g ICAgcmV0dXJuKHhmaWxoZWxwKG4scHJlLHBvc3Qsb2ZmLGNtZGlyZmxnLAotCQkgICAgMCxOVUxM LE5VTEwsTlVMTCxOVUxMLAotCQkgICAgKENLX09GRl9UKTAsKENLX09GRl9UKTAsMCwwLChjaGFy ICoqKU5VTEwpKTsKLX0KLQotLyogIEMgTSBTIEUgVCBVIFAgIC0tICBTZXQgdXAgY29tbWFuZCBi dWZmZXJzICAqLwotCi0jaWZkZWYgRENNREJVRgotaW50Ci1jbXNldHVwKCkgewotICAgIGlmICgh KGNtZGJ1ZiA9IG1hbGxvYyhDTURCTCArIDQpKSkgcmV0dXJuKC0xKTsKLSAgICBpZiAoIShzYXZi dWYgPSBtYWxsb2MoQ01EQkwgKyA0KSkpIHJldHVybigtMSk7Ci0gICAgc2F2YnVmWzBdID0gJ1ww JzsKLSAgICBpZiAoIShwcmV2Y21kID0gbWFsbG9jKENNREJMICsgNCkpKSByZXR1cm4oLTEpOwot ICAgIHByZXZjbWRbMF0gPSAnXDAnOwotICAgIGlmICghKGF0bWJ1ZiA9IG1hbGxvYyhBVE1CTCAr IDQpKSkgcmV0dXJuKC0xKTsKLSAgICBpZiAoIShhdHhidWYgPSBtYWxsb2MoQ01EQkwgKyA0KSkp IHJldHVybigtMSk7Ci0gICAgaWYgKCEoYXR5YnVmID0gbWFsbG9jKEFUTUJMICsgNCkpKSByZXR1 cm4oLTEpOwotICAgIGlmICghKGZpbGJ1ZiA9IG1hbGxvYyhBVE1CTCArIDQpKSkgcmV0dXJuKC0x KTsKLSAgICBpZiAoIShjbXByb20gPSBtYWxsb2MoUFJPTVBUTCArIDQpKSkgcmV0dXJuKC0xKTsK LSAgICBpZiAoIShjbXByeHggPSBtYWxsb2MoUFJPTVBUTCArIDQpKSkgcmV0dXJuKC0xKTsKLSNp ZmRlZiBDS19SRUNBTEwKLSAgICBjbXJpbmkoY21fcmVjYWxsKTsKLSNlbmRpZiAvKiBDS19SRUNB TEwgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogRENNREJVRiAqLwotCi0vKiAgQyBN IFMgRSBUIFAgIC0tICBTZXQgdGhlIHByb2dyYW0gcHJvbXB0LiAgKi8KLQotVk9JRAotY21zZXRw KHMpIGNoYXIgKnM7IHsKLSAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICBja3N0cm5jcHkoY21wcnh4 LHMsUFJPTVBUTCk7Ci0gICAgcHNldGYgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyog RmxhZyB0aGF0IHByb21wdCBoYXMgYmVlbiBzZXQuICovCi19Ci0KLS8qICBDIE0gUyBBIFYgUCAg LS0gIFNhdmUgYSBjb3B5IG9mIHRoZSBjdXJyZW50IHByb21wdC4gICovCi0KLVZPSUQKLSNpZmRl ZiBDS19BTlNJQwotY21zYXZwKGNoYXIgc1tdLCBpbnQgbikKLSNlbHNlCi1jbXNhdnAocyxuKSBj aGFyIHNbXTsgaW50IG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGNtc2F2cCAqLyB7Ci0g ICAgaWYgKHBzZXRmKQkJCQkvKiBCdXQgbm90IGlmIG5vIHByb21wdCBpcyBzZXQuICovCi0gICAg ICBja3N0cm5jcHkocyxjbXByeHgsbik7Ci19Ci0KLWNoYXIgKgotY21nZXRwKCkgewotICAgIHJl dHVybihjbXByeHgpOwotfQotCi1pbnQKLWNtZ2JyaygpIHsKLSAgICByZXR1cm4oYnJrY2hhcik7 Ci19Ci0KLWludAotY21na3dmbGdzKCkgewotICAgIHJldHVybihjbWt3Zmxncyk7Ci19Ci0KLS8q ICBQIFIgTyBNIFAgVCAgLS0gIElzc3VlIHRoZSBwcm9ncmFtIHByb21wdC4gICovCi0KLVZPSUQK LXByb21wdChmKSB4eF9zdHJwIGY7IHsKLSAgICBjaGFyICpzeCwgKnN5OyBpbnQgbjsKLSNpZmRl ZiBDS19TU0wKLSAgICBleHRlcm4gaW50IHNzbF9hY3RpdmVfZmxhZywgdGxzX2FjdGl2ZV9mbGFn OwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIE9TMgotICAgIGV4dGVybiBpbnQgZGlzcGxh eV9kZW1vOwotCi0gICAgLyogSWYgdGhlcmUgaXMgYSBkZW1vIHNjcmVlbiB0byBiZSBkaXNwbGF5 ZWQsIGRpc3BsYXkgaXQgKi8KLSAgICBpZiAoZGlzcGxheV9kZW1vICYmIHhjbWRzcmMgPT0gMCkg ewotICAgICAgICBkZW1vc2NybihWQ01EKTsKLSAgICAgICAgZGlzcGxheV9kZW1vID0gMDsKLSAg ICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAocHNldGYgPT0gMCkJCQkvKiBJZiBubyBw cm9tcHQgc2V0LCBzZXQgZGVmYXVsdC4gKi8KLSAgICAgIGNtc2V0cChkZnByb20pOwotCi0gICAg c3ggPSBjbXByeHg7CQkJLyogVW5ldmFsdWF0ZWQgY29weSAqLwotICAgIGlmIChmKSB7CQkJCS8q IElmIGNvbnZlcnNpb24gZnVuY3Rpb24gZ2l2ZW4gKi8KLQlzeSA9IGNtcHJvbTsJCQkvKiBFdmFs dWF0ZSBpdCAqLwotI2lmZGVmIENPTU1FTlQKLQlkZWJ1ZyhGMTAxLCJwcm9tcHQgc3giLCIiLHN4 KTsKLQlkZWJ1ZyhGMTAxLCJwcm9tcHQgc3kiLCIiLHN5KTsKLSNlbmRpZgkvKiBDT01NRU5UICov Ci0JbiA9IFBST01QVEw7Ci0JaWYgKCgqZikoc3gsJnN5LCZuKSA8IDApCS8qIElmIGV2YWx1YXRp b24gZmFpbGVkICovCi0JICBzeCA9IGNtcHJ4eDsJCQkvKiByZXZlcnQgdG8gdW5ldmFsdWF0ZWQg Y29weSAqLwotCWVsc2UgaWYgKCEqY21wcm9tKQkJLyogZGl0dG8gaWYgaXQgY2FtZSB1cCBlbXB0 eSAqLwotCSAgc3ggPSBjbXByeHg7Ci0JZWxzZQotCSAgc3ggPSBjbXByb207Ci0gICAgfSBlbHNl Ci0gICAgICBja3N0cm5jcHkoY21wcm9tLHN4LFBST01QVEwpOwotICAgIGNtcHJvbVtQUk9NUFRM LTFdID0gTlVMOwotICAgIGlmICghKnN4KQkJCQkvKiBEb24ndCBwcmludCBpZiBlbXB0eSAqLwot ICAgICAgcmV0dXJuOwotCi0jaWZkZWYgT1NLCi0gICAgZnB1dHMoc3gsIHN0ZG91dCk7Ci0jZWxz ZQotI2lmZGVmIE1BQwotICAgIHByaW50ZigiJXMiLCBzeCk7Ci0jZWxzZQotI2lmZGVmIElLU0QK LSAgICBpZiAoaW5zZXJ2ZXIpIHsJCQkvKiBQcmludCB0aGUgcHJvbXB0LiAqLwotICAgICAgICB0 dG9jKENSKTsJCQkvKiBJZiBURUxORVQgU2VydmVyICovCi0gICAgICAgIHR0b2MoTlVMKTsJCQkv KiBtdXN0IGZvbGxvVyBDUiBieSBOVUwgKi8KLSAgICAgICAgcHJpbnRmKCIlcyIsc3gpOwotICAg IH0gZWxzZQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgIHByaW50ZigiXHIlcyIsc3gpOwotI2lm ZGVmIENLX1NTTAotICAgIGlmICghKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcp KQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgZmZsdXNoKHN0ZG91dCk7CQkJLyogTm93ISAq LwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIE9TSyAqLwotfQotCi0jaWZuZGVmIE5PU1BM Ci1WT0lECi1wdXNoY21kKHMpIGNoYXIgKiBzOyB7CQkJLyogRm9yIHVzZSB3aXRoIElGIGNvbW1h bmQuICovCi0gICAgaWYgKCFzKSBzID0gbnA7Ci0gICAgY2tzdHJuY3B5KHNhdmJ1ZixzLENNREJM KTsJCS8qIFNhdmUgdGhlIGRlcGVuZGVudCBjbGF1c2UsICAqLwotICAgIGNtcmVzKCk7CQkJCS8q IGFuZCBjbGVhciB0aGUgY29tbWFuZCBidWZmZXIuICovCi0gICAgZGVidWcoRjExMCwgInB1c2hj bWQgc2F2YnVmIiwgc2F2YnVmLCAwKTsKLX0KLQotVk9JRAotcHVzaHFjbWQocykgY2hhciAqIHM7 IHsJCQkvKiBGb3IgdXNlIHdpdGggRUxTRSBjb21tYW5kLiAqLwotICAgIGNoYXIgYywgKiBwID0g c2F2YnVmOwkJLyogRGVzdCAqLwotICAgIGlmICghcykgcyA9IG5wOwkJCS8qIFNvdXJjZSAqLwot ICAgIHdoaWxlICgqcykgewkJCS8qIEdldCBmaXJzdCBub253aGl0ZXNwYWNlIGNoYXIgKi8KLQlp ZiAoKnMgIT0gU1ApCi0JICBicmVhazsKLQllbHNlCi0JICBzKys7Ci0gICAgfQotICAgIGlmICgq cyAhPSAneycpIHsJCQkvKiBJZiBpdCdzIG5vdCAieyIgKi8KLQlwdXNoY21kKHMpOwkJCS8qIGRv IHJlZ3VsYXIgcHVzaGNtZCAqLwotCXJldHVybjsKLSAgICB9Ci0gICAgd2hpbGUgKChjID0gKnMr KykpIHsJCS8qIE90aGVyd2lzZSBpbnNlcnQgcXVvdGVzICovCi0JaWYgKGMgPT0gQ01EUSkKLQkg ICpwKysgPSBDTURROwotCSpwKysgPSBjOwotICAgIH0KLSAgICBjbXJlcygpOwkJCQkvKiBhbmQg Y2xlYXIgdGhlIGNvbW1hbmQgYnVmZmVyLiAqLwotICAgIGRlYnVnKEYxMTAsICJwdXNocWNtZCBz YXZidWYiLCBzYXZidWYsIDApOwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBDT01N RU5UCi0vKiBubyBsb25nZXIgdXNlZC4uLiAqLwotVk9JRAotcG9wY21kKCkgewotICAgIGNrc3Ry bmNweShjbWRidWYsc2F2YnVmLENNREJMKTsJLyogUHV0IGJhY2sgdGhlIHNhdmVkIG1hdGVyaWFs ICovCi0gICAgKnNhdmJ1ZiA9ICdcMCc7CQkJLyogYW5kIGNsZWFyIHRoZSBzYXZlIGJ1ZmZlciAq LwotICAgIGNtcmVzKCk7Ci19Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKiAgQyBNIFIgRSBT ICAtLSAgUmVzZXQgcG9pbnRlcnMgdG8gYmVnaW5uaW5nIG9mIGNvbW1hbmQgYnVmZmVyLiAgKi8K LQotVk9JRAotY21yZXMoKSB7Ci0gICAgaW53b3JkID0gMDsJCQkJLyogV2UncmUgbm90IGluIGEg d29yZCAqLwotICAgIGNjID0gMDsJCQkJLyogQ2hhcmFjdGVyIGNvdW50IGlzIHplcm8gKi8KLQot LyogSW5pdGlhbGl6ZSBwb2ludGVycyAqLwotCi0gICAgcHAgPSBjbWRidWY7CQkJLyogQmVnaW5u aW5nIG9mIGN1cnJlbnQgZmllbGQgKi8KLSAgICBicCA9IGNtZGJ1ZjsJCQkvKiBDdXJyZW50IHBv c2l0aW9uIHdpdGhpbiBidWZmZXIgKi8KLSAgICBucCA9IGNtZGJ1ZjsJCQkvKiBXaGVyZSB0byBz dGFydCBuZXh0IGZpZWxkICovCi0KLSAgICBjbWZsZGZsZ3MgPSAwOwotICAgIGNtZmxncyA9IC01 OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIG5vdCB5ZXQgc3RhcnRlZC4gKi8KLSAg ICB1bmd3ID0gMDsJCQkJLyogRG9uJ3QgbmVlZCB0byB1bmdldCBhIHdvcmQuICovCi19Ci0KLS8q ICBDIE0gSSBOIEkgIC0tICBDbGVhciB0aGUgY29tbWFuZCBhbmQgYXRvbSBidWZmZXJzLCByZXNl dCBwb2ludGVycy4gICovCi0KLS8qCi1UaGUgYXJndW1lbnQgc3BlY2lmaWVzIHdobyBpcyB0byBl Y2hvIHRoZSB1c2VyJ3MgdHlwZWluIC0tCi0gIDEgbWVhbnMgdGhlIGNtZCBwYWNrYWdlIGVjaG9l cwotICAwIHNvbWVib2R5IGVsc2UgKHN5c3RlbSwgZnJvbnQgZW5kLCB0ZXJtaW5hbCkgZWNob2Vz Ci0qLwotVk9JRAotY21pbmkoZCkgaW50IGQ7IHsKLSNpZmRlZiBEQ01EQlVGCi0gICAgaWYgKCFh dG1idWYpCi0gICAgICBpZiAoY21zZXR1cCgpPDApCi0JZmF0YWwoImZhdGFsIGVycm9yOiB1bmFi bGUgdG8gYWxsb2NhdGUgY29tbWFuZCBidWZmZXJzIik7Ci0jZW5kaWYgLyogRENNREJVRiAqLwot I2lmZGVmIFVTRV9NRU1DUFkKLSAgICBtZW1zZXQoY21kYnVmLDAsQ01EQkwpOwotICAgIG1lbXNl dChhdG1idWYsMCxBVE1CTCk7Ci0jZWxzZQotICAgIGZvciAoYnAgPSBjbWRidWY7IGJwIDwgY21k YnVmK0NNREJMOyBicCsrKSAqYnAgPSBOVUw7Ci0gICAgZm9yIChicCA9IGF0bWJ1ZjsgYnAgPCBh dG1idWYrQVRNQkw7IGJwKyspICpicCA9IE5VTDsKLSNlbmRpZiAvKiBVU0VfTUVNQ1BZICovCi0K LSAgICAqYXRtYnVmID0gKnNhdmJ1ZiA9ICphdHhidWYgPSAqYXR5YnVmID0gKmZpbGJ1ZiA9IE5V TDsKLSAgICBibG9ja2x2bCA9IDA7CQkJLyogQmxvY2sgbGV2ZWwgaXMgMCAqLwotICAgIGxpbmVi ZWdpbiA9IDE7CQkJLyogQXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgKi8KLSAgICBkcHggPSBk OwkJCQkvKiBHbG9iYWwgY29weSBvZiB0aGUgZWNobyBmbGFnICovCi0gICAgZGVidWcoRjEwMSwi Y21pbmkgZHB4IiwiIixkcHgpOwotICAgIGNyZmxhZyA9IDA7CQkJCS8qIFJlc2V0IGZsYWdzICov Ci0gICAgcW1mbGFnID0gMDsKLSAgICBlc2ZsYWcgPSAwOwotI2lmZGVmIENLX1JFQ0FMTAotICAg IG5vX3JlY2FsbCA9IDA7CQkJLyogU3RhcnQgb3V0IHdpdGggcmVjYWxsIGVuYWJsZWQgKi8KLSNl bmRpZiAvKiBDS19SRUNBTEwgKi8KLSAgICBjbXJlcygpOwkJCQkvKiBTZXRzIGJwIGV0YyAqLwot ICAgIG5ld2NtZCA9IDE7CQkJCS8qIFNlZSBhZGRjbWQoKSAqLwotfQotCi0jaWZuZGVmIE5PU1BM Ci0vKgotICBUaGUgZm9sbG93aW5nIGJpdHMgYXJlIHRvIGFsbG93IHRoZSBjb21tYW5kIHBhY2th Z2UgdG8gY2FsbCBpdHNlbGYKLSAgaW4gdGhlIG1pZGRsZSBvZiBhIHBhcnNlLiAgVG8gZG8gdGhp cywgYmVnaW4gYnkgY2FsbGluZyBjbXB1c2gsIGFuZAotICBlbmQgYnkgY2FsbGluZyBjbXBvcC4g IEFzIHlvdSBjYW4gc2VlLCB0aGlzIGlzIHJhdGhlciBleHBlbnNpdmUuCi0qLwotI2lmZGVmIERD TURCVUYKLXN0cnVjdCBjbXAgewotICAgIGludCBpWzVdOwkJCQkvKiBzdGFjayBmb3IgaW50ZWdl cnMgKi8KLSAgICBjaGFyICpjWzNdOwkJCQkvKiBzdGFjayBmb3IgcG9pbnRlcnMgKi8KLSAgICBj aGFyICpiWzhdOwkJCQkvKiBzdGFjayBmb3IgYnVmZmVyIGNvbnRlbnRzICovCi19Owotc3RydWN0 IGNtcCAqY21wID0gMDsKLSNlbHNlCi1pbnQgY21wX2lbQ01EREVQKzFdWzVdOwkJCS8qIFN0YWNr IGZvciBpbnRlZ2VycyAqLwotY2hhciAqY21wX2NbQ01EREVQKzFdWzVdOwkJLyogZm9yIG1pc2Mg cG9pbnRlcnMgKi8KLWNoYXIgKmNtcF9iW0NNRERFUCsxXVs3XTsJCS8qIGZvciBidWZmZXIgY29u dGVudHMgcG9pbnRlcnMgKi8KLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLWludCBjbWRkZXAgPSAt MTsJCQkvKiBDdXJyZW50IHN0YWNrIGRlcHRoICovCi0KLWludAotY21wdXNoKCkgewkJCQkvKiBT YXZlIHRoZSBjb21tYW5kIGVudmlyb25tZW50ICovCi0gICAgY2hhciAqY3A7CQkJCS8qIENoYXJh Y3RlciBwb2ludGVyICovCi0KLSAgICBpZiAoY21kZGVwID49IENNRERFUCkJCS8qIEVudGVyIGEg bmV3IGNvbW1hbmQgZGVwdGggKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAgY21kZGVwKys7Ci0g ICAgZGVidWcoRjEwMSwiJmNtcHVzaCB0byBkZXB0aCIsIiIsY21kZGVwKTsKLQotI2lmZGVmIERD TURCVUYKLSAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNtcCBpZiBub3QgYWxyZWFkeSBkb25l ICovCi0gICAgaWYgKCFjbXAgJiYgIShjbXAgPSAoc3RydWN0IGNtcCAqKSBtYWxsb2Moc2l6ZW9m KHN0cnVjdCBjbXApKihDTURERVArMSkpKSkKLSAgICAgIGZhdGFsKCJjbXB1c2g6IG5vIG1lbW9y eSBmb3IgY21wIik7Ci0gICAgY21wW2NtZGRlcF0uaVswXSA9IGNtZmxnczsJCS8qIEZpcnN0IGRv IHRoZSBnbG9iYWwgaW50cyAqLwotICAgIGNtcFtjbWRkZXBdLmlbMV0gPSBjbWZzYXY7Ci0gICAg Y21wW2NtZGRlcF0uaVsyXSA9IGF0eG47Ci0gICAgY21wW2NtZGRlcF0uaVszXSA9IHVuZ3c7Ci0K LSAgICBjbXBbY21kZGVwXS5jWzBdID0gYnA7CQkvKiBUaGVuIHRoZSBnbG9iYWwgcG9pbnRlcnMg Ki8KLSAgICBjbXBbY21kZGVwXS5jWzFdID0gcHA7Ci0gICAgY21wW2NtZGRlcF0uY1syXSA9IG5w OwotI2Vsc2UKLSAgICBjbXBfaVtjbWRkZXBdWzBdID0gY21mbGdzOwkJLyogRmlyc3QgZG8gdGhl IGdsb2JhbCBpbnRzICovCi0gICAgY21wX2lbY21kZGVwXVsxXSA9IGNtZnNhdjsKLSAgICBjbXBf aVtjbWRkZXBdWzJdID0gYXR4bjsKLSAgICBjbXBfaVtjbWRkZXBdWzNdID0gdW5ndzsKLQotICAg IGNtcF9jW2NtZGRlcF1bMF0gPSBicDsJCS8qIFRoZW4gdGhlIGdsb2JhbCBwb2ludGVycyAqLwot ICAgIGNtcF9jW2NtZGRlcF1bMV0gPSBwcDsKLSAgICBjbXBfY1tjbWRkZXBdWzJdID0gbnA7Ci0j ZW5kaWYgLyogRENNREJVRiAqLwotCi0gICAgLyogTm93IHRoZSBidWZmZXJzIHRoZW1zZWx2ZXMu ICBBIGxvdCBvZiByZXBpdGl0aW91cyBjb2RlLi4uICovCi0KLSNpZmRlZiBEQ01EQlVGCi0gICAg Y3AgPSBtYWxsb2MoKGludClzdHJsZW4oY21kYnVmKSsxKTsJLyogMDogQ29tbWFuZCBidWZmZXIg Ki8KLSAgICBpZiAoY3ApIHN0cmNweShjcCxjbWRidWYpOwotICAgIGNtcFtjbWRkZXBdLmJbMF0g PSBjcDsKLSAgICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKLQotICAgIGNwID0gbWFsbG9j KChpbnQpc3RybGVuKHNhdmJ1ZikrMSk7CS8qIDE6IFNhdmUgYnVmZmVyICovCi0gICAgaWYgKGNw KSBzdHJjcHkoY3Asc2F2YnVmKTsKLSAgICBjbXBbY21kZGVwXS5iWzFdID0gY3A7Ci0gICAgaWYg KGNwID09IE5VTEwpIHJldHVybigtMSk7Ci0KLSAgICBjbXBbY21kZGVwXS5iWzJdID0gTlVMTDsK LQotICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKGF0bWJ1ZikrMSk7CS8qIDM6IEF0b20gYnVm ZmVyICovCi0gICAgaWYgKGNwKSBzdHJjcHkoY3AsYXRtYnVmKTsKLSAgICBjbXBbY21kZGVwXS5i WzNdID0gY3A7Ci0gICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7Ci0KLSAgICBjcCA9IG1h bGxvYygoaW50KXN0cmxlbihhdHhidWYpKzEpOwkvKiA0OiBFeHBhbnNpb24gYnVmZmVyICovCi0g ICAgaWYgKGNwKSBzdHJjcHkoY3AsYXR4YnVmKTsKLSAgICBjbXBbY21kZGVwXS5iWzRdID0gY3A7 Ci0gICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7Ci0KLSAgICBjcCA9IG1hbGxvYygoaW50 KXN0cmxlbihhdHlidWYpKzEpOwkvKiA1OiBBdG9tIGJ1ZmZlciBjb3B5ICovCi0gICAgaWYgKGNw KSBzdHJjcHkoY3AsYXR5YnVmKTsKLSAgICBjbXBbY21kZGVwXS5iWzVdID0gY3A7Ci0gICAgaWYg KGNwID09IE5VTEwpIHJldHVybigtMSk7Ci0KLSAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihm aWxidWYpKzEpOwkvKiA2OiBGaWxlIG5hbWUgYnVmZmVyICovCi0gICAgaWYgKGNwKSBzdHJjcHko Y3AsZmlsYnVmKTsKLSAgICBjbXBbY21kZGVwXS5iWzZdID0gY3A7Ci0gICAgaWYgKGNwID09IE5V TEwpIHJldHVybigtMSk7Ci0jZWxzZQotICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKGNtZGJ1 ZikrMSk7CS8qIDA6IENvbW1hbmQgYnVmZmVyICovCi0gICAgaWYgKGNwKSBzdHJjcHkoY3AsY21k YnVmKTsKLSAgICBjbXBfYltjbWRkZXBdWzBdID0gY3A7Ci0gICAgaWYgKGNwID09IE5VTEwpIHJl dHVybigtMSk7Ci0KLSAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihzYXZidWYpKzEpOwkvKiAx OiBTYXZlIGJ1ZmZlciAqLwotICAgIGlmIChjcCkgc3RyY3B5KGNwLHNhdmJ1Zik7Ci0gICAgY21w X2JbY21kZGVwXVsxXSA9IGNwOwotICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOwotCi0g ICAgY21wX2JbY21kZGVwXVsyXSA9IE5VTEw7Ci0KLSAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxl bihhdG1idWYpKzEpOwkvKiAzOiBBdG9tIGJ1ZmZlciAqLwotICAgIGlmIChjcCkgc3RyY3B5KGNw LGF0bWJ1Zik7Ci0gICAgY21wX2JbY21kZGVwXVszXSA9IGNwOwotICAgIGlmIChjcCA9PSBOVUxM KSByZXR1cm4oLTEpOwotCi0gICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oYXR4YnVmKSsxKTsJ LyogNDogRXhwYW5zaW9uIGJ1ZmZlciAqLwotICAgIGlmIChjcCkgc3RyY3B5KGNwLGF0eGJ1Zik7 Ci0gICAgY21wX2JbY21kZGVwXVs0XSA9IGNwOwotICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4o LTEpOwotCi0gICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oYXR5YnVmKSsxKTsJLyogNTogQXRv bSBidWZmZXIgY29weSAqLwotICAgIGlmIChjcCkgc3RyY3B5KGNwLGF0eWJ1Zik7Ci0gICAgY21w X2JbY21kZGVwXVs1XSA9IGNwOwotICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOwotCi0g ICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oZmlsYnVmKSsxKTsJLyogNjogRmlsZSBuYW1lIGJ1 ZmZlciAqLwotICAgIGlmIChjcCkgc3RyY3B5KGNwLGZpbGJ1Zik7Ci0gICAgY21wX2JbY21kZGVw XVs2XSA9IGNwOwotICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOwotI2VuZGlmIC8qIERD TURCVUYgKi8KLQotICAgIGNtaW5pKGRweCk7CQkJCS8qIEluaXRpemUgdGhlIGNvbW1hbmQgcGFy c2VyICovCi0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLWNtcG9wKCkgewkJCQkvKiBSZXN0b3Jl IHRoZSBjb21tYW5kIGVudmlyb25tZW50ICovCi0gICAgaWYgKGNtZGRlcCA8IDApIHsKLQlkZWJ1 ZyhGMTAwLCImY21wb3AgY2FsbGVkIGZyb20gdG9wIGxldmVsIiwiIiwwKTsKLQlyZXR1cm4oLTEp OwkJCS8qIERvbid0IHBvcCB0b28gbXVjaCEgKi8KLSAgICB9Ci0jaWZkZWYgRENNREJVRgotICAg IGNtZmxncyA9IGNtcFtjbWRkZXBdLmlbMF07CQkvKiBGaXJzdCBkbyB0aGUgZ2xvYmFsIGludHMg Ki8KLSAgICBjbWZzYXYgPSBjbXBbY21kZGVwXS5pWzFdOwotICAgIGF0eG4gPSBjbXBbY21kZGVw XS5pWzJdOwotICAgIHVuZ3cgPSBjbXBbY21kZGVwXS5pWzNdOwotCi0gICAgYnAgPSBjbXBbY21k ZGVwXS5jWzBdOwkJLyogVGhlbiB0aGUgZ2xvYmFsIHBvaW50ZXJzICovCi0gICAgcHAgPSBjbXBb Y21kZGVwXS5jWzFdOwotICAgIG5wID0gY21wW2NtZGRlcF0uY1syXTsKLSNlbHNlCi0gICAgY21m bGdzID0gY21wX2lbY21kZGVwXVswXTsJCS8qIEZpcnN0IGRvIHRoZSBnbG9iYWwgaW50cyAqLwot ICAgIGNtZnNhdiA9IGNtcF9pW2NtZGRlcF1bMV07Ci0gICAgYXR4biA9IGNtcF9pW2NtZGRlcF1b Ml07Ci0gICAgdW5ndyA9IGNtcF9pW2NtZGRlcF1bM107Ci0KLSAgICBicCA9IGNtcF9jW2NtZGRl cF1bMF07CQkvKiBUaGVuIHRoZSBnbG9iYWwgcG9pbnRlcnMgKi8KLSAgICBwcCA9IGNtcF9jW2Nt ZGRlcF1bMV07Ci0gICAgbnAgPSBjbXBfY1tjbWRkZXBdWzJdOwotI2VuZGlmIC8qIERDTURCVUYg Ki8KLQotICAgIC8qIE5vdyB0aGUgYnVmZmVycyB0aGVtc2VsdmVzLiAqLwotICAgIC8qIE5vdGU6 IHN0cm5jcHkoKSwgbm90IGNrc3RybmNweSgpIC0tIEhlcmUgd2UgV0FOVCB0aGUgTlVMIHBhZGRp bmcuLi4gKi8KLQotI2lmZGVmIERDTURCVUYKLSAgICBpZiAoY21wW2NtZGRlcF0uYlswXSkgewot Ci0Jc3RybmNweShjbWRidWYsY21wW2NtZGRlcF0uYlswXSxDTURCTCk7IC8qIDA6IENvbW1hbmQg YnVmZmVyICovCi0JZnJlZShjbXBbY21kZGVwXS5iWzBdKTsKLQljbXBbY21kZGVwXS5iWzBdID0g TlVMTDsKLSAgICB9Ci0gICAgaWYgKGNtcFtjbWRkZXBdLmJbMV0pIHsKLQlzdHJuY3B5KHNhdmJ1 ZixjbXBbY21kZGVwXS5iWzFdLENNREJMKTsgLyogMTogU2F2ZSBidWZmZXIgKi8KLQlmcmVlKGNt cFtjbWRkZXBdLmJbMV0pOwotCWNtcFtjbWRkZXBdLmJbMV0gPSBOVUxMOwotICAgIH0KLSAgICBp ZiAoY21wW2NtZGRlcF0uYlszXSkgewotCXN0cm5jcHkoYXRtYnVmLGNtcFtjbWRkZXBdLmJbM10s QVRNQkwpOyAvKiAzOiBBdG9taWMgYnVmZmVyISAqLwotCWZyZWUoY21wW2NtZGRlcF0uYlszXSk7 Ci0JY21wW2NtZGRlcF0uYlszXSA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChjbXBbY21kZGVwXS5i WzRdKSB7Ci0Jc3RybmNweShhdHhidWYsY21wW2NtZGRlcF0uYls0XSxBVE1CTCk7IC8qIDQ6IGVY cGFuc2lvbiBidWZmZXIgKi8KLQlmcmVlKGNtcFtjbWRkZXBdLmJbNF0pOwotCWNtcFtjbWRkZXBd LmJbNF0gPSBOVUxMOwotICAgIH0KLSAgICBpZiAoY21wW2NtZGRlcF0uYls1XSkgewotCXN0cm5j cHkoYXR5YnVmLGNtcFtjbWRkZXBdLmJbNV0sQVRNQkwpOyAvKiA1OiBBdG9tIGJ1ZmZlciBjb3BZ ICovCi0JZnJlZShjbXBbY21kZGVwXS5iWzVdKTsKLQljbXBbY21kZGVwXS5iWzVdID0gTlVMTDsK LSAgICB9Ci0gICAgaWYgKGNtcFtjbWRkZXBdLmJbNl0pIHsKLQlzdHJuY3B5KGZpbGJ1ZixjbXBb Y21kZGVwXS5iWzZdLEFUTUJMKTsgLyogNjogRmlsZW5hbWUgYnVmZmVyICovCi0JZnJlZShjbXBb Y21kZGVwXS5iWzZdKTsKLQljbXBbY21kZGVwXS5iWzZdID0gTlVMTDsKLSAgICB9Ci0jZWxzZQot ICAgIGlmIChjbXBfYltjbWRkZXBdWzBdKSB7Ci0Jc3RybmNweShjbWRidWYsY21wX2JbY21kZGVw XVswXSxDTURCTCk7IC8qIDA6IENvbW1hbmQgYnVmZmVyICovCi0JZnJlZShjbXBfYltjbWRkZXBd WzBdKTsKLQljbXBfYltjbWRkZXBdWzBdID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGNtcF9iW2Nt ZGRlcF1bMV0pIHsKLQlzdHJuY3B5KHNhdmJ1ZixjbXBfYltjbWRkZXBdWzFdLENNREJMKTsgLyog MTogU2F2ZSBidWZmZXIgKi8KLQlmcmVlKGNtcF9iW2NtZGRlcF1bMV0pOwotCWNtcF9iW2NtZGRl cF1bMV0gPSBOVUxMOwotICAgIH0KLSAgICBpZiAoY21wX2JbY21kZGVwXVszXSkgewotCXN0cm5j cHkoYXRtYnVmLGNtcF9iW2NtZGRlcF1bM10sQVRNQkwpOyAvKiAzOiBBdG9taWMgYnVmZmVyISAq LwotCWZyZWUoY21wX2JbY21kZGVwXVszXSk7Ci0JY21wX2JbY21kZGVwXVszXSA9IE5VTEw7Ci0g ICAgfQotICAgIGlmIChjbXBfYltjbWRkZXBdWzRdKSB7Ci0Jc3RybmNweShhdHhidWYsY21wX2Jb Y21kZGVwXVs0XSxBVE1CTCk7IC8qIDQ6IGVYcGFuc2lvbiBidWZmZXIgKi8KLQlmcmVlKGNtcF9i W2NtZGRlcF1bNF0pOwotCWNtcF9iW2NtZGRlcF1bNF0gPSBOVUxMOwotICAgIH0KLSAgICBpZiAo Y21wX2JbY21kZGVwXVs1XSkgewotCXN0cm5jcHkoYXR5YnVmLGNtcF9iW2NtZGRlcF1bNV0sQVRN QkwpOyAvKiA1OiBBdG9tIGJ1ZmZlciBjb3BZICovCi0JZnJlZShjbXBfYltjbWRkZXBdWzVdKTsK LQljbXBfYltjbWRkZXBdWzVdID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGNtcF9iW2NtZGRlcF1b Nl0pIHsKLQlzdHJuY3B5KGZpbGJ1ZixjbXBfYltjbWRkZXBdWzZdLEFUTUJMKTsgLyogNjogRmls ZW5hbWUgYnVmZmVyICovCi0JZnJlZShjbXBfYltjbWRkZXBdWzZdKTsKLQljbXBfYltjbWRkZXBd WzZdID0gTlVMTDsKLSAgICB9Ci0jZW5kaWYgLyogRENNREJVRiAqLwotCi0gICAgY21kZGVwLS07 CQkJCS8qIFJpc2UsIHJpc2UgKi8KLSAgICBkZWJ1ZyhGMTAxLCImY21wb3AgdG8gZGVwdGgiLCIi LGNtZGRlcCk7Ci0gICAgcmV0dXJuKGNtZGRlcCk7Ci19Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQot I2lmZGVmIENPTU1FTlQKLVZPSUQJCQkJCS8qIE5vdCB1c2VkICovCi1zdHJpcHEocykgY2hhciAq czsgeyAgICAgICAgICAgICAgICAgICAgLyogRnVuY3Rpb24gdG8gc3RyaXAgJ1wnIHF1b3RlcyAq LwotICAgIGNoYXIgKnQ7Ci0gICAgd2hpbGUgKCpzKSB7Ci0gICAgICAgIGlmICgqcyA9PSBDTURR KSB7Ci0gICAgICAgICAgICBmb3IgKHQgPSBzOyAqdCAhPSAnXDAnOyB0KyspICp0ID0gKih0KzEp OwotICAgICAgICB9Ci0gICAgICAgIHMrKzsKLSAgICB9Ci19Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotCi0vKiBDb252ZXJ0IHRhYnMgdG8gc3BhY2VzLCBvbmUgZm9yIG9uZSAqLwotVk9JRAotdW50 YWIocykgY2hhciAqczsgewotICAgIHdoaWxlICgqcykgewotCWlmICgqcyA9PSBIVCkgKnMgPSBT UDsKLQlzKys7Ci0gICAgfQotfQotCi0vKiAgQyBNIE4gVSBNICAtLSAgUGFyc2UgYSBudW1iZXIg aW4gdGhlIGluZGljYXRlZCByYWRpeCAgKi8KLQotLyoKLSBUaGUgcmFkaXggaXMgc3BlY2lmaWVk IGluIHRoZSBhcmcgbGlzdC4KLSBQYXJzZXMgdW5xdW90ZWQgbnVtZXJpYyBzdHJpbmdzIGluIHRo ZSBnaXZlbiByYWRpeC4KLSBQYXJzZXMgYmFja3NsYXNoLXF1b3RlZCBudW1iZXJzIGluIHRoZSBy YWRpeCBpbmRpY2F0ZWQgYnkgdGhlIHF1b3RlOgotICAgXG5ubiA9IFxkbm5uID0gZGVjaW1hbCwg XG9ubm4gPSBvY3RhbCwgXHhubiA9IEhleGFkZWNpbWFsLgotIElmIHRoZXNlIGZhaWwsIHRoZW4g aWYgYSBwcmVwcm9jZXNzaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLCB0aGF0IGlzIGFwcGxpZWQK LSBhbmQgdGhlbiBhIHNlY29uZCBhdHRlbXB0IGlzIG1hZGUgdG8gcGFyc2UgYW4gdW5xdW90ZWQg ZGVjaW1hbCBzdHJpbmcuCi0gQW5kIGlmIHRoYXQgZmFpbHMsIHRoZSBwcmVwcm9jZXNzZWQgc3Ry aW5nIGlzIHBhc3NlZCB0byBhbiBhcml0aG1ldGljCi0gZXhwcmVzc2lvbiBldmFsdWF0b3IuCi0K LSBSZXR1cm5zOgotICAgLTMgaWYgbm8gaW5wdXQgcHJlc2VudCB3aGVuIHJlcXVpcmVkLAotICAg LTIgaWYgdXNlciB0eXBlZCBhbiBpbGxlZ2FsIG51bWJlciwKLSAgIC0xIGlmIHJlcGFyc2UgbmVl ZGVkLAotICAgIDAgb3RoZXJ3aXNlLCB3aXRoIGFyZ3VtZW50IG4gc2V0IHRvIHRoZSBudW1iZXIg dGhhdCB3YXMgcGFyc2VkCi0qLwotLyogVGhpcyBpcyB0aGUgdHJhZGl0aW9uYWwgY21udW0oKSB0 aGF0IGdldHMgYW4gaW50ICovCi1pbnQKLWNtbnVtKHhobHAseGRlZixyYWRpeCxuLGYpIGNoYXIg KnhobHAsICp4ZGVmOyBpbnQgcmFkaXgsICpuOyB4eF9zdHJwIGY7IHsKLSAgICBDS19PRkZfVCB6 ID0gKENLX09GRl9UKTAsIGNoZWNrOwotICAgIGludCB4OwotICAgIHggPSBjbW51bXcoeGhscCx4 ZGVmLHJhZGl4LCZ6LGYpOwotICAgICpuID0gejsKLSAgICBjaGVjayA9ICpuOwotICAgIGlmIChj aGVjayAhPSB6KSB7Ci0JcHJpbnRmKCI/TWFnbml0dWRlIG9mIHJlc3VsdCB0b28gbGFyZ2UgZm9y IGludGVnZXIgLSAlc1xuIixja2ZzdG9hKHopKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICBy ZXR1cm4oeCk7Ci19Ci0KLS8qCi0gIFRoaXMgaXMgdGhlIG5ldyBjbW51bSgpIHRoYXQgZ2V0cyBh ICJ3aWRlIiByZXN1bHQsIHdoYXRldmVyIENLX09GRl9UCi0gIGlzIGRlZmluZWQgdG8gYmUsIG5v cm1hbGx5IDMyIG9yIDY0IGJpdHMsIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCi0gIGZkYywg MjQgRGVjIDIwMDUuCi0qLwotaW50Ci1jbW51bXcoeGhscCx4ZGVmLHJhZGl4LG4sZikKLSAgICBj aGFyICp4aGxwLCAqeGRlZjsgaW50IHJhZGl4OyBDS19PRkZfVCAqbjsgeHhfc3RycCBmOyB7Ci0g ICAgaW50IHg7IGNoYXIgKnMsICp6cCwgKnpxOwotI2lmZGVmIENPTU1FTlQKLSAgICBjaGFyIGxi cmFjZSwgcmJyYWNlOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIGlmICgheGhscCkgeGhs cCA9ICIiOwotICAgIGlmICgheGRlZikgeGRlZiA9ICIiOwotCi0jaWZkZWYgQ09NTUVOVAotICAg IGlmIChjbWZsZGZsZ3MgJiAxKSB7Ci0JbGJyYWNlID0gJygnOwotCXJicmFjZSA9ICcpJzsKLSAg ICB9IGVsc2UgewotCWxicmFjZSA9ICd7JzsKLQlyYnJhY2UgPSAnfSc7Ci0gICAgfQotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQotICAgIGlmIChyYWRpeCAhPSAxMCAmJiByYWRpeCAhPSA4KSB7CS8q IEp1c3QgZG8gYmFzZXMgOCBhbmQgMTAgKi8KLSAgICAgICAgcHJpbnRmKCJjbW51bTogaWxsZWdh bCByYWRpeCAtICVkXG4iLHJhZGl4KTsKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9IC8qIEVh c3kgdG8gYWRkIG90aGVycyBidXQgdGhlcmUgaGFzIG5ldmVyIGJlZW4gYSBuZWVkIGZvciBpdC4g Ki8KLSAgICB4ID0gY21mbGQoeGhscCx4ZGVmLCZzLCh4eF9zdHJwKTApOwotICAgIGRlYnVnKEYx MDEsImNtbnVtOiBjbWZsZCIsIiIseCk7Ci0gICAgaWYgKHggPCAwKSByZXR1cm4oeCk7CQkvKiBQ YXJzZSBhIGZpZWxkICovCi0gICAgenAgPSBhdG1idWY7Ci0vKgotICBFZGl0IDE5MiAtIEFsbG93 IGFueSBudW1iZXIgZmllbGQgdG8gYmUgYnJhY2VkLiAgVGhpcyBsZXRzIHVzIGluY2x1ZGUKLSAg c3BhY2VzIGluIGV4cHJlc3Npb25zLCBidXQgcGVyaGFwcyBtb3JlIGltcG9ydGFudCBsZXRzIHVz IGhhdmUgdXNlci1kZWZpbmVkCi0gIGZ1bmN0aW9ucyBpbiBudW1lcmljIGZpZWxkcy4KLSovCi0g ICAgenAgPSBicnN0cmlwKHpwKTsJCQkvKiBTdHJpcCBicmFjZXMgKi8KLSAgICBpZiAoY21mbGRm bGdzICYgMSAmJiAqenAgPT0gJygnKSB7CS8qIFBhcmVucyB0b28uLiAqLwotCXggPSAoaW50KSBz dHJsZW4oYXRtYnVmKTsKLQlpZiAoeCA+IDApIHsKLQkgICAgaWYgKCooYXRtYnVmK3gtMSkgPT0g JyknKSB7Ci0JCSooYXRtYnVmK3gtMSkgPSBOVUw7Ci0JCXpwKys7Ci0JICAgIH0KLQl9Ci0gICAg fQotICAgIGlmIChjaGtudW0oenApKSB7CQkJLyogQ2hlY2sgZm9yIG51bWJlciAqLwotCWlmIChy YWRpeCA9PSA4KSB7CQkvKiBJZiBpdCdzIHN1cHBvc2VkIHRvIGJlIG9jdGFsICovCi0JICAgIHpw ID0gY2tyYWRpeCh6cCw4LDEwKTsJLyogY29udmVydCB0byBkZWNpbWFsICovCi0JICAgIGlmICgh enApIHJldHVybigtMik7Ci0JICAgIGlmICghc3RyY21wKHpwLCItMSIpKSByZXR1cm4oLTIpOwot CX0KLQllcnJubyA9IDA7CQkJLyogR290IG9uZSwgd2UncmUgZG9uZS4gKi8KLSAgICAgICAgKm4g PSBja2F0b2ZzKHpwKTsKLQlpZiAoZXJybm8pIHsKLQkgICAgcGVycm9yKHpwKTsKLQkgICAgcmV0 dXJuKC05KTsKLQl9Ci0JZGVidWcoRjEwMSwiY21udW0gMXN0IGNoa251bSBvayIsIiIsKm4pOwot ICAgICAgICByZXR1cm4oMCk7Ci0gICAgfSBlbHNlIGlmICgoeCA9IHh4ZXNjKCZ6cCkpID4gLTEp IHsJLyogQ2hlY2sgZm9yIGJhY2tzbGFzaCBlc2NhcGUgKi8KLQotI2lmbmRlZiBPUzIKLQkqbiA9 IHg7Ci0jZWxzZQotCSpuID0gd2lkZXJlc3VsdDsKLSNlbmRpZiAvKiBPUzIgKi8KLQotCWRlYnVn KEYxMDEsImNtbnVtIHh4ZXNjIG9rIiwiIiwqbik7Ci0JcmV0dXJuKCp6cCA/IC0yIDogMCk7Ci0g ICAgfSBlbHNlIGlmIChmKSB7CQkJLyogSWYgY29udmVyc2lvbiBmdW5jdGlvbiBnaXZlbiAqLwot CXpxID0gYXR4YnVmOwkJCS8qIFRyeSB0aGF0ICovCi0JYXR4biA9IENNREJMOwotCWlmICgoKmYp KHpwLCZ6cSwmYXR4bikgPCAwKQkvKiBDb252ZXJ0ICovCi0JICByZXR1cm4oLTIpOwotCXpwID0g YXR4YnVmOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJjbW51bSB6cCAxIix6cCwwKTsKLSAgICBp ZiAoISp6cCkgenAgPSB4ZGVmOwkJLyogUmVzdWx0IGVtcHR5LCBzdWJzdGl0dXRlIGRlZmF1bHQg Ki8KLSAgICBkZWJ1ZyhGMTEwLCJjbW51bSB6cCAyIix6cCwwKTsKLSAgICBpZiAoY2hrbnVtKHpw KSkgewkJCS8qIENoZWNrIGFnYWluIGZvciBkZWNpbWFsIG51bWJlciAqLwotCWlmIChyYWRpeCA9 PSA4KSB7CQkvKiBJZiBpdCdzIHN1cHBvc2VkIHRvIGJlIG9jdGFsICovCi0JICAgIHpwID0gY2ty YWRpeCh6cCw4LDEwKTsJLyogY29udmVydCB0byBkZWNpbWFsICovCi0JICAgIGlmICghenApIHJl dHVybigtMik7Ci0JICAgIGlmICghc3RyY21wKHpwLCItMSIpKSByZXR1cm4oLTIpOwotCX0KLQll cnJubyA9IDA7Ci0gICAgICAgICpuID0gY2thdG9mcyh6cCk7Ci0JaWYgKGVycm5vKSB7Ci0JICAg IHBlcnJvcih6cCk7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCWRlYnVnKEYxMDEsImNtbnVtIDJu ZCBjaGtudW0gb2siLCIiLCpuKTsKLSAgICAgICAgcmV0dXJuKDApOwotI2lmbmRlZiBOT1NQTAot ICAgIH0gIGVsc2UgaWYgKCh4ID0geHhlc2MoJnpwKSkgPiAtMSkgeyAvKiBDaGVjayBmb3IgYmFj a3NsYXNoIGVzY2FwZSAqLwotI2lmbmRlZiBPUzIKLQkqbiA9IHg7Ci0jZWxzZQotCSpuID0gd2lk ZXJlc3VsdDsKLSNlbmRpZiAvKiBPUzIgKi8KLQlkZWJ1ZyhGMTAxLCJjbW51bSB4eGVzYyAyIG9r IiwiIiwqbik7Ci0JcmV0dXJuKCp6cCA/IC0yIDogMCk7Ci0gICAgfSBlbHNlIGlmIChmKSB7CQkJ LyogTm90IG51bWVyaWMsIG1heWJlIGFuIGV4cHJlc3Npb24gKi8KLQljaGFyICogcDsKLQlwID0g ZXZhbGEoenApOwotCWlmIChjaGtudW0ocCkpIHsKLQkgICAgaWYgKHJhZGl4ID09IDgpIHsJCS8q IElmIGl0J3Mgc3VwcG9zZWQgdG8gYmUgb2N0YWwgKi8KLQkJenAgPSBja3JhZGl4KHpwLDgsMTAp OwkvKiBjb252ZXJ0IHRvIGRlY2ltYWwgKi8KLQkJaWYgKCF6cCkgcmV0dXJuKC0yKTsKLQkJaWYg KCFzdHJjbXAoenAsIi0xIikpIHJldHVybigtMik7Ci0JICAgIH0KLQkgICAgZXJybm8gPSAwOwot CSAgICAqbiA9IGNrYXRvZnMocCk7Ci0JICAgIGlmIChlcnJubykgewotCQlwZXJyb3IocCk7Ci0J CXJldHVybigtOSk7Ci0JICAgIH0KLQkgICAgZGVidWcoRjEwMSwiY21udW0gZXhwIGV2YWwgb2si LCIiLCpuKTsKLQkgICAgcmV0dXJuKDApOwotCX0gZWxzZSByZXR1cm4oLTIpOwotI2VuZGlmIC8q IE5PU1BMICovCi0gICAgfSBlbHNlIHsJCQkJLyogTm90IG51bWVyaWMgKi8KLQlyZXR1cm4oLTIp OwotICAgIH0KLX0KLQotI2lmZGVmIENLQ0hBTk5FTElPCi1leHRlcm4gaW50IHpfZXJyb3I7Ci0j ZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KLQotLyogIEMgTSBPIEYgSSAgLS0gIFBhcnNlIHRoZSBu YW1lIG9mIGFuIG91dHB1dCBmaWxlICAqLwotCi0vKgotIERlcGVuZHMgb24gdGhlIGV4dGVybmFs IGZ1bmN0aW9uIHpjaGtvKCk7IGlmIHpjaGtvKCkgbm90IGF2YWlsYWJsZSwgdXNlCi0gY21mbGQo KSB0byBwYXJzZSBvdXRwdXQgZmlsZSBuYW1lcy4KLQotIFJldHVybnM6Ci0gICAtOSBsaWtlIC0y LCBleGNlcHQgbWVzc2FnZSBhbHJlYWR5IHByaW50ZWQsCi0gICAtMyBpZiBubyBpbnB1dCBwcmVz ZW50IHdoZW4gcmVxdWlyZWQsCi0gICAtMiBpZiBwZXJtaXNzaW9uIHdvdWxkIGJlIGRlbmllZCB0 byBjcmVhdGUgdGhlIGZpbGUsCi0gICAtMSBpZiByZXBhcnNlIG5lZWRlZCwKLSAgICAwIG9yIDEg aWYgZmlsZSBjYW4gYmUgY3JlYXRlZCwgd2l0aCB4cCBwb2ludGluZyB0byBuYW1lLgotICAgIDIg aWYgZ2l2ZW4gdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LgotKi8KLWludAotY21v ZmkoeGhscCx4ZGVmLHhwLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyB4eF9zdHJwIGY7IHsK LSAgICBpbnQgeDsgY2hhciAqcywgKnpxOwotI2lmZGVmIERPQ0hLVkFSCi0gICAgaW50IHRyaWVz OwotI2VuZGlmIC8qIERPQ0hLVkFSICovCi0jaWZkZWYgRFRJTERFCi0gICAgY2hhciAqZGlycDsK LSNlbmRpZiAvKiBEVElMREUgKi8KLQotICAgIGNtZmxkZmxncyA9IDA7Ci0KLSAgICBpZiAoIXho bHApIHhobHAgPSAiIjsKLSAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKLQotICAgIGlmICgqeGhs cCA9PSBOVUwpIHhobHAgPSAiT3V0cHV0IGZpbGUiOwotICAgICp4cCA9ICIiOwotCi0gICAgZGVi dWcoRjExMCwiY21vZmkgeGRlZiIseGRlZiwwKTsKLSAgICB4ID0gY21mbGQoeGhscCx4ZGVmLCZz LCh4eF9zdHJwKTApOwotICAgIGRlYnVnKEYxMTEsImNtb2ZpIGNtZmxkIHJldHVybnMiLHMseCk7 Ci0gICAgaWYgKHggPCAwKQotICAgICAgcmV0dXJuKHgpOwotCi0gICAgcyA9IGJyc3RyaXAocyk7 CQkJLyogU3RyaXAgZW5jbG9zaW5nIGJyYWNlcyAqLwotICAgIGRlYnVnKEYxMTAsImNtb2ZpIDEu NSIscywwKTsKLQotI2lmZGVmIERPQ0hLVkFSCi0gICAgdHJpZXMgPSAwOwotICAgIHsKLQljaGFy ICpwID0gczsKLSAgICAvKgotICAgICAgVGhpcyBpcyByZWFsbHkgdWdseS4gIElmIHdlIHNraXAg Y29udmVyc2lvbiB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLAotICAgICAgdGhlbiB2YXJpYWJsZSBu YW1lcyBsaWtlIFwlYSB3aWxsIGJlIHVzZWQgYXMgZmlsZW5hbWVzIChlLmcuIGNyZWF0aW5nCi0g ICAgICBhIGZpbGUgY2FsbGVkICVBIGluIHRoZSByb290IGRpcmVjdG9yeSkuICBJZiB3ZSBET04n VCBza2lwIGNvbnZlcnNpb24KLSAgICAgIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIHRoZW4gc2lu Z2xlIGJhY2tzbGFzaGVzIHVzZWQgYXMgZGlyZWN0b3J5Ci0gICAgICBzZXBhcmF0b3JzIGluIGZp bGVuYW1lcyB3aWxsIGJlIG1pc2ludGVycHJldGVkIGFzIHZhcmlhYmxlIGxlYWQtaW5zLgotICAg ICAgU28gd2UgcHJlc2NhbiB0byBzZWUgaWYgaXQgaGFzIGFueSB2YXJpYWJsZSByZWZlcmVuY2Vz LiAgQnV0IHRoaXMKLSAgICAgIG1vZHVsZSBpcyBub3Qgc3VwcG9zZWQgdG8ga25vdyBhbnl0aGlu ZyBhYm91dCB2YXJpYWJsZXMsIGZ1bmN0aW9ucywKLSAgICAgIGV0Yywgc28gdGhpcyBjb2RlIGRv ZXMgbm90IHJlYWxseSBiZWxvbmcgaGVyZSwgYnV0IHJhdGhlciBpdCBzaG91bGQKLSAgICAgIGJl IGF0IHRoZSBzYW1lIGxldmVsIGFzIHp6c3RyaW5nKCkuCi0gICAgKi8KLS8qCi0gIEhtbW0sIHRo aXMgbG9va3MgYSBsb3QgbGlrZSBjaGt2YXIoKSBleGNlcHQgaXQgdGhhdCBpbmNsdWRlcyBcbm5u IG51bWJlcgotICBlc2NhcGVzLiAgQnV0IHdoeT8gIFRoaXMgbWFrZXMgY29tbWFuZHMgbGlrZSAi bWtkaXIgYzpcMTIzIiBpbXBvc3NpYmxlLgotICBBbmQgaW4gZmFjdCwgIm1rZGlyIGM6XDEyMyIg Y3JlYXRlcyBhIGRpcmVjdG9yeSBjYWxsZWQgImM6eyIuICBXaGF0J3Mgd29yc2UsCi0gIHJtZGly KCksIHdoaWNoICpkb2VzKiBjYWxsIGNoa3ZhcigpLCB3b24ndCBsZXQgdXMgcmVtb3ZlIGl0LiAg U28gbGV0J3MgYXQKLSAgbGVhc3QgdHJ5IG1ha2luZyBjbW9maSgpIHN5bW1ldHJpY2FsIHdpdGgg Y21pZmkoKS4uLgotKi8KLSNpZmRlZiBDT01NRU5UCi0JY2hhciAqIHE7Ci0Jd2hpbGUgKCAodHJp ZXMgPT0gMCkgJiYgKHAgPSBzdHJjaHIocCxDTURRKSkgKSB7Ci0JICAgIHEgPSAqKHArMSk7CQkJ LyogQ2hhciBhZnRlciBiYWNrc2xhc2ggKi8KLQkgICAgaWYgKCFxKQkJCS8qIE5vbmUsIHF1aXQg Ki8KLQkgICAgICBicmVhazsKLQkgICAgaWYgKGlzdXBwZXIocSkpCQkvKiBJZiBsZXR0ZXIsIGNv bnZlcnQgdG8gbG93ZXJjYXNlICovCi0JICAgICAgcSA9IHRvbG93ZXIocSk7Ci0JICAgIGlmIChp c2RpZ2l0KHEpKSB7CQkvKiBJZiBpdCdzIGEgZGlnaXQsICovCi0JCXRyaWVzID0gMTsJCS8qIGFz c3VtZSBpdCdzIGEgYmFja3NsYXNoIGNvZGUgICovCi0JCWJyZWFrOwotCSAgICB9Ci0JICAgIHN3 aXRjaCAocSkgewotCSAgICAgIGNhc2UgQ01EUToJCS8qIERvdWJsZSBiYWNrc2xhc2ggKi8KLQkJ dHJpZXMgPSAxOwkJLyogc28gY2FsbCB0aGUgY29udmVyc2lvbiBmdW5jdGlvbiAqLwotCQlicmVh azsKLQkgICAgICBjYXNlICclJzoJCQkvKiBWYXJpYWJsZSBvciBhcnJheSByZWZlcmVuY2UgKi8K LQkgICAgICBjYXNlICcmJzoJCQkvKiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGxldHRlciAqLwotCQlp ZiAoaXNhbHBoYSgqKHArMikpIHx8ICgqKHArMikgPj0gJzAnICYmICoocCsyKSA8PSAnOScpKQot CQkgIHRyaWVzID0gMTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAnbSc6IGNhc2UgJ3YnOiBjYXNl ICckJzogLyogXG0oKSwgXHYoKSwgXCQoKSAqLwotCQlpZiAoKihwKzIpID09ICcoJykKLQkJICBp ZiAoc3RyY2hyKHArMiwnKScpKQotCQkgICAgdHJpZXMgPSAxOwotCQlicmVhazsKLQkgICAgICBj YXNlICdmJzoJCQkvKiBcRm5hbWUoKSAqLwotCQlpZiAoc3RyY2hyKHArMiwnKCcpKQotCQkgIGlm IChzdHJjaHIocCsyLCcpJykpCi0JCSAgICAgIHRyaWVzID0gMTsKLQkJYnJlYWs7Ci0JICAgICAg Y2FzZSAneyc6CQkJLyogXHsuLi59ICovCi0JCWlmIChzdHJjaHIocCsyLCd9JykpCi0JCSAgdHJp ZXMgPSAxOwotCQlicmVhazsKLQkgICAgICBjYXNlICdkJzogY2FzZSAnbyc6CS8qIERlY2ltYWwg b3IgT2N0YWwgbnVtYmVyICovCi0JICAgICAgICBpZiAoaXNkaWdpdCgqKHArMikpKQotCQkgIHRy aWVzID0gMTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAneCc6CQkJLyogSGV4IG51bWJlciAqLwot CQlpZiAoaXNkaWdpdCgqKHArMikpIHx8Ci0JCSAgICAoKCoocCsyKSA+PSAnYScgJiYgKihwKzIp IDw9ICdmJykgfHwKLQkJICAgICAoKCoocCsyKSA+PSAnQScgJiYgKihwKzIpIDw9ICdGJykpKSkK LQkJICB0cmllcyA9IDE7Ci0JICAgICAgZGVmYXVsdDoKLQkJYnJlYWs7Ci0JICAgIH0KLQkgICAg cCsrOwotCX0KLSNlbHNlCi0jaWZuZGVmIE5PU1BMCi0JaWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZl cnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KLQkgICAgY2hhciAqcyA9IHA7CQkvKiBTZWUgaWYg dGhlcmUgYXJlIGFueSB2YXJpYWJsZXMgaW4gKi8KLQkgICAgd2hpbGUgKCpzKSB7CQkvKiB0aGUg c3RyaW5nIGFuZCBpZiBzbywgZXhwYW5kIHRoZW0gKi8KLQkJaWYgKGNoa3ZhcihzKSkgewotCQkg ICAgdHJpZXMgPSAxOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkJcysrOwotCSAgICB9Ci0JfQotI2Vu ZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0KLSNpZmRlZiBPUzIK LW9fYWdhaW46Ci0jZW5kaWYgLyogT1MyICovCi0gICAgaWYgKHRyaWVzID09IDEpCi0jZW5kaWYg LyogRE9DSEtWQVIgKi8KLSAgICBpZiAoZikgewkJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rp b24gaXMgZ2l2ZW4gKi8KLQl6cSA9IGF0eGJ1ZjsJCQkvKiBkbyB0aGUgY29udmVyc2lvbi4gKi8K LQlhdHhuID0gQ01EQkw7Ci0JaWYgKCh4ID0gKCpmKShzLCZ6cSwmYXR4bikpIDwgMCkKLQkgIHJl dHVybigtMik7Ci0JcyA9IGF0eGJ1ZjsKLQlpZiAoISpzKQkJCS8qIFJlc3VsdCBlbXB0eSwgc3Vi c3RpdHV0ZSBkZWZhdWx0ICovCi0JICBzID0geGRlZjsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwi Y21vZmkgMiIscyx4KTsKLQotI2lmZGVmIERUSUxERQotICAgIGRpcnAgPSB0aWxkZV9leHBhbmQo cyk7CQkvKiBFeHBhbmQgdGlsZGUsIGlmIGFueSwgKi8KLSAgICBpZiAoKmRpcnAgIT0gJ1wwJykg ewkJLyogcmlnaHQgaW4gdGhlIGF0b20gYnVmZmVyLiAqLwotCWlmIChzZXRhdG0oZGlycCwxKSA8 IDApIHsKLQkgICAgcHJpbnRmKCI/TmFtZSB0b28gbG9uZ1xuIik7Ci0JICAgIHJldHVybigtOSk7 Ci0JfQotICAgIH0KLSAgICBzID0gYXRtYnVmOwotICAgIGRlYnVnKEYxMTAsImNtb2ZpIDMiLHMs MCk7Ci0jZW5kaWYgLyogRFRJTERFICovCi0KLSAgICBpZiAoaXN3aWxkKHMpKSB7Ci0gICAgICAg IHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZCAtICVzXG4iLHMpOwotICAgICAgICByZXR1 cm4oLTIpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJjbW9maSA0IixzLDApOwotCi0jaWZkZWYg Q0tfVE1QRElSCi0gICAgLyogaXNkaXIoKSBmdW5jdGlvbiByZXF1aXJlZCBmb3IgdGhpcyEgKi8K LSAgICBpZiAoaXNkaXIocykpIHsKLQlkZWJ1ZyhGMTEwLCJjbW9maSA1OiBpcyBkaXJlY3Rvcnki LHMsMCk7Ci0gICAgICAgICp4cCA9IHM7Ci0JcmV0dXJuKDIpOwotICAgIH0KLSNlbmRpZiAvKiBD S19UTVBESVIgKi8KLQotICAgIGlmIChzdHJjbXAocyxDVFROQU0pICYmICh6Y2hrbyhzKSA8IDAp KSB7IC8qIE9LIHRvIHdyaXRlIHRvIGNvbnNvbGUgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYg T1MyCi0vKgotICBXZSBkb24ndCB0cnkgYWdhaW4gYmVjYXVzZSB3ZSBhbHJlYWR5IHByZXNjYW5u ZWQgdGhlIHN0cmluZyB0byBzZWUgaWYKLSAgaWYgaXQgY29udGFpbmVkIGFueXRoaW5nIHRoYXQg Y291bGQgYmUgdXNlZCBieSB6enN0cmluZygpLgotKi8KLQlpZiAodHJpZXMrKyA8IDEpCi0JICBn b3RvIG9fYWdhaW47Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotLyoK LSAgTm90ZTogdGhlcmUgYXJlIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB3aGVyZSB6Y2hrbygpIGNh biBnaXZlIGEgZmFsc2UKLSAgcG9zaXRpdmUsIHNvIGRvbid0IHJlbHkgb24gaXQgdG8gY2F0Y2gg ZXZlcnkgY29uY2VpdmFibGUgc2l0dWF0aW9uIGluCi0gIHdoaWNoIHRoZSBnaXZlbiBvdXRwdXQg ZmlsZSBjYW4ndCBiZSBjcmVhdGVkLiAgSW4gb3RoZXIgd29yZHMsIHdlIHByaW50Ci0gIGEgbWVz c2FnZSBhbmQgZmFpbCBoZXJlIGlmIHdlIEtOT1cgdGhlIGZpbGUgY2FuJ3QgYmUgY3JlYXRlZC4g IElmIHdlCi0gIHN1Y2NlZWQgYnV0IHRoZSBmaWxlIGNhbid0IGJlIG9wZW5lZCwgdGhlIGNvZGUg dGhhdCB0cmllcyB0byBvcGVuIHRoZSBmaWxlCi0gIGhhcyB0byBwcmludCBhIG1lc3NhZ2UuCi0q LwotCWRlYnVnKEYxMTAsImNtb2ZpIDY6IGZhaWx1cmUiLHMsMCk7Ci0jaWZkZWYgQ0tST09UCi0J aWYgKGNrcm9vdGVycikKLQkgIHByaW50ZigiP09mZiBMaW1pdHM6ICVzXG4iLHMpOwotCWVsc2UK LSNlbmRpZiAvKiBDS1JPT1QgKi8KLQkgIHByaW50ZigiP1dyaXRlIHBlcm1pc3Npb24gZGVuaWVk IC0gJXNcbiIscyk7Ci0jaWZkZWYgQ0tDSEFOTkVMSU8KLQl6X2Vycm9yID0gRlhfQUNDOwotI2Vu ZGlmIC8qIENLQ0hBTk5FTElPICovCi0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfSBlbHNlIHsK LQlkZWJ1ZyhGMTEwLCJjbW9maSA3OiBvayIscywwKTsKLSAgICAgICAgKnhwID0gczsKLSAgICAg ICAgcmV0dXJuKHgpOwotICAgIH0KLX0KLQotLyogIEMgTSBJIEYgSSAgLS0gIFBhcnNlIHRoZSBu YW1lIG9mIGFuIGV4aXN0aW5nIGZpbGUgICovCi0KLS8qCi0gVGhpcyBmdW5jdGlvbiBkZXBlbmRz IG9uIHRoZSBleHRlcm5hbCBmdW5jdGlvbnM6Ci0gICB6Y2hraSgpICAtIENoZWNrIGlmIGlucHV0 IGZpbGUgZXhpc3RzIGFuZCBpcyByZWFkYWJsZS4KLSAgIHp4cGFuZCgpIC0gRXhwYW5kIGEgd2ls ZCBmaWxlIHNwZWNpZmljYXRpb24gaW50byBhIGxpc3QuCi0gICB6bmV4dCgpICAtIFJldHVybiBu ZXh0IGZpbGUgbmFtZSBmcm9tIGxpc3QuCi0gSWYgdGhlc2UgZnVuY3Rpb25zIGFyZW4ndCBhdmFp bGFibGUsIHRoZW4gdXNlIGNtZmxkKCkgdG8gcGFyc2UgZmlsZW5hbWVzLgotKi8KLS8qCi0gUmV0 dXJucwotICAgLTQgRU9GCi0gICAtMyBpZiBubyBpbnB1dCBwcmVzZW50IHdoZW4gcmVxdWlyZWQs Ci0gICAtMiBpZiBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFkYWJsZSwKLSAgIC0x IGlmIHJlcGFyc2UgbmVlZGVkLAotICAgIDAgb3IgMSBvdGhlcndpc2UsIHdpdGg6Ci0gICAgICAg IHhwIHBvaW50aW5nIHRvIG5hbWUsCi0gICAgICAgIHdpbGQgPSAxIGlmIG5hbWUgY29udGFpbnMg JyonIG9yICc/JywgMCBvdGhlcndpc2UuCi0qLwotCi0jaWZkZWYgQ09NTUVOVCAvKiBUaGlzIGhv cnJpYmxlIGhhY2sgaGFzIGJlZW4gcmVwbGFjZWQgLSBzZWUgZnVydGhlciBkb3duICovCi0vKgot ICAgQyBNIEkgTyBGIEkgIC0tICBQYXJzZSBhbiBpbnB1dCBmaWxlIE9SIHRoZSBuYW1lIG9mIGEg bm9uZXhpc3RlbnQgZmlsZS4KLQotICAgVXNlIHRoaXMgd2hlbiBhbiBleGlzdGluZyBmaWxlIGlz IHdhbnRlZCAoc28gd2UgZ2V0IGhlbHAsIGNvbXBsZXRpb24sIGV0YyksCi0gICBidXQgaWYgYSBm aWxlIG9mIHRoZSBnaXZlbiBuYW1lIGRvZXMgbm90IGV4aXN0LCB0aGUgbmFtZSBvZiBhIG5ldyBm aWxlIGlzCi0gICBhY2NlcHRlZC4gIEZvciBleGFtcGxlLCB3aXRoIHRoZSBFRElUIGNvbW1hbmQg KGVkaXQgYW4gZXhpc3RpbmcgZmlsZSwgb3IKLSAgIGNyZWF0ZSBhIG5ldyBmaWxlKS4gIFJldHVy bnMgLTkgaWYgZmlsZSBkb2VzIG5vdCBleGlzdC4gIEl0IGlzIHVwIHRvIHRoZQotICAgY2FsbGVy IHRvIGNoZWNrIGNyZWF0YWJpbGl0eS4KLSovCi1zdGF0aWMgaW50IG5vbXNnID0gMDsKLWludAot Y21pb2ZpKHhobHAseGRlZix4cCx3aWxkLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyBpbnQg KndpbGQ7IHh4X3N0cnAgZjsgewotICAgIGludCBtc2dzYXZlLCB4OwotICAgIG1zZ3NhdmUgPSBu b21zZzsKLSAgICBub21zZyA9IDE7Ci0gICAgeCA9IGNtaWZpMih4aGxwLHhkZWYseHAsd2lsZCww LE5VTEwsZiwwKTsKLSAgICBub21zZyA9IG1zZ3NhdmU7Ci0gICAgcmV0dXJuKHgpOwotfQotI2Vu ZGlmCS8qIENPTU1FTlQgKi8KLQotaW50Ci1jbWlmaSh4aGxwLHhkZWYseHAsd2lsZCxmKSBjaGFy ICp4aGxwLCAqeGRlZiwgKip4cDsgaW50ICp3aWxkOyB4eF9zdHJwIGY7IHsKLSAgICByZXR1cm4o Y21pZmkyKHhobHAseGRlZix4cCx3aWxkLDAsTlVMTCxmLDApKTsKLX0KLS8qCi0gIGNtaWZpcCgp IGlzIGNhbGxlZCB3aGVuIHdlIHdhbnQgdG8gc3VwcGx5IGEgcGF0aCBvciBwYXRoIGxpc3QgdG8g c2VhcmNoCi0gIGluIGNhc2UgdGhlIGZpbGVuYW1lIHRoYXQgdGhlIHVzZXIgZ2l2ZXMgaXMgKGEp IG5vdCBhYnNvbHV0ZSwgYW5kIChiKSBjYW4ndAotICBiZSBmb3VuZCBhcyBnaXZlbi4gIFRoZSBw YXRoIHN0cmluZyBjYW4gYmUgdGhlIG5hbWUgb2YgYSBzaW5nbGUgZGlyZWN0b3J5LAotICBvciBh IGxpc3Qgb2YgZGlyZWN0b3JpZXMgc2VwYXJhdGVkIGJ5IHRoZSBQQVRIU0VQIGNoYXJhY3Rlciwg ZGVmaW5lZCBpbgotICBja3VjbWQuaC4gIExvb2sgaW4gY2t1dXNyLmMgYW5kIGNrdXVzMy5jIGZv ciBleGFtcGxlcyBvZiB1c2FnZS4KLSovCi1pbnQKLWNtaWZpcCh4aGxwLHhkZWYseHAsd2lsZCxk LHBhdGgsZikKLSAgICBjaGFyICp4aGxwLCp4ZGVmLCoqeHA7IGludCAqd2lsZCwgZDsgY2hhciAq IHBhdGg7IHh4X3N0cnAgZjsgewotICAgIHJldHVybihjbWlmaTIoeGhscCx4ZGVmLHhwLHdpbGQs MCxwYXRoLGYsMCkpOwotfQotCi0vKiAgQyBNIEQgSSBSICAtLSAgUGFyc2UgYSBkaXJlY3Rvcnkg bmFtZSAgKi8KLQotLyoKLSBUaGlzIGZ1bmN0aW9uIGRlcGVuZHMgb24gdGhlIGV4dGVybmFsIGZ1 bmN0aW9uczoKLSAgIGlzZGlyKHMpICAtIENoZWNrIGlmIHN0cmluZyBzIGlzIHRoZSBuYW1lIG9m IGEgZGlyZWN0b3J5Ci0gICB6Y2hraShzKSAgLSBDaGVjayBpZiBpbnB1dCBmaWxlIHMgZXhpc3Rz IGFuZCB3aGF0IHR5cGUgaXQgaXMuCi0gSWYgdGhlc2UgZnVuY3Rpb25zIGFyZW4ndCBhdmFpbGFi bGUsIHRoZW4gdXNlIGNtZmxkKCkgdG8gcGFyc2UgZGlyIG5hbWVzLgotCi0gUmV0dXJucwotICAg LTkgRm9yIGFsbCBzb3J0cyBvZiByZWFzb25zLCBhZnRlciBwcmludGluZyBhcHByb3ByaWF0ZSBl cnJvciBtZXNzYWdlLgotICAgLTQgRU9GCi0gICAtMyBpZiBubyBpbnB1dCBwcmVzZW50IHdoZW4g cmVxdWlyZWQsCi0gICAtMiBpZiBvdXQgb2Ygc3BhY2Ugb3Igb3RoZXIgaW50ZXJuYWwgZXJyb3Is Ci0gICAtMSBpZiByZXBhcnNlIG5lZWRlZCwKLSAgICAwIG9yIDEsIHdpdGggeHAgcG9pbnRpbmcg dG8gbmFtZSwgaWYgZGlyZWN0b3J5IHNwZWNpZmllZCwKLSovCi1pbnQKLWNtZGlyKHhobHAseGRl Zix4cCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsgeHhfc3RycCBmOyB7Ci0gICAgaW50IHdp bGQ7Ci0gICAgcmV0dXJuKGNtaWZpMih4aGxwLHhkZWYseHAsJndpbGQsMCxOVUxMLGYsMSkpOwot fQotCi0vKiBMaWtlIENNRElSIGJ1dCBpbmNsdWRlcyBQQVRIIHNlYXJjaCAqLwotCi1pbnQKLWNt ZGlycCh4aGxwLHhkZWYseHAscGF0aCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsgY2hhciAq IHBhdGg7IHh4X3N0cnAgZjsgewotICAgIGludCB3aWxkOwotICAgIHJldHVybihjbWlmaTIoeGhs cCx4ZGVmLHhwLCZ3aWxkLDAscGF0aCxmLDEpKTsKLX0KLQotLyoKLSAgY21pZmkyKCkgaXMgdGhl IGJhc2UgZmlsZW5hbWUgcGFyc2VyIGNhbGxlZCBieSBjbWlmaSwgY21pZmlwLCBjbWRpciwgZXRj LgotICBVc2UgaXQgZGlyZWN0bHkgd2hlbiB5b3UgYWxzbyB3YW50IHRvIHBhcnNlIGEgZGlyZWN0 b3J5IG9yIGRldmljZQotICBuYW1lIGFzIGFuIGlucHV0IGZpbGUsIGFzIGluIHRoZSBESVJFQ1RP UlkgY29tbWFuZC4gIENhbGwgd2l0aDoKLSAgICB4aGxwICAtLSBoZWxwIG1lc3NhZ2Ugb24gPwot ICAgIHhkZWYgIC0tIGRlZmF1bHQgcmVzcG9uc2UKLSAgICB4cCAgICAtLSBwb2ludGVyIHRvIHJl c3VsdCAoaW4gb3VyIHNwYWNlLCBtdXN0IGJlIGNvcGllZCBmcm9tIGhlcmUpCi0gICAgd2lsZCAg LS0gZmxhZyBzZXQgdXBvbiByZXR1cm4gdG8gaW5kaWNhdGUgaWYgZmlsZXNwZWMgd2FzIHdpbGQK LSAgICBkICAgICAtLSAwIHRvIHBhcnNlIGZpbGVzLCAxIHRvIHBhcnNlIGZpbGVzIG9yIGRpcmVj dG9yaWVzCi0gICAgICAgICAgICAgQWRkIDIgdG8gaW5oaWJpdCBmb2xsb3dpbmcgb2Ygc3ltbGlu a3MuCi0gICAgcGF0aCAgLS0gc2VhcmNoIHBhdGggZm9yIGZpbGVzCi0gICAgZiAgICAgLS0gcG9p bnRlciB0byBzdHJpbmcgcHJvY2Vzc2luZyBmdW5jdGlvbiAoZS5nLiB0byBldmFsdWF0ZSB2YXJp YWJsZXMpCi0gICAgZGlyZmxnIC0tIDEgdG8gcGFyc2UgKm9ubHkqIGRpcmVjdG9yaWVzLCAwIG90 aGVyd2lzZQotKi8KLWludAotY21pZmkyKHhobHAseGRlZix4cCx3aWxkLGQscGF0aCxmLGRpcmZs ZykKLSAgICBjaGFyICp4aGxwLCp4ZGVmLCoqeHA7IGludCAqd2lsZCwgZDsgY2hhciAqIHBhdGg7 IHh4X3N0cnAgZjsgaW50IGRpcmZsZzsgewotICAgIGV4dGVybiBpbnQgcmVjdXJzaXZlLCBkaXJh Y3RpdmUsIGNkYWN0aXZlLCBkYmxxdW87Ci0gICAgaW50IGksIHgsIGl0c2FkaXIsIHhjLCBleHBh bmRlZCA9IDAsIG5maWxlcyA9IDAsIGNoaWxkcmVuID0gLTE7Ci0gICAgaW50IHFmbGFnID0gMDsK LSAgICBsb25nIHk7Ci0gICAgQ0tfT0ZGX1QgZmlsZXNpemU7Ci0gICAgY2hhciAqc3AgPSBOVUxM LCAqenEsICpucCA9IE5VTEw7Ci0gICAgY2hhciAqc3YgPSBOVUxMLCAqcCA9IE5VTEw7Ci0jaWZk ZWYgRFRJTERFCi0gICAgY2hhciAqZGlycDsKLSNlbmRpZiAvKiBEVElMREUgKi8KLQotI2lmbmRl ZiBOT1BBUlRJQUwKLSNpZm5kZWYgT1MyCi0jaWZkZWYgT1NLCi0gICAgLyogVGhpcyBsYXJnZSBh cnJheSBpcyBkeW5hbWljIGZvciBPUy05IC0tIHNob3VsZCBkbyBmb3Igb3RoZXJzIHRvby4uLiAq LwotICAgIGV4dGVybiBjaGFyICoqbXRjaHM7Ci0jZWxzZQotI2lmZGVmIFVOSVgKLSAgICAvKiBP SywgZm9yIFVOSVggdG9vICovCi0gICAgZXh0ZXJuIGNoYXIgKiptdGNoczsKLSNlbHNlCi0jaWZk ZWYgVk1TCi0gICAgZXh0ZXJuIGNoYXIgKiptdGNoczsKLSNlbHNlCi0gICAgZXh0ZXJuIGNoYXIg Km10Y2hzW107Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8q IE9TSyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PUEFSVElBTCAqLwotCi0gICAg aWYgKCF4aGxwKSB4aGxwID0gIiI7Ci0gICAgaWYgKCF4ZGVmKSB4ZGVmID0gIiI7Ci0KLSNpZm5k ZWYgTk9MQVNURklMRQotICAgIG1ha2VzdHIoJnRtcGxhc3RmaWxlLE5VTEwpOwotI2VuZGlmCS8q IE5PTEFTVEZJTEUgKi8KLSAgICBuenhvcHRzID0gMDsJCQkvKiB6eHBhbmQoKSBvcHRpb25zICov Ci0gICAgZGVidWcoRjEwMSwiY21pZmkgZCIsIiIsZCk7Ci0gICAgaWYgKGQgJiAyKSB7CQkJLyog ZCAmIDIgbWVhbnMgZG9uJ3QgZm9sbG93IHN5bWxpbmtzICovCi0JZCBePSAyOwotCW56eG9wdHMg PSBaWF9OT0xJTktTOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBuenhvcHRzIiwiIixu enhvcHRzKTsKLSAgICBjbWZsZGZsZ3MgPSAwOwotICAgIGlmIChwYXRoKQotICAgICAgaWYgKCEq cGF0aCkKLQlwYXRoID0gTlVMTDsKLSAgICBpZiAocGF0aCkgewkJCQkvKiBNYWtlIGEgY29weSB3 ZSBjYW4gcG9rZSAqLwotCXggPSBzdHJsZW4ocGF0aCk7Ci0JbnAgPSAoY2hhciAqKSBtYWxsb2Mo eCArIDEpOwotCWlmIChucCkgewotCSAgICBzdHJjcHkobnAsIHBhdGgpOwotCSAgICBwYXRoID0g c3AgPSBucDsKLQl9Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImNtaWZpMiBwYXRoIixwYXRoLDAp OwotCi0gICAgY2tzdHJuY3B5KGNtZGVmYXVsdCx4ZGVmLENNREVGQVVMVCk7IC8qIENvcHkgZGVm YXVsdCAqLwotICAgIHhkZWYgPSBjbWRlZmF1bHQ7Ci0KLSAgICBpbndvcmQgPSAwOwkJCQkvKiBJ bml0aWFsaXplIGNvdW50cyAmIHBvaW50ZXJzICovCi0gICAgY2MgPSAwOwotICAgIHhjID0gMDsK LSAgICAqeHAgPSAiIjsJCQkJLyogUG9pbnRlciB0byByZXN1bHQgc3RyaW5nICovCi0gICAgaWYg KCh4ID0gY21mbGdzKSAhPSAxKSB7ICAgICAgICAgICAgLyogQWxyZWFkeSBjb25maXJtZWQ/ICov Ci0jaWZkZWYgQlNfRElSU0VQCi0JZGlybmFtZmxnID0gMTsKLSAgICAgICAgeCA9IGd0d29yZCgw KTsJCQkvKiBObywgZ2V0IGEgd29yZCAqLwotCWRpcm5hbWZsZyA9IDA7Ci0jZWxzZQotICAgICAg ICB4ID0gZ3R3b3JkKDApOyAgICAgICAgICAgICAgICAgIC8qIE5vLCBnZXQgYSB3b3JkICovCi0j ZW5kaWYgLyogQlNfRElSU0VQICovCi0gICAgfSBlbHNlIHsJCQkJLyogSWYgc28sIHVzZSBkZWZh dWx0LCBpZiBhbnkuICovCi0gICAgICAgIGlmIChzZXRhdG0oeGRlZiwxKSA8IDApIHsKLQkgICAg cHJpbnRmKCI/RGVmYXVsdCBuYW1lIHRvbyBsb25nXG4iKTsKLQkgICAgaWYgKG5wKSBmcmVlKG5w KTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0gICAgfQotICBpX3BhdGg6Ci0gICAgKnhwID0gYXRt YnVmOyAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0LiAqLwotCi0gICAg d2hpbGUgKDEpIHsKLSAgICAgICAgeGMgKz0gY2M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBD b3VudCB0aGlzIGNoYXJhY3Rlci4gKi8KLSAgICAgICAgZGVidWcoRjExMSwiY21pZmkgZ3R3b3Jk IixhdG1idWYseGMpOwotCWRlYnVnKEYxMDEsImNtaWZpIHN3aXRjaCB4IiwiIix4KTsKLSAgICAg ICAgc3dpdGNoICh4KSB7CQkJLyogeCA9IGd0d29yZCgpIHJldHVybiBjb2RlICovCi0JICBjYXNl IC0xMDoKLQkgICAgaWYgKGd0aW1lcigpID4gdGltZWxpbWl0KSB7Ci0jaWZkZWYgSUtTRAotICAg ICAgICAgICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgICAgICAgICBwcmludGYo IlxyXG5JS1NEIElETEUgVElNRU9VVDogJWQgc2VjXHJcbiIsIHRpbWVsaW1pdCk7Ci0gICAgICAg ICAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQsMCk7Ci0gICAgICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIElLU0QgKi8KLQkJLyogaWYgKCFxdWlldCkgcHJpbnRmKCI/VGltZWQgb3V0XG4iKTsg Ki8KLQkJcmV0dXJuKC0xMCk7Ci0JICAgIH0gZWxzZSB7Ci0JCXggPSBndHdvcmQoMCk7Ci0JCWNv bnRpbnVlOwotCSAgICB9Ci0JICBjYXNlIC05OgotCSAgICBwcmludGYoIkNvbW1hbmQgb3IgZmll bGQgdG9vIGxvbmdcbiIpOwotCSAgY2FzZSAtNDoJCQkvKiBFT0YgKi8KLQkgIGNhc2UgLTI6CQkJ LyogT3V0IG9mIHNwYWNlLiAqLwotCSAgY2FzZSAtMToJCQkvKiBSZXBhcnNlIG5lZWRlZCAqLwot CSAgICBpZiAobnApIGZyZWUobnApOwotCSAgICByZXR1cm4oeCk7Ci0JICBjYXNlIDE6CQkJLyog Q1IgKi8KLQkgIGNhc2UgMDoJCQkvKiBTUCAqLwotCSAgICBpZiAoeGMgPT0gMCkJCS8qIElmIG5v IGlucHV0Li4uICovCi0JICAgICAgKnhwID0geGRlZjsJCS8qIHN1YnN0aXR1dGUgdGhlIGRlZmF1 bHQgKi8KLSNpZm5kZWYgTk9MQVNURklMRQotCSAgICBtYWtlc3RyKCZ0bXBsYXN0ZmlsZSwqeHAp OwkvKiBNYWtlIGEgY29weSBiZWZvcmUgYnN0cmlwcGluZyAqLwotI2VuZGlmCS8qICNpZm5kZWYg Tk9MQVNURklMRSAqLwotCSAgICAqeHAgPSBicnN0cmlwKCp4cCk7CQkvKiBTdHJpcCBicmFjZXMg Ki8KLQkgICAgaWYgKCoqeHAgPT0gTlVMKSB7CQkvKiAxMiBtYXIgMjAwMSAqLwotCQlpZiAobnAp IGZyZWUobnApOwotCQlyZXR1cm4oLTMpOwotCSAgICB9Ci0JICAgIGRlYnVnKEYxMTAsImNtaWZp IGJyc3RyaXAiLCp4cCwwKTsKLSNpZm5kZWYgTk9TUEwKLQkgICAgaWYgKGYpIHsJCQkvKiBJZiBh IGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KLSNpZmRlZiBET0NIS1ZBUgotCQljaGFy ICpzID0gKnhwOwkJLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgdmFyaWFibGVzIGluICovCi0JCWlu dCB4OwotCQl3aGlsZSAoKnMpIHsJCS8qIHRoZSBzdHJpbmcgYW5kIGlmIHNvLCBleHBhbmQgdGhl bSAqLwotCQkgICAgeCA9IGNoa3ZhcihzKTsKLQkJICAgIC8qIGRlYnVnKEYxMTEsImNtaWZpIGNo a3ZhciIsKnhwLHgpOyAqLwotCQkgICAgaWYgKHgpIHsKLSNlbmRpZiAvKiBET0NIS1ZBUiAqLwot CQkJenEgPSBhdHhidWY7Ci0JCQlhdHhuID0gQ01EQkw7Ci0JCQlpZiAoKCpmKSgqeHAsJnpxLCZh dHhuKSA8IDApIHsKLQkJCSAgICBpZiAobnApIGZyZWUobnApOwotCQkJICAgIHJldHVybigtMik7 Ci0JCQl9Ci0JCQkqeHAgPSBhdHhidWY7Ci0JCQlpZiAoIWF0eGJ1ZlswXSkKLQkJCSAgKnhwID0g eGRlZjsKLSNpZmRlZiBET0NIS1ZBUgotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCSAgICBzKys7Ci0J CX0KLSNlbmRpZiAvKiBET0NIS1ZBUiAqLwotCSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQkg ICAgaWYgKCoqeHAgPT0gTlVMKSB7CQkvKiAxMiBtYXIgMjAwMSAqLwotCQlpZiAobnApIGZyZWUo bnApOwotCQlyZXR1cm4oLTMpOwotCSAgICB9Ci0jaWZkZWYgRFRJTERFCi0JICAgIGlmIChkaXJm bGcpIHsKLQkJZGlycCA9IHRpbGRlX2V4cGFuZCgqeHApOyAvKiBFeHBhbmQgdGlsZGUsIGlmIGFu eSwgKi8KLQkJaWYgKCpkaXJwICE9ICdcMCcpIHsJLyogaW4gdGhlIGF0b20gYnVmZmVyLiAqLwot CQkgICAgaWYgKHNldGF0bShkaXJwLDEpIDwgMCkgewotCQkJcHJpbnRmKCJFeHBhbmRlZCBuYW1l IHRvbyBsb25nXG4iKTsKLQkJCWlmIChucCkgZnJlZShucCk7Ci0JCQlyZXR1cm4oLTkpOwotCQkg ICAgfQotCQl9Ci0JCSp4cCA9IGF0bWJ1ZjsKLQkJZGVidWcoRjExMCwiY21pZmkgdGlsZGVfZXhw YW5kIiwqeHAsMCk7Ci0JICAgIH0KLSNlbmRpZiAvKiBEVElMREUgKi8KLQkgICAgaWYgKCFzdikg ewkJCS8qIE9ubHkgZG8gdGhpcyBvbmNlICovCi0JCXN2ID0gbWFsbG9jKChpbnQpc3RybGVuKCp4 cCkrMSk7IC8qIE1ha2UgYSBzYWZlIGNvcHkgKi8KLQkJaWYgKCFzdikgewotCQkgICAgcHJpbnRm KCI/Y21pZmk6IG1hbGxvYyBlcnJvclxuIik7Ci0JCSAgICBpZiAobnApIGZyZWUobnApOwotCQkg ICAgcmV0dXJuKC05KTsKLQkJfQotCQlzdHJjcHkoc3YsKnhwKTsKLQkJZGVidWcoRjExMCwiY21p Zmkgc3YiLHN2LDApOwotCSAgICB9Ci0KLS8qIFRoaXMgaXMgdG8gZ2V0IGFyb3VuZCAiY2QgLyIg ZmFpbGluZyBiZWNhdXNlICJ0b28gbWFueSBkaXJlY3RvcmllcyBtYXRjaCIgKi8KLQotCSAgICBl eHBhbmRlZCA9IDA7CQkvKiBEaWRuJ3QgY2FsbCB6eHBhbmQgKi8KLSNpZmRlZiBkYXRhZ2VuZXJh bAotCSAgICBkZWJ1ZyhGMTEwLCJjbWlmaSBpc2RpciAxIiwqeHAsMCk7Ci0JICAgIHsKLQkJaW50 IHk7IGNoYXIgKnM7Ci0JCXMgPSAqeHA7Ci0JCXkgPSBzdHJsZW4ocyk7Ci0JCWlmICh5ID4gMSAm JgotCQkgICAgKHNbeS0xXSA9PSAnOicgfHwKLQkJICAgICBzW3ktMV0gPT0gJ14nIHx8Ci0JCSAg ICAgc1t5LTFdID09ICc9JykKLQkJICAgICkKLQkJICBzW3ktMV0gPSBOVUw7Ci0JICAgIH0KLQkg ICAgZGVidWcoRjExMCwiY21pZmkgaXNkaXIgMiIsKnhwLDApOwotI2VuZGlmIC8qICBkYXRhZ2Vu ZXJhbCAqLwotCi0jaWZkZWYgVk1TCi0JICAgIGlmIChkaXJmbGcpIHsKLQkJaWYgKCFzdHJjbXAo KnhwLCIuLiIpKSB7IC8qIEZvciBVTklYZXJzLi4uICovCi0JCSAgICBzZXRhdG0oIi0iLDApOwot CQkgICAgKnhwID0gYXRtYnVmOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAoKnhwLCIuIikpIHsKLQkJ ICAgIHNldGF0bSgiW10iLDApOwotCQkgICAgKnhwID0gYXRtYnVmOwotCQl9Ci0JICAgIH0KLSNl bmRpZiAvKiBWTVMgKi8KLQkgICAgaXRzYWRpciA9IGlzZGlyKCp4cCk7CS8qIElzIGl0IGEgZGly ZWN0b3J5PyAqLwotCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBpdHNhZGlyIiwqeHAsaXRzYWRpcik7 Ci0jaWZkZWYgVk1TCi0JICAgIC8qIElmIHRoZXkgc2FpZCAiYmxhaCIgd2hlcmUgImJsYWguZGly IiBpcyBhIGRpcmVjdG9yeS4uLiAqLwotCSAgICAvKiBjaGFuZ2UgaXQgdG8gWy5ibGFoXS4gKi8K LQkgICAgaWYgKCFpdHNhZGlyKSB7Ci0JCWNoYXIgdG1wYnVmWzYwMF07Ci0JCWludCBmbGFnID0g MDsgY2hhciBjLCAqIHA7Ci0JCXAgPSAqeHA7Ci0JCXdoaWxlICgoYyA9ICpwKyspICYmICFmbGFn KQotCQkgIGlmIChja3N0cmNocigiLltdOio/PD4iLGMpKQotCQkgICAgZmxhZyA9IDE7Ci0JCWRl YnVnKEYxMTEsImNtaWZpIFZNUyBkaXJuYW1lIGZsYWciLCp4cCxmbGFnKTsKLQkJaWYgKCFmbGFn KSB7Ci0JCSAgICBja21ha21zZyh0bXBidWYsVE1QQlVGU0laLCJbLiIsKnhwLCJdIixOVUxMKTsK LQkJICAgIGl0c2FkaXIgPSBpc2Rpcih0bXBidWYpOwotCQkgICAgaWYgKGl0c2FkaXIpIHsKLQkJ CXNldGF0bSh0bXBidWYsMCk7Ci0JCQkqeHAgPSBhdG1idWY7Ci0JCSAgICB9Ci0JCSAgICBkZWJ1 ZyhGMTExLCJjbWlmaSBWTVMgZGlybmFtZSBmbGFnIGl0c2FkaXIiLCp4cCxpdHNhZGlyKTsKLQkJ fQotCSAgICB9IGVsc2UgaWYgKGl0c2FkaXIgPT0gMSAmJiAqKHhwWzBdKSA9PSAnLicgJiYgKih4 cFsxXSkpIHsKLQkJY2hhciAqcDsKLQkJaWYgKHAgPSBtYWxsb2MoY2MgKyA0KSkgewotCQkgICAg Y2ttYWttc2cocCxjYys0LCJbIiwqeHAsIl0iLE5VTEwpOwotCQkgICAgc2V0YXRtKHAsMCk7Ci0J CSAgICAqeHAgPSBhdG1idWY7Ci0JCSAgICBkZWJ1ZyhGMTEwLCJjbWRpciAuZm9vIiwqeHAsMCk7 Ci0JCSAgICBmcmVlKHApOwotCQl9Ci0JICAgIH0gZWxzZSBpZiAoaXRzYWRpciA9PSAyICYmICFk aXJhY3RpdmUpIHsKLQkJaW50IHg7CQkJLyogW0ZPT11CQVIuRElSIGluc3RlYWQgb2YgW0ZPTy5C QVJdICovCi0JCWNoYXIgKnA7Ci0JCXAgPSBtYWxsb2MoY2MgKyA0KTsKLQkJaWYgKHApIHsKLQkJ ICAgIHggPSBjdnRkaXIoKnhwLHAsQVRNQkwpOyAvKiBDb252ZXJ0IHRvIFtGT08uQkFSXSAqLwot CQkgICAgaWYgKHggPiAwKSB7Ci0JCQlzZXRhdG0ocCwwKTsKLQkJCSp4cCA9IGF0bWJ1ZjsKLQkJ CWRlYnVnKEYxMTAsImNtZGlyIGN2dGRpciIsKnhwLDApOwotCQkgICAgfQotCQkgICAgZnJlZShw KTsKLQkJfQotCSAgICB9Ci0jZW5kaWYgLyogVk1TICovCi0KLQkgICAgZGVidWcoRjEwMSwiY21p ZmkgZGlyZmxnIiwiIixkaXJmbGcpOwotCSAgICBpZiAoZGlyZmxnKSB7CQkvKiBQYXJzaW5nIGEg ZGlyZWN0b3J5IG5hbWU/ICovCi0JCS8qIFllcywgZG9lcyBpdCBjb250YWluIHdpbGRjYXJkcz8g Ki8KLQkJaWYgKGlzd2lsZCgqeHApIHx8Ci0JCSAgICAoZGlyYWN0aXZlICYmICghc3RyY21wKCp4 cCwiLiIpICB8fCAhc3RyY21wKCp4cCwiLi4iKSkpCi0JCSAgICApIHsKLQkJICAgIG56eG9wdHMg fD0gWlhfRElST05MWTsgLyogTWF0Y2ggb25seSBkaXJlY3RvcnkgbmFtZXMgKi8KLQkJICAgIGlm IChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhfTUFUQ0hET1Q7Ci0JCSAgICBpZiAocmVjdXJzaXZl KSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7Ci0JCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBuenhvcHRz IDIiLCp4cCxuenhvcHRzKTsKLQkJICAgIHkgPSBuenhwYW5kKCp4cCxuenhvcHRzKTsKLQkJICAg IGRlYnVnKEYxMTEsImNtaWZpIG56eHBhbmQgMiIsKnhwLHkpOwotCQkgICAgbmZpbGVzID0geTsK LQkJICAgIGV4cGFuZGVkID0gMTsKLQkJfSBlbHNlIHsKLSNpZmRlZiBWTVMKLS8qCi0gIFRoaXMg aXMgdG8gYWxsb3cgKGUuZy4pICJjZCBmb28iLCB3aGVyZSBGT08uRElSOzEgaXMgaW4gdGhlCi0g IGN1cnJlbnQgZGlyZWN0b3J5LgotKi8KLQkJICAgIGRlYnVnKEYxMTEsImNtZGlyIGl0c2FkaXIi LCp4cCxpdHNhZGlyKTsKLQkJICAgIGlmICghaXRzYWRpcikgewotCQkJY2hhciAqczsKLQkJCWlu dCBuOwotCQkJcyA9ICp4cDsKLQkJCW4gPSBzdHJsZW4ocyk7Ci0JCQlpZiAobiA+IDAgJiYKLSNp ZmRlZiBDT01NRU5UCi0JCQkgICAgKnMgIT0gJ1snICYmIHNbbi0xXSAhPSAnXScgJiYKLQkJCSAg ICAqcyAhPSAnPCcgJiYgc1tuLTFdICE9ICc+JyAmJgotI2Vsc2UKLQkJCSAgICBja2luZGV4KCJb IixzLDAsMCwxKSA9PSAwICYmCi0JCQkgICAgY2tpbmRleCgiPCIscywwLDAsMSkgPT0gMCAmJgot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJCSAgICBzW24tMV0gIT0gJzonKSB7Ci0JCQkgICAgY2hh ciAqIGRpcmJ1ZiA9IE5VTEw7Ci0JCQkgICAgZGlyYnVmID0gKGNoYXIgKiltYWxsb2Mobis0KTsK LQkJCSAgICBpZiAoZGlyYnVmKSB7Ci0JCQkJaWYgKCpzID09ICcuJykKLQkJCQkgIGNrbWFrbXNn KGRpcmJ1ZixuKzQsIlsiLHMsIl0iLE5VTEwpOwotCQkJCWVsc2UKLQkJCQkgIGNrbWFrbXNnKGRp cmJ1ZixuKzQsIlsuIixzLCJdIixOVUxMKTsKLQkJCQlpdHNhZGlyID0gaXNkaXIoZGlyYnVmKTsK LQkJCQlkZWJ1ZyhGMTExLCJjbWRpciBkaXJidWYiLGRpcmJ1ZixpdHNhZGlyKTsKLQkJCQlpZiAo aXRzYWRpcikgewotCQkJCSAgICBzZXRhdG0oZGlyYnVmLDApOwotCQkJCSAgICAqeHAgPSBhdG1i dWY7Ci0JCQkJICAgIGRlYnVnKEYxMTAsImNtZGlyIG5ldyAqeHAiLCp4cCwwKTsKLQkJCQl9Ci0J CQkJZnJlZShkaXJidWYpOwotCQkJICAgIH0KLQotLyogVGhpcyBpcyB0byBhbGxvdyBDRFBBVEgg dG8gd29yayBpbiBWTVMuLi4gKi8KLQotCQkJfSBlbHNlIGlmIChuID4gMCkgewotCQkJICAgIGNo YXIgKiBwOyBpbnQgaSwgaiwgaywgZDsKLQkJCSAgICBjaGFyIHJiWzJdID0gIl0iOwotCQkJICAg IGlmIChwID0gbWFsbG9jKHggKyA4KSkgewotCQkJCWNrc3RybmNweShwLCp4cCx4KzgpOwotCQkJ CWkgPSBja2luZGV4KCIuIixwLC0xLDEsMSk7Ci0JCQkJZCA9IGNraW5kZXgoIi5kaXIiLHAsMCww LDApOwotCQkJCWogPSBja2luZGV4KCJdIixwLC0xLDEsMSk7Ci0JCQkJaWYgKGogPT0gMCkgewot CQkJCSAgICBqID0gY2tpbmRleCgiPiIscCwtMSwxLDEpOwotCQkJCSAgICByYlswXSA9ICc+JzsK LQkJCQl9Ci0JCQkJayA9IGNraW5kZXgoIjoiLHAsLTEsMSwxKTsKLQkJCQlpZiAoaSA8IGogfHwg aSA8IGspIGkgPSAwOwotCQkJCWlmIChkIDwgaiB8fCBkIDwgaykgZCA9IDA7Ci0JCQkJLyogQ2hh bmdlIFtGT09dQkFSIG9yIFtGT09dQkFSLkRJUiAqLwotCQkJCS8qIHRvIFtGT08uQkFSXSAqLwot CQkJCWlmIChqID4gMCAmJiBqIDwgbikgewotCQkJCSAgICBwW2otMV0gPSAnLic7Ci0JCQkJICAg IGlmIChkID4gMCkgcFtkLTFdID0gTlVMOwotCQkJCSAgICBja3N0cm5jYXQocCxyYix4KzgpOwot CQkJCSAgICBkZWJ1ZyhGMTEwLCJjbWRpciB4eHgiLHAsMCk7Ci0JCQkJfQotCQkJCWl0c2FkaXIg PSBpc2RpcihwKTsKLQkJCQlkZWJ1ZyhGMTExLCJjbWRpciBwIixwLGl0c2FkaXIpOwotCQkJCWlm IChpdHNhZGlyKSB7Ci0JCQkJICAgIHNldGF0bShwLDApOwotCQkJCSAgICAqeHAgPSBhdG1idWY7 Ci0JCQkJICAgIGRlYnVnKEYxMTAsImNtZGlyIG5ldyAqeHAiLCp4cCwwKTsKLQkJCQl9Ci0JCQkJ ZnJlZShwKTsKLQkJCSAgICB9Ci0JCQl9Ci0JCSAgICB9Ci0jZW5kaWYgLyogVk1TICovCi0JCSAg ICB5ID0gKCFpdHNhZGlyKSA/IDAgOiAxOwotCQkgICAgZGVidWcoRjExMSwiY21pZmkgeSBpdHNh ZGlyIiwqeHAseSk7Ci0JCX0KLQkgICAgfSBlbHNlIHsJCQkvKiBQYXJzaW5nIGEgZmlsZW5hbWUu ICovCi0JCWRlYnVnKEYxMTAsImNtaWZpICp4cCBwcmUtenhwYW5kIiwqeHAsMCk7Ci0jaWZuZGVm IENPTU1FTlQKLQkJbnp4b3B0cyB8PSAoZCA9PSAwKSA/IFpYX0ZJTE9OTFkgOiAwOyAvKiBTbyBh bHdheXMgZXhwYW5kLiAqLwotCQlpZiAobWF0Y2hkb3QpICBuenhvcHRzIHw9IFpYX01BVENIRE9U OwotCQlpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7Ci0JCXkgPSBuenhwYW5k KCp4cCxuenhvcHRzKTsKLSNlbHNlCi0vKiBIZXJlIHdlJ3JlIHRyeWluZyB0byBmaXggYSBwcm9i bGVtIGluIHdoaWNoIGEgZGlyZWN0b3J5IG5hbWUgaXMgYWNjZXB0ZWQgKi8KLS8qIGFzIGEgZmls ZW5hbWUsIGJ1dCB0aGlzIGJyZWFrcyB0b28gbWFueSBvdGhlciB0aGluZ3MuICovCi0JCS8qIG56 eG9wdHMgPSAwOyAqLwotCQlpZiAoIWQpIHsKLQkJICAgIGlmIChpdHNhZGlyICYgIWlzd2lsZCgq eHApKSB7Ci0JCQlkZWJ1ZyhGMTAwLCJjbWlmaSBkaXIgd2hlbiBmaWxvbmx5IiwiIiwwKTsKLQkJ CXByaW50ZigiP05vdCBhIHJlZ3VsYXIgZmlsZTogXCIlc1wiXG4iLCp4cCk7Ci0JCQlpZiAoc3Yp IGZyZWUoc3YpOwotCQkJaWYgKG5wKSBmcmVlKG5wKTsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9 IGVsc2UgewotCQkJbnp4b3B0cyB8PSBaWF9GSUxPTkxZOwotCQkJaWYgKG1hdGNoZG90KSAgbnp4 b3B0cyB8PSBaWF9NQVRDSERPVDsKLQkJCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVD VVJTRTsKLQkJCXkgPSBuenhwYW5kKCp4cCxuenhvcHRzKTsKLQkJICAgIH0KLQkJfQotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQkJbmZpbGVzID0geTsKLQkJZGVidWcoRjExMSwiY21pZmkgeSBuenhw YW5kIiwqeHAseSk7Ci0JCWRlYnVnKEYxMTEsImNtaWZpIHkgYXRtYnVmIixhdG1idWYsaXRzYWRp cik7Ci0JCWV4cGFuZGVkID0gMTsKLQkgICAgfQotCSAgICAvKiBkb215ZGlyKCkgY2FsbHMgenhy ZXdpbmQoKSBzbyB3ZSBNVVNUIGNhbGwgbnp4cGFuZCgpIGhlcmUgKi8KLQkgICAgaWYgKCFleHBh bmRlZCAmJiBkaXJhY3RpdmUpIHsKLQkJZGVidWcoRjExMCwiY21pZmkgZGlyYWN0aXZlIGNhdGNo LWFsbCB6eHBhbmQiLCp4cCwwKTsKLQkJbnp4b3B0cyB8PSAoZCA9PSAwKSA/IFpYX0ZJTE9OTFkg OiAoZGlyZmxnID8gWlhfRElST05MWSA6IDApOwotCQlpZiAobWF0Y2hkb3QpICBuenhvcHRzIHw9 IFpYX01BVENIRE9UOwotCQlpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7Ci0J CXkgPSBuenhwYW5kKCp4cCxuenhvcHRzKTsKLQkJZGVidWcoRjExMSwiY21pZmkgZGlyYWN0aXZl IG56eHBhbmQiLCp4cCx5KTsKLQkJbmZpbGVzID0geTsKLQkJZXhwYW5kZWQgPSAxOwotCSAgICB9 Ci0JICAgICp3aWxkID0gKGlzd2lsZChzdikgfHwgKHkgPiAxKSkgJiYgKGl0c2FkaXIgPT0gMCk7 Ci0KLSNpZmRlZiBSRUNVUlNJVkUKLQkgICAgaWYgKCEqd2lsZCkgKndpbGQgPSByZWN1cnNpdmU7 Ci0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0KLQkgICAgZGVidWcoRjExMSwiY21pZmkgc3Ygd2ls ZCIsc3YsKndpbGQpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSB5IiwiIix5KTsKLQkgICAgaWYg KGRpcmZsZyAmJiAqd2lsZCAmJiBjZGFjdGl2ZSkgewotCQlpZiAoeSA+IDEpIHsKLQkJICAgIHBy aW50ZigiP1dpbGRjYXJkIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSBkaXJlY3RvcnlcbiIpOwotCQkg ICAgaWYgKHN2KSBmcmVlKHN2KTsKLQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0JCSAgICByZXR1 cm4oLTkpOwotCQl9IGVsc2UgewotCQkgICAgem5leHQoKnhwKTsKLQkJfQotCSAgICB9Ci0JICAg IGlmIChpdHNhZGlyICYmIGQgJiYgIWRpcmZsZykgeyAvKiBJdCdzIGEgZGlyZWN0b3J5IGFuZCBu b3Qgd2lsZCAqLwotCQlpZiAoc3YpIGZyZWUoc3YpOwkvKiBhbmQgaXQncyBvayB0byBwYXJzZSBk aXJlY3RvcmllcyAqLwotCQlpZiAobnApIGZyZWUobnApOwotI2lmbmRlZiBOT0xBU1RGSUxFCi0J CW1ha2VzdHIoJmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsKLSNlbmRpZgkvKiBOT0xBU1RGSUxFICov Ci0JCXJldHVybih4KTsKLQkgICAgfQotCSAgICBpZiAoeSA9PSAwKSB7CQkvKiBGaWxlIHdhcyBu b3QgZm91bmQgKi8KLQkJaW50IGRvc2VhcmNoID0gMDsKLQkJZG9zZWFyY2ggPSAocGF0aCAhPSBO VUxMKTsgLyogQSBzZWFyY2ggcGF0aCB3YXMgZ2l2ZW4gKi8KLQkJaWYgKGRvc2VhcmNoKSB7Ci0J CSAgICBkb3NlYXJjaCA9IGhhc25vcGF0aChzdik7IC8qIEZpbGVuYW1lIGluY2x1ZGVzIG5vIHBh dGggKi8KLQkJICAgIGRlYnVnKEYxMTEsImNtaWZpcCBoYXNub3BhdGgiLHN2LGRvc2VhcmNoKTsK LQkJfQotCQlpZiAoZG9zZWFyY2gpIHsJCS8qIFNlYXJjaCB0aGUgcGF0aC4uLiAqLwotCQkgICAg Y2hhciAqIHB0ciA9IHBhdGg7Ci0JCSAgICBjaGFyIGM7Ci0JCSAgICB3aGlsZSAoMSkgewotCQkJ YyA9ICpwdHI7Ci0JCQlpZiAoYyA9PSBQQVRIU0VQIHx8IGMgPT0gTlVMKSB7Ci0JCQkgICAgaWYg KCEqcGF0aCkgewotCQkJCXBhdGggPSBOVUxMOwotCQkJCWJyZWFrOwotCQkJICAgIH0KLQkJCSAg ICAqcHRyID0gTlVMOwotI2lmZGVmIFVOSVgKLS8qIEJ5IGRlZmluaXRpb24gb2YgQ0RQQVRILCBh biBlbXB0eSBtZW1iZXIgZGVub3RlcyB0aGUgY3VycmVudCBkaXJlY3RvcnkgKi8KLQkJCSAgICBp ZiAoISpwYXRoKQotCQkJICAgICAgY2tzdHJuY3B5KGF0bWJ1ZiwiLiIsQVRNQkwpOwotCQkJICAg IGVsc2UKLSNlbmRpZiAvKiBVTklYICovCi0JCQkgICAgICBja3N0cm5jcHkoYXRtYnVmLHBhdGgs QVRNQkwpOwotI2lmZGVmIFZNUwotCQkJICAgIGF0bWJ1ZltBVE1CTF0gPSBOVUw7Ci0vKiBJZiB3 ZSBoYXZlIGEgbG9naWNhbCBuYW1lLCBldmFsdWF0ZSBpdCByZWN1cnNpdmVseSAqLwotCQkJICAg IGlmICgqKHB0ci0xKSA9PSAnOicpIHsgLyogTG9naWNhbCBuYW1lIGVuZHMgaW4gOiAqLwotCQkJ CWNoYXIgKnA7IGludCBuOwotCQkJCXdoaWxlICgoKG4gPSBzdHJsZW4oYXRtYnVmKSkgID4gMCkg JiYKLQkJCQkgICAgICAgYXRtYnVmW24tMV0gPT0gJzonKSB7Ci0JCQkJICAgIGF0bWJ1ZltuLTFd ID0gTlVMOwotCQkJCSAgICBmb3IgKHAgPSBhdG1idWY7ICpwOyBwKyspCi0JCQkJICAgICAgaWYg KGlzbG93ZXIoKnApKSAqcCA9IHRvdXBwZXIoKnApOwotCQkJCSAgICBkZWJ1ZyhGMTExLCJjbWRp ciBDRFBBVEggTE4gMSIsYXRtYnVmLG4pOwotCQkJCSAgICBwID0gZ2V0ZW52KGF0bWJ1Zik7Ci0J CQkJICAgIGRlYnVnKEYxMTAsImNtZGlyIENEUEFUSCBMTiAyIixwLDApOwotCQkJCSAgICBpZiAo IXApCi0JCQkJICAgICAgYnJlYWs7Ci0JCQkJICAgIHN0cm5jcHkoYXRtYnVmLHAsQVRNQkwpOwot CQkJCSAgICBhdG1idWZbQVRNQkxdID0gTlVMOwotCQkJCX0KLQkJCSAgICB9Ci0jZWxzZQotI2lm ZGVmIE9TMgotCQkJICAgIGlmICgqKHB0ci0xKSAhPSAnXFwnICYmICoocHRyLTEpICE9ICcvJykK LQkJCSAgICAgIGNrc3RybmNhdChhdG1idWYsIlxcIixBVE1CTCk7Ci0jZWxzZQotI2lmZGVmIFVO SVgKLQkJCSAgICBpZiAoKihwdHItMSkgIT0gJy8nKQotCQkJICAgICAgY2tzdHJuY2F0KGF0bWJ1 ZiwiLyIsQVRNQkwpOwotI2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJhbAotCQkJICAgIGlmICgqKHB0 ci0xKSAhPSAnOicpCi0JCQkgICAgICBja3N0cm5jYXQoYXRtYnVmLCI6IixBVE1CTCk7Ci0jZW5k aWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogT1MyICov Ci0jZW5kaWYgLyogVk1TICovCi0JCQkgICAgY2tzdHJuY2F0KGF0bWJ1ZixzdixBVE1CTCk7Ci0J CQkgICAgZGVidWcoRjExMCwiY21pZmlwIGFkZCBwYXRoIixhdG1idWYsMCk7Ci0JCQkgICAgaWYg KGMgPT0gUEFUSFNFUCkgcHRyKys7Ci0JCQkgICAgcGF0aCA9IHB0cjsKLQkJCSAgICBicmVhazsK LQkJCX0KLQkJCXB0cisrOwotCQkgICAgfQotCQkgICAgeCA9IDE7Ci0JCSAgICBpbndvcmQgPSAw OwotCQkgICAgY2MgPSAwOwotCQkgICAgeGMgPSAoaW50KSBzdHJsZW4oYXRtYnVmKTsKLQkJICAg ICp4cCA9ICIiOwotCQkgICAgZ290byBpX3BhdGg7Ci0JCX0KLQkJaWYgKGQpIHsKLQkJICAgIGlm IChzdikgZnJlZShzdik7Ci0JCSAgICBpZiAobnApIGZyZWUobnApOwotCQkgICAgcmV0dXJuKC0y KTsKLQkJfSBlbHNlIHsKLQkJICAgIGlmICghbm9tc2cpIHsKLSNpZmRlZiBDS1JPT1QKLQkJCWlm IChja3Jvb3RlcnIpCi0JCQkgIHByaW50ZigiP09mZiBMaW1pdHM6ICVzXG4iLHN2KTsKLQkJCWVs c2UKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQkJCSAgaWYgKCFxdWlldCkKLQkJCSAgICBwcmludGYo Ij9ObyAlcyBtYXRjaCAtICVzXG4iLAotCQkJCSBkaXJmbGcgPyAiZGlyZWN0b3JpZXMiIDogImZp bGVzIiwgc3YpOwotCQkgICAgfQotCQkgICAgaWYgKHN2KSBmcmVlKHN2KTsKLQkJICAgIGlmIChu cCkgZnJlZShucCk7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0JICAgIH0gZWxzZSBpZiAoeSA8 IDApIHsKLSNpZmRlZiBDS1JPT1QKLQkJaWYgKGNrcm9vdGVycikKLQkJICBwcmludGYoIj9PZmYg TGltaXRzOiAlc1xuIixzdik7Ci0JCWVsc2UKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQkJICBwcmlu dGYoIj9Ub28gbWFueSAlcyBtYXRjaCAtICVzXG4iLAotCQkJIGRpcmZsZyA/ICJkaXJlY3Rvcmll cyIgOiAiZmlsZXMiLCBzdik7Ci0JCWlmIChzdikgZnJlZShzdik7Ci0JCWlmIChucCkgZnJlZShu cCk7Ci0JCXJldHVybigtOSk7Ci0JICAgIH0gZWxzZSBpZiAoKndpbGQgfHwgeSA+IDEpIHsKLQkJ aWYgKHN2KSBmcmVlKHN2KTsKLQkJaWYgKG5wKSBmcmVlKG5wKTsKLSNpZm5kZWYgTk9MQVNURklM RQotCQltYWtlc3RyKCZsYXN0ZmlsZSx0bXBsYXN0ZmlsZSk7Ci0jZW5kaWYJLyogTk9MQVNURklM RSAqLwotCQlyZXR1cm4oeCk7Ci0JICAgIH0KLQotCSAgICAvKiBJZiBub3Qgd2lsZCwgc2VlIGlm IGl0IGV4aXN0cyBhbmQgaXMgcmVhZGFibGUuICovCi0KLQkgICAgZGVidWcoRjExMSwiY21pZmkg c3Ygbm90IHdpbGQiLHN2LCp3aWxkKTsKLQkgICAgaWYgKGV4cGFuZGVkKQotCSAgICAgIHpuZXh0 KCp4cCk7CQkvKiBHZXQgZmlyc3QgKG9ubHk/KSBtYXRjaGluZyBmaWxlICovCi0JICAgIGlmIChk aXJmbGcpCQkJLyogTWF5YmUgd2lsZCBhbmQgZXhwYW5kZWQgKi8KLQkgICAgICBpdHNhZGlyID0g aXNkaXIoKnhwKTsJLyogc28gZG8gdGhpcyBhZ2Fpbi4gKi8KLQkgICAgZmlsZXNpemUgPSBkaXJm bGcgPyBpdHNhZGlyIDogemNoa2koKnhwKTsgLyogQ2hlY2sgYWNjZXNzaWJpbGl0eSAqLwotCSAg ICBpZiAoZXhwYW5kZWQpIHsKLSNpZmRlZiBaWFJFV0lORAotCQluZmlsZXMgPSB6eHJld2luZCgp OwkvKiBSZXdpbmQgc28gbmV4dCB6bmV4dCgpIGdldHMgMXN0ICovCi0jZWxzZQotCi0JCW56eG9w dHMgfD0gZGlyZmxnID8gWlhfRElST05MWSA6IDA7Ci0JCWlmIChtYXRjaGRvdCkgIG56eG9wdHMg fD0gWlhfTUFUQ0hET1Q7Ci0JCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsK LQkJbmZpbGVzID0gbnp4cGFuZCgqeHAsbnp4b3B0cyk7Ci0jZW5kaWYgLyogWlhSRVdJTkQgKi8K LQkgICAgfQotCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBuZmlsZXMiLCp4cCxuZmlsZXMpOwotCSAg ICBkZWJ1ZyhGMTAxLCJjbWlmaSBmaWxlc2l6ZSIsIiIsZmlsZXNpemUpOwotCSAgICBmcmVlKHN2 KTsJCQkvKiBkb25lIHdpdGggdGhpcyAqLwotCSAgICBzdiA9IE5VTEw7Ci0JICAgIGlmIChkaXJm bGcgJiYgIWZpbGVzaXplKSB7Ci0JCXByaW50ZigiP05vdCBhIGRpcmVjdG9yeSAtICVzXG4iLCp4 cCk7Ci0jaWZkZWYgQ0tDSEFOTkVMSU8KLQkJel9lcnJvciA9IEZYX0FDQzsKLSNlbmRpZiAvKiBD S0NIQU5ORUxJTyAqLwotCQlyZXR1cm4oLTkpOwotCSAgICB9IGVsc2UgaWYgKGZpbGVzaXplID09 IChDS19PRkZfVCktMykgewotCQlpZiAoIXhjbWZkYikgewotCQkgICAgaWYgKGRpcmFjdGl2ZSkK LQkJICAgICAgLyogRG9uJ3Qgc2hvdyBmaWxlbmFtZSBpZiB3ZSdyZSBub3QgYWxsb3dlZCB0byBz ZWUgaXQgKi8KLQkJICAgICAgcHJpbnRmKCI/UmVhZCBwZXJtaXNzaW9uIGRlbmllZFxuIik7Ci0J CSAgICBlbHNlCi0JCSAgICAgIHByaW50ZigiP1JlYWQgcGVybWlzc2lvbiBkZW5pZWQgLSAlc1xu IiwqeHApOwotCQl9Ci0JCWlmIChucCkgZnJlZShucCk7Ci0jaWZkZWYgQ0tDSEFOTkVMSU8KLQkJ el9lcnJvciA9IEZYX0FDQzsKLSNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLwotCQlyZXR1cm4oeGNt ZmRiID8gLTYgOiAtOSk7Ci0JICAgIH0gZWxzZSBpZiAoZmlsZXNpemUgPT0gKENLX09GRl9UKS0y KSB7Ci0JCWlmICghcmVjdXJzaXZlKSB7Ci0JCSAgICBpZiAobnApIGZyZWUobnApOwotCQkgICAg aWYgKGQpIHsKLSNpZm5kZWYgTk9MQVNURklMRQotCQkJbWFrZXN0cigmbGFzdGZpbGUsdG1wbGFz dGZpbGUpOwotI2VuZGlmCS8qIE5PTEFTVEZJTEUgKi8KLQkJCXJldHVybigwKTsKLQkJICAgIH0K LQkJICAgIGlmICgheGNtZmRiKQotCQkgICAgICBwcmludGYoIj9GaWxlIG5vdCByZWFkYWJsZSAt ICVzXG4iLCp4cCk7Ci0jaWZkZWYgQ0tDSEFOTkVMSU8KLQkJICAgIHpfZXJyb3IgPSBGWF9BQ0M7 Ci0jZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KLQkJICAgIHJldHVybih4Y21mZGIgPyAtNiA6IC05 KTsKLQkJfQotCSAgICB9IGVsc2UgaWYgKGZpbGVzaXplIDwgKENLX09GRl9UKTApIHsKLQkJaWYg KG5wKSBmcmVlKG5wKTsKLQkJaWYgKCFub21zZyAmJiAheGNtZmRiKQotCQkgIHByaW50ZigiP0Zp bGUgbm90IGZvdW5kIC0gJXNcbiIsKnhwKTsKLSNpZmRlZiBDS0NIQU5ORUxJTwotCQl6X2Vycm9y ID0gRlhfRk5GOwotI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCi0JCXJldHVybih4Y21mZGIgPyAt NiA6IC05KTsKLQkgICAgfQotCSAgICBpZiAobnApIGZyZWUobnApOwotI2lmbmRlZiBOT0xBU1RG SUxFCi0JICAgIG1ha2VzdHIoJmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsKLSNlbmRpZgkvKiBOT0xB U1RGSUxFICovCi0JICAgIHJldHVybih4KTsKLQotI2lmbmRlZiBNQUMKLQkgIGNhc2UgMjoJCQkv KiBFU0MgKi8KLQkgICAgZGVidWcoRjEwMSwiY21pZmkgZXNjLCB4YyIsIiIseGMpOwotCSAgICBp ZiAoeGMgPT0gMCkgewotCQlpZiAoKnhkZWYpIHsKLQkJICAgIHByaW50ZigiJXMgIix4ZGVmKTsg LyogSWYgYXQgYmVnaW5uaW5nIG9mIGZpZWxkICovCi0jaWZkZWYgR0VNRE9TCi0JCSAgICBmZmx1 c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQkJICAgIGlud29yZCA9IGNtZmxncyA9 IDA7Ci0JCSAgICBhZGRidWYoeGRlZik7CS8qIFN1cHBseSBkZWZhdWx0LiAqLwotCQkgICAgaWYg KHNldGF0bSh4ZGVmLDApIDwgMCkgewotCQkJcHJpbnRmKCJEZWZhdWx0IG5hbWUgdG9vIGxvbmdc biIpOwotCQkJaWYgKG5wKSBmcmVlKG5wKTsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9Ci0JCX0g ZWxzZSB7CQkvKiBObyBkZWZhdWx0ICovCi0JCSAgICBibGVlcChCUF9XQVJOKTsKLQkJfQotCQli cmVhazsKLQkgICAgfQotCSAgICBpZiAoKip4cCA9PSAneycpIHsJCS8qIERpZCB1c2VyIHR5cGUg b3BlbmluZyBicmFjZS4uLiAqLwotCQkqeHAgPSAqeHAgKyAxOwotCQl4Yy0tOwotCQljYy0tOwot CQlxZmxhZyA9ICd9JzsKLQkgICAgfSBlbHNlIGlmIChkYmxxdW8gJiYgKip4cCA9PSAnIicpIHsJ Lyogb3IgZG91YmxlcXVvdGU/ICovCi0JCSp4cCA9ICp4cCArIDE7CQkvKiBJZiBzbyBpZ25vcmUg aXQgYW5kIHNwYWNlIHBhc3QgaXQgKi8KLQkJeGMtLTsKLQkJY2MtLTsKLQkJcWZsYWcgPSAnIic7 Ci0JICAgIH0KLSNpZm5kZWYgTk9TUEwKLQkgICAgaWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNp b24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KLSNpZmRlZiBET0NIS1ZBUgotCQljaGFyICpzID0gKnhw OwkJLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgdmFyaWFibGVzIGluICovCi0JCXdoaWxlICgqcykg ewkJLyogdGhlIHN0cmluZyBhbmQgaWYgc28sIGV4cGFuZCBpdC4gICovCi0JCSAgICBpZiAoY2hr dmFyKHMpKSB7Ci0jZW5kaWYgLyogRE9DSEtWQVIgKi8KLQkJCXpxID0gYXR4YnVmOwotCQkJYXR4 biA9IENNREJMOwotCQkJaWYgKCh4ID0gKCpmKSgqeHAsJnpxLCZhdHhuKSkgPCAwKSB7Ci0JCQkg ICAgaWYgKG5wKSBmcmVlKG5wKTsKLQkJCSAgICByZXR1cm4oLTIpOwotCQkJfQotI2lmZGVmIERP Q0hLVkFSCi0JCSAgICAvKiByZWR1Y2UgY2MgYnkgbnVtYmVyIG9mIFxcIGNvbnN1bWVkIGJ5IGNv bnZlcnNpb24gKi8KLQkJICAgIC8qIGZ1bmN0aW9uIChuZWVkZWQgZm9yIE9TLzIsIHdoZXJlIFwg aXMgcGF0aCBzZXBhcmF0b3IpICovCi0JCQljYyAtPSAoc3RybGVuKCp4cCkgLSBzdHJsZW4oYXR4 YnVmKSk7Ci0jZW5kaWYgLyogRE9DSEtWQVIgKi8KLQkJCSp4cCA9IGF0eGJ1ZjsKLQkJCWlmICgh YXR4YnVmWzBdKSB7IC8qIFJlc3VsdCBlbXB0eSwgdXNlIGRlZmF1bHQgKi8KLQkJCSAgICAqeHAg PSB4ZGVmOwotCQkJICAgIGNjID0gc3RybGVuKHhkZWYpOwotCQkJfQotI2lmZGVmIERPQ0hLVkFS Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJICAgIHMrKzsKLQkJfQotI2VuZGlmIC8qIERPQ0hLVkFS ICovCi0JICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgRFRJTERFCi0JICAgIGlm IChkaXJmbGcgJiYgKigqeHApID09ICd+JykgewotCQlkZWJ1ZyhGMTExLCJjbWlmaSB0aWxkZV9l eHBhbmQgQSIsKnhwLGNjKTsKLQkJZGlycCA9IHRpbGRlX2V4cGFuZCgqeHApOyAvKiBFeHBhbmQg dGlsZGUsIGlmIGFueS4uLiAqLwotCQlpZiAoIWRpcnApIGRpcnAgPSAiIjsKLQkJaWYgKCpkaXJw KSB7Ci0JCSAgICBpbnQgaSwgeHg7Ci0JCSAgICBjaGFyICogc3A7Ci0JCSAgICB4YyA9IGNjOwkJ LyogTGVuZ3RoIG9mIH50aGluZyAqLwotCQkgICAgeHggPSBzZXRhdG0oZGlycCwwKTsgLyogQ29w eSBleHBhbnNpb24gdG8gYXRvbSBidWZmZXIgKi8KLQkJICAgIGRlYnVnKEYxMTEsImNtaWZpIHRp bGRlX2V4cGFuZCBCIixhdG1idWYsY2MpOwotCQkgICAgaWYgKHh4IDwgMCkgewotCQkJcHJpbnRm KCJFeHBhbmRlZCBuYW1lIHRvbyBsb25nXG4iKTsKLQkJCWlmIChucCkgZnJlZShucCk7Ci0JCQly ZXR1cm4oLTkpOwotCQkgICAgfQotCQkgICAgZGVidWcoRjExMSwiY21pZmkgdGlsZGVfZXhwYW5k IHhjIiwiIix4Yyk7Ci0JCSAgICBmb3IgKGkgPSAwOyBpIDwgeGM7IGkrKykgewotCQkJY21kY2hh cmRlbCgpOwkvKiBCYWNrIHVwIG92ZXIgfnRoaW5nICovCi0JCQlicC0tOwotCQkgICAgfQotCQkg ICAgeGMgPSBjYzsJCS8qIEhvdyBtYW55IG5ldyBvbmVzIHdlIGp1c3QgZ290ICovCi0JCSAgICBz cCA9IGF0bWJ1ZjsKLQkJICAgIHByaW50ZigiJXMiLHNwKTsJLyogUHJpbnQgdGhlbSAqLwotCQkg ICAgd2hpbGUgKCgqYnArKyA9ICpzcCsrKSkgOwkvKiBDb3B5IHRvIGNvbW1hbmQgYnVmZmVyICov Ci0JCSAgICBicC0tOwkgICAgCSAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLwotCQl9Ci0J CSp4cCA9IGF0bWJ1ZjsKLQkgICAgfQotI2VuZGlmIC8qIERUSUxERSAqLwotCi0JICAgIHNwID0g KnhwICsgY2M7Ci0KLSNpZmRlZiBVTklYT1JPU0sKLQkgICAgaWYgKCFzdHJjbXAoYXRtYnVmLCIu LiIpKSB7Ci0JCXByaW50ZigiICIpOwotCQlja3N0cm5jYXQoY21kYnVmLCIgIixDTURCTCk7Ci0J CWNjKys7Ci0JCWJwKys7Ci0JCSp3aWxkID0gMDsKLQkJKnhwID0gYXRtYnVmOwotCQlicmVhazsK LQkgICAgfSBlbHNlIGlmICghc3RyY21wKGF0bWJ1ZiwiLiIpKSB7Ci0JCWJsZWVwKEJQX1dBUk4p OwotCQlpZiAobnApIGZyZWUobnApOwotCQlyZXR1cm4oLTEpOwotCSAgICB9IGVsc2UgewotCQkv KiBUaGlzIHBhdGNoZXMgYSBnbGl0Y2ggd2hlbiB1c2VyIHR5cGVzICIuL2ZvbzxFU0M+IiAqLwot CQkvKiBpbiB3aGljaCB0aGUgbmV4dCB0d28gY2hhcnMgYXJlIG9taXR0ZWQgZnJvbSB0aGUgKi8K LQkJLyogZXhwYW5zaW9uLiAgVGhlcmUgc2hvdWxkIGJlIGEgYmV0dGVyIGZpeCwgaG93ZXZlciwg Ki8KLQkJLyogc2luY2UgdGhlcmUgaXMgbm8gcHJvYmxlbSB3aXRoICIuLi9mb288RVNDPiIuICov Ci0JCWNoYXIgKnAgPSAqeHA7Ci0JCWlmICgqcCA9PSAnLicgJiYgKihwKzEpID09ICcvJykKLQkJ ICBjYyAtPSAyOwotCSAgICB9Ci0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0KLSNpZmRlZiBkYXRh Z2VuZXJhbAotCSAgICAqc3ArKyA9ICcrJzsJCS8qIERhdGEgR2VuZXJhbCBBT1Mgd2lsZGNhcmQg Ki8KLSNlbHNlCi0JICAgICpzcCsrID0gJyonOwkJLyogT3RoZXJzICovCi0jZW5kaWYgLyogZGF0 YWdlbmVyYWwgKi8KLQkgICAgKnNwLS0gPSAnXDAnOwotI2lmZGVmIEdFTURPUwotCSAgICBpZiAo IXN0cmNocigqeHAsICcuJykpCS8qIGFiZGUuZSAtPiBhYmNkZS5lKiAqLwotCSAgICAgIHN0cmNh dCgqeHAsICIuKiIpOwkvKiBhYmMgLT4gYWJjKi4qICovCi0jZW5kaWYgLyogR0VNRE9TICovCi0J ICAgIC8qIEFkZCB3aWxkY2FyZCBhbmQgZXhwYW5kIGxpc3QuICovCi0jaWZkZWYgQ09NTUVOVAot CSAgICAvKiBUaGlzIGtpbGxzIHBhcnRpYWwgY29tcGxldGlvbiB3aGVuIEVTQyBnaXZlbiBpbiBw YXRoIHNlZ21lbnQgKi8KLQkgICAgbnp4b3B0cyB8PSBkaXJmbGcgPyBaWF9ESVJPTkxZIDogKGQg PyAwIDogWlhfRklMT05MWSk7Ci0jZWxzZQotCSAgICAvKiBuenhvcHRzID0gMDsgKi8KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0JICAgIGlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhfTUFUQ0hE T1Q7Ci0JICAgIGlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKLQkgICAgeSA9 IG56eHBhbmQoKnhwLG56eG9wdHMpOwotCSAgICBuZmlsZXMgPSB5OwotCSAgICBkZWJ1ZyhGMTEx LCJjbWlmaSBuenhwYW5kIiwqeHAseSk7Ci0JICAgIGlmICh5ID4gMCkgewotI2lmZGVmIE9TMgot ICAgICAgICAgICAgICAgIHpuZXh0KGZpbGJ1Zik7CQkvKiBHZXQgZmlyc3QgKi8KLSNpZmRlZiBa WFJFV0lORAotCQl6eHJld2luZCgpOwkJLyogTXVzdCAicmV3aW5kIiAqLwotI2Vsc2UKLQkJbnp4 cGFuZCgqeHAsbnh6b3B0cyk7Ci0jZW5kaWYgLyogWlhSRVdJTkQgKi8KLSNlbHNlICAvKiBOb3Qg T1MyICovCi0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZpbGJ1ZixtdGNoc1swXSxDS01BWFBB VEgpOwotI2VuZGlmIC8qIE9TMiAqLwotCSAgICB9IGVsc2UKLQkgICAgICAqZmlsYnVmID0gJ1ww JzsKLQkgICAgZmlsYnVmW0NLTUFYUEFUSF0gPSBOVUw7Ci0JICAgICpzcCA9ICdcMCc7CQkJLyog UmVtb3ZlIHdpbGRjYXJkLiAqLwotCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBmaWxidWYiLGZpbGJ1 Zix5KTsKLQkgICAgZGVidWcoRjExMSwiY21pZmkgKnhwIiwqeHAsY2MpOwotCi0JICAgICp3aWxk ID0gKHkgPiAxKTsKLQkgICAgaWYgKHkgPT0gMCkgewotCQlpZiAoIW5vbXNnKSB7Ci0jaWZkZWYg Q0tST09UCi0JCSAgICBpZiAoY2tyb290ZXJyKQotCQkgICAgICBwcmludGYoIj9PZmYgTGltaXRz OiAlc1xuIixhdG1idWYpOwotCQkgICAgZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwotCQkgICAg ICBwcmludGYoIj9ObyAlcyBtYXRjaCAtICVzXG4iLAotCQkJICAgZGlyZmxnID8gImRpcmVjdG9y aWVzIiA6ICJmaWxlcyIsIGF0bWJ1Zik7Ci0JCSAgICBpZiAobnApIGZyZWUobnApOwotCQkgICAg cmV0dXJuKC05KTsKLQkJfSBlbHNlIHsKLQkJICAgIGJsZWVwKEJQX1dBUk4pOwotCQkgICAgaWYg KG5wKSBmcmVlKG5wKTsKLQkJICAgIHJldHVybigtMSk7Ci0JCX0KLQkgICAgfSBlbHNlIGlmICh5 IDwgMCkgewotI2lmZGVmIENLUk9PVAotCQlpZiAoY2tyb290ZXJyKQotCQkgIHByaW50ZigiP09m ZiBMaW1pdHM6ICVzXG4iLGF0bWJ1Zik7Ci0JCWVsc2UKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQkJ ICBwcmludGYoIj9Ub28gbWFueSAlcyBtYXRjaCAtICVzXG4iLAotCQkJIGRpcmZsZyA/ICJkaXJl Y3RvcmllcyIgOiAiZmlsZXMiLCBhdG1idWYpOwotCQlpZiAobnApIGZyZWUobnApOwotCQlyZXR1 cm4oLTkpOwotCSAgICB9IGVsc2UgaWYgKHkgPiAxCQkvKiBOb3QgdW5pcXVlICovCi0jaWZuZGVm IFZNUwotCQkgICAgICAgfHwgKHkgPT0gMSAmJiBpc2RpcihmaWxidWYpKSAvKiBVbmlxdWUgZGly ZWN0b3J5ICovCi0jZW5kaWYgLyogVk1TICovCi0JCSAgICAgICApIHsKLSNpZm5kZWYgTk9QQVJU SUFMCi0vKiBQYXJ0aWFsIGZpbGVuYW1lIGNvbXBsZXRpb24gKi8KLQkJaW50IGosIGs7IGNoYXIg YzsKLQkJayA9IDA7Ci0JCWRlYnVnKEYxMTEsImNtaWZpIHBhcnRpYWwiLGZpbGJ1ZixjYyk7Ci0j aWZkZWYgT1MyCi0JCXsKLQkJICAgIGludCBjdXIgPSAwLAotCQkgICAgbGVuID0gMCwKLQkJICAg IGxlbjIgPSAwLAotCQkgICAgbWluID0gc3RybGVuKGZpbGJ1ZiksCi0JCSAgICBmb3VuZCA9IDA7 Ci0JCSAgICBjaGFyIGxvY2FsZm5bQ0tNQVhQQVRIKzFdOwotCi0JCSAgICBsZW4gPSBtaW47Ci0J CSAgICBmb3IgKGogPSAxOyBqIDw9IHk7IGorKykgewotCQkJem5leHQobG9jYWxmbik7Ci0JCQlp ZiAoZGlyZmxnICYmICFpc2Rpcihsb2NhbGZuKSkKLQkJCSAgY29udGludWU7Ci0JCQlmb3VuZCA9 IDE7Ci0JCQlsZW4yID0gc3RybGVuKGxvY2FsZm4pOwotCQkJZm9yIChjdXIgPSBjYzsKLQkJCSAg ICAgY3VyIDwgbGVuICYmIGN1ciA8IGxlbjIgJiYgY3VyIDw9IG1pbjsKLQkJCSAgICAgY3VyKysK LQkJCSAgICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1MvMiBvciBXaW5k b3dzLCBjYXNlIGRvZXNuJ3QgbWF0dGVyICovCi0JCQkgICAgaWYgKHRvbG93ZXIoZmlsYnVmW2N1 cl0pICE9IHRvbG93ZXIobG9jYWxmbltjdXJdKSkKLQkJCSAgICAgIGJyZWFrOwotCQkJfQotCQkJ aWYgKGN1ciA8IG1pbikKLQkJCSAgbWluID0gY3VyOwotCQkgICAgfQotCQkgICAgaWYgKCFmb3Vu ZCkKLQkJICAgICAgbWluID0gY2M7Ci0JCSAgICBmaWxidWZbbWluXSA9IE5VTDsKLQkJICAgIGlm IChtaW4gPiBjYykKLQkJICAgICAgaysrOwotCQl9Ci0jZWxzZSAvKiBPUzIgKi8KLQkJZm9yIChp ID0gY2M7IChjID0gZmlsYnVmW2ldKTsgaSsrKSB7Ci0JCSAgICBmb3IgKGogPSAxOyBqIDwgeTsg aisrKQotCQkgICAgICBpZiAobXRjaHNbal1baV0gIT0gYykgYnJlYWs7Ci0JCSAgICBpZiAoaiA9 PSB5KSBrKys7Ci0JCSAgICBlbHNlIGZpbGJ1ZltpXSA9IGZpbGJ1ZltpKzFdID0gTlVMOwotCQl9 Ci0jZW5kaWYgLyogT1MyICovCi0KLQotI2lmbmRlZiBWTVMKLQkJLyogaXNkaXIoKSBmdW5jdGlv biByZXF1aXJlZCBmb3IgdGhpcyEgKi8KLQkJaWYgKHkgPT0gMSAmJiBpc2RpcihmaWxidWYpKSB7 IC8qIERvbnQgd2UgYWxyZWFkeSBrbm93IHRoaXM/ICovCi0JCSAgICBpbnQgbGVuOwotCQkgICAg bGVuID0gc3RybGVuKGZpbGJ1Zik7Ci0JCSAgICBpZiAobGVuID4gMCAmJiBsZW4gPCBBVE1CTCAt IDEpIHsKLQkJCWlmIChmaWxidWZbbGVuLTFdICE9IGRpcnNlcCkgewotCQkJICAgIGZpbGJ1Zlts ZW5dID0gZGlyc2VwOwotCQkJICAgIGZpbGJ1ZltsZW4rMV0gPSBOVUw7Ci0JCQl9Ci0JCSAgICB9 Ci0vKgotICBBdCB0aGlzIHBvaW50LCBiZWZvcmUganVzdCBkb2luZyBwYXJ0aWFsIGNvbXBsZXRp b24sIHdlIHNob3VsZCBsb29rIGZpcnN0IHRvCi0gIHNlZSBpZiB0aGUgZ2l2ZW4gZGlyZWN0b3J5 IGRvZXMgaW5kZWVkIGhhdmUgYW55IHN1YmRpcmVjdG9yaWVzIChkaXJmbGcpIG9yCi0gIGZpbGVz ICghZGlyZmxnKTsgaWYgaXQgZG9lc24ndCB3ZSBzaG91bGQgZG8gZnVsbCBjb21wbGV0aW9uLiAg T3RoZXJ3aXNlLCB0aGUKLSAgcmVzdWx0IGxvb2tzIGZ1bm55IHRvIHRoZSB1c2VyIGFuZCAiPyIg Ymxvd3MgdXAgdGhlIGNvbW1hbmQgZm9yIG5vIGdvb2QKLSAgcmVhc29uLgotKi8KLQkJICAgIHsK LQkJCWludCBmbGFncyA9IDA7Ci0JCQlmaWxidWZbbGVuKzFdID0gJyonOwotCQkJZmlsYnVmW2xl bisyXSA9IE5VTDsKLQkJCWlmIChkaXJmbGcpIGZsYWdzID0gWlhfRElST05MWTsKLQkJCWNoaWxk cmVuID0gbnp4cGFuZChmaWxidWYsZmxhZ3MpOwotCQkJZGVidWcoRjExMSwiY21pZmkgY2hpbGRy ZW4iLGZpbGJ1ZixjaGlsZHJlbik7Ci0JCQlmaWxidWZbbGVuKzFdID0gTlVMOwotCQkJbnp4cGFu ZChmaWxidWYsZmxhZ3MpOyAvKiBSZXN0b3JlIHByZXZpb3VzIGxpc3QgKi8KLQkJCWlmIChjaGls ZHJlbiA9PSAwKQotCQkJICBnb3RvIE5PU1VCRElSUzsKLQkJICAgIH0KLQkJICAgIGlmIChsZW4g KyAxID4gY2MpCi0JCSAgICAgIGsrKzsKLQkJfQotICAgICAgICAgICAgICAgIC8qIEFkZCBkb3Vi bGVxdW90ZXMgaWYgdGhlcmUgYXJlIHNwYWNlcyBpbiB0aGUgbmFtZSAqLwotCQl7Ci0JCSAgICBp bnQgeDsKLQkJICAgIGlmIChxZmxhZykgewotCQkJeCA9IChxZmxhZyA9PSAnfScpOyAvKiAob3Ig YnJhY2VzKSAqLwotCQkgICAgfSBlbHNlIHsKLQkJCXggPSAhZGJscXVvOwotCQkgICAgfQotCQkg ICAgaWYgKGZpbGJ1ZlswXSAhPSAnIicgJiYgZmlsYnVmWzBdICE9ICd7JykKLQkJICAgICAgayA9 IGRxdW90ZShmaWxidWYsQVRNQkwseCk7Ci0JCX0KLSNlbmRpZiAvKiBWTVMgKi8KLQkJZGVidWco RjExMSwiY21pZmkgUkVQQUlOVCBmaWxidWYiLGZpbGJ1ZixrKTsKLQkJaWYgKGsgPiAwKSB7CQkv KiBHb3QgbW9yZSBjaGFyYWN0ZXJzICovCi0JCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBSRVBBSU5U IGNjIiwiIixjYyk7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBSRVBBSU5UIHhjIiwiIix4Yyk7 Ci0JCSAgICBkZWJ1ZyhGMTEwLCJjbWlmaSBSRVBBSU5UIGJwLWNjIixicC1jYywwKTsKLQkJICAg IGRlYnVnKEYxMTAsImNtaWZpIFJFUEFJTlQgYnAteGMiLGJwLXhjLDApOwotCQkgICAgc3AgPSBm aWxidWYgKyBjYzsJLyogUG9pbnQgdG8gbmV3IG9uZXMgKi8KLQkJICAgIGlmIChxZmxhZyB8fCBz dHJuY21wKGZpbGJ1ZixicC1jYyxjYykpIHsgLyogUmVwYWludD8gKi8KLQkJCWludCB4OwotCQkJ eCA9IGNjOwotCQkJaWYgKHFmbGFnKSB4Kys7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgeDsgaSsrKSB7 Ci0JCQkgICAgY21kY2hhcmRlbCgpOyAvKiBCYWNrIHVwIG92ZXIgb2xkIHBhcnRpYWwgc3BlYyAq LwotCQkJICAgIGJwLS07Ci0JCQl9Ci0JCQlzcCA9IGZpbGJ1ZjsJLyogUG9pbnQgdG8gbmV3IHdv cmQgc3RhcnQgKi8KLQkJCWRlYnVnKEYxMTAsImNtaWZpIGVyYXNlIG9rIixzcCwwKTsKLQkJICAg IH0KLQkJICAgIGNjID0gazsJCS8qIEhvdyBtYW55IG5ldyBvbmVzIHdlIGp1c3QgZ290ICovCi0J CSAgICBwcmludGYoIiVzIixzcCk7CS8qIFByaW50IHRoZW0gKi8KLQkJICAgIHdoaWxlICgoKmJw KysgPSAqc3ArKykpIDsJLyogQ29weSB0byBjb21tYW5kIGJ1ZmZlciAqLwotCQkgICAgYnAtLTsJ ICAgIAkgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBOVUwgKi8KLQkJICAgIGRlYnVnKEYxMTAsImNt aWZpIHBhcnRpYWwgY21kYnVmIixjbWRidWYsMCk7Ci0JCSAgICBpZiAoc2V0YXRtKGZpbGJ1Ziww KSA8IDApIHsKLQkJCXByaW50ZigiP1BhcnRpYWwgbmFtZSB0b28gbG9uZ1xuIik7Ci0JCQlpZiAo bnApIGZyZWUobnApOwotCQkJcmV0dXJuKC05KTsKLQkJICAgIH0KLQkJICAgIGRlYnVnKEYxMTEs ImNtaWZpIHBhcnRpYWwgYXRtYnVmIixhdG1idWYsY2MpOwotCQkgICAgKnhwID0gYXRtYnVmOwot CQl9Ci0jZW5kaWYgLyogTk9QQVJUSUFMICovCi0JCWJsZWVwKEJQX1dBUk4pOwotCSAgICB9IGVs c2UgewkJCS8qIFVuaXF1ZSwgY29tcGxldGUgaXQuICAqLwotI2lmbmRlZiBWTVMKLSNpZmRlZiBD S19UTVBESVIKLQkJLyogaXNkaXIoKSBmdW5jdGlvbiByZXF1aXJlZCBmb3IgdGhpcyEgKi8KLQkg ICAgICBOT1NVQkRJUlM6Ci0JCWRlYnVnKEYxMTEsImNtaWZpIHVuaXF1ZSIsZmlsYnVmLGNoaWxk cmVuKTsKLQkJaWYgKGlzZGlyKGZpbGJ1ZikgJiYgY2hpbGRyZW4gPiAwKSB7Ci0JCSAgICBpbnQg bGVuOwotCQkgICAgbGVuID0gc3RybGVuKGZpbGJ1Zik7Ci0JCSAgICBpZiAobGVuID4gMCAmJiBs ZW4gPCBBVE1CTCAtIDEpIHsKLQkJCWlmIChmaWxidWZbbGVuLTFdICE9IGRpcnNlcCkgewotCQkJ ICAgIGZpbGJ1ZltsZW5dID0gZGlyc2VwOwotCQkJICAgIGZpbGJ1ZltsZW4rMV0gPSBOVUw7Ci0J CQl9Ci0JCSAgICB9Ci0JCSAgICBzcCA9IGZpbGJ1ZiArIGNjOwotCQkgICAgYmxlZXAoQlBfV0FS Tik7Ci0JCSAgICBwcmludGYoIiVzIixzcCk7Ci0JCSAgICBjYysrOwotCQkgICAgd2hpbGUgKCgq YnArKyA9ICpzcCsrKSkgOwotCQkgICAgYnAtLTsKLQkJICAgIGlmIChzZXRhdG0oZmlsYnVmLDAp IDwgMCkgewotCQkJcHJpbnRmKCI/RGlyZWN0b3J5IG5hbWUgdG9vIGxvbmdcbiIpOwotCQkJaWYg KG5wKSBmcmVlKG5wKTsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9Ci0JCSAgICBkZWJ1ZyhGMTEx LCJjbWlmaSBkaXJlY3RvcnkgYXRtYnVmIixhdG1idWYsY2MpOwotCQkgICAgKnhwID0gYXRtYnVm OwotCQl9IGVsc2UgewkJLyogTm90IGEgZGlyZWN0b3J5IG9yIGRpcmZsZyAqLwotI2VuZGlmIC8q IENLX1RNUERJUiAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2lmbmRlZiBWTVMJCQkJLyogVk1TIGRp ciBuYW1lcyBhcmUgc3BlY2lhbCAqLwotI2lmbmRlZiBkYXRhZ2VuZXJhbAkJCS8qIFZTIGRpcm5h bWVzIG11c3Qgbm90IGVuZCBpbiAiOiIgKi8KLQkJICAgIGlmIChkaXJmbGcpIHsKLQkJCWludCBs ZW47Ci0JCQlsZW4gPSBzdHJsZW4oZmlsYnVmKTsKLQkJCWlmIChsZW4gPiAwICYmIGxlbiA8IEFU TUJMIC0gMSkgewotCQkJICAgIGlmIChmaWxidWZbbGVuLTFdICE9IGRpcnNlcCkgewotCQkJCWZp bGJ1ZltsZW5dID0gZGlyc2VwOwotCQkJCWZpbGJ1ZltsZW4rMV0gPSBOVUw7Ci0JCQkgICAgfQot CQkJfQotCQkgICAgfQotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogVk1TICov Ci0JCSAgICBzcCA9IGZpbGJ1ZiArIGNjOwkvKiBQb2ludCBwYXN0IHdoYXQgdXNlciB0eXBlZC4g Ki8KLQkJICAgIHsKLQkJCWludCB4OwotCQkJaWYgKHFmbGFnKSB7Ci0JCQkgICAgeCA9IChxZmxh ZyA9PSAnfScpOwotCQkJfSBlbHNlIHsKLQkJCSAgICB4ID0gIWRibHF1bzsKLQkJCX0KLQkJCWlm IChmaWxidWZbMF0gIT0gJyInICYmIGZpbGJ1ZlswXSAhPSAneycpCi0JCQkgIGRxdW90ZShmaWxi dWYsQVRNQkwseCk7Ci0JCSAgICB9Ci0JCSAgICBpZiAocWZsYWcgfHwgc3RybmNtcChmaWxidWYs YnAtY2MsY2MpKSB7IC8qIFJlcGFpbnQ/ICovCi0JCQlpbnQgeDsKLQkJCXggPSBjYzsKLQkJCWlm IChxZmxhZykgeCsrOwotCQkJZm9yIChpID0gMDsgaSA8IHg7IGkrKykgewotCQkJICAgIGNtZGNo YXJkZWwoKTsgLyogQmFjayB1cCBvdmVyIG9sZCBwYXJ0aWFsIHNwZWMgKi8KLQkJCSAgICBicC0t OwotCQkJfQotCQkJc3AgPSBmaWxidWY7CS8qIFBvaW50IHRvIG5ldyB3b3JkIHN0YXJ0ICovCi0J CQlkZWJ1ZyhGMTExLCJjbWlmaSBhZnRlciBlcmFzZSBzcD0iLHNwLGNjKTsKLQkJICAgIH0KLQkJ ICAgIHByaW50ZigiJXMgIixzcCk7CS8qIFByaW50IHRoZSBjb21wbGV0ZWQgbmFtZS4gKi8KLSNp ZmRlZiBHRU1ET1MKLQkJICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIEdFTURPUyAqLwot CQkgICAgYWRkYnVmKHNwKTsJCS8qIEFkZCB0aGUgY2hhcmFjdGVycyB0byBjbWRidWYuICovCi0J CSAgICBpZiAoc2V0YXRtKGZpbGJ1ZiwwKSA8IDApIHsgLyogQW5kIHRvIGF0bWJ1Zi4gKi8KLQkJ CXByaW50ZigiP0NvbXBsZXRlZCBuYW1lIHRvbyBsb25nXG4iKTsKLQkJCWlmIChucCkgZnJlZShu cCk7Ci0JCQlyZXR1cm4oLTkpOwotCQkgICAgfQotCQkgICAgaW53b3JkID0gY21mbGdzID0gMDsK LQkJICAgICp4cCA9IGJyc3RyaXAoYXRtYnVmKTsgLyogUmV0dXJuIHBvaW50ZXIgdG8gYXRtYnVm LiAqLwotCQkgICAgaWYgKGRpcmZsZyAmJiAhaXNkaXIoKnhwKSkgewotCQkJcHJpbnRmKCI/Tm90 IGEgZGlyZWN0b3J5IC0gJXNcbiIsIGZpbGJ1Zik7Ci0JCQlpZiAobnApIGZyZWUobnApOwotCQkJ cmV0dXJuKC05KTsKLQkJICAgIH0KLQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0jaWZuZGVmIE5P TEFTVEZJTEUKLQkJICAgIG1ha2VzdHIoJmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsKLSNlbmRpZgkv KiBOT0xBU1RGSUxFICovCi0JCSAgICByZXR1cm4oMCk7Ci0jaWZuZGVmIFZNUwotI2lmZGVmIENL X1RNUERJUgotCQl9Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0jZW5kaWYgLyogVk1TICovCi0J ICAgIH0KLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgMzoJCQkvKiBRdWVzdGlvbiBtYXJrIC0gZmls ZSBtZW51IHdhbnRlZCAqLwotCSAgICBpZiAoKnhobHAgPT0gTlVMKQotCSAgICAgIHByaW50Zihk aXJmbGcgPyAiIERpcmVjdG9yeSBuYW1lIiA6ICIgSW5wdXQgZmlsZSBzcGVjaWZpY2F0aW9uIik7 Ci0JICAgIGVsc2UKLQkgICAgICBwcmludGYoIiAlcyIseGhscCk7Ci0jaWZkZWYgR0VNRE9TCi0J ICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIEdFTURPUyAqLwotCSAgICAvKiBJZiB1c2Vy IHR5cGVkIGFuIG9wZW5pbmcgcXVvdGUgb3IgYnJhY2UsIGp1c3Qgc2tpcCBwYXN0IGl0ICovCi0K LQkgICAgaWYgKCoqeHAgPT0gJyInIHx8ICoqeHAgPT0gJ3snKSB7Ci0JCSp4cCA9ICp4cCArIDE7 Ci0JCXhjLS07Ci0JCWNjLS07Ci0JICAgIH0KLSNpZm5kZWYgTk9TUEwKLQkgICAgaWYgKGYpIHsJ CQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KLSNpZmRlZiBET0NIS1ZB UgotCQljaGFyICpzID0gKnhwOwkJLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgdmFyaWFibGVzIGlu ICovCi0JCXdoaWxlICgqcykgewkJLyogdGhlIHN0cmluZyBhbmQgaWYgc28sIGV4cGFuZCB0aGVt ICovCi0JCSAgICBpZiAoY2hrdmFyKHMpKSB7Ci0jZW5kaWYgLyogRE9DSEtWQVIgKi8KLQkJCXpx ID0gYXR4YnVmOwotCQkJYXR4biA9IENNREJMOwotCQkJaWYgKCh4ID0gKCpmKSgqeHAsJnpxLCZh dHhuKSkgPCAwKSB7Ci0JCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKLQkJCSAgICByZXR1cm4oLTIp OwotCQkJfQotI2lmZGVmIERPQ0hLVkFSCi0JCSAgICAvKiByZWR1Y2UgY2MgYnkgbnVtYmVyIG9m IFxcIGNvbnN1bWVkIGJ5IGNvbnZlcnNpb24gKi8KLQkJICAgIC8qIGZ1bmN0aW9uIChuZWVkZWQg Zm9yIE9TLzIsIHdoZXJlIFwgaXMgcGF0aCBzZXBhcmF0b3IpICovCi0JCQljYyAtPSAoc3RybGVu KCp4cCkgLSBzdHJsZW4oYXR4YnVmKSk7Ci0jZW5kaWYgLyogRE9DSEtWQVIgKi8KLQkJCSp4cCA9 IGF0eGJ1ZjsKLSNpZmRlZiBET0NIS1ZBUgotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCSAgICBzKys7 Ci0JCX0KLSNlbmRpZiAvKiBET0NIS1ZBUiAqLwotCSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8K LQkgICAgZGVidWcoRjExMSwiY21pZmkgPyAqeHAsIGNjIiwqeHAsY2MpOwotCSAgICBzcCA9ICp4 cCArIGNjOwkJLyogSW5zZXJ0ICIqIiBhdCBlbmQgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotCSAg ICAqc3ArKyA9ICcrJzsJCS8qIEluc2VydCArLCB0aGUgREcgd2lsZCBjYXJkICovCi0jZWxzZQot CSAgICAqc3ArKyA9ICcqJzsKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotCSAgICAqc3AtLSA9 ICdcMCc7Ci0jaWZkZWYgR0VNRE9TCi0JICAgIGlmICghIHN0cmNocigqeHAsICcuJykpCS8qIGFi ZGUuZSAtPiBhYmNkZS5lKiAqLwotCSAgICAgIHN0cmNhdCgqeHAsICIuKiIpOwkvKiBhYmMgLT4g YWJjKi4qICovCi0jZW5kaWYgLyogR0VNRE9TICovCi0JICAgIGRlYnVnKEYxMTAsImNtaWZpID8g d2lsZCIsKnhwLDApOwotCi0JICAgIG56eG9wdHMgfD0gZGlyZmxnID8gWlhfRElST05MWSA6IChk ID8gMCA6IFpYX0ZJTE9OTFkpOwotCi0JICAgIGRlYnVnKEYxMDEsImNtaWZpIG1hdGNoZG90Iiwi IixtYXRjaGRvdCk7Ci0JICAgIGlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhfTUFUQ0hET1Q7 Ci0JICAgIGlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKLQkgICAgeSA9IG56 eHBhbmQoKnhwLG56eG9wdHMpOwotCSAgICBuZmlsZXMgPSB5OwotCSAgICAqc3AgPSAnXDAnOwot CSAgICBpZiAoeSA9PSAwKSB7Ci0JCWlmIChub21zZykgewotCQkgICAgcHJpbnRmKCI6ICVzXG4i LGF0bWJ1Zik7Ci0JCSAgICBwcmludGYoIiVzJXMiLGNtcHJvbSxjbWRidWYpOwotCQkgICAgZmZs dXNoKHN0ZG91dCk7Ci0JCSAgICBpZiAobnApIGZyZWUobnApOwotCQkgICAgcmV0dXJuKC0xKTsK LQkJfSBlbHNlIHsKLSNpZmRlZiBDS1JPT1QKLQkJICAgIGlmIChja3Jvb3RlcnIpCi0JCSAgICAg IHByaW50ZigiP09mZiBMaW1pdHM6ICVzXG4iLGF0bWJ1Zik7Ci0JCSAgICBlbHNlCi0jZW5kaWYg LyogQ0tST09UICovCi0JCSAgICAgIHByaW50ZigiP05vICVzIG1hdGNoIC0gJXNcbiIsCi0JCQkg ICAgIGRpcmZsZyA/ICJkaXJlY3RvcmllcyIgOiAiZmlsZXMiLCBhdG1idWYpOwotCQkgICAgaWYg KG5wKSBmcmVlKG5wKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkgICAgfSBlbHNlIGlmICh5 IDwgMCkgewotI2lmZGVmIENLUk9PVAotCQlpZiAoY2tyb290ZXJyKQotCQkgIHByaW50ZigiP09m ZiBMaW1pdHM6ICVzXG4iLGF0bWJ1Zik7Ci0JCWVsc2UKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQkJ ICBwcmludGYoIj9Ub28gbWFueSAlcyBtYXRjaCAtICVzXG4iLAotCQkJIGRpcmZsZyA/ICJkaXJl Y3RvcmllcyIgOiAiZmlsZXMiLCBhdG1idWYpOwotCQlpZiAobnApIGZyZWUobnApOwotCQlyZXR1 cm4oLTkpOwotCSAgICB9IGVsc2UgewotCQlwcmludGYoIiwgb25lIG9mIHRoZSBmb2xsb3dpbmc6 XG4iKTsKLQkJaWYgKGZpbGhlbHAoKGludCl5LCIiLCIiLDEsZGlyZmxnKSA8IDApIHsKLQkJICAg IGlmIChucCkgZnJlZShucCk7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0JICAgIH0KLQkgICAg cHJpbnRmKCIlcyVzIixjbXByb20sY21kYnVmKTsKLQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0JICAg IGJyZWFrOwotI2VuZGlmIC8qIE1BQyAqLwotCX0KLSNpZmRlZiBCU19ESVJTRVAKLSAgICAgICAg ZGlybmFtZmxnID0gMTsKLSAgICAgICAgeCA9IGd0d29yZCgwKTsgICAgICAgICAgICAgICAgICAv KiBObywgZ2V0IGEgd29yZCAqLwotCWRpcm5hbWZsZyA9IDA7Ci0jZWxzZQotICAgICAgICB4ID0g Z3R3b3JkKDApOyAgICAgICAgICAgICAgICAgIC8qIE5vLCBnZXQgYSB3b3JkICovCi0jZW5kaWYg LyogQlNfRElSU0VQICovCi0JKnhwID0gYXRtYnVmOwotICAgIH0KLX0KLQotLyogIEMgTSBGIEwg RCAgLS0gIFBhcnNlIGFuIGFyYml0cmFyeSBmaWVsZCAgKi8KLS8qCi0gIFJldHVybnM6Ci0gICAg LTMgaWYgbm8gaW5wdXQgcHJlc2VudCB3aGVuIHJlcXVpcmVkLAotICAgIC0yIGlmIGZpZWxkIHRv byBiaWcgZm9yIGJ1ZmZlciwKLSAgICAtMSBpZiByZXBhcnNlIG5lZWRlZCwKLSAgICAgMCBvdGhl cndpc2UsIHhwIHBvaW50aW5nIHRvIHN0cmluZyByZXN1bHQuCi0KLSAgTk9URTogR2xvYmFsIGZs YWcga2VlcGFsbGNoYXJzIHNheXMgd2hldGhlciB0aGlzIHJvdXRpbmUgc2hvdWxkIGJyZWFrIG9u IENSCi0gIG9yIExGOiBuZWVkZWQgZm9yIE1JTlBVVCB0YXJnZXRzIGFuZCBERUNMQVJFIGluaXRp YWxpemVycywgd2hlcmUgd2Ugd2FudCB0bwotICBrZWVwIGNvbnRyb2wgY2hhcmFjdGVycyBpZiB0 aGUgdXNlciBzcGVjaWZpZXMgdGhlbSAoTWFyY2ggMjAwMykuICBJdCBtaWdodAotICBoYXZlIGJl ZW4gYmV0dGVyIHRvIGNoYW5nZSB0aGUgY2FsbGluZyBzZXF1ZW5jZSBidXQgdGhhdCB3YXMgbm90 IHByYWN0aWNhbC4KLSovCi1pbnQKLWNtZmxkKHhobHAseGRlZix4cCxmKSBjaGFyICp4aGxwLCAq eGRlZiwgKip4cDsgeHhfc3RycCBmOyB7Ci0gICAgaW50IHgsIHhjOwotICAgIGNoYXIgKnpxOwot Ci0gICAgaW53b3JkID0gMDsJCQkJLyogSW5pdGlhbGl6ZSBjb3VudHMgJiBwb2ludGVycyAqLwot ICAgIGNjID0gMDsKLSAgICB4YyA9IDA7Ci0gICAgKnhwID0gIiI7Ci0KLSAgICBkZWJ1ZyhGMTEw LCJjbWZsZCB4ZGVmIDEiLHhkZWYsMCk7Ci0KLSAgICBpZiAoIXhobHApIHhobHAgPSAiIjsKLSAg ICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKLSAgICBja3N0cm5jcHkoY21kZWZhdWx0LHhkZWYsQ01E RUZBVUxUKTsgLyogQ29weSBkZWZhdWx0ICovCi0gICAgeGRlZiA9IGNtZGVmYXVsdDsKLQotICAg IGRlYnVnKEYxMTEsImNtZmxkIHhkZWYgMiIseGRlZixjbWZsZ3MpOwotICAgIGRlYnVnKEYxMTEs ImNtZmxkIGF0bWJ1ZiAxIixhdG1idWYseGMpOwotCi0gICAgaWYgKCh4ID0gY21mbGdzKSAhPSAx KSB7ICAgICAgICAgICAgLyogQWxyZWFkeSBjb25maXJtZWQ/ICovCi0gICAgICAgIHggPSBndHdv cmQoMCk7ICAgICAgICAgICAgICAgICAgLyogTm8sIGdldCBhIHdvcmQgKi8KLSAgICB9IGVsc2Ug ewotCWlmIChzZXRhdG0oeGRlZiwwKSA8IDApIHsJLyogSWYgc28sIHVzZSBkZWZhdWx0LCBpZiBh bnkuICovCi0JICAgIHByaW50ZigiP0RlZmF1bHQgdG9vIGxvbmdcbiIpOwotCSAgICByZXR1cm4o LTkpOwotCX0KLSAgICB9Ci0gICAgKnhwID0gYXRtYnVmOyAgICAgICAgICAgICAgICAgICAgICAg LyogUG9pbnQgdG8gcmVzdWx0LiAqLwotICAgIGRlYnVnKEYxMTEsImNtZmxkIGF0bWJ1ZiAyIixh dG1idWYsY21mbGdzKTsKLQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIHhjICs9IGNjOyAgICAg ICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhlIGNoYXJhY3RlcnMuICovCi0gICAgICAgIGRl YnVnKEYxMTEsImNtZmxkIGd0d29yZCIsYXRtYnVmLHhjKTsKLSAgICAgICAgZGVidWcoRjEwMSwi Y21mbGQgeCIsIiIseCk7Ci0gICAgICAgIHN3aXRjaCAoeCkgewotCSAgY2FzZSAtOToKLQkgICAg cHJpbnRmKCJDb21tYW5kIG9yIGZpZWxkIHRvbyBsb25nXG4iKTsKLQkgIGNhc2UgLTQ6CQkJLyog RU9GICovCi0JICBjYXNlIC0zOgkJCS8qIEVtcHR5LiAqLwotCSAgY2FzZSAtMjoJCQkvKiBPdXQg b2Ygc3BhY2UuICovCi0JICBjYXNlIC0xOgkJCS8qIFJlcGFyc2UgbmVlZGVkICovCi0JICAgIHJl dHVybih4KTsKLQkgIGNhc2UgMToJCQkvKiBDUiAqLwotCSAgY2FzZSAwOgkJCS8qIFNQICovCi0J ICAgIGRlYnVnKEYxMTEsImNtZmxkIDEiLGF0bWJ1Zix4Yyk7Ci0JICAgIGlmICh4YyA9PSAwKSB7 CQkvKiBJZiBubyBpbnB1dCwgcmV0dXJuIGRlZmF1bHQuICovCi0JCWlmIChzZXRhdG0oeGRlZiww KSA8IDApIHsKLQkJICAgIHByaW50ZigiP0RlZmF1bHQgdG9vIGxvbmdcbiIpOwotCQkgICAgcmV0 dXJuKC05KTsKLQkJfQotCSAgICB9Ci0JICAgICp4cCA9IGF0bWJ1ZjsJCS8qIFBvaW50IHRvIHdo YXQgd2UgZ290LiAqLwotCSAgICBkZWJ1ZyhGMTExLCJjbWZsZCAyIixhdG1idWYsKChmKSA/IDEg OiAwKSk7Ci0JICAgIGlmIChmKSB7CQkJLyogSWYgYSBjb252ZXJzaW9uIGZ1bmN0aW9uIGlzIGdp dmVuICovCi0JCXpxID0gYXR4YnVmOwkJLyogZW1wbG95IGl0IG5vdy4gKi8KLQkJYXR4biA9IENN REJMOwotCQlpZiAoKCpmKSgqeHAsJnpxLCZhdHhuKSA8IDApCi0JCSAgcmV0dXJuKC0yKTsKLQkJ ZGVidWcoRjExMSwiY21mbGQgMyIsYXR4YnVmLHhjKTsKLQkJLyogUmVwbGFjZSBieSBuZXcgdmFs dWUgLS0gZm9yIE1JTlBVVCBvbmx5IGtlZXAgYWxsIGNoYXJzICovCi0JCWlmIChzZXRhdG0oYXR4 YnVmLGtlZXBhbGxjaGFycyA/IDM6MSkgPCAwKSB7IC8qIDE2IE1hciAyMDAzICovCi0JCSAgICBw cmludGYoIlZhbHVlIHRvbyBsb25nXG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkJKnhw ID0gYXRtYnVmOwotCSAgICB9Ci0JICAgIGRlYnVnKEYxMTEsImNtZmxkIDQiLGF0bWJ1Zix4Yyk7 Ci0JICAgIGlmICgqKnhwID09IE5VTCkgewkJLyogSWYgdmFyaWFibGUgZXZhbHVhdGVzIHRvIG51 bGwgKi8KLQkJaWYgKHNldGF0bSh4ZGVmLDApIDwgMCkgewotCQkgICAgcHJpbnRmKCI/RGVmYXVs dCB0b28gbG9uZ1xuIik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0JCWlmICgqKnhwID09IE5V TCkgeCA9IC0zOyAvKiBJZiBzdGlsbCBlbXB0eSwgcmV0dXJuIC0zLiAqLwotCSAgICB9Ci0JICAg IGRlYnVnKEYxMTEsImNtZmxkIHJldHVybnMiLCp4cCx4KTsKLQkgICAgcmV0dXJuKHgpOwotCSAg Y2FzZSAyOgkJCS8qIEVTQyAqLwotCSAgICBpZiAoeGMgPT0gMCAmJiAqeGRlZikgewotCQlwcmlu dGYoIiVzICIseGRlZik7IC8qIElmIGF0IGJlZ2lubmluZyBvZiBmaWVsZCwgKi8KLSNpZmRlZiBH RU1ET1MKLQkJZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogR0VNRE9TICovCi0JCWFkZGJ1Zih4 ZGVmKTsJCS8qIFN1cHBseSBkZWZhdWx0LiAqLwotCQlpbndvcmQgPSBjbWZsZ3MgPSAwOwotCQlp ZiAoc2V0YXRtKHhkZWYsMCkgPCAwKSB7Ci0JCSAgICBwcmludGYoIj9EZWZhdWx0IHRvbyBsb25n XG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0gZWxzZQkJCS8qIFJldHVybiBhcyBpZiB3aG9s ZSBmaWVsZCAqLwotCQkgIHJldHVybigwKTsJCS8qIHR5cGVkLCBmb2xsb3dlZCBieSBzcGFjZS4g Ki8KLQkgICAgfSBlbHNlIHsKLQkJYmxlZXAoQlBfV0FSTik7Ci0JICAgIH0KLQkgICAgYnJlYWs7 Ci0JICBjYXNlIDM6CQkJLyogUXVlc3Rpb24gbWFyayAqLwotCSAgICBkZWJ1ZyhGMTEwLCJjbWZs ZCBRVUVTVElPTk1BUksiLGNtZGJ1ZiwwKTsKLQkgICAgaWYgKCp4aGxwID09IE5VTCkKLQkgICAg ICBwcmludGYoIiBQbGVhc2UgY29tcGxldGUgdGhpcyBmaWVsZCIpOwotCSAgICBlbHNlCi0JICAg ICAgcHJpbnRmKCIgJXMiLHhobHApOwotCSAgICBwcmludGYoIlxuJXMlcyIsY21wcm9tLGNtZGJ1 Zik7Ci0JICAgIGZmbHVzaChzdGRvdXQpOwotCSAgICBicmVhazsKLSAgICAgICAgfQotCWRlYnVn KEYxMTEsImNtZmxkIGd0d29yZCBBIHgiLGNtZGJ1Zix4KTsKLQl4ID0gZ3R3b3JkKDApOwotCWRl YnVnKEYxMTEsImNtZmxkIGd0d29yZCBCIHgiLGNtZGJ1Zix4KTsKLSAgICB9Ci19Ci0KLQotLyog IEMgTSBUIFggVCAgLS0gIEdldCBhIHRleHQgc3RyaW5nLCBpbmNsdWRpbmcgY29uZmlybWF0aW9u ICAqLwotCi0vKgotICBQcmludCBoZWxwIG1lc3NhZ2UgJ3hobHAnIGlmID8gdHlwZWQsIHN1cHBs eSBkZWZhdWx0ICd4ZGVmJyBpZiBudWxsCi0gIHN0cmluZyB0eXBlZC4gIFJldHVybnM6Ci0KLSAg IC0xIGlmIHJlcGFyc2UgbmVlZGVkIG9yIGJ1ZmZlciBvdmVyZmxvd3MuCi0gICAgMSBvdGhlcndp c2UuCi0KLSAgd2l0aCBjbWZsZ3Mgc2V0IHRvIHJldHVybiBjb2RlLCBhbmQgeHAgcG9pbnRpbmcg dG8gcmVzdWx0IHN0cmluZy4KLSovCi1pbnQKLWNtdHh0KHhobHAseGRlZix4cCxmKSBjaGFyICp4 aGxwOyBjaGFyICp4ZGVmOyBjaGFyICoqeHA7IHh4X3N0cnAgZjsgewotCi0gICAgaW50IHgsIGk7 Ci0gICAgY2hhciAqeHgsICp6cTsKLSAgICBzdGF0aWMgaW50IHhjOwotCi0gICAgaWYgKCF4aGxw KSB4aGxwID0gIiI7Ci0gICAgaWYgKCF4ZGVmKSB4ZGVmID0gIiI7Ci0KLSAgICBjbWZsZGZsZ3Mg PSAwOwotCi0gICAgY21kZWZhdWx0WzBdID0gTlVMOwotICAgIGlmICgqeGRlZikKLSAgICAgIGNr c3RybmNweShjbWRlZmF1bHQseGRlZixDTURFRkFVTFQpOyAvKiBDb3B5IGRlZmF1bHQgKi8KLSAg ICB4ZGVmID0gY21kZWZhdWx0OwotCi0gICAgZGVidWcoRjEwMSwiY210eHQgY21mbGdzIiwiIixj bWZsZ3MpOwotICAgIGlud29yZCA9IDA7CQkJCS8qIFN0YXJ0IGF0bWJ1ZiBjb3VudGVyIG9mZiBh dCAwICovCi0gICAgY2MgPSAwOwotICAgIGlmIChjbWZsZ3MgPT0gLTEpIHsgICAgICAgICAgICAg ICAgIC8qIElmIHJlcGFyc2luZywgKi8KLQkqeHAgPSBwcDsKLSAgICAgICAgeGMgPSAoaW50KXN0 cmxlbigqeHApOwkJLyogZ2V0IGJhY2sgdGhlIHRvdGFsIHRleHQgbGVuZ3RoLCAqLwotCWJwID0g KnhwOwkJCS8qIGFuZCBiYWNrIHVwIHRoZSBwb2ludGVycy4gKi8KLQlucCA9ICp4cDsKLQlwcCA9 ICp4cDsKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndp c2UsICovCi0JLyogZGVidWcoRjEwMCwiY210eHQ6IGZyZXNoIHN0YXJ0IiwiIiwwKTsgKi8KLSAg ICAgICAgKnhwID0gIiI7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFydCBmcmVzaC4gKi8K LSAgICAgICAgeGMgPSAwOwotICAgIH0KLSAgICAqYXRtYnVmID0gTlVMOyAgICAgICAgICAgICAg ICAgICAgICAvKiBBbmQgZW1wdHkgdGhlIGF0b20gYnVmZmVyLiAqLwotICAgIHJ0aW1lcigpOwkJ CQkvKiBSZXNldCB0aW1lciAqLwotICAgIGlmICgoeCA9IGNtZmxncykgIT0gMSkgewotCWludCBk b25lID0gMDsKLQl3aGlsZSAoIWRvbmUpIHsKLQkgICAgeCA9IGd0d29yZCgwKTsJCS8qIEdldCBm aXJzdCB3b3JkLiAqLwotCSAgICAqeHAgPSBwcDsJCQkvKiBTYXZlIHBvaW50ZXIgdG8gaXQuICov Ci0JICAgIC8qIGRlYnVnKEYxMTEsImNtdHh0OiIsKnhwLGNjKTsgKi8KLQkgICAgaWYgKHggPT0g LTEwKSB7Ci0JCWlmIChndGltZXIoKSA+IHRpbWVsaW1pdCkgewotCQkgICAgLyogaWYgKCFxdWll dCkgcHJpbnRmKCI/VGltZWQgb3V0XG4iKTsgKi8KLQkJICAgIHJldHVybih4KTsKLQkJfQotCSAg ICB9IGVsc2UKLQkgICAgICBkb25lID0gMTsKLQl9Ci0gICAgfQotICAgIHdoaWxlICgxKSB7CQkJ CS8qIExvb3AgZm9yIGVhY2ggd29yZCBpbiB0ZXh0LiAqLwotICAgICAgICB4YyArPSBjYzsgICAg ICAgICAgICAgICAgICAgICAgIC8qIENoYXIgY291bnQgZm9yIGFsbCB3b3Jkcy4gKi8KLSAgICAg ICAgLyogZGVidWcoRjExMSwiY210eHQgZ3R3b3JkIixhdG1idWYseGMpOyAqLwotICAgICAgICAv KiBkZWJ1ZyhGMTAxLCJjbXR4dCB4IiwiIix4KTsgKi8KLSAgICAgICAgc3dpdGNoICh4KSB7Ci0J ICBjYXNlIC0xMDoKLQkgICAgaWYgKGd0aW1lcigpID4gdGltZWxpbWl0KSB7Ci0jaWZkZWYgSUtT RAotICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7Ci0gICAgICAgICAgICAgICAg aWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbklLU0QgSURM RSBUSU1FT1VUOiAlZCBzZWNcclxuIiwgdGltZWxpbWl0KTsKLSAgICAgICAgICAgICAgICAgICAg ZG9leGl0KEdPT0RfRVhJVCwwKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAq LwotCQkvKiBpZiAoIXF1aWV0KSBwcmludGYoIj9UaW1lZCBvdXRcbiIpOyAqLwotCQlyZXR1cm4o LTEwKTsKLQkgICAgfSBlbHNlIHsKLQkJeCA9IGd0d29yZCgwKTsKLQkJY29udGludWU7Ci0JICAg IH0KLQkgIGNhc2UgLTk6CQkJLyogQnVmZmVyIG92ZXJmbG93ICovCi0JICAgIHByaW50ZigiQ29t bWFuZCBvciBmaWVsZCB0b28gbG9uZ1xuIik7Ci0JICBjYXNlIC00OgkJCS8qIEVPRiAqLwotI2lm ZGVmIE1BQwotCSAgY2FzZSAtMzoJCQkvKiBRdWl0L1RpbWVvdXQgKi8KLSNlbmRpZiAvKiBNQUMg Ki8KLQkgIGNhc2UgLTI6CQkJLyogT3ZlcmZsb3cgKi8KLQkgIGNhc2UgLTE6CQkJLyogRGVsZXRp b24gKi8KLQkgICAgcmV0dXJuKHgpOwotCSAgY2FzZSAwOgkJCS8qIFNwYWNlICovCi0JICAgIHhj Kys7CQkJLyogSnVzdCBjb3VudCBpdCAqLwotCSAgICBicmVhazsKLQkgIGNhc2UgMToJCQkvKiBD UiBvciBMRiAqLwotCSAgICBpZiAoeGMgPT0gMCkgKnhwID0geGRlZjsKLQkgICAgaWYgKGYpIHsJ CQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KLQkJY2hhciAqIHN4ID0g YXR4YnVmOwotCQl6cSA9IGF0eGJ1ZjsJCS8qIFBvaW50IHRvIHRoZSBleHBhbnNpb24gYnVmZmVy ICovCi0JCWF0eG4gPSBDTURCTDsJCS8qIHNwZWNpZnkgaXRzIGxlbmd0aCAqLwotCQkvKiBkZWJ1 ZyhGMTExLCJjbXR4dCBjYWxsaW5nICgqZikiLCp4cCxhdHhidWYpOyAqLwotCQlpZiAoKHggPSAo KmYpKCp4cCwmenEsJmF0eG4pKSA8IDApIHJldHVybigtMik7Ci0JCXN4ID0gYXR4YnVmOwotI2lm bmRlZiBDT01NRU5UCi0JCWNjID0gMDsKLQkJd2hpbGUgKCpzeCsrKSBjYysrOwkvKiAoZmFzdGVy IHRoYW4gY2FsbGluZyBzdHJsZW4pICovCi0jZWxzZQotCQljYyA9IChpbnQpc3RybGVuKGF0eGJ1 Zik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQkvKiBTaG91bGQgYmUgZXF1YWwgdG8gKENNREJM IC0gYXR4bikgYnV0IGlzbid0IGFsd2F5cy4gKi8KLQkJLyogV2h5IG5vdD8gKi8KLQkJaWYgKGNj IDwgMSkgewkJLyogTm90aGluZyBpbiBleHBhbnNpb24gYnVmZmVyPyAqLwotCQkgICAgKnhwID0g eGRlZjsJCS8qIFBvaW50IHRvIGRlZmF1bHQgc3RyaW5nIGluc3RlYWQuICovCi0jaWZuZGVmIENP TU1FTlQKLQkJICAgIHN4ID0geGRlZjsKLQkJICAgIHdoaWxlICgqc3grKykgY2MrKzsJLyogKGZh c3RlciB0aGFuIGNhbGxpbmcgc3RybGVuKSAqLwotI2Vsc2UKLQkJICAgIGNjID0gc3RybGVuKHhk ZWYpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJfSBlbHNlIHsJCS8qIEV4cGFuc2lvbiBmdW5j dGlvbiBnb3Qgc29tZXRoaW5nICovCi0JCSAgICAqeHAgPSBhdHhidWY7CS8qIHJldHVybiBwb2lu dGVyIHRvIGl0LiAqLwotCQl9Ci0JCWRlYnVnKEYxMTEsImNtdHh0ICgqZikiLCp4cCxjYyk7Ci0J ICAgIH0gZWxzZSB7CQkJLyogTm8gZXhwYW5zaW9uIGZ1bmN0aW9uICovCi0jaWZuZGVmIENPTU1F TlQKLQkJLyogQXZvaWQgYSBzdHJsZW4oKSBjYWxsICovCi0JCXh4ID0gKnhwOwotCQljYyA9IDA7 Ci0JCXdoaWxlICgqeHgrKykgY2MrKzsKLSNlbHNlCi0JCS8qIE5PISAgeGMgaXMgYXBwYXJlbnRs eSBub3QgYWx3YXlzIHNldCBhcHByb3ByaWF0ZWx5ICovCi0JCWNjID0geGM7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotCSAgICB9Ci0JICAgIHh4ID0gKnhwOwotI2lmZGVmIENPTU1FTlQKLQkgICAg Lyogc3RybGVuKCkgbm8gbG9uZ2VyIG5lZWRlZCAqLwotCSAgICBmb3IgKGkgPSAoaW50KXN0cmxl bih4eCkgLSAxOyBpID4gMDsgaS0tKQotI2Vsc2UKLQkgICAgZm9yIChpID0gY2MgLSAxOyBpID4g MDsgaS0tKQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgICBpZiAoeHhbaV0gIT0gU1ApCQkv KiBUcmltIHRyYWlsaW5nIGJsYW5rcyAqLwotCQlicmVhazsKLQkgICAgICBlbHNlCi0JCXh4W2ld ID0gTlVMOwotCSAgICByZXR1cm4oeCk7Ci0JICBjYXNlIDI6CQkJLyogRVNDICovCi0JICAgIGlm ICh4YyA9PSAwKSB7CQkvKiBOb3RoaW5nIHR5cGVkIHlldCAqLwotCQlpZiAoKnhkZWYpIHsJCS8q IEhhdmUgYSBkZWZhdWx0IGZvciB0aGlzIGZpZWxkPyAqLwotCQkgICAgcHJpbnRmKCIlcyAiLHhk ZWYpOwkvKiBZZXMsIHN1cHBseSBpdCAqLwotCQkgICAgaW53b3JkID0gY21mbGdzID0gMDsKLSNp ZmRlZiBHRU1ET1MKLQkJICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIEdFTURPUyAqLwot CQkgICAgY2MgPSBhZGRidWYoeGRlZik7Ci0JCX0gZWxzZSBibGVlcChCUF9XQVJOKTsJLyogTm8g ZGVmYXVsdCAqLwotCSAgICB9IGVsc2UgewkJCS8qIEFscmVhZHkgaW4gZmllbGQgKi8KLQkJaW50 IHg7IGNoYXIgKnA7Ci0JCXggPSBzdHJsZW4oYXRtYnVmKTsKLQkJaWYgKGNrc3RyY21wKGF0bWJ1 Zix4ZGVmLHgsMCkpIHsgICAgLyogTWF0Y2hlcyBkZWZhdWx0PyAqLwotCQkgICAgYmxlZXAoQlBf V0FSTik7CSAgICAgICAgICAgIC8qIE5vICovCi0JCX0gZWxzZSBpZiAoKGludClzdHJsZW4oeGRl ZikgPiB4KSB7IC8qIFllcyAqLwotCQkgICAgcCA9IHhkZWYgKyB4OwotCQkgICAgcHJpbnRmKCIl cyAiLCBwKTsKLSNpZmRlZiBHRU1ET1MKLQkJICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8q IEdFTURPUyAqLwotCQkgICAgYWRkYnVmKHApOwotCQkgICAgaW53b3JkID0gY21mbGdzID0gMDsK LQkJICAgIGRlYnVnKEYxMTAsImNtdHh0OiBhZGRidWYiLGNtZGJ1ZiwwKTsKLQkJfSBlbHNlIHsK LQkJICAgIGJsZWVwKEJQX1dBUk4pOwotCQl9Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNl IDM6CQkJLyogUXVlc3Rpb24gTWFyayAqLwotCSAgICBpZiAoKnhobHAgPT0gTlVMKQotCSAgICAg IHByaW50ZigiIFRleHQgc3RyaW5nIik7Ci0JICAgIGVsc2UKLQkgICAgICBwcmludGYoIiAlcyIs eGhscCk7Ci0JICAgIHByaW50ZigiXG4lcyVzIixjbXByb20sY21kYnVmKTsKLQkgICAgZmZsdXNo KHN0ZG91dCk7Ci0JICAgIGJyZWFrOwotCSAgZGVmYXVsdDoKLQkgICAgcHJpbnRmKCI/VW5leHBl Y3RlZCByZXR1cm4gY29kZSBmcm9tIGd0d29yZCgpIC0gJWRcbiIseCk7Ci0JICAgIHJldHVybigt Mik7Ci0gICAgICAgIH0KLSAgICAgICAgeCA9IGd0d29yZCgwKTsKLSAgICB9Ci19Ci0KLS8qICBD IE0gSyBFIFkgIC0tICBQYXJzZSBhIGtleXdvcmQgICovCi0KLS8qCi0gQ2FsbCB3aXRoOgotICAg dGFibGUgICAgLS0gIGtleXdvcmQgdGFibGUsIGluICdzdHJ1Y3Qga2V5dGFiJyBmb3JtYXQ7Ci0g ICBuICAgICAgICAtLSAgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGFibGU7Ci0gICB4aGxwICAgICAt LSAgcG9pbnRlciB0byBoZWxwIHN0cmluZzsKLSAgIHhkZWYgICAgIC0tICBwb2ludGVyIHRvIGRl ZmF1bHQga2V5d29yZDsKLSAgIGYgICAgICAgIC0tICBzdHJpbmcgcHJlcHJvY2Vzc2luZyBmdW5j dGlvbiAoZS5nLiB0byBldmFsdWF0ZSB2YXJpYWJsZXMpCi0gICBwbXNnICAgICAtLSAgMCA9IGRv bid0IHByaW50IGVycm9yIG1lc3NhZ2VzCi0gICAgICAgICAgICAgICAgMSA9IHByaW50IGVycm9y IG1lc3NhZ2VzCi0gICAgICAgICAgICAgICAgMiA9IGluY2x1ZGUgQ01fSExQIGtleXdvcmRzIGV2 ZW4gaWYgaW52aXNpYmxlCi0gICAgICAgICAgICAgICAgMyA9IDErMgotICAgICAgICAgICAgICAg IDQgPSBwYXJzZSBhIHN3aXRjaCAoa2V5d29yZCBwb3NzaWJseSBlbmRpbmcgaW4gOiBvciA9KQot ICAgICAgICAgICAgICAgIDggPSBkb24ndCBzdHJpcCBjb21tZW50cyAodXNlZCwgZS5nLiwgZm9y ICJoZWxwICMiKQotIFJldHVybnM6Ci0gICAtMyAgICAgICAtLSAgbm8gaW5wdXQgc3VwcGxpZWQg YW5kIG5vIGRlZmF1bHQgYXZhaWxhYmxlCi0gICAtMiAgICAgICAtLSAgaW5wdXQgZG9lc24ndCB1 bmlxdWVseSBtYXRjaCBhIGtleXdvcmQgaW4gdGhlIHRhYmxlCi0gICAtMSAgICAgICAtLSAgdXNl ciBkZWxldGVkIHRvbyBtdWNoLCBjb21tYW5kIHJlcGFyc2UgcmVxdWlyZWQKLSAgICBuID49IDAg IC0tICB2YWx1ZSBhc3NvY2lhdGVkIHdpdGgga2V5d29yZAotKi8KLQotLyoKLSAgRnJvbnQgZW5k cyBmb3IgY21rZXkyKCk6IAotICBjbWtleSgpICAtIFRoZSBub3JtYWwga2V5d29yZCBwYXJzZXIK LSAgY21rZXl4KCkgLSBMaWtlIGNta2V5KCkgYnV0IHN1cHByZXNzZXMgZXJyb3IgbWVzc2FnZXMK LSAgY21zd2koKSAgLSBTd2l0Y2ggcGFyc2VyCi0qLwotaW50Ci1jbWtleSh0YWJsZSxuLHhobHAs eGRlZixmKQotLyogY21rZXkgKi8gIHN0cnVjdCBrZXl0YWIgdGFibGVbXTsgaW50IG47IGNoYXIg KnhobHAsICp4ZGVmOyB4eF9zdHJwIGY7IHsKLSAgICByZXR1cm4oY21rZXkyKHRhYmxlLG4seGhs cCx4ZGVmLCIiLGYsMSkpOwotfQotaW50Ci1jbWtleXgodGFibGUsbix4aGxwLHhkZWYsZikKLS8q IGNta2V5eCAqLyAgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBpbnQgbjsgY2hhciAqeGhscCwgKnhk ZWY7IHh4X3N0cnAgZjsgewotICAgIHJldHVybihjbWtleTIodGFibGUsbix4aGxwLHhkZWYsIiIs ZiwwKSk7Ci19Ci1pbnQKLWNtc3dpKHRhYmxlLG4seGhscCx4ZGVmLGYpCi0vKiBjbXN3aSAqLyAg c3RydWN0IGtleXRhYiB0YWJsZVtdOyBpbnQgbjsgY2hhciAqeGhscCwgKnhkZWY7IHh4X3N0cnAg ZjsgewotICAgIHJldHVybihjbWtleTIodGFibGUsbix4aGxwLHhkZWYsIiIsZiw0KSk7Ci19Ci0K LWludAotY21rZXkyKHRhYmxlLG4seGhscCx4ZGVmLHRvayxmLHBtc2cpCi0gICAgc3RydWN0IGtl eXRhYiB0YWJsZVtdOwotICAgIGludCBuOwotICAgIGNoYXIgKnhobHAsICp4ZGVmOwotICAgIGNo YXIgKnRvazsKLSAgICB4eF9zdHJwIGY7Ci0gICAgaW50IHBtc2c7Ci17IC8qIGNta2V5MiAqLwot ICAgIGV4dGVybiBpbnQgaGF2ZXRva2VuOwotICAgIGludCBpLCB0bCwgeSwgeiA9IDAsIHp6LCB4 Yywgd29yZGxlbiA9IDAsIGNtc3dpdGNoOwotICAgIGNoYXIgKnhwLCAqenE7Ci0KLSAgICBpZiAo IXhobHApIHhobHAgPSAiIjsKLSAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKLQotICAgIGNtZmxk ZmxncyA9IDA7Ci0gICAgaWYgKCF0YWJsZSkgewotCXByaW50ZigiP0tleXdvcmQgdGFibGUgbWlz c2luZ1xuIik7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgdGwgPSAoaW50KXN0cmxlbih0b2sp OwotCi0gICAgaW53b3JkID0geGMgPSBjYyA9IDA7CQkvKiBDbGVhciBjaGFyYWN0ZXIgY291bnRl cnMuICovCi0gICAgY21zd2l0Y2ggPSBwbXNnICYgNDsJCS8qIEZsYWcgZm9yIHBhcnNpbmcgYSBz d2l0Y2ggKi8KLQotICAgIGRlYnVnKEYxMDEsImNta2V5OiBwbXNnIiwiIixwbXNnKTsKLSAgICBk ZWJ1ZyhGMTAxLCJjbWtleTogY21mbGdzIiwiIixjbWZsZ3MpOwotICAgIGRlYnVnKEYxMDEsImNt a2V5OiBjbXN3aXRjaCIsIiIsY21zd2l0Y2gpOwotICAgIC8qIGRlYnVnKEYxMDEsImNta2V5OiBj bWRidWYiLCIiLGNtZGJ1Zik7Ki8KLQotICAgIHBwdm5hbWJ1ZlswXSA9IE5VTDsKLQotICAgIGlm ICgoenogPSBjbWZsZ3MpID09IDEpIHsJCS8qIENvbW1hbmQgYWxyZWFkeSBlbnRlcmVkPyAqLwot CWlmIChzZXRhdG0oeGRlZiwwKSA8IDApIHsJLyogWWVzLCBjb3B5IGRlZmF1bHQgaW50byBhdG9t IGJ1ZiAqLwotCSAgICBwcmludGYoIj9EZWZhdWx0IHRvbyBsb25nXG4iKTsKLQkgICAgcmV0dXJu KC05KTsKLQl9Ci0gICAgICAgIHJ0aW1lcigpOwkJCSAvKiBSZXNldCB0aW1lciAqLwotICAgIH0g ZWxzZSB7CQkJCSAvKiBPdGhlcndpc2UgZ2V0IGEgY29tbWFuZCB3b3JkICovCi0gICAgICAgIHJ0 aW1lcigpOwkJCSAvKiBSZXNldCB0aW1lciAqLwotCWlmIChwbXNnICYgOCkJCQkgLyogOCBpcyBm b3IgcGFyc2luZyBIRUxQIHRva2VucyAqLwotCSAgenogPSBndHdvcmQoNCk7Ci0JZWxzZQotCSAg enogPSBndHdvcmQoKHBtc2cgPT0gNCkgPyAxIDogMCk7Ci0gICAgfQotCi0gICAgZGVidWcoRjEw MSwiY21rZXkgdGFibGUgbGVuZ3RoIiwiIixuKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWtleSBjbWZs Z3MiLCIiLGNtZmxncyk7Ci0gICAgZGVidWcoRjEwMSwiY21rZXkgY2MiLCIiLGNjKTsKLQotICAg IHdoaWxlICgxKSB7Ci0JeGMgKz0gY2M7Ci0JZGVidWcoRjExMSwiY21rZXkgZ3R3b3JkIHhjIixh dG1idWYseGMpOwotCWRlYnVnKEYxMDEsImNta2V5IGd0d29yZCB6eiIsIiIsenopOwotCi0Jc3dp dGNoICh6eikgewotCSAgY2FzZSAtMTA6CQkJLyogVGltZW91dCAqLwotCSAgICBpZiAoZ3RpbWVy KCkgPCB0aW1lbGltaXQpIHsKLQkJaWYgKHBtc2cgJiA4KQkJLyogOCBpcyBmb3IgcGFyc2luZyBI RUxQIHRva2VucyAqLwotCQkgIHp6ID0gZ3R3b3JkKDQpOwotCQllbHNlCi0JCSAgenogPSBndHdv cmQoKHBtc2cgPT0gNCkgPyAxIDogMCk7Ci0JCWNvbnRpbnVlOwotCSAgICB9IGVsc2UgewotI2lm ZGVmIElLU0QKLSAgICAgICAgICAgICAgICBleHRlcm4gaW50IGluc2VydmVyOwotICAgICAgICAg ICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxyXG5J S1NEIElETEUgVElNRU9VVDogJWQgc2VjXHJcbiIsIHRpbWVsaW1pdCk7Ci0gICAgICAgICAgICAg ICAgICAgIGRvZXhpdChHT09EX0VYSVQsMCk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8q IElLU0QgKi8KLQkJcmV0dXJuKC0xMCk7Ci0gICAgICAgICAgICB9Ci0JICBjYXNlIC01OgotCSAg ICByZXR1cm4oY21mbGdzID0gMCk7Ci0JICBjYXNlIC05OgotCSAgICBwcmludGYoIkNvbW1hbmQg b3IgZmllbGQgdG9vIGxvbmdcbiIpOwotCSAgY2FzZSAtNDoJCQkvKiBFT0YgKi8KLQkgIGNhc2Ug LTM6CQkJLyogTnVsbCBDb21tYW5kL1F1aXQvVGltZW91dCAqLwotCSAgY2FzZSAtMjoJCQkvKiBC dWZmZXIgb3ZlcmZsb3cgKi8KLQkgIGNhc2UgLTE6CQkJLyogT3IgdXNlciBkaWQgc29tZSBkZWxl dGluZy4gKi8KLQkgICAgcmV0dXJuKGNtZmxncyA9IHp6KTsKLQotCi0JICBjYXNlIDE6CQkJLyog Q1IgKi8KLQkgIGNhc2UgMDoJCQkvKiBVc2VyIHRlcm1pbmF0ZWQgd29yZCB3aXRoIHNwYWNlICov Ci0JICBjYXNlIDQ6CQkJLyogb3Igc3dpdGNoIGVuZGluZyBpbiA6IG9yID0gKi8KLQkgICAgd29y ZGxlbiA9IGNjOwkJLyogTGVuZ3RoIGlmIG5vIGNvbnZlcnNpb24gKi8KLQkgICAgaWYgKGNjID09 IDApIHsJCS8qIFN1cHBseSBkZWZhdWx0IGlmIHdlIGdvdCBub3RoaW5nICovCi0JCWlmICgod29y ZGxlbiA9IHNldGF0bSh4ZGVmLCh6eiA9PSA0KSA/IDIgOiAwKSkgPCAwKSB7Ci0JCSAgICBwcmlu dGYoIj9EZWZhdWx0IHRvbyBsb25nXG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkgICAg fQotCSAgICBpZiAoenogPT0gMSAmJiBjYyA9PSAwKQkvKiBSZXF1aXJlZCBmaWVsZCBtaXNzaW5n ICovCi0JICAgICAgcmV0dXJuKC0zKTsKLQotCSAgICBpZiAoZikgewkJCS8qIElmIGEgY29udmVy c2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLwotCQljaGFyICogcDI7Ci0JCXpxID0gYXR4YnVmOwkJ LyogYXBwbHkgaXQgKi8KLQkJcDIgPSBhdHhidWY7Ci0JCWF0eG4gPSBDTURCTDsKLQkJaWYgKCgq ZikoYXRtYnVmLCZ6cSwmYXR4bikgPCAwKSByZXR1cm4oLTIpOwotCQlkZWJ1ZyhGMTEwLCJjbWtl eSBhdHhidWYgYWZ0ZXIgKmYiLGF0eGJ1ZiwwKTsKLQkJaWYgKCEqcDIpCQkvKiBTdXBwbHkgZGVm YXVsdCBpZiB3ZSBnb3Qgbm90aGluZyAqLwotCQkgIHAyID0geGRlZjsKLQkJY2tzdHJuY3B5KHBw dm5hbWJ1ZixhdG1idWYsUFBWTEVOKTsKLQkJaWYgKCh3b3JkbGVuID0gc2V0YXRtKHAyLCh6eiA9 PSA0KSA/IDIgOiAwKSkgPCAwKSB7Ci0JCSAgICBwcmludGYoIkV2YWx1YXRlZCBrZXl3b3JkIHRv byBsb25nXG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLSNpZmRlZiBNX1VOR1cKLQkJLyoK LQkJICBUaGlzIGJpdCBsZXRzIHVzIHNhdmUgbW9yZSB0aGFuIG9uZSAid29yZCIuCi0JCSAgRm9y IGV4YW1wbGUsICJkZWZpbmUgXCV4IGVjaG8gb25lIHR3byB0aHJlZSIsICJcJXgiLgotCQkgIEl0 IHdvcmtzIHRvbywgYnV0IGl0IGJyZWFrcyBsYWJlbHMsIGFuZCB0aGVyZWZvcmUKLQkJICBXSElM RSBhbmQgRk9SIGxvb3BzLCBldGMuCi0JCSovCi0JCWlmIChwMlt3b3JkbGVuXSA+PSBTUCkgewot CQkgICAgcDIgKz0gd29yZGxlbjsKLQkJICAgIHdoaWxlICgqcDIgPT0gU1ApIHAyKys7Ci0JCSAg ICBpZiAoKnAyKSB7Ci0JCQl1bmd3b3JkKCk7Ci0JCQlwcCA9IHAyOwotCQkgICAgfQotCQl9Ci0j ZW5kaWYgLyogTV9VTkdXICovCi0JICAgIH0KLSNpZmRlZiBDT01NRU5UCQkJCS8qIF5eXiAqLwot CSAgICBpZiAoY21zd2l0Y2ggJiYgKmF0bWJ1ZiAhPSAnLycpIHsKLQkJaWYgKHBtc2cgJiAxKSB7 Ci0JCSAgICBibGVlcChCUF9GQUlMKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm90 IGEgc3dpdGNoIC0gJXNcbiIsYXRtYnVmKTsKLQkJfQotCQljbWZsZ3MgPSAtMjsKLQkJcmV0dXJu KC02KTsKLQkgICAgfQotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQkgICAgaWYgKGNtc3dpdGNoKSB7 Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgd29yZGxlbjsgaSsrKSB7Ci0JCSAgICBpZiAo YXRtYnVmW2ldID09ICc6JyB8fCBhdG1idWZbaV0gPT0gJz0nKSB7Ci0JCQlicmtjaGFyID0gYXRt YnVmW2ldOwotCQkJYXRtYnVmW2ldID0gTlVMOwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkg ICAgfQotCi0jaWZkZWYgVE9LUFJFQ0hFQ0sKLS8qIFRoaXMgd2FzIGFuIGVmZmVjdGl2ZSBvcHRp bWl6YXRpb24gYnV0IGl0IGJyZWFrcyBzb21ldGltZXMgb24gbGFiZWxzLiAqLwotCSAgICBpZiAo dGwgJiYgIWlzYWxwaGEoYXRtYnVmWzBdKSkgeyAvKiBQcmVjaGVjayBmb3IgdG9rZW4gKi8KLQkJ Zm9yIChpID0gMDsgaSA8IHRsOyBpKyspIHsgLyogU2F2ZSBmdW5jdGlvbiBjYWxsIHRvIGNrc3Ry Y2hyICovCi0JCSAgICBpZiAodG9rW2ldID09IGF0bWJ1ZlswXSkgewotCQkJZGVidWcoRjAwMCwi Y21rZXkgdG9rZW46IixhdG1idWYsKmF0bWJ1Zik7Ci0JCQl1bmd3b3JkKCk7ICAvKiBQdXQgYmFj ayB0aGUgZm9sbG93aW5nIHdvcmQgKi8KLQkJCXJldHVybigtNSk7IC8qIFNwZWNpYWwgcmV0dXJu IGNvZGUgZm9yIHRva2VuICovCi0JCSAgICB9Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIFRPS1BS RUNIRUNLICovCi0KLQkgICAgeSA9IGxvb2t1cCh0YWJsZSxhdG1idWYsbiwmeik7IC8qIExvb2sg dXAgd29yZCBpbiB0aGUgdGFibGUgKi8KLQkgICAgZGVidWcoRjExMSwiY21rZXkgbG9va3VwIixh dG1idWYseSk7Ci0JICAgIGRlYnVnKEYxMDEsImNta2V5IHp6IiwiIix6eik7Ci0JICAgIGRlYnVn KEYxMDEsImNta2V5IGNtZmxncyIsIiIsY21mbGdzKTsKLQkgICAgZGVidWcoRjEwMSwiY21rZXkg Y3JmbGFnIiwiIixjcmZsYWcpOwotCSAgICBzd2l0Y2ggKHkpIHsKLQkgICAgICBjYXNlIC0zOgkJ CS8qIE5vdGhpbmcgdG8gbG9vayB1cCAqLwotCQlicmVhazsKLQkgICAgICBjYXNlIC0yOgkJCS8q IEFtYmlndW91cyAqLwotCQljbWZsZ3MgPSAtMjsKLQkJaWYgKHBtc2cgJiAxKSB7Ci0JCSAgICBi bGVlcChCUF9GQUlMKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QW1iaWd1b3VzIC0g JXNcbiIsYXRtYnVmKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkJcmV0dXJuKC0yKTsKLQkg ICAgICBjYXNlIC0xOgkJCS8qIE5vdCBmb3VuZCBhdCBhbGwgKi8KLSNpZm5kZWYgVE9LUFJFQ0hF Q0sKLQkJaWYgKHRsKSB7Ci0JCSAgICBmb3IgKGkgPSAwOyBpIDwgdGw7IGkrKykgLyogQ2hlY2sg Zm9yIHRva2VuICovCi0JCSAgICAgIGlmICh0b2tbaV0gPT0gKmF0bWJ1ZikgeyAvKiBHb3Qgb25l ICovCi0JCQkgIGRlYnVnKEYwMDAsImNta2V5IHRva2VuOiIsYXRtYnVmLCphdG1idWYpOwotCQkJ ICB1bmd3b3JkKCk7ICAvKiBQdXQgYmFjayB0aGUgZm9sbG93aW5nIHdvcmQgKi8KLQkJCSAgcmV0 dXJuKC01KTsgLyogU3BlY2lhbCByZXR1cm4gY29kZSBmb3IgdG9rZW4gKi8KLQkJICAgICAgfQot CQl9Ci0jZW5kaWYgLyogVE9LUFJFQ0hFQ0sgKi8KLQotCQlpZiAodGwgPT0gMCkgewkJLyogTm8g dG9rZW5zIHdlcmUgaW5jbHVkZWQgKi8KLSNpZmRlZiBPUzIKLQkJICAgIC8qIEluIE9TLzIgYW5k IFdpbmRvd3MsIGFsbG93IGZvciBhIGRpc2sgbGV0dGVyIGxpa2UgRE9TICovCi0JCSAgICBpZiAo aXNhbHBoYSgqYXRtYnVmKSAmJiAqKGF0bWJ1ZisxKSA9PSAnOicpCi0JCSAgICAgIHJldHVybigt Nyk7Ci0jZW5kaWYgLyogT1MyICovCi0JCSAgICBpZiAoKHBtc2cgJiAxKSAmJiAhcXVpZXQpIHsK LQkJCWJsZWVwKEJQX0ZBSUwpOwotCQkJcHJpbnRmKCI/Tm8ga2V5d29yZHMgbWF0Y2ggLSAlc1xu IixhdG1idWYpOyAvKiBjbWtleSAqLwotCQkgICAgfQotCQkgICAgcmV0dXJuKGNtZmxncyA9IC05 KTsKLQkJfSBlbHNlIHsKLQkJICAgIGlmIChjbWZsZ3MgPT0gMSB8fCBjbXN3aXRjaCkgLyogY21r ZXkyIG9yIGNtc3dpICovCi0JCSAgICAgIHJldHVybihjbWZsZ3MgPSAtNik7Ci0JCSAgICBlbHNl Ci0JCSAgICAgIHJldHVybihjbWZsZ3MgPSAtMik7Ci0JCSAgICAvKiBUaGUgLTYgY29kZSBpcyB0 byBsZXQgY2FsbGVyIHRyeSBhbm90aGVyIHRhYmxlICovCi0JCX0KLQkJYnJlYWs7Ci0JICAgICAg ZGVmYXVsdDoKLSNpZmRlZiBDS19SRUNBTEwKLQkJaWYgKHRlc3QodGFibGVbel0uZmxncyxDTV9O T1IpKSBub19yZWNhbGwgPSAxOwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotCQlpZiAoenogPT0g NCkKLQkJICBzd2FyZyA9IDE7Ci0JCWNta3dmbGdzID0gdGFibGVbel0uZmxnczsKLQkJYnJlYWs7 Ci0JICAgIH0KLQkgICAgcmV0dXJuKHkpOwotCi0JICBjYXNlIDI6CQkJLyogVXNlciB0ZXJtaW5h dGVkIHdvcmQgd2l0aCBFU0MgKi8KLQkgICAgZGVidWcoRjEwMSwiY21rZXkgRXNjIGNjIiwiIixj Yyk7Ci0gICAgICAgICAgICBpZiAoY2MgPT0gMCkgewotCQlpZiAoKnhkZWYgIT0gTlVMKSB7ICAg ICAvKiBOb3RoaW5nIGluIGF0bWJ1ZiAqLwotCQkgICAgcHJpbnRmKCIlcyAiLHhkZWYpOyAvKiBT dXBwbHkgZGVmYXVsdCBpZiBhbnkgKi8KLSNpZmRlZiBHRU1ET1MKLQkJICAgIGZmbHVzaChzdGRv dXQpOwotI2VuZGlmIC8qIEdFTURPUyAqLwotCQkgICAgYWRkYnVmKHhkZWYpOwotCQkgICAgaWYg KHNldGF0bSh4ZGVmLDApIDwgMCkgewotCQkJcHJpbnRmKCI/RGVmYXVsdCB0b28gbG9uZ1xuIik7 Ci0JCQlyZXR1cm4oLTkpOwotCQkgICAgfQotCQkgICAgaW53b3JkID0gY21mbGdzID0gMDsKLQkJ ICAgIGRlYnVnKEYxMTEsImNta2V5OiBkZWZhdWx0IixhdG1idWYsY2MpOwotCQl9IGVsc2Ugewot CQkgICAgZGVidWcoRjEwMSwiY21rZXkgRXNjIHBtc2ciLCIiLDApOwotI2lmZGVmIENPTU1FTlQK LS8qCi0gIENoYWluZWQgRkRCcy4uLiAgVGhlIGlkZWEgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIG1p Z2h0IG5vdCBoYXZlIGEgZGVmYXVsdCwKLSAgYnV0IHRoZSBuZXh0IG9uZSBtaWdodC4gIEJ1dCBp ZiBpdCBkb2Vzbid0LCB0aGVyZSBpcyBubyB3YXkgdG8gY29tZSBiYWNrIHRvCi0gIHRoaXMgb25l LiAgVG8gYmUgcmV2aXNpdGVkIGxhdGVyLi4uCi0qLwotCQkgICAgaWYgKHhjbWZkYikJCS8qIENo YWluZWQgZmRiIC0tIHRyeSBuZXh0IG9uZSAqLwotCQkgICAgICByZXR1cm4oLTMpOwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQkJICAgIGlmIChwbXNnICYgKDF8NCkpIHsJLyogU28gZm9yIG5vdyBq dXN0IGJlZXAgKi8KLQkJCWJsZWVwKEJQX1dBUk4pOwotCQkgICAgfQotCQkgICAgYnJlYWs7Ci0J CX0KLSAgICAgICAgICAgIH0KLQkgICAgaWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVu Y3Rpb24gaXMgZ2l2ZW4gKi8KLQkJY2hhciAqIHBwOwotCQl6cSA9IGF0eGJ1ZjsJCS8qIGFwcGx5 IGl0ICovCi0JCXBwID0gYXR4YnVmOwotCQlhdHhuID0gQ01EQkw7Ci0JCWlmICgoKmYpKGF0bWJ1 ZiwmenEsJmF0eG4pIDwgMCkKLQkJICByZXR1cm4oLTIpOwotCQlpZiAoISpwcCkKLQkJICBwcCA9 IHhkZWY7Ci0JCWlmIChzZXRhdG0ocHAsMCkgPCAwKSB7Ci0JCSAgICBwcmludGYoIkV2YWx1YXRl ZCBrZXl3b3JkIHRvbyBsb25nXG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkgICAgfQot CSAgICB5ID0gbG9va3VwKHRhYmxlLGF0bWJ1ZixuLCZ6KTsgLyogU29tZXRoaW5nIGluIGF0bWJ1 ZiAqLwotCSAgICBkZWJ1ZyhGMTExLCJjbWtleSBsb29rdXAgeSIsYXRtYnVmLHkpOwotCSAgICBk ZWJ1ZyhGMTExLCJjbWtleSBsb29rdXAgeiIsYXRtYnVmLHopOwotCSAgICBpZiAoeSA9PSAtMiAm JiB6ID49IDAgJiYgeiA8IG4pIHsgLyogQW1iaWd1b3VzICovCi0jaWZuZGVmIE5PUEFSVElBTAot CQlpbnQgaiwgaywgbGVuID0gOTk5OTsJLyogRG8gcGFydGlhbCBjb21wbGV0aW9uICovCi0JCS8q IFNraXAgcGFzdCBhbnkgYWJicmV2aWF0aW9ucyBpbiB0aGUgdGFibGUgKi8KLQkJZm9yICggOyB6 IDwgbjsgeisrKSB7Ci0JCSAgICBpZiAoKHRhYmxlW3pdLmZsZ3MgJiBDTV9BQlIpID09IDApCi0J CSAgICAgIGJyZWFrOwotCQkgICAgaWYgKCEodGFibGVbel0uZmxncyAmIENNX0hMUCkgfHwgKHBt c2cgJiAyKSkKLQkJICAgICAgYnJlYWs7Ci0JCX0KLQkJZGVidWcoRjExMSwiY21rZXkgcGFydGlh bCB6IixhdG1idWYseik7Ci0JCWRlYnVnKEYxMTEsImNta2V5IHBhcnRpYWwgbiIsYXRtYnVmLG4p OwotCQlmb3IgKGogPSB6KzE7IGogPCBuOyBqKyspIHsKLQkJICAgIGRlYnVnKEYxMTEsImNta2V5 IHBhcnRpYWwgaiIsdGFibGVbal0ua3dkLGopOwotCQkgICAgaWYgKGNrc3RyY21wKGF0bWJ1Zix0 YWJsZVtqXS5rd2QsY2MsMCkpCi0JCSAgICAgIGJyZWFrOwotCQkgICAgaWYgKHRhYmxlW2pdLmZs Z3MgJiBDTV9BQlIpCi0JCSAgICAgIGNvbnRpbnVlOwotCQkgICAgaWYgKCh0YWJsZVtqXS5mbGdz ICYgQ01fSExQKSAmJiAhKHBtc2cgJiAyKSkKLQkJICAgICAgY29udGludWU7Ci0JCSAgICBrID0g Y2tzdHJwcmUodGFibGVbel0ua3dkLHRhYmxlW2pdLmt3ZCk7Ci0JCSAgICBkZWJ1ZyhGMTExLCJj bWtleSBwYXJ0aWFsIGsiLHRhYmxlW3pdLmt3ZCxrKTsKLQkJICAgIGlmIChrIDwgbGVuKQotCQkg ICAgICBsZW4gPSBrOyAvKiBMZW5ndGggb2YgbG9uZ2VzdCBjb21tb24gcHJlZml4ICovCi0JCX0K LQkJZGVidWcoRjExMSwiY21rZXkgcGFydGlhbCBsZW4iLHRhYmxlW3pdLmt3ZCxsZW4pOwotCQlp ZiAobGVuICE9IDk5OTkgJiYgbGVuID4gY2MpIHsKLQkJICAgIGNrc3RybmNhdChhdG1idWYsdGFi bGVbel0ua3dkK2NjLEFUTUJMKTsKLQkJICAgIGF0bWJ1ZltsZW5dID0gTlVMOwotCQkgICAgcHJp bnRmKCIlcyIsYXRtYnVmK2NjKTsKLQkJICAgIGNrc3RybmNhdChjbWRidWYsYXRtYnVmK2NjLENN REJMKTsKLQkJICAgIHhjICs9IChsZW4gLSBjYyk7Ci0JCSAgICBjYyA9IGxlbjsKLQkJfQotI2Vu ZGlmIC8qIE5PUEFSVElBTCAqLwotCQlibGVlcChCUF9XQVJOKTsKLQkJYnJlYWs7Ci0JICAgIH0g ZWxzZSBpZiAoeSA9PSAtMykgewotCQlibGVlcChCUF9XQVJOKTsKLQkJYnJlYWs7Ci0JICAgIH0g ZWxzZSBpZiAoeSA9PSAtMSkgewkvKiBOb3QgZm91bmQgKi8KLQkJaWYgKChwbXNnICYgMSkgJiYg IXF1aWV0KSB7Ci0JCSAgICBibGVlcChCUF9GQUlMKTsKLQkJICAgIHByaW50ZigiP05vIGtleXdv cmRzIG1hdGNoIC0gXCIlc1wiXG4iLGF0bWJ1Zik7Ci0JCX0KLQkJY21mbGdzID0gLTI7Ci0JCXJl dHVybigtOSk7Ci0JICAgIH0KLS8qCi0gIElmIHdlIGZvdW5kIGl0LCBidXQgaXQncyBhIGhlbHAt b25seSBrZXl3b3JkIGFuZCB0aGUgImhlbHAiIGJpdCBpcyBub3QKLSAgc2V0IGluIHBtc2csIHRo ZW4gbm90IGZvdW5kLgotKi8KLQkgICAgZGVidWcoRjEwMSwiY21rZXkgZmxncyIsIiIsdGFibGVb el0uZmxncyk7Ci0JICAgIGlmICh0ZXN0KHRhYmxlW3pdLmZsZ3MsQ01fSExQKSAmJiAoKHBtc2cg JiAyKSA9PSAwKSkgewotCQlpZiAoKHBtc2cgJiAxKSAmJiAhcXVpZXQpIHsKLQkJICAgIGJsZWVw KEJQX0ZBSUwpOwotCQkgICAgcHJpbnRmKCI/Tm8ga2V5d29yZHMgbWF0Y2ggLSAlc1xuIixhdG1i dWYpOwotCQl9Ci0JCWNtZmxncyA9IC0yOwotCQlyZXR1cm4oLTkpOwotCSAgICB9Ci0vKgotICBT ZWUgaWYgdGhlIGtleXdvcmQganVzdCBmb3VuZCBoYXMgdGhlIENNX0FCUiBiaXQgc2V0IGluIGl0 cyBmbGdzIGZpZWxkLCBhbmQKLSAgaWYgc28sIHNlYXJjaCBmb3J3YXJkcyBpbiB0aGUgdGFibGUg Zm9yIGEga2V5d29yZCB0aGF0IGhhcyB0aGUgc2FtZSBrd3ZhbAotICBidXQgZG9lcyBub3QgaGF2 ZSBDTV9BQlIgKG9yIENNX0lOVj8pIHNldCwgYW5kIHRoZW4gZXhwYW5kIHVzaW5nIHRoZSBmdWxs Ci0gIGtleXdvcmQuICBXQVJOSU5HOiBUaGlzIGFzc3VtZXMgdGhhdCAoYSkga2V5d29yZHMgYXJl IGluIGFscGhhYmV0aWNhbCBvcmRlciwKLSAgYW5kIChiKSB0aGUgQ01fQUJSIGJpdCBpcyBzZXQg b25seSBpZiB0aGUgdGhlIGFiYnJldmlhdGVkIGtleXdvcmQgaXMgYSB0cnVlCi0gIGFiYnJldmlh dGlvbiAobGVmdCBzdWJzdHJpbmcpIG9mIHRoZSBmdWxsIGtleXdvcmQuCi0qLwotCSAgICBpZiAo dGVzdCh0YWJsZVt6XS5mbGdzLENNX0FCUikpIHsKLQkJaW50IHp6OwotCQlmb3IgKHp6ID0geisx OyB6eiA8IG47IHp6KyspCi0JCSAgaWYgKCh0YWJsZVt6el0ua3d2YWwgPT0gdGFibGVbel0ua3d2 YWwpICYmCi0JCSAgICAgICghdGVzdCh0YWJsZVt6el0uZmxncyxDTV9BQlIpKSAmJgotCQkgICAg ICAoIXRlc3QodGFibGVbenpdLmZsZ3MsQ01fSU5WKSkpIHsKLQkJICAgICAgeiA9IHp6OwotCQkg ICAgICBicmVhazsKLQkJICB9Ci0JICAgIH0KLQkgICAgeHAgPSB0YWJsZVt6XS5rd2QgKyBjYzsK LQkgICAgaWYgKGNtc3dpdGNoICYmIHRlc3QodGFibGVbel0uZmxncyxDTV9BUkcpKSB7Ci0jaWZk ZWYgVk1TCi0JCXByaW50ZigiJXM9Iix4cCk7Ci0JCWJya2NoYXIgPSAnPSc7Ci0jZWxzZQotCQlw cmludGYoIiVzOiIseHApOwotCQlicmtjaGFyID0gJzonOwotI2VuZGlmIC8qIFZNUyAqLwotCSAg ICB9IGVsc2UgewotCQlwcmludGYoIiVzICIseHApOwotCQlicmtjaGFyID0gU1A7Ci0JICAgIH0K LSNpZmRlZiBDS19SRUNBTEwKLQkgICAgaWYgKHRlc3QodGFibGVbel0uZmxncyxDTV9OT1IpKSBu b19yZWNhbGwgPSAxOwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotCSAgICBjbWt3ZmxncyA9IHRh YmxlW3pdLmZsZ3M7Ci0jaWZkZWYgR0VNRE9TCi0JICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlm IC8qIEdFTURPUyAqLwotCSAgICBhZGRidWYoeHApOwotCSAgICBpZiAoY21zd2l0Y2ggJiYgdGVz dCh0YWJsZVt6XS5mbGdzLENNX0FSRykpIHsKLQkJYnAtLTsJCQkvKiBSZXBsYWNlIHRyYWlsaW5n IHNwYWNlIHdpdGggOiAqLwotI2lmZGVmIFZNUwotCQkqYnArKyA9ICc9JzsKLSNlbHNlCi0JCSpi cCsrID0gJzonOwotI2VuZGlmIC8qIFZNUyAqLwotCQkqYnAgPSBOVUw7Ci0JCW5wID0gYnA7Ci0J CXN3YXJnID0gMTsKLQkgICAgfQotCSAgICBpbndvcmQgPSAwOwotCSAgICBjbWZsZ3MgPSAwOwot CSAgICBkZWJ1ZyhGMTEwLCJjbWtleTogYWRkYnVmIixjbWRidWYsMCk7Ci0JICAgIHJldHVybih5 KTsKLQotCSAgY2FzZSAzOgkJCS8qIFVzZXIgdHlwZWQgIj8iICovCi0JICAgIGlmIChmKSB7CQkJ LyogSWYgYSBjb252ZXJzaW9uIGZ1bmN0aW9uIGlzIGdpdmVuICovCi0JCWNoYXIgKiBwcDsKLQkJ enEgPSBhdHhidWY7CQkvKiBkbyB0aGUgY29udmVyc2lvbiBub3cuICovCi0JCXBwID0gYXR4YnVm OwotCQlhdHhuID0gQ01EQkw7Ci0JCWlmICgoKmYpKGF0bWJ1ZiwmenEsJmF0eG4pIDwgMCkgcmV0 dXJuKC0yKTsKLQkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKLQkJICAgIHByaW50ZigiP0V2YWx1 YXRlZCBrZXl3b3JkIHRvbyBsb25nXG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkgICAg fQotCSAgICB5ID0gbG9va3VwKHRhYmxlLGF0bWJ1ZixuLCZ6KTsgLyogTG9vayB1cCB3aGF0IHdl IGhhdmUgc28gZmFyLiAqLwotCSAgICBpZiAoeSA9PSAtMSkgewotCQkvKgotCQkgIFN0cmljdGx5 IHNwZWFraW5nIGlmIHRoZSBtYWluIGtleXdvcmQgdGFibGUgc2VhcmNoIGZhaWxzLAotCQkgIHRo ZW4gd2Ugc2hvdWxkIGxvb2sgaW4gdGhlIHRva2VuIHRhYmxlIGlmIG9uZSBpcyBnaXZlbi4KLQkJ ICBCdXQgaW4gcHJhY3RpY2UsIHRva2VucyBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0aGUgbWFpbgot CQkgIGtleXdvcmQgdGFibGUuCi0JCSovCi0JCWNtZmxncyA9IC0yOwotCQlpZiAoKHBtc2cgJiAx KSAmJiAhcXVpZXQpIHsKLQkJICAgIGJsZWVwKEJQX0ZBSUwpOwotCQkgICAgcHJpbnRmKCIgTm8g a2V5d29yZHMgbWF0Y2hcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCQlyZXR1cm4oLTIp OwotCSAgICB9Ci0jaWZuZGVmIENPTU1FTlQKLQkgICAgLyogVGhpcyBpcyB0byBhbGxvdyA/LWhl bHAgdG8gd29yayBpbW1lZGlhdGVseSBhZnRlciBhIHRva2VuICovCi0JICAgIC8qIHdpdGhvdXQg aGF2aW5nIHRvIHR5cGUgYW4gaW50ZXJtZWRpYXRlIHNwYWNlICovCi0JICAgIGlmICh0bCkgewot CQlmb3IgKGkgPSAwOyBpIDwgdGw7IGkrKykgLyogQ2hlY2sgZm9yIHRva2VuICovCi0JCSAgaWYg KHRva1tpXSA9PSAqYXRtYnVmKSB7IC8qIEdvdCBvbmUgKi8KLQkJICAgICAgZGVidWcoRjAwMCwi Y21rZXkgdG9rZW46IixhdG1idWYsKmF0bWJ1Zik7Ci0JCSAgICAgIHVuZ3dvcmQoKTsJLyogUHV0 IGJhY2sgdGhlIGZvbGxvd2luZyB3b3JkICovCi0JCSAgICAgIGNtZmxncyA9IDM7CS8qIEZvcmNl IGhlbHAgbmV4dCB0aW1lIGFyb3VuZCAqLwotCQkgICAgICByZXR1cm4oLTUpOwkvKiBTcGVjaWFs IHJldHVybiBjb2RlIGZvciB0b2tlbiAqLwotCQkgIH0KLQkgICAgfQotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQotCSAgICBpZiAoKnhobHAgPT0gTlVMKQotCSAgICAgIHByaW50ZigiIE9uZSBvZiB0 aGUgZm9sbG93aW5nOlxuIik7Ci0JICAgIGVsc2UKLQkgICAgICBwcmludGYoIiAlcywgb25lIG9m IHRoZSBmb2xsb3dpbmc6XG4iLHhobHApOwotCSAgICB7Ci0JCWludCB4OwotCQl4ID0gcG1zZyAm ICgyfDQpOwkvKiBTZWUga3dkaGVscCgpIGNvbW1lbnRzICovCi0JCWlmIChhdG1idWZbMF0pCQkv KiBJZiBub3QgYXQgYmVnaW5uaW5nIG9mIGZpZWxkICovCi0JCSAgeCB8PSAxOwkJLyogYWxzbyBz aG93IGludmlzaWJsZXMgKi8KLQkJa3dkaGVscCh0YWJsZSxuLGF0bWJ1ZiwiIiwiIiwxLHgpOwot CSAgICB9Ci0jaWZuZGVmIE5PU1BMCi0JICAgIGlmICghaGF2ZXRva2VuKSB7Ci0JCWV4dGVybiBp bnQgdG9wY21kOwotCQlpZiAodGwgPiAwICYmIHRvcGNtZCAhPSBYWEhMUCkgLyogVGhpcyBpcyBi YWQuLi4gKi8KLQkJICBwcmludGYoIm9yIGEgbWFjcm8gbmFtZSAoXCJkbyA/XCIgZm9yIGEgbGlz dCkgIik7Ci0JICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCSAgICBpZiAoKmF0bWJ1ZiA9PSBO VUwgJiYgIWhhdmV0b2tlbikgewotCQlpZiAodGwgPT0gMSkKLQkJICBwcmludGYoIm9yIHRoZSB0 b2tlbiAlY1xuIiwqdG9rKTsKLQkJZWxzZSBpZiAodGwgPiAxKQotCQkgIHByaW50Zigib3Igb25l IG9mIHRoZSB0b2tlbnM6ICVzXG4iLGNrc3ByZWFkKHRvaykpOwotCSAgICB9Ci0JICAgIHByaW50 ZigiJXMlcyIsIGNtcHJvbSwgY21kYnVmKTsKLQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0JICAgIGJy ZWFrOwotCi0JICBkZWZhdWx0OgotCSAgICBwcmludGYoIlxuJWQgLSBVbmV4cGVjdGVkIHJldHVy biBjb2RlIGZyb20gZ3R3b3JkXG4iLHp6KTsKLQkgICAgcmV0dXJuKGNtZmxncyA9IC0yKTsKLQl9 Ci0JenogPSAocG1zZyAmIDgpID8gZ3R3b3JkKDQpIDogZ3R3b3JkKChwbXNnID09IDQpID8gMSA6 IDApOwotCWRlYnVnKEYxMTEsImNta2V5IGd0d29yZCB6eiIsYXRtYnVmLHp6KTsKLSAgICB9Ci19 Ci0KLWludAotY2hrdG9rKHRsaXN0KSBjaGFyICp0bGlzdDsgewotICAgIGNoYXIgKnA7Ci0gICAg cCA9IHRsaXN0OwotICAgIHdoaWxlICgqcCAhPSBOVUwgJiYgKnAgIT0gKmF0bWJ1ZikgcCsrOwot ICAgIHJldHVybigoKnApID8gKGludCkgKnAgOiAwKTsKLX0KLQotLyogUm91dGluZXMgZm9yIHBh cnNpbmcgYW5kIGNvbnZlcnRpbmcgZGF0ZXMgYW5kIHRpbWVzICovCi0KLSNkZWZpbmUgaXNkYXRl c2VwKGMpIChja3N0cmNocigiIC0vLl8iLGMpKQotCi0jZGVmaW5lIENNREFURUJVRiAxMDI0Ci1j aGFyIGNtZGF0ZWJ1ZltDTURBVEVCVUYrNF0gPSB7IE5VTCwgTlVMIH07Ci1zdGF0aWMgY2hhciAq IGNtZGF0ZWJwID0gY21kYXRlYnVmOwotY2hhciAqIGNtZGF0ZW1zZyA9IE5VTEw7Ci0KLXN0YXRp YyBzdHJ1Y3Qga2V5dGFiIHRpbWV1bml0c1tdID0gewotICAgIHsgImRheXMiLCAgIFRVX0RBWVMs ICAgMCB9LAotICAgIHsgIm1vbnRocyIsIFRVX01PTlRIUywgMCB9LAotICAgIHsgIndlZWtzIiwg IFRVX1dFRUtTLCAgMCB9LAotICAgIHsgIndrcyIsICAgIFRVX1dFRUtTLCAgMCB9LAotICAgIHsg InllYXJzIiwgIFRVX1lFQVJTLCAgMCB9LAotICAgIHsgInlycyIsICAgIFRVX1lFQVJTLCAgMCB9 Ci19Owotc3RhdGljIGludCBudW5pdHMgPSAoc2l6ZW9mKHRpbWV1bml0cykgLyBzaXplb2Yoc3Ry dWN0IGtleXRhYikpOwotCi0jZGVmaW5lIFNZTV9OT1cgIDAKLSNkZWZpbmUgU1lNX1RPREEgMQot I2RlZmluZSBTWU1fVE9NTyAyCi0jZGVmaW5lIFNZTV9ZRVNUIDMKLQotc3RhdGljIHN0cnVjdCBr ZXl0YWIgc3ltZGF5dGFiW10gPSB7Ci0gICAgeyAibm93IiwgICAgICAgU1lNX05PVywgIDAgfSwK LSAgICB7ICJ0b2RheSIsICAgICBTWU1fVE9EQSwgMCB9LAotICAgIHsgInRvbW9ycm93IiwgIFNZ TV9UT01PLCAwIH0sCi0gICAgeyAieWVzdGVyZGF5IiwgU1lNX1lFU1QsIDAgfQotfTsKLXN0YXRp YyBpbnQgbnN5bWRheXMgPSAoc2l6ZW9mKHN5bWRheXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRh YikpOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBkYXlzb2Z3ZWVrW10gPSB7Ci0gICAgeyAiRnJp ZGF5IiwgICAgNSwgMCB9LAotICAgIHsgIk1vbmRheSIsICAgIDEsIDAgfSwKLSAgICB7ICJTYXR1 cmRheSIsICA2LCAwIH0sCi0gICAgeyAiU3VuZGF5IiwgICAgMCwgMCB9LAotICAgIHsgIlRodXJz ZGF5IiwgIDQsIDAgfSwKLSAgICB7ICJUdWVzZGF5IiwgICAyLCAwIH0sCi0gICAgeyAiV2VkbmVz ZGF5IiwgMywgMCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiB1c2F0eltdID0gewkvKiBS RkMgODIyIHRpbWV6b25lcyAgKi8KLSAgICB7ICJjZHQiLCAgNSwgMCB9LAkJCS8qIFZhbHVlcyBh cmUgR01UIG9mZnNldHMgKi8KLSAgICB7ICJjc3QiLCAgNiwgMCB9LAotICAgIHsgImVkdCIsICA0 LCAwIH0sCi0gICAgeyAiZXN0IiwgIDUsIDAgfSwKLSAgICB7ICJnbXQiLCAgMCwgMCB9LAotICAg IHsgIm1kdCIsICA2LCAwIH0sCi0gICAgeyAibXN0IiwgIDcsIDAgfSwKLSAgICB7ICJwZHQiLCAg NywgMCB9LAotICAgIHsgInBzdCIsICA4LCAwIH0sCi0gICAgeyAidXRjIiwgIDAsIDAgfSwKLSAg ICB7ICJ6dWx1IiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBudXNhdHogPSAoc2l6ZW9mKHVzYXR6 KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLQotLyogIEMgTSBDIFYgVCBEIEEgVCBFICAt LSAgQ29udmVydHMgZnJlZS1mb3JtIGRhdGUgdG8gc3RhbmRhcmQgZm9ybS4gICovCi0KLS8qCi0g ICBDYWxsIHdpdGgKLSAgICAgcyA9IHBvaW50ZXIgdG8gZnJlZS1mb3JtYXQgZGF0ZSwgdGltZSwg b3IgZGF0ZSBhbmQgdGltZS4KLSAgICAgdCA9IDA6IHJldHVybiB0aW1lIG9ubHkgaWYgdGltZSB3 YXMgZ2l2ZW4gaW4gcy4KLSAgICAgdCA9IDE6IGFsd2F5cyByZXR1cm4gdGltZSAoMDA6MDA6MDAg aWYgbm8gdGltZSBnaXZlbiBpbiBzKS4KLSAgICAgdCA9IDI6IGFsbG93IHRpbWUgdG8gYmUgPiAy NDowMDowMC4KLSAgIFJldHVybnM6Ci0gICAgIE5VTEwgb24gZmFpbHVyZTsKLSAgICAgUG9pbnRl ciB0byAieXl5eW1tZGQgaGg6bW06c3MiIChsb2NhbCBkYXRlLXRpbWUpIG9uIHN1Y2Nlc3MuCi0q LwotCi0vKgotICBCZWZvcmUgZmluYWwgcmVsZWFzZSB0aGUgZm9sbG93aW5nIGxvbmcgbGluZXMg c2hvdWxkIGJlIHdyYXBwZWQuCi0gIFVudGlsIHRoZW4gd2UgbGVhdmUgdGhlbSBsb25nIHNpbmNl IHdyYXBwaW5nIHRoZW0gd3JlY2tzIEVNQUNTJ3MKLSAgQyBpbmRlbnRhdGlvbi4KLSovCi0KLS8q IGFzY3RpbWUgcGF0dGVybiAqLwotc3RhdGljIGNoYXIgKiBhdHAxID0gIltBLVpdW2Etel1bYS16 XSBbQS1aXVthLXpdW2Etel0gWyAwLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTldOlswLTld WzAtOV0gWzAtOV1bMC05XVswLTldWzAtOV0iOwotCi0vKiBhc2N0aW1lIHBhdHRlcm4gd2l0aCB0 aW1lem9uZSAqLwotc3RhdGljIGNoYXIgKiBhdHAyID0gIltBLVpdW2Etel1bYS16XSBbQS1aXVth LXpdW2Etel0gWyAwLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTldOlswLTldWzAtOV0gW0Et Wl1bQS1aXVtBLVpdIFswLTldWzAtOV1bMC05XVswLTldIjsKLQotI2RlZmluZSBEQVRFQlVGTEVO IDEyNwotI2RlZmluZSBZWVlZTU1ERCAxMgotCi0jZGVmaW5lIGlzbGVhcCh5KSAoKCh5KSAlIDQg PT0gMCAmJiAoeSkgJSAxMDAgIT0gMCkgfHwgKHkpICUgNDAwID09IDApCi1zdGF0aWMgaW50IG1k YXlzWzEzXSA9IHsgMCwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMw LCAzMSB9OwotCi0jZGVmaW5lIE5FRURfREFZUyAxCi0jZGVmaW5lIE5FRURfSFJTICAyCi0jZGVm aW5lIE5FRURfTUlOUyAzCi0jZGVmaW5lIE5FRURfU0VDUyA0Ci0jZGVmaW5lIE5FRURfRlJBQyA1 Ci0KLSNkZWZpbmUgREVMVEFCVUYgMjU2Ci1zdGF0aWMgY2hhciBkZWx0YWJ1ZltERUxUQUJVRl07 Ci1zdGF0aWMgY2hhciAqIGRlbHRhYnAgPSBkZWx0YWJ1ZjsKLQotY2hhciAqCi1jbWRlbHRhKHl5 LCBtbywgZGQsIGhoLCBtbSwgc3MsIHNpZ24sIGR5eSwgZG1vLCBkZGQsIGRoaCwgZG1tLCBkc3Mp Ci0gICAgaW50IHl5LCBtbywgZGQsIGhoLCBtbSwgc3MsIHNpZ24sIGR5eSwgZG1vLCBkZGQsIGRo aCwgZG1tLCBkc3M7Ci0vKiBjbWRlbHRhICovIHsKLSAgICBpbnQgenl5LCB6bW8sIHpkZCwgemho LCB6bW0sIHpzczsKLSAgICBsb25nIHQxLCB0MiwgdDMsIHQ0OwotICAgIGxvbmcgZDEgPSAwLCBk MiwgZDM7Ci0gICAgY2hhciBkYXRlYnVmW0RBVEVCVUZMRU4rMV07Ci0KLSNpZmRlZiBERUJVRwot ICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAxLCJjbWRlbHRhIHl5IiwiIix5eSk7Ci0JZGVi dWcoRjEwMSwiY21kZWx0YSBtbyIsIiIsbW8pOwotCWRlYnVnKEYxMDEsImNtZGVsdGEgZGQiLCIi LGRkKTsKLQlkZWJ1ZyhGMTAxLCJjbWRlbHRhIGhoIiwiIixoaCk7Ci0JZGVidWcoRjEwMSwiY21k ZWx0YSBtbSIsIiIsbW0pOwotCWRlYnVnKEYxMDEsImNtZGVsdGEgc3MiLCIiLHNzKTsKLQlkZWJ1 ZyhGMTAxLCJjbWRlbHRhIHNpZ24iLCIiLHNpZ24pOwotCWRlYnVnKEYxMDEsImNtZGVsdGEgZHl5 IiwiIixkeXkpOwotCWRlYnVnKEYxMDEsImNtZGVsdGEgZG1vIiwiIixkbW8pOwotCWRlYnVnKEYx MDEsImNtZGVsdGEgZGRkIiwiIixkZGQpOwotCWRlYnVnKEYxMDEsImNtZGVsdGEgZGhoIiwiIixk aGgpOwotCWRlYnVnKEYxMDEsImNtZGVsdGEgZG1tIiwiIixkbW0pOwotCWRlYnVnKEYxMDEsImNt ZGVsdGEgZHNzIiwiIixkc3MpOwotICAgIH0KLSNlbmRpZiAvKiBERUJMT0cgKi8KLQotICAgIGlm ICh5eSA8IDAgfHwgeXkgPiA5OTk5KSB7Ci0JbWFrZXN0cigmY21kYXRlbXNnLCJCYXNlIHllYXIg b3V0IG9mIHJhbmdlIik7Ci0JZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0xKTsKLQly ZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIGlmIChtbyA8IDEgfHwgbW8gPiAxMikgewotCW1ha2Vz dHIoJmNtZGF0ZW1zZywiQmFzZSBtb250aCBvdXQgb2YgcmFuZ2UiKTsKLQlkZWJ1ZyhGMTExLCJj bWRlbHRhIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgaWYgKGRk IDwgMSB8fCBkZCA+IG1kYXlzW21vXSkgewotCW1ha2VzdHIoJmNtZGF0ZW1zZywiQmFzZSBkYXkg b3V0IG9mIHJhbmdlIik7Ci0JZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0xKTsKLQly ZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIGlmIChoaCA8IDAgfHwgaGggPiAyMykgewotCW1ha2Vz dHIoJmNtZGF0ZW1zZywiQmFzZSBob3VyIG91dCBvZiByYW5nZSIpOwotCWRlYnVnKEYxMTEsImNt ZGVsdGEiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBpZiAobW0g PCAwIHx8IG1tID4gNTkpIHsKLQltYWtlc3RyKCZjbWRhdGVtc2csIkJhc2UgbWludXRlIG91dCBv ZiByYW5nZSIpOwotCWRlYnVnKEYxMTEsImNtZGVsdGEiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJu KE5VTEwpOwotICAgIH0KLSAgICBpZiAoc3MgPCAwIHx8IHNzID4gNjApIHsKLQltYWtlc3RyKCZj bWRhdGVtc2csIkJhc2Ugc2Vjb25kIG91dCBvZiByYW5nZSIpOwotCWRlYnVnKEYxMTEsImNtZGVs dGEiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBzaWduID0gKHNp Z24gPCAwKSA/IC0xIDogMTsKLSAgICBpZiAoZG1vICE9IDApIHsKLSAgICAgICAgaWYgKHNpZ24g PiAwKSB7Ci0gICAgICAgICAgICBtbyArPSAoc2lnbiAqIGRtbyk7Ci0gICAgICAgICAgICBpZiAo bW8gPiAxMikgewotICAgICAgICAgICAgICAgIHl5ICs9IG1vIC8gMTI7Ci0gICAgICAgICAgICAg ICAgbW8gPSBtbyAlIDEyOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHNpZ24g PCAwKSB7Ci0gICAgICAgICAgICB3aGlsZSAoZG1vID4gMTIpIHsKLSAgICAgICAgICAgICAgICB5 eS0tOwotICAgICAgICAgICAgICAgIGRtbyAtPSAxMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGlmIChkbW8gPCBtbykgewotICAgICAgICAgICAgICAgIG1vIC09IGRtbzsKLSAgICAgICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgeXktLTsKLSAgICAgICAgICAgICAgICBtbyA9 IDEyIC0gKGRtbyAtIG1vKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBp ZiAoZHl5ICE9IDApIHsKLQl5eSArPSAoc2lnbiAqIGR5eSk7Ci0JaWYgKHl5ID4gOTk5OSB8fCB5 eSA8IDApIHsKLQkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJSZXN1bHQgeWVhciBvdXQgb2YgcmFu Z2UiKTsKLQkgICAgZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0xKTsKLQkgICAgcmV0 dXJuKE5VTEwpOwotCX0KLSAgICB9Ci0gICAgc3ByaW50ZihkYXRlYnVmLCIlMDRkJTAyZCUwMmQg JTAyZDolMDJkOiUwMmQiLHl5LG1vLGRkLGhoLG1tLHNzKTsKLSAgICBkMSA9IG1qZChkYXRlYnVm KTsKLSAgICBkZWJ1ZyhGMTExLCJjbWRlbHRhIG1qZCIsZGF0ZWJ1ZixkMSk7ICAgIAotCi0gICAg dDEgPSBoaCAqIDM2MDAgKyBtbSAqIDYwICsgc3M7CS8qIEJhc2UgdGltZSB0byBzZWNzIHNpbmNl IG1pZG5pZ2h0ICovCi0gICAgdDIgPSBkaGggKiAzNjAwICsgZG1tICogNjAgKyBkc3M7CS8qIERl bHRhIHRpbWUsIGRpdHRvICovCi0gICAgdDMgPSB0MSArIChzaWduICogdDIpOwkJLyogR2V0IHN1 bSAob3IgZGlmZmVyZW5jZSkgKi8KLSAgICAKLSAgICBkMiA9IChzaWduICogZGRkKTsJCQkvKiBE ZWx0YSBkYXlzICovCi0gICAgZDIgKz0gdDMgLyA4NjQwMEw7Ci0KLSAgICB0NCA9IHQzICUgODY0 MDBMOwkJCS8qIEZyYWN0aW9uYWwgcGFydCBvZiBkYXkgKi8KLSAgICBpZiAodDQgPCAwKSB7CQkJ LyogSWYgbmVnYXRpdmUgKi8KLQlkMi0tOwkJCQkvKiBvbmUgbGVzcyBkZWx0YSBkYXkgKi8KLQl0 NCArPSA4NjQwMEw7CQkJLyogZ2V0IHBvc2l0aXZlIHNlY29uZHMgKi8KLSAgICB9Ci0gICAgaGgg PSAoaW50KSAodDQgLyAzNjAwTCk7Ci0gICAgbW0gPSAoaW50KSAodDQgJSAzNjAwTCkgLyA2MDsK LSAgICBzcyA9IChpbnQpICh0NCAlIDM2MDBMKSAlIDYwOwotCi0gICAgc3ByaW50ZihkYXRlYnVm LCIlcyAlMDJkOiUwMmQ6JTAyZCIsIG1qZDJkYXRlKGQxK2QyKSxoaCxtbSxzcyk7Ci0gICAgewot CWludCBsZW4sIGssIG47Ci0JY2hhciAqIHA7Ci0JbGVuID0gc3RybGVuKGRhdGVidWYpOwotCWsg PSBkZWx0YWJwIC0gKGNoYXIgKilkZWx0YWJ1ZjsJLyogU3BhY2UgdXNlZCAqLwotCW4gPSBERUxU QUJVRiAtIGsgLSAxOwkJLyogU3BhY2UgbGVmdCAqLwotCWlmIChuIDwgbGVuKSB7CQkJLyogTm90 IGVub3VnaD8gKi8KLQkgICAgZGVsdGFicCA9IGRlbHRhYnVmOwkJLyogV3JhcCBhcm91bmQgKi8K LQkgICAgbiA9IERFTFRBQlVGOwotCX0KLQlja3N0cm5jcHkoZGVsdGFicCxkYXRlYnVmLG4pOwot CXAgPSBkZWx0YWJwOwotCWRlbHRhYnAgKz0gbGVuICsgMTsKLQlyZXR1cm4ocCk7Ci0gICAgfQot fQotCi0KLS8qIENvbnZlcnQgRGVsdGEgVGltZSB0byBTZWNvbmRzICovCi0KLWludAotZGVsdGEy c2VjKHMscmVzdWx0KSBjaGFyICogczsgbG9uZyAqIHJlc3VsdDsgewotICAgIGxvbmcgZGRheXMg PSAwTCwgeno7Ci0gICAgaW50IGRzaWduID0gMSwgZGhvdXJzID0gMCwgZG1pbnMgPSAwLCBkc2Vj cyA9IDAsIHVuaXRzOwotICAgIGludCBzdGF0ZSA9IE5FRURfREFZUzsKLSAgICBjaGFyICpwLCAq cDIsICpwMywgYyA9IDA7Ci0gICAgY2hhciBidWZbNjRdOwotCi0gICAgaWYgKCFzKSBzID0gIiI7 Ci0gICAgaWYgKCEqcykKLSAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKChpbnQpc3RybGVuKHMp ID4gNjMpCi0gICAgICByZXR1cm4oLTEpOwotICAgIGNrc3RybmNweShidWYscyw2NCk7Ci0gICAg cCA9IGJ1ZjsKLQotICAgIGlmICgqcCAhPSAnKycgJiYgKnAgIT0gJy0nKQotICAgICAgcmV0dXJu KC0xKTsKLQotICAgIGlmICgqcCsrID09ICctJykKLSAgICAgIGRzaWduID0gLTE7Ci0gICAgd2hp bGUgKCpwID09IFNQKQkJCS8qIFNraXAgaW50ZXJ2ZW5pbmcgc3BhY2VzICovCi0gICAgICBwKys7 Ci0KLSAgICB3aGlsZSAoc3RhdGUpIHsJCQkvKiBGU0EgdG8gcGFyc2UgZGVsdGEgdGltZSAqLwot CWlmIChzdGF0ZSA8IDAgfHwgIWlzZGlnaXQoKnApKQotCSAgcmV0dXJuKC0xKTsKLQlwMiA9IHA7 CQkJCS8qIEdldCBuZXh0IG51bWVyaWMgZmllbGQgKi8KLQl3aGlsZSAoaXNkaWdpdCgqcDIpKQot CSAgcDIrKzsKLQljID0gKnAyOwkJCS8qIEFuZCBicmVhayBjaGFyYWN0ZXIgKi8KLQkqcDIgPSBO VUw7CQkJLyogVGVybWluYXRlIHRoZSBudW1iZXIgKi8KLQlzd2l0Y2ggKHN0YXRlKSB7CQkvKiBJ bnRlcnByZXQgYWNjb3JkaW5nIHRvIHN0YXRlICovCi0JICBjYXNlIE5FRURfREFZUzoJCS8qIElu aXRpYWwgKi8KLQkgICAgaWYgKChjID09ICctJykgfHwJCS8qIFZNUyBmb3JtYXQgKi8KLQkJKChj ID09ICdkJyB8fCBjID09ICdEJykKLQkJICYmICFpc2FscGhhKCoocDIrMSkpKSkgeyAvKiBEYXlz ICovCi0JCWRkYXlzID0gYXRvbChwKTsKLQkJaWYgKCEqKHAyKzEpKQkJCQotCQkgIHN0YXRlID0g MDsKLQkJZWxzZQkJCS8qIGlmIGFueXRoaW5nIGlzIGxlZnQgKi8KLQkJICBzdGF0ZSA9IE5FRURf SFJTOwkvKiBub3cgd2Ugd2FudCBob3Vycy4gKi8KLQkgICAgfSBlbHNlIGlmIChjID09ICc6Jykg ewkvKiBkZWxpbWl0ZXIgaXMgY29sb24gKi8KLQkJZGhvdXJzID0gYXRvaShwKTsJLyogc28gaXQn cyBob3VycyAqLwotCQlzdGF0ZSA9IE5FRURfTUlOUzsJLyogbm93IHdlIHdhbnQgbWludXRlcyAq LwotCSAgICB9IGVsc2UgaWYgKCFjKSB7CQkvKiBlbmQgb2Ygc3RyaW5nICovCi0JCWRob3VycyA9 IGF0b2kocCk7CS8qIGl0J3Mgc3RpbGwgaG91cnMgKi8KLQkJc3RhdGUgPSAwOwkJLyogYW5kIHdl J3JlIGRvbmUgKi8KLQkgICAgfSBlbHNlIGlmIChpc2FscGhhKGMpIHx8IGMgPT0gU1ApIHsKLQkJ aWYgKGMgPT0gU1ApIHsJCS8qIEl0J3MgYSBrZXl3b3JkPyAqLwotCQkgICAgcDIrKzsJCS8qIFNr aXAgc3BhY2VzICovCi0JCSAgICB3aGlsZSAoKnAyID09IFNQKQotCQkgICAgICBwMisrOwotCQl9 IGVsc2UgewkJLyogb3IgcmVwbGFjZSBmaXJzdCBsZXR0ZXIgKi8KLQkJICAgICpwMiA9IGM7Ci0J CX0KLQkJcDMgPSBwMjsJCS8qIHAyIHBvaW50cyB0byBiZWdpbm5pbmcgb2Yga2V5d29yZCAqLwot CQl3aGlsZSAoaXNhbHBoYSgqcDMpKQkvKiBGaW5kIGVuZCBvZiBrZXl3b3JkICovCi0JCSAgcDMr KzsKLQkJYyA9ICpwMzsJCS8qIE5VTCBpdCBvdXQgc28gd2UgY2FuIGxvb2sgaXQgdXAgKi8KLQkJ aWYgKCpwMykJCS8qIHAzIHBvaW50cyB0byBrZXl3b3JkIHRlcm1pbmF0b3IgKi8KLQkJICAqcDMg PSBOVUw7Ci0JCWlmICgodW5pdHMgPSBsb29rdXAodGltZXVuaXRzLHAyLG51bml0cyxOVUxMKSkg PCAwKQotCQkgIHJldHVybigtMSk7Ci0JCSpwMiA9IE5VTDsJCS8qIFJlLXRlcm1pbmF0ZSB0aGUg bnVtYmVyICovCi0JCSpwMyA9IGM7Ci0JCXdoaWxlICgqcDMgPT0gU1ApCS8qIFBvaW50IGF0IGZp ZWxkIGFmdGVyIHVuaXRzICovCi0JCSAgcDMrKzsKLQkJcDIgPSBwMzsKLQkJc3dpdGNoICh1bml0 cykgewotCQkgIGNhc2UgVFVfREFZUzoKLQkJICAgIGRkYXlzID0gYXRvbChwKTsKLQkJICAgIGJy ZWFrOwotCQkgIGRlZmF1bHQ6Ci0JCSAgICByZXR1cm4oLTEpOwotCQl9Ci0JCWlmICgqcDIpIHsK LQkJICAgIHN0YXRlID0gTkVFRF9IUlM7Ci0JCSAgICBwMi0tOwotCQl9IGVsc2UKLQkJICBzdGF0 ZSA9IDA7Ci0JICAgIH0gZWxzZSB7CQkJLyogQW55dGhpbmcgZWxzZSAqLwotCQlzdGF0ZSA9IC0x OwkJLyogaXMgYW4gZXJyb3IgKi8KLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNhc2UgTkVFRF9I UlM6CQkvKiBMb29raW5nIGZvciBob3VycyAqLwotCSAgICBpZiAoYyA9PSAnOicpIHsKLQkJZGhv dXJzID0gYXRvaShwKTsKLQkJc3RhdGUgPSBORUVEX01JTlM7Ci0JICAgIH0gZWxzZSBpZiAoIWMp IHsKLQkJZGhvdXJzID0gYXRvaShwKTsKLQkJc3RhdGUgPSAwOwotCSAgICB9IGVsc2UgewotCQlz dGF0ZSA9IC0xOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBORUVEX01JTlM6CQkvKiBM b29raW5nIGZvciBtaW51dGVzICovCi0JICAgIGlmIChjID09ICc6JykgewotCQlkbWlucyA9IGF0 b2kocCk7Ci0JCXN0YXRlID0gTkVFRF9TRUNTOwotCSAgICB9IGVsc2UgaWYgKCFjKSB7Ci0JCWRt aW5zID0gYXRvaShwKTsKLQkJc3RhdGUgPSAwOwotCSAgICB9IGVsc2UgewotCQlzdGF0ZSA9IC0x OwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBORUVEX1NFQ1M6CQkvKiBMb29raW5nIGZv ciBzZWNvbmRzICovCi0JICAgIGlmIChjID09ICcuJykgewotCQlkc2VjcyA9IGF0b2kocCk7Ci0J CXN0YXRlID0gTkVFRF9GUkFDOwotCSAgICB9IGVsc2UgaWYgKCFjKSB7Ci0JCWRzZWNzID0gYXRv aShwKTsKLQkJc3RhdGUgPSAwOwotCSAgICB9IGVsc2UgewotCQlzdGF0ZSA9IC0xOwotCSAgICB9 Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBORUVEX0ZSQUM6CQkvKiBGcmFjdGlvbiBvZiBzZWNvbmQg Ki8KLQkgICAgaWYgKCFjICYmIHJkaWdpdHMocCkpIHsKLQkJaWYgKCpwID4gJzQnKQotCQkgIGRz ZWNzKys7Ci0JCXN0YXRlID0gMDsKLQkgICAgfSBlbHNlIHsKLQkJc3RhdGUgPSAtMTsKLQkgICAg fQotCSAgICBicmVhazsKLQl9Ci0JaWYgKGMpCQkJCS8qIG5leHQgZmllbGQgaWYgYW55ICovCi0J ICBwID0gcDIgKyAxOwotICAgIH0KLSAgICBpZiAoc3RhdGUgPCAwKQotICAgICAgcmV0dXJuKC0x KTsKLQotICAgIC8qIGlmIGRheXMgPiAyNDg1NCBhbmQgc2l6ZW9mKGxvbmcpID09IDMyIHdlIG92 ZXJmbG93ICovCi0KLSAgICB6eiA9IGRkYXlzICogODY0MDBMOwotICAgIGlmICh6eiA8IDBMKQkJ CS8qIFRoaXMgY2F0Y2hlcyBpdCAqLwotICAgICAgcmV0dXJuKC0yKTsKLSAgICB6eiArPSBkaG91 cnMgKiAzNjAwTCArIGRtaW5zICogNjBMICsgZHNlY3M7Ci0gICAgenogKj0gZHNpZ247Ci0gICAg KnJlc3VsdCA9IHp6OwotICAgIHJldHVybigwKTsKLX0KLQotCi1jaGFyICoKLWNtY3Z0ZGF0ZShz LHQpIGNoYXIgKiBzOyBpbnQgdDsgewotICAgIGludCB4LCBpLCBqLCBrLCBoaCwgbW0sIHNzLCBm ZiwgcG1mbGFnID0gMCwgbm9kYXRlID0gMCwgbGVuLCBkb3c7Ci0gICAgaW50IHVuaXRzLCBpc2dt dCA9IDAsIGdtdHNpZ24gPSAwLCBkID0gMCwgc3RhdGUgPSAwLCBuZGF5OwotICAgIGludCBrbiA9 IDAsIGZ0WzhdLCBpc2xldHRlciA9IDAsIGYybGVuID0gMDsKLQotICAgIGludCB6aGggPSAwOwkJ CS8qIFRpbWV6b25lIGFkanVzdG1lbnRzICovCi0gICAgaW50IHptbSA9IDA7Ci0gICAgaW50IHpk ZCA9IDA7Ci0KLSAgICBpbnQgZHNpZ24gPSAxOwkJCS8qIERlbHRhLXRpbWUgYWRqdXN0bWVudHMg Ki8KLSAgICBpbnQgZGRheXMgPSAwOwotICAgIGludCBkbW9udGhzID0gMDsKLSAgICBpbnQgZHll YXJzID0gMDsKLSAgICBpbnQgZGhvdXJzID0gMDsKLSAgICBpbnQgZG1pbnMgPSAwOwotICAgIGlu dCBkc2VjcyA9IDA7Ci0gICAgaW50IGhhdmVkZWx0YSA9IDA7Ci0KLSAgICBjaGFyICogZmxkWzhd LCAqIHAgPSAiIiwgKiBwMiwgKiBwMzsgLyogQXNzb3J0ZWQgYnVmZmVycyBhbmQgcG9pbnRlcnMg ICovCi0gICAgY2hhciAqIHMyLCAqIHMzOwotICAgIGNoYXIgKiB5ZWFyID0gTlVMTCwgKiBtb250 aCA9IE5VTEwsICogZGF5ID0gTlVMTDsKLSAgICBjaGFyICogaG91ciA9ICIwMCIsICogbWluID0g IjAwIiwgKiBzZWMgPSAiMDAiOwotICAgIGNoYXIgZGF0ZXNlcCA9IDA7Ci0gICAgY2hhciB0bXBi dWZbOF07Ci0gICAgY2hhciB4YnVmW0RBVEVCVUZMRU4rMV07Ci0gICAgY2hhciB5YnVmW0RBVEVC VUZMRU4rMV07Ci0gICAgY2hhciB6YnVmW0RBVEVCVUZMRU4rMV07Ci0gICAgY2hhciB5eXl5bW1k ZFtZWVlZTU1ERF07Ci0gICAgY2hhciBkYnVmWzI2XTsKLSAgICBjaGFyIGRheWJ1ZlszXTsKLSAg ICBjaGFyIG1vbmJ1ZlszXTsKLSAgICBjaGFyIHllYXJidWZbNV07Ci0gICAgY2hhciB0aW1idWZb MTZdLCAqdGIsIGNjOwotICAgIGNoYXIgKiBkcCA9IE5VTEw7CQkJLyogUmVzdWx0IHBvaW50ZXIg Ki8KLQotICAgIGlmICghcykgcyA9ICIiOwotICAgIHRtcGJ1ZlswXSA9IE5VTDsKLQotICAgIHdo aWxlICgqcyA9PSBTUCkgcysrOwkJLyogR29iYmxlIGFueSBsZWFkaW5nIGJsYW5rcyAqLwotICAg IGlmIChpc2FscGhhKCpzKSkJCQkvKiBSZW1lbWJlciBpZiAxc3QgY2hhciBpcyBhIGxldHRlciAq LwotICAgICAgaXNsZXR0ZXIgPSAxOwotCi0gICAgbGVuID0gc3RybGVuKHMpOwotICAgIGRlYnVn KEYxMTAsImNtY3Z0ZGF0ZSIscyxsZW4pOwotICAgIGlmIChsZW4gPT0gMCkgewkJCS8qIE5vIGFy ZyAtIHJldHVybiBjdXJyZW50IGRhdGUtdGltZSAqLwotCWRwID0gY2tkYXRlKCk7Ci0JZ290byB4 Y3Z0ZGF0ZTsKLSAgICB9Ci0gICAgaWYgKGxlbiA+IERBVEVCVUZMRU4pIHsJCS8qIENoZWNrIGxl bmd0aCBvZiBhcmcgKi8KLQltYWtlc3RyKCZjbWRhdGVtc2csIkRhdGUtdGltZSBzdHJpbmcgdG9v IGxvbmciKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJu KE5VTEwpOwotICAgIH0KLSAgICBoaCA9IDA7CQkJCS8qIEluaXQgdGltZSB0byAwMDowMDowMC4w ICovCi0gICAgbW0gPSAwOwotICAgIHNzID0gMDsKLSAgICBmZiA9IDA7Ci0gICAgenRpbWUoJnAp OwotICAgIGlmICghcCkKLSAgICAgIHAgID0gIiI7Ci0gICAgaWYgKCpwKSB7CQkJCS8qIEluaXQg dGltZSB0byBjdXJyZW50IHRpbWUgKi8KLQl4ID0gY2tzdHJuY3B5KGRidWYscCwyNik7Ci0JaWYg KHggPiAxNykgewotCSAgICBoaCA9IGF0b2koJmRidWZbMTFdKTsKLQkgICAgbW0gPSBhdG9pKCZk YnVmWzE0XSk7Ci0JICAgIHNzID0gYXRvaSgmZGJ1ZlsxN10pOwotCX0KLSAgICB9Ci0gICAgY2tz dHJuY3B5KHl5eXltbWRkLHp6bmRhdGUoKSxZWVlZTU1ERCk7IC8qIEluaXQgZGF0ZSB0byBjdXJy ZW50IGRhdGUgKi8KLSAgICBja3N0cm5jcHkoeWVhcmJ1Zix5eXl5bW1kZCw1KTsKLSAgICBja3N0 cm5jcHkobW9uYnVmLCZ5eXl5bW1kZFs0XSwzKTsKLSAgICBja3N0cm5jcHkoZGF5YnVmLCZ5eXl5 bW1kZFs2XSwzKTsKLSAgICB5ZWFyID0geWVhcmJ1ZjsKLSAgICBtb250aCA9IG1vbmJ1ZjsKLSAg ICBkYXkgPSBkYXlidWY7Ci0gICAgbmRheSA9IGF0b2koZGF5YnVmKTsKLSAgICBja3N0cm5jcHko eGJ1ZixzLERBVEVCVUZMRU4pOwkvKiBNYWtlIGEgbG9jYWwgY29weSB3ZSBjYW4gcG9rZSAqLwot ICAgIHMgPSB4YnVmOwkJCQkvKiBQb2ludCB0byBpdCAqLwotICAgIHNbbGVuXSA9IE5VTDsKLSAg ICBpZiAoc1swXSA9PSAnOicpIHsKLQlwID0gczsKLQlnb3RvIGRvdGltZTsKLSAgICB9Ci0gICAg LyogU3BlY2lhbCBwcmVzZXQgZm9ybWF0cy4uLiAqLwotCi0gICAgaWYgKGxlbiA+PSAxNCkgewkJ CS8qIEZUUCBNRFRNIGFsbC1udW1lcmljIGRhdGUgKi8KLQljaGFyIGM7Ci0JYyA9IHNbMTRdOwkJ CS8qIGUuZy4gMTk5ODA2MTUxMDAwNDUuMDE0ICovCi0Jc1sxNF0gPSBOVUw7Ci0JeCA9IHJkaWdp dHMocyk7Ci0Jc1sxNF0gPSBjOwotCWlmICh4KSB7Ci0JICAgIGNrc3RybmNweSh5eXl5bW1kZCxz LDgrMSk7Ci0JICAgIHllYXIgPSBOVUxMOwotCSAgICBwID0gJnNbOF07Ci0JICAgIGdvdG8gZG90 aW1lOwotCX0KLSAgICB9Ci0gICAgeCA9IDA7CQkJCS8qIEJlY29tZXMgPiAwIGZvciBhc2N0aW1l IGZvcm1hdCAqLwotICAgIGlmIChpc2FscGhhKHNbMF0pKSB7Ci0JaWYgKGxlbiA9PSAyNCkgewkJ LyogQXNjdGltZSBmb3JtYXQ/ICovCi0JICAgIC8qIFNhdCBKdWwgMTQgMTU6NTc6MzIgMjAwMSAq LwotCSAgICB4ID0gY2ttYXRjaChhdHAxLHMsMCwwKTsKLQkgICAgZGVidWcoRjExMSwiY21jdnRk YXRlIGFzY3RpbWUiLHMseCk7Ci0JfSBlbHNlIGlmIChsZW4gPT0gMjgpIHsJCS8qIE9yIEFzY3Rp bWUgcGx1cyB0aW1lem9uZT8gKi8KLQkgICAgLyogU2F0IEp1bCAxNCAxNToxNTozOSBFRFQgMjAw MSAqLwotCSAgICB4ID0gY2ttYXRjaChhdHAyLHMsMCwwKTsKLQkgICAgZGVidWcoRjExMSwiY21j dnRkYXRlIGFzY3RpbWUrdGltZXpvbmUiLHMseCk7Ci0JfQotICAgIH0KLSAgICBpZiAoeCA+IDAp IHsJCQkvKiBBc2N0aW1lIGZvcm1hdCAqLwotICAgICAgICBpbnQgeHg7Ci0gICAgICAgIHN0cm5j cHkoeWVhcmJ1ZixzICsgbGVuIC0gNCw0KTsKLSAgICAgICAgeWVhcmJ1Zls0XSA9IE5VTDsKLSAg ICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLSAgICAgICAgICB0bXBidWZbaV0gPSBzW2kr NF07Ci0gICAgICAgIHRtcGJ1ZlszXSA9IE5VTDsKLQlpZiAoKHh4ID0gbG9va3VwKGNtb250aHMs dG1wYnVmLDEyLE5VTEwpKSA8IDApIHsKLQkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlk IG1vbnRoIik7Ci0JICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkg ICAgcmV0dXJuKE5VTEwpOwotCX0KLSAgICAgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGFzY3Rp bWUgbW9udGgiLCIiLHh4KTsKLSAgICAgICAgbW9uYnVmWzBdID0gKHh4IC8gMTApICsgJzAnOyAK LSAgICAgICAgbW9uYnVmWzFdID0gKHh4ICUgMTApICsgJzAnOyAKLSAgICAgICAgbW9uYnVmWzJd ID0gTlVMOwotICAgICAgICBkYXlidWZbMF0gPSAoc1s4XSA9PSAnICcgPyAnMCcgOiBzWzhdKTsK LSAgICAgICAgZGF5YnVmWzFdID0gc1s5XTsKLSAgICAgICAgZGF5YnVmWzJdID0gTlVMOwotCXhi dWZbMF0gPSBTUDsKLSAgICAgICAgZm9yIChpID0gMTE7IGkgPCAxOTsgaSsrKQotICAgICAgICAg IHhidWZbaS0xMF0gPSBzW2ldOwotICAgICAgICB4YnVmWzldID0gTlVMOwotCWNrbWFrbXNnKHpi dWYsMTgseWVhcmJ1Zixtb25idWYsZGF5YnVmLHhidWYpOwotCWRlYnVnKEYxMTAsImNtY3Z0ZGF0 ZSBhc2N0aW1lIG9rIix6YnVmLDApOwotCWlmIChsZW4gPT0gMjQpIHsKLQkgICAgZHAgPSB6YnVm OwotCSAgICBnb3RvIHhjdnRkYXRlOwotCX0gZWxzZSB7Ci0JICAgIGludCBuOwotCSAgICBuID0g Y2ttYWttc2coeWJ1ZixEQVRFQlVGTEVOLTQsemJ1ZiwiICIsTlVMTCxOVUxMKTsKLQkgICAgeWJ1 ZltuKytdID0gc1syMF07Ci0JICAgIHlidWZbbisrXSA9IHNbMjFdOwotCSAgICB5YnVmW24rK10g PSBzWzIyXTsKLQkgICAgeWJ1ZltuKytdID0gTlVMOwotCSAgICBja3N0cm5jcHkoeGJ1Zix5YnVm LERBVEVCVUZMRU4pOwotCSAgICBzID0geGJ1ZjsKLQkgICAgaXNsZXR0ZXIgPSAwOwotCX0KLSAg ICB9Ci0KLS8qIENoZWNrIGZvciBkYXkgb2Ygd2VlayAqLwotCi0gICAgcCA9IHM7Ci0gICAgd2hp bGUgKCpwID09IFNQKSBwKys7Ci0gICAgZG93ID0gLTE7Ci0gICAgaWYgKCpwKSB7Ci0JcDIgPSBw OwotCWNjID0gTlVMOwotCXdoaWxlICgxKSB7Ci0JICAgIGlmICgqcDIgPT0gJywnIHx8ICpwMiA9 PSBTUCB8fCAhKnAyKSB7Ci0JCWNjID0gKnAyOwkJLyogU2F2ZSBicmVhayBjaGFyICovCi0JCSpw MiA9IE5VTDsJCS8qIE5VTCBpdCBvdXQgKi8KLQkJcDMgPSBwMjsJCS8qIFJlbWVtYmVyIHRoaXMg c3BvdCAqLwotCQlpZiAoKGRvdyA9IGxvb2t1cChkYXlzb2Z3ZWVrLHAsNyxOVUxMKSkgPiAtMSkg ewotCQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIGRvdyIscCxkb3cpOwotCQkgICAgcyA9IHAy OwotCQkgICAgaWYgKGNjID09ICcsJyB8fCBjYyA9PSBTUCkgeyAvKiBQb2ludCB0byBuZXh0IGZp ZWxkICovCi0JCQlzKys7Ci0JCQl3aGlsZSAoKnMgPT0gU1ApIHMrKzsKLQkJICAgIH0KLQkJICAg IHAgPSBzOwotCQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIGRvdyBuZXcgcCIscCxkb3cpOwot CQkgICAgYnJlYWs7Ci0JCX0gZWxzZSBpZiAoaXNhbHBoYSgqcCkgJiYgY2MgPT0gJywnKSB7Ci0J CSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIlVucmVjb2duaXplZCBkYXkgb2Ygd2VlayIpOwotCQkg ICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCQkgICAgcmV0dXJuKE5V TEwpOwotCQl9IGVsc2UgewotCQkgICAgKnAzID0gY2M7Ci0JCSAgICBicmVhazsKLQkJfQotCSAg ICB9Ci0JICAgIHAyKys7Ci0JfQotICAgIH0KLSAgICBsZW4gPSBzdHJsZW4ocyk7CQkvKiBVcGRh dGUgbGVuZ3RoICovCi0gICAgZGVidWcoRjExMSwiY21jdnRkYXRlIHMiLHMsbGVuKTsKLQotICAg IGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBkb3ciLHMsZG93KTsKLSAgICBpZiAoZG93ID4gLTEpIHsJ CQkvKiBIYXZlIGEgZGF5LW9mLXdlZWsgbnVtYmVyICovCi0JbG9uZyB6ejsgaW50IG4sIGo7Ci0J enogPSBtamQoenpuZGF0ZSgpKTsJCS8qIEdldCB0b2RheSdzIE1KRCAqLwotCWRlYnVnKEYxMTEs ImNtY3Z0ZGF0ZSB6eiIsIiIsenopOwotCWogPSAoKChpbnQpKHp6ICUgN0wpKSArIDMpICUgNzsg LyogVG9kYXkncyBkYXktb2Ytd2VlayBudW1iZXIgKi8KLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUg aiIsIiIsaik7Ci0JaGggPSAwOwkJCQkvKiBJbml0IHRpbWUgdG8gbWlkbmlnaHQgKi8KLQltbSA9 IDA7Ci0Jc3MgPSAwOwotCWlmIChqID09IGRvdykgewotCSAgICBja3N0cm5jcHkoeXl5eW1tZGQs enpuZGF0ZSgpLFlZWVlNTUREKTsKLQkgICAgeWVhciA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkgICAg biA9IGRvdyAtIGo7CQkvKiBEYXlzIGZyb20gbm93ICovCi0JICAgIGlmIChkb3cgPCBqKQotCSAg ICAgIG4gKz0gNzsKLQkgICAgaWYgKG4gPCAwKSBuICs9IDc7CQkvKiBBZGQgdG8gTUpEICovCi0J ICAgIHp6ICs9IG47Ci0JICAgIGNrc3RybmNweSh5eXl5bW1kZCxtamQyZGF0ZSh6eiksWVlZWU1N REQpOyAvKiBOZXcgZGF0ZSAqLwotCSAgICB5ZWFyID0gTlVMTDsKLQl9Ci0JZGVidWcoRjExMSwi Y21jdnRkYXRlIEEiLHl5eXltbWRkLGxlbik7Ci0JaWYgKGxlbiA9PSAwKSB7CQkJLyogTm8gbW9y ZSBmaWVsZHMgYWZ0ZXIgdGhpcyAqLwotCSAgICBja21ha21zZyh6YnVmLDE4LHl5eXltbWRkLCIg MDA6MDA6MDAiLE5VTEwsTlVMTCk7Ci0JICAgIGRwID0gemJ1ZjsKLQkgICAgZ290byB4Y3Z0ZGF0 ZTsKLQl9Ci0JaXNsZXR0ZXIgPSAwOwotCWlmIChyZGlnaXRzKHApICYmIGxlbiA8IDgpCS8qIE5l eHQgZmllbGQgaXMgdGltZT8gKi8KLQkgIGdvdG8gZG90aW1lOwkJCS8qIElmIHNvIGdvIHN0cmFp Z2h0IHRvIHRpbWUgc2VjdGlvbiAqLwotCWlmIChpc2RpZ2l0KCpwKSkgewotCSAgICBpZiAoKihw KzEpID09ICc6JykKLQkgICAgICBnb3RvIGRvdGltZTsKLQkgICAgZWxzZSBpZiAoaXNkaWdpdCgq KHArMSkpICYmICgqKHArMikgPT0gJzonKSkKLQkgICAgICBnb3RvIGRvdGltZTsKLQl9Ci0gICAg fQotICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBCIHMiLHMsZG93KTsKLSAgICBkZWJ1ZyhGMTEx LCJjbWN2dGRhdGUgQiBwIixwLGRvdyk7Ci0KLSAgICBpZiAoKnMgPT0gJysnIHx8ICpzID09ICct JykgewkvKiBEZWx0YSB0aW1lIG9ubHkgLSBza2lwIGFoZWFkLiAqLwotCXAgPSBzOwotCWdvdG8g ZGVsdGE7Ci0gICAgfQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFdoYXQgaXMgdGhlIHB1cnBvc2Ug b2YgdGhpcz8gIEl0IGJyZWFrcyBwYXJzaW5nIG9mIGVtYWlsIGRhdGVzIGxpa2UKLSAgIldlZCwg MTMgRmViIDIwMDIgMTc6NDM6MDIgLTA4MDAgKFBTVCkiLiAgUmVtb3ZpbmcgdGhpcyBjb2RlIGZp eGVzIHRoZQotICBwcm9ibGVtIGFuZCBLZXJtaXQgc3RpbGwgcGFzc2VzIHRoZSAnZGF0ZXMnIHNj cmlwdC4KLSAgLSBmZGMsIFNhdCBOb3YgMjYgMTA6NTI6NDUgMjAwNS4KLSovCi0gICAgaWYgKGRv dyA+IC0xKSB7Ci0JLyogRGF5IG9mIHdlZWsgZ2l2ZW4gZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRo YXQgaXMgbm90IGEgdGltZSAqLwotCS8qIG9yIGEgZGVsdGEgc28gaXQgY2FuJ3QgYmUgdmFsaWQg Ki8KLQltYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQgdG9rZW5zIGFmdGVyIGRheSBvZiB3ZWVr Iik7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRlIGZhaWwiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJu KE5VTEwpOwotICAgIH0KLSNlbmRpZgkvKiBDT01NRU5UICovCi0KLSAgICAvKiBIYW5kbGUgInRv ZGF5IiwgInllc3RlcmRheSIsICJ0b21vcnJvdyIsIGFuZCArLy0gbiB1bml0cyAqLwotCi0gICAg aWYgKGNrc3RyY2hyKCJUdFl5Tm4iLHNbMF0pKSB7Ci0JaW50IGksIGssIG4sIG1pbnVzID0gMDsK LQljaGFyIGM7Ci0JbG9uZyBqZDsKLQlqZCA9IG1qZChja2RhdGUoKSk7Ci0JZGVidWcoRjExMSwi Y21jdnRkYXRlIG1qZCIscyxqZCk7Ci0KLQkvKiBTeW1ib2xpYyBkYXRlOiBUT0RBWSwgVE9NT1JS T1csIGV0Yy4uLj8gKi8KLQotCXMyID0gczsJCQkJLyogRmluZCBlbmQgb2Yga2V5d29yZCAqLwot CWkgPSAwOwotCXdoaWxlIChpc2FscGhhKCpzMikpIHsJCS8qIGFuZCBnZXQgaXRzIGxlbmd0aCAq LwotCSAgICBpKys7Ci0JICAgIHMyKys7Ci0JfQotCWMgPSAqczI7CQkJLyogWmFwIGJ1dCBzYXZl IGRlbGltaXRlciAqLwotCSpzMiA9IE5VTDsKLQlrID0gbG9va3VwKHN5bWRheXRhYixzLG5zeW1k YXlzLE5VTEwpOyAvKiBMb29rIHVwIGtleXdvcmQgKi8KLQkqczIgPSBjOwkJCS8qIFJlcGxhY2Ug ZGVsaW1pdGVyICovCi0JaWYgKGsgPCAwKQkJCS8qIEtleXdvcmQgbm90IGZvdW5kICovCi0JICBn b3RvIG5vcm1hbDsKLQlzMyA9ICZzW2ldOwotCXdoaWxlICgqczMgPT0gU1ApCQkvKiBTa2lwIHdo aXRlc3BhY2UgKi8KLQkgIHMzKys7Ci0JaWYgKCpzMyA9PSAnXycgfHwgKnMzID09ICc6JykKLQkg IHMzKys7Ci0KLQlzd2l0Y2ggKGspIHsJCQkvKiBIYXZlIGtleXdvcmQgKi8KLQkgIGNhc2UgU1lN X05PVzoJCQkvKiBOT1cgKi8KLQkgICAgY2tzdHJuY3B5KHlidWYsY2tkYXRlKCksREFURUJVRkxF Tik7Ci0JICAgIGNrc3RybmNweSh5eXl5bW1kZCx5YnVmLFlZWVlNTUREKTsKLQkgICAgeWVhciA9 IE5VTEw7Ci0JICAgIGlmICgqczMpIHsJCQkvKiBObyBvdmVyd3JpdGluZyBjdXJyZW50IHRpbWUu ICovCi0JCWNrc3RybmNhdCh5YnVmLCIgIixEQVRFQlVGTEVOKTsKLQkJY2tzdHJuY2F0KHlidWYs czMsREFURUJVRkxFTik7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBkZWZhdWx0OgkJCS8qIFll c3RlcmRheSwgVG9kYXksIGFuZCBUb21vcnJvdyAqLwotCSAgICBpZiAoayA9PSBTWU1fVE9NTykg ewkvKiBUT01PUlJPVyAqLwotCQlzdHJuY3B5KHlidWYsbWpkMmRhdGUoamQrMSksOCk7Ci0JICAg IH0gZWxzZSBpZiAoayA9PSBTWU1fWUVTVCkgewkvKiBZRVNURVJEQVkgKi8KLQkJc3RybmNweSh5 YnVmLG1qZDJkYXRlKGpkLTEpLDgpOwotCSAgICB9IGVsc2UgewkJCS8qIFRPREFZICovCi0JCXN0 cm5jcHkoeWJ1Zixja2RhdGUoKSw4KTsKLQkgICAgfQotCSAgICBzdHJuY3B5KHlidWYrOCwiIDAw OjAwOjAwIixEQVRFQlVGTEVOLTgpOyAvKiBEZWZhdWx0IHRpbWUgaXMgMCAqLwotCSAgICBja3N0 cm5jcHkoeXl5eW1tZGQseWJ1ZixZWVlZTU1ERCk7Ci0JICAgIHllYXIgPSBOVUxMOwotCSAgICBp ZiAoKnMzKSB7CQkJLyogSWYgc29tZXRoaW5nIGZvbGxvd3Mga2V5d29yZC4uLiAqLwotCQlpZiAo aXNkaWdpdCgqczMpKSB7CS8qIFRpbWUgLSBvdmVyd3JpdGUgZGVmYXVsdCB0aW1lICovCi0JCSAg ICBzdHJuY3B5KHlidWYrOCxzK2ksREFURUJVRkxFTi04KTsKLQkJfSBlbHNlIHsJCS8qIFNvbWV0 aGluZyBlbHNlLCBrZWVwIGRlZmF1bHQgdGltZSAqLwotCQkgICAgY2tzdHJuY2F0KHlidWYsIiAi LERBVEVCVUZMRU4pOyAvKiBhbmQgYXBwZW5kICovCi0JCSAgICBja3N0cm5jYXQoeWJ1ZixzMyxE QVRFQlVGTEVOKTsgLyogd2hhdGV2ZXIgd2UgaGF2ZSAqLwotCQl9Ci0JICAgIH0KLQl9Ci0JcyA9 IHlidWY7CQkJLyogUG9pbnQgdG8gcmV3cml0dGVuIGRhdGUtdGltZSAqLwotCWxlbiA9IHN0cmxl bihzKTsJCS8qIFVwZGF0ZSBsZW5ndGggKi8KLQlpc2xldHRlciA9IDA7CQkJLyogQ2FuY2VsIHRo aXMgKi8KLSAgICB9Ci0KLS8qIFJlZ3VsYXIgZnJlZS1mb3JtYXQgbm9uLXN5bWJvbGljIGRhdGUg Ki8KLQotICBub3JtYWw6Ci0KLSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFMIixzLGxl bik7Ci0gICAgZGVidWcoRjExMSwiY21jdnRkYXRlIGRvdyIscyxkb3cpOwotICAgIGlmICh5eXl5 bW1kZFswXSAmJiAheWVhcikgewotCWNrc3RybmNweSh5ZWFyYnVmLHl5eXltbWRkLDUpOwotCWNr c3RybmNweShtb25idWYsJnl5eXltbWRkWzRdLDMpOwotCWNrc3RybmNweShkYXlidWYsJnl5eXlt bWRkWzZdLDMpOwotCXllYXIgPSB5ZWFyYnVmOwotCW1vbnRoID0gbW9uYnVmOwotCWRheSA9IGRh eWJ1ZjsKLQluZGF5ID0gYXRvaShkYXlidWYpOwotICAgIH0KLSAgICBpZiAoaXNkaWdpdChzWzBd KSkgewkJLyogVGltZSB3aXRob3V0IGRhdGU/ICovCi0JcCA9IHM7Ci0JaWYgKHNbMV0gPT0gJzon KSB7Ci0JICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBOT1JNQUwgWDEiLHMsbGVuKTsKLQkgICAg Z290byBkb3RpbWU7Ci0JfSBlbHNlIGlmIChsZW4gPiAxICYmIGlzZGlnaXQoc1sxXSkgJiYgc1sy XSA9PSAnOicpIHsKLQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIE5PUk1BTCBYMiIscyxsZW4p OwotCSAgICBnb3RvIGRvdGltZTsKLQl9IGVsc2UgaWYgKHJkaWdpdHMocykgJiYgbGVuIDwgOCkg ewotCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFMIFgzIixzLGxlbik7Ci0JICAgIGdv dG8gZG90aW1lOwotCX0KLSAgICB9Ci0gICAgaWYgKGxlbiA+PSA4ICYmIGlzZGlnaXQoKnMpKSB7 CS8qIENoZWNrIGZpcnN0IGZvciB5eXl5bW1kZCogKi8KLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUg Tk9STUFMIEEiLHMsbGVuKTsKLQljYyA9IHNbOF07Ci0Jc1s4XSA9IE5VTDsJCQkvKiBJc29sYXRl IGZpcnN0IDggY2hhcmFjdGVycyAqLwotCWlmIChyZGlnaXRzKHMpKSB7Ci0JICAgIC8qIEhhdmUg dmFsaWQgdGltZSBzZXBhcmF0b3I/ICovCi0JICAgIHAyID0gY2MgPyBja3N0cmNocigiIFR0Xy06 IixjYykgOiBOVUxMOwotCSAgICBpZiAoIWNjIHx8IHAyKSB7Ci0JCWNrc3RybmNweSh5eXl5bW1k ZCxzLFlZWVlNTUREKTsJLyogVmFsaWQgc2VwYXJhdG9yICovCi0JCXllYXIgPSBOVUxMOwotCQlz ICs9IDg7CQkJICAgICAgICAvKiBvciB0aW1lIG5vdCBnaXZlbiAqLwotCQlpZiAoY2MpIHMrKzsJ CSAgICAgICAgLyogS2VlcCBkYXRlICovCi0JCXAgPSBzOwkJCSAgICAgICAgLyogYW5kIGdvIGhh bmRsZSB0aW1lICovCi0JCWdvdG8gZG90aW1lOwotCSAgICB9IGVsc2UgaWYgKCFwMikgewotCQlp ZiAoaXNkaWdpdChjYykpCi0JCSAgbWFrZXN0cigmY21kYXRlbXNnLCJOdW1lcmljIGRhdGUgdG9v IGxvbmciKTsKLQkJZWxzZQotCQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCBkYXRlLXRp bWUgc2VwYXJhdG9yIik7Ci0JCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsK LQkJcmV0dXJuKE5VTEwpOwotCSAgICB9Ci0JfQotCXNbOF0gPSBjYzsJCQkvKiBQdXQgdGhpcyBi YWNrISAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFMIG5vbi15eXl5 bW1kZCIscyxsZW4pOwotCi0gICAgLyogRnJlZS1mb3JtYXQgZGF0ZSAtLSBmaWd1cmUgaXQgb3V0 ICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgaWYgKCpzICYmICFpc2RpZ2l0KCpzKSkgewotCW1h a2VzdHIoJmNtZGF0ZW1zZywiVW5yZWNvZ25pemVkIHdvcmQgaW4gZGF0ZSIpOwotCWRlYnVnKEYx MTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQkJLyogRmllbGQg dHlwZXMgKi8KLSAgICAgIGZ0W2ldID0gLTE7Ci0gICAgZmxkW2kgPSAwXSA9IChwID0gcyk7CQkv KiBGaXJzdCBmaWVsZCAqLwotICAgIHdoaWxlICgqcCkgewkJCS8qIEdldCBuZXh0IHR3byBmaWVs ZHMgKi8KLQlpZiAoaXNkYXRlc2VwKCpwKSkgewkJLyogSGF2ZSBhIGRhdGUgc2VwYXJhdG9yICov Ci0JICAgIGlmIChpID09IDApIHsKLQkJZGF0ZXNlcCA9ICpwOwotCSAgICB9IGVsc2UgaWYgKGkg PT0gMSAmJiAqcCAhPSBkYXRlc2VwKSB7Ci0JCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW5jb25zaXN0 ZW50IGRhdGUgc2VwYXJhdG9ycyIpOwotCQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1z ZywtMSk7Ci0JCXJldHVybihOVUxMKTsKLQkgICAgfQotCSAgICAqcCsrID0gTlVMOwkJCS8qIFJl cGxhY2UgYnkgTlVMICovCi0JICAgIGlmICgqcCkgewkJCS8qIE5vdyB3ZSdyZSBhdCB0aGUgbmV4 dCBmaWVsZCAqLwotCQl3aGlsZSAoKnAgPT0gU1ApIHArKzsJLyogU2tpcCBsZWFkaW5nIHNwYWNl cyAqLwotCQlpZiAoISpwKSBicmVhazsJCS8qIE1ha2Ugc3VyZSB3ZSBzdGlsbCBoYXZlIHNvbWV0 aGluZyAqLwotCQlpZiAoaSA9PSAyKQkJLyogTGFzdCBvbmU/ICovCi0JCSAgYnJlYWs7Ci0JCWZs ZFsrK2ldID0gcDsJCS8qIE5vLCByZWNvcmQgcG9pbnRlciB0byB0aGlzIG9uZSAqLwotCSAgICB9 IGVsc2UgewotCQlicmVhazsKLQkgICAgfQkgICAgCi0JfSBlbHNlIGlmICgoKnAgPT0gJ1QnIHx8 ICpwID09ICd0JykgJiYgaXNkaWdpdCgqKHArMSkpKSB7IC8qIFRpbWUgKi8KLQkgICAgKnArKyA9 IE5VTDsKLQkgICAgYnJlYWs7Ci0JfSBlbHNlIGlmICgqcCA9PSAnOicpIHsKLQkgICAgaWYgKGkg PT0gMCAmJiBwID09IHMpIHsKLQkJbm9kYXRlID0gMTsKLQkJYnJlYWs7Ci0JICAgIH0gZWxzZSBp ZiAoaSAhPSAwKSB7CS8qIEFmdGVyIGEgZGF0ZSAqLwotCQlpZiAoaSA9PSAyKSB7CQkvKiBPSyBh cyBkYXRlLXRpbWUgc2VwYXJhdG9yIChWTVMpICovCi0JCSAgICAqcCsrID0gTlVMOwotCQkgICAg YnJlYWs7Ci0JCX0KLQkJaWYgKGkgPCAyKQotCQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiVG9vIGZl dyBmaWVsZHMgaW4gZGF0ZSIpOwotCQllbHNlCi0JCSAgbWFrZXN0cigmY21kYXRlbXNnLCJNaXNw bGFjZWQgdGltZSBzZXBhcmF0b3IiKTsKLQkJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVt c2csLTEpOwotCQlyZXR1cm4oTlVMTCk7Ci0JICAgIH0KLQkgICAgbm9kYXRlID0gMTsJCQkvKiBP ciB3aXRob3V0IGEgZGF0ZSAqLwotCSAgICBicmVhazsKLQl9Ci0JcCsrOwotICAgIH0KLSAgICBp ZiAocCA+IHMgJiYgaSA9PSAwKQkJLyogTWFrZSBzdXJlIHdlIGhhdmUgYSBkYXRlICovCi0gICAg ICBub2RhdGUgPSAxOwkJCS8qIE5vIGRhdGUuICovCi0KLSAgICBpZiAobm9kYXRlICYmIGRvdyA+ IC0xKSB7CQkvKiBIYXZlIGltcGxpZWQgZGF0ZSBmcm9tIERPVz8gKi8KLQlnb3RvIGRvdGltZTsJ CQkvKiBVc2UsIHVzZSB0aGF0LCBnbyBkbyB0aW1lLiAqLwotCi0gICAgfSBlbHNlIGlmIChub2Rh dGUpIHsJCS8qIE5vIGRhdGUgYW5kIG5vIGltcGxpZWQgZGF0ZSAqLwotCWNoYXIgKnRtcCA9IE5V TEw7CQkvKiBTdWJzdGl0dXRlIHRvZGF5J3MgZGF0ZSAqLwotCXp0aW1lKCZ0bXApOwotCWlmICgh dG1wKQotCSAgdG1wICA9ICIiOwotCWlmICghKnRtcCkgewotCSAgICBtYWtlc3RyKCZjbWRhdGVt c2csIlByb2JsZW0gc3VwcGx5aW5nIGN1cnJlbnQgZGF0ZSIpOwotCSAgICBkZWJ1ZyhGMTExLCJj bWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JICAgIHJldHVybihOVUxMKTsKLQl9Ci0JY2tzdHJu Y3B5KGRidWYsdG1wLDI2KTsJCS8qIFJlZm9ybWF0ICovCi0JaWYgKGRidWZbOF0gPT0gU1ApIGRi dWZbOF0gPSAnMCc7Ci0JZmxkWzBdID0gZGJ1Zis4OwkJLyogZGQgKi8KLQlkYnVmWzEwXSA9IE5V TDsKLQlmbGRbMV0gPSBkYnVmKzQ7CQkvKiBtbW0gKi8KLQlkYnVmWzddID0gTlVMOwotCWZsZFsy XSA9IGRidWYrMjA7CQkvKiB5eXl5ICovCi0JZGJ1ZlsyNF0gPSBOVUw7Ci0JaGggPSBhdG9pKCZk YnVmWzExXSk7Ci0JbW0gPSBhdG9pKCZkYnVmWzE0XSk7Ci0Jc3MgPSBhdG9pKCZkYnVmWzE3XSk7 Ci0JcCA9IHM7CQkJCS8qIEJhY2sgdXAgc291cmNlIHBvaW50ZXIgdG8gcmVwYXJzZSAqLwotICAg IH0gZWxzZSBpZiAoaSA8IDIpIHsKLQltYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBmZXcgZmllbGRz IGluIGRhdGUiKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0 dXJuKE5VTEwpOwotICAgIH0KLSAgICAvKiBIYXZlIHRocmVlIGRhdGUgZmllbGRzIC0gc2VlIHdo YXQgdGhleSBhcmUgKi8KLQotICAgIGZvciAoayA9IDAsIGogPSAwOyBqIDwgMzsgaisrKSB7CS8q IEdldCBudW1iZXIgb2Ygbm9uLW51bWVyaWMgZmllbGRzICovCi0JZnRbal0gPSByZGlnaXRzKGZs ZFtqXSk7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRlIGZsZCIsZmxkW2pdLGopOwotCWlmIChmdFtq XSA9PSAwKQotCSAgaysrOwotICAgIH0KLSAgICBrbiA9IGs7CQkJCS8qIEhvdyBtYW55IG51bWVy aWMgZmllbGRzICovCi0gICAgbW9udGggPSBOVUxMOwkJCS8qIFN0cmlrZSBvdXQgZGVmYXVsdCB2 YWx1ZXMgKi8KLSAgICB5ZWFyID0gTlVMTDsKLSAgICBkYXkgPSBOVUxMOwotCi0gICAgaWYgKGsg PT0gMiAmJiBmdFsyXSA+IDApIHsJCS8qIEp1bCAyMCwgMjAwMSAqLwotCWludCB4eDsKLQl4eCA9 IHN0cmxlbihmbGRbMV0pOwotCXAzID0gZmxkWzFdOwotCWlmICh4eCA+IDApIGlmIChwM1t4eC0x XSA9PSAnLCcpIHsKLQkgICAgcDNbeHgtMV0gPSBOVUw7Ci0JICAgIGlmIChyZGlnaXRzKHAzKSkg ewotCQlrID0gMTsJCi0JCWZ0WzFdID0gMTsKLQkgICAgfSBlbHNlIHAzW3h4LTFdID0gJywnOwot CX0KLSAgICB9Ci0gICAgaWYgKGsgPiAxKSB7CQkJLyogV2UgY2FuIGhhdmUgb25seSBvbmUgbm9u LW51bWVyaWMgKi8KLQlpZiAobm9kYXRlKQotCSAgbWFrZXN0cigmY21kYXRlbXNnLCJVbnJlY29n bml6ZWQgd29yZCBpbiBkYXRlIik7IAotCWVsc2UgaWYgKCFmdFsyXSAmJiBpc2RpZ2l0KCooZmxk WzJdKSkpCi0JICBtYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQgZGF0ZS10aW1lIHNlcGFyYXRv ciIpOyAKLQllbHNlCi0JICBtYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBtYW55IG5vbi1udW1lcmlj IGZpZWxkcyBpbiBkYXRlIik7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEp OwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgaWYgKCFmdFswXSkgewotCWsgPSAwOwotICAg IH0gZWxzZSBpZiAoIWZ0WzFdKSB7Ci0JayA9IDE7Ci0gICAgfSBlbHNlIGlmICghZnRbMl0pIHsK LQltYWtlc3RyKCZjbWRhdGVtc2csIk5vbi1kaWdpdCBpbiB0aGlyZCBkYXRlIGZpZWxkIik7Ci0J ZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAg ICB9IGVsc2UKLSAgICAgIGsgPSAtMTsKLQotICAgIGlmIChrID4gLTEpIHsKLQlpZiAoKHggPSBs b29rdXAoY21vbnRocyxmbGRba10sMTIsTlVMTCkpIDwgMCkgewotCSAgICBtYWtlc3RyKCZjbWRh dGVtc2csIlVua25vd24gbW9udGgiKTsKLQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRh dGVtc2csLTEpOwotCSAgICByZXR1cm4oTlVMTCk7Ci0JfQotCXNwcmludGYodG1wYnVmLCIlMDJk Iix4KTsKLQltb250aCA9IHRtcGJ1ZjsKLSAgICB9Ci0gICAgZjJsZW4gPSBzdHJsZW4oZmxkWzJd KTsJCS8qIExlbmd0aCBvZiAzcmQgZmllbGQgKi8KLQotICAgIGlmIChrID09IDApIHsJCQkvKiBt b250aG5hbWUgZGQsIHl5eXkgKi8KLQlkYXkgPSBmbGRbMV07Ci0JeWVhciA9IGZsZFsyXTsKLSAg ICB9IGVsc2UgaWYgKCgoaW50KXN0cmxlbihmbGRbMF0pID09IDQpKSB7IC8qIHl5eXkteHgtZGQg Ki8KLQl5ZWFyID0gZmxkWzBdOwotCWRheSA9IGZsZFsyXTsKLQlpZiAoIW1vbnRoKQotCSAgbW9u dGggPSBmbGRbMV07CQkvKiB5eXl5LW1tLWRkICovCi0gICAgfSBlbHNlIGlmIChmMmxlbiA9PSA0 KSB7CQkvKiB4eC14eC15eXl5ICovCi0JeWVhciA9IGZsZFsyXTsKLQlpZiAobW9udGgpIHsJCQkv KiBkZC1uYW1lLXl5eXkgKi8KLQkgICAgZGF5ID0gZmxkWzBdOwotCX0gZWxzZSB7CQkJLyogeHgt eHgteXl5eSAqLwotCSAgICBpbnQgZjAsIGYxOwotCSAgICBmMCA9IGF0b2koZmxkWzBdKTsKLQkg ICAgZjEgPSBhdG9pKGZsZFsxXSk7Ci0JICAgIGlmICgoKGYwID4gMTIpICYmIChmMSA8PSAxMikp IHx8IChmMSA8PSAxMiAmJiBmMCA9PSBmMSkpIHsKLQkJZGF5ID0gZmxkWzBdOwkJLyogbW0tZGQt eXl5eSAqLwotCQltb250aCA9IGZsZFsxXTsKLQkgICAgfSBlbHNlIGlmICgoZjAgPD0gMTIpICYm IChmMSA+IDEyKSkgewotCQlpZiAoIXJkaWdpdHMoZmxkWzFdKSkgewotCQkgICAgbWFrZXN0cigm Y21kYXRlbXNnLCJEYXkgbm90IG51bWVyaWMiKTsKLQkJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0 ZSIsY21kYXRlbXNnLC0xKTsKLQkJICAgIHJldHVybihOVUxMKTsKLQkJfSBlbHNlIHsKLQkJICAg IGRheSA9IGZsZFsxXTsJLyogZGQtbW0teXl5eSAqLwotCQl9Ci0JCW1vbnRoID0gZmxkWzBdOwot CSAgICB9IGVsc2UgewotCQlpZiAoIWYwIHx8ICFmMSkKLQkJICBtYWtlc3RyKCZjbWRhdGVtc2cs IkRheSBvciBtb250aCBvdXQgb2YgcmFuZ2UiKTsKLQkJZWxzZQotCQkgIG1ha2VzdHIoJmNtZGF0 ZW1zZywiRGF5IGFuZCBtb250aCBhcmUgYW1iaWd1b3VzIik7Ci0JCWRlYnVnKEYxMTEsImNtY3Z0 ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkJcmV0dXJuKE5VTEwpOwotCSAgICB9Ci0JfQotICAgIH0g ZWxzZSBpZiAoKGYybGVuIDwgNCkgJiYJCS8qIGRkIG1tbSB5eSAoUkZDODIyKSAqLwotCSAgICAg ICAhcmRpZ2l0cyhmbGRbMV0pICYmCS8qIG1pZGRsZSBmaWVsZCBpcyBtb250aG5hbWUgKi8KLQkg ICAgICAgcmRpZ2l0cyhmbGRbMl0pKSB7Ci0JaW50IHRtcHllYXI7Ci0JZGF5ID0gZmxkWzBdOwot CWlmICghZmxkWzJdWzFdKSB7Ci0JICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiVG9vIGZldyBkaWdp dHMgaW4geWVhciIpOwotCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7 Ci0JICAgIHJldHVybihOVUxMKTsKLQl9Ci0JdG1weWVhciA9IGF0b2koZmxkWzJdKTsKLQlpZiAo dG1weWVhciA8IDUwKQkJLyogUkZDIDI4MjIgd2luZG93aW5nICovCi0JICB0bXB5ZWFyICs9IDIw MDA7Ci0JZWxzZQkJCQkvKiBUaGlzIGluY2x1ZGVzIDMtZGlnaXQgeWVhcnMuICovCi0JICB0bXB5 ZWFyICs9IDE5MDA7Ci0JeWVhciA9IGNraXRvYSh0bXB5ZWFyKTsKLQotICAgIH0gZWxzZSBpZiAo KGYybGVuIDwgNCkgJiYgKGsgPCAwKSAmJiAoKGludClzdHJsZW4oZmxkWzBdKSA8IDQpKSB7Ci0J bWFrZXN0cigmY21kYXRlbXNnLCJBbWJpZ3VvdXMgbnVtZXJpYyBkYXRlIik7Ci0JZGVidWcoRjEx MSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9IGVsc2Ug aWYgKChmMmxlbiA+IDQpICYmIGZ0WzJdKSB7Ci0JbWFrZXN0cigmY21kYXRlbXNnLCJUb28gbWFu eSBkaWdpdHMgaW4geWVhciIpOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0x KTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfSBlbHNlIHsKLQltYWtlc3RyKCZjbWRhdGVtc2csIlVu ZXhwZWN0ZWQgZGF0ZSBmb3JtYXQiKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1z ZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICB4ID0gYXRvaShtb250aCk7Ci0gICAg c3ByaW50Zih0bXBidWYsIiUwMmQiLHgpOwkJLyogMi1kaWdpdCBudW1lcmljIG1vbnRoICovCi0K LS8qCi0gICBzdGF0ZSA9IDEgPSBob3VycwotICAgc3RhdGUgPSAyID0gbWludXRlcwotICAgc3Rh dGUgPSAzID0gc2Vjb25kcwotICAgc3RhdGUgPSA0ID0gZnJhY3Rpb25zIG9mIHNlY29uZHMKLSov Ci0KLSAgZG90aW1lOgotICAgIGlmIChpc2xldHRlciAmJiAocyA9PSBwKSkgewotCW1ha2VzdHIo JmNtZGF0ZW1zZywiVW5rbm93biBkYXRlLXRpbWUgd29yZCIpOwotCWRlYnVnKEYxMTEsImNtY3Z0 ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIGlmICgheWVh ciAmJiB5eXl5bW1kZFswXSkgewotCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBkb3RpbWUgeXl5eW1t ZGQiLHl5eXltbWRkLDApOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JICB5ZWFyYnVmW2ld ID0geXl5eW1tZGRbaV07Ci0JeWVhcmJ1Zls0XSA9IE5VTDsKLQltb25idWZbMF0gPSB5eXl5bW1k ZFs0XTsKLQltb25idWZbMV0gPSB5eXl5bW1kZFs1XTsKLQltb25idWZbMl0gPSBOVUw7Ci0JZGF5 YnVmWzBdID0geXl5eW1tZGRbNl07Ci0JZGF5YnVmWzFdID0geXl5eW1tZGRbN107Ci0JZGF5YnVm WzJdID0gTlVMOwotCWRheSA9IGRheWJ1ZjsKLQluZGF5ID0gYXRvaShkYXlidWYpOwotCW1vbnRo ID0gbW9uYnVmOwotCXllYXIgPSB5ZWFyYnVmOwotICAgIH0KLSAgICBpZiAoIXllYXIpIHsKLQlt YWtlc3RyKCZjbWRhdGVtc2csIkludGVybmFsIGVycm9yIC0gZGF0ZSBub3QgZGVmYXVsdGVkIik7 Ci0JZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsK LSAgICB9Ci0gICAgLyogR2V0IGhlcmUgd2l0aCBkYXksIG1vbnRoLCBhbmQgeWVhciBzZXQgKi8K LSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgZG90aW1lIGRheSIsZGF5LDApOwotICAgIGRlYnVn KEYxMTAsImNtY3Z0ZGF0ZSBkb3RpbWUgbW9udGgiLG1vbnRoLDApOwotICAgIGRlYnVnKEYxMTAs ImNtY3Z0ZGF0ZSBkb3RpbWUgeWVhciIseWVhciwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRh dGUgZG90aW1lIHMiLHMsMCk7Ci0gICAgZGVidWcoRjExMCwiY21jdnRkYXRlIGRvdGltZSBwIixw LDApOwotICAgIHggPSBhdG9pKG1vbnRoKTsKLSAgICBpZiAoeCA+IDEyIHx8IHggPCAxKSB7Ci0J bWFrZXN0cigmY21kYXRlbXNnLCJNb250aCBvdXQgb2YgcmFuZ2UiKTsKLQlkZWJ1ZyhGMTExLCJj bWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBuZGF5 ICA9IGF0b2koZGF5KTsKLSAgICBpID0gbWRheXNbeF07Ci0gICAgaWYgKHggPT0gMikgaWYgKGlz bGVhcChhdG9pKHllYXIpKSkgaSsrOwotICAgIGlmIChuZGF5ID4gaSB8fCBuZGF5IDwgMSkgewot CW1ha2VzdHIoJmNtZGF0ZW1zZywiRGF5IG91dCBvZiByYW5nZSIpOwotCWRlYnVnKEYxMTEsImNt Y3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIGlmICgh KnAgJiYgdCA9PSAwKSB7Ci0Jc3ByaW50Zih6YnVmLCIlMDRkJTAyZCUwMmQiLGF0b2koeWVhciks YXRvaShtb250aCksbmRheSk7CQotCWRwID0gemJ1ZjsKLQlnb3RvIHhjdnRkYXRlOwotICAgIH0K LSAgICBpZiAoKnAgPT0gJysnIHx8ICpwID09ICctJykgewkvKiBHTVQgb2Zmc2V0IHdpdGhvdXQg YSB0aW1lICovCi0JaGggPSAwOwkJCQkvKiBzbyBkZWZhdWx0IHRpbWUgdG8gMDA6MDA6MDAgKi8K LQltbSA9IDA7Ci0Jc3MgPSAwOwotCWdvdG8gY210aW1lem9uZTsJCS8qIGFuZCBnbyBkbyB0aW1l em9uZSAqLwotICAgIH0KLSAgICBpZiAoKnAgJiYgIWlzZGlnaXQoKnApICYmICpwICE9ICc6Jykg ewotCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCB0aW1lIik7Ci0JZGVidWcoRjExMSwiY21j dnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgc3ByaW50 Zih5eXl5bW1kZCwiJXMlcyUwMmQiLHllYXIsbW9udGgsbmRheSk7IC8qIGZvciB0eiBjYWxjdWxh dGlvbnMuLi4gKi8KLQotICAgIHN0YXRlID0gMTsJCQkJLyogSW5pdGlhbGl6ZSB0aW1lLXBhcnNp bmcgRlNBICovCi0gICAgaGggPSAwOwkJCQkvKiBob3VycyAqLwotICAgIG1tID0gMDsJCQkJLyog bWludXRlcyAqLwotICAgIHNzID0gMDsJCQkJLyogc2Vjb25kcyAqLwotICAgIGZmID0gLTE7CQkJ CS8qIGZyYWN0aW9uICovCi0gICAgZCA9IDA7CQkJCS8qIERpZ2l0IGNvdW50ZXIgKi8KLSAgICBw MiA9IHA7CQkJCS8qIFByZWxpbWluYXJ5IGRpZ2l0IGNvdW50Li4uICovCi0gICAgd2hpbGUgKGlz ZGlnaXQoKnAyKSkgewotCWQrKzsKLQlwMisrOwotICAgIH0KLSAgICBpZiAoZCA+IDYpIHsKLQlt YWtlc3RyKCZjbWRhdGVtc2csIlRvbyBtYW55IHRpbWUgZGlnaXRzIik7Ci0JZGVidWcoRjExMSwi Y21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgZCA9 IChkICYgMSAmJiAqcDIgIT0gJzonKSA/IDEgOiAwOwkvKiBPZGQgaW1wbGllcyBsZWFkaW5nICcw JyAqLwotCi0gICAgd2hpbGUgKCpwKSB7CQkJLyogR2V0IHRoZSB0aW1lLCBpZiBhbnkgKi8KLQlp ZiAoaXNkaWdpdCgqcCkpIHsJCS8qIGRpZ2l0ICovCi0JICAgIGlmIChkKysgPiAxKSB7Ci0JCXN0 YXRlKys7Ci0JCWQgPSAxOwotCSAgICB9Ci0JICAgIHN3aXRjaCAoc3RhdGUpIHsKLQkgICAgICBj YXNlIDE6CQkJLyogSG91cnMgKi8KLQkJaGggPSBoaCAqIDEwICsgKCpwIC0gJzAnKTsKLQkJYnJl YWs7Ci0JICAgICAgY2FzZSAyOgkJCS8qIE1pbnV0ZXMgKi8KLQkJbW0gPSBtbSAqIDEwICsgKCpw IC0gJzAnKTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAzOgkJCS8qIFNlY29uZHMgKi8KLQkJc3Mg PSBzcyAqIDEwICsgKCpwIC0gJzAnKTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSA0OgkJCS8qIEZy YWN0aW9uIG9mIHNlY29uZCAqLwotCQlpZiAoZmYgPCAwKQotCQkgIGZmID0gKCpwID4gJzQnKSA/ IDEgOiAwOwotCQlicmVhazsKLQkgICAgfQotCX0gZWxzZSBpZiAoKnAgPT0gJzonKSB7CQkvKiBD b2xvbiAqLwotCSAgICBzdGF0ZSsrOwotCSAgICBkID0gMDsKLQkgICAgaWYgKHN0YXRlID4gMykg ewotCQltYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBtYW55IHRpbWUgZmllbGRzIik7Ci0JCWRlYnVn KEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkJcmV0dXJuKE5VTEwpOwotCSAgICB9 Ci0JfSBlbHNlIGlmICgqcCA9PSAnLicpIHsKLQkgICAgaWYgKHN0YXRlID09IDMpIHsKLQkJc3Rh dGUgPSA0OwotCQlkID0gMDsKLQkgICAgfSBlbHNlIHsKLQkJbWFrZXN0cigmY21kYXRlbXNnLCJJ bXByb3BlciBmcmFjdGlvbiIpOwotCQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywt MSk7Ci0JCXJldHVybihOVUxMKTsKLQkgICAgfQotCX0gZWxzZSBpZiAoKnAgPT0gU1ApIHsJCS8q IFNwYWNlICovCi0JICAgIHdoaWxlICgqcCAmJiAoKnAgPT0gU1ApKQkvKiBwb3NpdGlvbiB0byBm aXJzdCBub25zcGFjZSAqLwotCSAgICAgIHArKzsKLQkgICAgYnJlYWs7Ci0JfSBlbHNlIGlmIChp c2FscGhhKCpwKSkgewkvKiBBTS9QTS9aIG9yIHRpbWV6b25lICovCi0JICAgIGJyZWFrOwotCX0g ZWxzZSBpZiAoKnAgPT0gJysnIHx8ICpwID09ICctJykgeyAvKiBHTVQgb2Zmc2V0ICovCi0JICAg IGJyZWFrOwotCX0gZWxzZSB7Ci0JICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCB0aW1l IGNoYXJhY3RlcnMiKTsKLQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEp OwotCSAgICByZXR1cm4oTlVMTCk7Ci0JfQotCXArKzsKLSAgICB9Ci0gICAgaWYgKCEqcCkJCQkJ LyogSWYgbm90aGluZyBsZWZ0ICovCi0gICAgICBnb3RvIHhjbWRhdGU7CQkJLyogZ28gZmluaXNo IHVwICovCi0KLSAgICAvKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgSEgsIE1NLCBTUywgYW5kIEZG ICovCi0gICAgLyogTm93IGhhbmRsZSB0aGUgcmVzdDogQU0sIFBNLCBhbmQvb3IgdGltZXpvbmUg aW5mbyAqLwotCi0gICAgaWYgKCFja3N0cmNtcChwLCJhbSIsMiwwKSkgewkvKiBBTS9QTS4uLiAq LwotCXBtZmxhZyA9IDA7Ci0JcCArPSAyOwotICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKHAsImEu bS4iLDQsMCkpIHsKLQlwbWZsYWcgPSAwOwotCXAgKz0gNDsKLSAgICB9IGVsc2UgaWYgKCFja3N0 cmNtcChwLCJwbSIsMiwwKSkgewotCXBtZmxhZyA9IDE7Ci0JcCArPSAyOwotICAgIH0gZWxzZSBp ZiAoIWNrc3RyY21wKHAsInAubS4iLDQsMCkpIHsKLQlwbWZsYWcgPSAxOwotCXAgKz0gNDsKLSAg ICB9Ci0gICAgaWYgKHBtZmxhZyAmJiBoaCA8IDEyKQkJLyogSWYgUE0gd2FzIGdpdmVuICovCi0g ICAgICBoaCArPSAxMjsJCQkJLyogYWRkIDEyIHRvIHRoZSBob3VyICovCi0KLSAgICAvKiBOb3cg aGFuZGxlIHRpbWV6b25lICovCi0KLSAgY210aW1lem9uZToKLSAgICBkZWJ1ZyhGMTEwLCJjbWN2 dGRhdGUgdGltZXpvbmUiLHAsMCk7Ci0KLSAgICB6aGggPSAwOwkJCQkvKiBHTVQgb2Zmc2V0IEhI ICovCi0gICAgem1tID0gMDsJCQkJLyogR01UIG9mZnNldCBNTSAqLwotICAgIGdtdHNpZ24gPSAw OwkJCS8qIFNpZ24gb2YgR01UIG9mZnNldCAqLwotICAgIGlzZ210ID0gMDsJCQkJLyogMSBpZiB0 aW1lIGlzIEdNVCAqLwotCi0gICAgd2hpbGUgKCpwICYmICpwID09IFNQKQkJLyogR29iYmxlIHNw YWNlcyAqLwotICAgICAgcCsrOwotICAgIGlmICghKnApCQkJCS8qIElmIG5vdGhpbmcgbGVmdCAq LwotICAgICAgZ290byB4Y21kYXRlOwkJCS8qIHdlJ3JlIGRvbmUgKi8KLQotICAgIGlmIChpc2Fs cGhhKCpwKSkgewkJCS8qIFNvbWV0aGluZyBsZWZ0ICovCi0JaW50IHpvbmUgPSAwOwkJCS8qIEFs cGhhYmV0aWMgbXVzdCBiZSB0aW1lem9uZSAqLwotCXAyID0gcDsJCQkJLyogSXNvbGF0ZSB0aW1l em9uZSAqLwotCXArKzsKLQl3aGlsZSAoaXNhbHBoYSgqcCkpCi0JICBwKys7Ci0JcDMgPSBwOwot CWNjID0gKnA7Ci0JKnAgPSBOVUw7Ci0JcCA9IHAyOwkJCQkvKiBIYXZlIHRpbWV6b25lLCBsb29r IGl0IHVwICovCi0Jem9uZSA9IGxvb2t1cCh1c2F0eixwLG51c2F0eixOVUxMKTsKLQlkZWJ1ZyhG MTExLCJjbWN2dGRhdGUgdGltZXpvbmUgYWxwaGEiLHAsem9uZSk7Ci0KLQlpZiAoem9uZSA8IDAp IHsJCQkvKiBOb3QgZm91bmQgKi8KLQkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJVbmtub3duIHRp bWV6b25lIik7Ci0JICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkg ICAgcmV0dXJuKE5VTEwpOwotCX0KLQlpc2dtdCsrOwkJCS8qIEFsbCBkYXRlcyBhcmUgR01UIGZy b20gaGVyZSBkb3duICovCi0JaWYgKHpvbmUgIT0gMCkgewkJLyogQnV0IG5vdCB0aGlzIG9uZSBz byBtYWtlIGl0IEdNVCAqLwotCSAgICBoaCArPSB6b25lOwkJCS8qIFJGQyA4MjIgdGltZXpvbmU6 IEVTVCBldGMgKi8KLQkgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGhoICsgem9uZSIsIiIsaGgp OwotCSAgICBpZiAoaGggPiAyMykgewkJLyogT2Zmc2V0IGNyb3NzZXMgZGF0ZSBib3VuZGFyeSAq LwotCQlpbnQgaTsKLQkJbG9uZyBqZDsKLQkJamQgPSBtamQoeXl5eW1tZGQpOwkvKiBHZXQgTUpE ICovCi0JCWpkICs9IGhoIC8gMjQ7CQkvKiBBZGQgbmV3IGRheShzKSAqLwotCQloaCA9IGhoICUg MjQ7CQkvKiBhbmQgY29udmVydCBiYWNrIHRvIHl5eXltbWRkICovCi0JCWNrc3RybmNweSh5eXl5 bW1kZCxtamQyZGF0ZShqZCksWVlZWU1NREQpOwotCQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgem9u ZS1hZGp1c3RlZCBkYXRlIix5eXl5bW1kZCxoaCk7Ci0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKysp Ci0JCSAgeWVhcmJ1ZltpXSA9IHl5eXltbWRkW2ldOwotCQl5ZWFyYnVmWzRdID0gTlVMOwotCQlt b25idWZbMF0gPSB5eXl5bW1kZFs0XTsKLQkJbW9uYnVmWzFdID0geXl5eW1tZGRbNV07Ci0JCW1v bmJ1ZlsyXSA9IE5VTDsKLQkJZGF5YnVmWzBdID0geXl5eW1tZGRbNl07Ci0JCWRheWJ1ZlsxXSA9 IHl5eXltbWRkWzddOwotCQlkYXlidWZbMl0gPSBOVUw7Ci0JCWRheSA9IGRheWJ1ZjsKLQkJbmRh eSA9IGF0b2koZGF5YnVmKTsKLQkJbW9udGggPSBtb25idWY7Ci0JCXllYXIgPSB5ZWFyYnVmOwot CSAgICB9Ci0JfQotCXAgPSBwMzsJCQkJLyogUHV0IGJhY2sgd2hhdGV2ZXIgd2UgcG9rZWQgYWJv dmUgKi8KLQkqcCA9IGNjOwotCi0gICAgfSBlbHNlIGlmICgqcCA9PSAnKycgfHwgKnAgPT0gJy0n KSB7IC8qIEdNVC9VVEMgb2Zmc2V0ICovCi0JcDMgPSBwOwotCWRlYnVnKEYxMTAsImNtY3Z0ZGF0 ZSB0aW1lem9uZSBHTVQgb2Zmc2V0IixwLDApOwotCWdtdHNpZ24gPSAoKnAgPT0gJysnKSA/IC0x IDogMTsKLQlpc2dtdCsrOwotCXArKzsKLQl3aGlsZSAoKnAgPT0gU1ApIHArKzsKLQlkID0gMDsK LQlwMiA9IHA7Ci0Jd2hpbGUgKGlzZGlnaXQoKnApKSB7CQkvKiBDb3VudCBkaWdpdHMgKi8KLQkg ICAgZCsrOwotCSAgICBwKys7Ci0JfQotCWlmIChkICE9IDQpIHsJCQkvKiBTdHJpY3QgUkZDIFsy XTgyMiAqLwotCSAgICBpc2dtdCA9IDA7CQkJLyogSWYgbm90IGV4YWN0bHkgNCBkaWdpdHMgKi8K LQkgICAgcCA9IHAzOwkJCS8qIGl0J3Mgbm90IGEgR01UIG9mZnNldC4gKi8KLQkgICAgZ290byBk ZWx0YTsJCQkvKiBTbyB0cmVhdCBpdCBhcyBhIGRlbHRhIHRpbWUuICovCi0JfQotCWQgPSAoZCAm IDEgJiYgKnAgIT0gJzonKSA/IDEgOiAwOyAvKiBPZGQgaW1wbGllcyBsZWFkaW5nICcwJyAqLwot CXAgPSBwMjsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgR01UIG9mZnNldCBzaWduIixwLGdtdHNp Z24pOwotCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBHTVQgb2Zmc2V0IGQiLCIiLGQpOwotCXN0YXRl ID0gMTsKLQl3aGlsZSAoKnApIHsKLQkgICAgaWYgKGlzZGlnaXQoKnApKSB7CQkvKiBkaWdpdCAq LwotCQlpZiAoZCsrID4gMSkgewotCQkgICAgc3RhdGUrKzsKLQkJICAgIGQgPSAxOwotCQl9Ci0J CXN3aXRjaCAoc3RhdGUpIHsKLQkJICBjYXNlIDE6Ci0JCSAgICB6aGggPSB6aGggKiAxMCArICgq cCAtICcwJyk7Ci0JCSAgICBicmVhazsKLQkJICBjYXNlIDI6Ci0JCSAgICB6bW0gPSB6bW0gKiAx MCArICgqcCAtICcwJyk7Ci0JCSAgICBicmVhazsKLQkJICBkZWZhdWx0OgkJLyogSWdub3JlIHNl Y29uZHMgb3IgZnJhY3Rpb25zICovCi0JCSAgICBicmVhazsKLQkJfQkJCQotCSAgICB9IGVsc2Ug aWYgKCpwID09ICc6JykgewkvKiBDb2xvbiAqLwotCQlzdGF0ZSsrOwotCQlkID0gMDsKLQkgICAg fSBlbHNlIGlmICgqcCA9PSBTUCB8fCAqcCA9PSAnKCcpIHsKLQkJYnJlYWs7Ci0JICAgIH0gZWxz ZSB7Ci0JCXAgPSBwMzsJCQkvKiBNYXliZSBpdCdzIG5vdCBhIEdNVCBvZmZzZXQuICovCi0JCWdv dG8gZGVsdGE7CQkvKiBTbyB0cmVhdCBpdCBhcyBhIGRlbHRhIHRpbWUuICovCi0JICAgIH0KLQkg ICAgcCsrOwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjExMCwiY21jdnRkYXRlIHNvdXJjZSBzdHJp bmcgYWZ0ZXIgdGltZXpvbmUiLHAsMCk7Ci0KLSAgICBpZiAoKnApIHsJCQkJLyogQW55dGhpbmcg bGVmdD8gKi8KLQlwMiA9IHA7Ci0Jd2hpbGUgKCpwMiA9PSBTUCkJCS8qIFNraXAgcGFzdCBzcGFj ZXMgKi8KLQkgIHAyKys7Ci0JaWYgKCpwMiA9PSAnKCcpIHsJCS8qIFJGQy04MjIgY29tbWVudD8g Ki8KLQkgICAgaW50IHBjID0gMTsJCQkvKiBwYXJlbiBjb3VudGVyICovCi0JICAgIHAyKys7Ci0J ICAgIHdoaWxlICgqcDIpIHsKLQkJaWYgKCpwMiA9PSAnKScpIHsKLQkJICAgIGlmICgtLXBjID09 IDApIHsKLQkJCXAyKys7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJfSBlbHNlIGlmICgqcDIgPT0g JyknKSB7Ci0JCSAgICBwYysrOwotCQl9Ci0JCXAyKys7Ci0JICAgIH0JCQotCSAgICB3aGlsZSAo KnAyID09IFNQKQkJLyogU2tpcCBwYXN0IHNwYWNlcyAqLwotCSAgICAgIHAyKys7Ci0JICAgIGlm ICghKnAyKQkJCS8qIEFueXRoaW5nIGxlZnQ/ICovCi0JICAgICAgKnAgPSBOVUw7CQkJLyogTm8s IGVyYXNlIGNvbW1lbnQgKi8KLQl9Ci0JaWYgKCEqcDIpCQkJLyogQW55dGhpbmcgbGVmdD8gKi8K LQkgIGdvdG8geGNtZGF0ZTsJCQkvKiBObywgZG9uZS4gKi8KLQlwID0gcDI7Ci0KLSAgICAgIGRl bHRhOgotCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBkZWx0YSB5eXl5bW1kZCIseXl5eW1tZGQsMCk7 Ci0JZGVidWcoRjExMCwiY21jdnRkYXRlIGRlbHRhIHllYXIiLHllYXIsMCk7Ci0JZGVidWcoRjEx MCwiY21jdnRkYXRlIGRlbHRhIHAiLHAsMCk7Ci0KLQlpZiAoKnAgPT0gJysnIHx8ICpwID09ICct JykgewkvKiBEZWx0YSB0aW1lICovCi0JICAgIGludCBzdGF0ZSA9IE5FRURfREFZUzsJLyogU3Rh cnQgb2ZmIGxvb2tpbmcgZm9yIGRheXMgKi8KLQkgICAgY2hhciBjID0gMDsKLQkgICAgZHNpZ24g PSAxOwkJCS8qIEdldCBzaWduICovCi0JICAgIGlmICgqcCsrID09ICctJykKLQkgICAgICBkc2ln biA9IC0xOwotCSAgICB3aGlsZSAoKnAgPT0gU1ApCQkvKiBTa2lwIGludGVydmVuaW5nIHNwYWNl cyAqLwotCSAgICAgIHArKzsKLQkgICAgd2hpbGUgKHN0YXRlKSB7CQkvKiBGU0EgdG8gcGFyc2Ug ZGVsdGEgdGltZSAqLwotCQlpZiAoc3RhdGUgPCAwIHx8ICFpc2RpZ2l0KCpwKSkgewotCQkgICAg bWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIGRlbHRhIHRpbWUiKTsKLQkJICAgIGRlYnVnKEYx MTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkJICAgIHJldHVybihOVUxMKTsKLQkJfQot CQlwMiA9IHA7CQkJLyogR2V0IG5leHQgbnVtZXJpYyBmaWVsZCAqLwotCQl3aGlsZSAoaXNkaWdp dCgqcDIpKQotCQkgIHAyKys7Ci0JCWMgPSAqcDI7CQkvKiBBbmQgYnJlYWsgY2hhcmFjdGVyICov Ci0JCSpwMiA9IE5VTDsJCS8qIFRlcm1pbmF0ZSB0aGUgbnVtYmVyICovCi0KLQkJc3dpdGNoIChz dGF0ZSkgewkvKiBJbnRlcnByZXQgYWNjb3JkaW5nIHRvIHN0YXRlICovCi0JCSAgY2FzZSBORUVE X0RBWVM6CS8qIEluaXRpYWwgKi8KLQkJICAgIGlmICgoYyA9PSAnLScpIHx8CS8qIFZNUyBmb3Jt YXQgKi8KLQkJCSgoYyA9PSAnZCcgfHwgYyA9PSAnRCcpCi0JCQkgJiYgIWlzYWxwaGEoKihwMisx KSkpKSB7IC8qIERheXMgKi8KLQkJCWRkYXlzID0gYXRvaShwKTsKLQkJCWlmICghKihwMisxKSkJ CQkKLQkJCSAgc3RhdGUgPSAwOwotCQkJZWxzZQkJICAgICAgLyogaWYgYW55dGhpbmcgaXMgbGVm dCAqLwotCQkJICBzdGF0ZSA9IE5FRURfSFJTOyAgIC8qIG5vdyB3ZSB3YW50IGhvdXJzLiAqLwot CQkgICAgfSBlbHNlIGlmICgoYyA9PSAnVycgfHwgYyA9PSAndycpICYmICFpc2FscGhhKCoocDIr MSkpKSB7Ci0JCQlkZGF5cyA9IGF0b2kocCkgKiA3OyAgIC8qIHdlZWtzLi4uICovCi0JCQlpZiAo ISoocDIrMSkpCQkJCi0JCQkgIHN0YXRlID0gMDsKLQkJCWVsc2UKLQkJCSAgc3RhdGUgPSBORUVE X0hSUzsKLQkJICAgIH0gZWxzZSBpZiAoKGMgPT0gJ00nIHx8IGMgPT0gJ20nKSAmJiAhaXNhbHBo YSgqKHAyKzEpKSkgewotCQkJZG1vbnRocyA9IGF0b2kocCk7IC8qIG1vbnRocy4uLiAqLwotCQkJ aWYgKCEqKHAyKzEpKQkJCQotCQkJICBzdGF0ZSA9IDA7Ci0JCQllbHNlCi0JCQkgIHN0YXRlID0g TkVFRF9IUlM7Ci0JCSAgICB9IGVsc2UgaWYgKChjID09ICdZJyB8fCBjID09ICd5JykgJiYgIWlz YWxwaGEoKihwMisxKSkpIHsKLQkJCWR5ZWFycyA9IGF0b2kocCk7IC8qIHllYXJzLi4uICovCi0J CQlpZiAoISoocDIrMSkpCQkJCi0JCQkgIHN0YXRlID0gMDsKLQkJCWVsc2UKLQkJCSAgc3RhdGUg PSBORUVEX0hSUzsKLQkJICAgIH0gZWxzZSBpZiAoYyA9PSAnOicpIHsgLyogZGVsaW1pdGVyIGlz IGNvbG9uICovCi0JCQlkaG91cnMgPSBhdG9pKHApOyAgLyogc28gaXQncyBob3VycyAqLwotCQkJ c3RhdGUgPSBORUVEX01JTlM7IC8qIG5vdyB3ZSB3YW50IG1pbnV0ZXMgKi8KLQkJICAgIH0gZWxz ZSBpZiAoIWMpIHsgICAgICAgLyogZW5kIG9mIHN0cmluZyAqLwotCQkJZGhvdXJzID0gYXRvaShw KTsgIC8qIGl0J3Mgc3RpbGwgaG91cnMgKi8KLQkJCXN0YXRlID0gMDsgICAgICAgICAvKiBhbmQg d2UncmUgZG9uZSAqLwotCQkgICAgfSBlbHNlIGlmIChpc2FscGhhKGMpIHx8IGMgPT0gU1ApIHsK LQkJCWlmIChjID09IFNQKSB7CS8qIEl0J3MgYSBrZXl3b3JkPyAqLwotCQkJICAgIHAyKys7CS8q IFNraXAgc3BhY2VzICovCi0JCQkgICAgd2hpbGUgKCpwMiA9PSBTUCkKLQkJCSAgICAgIHAyKys7 Ci0JCQl9IGVsc2UgewkvKiBvciByZXBsYWNlIGZpcnN0IGxldHRlciAqLwotCQkJICAgICpwMiA9 IGM7Ci0JCQl9Ci0JCQlwMyA9IHAyOwkvKiBwMiBwb2ludHMgdG8gYmVnaW5uaW5nIG9mIGtleXdv cmQgKi8KLQkJCXdoaWxlIChpc2FscGhhKCpwMykpIC8qIEZpbmQgZW5kIG9mIGtleXdvcmQgKi8K LQkJCSAgcDMrKzsKLQkJCWMgPSAqcDM7CS8qIE5VTCBpdCBvdXQgc28gd2UgY2FuIGxvb2sgaXQg dXAgKi8KLQkJCWlmICgqcDMpCS8qIHAzIHBvaW50cyB0byBrZXl3b3JkIHRlcm1pbmF0b3IgKi8K LQkJCSAgKnAzID0gTlVMOwotCQkJdW5pdHMgPSBsb29rdXAodGltZXVuaXRzLHAyLG51bml0cyxO VUxMKTsKLQkJCWlmICh1bml0cyA8IDApIHsKLQkJCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIklu dmFsaWQgdW5pdHMgaW4gZGVsdGEgdGltZSIpOwotCQkJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0 ZSIsY21kYXRlbXNnLC0xKTsKLQkJCSAgICByZXR1cm4oTlVMTCk7Ci0JCQl9Ci0JCQkqcDIgPSBO VUw7CS8qIFJlLXRlcm1pbmF0ZSB0aGUgbnVtYmVyICovCi0JCQkqcDMgPSBjOwotCQkJd2hpbGUg KCpwMyA9PSBTUCkgLyogUG9pbnQgYXQgZmllbGQgYWZ0ZXIgdW5pdHMgKi8KLQkJCSAgcDMrKzsK LQkJCXAyID0gcDM7Ci0JCQlzd2l0Y2ggKHVuaXRzKSB7Ci0JCQkgIGNhc2UgVFVfREFZUzoKLQkJ CSAgICBkZGF5cyA9IGF0b2kocCk7Ci0JCQkgICAgYnJlYWs7Ci0JCQkgIGNhc2UgVFVfV0VFS1M6 Ci0JCQkgICAgZGRheXMgPSBhdG9pKHApICogNzsKLQkJCSAgICBicmVhazsKLQkJCSAgY2FzZSBU VV9NT05USFM6Ci0JCQkgICAgZG1vbnRocyA9IGF0b2kocCk7Ci0JCQkgICAgYnJlYWs7Ci0JCQkg IGNhc2UgVFVfWUVBUlM6Ci0JCQkgICAgZHllYXJzID0gYXRvaShwKTsKLQkJCSAgICBicmVhazsK LQkJCX0KLQkJCWlmICgqcDIpIHsKLQkJCSAgICBzdGF0ZSA9IE5FRURfSFJTOwotCQkJICAgIHAy LS07Ci0JCQl9IGVsc2UKLQkJCSAgc3RhdGUgPSAwOwotCi0JCSAgICB9IGVsc2UgewkJLyogQW55 dGhpbmcgZWxzZSAqLwotCQkJc3RhdGUgPSAtMTsJLyogaXMgYW4gZXJyb3IgKi8KLQkJICAgIH0K LQkJICAgIGJyZWFrOwotCQkgIGNhc2UgTkVFRF9IUlM6CS8qIExvb2tpbmcgZm9yIGhvdXJzICov Ci0JCSAgICBkZWJ1ZyhGMDAwLCJjbWN2dGRhdGUgTkVFRF9IUlMiLHAsYyk7Ci0JCSAgICBpZiAo YyA9PSAnOicpIHsKLQkJCWRob3VycyA9IGF0b2kocCk7Ci0JCQlzdGF0ZSA9IE5FRURfTUlOUzsK LQkJICAgIH0gZWxzZSBpZiAoIWMpIHsKLQkJCWRob3VycyA9IGF0b2kocCk7Ci0JCQlzdGF0ZSA9 IDA7Ci0JCSAgICB9IGVsc2UgewotCQkJc3RhdGUgPSAtMTsKLQkJICAgIH0KLQkJICAgIGJyZWFr OwotCQkgIGNhc2UgTkVFRF9NSU5TOgkvKiBMb29raW5nIGZvciBtaW51dGVzICovCi0JCSAgICBp ZiAoYyA9PSAnOicpIHsKLQkJCWRtaW5zID0gYXRvaShwKTsKLQkJCXN0YXRlID0gTkVFRF9TRUNT OwotCQkgICAgfSBlbHNlIGlmICghYykgewotCQkJZG1pbnMgPSBhdG9pKHApOwotCQkJc3RhdGUg PSAwOwotCQkgICAgfSBlbHNlIHsKLQkJCXN0YXRlID0gLTE7Ci0JCSAgICB9Ci0JCSAgICBicmVh azsKLQkJICBjYXNlIE5FRURfU0VDUzoJLyogTG9va2luZyBmb3Igc2Vjb25kcyAqLwotCQkgICAg aWYgKGMgPT0gJy4nKSB7Ci0JCQlkc2VjcyA9IGF0b2kocCk7Ci0JCQlzdGF0ZSA9IE5FRURfRlJB QzsKLQkJICAgIH0gZWxzZSBpZiAoIWMpIHsKLQkJCWRzZWNzID0gYXRvaShwKTsKLQkJCXN0YXRl ID0gMDsKLQkJICAgIH0gZWxzZSB7Ci0JCQlzdGF0ZSA9IC0xOwotCQkgICAgfQotCQkgICAgYnJl YWs7Ci0JCSAgY2FzZSBORUVEX0ZSQUM6CS8qIEZyYWN0aW9uIG9mIHNlY29uZCAqLwotCQkgICAg aWYgKCFjICYmIHJkaWdpdHMocCkpIHsKLQkJCWlmICgqcCA+ICc0JykKLQkJCSAgZHNlY3MrKzsK LQkJCXN0YXRlID0gMDsKLQkJICAgIH0gZWxzZSB7Ci0JCQlzdGF0ZSA9IC0xOwotCQkgICAgfQot CQkgICAgYnJlYWs7Ci0JCX0KLQkJaWYgKGMpCQkJLyogbmV4dCBmaWVsZCBpZiBhbnkgKi8KLQkJ ICBwID0gcDIgKyAxOwotCSAgICB9Ci0JICAgIGhhdmVkZWx0YSA9IDE7Ci0KLQl9IGVsc2Ugewot CSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIkV4dHJhbmVvdXMgbWF0ZXJpYWwgYXQgZW5kIik7Ci0J ICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkgICAgcmV0dXJuKE5V TEwpOwotCX0KLSAgICB9Ci0KLSB4Y21kYXRlOgotCi0gICAgaWYgKCh0ICE9IDIgJiYgaGggPiAy NCkgfHwgaGggPCAwKSB7IC8qIEhvdXIgcmFuZ2UgY2hlY2sgKi8KLQltYWtlc3RyKCZjbWRhdGVt c2csIkludmFsaWQgaG91cnMiKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywt MSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBpZiAobW0gPiA1OSkgewkJCS8qIE1pbnV0 ZSByYW5nZSBjaGVjayAqLwotCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCBtaW51dGVzIik7 Ci0JZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsK LSAgICB9Ci0gICAgaWYgKGZmID4gMCkgewkJCS8qIEZyYWN0aW9uIG9mIHNlY29uZD8gKi8KLQlp ZiAoc3MgPCA1OSkgewotCSAgICBzcysrOwotCSAgICBmZiA9IDA7Ci0JfSBlbHNlIGlmIChtbSA8 IDU5KSB7Ci0JICAgIHNzID0gMDsKLQkgICAgbW0rKzsKLQkgICAgZmYgPSAwOwotCX0gZWxzZSBp ZiAoaGggPCAyNCkgewotCSAgICBzcyA9IDA7Ci0JICAgIG1tID0gMDsKLQkgICAgaGgrKzsKLQkg ICAgZmYgPSAwOwotCX0KLQkvKiBNdXN0IGFkZCBhIGRheSAtLSBsZWF2ZSBmZiBhdCAxLi4uICov Ci0JLyogKERPIFNPTUVUSElORyBBQk9VVCBUSElTIExBVEVSKSAqLwotICAgIH0KLSAgICBpZiAo c3MgPiA2MCkgewkJCS8qIFNlY29uZHMgcmFuZ2UgY2hlY2sgKi8KLQltYWtlc3RyKCZjbWRhdGVt c2csIkludmFsaWQgc2Vjb25kcyIpOyAvKiA2MCBpcyBvayBiZWNhdXNlIG9mICovCi0JZGVidWco RjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOyAgLyogTGVhcCBTZWNvbmQuICovCi0JcmV0 dXJuKE5VTEwpOwotICAgIH0KLSAgICBpZiAoKG1tIDwgMCB8fCBzcyA8IDApIHx8Ci0JKHQgIT0g MiAmJiAoc3MgPiAwIHx8IG1tID4gMCkgJiYgaGggPiAyMykpIHsKLQltYWtlc3RyKCZjbWRhdGVt c2csIkludmFsaWQgbWludXRlcyBvciBzZWNvbmRzIik7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRl IixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwi Y21jdnRkYXRlIHllYXIiLHllYXIsMCk7Ci0gICAgZGVidWcoRjExMCwiY21jdnRkYXRlIG1vbnRo Iixtb250aCwwKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgbmRheSIsIiIsbmRheSk7Ci0g ICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGhoIiwiIixoaCk7Ci0gICAgZGVidWcoRjEwMSwiY21j dnRkYXRlIG1tIiwiIixtbSk7Ci0gICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIHNzIiwiIixzcyk7 Ci0gICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGdtdHNpZ24iLCIiLGdtdHNpZ24pOwotICAgIGRl YnVnKEYxMDEsImNtY3Z0ZGF0ZSB6aGgiLCIiLHpoaCk7Ci0gICAgZGVidWcoRjEwMSwiY21jdnRk YXRlIHptbSIsIiIsem1tKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgaXNnbXQiLCIiLGlz Z210KTsKLQotI2lmZGVmIFpMT0NBTFRJTUUKLS8qIEhhbmRsZSB0aW1lem9uZSAtLSBmaXJzdCBj b252ZXJ0IHRvIEdNVCAqLwotCi0gICAgemRkID0gMDsJCQkJLyogRGF5cyBjaGFuZ2VkICovCi0g ICAgaWYgKGlzZ210ICYmICh6bW0gfHwgemhoKSkgewkvKiBJZiBHTVQgb2Zmc2V0IGdpdmVuICov Ci0JbG9uZyBzZWMxLCBzZWMyLCB6ejsKLQlzZWMxID0gc3MgKyA2MCAqIG1tICsgMzYwMCAqIGho OwotCXNlYzIgPSBnbXRzaWduICogKDYwICogem1tICsgMzYwMCAqIHpoaCk7Ci0Jc2VjMSArPSBz ZWMyOwotCWlmIChzZWMxIDwgMCkgewotCSAgICBzZWMxID0gMCAtIHNlYzE7Ci0JICAgIHpkZCA9 IDBMIC0gKHNlYzEgLyA4NjQwMEwpOwotCSAgICBzZWMxID0gc2VjMSAlIDg2NDAwTDsKLQl9IGVs c2UgaWYgKHNlYzEgPiA4NjQwMEwpIHsKLQkgICAgemRkID0gc2VjMSAvIDg2NDAwTDsKLQkgICAg c2VjMSA9IHNlYzEgJSA4NjQwMEw7Ci0JfQotCXNzID0gc2VjMSAlIDYwOwotCXp6ID0gc2VjMSAv IDYwOwotCW1tID0genogJSA2MDsKLQloaCA9IHp6IC8gNjA7Ci0JZGVidWcoRjEwMSwiY21jdnRk YXRlIE5FVyBoaCIsIiIsaGgpOwotCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBORVcgbW0iLCIiLG1t KTsKLQlkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgTkVXIGRkIiwiIix6ZGQpOwotCi0vKiBBdCB0aGlz IHBvaW50IGhoOm1tOnNzIGlzIGluIEdNVCBhbmQgemRkIGlzIHRoZSBjYWxlbmRhciBhZGp1c3Rt ZW50ICovCi0KLSAgICB9Ci0jZW5kaWYgLyogWkxPQ0FMVElNRSAqLwotCi0gICAgaWYgKHl5eXlt bWRkWzBdICYmICF5ZWFyKSB7Ci0JY2tzdHJuY3B5KHllYXJidWYseXl5eW1tZGQsNSk7Ci0JY2tz dHJuY3B5KG1vbmJ1ZiwmeXl5eW1tZGRbNF0sMyk7Ci0JY2tzdHJuY3B5KGRheWJ1ZiwmeXl5eW1t ZGRbNl0sMyk7Ci0JeWVhciA9IHllYXJidWY7Ci0JbW9udGggPSBtb25idWY7Ci0JZGF5ID0gZGF5 YnVmOwotCW5kYXkgPSBhdG9pKGRheWJ1Zik7Ci0gICAgfQotICAgIHNwcmludGYoemJ1ZiwiJTA0 ZCUwMmQlMDJkICUwMmQ6JTAyZDolMDJkIiwgLyogU0FGRSAqLwotCSAgICBhdG9pKHllYXIpLGF0 b2kobW9udGgpLG5kYXksaGgsbW0sc3MKLQkgICAgKTsKLSAgICBkcCA9IHpidWY7Ci0KLSNpZmRl ZiBaTE9DQUxUSU1FCi0gICAgLyogTm93IGNvbnZlcnQgZnJvbSBHTVQgdG8gbG9jYWwgdGltZSAq LwotCi0gICAgaWYgKGlzZ210KSB7CQkJLyogSWYgR01UIGNvbnZlcnQgdG8gbG9jYWwgdGltZSAq LwotCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBHTVQgMSIsZHAsMCk7Ci0JaWYgKHpkZCkgewkJCS8q IEFwcGx5IGFueSBjYWxlbmRhciBhZGp1c3RtZW50ICovCi0JICAgIGxvbmcgeno7Ci0JICAgIHp6 ID0gbWpkKGRwKSArIHpkZDsKLQkgICAgc3ByaW50Zih6YnVmLCIlcyAlMDJkOiUwMmQ6JTAyZCIs bWpkMmRhdGUoenopLGhoLG1tLHNzKTsKLQl9Ci0JZGVidWcoRjExMCwiY21jdnRkYXRlIEdNVCAy IixkcCwwKTsKLQlpZiAoKHAgPSB6bG9jYWx0aW1lKGRwKSkpIHsKLQkgICAgZGVidWcoRjExMCwi Y21jdnRkYXRlIGFzY3RpbWUgemxvY2FsdGltZSIscCwwKTsKLQkgICAgaWYgKHApIGNrc3RybmNw eSh6YnVmLHAsMTgpOwotCX0KLQlkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgR01UIDMiLGRwLDApOwot CWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JICB5ZWFyYnVmW2ldID0gZHBbaV07Ci0JeWVhcmJ1 Zls0XSA9IE5VTDsKLQltb25idWZbMF0gPSBkcFs0XTsKLQltb25idWZbMV0gPSBkcFs1XTsKLQlt b25idWZbMl0gPSBOVUw7Ci0JZGF5YnVmWzBdID0gZHBbNl07Ci0JZGF5YnVmWzFdID0gZHBbN107 Ci0JZGF5YnVmWzJdID0gTlVMOwotCWRheSA9IGRheWJ1ZjsKLQluZGF5ID0gYXRvaShkYXlidWYp OwotCW1vbnRoID0gbW9uYnVmOwotCXllYXIgPSB5ZWFyYnVmOwotCWhoID0gYXRvaSgmZHBbOV0p OwotCW1tID0gYXRvaSgmZHBbMTJdKTsKLQlzcyA9IGF0b2koJmRwWzE1XSk7Ci0gICAgfQotI2Vu ZGlmIC8qIFpMT0NBTFRJTUUgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewot CWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBob3VyIiwiIixoaCk7Ci0JZGVidWcoRjEwMSwiY21jdnRk YXRlIG1pbnV0ZSIsIiIsbW0pOwotCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBzZWNvbmQiLCIiLHNz KTsKLSAgICB9Ci0jZW5kaWYgLyogREVCTE9HICovCi0KLSAgICBtYWtlc3RyKCZjbWRhdGVtc2cs TlVMTCk7Ci0gICAgaWYgKGhhdmVkZWx0YSkgewotI2lmZGVmIERFQlVHCi0JaWYgKGRlYmxvZykg ewotCSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgYmFzZSAiLGRwLDApOwotCSAgICBkZWJ1ZyhG MTAxLCJjbWN2dGRhdGUgZGVsdGEgc2lnbiIsIiIsZHNpZ24pOwotCSAgICBkZWJ1ZyhGMTAxLCJj bWN2dGRhdGUgZGVsdGEgeXJzICIsIiIsZHllYXJzKTsKLQkgICAgZGVidWcoRjEwMSwiY21jdnRk YXRlIGRlbHRhIG1vcyAiLCIiLGRtb250aHMpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUg ZGVsdGEgZGF5cyIsIiIsZGRheXMpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgZGVsdGEg aHJzICIsIiIsZGhvdXJzKTsKLQkgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGRlbHRhIG1pbnMi LCIiLGRtaW5zKTsKLQkgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGRlbHRhIHNlY3MiLCIiLGRz ZWNzKTsKLQl9Ci0jZW5kaWYgLyogREVCTE9HICovCi0JaWYgKCEoZHAgPSBjbWRlbHRhKGF0b2ko eWVhciksCi0JCSAgICBhdG9pKG1vbnRoKSwKLQkJICAgIG5kYXksIGhoLCBtbSwgc3MsCi0JCSAg ICBkc2lnbiwgZHllYXJzLCBkbW9udGhzLCBkZGF5cywgZGhvdXJzLCBkbWlucywgZHNlY3MpKSkg ewotCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JICAgIHJldHVy bihOVUxMKTsKLQl9Ci0gICAgfQotCi0gIHhjdnRkYXRlOgkJCQkvKiBFeGl0IHBvaW50IGZvciBz dWNjZXNzICovCi0gICAgewotCWludCBsZW4sIGssIG47Ci0JY2hhciAqIHA7Ci0JZGVidWcoRjEx MCwiY21jdnRkYXRlIHhjdnRkYXRlIGRwIixkcCwwKTsKLQlpZiAoIWRwKSBkcCA9ICIiOwkJLyog U2hvdWxkbid0IGhhcHBlbiAqLwotCWlmICghKmRwKSByZXR1cm4oTlVMTCk7CQkvKiAuLi4gKi8K LQlsZW4gPSBzdHJsZW4oZHApOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSByZXN1bHQiLGRwLGxl bik7Ci0JayA9IGNtZGF0ZWJwIC0gKGNoYXIgKiljbWRhdGVidWY7IC8qIFNwYWNlIHVzZWQgKi8K LQluID0gQ01EQVRFQlVGIC0gayAtIDE7CQkvKiBTcGFjZSBsZWZ0ICovCi0JaWYgKG4gPCBsZW4p IHsJCQkvKiBOb3QgZW5vdWdoPyAqLwotCSAgICBjbWRhdGVicCA9IGNtZGF0ZWJ1ZjsJLyogV3Jh cCBhcm91bmQgKi8KLQkgICAgbiA9IENNREFURUJVRjsKLQl9Ci0JY2tzdHJuY3B5KGNtZGF0ZWJw LGRwLG4pOwotCXAgPSBjbWRhdGVicDsKLQljbWRhdGVicCArPSBsZW4gKyAxOwotCXJldHVybihw KTsKLSAgICB9Ci19Ci0KLWludAotY212ZGF0ZShkKSBjaGFyICogZDsgewkJCS8qIFZlcmlmeSBk YXRlLXRpbWUgKi8KLSAgICBpbnQgaTsKLSAgICBpZiAoIWQpIHJldHVybigwKTsKLSAgICBpZiAo KGludClzdHJsZW4oZCkgIT0gMTcpIHJldHVybigwKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgODsg aSsrKSB7IGlmICghaXNkaWdpdChkW2ldKSkgcmV0dXJuKDApOyB9Ci0gICAgaWYgKCFpc2RpZ2l0 KGRbOV0pICB8fCAhaXNkaWdpdChkWzEwXSkgfHwKLQkhaXNkaWdpdChkWzEyXSkgfHwgIWlzZGln aXQoZFsxM10pIHx8Ci0JIWlzZGlnaXQoZFsxNV0pIHx8ICFpc2RpZ2l0KGRbMTZdKSkKLSAgICAg IHJldHVybigwKTsKLSAgICBpZiAoIWNrc3RyY2hyKCIgVHRfLToiLGRbOF0pKSByZXR1cm4oMCk7 Ci0gICAgaWYgKGRbMTFdICE9ICc6JyAmJiBkWzE0XSAhPSAnOicpIHJldHVybigwKTsKLSAgICBy ZXR1cm4oMSk7Ci19Ci0KLS8qIGMgbSBkIGkgZiBmIGQgYSB0IGUgIC0tICBHZXQgZGlmZmVyZW5j ZSBiZXR3ZWVuIHR3byBkYXRlLXRpbWVzICovCi0KLWNoYXIgKgotY21kaWZmZGF0ZShkMSxkMikg Y2hhciAqIGQxLCAqIGQyOyB7Ci0gICAgY2hhciBkMWJ1Zls5XSwgZDJidWZbOV07Ci0gICAgY2hh ciB4MWJ1ZlsxOF0sIHgyYnVmWzE4XTsKLSAgICBjaGFyICogcDsKLQotICAgIGludCBoaDEgPSAw LCBtbTEgPSAwLCBzczEgPSAwOwotICAgIGludCBoaDIgPSAwLCBtbTIgPSAwLCBzczIgPSAwOwot ICAgIGludCBoaCwgbW0sIHNzOwotICAgIGludCBzaWduOwotICAgIGxvbmcgamQxLCBqZDIsIGpk LCBmMSwgZjIsIGZ4OwotICAgIHN0YXRpYyBjaGFyIHJlc3VsdFsyNF0sICpycDsKLQotICAgIGRl YnVnKEYxMTAsImNtZGlmZmRhdGUgZDEgQSIsZDEsMCk7Ci0gICAgZGVidWcoRjExMCwiY21kaWZm ZGF0ZSBkMiBBIixkMiwwKTsKLQotICAgIGlmICghKHAgPSBjbWN2dGRhdGUoZDEsMSkpKQkJLyog Q29udmVydCBkYXRlcyB0byBzdGFuZGFyZCBmb3JtYXQgKi8KLSAgICAgIHJldHVybihOVUxMKTsK LSAgICBja3N0cm5jcHkoeDFidWYscCwxOCk7Ci0gICAgZDEgPSB4MWJ1ZjsKLQotICAgIGlmICgh KHAgPSBjbWN2dGRhdGUoZDIsMSkpKQotICAgICAgcmV0dXJuKE5VTEwpOwotICAgIGNrc3RybmNw eSh4MmJ1ZixwLDE4KTsKLSAgICBkMiA9IHgyYnVmOwotCi0gICAgZGVidWcoRjExMCwiY21kaWZm ZGF0ZSBkMSBCIixkMSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWRpZmZkYXRlIGQyIEIiLGQyLDAp OwotICAgIGlmICghY212ZGF0ZShkMSkgfHwgIWNtdmRhdGUoZDIpKQotICAgICAgcmV0dXJuKE5V TEwpOwotCi0gICAgaGgxID0gYXRvaSgmZDFbOV0pOwkJCS8qIEdldCBob3VycywgbWludXRlcywg YW5kIHNlY29uZHMgKi8KLSAgICBtbTEgPSBhdG9pKCZkMVsxMl0pOwkJLyogZm9yIGZpcnN0IGRh dGUgKi8KLSAgICBzczEgPSBhdG9pKCZkMVsxNV0pOwotICAgIGNrc3RybmNweShkMWJ1ZixkMSw5 KTsKLQotICAgIGhoMiA9IGF0b2koJmQyWzldKTsJCQkvKiBkaXR0byBmb3Igc2Vjb25kIGRhdGUg Ki8KLSAgICBtbTIgPSBhdG9pKCZkMlsxMl0pOwotICAgIHNzMiA9IGF0b2koJmQyWzE1XSk7Ci0g ICAgY2tzdHJuY3B5KGQyYnVmLGQyLDkpOwotICAgIAotICAgIGpkMSA9IG1qZChkMWJ1Zik7CQkJ LyogR2V0IHRoZSB0d28gSnVsaWFuIGRhdGVzICovCi0gICAgamQyID0gbWpkKGQyYnVmKTsKLSAg ICBmMSA9IHNzMSArIDYwICogbW0xICsgMzYwMCAqIGhoMTsJLyogQ29udmVydCBmaXJzdCB0aW1l IHRvIHNlY29uZHMgKi8KLQotICAgIGYyID0gc3MyICsgNjAgKiBtbTIgKyAzNjAwICogaGgyOwkv KiBEaXR0byBmb3Igc2Vjb25kIHRpbWUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJjbWRpZmZkYXRlIGpk MSIsIiIsamQxKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWRpZmZkYXRlIGYxIiwiIixmMSk7Ci0gICAg ZGVidWcoRjEwMSwiY21kaWZmZGF0ZSBqZDIiLCIiLGpkMik7Ci0gICAgZGVidWcoRjEwMSwiY21k aWZmZGF0ZSBmMiIsIiIsZjIpOwotICAKLSAgICBpZiAoamQyID4gamQxIHx8IChqZDEgPT0gamQy ICYmIGYyID4gZjEpKSB7Ci0gICAgICAgIHNpZ24gPSAtMTsgCi0gICAgICAgIGlmIChmMSA+IGYy KSB7amQyLS07IGYyICs9IDg2NDAwTDt9Ci0gICAgICAgIGpkID0gamQyIC0gamQxOwotICAgICAg ICBmeCA9IGYyIC0gZjE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2lnbiA9IDE7Ci0gICAgICAg IGlmIChmMiA+IGYxKSB7amQxLS07IGYxICs9IDg2NDAwTDt9Ci0gICAgICAgIGpkID0gamQxIC0g amQyOwotICAgICAgICBmeCA9IGYxIC0gZjI7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsImNtZGlm ZmRhdGUgc2lnbiBqZCIsc2lnbjwwPyItIjoiKyIsamQpOwotICAgIGRlYnVnKEYxMDEsImNtZGlm ZmRhdGUgZngiLCIiLGZ4KTsKLSAgCi0gICAgaGggPSAoaW50KSAoZnggLyAzNjAwTCk7CQkvKiBD b252ZXJ0IHNlY29uZHMgdG8gaGg6bW06c3MgKi8KLQotICAgIG1tID0gKGludCkgKGZ4ICUgMzYw MEwpIC8gNjBMOwotICAgIHNzID0gKGludCkgKGZ4ICUgMzYwMEwpICUgNjBMOwotCi0gICAgcnAg PSByZXN1bHQ7CQkJLyogRm9ybWF0IHRoZSByZXN1bHQgKi8KLSAgICAqcnArKyA9IChzaWduIDwg MCkgPyAnLScgOiAnKyc7Ci0gICAgaWYgKGpkICE9IDAgJiYgaGgrbW0rc3MgPT0gMCkgewotCXNw cmludGYocnAsIiVsZGQiLGpkKTsKLSAgICB9IGVsc2UgaWYgKGpkID09IDApIHsKLQlpZiAoc3Mg PT0gMCkKLQkgIHNwcmludGYocnAsIiVkOiUwMmQiLGhoLG1tKTsKLQllbHNlCi0JICBzcHJpbnRm KHJwLCIlZDolMDJkOiUwMmQiLGhoLG1tLHNzKTsKLSAgICB9IGVsc2UgewotCWlmIChzcyA9PSAw KQotCSAgc3ByaW50ZihycCwiJWxkZCVkOiUwMmQiLGpkLGhoLG1tKTsKLQllbHNlCi0JICBzcHJp bnRmKHJwLCIlbGRkJWQ6JTAyZDolMDJkIixqZCxoaCxtbSxzcyk7Ci0gICAgfQotICAgIGRlYnVn KEYxMTAsImNtZGlmZmRhdGUgcmVzdWx0IixyZXN1bHQsMCk7Ci0gICAgcmV0dXJuKChjaGFyICop cmVzdWx0KTsKLX0KLQotI2lmbmRlZiBOT1NQTAotLyogcyBoIHUgZiBmIGwgZSBkIGEgdCBlICAt LSAgUmVhcnJhbmdlIGRhdGUgc3RyaW5nICovCi0KLS8qCi0gIENhbGwgd2l0aDoKLSAgICBBIGRh dGUgc3RyaW5nIGluIHN0YW5kYXJkIGZvcm1hdDogeXl5eW1tZGQgaGg6bW06c3MgKHRpbWUgb3B0 aW9uYWwpLgotICAgIE9wdGlvbnM6Ci0gICAgICAxOiBSZWZvcm1hdCBkYXRlIHRvIHl5eXktbW1t LWRkIChtbW0gPSBFbmdsaXNoIG1vbnRoIGFiYnJldmlhdGlvbikuCi0gICAgICAyOiBSZWZvcm1h dCBkYXRlIHRvIGRkLW1tbS15eXl5IChtbW0gPSBFbmdsaXNoIG1vbnRoIGFiYnJldmlhdGlvbiku Ci0gICAgICAzOiBSZWZvcm1hdCBhcyBudW1lcmljIHl5eXltbWRkaGhtbXNzLgotICAgICAgNDog UmVmb3JtYXQgaW4gYXNjdGltZSgpIGZvcm1hdCBTYXQgTm92IDI2IDExOjEwOjM0IDIwMDUKLSAg ICBSZXR1cm5zOgotICAgICAgUG9pbnRlciB0byByZXN1bHQgaWYgYXJncyB2YWxpZCwgb3RoZXJ3 aXNlIG9yaWdpbmFsIGFyZyBwb2ludGVyLgotKi8KLWNoYXIgKgotc2h1ZmZsZWRhdGUocCxvcHQp IGNoYXIgKiBwOyBpbnQgb3B0OyB7Ci0gICAgZXh0ZXJuIGNoYXIgKiB3a2RheXNbXTsKLSAgICBp bnQgbGVuOwotICAgIGNoYXIgaWJ1ZlszMl07Ci0gICAgc3RhdGljIGNoYXIgb2J1Zls0OF07Ci0g ICAgY2hhciBjOwotICAgIGludCB5eSwgZGQsIG1tOwotCi0gICAgaWYgKCFwKSBwID0gIiI7Ci0g ICAgaWYgKCEqcCkgcCA9IGNrZGF0ZSgpOwotICAgIGlmIChvcHQgPCAxIHx8IG9wdCA+IDQpCi0g ICAgICByZXR1cm4ocCk7Ci0gICAgbGVuID0gc3RybGVuKHApOwotICAgIGlmIChsZW4gPCA4IHx8 IGxlbiA+IDMxKSByZXR1cm4ocCk7Ci0gICAgaWYgKG9wdCA9PSA0KSB7CQkJLyogQXNjdGltZSBm b3JtYXQgKDI2IE5vdiAyMDA1KSAqLwotCWNoYXIgYywgKiBzOwotCWxvbmcgejsgaW50IGs7Ci0J Y2tzdHJuY3B5KGlidWYscCwzMSk7Ci0JayA9IGxlbjsKLQl3aGlsZSAoayA+PSAwICYmIGlidWZb a10gPT0gQ1IgfHwgaWJ1ZltrXSA9PSBMRikKLQkgIGlidWZbay0tXSA9IE5VTDsKLQl3aGlsZSAo ayA+PSAwICYmIGlidWZba10gPT0gU1AgfHwgaWJ1ZltrXSA9PSBIVCkKLQkgIGlidWZbay0tXSA9 IE5VTDsKLQlpZiAoayA8IDkpIGNrc3RybmNweSgmaWJ1Zls4XSwiIDAwOjAwOjAwIiw5KTsKLQlw ID0gaWJ1ZjsKLSAgICAgICAgeiA9IG1qZChwKTsgICAgICAgICAgICAgICAgICAgICAvKiBDb252 ZXJ0IHRvIG1vZGlmaWVkIEp1bGlhbiBkYXRlICovCi0gICAgICAgIHogPSB6ICUgN0w7Ci0gICAg ICAgIGlmICh6IDwgMCkgewotICAgICAgICAgICAgeiA9IDAgLSB6OwotICAgICAgICAgICAgayA9 IDYgLSAoKGludCl6ICsgMykgJSA3OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgayA9 ICgoaW50KXogKyAzKSAlIDc7CS8qIERheSBvZiB3ZWVrICovCi0gICAgICAgIH0KLQlzID0gd2tk YXlzW2tdOwotICAgICAgICBvYnVmWzBdID0gc1swXTsJCQkvKiBEYXkgb2Ygd2VlayAqLwotICAg ICAgICBvYnVmWzFdID0gc1sxXTsKLSAgICAgICAgb2J1ZlsyXSA9IHNbMl07Ci0gICAgICAgIG9i dWZbM10gPSBTUDsJCQkvKiBTcGFjZSAqLwotCWMgPSBwWzZdOwotICAgICAgICBwWzZdID0gTlVM OwotCW1tID0gYXRvaSgmaWJ1Zls0XSk7CQkvKiBNb250aCAqLwotCXMgPSBtb25hbWVbbW0tMV07 CQkvKiBOYW1lIG9mIG1vbnRoICovCi0JcFs2XSA9IGM7Ci0KLSAgICAgICAgb2J1Zls0XSA9IHNb MF07CQkJLyogTW9udGggKi8KLSAgICAgICAgb2J1Zls1XSA9IHNbMV07Ci0gICAgICAgIG9idWZb Nl0gPSBzWzJdOwotICAgICAgICBvYnVmWzddID0gU1A7CQkJLyogU3BhY2UgKi8KLQlpZiAocFs2 XSA9PSAnMCcpCQkvKiBEYXRlIG9mIG1vbnRoICovCi0JICBvYnVmWzhdID0gU1A7Ci0JZWxzZQot CSAgb2J1Zls4XSA9IHBbNl07Ci0gICAgICAgIG9idWZbOV0gPSBwWzddOwotCWNrc3RybmNweSgm b2J1ZlsxMF0sJnBbOF0sMTApOwkvKiBUaW1lICovCi0gICAgICAgIG9idWZbMTldID0gU1A7CQkJ LyogU3BhY2UgKi8KLQlvYnVmWzIwXSA9IHBbMF07CQkvKiBZZWFyICovCi0Jb2J1ZlsyMV0gPSBw WzFdOwotCW9idWZbMjJdID0gcFsyXTsKLQlvYnVmWzIzXSA9IHBbM107Ci0Jb2J1ZlsyNF0gPSBO VUw7Ci0JcmV0dXJuKChjaGFyICopb2J1Zik7Ci0gICAgfQotICAgIGlmIChvcHQgPT0gMykgewot CWNrc3RybmNweShvYnVmLHAsNDgpOwotCS8qIHl5eXltbWRkIGhoOm1tOnNzICovCi0JLyogMDEy MzQ1Njc4OTAxMjM0NTYgKi8KLQkvKiB5eXl5bW1kZGhobW1zcyAgICAqLwotCW9idWZbOF0gPSBv YnVmWzldOwotCW9idWZbOV0gPSBvYnVmWzEwXTsKLQlvYnVmWzEwXSA9IG9idWZbMTJdOwotCW9i dWZbMTFdID0gb2J1ZlsxM107Ci0Jb2J1ZlsxMl0gPSBvYnVmWzE1XTsKLQlvYnVmWzEzXSA9IG9i dWZbMTZdOwotCW9idWZbMTRdID0gTlVMOwotCXJldHVybigoY2hhciAqKW9idWYpOwotICAgIH0K LSAgICBja3N0cm5jcHkoaWJ1ZixwLDMyKTsKLSAgICBjID0gaWJ1Zls0XTsJCQkvKiBXYXJuaW5n OiBub3QgWTEwSyBjb21wbGlhbnQgKi8KLSAgICBpYnVmWzRdID0gTlVMOwotICAgIGlmICghcmRp Z2l0cyhpYnVmKSkKLSAgICAgIHJldHVybihwKTsKLSAgICB5eSA9IGF0b2koaWJ1Zik7Ci0gICAg aWYgKHl5IDwgMSB8fCB5eSA+IDk5OTkpCi0gICAgICByZXR1cm4ocCk7Ci0gICAgaWJ1Zls0XSA9 IGM7Ci0gICAgYyA9IGlidWZbNl07Ci0gICAgaWJ1Zls2XSA9IE5VTDsKLSAgICBpZiAoIXJkaWdp dHMoJmlidWZbNF0pKQotICAgICAgcmV0dXJuKHApOwotICAgIG1tID0gYXRvaSgmaWJ1Zls0XSk7 Ci0gICAgaWYgKG1tIDwgMSB8fCBtbSA+IDEyKQotICAgICAgcmV0dXJuKHApOwotICAgIGlidWZb Nl0gPSBjOwotICAgIGMgPSBpYnVmWzhdOwotICAgIGlidWZbOF0gPSBOVUw7Ci0gICAgaWYgKCFy ZGlnaXRzKCZpYnVmWzZdKSkKLSAgICAgIHJldHVybihwKTsKLSAgICBkZCA9IGF0b2koJmlidWZb Nl0pOwotICAgIGlidWZbOF0gPSBjOwotICAgIGlmIChkZCA8IDEgfHwgbW0gPiAzMSkKLSAgICAg IHJldHVybihwKTsKLSAgICAvKiBJR05PUkUgV0FSTklOR1MgQUJPVVQgbW9uYW1lW10gUkVGUyBP VVQgT0YgUkFOR0UgLSBpdCdzIHByZWNoZWNrZWQuICovCi0gICAgc3dpdGNoIChvcHQpIHsKLSAg ICAgIGNhc2UgMToKLQlzcHJpbnRmKG9idWYsIiUwNGQtJXMtJTAyZCVzIix5eSxtb25hbWVbbW0t MV0sZGQsJmlidWZbOF0pOwotCWJyZWFrOwotICAgICAgY2FzZSAyOgotCXNwcmludGYob2J1Ziwi JTAyZC0lcy0lMDRkJXMiLGRkLG1vbmFtZVttbS0xXSx5eSwmaWJ1Zls4XSk7Ci0gICAgfQotICAg IHJldHVybigoY2hhciAqKW9idWYpOwotfQotI2VuZGlmCS8qIE5PU1BMICovCi0KLS8qICBDIEsg QyBWIFQgRCBBIFQgRSAgLS0gIExpa2UgY21jdnRkYXRlKCksIGJ1dCByZXR1cm5zIHN0cmluZy4g ICovCi0vKiAgRm9yIHVzZSBieSBkYXRlLXJlbGF0ZWQgZnVuY3Rpb25zICovCi0vKiAgU2VlIGNh bGxpbmcgY29udmVudGlvbnMgZm9yIGNtY3Z0ZGF0ZSgpIGFib3ZlLiAqLwotCi1jaGFyICoKLWNr Y3Z0ZGF0ZShwLHQpIGNoYXIgKiBwOyBpbnQgdDsgewotICAgIGNoYXIgKiBzOwotICAgIGlmICgh KHMgPSBjbWN2dGRhdGUocCx0KSkpCi0gICAgICByZXR1cm4oIjxCQURfREFURV9PUl9USU1FPiIp OwkvKiBcZmJsYWgoKSBlcnJvciBtZXNzYWdlICovCi0gICAgZWxzZQotICAgICAgcmV0dXJuKHMp OwotfQotCi0KLS8qICBDIE0gRCBBIFQgRSAgLS0gIFBhcnNlIGEgZGF0ZSBhbmQvb3IgdGltZSAg Ki8KLQotLyoKLSAgQWNjZXB0cyBkYXRlIGluIHZhcmlvdXMgZm9ybWF0cy4gIElmIHRoZSBkYXRl IGlzIHJlY29nbml6ZWQsCi0gIHRoaXMgcm91dGluZSByZXR1cm5zIDAgb3IgZ3JlYXRlciB3aXRo IHRoZSByZXN1bHQgc3RyaW5nIHBvaW50ZXIKLSAgcG9pbnRpbmcgdG8gYSBidWZmZXIgY29udGFp bmluZyB0aGUgZGF0ZSBhcyAieXl5eW1tZGQgaGg6bW06c3MiLgotKi8KLWludAotY21kYXRlKHho bHAseGRlZix4cCxxdWlldCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsgaW50IHF1aWV0OyB4 eF9zdHJwIGY7IHsKLSAgICBpbnQgeCwgcmM7Ci0gICAgY2hhciAqbywgKnMsICp6cSwgKmRwOwot Ci0gICAgY21mbGRmbGdzID0gMDsKLSAgICBpZiAoIXhobHApIHhobHAgPSAiIjsKLSAgICBpZiAo IXhkZWYpIHhkZWYgPSAiIjsKLSAgICBpZiAoISp4aGxwKSB4aGxwID0gIkRhdGUgYW5kL29yIHRp bWUiOwotICAgICp4cCA9ICIiOwotCi0gICAgcmMgPSBjbWZsZCh4aGxwLHhkZWYsJnMsKHh4X3N0 cnApMCk7Ci0gICAgZGVidWcoRjEwMSwiY21kYXRlIGNtZmxkIHJjIiwiIixyYyk7Ci0gICAgaWYg KHJjIDwgMCkKLSAgICAgIHJldHVybihyYyk7Ci0gICAgZGVidWcoRjExMCwiY21kYXRlIDEiLHMs MCk7Ci0gICAgbyA9IHM7CQkJCS8qIFJlbWVtYmVyIHdoYXQgdGhleSB0eXBlZC4gKi8KLSAgICBz ID0gYnJzdHJpcChzKTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWRhdGUgMiIscywwKTsKLQotICAgIHgg PSAwOwotICAgIGlmIChmKSB7CQkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZl biAqLwotCWNoYXIgKiBwcDsKLQl6cSA9IGF0eGJ1ZjsJCQkvKiBkbyB0aGUgY29udmVyc2lvbi4g Ki8KLQlwcCA9IGF0eGJ1ZjsKLQlhdHhuID0gQ01EQkw7Ci0JaWYgKCh4ID0gKCpmKShzLCZ6cSwm YXR4bikpIDwgMCkgcmV0dXJuKC0yKTsKLQlpZiAoISpwcCkKLQkgIHBwID0geGRlZjsKLQlpZiAo c2V0YXRtKHBwLDApIDwgMCkgewotCSAgICBpZiAoIXF1aWV0KSBwcmludGYoIj9FdmFsdWF0ZWQg ZGF0ZSB0b28gbG9uZ1xuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCXMgPSBhdHhidWY7Ci0g ICAgfQotICAgIGRwID0gY21jdnRkYXRlKHMsMSk7Ci0gICAgaWYgKCFkcCkgewotCWlmICghcXVp ZXQpIHByaW50ZigiPyVzXG4iLGNtZGF0ZW1zZyk7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAg KnhwID0gZHA7Ci0gICAgcmV0dXJuKDApOwotfQotCi0jaWZkZWYgQ0tfUkVDQUxMCQkJLyogQ29t bWFuZC1yZWNhbGwgZnVuY3Rpb25zICovCi0KLS8qICBDIE0gUiBJIE4gSSAgLS0gIEluaXRpYWxp emUgb3IgY2hhbmdlIHNpemUgb2YgY29tbWFuZCByZWNhbGwgYnVmZmVyICovCi0KLWludAotY21y aW5pKG4pIGludCBuOyB7Ci0gICAgaW50IGk7Ci0gICAgaWYgKHJlY2FsbCAmJiBpbl9yZWNhbGwp IHsJCS8qIEZyZWUgb2xkIHN0b3JhZ2UsIGlmIGFueSAqLwotCWZvciAoaSA9IDA7IGkgPCBjbV9y ZWNhbGw7IGkrKykgewotCSAgICBpZiAocmVjYWxsW2ldKSB7Ci0JCWZyZWUocmVjYWxsW2ldKTsK LQkJcmVjYWxsW2ldID0gTlVMTDsKLQkgICAgfQotCX0KLQlmcmVlKHJlY2FsbCk7Ci0JcmVjYWxs ID0gTlVMTDsKLSAgICB9Ci0gICAgY21fcmVjYWxsID0gbjsJCQkvKiBTZXQgbmV3IHNpemUgKi8K LSAgICBybGFzdCA9IGN1cnJlbnQgPSAtMTsJCS8qIEluaXRpYWxpemUgcG9pbnRlcnMgKi8KLSAg ICBpZiAobiA+IDApIHsKLQlyZWNhbGwgPSAoY2hhciAqKiltYWxsb2MoKGNtX3JlY2FsbCArIDEp ICogc2l6ZW9mKGNoYXIgKikpOwotCWlmICghcmVjYWxsKQotCSAgcmV0dXJuKDEpOwotCWZvciAo aSA9IDA7IGkgPCBjbV9yZWNhbGw7IGkrKykgewotCSAgICByZWNhbGxbaV0gPSBOVUxMOwotCX0K LQlpbl9yZWNhbGwgPSAxOwkJCS8qIFJlY2FsbCBidWZmZXJzIGluaXQnZCAqLwotICAgIH0KLSAg ICByZXR1cm4oMCk7Ci19Ci0KLS8qICBDIE0gQSBEIEQgTiBFIFggVCAgLS0gIEZvcmNlIGFkZGl0 aW9uIG9mIG5leHQgY29tbWFuZCAqLwotCi1WT0lECi1jbWFkZG5leHQoKSB7Ci0gICAgaWYgKG9u X3JlY2FsbCAmJiBpbl9yZWNhbGwpIHsJLyogRXZlbiBpZiBpdCBkb2Vzbid0IGNvbWUgKi8KLQlm b3JjZV9hZGQgPSAxOwkJCS8qIGZyb20gdGhlIGtleWJvYXJkICovCi0JbmV3Y21kID0gMTsKLQlu b19yZWNhbGwgPSAwOwotICAgIH0KLX0KLQotLyogIEMgTSBHIEUgVCBDIE0gRCAgLS0gIEZpbmQg bW9zdCByZWNlbnQgbWF0Y2hpbmcgY29tbWFuZCAgKi8KLQotY2hhciAqCi1jbWdldGNtZChzKSBj aGFyICogczsgewotICAgIGludCBpOwotICAgIGZvciAoaSA9IGN1cnJlbnQ7IGkgPj0gMDsgaS0t KSB7CS8qIFNlYXJjaCBiYWNrd2FyZCB0aHJ1IGhpc3RvcnkgbGlzdCAqLwotCWlmICghcmVjYWxs W2ldKSBjb250aW51ZTsJLyogVGhpcyBvbmUncyBudWxsLCBza2lwIGl0ICovCi0JaWYgKGNrbWF0 Y2gocyxyZWNhbGxbaV0sMCwxKSkJLyogTWF0Y2g/ICovCi0JICByZXR1cm4ocmVjYWxsW2ldKTsJ CS8qIFllcywgcmV0dXJuIHBvaW50ZXIgKi8KLSAgICB9Ci0gICAgcmV0dXJuKE5VTEwpOwkJCS8q IE5vIG1hdGNoLCByZXR1cm4gTlVMTCBwb2ludGVyICovCi19Ci0jZW5kaWYgLyogQ0tfUkVDQUxM ICovCi0KLS8qICBBIEQgRCBDIE0gRCAgLS0gIEFkZCBhIGNvbW1hbmQgdG8gdGhlIHJlY2FsbCBi dWZmZXIgICovCi0KLVZPSUQKLWFkZGNtZChzKSBjaGFyICogczsgewotICAgIGludCBsZW4gPSAw LCBucSA9IDA7Ci0gICAgY2hhciAqIHA7Ci0jaWZkZWYgQ0tMRUFSTgotICAgIGV4dGVybiBpbnQg bGVhcm5pbmc7Ci0jZW5kaWYgLyogQ0tMRUFSTiAqLwotCi0gICAgaWYgKHhjbWRzcmMpCQkJLyog T25seSBmb3IgaW50ZXJhY3RpdmUgY29tbWFuZHMgKi8KLSAgICAgIHJldHVybjsKLQotICAgIGlm ICghbmV3Y21kKQkJCS8qIFRoZSBjb21tYW5kIGhhcyBiZWVuIGhlcmUgYWxyZWFkeSAqLwotICAg ICAgcmV0dXJuOwkJCQkvKiBzbyBpZ25vcmUgaXQuICovCi0gICAgbmV3Y21kID0gMDsJCQkJLyog SXQncyBuZXcgYnV0IGRvIHRoaXMgb25seSBvbmNlLiAqLwotCi0gICAgaWYgKCFzKSBzID0gY21k YnVmOwotICAgIGlmIChzWzBdKQotICAgICAgbGVuID0gc3RybGVuKHMpOwotCi0gICAgaWYgKGxl biA8IDEpCQkJLyogRG9uJ3Qgc2F2ZSBlbXB0eSBjb21tYW5kcyAqLwotICAgICAgcmV0dXJuOwot Ci0gICAgcCA9IHM7Ci0gICAgd2hpbGUgKCpwKSB7IGlmICgqcCsrID09ICc/JykgbnErKzsgfSAv KiBDb3VudCBxdWVzdGlvbiBtYXJrcyAqLwotCi0jaWZkZWYgQ0tMRUFSTgotICAgIGlmIChsZWFy bmluZykJCQkvKiBJZiBhIGxlYXJuZWQgc2NyaXB0IGlzIGFjdGl2ZSAqLwotICAgICAgbGVhcm5j bWQocyk7CQkJLyogcmVjb3JkIHRoaXMgY29tbWFuZC4gKi8KLSNlbmRpZiAvKiBDS0xFQVJOICov Ci0KLSAgICBkZWJ1ZyhGMDEwLCJDTUQoUCkiLHMsMCk7CQkvKiBNYXliZSByZWNvcmQgaXQgaW4g dGhlIGRlYnVnIGxvZyAqLwotCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4bG9nZ2luZykg ewkJCS8qIE1heWJlIHJlY29yZCBpdCBpbiBzeXNsb2cgKi8KLQlpZiAoY2t4c3lzbG9nID49IFNZ U0xHX0NYIHx8IGNreHN5c2xvZyA+PSBTWVNMR19DTSkKLQkgIGNrc3lzbG9nKFNZU0xHX0NYLCAx LCAiY29tbWFuZCIsIHMsIE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCi0j aWZkZWYgQ0tfUkVDQUxMCi0gICAgbGFzdF9yZWNhbGwgPSAwOwotCi0gICAgaWYgKG9uX3JlY2Fs bCAmJgkJCS8qIENvbW1hbmQgcmVjYWxsIGlzIG9uPyAqLwotCWNtX3JlY2FsbCA+IDAgJiYJCS8q IFJlY2FsbCBidWZmZXIgc2l6ZSBpcyA+IDA/ICovCi0JIW5vX3JlY2FsbCkgewkJCS8qIE5vdCBu b3Qgc2F2aW5nIHRoaXMgY29tbWFuZD8gKi8KLQotCWlmICghZm9yY2VfYWRkICYmIHJsYXN0ID4g LTEpCS8qIElmIHByZXZpb3VzIGNvbW1hbmQgd2FzIGlkZW50aWNhbCAqLwotCSAgaWYgKCFzdHJj bXAocyxyZWNhbGxbcmxhc3RdKSkgLyogZG9uJ3QgYWRkIGFub3RoZXIgY29weSAqLwotCSAgICBy ZXR1cm47Ci0KLQlmb3JjZV9hZGQgPSAwOwkJCS8qIFJlc2V0IG5vdyBpbiBjYXNlIGl0IHdhcyBz ZXQgKi8KLQotICAgICAgICBpZiAocmxhc3QgPj0gY21fcmVjYWxsIC0gMSkgewkvKiBSZWNhbGwg YnVmZmVyIGZ1bGw/ICovCi0JICAgIGludCBpOwotCSAgICBpZiAocmVjYWxsWzBdKSB7CQkvKiBE aXNjYXJkIG9sZGVzdCBjb21tYW5kICovCi0JCWZyZWUocmVjYWxsWzBdKTsKLQkJcmVjYWxsWzBd ID0gTlVMTDsKLQkgICAgfQotCSAgICBmb3IgKGkgPSAwOyBpIDwgcmxhc3Q7IGkrKykgeyAgLyog VGhlIHJlc3QgKi8KLQkJcmVjYWxsW2ldID0gcmVjYWxsW2krMV07ICAgLyogbW92ZSBiYWNrICov Ci0JICAgIH0KLQkgICAgcmxhc3QtLTsJCQkvKiBOb3cgd2UgaGF2ZSBvbmUgbGVzcyAqLwotCX0K LSAgICAgICAgcmxhc3QrKzsJCQkvKiBJbmRleCBvZiBsYXN0IGNvbW1hbmQgaW4gYnVmZmVyICov Ci0JY3VycmVudCA9IHJsYXN0OwkJLyogQWxzbyBub3cgdGhlIGN1cnJlbnQgY29tbWFuZCAqLwot CWlmIChjdXJyZW50ID49IGNtX3JlY2FsbCkgewkvKiBTaG91bGRuJ3QgaGFwcGVuICovCi0JICAg IHByaW50ZigiP0NvbW1hbmQgaGlzdG9yeSBlcnJvclxuIik7CS8qIGJ1dCBpZiBpdCBkb2VzICov Ci0JICAgIG9uX3JlY2FsbCA9IDA7CQkgICAgICAgIC8qIHR1cm4gb2ZmIGNvbW1hbmQgc2F2aW5n ICovCi0jaWZkZWYgQ09NTUVOVAotCX0gZWxzZSBpZiAobnEgPiAwKSB7CQkvKiBIYXZlIGF0IGxl YXN0IG9uZSBxdWVzdGlvbiBtYXJrICovCi0JICAgIHJlY2FsbFtjdXJyZW50XSA9IG1hbGxvYyhs ZW4rbnErMSk7Ci0JICAgIGlmIChyZWNhbGxbY3VycmVudF0pIHsKLQkJcCA9IHJlY2FsbFtjdXJy ZW50XTsKLQkJd2hpbGUgKCpzKSB7Ci0JCSAgICBpZiAoKnMgPT0gJz8nKQotCQkgICAgICAqcCsr ID0gJ1xcJzsKLQkJICAgICpwKysgPSAqcysrOwotCQl9Ci0JCSpwID0gTlVMOwotCSAgICB9Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCX0gZWxzZSB7CQkJLyogTm9ybWFsIGNhc2UsIGp1c3QgY29w eSAqLwotCSAgICByZWNhbGxbY3VycmVudF0gPSBtYWxsb2MobGVuKzEpOwotCSAgICBpZiAocmVj YWxsW2N1cnJlbnRdKQotCSAgICAgIGNrc3RybmNweShyZWNhbGxbY3VycmVudF0scyxsZW4rMSk7 Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLX0KLQotCi0jaWZkZWYgQ0tfUkVD QUxMCi0KLS8qIEMgTSBIIEkgUyBUIE8gUiBZICovCi0KLVZPSUQKLWNtaGlzdG9yeSgpIHsKLSAg ICBpbnQgaSwgbGMgPSAxOwotICAgIGZvciAoaSA9IDA7IGkgPD0gY3VycmVudDsgaSsrKSB7Ci0J cHJpbnRmKCIgJXNcbiIsIHJlY2FsbFtpXSk7Ci0JaWYgKCsrbGMgPiAoY21kX3Jvd3MgLSAyKSkg ewkvKiBTY3JlZW4gZnVsbD8gKi8KLQkgICAgaWYgKCFhc2ttb3JlKCkpCQkvKiBEbyBtb3JlLXBy b21wdGluZy4uLiAqLwotCSAgICAgIGJyZWFrOwotCSAgICBlbHNlCi0JICAgICAgbGMgPSAwOwot CX0KLSAgICB9Ci19Ci0KLWludAotc2F2aGlzdG9yeShzLGRpc3ApIGNoYXIgKnM7IGludCBkaXNw OyB7Ci0gICAgRklMRSAqIGZwOwotICAgIGludCBpOwotCi0gICAgZnAgPSBmb3BlbihzLCBkaXNw ID8gImEiIDogInciKTsKLSAgICBpZiAoIWZwKSB7Ci0JcGVycm9yKHMpOwotCXJldHVybigwKTsK LSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8PSBjdXJyZW50OyBpKyspCi0gICAgICBmcHJpbnRm KGZwLCIlc1xuIiwgcmVjYWxsW2ldKTsKLSAgICBmY2xvc2UoZnApOwotICAgIHJldHVybigxKTsK LX0KLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIGFwcGFyZW50 bHkgbm90IHVzZWQgKi8KLWludAotY21nZXRsYyhzKSBjaGFyICogczsgewkJCS8qIEdldCBsZWFk aW5nIGNoYXIgKi8KLSAgICBjaGFyIGM7Ci0gICAgd2hpbGUgKChjID0gKnMrKykgPD0gU1ApIHsK LQlpZiAoIWMpCi0JICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuKGMpOwotfQotI2VuZGlmIC8q IENPTU1FTlQgKi8KLQotCi0vKiAgQyBNIEMgRiBNICAtLSAgUGFyc2UgY29tbWFuZCBjb25maXJt YXRpb24gKGVuZCBvZiBsaW5lKSAgKi8KLQotLyoKLSBSZXR1cm5zCi0gICAtMjogVXNlciB0eXBl ZCBhbnl0aGluZyBidXQgd2hpdGVzcGFjZSBvciBuZXdsaW5lCi0gICAtMTogUmVwYXJzZSBuZWVk ZWQKLSAgICAwOiBDb25maXJtYXRpb24gd2FzIHJlY2VpdmVkCi0qLwotaW50Ci1jbWNmbSgpIHsK LSAgICBpbnQgeCwgeGM7Ci0gICAgZGVidWcoRjEwMSwiY21jZm06IGNtZmxncyIsIiIsY21mbGdz KTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWNmbTogYXRtYnVmIixhdG1idWYsMCk7Ci0gICAgaW53b3Jk ID0geGMgPSBjYyA9IDA7Ci0KLSAgICBzZXRhdG0oIiIsMCk7CQkJLyogKFByb2JhYmx5IHVubmVj ZXNzYXJ5KSAqLwotCi0gICAgd2hpbGUgKGNtZmxncyAhPSAxKSB7Ci0gICAgICAgIHggPSBndHdv cmQoMCk7Ci0gICAgICAgIHhjICs9IGNjOwotCi0gICAgICAgIHN3aXRjaCAoeCkgewotCSAgY2Fz ZSAtOToKLQkgICAgcHJpbnRmKCJDb21tYW5kIG9yIGZpZWxkIHRvbyBsb25nXG4iKTsKLQkgIGNh c2UgLTQ6CQkJLyogRU9GICovCi0JICBjYXNlIC0yOgotCSAgY2FzZSAtMToKLQkgICAgcmV0dXJu KHgpOwotCSAgY2FzZSAxOgkJCS8qIEVuZCBvZiBsaW5lICovCi0JICAgIGlmICh4YyA+IDApIHsK LQkJaWYgKHhjbWZkYikgewotCQkgICAgcmV0dXJuKC02KTsKLQkJfSBlbHNlIHsKLQkJICAgIHBy aW50ZigiP05vdCBjb25maXJtZWQgLSAlc1xuIixhdG1idWYpOwotCQkgICAgcmV0dXJuKC05KTsK LQkJfQotCSAgICB9IGVsc2UKLQkgICAgICBicmVhazsJCQkvKiBGaW5pc2ggdXAgYmVsb3cgKi8K LQkgIGNhc2UgMjoJCQkvKiBFU0MgKi8KLQkgICAgaWYgKHhjID09IDApIHsKLQkJYmxlZXAoQlBf V0FSTik7Ci0JCWNvbnRpbnVlOwkJLyogb3IgZmFsbCB0aHJ1LiAqLwotCSAgICB9Ci0JICBjYXNl IDA6CQkJLyogU3BhY2UgKi8KLQkgICAgaWYgKHhjID09IDApCQkvKiBJZiBubyBjaGFycyB0eXBl ZCwgY29udGludWUsICovCi0JICAgICAgY29udGludWU7CQkJLyogZWxzZSBmYWxsIHRocnUuICov Ci0JICAgIC8qIGVsc2UgZmFsbCB0aHJ1Li4uICovCi0KLQkgIGNhc2UgMzoJCQkvKiBRdWVzdGlv biBtYXJrICovCi0JICAgIGlmICh4YyA+IDApIHsKLQkJaWYgKHhjbWZkYikgewotCQkgICAgcmV0 dXJuKC02KTsKLQkJfSBlbHNlIHsKLQkJICAgIHByaW50ZigiP05vdCBjb25maXJtZWQgLSAlc1xu IixhdG1idWYpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCSAgICB9Ci0JICAgIHByaW50ZigK LQkgICAgICAgIlxuIFByZXNzIHRoZSBSZXR1cm4gb3IgRW50ZXIga2V5IHRvIGNvbmZpcm0gdGhl IGNvbW1hbmRcbiIpOwotCSAgICBwcmludGYoIiVzJXMiLGNtcHJvbSxjbWRidWYpOwotCSAgICBm Zmx1c2goc3Rkb3V0KTsKLQkgICAgY29udGludWU7Ci0JfQotICAgIH0KLSAgICBkZWJvayA9IDE7 Ci0gICAgcmV0dXJuKDApOwotfQotCi0KLS8qIFRoZSBmb2xsb3dpbmcgbWF0ZXJpYWwgc3VwcG9y dHMgY2hhaW5lZCBwYXJzaW5nIGZ1bmN0aW9ucy4gKi8KLS8qIFNlZSBja3VjbWQuaCBmb3IgRkRC IGFuZCBPRkRCIGRlZmluaXRpb25zLiAqLwotCi1zdHJ1Y3QgT0ZEQiBjbXJlc3VsdCA9IHsJCS8q IFVuaXZlcnNhbCBjbWZkYiByZXN1bHQgaG9sZGVyICovCi0gICAgTlVMTCwJCQkJLyogQWRkcmVz cyBvZiBzdWNjZWVkaW5nIEZEQiBzdHJ1Y3QgKi8KLSAgICAwLAkJCQkJLyogRnVuY3Rpb24gY29k ZSAqLwotICAgIE5VTEwsCQkJCS8qIFN0cmluZyByZXN1bHQgKi8KLSAgICAwLAkJCQkJLyogSW50 ZWdlciByZXN1bHQgKi8KLSAgICAoQ0tfT0ZGX1QpMAkJCQkvKiBXaWRlIHJlc3VsdCAqLwotfTsK LQotVk9JRAotY21mZGJpKHAsZmMsczEsczIsczMsbjEsbjIsZixrLG54dCkJLyogSW5pdGlhbGl6 ZSBhbiBGREIgKi8KLSAgICBzdHJ1Y3QgRkRCICogcDsKLSAgICBpbnQgZmM7Ci0gICAgY2hhciAq IHMxLCAqIHMyLCAqIHMzOwotICAgIGludCBuMSwgbjI7Ci0gICAgeHhfc3RycCBmOwotICAgIHN0 cnVjdCBrZXl0YWIgKiBrOwotICAgIHN0cnVjdCBGREIgKiBueHQ7IHsKLQotICAgIHAtPmZjb2Rl ID0gZmM7Ci0gICAgcC0+aGxwbXNnID0gczE7Ci0gICAgcC0+ZGZsdCA9IHMyOwotICAgIHAtPnNk YXRhID0gczM7Ci0gICAgcC0+bmRhdGExID0gbjE7Ci0gICAgcC0+bmRhdGEyID0gbjI7Ci0gICAg cC0+c3BmID0gZjsKLSAgICBwLT5rd2R0YmwgPSBrOwotICAgIHAtPm54dGZkYiA9IG54dDsKLX0K LQotLyogIEMgTSBGIEQgQiAgLS0gIFBhcnNlIGEgZmllbGQgd2l0aCBzZXZlcmFsIHBvc3NpYmxl IGZ1bmN0aW9ucyAgKi8KLQotaW50Ci1jbWZkYihmZGJpbikgc3RydWN0IEZEQiAqIGZkYmluOyB7 Ci0jaWZuZGVmIE5PU1BMCi0gICAgZXh0ZXJuIGludCB4X2lmbnVtOyAgICAgICAgICAgICAgICAg LyogSUYgTlVNRVJJQyAtIGRpc2FibGVzIHdhcm5pbmdzICovCi0jZW5kaWYgLyogTk9TUEwgKi8K LSAgICBzdHJ1Y3QgRkRCICogaW4gPSBmZGJpbjsKLSAgICBzdHJ1Y3QgT0ZEQiAqIG91dCA9ICZj bXJlc3VsdDsKLSAgICBpbnQgeCA9IDAsIG4sIHI7Ci0gICAgQ0tfT0ZGX1QgdyA9IChDS19PRkZf VCkwOwotICAgIGNoYXIgKnMsICp4cCwgKm0gPSBOVUxMOwotICAgIGludCBlcnJiaXRzID0gMDsK LQotICAgIHhwID0gYnA7Ci0KLSAgICBvdXQtPmZjb2RlID0gLTE7CQkJLyogSW5pdGlhbGl6ZSBv dXRwdXQgc3RydWN0ICovCi0gICAgb3V0LT5mZGJhZGRyID0gTlVMTDsKLSAgICBvdXQtPnNyZXN1 bHQgPSBOVUxMOwotICAgIG91dC0+bnJlc3VsdCA9IDA7Ci0vKgotICBDdXJyZW50bHkgd2UgbWFr ZSBvbmUgdHJpcCB0aHJvdWdoIHRoZSBGREJzLiAgU28gaWYgdGhlIHVzZXIgdHlwZXMgRXNjIG9y Ci0gIFRhYiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZmllbGQsIG9ubHkgdGhlIGZpcnN0IEZEQiBp cyBleGFtaW5lZCBmb3IgYQotICBkZWZhdWx0LiAgSWYgdGhlIHVzZXIgdHlwZXMgPywgaGVscCBp cyBnaXZlbiBvbmx5IGZvciBvbmUgRkRCLiAgV2Ugc2hvdWxkCi0gIHNlYXJjaCB0aHJvdWdoIHRo ZSBGREJzIGZvciBhbGwgbWF0Y2hpbmcgcG9zc2liaWxpdGllcyAtLSBhbmQgaW4gcGFydGljdWxh cgotICBkaXNwbGF5IHRoZSBwZXJ0aW5lbnQgY29udGV4dC1zZW5zaXRpdmUgaGVscCBmb3IgZWFj aCBmdW5jdGlvbiwgcmF0aGVyIHRoYW4KLSAgdGhlIG9ubHkgdGhlIGZpcnN0IG9uZSB0aGF0IHdv cmtzLCBhbmQgdGhlbiByZXdpbmQgdGhlIEZEQiBwb2ludGVyIHNvIHdlCi0gIGFyZSBub3QgbG9j a2VkIG91dCBvZiB0aGUgZWFybGllciBvbmVzLgotKi8KLSAgICBjbWZsZGZsZ3MgPSAwOwotICAg IHdoaWxlICgxKSB7CQkJCS8qIExvb3AgdGhyb3VnaCB0aGUgY2hhaW4gb2YgRkRCcyAqLwotCW5v bXNnID0gMTsKLQl4Y21mZGIgPSAxOwotCXMgPSBOVUxMOwotCW4gPSAwOwotCWRlYnVnKEYxMDEs ImNtZmRiIGluLT5mY29kZSIsIiIsaW4tPmZjb2RlKTsKLQlzd2l0Y2ggKGluLT5mY29kZSkgewkJ LyogQ3VycmVudCBwYXJzaW5nIGZ1bmN0aW9uIGNvZGUgKi8KLQkgIGNhc2UgX0NNTlVNOgotCSAg ICByID0gaW4tPm5kYXRhMTsKLQkgICAgaWYgKHIgIT0gMTAgJiYgciAhPSA4KSByID0gMTA7Ci0j aWZuZGVmIE5PU1BMCi0gICAgICAgICAgICB4X2lmbnVtID0gMTsgICAgICAgICAgICAgICAgLyog RGlzYWJsZXMgd2FybmluZyBtZXNzYWdlcyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0JICAgIHgg PSBjbW51bShpbi0+aGxwbXNnLGluLT5kZmx0LHIsJm4saW4tPnNwZik7Ci0jaWZuZGVmIE5PU1BM Ci0gICAgICAgICAgICB4X2lmbnVtID0gMDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCSAgICBkZWJ1 ZyhGMTAxLCJjbWZkYiBjbW51bSIsIiIseCk7Ci0JICAgIGlmICh4IDwgMCkgZXJyYml0cyB8PSAx OwotCSAgICBicmVhazsKLQkgIGNhc2UgX0NNTlVXOgkJCS8qIFdpZGUgY21udW0gLSAyNCBEZWMg MjAwNSAqLwotCSAgICByID0gaW4tPm5kYXRhMTsKLQkgICAgaWYgKHIgIT0gMTAgJiYgciAhPSA4 KSByID0gMTA7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICB4X2lmbnVtID0gMTsgICAgICAg ICAgICAgICAgLyogRGlzYWJsZXMgd2FybmluZyBtZXNzYWdlcyAqLwotI2VuZGlmIC8qIE5PU1BM ICovCi0JICAgIHggPSBjbW51bXcoaW4tPmhscG1zZyxpbi0+ZGZsdCxyLCZ3LGluLT5zcGYpOwot I2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgeF9pZm51bSA9IDA7Ci0jZW5kaWYgLyogTk9TUEwg Ki8KLQkgICAgZGVidWcoRjEwMSwiY21mZGIgY21udW13IiwiIix3KTsKLQkgICAgaWYgKHggPCAw KSBlcnJiaXRzIHw9IDE7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBfQ01PRkk6Ci0JICAgIHggPSBj bW9maShpbi0+aGxwbXNnLGluLT5kZmx0LCZzLGluLT5zcGYpOwotCSAgICBkZWJ1ZyhGMTAxLCJj bWZkYiBjbW9maSIsIiIseCk7Ci0JICAgIGlmICh4IDwgMCkgZXJyYml0cyB8PSAyOwotCSAgICBi cmVhazsKLQkgIGNhc2UgX0NNSUZJOgotCSAgICB4ID0gY21pZmkyKGluLT5obHBtc2csCi0JCSAg ICAgICBpbi0+ZGZsdCwKLQkJICAgICAgICZzLAotCQkgICAgICAgJm4sCi0JCSAgICAgICBpbi0+ bmRhdGExLAotCQkgICAgICAgaW4tPnNkYXRhLAotCQkgICAgICAgaW4tPnNwZiwKLQkJICAgICAg IGluLT5uZGF0YTIKLQkJICAgICAgICk7Ci0JICAgIGRlYnVnKEYxMDEsImNtZmRiIGNtaWZpMiB4 IiwiIix4KTsKLQkgICAgZGVidWcoRjEwMSwiY21mZGIgY21pZmkyIG4iLCIiLG4pOwotCSAgICBp ZiAoeCA8IDApIGVycmJpdHMgfD0gNDsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIF9DTUZMRDoKLQkg ICAgY21mbGRmbGdzID0gaW4tPm5kYXRhMTsKLQkgICAgeCA9IGNtZmxkKGluLT5obHBtc2csaW4t PmRmbHQsJnMsaW4tPnNwZik7Ci0JICAgIGRlYnVnKEYxMDEsImNtZmRiIGNtZmxkIiwiIix4KTsK LQkgICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9IDg7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBfQ01U WFQ6Ci0JICAgIHggPSBjbXR4dChpbi0+aGxwbXNnLGluLT5kZmx0LCZzLGluLT5zcGYpOwotCSAg ICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbXR4dCIsIiIseCk7Ci0JICAgIGlmICh4IDwgMCkgZXJyYml0 cyB8PSAxNjsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIF9DTUtFWToKLQkgICAgeCA9IGNta2V5Mihp bi0+a3dkdGJsLAotCQkgICAgICAgaW4tPm5kYXRhMSwKLQkJICAgICAgIGluLT5obHBtc2csaW4t PmRmbHQsaW4tPnNkYXRhLGluLT5zcGYsaW4tPm5kYXRhMik7Ci0JICAgIGRlYnVnKEYxMDEsImNt ZmRiIGNta2V5IiwiIix4KTsKLQkgICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9ICgoaW4tPm5kYXRh MiAmIDQpID8gMzIgOiA2NCk7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBfQ01DRk06Ci0JICAgIHgg PSBjbWNmbSgpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbWNmbSIsIiIseCk7Ci0JICAgIGlm ICh4IDwgMCkgZXJyYml0cyB8PSAxMjg7Ci0JICAgIGJyZWFrOwotCSAgZGVmYXVsdDoKLQkgICAg ZGVidWcoRjEwMSwiY21mZGIgLSB1bmV4cGVjdGVkIGZ1bmN0aW9uIGNvZGUiLCIiLGluLT5mY29k ZSk7Ci0JICAgIHByaW50ZigiP2NtZmRiIC0gdW5leHBlY3RlZCBmdW5jdGlvbiBjb2RlOiAlZFxu Iixpbi0+ZmNvZGUpOwotCX0KLQlkZWJ1ZyhGMTAxLCJjbWZkYiB4IiwiIix4KTsKLQlkZWJ1ZyhG MTAxLCJjbWZkYiBjbWZsZ3MiLCIiLGNtZmxncyk7Ci0JZGVidWcoRjEwMSwiY21mZGIgY3JmbGFn IiwiIixjcmZsYWcpOwotCWRlYnVnKEYxMDEsImNtZmRiIHFtZmxhZyIsIiIscW1mbGFnKTsKLQlk ZWJ1ZyhGMTAxLCJjbWZkYiBlc2ZsYWciLCIiLGVzZmxhZyk7Ci0KLQlpZiAoeCA+IC0xKSB7CQkJ LyogU3VjY2VzcyAqLwotCSAgICBvdXQtPmZjb2RlID0gaW4tPmZjb2RlOwkvKiBGaWxsIGluIG91 dHB1dCBzdHJ1Y3QgKi8KLQkgICAgb3V0LT5mZGJhZGRyID0gaW47Ci0JICAgIG91dC0+c3Jlc3Vs dCA9IHM7Ci0JICAgIG91dC0+bnJlc3VsdCA9IChpbi0+ZmNvZGUgPT0gX0NNS0VZKSA/IHggOiBu OwotCSAgICBvdXQtPndyZXN1bHQgPSB3OwotCSAgICBvdXQtPmtmbGFncyA9IChpbi0+ZmNvZGUg PT0gX0NNS0VZKSA/IGNta3dmbGdzIDogMDsKLQkgICAgZGVidWcoRjExMSwiY21mZGIgb3V0LT5u cmVzdWx0IixvdXQtPnNyZXN1bHQsb3V0LT5ucmVzdWx0KTsKLQkgICAgZGVidWcoRjExMSwiY21m ZGIgb3V0LT53cmVzdWx0IixvdXQtPnNyZXN1bHQsb3V0LT53cmVzdWx0KTsKLQkgICAgbm9tc2cg PSAwOwotCSAgICB4Y21mZGIgPSAwOwotCSAgICAvKiBkZWJ1ZyhGMTExLCJjbWZkYiBjbWRidWYg JiBjcmZsYWciLGNtZGJ1ZixjcmZsYWcpOyAqLwotCSAgICBpZiAoY3JmbGFnKSB7Ci0JCWNtZmxn cyA9IDE7Ci0JICAgIH0KLQkgICAgcmV0dXJuKHgpOwkJCS8qIGFuZCByZXR1cm4gKi8KLQl9Ci0J aW4gPSBpbi0+bnh0ZmRiOwkJLyogRmFpbGVkLCBnZXQgbmV4dCBwYXJzaW5nIGZ1bmN0aW9uICov Ci0Jbm9tc2cgPSAwOwotCXhjbWZkYiA9IDA7Ci0JaWYgKCFpbikgewkJCS8qIE5vIG1vcmUgKi8K LQkgICAgZGVidWcoRjEwMSwiY21mZGIgZmFpbHVyZSB4IiwiIix4KTsKLQkgICAgZGVidWcoRjEw MSwiY21mZGIgZmFpbHVyZSBlcnJiaXRzIiwiIixlcnJiaXRzKTsKLQkgICAgaWYgKHggPT0gLTYp Ci0JICAgICAgeCA9IC05OwotCSAgICBpZiAoeCA9PSAtOSkgewotI2lmZGVmIENLUk9PVAotCQlp ZiAoY2tyb290ZXJyKQotCQkgIG0gPSAiT2ZmIExpbWl0cyI7Ci0JCWVsc2UKLSNlbmRpZiAvKiBD S1JPT1QgKi8KLQkJLyogTWFrZSBpbmZvcm1hdGl2ZSBtZXNzYWdlcyBmb3IgYSBmZXcgY29tbW9u IGNhc2VzICovCi0JCXN3aXRjaCAoZXJyYml0cykgewotCQkgIGNhc2UgNCszMjogbSA9ICJEb2Vz IG5vdCBtYXRjaCBmaWxlbmFtZSBvciBzd2l0Y2giOyBicmVhazsKLQkJICBjYXNlIDQrNjQ6IG0g PSAiRG9lcyBub3QgbWF0Y2ggZmlsZW5hbWUgb3Iga2V5d29yZCI7IGJyZWFrOwotCQkgIGNhc2Ug MSszMjogbSA9ICJOb3QgYSBudW1iZXIgb3IgdmFsaWQga2V5d29yZCI7IGJyZWFrOwotCQkgIGNh c2UgMSs2NDogbSA9ICJOb3QgYSBudW1iZXIgb3IgdmFsaWQgc3dpdGNoIjsgYnJlYWs7Ci0JCSAg ZGVmYXVsdDogbSA9ICJOb3QgdmFsaWQgaW4gdGhpcyBwb3NpdGlvbiI7Ci0JCX0KLQkJcHJpbnRm KCI/JXM6IFwiJXNcIlxuIixtLCBhdG1idWYpOwotCSAgICB9Ci0JICAgIHJldHVybih4KTsKLQl9 Ci0JaWYgKHggIT0gLTIgJiYgeCAhPSAtNiAmJiB4ICE9IC05ICYmIHggIT0gLTMpIC8qIEVkaXRp bmcgb3Igc29tZXN1Y2ggKi8KLQkgIHJldHVybih4KTsJCQkvKiBHbyBiYWNrIGFuZCByZXBhcnNl ICovCi0JcHAgPSBucCA9IGJwID0geHA7CQkvKiBCYWNrIHVwIHBvaW50ZXJzICovCi0JY21mbGdz ID0gLTE7CQkJLyogRm9yY2UgYSByZXBhcnNlICovCi0KLSNpZm5kZWYgTk9TUEwKLQlpZiAoIWFz a2ZsYWcpIHsJCQkvKiBJZiBub3QgZXhlY3V0aW5nIEFTSy1jbGFzcyBjbWQuLi4gKi8KLSNlbmRp ZiAvKiBOT1NQTCAqLwotCSAgICBpZiAoY3JmbGFnKSB7CQkvKiBJZiBDUiB3YXMgdHlwZWQsIHB1 dCBpdCBiYWNrICovCi0JCXB1c2hjID0gTEY7CQkvKiBCdXQgYXMgYSBsaW5lZmVlZCAqLwotCSAg ICB9IGVsc2UgaWYgKHFtZmxhZykgewkvKiBEaXR0byBmb3IgUXVlc3Rpb24gbWFyayAqLwotCQlw dXNoYyA9ICc/JzsKLQkgICAgfSBlbHNlIGlmIChlc2ZsYWcpIHsJLyogYW5kIEVzY2FwZSBvciBU YWIgKi8KLQkJcHVzaGMgPSBFU0M7Ci0JICAgIH0KLSNpZm5kZWYgTk9TUEwKLQl9Ci0jZW5kaWYg LyogTk9TUEwgKi8KLSAgICB9Ci19Ci0KLS8qCi0gICBDIE0gSSBPIEYgSSAgLS0gIFBhcnNlIGFu IGlucHV0IGZpbGUgT1IgdGhlIG5hbWUgb2YgYSBub25leGlzdGVudCBmaWxlLgotCi0gICBSZXBs YWNlcyB0aGUgY29tbWVudGVkLW91dCB2ZXJzaW9uIGFib3ZlLiAgVGhpcyBvbmUgYWN0dWFsbHkg d29ya3MgYW5kCi0gICBoYXMgdGhlIGV4cGVjdGVkIHN0cmFpZ2h0Zm9yd2FyZCBpbnRlcmZhY2Uu Ci0qLwotaW50Ci1jbWlvZmkoeGhscCx4ZGVmLHhwLHdpbGQsZikgY2hhciAqeGhscCwgKnhkZWYs ICoqeHA7IGludCAqd2lsZDsgeHhfc3RycCBmOyB7Ci0gICAgaW50IHg7Ci0gICAgc3RydWN0IEZE QiBmMSwgZjI7Ci0gICAgY21mZGJpKCZmMSxfQ01JRkkseGhscCx4ZGVmLCIiLDAsMCxmLE5VTEws JmYyKTsKLSAgICBjbWZkYmkoJmYyLF9DTU9GSSwiIiwiIiwiIiwwLDAsZixOVUxMLE5VTEwpOwot ICAgIHggPSBjbWZkYigmZjEpOwotICAgIGlmICh4IDwgMCkgewotCWlmICh4ID09IC0zKSB7Ci0J ICAgIHggPSAtOTsKLQkgICAgcHJpbnRmKCI/RmlsZW5hbWUgcmVxdWlyZWRcbiIpOwotCX0KLSAg ICB9Ci0gICAgKndpbGQgPSBjbXJlc3VsdC5ucmVzdWx0OwotICAgICp4cCA9IGNtcmVzdWx0LnNy ZXN1bHQ7Ci0gICAgcmV0dXJuKHgpOwotfQotCi0vKiAgRyBUIFcgTyBSIEQgIC0tICBHZXRzIGEg IndvcmQiIGZyb20gdGhlIGNvbW1hbmQgaW5wdXQgc3RyZWFtICAqLwotCi0vKgotVXNhZ2U6IHJl dGNvZGUgPSBndHdvcmQoYnJrKTsKLSAgYnJrID0gMCBmb3Igbm9ybWFsIHdvcmQgYnJlYWtzIChz cGFjZSwgQ1IsIEVzYywgPykKLSAgYnJrID0gMSB0byBhZGQgJzonIGFuZCAnPScgKGZvciBwYXJz aW5nIHN3aXRjaGVzKS4gIFRoZXNlIGNoYXJhY3RlcnMKLSAgICAgICAgYWN0IGFzIGJyZWFrIGNo YXJhY3RlcnMgb25seSBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaWVsZAotICAgICAg ICBpcyBzbGFzaCAoJy8nKSwgaS5lLiBzd2l0Y2ggaW50cm9kdWNlci4KLSAgYnJrID0gNCB0byBu b3Qgc3RyaXAgY29tbWVudHMgKHVzZWQgb25seSBmb3IgImhlbHAgIyIgYW5kICJoZWxwIDsiKS4K LQotUmV0dXJuczoKLS0xMCBUaW1lbGltaXQgc2V0IGFuZCB0aW1lZCBvdXQKLSAtOSBpZiBpbnB1 dCB3YXMgdG9vIGxvbmcKLSAtNCBpZiBlbmQgb2YgZmlsZSAoZS5nLiBwaXBlIGJyb2tlbikKLSAt MyBpZiBudWxsIGZpZWxkCi0gLTIgaWYgY29tbWFuZCBidWZmZXIgb3ZlcmZsb3dzCi0gLTEgaWYg dXNlciBkaWQgc29tZSBkZWxldGluZwotICAwIGlmIHdvcmQgdGVybWluYXRlcyB3aXRoIFNQIG9y IHRhYgotICAxIGlmIC4uLiBDUgotICAyIGlmIC4uLiBFU0MKLSAgMyBpZiAuLi4gPyAocXVlc3Rp b24gbWFyaykKLSAgNCBpZiAuLi4gOiBvciA9IGFuZCBjYWxsZWQgd2l0aCBicmsgIT0gMAotCi1X aXRoOgotICBwcCBwb2ludGluZyB0byBiZWdpbm5pbmcgb2Ygd29yZCBpbiBidWZmZXIKLSAgYnAg cG9pbnRpbmcgdG8gYWZ0ZXIgY3VycmVudCBwb3NpdGlvbgotICBhdG1idWYgY29udGFpbmluZyBh IGNvcHkgb2YgdGhlIHdvcmQKLSAgY2MgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGNoYXJhY3Rl cnMgaW4gdGhlIHdvcmQgY29waWVkIHRvIGF0bWJ1ZgotKi8KLQotaW50Ci11bmd3b3JkKCkgewkJ CQkvKiBVbmdldCBhIHdvcmQgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ1bmd3b3JkIGNtZmxncyIsIiIs Y21mbGdzKTsKLSAgICBpZiAodW5ndykgcmV0dXJuKDApOwotICAgIGNtZnNhdiA9IGNtZmxnczsK LSAgICB1bmd3ID0gMTsKLSAgICBjbWZsZ3MgPSAwOwotICAgIHJldHVybigwKTsKLX0KLQotLyog VW4tdW4tZ2V0IHdvcmQuICBVbmRvIHVuZ3dvcmQoKSBpZiBpdCBoYXMgYmVlbiBkb25lLiAqLwot Ci1WT0lECi11bnVuZ3coKSB7Ci0gICAgZGVidWcoRjAxMCwidW51bmd3IGF0bWJ1ZiIsYXRtYnVm LDApOwotICAgIGlmICh1bmd3KSB7Ci0JdW5ndyA9IDA7Ci0JY21mbGdzID0gY21mc2F2OwotCWF0 bWJ1ZlswXSA9IE5VTDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQKLWd0d29yZChicmspIGludCBi cms7IHsKLSAgICBpbnQgYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50 IGNoYXIgKi8KLSAgICBpbnQgcXVvdGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFn IGZvciBxdW90ZSBjaGFyYWN0ZXIgKi8KLSAgICBpbnQgZWNob2YgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAvKiBGbGFnIGZvciB3aGV0aGVyIHRvIGVjaG8gKi8KLSAgICBpbnQgY29tbWVudCA9 IDA7CQkJLyogRmxhZyBmb3IgaW4gY29tbWVudCAqLwotICAgIGNoYXIgKmNwID0gTlVMTDsJCQkv KiBDb21tZW50IHBvaW50ZXIgKi8KLSAgICBpbnQgZWludHIgPSAwOwkJCS8qIEZsYWcgZm9yIHN5 c2NhbGwgaW50ZXJydXB0ZWQgKi8KLSAgICBpbnQgYnJhY2VsdmwgPSAwOwkJCS8qIG5lc3RlZCBi cmFjZSBjb3VudGVyIFtqcnNdICovCi0gICAgaW50IGlzY29udGQgPSAwOwkJCS8qIEZsYWcgZm9y IGNvbnRpbnVhdGlvbiAqLwotICAgIGludCByZWFsdHR5ID0gMDsJCQkvKiBTdGRpbiBpcyByZWFs bHkgYSB0dHkgKi8KLSAgICBjaGFyIGZpcnN0bmIgID0gTlVMOwotICAgIGNoYXIgbGFzdGNoYXIg PSBOVUw7Ci0gICAgY2hhciBwcmV2Y2hhciA9IE5VTDsKLSAgICBjaGFyIGxicmFjZSwgcmJyYWNl OwotICAgIGludCBkcSA9IDA7CQkJCS8qIERvdWJsZXF1b3RlIGZsYWcgKi8KLSAgICBpbnQgZHFu ID0gMDsJCQkvKiBhbmQgY291bnQgKi8KLSAgICBpbnQgaXNlc2MgPSAwOwotCi0jaWZkZWYgUlRV Ci0gICAgZXh0ZXJuIGludCBydHVfYnVnOwotI2VuZGlmIC8qIFJUVSAqLwotCi0jaWZkZWYgSUtT RAotICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgIGV4dGVy biBpbnQga3N0YXJ0YWN0aXZlOwotCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICBleHRlcm4gaW50 IHRlcm10eXBlOyAgICAgICAgICAgICAgICAvKiBERyB0ZXJtaW5hbCB0eXBlIGZsYWcgKi8KLSAg ICBleHRlcm4gaW50IGNvbl9yZWFkc19tdDsgICAgICAgICAgICAvKiBDb25zb2xlIHJlYWQgYXN5 bmNoIGlzIGFjdGl2ZSAqLwotICAgIGlmIChjb25fcmVhZHNfbXQpIGNvbm5vaV9tdCgpOyAgICAg IC8qIFRhc2sgd291bGQgaW50ZXJmZXJlIHcvY29ucyByZWFkICovCi0jZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cp IHsKLQlkZWJ1ZyhGMTAxLCJndHdvcmQgYnJrIiwiIixicmspOwotCWRlYnVnKEYxMDEsImd0d29y ZCBjbWZsZGZsZ3MiLCIiLGNtZmxkZmxncyk7Ci0JZGVidWcoRjEwMSwiZ3R3b3JkIHN3YXJnIiwi Iixzd2FyZyk7Ci0JZGVidWcoRjEwMSwiZ3R3b3JkIGRweCIsIiIsZHB4KTsKLQlkZWJ1ZyhGMTAx LCJndHdvcmQgZWNob2YiLCIiLGVjaG9mKTsKLSNpZm5kZWYgTk9TUEwKLQlkZWJ1ZyhGMTAxLCJn dHdvcmQgYXNrZmxhZyIsIiIsYXNrZmxhZyk7Ci0JZGVidWcoRjEwMSwiZ3R3b3JkIHRpbWVsaW1p dCIsIiIsdGltZWxpbWl0KTsKLSNpZm5kZWYgTk9MT0NBTAotI2lmbmRlZiBOT1hGRVIKLSNpZmRl ZiBDS19BVVRPREwKLQlkZWJ1ZyhGMTAxLCJndHdvcmQgY21kYWRsIiwiIixjbWRhZGwpOwotI2Vu ZGlmIC8qIENLX0FVVE9ETCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2VuZGlmIC8qIE5PTE9D QUwgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIHJlYWx0dHkgPSBpc19hX3R0eSgwKTsJCS8qIFN0ZGlu IGlzIHJlYWxseSBhIHR0eT8gKi8KLQotICAgIGlmIChjbWZsZGZsZ3MgJiAxKSB7Ci0JbGJyYWNl ID0gJygnOwotCXJicmFjZSA9ICcpJzsKLSAgICB9IGVsc2UgewotCWxicmFjZSA9ICd7JzsKLQly YnJhY2UgPSAnfSc7Ci0gICAgfQotICAgIGNyZmxhZyA9IDA7Ci0gICAgcW1mbGFnID0gMDsKLSAg ICBlc2ZsYWcgPSAwOwotCi0gICAgaWYgKHN3YXJnKSB7CQkJLyogTm8gbGVhZGluZyBzcGFjZSBm b3Igc3dpdGNoIGFyZ3MgKi8KLQlpbndvcmQgPSAxOwotCXN3YXJnID0gMDsKLSAgICB9Ci0gICAg aWYgKHVuZ3cpIHsJCQkJLyogSGF2ZSBhIHdvcmQgc2F2ZWQ/ICovCi0jaWZkZWYgTV9VTkdXCi0J LyogRXhwZXJpbWVudGFsIGNvZGUgdG8gYWxsb3cgdW5nZXR0aW5nIG11bHRpcGxlIHdvcmRzLiAq LwotCS8qIFNlZSBjb21tZW50cyBpbiBja21rZXkyKCkgYWJvdmUuICovCi0JaW50IHg7Ci0JaWYg KG5wID4gcHApIHBwID0gbnA7Ci0Jd2hpbGUgKCpwcCA9PSBTUCkgcHArKzsKLQlpZiAoISpwcCkg ewotCSAgICB1bmd3ID0gMDsKLQkgICAgY21mbGdzID0gY21mc2F2OwotCX0gZWxzZSB7Ci0JICAg IGlmICgoeCA9IHNldGF0bShwcCwyKSkgPCAwKSB7Ci0JCXByaW50ZigiP1NhdmVkIHdvcmQgdG9v IGxvbmdcbiIpOwotCQlyZXR1cm4oLTkpOwotCSAgICB9Ci0JICAgIGlmIChwcFt4XSA+PSBTUCkg ewotCQljaGFyICpwMjsKLQkJcDIgPSBwcDsKLQkJcDIgKz0geDsKLQkJd2hpbGUgKCpwMiA9PSBT UCkgcDIrKzsKLQkJaWYgKCpwMikgewotCQkgICAgbnAgPSBwMjsKLQkJICAgIHVuZ3dvcmQoKTsK LQkJfQotCSAgICB9IGVsc2UgewotCQl1bmd3ID0gMDsKLQkJY21mbGdzID0gY21mc2F2OwotCQlk ZWJ1ZyhGMDEwLCJndHdvcmQgdW5ndyByZXR1cm4gYXRtYnVmIixhdG1idWYsMCk7Ci0JICAgIH0K LQl9Ci0JcmV0dXJuKGNtZmxncyk7Ci0jZWxzZQotCS8qCi0JICAgWW91IHdvdWxkIHRoaW5rIHRo ZSBmb2xsb3dpbmcgc2hvdWxkIGJlOgotICAgICAgICAgICAgIHdoaWxlICgqcHAgPT0gU1ApIHBw Kys7Ci0gICAgICAgICAgIGJ1dCB5b3Ugd291bGQgYmUgd3JvbmcgLS0gbWFraW5nIHRoaXMgY2hh bmdlIGJyZWFrcyBHT1RPLgotICAgICAgICAqLwotCXdoaWxlICgqcHArKyA9PSBTUCkgOwotCWlm IChzZXRhdG0ocHAsMikgPCAwKSB7Ci0JICAgIHByaW50ZigiP1NhdmVkIHdvcmQgdG9vIGxvbmdc biIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLQl1bmd3ID0gMDsKLQljbWZsZ3MgPSBjbWZzYXY7 Ci0JZGVidWcoRjAxMCwiZ3R3b3JkIHVuZ3cgcmV0dXJuIGF0bWJ1ZiIsYXRtYnVmLDApOwotCXJl dHVybihjbWZsZ3MpOwotI2VuZGlmIC8qIE1fVU5HVyAqLwotICAgIH0KLSAgICBwcCA9IG5wOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiBjdXJyZW50IGZpZWxkICovCi0K LSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWco RjExMCwiZ3R3b3JkIGNtZGJ1ZiIsY21kYnVmLDApOwotCWRlYnVnKEYxMTAsImd0d29yZCBicCIs YnAsMCk7Ci0JZGVidWcoRjExMCwiZ3R3b3JkIHBwIixwcCwwKTsKLSAgICB9Ci0jZW5kaWYgLyog REVCVUcgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgewotCS8qIElmIHdlIGFyZSByZXBh cnNpbmcgd2UgaGF2ZSB0byByZWNvdW50IGFueSBicmFjZXMgb3IgZG91YmxlcXVvdGVzICovCi0J Y2hhciAqIHAgPSBwcDsKLQljaGFyIGM7Ci0JaWYgKCpwID09ICciJykKLQkgIGRxKys7Ci0Jd2hp bGUgKChjID0gKnArKykpCi0JICBpZiAoYyA9PSBsYnJhY2UpCi0JICAgIGJyYWNlbHZsKys7Ci0J ICBlbHNlIGlmIChjID09IHJicmFjZSkKLQkgICAgYnJhY2VsdmwtLTsKLQkgIGVsc2UgaWYgKGRx ICYmIGMgPT0gJyInKQotCSAgICBkcW4rKzsKLSAgICB9Ci0gICAgd2hpbGUgKGJwIDwgY21kYnVm K0NNREJMKSB7ICAgICAgICAgLyogQmlnIGdldC1hLWNoYXJhY3RlciBsb29wICovCi0JZWNob2Yg PSAwOwkJCS8qIEFzc3VtZSB3ZSBkb24ndCBlY2hvIGJlY2F1c2UgKi8KLQljaHNyYyA9IDA7CQkJ LyogY2hhcmFjdGVyIGNhbWUgZnJvbSByZXBhcnNlIGJ1Zi4gKi8KLSNpZmRlZiBCU19ESVJTRVAK LUNNRElSUEFSU0U6Ci0jZW5kaWYgLyogQlNfRElSU0VQICovCi0KLQljID0gKmJwOwotICAgICAg ICBpZiAoIWMpIHsJCQkvKiBJZiBubyBjaGFyIHdhaXRpbmcgaW4gcmVwYXJzZSBidWYgKi8KLQkg ICAgaWYgKChkcHgKLSNpZm5kZWYgTk9TUEwKLQkJIHx8IGVjaG9zdGFycwotI2VuZGlmIC8qIE5P U1BMICovCi0JCSApICYmICghcHVzaGMKLSNpZm5kZWYgTk9TUEwKLQkJCXx8IGFza2ZsYWcKLSNl bmRpZiAvKiBOT1NQTCAqLwotCQkJKSkJCS8qIEdldCBmcm9tIHR0eSwgc2V0IGVjaG8gZmxhZyAq LwotCSAgICAgIGVjaG9mID0gMTsKLQkgICAgYyA9IGNtZGdldGModGltZWxpbWl0KTsJLyogUmVh ZCBhIGNvbW1hbmQgY2hhcmFjdGVyLiAqLwotI2lmZGVmIERFQlVHCi0JICAgIGRlYnVnKEYxMDEs Imd0d29yZCBjIiwiIixjKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotCi0JICAgIGlmICh0aW1lbGlt aXQgJiYgYyA8IC0xKSB7CS8qIFRpbWVkIG91dCAqLwotCQlyZXR1cm4oLTEwKTsKLQkgICAgfQot Ci0jaWZuZGVmIE5PWEZFUgotLyoKLSAgVGhlIGZvbGxvd2luZyBhbGxvd3MgcGFja2V0IHJlY29n bml0aW9uIGluIHRoZSBjb21tYW5kIHBhcnNlci4KLSAgUHJlc2VudGx5IGl0IHdvcmtzIG9ubHkg Zm9yIEtlcm1pdCBwYWNrZXRzLCBhbmQgaWYgb3VyIGN1cnJlbnQgcHJvdG9jb2wKLSAgaGFwcGVu cyB0byBiZSBhbnl0aGluZyBiZXNpZGVzIEtlcm1pdCwgd2Ugc2ltcGx5IGZvcmNlIGl0IHRvIEtl cm1pdC4KLSAgV2UgZG9uJ3QgdXNlIHRoZSBBUEMgbWVjaGFuaXNtIGhlcmUgZm9yIG1lY2hhbmlj YWwgcmVhc29ucywgYW5kIGFsc28KLSAgYmVjYXVzZSB0aGlzIHdheSwgaXQgd29ya3MgZXZlbiB3 aXRoIG1pbmltYWxseSBjb25maWd1cmVkIGludGVyYWN0aXZlCi0gIHZlcnNpb25zLiAgQWRkIFpt b2RlbSBsYXRlci4uLgotKi8KLSNpZmRlZiBDS19BVVRPREwKLQkgICAgaWYgKCghbG9jYWwgJiYg Y21kYWRsKQkvKiBBdXRvZG93bmxvYWQgZW5hYmxlZD8gKi8KLSNpZmRlZiBJS1NfT1BUSU9OCi0J CXx8IFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQKLSNlbmRpZiAvKiBJ S1NfT1BUSU9OICovCi0JCSkgewotCQlpbnQgazsKLQkJayA9IGtzdGFydCgoQ0hBUiljKTsJLyog S2VybWl0IFMgb3IgSSBwYWNrZXQ/ICovCi0JCWlmIChrKSB7Ci0JCSAgICBpbnQga3NpZ24gPSAw OwotCQkgICAgaWYgKGsgPCAwKSB7CS8qIE1pbnVzLVByb3RvY29sPyAqLwotI2lmZGVmIE5PU0VS VkVSCi0JCQlnb3RvIG5vc2VydmVyOwkvKiBOZWVkIHNlcnZlciBtb2RlIGZvciB0aGlzICovCi0j ZWxzZQotCQkJa3NpZ24gPSAxOwkvKiBSZW1lbWJlciAqLwotCQkJayA9IDAgLSBrOwkvKiBDb252 ZXJ0IHRvIGFjdHVhbCBwcm90b2NvbCAqLwotCQkJanVzdG9uZSA9IDE7CS8qIEZsYWcgZm9yIHBy b3RvY29sIG1vZHVsZSAqLwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0JCSAgICB9IGVsc2UKLQkJ ICAgICAganVzdG9uZSA9IDA7Ci0JCSAgICBrLS07CQkvKiBBZGp1c3Qga3N0YXJ0J3MgcmV0dXJu IHZhbHVlICovCi0JCSAgICBpZiAoayA9PSBQUk9UT19LKSB7Ci0JCQlleHRlcm4gaW50IHByb3Rv Y29sLCBnX3Byb3RvOwotCQkJZXh0ZXJuIENIQVIgc3N0YXRlOwotCQkJZ19wcm90byA9IHByb3Rv Y29sOwotCQkJcHJvdG9jb2wgPSBQUk9UT19LOyAvKiBDcnVkZS4uLiAqLwotCQkJc3N0YXRlID0g a3NpZ24gPyAneCcgOiAndic7Ci0JCQljbWRidWZbMF0gPSBOVUw7Ci0JCQlyZXR1cm4oLTMpOwot CQkgICAgfQotCQl9Ci0JICAgIH0KLSNpZmRlZiBOT1NFUlZFUgotCSAgbm9zZXJ2ZXI6Ci0jZW5k aWYgLyogTk9TRVJWRVIgKi8KLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSNlbmRpZiAvKiBOT1hG RVIgKi8KLQotCSAgICBjaHNyYyA9IDE7CQkJLyogUmVtZW1iZXIgY2hhcmFjdGVyIHNvdXJjZSBp cyB0dHkuICovCi0JICAgIGJya2NoYXIgPSBjOwotCi0jaWZkZWYgSUtTRAotICAgICAgICAgICAg aWYgKGluc2VydmVyICYmIGMgPCAwKSB7ICAgIC8qIEVuZCBvZiBzZXNzaW9uPyAqLwotICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsImd0d29yZCBjIDwgMCIsImV4aXRpbmciLGMpOwotICAgICAg ICAgICAgICAgIHJldHVybigtNCk7ICAgICAgICAgICAgIC8qIENsZWFudXAgYW5kIHRlcm1pbmF0 ZSAqLwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotI2lmZGVmIE9TMgotICAg ICAgICAgICBpZiAoYyA8IDApIHsJCQkvKiBFcnJvciAqLwotCSAgICAgICBpZiAoYyA9PSAtMykg ewkJLyogRW1wdHkgd29yZD8gKi8KLQkJICAgaWYgKGJsb2NrbHZsID4gMCkJLyogSW4gYSBibG9j ayAqLwotCQkgICAgIGNvbnRpbnVlOwkJLyogc28ga2VlcCBsb29raW5nIGZvciBibG9jayBlbmQg Ki8KLQkJICAgZWxzZQotCQkgICAgIHJldHVybigtMyk7CS8qIE90aGVyd2lzZSBzYXkgd2UgZ290 IG5vdGhpbmcgKi8KLQkgICAgICAgfSBlbHNlIHsJCQkvKiBOb3QgZW1wdHkgd29yZCAqLwotCQkg ICByZXR1cm4oLTQpOwkJLyogU28gc29tZSBraW5kIG9mIGkvbyBlcnJvciAqLwotCSAgICAgICB9 Ci0gICAgICAgICAgIH0KLSNlbHNlCi0jaWZkZWYgTUFDCi0JICAgaWYgKGMgPT0gLTMpCQkJLyog RW1wdHkgd29yZC4uLiAqLwotCSAgICAgaWYgKGJsb2NrbHZsID4gMCkKLQkgICAgICAgY29udGlu dWU7Ci0JICAgICBlbHNlCi0JICAgICAgIHJldHVybigtMyk7Ci0jZW5kaWYgLyogTUFDICovCi0j ZW5kaWYgLyogT1MyICovCi0JICAgaWYgKGMgPT0gRU9GKSB7CQkvKiBUaGlzIGNhbiBoYXBwZW4g aWYgc3RkaW4gbm90IHR0eS4gKi8KLSNpZmRlZiBFSU5UUgotLyoKLSAgU29tZSBvcGVyYXRpbmcg YW5kL29yIEMgcnVudGltZSBzeXN0ZW1zIHJldHVybiBFSU5UUiBmb3Igbm8gZ29vZCByZWFzb24s Ci0gIHdoZW4gdGhlIGVuZCBvZiB0aGUgc3RhbmRhcmQgaW5wdXQgImZpbGUiIGlzIGVuY291bnRl cmVkLiAgSW4gY2FzZXMgbGlrZQotICB0aGlzLCB3ZSBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29w OyBoZW5jZSB0aGUgZWludHIgY291bnRlciwgd2hpY2ggaXMgcmVzZXQKLSAgdG8gMCB1cG9uIGVh Y2ggY2FsbCB0byB0aGlzIHJvdXRpbmUuCi0qLwotCQlkZWJ1ZyhGMTAxLCJndHdvcmQgRU9GIiwi IixlcnJubyk7Ci0JCWlmIChlcnJubyA9PSBFSU5UUiAmJiArK2VpbnRyIDwgNCkgLyogV2hlbiBi ZydkIHByb2Nlc3MgaXMgKi8KLQkJICBjb250aW51ZTsJCS8qIGZnJ2QgYWdhaW4uICovCi0jZW5k aWYgLyogRUlOVFIgKi8KLQkJcmV0dXJuKC00KTsKLQkgICAgfQotCSAgICBjICY9IGNtZG1zazsJ CS8qIFN0cmlwIGFueSBwYXJpdHkgYml0ICovCi0JfQkJCQkvKiBpZiBkZXNpcmVkLiAqLwotCi0v KiBOb3cgd2UgaGF2ZSB0aGUgbmV4dCBjaGFyYWN0ZXIgKi8KLQotCWlzZXNjID0gKGMgPT0gRVND KTsJCS8qIEEgcmVhbCBFU0M/ICovCi0KLQlpZiAoIWZpcnN0bmIgJiYgYyA+IFNQKSB7CS8qIEZp cnN0IG5vbmJsYW5rICovCi0JICAgIGZpcnN0bmIgPSBjOwotCSAgICBpZiAoYyA9PSAnIicpCQkv KiBTdGFydHMgd2l0aCBkb3VibGVxdW90ZSAqLwotCSAgICAgIGRxID0gMTsKLQl9Ci0JaWYgKGMg PT0gJyInKQkJCS8qIENvdW50IGRvdWJsZXF1b3RlcyAqLwotCSAgZHFuKys7Ci0KLQlpZiAocXVv dGUgJiYgKGMgPT0gQ1IgfHwgYyA9PSBMRikpIHsgLyogRW50ZXIga2V5IGZvbGxvd2luZyBxdW90 ZSAqLwotCSAgICAqYnArKyA9IENNRFE7CQkvKiBEb3VibGUgaXQgKi8KLQkgICAgKmJwID0gTlVM OwotCSAgICBxdW90ZSA9IDA7Ci0JfQotICAgICAgICBpZiAocXVvdGUgPT0gMCkgewkJLyogSWYg dGhpcyBpcyBub3QgYSBxdW90ZWQgY2hhcmFjdGVyICovCi0JICAgIHN3aXRjaCAoYykgewotCSAg ICAgIGNhc2UgQ01EUToJCS8qIEdvdCB0aGUgcXVvdGUgY2hhcmFjdGVyIGl0c2VsZiAqLwotCQlp ZiAoIWNvbW1lbnQgJiYgcXVvdGluZykKLQkJICBxdW90ZSA9IDE7CQkvKiBGbGFnIGl0IGlmIG5v dCBpbiBhIGNvbW1lbnQgKi8KLQkJYnJlYWs7Ci0JICAgICAgY2FzZSBGRjoJCQkvKiBGb3JtZmVl ZC4gKi8KLSAgICAgICAgICAgICAgICBjID0gTkw7ICAgICAgICAgICAgICAgICAvKiBSZXBsYWNl IHdpdGggbmV3bGluZSAqLwotCQljbWRjbHJzY24oKTsJCS8qIENsZWFyIHRoZSBzY3JlZW4gKi8K LQkJYnJlYWs7Ci0JICAgICAgY2FzZSBIVDoJCQkvKiBIb3Jpem9udGFsIFRhYiAqLwotCQlpZiAo Y29tbWVudCkJCS8qIElmIGluIGNvbW1lbnQsICovCi0JCSAgYyA9IFNQOwkJLyogc3Vic3RpdHV0 ZSBzcGFjZSAqLwotCQllbHNlCQkJLyogb3RoZXJ3aXNlICovCi0JCSAgYyA9IEVTQzsJCS8qIHN1 YnN0aXR1dGUgRVNDIChmb3IgY29tcGxldGlvbikgKi8KLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAn Oyc6CQkJLyogVHJhaWxpbmcgY29tbWVudCAqLwotCSAgICAgIGNhc2UgJyMnOgotCQlpZiAoISAo YnJrICYgNCkgKSB7CS8qIElmIG5vdCBrZWVwaW5nIGNvbW1lbnRzICovCi0JCSAgICBpZiAoaW53 b3JkID09IDAgJiYgcXVvdGluZykgeyAvKiBJZiBub3QgaW4gYSB3b3JkICovCi0JCQljb21tZW50 ID0gMTsJLyogc3RhcnQgYSBjb21tZW50LiAqLwotCQkJY3AgPSBicDsJLyogcmVtZW1iZXIgd2hl cmUgaXQgc3RhcnRzLiAqLwotCQkgICAgfQotCQl9Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIGlm ICgha3N0YXJ0YWN0aXZlICYmCS8qIE5vdCBpbiBwb3NzaWJsZSBLZXJtaXQgcGFja2V0ICovCi0J CSFjb21tZW50ICYmIGMgPT0gU1ApIHsJLyogU3BhY2Ugbm90IGluIGNvbW1lbnQgKi8KLSAgICAg ICAgICAgICAgICAqYnArKyA9IChjaGFyKSBjOwkvKiBkZXBvc2l0IGluIGJ1ZmZlciBpZiBub3Qg YWxyZWFkeSAqLwotCQkvKiBkZWJ1ZyhGMTAxLCJndHdvcmQgZWNob2YgMiIsIiIsZWNob2YpOyAq LwotI2lmZGVmIEJFQk9YCi0gICAgICAgICAgICAgICAgaWYgKGVjaG9mKSB7Ci0JCSAgICBjbWRl Y2hvKChjaGFyKSBjLCAwKTsgLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KLSAgICAgICAgICAg ICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRl cnIpOwotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKGVjaG9m KSB7Ci0JCSAgICBjbWRlY2hvKChjaGFyKSBjLCAwKTsgLyogRWNobyB3aGF0IHdhcyB0eXBlZC4g Ki8KLQkJICAgIGlmICh0aW1lbGltaXQpCi0JCSAgICAgIGZmbHVzaChzdGRvdXQpOwotCQl9Ci0j ZW5kaWYgLyogQkVCT1ggKi8KLSAgICAgICAgICAgICAgICBpZiAoaW53b3JkID09IDApIHsgICAg ICAvKiBJZiBsZWFkaW5nLCBnb2JibGUgaXQuICovCi0gICAgICAgICAgICAgICAgICAgIHBwKys7 Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgIC8qIElmIHRlcm1pbmF0aW5nLCByZXR1cm4uICovCi0JCSAgICBpZiAo KCFkcSAmJiAoKCpwcCAhPSBsYnJhY2UpIHx8IChicmFjZWx2bCA9PSAwKSkpIHx8Ci0JCQkoZHEg JiYgZHFuID4gMSAmJiAqKGJwLTIpID09ICciJykpIHsKLQkJCW5wID0gYnA7Ci0JCQljbWJwdHIg PSBucDsKLQkJCWlmIChzZXRhdG0ocHAsMCkgPCAwKSB7Ci0JCQkgICAgcHJpbnRmKCI/RmllbGQg dG9vIGxvbmcgZXJyb3IgMVxuIik7Ci0JCQkgICAgZGVidWcoRjExMSwiZ3R3b3JkIHRvbyBsb25n ICMxIixwcCxzdHJsZW4ocHApKTsKLQkJCSAgICByZXR1cm4oLTkpOwotCQkJfQotCQkJYnJrY2hh ciA9IGM7Ci0JCQlpbndvcmQgPSBjbWZsZ3MgPSAwOwotCQkJcmV0dXJuKDApOwotCQkgICAgfQot ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBpZiAoYyA9PSBsYnJhY2UpIHsKLQkJYnJhY2VsdmwrKzsKLQkJ LyogZGVidWcoRjEwMSwiZ3R3b3JkIGJyYWNlbHZsKysiLCIiLGJyYWNlbHZsKTsgKi8KLQkgICAg fQotICAgICAgICAgICAgaWYgKGMgPT0gcmJyYWNlICYmIGJyYWNlbHZsID4gMCkgewotICAgICAg ICAgICAgICAgIGJyYWNlbHZsLS07Ci0JCS8qIGRlYnVnKEYxMDEsImd0d29yZCBicmFjZWx2bC0t IiwiIixicmFjZWx2bCk7ICovCi0gICAgICAgICAgICAgICAgaWYgKGxpbmViZWdpbikKLQkJICBi bG9ja2x2bC0tOwotICAgICAgICAgICAgfQotCSAgICBpZiAoKGMgPT0gJz0nIHx8IGMgPT0gJzon KSAmJgotCQkvKiBeXl4gKi8KLQkJIWtzdGFydGFjdGl2ZSAmJiAhY29tbWVudCAmJiBicmsgLyog JiYgKGZpcnN0bmIgPT0gJy8nKSAqLwotCQkpIHsKLSAgICAgICAgICAgICAgICAqYnArKyA9IChj aGFyKSBjOwkvKiBTd2l0Y2ggYXJndW1lbnQgc2VwYXJhdG9yICovCi0JCS8qIGRlYnVnKEYxMTEs Imd0d29yZCBzd2l0Y2ggYXJnc2VwIixjbWRidWYsYnJrKTsgKi8KLSNpZmRlZiBCRUJPWAotICAg ICAgICAgICAgICAgIGlmIChlY2hvZikgewotCQkgICAgY21kZWNobygoY2hhcikgYywgMCk7IC8q IEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCi0gICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRv dXQpOwotICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3RkZXJyKTsKLSAgICAgICAgICAgICAg ICB9Ci0jZWxzZQotCQlpZiAoZWNob2YpIHsKLQkJICAgIGNtZGVjaG8oKGNoYXIpIGMsIDApOyAv KiBFY2hvIHdoYXQgd2FzIHR5cGVkLiAqLwotCQkgICAgaWYgKHRpbWVsaW1pdCkKLQkJICAgICAg ZmZsdXNoKHN0ZG91dCk7Ci0JCX0KLSNlbmRpZiAvKiBCRUJPWCAqLwotCQlpZiAoKCpwcCAhPSBs YnJhY2UpIHx8IChicmFjZWx2bCA9PSAwKSkgewotCQkgICAgbnAgPSBicDsKLQkJICAgIGNtYnB0 ciA9IG5wOwotCQkgICAgaWYgKHNldGF0bShwcCwyKSA8IDApIHsgLyogXl5eICovCi0JCQlwcmlu dGYoIj9GaWVsZCB0b28gbG9uZyBlcnJvciAxXG4iKTsKLQkJCWRlYnVnKEYxMTEsImd0d29yZCB0 b28gbG9uZyAjMSIscHAsc3RybGVuKHBwKSk7Ci0JCQlyZXR1cm4oLTkpOwotCQkgICAgfQotCQkg ICAgaW53b3JkID0gY21mbGdzID0gMDsKLQkJICAgIGJya2NoYXIgPSBjOwotCQkgICAgcmV0dXJu KDQpOwotCQl9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYyA9PSBMRiB8fCBjID09 IENSKSB7CS8qIENSIG9yIExGLiAqLwotCQlpZiAoZWNob2YpIHsKLSAgICAgICAgICAgICAgICAg ICAgY21kbmV3bCgoY2hhciljKTsJLyogZWNobyBpdC4gKi8KLSNpZmRlZiBCRUJPWAotICAgICAg ICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgICAgICAgICAgICAgZmZsdXNo KHN0ZGVycik7Ci0jZW5kaWYgLyogQkVCT1ggKi8KLSAgICAgICAgICAgICAgICB9Ci0JCXsKLQkJ ICAgIC8qIFRyaW0gdHJhaWxpbmcgY29tbWVudCBhbmQgd2hpdGVzcGFjZSAqLwotCQkgICAgY2hh ciAqcXE7Ci0JCSAgICBpZiAoY29tbWVudCkgewkvKiBFcmFzZSBjb21tZW50ICovCi0JCQl3aGls ZSAoYnAgPj0gY3ApIC8qIEJhY2sgdG8gY29tbWVudCBwb2ludGVyICovCi0JCQkgICpicC0tID0g TlVMOwotCQkJYnArKzsKLQkJCXBwID0gYnA7CS8qIEFkanVzdCBvdGhlciBwb2ludGVycyAqLwot CQkJaW53b3JkID0gMDsJLyogYW5kIGZsYWdzICovCi0JCQljb21tZW50ID0gMDsKLQkJCWNwID0g TlVMTDsKLQkJICAgIH0KLQkJICAgIHFxID0gaW53b3JkID8gcHAgOiAoY2hhciAqKWNtZGJ1ZjsK LQkJICAgIC8qIEVyYXNlIHRyYWlsaW5nIHdoaXRlc3BhY2UgKi8KLQkJICAgIHdoaWxlIChicCA+ IHFxICYmICgqKGJwLTEpID09IFNQIHx8ICooYnAtMSkgPT0gSFQpKSB7Ci0JCQlicC0tOwotCQkJ LyogZGVidWcoRjAwMCwiZXJhc2luZyIsIiIsKmJwKTsgKi8KLQkJCSpicCA9IE5VTDsKLQkJICAg IH0KLQkJICAgIGxhc3RjaGFyID0gKGJwID4gcXEpID8gKihicC0xKSA6IE5VTDsKLQkJICAgIHBy ZXZjaGFyID0gKGJwID4gcXErMSkgPyAqKGJwLTIpIDogTlVMOwotCQl9Ci0JCWlmIChsaW5lYmVn aW4gJiYgYmxvY2tsdmwgPiAwKSAvKiBCbGFuayBsaW5lIGluIHsuLi59IGJsb2NrICovCi0JCSAg Y29udGludWU7Ci0KLQkJbGluZWJlZ2luID0gMTsJCS8qIEF0IGJlZ2lubmluZyBvZiBuZXh0IGxp bmUgKi8KLQkJaXNjb250ZCA9IHByZXZjaGFyICE9IENNRFEgJiYKLQkJICAobGFzdGNoYXIgPT0g Jy0nIHx8IGxhc3RjaGFyID09IGxicmFjZSk7Ci0JCWRlYnVnKEYxMDEsImd0d29yZCBpc2NvbnRk IiwiIixpc2NvbnRkKTsKLQotICAgICAgICAgICAgICAgIGlmIChpc2NvbnRkKSB7CQkvKiBJZiBs aW5lIGlzIGNvbnRpbnVlZC4uLiAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hzcmMpIHsJ LyogSWYgcmVhZGluZyBmcm9tIHR0eSwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgq KGJwLTEpID09IGxicmFjZSkgeyAvKiBDaGVjayBmb3IgImJlZ2luIGJsb2NrIiAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpicCsrID0gU1A7CS8qIEluc2VydCBhIHNwYWNlIGZvciBu ZWF0bmVzcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrbHZsKys7CS8qIENv dW50IGJsb2NrIG5lc3RpbmcgbGV2ZWwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7CS8qIE9yIGh5cGhlbiAqLwotCQkJICAgIGJwLS07CS8qIE92ZXJ3cml0ZSB0aGUgaHlwaGVu ICovCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAq YnAgPSBOVUw7CS8qIGVyYXNlIHRoZSBkYXNoLCAqLwotICAgICAgICAgICAgICAgICAgICAgICAg Y29udGludWU7CS8qIGFuZCBnbyBiYWNrIGZvciBuZXh0IGNoYXIgbm93LiAqLwotICAgICAgICAg ICAgICAgICAgICB9Ci0JCX0gZWxzZSBpZiAoYmxvY2tsdmwgPiAwKSB7IC8qIE5vIGNvbnRpbnVh dGlvbiBjaGFyYWN0ZXIgKi8KLQkJICAgIGlmIChjaHNyYykgewkvKiBCdXQgd2UncmUgaW4gYSAi YmxvY2siICovCi0JCQkqYnArKyA9ICcsJzsJLyogQWRkIGNvbW1hICovCi0JCQkqYnAgPSBOVUw7 Ci0JCQljb250aW51ZTsKLQkJICAgIH0KLQkJfSBlbHNlIHsJCS8qIE5vIGNvbnRpbnVhdGlvbiwg ZW5kIG9mIGNvbW1hbmQuICovCi0JCSAgICAqYnAgPSBOVUw7CQkvKiBUZXJtaW5hdGUgdGhlIGNv bW1hbmQgc3RyaW5nLiAqLwotCQkgICAgaWYgKGNvbW1lbnQpIHsJLyogSWYgd2UncmUgaW4gYSBj b21tZW50LCAqLwotCQkJY29tbWVudCA9IDA7CS8qIFNheSB3ZSdyZSBub3QgYW55IG1vcmUsICov Ci0JCQkqY3AgPSBOVUw7CS8qIGN1dCBpdCBvZmYuICovCi0JCSAgICB9Ci0JCSAgICBucCA9IGJw OwkJLyogV2hlcmUgdG8gc3RhcnQgbmV4dCBmaWVsZC4gKi8KLQkJICAgIGNtYnB0ciA9IG5wOwot CQkgICAgaWYgKHNldGF0bShwcCwwKSA8IDApIHsgLyogQ29weSBmaWVsZCB0byBhdG9tIGJ1ZmZl ciAqLwotCQkJZGVidWcoRjExMSwiZ3R3b3JkIHRvbyBsb25nICMyIixwcCxzdHJsZW4ocHApKTsK LQkJCXByaW50ZigiP0ZpZWxkIHRvbyBsb25nIGVycm9yIDJcbiIpOwotCQkJcmV0dXJuKC05KTsK LQkJICAgIH0KLQkJICAgIGlud29yZCA9IDA7CQkvKiBOb3QgaW4gYSB3b3JkIGFueSBtb3JlLiAq LwotCQkgICAgY3JmbGFnID0gMTsKLSAgICAgICAgICAgICAgICAgICAgLyogZGVidWcoRjExMCwi Z3R3b3JkIiwiY3JmbGFnIGlzIHNldCIsMCk7ICovCi0jaWZkZWYgQ0tfUkVDQUxMCi0JCSAgICBj dXJyZW50ID0gcmxhc3Q7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0JCSAgICBjbWZsZ3MgPSAx OwotCQkgICAgaWYgKCF4Y21kc3JjCi0jaWZkZWYgQ0tfUkVDQUxMCi0JCQl8fCBmb3JjZV9hZGQK LSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLQkJCSkKLSAgCQkgICAgICBhZGRjbWQoY21kYnVmKTsK LQkJICAgIHJldHVybihjbWZsZ3MpOwotCQl9Ci0gICAgICAgICAgICB9Ci0vKgotICBUaGlzIHNl Y3Rpb24gaGFuZGxlcyBpbnRlcmFjdGl2ZSBoZWxwLCBjb21wbGV0aW9uLCBlZGl0aW5nLCBhbmQg aGlzdG9yeS4KLSAgUmVhcnJhbmdlZCBhcyBhIHN3aXRjaCBzdGF0ZW1lbnQgZXhlY3V0ZWQgb25s eSBpZiB3ZSdyZSBhdCB0b3AgbGV2ZWwgc2luY2UKLSAgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW55 IG9mIHRoaXMgd2l0aGluIGNvbW1hbmQgZmlsZXMgYW5kIG1hY3JvczogQXVnIDIwMDAuCi0gIEp1 biAyMDAxOiBFdmVuIGlmIGF0IHRvcCBsZXZlbCwgc2tpcCB0aGlzIGlmIHRoZSBjaGFyYWN0ZXIg d2FzIGZldGNoZWQgZnJvbQotICB0aGUgcmVwYXJzZSBvciByZWNhbGwgYnVmZmVyLCBvciBpZiBz dGRpbiBpcyByZWRpcmVjdGVkLgotKi8KLQkgICAgaWYgKCh4Y21kc3JjID09IDAJCS8qIE9ubHkg YXQgdG9wIGxldmVsICovCi0jaWZuZGVmIE5PU1BMCi0JCXx8IGFza2ZsYWcJCS8qIG9yIHVzZXIg aXMgdHlwaW5nIEFTSyByZXNwb25zZSAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0JCSApICYmIGNo c3JjICE9IDAgJiYgcmVhbHR0eSkgeyAvKiBmcm9tIHRoZSByZWFsIGtleWJvYXJkICovCi0KLS8q IFVzZSBBTlNJIC8gVlQxMDAgdXAgYW5kIGRvd24gYXJyb3cga2V5cyBmb3IgY29tbWFuZCByZWNh bGwuICAqLwotCi0JCWlmIChpc2VzYyAmJiAoCi0jaWZkZWYgSUtTRAotCQkgICAgaW5zZXJ2ZXIK LSNlbHNlCi0JCSAgICAwCi0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIFVTRV9BUlJPV0tFWVMK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IDEKLSNlbmRpZiAvKiBVU0VfQVJST1dL RVlTICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAg ICAgICkgewkJLyogQSByZWFsIEVTQyB3YXMgdHlwZWQgKi8KLQkJICAgIGludCB4OwotCQkgICAg bXNsZWVwKDIwMCk7CS8qIFdhaXQgMS81IHNlYyAqLwotCQkgICAgeCA9IGNtZGNvbmNoaygpOwkv KiBXYXMgaXQgZm9sbG93ZWQgYnkgYW55dGhpbmc/ICovCi0JCSAgICBkZWJ1ZyhGMTAxLCJBcnJv d2tleSBFU0MgY21kY29uY2hrIiwiIix4KTsKLQotCQkgICAgaWYgKHggPiAxKSB7CS8qIElmIGZv bGxvd2VkIGJ5IGF0IGxlYXN0IDIgY2hhcnMgKi8KLQkJCWludCBjMjsKLQkJCWMyID0gY21kZ2V0 YygwKTsgLyogR2V0IHRoZSBmaXJzdCBvbmUgKi8KLQkJCWRlYnVnKEYxMDEsIkFycm93a2V5IEVT QyBjMiIsIiIsYzIpOwotCi0JCQlpZiAoYzIgIT0gJ1snICYmIGMyICE9ICdPJykgeyAvKiBJZiBu b3QgWyBvciBPICovCi0JCQkgICAgcHVzaGMgPSBjMjsJLyogUHVzaCBpdCBhbmQgdGFrZSB0aGUg RVNDIHNvbG8gKi8KLQkJCX0gZWxzZSB7Ci0JCQkgICAgYzIgPSBjbWRnZXRjKDApOyAvKiBHZXQg dGhlIHNlY29uZCBvbmUgKi8KLQkJCSAgICBkZWJ1ZyhGMTAxLCJBcnJvd2tleSBFU0MgYzMiLCIi LGMyKTsKLQkJCSAgICBzd2l0Y2ggKGMyKSB7Ci0jaWZuZGVmIE5PUkVDQUxMCi0JCQkgICAgICBj YXNlICdBJzoJLyogVXAgKi8KLQkJCQljID0gQkVMOwotCQkJCWMgPSBDX1VQOwotCQkJCWJyZWFr OwotCQkJICAgICAgY2FzZSAnQic6CS8qIERvd24gKi8KLQkJCQljID0gQkVMOwotCQkJCWMgPSBD X0ROOwotCQkJCWJyZWFrOwotCQkJICAgICAgY2FzZSAnQyc6CS8qIFJpZ2h0ICovCi0JCQkgICAg ICBjYXNlICdEJzoJLyogTGVmdCAqLwotI2Vsc2UKLQkJCSAgICAgIGRlZmF1bHQ6Ci0jZW5kaWYg LyogTk9SRUNBTEwgKi8KLQkJCQljID0gQkVMOyAvKiBXZSBkb24ndCB1c2UgdGhlc2UgeWV0ICov Ci0JCQkJYnJlYWs7Ci0JCQkgICAgfQotCQkJfQotCQkgICAgfQotCQl9Ci0KLQkJc3dpdGNoIChj KSB7Ci0JCSAgY2FzZSAnPyc6CQkvKiA/LUhlbHAgKi8KLSNpZm5kZWYgTk9TUEwKLQkJICAgIGlm IChhc2tmbGFnKQkvKiBObyBoZWxwIGluIEFTSyByZXNwb25zZSAqLwotCQkgICAgICBicmVhazsK LSNlbmRpZiAvKiBOT1NQTCAqLwotCQkgICAgaWYgKHF1b3RpbmcKLQkJCSYmICFrc3RhcnRhY3Rp dmUKLQkJCSYmICFjb21tZW50Ci0JCQkpIHsKLQkJCWNtZGVjaG8oKGNoYXIpIGMsIDApOwotCQkJ KmJwID0gTlVMOwotCQkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKLQkJCSAgICBkZWJ1ZyhGMTEx LCJndHdvcmQgdG9vIGxvbmcgPyIscHAsc3RybGVuKHBwKSk7Ci0JCQkgICAgcHJpbnRmKCI/VG9v IGxvbmdcbiIpOwotCQkJICAgIHJldHVybigtOSk7Ci0JCQl9Ci0JCQlxbWZsYWcgPSAxOwotCQkJ cmV0dXJuKGNtZmxncyA9IDMpOwotCQkgICAgfQotCi0JCSAgY2FzZSBFU0M6CQkvKiBFc2Mgb3Ig VGFiIGNvbXBsZXRpb24gKi8KLQkJICAgIGlmICghY29tbWVudCkgewotCQkJKmJwID0gTlVMOwot CQkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKLQkJCSAgICBkZWJ1ZyhGMTExLCJndHdvcmQgdG9v IGxvbmcgRXNjIixwcCxzdHJsZW4ocHApKTsKLQkJCSAgICBwcmludGYoIj9Ub28gbG9uZ1xuIik7 Ci0JCQkgICAgcmV0dXJuKC05KTsKLQkJCX0KLQkJCWVzZmxhZyA9IDE7Ci0JCQlyZXR1cm4oY21m bGdzID0gMik7Ci0JCSAgICB9IGVsc2UgewotCQkJYmxlZXAoQlBfV0FSTik7Ci0JCQljb250aW51 ZTsKLQkJICAgIH0KLQotCQkgIGNhc2UgQlM6CQkvKiBDaGFyYWN0ZXIgZGVsZXRpb24gKi8KLQkJ ICBjYXNlIFJVQjoKLQkJICAgIGlmIChicCA+IGNtZGJ1ZikgewkvKiBJZiBzdGlsbCBpbiBidWZm ZXIuLi4gKi8KLQkJCWNtZGNoYXJkZWwoKTsJLyogZXJhc2UgaXQuICovCi0JCQlicC0tOwkJLyog cG9pbnQgYmVoaW5kIGl0LCAqLwotCQkJaWYgKCpicCA9PSBsYnJhY2UpIGJyYWNlbHZsLS07IC8q IEFkanVzdCBicmFjZSBjb3VudCAqLwotCQkJaWYgKCpicCA9PSByYnJhY2UpIGJyYWNlbHZsKys7 Ci0JCQlpZiAoKCpicCA9PSBTUCkgJiYgLyogRmxhZyBpZiBjdXJyZW50IGZpZWxkIGdvbmUgKi8K LQkJCSAgICAoKnBwICE9IGxicmFjZSB8fCBicmFjZWx2bCA9PSAwKSkKLQkJCSAgaW53b3JkID0g MDsKLQkJCSpicCA9IE5VTDsJLyogRXJhc2UgY2hhcmFjdGVyIGZyb20gYnVmZmVyLiAqLwotCQkg ICAgfSBlbHNlIHsJCS8qIE90aGVyd2lzZSwgKi8KLQkJCWJsZWVwKEJQX1dBUk4pOwotCQkJY21y ZXMoKTsJLyogYW5kIHN0YXJ0IHBhcnNpbmcgYSBuZXcgY29tbWFuZC4gKi8KLQkJCSpicCA9ICph dG1idWYgPSBOVUw7Ci0JCSAgICB9Ci0JCSAgICBpZiAocHAgPCBicCkKLQkJICAgICAgY29udGlu dWU7Ci0JCSAgICBlbHNlCi0JCSAgICAgIHJldHVybihjbWZsZ3MgPSAtMSk7Ci0KLQkJICBjYXNl IExERUw6CQkvKiBeVSwgbGluZSBkZWxldGlvbiAqLwotCQkgICAgd2hpbGUgKChicC0tKSA+IGNt ZGJ1ZikgewotCQkJY21kY2hhcmRlbCgpOwotCQkJKmJwID0gTlVMOwotCQkgICAgfQotCQkgICAg Y21yZXMoKTsJCS8qIFJlc3RhcnQgdGhlIGNvbW1hbmQuICovCi0JCSAgICAqYnAgPSAqYXRtYnVm ID0gTlVMOwotCQkgICAgaW53b3JkID0gMDsKLQkJICAgIHJldHVybihjbWZsZ3MgPSAtMSk7Ci0K LQkJICBjYXNlIFdERUw6CQkvKiBeVywgd29yZCBkZWxldGlvbiAqLwotCQkgICAgaWYgKGJwIDw9 IGNtZGJ1ZikgewkvKiBCZWVwIGlmIG5vdGhpbmcgdG8gZGVsZXRlICovCi0JCQlibGVlcChCUF9X QVJOKTsKLQkJCWNtcmVzKCk7Ci0JCQkqYnAgPSAqYXRtYnVmID0gTlVMOwotCQkJcmV0dXJuKGNt ZmxncyA9IC0xKTsKLQkJICAgIH0KLQkJICAgIGJwLS07Ci0JCSAgICAvKiBCYWNrIHVwIG92ZXIg YW55IHRyYWlsaW5nIG5vbmFscGhhbnVtcyAqLwotCQkgICAgLyogVGhpcyBpcyBkZXBlbmRlbnQg b24gQVNDSUkgY29sbGF0aW5nIHNlcXVlbmNlICovCi0JCSAgICAvKiBidXQgaXNhbHBoYW51bSgp IGlzIG5vdCBhdmFpbGFibGUgZXZlcnl3aGVyZS4gKi8KLQkJICAgIGZvciAoIDsKLQkJCSAoYnAg Pj0gY21kYnVmKSAmJgotCQkJICgoKmJwIDwgJzAnKSB8fAotCQkJICgoKmJwID4gJzknKSAmJiAo KmJwIDwgJ0AnKSkgfHwKLQkJCSAoKCpicCA+ICdaJykgJiYgKCpicCA8ICdhJykpIHx8Ci0JCQkg KCpicCA+ICd6JykpOwotCQkJIGJwLS0KLQkJCSApIHsKLQkJCWNtZGNoYXJkZWwoKTsKLQkJCSpi cCA9IE5VTDsKLQkJICAgIH0KLQkJICAgIC8qIE5vdyBkZWxldGUgYmFjayB0byByaWdodG1vc3Qg cmVtYWluaW5nIG5vbmFscGhhbnVtICovCi0JCSAgICBmb3IgKCA7IChicCA+PSBjbWRidWYpICYm ICgqYnApIDsgYnAtLSkgewotCQkJaWYgKCgqYnAgPCAnMCcpIHx8Ci0JCQkgICAgKCpicCA+ICc5 JyAmJiAqYnAgPCAnQCcpIHx8Ci0JCQkgICAgKCpicCA+ICdaJyAmJiAqYnAgPCAnYScpIHx8Ci0J CQkgICAgKCpicCA+ICd6JykpCi0JCQkgIGJyZWFrOwotCQkJY21kY2hhcmRlbCgpOwotCQkJKmJw ID0gTlVMOwotCQkgICAgfQotCQkgICAgYnArKzsKLQkJICAgIGlud29yZCA9IDA7Ci0JCSAgICBy ZXR1cm4oY21mbGdzID0gLTEpOwotCi0JCSAgY2FzZSBSRElTOiB7CQkvKiBeUiwgcmVkaXNwbGF5 ICovCi0JCSAgICAgIGNoYXIgKmNweDsgY2hhciBjeDsKLQkJICAgICAgKmJwID0gTlVMOwotCQkg ICAgICBwcmludGYoIlxuJXMiLGNtcHJvbSk7Ci0JCSAgICAgIGNweCA9IGNtZGJ1ZjsKLQkJICAg ICAgd2hpbGUgKChjeCA9ICpjcHgrKykpIHsKLQkJCSAgY21kZWNobyhjeCwwKTsKLQkJICAgICAg fQotCQkgICAgICBmZmx1c2goc3Rkb3V0KTsKLQkJICAgICAgY29udGludWU7Ci0JCSAgfQotI2lm bmRlZiBOT0xBU1RGSUxFCi0JCSAgY2FzZSBWVDoKLQkJICAgIGlmIChsYXN0ZmlsZSkgewotCQkJ cHJpbnRmKCIlcyAiLGxhc3RmaWxlKTsKLSNpZmRlZiBHRU1ET1MKLQkJCWZmbHVzaChzdGRvdXQp OwotI2VuZGlmIC8qIEdFTURPUyAqLwotCQkJaW53b3JkID0gY21mbGdzID0gMDsKLQkJCWFkZGJ1 ZihsYXN0ZmlsZSk7CS8qIFN1cHBseSBkZWZhdWx0LiAqLwotCQkJaWYgKHNldGF0bShsYXN0Zmls ZSwwKSA8IDApIHsKLQkJCSAgICBwcmludGYoIkxhc3QgbmFtZSB0b28gbG9uZ1xuIik7Ci0JCQkg ICAgaWYgKG5wKSBmcmVlKG5wKTsKLQkJCSAgICByZXR1cm4oLTkpOwotCQkJfQotCQkgICAgfSBl bHNlIHsJCS8qIE5vIGRlZmF1bHQgKi8KLQkJCWJsZWVwKEJQX1dBUk4pOwotCQkgICAgfQotCQkg ICAgcmV0dXJuKDApOwotI2VuZGlmCS8qIE5PTEFTVEZJTEUgKi8KLQkJfQotCi0jaWZkZWYgQ0tf UkVDQUxMCi0JCWlmIChvbl9yZWNhbGwgJiYJLyogUmVhZGluZyBjb21tYW5kcyBmcm9tIGtleWJv YXJkPyAqLwotCQkgICAgKGNtX3JlY2FsbCA+IDApICYmCS8qIFNhdmluZyBjb21tYW5kcz8gKi8K LQkJICAgIChjID09IENfVVAgfHwgYyA9PSBDX1VQMikpIHsgLyogR28gdXAgb25lICovCi0JCSAg ICBpZiAobGFzdF9yZWNhbGwgPT0gMiAmJiBjdXJyZW50ID4gMCkKLQkJICAgICAgY3VycmVudC0t OwotCQkgICAgaWYgKGN1cnJlbnQgPCAwKSB7CS8qIE5vd2hlcmUgdG8gZ28sICovCi0JCQlibGVl cChCUF9XQVJOKTsKLQkJCWNvbnRpbnVlOwotCQkgICAgfQotCQkgICAgaWYgKHJlY2FsbFtjdXJy ZW50XSkgeyAvKiBXZSBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCAqLwotCQkJd2hpbGUgKChicC0t KSA+IGNtZGJ1ZikgeyAvKiBFcmFzZSBjdXJyZW50IGxpbmUgKi8KLQkJCSAgICBjbWRjaGFyZGVs KCk7Ci0JCQkgICAgKmJwID0gTlVMOwotCQkJfQotCQkJY2tzdHJuY3B5KGNtZGJ1ZixyZWNhbGxb Y3VycmVudF0sQ01EQkwpOwotI2lmZGVmIE9TSwotCQkJZmZsdXNoKHN0ZG91dCk7Ci0JCQl3cml0 ZShmaWxlbm8oc3Rkb3V0KSwgIlxyIiwgMSk7Ci0JCQlwcmludGYoIiVzJXMiLGNtcHJvbSxjbWRi dWYpOwotI2Vsc2UKLQkJCXByaW50ZigiXHIlcyVzIixjbXByb20sY21kYnVmKTsKLSNlbmRpZiAv KiBPU0sgKi8KLQkJCWN1cnJlbnQtLTsKLQkJICAgIH0KLQkJICAgIGxhc3RfcmVjYWxsID0gMTsK LQkJICAgIHJldHVybihjbWZsZ3MgPSAtMSk7IC8qIEZvcmNlIGEgcmVwYXJzZSAqLwotCQl9Ci0J CWlmIChvbl9yZWNhbGwgJiYJLyogUmVhZGluZyBjb21tYW5kcyBmcm9tIGtleWJvYXJkPyAqLwot CQkgICAgKGNtX3JlY2FsbCA+IDApICYmCS8qIFNhdmluZyBjb21tYW5kcz8gKi8KLQkJICAgIChj ID09IENfRE4pKSB7CS8qIERvd24gb25lICovCi0JCSAgICBpbnQgeCA9IDE7Ci0JCSAgICBpZiAo bGFzdF9yZWNhbGwgPT0gMSkKLQkJICAgICAgeCsrOwotCQkgICAgaWYgKGN1cnJlbnQgKyB4ID4g cmxhc3QpIHsgLyogQWxyZWFkeSBhdCBib3R0b20sIGJlZXAgKi8KLQkJCWJsZWVwKEJQX1dBUk4p OwotCQkJY29udGludWU7Ci0JCSAgICB9Ci0JCSAgICBjdXJyZW50ICs9IHg7CS8qIE9LIHRvIGdv IGRvd24gKi8KLQkJICAgIGlmIChyZWNhbGxbY3VycmVudF0pIHsKLQkJCXdoaWxlICgoYnAtLSkg PiBjbWRidWYpIHsgLyogRXJhc2UgY3VycmVudCBsaW5lICovCi0JCQkgICAgY21kY2hhcmRlbCgp OwotCQkJICAgICpicCA9IE5VTDsKLQkJCX0KLQkJCWNrc3RybmNweShjbWRidWYscmVjYWxsW2N1 cnJlbnRdLENNREJMKTsKLSNpZmRlZiBPU0sKLQkJCWZmbHVzaChzdGRvdXQpOwotCQkJd3JpdGUo ZmlsZW5vKHN0ZG91dCksICJcciIsIDEpOwotCQkJcHJpbnRmKCIlcyVzIixjbXByb20sY21kYnVm KTsKLSNlbHNlCi0JCQlwcmludGYoIlxyJXMlcyIsY21wcm9tLGNtZGJ1Zik7Ci0jZW5kaWYgLyog T1NLICovCi0JCQlsYXN0X3JlY2FsbCA9IDI7Ci0JCQlyZXR1cm4oY21mbGdzID0gLTEpOyAvKiBG b3JjZSByZXBhcnNlICovCi0JCSAgICB9Ci0JCX0KLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLQkg ICAgfQotCi0JICAgIGlmIChjIDwgU1AgJiYgcXVvdGUgPT0gMCkgeyAvKiBBbnkgb3RoZXIgdW5x dW90ZWQgY29udHJvbCBjaGFyICovCi0JCWlmICghY2hzcmMpIHsJCS8qIElmIGNtZCBmaWxlLCBw b2ludCBwYXN0IGl0ICovCi0JCSAgICBicCsrOwotCQl9IGVsc2UgewotCQkgICAgYmxlZXAoQlBf V0FSTik7Ci0JCX0KLQkJY29udGludWU7CQkvKiBjb250aW51ZSwgZG9uJ3QgcHV0IGluIGJ1ZmZl ciAqLwotCSAgICB9Ci0JICAgIGxpbmViZWdpbiA9IDA7CQkvKiBOb3QgYXQgYmVnaW5uaW5nIG9m IGxpbmUgKi8KLSNpZmRlZiBCRUJPWAotCSAgICBpZiAoZWNob2YpIHsKLSAgICAgICAgICAgICAg ICBjbWRlY2hvKChjaGFyKSBjLCAwKTsJLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KLSAgICAg ICAgICAgICAgICBmZmx1c2ggKHN0ZG91dCk7Ci0gICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGVy cik7Ci0gICAgICAgICAgICB9Ci0jZWxzZQotI2lmZGVmIE5PU1BMCi0gICAgICAgICAgICBpZiAo ZWNob2YgfHwgY2hzcmMpCi0jZWxzZQotICAgICAgICAgICAgaWYgKGVjaG9mIHx8IChlY2hvc3Rh cnMgJiYgY2hzcmMpKQotI2VuZGlmCS8qIE5PU1BMICovCi0JICAgICAgY21kZWNobygoY2hhcikg YywgMCk7CS8qIEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCi0jZW5kaWYgLyogQkVCT1ggKi8KLSAg ICAgICAgfSBlbHNlIHsJCQkvKiBUaGlzIGNoYXJhY3RlciB3YXMgcXVvdGVkLiAqLwotCSAgICBp bnQgcWYgPSAxOwotCSAgICBxdW90ZSA9IDA7CQkJLyogVW5zZXQgdGhlIHF1b3RlIGZsYWcuICov Ci0JICAgIC8qIGRlYnVnKEYwMDAsImd0d29yZCBxdW90ZSAwIiwiIixjKTsgKi8KLQkgICAgLyog UXVvdGUgY2hhcmFjdGVyIGF0IHRoaXMgbGV2ZWwgaXMgb25seSBmb3IgU1AsID8sIGFuZCBjb250 cm9scyAqLwotICAgICAgICAgICAgLyogSWYgYW55dGhpbmcgZWxzZSB3YXMgcXVvdGVkLCBsZWF2 ZSBxdW90ZSBpbiwgYW5kIGxldCAqLwotCSAgICAvKiB0aGUgY29tbWFuZC1zcGVjaWZpYyBwYXJz aW5nIHJvdXRpbmVzIGhhbmRsZSBpdCwgZS5nLiBcMDA3ICovCi0JICAgIGlmIChjID4gMzIgJiYg YyAhPSAnPycgJiYgYyAhPSBSVUIgJiYgY2hzcmMgIT0gMCkgewotCQkvKiBkZWJ1ZyhGMDAwLCJn dHdvcmQgcXVvdGUgMSIsIiIsYyk7ICovCi0JCSpicCsrID0gQ01EUTsJCS8qIERlcG9zaXQgXCBp ZiBpdCBjYW1lIGZyb20gdHR5ICovCi0JCXFmID0gMDsJCQkvKiBhbmQgZG9uJ3QgZXJhc2UgaXQg ZnJvbSBzY3JlZW4gKi8KLQkJbGluZWJlZ2luID0gMDsJCS8qIE5vdCBhdCBiZWdpbm5pbmcgb2Yg bGluZSAqLwotI2lmZGVmIEJTX0RJUlNFUAotLyoKLSAgVGhpcyBpcyBhIGhhY2sgdG8gaGFuZGxl ICJjZCBcIiBvciAiY2QgZm9vXCIgb24gT1MvMiBhbmQgc2ltaWxhciBzeXN0ZW1zLgotICBJZiB3 ZSB3ZXJlIGNhbGxlZCBmcm9tIGNtZGlyKCkgYW5kIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgd2Fz IHRoZSBxdW90ZQotICBjaGFyYWN0ZXIsIGkuZS4gYmFja3NsYXNoLCBhbmQgdGhpcyBjaGFyYWN0 ZXIgaXMgdGhlIGNvbW1hbmQgdGVybWluYXRvciwKLSAgdGhlbiB3ZSBzdHVmZiBhbiBleHRyYSBi YWNrc2xhc2ggaW50byB0aGUgYnVmZmVyIHdpdGhvdXQgZWNob2luZywgdGhlbgotICB3ZSBzdHVm ZiB0aGUgY2FycmlhZ2UgcmV0dXJuIGJhY2sgaW4gYWdhaW4sIGFuZCBnbyBiYWNrIGFuZCBwcm9j ZXNzIGl0LAotICB0aGlzIHRpbWUgd2l0aCB0aGUgcXVvdGUgZmxhZyBvZmYuCi0qLwotCSAgICB9 IGVsc2UgaWYgKGRpcm5hbWZsZyAmJiAoYyA9PSBDUiB8fCBjID09IExGIHx8IGMgPT0gU1ApKSB7 Ci0JCS8qIGRlYnVnKEYwMDAsImd0d29yZCBxdW90ZSAyIiwiIixjKTsgKi8KLQkJKmJwKysgPSBD TURROwotCQlsaW5lYmVnaW4gPSAwOwkJLyogTm90IGF0IGJlZ2lubmluZyBvZiBsaW5lICovCi0J CSpicCA9IChjID09IFNQID8gU1AgOiBDUik7Ci0JCWdvdG8gQ01ESVJQQVJTRTsKLSNlbmRpZiAv KiBCU19ESVJTRVAgKi8KLQkgICAgfQotI2lmZGVmIEJFQk9YCi0JICAgIGlmIChlY2hvZikgewot ICAgICAgICAgICAgICAgIGNtZGVjaG8oKGNoYXIpIGMsIHFmKTsJLyogRWNobyB3aGF0IHdhcyB0 eXBlZC4gKi8KLSAgICAgICAgICAgICAgICBmZmx1c2ggKHN0ZG91dCk7Ci0gICAgICAgICAgICAg ICAgZmZsdXNoKHN0ZGVycik7Ci0gICAgICAgICAgICB9Ci0jZWxzZQotCSAgICBpZiAoZWNob2Yp IGNtZGVjaG8oKGNoYXIpIGMsIHFmKTsgLyogTm93IGVjaG8gcXVvdGVkIGNoYXJhY3RlciAqLwot I2VuZGlmIC8qIEJFQk9YICovCi0JICAgIC8qIGRlYnVnKEYxMTEsImd0d29yZCBxdW90ZSIsY21k YnVmLGMpOyAqLwotCX0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIGlmIChlY2hvZikgY21kZWNo bygoY2hhcikgYyxxdW90ZSk7IC8qIEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCi0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgICAgICBpZiAoIWNvbW1lbnQpIGlud29yZCA9IDE7CS8qIEZsYWcgd2Un cmUgaW4gYSB3b3JkLiAqLwotCWlmIChxdW90ZSkgY29udGludWU7CQkvKiBEb24ndCBkZXBvc2l0 IHF1b3RlIGNoYXJhY3Rlci4gKi8KLSAgICAgICAgaWYgKGMgIT0gTkwpIHsJCQkvKiBEZXBvc2l0 IGNvbW1hbmQgY2hhcmFjdGVyLiAqLwotCSAgICAqYnArKyA9IChjaGFyKSBjOwkJLyogYW5kIG1h a2Ugc3VyZSB0aGVyZSBpcyBhIE5VTCAqLwotI2lmZGVmIENPTU1FTlQKLQkgICAgKmJwID0gTlVM OwkJCS8qIGFmdGVyIGl0ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCX0KLSAgICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgYmlnIHdoaWxlICovCi0gICAg YmxlZXAoQlBfV0FSTik7Ci0gICAgcHJpbnRmKCI/Q29tbWFuZCB0b28gbG9uZywgbWF4aW11bSBs ZW5ndGg6ICVkLlxuIixDTURCTCk7Ci0gICAgY21mbGdzID0gLTI7Ci0gICAgcmV0dXJuKC05KTsK LX0KLQotLyogVXRpbGl0eSBmdW5jdGlvbnMgKi8KLQotLyogQSBEIEQgQiBVIEYgIC0tIEFkZCB0 aGUgc3RyaW5nIHBvaW50ZWQgdG8gYnkgY3AgdG8gdGhlIGNvbW1hbmQgYnVmZmVyICAqLwotCi1z dGF0aWMgaW50Ci1hZGRidWYoY3ApIGNoYXIgKmNwOyB7Ci0gICAgaW50IGxlbiA9IDA7Ci0gICAg d2hpbGUgKCgqY3AgIT0gTlVMKSAmJiAoYnAgPCBjbWRidWYrQ01EQkwpKSB7Ci0gICAgICAgICpi cCsrID0gKmNwKys7ICAgICAgICAgICAgICAgICAgLyogQ29weSBhbmQgKi8KLSAgICAgICAgbGVu Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3VudCB0aGUgY2hhcmFjdGVycy4gKi8K LSAgICB9Ci0gICAgKmJwKysgPSBTUDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHV0IGEg c3BhY2UgYXQgdGhlIGVuZCAqLwotICAgICpicCA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRlcm1pbmF0ZSB3aXRoIGEgbnVsbCAqLwotICAgIG5wID0gYnA7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgbmV4dC1maWVsZCBwb2ludGVyICovCi0gICAg Y21icHRyID0gbnA7Ci0gICAgcmV0dXJuKGxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgLyog UmV0dXJuIHRoZSBsZW5ndGggKi8KLX0KLQotLyogIFMgRSBUIEEgVCBNICAtLSAgRGVwb3NpdCBh IHRva2VuIGluIHRoZSBhdG9tIGJ1ZmZlci4gICovCi0vKgotICBCcmVhayBvbiBzcGFjZSwgbmV3 bGluZSwgY2FycmlhZ2UgcmV0dXJuLCBvciBOVUwuCi0gIENhbGwgd2l0aDoKLSAgICBjcCA9IFBv aW50ZXIgdG8gc3RyaW5nIHRvIGNvcHkgdG8gYXRvbSBidWZmZXIuCi0gICAgZmNvZGUgPSAwIG1l YW5zIGJyZWFrIG9uIHdoaXRlc3BhY2Ugb3IgRU9MLgotICAgIGZjb2RlID0gMSBtZWFucyBkb24n dCBicmVhayBvbiBzcGFjZS4KLSAgICBmY29kZSA9IDIgbWVhbnMgYnJlYWsgb24gc3BhY2UsICc6 Jywgb3IgJz0nLgotICAgIGZjb2RlID0gMyBtZWFucyBjb3B5IHRoZSB3aG9sZSBzdHJpbmcuCi0g IE51bGwtdGVybWluYXRlIHRoZSByZXN1bHQuCi0gIFJldHVybiBsZW5ndGggb2YgdG9rZW4sIGFu ZCBhbHNvIHNldCBnbG9iYWwgImNjIiB0byB0aGlzIGxlbmd0aC4KLSAgUmV0dXJuIC0xIGlmIHRv a2VuIHdhcyB0b28gbG9uZy4KLSovCi1zdGF0aWMgaW50Ci1zZXRhdG0oY3AsZmNvZGUpIGNoYXIg KmNwOyBpbnQgZmNvZGU7IHsKLSAgICBjaGFyICphcCwgKnhwLCAqZHFwID0gTlVMTCwgbGJyYWNl LCByYnJhY2U7Ci0gICAgaW50IGJyYWNlbHZsID0gMCwgZHEgPSAwOwotCi0gICAgcmVnaXN0ZXIg Y2hhciAqIHM7Ci0gICAgcmVnaXN0ZXIgaW50IG4gPSAwOwotCi0gICAgaWYgKGNtZmxkZmxncyAm IDEpIHsJCS8qIEhhbmRsZSBncm91cGluZyAqLwotCWxicmFjZSA9ICcoJzsKLQlyYnJhY2UgPSAn KSc7Ci0gICAgfSBlbHNlIHsKLQlsYnJhY2UgPSAneyc7Ci0JcmJyYWNlID0gJ30nOwotICAgIH0K LSAgICBjYyA9IDA7CQkJCS8qIENoYXJhY3RlciBjb3VudGVyICovCi0gICAgYXAgPSBhdG1idWY7 CQkJLyogQWRkcmVzcyBvZiBhdG9tIGJ1ZmZlciAqLwotCi0gICAgcyA9IGNwOwotCi0gICAgd2hp bGUgKCpzKyspIG4rKzsJCQkvKiBTYXZlIGEgY2FsbCB0byBzdHJsZW4gKi8KLQotICAgIGlmIChu ID4gQVRNQkwpIHsKLQlwcmludGYoIj9Db21tYW5kIGJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0JcmV0 dXJuKC0xKTsKLSAgICB9Ci0gICAgLyogZGVidWcoRjExMSwic2V0YXRtIixjcCxuKTsgKi8KLSAg ICBpZiAoY3AgPT0gYXApIHsJCQkvKiBJbiBjYXNlIHNvdXJjZSBpcyBhdG9tIGJ1ZmZlciAqLwot CXhwID0gYXR5YnVmOwkJCS8qIG1ha2UgYSBjb3B5ICovCi0jaWZkZWYgQ09NTUVOVAotCXN0cm5j cHkoeHAsYXAsQVRNQkwpOwkJLyogc28gd2UgY2FuIGNvcHkgaXQgYmFjaywgZWRpdGVkLiAqLwot CWNwID0geHA7Ci0jZWxzZQotCXMgPSBhcDsKLQl3aGlsZSAoKCp4cCsrID0gKnMrKykpIDsJLyog V2UgYWxyZWFkeSBrbm93IGl0J3MgYmlnIGVub3VnaCAqLwotCWNwID0geHAgPSBhdHlidWY7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0KLSAgICAqYXAgPSBOVUw7CQkJCS8qIFplcm8gdGhl IGF0b20gYnVmZmVyICovCi0gICAgaWYgKGZjb2RlID09IDEpIHsJCQkvKiBUcmltIHRyYWlsaW5n IGJsYW5rcyAqLwotCXdoaWxlICgtLW4gPj0gMCAmJiBjcFtuXSA9PSBTUCkKLQkgIDsKLQljcFtu KzFdID0gTlVMOwotICAgIH0KLSAgICB3aGlsZSAoKmNwID09IFNQKSB7CQkJLyogVHJpbSBsZWFk aW5nIHNwYWNlcyAqLwotCWNwKys7Ci0Jbi0tOwotICAgIH0KLSAgICBpZiAoKmNwID09ICciJykg ewkJCS8qIFN0YXJ0cyB3aXRoIGRvdWJsZXF1b3RlPyAqLwotCWRxID0gMTsKLQlkcXAgPSBjcDsK LSAgICB9Ci0gICAgd2hpbGUgKCpjcCkgewotICAgICAgICBpZiAoKmNwID09IGxicmFjZSkKLQkg IGJyYWNlbHZsKys7Ci0gICAgICAgIGVsc2UgaWYgKCpjcCA9PSByYnJhY2UpCi0JICBicmFjZWx2 bC0tOwotCWlmIChicmFjZWx2bCA8IDApCi0JICBicmFjZWx2bCA9IDA7Ci0JaWYgKGJyYWNlbHZs ID09IDApIHsKLQkgICAgaWYgKGRxKSB7Ci0JCWlmICgqY3AgPT0gU1AgfHwgKmNwID09IEhUKSB7 Ci0JCSAgICBpZiAoY3AgPiBkcXArMSkgewotCQkJaWYgKCooY3AtMSkgPT0gJyInICYmICooY3At MikgIT0gQ01EUSkgewotCQkJICAgIGJyZWFrOwotCQkJfQotCQkgICAgfQotCQl9Ci0JICAgIH0g ZWxzZSBpZiAoKCpjcCA9PSBTUCB8fCAqY3AgPT0gSFQpICYmIGZjb2RlICE9IDEgJiYgZmNvZGUg IT0gMykKLQkgICAgICBicmVhazsKLQkgICAgaWYgKChmY29kZSA9PSAyKSAmJiAoKmNwID09ICc9 JyB8fCAqY3AgPT0gJzonKSkgYnJlYWs7Ci0JICAgIGlmICgoZmNvZGUgIT0gMykgJiYgKCpjcCA9 PSBMRiB8fCAqY3AgPT0gQ1IpKSBicmVhazsKLQl9Ci0gICAgICAgICphcCsrID0gKmNwKys7Ci0g ICAgICAgIGNjKys7Ci0gICAgfQotICAgICphcCA9IE5VTDsJCQkJLyogVGVybWluYXRlIHRoZSBz dHJpbmcuICovCi0gICAgLyogZGVidWcoRjExMSwic2V0YXRtIHJlc3VsdCIsYXRtYnVmLGNjKTsg Ki8KLSAgICByZXR1cm4oY2MpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gbGVu Z3RoLiAqLwotfQotCi0vKgotICBUaGVzZSBmdW5jdGlvbnMgYXR0ZW1wdCB0byBoaWRlIHN5c3Rl bSBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgbWFpbmxpbmUKLSAgY29kZSBpbiBndHdvcmQoKS4gIER1 bW15IGFyZyBmb3IgY21kZ2V0YygpIG5lZWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCi0gIGNv bmluYygpLCB0dGluYygpLCBldGMsIHNpbmNlIGEgcG9pbnRlciB0byB0aGlzIHJvdXRpbmUgY2Fu IGJlIHBhc3NlZCBpbgotICBwbGFjZSBvZiB0aG9zZSB0byB0bl9kb29wKCkuCi0KLSAgTm8gbG9u Z2VyIHN0YXRpYy4gIFVzZWQgYnkgYXNrbW9yZSgpLiAgRnJpIEF1ZyAyMCAxNTowMzozNCAxOTk5 LgotKi8KLSNkZWZpbmUgQ01EX0NPTklOQwkJCS8qIEhvdyB3ZSBnZXQga2V5Ym9hcmQgY2hhcnMg Ki8KLQotaW50Ci1jbWRnZXRjKHRpbWVsaW1pdCkgaW50IHRpbWVsaW1pdDsgewkvKiBHZXQgYSBj aGFyYWN0ZXIgZnJvbSB0aGUgdHR5LiAqLwotICAgIGludCBjOwotI2lmZGVmIElLU0QKLSAgICBl eHRlcm4gaW50IGluc2VydmVyOwotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBDS19MT0dJTgot ICAgIGV4dGVybiBpbnQgeF9sb2dnZWQ7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNpZmRlZiBU TkNPREUKLSAgICBzdGF0aWMgaW50IGdvdF9jciA9IDA7Ci0gICAgZXh0ZXJuIGludCBja3hlY2g7 Ci0gICAgaW50IHR4ID0gMCwgaXNfdG4gPSAwOwotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0gICAg aWYgKHB1c2hjCi0jaWZuZGVmIE5PU1BMCi0JJiYgIWFza2ZsYWcKLSNlbmRpZiAvKiBOT1NQTCAq LwotCSkgewotICAgICAgICBkZWJ1ZyhGMTExLCJjbWRnZXRjKCkiLCJwdXNoYyIscHVzaGMpOwot CWMgPSBwdXNoYzsKLQlwdXNoYyA9IE5VTDsKLQlpZiAoeGNtZmRiICYmIGMgPT0gJz8nKQkJLyog RG9uJ3QgZWNobyA/IHR3aWNlIGlmIGNoYWluaW5nLiAqLwotCSAgY21kY2hhcmRlbCgpOwotCXJl dHVybihjKTsKLSAgICB9Ci0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICB7Ci0JY2hhciBjaDsKLQlj ID0gZGduY2luYigwLCZjaCwxKTsJCS8qIC0xIGlzIEVPRiwgLTIgVE8sCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICogLWMgaXMgQU9TL1ZTIGVycm9yICovCi0JaWYg KGMgPT0gLTIpIHsJCQkvKiB0aW1lb3V0IHdhcyBlbmFibGVkPyAqLwotCSAgICByZXN0byhjaGFu bmVsKDApKTsJCS8qIHJlc2V0IHRpbWVvdXRzICovCi0JICAgIGMgPSBkZ25jaW5iKDAsJmNoLDEp OwkvKiByZXRyeSB0aGlzIG5vdyEgKi8KLQl9Ci0JaWYgKGMgPCAwKSByZXR1cm4oLTQpOwkJLyog RU9GIG9yIHNvbWUgZXJyb3IgKi8KLQllbHNlIGMgPSAoaW50KSBjaCAmIDAxNzc7CS8qIEdldCBj aGFyIHdpdGhvdXQgcGFyaXR5ICovCi0vKgllY2hvZiA9IDE7ICovCi0gICAgfQotI2Vsc2UgLyog Tm90IGRhdGFnZW5lcmFsICovCi0jaWZuZGVmIE1JTklYMgotICAgIGlmICgKLSNpZmRlZiBJS1NE Ci0JKCFsb2NhbCAmJiBpbnNlcnZlcikgfHwKLSNlbmRpZiAvKiBJS1NEICovCi0JdGltZWxpbWl0 ID4gMCkgewotI2lmZGVmIFROQ09ERQotICAgICAgICAgIEdFVE5FWFRDSDoKLSAgICAgICAgICAg IGlzX3RuID0gIXB1c2hjICYmICFsb2NhbCAmJiBzc3RlbG5ldDsKLSNlbmRpZiAvKiBUTkNPREUg Ki8KLSNpZmRlZiBDT01NRU5UCi0JICAgIGMgPSBjb25pbmModGltZWxpbWl0ID4gMCA/IDEgOiAw KTsKLSNlbHNlIC8qIENPTU1FTlQgKi8KLQkgICAgLyogVGhpcyBpcyBsaWtlbHkgdG8gYnJlYWsg dGhlIGFza3RpbWVvdXQuLi4gKi8KLQkgICAgYyA9IGNvbmluYyh0aW1lbGltaXQpOwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQkgICAgLyogZGVidWcoRjEwMSwiY21kZ2V0YyBjb25pbmMiLCIiLGMp OyAqLwotI2lmZGVmIFROQ09ERQotICAgICAgICAgICAgaWYgKGMgPj0gMCAmJiBpc190bikgewkv KiBTZXJ2ZXItc2lkZSBUZWxuZXQgKi8KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLQkJ ICBjYXNlIElBQzoKLSAgICAgICAgICAgICAgICAgICAgLyogZGVidWcoRjExMSwiZ3R3b3JkIElB QyIsImMiLGMpOyAqLwotICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOwotICAgICAgICAg ICAgICAgICAgICBpZiAoKHR4ID0gdG5fZG9vcCgoQ0hBUikoYyAmIDB4ZmYpLGNreGVjaCxjb25p bmMpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEdFVE5FWFRDSDsKLSAg ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eCA8PSAtMSkgeyAvKiBJL08gZXJyb3IgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIHdhcyBhIGZhdGFsIEkvTyBlcnJv ciB0aGVuIHR0Y2xvcygpICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBoYXMgYmVl biBjYWxsZWQgYW5kIHRoZSBuZXh0IEdFVE5FWFRDSCBhdHRlbXB0ICAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgLyogd2lsbCBiZSAhaXNfdG4gc2luY2UgdHRjbG9zKCkgc2V0cyBzc3RlbG5l dCA9IDAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwtMSk7IC8q IChvciByZXR1cm4oLTQpPyAqLwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR4ID09 IDEpIHsgLyogRUNITyBjaGFuZ2UgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNreGVjaCA9 IGRweCA9IDE7IC8qIEdldCBuZXh0IGNoYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gR0VUTkVYVENIOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR4ID09IDIpIHsg LyogRUNITyBjaGFuZ2UgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNreGVjaCA9IGRweCA9 IDA7IC8qIEdldCBuZXh0IGNoYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gR0VU TkVYVENIOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR4ID09IDMpIHsgLyogUXVv dGVkIElBQyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IDI1NTsJLyogcHJvY2VlZWQg d2l0aCBpdC4gKi8KLSAgICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIElLU19PUFRJT04KLSAg ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHggPT0gNCkgewkvKiBJS1MgU3RhdGUgQ2hhbmdl ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEdFVE5FWFRDSDsKLSAgICAgICAgICAg ICAgICAgICAgfQotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSAgICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAodHggPT0gNikgewkvKiBSZW1vdGUgTG9nb3V0ICovCi0JCQlkb2V4aXQoR09PRF9F WElULDApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotCQkJZ290byBHRVRORVhUQ0g7 CS8qIFVua25vd24sIGdldCBuZXh0IGNoYXIgKi8KLQkJICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgICAgY2FzZSBDUjoKLSAg ICAgICAgICAgICAgICAgICAgaWYgKCFURUxPUFRfVShURUxPUFRfQklOQVJZKSkgewotCQkJaWYg KGdvdF9jcikgewotCQkJICAgIC8qIFRoaXMgbWVhbnMgdGhlIHNlbmRlciBpcyB2aW9sYXRpbmcg VGVsbmV0ICAgKi8KLQkJCSAgICAvKiBwcm90b2NvbCBiZWNhdXNlIHdlIHJlY2VpdmVkIHR3byBD UnMgaW4gYSAgICovCi0JCQkgICAgLyogcm93IHdpdGhvdXQgZ2V0dGluZyBlaXRoZXIgTEYgb3Ig TlVMLiAgICAgICAqLwotCQkJICAgIC8qIFRoaXMgd2lsbCBub3Qgc29sdmUgdGhlIHByb2JsZW0g YnV0IGl0ICAgICAgKi8KLQkJCSAgICAvKiB3aWxsIGF0IGxlYXN0IGFsbG93IHR3byBDUnMgdG8g ZG8gc29tZXRoaW5nICovCi0JCQkgICAgLyogd2hlcmVhcyBiZWZvcmUgdGhlIHVzZXIgd291bGQg aGF2ZSB0byBndWVzcyAqLwotCQkJICAgIC8qIHRvIHNlbmQgTEYgb3IgTlVMIGFmdGVyIHRoZSBD Ui4gICAgICAgICAgICAgKi8KLQkJCSAgICBkZWJ1ZyhGMTAwLCJndHdvcmQgQ1IgdGVsbmV0IGVy cm9yIiwiIiwwKTsKLQkJCSAgICBjID0gTEY7Ci0JCQl9IGVsc2UgewotCQkJICAgIGRlYnVnKEYx MDAsImd0d29yZCBza2lwcGluZyBDUiIsIiIsMCk7Ci0JCQkgICAgZ290X2NyID0gMTsJLyogUmVt ZW1iZXIgYSBDUiB3YXMgcmVjZWl2ZWQgKi8KLQkJCSAgICBnb3RvIEdFVE5FWFRDSDsKLQkJCX0K LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJCWRlYnVnKEYxMDAsImd0d29yZCBDUiB0 byBMRiIsIiIsMCk7Ci0JCQljID0gTEY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIExGOgotICAgICAgICAg ICAgICAgICAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpKSB7Ci0JCQlnb3RfY3IgPSAw OwotCQkJZGVidWcoRjEwMCwiZ3R3b3JkIExGIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsKLQkJCWlmIChnb3RfY3IpIHsKLQkJCSAgICBnb3RfY3IgPSAwOwotCQkJICAgIGRl YnVnKEYxMDAsImd0d29yZCBza2lwcGluZyBMRiIsIiIsMCk7Ci0JCQkgICAgZ290byBHRVRORVhU Q0g7Ci0JCQl9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIE5VTDoKLSAgICAgICAgICAgICAgICAgICAgaWYg KCFURUxPUFRfVShURUxPUFRfQklOQVJZKSAmJiBnb3RfY3IpIHsKLQkJCWMgPSBMRjsKLQkJCWRl YnVnKEYxMDAsImd0d29yZCBOVUwgdG8gTEYiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgewotCQkJZGVidWcoRjEwMCwiZ3R3b3JkIE5VTCIsIiIsMCk7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKLSAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0jZWxzZSAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgICBjYXNl IENSOgotICAgICAgICAgICAgICAgICAgICBpZiAoICFURUxPUFRfVShURUxPUFRfQklOQVJZKSAm JiBnb3RfY3IgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIG1lYW5zIHRoZSBz ZW5kZXIgaXMgdmlvbGF0aW5nIFRlbG5ldCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAv KiBwcm90b2NvbCBiZWNhdXNlIHdlIHJlY2VpdmVkIHR3byBDUnMgaW4gYSAgICovCi0gICAgICAg ICAgICAgICAgICAgICAgICAvKiByb3cgd2l0aG91dCBnZXR0aW5nIGVpdGhlciBMRiBvciBOVUwu ICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIHdpbGwgbm90IHNvbHZl IHRoZSBwcm9ibGVtIGJ1dCBpdCAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiB3 aWxsIGF0IGxlYXN0IGFsbG93IHR3byBDUnMgdG8gZG8gc29tZXRoaW5nICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAvKiB3aGVyZWFzIGJlZm9yZSB0aGUgdXNlciB3b3VsZCBoYXZlIHRvIGd1 ZXNzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiB0byBzZW5kIExGIG9yIE5VTCBhZnRl ciB0aGUgQ1IuICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAwLCJndHdvcmQgQ1IgdGVsbmV0IGVycm9yIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9jciA9IDE7CS8qIFJlbWVtYmVy IGEgQ1Igd2FzIHJlY2VpdmVkICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgICAgLyogZGVidWcoRjEwMCwiZ3R3b3JkIENSIHRvIExGIiwiIiwwKTsgKi8KLSAgICAg ICAgICAgICAgICAgICAgYyA9IExGOwotCQkgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBj YXNlIExGOgotICAgICAgICAgICAgICAgICAgICBpZiAoZ290X2NyKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBnb3RfY3IgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVidWco RjEwMCwiZ3R3b3JkIHNraXBwaW5nIExGIiwiIiwwKTsgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gR0VUTkVYVENIOwotICAgICAgICAgICAgICAgICAgICB9Ci0JCSAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgIGNhc2UgTlVMOgotICAgICAgICAgICAgICAgICAgICBpZiAoZ290 X2NyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOwotICAgICAgICAgICAg ICAgICAgICAgICAgLyogZGVidWcoRjEwMCwiZ3R3b3JkIHNraXBwaW5nIE5VTCIsIiIsMCk7ICov Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEdFVE5FWFRDSDsKLSNpZmRlZiBDT01NRU5U Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgZGVi dWcoRjEwMCwiZ3R3b3JkIE5VTCIsIiIsMCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSNpZmRlZiBJS1NECi0JCSAgY2FzZSBFVFg6CQkvKiBDdHJsLUMuLi4gKi8KLSAg ICAgICAgICAgICAgICAgIGNhc2UgRU9UOgkJLyogRU9UID0gRU9GICovCi0gICAgICAgICAgICAg ICAgICAgICAgaWYgKGluc2VydmVyCi0jaWZkZWYgQ0tfTE9HSU4KLQkJCSAgJiYgIXhfbG9nZ2Vk Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQkJCSAgKQotICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4oLTQpOwotCQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogSUtTRCAqLwotCQkgIGRlZmF1 bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogVE5DT0RFICovCi0gICAgfSBlbHNlIHsKLSNpZmRl ZiBPUzIKLQljID0gY29uaW5jKDApOwotI2Vsc2UgLyogT1MyICovCi0jaWZkZWYgQ01EX0NPTklO QwotI3VuZGVmIENNRF9DT05JTkMKLSNlbmRpZiAvKiBDTURfQ09OSU5DICovCi0JYyA9IGdldGNo YXIoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0jZWxzZSAgLyogTUlOSVgyICovCi0jdW5k ZWYgZ2V0YwotI2lmZGVmIENNRF9DT05JTkMKLSN1bmRlZiBDTURfQ09OSU5DCi0jZW5kaWYgLyog Q01EX0NPTklOQyAqLwotICAgIGMgPSBnZXRjKHN0ZGluKTsKLSAgICAvKiBkZWJ1ZyhGMTAxLCJj bWRnZXRjIGdldGMiLCIiLGMpOyAqLwotI2VuZGlmIC8qIE1JTklYMiAqLwotI2lmZGVmIFJUVQot ICAgIGlmIChydHVfYnVnKSB7Ci0jaWZkZWYgQ01EX0NPTklOQwotI3VuZGVmIENNRF9DT05JTkMK LSNlbmRpZiAvKiBDTURfQ09OSU5DICovCi0JYyA9IGdldGNoYXIoKTsJCQkvKiBSVFUgZG9lc24n dCBkaXNjYXJkIHRoZSBeWiAqLwotCXJ0dV9idWcgPSAwOwotICAgIH0KLSNlbmRpZiAvKiBSVFUg Ki8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotICAgIHJldHVybihjKTsJCQkJLyogUmV0dXJu IHdoYXQgd2UgZ290ICovCi19Ci0KLS8qICNpZmRlZiBVU0VfQVJST1dLRVlTICovCi0KLS8qIE1l Y2hhbmlzbSB0byB1c2UgZm9yIHBlZWtpbmcgaW50byBzdGRpbiBidWZmZXIgKi8KLQotI2lmbmRl ZiBVU0VfRklMRV9DTlQJCQkvKiBzdGRpbi0+X19jbnQgKi8KLSNpZm5kZWYgVVNFX0ZJTEVfX0NO VAkJCS8qIE5vdGU6IHR3byB1bmRlcnNjb3JlcyAqLwotI2lmZGVmIEhQVVgJCQkJLyogSFBVWCA3 LTExICovCi0jaWZuZGVmIEhQVVg1Ci0jaWZuZGVmIEhQVVg2Ci0jZGVmaW5lIFVTRV9GSUxFX19D TlQKLSNlbmRpZiAvKiBIUFVYNiAqLwotI2VuZGlmIC8qIEhQVVg1ICovCi0jZWxzZQotI2lmZGVm IEFOWVNDTwkJCQkvKiBTQ08gVU5JWCwgT1NSNSwgVW5peHdhcmUsIGV0YyAqLwotI2lmbmRlZiBP TERfVU5JWFdBUkUJCQkvKiBCdXQgbm90IFVuaXh3YXJlIDEueCBvciAyLjAgKi8KLSNpZm5kZWYg VU5JWFdBUkUyCQkJLyogb3IgMi4xLjAgKi8KLSNkZWZpbmUgVVNFX0ZJTEVfX0NOVAotI2VuZGlm IC8qIFVOSVhXQVJFMiAqLwotI2VuZGlmIC8qIE9MRF9VTklYV0FSRSAqLwotI2VuZGlmIC8qIEFO WVNDTyAqLwotI2VuZGlmIC8qIEhQVVggKi8KLSNlbmRpZiAvKiBVU0VfRklMRV9fQ05UICovCi0j ZW5kaWYgLyogVVNFX0ZJTEVfQ05UICovCi0KLSNpZm5kZWYgVVNFX0ZJTEVfUgkJCS8qIHN0ZGlu LT5fciAqLwotI2lmbmRlZiBVU0VfRklMRV9DTlQKLSNpZm5kZWYgVVNFX0ZJTEVfX0NOVAotI2lm ZGVmIEJTRDQ0CQkJCS8qIHtGcmVlLE9wZW4sTmV0fUJTRCwgQlNESSAqLwotI2RlZmluZSBVU0Vf RklMRV9SCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBVU0VfRklMRV9fQ05UICovCi0j ZW5kaWYgLyogVVNFX0ZJTEVfQ05UICovCi0jZW5kaWYgLyogVVNFX0ZJTEVfUiAqLwotCi0jaWZu ZGVmIFVTRV9GSUxFX1IJCQkvKiBzdGRpbi0+X2NudCAqLwotI2lmbmRlZiBVU0VfRklMRV9DTlQK LSNpZm5kZWYgVVNFX0ZJTEVfX0NOVAotI2RlZmluZSBVU0VfRklMRV9DTlQJCQkvKiBFdmVyeWJv ZHkgZWxzZSAoYnV0IExpbnV4KSAqLwotI2VuZGlmIC8qIFVTRV9GSUxFX19DTlQgKi8KLSNlbmRp ZiAvKiBVU0VfRklMRV9DTlQgKi8KLSNlbmRpZiAvKiBVU0VfRklMRV9SICovCi0KLQotLyoKLSAg YyBtIGQgYyBvIG4gYyBoIGsKLQotICBIb3cgbWFueSBjaGFyYWN0ZXJzIGFyZSB3YWl0aW5nIHRv IGJlIHJlYWQgYXQgdGhlIGNvbnNvbGU/ICBOb3JtYWxseQotICBjb25jaGsoKSB3b3VsZCB0ZWxs IHVzLCBidXQgaW4gVW5peCBhbmQgVk1TIGNtZGdldGMoKSB1c2VzIHN0ZGlvIGdldGNoYXIoKSwK LSAgdGh1cyBieXBhc3NpbmcgY29uaW5jKCkvY29uY2hrKCksIHNvIHdlIGhhdmUgdG8gcGVlayBp bnRvIHRoZSBzdGRpbiBidWZmZXIsCi0gIHdoaWNoIGlzIHRvdGFsbHkgbm9ucG9ydGFibGUuICBX aGljaCBpcyB3aHkgdGhpcyByb3V0aW5lIGlzLCBhdCBsZWFzdCBmb3IKLSAgbm93LCB1c2VkIG9u bHkgZm9yIGNoZWNraW5nIGZvciBhcnJvdy1rZXkgc2VxdWVuY2VzIGZyb20gdGhlIGtleWJvYXJk IGFmdGVyCi0gIGFuIEVTQyB3YXMgcmVhZC4gIFdvdWxkbid0IGl0IGJlIG5pY2UgaWYgdGhlIHN0 ZGlvIHBhY2thZ2UgaGFkIGEgZnVuY3Rpb24KLSAgdGhhdCByZXR1cm5lZCB0aGUgbnVtYmVyIG9m IGJ5dGVzIHdhaXRpbmcgdG8gYmUgcmVhZCBmcm9tIGl0cyBidWZmZXI/Ci0gIFJldHVybnMgMCBv ciBncmVhdGVyIGFsd2F5cy4KLSovCi1pbnQKLWNtZGNvbmNoaygpIHsKLSAgICBpbnQgeCA9IDAs IHk7Ci0gICAgeSA9IHB1c2hjID8gMSA6IDA7CQkJLyogSGF2ZSBjb21tYW5kIGNoYXJhY3RlciBw dXNoZWQ/ICovCi0jaWZkZWYgT1MyCi0gICAgeCA9IGNvbmNoaygpOwkJCS8qIENoZWNrIGRldmlj ZS1kcml2ZXIgYnVmZmVyICovCi0gICAgaWYgKHggPCAwKSB4ID0gMDsKLSNlbHNlIC8qIE9TMiAq LwotI2lmZGVmIENNRF9DT05JTkMJCQkvKiBTZWUgY21kZ2V0YygpICovCi0gICAgeCA9IGNvbmNo aygpOwkJCS8qIENoZWNrIGRldmljZS1kcml2ZXIgYnVmZmVyICovCi0gICAgaWYgKHggPCAwKSB4 ID0gMDsKLSNlbHNlICAvKiBDTURfQ09OSU5DICovCi0KLS8qIEhlcmUgd2UgbXVzdCBsb29rIGlu c2lkZSB0aGUgc3RkaW4gYnVmZmVyIC0gaGlnaGx5IHBsYXRmb3JtIGRlcGVuZGVudCAqLwotCi0j aWZkZWYgX0lPX2ZpbGVfZmxhZ3MJCQkvKiBMaW51eCAqLwotICAgIHggPSAoaW50KSAoKHN0ZGlu LT5fSU9fcmVhZF9lbmQpIC0gKHN0ZGluLT5fSU9fcmVhZF9wdHIpKTsKLSAgICBkZWJ1ZyhGMTAx LCJjbWRjb25jaGsgX0lPX2ZpbGVfZmxhZ3MiLCIiLHgpOwotI2Vsc2UgIC8qIF9JT19maWxlX2Zs YWdzICovCi0jaWZkZWYgVVNFX0ZJTEVfQ05UCQkJLyogVHJhZGl0aW9uYWwgKi8KLSNpZmRlZiBW TVMKLSAgICBkZWJ1ZyhGMTAxLCJjbWRjb25jaGsgKCpzdGRpbiktPl9jbnQiLCIiLCgqc3RkaW4p LT5fY250KTsKLSAgICB4ID0gKCpzdGRpbiktPl9jbnQ7Ci0jZWxzZQotI2lmZGVmIE5PQVJST1dL RVlTCi0gICAgZGVidWcoRjEwMSwiY21kY29uY2hrIE5PQVJST1dLRVlTIHgiLCIiLDApOwotI2Vs c2UKLSAgICBkZWJ1ZyhGMTAxLCJjbWRjb25jaGsgc3RkaW4tPl9jbnQiLCIiLHN0ZGluLT5fY250 KTsKLSAgICB4ID0gc3RkaW4tPl9jbnQ7Ci0jZW5kaWYgLyogTk9BUlJPV0tFWVMgKi8KLSNlbmRp ZiAvKiBWTVMgKi8KLSAgICBpZiAoeCA9PSAwKSB4ID0gY29uY2hrKCk7Ci0gICAgaWYgKHggPCAw KSB4ID0gMDsKLSNlbHNlICAvKiBVU0VfRklMRV9DTlQgKi8KLSNpZmRlZiBVU0VfRklMRV9fQ05U CQkJLyogSFAtVVggKi8KLSAgICBkZWJ1ZyhGMTAxLCJjbWRjb25jaGsgc3RkaW4tPl9fY250Iiwi IixzdGRpbi0+X19jbnQpOwotICAgIHggPSBzdGRpbi0+X19jbnQ7Ci0gICAgaWYgKHggPT0gMCkg eCA9IGNvbmNoaygpOwotICAgIGlmICh4IDwgMCkgeCA9IDA7Ci0jZWxzZSAgLyogVVNFX0ZJTEVf Q05UICovCi0jaWZkZWYgVVNFX0ZJTEVfUgkJCS8qIEZyZWVCU0QsIE9wZW5CU0QsIGV0YyAqLwot ICAgIGRlYnVnKEYxMDEsImNtZGNvbmNoayBzdGRpbi0+X3IiLCIiLHN0ZGluLT5fcik7Ci0gICAg eCA9IHN0ZGluLT5fcjsKLSAgICBpZiAoeCA9PSAwKSB4ID0gY29uY2hrKCk7Ci0gICAgaWYgKHgg PCAwKSB4ID0gMDsKLQotICAgIC8qIEZpbGwgaW4gYW55IG90aGVycyBoZXJlLi4uICovCi0KLSNl bmRpZiAvKiBVU0VfRklMRV9SICovCi0jZW5kaWYgLyogVVNFX0ZJTEVfX0NOVCAqLwotI2VuZGlm IC8qIFVTRV9GSUxFX0NOVCAqLwotI2VuZGlmIC8qIF9JT19maWxlX2ZsYWdzICovCi0jZW5kaWYg LyogQ01EX0NPTklOQyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIHJldHVybih4ICsgeSk7Ci19 Ci0vKiAjZW5kaWYgKi8gLyogVVNFX0FSUk9XS0VZUyAqLwotCi0KLXN0YXRpYyBWT0lECi1jbWRj bHJzY24oKSB7CQkJCS8qIENsZWFyIHRoZSBzY3JlZW4gKi8KLSAgICBja19jbHMoKTsKLX0KLQot c3RhdGljIFZPSUQJCQkJLyogV2hhdCB0byBlY2hvIGF0IGVuZCBvZiBjb21tYW5kICovCi0jaWZk ZWYgQ0tfQU5TSUMKLWNtZG5ld2woY2hhciBjKQotI2Vsc2UKLWNtZG5ld2woYykgY2hhciBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBjbWRuZXdsICovIHsKLSNpZmRlZiBPUzIKLSNpZmRl ZiBJS1NECi0gICAgZXh0ZXJuIGludCBpbnNlcnZlcjsKLSAgICBpZiAoaW5zZXJ2ZXIgJiYgYyA9 PSBMRikKLSAgICAgIHB1dGNoYXIoQ1IpOwotI2VuZGlmIC8qIElLU0QgKi8KLSNlbmRpZiAvKiBP UzIgKi8KLQotICAgIHB1dGNoYXIoYyk7CQkJCS8qIGMgaXMgdGhlIHRlcm1pbmF0aW5nIGNoYXJh Y3RlciAqLwotCi0jaWZkZWYgV0lOVENQCQkJCS8qIHdoYXQgaXMgdGhpcyBkb2luZyBoZXJlPyAq LwotICAgIGlmIChjID09IENSKSBwdXRjaGFyKE5MKTsKLSNlbmRpZiAvKiBXSU5UQ1AgKi8KLQot LyoKLSAgQS5BLiBDaGVybm92LCB3aG8gc2VudCBpbiBjaGFuZ2VzIGZvciBGcmVlQlNELCBzYWlk IHdlIGFsc28gbmVlZGVkIHRoaXMKLSAgZm9yIFNWT1JQT1NJWCBiZWNhdXNlICJzZXR1cCB0ZXJt aW5hbCBieSB0ZXJtaW9zIGFuZCBjdXJzZXMgZG9lcwotICBub3QgY29udmVydCBcciB0byBcbiwg c28gYWRkaXRpb25hbCBcbiBuZWVkZWQgaW4gbmV3bGluZSBmdW5jdGlvbi4iICBCdXQKLSAgaXQg aXMgYWxzbyB2ZXJ5IGxpa2VseSB0byByZXN1bHQgaW4gdW53YW50ZWQgYmxhbmsgbGluZXMuCi0q LwotI2lmZGVmIEJTRDQ0Ci0gICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOwotI2VuZGlmIC8q IEJTRDQ0ICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogT1MyIG5vIGxvbmdlciBuZWVkcyB0 aGlzIGFzIGFsbCBDUiBhcmUgY29udmVydGVkIHRvIE5MIGluIGNvbmluYygpICovCi0gICAgLyog VGhpcyBlbGltaW5hdGVzIHRoZSB1Z2x5IGV4dHJhIGJsYW5rIGxpbmVzIGRpc2N1c3NlZCBhYm92 ZS4gICAgICAgICovCi0jaWZkZWYgT1MyCi0gICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOwot I2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZmRlZiBhZWdpcwotICAg IGlmIChjID09IENSKSBwdXRjaGFyKE5MKTsKLSNlbmRpZiAvKiBhZWdpcyAqLwotI2lmZGVmIEFN SUdBCi0gICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOwotI2VuZGlmIC8qIEFNSUdBICovCi0j aWZkZWYgZGF0YWdlbmVyYWwKLSAgICBpZiAoYyA9PSBDUikgcHV0Y2hhcihOTCk7Ci0jZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KLSNpZmRlZiBHRU1ET1MKLSAgICBpZiAoYyA9PSBDUikgcHV0Y2hh cihOTCk7Ci0jZW5kaWYgLyogR0VNRE9TICovCi0jaWZkZWYgU1RSQVRVUwotICAgIGlmIChjID09 IENSKSBwdXRjaGFyKE5MKTsKLSNlbmRpZiAvKiBTVFJBVFVTICovCi19Ci0KLXN0YXRpYyBWT0lE Ci1jbWRjaGFyZGVsKCkgewkJCQkvKiBFcmFzZSBhIGNoYXJhY3RlciBmcm9tIHRoZSBzY3JlZW4g Ki8KLSNpZm5kZWYgTk9TUEwKLSAgICBpZiAoIWVjaG9zdGFycykKLSNlbmRpZgkvKiBOT1NQTCAq LwotICAgICAgaWYgKCFkcHgpIHJldHVybjsKLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIC8qIERH ICdcYicgaXMgRU0gKF55IG9yIFwwMzEpICovCi0gICAgaWYgKHRlcm10eXBlID09IDEpCi0gICAg ICAvKiBFcmFzZSBhIGNoYXJhY3RlciBmcm9tIG5vbi1ERyBzY3JlZW4sICovCi0gICAgICBkZ25j b3ViKDEsIlwwMTAgXDAxMCIsMyk7Ci0gICAgZWxzZQotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICov Ci0gICAgICBwcmludGYoIlxiIFxiIik7Ci0jaWZkZWYgR0VNRE9TCi0gICAgZmZsdXNoKHN0ZG91 dCk7Ci0jZWxzZQotI2lmZGVmIEJFQk9YCi0gICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyog QkVCT1ggKi8KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLX0KLQotc3RhdGljIFZPSUQKLSNpZmRlZiBD S19BTlNJQwotY21kZWNobyhjaGFyIGMsIGludCBxdW90ZSkKLSNlbHNlCi1jbWRlY2hvKGMscXVv dGUpIGNoYXIgYzsgaW50IHF1b3RlOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIGNtZGVj aG8gKi8KLSNpZmRlZiBOT1NQTAotICAgIGlmICghZHB4KSByZXR1cm47Ci0jZWxzZQotICAgIGlm ICghZWNob3N0YXJzKSB7Ci0JaWYgKCFkcHgpIHJldHVybjsKLSAgICB9IGVsc2UgewotCWMgPSAo Y2hhcillY2hvc3RhcnM7Ci0gICAgfQotI2VuZGlmCS8qIE5PU1BMICovCi0gICAgLyogRWNobyB0 dHkgaW5wdXQgY2hhcmFjdGVyIGMgKi8KLSAgICBpZiAocXVvdGUpIHsKLQlwdXRjaGFyKEJTKTsK LQlwdXRjaGFyKFNQKTsKLQlwdXRjaGFyKEJTKTsKLSNpZmRlZiBpc3ByaW50Ci0JcHV0Y2hhcigo Q0hBUikgKGlzcHJpbnQoYykgPyBjIDogJ14nICkpOwotI2Vsc2UKLQlwdXRjaGFyKChDSEFSKSAo KGMgPj0gU1AgJiYgYyA8IERFTCkgPyBjIDogJ14nKSk7Ci0jZW5kaWYgLyogaXNwcmludCAqLwot ICAgIH0gZWxzZSB7Ci0JcHV0Y2hhcihjKTsKLSAgICB9Ci0jaWZkZWYgT1MyCi0gICAgaWYgKHF1 b3RlPT0xICYmIGM9PUNSKSBwdXRjaGFyKChDSEFSKSBOTCk7Ci0jZW5kaWYgLyogT1MyICovCi0g ICAgaWYgKHRpbWVsaW1pdCkKLSAgICAgIGZmbHVzaChzdGRvdXQpOwotfQotCi0vKiBSZXR1cm4g cG9pbnRlciB0byBjdXJyZW50IHBvc2l0aW9uIGluIGNvbW1hbmQgYnVmZmVyLiAqLwotCi1jaGFy ICoKLWNtcGVlaygpIHsKLSAgICByZXR1cm4obnApOwotfQotI2VuZGlmIC8qIE5PSUNQICovCi0K LQotI2lmZGVmIE5PSUNQCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0jaW5jbHVkZSAiY2t1Y21kLmgi Ci0jaW5jbHVkZSAiY2tjYXNjLmgiCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQotLyogIFggWCBFIFMg QyAgLS0gIEludGVycHJldHMgYmFja3NsYXNoIGNvZGVzICAqLwotLyogIFJldHVybnMgdGhlIGlu dCB2YWx1ZSBvZiB0aGUgYmFja3NsYXNoIGNvZGUgaWYgaXQgaXMgPiAtMSBhbmQgPCAyNTYgKi8K LS8qICBhbmQgdXBkYXRlcyB0aGUgc3RyaW5nIHBvaW50ZXIgdG8gZmlyc3QgY2hhcmFjdGVyIGFm dGVyIGJhY2tzbGFzaCBjb2RlLiAqLwotLyogIElmIHRoZSBhcmd1bWVudCBpcyBpbnZhbGlkLCBs ZWF2ZXMgcG9pbnRlciB1bmNoYW5nZWQgYW5kIHJldHVybnMgLTEuICovCi0KLWludAoteHhlc2Mo cykgY2hhciAqKnM7IHsJCQkvKiBFeHBhbmQgYmFja3NsYXNoIGVzY2FwZXMgKi8KLSAgICBpbnQg eCwgeSwgYnJhY2UsIHJhZGl4OwkJLyogUmV0dXJucyB0aGUgaW50IHZhbHVlICovCi0gICAgY2hh ciBoZCA9ICc5JzsJCQkvKiBIaWdoZXN0IGRpZ2l0IGluIHJhZGl4ICovCi0gICAgY2hhciAqcDsK LQotICAgIHAgPSAqczsJCQkJLyogcG9pbnRlciB0byBiZWdpbm5pbmcgKi8KLSAgICBpZiAoIXAp IHJldHVybigtMSk7CQkJLyogd2F0Y2ggb3V0IGZvciBudWxsIHBvaW50ZXIgKi8KLSAgICB4ID0g KnArKzsJCQkJLyogY2hhcmFjdGVyIGF0IGJlZ2lubmluZyAqLwotICAgIGlmICh4ICE9IENNRFEp IHJldHVybigtMSk7CQkvKiBtYWtlIHN1cmUgaXQncyBhIGJhY2tzbGFzaCBjb2RlICovCi0KLSAg ICB4ID0gKnA7CQkJCS8qIGl0IGlzLCBnZXQgdGhlIG5leHQgY2hhcmFjdGVyICovCi0gICAgaWYg KHggPT0gJ3snKSB7CQkJLyogYnJhY2tldGVkIHF1YW50aXR5PyAqLwotCXArKzsJCQkJLyogYmVn aW4gcGFzdCBicmFja2V0ICovCi0JeCA9ICpwOwotCWJyYWNlID0gMTsKLSAgICB9IGVsc2UgYnJh Y2UgPSAwOwotICAgIHN3aXRjaCAoeCkgewkJCS8qIFN0YXJ0IGludGVycHJldGluZyAqLwotICAg ICAgY2FzZSAnZCc6CQkJCS8qIERlY2ltYWwgcmFkaXggaW5kaWNhdG9yICovCi0gICAgICBjYXNl ICdEJzoKLQlwKys7CQkJCS8qIEp1c3QgcG9pbnQgcGFzdCBpdCBhbmQgZmFsbCB0aHJ1ICovCi0g ICAgICBjYXNlICcwJzoJCQkJLyogU3RhcnRzIHdpdGggZGlnaXQgKi8KLSAgICAgIGNhc2UgJzEn OgotICAgICAgY2FzZSAnMic6ICBjYXNlICczJzogIGNhc2UgJzQnOiAgY2FzZSAnNSc6Ci0gICAg ICBjYXNlICc2JzogIGNhc2UgJzcnOiAgY2FzZSAnOCc6ICBjYXNlICc5JzoKLQlyYWRpeCA9IDEw OwkJCS8qIERlY2ltYWwgKi8KLQloZCA9ICc5JzsJCQkvKiBoaWdoZXN0IHZhbGlkIGRpZ2l0ICov Ci0JYnJlYWs7Ci0gICAgICBjYXNlICdvJzoJCQkJLyogU3RhcnRzIHdpdGggbyBvciBPICovCi0g ICAgICBjYXNlICdPJzoKLQlyYWRpeCA9IDg7CQkJLyogT2N0YWwgKi8KLQloZCA9ICc3JzsJCQkv KiBoaWdoZXN0IHZhbGlkIGRpZ2l0ICovCi0JcCsrOwkJCQkvKiBwb2ludCBwYXN0IHJhZGl4IGlu ZGljYXRvciAqLwotCWJyZWFrOwotICAgICAgY2FzZSAneCc6CQkJCS8qIFN0YXJ0cyB3aXRoIHgg b3IgWCAqLwotICAgICAgY2FzZSAnWCc6Ci0JcmFkaXggPSAxNjsJCQkvKiBIZXhhZGVjaW1hbCAq LwotCXArKzsJCQkJLyogcG9pbnQgcGFzdCByYWRpeCBpbmRpY2F0b3IgKi8KLQlicmVhazsKLSAg ICAgIGRlZmF1bHQ6CQkJCS8qIEFsbCBvdGhlcnMgKi8KLSNpZmRlZiBDT01NRU5UCi0JKnMgPSBw KzE7CQkJLyogVHJlYXQgYXMgcXVvdGUgb2YgbmV4dCBjaGFyICovCi0JcmV0dXJuKCpwKTsKLSNl bHNlCi0JcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotICAgIC8qIEZv ciBPUy8yLCB0aGVyZSBhcmUgIndpZGUiIGNoYXJhY3RlcnMgcmVxdWlyZWQgZm9yIHRoZSBrZXli b2FyZAotICAgICAqIGJpbmRpbmcsIGkuZSBcNjQ0IGFuZCBzaW1pbGFyIGNvZGVzIGxhcmdlciB0 aGFuIDI1NSAoYnl0ZSkuCi0gICAgICogRm9yIHRoaXMgcHVycG9zZSwgZ2l2ZSB1cCBjaGVja2lu ZyBmb3IgPCAyNTYuIElmIHNvbWVvbmUgbWVhbnMKLSAgICAgKiBcMjY2IHNob3VsZCByZXN1bHQg aW4gXDI2IGZvbGxvd2VkIGJ5IGEgIjYiIGNoYXJhY3RlciwgaGUgc2hvdWxkCi0gICAgICogYWx3 YXlzIHdyaXRlIFx7MjZ9NiBhbnl3YXkuICBOb3csIHJldHVybiBvbmx5IHRoZSBsb3dlciBieXRl IG9mCi0gICAgICogdGhlIHJlc3VsdCwgaS5lLiAxMCwgYnV0IGVhdCB1cCB0aGUgd2hvbGUgXDI2 NiBzZXF1ZW5jZSBhbmQKLSAgICAgKiBwdXQgdGhlIHdpZGUgcmVzdWx0IDI2NiBpbnRvIGEgZ2xv YmFsIHZhcmlhYmxlLiAgWWVzLCB0aGF0J3Mgbm90Ci0gICAgICogdGhlIG1vc3QgYmVhdXRpZnVs IHByb2dyYW1taW5nIHN0eWxlIGJ1dCByZXF1aXJlcyB0aGUgbGVhc3QKLSAgICAgKiBhbW91bnQg b2YgY2hhbmdlcyB0byBvdGhlciByb3V0aW5lcy4KLSAgICAgKi8KLSAgICBpZiAoKnAgPT0gJ3sn KSB7CQkJLyogU3VuIE1heSAxMSAyMDowMDo0MCAyMDAzICovCi0JYnJhY2UgPSAxOwkJCS8qIEFs bG93IHt9IGFmdGVyIHJhZGl4IGluZGljYXRvciAqLwotCXArKzsKLSAgICB9Ci0gICAgaWYgKHJh ZGl4IDw9IDEwKSB7CQkJLyogTnVtYmVyIGluIHJhZGl4IDggb3IgMTAgKi8KLQlmb3IgKCB4ID0g eSA9IDA7Ci0gCSAgICAgICgqcCkgJiYgKCpwID49ICcwJykgJiYgKCpwIDw9IGhkKQotI2lmZGVm IE9TMgotICAgICAgICAgICAgICAgICAgICYmICh5IDwgNSkgJiYgKHgqcmFkaXggPCBLTVNJWkUp OwotICAgICAgICAgICAgICAvKiB0aGUgbWF4aW11bSBuZWVkZWQgdmFsdWUgXDgxOTYgaXMgNCBk aWdpdHMgbG9uZyAqLwotICAgICAgICAgICAgICAvKiB3aGlsZSBhcyBvY3RhbCBpdCByZXF1aXJl cyBcMTM3NywgaS5lLiA1IGRpZ2l0cyAqLwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAmJiAo eSA8IDMpICYmICh4KnJhZGl4IDwgMjU2KTsKLSNlbmRpZiAvKiBPUzIgKi8KLQkgICAgICBwKyss eSsrKSB7Ci0JICAgIHggPSB4ICogcmFkaXggKyAoaW50KSAqcCAtIDQ4OwotCX0KLSNpZmRlZiBP UzIKLSAgICAgICAgd2lkZXJlc3VsdCA9IHg7CQkJLyogUmVtZW1iZXIgd2lkZSByZXN1bHQgKi8K LSAgICAgICAgeCAmPSAyNTU7Ci0jZW5kaWYgLyogT1MyICovCi0JaWYgKHkgPT0gMCB8fCB4ID4g MjU1KSB7CS8qIE5vIHZhbGlkIGRpZ2l0cz8gKi8KLQkgICAgKnMgPSBwOwkJCS8qIHBvaW50IGFm dGVyIGl0ICovCi0JICAgIHJldHVybigtMSk7CQkJLyogcmV0dXJuIGZhaWx1cmUuICovCi0JfQot ICAgIH0gZWxzZSBpZiAocmFkaXggPT0gMTYpIHsJCS8qIFNwZWNpYWwgY2FzZSBmb3IgaGV4ICov Ci0JaWYgKCh4ID0gdW5oZXgoKnArKykpIDwgMCkgeyAqcyA9IHAgLSAxOyByZXR1cm4oLTEpOyB9 Ci0JaWYgKCh5ID0gdW5oZXgoKnArKykpIDwgMCkgeyAqcyA9IHAgLSAyOyByZXR1cm4oLTEpOyB9 Ci0JeCA9ICgoeCA8PCA0KSAmIDB4RjApIHwgKHkgJiAweDBGKTsKLSNpZmRlZiBPUzIKLSAgICAg ICAgd2lkZXJlc3VsdCA9IHg7Ci0gICAgICAgIGlmICgoeSA9IHVuaGV4KCpwKSkgPj0gMCkgewot ICAgICAgICAgICBwKys7Ci0JICAgd2lkZXJlc3VsdCA9ICgoeCA8PCA0KSAmIDB4RkYwKSB8ICh5 ICYgMHgwRik7Ci0gICAgICAgICAgIHggPSB3aWRlcmVzdWx0ICYgMjU1OwotICAgICAgICB9Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgfSBlbHNlIHggPSAtMTsKLSAgICBpZiAoYnJhY2UgJiYgKnAg PT0gJ30nICYmIHggPiAtMSkJLyogUG9pbnQgcGFzdCBjbG9zaW5nIGJyYWNlLCBpZiBhbnkgKi8K LSAgICAgIHArKzsKLSAgICAqcyA9IHA7CQkJCS8qIFBvaW50IHRvIG5leHQgY2hhciBhZnRlciBz ZXF1ZW5jZSAqLwotICAgIHJldHVybih4KTsJCQkJLyogUmV0dXJuIHZhbHVlIG9mIHNlcXVlbmNl ICovCi19Ci0KLWludAkJCQkJLyogQ29udmVydCBoZXggc3RyaW5nIHRvIGludCAqLwotI2lmZGVm IENLX0FOU0lDCi11bmhleChjaGFyIHgpCi0jZWxzZQotdW5oZXgoeCkgY2hhciB4OwotI2VuZGlm IC8qIENLX0FOU0lDICovCi0vKiB1bmhleCAqLyB7Ci0KLSAgICBpZiAoeCA+PSAnMCcgJiYgeCA8 PSAnOScpCQkvKiAwLTkgaXMgb2Zmc2V0IGJ5IGhleCAzMCAqLwotICAgICAgcmV0dXJuKHggLSAw eDMwKTsKLSAgICBlbHNlIGlmICh4ID49ICdBJyAmJiB4IDw9ICdGJykJLyogQS1GIG9mZnNldCBi eSBoZXggMzcgKi8KLSAgICAgIHJldHVybih4IC0gMHgzNyk7Ci0gICAgZWxzZSBpZiAoeCA+PSAn YScgJiYgeCA8PSAnZicpCS8qIGEtZiBvZmZzZXQgYnkgaGV4IDU3ICovCi0gICAgICByZXR1cm4o eCAtIDB4NTcpOwkJCS8qIChvYnZpb3VzbHkgQVNDSUkgZGVwZW5kZW50KSAqLwotICAgIGVsc2Ug cmV0dXJuKC0xKTsKLX0KLQotLyogIEwgTyBPIEsgVSBQICAtLSAgTG9va3VwIHRoZSBzdHJpbmcg aW4gdGhlIGdpdmVuIGFycmF5IG9mIHN0cmluZ3MgICovCi0KLS8qCi0gIENhbGwgdGhpcyB3YXk6 ICB2ID0gbG9va3VwKHRhYmxlLHdvcmQsbiwmeCk7Ci0KLSAgICB0YWJsZSAtIGEgJ3N0cnVjdCBr ZXl0YWInIHRhYmxlLgotICAgIHdvcmQgIC0gdGhlIHRhcmdldCBzdHJpbmcgdG8gbG9vayB1cCBp biB0aGUgdGFibGUuCi0gICAgbiAgICAgLSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB0 YWJsZS4KLSAgICB4ICAgICAtIGFkZHJlc3Mgb2YgYW4gaW50ZWdlciBmb3IgcmV0dXJuaW5nIHRo ZSB0YWJsZSBhcnJheSBpbmRleCwKLQkgICAgb3IgTlVMTCBpZiB5b3UgZG9uJ3QgbmVlZCBhIHRh YmxlIGluZGV4LgotCi0gIFRoZSBrZXl3b3JkIHRhYmxlIG11c3QgYmUgYXJyYW5nZWQgaW4gYXNj ZW5kaW5nIGFscGhhYmV0aWNhbCBvcmRlcjsKLSAgYWxwaGFiZXRpYyBjYXNlIGRvZXNuJ3QgbWF0 dGVyIGJ1dCBsZXR0ZXJzIGFyZSB0cmVhdGVkIGFzIGxvd2VyY2FzZQotICBmb3IgcHVycG9zZXMg b2Ygb3JkZXJpbmc7IHRodXMgIl4iIGFuZCAiXyIgY29tZSAqYmVmb3JlKiB0aGUgbGV0dGVycywK LSAgbm90IGFmdGVyIHRoZW0uCi0KLSAgUmV0dXJucyB0aGUga2V5d29yZCdzIGFzc29jaWF0ZWQg dmFsdWUgKHplcm8gb3IgZ3JlYXRlcikgaWYgZm91bmQsCi0gIHdpdGggdGhlIHZhcmlhYmxlIHgg c2V0IHRvIHRoZSBrZXl3b3JkLXRhYmxlIGluZGV4LiAgSWYgaXMgbG9va3VwKCkKLSAgaXMgbm90 IHN1Y2Nlc3NmdWwsIGl0IHJldHVybnM6Ci0KLSAgIC0zIGlmIG5vdGhpbmcgdG8gbG9vayB1cCAo dGFyZ2V0IHdhcyBudWxsKSwKLSAgIC0yIGlmIGFtYmlndW91cywKLSAgIC0xIGlmIG5vdCBmb3Vu ZC4KLQotICBBIG1hdGNoIGlzIHN1Y2Nlc3NmdWwgaWYgdGhlIHRhcmdldCBtYXRjaGVzIGEga2V5 d29yZCBleGFjdGx5LCBvciBpZgotICB0aGUgdGFyZ2V0IGlzIGEgcHJlZml4IG9mIGV4YWN0bHkg b25lIGtleXdvcmQuICBJdCBpcyBhbWJpZ3VvdXMgaWYgdGhlCi0gIHRhcmdldCBtYXRjaGVzIHR3 byBvciBtb3JlIGtleXdvcmRzIGZyb20gdGhlIHRhYmxlLgotCi0gIExvb2t1cCgpIGlzIHRoZSBj cml0aWNhbCByb3V0aW5lIGluIHNjcmlwdHMgYW5kIHNvIGlzIG9wdGltaXplZCB3aXRoIGEKLSAg c2ltcGxlIHN0YXRpYyBjYWNoZSBwbHVzIHNvbWUgb3RoZXIgdHJpY2tzLiAgTWF5YmUgaXQgY291 bGQgYmUgaW1wcm92ZWQKLSAgZnVydGhlciB3aXRoIGJpbmFyeSBzZWFyY2ggb3IgaGFzaCB0ZWNo bmlxdWVzIGJ1dCBJIGRvdWJ0IGl0IHNpbmNlIG1vc3QKLSAga2V5d29yZCB0YWJsZXMgYXJlIGZh aXJseSBzaG9ydC4KLSovCi0KLSNpZmRlZiBVU0VfTFVDQUNIRQkJCS8qIExvb2t1cCBjYWNoZSAq LwotZXh0ZXJuIGludCBsdXNpemU7CQkJLyogKGluaXRpYWxpemVkIGluIGNrdXVzNS5jKSAqLwot ZXh0ZXJuIGNoYXIgKiBsdWNtZFtdOwotZXh0ZXJuIGludCBsdXZhbFtdOwotZXh0ZXJuIGludCBs dWlkeFtdOwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgKiBsdXRhYltdOwotbG9uZyBsdWhpdHMgPSAw TDsKLWxvbmcgbHVjYWxscyA9IDBMOwotbG9uZyB4eGhpdHMgPSAwTDsKLWxvbmcgbHVsb29wID0g MEw7Ci0jZW5kaWYgLyogVVNFX0xVQ0FDSEUgKi8KLQotaW50Ci1sb29rdXAodGFibGUsY21kLG4s eCkgY2hhciAqY21kOyBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107IGludCBuLCAqeDsgewotCi0gICAg cmVnaXN0ZXIgaW50IGksIG07Ci0gICAgaW50IHYsIGxlbiwgY21kbGVuID0gMDsKLSAgICBjaGFy IGMgPSBOVUwsIGMxLCAqczsKLQotLyogR2V0IDFzdCBjaGFyIG9mIHNlYXJjaCBvYmplY3QsIGlm IGl0J3MgbnVsbCByZXR1cm4gLTMuICovCi0KLSAgICBpZiAoIWNtZCB8fCBuIDwgMSkJCQkvKiBE ZWZlbnNlIGRlIG51bGxhcmcgKi8KLSAgICAgIHJldHVybigtMyk7Ci0gICAgYzEgPSAqY21kOwkJ CQkvKiBGaXJzdCBjaGFyYWN0ZXIgKi8KLSAgICBpZiAoIWMxKQkJCQkvKiBNYWtlIHN1cmUgdGhl cmUgaXMgb25lICovCi0gICAgICByZXR1cm4oLTMpOwotICAgIGlmIChpc3VwcGVyKGMxKSkJCQkv KiBJZiBsZXR0ZXIgbWFrZSBpdCBsb3dlcmNhc2UgKi8KLSAgICAgIGMxID0gdG9sb3dlcihjMSk7 Ci0KLSNpZmRlZiBVU0VfTFVDQUNIRQkJCS8qIGxvb2t1cCgpIGNhY2hlICovCi0gICAgbSA9IGx1 c2l6ZTsKLSAgICBsdWNhbGxzKys7CQkJCS8qIENvdW50IHRoaXMgbG9va3VwKCkgY2FsbCAqLwot ICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHsJCS8qIExvb3AgdGhydSBjYWNoZSAqLwotCWlm ICgqKGx1Y21kW2ldKSA9PSBjMSkgewkvKiBTYW1lIGFzIDFzdCBjaGFyIG9mIHNlYXJjaCBpdGVt PyAqLwotCSAgICBpZiAobHV0YWJbaV0gPT0gdGFibGUpIHsJLyogWWVzIC0gc2FtZSB0YWJsZSB0 b28/ICovCi0JCWlmICghc3RyY21wKGNtZCxsdWNtZFtpXSkpIHsgLyogWWVzIC0gY29tcGFyZSAq LwotCQkgICAgaWYgKHgpICp4ID0gbHVpZHhbaV07ICAgIC8qIE1hdGNoIC0gcmV0dXJuIGluZGV4 ICovCi0JCSAgICBsdWhpdHMrKzsgICAgICAgICAgICAgICAgLyogQ291bnQgY2FjaGUgaGl0ICov Ci0JCSAgICByZXR1cm4obHV2YWxbaV0pOyAgICAgICAgLyogUmV0dXJuIGFzc29jaWF0ZWQgdmFs dWUgKi8KLQkJfQotCSAgICB9Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLwot Ci0vKiBOb3QgbnVsbCwgbm90IGluIGNhY2hlLCBsb29rIGl0IHVwICovCi0KLSAgICBzID0gY21k OwotICAgIHdoaWxlICgqcysrKSBjbWRsZW4rKzsJCS8qIExlbmd0aCBvZiB0YXJnZXQgKi8KLS8q Ci0gIFF1aWNrIGJpbmFyeSBzZWFyY2ggdG8gZmluZCBsYXN0IHRhYmxlIGVudHJ5IHdob3NlIGZp cnN0IGNoYXJhY3RlciBpcwotICBsZXhpY2FsbHkgbGVzcyB0aGFuIHRoZSBmaXJzdCBjaGFyYWN0 ZXIgb2YgdGhlIHNlYXJjaCBvYmplY3QuICBUaGlzIGlzCi0gIHRoZSBzdGFydGluZyBwb2ludCBv ZiB0aGUgbmV4dCBsb29wLCB3aGljaCBtdXN0IGdvIGluIHNlcXVlbmNlIHNpbmNlIGl0Ci0gIGNv bXBhcmVzIGFkamFjZW50IHRhYmxlIGVudHJpZXMuCi0qLwotICAgIGlmIChuIDwgNSkgewkJCS8q IE5vdCB3b3J0aCBpdCBmb3Igc21hbGwgdGFibGVzICovCi0JaSA9IDA7Ci0gICAgfSBlbHNlIHsK LQlpbnQgbG8gPSAwOwotCWludCBoaSA9IG47Ci0JaW50IGNvdW50ID0gMDsKLQl3aGlsZSAobG8r MiA8IGhpICYmICsrY291bnQgPCAxMikgewotCSAgICBpID0gbG8gKyAoKGhpIC0gbG8pIC8gMik7 Ci0JICAgIGMgPSAqKHRhYmxlW2ldLmt3ZCk7Ci0JICAgIGlmIChpc3VwcGVyKGMpKSBjID0gdG9s b3dlcihjKTsKLQkgICAgaWYgKGMgPCBjMSkgewotCQlsbyA9IGk7Ci0JICAgIH0gZWxzZSB7Ci0J CWhpID0gaTsKLQkgICAgfQotCX0KLQlpID0gKGMgPCBjMSkgPyBsbysxIDogbG87Ci0jaWZkZWYg VVNFX0xVQ0FDSEUKLQlpZiAoaSA+IDApIHh4aGl0cysrOwotI2VuZGlmIC8qIFVTRV9MVUNBQ0hF ICovCi0gICAgfQotICAgIGZvciAoIDsgaSA8IG4tMTsgaSsrKSB7Ci0jaWZkZWYgVVNFX0xVQ0FD SEUKLQlsdWxvb3ArKzsKLSNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLwotCXYgPSAwOwotCWMgPSAq KHRhYmxlW2ldLmt3ZCk7Ci0JaWYgKGMpIHsKLQkgICAgaWYgKGlzdXBwZXIoYykpIGMgPSB0b2xv d2VyKGMpOwotCi0JICAgIC8qIFRoZSBmb2xsb3dpbmcgaXMgYSBiaWcgcGVyZm9ybWFuY2UgYm9v c3RlciBidXQgbWFrZXMgaXQgKi8KLQkgICAgLyogYWJzb2x1dGVseSBlc3NlbnRpYWwgdGhhdCBh bGwgbG9va3VwKCkgdGFibGVzIGFyZSBpbiBvcmRlci4gKi8KLQotCSAgICBpZiAoYyA+IGMxKQkJ CS8qIExlYXZlIGVhcmx5IGlmIHBhc3Qgb3VyIG1hcmsgKi8KLQkgICAgICByZXR1cm4oLTEpOwot Ci0jaWZkZWYgREVCVUcKLQkgICAgLyogVXNlIExPRyBERUJVRyB0byBjaGVjayAqLwotCi0JICAg IGlmIChkZWJsb2cpIHsKLQkJaWYgKGNrc3RyY21wKHRhYmxlW2ldLmt3ZCx0YWJsZVtpKzFdLmt3 ZCwwLDApID4gMCkgewotCQkgICAgcHJpbnRmKCJUQUJMRSBPVVQgT0YgT1JERVIgWyVzXSBbJXNd XG4iLAotCQkJICAgdGFibGVbaV0ua3dkLHRhYmxlW2krMV0ua3dkKTsKLQotCQl9Ci0JICAgIH0K LSNlbmRpZiAvKiBERUJVRyAqLwotCi0JICAgIGlmIChjID09IGMxKSB7Ci0JCWxlbiA9IDA7Ci0J CXMgPSB0YWJsZVtpXS5rd2Q7Ci0JCXdoaWxlICgqcysrKSBsZW4rKzsKLQkJaWYgKChsZW4gPT0g Y21kbGVuICYmICFja3N0cmNtcCh0YWJsZVtpXS5rd2QsY21kLGxlbiwwKSkgfHwKLQkJICAgICgo diA9ICFja3N0cmNtcCh0YWJsZVtpXS5rd2QsY21kLGNtZGxlbiwwKSkgJiYKLQkJICAgICBja3N0 cmNtcCh0YWJsZVtpKzFdLmt3ZCxjbWQsY21kbGVuLDApKSkgewotCQkgICAgaWYgKHgpICp4ID0g aTsKLQkJICAgIHJldHVybih0YWJsZVtpXS5rd3ZhbCk7Ci0JCX0KLQkgICAgfSBlbHNlIHYgPSAw OwotCX0KLSAgICAgICAgaWYgKHYpIHsJCQkvKiBBbWJpZ3VvdXMgKi8KLQkgICAgaWYgKHgpICp4 ID0gaTsJCS8qIFNldCBpbmRleCBvZiBmaXJzdCBtYXRjaCAqLwotCSAgICByZXR1cm4oLTIpOwot CX0KLSAgICB9Ci0KLS8qIExhc3QgKG9yIG9ubHkpIGVsZW1lbnQgKi8KLQotICAgIGlmICghY2tz dHJjbXAodGFibGVbbi0xXS5rd2QsY21kLGNtZGxlbiwwKSkgewotICAgICAgICBpZiAoeCkgKngg PSBuLTE7Ci0JLyogZGVidWcoRjExMSwibG9va3VwIix0YWJsZVtpXS5rd2QsdGFibGUpOyAqLwot ICAgICAgICByZXR1cm4odGFibGVbbi0xXS5rd3ZhbCk7Ci0gICAgfSBlbHNlIHJldHVybigtMSk7 Ci19Ci0KLS8qCi0gIHggbCBvIG8gayB1IHAKLQotICBMaWtlIGxvb2t1cCwgYnV0IHJlcXVpcmVz IGEgZnVsbCAoYnV0IGNhc2UtaW5kZXBlbmRlbnQpIG1hdGNoCi0gIGFuZCBkb2VzIE5PVCByZXF1 aXJlIHRoZSB0YWJsZSB0byBiZSBpbiBvcmRlci4KLSovCi1pbnQKLXhsb29rdXAodGFibGUsY21k LG4seCkgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBjaGFyICpjbWQ7IGludCBuLCAqeDsgewotICAg IHJlZ2lzdGVyIGludCBpOwotICAgIGludCBsZW4sIGNtZGxlbiwgb25lID0gMDsKLSAgICByZWdp c3RlciBjaGFyIGMsIGMyLCAqIHMsICogczI7Ci0KLSAgICBpZiAoIWNtZCkgY21kID0gIiI7CQkJ LyogQ2hlY2sgYXJncyAqLwotICAgIGlmICghKmNtZCB8fCBuIDwgMSkgcmV0dXJuKC0zKTsKLQot ICAgIGMgPSAqY21kOwkJCQkvKiBGaXJzdCBjaGFyIG9mIHN0cmluZyB0byBsb29rIHVwICovCi0g ICAgaWYgKCEqKGNtZCsxKSkgewkJCS8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIDEtY2hhciBuYW1l cyAqLwotCWNtZGxlbiA9IDE7Ci0JaWYgKGlzdXBwZXIoYykpCi0JICBjID0gdG9sb3dlcihjKTsK LQlvbmUgPSAxOwotICAgIH0gZWxzZSB7Ci0JY21kbGVuID0gMDsKLQlzID0gY21kOwotCXdoaWxl ICgqcysrKSBjbWRsZW4rKzsKLQljID0gKmNtZDsKLQlpZiAoaXN1cHBlcihjKSkKLQkgIGMgPSB0 b2xvd2VyKGMpOwotICAgIH0KLSAgICBpZiAoY21kbGVuIDwgMSkKLSAgICAgIHJldHVybigtMyk7 Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JcyA9IHRhYmxlW2ldLmt3ZDsJCS8q IFRoaXMgZW50cnkgKi8KLQlpZiAoIXMpIHMgPSAiIjsKLQlpZiAoISpzKSBjb250aW51ZTsJCS8q IEVtcHR5IHRhYmxlIGVudHJ5ICovCi0JYzIgPSAqczsKLQlpZiAoaXN1cHBlcihjMikpIGMyID0g dG9sb3dlcihjMik7Ci0JaWYgKGMgIT0gYzIpIGNvbnRpbnVlOwkJLyogRmlyc3QgY2hhciBkb2Vz bid0IG1hdGNoICovCi0JaWYgKG9uZSkgewkJCS8qIE5hbWUgaXMgb25lIGNoYXIgbG9uZyAqLwot CSAgICBpZiAoISoocysxKSkgewotCQlpZiAoeCkgKnggPSBpOwotICAgICAgICAgICAgICAgICpj bWQgPSBjOyAKLQkJcmV0dXJuKHRhYmxlW2ldLmt3dmFsKTsJLyogU28gaXMgdGFibGUgZW50cnkg Ki8KLQkgICAgfQotCX0gZWxzZSB7CQkJLyogT3RoZXJ3aXNlIGRvIHN0cmluZyBjb21wYXJpc29u ICovCi0JICAgIHMyID0gczsKLQkgICAgbGVuID0gMDsKLQkgICAgd2hpbGUgKCpzMisrKSBsZW4r KzsKLQkgICAgaWYgKGxlbiA9PSBjbWRsZW4gJiYgIWNrc3RyY21wKHMsY21kLC0xLDApKSB7Ci0J CWlmICh4KSAqeCA9IGk7Ci0JCXJldHVybih0YWJsZVtpXS5rd3ZhbCk7Ci0JICAgIH0KLQl9Ci0g ICAgfQotICAgIHJldHVybigtMSk7Ci19Ci0KLS8qIFJldmVyc2UgbG9va3VwICovCi0KLWNoYXIg Kgotcmxvb2t1cCh0YWJsZSxuLHgpIHN0cnVjdCBrZXl0YWIgdGFibGVbXTsgaW50IG4sIHg7IHsK LSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIGlmICh0 YWJsZVtpXS5rd3ZhbCA9PSB4KQotCSAgcmV0dXJuKHRhYmxlW2ldLmt3ZCk7Ci0gICAgfQotICAg IHJldHVybihOVUxMKTsKLX0KLQotI2lmbmRlZiBOT0lDUAotaW50Ci1jbWRzcXVvKHgpIGludCB4 OyB7Ci0gICAgcXVvdGluZyA9IHg7Ci0gICAgcmV0dXJuKDEpOwotfQotCi1pbnQKLWNtZGdxdW8o KSB7Ci0gICAgcmV0dXJuKHF1b3RpbmcpOwotfQotI2VuZGlmIC8qIE5PSUNQICovCgpkaWZmIC0t Z2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VjbWQuaCBiL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1Y21kLmgKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDdjZDRjZWQuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VjbWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxMiAr MCwwIEBACi0vKiAgQyBLIFUgQyBNIEQgLiBIICAtLSAgSGVhZGVyIGZpbGUgZm9yIFVuaXggY21k IHBhY2thZ2UgICovCi0KLS8qCi0gIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlh LmVkdT4KLSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBLZXJtaXQgUHJvamVjdCwgTmV3IFlvcmsgQ2l0 eS4KLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDksCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1i aWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJl c2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNv cHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBl cm1pc3Npb25zLgotKi8KLQotI2lmbmRlZiBDS1VDTURfSAotI2RlZmluZSBDS1VDTURfSAotCi0v KiBDb21tYW5kIHJlY2FsbCAqLwotCi0jaWZkZWYgcGRwMTEJCQkJLyogTm90IGVub3VnaCByb29t IGZvciB0aGlzICovCi0jaWZuZGVmIE5PUkVDQUxMCi0jZGVmaW5lIE5PUkVDQUxMCi0jZW5kaWYg LyogTk9SRUNBTEwgKi8KLSNlbmRpZiAvKiBwZHAxMSAqLwotCi0jaWZkZWYgRFlOQU1JQwkJCQkv KiBEeW5hbWljIGNvbW1hbmQgYnVmZmVycyAqLwotLyoKLSAgVXNlIG1hbGxvYygpIHRvIGFsbG9j YXRlIHRoZSBtYW55IGNvbW1hbmQtcmVsYXRlZCBidWZmZXJzIGluIGNrdWNtZC5jLgotKi8KLSNp Zm5kZWYgRENNREJVRgotI2lmbmRlZiBOT1JFQ0FMTAotI2RlZmluZSBOT1JFQ0FMTAotI2VuZGlm IC8qIE5PUkVDQUxMICovCi0jZW5kaWYgLyogRENNREJVRiAqLwotCi0jaWZuZGVmIE5PUkVDQUxM Ci0jZGVmaW5lIENLX1JFQ0FMTAotI2Vsc2UKLSNpZmRlZiBDS19SRUNBTEwKLSN1bmRlZiBDS19S RUNBTEwKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSNlbmRpZiAvKiBOT1JFQ0FMTCAqLwotI2Vs c2UKLSNpZm5kZWYgTk9SRUNBTEwKLSNkZWZpbmUgTk9SRUNBTEwKLSNlbmRpZiAvKiAgTk9SRUNB TEwgKi8KLSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSNpZmRlZiBOT1JFQ0FMTAotI2lmZGVmIENL X1JFQ0FMTAotI3VuZGVmIENLX1JFQ0FMTAotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotI2VuZGlm IC8qIE5PUkVDQUxMICovCi0KLSNpZmRlZiBOT1JFQ0FMTAotI2lmbmRlZiBOT0FSUk9XS0VZUwot I2RlZmluZSBOT0FSUk9XS0VZUwotI2VuZGlmIC8qIE5PQVJST1dLRVlTICovCi0jZW5kaWYgLyog Tk9SRUNBTEwgKi8KLQotLyogU3BlY2lhbCBnZXRjaGFycyAqLwotCi0jaWZkZWYgVk1TCi0jaWZk ZWYgZ2V0Y2hhcgkJCQkvKiBUaGlzIGlzIGZvciBWTVMgR0NDICovCi0jdW5kZWYgZ2V0Y2hhcgot I2VuZGlmIC8qIGdldGNoYXIgKi8KLSNkZWZpbmUgZ2V0Y2hhcigpICAgdm1zX2dldGNoYXIoKQot aW50IHZtc19nZXRjaGFyKHZvaWQpOwotI2VuZGlmIC8qIFZNUyAqLwotCi0jaWZkZWYgYWVnaXMK LSN1bmRlZiBnZXRjaGFyCi0jZGVmaW5lIGdldGNoYXIoKSAgIGNvbmluYygwKQotI2VuZGlmIC8q IGFlZ2lzICovCi0KLSNpZmRlZiBBTUlHQQotI3VuZGVmIGdldGNoYXIKLSNkZWZpbmUgZ2V0Y2hh cigpIGNvbmluYygwKQotI2VuZGlmIC8qIEFNSUdBICovCi0KLSNpZmRlZiBQbGFuOQotI3VuZGVm IGdldGNoYXIKLSNkZWZpbmUgZ2V0Y2hhcigpIGNvbmluYygwKQotI3VuZGVmIHB1dGNoYXIKLSNk ZWZpbmUgcHV0Y2hhcihjKSBjb25vYyhjKQotI3VuZGVmIHByaW50ZgotI2RlZmluZSBwcmludGYg Y29ucHJpbnQKLSNlbmRpZiAvKiBQbGFuOSAqLwotCi0vKiBTaXplcyBvZiB0aGluZ3MgKi8KLQot I2lmbmRlZiBDTURERVAKLSNpZmRlZiBCSUdCVUZPSwotI2RlZmluZSBDTURERVAgIDY0CQkJLyog TWF4aW11bSBjb21tYW5kIHJlY3Vyc2lvbiBkZXB0aCAqLwotI2Vsc2UKLSNkZWZpbmUgQ01EREVQ ICAyMAotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0jZW5kaWYgLyogQ01EREVQICovCi0jZGVmaW5l IEhMUExXICAgNzgJCQkvKiBXaWR0aCBvZiA/LWhlbHAgbGluZSAqLwotI2RlZmluZSBITFBDVyAg IDE5CQkJLyogV2lkdGggb2YgPy1oZWxwIGNvbHVtbiAqLwotI2RlZmluZSBITFBCTCAgMTAwCQkJ LyogSGVscCBzdHJpbmcgYnVmZmVyIGxlbmd0aCAqLwotI2lmZGVmIEJJR0JVRk9LCi0jZGVmaW5l IEFUTUJMIDEwMjM4CQkJLyogQ29tbWFuZCBhdG9tIGJ1ZmZlciBsZW5ndGgqLwotI2Vsc2UKLSNp ZmRlZiBOT1NQTAotI2RlZmluZSBBVE1CTCAgMjU2Ci0jZWxzZQotI2RlZmluZSBBVE1CTCAgMTAy NAotI2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLQotI2lmbmRlZiBD TURCTAotI2lmZGVmIE5PU1BMCi0vKiBObyBzY3JpcHQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIHNh dmUgc29tZSBzcGFjZSAqLwotI2RlZmluZSBDTURCTCA2MDgJCQkvKiBDb21tYW5kIGJ1ZmZlciBs ZW5ndGggKi8KLSNlbHNlCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgQ01EQkwgMzI3NjMKLSNl bHNlCi0jZGVmaW5lIENNREJMIDQwOTIKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT1NQ TCAqLwotI2VuZGlmIC8qIENNREJMICovCi0KLS8qIFNwZWNpYWwgY2hhcmFjdGVycyAqLwotCi0j ZGVmaW5lIFJESVMgMDAyMgkJCS8qIFJlZGlzcGxheSAgICheUikgKi8KLSNkZWZpbmUgTERFTCAw MDI1CQkJLyogRGVsZXRlIGxpbmUgKF5VKSAqLwotI2RlZmluZSBXREVMIDAwMjcJCQkvKiBEZWxl dGUgd29yZCAoXlcpICovCi0jaWZkZWYgQ0tfUkVDQUxMCi0jZGVmaW5lIENfVVAgMDAyMAkJCS8q IEdvIFVwIGluIHJlY2FsbCBidWZmZXIgKF5QKSAqLwotI2RlZmluZSBDX1VQMiAwMDAyCQkJLyog QWx0ZXJuYXRlIEdvIFVwICheQikgZm9yIFZNUyAqLwotI2RlZmluZSBDX0ROIDAwMTYJCQkvKiBH byBEb3duIGluIHJlY2FsbCBidWZmZXIgKF5OKSAqLwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwot Ci0vKiBLZXl3b3JkIGZsYWdzIChiaXRzLCBwb3dlcnMgb2YgMikgKi8KLQotI2RlZmluZSBDTV9J TlYgMQkJCS8qIEludmlzaWJsZSBrZXl3b3JkICovCi0jZGVmaW5lIENNX0FCUiAyCQkJLyogQWJi cmV2aWF0aW9uIGZvciBhbm90aGVyIGtleXdvcmQgKi8KLSNkZWZpbmUgQ01fSExQIDQJCQkvKiBI ZWxwLW9ubHkga2V5d29yZCAqLwotI2RlZmluZSBDTV9BUkcgOAkJCS8qIEFuIGFyZ3VtZW50IGlz IHJlcXVpcmVkICovCi0jZGVmaW5lIENNX05PUiAxNgkJCS8qIE5vIHJlY2FsbCBmb3IgdGhpcyBj b21tYW5kICovCi0jZGVmaW5lIENNX1BSRSAzMgkJCS8qIExvbmctZm9ybSBjbWRsaW5lIGFyZyBm b3IgcHJlc2NhbiAqLwotI2RlZmluZSBDTV9QU0ggNjQJCQkvKiBDb21tYW5kIGRpc2FibGVkIGlm IG5vcHVzaCAqLwotI2RlZmluZSBDTV9MT0MgMTI4CQkJLyogQ29tbWFuZCBkaXNhYmxlZCBpZiBu b2xvY2FsICovCi0KLS8qCi0gIEEgbG9uZy1mb3JtIGNvbW1hbmQgbGluZSBvcHRpb24gaXMgYSBr ZXl3b3JkIHVzaW5nIHRoZSByZWd1bGFyIHN0cnVjdCBrZXl0YWIKLSAgYW5kIGxvb2t1cCBtZWNo YW5pc21zLiAgRmxhZ3MgdGhhdCBtYWtlIHNlbnNlIGluIHRoaXMgY29udGV4dCBhcmUgQ01fQVJH LAotICBpbmRpY2F0aW5nIHRoaXMgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IChvcGVyYW5k KSwgYW5kIENNX1BSRSwgd2hpY2gKLSAgbWVhbnMgdGhpcyBvcHRpb24gbXVzdCBiZSBwcm9jZXNz ZWQgYmVmb3JlIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlLiAgVGhlCi0gIGFic2VuY2Ugb2YgQ01f UFJFIG1lYW5zIHRoZSBvcHRpb24gaXMgdG8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZQotICBpbml0 aWFsaXphdGlvbiBmaWxlIGluIHRoZSBub3JtYWwgbWFubmVyLgotKi8KLQotLyogVG9rZW4gZmxh Z3MgKG51bWJlcnMpICovCi0KLSNkZWZpbmUgQ01UX0NPTSAwCQkJLyogQ29tbWVudCAoOyBvciAj KSAqLwotI2RlZmluZSBDTVRfU0hFIDEJCQkvKiBTaGVsbCBlc2NhcGUgKCEpICovCi0jZGVmaW5l IENNVF9MQkwgMgkJCS8qIExhYmVsICg6KSAqLwotI2RlZmluZSBDTVRfRklMIDMJCQkvKiBJbmRp cmVjdCBmaWxlc3BlYyAoQCkgKG5vdCB1c2VkKSAqLwotCi0vKiBQYXRoIHNlcGFyYXRvciBmb3Ig cGF0aCBzZWFyY2hlcyAqLwotCi0jaWZkZWYgT1MyCi0jZGVmaW5lIFBBVEhTRVAgJzsnCi0jZWxz ZQotI2lmZGVmIFVOSVgKLSNkZWZpbmUgUEFUSFNFUCAnOicKLSNlbHNlCi0jZGVmaW5lIFBBVEhT RVAgJywnCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIENL X0tFWVRBQgotI2RlZmluZSBDS19LRVlUQUIKLQotLyogS2V5d29yZCBUYWJsZSBUZW1wbGF0ZSBw ZXJoYXBzIGFscmVhZHkgZGVmaW5lZCBpbiBja2NkZWIuaCAqLwotCi1zdHJ1Y3Qga2V5dGFiIHsJ CQkJLyogS2V5d29yZCB0YWJsZSAqLwotICAgIGNoYXIgKmt3ZDsJCQkJLyogUG9pbnRlciB0byBr ZXl3b3JkIHN0cmluZyAqLwotICAgIGludCBrd3ZhbDsJCQkJLyogQXNzb2NpYXRlZCB2YWx1ZSAq LwotICAgIGludCBmbGdzOwkJCQkvKiBGbGFncyAoYXMgZGVmaW5lZCBhYm92ZSkgKi8KLX07Ci0j ZW5kaWYgLyogQ0tfS0VZVEFCICovCi0KLS8qIFN0cmluZyBwcmVwcm9jZXNzaW5nIGZ1bmN0aW9u ICovCi0KLSNpZmRlZiBDS19BTlNJQwkJCQkvKiBBTlNJIEMgKi8KLSNpZmRlZiBNX1NZU1YJCQkJ LyogU0NPIE1pY3Jvc29mdCBDIHdhbnRzIG5vIGFyZ3MgKi8KLXR5cGVkZWYgaW50ICgqeHhfc3Ry cCkoKTsKLSNlbHNlCi10eXBlZGVmIGludCAoKnh4X3N0cnApKGNoYXIgKiwgY2hhciAqKiwgaW50 ICopOwotI2VuZGlmIC8qIE1fU1lTViAqLwotI2Vsc2UJCQkJCS8qIE5vdCBBTlNJIEMgKi8KLXR5 cGVkZWYgaW50ICgqeHhfc3RycCkoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotCi0vKiBGTERE QiBzdHJ1Y3QgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgRkRCIHsKLSAgICBpbnQgZmNvZGU7CQkJCS8q IEZ1bmN0aW9uIGNvZGUgKi8KLSAgICBjaGFyICogaGxwbXNnOwkJCS8qIEhlbHAgbWVzc2FnZSAq LwotICAgIGNoYXIgKiBkZmx0OwkJCS8qIERlZmF1bHQgKi8KLSAgICBjaGFyICogc2RhdGE7CQkJ LyogQWRkaXRpb25hbCBzdHJpbmcgZGF0YSAqLwotICAgIGludCBuZGF0YTE7CQkJCS8qIEFkZGl0 aW9uYWwgbnVtZXJpYyBkYXRhIDEgKi8KLSAgICBpbnQgbmRhdGEyOwkJCQkvKiBBZGRpdGlvbmFs IG51bWVyaWMgZGF0YSAyICovCi0gICAgeHhfc3RycCBzcGY7CQkJLyogU3RyaW5nIHByb2Nlc3Np bmcgZnVuY3Rpb24gKi8KLSAgICBzdHJ1Y3Qga2V5dGFiICoga3dkdGJsOwkJLyogS2V5d29yZCB0 YWJsZSAqLwotICAgIHN0cnVjdCBGREIgKiBueHRmZGI7CQkvKiBQb2ludGVyIHRvIG5leHQgYWx0 ZXJuYXRpdmUgKi8KLX0gZmRiOwotCi10eXBlZGVmIHN0cnVjdCBPRkRCIHsKLSAgICBzdHJ1Y3Qg RkRCICogZmRiYWRkcjsJCS8qIEFkZHJlc3Mgb2Ygc3VjY2VlZGluZyBGREIgc3RydWN0ICovCi0g ICAgaW50IGZjb2RlOwkJCQkvKiBGdW5jdGlvbiBjb2RlICovCi0gICAgY2hhciAqIHNyZXN1bHQ7 CQkJLyogU3RyaW5nIHJlc3VsdCAqLwotICAgIGludCBucmVzdWx0OwkJCS8qIEludGVnZXIgcmVz dWx0ICovCi0gICAgaW50IGtmbGFnczsJCQkJLyogS2V5d29yZCBmbGFncyBpZiBhbnkgKi8KLSAg ICBDS19PRkZfVCB3cmVzdWx0OwkJCS8qIExvbmcgaW50ZWdlciAoIndpZGUiKSByZXN1bHQgKi8K LX0gb2ZkYjsKLQotI2lmbmRlZiBDS1VDTURfQwotZXh0ZXJuIHN0cnVjdCBPRkRCIGNtcmVzdWx0 OwotI2VuZGlmIC8qIENLVUNNRF9DICovCi0KLS8qIENvZGVzIGZvciBwcmltYXJ5IHBhcnNpbmcg ZnVuY3Rpb24gICovCi0KLSNkZWZpbmUgX0NNTlVNIDAJCQkvKiBOdW1iZXIgKi8KLSNkZWZpbmUg X0NNT0ZJIDEJCQkvKiBPdXRwdXQgZmlsZSAqLwotI2RlZmluZSBfQ01JRkkgMgkJCS8qIElucHV0 IGZpbGUgKi8KLSNkZWZpbmUgX0NNRkxEIDMJCQkvKiBBcmJpdHJhcnkgZmllbGQgKi8KLSNkZWZp bmUgX0NNVFhUIDQJCQkvKiBUZXh0IHN0cmluZyAqLwotI2RlZmluZSBfQ01LRVkgNQkJCS8qIEtl eXdvcmQgKi8KLSNkZWZpbmUgX0NNQ0ZNIDYJCQkvKiBDb25maXJtYXRpb24gKi8KLSNkZWZpbmUg X0NNREFUIDcJCQkvKiBEYXRlL3RpbWUgKi8KLSNkZWZpbmUgX0NNTlVXIDgJCQkvKiBXaWRlIHZl cnNpb24gb2YgY21udW0gKi8KLQotLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLwotCi1fUFJPVE9U WVAoIGludCB4eGVzYywgKGNoYXIgKiopICk7Ci1fUFJPVE9UWVAoIGludCBjbXJpbmksIChpbnQp ICk7Ci1fUFJPVE9UWVAoIFZPSUQgY21zZXRwLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBWT0lE IGNtc2F2cCwgKGNoYXIgW10sIGludCkgKTsKLV9QUk9UT1RZUCggY2hhciAqIGNtZ2V0cCwgKHZv aWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgcHJvbXB0LCAoeHhfc3RycCkgKTsKLV9QUk9UT1RZUCgg Vk9JRCBwdXNoY21kLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBWT0lEIGNtcmVzLCAodm9pZCkg KTsKLV9QUk9UT1RZUCggVk9JRCBjbWluaSwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IGNtZ2Jy aywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBjbWdrd2ZsZ3MsICh2b2lkKSApOwotX1BST1RP VFlQKCBpbnQgY21wdXNoLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGNtcG9wLCAodm9pZCkg KTsKLV9QUk9UT1RZUCggVk9JRCB1bnRhYiwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IGNt bnVtLCAoY2hhciAqLCBjaGFyICosIGludCwgaW50ICosIHh4X3N0cnAgKSApOwotX1BST1RPVFlQ KCBpbnQgY21udW13LCAoY2hhciAqLCBjaGFyICosIGludCwgQ0tfT0ZGX1QgKiwgeHhfc3RycCAp ICk7Ci1fUFJPVE9UWVAoIGludCBjbW9maSwgKGNoYXIgKiwgY2hhciAqLCBjaGFyICoqLCB4eF9z dHJwICkgKTsKLV9QUk9UT1RZUCggaW50IGNtaWZpLCAoY2hhciAqLCBjaGFyICosIGNoYXIgKios IGludCAqLCB4eF9zdHJwICkgKTsKLV9QUk9UT1RZUCggaW50IGNtaW9maSwgKGNoYXIgKiwgY2hh ciAqLCBjaGFyICoqLCBpbnQgKiwgeHhfc3RycCApICk7Ci1fUFJPVE9UWVAoIGludCBjbWlmaXAs KGNoYXIgKiwgY2hhciAqLCBjaGFyICoqLCBpbnQgKiwgaW50LCBjaGFyICosIHh4X3N0cnAgKSk7 Ci1fUFJPVE9UWVAoIGludCBjbWlmaTIsKGNoYXIgKixjaGFyICosY2hhciAqKixpbnQgKixpbnQs Y2hhciAqLHh4X3N0cnAsaW50ICkpOwotX1BST1RPVFlQKCBpbnQgY21kaXIsIChjaGFyICosIGNo YXIgKiwgY2hhciAqKiwgeHhfc3RycCApICk7Ci1fUFJPVE9UWVAoIGludCBjbWRpcnAsIChjaGFy ICosIGNoYXIgKiwgY2hhciAqKiwgY2hhciAqLCB4eF9zdHJwICkgKTsKLV9QUk9UT1RZUCggaW50 IGNtZmxkLCAoY2hhciAqLCBjaGFyICosIGNoYXIgKiosIHh4X3N0cnAgKSApOwotX1BST1RPVFlQ KCBpbnQgY210eHQsIChjaGFyICosIGNoYXIgKiwgY2hhciAqKiwgeHhfc3RycCApICk7Ci1fUFJP VE9UWVAoIGludCBjbWtleSwgIChzdHJ1Y3Qga2V5dGFiIFtdLCBpbnQsIGNoYXIgKiwgY2hhciAq LCB4eF9zdHJwKSApOwotX1BST1RPVFlQKCBpbnQgY21rZXl4LCAoc3RydWN0IGtleXRhYiBbXSwg aW50LCBjaGFyICosIGNoYXIgKiwgeHhfc3RycCkgKTsKLV9QUk9UT1RZUCggaW50IGNta2V5Miwo c3RydWN0IGtleXRhYiBbXSxpbnQsY2hhciAqLGNoYXIgKixjaGFyICoseHhfc3RycCxpbnQpKTsK LV9QUk9UT1RZUCggaW50IGNtc3dpLCAgKHN0cnVjdCBrZXl0YWIgW10sIGludCwgY2hhciAqLCBj aGFyICosIHh4X3N0cnApICk7Ci1fUFJPVE9UWVAoIGludCBjbWRhdGUsKGNoYXIgKiwgY2hhciAq LCBjaGFyICoqLCBpbnQsIHh4X3N0cnApICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBjbXBlZWssICh2 b2lkKSApOwotX1BST1RPVFlQKCBpbnQgY21mZGIsIChzdHJ1Y3QgRkRCICopICk7Ci1fUFJPVE9U WVAoIFZPSUQgY21mZGJpLCAoc3RydWN0IEZEQiAqLAotCQkJaW50LCBjaGFyICosIGNoYXIgKiwg Y2hhciAqLCBpbnQsIGludCwgeHhfc3RycCwKLQkJCXN0cnVjdCBrZXl0YWIgKiwgc3RydWN0IEZE QiAqKSApOwotX1BST1RPVFlQKCBpbnQgY2hrdG9rLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBp bnQgY21jZm0sICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgbG9va3VwLCAoc3RydWN0IGtleXRh YiBbXSwgY2hhciAqLCBpbnQsIGludCAqKSApOwotX1BST1RPVFlQKCBWT0lEIGt3ZGhlbHAsIChz dHJ1Y3Qga2V5dGFiW10saW50LGNoYXIgKixjaGFyICosY2hhciAqLGludCxpbnQpICk7Ci1fUFJP VE9UWVAoIGludCB1bmd3b3JkLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCB1bnVuZ3csICh2 b2lkKSApOwotX1BST1RPVFlQKCBpbnQgY21kc3F1bywgKGludCkgKTsKLV9QUk9UT1RZUCggaW50 IGNtZGdxdW8sICh2b2lkKSApOwotX1BST1RPVFlQKCBjaGFyICogY2tjdnRkYXRlLCAoY2hhciAq LCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBjbWRnZXRjLCAoaW50KSk7Ci0jaWZuZGVmIE5PQVJS T1dLRVlTCi1fUFJPVE9UWVAoIGludCBjbWRjb25jaGssICh2b2lkKSApOwotI2VuZGlmIC8qIE5P QVJST1dLRVlTICovCi0KLSNpZmRlZiBDS19SRUNBTEwKLV9QUk9UT1RZUCggY2hhciAqIGNtZ2V0 Y21kLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBWT0lEIGFkZGNtZCwgKGNoYXIgKikgKTsKLV9Q Uk9UT1RZUCggVk9JRCBjbWFkZG5leHQsICh2b2lkKSApOwotI2VuZGlmIC8qIENLX1JFQ0FMTCAq LwotX1BST1RPVFlQKCBjaGFyICogY21jdnRkYXRlLCAoY2hhciAqLCBpbnQpICk7Ci1fUFJPVE9U WVAoIGNoYXIgKiBjbWRpZmZkYXRlLCAoY2hhciAqLCBjaGFyICopICk7Ci1fUFJPVE9UWVAoIGNo YXIgKiBjbWRlbHRhLCAoaW50LAotCQkJICAgIGludCxpbnQsaW50LGludCxpbnQsaW50LGludCxp bnQsaW50LGludCxpbnQsaW50ICkpOwotX1BST1RPVFlQKCBjaGFyICogc2h1ZmZsZWRhdGUsIChj aGFyICosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IGZpbGhlbHAsIChpbnQsIGNoYXIgKiwgY2hh ciAqLCBpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IHhmaWxoZWxwLCAoaW50LCBjaGFyICos IGNoYXIgKiwgaW50LCBpbnQsCi0JCQkgIGludCwKLQkJCSAgY2hhciAqLCBjaGFyICosIGNoYXIg KiwgY2hhciAqLAotCQkJICBDS19PRkZfVCwgQ0tfT0ZGX1QsCi0JCQkgIGludCwgaW50LAotCQkJ ICBjaGFyICoqKSApOwotX1BST1RPVFlQKCBpbnQgZGVsdGEyc2VjLCAoY2hhciAqLCBsb25nICop ICk7Ci0KLSNpZmRlZiBEQ01EQlVGCi1fUFJPVE9UWVAoIGludCBjbXNldHVwLCAodm9pZCkgKTsK LSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLSNlbmRpZiAvKiBDS1VDTURfSCAqLwotCi0vKiBFbmQg b2YgY2t1Y21kLmggKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL2NrdWNucy5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMw Mi9ja3VjbnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM3MTk3Yy4uMDAwMDAw MAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWNucy5jCisr KyAvZGV2L251bGwKQEAgLTEsMjcyMCArMCwwIEBACi0jaW5jbHVkZSAiY2tjc3ltLmgiCi1jaGFy ICpjb25udiA9ICJDT05ORUNUIENvbW1hbmQgZm9yIFVOSVg6c2VsZWN0KCksIDkuMC4xMzksIDEg TWFyIDIwMTAiOwotCi0vKiAgQyBLIFUgQyBOIFMgIC0tICBUZXJtaW5hbCBjb25uZWN0aW9uIHRv IHJlbW90ZSBzeXN0ZW0sIGZvciBVTklYICAqLwotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6 IDxmZGNAY29sdW1iaWEuZWR1PiwKLSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZv cm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwg MjAxMCwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9m IE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENP UFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5j IG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0qLwotCi0vKgotICBUaGlz IHZlcnNpb24gb2YgdGhlIFVOSVggQ09OTkVDVCBtb2R1bGUgdXNlcyBzZWxlY3QoKSwgd2hpY2gg aXMgcmVxdWlyZWQgZm9yCi0gIEtlcmJlcm9zIGVuY3J5cHRpb24uICBUaHVzIGl0IGNhbiBiZSB1 c2VkIG9ubHkgb24gVU5JWCBzeXN0ZW1zIHRoYXQgc3VwcG9ydAotICBzZWxlY3QoKSBvbiBib3Ro IFRDUC9JUCBhbmQgc2VyaWFsIGNvbm5lY3Rpb25zLiAgQSBzZXBhcmF0ZSBtb2R1bGUgdGhhdCB1 c2VzCi0gIGEgY29tcGxldGVseSBwb3J0YWJsZSBmb3JrKCkgc3RydWN0dXJlIGNhbiBiZSB1c2Vk IG9uIHN5c3RlbXMgd2hlcmUgc2VsZWN0KCkKLSAgaXMgbm90IGF2YWlsYWJsZSBvciBkb2VzIG5v dCB3b3JrIGFzIHJlcXVpcmVkLgotKi8KLQotI2luY2x1ZGUgImNrY2RlYi5oIgkJCS8qIENvbW1v biB0aGluZ3MgZmlyc3QgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0KLSNpZmRlZiBPU0YxMwotI2lm ZGVmIENLX0FOU0lDCi0jaWZkZWYgX05PX1BST1RPCi0jdW5kZWYgX05PX1BST1RPCi0jZW5kaWYg LyogX05PX1BST1RPICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNlbmRpZiAvKiBPU0YxMyAq LwotCi0jaW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBFcnJvciBudW1iZXJzICovCi0KLSNpZm5kZWYg Tk9USU1FSAotI2luY2x1ZGUgPHRpbWUuaD4JCQkvKiBGb3IgRkRfYmxhaCAqLwotI2lmZGVmIFNZ U1RJTUVICQkJCS8qIChJUklYIDUuMykgKi8KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlm IC8qIFNZU1RJTUVIICovCi0jZW5kaWYgLyogTk9USU1FSCAqLwotCi0jaWZkZWYgQlNENDJIQUNL CQkJLyogV2h5IGlzIHRoaXMgbmVjZXNzYXJ5PyAqLwotI2lmbmRlZiBEQ0xUSU1FVkFMCi0jZGVm aW5lIERDTFRJTUVWQUwKLSNlbmRpZiAvKiBEQ0xUSU1FVkFMICovCi0jZW5kaWYgLyogQlNENDJI QUNLICovCi0KLS8qIEtlcm1pdC1zcGVjaWZpYyBpbmNsdWRlcyAqLwotCi0jaW5jbHVkZSAiY2tj YXNjLmgiCQkJLyogQVNDSUkgY2hhcmFjdGVycyAqLwotI2luY2x1ZGUgImNrY2tlci5oIgkJCS8q IEtlcm1pdCB0aGluZ3MgKi8KLSNpbmNsdWRlICJja3VjbWQuaCIJCQkvKiBGb3IgeHhlc2MoKSBw cm90b3R5cGUgKi8KLSNpbmNsdWRlICJja2NuZXQuaCIJCQkvKiBOZXR3b3JrIHN5bWJvbHMgKi8K LSNpZm5kZWYgTk9DU0VUUwotI2luY2x1ZGUgImNrY3hsYS5oIgkJCS8qIENoYXJhY3RlciBzZXQg dHJhbnNsYXRpb24gKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZmRlZiBCRUJPWAotI2lu Y2x1ZGUgPGtlcm5lbC9PUy5oPgotI2luY2x1ZGUgPHNvY2tldC5oPgotI2luY2x1ZGUgPHN0ZGlv Lmg+Ci0jZW5kaWYgLyogQkVCT1ggKi8KLQotI2luY2x1ZGUgPHNpZ25hbC5oPgkJCS8qIFNpZ25h bHMgKi8KLQotLyogQWxsIHRoZSBmb2xsb3dpbmcgaXMgZm9yIHNlbGVjdCgpLi4uICovCi0KLSNp ZmRlZiBDS1RJRExFCQkJCS8qIFRpbWVvdXRzIG9ubHkgZm9yIFNFVCBURVJNIElETEUgKi8KLQot I2lmbmRlZiBEQ0xUSU1FVkFMCi0jaWZkZWYgVU5JWFdBUkUKLSNpZm5kZWYgVVc3Ci0jZGVmaW5l IERDTFRJTUVWQUwKLSNlbmRpZiAvKiBVVzcgKi8KLSNlbmRpZiAvKiBVTklYV0FSRSAqLwotI2Vu ZGlmIC8qIERDTFRJTUVWQUwgKi8KLQotI2lmZGVmIERDTFRJTUVWQUwJCQkvKiBEZWNsYXJlIHRp bWV2YWwgb3Vyc2VsdmVzICovCi1zdHJ1Y3QgdGltZXZhbCB7Ci0gICAgbG9uZyB0dl9zZWM7Ci0g ICAgbG9uZyB0dl91c2VjOwotfTsKLSNlbHNlICAvKiAhRENMVElNRVZBTCAqLwotI2lmbmRlZiBO T1NZU1RJTUVCSAotI2lmZGVmIFNZU1RJTUVCSAotI2luY2x1ZGUgPHN5cy90aW1lYi5oPgotI2Vu ZGlmIC8qIFNZU1RJTUVCSCAqLwotI2VuZGlmIC8qIE5PU1lTVElNRUJIICovCi0jZW5kaWYgLyog RENMVElNRVZBTCAqLwotI2VuZGlmIC8qIENLVElETEUgKi8KLQotI2lmbmRlZiBTQ09fT1NSNTA0 Ci0jaWZkZWYgU0VMRUNUX0gKLSNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+Ci0jZW5kaWYgLyogU0VM RUNUX0ggKi8KLSNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCi0KLSNpZm5kZWYgRkRfU0VUU0laRQot I2lmZGVmIENLX0ZPUldBUkRfWAotI2RlZmluZSBGRF9TRVRTSVpFIDI1NgotI2Vsc2UKLSNkZWZp bmUgRkRfU0VUU0laRSAzMgotI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLwotI2VuZGlmIC8qIEZE X1NFVFNJWkUgKi8KLQotI2lmZGVmIEhQVVgKLSNpZm5kZWYgSFBVWDEwCi0jaWZuZGVmIEhQVVgx MTAwCi0vKiBUaGUgdGhyZWUgaW50ZXJpb3IgYXJncyB0byBzZWxlY3QoKSBhcmUgKGludCAqKSBy YXRoZXIgdGhhbiAoZmRfc2V0ICopICovCi0jaWZuZGVmIElOVFNFTEVDVAotI2RlZmluZSBJTlRT RUxFQ1QKLSNlbmRpZiAvKiBJTlRTRUxFQ1QgKi8KLSNlbmRpZiAvKiBIUFVYMTEwMCAqLwotI2Vu ZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlmIC8qIEhQVVggKi8KLQotLyogSW50ZXJuYWwgZnVuY3Rp b24gcHJvdG90eXBlcyAqLwotCi0jaWZkZWYgTkVXRlRQCi0jZW5kaWYgLyogTkVXRlRQICovCi1f UFJPVE9UWVAoIFZPSUQgdHRmbHV4LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBkb2VzYywg KGNoYXIpICk7Ci1fUFJPVE9UWVAoIGludCBoY29ubmUsICh2b2lkKSApOwotI2lmbmRlZiBOT1NI T1cKLV9QUk9UT1RZUCggVk9JRCBzaG9tZG0sICh2b2lkKSApOwotI2VuZGlmIC8qIE5PU0hPVyAq LwotX1BST1RPVFlQKCBzdGF0aWMgaW50IGtiZ2V0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggc3Rh dGljIGludCBja2NwdXRmLCAodm9pZCkgKTsKLQotLyogRXh0ZXJuYWwgdmFyaWFibGVzICovCi0K LWV4dGVybiBzdHJ1Y3QgY2tfcCBwdGFiW107Ci0KLWV4dGVybiBpbnQgbG9jYWwsIGVzY2FwZSwg ZHVwbGV4LCBwYXJpdHksIGZsb3csIHNlc2xvZywgc2Vzc2Z0LCBkZWJzZXMsCi0gbWRtdHlwLCB0 dG5wcm90bywgY21hc2ssIGNtZG1zaywgbmV0d29yaywgbmV0dHlwZSwgc29zaSwgdG5sbSwKLSB4 aXRzdGEsIHdoYXQsIHR0eWZkLCB0dHBpcGUsIHF1aWV0LCBiYWNrZ3JkLCBwZmxhZywgdHRfY3Jk LCB0dF9sZmQsCi0gdG5fbmxtLCB0dGZkZmxnLAotIHR0X2VzY2FwZSwganVzdG9uZSwgY2Fycmll ciwgdHRwdHksIGh3cGFyaXR5OwotCi0jaWZuZGVmIE5PRElBTAotZXh0ZXJuIGludCBkaWFsbWh1 LCBkaWFsc3RhOwotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0jaWZkZWYgQ0tMRUFSTgotZXh0ZXJu IEZJTEUgKiBsZWFybmZwOwotZXh0ZXJuIGludCBsZWFybmluZzsKLXN0YXRpYyBVTE9ORyBsZWFy bnQxOwotc3RhdGljIGNoYXIgbGVhcm5idWZbTEVBUk5CVUZTSVpdID0geyBOVUwsIE5VTCB9Owot c3RhdGljIGludCAgbGVhcm5iYyA9IDA7Ci1zdGF0aWMgaW50ICBsZWFybmJwID0gMDsKLXN0YXRp YyBpbnQgIGxlYXJuc3QgPSAwOwotI2VuZGlmIC8qIENLTEVBUk4gKi8KLQotZXh0ZXJuIGxvbmcg c3BlZWQ7Ci1leHRlcm4gY2hhciB0dG5hbWVbXSwgc2VzZmlsW10sIG15aG9zdFtdLCAqY2NudGFi W107Ci0jaWZkZWYgVE5DT0RFCi1leHRlcm4gaW50IHRuX2JfbmxtLCB0bl9yZW1fZWNobzsKLSNl bmRpZiAvKiBUTkNPREUgKi8KLQotI2lmZGVmIENLX1RSSUdHRVIKLWV4dGVybiBjaGFyICogdHRf dHJpZ2dlcltdLCAqIHRyaWdnZXJ2YWw7Ci0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotCi0jaWZk ZWYgQ0tUSURMRQotZXh0ZXJuIGludCB0dF9pZGxlbGltaXQsIHR0X2lkbGVhY3Q7Ci1leHRlcm4g Y2hhciAqIHR0X2lkbGVzdHI7Ci1zdGF0aWMgaW50IGlkbGVsaW1pdCA9IDA7Ci0jZW5kaWYgLyog Q0tUSURMRSAqLwotZXh0ZXJuIGludCBjeF9zdGF0dXM7CQkJLyogQ09OTkVDVCBzdGF0dXMgY29k ZSAqLwotCi1leHRlcm4gaW50IG5vcHVzaDsKLQotI2lmZGVmIENLX0FQQwotZXh0ZXJuIGludCBh cGNhY3RpdmU7CQkJLyogQXBwbGljYXRpb24gUHJvZ3JhbSBDb21tYW5kIChBUEMpICovCi1leHRl cm4gaW50IGFwY3N0YXR1czsJCQkvKiBpdGVtcyAuLi4gKi8KLXN0YXRpYyBpbnQgYXBjbGVuZ3Ro ID0gMDsKLSNpZmRlZiBEQ01EQlVGCi1leHRlcm4gY2hhciAqYXBjYnVmOwotI2Vsc2UKLWV4dGVy biBjaGFyIGFwY2J1ZltdOwotI2VuZGlmIC8qIERDTURCVUYgKi8KLXN0YXRpYyBpbnQgYXBjYnVm bGVuID0gQVBDQlVGTEVOIC0gMjsKLWV4dGVybiBpbnQgcHJvdG9jb2w7Ci0jZW5kaWYgLyogQ0tf QVBDICovCi0jaWZuZGVmIE5PWEZFUgotZXh0ZXJuIGludCBhdXRvZGw7CQkJLyogQXV0byBkb3du bG9hZCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgQ0tfQVVUT0RMCi1leHRlcm4g Q0hBUiBrc2J1ZltdOwotZXh0ZXJuIENIQVIgc3RjaHI7Ci1leHRlcm4gaW50IGtzdGFydGFjdGl2 ZTsKLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLWV4dGVy biBpbnQgbWVfYXV0aDsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0KLSNpZmRlZiBDS19Y WVoKLSNpZmRlZiBYWVpfSU5URVJOQUwKLXN0YXRpYyBpbnQgem1kbG9rID0gMTsJCQkvKiBabW9k ZW0gYXV0b2Rvd25sb2FkcyBhdmFpbGFibGUgKi8KLSNlbHNlCi1zdGF0aWMgaW50IHptZGxvayA9 IDA7CQkJLyogRGVwZW5kcyBvbiBleHRlcm5hbCBwcm90b2NvbCBkZWYgKi8KLSNlbmRpZiAvKiBY WVpfSU5URVJOQUwgKi8KLSNlbHNlCi1zdGF0aWMgaW50IHptZGxvayA9IDA7CQkJLyogTm90IGF2 YWlsYWJsZSBhdCBhbGwgKi8KLSNlbmRpZiAvKiBDS19YWVogKi8KLQotI2lmbmRlZiBOT1NFVEtF WQkJCS8qIEtleWJvYXJkIG1hcHBpbmcgKi8KLWV4dGVybiBLRVkgKmtleW1hcDsJCQkvKiBTaW5n bGUtY2hhcmFjdGVyIGtleSBtYXAgKi8KLWV4dGVybiBNQUNSTyAqbWFjcm90YWI7CQkJLyogS2V5 IG1hY3JvIHBvaW50ZXIgdGFibGUgKi8KLXN0YXRpYyBNQUNSTyBrbXB0ciA9IE5VTEw7CQkvKiBQ b2ludGVyIHRvIGN1cnJlbnQga2V5IG1hY3JvICovCi0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLQot LyogR2xvYmFsIHZhcmlhYmxlcyBsb2NhbCB0byB0aGlzIG1vZHVsZSAqLwotCi1zdGF0aWMgaW50 Ci0gIGFjdGl2ZSA9IDAsCi0gIHF1aXRub3cgPSAwLAkJCQkvKiA8ZXNjLWNoYXI+USB3YXMgdHlw ZWQgKi8KLSAgZG9oYW5ndXAgPSAwLAkJCQkvKiA8ZXNjLWNoYXI+SCB3YXMgdHlwZWQgKi8KLSAg aW5zaGlmdCA9IDAsCQkJCS8qIFNPL1NJIHNoaWZ0IHN0YXRlcyAqLwotICBvdXRzaGlmdCA9IDA7 Ci0KLXN0YXRpYyBjaGFyIGVjYnVmWzEwXSwgKmVjYnA7CQkvKiBFc2NhcGUgY2hhciBidWZmZXIg JiBwb2ludGVyICovCi0KLSNpZmRlZiBDS19TTUFMTAotI2RlZmluZSBJQlVGTCAxNTM2CQkJLyog SW5wdXQgYnVmZmVyIGxlbmd0aCAqLwotI2Vsc2UKLSNkZWZpbmUgSUJVRkwgNDA5NgotI2VuZGlm IC8qIENLX1NNQUxMICovCi0KLXN0YXRpYyBpbnQgb2JjID0gMDsJCQkvKiBPdXRwdXQgYnVmZmVy IGNvdW50ICovCi0KLSNpZm5kZWYgT1hPUwotI2RlZmluZSBPQlVGTCAxMDI0CQkJLyogT3V0cHV0 IGJ1ZmZlciBsZW5ndGggKi8KLSNlbHNlCi0jZGVmaW5lIE9CVUZMIElCVUZMCi0jZW5kaWYgLyog T1hPUyAqLwotCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgVE1QTEVOIDQwOTYJCQkvKiBUZW1w b3JhcnkgbWVzc2FnZSBidWZmZXIgbGVuZ3RoICovCi0jZWxzZQotI2RlZmluZSBUTVBMRU4gMjAw Ci0jZW5kaWYgLyogQklHQlVGT0sgKi8KLQotI2lmZGVmIERZTkFNSUMKLXN0YXRpYyBjaGFyICpp YnVmID0gTlVMTCwgKm9idWYgPSBOVUxMLCAqdGVtcCA9IE5VTEw7IC8qIEJ1ZmZlcnMgKi8KLSNl bHNlCi1zdGF0aWMgY2hhciBpYnVmW0lCVUZMXSwgb2J1ZltPQlVGTF0sIHRlbXBbVE1QTEVOXTsK LSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSNpZmRlZiBUTkNPREUKLXN0YXRpYyBjaGFyIHRub3B0 WzRdOwotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0jaWZkZWYgRFlOQU1JQwotc3RhdGljIGNoYXIg KmlicDsJCQkvKiBJbnB1dCBidWZmZXIgcG9pbnRlciAqLwotI2Vsc2UKLXN0YXRpYyBjaGFyICpp YnAgPSBpYnVmOwkJLyogSW5wdXQgYnVmZmVyIHBvaW50ZXIgKi8KLSNlbmRpZiAvKkRZTkFNSUMg Ki8KLXN0YXRpYyBpbnQgaWJjID0gMDsJCQkvKiBJbnB1dCBidWZmZXIgY291bnQgKi8KLQotI2lm ZGVmIERZTkFNSUMKLXN0YXRpYyBjaGFyICpvYnA7CQkJLyogT3V0cHV0IGJ1ZmZlciBwb2ludGVy ICovCi0jZWxzZQotc3RhdGljIGNoYXIgKm9icCA9IG9idWY7CQkvKiBPdXRwdXQgYnVmZmVyIHBv aW50ZXIgKi8KLSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLS8qIENoYXJhY3Rlci1zZXQgaXRlbXMg Ki8KLQotc3RhdGljIGludCB1bmljb2RlID0gMDsKLQotI2lmbmRlZiBOT0NTRVRTCi0jaWZkZWYg Q0tfQU5TSUMgLyogQU5TSSBDIHByb3RvdHlwZXMuLi4gKi8KLWV4dGVybiBDSEFSICgqeGxzW01B WFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKENIQVIpOyAvKiBDaGFyYWN0ZXIgc2V0ICovCi1leHRl cm4gQ0hBUiAoKnhscltNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKTsgLyogdHJhbnNs YXRpb24gZnVuY3Rpb25zICovCi1zdGF0aWMgQ0hBUiAoKnN4bykoQ0hBUik7CS8qIExvY2FsIHRy YW5zbGF0aW9uIGZ1bmN0aW9ucyAqLwotc3RhdGljIENIQVIgKCpyeG8pKENIQVIpOwkvKiBmb3Ig b3V0cHV0IChzZW5kaW5nKSB0ZXJtaW5hbCBjaGFycyAqLwotc3RhdGljIENIQVIgKCpzeGkpKENI QVIpOwkvKiBhbmQgZm9yIGlucHV0IChyZWNlaXZpbmcpIHRlcm1pbmFsIGNoYXJzLiAqLwotc3Rh dGljIENIQVIgKCpyeGkpKENIQVIpOwotI2Vsc2UgLyogTm90IEFOU0kgQy4uLiAqLwotZXh0ZXJu IENIQVIgKCp4bHNbTUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSkoKTsJLyogQ2hhcmFjdGVyIHNl dCAqLwotZXh0ZXJuIENIQVIgKCp4bHJbTUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSkoKTsJLyog dHJhbnNsYXRpb24gZnVuY3Rpb25zLiAqLwotc3RhdGljIENIQVIgKCpzeG8pKCk7CQkvKiBMb2Nh bCB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgKi8KLXN0YXRpYyBDSEFSICgqcnhvKSgpOwkJLyogZm9y IG91dHB1dCAoc2VuZGluZykgdGVybWluYWwgY2hhcnMgKi8KLXN0YXRpYyBDSEFSICgqc3hpKSgp OwkJLyogYW5kIGZvciBpbnB1dCAocmVjZWl2aW5nKSB0ZXJtaW5hbCBjaGFycy4gKi8KLXN0YXRp YyBDSEFSICgqcnhpKSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi1leHRlcm4gaW50IGxhbmd1 YWdlOwkJLyogQ3VycmVudCBsYW5ndWFnZS4gKi8KLXN0YXRpYyBpbnQgbGFuZ3N2OwkJLyogRm9y IHJlbWVtYmVyaW5nIGxhbmd1YWdlIHNldHRpbmcuICovCi1leHRlcm4gc3RydWN0IGNzaW5mbyBm Y3NpbmZvW107IC8qIEZpbGUgY2hhcmFjdGVyIHNldCBpbmZvLiAqLwotZXh0ZXJuIGludCB0Y3Ny LCB0Y3NsOwkJLyogVGVybWluYWwgY2hhcmFjdGVyIHNldHMsIHJlbW90ZSAmIGxvY2FsLiAqLwot c3RhdGljIGludCB0Y3M7CQkJLyogSW50ZXJtZWRpYXRlICgidHJhbnNmZXIiKSBjaGFyYWN0ZXIg c2V0LiAqLwotc3RhdGljIGludCB0Y3NzaXplID0gMDsJCS8qIFNpemUgb2YgdGNzICovCi0jaWZk ZWYgVU5JQ09ERQkJCQkvKiBVVEYtOCBzdXBwb3J0ICovCi0jaWZkZWYgQ0tfQU5TSUMKLWV4dGVy biBpbnQgKCp4bF91ZmNbTUFYRkNTRVRTKzFdKShVU0hPUlQpOyAgLyogVW5pY29kZSB0byBGQ1Mg Ki8KLWV4dGVybiBVU0hPUlQgKCp4bF9mY3VbTUFYRkNTRVRTKzFdKShDSEFSKTsgLyogRkNTIHRv IFVuaWNvZGUgKi8KLWV4dGVybiBpbnQgKCp4dWYpKFVTSE9SVCk7CQkvKiBUcmFuc2xhdGlvbiBm dW5jdGlvbiBVQ1MgdG8gRkNTICovCi1leHRlcm4gVVNIT1JUICgqeGZ1KShDSEFSKTsJCS8qIFRy YW5zbGF0aW9uIGZ1bmN0aW9uIEZDUyB0byBVQ1MgKi8KLSNlbHNlCi1leHRlcm4gaW50ICgqeGxf dWZjW01BWEZDU0VUUysxXSkoKTsKLWV4dGVybiBVU0hPUlQgKCp4bF9mY3VbTUFYRkNTRVRTKzFd KSgpOwotZXh0ZXJuIGludCAoKnh1ZikoKTsKLWV4dGVybiBVU0hPUlQgKCp4ZnUpKCk7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0jZW5kaWYgLyogTk9DU0VU UyAqLwotCi1zdGF0aWMgaW50IHByaW50aW5nID0gMDsKLQotLyoKLSAgV2UgZG8gbm90IG5lZWQg dG8gcGFyc2UgYW5kIHJlY29nbml6ZSBlc2NhcGUgc2VxdWVuY2VzIGlmIHdlIGFyZSBiZWluZyBi dWlsdAotICB3aXRob3V0IGNoYXJhY3Rlci1zZXQgc3VwcG9ydCBBTkQgd2l0aG91dCBBUEMgc3Vw cG9ydC4KLSovCi0jaWZkZWYgTk9FU0NTRVEKLSNpZmRlZiBYUFJJTlQKLSN1bmRlZiBYUFJJTlQK LSNlbmRpZiAvKiBYUFJJTlQgKi8KLQotI2Vsc2UgIC8qIE5PRVNDU0VRIG5vdCBkZWZpbmVkIGZy b20gb3V0c2lkZSAqLwotCi0jaWZkZWYgTk9DU0VUUwkJCQkvKiBObyBjaGFyYWN0ZXIgc2V0cyAq LwotI2lmbmRlZiBDS19BUEMJCQkJLyogTm8gQVBDICovCi0jaWZuZGVmIFhQUklOVAkJCQkvKiBO byB0cmFuc3BhcmVudCBwcmludGluZyAqLwotI2RlZmluZSBOT0VTQ1NFUQkJCS8qIFNvIG5vIGVz Y2FwZSBzZXF1ZW5jZSByZWNvZ25pemVyICovCi0jZW5kaWYgLyogWFBSSU5UICovCi0jZW5kaWYg LyogQ0tfQVBDICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotI2VuZGlmIC8qIE5PRVNDU0VRICov Ci0KLS8qIGluZXNjW10gYW5kIG9sZGVzY1tdIG1hZGUgZ2xvYmFsIDIwMTAvMDMvMDEgZm9yIElO UFVUIGNvbW1hbmQgKi8KLQotc3RhdGljIGludCBlc2NzZXEgPSAwOwkJCS8qIDEgPSBSZWNvZ25p emVyIGlzIGFjdGl2ZSAqLwotLyogc3RhdGljICovIGludCBpbmVzY1syXSA9IHsgMCwgMCB9Owkv KiBTdGF0ZSBvZiBzZXF1ZW5jZSByZWNvZ25pemVyICovCi0vKiBzdGF0aWMgKi8gaW50IG9sZGVz Y1syXSA9IHsgLTEsIC0xIH07IC8qIFByZXZpb3VzIHN0YXRlIG9mIHJlY29nbml6ZXIgKi8KLQot I2lmZGVmIE5PRVNDU0VRCi0jZGVmaW5lIEVTX05PUk1BTCAwCQkJLyogTm9ybWFsLCBub3QgaW4g YW4gZXNjYXBlIHNlcXVlbmNlICovCi0jZGVmaW5lIGNoa2Flcyh4LHkpIDAKLSNlbHNlCi0vKgot ICBBcyBvZiBDLUtlcm1pdCA1QSgxNzgpLCB0aGUgQ09OTkVDVCBjb21tYW5kIHNraXBzIHBhc3Qg QU5TSSBlc2NhcGUgc2VxdWVuY2VzCi0gIHRvIGF2b2lkIHRyYW5zbGF0aW5nIHRoZSBjaGFyYWN0 ZXJzIHdpdGhpbiB0aGVtLiAgVGhpcyBhbGxvd3MgdGhlIENPTk5FQ1QKLSAgY29tbWFuZCB0byB3 b3JrIGNvcnJlY3RseSB3aXRoIGEgaG9zdCB0aGF0IHVzZXMgYSA3LWJpdCBJU08gNjQ2IG5hdGlv bmFsCi0gIGNoYXJhY3RlciBzZXQsIGluIHdoaWNoIGNoYXJhY3RlcnMgbGlrZSAnWycgd291bGQg bm9ybWFsbHkgYmUgY29udmVydGVkIHRvCi0gIGFjY2VudGVkIGxldHRlcnMsIHJ1aW5pbmcgdGhl IHRlcm1pbmFsJ3MgaW50ZXJwcmV0YXRpb24gKGFuZCBnZW5lcmF0aW9uKQotICBvZiBlc2NhcGUg c2VxdWVuY2VzLgotCi0gIEFzIG9mIDVBKDE5MCksIHRoZSBDT05ORUNUIGNvbW1hbmQgcmVzcG9u ZHMgdG8gQVBDIGVzY2FwZSBzZXF1ZW5jZXMKLSAgKEVTQyBfIHRleHQgRVNDIFwpIGlmIHRoZSB1 c2VyIFNFVHMgVEVSTUlOQUwgQVBDIE9OIG9yIFVOQ0hFQ0tFRCwgYW5kIHRoZQotICBwcm9ncmFt IHdhcyBidWlsdCB3aXRoIENLX0FQQyBkZWZpbmVkLgotCi0gIE5vbi1BTlNJL0lTTy1jb21wbGlh bnQgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbm90IGhhbmRsZWQuICovCi0KLS8qIFN0YXRlcyBmb3Ig dGhlIGVzY2FwZS1zZXF1ZW5jZSByZWNvZ25pemVyLiAqLwotCi0jZGVmaW5lIEVTX05PUk1BTCAw CQkJLyogTm9ybWFsLCBub3QgaW4gYW4gZXNjYXBlIHNlcXVlbmNlICovCi0jZGVmaW5lIEVTX0dP VEVTQyAxCQkJLyogQ3VycmVudCBjaGFyYWN0ZXIgaXMgRVNDICovCi0jZGVmaW5lIEVTX0VTQ1NF USAyCQkJLyogSW5zaWRlIGFuIGVzY2FwZSBzZXF1ZW5jZSAqLwotI2RlZmluZSBFU19HT1RDU0kg MwkJCS8qIEluc2lkZSBhIGNvbnRyb2wgc2VxdWVuY2UgKi8KLSNkZWZpbmUgRVNfU1RSSU5HIDQJ CQkvKiBJbnNpZGUgRENTLE9TQyxQTSwgb3IgQVBDIHN0cmluZyAqLwotI2RlZmluZSBFU19URVJN SU4gNQkJCS8qIDFzdCBjaGFyIG9mIHN0cmluZyB0ZXJtaW5hdG9yICovCi0KLS8qCi0gIEFOU0kg ZXNjYXBlIHNlcXVlbmNlIGhhbmRsaW5nLiAgT25seSB0aGUgNy1iaXQgZm9ybSBpcyB0cmVhdGVk LCBiZWNhdXNlCi0gIHRyYW5zbGF0aW9uIGlzIG5vdCBhIHByb2JsZW0gaW4gdGhlIDgtYml0IGVu dmlyb25tZW50LCBpbiB3aGljaCBhbGwgR0wKLSAgY2hhcmFjdGVycyBhcmUgQVNDSUkgYW5kIG5v IHRyYW5zbGF0aW9uIHRha2VzIHBsYWNlLiAgU28gd2UgZG9uJ3QgY2hlY2sKLSAgZm9yIHRoZSA4 LWJpdCBzaW5nbGUtY2hhcmFjdGVyIHZlcnNpb25zIG9mIENTSSwgRENTLCBPU0MsIEFQQywgb3Ig U1QuCi0gIEhlcmUgaXMgdGhlIEFOU0kgc2VxdWVuY2UgcmVjb2duaXplciBzdGF0ZSB0YWJsZSwg Zm9sbG93ZWQgYnkgdGhlIGNvZGUKLSAgdGhhdCBpbXBsZW1lbnRzIGl0LgotCi0gIERlZmluaXRp b25zOgotICAgIENBTiA9IENhbmNlbCAgICAgICAgICAgICAgICAgICAgICAgMDEvMDggICAgICAg ICBDdHJsLVgKLSAgICBTVUIgPSBTdWJzdGl0dXRlICAgICAgICAgICAgICAgICAgIDAxLzEwICAg ICAgICAgQ3RybC1aCi0gICAgRENTID0gRGV2aWNlIENvbnRyb2wgU2VxdWVuY2UgICAgICAwMS8x MSAwNS8wMCAgIEVTQyBQCi0gICAgQ1NJID0gQ29udHJvbCBTZXF1ZW5jZSBJbnRyb2R1Y2VyICAw MS8xMSAwNS8xMSAgIEVTQyBbCi0gICAgU1QgID0gU3RyaW5nIFRlcm1pbmF0b3IgICAgICAgICAg ICAwMS8xMSAwNS8xMiAgIEVTQyBcCi0gICAgT1NDID0gT3BlcmF0aW5nIFN5c3RlbSBDb21tYW5k ICAgICAwMS8xMSAwNS8xMyAgIEVTQyBdCi0gICAgUE0gID0gUHJpdmFjeSBNZXNzYWdlICAgICAg ICAgICAgICAwMS8xMSAwNS8xNCAgIEVTQyBeCi0gICAgQVBDID0gQXBwbGljYXRpb24gUHJvZ3Jh bSBDb21tYW5kICAwMS8xMSAwNS8xNSAgIEVTQyBfCi0KLSAgQU5TSSBlc2NhcGUgc2VxdWVuY2Ug cmVjb2duaXplcjoKLQotICAgIFN0YXRlICAgIElucHV0ICBOZXcgU3RhdGUgIDsgQ29tbWVudGFy eQotCi0gICAgTk9STUFMICAgKHN0YXJ0KSAgICAgICAgICAgOyBTdGFydCBpbiBOT1JNQUwgc3Rh dGUKLQotICAgIChhbnkpICAgIENBTiAgICBOT1JNQUwgICAgIDsgXlggY2FuY2VscwotICAgIChh bnkpICAgIFNVQiAgICBOT1JNQUwgICAgIDsgXlogY2FuY2VscwotCi0gICAgTk9STUFMICAgRVND ICAgIEdPVEVTQyAgICAgOyBCZWdpbiBlc2NhcGUgc2VxdWVuY2UKLSAgICBOT1JNQUwgICBvdGhl ciAgICAgICAgICAgICA7IE5PUk1BTCBjb250cm9sIG9yIGdyYXBoaWMgY2hhcmFjdGVyCi0KLSAg ICBHT1RFU0MgICBFU0MgICAgICAgICAgICAgICA7IFN0YXJ0IGFnYWluCi0gICAgR09URVNDICAg WyAgICAgIEdPVENTSSAgICAgOyBDU0kKLSAgICBHT1RFU0MgICBQICAgICAgU1RSSU5HICAgICA7 IERDUyBpbnRyb2R1Y2VyLCBjb25zdW1lIHRocm91Z2ggU1QKLSAgICBHT1RFU0MgICBdICAgICAg U1RSSU5HICAgICA7IE9TQyBpbnRyb2R1Y2VyLCBjb25zdW1lIHRocm91Z2ggU1QKLSAgICBHT1RF U0MgICBeICAgICAgU1RSSU5HICAgICA7IFBNICBpbnRyb2R1Y2VyLCBjb25zdW1lIHRocm91Z2gg U1QKLSAgICBHT1RFU0MgICBfICAgICAgU1RSSU5HICAgICA7IEFQQyBpbnRyb2R1Y2VyLCBjb25z dW1lIHRocm91Z2ggU1QKLSAgICBHT1RFU0MgICAwLi5+ICAgTk9STUFMICAgICA7IDAzLzAwIHRo cm91Z2ggMTcvMTQgPSBGaW5hbCBjaGFyYWN0ZXIKLSAgICBHT1RFU0MgICBvdGhlciAgRVNDU0VR ICAgICA7IEludGVybWVkaWF0ZSBvciBpZ25vcmVkIGNvbnRyb2wgY2hhcmFjdGVyCi0KLSAgICBF U0NTRVEgICBFU0MgICAgR09URVNDICAgICA7IFN0YXJ0IGFnYWluCi0gICAgRVNDU0VRICAgMC4u fiAgIE5PUk1BTCAgICAgOyAwMy8wMCB0aHJvdWdoIDE3LzE0ID0gRmluYWwgY2hhcmFjdGVyCi0g ICAgRVNDU0VRICAgb3RoZXIgICAgICAgICAgICAgOyBJbnRlcm1lZGlhdGUgb3IgaWdub3JlZCBj b250cm9sIGNoYXJhY3RlcgotCi0gICAgR09UQ1NJICAgRVNDICAgIEdPVEVTQyAgICAgOyBTdGFy dCBhZ2FpbgotICAgIEdPVENTSSAgIEAuLn4gICBOT1JNQUwgICAgIDsgMDQvMDAgdGhyb3VnaCAx Ny8xNCA9IEZpbmFsIGNoYXJhY3RlcgotICAgIEdPVENTSSAgIG90aGVyICAgICAgICAgICAgIDsg SW50ZXJtZWRpYXRlIGNoYXIgb3IgaWdub3JlZCBjb250cm9sIGNoYXIKLQotICAgIFNUUklORyAg IEVTQyAgICBURVJNSU4gICAgIDsgTWF5YmUgaGF2ZSBTVAotICAgIFNUUklORyAgIG90aGVyICAg ICAgICAgICAgIDsgQ29uc3VtZSBhbGwgZWxzZQotCi0gICAgVEVSTUlOICAgXCAgICAgIE5PUk1B TCAgICAgOyBFbmQgb2Ygc3RyaW5nCi0gICAgVEVSTUlOICAgb3RoZXIgIFNUUklORyAgICAgOyBT dGlsbCBpbiBzdHJpbmcKLSovCi0KLSNpZmRlZiBYUFJJTlQJCQkJLyogVHJhbnNwYXJlbnQgcHJp bnQgc3VwcG9ydCAqLwotLyoKLSAgV2UgY2FuJ3QganVzdCBwcmludCBlYWNoIGJ5dGUgYXMgaXQg Y29tZXMgaW4gYmVjYXVzZSB0aGVuIHRoZSBwcmludGVyLW9mZgotICBzZXF1ZW5jZSB3b3VsZCBi ZSBzZW50IHRvIHRoZSBwcmludGVyLiAgVGh1cyB3ZSBoYXZlIHRvIGJ1ZmZlciB1cCBlc2NhcGUK LSAgc2VxdWVuY2VzIGFuZCBwcmludCB0aGVtIG9ubHkgd2hlbiB0aGV5IGFyZSBjb21wbGV0ZSBB TkQgd2Uga25vdyB0aGV5IGFyZQotICBub3QgdGhlIHByaW50ZXItb2ZmIHNlcXVlbmNlLiAgQWxs IHByaW50aW5nIGlzIGRvbmUgdmlhIHpzb3V0eChaTUZJTEUscyxuKS4KLSAgVGhpcyBhbGxvd3Mg Zm9yIHN0cmluZ3MgdGhhdCBjb250YWluIE5VTHMuICBEb24ndCBtaXggY2FsbHMgdG8genNvdXR4 KCkgd2l0aAotICBjYWxscyB0byB6Y2hvdXQoKSwgb3IgdGhlIG91dHB1dCB3aWxsIGJlIHNjcmFt YmxlZC4gIEFsc28gbm90ZSB0aGF0IHdoZW4KLSAgcHJpbnRpbmcgYSBzYXZlZC11cCBlc2NhcGUg c2VxdWVuY2UsIHdlIG5ldmVyIHByaW50IGl0cyBmaW5hbCBjaGFyYWN0ZXIKLSAgYmVjYXVzZSB0 aGF0IHdpbGwgYmUgcHJpbnRlZCBpbiB0aGUgbWFpbmxpbmUgY29kZSwgdXBvbiByZXR1cm4gZnJv bQotICBjaGthZXMoKS4gIE5vdGUgdGhhdCB0aGUgcHJpbnRlci1vbiBzZXF1ZW5jZSBpcyBwYXNz ZWQgdG8gdGhlIHNjcmVlbjsgdGhpcwotICBpcyB1bmF2b2lkYWJsZSwgc2luY2Ugd2UgZG9uJ3Qg a25vdyB3aGF0IGl0IGlzIHVudGlsIGFmdGVyIHdlIGdldCB0byB0aGUKLSAgZW5kLCBhbmQgZm9y IHNjcmVlbiBkaXNwbGF5IHB1cnBvc2VzIHdlIGNhbid0IGJ1ZmZlciB1cCBlc2NhcGUgc2VxdWVu Y2VzCi0gIGZvciBudW1lcm91cyByZWFzb25zLiAgVGhlcmVmb3JlIHdlIGFsc28gbXVzdCBvdXRw dXQgdGhlIHByaW50ZXItb2ZmCi0gIHNlcXVlbmNlLCBvdGhlcndpc2UgYSByZWFsIHRlcm1pbmFs IG9yIGVtdWxhdG9yIHdpbGwgYmUgc3R1Y2sgaW4gcHJpbnQgbW9kZS4KLSovCi1leHRlcm4gaW50 IHR0X3ByaW50OwotI2RlZmluZSBFU0NCVUZMRU4gNjMKLXN0YXRpYyBjaGFyIGVzY2J1ZltFU0NC VUZMRU4rMV0gPSB7IE5VTCwgTlVMIH07Ci1zdGF0aWMgaW50IGVzY2J1ZmMgPSAwOwotc3RhdGlj IGludCBkb250cHJpbnQgPSAwOwotCi1WT0lECi1wcmludG9uKCkgewkJCQkvKiBUdXJuIHByaW50 aW5nIG9uICovCi0gICAgaW50IHgsIHBwOwotICAgIGNoYXIgKiBwOwotICAgIGV4dGVybiBpbnQg cHJpbnRwaXBlLCBub3ByaW50ZXI7Ci0gICAgZXh0ZXJuIGNoYXIgKiBwcmludGVybmFtZTsKLQot ICAgIGlmIChub3ByaW50ZXIpIHsKLQlkZWJ1ZyhGMTEwLCJQUklOVEVSIE9OIE5PUFJJTlRFUiIs IiIsMCk7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBwID0gcHJpbnRlcm5hbWU7Ci0gICAgcHAgPSBw cmludHBpcGU7Ci0gICAgaWYgKCFwKSBwID0gIiI7Ci0gICAgaWYgKCEqcCkgewotI2lmZGVmIEFO WUJTRAotCXAgPSAibHByIjsKLSNlbHNlCi0JcCA9ICJscCI7Ci0jZW5kaWYgLyogQU5ZQlNEICov Ci0JcHAgPSAxOwotCWRlYnVnKEYxMTAsIlBSSU5URVIgREVGQVVMVCIscCwwKTsKLSAgICB9Ci0g ICAgZGVidWcoRjExMSwiUFJJTlRFUiBPTiIscCxwcCk7Ci0gICAgaWYgKHBwKSB7CQkJCS8qIFBy aW50aW5nIHRvIHBpcGUgKi8KLQl4ID0genhjbWQoWk1GSUxFLHApOwotICAgIH0gZWxzZSB7CQkJ CS8qIEFwcGVuZCB0byBmaWxlICovCi0Jc3RydWN0IGZpbGluZm8geHg7Ci0JeHguYnMgPSAwOyB4 eC5jcyA9IDA7IHh4LnJsID0gMDsgeHgub3JnID0gMDsgeHguY2MgPSAwOwotCXh4LnR5cCA9IDA7 IHh4LmRzcCA9IFhZRlpfQTsgeHgub3Nfc3BlY2lmaWMgPSBOVUw7Ci0JeHgubGJsb3B0cyA9IDA7 Ci0JeCA9IHpvcGVubyhaTUZJTEUscCxOVUxMLCZ4eCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEs IlBSSU5URVIgT1BFTiIsIiIseCk7Ci0gICAgcHJpbnRpbmcgPSAxOwotfQotCi1WT0lECi1wcmlu dG9mZigpIHsJCQkJLyogVHVybiBwcmludGluZyBvZmYgKi8KLSAgICBpbnQgeDsKLSAgICBleHRl cm4gaW50IG5vcHJpbnRlcjsKLSAgICBpZiAobm9wcmludGVyKSB7Ci0JcHJpbnRpbmcgPSAwOwot CWRlYnVnKEYxMDAsIlBSSU5URVIgT0ZGIE5PUFJJTlRFUiIsIiIsMCk7Ci0JcmV0dXJuOwotICAg IH0KLSAgICBkZWJ1ZyhGMTAwLCJQUklOVEVSIE9GRiIsIiIsMCk7Ci0gICAgaWYgKHByaW50aW5n KSB7Ci0JeCA9IHpjbG9zZShaTUZJTEUpOwotCWRlYnVnKEYxMDEsIlBSSU5URVIgQ0xPU0UiLCIi LHgpOwotCXByaW50aW5nID0gMDsKLSAgICB9Ci19Ci0jZW5kaWYgLyogWFBSSU5UICovCi0KLS8q Ci0gIEMgSCBLIEEgRSBTICAtLSAgQ2hlY2sgQU5TSSBFc2NhcGUgU2VxdWVuY2UuCi0KLSAgQ2Fs bCB3aXRoIEVBQ0ggY2hhcmFjdGVyIGluIGlucHV0IHN0cmVhbS4KLSAgc3JjID0gMCBtZWFucyBj IGlzIGluY29taW5nIGZyb20gcmVtb3RlOyAxID0gY2hhciBmcm9tIGtleWJvYXJkLgotICBTZXRz IGdsb2JhbCBpbmVzY1tzcmNdIHZhcmlhYmxlIGFjY29yZGluZyB0byBlc2NhcGUgc2VxdWVuY2Ug c3RhdGUuCi0gIFJldHVybnMgMCBub3JtYWxseSwgMSBpZiBhbiBBUEMgc2VxdWVuY2UgaXMgdG8g YmUgZXhlY3V0ZWQuCi0gIEhhbmRsZXMgdHJhbnNwYXJlbnQgcHJpbnRpbmcgaW50ZXJuYWxseS4K LSovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2hrYWVzKGNoYXIgYywgaW50IHNyYykKLSNlbHNl Ci1jaGthZXMoYyxzcmMpIGNoYXIgYzsgaW50IHNyYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot LyogY2hrYWVzICovIHsKLQotICAgIGRlYnVnKEYxMTEsImNoa2FlcyBlbnRyeSBpbmVzYyIsY2tp dG9hKHNyYyksaW5lc2Nbc3JjXSk7Ci0gICAgZGVidWcoRjEwMSwiY2hrYWVzIGMiLCIiLGMpOwot Ci0gICAgaWYgKHNyYyA8IDAgfHwgc3JjID4gMSkJCS8qIERvbid0IGFsbG93IGJhZCBhcmdzLiAq LwotICAgICAgcmV0dXJuKDApOwotCi0gICAgb2xkZXNjW3NyY10gPSBpbmVzY1tzcmNdOwkJLyog UmVtZW1iZXIgcHJldmlvdXMgc3RhdGUgKi8KLQotI2lmZGVmIFhQUklOVAotICAgIGlmIChpbmVz Y1tzcmNdICYmICFzcmMpIHsJCS8qIFNhdmUgdXAgZXNjYXBlIHNlcSBmb3IgcHJpbnRpbmcgICov Ci0JaWYgKCFjKSByZXR1cm4oMCk7CQkvKiBJZ25vcmUgTlVMcyAqLwotCWlmIChlc2NidWZjIDwg RVNDQlVGTEVOKSB7Ci0JICAgIGVzY2J1Zltlc2NidWZjKytdID0gYzsKLQkgICAgZXNjYnVmW2Vz Y2J1ZmNdID0gTlVMOwotCSAgICBkZWJ1ZyhGMTExLCJFU0NCVUYgMSIsZXNjYnVmLGVzY2J1ZmMp OwotCX0gZWxzZSB7CQkJLyogQnVmZmVyIG92ZXJydW4gKi8KLQkgICAgaWYgKHByaW50aW5nICYm IGVzY2J1ZmMpCS8qIFByaW50IHdoYXQncyB0aGVyZSBzbyBmYXIgKi8KLQkgICAgICB6c291dHgo Wk1GSUxFLGVzY2J1Zixlc2NidWZjKTsKLQkgICAgZXNjYnVmYyA9IDE7CQkvKiBjbGVhciBpdCBv dXQgKi8KLQkgICAgZXNjYnVmWzBdID0gYzsJCS8qIGFuZCBzdGFydCBvZmYgZnJlc2ggYnVmZmVy ICovCi0JICAgIGVzY2J1ZlsxXSA9IE5VTDsJCS8qIHdpdGggdGhpcyBjaGFyYWN0ZXIuICovCi0J fQotICAgIH0KLSNlbmRpZiAvKiBYUFJJTlQgKi8KLQotICAgIGlmIChjID09IENBTiB8fCBjID09 IFNVQikgewkJLyogQ0FOIGFuZCBTVUIgY2FuY2VsIGFueSBzZXF1ZW5jZSAqLwotI2lmZGVmIFhQ UklOVAotCWlmICghc3JjKSB7Ci0JICAgIGlmIChwcmludGluZyAmJiBlc2NidWZjID4gMSkKLQkg ICAgICB6c291dHgoWk1GSUxFLGVzY2J1Zixlc2NidWZjLTEpOwotCSAgICBlc2NidWZjID0gMDsJ CS8qIENsZWFyIGJ1ZmZlciAqLwotCSAgICBlc2NidWZbMF0gPSBOVUw7Ci0JfQotI2VuZGlmIC8q IFhQUklOVCAqLwotCWluZXNjW3NyY10gPSBFU19OT1JNQUw7Ci0gICAgfSBlbHNlCQkJCS8qIE90 aGVyd2lzZSAqLwotCi0gICAgICBzd2l0Y2ggKGluZXNjW3NyY10pIHsJCS8qIGVudGVyIHN0YXRl IHN3aXRjaGVyICovCi0JY2FzZSBFU19OT1JNQUw6CQkJLyogTk9STUFMIHN0YXRlICovCi0JICBp ZiAoYyA9PSBFU0MpIHsJCS8qIEdvdCBhbiBFU0MgKi8KLQkgICAgICBpbmVzY1tzcmNdID0gRVNf R09URVNDOwkvKiBDaGFuZ2Ugc3RhdGUgdG8gR09URVNDICovCi0jaWZkZWYgWFBSSU5UCi0JICAg ICAgaWYgKCFzcmMpIHsKLQkJICBlc2NidWZjID0gMTsJCS8qIENsZWFyIGVzY2FwZSBzZXF1ZW5j ZSBidWZmZXIgKi8KLQkJICBlc2NidWZbMF0gPSBjOwkvKiBhbmQgZGVwb3NpdCB0aGUgRVNDICov Ci0JCSAgZXNjYnVmWzFdID0gTlVMOwotCQkgIGRlYnVnKEYxMTEsIkVTQ0JVRiAyIixlc2NidWYs ZXNjYnVmYyk7Ci0JICAgICAgfQotI2VuZGlmIC8qIFhQUklOVCAqLwotCSAgfQotCSAgYnJlYWs7 CQkJLyogT3RoZXJ3aXNlIHN0YXkgaW4gTk9STUFMIHN0YXRlICovCi0KLQljYXNlIEVTX0dPVEVT QzoJCQkvKiBHT1RFU0Mgc3RhdGUgLSBwcmV2IGNoYXIgd2FzIEVTQyovCi0JICBpZiAoYyA9PSAn WycpIHsJCS8qIExlZnQgYnJhY2tldCBhZnRlciBFU0MgaXMgQ1NJICovCi0JICAgICAgaW5lc2Nb c3JjXSA9IEVTX0dPVENTSTsJLyogQ2hhbmdlIHRvIEdPVENTSSBzdGF0ZSAqLwotCSAgfSBlbHNl IGlmIChjID09ICdQJyB8fCAoYyA+IDAxMzQgJiYgYyA8IDAxNDApKSB7IC8qIFAsIF0sIF4sIG9y IF8gKi8KLQkgICAgICBpbmVzY1tzcmNdID0gRVNfU1RSSU5HOwkvKiBTd2l0Y2ggdG8gU1RSSU5H LWFic29ycHRpb24gc3RhdGUgKi8KLSNpZmRlZiBYUFJJTlQKLQkgICAgICBkZWJ1ZyhGMTExLCJF U0NCVUYgU1RSSU5HIixlc2NidWYsZXNjYnVmYyk7Ci0jZW5kaWYgLyogWFBSSU5UICovCi0jaWZk ZWYgQ0tfQVBDCi0JICAgICAgLyogSWYgQVBDIG5vdCBkaXNhYmxlZCAqLwotCSAgICAgIGlmICgh c3JjICYmIGMgPT0gJ18nICYmIChhcGNzdGF0dXMgJiBBUENfT04pKSB7Ci0JCSAgZGVidWcoRjEw MCwiQ09OTkVDVCBBUEMgYmVnaW4iLCIiLDApOwotCQkgIGFwY2FjdGl2ZSA9IEFQQ19SRU1PVEU7 IC8qIFNldCBBUEMtQWN0aXZlIGZsYWcgKi8KLQkJICBhcGNsZW5ndGggPSAwOwkvKiBhbmQgcmVz ZXQgQVBDIGJ1ZmZlciBwb2ludGVyICovCi0JICAgICAgfQotI2VuZGlmIC8qIENLX0FQQyAqLwot CSAgfSBlbHNlIGlmIChjID4gMDU3ICYmIGMgPCAwMTc3KSB7IC8qIEZpbmFsIGNoYXJhY3RlciAn MCcgdGhydSAnficgKi8KLQkgICAgICBpbmVzY1tzcmNdID0gRVNfTk9STUFMOwkvKiBCYWNrIHRv IG5vcm1hbCAqLwotI2lmZGVmIFhQUklOVAotCSAgICAgIGlmICghc3JjKSB7Ci0JCSAgaWYgKHBy aW50aW5nICYmIGVzY2J1ZmMgPiAxKSB7Ci0JCSAgICAgIC8qIER1bXAgZXNjIHNlcSBidWYgdG8g cHJpbnRlciAqLwotCQkgICAgICB6c291dHgoWk1GSUxFLGVzY2J1Zixlc2NidWZjLTEpOwotCQkg ICAgICBkZWJ1ZyhGMTExLCJFU0NCVUYgUFJJTlQgMSIsZXNjYnVmLGVzY2J1ZmMpOwotCQkgIH0K LQotCQkgIGVzY2J1ZmMgPSAwOwkJLyogQ2xlYXIgcGFyYW1ldGVyIGJ1ZmZlciAqLwotCQkgIGVz Y2J1ZlswXSA9IE5VTDsKLQkgICAgICB9Ci0jZW5kaWYgLyogWFBSSU5UICovCi0JICB9IGVsc2Ug aWYgKGMgIT0gRVNDKSB7CS8qIEVTQyBpbiBhbiBlc2NhcGUgc2VxdWVuY2UuLi4gKi8KLQkgICAg ICBpbmVzY1tzcmNdID0gRVNfRVNDU0VROwkvKiBzdGFydHMgYSBuZXcgZXNjYXBlIHNlcXVlbmNl ICovCi0JICB9Ci0JICBicmVhazsJCQkvKiBJbnRlcm1lZGlhdGUgb3IgaWdub3JlZCBjdHJsIGNo YXIgKi8KLQotCWNhc2UgRVNfRVNDU0VROgkJCS8qIEVTQ1NFUSAtLSBpbiBhbiBlc2NhcGUgc2Vx dWVuY2UgKi8KLQkgIGlmIChjID4gMDU3ICYmIGMgPCAwMTc3KSB7CS8qIEZpbmFsIGNoYXJhY3Rl ciAnMCcgdGhydSAnficgKi8KLQkgICAgICBpbmVzY1tzcmNdID0gRVNfTk9STUFMOwkvKiBSZXR1 cm4gdG8gTk9STUFMIHN0YXRlLiAqLwotI2lmZGVmIFhQUklOVAotCSAgICAgIGlmICghc3JjKSB7 Ci0JCSAgaWYgKHByaW50aW5nICYmIGVzY2J1ZmMgPiAxKSB7Ci0JCSAgICAgIHpzb3V0eChaTUZJ TEUsZXNjYnVmLGVzY2J1ZmMtMSk7Ci0JCSAgICAgIGRlYnVnKEYxMTEsIkVTQ0JVRiBQUklOVCAy Iixlc2NidWYsZXNjYnVmYyk7Ci0JCSAgfQotCQkgIGVzY2J1ZmMgPSAwOwkJLyogQ2xlYXIgZXNj c2VxIGJ1ZmZlciAqLwotCQkgIGVzY2J1ZlswXSA9IE5VTDsKLQkgICAgICB9Ci0jZW5kaWYgLyog WFBSSU5UICovCi0JICB9IGVsc2UgaWYgKGMgPT0gRVNDKSB7CS8qIEVTQyAuLi4gKi8KLQkgICAg ICBpbmVzY1tzcmNdID0gRVNfR09URVNDOwkvKiBzdGFydHMgYSBuZXcgZXNjYXBlIHNlcXVlbmNl ICovCi0JICB9Ci0JICBicmVhazsJCQkvKiBJbnRlcm1lZGlhdGUgb3IgaWdub3JlZCBjdHJsIGNo YXIgKi8KLQotCWNhc2UgRVNfR09UQ1NJOgkJCS8qIEdPVENTSSAtLSBJbiBhIGNvbnRyb2wgc2Vx dWVuY2UgKi8KLQkgIGlmIChjID4gMDc3ICYmIGMgPCAwMTc3KSB7CS8qIEZpbmFsIGNoYXJhY3Rl ciAnQCcgdGhydSAnficgKi8KLSNpZmRlZiBYUFJJTlQKLQkgICAgICBpZiAoIXNyYyAmJiB0dF9w cmludCkgewkvKiBQcmludGVyIGVuYWJsZWQ/ICovCi0JCSAgaWYgKGMgPT0gJ2knKSB7CS8qIEZp bmFsIGNoYXIgaXMgImkiPyAqLwotCQkgICAgICBjaGFyICogcCA9IChjaGFyICopIChlc2NidWYg KyBlc2NidWZjIC0gNCk7Ci0JCSAgICAgIGlmICghc3RybmNtcChwLCAiXDAzM1s1aSIsIDQpKSB7 IC8qIFR1cm4gcHJpbnRlciBvbiAqLwotCQkJICBwcmludG9uKCk7Ci0JCSAgICAgIH0gZWxzZSBp ZiAoIXN0cm5jbXAocCwgIlwwMzNbNGkiLCA0KSkgeyAvKiBPciBvZmYuLi4gKi8KLQkJCSAgaW50 IGk7Ci0JCQkgIHByaW50b2ZmKCk7CQkJLyogVHVybiBvZmYgcHJpbnRlci4gKi8KLQkJCSAgZG9u dHByaW50ID0gMTsKLQkJCSAgZm9yIChpID0gMDsgaSA8IGVzY2J1ZmM7IGkrKykJLyogQW5kIG91 dHB1dCB0aGUgKi8KLQkJCSAgICBja2NwdXRjKGVzY2J1ZltpXSk7ICAgICAgICAgLyogc2VxdWVu Y2UuICovCi0JCSAgICAgIH0gZWxzZSBpZiAocHJpbnRpbmcgJiYgZXNjYnVmYyA+IDEpIHsKLQkJ CSAgenNvdXR4KFpNRklMRSxlc2NidWYsZXNjYnVmYy0xKTsKLQkJCSAgZGVidWcoRjAxMSwiRVND QlVGIFBSSU5UIDMiLGVzY2J1Zixlc2NidWZjKTsKLQkJICAgICAgfQotCQkgIH0gZWxzZSBpZiAo cHJpbnRpbmcgJiYgZXNjYnVmYyA+IDEpIHsKLQkJICAgICAgenNvdXR4KFpNRklMRSxlc2NidWYs ZXNjYnVmYy0xKTsKLQkJICAgICAgZGVidWcoRjExMSwiRVNDQlVGIFBSSU5UIDQiLGVzY2J1Zixl c2NidWZjKTsKLQkJICB9Ci0JICAgICAgfQotCSAgICAgIGlmICghc3JjKSB7Ci0JCSAgZXNjYnVm YyA9IDA7CQkvKiBDbGVhciBlc2Mgc2VxdWVuY2UgYnVmZmVyICovCi0JCSAgZXNjYnVmWzBdID0g TlVMOwotCSAgICAgIH0KLSNlbmRpZiAvKiBYUFJJTlQgKi8KLQkgICAgICBpbmVzY1tzcmNdID0g RVNfTk9STUFMOwkvKiBSZXR1cm4gdG8gTk9STUFMLiAqLwotCSAgfSBlbHNlIGlmIChjID09IEVT QykgewkvKiBFU0MgLi4uICovCi0JICAgICAgaW5lc2Nbc3JjXSA9IEVTX0dPVEVTQzsJLyogc3Rh cnRzIG92ZXIuICovCi0JICB9Ci0JICBicmVhazsKLQotCWNhc2UgRVNfU1RSSU5HOgkJCS8qIElu c2lkZSBhIHN0cmluZyAqLwotCSAgaWYgKGMgPT0gRVNDKQkJCS8qIEVTQyBtYXkgYmUgMXN0IGNo YXIgb2YgdGVybWluYXRvciAqLwotCSAgICBpbmVzY1tzcmNdID0gRVNfVEVSTUlOOwkvKiBHbyBz ZWUuICovCi0jaWZkZWYgQ0tfQVBDCi0JICBlbHNlIGlmIChhcGNhY3RpdmUpIHsJCS8qIElmIGlu IEFQQyAqLwotCSAgICAgIGlmIChhcGNsZW5ndGggPCBhcGNidWZsZW4pIHsgLyogYW5kIHRoZXJl IGlzIHJvb20uLi4gKi8KLQkJICBhcGNidWZbYXBjbGVuZ3RoKytdID0gYzsgLyogZGVwb3NpdCB0 aGlzIGNoYXJhY3Rlci4gKi8KLQkgICAgICB9IGVsc2UgewkJCS8qIEJ1ZmZlciBvdmVycnVuICov Ci0JCSAgYXBjYWN0aXZlID0gMDsJLyogRGlzY2FyZCB3aGF0IHdlIGdvdCAqLwotCQkgIGFwY2xl bmd0aCA9IDA7CS8qIGFuZCBnbyBiYWNrIHRvIG5vcm1hbCAqLwotCQkgIGFwY2J1ZlswXSA9IDA7 CS8qIE5vdCBwcmV0dHksIGJ1dCB3aGF0IGVsc2UgKi8KLQkJICBpbmVzY1tzcmNdID0gRVNfTk9S TUFMOyAvKiBjYW4gd2UgZG8/ICAoU1QgbWlnaHQgbm90IGNvbWUpICovCi0JICAgICAgfQotCSAg fQotI2VuZGlmIC8qIENLX0FQQyAqLwotCSAgYnJlYWs7CQkJLyogQWJzb3JiIGFsbCBvdGhlciBj aGFyYWN0ZXJzLiAqLwotCi0JY2FzZSBFU19URVJNSU46CQkJLyogTWF5YmUgYSBzdHJpbmcgdGVy bWluYXRvciAqLwotCSAgaWYgKGMgPT0gJ1xcJykgewkJLyogd2hpY2ggbXVzdCBiZSBiYWNrc2xh c2ggKi8KLQkgICAgICBpbmVzY1tzcmNdID0gRVNfTk9STUFMOwkvKiBJZiBzbywgYmFjayB0byBO T1JNQUwgKi8KLSNpZmRlZiBYUFJJTlQKLQkgICAgICBpZiAoIXNyYykgewotCQkgIGlmIChwcmlu dGluZyAmJiBlc2NidWZjID4gMSkgeyAvKiBJZiBwcmludGluZy4uLiAqLwotCQkgICAgICAvKiBQ cmludCBlc2Mgc2VxIGJ1ZmZlciAqLwotCQkgICAgICB6c291dHgoWk1GSUxFLGVzY2J1Zixlc2Ni dWZjLTEpOwotCQkgICAgICBkZWJ1ZyhGMTExLCJFU0NCVUYgUFJJTlQgNSIsZXNjYnVmLGVzY2J1 ZmMpOwotCQkgIH0KLQkJICBlc2NidWZjID0gMDsJCS8qIENsZWFyIGVzY3NlcSBidWZmZXIgKi8K LQkJICBlc2NidWZbMF0gPSBOVUw7Ci0JICAgICAgfQotI2VuZGlmIC8qIFhQUklOVCAqLwotI2lm ZGVmIENLX0FQQwotCSAgICAgIGlmICghc3JjICYmIGFwY2FjdGl2ZSkgewkvKiBJZiBpdCB3YXMg YW4gQVBDIHN0cmluZywgKi8KLQkJICBkZWJ1ZyhGMTAxLCJDT05ORUNUIEFQQyB0ZXJtaW5hdGVk IiwiIixjKTsKLQkJICBhcGNidWZbYXBjbGVuZ3RoXSA9IE5VTDsgLyogdGVybWluYXRlIGl0IGFu ZCB0aGVuIC4uLiAqLwotCQkgIHJldHVybigxKTsKLQkgICAgICB9Ci0jZW5kaWYgLyogQ0tfQVBD ICovCi0JICB9IGVsc2UgewkJCS8qIEl0J3Mgbm90IGEgYmFja3NsYXNoIHNvLi4uICovCi0JICAg ICAgaW5lc2Nbc3JjXSA9IEVTX1NUUklORzsJLyogYmFjayB0byBzdHJpbmcgYWJzb3JwdGlvbi4g Ki8KLSNpZmRlZiBDS19BUEMKLQkgICAgICBpZiAoYXBjYWN0aXZlKSB7CQkvKiBJbiBBUEMgc3Ry aW5nICovCi0JCSAgaWYgKGFwY2xlbmd0aCsxIDwgYXBjYnVmbGVuKSB7IC8qIElmIGVub3VnaCBy b29tICovCi0JCSAgICAgIGFwY2J1ZlthcGNsZW5ndGgrK10gPSBFU0M7IC8qIGRlcG9zaXQgdGhl IEVzYyAqLwotCQkgICAgICBhcGNidWZbYXBjbGVuZ3RoKytdID0gYzsgICAvKiBhbmQgdGhpcyBj aGFyYWN0ZXIgdG9vLiAqLwotCQkgIH0gZWxzZSB7CQkvKiBCdWZmZXIgb3ZlcnJ1biAqLwotCQkg ICAgICBhcGNhY3RpdmUgPSAwOwotCQkgICAgICBhcGNsZW5ndGggPSAwOwotCQkgICAgICBhcGNi dWZbMF0gPSAwOwotCQkgICAgICBpbmVzY1tzcmNdID0gRVNfTk9STUFMOwotCQkgIH0KLQkgICAg ICB9Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0JICB9Ci0gICAgICB9CS8qIHN3aXRjaCgpICovCi0g ICAgZGVidWcoRjExMSwiY2hrYWVzIGV4aXQgaW5lc2MiLGNraXRvYShzcmMpLGluZXNjW3NyY10p OwotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBOT0VTQ1NFUSAqLwotCi1WT0lECi0jaWZk ZWYgQ0tfQU5TSUMKLUxPR0NIQVIoY2hhciBjKQotI2Vsc2UKLUxPR0NIQVIoYykgY2hhciBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBMT0dDSEFSICovIHsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTG9nIGNoYXJhY3RlciBjIHRvIHNlc3Npb24gbG9nICovCi0gICAgLyogYnV0IHNr aXAgb3ZlciBlc2NhcGUgc2VxdWVuY2VzIGlmIHNlc3Npb24gbG9nIGlzIHRleHQgKi8KLSAgICBp ZiAoZXNjc2VxKSB7Ci0JaWYgKChzZXNzZnQgPT0gWFlGVF9UKSAmJiAoZGVic2VzID09IDApICYm Ci0JICAgIChpbmVzY1swXSAhPSBFU19OT1JNQUwgfHwgb2xkZXNjWzBdICE9IEVTX05PUk1BTCkp Ci0JICByZXR1cm47Ci0gICAgfQotICAgIGxvZ2NoYXIoYyk7Ci19Ci0KLS8qICBDIEsgQyBQIFUg VCBDICAtLSAgQy1LZXJtaXQgQ09OTkVDVCBQdXQgQ2hhcmFjdGVyIHRvIFNjcmVlbiAgKi8KLS8q Ci0gIE91dHB1dCBpcyBidWZmZXJlZCB0byBhdm9pZCBzbG93IHNjcmVlbiB3cml0ZXMgb24gZmFz dCBjb25uZWN0aW9ucy4KLSovCi1zdGF0aWMgaW50Ci1ja2NwdXRmKCkgewkJCQkvKiBEdW1wIHRo ZSBjb25zb2xlIG91dHB1dCBidWZmZXIgKi8KLSAgICBpbnQgeCA9IDA7Ci0gICAgaWYgKG9iYyA+ IDApCQkJLyogSWYgd2UgaGF2ZSBhbnkgY2hhcmFjdGVycywgKi8KLSAgICAgIHggPSBjb254byhv YmMsb2J1Zik7CQkvKiBkdW1wIHRoZW0sICovCi0gICAgb2JwID0gb2J1ZjsJCQkJLyogcmVzZXQg dGhlIHBvaW50ZXIgKi8KLSAgICBvYmMgPSAwOwkJCQkvKiBhbmQgdGhlIGNvdW50ZXIuICovCi0g ICAgcmV0dXJuKHgpOwkJCQkvKiBSZXR1cm4gY29ueG8ncyByZXR1cm4gY29kZSAqLwotfQotCi0v KgotICBOT1RFOiBUaGlzIGlzIHByb2JhYmx5IHRoZSByaWdodCBwbGFjZSBmb3IgY2hhcmFjdGVy LXNldCB0cmFuc2xhdGlvbiwKLSAgcmF0aGVyIHRoYW4gZG93biBiZWxvdyBpbiB0aGUgbWFpbmxp bmUgY29kZS4gIGNrY3B1dGMoKSB3b3VsZCBhY3QgbGlrZQotICB4cG5ieXRlKCkgaW4gY2tjZm5z LmMsIGFuZCBja2NnZXRjKCkgd291bGQgYWN0IGxpa2UgeGduYnl0ZSgpLiAgVGhpcwotICB3b3Vs ZCBzaGllbGQgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgZnJvbSBhbGwgdGhlIGNvbXBsZXhpdGllcyBv ZiBtYW55LXRvLW9uZQotICBhbmQgb25lLXRvLW1hbnkgY29udmVyc2lvbnMsIGFuZCB3b3VsZCBh bGxvdyBoYW5kbGluZyBvZiBLYW5qaSBhbmQgb3RoZXIKLSAgQ0pLIHNldHMgYWxvbmcgd2l0aCBV VEYtOCBhbmQgdGhlIHJlc3QuCi0qLwotaW50Ci1ja2NwdXRjKGMpIGludCBjOyB7Ci0gICAgaW50 IHg7Ci0KLSAgICAqb2JwKysgPSBjICYgMHhmZjsJCQkvKiBEZXBvc2l0IHRoZSBjaGFyYWN0ZXIg Ki8KLSAgICBvYmMrKzsJCQkJLyogQ291bnQgaXQgKi8KLSAgICBpZiAoaWJjID09IDAgfHwJCQkv KiBJZiBpbnB1dCBidWZmZXIgYWJvdXQgZW1wdHkgKi8KLQlvYmMgPT0gT0JVRkwpIHsJCQkvKiBv ciBvdXRwdXQgYnVmZmVyIGZ1bGwgKi8KLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIENLQ1BVVEMgb2Jj IiwiIixvYmMpOwotCXggPSBjb254byhvYmMsb2J1Zik7CQkvKiBkdW1wIHRoZSBidWZmZXIsICov Ci0Jb2JwID0gb2J1ZjsJCQkvKiByZXNldCB0aGUgcG9pbnRlciAqLwotCW9iYyA9IDA7CQkJLyog YW5kIHRoZSBjb3VudGVyLiAqLwotCXJldHVybih4KTsJCQkvKiBSZXR1cm4gY29ueG8ncyByZXR1 cm4gY29kZSAqLwotICAgIH0gZWxzZSByZXR1cm4oMCk7Ci19Ci0KLS8qICBDIEsgQyBHIEUgVCBD ICAtLSAgQy1LZXJtaXQgQ09OTkVDVCBHZXQgQ2hhcmFjdGVyICAqLwotLyoKLSAgQnVmZmVyZWQg cmVhZCBmcm9tIGNvbW11bmljYXRpb24gZGV2aWNlLgotICBSZXR1cm5zIHRoZSBuZXh0IGNoYXJh Y3RlciwgcmVmaWxsaW5nIHRoZSBidWZmZXIgaWYgbmVjZXNzYXJ5LgotICBPbiBlcnJvciwgcmV0 dXJucyB0dGluYydzIHJldHVybiBjb2RlIChzZWUgdHRpbmMoKSBkZXNjcmlwdGlvbikuCi0gIER1 bW15IGFyZ3VtZW50IGZvciBjb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbnMgd2l0aCB0dGlu YygpCi0gIHNvIGEgcG9pbnRlciB0byB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgdG8gdG5f ZG9vcCgpLgotKi8KLWludAotY2tjZ2V0YyhkdW1teSkgaW50IGR1bW15OyB7Ci0gICAgaW50IGMs IG47Ci0jaWZkZWYgQ0tfU1NMCi0gICAgZXh0ZXJuIGludCBzc2xfYWN0aXZlX2ZsYWcsIHRsc19h Y3RpdmVfZmxhZzsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04K LSAgICAvKiBObyBidWZmZXJpbmcgZm9yIHBvc3NpYmx5IGVuY3J5cHRlZCBjb25uZWN0aW9ucyAq LwotICAgIGlmIChuZXR3b3JrICYmIElTX1RFTE5FVCgpICYmIFRFTE9QVF9NRShURUxPUFRfQVVU SEVOVElDQVRJT04pKQotICAgICAgcmV0dXJuKHR0aW5jKDApKTsKLSNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNf YWN0aXZlX2ZsYWcpCi0gICAgICAgIHJldHVybih0dGluYygwKSk7Ci0jZW5kaWYgLyogQ0tfU1NM ICovCi0KLSAgICBpZiAoaWJjIDwgMSkgewkJCS8qIE5lZWQgdG8gcmVmaWxsIGJ1ZmZlcj8gKi8K LQlpYmMgPSAwOwkJCS8qIFllcywgcmVzZXQgY291bnQgKi8KLQlpYnAgPSBpYnVmOwkJCS8qIGFu ZCBidWZmZXIgcG9pbnRlciAqLwotCWMgPSB0dGluYygwKTsJCQkvKiBSZWFkIG9uZSBjaGFyYWN0 ZXIsIGJsb2NraW5nICovCi0JaWYgKGMgPCAwKSB7CQkJLyogSWYgZXJyb3IsIHJldHVybiBlcnJv ciBjb2RlICovCi0JICAgIHJldHVybihjKTsKLQl9IGVsc2UgewkJCS8qIE90aGVyd2lzZSwgZ290 IG9uZSBjaGFyYWN0ZXIgKi8KLQkgICAgKmlicCsrID0gYzsJCQkvKiBBZHZhbmNlIGJ1ZmZlciBw b2ludGVyICovCi0JICAgIGliYysrOwkJCS8qIGFuZCBjb3VudC4gKi8KLQl9Ci0JaWYgKChuID0g dHRjaGsoKSkgPiAwKSB7CS8qIEFueSBtb3JlIHdhaXRpbmc/ICovCi0JICAgIGlmIChuID4gKElC VUZMIC0gaWJjKSkJLyogR2V0IHRoZW0gYWxsIGF0IG9uY2UuICovCi0JICAgICAgbiA9IElCVUZM IC0gaWJjOwkJLyogRG9uJ3Qgb3ZlcmZsb3cgYnVmZmVyICovCi0JICAgICAgaWYgKChuID0gdHR4 aW4obiwoQ0hBUiAqKWlicCkpID4gMCkgewotCQkgIGliYyArPSBuOwkJLyogQWR2YW5jZSBjb3Vu dGVyICovCi0gICAgICAgICAgICAgIH0KLQl9IGVsc2UgaWYgKG4gPCAwKSB7CQkvKiBFcnJvcj8g Ki8KLQkgICAgcmV0dXJuKG4pOwkJCS8qIFJldHVybiB0aGUgZXJyb3IgY29kZSAqLwotCX0KLQlp YnAgPSBpYnVmOwkJCS8qIFBvaW50IHRvIGJlZ2lubmluZyBvZiBidWZmZXIgKi8KLSAgICB9Ci0g ICAgYyA9ICppYnArKyAmIDB4ZmY7CQkJLyogR2V0IG5leHQgY2hhcmFjdGVyIGZyb20gYnVmZmVy ICovCi0gICAgaWJjLS07CQkJCS8qIFJlZHVjZSBidWZmZXIgY291bnQgKi8KLSAgICAvKiBkZWJ1 ZyhGMDAwLCJDS0NHRVRDIiwiIixjKTsgKi8KLSAgICByZXR1cm4oYyk7CQkJCS8qIFJldHVybiB0 aGUgY2hhcmFjdGVyICovCi19Ci0KLS8qCi0gICBLZXlib2FyZCBoYW5kbGluZywgYnVmZmVyZWQg Zm9yIHNwZWVkLCB3aGljaCBpcyBuZWVkZWQgd2hlbiBDLUtlcm1pdCBpcwotICAgaW4gQ09OTkVD VCBtb2RlIGJldHdlZW4gdHdvIG90aGVyIGNvbXB1dGVycyB0aGF0IGFyZSB0cmFuc2ZlcnJpbmcg ZGF0YS4KLSovCi1zdGF0aWMgY2hhciAqa2JwOwkJCS8qIEtleWJvYXJkIGlucHV0IGJ1ZmZlciBw b2ludGVyICovCi1zdGF0aWMgaW50IGtiYzsJCQkJLyogS2V5Ym9hcmQgaW5wdXQgYnVmZmVyIGNv dW50ICovCi0KLSNpZmRlZiBDS19TTUFMTAkJCQkvKiBLZXlib2FyZCBpbnB1dCBidWZmZXIgbGVu Z3RoICovCi0jZGVmaW5lIEtCVUZMIDMyCQkJLyogU21hbGwgZm9yIFBEUC0xMSBVTklYICovCi0j ZWxzZQotI2RlZmluZSBLQlVGTCAyNTcJCQkvKiBSZWd1bGFyIGtlcm5lbCBzaXplIGZvciBvdGhl cnMgKi8KLSNlbmRpZiAvKiBDS19TTUFMTCAqLwotCi0jaWZkZWYgRFlOQU1JQwotc3RhdGljIGNo YXIgKmtidWYgPSBOVUxMOwotI2Vsc2UKLXN0YXRpYyBjaGFyIGtidWZbS0JVRkxdOwotI2VuZGlm IC8qIERZTkFNSUMgKi8KLQotLyogTWFjcm8gZm9yIHJlYWRpbmcga2V5c3Ryb2tlcy4gKi8KLQot I2RlZmluZSBDT05HS1MoKSAoKCgtLWtiYyk+PTApID8gKChpbnQpKCprYnArKykgJiAwMzc3KSA6 IGtiZ2V0KCkpCi0KLS8qCi0gIE5vdGUgdGhhdCB3ZSBjYWxsIHJlYWQoKSBkaXJlY3RseSBoZXJl LCBub3JtYWxseSBhIG5vLW5vLCBidXQgaW4gdGhpcyBjYXNlCi0gIHdlIGtub3cgaXQncyBVTklY IGFuZCB3ZSdyZSBvbmx5IGRvaW5nIHdoYXQgY29uaW5jKDApIHdvdWxkIGhhdmUgZG9uZSwKLSAg ZXhjZXB0IHdlJ3JlIHJlYWRpbmcgYSBibG9jayBvZiBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIGp1 c3Qgb25lLiAgVGhlcmUgaXMsCi0gIGF0IHByZXNlbnQsIG5vIGNvbnhpbigpIGFuYWxvZyB0byB0 dHhpbigpIGZvciBjaHVuayByZWFkcywgYW5kIGluc3RpdHV0aW5nCi0gIG9uZSB3b3VsZCBvbmx5 IGFkZCBmdW5jdGlvbi1jYWxsIG92ZXJoZWFkIGFzIGl0IHdvdWxkIG9ubHkgYmUgYSB3cmFwcGVy IGZvcgotICBhIHJlYWQoKSBjYWxsIGFueXdheS4KLQotICBBbm90aGVyIG5vdGU6IFdlIHN0aWNr IGluIHRoaXMgcmVhZCgpIHRpbGwgdGhlIHVzZXIgdHlwZXMgc29tZXRoaW5nLgotICBCdXQgd2Ug a25vdyB0aGV5IGFscmVhZHkgZGlkLCBzaW5jZSBzZWxlY3QoKSBzYWlkIHNvLiAgVGhlcmVmb3Jl IHNvbWV0aGluZwotICB3b3VsZCBuZWVkIHRvIGJlIG1pZ2h0eSB3cm9uZyBiZWZvcmUgd2UgZ2V0 IHN0dWNrIGhlcmUuCi0qLwotc3RhdGljIGludAkJCQkvKiBLZXlib2FyZCBidWZmZXIgZmlsbGVy ICovCi1rYmdldCgpIHsKLSNpZmRlZiBFSU5UUgotICAgIGludCB0cmllcyA9IDEwOwkJCS8qIElm IHJlYWQoKSBpcyBpbnRlcnJ1cHRlZCwgKi8KLSAgICBpbnQgb2sgPSAwOwotICAgIHdoaWxlICh0 cmllcy0tID4gMCkgewkJLyogdHJ5IGEgZmV3IHRpbWVzLi4uICovCi0jZW5kaWYgLyogRUlOVFIg Ki8KLQlrYmMgPSBjb25jaGsoKTsJCQkvKiBIb3cgbWFueSBjaGFycyB3YWl0aW5nPyAqLwotCWRl YnVnKEYxMDEsImtiZ2V0IGtiYyIsIiIsa2JjKTsKLQlpZiAoa2JjIDwgMSkKLQkgIGtiYyA9IDE7 CQkJLyogSWYgbm9uZSBvciBkdW5ubywgd2FpdCBmb3Igb25lLiAqLwotCWVsc2UgaWYgKGtiYyA+ IEtCVUZMKQkJLyogSWYgdG9vIG1hbnksICovCi0JICBrYmMgPSBLQlVGTDsJCQkvKiBvbmx5IHJl YWQgdGhpcyBtYW55LiAqLwotCWlmICgoa2JjID0gcmVhZCgwLCBrYnVmLCBrYmMpKSA8IDEpIHsg LyogTm93IHJlYWQgaXQvdGhlbS4gKi8KLQkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBrYmdldCBl cnJubyIsIiIsZXJybm8pOwkvKiBHb3QgYW4gZXJyb3IuICovCi0jaWZkZWYgRUlOVFIKLQkgICAg aWYgKGVycm5vID09IEVJTlRSKQkJLyogSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwuICovCi0JICAg ICAgY29udGludWU7CQkJLyogVHJ5IGFnYWluLCB1cCB0byBsaW1pdC4gKi8KLQkgICAgZWxzZQkJ CS8qIFNvbWV0aGluZyBlbHNlLiAqLwotI2VuZGlmIC8qIEVJTlRSICovCi0JICAgICAgcmV0dXJu KC0xKTsJCS8qIFBhc3MgYWxvbmcgcmVhZCgpIGVycm9yLiAqLwotCX0KLSNpZmRlZiBFSU5UUgot CWVsc2UgeyBvayA9IDE7IGJyZWFrOyB9Ci0gICAgfQotICAgIGlmICghb2spIHJldHVybigtMSk7 Ci0jZW5kaWYgLyogRUlOVFIgKi8KLSAgICBrYnAgPSBrYnVmOwkJCQkvKiBBZGp1c3QgYnVmZmVy IHBvaW50ZXIsICovCi0gICAga2JjLS07CQkJCS8qIGNvdW50LCAqLwotICAgIHJldHVybigoaW50 KSgqa2JwKyspICYgMDM3Nyk7CS8qIGFuZCByZXR1cm4gZmlyc3QgY2hhcmFjdGVyLiAqLwotfQot Ci0jaWZkZWYgQkVCT1gKLS8qCi0gKiBDcmVhdGVTb2NrZXRQYWlyIC0tCi0gKgotICoJVGhpcyBw cm9jZWR1cmUgY3JlYXRlcyBhIGNvbm5lY3RlZCBzb2NrZXQgcGFpcgotICoKLSAqIFJlc3VsdHM6 Ci0gKgkwIGlmIE9LLCB0aGUgZXJyb3IgaWYgbm90IE9LLgotICoKLSAqIFNpZGUgZWZmZWN0czoK LSAqCU5vbmUKLSAqLwotaW50Ci1zb2NrZXRwYWlyKGludCAqcGFpcikgewotICAgIGludCBzZXJ2 c29jazsKLSAgICBpbnQgdmFsOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2X2FkZHIsIGNs aV9hZGRyOwotICAgIGV4dGVybiBjaGFyIG15aXBhZGRyW107Ci0KLSAgICBkZWJ1ZyhGMTEwLCJz b2NrZXRwYWlyIixteWlwYWRkciwwKTsKLQotICAgIGlmIChteWlwYWRkclswXSA9PSAwKQotICAg ICAgZ2V0bG9jYWxpcGFkZHIoKTsKLQotICAgIHNlcnZzb2NrID0gc29ja2V0KEFGX0lORVQsIFNP Q0tfU1RSRUFNLCAwKTsKLSAgICBpZiAoc2VydnNvY2sgPT0gMCkgewotCXJldHVybiBoX2Vycm5v OwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJzb2NrZXRwYWlyIiwic29ja2V0IixzZXJ2c29jayk7 Ci0KLSAgICBtZW1zZXQoJnNlcnZfYWRkciwgMCwgc2l6ZW9mKHNlcnZfYWRkcikpOwotICAgIHNl cnZfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSAgICBzZXJ2X2FkZHIuc2luX2FkZHIuc19h ZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7Ci0gICAgc2Vydl9hZGRyLnNpbl9wb3J0ID0gaHRvbnMo MCk7Ci0KLSAgICB2YWwgPSBzaXplb2Yoc2Vydl9hZGRyKTsKLSAgICBpZiAoYmluZChzZXJ2c29j aywgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2Vydl9hZGRyLCB2YWwpIDwgMCkgewotCWNsb3Nlc29j a2V0KHNlcnZzb2NrKTsKLQlyZXR1cm4gaF9lcnJubzsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwi c29ja2V0cGFpciIsImJpbmQiLDApOwotCi0gICAgbGlzdGVuKHNlcnZzb2NrLCAxKTsKLSAgICBk ZWJ1ZyhGMTExLCJzb2NrZXRwYWlyIiwibGlzdGVuIiwwKTsKLQotICAgIGlmIChnZXRzb2NrbmFt ZShzZXJ2c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2Vydl9hZGRyLCAmdmFsKSA8IDApIHsK LQljbG9zZXNvY2tldChzZXJ2c29jayk7Ci0JcmV0dXJuIGhfZXJybm87Ci0gICAgfQotICAgIGRl YnVnKEYxMTEsInNvY2tldHBhaXIiLCJnZXRzb2NrbmFtZSIsMCk7Ci0KLSAgICBwYWlyWzBdID0g c29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKLSAgICBpZiAocGFpclswXSA9PSAwKSB7 Ci0JY2xvc2Vzb2NrZXQoc2VydnNvY2spOwotCXJldHVybiBoX2Vycm5vOwotICAgIH0KLSAgICBk ZWJ1ZyhGMTExLCJzb2NrZXRwYWlyIiwic29ja2V0IixwYWlyWzBdKTsKLQotICAgIG1lbXNldCgm Y2xpX2FkZHIsIDAsIHNpemVvZihjbGlfYWRkcikpOwotICAgIGNsaV9hZGRyLnNpbl9mYW1pbHkg PSBBRl9JTkVUOwotICAgIGNsaV9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihteWlw YWRkclswXT9teWlwYWRkcjoiMTI3LjAuMC4xIik7Ci0gICAgY2xpX2FkZHIuc2luX3BvcnQgPSBz ZXJ2X2FkZHIuc2luX3BvcnQ7Ci0KLSAgICBpZiAoY29ubmVjdChwYWlyWzBdLChzdHJ1Y3Qgc29j a2FkZHIgKikgJmNsaV9hZGRyLCBzaXplb2YoY2xpX2FkZHIpKSA8IDApIHsKLQljbG9zZXNvY2tl dChwYWlyWzBdKTsKLQljbG9zZXNvY2tldChzZXJ2c29jayk7Ci0JcmV0dXJuIGhfZXJybm87Ci0g ICAgfQotICAgIGRlYnVnKEYxMTEsInNvY2tldHBhaXIiLCJjb25uZWN0IiwwKTsKLQotICAgIHBh aXJbMV0gPSBhY2NlcHQoc2VydnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZfYWRkciwg JnZhbCk7Ci0gICAgaWYgKHBhaXJbMV0gPT0gMCkgewotCWNsb3Nlc29ja2V0KHBhaXJbMF0pOwot CWNsb3Nlc29ja2V0KHNlcnZzb2NrKTsKLQlyZXR1cm4gaF9lcnJubzsKLSAgICB9Ci0gICAgZGVi dWcoRjExMSwic29ja2V0cGFpciIsImFjY2VwdCIscGFpclsxXSk7Ci0KLSAgICBjbG9zZXNvY2tl dChzZXJ2c29jayk7Ci0gICAgZGVidWcoRjExMSwic29ja2V0cGFpciIsImNsb3Nlc29ja2V0Iiww KTsKLSAgICByZXR1cm4gMDsKLX0KLQotbG9uZwota2JkcmVhZCh2b2lkICogcGFyYW0pIHsKLSAg ICBpbnQgc29jayA9IChpbnQpIHBhcmFtOwotICAgIGNoYXIgY2g7Ci0gICAgaW50IHJjID0gMDsK LQotICAgIGRlYnVnKEYxMTEsImtiZHJlYWQiLCJzb2NrIixzb2NrKTsKLQotICAgIHdoaWxlIChy YyA+PSAwKSB7Ci0JcmMgPSByZWFkKGZpbGVubyhzdGRpbiksICZjaCwgMSk7IC8qIFJlYWQgYSBj aGFyYWN0ZXIuICovCi0JaWYgKHJjID4gMCkgewotCSAgICByYyA9IHNlbmQoc29jaywmY2gsMSww KTsKLQkgICAgLyogZGVidWcoRjAwMCwia2JkcmVhZCIsInNlbmQoKSIsY2gpOyAqLwotCSAgICBw cmludGYoIlxyXG5nb3Q6ICVjIHJjID0gJWRcclxuIixjaCxyYyk7Ci0JfSBlbHNlCi0JICBtc2xl ZXAoMTAwKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwia2JkcmVhZCIsInRlcm1pbmF0aW5nIiww KTsKLSAgICByZXR1cm4ocmMpOwotfQotI2VuZGlmIC8qIEJFQk9YICovCi0KLSNpZmRlZiBDS0xF QVJOCi1zdGF0aWMgVk9JRAotbGVhcm5jaGFyKGMpIGludCBjOyB7CQkJLyogTGVhcm5lZCBzY3Jp cHQga2V5Ym9hcmQgY2hhcmFjdGVyICovCi0gICAgaW50IGNjOwotICAgIGNoYXIgeGJ1Zls4XTsK LQotICAgIGlmICghbGVhcm5pbmcgfHwgIWxlYXJuZnApCi0gICAgICByZXR1cm47Ci0KLSAgICBz d2l0Y2ggKGxlYXJuc3QpIHsJCQkvKiBMZWFybiBzdGF0ZS4uLiAqLwotICAgICAgY2FzZSAwOgkJ CQkvKiBOZXV0cmFsICovCi0gICAgICBjYXNlIDE6CQkJCS8qIE5ldCAqLwotCWlmIChsZWFybmJj ID4gMCkgewkJLyogSGF2ZSBuZXQgY2hhcmFjdGVycz8gKi8KLQkgICAgY2hhciBidWZbTEVBUk5C VUZTSVpdOwotCSAgICBpbnQgaSwgaiwgbjsKLQkgICAgVUxPTkcgdDsKLQotCSAgICB0ID0gKFVM T05HKSB0aW1lKDApOwkvKiBDYWxjdWxhdGUgSU5QVVQgdGltZW91dCAqLwotCSAgICBqID0gdCAt IGxlYXJudDE7Ci0JICAgIGogKz0gKGogLyA0KSA+IDAgPyAoaiAvIDQpIDogMTsgLyogQWRkIHNv bWUgc2xvcCAqLwotCSAgICBpZiAoaiA8IDIpIGogPSAyOwkJICAgIC8qIDIgc2Vjb25kcyBtaW5p bXVtICovCi0KLQkgICAgZnB1dHMoIlxuSU5QVVQgIixsZWFybmZwKTsJLyogR2l2ZSBJTlBVVCBj b21tYW5kIGZvciB0aGVtICovCi0JICAgIGZwdXRzKGNraXRvYShqKSxsZWFybmZwKTsKLQkgICAg ZnB1dHMoIiB7IixsZWFybmZwKTsKLQkgICAgbGVhcm50MSA9IHQ7Ci0KLQkgICAgbiA9IExFQVJO QlVGU0laOwotCSAgICBpZiAobGVhcm5iYyA8IExFQVJOQlVGU0laKSB7ICAvKiBDaXJjdWxhciBi dWZmZXIgKi8KLQkJbiA9IGxlYXJuYmM7CQkgIC8qICBoYXNuJ3Qgd3JhcHBlZCB5ZXQuICovCi0J CWxlYXJuYnAgPSAwOwotCSAgICB9Ci0JICAgIGogPSAwOwkJCS8qIENvcHkgdG8gbGluZWFyIGJ1 ZmZlciAqLwotCSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CS8qIE51bWJlciBvZiBjaGFy cyBpbiBjaXJjdWxhciBidWYgKi8KLQotCQljYyA9IGxlYXJuYnVmWyhsZWFybmJwICsgaSkgJSBM RUFSTkJVRlNJWl07Ci0KLQkJLyogTGF0ZXIgYWNjb3VudCBmb3IgcHJvbXB0cyB0aGF0IGVuZCB3 aXRoIGEgbmV3bGluZT8gKi8KLQotCQlpZiAoY2MgPT0gQ1IgJiYgaiA+IDApIHsKLQkJICAgIGlm IChidWZbai0xXSAhPSBMRikKLQkJICAgICAgaiA9IDA7Ci0JCX0KLQkJYnVmW2orK10gPSBjYzsK LQkgICAgfQotCSAgICBmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7CS8qIE5vdyBjb3B5IG91dCB0 aGUgYnVmZmVyICovCi0JCWNjID0gYnVmW2ldOwkJLyogaW50ZXJwcmV0aW5nIGNvbnRyb2wgY2hh cnMgKi8KLQkJaWYgKGNjID09IDApIHsJCS8qIFdlIGRvbid0IElOUFVUIE5VTHMgKi8KLQkJICAg IGNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKGNjIDwgU1AgfHwJLyogQ29udHJvbHMgbmVlZCBxdW90 aW5nICovCi0JCQkgICAoY2MgPiAxMjYgJiYgY2MgPCAxNjApKSB7Ci0JCSAgICBja21ha21zZyh4 YnVmLDgsIlxceyIsY2tpdG9hKChpbnQpY2MpLCJ9IixOVUxMKTsKLQkJICAgIGZwdXRzKHhidWYs bGVhcm5mcCk7Ci0JCX0gZWxzZSB7CQkvKiBQbGFpbiBjaGFyYWN0ZXIgKi8KLQkJICAgIHB1dGMo Y2MsbGVhcm5mcCk7Ci0JCX0KLQkgICAgfQotCSAgICBmcHV0cygifVxuSUYgRkFJTCBTVE9QIDEg SU5QVVQgdGltZW91dCIsbGVhcm5mcCk7Ci0JICAgIGxlYXJuYmMgPSAwOwotCX0KLQlsZWFybmJw ID0gMDsKLQlmcHV0cygiXG5QQVVTRSAxXG5PVVRQVVQgIixsZWFybmZwKTsgLyogRW1pdCBPVVRQ VVQgYW5kIGZhbGwgdGhydSAqLwotCi0gICAgICBjYXNlIDI6CQkJCS8qIEFscmVhZHkgaW4gS2V5 Ym9hcmQgc3RhdGUgKi8KLQlpZiAoYyA9PSAwKSB7Ci0JICAgIGZwdXRzKCJcXE4iLGxlYXJuZnAp OwotCX0gZWxzZSBpZiAoYyA9PSAtNykgewotCSAgICBmcHV0cygiXFxCIixsZWFybmZwKTsKLQl9 IGVsc2UgaWYgKGMgPT0gLTgpIHsKLQkgICAgZnB1dHMoIlxcTCIsbGVhcm5mcCk7Ci0JfSBlbHNl IGlmIChjIDwgU1AgfHwgKGMgPiAxMjYgJiYgYyA8IDE2MCkpIHsKLQkgICAgY2ttYWttc2coeGJ1 Ziw4LCJcXHsiLGNraXRvYSgoaW50KWMpLCJ9IixOVUxMKTsKLQkgICAgZnB1dHMoeGJ1ZixsZWFy bmZwKTsKLQl9IGVsc2UgewotCSAgICBwdXRjKGMsbGVhcm5mcCk7Ci0JfQotICAgIH0KLX0KLSNl bmRpZiAvKiBDS0xFQVJOICovCi0KLXN0YXRpYyBpbnQgcHJpbnRiYXIgPSAwOwotCi0jZGVmaW5l IE9VVFhCVUZTSVogMTUKLXN0YXRpYyBDSEFSIGlueGJ1ZltPVVRYQlVGU0laKzFdOwkvKiBIb3N0 LXRvLXNjcmVlbiBleHBhbnNpb24gYnVmZmVyICovCi1zdGF0aWMgaW50IGlueGNvdW50ID0gMDsJ CS8qIGFuZCBjb3VudCAqLwotc3RhdGljIENIQVIgb3V0eGJ1ZltPVVRYQlVGU0laKzFdOwkvKiBL ZXlib2FyZC10by1ob3N0IGV4cGFuc2lvbiBidWYgKi8KLXN0YXRpYyBpbnQgb3V0eGNvdW50ID0g MDsJCS8qIGFuZCBjb3VudCAqLwotCi1pbnQKLWNvbmVjdCgpIHsKLSAgICBpbnQgcmMgPSAwOwkJ CQkvKiBSZXR1cm4gY29kZTogMCA9IGZhaWwsIDEgPSBPSyAqLwotICAgIGludCBpLCB4ID0gMCwg cHJldiA9IC0xOwkJLyogUmVhc29uIGNvZGUgaW4gY3hfc3RhdHVzICovCi0jaWZkZWYgQ0tMRUFS TgotICAgIGludCBjcmZsYWcgPSAwOwotI2VuZGlmIC8qIENLTEVBUk4gKi8KLSAgICByZWdpc3Rl ciBpbnQgYyA9IC0xLCBjMiwgY3NhdmU7CS8qIENoYXJhY3RlcnMgKi8KLSNpZmRlZiBUTkNPREUK LSAgICBpbnQgdHg7CQkJCS8qIEZvciBUZWxuZXQgbmVnb3RpYXRpb25zICovCi0jZW5kaWYgLyog VE5DT0RFICovCi0gICAgaW50IGFwY3JjID0gMDsJCQkvKiBGb3IgQVBDIGFuZCB0cmFuc3BhcmVu dCBwcmludCAqLwotICAgIGludCBuLCBrYmluLCBzY3Jub3V0OwkJLyogc2VsZWN0KCkgaXRlbXMu Li4gKi8KLSAgICBmZF9zZXQgaW4sIG91dCwgZXJyOwkJLyogRmlsZSBkZXNjcmlwdG9yIHNldHMg Ki8KLSAgICBpbnQgZ290bmV0ID0gMDsJCQkvKiBGbGFnIGZvciBuZXQgcmVhZHkgdG8gcmVhZCAq LwotICAgIGludCBnb3RrYmQgPSAwOwkJCS8qIEZsYWcgZm9yIGtleWJvYXJkIHJlYWR5IHRvIHJl YWQgKi8KLSAgICBpbnQgb2xkcHJ0ID0gMDsJCQkvKiBVc2VkIHdpdGggcHJpbnRpbmcgKi8KLSAg ICBpbnQgbXNnZmxnID0gMDsKLSAgICBjaGFyIGNidWZbMl07CQkJLyogRGl0dG8gKi8KLQotI2lm ZGVmIEJFQk9YCi0gICAgaW50IHRpZCA9IDA7CQkJLyogVGhyZWFkIElEICovCi0gICAgaW50IHBh aXJbMl07CQkJLyogU29ja2V0IFBhaXIgKi8KLSAgICBDSEFSIGNoOwotICAgIENIQVIgYnVmWzY0 XTsKLSNlbmRpZiAvKiBCRUJPWCAqLwotCi0gICAgY3hfc3RhdHVzID0gQ1NYX0lOVEVSTkFMOwot ICAgIGRlYm9rID0gMTsKLQotI2lmZGVmIEJFQk9YCi0gICAgewotCS8qIENyZWF0ZSBhIHNvY2tl dCBwYWlyIHRvIGJlIHVzZWQgZm9yIHRoZSBrZXlib2FyZCBpbnB1dCAqLwotCWlmIChzb2NrZXRw YWlyKHBhaXIpKSB7Ci0JICAgIGRlYnVnKEYxMTAsImNvbmVjdCIsInVuYWJsZSB0byBjcmVhdGUg c29ja2V0IHBhaXIiLDApOwotCSAgICByZXR1cm4oLTEpOwotCX0KLQlkZWJ1ZyhGMTExLCJjb25u ZWN0Iiwic29ja2V0IHBhaXJbMF0iLHBhaXJbMF0pOwotCWRlYnVnKEYxMTEsImNvbm5lY3QiLCJz b2NrZXQgcGFpclsxXSIscGFpclsxXSk7Ci0KLQkvKiBBc3NpZ24gb25lIGVuZCBvZiB0aGUgc29j a2V0IHRvIGtiaW4gKi8KLQlrYmluID0gcGFpclswXTsKLSAgICAgICAgdGlkID0gc3Bhd25fdGhy ZWFkKGtiZHJlYWQsCi0JCQkgICAiS2JkIHRvIFNvY2tldCBQYWlyIiwKLQkJCSAgICBCX05PUk1B TF9QUklPUklUWSwKLQkJCSAgICh2b2lkICopcGFpclsxXQotCQkJICAgKTsKLSAgICAgICAgcmVz dW1lX3RocmVhZCh0aWQpOwotCWRlYnVnKEYxMTAsImNvbm5lY3QiLCJ0aWQiLHRpZCk7Ci0gICAg fQotI2Vsc2UgLyogQkVCT1ggKi8KLSAgICBrYmluID0gZmlsZW5vKHN0ZGluKTsJCS8qIHN0ZGlu IGZpbGUgZGVzY3JpcHRvciAqLwotI2VuZGlmIC8qIEJFQk9YICovCi0KLSAgICBzY3Jub3V0ID0g ZmlsZW5vKHN0ZG91dCk7CQkvKiBzdGRvdXQgZmlsZSBkZXNjcmlwdG9yICovCi0KLSNpZmRlZiBD S19UUklHR0VSCi0gICAgbWFrZXN0cigmdHJpZ2dlcnZhbCxOVUxMKTsJCS8qIFJlc2V0IHRyaWdn ZXIgKi8KLSNlbmRpZiAvKiBDS19UUklHR0VSICovCi0KLSNpZmRlZiBYUFJJTlQKLSAgICBlc2Ni dWZjID0gMDsJCQkvKiBSZXNldCBlc2Mtc2VxdWVuY2UgYnVmZmVyICovCi0gICAgZXNjYnVmWzBd ID0gTlVMOwotI2VuZGlmIC8qIFhQUklOVCAqLwotICAgIGNidWZbMV0gPSBOVUw7Ci0KLSAgICB0 dGltb2ZmKCk7CQkJCS8qIFR1cm4gb2ZmIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCi0gICAgaWYg KCFsb2NhbCkgewkJCS8qIEJlIHN1cmUgd2UncmUgbm90IGluIHJlbW90ZSBtb2RlICovCi0jaWZk ZWYgTkVUQ09OTgotI2lmZGVmIE5FV0ZUUAotCWlmIChmdHBpc2Nvbm5lY3RlZCgpKQotCSAgcHJp bnRmKCJTb3JyeSwgeW91IGNhbid0IENPTk5FQ1QgdG8gYW4gRlRQIHNlcnZlclxuIik7Ci0JZWxz ZQotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCSAgcHJpbnRmKCJTb3JyeSwgeW91IG11c3QgU0VUIExJ TkUgb3IgU0VUIEhPU1QgZmlyc3RcbiIpOwotI2Vsc2UKLQlwcmludGYoIlNvcnJ5LCB5b3UgbXVz dCBTRVQgTElORSBmaXJzdFxuIik7Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotCXJldHVybigwKTsK LSAgICB9Ci0gICAgaWYgKHNwZWVkIDwgMEwgJiYgbmV0d29yayA9PSAwICYmIHR0ZmRmbGcgPT0g MCkgewotCXByaW50ZigiU29ycnksIHlvdSBtdXN0IFNFVCBTUEVFRCBmaXJzdFxuIik7Ci0JcmV0 dXJuKDApOwotICAgIH0KLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBpZiAobmV0d29yayAmJiAhdHRw aXBlICYmIChuZXR0eXBlICE9IE5FVF9UQ1BCICYmIG5ldHR5cGUgIT0gTkVUX1BUWSkpIHsKLQlw cmludGYoIlNvcnJ5LCBuZXR3b3JrIHR5cGUgbm90IHN1cHBvcnRlZFxuIik7Ci0JcmV0dXJuKDAp OwotICAgIH0KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotI2lmZGVmIERZTkFNSUMKLSAgICBp ZiAoIWlidWYpIHsKLQlpZiAoIShpYnVmID0gbWFsbG9jKElCVUZMKzEpKSkgeyAvKiBBbGxvY2F0 ZSBpbnB1dCBsaW5lIGJ1ZmZlciAqLwotCSAgICBwcmludGYoIlNvcnJ5LCBDT05ORUNUIGlucHV0 IGJ1ZmZlciBjYW4ndCBiZSBhbGxvY2F0ZWRcbiIpOwotCSAgICByZXR1cm4oMCk7Ci0JfSBlbHNl IHsKLQkgICAgaWJwID0gaWJ1ZjsKLQkgICAgaWJjID0gMDsKLQl9Ci0gICAgfQotICAgIGlmICgh b2J1ZikgewotCWlmICghKG9idWYgPSBtYWxsb2MoT0JVRkwrMSkpKSB7IC8qIEFsbG9jYXRlIG91 dHB1dCBsaW5lIGJ1ZmZlciAqLwotCSAgICBwcmludGYoIlNvcnJ5LCBDT05ORUNUIG91dHB1dCBi dWZmZXIgY2FuJ3QgYmUgYWxsb2NhdGVkXG4iKTsKLQkgICAgcmV0dXJuKDApOwotCX0gZWxzZSB7 Ci0JICAgIG9icCA9IG9idWY7Ci0JICAgIG9iYyA9IDA7Ci0JfQotICAgIH0KLSAgICBpZiAoIWti dWYpIHsKLQlpZiAoIShrYnVmID0gbWFsbG9jKEtCVUZMKzEpKSkgeyAvKiBBbGxvY2F0ZSBrZXli b2FyZCBpbnB1dCBidWZmZXIgKi8KLQkgICAgcHJpbnRmKCJTb3JyeSwgQ09OTkVDVCBrZXlib2Fy ZCBidWZmZXIgY2FuJ3QgYmUgYWxsb2NhdGVkXG4iKTsKLQkgICAgcmV0dXJuKDApOwotCX0KLSAg ICB9Ci0gICAgaWYgKCF0ZW1wKSB7Ci0JaWYgKCEodGVtcCA9IG1hbGxvYyhUTVBMRU4rMSkpKSB7 IC8qIEFsbG9jYXRlIHRlbXBvcmFyeSBidWZmZXIgKi8KLQkgICAgcHJpbnRmKCJTb3JyeSwgQ09O TkVDVCB0ZW1wb3JhcnkgYnVmZmVyIGNhbid0IGJlIGFsbG9jYXRlZFxuIik7Ci0JICAgIHJldHVy bigwKTsKLQl9Ci0gICAgfQotI2Vsc2UKLSAgICBvYnAgPSBvYnVmOwotICAgIG9iYyA9IDA7Ci0j ZW5kaWYgLyogRFlOQU1JQyAqLwotCi0gICAga2JwID0ga2J1ZjsJCQkJLyogQWx3YXlzIGNsZWFy IHRoZXNlLiAqLwotICAgICprYnAgPSBOVUw7CQkJCS8qIE5vIG5lZWQgdG8gcHJlc2VydmUgdGhl bSBiZXR3ZWVuICovCi0gICAga2JjID0gMDsJCQkJLyogQ09OTkVDVCBzZXNzaW9ucy4gKi8KLQot I2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgY29u ZWN0IGVudHJ5IHR0eWZkIiwiIix0dHlmZCk7Ci0JZGVidWcoRjEwMSwiQ09OTkVDVCBjb25lY3Qg ZW50cnkgaWJjIiwiIixpYmMpOwotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgY29uZWN0IGVudHJ5IG9i YyIsIiIsb2JjKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGNvbmVjdCBlbnRyeSBrYmMiLCIiLGti Yyk7Ci0jaWZkZWYgQ0tfVFJJR0dFUgotCWRlYnVnKEYxMTAsIkNPTk5FQ1QgY29uZWN0IHRyaWdn ZXIiLHR0X3RyaWdnZXJbMF0sMCk7Ci0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotCWlmICh0dHlm ZCA+IC0xKSB7Ci0JICAgIG4gPSB0dGNoaygpOwotCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGNv bmVjdCBlbnRyeSB0dGNoayIsIiIsbik7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwot Ci0gICAgaWYgKHR0eWZkIDwgMCkgewkJCS8qIElmIGNvbW11bmljYXRpb24gZGV2aWNlIG5vdCBv cGVuICovCi0jaWZkZWYgVFRMRUJVRgotICAgICAgICBpbnQgbiA9IGxlX2luYnVmKCk7Ci0gICAg ICAgIGRlYnVnKEYxMTEsIkNPTk5FQ1QgbGVfaW5idWYoKSIsInR0eWZkIDwgMCIsbik7Ci0gICAg ICAgIGlmIChuID4gMCkgewotICAgICAgICAgICAgd2hpbGUgKG4tLSkgewotICAgICAgICAgICAg ICAgIENIQVIgY2g7Ci0gICAgICAgICAgICAgICAgbGVfZ2V0Y2hhcigmY2gpOwotICAgICAgICAg ICAgICAgIGNvbm9jKGNoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybigwKTsK LSAgICAgICAgfQotI2VuZGlmIC8qIFRUTEVCVUYgKi8KLQotCWRlYnVnKEYxMDEsIkNPTk5FQ1Qg dHRucHJvdG8iLCIiLHR0bnByb3RvKTsKLQlkZWJ1ZyhGMTExLCJDT05ORUNUIG9wZW5pbmciLHR0 bmFtZSwwKTsgLyogT3BlbiBpdCBub3cgKi8KLQlpZiAodHRvcGVuKHR0bmFtZSwKLQkJICAgJmxv Y2FsLAotCQkgICBuZXR3b3JrID8gLW5ldHR5cGUgOiBtZG10eXAsCi0JCSAgIDAKLQkJICAgKSA8 IDApIHsKLQkgICAgY2ttYWttc2codGVtcCxUTVBMRU4sIlNvcnJ5LCBjYW4ndCBvcGVuICIsdHRu YW1lLE5VTEwsTlVMTCk7Ci0JICAgIHBlcnJvcih0ZW1wKTsKLQkgICAgZGVidWcoRjExMCwiQ09O TkVDVCBvcGVuIGZhaWx1cmUiLHR0bmFtZSwwKTsKLQkgICAgcmV0dXJuKDApOwotCX0KLQotI2lm ZGVmIElLU19PUFRJT04KLQkvKiBJZiBwZWVyIGlzIGluIEtlcm1pdCBzZXJ2ZXIgbW9kZSwgcmV0 dXJuIG5vdy4gKi8KLQlpZiAoVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0 KSB7Ci0JICAgIGN4X3N0YXR1cyA9IENTWF9JS1NEOwotCSAgICByZXR1cm4oMCk7Ci0JfQotI2Vu ZGlmIC8qIElLU19PUFRJT04gKi8KLSAgICB9Ci0gICAgZG9oYW5ndXAgPSAwOwkJCS8qIEhhbmd1 cCBub3QgcmVxdWVzdGVkIHlldCAqLwotCi0gICAgbXNnZmxnID0gIXF1aWV0Ci0jaWZkZWYgQ0tf QVBDCi0gICAgICAmJiAhYXBjYWN0aXZlCi0jZW5kaWYgLyogQ0tfQVBDICovCi0JOwotCi0gICAg aWYgKG1zZ2ZsZykgewotI2lmZGVmIE5FVENPTk4KLQlpZiAobmV0d29yaykgewotI2lmZGVmIENL X0VOQ1JZUFRJT04KLQkgICAgZXh0ZXJuIGludCBtZV9lbmNyeXB0LCB1X2VuY3J5cHQ7Ci0JICAg IGlmIChja190bl9lbmNyeXB0aW5nKCkgJiYgY2tfdG5fZGVjcnlwdGluZygpKQotCSAgICAgIHBy aW50ZigiU0VDVVJFIGNvbm5lY3Rpb24gdG8gaG9zdCAlcyIsdHRuYW1lKTsKLQkgICAgZWxzZQot I2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQkgICAgICBpZiAodHRwaXBlIHx8IHR0cHR5KQot CQlwcmludGYoIkNvbm5lY3RpbmcgdmlhIGNvbW1hbmQgXCIlc1wiIix0dG5hbWUpOwotCSAgICAg IGVsc2UKLQkJcHJpbnRmKCJDb25uZWN0aW5nIHRvIGhvc3QgJXMiLHR0bmFtZSk7Ci0JfSBlbHNl IHsKLSNlbmRpZiAvKiBORVRDT05OICovCi0JICAgIHByaW50ZigiQ29ubmVjdGluZyB0byAlcyIs dHRuYW1lKTsKLQkgICAgaWYgKHNwZWVkID4gLTFMKSBwcmludGYoIiwgc3BlZWQgJWxkIixzcGVl ZCk7Ci0jaWZkZWYgTkVUQ09OTgotCX0KLSNlbmRpZiAvKiBORVRDT05OICovCi0JaWYgKHR0X2Vz Y2FwZSkgewotCSAgICBwcmludGYoIlxyXG4iKTsKLQkgICAgc2hvZXNjKGVzY2FwZSk7Ci0JICAg IHByaW50ZigiVHlwZSB0aGUgZXNjYXBlIGNoYXJhY3RlciBmb2xsb3dlZCBieSBDIHRvIGdldCBi YWNrLFxyXG4iKTsKLQkgICAgcHJpbnRmKCJvciBmb2xsb3dlZCBieSA/IHRvIHNlZSBvdGhlciBv cHRpb25zLlxyXG4iKTsKLQl9IGVsc2UgewotCSAgICBwcmludGYoIi5cclxuXG5FU0NBUEUgQ0hB UkFDVEVSIElTIERJU0FCTEVEXHJcblxuIik7Ci0JfQotCWlmIChzZXNsb2cpIHsKLQkgICAgZXh0 ZXJuIGludCBzbG9ndHM7Ci0JICAgIGNoYXIgKiBzID0gIiI7Ci0JICAgIHN3aXRjaCAoc2Vzc2Z0 KSB7Ci0JICAgICAgY2FzZSBYWUZUX0Q6Ci0JCXMgPSAiZGVidWciOyBicmVhazsKLQkgICAgICBj YXNlIFhZRlRfVDoKLQkJcyA9IHNsb2d0cyA/ICJ0aW1lc3RhbXBlZC10ZXh0IiA6ICJ0ZXh0Ijsg YnJlYWs7Ci0JICAgICAgZGVmYXVsdDoKLQkJcyA9ICJiaW5hcnkiOwotCSAgICB9Ci0JICAgIHBy aW50ZigiU2Vzc2lvbiBMb2c6ICVzLCAlcyAoJWQpIFxyXG4iLHNlc2ZpbCxzLHNlc3NmdCk7Ci0J fQotCWlmIChkZWJzZXMpIHByaW50ZigiRGVidWdnaW5nIERpc3BsYXkuLi4pXHJcbiIpOwotICAg IH0KLQotLyogQ29uZGl0aW9uIGNvbnNvbGUgdGVybWluYWwgYW5kIGNvbW11bmljYXRpb24gbGlu ZSAqLwotCi0gICAgaWYgKGNvbmJpbigoY2hhcillc2NhcGUpIDwgMCkgewotCXByaW50ZigiU29y cnksIGNhbid0IGNvbmRpdGlvbiBjb25zb2xlIHRlcm1pbmFsXG4iKTsKLQlmZmx1c2goc3Rkb3V0 KTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgY21hc2siLCIi LGNtYXNrKTsKLSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGNtZG1zayIsIiIsY21kbXNrKTsKLSAg ICBkZWJ1ZyhGMTAxLCJDT05ORUNUIHNwZWVkIGJlZm9yZSB0dHZ0IiwiIixzcGVlZCk7Ci0gICAg aWYgKChuID0gdHR2dChzcGVlZCxmbG93KSkgPCAwKSB7CS8qIEVudGVyICJ2aXJ0dWFsIHRlcm1p bmFsIiBtb2RlICovCi0JaWYgKCFuZXR3b3JrKSB7Ci0JICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1Qg dHR2dCIsIiIsbik7Ci0JICAgIHR0aGFuZygpOwkJCS8qIEhhbmcgdXAgYW5kIGNsb3NlIHRoZSBk ZXZpY2UuICovCi0JICAgIHR0Y2xvcygwKTsKLQkgICAgZG9sb2dlbmQoKTsKLQkgICAgaWYgKHR0 b3Blbih0dG5hbWUsCQkvKiBPcGVuIGl0IGFnYWluLi4uICovCi0JCSAgICAgICAmbG9jYWwsCi0J CSAgICAgICBuZXR3b3JrID8gLW5ldHR5cGUgOiBtZG10eXAsCi0JCSAgICAgICAwCi0JCSAgICAg ICApIDwgMCkgewotCQljeF9zdGF0dXMgPSBDU1hfSU5URVJOQUw7Ci0JCWNrbWFrbXNnKHRlbXAs VE1QTEVOLCJTb3JyeSwgY2FuJ3QgcmVvcGVuICIsdHRuYW1lLE5VTEwsTlVMTCk7Ci0JCXBlcnJv cih0ZW1wKTsKLQkJcmV0dXJuKDApOwotCSAgICB9Ci0jaWZkZWYgSUtTX09QVElPTgotCSAgICBp ZiAoVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0KSB7Ci0JCWN4X3N0YXR1 cyA9IENTWF9JS1NEOwotCQlyZXR1cm4oMCk7Ci0JICAgIH0KLSNlbmRpZiAvKiBJS1NfT1BUSU9O ICovCi0KLQkgICAgaWYgKHR0dnQoc3BlZWQsZmxvdykgPCAwKSB7CS8qIFRyeSB2aXJ0dWFsIHRl cm1pbmFsIG1vZGUgYWdhaW4uICovCi0JCWNvbnJlcygpOwkJLyogRmFpbHVyZSB0aGlzIHRpbWUg aXMgZmF0YWwuICovCi0JCXByaW50ZigiU29ycnksIENhbid0IGNvbmRpdGlvbiBjb21tdW5pY2F0 aW9uIGxpbmVcbiIpOwotCQljeF9zdGF0dXMgPSBDU1hfSU5URVJOQUw7Ci0JCXJldHVybigwKTsK LQkgICAgfQotCX0KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiQ09OTkVDVCB0dHZ0IG9rLCBlc2Nh cGUiLCIiLGVzY2FwZSk7Ci0KLSAgICAvKiBEZXNwaXRlIHR0dnQoKSB0aGlzIGlzIHN0aWxsIG5l ZWRlZCBpbiBIUC1VWCAqLwotICAgIC8qIGJlY2F1c2Ugb2YgdGhlIEhQLTkwMDAgPFJFU0VUPiBr ZXkuKi8KLQotICAgIHNpZ25hbChTSUdJTlQsIFNJR19JR04pOwotICAgIHNpZ25hbChTSUdRVUlU LCBTSUdfSUdOKTsKLQotICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgY2Fycmllci13YXRjaCIsIiIs Y2Fycmllcik7Ci0gICAgaWYgKCghbmV0d29yayAKLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAg IHx8IGlzdG5jb21wb3J0KCkKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0JKSAmJiAoY2Fycmll ciAhPSBDQVJfT0ZGKSkgewotCWludCB4OwotCXggPSB0dGdtZG0oKTsKLQlkZWJ1ZyhGMTAwLCJD T05ORUNUIHR0Z21kbSIsIiIseCk7Ci0JaWYgKCh4ID4gLTEpICYmICEoeCAmIEJNX0RDRCkpIHsK LSNpZm5kZWYgTk9ISU5UUwotCSAgICBleHRlcm4gaW50IGhpbnRzOwotI2VuZGlmIC8qIE5PSElO VFMgKi8KLQkgICAgZGVidWcoRjEwMCwiQ09OTkVDVCB0dGdtZG0gQ0QgdGVzdCBmYWlscyIsIiIs eCk7Ci0JICAgIGNvbnJlcygpOwotCSAgICBwcmludGYoIj9DYXJyaWVyIHJlcXVpcmVkIGJ1dCBu b3QgZGV0ZWN0ZWQuXG4iKTsKLSNpZm5kZWYgTk9ISU5UUwotCSAgICBjeF9zdGF0dXMgPSBDU1hf Q0FSUklFUjsKLQkgICAgaWYgKCFoaW50cykKLQkgICAgICByZXR1cm4oMCk7Ci0JICAgIHByaW50 ZigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOwotCSAgICBwcmludGYo IiBIaW50OiBUbyBDT05ORUNUIHRvIGEgc2VyaWFsIGRldmljZSB0aGF0XG4iKTsKLQkgICAgcHJp bnRmKCIgaXMgbm90IHByZXNlbnRpbmcgdGhlIENhcnJpZXIgRGV0ZWN0IHNpZ25hbCxcbiIpOwot CSAgICBwcmludGYoIiBmaXJzdCB0ZWxsIEMtS2VybWl0IHRvOlxuXG4iKTsKLQkgICAgcHJpbnRm KCIgICBTRVQgQ0FSUklFUi1XQVRDSCBPRkZcblxuIik7Ci0JICAgIHByaW50ZigiKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKipcblxuIik7Ci0jZW5kaWYgLyogTk9ISU5UUyAqLwot CSAgICByZXR1cm4oMCk7Ci0JfQotCWRlYnVnKEYxMDAsIkNPTk5FQ1QgdHRnbWRtIG9rIiwiIiww KTsKLSAgICB9Ci0KLSAgICAvKiBOb3cgd2UgYXJlIGNvbm5lY3RlZC4gKi8KLQotICAgIGlmICht c2dmbGcgfHwgcHJpbnRiYXIpCi0gICAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIik7Ci0gICAgZmZsdXNoKHN0ZG91dCk7 Ci0KLSNpZm5kZWYgTk9DU0VUUwotLyogU2V0IHVwIGNoYXJhY3RlciBzZXQgdHJhbnNsYXRpb25z ICovCi0KLSAgICB1bmljb2RlID0gMDsJCQkvKiBBc3N1bWUgVW5pY29kZSB3b24ndCBiZSBpbnZv bHZlZCAqLwotICAgIHRjcyA9IDA7CQkJCS8qICJUcmFuc2ZlciIgb3IgIk90aGVyIiBjaGFyc2V0 ICovCi0gICAgc3hvID0gcnhvID0gTlVMTDsJCQkvKiBJbml0aWFsaXplIGJ5dGUtdG8tYnl0ZSBm dW5jdGlvbnMgKi8KLSAgICBzeGkgPSByeGkgPSBOVUxMOwotCi0gICAgaWYgKHRjc3IgIT0gdGNz bCkgewkJCS8qIFJlbW90ZSBhbmQgbG9jYWwgc2V0cyBkaWZmZXIuLi4gKi8KLSNpZmRlZiBVTklD T0RFCi0JaWYgKHRjc3IgPT0gRkNfVVRGOCB8fAkJLyogUmVtb3RlIGNoYXJzZXQgaXMgVVRGLTgg Ki8KLQkgICAgdGNzbCA9PSBGQ19VVEY4KSB7CQkvKiBvciBsb2NhbCBvbmUgaXMuICovCi0JICAg IHh1ZiA9IHhsX3VmY1t0Y3NsXTsJCS8qIEluY29taW5nIFVuaWNvZGUgdG8gbG9jYWwgKi8KLQkg ICAgaWYgKHh1ZiB8fCB0Y3NsID09IEZDX1VURjgpIHsKLQkJdGNzID0gKHRjc3IgPT0gRkNfVVRG OCkgPyB0Y3NsIDogdGNzcjsgLyogVGhlICJvdGhlciIgc2V0ICovCi0JCXhmdSA9IHhsX2ZjdVt0 Y3NdOwkvKiBMb2NhbCBieXRlIHRvIHJlbW90ZSBVbmljb2RlICovCi0JCWlmICh4ZnUpCi0JCSAg dW5pY29kZSA9ICh0Y3NyID09IEZDX1VURjgpID8gMSA6IDI7Ci0JICAgIH0KLQkgICAgdGNzc2l6 ZSA9IGZjc2luZm9bdGNzXS5zaXplOyAvKiBTaXplIG9mIG90aGVyIGNoYXJhY3RlciBzZXQuICov Ci0JfSBlbHNlIHsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0JICAgIHRjcyA9IGdldHRjcyh0Y3Ny LHRjc2wpOwkvKiBHZXQgaW50ZXJtZWRpYXRlIHNldC4gKi8KLQkgICAgc3hvID0geGxzW3Rjc11b dGNzbF07CS8qIHRyYW5zbGF0aW9uIGZ1bmN0aW9uICovCi0JICAgIHJ4byA9IHhsclt0Y3NdW3Rj c3JdOwkvKiBwb2ludGVycyBmb3Igb3V0cHV0IGZ1bmN0aW9ucyAqLwotCSAgICBzeGkgPSB4bHNb dGNzXVt0Y3NyXTsJLyogYW5kIGZvciBpbnB1dCBmdW5jdGlvbnMuICovCi0JICAgIHJ4aSA9IHhs clt0Y3NdW3Rjc2xdOwotI2lmZGVmIFVOSUNPREUKLQl9Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwot ICAgIH0KLS8qCi0gIFRoaXMgaXMgdG8gcHJldmVudCB1c2Ugb2Ygem1zdHVmZigpIGFuZCB6ZHN0 dWZmKCkgYnkgdHJhbnNsYXRpb24gZnVuY3Rpb25zLgotICBUaGV5IG9ubHkgd29yayB3aXRoIGRp c2sgaS9vLCBub3Qgd2l0aCBjb21tdW5pY2F0aW9uIGkvby4gIEx1Y2tpbHkgUnVzc2lhbgotICB0 cmFuc2xhdGlvbiBmdW5jdGlvbnMgZG9uJ3QgZG8gYW55IHN0dWZmaW5nLi4uCi0qLwotICAgIGxh bmdzdiA9IGxhbmd1YWdlOwotI2lmbmRlZiBOT0NZUklMCi0gICAgaWYgKGxhbmd1YWdlICE9IExf UlVTU0lBTikKLSNlbmRpZiAvKiBOT0NZUklMICovCi0gICAgICBsYW5ndWFnZSA9IExfVVNBU0NJ STsKLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLQlk ZWJ1ZyhGMTAxLCJDT05ORUNUIHRjcyIsIiIsdGNzKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIHRj c2wiLCIiLHRjc2wpOwotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgdGNzciIsIiIsdGNzcik7Ci0JZGVi dWcoRjEwMSwiQ09OTkVDVCBmY3NpbmZvW3Rjc2xdLnNpemUiLCIiLGZjc2luZm9bdGNzbF0uc2l6 ZSk7Ci0JZGVidWcoRjEwMSwiQ09OTkVDVCBmY3NpbmZvW3Rjc3JdLnNpemUiLCIiLGZjc2luZm9b dGNzcl0uc2l6ZSk7Ci0JZGVidWcoRjEwMSwiQ09OTkVDVCB1bmljb2RlIiwiIix1bmljb2RlKTsK LSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRl ZiBDS19YWVoKLSNpZm5kZWYgWFlaX0lOVEVSTkFMCi0gICAgewotCWV4dGVybiBpbnQgYmluYXJ5 OwkJLyogU2VlIGFib3V0IFpNT0RFTSBhdXRvZG93bmxvYWRzICovCi0JY2hhciAqIHM7Ci0JcyA9 IGJpbmFyeSA/IHB0YWJbUFJPVE9fWl0ucF9iX3JjbWQgOiBwdGFiW1BST1RPX1pdLnBfdF9yY21k OwotCWlmICghcykgcyA9ICIiOwotCXptZGxvayA9ICgqcyAhPSBOVUwpOwkJLyogT0sgaWYgd2Ug aGF2ZSBleHRlcm5hbCBjb21tYW5kcyAqLwotICAgIH0KLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwg Ki8KLSNlbmRpZiAvKiBDS19YWVogKi8KLQotI2lmbmRlZiBOT0VTQ1NFUQotLyoKLSAgV2UgbmVl ZCB0byBhY3RpdmF0ZSB0aGUgZXNjYXBlLXNlcXVlbmNlIHJlY29nbml0aW9uIGZlYXR1cmUgd2hl bjoKLSAgIChhKSB0cmFuc2xhdGlvbiBpcyBlbGVjdGVkLCBBTkQKLSAgIChiKSB0aGUgbG9jYWwg YW5kL29yIHJlbW90ZSBzZXQgaXMgYSA3LWJpdCBzZXQgb3RoZXIgdGhhbiBVUyBBU0NJSTsKLSAg T3I6Ci0gICBTRVQgU0VTU0lPTi1MT0cgaXMgVEVYVCAoc28gd2UgY2FuIHN0cmlwIGVzY2FwZSBz ZXF1ZW5jZXMgb3V0IG9mIHRoZSBsb2cpOwotICBPcjoKLSAgIFNFVCBURVJNSU5BTCBBUEMgaXMg bm90IE9GRiAoaGFuZGxlZCBpbiB0aGUgbmV4dCBzdGF0ZW1lbnQpLgotKi8KLSAgICBlc2NzZXEg PSAodGNzICE9IFRDX1RSQU5TUCkgJiYJLyogTm90IHRyYW5zcGFyZW50ICovCi0gICAgICAoZmNz aW5mb1t0Y3NsXS5zaXplID09IDEyOCB8fCBmY3NpbmZvW3Rjc3JdLnNpemUgPT0gMTI4KSAmJiAv KiA3IGJpdHMgKi8KLQkoZmNzaW5mb1t0Y3NsXS5jb2RlICE9IEZDX1VTQVNDSUkpOyAvKiBCdXQg bm90IEFTQ0lJICovCi0jZW5kaWYgLyogTk9FU0NTRVEgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICov Ci0KLSNpZm5kZWYgTk9FU0NTRVEKLSAgICBpZiAoIWVzY3NlcSkgewkJCS8qIDIwMDkvMTAvMjIg Ki8KLQlpZiAoc2VzbG9nICYmICFzZXNzZnQpCi0JICBlc2NzZXEgPSAxOwotICAgIH0KLSNpZmRl ZiBDS19BUEMKLSAgICBlc2NzZXEgPSBlc2NzZXEgfHwgKGFwY3N0YXR1cyAmIEFQQ19PTik7Ci0g ICAgYXBjYWN0aXZlID0gMDsJCQkvKiBBbiBBUEMgY29tbWFuZCBpcyBub3QgYWN0aXZlICovCi0g ICAgYXBjbGVuZ3RoID0gMDsJCQkvKiAuLi4gKi8KLSNlbmRpZiAvKiBDS19BUEMgKi8KLSNpZmRl ZiBYUFJJTlQKLSAgICBlc2NzZXEgfD0gdHRfcHJpbnQ7Ci0jZW5kaWYgLyogWFBSSU5UICovCi0g ICAgLyogSW5pdGlhbCBzdGF0ZSBvZiByZWNvZ25pemVyICovCi0gICAgaW5lc2NbMF0gPSBFU19O T1JNQUw7CQkvKiBSZW1vdGUgdG8gc2NyZWVuICovCi0gICAgaW5lc2NbMV0gPSBFU19OT1JNQUw7 CQkvKiBLZXlib2FyZCB0byByZW1vdGUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGVzY3Nl cSIsIiIsZXNjc2VxKTsKLSNlbmRpZiAvKiBOT0VTQ1NFUSAqLwotCi0gICAgaWYgKHR0eWZkID4g LTEpIHsJCQkvKiAoanVzdCBpbiBjYXNlLi4uKSAqLwotCXdoYXQgPSBXX0NPTk5FQ1Q7CQkvKiBL ZWVwIHRyYWNrIG9mIHdoYXQgd2UncmUgZG9pbmcgKi8KLQlhY3RpdmUgPSAxOwotICAgIH0KLSNp ZmRlZiBDS0xFQVJOCi0gICAgaWYgKGxlYXJuaW5nKSB7CQkJLyogTGVhcm5lZCBzY3JpcHQgYWN0 aXZlLi4uICovCi0JbGVhcm5icCA9IDA7CQkJLyogSU5QVVQgYnVmZmVyIHBvaW50ZXIgKi8KLQls ZWFybmJjID0gMDsJCQkvKiBJTlBVVCBidWZmZXIgY291bnQgKi8KLQlsZWFybnN0ID0gMDsJCQkv KiBTdGF0ZSAoMCA9IG5ldXRyYWwsIG5vbmUpICovCi0JbGVhcm50MSA9IChVTE9ORykgdGltZSgw KTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tMRUFSTiAqLwotCi0jaWZkZWYgQ0tUSURMRQotICAgIGlk bGVsaW1pdCA9IHR0X2lkbGVsaW1pdDsKLSNlbmRpZiAvKiBDS1RJRExFICovCi0KLSAgICB3aGls ZSAoYWN0aXZlKSB7CQkJLyogQmlnIGxvb3AuLi4gKi8KLQlkZWJ1ZyhGMTAwLCJDT05ORUNUIHRv cCBvZiBsb29wIiwiIiwwKTsKLQlGRF9aRVJPKCZpbik7CQkJLyogQ2xlYXIgc2VsZWN0KCkgc3Ry dWN0cyAqLwotCUZEX1pFUk8oJm91dCk7Ci0JRkRfWkVSTygmZXJyKTsKLQlnb3RrYmQgPSAwOwot CWdvdG5ldCA9IHR0cGVlaygpOwkJLyogU29tZXRoaW5nIHNpdHRpbmcgaW4gY2t1dGlvIGJ1ZiAq LwotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgdHRwZWVrIiwiIixnb3RuZXQpOwotCi0JaWYgKAotI2lm bmRlZiBOT1NFVEtFWQotCSAgICAha21wdHIJCQkvKiBDaGVjayBmb3Iga2V5IG1hY3JvIGFjdGl2 ZSAqLwotI2Vsc2UKLQkgICAgMQotI2VuZGlmIC8qIE5PU0VUS0VZICovCi0JICAgICkgewotCSAg ICBpZiAob2JjKSB7CQkJLyogTm8ga2V5IG1hY3JvIC0gc2V0IHVwIGZvciBzZWxlY3QgKi8KLQkJ RkRfU0VUKHR0eWZkLCAmb3V0KTsJLyogSGF2ZSBzdHVmZiB0byBzZW5kIHRvIG5ldCAqLwotCSAg ICB9IGVsc2UgewotCQlGRF9TRVQoa2JpbiwgJmluKTsJLyogTmVlZCB0byByZWFkIHN0dWZmIGZy b20ga2V5Ym9hcmQgKi8KLQkgICAgfQotI2lmZGVmIEJFQk9YCi0JICAgIGlmICghKGliYyB8fCBn b3RuZXQgPiAwKSkKLQkJRkRfU0VUKHR0eWZkLCAmaW4pOwkvKiBOZWVkIHRvIHJlYWQgc3R1ZmYg ZnJvbSBuZXQgKi8KLSNlbHNlIC8qIEJFQk9YICovCi0JICAgIGlmIChpYmMgfHwgZ290bmV0ID4g MCkgewotCQlGRF9TRVQoc2Nybm91dCwgJm91dCk7CS8qIEhhdmUgc3R1ZmYgdG8gcHV0IG9uIHNj cmVlbiAqLwotCSAgICB9IGVsc2UgewotCQlGRF9TRVQodHR5ZmQsICZpbik7CS8qIE5lZWQgdG8g cmVhZCBzdHVmZiBmcm9tIG5ldCAqLwotCSAgICB9Ci0jZW5kaWYgLyogQkVCT1ggKi8KLSAgICAg ICAgICAgIEZEX1NFVCh0dHlmZCwgJmVycik7Ci0jaWZkZWYgQ0tfRk9SV0FSRF9YCi0gICAgICAg ICAgICBmd2R4X2luaXRfZmRfc2V0KCZpbik7Ci0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0K LQkgICAgLyogV2FpdCB0aWxsIHRoZSBmaXJzdCBvbmUgb2YgdGhlIGFib3ZlIGlzIHJlYWR5IGZv ciBpL28gKi8KLQkgICAgLyogb3IgVEVSTSBJRExFLVNFTkQgaXMgYWN0aXZlIGFuZCB3ZSB0aW1l IG91dC4gKi8KLQotCSAgICBlcnJubyA9IDA7Ci0jaWZkZWYgQ0tUSURMRQotCSAgICAvKiBUaGlz IHJlYWxseSBjb3VsZCBiZSBtb3ZlZCBvdXQgb2YgdGhlIGxvb3AuLi4gKi8KLQkgICAgaWYgKGlk bGVsaW1pdCkgewkJLyogSWRsZSB0aW1lb3V0IHNldCAqLwotCQlzdHJ1Y3QgdGltZXZhbCB0djsK LQkJaWYgKGlkbGVsaW1pdCA+IDApIHsJLyogUG9zaXRpdmUgPSBzZWMgKi8KLQkJICAgIHR2LnR2 X3NlYyA9IChsb25nKSBpZGxlbGltaXQ7Ci0JCSAgICB0di50dl91c2VjID0gMEw7Ci0JCX0gZWxz ZSB7CQkvKiBOZWdhdGl2ZSA9IG1pbGxpc2VjICovCi0JCSAgICBsb25nIHUgPSAoMCAtIGlkbGVs aW1pdCk7Ci0JCSAgICB0di50dl9zZWMgPSB1IC8gMTAwMEw7Ci0JCSAgICB0di50dl91c2VjID0g KCh1ICUgMTAwMEwpICogMTAwMEwpOwotCQl9Ci0jaWZkZWYgSU5UU0VMRUNUCi0JCWMgPSBzZWxl Y3QoRkRfU0VUU0laRSwoaW50ICopJmluLChpbnQgKikmb3V0LChpbnQgKikmZXJyLCAmdHYpOwot I2Vsc2UKLQkJYyA9IHNlbGVjdChGRF9TRVRTSVpFLCAmaW4sICZvdXQsICZlcnIsICZ0dik7Ci0j ZW5kaWYgLyogSU5UU0VMRUNUICovCi0JICAgIH0gZWxzZQotI2VuZGlmIC8qIENLVElETEUgKi8K LSNpZmRlZiBJTlRTRUxFQ1QKLQkgICAgICBjID0gc2VsZWN0KEZEX1NFVFNJWkUsIChpbnQgKikm aW4sIChpbnQgKikmb3V0LCAoaW50ICopJmVyciwgMCk7Ci0jZWxzZQotCSAgICAgIGMgPSBzZWxl Y3QoRkRfU0VUU0laRSwgJmluLCAmb3V0LCAmZXJyLCAwKTsKLSNlbmRpZiAvKiBJTlRTRUxFQ1Qg Ki8KLQkgICAgaWYgKGMgPCAxKSB7Ci0jaWZkZWYgQ0tUSURMRQotCQlpZiAoYyA9PSAwKSB7CQkv KiBUaW1lb3V0ICovCi0JCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIHNlbGVjdCgpIHRpbWVvdXQi LCIiLHR0X2lkbGVhY3QpOwotCQkgICAgc3dpdGNoICh0dF9pZGxlYWN0KSB7Ci0JCSAgICAgIGNh c2UgSURMRV9IQU5HOiB7CS8qIEhhbmcgdXAgKi8KLQkJCSAgaW50IHggPSAwOwotI2lmbmRlZiBO T0RJQUwKLQkJCSAgaWYgKGRpYWxtaHUpCi0JCQkgICAgeCA9IG1kbWh1cCgpOwotCQkJICBpZiAo eCA8IDEpCi0jZW5kaWYgLyogTk9ESUFMICovCi0JCQkgICAgdHRoYW5nKCk7CS8qIGZhbGwgdGhy dSBkZWxpYmVyYXRlbHkuLi4gKi8KLQkJICAgICAgfQotCQkgICAgICBjYXNlIElETEVfUkVUOgkv KiBSZXR1cm4gdG8gY29tbWFuZCBtb2RlICovCi0JCQljeF9zdGF0dXMgPSBDU1hfSURMRTsKLQkJ CWFjdGl2ZSA9IDA7Ci0JCQljb250aW51ZTsKLQkJICAgICAgY2FzZSBJRExFX09VVDoJLyogT1VU UFVUIGEgc3RyaW5nICovCi0JCQlpZiAodHRfaWRsZXN0cikgewotCQkJICAgIGludCBsZW4gPSBz dHJsZW4odHRfaWRsZXN0cik7Ci0JCQkgICAgaWYgKGxlbiA+IDApCi0JCQkgICAgICB0dG9sKChD SEFSICopdHRfaWRsZXN0cixsZW4pOwotCQkJICAgIGVsc2UKLQkJCSAgICAgIHR0b2MoTlVMKTsg LyogTm8gc3RyaW5nLCBzZW5kIGEgTlVMICovCi0JCQl9IGVsc2UKLQkJCSAgdHRvYyhOVUwpOwkv KiBObyBzdHJpbmcsIHNlbmQgYSBOVUwgKi8KLQkJCWNvbnRpbnVlOwotCQkgICAgICBjYXNlIElE TEVfRVhJVDoJLyogRXhpdCBmcm9tIEtlcm1pdCAqLwotCQkJZG9leGl0KEdPT0RfRVhJVCx4aXRz dGEpOwotI2lmZGVmIFROQ09ERQotCQkgICAgICBjYXNlIElETEVfVEFZVDoJLyogU2VuZCBUZWxu ZXQgQXJlIFlvdSBUaGVyZT8gKi8KLQkJCWlmIChuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB7Ci0J CQkgICAgdG5vcHRbMF0gPSAoQ0hBUikgSUFDOwotCQkJICAgIHRub3B0WzFdID0gKENIQVIpIFRO X0FZVDsKLQkJCSAgICB0bm9wdFsyXSA9IE5VTDsKLQkJCSAgICBpZiAodHRvbCgoQ0hBUiAqKXRu b3B0LDIpIDwgMCkKLQkJCSAgICAgIGFjdGl2ZSA9IDA7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQot CQkgICAgICBjYXNlIElETEVfVE5PUDoJLyogU2VuZCBUZWxuZXQgTk9QICovCi0JCQlpZiAobmV0 d29yayAmJiBJU19URUxORVQoKSkgewotCQkJICAgIHRub3B0WzBdID0gKENIQVIpIElBQzsKLQkJ CSAgICB0bm9wdFsxXSA9IChDSEFSKSBUTl9OT1A7Ci0JCQkgICAgdG5vcHRbMl0gPSBOVUw7Ci0J CQkgICAgaWYgKHR0b2woKENIQVIgKil0bm9wdCwyKSA8IDApCi0JCQkgICAgICBhY3RpdmUgPSAw OwotCQkJfQotCQkJY29udGludWU7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0JCSAgICB9Ci0JCX0K LSNlbmRpZiAvKiBDS1RJRExFICovCi0KLQkJZGVidWcoRjEwMSwiQ09OTkVDVCBzZWxlY3QoKSBl cnJubyIsIiIsZXJybm8pOwotCQkvKiBBIHRvby1iaWcgZmlyc3QgYXJnIHRvIHNlbGVjdCgpIGdl dHMgRUJBREYgKi8KLSNpZmRlZiBFSU5UUgotCQlpZiAoYyA9PSAtMSkgewotCQkgICAgaWYgKGVy cm5vID09IEVJTlRSKSB7Ci0JCQljb250aW51ZTsKLQkJICAgIH0KLQkJfQotI2VuZGlmIC8qIEVJ TlRSICovCi0JCXNsZWVwKDEpOwotCQljb250aW51ZTsKLQkgICAgfQotI2lmbmRlZiBCRUJPWAot I2lmZGVmIERFQlVHCi0JICAgIGlmIChGRF9JU1NFVChzY3Jub3V0LCAmb3V0KSkgewotCQlkZWJ1 ZyhGMTAwLCJDT05ORUNUIFNFTEVDVCBzY3Jub3V0IiwiIiwwKTsKLQkgICAgfQotI2VuZGlmIC8q IERFQlVHICovCi0jZW5kaWYgLyogQkVCT1ggKi8KLQotI2lmZGVmIENLX0ZPUldBUkRfWAotICAg ICAgICAgICAgZndkeF9jaGVja19zb2NrZXRzKCZpbik7Ci0jZW5kaWYgLyogQ0tfRk9SV0FSRF9Y ICovCi0KLQkgICAgaWYgKEZEX0lTU0VUKHR0eWZkLCAmaW4pKSB7CS8qIFJlYWQgZnJvbSBuZXQ/ ICovCi0JCWRlYnVnKEYxMTAsIkNPTk5FQ1QgU0VMRUNUIHR0eWZkIiwiaW4iLDApOwotCQlGRF9D TFIodHR5ZmQsICZpbik7Ci0JCWdvdG5ldCA9IDE7CQkvKiBOZXQgaXMgcmVhZHkgKi8KLQkgICAg fQotCSAgICBpZiAoRkRfSVNTRVQoa2JpbiwgJmluKSkgewkvKiBSZWFkIGZyb20ga2V5Ym9hcmQ/ ICovCi0JCWRlYnVnKEYxMDAsIkNPTk5FQ1QgU0VMRUNUIGtiaW4iLCIiLDApOwotCQlGRF9DTFIo a2JpbiwgJmluKTsKLQkJZ290a2JkID0gMTsJCS8qIEtleWJvYXJkIGlzIHJlYWR5ICovCi0JICAg IH0KLSAgICAgICAgICAgIGlmIChGRF9JU1NFVCh0dHlmZCwgJmVycikpIHsKLQkJZGVidWcoRjEx MCwiQ09OTkVDVCBTRUxFQ1QgdHR5ZmQiLCJlcnIiLDApOwotCQlGRF9DTFIodHR5ZmQsICZlcnIp OwotI2lmZGVmIE5FVFBUWQotI2lmZGVmIEhBVkVfUFRZVFJBUAotCQkvKiBTcGVjaWFsIGhhbmRs aW5nIGZvciBIUC1VWCBwdHkgaS9vICovCi0gICAgICAgICAgICAgICAgaWYgKHR0cHR5KSB7Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChwdHlfdHJhcF9oYW5kbGVyKHR0eWZkKSA+IDApIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHR0Y2xvcygwKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8gY29ucmV0MTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogSEFWRV9QVFlUUkFQICov Ci0jZW5kaWYgLyogTkVUUFRZICovCi0JCWdvdG5ldCA9IDE7CQkvKiBOZXQgaXMgcmVhZHkgKGRv bid0IHNldCBpZiBwdHkpICovCi0gICAgICAgICAgICB9Ci0JfQotI2lmZGVmIERFQlVHCi0JaWYg KGRlYmxvZykgewotCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGdvdGtiZCIsIiIsZ290a2JkKTsK LQkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBrYmMiLCIiLGtiYyk7Ci0jaWZkZWYgQ09NTUVOVAot I2lmbmRlZiBOT1NFVEtFWQotCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGttcHRyIiwiIixrbXB0 cik7Ci0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLSNlbmRpZgkvKiBDT01NRU5UICovCi0JfQotI2Vu ZGlmIC8qIERFQlVHICovCi0KLQl3aGlsZSAoZ290a2JkIHx8IGtiYyA+IDAJLyogSWYgd2UgaGF2 ZSBrZXlib2FyZCBjaGFycyAqLwotI2lmbmRlZiBOT1NFVEtFWQotCSAgICAgICB8fCBrbXB0cgot I2VuZGlmIC8qIE5PU0VUS0VZICovCi0JICAgICAgICkgewotI2lmbmRlZiBOT1NFVEtFWQotCSAg ICBpZiAoa21wdHIpIHsJCS8qIEhhdmUgY3VycmVudCBtYWNybz8gKi8KLQkJZGVidWcoRjEwMCwi Q09OTkVDVCBrbXB0ciBub24gTlVMTCIsIiIsMCk7Ci0JCWlmICgoYyA9IChDSEFSKSAqa21wdHIr KykgPT0gTlVMKSB7IC8qIEdldCBjaGFyIGZyb20gaXQgKi8KLQkJICAgIGRlYnVnKEYxMDAsIkNP Tk5FQ1QgbWFjcm8gZW1wdHksIGNvbnRpbnVpbmciLCIiLDApOwotCQkgICAga21wdHIgPSBOVUxM OwkvKiBJZiBubyBtb3JlIGNoYXJzLCAgKi8KLQkJICAgIGNvbnRpbnVlOwkJLyogUmVzZXQgcG9p bnRlciBhbmQgY29udGludWUgKi8KLQkJfQotCQlkZWJ1ZyhGMDAwLCJDT05ORUNUIGNoYXIgZnJv bSBtYWNybyIsIiIsYyk7Ci0JICAgIH0gZWxzZSB7CQkJLyogTm8gbWFjcm8uLi4gKi8KLSNlbmRp ZiAvKiBOT1NFVEtFWSAqLwotI2lmZGVmIEJFQk9YCi0JCXsKLQkJICAgIGludCByYyA9IDA7Ci0J CSAgICBpZiAoKHJjID0gcmVjdihrYmluLGJ1ZiwxLDApKSA+IDApCi0JCSAgICAgIGMgPSBidWZb MF07Ci0JCSAgICBlbHNlCi0JCSAgICAgIGMgPSAtMTsKLQkJICAgIGRlYnVnKEYxMTEsInJlY3Yi LCJyYyIscmMpOwotCQkgICAgcHJpbnRmKCJcclxucmVjdjogJWMgcmM9JWRcclxuIixidWZbMF0s cmMpOwotCQl9Ci0jZWxzZSAvKiBCRUJPWCAqLwotCQljID0gQ09OR0tTKCk7CQkvKiBZZXMsIHJl YWQgZnJvbSBrZXlib2FyZCAqLwotI2VuZGlmIC8qIEJFQk9YICovCi0JCWdvdGtiZCA9IDA7CQkv KiBUdXJuIG9mZiBzZWxlY3QoKSByZXN1bHQgZmxhZyAqLwotI2lmbmRlZiBOT1NFVEtFWQotCSAg ICB9Ci0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLQkgICAgaWYgKGMgPT0gLTEpIHsKLSNpZmRlZiBF SU5UUgotCQlpZiAoZXJybm8gPT0gRUlOVFIpCi0JCSAgY29udGludWU7Ci0jZW5kaWYgLyogRUlO VFIgKi8KLQkJY3hfc3RhdHVzID0gQ1NYX0lPRVJST1I7Ci0JCWNvbm9jKEJFTCk7Ci0JCWdvdG8g Y29ucmV0MDsKLQkgICAgfQotCSAgICBjICY9IGNtZG1zazsJCS8qIERvIGFueSByZXF1ZXN0ZWQg bWFza2luZyAqLwotCi0jaWZuZGVmIE5PU0VUS0VZCi0vKgotICBOb3RlOiBrbXB0ciBpcyBOVUxM IGlmIHdlIGdvdCBjaGFyYWN0ZXIgYyBmcm9tIHRoZSBrZXlib2FyZCwgYW5kIGl0IGlzCi0gIG5v dCBOVUxMIGlmIGl0IGNhbWUgZnJvbSBhIG1hY3JvLiAgSW4gdGhlIGxhdHRlciBjYXNlLCB3ZSBt dXN0IGF2b2lkCi0gIGV4cGFuZGluZyBpdCBhZ2Fpbi4KLSovCi0JICAgIGlmICgha21wdHIgJiYg bWFjcm90YWJbY10pIHsgLyogTWFjcm8gZGVmaW5pdGlvbiBmb3IgYz8gKi8KLQkJZGVidWcoRjAw MCwiQ09OTkVDVCBtYWNybyBrZXkiLG1hY3JvdGFiW2NdLGMpOwotCQlrbXB0ciA9IG1hY3JvdGFi W2NdOwkvKiBZZXMsIHNldCB1cCBtYWNybyBwb2ludGVyICovCi0JCWNvbnRpbnVlOwkJLyogYW5k IHJlc3RhcnQgdGhlIGxvb3AsICovCi0JICAgIH0gZWxzZSBjID0ga2V5bWFwW2NdOwkvKiBlbHNl IHVzZSBzaW5nbGUtY2hhciBrZXltYXAgKi8KLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotCSAgICBp ZiAoCi0jaWZuZGVmIE5PU0VUS0VZCi0JCSFrbXB0ciAmJgotI2VuZGlmIC8qIE5PU0VUS0VZICov Ci0JCSh0dF9lc2NhcGUgJiYgKChjICYgMHhmZikgPT0gZXNjYXBlKSkpIHsgLyogRXNjYXBlIGNo YXI/ICovCi0JCWRlYnVnKEYwMDAsIkNPTk5FQ1QgZ290IGVzY2FwZSIsIiIsYyk7Ci0jaWZkZWYg QkVCT1gKLQkJaWYgKHJlY3Yoa2JpbixidWYsMSwwKT49MCkKLQkJICBjID0gYnVmWzBdOwotCQll bHNlCi0JCSAgYyA9IC0xOwotI2Vsc2UgLyogQkVCT1ggKi8KLQkJYyA9IENPTkdLUygpICYgMHg3 ZjsJLyogUmVhZCBhcmd1bWVudCAqLwotI2VuZGlmIC8qIEJFQk9YICovCi0JCWRvZXNjKChjaGFy KSBjKTsJLyogSGFuZGxlIGl0ICovCi0JCWNvbnRpbnVlOwkJLyogQmFjayB0byBsb29wICovCi0J ICAgIH0KLQkgICAgY3NhdmUgPSBjOwkJCS8qIFNhdmUgaXQgYmVmb3JlIHRyYW5zbGF0aW9uICov Ci0JICAgIAkJCQkvKiBmb3IgbG9jYWwgZWNob2luZy4gKi8KLSNpZmRlZiBDS0xFQVJOCi0JICAg IGNyZmxhZyA9IChjID09IENSKTsJCS8qIFJlbWVtYmVyIGlmIGl0IHdhcyBDUi4gKi8KLSNlbmRp ZiAvKiBDS0xFQVJOICovCi0KLSNpZm5kZWYgTk9DU0VUUwotCSAgICBpZiAoaW5lc2NbMV0gPT0g RVNfTk9STUFMKSB7IC8qIElmIG5vdCBpbnNpZGUgZXNjYXBlIHNlcS4uICovCi0JCS8qIFRyYW5z bGF0ZSBjaGFyYWN0ZXIgc2V0cyAqLwotI2lmZGVmIFVOSUNPREUKLQkJaW50IHg7Ci0JCWlmICh1 bmljb2RlID09IDEpIHsJLyogUmVtb3RlIGlzIFVURi04ICovCi0JCSAgICBvdXR4Y291bnQgPSBi X3RvX3UoKENIQVIpYyxvdXR4YnVmLE9VVFhCVUZTSVosdGNzc2l6ZSk7Ci0JCSAgICBvdXR4YnVm W291dHhjb3VudF0gPSBOVUw7Ci0JCX0gZWxzZSBpZiAodW5pY29kZSA9PSAyKSB7IC8qIExvY2Fs IGlzIFVURi04ICovCi0JCSAgICAKLQkJICAgIHggPSB1X3RvX2IoKENIQVIpYyk7Ci0JCSAgICBp ZiAoeCA8IDApCi0JCSAgICAgIGNvbnRpbnVlOwotCQkgICAgb3V0eGJ1ZlswXSA9ICh1bnNpZ25l ZCkoeCAmIDB4ZmYpOwotCQkgICAgb3V0eGNvdW50ID0gMTsKLQkJICAgIG91dHhidWZbb3V0eGNv dW50XSA9IE5VTDsKLQkJfSBlbHNlIHsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0JCSAgICBpZiAo c3hvKSBjID0gKCpzeG8pKChjaGFyKWMpOyAvKiBMb2NhbC1pbnRlcm1lZGlhdGUgKi8KLQkJICAg IGlmIChyeG8pIGMgPSAoKnJ4bykoKGNoYXIpYyk7IC8qIEludGVybWVkaWF0ZS1yZW1vdGUgKi8K LQkJICAgIG91dHhidWZbMF0gPSBjOwotCQkgICAgb3V0eGNvdW50ID0gMTsKLQkJICAgIG91dHhi dWZbb3V0eGNvdW50XSA9IE5VTDsKLSNpZmRlZiBVTklDT0RFCi0JCX0KLSNlbmRpZiAvKiBVTklD T0RFICovCi0JICAgIH0gZWxzZSB7Ci0JCW91dHhidWZbMF0gPSBjOwotCQlvdXR4Y291bnQgPSAx OwotCQlvdXR4YnVmW291dHhjb3VudF0gPSBOVUw7Ci0JICAgIH0KLQkgICAgaWYgKGVzY3NlcSkK LQkgICAgICBhcGNyYyA9IGNoa2FlcygoY2hhciljLDEpOwotI2Vsc2UgIC8qIE5PQ1NFVFMgKi8K LQkgICAgb3V0eGJ1ZlswXSA9IGM7Ci0JICAgIG91dHhjb3VudCA9IDE7Ci0JICAgIG91dHhidWZb b3V0eGNvdW50XSA9IE5VTDsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLQkgICAgZGVidWcoRjEx MSwiT1VUWEJVRiIsb3V0eGJ1ZixvdXR4Y291bnQpOwotCi0JICAgIGZvciAoaSA9IDA7IGkgPCBv dXR4Y291bnQ7IGkrKykgewotCQljID0gb3V0eGJ1ZltpXTsKLS8qCi0gSWYgU2hpZnQtSW4vU2hp ZnQtT3V0IGlzIHNlbGVjdGVkIGFuZCB3ZSBoYXZlIGEgNy1iaXQgY29ubmVjdGlvbiwKLSBoYW5k bGUgc2hpZnRpbmcgaGVyZS4KLSovCi0JCWlmIChzb3NpKSB7CQkJIC8qIFNoaWZ0LUluL091dCBz ZWxlY3RlZD8gKi8KLQkJICAgIGlmIChjbWFzayA9PSAwMTc3KSB7CSAvKiBJbiA3LWJpdCBlbnZp cm9ubWVudD8gKi8KLQkJCWlmIChjICYgMDIwMCkgewkJIC8qIDgtYml0IGNoYXJhY3Rlcj8gKi8K LQkJCSAgICBpZiAob3V0c2hpZnQgPT0gMCkgeyAvKiBJZiBub3Qgc2hpZnRlZCwgKi8KLQkJCQl0 dG9jKGRvcGFyKFNPKSk7IC8qIHNoaWZ0LiAqLwotCQkJCW91dHNoaWZ0ID0gMTsKLQkJCSAgICB9 Ci0JCQl9IGVsc2UgewotCQkJICAgIGlmIChvdXRzaGlmdCA9PSAxKSB7IC8qIDctYml0IGNoYXJh Y3RlciAqLwotCQkJCXR0b2MoZG9wYXIoU0kpKTsgLyogSWYgc2hpZnRlZCwgKi8KLQkJCQlvdXRz aGlmdCA9IDA7ICAgIC8qIHVuc2hpZnQuICovCi0JCQkgICAgfQotCQkJfQotCQkgICAgfQotCQkg ICAgaWYgKGMgPT0gU08pIG91dHNoaWZ0ID0gMTsgLyogVXNlciB0eXBlZCBTTyAqLwotCQkgICAg aWYgKGMgPT0gU0kpIG91dHNoaWZ0ID0gMDsgLyogVXNlciB0eXBlZCBTSSAqLwotCQl9Ci0JCWMg Jj0gY21hc2s7CQkvKiBBcHBseSBLZXJtaXQtdG8taG9zdCBtYXNrIG5vdy4gKi8KLQkJaWYgKGMg PT0gJ1wwMTUnKSB7CS8qIENhcnJpYWdlIFJldHVybiAqLwotCQkgICAgaW50IHN0dWZmID0gLTE7 Ci0JCSAgICBpZiAodG5sbSkgewkJLyogVEVSTUlOQUwgTkVXTElORSBPTiAqLwotCQkJc3R1ZmYg PSBMRjsgCS8qIFN0dWZmIExGICovCi0jaWZkZWYgVE5DT0RFCi0JCSAgICB9IGVsc2UgaWYgKG5l dHdvcmsgJiYgLyogVEVMTkVUIE5FV0xJTkUgT04vT0ZGL1JBVyAqLwotCQkJICAgICAgIElTX1RF TE5FVCgpKSB7Ci0JCQlzd2l0Y2ggKCFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkgPyB0bl9ubG0g OiB0bl9iX25sbSl7Ci0JCQkgIGNhc2UgVE5MX0NSTEY6Ci0JCQkgICAgc3R1ZmYgPSBMRjsKLQkJ CSAgICBicmVhazsKLQkJCSAgY2FzZSBUTkxfQ1JOVUw6Ci0JCQkgICAgc3R1ZmYgPSBOVUw7Ci0J CQkgICAgYnJlYWs7Ci0JCQl9Ci0jZW5kaWYgLyogVE5DT0RFICovCi0JCSAgICB9Ci0JCSAgICBp ZiAoc3R1ZmYgPiAtMSkgewotCQkJdHRvYyhkb3BhcignXDAxNScpKTsJLyogU2VuZCBDUiAqLwot CQkJaWYgKGR1cGxleCkgY29ub2MoJ1wwMTUnKTsgLyogTWF5YmUgZWNobyBDUiAqLwotCQkJYyA9 IHN0dWZmOwkvKiBDaGFyIHRvIHN0dWZmICovCi0JCQljc2F2ZSA9IGM7Ci0JCSAgICB9Ci0JCX0K LSNpZmRlZiBUTkNPREUKLS8qIElmIHVzZXIgdHlwZXMgdGhlIDB4ZmYgY2hhcmFjdGVyIChURUxO RVQgSUFDKSwgaXQgbXVzdCBiZSBkb3VibGVkLiAqLwotCQllbHNlCQkvKiBOb3QgQ1IgKi8KLQkJ ICBpZiAoKGRvcGFyKChDSEFSKSBjKSA9PSBJQUMpICYmIC8qIElBQyAoMHhmZikgKi8KLQkJICAg ICAgbmV0d29yayAmJiBJU19URUxORVQoKSkgeyAvKiBTZW5kIG9uZSBub3cgKi8KLQkJICAgICAg dHRvYygoY2hhcilJQUMpOyAvKiBhbmQgdGhlIG90aGVyIG9uZSBqdXN0IGJlbG93LiAqLwotCQkg IH0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQkJLyogU2VuZCB0aGUgY2hhcmFjdGVyICovCi0KLQkJ eCA9IHR0b2MoKGNoYXIpZG9wYXIoKENIQVIpIGMpKTsKLQkJaWYgKHggPiAtMSkgewotI2lmZGVm IENLTEVBUk4KLQkJICAgIGlmIChsZWFybmluZykgewkvKiBMZWFybmVkIHNjcmlwdCBhY3RpdmUg Ki8KLQkJCWlmIChjcmZsYWcpIHsJLyogVXNlciB0eXBlZCBDUiAqLwotCQkJICAgIGxlYXJuY2hh cihDUik7IC8qIEhhbmRsZSBDUiAqLwotCQkJICAgIGxlYXJuc3QgPSAwOyAgIC8qIFNoaWZ0IHRv IE5ldXRyYWwgKi8KLQkJCX0gZWxzZSB7Ci0JCQkgICAgbGVhcm5jaGFyKGMpOyAgLyogTm90IENS ICovCi0JCQkgICAgbGVhcm5zdCA9IDI7ICAgLyogQ2hhbmdlIHN0YXRlIHRvIEtleWJvYXJkICov Ci0JCQl9Ci0JCSAgICB9Ci0jZW5kaWYgLyogQ0tMRUFSTiAqLwotCQkgICAgaWYgKGR1cGxleCkg ewkvKiBJZiBoYWxmIGR1cGxleCwgbXVzdCBlY2hvICovCi0JCQlpZiAoZGVic2VzKQotCQkJICBj b25vbChkYmNocihjc2F2ZSkpOyAvKiB0aGUgb3JpZ2luYWwgY2hhciAqLwotCQkJZWxzZQkJLyog bm90IHRoZSB0cmFuc2xhdGVkIG9uZSAqLwotCQkJICBjb25vYygoY2hhciljc2F2ZSk7Ci0JCQlp ZiAoc2VzbG9nKSB7CS8qIEFuZCBtYXliZSBsb2cgaXQgdG9vICovCi0JCQkgICAgYzIgPSBjc2F2 ZTsKLQkJCSAgICBpZiAoc2Vzc2Z0ID09IDAgJiYgY3NhdmUgPT0gJ1xyJykKLQkJCSAgICAgIGMy ID0gJ1xuJzsKLQkJCSAgICBMT0dDSEFSKChjaGFyKWMyKTsKLQkJCX0KLQkJICAgIH0KLQkJfSBl bHNlIHsKLQkJICAgIHBlcnJvcigiXHJcbkNhbid0IHNlbmQgY2hhcmFjdGVyIik7Ci0JCSAgICBj eF9zdGF0dXMgPSBDU1hfSU9FUlJPUjsKLQkJICAgIGFjdGl2ZSA9IDA7Ci0JCSAgICBicmVhazsK LQkJfQotCSAgICB9Ci0JfQotCWlmIChGRF9JU1NFVCh0dHlmZCwgJm91dCkpIHsKLQkgICAgRkRf Q0xSKHR0eWZkLCAmb3V0KTsKLQl9Ci0Jd2hpbGUgKGdvdG5ldCA+IDAgfHwgaWJjID4gMCkgewot CSAgICBnb3RuZXQgPSAwOwotCSAgICBwcmV2ID0gYzsKLQkgICAgYyA9IGNrY2dldGMoMCk7CQkv KiBHZXQgbmV4dCBjaGFyYWN0ZXIgKi8KLQkgICAgaWYgKGMgPCAwKSB7CQkvKiBGYWlsZWQuLi4g Ki8KLQkJY2tjcHV0ZigpOwkJLyogRmx1c2ggQ09OTkVDVCBvdXRwdXQgYnVmZmVyICovCi0JCWlm IChtc2dmbGcpIHsKLQkJICAgIHByaW50ZigiXHJcbkNvbW11bmljYXRpb25zIGRpc2Nvbm5lY3Qg Iik7Ci0jaWZkZWYgQ09NTUVOVAotCQkgICAgaWYgKGMgPT0gLTMKLSNpZmRlZiB1bHRyaXgKLS8q IFRoaXMgaGFwcGVucyBvbiBVbHRyaXggaWYgdGhlcmUncyBubyBjYXJyaWVyICovCi0JCQkmJiBl cnJubyAhPSBFSU8KLSNlbmRpZiAvKiB1bHRyaXggKi8KLSNpZmRlZiBVVEVLCi0vKiBUaGlzIGhh cHBlbnMgb24gVVRFSyBpZiB0aGVyZSdzIG5vIGNhcnJpZXIgKi8KLQkJCSYmIGVycm5vICE9IEVX T1VMREJMT0NLCi0jZW5kaWYgLyogVVRFSyAqLwotCQkJKQotCQkgICAgICBwZXJyb3IoIlxyXG5D YW4ndCByZWFkIGNoYXJhY3RlciIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJfQotI2lmZGVm IE5PU0VUQlVGCi0JCWZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0JCWRv bG9nZW5kKCk7Ci0JCXR0aGFuZygpOwkJLyogSGFuZyB1cCB0aGUgY29ubmVjdGlvbiAqLwotCQlk ZWJ1ZyhGMTExLCJDT05ORUNUIGkvbyBlcnJvciAxIixja19lcnJzdHIoKSxlcnJubyk7Ci0JCWN4 X3N0YXR1cyA9IENTWF9IT1NURElTQzsKLQkJZ290byBjb25yZXQwOwotCSAgICB9Ci0jaWZkZWYg VE5DT0RFCi0JICAgIHR4ID0gMDsKLQkgICAgaWYgKChjID09IE5VTCkgJiYgbmV0d29yayAmJiBJ U19URUxORVQoKSkgewotCQlpZiAocHJldiA9PSBDUikgeyAgICAvKiBEaXNjYXJkIDxOVUw+IG9m IDxDUj48TlVMPiBpZiBwZWVyICovCi0JCSAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9CSU5BUlkp KSB7ICAvKiBub3QgaW4gYmluYXJ5IG1vZGUgKi8KLQkJCWRlYnVnKEYxMTEsIkNPTk5FQ1QgTlVM Iixja2l0b2EocHJldiksYyk7Ci0JCQlja2NwdXRmKCk7CS8qIEZsdXNoIHNjcmVlbiBvdXRwdXQg YnVmZmVyICovCi0JCQlicmVhazsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0JICAgIGRlYnVnKEYx MTEsIkNPTk5FQ1QiLCJjIixjKTsKLQkgICAgZGVidWcoRjExMSwiQ09OTkVDVCIsIm5ldHdvcmsi LG5ldHdvcmspOwotCSAgICBkZWJ1ZyhGMTExLCJDT05ORUNUIiwiSVNfVEVMTkVUIixJU19URUxO RVQoKSk7Ci0JICAgIGlmICgoYyA9PSBJQUMpICYmIG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHsK LSNpZmRlZiBDS19FTkNSWVBUSU9OCi0JCWludCB4X2F1dGggPSBURUxPUFRfTUUoVEVMT1BUX0FV VEhFTlRJQ0FUSU9OKTsKLSNlbHNlCi0JCWludCB4X2F1dGggPSAwOwotI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KLQkJaW50IG1lX2JpbiA9IFRFTE9QVF9NRShURUxPUFRfQklOQVJZKTsKLQkJ aW50IHVfYmluID0gVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSk7Ci0JCWRlYnVnKEYxMDAsIkNPTk5F Q1QgZ290IElBQyIsIiIsMCk7Ci0JCWNrY3B1dGYoKTsJCS8qIER1bXAgc2NyZWVuLW91dHB1dCBi dWZmZXIgKi8KLQkJaWYgKCh0eCA9IHRuX2Rvb3AoKENIQVIpKGMgJiAweGZmKSxkdXBsZXgsY2tj Z2V0YykpID09IDApIHsKLQkJICAgIGlmIChtZV9iaW4gIT0gVEVMT1BUX01FKFRFTE9QVF9CSU5B UlkpKSB7Ci0JCQltZV9iaW4gPSBURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSk7Ci0JCSAgICB9IGVs c2UgaWYgKHVfYmluICE9IFRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpKSB7Ci0JCQl1X2JpbiA9IFRF TE9QVF9VKFRFTE9QVF9CSU5BUlkpOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLS8qCi0gIEhlcmUg d2UgaGF2ZSB0byBwdXNoIGJhY2sgYW55IGJ5dGVzIHdlIGhhdmUgcmVhZCB1c2luZyBibG9jayBy ZWFkcywgc28gd2UKLSAgY2FuIHJlYWQgdGhlbSBhZ2FpbiB1c2luZyBzaW5nbGUtY2hhcmFjdGVy IHJlYWRzLCBzbyB0aGV5IGNhbiBiZSBkZWNyeXB0ZWQKLSAgaW4gY2FzZSB0aGVyZSB3YXMgYSBz d2l0Y2ggdG8gZW5jcnlwdGlvbiBpbiB0aGUgYmxvY2suICBOb3RlIHRoYXQgd2UgY2FuJ3QKLSAg aGFuZGxlIHN3aXRjaGVzIGluIHRoZSBlbmNyeXB0aW9uIHN0YXRlIGl0c2VsZiB0aGlzIHdheSAt LSB3aGljaCB3b3VsZCBiZQotICBuaWNlLCBzaW5jZSBpdCB3b3VsZCBlbGltaW5hdGUgdGhlIG5l ZWQgZm9yIHNpbmdsZS1jaGFyYWN0ZXIgcmVhZHMuICBXaHk/Ci0gIEJlY2F1c2UgaWYgYSBzZXJp ZXMgb2YgY2hhcmFjdGVycyBoYXMgYWxyZWFkeSBiZWVuIGRlY3J5cHRlZCB0aGF0IHNob3VsZG4n dAotICBoYXZlIGJlZW4sIHRoZW4gKGEpIGl0J3MgcnVpbmVkLCBhbmQgKGIpIHNvIGlzIHRoZSBz dGF0ZSBvZiB0aGUgZGVjcnlwdGlvbgotICBtYWNoaW5lLiAgVG9vIGJhZC4KLSovCi0JCSAgICB9 IGVsc2UgaWYgKFRFTE9QVF9NRShURUxPUFRfQVVUSEVOVElDQVRJT04pICE9IDAgJiYKLQkJCSAg ICAgICBURUxPUFRfTUUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSAhPSB4X2F1dGgKLQkJCSAgICAg ICApIHsKLQkJCWlmICh0dHB1c2hiYWNrKChDSEFSICopaWJwLGliYykgPiAtMSkgewotCQkJICAg IGliYyA9IDA7Ci0JCQkgICAgaWJwID0gaWJ1ZjsKLQkJCX0KLSNlbmRpZiAvKiBDS19FTkNSWVBU SU9OICovCi0JCSAgICB9Ci0JCSAgICBjb250aW51ZTsKLQkJfSBlbHNlIGlmICh0eCA9PSAtMSkg ewkvKiBJL08gZXJyb3IgKi8KLQkJICAgIGlmIChtc2dmbGcpCi0JCSAgICAgIHByaW50ZigiXHJc bkNvbW11bmljYXRpb25zIGRpc2Nvbm5lY3QgIik7Ci0jaWZkZWYgTk9TRVRCVUYKLQkJICAgIGZm bHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0JCSAgICBkb2xvZ2VuZCgpOwot CQkgICAgZGVidWcoRjExMSwiQ09OTkVDVCBpL28gZXJyb3IgMiIsY2tfZXJyc3RyKCksZXJybm8p OwotCQkgICAgY3hfc3RhdHVzID0gQ1NYX0lPRVJST1I7Ci0JCSAgICBnb3RvIGNvbnJldDA7Ci0J CX0gZWxzZSBpZiAodHggPT0gLTIpIHsJLyogSS9PIGVycm9yICovCi0JCSAgICBpZiAobXNnZmxn KQotCQkgICAgICBwcmludGYoIlxyXG5Db25uZWN0aW9uIGNsb3NlZCBieSBwZWVyIik7Ci0jaWZk ZWYgTk9TRVRCVUYKLQkJICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE5PU0VUQlVGICov Ci0JCSAgICBkb2xvZ2VuZCgpOwotCQkgICAgZGVidWcoRjExMSwiQ09OTkVDVCBpL28gZXJyb3Ig MyIsY2tfZXJyc3RyKCksZXJybm8pOwotCQkgICAgY3hfc3RhdHVzID0gQ1NYX0lPRVJST1I7Ci0J CSAgICBnb3RvIGNvbnJldDA7Ci0JCX0gZWxzZSBpZiAodHggPT0gLTMpIHsJLyogSS9PIGVycm9y ICovCi0JCSAgICBpZiAobXNnZmxnKQotCQkgICAgICBwcmludGYoIlxyXG5Db25uZWN0aW9uIGNs b3NlZCBkdWUgdG8gdGVsbmV0IHBvbGljeSIpOwotI2lmZGVmIE5PU0VUQlVGCi0JCSAgICBmZmx1 c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBOT1NFVEJVRiAqLwotCQkgICAgZG9sb2dlbmQoKTsKLQkJ ICAgIGRlYnVnKEYxMTEsIkNPTk5FQ1QgaS9vIGVycm9yIDQiLGNrX2VycnN0cigpLGVycm5vKTsK LQkJICAgIGN4X3N0YXR1cyA9IENTWF9JT0VSUk9SOwotCQkgICAgZ290byBjb25yZXQwOwotCQl9 IGVsc2UgaWYgKCh0eCA9PSAxKSAmJiAoIWR1cGxleCkpIHsgLyogRUNITyBjaGFuZ2UgKi8KLQkJ ICAgIGR1cGxleCA9IDE7CQkvKiBUdXJuIG9uIGxvY2FsIGVjaG8gKi8KLQkJICAgIGNvbnRpbnVl OwotCQl9IGVsc2UgaWYgKCh0eCA9PSAyKSAmJiAoZHVwbGV4KSkgeyAvKiBFQ0hPIGNoYW5nZSAq LwotCQkgICAgZHVwbGV4ID0gMDsKLQkJICAgIGNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKHR4ID09 IDMpIHsJLyogUXVvdGVkIElBQyAqLwotCQkgICAgYyA9IHBhcml0eSA/IDEyNyA6IDI1NTsKLQkJ fQotI2lmZGVmIElLU19PUFRJT04KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0eCA9PSA0KSB7 ICAgLyogSUtTIFN0YXRlIENoYW5nZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoVEVMT1BU X1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ICYmCi0JCQkhdGNwX2luY29taW5nCi0J CQkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhlcmUgd2UgbmVlZCB0byBwcmludCBh IG1zZyB0aGF0IHRoZSBvdGhlciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgLyogc2lkZSBp cyBpbiBTRVJWRVIgbW9kZSBhbmQgdGhhdCBSRU1PVEUgICAgICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAvKiBjb21tYW5kcyBzaG91bGQgYmUgdXNlZC4gIEFuZCBDT05ORUNUIG1vZGUgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNob3VsZCBiZSBlbmRlZC4gICAgICAgICAgICAg ICAgICAgICAgICAgICAqLwotCQkJY3hfc3RhdHVzID0gQ1NYX0lLU0Q7Ci0JCQlhY3RpdmUgPSAw OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIElL U19PUFRJT04gKi8KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0eCA9PSA2KSB7Ci0gICAgICAg ICAgICAgICAgICAgIC8qIERPIExPR09VVCB3YXMgcmVjZWl2ZWQgKi8KLQkJICAgIGlmIChtc2dm bGcpCi0JCSAgICAgIHByaW50ZigiXHJcblJlbW90ZSBMb2dvdXQgIik7Ci0jaWZkZWYgTk9TRVRC VUYKLQkJICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0JCSAgICBk ZWJ1ZyhGMTAwLCJDT05ORUNUIFJlbW90ZSBMb2dvdXQiLCIiLDApOwotCQkgICAgY3hfc3RhdHVz ID0gQ1NYX1RSSUdHRVI7Ci0JCSAgICBnb3RvIGNvbnJldDA7Ci0gICAgICAgICAgICAgICAgfSBl bHNlCi0JCSAgY29udGludWU7CQkvKiBOZWdvdGlhdGlvbiBPSywgZ2V0IG5leHQgY2hhci4gKi8K LQkgICAgfSBlbHNlIGlmIChwYXJpdHkpCi0JICAgICAgYyAmPSAweDdmOwotCi0JICAgIC8qIEkn bSBlY2hvaW5nIGZvciB0aGUgcmVtb3RlICovCi0gICAgICAgICAgICBpZiAoVEVMT1BUX01FKFRF TE9QVF9FQ0hPKSAmJiB0bl9yZW1fZWNobykKLQkgICAgICB0dG9jKChjaGFyKWMpOwotI2VuZGlm IC8qIFROQ09ERSAqLwotCi0jaWZkZWYgQ0tMRUFSTgotCSAvKiBMZWFybmVkIHNjcmlwdDogUmVj b3JkIGluY29taW5nIGNoYXJzIGlmIG5vdCBpbiBLZXlib2FyZCBzdGF0ZSAqLwotCi0JICAgIGlm IChsZWFybmluZyAmJiBsZWFybnN0ICE9IDIpIHsgLyogTGVhcm5lZCBzY3JpcHQgYWN0aXZlICov Ci0JCWxlYXJuYnVmW2xlYXJuYnArK10gPSBjOyAgICAvKiBTYXZlIGZvciBJTlBVVCBjb21tYW5k ICovCi0JCWlmIChsZWFybmJwID49IExFQVJOQlVGU0laKSAvKiBpbiBjaXJjdWxhciBidWZmZXIg Ki8KLQkJICBsZWFybmJwID0gMDsgICAgICAgICAgICAgIC8qIHdyYXBwaW5nIGlmIGF0IGVuZC4g Ki8KLQkJbGVhcm5iYysrOyAgICAgICAgICAgICAgICAgIC8qIENvdW50IHRoaXMgYnl0ZS4gKi8K LQkJbGVhcm5zdCA9IDE7ICAgICAgICAgICAgICAgIC8qIFN0YXRlIGlzIE5ldC4gKi8KLQkgICAg fQotI2VuZGlmIC8qIENLTEVBUk4gKi8KLQotCSAgICBpZiAoZGVic2VzKSB7CQkvKiBPdXRwdXQg Y2hhcmFjdGVyIHRvIHNjcmVlbiAqLwotCQljaGFyICpzOwkJLyogRGVidWdnaW5nIGRpc3BsYXku Li4gKi8KLQkJcyA9IGRiY2hyKGMpOwkJLyogTWFrZSBjaGFyIGludG8gc3RyaW5nICovCi0JCXdo aWxlICgqcykgewkJLyogT3V0cHV0IGVhY2ggY2hhciBmcm9tIHN0cmluZyAqLwotCQkgICAgY2tj cHV0Yygqcyk7Ci0JCSAgICBpZiAoc2VzbG9nKQkJLyogQW5kIG1heWJlIGxvZyBpdC4gKi8KLQkJ ICAgICAgTE9HQ0hBUigoY2hhcikqcyk7Ci0JCSAgICBzKys7Ci0JCX0KLQkgICAgfSBlbHNlIHsJ CQkvKiBSZWd1bGFyIGRpc3BsYXkgLi4uICovCi0JCWMgJj0gY21hc2s7CQkvKiBBcHBseSBLZXJt aXQtdG8tcmVtb3RlIG1hc2sgKi8KLQkJaWYgKHNlc2xvZyAmJiBzZXNzZnQpCS8qIElmIGJpbmFy eSBzZXNzaW9uIGxvZyAqLwotCQkgIExPR0NIQVIoKGNoYXIpYyk7CS8qIGxvZyB0aGUgY2hhcmFj dGVyIG5vdy4gKi8KLSNpZm5kZWYgTk9YRkVSCi0jaWZkZWYgQ0tfQVVUT0RMCi0vKgotICBBdXRv ZG93bmxvYWQuICBDaGVjayBmb3IgS2VybWl0IFMgcGFja2V0IHByaW9yIHRvIHRyYW5zbGF0aW9u LCBzaW5jZSB0aGF0Ci0gIGNhbiBjaGFuZ2UgdGhlIHBhY2tldCBhbmQgbWFrZSBpdCB1bnJlY29n bml6YWJsZSAoYXMgd2hlbiB0aGUgdGVybWluYWwKLSAgY2hhcmFjdGVyIHNldCBpcyBhbiBJU08g NjQ2IG9uZSkuLi4gIERpdHRvIGZvciBabW9kZW0gc3RhcnQgcGFja2V0LgotKi8KLQkJaWYgKGF1 dG9kbAkJLyogQXV0b2Rvd25sb2FkIGVuYWJsZWQ/ICovCi0jaWZkZWYgSUtTX09QVElPTgotCQkg ICAgfHwgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydAotI2VuZGlmIC8q IElLU19PUFRJT04gKi8KLQkJICAgICkgewotCQkgICAgaW50IGsgPSAwOwotCi0JCSAgICBpZiAo a3N0YXJ0YWN0aXZlIHx8IGMgPT0gc3RjaHIgLyogS2VybWl0IFMgb3IgSSBwYWNrZXQ/ICovCi0j aWZkZWYgQ09NTUVOVAotCQkJfHwgYWRsX2ttb2RlID09IEFETFNUUiAvKiBOb3QgdXNlZCBpbiBD LUtlcm1pdCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJCSkKLQkJICAgICAgayA9IGtzdGFy dCgoQ0hBUiljKTsKLSNpZmRlZiBDS19YWVoKLQkJICAgIGlmICghayAmJiB6bWRsb2spCS8qIE9y IGFuICJzeiIgc3RhcnQ/ICovCi0JCSAgICAgIGsgPSB6c3RhcnQoKENIQVIpYyk7Ci0jZW5kaWYg LyogQ0tfWFlaICovCi0JCSAgICBpZiAoaykgewotCQkJaW50IGtzaWduID0gMDsKLQkJCWRlYnVn KEYxMDEsIkNPTk5FQ1QgYXV0b2Rvd25sb2FkIGsiLCIiLGspOwotCQkJaWYgKGsgPCAwKSB7IC8q IE1pbnVzLVByb3RvY29sPyAqLwotI2lmZGVmIE5PU0VSVkVSCi0JCQkgICAgZ290byBub3NlcnZl cjsgLyogTmVlZCBzZXJ2ZXIgbW9kZSBmb3IgdGhpcyAqLwotI2Vsc2UKLQkJCSAgICBrc2lnbiA9 IDE7IC8qIFJlbWVtYmVyICovCi0JCQkgICAgayA9IDAgLSBrOyAvKiBDb252ZXJ0IHRvIGFjdHVh bCBwcm90b2NvbCAqLwotCQkJICAgIGp1c3RvbmUgPSAxOyAvKiBGbGFnIGZvciBwcm90b2NvbCBt b2R1bGUgKi8KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCQkJfSBlbHNlCi0JCQkgIGp1c3RvbmUg PSAwOwotCQkJay0tOwkJLyogQWRqdXN0IFtrel1zdGFydCdzIHJldHVybiB2YWx1ZSAqLwotCQkJ aWYgKGsgPT0gUFJPVE9fSwotI2lmZGVmIENLX1hZWgotCQkJICAgIHx8IGsgPT0gUFJPVE9fWgot I2VuZGlmIC8qIENLX1hZWiAqLwotCQkJICAgICkgewotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIERhbWFnZSB0aGUgcGFja2V0IHNvIHRoYXQgaXQgZG9lc24ndCB0cmlnZ2VyICovCi0J CQkgICAgLyogYXV0b2Rvd25sb2FkIGRldGVjdGlvbiBkb3duc3RyZWFtLiAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChrID09IFBST1RPX0spIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGksIGxlbiA9IHN0cmxlbigoY2hhciAqKWtzYnVmKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQkJ CSAgY2tjcHV0YyhCUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIENL X1hZWgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Zm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJCQkgIGNrY3B1dGMoQ0FOKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0KLSNpZm5kZWYgTk9JQ1AK LQkJCSAgICAvKiBzcHJpbnRmIGlzIHNhZmUgaGVyZSAoYnVpbHRpbiBrZXl3b3JkcykgKi8KLQkJ CSAgICBzcHJpbnRmKGFwY2J1ZiwKLQkJCQkgICAgInNldCBwcm90byAlcywgJXMsIHNldCBwcm90 byAlcyIsCi0JCQkJICAgIHB0YWJba10ucF9uYW1lLAotCQkJCSAgICBrc2lnbiA/ICJzZXJ2ZXIi IDogInJlY2VpdmUiLAotCQkJCSAgICBwdGFiW3Byb3RvY29sXS5wX25hbWUKLQkJCQkgICAgKTsK LQkJCSAgICBhcGNsZW5ndGggPSBzdHJsZW4oYXBjYnVmKTsKLQkJCSAgICBkZWJ1ZyhGMTExLCJD T05ORUNUIGtzYnVmIixrc2J1ZixrKTsKLQkJCSAgICBkZWJ1ZyhGMTEwLCJDT05ORUNUIGF1dG9k b3dubG9hZCIsYXBjYnVmLDApOwotCQkJICAgIGFwY2FjdGl2ZSA9IEFQQ19MT0NBTDsKLQkJCSAg ICBja2NwdXRmKCk7CS8qIEZvcmNlIHNjcmVlbiB1cGRhdGUgKi8KLQkJCSAgICBjeF9zdGF0dXMg PSBDU1hfQVBDOwotCQkJICAgIGdvdG8gY29ucmV0MTsKLSNlbHNlCi0vKgotICBIZXJlJ3MgYW5v dGhlciB3YXkgdGhhdCBkb2Vzbid0IHJlcXVpcmUgQVBDLCBidXQgdGhlbiB3ZSdsbCBoYXZlIHRv IGNoYW5nZQotICBhbGwgdGhlIG90aGVyIENPTk5FQ1QgbW9kdWxlcywgYW5kIHRoZW4gdGhlIG1h aW5saW5lIGNvZGUgdGhhdCBjYWxscyB0aGVtLgotKi8KLQkJCSAgICB7Ci0JCQkJZXh0ZXJuIGNo YXIgc3N0YXRlOwotCQkJCXNzdGF0ZSA9IGtzaWduID8gJ3gnIDogJ3YnOwotCQkJCXByb3RvKCk7 Ci0JCQkgICAgfQotI2VuZGlmIC8qIE5PSUNQICovCi0JCQl9Ci0JCSAgICB9Ci0JCX0KLSNpZmRl ZiBOT1NFUlZFUgotCSAgICAgIG5vc2VydmVyOgotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0KLSNl bmRpZiAvKiBDS19BVVRPREwgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQkJaWYgKHNvc2kpIHsJ CS8qIEhhbmRsZSBTSS9TTyAqLwotCQkgICAgaWYgKGMgPT0gU08pIHsJLyogU2hpZnQgT3V0ICov Ci0JCQlpbnNoaWZ0ID0gMTsKLQkJCWNvbnRpbnVlOwotCQkgICAgfSBlbHNlIGlmIChjID09IFNJ KSB7IC8qIFNoaWZ0IEluICovCi0JCQlpbnNoaWZ0ID0gMDsKLQkJCWNvbnRpbnVlOwotCQkgICAg fQotCQkgICAgaWYgKGluc2hpZnQpIGMgfD0gMDIwMDsKLQkJfQotCQlpbnhidWZbMF0gPSBjOwkJ LyogSW4gY2FzZSB0aGVyZSBpcyBubyB0cmFuc2xhdGlvbiAqLwotCQlpbnhjb3VudCA9IDE7CQkv KiAuLi4gKi8KLSNpZm5kZWYgTk9DU0VUUwotCQlpZiAoaW5lc2NbMF0gPT0gRVNfTk9STUFMIC8q IElmIG5vdCBpbiBhbiBlc2NhcGUgc2VxdWVuY2UgKi8KLQkJICAgICYmICFwcmludGluZwkvKiBh bmQgbm90IGluIHRyYW5zcGFyZW50IHByaW50ICovCi0JCSAgICApIHsJCQkvKiBUcmFuc2xhdGUg Y2hhcmFjdGVyIHNldHMgKi8KLSNpZmRlZiBVTklDT0RFCi0JCSAgICBpbnQgeDsKLQkJICAgIGlm ICh1bmljb2RlID09IDEpIHsJLyogUmVtb3RlIGlzIFVURi04ICovCi0JCQl4ID0gdV90b19iKChD SEFSKWMpOwotCQkJaWYgKHggPT0gLTEpCi0JCQkgIGNvbnRpbnVlOwotCQkJZWxzZSBpZiAoeCA9 PSAtMikgeyAvKiBMUyBvciBQUyAqLwotCQkJICAgIGlueGJ1ZlswXSA9IENSOwotCQkJICAgIGlu eGJ1ZlsxXSA9IExGOwotCQkJICAgIGlueGNvdW50ID0gMjsKLQkJCX0gZWxzZSBpZiAoeCA9PSAt OSkgeyAvKiBVVEYtOCBlcnJvciAqLwotCQkJICAgIGlueGJ1ZlswXSA9ICc/JzsKLQkJCSAgICBp bnhidWZbMV0gPSB1X3RvX2IyKCk7Ci0JCQkgICAgaW54Y291bnQgPSAyOwotCQkJfSBlbHNlIHsK LQkJCSAgICBpbnhidWZbMF0gPSAodW5zaWduZWQpKHggJiAweGZmKTsKLQkJCX0KLQkJCWMgPSBp bnhidWZbMF07Ci0JCSAgICB9IGVsc2UgaWYgKHVuaWNvZGUgPT0gMikgeyAvKiBMb2NhbCBpcyBV VEYtOCAqLwotCQkJaW54Y291bnQgPSBiX3RvX3UoKENIQVIpYyxpbnhidWYsT1VUWEJVRlNJWix0 Y3NzaXplKTsKLQkJCWMgPSBpbnhidWZbMF07Ci0JCSAgICB9IGVsc2UgewotI2VuZGlmIC8qIFVO SUNPREUgKi8KLQkJCWlmIChzeGkpIGMgPSAoKnN4aSkoKENIQVIpYyk7Ci0JCQlpZiAocnhpKSBj ID0gKCpyeGkpKChDSEFSKWMpOwotCQkJaW54YnVmWzBdID0gYzsKLSNpZmRlZiBVTklDT0RFCi0J CSAgICB9Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCQl9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwot Ci0jaWZuZGVmIE5PRVNDU0VRCi0JCWlmIChlc2NzZXEpIHsJCS8qIElmIGhhbmRsaW5nIGVzY2Fw ZSBzZXF1ZW5jZXMgKi8KLQkJICAgIG9sZHBydCA9IHByaW50aW5nOwkgICAgIC8qIHJlbWVtYmVy IHByaW50ZXIgc3RhdGUgKi8KLQkJICAgIGFwY3JjID0gY2hrYWVzKChjaGFyKWMsMCk7IC8qIGFu ZCB1cGRhdGUgZXNjc2VxIHN0YXRlLiAqLwotCQkgICAgaWYgKHByaW50aW5nICYmICFvbGRwcnQp IC8qIElmIHByaW50ZXIgd2FzIHR1cm5lZCBvbiAqLwotCQkgICAgICBjb250aW51ZTsJCS8qIGRv bid0IHByaW50IGZpbmFsIGNoYXIgb2YgZXNjc2VxICovCi0JCX0KLSNpZmRlZiBDS19BUEMKLS8q Ci0gIElmIHdlIGFyZSBoYW5kbGluZyBBUENzLCB3ZSBoYXZlIHNldmVyYWwgcG9zc2liaWxpdGll cyBhdCB0aGlzIHBvaW50OgotICAgMS4gT3JkaW5hcnkgY2hhcmFjdGVyIHRvIGJlIHdyaXR0ZW4g dG8gdGhlIHNjcmVlbi4KLSAgIDIuIEFuIEVzYzsgd2UgY2FuJ3Qgd3JpdGUgaXQgYmVjYXVzZSBp dCBtaWdodCBiZSB0aGUgYmVnaW5uaW5nIG9mIGFuIEFQQy4KLSAgIDMuIFRoZSBjaGFyYWN0ZXIg Zm9sbG93aW5nIGFuIEVzYywgaW4gd2hpY2ggY2FzZSB3ZSB3cml0ZSBFc2MsIHRoZW4gY2hhciwK LSAgICAgIGJ1dCBvbmx5IGlmIHdlIGhhdmUgbm90IGp1c3QgZW50ZXJlZCBhbiBBUEMgc2VxdWVu Y2UuCi0qLwotCQlpZiAoZXNjc2VxICYmIChhcGNzdGF0dXMgJiBBUENfT04pKSB7Ci0JCSAgICBp ZiAoaW5lc2NbMF0gPT0gRVNfR09URVNDKSAvKiBEb24ndCB3cml0ZSBFU0MgeWV0ICovCi0JCSAg ICAgIGNvbnRpbnVlOwotCQkgICAgZWxzZSBpZiAob2xkZXNjWzBdID09IEVTX0dPVEVTQyAmJiAh YXBjYWN0aXZlKSB7Ci0JCQlja2NwdXRjKEVTQyk7CS8qIFdyaXRlIHNhdmVkIEVTQyAqLwotCQkJ aWYgKHNlc2xvZyAmJiAhc2Vzc2Z0KSBMT0dDSEFSKChjaGFyKUVTQyk7Ci0JCSAgICB9IGVsc2Ug aWYgKGFwY3JjKSB7CS8qIFdlIGhhdmUgYW4gQVBDICovCi0JCQlkZWJ1ZyhGMTExLCJDT05ORUNU IEFQQyBjb21wbGV0ZSIsYXBjYnVmLGFwY2xlbmd0aCk7Ci0JCQlja2NwdXRmKCk7CS8qIEZvcmNl IHNjcmVlbiB1cGRhdGUgKi8KLQkJCWN4X3N0YXR1cyA9IENTWF9BUEM7Ci0JCQlnb3RvIGNvbnJl dDE7Ci0JCSAgICB9Ci0JCX0KLSNlbmRpZiAvKiBDS19BUEMgKi8KLSNlbmRpZiAvKiBOT0VTQ1NF USAqLwotCi0JCWRlYnVnKEYxMTEsIklOWEJVRiIsaW54YnVmLGlueGNvdW50KTsKLQkJZm9yIChp ID0gMDsgaSA8IGlueGNvdW50OyBpKyspIHsgLyogTG9vcCB0aHJ1ICovCi0JCSAgICBjID0gaW54 YnVmW2ldOwkvKiBpbnB1dCBleHBhbnNpb24gYnVmZmVyLi4uICovCi0JCSAgICBpZiAoCi0jaWZk ZWYgQ0tfQVBDCi0JCQkhYXBjYWN0aXZlICYmCS8qIERvbid0IGRpc3BsYXkgQVBDIHNlcXVlbmNl cyAqLwotI2VuZGlmIC8qIENLX0FQQyAqLwotCQkJIXByaW50aW5nCS8qIG9yIHRyYW5zcGFyZW50 IHByaW50IG1hdGVyaWFsICovCi0KLQkJCSkgewotCQkJYyAmPSBjbWRtc2s7CS8qIEFwcGx5IGNv bW1hbmQgbWFzay4gKi8KLQotCQkJLyogSGFuZGxlIGJhcmUgY2FycmlhZ2UgcmV0dXJucyBhbmQg bGluZWZlZWRzICovCi0KLQkJCWlmIChjID09IENSICYmIHR0X2NyZCkgeyAvKiBTRVQgVEVSTSBD Ui1ESVNQTEEgQ1JMRj8gKi8KLQkJCSAgICBja2NwdXRjKGMpOwkvKiBZZXMsIG91dHB1dCBDUiAq LwotCQkJICAgIGlmIChzZXNsb2cgJiYgIXNlc3NmdCkgTE9HQ0hBUigoY2hhciljKTsKLQkJCSAg ICBjID0gTEY7CS8qIGFuZCBpbnNlcnQgYSBsaW5lZmVlZCAqLwotCQkJfQotCQkJaWYgKGMgPT0g TEYgJiYgdHRfbGZkKSB7IC8qIFNFVCBURVJNIENSLURJU1BMQSBDUkxGPyAqLwotCQkJICAgIGNr Y3B1dGMoQ1IpOyAvKiBZZXMsIG91dHB1dCBDUiAqLwotCQkJICAgIGlmIChzZXNsb2cgJiYgIXNl c3NmdCkgTE9HQ0hBUigoY2hhcilDUik7Ci0JCQl9Ci0jaWZuZGVmIE5PRVNDU0VRCi0JCQlpZiAo ZG9udHByaW50KQl7IC8qIERvIHRyYW5zcGFyZW50IHByaW50aW5nLiAqLwotCQkJICAgIGRvbnRw cmludCA9IDA7Ci0JCQkgICAgY29udGludWU7Ci0JCQl9IGVsc2UKLSNlbmRpZgkvKiBOT0VTQ1NF USAqLwotCQkJY2tjcHV0YyhjKTsJLyogV3JpdGUgY2hhcmFjdGVyIHRvIHNjcmVlbiAqLwotCQkg ICAgfQotCQkgICAgaWYgKHNlc2xvZyAmJiAhc2Vzc2Z0KSB7IC8qIEhhbmRsZSBzZXNzaW9uIGxv Zy4gKi8KLQkJCUxPR0NIQVIoKGNoYXIpYyk7Ci0JCSAgICB9Ci0jaWZkZWYgWFBSSU5UCi0JCSAg ICBpZiAocHJpbnRpbmcgJiYgIWluZXNjWzBdKSB7Ci0JCQkvKiB6Y2hvdXQoKSBjYW4ndCBiZSB1 c2VkIGJlY2F1c2UgKi8KLQkJCS8qIGl0J3MgYnVmZmVyZWQgZGlmZmVyZW50bHkuICovCi0JCQlj YnVmWzBdID0gYzsKLQkJCXpzb3V0eChaTUZJTEUsKGNoYXIgKiljYnVmLDEpOwotCQkgICAgfQot I2VuZGlmIC8qIFhQUklOVCAqLwotCi0jaWZkZWYgQ0tfVFJJR0dFUgotCQkgICAgLyogQ2hlY2sg Zm9yIHRyaWdnZXIgc3RyaW5nICovCi0JCSAgICBpZiAodHRfdHJpZ2dlclswXSkgewotCQkJaW50 IGk7Ci0JCQlpZiAoKGkgPSBhdXRvZXhpdGNoaygoQ0hBUiljKSkgPiAtMSkgewotCQkJICAgIG1h a2VzdHIoJnRyaWdnZXJ2YWwsdHRfdHJpZ2dlcltpXSk7Ci0JCQkgICAgY2tjcHV0ZigpOwkvKiBG b3JjZSBzY3JlZW4gdXBkYXRlICovCi0jaWZkZWYgTk9TRVRCVUYKLQkJCSAgICBmZmx1c2goc3Rk b3V0KTsgLyogSSBtZWFuIHJlYWxseSBmb3JjZSBpdCAqLwotI2VuZGlmIC8qIE5PU0VUQlVGICov Ci0JCQkgICAgY3hfc3RhdHVzID0gQ1NYX1RSSUdHRVI7Ci0JCQkgICAgZ290byBjb25yZXQxOwot CQkJfQotCQkgICAgfQotI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KLQkJfQotCSAgICB9Ci0JfQot I2lmbmRlZiBCRUJPWAotCWlmIChGRF9JU1NFVChzY3Jub3V0LCAmb3V0KSkgewotCSAgICBGRF9D TFIoc2Nybm91dCwgJm91dCk7Ci0JfQotI2VuZGlmIC8qIEJFQk9YICovCi0gICAgfSAvKiBFbmQg b2YgYmlnIGxvb3AgKi8KLSAgY29ucmV0MToJCQkJLyogQ29tZSBoZXJlIHRvIHN1Y2NlZWQgKi8K LSAgICByYyA9IDE7Ci0gIGNvbnJldDA6CQkJCS8qIENvbW1vbiBleGl0IHBvaW50ICovCi0jaWZk ZWYgQkVCT1gKLSAgICB7Ci0JbG9uZyByZXRfdmFsOwotCWNsb3Nlc29ja2V0KHBhaXJbMF0pOwot CWNsb3Nlc29ja2V0KHBhaXJbMV0pOwotCXggPSBraWxsKHRpZCxTSUdLSUxMVEhSKTsJLyogS2ls bCB0aHJlYWQgKi8KLQl3YWl0X2Zvcl90aHJlYWQgKHRpZCwgJnJldF92YWwpOwotICAgIH0KLSNl bmRpZiAvKiBCRUJPWCAqLwotCi0jaWZkZWYgQ0tMRUFSTgotICAgIGlmIChsZWFybmluZyAmJiBs ZWFybmZwKQotICAgICAgZnB1dHMoIlxuIixsZWFybmZwKTsKLSNlbmRpZiAvKiBDS0xFQVJOICov Ci0KLSAgICBjb25yZXMoKTsKLSAgICBpZiAoZG9oYW5ndXAgPiAwKSB7Ci0jaWZkZWYgTkVUQ09O TgotCWlmIChuZXR3b3JrCi0jaWZkZWYgVE5DT0RFCi0JICAgICYmICFURUxPUFRfTUUoVEVMT1BU X0NPTVBPUlQpCi0jZW5kaWYgLyogVE5DT0RFICovCi0JICAgICkKLQkgIHR0Y2xvcygwKTsKLSNl bmRpZiAvKiBORVRDT05OICovCi0KLSNpZm5kZWYgQ09NTUVOVAotLyoKLSAgVGhpcyBpcyBiYWQg YmVjYXVzZSBpZiB0aGV5IHNhaWQgU0VUIE1PREVNIEhBTkdVUC1NRVRIT0QgTU9ERU0tQ09NTUFO RCwKLSAgdGhleSBtZWFuIGl0IC0tIHdlIHNob3VsZG4ndCBmYWxsIGJhY2sgb24gdHRoYW5nKCkg aWYgbWRtaHVwKCkgZmFpbHMsCi0gIGJlY2F1c2UgbWF5YmUgdGhleSBoYXZlIHNvbWUgc3BlY2lh bCBraW5kIG9mIGNvbm5lY3Rpb24uICBPbiB0aGUgb3RoZXIKLSAgaGFuZCwgbWFraW5nIHRoaXMg Y2hhbmdlIHByZXZlbnRzIGRpYWxpbmcgZnJvbSB3b3JraW5nIGF0IGFsbCBpbiBzb21lCi0gIGNh c2VzLiAgRnVydGhlciBzdHVkeSBuZWVkZWQuCi0qLwotI2lmbmRlZiBOT0RJQUwKLQlpZiAoZG9o YW5ndXAgPiAxKQkJLyogVXNlciBhc2tlZCBmb3IgaXQgKi8KLQkgIGlmIChtZG1odXAoKSA8IDEp CQkvKiBNYXliZSBoYW5nIHVwIHZpYSBtb2RlbSAqLwotI2VuZGlmIC8qIE5PRElBTCAqLwotCSAg ICB0dGhhbmcoKTsJCQkvKiBBbmQgbWFrZSBzdXJlIHdlIGRvbid0IGhhbmcgdXAgKi8KLSNlbHNl Ci0JaWYgKCFuZXR3b3JrKSB7CQkJLyogU2VyaWFsIGNvbm5lY3Rpb24uICovCi0jaWZuZGVmIE5P RElBTAotCSAgICBpZiAoZGlhbG1odSkJCS8qIEhhbmcgdXAgdGhlIHdheSB0aGV5IHNhaWQgdG8u ICovCi0JICAgICAgbWRtaHVwKCk7Ci0JICAgIGVsc2UKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQkg ICAgICB0dGhhbmcoKTsKLQl9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCWRvbG9nZW5kKCk7Ci0J ZG9oYW5ndXAgPSAwOwkJCS8qIGFnYWluIHVubGVzcyByZXF1ZXN0ZWQgYWdhaW4uICovCi0gICAg fQotICAgIGlmIChxdWl0bm93KQkJCS8qIEV4aXQgbm93IGlmIHJlcXVlc3RlZC4gKi8KLSAgICAg IGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsKLSAgICBpZiAobXNnZmxnCi0jaWZkZWYgQ0tfQVBD Ci0JJiYgIWFwY2FjdGl2ZQotI2VuZGlmIC8qIENLX0FQQyAqLwotCSkKLSAgICAgIHByaW50Zigi KEJhY2sgYXQgJXMpIiwgKm15aG9zdCA/IG15aG9zdCA6ICJsb2NhbCBVTklYIHN5c3RlbSIpOwot I2lmZGVmIENLX0FQQwotICAgIGlmICghYXBjYWN0aXZlKQotI2VuZGlmIC8qIENLX0FQQyAqLwot ICAgICAgcHJpbnRmKCJcbiIpOwotICAgIHdoYXQgPSBXX05PVEhJTkc7CQkJLyogU28gY29uc29s ZSBtb2RlcyBzZXQgcmlnaHQuICovCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICBsYW5ndWFnZSA9IGxh bmdzdjsJCQkvKiBSZXN0b3JlIGxhbmd1YWdlICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotI2lm ZGVmIENLX0FQQwotICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgZXhpdCBhcGNhY3RpdmUiLCIiLGFw Y2FjdGl2ZSk7Ci0gICAgZGVidWcoRjEwMSwiQ09OTkVDVCBleGl0IGp1c3RvbmUiLCIiLGp1c3Rv bmUpOwotI2VuZGlmIC8qIENLX0FQQyAqLwotICAgIGlmIChtc2dmbGcpIHsKLSNpZmRlZiBDS19B UEMKLQlpZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCkKLQkgIHByaW50ZigiXG4iKTsKLSNlbmRp ZiAvKiBDS19BUEMgKi8KLQlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCXByaW50YmFyID0gMTsKLSAgICB9IGVsc2UKLQlw cmludGJhciA9IDA7Ci0gICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQot LyogIEggQyBPIE4gTiBFICAtLSAgR2l2ZSBoZWxwIG1lc3NhZ2UgZm9yIGNvbm5lY3QuICAqLwot Ci0jZGVmaW5lIENYTV9TRVIgMQkJCS8qIFNlcmlhbCBjb25uZWN0aW9ucyBvbmx5ICovCi0jZGVm aW5lIENYTV9ORVQgMgkJCS8qIE5ldHdvcmsgb25seSAoYnV0IG5vdCBUZWxuZXQpICovCi0jZGVm aW5lIENYTV9URUwgNAkJCS8qIFRlbG5ldCBvbmx5ICovCi0KLXN0YXRpYyBzdHJ1Y3QgaG1zZ3Rh YiB7Ci0gICAgY2hhciAqIGhtc2c7Ci0gICAgaW50IGhmbGFnczsKLX0gaGxwbXNnW10gPSB7Ci0g ICAgeyIgID8gb3IgSCBmb3IgdGhpcyBtZXNzYWdlIiwgICAgICAgICAgICAgICAgMH0sCi0gICAg eyIgIDAgKHplcm8pIHRvIHNlbmQgdGhlIE5VTCAoMCkgY2hhcmFjdGVyIiwgMH0sCi0gICAgeyIg IEIgdG8gc2VuZCBhIEJSRUFLIHNpZ25hbCAoMC4yNzVzZWMpIiwgIENYTV9TRVJ9LAotI2lmZGVm IE5FVENPTk4KLSAgICB7IiAgQiB0byBzZW5kIGEgbmV0d29yayBCUkVBSyIsICAgICAgICAgICAg Q1hNX05FVH0sCi0gICAgeyIgIEIgdG8gc2VuZCBhIFRlbG5ldCBCUkVBSyIsICAgICAgICAgICAg IENYTV9URUx9LAotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNpZmRlZiBDS19MQlJLCi0gICAgeyIg IEwgdG8gc2VuZCBhIExvbmcgQlJFQUsgKDEuNXNlYykiLCAgICAgIENYTV9TRVJ9LAotI2VuZGlm IC8qIENLX0xCUksgKi8KLSNpZmRlZiBORVRDT05OCi0gICAgeyIgIEkgdG8gc2VuZCBhIG5ldHdv cmsgaW50ZXJydXB0IHBhY2tldCIsIENYTV9ORVR9LAotICAgIHsiICBJIHRvIHNlbmQgYSBUZWxu ZXQgSW50ZXJydXB0IHJlcXVlc3QiLCBDWE1fVEVMfSwKLSNpZmRlZiBUTkNPREUKLSAgICB7IiAg QSB0byBzZW5kIFRlbG5ldCBBcmUtWW91LVRoZXJlPyIsICAgICAgQ1hNX1RFTH0sCi0jZW5kaWYg LyogVE5DT0RFICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotICAgIHsiICBVIHRvIGhhbmd1cCBh bmQgY2xvc2UgdGhlIGNvbm5lY3Rpb24iLCAwfSwKLSAgICB7IiAgUSB0byBoYW5ndXAgYW5kIHF1 aXQgS2VybWl0IiwgICAgICAgICAgMH0sCi0gICAgeyIgIFMgZm9yIHN0YXR1cyIsICAgICAgICAg ICAgICAgICAgICAgICAgIDB9LAotI2lmZGVmIE5PUFVTSAotICAgIHsiICAhIHRvIHB1c2ggdG8g bG9jYWwgc2hlbGwgKGRpc2FibGVkKSIsICAwfSwKLSAgICB7IiAgWiB0byBzdXNwZW5kIChkaXNh YmxlZCkiLCAgICAgICAgICAgICAgMH0sCi0jZWxzZQotICAgIHsiICAhIHRvIHB1c2ggdG8gbG9j YWwgc2hlbGwiLCAgICAgICAgICAgICAwfSwKLSNpZmRlZiBOT0pDCi0gICAgeyIgIFogdG8gc3Vz cGVuZCAoZGlzYWJsZWQpIiwgICAgICAgICAgICAgIDB9LAotI2Vsc2UKLSAgICB7IiAgWiB0byBz dXNwZW5kIiwgICAgICAgICAgICAgICAgICAgICAgICAgMH0sCi0jZW5kaWYgLyogTk9KQyAqLwot I2VuZGlmIC8qIE5PUFVTSCAqLwotICAgIHsiICBcXCBiYWNrc2xhc2ggY29kZToiLCAgICAgICAg ICAgICAgICAgICAwfSwKLSAgICB7IiAgICBcXG5ubiAgZGVjaW1hbCBjaGFyYWN0ZXIgY29kZSIs ICAgICAgMH0sCi0gICAgeyIgICAgXFxPbm5uIG9jdGFsIGNoYXJhY3RlciBjb2RlIiwgICAgICAg IDB9LAotICAgIHsiICAgIFxcWGhoICBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIgY29kZTsiLCAwfSwK LSAgICB7IiAgICB0ZXJtaW5hdGUgd2l0aCBDYXJyaWFnZSBSZXR1cm4uIiwgICAgMH0sCi0gICAg eyIgIFR5cGUgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgYWdhaW4gdG8gc2VuZCB0aGUgZXNjYXBlIGNo YXJhY3RlciBpdHNlbGYsIiwKLSAgICAgICAwfSwKLSAgICB7IiAgb3IgcHJlc3MgdGhlIHNwYWNl LWJhciB0byByZXN1bWUgdGhlIENPTk5FQ1Qgc2Vzc2lvbi4iLCAwfSwKLSAgICB7TlVMTCwgMH0K LX07Ci0KLWludAotaGNvbm5lKCkgewotICAgIGludCBjLCBpLCBjeHR5cGU7Ci0gICAgaWYgKG5l dHdvcmspCi0gICAgICBjeHR5cGUgPSBJU19URUxORVQoKSA/IENYTV9URUwgOiBDWE1fTkVUOwot ICAgIGVsc2UKLSAgICAgIGN4dHlwZSA9IENYTV9TRVI7Ci0KLSAgICBjb25vbCgiXHJcbi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIik7Ci0g ICAgY29ub2xsKCJQcmVzczoiKTsKLSAgICBjb25vbCgiICBDIHRvIHJldHVybiB0byAiKTsKLSAg ICBjb25vbGwoKm15aG9zdCA/IG15aG9zdCA6ICJ0aGUgQy1LZXJtaXQgcHJvbXB0Iik7Ci0gICAg Zm9yIChpID0gMDsgaGxwbXNnW2ldLmhtc2c7IGkrKykgewotCWlmICghKGhscG1zZ1tpXS5oZmxh Z3MpIHx8IChobHBtc2dbaV0uaGZsYWdzID09IGN4dHlwZSkpCi0JICBjb25vbGwoaGxwbXNnW2ld Lmhtc2cpOwotICAgIH0KLSAgICBjb25vbCgiUHJlc3MgYSBrZXk+Iik7CQkvKiBQcm9tcHQgZm9y IGNvbW1hbmQuICovCi0gICAgYyA9IENPTkdLUygpICYgMDE3NzsJCS8qIEdldCBjaGFyYWN0ZXIs IHN0cmlwIGFueSBwYXJpdHkuICovCi0gICAgLyogTm8ga2V5IG1hcHBpbmcgb3IgdHJhbnNsYXRp b24gaGVyZSAqLwotICAgIGlmIChjICE9IENNRFEpCi0gICAgICBjb25vbGwoIiIpOwotICAgIGNv bm9sbCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSIpOwotICAgIHJldHVybihjKTsJCQkJLyogUmV0dXJuIGl0LiAqLwotfQotCi0KLS8qICBEIE8g RSBTIEMgIC0tICBQcm9jZXNzIGFuIGVzY2FwZSBjaGFyYWN0ZXIgYXJndW1lbnQgICovCi0KLVZP SUQKLSNpZmRlZiBDS19BTlNJQwotZG9lc2MoY2hhciBjKQotI2Vsc2UKLWRvZXNjKGMpIGNoYXIg YzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZG9lc2MgKi8gewotICAgIENIQVIgZDsKLQot ICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgZG9lc2MiLCIiLGMpOwotICAgIHdoaWxlICgxKSB7Ci0J aWYgKGMgPT0gZXNjYXBlKSB7CQkvKiBTZW5kIGVzY2FwZSBjaGFyYWN0ZXIgKi8KLQkgICAgZCA9 IGRvcGFyKChDSEFSKSBjKTsgdHRvYygoY2hhcikgZCk7IHJldHVybjsKLSAgICAJfSBlbHNlCQkJ CS8qIE9yIGVsc2UgbG9vayBpdCB1cCBiZWxvdy4gKi8KLQkgICAgaWYgKGlzdXBwZXIoYykpIGMg PSB0b2xvd2VyKGMpOwotCi0Jc3dpdGNoKGMpIHsKLQotCSAgY2FzZSAnYyc6CQkJLyogRXNjYXBl IGJhY2sgdG8gcHJvbXB0ICovCi0JICBjYXNlICdcMDMnOgotCSAgICBjeF9zdGF0dXMgPSBDU1hf RVNDQVBFOwotI2lmZGVmIE5PSUNQCi0JICAgIGNvbm9sbCgiIik7Ci0JICAgIGNvbm9sbCgiIik7 Ci0JICAgIGNvbm9sbCgKLSIgIFdBUk5JTkc6IFRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdCBoYXMg bm8gY29tbWFuZCBwcm9jZXNzb3IgdG8gZXNjYXBlIgotCQkgICApOwotCSAgICBjb25vbGwoCi0i ICBiYWNrIHRvLiAgVG8gcmV0dXJuIHRvIHlvdXIgbG9jYWwgc3lzdGVtLCBsb2cgb3V0IGZyb20g dGhlIHJlbW90ZSBhbmQvb3IiCi0JCSAgICk7Ci0JICAgIGNvbm9sbCgKLSIgIHVzZSB0aGUgZXNj YXBlIGNoYXJhY3RlciBmb2xsb3dlZCBieSB0aGUgbGV0dGVyIFUgdG8gY2xvc2UgKGhhbmcgVXAp IHRoZSIKLQkJICAgKTsKLQkgICAgY29ub2xsKAotIiAgY29ubmVjdGlvbi4gIFJlc3VtaW5nIHlv dXIgc2Vzc2lvbi4uLiIKLQkJICAgKTsKLQkgICAgY29ub2xsKCIiKTsKLQkgICAgcmV0dXJuOwot I2Vsc2UKLQkgICAgYWN0aXZlID0gMDsgY29ub2woIlxyXG4iKTsgcmV0dXJuOwotI2VuZGlmIC8q IE5PSUNQICovCi0KLQkgIGNhc2UgJ2InOgkJCS8qIFNlbmQgYSBCUkVBSyBzaWduYWwgKi8KLQkg IGNhc2UgJ1wwMic6Ci0jaWZkZWYgQ0tMRUFSTgotCSAgICBsZWFybmNoYXIoLTcpOwotI2VuZGlm IC8qIENLTEVBUk4gKi8KLQkgICAgdHRzbmRiKCk7IHJldHVybjsKLQotI2lmZGVmIE5FVENPTk4K LQkgIGNhc2UgJ2knOgkJCS8qIFNlbmQgSW50ZXJydXB0ICovCi0JICBjYXNlICdcMDExJzoKLSNp ZmRlZiBUQ1BTT0NLRVQKLQkgICAgaWYgKG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHsgLyogVEVM TkVUICovCi0JCXRlbXBbMF0gPSAoQ0hBUikgSUFDOwkvKiBJIEFtIGEgQ29tbWFuZCAqLwotCQl0 ZW1wWzFdID0gKENIQVIpIFROX0lQOwkvKiBJbnRlcnJ1cHQgUHJvY2VzcyAqLwotCQl0ZW1wWzJd ID0gTlVMOwotCQl0dG9sKChDSEFSICopdGVtcCwyKTsKLQkgICAgfSBlbHNlCi0jZW5kaWYgLyog VENQU09DS0VUICovCi0JICAgICAgY29ub2MoQkVMKTsKLQkgICAgcmV0dXJuOwotCi0jaWZkZWYg VENQU09DS0VUCi0JICBjYXNlICdhJzoJCQkvKiAiQXJlIFlvdSBUaGVyZT8iICovCi0JICBjYXNl ICdcMDEnOgotCSAgICBpZiAobmV0d29yayAmJiBJU19URUxORVQoKSkgewotCQl0ZW1wWzBdID0g KENIQVIpIElBQzsJLyogSSBBbSBhIENvbW1hbmQgKi8KLQkJdGVtcFsxXSA9IChDSEFSKSBUTl9B WVQ7IC8qIEFyZSBZb3UgVGhlcmU/ICovCi0JCXRlbXBbMl0gPSBOVUw7Ci0JCXR0b2woKENIQVIg Kil0ZW1wLDIpOwotCSAgICB9IGVsc2UgY29ub2MoQkVMKTsKLQkgICAgcmV0dXJuOwotI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmZGVmIENLX0xCUksK LQkgIGNhc2UgJ2wnOgkJCS8qIFNlbmQgYSBMb25nIEJSRUFLIHNpZ25hbCAqLwotI2lmZGVmIENL TEVBUk4KLQkgICAgbGVhcm5jaGFyKC04KTsKLSNlbmRpZiAvKiBDS0xFQVJOICovCi0JICAgIHR0 c25kbGIoKTsgcmV0dXJuOwotI2VuZGlmIC8qIENLX0xCUksgKi8KLQotCSAgY2FzZSAndSc6CQkJ LyogSGFuZ3VwICovCi0gICAgICAgLyogY2FzZSAnXDAxMCc6ICovCQkvKiBObywgdG9vIGRhbmdl cm91cyAqLwotCSAgICBjeF9zdGF0dXMgPSBDU1hfVVNFUkRJU0M7Ci0JICAgIGRvaGFuZ3VwID0g MjsgYWN0aXZlID0gMDsgY29ub2woIlxyXG5IYW5naW5nIHVwICIpOyByZXR1cm47Ci0KLQkgIGNh c2UgJ3EnOgkJCS8qIFF1aXQgKi8KLQkgICAgY3hfc3RhdHVzID0gQ1NYX1VTRVJESVNDOwotCSAg ICBkb2hhbmd1cCA9IDI7IHF1aXRub3cgPSAxOyBhY3RpdmUgPSAwOyBjb25vbCgiXHJcbiIpOyBy ZXR1cm47Ci0KLQkgIGNhc2UgJ3MnOgkJCS8qIFN0YXR1cyAqLwotCSAgICBjb25vbGwoIiIpOwot CSAgICBjb25vbGwoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0iKTsKLSNpZmRlZiBQVFlPUlBJUEUKLQkgICAgaWYgKHR0cGlwZSkKLQkgICAgICBj a21ha21zZyh0ZW1wLFRNUExFTiwiIFBpcGU6IFwiIix0dG5hbWUsIlwiIixOVUxMKTsKLQkgICAg ZWxzZSBpZiAodHRwdHkpCi0JICAgICAgY2ttYWttc2codGVtcCxUTVBMRU4sIiBQdHk6IFwiIix0 dG5hbWUsIlwiIixOVUxMKTsKLQkgICAgZWxzZQotI2VuZGlmIC8qIFBUWU9SUElQRSAqLwotCSAg ICAgIGNrbWFrbXNnKHRlbXAsCi0JCSAgICAgICBUTVBMRU4sCi0JCSAgICAgICAiICIsCi0JCSAg ICAgICAobmV0d29yayA/ICJIb3N0IiA6ICJEZXZpY2UiKSwKLQkJICAgICAgICI6ICIsCi0JCSAg ICAgICB0dG5hbWUKLQkJICAgICAgICk7Ci0JICAgIGNvbm9sbCh0ZW1wKTsKLQotCSAgICAvKiBU aGUgZm9sbG93aW5nIHNwcmludGYncyBhcmUgc2FmZSwgdGVtcFtdIHNpemUgaXMgYXQgbGVhc3Qg MjAwICovCi0KLQkgICAgaWYgKCFuZXR3b3JrICYmIHNwZWVkID49IDBMKSB7Ci0JCXNwcmludGYo dGVtcCwiU3BlZWQgJWxkIiwgc3BlZWQpOwotCQljb25vbGwodGVtcCk7Ci0JICAgIH0KLQkgICAg c3ByaW50Zih0ZW1wLCIgVGVybWluYWwgZWNobzogJXMiLCBkdXBsZXggPyAibG9jYWwiIDogInJl bW90ZSIpOwotCSAgICBjb25vbGwodGVtcCk7Ci0JICAgIHNwcmludGYodGVtcCwiIFRlcm1pbmFs IGJ5dGVzaXplOiAlZCIsIChjbWFzayA9PSAwMTc3KSA/IDcgOiA4KTsKLQkgICAgY29ub2xsKHRl bXApOwotCSAgICBzcHJpbnRmKHRlbXAsIiBDb21tYW5kIGJ5dGVzaXplOiAlZCIsIChjbWRtc2sg PT0gMDE3NykgPyA3IDogOCk7Ci0JICAgIGNvbm9sbCh0ZW1wKTsKLSAgICAgICAgICAgIGlmICho d3Bhcml0eSkKLSAgICAgICAgICAgICAgc3ByaW50Zih0ZW1wLCIgUGFyaXR5W2hhcmR3YXJlXTog JXMiLHBhcm5hbShod3Bhcml0eSkpOwotICAgICAgICAgICAgZWxzZQkgICAgCi0gICAgICAgICAg ICAgIHNwcmludGYodGVtcCwiIFBhcml0eTogJXMiLCBwYXJuYW0ocGFyaXR5KSk7Ci0JICAgIGNv bm9sbCh0ZW1wKTsKLSNpZm5kZWYgTk9YRkVSCi0JICAgIHNwcmludGYodGVtcCwiIEF1dG9kb3du bG9hZDogJXMiLCBhdXRvZGwgPyAib24iIDogIm9mZiIpOwotCSAgICBjb25vbGwodGVtcCk7Ci0j ZW5kaWYgLyogTk9YRkVSICovCi0JICAgIGNrbWFrbXNnKHRlbXAsCQkvKiAod291bGQgbm90IGJl IHNhZmUgZm9yIHNwcmludGYpICovCi0JCSAgICAgVE1QTEVOLAotCQkgICAgICIgU2Vzc2lvbiBs b2c6ICIsCi0JCSAgICAgKnNlc2ZpbCA/IHNlc2ZpbCA6ICIobm9uZSkiLAotCQkgICAgIE5VTEws Ci0JCSAgICAgTlVMTAotCQkgICAgICk7Ci0JICAgIGNvbm9sbCh0ZW1wKTsKLSNpZm5kZWYgTk9T SE9XCi0JICAgIGlmICghbmV0d29yaykgc2hvbWRtKCk7Ci0jZW5kaWYgLyogTk9TSE9XICovCi0j aWZkZWYgQ0tMT0dESUFMCi0JICAgIHsKLQkJbG9uZyB6OwotCQl6ID0gZG9sb2dzaG93KDApOwot CQlpZiAoeiA+IC0xTCkgewotCQkgICAgc3ByaW50Zih0ZW1wLCIgRWxhcHNlZCB0aW1lOiAlcyIs aGhtbXNzKHopKTsKLQkJICAgIGNvbm9sbCh0ZW1wKTsKLQkJfQotCSAgICB9Ci0jZW5kaWYgLyog Q0tMT0dESUFMICovCi0JICAgIGNvbm9sbCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCSAgICByZXR1cm47Ci0KLQkgIGNhc2UgJ2gnOgkJ CS8qIEhlbHAgKi8KLQkgIGNhc2UgJz8nOgkJCS8qIEhlbHAgKi8KLQkgICAgYyA9IGhjb25uZSgp OyBjb250aW51ZTsKLQotCSAgY2FzZSAnMCc6CQkJLyogU2VuZCBhIG51bGwgKi8KLQkgICAgYyA9 ICdcMCc7IGQgPSBkb3BhcigoQ0hBUikgYyk7IHR0b2MoKGNoYXIpIGQpOyByZXR1cm47Ci0KLQkg IGNhc2UgJ3onOiBjYXNlICdcMDMyJzoJLyogU3VzcGVuZCAqLwotI2lmbmRlZiBOT1BVU0gKLQkg ICAgaWYgKCFub3B1c2gpCi0JICAgICAgc3RwdHJhcCgwKTsKLQkgICAgZWxzZQotCSAgICAgIGNv bm9jKEJFTCk7Ci0jZWxzZQotCSAgICBjb25vYyhCRUwpOwotI2VuZGlmIC8qIE5PUFVTSCAqLwot CSAgICByZXR1cm47Ci0KLQkgIGNhc2UgJ0AnOgkJCS8qIFN0YXJ0IGluZmVyaW9yIGNvbW1hbmQg cHJvY2Vzc29yICovCi0JICBjYXNlICchJzoKLSNpZm5kZWYgTk9QVVNICi0JICAgIGlmICghbm9w dXNoKSB7Ci0JCWNvbnJlcygpOwkJICAgICAgLyogUHV0IGNvbnNvbGUgYmFjayB0byBub3JtYWwg Ki8KLQkJenNoY21kKCIiKTsJCSAgICAgIC8qIEZvcmsgYSBzaGVsbC4gKi8KLQkJaWYgKGNvbmJp bigoY2hhcillc2NhcGUpIDwgMCkgewotCQkgICAgY3hfc3RhdHVzID0gQ1NYX0lOVEVSTkFMOwot CQkgICAgcHJpbnRmKCJFcnJvciByZXN1bWluZyBDT05ORUNUIHNlc3Npb25cbiIpOwotCQkgICAg YWN0aXZlID0gMDsKLQkJfQotCSAgICB9IGVsc2UgY29ub2MoQkVMKTsKLSNlbHNlCi0JICAgIGNv bm9jKEJFTCk7Ci0jZW5kaWYgLyogTk9QVVNIICovCi0JICAgIHJldHVybjsKLQotCSAgY2FzZSBT UDoJCQkvKiBTcGFjZSwgaWdub3JlICovCi0JICAgIHJldHVybjsKLQotCSAgZGVmYXVsdDoJCQkv KiBPdGhlciAqLwotCSAgICBpZiAoYyA9PSBDTURRKSB7CQkvKiBCYWNrc2xhc2ggZXNjYXBlICov Ci0JCWludCB4OwotCQllY2JwID0gZWNidWY7Ci0JCSplY2JwKysgPSBjOwotCQl3aGlsZSAoKChj ID0gKENPTkdLUygpICYgY21kbXNrKSkgIT0gJ1xyJykgJiYgKGMgIT0gJ1xuJykpCi0JCSAgKmVj YnArKyA9IGM7Ci0JCSplY2JwID0gTlVMOyBlY2JwID0gZWNidWY7Ci0JCXggPSB4eGVzYygmZWNi cCk7CS8qIEludGVycHJldCBpdCAqLwotCQlpZiAoeCA+PSAwKSB7CQkvKiBObyBrZXkgbWFwcGlu ZyBoZXJlICovCi0JCSAgICBjID0gZG9wYXIoKENIQVIpIHgpOwotCQkgICAgdHRvYygoY2hhcikg Yyk7Ci0JCSAgICByZXR1cm47Ci0JCX0gZWxzZSB7CQkvKiBJbnZhbGlkIGJhY2tzbGFzaCBjb2Rl LiAqLwotCQkgICAgY29ub2MoQkVMKTsKLQkJICAgIHJldHVybjsKLQkJfQotCSAgICB9Ci0JICAg IGNvbm9jKEJFTCk7IHJldHVybjsgCS8qIEludmFsaWQgZXNjIGFyZywgYmVlcCAqLwotICAgIAl9 Ci0gICAgfQotfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWNvbi5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3Vjb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggNTBjZWI3ZS4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrdWNvbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY5MCArMCwwIEBACi0jaW5jbHVk ZSAiY2tjc3ltLmgiCi0KLWNoYXIgKmNvbm52ID0gIkNPTk5FQ1QgQ29tbWFuZCBmb3IgVU5JWDpm b3JrKCksIDkuMC4xMTcsIDE0IEp1bCAyMDExIjsKLQotLyogIEMgSyBVIEMgTyBOICAtLSAgVGVy bWluYWwgY29ubmVjdGlvbiB0byByZW1vdGUgc3lzdGVtLCBmb3IgVU5JWCAgKi8KLS8qCi0gIEF1 dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCi0gIENvbHVtYmlhIFVuaXZl cnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KLQotICBD b3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVy c2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAg U2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0 ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25z LgotCi0gIE5PVEU6IFRoaXMgbW9kdWxlIGhhcyBiZWVuIHN1cGVyc2VkZWQgb24gbW9zdCBwbGF0 Zm9ybXMgYnkgY2t1Y25zLmMsIHdoaWNoCi0gIHVzZXMgc2VsZWN0KCkgcmF0aGVyIHRoYW4gZm9y aygpIGZvciBtdWx0aXBsZXhpbmcgaXRzIGkvby4gIFRoaXMgbW9kdWxlCi0gIGlzIHN0aWxsIG5l ZWRlZCBmb3IgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgc2VsZWN0KCksIGFuZCBhbHNv IGZvcgotICBpdHMgWC4yNSBzdXBwb3J0LiAgQWx0aG91Z2ggdGhlIHR3byBtb2R1bGVzIHNoYXJl IGxhcmdlIGFtb3VudHMgb2YgY29kZSwKLSAgdGhlaXIgc3RydWN0dXJlIGlzIHJhZGljYWxseSBk aWZmZXJlbnQgYW5kIHRoZXJlZm9yZSBhdHRlbXB0cyBhdCBtZXJnaW5nCi0gIHRoZW0gaGF2ZSBz byBmYXIgYmVlbiB1bnN1Y2Nlc3NmdWwuICAoTm92ZW1iZXIgMTk5OC4pCi0KLSAgU3BlY2lhbCB0 aGFua3MgdG8gRWR1YXJkIFZvcGlja2EsIFByYWd1ZSBVbml2ZXJzaXR5IG9mIEVjb25vbWljcywK LSAgQ3plY2ggUmVwdWJsaWMsIGZvciB2YWx1YWJsZSBjb250cmlidXRpb25zIHRvIHRoaXMgbW9k dWxlIGluIEp1bHkgMTk5NCwKLSAgYW5kIHRvIE5lYWwgUC4gTXVycGh5IG9mIHRoZSBNb3Rvcm9s YSBDZWxsdWxhciBJbmZyYXN0cnVjdHVyZSBHcm91cCBpbiAxOTk2Ci0gIGZvciByZWFycmFuZ2lu ZyB0aGUgY29kZSB0byBhbGxvdyBvcGVyYXRpb24gb24gdGhlIEJlQm94LCB5ZXQgc3RpbGwgd29y awotICBpbiByZWd1bGFyIFVOSVguCi0qLwotI2luY2x1ZGUgImNrY2RlYi5oIgkJCS8qIENvbW1v biB0aGluZ3MgZmlyc3QgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0KLSNpZmRlZiBCRU9TT1JCRUJP WAotc3RhdGljIGRvdWJsZSB0aW1lX3N0YXJ0ZWQgPSAwLjA7Ci0jaW5jbHVkZSA8a2VybmVsL09T Lmg+Ci1fUFJPVE9UWVAoIHN0YXRpYyBsb25nIGNvbmNsZCwgKHZvaWQgKikgKTsKLSNlbHNlCi1f UFJPVE9UWVAoIHN0YXRpYyBWT0lEIGNvbmNsZCwgKHZvaWQpICk7Ci0jZW5kaWYgLyogQkVPU09S QkVCT1ggKi8KLQotI2lmZGVmIE5FWFQKLSN1bmRlZiBOU0lHCi0jaW5jbHVkZSA8c3lzL3dhaXQu aD4JCQkvKiBGb3Igd2FpdCgpICovCi0jZW5kaWYgLyogTkVYVCAqLwotCi0jaW5jbHVkZSA8c2ln bmFsLmg+CQkJLyogU2lnbmFscyAqLwotCi0jaWZuZGVmIEhQVVhQUkU2NQotI2luY2x1ZGUgPGVy cm5vLmg+CQkJLyogRXJyb3IgbnVtYmVyIHN5bWJvbHMgKi8KLSNlbHNlCi0jaWZuZGVmIEVSUk5P X0lOQ0xVREVECi0jaW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9scyAq LwotI2VuZGlmCS8qIEVSUk5PX0lOQ0xVREVEICovCi0jZW5kaWYJLyogSFBVWFBSRTY1ICovCi0K LSNpZmRlZiBaSUxPRwkJCQkvKiBMb25nanVtcHMgKi8KLSNpbmNsdWRlIDxzZXRyZXQuaD4KLSNl bHNlCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0jZW5kaWYgLyogWklMT0cgKi8KLSNpbmNsdWRlICJj a2NzaWcuaCIKLQotLyogS2VybWl0LXNwZWNpZmljIGluY2x1ZGVzICovCi0KLSNpbmNsdWRlICJj a2Nhc2MuaCIJCQkvKiBBU0NJSSBjaGFyYWN0ZXJzICovCi0jaW5jbHVkZSAiY2tja2VyLmgiCQkJ LyogS2VybWl0IHRoaW5ncyAqLwotI2luY2x1ZGUgImNrdWNtZC5oIgkJCS8qIEZvciB4eGVzYygp IHByb3RvdHlwZSAqLwotI2luY2x1ZGUgImNrY25ldC5oIgkJCS8qIE5ldHdvcmsgc3ltYm9scyAq LwotI2lmbmRlZiBOT0NTRVRTCi0jaW5jbHVkZSAiY2tjeGxhLmgiCQkJLyogQ2hhcmFjdGVyIHNl dCB0cmFuc2xhdGlvbiAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotLyogSW50ZXJuYWwgZnVu Y3Rpb24gcHJvdG90eXBlcyAqLwotCi1fUFJPVE9UWVAoIFZPSUQgdHRmbHV4LCAodm9pZCkgKTsK LV9QUk9UT1RZUCggVk9JRCBkb2VzYywgKGNoYXIpICk7Ci1fUFJPVE9UWVAoIFZPSUQgbG9nY2hh ciwgKGNoYXIpICk7Ci1fUFJPVE9UWVAoIGludCBoY29ubmUsICh2b2lkKSApOwotI2lmbmRlZiBO T1NIT1cKLV9QUk9UT1RZUCggVk9JRCBzaG9tZG0sICh2b2lkKSApOwotI2VuZGlmIC8qIE5PU0hP VyAqLwotX1BST1RPVFlQKCBzdGF0aWMgaW50IGtiZ2V0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCgg c3RhdGljIGludCBwaXBlbXNnLCAoaW50KSApOwotX1BST1RPVFlQKCBzdGF0aWMgaW50IGNrY3B1 dGYsICh2b2lkKSApOwotX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBja19zbmRtc2csICh2b2lkKSAp OwotLyoKLSAgRm9yIGludGVyLWZvcmsgc2lnbmFsaW5nLiAgTm9ybWFsbHkgd2UgdXNlIFNJR1VT UjEsIGV4Y2VwdCBvbiBTQ08sIHdoZXJlCi0gIHdlIHVzZSBTSUdVU1IyIGJlY2F1c2UgU0lHVVNS MSBpcyB1c2VkIGJ5IHRoZSBzeXN0ZW0uICBZb3UgY2FuIGRlZmluZQotICBDS19GT1JLX1NJRyB0 byBiZSB3aGF0ZXZlciBvdGhlciBzaWduYWwgeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGF0IGNvbXBp bGUKLSAgdGltZS4gIFdlIGRvbid0IHVzZSBTSUdVU1IyIGV2ZXJ5d2hlcmUgYmVjYXVzZSBpbiBz b21lIHN5c3RlbXMsIGxpa2UKLSAgVW5peFdhcmUsIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgU0lH VVNSMiBpcyB0byBraWxsIHRoZSBwcm9jZXNzIHRoYXQgZ2V0cyBpdC4KLSovCi0jaWZuZGVmIENL X0ZPUktfU0lHCi0KLSNpZm5kZWYgU0lHVVNSMQkJCQkvKiBVc2VyLWRlZmluZWQgc2lnbmFscyAq LwotI2RlZmluZSBTSUdVU1IxIDMwCi0jZW5kaWYgLyogU0lHVVNSMSAqLwotCi0jaWZuZGVmIFNJ R1VTUjIKLSNkZWZpbmUgU0lHVVNSMiAzMQotI2VuZGlmIC8qIFNJR1VTUjIgKi8KLQotI2lmZGVm IE1fVU5JWAotI2RlZmluZSBDS19GT1JLX1NJRyBTSUdVU1IyCQkvKiBTQ08gLSB1c2UgU0lHVVNS MiAqLwotI2Vsc2UKLSNkZWZpbmUgQ0tfRk9SS19TSUcgU0lHVVNSMQkJLyogT3RoZXJzIC0gdXNl IFNJR1VTUjEgKi8KLSNlbmRpZiAvKiBNX1VOSVggKi8KLQotI2VuZGlmIC8qIENLX0ZPUktfU0lH ICovCi0KLS8qIEV4dGVybmFsIHZhcmlhYmxlcyAqLwotCi1leHRlcm4gc3RydWN0IGNrX3AgcHRh YltdOwotCi1leHRlcm4gaW50IGxvY2FsLCBlc2NhcGUsIGR1cGxleCwgcGFyaXR5LCBmbG93LCBz ZXNsb2csIHNlc3NmdCwgZGVic2VzLAotIG1kbXR5cCwgdHRucHJvdG8sIGNtYXNrLCBjbWRtc2ss IG5ldHdvcmssIG5ldHR5cGUsIGRlYmxvZywgc29zaSwgdG5sbSwKLSB4aXRzdGEsIHdoYXQsIHR0 eWZkLCB0dHBpcGUsIHF1aWV0LCBiYWNrZ3JkLCBwZmxhZywgdHRfY3JkLCB0dF9sZmQsCi0gdG5f bmxtLCB0dGZkZmxnLAotIHR0X2VzY2FwZSwganVzdG9uZSwgY2FycmllciwgaHdwYXJpdHk7Ci0K LWV4dGVybiBsb25nIHNwZWVkOwotZXh0ZXJuIGNoYXIgdHRuYW1lW10sIHNlc2ZpbFtdLCBteWhv c3RbXSwgKmNjbnRhYltdOwotI2lmZGVmIFROQ09ERQotZXh0ZXJuIGludCB0bl9iX25sbSwgdG5f cmVtX2VjaG87Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNpZmRlZiBDS19UUklHR0VSCi1leHRl cm4gY2hhciAqIHR0X3RyaWdnZXJbXSwgKiB0cmlnZ2VydmFsOwotI2VuZGlmIC8qIENLX1RSSUdH RVIgKi8KLQotZXh0ZXJuIGludCBub3B1c2g7Ci0KLSNpZmRlZiBDS19BUEMKLWV4dGVybiBpbnQg YXBjYWN0aXZlOwkJCS8qIEFwcGxpY2F0aW9uIFByb2dyYW0gQ29tbWFuZCAoQVBDKSAqLwotZXh0 ZXJuIGludCBhcGNzdGF0dXM7CQkJLyogaXRlbXMgLi4uICovCi1zdGF0aWMgaW50IGFwY2xlbmd0 aCA9IDA7Ci0jaWZkZWYgRENNREJVRgotZXh0ZXJuIGNoYXIgKmFwY2J1ZjsKLSNlbHNlCi1leHRl cm4gY2hhciBhcGNidWZbXTsKLSNlbmRpZiAvKiBEQ01EQlVGICovCi1zdGF0aWMgaW50IGFwY2J1 ZmxlbiA9IEFQQ0JVRkxFTiAtIDI7Ci1leHRlcm4gaW50IHByb3RvY29sOwkJCS8qIEF1dG8gZG93 bmxvYWQgKi8KLSNlbmRpZiAvKiBDS19BUEMgKi8KLQotZXh0ZXJuIGludCBhdXRvZGw7Ci0jaWZk ZWYgQ0tfQVVUT0RMCi1leHRlcm4gQ0hBUiBrc2J1ZltdOwotI2VuZGlmIC8qIENLX0FVVE9ETCAq LwotCi0jaWZkZWYgQ0tfWFlaCi0jaWZkZWYgWFlaX0lOVEVSTkFMCi1zdGF0aWMgaW50IHptZGxv ayA9IDE7CQkJLyogWm1vZGVtIGF1dG9kb3dubG9hZHMgYXZhaWxhYmxlICovCi0jZWxzZQotc3Rh dGljIGludCB6bWRsb2sgPSAwOwkJCS8qIERlcGVuZHMgb24gZXh0ZXJuYWwgcHJvdG9jb2wgZGVm ICovCi0jZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCi0jZWxzZQotc3RhdGljIGludCB6bWRsb2sg PSAwOwkJCS8qIE5vdCBhdmFpbGFibGUgYXQgYWxsICovCi0jZW5kaWYgLyogQ0tfWFlaICovCi0K LSNpZm5kZWYgTk9TRVRLRVkJCQkvKiBLZXlib2FyZCBtYXBwaW5nICovCi1leHRlcm4gS0VZICpr ZXltYXA7CQkJLyogU2luZ2xlLWNoYXJhY3RlciBrZXkgbWFwICovCi1leHRlcm4gTUFDUk8gKm1h Y3JvdGFiOwkJCS8qIEtleSBtYWNybyBwb2ludGVyIHRhYmxlICovCi1zdGF0aWMgTUFDUk8ga21w dHIgPSBOVUxMOwkJLyogUG9pbnRlciB0byBjdXJyZW50IGtleSBtYWNybyAqLwotI2VuZGlmIC8q IE5PU0VUS0VZICovCi0KLS8qIEdsb2JhbCB2YXJpYWJsZXMgbG9jYWwgdG8gdGhpcyBtb2R1bGUg Ki8KLQotc3RhdGljIGludAotICBxdWl0bm93ID0gMCwJCQkJLyogPGVzYy1jaGFyPlEgd2FzIHR5 cGVkICovCi0gIGpic2V0ID0gMCwJCQkJLyogRmxhZyB3aGV0aGVyIGptcCBidWYgaXMgc2V0LiAq LwotICBkb2hhbmd1cCA9IDAsCQkJCS8qIDxlc2MtY2hhcj5IIHdhcyB0eXBlZCAqLwotICBzanZh bCwJCQkJLyogU2V0anVtcCByZXR1cm4gdmFsdWUgKi8KLSAgZ290ZXJyID0gMCwJCQkJLyogRm9y ay9waXBlIGNyZWF0aW9uIGVycm9yIGZsYWcgKi8KLSAgaW5zaGlmdCA9IDAsCQkJCS8qIFNPL1NJ IHNoaWZ0IHN0YXRlcyAqLwotICBvdXRzaGlmdCA9IDA7Ci0KLWludCBhY3RpdmUgPSAwOwkJCQkv KiBMb3dlciBmb3JrIGFjdGl2ZSBmbGFnICovCi0KLXN0YXRpYyBQSURfVCBwYXJlbnRfaWQgPSAo UElEX1QpMDsJLyogUHJvY2VzcyBJRCBvZiBrZXlib2FyZCBmb3JrICovCi0KLXN0YXRpYyBjaGFy IGVjYnVmWzEwXSwgKmVjYnA7CQkvKiBFc2NhcGUgY2hhciBidWZmZXIgJiBwb2ludGVyICovCi0K LSNpZmRlZiBDS19TTUFMTAotI2RlZmluZSBJQlVGTCAxNTM2CQkJLyogSW5wdXQgYnVmZmVyIGxl bmd0aCAqLwotI2Vsc2UKLSNkZWZpbmUgSUJVRkwgNDA5NgotI2VuZGlmIC8qIENLX1NNQUxMICov Ci0KLXN0YXRpYyBpbnQgb2JjID0gMDsJCQkvKiBPdXRwdXQgYnVmZmVyIGNvdW50ICovCi0KLSNp Zm5kZWYgT1hPUwotI2RlZmluZSBPQlVGTCAxMDI0CQkJLyogT3V0cHV0IGJ1ZmZlciBsZW5ndGgg Ki8KLSNlbHNlCi0jZGVmaW5lIE9CVUZMIElCVUZMCi0jZW5kaWYgLyogT1hPUyAqLwotCi0jaWZk ZWYgQklHQlVGT0sKLSNkZWZpbmUgVE1QTEVOIDQwOTYJCQkvKiBUZW1wb3JhcnkgbWVzc2FnZSBi dWZmZXIgbGVuZ3RoICovCi0jZWxzZQotI2RlZmluZSBUTVBMRU4gMjAwCi0jZW5kaWYgLyogQklH QlVGT0sgKi8KLQotI2lmZGVmIERZTkFNSUMKLXN0YXRpYyBjaGFyICppYnVmID0gTlVMTCwgKm9i dWYgPSBOVUxMLCAqdGVtcCA9IE5VTEw7IC8qIEJ1ZmZlcnMgKi8KLSNlbHNlCi1zdGF0aWMgY2hh ciBpYnVmW0lCVUZMXSwgb2J1ZltPQlVGTF0sIHRlbXBbVE1QTEVOXTsKLSNlbmRpZiAvKiBEWU5B TUlDICovCi0KLSNpZmRlZiBEWU5BTUlDCi1zdGF0aWMgY2hhciAqaWJwOwkJCS8qIElucHV0IGJ1 ZmZlciBwb2ludGVyICovCi0jZWxzZQotc3RhdGljIGNoYXIgKmlicCA9IGlidWY7CQkvKiBJbnB1 dCBidWZmZXIgcG9pbnRlciAqLwotI2VuZGlmIC8qRFlOQU1JQyAqLwotc3RhdGljIGludCBpYmMg PSAwOwkJCS8qIElucHV0IGJ1ZmZlciBjb3VudCAqLwotCi0jaWZkZWYgRFlOQU1JQwotc3RhdGlj IGNoYXIgKm9icDsJCQkvKiBPdXRwdXQgYnVmZmVyIHBvaW50ZXIgKi8KLSNlbHNlCi1zdGF0aWMg Y2hhciAqb2JwID0gb2J1ZjsJCS8qIE91dHB1dCBidWZmZXIgcG9pbnRlciAqLwotI2VuZGlmIC8q IERZTkFNSUMgKi8KLQotLyogWC4yNSBpdGVtcyAqLwotCi0jaWZkZWYgQU5ZWDI1Ci1zdGF0aWMg Y2hhciAqcDsJCQkJLyogR2VuZXJhbCBwdXJwb3NlIHBvaW50ZXIgKi8KLWNoYXIgeDI1aWJ1ZltN QVhJWDI1XTsJCQkvKiBJbnB1dCBidWZmZXIgKi8KLWNoYXIgeDI1b2J1ZltNQVhPWDI1XTsJCQkv KiBPdXRwdXQgYnVmZmVyICovCi1pbnQgaWJ1Zmw7CQkJCS8qIExlbmd0aCBvZiBpbnB1dCBidWZm ZXIgKi8KLWludCBvYnVmbDsJCQkJLyogTGVuZ3RoIG9mIG91dHB1dCBidWZmZXIgKi8KLXVuc2ln bmVkIGNoYXIgdG9zZW5kID0gMDsKLWludCBsaW5raWQsIGxjbjsKLXN0YXRpYyBpbnQgZG94MjVj bHIgPSAwOwotI2lmbmRlZiBJQk1YMjUKLWV4dGVybiBDSEFSIHBhZHBhcm1zW107Ci0jZW5kaWYg LyogSUJNWDI1ICovCi0jZW5kaWYgLyogQU5ZWDI1ICovCi0KLXN0YXRpYyBpbnQgeHBpcGVbMl0g PSB7LTEsIC0xfTsJLyogUGlwZSBkZXNjcmlwdG9yIGZvciBjaGlsZC1wYXJlbnQgbWVzc2FnZXMg Ki8KLXN0YXRpYyBQSURfVCBwaWQgPSAoUElEX1QpIDA7CS8qIFByb2Nlc3MgSUQgb2YgY2hpbGQg Ki8KLQotLyogQ2hhcmFjdGVyLXNldCBpdGVtcyAqLwotCi1zdGF0aWMgaW50IHVuaWNvZGUgPSAw OwotCi1zdGF0aWMgaW50IGVzY3NlcSA9IDA7CQkJLyogMSA9IFJlY29nbml6ZXIgaXMgYWN0aXZl ICovCi1pbnQgaW5lc2MgPSAwOwkJCQkvKiBTdGF0ZSBvZiBzZXF1ZW5jZSByZWNvZ25pemVyICov Ci1pbnQgb2xkZXNjID0gLTE7CQkJLyogUHJldmlvdXMgc3RhdGUgb2YgcmVjb2duaXplciAqLwot Ci0jZGVmaW5lIE9VVFhCVUZTSVogMTUKLXN0YXRpYyBDSEFSIGlueGJ1ZltPVVRYQlVGU0laKzFd OwkvKiBIb3N0LXRvLXNjcmVlbiBleHBhbnNpb24gYnVmZmVyICovCi1zdGF0aWMgaW50IGlueGNv dW50ID0gMDsJCS8qIGFuZCBjb3VudCAqLwotc3RhdGljIENIQVIgb3V0eGJ1ZltPVVRYQlVGU0la KzFdOwkvKiBLZXlib2FyZC10by1ob3N0IGV4cGFuc2lvbiBidWYgKi8KLXN0YXRpYyBpbnQgb3V0 eGNvdW50ID0gMDsJCS8qIGFuZCBjb3VudCAqLwotCi0jaWZuZGVmIE5PQ1NFVFMKLSNpZmRlZiBD S19BTlNJQyAvKiBBTlNJIEMgcHJvdG90eXBlcy4uLiAqLwotZXh0ZXJuIENIQVIgKCp4bHNbTUFY VENTRVRTKzFdW01BWEZDU0VUUysxXSkoQ0hBUik7IC8qIENoYXJhY3RlciBzZXQgKi8KLWV4dGVy biBDSEFSICgqeGxyW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKENIQVIpOyAvKiB0cmFuc2xh dGlvbiBmdW5jdGlvbnMgKi8KLXN0YXRpYyBDSEFSICgqc3hvKShDSEFSKTsJLyogTG9jYWwgdHJh bnNsYXRpb24gZnVuY3Rpb25zICovCi1zdGF0aWMgQ0hBUiAoKnJ4bykoQ0hBUik7CS8qIGZvciBv dXRwdXQgKHNlbmRpbmcpIHRlcm1pbmFsIGNoYXJzICovCi1zdGF0aWMgQ0hBUiAoKnN4aSkoQ0hB Uik7CS8qIGFuZCBmb3IgaW5wdXQgKHJlY2VpdmluZykgdGVybWluYWwgY2hhcnMuICovCi1zdGF0 aWMgQ0hBUiAoKnJ4aSkoQ0hBUik7Ci0jZWxzZSAvKiBOb3QgQU5TSSBDLi4uICovCi1leHRlcm4g Q0hBUiAoKnhsc1tNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKSgpOwkvKiBDaGFyYWN0ZXIgc2V0 ICovCi1leHRlcm4gQ0hBUiAoKnhscltNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKSgpOwkvKiB0 cmFuc2xhdGlvbiBmdW5jdGlvbnMuICovCi1zdGF0aWMgQ0hBUiAoKnN4bykoKTsJCS8qIExvY2Fs IHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyAqLwotc3RhdGljIENIQVIgKCpyeG8pKCk7CQkvKiBmb3Ig b3V0cHV0IChzZW5kaW5nKSB0ZXJtaW5hbCBjaGFycyAqLwotc3RhdGljIENIQVIgKCpzeGkpKCk7 CQkvKiBhbmQgZm9yIGlucHV0IChyZWNlaXZpbmcpIHRlcm1pbmFsIGNoYXJzLiAqLwotc3RhdGlj IENIQVIgKCpyeGkpKCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLWV4dGVybiBpbnQgbGFuZ3Vh Z2U7CQkvKiBDdXJyZW50IGxhbmd1YWdlLiAqLwotc3RhdGljIGludCBsYW5nc3Y7CQkvKiBGb3Ig cmVtZW1iZXJpbmcgbGFuZ3VhZ2Ugc2V0dGluZy4gKi8KLWV4dGVybiBzdHJ1Y3QgY3NpbmZvIGZj c2luZm9bXTsgLyogRmlsZSBjaGFyYWN0ZXIgc2V0IGluZm8uICovCi1leHRlcm4gaW50IHRjc3Is IHRjc2w7CQkvKiBUZXJtaW5hbCBjaGFyYWN0ZXIgc2V0cywgcmVtb3RlICYgbG9jYWwuICovCi1z dGF0aWMgaW50IHRjczsJCQkvKiBJbnRlcm1lZGlhdGUgKCJ0cmFuc2ZlciIpIGNoYXJhY3RlciBz ZXQuICovCi1zdGF0aWMgaW50IHRjc3NpemUgPSAwOwkJLyogU2l6ZSBvZiB0Y3MgKi8KLSNpZmRl ZiBVTklDT0RFCQkJCS8qIFVURi04IHN1cHBvcnQgKi8KLSNpZmRlZiBDS19BTlNJQwotZXh0ZXJu IGludCAoKnhsX3VmY1tNQVhGQ1NFVFMrMV0pKFVTSE9SVCk7ICAvKiBVbmljb2RlIHRvIEZDUyAq LwotZXh0ZXJuIFVTSE9SVCAoKnhsX2ZjdVtNQVhGQ1NFVFMrMV0pKENIQVIpOyAvKiBGQ1MgdG8g VW5pY29kZSAqLwotZXh0ZXJuIGludCAoKnh1ZikoVVNIT1JUKTsJCS8qIFRyYW5zbGF0aW9uIGZ1 bmN0aW9uIFVDUyB0byBGQ1MgKi8KLWV4dGVybiBVU0hPUlQgKCp4ZnUpKENIQVIpOwkJLyogVHJh bnNsYXRpb24gZnVuY3Rpb24gRkNTIHRvIFVDUyAqLwotI2Vsc2UKLWV4dGVybiBpbnQgKCp4bF91 ZmNbTUFYRkNTRVRTKzFdKSgpOwotZXh0ZXJuIFVTSE9SVCAoKnhsX2ZjdVtNQVhGQ1NFVFMrMV0p KCk7Ci1leHRlcm4gaW50ICgqeHVmKSgpOwotZXh0ZXJuIFVTSE9SVCAoKnhmdSkoKTsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSNlbmRpZiAvKiBOT0NTRVRT ICovCi0KLS8qCi0gIFdlIGRvIG5vdCBuZWVkIHRvIHBhcnNlIGFuZCByZWNvZ25pemUgZXNjYXBl IHNlcXVlbmNlcyBpZiB3ZSBhcmUgYmVpbmcgYnVpbHQKLSAgd2l0aG91dCBjaGFyYWN0ZXItc2V0 IHN1cHBvcnQgQU5EIHdpdGhvdXQgQVBDIHN1cHBvcnQuCi0qLwotI2lmZGVmIE5PQ1NFVFMJCQkJ LyogTm8gY2hhcmFjdGVyIHNldHMgKi8KLSNpZm5kZWYgQ0tfQVBDCQkJCS8qIE5vIEFQQyAqLwot I2lmbmRlZiBOT0VTQ1NFUQotI2RlZmluZSBOT0VTQ1NFUQkJCS8qIFNvIG5vIGVzY2FwZSBzZXF1 ZW5jZSByZWNvZ25pemVyICovCi0jZW5kaWYgLyogTk9FU0NTRVEgKi8KLSNlbmRpZiAvKiBDS19B UEMgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLS8qIENoaWxkIHByb2Nlc3MgZXZlbnRzIGFu ZCBtZXNzYWdlcyAqLwotCi0jZGVmaW5lIENFVl9OTyAgMAkJCS8qIE5vIGV2ZW50ICovCi0jZGVm aW5lIENFVl9IVVAgMQkJCS8qIENvbW11bmljYXRpb25zIGhhbmd1cCAqLwotI2RlZmluZSBDRVZf UEFEIDIJCQkvKiBYLjI1IC0gY2hhbmdlIFBBRCBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIENFVl9E VVAgMwkJCS8qIFRvZ2dsZSBkdXBsZXggKi8KLSNkZWZpbmUgQ0VWX0FQQyA0CQkJLyogRXhlY3V0 ZSBBUEMgKi8KLSNpZmRlZiBUTkNPREUKLSNkZWZpbmUgQ0VWX01FQklOIDUJCQkvKiBDaGFuZ2Ug b2YgbWVfYmluYXJ5ICovCi0jZGVmaW5lIENFVl9VQklOIDYJCQkvKiBDaGFuZ2Ugb2YgdV9iaW5h cnkgKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNkZWZpbmUgQ0VWX0FETCA3CQkJLyogQXV0b2Rv d25sb2FkICovCi0jZGVmaW5lIENFVl9BVUwgOAkJCS8qIEF1dG91cGxvYWQgKi8KLSNkZWZpbmUg Q0VWX1RSSSA5CQkJLyogVHJpZ2dlciBzdHJpbmcgKi8KLQotI2lmZGVmIE5PRVNDU0VRCi0jZGVm aW5lIGNoa2Flcyh4KSAwCi0jZWxzZQotLyoKLSAgQXMgb2YgZWRpdCAxNzgsIHRoZSBDT05ORUNU IGNvbW1hbmQgc2tpcHMgcGFzdCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgdG8KLSAgYXZvaWQgdHJh bnNsYXRpbmcgdGhlIGNoYXJhY3RlcnMgd2l0aGluIHRoZW0uICBUaGlzIGFsbG93cyB0aGUgQ09O TkVDVAotICBjb21tYW5kIHRvIHdvcmsgY29ycmVjdGx5IHdpdGggYSBob3N0IHRoYXQgdXNlcyBh IDctYml0IElTTyA2NDYgbmF0aW9uYWwKLSAgY2hhcmFjdGVyIHNldCwgaW4gd2hpY2ggY2hhcmFj dGVycyBsaWtlICdbJyB3b3VsZCBub3JtYWxseSBiZSB0cmFuc2xhdGVkCi0gIGludG8gYWNjZW50 ZWQgY2hhcmFjdGVycywgcnVpbmluZyB0aGUgdGVybWluYWwncyBpbnRlcnByZXRhdGlvbiAoYW5k Ci0gIGdlbmVyYXRpb24pIG9mIGVzY2FwZSBzZXF1ZW5jZXMuCi0KLSAgQXMgb2YgZWRpdCAxOTAs IHRoZSBDT05ORUNUIGNvbW1hbmQgcmVzcG9uZHMgdG8gQVBDIGVzY2FwZSBzZXF1ZW5jZXMKLSAg KEVTQyBfIHRleHQgRVNDIFwpIGlmIHRoZSB1c2VyIFNFVHMgVEVSTUlOQUwgQVBDIE9OIG9yIFVO Q0hFQ0tFRCwgYW5kIHRoZQotICBwcm9ncmFtIHdhcyBidWlsdCB3aXRoIENLX0FQQyBkZWZpbmVk LgotCi0gIE5vbi1BTlNJL0lTTy1jb21wbGlhbnQgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbm90IGhh bmRsZWQuCi0qLwotCi0vKiBTdGF0ZXMgZm9yIHRoZSBlc2NhcGUtc2VxdWVuY2UgcmVjb2duaXpl ci4gKi8KLQotI2RlZmluZSBFU19OT1JNQUwgMAkJCS8qIE5vcm1hbCwgbm90IGluIGFuIGVzY2Fw ZSBzZXF1ZW5jZSAqLwotI2RlZmluZSBFU19HT1RFU0MgMQkJCS8qIEN1cnJlbnQgY2hhcmFjdGVy IGlzIEVTQyAqLwotI2RlZmluZSBFU19FU0NTRVEgMgkJCS8qIEluc2lkZSBhbiBlc2NhcGUgc2Vx dWVuY2UgKi8KLSNkZWZpbmUgRVNfR09UQ1NJIDMJCQkvKiBJbnNpZGUgYSBjb250cm9sIHNlcXVl bmNlICovCi0jZGVmaW5lIEVTX1NUUklORyA0CQkJLyogSW5zaWRlIERDUyxPU0MsUE0sIG9yIEFQ QyBzdHJpbmcgKi8KLSNkZWZpbmUgRVNfVEVSTUlOIDUJCQkvKiAxc3QgY2hhciBvZiBzdHJpbmcg dGVybWluYXRvciAqLwotCi0vKgotICBBTlNJIGVzY2FwZSBzZXF1ZW5jZSBoYW5kbGluZy4gIE9u bHkgdGhlIDctYml0IGZvcm0gaXMgdHJlYXRlZCwgYmVjYXVzZQotICB0cmFuc2xhdGlvbiBpcyBu b3QgYSBwcm9ibGVtIGluIHRoZSA4LWJpdCBlbnZpcm9ubWVudCwgaW4gd2hpY2ggYWxsIEdMCi0g IGNoYXJhY3RlcnMgYXJlIEFTQ0lJIGFuZCBubyB0cmFuc2xhdGlvbiB0YWtlcyBwbGFjZS4gIFNv IHdlIGRvbid0IGNoZWNrCi0gIGZvciB0aGUgOC1iaXQgc2luZ2xlLWNoYXJhY3RlciB2ZXJzaW9u cyBvZiBDU0ksIERDUywgT1NDLCBBUEMsIG9yIFNULgotICBIZXJlIGlzIHRoZSBBTlNJIHNlcXVl bmNlIHJlY29nbml6ZXIgc3RhdGUgdGFibGUsIGZvbGxvd2VkIGJ5IHRoZSBjb2RlCi0gIHRoYXQg aW1wbGVtZW50cyBpdC4KLQotICBEZWZpbml0aW9uczoKLSAgICBDQU4gPSBDYW5jZWwgICAgICAg ICAgICAgICAgICAgICAgIDAxLzA4ICAgICAgICAgQ3RybC1YCi0gICAgU1VCID0gU3Vic3RpdHV0 ZSAgICAgICAgICAgICAgICAgICAwMS8xMCAgICAgICAgIEN0cmwtWgotICAgIERDUyA9IERldmlj ZSBDb250cm9sIFNlcXVlbmNlICAgICAgMDEvMTEgMDUvMDAgICBFU0MgUAotICAgIENTSSA9IENv bnRyb2wgU2VxdWVuY2UgSW50cm9kdWNlciAgMDEvMTEgMDUvMTEgICBFU0MgWwotICAgIFNUICA9 IFN0cmluZyBUZXJtaW5hdG9yICAgICAgICAgICAgMDEvMTEgMDUvMTIgICBFU0MgXAotICAgIE9T QyA9IE9wZXJhdGluZyBTeXN0ZW0gQ29tbWFuZCAgICAgMDEvMTEgMDUvMTMgICBFU0MgXQotICAg IFBNICA9IFByaXZhY3kgTWVzc2FnZSAgICAgICAgICAgICAgMDEvMTEgMDUvMTQgICBFU0MgXgot ICAgIEFQQyA9IEFwcGxpY2F0aW9uIFByb2dyYW0gQ29tbWFuZCAgMDEvMTEgMDUvMTUgICBFU0Mg XwotCi0gIEFOU0kgZXNjYXBlIHNlcXVlbmNlIHJlY29nbml6ZXI6Ci0KLSAgICBTdGF0ZSAgICBJ bnB1dCAgTmV3IFN0YXRlICA7IENvbW1lbnRhcnkKLQotICAgIE5PUk1BTCAgIChzdGFydCkgICAg ICAgICAgIDsgU3RhcnQgaW4gTk9STUFMIHN0YXRlCi0KLSAgICAoYW55KSAgICBDQU4gICAgTk9S TUFMICAgICA7IF5YIGNhbmNlbHMKLSAgICAoYW55KSAgICBTVUIgICAgTk9STUFMICAgICA7IF5a IGNhbmNlbHMKLQotICAgIE5PUk1BTCAgIEVTQyAgICBHT1RFU0MgICAgIDsgQmVnaW4gZXNjYXBl IHNlcXVlbmNlCi0gICAgTk9STUFMICAgb3RoZXIgICAgICAgICAgICAgOyBOT1JNQUwgY29udHJv bCBvciBncmFwaGljIGNoYXJhY3RlcgotCi0gICAgR09URVNDICAgRVNDICAgICAgICAgICAgICAg OyBTdGFydCBhZ2FpbgotICAgIEdPVEVTQyAgIFsgICAgICBHT1RDU0kgICAgIDsgQ1NJCi0gICAg R09URVNDICAgUCAgICAgIFNUUklORyAgICAgOyBEQ1MgaW50cm9kdWNlciwgY29uc3VtZSB0aHJv dWdoIFNUCi0gICAgR09URVNDICAgXSAgICAgIFNUUklORyAgICAgOyBPU0MgaW50cm9kdWNlciwg Y29uc3VtZSB0aHJvdWdoIFNUCi0gICAgR09URVNDICAgXiAgICAgIFNUUklORyAgICAgOyBQTSAg aW50cm9kdWNlciwgY29uc3VtZSB0aHJvdWdoIFNUCi0gICAgR09URVNDICAgXyAgICAgIFNUUklO RyAgICAgOyBBUEMgaW50cm9kdWNlciwgY29uc3VtZSB0aHJvdWdoIFNUCi0gICAgR09URVNDICAg MC4ufiAgIE5PUk1BTCAgICAgOyAwMy8wMCB0aHJvdWdoIDE3LzE0ID0gRmluYWwgY2hhcmFjdGVy Ci0gICAgR09URVNDICAgb3RoZXIgIEVTQ1NFUSAgICAgOyBJbnRlcm1lZGlhdGUgb3IgaWdub3Jl ZCBjb250cm9sIGNoYXJhY3RlcgotCi0gICAgRVNDU0VRICAgRVNDICAgIEdPVEVTQyAgICAgOyBT dGFydCBhZ2FpbgotICAgIEVTQ1NFUSAgIDAuLn4gICBOT1JNQUwgICAgIDsgMDMvMDAgdGhyb3Vn aCAxNy8xNCA9IEZpbmFsIGNoYXJhY3RlcgotICAgIEVTQ1NFUSAgIG90aGVyICAgICAgICAgICAg IDsgSW50ZXJtZWRpYXRlIG9yIGlnbm9yZWQgY29udHJvbCBjaGFyYWN0ZXIKLQotICAgIEdPVENT SSAgIEVTQyAgICBHT1RFU0MgICAgIDsgU3RhcnQgYWdhaW4KLSAgICBHT1RDU0kgICBALi5+ICAg Tk9STUFMICAgICA7IDA0LzAwIHRocm91Z2ggMTcvMTQgPSBGaW5hbCBjaGFyYWN0ZXIKLSAgICBH T1RDU0kgICBvdGhlciAgICAgICAgICAgICA7IEludGVybWVkaWF0ZSBjaGFyIG9yIGlnbm9yZWQg Y29udHJvbCBjaGFyCi0KLSAgICBTVFJJTkcgICBFU0MgICAgVEVSTUlOICAgICA7IE1heWJlIGhh dmUgU1QKLSAgICBTVFJJTkcgICBvdGhlciAgICAgICAgICAgICA7IENvbnN1bWUgYWxsIGVsc2UK LQotICAgIFRFUk1JTiAgIFwgICAgICBOT1JNQUwgICAgIDsgRW5kIG9mIHN0cmluZwotICAgIFRF Uk1JTiAgIG90aGVyICBTVFJJTkcgICAgIDsgU3RpbGwgaW4gc3RyaW5nCi0qLwotLyoKLSAgY2hr YWVzKCkgLS0gQ2hlY2sgQU5TSSBFc2NhcGUgU2VxdWVuY2UuCi0gIENhbGwgd2l0aCBFQUNIIGNo YXJhY3RlciBpbiBpbnB1dCBzdHJlYW0uCi0gIFNldHMgZ2xvYmFsIGluZXNjIHZhcmlhYmxlIGFj Y29yZGluZyB0byBlc2NhcGUgc2VxdWVuY2Ugc3RhdGUuCi0gIFJldHVybnMgMCBub3JtYWxseSwg MSBpZiBhbiBBUEMgc2VxdWVuY2UgaXMgdG8gYmUgZXhlY3V0ZWQuCi0qLwotaW50Ci0jaWZkZWYg Q0tfQU5TSUMKLWNoa2FlcyhjaGFyIGMpCi0jZWxzZQotY2hrYWVzKGMpIGNoYXIgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotLyogY2hrYWVzICovIHsKLQotICAgIG9sZGVzYyA9IGluZXNjOwkJ CS8qIFJlbWVtYmVyIHByZXZpb3VzIHN0YXRlICovCi0gICAgaWYgKGMgPT0gQ0FOIHx8IGMgPT0g U1VCKQkJLyogQ0FOIGFuZCBTVUIgY2FuY2VsIGFueSBzZXF1ZW5jZSAqLwotICAgICAgaW5lc2Mg PSBFU19OT1JNQUw7Ci0gICAgZWxzZQkJCQkvKiBPdGhlcndpc2UgKi8KLSAgICAgIHN3aXRjaCAo aW5lc2MpIHsJCQkvKiBlbnRlciBzdGF0ZSBzd2l0Y2hlciAqLwotCi0JY2FzZSBFU19OT1JNQUw6 CQkJLyogTk9STUFMIHN0YXRlICovCi0JICBpZiAoYyA9PSBFU0MpCQkJLyogR290IGFuIEVTQyAq LwotCSAgICBpbmVzYyA9IEVTX0dPVEVTQzsJCS8qIENoYW5nZSBzdGF0ZSB0byBHT1RFU0MgKi8K LQkgIGJyZWFrOwkJCS8qIE90aGVyd2lzZSBzdGF5IGluIE5PUk1BTCBzdGF0ZSAqLwotCi0JY2Fz ZSBFU19HT1RFU0M6CQkJLyogR09URVNDIHN0YXRlICovCi0JICBpZiAoYyA9PSAnWycpCQkJLyog TGVmdCBicmFja2V0IGFmdGVyIEVTQyBpcyBDU0kgKi8KLQkgICAgaW5lc2MgPSBFU19HT1RDU0k7 CQkvKiBDaGFuZ2UgdG8gR09UQ1NJIHN0YXRlICovCi0JICBlbHNlIGlmIChjID09ICdQJyB8fCAo YyA+IDAxMzQgJiYgYyA8IDAxNDApKSB7IC8qIFAsIFssIF4sIG9yIF8gKi8KLQkgICAgICBpbmVz YyA9IEVTX1NUUklORzsJLyogU3dpdGNoIHRvIFNUUklORy1hYnNvcnB0aW9uIHN0YXRlICovCi0j aWZkZWYgQ0tfQVBDCi0JICAgICAgaWYgKGMgPT0gJ18nICYmIHBpZCA9PSAwICYmIC8qIEFQQyBo YW5kbGVkIGluIGNoaWxkIG9ubHkgKi8KLQkJICAoYXBjc3RhdHVzICYgQVBDX09OKSkgeyAvKiBh bmQgb25seSBpZiBub3QgZGlzYWJsZWQuICovCi0JCSAgZGVidWcoRjEwMCwiQ09OTkVDVCBBUEMg YmVnaW4iLCIiLDApOwotCQkgIGFwY2FjdGl2ZSA9IEFQQ19SRU1PVEU7IC8qIFNldCBBUEMtQWN0 aXZlIGZsYWcgKi8KLQkJICBhcGNsZW5ndGggPSAwOwkvKiBhbmQgcmVzZXQgQVBDIGJ1ZmZlciBw b2ludGVyICovCi0JICAgICAgfQotI2VuZGlmIC8qIENLX0FQQyAqLwotCSAgfSBlbHNlIGlmIChj ID4gMDU3ICYmIGMgPCAwMTc3KSAvKiBGaW5hbCBjaGFyYWN0ZXIgJzAnIHRocnUgJ34nICovCi0J ICAgIGluZXNjID0gRVNfTk9STUFMOwkJLyogQmFjayB0byBub3JtYWwgKi8KLQkgIGVsc2UgaWYg KGMgIT0gRVNDKQkJLyogRVNDIGluIGFuIGVzY2FwZSBzZXF1ZW5jZS4uLiAqLwotCSAgICBpbmVz YyA9IEVTX0VTQ1NFUTsJCS8qIHN0YXJ0cyBhIG5ldyBlc2NhcGUgc2VxdWVuY2UgKi8KLQkgIGJy ZWFrOwkJCS8qIEludGVybWVkaWF0ZSBvciBpZ25vcmVkIGN0cmwgY2hhciAqLwotCi0JY2FzZSBF U19FU0NTRVE6CQkJLyogRVNDU0VRIC0tIGluIGFuIGVzY2FwZSBzZXF1ZW5jZSAqLwotCSAgaWYg KGMgPiAwNTcgJiYgYyA8IDAxNzcpCS8qIEZpbmFsIGNoYXJhY3RlciAnMCcgdGhydSAnficgKi8K LQkgICAgaW5lc2MgPSBFU19OT1JNQUw7CQkvKiBSZXR1cm4gdG8gTk9STUFMIHN0YXRlLiAqLwot CSAgZWxzZSBpZiAoYyA9PSBFU0MpCQkvKiBFU0MgLi4uICovCi0JICAgIGluZXNjID0gRVNfR09U RVNDOwkJLyogc3RhcnRzIGEgbmV3IGVzY2FwZSBzZXF1ZW5jZSAqLwotCSAgYnJlYWs7CQkJLyog SW50ZXJtZWRpYXRlIG9yIGlnbm9yZWQgY3RybCBjaGFyICovCi0KLQljYXNlIEVTX0dPVENTSToJ CQkvKiBHT1RDU0kgLS0gSW4gYSBjb250cm9sIHNlcXVlbmNlICovCi0JICBpZiAoYyA+IDA3NyAm JiBjIDwgMDE3NykJLyogRmluYWwgY2hhcmFjdGVyICdAJyB0aHJ1ICd+JyAqLwotCSAgICBpbmVz YyA9IEVTX05PUk1BTDsJCS8qIFJldHVybiB0byBOT1JNQUwuICovCi0JICBlbHNlIGlmIChjID09 IEVTQykJCS8qIEVTQyAuLi4gKi8KLQkgICAgaW5lc2MgPSBFU19HT1RFU0M7CQkvKiBzdGFydHMg b3Zlci4gKi8KLQkgIGJyZWFrOwkJCS8qIEludGVybWVkaWF0ZSBvciBpZ25vcmVkIGN0cmwgY2hh ciAqLwotCi0JY2FzZSBFU19TVFJJTkc6CQkJLyogSW5zaWRlIGEgc3RyaW5nICovCi0JICBpZiAo YyA9PSBFU0MpCQkJLyogRVNDIG1heSBiZSAxc3QgY2hhciBvZiB0ZXJtaW5hdG9yICovCi0JICAg IGluZXNjID0gRVNfVEVSTUlOOwkJLyogR28gc2VlLiAqLwotI2lmZGVmIENLX0FQQwotCSAgZWxz ZSBpZiAoYXBjYWN0aXZlICYmIChhcGNsZW5ndGggPCBhcGNidWZsZW4pKSAvKiBJZiBpbiBBUEMs ICovCi0JICAgIGFwY2J1ZlthcGNsZW5ndGgrK10gPSBjOwkvKiBkZXBvc2l0IHRoaXMgY2hhcmFj dGVyLiAqLwotCSAgZWxzZSB7CQkJLyogQnVmZmVyIG92ZXJydW4gKi8KLQkgICAgICBhcGNhY3Rp dmUgPSAwOwkJLyogRGlzY2FyZCB3aGF0IHdlIGdvdCAqLwotCSAgICAgIGFwY2xlbmd0aCA9IDA7 CQkvKiBhbmQgZ28gYmFjayB0byBub3JtYWwgKi8KLQkgICAgICBhcGNidWZbMF0gPSAwOwkJLyog Tm90IHByZXR0eSwgYnV0IHdoYXQgZWxzZSAqLwotCSAgICAgIGluZXNjID0gRVNfTk9STUFMOwkv KiBjYW4gd2UgZG8/ICAoU1QgbWlnaHQgbm90IGNvbWUpICovCi0JICB9Ci0jZW5kaWYgLyogQ0tf QVBDICovCi0JICBicmVhazsJCQkvKiBBYnNvcmIgYWxsIG90aGVyIGNoYXJhY3RlcnMuICovCi0K LQljYXNlIEVTX1RFUk1JTjoJCQkvKiBNYXkgaGF2ZSBhIHN0cmluZyB0ZXJtaW5hdG9yICovCi0J ICBpZiAoYyA9PSAnXFwnKSB7CQkvKiB3aGljaCBtdXN0IGJlIGJhY2tzbGFzaCAqLwotCSAgICAg IGluZXNjID0gRVNfTk9STUFMOwkvKiBJZiBzbywgYmFjayB0byBOT1JNQUwgKi8KLSNpZmRlZiBD S19BUEMKLQkgICAgICBpZiAoYXBjYWN0aXZlKSB7CQkvKiBJZiBpdCB3YXMgYW4gQVBDIHN0cmlu ZywgKi8KLQkJICBkZWJ1ZyhGMTAxLCJDT05ORUNUIEFQQyB0ZXJtaW5hdGVkIiwiIixjKTsKLQkJ ICBhcGNidWZbYXBjbGVuZ3RoXSA9IE5VTDsgLyogdGVybWluYXRlIGl0IGFuZCB0aGVuIC4uLiAq LwotCQkgIHJldHVybigxKTsKLQkgICAgICB9Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0JICB9IGVs c2UgewkJCS8qIE90aGVyd2lzZSAqLwotCSAgICAgIGluZXNjID0gRVNfU1RSSU5HOwkvKiBCYWNr IHRvIHN0cmluZyBhYnNvcnB0aW9uLiAqLwotI2lmZGVmIENLX0FQQwotCSAgICAgIGlmIChhcGNh Y3RpdmUgJiYgKGFwY2xlbmd0aCsxIDwgYXBjYnVmbGVuKSkgeyAvKiBJbiBBUEMgc3RyaW5nICov Ci0JCSAgYXBjYnVmW2FwY2xlbmd0aCsrXSA9IEVTQzsgLyogZGVwb3NpdCB0aGUgRXNjIGNoYXJh Y3RlciAqLwotCQkgIGFwY2J1ZlthcGNsZW5ndGgrK10gPSBjOyAgIC8qIGFuZCB0aGlzIGNoYXJh Y3RlciB0b28gKi8KLQkgICAgICB9Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0JICB9Ci0gICAgICB9 Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIE5PRVNDU0VRICovCi0KLS8qIENvbm5lY3Qg c3RhdGUgcGFyZW50L2NoaWxkIGNvbW11bmljYXRpb24gc2lnbmFsIGhhbmRsZXJzICovCi0KLS8q IFJvdXRpbmVzIHVzZWQgYnkgdGhlIGNoaWxkIHByb2Nlc3MgKi8KLQotc3RhdGljIGludAotcGlw ZW1zZyhuKSBpbnQgbjsgewkJCS8qIFNlbmQgbWVzc2FnZSBJRCB0byBwYXJlbnQgKi8KLSAgICBp bnQgY29kZSA9IG4gJiAyNTU7Ci0gICAgcmV0dXJuKHdyaXRlKHhwaXBlWzFdLCAmY29kZSwgc2l6 ZW9mKGNvZGUpKSk7Ci19Ci0KLS8qIEVudmlyb25tZW50IHBvaW50ZXIgZm9yIENLX0ZPUktfU0lH IHNpZ25hbCBoYW5kbGluZyBpbiBjaGlsZC4uLiAqLwotCi0jaWZkZWYgQ0tfUE9TSVhfU0lHCi1z dGF0aWMgc2lnam1wX2J1ZiBzaWdfZW52OwotI2Vsc2UKLXN0YXRpYyBqbXBfYnVmIHNpZ19lbnY7 Ci0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0KLXN0YXRpYyBTSUdUWVAJCQkJLyogQ0tfRk9S S19TSUcgaGFuZGxpbmcgaW4gY2hpbGQgLi4uICovCi1mb3JraW50KGZvbykgaW50IGZvbzsgewot ICAgIC8qIEl0IGlzIGltcG9ydGFudCB0byBkaXNhYmxlIENLX0ZPUktfU0lHIGJlZm9yZSBsb25n am1wICovCi0gICAgc2lnbmFsKENLX0ZPUktfU0lHLCBTSUdfSUdOKTsJLyogU2V0IHRvIGlnbm9y ZSBDS19GT1JLX1NJRyAqLwotICAgIGRlYnVnKEYxMDAsIkNPTk5FQ1QgZm9ya2ludCAtIENLX0ZP UktfU0lHIiwgIiIsIDApOwotICAgIC8qIEZvcmNlIHJldHVybiBmcm9tIGNrX3NuZG1zZygpICov Ci0gICAgY2tsb25nam1wKHNpZ19lbnYsIDEpOwotICAgIC8qIE5PVFJFQUNIRUQgKi8KLX0KLQot c3RhdGljIFZPSUQKLWNrX3NuZG1zZygpIHsJCQkJLyogRXhlY3V0ZWQgYnkgY2hpbGQgb25seSAu Li4gKi8KLSAgICBkZWJ1ZyhGMTAwLCJDT05ORUNUIGNrX3NuZG1zZywgYWN0aXZlIiwgIiIsIGFj dGl2ZSk7Ci0gICAgaWYgKAotI2lmZGVmIENLX1BPU0lYX1NJRwotCXNpZ3NldGptcChzaWdfZW52 LDEpCi0jZWxzZQotCXNldGptcChzaWdfZW52KQotI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLwot CT09IDApIHsKLQlkZWJ1ZyhGMTAwLCJDT05ORUNUIGNrX3NuZG1zZyBzaWduYWxpbmcgcGFyZW50 IiwiIiwwKTsKLSAgICAgICAgc2lnbmFsKENLX0ZPUktfU0lHLCBmb3JraW50KTsJLyogU2V0IHVw IHNpZ25hbCBoYW5kbGVyICovCi0gICAgICAgIGtpbGwocGFyZW50X2lkLCBDS19GT1JLX1NJRyk7 CS8qIEtpY2sgdGhlIHBhcmVudCAqLwotCWRlYnVnKEYxMDAsImNrX3NuZG1zZyBwYXVzaW5nIiwi IiwwKTsKLSAgICAgICAgZm9yICg7OykgcGF1c2UoKTsJCS8qIFdhaXQgZm9yIENLX0ZPUktfU0lH IG9yIFNJR0tJTEwgKi8KLQkvKiBOT1RSRUFDSEVEICovCi0gICAgfQotICAgIC8qIFdlIGNvbWUg aGVyZSBmcm9tIGZvcmtpbnQoKSB2aWEgW3NpZ11ja2xvbmdqbXAoc2lnX2VudiwxKSAqLwotICAg IGRlYnVnKEYxMDAsIkNPTk5FQ1QgY2tfc25kbXNnIGlzIHBhcmVudCAtIHJldHVybmluZyIsICIi LCAwKTsKLX0KLQotLyogUm91dGluZXMgdXNlZCBieSB0aGUgcGFyZW50IHByb2Nlc3MgKi8KLQot I2lmZGVmIENLX1BPU0lYX1NJRwkJIC8qIEVudmlyb25tZW50IHBvaW50ZXIgZm9yIENPTk5FQ1Qg ZXJyb3JzICovCi1zdGF0aWMgc2lnam1wX2J1ZiBjb25fZW52OwotI2Vsc2UKLXN0YXRpYyBqbXBf YnVmIGNvbl9lbnY7Ci0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0vKgotICBwaXBlaW50KCkg aGFuZGxlcyBDS19GT1JLX1NJRyBzaWduYWxzIGZyb20gdGhlIGxvd2VyIChwb3J0KSBmb3JrLgot ICBJdCByZWFkcyBhIGZ1bmN0aW9uIGNvZGUgZnJvbSB0aGUgcGlwZSB0aGF0IGNvbm5lY3RzIHRo ZSB0d28gZm9ya3MsCi0gIHRoZW4gcmVhZHMgYWRkaXRpb25hbCBkYXRhIGZyb20gdGhlIHBpcGUs IHRoZW4gaGFuZGxlcyBpdC4KLSovCi1zdGF0aWMgU0lHVFlQCi1waXBlaW50KGFyZykgaW50IGFy ZzsgewkJCS8qIER1bW15IGFyZ3VtZW50ICovCi0gICAgaW50IGNvZGUsIGN4LCB4LCBpIC8qICwg biAqLyA7Ci0KLSNpZm5kZWYgTk9DQ1RSQVAKLSAgICBleHRlcm4gY2tqbXBidWYgY21qYnVmOwot I2VuZGlmIC8qIE5PQ0NUUkFQICovCi0gICAgLyoKLSAgICAgIElNUE9SVEFOVDogQXQgdGhpcyBw b2ludCwgdGhlIGNoaWxkIGZvcmsgaXMgd2FpdGluZyBmb3IgQ0tfRk9SS19TSUcKLSAgICAgIChl dmVudHVhbGx5IGZvciBTSUdLSUxMKSBpbnNpZGUgb2YgY2tfc25kbXNnKCkuICBTbyB3ZSBjYW4n dCBnZXQgYW55Ci0gICAgICBzdWJzZXF1ZW50IENLX0ZPUktfU0lHIGZyb20gY2hpbGQgYmVmb3Jl IHdlIHNlbmQgaXQgQ0tfRk9SS19TSUcuCi0gICAgKi8KLSAgICBzaWduYWwoQ0tfRk9SS19TSUcs IFNJR19JR04pOwkvKiBJZ25vcmUgQ0tfRk9SS19TSUcgbm93ICovCi0gICAgZGVidWcoRjEwMSwi Q09OTkVDVCBwaXBlaW50IGFyZyIsIiIsYXJnKTsKLQotICAgIHJlYWQoeHBpcGVbMF0sICZjb2Rl LCBzaXplb2YoY29kZSkpOyAvKiBHZXQgZnVuY3Rpb24gY29kZSBmcm9tIHBpcGUgKi8KLSAgICBk ZWJ1ZyhGMTAxLCJDT05ORUNUIHBpcGVpbnQgY29kZSIsIiIsY29kZSk7Ci0gICAgY3ggPSBjb2Rl ICYgMjU1OwkJCS8qIDgtYml0IHZlcnNpb24gb2YgZnVuY3Rpb24gY29kZSAqLwotCi0jaWZuZGVm IE5PQ0NUUkFQCi0jaWZuZGVmIE5PSUNQCi0jZGVmaW5lIFVTRUNDSk1QQlVGCi0jZW5kaWYgLyog Tk9JQ1AgKi8KLSNlbmRpZiAvKiBOT0NDVFJBUCAqLwotLyoKLSAgUmVhZCBpbmZvIHBhc3NlZCBi YWNrIHVwIHRvIHVzIGJ5IHRoZSBsb3dlciBmb3JrLCBkZXBlbmRpbmcgb24gdGhlIGZ1bmN0aW9u Ci0gIHJlcXVlc3RlZC4gIFRoZSBzYW1lIG51bWJlciBvZiBpdGVtcyBtdXN0IGJlIHJlYWQgZnJv bSB0aGUgcGlwZSBpbiB0aGUgc2FtZQotICBvcmRlciBhcyB0aGUgbG93ZXIgZm9yayBwdXQgdGhl bSB0aGVyZS4gIFRyeWluZyB0byByZWFkIHNvbWV0aGluZyB0aGF0J3Mgbm90Ci0gIHRoZXJlIG1h a2VzIHRoZSBwcm9ncmFtIGhhbmcgdW5pbnRlcnJ1cHRpYmx5LiAgUGF5IGNsb3NlIGF0dGVudGlv biAtLSBub3RpY2UKLSAgaG93IHdlIGZhbGwgdGhyb3VnaCBzb21lIG9mIHRoZSBjYXNlcyByYXRo ZXIgdGhhbiBicmVhazsgdGhhdCdzIGRlbGliZXJhdGUuCi0qLwotICAgIHN3aXRjaCAoY3gpIHsK LSNpZmRlZiBDS19UUklHR0VSCi0gICAgICBjYXNlIENFVl9UUkk6CQkJLyogVHJpZ2dlciBzdHJp bmcgKi8KLQlkZWJ1ZyhGMTAwLCJDT05ORUNUIHRyaWdnZXIiLCIiLDApOwotCXJlYWQoeHBpcGVb MF0sIChjaGFyICopJmksIHNpemVvZihpKSk7IC8qIFRyaWdnZXIgaW5kZXggKi8KLQlkZWJ1ZyhG MTAxLCJDT05ORUNUIHRyaWdnZXIgaW5kZXgiLCIiLGkpOwotCW1ha2VzdHIoJnRyaWdnZXJ2YWws dHRfdHJpZ2dlcltpXSk7IC8qIE1ha2UgYSBjb3B5IG9mIHRoZSB0cmlnZ2VyICovCi0JZGVidWco RjExMCwiQ09OTkVDVCB0cmlnZ2VydmFsIix0cmlnZ2VydmFsLDApOwotCXJlYWQoeHBpcGVbMF0s IChjaGFyICopJmliYywgc2l6ZW9mKGliYykpOyAvKiBDb3B5IGNoaWxkJ3MgKi8KLQlkZWJ1ZyhG MTAxLCJDT05ORUNUIHRyaWdnZXIgaWJjICh1cHBlcikiLCIiLGliYyk7IC8qIGlucHV0IGJ1ZmZl ci4gKi8KLQlpZiAoaWJjID4gMCkgewotCSAgICByZWFkKHhwaXBlWzBdLCAoY2hhciAqKSZpYnAs IHNpemVvZihpYnApKTsKLQkgICAgcmVhZCh4cGlwZVswXSwgaWJwLCBpYmMpOwotCX0KLQkvKiBG YWxsIHRocnUuLi4gKi8KLQotI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KLQotICAgICAgY2FzZSBD RVZfSFVQOgotLyoKLSAgVGhlIENFVl9IVVAgY2FzZSBpcyBleGVjdXRlZCB3aGVuIHRoZSBvdGhl ciBzaWRlIGhhcyBodW5nIHVwIG9uIHVzLgotICBJbiBzb21lIGNhc2VzLCB0aGlzIGhhcHBlbnMg YmVmb3JlIHdlIGhhdmUgaGFkIGEgY2hhbmNlIHRvIGV4ZWN1dGUgdGhlCi0gIHNldGptcChjb25f ZW52LDEpIGNhbGwsIGFuZCBpbiB0aGF0IGNhc2Ugd2UnZCBiZXR0ZXIgbm90IHRha2UgdGhlIGxv bmdqbXAhCi0gIEEgZ29vZCBleGFtcGxlIGlzIHdoZW4geW91IFRFTE5FVCB0byBwb3J0IDEzIG9u IHRoZSBsb2NhbCBob3N0OyBpdCBwcmludHMKLSAgaXRzIGFzY3RpbWUoKSBzdHJpbmcgKDI2IGNo YXJzKSBhbmQgdGhlbiBjbG9zZXMgdGhlIGNvbm5lY3Rpb24uCi0qLwotI2lmZGVmIENLX1RSSUdH RVIKLQlpZiAoY3ggPT0gQ0VWX1RSSSkKLQkgIHNqdmFsID0gQ0VWX1RSSTsJCS8qIFNldCBnbG9i YWwgdmFyaWFibGUuICovCi0JZWxzZQotI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KLQkgIHNqdmFs ID0gQ0VWX0hVUDsKLQlpZiAoamJzZXQpIHsJCQkvKiBqbXBfYnVmIGlzIGluaXRpYWxpemVkICov Ci0JICAgIGNrbG9uZ2ptcChjb25fZW52LHNqdmFsKTsJLyogc28gZG8gdGhlIHJpZ2h0IHRoaW5n LiAqLwotCX0gZWxzZSB7Ci0JICAgIGludCB4ID0gMDsKLSNpZmRlZiBVU0VDQ0pNUEJVRgotCSAg ICAvKiBqbXBfYnVmIG5vdCBpbml0J2QgeWV0IGEgY2xvc2UgYXBwcm94aW1hdGlvbi4uLiAqLwot I2lmZGVmIENLX1RSSUdHRVIKLQkgICAgaWYgKGN4ID09IENFVl9IVVApCi0jZW5kaWYgLyogQ0tf VFJJR0dFUiAqLwotCSAgICAgIHR0Y2xvcygwKTsJCS8qIENsb3NlIG91ciBlbmQgb2YgdGhlIGNv bm5lY3Rpb24gKi8KLQkgICAgaWYgKHBpZCkgewotCQlkZWJ1ZyhGMTAxLCJDT05ORUNUIHRyaWdn ZXIga2lsbGluZyBwaWQiLCIiLHBpZCk7Ci0jaWZkZWYgQkVPU09SQkVCT1gKLQkJewotCQkgICAg bG9uZyByZXRfdmFsOwotCQkgICAgeCA9IGtpbGwocGlkLFNJR0tJTExUSFIpOwkvKiBLaWxsIGxv d2VyIGZvcmsgKi8KLQkJICAgIHdhaXRfZm9yX3RocmVhZCAocGlkLCAmcmV0X3ZhbCk7Ci0JCX0K LSNlbHNlCi0jaWZkZWYgUGxhbjkKLQkJeCA9IGtpbGwocGlkLCBTSUdLSUxMKTsgLyogKHNob3Vs ZCBhbHdheXMgdXNlIHRoaXMgcmVhbGx5KSAqLwotI2Vsc2UKLQkJeCA9IGtpbGwocGlkLDkpOwkv KiBLaWxsIGxvd2VyIGZvcmsgKGhpc3RvcnkpICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLQkJd2Fp dCgoV0FJVF9UICopMCk7CS8qIFdhaXQgdGlsbCBnb25lLiAqLwotCQlpZiAoeCA8IDApIHsKLQkJ ICAgIHByaW50ZigiRVJST1I6IEZhaWx1cmUgdG8ga2lsbCBwaWQgJWxkOiAlcywgZXJybm89JWRc biIsCi0JCQkgICAobG9uZykgcGlkLCBja19lcnJzdHIoKSwgZXJybm8pOwotCQkgICAgZGVidWco RjExMSwiQ09OTkVDVCBlcnJvciBraWxsaW5nIHN0YWxlIHBpZCIsCi0JCQkgIGNrX2VycnN0cigp LGVycm5vKTsKLQkJfQotCQlwaWQgPSAoUElEX1QpIDA7Ci0jZW5kaWYgLyogQkVPU09SQkVCT1gg Ki8KLQkgICAgfQotCSAgICBjb25yZXMoKTsJCQkvKiBSZXNldCB0aGUgY29uc29sZS4gKi8KLQkg ICAgaWYgKCFxdWlldCkgewotCQlwcmludGYoIlxyXG4oQmFjayBhdCAlcylcclxuIiwKLQkJICAg ICAgICpteWhvc3QgPyBteWhvc3QgOgotI2lmZGVmIFVOSVgKLQkJICAgICAgICJsb2NhbCBVTklY IHN5c3RlbSIKLSNlbHNlCi0JCSAgICAgICAibG9jYWwgc3lzdGVtIgotI2VuZGlmIC8qIFVOSVgg Ki8KLQkJICAgICAgICk7Ci0JICAgIH0KLQkgICAgd2hhdCA9IFdfTk9USElORzsJCS8qIFNvIGNv bnNvbGUgbW9kZXMgYXJlIHNldCByaWdodC4gKi8KLQkgICAgcHJpbnRmKCJcclxuIik7CQkvKiBw cmV2ZW50IHByb21wdC1zdG9tcGluZyAqLwotCSAgICBja2xvbmdqbXAoY21qYnVmLDApOwkvKiBE byB3aGF0IHRoZSBDdHJsLUMgaGFuZGxlciBkb2VzICovCi0jZWxzZQotCSAgICBwcmludGYoIlxy XG5Mb25nanVtcCBmYWlsdXJlIC0gZmF0YWxcclxuIik7Ci0JICAgIGRvZXhpdChHT09EX0VYSVQs LTEpOwkvKiBCZXR0ZXIgdGhhbiBkdW1waW5nIGNvcmUuLi4gKi8KLSNlbmRpZiAvKiBVU0VDQ0pN UEJVRiAqLwotCX0KLSNpZmRlZiBVU0VDQ0pNUEJVRgotI3VuZGVmIFVTRUNDSk1QQlVGCi0jZW5k aWYgLyogVVNFQ0NKTVBCVUYgKi8KLQotICAgICAgY2FzZSBDRVZfRFVQOgkJCS8qIENoaWxkIHNl bmRzIGR1cGxleCBjaGFuZ2UgKi8KLQlyZWFkKHhwaXBlWzBdLCAoY2hhciAqKSZkdXBsZXgsIHNp emVvZihkdXBsZXgpKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIHBpcGVpbnQgZHVwbGV4IiwiIixk dXBsZXgpOwotCWJyZWFrOwotI2lmZGVmIFROQ09ERQotICAgICAgY2FzZSBDRVZfTUVCSU46CQkJ LyogQ2hpbGQgc2VuZHMgbWVfYmluYXJ5IGNoYW5nZSAqLwotCXJlYWQoeHBpcGVbMF0sCi0JICAg ICAoY2hhciAqKSZURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSksCi0JICAgICBzaXplb2YoVEVMT1BU X01FKFRFTE9QVF9CSU5BUlkpKQotCSAgICAgKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIHBpcGVp bnQgbWVfYmluYXJ5IiwiIixURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpOwotCWJyZWFrOwotICAg ICAgY2FzZSBDRVZfVUJJTjoJCQkvKiBDaGlsZCBzZW5kcyB1X2JpbmFyeSBjaGFuZ2UgKi8KLQly ZWFkKHhwaXBlWzBdLAotCSAgICAgKGNoYXIgKikmVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSksCi0J ICAgICBzaXplb2YoVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkpCi0JICAgICApOwotCWRlYnVnKEYx MDEsIkNPTk5FQ1QgcGlwZWludCB1X2JpbmFyeSIsIiIsVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkp OwotCWJyZWFrOwotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0jaWZkZWYgQ0tfQVBDCi0gICAgICBj YXNlIENFVl9BVUw6CQkJLyogQXV0b3VwbG9hZCAqLwotCWp1c3RvbmUgPSAxOwotCWRlYnVnKEYx MDAsIkNPTk5FQ1QgYXV0b3VwbG9hZCBhdCBwYXJlbnQiLCIiLDApOwotI2lmZGVmIENLX0FVVE9E TAotICAgICAgY2FzZSBDRVZfQURMOgkJCS8qIEF1dG9kb3dubG9hZCAqLwotCWFwY2FjdGl2ZSA9 IEFQQ19MT0NBTDsKLQlpZiAoIWp1c3RvbmUpIGRlYnVnKEYxMDAsIkNPTk5FQ1QgYXV0b2Rvd25s b2FkIGF0IHBhcmVudCIsIiIsMCk7Ci0JLyogQ29weSBjaGlsZCdzIEtlcm1pdCBwYWNrZXQgaWYg YW55ICovCi0JcmVhZCh4cGlwZVswXSwgKGNoYXIgKikmeCwgc2l6ZW9mKHgpKTsKLQlkZWJ1ZyhG MTAxLCJDT05ORUNUIHRyaWdnZXIgaWJjICh1cHBlcikiLCIiLGliYyk7Ci0JaWYgKHggPiAwKQot CSAgcmVhZCh4cGlwZVswXSwgKGNoYXIgKilrc2J1ZiwgeCsxKTsKLSNlbmRpZiAvKiBDS19BVVRP REwgKi8KLSAgICAgIGNhc2UgQ0VWX0FQQzoJCQkvKiBBcHBsaWNhdGlvbiBQcm9ncmFtIENvbW1h bmQgKi8KLQlyZWFkKHhwaXBlWzBdLCAoY2hhciAqKSZhcGNsZW5ndGgsIHNpemVvZihhcGNsZW5n dGgpKTsKLQlyZWFkKHhwaXBlWzBdLCBhcGNidWYsIGFwY2xlbmd0aCsxKTsgLyogSW5jbHVkZSB0 cmFpbGluZyB6ZXJvIGJ5dGUgKi8KLQlkZWJ1ZyhGMTExLCJDT05ORUNUIEFQQyBhdCBwYXJlbnQi LGFwY2J1ZixhcGNsZW5ndGgpOwotCXJlYWQoeHBpcGVbMF0sIChjaGFyICopJmliYywgc2l6ZW9m KGliYykpOyAvKiBDb3B5IGNoaWxkJ3MgKi8KLQlpZiAoaWJjID4gMCkgewkJCQkgICAvKiBpbnB1 dCBidWZmZXIuICovCi0JICAgIHJlYWQoeHBpcGVbMF0sIChjaGFyICopJmlicCwgc2l6ZW9mKGli cCkpOwotCSAgICByZWFkKHhwaXBlWzBdLCBpYnAsIGliYyk7Ci0JfQotCW9iYyA9IDA7IG9icCA9 IG9idWY7ICpvYnVmID0gTlVMOyAvKiBCZWNhdXNlIHBvcnQgZm9yayBmbHVzaGVkICovCi0Jc2p2 YWwgPSBDRVZfQVBDOwotCWNrbG9uZ2ptcChjb25fZW52LHNqdmFsKTsKLQkvKiBOT1RSRUFDSEVE ICovCi0jZW5kaWYgLyogQ0tfQVBDICovCi0KLSNpZmRlZiBTVU5YMjUKLSAgICAgIGNhc2UgQ0VW X1BBRDoJCQkvKiBYLjI1IFBBRCBwYXJhbWV0ZXIgY2hhbmdlICovCi0JZGVidWcoRjEwMCwiQ09O TkVDVCBwaXBlaW50IFBBRCBjaGFuZ2UiLCIiLDApOwotCXJlYWQoeHBpcGVbMF0scGFkcGFybXMs TUFYUEFEUEFSTVMpOwotCXNqdmFsID0gQ0VWX1BBRDsJCS8qIFNldCBnbG9iYWwgdmFyaWFibGUu ICovCi0jaWZkZWYgQ09NTUVOVAkJCQkvKiBXZSBtaWdodCBub3QgbmVlZCB0byBkbyB0aGlzLi4u ICovCi0JY2tsb25nam1wKGNvbl9lbnYsc2p2YWwpOwotCS8qIE5PVFJFQUNIRUQgKi8KLSNlbHNl ICAvKiBDT01NRU5UICovCi0JYnJlYWs7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8q IFNVTlgyNSAqLwotICAgIH0KLSAgICBzaWduYWwoQ0tfRk9SS19TSUcsIHBpcGVpbnQpOwkvKiBT ZXQgdXAgc2lnbmFsIGhhbmRsZXIgKi8KLSAgICBraWxsKHBpZCwgQ0tfRk9SS19TSUcpOwkJLyog U2lnbmFsIHRoZSBwb3J0IGZvcmsgLi4uICovCi19Ci0KLS8qICBDIEsgQyBQIFUgVCBDICAtLSAg Qy1LZXJtaXQgQ09OTkVDVCBQdXQgQ2hhcmFjdGVyIHRvIFNjcmVlbiAgKi8KLS8qCi0gIE91dHB1 dCBpcyBidWZmZXJlZCB0byBhdm9pZCBzbG93IHNjcmVlbiB3cml0ZXMgb24gZmFzdCBjb25uZWN0 aW9ucy4KLSAgTk9URTogVGhlc2UgY291bGQgKGVhc2lseT8pIGJlY29tZSBtYWNyb3MgLi4uCi0q Lwotc3RhdGljIGludAotY2tjcHV0ZigpIHsJCQkJLyogRHVtcCB0aGUgb3V0cHV0IGJ1ZmZlciAq LwotICAgIGludCB4ID0gMDsKLSAgICBpZiAob2JjID4gMCkJCQkvKiBJZiB3ZSBoYXZlIGFueSBj aGFyYWN0ZXJzLCAqLwotICAgICAgeCA9IGNvbnhvKG9iYyxvYnVmKTsJCS8qIGR1bXAgdGhlbSwg Ki8KLSAgICBvYnAgPSBvYnVmOwkJCQkvKiByZXNldCB0aGUgcG9pbnRlciAqLwotICAgIG9iYyA9 IDA7CQkJCS8qIGFuZCB0aGUgY291bnRlci4gKi8KLSAgICByZXR1cm4oeCk7CQkJCS8qIFJldHVy biBjb254bydzIHJldHVybiBjb2RlICovCi19Ci0KLWludAotY2tjcHV0YyhjKSBpbnQgYzsgewot ICAgIGludCB4OwotCi0gICAgKm9icCsrID0gYyAmIDB4ZmY7CQkJLyogRGVwb3NpdCB0aGUgY2hh cmFjdGVyICovCi0gICAgb2JjKys7CQkJCS8qIENvdW50IGl0ICovCi0gICAgaWYgKGliYyA9PSAw IHx8CQkJLyogSWYgaW5wdXQgYnVmZmVyIGFib3V0IGVtcHR5ICovCi0Jb2JjID09IE9CVUZMKSB7 CQkJLyogb3Igb3V0cHV0IGJ1ZmZlciBmdWxsICovCi0JZGVidWcoRjEwMSwiQ09OTkVDVCBDS0NQ VVRDIG9iYyIsIiIsb2JjKTsKLQl4ID0gY29ueG8ob2JjLG9idWYpOwkJLyogZHVtcCB0aGUgYnVm ZmVyLCAqLwotCW9icCA9IG9idWY7CQkJLyogcmVzZXQgdGhlIHBvaW50ZXIgKi8KLQlvYmMgPSAw OwkJCS8qIGFuZCB0aGUgY291bnRlci4gKi8KLQlyZXR1cm4oeCk7CQkJLyogUmV0dXJuIGNvbnhv J3MgcmV0dXJuIGNvZGUgKi8KLSAgICB9IGVsc2UgcmV0dXJuKDApOwotfQotCi0vKiAgQyBLIEMg RyBFIFQgQyAgLS0gIEMtS2VybWl0IENPTk5FQ1QgR2V0IENoYXJhY3RlciAgKi8KLS8qCi0gIEJ1 ZmZlcmVkIHJlYWQgZnJvbSBjb21tdW5pY2F0aW9uIGRldmljZS4KLSAgUmV0dXJucyB0aGUgbmV4 dCBjaGFyYWN0ZXIsIHJlZmlsbGluZyB0aGUgYnVmZmVyIGlmIG5lY2Vzc2FyeS4KLSAgT24gZXJy b3IsIHJldHVybnMgdHRpbmMncyByZXR1cm4gY29kZSAoc2VlIHR0aW5jKCkgZGVzY3JpcHRpb24p LgotICBEdW1teSBhcmd1bWVudCBmb3IgY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb25zIHdp dGggdHRpbmMoKS4KLSAgTk9URTogV2UgZG9uJ3QgaGF2ZSBhIG1hY3JvIGZvciB0aGlzIGJlY2F1 c2Ugd2UgaGF2ZSB0byBwYXNzCi0gIGEgcG9pbnRlciB0byB0aGlzIGZ1bmN0aW9uIGFzIGFuIGFy Z3VtZW50IHRvIHRuX2Rvb3AoKS4KLSovCi1pbnQKLWNrY2dldGMoZHVtbXkpIGludCBkdW1teTsg ewotICAgIGludCBjLCBuOwotI2lmZGVmIENLX1NTTAotICAgIGV4dGVybiBpbnQgc3NsX2FjdGl2 ZV9mbGFnLCB0bHNfYWN0aXZlX2ZsYWc7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSNpZmRlZiBD S19FTkNSWVBUSU9OCi0gICAgLyogTm8gYnVmZmVyaW5nIGZvciBwb3NzaWJseSBlbmNyeXB0ZWQg Y29ubmVjdGlvbnMgKi8KLSAgICBpZiAobmV0d29yayAmJiBJU19URUxORVQoKSAmJiBURUxPUFRf TUUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSkKLSAgICAgIHJldHVybih0dGluYygwKSk7Ci0jZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVmIENLX1NTTAotICAgIGlmIChzc2xfYWN0aXZl X2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKQotICAgICAgICByZXR1cm4odHRpbmMoMCkpOwotI2Vu ZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIENPTU1FTlQKLS8qIHRvbyBtdWNoICovCi0gICAgZGVi dWcoRjEwMSwiQ09OTkVDVCBDS0NHRVRDIDEgaWJjIiwiIixpYmMpOyAvKiBMb2cgKi8KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0gICAgaWYgKGliYyA8IDEpIHsJCQkvKiBOZWVkIHRvIHJlZmlsbCBi dWZmZXI/ICovCi0JaWJjID0gMDsJCQkvKiBZZXMsIHJlc2V0IGNvdW50ICovCi0JaWJwID0gaWJ1 ZjsJCQkvKiBhbmQgYnVmZmVyIHBvaW50ZXIgKi8KLQkvKiBkZWJ1ZyhGMTAwLCJDT05ORUNUIENL Q0dFVEMgMSBjYWxsaW5nIHR0aW5jKDApIiwiIiwwKTsgKi8KLSNpZmRlZiBDT01NRU5UCi0vKgot ICBUaGlzIGNoZWNrIGlzIG5vdCB3b3J0aCB0aGUgb3ZlcmhlYWQuICBTY2VuYXJpbzogdHRjaGso KSByZXR1cm5zIDAsIHNvIHdlCi0gIGZhbGwgdGhyb3VnaCB0byB0aGUgYmxvY2tpbmcgdHRpbmMo KS4gIFdoaWxlIGluIHR0aW5jKCksIHRoZSBjb25uZWN0aW9uIGlzCi0gIGxvc3QuICBCdXQgdGhl IHJlYWQoKSB0aGF0IHR0aW5jKCkgY2FsbHMgZG9lcyBub3Qgbm90aWNlLCBhbmQgbmV2ZXIgcmV0 dXJucy4KLSAgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IGluIEhQLVVYLCBhbmQgY2FuIGJlIHNlZW4g d2hlbiB3ZSB0dXJuIG9mZiB0aGUgbW9kZW0uCi0qLwotCWlmICghbmV0d29yayAmJiAoY2Fycmll ciAhPSBDQVJfT0ZGKSkKLQkgIGlmICgobiA9IHR0Y2hrKCkpIDwgMCkJLyogTWFrZSBzdXJlIGNv bm5lY3Rpb24gaXMgbm90IGxvc3QgKi8KLQkgICAgcmV0dXJuKG4pOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQljID0gdHRpbmMoMCk7CQkJLyogUmVhZCBvbmUgY2hhcmFjdGVyLCBibG9ja2luZyAq LwotCS8qIGRlYnVnKEYxMDEsIkNPTk5FQ1QgQ0tDR0VUQyAxIHR0aW5jKDApIiwiIixjKTsgKi8K LQlpZiAoYyA8IDApIHsJCQkvKiBJZiBlcnJvciwgcmV0dXJuIGVycm9yIGNvZGUgKi8KLQkgICAg cmV0dXJuKGMpOwotCX0gZWxzZSB7CQkJLyogT3RoZXJ3aXNlLCBnb3Qgb25lIGNoYXJhY3RlciAq LwotCSAgICAqaWJwKysgPSBjOwkJCS8qIEFkdmFuY2UgYnVmZmVyIHBvaW50ZXIgKi8KLQkgICAg aWJjKys7CQkJLyogYW5kIGNvdW50LiAqLwotCX0KLQlpZiAoKG4gPSB0dGNoaygpKSA+IDApIHsJ LyogQW55IG1vcmUgd2FpdGluZz8gKi8KLQkgICAgaWYgKG4gPiAoSUJVRkwgLSBpYmMpKQkvKiBH ZXQgdGhlbSBhbGwgYXQgb25jZS4gKi8KLQkgICAgICBuID0gSUJVRkwgLSBpYmM7CQkvKiBEb24n dCBvdmVyZmxvdyBidWZmZXIgKi8KLQkgICAgaWYgKChuID0gdHR4aW4obiwoQ0hBUiAqKWlicCkp ID4gMCkgewotI2lmZGVmIENLX0VOQ1JZUFRJT04KLQkJaWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNS WVBUSU9OKSkKLQkJICBja190bl9kZWNyeXB0KGlicCxuKTsKLSNlbmRpZiAvKiBDS19FTkNSWVBU SU9OICovCi0JCWliYyArPSBuOwkJCS8qIEFkdmFuY2UgY291bnRlciAqLwotCSAgICB9Ci0JfSBl bHNlIGlmIChuIDwgMCkgewkJLyogRXJyb3I/ICovCi0JICAgIHJldHVybihuKTsJCQkvKiBSZXR1 cm4gdGhlIGVycm9yIGNvZGUgKi8KLQl9Ci0JZGVidWcoRjEwMSwiQ09OTkVDVCBDS0NHRVRDIDIg aWJjIiwiIixpYmMpOyAvKiBMb2cgaG93IG1hbnkgKi8KLQlpYnAgPSBpYnVmOwkJCS8qIFBvaW50 IHRvIGJlZ2lubmluZyBvZiBidWZmZXIgKi8KLSAgICB9Ci0gICAgYyA9ICppYnArKyAmIDB4ZmY7 CQkJLyogR2V0IG5leHQgY2hhcmFjdGVyIGZyb20gYnVmZmVyICovCi0gICAgaWJjLS07CQkJCS8q IFJlZHVjZSBidWZmZXIgY291bnQgKi8KLSAgICByZXR1cm4oYyk7CQkJCS8qIFJldHVybiB0aGUg Y2hhcmFjdGVyICovCi19Ci0KLS8qCi0gICBLZXlib2FyZCBoYW5kbGluZywgYnVmZmVyZWQgZm9y IHNwZWVkLCB3aGljaCBpcyBuZWVkZWQgd2hlbiBDLUtlcm1pdCBpcwotICAgaW4gQ09OTkVDVCBt b2RlIGJldHdlZW4gdHdvIG90aGVyIGNvbXB1dGVycyB0aGF0IGFyZSB0cmFuc2ZlcnJpbmcgZGF0 YS4KLSovCi1zdGF0aWMgY2hhciAqa2JwOwkJCS8qIEtleWJvYXJkIGlucHV0IGJ1ZmZlciBwb2lu dGVyICovCi1zdGF0aWMgaW50IGtiYzsJCQkJLyogS2V5Ym9hcmQgaW5wdXQgYnVmZmVyIGNvdW50 ICovCi0KLSNpZmRlZiBDS19TTUFMTAkJCQkvKiBLZXlib2FyZCBpbnB1dCBidWZmZXIgbGVuZ3Ro ICovCi0jZGVmaW5lIEtCVUZMIDMyCQkJLyogU21hbGwgZm9yIFBEUC0xMSBVTklYICovCi0jZWxz ZQotI2RlZmluZSBLQlVGTCAyNTcJCQkvKiBSZWd1bGFyIGtlcm5lbCBzaXplIGZvciBvdGhlcnMg Ki8KLSNlbmRpZiAvKiBDS19TTUFMTCAqLwotCi0jaWZkZWYgRFlOQU1JQwotc3RhdGljIGNoYXIg KmtidWYgPSBOVUxMOwotI2Vsc2UKLXN0YXRpYyBjaGFyIGtidWZbS0JVRkxdOwotI2VuZGlmIC8q IERZTkFNSUMgKi8KLQotLyogTWFjcm8gZm9yIHJlYWRpbmcga2V5c3Ryb2tlcy4gKi8KLQotI2Rl ZmluZSBDT05HS1MoKSAoKCgtLWtiYyk+PTApID8gKChpbnQpKCprYnArKykgJiAwMzc3KSA6IGti Z2V0KCkpCi0KLS8qCi0gIE5vdGUgdGhhdCB3ZSBjYWxsIHJlYWQoKSBkaXJlY3RseSBoZXJlLCBu b3JtYWxseSBhIG5vLW5vLCBidXQgaW4gdGhpcyBjYXNlCi0gIHdlIGtub3cgaXQncyBVTklYIGFu ZCB3ZSdyZSBvbmx5IGRvaW5nIHdoYXQgY29uaW5jKDApIHdvdWxkIGhhdmUgZG9uZSwKLSAgZXhj ZXB0IHdlJ3JlIHJlYWRpbmcgYSBibG9jayBvZiBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIGp1c3Qg b25lLiAgVGhlcmUgaXMsCi0gIGF0IHByZXNlbnQsIG5vIGNvbnhpbigpIGFuYWxvZyB0byB0dHhp bigpIGZvciBjaHVuayByZWFkcywgYW5kIGluc3RpdHV0aW5nCi0gIG9uZSB3b3VsZCBvbmx5IGFk ZCBmdW5jdGlvbi1jYWxsIG92ZXJoZWFkIGFzIGl0IHdvdWxkIG9ubHkgYmUgYSB3cmFwcGVyIGZv cgotICBhIHJlYWQoKSBjYWxsIGFueXdheS4KLSovCi0vKgotICBBbm90aGVyIG5vdGU6IFdlIHN0 aWNrIGluIHRoaXMgcmVhZCgpIHRpbGwgdGhlIHVzZXIgdHlwZXMgc29tZXRoaW5nLgotICBCdXQg dGhlIG90aGVyIChsb3dlcikgZm9yayBpcyBydW5uaW5nIHRvbywgYW5kIG9uIFRFTE5FVCBjb25u ZWN0aW9ucywKLSAgaXQgd2lsbCBzaWduYWwgdXMgdG8gaW5kaWNhdGUgZWNoby1jaGFuZ2UgbmVn b3RpYXRpb25zLCBhbmQgdGhpcyBjYW4KLSAgaW50ZXJydXB0IHRoZSByZWFkKCkuICBTb21lIFVO SVhlcyBhdXRvbWF0aWNhbGx5IHJlc3RhcnQgdGhlIGludGVycnVwdGVkCi0gIHN5c3RlbSBjYWxs LCBvdGhlcnMgcmV0dXJuIGZyb20gaXQgd2l0aCBlcnJubyA9PSBFSU5UUi4KLSovCi1zdGF0aWMg aW50CQkJCS8qIEtleWJvYXJkIGJ1ZmZlciBmaWxsZXIgKi8KLWtiZ2V0KCkgewotI2lmZGVmIEVJ TlRSCi0gICAgaW50IHRyaWVzID0gMTA7CQkJLyogSWYgcmVhZCgpIGlzIGludGVycnVwdGVkLCAq LwotICAgIGludCBvayA9IDA7Ci0gICAgd2hpbGUgKHRyaWVzLS0gPiAwKSB7CQkvKiB0cnkgYSBm ZXcgdGltZXMuLi4gKi8KLSNlbmRpZiAvKiBFSU5UUiAqLwotCWlmICgoa2JjID0gY29uY2hrKCkp IDwgMSkJLyogSG93IG1hbnkgY2hhcnMgd2FpdGluZz8gKi8KLQkgIGtiYyA9IDE7CQkJLyogSWYg bm9uZSBvciBkdW5ubywgd2FpdCBmb3Igb25lLiAqLwotCWVsc2UgaWYgKGtiYyA+IEtCVUZMKQkJ LyogSWYgdG9vIG1hbnksICovCi0JICBrYmMgPSBLQlVGTDsJCQkvKiBvbmx5IHJlYWQgdGhpcyBt YW55LiAqLwotCWlmICgoa2JjID0gcmVhZCgwLCBrYnVmLCBrYmMpKSA8IDEpIHsgLyogTm93IHJl YWQgaXQvdGhlbS4gKi8KLQkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBrYmdldCBlcnJubyIsIiIs ZXJybm8pOwkvKiBHb3QgYW4gZXJyb3IuICovCi0jaWZkZWYgRUlOVFIKLQkgICAgaWYgKGVycm5v ID09IEVJTlRSKQkJLyogSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwuICovCi0JICAgICAgY29udGlu dWU7CQkJLyogVHJ5IGFnYWluLCB1cCB0byBsaW1pdC4gKi8KLQkgICAgZWxzZQkJCS8qIFNvbWV0 aGluZyBlbHNlLiAqLwotI2VuZGlmIC8qIEVJTlRSICovCi0JICAgICAgcmV0dXJuKC0xKTsJCS8q IFBhc3MgYWxvbmcgcmVhZCgpIGVycm9yLiAqLwotCX0KLSNpZmRlZiBFSU5UUgotCWVsc2UgeyBv ayA9IDE7IGJyZWFrOyB9Ci0gICAgfQotICAgIGlmICghb2spIHJldHVybigtMSk7Ci0jZW5kaWYg LyogRUlOVFIgKi8KLSAgICBrYnAgPSBrYnVmOwkJCQkvKiBBZGp1c3QgYnVmZmVyIHBvaW50ZXIs ICovCi0gICAga2JjLS07CQkJCS8qIGNvdW50LCAqLwotICAgIHJldHVybigoaW50KSgqa2JwKysp ICYgMDM3Nyk7CS8qIGFuZCByZXR1cm4gZmlyc3QgY2hhcmFjdGVyLiAqLwotfQotCi0vKiAgQyBP IE4gQyBMIEQgLS0gIEludGVyYWN0aXZlIHRlcm1pbmFsIGNvbm5lY3Rpb24gY2hpbGQgZnVuY3Rp b24gKi8KLQotc3RhdGljCi0jaWZkZWYgQkVPU09SQkVCT1gKLWxvbmcKLSNlbHNlCi1WT0lECi0j ZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KLWNvbmNsZCAoCi0jaWZkZWYgQkVPU09SQkVCT1gKLSAg ICAgICB2b2lkICpiZXZvaWQKLSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotICAgICAgICkgewot ICAgIGludAluOwkJCS8qIEdlbmVyYWwgcHVycG9zZSBjb3VudGVyICovCi0gICAgaW50IGk7CQkJ LyogRm9yIGxvb3BzLi4uICovCi0gICAgaW50IGMgPSAtMTsJCQkvKiBjIGlzIGEgY2hhcmFjdGVy LCBidXQgbXVzdCBiZSBzaWduZWQKLQkJCQkgICBpbnRlZ2VyIHRvIHBhc3MgdGhydSAtMSwgd2hp Y2ggaXMgdGhlCi0JCQkJICAgbW9kZW0gZGlzY29ubmVjdGlvbiBzaWduYWwsIGFuZCBpcwotCQkJ CSAgIGRpZmZlcmVudCBmcm9tIHRoZSBjaGFyYWN0ZXIgMDM3NyAqLwotICAgIGludCBwcmV2Owot I2lmZGVmIFROQ09ERQotICAgIGludCB0eDsJCQkvKiB0bl9kb29wKCkgcmV0dXJuIGNvZGUgKi8K LSNlbmRpZiAvKiBUTkNPREUgKi8KLSNpZmRlZiBDS19UUklHR0VSCi0gICAgaW50IGl4OwkJCQkv KiBUcmlnZ2VyIGluZGV4ICovCi0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotI2lmbmRlZiBOT0VT Q1NFUQotICAgIGludCBhcGNyYzsKLSNlbmRpZiAvKiBOT0VTQ1NFUSAqLwotCi0jaWZkZWYgQ09N TUVOVAotICAgIGludCBjb25yZXQgPSAwOwkJCS8qIFJldHVybiB2YWx1ZSBmcm9tIGNvbmVjdCgp ICovCi0gICAgamJjaGtzdW0gPSAtMUw7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGpic2V0 ID0gMDsJCQkJLyogam1wX2J1ZiBub3Qgc2V0IHlldCwgZG9uJ3QgdXNlIGl0ICovCi0gICAgZGVi dWcoRjEwMSwiQ09OTkVDVCBjb25jbGQgZW50cnkiLCIiLENLX0ZPUktfU0lHKTsKLSAJLyogKioq ICovCQkvKiBJbmZlcmlvciByZWFkcywgcHJpbnRzIHBvcnQgaW5wdXQgKi8KLQotICAgIGlmIChw cml2X2NhbigpKSB7CQkJLyogQ2FuY2VsIGFsbCBwcml2cyAqLwotCXByaW50ZigiP3NldHVpZCBl cnJvciAtIGZhdGFsXG4iKTsKLQlkb2V4aXQoQkFEX0VYSVQsLTEpOwotICAgIH0KLSAgICBzaWdu YWwoU0lHSU5ULCBTSUdfSUdOKTsJCS8qIEluIGNhc2UgdGhlc2UgaGF2ZW4ndCBiZWVuICovCi0g ICAgc2lnbmFsKFNJR1FVSVQsIFNJR19JR04pOwkJLyogaW5oZXJpdGVkIGZyb20gYWJvdmUuLi4g Ki8KLSAgICBzaWduYWwoQ0tfRk9SS19TSUcsIFNJR19JR04pOwkvKiBDS19GT1JLX1NJRyBub3Qg ZXhwZWN0ZWQgeWV0ICovCi0KLSAgICBpbnNoaWZ0ID0gb3V0c2hpZnQgPSAwOwkJLyogSW5pdGlh bCBTTy9TSSBzaGlmdCBzdGF0ZS4gKi8KLSAgICB7CQkJCQkvKiBXYWl0IGZvciBwYXJlbnQncyBz ZXR1cCAqLwotCWludCBpOwotCXdoaWxlICgoaSA9IHJlYWQoeHBpcGVbMF0sICZjLCAxKSkgPD0g MCkgewotCSAgICBpZiAoaSA8IDApIHsKLQkJZGVidWcoRjEwMSwiQ09OTkVDVCBjb25jbGQgc2V0 dXAgZXJyb3IiLCIiLGkpOwotCQlkZWJ1ZyhGMTExLCJDT05ORUNUIGNvbmNsZCBzZXR1cCBlcnJv ciIsY2tfZXJyc3RyKCksZXJybm8pOwotCQlwaXBlbXNnKENFVl9IVVApOwkvKiBSZWFkIGVycm9y IC0gaGFuZ3VwICovCi0JCWNrX3NuZG1zZygpOwkJLyogU2VuZCBhbmQgd2FpdCB0byBiZSBraWxs ZWQgKi8KLQkJLyogTk9UUkVBQ0hFRCAqLwotCSAgICB9IC8qIFJlc3RhcnQgaW50ZXJydXB0ZWQg cmVhZCgpICovCi0JfQotICAgIH0KLSAgICBjbG9zZSh4cGlwZVswXSk7IHhwaXBlWzBdID0gLTE7 CS8qIENoaWxkIC0gcHJldmVudCBmdXR1cmUgcmVhZHMgKi8KLSNpZmRlZiBERUJVRwotICAgIGlm IChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAwLCJDT05ORUNUIHN0YXJ0aW5nIHBvcnQgZm9yayIsIiIs MCk7Ci0JZGVidWcoRjEwMSwiQ09OTkVDVCBwb3J0IGZvcmsgaWJjIiwiIixpYmMpOwotCWRlYnVn KEYxMDEsIkNPTk5FQ1QgcG9ydCBmb3JrIG9iYyIsIiIsb2JjKTsKLSAgICB9Ci0jZW5kaWYgLyog REVCVUcgKi8KLSAgICB3aGF0ID0gV19DT05ORUNUOwotCi0gICAgd2hpbGUgKDEpIHsJCQkJLyog RnJlc2ggcmVhZCwgd2FpdCBmb3IgYSBjaGFyYWN0ZXIuICovCi0jaWZkZWYgQU5ZWDI1Ci0JaWYg KG5ldHdvcmsgJiYgKG5ldHR5cGUgPT0gTkVUX1NYMjUpKSB7Ci0JICAgIGJ6ZXJvKHgyNWlidWYs c2l6ZW9mKHgyNWlidWYpKSA7Ci0JICAgIGlmICgoaWJ1ZmwgPSB0dHhpbihNQVhJWDI1LChDSEFS ICopeDI1aWJ1ZikpIDwgMCkgewotI2lmbmRlZiBJQk1YMjUKLQkJaWYgKGlidWZsID09IC0yKSB7 ICAvKiBQQUQgcGFybXMgY2hhbmdlcyAqLwotCQkgICAgcGlwZW1zZyhDRVZfUEFEKTsKLQkJICAg IHdyaXRlKHhwaXBlWzFdLHBhZHBhcm1zLE1BWFBBRFBBUk1TKTsKLQkJICAgIGNrX3NuZG1zZygp OwotCQl9IGVsc2UgewotI2VuZGlmIC8qIElCTVgyNSAqLwotCQkgICAgaWYgKCFxdWlldCkKLQkJ ICAgICAgcHJpbnRmKCJcclxuQ29tbXVuaWNhdGlvbnMgZGlzY29ubmVjdCAiKTsKLQkJICAgIGRv bG9nZW5kKCk7Ci0JCSAgICBwaXBlbXNnKENFVl9IVVApOwotCQkgICAgY2tfc25kbXNnKCk7CQkv KiBXYWl0IHRvIGJlIGtpbGxlZCAqLwotCQkgICAgLyogTk9UUkVBQ0hFRCAqLwotI2lmbmRlZiBJ Qk1YMjUKLSAgCQl9Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0JCS8qIHBhdXNlKCk7IDwtLS0gU0hP VUxEIEJFIE9CU09MRVRFIE5PVyEgKi8KLQkJLyogQkVDQVVTRSBwYXVzZSgpIGlzIGRvbmUgaW5z aWRlIG9mIGNrX3NuZG1zZygpICovCi0JICAgIH0KLQkgICAgaWYgKGRlYnNlcykgewkJLyogRGVi dWdnaW5nIG91dHB1dCAqLwotCQlwID0geDI1aWJ1ZiA7Ci0JCXdoaWxlIChpYnVmbC0tKSB7IGMg PSAqcCsrOyBjb25vbChkYmNocihjKSk7IH0KLQkgICAgfSBlbHNlIHsKLQkJaWYgKHNlc2xvZyAm JiBzZXNzZnQpCS8qIEJpbmFyeSBzZXNzaW9uIGxvZyAqLwotCQkgIGxvZ2NoYXIoKGNoYXIpYyk7 CS8qIExvZyBjaGFyIGJlZm9yZSB0cmFuc2xhdGlvbiAqLwotCi0JCWlmIChzb3NpCi0jaWZuZGVm IE5PQ1NFVFMKLQkJICAgIHx8IHRjc2wgIT0gdGNzcgotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQkJ ICAgICkgeyAvKiBDaGFyYWN0ZXIgYXQgYSB0aW1lICovCi0JCSAgICBmb3IgKGkgPSAxOyBpIDwg aWJ1Zmw7IGkrKykgewotCQkJYyA9IHgyNWlidWZbaV0gJiBjbWFzazsKLQkJCWlmIChzb3NpKSB7 IC8qIEhhbmRsZSBTSS9TTyAqLwotCQkJICAgIGlmIChjID09IFNPKSB7Ci0JCQkJaW5zaGlmdCA9 IDE7Ci0JCQkJY29udGludWU7Ci0JCQkgICAgfSBlbHNlIGlmIChjID09IFNJKSB7Ci0JCQkJaW5z aGlmdCA9IDA7Ci0JCQkJY29udGludWU7Ci0JCQkgICAgfQotCQkJICAgIGlmIChpbnNoaWZ0KQot CQkJICAgICAgYyB8PSAwMjAwOwotCQkJfQotI2lmbmRlZiBOT0NTRVRTCi0JCQlpZiAoaW5lc2Mg PT0gRVNfTk9STUFMKSB7Ci0jaWZkZWYgVU5JQ09ERQotCQkJICAgIGludCB4OwotCQkJICAgIGlm ICh1bmljb2RlID09IDEpIHsJLyogUmVtb3RlIGlzIFVURi04ICovCi0JCQkJeCA9IHVfdG9fYigo Q0hBUiljKTsKLQkJCSAgICAgICAgaWYgKHggPT0gLTEpCi0JCQkJICBjb250aW51ZTsKLQkJCQll bHNlIGlmICh4ID09IC0yKSB7IC8qIExTIG9yIFBTICovCi0JCQkJICAgIGlueGJ1ZlswXSA9IENS OwotCQkJCSAgICBpbnhidWZbMV0gPSBMRjsKLQkJCQkgICAgaW54Y291bnQgPSAyOwotCQkJCX0g ZWxzZSB7Ci0JCQkJICAgIGlueGJ1ZlswXSA9ICh1bnNpZ25lZCkoeCAmIDB4ZmYpOwotCQkJCX0K LQkJCQljID0gaW54YnVmWzBdOwotCQkJICAgIH0gZWxzZSBpZiAodW5pY29kZSA9PSAyKSB7IC8q IExvY2FsIGlzIFVURi04ICovCi0JCQkJaW54Y291bnQgPQotCQkJCSAgYl90b191KChDSEFSKWMs aW54YnVmLE9VVFhCVUZTSVosdGNzc2l6ZSk7Ci0JCQkJYyA9IGlueGJ1ZlswXTsKLQkJCSAgICB9 IGVsc2UgewotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQkJCQlpZiAoc3hpKSBjID0gKCpzeGkpKChD SEFSKWMpOwotCQkJCWlmIChyeGkpIGMgPSAoKnJ4aSkoKENIQVIpYyk7Ci0JCQkJaW54YnVmWzBd ID0gYzsKLSNpZmRlZiBVTklDT0RFCi0JCQkgICAgfQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQkJ CX0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0JCQljICY9IGNtZG1zazsgLyogQXBwbHkgY29tbWFu ZCBtYXNrLiAqLwotCQkJY29ub2MoYyk7ICAgIC8qIE91dHB1dCB0byBzY3JlZW4gKi8KLQkJCWlm IChzZXNsb2cgJiYgIXNlc3NmdCkgLyogYW5kIHNlc3Npb24gbG9nICovCi0JCQkgIGxvZ2NoYXIo Yyk7Ci0JCSAgICB9Ci0JCX0gZWxzZSB7CQkvKiBBbGwgYXQgb25jZSAqLwotCQkgICAgZm9yIChp ID0gMTsgaSA8IGlidWZsOyBpKyspCi0JCSAgICAgIHgyNWlidWZbaV0gJj0gKGNtYXNrICYgY21k bXNrKTsKLQkJICAgIGNvbnhvKGlidWZsLHgyNWlidWYpOwotCQkgICAgaWYgKHNlc2xvZykgenNv dXR4KFpTRklMRSx4MjVpYnVmLGlidWZsKTsKLQkJfQotCSAgICB9Ci0JICAgIGNvbnRpbnVlOwot Ci0JfSBlbHNlIHsJCQkvKiBOb3QgWC4yNS4uLiAqLwotI2VuZGlmIC8qIEFOWVgyNSAqLwotLyoK LSAgR2V0IHRoZSBuZXh0IGNvbW11bmljYXRpb24gbGluZSBjaGFyYWN0ZXIgZnJvbSBvdXIgaW50 ZXJuYWwgYnVmZmVyLgotICBJZiB0aGUgYnVmZmVyIGlzIGVtcHR5LCByZWZpbGwgaXQuCi0qLwot CSAgICBwcmV2ID0gYzsJCQkvKiBSZW1lbWJlciBwcmV2aW91cyBjaGFyYWN0ZXIgKi8KLQkgICAg YyA9IGNrY2dldGMoMCk7CQkvKiBHZXQgbmV4dCBjaGFyYWN0ZXIgKi8KLQkgICAgLyogZGVidWco RjEwMSwiQ09OTkVDVCBjIiwiIixjKTsgKi8KLQkgICAgaWYgKGMgPCAwKSB7CQkvKiBGYWlsZWQu Li4gKi8KLQkJZGVidWcoRjEwMSwiQ09OTkVDVCBkaXNjb25uZWN0IGliYyIsIiIsaWJjKTsKLQkJ ZGVidWcoRjEwMSwiQ09OTkVDVCBkaXNjb25uZWN0IG9iYyIsIiIsb2JjKTsKLQkJY2tjcHV0Zigp OwkJLyogRmx1c2ggQ09OTkVDVCBvdXRwdXQgYnVmZmVyICovCi0JCWlmICghcXVpZXQpIHsKLQkJ ICAgIHByaW50ZigiXHJcbkNvbW11bmljYXRpb25zIGRpc2Nvbm5lY3QgIik7Ci0jaWZkZWYgQ09N TUVOVAotCQkgICAgaWYgKCBjID09IC0zCi0jaWZkZWYgdWx0cml4Ci0vKiBUaGlzIGhhcHBlbnMg b24gVWx0cml4IGlmIHRoZXJlJ3Mgbm8gY2FycmllciAqLwotCQkJJiYgZXJybm8gIT0gRUlPCi0j ZW5kaWYgLyogdWx0cml4ICovCi0jaWZkZWYgVVRFSwotLyogVGhpcyBoYXBwZW5zIG9uIFVURUsg aWYgdGhlcmUncyBubyBjYXJyaWVyICovCi0JCQkmJiBlcnJubyAhPSBFV09VTERCTE9DSwotI2Vu ZGlmIC8qIFVURUsgKi8KLQkJCSkKLQkJICAgICAgcGVycm9yKCJcclxuQ2FuJ3QgcmVhZCBjaGFy YWN0ZXIiKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JCX0KLSNpZmRlZiBOT1NFVEJVRgotCQlm Zmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBOT1NFVEJVRiAqLwotCQl0dGhhbmcoKTsJCS8qIEhh bmcgdXAgdGhlIGNvbm5lY3Rpb24gKi8KLQkJZGVidWcoRjExMSwiQ09OTkVDVCBjb25jbGQgaS9v IGVycm9yIixja19lcnJzdHIoKSxlcnJubyk7Ci0JCXBpcGVtc2coQ0VWX0hVUCk7Ci0JCWNrX3Nu ZG1zZygpOwkJLyogV2FpdCB0byBiZSBraWxsZWQgKi8KLQkgICAgfQotI2lmZGVmIENPTU1FTlQK LS8qIHRvbyBtdWNoLi4uICovCi0JICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgKiogUE9SVCIsIiIs Yyk7IC8qIEdvdCBjaGFyYWN0ZXIgYyBPSy4gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZk ZWYgVE5DT0RFCi0JICAgIC8qIEhhbmRsZSBURUxORVQgbmVnb3RpYXRpb25zLi4uICovCi0KLQkg ICAgaWYgKChjID09IE5VTCkgJiYgbmV0d29yayAmJiBJU19URUxORVQoKSkgewotCQlpZiAocHJl diA9PSBDUikJCS8qIERpc2NhcmQgPE5VTD4gb2YgPENSPjxOVUw+ICovCi0JCSAgaWYgKCFURUxP UFRfVShURUxPUFRfQklOQVJZKSkKLQkJICAgIGNvbnRpbnVlOwotCSAgICB9Ci0JICAgIGlmICgo YyA9PSBJQUMpICYmIG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHsKLQkJaW50IG1lX2JpbiA9IFRF TE9QVF9NRShURUxPUFRfQklOQVJZKTsKLQkJaW50IHVfYmluID0gVEVMT1BUX1UoVEVMT1BUX0JJ TkFSWSk7Ci0JCWRlYnVnKEYxMDAsIkNPTk5FQ1QgZ290IElBQyIsIiIsMCk7Ci0JCWNrY3B1dGYo KTsJCS8qIER1bXAgc2NyZWVuLW91dHB1dCBidWZmZXIgKi8KLQkJaWYgKCh0eCA9IHRuX2Rvb3Ao KENIQVIpKGMgJiAweGZmKSxkdXBsZXgsY2tjZ2V0YykpID09IDApIHsKLQkJICAgIGlmIChtZV9i aW4gIT0gVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpKSB7Ci0JCQlkZWJ1ZyhGMTAxLAotCQkJICAg ICAgIkNPTk5FQ1QgVEVMTkVUIG1lX2JpbiIsCi0JCQkgICAgICAiIiwKLQkJCSAgICAgIFRFTE9Q VF9NRShURUxPUFRfQklOQVJZKQotCQkJICAgICAgKTsKLQkJCXBpcGVtc2coQ0VWX01FQklOKTsg LyogVGVsbCBwYXJlbnQgKi8KLQkJCXdyaXRlKHhwaXBlWzFdLAotCQkJICAgICAgJlRFTE9QVF9N RShURUxPUFRfQklOQVJZKSwKLQkJCSAgICAgIHNpemVvZihURUxPUFRfTUUoVEVMT1BUX0JJTkFS WSkpCi0JCQkgICAgICApOwotCQkJY2tfc25kbXNnKCk7CS8qIFRlbGwgdGhlIHBhcmVudCBmb3Jr ICovCi0JCSAgICB9IGVsc2UgaWYgKHVfYmluICE9IFRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpKSB7 Ci0JCQlkZWJ1ZyhGMTAxLAotCQkJICAgICAgIkNPTk5FQ1QgVEVMTkVUIHVfYmluIiwKLQkJCSAg ICAgICIiLAotCQkJICAgICAgVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkKLQkJCSAgICAgICk7Ci0J CQlwaXBlbXNnKENFVl9VQklOKTsgLyogVGVsbCBwYXJlbnQgKi8KLQkJCXdyaXRlKHhwaXBlWzFd LAotCQkJICAgICAgJlRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpLAotCQkJICAgICAgc2l6ZW9mKFRF TE9QVF9VKFRFTE9QVF9CSU5BUlkpKQotCQkJICAgICAgKTsKLQkJCWNrX3NuZG1zZygpOwkvKiBU ZWxsIHRoZSBwYXJlbnQgZm9yayAqLwotCQkgICAgfQotCQkgICAgY29udGludWU7Ci0JCX0gZWxz ZSBpZiAodHggPT0gLTEpIHsJLyogSS9PIGVycm9yICovCi0JCSAgICBpZiAoIXF1aWV0KQotCQkg ICAgICBwcmludGYoIlxyXG5Db21tdW5pY2F0aW9ucyBkaXNjb25uZWN0ICIpOwotI2lmZGVmIE5P U0VUQlVGCi0JCSAgICBmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBOT1NFVEJVRiAqLwotCQkg ICAgZG9sb2dlbmQoKTsKLQkJICAgIGRlYnVnKEYxMTEsIkNPTk5FQ1QgY29uY2xkIGkvbyBlcnJv ciAyIixja19lcnJzdHIoKSxlcnJubyk7Ci0JCSAgICBwaXBlbXNnKENFVl9IVVApOwotCQkgICAg Y2tfc25kbXNnKCk7CS8qIFdhaXQgdG8gYmUga2lsbGVkICovCi0JCSAgICAvKiBOT1RSRUFDSEVE ICovCi0JCX0gZWxzZSBpZiAodHggPT0gLTMpIHsJLyogSS9PIGVycm9yICovCi0JCSAgICBpZiAo IXF1aWV0KQotCQkgICAgICBwcmludGYoIlxyXG5Db25uZWN0aW9uIGNsb3NlZCBkdWUgdG8gdGVs bmV0IHBvbGljeSAiKTsKLSNpZmRlZiBOT1NFVEJVRgotCQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0j ZW5kaWYgLyogTk9TRVRCVUYgKi8KLQkJICAgIGRvbG9nZW5kKCk7Ci0JCSAgICBkZWJ1ZyhGMTEx LCJDT05ORUNUIGNvbmNsZCBpL28gZXJyb3IgMiIsY2tfZXJyc3RyKCksZXJybm8pOwotCQkgICAg cGlwZW1zZyhDRVZfSFVQKTsKLQkJICAgIGNrX3NuZG1zZygpOwkvKiBXYWl0IHRvIGJlIGtpbGxl ZCAqLwotCQkgICAgLyogTk9UUkVBQ0hFRCAqLwotCQl9IGVsc2UgaWYgKHR4ID09IC0yKSB7CS8q IEkvTyBlcnJvciAqLwotCQkgICAgaWYgKCFxdWlldCkKLQkJICAgICAgcHJpbnRmKCJcclxuQ29u bmVjdGlvbiBjbG9zZWQgYnkgcGVlciAiKTsKLSNpZmRlZiBOT1NFVEJVRgotCQkgICAgZmZsdXNo KHN0ZG91dCk7Ci0jZW5kaWYgLyogTk9TRVRCVUYgKi8KLQkJICAgIGRvbG9nZW5kKCk7Ci0JCSAg ICBkZWJ1ZyhGMTExLCJDT05ORUNUIGNvbmNsZCBpL28gZXJyb3IgMiIsY2tfZXJyc3RyKCksZXJy bm8pOwotCQkgICAgcGlwZW1zZyhDRVZfSFVQKTsKLQkJICAgIGNrX3NuZG1zZygpOwkvKiBXYWl0 IHRvIGJlIGtpbGxlZCAqLwotCQkgICAgLyogTk9UUkVBQ0hFRCAqLwotCQl9IGVsc2UgaWYgKCh0 eCA9PSAxKSAmJiAoIWR1cGxleCkpIHsgLyogRUNITyBjaGFuZ2UgKi8KLQkJICAgIGR1cGxleCA9 IDE7CQkvKiBUdXJuIG9uIGxvY2FsIGVjaG8gKi8KLQkJICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1Qg VEVMTkVUIGR1cGxleCBjaGFuZ2UiLCIiLGR1cGxleCk7Ci0JCSAgICBwaXBlbXNnKENFVl9EVVAp OwkvKiBUZWxsIHBhcmVudCAqLwotCQkgICAgd3JpdGUoeHBpcGVbMV0sICZkdXBsZXgsIHNpemVv ZihkdXBsZXgpKTsKLQkJICAgIGNrX3NuZG1zZygpOwkvKiBUZWxsIHRoZSBwYXJlbnQgZm9yayAq LwotCQkgICAgY29udGludWU7Ci0JCX0gZWxzZSBpZiAoKHR4ID09IDIpICYmIChkdXBsZXgpKSB7 IC8qIEVDSE8gY2hhbmdlICovCi0JCSAgICBkdXBsZXggPSAwOwotCQkgICAgZGVidWcoRjEwMSwi Q09OTkVDVCBURUxORVQgZHVwbGV4IGNoYW5nZSIsIiIsZHVwbGV4KTsKLQkJICAgIHBpcGVtc2co Q0VWX0RVUCk7Ci0JCSAgICB3cml0ZSh4cGlwZVsxXSwgJmR1cGxleCwgc2l6ZW9mKGR1cGxleCkp OwotCQkgICAgY2tfc25kbXNnKCk7Ci0JCSAgICBjb250aW51ZTsKLQkJfSBlbHNlIGlmICh0eCA9 PSAzKSB7IC8qIFF1b3RlZCBJQUMgKi8KLQkJICAgIGMgPSBwYXJpdHkgPyAxMjcgOiAyNTU7Ci0J CX0KLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAodHggPT0gNCkg eyAgIC8qIElLUyBTdGF0ZSBDaGFuZ2UgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKFRFTE9Q VF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCAmJgotCQkJIXRjcF9pbmNvbWluZwot CQkJKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBoZXJlIHdlIG5lZWQgdG8gcHJpbnQg YSBtc2cgdGhhdCB0aGUgb3RoZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpZGUg aXMgaW4gU0VSVkVSIG1vZGUgYW5kIHRoYXQgUkVNT1RFICAgICAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgLyogY29tbWFuZHMgc2hvdWxkIGJlIHVzZWQuICBBbmQgQ09OTkVDVCBtb2RlICov Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBzaG91bGQgYmUgZW5kZWQuICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi8KLQkJCWFjdGl2ZSA9IDA7Ci0JCSAgICB9Ci0JCX0KLSNlbmRpZiAv KiBJS1NfT1BUSU9OICovCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAodHggPT0gNikgewotICAg ICAgICAgICAgICAgICAgICAvKiBETyBMT0dPVVQgcmVjZWl2ZWQgKi8KLQkJICAgIGlmICghcXVp ZXQpCi0JCSAgICAgIHByaW50ZigiXHJcblJlbW90ZSBMb2dvdXQgIik7Ci0jaWZkZWYgTk9TRVRC VUYKLQkJICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0JCSAgICBk ZWJ1ZyhGMTAwLCJDT05ORUNUIFJlbW90ZSBMb2dvdXQiLCIiLDApOwotCQkgICAgcGlwZW1zZyhD RVZfSFVQKTsKLQkJICAgIGNrX3NuZG1zZygpOwkvKiBXYWl0IHRvIGJlIGtpbGxlZCAqLwotCQkg ICAgLyogTk9UUkVBQ0hFRCAqLwotICAgICAgICAgICAgICAgIH0gZWxzZQotCQkgIGNvbnRpbnVl OwkJLyogTmVnb3RpYXRpb24gT0ssIGdldCBuZXh0IGNoYXIuICovCi0KLQkgICAgfSBlbHNlIGlm IChwYXJpdHkpCi0JICAgICAgYyAmPSAweDdmOwotCi0gICAgICAgICAgICBpZiAoVEVMT1BUX01F KFRFTE9QVF9FQ0hPKSAmJiB0bl9yZW1fZWNobykKLSAgICAgICAgICAgICAgICB0dG9jKGMpOyAg ICAgICAgICAgICAgICAvKiBJJ20gZWNob2luZyBmb3IgdGhlIHJlbW90ZSAqLwotI2VuZGlmIC8q IFROQ09ERSAqLwotCi0JICAgIGlmIChkZWJzZXMpIHsJCS8qIE91dHB1dCBjaGFyYWN0ZXIgdG8g c2NyZWVuICovCi0JCWNoYXIgKnM7CQkvKiBEZWJ1Z2dpbmcgZGlzcGxheS4uLiAqLwotCQlzID0g ZGJjaHIoYyk7Ci0JCXdoaWxlICgqcykKLQkJICBja2NwdXRjKCpzKyspOwotCSAgICB9IGVsc2Ug ewkJCS8qIFJlZ3VsYXIgZGlzcGxheSAuLi4gKi8KLQkJYyAmPSBjbWFzazsJCS8qIEFwcGx5IEtl cm1pdC10by1yZW1vdGUgbWFzayAqLwotI2lmZGVmIENLX0FVVE9ETAotLyoKLSAgQXV0b2Rvd25s b2FkLiAgQ2hlY2sgZm9yIEtlcm1pdCBTIHBhY2tldCBwcmlvciB0byB0cmFuc2xhdGlvbiwgc2lu Y2UgdGhhdAotICBjYW4gY2hhbmdlIHRoZSBwYWNrZXQgYW5kIG1ha2UgaXQgdW5yZWNvZ25pemFi bGUgKGFzIHdoZW4gdGhlIHRlcm1pbmFsCi0gIGNoYXJhY3RlciBzZXQgaXMgYW4gSVNPIDY0NiBv bmUpLi4uICBEaXR0byBmb3IgWm1vZGVtIHN0YXJ0IHBhY2tldC4KLSovCi0JCWlmIChhdXRvZGwJ CS8qIEF1dG9kb3dubG9hZCBlbmFibGVkPyAqLwotI2lmZGVmIElLU19PUFRJT04KLQkJICAgIHx8 IFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQKLSNlbmRpZiAvKiBJS1Nf T1BUSU9OICovCi0JCSAgICApIHsKLQkJICAgIGludCBrOwotCQkgICAgayA9IGtzdGFydCgoQ0hB UiljKTsgLyogS2VybWl0IFMgb3IgSSBwYWNrZXQ/ICovCi0jaWZkZWYgQ0tfWFlaCi0JCSAgICBp ZiAoIWsgJiYgem1kbG9rKQkvKiBPciBhbiAic3oiIHN0YXJ0PyAqLwotCQkgICAgICBrID0genN0 YXJ0KChDSEFSKWMpOwotI2VuZGlmIC8qIENLX1hZWiAqLwotCQkgICAgaWYgKGspIHsKLQkJCWlu dCBrc2lnbiA9IDA7Ci0JCQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGF1dG9kb3dubG9hZCBrIiwiIixr KTsKLQkJCWlmIChrIDwgMCkgeyAvKiBNaW51cy1Qcm90b2NvbD8gKi8KLSNpZmRlZiBOT1NFUlZF UgotCQkJICAgIGdvdG8gbm9zZXJ2ZXI7IC8qIE5lZWQgc2VydmVyIG1vZGUgZm9yIHRoaXMgKi8K LSNlbHNlCi0JCQkgICAga3NpZ24gPSAxOyAvKiBSZW1lbWJlciAqLwotCQkJICAgIGsgPSAwIC0g azsgLyogQ29udmVydCB0byBhY3R1YWwgcHJvdG9jb2wgKi8KLQkJCSAgICBqdXN0b25lID0gMTsg LyogRmxhZyBmb3IgcHJvdG9jb2wgbW9kdWxlICovCi0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQkJ CX0gZWxzZQotCQkJICBqdXN0b25lID0gMDsKLQkJCWstLTsJCS8qIEFkanVzdCBba3pdc3RhcnQn cyByZXR1cm4gdmFsdWUgKi8KLQkJCWlmIChrID09IFBST1RPX0sKLSNpZmRlZiBDS19YWVoKLQkJ CSAgICB8fCBrID09IFBST1RPX1oKLSNlbmRpZiAvKiBDS19YWVogKi8KLQkJCSAgICApIHsKLQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdyBkYW1hZ2UgdGhlIHBhY2tldCBzbyB0 aGF0IGl0IGRvZXMgbm90ICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cmln Z2VyIGF1dG9kb3dubG9hZCBkZXRlY3Rpb24gb24gc3Vic3F1ZW50ICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogbGlua3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPT0gUFJPVE9fSykg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSwgbGVuID0gc3RybGVuKChj aGFyKilrc2J1Zik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBsZW47IGkrKykKLQkJCQkgIGNrY3B1dGMoQlMpOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KLSNpZmRlZiBDS19YWVoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCQkJICBja2NwdXRj KENBTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX1hZWiAq LwotCQkJICAgIC8qIE5vdGlmeSBwYXJlbnQgKi8KLQkJCSAgICBwaXBlbXNnKGp1c3RvbmUgPyBD RVZfQVVMIDogQ0VWX0FETCk7Ci0vKgotICBTZW5kIG91ciBtZW1vcnkgYmFjayB1cCB0byB0aGUg dG9wIGZvcmsgdGhydSB0aGUgcGlwZS4KLSAgQ0FSRUZVTCAtLSBXcml0ZSB0aGlzIHN0dWZmIGlu IHRoZSBzYW1lIG9yZGVyIGl0IGlzIHRvIGJlIHJlYWQhCi0qLwotCQkJICAgIC8qIENvcHkgb3Vy IEtlcm1pdCBwYWNrZXQgdG8gdGhlIHBhcmVudCBmb3JrICovCi0JCQkgICAgbiA9IChpbnQpIHN0 cmxlbigoY2hhciAqKWtzYnVmKTsKLQkJCSAgICB3cml0ZSh4cGlwZVsxXSwgKGNoYXIgKikmbiwg c2l6ZW9mKG4pKTsKLQkJCSAgICBpZiAobiA+IDApCi0JCQkgICAgICB3cml0ZSh4cGlwZVsxXSwg KGNoYXIgKilrc2J1ZiwgbisxKTsKLQkJCSAgICBkZWJ1ZyhGMTExLCJDT05ORUNUIGF1dG9kb3du bG9hZCBrc2J1ZiIsa3NidWYsbik7Ci0JCQkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBhdXRvZG93 bmxvYWQganVzdG9uZSIsIiIsCi0JCQkJICBqdXN0b25lKTsKLQkJCSAgICAvKiBDb25zdHJ1Y3Qg dGhlIEFQQyBjb21tYW5kICovCi0JCQkgICAgc3ByaW50ZihhcGNidWYsCi0JCQkJICAgICJzZXQg cHJvdG8gJXMsICVzLCBzZXQgcHJvdG8gJXMiLAotCQkJCSAgICBwdGFiW2tdLnBfbmFtZSwKLQkJ CQkgICAga3NpZ24gPyAic2VydmVyIiA6ICJyZWNlaXZlIiwKLQkJCQkgICAgcHRhYltwcm90b2Nv bF0ucF9uYW1lCi0JCQkJICAgICk7Ci0JCQkgICAgYXBjbGVuZ3RoID0gc3RybGVuKGFwY2J1Zik7 Ci0JCQkgICAgZGVidWcoRjExMSwiQ09OTkVDVCBrc2J1ZiIsa3NidWYsayk7Ci0JCQkgICAgZGVi dWcoRjExMCwiQ09OTkVDVCBhdXRvZG93bmxvYWQiLGFwY2J1ZiwwKTsKLQkJCSAgICBhcGNhY3Rp dmUgPSBBUENfTE9DQUw7Ci0JCQkgICAgY2tjcHV0ZigpOwkvKiBGb3JjZSBzY3JlZW4gdXBkYXRl ICovCi0KLQkJCSAgICAvKiBXcml0ZSBidWZmZXIgaW5jbHVkaW5nIHRyYWlsaW5nIE5VTCBieXRl ICovCi0JCQkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCB3cml0ZSB4cGlwZSBhcGNsZW5ndGgiLCIi LAotCQkJCSAgYXBjbGVuZ3RoKTsKLQkJCSAgICB3cml0ZSh4cGlwZVsxXSwKLQkJCQkgIChjaGFy ICopJmFwY2xlbmd0aCwKLQkJCQkgIHNpemVvZihhcGNsZW5ndGgpCi0JCQkJICApOwotCQkJICAg IGRlYnVnKEYxMTAsIkNPTk5FQ1Qgd3JpdGUgeHBpcGUgYXBjYnVmIixhcGNidWYsMCk7Ci0JCQkg ICAgd3JpdGUoeHBpcGVbMV0sIGFwY2J1ZiwgYXBjbGVuZ3RoKzEpOwotCi0JCQkgICAgLyogQ29w eSBvdXIgaW5wdXQgYnVmZmVyIHRvIHRoZSBwYXJlbnQgZm9yayAqLwotCi0JCQkgICAgZGVidWco RjEwMSwiQ09OTkVDVCBhdXRvZG93bmxvYWQgY29tcGxldGUgaWJjIiwKLQkJCQkgICIiLGliYyk7 Ci0JCQkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBhdXRvZG93bmxvYWQgY29tcGxldGUgb2JjIiwK LQkJCQkgICIiLG9iYyk7Ci0JCQkgICAgd3JpdGUoeHBpcGVbMV0sIChjaGFyICopJmliYywgc2l6 ZW9mKGliYykpOwotCQkJICAgIGlmIChpYmMgPiAwKSB7Ci0JCQkJd3JpdGUoeHBpcGVbMV0sIChj aGFyICopJmlicCwgc2l6ZW9mKGlicCkpOwotCQkJCXdyaXRlKHhwaXBlWzFdLCBpYnAsIGliYyk7 Ci0JCQkgICAgfQotCQkJICAgIGNrX3NuZG1zZygpOyAvKiBXYWl0IHRvIGJlIGtpbGxlZCAqLwot CQkJICAgIC8qIE5PVFJFQUNIRUQgKi8KLQkJCX0KLQkJICAgIH0KLQkJfQotI2lmZGVmIE5PU0VS VkVSCi0JICAgICAgbm9zZXJ2ZXI6Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSNlbmRpZiAvKiBD S19BVVRPREwgKi8KLQkJaWYgKHNvc2kpIHsJCS8qIEhhbmRsZSBTSS9TTyAqLwotCQkgICAgaWYg KGMgPT0gU08pIHsJLyogU2hpZnQgT3V0ICovCi0JCQlpbnNoaWZ0ID0gMTsKLQkJCWNvbnRpbnVl OwotCQkgICAgfSBlbHNlIGlmIChjID09IFNJKSB7IC8qIFNoaWZ0IEluICovCi0JCQlpbnNoaWZ0 ID0gMDsKLQkJCWNvbnRpbnVlOwotCQkgICAgfQotCQkgICAgaWYgKGluc2hpZnQpIGMgfD0gMDIw MDsKLQkJfQotCQlpbnhidWZbMF0gPSBjOwkJLyogSW4gY2FzZSB0aGVyZSBpcyBubyB0cmFuc2xh dGlvbiAqLwotCQlpbnhjb3VudCA9IDE7CQkvKiAuLi4gKi8KLSNpZm5kZWYgTk9DU0VUUwotCQlp ZiAoaW5lc2MgPT0gRVNfTk9STUFMKQl7IC8qIElmIG5vdCBpbiBhbiBlc2NhcGUgc2VxdWVuY2Ug Ki8KLSNpZmRlZiBVTklDT0RFCi0JCSAgICBpbnQgeDsJCS8qIFRyYW5zbGF0ZSBjaGFyYWN0ZXIg c2V0cyAqLwotCQkgICAgQ0hBUiBjaDsKLQkJICAgIGNoID0gYzsKLQkJICAgIGlmICh1bmljb2Rl ID09IDEpIHsJLyogUmVtb3RlIGlzIFVURi04ICovCi0JCQl4ID0gdV90b19iKGNoKTsKLQkJCWlm ICh4IDwgMCkKLQkJCSAgY29udGludWU7Ci0JCQlpbnhidWZbMF0gPSAodW5zaWduZWQpKHggJiAw eGZmKTsKLQkJCWMgPSBpbnhidWZbMF07Ci0JCSAgICB9IGVsc2UgaWYgKHVuaWNvZGUgPT0gMikg eyAvKiBMb2NhbCBpcyBVVEYtOCAqLwotCQkJaW54Y291bnQgPSBiX3RvX3UoY2gsaW54YnVmLE9V VFhCVUZTSVosdGNzc2l6ZSk7Ci0JCQljID0gaW54YnVmWzBdOwotCQkgICAgfSBlbHNlIHsKLSNl bmRpZiAvKiBVTklDT0RFICovCi0JCQlpZiAoc3hpKSBjID0gKCpzeGkpKChDSEFSKWMpOwotCQkJ aWYgKHJ4aSkgYyA9ICgqcnhpKSgoQ0hBUiljKTsKLQkJCWlueGJ1ZlswXSA9IGM7Ci0jaWZkZWYg VU5JQ09ERQotCQkgICAgfQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQkJfQotI2VuZGlmIC8qIE5P Q1NFVFMgKi8KLQotI2lmbmRlZiBOT0VTQ1NFUQotCQlpZiAoZXNjc2VxKQkJLyogSWYgaGFuZGxp bmcgZXNjYXBlIHNlcXVlbmNlcyAqLwotCQkgIGFwY3JjID0gY2hrYWVzKChjaGFyKWMpOyAvKiB1 cGRhdGUgb3VyIHN0YXRlICovCi0jaWZkZWYgQ0tfQVBDCi0vKgotICBJZiB3ZSBhcmUgaGFuZGxp bmcgQVBDcywgd2UgaGF2ZSBzZXZlcmFsIHBvc3NpYmlsaXRpZXMgYXQgdGhpcyBwb2ludDoKLSAg IDEuIE9yZGluYXJ5IGNoYXJhY3RlciB0byBiZSB3cml0dGVuIHRvIHRoZSBzY3JlZW4uCi0gICAy LiBBbiBFc2M7IHdlIGNhbid0IHdyaXRlIGl0IGJlY2F1c2UgaXQgbWlnaHQgYmUgdGhlIGJlZ2lu bmluZyBvZiBhbiBBUEMuCi0gICAzLiBUaGUgY2hhcmFjdGVyIGZvbGxvd2luZyBhbiBFc2MsIGlu IHdoaWNoIGNhc2Ugd2Ugd3JpdGUgRXNjLCB0aGVuIGNoYXIsCi0gICAgICBidXQgb25seSBpZiB3 ZSBoYXZlIG5vdCBqdXN0IGVudGVyZWQgYW4gQVBDIHNlcXVlbmNlLgotKi8KLQkJaWYgKGVzY3Nl cSAmJiAoYXBjc3RhdHVzICYgQVBDX09OKSkgewotCQkgICAgaWYgKGluZXNjID09IEVTX0dPVEVT QykJLyogRG9uJ3Qgd3JpdGUgRVNDIHlldCAqLwotCQkgICAgICBjb250aW51ZTsKLQkJICAgIGVs c2UgaWYgKG9sZGVzYyA9PSBFU19HT1RFU0MgJiYgIWFwY2FjdGl2ZSkgewotCQkJY2tjcHV0YyhF U0MpOwkvKiBXcml0ZSBzYXZlZCBFU0MgKi8KLQkJCWlmIChzZXNsb2cgJiYgIXNlc3NmdCkKLQkJ CSAgbG9nY2hhcigoY2hhcilFU0MpOwotCQkgICAgfSBlbHNlIGlmIChhcGNyYykgewkvKiBXZSBo YXZlIGFuIEFQQyAqLwotCQkJZGVidWcoRjExMSwiQ09OTkVDVCBBUEMgY29tcGxldGUiLGFwY2J1 ZixhcGNsZW5ndGgpOwotCQkJY2tjcHV0ZigpOwkJLyogRm9yY2Ugc2NyZWVuIHVwZGF0ZSAqLwot CQkJcGlwZW1zZyhDRVZfQVBDKTsJLyogTm90aWZ5IHBhcmVudCAqLwotCQkJd3JpdGUoeHBpcGVb MV0sCi0JCQkgICAgICAoY2hhciAqKSZhcGNsZW5ndGgsCi0JCQkgICAgICBzaXplb2YoYXBjbGVu Z3RoKQotCQkJICAgICAgKTsKLQkJCS8qIFdyaXRlIGJ1ZmZlciBpbmNsdWRpbmcgdHJhaWxpbmcg TlVMIGJ5dGUgKi8KLQotCQkJd3JpdGUoeHBpcGVbMV0sIGFwY2J1ZiwgYXBjbGVuZ3RoKzEpOwot Ci0JCQkvKiBDb3B5IG91ciBpbnB1dCBidWZmZXIgdG8gdGhlIHBhcmVudCBmb3JrICovCi0KLQkJ CWRlYnVnKEYxMDEsIkNPTk5FQ1QgQVBDIGNvbXBsZXRlIGliYyIsIiIsaWJjKTsKLQkJCWRlYnVn KEYxMDEsIkNPTk5FQ1QgQVBDIGNvbXBsZXRlIG9iYyIsIiIsb2JjKTsKLQkJCXdyaXRlKHhwaXBl WzFdLCAoY2hhciAqKSZpYmMsIHNpemVvZihpYmMpKTsKLQkJCWlmIChpYmMgPiAwKSB7Ci0JCQkg ICAgd3JpdGUoeHBpcGVbMV0sIChjaGFyICopJmlicCwgc2l6ZW9mKGlicCkpOwotCQkJICAgIHdy aXRlKHhwaXBlWzFdLCBpYnAsIGliYyk7Ci0JCQl9Ci0JCQlja19zbmRtc2coKTsJLyogV2FpdCB0 byBiZSBraWxsZWQgKi8KLQkJCS8qIE5PVFJFQUNIRUQgKi8KLQkJICAgIH0KLQkJfQotI2VuZGlm IC8qIENLX0FQQyAqLwotI2VuZGlmIC8qIE5PRVNDU0VRICovCi0KLQkJZm9yIChpID0gMDsgaSA8 IGlueGNvdW50OyBpKyspIHsgLyogTG9vcCB0aHJ1ICovCi0JCSAgICBjID0gaW54YnVmW2ldOwkv KiBpbnB1dCBleHBhbnNpb24gYnVmZmVyLi4uICovCi0JCSAgICBpZiAoCi0jaWZkZWYgQ0tfQVBD Ci0JCQkhYXBjYWN0aXZlCS8qIElnbm9yZSBBUEMgc2VxdWVuY2VzICovCi0jZWxzZQotCQkJMQot I2VuZGlmIC8qIENLX0FQQyAqLwotCQkJKSB7Ci0JCQljICY9IGNtZG1zazsJLyogQXBwbHkgY29t bWFuZCBtYXNrLiAqLwotCQkJaWYgKGMgPT0gQ1IgJiYgdHRfY3JkKSB7IC8qIFNFVCBURVJNIENS LURJU1BMQSBDUkxGPyAqLwotCQkJICAgIGNrY3B1dGMoYyk7CS8qIFllcywgb3V0cHV0IENSICov Ci0JCQkgICAgaWYgKHNlc2xvZyAmJiAhc2Vzc2Z0KQotCQkJICAgICAgbG9nY2hhcigoY2hhcilj KTsKLQkJCSAgICBjID0gTEY7CS8qIGFuZCBpbnNlcnQgYSBsaW5lZmVlZCAqLwotCQkJfQotCQkJ aWYgKGMgPT0gTEYgJiYgdHRfbGZkKSB7IC8qIFNFVCBURVJNIENSLURJU1BMQSBDUkxGPyAqLwot CQkJICAgIGNrY3B1dGMoQ1IpOyAvKiBZZXMsIG91dHB1dCBDUiAqLwotCQkJICAgIGlmIChzZXNs b2cgJiYgIXNlc3NmdCkgbG9nY2hhcigoY2hhcilDUik7Ci0JCQl9Ci0JCQlja2NwdXRjKGMpOwkv KiBXcml0ZSBjaGFyYWN0ZXIgdG8gc2NyZWVuICovCi0JCSAgICB9Ci0JCSAgICBpZiAoc2VzbG9n ICYmICFzZXNzZnQpIC8qIEhhbmRsZSBzZXNzaW9uIGxvZyAqLwotCQkgICAgICBsb2djaGFyKChj aGFyKWMpOwotI2lmZGVmIENLX1RSSUdHRVIKLQkJICAgIC8qIENoZWNrIGZvciB0cmlnZ2VyIHN0 cmluZyAqLwotCQkgICAgaWYgKHR0X3RyaWdnZXJbMF0pIGlmICgoaXggPSBhdXRvZXhpdGNoaygo Q0hBUiljKSkgPiAtMSkgewotCQkJY2tjcHV0ZigpOwkvKiBGb3JjZSBzY3JlZW4gdXBkYXRlICov Ci0jaWZkZWYgTk9TRVRCVUYKLQkJCWZmbHVzaChzdGRvdXQpOwkvKiBJIG1lYW4gcmVhbGx5IGZv cmNlIGl0ICovCi0jZW5kaWYgLyogTk9TRVRCVUYgKi8KLQkJCXBpcGVtc2coQ0VWX1RSSSk7IC8q IFNlbmQgdXAgdHJpZ2dlciBpbmRpY2F0aW9uICovCi0JCQl3cml0ZSh4cGlwZVsxXSwgKGNoYXIg KikmaXgsIHNpemVvZihpeCkpOyAvKiBpbmRleCAqLwotCQkJd3JpdGUoeHBpcGVbMV0sIChjaGFy ICopJmliYywgc2l6ZW9mKGliYykpOwotCQkJaWYgKGliYyA+IDApIHsKLQkJCSAgICB3cml0ZSh4 cGlwZVsxXSwgKGNoYXIgKikmaWJwLCBzaXplb2YoaWJwKSk7Ci0JCQkgICAgd3JpdGUoeHBpcGVb MV0sIGlicCwgaWJjKTsKLQkJCX0KLQkJCWRlYnVnKEYxMDAsIkNPTk5FQ1QgY29uY2xkIHRyaWdn ZXIiLCIiLDApOwotCQkJY2tfc25kbXNnKCk7CS8qIFdhaXQgdG8gYmUga2lsbGVkICovCi0JCQlh Y3RpdmUgPSAwOwkvKiBTaG91bGRuJ3QgYmUgbmVjZXNzYXJ5Li4uICovCi0JCQlicmVhazsKLQkJ ICAgIH0KLQkJICAgIC8qIE5PVFJFQUNIRUQgKi8KLSNlbmRpZiAvKiBDS19UUklHR0VSICovCi0J CX0KLQkgICAgfQotI2lmZGVmIEFOWVgyNQotCX0KLSNlbmRpZiAvKiBBTllYMjUgKi8KLSAgICB9 Ci19Ci0KLQotLyogIEMgTyBOIEUgQyBUICAtLSAgSW50ZXJhY3RpdmUgdGVybWluYWwgY29ubmVj dGlvbiAgKi8KLQotaW50Ci1jb25lY3QoKSB7Ci0gICAgaW50CW47CQkJLyogR2VuZXJhbCBwdXJw b3NlIGNvdW50ZXIgKi8KLSAgICBpbnQgaTsJCQkvKiBGb3IgbG9vcHMuLi4gKi8KLSAgICBpbnQg YzsJCQkvKiBjIGlzIGEgY2hhcmFjdGVyLCBidXQgbXVzdCBiZSBzaWduZWQKLQkJCQkgICBpbnRl Z2VyIHRvIHBhc3MgdGhydSAtMSwgd2hpY2ggaXMgdGhlCi0JCQkJICAgbW9kZW0gZGlzY29ubmVj dGlvbiBzaWduYWwsIGFuZCBpcwotCQkJCSAgIGRpZmZlcmVudCBmcm9tIHRoZSBjaGFyYWN0ZXIg MDM3NyAqLwotICAgIGludCBjMjsJCQkvKiBBIGNvcHkgb2YgYyAqLwotICAgIGludCBjc2F2ZTsJ CQkvKiBBbm90aGVyIGNvcHkgb2YgYyAqLwotI2lmbmRlZiBOT0VTQ1NFUQotICAgIGludCBhcGNy YzsKLSNlbmRpZiAvKiBOT0VTQ1NFUSAqLwotCi0gICAgaW50IGNvbnJldCA9IDA7CQkJLyogUmV0 dXJuIHZhbHVlIGZyb20gY29uZWN0KCkgKi8KLSAgICBpbnQgbXNnZmxnID0gMDsKLSAgICAvKiBq YmNoa3N1bSA9IC0xTDsgKi8KLSAgICBqYnNldCA9IDA7CQkJCS8qIGptcF9idWYgbm90IHNldCB5 ZXQsIGRvbid0IHVzZSBpdCAqLwotICAgIGRlYm9rID0gMTsKLQotICAgIGRlYnVnKEYxMDEsIkNP Tk5FQ1QgZm9yayBzaWduYWwiLCIiLENLX0ZPUktfU0lHKTsKLSAgICBkZWJ1ZyhGMTAxLCJDT05O RUNUIGVudHJ5IHBpZCIsIiIscGlkKTsKLQotICAgIG1zZ2ZsZyA9ICFxdWlldAotI2lmZGVmIENL X0FQQwotICAgICAgJiYgIWFwY2FjdGl2ZQotI2VuZGlmIC8qIENLX0FQQyAqLwotCTsKLS8qCi0g IFRoZSBmb2xsb3dpbmcgaXMgdG8gaGFuZGxlIGEgZm9yayBsZWZ0IGJlaGluZCBpZiB3ZSBleGl0 IENPTk5FQ1QgbW9kZQotICB3aXRob3V0IGtpbGxpbmcgaXQsIGFuZCB0aGVuIHJldHVybiB0byBD T05ORUNUIG1vZGUuICBUaGlzIGhhcHBlbmVkIGluCi0gIEhQLVVYLCB3aGVyZSB0aGUgUmVzZXQg a2V5IHdvdWxkIHJhaXNlIFNJR0lOVCBldmVuIHRob3VnaCBTSUdJTlQgd2FzIHNldCB0bwotICBT SUdfSUdOLiAgVGhlIGNvZGUgYmVsb3cgZml4ZXMgdGhlIHN5bXB0b207IHRoZSByZWFsIGZpeCBp cyBpbiB0aGUgbWFpbgotICBTSUdJTlQgaGFuZGxlciAoaWYgU0lHSU5UIHNob3dzIHVwIGR1cmlu ZyBDT05ORUNULCBqdXN0IHJldHVybiByYXRoZXIgdGhhbgotICB0YWtpbmcgdGhlIGxvbmdqbXAp LgotKi8KLSAgICBpZiAocGlkKSB7CQkJCS8qIFRoaXMgc2hvdWxkIGJlIDAgKi8KLQlpbnQgeCA9 IDA7Ci0JZGVidWcoRjEwMSwiQ09OTkVDVCBlbnRyeSBraWxsaW5nIHN0YWxlIHBpZCIsIiIscGlk KTsKLQlwcmludGYoIldBUk5JTkc6IE9sZCBDT05ORUNUIGZvcmsgc2VlbXMgdG8gYmUgYWN0aXZl LlxuIik7Ci0JcHJpbnRmKCJBdHRlbXB0aW5nIHRvIHJlbW92ZSBpdC4uLiIpOwotI2lmZGVmIEJF T1NPUkJFQk9YCi0JewotCSAgICBsb25nIHJldF92YWw7Ci0JICAgIHggPSBraWxsKHBpZCxTSUdL SUxMVEhSKTsgLyogS2lsbCBsb3dlciBmb3JrICovCi0JICAgIHdhaXRfZm9yX3RocmVhZCAocGlk LCAmcmV0X3ZhbCk7Ci0JfQotI2Vsc2UKLSNpZmRlZiBQbGFuOQotCXggPSBraWxsKHBpZCxTSUdL SUxMKTsJCS8qIEtpbGwgbG93ZXIgZm9yayAqLwotI2Vsc2UKLQl4ID0ga2lsbChwaWQsOSk7Ci0j ZW5kaWYgLyogUGxhbjkgKi8KLSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotCXdhaXQoKFdBSVRf VCAqKTApOwkJLyogV2FpdCB0aWxsIGdvbmUuICovCi0JaWYgKHggPCAwKSB7Ci0JICAgIHByaW50 ZigiRVJST1I6IEZhaWx1cmUgdG8ga2lsbCBwaWQgJWQ6ICVzLCBlcnJubz0lZFxuIiwKLQkJICAg KGludCkgcGlkLCBja19lcnJzdHIoKSwgZXJybm8pOwotCSAgICBkZWJ1ZyhGMTExLCJDT05ORUNU IGVycm9yIGtpbGxpbmcgc3RhbGUgcGlkIixja19lcnJzdHIoKSxwaWQpOwotCX0KLQlwaWQgPSAo UElEX1QpIDA7Ci0JcHJpbnRmKCJcbiIpOwotICAgIH0KLSAgICBzaWduYWwoQ0tfRk9SS19TSUcs IFNJR19JR04pOwkvKiBJbml0aWFsIENLX0ZPUktfU0lHIGhhbmRsaW5nLCAqLwotLyoKLSAgVGhl IGZvbGxvd2luZyB0dGltb2ZmKCkgY2FsbCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSwgYnV0IGV2 aWRlbnRseSB0aGVyZQotICBhcmUgY2FzZXMgd2hlcmUgYSB0aW1lciBpcyBsZWZ0IGFjdGl2ZSBh bmQgdGhlbiBnb2VzIG9mZiwgdGFraW5nIGEgbG9uZ2ptcAotICB0byBub3doZXJlIGFmdGVyIHRo ZSBwcm9ncmFtJ3Mgc3RhY2sgaGFzIGNoYW5nZWQuICBJbiBhbnkgY2FzZSwgdGhpcyBpcwotICBz YWZlIGJlY2F1c2UgdGhlIENPTk5FQ1QgbW9kdWxlIHVzZXMgbm8gdGltZXIgb2YgYW55IGtpbmQs IGFuZCBubyBvdGhlciB0aW1lcgotICBzaG91bGQgYmUgYXJtZWQgd2hpbGUgS2VybWl0IGlzIGlu IENPTk5FQ1QgbW9kZS4KLSovCi0gICAgdHRpbW9mZigpOwkJCQkvKiBUdXJuIG9mZiBhbnkgdGlt ZXIgaW50ZXJydXB0cyAqLwotCi0jaWZkZWYgQ0tfVFJJR0dFUgotICAgIG1ha2VzdHIoJnRyaWdn ZXJ2YWwsTlVMTCk7CQkvKiBSZXNldCB0cmlnZ2VyICovCi0jZW5kaWYgLyogQ0tfVFJJR0dFUiAq LwotCi0gICAgaWYgKCFsb2NhbCkgewotI2lmZGVmIE5FVENPTk4KLQlwcmludGYoIlNvcnJ5LCB5 b3UgbXVzdCBTRVQgTElORSBvciBTRVQgSE9TVCBmaXJzdFxuIik7Ci0jZWxzZQotCXByaW50Zigi U29ycnksIHlvdSBtdXN0IFNFVCBMSU5FIGZpcnN0XG4iKTsKLSNlbmRpZiAvKiBORVRDT05OICov Ci0JZ290byBjb25yZXQwOwotICAgIH0KLSAgICBpZiAoc3BlZWQgPCAwTCAmJiBuZXR3b3JrID09 IDAgJiYgdHRmZGZsZyA9PSAwKSB7Ci0JcHJpbnRmKCJTb3JyeSwgeW91IG11c3QgU0VUIFNQRUVE IGZpcnN0XG4iKTsKLQlnb3RvIGNvbnJldDA7Ci0gICAgfQotI2lmZGVmIFRDUFNPQ0tFVAotICAg IGlmIChuZXR3b3JrICYmIChuZXR0eXBlICE9IE5FVF9UQ1BCKQotI2lmZGVmIFNVTlgyNQotICAg ICAgICAmJiAobmV0dHlwZSAhPSBORVRfU1gyNSkKLSNlbmRpZiAvKiBTVU5YMjUgKi8KLSNpZmRl ZiBJQk1YMjUKLQkmJiAobmV0dHlwZSAhPSBORVRfSVgyNSkKLSNlbmRpZiAvKiBJQk1YMjUgKi8K LSNpZmRlZiBORVRDTUQKLSAgICAgICAgJiYgKG5ldHR5cGUgIT0gTkVUX0NNRCkKLSNlbmRpZiAv KiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICAgICAmJiAobmV0dHlwZSAhPSBORVRfUFRZ KQotI2VuZGlmIC8qIE5FVFBUWSAqLwotICAgICkgewotCXByaW50ZigiU29ycnksIG5ldHdvcmsg dHlwZSBub3Qgc3VwcG9ydGVkXG4iKTsKLQlnb3RvIGNvbnJldDA7Ci0gICAgfQotI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLwotCi0jaWZkZWYgRFlOQU1JQwotICAgIGlmICghaWJ1ZikgewotCWlmICgh KGlidWYgPSBtYWxsb2MoSUJVRkwrMSkpKSB7IC8qIEFsbG9jYXRlIGlucHV0IGxpbmUgYnVmZmVy ICovCi0JICAgIHByaW50ZigiU29ycnksIENPTk5FQ1QgaW5wdXQgYnVmZmVyIGNhbid0IGJlIGFs bG9jYXRlZFxuIik7Ci0JICAgIGdvdG8gY29ucmV0MDsKLQl9IGVsc2UgewotCSAgICBpYnAgPSBp YnVmOwotCSAgICBpYmMgPSAwOwotCX0KLSAgICB9Ci0gICAgaWYgKCFvYnVmKSB7Ci0JaWYgKCEo b2J1ZiA9IG1hbGxvYyhPQlVGTCsxKSkpIHsgICAgLyogQWxsb2NhdGUgb3V0cHV0IGxpbmUgYnVm ZmVyICovCi0JICAgIHByaW50ZigiU29ycnksIENPTk5FQ1Qgb3V0cHV0IGJ1ZmZlciBjYW4ndCBi ZSBhbGxvY2F0ZWRcbiIpOwotCSAgICBnb3RvIGNvbnJldDA7Ci0JfSBlbHNlIHsKLQkgICAgb2Jw ID0gb2J1ZjsKLQkgICAgb2JjID0gMDsKLQl9Ci0gICAgfQotICAgIGlmICgha2J1ZikgewotCWlm ICghKGtidWYgPSBtYWxsb2MoS0JVRkwrMSkpKSB7IC8qIEFsbG9jYXRlIGtleWJvYXJkIGlucHV0 IGJ1ZmZlciAqLwotCSAgICBwcmludGYoIlNvcnJ5LCBDT05ORUNUIGtleWJvYXJkIGJ1ZmZlciBj YW4ndCBiZSBhbGxvY2F0ZWRcbiIpOwotCSAgICBnb3RvIGNvbnJldDA7Ci0JfQotICAgIH0KLSAg ICBpZiAoIXRlbXApIHsKLQlpZiAoISh0ZW1wID0gbWFsbG9jKFRNUExFTisxKSkpIHsgLyogQWxs b2NhdGUgdGVtcG9yYXJ5IGJ1ZmZlciAqLwotCSAgICBwcmludGYoIlNvcnJ5LCBDT05ORUNUIHRl bXBvcmFyeSBidWZmZXIgY2FuJ3QgYmUgYWxsb2NhdGVkXG4iKTsKLQkgICAgZ290byBjb25yZXQw OwotCX0KLSAgICB9Ci0jZWxzZQotI2lmZGVmIENPTU1FTlQKLSAgICBpYnAgPSBpYnVmOwotICAg IGliYyA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIG9icCA9IG9idWY7Ci0gICAgb2Jj ID0gMDsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSAgICBrYnAgPSBrYnVmOwkJCQkvKiBBbHdh eXMgY2xlYXIgdGhlc2UuICovCi0gICAgKmticCA9IE5VTDsJCQkJLyogTm8gbmVlZCB0byBwcmVz ZXJ2ZSB0aGVtIGJldHdlZW4gKi8KLSAgICBrYmMgPSAwOwkJCQkvKiBDT05ORUNUIHNlc3Npb25z LiAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjEwMSwiQ09O TkVDVCBjb25lY3QgZW50cnkgdHR5ZmQiLCIiLHR0eWZkKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNU IGNvbmVjdCBlbnRyeSBpYmMiLCIiLGliYyk7Ci0JZGVidWcoRjEwMSwiQ09OTkVDVCBjb25lY3Qg ZW50cnkgb2JjIiwiIixvYmMpOwotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgY29uZWN0IGVudHJ5IGti YyIsIiIsa2JjKTsKLSNpZmRlZiBDS19UUklHR0VSCi0JZGVidWcoRjExMCwiQ09OTkVDVCBjb25l Y3QgdHJpZ2dlciIsdHRfdHJpZ2dlclswXSwwKTsKLSNlbmRpZiAvKiBDS19UUklHR0VSICovCi0J aWYgKHR0eWZkID4gLTEpIHsKLQkgICAgbiA9IHR0Y2hrKCk7Ci0JICAgIGRlYnVnKEYxMDEsIkNP Tk5FQ1QgY29uZWN0IGVudHJ5IHR0Y2hrIiwiIixuKTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIERF QlVHICovCi0KLSAgICBpZiAodHR5ZmQgPCAwKSB7CQkJLyogSWYgY29tbXVuaWNhdGlvbiBkZXZp Y2Ugbm90IG9wZW4gKi8KLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIHR0bnByb3RvIiwiIix0dG5wcm90 byk7Ci0JZGVidWcoRjExMSwiQ09OTkVDVCBvcGVuaW5nIix0dG5hbWUsMCk7IC8qIE9wZW4gaXQg bm93ICovCi0JaWYgKHR0b3Blbih0dG5hbWUsCi0JCSAgICZsb2NhbCwKLQkJICAgbmV0d29yayA/ IC1uZXR0eXBlIDogbWRtdHlwLAotCQkgICAwCi0JCSAgICkgPCAwKSB7Ci0JICAgIGNrbWFrbXNn KHRlbXAsVE1QTEVOLCJTb3JyeSwgY2FuJ3Qgb3BlbiAiLHR0bmFtZSxOVUxMLE5VTEwpOwotCSAg ICBwZXJyb3IodGVtcCk7Ci0JICAgIGRlYnVnKEYxMTAsIkNPTk5FQ1Qgb3BlbiBmYWlsdXJlIix0 dG5hbWUsMCk7Ci0JICAgIGdvdG8gY29ucmV0MDsKLQl9Ci0jaWZkZWYgSUtTX09QVElPTgotCS8q IElmIHBlZXIgaXMgaW4gS2VybWl0IHNlcnZlciBtb2RlLCByZXR1cm4gbm93LiAqLwotCWlmIChU RUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQpCi0JICByZXR1cm4oMCk7Ci0j ZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgIH0KLSAgICBkb2hhbmd1cCA9IDA7CQkJLyogSGFu Z3VwIG5vdCByZXF1ZXN0ZWQgeWV0ICovCi0jaWZkZWYgQU5ZWDI1Ci0gICAgZG94MjVjbHIgPSAw OwkJCS8qIFguMjUgY2xlYXIgbm90IHJlcXVlc3RlZCB5ZXQgKi8KLSNlbmRpZiAvKiBBTllYMjUg Ki8KLQotICAgIGlmIChtc2dmbGcpIHsKLSNpZmRlZiBORVRDT05OCi0JaWYgKG5ldHdvcmspIHsK LQkgICAgaWYgKHR0cGlwZSkKLQkgICAgICBwcmludGYoIkNvbm5lY3RpbmcgdmlhIGNvbW1hbmQg XCIlc1wiIix0dG5hbWUpOwotCSAgICBlbHNlCi0JICAgICAgcHJpbnRmKCJDb25uZWN0aW5nIHRv IGhvc3QgJXMiLHR0bmFtZSk7Ci0jaWZkZWYgQU5ZWDI1Ci0JICAgIGlmIChuZXR0eXBlID09IE5F VF9TWDI1IHx8IG5ldHR5cGUgPT0gTkVUX0lYMjUpCi0JICAgICAgcHJpbnRmKCIsIExpbmsgSUQg JWQsIExDTiAlZCIsbGlua2lkLGxjbik7Ci0jZW5kaWYgLyogQU5ZWDI1ICovCi0JfSBlbHNlIHsK LSNlbmRpZiAvKiBORVRDT05OICovCi0JICAgIHByaW50ZigiQ29ubmVjdGluZyB0byAlcyIsdHRu YW1lKTsKLQkgICAgaWYgKHNwZWVkID4gLTFMKSBwcmludGYoIiwgc3BlZWQgJWxkIixzcGVlZCk7 Ci0jaWZkZWYgTkVUQ09OTgotCX0KLSNlbmRpZiAvKiBORVRDT05OICovCi0JaWYgKHR0X2VzY2Fw ZSkgewotCSAgICBwcmludGYoIlxyXG4iKTsKLQkgICAgc2hvZXNjKGVzY2FwZSk7Ci0JICAgIHBy aW50ZigiVHlwZSB0aGUgZXNjYXBlIGNoYXJhY3RlciBmb2xsb3dlZCBieSBDIHRvIGdldCBiYWNr LFxyXG4iKTsKLQkgICAgcHJpbnRmKCJvciBmb2xsb3dlZCBieSA/IHRvIHNlZSBvdGhlciBvcHRp b25zLlxyXG4iKTsKLQl9IGVsc2UgewotCSAgICBwcmludGYoIi5cclxuXG5FU0NBUEUgQ0hBUkFD VEVSIElTIERJU0FCTEVEXHJcblxuIik7Ci0JfQotCWlmIChzZXNsb2cpIHsKLQkgICAgZXh0ZXJu IGludCBzbG9ndHM7Ci0JICAgIGNoYXIgKiBzID0gIiI7Ci0JICAgIHN3aXRjaCAoc2Vzc2Z0KSB7 Ci0JICAgICAgY2FzZSBYWUZUX0Q6Ci0JCXMgPSAiZGVidWciOyBicmVhazsKLQkgICAgICBjYXNl IFhZRlRfVDoKLQkJcyA9IHNsb2d0cyA/ICJ0aW1lc3RhbXBlZC10ZXh0IiA6ICJ0ZXh0IjsgYnJl YWs7Ci0JICAgICAgZGVmYXVsdDoKLQkJcyA9ICJiaW5hcnkiOwotCSAgICB9Ci0JICAgIHByaW50 ZigiU2Vzc2lvbiBMb2c6ICVzLCAlc1xyXG4iLHNlc2ZpbCxzKTsKLQl9Ci0JaWYgKGRlYnNlcykg cHJpbnRmKCJEZWJ1Z2dpbmcgRGlzcGxheS4uLilcclxuIik7Ci0gICAgICAgIHByaW50ZigiLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4iKTsK LQlmZmx1c2goc3Rkb3V0KTsKLSAgICB9Ci0KLS8qIENvbmRpdGlvbiBjb25zb2xlIHRlcm1pbmFs IGFuZCBjb21tdW5pY2F0aW9uIGxpbmUgKi8KLQotICAgIGlmIChjb25iaW4oKGNoYXIpZXNjYXBl KSA8IDApIHsKLQlwcmludGYoIlNvcnJ5LCBjYW4ndCBjb25kaXRpb24gY29uc29sZSB0ZXJtaW5h bFxuIik7Ci0JZ290byBjb25yZXQwOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGNt YXNrIiwiIixjbWFzayk7Ci0gICAgZGVidWcoRjEwMSwiQ09OTkVDVCBjbWRtc2siLCIiLGNtZG1z ayk7Ci0gICAgZGVidWcoRjEwMSwiQ09OTkVDVCBzcGVlZCBiZWZvcmUgdHR2dCIsIiIsc3BlZWQp OwotICAgIGlmICgobiA9IHR0dnQoc3BlZWQsZmxvdykpIDwgMCkgewkvKiBFbnRlciAidmlydHVh bCB0ZXJtaW5hbCIgbW9kZSAqLwotCWlmICghbmV0d29yaykgewotCSAgICBkZWJ1ZyhGMTAxLCJD T05ORUNUIHR0dnQiLCIiLG4pOwotCSAgICB0dGhhbmcoKTsJCQkvKiBIYW5nIHVwIGFuZCBjbG9z ZSB0aGUgZGV2aWNlLiAqLwotCSAgICB0dGNsb3MoMCk7Ci0JICAgIGRvbG9nZW5kKCk7Ci0JICAg IGlmICh0dG9wZW4odHRuYW1lLAkJLyogT3BlbiBpdCBhZ2Fpbi4uLiAqLwotCQkgICAgICAgJmxv Y2FsLAotCQkgICAgICAgbmV0d29yayA/IC1uZXR0eXBlIDogbWRtdHlwLAotCQkgICAgICAgMAot CQkgICAgICAgKSA8IDApIHsKLQkJY2ttYWttc2codGVtcCxUTVBMRU4sIlNvcnJ5LCBjYW4ndCBy ZW9wZW4gIix0dG5hbWUsTlVMTCxOVUxMKTsKLQkJcGVycm9yKHRlbXApOwotCQlnb3RvIGNvbnJl dDA7Ci0JICAgIH0KLSNpZmRlZiBJS1NfT1BUSU9OCi0JICAgIGlmIChURUxPUFRfU0IoVEVMT1BU X0tFUk1JVCkua2VybWl0LnVfc3RhcnQpCi0JICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIElL U19PUFRJT04gKi8KLQkgICAgaWYgKHR0dnQoc3BlZWQsZmxvdykgPCAwKSB7CS8qIFRyeSB2aXJ0 dWFsIHRlcm1pbmFsIG1vZGUgYWdhaW4uICovCi0JCWNvbnJlcygpOwkJLyogRmFpbHVyZSB0aGlz IHRpbWUgaXMgZmF0YWwuICovCi0JCXByaW50ZigiU29ycnksIENhbid0IGNvbmRpdGlvbiBjb21t dW5pY2F0aW9uIGxpbmVcbiIpOwotCQlnb3RvIGNvbnJldDA7Ci0JICAgIH0KLQl9Ci0gICAgfQot ICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgdHR2dCBvaywgZXNjYXBlIiwiIixlc2NhcGUpOwotCi0g ICAgZGVidWcoRjEwMSwiQ09OTkVDVCBjYXJyaWVyLXdhdGNoIiwiIixjYXJyaWVyKTsKLSAgICBp ZiAoKCFuZXR3b3JrIAotI2lmZGVmIFROX0NPTVBPUlQKLQkgIHx8IGlzdG5jb21wb3J0KCkKLSNl bmRpZiAvKiBUTl9DT01QT1JUICovCi0JICkgJiYgKGNhcnJpZXIgIT0gQ0FSX09GRikpIHsKLQlp bnQgeDsKLQl4ID0gdHRnbWRtKCk7Ci0JZGVidWcoRjEwMCwiQ09OTkVDVCB0dGdtZG0iLCIiLHgp OwotCWlmICgoeCA+IC0xKSAmJiAhKHggJiBCTV9EQ0QpKSB7Ci0jaWZuZGVmIE5PSElOVFMKLQkg ICAgZXh0ZXJuIGludCBoaW50czsKLSNlbmRpZiAvKiBOT0hJTlRTICovCi0JICAgIGRlYnVnKEYx MDAsIkNPTk5FQ1QgdHRnbWRtIENEIHRlc3QgZmFpbHMiLCIiLHgpOwotCSAgICBjb25yZXMoKTsK LQkgICAgcHJpbnRmKCI/Q2FycmllciByZXF1aXJlZCBidXQgbm90IGRldGVjdGVkLlxuIik7Ci0j aWZuZGVmIE5PSElOVFMKLQkgICAgaWYgKCFoaW50cykKLQkgICAgICByZXR1cm4oMCk7Ci0JICAg IHByaW50ZigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOwotCSAgICBw cmludGYoIiBIaW50OiBUbyBDT05ORUNUIHRvIGEgc2VyaWFsIGRldmljZSB0aGF0XG4iKTsKLQkg ICAgcHJpbnRmKCIgaXMgbm90IHByZXNlbnRpbmcgdGhlIENhcnJpZXIgRGV0ZWN0IHNpZ25hbCxc biIpOwotCSAgICBwcmludGYoIiBmaXJzdCB0ZWxsIEMtS2VybWl0IHRvOlxuXG4iKTsKLQkgICAg cHJpbnRmKCIgICBTRVQgQ0FSUklFUi1XQVRDSCBPRkZcblxuIik7Ci0JICAgIHByaW50ZigiKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuIik7Ci0jZW5kaWYgLyogTk9ISU5U UyAqLwotCSAgICBnb3RvIGNvbnJldDA7Ci0JfQotCWRlYnVnKEYxMDAsIkNPTk5FQ1QgdHRnbWRt IG9rIiwiIiwwKTsKLSAgICB9Ci0jaWZuZGVmIE5PQ1NFVFMKLS8qIFNldCB1cCBjaGFyYWN0ZXIg c2V0IHRyYW5zbGF0aW9ucyAqLwotCi0gICAgdW5pY29kZSA9IDA7CQkJLyogQXNzdW1lIFVuaWNv ZGUgd29uJ3QgYmUgaW52b2x2ZWQgKi8KLSAgICB0Y3MgPSAwOwkJCQkvKiAiVHJhbnNmZXIiIG9y ICJPdGhlciIgY2hhcnNldCAqLwotICAgIHN4byA9IHJ4byA9IE5VTEw7CQkJLyogSW5pdGlhbGl6 ZSBieXRlLXRvLWJ5dGUgZnVuY3Rpb25zICovCi0gICAgc3hpID0gcnhpID0gTlVMTDsKLSAgICBp ZiAodGNzciAhPSB0Y3NsKSB7CQkJLyogUmVtb3RlIGFuZCBsb2NhbCBzZXRzIGRpZmZlci4uLiAq LwotI2lmZGVmIFVOSUNPREUKLQlpZiAodGNzciA9PSBGQ19VVEY4IHx8CQkvKiBSZW1vdGUgY2hh cnNldCBpcyBVVEYtOCAqLwotCSAgICB0Y3NsID09IEZDX1VURjgpIHsJCS8qIG9yIGxvY2FsIG9u ZSBpcy4gKi8KLQkgICAgeHVmID0geGxfdWZjW3Rjc2xdOwkJLyogSW5jb21pbmcgVW5pY29kZSB0 byBsb2NhbCAqLwotCSAgICBpZiAoeHVmIHx8IHRjc2wgPT0gRkNfVVRGOCkgewotCQl0Y3MgPSAo dGNzciA9PSBGQ19VVEY4KSA/IHRjc2wgOiB0Y3NyOyAvKiBUaGUgIm90aGVyIiBzZXQgKi8KLQkJ eGZ1ID0geGxfZmN1W3Rjc107CS8qIExvY2FsIGJ5dGUgdG8gcmVtb3RlIFVuaWNvZGUgKi8KLQkJ aWYgKHhmdSkKLQkJICB1bmljb2RlID0gKHRjc3IgPT0gRkNfVVRGOCkgPyAxIDogMjsKLQkgICAg fQotCSAgICB0Y3NzaXplID0gZmNzaW5mb1t0Y3NdLnNpemU7IC8qIFNpemUgb2Ygb3RoZXIgY2hh cmFjdGVyIHNldC4gKi8KLQl9IGVsc2UgewotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQkgICAgdGNz ID0gZ2V0dGNzKHRjc3IsdGNzbCk7CS8qIEdldCBpbnRlcm1lZGlhdGUgc2V0LiAqLwotCSAgICBz eG8gPSB4bHNbdGNzXVt0Y3NsXTsJLyogdHJhbnNsYXRpb24gZnVuY3Rpb24gKi8KLQkgICAgcnhv ID0geGxyW3Rjc11bdGNzcl07CS8qIHBvaW50ZXJzIGZvciBvdXRwdXQgZnVuY3Rpb25zICovCi0J ICAgIHN4aSA9IHhsc1t0Y3NdW3Rjc3JdOwkvKiBhbmQgZm9yIGlucHV0IGZ1bmN0aW9ucy4gKi8K LQkgICAgcnhpID0geGxyW3Rjc11bdGNzbF07Ci0jaWZkZWYgVU5JQ09ERQotCX0KLSNlbmRpZiAv KiBVTklDT0RFICovCi0gICAgfQotLyoKLSAgVGhpcyBpcyB0byBwcmV2ZW50IHVzZSBvZiB6bXN0 dWZmKCkgYW5kIHpkc3R1ZmYoKSBieSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuCi0gIFRoZXkgb25s eSB3b3JrIHdpdGggZGlzayBpL28sIG5vdCB3aXRoIGNvbW11bmljYXRpb24gaS9vLiAgTHVja2ls eSBSdXNzaWFuCi0gIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyBkb24ndCBkbyBhbnkgc3R1ZmZpbmcu Li4KLSovCi0gICAgbGFuZ3N2ID0gbGFuZ3VhZ2U7Ci0jaWZuZGVmIE5PQ1lSSUwKLSAgICBpZiAo bGFuZ3VhZ2UgIT0gTF9SVVNTSUFOKQotI2VuZGlmIC8qIE5PQ1lSSUwgKi8KLSAgICAgIGxhbmd1 YWdlID0gTF9VU0FTQ0lJOwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIERFQlVHCi0gICAgaWYg KGRlYmxvZykgewotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgdGNzIiwiIix0Y3MpOwotCWRlYnVnKEYx MDEsIkNPTk5FQ1QgdGNzbCIsIiIsdGNzbCk7Ci0JZGVidWcoRjEwMSwiQ09OTkVDVCB0Y3NyIiwi Iix0Y3NyKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGZjc2luZm9bdGNzbF0uc2l6ZSIsIiIsZmNz aW5mb1t0Y3NsXS5zaXplKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGZjc2luZm9bdGNzcl0uc2l6 ZSIsIiIsZmNzaW5mb1t0Y3NyXS5zaXplKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIHVuaWNvZGUi LCIiLHVuaWNvZGUpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQotI2lmZGVmIENLX1hZWgotI2lmbmRlZiBYWVpfSU5URVJOQUwKLSAgICB7Ci0JZXh0 ZXJuIGludCBiaW5hcnk7CQkvKiBTZWUgYWJvdXQgWk1PREVNIGF1dG9kb3dubG9hZHMgKi8KLQlj aGFyICogczsKLQlzID0gYmluYXJ5ID8gcHRhYltQUk9UT19aXS5wX2JfcmNtZCA6IHB0YWJbUFJP VE9fWl0ucF90X3JjbWQ7Ci0JaWYgKCFzKSBzID0gIiI7Ci0Jem1kbG9rID0gKCpzICE9IE5VTCk7 CQkvKiBPSyBpZiB3ZSBoYXZlIGV4dGVybmFsIGNvbW1hbmRzICovCi0gICAgfQotI2VuZGlmIC8q IFhZWl9JTlRFUk5BTCAqLwotI2VuZGlmIC8qIENLX1hZWiAqLwotCi0jaWZuZGVmIE5PRVNDU0VR Ci0vKgotICBXZSBuZWVkIHRvIGFjdGl2YXRlIHRoZSBlc2NhcGUtc2VxdWVuY2UgcmVjb2duaXRp b24gZmVhdHVyZSB3aGVuOgotICAgKGEpIHRyYW5zbGF0aW9uIGlzIGVsZWN0ZWQsIEFORAotICAg KGIpIHRoZSBsb2NhbCBhbmQvb3IgcmVtb3RlIHNldCBpcyBhIDctYml0IHNldCBvdGhlciB0aGFu IFVTIEFTQ0lJLgotICBPcjoKLSAgIFNFVCBURVJNSU5BTCBBUEMgaXMgbm90IE9GRiAoaGFuZGxl ZCBpbiB0aGUgbmV4dCBzdGF0ZW1lbnQpLgotKi8KLSAgICBlc2NzZXEgPSAodGNzICE9IFRDX1RS QU5TUCkgJiYJLyogTm90IHRyYW5zcGFyZW50ICovCi0gICAgICAoZmNzaW5mb1t0Y3NsXS5zaXpl ID09IDEyOCB8fCBmY3NpbmZvW3Rjc3JdLnNpemUgPT0gMTI4KSAmJiAvKiA3IGJpdHMgKi8KLQko ZmNzaW5mb1t0Y3NsXS5jb2RlICE9IEZDX1VTQVNDSUkpOyAvKiBCdXQgbm90IEFTQ0lJICovCi0j ZW5kaWYgLyogTk9FU0NTRVEgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZm5kZWYgTk9F U0NTRVEKLSNpZmRlZiBDS19BUEMKLSAgICBlc2NzZXEgPSBlc2NzZXEgfHwgKGFwY3N0YXR1cyAm IEFQQ19PTik7Ci0gICAgYXBjYWN0aXZlID0gMDsJCQkvKiBBbiBBUEMgY29tbWFuZCBpcyBub3Qg YWN0aXZlICovCi0gICAgYXBjbGVuZ3RoID0gMDsJCQkvKiAuLi4gKi8KLSNlbmRpZiAvKiBDS19B UEMgKi8KLSAgICBpbmVzYyA9IEVTX05PUk1BTDsJCQkvKiBJbml0aWFsIHN0YXRlIG9mIHJlY29n bml6ZXIgKi8KLSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGVzY3NlcSIsIiIsZXNjc2VxKTsKLSNl bmRpZiAvKiBOT0VTQ1NFUSAqLwotCi0gICAgcGFyZW50X2lkID0gZ2V0cGlkKCk7CQkvKiBHZXQg cGFyZW50J3MgcGlkIGZvciBzaWduYWxsaW5nICovCi0gICAgZGVidWcoRjEwMSwiQ09OTkVDVCBw YXJlbnQgcGlkIiwiIixwYXJlbnRfaWQpOwotCi0gICAgaWYgKHhwaXBlWzBdID4gLTEpCQkJLyog SWYgb2xkIHBpcGUgaGFuZ2luZyBhcm91bmQsIGNsb3NlICovCi0gICAgICBjbG9zZSh4cGlwZVsw XSk7Ci0gICAgeHBpcGVbMF0gPSAtMTsKLSAgICBpZiAoeHBpcGVbMV0gPiAtMSkKLSAgICAgIGNs b3NlKHhwaXBlWzFdKTsKLSAgICB4cGlwZVsxXSA9IC0xOwotICAgIGdvdGVyciA9IDA7CQkJCS8q IEVycm9yIGZsYWcgZm9yIHBpcGUgJiBmb3JrICovCi0gICAgaWYgKHBpcGUoeHBpcGUpICE9IDAp IHsJCS8qIENyZWF0ZSBuZXcgcGlwZSB0byBwYXNzIGluZm8gKi8KLQlwZXJyb3IoIkNhbid0IG1h a2UgcGlwZSIpOwkvKiBiZXR3ZWVuIGZvcmtzLiAqLwotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgcGlw ZSBlcnJvciIsIiIsZXJybm8pOwotCWdvdGVyciA9IDE7Ci0gICAgfSBlbHNlCi0jaWZkZWYgQkVP U09SQkVCT1gKLSAgICB7Ci0gICAgICAgIHBpZCA9IHNwYXduX3RocmVhZChjb25jbGQsICJMb3dl ciBGb3JrIiwgQl9OT1JNQUxfUFJJT1JJVFksIE5VTEwpOwotICAgICAgICByZXN1bWVfdGhyZWFk KHBpZCk7Ci0gICAgfQotI2Vsc2UKLSAgICBpZiAoKHBpZCA9IGZvcmsoKSkgPT0gKFBJRF9UKSAt MSkgeyAvKiBQaXBlIE9LLCBtYWtlIHBvcnQgZm9yay4gKi8KLQlwZXJyb3IoIkNhbid0IG1ha2Ug cG9ydCBmb3JrIik7Ci0JZGVidWcoRjEwMSwiQ09OTkVDVCBmb3JrIGVycm9yIiwiIixlcnJubyk7 Ci0JZ290ZXJyID0gMTsKLSAgICB9Ci0jZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KLSAgICBkZWJ1 ZyhGMTAxLCJDT05ORUNUIGNyZWF0ZWQgZm9yaywgcGlkIiwiIixwaWQpOwotICAgIGlmIChnb3Rl cnIpIHsJCQkvKiBGYWlsZWQgdG8gbWFrZSBwaXBlIG9yIGZvcmsgKi8KLQljb25yZXMoKTsJCQkv KiBSZXNldCB0aGUgY29uc29sZS4gKi8KLQlpZiAobXNnZmxnKSB7Ci0JICAgIHByaW50ZigiXHJc bkNvbW11bmljYXRpb25zIGRpc2Nvbm5lY3QgKEJhY2sgYXQgJXMpXHJcbiIsCi0JCSAgICpteWhv c3QgPwotCQkgICBteWhvc3QgOgotI2lmZGVmIFVOSVgKLQkJICAgImxvY2FsIFVOSVggc3lzdGVt IgotI2Vsc2UKLQkJICAgImxvY2FsIHN5c3RlbSIKLSNlbmRpZiAvKiBVTklYICovCi0JCSAgICk7 Ci0JfQotCXByaW50ZigiXG4iKTsKLQl3aGF0ID0gV19OT1RISU5HOwkJLyogU28gY29uc29sZSBt b2RlcyBhcmUgc2V0IHJpZ2h0LiAqLwotI2lmbmRlZiBOT0NTRVRTCi0JbGFuZ3VhZ2UgPSBsYW5n c3Y7CQkvKiBSZXN0b3JlIGxhbmd1YWdlICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCXBhcmVu dF9pZCA9IChQSURfVCkgMDsJCS8qIENsZWFuIHVwICovCi0JZ290byBjb25yZXQxOwotICAgIH0K LSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGZvcmsgcGlkIiwiIixwaWQpOwotCi0vKiBVcHBlciBm b3JrIChLRVlCIGZvcmspIHJlYWRzIGtleXN0cm9rZXMgYW5kIHNlbmRzIHRoZW0gb3V0LiAqLwot Ci0gICAgaWYgKHBpZCkgewkJCQkvKiBwaWQgIT0gMCwgc28gSSBhbSB0aGUgdXBwZXIgZm9yay4g Ki8KLS8qCi0gIEJlZm9yZSBkb2luZyBhbnl0aGluZyBzaWduaWZpY2FudCwgdGhlIGNoaWxkIGZv cmsgbXVzdCB3YWl0IGZvciBhIGdvLWFoZWFkCi0gIGNoYXJhY3RlciBmcm9tIHhwaXBlWzBdLiAg QmVmb3JlIHN0YXJ0aW5nIHRvIHdhaXQsIHdlIGhhdmUgZW5vdWdoIHRpbWUgdG8KLSAgY2xlYXIg YnVmZmVycyBhbmQgc2V0IHVwIHRoZSBzaWduYWwgaGFuZGxlci4gIFdoZW4gZG9uZSB3aXRoIHRo aXMsIHdlIHdpbGwKLSAgYWxsb3cgdGhlIGNoaWxkIHRvIGNvbnRpbnVlIGJ5IHNhdGlzZnlpbmcg aXRzIHBlbmRpbmcgcmVhZC4KLQotICBSZW1lbWJlciB0aGUgY2hpbGQgYW5kIHBhcmVudCBoYXZl IHNlcGFyYXRlIGFkZHJlc3Mgc3BhY2UuICBUaGUgY2hpbGQgaGFzCi0gIGl0cyBvd24gY29weSBv ZiBpbnB1dCBidWZmZXJzLCBzbyB3ZSBtdXN0IGNsZWFyIHRoZSBpbnB1dCBidWZmZXJzIGluIHRo ZQotICBwYXJlbnQuICBPdGhlcndpc2Ugc3RyYW5nZSBlZmZlY3RzIG1heSBvY2N1ciwgbGlrZSBj aHVua3Mgb2YgY2hhcmFjdGVycwotICByZXBlYXRlZGx5IGVjaG9lZCBvbiB0ZXJtaW5hbCBzY3Jl ZW4uICBUaGUgY2hpbGQgcHJvY2VzcyBpcyBkZXNpZ25lZCB0bwotICBlbXB0eSBpdHMgaW5wdXQg YnVmZmVycyBieSByZWFkaW5nIGFsbCBhdmFpbGFibGUgY2hhcmFjdGVycyBhbmQgZWl0aGVyCi0g IGVjaG9pbmcgdGhlbSBvbiB0aGUgdGVybWluYWwgc2NyZWVuIG9yIHNhdmluZyB0aGVtIGZvciBm dXR1cmUgdXNlIGluIHRoZQotICBwYXJlbnQuICBUaGUgbGF0dGVyIGNhc2UgaGFwcGVucyBkdXJp bmcgQVBDIHByb2Nlc3NpbmcgLSBzZWUgdGhlIGNvZGUgYXJvdW5kCi0gIENFVl9BUEMgb2NjdXJy ZW5jZXMgdG8gc2VlIGhvdyB0aGUgY2hpbGQgcGFzc2VzIGl0cyBpYnVmIGV0YyB0byBwYXJlbnQg dmlhCi0gIHhwaXBlLCBmb3IgcHJlc2VydmF0aW9uIHVudGlsIHRoZSBuZXh0IGVudHJ5IHRvIHRo aXMgbW9kdWxlLCB0byBlbnN1cmUgdGhhdAotICBubyBjaGFyYWN0ZXJzIGFyZSBsb3N0IGJldHdl ZW4gQ09OTkVDVCBzZXNzaW9ucy4KLSovCi0KLS8qCi0gIFRoaXMgb25lIG5lZWRzIGEgYml0IG9m IGV4dHJhIGV4cGxhbmF0aW9uLi4uICBJbiBhZGRpdGlvbiB0byB0aGUgQ09OTkVDVAotICBtb2R1 bGUncyBvd24gYnVmZmVycywgd2hpY2ggYXJlIGNvbW11bmljYXRlZCBhbmQgc3luY2hyb25pemVk IHZpYSB4cGlwZSwKLSAgdGhlIGxvdy1sZXZlbCBVTklYIGNvbW11bmljYXRpb24gcm91dGluZXMg KHR0aW5jLCB0dHhpbiwgZXRjKSBhcmUgYWxzbwotICBidWZmZXJlZCwgc3RhdGljYWxseSwgaW4g dGhlIGNrdXRpby5jIG1vZHVsZS4gIEJ1dCB3aGVuIHRoZSB0d28gQ09OTkVDVAotICBmb3JrcyBz cGxpdCBvZmYsIHRoZSBsb3dlciBmb3JrIGlzIHVwZGF0aW5nIHRoaXMgYnVmZmVyJ3MgcG9pbnRl cnMgYW5kCi0gIGNvdW50cywgYnV0IHRoZSB1cHBlciBmb3JrIG5ldmVyIGZpbmRzIG91dCBhYm91 dCBpdCBhbmQgc3RpbGwgaGFzIHRoZSBvbGQKLSAgb25lcy4gIFRoZSBmb2xsb3dpbmcgVU5JWC1z cGVjaWZpYyBjYWxsIHRvIHRoZSBja3V0aW8uYyBtb2R1bGUgdGFrZXMgY2FyZQotICBvZiB0aGlz Li4uICBXaXRob3V0IGl0LCB3ZSBnZXQgZHVhbCBlY2hvaW5nIG9mIGluY29taW5nIGNoYXJhY3Rl cnMuCi0qLwotCXR0Zmx1eCgpOwotLyoKLSAgQXQgdGhpcyBwb2ludCwgcGVyaGFwcyB5b3UgYXJl IHdvbmRlcmluZyB3aHkgd2UgdXNlIGZvcmtzIGF0IGFsbC4gIEl0IGlzCi0gIHNpbXBseSBiZWNh dXNlIHRoZXJlIGlzIG5vIG90aGVyIG1ldGhvZCBwb3J0YWJsZSBhbW9uZyBhbGwgVU5JWCB2YXJp YXRpb25zLgotICBOb3QgdGhyZWFkcywgbm90IHNlbGVjdCgpLCAuLi4gIChZZXMsIHNlbGVjdCgp IGlzIG1vcmUgY29tbW9uIG5vdzsgaXQgbWlnaHQKLSAgYWN0dWFsbHkgYmUgd29ydGggd3JpdGlu ZyBhIHZhcmlhdGlvbiBvZiB0aGlzIG1vZHVsZSB0aGF0IHdvcmtzIGxpa2UgQlNECi0gIFRlbG5l dCwgb25lIGZvcmssIGRyaXZlbiBieSBzZWxlY3QoKSkuCi0qLwotCWlicCA9IGlidWY7CQkJLyog Q2xlYXIgaWJ1ZltdLiAqLwotCWliYyA9IDA7CQkJLyogQ2hpbGQgbm93IGhhcyBpdHMgb3duIGNv cHkgKi8KLQlzaWduYWwoQ0tfRk9SS19TSUcsIHBpcGVpbnQpOwkvKiBIYW5kbGVyIGZvciBtZXNz YWdlcyBmcm9tIGNoaWxkLiAqLwotCXdyaXRlKHhwaXBlWzFdLCBpYnVmLCAxKTsJLyogQWxsb3cg Y2hpbGQgdG8gcHJvY2VlZCAqLwotCWNsb3NlKHhwaXBlWzFdKTsgeHBpcGVbMV0gPSAtMTsgLyog UGFyZW50IC0gcHJldmVudCBmdXR1cmUgd3JpdGVzICovCi0KLQl3aGF0ID0gV19DT05ORUNUOwkJ LyogS2VlcCB0cmFjayBvZiB3aGF0IHdlJ3JlIGRvaW5nICovCi0JYWN0aXZlID0gMTsKLQlkZWJ1 ZyhGMTAxLCJDT05ORUNUIGtleWJvYXJkIGZvcmsgZHVwbGV4IiwiIixkdXBsZXgpOwotLyoKLSAg Q2F0Y2ggY29tbXVuaWNhdGlvbiBlcnJvcnMgb3IgbW9kZSBjaGFuZ2VzIGluIGxvd2VyIGZvcmsu Ci0KLSAgTm90ZTogU29tZSBDIGNvbXBpbGVycyAoZS5nLiBDcmF5IFVOSUNPUykgaW50ZXJwcmV0 IHRoZSBBTlNJIEMgc3RhbmRhcmQKLSAgYWJvdXQgc2V0am1wKCkgaW4gYSB3YXkgdGhhdCBkaXNh bGxvd3MgY29uc3RydWN0aW9ucyBsaWtlOgotCi0gICAgICAgIGlmICgodmFyID0gW3NpZ11zZXRq bXAoZW52KSkgPT0gMCkgLi4uCi0KLSAgd2hpY2ggcHJldmVudHMgdGhlIHZhbHVlIHJldHVybmVk IGJ5IGNrbG9uZ2ptcCgpIGZyb20gYmVpbmcgdXNlZCBhdCBhbGwuCi0gIFNvIHRoZSBzaWduYWwg aGFuZGxlcnMgc2V0IGEgZ2xvYmFsIHZhcmlhYmxlLCBzanZhbCwgaW5zdGVhZC4KLSovCi0JaWYg KAotI2lmZGVmIENLX1BPU0lYX1NJRwotCSAgICBzaWdzZXRqbXAoY29uX2VudiwxKQotI2Vsc2UK LQkgICAgc2V0am1wKGNvbl9lbnYpCi0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0JICAgID09 IDApIHsJCQkvKiBOb3JtYWwgZW50cnkuLi4gKi8KLQkgICAgamJzZXQgPSAxOwkJCS8qIE5vdyB3 ZSBoYXZlIGEgbG9uZ2ptcCBidWZmZXIgKi8KLQkgICAgc2p2YWwgPSBDRVZfTk87CQkvKiBJbml0 aWFsaXplIHNldGptcCByZXR1cm4gY29kZS4gKi8KLQotCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNU IHNldGptcCBub3JtYWwgZW50cnkiLCIiLHNqdmFsKTsKLQotI2lmZGVmIEFOWVgyNQotCSAgICBp ZiAobmV0d29yayAmJiAobmV0dHlwZSA9PSBORVRfU1gyNSB8fCBuZXR0eXBlID09IE5FVF9JWDI1 KSkgewotCQlvYnVmbCA9IDA7Ci0JCWJ6ZXJvICh4MjVvYnVmLHNpemVvZih4MjVvYnVmKSk7Ci0J ICAgIH0KLSNlbmRpZiAvKiBBTllYMjUgKi8KLS8qCi0gIEhlcmUgaXMgdGhlIGJpZyBsb29wIHRo YXQgZ2V0cyBjaGFyYWN0ZXJzIGZyb20gdGhlIGtleWJvYXJkIGFuZCBzZW5kcyB0aGVtCi0gIG91 dCB0aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UuICBUaGVyZSBhcmUgdHdvIGNvbXBvbmVudHMgdG8g dGhlIGNvbW11bmljYXRpb24KLSAgcGF0aDogdGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUga2V5Ym9h cmQgdG8gQy1LZXJtaXQsIGFuZCBmcm9tIEMtS2VybWl0IHRvCi0gIHRoZSByZW1vdGUgY29tcHV0 ZXIuICBUaGUgdHJlYXRtZW50IG9mIHRoZSA4dGggYml0IG9mIGtleWJvYXJkIGNoYXJhY3RlcnMK LSAgaXMgZ292ZXJuZWQgYnkgU0VUIENPTU1BTkQgQllURVNJWkUgKGNtZG1zaykuICBUaGUgdHJl YXRtZW50IG9mIHRoZSA4dGggYml0Ci0gIG9mIGNoYXJhY3RlcnMgc2VudCB0byB0aGUgcmVtb3Rl IGlzIGdvdmVybmVkIGJ5IFNFVCBURVJNSU5BTCBCWVRFU0laRQotICAoY21hc2spLiAgIFRoaXMg ZGlzdGluY3Rpb24gd2FzIGludHJvZHVjZWQgaW4gZWRpdCA1QSgxNjQpLgotKi8KLQkgICAgd2hp bGUgKGFjdGl2ZSkgewotI2lmbmRlZiBOT1NFVEtFWQotCQlpZiAoa21wdHIpIHsJCS8qIEhhdmUg Y3VycmVudCBtYWNybz8gKi8KLQkJICAgIGRlYnVnKEYxMDAsIkNPTk5FQ1Qga21wdHIgbm9uIE5V TEwiLCIiLDApOwotCQkgICAgaWYgKChjID0gKENIQVIpICprbXB0cisrKSA9PSBOVUwpIHsgLyog R2V0IGNoYXIgZnJvbSBpdCAqLwotCQkJa21wdHIgPSBOVUxMOwkvKiBJZiBubyBtb3JlIGNoYXJz LCAgKi8KLQkJCWRlYnVnKEYxMDAsIkNPTk5FQ1QgbWFjcm8gZW1wdHksIGNvbnRpbnVpbmciLCIi LDApOwotCQkJY29udGludWU7CS8qIHJlc2V0IHBvaW50ZXIgYW5kIGNvbnRpbnVlICovCi0JCSAg ICB9Ci0JCSAgICBkZWJ1ZyhGMDAwLCJDT05ORUNUIGNoYXIgZnJvbSBtYWNybyIsIiIsYyk7Ci0J CX0gZWxzZQkJCS8qIE5vIG1hY3JvLi4uICovCi0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLQkJICBj ID0gQ09OR0tTKCk7CQkvKiBSZWFkIGZyb20ga2V5Ym9hcmQgKi8KLQotI2lmZGVmIENPTU1FTlQK LS8qIHRvbyBtdWNoLi4uICovCi0JCWRlYnVnKEYxMDEsIkNPTk5FQ1QgKiogS0VZQiIsIiIsYyk7 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgIGlmIChjID09IC0xKSB7CQkv KiBJZiByZWFkKCkgZ290IGFuIGVycm9yLi4uICovCi0JCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNU IGtleWJvYXJkIHJlYWQgZXJybm8iLCIiLGVycm5vKTsKLSNpZmRlZiBDT01NRU5UCi0vKgotIFRo aXMgc2VlbXMgdG8gY2F1c2UgcHJvYmxlbXMuICBJZiByZWFkKCkgcmV0dXJucyAtMSwgdGhlIHNp Z25hbCBoYXMgYWxyZWFkeQotIGJlZW4gZGVsaXZlcmVkLCBhbmQgbm90aGluZyB3aWxsIHdha2Ug dXAgdGhlIHBhdXNlKCkuCi0qLwotCQkgICAgcGF1c2UoKTsJCS8qIFdhaXQgZm9yIHRyYW5zbWl0 dGVyIHRvIGZpbmlzaC4gKi8KLSNlbHNlCi0jaWZkZWYgQTk4NgotLyoKLSAgT24gQWx0b3MgbWFj aGluZXMgd2l0aCBYZW5peCAzLjAsIHByZXNzaW5nIERFTCBpbiBjb25uZWN0IG1vZGUgYnJpbmdz IHVzCi0gIGhlcmUgKHJlYXNvbiB1bmtub3duKS4gIFRoZSBjb25zb2xlIGxpbmUgZGlzY2lwbGlu ZSBhdCB0aGlzIHBvaW50IGhhcwotICBpbnRyID0gXkMuICBUaGUgY29tbXVuaWNhdGlvbnMgdHR5 IGhhcyBpbnRyID0gREVMIGJ1dCB3ZSBnZXQgaGVyZSBhZnRlcgotICBwcmVzc2luZyBERUwgb24g dGhlIGtleWJvYXJkLCBldmVuIHdoZW4gdGhlIHJlbW90ZSBzeXN0ZW0gaGFzIGJlZW4gc2V0IG5v dAotICB0byBlY2hvLiAgV2l0aCBBOTg2IGRlZmluZWQsIHdlIHN0YXkgaW4gdGhlIHJlYWQgbG9v cCBhbmQgYmVlcCBvbmx5IGlmIHRoZQotICBvZmZlbmRpbmcgY2hhcmFjdGVyIGlzIG5vdCBERUwu Ci0qLwotCQkgICAgaWYgKChjICYgMTI3KSAhPSAxMjcpIGNvbm9jKEJFTCk7Ci0jZWxzZQotI2lm ZGVmIEVJTlRSCi0vKgotICAgVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IHRoZSBvdGhlciBmb3JrIHNp Z25hbGxpbmcgdGhpcyBvbmUgYWJvdXQKLSAgIGFuIGVjaG9pbmcgY2hhbmdlIGR1cmluZyBURUxO RVQgbmVnb3RpYXRpb25zLgotKi8KLQkJICAgIGlmIChlcnJubyA9PSBFSU5UUikKLQkJICAgICAg Y29udGludWU7Ci0jZW5kaWYgLyogRUlOVFIgKi8KLQkJICAgIGNvbm9jKEJFTCk7CQkvKiBPdGhl cndpc2UsIGJlZXAgKi8KLQkJICAgIGFjdGl2ZSA9IDA7CQkvKiBhbmQgdGVybWluYXRlIHRoZSBy ZWFkIGxvb3AgKi8KLQkJICAgIGNvbnRpbnVlOwotI2VuZGlmIC8qIEE5ODYgKi8KLSNlbmRpZiAv KiBDT01NRU5UICovCi0JCX0KLQkJYyAmPSBjbWRtc2s7CQkvKiBEbyBhbnkgcmVxdWVzdGVkIG1h c2tpbmcgKi8KLSNpZm5kZWYgTk9TRVRLRVkKLS8qCi0gIE5vdGU6IGttcHRyIGlzIE5VTEwgaWYg d2UgZ290IGNoYXJhY3RlciBjIGZyb20gdGhlIGtleWJvYXJkLCBhbmQgaXQgaXMKLSAgbm90IE5V TEwgaWYgaXQgY2FtZSBmcm9tIGEgbWFjcm8uICBJbiB0aGUgbGF0dGVyIGNhc2UsIHdlIG11c3Qg YXZvaWQKLSAgZXhwYW5kaW5nIGl0IGFnYWluLgotKi8KLQkJaWYgKCFrbXB0ciAmJiBtYWNyb3Rh YltjXSkgeyAvKiBNYWNybyBkZWZpbml0aW9uIGZvciBjPyAqLwotCQkgICAga21wdHIgPSBtYWNy b3RhYltjXTsgICAgIC8qIFllcywgc2V0IHVwIG1hY3JvIHBvaW50ZXIgKi8KLQkJICAgIGNvbnRp bnVlOwkJICAgICAvKiBhbmQgcmVzdGFydCB0aGUgbG9vcCwgKi8KLQkJfSBlbHNlIGMgPSBrZXlt YXBbY107CSAgICAgLyogZWxzZSB1c2Ugc2luZ2xlLWNoYXIga2V5bWFwICovCi0jZW5kaWYgLyog Tk9TRVRLRVkgKi8KLQkJaWYgKAotI2lmbmRlZiBOT1NFVEtFWQotCQkgICAgIWttcHRyICYmCi0j ZW5kaWYgLyogTk9TRVRLRVkgKi8KLQkJICAgICh0dF9lc2NhcGUgJiYgKGMgJiAweGZmKSA9PSBl c2NhcGUpKSB7IC8qIEVzY2FwZSBjaGFyPyAqLwotCQkgICAgZGVidWcoRjAwMCwiQ09OTkVDVCBn b3QgZXNjYXBlIiwiIixjKTsKLQkJICAgIGMgPSBDT05HS1MoKSAmIDAxNzc7IC8qIEdvdCBlc2Ms IGdldCBpdHMgYXJnICovCi0JCSAgICAvKiBObyBrZXkgbWFwcGluZyBoZXJlICovCi0JCSAgICBk b2VzYygoY2hhcikgYyk7CS8qIE5vdyBwcm9jZXNzIGl0ICovCi0KLQkJfSBlbHNlIHsJCS8qIEl0 J3Mgbm90IHRoZSBlc2NhcGUgY2hhcmFjdGVyICovCi0JCSAgICBjc2F2ZSA9IGM7CQkvKiBTYXZl IGl0IGJlZm9yZSB0cmFuc2xhdGlvbiAqLwotCQkJCQkvKiBmb3IgbG9jYWwgZWNob2luZy4gKi8K LSNpZm5kZWYgTk9DU0VUUwotCQkgICAgaWYgKGluZXNjID09IEVTX05PUk1BTCkgeyAvKiBJZiBu b3QgaW5zaWRlIGVzY2FwZSBzZXEuLiAqLwotCQkJLyogVHJhbnNsYXRlIGNoYXJhY3RlciBzZXRz ICovCi0jaWZkZWYgVU5JQ09ERQotCQkJaW50IHg7Ci0JCQlDSEFSIGNoOwotCQkJY2ggPSBjOwot CQkJaWYgKHVuaWNvZGUgPT0gMSkgeyAvKiBSZW1vdGUgaXMgVVRGLTggKi8KLQkJCSAgICBvdXR4 Y291bnQgPSBiX3RvX3UoY2gsb3V0eGJ1ZixPVVRYQlVGU0laLHRjc3NpemUpOwotCQkJICAgIG91 dHhidWZbb3V0eGNvdW50XSA9IE5VTDsKLQkJCX0gZWxzZSBpZiAodW5pY29kZSA9PSAyKSB7IC8q IExvY2FsIGlzIFVURi04ICovCi0JCQkgICAgeCA9IHVfdG9fYihjaCk7IC8qIFNvIHRyYW5zbGF0 ZSB0byByZW1vdGUgYnl0ZSAqLwotCQkJICAgIGlmICh4IDwgMCkKLQkJCSAgICAgIGNvbnRpbnVl OwotCQkJICAgIG91dHhidWZbMF0gPSAodW5zaWduZWQpKHggJiAweGZmKTsKLQkJCSAgICBvdXR4 Y291bnQgPSAxOwotCQkJICAgIG91dHhidWZbb3V0eGNvdW50XSA9IE5VTDsKLQkJCX0gZWxzZSB7 Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCQkJICAgIC8qIExvY2FsLXRvLWludGVybWVkaWF0ZSAq LwotCQkJICAgIGlmIChzeG8pIGMgPSAoKnN4bykoKGNoYXIpYyk7Ci0JCQkgICAgLyogSW50ZXJt ZWRpYXRlLXRvLXJlbW90ZSAqLwotCQkJICAgIGlmIChyeG8pIGMgPSAoKnJ4bykoKGNoYXIpYyk7 Ci0JCQkgICAgb3V0eGJ1ZlswXSA9IGM7Ci0JCQkgICAgb3V0eGNvdW50ID0gMTsKLQkJCSAgICBv dXR4YnVmW291dHhjb3VudF0gPSBOVUw7Ci0jaWZkZWYgVU5JQ09ERQotCQkJfQotI2VuZGlmIC8q IFVOSUNPREUgKi8KLQkJICAgIH0KLQkJICAgIGlmIChlc2NzZXEpCi0JCSAgICAgIGFwY3JjID0g Y2hrYWVzKChjaGFyKWMpOwotI2Vsc2UKLQkJICAgIG91dHhidWZbMF0gPSBjOwotCQkgICAgb3V0 eGNvdW50ID0gMTsKLQkJICAgIG91dHhidWZbb3V0eGNvdW50XSA9IE5VTDsKLSNlbmRpZiAvKiBO T0NTRVRTICovCi0JCSAgICBmb3IgKGkgPSAwOyBpIDwgb3V0eGNvdW50OyBpKyspIHsKLQkJCWMg PSBvdXR4YnVmW2ldOwotLyoKLSBJZiBTaGlmdC1Jbi9TaGlmdC1PdXQgaXMgc2VsZWN0ZWQgYW5k IHdlIGhhdmUgYSA3LWJpdCBjb25uZWN0aW9uLAotIGhhbmRsZSBzaGlmdGluZyBoZXJlLgotKi8K LQkJCWlmIChzb3NpKSB7CS8qIFNoaWZ0LUluL091dCBzZWxlY3RlZD8gKi8KLQkJCSAgICBpZiAo Y21hc2sgPT0gMDE3NykgeyAvKiBJbiA3LWJpdCBlbnZpcm9ubWVudD8gKi8KLQkJCQlpZiAoYyAm IDAyMDApIHsJLyogOC1iaXQgY2hhcmFjdGVyPyAqLwotCQkJCSAgICBpZiAob3V0c2hpZnQgPT0g MCkgeyAvKiBJZiBub3Qgc2hpZnRlZCwgKi8KLQkJCQkJdHRvYyhkb3BhcihTTykpOyAvKiBzaGlm dC4gKi8KLQkJCQkJb3V0c2hpZnQgPSAxOwotCQkJCSAgICB9Ci0JCQkJfSBlbHNlIHsKLQkJCQkg ICAgaWYgKG91dHNoaWZ0ID09IDEpIHsgLyogNy1iaXQgY2hhcmFjdGVyICovCi0JCQkJCXR0b2Mo ZG9wYXIoU0kpKTsgLyogSWYgc2hpZnRlZCwgKi8KLQkJCQkJb3V0c2hpZnQgPSAwOyAgICAvKiB1 bnNoaWZ0LiAqLwotCQkJCSAgICB9Ci0JCQkJfQotCQkJICAgIH0KLQkJCSAgICBpZiAoYyA9PSBT Tykgb3V0c2hpZnQgPSAxOyAgIC8qIFVzZXIgdHlwZWQgU08gKi8KLQkJCSAgICBpZiAoYyA9PSBT SSkgb3V0c2hpZnQgPSAwOyAgIC8qIFVzZXIgdHlwZWQgU0kgKi8KLQkJCX0KLQkJCWMgJj0gY21h c2s7CS8qIEFwcGx5IEtlcm1pdC10by1ob3N0IG1hc2sgbm93LiAqLwotI2lmZGVmIFNVTlgyNQot CQkJaWYgKG5ldHdvcmsgJiYgbmV0dHlwZSA9PSBORVRfU1gyNSkgewotCQkJICAgIGlmIChwYWRw YXJtc1tQQURfRUNIT10pIHsKLQkJCQlpZiAoZGVic2VzKQotCQkJCSAgY29ub2woZGJjaHIoYykp IDsKLQkJCQllbHNlCi0JCQkJICBpZiAoKGMgIT0gcGFkcGFybXNbUEFEX0NIQVJfREVMRVRFX0NI QVJdKSAmJgotCQkJCSAgICAoYyAhPSBwYWRwYXJtc1tQQURfQlVGRkVSX0RFTEVURV9DSEFSXSkg JiYKLQkJCQkgICAgKGMgIT0gcGFkcGFybXNbUEFEX0JVRkZFUl9ESVNQTEFZX0NIQVJdKSkKLQkJ CQkgICAgY29ub2MoYykgOwotCQkJCWlmIChzZXNsb2cgJiYgIXNlc3NmdCkKLQkJCQkgIGxvZ2No YXIoYyk7Ci0JCQkgICAgfQotCQkJICAgIGlmIChjID09IENSICYmIChwYWRwYXJtc1tQQURfTEZf QUZURVJfQ1JdID09IDQgfHwKLQkJCQkJICAgIHBhZHBhcm1zW1BBRF9MRl9BRlRFUl9DUl0gPT0g NSkpIHsKLQkJCQlpZiAoZGVic2VzKQotCQkJCSAgY29ub2woZGJjaHIoTEYpKSA7Ci0JCQkJZWxz ZQotCQkJCSAgY29ub2MoTEYpIDsKLQkJCQlpZiAoc2VzbG9nICYmICFzZXNzZnQpCi0JCQkJICBs b2djaGFyKExGKTsKLQkJCSAgICB9Ci0JCQkgICAgaWYgKGMgPT0gcGFkcGFybXNbUEFEX0JSRUFL X0NIQVJBQ1RFUl0pIHsKLQkJCQlicmVha2FjdCgpOwotCQkJICAgIH0gZWxzZSBpZiAocGFkcGFy bXNbUEFEX0RBVEFfRk9SV0FSRF9USU1FT1VUXSkgewotCQkJCXRvc2VuZCA9IDE7Ci0JCQkJeDI1 b2J1ZiBbb2J1ZmwrK10gPSBjOwotCQkJICAgIH0gZWxzZSBpZiAoKChjID09IHBhZHBhcm1zW1BB RF9DSEFSX0RFTEVURV9DSEFSXSl8fAotCQkJCSAgICAgKGMgPT0gcGFkcGFybXNbUEFEX0JVRkZF Ul9ERUxFVEVfQ0hBUl0pIHx8Ci0JCQkJICAgICAoYyA9PSBwYWRwYXJtc1tQQURfQlVGRkVSX0RJ U1BMQVlfQ0hBUl0pKQotCQkJCSAgICAgICAmJiAocGFkcGFybXNbUEFEX0VESVRJTkddKSkgewot CQkJCWlmIChjID09IHBhZHBhcm1zW1BBRF9DSEFSX0RFTEVURV9DSEFSXSkgewotCQkJCSAgICBp ZiAob2J1ZmwgPiAwKSB7Ci0JCQkJCWNvbm9sKCJcYiBcYiIpOyBvYnVmbC0tOwotCQkJCSAgICB9 IGVsc2Uge30KLQkJCQl9IGVsc2UgaWYKLQkJCQkgIChjID09IHBhZHBhcm1zW1BBRF9CVUZGRVJf REVMRVRFX0NIQVJdKSB7Ci0JCQkJICAgICAgY29ub2wgKCJcclxuUEFEIEJ1ZmZlciBEZWxldGVk XHJcbiIpOwotCQkJCSAgICAgIG9idWZsID0gMDsKLQkJCQl9IGVsc2UgaWYKLQkJCQkgIChjPT1w YWRwYXJtc1tQQURfQlVGRkVSX0RJU1BMQVlfQ0hBUl0pIHsKLQkJCQkgICAgICBjb25vbCgiXHJc biIpOwotCQkJCSAgICAgIGNvbm9sKHgyNW9idWYpOwotCQkJCSAgICAgIGNvbm9sKCJcclxuIik7 Ci0JCQkJfSBlbHNlIHt9Ci0JCQkgICAgfSBlbHNlIHsKLQkJCQl4MjVvYnVmIFtvYnVmbCsrXSA9 IGM7Ci0JCQkJaWYgKG9idWZsID09IE1BWE9YMjUpIHRvc2VuZCA9IDE7Ci0JCQkJZWxzZSBpZiAo YyA9PSBDUikgdG9zZW5kID0gMTsKLQkJCSAgICB9Ci0JCQkgICAgaWYgKHRvc2VuZCkgewotCQkJ CWlmICh0dG9sKChDSEFSICopeDI1b2J1ZixvYnVmbCkgPCAwKSB7Ci0JCQkJICAgIHBlcnJvciAo IlxyXG5DYW4ndCBzZW5kIGNoYXJhY3RlcnMiKTsKLQkJCQkgICAgYWN0aXZlID0gMDsKLQkJCQl9 IGVsc2UgewotCQkJCSAgICBiemVybyAoeDI1b2J1ZixzaXplb2YoeDI1b2J1ZikpOwotCQkJCSAg ICBvYnVmbCA9IDA7Ci0JCQkJICAgIHRvc2VuZCA9IDA7Ci0JCQkJfQotCQkJICAgIH0gZWxzZSB7 fTsKLQkJCX0gZWxzZSB7Ci0jZW5kaWYgLyogU1VOWDI1ICovCi0JCQkgICAgaWYgKGMgPT0gJ1ww MTUnKSB7IC8qIENhcnJpYWdlIFJldHVybiAqLwotCQkJCWludCBzdHVmZiA9IC0xOwotCQkJCWlm ICh0bmxtKSB7IC8qIFRFUk1JTkFMIE5FV0xJTkUgT04gKi8KLQkJCQkgICAgc3R1ZmYgPSBMRjsJ LyogU3R1ZmYgTEYgKi8KLSNpZmRlZiBUTkNPREUKLQkJCQl9IGVsc2UgaWYgKG5ldHdvcmsgJiYg LyogVEVMTkVUIE5FV0xJTkUgKi8KLQkJCQkJICAgSVNfVEVMTkVUKCkpIHsKLQkJCQkgICAgc3dp dGNoICghVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpID8KLQkJCQkJICAgIHRuX25sbSA6Ci0JCQkJ CSAgICB0bl9iX25sbQotCQkJCQkgICAgKSB7Ci0JCQkJICAgICAgY2FzZSBUTkxfQ1JMRjoKLQkJ CQkJc3R1ZmYgPSBMRjsKLQkJCQkJYnJlYWs7Ci0JCQkJICAgICAgY2FzZSBUTkxfQ1JOVUw6Ci0J CQkJCXN0dWZmID0gTlVMOwotCQkJCQlicmVhazsKLQkJCQkgICAgfQotI2VuZGlmIC8qIFROQ09E RSAqLwotCQkJCX0KLQkJCQlpZiAoc3R1ZmYgPiAtMSkgewotCQkJCSAgICB0dG9jKGRvcGFyKCdc MDE1JykpOyAvKiBTZW5kIENSICovCi0JCQkJICAgIGlmIChkdXBsZXgpIGNvbm9jKCdcMDE1Jyk7 IC8qIEVjaG8gQ1IgKi8KLQkJCQkgICAgYyA9IHN0dWZmOyAvKiBDaGFyIHRvIHN0dWZmICovCi0J CQkJICAgIGNzYXZlID0gYzsKLQkJCQl9Ci0JCQkgICAgfQotI2lmZGVmIFROQ09ERQotLyogSWYg dXNlciB0eXBlcyB0aGUgMHhmZiBjaGFyYWN0ZXIgKFRFTE5FVCBJQUMpLCBpdCBtdXN0IGJlIGRv dWJsZWQuICovCi0JCQkgICAgZWxzZQkvKiBOb3QgQ1IgKi8KLQkJCSAgICAgIGlmICgoZG9wYXIo KENIQVIpIGMpID09IElBQykgJiYgLyogSUFDICgweGZmKSAqLwotCQkJCSAgbmV0d29yayAmJiBJ U19URUxORVQoKSkgewotCQkJCSAgLyogU2VuZCBvbmUgY29weSBub3cgKi8KLQkJCQkgIC8qIGFu ZCB0aGUgb3RoZXIgb25lIGp1c3QgYmVsb3cuICovCi0JCQkJICB0dG9jKChjaGFyKUlBQyk7Ci0J CQkgICAgICB9Ci0jZW5kaWYgLyogVE5DT0RFICovCi0JCQkgICAgLyogU2VuZCB0aGUgY2hhcmFj dGVyICovCi0KLQkJCSAgICBpZiAodHRvYygoY2hhcilkb3BhcigoQ0hBUikgYykpID4gLTEpIHsK LQkJCQlpZiAoZHVwbGV4KSB7CS8qIElmIGhhbGYgZHVwbGV4LCBtdXN0IGVjaG8gKi8KLQkJCQkg ICAgaWYgKGRlYnNlcykKLQkJCQkgICAgICBjb25vbChkYmNocihjc2F2ZSkpOyAvKiBvcmlnaW5h bCBjaGFyICovCi0JCQkJICAgIGVsc2UgLyogbm90IHRoZSB0cmFuc2xhdGVkIG9uZSAqLwotCQkJ CSAgICAgIGNvbm9jKChjaGFyKWNzYXZlKTsKLQkJCQkgICAgaWYgKHNlc2xvZykgeyAvKiBBbmQg bWF5YmUgbG9nIGl0IHRvbyAqLwotCQkJCQljMiA9IGNzYXZlOwotCQkJCQlpZiAoc2Vzc2Z0ID09 IDAgJiYgY3NhdmUgPT0gJ1xyJykKLQkJCQkJICBjMiA9ICdcbic7Ci0JCQkJCWxvZ2NoYXIoKGNo YXIpYzIpOwotCQkJCSAgICB9Ci0JCQkJfQotCQkJICAgIH0gZWxzZSB7Ci0JCQkJcGVycm9yKCJc clxuQ2FuJ3Qgc2VuZCBjaGFyYWN0ZXIiKTsKLQkJCQlhY3RpdmUgPSAwOwotCQkJICAgIH0KLSNp ZmRlZiBTVU5YMjUKLQkJCX0KLSNlbmRpZiAvKiBTVU5YMjUgKi8KLQkJICAgIH0gLyogZm9yLi4u ICovCi0JCX0KLQkgICAgfQotCi0JICAgIC8qIG5vdyBhY3RpdmUgPT0gMCAqLwotICAgICAgICAg ICAgc2lnbmFsKENLX0ZPUktfU0lHLCBTSUdfSUdOKTsgLyogVHVybiBvZmYgQ0tfRk9SS19TSUcg Ki8KLQkgICAgc2p2YWwgPSBDRVZfTk87CQkvKiBTZXQgdG8gaGFuZ3VwICovCi0JfQkJCQkvKiBD b21lIGhlcmUgb24gdGVybWluYXRpb24gb2YgY2hpbGQgKi8KLQotLyogY2tsb25nam1wKCkgZXhl Y3V0ZWQgaW4gcGlwZWludCgpIChwYXJlbnQgb25seSEpIGNvbWVzIGhlcmUgKi8KLQotLyoKLSAg Tm93IHRoZSBjaGlsZCBmb3JrIGlzIGdvbmUgb3IgaXMgd2FpdGluZyBmb3IgQ0tfRk9SS19TSUcg aW4gY2tfc25kbXNnKCkuCi0gIFNvIHdlIGNhbid0IGdldCAoaW4gdGhlIHBhcmVudCkgYW55IHN1 YnNlcXVlbnQgQ0tfRk9SS19TSUcgc2lnbmFscyB1bnRpbAotICB3ZSBzaWduYWwgdGhlIGNoaWxk IHdpdGggQ0tfRk9SS19TSUcuCi0qLwotCWRlYnVnKEYxMDAsIkNPTk5FQ1Qgc2lnbmFsaW5nIHBv cnQgZm9yayIsIiIsMCk7Ci0Jc2lnbmFsKENLX0ZPUktfU0lHLCBTSUdfSUdOKTsJLyogVHVybiB0 aGlzIG9mZiAqLwotCWRlYnVnKEYxMDEsIkNPTk5FQ1Qga2lsbGluZyBwb3J0IGZvcmsiLCIiLHBp ZCk7Ci0JaWYgKHBpZCkgewotCSAgICBpbnQgeCA9IDA7Ci0jaWZkZWYgQkVPU09SQkVCT1gKLQkg ICAgewotCQlsb25nIHJldF92YWw7Ci0JCXggPSBraWxsKHBpZCxTSUdLSUxMVEhSKTsgLyogS2ls bCBsb3dlciBmb3JrICovCi0JCXdhaXRfZm9yX3RocmVhZChwaWQsICZyZXRfdmFsKTsKLQkgICAg fQotI2Vsc2UKLSNpZmRlZiBQbGFuOQotCSAgICB4ID0ga2lsbChwaWQsU0lHS0lMTCk7CS8qIEtp bGwgbG93ZXIgZm9yayAqLwotI2Vsc2UKLQkgICAgeCA9IGtpbGwocGlkLDkpOwotI2VuZGlmIC8q IFBsYW45ICovCi0jZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KLQkgICAgd2FpdCgoV0FJVF9UICop MCk7CQkvKiBXYWl0IHRpbGwgZ29uZS4gKi8KLQkgICAgaWYgKHggPCAwKSB7Ci0JCXByaW50Zigi V0FSTklORzogRmFpbHVyZSB0byBraWxsIGZvcmssIHBpZCAlZDogJXMsIGVycm5vPSVkXG4iLAot CQkgICAgICAgKGludCkgcGlkLCBja19lcnJzdHIoKSwgZXJybm8pOwotCQlkZWJ1ZyhGMTExLCJD T05ORUNUIGVycm9yIGtpbGxpbmcgcGlkIixja19lcnJzdHIoKSxlcnJubyk7Ci0JICAgIH0KLQkg ICAgZGVidWcoRjEwMSwiQ09OTkVDVCBraWxsZWQgcG9ydCBmb3JrIiwiIixwaWQpOwotCSAgICBw aWQgPSAoUElEX1QpIDA7Ci0JfQotCWlmIChzanZhbCA9PSBDRVZfSFVQKSB7CQkvKiBSZWFkIGVy cm9yIG9uIGNvbW0gZGV2aWNlICovCi0JICAgIGRvaGFuZ3VwID0gMTsJCS8qIHNvIHdlIHdhbnQg dG8gaGFuZyB1cCBvdXIgc2lkZSAqLwotI2lmZGVmIE5FVENPTk4KLQkgICAgaWYgKG5ldHdvcmsp IHsJCS8qIGFuZC9vciBjbG9zZSBuZXR3b3JrIGNvbm5lY3Rpb24gKi8KLQkJdHRjbG9zKDApOwot CQlkb2xvZ2VuZCgpOwotI2lmZGVmIFNVTlgyNQotCQlpZiAobmV0dHlwZSA9PSBORVRfU1gyNSkg LyogSWYgWC4yNSwgcmVzdG9yZSB0aGUgUEFEIHBhcmFtcyAqLwotCQkgIGluaXRwYWQoKTsKLSNl bmRpZiAvKiBTVU5YMjUgKi8KLQkgICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQl9Ci0jaWZk ZWYgQ0tfQVBDCi0JaWYgKHNqdmFsID09IENFVl9BUEMpIHsJCS8qIEFwcGxpY2F0aW9uIFByb2dy YW0gQ29tbWFuZCByZWMnZCAqLwotCSAgICBhcGNhY3RpdmUgPSBBUENfUkVNT1RFOwkvKiBGbGFn IEFQQyBhcyBhY3RpdmUgKi8KLQkgICAgYWN0aXZlID0gMDsJCQkvKiBGbGFnIENPTk5FQ1QgYXMg aW5hY3RpdmUgKi8KLQl9Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0JY29ucmVzKCk7CQkJLyogUmVz ZXQgdGhlIGNvbnNvbGUuICovCi0JaWYgKGRvaGFuZ3VwID4gMCkgewkJLyogSWYgaGFuZ3VwIHJl cXVlc3RlZCwgZG8gdGhhdC4gKi8KLSNpZm5kZWYgTk9ESUFMCi0JICAgIGlmIChkb2hhbmd1cCA+ IDEpCQkvKiBVc2VyIGFza2VkIGZvciBpdCAqLwotCSAgICAgIGlmIChtZG1odXAoKSA8IDEpCQkv KiBNYXliZSBoYW5nIHVwIHZpYSBtb2RlbSAqLwotI2VuZGlmIC8qIE5PRElBTCAqLwotCQl0dGhh bmcoKTsJCS8qIEFuZCBtYWtlIHN1cmUgd2UgZG9uJ3QgaGFuZyB1cCAqLwotCSAgICBkb2hhbmd1 cCA9IDA7CQkvKiBhZ2FpbiB1bmxlc3MgcmVxdWVzdGVkIGFnYWluLiAqLwotCX0KLQotI2lmZGVm IENPTU1FTlQKLSNpZmRlZiBORVRDT05OCi0jaWZkZWYgU0lHUElQRQotCWlmIChuZXR3b3JrICYm IHNpZ3BpcGgpCQkvKiBSZXN0b3JlIHByZXZpb3VzIFNJR1BJUEUgaGFuZGxlciAqLwotCSAgKFZP SUQpIHNpZ25hbChTSUdQSVBFLCBzaWdwaXBoKTsKLSNlbmRpZiAvKiBTSUdQSVBFICovCi0jZW5k aWYgLyogTkVUQ09OTiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIEFOWVgyNQot CWlmIChkb3gyNWNscikgewkJCS8qIElmIFguMjUgQ2xlYXIgcmVxdWVzdGVkICovCi0JICAgIHgy NWNsZWFyKCk7CQkJLyogZG8gdGhhdC4gKi8KLSNpZm5kZWYgSUJNWDI1Ci0JICAgIGluaXRwYWQo KTsKLSNlbmRpZiAvKiBJQk1YMjUgKi8KLQkgICAgZG94MjVjbHIgPSAwOwkJLyogQnV0IG9ubHkg b25jZS4gKi8KLQl9Ci0jZW5kaWYgLyogQU5ZWDI1ICovCi0KLQlpZiAocXVpdG5vdykgZG9leGl0 KEdPT0RfRVhJVCx4aXRzdGEpOyAvKiBFeGl0IG5vdyBpZiByZXF1ZXN0ZWQuICovCi0gIAlpZiAo bXNnZmxnKQotCSAgcHJpbnRmKCIoQmFjayBhdCAlcykiLCAqbXlob3N0ID8gbXlob3N0IDogImxv Y2FsIFVOSVggc3lzdGVtIik7Ci0jaWZkZWYgQ0tfQVBDCi0gICAgICAgIGlmICghYXBjYWN0aXZl KQotI2VuZGlmIC8qIENLX0FQQyAqLwotCSAgcHJpbnRmKCJcbiIpOwotCXdoYXQgPSBXX05PVEhJ Tkc7CQkvKiBTbyBjb25zb2xlIG1vZGVzIHNldCByaWdodC4gKi8KLSNpZm5kZWYgTk9DU0VUUwot CWxhbmd1YWdlID0gbGFuZ3N2OwkJLyogUmVzdG9yZSBsYW5ndWFnZSAqLwotI2VuZGlmIC8qIE5P Q1NFVFMgKi8KLQlwYXJlbnRfaWQgPSAoUElEX1QpIDA7Ci0JZ290byBjb25yZXQxOwotCi0gICAg fQotI2lmbmRlZiBCRU9TT1JCRUJPWAotICAgIGVsc2UgewkvKiAqKiogKi8JCS8qIEluZmVyaW9y IHJlYWRzLCBwcmludHMgcG9ydCBpbnB1dCAqLwotICAgICAgICBjb25jbGQoLyogKHZvaWQgKikm cGlkICovKTsKLSAgICB9Ci0jZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KLQotY29ucmV0MToKLSAg ICBjb25yZXQgPSAxOwotY29ucmV0MDoKLSAgICBzaWduYWwoQ0tfRk9SS19TSUcsIFNJR19JR04p OwkvKiBJbiBjYXNlIHRoaXMgd2Fzbid0IGRvbmUgYWxyZWFkeSAqLwotICAgIGRlYnVnKEYxMDEs IkNPTk5FQ1QgY29uZWN0IGV4aXQgaWJjIiwiIixpYmMpOwotICAgIGRlYnVnKEYxMDEsIkNPTk5F Q1QgY29uZWN0IGV4aXQgb2JjIiwiIixvYmMpOwotICAgIGNsb3NlKHhwaXBlWzBdKTsgeHBpcGVb MF0gPSAtMTsJLyogQ2xvc2UgdGhlIHBpcGUgKi8KLSAgICBjbG9zZSh4cGlwZVsxXSk7IHhwaXBl WzFdID0gLTE7Ci0gICAgaWYgKG1zZ2ZsZykgewotI2lmZGVmIENLX0FQQwotCWlmIChhcGNhY3Rp dmUgPT0gQVBDX0xPQ0FMKQotCSAgcHJpbnRmKCJcbiIpOwotI2VuZGlmIC8qIENLX0FQQyAqLwot CXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLVxyXG4iKTsKLSAgICB9Ci0gICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgcmV0dXJuKGNvbnJl dCk7Ci19Ci0KLQotLyogIEggQyBPIE4gTiBFICAtLSAgR2l2ZSBoZWxwIG1lc3NhZ2UgZm9yIGNv bm5lY3QuICAqLwotCi1pbnQKLWhjb25uZSgpIHsKLSAgICBpbnQgYzsKLSAgICBzdGF0aWMgY2hh ciAqaGxwbXNnW10gPSB7Ci0iXHJcbiAgPyBmb3IgdGhpcyBtZXNzYWdlIiwKLSJcclxuICAwICh6 ZXJvKSB0byBzZW5kIGEgbnVsbCIsCi0iXHJcbiAgQiB0byBzZW5kIGEgQlJFQUsiLAotI2lmZGVm IENLX0xCUksKLSJcclxuICBMIHRvIHNlbmQgYSBMb25nIEJSRUFLIiwKLSNlbmRpZiAvKiBDS19M QlJLICovCi0jaWZkZWYgTkVUQ09OTgotIlxyXG4gIEkgdG8gc2VuZCBhIG5ldHdvcmsgaW50ZXJy dXB0IHBhY2tldCIsCi0jaWZkZWYgVENQU09DS0VUCi0iXHJcbiAgQSB0byBzZW5kIEFyZSBZb3Ug VGhlcmU/IiwKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNpZmRlZiBBTllYMjUKLSJcclxuICBS IHRvIHJlc2V0IFguMjUgdmlydHVhbCBjaXJjdWl0IiwKLSNlbmRpZiAvKiBBTllYMjUgKi8KLSNl bmRpZiAvKiBORVRDT05OICovCi0iXHJcbiAgVSB0byBoYW5ndXAgYW5kIGNsb3NlIHRoZSBjb25u ZWN0aW9uIiwKLSJcclxuICBRIHRvIGhhbmd1cCBhbmQgcXVpdCBLZXJtaXQiLAotIlxyXG4gIFMg Zm9yIHN0YXR1cyIsCi0jaWZkZWYgTk9QVVNICi0iXHJcbiAgISB0byBwdXNoIHRvIGxvY2FsIHNo ZWxsIChkaXNhYmxlZCkiLAotIlxyXG4gIFogdG8gc3VzcGVuZCAoZGlzYWJsZWQpIiwKLSNlbHNl Ci0iXHJcbiAgISB0byBwdXNoIHRvIGxvY2FsIHNoZWxsIiwKLSNpZmRlZiBOT0pDCi0iXHJcbiAg WiB0byBzdXNwZW5kIChkaXNhYmxlZCkiLAotI2Vsc2UKLSJcclxuICBaIHRvIHN1c3BlbmQiLAot I2VuZGlmIC8qIE5PSkMgKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSJcclxuICBcXCBiYWNrc2xh c2ggY29kZToiLAotIlxyXG4gICAgXFxubm4gIGRlY2ltYWwgY2hhcmFjdGVyIGNvZGUiLAotIlxy XG4gICAgXFxPbm5uIG9jdGFsIGNoYXJhY3RlciBjb2RlIiwKLSJcclxuICAgIFxcWGhoICBoZXhh ZGVjaW1hbCBjaGFyYWN0ZXIgY29kZSIsCi0iXHJcbiAgICB0ZXJtaW5hdGUgd2l0aCBjYXJyaWFn ZSByZXR1cm4uIiwKLSJcclxuIFR5cGUgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgYWdhaW4gdG8gc2Vu ZCB0aGUgZXNjYXBlIGNoYXJhY3Rlciwgb3IiLAotIlxyXG4gcHJlc3MgdGhlIHNwYWNlLWJhciB0 byByZXN1bWUgdGhlIENPTk5FQ1QgY29tbWFuZC5cclxuIiwKLSIiIH07Ci0KLSAgICBjb25vbCgi XHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0i KTsKLSAgICBjb25vbCgiXHJcblByZXNzIEMgdG8gcmV0dXJuIHRvICIpOwotICAgIGNvbm9sKCpt eWhvc3QgPyBteWhvc3QgOiAidGhlIEMtS2VybWl0IHByb21wdCIpOwotICAgIGNvbm9sKCIsIG9y OiIpOwotICAgIGNvbm9sYShobHBtc2cpOwkJCS8qIFByaW50IHRoZSBoZWxwIG1lc3NhZ2UuICov Ci0gICAgY29ub2woIkNvbW1hbmQ+Iik7CQkJLyogUHJvbXB0IGZvciBjb21tYW5kLiAqLwotICAg IGMgPSBDT05HS1MoKSAmIDAxNzc7CQkvKiBHZXQgY2hhcmFjdGVyLCBzdHJpcCBhbnkgcGFyaXR5 LiAqLwotICAgIC8qIE5vIGtleSBtYXBwaW5nIG9yIHRyYW5zbGF0aW9uIGhlcmUgKi8KLSAgICBp ZiAoYyAhPSBDTURRKQotICAgICAgY29ub2xsKCIiKTsKLSAgICBjb25vbGwoIi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLSAgIHJldHVybihj KTsJCQkJLyogUmV0dXJuIGl0LiAqLwotfQotCi0KLS8qICBEIE8gRSBTIEMgIC0tICBQcm9jZXNz IGFuIGVzY2FwZSBjaGFyYWN0ZXIgYXJndW1lbnQgICovCi0KLVZPSUQKLSNpZmRlZiBDS19BTlNJ QwotZG9lc2MoY2hhciBjKQotI2Vsc2UKLWRvZXNjKGMpIGNoYXIgYzsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotLyogZG9lc2MgKi8gewotICAgIENIQVIgZDsKLQotICAgIGRlYnVnKEYxMDEsIkNP Tk5FQ1QgZG9lc2MiLCIiLGMpOwotICAgIHdoaWxlICgxKSB7Ci0JaWYgKGMgPT0gZXNjYXBlKSB7 CQkvKiBTZW5kIGVzY2FwZSBjaGFyYWN0ZXIgKi8KLQkgICAgZCA9IGRvcGFyKChDSEFSKSBjKTsg dHRvYygoY2hhcikgZCk7IHJldHVybjsKLSAgICAJfSBlbHNlCQkJCS8qIE9yIGVsc2UgbG9vayBp dCB1cCBiZWxvdy4gKi8KLQkgICAgaWYgKGlzdXBwZXIoYykpIGMgPSB0b2xvd2VyKGMpOwotCi0J c3dpdGNoKGMpIHsKLQotCWNhc2UgJ2MnOgkJCS8qIEVzY2FwZSBiYWNrIHRvIHByb21wdCAqLwot CWNhc2UgJ1wwMyc6Ci0JICAgIGFjdGl2ZSA9IDA7IGNvbm9sKCJcclxuIik7IHJldHVybjsKLQot CWNhc2UgJ2InOgkJCS8qIFNlbmQgYSBCUkVBSyBzaWduYWwgKi8KLQljYXNlICdcMDInOgotCSAg ICB0dHNuZGIoKTsgcmV0dXJuOwotCi0jaWZkZWYgTkVUQ09OTgotCWNhc2UgJ2knOgkJCS8qIFNl bmQgSW50ZXJydXB0ICovCi0JY2FzZSAnXDAxMSc6Ci0jaWZkZWYgVENQU09DS0VUCi0jaWZuZGVm IElQCi0jZGVmaW5lIElQIDI0NAotI2VuZGlmIC8qIElQICovCi0JICAgIGlmIChuZXR3b3JrICYm IElTX1RFTE5FVCgpKSB7IC8qIFRFTE5FVCAqLwotCQl0ZW1wWzBdID0gKENIQVIpIElBQzsJLyog SSBBbSBhIENvbW1hbmQgKi8KLQkJdGVtcFsxXSA9IChDSEFSKSBJUDsJLyogSW50ZXJydXB0IFBy b2Nlc3MgKi8KLQkJdGVtcFsyXSA9IE5VTDsKLQkJdHRvbCgoQ0hBUiAqKXRlbXAsMik7Ci0JICAg IH0gZWxzZQotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2lmZGVmIFNVTlgyNQotCSAgICBpZiAo bmV0d29yayAmJiAobmV0dHlwZSA9PSBORVRfU1gyNSkpIHsKLQkJKFZPSUQpIHgyNWludHIoMCk7 CSAgICAgICAgICAgIC8qIFguMjUgaW50ZXJydXB0IHBhY2tldCAqLwotCQljb25vbCgiXHJcbiIp OwotCSAgICB9IGVsc2UKLSNlbmRpZiAvKiBTVU5YMjUgKi8KLQkgICAgICBjb25vYyhCRUwpOwot CSAgICByZXR1cm47Ci0KLSNpZmRlZiBUQ1BTT0NLRVQKLQljYXNlICdhJzoJCQkvKiAiQXJlIFlv dSBUaGVyZT8iICovCi0JY2FzZSAnXDAxJzoKLSNpZm5kZWYgQVlUCi0jZGVmaW5lIEFZVCAyNDYK LSNlbmRpZiAvKiBBWVQgKi8KLQkgICAgaWYgKG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHsKLQkJ dGVtcFswXSA9IChDSEFSKSBJQUM7CS8qIEkgQW0gYSBDb21tYW5kICovCi0JCXRlbXBbMV0gPSAo Q0hBUikgQVlUOwkvKiBBcmUgWW91IFRoZXJlPyAqLwotCQl0ZW1wWzJdID0gTlVMOwotCQl0dG9s KChDSEFSICopdGVtcCwyKTsKLQkgICAgfSBlbHNlIGNvbm9jKEJFTCk7Ci0JICAgIHJldHVybjsK LSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNpZmRlZiBD S19MQlJLCi0JY2FzZSAnbCc6CQkJLyogU2VuZCBhIExvbmcgQlJFQUsgc2lnbmFsICovCi0JICAg IHR0c25kbGIoKTsgcmV0dXJuOwotI2VuZGlmIC8qIENLX0xCUksgKi8KLQotCWNhc2UgJ3UnOgkJ CS8qIEhhbmd1cCAqLwotICAgICAvKgljYXNlICdcMDEwJzogKi8JCQkvKiBObywgdG9vIGRhbmdl cm91cyAqLwotI2lmZGVmIEFOWVgyNQotICAgICAgICAgICAgaWYgKG5ldHdvcmsgJiYgKG5ldHR5 cGUgPT0gTkVUX1NYMjUgfHwgbmV0dHlwZSA9PSBORVRfSVgyNSkpCi0JICAgICAgZG94MjVjbHIg PSAxOwotICAgICAgICAgICAgZWxzZQotI2VuZGlmIC8qIEFOWVgyNSAqLwotCSAgICBkb2hhbmd1 cCA9IDI7IGFjdGl2ZSA9IDA7IGNvbm9sKCJcclxuSGFuZ2luZyB1cCAiKTsgcmV0dXJuOwotCi0j aWZkZWYgQU5ZWDI1Ci0gICAgICAgIGNhc2UgJ3InOiAgICAgICAgICAgICAgICAgICAgICAgLyog UmVzZXQgdGhlIFguMjUgdmlydHVhbCBjaXJjdWl0ICovCi0gICAgICAgIGNhc2UgJ1wwMjInOgot ICAgICAgICAgICAgaWYgKG5ldHdvcmsgJiYgKG5ldHR5cGUgPT0gTkVUX1NYMjUgfHwgbmV0dHlw ZSA9PSBORVRfSVgyNSkpCi0JCShWT0lEKSB4MjVyZXNldCgwLDApOwotICAgICAgICAgICAgY29u b2woIlxyXG4iKTsKLQkgICAgcmV0dXJuOwotI2VuZGlmIC8qIEFOWVgyNSAqLwotCi0JY2FzZSAn cSc6CQkJLyogUXVpdCAqLwotCSAgICBkb2hhbmd1cCA9IDI7IHF1aXRub3cgPSAxOyBhY3RpdmUg PSAwOyBjb25vbCgiXHJcbiIpOyByZXR1cm47Ci0KLQljYXNlICdzJzoJCQkvKiBTdGF0dXMgKi8K LQkgICAgY29ub2xsKCIiKTsKLQkgICAgY29ub2xsKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0jaWZkZWYgTkVUQ01ECi0JICAgIGlmICh0 dHBpcGUpCi0JICAgICAgY2ttYWttc2codGVtcCxUTVBMRU4sIiBQaXBlOiBcIiIsdHRuYW1lLCJc IiIsTlVMTCk7Ci0JICAgIGVsc2UKLSNlbmRpZiAvKiBORVRDTUQgKi8KLQkgICAgICBja21ha21z Zyh0ZW1wLAotCQkgICAgICAgVE1QTEVOLAotCQkgICAgICAgIiAiLAotCQkgICAgICAgKG5ldHdv cmsgPyAiSG9zdCIgOiAiRGV2aWNlIiksCi0JCSAgICAgICAiOiAiLAotCQkgICAgICAgdHRuYW1l Ci0JCSAgICAgICApOwotCSAgICBjb25vbGwodGVtcCk7Ci0JICAgIGlmICghbmV0d29yayAmJiBz cGVlZCA+PSAwTCkgewotCQlzcHJpbnRmKHRlbXAsIlNwZWVkICVsZCIsIHNwZWVkKTsKLQkJY29u b2xsKHRlbXApOwotCSAgICB9Ci0JICAgIHNwcmludGYodGVtcCwiIFRlcm1pbmFsIGVjaG86ICVz IiwgZHVwbGV4ID8gImxvY2FsIiA6ICJyZW1vdGUiKTsKLQkgICAgY29ub2xsKHRlbXApOwotCSAg ICBzcHJpbnRmKHRlbXAsIiBUZXJtaW5hbCBieXRlc2l6ZTogJWQiLCAoY21hc2sgID09IDAxNzcp ID8gNyA6IDgpOwotCSAgICBjb25vbGwodGVtcCk7Ci0JICAgIHNwcmludGYodGVtcCwiIENvbW1h bmQgYnl0ZXNpemU6ICVkIiwgKGNtZG1zayA9PSAwMTc3KSA/IDcgOiA4ICk7Ci0JICAgIGNvbm9s bCh0ZW1wKTsKLSAgICAgICAgICAgIGlmIChod3Bhcml0eSkKLSAgICAgICAgICAgICAgc3ByaW50 Zih0ZW1wLCIgUGFyaXR5W2hhcmR3YXJlXTogJXMiLHBhcm5hbSgoY2hhcilod3Bhcml0eSkpOwot ICAgICAgICAgICAgZWxzZQkgICAgCi0gIAkgICAgICBzcHJpbnRmKHRlbXAsIiBQYXJpdHk6ICVz IiwgcGFybmFtKChjaGFyKXBhcml0eSkpOwotCSAgICBjb25vbGwodGVtcCk7Ci0JICAgIHNwcmlu dGYodGVtcCwiIEF1dG9kb3dubG9hZDogJXMiLCBhdXRvZGwgPyAib24iIDogIm9mZiIpOwotCSAg ICBjb25vbGwodGVtcCk7Ci0JICAgIGNrbWFrbXNnKHRlbXAsCQkvKiAod291bGQgbm90IGJlIHNh ZmUgZm9yIHNwcmludGYpICovCi0JCSAgICAgVE1QTEVOLAotCQkgICAgICIgU2Vzc2lvbiBsb2c6 ICIsCi0JCSAgICAgKnNlc2ZpbCA/IHNlc2ZpbCA6ICIobm9uZSkiLAotCQkgICAgIE5VTEwsCi0J CSAgICAgTlVMTAotCQkgICAgICk7Ci0JICAgIGNvbm9sbCh0ZW1wKTsKLSNpZm5kZWYgTk9TSE9X Ci0JICAgIGlmICghbmV0d29yaykgc2hvbWRtKCk7Ci0jZW5kaWYgLyogTk9TSE9XICovCi0jaWZk ZWYgQ0tMT0dESUFMCi0JICAgIHsKLQkJbG9uZyB6OwotCQl6ID0gZG9sb2dzaG93KDApOwotCQlp ZiAoeiA+IC0xTCkgewotCQkgICAgc3ByaW50Zih0ZW1wLCIgRWxhcHNlZCB0aW1lOiAlcyIsaGht bXNzKHopKTsKLQkJICAgIGNvbm9sbCh0ZW1wKTsKLQkJfQotCSAgICB9Ci0jZW5kaWYgLyogQ0tM T0dESUFMICovCi0JICAgIGNvbm9sbCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCSAgICByZXR1cm47Ci0KLQljYXNlICdoJzoJCQkvKiBI ZWxwICovCi0JY2FzZSAnPyc6CQkJLyogSGVscCAqLwotCSAgICBjID0gaGNvbm5lKCk7IGNvbnRp bnVlOwotCi0JY2FzZSAnMCc6CQkJLyogU2VuZCBhIG51bGwgKi8KLQkgICAgYyA9ICdcMCc7IGQg PSBkb3BhcigoQ0hBUikgYyk7IHR0b2MoKGNoYXIpIGQpOyByZXR1cm47Ci0KLQljYXNlICd6Jzog Y2FzZSAnXDAzMic6CQkvKiBTdXNwZW5kICovCi0jaWZuZGVmIE5PUFVTSAotCSAgICBpZiAoIW5v cHVzaCkKLQkgICAgICBzdHB0cmFwKDApOwotCSAgICBlbHNlCi0JICAgICAgY29ub2MoQkVMKTsK LSNlbHNlCi0JICAgIGNvbm9jKEJFTCk7Ci0jZW5kaWYgLyogTk9QVVNIICovCi0JICAgIHJldHVy bjsKLQotCWNhc2UgJ0AnOgkJCS8qIFN0YXJ0IGluZmVyaW9yIGNvbW1hbmQgcHJvY2Vzc29yICov Ci0JY2FzZSAnISc6Ci0jaWZuZGVmIE5PUFVTSAotCSAgICBpZiAoIW5vcHVzaCkgewotCQljb25y ZXMoKTsJCSAgICAgIC8qIFB1dCBjb25zb2xlIGJhY2sgdG8gbm9ybWFsICovCi0JCXpzaGNtZCgi Iik7CQkgICAgICAvKiBGb3JrIGEgc2hlbGwuICovCi0JCWlmIChjb25iaW4oKGNoYXIpZXNjYXBl KSA8IDApIHsKLQkJICAgIHByaW50ZigiRXJyb3IgcmVzdW1pbmcgQ09OTkVDVCBzZXNzaW9uXG4i KTsKLQkJICAgIGFjdGl2ZSA9IDA7Ci0JCX0KLQkgICAgfSBlbHNlIGNvbm9jKEJFTCk7Ci0jZWxz ZQotCSAgICBjb25vYyhCRUwpOwotI2VuZGlmIC8qIE5PUFVTSCAqLwotCSAgICByZXR1cm47Ci0K LQljYXNlIFNQOgkJCS8qIFNwYWNlLCBpZ25vcmUgKi8KLQkgICAgcmV0dXJuOwotCi0JZGVmYXVs dDoJCQkvKiBPdGhlciAqLwotCSAgICBpZiAoYyA9PSBDTURRKSB7CQkvKiBCYWNrc2xhc2ggZXNj YXBlICovCi0JCWludCB4OwotCQllY2JwID0gZWNidWY7Ci0JCSplY2JwKysgPSBjOwotCQl3aGls ZSAoKChjID0gKENPTkdLUygpICYgY21kbXNrKSkgIT0gJ1xyJykgJiYgKGMgIT0gJ1xuJykpCi0J CSAgKmVjYnArKyA9IGM7Ci0JCSplY2JwID0gTlVMOyBlY2JwID0gZWNidWY7Ci0JCXggPSB4eGVz YygmZWNicCk7CS8qIEludGVycHJldCBpdCAqLwotCQlpZiAoeCA+PSAwKSB7CQkvKiBObyBrZXkg bWFwcGluZyBoZXJlICovCi0JCSAgICBjID0gZG9wYXIoKENIQVIpIHgpOwotCQkgICAgdHRvYygo Y2hhcikgYyk7Ci0JCSAgICByZXR1cm47Ci0JCX0gZWxzZSB7CQkvKiBJbnZhbGlkIGJhY2tzbGFz aCBjb2RlLiAqLwotCQkgICAgY29ub2MoQkVMKTsKLQkJICAgIHJldHVybjsKLQkJfQotCSAgICB9 Ci0JICAgIGNvbm9jKEJFTCk7IHJldHVybjsgCS8qIEludmFsaWQgZXNjIGFyZywgYmVlcCAqLwot ICAgIAl9Ci0gICAgfQotfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KCmRpZmYgLS1naXQgYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWRpYS5jIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VkaWEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggNTg3YTBkMS4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrdWRpYS5jCisrKyAvZGV2L251bGwKQEAgLTEsODI0OSArMCwwIEBACi0j aW5jbHVkZSAiY2tjc3ltLmgiCi1jaGFyICpkaWFsdiA9ICJEaWFsIENvbW1hbmQsIDkuMC4xNjAs IDE2IE9jdCAyMDA5IjsKLQotLyogIEMgSyBVIEQgSSBBCSAtLSAgTW9kdWxlIGZvciBhdXRvbWF0 aWMgbW9kZW0gZGlhbGluZy4gKi8KLQotLyoKLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA5LAot ICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlv cmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5U WFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxl IGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLSovCi0KLS8qCi0gIEF1dGhvcnM6Ci0K LSAgT3JpZ2luYWwgKHZlcnNpb24gMSwgMTk4NSkgYXV0aG9yOiBIZXJtIEZpc2NoZXIsIEVuY2lu bywgQ0EuCi0gIENvbnRyaWJ1dGVkIHRvIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gMTk4NSBmb3Ig aW5jbHVzaW9uIGluIEMtS2VybWl0IDQuMC4KLSAgQXV0aG9yIGFuZCBtYWludGFpbmVyIHNpbmNl IDE5ODU6IEZyYW5rIGRhIENydXosIENvbHVtYmlhIFVuaXZlcnNpdHksCi0gIGZkY0Bjb2x1bWJp YS5lZHUuCi0KLSAgQ29udHJpYnV0aW9ucyBieSBtYW55IG90aGVycyB0aHJvdWdob3V0IHRoZSB5 ZWFycywgaW5jbHVkaW5nOiBKZWZmcmV5Ci0gIEFsdG1hbiwgTWFyayBCZXJyeW1hbiwgRmVybmFu ZG8gQ2FicmFsLCBKb2huIENobWllbGV3c2tpLCBKb2UgRG91cG5paywKLSAgUmljaGFyZCBIaWxs LCBMYXJyeSBKYWNvYnMsIEVyaWMgSm9uZXMsIFRvbSBLbG9vcywgQm9iIExhcnNvbiwgUGV0ZXIg TWF1emV5LAotICBKb2UgT3Jvc3QsIEtldmluIE8nR29ybWFuLCBLYWkgVXdlIFJvbW1lbCwgRGFu IFNjaHVsbG1hbiwgV2FycmVuIFR1Y2tlciwgYW5kCi0gIG1hbnkgb3RoZXJzLgotKi8KLQotLyoK LSAgRW50cnkgcG9pbnRzOgotICAgIGNrZGlhbChjaGFyICogbnVtYmVyKSAgIERpYWwgYSBudW1i ZXIgb3IgYW5zd2VyIGEgY2FsbAotICAgIGRpYWxodXAoKSAgICAgICAgICAgICAgIEhhbmcgdXAg YSBkaWFsZWQgY29ubmVjdGlvbgotICAgIG1kbWh1cCgpICAgICAgICAgICAgICAgIFVzZSBtb2Rl bSBjb21tYW5kcyB0byBoYW5nIHVwCi0KLSAgQWxsIG90aGVyIHJvdXRpbmVzIGFyZSBzdGF0aWMu Ci0gIERvbid0IGNhbGwgZGlhbGh1cCgpIG9yIG1kbWh1cCgpIHdpdGhvdXQgZmlyc3QgY2FsbGlu ZyBja2RpYWwoKS4KLSovCi0KLS8qCi0gIFRoaXMgbW9kdWxlIGNhbGxzIGV4dGVybmFsbHkgZGVm aW5lZCBzeXN0ZW0tZGVwZW5kZW50IGZ1bmN0aW9ucyBmb3IKLSAgY29tbXVuaWNhdGlvbnMgaS9v LCBhcyBkZXNjcmliZWQgaW4gQ0tDUExNLkRPQywgdGhlIEMtS2VybWl0IFByb2dyYW0gTG9naWMK LSAgTWFudWFsLCBhbmQgdGh1cyBzaG91bGQgYmUgcG9ydGFibGUgdG8gYWxsIHN5c3RlbXMgdGhh dCBpbXBsZW1lbnQgdGhvc2UKLSAgZnVuY3Rpb25zLCBhbmQgd2hlcmUgYWxhcm0oKSBhbmQgc2ln bmFsKCkgd29yay4KLQotICBIT1cgVE8gQUREIFNVUFBPUlQgRk9SIEFOT1RIRVIgTU9ERU06Ci0K LSAgMS4gSW4gY2t1dXNyLmgsIGRlZmluZSBhIG1vZGVtLXR5cGUgbnVtYmVyIHN5bWJvbCAobl9Y WFgpIGZvciB0aGUgbmV3IG1vZGVtLAotICAgICB0aGUgbmV4dCBoaWdoZXN0IG9uZS4KLQotICAy LiBJbiBja3V1c3IuaCwgYWRqdXN0IE1BWF9NRE0gdG8gdGhlIG5ldyBudW1iZXIgb2YgbW9kZW0g dHlwZXMuCi0KLVRoZSByZW1haW5pbmcgc3RlcHMgYXJlIGluIHRoaXMgbW9kdWxlOgotCi0gIDMu IENyZWF0ZSBhIE1ETUlORiBzdHJ1Y3R1cmUgZm9yIGl0LiAgTk9URTogVGhlIHdha2Vfc3RyIHNo b3VsZCBpbmNsdWRlCi0gICAgIGFsbCBpbnZhcmlhbnQgc2V0dXAgaW5mbywgZS5nLiBlbmFibGUg cmVzdWx0IGNvZGVzLCBCUkVBSyB0cmFuc3BhcmVuY3ksCi0gICAgIG1vZHVsYXRpb24gbmVnb3Rp YXRpb24sIGV0Yy4gIFNlZSBja2NrZXIuaCBmb3IgTURNSU5GIHN0cnVjdCBkZWZpbml0aW9uLgot Ci0gIDQuIEFkZCB0aGUgYWRkcmVzcyBvZiB0aGUgTURNSU5GIHN0cnVjdHVyZSB0byB0aGUgbW9k ZW1wW10gYXJyYXksCi0gICAgIGFjY29yZGluZyB0byB0aGUgbnVtZXJpY2FsIHZhbHVlIG9mIHRo ZSBtb2RlbS10eXBlIG51bWJlci4KLQotICA1LiBBZGQgdGhlIHVzZXItdmlzaWJsZSAoU0VUIE1P REVNKSBuYW1lIGFuZCBjb3JyZXNwb25kaW5nIG1vZGVtIG51bWJlcgotICAgICB0byB0aGUgbWRt dGFiW10gYXJyYXksIGluIGFscGhhYmV0aWNhbCBvcmRlciBieSBtb2RlbS1uYW1lIHN0cmluZy4K LQotICA2LiBJZiB0aGlzIGZhbGxzIGludG8gYSBjbGFzcyBsaWtlIGlzX3JvY2t3ZWxsLCBpc19z dXByYSwgZXRjLCBhZGQgdGhlIG5ldwotICAgICBvbmUgdG8gdGhlIGRlZmluaXRpb24gb2YgdGhl IGNsYXNzLgotCi0gIDcuIEFkanVzdCB0aGUgZ2V0aHJuKCkgcm91dGluZSB0byBhY2NvdW50IGZv ciBhbnkgc3BlY2lhbCBudW1lcmljIHJlc3VsdAotICAgICBjb2RlcyAoaWYgaXQncyBhIEhheWVz IGNvbXBhdGlibGUgbW9kZW0pLgotCi0gIDguIFJlYWQgdGhyb3VnaCB0aGUgY29kZSBhbmQgYWRk IGFueSBtb2RlbS1zcGVjaWZpYyBzZWN0aW9ucyBhcyBuZWNlc3NhcnkuCi0gICAgIEZvciBtb3N0 IG1vZGVybiBIYXllcy1jb21wYXRpYmxlIG1vZGVtcywgbm8gc3BlY2lmaWMgY29kZSB3aWxsIGJl Ci0gICAgIG5lZWRlZC4KLQotICBOT1RFOiBUaGUgTUlOSURJQUwgc3ltYm9sIGlzIHVzZWQgdG8g YnVpbGQgdGhpcyBtb2R1bGUgdG8gaW5jbHVkZSBzdXBwb3J0Ci0gIGZvciBvbmx5IGEgbWluaW11 bSBudW1iZXIgb2Ygc3RhbmRhcmQgYW5kL29yIGdlbmVyYWxseSB1c2VmdWwgbW9kZW0gdHlwZXMs Ci0gIG5hbWVseSBIYXllcyAxMjAwIGFuZCAyNDAwLCBJVFUtVCAoQ0NJVFQpIFYuMjViaXMgYW5k IFYuMjV0ZXIgKFYuMjUwKSwKLSAgR2VuZXJpYy1IaWdoLVNwZWVkLCAiVW5rbm93biIsIGFuZCBO b25lLiAgV2hlbiBhZGRpbmcgc3VwcG9ydCBmb3IgYSBuZXcKLSAgbW9kZW0gdHlwZSwga2VlcCBp dCBvdXRzaWRlIG9mIHRoZSBNSU5JRElBTCBzZWN0aW9ucyB1bmxlc3MgaXQgZGVzZXJ2ZXMgdG8K LSAgYmUgaW4gaXQuCi0qLwotCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0jaWZuZGVmIE5PTE9DQUwK LSNpZm5kZWYgTk9ESUFMCi0jaWZuZGVmIE5PSUNQCi0KLSNpZm5kZWYgQ0tfQVREVAotI2RlZmlu ZSBDS19BVERUCi0jZW5kaWYgLyogQ0tfQVREVCAqLwotCi0jaWZuZGVmIE5PT0xETU9ERU1TICAg ICAgICAvKiBVbmxlc3MgaW5zdHJ1Y3RlZCBvdGhlcndpc2UsICovCi0jZGVmaW5lIE9MRE1PREVN UyAgICAgICAgICAvKiBrZWVwIHN1cHBvcnQgZm9yIG9sZCBtb2RlbXMuICovCi0jZW5kaWYgLyog Tk9PTERNT0RFTVMgKi8KLQotI2lmbmRlZiBNX09MRAkJICAgLyogSGlkZSBvbGQgbW9kZW0ga2V5 d29yZHMgaW4gU0VUIE1PREVNIHRhYmxlLiAqLwotI2RlZmluZSBNX09MRCAwCQkgICAvKiBEZWZp bmUgYXMgQ01fSU5WIHRvIG1ha2UgdGhlbSBpbnZpc2libGUuICovCi0jZW5kaWYgLyogTV9PTEQg Ki8KLQotI2lmbmRlZiBNX0FMSUFTCi0jZGVmaW5lIE1fQUxJQVMgNjQKLSNlbmRpZiAvKiBNX0FM SUFTICovCi0KLSNpZm5kZWYgTUFDCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYgLyogTUFD ICovCi0jaW5jbHVkZSAiY2tjYXNjLmgiCi0jaW5jbHVkZSAiY2tja2VyLmgiCi0jaW5jbHVkZSAi Y2t1Y21kLmgiCi0jaW5jbHVkZSAiY2tjbmV0LmgiCi0jaW5jbHVkZSAiY2t1dXNyLmgiCi0KLSNp ZmRlZiBPUzJPTkxZCi0jZGVmaW5lIElOQ0xfVklPCQkJLyogTmVlZGVkIGZvciBja29jb24uaCAq LwotI2luY2x1ZGUgPG9zMi5oPgotI3VuZGVmIENPTU1FTlQKLSNpbmNsdWRlICJja29jb24uaCIK LSNlbmRpZiAvKiBPUzJPTkxZICovCi0KLSNpZmRlZiBOVAotI2luY2x1ZGUgPHdpbmRvd3MuaD4K LSNpbmNsdWRlIDx0YXBpLmg+Ci0jaW5jbHVkZSAiY2tud2luLmgiCi0jaW5jbHVkZSAiY2tudGFw LmgiCi0jZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBPUzIKLSNpbmNsdWRlICJja293aW4uaCIKLSNl bmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBaSUxPRwotI2lmZGVmIE5UCi0jaW5jbHVkZSA8c2V0 am1wZXguaD4KLSNlbHNlIC8qIE5UICovCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0jZW5kaWYgLyog TlQgKi8KLSNlbHNlCi0jaW5jbHVkZSA8c2V0cmV0Lmg+Ci0jZW5kaWYgLyogWklMT0cgKi8KLQot I2luY2x1ZGUgImNrY3NpZy5oIiAgICAgICAgLyogQy1LZXJtaXQgc2lnbmFsIHByb2Nlc3Npbmcg Ki8KLQotI2lmZGVmIE1BQwotI2RlZmluZSBzaWduYWwgbXNpZ25hbAotI2RlZmluZSBTSUdUWVAg bG9uZwotI2RlZmluZSBhbGFybSBtYWxhcm0KLSNkZWZpbmUgU0lHX0lHTiAwCi0jZGVmaW5lIFNJ R0FMUk0gMQotI2RlZmluZSBTSUdJTlQgIDIKLVNJR1RZUCAoKm1zaWduYWwoaW50IHR5cGUsIFNJ R1RZUCAoKmZ1bmMpKGludCkpKShpbnQpOwotI2VuZGlmIC8qIE1BQyAqLwotCi0jaWZkZWYgQU1J R0EKLSNkZWZpbmUgc2lnbmFsIGFzaWduYWwKLSNkZWZpbmUgYWxhcm0gYWFsYXJtCi0jZGVmaW5l IFNJR0FMUk0gKF9OVU1TSUcrMSkKLSNkZWZpbmUgU0lHVFlQIHZvaWQKLVNJR1RZUCAoKmFzaWdu YWwoaW50IHR5cGUsIFNJR1RZUCAoKmZ1bmMpKGludCkpKShpbnQpOwotdW5zaWduZWQgYWFsYXJt KHVuc2lnbmVkKTsKLSNlbmRpZiAvKiBBTUlHQSAqLwotCi0jaWZkZWYgU1RSQVRVUwotLyoKLSAg Vk9TIGRvZXNuJ3QgaGF2ZSBhbGFybSgpLCBidXQgaXQgZG9lcyBoYXZlIHNvbWUgdGhpbmdzIHdl IGNhbiB3b3JrIHdpdGguCi0gIEhvd2V2ZXIsIHdlIGhhdmUgdG8gY2F0Y2ggYWxsIHRoZSBzaWdu YWxzIGluIG9uZSBwbGFjZSB0byBkbyB0aGlzLCBzbwotICB3ZSBpbnRlcmNlcHQgdGhlIHNpZ25h bCgpIHJvdXRpbmUgYW5kIGNhbGwgaXQgZnJvbSBvdXIgb3duIHJlcGxhY2VtZW50LgotKi8KLSNk ZWZpbmUgc2lnbmFsIHZzaWduYWwKLSNkZWZpbmUgYWxhcm0gdmFsYXJtCi1TSUdUWVAgKCp2c2ln bmFsKGludCB0eXBlLCBTSUdUWVAgKCpmdW5jKShpbnQpKSkoaW50KTsKLWludCB2YWxhcm0oaW50 IGludGVydmFsKTsKLSNpZmRlZiBwdXRjaGFyCi0jdW5kZWYgcHV0Y2hhcgotI2VuZGlmIC8qIHB1 dGNoYXIgKi8KLSNkZWZpbmUgcHV0Y2hhcih4KSBjb25vYyh4KQotI2lmZGVmIGdldGNoYXIKLSN1 bmRlZiBnZXRjaGFyCi0jZW5kaWYgLyogZ2V0Y2hhciAqLwotI2RlZmluZSBnZXRjaGFyKHgpIGNv bmluYygwKQotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLQotI2lmZGVmIE9TMgotI2lmZGVmIHB1dGNo YXIKLSN1bmRlZiBwdXRjaGFyCi0jZW5kaWYgLyogcHV0Y2hhciAqLwotI2RlZmluZSBwdXRjaGFy KHgpIGNvbm9jKHgpCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9ISU5UUwotZXh0ZXJu IGludCBoaW50czsKLSNlbmRpZiAvKiBOT0hJTlRTICovCi0KLSNpZmRlZiBDS19UQVBJCi1leHRl cm4gaW50IHR0dGFwaTsKLWV4dGVybiBpbnQgdGFwaXBhc3M7Ci0jZW5kaWYgLyogQ0tfVEFQSSAq LwotCi0jaWZkZWYgQ0tMT0dESUFMCi1leHRlcm4gaW50IGRpYWxvZzsKLSNlbmRpZiAvKiBDS0xP R0RJQUwgKi8KLQotY2hhciAqIGRpYWxtc2dbXSA9IHsJCQkvKiBESUFMIHN0YXR1cyBzdHJpbmdz ICovCi0KLSAgICAvKiBLZXllZCB0byBudW1iZXJzIGRlZmluZWQgaW4gY2tja2VyLmggLS0ga2Vl cCBpbiBzeW5jISAqLwotCi0gICAgIkRJQUwgc3VjY2VlZGVkIiwJCQkgICAgLyogIDAgRElBX09L ICovCi0gICAgIk1vZGVtIHR5cGUgbm90IHNwZWNpZmllZCIsCQkgICAgLyogIDEgRElBX05PTU8g Ki8KLSAgICAiQ29tbXVuaWNhdGlvbiBkZXZpY2Ugbm90IHNwZWNpZmllZCIsICAgLyogIDIgRElB X05PTEkgKi8KLSAgICAiQ29tbXVuaWNhdGlvbiBkZXZpY2UgY2FuJ3QgYmUgb3BlbmVkIiwgLyog IDMgRElBX09QRU4gKi8KLSAgICAiU3BlZWQgbm90IHNwZWNpZmllZCIsCQkgICAgLyogIDQgRElB X05PU1AgKi8KLSAgICAiUHJlLURJQUwgaGFuZ3VwIGZhaWxlZCIsCQkgICAgLyogIDUgRElBX0hB TkcgKi8KLSAgICAiSW50ZXJuYWwgZXJyb3IiLAkJCSAgICAvKiAgNiBESUFfSUUgICAqLwotICAg ICJEZXZpY2UgaW5wdXQvb3V0cHV0IGVycm9yIiwJICAgIC8qICA3IERJQV9JTyAgICovCi0gICAg IkRJQUwgVElNRU9VVCBleHBpcmVkIiwJCSAgICAvKiAgOCBESUFfVElNTyAqLwotICAgICJJbnRl cnJ1cHRlZCBieSB1c2VyIiwJCSAgICAvKiAgOSBESUFfSU5UUiAqLwotICAgICJNb2RlbSBub3Qg cmVhZHkiLAkJCSAgICAvKiAxMCBESUFfTlJEWSAqLwotICAgICJQYXJ0aWFsIGRpYWwgT0siLAkJ CSAgICAvKiAxMSBESUFfUEFSVCAqLwotICAgICJEaWFsIGRpcmVjdG9yeSBsb29rdXAgZXJyb3Ii LAkgICAgLyogMTIgRElBX0RJUiAgKi8KLSAgICAiSGFuZ3VwIE9LIiwJCQkgICAgLyogMTMgRElB X0hVUCAgKi8KLSAgICBOVUxMLAkJCQkgICAgLyogMTQgKHVuZGVmKSAgKi8KLSAgICBOVUxMLAkJ CQkgICAgLyogMTUgKHVuZGVmKSAgKi8KLSAgICBOVUxMLAkJCQkgICAgLyogMTYgKHVuZGVmKSAg Ki8KLSAgICBOVUxMLAkJCQkgICAgLyogMTcgKHVuZGVmKSAgKi8KLSAgICBOVUxMLAkJCQkgICAg LyogMTggKHVuZGVmKSAgKi8KLSAgICAiTm8gcmVzcG9uc2UgZnJvbSBtb2RlbSIsCQkgICAgLyog MTkgRElBX05SU1AgKi8KLSAgICAiTW9kZW0gY29tbWFuZCBlcnJvciIsCQkgICAgLyogMjAgRElB X0VSUiAgKi8KLSAgICAiRmFpbHVyZSB0byBpbml0aWFsaXplIG1vZGVtIiwJICAgIC8qIDIxIERJ QV9OT0lOICovCi0gICAgIlBob25lIGJ1c3kiLAkJCSAgICAvKiAyMiBESUFfQlVTWSAqLwotICAg ICJObyBjYXJyaWVyIiwJCQkgICAgLyogMjMgRElBX05PQ0EgKi8KLSAgICAiTm8gZGlhbHRvbmUi LAkJCSAgICAvKiAyNCBESUFfTk9EVCAqLwotICAgICJJbmNvbWluZyBjYWxsIiwJCQkgICAgLyog MjUgRElBX1JJTkcgKi8KLSAgICAiTm8gYW5zd2VyIiwJCQkgICAgLyogMjYgRElBX05PQU4gKi8K LSAgICAiRGlzY29ubmVjdGVkIiwJCQkgICAgLyogMjcgRElBX0RJU0MgKi8KLSAgICAiQW5zd2Vy ZWQgYnkgdm9pY2UiLAkJICAgIC8qIDI4IERJQV9WT0lDICovCi0gICAgIkFjY2VzcyBkZW5pZWQg LyBmb3JiaWRkZW4gY2FsbCIsCSAgICAvKiAyOSBESUFfTk9BQyAqLwotICAgICJCbGFja2xpc3Rl ZCIsCQkJICAgIC8qIDMwIERJQV9CTENLICovCi0gICAgIkRlbGF5ZWQiLCAgICAJCQkgICAgLyog MzEgRElBX0RFTEEgKi8KLSAgICAiRmF4IGNvbm5lY3Rpb24iLAkJCSAgICAvKiAzMiBESUFfRkFY ICAqLwotICAgICJEaWdpdGFsIGxpbmUiLAkJCSAgICAvKiAzMyBESUFfRElHSSAqLwotICAgICJU QVBJIGRpYWxpbmcgZmFpbHVyZSIsCSAgICAgICAgICAgIC8qIDM0IERJQV9UQVBJICovCi0gICAg TlVMTAkJCQkgICAgLyogMzQgKi8KLX07Ci0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgTk9TUEwK LXN0YXRpYwotI2VuZGlmIC8qIE5PU1BMICovCi1jaGFyIG1vZGVtbXNnWzEyOF0gPSB7IE5VTCwg TlVMIH07CS8qIERJQUwgcmVzcG9uc2UgZnJvbSBtb2RlbSAqLwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLQotI2lmZGVmIE5UU0lHCi1leHRlcm4gaW50IFRsc0luZGV4OwotI2VuZGlmIC8qIE5UU0lH ICovCi0KLWludCBtZG10eXAgPSBuX0dFTkVSSUM7CQkJLyogRGVmYXVsdCBtb2RlbSB0eXBlICov Ci1pbnQgbWRtc2V0ID0gMDsJCQkJLyogVXNlciBleHBsaWNpdGx5IHNldCBhIG1vZGVtIHR5cGUg Ki8KLQotaW50CQkJCQkvKiBTRVQgRElBTCBwYXJhbWV0ZXJzICovCi0gIGRpYWxobmcgPSAxLAkJ CQkvKiBESUFMIEhBTkdVUCwgZGVmYXVsdCBpcyBPTiAqLwotICBkaWFsZHB5ID0gMCwJCQkJLyog RElBTCBESVNQTEFZLCBkZWZhdWx0IGlzIE9GRiAqLwotICBtZG1zcGQgID0gMCwJCQkJLyogRElB TCBTUEVFRC1NQVRDSElORyAoMCA9IE9GRikgKi8KLSAgbWRtc3BrICA9IDEsCQkJCS8qIE1PREVN IFNQRUFLRVIgKi8KLSAgbWRtdm9sICA9IDIsCQkJCS8qIE1PREVNIFZPTFVNRSAqLwotICBkaWFs dG1vID0gMCwJCQkJLyogRElBTCBUSU1FT1VUICovCi0gIGRpYWxhdG1vID0gLTEsCQkJLyogQU5T V0VSIFRJTUVPVVQgKi8KLSAgZGlhbGtzcCA9IDAsCQkJCS8qIERJQUwgS0VSTUlULVNQT09GLCAw ID0gT0ZGICovCi0gIGRpYWxpZHQgPSAwLAkJCQkvKiBESUFMIElHTk9SRS1ESUFMVE9ORSAqLwot I2lmbmRlZiBDS19SVFNDVFMKLSAgLyogSWYgd2UgY2FuJ3QgZG8gUlRTL0NUUyB0aGVuIHRoZXJl J3Mgbm8gZmxvdyBjb250cm9sIGF0IGZpcnN0LiAgKi8KLSAgLyogU28gd2UgbWlnaHQgZWFzaWx5 IGxvc2UgdGhlIGVjaG8gdG8gdGhlIGluaXQgc3RyaW5nIGFuZCB0aGUgT0sgKi8KLSAgLyogYW5k IHRoZW4gZ2l2ZSAiTm8gcmVzcG9uc2UgZnJvbSBtb2RlbSIgZXJyb3JzLiAqLwotICBkaWFscGFj ZSA9IDE1MCwJCQkvKiBESUFMIFBBQ0lORyAqLwotI2Vsc2UKLSAgZGlhbHBhY2UgPSAtMSwKLSNl bmRpZiAvKiBDS19SVFNDVFMgKi8KLQotICAvKiAwID0gUlMyMzIgKGRyb3AgRFRSKTsgMSA9IE1P REVNLUNPTU1BTkQgKGUuZy4gPHNlYz4rKys8c2VjPkFUSDApICovCi0gIGRpYWxtaHUgPSBERUZN RE1IVVA7CQkJLyogTU9ERU0gSEFOR1VQLU1FVEhPRCAqLwotCi1pbnQKLSAgZGlhbGVjID0gMSwJ CQkJLyogRElBTCBFUlJPUi1DT1JSRUNUSU9OICovCi0gIGRpYWxkYyA9IDEsCQkJCS8qIERJQUwg Q09NUFJFU1NJT04gICovCi0jaWZkZWYgVk1TCi0gIC8qIFZNUyBjYW4gb25seSB1c2UgWG9uL1hv ZmYgKi8KLSAgZGlhbGZjID0gRkxPX1hPTlgsCQkJLyogRElBTCBGTE9XLUNPTlRST0wgKi8KLSNl bHNlCi0gIGRpYWxmYyA9IEZMT19BVVRPLAotI2VuZGlmIC8qIFZNUyAqLwotICBkaWFsbXRoID0g WFlETV9ELAkJCS8qIERJQUwgTUVUSE9EIChUb25lLCBQdWxzZSwgRGVmYWx0KSAqLwotICBkaWFs bWF1dG8gPSAxLAkJCS8qIERJQUwgTUVUSE9EIGlzIEFVVE8gKi8KLSAgZGlhbGVzYyA9IDA7CQkJ CS8qIERJQUwgRVNDQVBFICovCi0KLWludCB0ZWxlcGhvbnkgPSAwOwkJCS8qIENvbW1hbmQtbGlu ZSAnLVQnIG9wdGlvbiAqLwotCi1sb25nIGRpYWxtYXggPSAwTCwJCQkvKiBNb2RlbSdzIG1heCBp bnRlcmZhY2Ugc3BlZWQgKi8KLSAgZGlhbGNhcGFzICA9IDBMOwkJCS8qIE1vZGVtJ3MgY2FwYWJp bGl0aWVzICovCi0KLWludCBkaWFsc3RhID0gRElBX1VOSzsJCQkvKiBEZXRhaWxlZCByZXR1cm4g Y29kZSAoY2t1dXNyLmgpICovCi0KLSNpZmRlZiBDT01NRU5UCi1pbnQgYW5zX2NpZCA9IDA7CQkJ LyogU0VUIEFOU1dFUiBwYXJhbWV0ZXJzICovCi1pbnQgYW5zX3JpbmdzID0gMDsJCQkvKiAobm90 IHVzZWQgeWV0Li4uKSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotaW50IGlzX3JvY2t3ZWxs ID0gMDsKLWludCBpc19tb3Rvcm9sYSA9IDA7Ci1pbnQgaXNfc3VwcmEgPSAwOwotaW50IGlzX2hh eWVzaGlzcGQgPSAwOwotCi0vKiBEaWFsaW5nIGRpcmVjdG9yeSBsaXN0ICovCi0KLWNoYXIgKmRp YWxkaXJbTUFYRERJUl07CQkJLyogRElBTCBESVJFQ1RPUlkgZmlsZW5hbWUgYXJyYXkgKi8KLWlu dCAgIG5kaWFsZGlyID0gMDsJCQkvKiBIb3cgbWFueSBkaWFsIGRpcmVjdG9yaWVzICovCi0KLS8q IFVzZXIgb3ZlcnJpZGVzIGZvciBidWlsdC1pbiBtb2RlbSBjb21tYW5kcyAqLwotCi1jaGFyICpk aWFsaW5pID0gTlVMTDsJCQkvKiBNT0RFTSBJTklULVNUUklORyBub25lICovCi1jaGFyICpkaWFs bXN0ciA9IE5VTEw7CQkJLyogTU9ERU0gRElBTE1PREUtU1RSSU5HICovCi1jaGFyICpkaWFsbXBy bXQgPSBOVUxMOwkJCS8qIE1PREVNIERJQUxNT0RFLVBST01QVCAqLwotY2hhciAqZGlhbGNtZCA9 IE5VTEw7CQkJLyogTU9ERU0gRElBTC1DT01NQU5ELCBkZWZhdWx0IG5vbmUgKi8KLWNoYXIgKmRp YWxuYW1lICA9IE5VTEw7CQkJLyogRGVzY3JpcHRpdmUgbmFtZSBmb3IgbW9kZW0gKi8KLWNoYXIg KmRpYWxkY29uICA9IE5VTEw7CQkJLyogREMgT04gY29tbWFuZCAqLwotY2hhciAqZGlhbGRjb2Zm ID0gTlVMTDsJCQkvKiBEQyBPRkYgY29tbWFuZCAqLwotY2hhciAqZGlhbGVjb24gID0gTlVMTDsJ CQkvKiBFQyBPTiBjb21tYW5kICovCi1jaGFyICpkaWFsZWNvZmYgPSBOVUxMOwkJCS8qIEVDIE9G RiBjb21tYW5kICovCi1jaGFyICpkaWFsYWFvbiAgPSBOVUxMOwkJCS8qIEF1dG9hbnN3ZXIgT04g Y29tbWFuZCAqLwotY2hhciAqZGlhbGFhb2ZmID0gTlVMTDsJCQkvKiBBdXRvYW5zd2VyIE9GRiBj b21tYW5kICovCi1jaGFyICpkaWFsaGNtZCAgPSBOVUxMOwkJCS8qIEhhbmd1cCBjb21tYW5kICov Ci1jaGFyICpkaWFsaHdmYyAgPSBOVUxMOwkJCS8qIEhhcmR3YXJlIGZsb3cgY29udHJvbCBjb21t YW5kICovCi1jaGFyICpkaWFsc3dmYyAgPSBOVUxMOwkJCS8qIChMb2NhbCkgc29mdHdhcmUgZi5j LiBjb21tYW5kICovCi1jaGFyICpkaWFsbm9mYyAgPSBOVUxMOwkJCS8qIE5vIChMb2NhbCkgZmxv dyBjb250cm9sIGNvbW1hbmQgKi8KLWNoYXIgKmRpYWx0b25lICA9IE5VTEw7CQkJLyogQ29tbWFu ZCB0byBmb3JjZSB0b25lIGRpYWxpbmcgKi8KLWNoYXIgKmRpYWxwdWxzZSA9IE5VTEw7CQkJLyog IC4udG8gZm9yY2UgcHVsc2UgZGlhbGluZyAqLwotY2hhciAqZGlhbHgzICAgID0gTlVMTDsJCQkv KiBJZ25vcmUgZGlhbHRvbmUgKi8KLWNoYXIgKm1kbW5hbWUgICA9IE5VTEw7Ci1jaGFyICpkaWFs c3BvbiAgPSBOVUxMOwkJCS8qIFNwZWFrZXIgT24gY29tbWFuZCAqLwotY2hhciAqZGlhbHNwb2Zm ID0gTlVMTDsJCQkvKiBTcGVha2VyIE9mZiBjb21tYW5kICovCi1jaGFyICpkaWFsdm9sMSAgPSBO VUxMOwkJCS8qIFZvbHVtZSBMb3cgY29tbWFuZCAqLwotY2hhciAqZGlhbHZvbDIgID0gTlVMTDsJ CQkvKiBWb2x1bWUgTWVkaXVtIGNvbW1hbmQgKi8KLWNoYXIgKmRpYWx2b2wzICA9IE5VTEw7CQkJ LyogVm9sdW1lIEhpZ2ggY29tbWFuZCAqLwotY2hhciAqZGlhbGluaTIgID0gTlVMTDsJCQkvKiBT ZWNvbmQgaW5pdCBzdHJpbmcgKi8KLQotLyogUGhvbmUgbnVtYmVyIG9wdGlvbnMgKi8KLQotY2hh ciAqZGlhbG5wciA9IE5VTEw7CQkJLyogRElBTCBQUkVGSVgsIGRpdHRvICovCi1jaGFyICpkaWFs bGFjID0gTlVMTDsJCQkvKiBESUFMIExPQ0FMLUFSRUEtQ09ERSwgZGl0dG8gKi8KLWNoYXIgKmRp YWxsY2MgPSBOVUxMOwkJCS8qIERJQUwgTE9DQUwtQ09VTlRSWS1DT0RFLCBkaXR0byAqLwotY2hh ciAqZGlhbGl4cCA9IE5VTEw7CQkJLyogRElBTCBJTlRMLVBSRUZJWCAqLwotY2hhciAqZGlhbGl4 cyA9IE5VTEw7CQkJLyogRElBTCBJTlRMLVNVRkZJWCAqLwotY2hhciAqZGlhbGxkcCA9IE5VTEw7 CQkJLyogRElBTCBMRC1QUkVGSVggKi8KLWNoYXIgKmRpYWxsZHMgPSBOVUxMOwkJCS8qIERJQUwg TEQtU1VGRklYICovCi1jaGFyICpkaWFsbGNwID0gTlVMTDsJCQkvKiBESUFMIExPQ0FMLVBSRUZJ WCAqLwotY2hhciAqZGlhbGxjcyA9IE5VTEw7CQkJLyogRElBTCBMT0NBTC1TVUZGSVggKi8KLWNo YXIgKmRpYWxweGkgPSBOVUxMOwkJCS8qIERJQUwgUEJYLUlOVEVSTkFMLVBSRUZJWCAqLwotY2hh ciAqZGlhbHB4byA9IE5VTEw7CQkJLyogRElBTCBQQlgtT1VUU0lERS1QUkVGSVggKi8KLWNoYXIg KmRpYWxzZnggPSBOVUxMOwkJCS8qIERJQUwgU1VGRklYICovCi1jaGFyICpkaWFsdGZwID0gTlVM TDsJCQkvKiBESUFMIFRPTEwtRlJFRS1QUkVGSVggKi8KLQotY2hhciAqY2FsbGlkX2RhdGUgPSBO VUxMOwkJLyogQ2FsbGVyIElEIHN0cmluZ3MgKi8KLWNoYXIgKmNhbGxpZF90aW1lID0gTlVMTDsK LWNoYXIgKmNhbGxpZF9uYW1lID0gTlVMTDsKLWNoYXIgKmNhbGxpZF9ubWJyID0gTlVMTDsKLWNo YXIgKmNhbGxpZF9tZXNnID0gTlVMTDsKLQotZXh0ZXJuIGNoYXIgKiBkX25hbWU7Ci1leHRlcm4g Y2hhciAqIGRpYWx0ZmNbXTsJCS8qIERJQUwgVE9MTC1GUkVFLUFSRUEtQ09ERSAqLwotZXh0ZXJu IGNoYXIgKiBkaWFscHh4W107CQkvKiBESUFMIFBCWC1FWENIQU5HRSAqLwotZXh0ZXJuIGludCBu dG9sbGZyZWU7Ci1leHRlcm4gaW50IG5kaWFscHh4OwotCi1leHRlcm4gY2hhciAqIGRpYWxwdWNj W107CQkvKiBESUFMIFB1bHNlIGNvdW50cmllcyAqLwotZXh0ZXJuIGludCBuZGlhbHB1Y2M7Ci1l eHRlcm4gY2hhciAqIGRpYWx0b2NjW107CQkvKiBESUFMIFRvbmUgY291bnRyaWVzICovCi1leHRl cm4gaW50IG5kaWFsdG9jYzsKLQotY2hhciAqZGlhbG1hYyAgID0gTlVMTDsJCQkvKiBESUFMIG1h Y3JvICovCi0KLS8qIENvdW50cmllcyB3aGVyZSBwdWxzZSBkaWFsaW5nIG11c3QgYmUgdXNlZCAo dG9uZSBpcyBub3QgYXZhaWxhYmxlKSAqLwotc3RhdGljIGNoYXIgKiBwdWxzZWNjW10gPSB7IE5V TEwgfTsJLyogKFVua25vd24gYXQgcHJlc2VudCkgKi8KLQotLyogQ291bnRyaWVzIHdoZXJlIHRv bmUgZGlhbGluZyBtYXkgc2FmZWx5IGJlIHRoZSBkZWZhdWx0LiAqLwotLyogIisiIG1hcmtzIGNv dW50cmllcyB3aGVyZSBwdWxzZSBpcyBhbHNvIGFsbG93ZWQuICovCi0vKiBCb3RoIFB1bHNlIGFu ZCBUb25lIGFyZSBhbGxvd2VkIGluIEF1c3RyaWEgJiBTd2l0emVybGFuZCBidXQgaXQgaXMgbm90 ICovCi0vKiB5ZXQga25vd24gaWYgVG9uZSBpcyB1bml2ZXJzYWxseSBpbiB0aG9zZSBjb3VudHJp ZXMuICovCi1zdGF0aWMgY2hhciAqIHRvbmVjY1tdID0gewotICAgICIxIiwJCQkJLyogKyBOb3J0 aCBBbWVyaWNhbiBOdW1iZXJpbmcgUGxhbiAqLwotICAgICIzMSIsCQkJCS8qICAgTmV0aGVybGFu ZHMgKi8KLSAgICAiMzIiLAkJCQkvKiAgIEJlbGdpdW0gKi8KLSAgICAiMzMiLAkJCQkvKiAgIEZy YW5jZSAqLwotICAgICIzNTIiLAkJCQkvKiAgIEx1eGVtYm91cmcgKi8KLSAgICAiMzUzIiwJCQkJ LyogICBJcmVsYW5kICovCi0gICAgIjM1NCIsCQkJCS8qICAgSWNlbGFuZCAqLwotICAgICIzNTgi LAkJCQkvKiAgIEZpbmxhbmQgKi8KLSAgICAiMzkiLAkJCQkvKiAgIEl0YWx5ICovCi0gICAgIjQ0 IiwJCQkJLyogKyBVSyAqLwotICAgICI0NSIsCQkJCS8qICAgRGVubWFyayAqLwotICAgICI0NiIs CQkJCS8qICAgU3dlZGVuICovCi0gICAgIjQ3IiwJCQkJLyogICBOb3J3YXkgKi8KLSAgICAiNDki LAkJCQkvKiArIEdlcm1hbnkgKi8KLSAgICBOVUxMCi19OwotCi0jaWZuZGVmIE1JTklESUFMCi0v KgotICBUZWxlYml0IG1vZGVsIGNvZGVzOgotCi0gIEFUSSAgTW9kZWwgTnVtYmVycyAgICAgICAg ICAgRXhhbXBsZXMKLSAgLS0tICAtLS0tLS0tLS0tLS0tICAgICAgICAgICAtLS0tLS0tLQotICAx MjMgICAgICAgICAgICAgICAgICAgICAgICAgIFRlbGViaXQgaW4gInRvdGFsIEhheWVzLTEyMDAi IGVtdWxhdGlvbiBtb2RlCi0gIDk2MCAgICAgICAgICAgICAgICAgICAgICAgICAgVGVsZWJpdCBp biBDb252ZW50aW9uYWwgQ29tbWFuZCAoSGF5ZXMpIG1vZGUKLSAgOTYxICBSQTEyQyAgICAgICAg ICAgICAgICAgICBJQk0gUEMgaW50ZXJuYWwgb3JpZ2luYWwgVHJhaWxibGF6ZXIKLSAgOTYyICBS QTEyRSAgICAgICAgICAgICAgICAgICBFeHRlcm5hbCBvcmlnaW5hbCBUcmFpbGJsYXplcgotICA5 NjMgIFJNMTJDICAgICAgICAgICAgICAgICAgIFJhY2ttb3VudCBvcmlnaW5hbCBUcmFpbGJsYXpl cgotICA5NjQgIFQxOFBDICAgICAgICAgICAgICAgICAgIElCTSBQQyBpbnRlcm5hbCBUcmFpbGJs YXplci1QbHVzIChUQispCi0gIDk2NSAgVDE4U0EsIFQyU0FBLCBUMlNBUyAgICAgRXh0ZXJuYWwg VEIrLCBUMTYwMCwgVDIwMDAsIFQzMDAwLCBXQiwgYW5kIGxhdGVyCi0gIDk2NiAgVDE4Uk1NICAg ICAgICAgICAgICAgICAgUmFja21vdW50IFRCKwotICA5NjcgIFQyTUMgICAgICAgICAgICAgICAg ICAgIElCTSBQUy8yIGludGVybmFsIFRCKwotICA5NjggIFQxMDAwICAgICAgICAgICAgICAgICAg IEV4dGVybmFsIFQxMDAwCi0gIDk2OSAgPyAgICAgICAgICAgICAgICAgICAgICAgUWJsYXplcgot ICA5NzAgICAgICAgICAgICAgICAgICAgICAgICAgIFFibGF6ZXIgUGx1cwotICA5NzEgIFQyNTAw ICAgICAgICAgICAgICAgICAgIEV4dGVybmFsIFQyNTAwCi0gIDk3MiAgVDI1MDAgICAgICAgICAg ICAgICAgICAgUmFja21vdW50IFQyNTAwCi0qLwotCi0vKiBUZWxlYml0IG1vZGVsIGNvZGVzICov Ci0KLSNkZWZpbmUgVEJfVU5LICAwCQkJLyogVW5rbm93biBUZWxlYml0IG1vZGVsICovCi0jZGVm aW5lIFRCX0JMQVogMQkJCS8qIE9yaWdpbmFsIFRyYWlsQmxhemVyICovCi0jZGVmaW5lIFRCX1BM VVMJMgkJCS8qIFRyYWlsQmxhemVyIFBsdXMgKi8KLSNkZWZpbmUgVEJfMTAwMCAzCQkJLyogVDEw MDAgKi8KLSNkZWZpbmUgVEJfMTUwMCA0CQkJLyogVDE1MDAgKi8KLSNkZWZpbmUgVEJfMTYwMCA1 CQkJLyogVDE2MDAgKi8KLSNkZWZpbmUgVEJfMjAwMCA2CQkJLyogVDIwMDAgKi8KLSNkZWZpbmUg VEJfMjUwMCA3CQkJLyogVDI1MDAgKi8KLSNkZWZpbmUgVEJfMzAwMCA4CQkJLyogVDMwMDAgKi8K LSNkZWZpbmUgVEJfUUJMQSA5CQkJLyogUWJsYXplciAqLwotI2RlZmluZSBUQl9XQkxBIDEwCQkJ LyogV29ybGRCbGF6ZXIgKi8KLSNkZWZpbmUgVEJfX01BWCAxMAkJCS8qIEhpZ2hlc3QgbnVtYmVy ICovCi0KLWNoYXIgKnRiX25hbWVbXSA9IHsJCQkvKiBBcnJheSBvZiBtb2RlbCBuYW1lcyAqLwot ICAgICJVbmtub3duIiwJCQkJLyogVEJfVU5LICAqLwotICAgICJUcmFpbEJsYXplciIsCQkJLyog VEJfQkxBWiAqLwotICAgICJUcmFpbEJsYXplci1QbHVzIiwJCQkvKiBUQl9QTFVTICovCi0gICAg IlQxMDAwIiwJCQkJLyogVEJfMTAwMCAqLwotICAgICJUMTUwMCIsCQkJCS8qIFRCXzE1MDAgKi8K LSAgICAiVDE2MDAiLAkJCQkvKiBUQl8xNjAwICovCi0gICAgIlQyMDAwIiwJCQkJLyogVEJfMjAw MCAqLwotICAgICJUMjUwMCIsCQkJCS8qIFRCXzI1MDAgKi8KLSAgICAiVDMwMDAiLAkJCQkvKiBU Ql8zMDAwICovCi0gICAgIlFibGF6ZXIiLAkJCQkvKiBUQl9RQkxBICovCi0gICAgIldvcmxkQmxh emVyIiwJCQkvKiBUQl9XQkxBICovCi0gICAgIiIKLX07Ci0jZW5kaWYgLyogTUlOSURJQUwgKi8K LQotZXh0ZXJuIGludCBmbG93LCBsb2NhbCwgbWRtdHlwLCBxdWlldCwgYmFja2dyZCwgcGFyaXR5 LCBzZXNsb2csIG5ldHdvcms7Ci1leHRlcm4gaW50IGNhcnJpZXIsIGR1cGxleCwgbWRtc2F2LCBy ZWxpYWJsZSwgc2V0cmVsaWFibGU7Ci1leHRlcm4gaW50IHR0bnByb3RvLCBuZXR0eXBlOwotZXh0 ZXJuIGxvbmcgc3BlZWQ7Ci1leHRlcm4gY2hhciB0dG5hbWVbXSwgc2VzZmlsW107Ci0jaWZuZGVm IE5PWEZFUgotZXh0ZXJuIENIQVIgc3RjaHI7Ci1leHRlcm4gaW50IGludGVycnVwdGVkOwotI2Vu ZGlmIC8qIE5PWEZFUiAqLwotCi0vKiAgRmFpbHVyZSBjb2RlcyAgKi8KLQotI2RlZmluZSBGX1RJ TUUJCTEJCS8qIHRpbWVvdXQgKi8KLSNkZWZpbmUgRl9JTlQJCTIJCS8qIGludGVycnVwdCAqLwot I2RlZmluZSBGX01PREVNCQkzCQkvKiBtb2RlbS1kZXRlY3RlZCBmYWlsdXJlICovCi0jZGVmaW5l IEZfTUlOSVQJCTQJCS8qIGNhbm5vdCBpbml0aWFsaXplIG1vZGVtICovCi0KLSNpZm5kZWYgQ0tf VEFQSQotc3RhdGljCi0jZW5kaWYgLyogQ0tfVEFQSSAqLwotI2lmZGVmIE9TMgotIHZvbGF0aWxl Ci0jZW5kaWYgLyogT1MyICovCi0gaW50IGZhaWxfY29kZSA9ICAwOwkJCS8qIERlZmF1bHQgZmFp bHVyZSByZWFzb24uICovCi0KLXN0YXRpYyBpbnQgeHJlZGlhbCA9IDA7Ci1zdGF0aWMgaW50IGZ1 bmNfY29kZTsJCQkvKiAwID0gZGlhbGluZywgbm9uemVybyA9IGFuc3dlcmluZyAqLwotc3RhdGlj IGludCBwYXJ0aWFsOwotc3RhdGljIGludCBteW1kbXR5cCA9IDA7Ci0KLSNkZWZpbmUgRFdfTk9U SElORyAgICAgIDAJCS8qIFdoYXQgd2UgYXJlIGRvaW5nICovCi0jZGVmaW5lIERXX0lOSVQgICAg ICAgICAxCi0jZGVmaW5lIERXX0RJQUwgICAgICAgICAyCi0KLXN0YXRpYyBpbnQgZGlhbF93aGF0 ID0gRFdfTk9USElORzsJLyogTm90aGluZyBhdCBmaXJzdC4gKi8KLXN0YXRpYyBpbnQgbm9udmVy YmFsID0gMDsJCS8qIEhheWVzIGluIG51bWVyaWMgcmVzcG9uc2UgbW9kZSAqLwotc3RhdGljIE1E TUlORiAqIG1wOwotc3RhdGljIENIQVIgZXNjYnVmWzZdOwotc3RhdGljIGxvbmcgbWRtY2FwYXM7 Ci0KLV9QUk9UT1RZUCAoc3RhdGljIFZPSUQgZHJlc2V0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCAo c3RhdGljIGludCAoKnh4X29rKSwgKGludCxpbnQpICk7Ci1fUFJPVE9UWVAgKHN0YXRpYyBpbnQg ZGRpbmMsIChpbnQpICk7Ci1fUFJPVE9UWVAgKGludCBkaWFsaHVwLCAodm9pZCkgKTsKLV9QUk9U T1RZUCAoaW50IGdldG9rLCAoaW50LGludCkgKTsKLV9QUk9UT1RZUCAoY2hhciAqIGNrX3RpbWUs ICh2b2lkKSApOwotX1BST1RPVFlQIChzdGF0aWMgVk9JRCB0dHNsb3csIChjaGFyICosIGludCkg KTsKLSNpZmRlZiBDT01NRU5UCi1fUFJPVE9UWVAgKHN0YXRpYyBWT0lEIHhjcHksIChjaGFyICos IGNoYXIgKiwgdW5zaWduZWQgaW50KSApOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLV9QUk9UT1RZ UCAoc3RhdGljIFZPSUQgd2FpdGZvciwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCAoc3RhdGljIFZP SUQgZGlhbG9jLCAoY2hhcikgKTsKLV9QUk9UT1RZUCAoc3RhdGljIGludCBkaWR3ZWdldCwgKGNo YXIgKiwgY2hhciAqKSApOwotX1BST1RPVFlQIChzdGF0aWMgVk9JRCBzcGRjaGcsIChsb25nKSAp OwotX1BST1RPVFlQIChzdGF0aWMgaW50IGRpYWxmYWlsLCAoaW50KSApOwotX1BST1RPVFlQIChz dGF0aWMgVk9JRCBnZXRocncsICh2b2lkKSApOwotX1BST1RPVFlQIChzdGF0aWMgVk9JRCBnZXRo cm4sICh2b2lkKSApOwotCi1pbnQgZGlhbHVkdCA9IG5fVURFRjsJCQkvKiBOdW1iZXIgb2YgdXNl ci1kZWZpbmVkIHR5cGUgKi8KLQotLyogQkVHSU4gTURNSU5GIFNUUlVDVCBERUZJTklUSU9OUyAq LwotCi0vKgotICBEZWNsYXJlIHN0cnVjdHVyZXMgY29udGFpbmluZyBtb2RlbS1zcGVjaWZpYyBp bmZvcm1hdGlvbi4KLSAgUkVNRU1CRVIgdGhhdCBvbmx5IHRoZSBmaXJzdCBTRVZFTiBjaGFyYWN0 ZXJzIG9mIHRoZXNlIG5hbWVzIGFyZQotICBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZS4KLQotICBG aXJzdCBkZWNsYXJlIHRoZSB0aHJlZSB0eXBlcyB0aGF0IGFyZSBhbGxvd2VkIGZvciBNSU5JRElB TCB2ZXJzaW9ucy4KLSovCi1zdGF0aWMKLU1ETUlORiBDQ0lUVCA9CQkJCS8qIENDSVRUIC8gSVRV LVQgVi4yNWJpcyBhdXRvZGlhbGVyICovCi0vKgotICBBY2NvcmRpbmcgdG8gVi4yNWJpczoKLSAg LiBFdmVuIHBhcml0eSBpcyByZXF1aXJlZCBmb3IgZ2l2aW5nIGNvbW1hbmRzIHRvIHRoZSBtb2Rl bS4KLSAgLiBDb21tYW5kcyBtaWdodCBvciBtaWdodCBub3QgZWNoby4KLSAgLiBSZXNwb25zZXMg KCJJbmRpY2F0aW9ucyIpIGZyb20gdGhlIG1vZGVtIGFyZSB0ZXJtaW5hdGVkIGJ5IENSIGFuZCBM Ri4KLSAgLiBDYWxsIHNldHVwIGlzIGFjY29tcGxpc2hlZCBieToKLSAgICAtIERURSByYWlzZXMg RFRSIChWLjI0IGNpcmN1aXQgMTA4KSAgICAgICAgICAgICAgW3R0b3BlbigpIGRvZXMgdGhpc10K LSAgICAtIE1vZGVtIHJhaXNlcyBDVFMgKFYuMjQgY2lyY3VpdCAxMDYpICAgICAgICAgICAgW0Mt S2VybWl0IGlnbm9yZXMgdGhpc10KLSAgICAtIERURSBpc3N1ZXMgYSBjYWxsIHJlcXVlc3QgY29t bWFuZCAoIkNSTiIpCi0gICAgLSBNb2RlbSByZXNwb25kcyB3aXRoICJWQUwiICgiY29tbWFuZCBh Y2NlcHRlZCIpCi0gICAgLSBJZiB0aGUgY2FsbCBpcyBjb21wbGV0ZWQ6Ci0gICAgICAgIG1vZGVt IHJlc3BvbmRzIHdpdGggIkNOWCIgKCJjYWxsIGNvbm5lY3RlZCIpOwotICAgICAgICBtb2RlbSB0 dXJucyBDVFMgKDEwNikgT0ZGOwotICAgICAgICBtb2RlbSB0dXJucyBEU1IgKDEwNykgT047Ci0g ICAgICBlbHNlOgotICAgICAgICBtb2RlbSByZXNwb25kcyB3aXRoICJDRkkgPHBhcmFtZXRlcj4i ICgiY2FsbCBmYWlsdXJlIGluZGljYXRpb24iKS4KLSAgLiBUbyBjbGVhciBhIGNhbGwsIHRoZSBE VEUgdHVybnMgRFRSICgxMDgpIE9GRi4KLSAgLiBUaGVyZSBpcyBubyBtZW50aW9uIG9mIHRoZSBD YXJyaWVyIERldGVjdCBjaXJjdWl0ICgxMDkpIGluIHRoZSBzdGFuZGFyZC4KLSAgLiBUaGVyZSBp cyBubyBwcm92aXNpb24gZm9yICJlc2NhcGluZyBiYWNrIiB0byB0aGUgbW9kZW0ncyBjb21tYW5k IG1vZGUuCi0KLSAgSXQgaXMgbm90IGtub3duIHdoZXRoZXIgdGhlcmUgZXhpc3RzIGluIHJlYWwg bGlmZSBhIHB1cmUgVi4yNWJpcyBtb2RlbS4KLSAgSWYgdGhlcmUgaXMsIHRoaXMgY29kZSBoYXMg bmV2ZXIgYmVlbiB0ZXN0ZWQgb24gaXQuICBTZWUgdGhlIERpZ2l0ZWwgZW50cnkuCi0qLwotICAg IHsKLSAgICAiQW55IENDSVRUIC8gSVRVLVQgVi4yNWJpcyBjb25mb3JtYW50IG1vZGVtIiwKLSAg ICAiIiwJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIiIsCQkJLyogdG9uZSBjb21tYW5kICov Ci0gICAgNDAsCQkJLyogZGlhbF90aW1lIC0tIHByb2dyYW1tYWJsZSAtLSAqLwotICAgICIsOiIs CQkvKiBwYXVzZV9jaGFycyAtLSAiLCIgd2FpdHMgZm9yIHByb2dyYW1tYWJsZSB0aW1lICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAvKiAiOiIgd2FpdHMgZm9yIGRpYWwgdG9uZSAqLwotICAg IDEwLAkJCS8qIHBhdXNlX3RpbWUgKHNlY29uZHMsIGp1c3QgYSBndWVzcykgKi8KLSAgICAiIiwJ CQkvKiB3YWtlX3N0ciAobm9uZSkgKi8KLSAgICAyMDAsCQkvKiB3YWtlX3JhdGUgKG1zZWMpICov Ci0gICAgIlZBTCIsCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCS8qIGRtb2RlX3N0ciAo bm9uZSkgKi8KLSAgICAiIiwJCQkvKiBkbW9kZV9wcm9tcHQgKG5vbmUpICovCi0gICAgIkNSTiVz XDAxNSIsICAgICAgICAvKiBkaWFsX3N0ciAqLwotICAgIDIwMCwJCS8qIGRpYWxfcmF0ZSAobXNl YykgKi8KLSAgICAwLAkJCS8qIE5vIGVzY190aW1lICovCi0gICAgMCwJCQkvKiBObyBlc2NfY2hh ciAgKi8KLSAgICAiIiwJCQkvKiBObyBodXBfc3RyICAqLwotICAgICIiLAkJCS8qIGh3ZmNfc3Ry ICovCi0gICAgIiIsCQkJLyogc3dmY19zdHIgKi8KLSAgICAiIiwJCQkvKiBub2ZjX3N0ciAqLwot ICAgICIiLAkJCS8qIGVjX29uX3N0ciAqLwotICAgICIiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAg ICAiIiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiIiwJCQkvKiBkY19vZmZfc3RyICovCi0gICAg IkNJQ1wwMTUiLAkJLyogYWFfb25fc3RyICovCi0gICAgIkRJQ1wwMTUiLAkJLyogYWFfb2ZmX3N0 ciAqLwotICAgICIiLAkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCS8qIHNiX29mZl9zdHIg Ki8KLSAgICAiIiwJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIiIsCQkJLyogc3Bfb25fc3RyICov Ci0gICAgIiIsCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiIiwJCQkvKiB2b2wyX3N0ciAqLwotICAg ICIiLAkJCS8qIHZvbDNfc3RyICovCi0gICAgIiIsCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJ CQkvKiBpbmkyICovCi0gICAgMEwsCQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX1YyNSwJCS8q IGNhcGFzICovCi0gICAgTlVMTAkJLyogTm8gb2tfZm4gICAgKi8KLX07Ci0KLXN0YXRpYwotTURN SU5GIEhBWUVTID0JCQkJLyogSGF5ZXMgMjQwMCBhbmQgY29tcGF0aWJsZSBtb2RlbXMgKi8KLSAg ICB7Ci0gICAgIkhheWVzIFNtYXJ0bW9kZW0gMjQwMCBhbmQgY29tcGF0aWJsZXMiLAotICAgICJB VFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9u ZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8q IHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIK LSAgICAiQVRFMVEwVjEmUzAmQzEmRDJcMDE1IiwJCS8qIHdha2Vfc3RyICovCi0jZWxzZQotI2lm ZGVmIFZNUwotICAgICJBVFEwJlMxXDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0gICAg IkFUUTBcMDE1IiwJCQkJLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8q IHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyLCB1c2Vy IHN1cHBsaWVzIEQgb3IgVCAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAw LAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRR MEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8KLSAg ICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLwotICAg ICIiLAkJCQkJLyogZWNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICovCi0g ICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIgKi8K LSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJ CS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJ CQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLwot ICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiQVRMMVwwMTUiLAkJCQkv KiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIkFU TDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVk dCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDI0MDBMLAkJCQkvKiBtYXhfc3BlZWQg Ki8KLSAgICBDS0RfQVQsCQkJCS8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8K LX07Ci0KLS8qCi0gIFRoZSBpbnRlbnQgb2YgdGhlICJ1bmtub3duIiBtb2RlbSBpcyB0byBhbGxv dyBLRVJNSVQgdG8gc3VwcG9ydAotICB1bmtub3duIG1vZGVtcyBieSBoYXZpbmcgdGhlIHVzZXIg dHlwZSB0aGUgZW50aXJlIGF1dG9kaWFsIHNlcXVlbmNlCi0gIChwb3NzaWJseSBpbmNsdWRpbmcg Y29udHJvbCBjaGFyYWN0ZXJzLCBldGMuKSBhcyB0aGUgInBob25lIG51bWJlciIuCi0gIFRoZSBw cm90b2NvbCBhbmQgb3RoZXIgY2hhcmFjdGVyaXN0aWNzIG9mIHRoaXMgbW9kZW0gYXJlIHVua25v d24sIHdpdGgKLSAgc29tZSAicmVhc29uYWJsZSIgdmFsdWVzIGJlaW5nIGNob3NlbiBmb3Igc29t ZSBvZiB0aGVtLiAgVGhlIG9ubHkgd2F5IHRvCi0gIGRldGVjdCBpZiBhIGNvbm5lY3Rpb24gaXMg bWFkZSBpcyB0byBsb29rIGZvciBjYXJyaWVyLgotKi8KLXN0YXRpYwotTURNSU5GIFVOS05PV04g PQkJCS8qIEluZm9ybWF0aW9uIGZvciAiVW5rbm93biIgbW9kZW0gKi8KLSAgICB7Ci0gICAgIlVu a25vd24iLAkJCQkvKiBuYW1lICovCi0gICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0g ICAgIiIsCQkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzMCwJCQkJCS8qIGRpYWxfdGltZSAq LwotICAgICIiLAkJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAwLAkJCQkJLyogcGF1c2VfdGlt ZSAqLwotICAgICIiLAkJCQkJLyogd2FrZV9zdHIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRl ICovCi0gICAgIiIsCQkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVf c3RyICovCi0gICAgTlVMTCwJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIiVzXDAxNSIsCQkJ CS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDAsCQkJCQkv KiBlc2NfdGltZSAqLwotICAgIDAsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICIiLAkJCQkJLyog aHVwX3N0ciAqLwotICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHN3 ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNf b25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBk Y19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8q IGFhX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJ Lyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIiIsCQkJ CQkvKiBzcF9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIHZvbDFfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLwotICAgICIiLAkJ CQkJLyogdm9sM19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJ CQkvKiBpbmkyICovCi0gICAgMEwsCQkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICAwLAkJCQkJLyog Y2FwYXMgKi8KLSAgICBOVUxMCQkJCS8qIG9rX2ZuICovCi19OwotCi0jaWZuZGVmIE1JTklESUFM Ci1zdGF0aWMKLU1ETUlORiBBVFRJU04gPQkJCQkvKiBBVCZUIElTTiBOZXR3b3JrICovCi0gICAg ewotICAgICIiLAkJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICIiLAkJCQkJLyogdG9uZSBj b21tYW5kICovCi0gICAgIkFUJlQgSVNOIE5ldHdvcmsiLAotICAgIDMwLAkJCQkJLyogRGlhbCB0 aW1lICovCi0gICAgIiIsCQkJCQkvKiBQYXVzZSBjaGFyYWN0ZXJzICovCi0gICAgMCwJCQkJCS8q IFBhdXNlIHRpbWUgKi8KLSAgICAiXDAxNVwwMTVcMDE1XDAxNSIsCQkJLyogV2FrZSBzdHJpbmcg Ki8KLSAgICA5MDAsCQkJCS8qIFdha2UgcmF0ZSAqLwotICAgICJESUFMIiwJCQkJLyogV2FrZSBw cm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1v ZGVfcHJvbXB0ICovCi0gICAgIiVzXDAxNSIsCQkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJ CS8qIGRpYWxfcmF0ZSAqLwotICAgIDAsCQkJCQkvKiBlc2NfdGltZSAqLwotICAgIDAsCQkJCQkv KiBlc2NfY2hhciAqLwotICAgICIiLAkJCQkJLyogaHVwX3N0ciAqLwotICAgICIiLAkJCQkJLyog aHdmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBu b2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBl Y19vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8q IGRjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGFhX29uX3N0ciAqLwotICAgICIiLAkJCQkJ LyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJ CQkvKiBzYl9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIiIs CQkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIiIs CQkJCQkvKiB2b2wyX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMEwsCQkJCQkv KiBtYXhfc3BlZWQgKi8KLSAgICAwLAkJCQkJLyogY2FwYXMgKi8KLSAgICBOVUxMCQkJCS8qIG9r X2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBBVFRNT0RFTSA9CS8qIGluZm9ybWF0aW9uIGZv ciBBVCZUIHN3aXRjaGVkLW5ldHdvcmsgbW9kZW1zICovCi0JCQkvKiAiTnVtYmVyIiBmb2xsb3dp bmcgImRpYWwiIGNhbiBpbmNsdWRlOiBwJ3MgYW5kCi0JCQkgKiB0J3MgdG8gaW5kaWNhdGUgcHVs c2Ugb3IgdG9uZSAoZGVmYXVsdCkgZGlhbGluZywKLQkJCSAqICsgZm9yIHdhaXQgZm9yIGRpYWwg dG9uZSwgLCBmb3IgcGF1c2UsIHIgZm9yCi0JCQkgKiBsYXN0IG51bWJlciBkaWFsZWQsIGFuZCwg ZXhjZXB0IGZvciAyMjI0Qiwgc29tZQotCQkJICogY29tbWEtZGVsaW1pdGVkIG9wdGlvbnMgbGlr ZSBvMTI9eSwgYmVmb3JlIG51bWJlci4KLQotICogIkltcG9ydGFudCIgb3B0aW9ucyBmb3IgdGhl IG1vZGVtczoKLSAqCi0gKglBbGw6CQlFeGNlcHQgZm9yIDIyMjRCLCBlbmFibGUgb3B0aW9uIDEy IGZvciAidHJhbnNwYXJlbnQKLSAqCQkJZGF0YSwiIG8xMj15LiAgSWYgYSBjb21wdXRlciBwb3J0 IHVzZWQgZm9yIGJvdGgKLSAqCQkJaW5jb21pbmcgYW5kIG91dGdvaW5nIGNhbGxzIGlzIGNvbm5l Y3RlZCB0byB0aGUKLSAqCQkJbW9kZW0sIGRpc2FibGUgImVudGVyIGludGVyYWN0aXZlIG1vZGUg b24gY2FycmlhZ2UKLSAqCQkJcmV0dXJuLCIgRUlDUi4gIFRoZSBLZXJtaXQgImRpYWwiIGNvbW1h bmQgY2FuCi0gKgkJCWZ1bmN0aW9uIHdpdGggRUlBIGxlYWRzIHN0YW5kYXJkLCBFSUFTLgotICoK LSAqCTIyMTJDOgkJSW50ZXJuYWwgaGFyZHdhcmUgc3dpdGNoZXMgYXQgdGhlaXIgZGVmYXVsdAot ICoJCQlwb3NpdGlvbnMgKGZvdXIgcm9ja2VycyBkb3duIGF3YXkgZnJvbSBudW1iZXJzKQotICoJ CQl1bmxlc3MgRUlDUiBpcyBub3Qgd2FudGVkIChyb2NrZXIgZG93biBhdCB0aGUgNCkuCi0gKgkJ CUZvciBFSUFTLCByb2NrZXIgZG93biBhdCB0aGUgMS4KLSAqCi0gKgkyMjI0QjoJCUZyb250LXBh bmVsIHN3aXRjaCBwb3NpdGlvbiAxIG11c3QgYmUgdXAgKGF0IHRoZSAxLAotICoJCQljbG9zZWQp LiAgRGlzYWJsZSBFSUNSIHdpdGggcG9zaXRpb24gMiBkb3duLgotICoJCQlGb3IgRUlBUywgcG9z aXRpb24gNCBkb3duLgotICoJCQlBbGwgc3dpdGNoZXMgb24gdGhlIGJhY2sgcGFuZWwgZG93bi4K LSAqCi0gKgkyMjI0Q0VPOglBbGwgZnJvbnQtcGFuZWwgc3dpdGNoZXMgZG93biBleGNlcHQgZWl0 aGVyIDUgb3IgNi4KLSAqCQkJRW5hYmxlIGludGVyYWN0aXZlIGZsb3cgY29udHJvbCB3aXRoIG8x Nj15LgotICoJCQlTZWxlY3Qgbm9ybWFsIGFzeW5jaHJvbm91cyBtb2RlIHdpdGggbzM0PTAgKHpl cm8pLgotICoJCQlEaXNhYmxlIEVJQ1Igd2l0aCBwb3NpdGlvbiAzIHVwLiAgRm9yIEVJQVMsIDEg dXAuCi0gKgkJCVJlc2V0IHRoZSBtb2RlbSBhZnRlciBjaGFuZ2luZyBzd2l0Y2hlcy4KLSAqCi0g KgkyMjk2QToJCUlmIG9wdGlvbiAwMCAoemVyb3MpIGlzIHByZXNlbnQsIHVzZSBvMDA9MC4KLSAq CQkJRW5hYmxlIGludGVyYWN0aXZlIGZsb3cgY29udHJvbCB3aXRoIG8xNj15LgotICoJCQlTZWxl Y3Qgbm9ybWFsIGFzeW5jaHJvbm91cyBtb2RlIHdpdGggbzM0PTAgKHplcm8pLgotICogICAgICAg ICAgICAgICAgICAgICAgKGF2YWlsYWJsZSBpbiBNaWNyb2NvbSBOZXR3b3JraW5nIHZlcnNpb24s IGJ1dAotICogICAgICAgICAgICAgICAgICAgICAgbm90IG5lY2Vzc2FyaWx5IG90aGVyIG1vZGVs cyBvZiB0aGUgMjI5NkEpLgotICoJCQlFbmFibGUgbW9kZW0tcG9ydCBmbG93IGNvbnRyb2wgKGlm IGF2YWlsYWJsZSkgd2l0aAotICogCQkJbzQyPXkuICBFbmFibGUgYXN5bmNocm9ub3VzIG9wZXJh dGlvbiB3aXRoIG81MD15LgotICogCQkJRGlzYWJsZSBFSUNSIHdpdGggbzY5PW4uICBGb3IgRUlB UywgbzY2PW4sIHVzaW5nCi0gKiAJCQlmcm9udCBwYW5lbC4KLSAqLwotICAgIHsKLSAgICJBVCZU IHN3aXRjaGVkLW5ldHdvcmsgbW9kZW1zIiwKLSAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQg Ki8KLSAgICAiIiwJCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDIwLAkJCQkJLyogZGlhbF90 aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVz ZV90aW1lICovCi0gICAgIisiLAkJCQkvKiB3YWtlX3N0ciAqLwotICAgIDAsCQkJCQkvKiB3YWtl X3JhdGUgKi8KLSAgICAiIiwJCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBk bW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJhdCVzXDAx NSIsCQkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDAs CQkJCQkvKiBlc2NfdGltZSAqLwotICAgIDAsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICIiLAkJ CQkJLyogaHVwX3N0ciAqLwotICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIHN3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLwotICAgICIiLAkJCQkJ LyogZWNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIiIsCQkJ CQkvKiBkY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIGFhX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIi LAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAg IiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9vbl9zdHIgKi8KLSAg ICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLwotICAg ICIiLAkJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCi0gICAg IiIsCQkJCQkvKiBpbmkyICovCi0gICAgMEwsCQkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0Rf QVQsCQkJCS8qIGNhcGFzICovCi0gICAgTlVMTAkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGlj Ci1NRE1JTkYgQVRURFRETSA9IC8qIEFUJlQgRGlnaXRhbCBUZXJtaW5hbCBEYXRhIE1vZHVsZSAg Ki8KLQkJIC8qIEZvciBkaWFsaW5nOiBLWUJEIHN3aXRjaCBkb3duLCBvdGhlcnMgdXN1YWxseSB1 cC4gKi8KLSAgICB7Ci0gICAgIkFUJlQgRGlnaXRhbCBUZXJtaW5hbCBEYXRhIE1vZHVsZSIsCi0g ICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIiIsCQkJCQkvKiB0b25lIGNvbW1h bmQgKi8KLSAgICAyMCwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIiLAkJCQkJLyogcGF1c2Vf Y2hhcnMgKi8KLSAgICAwLAkJCQkJLyogcGF1c2VfdGltZSAqLwotICAgICIiLAkJCQkJLyogd2Fr ZV9zdHIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIiIsCQkJCQkvKiB3YWtl X3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBk bW9kZV9wcm9tcHQgKi8KLSAgICAiJXNcMDE1IiwJCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJ CQkJLyogZGlhbF9yYXRlICovCi0gICAgMCwJCQkJCS8qIGVzY190aW1lICovCi0gICAgMCwJCQkJ CS8qIGVzY19jaGFyICovCi0gICAgIiIsCQkJCQkvKiBodXBfc3RyICovCi0gICAgIiIsCQkJCQkv KiBod2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8q IG5vZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8q IGVjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29uX3N0ciAqLwotICAgICIiLAkJCQkJ LyogZGNfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogYWFfb25fc3RyICovCi0gICAgIiIsCQkJ CQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLwotICAgICIi LAkJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAwTCwJCQkJ CS8qIG1heF9zcGVlZCAqLwotICAgIDAsCQkJCQkvKiBjYXBhcyAqLwotICAgIE5VTEwJCQkJLyog b2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIERJR0lURUwgPSAgICAgICAgLyogRGlnaXRl bCBEVC0yMiBDQ0lUVCB2YXJpYW50IHVzZWQgaW4gQnJhemlsICovCi0vKgotICBBdHRlbXB0cyB0 byBhZGhlcmUgc3RyaWN0bHkgdG8gdGhlIFYuMjViaXMgc3BlY2lmaWNhdGlvbiBkbyBub3QgcHJv ZHVjZSBnb29kCi0gIHJlc3VsdHMgaW4gcmVhbCBsaWZlLiAgVGhlIG1vZGVtIGZvciB3aGljaCB0 aGlzIGNvZGUgd2FzIGRldmVsb3BlZDogKGEpCi0gIGlnbm9yZXMgcGFyaXR5OyAoYikgc29tZXRp bWVzIHRlcm1pbmF0ZXMgcmVzcG9uc2VzIHdpdGggTEYgQ1IgaW5zdGVhZCBvZiBDUgotICBMRjsg KGMpIGhhcyBhIEhheWVzLWxpa2UgZXNjYXBlIHNlcXVlbmNlOyAoZCkgc3VwcG9ydHMgYSBoYW5n dXAgKCJIVVAiKQotICBjb21tYW5kLiAgSW5mb3JtYXRpb24gZnJvbSBGZXJuYW5kbyBDYWJyYWwg aW4gQnJhc2lsaWEuCi0qLwotICAgIHsKLSAgICAiRGlnaXRlbCBEVC0yMiBDQ0lUVCBkaWFsZXIi LAotICAgICIiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIiIsCQkJCS8qIHRvbmUgY29t bWFuZCAqLwotICAgIDQwLAkJCQkvKiBkaWFsX3RpbWUgLS0gcHJvZ3JhbW1hYmxlIC0tICovCi0g ICAgIiw6IiwJCS8qIHBhdXNlX2NoYXJzIC0tICIsIiB3YWl0cyBmb3IgcHJvZ3JhbW1hYmxlIHRp bWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qICI6IiB3YWl0cyBmb3IgZGlhbCB0b25l ICovCi0gICAgMTAsCQkJLyogcGF1c2VfdGltZSAoc2Vjb25kcywganVzdCBhIGd1ZXNzKSAqLwot ICAgICJIVVBcMDE1IiwgICAgICAgICAgLyogd2FrZV9zdHIgKE5vdCBTdGFuZGFyZCBDQ0lUVCkg Ki8KLSAgICAyMDAsCQkvKiB3YWtlX3JhdGUgKG1zZWMpICovCi0gICAgIlZBTCIsCQkvKiB3YWtl X3Byb21wdCAqLwotICAgICIiLAkJCS8qIGRtb2RlX3N0ciAobm9uZSkgKi8KLSAgICAiIiwJCQkv KiBkbW9kZV9wcm9tcHQgKG5vbmUpICovCi0gICAgIkNSTiVzXDAxNSIsICAgICAgICAvKiBkaWFs X3N0ciAqLwotICAgIDIwMCwJCS8qIGRpYWxfcmF0ZSAobXNlYykgKi8KLSAgICAxMTAwLAkJLyog ZXNjX3RpbWUgKE5vdCBTdGFuZGFyZCBDQ0lUVCkgKi8KLSAgICA0MywJCQkvKiBlc2NfY2hhciAg KE5vdCBTdGFuZGFyZCBDQ0lUVCkgKi8KLSAgICAiSFVQXDAxNSIsCQkvKiBodXBfc3RyICAoTm90 IFN0YW5kYXJkIENDSVRUKSAqLwotICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIHN3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLwotICAgICIiLAkJ CQkJLyogZWNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIiIs CQkJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAi Q0lDXDAxNSIsCQkJCS8qIGFhX29uX3N0ciAqLwotICAgICJESUNcMDE1IiwJCQkJLyogYWFfb2Zm X3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9v ZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBz cF9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2 b2wyX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGln bm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMEwsCQkJCQkvKiBtYXhfc3Bl ZWQgKi8KLSAgICBDS0RfVjI1LAkJCQkvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2Zu ICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBIXzEyMDAgPQkJLyogSGF5ZXMgMTIwMCBhbmQgY29t cGF0aWJsZSBtb2RlbXMgKi8KLSAgICB7Ci0gICAgIkhheWVzIFNtYXJ0bW9kZW0gMTIwMCBhbmQg Y29tcGF0aWJsZXMiLAotICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAg ICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3Rp bWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNl X3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRFMVEwVjFcMDE1IiwJCQkvKiB3YWtlX3N0ciAq LwotI2Vsc2UKLSAgICAiQVRRMFwwMTUiLAkJCQkvKiB3YWtlX3N0ciAqLwotI2VuZGlmIC8qIE9T MiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2Fr ZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyog ZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAw LAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0 MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8K LSAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLwot ICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLwot ICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb25fc3RyICov Ci0gICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFh X29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIs CQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAi QVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9v ZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlww MTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICov Ci0gICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAg IDEyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVQsCQkJCS8qIGNhcGFzICovCi0g ICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIEhfVUxUUkEgPQkJ CS8qIEhheWVzIGhpZ2gtc3BlZWQgKi8KLSAgICB7Ci0gICAgIkhheWVzIFVsdHJhL09wdGltYS9B Y2N1cmEgOTYvMTQ0LzI4OCIsIC8qIFUsTyxBICovCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxz ZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAz NSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAg ICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVEUxUTBWMVg0TjFZ MCZTMCZDMSZEMlMzNz0wUzgyPTEyOFwwMTUiLCAvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRl ZiBWTVMKLSAgICAiQVRRMFg0TjFZMCZTMVMzNz0wUzgyPTEyOFwwMTUiLAkvKiB3YWtlX3N0ciAq LwotI2Vsc2UKLSAgICAiQVRRMFg0TjFZMFMzNz0wUzgyPTEyOFwwMTUiLAkvKiB3YWtlX3N0ciAq LwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtl X3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJ CS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFU RCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0g ICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0g ICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQmSzNcMDE1IiwJCQkvKiBo d2ZjX3N0ciAqLyAgIC8qIE9LIGZvciBVLE8gKi8KLSAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2Zj X3N0ciAqLyAgIC8qIE9LIGZvciBVLE8gKi8KLSAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0 ciAqLyAgIC8qIE9LIGZvciBVLE8gKi8KLSAgICAiQVQmUTVTMzY9N1M0OD03XDAxNSIsCQkvKiBl Y19vbl9zdHIgKi8gIC8qIE9LIGZvciBVLE8gKi8KLSAgICAiQVQmUTBcMDE1IiwJCQkvKiBlY19v ZmZfc3RyICovIC8qIE9LIGZvciBVLE8gKi8KLSAgICAiQVRTNDY9MlwwMTUiLAkJCS8qIGRjX29u X3N0ciAqLwotICAgICJBVFM0Nj0wXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMw PTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2Zm X3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9v ZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBc MDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3Ry ICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJ CQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAg IiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTE1MjAwTCwJCQkJLyogbWF4X3NwZWVkICovICAvKiAo dmFyaWVzKSAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NX LCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0aWMKLU1E TUlORiBIX0FDQ1VSQSA9CQkJLyogSGF5ZXMgQWNjdXJhICovCi0gICAgewkJCQkJLyogR1VFU1NJ TkcgSVQnUyBMSUtFIFVMVFJBICYgT1BUSU1BICovCi0gICAgIkhheWVzIEFjY3VyYSIsCi0gICAg IkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0 b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJ LyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9T MgotICAgICJBVEUxUTBWMVg0TjFZMCZTMCZDMSZEMlMzNz0wXDAxNSIsCS8qIHdha2Vfc3RyICov Ci0jZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwWDROMVkwJlMxUzM3PTBcMDE1IiwJCS8qIHdh a2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwWDROMVkwUzM3PTBcMDE1IiwJCS8qIHdha2Vfc3Ry ICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdh a2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJ CQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAi QVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8K LSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8K LSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZLM1wwMTUiLAkJCS8q IGh3ZmNfc3RyICovCi0gICAgIkFUJks0XDAxNSIsCQkJLyogc3dmY19zdHIgKi8KLSAgICAiQVQm SzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCZRNVMzNj03UzQ4PTdcMDE1IiwJCS8q IGVjX29uX3N0ciAqLwotICAgICJBVCZRMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAi QVRTNDY9MlwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVFM0Nj0wXDAxNSIsCQkJLyog ZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAi QVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3Ry ICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyog c3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJB VEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9z dHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIs CQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTE1MjAwTCwJ CQkJLyogbWF4X3NwZWVkICovICAvKiAodmFyaWVzKSAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tE X0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9r X2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBQUEkgPQkJCQkvKiBQcmFjdGljYWwgUGVyaXBo ZXJhbHMgICovCi0gICAgewotICAgICJQcmFjdGljYWwgUGVyaXBoZXJhbHMgVi4yMmJpcyBvciBo aWdoZXIgd2l0aCBWLjQyIGFuZCBWLjQyYmlzIiwKLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNl IGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1 LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAg IDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgQ09NTUVOVAotLyogSW4gbmV3ZXIgbW9k ZWxzIFM4MiAoQlJFQUsgaGFuZGxpbmcpIHdhcyBlbGltaW5hdGVkLCBjYXVzaW5nIGFuIGVycm9y LiAqLwotI2lmZGVmIE9TMgotICAgICJBVFEwWDROMSZTMCZDMSZEMlMzNz0wUzgyPTEyOFwwMTUi LCAvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAiQVRRMFg0TjFTMzc9MFM4Mj0xMjhcMDE1IiwJ CS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogT1MyICovCi0jZWxzZSAvKiBTbyBub3cgd2UgdXNl IFkwIGluc3RlYWQgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRFMVEwVjFYNE4xJlMwJkMxJkQyWTBT Mzc9MFwwMTUiLAkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiQVRRMFg0 TjFZMCZTMVMzNz0wXDAxNSIsCQkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAiQVRRMFg0TjFZ MFMzNz0wXDAxNSIsCQkvKiB3YWtlX3N0ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8q IE9TMiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICov Ci0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9k ZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUi LAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAs CQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEw SDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIg Ki8KLSAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCZLMFwwMTUiLAkJ CS8qIG5vZmNfc3RyICovCi0gICAgIkFUJlE1UzM2PTdTNDg9N1wwMTUiLAkJLyogZWNfb25fc3Ry ICovCi0gICAgIkFUJlEwUzM2PTBTNDg9MTI4XDAxNSIsCQkvKiBlY19vZmZfc3RyICovCi0gICAg IkFUUzQ2PTJcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVRTNDY9MFwwMTUiLAkJCS8q IGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAg IkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0 ciAgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgICovCi0gICAgIkFUTTFcMDE1IiwJCQkJ Lyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAg ICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9s Ml9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAx NSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTE1MjAw TCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENL RF9IV3xDS0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0K LXN0YXRpYwotTURNSU5GIERBVEFQT1JUID0JCQkvKiBBVCZUIERhdGFwb3J0ICAqLwotICAgIHsK LSAgICAiQVQmVCAvIFBhcmFkeW5lIERhdGFQb3J0IFYuMzIgb3IgaGlnaGVyIiwKLSAgICAiQVRQ XDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUg Y29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBw YXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0gICAgLyoKLSAgICAg ICBOb3RlOiBTNDE9MCAodXNlIGhpZ2hlc3QgbW9kdWxhdGlvbikgb21pdHRlZCwgc2luY2UgaXQg aXMgbm90Ci0gICAgICAgc3VwcG9ydGVkIG9uIHRoZSBWLjMyIGFuZCBsb3dlciBtb2RlbHMuICBT byBsZXQncyBub3QgdG91Y2ggaXQuCi0gICAgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRRMEUxVjFY NiZTMCZDMSZEMiZRMFkwXFxLNVM3OD0wXDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZWxzZQotI2lm ZGVmIFZNUwotICAgICJBVFEwRTFYNiZTMSZRMFkwXFxLNVM3OD0wXDAxNSIsCS8qIHdha2Vfc3Ry ICovCi0jZWxzZQotICAgICJBVFEwRTFYNiZRMFkwXFxLNVM3OD0wXDAxNSIsCQkvKiB3YWtlX3N0 ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3 YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJ CQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAg IkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICov Ci0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICov Ci0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVRcXFEzXDAxNSIsCQkJ LyogaHdmY19zdHIgKi8KLSAgICAiQVRcXFExXFxYMFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCi0g ICAgIkFUXFxRMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUXFxON1wwMTUiLAkJCS8q IGVjX29uX3N0ciAqLwotICAgICJBVFxcTjBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAg IkFUJUMxXDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFUJUMwXDAxNSIsCQkJLyogZGNf b2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRT MD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICov Ci0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bf b25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwx XDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIg Ki8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJ CS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgNTc2MDBMLAkJCQkv KiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENL RF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGlj Ci1NRE1JTkYgVUNPTV9BVCA9CQkJLyogTWljcm9jb20gRGVza1BvcnRlIEZBU1QgRVMgMjguOCAq LwotICAgIHsKLSAgICAiTWljcm9jb20gRGVza1BvcnRlIEZBU1QgMjguOCIsCi0gICAgIkFUUFww MTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNv bW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1 c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAg ICJBVEUxUTBWMVg0XFxOMEYwJlMwJkMxJkQyXFxLNVwwMTUiLCAvKiB3YWtlX3N0ciAqLwotI2Vs c2UKLSNpZmRlZiBWTVMKLSAgICAiQVRRMFg0RjAmUzFcXEs1XDAxNSIsCQkvKiB3YWtlX3N0ciAq LwotI2Vsc2UKLSAgICAiQVRRMFg0RjBcXEs1XDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KLSNlbmRp ZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICov Ci0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9k ZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUi LAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAs CQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEw SDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUXFxRM1wwMTUiLAkJCS8qIGh3ZmNfc3Ry ICovCi0gICAgIkFUXFxRMVwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUXFxIMFxcUTBc MDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVFxcTjNcMDE1IiwJCQkvKiBlY19vbl9zdHIg Ki8KLSAgICAiQVRcXE4wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCVDM1wwMTUi LAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8K LSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJ CS8qIGFhX29mZl9zdHIgKi8KLSAgICAiQVQtSjBcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKi8KLSAg ICAiQVQtSjFcMDE1IiwJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyog c3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJB VEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9z dHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIs CQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTE1MjAwTCwJ CQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9I V3xDS0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0 YXRpYwotTURNSU5GIFpPT00gPQkJCQkvKiBab29tIFRlbGVwaG9uaWNzIFYuMzJiaXMgICovCi0g ICAgewotICAgICJab29tIFRlbGVwaG9uaWNzIFYuMzJiaXMiLAotICAgICJBVFBcMDE1IiwJCQkJ LyogcHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICov Ci0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJz ICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRFMVEw VjFOMVcxWDQmUzAmQzEmRDJTODI9MTI4Uzk1PTQ3XDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZWxz ZQotI2lmZGVmIFZNUwotICAgICJBVFEwRTFOMVcxWDQmUzFTODI9MTI4Uzk1PTQ3XDAxNSIsCS8q IHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwRTFOMVcxWDRTODI9MTI4Uzk1PTQ3XDAxNSIs CS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAg MCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAq LwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9t cHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBk aWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyog ZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZL M1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJks0XDAxNSIsCQkJLyogc3dmY19zdHIg Ki8KLSAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCZRNVMzNj03UzQ4 PTdcMDE1IiwJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVCZRMFwwMTUiLAkJCS8qIGVjX29mZl9z dHIgKi8KLSAgICAiQVRTNDY9MTM4XDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFUUzQ2 PTEzNlwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFf b25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJB VE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29m Zl9zdHIgKi8KLSAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAx NSIsCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8K LSAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAq LwotICAgIDU3NjAwTCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0Rf RUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tf Zm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIFpZWEVMID0JCQkJLyogWnlYRUwgVS1TZXJpZXMg Ki8KLSAgICB7Ci0gICAgIlp5WEVMIFUtU2VyaWVzIFYuMzJiaXMgb3IgaGlnaGVyIiwKLSAgICAi QVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRv bmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkv KiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1My Ci0gICAgIkFURTFRMFYxJlMwJkMxJkQyJk4wWDUmWTFcMDE1IiwJLyogd2FrZV9zdHIgKi8KLSNl bHNlCi0jaWZkZWYgVk1TCi0gICAgIkFUUTBFMSZTMSZOMFg1JlkxXDAxNSIsCQkvKiB3YWtlX3N0 ciAqLwotI2Vsc2UKLSAgICAiQVRRMEUxJk4wWDUmWTFcMDE1IiwJCS8qIHdha2Vfc3RyICovCi0j ZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0 ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyog ZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNc MDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAx MTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAi QVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZIM1wwMTUiLAkJCS8qIGh3ZmNf c3RyICovCi0gICAgIkFUJkg0XDAxNSIsCQkJLyogc3dmY19zdHIgKi8KLSAgICAiQVQmSDBcMDE1 IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCZLM1wwMTUiLAkJCS8qIGVjX29uX3N0ciAqLwot ICAgICJBVCZLMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVQmSzRcMDE1IiwJCQkv KiBkY19vbl9zdHIgKi8KLSAgICAiQVQmSzNcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCi0gICAg IkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkvKiBh YV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8q IHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAi QVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJCQkJLyogdm9s MV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwzXDAx NSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8K LSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwot ICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAq LwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBaT0xUUklY ID0JCQkvKiBab2x0cml4ICovCi0gICAgewotICAgICJab2x0cml4IFYuMzJiaXMgYW5kIFYuMzQg bW9kZW1zIHdpdGggUm9ja3dlbGwgQUNJIGNoaXBzZXQiLAotICAgICJBVFBcMDE1IiwJCQkJLyog cHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0g ICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICov Ci0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICJBVEUxUTBWMUYw VzFYNFkwJlMwJkMxJkQyXFxLNVM4Mj0xMjhTOTU9NDFcMDE1IiwgLyogd2FrZV9zdHIgKi8KLSNl bHNlCi0jaWZkZWYgVk1TCi0gICAiQVRRMEUxRjBXMVg0WTAmUzFcXEs1UzgyPTEyOFM5NT00MVww MTUiLCAvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICJBVFEwRTFGMFcxWDRZMFxcSzVTODI9MTI4 Uzk1PTQxXDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyog T1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3 YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkv KiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAg IDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAg IDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAq LwotICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJks0UzMyPTE3UzMz PTE5XDAxNSIsCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3Ry ICovCi0gICAgIkFUXFxOM1wwMTUiLAkJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVFxcTjFcMDE1 IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFUUzQ2PTEzOCVDM1wwMTUiLAkJCS8qIGRjX29u X3N0ciAqLwotICAgICJBVFM0Nj0xMzYlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCi0gICAg IkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkvKiBh YV9vZmZfc3RyICovCi0gICAgIkFUXFxOMFwwMTUiLAkJCS8qIHNiX29uX3N0ciAqLwotICAgICJB VCZRMFwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9v bl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFc MDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAq LwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJ LyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICA1NzYwMEwsCQkJCS8q IG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tE X1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0aWMK LU1ETUlORiBNT1RPUk9MQSA9IHsJCQkvKiBNb3Rvcm9sYSBGYXNUYWxrIElJIG9yIExpZmVzdHls ZSAqLwotLyoKLSAgIlxFIiBhbmQgIlxYIiBjb21tYW5kcyByZW1vdmVkIC0gTW90b3JvbGEgTGlm ZXN0eWxlIGRvZXNuJ3QgaGF2ZSB0aGVtLgotICAgICBcRTAgPSBEb24ndCBlY2hvIHdoaWxlIG9u bGluZQotICAgICBcWDAgPSBQcm9jZXNzIFhvbi9Yb2ZmIGJ1dCBkb24ndCBwYXNzIHRocm91Z2gK LSovCi0gICAgIk1vdG9yb2xhIEZhc1RhbGsgSUkgb3IgTGlmZXN0eWxlIiwJLyogTmFtZSAqLwot ICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJ LyogdG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIs CQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRl ZiBPUzIKLSAgICAiQVRFMVEwVjFYNCZTMCZDMSZEMlxcSzVcXFYxXDAxNSIsCS8qIHdha2Vfc3Ry ICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwRTFYNCZTMVxcSzVcXFYxXDAxNSIsCQkv KiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAiQVRRMEUxWDRcXEs1XFxWMVwwMTUiLAkJLyogd2Fr ZV9zdHIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJ Lyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAg IiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwot ICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0 ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hh ciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUXFxRM1wwMTUi LAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUXFxRMVwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCi0g ICAgIkFUXFxRMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUXFxONlwwMTUiLAkJCS8q IGVjX29uX3N0ciAqLwotICAgICJBVFxcTjFcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAg IkFUJUMxXDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFUJUMwXDAxNSIsCQkJLyogZGNf b2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRT MD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICJBVFxcSjBcMDE1IiwJCQkvKiBzYl9v bl9zdHIgKi8KLSAgICAiQVRcXEoxXDAxNSIsCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0x XDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9z dHIgKi8KLSAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIs CQkJCS8qIHZvbDJfc3RyICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAg ICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwot ICAgIDU3NjAwTCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8 Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4g Ki8KLX07Ci0KLXN0YXRpYwotTURNSU5GIEJPQ0EgPQkJCQkvKiBCb2NhICovCi0gICAgewotICAg ICJCT0NBIDE0LjQgRmF4bW9kZW0iLAotICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFu ZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkv KiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJ CS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRFMVEwVjFGMU4xVzEmUzAmQzEm RDJcXEs1UzM3PTExUzgyPTEyOFM5NT00N1g0XDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZWxzZQot I2lmZGVmIFZNUwotICAgICJBVFEwRTFGMU4xVzEmUzFcXEs1UzM3PTExUzgyPTEyOFM5NT00N1g0 XDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwRTFGMU4xVzFcXEs1UzM3PTEx UzgyPTEyOFM5NT00N1g0XDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0j ZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUi LAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAg IiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0 ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGlt ZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyog aHVwX3N0ciAqLwotICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJks0 XDAxNSIsCQkJLyogc3dmY19zdHIgKi8KLSAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAq LwotICAgICJBVFxcTjNTMzY9N1M0OD03XDAxNSIsCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiQVRc XE4xXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVFM0Nj0xMzhcMDE1IiwJCQkvKiBk Y19vbl9zdHIgKi8KLSAgICAiQVRTNDY9MTM2XDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAg ICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyog YWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkv KiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAg IkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZv bDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1ww MTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICov Ci0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8K LSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMg Ki8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgSU5URUwg PQkJCQkvKiBJbnRlbCAqLwotICAgIHsKLSAgICAiSW50ZWwgSGlnaC1TcGVlZCBGYXhtb2RlbSIs Ci0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJ CQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIs IiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lm ZGVmIE9TMgotICAgICJBVEUxUTBWMVkwWDQmUzAmQzEmRDJcXEsxXFxWMlMyNT01MFwwMTUiLCAv KiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiQVRRMEUxWTBYNCZTMVxcSzFc XFYyUzI1PTUwXDAxNSIsCS8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwRTFZMFg0XFxL MVxcVjJTMjU9NTBcMDE1IiwJLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJ CS8qIHdha2VfcHJvbXB0ICovCi0gICAgIkFUQjErRkNMQVNTPTBcMDE1IiwJCS8qIGRtb2RlX3N0 ciAqLwotICAgICJPS1wwMTUiLAkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1 IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAw LAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRR MEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVFxcRzFcXFEzXDAxNSIsCQkJLyogaHdm Y19zdHIgKi8KLSAgICAiQVRcXEcxXFxRMVxcWDBcMDE1IiwJCS8qIHN3ZmNfc3RyICovCi0gICAg IkFUXFxHMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUXFxKMFxcTjNcIkgzXDAxNSIs CQkvKiBlY19vbl9zdHIgKi8KLSAgICAiQVRcXE4xXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwot ICAgICJBVCVDMVwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVCVDMFwwMTUiLAkJCS8q IGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAg IkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0 ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJCS8q IHNwX29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAi QVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJf c3RyICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1wwMTUi LAkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDU3NjAwTCwJ CQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9I V3xDS0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0 YXRpYwotTURNSU5GIE1VTFRJVEVDSCA9CQkJLyogTXVsdGl0ZWNoICovCi0gICAgewotICAgICJN dWx0aXRlY2ggTVQxNDMyIG9yIE1UMjgzNCBTZXJpZXMiLAotICAgICJBVFBcMDE1IiwJCQkJLyog cHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0g ICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICov Ci0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLS8qICNQMCAoPSBubyBwYXJpdHkpIGlzIG5v dCBsaXN0ZWQgaW4gdGhlIG1hbnVhbCBmb3IgbmV3ZXIgbW9kZWxzICovCi0vKiBzbyBpdCBoYXMg YmVlbiByZW1vdmVkIGZyb20gYWxsIHRocmVlIGNvcGllcyBvZiB0aGUgTXVsdGl0ZWNoIHdha2Vf c3RyICovCi0jaWZkZWYgT1MyCi0gICAgIkFURTFRMFYxWDQmUzAmQzEmRDImRTgmUTBcMDE1IiwJ Lyogd2FrZV9zdHIgKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgIkFUUTBFMVg0JlMxJkU4JlEw XDAxNSIsCQkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAiQVRRMEUxWDQmRTgmUTBcMDE1IiwJ CS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAg MCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAq LwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9t cHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBk aWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyog ZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZF NCZFNyZFOCZFMTEmRTEzXDAxNSIsCQkvKiBod2ZjX3N0ciAqLwotICAgICJBVCZFNSZFNiZFOCZF MTEmRTEzXDAxNSIsCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCZFMyZFNyZFOCZFMTAmRTEyXDAx NSIsCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCZFMVwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLwot ICAgICJBVCZFMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVQmRTE1XDAxNSIsCQkJ LyogZGNfb25fc3RyICovCi0gICAgIkFUJkUxNFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAg ICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8q IGFhX29mZl9zdHIgKi8KLSAgICAiQVQkQkEwXDAxNSIsCQkJLyogc2Jfb25fc3RyICg9ICJiYXVk IGFkanVzdCBvZmYiKSAqLwotICAgICJBVCRCQTFcMDE1IiwJCQkvKiBzYl9vZmZfc3RyICovCi0g ICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyog c3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFU TDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0 ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBp bmkyICovCi0gICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NC fENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkv KiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgU1VQUkEgPQkJCQkvKiBTdXByYSAqLwot ICAgIHsKLSAgICAiU3VwcmFGQVhNb2RlbSAxNDQgb3IgMjg4IiwKLSAgICAiQVRQXDAxNSIsCQkJ CS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAq LwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFy cyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBF MVYxTjFXMFg0WTAmUzAmQzEmRDJcXEs1UzgyPTEyOFwwMTUiLCAvKiB3YWtlX3N0ciAqLwotI2Vs c2UKLSNpZmRlZiBWTVMKLSAgICAiQVRRMEUxTjFXMFg0WTAmUzFcXEs1UzgyPTEyOFwwMTUiLAkv KiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAiQVRRMEUxTjFXMFg0WTBcXEs1UzgyPTEyOFwwMTUi LAkvKiB3YWtlX3N0ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAg IDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQg Ki8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJv bXB0ICovCi0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyog ZGlhbF9yYXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8q IGVzY19jaGFyICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQm SzNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLwotICAgICJBVCZLNFwwMTUiLAkJCS8qIHN3ZmNfc3Ry ICovCi0gICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVQmUTVcXE4zUzQ4 PTdcMDE1IiwJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVCZRMFxcTjFcMDE1IiwJCQkvKiBlY19v ZmZfc3RyICovCi0gICAgIkFUJUMxUzQ2PTEzOFwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwotICAg ICJBVCVDMFM0Nj0xMzZcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIkFUUzA9MVwwMTUi LAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICov Ci0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIg Ki8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiQVRNXDAxNSIsCQkJ CS8qIHNwX29mZl9zdHIgKi8KLSAgICAiQVRMXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAg IkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wz X3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkv KiBpbmkyICovCi0gICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tE X1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJ CQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgU1VQUkFYID0JCQkJLyogU3VwcmEg RXhwcmVzcyAqLwotICAgIHsKLSAgICAiRGlhbW9uZCBTdXByYSBFeHByZXNzIFYuOTAiLAotICAg ICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyog dG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJ CS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBP UzIKLSAgICAiQVRRMEUxVjFXMFg0JkMxJkQyJlMwXFxLNVwwMTUiLAkvKiB3YWtlX3N0ciAqLwot I2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiQVRRMEUxVzBYNCZTMVxcSzVcMDE1IiwJCS8qIHdha2Vf c3RyICovCi0jZWxzZQotICAgICJBVFEwRTFXMFg0XFxLNVwwMTUiLAkJLyogd2FrZV9zdHIgKi8K LSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9y YXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkv KiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQl c1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAg IDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAg ICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUJkszXDAxNSIsCQkJLyogaHdm Y19zdHIgKi8KLSAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCZLMFww MTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUXFxOM1wwMTUiLAkJCS8qIGVjX29uX3N0ciAq LwotICAgICJBVFxcTjFcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFUJUMyXDAxNSIs CQkJLyogZGNfb25fc3RyICovCi0gICAgIkFUJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwot ICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJ LyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJ CQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0g ICAgIkFUTVwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTFwwMTUiLAkJCQkvKiB2 b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIkFUTDNc MDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAq LwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDIzMDQwMEwsCQkJCS8qIG1heF9zcGVlZCAq LwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBh cyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBNQVhU RUNIID0JCQkvKiBNYXhUZWNoICovCi0gICAgewotICAgICJNYXhUZWNoIFhNMjg4RUEgb3IgR1ZD IEZBWE1vZGVtIiwKLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAi QVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1l ICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90 aW1lICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBFMVYxWDRZMCZTMCZDMSZEMiZMMCZNMFxcSzVc MDE1IiwgLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgIkFUUTBFMVg0WTAm TDAmTTAmUzFcXEs1XDAxNSIsCS8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwRTFYNFkw JkwwJk0wXFxLNVwwMTUiLAkJLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJ CS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICov Ci0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICov Ci0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBf c3RyICovCi0gICAgIkFUXFxRM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUXFxRMVxc WDBcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVFxcUTBcMDE1IiwJCQkvKiBub2ZjX3N0 ciAqLwotICAgICJBVFxcTjZcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiQVRcXE4wXDAx NSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVFxcTjYlQzFcMDE1IiwJCQkvKiBkY19vbl9z dHIgKi8KLSAgICAiQVRcXE42JUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMw PTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2Zm X3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9v ZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBc MDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3Ry ICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJ CQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAg IiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTE1MjAwTCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAg Q0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCi0g ICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIFJPTE0gPQkJLyog SUJNIC8gU2llbWVucyAvIFJvbG0gODAwMCwgOTAwMCwgOTc1MSBDQlggRENNICovCi0gICAgewot ICAgICJJQk0vU2llbWVucy9Sb2xtIENCWCBEYXRhIENvbW11bmljYXRpb25zIE1vZHVsZSIsCi0g ICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIiIsCQkJCQkvKiB0b25lIGNvbW1h bmQgKi8KLSAgICA2MCwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIiLAkJCQkJLyogcGF1c2Vf Y2hhcnMgKi8KLSAgICAwLAkJCQkJLyogcGF1c2VfdGltZSAqLwotICAgICJcMDE1XDAxNSIsCQkJ CS8qIHdha2Vfc3RyICovCi0gICAgNTAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiTU9ESUZZ PyIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAg ICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJDQUxMICVzXDAxNSIsCQkJLyogZGlh bF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMCwJCQkJCS8qIGVzY190 aW1lICovCi0gICAgMCwJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIiIsCQkJCQkvKiBodXBfc3Ry ICovCi0gICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3dmY19zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vbl9zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29uX3N0 ciAqLwotICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogYWFfb25f c3RyICovCi0gICAgIiIsCQkJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9v bl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNw X29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyog dm9sMV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2 b2wzX3N0ciAqLwotICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGlu aTIgKi8KLSAgICAxOTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIDAsCQkJCQkvKiBjYXBh cyAqLwotICAgIE5VTEwJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIFVTUiA9 CQkJCS8qIFVTUiBDb3VyaWVyIGFuZCBTcG9ydHN0ZXIgbW9kZW1zICovCi0gICAgewotICAgICJV UyBSb2JvdGljcyBDb3VyaWVyLCBTcG9ydHN0ZXIsIG9yIGNvbXBhdGlibGUiLAotICAgICJBVFBc MDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBj b21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBh dXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAg ICAiQVRRMEUxVjFYNCZBMyZTMCZDMSZEMiZOMCZZM1MxND0wXDAxNSIsIC8qIHdha2Vfc3RyICov Ci0jZWxzZQotI2lmZGVmIFNVTk9TNAotICAgICJBVFEwWDQmQTMmUzAmTjAmWTNTMTQ9MFwwMTUi LAkvKiB3YWtlX3N0ciAtLSBuZWVkcyAmUzAgaW4gU3VuT1MgKi8KLSNlbHNlCi0jaWZkZWYgVk1T Ci0gICAgIkFUUTBYNCZBMyZTMSZOMCZZM1MxND0wXDAxNSIsCS8qIHdha2Vfc3RyIC0tIG5lZWRz ICZTMSBpbiBWTVMgKi8KLSNlbHNlCi0gICAgIkFUUTBYNCZBMyZOMCZZM1MxND0wXDAxNSIsCQkv KiB3YWtlX3N0ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFNVTk9TNCAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJ CQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIi LAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIg Ki8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUg Ki8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1 cF9zdHIgKi8KLSAgICAiQVQmSDEmUjImSTBcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLwotICAgICJB VCZIMiZSMSZJMlwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUJkgwJlIxJkkwXDAxNSIs CQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVQmTTQmQjFcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8K LSAgICAiQVQmTTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFUJksxXDAxNSIsCQkJ LyogZGNfb25fc3RyICovCi0gICAgIkFUJkswXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAg ICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyog YWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkv KiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAg IkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZv bDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1ww MTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICov Ci0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTE1MjAwTCwJCQkJLyogbWF4X3NwZWVkICov Ci0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFz ICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLQotc3RhdGljCi1NRE1JTkYgVVNS WDIgPQkJCQkvKiBVU1IgWEotQ0MxNTYwIFgyIDU2SyAqLwotICAgIHsKLSAgICAiVVMgUm9ib3Rp Y3MgLyBNZWdhaGVydHogQ0MvWEotQ0MxNTYwIFgyIiwKLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1 bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAg IDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwot ICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBFMVYxWDQm QTMmUzAmQjImQzEmRDImTjBcMDE1IiwJLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0jaWZkZWYgVk1T Ci0gICAgIkFUUTBYNCZBMyZCMiZOMCZTMVwwMTUiLAkJLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0g ICAgIkFUUTBYNCZBMyZCMiZOMFwwMTUiLAkJLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBWTVMg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9L XDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8K LSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRp YWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVz Y190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJ CQkvKiBodXBfc3RyICovCi0gICAgIkFUJkgxJkkwXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KLSAg ICAiQVQmSDImSTJcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCZIMCZJMFwwMTUiLAkJ CS8qIG5vZmNfc3RyICovCi0gICAgIkFUJk00XDAxNSIsCQkJLyogZWNfb25fc3RyICovCi0gICAg IkFUJk0wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCZLMVwwMTUiLAkJCS8qIGRj X29uX3N0ciAqLwotICAgICJBVCZLMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRT MD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29m Zl9zdHIgKi8KLSAgICAiQVQmQjFcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiQVQmQjBc MDE1IiwJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3Ry ICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIs CQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAg ICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGln bm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTE1MjAwTCwJCQkJLyogbWF4 X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1cs IC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURN SU5GIE9MRFRCID0JCQkJLyogT2xkIFRlbGViaXRzICovCi0gICAgewotICAgICJUZWxlYml0IFRy YWlsQmxhemVyLCBUMTAwMCwgVDE1MDAsIFQyMDAwLCBUMjUwMCIsCi0gICAgIkFUUFwwMTUiLAkJ CQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQg Ki8KLSAgICA2MCwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hh cnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJcMDIx QUFBQUFUUTBFMVYxWDEmUzAmQzEmRDJTMTI9NTBTNTA9MFM1ND0zXDAxNSIsIC8qIHdha2Vfc3Ry LiAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiXDAyMUFBQUFBVFEwWDFTMTI9NTBTNTA9MFM1 ND0zXDAxNSIsIC8qIHdha2Vfc3RyLiAqLwotI2Vsc2UKLSAgICAiXDAyMUFBQUFBVFEwWDEmUzFT MTI9NTBTNTA9MFM1ND0zXDAxNSIsIC8qIHdha2Vfc3RyLiAqLwotI2VuZGlmIC8qIFZNUyAqLwot I2VuZGlmIC8qIE9TMiAqLwotICAgIDEwMCwJCQkJLyogd2FrZV9yYXRlID0gMTAwIG1zZWMgKi8K LSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2Rl X3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIs CQkJLyogZGlhbF9zdHIsIE5vdGU6IG5vIFQgb3IgUCAqLwotICAgIDgwLAkJCQkJLyogZGlhbF9y YXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKGd1YXJkIHRpbWUpICovCi0gICAgNDMs CQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0g ICAgIkFUUzU4PTJTNjg9MlwwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUUzU4PTNTNjg9 M1M2OT0wXDAxNSIsCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVFM1OD0wUzY4PTBcMDE1IiwJCQkv KiBub2ZjX3N0ciAqLwotICAgICJBVFM2Nj0xUzk1PTJcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8K LSAgICAiQVRTOTU9MFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVRTMTEwPTFTOTY9 MVwwMTUiLAkJLyogZGNfb25fc3RyICovCi0gICAgIkFUUzExMD0wUzk2PTBcMDE1IiwJCS8qIGRj X29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFU UzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAq LwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJCS8qIHNw X29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiQVRM MVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3Ry ICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1wwMTUiLAkJ CQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDE5MjAwTCwJCQkJ LyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xD S0RfU1d8Q0tEX1RCfENLRF9LUywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAq LwotfTsKLQotc3RhdGljCi1NRE1JTkYgTkVXVEIgPQkJCQkvKiBOZXcgVGVsZWJpdHMgKi8KLSAg ICB7Ci0gICAgIlRlbGViaXQgVDE2MDAsIFQzMDAwLCBRQmxhemVyLCBXb3JsZEJsYXplciwgZXRj LiIsCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUi LAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICA2MCwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAg ICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwot I2lmZGVmIE9TMgotICAgICJcMDIxQUFBQUFUUTBFMVYxWDImUzAmQzEmRDJTMTI9NTBTNTA9MFM2 MT0wUzYzPTBcMDE1IiwgLyogd2FrZV9zdHIuICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJc MDIxQUFBQUFUUTBYMiZTMVMxMj01MFM1MD0wUzYxPTBTNjM9MFwwMTUiLCAvKiB3YWtlX3N0ci4g Ki8KLSNlbHNlCi0gICAgIlwwMjFBQUFBQVRRMFgyUzEyPTUwUzUwPTBTNjE9MFM2Mz0wXDAxNSIs IC8qIHdha2Vfc3RyLiAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAg IDEwMCwJCQkJLyogd2FrZV9yYXRlID0gMTAwIG1zZWMgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyog d2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJ LyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIsIE5vdGU6 IG5vIFQgb3IgUCAqLwotICAgIDgwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEwMCwJCQkJ LyogZXNjX3RpbWUgKGd1YXJkIHRpbWUpICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwot ICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUUzU4PTJTNjg9MlwwMTUi LAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUUzU4PTNTNjg9M1wwMTUiLAkJCS8qIHN3ZmNfc3Ry ICovCi0gICAgIkFUUzU4PTBTNjg9MFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUUzE4 MD0zXDAxNSIsCQkJLyogZWNfb25fc3RyICovCi0gICAgIkFUUzE4MD0wXDAxNSIsCQkJLyogZWNf b2ZmX3N0ciAqLwotICAgICJBVFMxOTA9MVwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJB VFMxOTA9MFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyog YWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAg ICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNw X29mZl9zdHIgKi8KLSAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwy XDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIg Ki8KLSAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5p MiAqLwotICAgIDM4NDAwTCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxD S0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1d8Q0tEX1RCfENLRF9LUywgLyogY2FwYXMgKi8KLSAg ICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotCi1zdGF0 aWMKLU1ETUlORiBEVU1NWSA9IC8qIGR1bW15IGluZm9ybWF0aW9uIGZvciBtb2RlbXMgdGhhdCBh cmUgaGFuZGxlZCBlbHNld2hlcmUgKi8KLSAgICB7Ci0gICAgIihkdW1teSkiLAotICAgICIiLAkJ CQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICIiLAkJCQkJLyogdG9uZSBjb21tYW5kICovCi0g ICAgMzAsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiIiwJCQkJCS8qIHBhdXNlX2NoYXJzICov Ci0gICAgMCwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSAgICAiIiwJCQkJCS8qIHdha2Vfc3RyICov Ci0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICIiLAkJCQkJLyogd2FrZV9wcm9tcHQg Ki8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgIE5VTEwsCQkJCS8qIGRtb2RlX3By b21wdCAqLwotICAgICIlc1wwMTUiLAkJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBk aWFsX3JhdGUgKi8KLSAgICAwLAkJCQkJLyogZXNjX3RpbWUgKi8KLSAgICAwLAkJCQkJLyogZXNj X2NoYXIgKi8KLSAgICAiIiwJCQkJCS8qIGh1cF9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGh3ZmNf c3RyICovCi0gICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogbm9mY19z dHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNfb2Zm X3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBkY19v ZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGFh X29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyog c2Jfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJ Lyogc3Bfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLwotICAgICIiLAkJCQkJ Lyogdm9sMl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIiIsCQkJCQkv KiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDBMLAkJCQkJLyogbWF4 X3NwZWVkICovCi0gICAgMCwJCQkJCS8qIGNhcGFzICovCi0gICAgTlVMTAkJCQkvKiBva19mbiAq LwotfTsKLQotI2lmbmRlZiBNSU5JRElBTAotc3RhdGljCi1NRE1JTkYgUldWMzIgPQkJCQkvKiBH ZW5lcmljIFJvY2t3ZWxsIFYuMzIgKi8KLSAgICB7Ci0gICAgIkdlbmVyaWMgUm9ja3dlbGwgVi4z MiBtb2RlbSIsCS8qIEFUSTMsIEFUSTQsIGFuZCBBVEk2IGZvciBkZXRhaWxzICovCi0gICAgIkFU UFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25l IGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyog cGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgot ICAgICJBVFEwRTFWMVg0WTAmUzAmQzEmRDIlRTJcXEs1K0ZDTEFTUz0wTjFTMzc9MFwwMTUiLCAv KiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiQVRRMFg0WTAmUzElRTJcXEs1 K0ZDTEFTUz0wTjFTMzc9MFwwMTUiLCAvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAiQVRRMFg0 WTAlRTJcXEs1K0ZDTEFTUz0wTjFTMzc9MFwwMTUiLCAvKiB3YWtlX3N0ciAqLwotI2VuZGlmIC8q IFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAg ICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0 ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIsCQkJ LyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEwMCwJCQkJ LyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFUUTBIMFww MTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLwot ICAgICJBVCZLNFMzMj0xN1MzMz0xOVwwMTUiLAkJLyogc3dmY19zdHIgKi8KLSAgICAiQVQmSzBc MDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCZRNlwwMTUiLAkJCS8qIGVjX29uX3N0ciAq LwotICAgICJBVCZRMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVQlQzFcMDE1IiwJ CQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCi0g ICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkv KiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAg ICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJCQkJLyog dm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwz XDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQg Ki8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAq LwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBh cyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBSV1Yz MkIgPQkJCQkvKiBHZW5lcmljIFJvY2t3ZWxsIFYuMzJiaXMgKi8KLSAgICB7Ci0gICAgIkdlbmVy aWMgUm9ja3dlbGwgVi4zMmJpcyBtb2RlbSIsCS8qIEFUSTMsIEFUSTQsIGFuZCBBVEk2IGZvciBk ZXRhaWxzICovCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFU VFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAq LwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGlt ZSAqLwotI2lmZGVmIE9TMgotICAgICJBVFEwRTFWMVg0WTAmUzAmQzEmRDIlRTJcXEs1K0ZDTEFT Uz0wTjFTMzc9MFwwMTUiLCAvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAi QVRRMFg0WTAmUzElRTJcXEs1K0ZDTEFTUz0wTjFTMzc9MFwwMTUiLCAvKiB3YWtlX3N0ciAqLwot I2Vsc2UKLSAgICAiQVRRMFg0WTAlRTJcXEs1K0ZDTEFTUz0wTjFTMzc9MFwwMTUiLCAvKiB3YWtl X3N0ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkv KiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAi IiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0g ICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRl ICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFy ICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQmSzNcMDE1IiwJ CQkvKiBod2ZjX3N0ciAqLwotICAgICJBVCZLNFMzMj0xN1MzMz0xOVwwMTUiLAkJLyogc3dmY19z dHIgKi8KLSAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCZRNVwwMTUi LAkJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVCZRMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8K LSAgICAiQVRTJUMxXDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFUUyVDMFwwMTUiLAkJ CS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0g ICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29u X3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJ CS8qIHNwX29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAg ICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZv bDJfc3RyICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1ww MTUiLAkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDU3NjAw TCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENL RF9IV3xDS0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0K LXN0YXRpYwotTURNSU5GIFJXVjM0ID0JCQkJLyogR2VuZXJpYyBSb2Nrd2VsbCBWLjM0IERhdGEv RmF4ICovCi0gICAgewotICAgICJHZW5lcmljIFJvY2t3ZWxsIFYuMzQgbW9kZW0iLAkvKiBBVEkz LCBBVEk0LCBhbmQgQVRJNiBmb3IgZGV0YWlscyAqLwotICAgICJBVFBcMDE1IiwJCQkJLyogcHVs c2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAg MzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0g ICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRRMFYxWDRZMCZD MSZEMiZTMCVFMlxcSzUrRkNMQVNTPTBcMDE1IiwgLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0jaWZk ZWYgVk1TCi0gICAgIkFUUTBWMVg0WTAmQzEmRDImUzElRTJcXEs1K0ZDTEFTUz0wXDAxNSIsIC8q IHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwVjFYNFkwJkMxJkQyJUUyXFxLNStGQ0xBU1M9 MFwwMTUiLCAvKiB3YWtlX3N0ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAq LwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9w cm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1v ZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJ CQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJ CQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAg ICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLwotICAgICJBVCZLNFMzMj0xN1MzMz0xOVww MTUiLAkJLyogc3dmY19zdHIgKi8KLSAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwot ICAgICJBVCZRNVwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVCZRMFwwMTUiLAkJCS8q IGVjX29mZl9zdHIgKi8KLSAgICAiQVRTJUMzXDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAg IkFUUyVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyog YWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAg ICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNw X29mZl9zdHIgKi8KLSAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwy XDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIg Ki8KLSAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5p MiAqLwotICAgIDExNTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8 Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8q IG9rX2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBSV1Y5MCA9CQkJCS8qIEdlbmVyaWMgUm9j a3dlbGwgVi45MCBEYXRhL0ZheCAqLwotICAgIHsKLSAgICAiR2VuZXJpYyBSb2Nrd2VsbCBWLjkw IDU2SyBtb2RlbSIsCS8qIEFUSTMsIEFUSTQsIGFuZCBBVEk2IGZvciBkZXRhaWxzICovCi0gICAg IkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0 b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJ LyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9T MgotICAgICJBVFEwVjFOMVg0WTAmQzEmRDImUzAlRTJcXEs1K0ZDTEFTUz0wUzM3PTBcMDE1Iiwg LyogSzk1ICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwVjFOMVg0WTAmQzEmRDImUzEl RTJcXEs1K0ZDTEFTUz0wUzM3PTBcMDE1IiwgLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0gICAgIkFU UTBWMU4xWDRZMCZDMSZEMiVFMlxcSzUrRkNMQVNTPTBTMzc9MFwwMTUiLCAvKiB3YWtlX3N0ciAq LwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtl X3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJ CS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFU RCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0g ICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0g ICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQmSzNcMDE1IiwJCQkvKiBo d2ZjX3N0ciAqLwotICAgICJBVCZLNFMzMj0xN1MzMz0xOVwwMTUiLAkJLyogc3dmY19zdHIgKi8K LSAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCZRNVwwMTUiLAkJCS8q IGVjX29uX3N0ciAqLwotICAgICJBVCZRMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAi QVQlQzNcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQlQzBcMDE1IiwJCQkvKiBkY19v ZmZfc3RyICovCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMw PTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8K LSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9v bl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFc MDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAq LwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJ LyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBMLAkJCQkv KiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENL RF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGlj Ci1NRE1JTkYgTVdBVkUgPQkJCQkvKiBJQk0gTXdhdmUgKi8KLSAgICB7Ci0gICAgIklCTSBNd2F2 ZSBBZGFwdGVyIiwKLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAi QVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1l ICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90 aW1lICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBFMVYxWDRZMCZTMCZDMSZEMiZNMCZRMCZOMVxc SzNcXFQwJUUyUzI4PTBcMDE1IiwgLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0g ICAgIkFUUTBYNFkwJk0wJlMxJlEwJk4xJlMwXFxLM1xcVDAlRTJTMjg9MFwwMTUiLCAvKiB3YWtl X3N0ciAqLwotI2Vsc2UKLSAgICAiQVRRMFg0WTAmTTAmUTAmTjEmUzBcXEszXFxUMCVFMlMyOD0w XDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICov Ci0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3By b21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9k ZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJ CQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJ CQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAg ICJBVFxcUTNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3dmY19zdHIg KGl0IGRvZXNuJ3QhKSAqLwotICAgICJBVFxcUTBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAg ICJBVFxcTjdcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiQVRcXE4wXDAxNSIsCQkJLyog ZWNfb2ZmX3N0ciAqLwotICAgICJBVCVDMVwiSDNcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAg ICAiQVQlQzBcIkgwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJ CQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwot ICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICov Ci0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJ Lyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAg IkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wz X3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkv KiBpbmkyICovCi0gICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tE X1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9r X2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBURUxFUEFUSCA9CQkJLyogR2F0ZXdheSAyMDAw IFRlbGVwYXRoICovCi0gICAgewotICAgICJHYXRld2F5IDIwMDAgVGVsZXBhdGggSUkgMjguOCIs Ci0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJ CQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIs IiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lm ZGVmIE9TMgotICAgICJBVFEwRTFWMVg0JlMwJkMxJkQyJk4wJlkyI0NMUz0wUzEzPTBTMTU9MFMx OT0wXDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwWDQm TjAmUzEmWTEjQ0xTPTBTMTM9MFMxNT0wUzE5PTBcMDE1IiwgLyogd2FrZV9zdHIgKi8KLSNlbHNl Ci0gICAgIkFUUTBYNCZOMCZZMSNDTFM9MFMxMz0wUzE1PTBTMTk9MFwwMTUiLCAvKiB3YWtlX3N0 ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3 YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJ CQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAg IkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICov Ci0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICov Ci0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQmSDEmUjJcMDE1IiwJ CQkvKiBod2ZjX3N0ciAqLwotICAgICJBVCZIMiZJMlMyMj0xN1MyMz0xOVwwMTUiLAkJLyogc3dm Y19zdHIgKi8KLSAgICAiQVQmSDAmSTAmUjFcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJB VCZNNCZCMVwwMTUiLAkJCS8qIGVjX29uX3N0ciAtLSBhbHNvIGZpeGVzIHNwZWVkICovCi0gICAg IkFUJk0wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCZLMVwwMTUiLAkJCS8qIGRj X29uX3N0ciAqLwotICAgICJBVCZLMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRT MD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29m Zl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jf b2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICJBVE0w XDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0 ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIkFUTDNcMDE1IiwJ CQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLwotICAg ICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDU3NjAwTCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAg Q0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCi0g ICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIENBUkRJTkFMID0J CQkvKiBDYXJkaW5hbCAtIGJhc2VkIG9uIFJvY2t3ZWxsIFYuMzQgKi8KLSAgICB7Ci0gICAgIkNh cmRpbmFsIE1WUDI4OFggU2VyaWVzIiwJCS8qIEFUSTMsIEFUSTQsIGFuZCBBVEk2IGZvciBkZXRh aWxzICovCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFww MTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwot ICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAq LwotI2lmZGVmIE9TMgotICAgICJBVFEwRTFWMVg0VzFZMCVFMiZTMCZDMSZEMlxcSzUrRkNMQVNT PTArTVM9MTEsMVwwMTUiLCAvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAi QVRRMFg0VzFZMCZTMSVFMlxcSzUrRkNMQVNTPTArTVM9MTEsMVwwMTUiLCAvKiB3YWtlX3N0ciAq LwotI2Vsc2UKLSAgICAiQVRRMFg0VzFZMCVFMlxcSzUrRkNMQVNTPTArTVM9MTEsMVwwMTUiLCAv KiB3YWtlX3N0ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAs CQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8K LSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0 ICovCi0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlh bF9yYXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVz Y19jaGFyICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQmSzNc MDE1IiwJCQkvKiBod2ZjX3N0ciAqLwotICAgICJBVCZLNFMzMj0xN1MzMz0xOVwwMTUiLAkJLyog c3dmY19zdHIgKi8KLSAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCZR NVMzNj03UzQ4PTdcXE4zXDAxNSIsCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiQVQmUTBTNDg9MTI4 XFxOMVwwMTUiLAkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVFM0Nj0xMzglQzFcMDE1IiwJCQkv KiBkY19vbl9zdHIgKi8KLSAgICAiQVRTNDY9MTM2JUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAq LwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIs CQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIs CQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICov Ci0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJ CS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAi QVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9y ZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTE1MjAwTCwJCQkJLyogbWF4X3Nw ZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8q IGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5G IExVQ0VOVCA9CQkJCS8qIEx1Y2VudCBWZW51cyBvciBEYXRhL0ZheCBtb2RlbSAqLwotICAgIHsK LSAgICAiTHVjZW50IFZlbnVzIGNoaXBzZXQiLAotICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2Ug Y29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMzUs CQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAg MiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRRMFYxTjFYNFkwJkMx JkQyJlMwJUUyXFxLNStGQ0xBU1M9MFMzNz0wXDAxNSIsIC8qIEs5NSAqLwotI2Vsc2UKLSNpZmRl ZiBWTVMKLSAgICAiQVRRMFYxTjFYNFkwJkMxJkQyJlMxJUUyXFxLNStGQ0xBU1M9MFMzNz0wXDAx NSIsIC8qIFZNUyAqLwotI2Vsc2UKLSAgICAiQVRRMFYxTjFYNFkwJkMxJkQyJUUyXFxLNStGQ0xB U1M9MFMzNz0wXDAxNSIsIC8qIEFsbCBvdGhlcnMgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJ CS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICov Ci0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICov Ci0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBf c3RyICovCi0gICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVQmSzRTMzI9 MTdTMzM9MTlcMDE1IiwJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUJkswXDAxNSIsCQkJLyogbm9m Y19zdHIgKi8KLSAgICAiQVQmUTVcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiQVQmUTBc MDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFUJUMxXDAxNSIsCQkJLyogZGNfb25fc3Ry ICovCi0gICAgIkFUJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1 IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAq LwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3Ry ICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJ CQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0g ICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2 b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJ CQkvKiBpbmkyICovCi0gICAgMTE1MjAwTCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FU fENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0 b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIENPTkVYQU5UID0JCQkvKiBD b25leGFudCBmYW1pbHkgKi8KLSAgICB7Ci0gICAgIkNvbmV4YW50IGZhbWlseSBvZiBtb2RlbXMi LAotICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJ CQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAi LCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNp ZmRlZiBPUzIKLSAgICAiQVRRMFYxWDQmQzEmRDImUzAlRTErRkNMQVNTPTBcMDE1IiwgLyogSzk1 ICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwVjFYNCZDMSZEMiZTMSVFMStGQ0xBU1M9 MFwwMTUiLCAvKiBWTVMgKi8KLSNlbHNlCi0gICAgIkFUUTBWMVg0JkMxJkQyJUUxK0ZDTEFTUz0w XDAxNSIsIC8qIFVOSVggZXRjICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICov Ci0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3By b21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9k ZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJ CQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJ CQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAg ICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJks0UzMyPTE3UzMzPTE5XDAx NSIsCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0g ICAgIkFUJlE1XDAxNSIsCQkJLyogZWNfb25fc3RyICovCi0gICAgIkFUJlEwXDAxNSIsCQkJLyog ZWNfb2ZmX3N0ciAqLwotICAgICJBVCVDM1wwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJB VCVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFf b25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJB VE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29m Zl9zdHIgKi8KLSAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAx NSIsCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8K LSAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAq LwotICAgIDExNTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tE X0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9r X2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBQQ1RFTCA9CQkJCS8qIFBDVGVsIGNoaXBzZXQg Ki8KLSAgICB7Ci0gICAgIlBDVGVsIGNoaXBzZXQiLAotICAgICJBVFBcMDE1IiwJCQkJLyogcHVs c2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAg MzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0g ICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRRMFYxTjFYNFkw JkMxJkQyJlMwJUUyXFxLNVMzNz0wXDAxNSIsIC8qIEs5NSAqLwotI2Vsc2UKLSNpZmRlZiBWTVMK LSAgICAiQVRRMFYxTjFYNFkwJkMxJkQyJlMxJUUyXFxLNVMzNz0wXDAxNSIsIC8qIFZNUyAqLwot I2Vsc2UKLSAgICAiQVRRMFYxTjFYNFkwJkMxJkQyJUUyXFxLNVMzNz0wXDAxNSIsIC8qIFVOSVgg ZXRjICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8q IHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIi LAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAg ICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUg Ki8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIg Ki8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZLM1wwMTUiLAkJ CS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJks0UzMyPTE3UzMzPTE5XDAxNSIsCQkvKiBzd2ZjX3N0 ciAqLwotICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUXFxOM1wwMTUi LAkJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVFxcTjBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICov Ci0gICAgIkFUJUMxXDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFUJUMwXDAxNSIsCQkJ LyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAg ICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25f c3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJ Lyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAg ICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9s Ml9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAx NSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTE1MjAw TCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENL RF9IV3xDS0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0K LXN0YXRpYwotTURNSU5GIFpPT01WMzQgPQkJCS8qIFpvb20gVGVsZXBob25pY3MgVi4zNCAgKi8K LSAgICB7Ci0gICAgIlpvb20gVGVsZXBob25pY3MgVi4zNCIsCi0gICAgIkFUUFwwMTUiLAkJCQkv KiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8K LSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMg Ki8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVFEwVjFO MVcxWDQmUzAmQzEmRDJTODI9MTI4XDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZWxzZQotI2lmZGVm IFZNUwotICAgICJBVFEwVjFOMVcxWDQmUzFTODI9MTI4XDAxNSIsCS8qIHdha2Vfc3RyICovCi0j ZWxzZQotICAgICJBVFEwVjFOMVcxWDRTODI9MTI4UzAxNSIsCQkvKiB3YWtlX3N0ciAqLwotI2Vu ZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUg Ki8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRt b2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAx NSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEw MCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFU UTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0 ciAqLwotICAgICJBVCZLNFwwMTVTMzI9MTdTMzM9MTkiLAkJLyogc3dmY19zdHIgKi8KLSAgICAi QVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCZRNVwwMTUiLAkJCS8qIGVjX29u X3N0ciAqLwotICAgICJBVCZRMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVRTJUMz XDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFUUyVDMFwwMTUiLAkJCS8qIGRjX29mZl9z dHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFww MTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAg ICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0 ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiQVRMMVwwMTUi LAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCi0g ICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1wwMTUiLAkJCQkvKiBp Z25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDU3NjAwTCwJCQkJLyogbWF4 X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1cs IC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURN SU5GIFpPT01WOTAgPQkJCS8qIFpPT00gVi45MCAqLwotICAgIHsKLSAgICAiWm9vbSBWLjkwIDU2 SyIsCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUi LAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAg ICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwot I2lmZGVmIE9TMgotICAgICJBVFEwVjFOMVg0WTAmQzEmRDImUzAlRTJcXEs1K0ZDTEFTUz0wUzM3 PTBcMDE1IiwgLyogSzk1ICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwVjFOMVg0WTAm QzEmRDImUzElRTJcXEs1K0ZDTEFTUz0wUzM3PTBcMDE1IiwgLyogVk1TICovCi0jZWxzZQotICAg ICJBVFEwVjFOMVg0WTAmQzEmRDIlRTJcXEs1K0ZDTEFTUz0wUzM3PTBcMDE1IiwgLyogQWxsIG90 aGVycyAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkv KiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAi IiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0g ICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRl ICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFy ICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQmSzNcMDE1IiwJ CQkvKiBod2ZjX3N0ciAqLwotICAgICJBVCZLNFMzMj0xN1MzMz0xOVwwMTUiLAkJLyogc3dmY19z dHIgKi8KLSAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCZRNVwwMTUi LAkJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVCZRMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8K LSAgICAiQVQlQzFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQlQzBcMDE1IiwJCQkv KiBkY19vZmZfc3RyICovCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAg ICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9z dHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkv KiBzcF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAg IkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wy X3N0ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1 IiwJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBM LAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tE X0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQot c3RhdGljCi1NRE1JTkYgWk9PTVY5MiA9CQkJLyogWk9PTSBWLjkyICovCi0gICAgewotICAgICJa b29tIFYuOTIgd2l0aCBWLjQ0IGNvbXByZXNzaW9uIiwKLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1 bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAg IDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwot ICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBWMU4xWDRZ MCZDMSZEMiZTMCVFMlxcSzUrRkNMQVNTPTBTMzc9MCtNUz1WOTJcMDE1IiwgLyogSzk1ICovCi0j ZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwVjFOMVg0WTAmQzEmRDImUzElRTJcXEs1K0ZDTEFT Uz0wUzM3PTArTVM9VjkyXDAxNSIsIC8qIFZNUyAqLwotI2Vsc2UKLSAgICAiQVRRMFYxTjFYNFkw JkMxJkQyJUUyXFxLNStGQ0xBU1M9MFMzNz0wK01TPVY5MlwwMTUiLCAvKiBBbGwgb3RoZXJzICov Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdha2Vf cmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJ LyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVRE JXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAg ICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAg ICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3 ZmNfc3RyICovCi0gICAgIkFUJks0UzMyPTE3UzMzPTE5XDAxNSIsCQkvKiBzd2ZjX3N0ciAqLwot ICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUJlE1XDAxNSIsCQkJLyog ZWNfb25fc3RyICovCi0gICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJB VCVDMStEQ1M9MSwxXDAxNSIsCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQlQzBcMDE1IiwJCQkv KiBkY19vZmZfc3RyICovCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAg ICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9z dHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkv KiBzcF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAg IkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wy X3N0ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1 IiwJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBM LAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tE X0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQot Ci0vKgotICBOb3cgdGhlICJvbGQiIG1vZGVtcywgYWxsIGdyb3VwZWQgdG9nZXRoZXIsIGFuZCBh bHNvIHdpdGhpbgotICAiaWYgbm90IGRlZmluZWQgTUlOSURJQUwiLi4uCi0qLwotI2lmZGVmIE9M RE1PREVNUwotCi1zdGF0aWMKLU1ETUlORiBDRVJNRVRFSyA9CS8qIEluZm9ybWF0aW9uIGZvciAi Q2VybWV0ZWsgSW5mby1NYXRlIDIxMiBBIiBtb2RlbSAqLwotICAgIHsKLSAgICAiQ2VybWV0ZWsg SW5mby1NYXRlIDIxMiBBIiwKLSAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAi IiwJCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDIwLAkJCQkJLyogZGlhbF90aW1lICovCi0g ICAgIkJiUHBUdCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMCwJCQkJCS8qIHBhdXNlX3Rp bWUgKi8KLSAgICAiICBYWVwwMTZSXDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KLSAgICAyMDAsCQkJ CS8qIHdha2VfcmF0ZSAqLwotICAgICIiLAkJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJ CQkJCS8qIGRtb2RlX3N0ciAqLwotICAgIE5VTEwsCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAg ICJcMDE2RCAnJXMnXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAyMDAsCQkJCS8qIGRpYWxf cmF0ZSAqLwotICAgIDAsCQkJCQkvKiBlc2NfdGltZSAqLwotICAgIDAsCQkJCQkvKiBlc2NfY2hh ciAqLwotICAgICIiLAkJCQkJLyogaHVwX3N0ciAqLwotICAgICIiLAkJCQkJLyogaHdmY19zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAq LwotICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vZmZfc3Ry ICovCi0gICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29mZl9z dHIgKi8KLSAgICAiIiwJCQkJCS8qIGFhX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogYWFfb2Zm X3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9v ZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBz cF9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2 b2wyX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGln bm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTIwMEwsCQkJCS8qIG1heF9z cGVlZCAqLwotICAgIDAsCQkJCQkvKiBjYXBhcyAqLwotICAgIE5VTEwJCQkJLyogb2tfZm4gKi8K LX07Ci0KLXN0YXRpYwotTURNSU5GIERGMDMgPQkJLyogaW5mb3JtYXRpb24gZm9yICJERUMgREYw My1BQyIgbW9kZW0gKi8KLSAgICB7Ci0gICAgIkRpZ2l0YWwgREYwMy1BQyIsCi0gICAgIiIsCQkJ CQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIiIsCQkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAg ICAyNywJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICI9IiwJCQkJLyogcGF1c2VfY2hhcnMgKi8K LSAgICAxNSwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSAgICAiXDAwMVwwMDIiLAkJCQkvKiB3YWtl X3N0ciAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiIiwJCQkJCS8qIHdha2Vf cHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICBOVUxMLAkJCQkvKiBk bW9kZV9wcm9tcHQgKi8KLSAgICAiJXMiLAkJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkv KiBkaWFsX3JhdGUgKi8KLSAgICAwLAkJCQkJLyogZXNjX3RpbWUgKi8KLSAgICAwLAkJCQkJLyog ZXNjX2NoYXIgKi8KLSAgICAiIiwJCQkJCS8qIGh1cF9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGh3 ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogbm9m Y19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNf b2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBk Y19vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8q IGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJ Lyogc2Jfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICIiLAkJ CQkJLyogc3Bfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLwotICAgICIiLAkJ CQkJLyogdm9sMl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIiIsCQkJ CQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDBMLAkJCQkJLyog bWF4X3NwZWVkICovCi0gICAgMCwJCQkJCS8qIGNhcGFzICovCi0gICAgTlVMTAkJCQkvKiBva19m biAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgREYxMDAgPQkJLyogaW5mb3JtYXRpb24gZm9yICJE RUMgREYxMDAtc2VyaWVzIiBtb2RlbSAqLwotCQkJLyoKLQkJCSAqIFRoZSB0ZWxlcGhvbmUgIm51 bWJlciIgY2FuIGluY2x1ZGUgIlAicyBhbmQvb3IgIlQicwotCQkJICogd2l0aGluIGl0IHRvIGlu ZGljYXRlIHRoYXQgc3Vic2VxdWVudCBkaWdpdHMgYXJlCi0JCQkgKiB0byBiZSBkaWFsZWQgdXNp bmcgcHVsc2Ugb3IgdG9uZSBkaWFsaW5nLiAgVGhlCi0JCQkgKiBtb2RlbSBkZWZhdWx0cyB0byBw dWxzZSBkaWFsaW5nLiAgWW91IG1heSBtb2RpZnkKLQkJCSAqIHRoZSBkaWFsIHN0cmluZyBiZWxv dyB0byBleHBsaWNpdGx5IGRlZmF1bHQgYWxsCi0JCQkgKiBkaWFsaW5nIHRvIHB1bHNlIG9yIHRv bmUsIGJ1dCBkb2luZyBzbyBwcmV2ZW50cwotCQkJICogdGhlIHVzZSBvZiBwaG9uZSBudW1iZXJz IHRoYXQgeW91IG1heSBoYXZlIHN0b3JlZAotCQkJICogaW4gdGhlIG1vZGVtJ3MgbWVtb3J5Lgot CQkJICovCi0gICAgewotICAgICJEaWdpdGFsIERGLTEwMCIsCi0gICAgIiIsCQkJCQkvKiBwdWxz ZSBjb21tYW5kICovCi0gICAgIiIsCQkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzMCwJCQkJ CS8qIGRpYWxfdGltZSAqLwotICAgICI9IiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAxNSwJ CQkJCS8qIHBhdXNlX3RpbWUgKi8KLSAgICAiXDAwMSIsCQkJCS8qIHdha2Vfc3RyICovCi0gICAg MCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICIiLAkJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAg ICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgIE5VTEwsCQkJCS8qIGRtb2RlX3Byb21wdCAq LwotICAgICIlcyMiLAkJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUg Ki8KLSAgICAwLAkJCQkJLyogZXNjX3RpbWUgKi8KLSAgICAwLAkJCQkJLyogZXNjX2NoYXIgKi8K LSAgICAiIiwJCQkJCS8qIGh1cF9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCi0g ICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KLSAg ICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLwot ICAgICIiLAkJCQkJLyogZGNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICov Ci0gICAgIiIsCQkJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGFhX29mZl9zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0 ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb25f c3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sMl9z dHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBpZ25vcmVk dCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDBMLAkJCQkJLyogbWF4X3NwZWVkICov Ci0gICAgMCwJCQkJCS8qIGNhcGFzICovCi0gICAgTlVMTAkJCQkvKiBva19mbiAqLwotfTsKLQot c3RhdGljCi1NRE1JTkYgREYyMDAgPQkJLyogaW5mb3JtYXRpb24gZm9yICJERUMgREYyMDAtc2Vy aWVzIiBtb2RlbSAqLwotCQkJLyoKLQkJCSAqIFRoZSB0ZWxlcGhvbmUgIm51bWJlciIgY2FuIGlu Y2x1ZGUgIlAicyBhbmQvb3IgIlQicwotCQkJICogd2l0aGluIGl0IHRvIGluZGljYXRlIHRoYXQg c3Vic2VxdWVudCBkaWdpdHMgYXJlCi0JCQkgKiB0byBiZSBkaWFsZWQgdXNpbmcgcHVsc2Ugb3Ig dG9uZSBkaWFsaW5nLiAgVGhlCi0JCQkgKiBtb2RlbSBkZWZhdWx0cyB0byBwdWxzZSBkaWFsaW5n LiAgWW91IG1heSBtb2RpZnkKLQkJCSAqIHRoZSBkaWFsIHN0cmluZyBiZWxvdyB0byBleHBsaWNp dGx5IGRlZmF1bHQgYWxsCi0JCQkgKiBkaWFsaW5nIHRvIHB1bHNlIG9yIHRvbmUsIGJ1dCBkb2lu ZyBzbyBwcmV2ZW50cwotCQkJICogdGhlIHVzZSBvZiBwaG9uZSBudW1iZXJzIHRoYXQgeW91IG1h eSBoYXZlIHN0b3JlZAotCQkJICogaW4gdGhlIG1vZGVtJ3MgbWVtb3J5LgotCQkJICovCi0gICAg ewotICAgICJEaWdpdGFsIERGLTIwMCIsCi0gICAgIiIsCQkJLyogcHVsc2UgY29tbWFuZCAqLwot ICAgICIiLAkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDMwLAkJCS8qIGRpYWxfdGltZSAqLwot ICAgICI9VyIsCQkvKiBwYXVzZV9jaGFycyAqLwkvKiA9OiBzZWNvbmQgdG9uZTsgVzogNSBzZWNz ICovCi0gICAgMTUsCQkJLyogcGF1c2VfdGltZSAqLwkvKiB3b3JzdCBjYXNlICovCi0gICAgIlww MDIiLAkJLyogd2FrZV9zdHIgKi8JCS8qIGFsbG93IHN0b3JlZCBudW1iZXIgdXNhZ2UgKi8KLSAg ICAwLAkJCS8qIHdha2VfcmF0ZSAqLwotICAgICIiLAkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAg IiIsCQkJLyogZG1vZGVfc3RyICovCi0gICAgTlVMTCwJCS8qIGRtb2RlX3Byb21wdCAqLwotI2lm ZGVmIENPTU1FTlQKLSAgICAiJXMhIiwJCS8qIGRpYWxfc3RyICovCi0jZWxzZQotICAgICIgICBk ICVzXDAxNSIsCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUg Ki8KLSAgICAwLAkJCQkJLyogZXNjX3RpbWUgKi8KLSAgICAwLAkJCQkJLyogZXNjX2NoYXIgKi8K LSAgICAiIiwJCQkJCS8qIGh1cF9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCi0g ICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KLSAg ICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLwot ICAgICIiLAkJCQkJLyogZGNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICov Ci0gICAgIiIsCQkJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGFhX29mZl9zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0 ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb25f c3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sMl9z dHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBpZ25vcmVk dCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDBMLAkJCQkJLyogbWF4X3NwZWVkICov Ci0gICAgMCwJCQkJCS8qIGNhcGFzICovCi0gICAgTlVMTAkJCQkvKiBva19mbiAqLwotfTsKLQot c3RhdGljCi1NRE1JTkYgR0RDID0JCS8qIGluZm9ybWF0aW9uIGZvciAiR2VuZXJhbERhdGFDb21t IDIxMkEvRUQiIG1vZGVtICovCi0gICAgewotICAgICJHZW5lcmFsRGF0YUNvbW0gMjEyQS9FRCIs Ci0gICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIiIsCQkJCQkvKiB0b25lIGNv bW1hbmQgKi8KLSAgICAzMiwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIlIiwJCQkJLyogcGF1 c2VfY2hhcnMgKi8KLSAgICAzLAkJCQkJLyogcGF1c2VfdGltZSAqLwotICAgICJcMDE1XDAxNSIs CQkJCS8qIHdha2Vfc3RyICovCi0gICAgNTAwLAkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiJCIs CQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIkRcMDE1IiwJCQkJLyogZG1vZGVfc3RyICovCi0g ICAgIjoiLAkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiVCVzXDAxNSIsCQkJCS8qIGRpYWxf c3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDAsCQkJCQkvKiBlc2NfdGlt ZSAqLwotICAgIDAsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICIiLAkJCQkJLyogaHVwX3N0ciAq LwotICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICov Ci0gICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNfb25fc3RyICov Ci0gICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkY19vbl9zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGFhX29uX3N0 ciAqLwotICAgICIiLAkJCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25f c3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9v ZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZv bDFfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9s M19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmky ICovCi0gICAgMTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIDAsCQkJCQkvKiBjYXBhcyAq LwotICAgIE5VTEwJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIFBFTlJJTCA9 CQkvKiBpbmZvcm1hdGlvbiBmb3IgIlBlbnJpbCIgbW9kZW0gKi8KLSAgICB7Ci0gICAgIlBlbnJp bCBtb2RlbSIsCi0gICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIiIsCQkJCQkv KiB0b25lIGNvbW1hbmQgKi8KLSAgICA1MCwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIiLAkJ CQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAwLAkJCQkJLyogcGF1c2VfdGltZSAqLwotICAgICJc MDE1XDAxNSIsCQkJCS8qIHdha2Vfc3RyICovCi0gICAgMzAwLAkJCQkvKiB3YWtlX3JhdGUgKi8K LSAgICAiPiIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgImtcMDE1IiwJCQkJLyogZG1vZGVf c3RyICovCi0gICAgIjoiLAkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiJXNcMDE1IiwJCQkJ LyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMCwJCQkJCS8q IGVzY190aW1lICovCi0gICAgMCwJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIiIsCQkJCQkvKiBo dXBfc3RyICovCi0gICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3dm Y19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19v bl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRj X29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyog YWFfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkv KiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIHNwX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICIiLAkJ CQkJLyogdm9sMV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIiIsCQkJ CQkvKiB2b2wzX3N0ciAqLwotICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJ CS8qIGluaTIgKi8KLSAgICAwTCwJCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIDAsCQkJCQkvKiBj YXBhcyAqLwotICAgIE5VTEwJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIFJB Q0FMID0JCQkJLyogUmFjYWwgVmFkaWMgVkE0NDkyRSAqLwotICAgIHsKLSAgICAiUmFjYWwgVmFk aWMgVkE0NDkyRSIsCi0gICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIiIsCQkJ CQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkvKiBkaWFsX3RpbWUgKG1hbnVhbCBzYXlz IG1vZGVtIGlzIGhhcmR3aXJlZCB0byA2MCkgKi8KLSAgICAiS2siLAkJCQkvKiBwYXVzZV9jaGFy cyAqLwotICAgIDUsCQkJCQkvKiBwYXVzZV90aW1lICovCi0gICAgIlwwMDVcMDE1IiwJCQkJLyog d2FrZV9zdHIsIF5FXk0gKi8KLSAgICA1MCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICIqIiwJ CQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiRFwwMTUiLAkJCQkvKiBkbW9kZV9zdHIgKi8KLSAg ICAiPyIsCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICIlc1wwMTUiLAkJCQkvKiBkaWFsX3N0 ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGlt ZSAqLwotICAgIDUsCQkJCQkvKiBlc2NfY2hhciwgXkUgKi8KLSAgICAiXDAwM1wwMDQiLAkJCQkv KiBodXBfc3RyLCBeQ15EICovCi0gICAgMCwJCQkJCS8qIGh3ZmNfc3RyICovCi0gICAgIiIsCQkJ CQkvKiBzd2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIGVjX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICIiLAkJ CQkJLyogZGNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIiIs CQkJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAg ICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb25fc3RyICovCi0g ICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KLSAg ICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLwotICAg ICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDBMLAkJCQkJLyogbWF4X3NwZWVkICovCi0gICAgMCwJ CQkJCS8qIGNhcGFzICovCi0gICAgTlVMTAkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1N RE1JTkYgVkVOVEVMID0JCQkJLyogSW5mb3JtYXRpb24gZm9yIFZlbi1UZWwgbW9kZW0gKi8KLSAg ICB7Ci0gICAgIlZlbi1UZWwiLAotICAgICIiLAkJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAg ICIiLAkJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMjAsCQkJCQkvKiBkaWFsX3RpbWUgKi8K LSAgICAiJSIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgNSwJCQkJCS8qIHBhdXNlX3RpbWUg Ki8KLSAgICAiXDAxNVwwMTVcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLwotICAgIDMwMCwJCQkJLyog d2FrZV9yYXRlICovCi0gICAgIiQiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICJLXDAxNSIs CQkJCS8qIGRtb2RlX3N0ciAod2FzICIiKSAqLwotICAgICJOdW1iZXIgdG8gY2FsbDogIiwJCQkv KiBkbW9kZV9wcm9tcHQgKHdhcyBOVUxMKSAqLwotICAgICIlc1wwMTUiLAkJCQkvKiBkaWFsX3N0 ciAod2FzICI8SyVzXHI+IikgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMCwJ CQkJCS8qIGVzY190aW1lICovCi0gICAgMCwJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIiIsCQkJ CQkvKiBodXBfc3RyICovCi0gICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLwotICAgICIiLAkJCQkJ Lyogc3dmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCi0gICAgIiIsCQkJCQkv KiBlY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIGRjX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICIiLAkJ CQkJLyogYWFfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIs CQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNwX29uX3N0ciAqLwotICAg ICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCi0gICAg IiIsCQkJCQkvKiB2b2wzX3N0ciAqLwotICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8KLSAgICAi IiwJCQkJCS8qIGluaTIgKi8KLSAgICAwTCwJCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIDAsCQkJ CQkvKiBjYXBhcyAqLwotICAgIE5VTEwJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURN SU5GIENPTkNPUkQgPQkvKiBJbmZvIGZvciBDb25kb3IgQ0RTIDIyMCAyNDAwYiBtb2RlbSAqLwot ICAgIHsKLSAgICAiQ29uY29yZCBDb25kb3IgQ0RTIDIyMCAyNDAwYiIsCi0gICAgIiIsCQkJCQkv KiBwdWxzZSBjb21tYW5kICovCi0gICAgIiIsCQkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAz NSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAg ICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotICAgICJcMDE1XDAxNSIsCQkJCS8qIHdha2Vfc3Ry ICovCi0gICAgMjAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiQ0RTID4iLAkJCQkvKiB3YWtl X3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgTlVMTCwJCQkJLyog ZG1vZGVfcHJvbXB0ICovCi0gICAgIjxEIE0lc1wwMTU+IiwJCQkvKiBkaWFsX3N0ciAqLwotICAg IDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAwLAkJCQkJLyogZXNjX3RpbWUgKi8KLSAgICAw LAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiIiwJCQkJCS8qIGh1cF9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIGh3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLwotICAgICIiLAkJ CQkJLyogbm9mY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLwotICAgICIiLAkJ CQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb25fc3RyICovCi0gICAgIiIs CQkJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAg ICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLwot ICAgICIiLAkJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLwot ICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCi0g ICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDI0 MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICAwLAkJCQkJLyogY2FwYXMgKi8KLSAgICBOVUxM CQkJCS8qIG9rX2ZuICovCi19OwotI2VuZGlmIC8qIE9MRE1PREVNUyAqLwotCi1zdGF0aWMKLU1E TUlORiBNSUNST0NPTSA9CS8qIE1pY3JvY29tIG1vZGVtcyBpbiBuYXRpdmUgU1ggbW9kZSAqLwot CQkJLyogKGxvbmcgYW5zd2VyIG9ubHkpICovCi17Ci0gICAgIk1pY3JvY29tIE1OUCBtb2RlbXMg aW4gU1ggY29tbWFuZCBtb2RlIiwKLSAgICAiRFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAq LwotICAgICJEVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRp YWxfdGltZSAqLwotICAgICIsIUAiLAkJLyogcGF1c2VfY2hhcnMgKCEgYW5kIEAgYXJlbid0IHB1 cmUgcGF1c2VzKSAqLwotICAgIDMsCQkJCQkvKiBwYXVzZV90aW1lICovCi0vKgotICBUaGUgZm9s bG93aW5nIHNldHMgOCBiaXRzLCBubyBwYXJpdHksIEJSRUFLIHBhc3N0aHJ1LCBhbmQgU0UwIGRp c2FibGVzIHRoZQotICBlc2NhcGUgY2hhcmFjdGVyLCB3aGljaCBpcyBhIHNpbmdsZSBjaGFyYWN0 ZXIgd2l0aCBubyBndWFyZCB0aW1lLCB0b3RhbGx5Ci0gIHVuc2FmZSwgc28gd2UgaGF2ZSBubyBj aG9pY2UgYnV0IHRvIGRpc2FibGUgaXQuICBFc3BlY2lhbGx5IHNpbmNlLCBieQotICBkZWZhdWx0 LCBpdCBpcyBDdHJsLUEsIHdoaWNoIGlzIEtlcm1pdCdzIHBhY2tldC1zdGFydCBjaGFyYWN0ZXIu ICBXZSB3b3VsZAotICBjaGFuZ2UgaXQgdG8gc29tZXRoaW5nIGVsc2UsIHdoaWNoIHdvdWxkIGVu YWJsZSAibWRtaHVwKCkiLCBidXQgdGhlIHVzZXIKLSAgd291bGRuJ3Qga25vdyBhYm91dCBpdC4g IFZlcnkgYmFkLiAgTm90ZTogU0UxIHNldHMgaXQgdG8gQ3RybC1BLCBTRTIKLSAgc2V0cyBpdCB0 byBDdHJsLUIsIGV0YyAoMS4uMzEgYWxsb3dlZCkuICBBbHNvIFNFL1Egc2V0cyBpdCB0byAiUSIu Ci0qLwotICAgICJTRTA7UzFQNDtTQlJLNVwwMTUiLAkJLyogd2FrZV9zdHIgKi8KLSAgICAxMDAs CQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICIhIiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAi IiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgIE5VTEwsCQkJCS8qIGRtb2RlX3Byb21wdCAqLwot ICAgICJEJXNcMDE1IiwJCQkJLyogZGlhbF9zdHIgLSBudW1iZXIgdXAgdG8gMzkgY2hhcnMgKi8K LSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMCwJCQkJCS8qIGVzY190aW1lICovCi0g ICAgMCwJCQkJCS8qIGVzY19jaGFyIC0gd2UgY2FuJ3QgdXNlIHRoaXMgKi8KLSAgICAiIiwJCQkJ CS8qIGh1cF9zdHIgLSBpdCdzICJIIiBidXQgY2FuJ3QgdXNlICovCi0gICAgIlNGMTNcMDE1IiwJ CQkJLyogaHdmY19zdHIgKi8KLSAgICAiU0YxMVwwMTUiLAkJCQkvKiBzd2ZjX3N0ciAqLwotICAg ICJTRjEwXDAxNSIsCQkJCS8qIG5vZmNfc3RyICovCi0gICAgIkJBT0ZGO1NNQVVUXDAxNSIsCQkJ LyogZWNfb25fc3RyICovCi0gICAgIkJBT047U01ESVJcMDE1IiwJCQkvKiBlY19vZmZfc3RyICov Ci0gICAgIkNPTVAxXDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkNPTVAwXDAxNSIsCQkJ LyogZGNfb2ZmX3N0ciAqLwotICAgICJBQSIsCQkJCS8qIGFhX29uX3N0ciAqLwotICAgICIiLAkJ CQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIs CQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIlNBMiIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAg ICAiU0EwIiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLwot ICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCi0g ICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDBM LAkJCQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENL RF9TV3xDS0RfS1MsIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0K LXN0YXRpYwotTURNSU5GIE1JQ1JPTElOSyA9CQkJLyogTWljcm9MaW5rIC4uLiAqLwotICAgIHsJ CQkJCS8qIDE0LjRUUSxUTCxQQzsyOC44VFEsVFFWOzI0NDBUL1RSICovCi0gICAgIkVMU0EgTWlj cm9MaW5rIDE0LjQsIDI4LjgsIDMzLjYgb3IgNTZLIiwgLyogRUxTQSBHbWJILCBBYWNoZW4gKi8K LSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJ CS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwi LAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZk ZWYgT1MyCi0gICAgIkFUUTBFMVYxWDQmUzBcXEQwJkMxJkQyXFxLNVwwMTUiLAkvKiB3YWtlX3N0 ciAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiQVRRMFg0JlMxXFxLNVwwMTUiLAkJLyogd2Fr ZV9zdHIgKi8KLSNlbHNlCi0gICAgIkFUUTBYNFxcSzVcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLwot I2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3Jh dGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8q IGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVz XDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAg MTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAg IkFUUTBIXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVFxcUTNcMDE1IiwJCQkvKiBod2Zj X3N0ciAqLwotICAgICJBVFxcUTFcXFgwXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KLSAgICAiQVRc XFEwXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVRcXE4zXDAxNSIsCQkJLyogZWNfb25f c3RyICovCi0gICAgIkFUXFxOMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVQlQzNc MDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3Ry ICovCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1 IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIlxcSjAiLAkJCQkvKiBzYl9vbl9zdHIgKD8pICov Ci0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bf b25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwx XDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIg Ki8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJ CS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgNTc2MDBMLAkJCQkv KiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENL RF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGlj Ci1NRE1JTkYgVUxJTktWMjUwID0JCQkvKiBNaWNyb0xpbmsgVi4yNTAgKi8KLSAgICB7CQkJCQkv KiA1NktmbGV4LCBWLjkwOyBWLjI1MCBjb21tYW5kIHNldCAqLwotICAgICJFTFNBIE1pY3JvTGlu ayA1NksgVi4yNTAiLAkJLyogRUxTQSBHbWJILCBBYWNoZW4gKi8KLSAgICAiQVRQXDAxNSIsCQkJ CS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAq LwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFy cyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0gICAgLyogXEQw ID0gRFNSICYgQ1RTIGFsd2F5cyBvbiBidXQgaHdmYyBvdmVycmlkZXMgb24gQ1RTLiAqLwotICAg ICJBVFEwRTFWMVg0JlMwXFxEMCZDMSZEMlwwMTUiLAkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNp ZmRlZiBWTVMKLSAgICAiQVRRMFg0JlMxXDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0g ICAgIkFUUTBYNFwwMTUiLAkJCS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5k aWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJ CQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIs CQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAq LwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAq LwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVw X3N0ciAqLwotICAgICJBVCtJRkM9MiwyXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVQr SUZDPTEsMVwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUK0lGQz0wLDBcMDE1IiwJCQkv KiBub2ZjX3N0ciAqLwotICAgICJBVCtFUz0zLDBcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KLSAg ICAiQVQrRVM9MSwwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCtEUz0zLDAsMjA0 OCwzMlwwMTUiLAkJLyogZGNfb25fc3RyICovCi0gICAgIkFUK0RTPTAsMFwwMTUiLAkJCS8qIGRj X29mZl9zdHIgKi8KLQotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAi QVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3Ry ICg/KSAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJ CS8qIHNwX29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAg ICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZv bDJfc3RyICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1ww MTUiLAkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDU3NjAw TCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENL RF9IV3xDS0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0j ZW5kaWYgLyogTUlOSURJQUwgKi8KLQotc3RhdGljCi1NRE1JTkYgSVRVVFYyNTAgPQkJCS8qIElU VS1UIFYuMjUwIGNvbmZvcm1pbmcgbW9kZW0gKi8KLXsKLSAgICAiQW55IElUVS1UIFYuMjV0ZXIv Vi4yNTAgY29uZm9ybWFudCBtb2RlbSIsCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21t YW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJ CS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJ CQkJLyogcGF1c2VfdGltZSAqLwotICAgICJBVFEwRTFWMVg0JkMxJkQyXDAxNSIsCQkvKiB3YWtl X3N0ciAobm8gJlNuIGluIFYuMjUpICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAg ICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3Ry ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkv KiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkv KiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAx NSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCtJRkM9MiwyXDAxNSIsCQkJLyogaHdmY19zdHIg Ki8KLSAgICAiQVQrSUZDPTEsMVwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUK0lGQz0w LDBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCtFUz0zLDAsMjsrRUI9MSwwLDMwXDAx NSIsCS8qIGVjX29uX3N0ciAqLwotICAgICJBVCtFUz0wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAq LwotICAgICJBVCtEUz0zLDBcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQrRFM9MCww XDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9z dHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJ Lyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFc MDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0 ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJ CQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAg ICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0g ICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xD S0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAq LwotfTsKLQotI2lmbmRlZiBDS19UQVBJCi1zdGF0aWMKLSNlbmRpZiAvKiBDS19UQVBJICovCi1N RE1JTkYgR0VORVJJQyA9CQkJLyogR2VuZXJpYyBoaWdoIHNwZWVkIC4uLiAqLwotICAgIHsKLSAg ICAiR2VuZXJpYyBoaWdoLXNwZWVkIEFUIGNvbW1hbmQgc2V0IiwKLSAgICAiQVRQXDAxNSIsCQkJ CS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAq LwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFy cyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0gICAgIiIsCQkJCQkvKiB3YWtlX3N0 ciAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiIiwJCQkJCS8qIHdha2VfcHJv bXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2Rl X3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJ CS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJ CQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAg IiIsCQkJCQkvKiBod2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KLSAgICAi IiwJCQkJCS8qIG5vZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29uX3N0ciAqLwotICAg ICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9z dHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJ Lyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIiIsCQkJ CQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIHZvbDFfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLwotICAgICIiLAkJ CQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLwotICAg ICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDExNTIwMCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAg Q0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IVywgLyogY2FwYXMgKi8KLSAgICBnZXRv awkJCQkvKiBva19mbiAqLwotfTsKLQotI2lmbmRlZiBNSU5JRElBTAotc3RhdGljCi1NRE1JTkYg WEpBQ0sgPQkJCQkvKiBNZWdhaGVydHogWC1KYWNrICovCi0gICAgewotICAgICJNZWdhaGVydHog WC1KYWNrIFhKMzE0NCAvIENDNjE0NCIsCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21t YW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJ CS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJ CQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVFEwRTFWMVg0TjEmQzEmRDJc XEs1XDAxNSIsCS8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwWDROMVxcSzVcMDE1IiwJ CQkvKiB3YWtlX3N0ciAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3Jh dGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8q IGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVz XDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAg MTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAg IkFUUTBIXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNf c3RyICovCi0gICAgIkFUJks0XDAxNSIsCQkJLyogc3dmY19zdHIgKi8KLSAgICAiQVQmSzBcMDE1 IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVFxcTjMmUTVcMDE1IiwJCQkvKiBlY19vbl9zdHIg Ki8KLSAgICAiQVRcXE4xJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCVDM1ww MTUiLAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIg Ki8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUi LAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIi LAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAq LwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiQVRMMVwwMTUiLAkJ CQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCi0gICAg IkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25v cmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDU3NjAwTCwJCQkJLyogbWF4X3Nw ZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8q IGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5G IFNQSVJJVElJID0JCQkvKiBRdWlja0NvbW0gU3Bpcml0IElJICovCi0gICAgewotICAgICJRdWlj a0NvbW0gU3Bpcml0IElJIiwKLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8K LSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlh bF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBw YXVzZV90aW1lICovCi0gICAgIkFUJkZcMDE1IiwJCQkJLyogd2FrZV9zdHIgKi8KLSAgICAwLAkJ CQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0g ICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAq LwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxf cmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2Nf Y2hhciAqLwotICAgICJBVFEwSFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQqRjNcMDE1 IiwJCQkvKiBod2ZjX3N0ciAqLwotICAgICJBVCpGMlwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCi0g ICAgIkFUKkYwXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVQqRTZcMDE1IiwJCQkvKiBl Y19vbl9zdHIgKi8KLSAgICAiQVQqRTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFU KkU5XDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFUKkUwXDAxNSIsCQkJLyogZGNfb2Zm X3N0ciAqLwotICAgICJBVFMwPTJcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0w XDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0g ICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25f c3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAx NSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8K LSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8q IGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgNTc2MDBMLAkJCQkvKiBt YXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9T VywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1N RE1JTkYgTU9OVEFOQSA9IHsJCQkvKiBNb3Rvcm9sYSBNb250YW5hICovCi0gICAgIk1vdG9yb2xh IE1vbnRhbmEiLAkJCS8qIE5hbWUgKi8KLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1h bmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJ LyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJ CQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBFMVYxWDQmUzAmQzEmRDJc XEs1XFxWMVwwMTUiLAkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiQVRR MEUxWDQmUzFcXEs1XFxWMVwwMTUiLAkJLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0gICAgIkFUUTBF MVg0XFxLNVxcVjFcMDE1IiwJCS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5k aWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJ CQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIs CQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAq LwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAq LwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVw X3N0ciAqLwotICAgICJBVFxcUTNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLwotICAgICJBVFxcUTFc MDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVFxcUTBcMDE1IiwJCQkvKiBub2ZjX3N0ciAq LwotICAgICJBVFxcTjRcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiQVRcXE4xXDAxNSIs CQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCVDMVwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwot ICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJ LyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAg ICAiQVRcXEowXDAxNSIsCQkJLyogc2Jfb25fc3RyICovCi0gICAgIkFUXFxKMVwwMTUiLAkJCS8q IHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAi QVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJCQkJLyogdm9s MV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwzXDAx NSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8K LSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwot ICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAq LwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBDT01QQVEg PSB7CQkJLyogQ29tcGFxIERhdGErRmF4IE1vZGVtICovCi0gICAgIkNvbXBhcSBEYXRhK0ZheCBN b2RlbSIsCQkvKiBOYW1lICovCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICov Ci0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRp YWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyog cGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVFEwRTFWMVg0JlMwJkMxJkQyXDAxNSIs CQkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiQVRRMEUxWDQmUzFcMDE1 IiwJCQkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAiQVRRMEUxWDRcMDE1IiwJCQkvKiB3YWtl X3N0ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkv KiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAi IiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0g ICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRl ICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFy ICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVRcXFEzXDAxNSIs CQkJLyogaHdmY19zdHIgKHNhbWUgYXMgJkszKSAqLwotICAgICJBVFxcUTFcMDE1IiwJCQkvKiBz d2ZjX3N0ciAoc2FtZSBhcyAmSzQpICovCi0gICAgIkFUXFxRMFwwMTUiLAkJCS8qIG5vZmNfc3Ry IChzYW1lIGFzICZLMCkgKi8KLSAgICAiQVRcXE4zXDAxNSIsCQkJLyogZWNfb25fc3RyICovCi0g ICAgIkFUXFxOMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVQlQzFcMDE1IiwJCQkv KiBkY19vbl9zdHIgKi8KLSAgICAiQVQlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCi0gICAg IkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkvKiBh YV9vZmZfc3RyICovCi0gICAgIkFUXFxOM1wwMTUiLAkJCS8qIHNiX29uX3N0ciAqLwotICAgICJB VFxcTjFcMDE1IiwJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bf b25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEww XDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIg Ki8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJ CS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTE1MjAwTCwJCQkJ LyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xD S0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLQotc3Rh dGljCi1NRE1JTkYgRlVKSVRTVSA9IHsJCQkvKiBGdWppdHN1ICovCi0gICAgIkZ1aml0c3UgRmF4 L01vZGVtIEFkYXB0ZXIiLAkvKiBOYW1lICovCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBj b21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJ CQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAy LAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVFEwRTFWMVg0JlMwJkMx JkQyXFxLNVxcTjNcMDE1IiwJLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAg IkFUUTBFMVg0JlMxXFxLNVxcTjNcMDE1IiwJCS8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJB VFEwRTFYNFxcSzVcXE4zXDAxNSIsCQkvKiB3YWtlX3N0ciAqLwotI2VuZGlmIC8qIFZNUyAqLwot I2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1 IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAg ICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9z dHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3Rp bWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8q IGh1cF9zdHIgKi8KLSAgICAiQVQmSzNcXFEzXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAi QVQmSzRcXFExXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KLSAgICAiQVQmSzBcXFEwXDAxNSIsCQkJ Lyogbm9mY19zdHIgKi8KLSAgICAiQVRcXE4zXDAxNSIsCQkJLyogZWNfb25fc3RyICovCi0gICAg IkFUXFxOMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVQlQzEiLAkJCQkvKiBkY19v bl9zdHIgKi8KLSAgICAiQVQlQzAiLAkJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIkFUUzA9MVww MTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3Ry ICovCi0gICAgIkFUXFxKMFwwMTUiLAkJCS8qIHNiX29uX3N0ciAqLwotICAgICJBVFxcSjFcMDE1 IiwJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICov Ci0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJ CS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAi QVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9y ZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTE1MjAwTCwJCQkJLyogbWF4X3Nw ZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8q IGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5G IE1IWkFUVCA9CQkJCS8qIE1lZ2FoZXJ0eiBBVCZUIFYuMzQgKi8KLSAgICB7Ci0gICAgIk1lZ2Fo ZXJ0eiBBVCZUIFYuMzQiLAotICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwot ICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFs X3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBh dXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRRMEUxVjFYNE4xJkMxJkQyXFxLNVwwMTUi LAkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAiQVRRMFg0TjFcXEs1XDAxNSIsCQkJLyogd2Fr ZV9zdHIgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0g ICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9z dHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJ CS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJ CS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSFww MTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLwot ICAgICJBVCZLNFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUJkswXDAxNSIsCQkJLyog bm9mY19zdHIgKi8KLSAgICAiQVRcXE4zXDAxNSIsCQkJLyogZWNfb25fc3RyICovCi0gICAgIkFU XFxOMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVQlQzFcIkgzXDAxNSIsCQkJLyog ZGNfb25fc3RyICovCi0gICAgIkFUJUMwXCJIMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAg ICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8q IGFhX29mZl9zdHIgKi8KLSAgICAiQVRcXEowXDAxNSIsCQkJLyogc2Jfb25fc3RyICovCi0gICAg IkFUXFxKMVwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBz cF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFU TDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0 ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJ CQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBMLAkJ CQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hX fENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3Rh dGljCi1NRE1JTkYgU1VQUkFTT04gPQkJCS8qIFN1cHJhU29uaWMgKi8KLSAgICB7Ci0gICAgIkRp YW1vbmQgU3VwcmFTb25pYyAyODhWKyIsCQkvKiBEaWFtb25kIE11bHRpbWVkaWEgU3lzdGVtcyBJ bmMgKi8KLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAx NSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0g ICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICov Ci0jaWZkZWYgT1MyCi0gICAgIkFUUTBFMVYxTjFXMFg0WTAmUzAmQzEmRDJcMDE1IiwJLyogd2Fr ZV9zdHIgKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgIkFUUTBFMU4xVzBYNFkwJlMxXDAxNSIs CQkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAiQVRRMEUxTjFXMFg0WTBcMDE1IiwJCS8qIHdh a2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJ CS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAg ICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8K LSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3Jh dGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2No YXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZLM1wwMTUi LAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJks0XDAxNSIsCQkJLyogc3dmY19zdHIgKi8KLSAg ICAiQVQmS1wwMTUiLAkJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCZRNVxcTjNTNDg9N1wwMTUi LAkJLyogZWNfb25fc3RyICovCi0gICAgIkFUJlEwXFxOMVwwMTUiLAkJCS8qIGVjX29mZl9zdHIg Ki8KLSAgICAiQVQlQzNTNDY9MTM4XDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFUJUMw UzQ2PTEzNlwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyog YWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAg ICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICJBVE1cMDE1IiwJCQkJLyogc3Bf b2ZmX3N0ciAqLwotICAgICJBVExcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlww MTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICov Ci0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIg Ki8KLSAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENL RF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBv a19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgQkVTVERBVEEgPQkJCS8qIEJlc3QgRGF0YSAq LwotICAgIHsKLSAgICAiQmVzdCBEYXRhIEZheCBNb2RlbSIsCQkvKiBCZXN0IERhdGEgRmF4IE1v ZGVtICovCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFww MTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwot ICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAq LwotI2lmZGVmIE9TMgotICAgICJBVFEwRTFWMU4xVzBYNFkwJlMwJkMxJkQyXDAxNSIsCS8qIHdh a2Vfc3RyICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwRTFOMVcwWDRZMCZTMVwwMTUi LAkJLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0gICAgIkFUUTBFMU4xVzBYNFkwXDAxNSIsCQkvKiB3 YWtlX3N0ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJ CQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAg ICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICov Ci0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9y YXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19j aGFyICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQmSzNcMDE1 IiwJCQkvKiBod2ZjX3N0ciAqLwotICAgICJBVCZLNFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCi0g ICAgIkFUJktcMDE1IiwJCQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVQmUTZcXE4zXDAxNSIsCQkJ LyogZWNfb25fc3RyICovCi0gICAgIkFUJlEwXFxOMVwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8K LSAgICAiQVQlQzNcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQlQzBcMDE1IiwJCQkv KiBkY19vZmZfc3RyICovCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAg ICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIkFUXFxOM1wwMTUiLAkJCS8q IHNiX29uX3N0ciAqLwotICAgICJBVFxcTjBcMDE1IiwJCQkvKiBzYl9vZmZfc3RyICovCi0gICAg IkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bf b2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJc MDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAq LwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmky ICovCi0gICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENL RF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBv a19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgQVRUMTkwMCA9CQkJLyogQVQmVCBTZWN1cmUg RGF0YSBTVFUgSUlJIDE5MDAgKi8KLSAgICB7Ci0gICAgIkFUJlQgU2VjdXJlIERhdGEgU1RVIElJ SSBNb2RlbCAxOTAwIiwgLyogbmFtZSAqLwotICAgICIiLAkJCQkJLyogcHVsc2UgY29tbWFuZCAq LwotICAgICIiLAkJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3Rp bWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNl X3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRRMEUxVjFYNFwwMTUiLAkJCS8qIHdha2Vfc3Ry ICovCi0jZWxzZQotICAgICJBVFEwRTFYNFwwMTUiLAkJCS8qIHdha2Vfc3RyICovCi0jZW5kaWYg LyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkv KiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJ CQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwot ICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwot ICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0 ciAqLwotICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHN3ZmNfc3Ry ICovCi0gICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNfb25fc3Ry ICovCi0gICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkY19vbl9z dHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJ LyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAg ICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwot ICAgICIiLAkJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICov Ci0gICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8K LSAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLwot ICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDk2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAg ICBDS0RfQVR8Q0tEX1NCfENLRF9IVywJCS8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tf Zm4gKi8KLX07Ci0KLS8qCi0gIEV4cGVyaW1lbnRhdGlvbiBzaG93ZWQgdGhhdCBoYXJkbHkgYW55 IG9mIHRoZSBkb2N1bWVudGVkIGNvbW1hbmRzIGRpZAotICBhbnl0aGluZyBvdGhlciB0aGF0IHBy aW50IEVSUk9SLiAgQXQgZmlyc3QgdGhlcmUgd2FzIG5vIGNvbW11bmljYXRpb24gYXQKLSAgYWxs IGF0IDk2MDAgYnBzIC0tIHR1cm5zIG91dCB0aGUgaW50ZXJmYWNlIHNwZWVkIHdhcyBzdHVjayBh dCAyNDAwLgotICBBVFMyOD0xMzAgKGdpdmVuIGF0IDI0MDAgYnBzKSBhbGxvd2VkIGl0IHRvIHdv cmsgYXQgOTYwMC4KLSovCi1zdGF0aWMKLU1ETUlORiBBVFQxOTEwID0JCQkvKiBBVCZUIFNlY3Vy ZSBEYXRhIFNUVSBJSUkgMTkxMCAqLwotICAgIHsJCQkJCS8qIEFkZHMgVi4zMmJpcywgVi40Miwg Vi40MmJpcyAqLwotICAgICJBVCZUIFNlY3VyZSBEYXRhIFNUVSBJSUkgTW9kZWwgMTkxMCIsIC8q IG5hbWUgKi8KLQotLyogQmVsaWV2ZSBpdCBvciBub3QsICJBVFQiIGFuZCAiQVRQIiByZXN1bHQg aW4gRVJST1IgKi8KLQotICAgICIiLAkJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICIiLAkJ CQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAi LCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNp ZmRlZiBPUzIKLSAgICAiQVRRMEUxVjFYNFwwMTUiLAkJCS8qIHdha2Vfc3RyICovCi0jZWxzZQot ICAgICJBVFEwRTFYNFwwMTUiLAkJCS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogT1MyICovCi0g ICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21w dCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9w cm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkv KiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJ LyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICIi LAkJCQkJLyogaHdmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCi0gICAgIiIs CQkJCQkvKiBub2ZjX3N0ciAqLwotI2lmZGVmIENPTU1FTlQKLS8qIFRoZXNlIGFyZSBldmlkZW50 bHkgcmVhZC1vbmx5IHJlZ2lzdGVycyAqLwotICAgICJBVFM0Nj0xMzhTNDc9MFwwMTUiLAkJLyog ZWNfb25fc3RyICovCi0gICAgIkFUUzQ2PTEzOFM0Nz0xMjhcMDE1IiwJCS8qIGVjX29mZl9zdHIg Ki8KLSAgICAiQVRTNDY9MTM4UzQ3PTBcMDE1IiwJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVFM0 Nj0xMzhTNDc9MTI4XDAxNSIsCQkvKiBkY19vZmZfc3RyICovCi0jZWxzZQotICAgICIiLAotICAg ICIiLAotICAgICIiLAotICAgICIiLAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAiQVRTMD0x XDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9z dHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2Zm X3N0ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9v ZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9s Ml9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBpZ25v cmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDk2MDBMLAkJCQkvKiBtYXhfc3Bl ZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXLAkvKiBjYXBhcyAq LwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBLRUVQSU5U T1VDSCA9CQkJLyogQVQmVCBLZWVwaW5Ub3VjaCBDYXJkIE1vZGVtICovCi0gICAgewotICAgICJB VCZUIEtlZXBpblRvdWNoIFYuMzJiaXMgQ2FyZCBNb2RlbSIsIC8qIE5hbWUgKi8KLSAgICAiQVRQ XDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUg Y29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBw YXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0v KiBUaGlzIHVzZWQgdG8gaW5jbHVkZSAmQzEmUzAmRDIrUTAgYnV0IHRoYXQgZ2l2ZXMgRVJST1Ig Ki8KLSAgICAiQVRRMEUxVjFYNCZTMCZDMSZEMlxcSzVcMDE1IiwJLyogd2FrZV9zdHIgKi8KLSNl bHNlCi0jaWZkZWYgVk1TCi0gICAgIkFUUTBFMVg0JlMxXFxLNVwwMTUiLAkJLyogd2FrZV9zdHIg Ki8KLSNlbHNlCi0gICAgIkFUUTBFMVg0XFxLNVwwMTUiLAkJCS8qIHdha2Vfc3RyICovCi0jZW5k aWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAq LwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1v ZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1 IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAw LAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRR MEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVFxcUTNcMDE1IiwJCQkvKiBod2ZjX3N0 ciAqLwotICAgICJBVFxcUTFcXFgwXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KLSAgICAiQVRcXFEw XDAxNSIsCQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVRcXE4zLUoxXDAxNSIsCQkJLyogZWNfb25f c3RyICovCi0gICAgIkFUXFxOMVwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVQlQzNc IkgzXDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFUJUMwXCJIMFwwMTUiLAkJCS8qIGRj X29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFU UzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiQVROMFxcSjBcMDE1IiwJCQkvKiBz Yl9vbl9zdHIgKi8KLSAgICAiQVROMVxcSjFcMDE1IiwJCQkvKiBzYl9vZmZfc3RyICovCi0gICAg IkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bf b2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZv bDJfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJ CS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgNTc2MDBMLAkJCQkv KiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENL RF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGlj Ci1NRE1JTkYgUk9MTV9BVCA9CQkvKiBSb2xtIGRhdGEgcGhvbmUgd2l0aCBBVCBjb21tYW5kIHNl dCAqLwotICAgIHsKLSAgICAiUm9sbSAyNDRQQyBvciA2MDAgU2VyaWVzIHdpdGggQVQgQ29tbWFu ZCBTZXQiLAotICAgICIiLAkJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICIiLAkJCQkJLyog dG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJ CS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBP UzIKLSAgICAiQVRFMVEwVjFcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAiQVRR MFwwMTUiLAkJCQkvKiB3YWtlX3N0ciAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkv KiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAi IiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0g ICAgIkFURFQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyIC0tIGFsd2F5cyBUb25lICovCi0gICAgMCwJ CQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMs CQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0g ICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KLSAg ICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vbl9zdHIgKi8KLSAg ICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29uX3N0ciAqLwot ICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9v bl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJ CQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIiIs CQkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLwotICAgICIi LAkJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIs CQkJCQkvKiBpbmkyICovCi0gICAgMTkyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0Rf QVQsCQkJCS8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRp YwotTURNSU5GIEFUTEFTID0JCQkJLyogQXRsYXMgLyBOZXdjb20gaXhmQyAzMy42ICovCi0gICAg ewotICAgICJBdGxhcyAvIE5ld2NvbSAzMzYwMGl4ZkMgRGF0YS9GYXggTW9kZW0iLCAvKiBOYW1l ICovCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUi LAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAg ICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwot I2lmZGVmIE9TMgotICAgICJBVFowJkZRMFYxJkMxJkQyXDAxNSIsCQkvKiB3YWtlX3N0ciAqLwot I2Vsc2UKLSAgICAiQVRaMCZGUTBWMVwwMTUiLAkJCS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyog T1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3 YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkv KiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAg IDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAg IDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAq LwotICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJks0XDAxNSIsCQkJ Lyogc3dmY19zdHIgKi8KLSAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJB VFwiSDNcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiQVRcIkgwXDAxNSIsCQkJLyogZWNf b2ZmX3N0ciAqLwotICAgICJBVCVDMVwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVCVD MFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25f c3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiQVROMFxc SjBcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiQVROMVxcSjFcMDE1IiwJCQkvKiBzYl9v ZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBc MDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3Ry ICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJ CQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAg IiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTE1MjAwTCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAg Q0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCi0g ICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIENPREVYID0gewkJ CS8qIE1vdG9yb2xhIENvZGV4ICovCi0gICAgIk1vdG9yb2xhIENvZGV4IDMyNlggU2VyaWVzIiwJ LyogTmFtZSAtIEFUJlYgdG8gc2VlIHNldHRpbmdzICovCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBw dWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAg ICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8K LSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgIC8qICZNMD1Bc3lu YyAobm90IHN5bmMpICovCi0gICAgLyogKk1NMD1BdXRvbWF0aWMgbW9kdWxhdGlvbiBuZWdvdGlh dGlvbiAqLwotICAgIC8qICpERTIyPUF1dG9tYXRpYyBkYXRhIHJhdGUgKi8KLSAgICAiQVRaUTBF MVYxWDRZMCpERTIyKk1NMCZDMSZNMCZTMCZEMlwwMTUiLCAvKiB3YWtlX3N0ciAqLwotI2Vsc2UK LSNpZmRlZiBWTVMKLSAgICAiQVRaUTBFMVYxWDRZMCpERTIyKk1NMCZDMSZNMCZTMVwwMTUiLCAv KiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAiQVRaUTBFMVYxWDRZMCpERTIyKk1NMCZDMSZNMFww MTUiLAkvKiB3YWtlX3N0ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwot ICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9t cHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVf cHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJ LyogZGlhbF9yYXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJ CS8qIGVzY19jaGFyICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAi QVQqTUYxKkZMM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUKk1GMSpGTDFcMDE1IiwJ CQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCpNRjAqRkwwXDAxNSIsCQkJLyogbm9mY19zdHIgKi8K LSAgICAiQVQqRUMwKlNNMypTQzBcMDE1IiwJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVCpTTTBc MDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFUKkRDMVwwMTUiLAkJCS8qIGRjX29uX3N0 ciAqLwotICAgICJBVCpEQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIkFUKkFBNVMw PTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVQqQUE1UzA9MFwwMTUiLAkJCS8qIGFh X29mZl9zdHIgKi8KLSAgICAiQVQqU0MxXDAxNSIsCQkJLyogc2Jfb25fc3RyICovCi0gICAgIkFU KlNDMFwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9v bl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFc MDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAq LwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDMqQkQyXDAxNSIs CQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBMLAkJ CQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hX fENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3Rh dGljCi1NRE1JTkYgTVQ1NjM0WlBYID0JCQkvKiBNdWx0aXRlY2ggKi8KLSAgICB7Ci0gICAgIk11 bHRpdGVjaCBNVDU2MzRaUFgiLAkJLyogbmFtZSAqLwotICAgICJBVFBcMDE1IiwJCQkJLyogcHVs c2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAg MzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0g ICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRFMVEwVjFYNCZT MCZDMSZEMiZRMFwwMTUiLAkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAi QVRRMEUxWDQmUzEmUTBcMDE1IiwJCS8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwRTFY NCZRMFwwMTUiLAkJCS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyog T1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3 YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkv KiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAg IDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAg IDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAq LwotICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJks0XDAxNSIsCQkJ Lyogc3dmY19zdHIgKi8KLSAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJB VFxcTjNcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiQVRcXE4xXDAxNSIsCQkJLyogZWNf b2ZmX3N0ciAqLwotICAgICJBVCVDMVwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVCVD MFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25f c3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiQVRcXEow XDAxNSIsCQkJLyogc2Jfb25fc3RyICovCi0gICAgIkFUXFxKMVwwMTUiLAkJCS8qIHNiX29mZl9z dHIgKE5PVCBTVVBQT1JURUQpICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICov Ci0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJ CS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAi QVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9y ZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTE1MjAwTCwJCQkJLyogbWF4X3Nw ZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8q IGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5G IE1PVFNNNTYgPQkJCS8qIE1vdG9yb2xhIFNNNTYgQ2hpcHNldCAqLwotICAgIHsKLSAgICAiTW90 b3JvbGEgU001NiBWLjkwIGNoaXBzZXQiLAkvKiBuYW1lICovCi0gICAgIkFUUFwwMTUiLAkJCQkv KiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8K LSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMg Ki8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVFEwVjFY NCZTMCZDMSZEMipNTTE2XDAxNSIsCS8qIHdha2Vfc3RyICovCi0jZWxzZQotI2lmZGVmIFZNUwot ICAgICJBVFEwVjFYNCZTMSZDMSZEMipNTTE2XDAxNSIsCS8qIHdha2Vfc3RyICovCi0jZWxzZQot ICAgICJBVFEwVjFYNCZDMSZEMipNTTE2XDAxNSIsCQkvKiB3YWtlX3N0ciAqLwotI2VuZGlmIC8q IFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAg ICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0 ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIsCQkJ LyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEwMCwJCQkJ LyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFUUTBIMFww MTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVRcXFEzXDAxNSIsCQkJLyogaHdmY19zdHIgKi8K LSAgICAiQVRcXFExXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KLSAgICAiQVRcXFEwXDAxNSIsCQkJ Lyogbm9mY19zdHIgKi8KLSAgICAiQVRcXE43XDAxNSIsCQkJLyogZWNfb25fc3RyICovCi0gICAg IkFUXFxOMVwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVQlQzFcMDE1IiwJCQkvKiBk Y19vbl9zdHIgKi8KLSAgICAiQVQlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIkFU UzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9v ZmZfc3RyICovCi0gICAgIkFUXFxKMFwwMTUiLAkJCS8qIHNiX29uX3N0ciAqLwotICAgICJBVFxc SjFcMDE1IiwJCQkvKiBzYl9vZmZfc3RyIChOT1QgU1VQUE9SVEVEKSAqLwotICAgICJBVE0xXDAx NSIsCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIg Ki8KLSAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJ CS8qIHZvbDJfc3RyICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAi QVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAg IDExNTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENL RF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICov Ci19OwotI2VuZGlmIC8qIE1JTklESUFMICovCi0KLS8qIEVORCBNRE1JTkYgU1RSVUNUIERFRklO SVRJT05TICovCi0KLS8qCi0gIFRhYmxlIHRvIGNvbnZlcnQgbW9kZW0gbnVtYmVycyB0byBNRE1J TkYgc3RydWN0IHBvaW50ZXJzLgotICBUaGUgZW50cmllcyBNVVNUIGJlIGluIGFzY2VuZGluZyBv cmRlciBieSBtb2RlbSBudW1iZXIsIHdpdGhvdXQgYW55Ci0gICJnYXBzIiBpbiB0aGUgbnVtYmVy cywgYW5kIHN0YXJ0aW5nIGZyb20gb25lICgxKS4KLSovCi0KLU1ETUlORiAqbW9kZW1wW10gPSB7 Ci0jaWZkZWYgTUlOSURJQUwKLSAgICBOVUxMLAkJCQkvKiAgMCAqLwotICAgICZDQ0lUVCwJCQkJ LyogIDEgKi8KLSAgICAmSEFZRVMsCQkJCS8qICAyICovCi0gICAgJlVOS05PV04sCQkJCS8qICAz ICovCi0gICAgJkRVTU1ZLAkJCQkvKiAgNCAqLwotICAgICZHRU5FUklDLAkJCQkvKiAgNSAqLwot ICAgICZJVFVUVjI1MAkJCQkvKiAgNiAqLwotI2Vsc2UgIC8qIE5vdCBNSU5JRElBTCAqLwotICAg IE5VTEwsCQkJCS8qICAwICovCi0gICAgJkFUVERURE0sCQkJCS8qICAxICovCi0gICAgJkFUVElT TiwJCQkJLyogIDIgKi8KLSAgICAmQVRUTU9ERU0sCQkJCS8qICAzICovCi0gICAgJkNDSVRULAkJ CQkvKiAgNCAqLwotI2lmZGVmIE9MRE1PREVNUwotICAgICZDRVJNRVRFSywJCQkJLyogIDUgKi8K LSAgICAmREYwMywJCQkJLyogIDYgKi8KLSAgICAmREYxMDAsCQkJCS8qICA3ICovCi0gICAgJkRG MjAwLAkJCQkvKiAgOCAqLwotICAgICZHREMsCQkJCS8qICA5ICovCi0jZWxzZQotICAgIE5VTEws Ci0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSNlbmRpZiAvKiBP TERNT0RFTVMgKi8KLSAgICAmSEFZRVMsCQkJCS8qIDEwICovCi0jaWZkZWYgT0xETU9ERU1TCi0g ICAgJlBFTlJJTCwJCQkJLyogMTEgKi8KLSAgICAmUkFDQUwsCQkJCS8qIDEyICovCi0jZWxzZQot ICAgIE5VTEwsCi0gICAgTlVMTCwKLSNlbmRpZiAvKiBPTERNT0RFTVMgKi8KLSAgICAmVU5LTk9X TiwJCQkJLyogMTMgKi8KLSNpZmRlZiBPTERNT0RFTVMKLSAgICAmVkVOVEVMLAkJCQkvKiAxNCAq LwotICAgICZDT05DT1JELAkJCQkvKiAxNSAqLwotI2Vsc2UKLSAgICBOVUxMLAotICAgIE5VTEws Ci0jZW5kaWYgLyogT0xETU9ERU1TICovCi0gICAgJkRVTU1ZLAkJCQkvKiAxNiAqLwotICAgICZS T0xNLAkJCQkvKiAxNyAqLwotI2lmZGVmIE9MRE1PREVNUwotICAgICZNSUNST0NPTSwJCQkJLyog MTggKi8KLSNlbHNlCi0gICAgTlVMTCwKLSNlbmRpZiAvKiBPTERNT0RFTVMgKi8KLSAgICAmVVNS LAkJCQkvKiAxOSBVU1IgQ291cmllciBhbmQgU3BvcnRzdGVyICovCi0gICAgJk9MRFRCLAkJCQkv KiAyMCBPbGQgVGVsZWJpdHMgKi8KLSAgICAmRElHSVRFTCwJCQkJLyogMjEgRGlnaXRlbCBDQ0lU VCAqLwotICAgICZIXzEyMDAsCQkJCS8qIDIyIEhheWVzIDEyMDAgKi8KLSAgICAmSF9VTFRSQSwJ CQkJLyogMjMgSGF5ZXMgVWx0cmEgKi8KLSAgICAmSF9BQ0NVUkEsCQkJCS8qIDI0IEhheWVzIE9w dGltYSAqLwotICAgICZQUEksCQkJCS8qIDI1IFBQSSAqLwotICAgICZEQVRBUE9SVCwJCQkJLyog MjYgRGF0YXBvcnQgKi8KLSAgICAmQk9DQSwJCQkJLyogMjcgQm9jYSAqLwotICAgICZNT1RPUk9M QSwJCQkJLyogMjggTW90b3JvbGEgVURTIE1PVE9ST0xBICovCi0gICAgTlVMTCwJCQkJLyogMjkg RGlnaWNvbW0gKi8KLSAgICBOVUxMLAkJCQkvKiAzMCBEeW5hbGluayAqLwotICAgICZJTlRFTCwJ CQkJLyogMzEgSW50ZWwgKi8KLSAgICAmVUNPTV9BVCwJCQkJLyogMzIgTWljcm9jb20gaW4gQVQg bW9kZSAqLwotICAgICZNVUxUSVRFQ0gsCQkJCS8qIDMzIE11bHRpdGVjaCAqLwotICAgICZTVVBS QSwJCQkJLyogMzQgU3VwcmEgKi8KLSAgICAmWk9MVFJJWCwJCQkJLyogMzUgWm9sdHJpeCAqLwot ICAgICZaT09NLAkJCQkvKiAzNiBab29tICovCi0gICAgJlpZWEVMLAkJCQkvKiAzNyBaeVhFTCAq LwotICAgICZEVU1NWSwJCQkJLyogMzggVEFQSSAqLwotICAgICZORVdUQiwJCQkJLyogMzkgTmV3 LVRlbGViaXQgKi8KLSAgICAmTUFYVEVDSCwJCQkJLyogNDAgTWF4VGVjaCAqLwotICAgICZEVU1N WSwJCQkJLyogNDEgVXNlci1kZWZpbmVkICovCi0gICAgJlJXVjMyLAkJCQkvKiA0MiBSb2Nrd2Vs bCBWLjMyICovCi0gICAgJlJXVjMyQiwJCQkJLyogNDMgUm9ja3dlbGwgVi4zMmJpcyAqLwotICAg ICZSV1YzNCwJCQkJLyogNDQgUm9ja3dlbGwgVi4zNCAqLwotICAgICZNV0FWRSwJCQkJLyogNDUg SUJNIE13YXZlICovCi0gICAgJlRFTEVQQVRILAkJCQkvKiA0NiBHYXRld2F5IDIwMDAgVGVsZXBh dGggSUkgMjguOCAqLwotICAgICZNSUNST0xJTkssCQkJCS8qIDQ3IE1pY3JvTGluayBtb2RlbXMg Ki8KLSAgICAmQ0FSRElOQUwsCQkJCS8qIDQ4IENhcmRpbmFsICovCi0gICAgJkdFTkVSSUMsCQkJ CS8qIDQ5IEdlbmVyaWMgaGlnaC1zcGVlZCAqLwotICAgICZYSkFDSywJCQkJLyogNTAgTWVnYWhl cnR6LVhqYWNrICovCi0gICAgJlNQSVJJVElJLAkJCQkvKiA1MSBRdWlja0NvbW0gU3Bpcml0IElJ ICovCi0gICAgJk1PTlRBTkEsCQkJCS8qIDUyIE1vdG9yb2xhIE1vbnRhbmEgKi8KLSAgICAmQ09N UEFRLAkJCQkvKiA1MyBDb21wYXEgRGF0YStGYXggKi8KLSAgICAmRlVKSVRTVSwJCQkJLyogNTQg RnVqaXRzdSAqLwotICAgICZNSFpBVFQsCQkJCS8qIDU1IE1lZ2FoZXJ0eiBBVCZUIFYuMzQgKi8K LSAgICAmU1VQUkFTT04sCQkJCS8qIDU2IFN1cHJhc29uaWMgKi8KLSAgICAmQkVTVERBVEEsCQkJ CS8qIDU3IEJlc3QgRGF0YSAqLwotICAgICZBVFQxOTAwLAkJCQkvKiA1OCBBVCZUIFNlY3VyZSBE YXRhIFNUVSBJSUkgMTkwMCAqLwotICAgICZBVFQxOTEwLAkJCQkvKiA1OSBBVCZUIFNlY3VyZSBE YXRhIFNUVSBJSUkgMTkxMCAqLwotICAgICZLRUVQSU5UT1VDSCwJCQkvKiA2MCBBVCZUIEtlZXBp blRvdWNoICovCi0gICAgJlVTUlgyLAkJCQkvKiA2MSBVU1IgWEotMTU2MCBYMiAqLwotICAgICZS T0xNX0FULAkJCQkvKiA2MiBSb2xtIHdpdGggQVQgY29tbWFuZCBzZXQgKi8KLSAgICAmQVRMQVMs CQkJCS8qIDYzIEF0bGFzIC8gTmV3Y29tICovCi0gICAgJkNPREVYLAkJCQkvKiA2NCBNb3Rvcm9s YSBDb2RleCAqLwotICAgICZNVDU2MzRaUFgsCQkJCS8qIDY1IE11bHRpdGVjaCBNVDU2MzRaUFgg Ki8KLSAgICAmVUxJTktWMjUwLAkJCQkvKiA2NiBNaWNyb2xpbmsgVi4yNTAgNTZLICovCi0gICAg JklUVVRWMjUwLAkJCQkvKiA2NyBHZW5lcmljIElUVS1UIFYuMjUwICovCi0gICAgJlJXVjkwLAkJ CQkvKiA2OCBSb2Nrd2VsbCBWLjkwIDU2SyAqLwotICAgICZTVVBSQVgsCQkJCS8qIDY5IERpYW1v bmQgU3VwcmEgRXhwcmVzcyBWLjkwICovCi0gICAgJkxVQ0VOVCwJCQkJLyogNzAgTHVjZW50IFZl bnVzIGNoaXBzZXQgKi8KLSAgICAmUENURUwsCQkJCS8qIDcxIFBDVGVsICovCi0gICAgJkNPTkVY QU5ULAkJCQkvKiA3MiBDb25leGFudCAqLwotICAgICZaT09NVjM0LAkJCQkvKiA3MyBab29tIFYu MzQgKi8KLSAgICAmWk9PTVY5MCwJCQkJLyogNzQgWm9vbSBWLjkwICovCi0gICAgJlpPT01WOTIs CQkJCS8qIDc1IFpvb20gVi45MiAqLwotICAgICZNT1RTTTU2CQkJCS8qIDc2IE1vdG9yb2xhIFNN NTYgY2hpcHNldCAqLwotI2VuZGlmIC8qIE1JTklESUFMICovCi19OwotLyoKLSAqIERlY2xhcmUg bW9kZW0gbmFtZXMgYW5kIGFzc29jaWF0ZWQgbnVtYmVycyBmb3IgY29tbWFuZCBwYXJzaW5nLAot ICogYW5kIGFsc28gZm9yIGRvaW5nIG51bWJlci10by1uYW1lIHRyYW5zbGF0aW9uLgotICoKLSAq IFRoZSBlbnRyaWVzIG11c3QgYmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIGJ5IG1vZGVtIG5hbWUu Ci0gKi8KLXN0cnVjdCBrZXl0YWIgbWRtdGFiW10gPSB7Ci0jaWZuZGVmIE1JTklESUFMCi0gICAg IjNjb20tdXNyLW1lZ2FoZXJ0ei01NmsiLCBuX1VTUlgyLCAgQ01fSU5WLAotICAgICJhY2VyLXY5 MCIsICAgICAgICAgbl9SV1Y5MCwgICAgICAgIE1fQUxJQVMsCi0gICAgImF0bGFzLW5ld2NvbS0z MzYwMGlmeEMiLCBuX0FUTEFTLCAgMCwKLSAgICAiYXR0LTE5MDAtc3R1LWlpaSIsIG5fQVRUMTkw MCwgICAgICAwLAotICAgICJhdHQtMTkxMC1zdHUtaWlpIiwgbl9BVFQxOTEwLCAgICAgIDAsCi0g ICAgImF0dC03MzAwIiwJCW5fQVRUVVBDLAkwLAotICAgICJhdHQtZGF0YXBvcnQiLAluX0RBVEFQ T1JULAkwLAotICAgICJhdHQtZHRkbSIsCQluX0FUVERURE0sCTAsCi0gICAgImF0dC1pc24iLCAg ICAgICAgICBuX0FUVElTTiwgICAgICAgMCwKLSAgICAiYXR0LWtlZXBpbnRvdWNoIiwgIG5fS0VF UElOVE9VQ0gsICAwLAotICAgICJhdHQtc3dpdGNoZWQtbmV0Iiwgbl9BVFRNT0RFTSwJMCwKLQot ICAgICJhdHQ3MzAwIiwJCW5fQVRUVVBDLAlDTV9JTlYsCS8qIG9sZCBuYW1lICovCi0gICAgImF0 dGR0ZG0iLAkJbl9BVFREVERNLAlDTV9JTlYsCS8qIG9sZCBuYW1lICovCi0gICAgImF0dGlzbiIs ICAgICAgICAgICBuX0FUVElTTiwgICAgICAgQ01fSU5WLAkvKiBvbGQgbmFtZSAqLwotICAgICJh dHRtb2RlbSIsCQluX0FUVE1PREVNLAlDTV9JTlYsCS8qIG9sZCBuYW1lICovCi0KLSAgICAiYmVz dGRhdGEiLCAgICAgICAgIG5fQkVTVERBVEEsICAgICAwLAotICAgICJib2NhIiwJCW5fQk9DQSwJ CTAsCi0gICAgImNhcmRpbmFsIiwgICAgICAgICBuX0NBUkRJTkFMLCAgICAgMCwKLSNlbmRpZiAv KiBNSU5JRElBTCAqLwotICAgICJjY2l0dC12MjViaXMiLAluX0NDSVRULAlDTV9JTlYsIC8qIE5h bWUgY2hhbmdlZCB0byBJVFUtVCAqLwotI2lmbmRlZiBNSU5JRElBTAotI2lmZGVmIE9MRE1PREVN UwotICAgICJjZXJtZXRlayIsCQluX0NFUk1FVEVLLAlNX09MRCwKLSNlbmRpZiAvKiBPTERNT0RF TVMgKi8KLSAgICAiY29tcGFxIiwgICAgICAgICAgIG5fQ09NUEFRLCAgICAgICAwLAotI2lmZGVm IE9MRE1PREVNUwotICAgICJjb25jb3JkIiwJCW5fQ09OQ09SRCwJTV9PTEQsCi0jZW5kaWYgLyog T0xETU9ERU1TICovCi0gICAgImNvbmV4YW50IiwgICAgICAgICBuX0NPTkVYQU5ULCAgICAgMCwK LSAgICAiY291cmllciIsICAgICAgICAgIG5fVVNSLCAgICAgICAgICBDTV9JTlYsCi0gICAgImRh dGFwb3J0IiwJCW5fREFUQVBPUlQsCUNNX0lOViwJLyogPT0gYXR0LWRhdGFwb3J0ICovCi0jaWZk ZWYgT0xETU9ERU1TCi0gICAgImRmMDMtYWMiLAkJbl9ERjAzLAkJTV9PTEQsCi0gICAgImRmMTAw LXNlcmllcyIsCW5fREYxMDAsCU1fT0xELAotICAgICJkZjIwMC1zZXJpZXMiLAluX0RGMjAwLAlN X09MRCwKLSNlbmRpZiAvKiBPTERNT0RFTVMgKi8KLSAgICAiZGlnaXRlbC1kdDIyIiwJbl9ESUdJ VEVMLAkwLAotI2VuZGlmIC8qIE1JTklESUFMICovCi0gICAgImRpcmVjdCIsCQkwLAkJQ01fSU5W LAkvKiBTeW5vbnltIGZvciBOT05FICovCi0jaWZuZGVmIE1JTklESUFMCi0gICAgImZ1aml0c3Ui LCAgICAgICAgICBuX0ZVSklUU1UsICAgICAgMCwKLSAgICAiZ2F0ZXdheS10ZWxlcGF0aCIsIG5f VEVMRVBBVEgsICAgICAwLAotI2lmZGVmIE9MRE1PREVNUwotICAgICJnZGMtMjEyYS9lZCIsCW5f R0RDLAkJTV9PTEQsCi0gICAgImdlIiwgICAgICAgICAgICAgICBuX0dFTkVSSUMsCUNNX0lOVnxD TV9BQlIsCi0gICAgImdlbiIsICAgICAgICAgICAgICBuX0dFTkVSSUMsCUNNX0lOVnxDTV9BQlIs Ci0gICAgImdlbmRhdGFjb21tIiwJbl9HREMsCQlDTV9JTlYsCS8qIFN5bm9ueW0gZm9yIEdEQyAq LwotI2VuZGlmIC8qIE9MRE1PREVNUyAqLwotI2VuZGlmIC8qIE1JTklESUFMICovCi0gICAgImdl bmUiLCAgICAgICAgICAgICBuX0dFTkVSSUMsICAgICAgQ01fSU5WfENNX0FCUiwKLSAgICAiZ2Vu ZXJpYyIsICAgICAgICAgIG5fR0VORVJJQywgICAgICAwLAotICAgICJnZW5lcmljLWhpZ2gtc3Bl ZWQiLG5fR0VORVJJQywgICAgIENNX0lOViwKLSAgICAiaCIsIAkgICAJbl9IQVlFUywJQ01fSU5W fENNX0FCUiwKLSAgICAiaGEiLCAJICAgCW5fSEFZRVMsCUNNX0lOVnxDTV9BQlIsCi0gICAgImhh eSIsICAgIAkJbl9IQVlFUywJQ01fSU5WfENNX0FCUiwKLSAgICAiaGF5ZSIsIAkgICAJbl9IQVlF UywJQ01fSU5WfENNX0FCUiwKLSAgICAiaGF5ZXMiLCAgICAJbl9IQVlFUywJQ01fSU5WfENNX0FC UiwgLyogSGF5ZXMgMjQwMCAqLwotI2lmbmRlZiBNSU5JRElBTAotICAgICJoYXllcy0xMjAwIiwJ bl9IXzEyMDAsCTAsCi0jZW5kaWYgLyogTUlOSURJQUwgKi8KLSAgICAiaGF5ZXMtMjQwMCIsCW5f SEFZRVMsCTAsCi0jaWZuZGVmIE1JTklESUFMCi0gICAgImhheWVzLWhpZ2gtc3BlZWQiLCBuX0hf QUNDVVJBLCAgICAgMCwKLSAgICAiaGF5ZXMtYWNjdXJhIiwgICAgIG5fSF9BQ0NVUkEsICAgICBD TV9JTlYsCi0gICAgImhheWVzLW9wdGltYSIsICAgICBuX0hfQUNDVVJBLCAgICAgQ01fSU5WLAot ICAgICJoYXllcy11bHRyYSIsCW5fSF9VTFRSQSwJQ01fSU5WLAotICAgICJoc3QtY291cmllciIs ICAgICAgbl9VU1IsICAgICAgICAgIENNX0lOViwJLyogU3lub255bSBmb3IgQ09VUklFUiAqLwot ICAgICJpbnRlbCIsCQluX0lOVEVMLCAgICAgICAgMCwKLSNlbmRpZiAvKiBNSU5JRElBTCAqLwot Ci0gICAgIml0dS10LXYyNTAiLCAgICAgICBuX0lUVVRWMjUwLCAgICAgMCwKLSAgICAiaXR1LXQt djI1YmlzIiwJbl9DQ0lUVCwJMCwJLyogTmV3IG5hbWUgZm9yIENDSVRUICovCi0gICAgIml0dS10 LXYyNXRlci92MjUwIixuX0lUVVRWMjUwLCAgICAgQ01fSU5WLAotCi0jaWZuZGVmIE1JTklESUFM Ci0gICAgImx1Y2VudCIsICAgICAgICAgICBuX0xVQ0VOVCwgICAgICAwLAotICAgICJtYXh0ZWNo IiwJCW5fTUFYVEVDSCwgICAgIDAsCi0KLSAgICAibWVnYWhlcnR6LWF0dC12MzQiLCAgICBuX01I WkFUVCwgIDAsIC8qIE1lZ2FoZXJ0emVzICovCi0gICAgIm1lZ2FoZXJ0ei14amFjayIsICAgICAg bl9YSkFDSywgICBDTV9JTlZ8Q01fQUJSLAotICAgICJtZWdhaGVydHoteGphY2stMzMuNiIsIG5f WEpBQ0ssICAgMCwKLSAgICAibWVnYWhlcnR6LXhqYWNrLTU2ayIsICBuX1VTUlgyLCAgIDAsIC8q IDNDT00vVVNSL01lZ2FoZXJ0eiAzMy42IFBDIENhcmQgKi8KLQotICAgICJtaSIsCQluX01JQ1JP Q09NLAlDTV9JTlZ8Q01fQUJSLAotICAgICJtaWMiLAkJbl9NSUNST0NPTSwJQ01fSU5WfENNX0FC UiwKLSAgICAibWljciIsCQluX01JQ1JPQ09NLAlDTV9JTlZ8Q01fQUJSLAotICAgICJtaWNybyIs CQluX01JQ1JPQ09NLAlDTV9JTlZ8Q01fQUJSLAotICAgICJtaWNyb2MiLAkJbl9NSUNST0NPTSwJ Q01fSU5WfENNX0FCUiwKLSAgICAibWljcm9jbyIsCQluX01JQ1JPQ09NLAlDTV9JTlZ8Q01fQUJS LAotICAgICJtaWNyb2NvbSIsCQluX01JQ1JPQ09NLAlDTV9JTlZ8Q01fQUJSLAotICAgICJtaWNy b2NvbS1hdC1tb2RlIiwJbl9VQ09NX0FULAkwLCAvKiBNaWNyb2NvbSBEZXNrUG9ydGUsIGV0YyAq LwotICAgICJtaWNyb2NvbS1zeC1tb2RlIiwJbl9NSUNST0NPTSwJMCwgLyogTWljcm9jb20gQVgs UVgsU1gsIG5hdGl2ZSBtb2RlICovCi0gICAgIm1pY3JvbGluayIsICAgICAgICBuX01JQ1JPTElO SywgICAgMCwKLSAgICAibWljcm9saW5rLXYyNTAiLCAgIG5fVUxJTktWMjUwLCAgICAwLAotICAg ICJtb3Rvcm9sYS1jb2RleCIsICAgbl9DT0RFWCwgICAgICAgIDAsCi0gICAgIm1vdG9yb2xhLWZh c3RhbGsiLCBuX01PVE9ST0xBLAkwLAotICAgICJtb3Rvcm9sYS1saWZlc3R5bGUiLG5fTU9UT1JP TEEsCTAsCi0gICAgIm1vdG9yb2xhLW1vbnRhbmEiLCBuX01PTlRBTkEsCTAsCi0gICAgIm1vdG9y b2xhLXNtNTYtdjkwIixuX01PVFNNNTYsCTAsCi0gICAgIm10NTYzNHpweCIsICAgICAgICBuX01U NTYzNFpQWCwgICAgMCwKLSAgICAibXVsdGl0ZWNoIiwJbl9NVUxUSSwJMCwKLSAgICAibXdhdmUi LAkJbl9NV0FWRSwJMCwKLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotICAgICJub25lIiwgICAgICAg ICAgICAgMCwgICAgICAgICAgICAgIDAsCi0jaWZuZGVmIE1JTklESUFMCi0jaWZuZGVmIE9MRFRC Q09ERQotICAgICJvbGQtdGVsZWJpdCIsICAgICAgbl9URUxFQklULCAgICAgIDAsCi0jZW5kaWYg LyogT0xEVEJDT0RFICovCi0gICAgInBjdGVsIiwgICAgICAgICAgICBuX1BDVEVMLCAgICAgICAg MCwKLSNpZmRlZiBPTERNT0RFTVMKLSAgICAicGVucmlsIiwJCW5fUEVOUklMLAlNX09MRCwKLSNl bmRpZiAvKiBPTERNT0RFTVMgKi8KLSAgICAicHBpIiwgICAgICAgICAgICAgIG5fUFBJLAkJMCwK LSNpZmRlZiBPTERNT0RFTVMKLSAgICAicmFjYWx2YWRpYyIsCW5fUkFDQUwsCU1fT0xELAotI2Vu ZGlmIC8qIE9MRE1PREVNUyAqLwotICAgICJyb2Nrd2VsbC12MzIiLAluX1JXVjMyLAkwLAotICAg ICJyb2Nrd2VsbC12MzJiaXMiLAluX1JXVjMyQiwJMCwKLSAgICAicm9ja3dlbGwtdjM0IiwJbl9S V1YzNCwJMCwKLSAgICAicm9ja3dlbGwtdjkwIiwJbl9SV1Y5MCwJMCwKLSAgICAicm9sbSIsICAg ICAgICAgICAgIG5fUk9MTSwJCUNNX0lOVnxDTV9BQlIsCi0gICAgInJvbG0tMjQ0cGMiLCAgICAg ICBuX1JPTE1BVCwgICAgICAgMCwKLSAgICAicm9sbS02MDAtc2VyaWVzIiwgIG5fUk9MTUFULCAg ICAgICAwLAotICAgICJyb2xtLWRjbSIsCQluX1JPTE0sCQkwLAotICAgICJzbWFydGxpbmstdjkw IiwgICAgbl9VU1IsICAgICAgICAgIE1fQUxJQVMsCi0gICAgInNwaXJpdC1paSIsICAgICAgICBu X1NQSVJJVElJLCAgICAgMCwKLSAgICAic3BvcnRzdGVyIiwgICAgICAgIG5fVVNSLCAgICAgICAg ICBNX0FMSUFTLAotICAgICJzdXAiLAkgICAgICAgIG5fU1VQUkEsCUNNX0lOVnxDTV9BQlIsCi0g ICAgInN1cHIiLAkgICAgICAgIG5fU1VQUkEsCUNNX0lOVnxDTV9BQlIsCi0gICAgInN1cHJhIiwJ ICAgICAgICBuX1NVUFJBLAlDTV9JTlZ8Q01fQUJSLAotICAgICJzdXByYS1leHByZXNzLXY5MCIs bl9TVVBSQVgsICAgICAgIDAsCi0gICAgInN1cHJhZmF4bW9kZW0iLAluX1NVUFJBLAkwLAotICAg ICJzdXByYXNvbmljIiwJbl9TVVBSQVNPTiwJMCwKLSNpZmRlZiBDS19UQVBJCi0gICAgInRhcGki LAkJbl9UQVBJLAkJMCwKLSNlbmRpZiAvKiBDS19UQVBJICovCi0gICAgInRlIiwgICAgICAgICAg ICAgICBuX1RCTkVXLCAgICAgICAgQ01fSU5WfENNX0FCUiwKLSAgICAidGVsIiwgICAgICAgICAg ICAgIG5fVEJORVcsICAgICAgICBDTV9JTlZ8Q01fQUJSLAotICAgICJ0ZWxlYml0IiwgICAgICAg ICAgbl9UQk5FVywgICAgICAgIDAsCi0gICAgInRlbGVwYXRoIiwgICAgICAgICBuX1RFTEVQQVRI LCAgICAgQ01fSU5WLAotI2VuZGlmIC8qIE1JTklESUFMICovCi0gICAgInVua25vd24iLAkJbl9V TktOT1dOLAkwLAotICAgICJ1c2VyLWRlZmluZWQiLCAgICAgbl9VREVGLAkJMCwKLSNpZm5kZWYg TUlOSURJQUwKLQotICAgICJ1c3IiLCAgICAgICAgICAgICAgIG5fVVNSLCAgICAgICAgIENNX0lO VnxDTV9BQlIsCi0gICAgInVzci0yMTJhIiwJCSBuX0hBWUVTLAlDTV9JTlZ8TV9BTElBUywKLSAg ICAidXNyLWNvdXJpZXIiLCAgICAgICBuX1VTUiwgICAgICAgICBDTV9JTlYsCi0gICAgInVzci1t ZWdhaGVydHotNTZrIiwgbl9VU1JYMiwgICAgICAgMCwKLSAgICAidXNyLXNwb3J0c3RlciIsICAg ICBuX1VTUiwgICAgICAgICBDTV9JTlYsCi0gICAgInVzci14ajE1NjAteDIiLCAgICAgbl9VU1JY MiwgICAgICAgQ01fSU5WLAotICAgICJ1c3JvYm90aWNzIiwgICAgICAgIG5fVVNSLCAgICAgICAg IDAsCi0KLSAgICAidjI1YmlzIiwJCW5fQ0NJVFQsCUNNX0lOViwgLyogTmFtZSBjaGFuZ2VkIHRv IElUVS1UICovCi0jaWZkZWYgT0xETU9ERU1TCi0gICAgInZlbnRlbCIsCQluX1ZFTlRFTCwJTV9P TEQsCi0jZW5kaWYgLyogT0xETU9ERU1TICovCi0gICAgInpvbHRyaXgtdjM0IiwJbl9aT0xUUklY LAkwLAotICAgICJ6b2x0cml4LWhzcC12OTAiLCAgbl9QQ1RFTCwgICAgICAgIE1fQUxJQVMsCi0g ICAgInpvbHRyaXgtaGNmLXY5MCIsICBuX0lUVVRWMjUwLCAgICAgMCwKLSAgICAiem9vIiwJCW5f Wk9PTSwJCUNNX0lOVnxDTV9BQlIsCi0gICAgInpvb20iLAkJbl9aT09NLAkJQ01fSU5WfENNX0FC UiwKLSAgICAiem9vbS12MzJiaXMiLAluX1pPT00sCQkwLAotICAgICJ6b29tLXYzNCIsCQluX1pP T01WMzQsCTAsCi0gICAgInpvb20tdjkwIiwJCW5fWk9PTVY5MCwJMCwKLSAgICAiem9vbS12OTIi LAkJbl9aT09NVjkyLAkwLAotICAgICJ6eXhlbCIsCQluX1pZWEVMLAkwLAotI2VuZGlmIC8qIE1J TklESUFMICovCi0gICAgIiIsICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgMAotfTsK LWludCBubWRtID0gKHNpemVvZihtZG10YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7 IC8qIE51bWJlciBvZiBtb2RlbXMgKi8KLQotI2RlZmluZSBDT05ORUNURUQgMQkJCS8qIEZvciBj b21wbGV0aW9uIHN0YXR1cyAqLwotI2RlZmluZSBEX0ZBSUxFRCAgMgotI2RlZmluZSBEX1BBUlRJ QUwgMwotCi1zdGF0aWMgaW50IHRyaWVzID0gMDsKLXN0YXRpYyBpbnQgbWRtZWNobyA9IDA7CQkJ LyogQXNzdW1lIG1vZGVtIGRvZXMgbm90IGVjaG8gKi8KLQotc3RhdGljIGNoYXIgKnA7CQkJCS8q IEZvciBjb21tYW5kIHN0cmluZ3MgJiBtZXNzYWdlcyAqLwotCi0jZGVmaW5lIExCVUZMIDIwMAot c3RhdGljIGNoYXIgbGJ1ZltMQlVGTCs0XTsKLWNoYXIgbW9kZW1tc2dbTEJVRkwrNF0gPSB7IE5V TCwgTlVMIH07CS8qIERJQUwgcmVzcG9uc2UgZnJvbSBtb2RlbSAqLwotCi0jaWZkZWYgRFlOQU1J QwotI2RlZmluZSBSQlVGTCAyNTYKLXN0YXRpYyBjaGFyICpyYnVmID0gTlVMTDsKLSNlbHNlCi0j ZGVmaW5lIFJCVUZMIDYzCi1zdGF0aWMgY2hhciByYnVmW1JCVUZMKzFdOwotI2VuZGlmIC8qIERZ TkFNSUMgKi8KLQotI2lmZGVmIERZTkFNSUMKLSNkZWZpbmUgRlVMTE5VTUwgMjU2Ci1jaGFyICpm YnVmID0gTlVMTDsJCQkvKiBGb3IgZnVsbCAocHJlZml4ZWQpIHBob25lIG51bWJlciAqLwotI2Vs c2UKLSNkZWZpbmUgRlVMTE5VTUwgMTAwCi1jaGFyIGZidWZbRlVMTE5VTUxdOwotI2VuZGlmIC8q IERZTkFNSUMgKi8KLQotc3RhdGljIGNram1wYnVmIHNqYnVmOwotCi0jaWZkZWYgQ0tfQU5TSUMK LXN0YXRpYyBTSUdUWVAgKCpzYXZhbHJtKShpbnQpOwkvKiBGb3Igc2F2aW5nIGFsYXJtIGhhbmRs ZXIgKi8KLXN0YXRpYyBTSUdUWVAgKCpzYXZpbnQpKGludCk7CS8qIEZvciBzYXZpbmcgaW50ZXJy dXB0IGhhbmRsZXIgKi8KLSNlbHNlCi1zdGF0aWMgU0lHVFlQICgqc2F2YWxybSkoKTsJLyogRm9y IHNhdmluZyBhbGFybSBoYW5kbGVyICovCi1zdGF0aWMgU0lHVFlQICgqc2F2aW50KSgpOwkvKiBG b3Igc2F2aW5nIGludGVycnVwdCBoYW5kbGVyICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLQot I2lmZGVmIENLTE9HRElBTAotc3RhdGljIFZPSUQKLWRvbG9nZGlhbChzKSBjaGFyICpzOyB7Ci0g ICAgY2hhciBidWYyWzE2XTsKLSAgICBjaGFyICogciA9IE5VTEw7Ci0gICAgaW50IHgsIG0sIG47 Ci0gICAgZXh0ZXJuIGNoYXIgY3hsb2didWZbXSwgdWlkYnVmW10sIG15aG9zdFtdOwotCi0gICAg aWYgKCFzKSBzID0gIiI7Ci0gICAgaWYgKCh4ID0gc3RybGVuKHMpKSA+IDApIHsJCS8qIFJlcGxh Y2Ugc3BhY2VzIGJ5IHVuZGVyc2NvcmVzICovCi0JciA9IChjaGFyICopbWFsbG9jKHgrMSk7Ci0J aWYgKHIpIHsKLQkgICAgaW50IGk7Ci0JICAgIGZvciAoaSA9IDA7IGkgPD0geDsgaSsrKSB7Ci0J CWlmIChzW2ldICE9IDAgJiYgc1tpXSA8PSBTUCkKLQkJICByW2ldID0gJ18nOwotCQllbHNlCi0J CSAgcltpXSA9IHNbaV07Ci0JICAgIH0KLQkgICAgcyA9IHI7Ci0JfQotICAgIH0KLSAgICBwID0g Y2tkYXRlKCk7Ci0gICAgbiA9IGNrc3RybmNweShjeGxvZ2J1ZixwLENYTE9HQlVGTCk7Ci0gICAg aWYgKCF1aWRidWZbMF0pIHsKLQlkZWJ1ZyhGMTAwLCJkb2xvZ2RpYWwgdWlkYnVmIGVtcHR5Iiwi IiwwKTsKLQlja3N0cm5jcHkodWlkYnVmLChjaGFyICopd2hvYW1pKCksVUlEQlVGTEVOKTsKLSAg ICB9Ci0gICAgbSA9IHN0cmxlbih1aWRidWYpK3N0cmxlbihteWhvc3QpK3N0cmxlbih0dG5hbWUp K3N0cmxlbihzKStzdHJsZW4oYnVmMikrMzI7Ci0gICAgaWYgKG4rbSA8IENYTE9HQlVGTC0xKSB7 Ci0JcCA9IGN4bG9nYnVmK247Ci0JaWYgKGRpYWxsY2MgJiYgZGlhbGxhYykgewotCSAgICBidWYy WzBdID0gJysnOwotCSAgICBja21ha21zZygmYnVmMlsxXSwxNSxkaWFsbGNjLCIoIixkaWFsbGFj LCIpIik7Ci0JfSBlbHNlIHsKLQkgICAgY2tzdHJuY3B5KGJ1ZjIsIlVua25vd24iLDE2KTsKLQl9 Ci0Jc3ByaW50ZihwLCIgJXMgJXMgVD1ESUFMIEg9JXMgRD0lcyBOPSVzIE89JXMgIiwJLyogc2Fm ZSAocHJlY2hlY2tlZCkgKi8KLQkJdWlkYnVmLAotCQlja2dldHBpZCgpLAotCQlteWhvc3QsCi0J CXR0bmFtZSwKLQkJcywKLQkJYnVmMgotCQkpOwotCWRlYnVnKEYxMTAsImRvbG9nZGlhbCBjeGxv Z2J1ZiIsY3hsb2didWYsMCk7Ci0gICAgfSBlbHNlCi0gICAgICBzcHJpbnRmKHAsIkxPR0RJQUwg QlVGRkVSIE9WRVJGTE9XIik7Ci0gICAgaWYgKHIpIGZyZWUocik7Ci19Ci0jZW5kaWYgLyogQ0tM T0dESUFMICovCi0KLSNpZm5kZWYgTUlOSURJQUwKLQotI2lmZGVmIENPTU1FTlQKLXN0YXRpYyBW T0lECi14Y3B5KHRvLGZyb20sbGVuKQkJLyogQ29weSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVz ICovCi0gICAgcmVnaXN0ZXIgY2hhciAqdG8sICpmcm9tOwotICAgIHJlZ2lzdGVyIHVuc2lnbmVk IGludCBsZW47IHsKLQl3aGlsZSAobGVuLS0pICp0bysrID0gKmZyb20rKzsKLX0KLSNlbmRpZiAv KiBDT01NRU5UICovCi0jZW5kaWYgLyogTUlOSURJQUwgKi8KLQotc3RhdGljIFNJR1RZUAotI2lm ZGVmIENLX0FOU0lDCi1kaWFsdGltZShpbnQgZm9vKQkJCS8qIFRpbWVyIGludGVycnVwdCBoYW5k bGVyICovCi0jZWxzZQotZGlhbHRpbWUoZm9vKSBpbnQgZm9vOwkJCS8qIFRpbWVyIGludGVycnVw dCBoYW5kbGVyICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRpYWx0aW1lICovIHsKLQot ICAgIGZhaWxfY29kZSA9IEZfVElNRTsJCQkvKiBGYWlsdXJlIHJlYXNvbiA9IHRpbWVvdXQgKi8K LSAgICBkZWJ1ZyhGMTAwLCJkaWFsdGltZSBjYXVnaHQgU0lHQUxSTSIsIiIsMCk7Ci0jaWZkZWYg QkVCT1gKLSNpZmRlZiBCRV9EUl83Ci0gICAgYWxhcm1fZXhwaXJlZCgpOwotI2VuZGlmIC8qIEJF X0RSXzcgKi8KLSNlbmRpZiAvKiBCRUJPWCAqLwotI2lmZGVmIE9TMgotICAgIHNpZ25hbChTSUdB TFJNLCBkaWFsdGltZSk7Ci0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgX19FTVhfXwotICAgIHNp Z25hbChTSUdBTFJNLCBTSUdfQUNLKTsJCS8qIE5lZWRlZCBmb3IgT1MvMiAqLwotI2VuZGlmIC8q IF9fRU1YX18gKi8KLQotI2lmZGVmIE9TSwkJCQkvKiBPUy05ICovCi0vKgotICBXZSBhcmUgaW4g YW4gaW50ZXJjZXB0IHJvdXRpbmUgYnV0IGRvIG5vdCBwZXJmb3JtIGEgRiRSVEUgKGRvbmUgaW1w bGljaXRseQotICBieSBSVFMpLCBzbyB3ZSBoYXZlIHRvIGRlY3JlbWVudCB0aGUgc2lnbWFzayBh cyBGJFJURSBkb2VzLiAgV2FybmluZzoKLSAgbG9uZ2p1bXAgb25seSByZXN0b3JlcyB0aGUgQ1BV IHJlZ2lzdGVycywgTk9UIHRoZSBGUFUgcmVnaXN0ZXJzLiAgU28sIGRvbid0Ci0gIHVzZSBGUFUg YXQgYWxsIG9yIGF0IGxlYXN0IGRvbid0IHVzZSBjb21tb24gRlBVIChkb3VibGUgb3IgZmxvYXQp IHJlZ2lzdGVyCi0gIHZhcmlhYmxlcy4KLSovCi0gICAgc2lnbWFzaygtMSk7Ci0jZW5kaWYgLyog T1NLICovCi0KLSNpZmRlZiBOVFNJRwotICAgIGlmIChmb28gPT0gU0lHQUxSTSkKLSAgICAgIFBv c3RBbGFybVNpZ1NlbSgpOwotICAgIGVsc2UKLSAgICAgIFBvc3RDdHJsQ1NlbSgpOwotI2Vsc2Ug LyogTlRTSUcgKi8KLSNpZmRlZiBOVAotICAgIGNrbG9uZ2ptcChja2phZGRyKHNqYnVmKSwxKTsK LSNlbHNlIC8qIE5UICovCi0gICAgY2tsb25nam1wKHNqYnVmLDEpOwotI2VuZGlmIC8qIE5UICov Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAvKiBOT1RSRUFDSEVEICovCi0gICAgU0lHUkVUVVJO OwotfQotCi1zdGF0aWMgU0lHVFlQCi0jaWZkZWYgQ0tfQU5TSUMKLWRpYWxpbnQoaW50IGZvbykJ CQkvKiBLZXlib2FyZCBpbnRlcnJ1cHQgaGFuZGxlciAqLwotI2Vsc2UKLWRpYWxpbnQoZm9vKSBp bnQgZm9vOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBkaWFsaW50ICovIHsKLSAgICBmYWls X2NvZGUgPSBGX0lOVDsKLSAgICBkZWJ1ZyhGMTAwLCJkaWFsaW50IGNhdWdodCBTSUdJTlQiLCIi LDApOwotI2lmZGVmIE9TMgotICAgIHNpZ25hbChTSUdJTlQsIGRpYWxpbnQpOwotICAgIGRlYnVn KEYxMDAsImRpYWxpbnQoKSBTSUdJTlQgY2F1Z2h0IC0tIGRpYWxpbnQgcmVzdG9yZWQiLCIiLDAp IDsKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBfX0VNWF9fCi0gICAgc2lnbmFsKFNJR0lOVCwg U0lHX0FDSyk7CQkvKiBOZWVkZWQgZm9yIE9TLzIgKi8KLSNlbmRpZiAvKiBfX0VNWF9fICovCi0j aWZkZWYgT1NLCQkJCS8qIE9TLTksIHNlZSBjb21tZW50IGluIGRpYWx0aW1lKCkgKi8KLSAgICBz aWdtYXNrKC0xKTsKLSNlbmRpZiAvKiBPU0sgKi8KLSNpZmRlZiBOVFNJRwotICAgIFBvc3RDdHJs Q1NlbSgpIDsKLSNpZmRlZiBDS19UQVBJCi0gICAgUG9zdFRBUElDb25uZWN0U2VtKCk7Ci0gICAg UG9zdFRBUElBbnN3ZXJTZW0oKTsKLSNlbmRpZiAvKiBDS19UQVBJICovCi0jZWxzZSAvKiBOVFNJ RyAqLwotI2lmZGVmIE5UCi0gICAgY2tsb25nam1wKGNramFkZHIoc2pidWYpLDEpOwotI2Vsc2Ug LyogTlQgKi8KLSAgICBja2xvbmdqbXAoc2pidWYsMSk7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRp ZiAvKiBOVCAqLwotICAgIFNJR1JFVFVSTjsKLX0KLQotLyoKLSAgUm91dGluZSB0byByZWFkIGEg Y2hhcmFjdGVyIGZyb20gY29tbXVuaWNhdGlvbiBkZXZpY2UsIGhhbmRsaW5nIFRFTE5FVAotICBw cm90b2NvbCBuZWdvdGlhdGlvbnMgaW4gY2FzZSB3ZSdyZSBjb25uZWN0ZWQgdG8gdGhlIG1vZGVt IHRocm91Z2ggYQotICBUQ1AvSVAgVEVMTkVUIG1vZGVtIHNlcnZlci4KLSovCi1zdGF0aWMgaW50 Ci1kZGluYyhuKSBpbnQgbjsgewotI2lmZGVmIFROQ09ERQotICAgIGludCBjID0gMDsKLSAgICBp bnQgZG9uZSA9IDA7Ci0gICAgZGVidWcoRjEwMSwiZGRpbmMgZW50cnkgbiIsIiIsbik7Ci0gICAg d2hpbGUgKCFkb25lKSB7Ci0JYyA9IHR0aW5jKG4pOwotCS8qIGRlYnVnKEYwMDAsImRkaW5jIiwi IixjKTsgKi8KLQlpZiAoYyA8IDApIHJldHVybihjKTsKLSNpZm5kZWYgT1MyCi0JaWYgKChjID09 IElBQykgJiYgbmV0d29yayAmJiBJU19URUxORVQoKSkgewotCSAgICBzd2l0Y2ggKHRuX2Rvb3Ao KENIQVIpKGMgJiAweGZmKSxkdXBsZXgsdHRpbmMpKSB7Ci0JICAgICAgY2FzZSAyOiBkdXBsZXgg PSAwOyBjb250aW51ZTsKLQkgICAgICBjYXNlIDE6IGR1cGxleCA9IDE7Ci0JICAgICAgZGVmYXVs dDogY29udGludWU7Ci0JICAgIH0KLQl9IGVsc2UgZG9uZSA9IDE7Ci0jZWxzZSAvKiBPUzIgKi8K LQlkb25lID0gIShjID09IElBQyAmJiBuZXR3b3JrICYmIElTX1RFTE5FVCgpKTsKLQlzY3JpcHR3 cnRidWYoYyk7CS8qIFRFTE5FVCBuZWdvdGlhdGlvbnMgaGFuZGxlZCBieSBlbXVsYXRvciAqLwot I2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLSAgICByZXR1cm4oYyAmIDB4ZmYpOwotI2Vsc2UgIC8q IFROQ09ERSAqLwotICAgIHJldHVybih0dGluYyhuKSk7Ci0jZW5kaWYgLyogVE5DT0RFICovCi19 Ci0KLXN0YXRpYyBWT0lECi10dHNsb3cocyxtaWxsaXNlYykgY2hhciAqczsgaW50IG1pbGxpc2Vj OyB7IC8qIE91dHB1dCBzLWwtby13LWwteSAqLwotI2lmZGVmIFRDUFNPQ0tFVAotICAgIGV4dGVy biBpbnQgdG5fbmxtLCB0bl9iX25sbTsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSAgICBkZWJ1 ZyhGMTExLCJ0dHNsb3ciLHMsbWlsbGlzZWMpOwotICAgIGlmIChkaWFsZHB5ICYmIChkdXBsZXgg fHwgIW1kbWVjaG8pKSB7IC8qIEVjaG8gdGhlIGNvbW1hbmQgaW4gY2FzZSBtb2RlbSAqLwotCXBy aW50ZigiJXNcbiIscyk7CQkvKiBpc24ndCBlY2hvaW5nIGNvbW1hbmRzLiAqLwotI2lmZGVmIE9T MgotCXsKLQkgICAgY2hhciAqczIgPSBzOwkJLyogRWNobyB0byBlbXVsYXRvciAqLwotCSAgICB3 aGlsZSAoKnMyKSB7Ci0JCXNjcmlwdHdydGJ1ZigoVVNIT1JUKSpzMisrKTsKLQkgICAgfQotCSAg ICBzY3JpcHR3cnRidWYoKFVTSE9SVClDUik7Ci0JICAgIHNjcmlwdHdydGJ1ZigoVVNIT1JUKUxG KTsKLQl9Ci0jZW5kaWYgLyogT1MyICovCi0gICAgfQotICAgIGZvciAoOyAqczsgcysrKSB7Ci0J dHRvYygqcyk7Ci0jaWZkZWYgVENQU09DS0VUCi0JaWYgKCpzID09IENSICYmIG5ldHdvcmsgJiYg SVNfVEVMTkVUKCkpIHsKLQkgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkgJiYgdG5f bmxtICE9IFROTF9DUikKLQkgICAgICB0dG9jKChjaGFyKSgodG5fbmxtID09IFROTF9DUkxGKSA/ IExGIDogTlVMKSk7Ci0JICAgIGVsc2UgaWYgKFRFTE9QVF9NRShURUxPUFRfQklOQVJZKSAmJgot CQkgICAgICh0bl9iX25sbSA9PSBUTkxfQ1JMRiB8fCB0bl9iX25sbSA9PSBUTkxfQ1JOVUwpKQot CSAgICAgIHR0b2MoKGNoYXIpKCh0bl9iX25sbSA9PSBUTkxfQ1JMRikgPyBMRiA6IE5VTCkpOwot ICAgICAgICB9Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0JaWYgKG1pbGxpc2VjID4gMCkKLQkg IG1zbGVlcChtaWxsaXNlYyk7Ci0gICAgfQotfQotCi0vKgotICogV2FpdCBmb3IgYSBzdHJpbmcg b2YgY2hhcmFjdGVycy4KLSAqCi0gKiBUaGUgY2hhcmFjdGVycyBhcmUgd2FpdGVkIGZvciBpbmRp dmlkdWFsbHksIGFuZCBvdGhlciBjaGFyYWN0ZXJzIG1heQotICogYmUgcmVjZWl2ZWQgImluIGJl dHdlZW4iLiAgVGhpcyBtZXJlbHkgZ3VhcmFudGVlcyB0aGF0IHRoZSBjaGFyYWN0ZXJzCi0gKiBB UkUgcmVjZWl2ZWQsIGFuZCBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkLgotICovCi1zdGF0aWMgVk9J RAotd2FpdGZvcihzKSBjaGFyICpzOyB7Ci0gICAgQ0hBUiBjLCB4OwotICAgIHdoaWxlICgoYyA9 ICpzKyspKSB7CQkvKiB3aGlsZSBtb3JlIGNoYXJhY3RlcnMgcmVtYWluLi4uICovCi0JZG8gewkJ CQkvKiB3YWl0IGZvciB0aGUgY2hhcmFjdGVyICovCi0JICAgIHggPSAoQ0hBUikgKGRkaW5jKDAp ICYgMDE3Nyk7Ci0JICAgIGRlYnVnKEYwMDAsImRpYWwgd2FpdGZvciBnb3QiLCIiLHgpOwotCSAg ICBpZiAoZGlhbGRweSkgewotCQlpZiAoeCAhPSBMRikgY29ub2MoeCk7Ci0JCWlmICh4ID09IENS KSBjb25vYyhMRik7Ci0JICAgIH0KLQl9IHdoaWxlICh4ICE9IGMpOwotICAgIH0KLX0KLQotc3Rh dGljIGludAotZGlkd2VnZXQocyxyKSBjaGFyICpzLCAqcjsgewkvKiBMb29rcyBpbiBzdHJpbmcg cyBmb3IgcmVzcG9uc2UgciAqLwotICAgIGludCBsciA9IChpbnQpc3RybGVuKHIpOwkvKiAgMCBt ZWFucyBub3QgZm91bmQsIDEgbWVhbnMgZm91bmQgaXQgKi8KLSAgICBpbnQgaTsKLSAgICBkZWJ1 ZyhGMTEwLCJkaWR3ZWdldCIsciwwKTsKLSAgICBkZWJ1ZyhGMTEwLCIgaW4iLHMsMCk7Ci0gICAg Zm9yIChpID0gKGludClzdHJsZW4ocyktbHI7IGkgPj0gMDsgaS0tKQotCWlmICggc1tpXSA9PSBy WzBdICkgaWYgKCAhc3RybmNtcChzK2kscixscikgKSByZXR1cm4oIDEgKTsKLSAgICByZXR1cm4o IDAgKTsKLX0KLQotCi0vKiBSIEUgUyBFIFQgLS0gUmVzZXQgYWxhcm1zLCBldGMuIG9uIGV4aXQu ICovCi0KLXN0YXRpYyBWT0lECi1kcmVzZXQoKSB7Ci0gICAgZGVidWcoRjEwMCwiZHJlc2V0IHJl c2V0dGluZyBhbGFybSBhbmQgc2lnbmFsIGhhbmRsZXJzIiwiIiwwKTsKLSAgICBhbGFybSgwKTsK LSAgICBzaWduYWwoU0lHQUxSTSxzYXZhbHJtKTsJCS8qIHJlc3RvcmUgYWxhcm0gaGFuZGxlciAq LwotICAgIHNpZ25hbChTSUdJTlQsc2F2aW50KTsJCS8qIHJlc3RvcmUgaW50ZXJydXB0IGhhbmRs ZXIgKi8KLSAgICBkZWJ1ZyhGMTAwLCJkcmVzZXQgYWxhcm0gYW5kIHNpZ25hbCBoYW5kbGVycyBy ZXNldCIsIiIsMCk7Ci19Ci0KLS8qCi0gIENhbGwgdGhpcyByb3V0aW5lIHdoZW4gdGhlIG1vZGVt IHJlcG9ydHMgdGhhdCBpdCBoYXMgY29ubmVjdGVkIGF0IGEgY2VydGFpbgotICBzcGVlZCwgZ2l2 aW5nIHRoYXQgc3BlZWQgYXMgdGhlIGFyZ3VtZW50LiAgSWYgdGhlIGNvbm5lY3Rpb24gc3BlZWQg aXMgbm90Ci0gIHRoZSBzYW1lIGFzIEtlcm1pdCdzIGN1cnJlbnQgY29tbXVuaWNhdGlvbiBzcGVl ZCwgQU5EIHRoZSBtb2RlbSBpbnRlcmZhY2UKLSAgc3BlZWQgaXMgbm90IGxvY2tlZCAoaS5lLiBE SUFMIFNQRUVELU1BVENISU5HIGlzIG5vdCBPTiksIHRoZW4gY2hhbmdlIHRoZQotICBkZXZpY2Ug c3BlZWQgdG8gdGhlIG9uZSBnaXZlbi4KLSovCi1zdGF0aWMgVk9JRAotI2lmZGVmIENLX0FOU0lD Ci1zcGRjaGcobG9uZyBzKQotI2Vsc2UKLXNwZGNoZyhzKSBsb25nIHM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLS8qIHNwZGNoZyAqLyB7Ci0gICAgaW50IHMyOwotICAgIGlmICghbWRtc3BkKQkJ CS8qIElmIG1vZGVtIGludGVyZmFjZSBzcGVlZCBsb2NrZWQsICovCi0gICAgICByZXR1cm47CQkJ CS8qICBkb24ndCBkbyB0aGlzLiAqLwotICAgIGlmIChzcGVlZCAhPSBzKSB7CQkJLyogU3BlZWRz IGRpZmZlcj8gKi8KLQlzMiA9IHMgLyAxMEw7CQkJLyogQ29udmVydCB0byBjcHMgZXhwcmVzc2Vk IGFzIGludCAqLwotCWlmICh0dHNzcGQoczIpIDwgMCkgewkJLyogQ2hhbmdlIHNwZWVkLiAqLwot CSAgICBwcmludGYoIiBXQVJOSU5HIC0gc3BlZWQgY2hhbmdlIHRvICVsZCBmYWlsZWQuXHJcbiIs cyk7Ci0JfSBlbHNlIHsKLQkgICAgcHJpbnRmKCIgU3BlZWQgY2hhbmdlZCB0byAlbGQuXHJcbiIs cyk7Ci0JICAgIHNwZWVkID0gczsJCQkvKiBVcGRhdGUgZ2xvYmFsIHNwZWVkIHZhcmlhYmxlICov Ci0JfQotICAgIH0KLX0KLQotLyoKLSAgRGlzcGxheSBhbGwgY2hhcmFjdGVycyByZWNlaXZlZCBm cm9tIG1vZGVtIGRpYWxlciB0aHJvdWdoIHRoaXMgcm91dGluZSwKLSAgZm9yIGNvbnNpc3RlbnQg aGFuZGxpbmcgb2YgY2FycmlhZ2UgcmV0dXJucyBhbmQgbGluZWZlZWRzLgotKi8KLXN0YXRpYyBW T0lECi0jaWZkZWYgQ0tfQU5TSUMKLWRpYWxvYyhjaGFyIGMpCi0jZWxzZQotZGlhbG9jKGMpIGNo YXIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiBkaWFsb2MgKi8JCQkJLyogRGlhbCBP dXRwdXQgQ2hhcmFjdGVyICovCi0gICAgaWYgKGRpYWxkcHkpIHsKLQlpZiAoYyAhPSBMRikgY29u b2MoYyk7CQkvKiBEb24ndCBlY2hvIExGICovCi0JaWYgKGMgPT0gQ1IpIGNvbm9jKExGKTsJCS8q IEVjaG8gQ1IgYXMgQ1JMRiAqLwotICAgIH0KLX0KLQotI2lmbmRlZiBOT1NQTAotY2hhciAqCi1n ZXRkbSh4KSBpbnQgeDsgewkJCS8qIFJldHVybiBkaWFsIG1vZGlmaWVyICovCi0gICAgTURNSU5G ICogbXA7Ci0gICAgaW50IG07Ci0gICAgaW50IGlzaGF5ZXMgPSAwOwotICAgIG0gPSBtZG10eXA7 Ci0gICAgaWYgKG0gPCAxKQotICAgICAgaWYgKG1kbXNhdiA+IC0xKQotCW0gPSBtZG1zYXY7Ci0g ICAgaWYgKG0gPCAxKQotICAgICAgcmV0dXJuKCIiKTsKLSNpZm5kZWYgTUlOSURJQUwKLSAgICBp ZiAobSA9PSBuX1RBUEkpCi0gICAgICBtID0gbl9IQVlFUzsKLSNlbmRpZiAvKiBNSU5JRElBTCAq LwotICAgIG1wID0gbW9kZW1wW21dOwotICAgIGlzaGF5ZXMgPSAoZGlhbGNhcGFzID8gZGlhbGNh cGFzIDogbXAtPmNhcGFzKSAmIENLRF9BVDsKLSAgICBzd2l0Y2ggKHgpIHsKLSAgICAgIGNhc2Ug Vk5fRE1fTFA6Ci0JcmV0dXJuKGlzaGF5ZXMgPyAiLCIgOiAiIik7Ci0gICAgICBjYXNlIFZOX0RN X1NQOgotI2lmZGVmIE1JTklESUFMCi0JcmV0dXJuKCIiKTsKLSNlbHNlCi0JcmV0dXJuKG0gPT0g bl9VU1IgPyAiLyIgOiAiIik7Ci0jZW5kaWYgLyogTUlOSURJQUwgKi8KLSAgICAgIGNhc2UgVk5f RE1fUEQ6Ci0JcmV0dXJuKGlzaGF5ZXMgPyAiUCIgOiAiIik7Ci0gICAgICBjYXNlIFZOX0RNX1RE OgotCXJldHVybihpc2hheWVzID8gIlQiIDogIiIpOwotICAgICAgY2FzZSBWTl9ETV9XQToKLQly ZXR1cm4oaXNoYXllcyA/ICJAIiA6ICIiKTsKLSAgICAgIGNhc2UgVk5fRE1fV0Q6Ci0JcmV0dXJu KGlzaGF5ZXMgPyAiVyIgOiAiIik7Ci0gICAgICBjYXNlIFZOX0RNX1JDOgotCXJldHVybihpc2hh eWVzID8gIjsiIDogIiIpOwotICAgICAgY2FzZSBWTl9ETV9IRjoKLQlyZXR1cm4oaXNoYXllcyA/ ICIhIiA6ICIiKTsKLSAgICAgIGNhc2UgVk5fRE1fV0I6Ci0JcmV0dXJuKGlzaGF5ZXMgPyAiJCIg OiAiIik7Ci0gICAgfQotICAgIHJldHVybigiIik7Ci19Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQot c3RhdGljIFZPSUQKLWdldGRpYWxtdGgoKSB7Ci0gICAgaWYgKGRpYWxtYXV0byAmJiBkaWFsbGNj KSB7CQkvKiBJZiBESUFMIE1FVEhPRCBBVVRPLi4uICovCi0JaW50IGk7CQkJCS8qIGFuZCB3ZSBr bm93IG91ciBhcmVhIGNvZGUuLi4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgbmRpYWx0b2NjOyBpKysp IHsgLyogRmlyc3QgY2hlY2sgVG9uZSBjb3VudHJpZXMgbGlzdCAqLwotCSAgICBpZiAoIXN0cmNt cChkaWFsdG9jY1tpXSxkaWFsbGNjKSkgewotCQlkaWFsbXRoID0gWFlETV9UOwotCQlicmVhazsK LQkgICAgfQotCX0KLQlmb3IgKGkgPSAwOyBpIDwgbmRpYWxwdWNjOyBpKyspIHsgLyogVGhlbiBQ dWxzZSBjb3VudHJpZXMgbGlzdCAqLwotCSAgICBpZiAoIXN0cmNtcChkaWFscHVjY1tpXSxkaWFs bGNjKSkgewotCQlkaWFsbXRoID0gWFlETV9QOwotCQlicmVhazsKLQkgICAgfQotCX0KLSAgICB9 Ci19Ci0KLVZPSUQJCQkJLyogR2V0IGRpYWxpbmcgZGVmYXVsdHMgZnJvbSBlbnZpcm9ubWVudCAq LwotZ2V0ZGlhbGVudigpIHsKLSAgICBjaGFyICpwID0gTlVMTDsKLSAgICBpbnQgaSwgeDsKLQot ICAgIG1ha2VzdHIoJnAsZ2V0ZW52KCJLX0RJQUxfRElSRUNUT1JZIikpOwotICAgIGlmIChwKSB7 Ci0JaW50IGk7Ci0JeHdvcmRzKHAsKE1BWERESVIgLSAyKSxkaWFsZGlyLDApOwotCWZvciAoaSA9 IDA7IGkgPCAoTUFYRERJUiAtIDEpOyBpKyspIHsKLQkgICAgaWYgKCFkaWFsZGlyW2krMV0pCi0J ICAgICAgYnJlYWs7Ci0JICAgIGVsc2UKLQkgICAgICBkaWFsZGlyW2ldID0gZGlhbGRpcltpKzFd OwotCX0KLQluZGlhbGRpciA9IGk7Ci0gICAgfQotICAgIHhtYWtlc3RyKCZkaWFsbGNjLGdldGVu digiS19DT1VOVFJZQ09ERSIpKTsgLyogTXkgY291bnRyeSBjb2RlICovCi0gICAgeG1ha2VzdHIo JmRpYWxpeHAsZ2V0ZW52KCJLX0xEX1BSRUZJWCIpKTsgICAvKiBNeSBsb25nLWRpc3RhbmNlIHBy ZWZpeCAqLwotICAgIHhtYWtlc3RyKCZkaWFsbGRwLGdldGVudigiS19JTlRMX1BSRUZJWCIpKTsg LyogTXkgaW50ZXJuYXRpb25hbCBwcmVmaXggKi8KLSAgICB4bWFrZXN0cigmZGlhbGxkcCxnZXRl bnYoIktfVEZfUFJFRklYIikpOyAgIC8qIE55IFRvbGwtZnJlZSBwcmVmaXggKi8KLQotI2lmbmRl ZiBOT0lDUAotICAgIHAgPSBnZXRlbnYoIktfRElBTF9NRVRIT0QiKTsJLyogTG9jYWwgZGlhbCBt ZXRob2QgKi8KLSAgICBpZiAocCkgaWYgKCpwKSB7Ci0JZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZGlh bF9tW107Ci0JZXh0ZXJuIGludCBuZGlhbF9tOwotCWkgPSBsb29rdXAoZGlhbF9tLHAsbmRpYWxf bSwmeCk7Ci0JaWYgKGkgPiAtMSkgewotCSAgICBpZiAoaSA9PSBYWURNX0EpIHsKLQkJZGlhbG1h dXRvID0gMTsKLQkJZGlhbG10aCA9IFhZRE1fRDsKLQkgICAgfSBlbHNlIHsKLQkJZGlhbG1hdXRv ID0gMDsKLQkJZGlhbG10aCA9IGk7Ci0JICAgIH0KLQl9Ci0gICAgfQotI2VuZGlmIC8qIE5PSUNQ ICovCi0KLSAgICBwID0gTlVMTDsKLSAgICB4bWFrZXN0cigmcCxnZXRlbnYoIktfVEZfQVJFQUNP REUiKSk7IC8qIFRvbGwtZnJlZSBhcmVhY29kZXMgKi8KLSAgICBpZiAocCkgewotCWludCBpOwot CXh3b3JkcyhwLDcsZGlhbHRmYywwKTsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JICAg IGlmICghZGlhbHRmY1tpKzFdKQotCSAgICAgIGJyZWFrOwotCSAgICBlbHNlCi0JICAgICAgZGlh bHRmY1tpXSA9IGRpYWx0ZmNbaSsxXTsKLQl9Ci0JbnRvbGxmcmVlID0gaTsKLQlmcmVlKHApOwot ICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgTUFYVFBDQzsgaSsrKSB7CS8qIENsZWFyIFRvbmUv UHVsc2UgY291bnRyeSBsaXN0cyAqLwotCWRpYWx0b2NjW2ldID0gTlVMTDsKLQlkaWFscHVjY1tp XSA9IE5VTEw7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBNQVhUUENDOyBpKyspIHsJLyog SW5pdCBUb25lIGNvdW50cnkgbGlzdCAqLwotCWlmICh0b25lY2NbaV0pCi0JICBtYWtlc3RyKCYo ZGlhbHRvY2NbaV0pLHRvbmVjY1tpXSk7Ci0JZWxzZQotCSAgYnJlYWs7Ci0gICAgfQotICAgIG5k aWFsdG9jYyA9IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IE1BWFRQQ0M7IGkrKykgewkvKiBJbml0 IFB1bHNlIGNvdW50cnkgbGlzdCAqLwotCWlmIChwdWxzZWNjW2ldKQotCSAgbWFrZXN0cigmKGRp YWxwdWNjW2ldKSxwdWxzZWNjW2ldKTsKLQllbHNlCi0JICBicmVhazsKLSAgICB9Ci0gICAgbmRp YWxwdWNjID0gaTsKLQotICAgIGlmIChkaWFsbGNjKSB7CQkJLyogSGF2ZSBjb3VudHJ5IGNvZGUg Ki8KLQlpZiAoIXN0cmNtcChkaWFsbGNjLCIxIikpIHsJLyogSWYgaXQncyAxICovCi0JICAgIGlm ICghZGlhbGxkcCkJCS8qIFNldCB0aGVzZSBwcmVmaXhlcy4uLiAqLwotCSAgICAgIG1ha2VzdHIo JmRpYWxsZHAsIjEiKTsKLQkgICAgaWYgKCFkaWFsdGZwKQotCSAgICAgIG1ha2VzdHIoJmRpYWx0 ZnAsIjEiKTsKLQkgICAgaWYgKCFkaWFsaXhwKQotCSAgICAgIG1ha2VzdHIoJmRpYWxpeHAsIjAx MSIpOwotCSAgICBpZiAobnRvbGxmcmVlID09IDApIHsJLyogVG9sbC1mcmVlIGFyZWEgY29kZXMg Ki8KLQkJaWYgKChkaWFsdGZjWzBdID0gbWFsbG9jKDQpKSkgewotCQkgICAgY2tzdHJuY3B5KGRp YWx0ZmNbMF0sIjgwMCIsNCk7IC8qIDE5NzAtc29tZXRoaW5nICovCi0JCSAgICBudG9sbGZyZWUr KzsKLQkJICAgIGlmICgoZGlhbHRmY1sxXSA9IG1hbGxvYyg0KSkpIHsKLQkJCWNrc3RybmNweShk aWFsdGZjWzFdLCI4ODgiLDQpOyAvKiAxOTk2ICovCi0JCQludG9sbGZyZWUrKzsKLQkJCWlmICgo ZGlhbHRmY1syXSA9IG1hbGxvYyg0KSkpIHsKLQkJCSAgICBja3N0cm5jcHkoZGlhbHRmY1syXSwi ODc3Iiw0KTsgLyogNSBBcHJpbCAxOTk4ICovCi0JCQkgICAgbnRvbGxmcmVlKys7Ci0JCQkgICAg aWYgKChkaWFsdGZjWzNdID0gbWFsbG9jKDQpKSkgewotCQkJCWNrc3RybmNweShkaWFsdGZjWzNd LCI4NjYiLDQpOyAvKiAyMDAwPyAqLwotCQkJCW50b2xsZnJlZSsrOwotCQkJICAgIH0KLQkJCX0K LQkJICAgIH0KLQkJfQotCSAgICB9Ci0JfSBlbHNlIGlmICghc3RyY21wKGRpYWxsY2MsIjM1OCIp ICYmCi0JCSAgICgoaW50KSBzdHJjbXAoenpuZGF0ZSgpLCIxOTk2MTAxMSIpID4gMCkKLQkJICAg KSB7CQkJLyogRmlubGFuZCAqLwotCSAgICBpZiAoIWRpYWxsZHApCQkvKiBMb25nLWRpc3RhbmNl IHByZWZpeCAqLwotCSAgICAgIG1ha2VzdHIoJmRpYWxsZHAsIjkiKTsKLQkgICAgaWYgKCFkaWFs aXhwKSAJCS8qIEludGVybmF0aW9uYWwgZGlhbGluZyBwcmVmaXggKi8KLQkgICAgICBtYWtlc3Ry KCZkaWFsaXhwLCI5OTAiKTsKLQl9IGVsc2UgewkJCS8qIE5vdCBOQU5QIG9yIEZpbmxhbmQgKi8K LQkgICAgaWYgKCFkaWFsbGRwKQotCSAgICAgIG1ha2VzdHIoJmRpYWxsZHAsIjAiKTsKLQkgICAg aWYgKCFkaWFsaXhwKQotCSAgICAgIG1ha2VzdHIoJmRpYWxpeHAsIjAwIik7Ci0JfQotICAgIH0K LSAgICB4bWFrZXN0cigmZGlhbGxhYyxnZXRlbnYoIktfQVJFQUNPREUiKSk7Ci0gICAgeG1ha2Vz dHIoJmRpYWxweG8sZ2V0ZW52KCJLX1BCWF9PQ1AiKSk7Ci0gICAgeG1ha2VzdHIoJmRpYWxweGks Z2V0ZW52KCJLX1BCWF9JQ1AiKSk7Ci0gICAgcCA9IGdldGVudigiS19QQlhfWENIIik7Ci0jaWZk ZWYgQ09NTUVOVAotICAgIHhtYWtlc3RyKCZkaWFscHh4LHApOwotI2Vsc2UKLSAgICBpZiAocCkg aWYgKCpwKSB7Ci0JY2hhciAqIHMgPSBOVUxMOwotCWNoYXIgKiBwcFtNQVhQQlhFWENIKzJdOwot CW1ha2VzdHIoJnMscCk7CQkJLyogTWFrZSBhIGNvcHkgZm9yIHBva2luZyAqLwotCWlmIChzKSB7 Ci0JICAgIHh3b3JkcyhzLE1BWFBCWEVYQ0grMSxwcCwwKTsgLyogTm90ZTogcHBbXSBpcyAxLWJh c2VkLiAqLwotCSAgICBmb3IgKGkgPSAwOyBpIDw9IE1BWFBCWEVYQ0g7IGkrKykgewotICAgICAg ICAgICAgICAgIGlmICghcHBbaSsxXSkgYnJlYWs7Ci0JCW1ha2VzdHIoJihkaWFscHh4W2ldKSxw cFtpKzFdKTsKLQkJbmRpYWxweHgrKzsKLQkgICAgfQotCSAgICBtYWtlc3RyKCZzLE5VTEwpOwkJ LyogRnJlZSBwb2tlZCBjb3B5ICovCi0JfQotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi19 Ci0KLXN0YXRpYyBpbnQKLWRpYWxmYWlsKHgpIGludCB4OyB7Ci0gICAgY2hhciAqIHM7Ci0KLSAg ICBmYWlsX2NvZGUgPSB4OwotICAgIGRlYnVnKEYxMDEsImNrdWRpYWwgZGlhbGZhaWwiLCIiLHgp OwotICAgIGRyZXNldCgpOwkJCQkvKiBSZXNldCBhbGFybSBhbmQgc2lnbmFsIGhhbmRsZXJzICov Ci0KLSAgICBwcmludGYoIiVzIEZhaWx1cmU6ICIsIGZ1bmNfY29kZSA9PSAwID8gIkRJQUwiIDog IkFOU1dFUiIpOwotICAgIGlmIChkaWFsZHB5KSB7CQkJLyogSWYgc2hvd2luZyBwcm9ncmVzcyAq LwotICAgICAgIGRlYnVnKEYxMDAsImRpYWwgZGlzcGxheSBpcyBvbiIsIiIsMCk7Ci0JcCA9IGNr X3RpbWUoKTsJCQkvKiBnZXQgY3VycmVudCB0aW1lOyAqLwotCWlmICgqcCkgcHJpbnRmKCIlczog IixwKTsKLSAgICB9Ci0gICAgc3dpdGNoIChmYWlsX2NvZGUpIHsJCS8qIFR5cGUgb2YgZmFpbHVy ZSAqLwotICAgICAgY2FzZSBGX1RJTUU6IAkJCS8qIFRpbWVvdXQgKi8KLQlpZiAoZGlhbF93aGF0 ID09IERXX0lOSVQpCi0JICBwcmludGYgKCJUaW1lZCBvdXQgd2hpbGUgdHJ5aW5nIHRvIGluaXRp YWxpemUgbW9kZW0uXG4iKTsKLQllbHNlIGlmIChkaWFsX3doYXQgPT0gRFdfRElBTCkKLQkgIHBy aW50ZiAoIiVzIGludGVydmFsIGV4cGlyZWQuXG4iLAotCQkgIGZ1bmNfY29kZSA9PSAwID8gIkRJ QUwgVElNRU9VVCIgOiAiQU5TV0VSIHRpbWVvdXQiKTsKLQllbHNlCi0JICBwcmludGYoIlRpbWVv dXQuXG4iKTsKLQlmZmx1c2goc3Rkb3V0KTsKLQlpZiAobWRtY2FwYXMgJiBDS0RfQVQpCi0JICB0 dG9jKCdcMDE1Jyk7CQkJLyogU2VuZCBDUiB0byBpbnRlcnJ1cHQgZGlhbGluZyAqLwotCS8qIFNv bWUgSGF5ZXMgbW9kZW1zIGRvbid0IGZhaWwgd2l0aCBCVVNZIG9uIGJ1c3kgbGluZXMgKi8KLQlk aWFsc3RhID0gRElBX1RJTU87Ci0JZGVidWcoRjExMCwiZGlhbCIsInRpbWVvdXQiLDApOwotCWJy ZWFrOwotCi0gICAgICBjYXNlIEZfSU5UOgkJCS8qIERpYWxpbmcgaW50ZXJydXB0ZWQgKi8KLQlw cmludGYgKCJJbnRlcnJ1cHRlZC5cbiIpOwotCWZmbHVzaChzdGRvdXQpOwotI2lmbmRlZiBOT1hG RVIKLQlpbnRlcnJ1cHRlZCA9IDE7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0JZGVidWcoRjExMSwi ZGlhbCIsImludGVycnVwdGVkIixtZG1jYXBhcyAmIENLRF9BVCk7Ci0JaWYgKG1kbWNhcGFzICYg Q0tEX0FUKQotCSAgdHRvYygnXDAxNScpOwkJCS8qIFNlbmQgQ1IgdG8gaW50ZXJydXB0IGRpYWxp bmcgKi8KLQlkaWFsc3RhID0gRElBX0lOVFI7Ci0JYnJlYWs7Ci0KLSAgICBjYXNlIEZfTU9ERU06 CQkJLyogTW9kZW0gZGV0ZWN0ZWQgYSBmYWlsdXJlICovCi0gICAgICAgICBkZWJ1ZyhGMTExLCJk aWFsZmFpbCgpIiwibGJ1ZiIsbGJ1Zik7Ci0gICAgICAgICBpZiAobGJ1ZiAmJiAqbGJ1Zikgewot ICAgICAgICAgICAgcHJpbnRmKCIgXCIiKTsKLSAgICAgICAgICAgIGZvciAocyA9IGxidWY7ICpz OyBzKyspCi0gICAgICAgICAgICAgICBpZiAoaXNwcmludCgqcykpCi0gICAgICAgICAgICAgICAg ICBwdXRjaGFyKCpzKTsJCS8qIERpc3BsYXkgcHJpbnRhYmxlIHJlYXNvbiAqLwotICAgICAgICAg ICAgcHJpbnRmICgiXCIiKTsKLSAgICAgICAgIH0gZWxzZSBwcmludGYoZnVuY19jb2RlID09IDAg PwotICAgICAgICAgICAgICAgICAgICAgICAgIiBDYWxsIG5vdCBjb21wbGV0ZWQuIiA6Ci0gICAg ICAgICAgICAgICAgICAgICAgICAiIENhbGwgZGlkIG5vdCBjb21lIGluLiIKLSAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0JcHJpbnRmKCJcbiIpOwotCWRlYnVnKEYxMTAsImRpYWwiLGxidWYs MCk7Ci0JaWYgKGRpYWxzdGEgPCAwKSBkaWFsc3RhID0gRElBX1VOU1A7Ci0JYnJlYWs7Ci0KLSAg ICAgIGNhc2UgRl9NSU5JVDoJCQkvKiBGYWlsdXJlIHRvIGluaXRpYWxpemUgbW9kZW0gKi8KLQlw cmludGYgKCJFcnJvciBpbml0aWFsaXppbmcgbW9kZW0uXG4iKTsKLQlkZWJ1ZyhGMTEwLCJkaWFs IiwibW9kZW0gaW5pdCIsMCk7Ci0JZGlhbHN0YSA9IERJQV9OT0lOOwotCWJyZWFrOwotCi0gICAg ZGVmYXVsdDoKLQlwcmludGYoInVua25vd25cbiIpOwotCWRlYnVnKEYxMTAsImRpYWwiLCJ1bmtu b3duIiwwKTsKLQlmZmx1c2goc3Rkb3V0KTsKLQlpZiAobWRtY2FwYXMgJiBDS0RfQVQpCi0JICB0 dG9jKCdcMDE1Jyk7CQkJLyogU2VuZCBDUiB0byBpbnRlcnJ1cHQgZGlhbGluZyAqLwotCWRpYWxz dGEgPSBESUFfSU5UUjsKLSAgICB9Ci0KLSNpZmRlZiBEWU5BTUlDCi0gICAgaWYgKHJidWYpIGZy ZWUocmJ1Zik7IHJidWYgPSBOVUxMOwotICAgIGlmIChmYnVmKSBmcmVlKGZidWYpOyBmYnVmID0g TlVMTDsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSAgICBpZiAoZGlhbHN0YSA8IDApIGRpYWxz dGEgPSBESUFfVUVSUjsgLyogU2V0IGZhaWx1cmUgY29kZSAqLwotICAgIHJldHVybigwKTsJCQkJ LyogUmV0dXJuIHplcm8gKGltcG9ydGFudCkgKi8KLX0KLQotLyogIEMgSyBEIEkgQSBMCSAtLSAg RGlhbCB1cCB0aGUgcmVtb3RlIHN5c3RlbSAqLwotCi0vKiBSZXR1cm5zIDEgaWYgY2FsbCBjb21w bGV0ZWQsIDAgb3RoZXJ3aXNlICovCi0KLXN0YXRpYyBpbnQgbWRtd2FpdCwgbWRtc3RhdCA9IDA7 Ci0jaWZuZGVmIENLX1RBUEkKLXN0YXRpYwotI2VuZGlmIC8qIENLX1RBUEkgKi8KLWludCB3YWl0 Y3Q7Ci1pbnQgbWRtd2FpdGQgPSAxMCA7CQkJLyogZGlhbHRtbyAvIG1kbXdhaXQgZGlmZmVyZW5j ZSAqLwotc3RhdGljIGNoYXIgYzsKLXN0YXRpYyBjaGFyICp0ZWxuYnI7Ci0KLXN0YXRpYyBpbnQg d3IgPSAwOwkJCS8qIHdyID0gd2FrZSByYXRlICovCi1zdGF0aWMgY2hhciAqIHdzOwkJCS8qIHdz ID0gd2FrZSBzdHJpbmcgKi8KLXN0YXRpYyBjaGFyICogeG51bSA9IE5VTEw7Ci1zdGF0aWMgaW50 IGluaXRlZCA9IDA7Ci0KLXN0YXRpYyBTSUdUWVAKLSNpZmRlZiBDS19BTlNJQwotX2RvZGlhbCh2 b2lkICogdGhyZWFkaW5mbykKLSNlbHNlIC8qIENLX0FOU0lDICovCi1fZG9kaWFsKHRocmVhZGlu Zm8pIFZPSUQgKiB0aHJlYWRpbmZvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBfZG9kaWFs ICovIHsKLSAgICBjaGFyIGMyOwotICAgIGNoYXIgKmRjbWQsICpzLCAqZmxvY21kID0gTlVMTDsK LSAgICBpbnQgeCA9IDAsIG4gPSBGX1RJTUU7Ci0KLSNpZmRlZiBOVFNJRwotICAgIHNpZ25hbCgg U0lHSU5ULCBkaWFsaW50ICk7Ci0gICAgaWYgKHRocmVhZGluZm8pIHsJCQkvKiBUaHJlYWQgbG9j YWwgc3RvcmFnZS4uLiAqLwotCVRsc1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pOwotICAg IH0KLSNlbmRpZiAvKiBOVFNJRyAqLwotCi0gICAgZGNtZCA9IGRpYWxjbWQgPyBkaWFsY21kIDog bXAtPmRpYWxfc3RyOwotICAgIGlmICgoaW50KXN0cmxlbihkY21kKSArIChpbnQpc3RybGVuKHRl bG5icikgPiAoTEJVRkwgLSAyKSkgewotCXByaW50ZigiRElBTCBjb21tYW5kICsgcGhvbmUgbnVt YmVyIHRvbyBsb25nIVxuIik7Ci0JZHJlc2V0KCk7Ci0jaWZkZWYgRFlOQU1JQwotCWlmIChyYnVm KSBmcmVlKHJidWYpOyByYnVmID0gTlVMTDsKLQlpZiAoZmJ1ZikgZnJlZShmYnVmKTsgZmJ1ZiA9 IE5VTEw7Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotI2lmZGVmIE5UU0lHCi0JY2tUaHJlYWRFbmQo dGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLQlTSUdSRVRVUk47CSAvKiBObyBjb252 ZXJzYXRpb24gd2l0aCBtb2RlbSB0byBjb21wbGV0ZSBkaWFsaW5nICovCi0gICAgfQotICAgIG1h a2VzdHIoJnhudW0sdGVsbmJyKTsKLQotICAgIGdldGRpYWxtdGgoKTsJCQkvKiBHZXQgZGlhbCBt ZXRob2QgKi8KLQotI2lmZGVmIENLX0FURFQKLSAgICAvKiBDb21iaW5lIHRoZSBTRVQgRElBTCBN RVRIT0QgY29tbWFuZCB3aXRoIHRoZSBESUFMIGNvbW1hbmQgc3RyaW5nICovCi0gICAgaWYgKCFk aWFsY21kICYmCQkJLyogVXNpbmcgZGVmYXVsdCBESUFMIGNvbW1hbmQgKi8KLQkobWRtY2FwYXMg JiBDS0RfQVQpICYmCQkvKiBBVCBjb21tYW5kIHNldCBvbmx5ICovCi0JKChkaWFsbXRoID09IFhZ RE1fVCAmJiAhZGlhbHRvbmUpIHx8IC8qIGFuZCB1c2luZyBkZWZhdWx0ICovCi0JIChkaWFsbXRo ID09IFhZRE1fUCAmJiAhZGlhbHB1bHNlKSkpIHsgLyogbW9kZW0gY29tbWFuZHMuLi4gKi8KLQlj aGFyIGM7Ci0JZGVidWcoRjExMCwiZGlhbCBhdGR0IHhudW0gMSIseG51bSwwKTsKLQlzID0gZGNt ZDsKLQlkZWJ1ZyhGMTEwLCJkaWFsIGF0ZHQgcyIscywwKTsKLQlpZiAoKnRlbG5iciAhPSAnVCcg JiYKLQkgICAgKnRlbG5iciAhPSAnUCcgJiYKLQkgICAgKnRlbG5iciAhPSAndCcgJiYKLQkgICAg KnRlbG5iciAhPSAncCcgJiYKLQkgICAgIWNrc3RyY21wKHMsImF0ZCIsMywwKSAmJgotCSAgICBz WzNdICE9ICdUJyAmJgotCSAgICBzWzNdICE9ICdQJyAmJgotCSAgICBzWzNdICE9ICd0JyAmJgot CSAgICBzWzNdICE9ICdwJykgewotCSAgICBjaGFyIHhidWZbMjAwXTsKLQkgICAgYyA9IChkaWFs bXRoID09IFhZRE1fVCkgPyAnVCcgOiAnUCc7Ci0JICAgIGlmIChpc2xvd2VyKHNbMF0pKQotCSAg ICAgIGMgPSB0b2xvd2VyKGMpOwotCSAgICBpZiAoKGludClzdHJsZW4odGVsbmJyKSA8IDE5OSkg ewotCQlzcHJpbnRmKHhidWYsIiVjJXMiLGMsdGVsbmJyKTsKLQkJbWFrZXN0cigmeG51bSx4YnVm KTsKLQkgICAgfQotCX0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfQVREVCAqLwotICAgIGRlYnVnKEYx MTEsIl9kb2RpYWwiLHhudW0seHJlZGlhbCk7Ci0KLSAgICAvKiBIYW5nIHVwIHRoZSBtb2RlbSAo aW4gY2FzZSBpdCB3YXNuJ3QgIm9uIGhvb2siKSAqLwotICAgIC8qIEJ1dCBvbmx5IGlmIFNFVCBE SUFMIEhBTkdVUCBPTi4uLiAqLwotCi0gICAgaWYgKCF4cmVkaWFsKSB7CQkJLyogTW9kZW0gbm90 IGluaXRhbGl6ZWQgeWV0LiAqLwotCWluaXRlZCA9IDA7Ci0gICAgfQotICAgIGlmICgheHJlZGlh bCB8fCAhaW5pdGVkKSB7Ci0JaWYgKGRpYWxodXAoKSA8IDApIHsJCS8qIEhhbmd1cCBmaXJzdCAq LwotCSAgICBkZWJ1ZyhGMTAwLCJfZG9kaWFsIGRpYWxodXAgZmFpbGVkIiwiIiwwKTsKLSNpZm5k ZWYgTUlOSURJQUwKLQkgICAgaWYgKG1kbWNhcGFzICYgQ0tEX1RCKQkvKiBUZWxlYml0cyBtaWdo dCBuZWVkIGEgQlJFQUsgKi8KLQkgICAgICB0dHNuZGIoKTsJCQkvKiAgZmlyc3QuICovCi0jZW5k aWYgLyogTUlOSURJQUwgKi8KLQkgICAgaWYgKGRpYWxobmcgJiYgZGlhbHN0YSAhPSBESUFfUEFS VCkgeyAvKiBJZiBoYW5ndXAgZmFpbGVkLCAqLwotCQl0dGNsb3MoMCk7CQkvKiBjbG9zZSBhbmQg cmVvcGVuIHRoZSBkZXZpY2UuICovCi0JCWlmICh0dG9wZW4odHRuYW1lLCZsb2NhbCxteW1kbXR5 cCwwKSA8IDApIHsKLQkJICAgIHByaW50ZigiU29ycnksIENhbid0IGhhbmcgdXAgY29tbXVuaWNh dGlvbiBkZXZpY2UuXG4iKTsKLQkJICAgIHByaW50ZigiVHJ5ICdzZXQgbGluZSAlcycgYWdhaW4u XG4iLHR0bmFtZSk7Ci0JCSAgICBkaWFsc3RhID0gRElBX0hBTkc7Ci0jaWZkZWYgRFlOQU1JQwot CQkgICAgaWYgKHJidWYpIGZyZWUocmJ1Zik7IHJidWYgPSBOVUxMOwotCQkgICAgaWYgKGZidWYp IGZyZWUoZmJ1Zik7IGZidWYgPSBOVUxMOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQkJICAgIGRy ZXNldCgpOwotI2lmZGVmIE5UU0lHCi0JCSAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNl bmRpZiAvKiBOVFNJRyAqLwotCQkgICAgU0lHUkVUVVJOOwotCQl9Ci0JICAgIH0KLQl9Ci0JaW5p dGVkID0gMDsJCQkvKiBXZSBodW5nIHVwIHNvIG11c3QgcmVpbml0ICovCi0gICAgfQotI2lmbmRl ZiBNSU5JRElBTAotICAgIC8qIERvbid0IHN0YXJ0IHRhbGtpbmcgdG8gUm9sbSB0b28gc29vbiAq LwotICAgIGlmIChteW1kbXR5cCA9PSBuX1JPTE0gJiYgZGlhbHN0YSAhPSBESUFfUEFSVCkKLSAg ICAgIG1zbGVlcCg1MDApOwotI2VuZGlmIC8qIE1JTklESUFMICovCi0KLSAgICBpZiAoZGlhbHN0 YSAhPSBESUFfUEFSVAkJLyogU29tZSBpbml0aWFsIHNldHVwcy4gKi8KLSNpZm5kZWYgTUlOSURJ QUwKLQkmJiBteW1kbXR5cCAhPSBuX0FUVFVQQwotI2VuZGlmIC8qIE1JTklESUFMICovCi0JKSB7 Ci0JZmFpbF9jb2RlID0gRl9NSU5JVDsJCS8qIERlZmF1bHQgZmFpbHVyZSBjb2RlICovCi0JZGlh bF93aGF0ID0gRFdfSU5JVDsJCS8qIFdoYXQgSSdtIERvaW5nIE5vdyAgICovCi0JaWYgKGRpYWxk cHkpIHsJCQkvKiBJZiBzaG93aW5nIHByb2dyZXNzLCAqLwotCSAgICBwID0gY2tfdGltZSgpOwkJ LyogZ2V0IHRpbWVzdGFtcC4gICAqLwotCSAgICBpZiAoIWluaXRlZCkKLQkgICAgICBpZiAoKnAp Ci0JCXByaW50ZigiIEluaXRpYWxpemluZzogJXMuLi5cbiIscCk7Ci0JfQotICAgIH0KLSNpZm5k ZWYgTUlOSURJQUwKLSNpZmRlZiBBVFQ3MzAwCi0gICAgaWYgKG15bWRtdHlwID09IG5fQVRUVVBD KSB7Ci0vKgotICBGb3IgQVRUNzMwMC9Vbml4IFBDJ3Mgd2l0aCB0aGVpciBzcGVjaWFsIGludGVy bmFsIG1vZGVtLiAgV2hvbGUgZGlhbGluZwotICBwcm9jZXNzIGlzIGhhbmRsZWQgcmlnaHQgaGVy ZSwgYW4gZXhjZXB0aW9uIHRvIHRoZSBub3JtYWwgc3RydWN0dXJlLgotICBUaW1lb3V0IGFuZCB1 c2VyIGludGVycnVwdHMgYXJlIGVuYWJsZWQgZHVyaW5nIGRpYWxpbmcuICBhdHRkaWFsKCkgaXMg aW4KLSAgZmlsZSBja3V0aW8uYy4gIC0ganJkCi0qLwotICAgICAgICBfUFJPVE9UWVAoIGludCBh dHRkaWFsLCAoY2hhciAqLCBsb25nLCBjaGFyICopICk7Ci0JZmFpbF9jb2RlID0gRl9NT0RFTTsJ CS8qIERlZmF1bHQgZmFpbHVyZSBjb2RlICovCi0JZGlhbF93aGF0ID0gRFdfRElBTDsKLQlpZiAo ZGlhbGRweSkgewkJCS8qIElmIHNob3dpbmcgcHJvZ3Jlc3MgKi8KLQkgICAgcCA9IGNrX3RpbWUo KTsJCS8qIGdldCBjdXJyZW50IHRpbWU7ICovCi0JICAgIGlmICgqcCkKLQkgICAgICBwcmludGYo IiBEaWFsaW5nOiAlcy4uLlxuIixwKTsKLQl9Ci0JYWxhcm0od2FpdGN0KTsJCQkvKiBTZXQgYWxh cm0gKi8KLQlpZiAoYXR0ZGlhbCh0dG5hbWUsc3BlZWQsdGVsbmJyKSkgeyAvKiBkaWFsIGludGVy bmFsIG1vZGVtICovCi0JICAgIGRyZXNldCgpOwkJCS8qIHJlc2V0IGFsYXJtcywgZXRjLiAqLwot CSAgICBwcmludGYoIiBDYWxsIGZhaWxlZC5cclxuIik7Ci0JICAgIGRpYWxodXAoKTsJICAgICAg ICAJLyogSGFuZ3VwIHRoZSBjYWxsICovCi0jaWZkZWYgRFlOQU1JQwotCSAgICBpZiAocmJ1Zikg ZnJlZShyYnVmKTsgcmJ1ZiA9IE5VTEw7Ci0JICAgIGlmIChmYnVmKSBmcmVlKGZidWYpOyBmYnVm ID0gTlVMTDsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0JICAgIGRpYWxzdGEgPSBESUFfVUVSUjsK LSNpZmRlZiBOVFNJRwotCSAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBO VFNJRyAqLwotCSAgICBTSUdSRVRVUk47CQkJLyogcmV0dXJuIGZhaWx1cmUgKi8KLQl9Ci0JZHJl c2V0KCk7CQkJLyogcmVzZXQgYWxhcm1zLCBldGMuICovCi0JdHRwa3Qoc3BlZWQsRkxPX0RJQVgs cGFyaXR5KTsJLyogY2FuY2VsIGRpYWxpbmcgaW9jdGwgKi8KLQlpZiAoIXF1aWV0ICYmICFiYWNr Z3JkKSB7Ci0JICAgIGlmIChkaWFsZHB5KSB7Ci0JCXByaW50ZigiXG4iKTsKLQkJcHJpbnRmKCIg Q2FsbCBjb21wbGV0ZS5cclxuIik7Ci0JICAgIH0gZWxzZSBpZiAobW9kZW1tc2dbMF0pCi0JCXBy aW50ZigiIENhbGwgY29tcGxldGU6IFwiJXNcIi5cclxuIiwoY2hhciAqKW1vZGVtbXNnKTsKLQkg ICAgZWxzZQotCSAgICAgIHByaW50ZigiIENhbGwgY29tcGxldGUuXHJcbiIpOwotCX0KLSNpZmRl ZiBDS0xPR0RJQUwKLQlkb2xvZ2RpYWwodGVsbmJyKTsKLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8K LQotCWRpYWxzdGEgPSBESUFfT0s7Ci0jaWZkZWYgRFlOQU1JQwotCWlmIChyYnVmKSBmcmVlKHJi dWYpOyByYnVmID0gTlVMTDsKLQlpZiAoZmJ1ZikgZnJlZShmYnVmKTsgZmJ1ZiA9IE5VTEw7Ci0j ZW5kaWYgLyogRFlOQU1JQyAqLwotI2lmZGVmIE5UU0lHCi0JY2tUaHJlYWRFbmQodGhyZWFkaW5m byk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLQlTSUdSRVRVUk47CS8qIE5vIGNvbnZlcnNhdGlvbiB3 aXRoIG1vZGVtIHRvIGNvbXBsZXRlIGRpYWxpbmcgKi8KLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBB VFQ3MzAwICovCi0jaWZkZWYgQ0tfVEFQSQotICAgICAgaWYgKHR0dGFwaSAmJiAhdGFwaXBhc3Mp IHsJLyogVEFQSSBEaWFsaW5nICovCi0JICBzd2l0Y2ggKGZ1bmNfY29kZSkgewotCSAgICBjYXNl IDA6CQkJLyogRGlhbCAqLwotCSAgICAgIGlmIChja3RhcGlkaWFsKHRlbG5icikpIHsKLQkJICBm YWlsX2NvZGUgPSAwOwotCQkgIGlmIChwYXJ0aWFsKSB7Ci0JCSAgICAgIGRpYWxzdGEgPSBESUFf UEFSVDsKLQkJICB9IGVsc2UgewotCQkgICAgICBkaWFsc3RhID0gRElBX09LOwotCQkgICAgICBz cGVlZCA9IHR0Z3NwZCgpOwotCQkgIH0KLQkgICAgICB9IGVsc2UgewotCQkgIGlmIChkaWFsc3Rh ID09IERJQV9QQVJUKQotCQkgICAgY2t0YXBpaGFuZ3VwKCk7Ci0JCSAgaWYgKCFmYWlsX2NvZGUp Ci0JCSAgICBmYWlsX2NvZGUgPSBGX01PREVNOwotCQkgIGRpYWxzdGEgPSBESUFfVEFQSTsKLQkg ICAgICB9Ci0JICAgICAgYnJlYWs7Ci0JICAgIGNhc2UgMTogewkJCS8qIEFuc3dlciAqLwotCQls b25nIHN0cnR0aW1lID0gdGltZSgobG9uZyAqKU5VTEwpOwotCQlsb25nIGRpZmYgPSAwOwotCQlk byB7Ci0JCSAgICBpZiAoZGlhbGF0bW8gPiAwKSB7Ci0JCQlzdHJ0dGltZSArPSBkaWZmOwotCQkJ d2FpdGN0ICAgLT0gZGlmZjsKLQkJICAgIH0KLQkJICAgIGZhaWxfY29kZSA9IDA7Ci0JCSAgICBp ZiAoY2t0YXBpYW5zd2VyKCkpIHsgLyogU1VDQ0VTUyAqLwotCQkJZGlhbHN0YSA9IERJQV9PSzsK LQkJCXNwZWVkID0gdHRnc3BkKCk7Ci0JCQlicmVhazsKLQkJICAgIH0gZWxzZSB7CQkvKiBGQUlM VVJFICovCi0JCQlpZiAoZmFpbF9jb2RlKSB7Ci0JCQkgICAgZGlhbHN0YSA9IERJQV9UQVBJOwot CQkJICAgIGJyZWFrOwotCQkJfSBlbHNlIHsKLQkJCSAgICBmYWlsX2NvZGUgPSBGX01PREVNOwot CQkJICAgIGRpYWxzdGEgPSBESUFfVEFQSTsKLQkJCX0KLQkJICAgIH0KLQkJICAgIGlmIChkaWFs YXRtbyA+IDApIHsKLQkJCWRpZmYgPSB0aW1lKChsb25nICopTlVMTCkgLSBzdHJ0dGltZTsKLQkJ ICAgIH0KLQkJfSB3aGlsZSAoKGRpYWxhdG1vID4gMCkgPyAoZGlmZiA8IHdhaXRjdCkgOiAxKTsK LQkJYnJlYWs7Ci0JICAgIH0KLQkgIH0KLSNpZmRlZiBOVFNJRwotCSAgY2tUaHJlYWRFbmQodGhy ZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLQkgIFNJR1JFVFVSTjsKLSAgICAgIH0gZWxz ZQotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotCi0vKiBNb2Rl bXMgd2l0aCBBVCBjb21tYW5kIHNldC4uLiAqLwotCi0gICAgICBpZiAoKG1kbWNhcGFzICYgQ0tE X0FUKSAmJiBkaWFsc3RhICE9IERJQV9QQVJUKSB7Ci0KLQkgIGlmIChkaWFscGFjZSA+IC0xKQkJ LyogU2V0IGludGVyY2hhcmFjdGVyIHBhY2luZyAqLwotCSAgICB3ciA9IGRpYWxwYWNlOwotCSAg ZWxzZQotCSAgICB3ciA9IG1wLT53YWtlX3JhdGU7Ci0KLQkgIGlmIChkaWFsaW5pKQkJCS8qIEdl dCB3YWtldXAvaW5pdCBzdHJpbmcgKi8KLQkgICAgd3MgPSBkaWFsaW5pOwotCSAgZWxzZQotCSAg ICB3cyA9IG1wLT53YWtlX3N0cjsKLSNpZmRlZiBDT01NRU5UCi0JICBpZiAoIXdzKSB3cyA9ICJc MDE1IjsJCS8qIElmIG5vbmUsIHVzZSBDUiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotCSAg LyogRmlyc3QgZ2V0IHRoZSBtb2RlbSdzIGF0dGVudGlvbiBhbmQgZW5hYmxlIHJlc3VsdCBjb2Rl cyAqLwotCi0JICBmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCA1OyB0cmllcysrKSB7IC8qIFNlbmQg c2hvcnQgY29tbWFuZCAqLwotCSAgICAgIGlmICh0cmllcyA+IDApIHsKLQkJICB0dG9jKCdcMDE1 Jyk7CQkvKiBBVCBtdXN0IGdvIGZpcnN0IGZvciBzcGVlZCAqLwotCQkgIG1zbGVlcCh3cik7CQkv KiBkZXRlY3Rpb24uICovCi0JICAgICAgfQotCSAgICAgIGlmIChteW1kbXR5cCA9PSBuX0dFTkVS SUMpIC8qIEZvcmNlIHdvcmQgcmVzdWx0IGNvZGVzICovCi0JCXR0c2xvdygiQVRRMFYxXDAxNSIs d3IpOyAvKiBmb3IgZ2VuZXJpYyBtb2RlbSB0eXBlICovCi0JICAgICAgZWxzZQotCQl0dHNsb3co IkFUUTBcMDE1Iix3cik7Ci0JICAgICAgbWRtc3RhdCA9IGdldG9rKHRyaWVzIDwgMiA/IDIgOiB0 cmllcywgMSk7IC8qIEdldCByZXNwb25zZSAqLwotCSAgICAgIGlmIChtZG1zdGF0ID4gMCkgYnJl YWs7CS8qIE9LIC0gZG9uZSAqLwotCSAgICAgIGlmIChkaWFsZHB5ICYmIHRyaWVzID4gMCkgewot CQkgIHByaW50ZigiXHJcbiBObyByZXNwb25zZSBmcm9tIG1vZGVtIik7Ci0JCSAgaWYgKHRyaWVz ID09IDQpIHsKLQkJICAgICAgcHJpbnRmKCIuXHJcbiIpOwotCQkgICAgICBkaWFsc3RhID0gRElB X05SU1A7Ci0jaWZkZWYgRFlOQU1JQwotCQkgICAgICBpZiAocmJ1ZikgZnJlZShyYnVmKTsgcmJ1 ZiA9IE5VTEw7Ci0JCSAgICAgIGlmIChmYnVmKSBmcmVlKGZidWYpOyBmYnVmID0gTlVMTDsKLSNl bmRpZiAvKiBEWU5BTUlDICovCi0jaWZkZWYgTlRTSUcKLQkJICAgICAgY2tUaHJlYWRFbmQodGhy ZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLQkJICAgICAgU0lHUkVUVVJOOwkvKiByZXR1 cm4gZmFpbHVyZSAqLwotCQkgIH0KLQkJICBwcmludGYoIiwgcmV0cnlpbmclcy4uLlxyXG4iLAot CQkJICh0cmllcyA+IDEpID8gIiBhZ2FpbiIgOiAiIik7Ci0JCSAgZmZsdXNoKHN0ZG91dCk7Ci0J ICAgICAgfQotCSAgICAgIHR0Zmx1aSgpOwotCSAgICAgIHN3aXRjaCAodHJpZXMpIHsKLQkJY2Fz ZSAwOiBtc2xlZXAoMTAwKTsgYnJlYWs7Ci0JCWNhc2UgMTogdHRzbmRiKCk7IGJyZWFrOwotCQlk ZWZhdWx0OgotCQkgIGlmIChuZXR3b3JrKSB7Ci0JCSAgICAgIHR0c25kYigpOwotCQkgIH0gZWxz ZSB7Ci0JCSAgICAgIGlmICh0cmllcyA9PSAyKSB7Ci0JCQkgIHR0aGFuZygpOwotCQkJICB0dGZs dWkoKTsKLQkJICAgICAgfSBlbHNlIHsKLQkJCSAgbWRtaHVwKCk7Ci0JCSAgICAgIH0KLQkJICAg ICAgaW5pdGVkID0gMDsKLQkJICB9Ci0JICAgICAgfQotCSAgICAgIGZmbHVzaChzdGRvdXQpOwot CSAgfQotCSAgZGVidWcoRjEwMSwiX2RvZGlhbCBBVFEwIG1kbXN0YXQiLCIiLG1kbXN0YXQpOwot Ci0JICBpZiAoeHJlZGlhbCAmJiBpbml0ZWQpIHsJLyogUmVkaWFsaW5nLi4uICovCi0JICAgICAg dHRvYygnXDAxNScpOwkJLyogQ2FuY2VsIHByZXZpb3VzICovCi0JICAgICAgbXNsZWVwKDI1MCk7 CQkvKiBXYWl0IGEgYml0ICovCi0jaWZkZWYgQ09NTUVOVAotLyogVGhpcyB3YXNuJ3QgdGhlIHBy b2JsZW0uLi4gKi8KLQkgICAgICB0dGZsdWkoKTsJCQkvKiBDbGVhciBvdXQgc3R1ZmYgZnJvbSBt b2RlbSBzZXR1cCAqLwotCSAgICAgIHR0c2xvdygiQVRTNz02MFwwMTUiLHdyKTsJLyogUmVkbyBj YXJyaWVyIHdhaXQgKi8KLQkgICAgICBnZXRvayg0LDEpOwkJLyogR2V0IHJlc3BvbnNlICovCi0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICAgIGFsYXJtKDApOwkJCS8qIEp1c3QgaW4gY2FzZS4u LiAqLwotCSAgICAgIHR0Zmx1aSgpOwkJCS8qIENsZWFyIG91dCBzdHVmZiBmcm9tIG1vZGVtIHNl dHVwICovCi0JICAgICAgZ290byBSRURJQUw7CQkvKiBTa2lwIHNldHVwIC0gd2UgYWxyZWFkeSBk aWQgaXQgKi8KLQkgIH0KLS8qCi0gIERvIGZsb3cgY29udHJvbCBuZXh0IGJlY2F1c2UgYSBsb25n IGluaXQgc3RyaW5nIGVjaG9pbmcgYmFjayBjb3VsZAotICBjYXVzZSBkYXRhIG92ZXJydW5zLCBj YXVzaW5nIHVzIHRvIG1pc3MgdGhlIE9LLCBvciAod29yc2UpIHRvIGdldCBvdXQKLSAgb2Ygc3lu YyBlbnRpcmVseS4KLSovCi0JICB4ID0gMDsJCQkvKiBVc2VyIHNhaWQgU0VUIERJQUwgRkxPVyBS VFMvQ1RTICovCi0JICBpZiAoZGlhbGZjID09IEZMT19SVFNDIHx8CS8qIEV2ZW4gaWYgS2VybWl0 J3MgRkxPVyBpc24ndC4uLiAgKi8KLQkgICAgICAoZGlhbGZjID09IEZMT19BVVRPICYmIGZsb3cg PT0gRkxPX1JUU0MpKSB7Ci0JICAgICAgaWYgKGRpYWxod2ZjKSB7CQkvKiBVc2VyLWRlZmluZWQg SFdGQyBzdHJpbmcgKi8KLQkJICBpZiAoKmRpYWxod2ZjKSB7Ci0JCSAgICAgIHggPSAxOwotCQkg ICAgICBmbG9jbWQgPSBkaWFsaHdmYzsKLQkJICB9Ci0JICAgICAgfSBlbHNlIGlmICgobWRtY2Fw YXMgJiBDS0RfSFcpICYmICoobXAtPmh3ZmNfc3RyKSkgewotCQkgIHggPSAxOwotCQkgIGZsb2Nt ZCA9IG1wLT5od2ZjX3N0cjsKLQkgICAgICB9Ci0JICB9IGVsc2UgaWYgKGRpYWxmYyA9PSBGTE9f WE9OWCB8fCAvKiBVc2VyIHNhaWQgU0VUIERJQUwgRkxPVyBTT0ZUICovCi0JCSAgICAgKGRpYWxm YyA9PSBGTE9fQVVUTyAmJiBmbG93ID09IEZMT19YT05YKSkgewotCSAgICAgIGlmIChkaWFsc3dm YykgewotCQkgIGlmICgqZGlhbHN3ZmMpIHsKLQkJICAgICAgeCA9IDE7Ci0JCSAgICAgIGZsb2Nt ZCA9IGRpYWxzd2ZjOwotCQkgIH0KLQkgICAgICB9IGVsc2UgaWYgKChtZG1jYXBhcyAmIENLRF9T VykgJiYgKihtcC0+c3dmY19zdHIpKSB7Ci0JCSAgeCA9IDE7Ci0JCSAgZmxvY21kID0gbXAtPnN3 ZmNfc3RyOwotCSAgICAgIH0KLQkgIH0gZWxzZSBpZiAoZGlhbGZjID09IEZMT19OT05FKSB7IC8q IFVzZXIgc2FpZCBTRVQgRElBTCBGTE9XIE5PTkUgKi8KLQkgICAgICBpZiAoZGlhbG5vZmMpIHsK LQkJICBpZiAoKmRpYWxub2ZjKSB7Ci0JCSAgICAgIHggPSAxOwotCQkgICAgICBmbG9jbWQgPSBk aWFsbm9mYzsKLQkJICB9Ci0JICAgICAgfSBlbHNlIGlmIChtcC0+bm9mY19zdHIgJiYgKihtcC0+ bm9mY19zdHIpKSB7Ci0JCSAgeCA9IDE7Ci0JCSAgZmxvY21kID0gbXAtPm5vZmNfc3RyOwotCSAg ICAgIH0KLQkgIH0KLQkgIGlmICh4KSB7CQkJLyogU2VuZCB0aGUgZmxvdyBjb250cm9sIGNvbW1h bmQgKi8KLQkgICAgICBkZWJ1ZyhGMTEwLCJfZG9kaWFsIGZsb2NtZCIsZmxvY21kLDApOwotCSAg ICAgIGZvciAodHJpZXMgPSA0OyB0cmllcyA+IDA7IHRyaWVzLS0pIHsgLyogU2VuZCB0aGUgY29t bWFuZCAqLwotCQkgIHR0c2xvdyhmbG9jbWQsd3IpOwotCQkgIG1kbXN0YXQgPSBnZXRvayg1LDEp OwotCQkgIGlmIChtZG1zdGF0ID4gMCkgYnJlYWs7Ci0JCSAgaWYgKGRpYWxkcHkgJiYgdHJpZXMg PiAxKQotCQkgICAgcHJpbnRmKCIgTm8gcmVzcG9uc2UgZnJvbSBtb2RlbSwgcmV0cnlpbmclcy4u LlxuIiwKLQkJCSAgICh0cmllcyA8IDQpID8gIiBhZ2FpbiIgOiAiIik7Ci0JICAgICAgfQotCi0j aWZkZWYgQ0tfVFRTRVRGTE9XCi0jaWZkZWYgQ0tfUlRTQ1RTCi0vKgotICBTbyBmYXIgb25seSBj a3V0aW8uYyBoYXMgdHRzZXRmbG93KCkuCi0gIFdlIGhhdmUganVzdCB0b2xkIHRoZSBtb2RlbSB0 byB0dXJuIG9uIFJUUy9DVFMgZmxvdyBjb250cm9sIGFuZCB0aGUgbW9kZW0KLSAgaGFzIHNhaWQg T0suICBCdXQgd2Ugb3Vyc2VsdmVzIGhhdmUgbm90IHR1cm5lZCBpdCBvbiB5ZXQgYmVjYXVzZSBv ZiB0aGUKLSAgZGlzZ3VzdGluZyB0dHBrdCguLi5GTE9fRElBTC4uLikgaGFjay4gIFNvIG5vdywg aWYgdGhlIGNvbXB1dGVyIGRvZXMgbm90Ci0gIGhhcHBlbiB0byBiZSBhc3NlcnRpbmcgUlRTLCB0 aGUgbW9kZW0gd2lsbCBubyBsb25nZXIgc2VuZCBjaGFyYWN0ZXJzIHRvIGl0LgotICBTbyBhdCBF WEFDVExZIFRISVMgUE9JTlQsIHdlIG11c3QgZW5hYmxlIFJUUy9DVFMgaW4gdGhlIGRldmljZSBk cml2ZXIuCi0qLwotCSAgICAgIGlmIChkaWFsZmMgPT0gRkxPX1JUU0MgfHwKLQkJICAoZGlhbGZj ID09IEZMT19BVVRPICYmIGZsb3cgPT0gRkxPX1JUU0MpKSB7Ci0JCSAgdHRzZXRmbG93KEZMT19S VFNDKTsKLQkgICAgICB9Ci0jZW5kaWYgLyogQ0tfUlRTQ1RTICovCi0jZW5kaWYgLyogQ0tfVFRT RVRGTE9XICovCi0JICB9Ci0JICB0dGZsdWkoKTsJCQkvKiBDbGVhciBvdXQgc3R1ZmYgZnJvbSBt b2RlbSBzZXR1cCAqLwotCSAgbXNsZWVwKDI1MCk7Ci0KLQkgIGlmICghd3MpIGdvdG8geGRpYWxl YzsJLyogTm8gaW5pdCBzdHJpbmcgKi8KLQkgIGlmICghKndzKSBnb3RvIHhkaWFsZWM7Ci0KLQkg IGZvciAodHJpZXMgPSA0OyB0cmllcyA+IDA7IHRyaWVzLS0pIHsgLyogU2VuZCBpbml0IHN0cmlu ZyAqLwotCSAgICAgIHR0c2xvdyh3cyx3cik7Ci0JICAgICAgbWRtc3RhdCA9IGdldG9rKDQsMSk7 CS8qIEdldCByZXNwb25zZSAqLwotCSAgICAgIGlmIChtZG1zdGF0ID4gMCkgYnJlYWs7Ci0JICAg ICAgaWYgKGRpYWxkcHkgJiYgdHJpZXMgPiAxKQotCQlwcmludGYoIiBObyByZXNwb25zZSBmcm9t IG1vZGVtLCByZXRyeWluZyVzLi4uXG4iLAotCQkgICAgICAgKHRyaWVzIDwgNCkgPyAiIGFnYWlu IiA6ICIiKTsKLQkgIH0KLQkgIGRlYnVnKEYxMDEsIl9kb2RpYWwgd2FrZV9zdHIgbWRtc3RhdCIs IiIsbWRtc3RhdCk7Ci0KLQkgIGlmIChtZG1zdGF0IDwgMSkgewkJLyogSW5pdGlhbGl6ZWQgT0s/ ICovCi0JICAgICAgZGlhbGZhaWwoRl9NSU5JVCk7CS8qIE5vLCBmYWlsLiAqLwotI2lmZGVmIE5U U0lHCi0JICAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8K LQkgICAgICBTSUdSRVRVUk47Ci0JICB9Ci0KLSNpZm5kZWYgTUlOSURJQUwKLSAgICB9IGVsc2Ug aWYgKG15bWRtdHlwID09IG5fQVRURFRETSAmJiBkaWFsc3RhICE9IERJQV9QQVJUKSB7IC8qIEFU JlQgLi4uICovCi0JdHRzbmRiKCk7CQkJLyogU2VuZCBCUkVBSyAqLwotI2VuZGlmIC8qIE1JTklE SUFMICovCi0KLSAgICB9IGVsc2UgaWYgKGRpYWxzdGEgIT0gRElBX1BBUlQpIHsgLyogQWxsIG90 aGVycyAqLwotCi0JLyogUGxhY2UgbW9kZW0gaW50byBjb21tYW5kIG1vZGUgKi8KLQotCXdzID0g ZGlhbGluaSA/IGRpYWxpbmkgOiBtcC0+d2FrZV9zdHI7Ci0JaWYgKHdzICYmIChpbnQpc3RybGVu KHdzKSA+IDApIHsKLQkgICAgZGVidWcoRjExMSwiX2RvZGlhbCBkZWZhdWx0LCB3YWtlIHN0cmlu ZyIsIHdzLCB3cik7Ci0JICAgIHR0c2xvdyh3cywgd3IpOwotCX0gZWxzZSBkZWJ1ZyhGMTAwLCJf ZG9kaWFsIG5vIHdha2Vfc3RyIiwiIiwwKTsKLQlpZiAobXAtPndha2VfcHJvbXB0ICYmIChpbnQp c3RybGVuKG1wLT53YWtlX3Byb21wdCkgPiAwKSB7Ci0JICAgIGRlYnVnKEYxMTAsIl9kb2RpYWwg ZGVmYXVsdCwgd2FpdGluZyBmb3Igd2FrZV9wcm9tcHQiLAotCQkgIG1wLT53YWtlX3Byb21wdCww KTsKLQkgICAgYWxhcm0oMTApOwotCSAgICB3YWl0Zm9yKG1wLT53YWtlX3Byb21wdCk7Ci0JICAg IGFsYXJtKDApOwotCX0gZWxzZSBkZWJ1ZyhGMTAwLCJfZG9kaWFsIG5vIHdha2VfcHJvbXB0Iiwi IiwwKTsKLSAgICB9Ci0KLS8qIEhhbmRsZSBlcnJvciBjb3JyZWN0aW9uLCBkYXRhIGNvbXByZXNz aW9uLCBhbmQgZmxvdyBjb250cm9sLi4uICovCi0KLSAgeGRpYWxlYzoKLQotICAgIGlmIChkaWFs c3RhICE9IERJQV9QQVJUKSB7Ci0JYWxhcm0oMCk7CQkJLyogVHVybiBvZmYgYWxhcm0gKi8KLQlk ZWJ1ZyhGMTAwLCJfZG9kaWFsIGdvdCB3YWtlIHByb21wdCIsIiIsMCk7Ci0JbXNsZWVwKDUwMCk7 CQkJLyogQWxsb3cgc2V0dGxpbmcgdGltZSAqLwotCi0JLyogRW5hYmxlL2Rpc2FibGUgZXJyb3It Y29ycmVjdGlvbiAqLwotCi0JeCA9IDA7Ci0JaWYgKGRpYWxlYykgewkJCS8qIERJQUwgRVJST1It Q09SUkVDVElPTiBpcyBPTiAqLwotCSAgICBpZiAoZGlhbGVjb24pIHsJCS8qIFNFVCBESUFMIFNU UklORyBFUlJPUi1DT1JSRUNUSU9OICovCi0JCWlmICgqZGlhbGVjb24pIHsKLQkJICAgIHggPSAx OwotCQkgICAgdHRzbG93KGRpYWxlY29uLCB3cik7Ci0JCX0KLQkgICAgfSBlbHNlIGlmICgobWRt Y2FwYXMgJiBDS0RfRUMpICYmICoobXAtPmVjX29uX3N0cikpIHsKLQkJeCA9IDE7Ci0JCXR0c2xv dyhtcC0+ZWNfb25fc3RyLCB3cik7Ci0JICAgIH0KLSNpZmRlZiBDT01NRU5UCi0JICAgIGVsc2Ug cHJpbnRmKAotCQkgICJXQVJOSU5HIC0gSSBkb24ndCBrbm93IGhvdyB0byB0dXJuIG9uIEVDIGZv ciB0aGlzIG1vZGVtXG4iCi0JCSAgICAgKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JfSBlbHNl IHsKLQkgICAgaWYgKGRpYWxlY29mZikgewkJLyogRElBTCBFUlJPUi1DT1JSRUNUSU9OIE9GRiAq LwotCQlpZiAoKmRpYWxlY29mZikgewotCQkgICAgeCA9IDE7Ci0JCSAgICB0dHNsb3coZGlhbGVj b2ZmLCB3cik7Ci0JCX0KLQkgICAgfSBlbHNlIGlmICgobWRtY2FwYXMgJiBDS0RfRUMpICYmICoo bXAtPmVjX29mZl9zdHIpKSB7Ci0JCXggPSAxOwotCQl0dHNsb3cobXAtPmVjX29mZl9zdHIsIHdy KTsKLQkgICAgfQotI2lmZGVmIENPTU1FTlQKLQkgICAgZWxzZSBwcmludGYoCi0JCSAgIldBUk5J TkcgLSBJIGRvbid0IGtub3cgaG93IHRvIHR1cm4gb2ZmIEVDIGZvciB0aGlzIG1vZGVtXG4iCi0J CSAgICAgKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JfQotCS8qIGRlYnVnKEYxMDEsImNrdWRp YSB4eF9vayIsIiIseHhfb2spOyAqLwotCWlmICh4ICYmIHh4X29rKSB7CQkJLyogTG9vayBmb3Ig T0sgcmVzcG9uc2UgKi8KLQkgICAgZGVidWcoRjEwMCwiY2t1ZGlhIGNhbGxpbmcgeHhfb2sgZm9y IEVDIiwiIiwwKTsKLQkgICAgeCA9ICgqeHhfb2spKDUsMSk7Ci0JICAgIGRlYnVnKEYxMDEsImNr dWRpYSB4eF9vayIsIiIseCk7Ci0JICAgIGlmICh4IDwgMCkgewotCQlwcmludGYoIldBUk5JTkcg LSBUcm91YmxlIGVuYWJsaW5nIGVycm9yLWNvcnJlY3Rpb24uXG4iKTsKLQkJcHJpbnRmKAotIiBM aWtlbHkgY2F1c2U6IFlvdXIgbW9kZW0gaXMgYW4gUlBJIG1vZGVsLCB3aGljaCBkb2VzIG5vdCBo YXZlIGJ1aWx0LWluXG4iKTsKLQkJcHJpbnRmKCIgZXJyb3IgY29ycmVjdGlvbiBhbmQgZGF0YSBj b21wcmVzc2lvbi4iKTsKLQkgICAgfQotCX0KLQotCS8qIEVuYWJsZS9kaXNhYmxlIGRhdGEgY29t cHJlc3Npb24gKi8KLQotCWlmICh4ID4gMCkgeCA9IDA7Ci0JaWYgKGRpYWxkYykgewotCSAgICBp ZiAoeCA8IDAgfHwgIWRpYWxlYykgewotCQlwcmludGYoCi0iV0FSTklORyAtIFlvdSBjYW4ndCBo YXZlIGNvbXByZXNzaW9uIHdpdGhvdXQgZXJyb3IgY29ycmVjdGlvbi5cbiIpOwotCSAgICB9IGVs c2UgaWYgKGRpYWxkY29uKSB7CS8qIFNFVCBESUFMIFNUUklORyAuLi4gKi8KLQkJaWYgKCpkaWFs ZGNvbikgewotCQkgICAgeCA9IDE7Ci0JCSAgICB0dHNsb3coZGlhbGRjb24sIHdyKTsKLQkJfQot CSAgICB9IGVsc2UgaWYgKChtZG1jYXBhcyAmIENLRF9EQykgJiYgKihtcC0+ZGNfb25fc3RyKSkg ewotCQl4ID0gMTsKLQkJdHRzbG93KG1wLT5kY19vbl9zdHIsIHdyKTsKLQkgICAgfQotI2lmZGVm IENPTU1FTlQKLQkgICAgZWxzZSBwcmludGYoCi0JCSAgIldBUk5JTkcgLSBJIGRvbid0IGtub3cg aG93IHRvIHR1cm4gb24gREMgZm9yIHRoaXMgbW9kZW1cbiIKLQkJCSAgKTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0JfSBlbHNlIHsKLQkgICAgaWYgKGRpYWxkY29mZikgewotCQlpZiAoKmRpYWxk Y29mZikgewotCQkgICAgeCA9IDE7Ci0JCSAgICB0dHNsb3coZGlhbGRjb2ZmLCB3cik7Ci0JCX0K LQkgICAgfSBlbHNlIGlmICgobWRtY2FwYXMgJiBDS0RfREMpICYmICoobXAtPmRjX29mZl9zdHIp KSB7Ci0JCXggPSAxOwotCQl0dHNsb3cobXAtPmRjX29mZl9zdHIsIHdyKTsKLQkgICAgfQotI2lm ZGVmIENPTU1FTlQKLQkgICAgZWxzZSBwcmludGYoCi0iV0FSTklORyAtIEkgZG9uJ3Qga25vdyBo b3cgdG8gdHVybiBvZmYgY29tcHJlc3Npb24gZm9yIHRoaXMgbW9kZW1cbiIKLQkJCSAgKTsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0JfQotCWlmICh4ICYmIHh4X29rKSB7CQkJLyogTG9vayBmb3Ig T0sgcmVzcG9uc2UgKi8KLQkgICAgeCA9ICgqeHhfb2spKDUsMSk7Ci0JICAgIGlmICh4IDwgMCkg cHJpbnRmKCJXQVJOSU5HIC0gVHJvdWJsZSBlbmFibGluZyBjb21wcmVzc2lvblxuIik7Ci0JfQot ICAgIH0KLQotI2lmbmRlZiBOT1hGRVIKLSNpZm5kZWYgTUlOSURJQUwKLSAgICBpZiAobWRtY2Fw YXMgJiBDS0RfS1MgJiYgZGlhbHN0YSAhPSBESUFfUEFSVCkgeyAvKiBLZXJtaXQgc3Bvb2YgKi8K LQlpbnQgcjsJCQkJLyogUmVnaXN0ZXIgKi8KLQljaGFyIHRiY21kYnVmWzY0XTsJCS8qIENvbW1h bmQgYnVmZmVyICovCi0Jc3dpdGNoIChteW1kbXR5cCkgewotCi0JICBjYXNlIG5fTUlDUk9DT006 CQkvKiBNaWNyb2NvbXMgaW4gU1ggbW9kZSAqLwotICAJICAgIGlmIChkaWFsa3NwKQotCSAgICAg IHNwcmludGYodGJjbWRidWYsIkFQTTE7S01DJWRcMDE1IixzdGNocik7CS8qIHNhZmUgKi8KLQkg ICAgZWxzZQotCSAgICAgIHNwcmludGYodGJjbWRidWYsIkFQTTBcMDE1Iik7IC8qIHNhZmUgKi8K LSAgCSAgICB0dHNsb3codGJjbWRidWYsIE1JQ1JPQ09NLndha2VfcmF0ZSk7Ci0gIAkgICAgYWxh cm0oMyk7Ci0JICAgIHdhaXRmb3IobXAtPndha2VfcHJvbXB0KTsKLQkgICAgYWxhcm0oMCk7Ci0J ICAgIGJyZWFrOwotCi0JICBjYXNlIG5fVEVMRUJJVDoJCS8qIE9sZCBhbmQgbmV3IFRlbGViaXRz ICovCi0JICBjYXNlIG5fVEJORVc6Ci0JICAgIGlmICghZGlhbGtzcCkgewotCQlzcHJpbnRmKHRi Y21kYnVmLCJBVFMxMTE9MFwwMTUiKTsgLyogc2FmZSAqLwotCSAgICB9IGVsc2UgewotCQlzd2l0 Y2ggKHBhcml0eSkgewkvKiBTMTExIHZhbHVlIGRlcGVuZHMgb24gcGFyaXR5ICovCi0JCSAgY2Fz ZSAnZSc6IHIgPSAxMjsgYnJlYWs7Ci0JCSAgY2FzZSAnbSc6IHIgPSAxMzsgYnJlYWs7Ci0JCSAg Y2FzZSAnbyc6IHIgPSAxMTsgYnJlYWs7Ci0JCSAgY2FzZSAncyc6IHIgPSAxNDsgYnJlYWs7Ci0J CSAgY2FzZSAwOgotCQkgIGRlZmF1bHQ6ICByID0gMTA7IGJyZWFrOwotCQl9Ci0JCXNwcmludGYo dGJjbWRidWYsIkFUUzExMT0lZCBTMTEyPSVkXDAxNSIscixzdGNocik7IC8qIHNhZmUgKi8KLQkg ICAgfQotCSAgICB0dHNsb3codGJjbWRidWYsIHdyKTsKLQotLyogTm90IGFsbCBUZWxlYml0IG1v ZGVscyBoYXZlIHRoZSBLZXJtaXQgc3Bvb2YsIHNvIGlnbm9yZSByZXNwb25zZS4gKi8KLQotCSAg ICBpZiAoeHhfb2spIHsJCS8qIEdldCBtb2RlbSdzIHJlc3BvbnNlICovCi0JCXggPSAoKnh4X29r KSg1LDEpOwotCSAgICB9Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotI2VuZGlm IC8qIE5PWEZFUiAqLwotCi0gICAgLyogU3BlYWtlciAqLwotCi0gICAgaWYgKG15bWRtdHlwICE9 IG5fR0VORVJJQyAmJgotCShtZG1jYXBhcyAmIENLRF9BVCkgJiYgKGRpYWxzdGEgIT0gRElBX1BB UlQpICYmCi0JIWRpYWxzcG9uICYmICFkaWFsc3BvZmYgJiYKLQkhZGlhbHZvbDEgJiYgIWRpYWx2 b2wyICYmIWRpYWx2b2wzKSB7Ci0JLyogQVQgY29tbWFuZCBzZXQgYW5kIGNvbW1hbmRzIGhhdmUg bm90IGJlZW4gY3VzdG9taXplZCAqLwotCS8qIHNvIGNvbWJpbmUgc3BlYWtlciBhbmQgdm9sdW1l IGNvbW1hbmRzLiAqLwotCWlmIChtZG1zcGspCi0JICBzcHJpbnRmKGxidWYsIkFUTTFMJWQlYyIs bWRtdm9sLDEzKTsgLyogc2FmZSAqLwotCWVsc2UKLQkgIHNwcmludGYobGJ1ZiwiQVRNMCVjIiwx Myk7CS8qIHNhZmUgKi8KLQl0dHNsb3cobGJ1Zix3cik7CQkvKiBTZW5kIGNvbW1hbmQgKi8KLQln ZXRvayg1LDEpOwkJCS8qIEdldCBidXQgaWdub3JlIHJlc3BvbnNlICovCi0gICAgfSBlbHNlIGlm IChkaWFsc3RhICE9IERJQV9QQVJUKSB7CS8qIEN1c3RvbWl6ZWQgb3Igbm90IEFUIGNvbW1hbmRz ICovCi0JeCA9IDA7CQkJCS8qIERvIGl0IHRoZSBoYXJkIHdheSAqLwotCWlmIChtZG1zcGspIHsK LQkgICAgaWYgKGRpYWxzcG9uKSB7Ci0JCWlmICgqZGlhbHNwb24pIHsKLQkJICAgIHggPSAxOwot CQkgICAgdHRzbG93KGRpYWxzcG9uLHdyKTsKLQkJfQotCSAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgIGlmIChtcC0+c3Bfb25fc3RyWzBdKSB7Ci0JCSAgICB4ID0gMTsKLQkJICAgIHR0c2xv dyhtcC0+c3Bfb25fc3RyLHdyKTsKLQkJfQotCSAgICB9Ci0JfSBlbHNlIHsKLQkgICAgLyogcyA9 IGRpYWxzcG9mZiA/IGRpYWxzcG9mZiA6IG1wLT5zcF9vZmZfc3RyOyAqLwotCSAgICBpZiAoZGlh bHNwb2ZmKSB7Ci0JCWlmICgqZGlhbHNwb2ZmKSB7Ci0JCSAgICB4ID0gMTsKLQkJICAgIHR0c2xv dyhkaWFsc3BvZmYsd3IpOwotCQl9Ci0JICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg KG1wLT5zcF9vZmZfc3RyWzBdKSB7Ci0JCSAgICB4ID0gMTsKLQkJICAgIHR0c2xvdyhtcC0+c3Bf b2ZmX3N0cix3cik7Ci0JCX0KLQkgICAgfQotCX0KLQlpZiAoeCkgewotCSAgICBpZiAoeHhfb2sp CQkJLyogR2V0IHJlc3BvbnNlICovCi0JICAgICAgeCA9ICgqeHhfb2spKDUsMSk7Ci0JICAgIGlm ICh4ICYmIG1kbXNwaykgewkJLyogR29vZCByZXNwb25zZSBhbmQgc3BlYWtlciBvbj8gKi8KLQkJ c3dpdGNoIChtZG12b2wpIHsJLyogWWVzLCBzZW5kIHZvbHVtZSBjb21tYW5kLiAqLwotCQkgIGNh c2UgMDoKLQkJICBjYXNlIDE6Ci0JCSAgICBzID0gZGlhbHZvbDEgPyBkaWFsdm9sMSA6IG1wLT52 b2wxX3N0cjsgYnJlYWs7Ci0JCSAgY2FzZSAyOgotCQkgICAgcyA9IGRpYWx2b2wyID8gZGlhbHZv bDIgOiBtcC0+dm9sMl9zdHI7IGJyZWFrOwotCQkgIGNhc2UgMzoKLQkJICAgIHMgPSBkaWFsdm9s MyA/IGRpYWx2b2wzIDogbXAtPnZvbDNfc3RyOyBicmVhazsKLQkJICBkZWZhdWx0OgotCQkgICAg cyA9IE5VTEw7Ci0JCX0KLQkJaWYgKHMpIGlmICgqcykgewkvKiBTZW5kIHZvbHVtZSBjb21tYW5k LiAqLwotCQkgICAgdHRzbG93KHMsIHdyKTsKLQkJICAgIGlmICh4eF9vaykJCS8qIEdldCByZXNw b25zZSBidXQgaWdub3JlIGl0ICovCi0JCSAgICAgICgqeHhfb2spKDUsMSk7Ci0JCX0KLQkgICAg fQotCX0KLSAgICB9Ci0KLSNpZm5kZWYgQ0tfQVREVAotICAgIC8qIERpYWxpbmcgTWV0aG9kICov Ci0KLSAgICBpZiAoZGlhbG10aCAmJiBkaWFsc3RhICE9IERJQV9QQVJUKSB7IC8qIElmIGRpYWxp bmcgbWV0aG9kIHNwZWNpZmllZC4uLiAqLwotCWNoYXIgKnMgPSAiIjsJCQkvKiBEbyBpdCBoZXJl Li4uICovCi0KLQlpZiAoZGlhbG10aCA9PSBYWURNX1QgJiYgZGlhbHRvbmUpIC8qIFRvbmUgKi8K LQkgIHMgPSBkaWFsdG9uZTsKLQllbHNlIGlmIChkaWFsbXRoID09IFhZRE1fUCAmJiBkaWFscHVs c2UpIC8qIFB1bHNlICovCi0JICBzID0gZGlhbHB1bHNlOwotCWlmIChzKSBpZiAoKnMpIHsKLQkg ICAgdHRzbG93KHMsIHdyKTsKLQkgICAgaWYgKHh4X29rKQkJCS8qIEdldCBtb2RlbSdzIHJlc3Bv bnNlICovCi0JICAgICAgKCp4eF9vaykoNSwxKTsJCS8qIChidXQgaWdub3JlIGl0Li4uKSAqLwot CX0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfQVREVCAqLwotCi0gICAgaWYgKGRpYWxpZHQpIHsJCQkv KiBJZ25vcmUgZGlhbHRvbmU/ICovCi0JY2hhciAqcyA9ICIiOwotCXMgPSBkaWFseDMgPyBkaWFs eDMgOiBtcC0+aWdub3JlZHQ7Ci0JaWYgKHMpIGlmICgqcykgewotCSAgICB0dHNsb3cocywgd3Ip OwotCSAgICBpZiAoeHhfb2spCQkJLyogR2V0IG1vZGVtJ3MgcmVzcG9uc2UgKi8KLQkgICAgICAo Knh4X29rKSg1LDEpOwkJLyogKGJ1dCBpZ25vcmUgaXQuLi4pICovCi0JfQotICAgIH0KLSAgICB7 Ci0JY2hhciAqcyA9ICIiOwkJCS8qIExhc3QtbWludXRlIGluaXQgc3RyaW5nPyAqLwotCXMgPSBk aWFsaW5pMiA/IGRpYWxpbmkyIDogbXAtPmluaTI7Ci0JaWYgKHMpIGlmICgqcykgewotCSAgICB0 dHNsb3cocywgd3IpOwotCSAgICBpZiAoeHhfb2spCQkJLyogR2V0IG1vZGVtJ3MgcmVzcG9uc2Ug Ki8KLQkgICAgICAoKnh4X29rKSg1LDEpOwkJLyogKGJ1dCBpZ25vcmUgaXQuLi4pICovCi0JfQot ICAgIH0KLSAgICBpZiAoZnVuY19jb2RlID09IDEpIHsJCS8qIEFOU1dFUiAobm90IERJQUwpICov Ci0JY2hhciAqczsKLQlzID0gZGlhbGFhb24gPyBkaWFsYWFvbiA6IG1wLT5hYV9vbl9zdHI7Ci0J aWYgKCFzKSBzID0gIiI7Ci0JaWYgKCpzKSB7Ci0JICAgIC8qIEhlcmUgd2Ugd291bGQgaGFuZGxl IGNhbGxlciBJRCAqLwotCSAgICB0dHNsb3cocywgKGRpYWxwYWNlID4gLTEpID8gd3IgOiBtcC0+ ZGlhbF9yYXRlKTsKLQkgICAgaWYgKHh4X29rKQkJCS8qIEdldCBtb2RlbSdzIHJlc3BvbnNlICov Ci0JICAgICAgKCp4eF9vaykoNSwxKTsJCS8qIChidXQgaWdub3JlIGl0Li4uKSAqLwotCX0gZWxz ZSB7Ci0JICAgIHByaW50ZigKLSJXQVJOSU5HIC0gSSBkb24ndCBrbm93IGhvdyB0byBlbmFibGUg YXV0b2Fuc3dlciBmb3IgdGhpcyBtb2RlbS5cbiIKLQkJICAgKTsKLQl9IC8qIEFuZCBza2lwIGFs bCB0aGUgcGhvbmUtbnVtYmVyICYgZGlhbGluZyBzdHVmZi4uLiAqLwotCWFsYXJtKHdhaXRjdCk7 CQkJLyogVGhpcyBtdWNoIHRpbWUgYWxsb3dlZC4gKi8KLQlkZWJ1ZyhGMTAxLCJfZG9kaWFsIEFO U1dFUiB3YWl0Y3QiLCIiLHdhaXRjdCk7Ci0KLSAgICB9IGVsc2UgewkJCQkvKiBESUFMIChub3Qg QU5TV0VSKSAqLwotCi0JaWYgKGRpYWxzdGEgIT0gRElBX1BBUlQpIHsJLyogTGFzdCBkaWFsIHdh cyBub3QgcGFydGlhbCAqLwotCi0JICAgIGNoYXIgKnMgPSAiIjsKLSNpZmRlZiBDT01NRU5UCi0J ICAgIHMgPSBkaWFsYWFvZmYgPyBkaWFsYWFvZmYgOiBtcC0+YWFfb2ZmX3N0cjsKLSNlbmRpZiAv KiBDT01NRU5UICovCi0JICAgIGlmIChzKSBpZiAoKnMpIHsKLQkJdHRzbG93KHMsIChkaWFscGFj ZSA+IC0xKSA/IHdyIDogbXAtPmRpYWxfcmF0ZSk7Ci0JCWlmICh4eF9vaykJCS8qIEdldCBtb2Rl bSdzIHJlc3BvbnNlICovCi0JCSAgKCp4eF9vaykoNSwxKTsJLyogKGJ1dCBpZ25vcmUgaXQuLi4p ICovCi0JICAgIH0KLQotCSAgICAvKiBQdXQgbW9kZW0gaW50byBkaWFsaW5nIG1vZGUsIGlmIHRo ZSBtb2RlbSByZXF1aXJlcyBpdC4gKi8KLQotCSAgICBpZiAobXAtPmRtb2RlX3N0ciAmJiAqKG1w LT5kbW9kZV9zdHIpKSB7Ci0JCXR0c2xvdyhtcC0+ZG1vZGVfc3RyLCAoZGlhbHBhY2UgPiAtMSkg PyB3ciA6IG1wLT5kaWFsX3JhdGUpOwotCQlzYXZhbHJtID0gc2lnbmFsKFNJR0FMUk0sZGlhbHRp bWUpOwotCQlhbGFybSgxMCk7Ci0JCS8qIFdhaXQgZm9yIHByb21wdCwgaWYgYW55IGV4cGVjdGVk ICovCi0JCWlmIChtcC0+ZG1vZGVfcHJvbXB0ICYmICoobXAtPmRtb2RlX3Byb21wdCkpIHsKLQkJ ICAgIHdhaXRmb3IobXAtPmRtb2RlX3Byb21wdCk7Ci0JCSAgICBtc2xlZXAoMzAwKTsKLQkJfQot CQlhbGFybSgwKTsJCS8qIFR1cm4gb2ZmIGFsYXJtIG9uIGRpYWxpbmcgcHJvbXB0cyAqLwotCQlz aWduYWwoU0lHQUxSTSxzYXZhbHJtKTsgLyogUmVzdG9yZSBhbGFybSAqLwotCSAgICB9Ci0JfQot CS8qIEFULUNvbW1hbmQtU2V0IG5vbi1HZW5lcmljIG1vZGVtICovCi0JaWYgKG1kbWNhcGFzICYg Q0tEX0FUICYmIG15bWRtdHlwICE9IG5fR0VORVJJQyAmJgotCSAgICBkaWFsc3RhICE9IERJQV9Q QVJUKSB7Ci0JICAgIGlmIChtZG13YWl0ID4gMjU1KQkJLyogSWYgbGFyZ2VyIHRoYW4gbWF4aW11 bSwgKi8KLQkgICAgICBtZG13YWl0ID0gMjU1OwkJLyogbWFrZSBpdCBtYXhpbXVtLiAqLwotCSAg ICBpZiAoZGlhbGVzYyA+IDAgJiYJCS8qIE1vZGVtIGVzY2FwZSBjaGFyYWN0ZXIgaXMgc2V0ICov Ci0JCWRpYWxtaHUgPiAwKSB7CQkvKiBIYW5ndXAgbWV0aG9kIGlzIG1vZGVtIGNvbW1hbmQgKi8K LQkJaW50IHggPSBkaWFsZXNjOwotCQlpZiAoZGlhbGVzYyA8IDAgfHwgZGlhbGVzYyA+IDEyNykK LQkJICB4ID0gMTI4OwotCQlzcHJpbnRmKGxidWYsCi0JCQkiQVRTMj0lZFM3PSVkXDAxNSIsCi0J CQlkaWFsZXNjID8geCA6IG1wLT5lc2NfY2hhciwgbWRtd2FpdCk7IC8qIHNhZmUgKi8KLQkgICAg fSBlbHNlCi0JICAgICAgc3ByaW50ZihsYnVmLCJBVFM3PSVkJWMiLG1kbXdhaXQsMTMpOyAvKiBz YWZlICovCi0JICAgIHR0c2xvdyhsYnVmLHdyKTsJCS8qIFNldCBpdC4gKi8KLQkgICAgbWRtc3Rh dCA9IGdldG9rKDUsMSk7CS8qIEdldCByZXNwb25zZSBmcm9tIG1vZGVtICovCi0JICAgIC8qIElm IGl0IGdldHMgYW4gZXJyb3IsIGdvIGFoZWFkIGFueXdheSAqLwotCSAgICBkZWJ1ZyhGMTAxLCJf ZG9kaWFsIFM3IG1kbXN0YXQiLCIiLG1kbXN0YXQpOwotCX0KLQl0dGZsdWkoKTsJCQkvKiBDbGVh ciBvdXQgc3R1ZmYgZnJvbSBtb2RlbSBzZXR1cCAqLwotCWluaXRlZCA9IDE7CQkJLyogUmVtZW1i ZXIgbW9kZW0gaXMgaW5pdGlhbGl6ZWQgKi8KLQotICAgICAgUkVESUFMOgotCWlmICgoaW50KXN0 cmxlbihkY21kKSArIChpbnQpc3RybGVuKHhudW0pID4gTEJVRkwpCi0JICBja3N0cm5jcHkobGJ1 ZiwiTlVNQkVSIFRPTyBMT05HISIsTEJVRkwpOwotCWVsc2UKLQkgIHNwcmludGYobGJ1ZiwgZGNt ZCwgeG51bSk7CS8qIHNhZmUgKHByZWNoZWNrZWQpICovCi0JZGVidWcoRjExMCwiZGlhbGluZyIs bGJ1ZiwwKTsKLQkvKiBTZW5kIHRoZSBkaWFsaW5nIHN0cmluZyAqLwotCXR0c2xvdyhsYnVmLGRp YWxwYWNlID4gLTEgPyB3ciA6IG1wLT5kaWFsX3JhdGUpOwotCi0JZmFpbF9jb2RlID0gRl9NT0RF TTsJCS8qIE5ldyBkZWZhdWx0IGZhaWx1cmUgY29kZSBjaGFuZ2VzICovCi0JZGlhbF93aGF0ID0g RFdfRElBTDsJCS8qIGFuZCBvdXIgc3RhdGUsIHRvby4gKi8KLQlpZiAoZGlhbGRweSkgewkJCS8q IElmIHNob3dpbmcgcHJvZ3Jlc3MgKi8KLQkgICAgcCA9IGNrX3RpbWUoKTsJCS8qIGdldCBjdXJy ZW50IHRpbWU7ICovCi0JICAgIGlmICgqcCkgcHJpbnRmKCIgRGlhbGluZzogJXMuLi5cbiIscCk7 Ci0jaWZkZWYgVk1TCi0JICAgIHByaW50ZigiIFxuIik7Ci0JICAgIGZmbHVzaChzdGRvdXQpOwot I2VuZGlmIC8qIFZNUyAqLwotCX0KLQlhbGFybSh3YWl0Y3QpOwkJCS8qIFRoaXMgbXVjaCB0aW1l IGFsbG93ZWQuICovCi0JZGVidWcoRjEwMSwiX2RvZGlhbCB3YWl0Y3QiLCIiLHdhaXRjdCk7Ci0K LSNpZm5kZWYgTUlOSURJQUwKLSNpZmRlZiBPTERNT0RFTVMKLQlzd2l0Y2ggKG15bWRtdHlwKSB7 Ci0JICBjYXNlIG5fUkFDQUw6CQkJLyogQWNrbm93bGVkZ2UgZGlhbGluZyBzdHJpbmcgKi8KLQkg ICAgc2xlZXAoMyk7Ci0JICAgIHR0Zmx1aSgpOwotCSAgICB0dG9jKCdcMDE1Jyk7Ci0JICAgIGJy ZWFrOwotCSAgY2FzZSBuX1ZFTlRFTDoKLQkgICAgd2FpdGZvcigiXDAxMlwwMTIiKTsJLyogSWdu b3JlIHRoZSBmaXJzdCB0d28gc3RyaW5ncyAqLwotCSAgICBicmVhazsKLQkgIGRlZmF1bHQ6Ci0J ICAgIGJyZWFrOwotCX0KLSNlbmRpZiAvKiBPTERNT0RFTVMgKi8KLSNlbmRpZiAvKiBNSU5JRElB TCAqLwotICAgIH0KLQotLyogQ2hlY2sgZm9yIGNvbm5lY3Rpb24gKi8KLQotICAgIG1kbXN0YXQg PSAwOwkJCS8qIE5vIHN0YXR1cyB5ZXQgKi8KLSAgICBsYnVmWzBdID0gTlVMOwkJCS8qIERlZmF1 bHQgcmVhc29uIGZvciBmYWlsdXJlICovCi0gICAgZGVidWcoRjEwMSwiZGlhbCBhd2FpdGluZyBy ZXNwb25zZSwgbXltZG10eXAiLCIiLG15bWRtdHlwKTsKLQotI2lmbmRlZiBOT1NQTAotICAgIG1v ZGVtbXNnWzBdID0gTlVMOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgd2hpbGUgKG1kbXN0YXQg PT0gMCkgewkJLyogVGlsbCB3ZSBnZXQgYSByZXN1bHQgb3IgdGltZSBvdXQgKi8KLQotCWlmICgo bWRtY2FwYXMgJiBDS0RfQVQpICYmIG5vbnZlcmJhbCkgeyAvKiBBVCBjb21tYW5kIHNldCAqLwot CSAgICBnZXRocm4oKTsJCQkvKiBJbiBkaWdpdCByZXN1bHQgbW9kZSAqLwotCSAgICBpZiAocGFy dGlhbCAmJiBkaWFsc3RhID09IERJQV9FUlIpIHsKLQkJLyoKLQkJICAgSWYgd2UgZ2V0IGFuIGVy cm9yIGhlcmUsIHRoZSBwaG9uZSBpcyBzdGlsbAotCQkgICBvZmYgaG9vayBzbyB3ZSBoYXZlIHRv IGhhbmcgaXQgdXAuCi0JCSovCi0JCWRpYWxodXAoKTsKLQkJZGlhbHN0YSA9IERJQV9FUlI7CS8q IChiZWNhdXNlIGRpYWxodXAoKSBjaGFuZ2VzIGl0KSAqLwotCSAgICB9Ci0JICAgIGNvbnRpbnVl OwotCi0JfSBlbHNlIGlmIChteW1kbXR5cCA9PSBuX1VOS05PV04pIHsgLyogVW5rbm93biBtb2Rl bSB0eXBlICovCi0JICAgIGludCB4LCB5ID0gd2FpdGN0OwotCSAgICBtZG1zdGF0ID0gRF9GQUlM RUQ7CQkvKiBBc3N1bWUgZmFpbHVyZS4gKi8KLQkgICAgd2hpbGUgKHktLSA+IC0xKSB7Ci0JCXgg PSB0dGNoaygpOwotCQlpZiAoeCA+IDApIHsKLQkJICAgIGlmICh4ID4gTEJVRkwpIHggPSBMQlVG TDsKLQkJICAgIHggPSB0dHhpbih4LChDSEFSICopbGJ1Zik7Ci0JCSAgICBpZiAoKHggPiAwKSAm JiBkaWFsZHB5KSBjb25vbChsYnVmKTsKLQkJfSBlbHNlIGlmIChuZXR3b3JrIAotI2lmZGVmIFRO X0NPTVBPUlQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFpc3RuY29tcG9ydCgpCi0j ZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgeCA8 IDApIHsgLyogQ29ubmVjdGlvbiBkcm9wcGVkICovCi0JCSAgICBpbml0ZWQgPSAwOwotI2lmZGVm IE5UU0lHCi0JCSAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAq LwotCQkgICAgZGlhbHN0YSA9IERJQV9JTzsJLyogQ2FsbCBpdCBhbiBJL08gZXJyb3IgKi8KLSNp ZmRlZiBEWU5BTUlDCi0JCSAgICBpZiAocmJ1ZikgZnJlZShyYnVmKTsgcmJ1ZiA9IE5VTEw7Ci0J CSAgICBpZiAoZmJ1ZikgZnJlZShmYnVmKTsgZmJ1ZiA9IE5VTEw7Ci0jZW5kaWYgLyogRFlOQU1J QyAqLwotCQkgICAgU0lHUkVUVVJOOwotCQl9Ci0JCXggPSB0dGdtZG0oKTsJCS8qIFRyeSB0byBy ZWFkIG1vZGVtIHNpZ25hbHMgKi8KLQkJaWYgKHggPCAwKSBicmVhazsJLyogQ2FuJ3QsIGZhaWwu ICovCi0JCWlmICh4ICYgQk1fRENEKSB7CS8qIEdvdCBzaWduYWxzIE9LLiAgQ2FycmllciBwcmVz ZW50PyAqLwotCQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsgLyogWWVzLCBkb25lLiAqLwotCQkg ICAgYnJlYWs7Ci0JCX0JCQkvKiBObywga2VlcCB3YWl0aW5nLiAqLwotCQlzbGVlcCgxKTsKLQkg ICAgfQotCSAgICBjb250aW51ZTsKLQl9Ci0KLQlmb3IgKG4gPSAtMTsgbiA8IExCVUZMLTE7ICkg ewkvKiBBY2N1bXVsYXRlIG1vZGVtIHJlc3BvbnNlICovCi0JICAgIGludCB4eDsKLQkgICAgYzIg PSAoY2hhcikgKHh4ID0gZGRpbmMoMCkpOyAvKiBSZWFkIGEgY2hhcmFjdGVyLCBibG9ja2luZyAq LwotCSAgICBpZiAoeHggPCAxKQkJCS8qIElnbm9yZSBOVUxzIGFuZCBlcnJvcnMgKi8KLQkgICAg ICBjb250aW51ZTsJCQkvKiAoVGltZW91dCB3aWxsIGhhbmRsZSBlcnJvcnMpICovCi0JICAgIGVs c2UJCQkvKiBSZWFsIGNoYXJhY3Rlciwga2VlcCBpdCAqLwotCSAgICAgIGxidWZbKytuXSA9IChj aGFyKSAoYzIgJiAwMTc3KTsKLQkgICAgZGlhbG9jKGxidWZbbl0pOwkJLyogTWF5YmUgZWNobyBp dCAgKi8KLQkgICAgaWYgKG1kbWNhcGFzICYgQ0tEX1YyNSkgewkvKiBWLjI1YmlzIGRpYWxpbmcu Li4gKi8KLS8qCi0gIFRoaXMgYXNzdW1lcyB0aGF0IFYuMjViaXMgaW5kaWNhdGlvbnMgYXJlIGFs bCBhdCBsZWFzdCAzIGNoYXJhY3RlcnMgbG9uZwotICBhbmQgYXJlIHRlcm1pbmF0ZWQgYnkgZWl0 aGVyIENSTEYgb3IgTEZDUi4KLSovCi0JCWlmIChteW1kbXR5cCA9PSBuX0NDSVRUKSB7Ci0JCSAg ICBpZiAobiA8IDMpIGNvbnRpbnVlOwotCQkgICAgaWYgKChsYnVmW25dID09IENSKSAmJiAobGJ1 ZltuLTFdID09IExGKSkgYnJlYWs7Ci0JCSAgICBpZiAoKGxidWZbbl0gPT0gTEYpICYmIChsYnVm W24tMV0gPT0gQ1IpKSBicmVhazsKLQkJfQotI2lmbmRlZiBNSU5JRElBTAotCQllbHNlIGlmICht eW1kbXR5cCA9PSBuX0RJR0lURUwpIHsKLQkJICAgIGlmICgoKGxidWZbbl0gPT0gQ1IpICYmIChs YnVmW24tMV0gPT0gTEYpKSB8fAotCQkJKChsYnVmW25dID09IExGKSAmJiAobGJ1ZltuLTFdID09 IENSKSkpCi0JCSAgICAgIGJyZWFrOwotCQkgICAgZWxzZQotCQkgICAgICBjb250aW51ZTsKLQkJ fQotI2VuZGlmIC8qIE1JTklESUFMICovCi0JICAgIH0gZWxzZSB7CQkJLyogQWxsIG90aGVycywg YnJlYWsgb24gQ1Igb3IgTEYgKi8KLQkJaWYgKCBsYnVmW25dID09IENSIHx8IGxidWZbbl0gPT0g TEYgKSBicmVhazsKLQkgICAgfQotCX0KLQlsYnVmWysrbl0gPSAnXDAnOwkJLyogVGVybWluYXRl IHJlc3BvbnNlIGZyb20gbW9kZW0gKi8KLQlkZWJ1ZyhGMTExLCJfZG9kaWFsIG1vZGVtIHJlc3Bv bnNlIixsYnVmLG4pOwotI2lmbmRlZiBOT1NQTAotCWNrc3RybmNweShtb2RlbW1zZyxsYnVmLExC VUZMKTsJLyogQ2FsbCByZXN1bHQgbWVzc2FnZSAqLwotCWxidWZbNzldID0gTlVMOwotCXsKLQkg ICAgaW50IHg7CQkJLyogU3RyaXAganVuayBmcm9tIGVuZCAqLwotCSAgICB4ID0gKGludClzdHJs ZW4obW9kZW1tc2cpIC0gMTsKLQkgICAgd2hpbGUgKHggPiAtMSkgewotCQlpZiAobW9kZW1tc2db eF0gPCAoY2hhcikgMzMpCi0JCSAgbW9kZW1tc2dbeF0gPSBOVUw7Ci0JCWVsc2UKLQkJICBicmVh azsKLQkJeC0tOwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIE5PU1BMICovCi0JaWYgKG1kbWNhcGFz ICYgQ0tEX0FUKSB7CS8qIEhheWVzIEFUIGNvbW1hbmQgc2V0ICovCi0JICAgIGdldGhydygpOwkJ CS8qIGluIHdvcmQgcmVzdWx0IG1vZGUgKi8KLQkgICAgaWYgKHBhcnRpYWwgJiYgZGlhbHN0YSA9 PSBESUFfRVJSKSB7Ci0JCWRpYWxodXAoKTsKLQkJZGlhbHN0YSA9IERJQV9FUlI7CS8qIChiZWNh dXNlIGRpYWxodXAoKSBjaGFuZ2VzIGl0KSAqLwotCSAgICB9Ci0JICAgIGNvbnRpbnVlOwotCX0g ZWxzZSBpZiAobWRtY2FwYXMgJiBDS0RfVjI1KSB7IC8qIENDSVRUIGNvbW1hbmQgc2V0ICovCi0J ICAgIGlmIChkaWR3ZWdldChsYnVmLCJWQUwiKSkgeyAvKiBEaWFsIGNvbW1hbmQgY29uZmlybWF0 aW9uICovCi0jaWZuZGVmIE1JTklESUFMCi0JCWlmIChteW1kbXR5cCA9PSBuX0NDSVRUKQotI2Vu ZGlmIC8qIE1JTklESUFMICovCi0JCSAgY29udGludWU7CQkvKiBHbyBiYWNrIGFuZCByZWFkIG1v cmUgKi8KLSNpZm5kZWYgTUlOSURJQUwKLS8qIERpZ2l0ZWwgZG9lc24ndCBnaXZlIGFuIGV4cGxp Y2l0IGNvbm5lY3QgY29uZmlybWF0aW9uIG1lc3NhZ2UgKi8KLQkJZWxzZSB7Ci0JCSAgICBpbnQg bjsKLQkJICAgIGZvciAobiA9IC0xOyBuIDwgTEJVRkwtMTsgKSB7Ci0JCQlsYnVmWysrbl0gPSBj MiA9IChjaGFyKSAoZGRpbmMoMCkgJiAwMTc3KTsKLQkJCWRpYWxvYyhsYnVmW25dKTsKLQkJCWlm ICgoKGxidWZbbl0gPT0gQ1IpICYmIChsYnVmW24tMV0gPT0gTEYpKSB8fAotCQkJICAgICgobGJ1 ZltuXSA9PSBMRikgJiYgKGxidWZbbi0xXSA9PSBDUikpKQotCQkJICBicmVhazsKLQkJICAgIH0K LQkJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7IC8qIEFzc3VtZSB3ZSdyZSBjb25uZWN0ZWQgKi8K LQkJICAgIGlmIChkaWFsZHB5ICYmIGNhcnJpZXIgIT0gQ0FSX09GRikgewotI2lmZGVmIFROX0NP TVBPUlQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJUTiBDb20gUG9ydCBEQ0Qgd2FpdC4uLiIsIiIsMCk7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobiA9IHR0Z21kbSgpKSA+PSAwKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gJiBCTV9EQ0QpKQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDUwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0bmNfd2FpdCgKLQkJCQkJKENIQVIgKikiX2RvZGlhbCB3YWl0aW5nIGZv ciBEQ0QiLDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0jZW5k aWYgLyogVE5fQ09NUE9SVCAqLwotCQkJICBzbGVlcCgxKTsgCS8qIFdhaXQgYSBzZWNvbmQgKi8K LQkJCW4gPSB0dGdtZG0oKTsJLyogVHJ5IHRvIHJlYWQgbW9kZW0gc2lnbmFscyAqLwotCQkJaWYg KChuID4gLTEpICYmICgobiAmIEJNX0RDRCkgPT0gMCkpCi0JCQkgIHByaW50ZigiV0FSTklORyAt IG5vIGNhcnJpZXJcbiIpOwotCQkgICAgfQotCQl9Ci0jZW5kaWYgLyogTUlOSURJQUwgKi8KLQot CQkvKiBTdGFuZGFyZCBWLjI1YmlzIHN0dWZmICovCi0KLQkgICAgfSBlbHNlIGlmIChkaWR3ZWdl dChsYnVmLCJDTlgiKSkgeyAvKiBDb25uZWN0ZWQgKi8KLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsK LQkgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCAiSU5WIikpIHsKLQkJbWRtc3RhdCA9IERf RkFJTEVEOwkvKiBDb21tYW5kIGVycm9yICovCi0JCWRpYWxzdGEgPSBESUFfRVJSOwotCQlja3N0 cm5jcHkobGJ1ZiwiSU5WIixMQlVGTCk7Ci0KLQkgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVm LCJDRkkiKSkgeyAvKiBDYWxsIEZhaWx1cmUgKi8KLQotCQlpZiAoZGlkd2VnZXQobGJ1ZiwiQUIi KSkgeyAvKiBJbnRlcnByZXQgcmVhc29uIGNvZGUgKi8KLQkJICAgIGNrc3RybmNweShsYnVmLCJB QjogVGltZWQgb3V0IixMQlVGTCk7Ci0JCSAgICBkaWFsc3RhID0gRElBX1RJTU87Ci0JCX0gZWxz ZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQ0IiKSkgewotCQkgICAgY2tzdHJuY3B5KGxidWYsIkNCOiBM b2NhbCBEQ0UgQnVzeSIsTEJVRkwpOwotCQkgICAgZGlhbHN0YSA9IERJQV9OUkRZOwotCQl9IGVs c2UgaWYgKGRpZHdlZ2V0KGxidWYsIkVUIikpIHsKLQkJICAgIGNrc3RybmNweShsYnVmLCJFVDog QnVzeSIsTEJVRkwpOwotCQkgICAgZGlhbHN0YSA9IERJQV9CVVNZOwotCQl9IGVsc2UgaWYgKGRp ZHdlZ2V0KGxidWYsICJOUyIpKSB7Ci0JCSAgICBja3N0cm5jcHkobGJ1ZiwiTlM6IE51bWJlciBu b3Qgc3RvcmVkIixMQlVGTCk7Ci0JCSAgICBkaWFsc3RhID0gRElBX0VSUjsKLQkJfSBlbHNlIGlm IChkaWR3ZWdldChsYnVmLCJOVCIpKSB7Ci0JCSAgICBja3N0cm5jcHkobGJ1ZiwiTlQ6IE5vIGFu c3dlciIsTEJVRkwpOwotCQkgICAgZGlhbHN0YSA9IERJQV9OT0FOOwotCQl9IGVsc2UgaWYgKGRp ZHdlZ2V0KGxidWYsIlJUIikpIHsKLQkJICAgIGNrc3RybmNweShsYnVmLCJSVDogUmluZyB0b25l IixMQlVGTCk7Ci0JCSAgICBkaWFsc3RhID0gRElBX1JJTkc7Ci0JCX0gZWxzZSBpZiAoZGlkd2Vn ZXQobGJ1ZiwiUFYiKSkgewotCQkgICAgY2tzdHJuY3B5KGxidWYsIlBWOiBQYXJhbWV0ZXIgdmFs dWUgZXJyb3IiLExCVUZMKTsKLQkJICAgIGRpYWxzdGEgPSBESUFfRVJSOwotCQl9IGVsc2UgaWYg KGRpZHdlZ2V0KGxidWYsIlBTIikpIHsKLQkJICAgIGNrc3RybmNweShsYnVmLCJQUzogUGFyYW1l dGVyIHN5bnRheCBlcnJvciIsTEJVRkwpOwotCQkgICAgZGlhbHN0YSA9IERJQV9FUlI7Ci0JCX0g ZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTVMiKSkgewotCQkgICAgY2tzdHJuY3B5KGxidWYsIk1T OiBNZXNzYWdlIHN5bnRheCBlcnJvciIsTEJVRkwpOwotCQkgICAgZGlhbHN0YSA9IERJQV9FUlI7 Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQ1UiKSkgewotCQkgICAgY2tzdHJuY3B5KGxi dWYsIkNVOiBDb21tYW5kIHVua25vd24iLExCVUZMKTsKLQkJICAgIGRpYWxzdGEgPSBESUFfRVJS OwotCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkZDIikpIHsKLQkJICAgIGNrc3RybmNweShs YnVmLCJGQzogRm9yYmlkZGVuIGNhbGwiLExCVUZMKTsKLQkJICAgIGRpYWxzdGEgPSBESUFfTk9B QzsKLQkJfQotCQltZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQo bGJ1ZiwiSU5DIikpIHsgLyogSW5jb21pbmcgQ2FsbCAqLwotCQlja3N0cm5jcHkobGJ1ZiwiSU5D OiBJbmNvbWluZyBjYWxsIixMQlVGTCk7Ci0JCWRpYWxzdGEgPSBESUFfUklORzsKLQkJbWRtc3Rh dCA9IERfRkFJTEVEOwotCSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkRMQyIpKSB7IC8q IERlbGF5ZWQgQ2FsbCAqLwotCQlja3N0cm5jcHkobGJ1ZiwiRExDOiBEZWxheWVkIGNhbGwiLExC VUZMKTsKLQkJZGlhbHN0YSA9IERJQV9OT0FOOwotCQltZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JICAg IH0gZWxzZQkJCS8qIFJlc3BvbnNlIHdhcyBwcm9iYWJseSBhbiBlY2hvLiAqLwotI2lmbmRlZiBN SU5JRElBTAotCSAgICAgIGlmIChteW1kbXR5cCA9PSBuX0NDSVRUKQotI2VuZGlmIC8qIE1JTklE SUFMICovCi0JCWNvbnRpbnVlOwotI2lmbmRlZiBNSU5JRElBTAotCSAgICAgIGVsc2UJCQkvKiBE aWdpdGVsOiBJZiBubyBlcnJvciwgY29ubmVjdC4gKi8KLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsK LSNlbmRpZiAvKiBNSU5JRElBTCAqLwotCSAgICBicmVhazsKLQotCX0gZWxzZSBpZiAobikgewkJ CS8qIE5vbi1IYXllcy1jb21wYXRpYmxlcy4uLiAqLwotCSAgICBzd2l0Y2ggKG15bWRtdHlwKSB7 Ci0jaWZuZGVmIE1JTklESUFMCi0JICAgICAgY2FzZSBuX0FUVE1PREVNOgotCQkvKiBDYXJlZnVs IC0gIkNvbm5lY3RlZCIgLyAiTm90IENvbm5lY3RlZCIgKi8KLQkJaWYgKGRpZHdlZ2V0KGxidWYs IkJ1c3kiKSkgewotCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwotCQkgICAgZGlhbHN0YSA9IERJ QV9CVVNZOwotCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5vdCBjb25uZWN0ZWQiKSB8fAot CQkJICAgZGlkd2VnZXQobGJ1ZiwiTm90IENvbm5lY3RlZCIpKSB7Ci0JCSAgICBtZG1zdGF0ID0g RF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX05PQ0E7Ci0JCX0gZWxzZSBpZiAoZGlkd2Vn ZXQobGJ1ZiwiTm8gZGlhbCB0b25lIikgfHwKLQkJCSAgIGRpZHdlZ2V0KGxidWYsIk5vIERpYWwg VG9uZSIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElB X05PRFQ7Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTm8gYW5zd2VyIikgfHwKLQkJCSAg IGRpZHdlZ2V0KGxidWYsIk5vIEFuc3dlciIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7 Ci0JCSAgICBkaWFsc3RhID0gRElBX05PQU47Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1Ziwi QW5zd2VyZWQiKSB8fAotCQkJICAgZGlkd2VnZXQobGJ1ZiwiQ29ubmVjdGVkIikpIHsKLQkJICAg IG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX09LOwotCQl9Ci0JCWJy ZWFrOwotCi0JICAgICAgY2FzZSBuX0FUVElTTjoKLQkJaWYgKGRpZHdlZ2V0KGxidWYsIkFOU1dF UkVEIikpIHsKLQkJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JCSAgICBkaWFsc3RhID0gRElB X09LOwotCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkJVU1kiKSkgewotCQkgICAgbWRtc3Rh dCA9IERfRkFJTEVEOwotCQkgICAgZGlhbHN0YSA9IERJQV9CVVNZOwotCQl9IGVsc2UgaWYgKGRp ZHdlZ2V0KGxidWYsIkRJU0NPTk5FQ1QiKSkgewotCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwot CQkgICAgZGlhbHN0YSA9IERJQV9ESVNDOwotCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5P IEFOU1dFUiIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0g RElBX05PQU47Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiV1JPTkcgQUREUkVTUyIpKSB7 Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX05PQUM7Ci0J CX0KLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIG5fQVRURFRETToKLQkJaWYgKGRpZHdlZ2V0KGxi dWYsIkFOU1dFUkVEIikpIHsKLQkJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JCX0gZWxzZSBp ZiAoZGlkd2VnZXQobGJ1ZiwiQlVTWSIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0J CSAgICBkaWFsc3RhID0gRElBX0JVU1k7Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQ0hF Q0sgT1BUSU9OUyIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3Rh ID0gRElBX0VSUjsKLQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJESVNDT05ORUNURUQiKSkg ewotCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwotCQkgICAgZGlhbHN0YSA9IERJQV9ESVNDOwot CQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkRFTklFRCIpKSB7Ci0JCSAgICBtZG1zdGF0ID0g RF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX05PQUM7Ci0JCX0KLSNpZmRlZiBERUJVRwot I2lmZGVmIEFUVDYzMDAKLQkJLyogSG9ycmlibGUgaGFjayBsb3N0IGluIGhpc3RvcnkuICovCi0J CWVsc2UgaWYgKGRlYmxvZyAmJiBkaWR3ZWdldChsYnVmLCJ+fiIpKQotCQkgIG1kbXN0YXQgPSBD T05ORUNURUQ7Ci0jZW5kaWYgLyogQVRUNjMwMCAqLwotI2VuZGlmIC8qIERFQlVHICovCi0JCWJy ZWFrOwotCi0jaWZkZWYgT0xETU9ERU1TCi0JICAgICAgY2FzZSBuX0NFUk1FVEVLOgotCQlpZiAo ZGlkd2VnZXQobGJ1ZiwiXDAxNkEiKSkgewotCQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkJ ICAgIHR0c2xvdygiXDAxNlUgMVwwMTUiLDIwMCk7IC8qIE1ha2UgdHJhbnNwYXJlbnQqLwotCQl9 Ci0JCWJyZWFrOwotCi0JICAgICAgY2FzZSBuX0RGMDM6Ci0JCS8qIEJlY2F1c2UgcmVzcG9uc2Ug bGFja3MgQ1Igb3IgTkwgLiAuIC4gKi8KLQkJYyA9IChjaGFyKSAoZGRpbmMoMCkgJiAwMTc3KTsK LQkJZGlhbG9jKGMpOwotCQlkZWJ1ZyhGMDAwLCJkaWFsIGRmMDMgZ290IiwiIixjKTsKLQkJaWYg KCBjID09ICdBJyApIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JCWlmICggYyA9PSAnQicgKSBtZG1z dGF0ID0gRF9GQUlMRUQ7Ci0JCWJyZWFrOwotCi0JICAgICAgY2FzZSBuX0RGMTAwOgkgICAgIC8q IERGMTAwIGhhcyBzaG9ydCByZXNwb25zZSBjb2RlcyAqLwotCQlpZiAoc3RyY21wKGxidWYsIkEi KSA9PSAwKSB7Ci0JCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOyAvKiBBdHRhY2hlZCAqLwotCQkg ICAgZGlhbHN0YSA9IERJQV9PSzsKLQkJfSBlbHNlIGlmIChzdHJjbXAobGJ1ZiwiTiIpID09IDAp IHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFfTk9BTjsg LyogTm8gYW5zd2VyIG9yIG5vIGRpYWx0b25lICovCi0JCX0gZWxzZSBpZiAoc3RyY21wKGxidWYs IkUiKSA9PSAwIHx8IC8qIEVycm9yICovCi0JCQkgICBzdHJjbXAobGJ1ZiwiUiIpID09IDApIHsg LyogIlJlYWR5IiAoPykgKi8KLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxz dGEgPSBESUFfRVJSOwkvKiBDb21tYW5kIGVycm9yICovCi0JCX0KLQkJLyogb3RoZXJ3aXNlIGZh bGwgdGhydS4uLiAqLwotCi0JICAgICAgY2FzZSBuX0RGMjAwOgotCQlpZiAoZGlkd2VnZXQobGJ1 ZiwiQXR0YWNoZWQiKSkgewotCQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkJICAgIGRpYWxz dGEgPSBESUFfT0s7Ci0JCSAgICAvKgotCQkgICAgICogVGhlIERGMTAwIHdpbGwgcmVzcG9uZCB3 aXRoICJBdHRhY2hlZCIgZXZlbiBpZiBEVFIKLQkJICAgICAqIGFuZC9vciBjYXJyaWVyIGFyZSBu b3QgcHJlc2VudC4JQW5vdGhlciByZWFzb24gdG8KLQkJICAgICAqIChhbHNvKSB3YWl0IGZvciBj YXJyaWVyPwotCQkgICAgICovCi0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQnVzeSIpKSB7 Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX0JVU1k7Ci0J CX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiRGlzY29ubmVjdGVkIikpIHsKLQkJICAgIG1kbXN0 YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFfRElTQzsKLQkJfSBlbHNlIGlmIChk aWR3ZWdldChsYnVmLCJFcnJvciIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAg ICBkaWFsc3RhID0gRElBX0VSUjsKLQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJObyBhbnN3 ZXIiKSkgewotCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwotCQkgICAgZGlhbHN0YSA9IERJQV9O T0FOOwotCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5vIGRpYWwgdG9uZSIpKSB7Ci0JCSAg ICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX05PRFQ7Ci0JCX0gZWxz ZSBpZiAoZGlkd2VnZXQobGJ1ZiwiU3BlZWQ6KSIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlM RUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX0VSUjsKLQkJfQotCQkvKgotCQkgKiBJdCBhcHBlYXJz IHRoYXQgdGhlICJTcGVlZDouLi4iIHJlc3BvbnNlIGNvbWVzIGFmdGVyIGFuCi0JCSAqICJBdHRh Y2hlZCIgcmVzcG9uc2UsIHNvIHRoaXMgaXMgbmV2ZXIgc2Vlbi4gIEhPV0VWRVIsCi0JCSAqIGl0 IHdvdWxkIGJlIHZlcnkgaGFuZHkgdG8gZGV0ZWN0IHRoaXMgYW5kIHRlbXBvcmFyaWx5Ci0JCSAq IHJlc2V0IHRoZSBzcGVlZCwgc2luY2UgaXQncyBhIG51aXNhbmNlIG90aGVyd2lzZS4KLQkJICog SWYgd2Ugd2FpdCBmb3Igc29tZSBtb3JlIGlucHV0IGZyb20gdGhlIG1vZGVtLCBob3cgZG8KLQkJ ICogd2Uga25vdyBpZiBpdCdzIGZyb20gdGhlIHJlbW90ZSBob3N0IG9yIHRoZSBtb2RlbT8KLQkJ ICogQ2FycmllciByZXBvcnRlZGx5IGRvZXNuJ3QgZ2V0IHNldCB1bnRpbCBhZnRlciB0aGUKLQkJ ICogIlNwZWVkOi4uLiIgcmVzcG9uc2UgKGlmIGFueSkgaXMgc2VudC4gIEFub3RoZXIgcmVhc29u Ci0JCSAqIHRvIChhbHNvKSB3YWl0IGZvciBjYXJyaWVyLgotCQkgKi8KLQkJYnJlYWs7Ci0KLQkg ICAgICBjYXNlIG5fR0RDOgotCQlpZiAoZGlkd2VnZXQobGJ1ZiwiT04gTElORSIpKQotCQkgIG1k bXN0YXQgPSBDT05ORUNURUQ7Ci0JCWVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5PIENPTk5FQ1Qi KSkKLQkJICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCWJyZWFrOwotCi0JICAgICAgY2FzZSBuX1BF TlJJTDoKLQkJaWYgKGRpZHdlZ2V0KGxidWYsIk9LIikpIHsKLQkJICAgIG1kbXN0YXQgPSBDT05O RUNURUQ7Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQlVTWSIpKSB7Ci0JCSAgICBtZG1z dGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX0JVU1k7Ci0JCSAgICB9IGVsc2Ug aWYgKGRpZHdlZ2V0KGxidWYsIk5PIFJJTkciKSkgewotCQkJbWRtc3RhdCA9IERfRkFJTEVEOwot CQkJZGlhbHN0YSA9IERJQV9OT0NBOwotCQkgICAgfQotCQlicmVhazsKLQotCSAgICAgIGNhc2Ug bl9SQUNBTDoKLQkJaWYgKGRpZHdlZ2V0KGxidWYsIk9OIExJTkUiKSkKLQkJICBtZG1zdGF0ID0g Q09OTkVDVEVEOwotCQllbHNlIGlmIChkaWR3ZWdldChsYnVmLCJGQUlMRUQgQ0FMTCIpKQotCQkg IG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJYnJlYWs7Ci0jZW5kaWYgLyogT0xETU9ERU1TICovCi0K LQkgICAgICBjYXNlIG5fUk9MTToKLQkJaWYgKGRpZHdlZ2V0KGxidWYsIkNBTExJTkciKSkKLQkJ ICBtZG1zdGF0ID0gMDsKLQkJZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQ09NUExFVEUiKSkKLQkJ ICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCQllbHNlIGlmIChkaWR3ZWdldChsYnVmLCJGQUlMRUQi KSB8fAotCQkJIGRpZHdlZ2V0KGxidWYsIkFCQU5ET05ERUQiKSkgewotCQkgICAgbWRtc3RhdCA9 IERfRkFJTEVEOwotCQkgICAgZGlhbHN0YSA9IERJQV9OT0NBOwotCQl9IGVsc2UgaWYgKGRpZHdl Z2V0KGxidWYsIk5PVCBBVkFJTEFCTEUiKSB8fAotCQkJICAgZGlkd2VnZXQobGJ1ZiwiTEFDS1Mg UEVSTUlTU0lPTiIpIHx8Ci0JCQkgICBkaWR3ZWdldChsYnVmLCJOT1QgQSBEQVRBTElORSIpIHx8 Ci0JCQkgICBkaWR3ZWdldChsYnVmLCJJTlZBTElEIERBVEEgTElORSBOVU1CRVIiKSB8fAotCQkJ ICAgZGlkd2VnZXQobGJ1ZiwiSU5WQUxJRCBHUk9VUCBOQU1FIikpIHsKLQkJICAgIG1kbXN0YXQg PSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFfTk9BQzsKLQkJfSBlbHNlIGlmIChkaWR3 ZWdldChsYnVmLCJCVVNZIikpIHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRp YWxzdGEgPSBESUFfQlVTWTsKLQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJET0VTIE5PVCBB TlNXRVIiKSkgewotCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwotCQkgICAgZGlhbHN0YSA9IERJ QV9OT0FOOwotCQl9Ci0JCWJyZWFrOwotCi0jaWZkZWYgT0xETU9ERU1TCi0JICAgICAgY2FzZSBu X1ZFTlRFTDoKLQkJaWYgKGRpZHdlZ2V0KGxidWYsIk9OTElORSEiKSB8fAotCQkgICAgZGlkd2Vn ZXQobGJ1ZiwiT25saW5lISIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCQl9IGVs c2UgaWYgKGRpZHdlZ2V0KGxidWYsIkJVU1kiKSB8fAotCQkJICAgZGlkd2VnZXQobGJ1ZiwiQnVz eSIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX0JV U1k7Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiREVBRCBQSE9ORSIpKSB7Ci0JCSAgICBt ZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX0RJU0M7Ci0JCX0KLQkJYnJl YWs7Ci0KLQkgICAgICBjYXNlIG5fQ09OQ09SRDoKLQkJaWYgKGRpZHdlZ2V0KGxidWYsIklOSVRJ QVRJTkciKSkKLQkJICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCQllbHNlIGlmIChkaWR3ZWdldChs YnVmLCJCVVNZIikpIHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEg PSBESUFfQlVTWTsKLQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJDQUxMIEZBSUxFRCIpKSB7 Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX05PQ0E7Ci0J CX0KLQkJYnJlYWs7Ci0jZW5kaWYgLyogT0xETU9ERU1TICovCi0KLQkgICAgICBjYXNlIG5fTUlD Uk9DT006Ci0JCS8qICJSSU5HQkFDSyIgbWVhbnMgcGhvbmUgbGluZSByaW5naW5nLCBjb250aW51 ZSAqLwotCQlpZiAoZGlkd2VnZXQobGJ1ZiwiTk8gQ09OTkVDVCIpKSB7Ci0JCSAgICBtZG1zdGF0 ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX05PQ0E7Ci0JCX0gZWxzZSBpZiAoZGlk d2VnZXQobGJ1ZiwiQlVTWSIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBk aWFsc3RhID0gRElBX0JVU1k7Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTk8gRElBTFRP TkUiKSkgewotCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwotCQkgICAgZGlhbHN0YSA9IERJQV9O T0RUOwotCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkNPTU1BTkQgRVJST1IiKSkgewotCQkg ICAgbWRtc3RhdCA9IERfRkFJTEVEOwotCQkgICAgZGlhbHN0YSA9IERJQV9FUlI7Ci0JCX0gZWxz ZSBpZiAoZGlkd2VnZXQobGJ1ZiwiSU4gVVNFIikpIHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxF RDsKLQkJICAgIGRpYWxzdGEgPSBESUFfTk9BQzsKLQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVm LCJDT05ORUNUIikpIHsKLQkJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JCSAgICAvKiB0cmFp bGluZyBzcGVlZCBpZ25vcmVkICovCi0JCX0KLQkJYnJlYWs7Ci0KLSNlbmRpZiAvKiBNSU5JRElB TCAqLwotCSAgICAgIGRlZmF1bHQ6Ci0JCXByaW50ZigKLQkJICAgICJQUk9HUkFNIEVSUk9SIC0g Tm8gcmVzcG9uc2UgaGFuZGxlciBmb3IgbW9kZW0gdHlwZSAlZFxuIiwKLQkJICAgICAgIG15bWRt dHlwKTsKLQkJbWRtc3RhdCA9IERfRkFJTEVEOwotCQlkaWFsc3RhID0gRElBX0VSUjsKLQkgICAg fQotCX0KLSAgICB9IC8qIHdoaWxlIChtZG1zdGF0ID09IDApICovCi0KLSAgICBkZWJ1ZyhGMTAx LCJfZG9kaWFsIGFsYXJtIG9mZiIsIiIseCk7Ci0gICAgYWxhcm0oMCk7Ci0gICAgaWYgKG1kbXN0 YXQgPT0gRF9GQUlMRUQpIHsJCS8qIEZhaWx1cmUgZGV0ZWN0ZWQgYnkgbW9kZW0gICovCi0gICAg ICAgIGRpYWxmYWlsKEZfTU9ERU0pOwotI2lmZGVmIE5UU0lHCi0JY2tUaHJlYWRFbmQodGhyZWFk aW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgU0lHUkVUVVJOOwotICAgIH0gZWxz ZSBpZiAobWRtc3RhdCA9PSBEX1BBUlRJQUwgKQl7IC8qIFBhcnRpYWwgZGlhbCBjb21tYW5kIE9L ICovCi0JbXNsZWVwKDUwMCk7Ci0JZGVidWcoRjEwMCwiZGlhbCBwYXJ0aWFsIiwiIiwwKTsKLSAg ICB9IGVsc2UgewkJCQkvKiBDYWxsIHdhcyBjb21wbGV0ZWQgKi8KLQlpbnQgeDsKLQltc2xlZXAo NzAwKTsJCQkvKiBJbiBjYXNlIG1vZGVtIHNpZ25hbHMgYmxpbmsgICovCi0JZGVidWcoRjEwMCwi ZGlhbCBzdWNjZWVkZWQiLCIiLDApOwotCWlmICgKLSNpZm5kZWYgTUlOSURJQUwKLQkgICAgbXlt ZG10eXAgIT0gbl9ST0xNCQkvKiBSb2xtIGhhcyB3ZWlyZCBtb2RlbSBzaWduYWxpbmcgKi8KLSNl bHNlCi0JICAgIDEKLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotCSAgICApIHsKLQkgICAgYWxhcm0o Myk7CQkJLyogSW4gY2FzZSB0dHBrdCgpIGdldHMgc3R1Y2suLi4gKi8KLQkgICAgdHRwa3Qoc3Bl ZWQsRkxPX0RJQVgscGFyaXR5KTsgLyogQ2FuY2VsIGRpYWxpbmcgc3RhdGUgaW9jdGwgKi8KLSAg ICAgICAgICAgIGFsYXJtKDApOwotCX0KLS8qCi0gIEluIGNhc2UgQ0Qgd2VudCBvZmYgaW4gdGhl IGludGVydmFsIGJldHdlZW4gY2FsbCBjb21wbGV0aW9uIGFuZCByZXR1cm4KLSAgZnJvbSB0dHBr dCgpLi4uCi0qLwotCWlmIChjYXJyaWVyICE9IENBUl9PRkYpIHsKLSAgICAgICAgICAgIGlmICgo eCA9IHR0Z21kbSgpKSA+PSAwKSB7Ci0jaWZkZWYgVE5fQ09NUE9SVAotICAgICAgICAgICAgICAg IGlmIChpc3RuY29tcG9ydCgpICYmICEoeCAmIEJNX0RDRCkpIHsKLSAgICAgICAgICAgICAgICAg ICAgaW50IGk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCg1MDApOwotICAgICAgICAgICAgICAgICAg ICAgICAgdG5jX3dhaXQoKENIQVIgKikiX2RvZGlhbCB3YWl0aW5nIGZvciBEQ0QiLDEpOwotICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gdHRnbWRtKCkpID49IDApIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoKHggJiBCTV9EQ0QpKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBUTl9DT01QT1JUICov Ci0gICAgICAgICAgICAgICAgaWYgKCEoeCAmIEJNX0RDRCkpCi0JCSAgcHJpbnRmKCJXQVJOSU5H OiBDYXJyaWVyIHNlZW1zIHRvIGhhdmUgZHJvcHBlZC4uLlxuIik7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0KLSAgICB9Ci0gICAgZHJlc2V0KCk7CQkJCS8qIFJlc2V0IGFsYXJtcyBhbmQgc2ln bmFscy4gKi8KLSAgICBpZiAoIXF1aWV0ICYmICFiYWNrZ3JkKSB7Ci0JaWYgKGRpYWxkcHkgJiYg KHAgPSBja190aW1lKCkpKSB7IC8qIElmIERJQUwgRElTUExBWSBPTiwgKi8KLQkgICAgcHJpbnRm KCIgJXNhbGwgY29tcGxldGU6ICVzLlxuIiwgLyogaW5jbHVkZSB0aW1lc3RhbXAuICAqLwotCQkg ICAobWRtc3RhdCA9PSBEX1BBUlRJQUwpID8KLQkJICAgIlBhcnRpYWwgYyIgOgotCQkgICAiQyIs Ci0JCSAgIHAgKTsKLQl9IGVsc2UgaWYgKG1vZGVtbXNnWzBdKSB7Ci0JICAgIHByaW50ZiAoIiAl c2FsbCBjb21wbGV0ZTogXCIlc1wiLlxuIiwKLQkJICAgIChtZG1zdGF0ID09IERfUEFSVElBTCkg PyAiUGFydGlhbCBjIiA6ICJDIiwKLQkJICAgIChjaGFyICopbW9kZW1tc2cKLQkJICAgICk7Ci0J fSBlbHNlIHsKLQkgICAgcHJpbnRmICgiICVzYWxsIGNvbXBsZXRlLlxuIiwKLQkJICAgIChtZG1z dGF0ID09IERfUEFSVElBTCkgPwotCQkgICAgIlBhcnRpYWwgYyIgOgotCQkgICAgIkMiCi0JCSAg ICApOwotCX0KLSAgICB9Ci0jaWZkZWYgQ0tMT0dESUFMCi0gICAgZG9sb2dkaWFsKHRlbG5icik7 Ci0jZW5kaWYgLyogQ0tMT0dESUFMICovCi0KLSNpZmRlZiBEWU5BTUlDCi0gICAgaWYgKHJidWYp IGZyZWUocmJ1Zik7IHJidWYgPSBOVUxMOwotICAgIGlmIChmYnVmKSBmcmVlKGZidWYpOyBmYnVm ID0gTlVMTDsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0gICAgZGlhbHN0YSA9IChtZG1zdGF0ID09 IERfUEFSVElBTCkgPyBESUFfUEFSVCA6IERJQV9PSzsKLSNpZmRlZiBOVFNJRwotICAgIGNrVGhy ZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgU0lHUkVUVVJOOwot fQotCi1zdGF0aWMgU0lHVFlQCi0jaWZkZWYgQ0tfQU5TSUMKLWZhaWxkaWFsKHZvaWQgKiB0aHJl YWRpbmZvKQotI2Vsc2UgLyogTm90IENLX0FOU0lDICovCi1mYWlsZGlhbCh0aHJlYWRpbmZvKSBW T0lEICogdGhyZWFkaW5mbzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZmFpbGRpYWwgKi8g ewotICAgIGRlYnVnKEYxMDAsImxvbmdqbXAgcmV0dXJucyB0byBkaWFsIHJvdXRpbmUiLCIiLDAp OwotICAgIGRpYWxmYWlsKGZhaWxfY29kZSk7Ci0gICAgU0lHUkVUVVJOOwotfQotCi0vKgotICBu YnIgPSBudW1iZXIgdG8gZGlhbCAoc3RyaW5nKQotICB4MSAgPSBSZXRyeSBjb3VudGVyCi0gIHgy ICA9IE51bWJlciBjb3VudGVyCi0gIGZjICA9IEZ1bmN0aW9uIGNvZGU6Ci0gICAgICAgIDAgPT0g RElBTAotICAgICAgICAxID09IEFOU1dFUgotICAgICAgICAyID09IElOSVQvQ09ORklHCi0gICAg ICAgIDMgPT0gUEFSVElBTCBESUFMCi0qLwotCi1pbnQKLSNpZmRlZiBPTERfRElBTAotY2tkaWFs KG5icikgY2hhciAqbmJyOwotI2Vsc2UKLWNrZGlhbChuYnIsIHgxLCB4MiwgZmMsIHJlZGlhbCkg Y2hhciAqbmJyOyBpbnQgeDEsIHgyLCBmYywgcmVkaWFsOwotI2VuZGlmIC8qIE9MRF9ESUFMICov Ci0vKiBja2RpYWwgKi8gewotI2RlZmluZSBFUk1TR0wgNTAKLSAgICBjaGFyIGVycm1zZ1tFUk1T R0xdLCAqZXJwOwkJLyogRm9yIGVycm9yIG1lc3NhZ2VzICovCi0gICAgaW50IG4gPSBGX1RJTUU7 Ci0gICAgY2hhciAqczsKLSAgICBsb25nIHNwZG1heDsKLSNpZmRlZiBPUzIKLSAgICBleHRlcm4g aW50IHRlcm1faW87Ci0gICAgaW50IHRlcm1faW9fc2F2ID0gdGVybV9pbzsKLSNlbmRpZiAvKiBP UzIgKi8KLQotICAgIGNoYXIgKm1tc2cgPSAiU29ycnksIERJQUwgbWVtb3J5IGJ1ZmZlciBjYW4n dCBiZSBhbGxvY2F0ZWRcbiI7Ci0gICAgLyoKLSAgICAgIEEgRElBTCBjb21tYW5kIGltcGxpZXMg YSBTRVQgTU9ERU0gVFlQRSBjb21tYW5kIGFuZCB0aGVyZWZvcmUgZW5hYmxlcwotICAgICAgaGFu Z2luZyB1cCBieSBtb2RlbSBjb21tYW5kcyByYXRoZXIgdGhhbiBkcm9wcGluZyBEVFIuCi0gICAg Ki8KLSAgICBtZG1zZXQgPSAxOwkJCQkvKiBTZWUgbWRtaHVwKCkgKi8KLQotICAgIHBhcnRpYWwg PSAwOwotICAgIGlmIChmYyA9PSAzKSB7CQkJLyogUGFydGlhbCBkaWFsIHJlcXVlc3RlZCAqLwot CXBhcnRpYWwgPSAxOwkJCS8qIFNldCBmbGFnICovCi0JZmMgPSAwOwkJCQkvKiBUcmVhdCBsaWtl IHJlZ3VsYXIgZGlhbGluZyAqLwotICAgIH0KLSAgICBmdW5jX2NvZGUgPSBmYzsJCQkvKiBNYWtl IGdsb2JhbCB0byB0aGlzIG1vZHVsZSAqLwotICAgIHRlbG5iciA9IG5icjsKLSAgICB4cmVkaWFs ID0gcmVkaWFsOwotICAgIGRlYnVnKEYxMTEsImNrZGlhbCBlbnRyeSBwYXJ0aWFsIixja2l0b2Eo ZmMpLHBhcnRpYWwpOwotICAgIGRlYnVnKEYxMTEsImNrZGlhbCBlbnRyeSBudW1iZXIiLG5icixy ZWRpYWwpOwotCi0gICAgaWYgKGZjID09IDEpIHsJCQkvKiBBTlNXRVIgY29tbWFuZD8gKi8KLQkv KiBSZXNldCBjYWxsZXIgSUQgc3RyaW5ncyAqLwotCWlmIChjYWxsaWRfZGF0ZSkgbWFrZXN0cigm Y2FsbGlkX2RhdGUsTlVMTCk7Ci0JaWYgKGNhbGxpZF90aW1lKSBtYWtlc3RyKCZjYWxsaWRfdGlt ZSxOVUxMKTsKLQlpZiAoY2FsbGlkX25hbWUpIG1ha2VzdHIoJmNhbGxpZF9uYW1lLE5VTEwpOwot CWlmIChjYWxsaWRfbm1icikgbWFrZXN0cigmY2FsbGlkX25tYnIsTlVMTCk7Ci0JaWYgKGNhbGxp ZF9tZXNnKSBtYWtlc3RyKCZjYWxsaWRfbWVzZyxOVUxMKTsKLSAgICB9Ci0KLSNpZmRlZiBDS19U QVBJX1gKLSAgICBpZiAodHR0YXBpICYmIHRhcGlwYXNzKSB7Ci0JaWYgKG1vZGVtcFtuX1RBUEld ID0gY2t0YXBpR2V0TW9kZW1JbmYoKSkgewotCSAgICBteW1kbXR5cCA9IG5fVEFQSTsKLQl9IGVs c2UgewotCSAgICBteW1kbXR5cCA9IG1kbXR5cDsKLQkgICAgbW9kZW1wW25fVEFQSV0gPSAmR0VO RVJJQzsKLQl9Ci0gICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfVEFQSSAqLwotICAgIG15bWRtdHlw ID0gbWRtdHlwOwotICAgIGlmIChteW1kbXR5cCA8IDApIHsJCQkvKiBXaG9hLCBuZXR3b3JrIGRp YWxpbmcuLi4gKi8KLQlpZiAobWRtc2F2ID4gLTEpCi0JICBteW1kbXR5cCA9IG1kbXNhdjsKLSAg ICB9Ci0gICAgaWYgKG15bWRtdHlwIDwgMCkgewotCXByaW50ZigiSW52YWxpZCBtb2RlbSB0eXBl ICVkIC0gaW50ZXJuYWwgZXJyb3IuXG4iLG15bWRtdHlwKTsKLQlkaWFsc3RhID0gRElBX05PTU87 Ci0JcmV0dXJuKDApOwotICAgIH0KLSAgICBkaWFsX3doYXQgPSBEV19OT1RISU5HOwkJLyogRG9p bmcgbm90aGluZyBhdCBmaXJzdC4gKi8KLSAgICBub252ZXJiYWwgPSAwOwotCi0vKiBUaGVzZSBh cmUgT05MWSBmb3IgdGhlIHB1cnBvc2Ugb2YgaW50ZXJwcmV0aW5nIG51bWVyaWMgcmVzdWx0IGNv ZGVzLiAqLwotCi0gICAgaXNfbW90b3JvbGEgPQotI2lmZGVmIE1JTklESUFMCi0gICAgICAwCi0j ZWxzZQotICAgICAgbXltZG10eXAgPT0gbl9TVVBSQSB8fCBteW1kbXR5cCA9PSBuX1NVUFJBU09O OwotI2VuZGlmIC8qIE1JTklESUFMICovCi0JOwotCi0gICAgaXNfbW90b3JvbGEgPQotI2lmZGVm IE1JTklESUFMCi0gICAgICAwCi0jZWxzZQotICAgICAgbXltZG10eXAgPT0gbl9NT1RPUk9MQSB8 fCBteW1kbXR5cCA9PSBuX01PTlRBTkE7Ci0jZW5kaWYgLyogTUlOSURJQUwgKi8KLQk7Ci0KLSAg ICBpc19yb2Nrd2VsbCA9Ci0jaWZkZWYgTUlOSURJQUwKLSAgICAgIDAKLSNlbHNlCi0gICAgICBt eW1kbXR5cCA9PSBuX1JXVjMyIHx8IG15bWRtdHlwID09IG5fUldWMzJCIHx8Ci0JbXltZG10eXAg PT0gbl9SV1YzNCB8fCBteW1kbXR5cCA9PSBuX1JXVjkwIHx8Ci0JICBteW1kbXR5cCA9PSBuX0JP Q0EgfHwgbXltZG10eXAgPT0gbl9URUxFUEFUSCB8fAotCSAgICBteW1kbXR5cCA9PSBuX0NBUkRJ TkFMIHx8IG15bWRtdHlwID09IG5fQkVTVERBVEEgfHwKLQkgICAgICBteW1kbXR5cCA9PSBuX0NP TkVYQU5UIHx8IG15bWRtdHlwID09IG5fUENURUwKLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotCTsK LQotICAgIGlzX2hheWVzaGlzcGQgPQotI2lmZGVmIE1JTklESUFMCi0gICAgICAwCi0jZWxzZQot ICAgICAgbXltZG10eXAgPT0gbl9IX1VMVFJBIHx8IG15bWRtdHlwID09IG5fSF9BQ0NVUkEgfHwg bl9QUEkKLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotCTsKLQotICAgIGlzX3N1cHJhID0KLSNpZmRl ZiBNSU5JRElBTAotICAgICAgMAotI2Vsc2UKLSAgICAgIG15bWRtdHlwID09IG5fU1VQUkEgfHwg bXltZG10eXAgPT0gbl9TVVBSQVggfHwgbl9TVVBSQVNPTgotI2VuZGlmIC8qIE1JTklESUFMICov Ci0JOwotCi0gICAgbXAgPSBtb2RlbXBbbXltZG10eXBdOwkJLyogU2V0IHBvaW50ZXIgdG8gbW9k ZW0gaW5mbyAqLwotICAgIGlmICghbXApIHsKLQlwcmludGYoIlNvcnJ5LCBoYW5kbGVyIGZvciB0 aGlzIG1vZGVtIHR5cGUgbm90IHlldCBmaWxsZWQgaW4uXG4iKTsKLQlkaWFsc3RhID0gRElBX05P TU87Ci0JcmV0dXJuIDA7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImRpYWwgbnVtYmVyIix0ZWxu YnIsMCk7Ci0jaWZkZWYgQ09NTUVOVAotICAgIGRlYnVnKEYxMTAsImRpYWwgcHJlZml4IiwoZGlh bG5wciA/IGRpYWxucHIgOiAiIiksIDApOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVm IERZTkFNSUMKLSAgICAqbGJ1ZiA9IE5VTDsKLSAgICBkZWJ1ZyhGMTAxLCJESUFMIGxidWYgbWFs bG9jIG9rIiwiIixMQlVGTCsxKTsKLQotICAgIGlmICghcmJ1ZikgeyAgICAvKiBUaGlzIG9uZSBt aWdodCBhbHJlYWR5IGhhdmUgYmVlbiBhbGxvY2F0ZWQgYnkgZ2V0b2soKSAqLwotCWlmICghKHJi dWYgPSBtYWxsb2MoUkJVRkwrMSkpKSB7ICAgIC8qIEFsbG9jYXRlIGlucHV0IGxpbmUgYnVmZmVy ICovCi0JICAgIHByaW50ZigiJXMiLCBtbXNnKTsKLQkgICAgZGlhbHN0YSA9IERJQV9JRTsKLQkg ICAgcmV0dXJuIDA7Ci0JfSBlbHNlCi0JICBkZWJ1ZyhGMTAxLCJESUFMIHJidWYgbWFsbG9jIG9r IiwiIixSQlVGTCsxKTsKLSAgICB9Ci0gICAgaWYgKCEoZmJ1ZiA9IG1hbGxvYyhGVUxMTlVNTCsx KSkpIHsgICAgLyogQWxsb2NhdGUgaW5wdXQgbGluZSBidWZmZXIgKi8KLQlwcmludGYoIiVzIiwg bW1zZyk7Ci0JZGlhbHN0YSA9IERJQV9JRTsKLQlpZiAocmJ1ZikgZnJlZShyYnVmKTsgcmJ1ZiA9 IE5VTEw7Ci0JcmV0dXJuIDA7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsIkRJQUwgZmJ1ZiBtYWxs b2Mgb2siLCIiLEZVTExOVU1MKzEpOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQotICAgIC8qIE5P VEU6IG1kbXR5cCwgbm90IG15bWRtdHlwICovCi0KLSAgICBpZiAodHRvcGVuKHR0bmFtZSwmbG9j YWwsbWRtdHlwLDApIDwgMCkgeyAvKiBPcGVuLCBubyBjYXJyaWVyIHdhaXQgKi8KLQllcnAgPSBl cnJtc2c7Ci0JaWYgKChpbnQpc3RybGVuKHR0bmFtZSkgPCAoRVJNU0dMIC0gMTgpKSAvKiBzYWZl LCBjaGVja2VkICovCi0JICBzcHJpbnRmKGVycCwiU29ycnksIGNhbid0IG9wZW4gJXMiLHR0bmFt ZSk7Ci0JZWxzZQotCSAgc3ByaW50ZihlcnAsIlNvcnJ5LCBjYW4ndCBvcGVuIGRldmljZSIpOwot CXBlcnJvcihlcnJtc2cpOwotCWRpYWxzdGEgPSBESUFfT1BFTjsKLSNpZmRlZiBEWU5BTUlDCi0J aWYgKHJidWYpIGZyZWUocmJ1Zik7IHJidWYgPSBOVUxMOwotCWlmIChmYnVmKSBmcmVlKGZidWYp OyBmYnVmID0gTlVMTDsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0JcmV0dXJuIDA7Ci0gICAgfQot Ci0jaWZkZWYgQ0tfVEFQSQotICAgIGlmICghdHR0YXBpKSB7Ci0jZW5kaWYgLyogQ0tfVEFQSSAq LwotCi0vKiBDb25kaXRpb24gY29uc29sZSB0ZXJtaW5hbCBhbmQgY29tbXVuaWNhdGlvbiBsaW5l ICovCi0KLSAgICAvKiBQbGFjZSBsaW5lIGludG8gImNsb2NhbCIgZGlhbGluZyBzdGF0ZSwgKi8K LSAgICAvKiBpbXBvcnRhbnQgbWFpbmx5IGZvciBTeXN0ZW0gViBVTklYLiAgICAgKi8KLQotICAg IGlmICh0dHBrdChzcGVlZCxGTE9fRElBTCxwYXJpdHkpIDwgMCkgewotCXR0Y2xvcygwKTsJCQkv KiBJZiB0dHBrdCBmYWlscyBkbyBhbGwgdGhpcy4uLiAqLwotCWlmICh0dG9wZW4odHRuYW1lLCZs b2NhbCxteW1kbXR5cCwwKSA8IDApIHsKLQkgICAgZXJwID0gZXJybXNnOwotCSAgICBpZiAoKGlu dClzdHJsZW4odHRuYW1lKSA8IChFUk1TR0wgLSAxOCkpIC8qIHNhZmUsIGNoZWNrZWQgKi8KLQkg ICAgICBzcHJpbnRmKGVycCwiU29ycnksIGNhbid0IHJlb3BlbiAlcyIsdHRuYW1lKTsKLQkgICAg ZWxzZQotCSAgICAgIHNwcmludGYoZXJwLCJTb3JyeSwgY2FuJ3QgcmVvcGVuIGRldmljZSIpOwot CSAgICBwZXJyb3IoZXJybXNnKTsKLQkgICAgZGlhbHN0YSA9IERJQV9PUEVOOwotI2lmZGVmIERZ TkFNSUMKLQkgICAgaWYgKHJidWYpIGZyZWUocmJ1Zik7IHJidWYgPSBOVUxMOwotCSAgICBpZiAo ZmJ1ZikgZnJlZShmYnVmKTsgZmJ1ZiA9IE5VTEw7Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotCSAg ICByZXR1cm4gMDsKLQl9CQkJCS8qIEFuZCB0cnkgYWdhaW4uICovCi0JaWYgKCh0dHBrdChzcGVl ZCxGTE9fRElBTCxwYXJpdHkpIDwgMCkKLSNpZmRlZiBVTklYCi0JJiYgKHN0cmNtcCh0dG5hbWUs Ii9kZXYvbnVsbCIpKQotI2Vsc2UKLSNpZmRlZiBPU0sKLQkmJiAoc3RyY21wKHR0bmFtZSwiL25p bCIpKQotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNpZmRlZiBDS19UQVBJ Ci0JICAgICAmJiAhdHR0YXBpCi0jZW5kaWYgLyogQ0tfVEFQSSAqLwotCSAgICApIHsKLQkgICAg cHJpbnRmKCJTb3JyeSwgQ2FuJ3QgY29uZGl0aW9uIGNvbW11bmljYXRpb24gbGluZVxuIik7Ci0J ICAgIHByaW50ZigiVHJ5ICdzZXQgbGluZSAlcycgYWdhaW5cbiIsdHRuYW1lKTsKLQkgICAgZGlh bHN0YSA9IERJQV9PUEVOOwotI2lmZGVmIERZTkFNSUMKLQkgICAgaWYgKHJidWYpIGZyZWUocmJ1 Zik7IHJidWYgPSBOVUxMOwotCSAgICBpZiAoZmJ1ZikgZnJlZShmYnVmKTsgZmJ1ZiA9IE5VTEw7 Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotCSAgICByZXR1cm4gMDsKLQl9Ci0gICAgfQotI2lmZGVm IENLX1RBUEkKLSAgICB9Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotCi0gICAgLyogTW9kZW0ncyBl c2NhcGUgc2VxdWVuY2UuLi4gKi8KLQotICAgIGlmIChkaWFsZXNjIDwgMCB8fCBkaWFsZXNjID4g MTI3KQotICAgICAgYyA9IE5VTDsKLSAgICBlbHNlCi0gICAgICBjID0gKGNoYXIpIChkaWFsZXNj ID8gZGlhbGVzYyA6IG1wLT5lc2NfY2hhcik7Ci0gICAgbWRtY2FwYXMgPSBkaWFsY2FwYXMgPyBk aWFsY2FwYXMgOiBtcC0+Y2FwYXM7Ci0KLSAgICB4eF9vayA9IG1wLT5va19mbjsJCQkvKiBQb2lu dGVyIHRvIHJlc3BvbnNlIHJlYWRlciAqLwotCi0gICAgaWYgKG1kbWNhcGFzICYgQ0tEX0FUKSB7 CQkvKiBIYXllcyBjb21wYXRpYmxlICovCi0JZXNjYnVmWzBdID0gYzsKLQllc2NidWZbMV0gPSBj OwotCWVzY2J1ZlsyXSA9IGM7Ci0JZXNjYnVmWzNdID0gTlVMOwotCS8qIEluIGNhc2UgdGhpcyBt b2RlbSB0eXBlIGlzIHVzZXItZGVmaW5lZCAqLwotCWlmICgheHhfb2spIHh4X29rID0gZ2V0b2s7 Ci0gICAgfSBlbHNlIHsJCQkJLyogT3RoZXIgKi8KLQllc2NidWZbMF0gPSBjOwotCWVzY2J1Zlsx XSA9IE5VTDsKLQkvKiBJbiBjYXNlIHVzZXItZGVmaW5lZCAqLwotCWlmIChtZG1jYXBhcyAmIENL RF9WMjUpIGlmICgheHhfb2spIHh4X29rID0gZ2V0b2s7Ci0gICAgfQotCi0gICAgLyogUGFydGlh bCBkaWFsaW5nICovCi0KLSAgICBpZiAobWRtY2FwYXMgJiBDS0RfQVQKLSNpZm5kZWYgTUlOSURJ QUwKLQl8fCBteW1kbXR5cCA9PSBuX01JQ1JPQ09NCi0jZW5kaWYgLyogTUlOSURJQUwgKi8KLQkp IHsKLQlpbnQgeDsKLQl4ID0gKGludCkgc3RybGVuKHRlbG5icik7Ci0JaWYgKHggPiAwKSB7Ci0J ICAgIGlmICh0ZWxuYnJbeC0xXSA9PSAnOycpIHsKLQkJcGFydGlhbCA9IDE7Ci0JCWRlYnVnKEYx MTAsImNrZGlhbCBzZXRzIHBhcnRpYWw9MToiLHRlbG5iciwwKTsKLQkgICAgfSBlbHNlIGlmIChw YXJ0aWFsKSB7Ci0JCWNrbWFrbXNnKGZidWYsRlVMTE5VTUwsdGVsbmJyLCI7IixOVUxMLE5VTEwp OyAvKiBhZGQgb25lICovCi0JCXRlbG5iciA9IGZidWY7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAg IG1zbGVlcCg1MDApOwotCi0gICAgZGVidWcoRjEwMSwiY2tkaWFsIGRpYWx0bW8iLCIiLGRpYWx0 bW8pOyAvKiBUaW1lb3V0ICovCi0KLSAgICBpZiAoZmMgPT0gMSkgewkJCS8qIEFOU1dFUiAqLwot CXdhaXRjdCA9IChkaWFsYXRtbyA+IC0xKSA/IGRpYWxhdG1vIDogMDsKLSAgICB9IGVsc2UgewkJ CQkvKiBESUFMICovCi0JaWYgKGRpYWx0bW8gPCAxKSB7CQkvKiBBdXRvbWF0aWMgY29tcHV0YXRp b24uICovCi0jaWZkZWYgQ0tfVEFQSQotCSAgICBpZiAodHR0YXBpICYmICF0YXBpcGFzcykgewot CQl3YWl0Y3QgPSAxICogKGludClzdHJsZW4odGVsbmJyKSA7IC8qIFdvcnN0IGNhc2UgZGlhbCB0 aW1lICovCi0JCXdhaXRjdCArPSA2MDsJCS8qIGRpYWx0b25lICsgY29tcGxldGlvbiB3YWl0IHRp bWVzICovCi0JCWZvciAocyA9IHRlbG5icjsgKnM7IHMrKykgeyAvKiBhZGQgaW4gcGF1c2UgY2hh cmFjdGVycyB0aW1lICovCi0JCSAgICBpZiAoKnMgPT0gJywnKSB7Ci0JCQl3YWl0Y3QgKz0gMjsg LyogdW5sZXNzIGl0IHdhcyBjaGFuZ2VkIGluIHRoZSBtb2RlbSAqLwotCQkgICAgfSBlbHNlIGlm ICgqcyA9PSAnVycgfHwKLQkJCSAgICAgICAqcyA9PSAndycgfHwKLQkJCSAgICAgICAqcyA9PSAn JCcgfHwKLQkJCSAgICAgICAqcyA9PSAnQCcKLQkJCSAgICAgICApIHsKLQkJCXdhaXRjdCArPSA4 OwotCQkgICAgfQotCQl9Ci0JICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotCQl3 YWl0Y3QgPSAxICogKGludClzdHJsZW4odGVsbmJyKSA7Ci0JCS8qIGRpYWx0b25lICsgY29tcGxl dGlvbiB3YWl0IHRpbWVzICovCi0JCXdhaXRjdCArPSBtcC0+ZGlhbF90aW1lOwotCQlmb3IgKHMg PSB0ZWxuYnI7ICpzOyBzKyspIHsKLQkJICAgIGZvciAocCA9IG1wLT5wYXVzZV9jaGFyczsgKnA7 IHArKykKLQkJICAgICAgaWYgKCpzID09ICpwKSB7Ci0JCQkgIHdhaXRjdCArPSBtcC0+cGF1c2Vf dGltZTsKLQkJCSAgYnJlYWs7Ci0JCSAgICAgIH0KLQkJfQotI2lmZGVmIENLX1RBUEkKLQkgICAg fQotI2VuZGlmIC8qIENLX1RBUEkgKi8KLQl9IGVsc2UgewotCSAgICB3YWl0Y3QgPSBkaWFsdG1v OwkJLyogVXNlci1zcGVjaWZpZWQgdGltZW91dCAqLwotCX0KLQlkZWJ1ZyhGMTAxLCJja2RpYWwg d2FpdGN0IEEiLCIiLHdhaXRjdCk7Ci0gICAgfQotCi0vKgotICB3YWl0Y3QgaXMgb3VyIGFsYXJt KCkgdGltZXIuCi0gIG1kbXdhaXQgaXMgaG93IGxvbmcgd2UgdGVsbCB0aGUgbW9kZW0gdG8gd2Fp dCBmb3IgY2Fycmllci4KLSAgV2Ugc2V0IG1kbXdhaXQgdG8gYmUgNSBzZWNvbmRzIGxlc3MgdGhh biB3YWl0Y3QsIHRvIGluY3JlYXNlIHRoZQotICBjaGFuY2UgdGhhdCB3ZSBnZXQgYSByZXNwb25z ZSBmcm9tIHRoZSBtb2RlbSBiZWZvcmUgdGltaW5nIG91dC4KLSovCi0gICAgaWYgKHdhaXRjdCA8 PSAwKSB7CQkJLyogMCBvciBuZWdhdGl2ZSBtZWFucyB3YWl0IGZvcmV2ZXIgICovCi0jaWZkZWYg Q09NTUVOVAotCXdhaXRjdCA9IDI1NDsJCQkvKiBUaGVzZSB3ZXJlIGJhY2t3YXJkcyBpbiA3LjAu MTk2ICovCi0JbWRtd2FpdCA9IDA7Ci0jZWxzZQotCXdhaXRjdCA9IDA7CQkJLyogRml4ZWQgaW4g Ny4wLjE5OC4gKi8KLQltZG13YWl0ID0gMjU0OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9 IGVsc2UgewotCWlmIChkaWFsdG1vIDwgMSkgewkJLyogQXV0b21hdGljIGNvbXB1dGF0aW9uLiAq LwotI2lmZGVmIFhXQUlUQ1QKLQkgICAgLyogQWRkdGwgd2FpdCBzbG9wIGNhbiBiZSBkZWZpbmVk IGF0IGNvbXBpbGUgdGltZSAqLwotCSAgICB3YWl0Y3QgKz0gWFdBSVRDVDsKLSNlbmRpZiAvKiBY V0FJVENUICovCi0JICAgIGlmICh3YWl0Y3QgPCA2MCArIG1kbXdhaXRkKQotCSAgICAgIHdhaXRj dCA9IDYwICsgbWRtd2FpdGQ7Ci0JfQotCWlmIChtZG1jYXBhcyAmIENLRF9BVCkgewkvKiBBVCBj b21tYW5kLXNldCBtb2RlbXMgKi8KLQkgICAgbWRtd2FpdCA9IHdhaXRjdDsJCS8qIFM3IHRpbWVv dXQgPSB3aGF0IHVzZXIgYXNrZWQgZm9yICovCi0JICAgIHdhaXRjdCArPSBtZG13YWl0ZDsJCS8q IEtlcm1pdCB0aW1lb3V0IGEgYml0IGxhdGVyICovCi0JfSBlbHNlIHsJCQkvKiBOb24tQVQgKi8K LQkgICAgbWRtd2FpdCA9IHdhaXRjdDsJCS8qIG5vIGRpZmZlcmVuY2UgKi8KLQl9Ci0gICAgfQot ICAgIGRlYnVnKEYxMDEsImNrZGlhbCB3YWl0Y3QgQiIsIiIsd2FpdGN0KTsKLSAgICBpZiAoZmMg PT0gMSkgewkJCS8qIEFOU1dFUiAqLwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFRoaXMgaXMgd3Jv bmcuICBtZG13YWl0IGlzIHRoZSB2YWx1ZSBnaXZlbiB0byBTNyBpbiBIYXllc2xpa2UgbW9kZW1z LgotICBXaGVuIGluIGF1dG9hbnN3ZXIgbW9kZSwgdGhpcyBpcyB0aGUgYW1vdW50IG9mIHRpbWUg dGhlIG1vZGVtIHdhaXRzIGZvcgotICBjYXJyaWVyIG9uY2UgcmluZ2luZyBzdGFydHMuICBXaGVy ZWFzIHdhaXRjdCBpcyB0aGUgdGltZW91dCBnaXZlbiB0byB0aGUKLSAgQU5TV0VSIGNvbW1hbmQs IHdoaWNoIGlzIGFuIGVudGlyZWx5IGRpZmZlcmVudCB0aGluZy4gIFNpbmNlIHRoZSBkZWZhdWx0 Ci0gIEFOU1dFUiB0aW1lb3V0IGlzIDAgKG1lYW5pbmcgIndhaXQgZm9yZXZlciIpLCB0aGUgZm9s bG93aW5nIHN0YXRlbWVudCBzZXRzCi0gIFM3IHRvIDAsIHdoaWNoLCBvbiBzb21lIG1vZGVtcyAo bGlrZSB0aGUgVVNSIFNwb3J0c3RlcikgbWFrZXMgaXQgaGFuZyB1cAotICBhbmQgcmVwb3J0IE5P IENBUlJJRVIgdGhlIGluc3RhbnQgdGhlIHBob25lIHJpbmdzLgotKi8KLQltZG13YWl0ID0gd2Fp dGN0OwotI2Vsc2UKLQlpZiAobWRtd2FpdCA8PSAwKQotCSAgbWRtd2FpdCA9IDYwOwkJCS8qIEFs d2F5cyB3YWl0IDYwIHNlY29uZHMuICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgfQot ICAgIGlmICghcXVpZXQgJiYgIWJhY2tncmQpIHsJCS8qIFByaW50IGluZm9ybWF0aW9uIG1lc3Nh Z2VzLiAqLwotI2lmZGVmIFZNUwotCXByaW50ZigiIFxuIik7Ci0JZmZsdXNoKHN0ZG91dCk7Ci0j ZW5kaWYgLyogVk1TICovCi0JaWYgKGZjID09IDEpCi0JICBwcmludGYoIiBXYWl0aW5nIGZvciBw aG9uZSBjYWxsLi4uXG4iKTsKLQllbHNlCi0JICBwcmludGYoIiAlc3J5aW5nOiAlcy4uLlxuIiwg eDEgPiAwID8gIlJldCIgOiAiVCIsIHRlbG5icik7Ci0JaWYgKHgxID09IDAgJiYgeDIgPT0gMCAm JiBkaWFsc3RhICE9IERJQV9QQVJUKSB7Ci0JICAgIGlmIChuZXR3b3JrKSB7Ci0JCXByaW50Zigi IFZpYSBtb2RlbSBzZXJ2ZXI6ICVzLCBtb2RlbTogJXNcbiIsCi0JCSAgICAgICB0dG5hbWUsIGdt ZG10eXAoKSApOwotCSAgICB9IGVsc2UgewotI2lmZGVmIENLX1RBUEkKLQkJaWYgKHR0dGFwaSAm JiAhdGFwaXBhc3MpCi0JCSAgcHJpbnRmKCIgRGV2aWNlOiAlcywgbW9kZW06ICVzIiwgdHRuYW1l LCAiVEFQSSIgKTsKLQkJZWxzZQotI2VuZGlmIC8qIENLX1RBUEkgKi8KLQkJcHJpbnRmKCIgRGV2 aWNlOiAlcywgbW9kZW06ICVzIiwKLQkJICAgICAgIHR0bmFtZSwgZ21kbXR5cCgpICk7Ci0JCWlm IChzcGVlZCA+IC0xTCkKLQkJICBwcmludGYoIiwgc3BlZWQ6ICVsZFxuIiwgc3BlZWQpOwotCQll bHNlCi0JCSAgcHJpbnRmKCIsIHNwZWVkOiAodW5rbm93bilcbiIpOwotCSAgICB9Ci0JICAgIHNw ZG1heCA9IGRpYWxtYXggPiAwTCA/IGRpYWxtYXggOiBtcC0+bWF4X3NwZWVkOwotCi0jaWZuZGVm IE5PSElOVFMKLQkgICAgaWYgKGhpbnRzICYmICFxdWlldCAmJgotCQkhbmV0d29yayAmJiBzcGRt YXggPiAwTCAmJiBzcGVlZCA+IHNwZG1heAotI2lmZGVmIENLX1RBUEkKLQkJJiYgKCF0dHRhcGkg fHwgdGFwaXBhc3MpCi0jZW5kaWYgLyogQ0tfVEFQSSAqLwotCQkpIHsKLQkJcHJpbnRmKCJcbioq KioqKioqKioqKioqKioqKioqKioqKipcbiIpOwotCQlwcmludGYoCi0gICAgIkludGVyZmFjZSBz cGVlZCAlbGQgbWlnaHQgYmUgdG9vIGhpZ2ggZm9yIHRoaXMgbW9kZW0gdHlwZS5cbiIsCi0JCSAg ICAgICBzcGVlZAotCQkgICAgICAgKTsKLQkJcHJpbnRmKAotICAgICJJZiBkaWFsaW5nIGZhaWxz LCBTRVQgU1BFRUQgdG8gJWxkIG9yIGxlc3MgYW5kIHRyeSBhZ2Fpbi5cbiIsCi0JCSAgICAgICBz cGRtYXgKLQkJICAgICAgICk7Ci0JCXByaW50ZigiKFVzZSBTRVQgSElOVFMgT0ZGIHRvIHN1cHBy ZXNzIGZ1dHVyZSBoaW50cy4pXG4iKTsKLQkJcHJpbnRmKCIqKioqKioqKioqKioqKioqKioqKioq KioqXG4iKTsKLQkJcHJpbnRmKCJcbiIpOwotCSAgICB9Ci0jZW5kaWYgLyogTk9ISU5UUyAqLwot CSAgICBwcmludGYoIiAlcyB0aW1lb3V0OiAiLCBmYyA9PSAwID8gIkRpYWwiIDogIkFuc3dlciIp OwotCSAgICBpZiAod2FpdGN0ID4gMCkKLQkgICAgICBwcmludGYoIiVkIHNlY29uZHNcbiIsbWRt d2FpdCk7Ci0JICAgIGVsc2UKLQkgICAgICBwcmludGYoIiAobm9uZSlcbiIpOwotCSAgICBwcmlu dGYoCi0jaWZkZWYgTUFDCi0JICAgICAgICIgVHlwZSBDb21tYW5kLS4gdG8gY2FuY2VsLlxuIgot I2Vsc2UKLSNpZmRlZiBVTklYCi0JICAgICAgICIgVG8gY2FuY2VsOiB0eXBlIHlvdXIgaW50ZXJy dXB0IGNoYXJhY3RlciAobm9ybWFsbHkgQ3RybC1DKS5cbiIKLSNlbHNlCi0JICAgICAgICIgVG8g Y2FuY2VsOiB0eXBlIEN0cmwtQyAoaG9sZCBkb3duIEN0cmwsIHByZXNzIEMpLlxuIgotI2VuZGlm IC8qIFVOSVggKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQkgICAgICAgKTsKLSAgICAgICAgfQotICAg IH0KLSAgICBkZWJ1ZyhGMTExLCJja2RpYWwiLHR0bmFtZSwoaW50KSAoc3BlZWQgLyAxMEwpKTsK LSAgICBkZWJ1ZyhGMTAxLCJja2RpYWwgdGltZW91dCIsIiIsd2FpdGN0KTsKLSNpZmRlZiBPUzIK LSAgICB0ZXJtX2lvID0gMDsKLSNlbmRpZiAvKiBPUzIgKi8KLQotLyogU2V0IHRpbWVyIGFuZCBp bnRlcnJ1cHQgaGFuZGxlcnMuICovCi0gICAgc2F2aW50ID0gc2lnbmFsKCBTSUdJTlQsIGRpYWxp bnQgKSA7IC8qIEFuZCB0ZXJtaW5hbCBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KLSAgICBjY19hbHJt X2V4ZWN1dGUoY2tqYWRkcihzamJ1ZiksIDAsIGRpYWx0aW1lLCBfZG9kaWFsLCBmYWlsZGlhbCk7 Ci0KLSAgICBzaWduYWwoU0lHSU5ULCBzYXZpbnQpOwotI2lmZGVmIE9TMgotICAgIGlmIChkaWFs c3RhID09IERJQV9PSykJCS8qIERpYWxpbmcgaXMgY29tcGxldGVkICovCi0gICAgICBEaWFsZXJT ZW5kKE9QVF9LRVJNSVRfQ09OTkVDVCwgMCk7Ci0gICAgdGVybV9pbyA9IHRlcm1faW9fc2F2Owot I2VuZGlmIC8qIE9TMiAqLwotICAgIGlmIChkaWFsc3RhID09IERJQV9QQVJUIHx8IGRpYWxzdGEg PT0gRElBX09LKSB7Ci0JLyogVGhpcyBpcyBuZWVkZWQsIGUuZy4sIGZvciBUZWxuZXQgbW9kZW0g c2VydmVycyAqLwotCWlmIChyZWxpYWJsZSAhPSBTRVRfT0ZGIHx8ICFzZXRyZWxpYWJsZSkgewot CSAgICByZWxpYWJsZSA9IFNFVF9PRkY7CQkvKiBUcmFuc3BvcnQgaXMgbm90IHJlbGlhYmxlICov Ci0JICAgIGRlYnVnKEYxMDEsImNrZGlhbCByZWxpYWJsZSIsIiIscmVsaWFibGUpOwotCX0KLQly ZXR1cm4oMSk7CQkJLyogRGlhbCBhdHRlbXB0IHN1Y2NlZWRlZCAqLwotICAgIH0gZWxzZSB7Ci0J cmV0dXJuKDApOwkJCS8qIERpYWwgYXR0ZW1wdCBmYWlsZWQgKi8KLSAgICB9Ci19IC8qIGNrZGlh bCAqLwotCi0vKgotICBnZXRvaygpIC0gd2FpdCB1cCB0byBuIHNlY29uZHMgZm9yIE9LICgwKSBv ciBFUlJPUiAoNCkgcmVzcG9uc2UgZnJvbSBtb2RlbS4KLSAgVXNlIHdpdGggSGF5ZXNsaWtlIG9y IENDSVRUIG1vZGVtcyBmb3IgcmVhZGluZyB0aGUgcmVwbHkgdG8gYSBub25kaWFsaW5nCi0gIGNv bW1hbmQuCi0KLSAgU2Vjb25kIGFyZ3VtZW50IHNheXMgd2hldGhlciB0byBiZSBzdHJpY3QgYWJv dXQgbnVtZXJpYyByZXN1bHQgY29kZXMsIGkuZS4KLSAgdG8gcmVxdWlyZSB0aGV5IGJlIHByZWNl ZGVkIGJ5IENSIG9yIGVsc2UgYmUgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUKLSAgcmVzcG9u c2UsIGUuZy4gdG8gcHJldmVudCB0aGUgQVRIMDxDUj4gZWNobyBmcm9tIGxvb2tpbmcgbGlrZSBh IHZhbGlkCi0gIHJlc3BvbnNlLiAgU3RyaWN0ID09IDAgaXMgbmVlZGVkIGZvciBBVEkgb24gVGVs ZWJpdCwgd2hpY2ggY2FuIHJldHVybiB0aGUKLSAgbW9kZWwgbnVtYmVyIGNvbmNhdGVuYXRlZCB3 aXRoIHRoZSBudW1lcmljIHJlc3BvbnNlIGNvZGUsIGUuZy4gIjk2MjAiCi0gICgiOTYyIiBpcyB0 aGUgbW9kZWwgbnVtYmVyLCAiMCIgaXMgdGhlIHJlc3BvbnNlIGNvZGUpLiAgZ2V0b2soKSBSZXR1 cm5zOgotCi0gICAwIGlmIGl0IHRpbWVkIG91dCwKLSAgIDEgaWYgaXQgc3VjY2VlZGVkLAotICAt MSBvbiBtb2RlbSBjb21tYW5kLCBpL28sIG9yIG90aGVyIGVycm9yLgotKi8KLXN0YXRpYyBja2pt cGJ1ZiBva2J1ZjsKLQotc3RhdGljIFNJR1RZUAotI2lmZGVmIENLX0FOU0lDCi1va3RpbW8oaW50 IGZvbykJCQkJLyogQWxhcm0gaGFuZGxlciBmb3IgZ2V0b2soKS4gKi8KLSNlbHNlCi1va3RpbW8o Zm9vKSBpbnQgZm9vOwkJCS8qIEFsYXJtIGhhbmRsZXIgZm9yIGdldG9rKCkuICovCi0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLS8qIG9rdGltbyAqLyB7Ci0KLSNpZmRlZiBPUzIKLSAgICBhbGFybSgw KTsKLSAgICAvKiBzaWduYWwoU0lHQUxSTSxTSUdfSUdOKTsgKi8KLSAgICBkZWJ1ZyhGMTAwLCJv a3RpbW8oKSBTSUdBTFJNIGNhdWdodCAtLSBTSUdfSUdOIHNldCIsIiIsMCkgOwotI2VuZGlmIC8q IE9TMiAqLwotCi0jaWZkZWYgT1NLCQkJCS8qIE9TLTksIHNlZSBjb21tZW50IGluIGRpYWx0aW1l KCkuICovCi0gICAgc2lnbWFzaygtMSk7Ci0jZW5kaWYgLyogT1NLICovCi0jaWZkZWYgTlRTSUcK LSAgICBpZiAoIGZvbyA9PSBTSUdBTFJNICkKLSAgICAgIFBvc3RBbGFybVNpZ1NlbSgpOwotICAg IGVsc2UKLSAgICAgIFBvc3RDdHJsQ1NlbSgpOwotI2Vsc2UgLyogTlRTSUcgKi8KLSNpZmRlZiBO VAotICAgIGNrbG9uZ2ptcChja2phZGRyKG9rYnVmKSwxKTsKLSNlbHNlIC8qIE5UICovCi0gICAg Y2tsb25nam1wKG9rYnVmLDEpOwotI2VuZGlmIC8qIE5UU0lHICovCi0jZW5kaWYgLyogTlQgKi8K LSAgICAvKiBOT1RSRUFDSEVEICovCi0gICAgU0lHUkVUVVJOOwotfQotCi1zdGF0aWMgaW50IG9r c3RhdHVzLCBva24sIG9rc3RyaWN0OwotCi1zdGF0aWMgU0lHVFlQCi0jaWZkZWYgQ0tfQU5TSUMK LWRvb2sodm9pZCAqIHRocmVhZGluZm8pCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotZG9vayh0aHJl YWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbyA7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRv b2sgKi8gewotICAgIENIQVIgYzsKLSNpZmRlZiBERUJVRwotICAgIGNoYXIgKiBtZG1tc2cgPSAi IjsKLSNlbmRpZiAvKiBERUJVRyAqLwotCi0gICAgaW50IGksIHg7Ci0jaWZkZWYgSUtTRAotICAg IGV4dGVybiBpbnQgaW5zZXJ2ZXI7Ci0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIE5UU0lHCi0g ICAgc2lnbmFsKFNJR0lOVCxva3RpbW8pOwotICAgIGlmICh0aHJlYWRpbmZvKSB7CQkJLyogVGhy ZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KLQlUbHNTZXRWYWx1ZShUbHNJbmRleCx0aHJlYWRpbmZv KTsKLSAgICB9Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSNpZmRlZiBDS19MT0dJTgotI2lmZGVmIE5U Ci0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikKLSAgICAgIHNldG50Y3JlZHMoKTsKLSNl bmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwot Ci0gICAgaWYgKG1kbWNhcGFzICYgQ0tEX1YyNSkgewkJLyogQ0NJVFQsIGVhc3kuLi4gKi8KLSAg ICAgICAgd2FpdGZvcigiVkFMIik7Ci0gICAgICAgIG9rc3RhdHVzID0gMTsKLQlkZWJ1ZyhGMTEx LCJNb2RlbV9SZXNwb25zZShWMjUpIiwiVkFMIixva3N0YXR1cyk7Ci0jaWZkZWYgTlRTSUcKLQlj a1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotCVNJR1JFVFVSTjsK LSNpZm5kZWYgTUlOSURJQUwKLSAgICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5fTUlDUk9DT00p IHsgLyogTWljcm9jb20gaW4gU1ggbW9kZSwgYWxzbyBlYXN5ICovCi0gICAgICAgIHdhaXRmb3Io TUlDUk9DT00ud2FrZV9wcm9tcHQpOwkvKiAoSSB0aGluay4uLikgKi8KLQlkZWJ1ZyhGMTExLCJN b2RlbV9SZXNwb25zZShNaWNyb2NvbSkiLE1JQ1JPQ09NLndha2VfcHJvbXB0LG9rc3RhdHVzKTsK LSAgICAgICAgb2tzdGF0dXMgPSAxOwotI2lmZGVmIE5UU0lHCi0JY2tUaHJlYWRFbmQodGhyZWFk aW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLQlTSUdSRVRVUk47Ci0jZW5kaWYgLyogTUlOSURJ QUwgKi8KLSAgICB9IGVsc2UgewkJCQkvKiBIYXllcyAmIGZyaWVuZHMsIHN0YXJ0IGhlcmUuLi4g Ki8KLQlva3N0YXR1cyA9IDA7CQkJLyogTm8gc3RhdHVzIHlldC4gKi8KLQlmb3IgKHggPSAwOyB4 IDwgUkJVRkw7IHgrKykJLyogSW5pdGlhbGl6ZSByZXNwb25zZSBidWZmZXIgKi8KLQkgIHJidWZb eF0gPSBTUDsJCQkvKiAgdG8gYWxsIHNwYWNlcyAqLwotCXJidWZbUkJVRkxdID0gTlVMOwkJLyog YW5kIHRlcm1pbmF0ZSB3aXRoIE5VTC4gKi8KLQl3aGlsZSAob2tzdGF0dXMgPT0gMCkgewkJLyog V2hpbGUgbm8gc3RhdHVzLi4uICovCi0JICAgIHggPSBkZGluYyhva24pOwkJLyogUmVhZCBhIGNo YXJhY3RlciAqLwotCSAgICBpZiAoeCA8IDApIHsJCS8qIEkvTyBlcnJvciAqLwotCQlva3N0YXR1 cyA9IC0xOwotI2lmZGVmIE5UU0lHCi0JCWNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlm IC8qIE5UU0lHICovCi0JCVNJR1JFVFVSTjsKLQkgICAgfQotI2lmZGVmIENPTU1FTlQKLQkgICAg LyogdG9vIG11Y2ggKi8KLQkgICAgZGVidWcoRjEwMSwiZ2V0b2sgZGRpbmMiLCIiLHgpOyAvKiBH b3QgYSBjaGFyYWN0ZXIuICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICBjID0gKGNoYXIp ICh4ICYgMHg3Zik7CS8qIEdldCBsb3cgb3JkZXIgNyBiaXRzICovCi0JICAgIGlmICghYykJCQkv KiBEb24ndCBkZXBvc2l0IE5VTHMgKi8KLQkgICAgICBjb250aW51ZTsJCQkvKiBvciBlbHNlIGRp ZHdlZ2V0KCkgd29uJ3Qgd29yayAqLwotCSAgICBpZiAoZGlhbGRweSkgY29ub2MoKGNoYXIpYyk7 IC8qIEVjaG8gaXQgaWYgcmVxdWVzdGVkICovCi0JICAgIGZvciAoaSA9IDA7IGkgPCBSQlVGTC0x OyBpKyspIC8qIFJvdGF0ZSBidWZmZXIgKi8KLQkgICAgICByYnVmW2ldID0gcmJ1ZltpKzFdOwot CSAgICByYnVmW1JCVUZMLTFdID0gYzsJCS8qIERlcG9zaXQgY2hhcmFjdGVyIGF0IGVuZCAqLwot I2lmZGVmIENPTU1FTlQKLQkgICAgLyogdG9vIG11Y2ggKi8KLQkgICAgZGVidWcoRjAwMCwiZ2V0 b2s6IixyYnVmLChpbnQpIGMpOyAvKiBMb2cgaXQgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0J ICAgIHN3aXRjaCAoYykgewkJLyogSW50ZXJwcmV0IGl0LiAqLwotCSAgICAgIGNhc2UgQ1I6CQkJ LyogR290IGEgY2FycmlhZ2UgcmV0dXJuLiAqLwotCQlzd2l0Y2gocmJ1ZltSQlVGTC0yXSkgewkv KiBMb29rIGF0IGNoYXJhY3RlciBiZWZvcmUgaXQuICovCi0JCSAgY2FzZSAnMCc6CQkvKiAwID0g T0sgbnVtZXJpYyByZXNwb25zZSAqLwotCQkgICAgaWYgKCFva3N0cmljdCB8fAotCQkJcmJ1ZltS QlVGTC0zXSA9PSBDUiB8fCByYnVmW1JCVUZMLTNdID09IFNQKSB7Ci0JCQlub252ZXJiYWwgPSAx OwotCQkJb2tzdGF0dXMgPSAxOwkvKiBHb29kIHJlc3BvbnNlICovCi0JCSAgICB9Ci0JCSAgICBk ZWJ1ZyhGMTExLCJNb2RlbV9SZXNwb25zZShIYXllcykiLCIwIixva3N0YXR1cyk7Ci0JCSAgICBi cmVhazsKLQkJICBjYXNlICc0JzoJCS8qIDQgPSBFUlJPUiBudW1lcmljIHJlc3BvbnNlICovCi0j aWZuZGVmIE1JTklESUFMCi0JCSAgICAvKiBPciBUZWxlYml0IG1vZGVsIG51bWJlciA5NjQhICov Ci0JCSAgICBpZiAobXltZG10eXAgPT0gbl9URUxFQklUICYmCi0JCQlpc2RpZ2l0KHJidWZbUkJV RkwtM10pICYmCi0JCQlpc2RpZ2l0KHJidWZbUkJVRkwtNF0pKQotCQkgICAgICBicmVhazsKLQkJ ICAgIGVsc2UKLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotCQkgICAgICBpZiAoIW9rc3RyaWN0IHx8 Ci0JCQlyYnVmW1JCVUZMLTNdID09IENSIHx8IHJidWZbUkJVRkwtM10gPT0gU1ApIHsKLQkJCW5v bnZlcmJhbCA9IDE7Ci0JCQlva3N0YXR1cyA9IC0xOwkvKiBCYWQgY29tbWFuZCAqLwotCQkgICAg fQotCQkgICAgZGVidWcoRjExMSwiTW9kZW1fUmVzcG9uc2UoSGF5ZXMpIiwiNCIsb2tzdGF0dXMp OwotCQkgICAgYnJlYWs7Ci0JCX0KLQkJaWYgKGRpYWxkcHkgJiYgbm9udmVyYmFsKSAvKiBJZiBu dW1lcmljIHJlc3VsdHMsICovCi0JCSAgY29ub2MoTEYpOwkJICAvKiBlY2hvIGEgbGluZWZlZWQg dG9vLiAqLwotCQlicmVhazsKLQkgICAgICBjYXNlIExGOgkJCS8qIEdvdCBhIGxpbmVmZWVkLiAq LwotCQkvKgotCQkgIE5vdGUgdXNlIG9mIGV4cGxpY2l0IG9jdGFsIGNvZGVzIGluIHRoZSBzdHJp bmcgZm9yCi0JCSAgQ1IgYW5kIExGLiAgV2Ugd2FudCByZWFsIENSIGFuZCBMRiBoZXJlLCBub3Qg d2hhdGV2ZXIKLQkJICB0aGUgY29tcGlsZXIgaGFwcGVucyB0byByZXBsYWNlIFxyIGFuZCBcbiB3 aXRoLi4uCi0JCSovCi0JCWlmICghc3RyY21wKHJidWYrUkJVRkwtNCwiT0tcMDE1XDAxMiIpKSB7 IC8qIEdvb2QgcmVzcG9uc2UgKi8KLQkJICAgIG9rc3RhdHVzID0gMTsKLQkJICAgIGRlYnVnKEYx MTEsIk1vZGVtX1Jlc3BvbnNlKEhheWVzKSIsIk9LIixva3N0YXR1cyk7Ci0JCX0KLQkJaWYgKCFz dHJjbXAocmJ1ZitSQlVGTC0zLCJPS1wwMTIiKSkgeyAvKiBHb29kIHJlc3BvbnNlICovCi0JCSAg ICBva3N0YXR1cyA9IDE7Ci0JCSAgICBkZWJ1ZyhGMTExLCJNb2RlbV9SZXNwb25zZShIYXllcyki LCJPSyIsb2tzdGF0dXMpOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAocmJ1ZitSQlVGTC03LCJFUlJP UlwwMTVcMDEyIikpIHsgLyogRXJyb3IgKi8KLQkJICAgIG9rc3RhdHVzID0gLTE7Ci0JCSAgICBk ZWJ1ZyhGMTExLCJNb2RlbV9SZXNwb25zZShIYXllcykiLCJFUlJPUiIsb2tzdGF0dXMpOwotCQl9 IGVsc2UgaWYgKCFzdHJjbXAocmJ1ZitSQlVGTC02LCJFUlJPUlwwMTIiKSkgeyAvKiBFcnJvciAq LwotCQkgICAgb2tzdGF0dXMgPSAtMTsKLQkJICAgIGRlYnVnKEYxMTEsIk1vZGVtX1Jlc3BvbnNl KEhheWVzKSIsIkVSUk9SIixva3N0YXR1cyk7Ci0JCX0KLQkJYnJlYWs7Ci0JICAgICAgLyogQ2hl Y2sgd2hldGhlciBtb2RlbSBlY2hvZXMgaXRzIGNvbW1hbmRzLi4uICovCi0JICAgICAgY2FzZSAn dCc6CQkJLyogR290IGxpdHRsZSB0ICovCi0JCWlmICghc3RyY21wKHJidWYrUkJVRkwtMywiXDAx NWF0IikgfHwgLyogU2VlIGlmIGl0J3MgImF0IiAqLwotCQkgICAgIXN0cmNtcChyYnVmK1JCVUZM LTMsIiBhdCIpKQotCQkgICAgbWRtZWNobyA9IDE7Ci0JCS8qIGRlYnVnKEYxMTEsIk1ETUVDSE8t dCIscmJ1ZitSQlVGTC0yLG1kbWVjaG8pOyAqLwotCQlicmVhazsKLQkgICAgICBjYXNlICdUJzoJ CQkvKiBHb3QgQmlnIFQgKi8KLQkJaWYgKCFzdHJjbXAocmJ1ZitSQlVGTC0zLCJcMDE1QVQiKSB8 fAkvKiBTZWUgaWYgaXQncyAiQVQiICovCi0JCSAgICAhc3RyY21wKHJidWYrUkJVRkwtMywiIEFU IikpCi0JCSAgICBtZG1lY2hvID0gMTsKLQkJLyogZGVidWcoRjExMSwiTURNRUNITy1UIixyYnVm K1JCVUZMLTMsbWRtZWNobyk7ICovCi0JCWJyZWFrOwotCSAgICAgIGRlZmF1bHQ6CQkJLyogT3Ro ZXIgY2hhcmFjdGVycywgYWNjdW11bGF0ZS4gKi8KLQkJb2tzdGF0dXMgPSAwOwotCQlicmVhazsK LQkgICAgfQotCX0KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiZ2V0b2siLCIiLG9rc3RhdHVzKTsJ LyogPC0tIEl0J3MgYSBsaWUgKHdoeT8pICovCi0jaWZkZWYgTlRTSUcKLSAgICBja1RocmVhZEVu ZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgIFNJR1JFVFVSTjsKLX0KLQot c3RhdGljIFNJR1RZUAotI2lmZGVmIENLX0FOU0lDCi1mYWlsb2sodm9pZCAqIHRocmVhZGluZm8p Ci0jZWxzZSAvKiBDS19BTlNJQyAqLwotZmFpbG9rKHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRp bmZvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBmYWlsb2sgKi8gewotICAgIGRlYnVnKEYx MDAsImxvbmdqbXAgcmV0dXJuZWQgdG8gZ2V0b2soKSIsIiIsMCk7Ci0gICAgZGVidWcoRjEwMCwi Z2V0b2sgdGltZW91dCIsIiIsMCk7Ci0gICAgU0lHUkVUVVJOOwotfQotCi1pbnQKLWdldG9rKG4s IHN0cmljdCkgaW50IG4sIHN0cmljdDsgewotICAgIGRlYnVnKEYxMDEsImdldG9rIGVudHJ5IG4i LCIiLG4pOwotICAgIG9rc3RhdHVzID0gMDsKLSAgICBva24gPSBuOwotICAgIG9rc3RyaWN0ID0g c3RyaWN0OwotCi0jaWZkZWYgRFlOQU1JQwotICAgIGlmICghcmJ1ZikgewotCWlmICghKHJidWYg PSBtYWxsb2MoUkJVRkwrMSkpKSB7IC8qIEFsbG9jYXRlIGlucHV0IGxpbmUgYnVmZmVyICovCi0J ICAgIGRpYWxzdGEgPSBESUFfSUU7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotCWRlYnVnKEYxMDEs IkdFVE9LIHJidWYgbWFsbG9jIG9rIiwiIixSQlVGTCsxKTsKLSAgICB9Ci0jZW5kaWYgLyogRFlO QU1JQyAqLwotCi0gICAgbWRtZWNobyA9IDA7CQkJLyogQXNzdW1lIG5vIGVjaG9pbmcgb2YgY29t bWFuZHMgKi8KLQotICAgIGRlYnVnKEYxMDAsImFib3V0IHRvIGFscm1fZXhlY3V0ZSBkb29rKCki LCIiLDApOwotICAgIGFscm1fZXhlY3V0ZSggY2tqYWRkcihva2J1ZiksIG4sIG9rdGltbywgZG9v aywgZmFpbG9rICkgOwotICAgIGRlYnVnKEYxMDAsInJldHVybmluZyBmcm9tIGFscm1fZXhlY3V0 ZSBkb29rKCkiLCIiLDApOwotCi0gICAgdHRmbHVpKCk7CQkJCS8qIEZsdXNoIGlucHV0IGJ1ZmZl ciAqLwotICAgIHJldHVybihva3N0YXR1cyk7CQkJLyogUmV0dXJuIHN0YXR1cyAqLwotfQotCi0v KiAgRyBFIFQgSCBSIE4gIC0tICBHZXQgSGF5ZXMgUmVzdWx0IE51bWVyaWMgICovCi0KLXN0YXRp YyBWT0lECi1nZXRocm4oKSB7Ci0gICAgY2hhciBjOwotICAgIGludCB4OwotLyoKLSAgSGF5ZXMg bnVtZXJpYyByZXN1bHQgY29kZXMgKEhheWVzIDEyMDAgYW5kIGhpZ2hlcik6Ci0gICAgIDAgPSBP SwotICAgICAxID0gQ09OTkVDVCBhdCAzMDAgYnBzIChvciAxMjAwIGJwcyBvbiBIYXllcyAxMjAw IHdpdGggYmFzaWMgY29kZSBzZXQpCi0gICAgIDIgPSBSSU5HCi0gICAgIDMgPSBOTyBDQVJSSUVS Ci0gICAgIDQgPSBFUlJPUiAoaW4gY29tbWFuZCBsaW5lKQotICAgICA1ID0gQ09OTkVDVCAxMjAw IChleHRlbmRlZCBjb2RlIHNldCkKLSAgSGF5ZXMgMjQwMCBhbmQgaGlnaGVyOgotICAgICA2ID0g Tk8gRElBTFRPTkUKLSAgICAgNyA9IEJVU1kKLSAgICAgOCA9IE5PIEFOU1dFUgotICAgICA5ID0g KHRoZXJlIGlzIG5vIDkpCi0gICAgMTAgPSBDT05ORUNUIDI0MDAKLSAgUmVwb3J0ZWRseSwgdGhl IGNvZGVzIGZvciBIYXllcyBWLjMyIG1vZGVtcyBhcmU6Ci0gICAgMXggPSBDT05ORUNUIDxzdWZm aXg+Ci0gICAgNXggPSBDT05ORUNUIDEyMDAgPHN1ZmZpeD4KLSAgICA5eCA9IENPTk5FQ1QgMjQw MCA8c3VmZml4PgotICAgMTF4ID0gQ09OTkVDVCA0ODAwIDxzdWZmaXg+Ci0gICAxMnggPSBDT05O RUNUIDk2MDAgPHN1ZmZpeD4KLSAgV2hlcmU6Ci0gICAgeDogICBzdWZmaXg6Ci0gICAgUiAgPSBS RUxJQUJMRQotICAgIFJDID0gUkVMSUFCTEUgQ09NUFJFU1NFRAotICAgIEwgID0gTEFQTQotICAg IExDID0gTEFQTSBDT01QUkVTU0VECi0gIEFuZCBmb3IgVGVsZWJpdHMsIGFsbCB0aGUgYWJvdmUs IGV4Y2VwdCBubyBzdWZmaXggaW4gbnVtZXJpYyBtb2RlLCBwbHVzOgotICAgIDExID0gQ09OTkVD VCA0ODAwCi0gICAgMTIgPSBDT05ORUNUIDk2MDAKLSAgICAxMyA9IENPTk5FQ1QgMTQ0MDAKLSAg ICAxNCA9IENPTk5FQ1QgMTkyMDAKLSAgICAxNSA9IENPTk5FQ1QgMzg0MDAKLSAgICAxNiA9IENP Tk5FQ1QgNTc2MDAKLSAgICAyMCA9IENPTk5FQ1QgMzAwL1JFTCAgKD0gTU5QKQotICAgIDIyID0g Q09OTkVDVCAxMjAwL1JFTCAoPSBNTlApCi0gICAgMjMgPSBDT05ORUNUIDI0MDAvUkVMICg9IE1O UCkKLSAgICA0NiA9IENPTk5FQ1QgNzUxMiAgKGkuZS4gNzUvMTIwMCkKLSAgICA0NyA9IENPTk5F Q1QgMTI3NSAgKGkuZS4gMTIwMC83NSkKLSAgICA0OCA9IENPTk5FQ1QgNzIwMAotICAgIDQ5ID0g Q09OTkVDVCAxMjAwMAotICAgIDUwID0gQ09OTkVDVCBGQVNUIChub3Qgb24gVDE2MDAvMzAwMCkK LSAgICA1MiA9IFJSSU5HCi0gICAgNTMgPSBESUFMSU5HCi0gICAgNTQgPSBOTyBQUk9NUFRUT05F Ci0gICAgNjEgPSBDT05ORUNUIEZBU1QvS0VSTSAoS2VybWl0IHNwb29mKQotICAgIDcwID0gQ09O TkVDVCBGQVNUL0NPTVAgKFBFUCArIGNvbXByZXNzaW9uKQotICAgIDcxID0gQ09OTkVDVCBGQVNU L0tFUk0vQ09NUCAoUEVQICsgY29tcHJlc3Npb24gKyBLZXJtaXQgc3Bvb2YpCi0KLSAgQW5kIGZv ciBvdGhlcnMsIGxvdHMgb2Ygc3BlY2lhbCBjYXNlcyBiZWxvdy4uLgotKi8KLSNkZWZpbmUgTkJV RkwgOAotICAgIGNoYXIgbmJ1ZltOQlVGTCsxXTsJCQkvKiBSZXNwb25zZSBidWZmZXIgKi8KLSAg ICBpbnQgaSA9IDAsIGogPSAwOwkJCS8qIEJ1ZmZlciBwb2ludGVycyAqLwotCi0gICAgZGVidWco RjEwMSwiUkVTUE9OU0UgbWRtZWNobyIsIiIsbWRtZWNobyk7Ci0gICAgaWYgKG1kbWVjaG8pIHsJ CQkvKiBTcG9uZ2UgdXAgZGlhbGluZyBzdHJpbmcgZWNoby4gKi8KLQl3aGlsZSAoMSkgewotCSAg ICBjID0gKGNoYXIpIChkZGluYygwKSAmIDB4N2YpOwotCSAgICBkZWJ1ZyhGMDAwLCJTUE9OR0Ui LCIiLGMpOwotCSAgICBkaWFsb2MoYyk7Ci0JICAgIGlmIChjID09IENSKSBicmVhazsKLQl9Ci0g ICAgfQotICAgIHdoaWxlIChtZG1zdGF0ID09IDApIHsJCS8qIFJlYWQgcmVzcG9uc2UgKi8KLQlm b3IgKGkgPSAwOyBpIDwgTkJVRkw7IGkrKykJLyogQ2xlYXIgdGhlIGJ1ZmZlciAqLwotCSAgbmJ1 ZltpXSA9ICdcMCc7Ci0JaSA9IDA7CQkJCS8qIFJlc2V0IHRoZSBidWZmZXIgcG9pbnRlci4gKi8K LQljID0gKGNoYXIpIChkZGluYygwKSAmIDAxNzcpOwkvKiBHZXQgZmlyc3QgZGlnaXQgb2YgcmVz cG9uc2UuICovCi0JCQkJCS8qIHVzaW5nIGFuIHVudGltZWQsIGJsb2NraW5nIHJlYWQuICovCi0J ZGVidWcoRjAwMCwiUkVTUE9OU0UtQSIsIiIsYyk7Ci0JZGlhbG9jKGMpOwkJCS8qIEVjaG8gaXQg aWYgcmVxdWVzdGVkLiAqLwotCWlmICghaXNkaWdpdChjKSkJCS8qIElmIG5vdCBhIGRpZ2l0LCBr ZWVwIGxvb2tpbmcuICovCi0JICBjb250aW51ZTsKLQluYnVmW2krK10gPSBjOwkJCS8qIEdvdCBm aXJzdCBkaWdpdCwgc2F2ZSBpdC4gKi8KLQl3aGlsZSAoYyAhPSBDUiAmJiBpIDwgOCkgewkvKiBS ZWFkIGNoYXJzIHVwIHRvIENSICovCi0JICAgIHggPSBkZGluYygwKSAmIDAxNzc7CS8qIEdldCBh IGNoYXJhY3Rlci4gKi8KLQkgICAgYyA9IChjaGFyKSB4OwkJLyogR290IGl0IE9LLiAqLwotCSAg ICBkZWJ1ZyhGMDAwLCJSRVNQT05TRS1DIiwiIixjKTsKLQkgICAgaWYgKGMgIT0gQ1IpCQkvKiBJ ZiBpdCdzIG5vdCBhIGNhcnJpYWdlIHJldHVybiwgKi8KLQkgICAgICBuYnVmW2krK10gPSBjOwkJ LyogIHNhdmUgaXQuICovCi0JICAgIGRpYWxvYyhjKTsJCQkvKiBFY2hvIGl0LiAqLwotCX0KLQlu YnVmW2ldID0gJ1wwJzsJCQkvKiBEb25lLCB0ZXJtaW5hdGUgdGhlIGJ1ZmZlci4gKi8KLQlkZWJ1 ZyhGMTEwLCJkaWFsIGhheWVzbnYgbGJ1ZiIsbGJ1ZiwwKTsKLQlkZWJ1ZyhGMTExLCJkaWFsIGhh eWVzbnYgZ290IixuYnVmLGkpOwotCS8qCi0JICAgU2VwYXJhdGUgYW55IG5vbi1udW1lcmljIHN1 ZmZpeCBmcm9tIHRoZSBudW1lcmljCi0JICAgcmVzdWx0IGNvZGUgd2l0aCBhIG51bGwuCi0JKi8K LQlmb3IgKGogPSBpLTE7IChqID4gLTEpICYmICFpc2RpZ2l0KG5idWZbal0pOyBqLS0pCi0JICBu YnVmW2orMV0gPSBuYnVmW2pdOwotCWorKzsKLQluYnVmW2orK10gPSAnXDAnOwotCWRlYnVnKEYx MTAsImRpYWwgaGF5ZXNudiBudW1lcmljIixuYnVmLDApOwotCWRlYnVnKEYxMTEsImRpYWwgaGF5 ZXNudiBzdWZmaXggIixuYnVmK2osaik7Ci0JLyogUHJvYmFibHkgcGhvbmUgbnVtYmVyIGVjaG9p bmcuICovCi0JaWYgKChpbnQpc3RybGVuKG5idWYpID4gMykKLQkgIGNvbnRpbnVlOwotCi0JLyog Tm93IHJlYWQgYW5kIGludGVycHJldCB0aGUgcmVzdWx0cy4uLiAqLwotCi0JaSA9IGF0b2kobmJ1 Zik7CS8qIENvbnZlcnQgdG8gaW50ZWdlciAqLwotCXN3aXRjaCAoaSkgewotCSAgY2FzZSAwOgot CSAgICBtZG1zdGF0ID0gRF9QQVJUSUFMOwkvKiBPSyByZXNwb25zZSAqLwotCSAgICBicmVhazsK LQkgIGNhc2UgMToJCQkvKiBDT05ORUNUICovCi0JICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CS8q IENvdWxkIGJlIGFueSBzcGVlZCAqLwotCSAgICBicmVhazsKLQkgIGNhc2UgMjoJCQkvKiBSSU5H ICovCi0JICAgIGlmIChkaWFsZHB5KQotCSAgICAgIHByaW50ZigiXHJcbiBMb2NhbCBwaG9uZSBp cyByaW5naW5nIVxyXG4iKTsKLQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwotCSAgICBkaWFsc3Rh ID0gRElBX1JJTkc7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAzOgkJCS8qIE5PIENBUlJJRVIgKi8K LQkgICAgaWYgKGRpYWxkcHkpIHByaW50ZigiXHJcbiBObyBDYXJyaWVyLlxyXG4iKTsKLQkgICAg bWRtc3RhdCA9IERfRkFJTEVEOwotCSAgICBkaWFsc3RhID0gRElBX05PQ0E7Ci0JICAgIGJyZWFr OwotCSAgY2FzZSA0OgkJCS8qIEVSUk9SICovCi0JICAgIGlmIChkaWFsZHB5KQotCSAgICAgIHBy aW50ZigiXHJcbiBNb2RlbSBDb21tYW5kIEVycm9yLlxyXG4iKTsKLQkgICAgbWRtc3RhdCA9IERf RkFJTEVEOwotCSAgICBkaWFsc3RhID0gRElBX0VSUjsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIDU6 CQkJLyogQ09OTkVDVCAxMjAwICovCi0JICAgIHNwZGNoZygxMjAwTCk7IC8qIENoYW5nZSBzcGVl ZCBpZiBuZWNlc3NhcnkuICovCi0JICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFr OwotCSAgY2FzZSA2OgkJCS8qIE5PIERJQUxUT05FICovCi0jaWZuZGVmIE1JTklESUFMCi0JICAg IGlmIChteW1kbXR5cCA9PSBuX01JQ1JPTElOSyAmJiBhdG9pKGRpYWxsY2MpID09IDQ5ICYmIGRp YWxkcHkpCi0JICAgICAgcHJpbnRmKCJcclxuIERpYWwgTG9ja2VkLlxyXG4iKTsgLyogR2VybWFu eSAqLwotCSAgICBlbHNlCi0jZW5kaWYgLyogTUlOSURJQUwgKi8KLQkgICAgICBpZiAoZGlhbGRw eSkKLQkJcHJpbnRmKCJcclxuIE5vIERpYWx0b25lLlxyXG4iKTsKLQkgICAgbWRtc3RhdCA9IERf RkFJTEVEOwotCSAgICBkaWFsc3RhID0gRElBX05PRFQ7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSA3 OgkJCS8qIEJVU1kgKi8KLQkgICAgaWYgKGRpYWxkcHkpIHByaW50ZigiXHJcbiBCdXN5LlxyXG4i KTsKLQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwotCSAgICBkaWFsc3RhID0gRElBX0JVU1k7Ci0J ICAgIGJyZWFrOwotCSAgY2FzZSA4OgkJCS8qIE5PIEFOU1dFUiAqLwotI2lmbmRlZiBNSU5JRElB TAotCSAgICBpZiAobXltZG10eXAgPT0gbl9NSUNST0xJTksgJiYgYXRvaShkaWFsbGNjKSA9PSA0 MSAmJiBkaWFsZHB5KQotCSAgICAgIHByaW50ZigiXHJcbiBEaWFsIExvY2tlZC5cclxuIik7IC8q IFN3aXR6ZXJsYW5kICovCi0JICAgIGVsc2UKLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotCSAgICAg IGlmIChkaWFsZHB5KQotCQlwcmludGYoIlxyXG4gTm8gQW5zd2VyLlxyXG4iKTsKLQkgICAgbWRt c3RhdCA9IERfRkFJTEVEOwotCSAgICBkaWFsc3RhID0gRElBX05PQU47Ci0JICAgIGJyZWFrOwot Ci0JICBjYXNlIDk6Ci0jaWZuZGVmIE1JTklESUFMCi0JICAgIGlmIChteW1kbXR5cCA9PSBuX1hK QUNLIHx8IG15bWRtdHlwID09IG5fU1VQUkFYKSB7Ci0JCXNwZGNoZyg2MDApOwotCQlicmVhazsK LQkgICAgfSAvKiBmYWxsIHRocnUgKi8KLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotCSAgY2FzZSAx MDoJCQkvKiBDT05ORUNUIDI0MDAgKi8KLQkgICAgc3BkY2hnKDI0MDBMKTsJCS8qIENoYW5nZSBz cGVlZCBpZiBuZWNlc3NhcnkuICovCi0JICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJy ZWFrOwotCi0jaWZuZGVmIE1JTklESUFMCi0KLS8qIFN0YXJ0aW5nIGhlcmUsIHdlIGdldCBkaWZm ZXJlbnQgbWVhbmluZ3MgZnJvbSBkaWZmZXJlbnQgbWFudWZhY3R1cmVycyAqLwotCi0JICBjYXNl IDExOgotCSAgICBpZiAobXltZG10eXAgPT0gbl9VU1IpIHsKLQkJaWYgKGRpYWxkcHkpIHByaW50 ZigiIFJpbmdpbmcuLi5cclxuIik7Ci0JICAgIH0gZWxzZSB7Ci0JCXNwZGNoZyg0ODAwTCk7CQkv KiBDT05ORUNUIDQ4MDAgKi8KLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfQotCSAgICBi cmVhazsKLQkgIGNhc2UgMTI6Ci0JICAgIGlmIChteW1kbXR5cCA9PSBuX1VTUikgewotCQlpZiAo ZGlhbGRweSkKLQkJICBwcmludGYoIlxyXG4gQW5zd2VyZWQgYnkgdm9pY2UuXHJcbiIpOwotCQlt ZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCWRpYWxzdGEgPSBESUFfVk9JQzsKLQkgICAgfSBlbHNlIGlm IChteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7Ci0JCXNwZGNoZyg3MjAwTCk7Ci0JCW1kbXN0 YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0gZWxzZSB7Ci0JCXNwZGNoZyg5NjAwTCk7Ci0JCW1kbXN0 YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIDEzOgotCSAgICBp ZiAobXltZG10eXAgPT0gbl9BVFQxOTAwIHx8IG15bWRtdHlwID09IG5fQVRUMTkxMCkgewotCQlp ZiAoZGlhbGRweSkgcHJpbnRmKCIgV2FpdC4uLlxyXG4iKTsKLQkJYnJlYWs7Ci0JICAgIH0gZWxz ZSBpZiAobXltZG10eXAgPT0gbl9VU1IgfHwgbXltZG10eXAgPT0gbl9VU1JYMikKLQkgICAgICBz cGRjaGcoOTYwMEwpOwotCSAgICBlbHNlIGlmIChpc19yb2Nrd2VsbCB8fCBpc19zdXByYSB8fAot CQlteW1kbXR5cCA9PSBuX1pPTFRSSVggfHwgbXltZG10eXAgPT0gbl9YSkFDSykKLQkgICAgICBz cGRjaGcoNzIwMEwpOwotCSAgICBlbHNlIGlmIChteW1kbXR5cCAhPSBuX01JQ1JPTElOSykKLQkg ICAgICBzcGRjaGcoMTQ0MDBMKTsKLQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgYnJl YWs7Ci0JICBjYXNlIDE0OgotCSAgICBpZiAoaXNfcm9ja3dlbGwgfHwgaXNfc3VwcmEgfHwgbXlt ZG10eXAgPT0gbl9YSkFDSykKLQkgICAgICBzcGRjaGcoMTIwMDBMKTsKLQkgICAgZWxzZSBpZiAo bXltZG10eXAgPT0gbl9EQVRBUE9SVCB8fCBteW1kbXR5cCA9PSBuX01JQ1JPTElOSykKLQkgICAg ICBzcGRjaGcoMTQ0MDBMKTsKLQkgICAgZWxzZSBpZiAobXltZG10eXAgPT0gbl9LRUVQSU5UT1VD SCkKLQkgICAgICBzcGRjaGcoOTYwMEwpOwotCSAgICBlbHNlIGlmIChteW1kbXR5cCAhPSBuX1VT UiAmJiBteW1kbXR5cCAhPSBuX1pPTFRSSVgpCi0JICAgICAgc3BkY2hnKDE5MjAwTCk7Ci0JICAg IG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAxNToKLQkgICAgaWYg KGlzX3JvY2t3ZWxsIHx8IGlzX3N1cHJhIHx8Ci0JCW15bWRtdHlwID09IG5fWk9MVFJJWCB8fCBt eW1kbXR5cCA9PSBuX1hKQUNLKQotCSAgICAgIHNwZGNoZygxNDQwMEwpOwotCSAgICBlbHNlIGlm IChteW1kbXR5cCA9PSBuX1VTUikKLQkgICAgICBzcGRjaGcoMTIwMEwpOwotCSAgICBlbHNlIGlm IChteW1kbXR5cCA9PSBuX1pZWEVMIHx8IG15bWRtdHlwID09IG5fSU5URUwpCi0JICAgICAgc3Bk Y2hnKDcyMDBMKTsKLQkgICAgZWxzZSBpZiAobXltZG10eXAgPT0gbl9EQVRBUE9SVCkKLQkgICAg ICBzcGRjaGcoMTkyMDBMKTsKLQkgICAgZWxzZQotCSAgICAgIHNwZGNoZygzODQwMEwpOwotCSAg ICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsKLQkgIGNhc2UgMTY6Ci0JICAgIGlm IChpc19yb2Nrd2VsbCB8fCBpc19zdXByYSB8fAotCQlteW1kbXR5cCA9PSBuX1pPTFRSSVggfHwg bXltZG10eXAgPT0gbl9YSkFDSykKLQkgICAgICBzcGRjaGcoMTkyMDBMKTsKLQkgICAgZWxzZSBp ZiAobXltZG10eXAgPT0gbl9VU1IpCi0JICAgICAgc3BkY2hnKDI0MDBMKTsKLQkgICAgZWxzZSBp ZiAobXltZG10eXAgPT0gbl9EQVRBUE9SVCkKLQkgICAgICBzcGRjaGcoNzIwMEwpOwotCSAgICBl bHNlIGlmIChteW1kbXR5cCAhPSBuX1pZWEVMICYmIG15bWRtdHlwICE9IG5fSU5URUwpIC8qIDEy MDAwICovCi0JICAgICAgc3BkY2hnKDU3NjAwTCk7Ci0JICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7 Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAxNzoKLQkgICAgaWYgKG15bWRtdHlwICE9IG5fREFUQVBP UlQgfHwgbXltZG10eXAgPT0gbl9YSkFDSykJLyogMTY4MDAgKi8KLQkgICAgICBzcGRjaGcoMzg0 MDBMKTsKLQkgICAgZWxzZSBpZiAobXltZG10eXAgPT0gbl9aWVhFTCB8fCBteW1kbXR5cCA9PSBu X0lOVEVMKQotCSAgICAgIHNwZGNoZygxNDQwMEwpOwotCSAgICBlbHNlIGlmIChteW1kbXR5cCA9 PSBuX0tFRVBJTlRPVUNIKQotCSAgICAgIHNwZGNoZygxNDQwMEwpOwotCSAgICBlbHNlIGlmICht eW1kbXR5cCA9PSBuX1VTUikKLQkgICAgICBzcGRjaGcoOTYwMEwpOwotCSAgICBtZG1zdGF0ID0g Q09OTkVDVEVEOwotCSAgICBicmVhazsKLQkgIGNhc2UgMTg6Ci0JICAgIGlmIChpc19yb2Nrd2Vs bCB8fCBpc19zdXByYSB8fAotCQlteW1kbXR5cCA9PSBuX1pPTFRSSVggfHwgbXltZG10eXAgPT0g bl9YSkFDSyB8fAotCQlteW1kbXR5cCA9PSBuX01IWkFUVCB8fCBteW1kbXR5cCA9PSBuX0xVQ0VO VCkKLQkgICAgICBzcGRjaGcoNTc2MDBMKTsKLQkgICAgZWxzZSBpZiAobXltZG10eXAgPT0gbl9J TlRFTCkKLQkgICAgICBzcGRjaGcoMTkyMDBMKTsKLQkgICAgZWxzZSBpZiAobXltZG10eXAgPT0g bl9VU1IgfHwgbXltZG10eXAgPT0gbl9VU1JYMikKLQkgICAgICBzcGRjaGcoNDgwMEwpOwotCSAg ICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsKLQkgIGNhc2UgMTk6Ci0JICAgIGlm IChteW1kbXR5cCA9PSBuX0RBVEFQT1JUKQotCSAgICAgIHNwZGNoZygzMDBMKTsKLQkgICAgZWxz ZSBpZiAobXltZG10eXAgPT0gbl9aWVhFTCB8fCBteW1kbXR5cCA9PSBuX0lOVEVMKQotCSAgICAg IHNwZGNoZygzODQwMEwpOwotCSAgICBlbHNlCi0JICAgICAgc3BkY2hnKDExNTIwMEwpOwotCSAg ICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsKLQkgIGNhc2UgMjA6Ci0JICAgIGlm IChteW1kbXR5cCA9PSBuX1VTUiB8fCBteW1kbXR5cCA9PSBuX1VTUlgyKQotCSAgICAgIHNwZGNo Zyg3MjAwTCk7Ci0JICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5fREFUQVBPUlQpCi0JICAgICAg c3BkY2hnKDI0MDBMKTsKLQkgICAgZWxzZSBpZiAobXltZG10eXAgPT0gbl9aWVhFTCB8fCBteW1k bXR5cCA9PSBuX0lOVEVMKQotCSAgICAgIHNwZGNoZyg1NzYwMEwpOwotCSAgICBlbHNlCi0JICAg ICAgc3BkY2hnKDMwMEwpOwotCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsK LQkgIGNhc2UgMjE6Ci0JICAgIGlmIChteW1kbXR5cCA9PSBuX0RBVEFQT1JUKQotCSAgICAgIHNw ZGNoZyg0ODAwTCk7Ci0JICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwotCSAg Y2FzZSAyMjoKLQkgICAgaWYgKGlzX3JvY2t3ZWxsIHx8IGlzX3N1cHJhIHx8IG15bWRtdHlwID09 IG5fWEpBQ0spCi0JICAgICAgc3BkY2hnKDg4ODBMKTsKLQkgICAgZWxzZSBpZiAobXltZG10eXAg PT0gbl9EQVRBUE9SVCkKLQkgICAgICBzcGRjaGcoOTYwMEwpOwotCSAgICBlbHNlIGlmIChteW1k bXR5cCA9PSBuX0tFRVBJTlRPVUNIKQotCSAgICAgIHNwZGNoZygzMDBMKTsKLQkgICAgZWxzZSBp ZiAoIWlzX2hheWVzaGlzcGQpCi0JICAgICAgc3BkY2hnKDEyMDBMKTsKLQkgICAgbWRtc3RhdCA9 IENPTk5FQ1RFRDsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIDIzOgotCSAgICBpZiAoaXNfaGF5ZXNo aXNwZCB8fCBpc19zdXByYSB8fAotCQlteW1kbXR5cCA9PSBuX01VTFRJIHx8IG15bWRtdHlwID09 IG5fWEpBQ0spCi0JICAgICAgc3BkY2hnKDg4ODBMKTsKLQkgICAgZWxzZSBpZiAobXltZG10eXAg IT0gbl9EQVRBUE9SVCAmJiAhaXNfcm9ja3dlbGwpIC8qIDEyMDAwICovCi0JICAgICAgc3BkY2hn KDI0MDBMKTsKLQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgYnJlYWs7Ci0JICBjYXNl IDI0OgotCSAgICBpZiAoaXNfcm9ja3dlbGwgfHwgIGlzX3N1cHJhIHx8IG15bWRtdHlwID09IG5f WEpBQ0spIHsKLQkJbWRtc3RhdCA9IERfRkFJTEVEOwotCQlkaWFsc3RhID0gRElBX0RFTEE7CS8q IERlbGF5ZWQgKi8KLQkJYnJlYWs7Ci0JICAgIH0gZWxzZSBpZiAoaXNfaGF5ZXNoaXNwZCB8fCBt eW1kbXR5cCA9PSBuX0xVQ0VOVCkKLQkgICAgICBzcGRjaGcoNzIwMEwpOwotCSAgICBlbHNlIGlm IChteW1kbXR5cCA9PSBuX0RBVEFQT1JUKQotCSAgICAgIHNwZGNoZygxNDQwMEwpOwotCSAgICBl bHNlIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gp Ci0JICAgICAgc3BkY2hnKDEyMDBMKTsKLQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAg YnJlYWs7Ci0JICBjYXNlIDI1OgotCSAgICBpZiAobXltZG10eXAgPT0gbl9VU1IgfHwgbXltZG10 eXAgPT0gbl9VU1JYMikKLQkgICAgICBzcGRjaGcoMTQ0MDBMKTsKLQkgICAgZWxzZSBpZiAobXlt ZG10eXAgPT0gbl9MVUNFTlQpCi0JICAgICAgc3BkY2hnKDEyMDAwTCk7Ci0JICAgIGVsc2UgaWYg KGlzX21vdG9yb2xhKQotCSAgICAgIHNwZGNoZyg5NjAwTCk7Ci0JICAgIGVsc2UgaWYgKG15bWRt dHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkKLQkgICAgICBzcGRj aGcoMjQwMEwpOwotCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsKLQkgIGNh c2UgMjY6Ci0JICAgIGlmIChteW1kbXR5cCA9PSBuX0RBVEFQT1JUKQotCSAgICAgIHNwZGNoZygx OTIwMEwpOwotCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09 IG5fS0VFUElOVE9VQ0gpCi0JICAgICAgc3BkY2hnKDQ4MDBMKTsKLQkgICAgbWRtc3RhdCA9IENP Tk5FQ1RFRDsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIDI3OgotCSAgICBpZiAobXltZG10eXAgPT0g bl9EQVRBUE9SVCkKLQkgICAgICBzcGRjaGcoMzg0MDBMKTsKLQkgICAgZWxzZSBpZiAobXltZG10 eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKQotCSAgICAgIHNwZGNo Zyg3MjAwTCk7Ci0JICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5fTUhaQVRUKQotCSAgICAgIHNw ZGNoZyg4ODgwTCk7Ci0JICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwotCSAg Y2FzZSAyODoKLQkgICAgaWYgKG15bWRtdHlwID09IG5fREFUQVBPUlQpCi0JICAgICAgc3BkY2hn KDcyMDBMKTsKLQkgICAgZWxzZSBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9 PSBuX0tFRVBJTlRPVUNIKQotCSAgICAgIHNwZGNoZyg5NjAwTCk7Ci0JICAgIGVsc2UgaWYgKG15 bWRtdHlwID09IG5fTUhaQVRUIHx8IG15bWRtdHlwID09IG5fTFVDRU5UKQotCSAgICAgIHNwZGNo ZygzODQwMEwpOwotCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsKLQkgIGNh c2UgMjk6Ci0JICAgIGlmIChpc19tb3Rvcm9sYSkKLQkgICAgICBzcGRjaGcoNDgwMEwpOwotCSAg ICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0RBVEFQT1JUKQotCSAgICAgIHNwZGNoZygxOTIwMEwp OwotCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsKLQkgIGNhc2UgMzA6Ci0J ICAgIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gp IHsKLQkJc3BkY2hnKDE0NDAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0gLyog ZmFsbCB0aHJ1IG9uIHB1cnBvc2UuLi4gKi8KLQkgIGNhc2UgMzE6Ci0JICAgIGlmIChteW1kbXR5 cCA9PSBuX1VDT01fQVQgfHwgbXltZG10eXAgPT0gbl9NSUNST0xJTkspIHsKLQkJc3BkY2hnKDQ4 MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfSBlbHNlIGlmIChpc19tb3Rvcm9s YSkgewotCQlzcGRjaGcoNTc2MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfQot CSAgICBicmVhazsKLQkgIGNhc2UgMzI6Ci0JICAgIGlmIChpc19yb2Nrd2VsbCB8fCBpc19zdXBy YSB8fCBteW1kbXR5cCA9PSBuX1hKQUNLKSB7Ci0JCW1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJZGlh bHN0YSA9IERJQV9CTENLOwkvKiBCbGFja2xpc3RlZCAqLwotCSAgICB9IGVsc2UgaWYgKG15bWRt dHlwID09IG5fVUNPTV9BVCB8fCBteW1kbXR5cCA9PSBuX01JQ1JPTElOSykgewotCQlzcGRjaGco OTYwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKG15bWRtdHlw ID09IG5fS0VFUElOVE9VQ0gpIHsKLQkJc3BkY2hnKDMwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVD VEVEOwotCSAgICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwpIHsKLQkJc3BkY2hnKDI0 MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNh c2UgMzM6CQkJLyogRkFYIGNvbm5lY3Rpb24gKi8KLQkgICAgaWYgKGlzX3JvY2t3ZWxsIHx8IGlz X3N1cHJhIHx8Ci0JCW15bWRtdHlwID09IG5fWk9MVFJJWCB8fCBteW1kbXR5cCA9PSBuX1hKQUNL KSB7Ci0JCW1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJZGlhbHN0YSA9IERJQV9GQVg7Ci0JICAgIH0g ZWxzZSBpZiAobXltZG10eXAgPT0gbl9VQ09NX0FUIHx8Ci0JCSAgICAgICBpc19tb3Rvcm9sYSB8 fAotCQkgICAgICAgbXltZG10eXAgPT0gbl9NSUNST0xJTksKLQkJICAgICAgICkgewotCQlzcGRj aGcoOTYwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKG15bWRt dHlwID09IG5fTUhaQVRUKSB7Ci0JCXNwZGNoZygxMTUyMDBMKTsKLQkJbWRtc3RhdCA9IENPTk5F Q1RFRDsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNhc2UgMzQ6Ci0JICAgIGlmIChteW1kbXR5 cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKLQkJc3BkY2hnKDEy MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfSBlbHNlIGlmIChteW1kbXR5cCA9 PSBuX01JQ1JPTElOSykgewotCQlzcGRjaGcoNzIwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVE OwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAzNToKLQkgICAgaWYgKGlzX3JvY2t3ZWxs KSB7Ci0JCXNwZGNoZygzMDBMKTsKLQkJZGlhbHN0YSA9IENPTk5FQ1RFRDsKLQkgICAgfSBlbHNl IGlmIChpc19tb3Rvcm9sYSkgewotCQlzcGRjaGcoMTQ0MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5F Q1RFRDsKLQkgICAgfSBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09 IG5fS0VFUElOVE9VQ0gpIHsKLQkJc3BkY2hnKDI0MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RF RDsKLQkgICAgfSBlbHNlIGlmIChteW1kbXR5cCA9PSBuX01JQ1JPTElOSykgewotCQlzcGRjaGco NzIwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKG15bWRtdHlw ID09IG5fWk9MVFJJWCB8fCBteW1kbXR5cCA9PSBuX1hKQUNLKSAvKiBEQVRBICovCi0JICAgICAg bWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIDM2OgotCSAgICBpZiAo bXltZG10eXAgPT0gbl9VQ09NX0FUKSB7Ci0JCXNwZGNoZygxOTIwMEwpOwotCQltZG1zdGF0ID0g Q09OTkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKGlzX21vdG9yb2xhKSB7Ci0JCXNwZGNoZygxMjAw TCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0g bl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7Ci0JCXNwZGNoZyg0ODAwTCk7 Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIDM3 OgotCSAgICBpZiAobXltZG10eXAgPT0gbl9VQ09NX0FUKSB7Ci0JCXNwZGNoZygxOTIwMEwpOwot CQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKGlzX21vdG9yb2xhKSB7Ci0J CXNwZGNoZygyNDAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0gZWxzZSBpZiAo bXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7Ci0JCXNw ZGNoZyg3MjAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0KLQkgICAgYnJlYWs7 Ci0JICBjYXNlIDM4OgotCSAgICBpZiAoaXNfbW90b3JvbGEpIHsKLQkJc3BkY2hnKDQ4MDBMKTsK LQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfSBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0lO VEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKLQkJc3BkY2hnKDk2MDBMKTsKLQkJ bWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfSAvKiBmYWxsIHRocnUgb24gcHVycG9zZS4uLiAq LwotCSAgY2FzZSAzOToKLQkgICAgaWYgKG15bWRtdHlwID09IG5fVUNPTV9BVCkgewotCQlzcGRj aGcoMzg0MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfSBlbHNlIGlmIChpc19t b3Rvcm9sYSkgewotCQlzcGRjaGcoOTYwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAg ICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5fTUlDUk9MSU5LKSB7Ci0JCXNwZGNoZygxNDQwMEwp OwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSA0 MDoKLQkgICAgaWYgKG15bWRtdHlwID09IG5fVUNPTV9BVCkgewotCQltZG1zdGF0ID0gRF9GQUlM RUQ7Ci0JCWRpYWxzdGEgPSBESUFfTk9DQTsKLQkgICAgfSBlbHNlIGlmIChpc19tb3Rvcm9sYSB8 fCBteW1kbXR5cCA9PSBuX0lOVEVMIHx8Ci0JCSAgICAgICBteW1kbXR5cCA9PSBuX0tFRVBJTlRP VUNIKSB7Ci0JCXNwZGNoZygxNDQwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9 Ci0JICAgIGJyZWFrOwotCSAgY2FzZSA0MToKLQkgICAgaWYgKGlzX21vdG9yb2xhKSB7Ci0JCXNw ZGNoZygxOTIwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9Ci0JICAgIGJyZWFr OwotCSAgY2FzZSA0MjoKLQkgICAgaWYgKG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKLQkJ c3BkY2hnKDMwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKGlz X21vdG9yb2xhKSB7Ci0JCXNwZGNoZygzODQwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwot CSAgICB9IC8qIGZhbGwgdGhydSBvbiBwdXJwb3NlLi4uICovCi0JICBjYXNlIDQzOgotCSAgICBp ZiAobXltZG10eXAgPT0gbl9VQ09NX0FUKSB7Ci0JCXNwZGNoZyg1NzYwMEwpOwotCQltZG1zdGF0 ID0gQ09OTkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5fVVNSWDIpCi0JICAg ICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsJLyogMTY4MDAwICovCi0JICAgIGJyZWFrOwotCSAgY2Fz ZSA0NDoKLQkgICAgaWYgKGlzX3JvY2t3ZWxsKSB7Ci0JCXNwZGNoZyg4ODAwTCk7Ci0JCWRpYWxz dGEgPSBDT05ORUNURUQ7Ci0JICAgIH0gZWxzZSBpZiAoaXNfbW90b3JvbGEpIHsKLQkJc3BkY2hn KDcyMDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfSBlbHNlIGlmIChteW1kbXR5 cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKLQkJc3BkY2hnKDEy MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNh c2UgNDU6Ci0JICAgIGlmIChpc19tb3Rvcm9sYSkgewotCQlzcGRjaGcoNTc2MDBMKTsKLQkJbWRt c3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfSBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8 IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKLQkJc3BkY2hnKDI0MDBMKTsKLQkJbWRtc3Rh dCA9IENPTk5FQ1RFRDsKLQkgICAgfSBlbHNlIGlmIChuX1VTUikgewotCQlzcGRjaGcoMTQ0MDBM KTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNhc2Ug NDY6Ci0JICAgIGlmIChpc19yb2Nrd2VsbCkKLQkgICAgICBzcGRjaGcoMTIwMEwpOwotCSAgICBl bHNlIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gp Ci0JICAgICAgc3BkY2hnKDQ4MDBMKTsKLQkgICAgZWxzZQotCSAgICAgIHNwZGNoZyg4ODgwTCk7 CQkvKiA3NS8xMjAwIHNwbGl0IHNwZWVkICovCi0JICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0J ICAgIGJyZWFrOwotCSAgY2FzZSA0NzoKLQkgICAgaWYgKGlzX3JvY2t3ZWxsKQotCSAgICAgIHNw ZGNoZygyNDAwTCk7Ci0JICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10 eXAgPT0gbl9LRUVQSU5UT1VDSCkKLQkgICAgICBzcGRjaGcoNzIwMEwpOwotCSAgICBlbHNlCi0J ICAgICAgcHJpbnRmKCJDT05ORUNUIDEyMDAvNzUgLSBOb3Qgc3VwcG9ydGVkIGJ5IEMtS2VybWl0 XHJcbiIpOwotCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsKLQkgIGNhc2Ug NDg6Ci0JICAgIGlmIChpc19yb2Nrd2VsbCkKLQkgICAgICBzcGRjaGcoNDgwMEwpOwotCSAgICBl bHNlIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gp Ci0JICAgICAgc3BkY2hnKDk2MDBMKTsKLQkgICAgZWxzZQotCSAgICAgIHNwZGNoZyg3MjAwTCk7 Ci0JICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSA0OToKLQkg ICAgaWYgKGlzX3JvY2t3ZWxsKQotCSAgICAgIHNwZGNoZyg3MjAwTCk7Ci0JICAgIG1kbXN0YXQg PSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSA1MDoJCQkvKiBDT05ORUNUIEZBU1Qg Ki8KLQkgICAgaWYgKGlzX3JvY2t3ZWxsKQotCSAgICAgIHNwZGNoZyg5NjAwTCk7Ci0JICAgIGVs c2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkK LQkgICAgICBzcGRjaGcoMTQ0MDBMKTsKLQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAg YnJlYWs7Ci0JICBjYXNlIDUxOgotCSAgICBpZiAobXltZG10eXAgPT0gbl9VQ09NX0FUKSB7Ci0J CW1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJZGlhbHN0YSA9IERJQV9OT0RUOwotCSAgICB9Ci0JICAg IGJyZWFrOwotCSAgY2FzZSA1MjoJCQkvKiBSUklORyAqLwotCSAgICBpZiAobXltZG10eXAgPT0g bl9URUxFQklUKQotCSAgICAgIGlmIChkaWFsZHB5KSBwcmludGYoIiBSaW5naW5nLi4uXHJcbiIp OwotCSAgICBicmVhazsKLQkgIGNhc2UgNTM6CQkJLyogRElBTElORyAqLwotCSAgICBpZiAobXlt ZG10eXAgPT0gbl9URUxFQklUKQotCSAgICAgIGlmIChkaWFsZHB5KSBwcmludGYoIiBEaWFsaW5n Li4uXHJcbiIpOwotCSAgICBicmVhazsKLQkgIGNhc2UgNTQ6Ci0JICAgIGlmIChpc19yb2Nrd2Vs bCkgewotCQlzcGRjaGcoMTkyMDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfSBl bHNlIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gp IHsKLQkJc3BkY2hnKDEyMDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfSBlbHNl IGlmIChteW1kbXR5cCA9PSBuX1RFTEVCSVQpIHsKLQkJaWYgKGRpYWxkcHkpIHByaW50ZigiXHJc biBObyBQcm9tcHR0b25lLlxyXG4iKTsKLQkJbWRtc3RhdCA9IERfRkFJTEVEOwotCQlkaWFsc3Rh ID0gRElBX05PRFQ7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIDU1OgotCSAgICBpZiAo bXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7Ci0JCXNw ZGNoZygyNDAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0KLQkgICAgYnJlYWs7 Ci0JICBjYXNlIDU2OgotCSAgICBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9 PSBuX0tFRVBJTlRPVUNIKSB7Ci0JCXNwZGNoZyg0ODAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNU RUQ7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIDU3OgotCSAgICBpZiAobXltZG10eXAg PT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7Ci0JCXNwZGNoZyg3MjAw TCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNl IDU4OgotCSAgICBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJ TlRPVUNIKSB7Ci0JCXNwZGNoZyg5NjAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAg IH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIDU5OgotCSAgICBpZiAobXltZG10eXAgPT0gbl9JTlRF TCkJLyogMTIwMDAgKi8KLQkgICAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsK LQkgIGNhc2UgNjA6Ci0JICAgIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09 IG5fS0VFUElOVE9VQ0gpIHsKLQkJc3BkY2hnKDE0NDAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNU RUQ7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIDY0OgotCSAgICBpZiAobXltZG10eXAg PT0gbl9JTlRFTCkgewotCQlzcGRjaGcoMTIwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwot CSAgICB9IGVsc2UgaWYgKGlzX3N1cHJhKSB7Ci0JCXNwZGNoZygyODgwMEwpOwotCQltZG1zdGF0 ID0gQ09OTkVDVEVEOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSA2NToKLQkgICAgaWYg KG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgewotCQlz cGRjaGcoMjQwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9Ci0JICAgIGJyZWFr OwotCSAgY2FzZSA2NjoKLQkgICAgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAg PT0gbl9LRUVQSU5UT1VDSCkgewotCQlzcGRjaGcoNDgwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVD VEVEOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSA2NzoKLQkgICAgaWYgKG15bWRtdHlw ID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgewotCQlzcGRjaGcoNzIw MEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2Fz ZSA2ODoKLQkgICAgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQ SU5UT1VDSCkgewotCQlzcGRjaGcoOTYwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAg ICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSA2OToKLQkgICAgaWYgKG15bWRtdHlwID09IG5fSU5U RUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgLyogMTIwMDAgKi8KLQkgICAgICBtZG1z dGF0ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsKLQkgIGNhc2UgNzA6Ci0JICAgIGlmIChteW1k bXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKLQkJc3BkY2hn KDE0NDAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0J ICBjYXNlIDczOgotCSAgICBpZiAobXltZG10eXAgPT0gbl9VQ09NX0FUKSB7Ci0JCXNwZGNoZygx MTUyMDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkJYnJlYWs7Ci0JICAgIH0gLyogZWxz ZSBmYWxsIHRocnUgKi8KLQkgICAgaWYgKG15bWRtdHlwID09IG5fVEVMRUJJVCkJLyogRWFybHkg bW9kZWxzIG9ubHkgKi8KLQkgICAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsK LQkgIGNhc2UgODU6Ci0JICAgIGlmIChteW1kbXR5cCA9PSBuX1VTUiB8fCBteW1kbXR5cCA9PSBu X1VTUlgyKQotCSAgICAgIHNwZGNoZygxOTIwMEwpOwotCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVE OwotCSAgICBicmVhazsKLQkgIGNhc2UgOTE6CQkJLyogMjE2MDAgKi8KLQkgIGNhc2UgOTk6CQkJ LyogMjQwMDAgKi8KLQkgIGNhc2UgMTAzOgkJCS8qIDI2NDAwICovCi0JICAgIGlmIChteW1kbXR5 cCA9PSBuX1VTUlgyKQotCSAgICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwot CSAgY2FzZSAxMDc6Ci0JICAgIGlmIChteW1kbXR5cCA9PSBuX1VTUiB8fCBteW1kbXR5cCA9PSBu X1VTUlgyKSB7Ci0JCXNwZGNoZygyODgwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAg ICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAxNTE6CQkJLyogMzEyMDAwICovCi0JICBjYXNlIDE1 NToJCQkvKiAzMzYwMDAgKi8KLQkgICAgaWYgKG15bWRtdHlwID09IG5fVVNSWDIpCi0JICAgICAg bWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgYnJlYWs7Ci0KLSNlbmRpZiAvKiBNSU5JRElBTCAq LwotCSAgZGVmYXVsdDoKLSNpZm5kZWYgTUlOSURJQUwKLQkgICAgaWYgKG15bWRtdHlwID09IG5f VVNSIHx8IG15bWRtdHlwID09IG5fVVNSWDIgfHwKLQkJaXNfaGF5ZXNoaXNwZCB8fCBpc19yb2Nr d2VsbCkKLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotCSAgICAgIGlmIChpID4gMTIpCQkvKiBUaGVy ZSBhcmUgaHVuZHJlZHMgb2YgdGhlbS4uLiAqLwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAg ICBicmVhazsKLQl9Ci0gICAgfQotICAgIGlmIChtZG1zdGF0ID09IENPTk5FQ1RFRCAmJiBuYnVm W2pdICE9ICdcMCcpIHsKLQlpZiAoZGlhbGRweSkgewotCSAgICBwcmludGYoIlxyXG4iKTsKLQkg ICAgaWYgKG5idWZbal0gPT0gJ1InKSBwcmludGYoIiBSRUxJQUJMRSIpOwotCSAgICBpZiAobmJ1 ZltqXSA9PSAnTCcpIHByaW50ZigiIExBUE0iKTsKLQkgICAgaWYgKG5idWZbaisxXSA9PSAnQycp IHByaW50ZigiIENPTVBSRVNTRUQiKTsKLQkgICAgcHJpbnRmKCJcclxuIik7Ci0JfQotCWNrc3Ry bmNweShsYnVmLG5idWYsTEJVRkwpOwkJLyogKGZvciBtZXNzYWdlcy4uLikgKi8KLSAgICB9Ci19 Ci0KLXN0YXRpYyBWT0lECQkJCS8qIEdldCBIYXllcyBSZXN1bHQgaW4gV29yZCBtb2RlICovCi1n ZXRocncoKSB7Ci0gICAgY2hhciAqY3B0ciwgKnM7Ci0gICAgbG9uZyBjb25zcGQ7Ci0KLSAgICBp ZiAobWRtc3BkICYmICFuZXR3b3JrKSB7Ci0JcyA9IGxidWY7Ci0Jd2hpbGUgKCpzICE9ICdcMCcg JiYgKnMgIT0gJ0MnKSBzKys7Ci0JY3B0ciA9ICgqcyA9PSAnQycpID8gcyA6IE5VTEw7Ci0JY29u c3BkID0gMEw7Ci0JaWYgKChjcHRyICE9IE5VTEwpICYmICFzdHJuY21wKGNwdHIsIkNPTk5FQ1Qg Iiw4KSkgewotCSAgICBpZiAoKGludClzdHJsZW4oY3B0cikgPCA5KSAgIC8qIEp1c3QgQ09OTkVD VCwgKi8KLQkgICAgICBjb25zcGQgPSAzMDBMOwkJIC8qIHVzZSAzMDAgYnBzICovCi0JICAgIGVs c2UgaWYgKGlzZGlnaXQoKihjcHRyKzgpKSkgLyogbm90IENPTk5FQ1QgRkFTVCAqLwotCSAgICAg IGNvbnNwZCA9IGF0b2woY3B0ciArIDgpOyAgIC8qIENPTk5FQ1Qgbm5ubiAqLwotCSAgICBpZiAo Y29uc3BkICE9IHNwZWVkKSB7Ci0JCWlmICgoY29uc3BkIC8gMTBMKSA+IDApIHsKLQkJICAgIGlm ICh0dHNzcGQoKGludCkgKGNvbnNwZCAvIDEwTCkpIDwgMCkgewotCQkJcHJpbnRmKCIgQ2FuJ3Qg Y2hhbmdlIHNwZWVkIHRvICVsZFxyXG4iLAotCQkJICAgICAgIGNvbnNwZCk7Ci0JCSAgICB9IGVs c2UgewotCQkJc3BlZWQgPSBjb25zcGQ7Ci0JCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCQkJaWYg KCAhcXVpZXQgJiYgIWJhY2tncmQgKQotCQkJICBwcmludGYoIiBTcGVlZCBjaGFuZ2VkIHRvICVs ZFxyXG4iLAotCQkJCSBjb25zcGQpOwotCQkgICAgfQotCQl9Ci0JICAgIH0gLyogRXhwYW5kZWQg dG8gaGFuZGxlIGFueSBjb25jZWl2YWJsZSBzcGVlZCAqLwotCX0KLSAgICB9Ci0jaWZuZGVmIE1J TklESUFMCi0gICAgaWYgKG15bWRtdHlwID09IG5fVEVMRUJJVCkgewotCWlmIChkaWR3ZWdldChs YnVmLCJDT05ORUNUIEZBU1QvS0VSTSIpKSB7Ci0JICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0J ICAgIGlmIChkaWFsZHB5KSBwcmludGYoIkZBU1QvS0VSTSAiKTsKLQkgICAgcmV0dXJuOwotCX0K LSAgICB9Ci0jZW5kaWYgLyogTUlOSURJQUwgKi8KLSAgICBpZiAoZGlkd2VnZXQobGJ1ZiwiUlJJ TkciKSB8fAotCWRpZHdlZ2V0KGxidWYsIlJJTkdJTkciKSB8fAotCWRpZHdlZ2V0KGxidWYsIkRJ QUxJTkciKSkgewotCW1kbXN0YXQgPSAwOwotICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1Ziwi Q09OTkVDVCIpKSB7Ci0JbWRtc3RhdCA9IENPTk5FQ1RFRDsKLSAgICB9IGVsc2UgaWYgKGRpZHdl Z2V0KGxidWYsIk9LIikpIHsKLQlpZiAocGFydGlhbCkgewotCSAgICBtZG1zdGF0ID0gRF9QQVJU SUFMOwotCX0gZWxzZSB7Ci0JICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkgICAgZGlhbHN0YSA9 IERJQV9FUlI7Ci0JfQotICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTk8gQ0FSUklFUiIp KSB7Ci0JbWRtc3RhdCA9IERfRkFJTEVEOwotCWRpYWxzdGEgPSBESUFfTk9DQTsKLSAgICB9IGVs c2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5PIERJQUxUT05FIikpIHsKLQltZG1zdGF0ID0gRF9GQUlM RUQ7Ci0JZGlhbHN0YSA9IERJQV9OT0RUOwotICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1Ziwi Tk8gRElBTCBUT05FIikpIHsKLQltZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JZGlhbHN0YSA9IERJQV9O T0RUOwotICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQlVTWSIpKSB7Ci0JbWRtc3RhdCA9 IERfRkFJTEVEOwotCWRpYWxzdGEgPSBESUFfQlVTWTsKLSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0 KGxidWYsIk5PIEFOU1dFUiIpKSB7Ci0JbWRtc3RhdCA9IERfRkFJTEVEOwotCWRpYWxzdGEgPSBE SUFfTk9BTjsKLSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIlZPSUNFIikpIHsKLQltZG1z dGF0ID0gRF9GQUlMRUQ7Ci0JZGlhbHN0YSA9IERJQV9WT0lDOwotICAgIH0gZWxzZSBpZiAoZGlk d2VnZXQobGJ1ZiwiVkNPTiIpKSB7Ci0JbWRtc3RhdCA9IERfRkFJTEVEOwotCWRpYWxzdGEgPSBE SUFfVk9JQzsKLSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5PIFBST01QVCBUT05FIikp IHsKLQltZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JZGlhbHN0YSA9IERJQV9OT0RUOwotICAgIH0gZWxz ZSBpZiAoZGlkd2VnZXQobGJ1ZiwiUkVNT1RFIEFDQ0VTUyBGQUlMRUQiKSkgewotCW1kbXN0YXQg PSBEX0ZBSUxFRDsKLQlkaWFsc3RhID0gRElBX05PQ0E7Ci0gICAgfSBlbHNlIGlmIChkaWR3ZWdl dChsYnVmLCJGQVgiKSkgewotCW1kbXN0YXQgPSBEX0ZBSUxFRDsKLQlkaWFsc3RhID0gRElBX0ZB WDsKLSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIldBSVQgLSBDT05ORUNUSU5HIikgfHwK LQkgICAgICAgZGlkd2VnZXQobGJ1ZiwiV0FJVC1DT05ORUNUSU5HIikpIHsgLyogQVQmVCBTVFUt SUlJIDE5eHggKi8KLQltZG1zdGF0ID0gMDsKLSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYs IkRFTEFZRUQiKSkgewotCW1kbXN0YXQgPSBEX0ZBSUxFRDsKLQlkaWFsc3RhID0gRElBX0RFTEE7 Ci0gICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJCTEFDS0xJU1RFRCIpKSB7Ci0JbWRtc3Rh dCA9IERfRkFJTEVEOwotCWRpYWxzdGEgPSBESUFfQkxDSzsKLSAgICB9IGVsc2UgaWYgKGRpZHdl Z2V0KGxidWYsIkNPTVBSRVNTSU9OIikpIHsKLQltZG1zdGF0ID0gMDsKLSAgICB9IGVsc2UgaWYg KGRpZHdlZ2V0KGxidWYsIlBST1RPQ09MIikpIHsKLQltZG1zdGF0ID0gMDsKLSAgICB9IGVsc2Ug aWYgKGRpZHdlZ2V0KGxidWYsIkRJQUwgTE9DS0VEIikpIHsgLyogR2VybWFueSwgQXVzdHJpYSwg U2Nod2VpeiAqLwotCW1kbXN0YXQgPSBEX0ZBSUxFRDsKLQlkaWFsc3RhID0gRElBX0JMQ0s7Ci0g ICAgfSBlbHNlIGlmICggZGlkd2VnZXQobGJ1ZiwiUklORyIpIHx8Ci0JICAgICAgICBkaWR3ZWdl dChsYnVmLCJSSU5HMSIpIHx8IC8qIERpc3RpbmN0aXZlIFJpbmcgMSAqLwotCQlkaWR3ZWdldChs YnVmLCJSSU5HMiIpIHx8IC8qIERpc3RpbmN0aXZlIFJpbmcgMiAqLwotCQlkaWR3ZWdldChsYnVm LCJSSU5HMyIpICkgewotCW1kbXN0YXQgPSAoZnVuY19jb2RlID09IDApID8gRF9GQUlMRUQgOiAw OwotCWRpYWxzdGEgPSBESUFfUklORzsKLSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkVS Uk9SIikpIHsKLQltZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JZGlhbHN0YSA9IERJQV9FUlI7Ci0gICAg fSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJDQVJSSUVSIikpIHsgLyogQm9jYSAvIFJvY2t3ZWxs IGZhbWlseSAqLwotI2lmZGVmIENPTU1FTlQKLQlpZiAoaXNfcm9ja3dlbGwpCi0jZW5kaWYgLyog Q09NTUVOVCAqLwotCSAgbWRtc3RhdCA9IDA7Ci0jaWZkZWYgQ09NTUVOVAotCS8qIERvZXMgQ0FS UklFUiBldmVyIG1lYW4gdGhlIHNhbWUgYXMgQ09OTkVDVD8gKi8KLQllbHNlCi0JICBtZG1zdGF0 ID0gQ09OTkVDVEVEOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9IGVsc2UgaWYgKGRpZHdl Z2V0KGxidWYsIkRBVEEiKSkgewkvKiBCb2NhIC8gUm9ja3dlbGwgZmFtaWx5ICovCi0JLyogVGhp cyBtZXNzYWdlIGlzIHNlbnQgd2hlbiB0aGUgbW9kZW0gaXMgaW4gRkFYIG1vZGUgICovCi0JLyog U28gc2V0dGluZyB0aGlzIHRvIENPTk5FQ1RFRCBtYXkgbm90IGJlIGFwcHJvcHJpYXRlICovCi0J LyogV2UgbXVzdCBzZW5kIEFUT1wwMTUgdG8gdGhlIG1vZGVtIGluIHJlc3BvbnNlICAgICAgICov Ci0JLyogVGhlbiB3ZSB3aWxsIGdldCBhIENPTk5FQ1RFRCBtZXNzYWdlICAgICAgICAgICAgICAg ICovCi0JbWRtc3RhdCA9IENPTk5FQ1RFRDsKLSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYs IkRJR0lUQUwgTElORSIpKSB7Ci0JbWRtc3RhdCA9IERfRkFJTEVEOwotCWRpYWxzdGEgPSBESUFf RElHSTsKLSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkRBVEUiKSkgeyAvKiBDYWxsZXIg SUQgRGF0ZSAqLwotCWRlYnVnKEYxMTAsIkNBTExJRCBEQVRFIixsYnVmLDApOwotCS8qIEZvcm1h dCBpcyAiREFURSAgICAgPSAgIE1NREQiICAgKi8KLQltYWtlc3RyKCZjYWxsaWRfZGF0ZSxsYnVm KTsKLSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIlRJTUUiKSkgeyAvKiBDYWxsZXIgSUQg VGltZSAqLwotCS8qIEZvcm1hdCBpcyAiVElNRSAgICAgPSAgIEhITU0iICAgKi8KLQlkZWJ1ZyhG MTEwLCJDQUxMSUQgVElNRSIsbGJ1ZiwwKTsKLQltYWtlc3RyKCZjYWxsaWRfdGltZSxsYnVmKTsK LSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5BTUUiKSkgeyAvKiBDYWxsZXIgSUQgTmFt ZSAqLwotCS8qIEZvcm1hdCBpcyAiTkFNRSAgICAgPSAgIDxsaXN0aW5nIG5hbWU+IiAgICovCi0J ZGVidWcoRjExMCwiQ0FMTElEIE5BTUUiLGxidWYsMCk7Ci0JbWFrZXN0cigmY2FsbGlkX25hbWUs bGJ1Zik7Ci0gICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJOTUJSIikpIHsgLyogQ2FsbGVy IElEIE51bWJlciAqLwotCS8qIEZvcm1hdCBpcyAiTk1CUiAgICAgPSAgIDxudW1iZXI+LCAnUCcg b3IgJ08nIiAgICovCi0JLyogCSdQJyBtZWFucyBQcml2YWN5IFJlcXVlc3RlZCAJCSAgICovCi0J LyogICAgICAnTycgbWVhbnMgT3V0IG9mIFNlcnZpY2Ugb3IgTm90IGF2YWlsYWJsZSAgKi8KLQlk ZWJ1ZyhGMTEwLCJDQUxMSUQgTk1CUiIsbGJ1ZiwwKTsKLQltYWtlc3RyKCZjYWxsaWRfbm1icixs YnVmKTsKLSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk1FU0ciKSkgeyAvKiBDYWxsZXIg SUQgVW5yZWNvZ25pemVkIE1lc3NhZ2UgKi8KLQkvKiBGb3JtYXQgaXMgIk1FU0cgICAgID0gICA8 dGFnPjxsZW5ndGg+PGRhdGE+PGNoZWNrc3VtPiIgICAqLwotCWRlYnVnKEYxMTAsIkNBTExJRCBN RVNHIixsYnVmLDApOwotCW1ha2VzdHIoJmNhbGxpZF9tZXNnLGxidWYpOwotICAgIH0KLX0KLQot LyogTWF5YmUgaGFuZyB1cCB0aGUgcGhvbmUsIGRlcGVuZGluZyBvbiB2YXJpb3VzIFNFVCBESUFM IHBhcmFtZXRlcnMuICovCi0KLWludAotZGlhbGh1cCgpIHsKLSAgICBpbnQgeCA9IDA7Ci0gICAg aWYgKGRpYWxobmcgJiYgZGlhbHN0YSAhPSBESUFfUEFSVCkgeyAvKiBESUFMIEhBTkdVUCBPTj8g Ki8KLQl4ID0gbWRtaHVwKCk7CQkJLyogVHJ5IG1vZGVtLXNwZWNpZmljIG1ldGhvZCBmaXJzdCAq LwotCWRlYnVnKEYxMDEsImRpYWxodXAgbWRtaHVwIiwiIix4KTsKLQlpZiAoeCA+IDApIHsJCQkv KiBJZiBpdCB3b3JrZWQsICovCi0JICAgIGRpYWxzdGEgPSBESUFfSFVQOwotCSAgICBpZiAoZGlh bGRweSkKLQkgICAgICBwcmludGYoIiBNb2RlbSBoYW5ndXAgT0tcclxuIik7IC8qIGZpbmUuICov Ci0JfSBlbHNlIGlmIChuZXR3b3JrCQkvKiBJZiB3ZSdyZSB0ZWxuZXR0ZWQgdG8gKi8KLSNpZmRl ZiBUTl9DT01QT1JUCi0gICAgICAgICAgICAgICAgICAgJiYgIWlzdG5jb21wb3J0KCkgICAgLyog KHdpdGhvdXQgUkZDIDIyMTcpICAgICovCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotICAgICAg ICAgICAgICAgICAgICkgewkJCi0JICAgIGRpYWxzdGEgPSBESUFfSEFORzsKLQkgICAgaWYgKGRp YWxkcHkpCQkvKiBhIG1vZGVtIHNlcnZlciwganVzdCBwcmludCBhIG1zZyAqLwotCSAgICAgIHBy aW50ZigiIFdBUk5JTkcgLSBtb2RlbSBoYW5ndXAgZmFpbGVkXHJcbiIpOyAvKiBkb24ndCBoYW5n dXAhICovCi0JICAgIHJldHVybigwKTsKLQl9IGVsc2UgewkJCS8qIE90aGVyd2lzZSAqLwotCSAg ICB4ID0gdHRoYW5nKCk7CQkvKiBUZWxsIHRoZSBPUyB0byB0dXJuIG9mZiBEVFIuICovCi0JICAg IGlmICh4ID4gMCkgewkJLyogWWVzLCB0ZWxsIHJlc3VsdHMgZnJvbSB0dGhhbmcoKSAqLwotCQlk aWFsc3RhID0gRElBX0hVUDsKLQkJaWYgKGRpYWxkcHkpIHByaW50ZigiIEhhbmd1cCBPS1xyXG4i KTsKLQkgICAgfSBlbHNlIGlmICh4ID09IDApIHsKLQkJaWYgKGRpYWxkcHkpIHByaW50ZigiIEhh bmd1cCBza2lwcGVkXHJcbiIpOwotCSAgICB9IGVsc2UgewotCQlkaWFsc3RhID0gRElBX0hBTkc7 Ci0JCWlmIChkaWFsZHB5KSBwZXJyb3IoIiBIYW5ndXAgZXJyb3IiKTsKLQkgICAgfQotCSAgICB0 dGZsdWkoKTsKLQl9Ci0gICAgfSBlbHNlIGlmIChkaWFsZHB5KSBwcmludGYoIiBIYW5ndXAgc2tp cHBlZFxyXG4iKTsgLyogRElBTCBIQU5HVVAgT0ZGICovCi0gICAgcmV0dXJuKHgpOwotfQotCi0v KgotICBNIEQgTSBIIFUgUCAgLS0KLQotICBTZW5kcyBlc2NhcGUgc2VxdWVuY2UgdG8gbW9kZW0s IHRoZW4gc2VuZHMgaXRzIGhhbmd1cCBjb21tYW5kLiAgUmV0dXJuczoKLSAgIDA6IElmIG1vZGVt IHR5cGUgaXMgMCAoZGlyZWN0IHNlcmlhbCBjb25uZWN0aW9uKSwKLSAgICAgIG9yIGlmIG1vZGVt IHR5cGUgaXMgPCAwIChuZXR3b3JrIGNvbm5lY3Rpb24pLAotICAgICAgb3IgaWYgbm8gYWN0aW9u IHRha2VuIGJlY2F1c2UgRElBTCBNT0RFTS1IQU5HVVAgaXMgT0ZGKQotICAgICAgICBvciBiZWNh dXNlIG5vIGhhbmd1cCBzdHJpbmcgZm9yIGN1cnJlbnQgbW9kZW0gdHlwZSwKLSAgICAgIG9yIEMt S2VybWl0IGlzIGluIHJlbW90ZSBtb2RlLAotICAgICAgb3IgaWYgYWN0aW9uIHRha2VuIGJ1dCB0 aGVyZSB3YXMgbm8gcG9zaXRpdmUgcmVzcG9uc2UgZnJvbSBtb2RlbTsKLSAgIDE6IFN1Y2Nlc3M6 IG1vZGVtIGlzIGluIGNvbW1hbmQgc3RhdGUgYW5kIGFja25vd2xlZGdlZCB0aGUgaGFuZ3VwIGNv bW1hbmQ7Ci0gIC0xOiBPbiBtb2RlbSBjb21tYW5kIGVycm9yLgotKi8KLWludAotbWRtaHVwKCkg ewotI2lmZGVmIE1ETUhVUAotICAgIGludCBtLCB4ID0gMDsKLSAgICBpbnQgeHBhcml0eTsKLSAg ICBpbnQgc2F2Y2FycjsKLSAgICBleHRlcm4gaW50IHR0Y2FycjsKLSAgICBjaGFyICpzLCAqcCwg YzsKLSAgICBNRE1JTkYgKiBtcCA9IE5VTEw7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJtZG1odXAgZGlh bG1odSIsIiIsZGlhbG1odSk7IC8qIE1PREVNLUhBTkdVUCBNRVRIT0QgKi8KLSAgICBkZWJ1ZyhG MTAxLCJtZG1odXAgbG9jYWwiLCIiLGxvY2FsKTsKLQotICAgIGlmIChkaWFsbWh1ID09IDAgfHwg bG9jYWwgPT0gMCkJLyogSWYgRElBTCBNT0RFTS1IQU5HVVAgaXMgT0ZGLCAqLwotICAgICAgcmV0 dXJuKDApOwkJCS8qICBvciBub3QgaW4gbG9jYWwgbW9kZSwgZmFpbC4gKi8KLQotICAgIGRlYnVn KEYxMDEsIm1kbWh1cCBkaWFsc3RhIiwiIixkaWFsc3RhKTsKLSAgICBkZWJ1ZyhGMTAxLCJtZG1o dXAgbWRtc2V0IiwiIixtZG1zZXQpOwotCi0gICAgaWYgKGRpYWxzdGEgIT0gRElBX09LICYmICFt ZG1zZXQpCS8qIEl0J3Mgbm90IGEgZGlhbGVkIGNvbm5lY3Rpb24gKi8KLSAgICAgIHJldHVybigw KTsKLQotI2lmZGVmIENLX1RBUEkKLSAgICBpZiAodHR0YXBpICYmICF0YXBpcGFzcykJCS8qIERv bid0IGhhbmd1cCBpZiB1c2luZyBUQVBJICovCi0gICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyog Q0tfVEFQSSAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgIC8qIE5vLCB3ZSBzdGlsbCBuZWVkIHRo aXMgZm9yIG1vZGVtcyB0aGF0IGlnbm9yZSBEVFIgKi8KLSAgICBpZiAobXltZG10eXAgPT0gbl9H RU5FUklDICYmICFuZXR3b3JrKQotICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLQotICAgIGRlYnVnKEYxMDEsIm1kbWh1cCBkaWFsZXNjIiwiIixkaWFsZXNjKTsKLSAgICBp ZiAoZGlhbGVzYyA8IDApCi0gICAgICByZXR1cm4oMCk7CQkJLyogTm8gbW9kZW0gZXNjYXBlLWNo YXJhY3RlciwgZmFpbC4gKi8KLQotICAgIHNhdmNhcnIgPSB0dGNhcnI7Ci0gICAgdHRjYXJyID0g Q0FSX09GRjsKLSAgICB4ID0gdHRjaGsoKTsKLSAgICB0dGNhcnIgPSBzYXZjYXJyOwotICAgIGRl YnVnKEYxMDEsIm1kbWh1cCB0dGNoayIsIiIseCk7Ci0gICAgaWYgKHggPCAwKQkJCQkvKiBUaGVy ZSBhcHBlYXJzIHRvIGJlIG5vIGNvbm5lY3Rpb24gKi8KLSAgICAgIHJldHVybigwKTsKLSAgICB4 ID0gMDsKLQotI2lmZGVmIE9TMgotLyoKLSAgSW4gT1MvMiwgaWYgQ0FSUklFUiBpcyBPRkYsIGFu ZCB0aGVyZSBpcyBpbmRlZWQgbm8gY2FycmllciBzaWduYWwsIGFueQotICBhdHRlbXB0IHRvIGRv IGkvbyBhdCB0aGlzIHBvaW50IGNhbiBoYW5nIHRoZSBwcm9ncmFtLiAgVGhpcyBtaWdodCBiZSB0 cnVlCi0gIGZvciBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyB0b28uCi0qLwotICAgIGlmICghbmV0 d29yawkJCS8qIE5vdCBhIG5ldHdvcmsgY29ubmVjdGlvbiAqLwotI2lmZGVmIFROX0NPTVBPUlQK LSAgICAgICAgfHwgaXN0bmNvbXBvcnQoKQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQkpIHsK LQltID0gdHRnbWRtKCk7CQkJLyogR2V0IG1vZGVtIHNpZ25hbHMgKi8KLQlpZiAoKG0gPiAtMSkg JiYgKG0gJiBCTV9EQ0QgPT0gMCkpIC8qIENoZWNrIGZvciBjYXJyaWVyICovCi0JICByZXR1cm4o MCk7CQkJLyogTm8gY2Fycmllciwgc2tpcCB0aGUgcmVzdCAqLwotICAgIH0KLSNlbmRpZiAvKiBP UzIgKi8KLQotICAgIGRlYnVnKEYxMTEsIm1kbWh1cCBuZXR3b3JrIix0dG5hbWUsbmV0d29yayk7 Ci0gICAgZGVidWcoRjEwMSwibWRtaHVwIG15bWRtdHlwIiwiIixteW1kbXR5cCk7Ci0gICAgZGVi dWcoRjEwMSwibWRtaHVwIG1kbXR5cCIsIiIsbWRtdHlwKTsKLSAgICAvKiBJbiBjYXNlIG9mIEhB TkdVUCBiZWZvcmUgRElBTCAqLwotICAgIGlmIChuZXR3b3JrICYmIG1kbXR5cCA8IDEpCQkvKiBT RVQgSE9TVCBidXQgbm8gc3Vic2VxdWVudCAqLwotICAgICAgcmV0dXJuKDApOwkJCS8qIFNFVCBN T0RFTSBUWVBFLi4uICovCi0gICAgaWYgKG15bWRtdHlwID09IDAgJiYgbWRtdHlwID4gMCkKLSAg ICAgIG15bWRtdHlwID0gbWRtdHlwOwotICAgIGlmIChteW1kbXR5cCA8IDEpCQkJLyogTm90IHVz aW5nIGEgbW9kZW0gKi8KLSAgICAgIHJldHVybigwKTsKLSAgICBpZiAobXltZG10eXAgPiAwKQkJ CS8qIEFuIGFjdHVhbCBtb2RlbS4uLiAqLwotICAgICAgbXAgPSBtb2RlbXBbbXltZG10eXBdOwot ICAgIGlmICghbXApIHsJCQkJLyogR2V0IHBvaW50ZXIgdG8gaXRzIE1ETUlORiBzdHJ1Y3QgKi8K LQlkZWJ1ZyhGMTAwLCJtZG1odXAgbm8gTURNSU5GIiwiIiwwKTsKLQlyZXR1cm4oMCk7Ci0gICAg fQotICAgIG1kbWNhcGFzID0gZGlhbGNhcGFzID8gZGlhbGNhcGFzIDogbXAtPmNhcGFzOwotICAg IHh4X29rID0gbXAtPm9rX2ZuOwkJCS8qIFBvaW50ZXIgdG8gcmVzcG9uc2UgcmVhZGVyICovCi0K LSAgICBzID0gZGlhbGhjbWQgPyBkaWFsaGNtZCA6IG1wLT5odXBfc3RyOyAvKiBHZXQgaGFuZ3Vw IGNvbW1hbmQgKi8KLSAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICBkZWJ1ZyhGMTEwLCJtZG1odXAg aHVwX3N0ciIscywwKTsKLSAgICBpZiAoISpzKSByZXR1cm4oMCk7CQkJLyogSWYgbm9uZSwgZmFp bC4gKi8KLQotICAgIGlmICh0dHBrdChzcGVlZCxGTE9fRElBTCxwYXJpdHkpIDwgMCkgLyogQ29u ZGl0aW9uIGxpbmUgZm9yIGRpYWxpbmcgKi8KLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICB4cGFy aXR5ID0gcGFyaXR5OwkJCS8qIFNldCBQQVJJVFkgdG8gTk9ORSB0ZW1wb3JhcmlseSAqLwotICAg IHBhcml0eSA9IDA7Ci0KLSAgICAvKiBJbiBjYXNlIHRoZXkgZ2F2ZSBhIFNFVCBNT0RFTSBFU0NB UEUgY29tbWFuZCByZWNlbnRseS4uLiAqLwotCi0gICAgaWYgKGRpYWxlc2MgPCAwIHx8IGRpYWxl c2MgPiAxMjcpCi0gICAgICBjID0gTlVMOwotICAgIGVsc2UKLSAgICAgIGMgPSAoY2hhcikgKGRp YWxlc2MgPyBkaWFsZXNjIDogbXAtPmVzY19jaGFyKTsKLQotICAgIGlmIChtZG1jYXBhcyAmIENL RF9BVCkgewkJLyogSGF5ZXMgY29tcGF0aWJsZSAqLwotCWVzY2J1ZlswXSA9IGM7Ci0JZXNjYnVm WzFdID0gYzsKLQllc2NidWZbMl0gPSBjOwotCWVzY2J1ZlszXSA9IE5VTDsKLSAgICB9IGVsc2Ug ewkJCQkvKiBPdGhlciAqLwotCWVzY2J1ZlswXSA9IGM7Ci0JZXNjYnVmWzFdID0gTlVMOwotICAg IH0KLSAgICBkZWJ1ZyhGMTEwLCJtZG1odXAgZXNjYnVmIixlc2NidWYsMCk7Ci0gICAgaWYgKGVz Y2J1ZlswXSkgewkJCS8qIEhhdmUgZXNjYXBlIHNlcXVlbmNlPyAqLwotCWRlYnVnKEYxMDEsIm1k bWh1cCBlc2NfdGltZSIsMCxtcC0+ZXNjX3RpbWUpOwotCWlmIChtcC0+ZXNjX3RpbWUpCQkvKiBJ ZiB3ZSBoYXZlIGEgZ3VhcmQgdGltZSAqLwotCSAgbXNsZWVwKG1wLT5lc2NfdGltZSk7CQkvKiBQ YXVzZSBmb3IgZ3VhcmQgdGltZSAqLwotCWRlYnVnKEYxMDAsIm1kbWh1cCBwYXVzZSAxIE9LIiwi IiwwKTsKLQotI2lmZGVmIE5FVENPTk4JCQkJLyogU2VuZCBtb2RlbSdzIGVzY2FwZSBzZXF1ZW5j ZSAqLwotCWlmIChuZXR3b3JrKSB7CQkJLyogTXVzdCBjYXRjaCBlcnJvcnMgaGVyZS4gKi8KLQkg ICAgaWYgKHR0b2woKENIQVIgKillc2NidWYsKGludClzdHJsZW4oKGNoYXIgKillc2NidWYpKSA8 IDApIHsKLQkJcGFyaXR5ID0geHBhcml0eTsKLQkJcmV0dXJuKC0xKTsKLQkgICAgfQotCSAgICBk ZWJ1ZyhGMTEwLCJtZG1odXAgdHRzbG93IG5ldCBvayIsZXNjYnVmLDApOwotCX0gZWxzZSB7Ci0j ZW5kaWYgLyogTkVUQ09OTiAqLwotCSAgICB0dHNsb3coKGNoYXIgKillc2NidWYsd3IpOyAvKiBT ZW5kIGVzY2FwZSBzZXF1ZW5jZSAqLwotCSAgICBkZWJ1ZyhGMTEwLCJtZG1odXAgdHRzbG93IG9r Iixlc2NidWYsMCk7Ci0jaWZkZWYgTkVUQ09OTgotCX0KLSNlbmRpZiAvKiBORVRDT05OICovCi0K LQlpZiAobXAtPmVzY190aW1lKQkJLyogUGF1c2UgZm9yIGd1YXJkIHRpbWUgYWdhaW4gKi8KLQkg IG1zbGVlcChtcC0+ZXNjX3RpbWUpOwotCWVsc2UKLQkgIG1zbGVlcCg1MDApOwkJCS8qIFdhaXQg aGFsZiBhIHNlYyBmb3IgZWNob2VzLiAqLwotCWRlYnVnKEYxMDAsIm1kbWh1cCBwYXVzZSAxIE9L IiwiIiwwKTsKLSNpZmRlZiBDT01NRU5UCi0JdHRmbHVpKCk7CQkJLyogRmx1c2ggcmVzcG9uc2Ug b3IgZWNobywgaWYgYW55ICovCi0JZGVidWcoRjEwMCwibWRtaHVwIHR0Zmx1aSBPSyIsIiIsMCk7 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0KLSAgICB0dHNsb3cocyx3cik7CQkJLyogTm93 IFNlbmQgaGFuZ3VwIHN0cmluZyAqLwotICAgIGRlYnVnKEYxMTAsIm1kbWh1cCB0dHNsb3cgb2si LHMsMCk7Ci0vKgotICBUaGlzIGlzIG5vdCBleGFjdGx5IHJpZ2h0LCBidXQgaXQgd29ya3MuCi0g IElmIHdlIGFyZSBvbmxpbmU6Ci0gICAgdGhlIG1vZGVtIHNheXMgT0sgd2hlbiBpdCBnZXRzIHRo ZSBlc2NhcGUgc2VxdWVuY2UsCi0gICAgYW5kIGl0IHNheXMgTk8gQ0FSUklFUiB3aGVuIGl0IGdl dHMgdGhlIGhhbmd1cCBjb21tYW5kLgotICBJZiB3ZSBhcmUgb2ZmbGluZToKLSAgICB0aGUgbW9k ZW0gZG9lcyBOT1Qgc2F5IE9LIChvciBhbnl0aGluZyBlbHNlKSB3aGVuIGl0IGdldHMgdGhlIGVz YyBzZXF1ZW5jZSwKLSAgICBidXQgaXQgRE9FUyBzYXkgT0sgKGFuZCBub3QgTk8gQ0FSUklFUikg d2hlbiBpdCBnZXRzIHRoZSBoYW5ndXAgY29tbWFuZC4KLSAgU28gdGhlIGZvbGxvd2luZyBmdW5j dGlvbiBzaG91bGQgcmVhZCB0aGUgT0sgaW4gYm90aCBjYXNlcy4KLSAgT2YgY291cnNlLCB0aGlz IGlzIHNvbWV3aGF0IEhheWVzLXNwZWNpZmljLi4uCi0qLwotICAgIGlmICh4eF9vaykgewkJCS8q IExvb2sgZm9yIE9LIHJlc3BvbnNlICovCi0JZGVidWcoRjEwMCwibWRtaHVwIGNhbGxpbmcgcmVz cG9uc2UgZnVuY3Rpb24iLCIiLDApOwotCXggPSAoKnh4X29rKSgzLDEpOwkJLyogR2l2ZSBpdCAz IHNlY29uZHMsIGJlIHN0cmljdC4gKi8KLQlkZWJ1ZyhGMTAxLCJtZG1odXAgaGFuZ3VwIHJlc3Bv bnNlIiwiIix4KTsKLQltc2xlZXAoNTAwKTsJCQkvKiBXYWl0IGhhbGYgYSBzZWMgKi8KLQl0dGZs dWkoKTsJCQkvKiBHZXQgcmlkIG9mIE5PIENBUlJJRVIsIGlmIGFueSAqLwotICAgIH0gZWxzZSB7 CQkJCS8qIE5vIE9LIGZ1bmN0aW9uLCAqLwotCXggPSAxOwkJCQkvKiBzbyBhc3N1bWUgaXQgd29y a2VkICovCi0JZGVidWcoRjEwMSwibWRtaHVwIG5vIG9rX2ZuIiwiIix4KTsKLSAgICB9Ci0gICAg cGFyaXR5ID0geHBhcml0eTsJCQkvKiBSZXN0b3JlIHByZXZhaWxpbmcgcGFyaXR5ICovCi0gICAg cmV0dXJuKHgpOwkJCQkvKiBSZXR1cm4gT0sgZnVuY3Rpb24ncyByZXR1cm4gY29kZS4gKi8KLQot I2Vsc2UgIC8qIE1ETUhVUCBub3QgZGVmaW5lZC4gKi8KLQotICAgIGRlYnVnKEYxMDAsIm1kbWh1 cCBNRE1IVVAgbm90IGRlZmluZWQiLCIiLDApOwotICAgIHJldHVybigwKTsJCQkJLyogQWx3YXlz IGZhaWwuICovCi0KLSNlbmRpZiAvKiBNRE1IVVAgKi8KLX0KLQotI2VuZGlmIC8qIE5PSUNQICov Ci0jZWxzZSAvKiBOT0RJQUwgKi8KLQotaW50IG1kbXR5cCA9IDA7CQkJCS8qIERlZmF1bHQgbW9k ZW0gdHlwZSAqLwotCi1pbnQJCQkJCS8qIFRvIGFsbG93IE5PRElBTCB2ZXJzaW9ucyB0byAqLwot bWRtaHVwKCkgewkJCQkvKiBjYWxsIG1kbWh1cCgpLCBzbyBjYWxscyB0byAgKi8KLSAgICByZXR1 cm4oMCk7CQkJCS8qIG1kbWh1cCgpIG5lZWQgbm90IGJlIHdpdGhpbiAqLwotfQkJCQkJLyogI2lm bmRlZiBOT0RJQUwgY29uZGl0aW9uYWxzICovCi0jZW5kaWYgLyogTk9ESUFMICovCi0jZWxzZQot aW50IG1kbXR5cCA9IDA7CQkJCS8qIERlZmF1bHQgbW9kZW0gdHlwZSAqLwotI2VuZGlmIC8qIE5P TE9DQUwgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrdWZpby5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3Vm aW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjViZmFhZS4uMDAwMDAwMAotLS0g YS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWZpby5jCisrKyAvZGV2 L251bGwKQEAgLTEsODU0NSArMCwwIEBACi0vKiBDIEsgVSBGIEkgTyAgLS0gIEtlcm1pdCBmaWxl IHN5c3RlbSBzdXBwb3J0IGZvciBVTklYLCBBZWdpcywgYW5kIFBsYW4gOSAqLwotCi0jZGVmaW5l IENLX05PTkJMT0NLICAgICAgICAgICAgICAgICAgICAgLyogU2VlIHpvdXRkdW1wKCkgKi8KLQot I2lmZGVmIGFlZ2lzCi1jaGFyICpja3p2ID0gIkFlZ2lzIEZpbGUgc3VwcG9ydCwgOS4wLjIxNiwg MjAgQXVnIDIwMTEiOwotI2Vsc2UKLSNpZmRlZiBQbGFuOQotY2hhciAqY2t6diA9ICJQbGFuIDkg RmlsZSBzdXBwb3J0LCA5LjAuMjE2LCAyMCBBdWcgMjAxMSI7Ci0jZWxzZQotY2hhciAqY2t6diA9 ICJVTklYIEZpbGUgc3VwcG9ydCwgOS4wLjIxNiwgMjAgQXVnIDIwMTEiOwotI2VuZGlmIC8qIFBs YW45ICovCi0jZW5kaWYgLyogYWVnaXMgKi8KLS8qCi0gIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8 ZmRjQGNvbHVtYmlhLmVkdT4sCi0gIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3Jt YXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eSwKLSAgYW5kIG90aGVycyBub3RlZCBpbiB0aGUg Y29tbWVudHMgYmVsb3cuICBOb3RlOiBDVUNDQSA9IFByZXZpb3VzIG5hbWUgb2YKLSAgQ29sdW1i aWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLiAgTm90ZTogQWNJUyA9 IFByZXZpb3VzCi0gIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgSW5mb3JtYXRpb24gVGVjaG5vbG9n eS4KLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1i aWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJl c2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNv cHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBl cm1pc3Npb25zLgotKi8KLQotLyoKLSAgTk9URSBUTyBDT05UUklCVVRPUlM6IFRoaXMgZmlsZSwg YW5kIGFsbCB0aGUgb3RoZXIgQy1LZXJtaXQgZmlsZXMsIG11c3QgYmUKLSAgY29tcGF0aWJsZSB3 aXRoIEMgcHJlcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgb25seSAjaWZkZWYsICNlbHNlLCAjZW5k aWYsCi0gICNkZWZpbmUsIGFuZCAjdW5kZWYuICBQbGVhc2UgZG8gbm90IHVzZSAjaWYsIGxvZ2lj YWwgb3BlcmF0b3JzLCBvciBvdGhlcgotICBwcmVwcm9jZXNzb3IgZmVhdHVyZXMgaW4gYW55IG9m IHRoZSBwb3J0YWJsZSBDLUtlcm1pdCBtb2R1bGVzLiAgWW91IGNhbiwKLSAgb2YgY291cnNlLCB1 c2UgdGhlc2UgY29uc3RydWN0aW9ucyBpbiBwbGF0Zm9ybS1zcGVjaWZpYyBtb2R1bGVzIHdoZXJl IHlvdQotICBrbm93IHRoZXkgYXJlIHN1cHBvcnRlZC4KLSovCi0vKiBJbmNsdWRlIEZpbGVzICov Ci0KLSNpZmRlZiBNSU5JWDIKLSNkZWZpbmUgX01JTklYCi0jZW5kaWYgLyogTUlOSVgyICovCi0K LSNpbmNsdWRlICJja2NzeW0uaCIKLSNpbmNsdWRlICJja2NkZWIuaCIKLSNpbmNsdWRlICJja2Nh c2MuaCIKLQotI2lmbmRlZiBOT0NTRVRTCi0jaW5jbHVkZSAiY2tjeGxhLmgiCi0jZW5kaWYgLyog Tk9DU0VUUyAqLwotCi0vKiBUbyBhdm9pZCBwdWxsaW5nIGluIGFsbCBvZiBja3V1c3IuaCBzbyB3 ZSBjb3B5IHRoZSBmZXcgbmVlZGVkIHByb3RvdHlwZXMgKi8KLQotc3RydWN0IG10YWIgewkJCQkv KiBNYWNybyB0YWJsZSwgbGlrZSBrZXl3b3JkIHRhYmxlICovCi0gICAgY2hhciAqa3dkOwkJCQkv KiBCdXQgd2l0aCBwb2ludGVycyBmb3IgdmFscyAqLwotICAgIGNoYXIgKm12YWw7CQkJCS8qIGlu c3RlYWQgb2YgaW50cy4gKi8KLSAgICBzaG9ydCBmbGdzOwotfTsKLV9QUk9UT1RZUCggaW50IG1s b29rLCAoc3RydWN0IG10YWIgW10sIGNoYXIgKiwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgZG9k bywgKGludCwgY2hhciAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBwYXJzZXIsICggaW50ICkg KTsKLQotI2lmZGVmIENPTU1FTlQKLS8qIFRoaXMgY2F1c2VzIHRyb3VibGUgaW4gQy1LZXJtaXQg OC4wLiAgSSBkb24ndCByZW1lbWJlciB0aGUgb3JpZ2luYWwgKi8KLS8qIHJlYXNvbiBmb3IgdGhp cyBiZWluZyBoZXJlIGJ1dCBpdCBtdXN0IGhhdmUgYmVlbiBuZWVkZWQgYXQgdGhlIHRpbWUuLi4g Ki8KLSNpZmRlZiBPU0YxMwotI2lmZGVmIENLX0FOU0lDCi0jaWZkZWYgX05PX1BST1RPCi0jdW5k ZWYgX05PX1BST1RPCi0jZW5kaWYgLyogX05PX1BST1RPICovCi0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLSNlbmRpZiAvKiBPU0YxMyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmbmRlZiBI UFVYUFJFNjUKLSNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51bWJlciBzeW1ib2xzICov Ci0jZWxzZQotI2lmbmRlZiBFUlJOT19JTkNMVURFRAotI2luY2x1ZGUgPGVycm5vLmg+CQkJLyog RXJyb3IgbnVtYmVyIHN5bWJvbHMgKi8KLSNlbmRpZgkvKiBFUlJOT19JTkNMVURFRCAqLwotI2Vu ZGlmCS8qIEhQVVhQUkU2NSAqLwotCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLSNpZmRlZiBNSU5J WDIKLSN1bmRlZiBNSU5JWAotI3VuZGVmIENLU1lTTE9HCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0j aW5jbHVkZSA8dGltZS5oPgotI2RlZmluZSBOT0ZJTEVICi0jZW5kaWYgLyogTUlOSVgyICovCi0K LSNpZmRlZiBNSU5JWAotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5o PgotI2luY2x1ZGUgPHRpbWUuaD4KLSNlbHNlCi0jaWZkZWYgUE9TSVgKLSNpbmNsdWRlIDxsaW1p dHMuaD4KLSNlbHNlCi0jaWZkZWYgU1ZSMwotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2VuZGlmIC8q IFNWUjMgKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwotI2VuZGlmIC8qIE1JTklYICovCi0vKgotICBE aXJlY3RvcnkgU2VwYXJhdG9yIG1hY3JvcywgdG8gYWxsb3cgdGhpcyBtb2R1bGUgdG8gd29yayB3 aXRoIGJvdGggVU5JWCBhbmQKLSAgT1MvMjogQmVjYXVzZSBvZiBhbWJpZ3VpdHkgd2l0aCB0aGUg Y29tbWFuZCBsaW5lIGVkaXRvciBlc2NhcGUgXCBjaGFyYWN0ZXIsCi0gIHRoZSBkaXJlY3Rvcnkg c2VwYXJhdG9yIGlzIGN1cnJlbnRseSBsZWZ0IGFzIC8gZm9yIE9TLzIgdG9vLCBiZWNhdXNlIHRo ZQotICBPUy8yIGtlcm5lbCBhbHNvIGFjY2VwdHMgLyBhcyBkaXJlY3Rvcnkgc2VwYXJhdG9yLiAg QnV0IHRoaXMgaXMgc3ViamVjdCB0bwotICBjaGFuZ2UgaW4gZnV0dXJlIHZlcnNpb25zIHRvIGNv bmZvcm0gdG8gdGhlIG5vcm1hbCBPUy8yIHN0eWxlLgotKi8KLSNpZm5kZWYgRElSU0VQCi0jZGVm aW5lIERJUlNFUCAgICAgICAnLycKLSNlbmRpZiAvKiBESVJTRVAgKi8KLSNpZm5kZWYgSVNESVJT RVAKLSNkZWZpbmUgSVNESVJTRVAoYykgICgoYyk9PScvJykKLSNlbmRpZiAvKiBJU0RJUlNFUCAq LwotCi0jaWZkZWYgU0RJUkVOVAotI2RlZmluZSBESVJFTlQKLSNlbmRpZiAvKiBTRElSRU5UICov Ci0KLSNpZmRlZiBYTkRJUgotI2luY2x1ZGUgPHN5cy9uZGlyLmg+Ci0jZWxzZSAvKiAhWE5ESVIg Ki8KLSNpZmRlZiBORElSCi0jaW5jbHVkZSA8bmRpci5oPgotI2Vsc2UgLyogIU5ESVIsICFYTkRJ UiAqLwotI2lmZGVmIFJUVQotI2luY2x1ZGUgIi91c3IvbGliL25kaXIuaCIKLSNlbHNlIC8qICFS VFUsICFORElSLCAhWE5ESVIgKi8KLSNpZmRlZiBESVJFTlQKLSNpZmRlZiBTRElSRU5UCi0jaW5j bHVkZSA8c3lzL2RpcmVudC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxkaXJlbnQuaD4KLSNlbmRpZiAv KiBTRElSRU5UICovCi0jZWxzZQotI2luY2x1ZGUgPHN5cy9kaXIuaD4KLSNlbmRpZiAvKiBESVJF TlQgKi8KLSNlbmRpZiAvKiBSVFUgKi8KLSNlbmRpZiAvKiBORElSICovCi0jZW5kaWYgLyogWE5E SVIgKi8KLQotI2lmZGVmIFVOSVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50 ZXIgYXJnIHRvIHdhaXQoKSBhbGxvd2VkICovCi0jZGVmaW5lIENLX0NISUxEICAgICAgICAgICAg ICAgICAgICAgICAgLyogQXNzdW1lIHRoaXMgaXMgc2FmZSBpbiBhbGwgVU5JWCAqLwotI2VuZGlm IC8qIFVOSVggKi8KLQotZXh0ZXJuIGludCBiaW5hcnksIHJlY3Vyc2l2ZSwgc3RhdGhhY2s7Ci0j aWZkZWYgQ0tfQ1RSTFoKLWV4dGVybiBpbnQgZW9mbWV0aG9kOwotI2VuZGlmIC8qIENLX0NUUkxa ICovCi0KLSNpbmNsdWRlIDxwd2QuaD4gICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXNzd29y ZCBmaWxlIGZvciBzaGVsbCBuYW1lICovCi0jaWZkZWYgQ0tfU1JQCi0jaW5jbHVkZSA8dF9wd2Qu aD4gICAgICAgICAgICAgICAgICAgICAgLyogU1JQIFBhc3N3b3JkIGZpbGUgKi8KLSNlbmRpZiAv KiBDS19TUlAgKi8KLQotI2lmZGVmIEhQVVgxMF9UUlVTVEVECi0jaW5jbHVkZSA8aHBzZWN1cml0 eS5oPgotI2luY2x1ZGUgPHByb3QuaD4KLSNlbmRpZiAvKiBIUFVYMTBfVFJVU1RFRCAqLwotCi0j aWZkZWYgQ09NTUVOVAotLyogTW92ZWQgdG8gY2tjZGViLmggKi8KLSNpZmRlZiBQT1NJWAotI2Rl ZmluZSBVVElNRUgKLSNlbHNlCi0jaWZkZWYgSFBVWDkKLSNkZWZpbmUgVVRJTUVICi0jZW5kaWYg LyogSFBVWDkgKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQot I2lmZGVmIFNZU1VUSU1FSCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDxzeXMvdXRpbWUuaD4g aWYgcmVxdWVzdGVkLCAgKi8KLSNpbmNsdWRlIDxzeXMvdXRpbWUuaD4gICAgICAgICAgICAgICAg ICAvKiBmb3IgZXh0cmEgZmllbGRzIHJlcXVpcmVkIGJ5ICovCi0jZWxzZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogODhPcGVuIHNwZWMuICovCi0jaWZkZWYgVVRJTUVIICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogb3IgPHV0aW1lLmg+IGlmIHJlcXVlc3RlZCAqLwot I2luY2x1ZGUgPHV0aW1lLmg+ICAgICAgICAgICAgICAgICAgICAgIC8qIChTVlI0LCBQT1NJWCkg Ki8KLSNpZm5kZWYgQlNENDQKLSNpZm5kZWYgVjcKLS8qIE5vdCBzdXJlIHdoeSB0aGlzIGlzIGhl cmUuICBXaGF0IGl0IGltcGxpZXMgaXMgdGhhdCB0aGUgY29kZSBicmFja2V0ZWQKLSAgIGJ5IFNZ U1VUSU1FSCBpcyB2YWxpZCBvbiBhbGwgcGxhdGZvcm1zIG9uIHdoaWNoIHdlIHN1cHBvcnQgdGlt ZSAKLSAgIGZ1bmN0aW9uYWxpdHkuICBCdXQgd2Uga25vdyB0aGF0IGlzIG5vdCB0cnVlIGJlY2F1 c2UgdGhlIEJTRDQ0IGFuZCBWNwotICAgcGxhdGZvcm1zIGRvIG5vdCBzdXBwb3J0IHN5cy91dGlt ZS5oIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHdoaWNoCi0gICBhcmUgZGVmaW5lZCBpbiB0aGVt LiAgTm93IHRoaXMgd29ya2VkIGJlZm9yZSBiZWNhdXNlIHByaW9yIHRvIHRvZGF5J3MKLSAgIGNo YW5nZXMgdGhlIFVUSU1FSCBkZWZpbml0aW9uIGZvciBCU0Q0NCBhbmQgVjcgZGlkIG5vdCB0YWtl IHBsYWNlCi0gICB1bnRpbCBhZnRlciBTWVNVVElNRUggd2FzIGRlZmluZWQuICBJdCBhbHNvIHdv dWxkIG5vdCBoYXZlIGJlZW4gYSAKLSAgIHByb2JsZW0gaWYgdGhlIG9yZGVyaW5nIG9mIGFsbCB0 aGUgdGltZSBibG9ja3Mgd2FzIGNvbnNpc3RlbnQuICBBbGwgYnV0Ci0gICBvbmUgb2YgdGhlIGJs b2NrcyB3ZXJlIEJTRDQ0LCBWNywgU1lTVVRJTUVILCA8T1RIRVI+LiAgVGhhdCBvbmUgY2FzZQot ICAgaXMgd2hlcmUgdGhpcyBwcm9ibGVtIHdhcyB0cmlnZ2VyZWQuCi0qLwotI2RlZmluZSBTWVNV VElNRUggICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZSB0aGlzIGZvciBib3RoIGNhc2VzLiAq LwotI2VuZGlmIC8qIFY3ICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBVVElNRUgg Ki8KLSNlbmRpZiAvKiBTWVNVVElNRUggKi8KLQotI2lmbmRlZiBOT1RJTUVTVEFNUAotI2lmZGVm IFBPU0lYCi0jaWZuZGVmIEFTNDAwCi0jZGVmaW5lIFRJTUVTVEFNUAotI2VuZGlmIC8qIEFTNDAw ICovCi0jZW5kaWYgLyogUE9TSVggKi8KLQotI2lmZGVmIEJTRDQ0ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEJTRCA0LjQgKi8KLSNpZm5kZWYgVElNRVNUQU1QCi0jZGVmaW5lIFRJTUVT VEFNUCAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FuIGRvIGZpbGUgZGF0ZXMgKi8KLSNlbmRp ZiAvKiBUSU1FU1RBTVAgKi8KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHN5cy90 aW1lYi5oPgotCi0jZWxzZSAgLyogTm90IEJTRDQ0ICovCi0KLSNpZmRlZiBCU0Q0ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBCU0QgNC4zIGFuZCBiZWxvdyAqLwotI2RlZmluZSBUSU1F U1RBTVAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbiBkbyBmaWxlIGRhdGVzICovCi0jaW5j bHVkZSA8dGltZS5oPiAgICAgICAgICAgICAgICAgICAgICAgLyogTmVlZCB0aGlzICovCi0jaW5j bHVkZSA8c3lzL3RpbWViLmg+ICAgICAgICAgICAgICAgICAgLyogTmVlZCB0aGlzIGlmIHJlYWxs eSBCU0QgKi8KLQotI2Vsc2UgIC8qIE5vdCBCU0QgNC4zIGFuZCBiZWxvdyAqLwotCi0jaWZkZWYg U1ZPUlBPU0lYICAgICAgICAgICAgICAgICAgICAgICAgLyogU3lzdGVtIFYgb3IgUE9TSVggKi8K LSNpZm5kZWYgVElNRVNUQU1QCi0jZGVmaW5lIFRJTUVTVEFNUAotI2VuZGlmIC8qIFRJTUVTVEFN UCAqLwotI2luY2x1ZGUgPHRpbWUuaD4KLQotLyogdm9pZCB0enNldCgpOyAodGhlICJ2b2lkIiB0 eXBlIHVwc2V0cyBzb21lIGNvbXBpbGVycykgKi8KLSNpZm5kZWYgSVJJWDYwCi0jaWZuZGVmIHVs dHJpeAotI2lmbmRlZiBDT05WRVg5Ci0vKiBDb252ZXhPUyA5LjAsIHN1cHBvc2VkbHkgUE9TSVgs IGhhcyBleHRlcm4gY2hhciAqdGltZXpvbmUoaW50LGludCkgKi8KLSNpZm5kZWYgUGxhbjkKLWV4 dGVybiBsb25nIHRpbWV6b25lOwotI2VuZGlmIC8qIFBsYW45ICovCi0jZW5kaWYgLyogQ09OVkVY OSAqLwotI2VuZGlmIC8qIHVsdHJpeCAqLwotI2VuZGlmIC8qIElSSVg2MCAqLwotI2VuZGlmIC8q IFNWT1JQT1NJWCAqLwotI2VuZGlmIC8qIEJTRDQgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotCi0j aWZkZWYgQ09IRVJFTlQKLSNpbmNsdWRlIDx0aW1lLmg+Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8K LQotLyogSXMgYHknIGEgbGVhcCB5ZWFyPyAqLwotI2RlZmluZSBsZWFwKHkpICgoKHkpICUgNCA9 PSAwICYmICh5KSAlIDEwMCAhPSAwKSB8fCAoeSkgJSA0MDAgPT0gMCkKLQotLyogTnVtYmVyIG9m IGxlYXAgeWVhcnMgZnJvbSAxOTcwIHRvIGB5JyAobm90IGluY2x1ZGluZyBgeScgaXRzZWxmKS4g Ki8KLSNkZWZpbmUgbmxlYXAoeSkgKCgoeSkgLSAxOTY5KSAvIDQgLSAoKHkpIC0gMTkwMSkgLyAx MDAgKyAoKHkpIC0gMTYwMSkgLyA0MDApCi0KLSNlbmRpZiAvKiBOT1RJTUVTVEFNUCAqLwotCi0j aWZkZWYgQ0lFCi0jaW5jbHVkZSA8c3RhdC5oPiAgICAgICAgICAgICAgICAgICAgICAgLyogRmls ZSBzdGF0dXMgKi8KLSNlbHNlCi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZiAvKiBDSUUg Ki8KLQotCi0KLS8qIE1hY3JvIHRvIGFsbGV2aWF0ZSBpc2RpcigpIGNhbGxzIGludGVybmFsIHRv IHRoaXMgbW9kdWxlICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc3RhdCBTVEFUQlVGOwotI2RlZmluZSB4 aXNkaXIoYSkgKChzdGF0KGEsJlNUQVRCVUYpPT0tMSk/MDooU19JU0RJUihTVEFUQlVGLnN0X21v ZGUpPzE6MCkpCi0KLWV4dGVybiBjaGFyIHVpZGJ1ZltdOwotZXh0ZXJuIGludCB4ZmVybG9nOwot ZXh0ZXJuIGNoYXIgKiB4ZmVyZmlsZTsKLWludCBpa2xvZ29wZW4gPSAwOwotc3RhdGljIHRpbWVf dCB0aW1lbm93OwotCi0jZGVmaW5lIElLU0RNU0dMRU4gQ0tNQVhQQVRIKzUxMgotCi1zdGF0aWMg Y2hhciBpa3NkbXNnW0lLU0RNU0dMRU5dOwotCi1leHRlcm4gaW50IGxvY2FsOwotCi1leHRlcm4g aW50IHNlcnZlciwgZW5fbWtkLCBlbl9jd2QsIGVuX2RlbDsKLQotLyoKLSAgRnVuY3Rpb25zIChu IGlzIG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBmaWxlIG51bWJlcnMgZnJvbSBja2NrZXIuaCk6Ci0K LSAgIHpvcGVuaShuLG5hbWUpICAgLS0gT3BlbnMgYW4gZXhpc3RpbmcgZmlsZSBmb3IgaW5wdXQu Ci0gICB6b3Blbm8obixuYW1lLGF0dHIsZmNiKSAtLSBPcGVucyBhIG5ldyBmaWxlIGZvciBvdXRw dXQuCi0gICB6Y2xvc2UobikgICAgICAgIC0tIENsb3NlcyBhIGZpbGUuCi0gICB6Y2hpbihuLCZj KSAgICAgIC0tIEdldHMgdGhlIG5leHQgY2hhcmFjdGVyIGZyb20gYW4gaW5wdXQgZmlsZS4KLSAg IHpzaW5sKG4sJnMseCkgICAgLS0gUmVhZCBhIGxpbmUgZnJvbSBmaWxlIG4sIG1heCBsZW4geCwg aW50byBhZGRyZXNzIHMuCi0gICB6c291dChuLHMpICAgICAgIC0tIFdyaXRlIGEgbnVsbC10ZXJt aW5hdGVkIHN0cmluZyB0byBvdXRwdXQgZmlsZSwgYnVmZmVyZWQuCi0gICB6c291dGwobixzKSAg ICAgIC0tIExpa2UgenNvdXQsIGJ1dCBhcHBlbmRzIGEgbGluZSB0ZXJtaW5hdG9yLgotICAgenNv dXR4KG4scyx4KSAgICAtLSBXcml0ZSB4IGNoYXJhY3RlcnMgdG8gb3V0cHV0IGZpbGUsIHVuYnVm ZmVyZWQuCi0gICB6Y2hvdXQobixjKSAgICAgIC0tIEFkZCBhIGNoYXJhY3RlciB0byBhbiBvdXRw dXQgZmlsZSwgdW5idWZmZXJlZC4KLSAgIHpjaGtpKG5hbWUpICAgICAgLS0gQ2hlY2sgaWYgbmFt ZWQgZmlsZSBleGlzdHMgYW5kIGlzIHJlYWRhYmxlLCByZXR1cm4gc2l6ZS4KLSAgIHpjaGtvKG5h bWUpICAgICAgLS0gQ2hlY2sgaWYgbmFtZWQgZmlsZSBjYW4gYmUgY3JlYXRlZC4KLSAgIHpjaGtz cGEobmFtZSxuKSAgLS0gQ2hlY2sgaWYgbiBieXRlcyBhdmFpbGFibGUgdG8gY3JlYXRlIG5ldyBm aWxlLCBuYW1lLgotICAgem5ld24obmFtZSxzKSAgICAtLSBNYWtlIGEgbmV3IHVuaXF1ZSBmaWxl IG5hbWUgYmFzZWQgb24gdGhlIGdpdmVuIG5hbWUuCi0gICB6ZGVsZXQobmFtZSkgICAgIC0tIERl bGV0ZSB0aGUgbmFtZWQgZmlsZS4KLSAgIHp4cGFuZChzdHJpbmcpICAgLS0gRXhwYW5kcyB0aGUg Z2l2ZW4gd2lsZGNhcmQgc3RyaW5nIGludG8gYSBsaXN0IG9mIGZpbGVzLgotICAgem5leHQoc3Ry aW5nKSAgICAtLSBSZXR1cm5zIHRoZSBuZXh0IGZpbGUgZnJvbSB0aGUgbGlzdCBpbiAic3RyaW5n Ii4KLSAgIHp4cmV3aW5kKCkgICAgICAgLS0gUmV3aW5kIHp4cGFuZCBsaXN0LgotICAgenhjbWQo bixjbWQpICAgICAtLSBFeGVjdXRlIHRoZSBjb21tYW5kIGluIGEgbG93ZXIgZm9yayBvbiBmaWxl IG51bWJlciBuLgotICAgemNsb3NmKCkgICAgICAgICAtLSBDbG9zZSBpbnB1dCBmaWxlIGFzc29j aWF0ZWQgd2l0aCB6eGNtZCgpJ3MgbG93ZXIgZm9yay4KLSAgIHpydG9sKG4xLG4yKSAgICAgLS0g Q29udmVydCByZW1vdGUgZmlsZW5hbWUgaW50byBsb2NhbCBmb3JtLgotICAgemx0b3IobjEsbjIp ICAgICAtLSBDb252ZXJ0IGxvY2FsIGZpbGVuYW1lIGludG8gcmVtb3RlIGZvcm0uCi0gICB6Y2hk aXIoZGlybmFtKSAgIC0tIENoYW5nZSB3b3JraW5nIGRpcmVjdG9yeS4KLSAgIHpob21lKCkgICAg ICAgICAgLS0gUmV0dXJuIHBvaW50ZXIgdG8gaG9tZSBkaXJlY3RvcnkgbmFtZSBzdHJpbmcuCi0g ICB6a3NlbGYoKSAgICAgICAgIC0tIEtpbGwgc2VsZiwgbG9nIG91dCBvd24gam9iLgotICAgenNh dHRyKHN0cnVjdCB6YXR0ciAqKSAtLSBSZXR1cm4gYXR0cmlidXRlcyBmb3IgZmlsZSB3aGljaCBp cyBiZWluZyBzZW50LgotICAgenN0aW1lKGYsIHN0cnVjdCB6YXR0ciAqLCB4KSAtIFNldCBmaWxl IGNyZWF0aW9uIGRhdGUgZnJvbSBhdHRyaWJ1dGUgcGFja2V0LgotICAgenJlbmFtZShvbGQsIG5l dykgLS0gUmVuYW1lIGEgZmlsZS4KLSAgIHpjb3B5KHNvdXJjZSxkZXN0aW5hdGlvbikgLS0gQ29w eSBhIGZpbGUuCi0gICB6bWtkaXIocGF0aCkgICAgICAgLS0gQ3JlYXRlIHRoZSBkaXJlY3Rvcnkg cGF0aCBpZiBwb3NzaWJsZQotICAgemZucWZwKGZuYW1lLGxlbixmdWxscGF0aCkgLSBEZXRlcm1p bmUgZnVsbCBwYXRoIGZvciBmaWxlIG5hbWUuCi0gICB6Z2V0ZnMobmFtZSkgICAgIC0tIHJldHVy biBmaWxlIHNpemUgcmVnYXJkbGVzcyBvZiBhY2Nlc3NpYmlsaXR5Ci0gICB6Y2hrcGlkKHBpZCkg ICAgIC0tIHRlbGwgaWYgUElEIGlzIHZhbGlkIGFuZCBhY3RpdmUKLSovCi0KLS8qIEtlcm1pdC1z cGVjaWZpYyBpbmNsdWRlcyAqLwotLyoKLSAgRGVmaW5pdGlvbnMgaGVyZSBzdXBlcnNlZGUgdGhv c2UgZnJvbSBzeXN0ZW0gaW5jbHVkZSBmaWxlcy4KLSAgY2tjZGViLmggaXMgaW5jbHVkZWQgYWJv dmUuCi0qLwotI2luY2x1ZGUgImNrY2tlci5oIiAgICAgICAgICAgICAgICAgICAgIC8qIEtlcm1p dCBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgImNrdWNtZC5oIiAgICAgICAgICAgICAgICAgICAg IC8qIEZvciBrZXl3b3JkIHRhYmxlcyAqLwotI2luY2x1ZGUgImNrdXZlci5oIiAgICAgICAgICAg ICAgICAgICAgIC8qIFZlcnNpb24gaGVyYWxkICovCi0KLWNoYXIgKmNrenN5cyA9IEhFUkFMRDsK LQotLyoKLSAgRmlsZSBhY2Nlc3MgY2hlY2tpbmcgLi4uICBUaGVyZSBhcmUgdHdvIGNhbGxzIHRv IGFjY2VzcygpIGluIHRoaXMgbW9kdWxlLgotICBJZiB0aGlzIHByb2dyYW0gaXMgaW5zdGFsbGVk IHNldHVpZCBvciBzZXRnaWQgb24gYSBCZXJrZWxleS1iYXNlZCBVTklYCi0gIHN5c3RlbSB0aGF0 IGRvZXMgTk9UIGluY29ycG9yYXRlIHRoZSBzYXZlZC1vcmlnaW5hbC1lZmZlY3RpdmUtdWlkL2dp ZAotICBmZWF0dXJlLCB0aGVuLCB3aGVuIHdlIGhhdmUgc3dhcHBlZCB0aGUgZWZmZWN0aXZlIGFu ZCBvcmlnaW5hbCB1aWQvZ2lkLAotICBhY2Nlc3MoKSBmYWlscyBiZWNhdXNlIGl0IHVzZXMgd2hh dCBpdCB0aGlua3MgYXJlIHRoZSBSRUFMIGlkcywgYnV0IHdlIGhhdmUKLSAgc3dhcHBlZCB0aGVt LiAgVGhpcyBvY2N1cnMgb24gc3lzdGVtcyB3aGVyZSBBTllCU0QgaXMgZGVmaW5lZCwgTk9TRVRS RVUKLSAgaXMgTk9UIGRlZmluZWQsIGFuZCBTQVZFRFVJRCBpcyBOT1QgZGVmaW5lZC4gIFNvLCBp biB0aGVvcnksIHdlIHNob3VsZCB0YWtlCi0gIGNhcmUgb2YgdGhpcyBzaXR1YXRpb24gbGlrZSBz bzoKLQotICAgIGlmZGVmIEFOWUJTRAotICAgIGlmbmRlZiBOT1NFVFJFVQotICAgIGlmbmRlZiBT QVZFRFVJRAotICAgIGRlZmluZSBTV19BQ0NfSUQKLSAgICBlbmRpZgotICAgIGVuZGlmCi0gICAg ZW5kaWYKLQotICBCdXQgd2UgY2FuJ3QgdGVzdCBzdWNoIGEgZ2VuZXJhbCBzY2hlbWUgZXZlcnl3 aGVyZSwgc28gbGV0J3Mgb25seSBkbyB0aGlzCi0gIHdoZW4gd2Uga25vdyB3ZSBoYXZlIHRvLi4u Ci0qLwotI2lmZGVmIE5FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lWFRTVEVQ IDEuMC0zLjAgKi8KLSNkZWZpbmUgU1dfQUNDX0lECi0jZW5kaWYgLyogTkVYVCAqLwotCi0vKiBT dXBwb3J0IGZvciB0aWxkZS1leHBhbnNpb24gaW4gZmlsZSBhbmQgZGlyZWN0b3J5IG5hbWVzICov Ci0KLSNpZmRlZiBQT1NJWAotI2RlZmluZSBOQU1FRU5WICJMT0dOQU1FIgotI2Vsc2UKLSNpZmRl ZiBCU0Q0Ci0jZGVmaW5lIE5BTUVFTlYgIlVTRVIiCi0jZWxzZQotI2lmZGVmIEFUVFNWCi0jZGVm aW5lIE5BTUVFTlYgIkxPR05BTUUiCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0 ICovCi0jZW5kaWYgLyogUE9TSVggKi8KLQotLyogQmVya2VsZXkgVW5peCBWZXJzaW9uIDQueCAq LwotLyogNC4xYnNkIHN1cHBvcnQgZnJvbSBDaGFybGVzIEUgQnJvb2tzLCBFRE4tVkFYICovCi0K LSNpZmRlZiBCU0Q0Ci0jaWZkZWYgTUFYTkFNTEVOCi0jZGVmaW5lIEJTRDQyCi0jZW5kaWYgLyog TUFYTkFNTEVOICovCi0jZW5kaWYgLyogQlNENCAqLwotCi0vKiBEZWZpbml0aW9ucyBvZiBzb21l IHN5c3RlbSBjb21tYW5kcyAqLwotCi1jaGFyICpERUxDTUQgPSAicm0gLWYgIjsgICAgICAgICAg ICAgICAgLyogRm9yIGZpbGUgZGVsZXRpb24gKi8KLWNoYXIgKkNQWUNNRCA9ICJjcCAiOyAgICAg ICAgICAgICAgICAgICAvKiBGb3IgZmlsZSBjb3B5ICovCi1jaGFyICpSRU5DTUQgPSAibXYgIjsg ICAgICAgICAgICAgICAgICAgLyogRm9yIGZpbGUgcmVuYW1lICovCi1jaGFyICpQV0RDTUQgPSAi cHdkICI7ICAgICAgICAgICAgICAgICAgLyogRm9yIHNheWluZyB3aGVyZSBJIGFtICovCi0KLSNp ZmRlZiBDT01NRU5UCi0jaWZkZWYgSFBVWDEwCi1jaGFyICpESVJDTUQgPSAiL3Vzci9iaW4vbHMg LWwgIjsgICAgICAgLyogRm9yIGRpcmVjdG9yeSBsaXN0aW5nICovCi1jaGFyICpESVJDTTIgPSAi L3Vzci9iaW4vbHMgLWwgIjsgICAgICAgLyogRm9yIGRpcmVjdG9yeSBsaXN0aW5nLCBubyBhcmdz ICovCi0jZWxzZQotY2hhciAqRElSQ01EID0gIi9iaW4vbHMgLWwgIjsgICAgICAgICAgIC8qIEZv ciBkaXJlY3RvcnkgbGlzdGluZyAqLwotY2hhciAqRElSQ00yID0gIi9iaW4vbHMgLWwgIjsgICAg ICAgICAgIC8qIEZvciBkaXJlY3RvcnkgbGlzdGluZywgbm8gYXJncyAqLwotI2VuZGlmIC8qIEhQ VVgxMCAqLwotI2Vsc2UKLWNoYXIgKkRJUkNNRCA9ICJscyAtbCAiOyAgICAgICAgICAgICAgICAv KiBGb3IgZGlyZWN0b3J5IGxpc3RpbmcgKi8KLWNoYXIgKkRJUkNNMiA9ICJscyAtbCAiOyAgICAg ICAgICAgICAgICAvKiBGb3IgZGlyZWN0b3J5IGxpc3RpbmcsIG5vIGFyZ3MgKi8KLSNlbmRpZiAv KiBDT01NRU5UICovCi0KLWNoYXIgKlRZUENNRCA9ICJjYXQgIjsgICAgICAgICAgICAgICAgICAv KiBGb3IgdHlwaW5nIGEgZmlsZSAqLwotCi0jaWZkZWYgSFBVWAotY2hhciAqTUFJTENNRCA9ICJt YWlseCI7ICAgICAgICAgICAgICAgIC8qIEZvciBzZW5kaW5nIG1haWwgKi8KLSNlbHNlCi0jaWZk ZWYgREdVWDU0MAotY2hhciAqTUFJTENNRCA9ICJtYWlseCI7Ci0jZWxzZQotI2lmZGVmIFVOSVgK LSNpZmRlZiBDS19NQUlMQ01ECi1jaGFyICpNQUlMQ01EID0gQ0tfTUFJTENNRDsJCS8qIENGTEFH UyBvdmVycmlkZSAqLwotI2Vsc2UKLWNoYXIgKk1BSUxDTUQgPSAiTWFpbCI7CQkJLyogRGVmYXVs dCAqLwotI2VuZGlmIC8qIENLX01BSUxDTUQgKi8KLSNlbHNlCi1jaGFyICpNQUlMQ01EID0gIiI7 Ci0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIEhQVVggKi8KLSNlbmRpZiAvKiBER1VYNDAg Ki8KLQotI2lmZGVmIFVOSVgKLSNpZmRlZiBBTllCU0QgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBCU0QgdXNlcyBscHIgdG8gc3Bvb2wgKi8KLSNpZmRlZiBER1VYNTQwICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBBbmQgREcvVVggKi8KLWNoYXIgKiBQUklOVENNRCA9ICJscCI7Ci0j ZWxzZQotY2hhciAqIFBSSU5UQ01EID0gImxwciI7Ci0jZW5kaWYgLyogREdVWDU0MCAqLwotI2Vs c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN5cyBWIHVzZXMgbHAgKi8K LSNpZmRlZiBUUlMxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGNlcHQgZm9yIFRh bmR5LTE2LzYwMDAuLi4gKi8KLWNoYXIgKiBQUklOVENNRCA9ICJscHIiOwotI2Vsc2UKLWNoYXIg KiBQUklOVENNRCA9ICJscCI7Ci0jZW5kaWYgLyogVFJTMTYgKi8KLSNlbmRpZiAvKiBBTllCU0Qg Ki8KLSNlbHNlICAvKiBOb3QgVU5JWCAqLwotI2RlZmluZSBQUklOVENNRCAiIgotI2VuZGlmIC8q IFVOSVggKi8KLQotI2lmZGVmIEZUMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZv cnR1bmUgRm9yOlBybyAxLjggKi8KLSN1bmRlZiBCU0Q0Ci0jZW5kaWYgLyogRlQxOCAqLwotCi0j aWZkZWYgQlNENAotY2hhciAqU1BBQ01EID0gInB3ZCA7IGRmIC4iOyAgICAgICAgICAgIC8qIFNw YWNlIGluIGN1cnJlbnQgZGlyZWN0b3J5ICovCi0jZWxzZQotI2lmZGVmIEZUMTgKLWNoYXIgKlNQ QUNNRCA9ICJwd2QgOyBkdSA7IGRmIC4iOwotI2Vsc2UKLWNoYXIgKlNQQUNNRCA9ICJkZiAiOwot I2VuZGlmIC8qIEZUMTggKi8KLSNlbmRpZiAvKiBCU0Q0ICovCi0KLWNoYXIgKlNQQUNNMiA9ICJk ZiAiOyAgICAgICAgICAgICAgICAgICAvKiBGb3Igc3BhY2UgaW4gc3BlY2lmaWVkIGRpcmVjdG9y eSAqLwotCi0jaWZkZWYgRlQxOAotI2RlZmluZSBCU0Q0Ci0jZW5kaWYgLyogRlQxOCAqLwotCi0j aWZkZWYgQlNENAotY2hhciAqV0hPQ01EID0gImZpbmdlciAiOwotI2Vsc2UKLWNoYXIgKldIT0NN RCA9ICJ3aG8gIjsKLSNlbmRpZiAvKiBCU0Q0ICovCi0KLS8qIE1vcmUgc3lzdGVtLWRlcGVuZGVu dCBpbmNsdWRlcywgd2hpY2ggZGVwZW5kIG9uIHN5bWJvbHMgZGVmaW5lZCAqLwotLyogaW4gdGhl IEtlcm1pdC1zcGVjaWZpYyBpbmNsdWRlcy4gIE9oIHdoYXQgYSB0YW5nbGVkIHdlYiB3ZSB3ZWF2 ZS4uLiAqLwotCi0jaWZkZWYgQ09IRVJFTlQgICAgICAgICAgICAgICAgICAgICAgICAgLyogPHN5 cy9maWxlLmg+ICovCi0jZGVmaW5lIE5PRklMRUgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0j aWZkZWYgTUlOSVgKLSNkZWZpbmUgTk9GSUxFSAotI2VuZGlmIC8qIE1JTklYICovCi0KLSNpZmRl ZiBhZWdpcwotI2RlZmluZSBOT0ZJTEVICi0jZW5kaWYgLyogYWVnaXMgKi8KLQotI2lmZGVmIHVu b3MKLSNkZWZpbmUgTk9GSUxFSAotI2VuZGlmIC8qIHVub3MgKi8KLQotI2lmbmRlZiBOT0ZJTEVI Ci0jaW5jbHVkZSA8c3lzL2ZpbGUuaD4KLSNlbmRpZiAvKiBOT0ZJTEVIICovCi0KLSNpZm5kZWYg aXM2OGsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHRvIGluY2x1ZGUgPGZj bnRsLmg+ICovCi0jaWZuZGVmIEJTRDQxICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxs IGJ1dCBhIGNvdXBsZSBVTklYZXMgaGF2ZSBpdC4gKi8KLSNpZm5kZWYgRlQxOAotI2lmbmRlZiBD T0hFUkVOVAotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSNlbmRp ZiAvKiBGVDE4ICAqLwotI2VuZGlmIC8qIEJTRDQxICovCi0jZW5kaWYgLyogaXM2OGsgKi8KLQot I2lmZGVmIENPSEVSRU5UCi0jaWZkZWYgX0kzODYKLSNpbmNsdWRlIDxmY250bC5oPgotI2Vsc2UK LSNpbmNsdWRlIDxzeXMvZmNudGwuaD4KLSNlbmRpZiAvKiBfSTM4NiAqLwotI2VuZGlmIC8qIENP SEVSRU5UICovCi0KLWV4dGVybiBpbnQgaW5zZXJ2ZXI7CQkJLyogSSBhbSBJS1NEICovCi1pbnQg Z3Vlc3QgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5vbnltb3VzIHVzZXIgKi8K LQotI2lmZGVmIElLU0QKLWV4dGVybiBpbnQgaXNndWVzdDsKLWV4dGVybiBjaGFyICogYW5vbnJv b3Q7Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZkZWYgQ0tfTE9HSU4KLSNkZWZpbmUgR1VFU1RQ QVNTIDI1Ngotc3RhdGljIGNoYXIgZ3Vlc3RwYXNzW0dVRVNUUEFTU10gPSB7IE5VTCwgTlVMIH07 IC8qIEFub255bW91cyAicGFzc3dvcmQiICovCi1zdGF0aWMgaW50IGxvZ2dlZF9pbiA9IDA7ICAg ICAgICAgICAgICAgLyogU2V0IHdoZW4gdXNlciBpcyBsb2dnZWQgaW4gKi8KLXN0YXRpYyBpbnQg YXNrcGFzc3dkID0gMDsgICAgICAgICAgICAgICAvKiBIYXZlIE9LIHVzZXIsIG11c3QgYXNrIGZv ciBwYXNzd2QgKi8KLSNpZmRlZiBDS19QQU0KLWV4dGVybiBpbnQgZ290ZW1wdHlwYXNzd2Q7Ci0j ZW5kaWYgLyogQ0tfUEFNICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotI2lmZGVmIENLUk9P VAotc3RhdGljIGNoYXIgY2tyb290W0NLTUFYUEFUSCsxXSA9IHsgTlVMLCBOVUwgfTsKLXN0YXRp YyBpbnQgY2tyb290c2V0ID0gMDsKLWludCBja3Jvb3RlcnIgPSAwOwotI2VuZGlmIC8qIENLUk9P VCAqLwotCi1fUFJPVE9UWVAoIFZPSUQgaWdub3JzaWdzLCAodm9pZCkgKTsKLV9QUk9UT1RZUCgg Vk9JRCByZXN0b3JzaWdzLCAodm9pZCkgKTsKLSNpZmRlZiBTRUxFQ1QKLV9QUk9UT1RZUCggaW50 IHR0d2FpdCwgKGludCwgaW50KSApOwkvKiBja3V0aW8uYyAqLwotI2VuZGlmCS8qIFNFTEVDVCAq LwotCi0vKgotICBDaGFuZ2UgYXJndW1lbnQgdG8gIihjb25zdCBjaGFyICopIiBpZiB0aGlzIGNh dXNlcyB0cm91YmxlLgotICBPci4uLiBpZiBpdCBjYXVzZXMgdHJvdWJsZSwgdGhlbiBtYXliZSBp dCB3YXMgYWxyZWFkeSBkZWNsYXJlZAotICBpbiBhIGhlYWRlciBmaWxlIGFmdGVyIGFsbCwgc28g eW91IGNhbiByZW1vdmUgdGhpcyBwcm90b3R5cGUuCi0qLwotI2lmbmRlZiBOREdQV05BTSAvKiBJ ZiBub3QgZGVmaW5lZCBObyBEZWNsYXJlIGdldHB3bmFtLi4uICovCi0jaWZuZGVmIF9QT1NJWF9T T1VSQ0UKLSNpZm5kZWYgTkVYVAotI2lmbmRlZiBTVlI0Ci0vKiBQT1NJWCA8cHdkLmg+IGFscmVh ZHkgZ2F2ZSBwcm90b3R5cGVzIGZvciB0aGVzZS4gKi8KLSNpZmRlZiBJUklYNDAKLV9QUk9UT1RZ UCggc3RydWN0IHBhc3N3ZCAqIGdldHB3bmFtLCAoY29uc3QgY2hhciAqKSApOwotI2Vsc2UKLSNp ZmRlZiBJUklYNTEKLV9QUk9UT1RZUCggc3RydWN0IHBhc3N3ZCAqIGdldHB3bmFtLCAoY29uc3Qg Y2hhciAqKSApOwotI2Vsc2UKLSNpZmRlZiBNX1VOSVgKLV9QUk9UT1RZUCggc3RydWN0IHBhc3N3 ZCAqIGdldHB3bmFtLCAoY29uc3QgY2hhciAqKSApOwotI2Vsc2UKLSNpZmRlZiBIUFVYOQotX1BS T1RPVFlQKCBzdHJ1Y3QgcGFzc3dkICogZ2V0cHduYW0sIChjb25zdCBjaGFyICopICk7Ci0jZWxz ZQotI2lmZGVmIEhQVVgxMAotX1BST1RPVFlQKCBzdHJ1Y3QgcGFzc3dkICogZ2V0cHduYW0sIChj b25zdCBjaGFyICopICk7Ci0jZWxzZQotI2lmZGVmIERDR1BXTkFNCi1fUFJPVE9UWVAoIHN0cnVj dCBwYXNzd2QgKiBnZXRwd25hbSwgKGNvbnN0IGNoYXIgKikgKTsKLSNlbHNlCi1fUFJPVE9UWVAo IHN0cnVjdCBwYXNzd2QgKiBnZXRwd25hbSwgKGNoYXIgKikgKTsKLSNlbmRpZiAvKiBEQ0dQV05B TSAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlmIC8qIEhQVVg5ICovCi0jZW5kaWYgLyog TV9VTklYICovCi0jZW5kaWYgLyogSVJJWDUxICovCi0jZW5kaWYgLyogSVJJWDQwICovCi0jaWZu ZGVmIFNVTk9TNAotI2lmbmRlZiBIUFVYOQotI2lmbmRlZiBIUFVYMTAKLSNpZm5kZWYgX1NDT19E UwotX1BST1RPVFlQKCBzdHJ1Y3QgcGFzc3dkICogZ2V0cHd1aWQsIChQV0lEX1QpICk7Ci0jZW5k aWYgLyogX1NDT19EUyAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlmIC8qIEhQVVg5ICov Ci0jZW5kaWYgLyogU1VOT1M0ICovCi1fUFJPVE9UWVAoIHN0cnVjdCBwYXNzd2QgKiBnZXRwd2Vu dCwgKHZvaWQpICk7Ci0jZW5kaWYgLyogU1ZSNCAqLwotI2VuZGlmIC8qIE5FWFQgKi8KLSNlbmRp ZiAvKiBfUE9TSVhfU09VUkNFICovCi0jZW5kaWYgLyogTkRHUFdOQU0gKi8KLQotI2lmZGVmIENL X1NIQURPVyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNoYWRvdyBQYXNzd29yZHMuLi4gKi8K LSNpbmNsdWRlIDxzaGFkb3cuaD4KLSNlbmRpZiAvKiBDS19TSEFET1cgKi8KLSNpZmRlZiBDS19Q QU0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQQU0uLi4gKi8KLSNpZmRlZiBNQUNPU1gK LSNpbmNsdWRlIDxwYW0vcGFtX2FwcGwuaD4KLSNlbHNlIC8qIE1BQ09TWCAqLwotI2luY2x1ZGUg PHNlY3VyaXR5L3BhbV9hcHBsLmg+Ci0jZW5kaWYgLyogTUFDT1NYICovCi0jaWZuZGVmIFBBTV9T RVJWSUNFX1RZUEUgICAgICAgICAgICAgICAgLyogRGVmaW5lcyB3aGljaCBQQU0gc2VydmljZSB3 ZSBhcmUgKi8KLSNkZWZpbmUgUEFNX1NFUlZJQ0VfVFlQRSAia2VybWl0IgotI2VuZGlmIC8qIFBB TV9TRVJWSUNFX1RZUEUgKi8KLQotI2lmZGVmIFNPTEFSSVMKLSNkZWZpbmUgUEFNX0NPTlNUIAot I2Vsc2UgLyogU09MQVJJUyAqLwotI2RlZmluZSBQQU1fQ09OU1QgQ09OU1QKLSNlbmRpZiAKLQot c3RhdGljIGNoYXIgKiBwYW1fcHcgPSBOVUxMOwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotcGFt X2NiKGludCBudW1fbXNnLAotICAgICAgIFBBTV9DT05TVCBzdHJ1Y3QgcGFtX21lc3NhZ2UgKipt c2csCi0gICAgICAgc3RydWN0IHBhbV9yZXNwb25zZSAqKnJlc3AsCi0gICAgICAgdm9pZCAqYXBw ZGF0YV9wdHIKLSAgICAgICApCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotcGFtX2NiKG51bV9tc2cs IG1zZywgcmVzcCwgYXBwZGF0YV9wdHIpCi0gICAgaW50IG51bV9tc2c7Ci0gICAgUEFNX0NPTlNU IHN0cnVjdCBwYW1fbWVzc2FnZSAqKm1zZzsKLSAgICBzdHJ1Y3QgcGFtX3Jlc3BvbnNlICoqcmVz cDsKLSAgICB2b2lkICphcHBkYXRhX3B0cjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAg IGludCBpOwotCi0gICAgZGVidWcoRjExMSwicGFtX2NiIiwibnVtX21zZyIsbnVtX21zZyk7Ci0K LSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX21zZzsgaSsrKSB7Ci0gICAgICAgIGNoYXIgbWVzc2Fn ZVtQQU1fTUFYX01TR19TSVpFXTsKLQotICAgICAgICAvKiBJc3N1ZSBwcm9tcHQgYW5kIGdldCBy ZXNwb25zZSAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJwYW1fY2IiLCJNZXNzYWdlIixpKTsKLSAg ICAgICAgZGVidWcoRjExMSwicGFtX2NiIixtc2dbaV0tPm1zZyxtc2dbaV0tPm1zZ19zdHlsZSk7 Ci0gICAgICAgIGlmIChtc2dbaV0tPm1zZ19zdHlsZSA9PSBQQU1fRVJST1JfTVNHKSB7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTExLCJwYW1fY2IiLCJQQU0gRVJST1IiLDApOwotICAgICAgICAgICAg ZnByaW50ZihzdGRvdXQsIiVzXG4iLCBtc2dbaV0tPm1zZyk7Ci0gICAgICAgICAgICByZXR1cm4o MCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobXNnW2ldLT5tc2dfc3R5bGUgPT0gUEFNX1RFWFRfSU5G TykgewotICAgICAgICAgICAgZGVidWcoRjExMSwicGFtX2NiIiwiUEFNIFRFWFQgSU5GTyIsMCk7 Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwiJXNcbiIsIG1zZ1tpXS0+bXNnKTsKLSAgICAg ICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfSBlbHNlIGlmIChtc2dbaV0tPm1zZ19zdHlsZSA9 PSBQQU1fUFJPTVBUX0VDSE9fT0ZGKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJwYW1fY2Ii LCJSZWFkaW5nIHJlc3BvbnNlLCBubyBlY2hvIiwwKTsKLSAgICAgICAgICAgIC8qIFVnbHkgaGFj ay4gIFdlIGNoZWNrIHRvIHNlZSBpZiBhIHBhc3N3b3JkIGhhcyBiZWVuIHB1c2hlZCAqLwotICAg ICAgICAgICAgLyogaW50byB6dnBhc3N3ZCgpLiAgVGhpcyB3b3VsZCBiZSB0cnVlIGlmIHRoZSBw YXNzd29yZCB3YXMgICovCi0gICAgICAgICAgICAvKiByZWNlaXZlZCBieSBSRU1PVEUgTE9HSU4u ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChwYW1f cHcpIHsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkobWVzc2FnZSxwYW1fcHcsUEFNX01BWF9N U0dfU0laRSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZWFkcGFzcygo Y2hhciAqKW1zZ1tpXS0+bXNnLG1lc3NhZ2UsUEFNX01BWF9NU0dfU0laRSk7Ci0gICAgICAgIH0g ZWxzZSBpZiAobXNnW2ldLT5tc2dfc3R5bGUgPT0gUEFNX1BST01QVF9FQ0hPX09OKSB7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTExLCJwYW1fY2IiLCJSZWFkaW5nIHJlc3BvbnNlLCB3aXRoIGVjaG8i LDApOwotICAgICAgICAgICAgcmVhZHRleHQoKGNoYXIgKiltc2dbaV0tPm1zZyxtZXNzYWdlLFBB TV9NQVhfTVNHX1NJWkUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVidWcoRjEx MSwicGFtX2NiIiwidW5rbm93biBzdHlsZSIsMCk7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0g ICAgICAgIH0KLQotICAgICAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhpcyBtZXNzYWdlJ3Mg cmVzcG9uc2Ugc3RydWN0dXJlICovCi0gICAgICAgIHJlc3BbaV0gPSAoc3RydWN0IHBhbV9yZXNw b25zZSAqKSBtYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgcGFtX3Jlc3BvbnNlKSk7Ci0gICAgICAgIGlm ICghcmVzcFtpXSkgewotICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEw LCJwYW1fY2IiLCJtYWxsb2MgZmFpbHVyZSIsMCk7Ci0gICAgICAgICAgICBmb3IgKGogPSAwOyBq IDwgaTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgZnJlZShyZXNwW2pdLT5yZXNwKTsKLSAgICAg ICAgICAgICAgICBmcmVlKHJlc3Bbal0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0 dXJuKDApOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogQWxsb2NhdGUgYSBidWZmZXIgZm9yIHRo ZSByZXNwb25zZSAqLwotICAgICAgICByZXNwW2ldLT5yZXNwID0gKGNoYXIgKikgbWFsbG9jKChp bnQpc3RybGVuKG1lc3NhZ2UpICsgMSk7Ci0gICAgICAgIGlmICghcmVzcFtpXS0+cmVzcCkgewot ICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJwYW1fY2IiLCJtYWxs b2MgZmFpbHVyZSIsMCk7Ci0gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0g ICAgICAgICAgICAgICAgZnJlZShyZXNwW2pdLT5yZXNwKTsKLSAgICAgICAgICAgICAgICBmcmVl KHJlc3Bbal0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnJlZShyZXNwW2ldKTsKLSAg ICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotICAgICAgICAvKiBSZXR1cm4gdGhlIHJl c3VsdHMgYmFjayB0byBQQU0gKi8KLSAgICAgICAgc3RyY3B5KHJlc3BbaV0tPnJlc3AsIG1lc3Nh Z2UpOwkvKiBzYWZlIChwcmVjaGVja2VkKSAqLwotICAgICAgICByZXNwW2ldLT5yZXNwX3JldGNv ZGUgPSAwOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJwYW1fY2IiLCJFeGl0aW5nIiwwKTsKLSAg ICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogQ0tfUEFNICovCi0KLS8qIERlZmluZSBtYWNyb3Mg Zm9yIGdldHRpbmcgZmlsZSB0eXBlICovCi0KLSNpZmRlZiBPWE9TCi0vKgotICBPbGl2ZXR0aSBY L09TIDIuMyBoYXMgU19JU1JFRyBhbmQgU19JU0RJUiBkZWZpbmVkCi0gIGluY29ycmVjdGx5LCBz byB3ZSBmb3JjZSB0aGVpciByZWRlZmluaXRpb24uCi0qLwotI3VuZGVmIFNfSVNSRUcKLSN1bmRl ZiBTX0lTRElSCi0jZW5kaWYgLyogT1hPUyAqLwotCi0jaWZkZWYgVVRTViAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU2FtZSBkZWFsIGZvciBBbWRhaGwgVVRTViAqLwotI3VuZGVmIFNf SVNSRUcKLSN1bmRlZiBTX0lTRElSCi0jZW5kaWYgLyogVVRTViAqLwotCi0jaWZkZWYgVU5JU1lT NTIgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5kIGZvciBVTklTWVMgVVRTIFYgNS4yICov Ci0jdW5kZWYgU19JU1JFRwotI3VuZGVmIFNfSVNESVIKLSNlbmRpZiAvKiBVTklTWVM1MiAqLwot Ci0jaWZkZWYgSUNMU1ZSMyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5kIGZvciBvbGQg SUNMIHZlcnNpb25zICovCi0jdW5kZWYgU19JU1JFRwotI3VuZGVmIFNfSVNESVIKLSNlbmRpZiAv KiBJQ0xTVlIzICovCi0KLSNpZmRlZiBJU0RJUkJVRyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBBbHNvIGFsbG93IHRoaXMgZnJvbSBjb21tYW5kIGxpbmUgKi8KLSNpZmRlZiBTX0lTUkVHCi0j dW5kZWYgU19JU1JFRwotI2VuZGlmIC8qIFNfSVNSRUcgKi8KLSNpZmRlZiBTX0lTRElSCi0jdW5k ZWYgU19JU0RJUgotI2VuZGlmIC8qICBTX0lTRElSICovCi0jZW5kaWYgLyogSVNESVJCVUcgKi8K LQotI2lmbmRlZiBfSUZNVAotI2lmZGVmIFNfSUZNVAotI2RlZmluZSBfSUZNVCBTX0lGTVQKLSNl bHNlCi0jZGVmaW5lIF9JRk1UIDAxNzAwMDAKLSNlbmRpZiAvKiBTX0lGTVQgKi8KLSNlbmRpZiAv KiBfSUZNVCAqLwotCi0jaWZuZGVmIFNfSVNSRUcKLSNkZWZpbmUgU19JU1JFRyhtKSAoKChtKSAm IFNfSUZNVCkgPT0gU19JRlJFRykKLSNlbmRpZiAvKiBTX0lTUkVHICovCi0jaWZuZGVmIFNfSVNE SVIKLSNkZWZpbmUgU19JU0RJUihtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRkRJUikKLSNlbmRp ZiAvKiBTX0lTRElSICovCi0KLS8qIFRoZSBmb2xsb3dpbmcgbWFpbmx5IGZvciBOZVhUU1RFUC4u LiAqLwotCi0jaWZuZGVmIFNfSVdVU1IKLSNkZWZpbmUgU19JV1VTUiAwMDAwMjAwCi0jZW5kaWYg LyogU19JV1VTUiAqLwotCi0jaWZuZGVmIFNfSVJHUlAKLSNkZWZpbmUgU19JUkdSUCAwMDAwMDQw Ci0jZW5kaWYgLyogU19JUkdSUCAqLwotCi0jaWZuZGVmIFNfSVdHUlAKLSNkZWZpbmUgU19JV0dS UCAwMDAwMDIwCi0jZW5kaWYgLyogU19JV0dSUCAqLwotCi0jaWZuZGVmIFNfSVhHUlAKLSNkZWZp bmUgU19JWEdSUCAwMDAwMDEwCi0jZW5kaWYgLyogU19JWEdSUCAqLwotCi0jaWZuZGVmIFNfSVJP VEgKLSNkZWZpbmUgU19JUk9USCAwMDAwMDA0Ci0jZW5kaWYgLyogU19JUk9USCAqLwotCi0jaWZu ZGVmIFNfSVdPVEgKLSNkZWZpbmUgU19JV09USCAwMDAwMDAyCi0jZW5kaWYgLyogU19JV09USCAq LwotCi0jaWZuZGVmIFNfSVhPVEgKLSNkZWZpbmUgU19JWE9USCAwMDAwMDAxCi0jZW5kaWYgLyog U19JWE9USCAqLwotLyoKLSAgRGVmaW5lIG1heGltdW0gbGVuZ3RoIGZvciBhIGZpbGUgbmFtZSBp ZiBub3QgYWxyZWFkeSBkZWZpbmVkLgotICBOT1RFOiBUaGlzIGFwcGxpZXMgdG8gYSBwYXRoIHNl Z21lbnQgKGRpcmVjdG9yeSBvciBmaWxlIG5hbWUpLAotICBub3QgdGhlIGVudGlyZSBwYXRoIHN0 cmluZywgd2hpY2ggY2FuIGJlIENLTUFYUEFUSCBieXRlcyBsb25nLgotKi8KLSNpZmRlZiBRTlgK LSNpZmRlZiBfTUFYX0ZOQU1FCi0jZGVmaW5lIE1BWE5BTUxFTiBfTUFYX0ZOQU1FCi0jZWxzZQot I2RlZmluZSBNQVhOQU1MRU4gNDgKLSNlbmRpZiAvKiBfTUFYX0ZOQU1FICovCi0jZWxzZQotI2lm bmRlZiBNQVhOQU1MRU4KLSNpZmRlZiBzdW4KLSNkZWZpbmUgTUFYTkFNTEVOIDI1NQotI2Vsc2UK LSNpZmRlZiBGSUxFTkFNRV9NQVgKLSNkZWZpbmUgTUFYTkFNTEVOIEZJTEVOQU1FX01BWAotI2Vs c2UKLSNpZmRlZiBOQU1FX01BWAotI2RlZmluZSBNQVhOQU1MRU4gTkFNRV9NQVgKLSNlbHNlCi0j aWZkZWYgX1BPU0lYX05BTUVfTUFYCi0jZGVmaW5lIE1BWE5BTUxFTiBfUE9TSVhfTkFNRV9NQVgK LSNlbHNlCi0jaWZkZWYgX0RfTkFNRV9NQVgKLSNkZWZpbmUgTUFYTkFNTEVOIF9EX05BTUVfTUFY Ci0jZWxzZQotI2lmZGVmIERJUlNJWgotI2RlZmluZSBNQVhOQU1MRU4gRElSU0laCi0jZWxzZQot I2RlZmluZSBNQVhOQU1MRU4gMTQKLSNlbmRpZiAvKiBESVJTSVogKi8KLSNlbmRpZiAvKiBfRF9O QU1FX01BWCAqLwotI2VuZGlmIC8qIF9QT1NJWF9OQU1FX01BWCAqLwotI2VuZGlmIC8qIE5BTUVf TUFYICovCi0jZW5kaWYgLyogRklMRU5BTUVfTUFYICovCi0jZW5kaWYgLyogc3VuICovCi0jZW5k aWYgLyogTUFYTkFNTEVOICovCi0jZW5kaWYgLyogUU5YICovCi0KLSNpZmRlZiBDT01NRU5UCi0v KiBBcyBvZiAyMDAxLTExLTAzIHRoaXMgaXMgaGFuZGxlZCBpbiBja2NkZWIuaCAqLwotLyogTG9u Z2VzdCBwYXRobmFtZSAuLi4gKi8KLS8qCi0gIEJld2FyZTogTUFYUEFUSExFTiBpcyBvbmUgb2Yg VU5JWCdzIGRpcnR5IGxpdHRsZSBzZWNyZXRzLiAgV2hlcmUgaXMgaXQKLSAgZGVmaW5lZD8gIFdo byBrbm93cy4uLiAgPHBhcmFtLmg+LCA8bW9kLmg+LCA8dW5pc3RkLmg+LCA8bGltaXRzLmg+LCAu Li4KLSAgVGhlcmUgaXMgbm90IG5lY2Vzc2FyaWx5IGV2ZW4gYSBkZWZpbml0aW9uIGZvciBpdCBh bnl3aGVyZSwgb3IgaXQgbWlnaHQgaGF2ZQotICBhbm90aGVyIG5hbWUuICBJZiB5b3UgZ2V0IGl0 IHdyb25nLCBiYWQgdGhpbmdzIGhhcHBlbiB3aXRoIGdldGN3ZCgpIGFuZC9vcgotICBnZXR3ZCgp LiAgSWYgeW91IGFsbG9jYXRlIGEgYnVmZmVyIHRoYXQgaXMgdG9vIHNob3J0LCBnZXR3ZCgpIG1p Z2h0IHdyaXRlCi0gIG92ZXIgbWVtb3J5IGFuZCBnZXRjd2QoKSB3aWxsIGZhaWwgd2l0aCBFUkFO R0UuICBUaGUgZGVmaW5pdGlvbnMgb2YgdGhlc2UKLSAgZnVuY3Rpb25zIChlLmcuIGluIFNWSUQg b3IgUE9TSVguMSkgZG8gbm90IHRlbGwgeW91IGhvdyB0byBkZXRlcm1pbmUgdGhlCi0gIG1heGlt dW0gcGF0aCBsZW5ndGggaW4gb3JkZXIgdG8gYWxsb2NhdGUgYSBidWZmZXIgdGhhdCBpcyB0aGUg cmlnaHQgc2l6ZS4KLSovCi0jaWZkZWYgQlNENDQKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4gICAg ICAgICAgICAgICAgICAvKiBGb3IgTUFYUEFUSExFTiAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0j aWZkZWYgQ09IRVJFTlQKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4gIC8qIGZvciBNQVhQQVRITEVO LCBuZWVkZWQgZm9yIC1ERElSRU5UICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSNlbmRpZiAv KiBDT01NRU5UICovCi0KLSNpZmRlZiBNQVhQQVRITEVOCi0jaWZkZWYgTUFYUEFUSAotI3VuZGVm IE1BWFBBVEgKLSNlbmRpZiAvKiBNQVhQQVRIICovCi0jZGVmaW5lIE1BWFBBVEggTUFYUEFUSExF TgotI2Vsc2UKLSNpZmRlZiBQQVRIX01BWAotI2RlZmluZSBNQVhQQVRIIFBBVEhfTUFYCi0jZWxz ZQotI2lmZGVmIF9QT1NJWF9QQVRIX01BWAotI2RlZmluZSBNQVhQQVRIIF9QT1NJWF9QQVRIX01B WAotI2Vsc2UKLSNpZmRlZiBCU0Q0MgotI2RlZmluZSBNQVhQQVRIIDEwMjQKLSNlbHNlCi0jaWZk ZWYgU1ZSNAotI2RlZmluZSBNQVhQQVRIIDEwMjQKLSNlbHNlCi0jZGVmaW5lIE1BWFBBVEggMjU1 Ci0jZW5kaWYgLyogU1ZSNCAqLwotI2VuZGlmIC8qIEJTRDQyICovCi0jZW5kaWYgLyogX1BPU0lY X1BBVEhfTUFYICovCi0jZW5kaWYgLyogUEFUSF9NQVggKi8KLSNlbmRpZiAvKiBNQVhQQVRITEVO ICovCi0KLS8qIE1heGltdW0gbnVtYmVyIG9mIGZpbGVuYW1lcyBmb3Igd2lsZGNhcmQgZXhwYW5z aW9uICovCi0KLSNpZm5kZWYgTUFYV0xECi0vKiBBbHJlYWR5IGRlZmluZWQgaW4gY2tjZGViLmgg c28gdGhlIGZvbGxvd2luZyBpcyBzdXBlcmZsdW91cy4gKi8KLS8qIERvbid0IGV4cGVjdCBjaGFu Z2luZyB0aGVtIHRvIGhhdmUgYW55IGVmZmVjdC4gKi8KLSNpZmRlZiBDS19TTUFMTAotI2RlZmlu ZSBNQVhXTEQgNTAKLSNlbHNlCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgTUFYV0xEIDEwMjQw MAotI2Vsc2UKLSNkZWZpbmUgTUFYV0xEIDgxOTIKLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotI2Vu ZGlmIC8qIENLX1NNQUxMICovCi0jZW5kaWYgLyogTUFYV0xEICovCi0KLXN0YXRpYyBpbnQgbWF4 bmFtZXMgPSBNQVhXTEQ7Ci0KLS8qIERlZmluZSB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nIHNwYWNl IGZvciBmaWxlbmFtZSBleHBhbnNpb24uICovCi0KLSNpZm5kZWYgRFlOQU1JQwotI2lmZGVmIFBS T1ZYMQotI2RlZmluZSBTU1BBQ0UgNTAwCi0jZWxzZQotI2lmZGVmIEJTRDI5Ci0jZGVmaW5lIFNT UEFDRSA1MDAKLSNlbHNlCi0jaWZkZWYgcGRwMTEKLSNkZWZpbmUgU1NQQUNFIDUwMAotI2Vsc2UK LSNpZmRlZiBhZWdpcwotI2RlZmluZSBTU1BBQ0UgMTAwMDAgICAgICAgICAgICAgICAgICAgIC8q IFNpemUgb2Ygc3RyaW5nLWdlbmVyYXRpbmcgYnVmZmVyICovCi0jZWxzZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBzdGF0aWMgYnVmZmVyIHNpemUgKi8KLSNp ZmRlZiBCSUdCVUZPSwotI2RlZmluZSBTU1BBQ0UgNjUwMDAgICAgICAgICAgICAgICAgICAgIC8q IFNpemUgb2Ygc3RyaW5nLWdlbmVyYXRpbmcgYnVmZmVyICovCi0jZWxzZQotI2RlZmluZSBTU1BB Q0UgMjAwMCAgICAgICAgICAgICAgICAgICAgIC8qIHNpemUgb2Ygc3RyaW5nLWdlbmVyYXRpbmcg YnVmZmVyICovCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLSNlbmRpZiAvKiBhZWdpcyAqLwotI2Vu ZGlmIC8qIHBkcDExICovCi0jZW5kaWYgLyogQlNEMjkgKi8KLSNlbmRpZiAvKiBQUk9WWDEgKi8K LXN0YXRpYyBjaGFyIHNzcGFjZVtTU1BBQ0VdOyAgICAgICAgICAgICAvKiBCdWZmZXIgZm9yIGdl bmVyYXRpbmcgZmlsZW5hbWVzICovCi0jZWxzZSAvKiBpcyBEWU5BTUlDICovCi0jaWZkZWYgQ0tf NjRCSVQKLSNkZWZpbmUgU1NQQUNFIDIwMDAwMDAwMDAJCS8qIFR3byBiaWxsaW9uIGJ5dGVzICov Ci0jZWxzZQotI2lmZGVmIEJJR0JVRk9LCi0jZGVmaW5lIFNTUEFDRSAxMDAwMDAwMAkJCS8qIFRl biBtaWxsaW9uICovCi0jZWxzZQotI2RlZmluZSBTU1BBQ0UgMTAwMDAJCQkvKiBUZW4gdGhvdXNh bmQgKi8KLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotI2VuZGlmCS8qIENLXzY0QklUICovCi1jaGFy ICpzc3BhY2UgPSAoY2hhciAqKTA7Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotc3RhdGljIGludCBz c3BsZW4gPSBTU1BBQ0U7CQkvKiBMZW5ndGggb2Ygc3RyaW5nIHNwYWNlIGJ1ZmZlciAqLwotCi0j aWZkZWYgRENMRkRPUEVOCi0vKiBmZG9wZW4oKSBuZWVkcyBkZWNsYXJpbmcgYmVjYXVzZSBpdCdz IG5vdCBkZWNsYXJlZCBpbiA8c3RkaW8uaD4gKi8KLV9QUk9UT1RZUCggRklMRSAqIGZkb3Blbiwg KGludCwgY2hhciAqKSApOwotI2VuZGlmIC8qIERDTEZET1BFTiAqLwotCi0jaWZkZWYgRENMUE9Q RU4KLS8qIHBvcGVuKCkgbmVlZHMgZGVjbGFyaW5nIGJlY2F1c2UgaXQncyBub3QgZGVjbGFyZWQg aW4gPHN0ZGlvLmg+ICovCi1fUFJPVE9UWVAoIEZJTEUgKiBwb3BlbiwgKGNoYXIgKiwgY2hhciAq KSApOwotI2VuZGlmIC8qIERDTFBPUEVOICovCi0KLWV4dGVybiBpbnQgbm9wdXNoOwotCi0vKiBN b3JlIGludGVybmFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLS8qCi0gKiBUaGUgcGF0aCBzdHJ1 Y3R1cmUgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIG5hbWUgdG8gbWF0Y2guCi0gKiBFYWNoIHNs YXNoLXNlcGFyYXRlZCBzZWdtZW50IG9mIHRoZSBuYW1lIGlzIGtlcHQgaW4gb25lCi0gKiBzdWNo IHN0cnVjdHVyZSwgYW5kIHRoZXkgYXJlIGxpbmtlZCB0b2dldGhlciwgdG8gbWFrZQotICogdHJh dmVyc2luZyB0aGUgbmFtZSBlYXNpZXIuCi0gKi8KLXN0cnVjdCBwYXRoIHsKLSAgICBjaGFyIG5w YXJ0W01BWE5BTUxFTis0XTsgICAgICAgICAgICAvKiBuYW1lIHBhcnQgb2YgcGF0aCBzZWdtZW50 ICovCi0gICAgc3RydWN0IHBhdGggKmZ3ZDsgICAgICAgICAgICAgICAgICAgLyogZm9yd2FyZCBw dHIgKi8KLX07Ci0jaWZuZGVmIE5PUFVTSAotX1BST1RPVFlQKCBpbnQgc2h4cGFuZCwgKGNoYXIg KiwgY2hhciAqW10sIGludCApICk7Ci0jZW5kaWYgLyogTk9QVVNIICovCi1fUFJPVE9UWVAoIHN0 YXRpYyBpbnQgZmdlbiwgKGNoYXIgKiwgY2hhciAqW10sIGludCApICk7Ci1fUFJPVE9UWVAoIHN0 YXRpYyBWT0lEIHRyYXZlcnNlLCAoc3RydWN0IHBhdGggKiwgY2hhciAqLCBjaGFyICopICk7Ci1f UFJPVE9UWVAoIHN0YXRpYyBWT0lEIGFkZHJlc3VsdCwgKGNoYXIgKiwgaW50KSApOwotI2lmZGVm IENPTU1FTlQKLS8qIFJlcGxhY2VkIGJ5IGNrbWF0Y2goKSAqLwotX1BST1RPVFlQKCBzdGF0aWMg aW50IG1hdGNoLCAoY2hhciAqLCBjaGFyICopICk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotX1BS T1RPVFlQKCBjaGFyICogd2hvYW1pLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVUlEX1QgcmVhbF91 aWQsICh2b2lkKSApOwotX1BST1RPVFlQKCBzdGF0aWMgc3RydWN0IHBhdGggKnNwbGl0cGF0aCwg KGNoYXIgKnApICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiB6ZHRzdHIsICh0aW1lX3QpICk7Ci1fUFJP VE9UWVAoIHRpbWVfdCB6c3RyZHQsIChjaGFyICosIGludCkgKTsKLQotLyogU29tZSBzeXN0ZW1z IGRlZmluZSB0aGVzZSBzeW1ib2xzIGluIGluY2x1ZGUgZmlsZXMsIG90aGVycyBkb24ndC4uLiAq LwotCi0jaWZuZGVmIFJfT0sKLSNkZWZpbmUgUl9PSyA0ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBGb3IgYWNjZXNzICovCi0jZW5kaWYgLyogUl9PSyAqLwotCi0jaWZuZGVmIFdfT0sKLSNk ZWZpbmUgV19PSyAyCi0jZW5kaWYgLyogV19PSyAqLwotCi0jaWZuZGVmIFhfT0sKLSNkZWZpbmUg WF9PSyAxCi0jZW5kaWYgLyogWF9PSyAqLwotCi0jaWZuZGVmIE9fUkRPTkxZCi0jZGVmaW5lIE9f UkRPTkxZIDAwMAotI2VuZGlmIC8qIE9fUkRPTkxZICovCi0KLS8qIHN5c2xvZyBhbmQgd3RtcCBp dGVtcyBmb3IgSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgKi8KLQotZXh0ZXJuIGNoYXIgKiBjbGll bnRob3N0OyAgICAgICAgICAgICAgIC8qIEZyb20gY2tjbWFpLmMuICovCi0KLXN0YXRpYyBjaGFy IGZ1bGxuYW1lW0NLTUFYUEFUSCsxXTsKLXN0YXRpYyBjaGFyIHRtcDJbQ0tNQVhQQVRIKzFdOwot Ci1leHRlcm4gaW50IGNreGxvZ2dpbmc7Ci0KLSNpZmRlZiBDS1hQUklOVEYgICAgICAgICAgICAg ICAgICAgICAgICAvKiBPdXIgcHJpbnRmIG1hY3JvIGNvbmZsaWN0cyB3aXRoICovCi0jdW5kZWYg cHJpbnRmICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNlIG9mICJwcmludGYiIGluIHN5 c2xvZy5oICovCi0jZW5kaWYgLyogQ0tYUFJJTlRGICovCi0jaWZkZWYgQ0tTWVNMT0cKLSNpZmRl ZiBSVEFJWAotI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4KLSNlbHNlICAvKiBSVEFJWCAqLwotI2lu Y2x1ZGUgPHN5c2xvZy5oPgotI2VuZGlmIC8qIFJUQUlYICovCi0jZW5kaWYgLyogQ0tTWVNMT0cg Ki8KLSNpZmRlZiBDS1hQUklOVEYKLSNkZWZpbmUgcHJpbnRmIGNreHByaW50ZgotI2VuZGlmIC8q IENLWFBSSU5URiAqLwotCi1pbnQgY2t4YW5vbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAg LyogQW5vbnltb3VzIGxvZ2luIG9rICovCi1pbnQgY2t4cGVybXMgPSAwMDQwOyAgICAgICAgICAg ICAgICAgICAgLyogQW5vbnltb3VzIGZpbGUgcGVybWlzc2lvbnMgKi8KLWludCBja3hwcml2ID0g MTsJCQkvKiBQcml2J2QgbG9naW4gb2sgKi8KLQotI2lmbmRlZiBYRkVSRklMRQotI2RlZmluZSBY RkVSRklMRSAiL3Zhci9sb2cvaWtzZC5sb2ciCi0jZW5kaWYgLyogWEZFUkZJTEUgKi8KLQotLyog d3RtcCBsb2dnaW5nIGZvciBJS1NELi4uICovCi0KLSNpZm5kZWYgQ0tXVE1QICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB3dG1wIGxvZ2dpbmcgbm90IHNlbGVjdGVkICovCi1pbnQgY2t4d3Rt cCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogS25vdyB0aGlzIGF0IHJ1bnRpbWUgKi8K LSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3dG1wIGZpbGUgZGV0 YWlscyAqLwotaW50IGNreHd0bXAgPSAxOwotI2lmZGVmIFVUTVBCVUcgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFVuZm9ydHVuYXRlbHkuLi4gKi8KLS8qCi0gIFNvbWUgdmVyc2lvbnMgb2Yg TGludXggaGF2ZSBhIDx1dG1wLmg+IGZpbGUgdGhhdCBjb250YWlucwotICAiZW51bSB1dGxvZ2lu IHsgbG9jYWwsIHRlbG5ldCwgcmxvZ2luLCBzY3JlZW4sIC4uLiB9OyIgIFRoaXMgY2xvYmJlcnMK LSAgYW55IHByb2dyYW0gdGhhdCB1c2VzIGFueSBvZiB0aGVzZSB3b3JkcyBhcyB2YXJpYWJsZSBu YW1lcywgZnVuY3Rpb24KLSAgbmFtZXMsIG1hY3JvIG5hbWVzLCBldGMuICAoT3RoZXIgdmVyc2lv bnMgb2YgTGludXggaGF2ZSB0aGlzIGRlY2xhcmF0aW9uCi0gIHdpdGhpbiAjaWYgMCAuLi4gI2Vu ZGlmLikgIFRoZXJlIGlzIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IHRoaXMgb3RoZXIKLSAgdGhh biB0byBub3QgaW5jbHVkZSB0aGUgc3R1cGlkIGZpbGUuICBCdXQgd2UgbmVlZCBzdHVmZiBmcm9t IGl0LCBzby4uLgotKi8KLSNpbmNsdWRlIDxmZWF0dXJlcy5oPgotI2luY2x1ZGUgPHN5cy90eXBl cy5oPgotI2RlZmluZSBVVF9MSU5FU0laRSAgICAgMzIKLSNkZWZpbmUgVVRfTkFNRVNJWkUgICAg IDMyCi0jZGVmaW5lIFVUX0hPU1RTSVpFICAgICAyNTYKLQotc3RydWN0IHRpbWV2YWwgewotICB0 aW1lX3QgdHZfc2VjOwotICB0aW1lX3QgdHZfdXNlYzsKLX07Ci0KLXN0cnVjdCBleGl0X3N0YXR1 cyB7Ci0gIHNob3J0IGludCBlX3Rlcm1pbmF0aW9uOyAgICAgIC8qIFByb2Nlc3MgdGVybWluYXRp b24gc3RhdHVzLiAgKi8KLSAgc2hvcnQgaW50IGVfZXhpdDsgICAgICAgICAgICAgLyogUHJvY2Vz cyBleGl0IHN0YXR1cy4gICovCi19OwotCi1zdHJ1Y3QgdXRtcCB7Ci0gIHNob3J0IGludCB1dF90 eXBlOyAgICAgICAgICAgICAgICAgICAgLyogVHlwZSBvZiBsb2dpbiAqLwotICBwaWRfdCB1dF9w aWQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBpZCBvZiBsb2dpbiBwcm9jZXNzICovCi0g IGNoYXIgdXRfbGluZVtVVF9MSU5FU0laRV07ICAgICAgICAgICAgLyogTlVMLXRlcm1pbmF0ZWQg ZGV2aWNlbmFtZSBvZiB0dHkgKi8KLSAgY2hhciB1dF9pZFs0XTsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBJbml0dGFiIGlkICovCi0gIGNoYXIgdXRfdXNlcltVVF9OQU1FU0laRV07ICAgICAg ICAgICAgLyogVXNlcm5hbWUgKG5vdCBOVUwgdGVybWluYXRlZCkgKi8KLQotICBjaGFyIHV0X2hv c3RbVVRfSE9TVFNJWkVdOyAgICAgICAgICAgIC8qIEhvc3RuYW1lIGZvciByZW1vdGUgbG9naW4g Ki8KLSAgc3RydWN0IGV4aXRfc3RhdHVzIHV0X2V4aXQ7ICAgICAgICAgICAvKiBFeGl0IHN0YXR1 cyAqLwotICBsb25nIHV0X3Nlc3Npb247ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlc3Npb24g SUQsIHVzZWQgZm9yIHdpbmRvd2luZyAqLwotICBzdHJ1Y3QgdGltZXZhbCB1dF90djsgICAgICAg ICAgICAgICAgIC8qIFRpbWUgZW50cnkgd2FzIG1hZGUgKi8KLSAgaW50MzJfdCB1dF9hZGRyX3Y2 WzRdOyAgICAgICAgICAgICAgICAvKiBJbnRlcm5ldCBhZGRyZXNzIG9mIHJlbW90ZSBob3N0ICov Ci0gIGNoYXIgcGFkWzIwXTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8K LX07Ci0KLSNkZWZpbmUgdXRfdGltZSB1dF90di50dl9zZWMgICAgLyogV2h5IHNob3VsZCBMaW51 eCBiZSBsaWtlIGFueXRoaW5nIGVsc2U/ICovCi0jZGVmaW5lIHV0X25hbWUgdXRfdXNlciAgICAg ICAgIC8qIC4uLiAqLwotCi1leHRlcm4gdm9pZAotbG9nd3RtcCBfX1AgKChfX2NvbnN0IGNoYXIg Kl9fdXRfbGluZSwgX19jb25zdCBjaGFyICpfX3V0X25hbWUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX191dF9ob3N0KSk7Ci0KLSNlbHNlICAvKiBOb3QgVVRNUEJV RyAqLwotCi0jaWZuZGVmIEhBVkVVVE1QWCAgICAgICAgICAgICAgICAgICAgICAgLyogV2hvIGhh cyA8dXRtcHguaD4gKi8KLSNpZmRlZiBTT0xBUklTCi0jZGVmaW5lIEhBVkVVVE1QWAotI2Vsc2UK LSNpZmRlZiBJUklYNjAKLSNkZWZpbmUgSEFWRVVUTVBYCi0jZWxzZQotI2lmZGVmIENLX1NDT1Y1 Ci0jZGVmaW5lIEhBVkVVVE1QWAotI2Vsc2UKLSNpZmRlZiBIUFVYMTAwCi0jZGVmaW5lIEhBVkVV VE1QWAotI2Vsc2UKLSNpZmRlZiBVTklYV0FSRQotI2RlZmluZSBIQVZFVVRNUFgKLSNlbmRpZiAv KiBVTklYV0FSRSAqLwotI2VuZGlmIC8qIEhQVVgxMDAgKi8KLSNlbmRpZiAvKiBDS19TQ09WNSAq LwotI2VuZGlmIC8qIElSSVg2MCAqLwotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNlbmRpZiAvKiBI QVZFVVRNUFggKi8KLQotI2lmZGVmIEhBVkVVVE1QWAotI2luY2x1ZGUgPHV0bXB4Lmg+Ci0jZWxz ZQotI2lmZGVmIE9TRjUwCi0vKiBCZWNhdXNlIHRoZSB0aW1lX3QgaW4gdGhlIHV0bXAgc3RydWN0 IGlzIDY0IGJpdHMgYnV0IHRpbWUoKSB3YW50cyAzMiAqLwotI2RlZmluZSBfX1Y0MF9PQkpfQ09N UEFUIDEKLSNlbmRpZiAvKiBPU0Y1MCAqLwotI2luY2x1ZGUgPHV0bXAuaD4KLSNpZmRlZiBPU0Y1 MAotI3VuZGVmIF9fVjQwX09CSl9DT01QQVQKLSNlbmRpZiAvKiBPU0Y1MCAqLwotI2VuZGlmIC8q IEhBVkVVVE1QWCAqLwotI2VuZGlmIC8qIFVUTVBCVUcgKi8KLQotI2lmZGVmIEhBVkVVVE1QWAot I2RlZmluZSBVVE1QU1RSVUNUIHV0bXB4Ci0jZWxzZQotI2RlZmluZSBVVE1QU1RSVUNUIHV0bXAK LSNlbmRpZgkvKiBIQVZFVVRNUFggKi8KLQotI2lmbmRlZiBXVE1QRklMRQotI2lmZGVmIFFOWAot I2RlZmluZSBXVE1QRklMRSAiL3Vzci9hZG0vd3RtcC4xIgotI2Vsc2UKLSNpZmRlZiBMSU5VWAot I2RlZmluZSBXVE1QRklMRSAiL3Zhci9sb2cvd3RtcCIKLSNlbHNlCi0jZGVmaW5lIFdUTVBGSUxF ICIvdXNyL2FkbS93dG1wIgotI2VuZGlmIC8qIFFOWCAqLwotI2VuZGlmIC8qIExJTlVYICovCi0j ZW5kaWYgLyogV1RNUEZJTEUgKi8KLWNoYXIgKiB3dG1wZmlsZSA9IE5VTEw7Ci0KLXN0YXRpYyBp bnQgd3RtcGZkID0gMDsKLXN0YXRpYyBjaGFyIGNrc3lzbGluZVszMl0gPSB7IE5VTCwgTlVMIH07 Ci0KLSNpZm5kZWYgSEFWRVVUSE9TVCAgICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIHV0bXAg aW5jbHVkZSB1dF9ob3N0W10/ICovCi0jaWZkZWYgSEFWRVVUTVBYICAgICAgICAgICAgICAgICAg ICAgICAgLyogdXRtcHggYWx3YXlzIGRvZXMgKi8KLSNkZWZpbmUgSEFWRVVUSE9TVAotI2Vsc2UK LSNpZmRlZiBMSU5VWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMaW51eCBkb2VzICov Ci0jZGVmaW5lIEhBVkVVVEhPU1QKLSNlbHNlCi0jaWZkZWYgU1VOT1M0ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU3VuT1MgZG9lcyAqLwotI2RlZmluZSBIQVZFVVRIT1NUCi0jZWxzZQot I2lmZGVmIEFJWDQxICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFJWCA0LjEgYW5kIGxh dGVyIGRvICovCi0jZGVmaW5lIEhBVkVVVEhPU1QKLSNlbmRpZiAvKiBBSVg0MSAqLwotI2VuZGlm IC8qIFNVTk9TNCAqLwotI2VuZGlmIC8qIExJTlVYICovCi0jZW5kaWYgLyogSEFWRVVUTVBYICov Ci0jZW5kaWYgLyogSEFWRVVUSE9TVCAqLwotCi0jaWZkZWYgVVcyMDAKLVBJRF9UIF92Zm9yaygp IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUbyBzYXRpc2Z5IGEgbGlicmFyeSBmb3VsdXAg Ki8KLSAgICByZXR1cm4oZm9yaygpKTsgICAgICAgICAgICAgICAgICAgICAvKiBpbiBVbml4d2Fy ZSAyLjAueCAqLwotfQotI2VuZGlmIC8qIFVXMjAwICovCi0KLVZPSUQKLSNpZmRlZiBDS19BTlNJ QwotbG9nd3RtcChjb25zdCBjaGFyICogbGluZSwgY29uc3QgY2hhciAqIG5hbWUsIGNvbnN0IGNo YXIgKiBob3N0KQotI2Vsc2UKLWxvZ3d0bXAobGluZSwgbmFtZSwgaG9zdCkgY2hhciAqbGluZSwg Km5hbWUsICpob3N0OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBsb2d3dG1wICovIHsKLSAg ICBzdHJ1Y3QgVVRNUFNUUlVDVCB1dDsKLSAgICBzdHJ1Y3Qgc3RhdCBidWY7Ci0gICAgLyogdGlt ZV90IHRpbWUoKTsgKi8KLQotICAgIGlmICghY2t4d3RtcCkKLSAgICAgIHJldHVybjsKLQotICAg IGlmICghd3RtcGZpbGUpCi0gICAgICBtYWtlc3RyKCZ3dG1wZmlsZSxXVE1QRklMRSk7Ci0KLSAg ICBpZiAoIWxpbmUpIGxpbmUgPSAiIjsKLSAgICBpZiAoIW5hbWUpIG5hbWUgPSAiIjsKLSAgICBp ZiAoIWhvc3QpIGhvc3QgPSAiIjsKLQotICAgIGlmICghd3RtcGZkICYmICh3dG1wZmQgPSBvcGVu KHd0bXBmaWxlLCBPX1dST05MWXxPX0FQUEVORCwgMCkpIDwgMCkgewotICAgICAgICBja3h3dG1w ID0gMDsKLSAgICAgICAgZGVidWcoRjExMCwiV1RNUCBvcGVuIGZhaWxlZCIsbGluZSwwKTsKLSAg ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWZzdGF0KHd0bXBmZCwgJmJ1ZikpIHsKLSAg ICAgICAgY2tzdHJuY3B5KHV0LnV0X2xpbmUsIGxpbmUsIHNpemVvZih1dC51dF9saW5lKSk7Ci0j aWZkZWYgRlJFRUJTRDkKLSAgICAgICAgY2tzdHJuY3B5KHV0LnV0X3VzZXIsIG5hbWUsIHNpemVv Zih1dC51dF91c2VyKSk7Ci0jZWxzZQotICAgICAgICBja3N0cm5jcHkodXQudXRfbmFtZSwgbmFt ZSwgc2l6ZW9mKHV0LnV0X25hbWUpKTsKLSNlbmRpZgkvKiBGUkVFQlNEOSAqLwotI2lmZGVmIEhB VkVVVEhPU1QKLSAgICAgICAgLyogTm90IHBvcnRhYmxlICovCi0gICAgICAgIGNrc3RybmNweSh1 dC51dF9ob3N0LCBob3N0LCBzaXplb2YodXQudXRfaG9zdCkpOwotI2VuZGlmIC8qIEhBVkVVVEhP U1QgKi8KLSNpZmRlZiBIQVZFVVRNUFgKLSAgICAgICAgdGltZSgmdXQudXRfdHYudHZfc2VjKTsK LSNlbHNlCi0jaWZkZWYgTElOVVgKLS8qIEluIGxpZ2h0IG9mIHRoZSBmb2xsb3dpbmcgY29tbWVu dCBwZXJoYXBzIHRoZSBwcmV2aW91cyBsaW5lIHNob3VsZCAqLwotLyogYmUgIiNpZm5kZWYgQ09N TUVOVCIuICovCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBPbiA2 NC1iaXQgcGxhdGZvcm1zIHNpemVvZih0aW1lX3QpIGFuZCBzaXplb2YodXQudXRfdGltZSkKLSAg ICAgICAgICAgICAqIGFyZSBub3QgdGhlIHNhbWUgYW5kIGF0dGVtcHQgdG8gdXNlIGFuIGFkZHJl c3Mgb2YKLSAgICAgICAgICAgICAqIHV0LnV0X3RpbWUgYXMgYW4gYXJndW1lbnQgdG8gdGltZSgp IGNhbGwgbWF5IGNhdXNlCi0gICAgICAgICAgICAgKiAidW5hbGlnbmVkIGFjY2VzcyIgdHJhcC4K LSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdGltZV90IHp6OwotICAgICAgICAgICAgdGlt ZSgmenopOwotICAgICAgICAgICAgdXQudXRfdGltZSA9IHp6OwotICAgICAgICB9Ci0jZWxzZQot I2lmZGVmIENLXzY0QklUCi0gICAgICAgIHsKLQkgICAgLyogTm93IChKYW4gMjAwNikgd2UgY2Fu IGRvIHRoaXMgZm9yIGFueSA2NC1iaXQgYnVpbGQgKi8KLSAgICAgICAgICAgIHRpbWVfdCB6ejsK LSAgICAgICAgICAgIHRpbWUoJnp6KTsKLSAgICAgICAgICAgIHV0LnV0X3RpbWUgPSB6ejsKLSAg ICAgICAgfQotI2Vsc2UKLSAgICAgICAgdGltZSgmdXQudXRfdGltZSk7Ci0jZW5kaWYJLyogQ0tf NjRCSVQgKi8KLSNlbmRpZiAvKiBMSU5VWCAqLwotI2VuZGlmIC8qIEhBVkVVVE1QWCAqLwotICAg ICAgICBpZiAod3JpdGUod3RtcGZkLCAoY2hhciAqKSZ1dCwgc2l6ZW9mKHN0cnVjdCBVVE1QU1RS VUNUKSkgIT0KLSAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgVVRNUFNUUlVDVCkpIHsKLSNpZm5k ZWYgTk9GVFJVTkNBVEUKLSNpZm5kZWYgQ09IRVJFTlQKLSAgICAgICAgICAgIGZ0cnVuY2F0ZSh3 dG1wZmQsIGJ1Zi5zdF9zaXplKTsgLyogRXJyb3IsIHVuZG8gYW55IHBhcnRpYWwgd3JpdGUgKi8K LSNlbHNlCi0gICAgICAgICAgICBjaHNpemUod3RtcGZkLCBidWYuc3Rfc2l6ZSk7IC8qIEVycm9y LCB1bmRvIGFueSBwYXJ0aWFsIHdyaXRlICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSNlbmRp ZiAvKiBOT0ZUUlVOQ0FURSAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwiV1RNUCB3cml0ZSBl cnJvciIsbGluZSwwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAs IldUTVAgcmVjb3JkIE9LIixsaW5lLDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9 Ci0gICAgfQotfQotI2VuZGlmIC8qIENLV1RNUCAqLwotCi0jaWZkZWYgQ0tTWVNMT0cKLS8qCi0g IEMgSyBTIFkgUyBMIE8gRyAgLS0gIEMtS2VybWl0IHN5c3RlbSBsb2dnaW5nIGZ1bmN0aW9uLAot Ci0gIEZvciB1c2UgYnkgb3RoZXIgbW9kdWxlcy4KLSAgVGhpcyBtb2R1bGUgY2FuLCBidXQgZG9l c24ndCBoYXZlIHRvLCB1c2UgaXQuCi0gIENhbGwgd2l0aDoKLSAgICBuID0gU1lTTEdfeHggdmFs dWVzIGRlZmluZWQgaW4gY2tjZGViLmgKLSAgICBzMSwgczIsIHMzOiBzdHJpbmdzLgotKi8KLVZP SUQKLWNrc3lzbG9nKG4sIG0sIHMxLCBzMiwgczMpIGludCBuLCBtOyBjaGFyICogczEsICogczIs ICogczM7IHsKLSAgICBpbnQgbGV2ZWw7Ci0KLSAgICBpZiAoIWNreGxvZ2dpbmcpICAgICAgICAg ICAgICAgICAgICAvKiBzeXNsb2dnaW5nICovCi0gICAgICByZXR1cm47Ci0gICAgaWYgKCFzMSkg czEgPSAiIjsgICAgICAgICAgICAgICAgICAgLyogRml4IG51bGwgYXJncyAqLwotICAgIGlmICgh czIpIHMyID0gIiI7Ci0gICAgaWYgKCFzMykgczMgPSAiIjsKLSAgICBzd2l0Y2ggKG4pIHsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2xhdGUgS2VybWl0IGxldmVsICovCi0gICAgICBj YXNlIFNZU0xHX0RCOiAgICAgICAgICAgICAgICAgICAgLyogdG8gc3lzbG9nIGxldmVsICovCi0g ICAgICAgIGxldmVsID0gTE9HX0RFQlVHOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6 Ci0gICAgICAgIGxldmVsID0gbSA/IExPR19JTkZPIDogTE9HX0VSUjsKLSAgICB9Ci0gICAgZGVi dWcoRjExMCwiY2tzeXNsb2cgczEiLHMxLDApOwotICAgIGRlYnVnKEYxMTAsImNrc3lzbG9nIHMy IixzMiwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJja3N5c2xvZyBzMyIsczMsMCk7Ci0gICAgZXJybm8g PSAwOwotICAgIHN5c2xvZyhsZXZlbCwgIiVzOiAlcyAlcyIsIHMxLCBzMiwgczMpOyAvKiBXcml0 ZSBzeXNsb2cgcmVjb3JkICovCi0gICAgZGVidWcoRjEwMSwiY2tzeXNsb2cgZXJybm8iLCIiLGVy cm5vKTsKLX0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCi0KLS8qIERlY2xhcmF0aW9ucyAqLwot Ci1pbnQgbWF4bmFtID0gTUFYTkFNTEVOOyAgICAgICAgICAgICAgICAgLyogQXZhaWxhYmxlIHRv IHRoZSBvdXRzaWRlICovCi1pbnQgbWF4cGF0aCA9IE1BWFBBVEg7Ci1pbnQgY2tfem5ld24gPSAt MTsKLQotI2lmZGVmIFVOSVgKLWNoYXIgc3RhcnR1cGRpcltNQVhQQVRIKzFdOwotI2VuZGlmIC8q IFVOSVggKi8KLQotaW50IHBleGl0c3RhdCA9IC0yOyAgICAgICAgICAgICAgICAgICAgIC8qIFBy b2Nlc3MgZXhpdCBzdGF0dXMgKi8KLQotRklMRSAqZnBbWk5GSUxTXSA9IHsgICAgICAgICAgICAg ICAgICAgIC8qIEZpbGUgcG9pbnRlcnMgKi8KLSAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKLX07Ci0K LS8qIEZsYWdzIGZvciBlYWNoIGZpbGUgaW5kaWNhdGluZyB3aGV0aGVyIGl0IHdhcyBvcGVuZWQg d2l0aCBwb3BlbigpICovCi1pbnQgaXNwaXBlW1pORklMU10gPSB7IDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKLQotLyogQnVmZmVycyBhbmQgcG9pbnRlcnMgdXNlZCBp biBidWZmZXJlZCBmaWxlIGlucHV0IGFuZCBvdXRwdXQuICovCi0jaWZkZWYgRFlOQU1JQwotZXh0 ZXJuIGNoYXIgKnppbmJ1ZmZlciwgKnpvdXRidWZmZXI7Ci0jZWxzZQotZXh0ZXJuIGNoYXIgemlu YnVmZmVyW10sIHpvdXRidWZmZXJbXTsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi1leHRlcm4gY2hh ciAqemlucHRyLCAqem91dHB0cjsKLWV4dGVybiBpbnQgemluY250LCB6b3V0Y250OwotZXh0ZXJu IGludCB3aWxkeHBhbmQsIHdpbGRlbmE7CQkvKiBXaWxkY2FyZCBoYW5kbGluZyAqLwotCi1zdGF0 aWMgQ0tfT0ZGX1QgaWZsZW4gPSAoQ0tfT0ZGX1QpLTE7CS8qIElucHV0IGZpbGUgbGVuZ3RoICov Ci0KLXN0YXRpYyBQSURfVCBwaWQgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBwaWQgb2YgY2hp bGQgZm9yayAqLwotc3RhdGljIGludCBmY291bnQgPSAwOyAgICAgICAgICAgICAgICAgIC8qIE51 bWJlciBvZiBmaWxlcyBpbiB3aWxkIGdyb3VwICovCi1zdGF0aWMgaW50IG54cGFuZCA9IDA7ICAg ICAgICAgICAgICAgICAgLyogQ29weSBvZiBmY291bnQgKi8KLXN0YXRpYyBjaGFyIG5hbWJ1ZltD S01BWFBBVEgrNF07ICAgICAgICAvKiBCdWZmZXIgZm9yIGEgcGF0aG5hbWUgKi8KLQotI2lmbmRl ZiBOT0ZSSUxMUwotI2RlZmluZSBaTUJVRkxFTiAyMDAKLXN0YXRpYyBjaGFyIHptYnVmW1pNQlVG TEVOXTsJCS8qIEZvciBtYWlsLCByZW1vdGUgcHJpbnQgc3RyaW5ncyAqLwotI2VuZGlmIC8qIE5P RlJJTExTICovCi0KLWNoYXIgKiptdGNocyA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAvKiBN YXRjaGVzIGZvdW5kIGZvciBmaWxlbmFtZSAqLwotY2hhciAqKm10Y2hwdHIgPSBOVUxMOyAgICAg ICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gY3VycmVudCBtYXRjaCAqLwotCi0vKiAgWiBLIFMg RSBMIEYgIC0tICBLaWxsIFNlbGY6IGxvZyBvdXQgb3duIGpvYiwgaWYgcG9zc2libGUuICAqLwot Ci0vKiBOb3RlLCBzaG91bGQgZ2V0IGN1cnJlbnQgcGlkLCBidXQgaWYgeW91ciBzeXN0ZW0gZG9l c24ndCBoYXZlICovCi0vKiBnZXRwcGlkKCksIHRoZW4ganVzdCBraWxsKDAsOSkuLi4gICovCi0K LSNpZm5kZWYgU1ZSMwotI2lmbmRlZiBQT1NJWAotI2lmbmRlZiBPU0ZQQwotLyogQWxyZWFkeSBk ZWNsYXJlZCBpbiB1bmlzdGQuaCBmb3IgU1ZSMyBhbmQgUE9TSVggKi8KLSNpZmRlZiBDS19BTlNJ QwotZXh0ZXJuIFBJRF9UIGdldHBwaWQodm9pZCk7Ci0jZWxzZQotI2lmbmRlZiBQUzJBSVgxMAot I2lmbmRlZiBDT0hFUkVOVAotZXh0ZXJuIFBJRF9UIGdldHBwaWQoKTsKLSNlbmRpZiAvKiBDT0hF UkVOVCAqLwotI2VuZGlmIC8qIFBTMkFJWDEwICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNl bmRpZiAvKiBPU0ZQQyAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0jZW5kaWYgLyogU1ZSMyAqLwot Ci1pbnQKLXprc2VsZigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgImJ5 ZSIsIGJ1dCBubyBndWFyYW50ZWUhICovCi0jaWZkZWYgUFJPVlgxCi0gICAgcmV0dXJuKGtpbGwo MCw5KSk7Ci0jZWxzZQotI2lmZGVmIFY3Ci0gICAgcmV0dXJuKGtpbGwoMCw5KSk7Ci0jZWxzZQot I2lmZGVmIFRPV0VSMQotICAgIHJldHVybihraWxsKDAsOSkpOwotI2Vsc2UKLSNpZmRlZiBGVDE4 Ci0gICAgcmV0dXJuKGtpbGwoMCw5KSk7Ci0jZWxzZQotI2lmZGVmIGFlZ2lzCi0gICAgcmV0dXJu KGtpbGwoMCw5KSk7Ci0jZWxzZQotI2lmZGVmIENPSEVSRU5UCi0gICAgcmV0dXJuKGtpbGwoKFBJ RF9UKWdldHBpZCgpLDEpKTsKLSNlbHNlCi0jaWZkZWYgUElEX1QKLSAgICBleGl0KGtpbGwoKFBJ RF9UKWdldHBwaWQoKSwxKSk7Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSAgICBleGl0KGtpbGwo Z2V0cHBpZCgpLDEpKTsKLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0j ZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLX0KLQotc3RhdGljIFZPSUQKLWdldGZ1bGxu YW1lKG5hbWUpIGNoYXIgKiBuYW1lOyB7Ci0gICAgY2hhciAqcCA9IChjaGFyICopZnVsbG5hbWU7 Ci0gICAgaW50IGxlbiA9IDA7Ci0gICAgZnVsbG5hbWVbMF0gPSAnXDAnOwotICAgIC8qIElmIG5l Y2Vzc2FyeSB3ZSBjb3VsZCBhbHNvIGNoYXNlIGRvd24gc3ltbGlua3MgaGVyZS4uLiAqLwotI2lm ZGVmIENPTU1FTlQKLSAgICAvKiBUaGlzIHdvcmtzIGJ1dCBpcyBpbmNvbXBhdGlibGUgd2l0aCB3 dWZ0cGQgKi8KLSAgICBpZiAoaXNndWVzdCAmJiBhbm9ucm9vdCkgewotICAgICAgICBja3N0cm5j cHkoZnVsbG5hbWUsYW5vbnJvb3QsQ0tNQVhQQVRIKTsKLSAgICAgICAgbGVuID0gc3RybGVuKGZ1 bGxuYW1lKTsKLSAgICAgICAgaWYgKGxlbiA+IDApCi0gICAgICAgICAgaWYgKGZ1bGxuYW1lW2xl bi0xXSA9PSAnLycpCi0gICAgICAgICAgICBsZW4tLTsKLSAgICB9Ci0gICAgcCArPSBsZW47Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHpmbnFmcChuYW1lLCBDS01BWFBBVEggLSBsZW4sIHAp OwotICAgIHdoaWxlICgqcCkgewotICAgICAgICBpZiAoKnAgPCAnIScpICpwID0gJ18nOwotICAg ICAgICBwKys7Ci0gICAgfQotfQotCi0vKiAgRCBPIEkgSyBMIE8gRyAgLS0gIE9wZW4gS2VybWl0 LXNwZWNpZmljIGZ0cC1saWtlIHRyYW5zZmVyIGxvZy4gKi8KLQotVk9JRCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGxlZCBpbiBja2NtYWkuYyAqLwotZG9pa2xvZygp IHsKLSAgICBpZiAoaWtsb2dvcGVuKSAgICAgICAgICAgICAgICAgICAgICAvKiBBbHJlYWR5IG9w ZW4/ICovCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHhmZXJsb2cpIHsgICAgICAgICAgICAgICAg ICAgICAgLyogT3BlbiBpa3NkIGxvZyBpZiByZXF1ZXN0ZWQgKi8KLSAgICAgICAgaWYgKCF4ZmVy ZmlsZSkgICAgICAgICAgICAgICAgICAvKiBJZiBubyBwYXRobmFtZSBnaXZlbiAqLwotICAgICAg ICAgIG1ha2VzdHIoJnhmZXJmaWxlLFhGRVJGSUxFKTsJLyogdXNlIHRoaXMgZGVmYXVsdCAqLwot ICAgICAgICBpZiAoKnhmZXJmaWxlKSB7Ci0gICAgICAgICAgICB4ZmVybG9nID0gb3Blbih4ZmVy ZmlsZSwgT19XUk9OTFkgfCBPX0FQUEVORCB8IE9fQ1JFQVQsIDA2NjApOwotICAgICAgICAgICAg ZGVidWcoRjEwMSwiZG9pa2xvZyBvcGVuIiwiIix4ZmVybG9nKTsKLSAgICAgICAgICAgIGlmICh4 ZmVybG9nIDwgMCkgewotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICAgICAgc3lzbG9nKExP R19FUlIsICJ4ZmVybG9nIG9wZW4gZmFpbHVyZSAlczogJW0iLCB4ZmVyZmlsZSk7Ci0jZW5kaWYg LyogQ0tTWVNMT0cgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2lrbG9nIG9wZW4g ZXJybm8iLCIiLGVycm5vKTsKLSAgICAgICAgICAgICAgICB4ZmVybG9nID0gMDsKLSAgICAgICAg ICAgIH0gZWxzZQotICAgICAgICAgICAgICBpa2xvZ29wZW4gPSAxOwotICAgICAgICB9IGVsc2UK LSAgICAgICAgICB4ZmVybG9nID0gMDsKLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICBpZiAoeGZl cmxvZyAmJiBja3hsb2dnaW5nKQotICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywgInhmZXJsb2c6 ICVzIG9wZW4gb2siLCB4ZmVyZmlsZSk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICB9Ci19 Ci0KLS8qICBaIE8gUCBFIE4gSSAgLS0gIE9wZW4gYW4gZXhpc3RpbmcgZmlsZSBmb3IgaW5wdXQu ICovCi0KLS8qIFJldHVybnMgMSBvbiBzdWNjZXNzLCAwIG9uIGZhaWx1cmUgKi8KLQotaW50Ci16 b3BlbmkobixuYW1lKSBpbnQgbjsgY2hhciAqbmFtZTsgewotICAgIGludCB4OwotCi0gICAgZGVi dWcoRjExMSwiem9wZW5pIixuYW1lLG4pOwotICAgIGlmICgoeCA9IGNoa2ZuKG4pKSAhPSAwKSB7 Ci0JZGVidWcoRjExMSwiem9wZW5pIGNoa2ZuIixja2l0b2EobikseCk7Ci0JcmV0dXJuKDApOwot ICAgIH0KLSAgICB6aW5jbnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBp bnB1dCBidWZmZXIgKi8KLSAgICBpZiAobiA9PSBaU1lTRk4pIHsgICAgICAgICAgICAgICAgICAv KiBJbnB1dCBmcm9tIGEgc3lzdGVtIGZ1bmN0aW9uPyAqLwotI2lmZGVmIENPTU1FTlQKLS8qKiog Tm90ZSwgdGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCB3aXRoIFpTWVNGTiAqKiov Ci0vKioqIEFsd2F5cyBjYWxsIHp4Y21kKCkgZGlyZWN0bHksIGFuZCBnaXZlIGl0IHRoZSByZWFs IGZpbGUgbnVtYmVyICoqKi8KLS8qKiogeW91IHdhbnQgdG8gdXNlLiAgKioqLwotICAgICAgICBy ZXR1cm4oenhjbWQobixuYW1lKSk7ICAgICAgICAgIC8qIFRyeSB0byBmb3JrIHRoZSBjb21tYW5k ICovCi0jZWxzZQotICAgICAgICBkZWJ1ZyhGMTEwLCJ6b3BlbmkgY2FsbGVkIHdpdGggWlNZU0ZO LCBmYWlsaW5nISIsbmFtZSwwKTsKLSAgICAgICAgKm5hbWJ1ZiA9ICdcMCc7ICAgICAgICAgICAg ICAgICAvKiBObyBmaWxlbmFtZS4gKi8KLSAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAg ICAgICAgICAvKiBmYWlsLiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9Ci0gICAgaWYg KG4gPT0gWlNURElPKSB7ICAgICAgICAgICAgICAgICAgLyogU3RhbmRhcmQgaW5wdXQ/ICovCi0g ICAgICAgIGlmIChpc19hX3R0eSgwKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIlRl cm1pbmFsIGlucHV0IG5vdCBhbGxvd2VkIik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6b3Bl bmk6IGF0dGVtcHRzIGlucHV0IGZyb20gdW5yZWRpcmVjdGVkIHN0ZGluIiwiIiwwKTsKLSAgICAg ICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotICAgICAgICBmcFtaSUZJTEVdID0gc3RkaW47 Ci0gICAgICAgIGlzcGlwZVtaSUZJTEVdID0gMDsKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0K LSNpZmRlZiBDS1JPT1QKLSAgICBkZWJ1ZyhGMTExLCJ6b3Blbmkgc2V0cm9vdCIsY2tyb290LGNr cm9vdHNldCk7Ci0gICAgaWYgKGNrcm9vdHNldCkgaWYgKCF6aW5yb290KG5hbWUpKSB7Ci0JZGVi dWcoRjExMCwiem9wZW5pIHNldHJvb3QgdmlvbGF0aW9uIixuYW1lLDApOwotCXJldHVybigwKTsK LSAgICB9Ci0jZW5kaWYgLyogQ0tST09UICovCi0gICAgZnBbbl0gPSBmb3BlbihuYW1lLCJyIik7 ICAgICAgICAgICAgLyogUmVhbCBmaWxlLCBvcGVuIGl0LiAqLwotICAgIC8qIGRlYnVnKEYxMTEs InpvcGVuaSBmb3BlbiIsIG5hbWUsIGZwW25dKTsgKi8KLSNpZmRlZiBaREVCVUcKLSAgICAvKiBw cmludGYoIlpPUEVOSSBmcFslZF09JWxkXG4iLG4sZnBbbl0pOyAqLwotI2VuZGlmIC8qIFpERUJV RyAqLwotICAgIGlzcGlwZVtuXSA9IDA7Ci0KLSAgICBpZiAoeGZlcmxvZwotI2lmZGVmIENLU1lT TE9HCi0gICAgICAgIHx8ICgoY2t4c3lzbG9nID49IFNZU0xHX0ZBKSAmJiBja3hsb2dnaW5nKQot I2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgICkgewotICAgICAgICBnZXRmdWxsbmFtZShu YW1lKTsKLSAgICAgICAgZGVidWcoRjExMCwiem9wZW5pIGZ1bGxuYW1lIixmdWxsbmFtZSwwKTsK LSAgICB9Ci0gICAgaWYgKGZwW25dID09IE5VTEwpIHsKLSNpZmRlZiBDS1NZU0xPRwotICAgICAg ICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0ZBICYmIGNreGxvZ2dpbmcpIHsKLQkgICAgc3lzbG9n KExPR19JTkZPLCAiZmlsZVslZF0gJXM6IG9wZW4gZmFpbGVkICglbSkiLCBuLCBmdWxsbmFtZSk7 Ci0JICAgIHBlcnJvcihmdWxsbmFtZSk7Ci0JfSBlbHNlCi0jZW5kaWYgLyogQ0tTWVNMT0cgKi8K LQkgIHBlcnJvcihuYW1lKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0gZWxzZSB7Ci0jaWZk ZWYgQ0tTWVNMT0cKLSAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19GQSAmJiBja3hsb2dn aW5nKQotICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywgImZpbGVbJWRdICVzOiBvcGVuIHJlYWQg b2siLCBuLCBmdWxsbmFtZSk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgY2xlYXJl cnIoZnBbbl0pOwotICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotfQotCi0jaWZkZWYgUU5YCi0j ZGVmaW5lIERPTkRFTEFZCi0jZWxzZQotI2lmZGVmIE9fTkRFTEFZCi0jZGVmaW5lIERPTkRFTEFZ Ci0jZW5kaWYgLyogT19OREVMQVkgKi8KLSNlbmRpZiAvKiBRTlggKi8KLQotLyogIFogTyBQIEUg TiBPICAtLSAgT3BlbiBhIG5ldyBmaWxlIGZvciBvdXRwdXQuICAqLwotCi0vKkFSR1NVU0VEKi8J Lyogenogbm90IHVzZWQgKi8KLWludAotem9wZW5vKG4sbmFtZSx6eixmY2IpCi0vKiB6b3Blbm8g Ki8gIGludCBuOyBjaGFyICpuYW1lOyBzdHJ1Y3QgemF0dHIgKnp6OyBzdHJ1Y3QgZmlsaW5mbyAq ZmNiOyB7Ci0KLSAgICBjaGFyIHBbOF07Ci0gICAgaW50IGFwcGVuZCA9IDA7Ci0gICAgaW50IGlz dHR5ID0gMCwgZmlsZWZkID0gMDsKLQotLyogQXMgb2YgVmVyc2lvbiA1QSwgdGhlIGF0dHJpYnV0 ZSBzdHJ1Y3R1cmUgYW5kIHRoZSBmaWxlIGluZm9ybWF0aW9uICovCi0vKiBzdHJ1Y3R1cmUgYXJl IGluY2x1ZGVkIGluIHRoZSBhcmdsaXN0LiAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhG MTExLCJ6b3Blbm8iLG5hbWUsbik7Ci0gICAgaWYgKGZjYikgewotICAgICAgICBkZWJ1ZyhGMTAx LCJ6b3Blbm8gZmNiIGRpc3AiLCIiLGZjYi0+ZHNwKTsKLSAgICAgICAgZGVidWcoRjEwMSwiem9w ZW5vIGZjYiB0eXBlIiwiIixmY2ItPnR5cCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInpvcGVubyBm Y2IgY2hhciIsIiIsZmNiLT5jcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVidWcoRjEwMCwi em9wZW5vIGZjYiBpcyBOVUxMIiwiIiwwKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQot ICAgIGlmIChjaGtmbihuKSAhPSAwKSAgICAgICAgICAgICAgICAgIC8qIEFscmVhZHkgb3Blbj8g Ki8KLSAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHRv IGRvLiAqLwotCi0gICAgaWYgKChuID09IFpDVEVSTSkgfHwgKG4gPT0gWlNURElPKSkgeyAvKiBU ZXJtaW5hbCBvciBzdGFuZGFyZCBvdXRwdXQgKi8KLSAgICAgICAgZnBbWk9GSUxFXSA9IHN0ZG91 dDsKLSAgICAgICAgaXNwaXBlW1pPRklMRV0gPSAwOwotI2lmZGVmIENPTU1FTlQKLQkvKiBUaGlz IHNlZW1zIHJpZ2h0IGJ1dCBpdCBicmVha3MgY2xpZW50IHNlcnZlciBvcHMgKi8KLQlmcFtuXSA9 IHN0ZG91dDsKLSAgICAgICAgaXNwaXBlW25dID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0j aWZkZWYgQ09NTUVOVAotI2lmZGVmIERFQlVHCi0gICAgICAgIGlmIChuICE9IFpERklMRSkKLSAg ICAgICAgICBkZWJ1ZyhGMTAxLCJ6b3Blbm8gZnBbbl09c3Rkb3V0IiwiIixmcFtuXSk7Ci0jZW5k aWYgLyogREVCVUcgKi8KLSNlbmRpZgkvKiBDT01NRU5UICovCi0gICAgICAgIHpvdXRjbnQgPSAw OwotICAgICAgICB6b3V0cHRyID0gem91dGJ1ZmZlcjsKLSAgICAgICAgcmV0dXJuKDEpOwotICAg IH0KLQotLyogQSByZWFsIGZpbGUuICBPcGVuIGl0IGluIGRlc2lyZWQgbW9kZSAoY3JlYXRlIG9y IGFwcGVuZCkuICovCi0KLSNpZmRlZiBDS1JPT1QKLSAgICBkZWJ1ZyhGMTExLCJ6b3Blbm8gc2V0 cm9vdCIsY2tyb290LGNrcm9vdHNldCk7Ci0gICAgaWYgKGNrcm9vdHNldCkgaWYgKCF6aW5yb290 KG5hbWUpKSB7Ci0JZGVidWcoRjExMCwiem9wZW5vIHNldHJvb3QgdmlvbGF0aW9uIixuYW1lLDAp OwotCXJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tST09UICovCi0KLSAgICBja3N0cm5j cHkocCwidyIsOCk7CQkJLyogQXNzdW1lIHdyaXRlL2NyZWF0ZSBtb2RlICovCi0gICAgaWYgKGZj YikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgY2FsbGVkIHdpdGggYW4gRkNCLi4u ICovCi0gICAgICAgIGlmIChmY2ItPmRzcCA9PSBYWUZaX0EpIHsgICAgICAgLyogRG9lcyBpdCBz YXkgQXBwZW5kPyAqLwotICAgICAgICAgICAgY2tzdHJuY3B5KHAsImEiLDgpOwkJLyogWWVzLiAq LwotICAgICAgICAgICAgZGVidWcoRjEwMCwiem9wZW5vIGFwcGVuZCIsIiIsMCk7Ci0gICAgICAg ICAgICBhcHBlbmQgPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICh4ZmVybG9nCi0jaWZk ZWYgQ0tTWVNMT0cKLSAgICAgICAgfHwgKChja3hzeXNsb2cgPj0gU1lTTEdfRkMpICYmIGNreGxv Z2dpbmcpCi0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgKSB7Ci0gICAgICAgIGdldGZ1 bGxuYW1lKG5hbWUpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJ6b3Blbm8gZnVsbG5hbWUiLGZ1bGxu YW1lLDApOwotICAgIH0KLSAgICB7Ci0gICAgLyogQWxsb3cgdHR5IGRldmljZXMgdG8gb3BlbmVk IGFzIG91dHB1dCBmaWxlcyAyMDA5LzEwLzIwICovCi0JaW50IGZkLCBtb2RlID0gMDsKLQlkZWJ1 ZyhGMTEwLCJ6b3Blbm8gYXR0ZW1wdGluZyB0byBvcGVuIixuYW1lLDApOwotI2lmZGVmIE9fTk9O QkxPQ0sKLQltb2RlID0gT19OT05CTE9DSzsKLSNlbHNlCi0jaWZkZWYgT19OREVMQVkKLQltb2Rl ID0gT19OREVMQVk7Ci0jZWxzZQotI2lmZGVmIEZOREVMQVkKLQltb2RlID0gRk5ERUxBWTsKLSNl bmRpZiAvKiBGTkRFTEFZICovCi0jZW5kaWYJLyogT19OREVMQVkgKi8KLSNlbmRpZgkvKiBPX05P TkJMT0NLICovCi0JZGVidWcoRjExMSwiem9wZW5vIG9wZW4gbW9kZSIsbmFtZSxtb2RlKTsKLQlm ZCA9IG9wZW4obmFtZSxPX1dST05MWSxtb2RlKTsKLQlkZWJ1ZyhGMTExLCJ6b3Blbm8gb3BlbiIs bmFtZSxmZCk7IAotCWlmIChmZCA+IC0xKSB7Ci0JICAgIGlmIChpc2F0dHkoZmQpKSB7Ci0JCWZp bGVmZCA9IGZkOwotCQlpc3R0eSsrOwotCSAgICB9Ci0JfQotICAgIH0KLSAgICBkZWJ1ZyhGMTEx LCJ6b3Blbm8gaXN0dHkiLG5hbWUsaXN0dHkpOwotICAgIGRlYnVnKEYxMTAsInpvcGVubyBmb3Bl biBhcmciLHAsMCk7Ci0gICAgaWYgKGlzdHR5KQotICAgICAgZnBbbl0gPSBmZG9wZW4oZmlsZWZk LHApOwotICAgIGVsc2UKLSAgICAgIGZwW25dID0gZm9wZW4obmFtZSxwKTsJCS8qIFRyeSB0byBv cGVuIHRoZSBmaWxlICovCi0gICAgaXNwaXBlW1pJRklMRV0gPSAwOwotCi0jaWZkZWYgWkRFQlVH Ci0gICAgcHJpbnRmKCJaT1BFTk8gZnBbJWRdPSVsZFxuIixuLGZwW25dKTsKLSNlbmRpZiAvKiBa REVCVUcgKi8KLQotICAgIGlmIChmcFtuXSA9PSBOVUxMKSB7ICAgICAgICAgICAgICAgIC8qIEZh aWxlZCAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJ6b3Blbm8gZmFpbGVkIGVycm5vIiwiIixlcnJu byk7Ci0JaWYgKGlzdHR5KSBjbG9zZShmaWxlZmQpOwotI2lmZGVmIENLU1lTTE9HCi0gICAgICAg IGlmIChja3hzeXNsb2cgPj0gU1lTTEdfRkMgJiYgY2t4bG9nZ2luZykKLSAgICAgICAgICBzeXNs b2coTE9HX0lORk8sICJmaWxlWyVkXSAlczogJXMgZmFpbGVkICglbSkiLAotICAgICAgICAgICAg ICAgICBuLAotICAgICAgICAgICAgICAgICBmdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgYXBw ZW5kID8gImFwcGVuZCIgOiAiY3JlYXRlIgotICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8q IENLU1lTTE9HICovCi0jaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog TGV0IHVwcGVyIGxldmVscyBwcmludCBtZXNzYWdlLiAqLwotICAgICAgICBwZXJyb3IoIkNhbid0 IG9wZW4gb3V0cHV0IGZpbGUiKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3VjY2VlZGVkICovCi0gICAgICAgIGV4dGVy biBpbnQgem9mYnVmZmVyLCB6b2ZibG9jaywgem9idWZzaXplOwotICAgICAgICBkZWJ1ZyhGMTAx LCAiem9wZW5vIHpvYnVmc2l6ZSIsICIiLCB6b2J1ZnNpemUpOwotICAgICAgICBpZiAobiA9PSBa REZJTEUgfHwgbiA9PSBaVEZJTEUpIHsgLyogSWYgZGVidWcgb3IgdHJhbnNhY3Rpb24gbG9nICov Ci0gICAgICAgICAgICBzZXRidWYoZnBbbl0sTlVMTCk7ICAgICAgICAgICAvKiBtYWtlIGl0IHVu YnVmZmVyZWQuICovCi0jaWZkZWYgRE9OREVMQVkKLSAgICAgICAgfSBlbHNlIGlmIChuID09IFpP RklMRSAmJiAhem9mYmxvY2spIHsgLyogYmxvY2tpbmcgb3Igbm9uYmxvY2tpbmcgKi8KLSAgICAg ICAgICAgIGludCBmbGFnczsKLSAgICAgICAgICAgIGlmICgoZmxhZ3MgPSBmY250bChmaWxlbm8o ZnBbbl0pLEZfR0VURkwsMCkpID4gLTEpCi0gICAgICAgICAgICAgIGZjbnRsKGZpbGVubyhmcFtu XSksRl9TRVRGTCwgZmxhZ3MgfAotI2lmZGVmIFFOWAotICAgICAgICAgICAgICAgICAgICBPX05P TkJMT0NLCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICBPX05ERUxBWQotI2VuZGlmIC8qIFFO WCAqLwotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgZGVidWcoRjEwMCwiem9w ZW5vIFpPRklMRSBub25ibG9ja2luZyIsIiIsMCk7Ci0jZW5kaWYgLyogRE9OREVMQVkgKi8KLSAg ICAgICAgfSBlbHNlIGlmIChuID09IFpPRklMRSAmJiAhem9mYnVmZmVyKSB7IC8qIGJ1ZmZlcmVk IG9yIHVuYnVmZmVyZWQgKi8KLSAgICAgICAgICAgIHNldGJ1ZihmcFtuXSxOVUxMKTsKLSAgICAg ICAgICAgIGRlYnVnKEYxMDAsInpvcGVubyBaT0ZJTEUgdW5idWZmZXJlZCIsIiIsMCk7Ci0gICAg ICAgIH0KLQotI2lmZGVmIENLX0xPR0lOCi0gICAgICAgIC8qIEVuZm9yY2UgYW5vbnltb3VzIGZp bGUtY3JlYXRpb24gcGVybWlzc2lvbiAqLwotICAgICAgICBpZiAoaXNndWVzdCkKLSAgICAgICAg ICBpZiAobiA9PSBaV0ZJTEUgfHwgbiA9PSBaTUZJTEUgfHwKLSAgICAgICAgICAgICAgbiA9PSBa T0ZJTEUgfHwgbiA9PSBaREZJTEUgfHwKLSAgICAgICAgICAgICAgbiA9PSBaVEZJTEUgfHwgbiA9 PSBaUEZJTEUgfHwKLSAgICAgICAgICAgICAgbiA9PSBaU0ZJTEUpCi0gICAgICAgICAgICBjaG1v ZChuYW1lLGNreHBlcm1zKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2lmZGVmIENLU1lTTE9H Ci0gICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfRkMgJiYgY2t4bG9nZ2luZykKLSAgICAg ICAgICBzeXNsb2coTE9HX0lORk8sICJmaWxlWyVkXSAlczogJXMgb2siLAotICAgICAgICAgICAg ICAgICBuLAotICAgICAgICAgICAgICAgICBmdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgYXBw ZW5kID8gImFwcGVuZCIgOiAiY3JlYXRlIgotICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8q IENLU1lTTE9HICovCi0gICAgICAgIGRlYnVnKEYxMDAsICJ6b3Blbm8gb2siLCAiIiwgMCk7Ci0g ICAgfQotICAgIHpvdXRjbnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIChQV1ApIHJl c2V0IG91dHB1dCBidWZmZXIgKi8KLSAgICB6b3V0cHRyID0gem91dGJ1ZmZlcjsKLSAgICByZXR1 cm4oKGZwW25dICE9IE5VTEwpID8gMSA6IDApOwotfQotCi0vKiAgWiBDIEwgTyBTIEUgIC0tICBD bG9zZSB0aGUgZ2l2ZW4gZmlsZS4gICovCi0KLS8qICBSZXR1cm5zIDAgaWYgYXJnIG91dCBvZiBy YW5nZSwgMSBpZiBzdWNjZXNzZnVsLCAtMSBpZiBjbG9zZSBmYWlsZWQuICAqLwotCi1pbnQKLXpj bG9zZShuKSBpbnQgbjsgewotICAgIGludCB4ID0gMCwgeDIgPSAwOwotICAgIGV4dGVybiBDS19P RkZfVCBmZmM7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2UgZmlsZSBudW1iZXIiLCIiLG4pOwot ICAgIGlmIChjaGtmbihuKSA8IDEpIHJldHVybigwKTsgICAgICAgIC8qIENoZWNrIHJhbmdlIG9m IG4gKi8KLSAgICBpZiAoKG4gPT0gWk9GSUxFKSAmJiAoem91dGNudCA+IDApKSAvKiAoUFdQKSBv dXRwdXQgbGVmdG92ZXJzICovCi0gICAgICB4MiA9IHpvdXRkdW1wKCk7Ci0KLSAgICBpZiAoZnBb WlNZU0ZOXSB8fCBpc3BpcGVbbl0pIHsgICAgICAvKiBJZiBmaWxlIGlzIHJlYWxseSBwaXBlICov Ci0jaWZuZGVmIE5PUFVTSAotICAgICAgICB4ID0gemNsb3NmKG4pOyAgICAgICAgICAgICAgICAg IC8qIGRvIGl0IHNwZWNpYWxseSAqLwotI2Vsc2UKLSAgICAgICAgeCA9IEVPRjsKLSNlbmRpZiAv KiBOT1BVU0ggKi8KLSAgICAgICAgZGVidWcoRjEwMSwiemNsb3NlIHpjbG9zZiIsIiIseCk7Ci0g ICAgICAgIC8qIGRlYnVnKEYxMDEsInpjbG9zZSB6Y2xvc2YgZnBbbl0iLCIiLGZwW25dKTsgKi8K LSAgICB9IGVsc2UgewotICAgICAgICBpZiAoKGZwW25dICE9IHN0ZG91dCkgJiYgKGZwW25dICE9 IHN0ZGluKSkKLSAgICAgICAgICB4ID0gZmNsb3NlKGZwW25dKTsKLSAgICAgICAgZnBbbl0gPSBO VUxMOwotI2lmZGVmIENPTU1FTlQKLQlpZiAobiA9PSBaQ1RFUk0gfHwgbiA9PSBaU1RESU8pCS8q IFNlZSB6b3Blbm8oKSAqLwotCSAgaWYgKGZwW1pPRklMRV0gPT0gc3Rkb3V0KQotCSAgICBmcFta T0ZJTEVdID0gTlVMTDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotICAgIGlmbGVuID0g LTFMOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEludmFsaWRhdGUgZmlsZSBsZW5ndGggKi8K LSAgICBpZiAoeCA9PSBFT0YpIHsgICAgICAgICAgICAgICAgICAgICAvKiBpZiB3ZSBnb3QgYSBj bG9zZSBlcnJvciAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2UgZmNsb3NlIGZhaWxzIiwi Iix4KTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9IGVsc2UgaWYgKHgyIDwgMCkgeyAgICAg ICAgICAgICAgICAvKiBvciBlcnJvciBmbHVzaGluZyBsYXN0IGJ1ZmZlciAqLwotICAgICAgICBk ZWJ1ZyhGMTAxLCJ6Y2xvc2UgZXJyb3IgZmx1c2hpbmcgbGFzdCBidWZmZXIiLCIiLHgyKTsKLSAg ICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiB0aGVuIHJldHVybiBhbiBl cnJvciAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIFByaW50IGxvZyByZWNvcmQgY29tcGF0 aWJsZSB3aXRoIHd1LWZ0cGQgKi8KLSAgICAgICAgaWYgKHhmZXJsb2cgJiYgKG4gPT0gWklGSUxF IHx8IG4gPT0gWk9GSUxFKSkgewotICAgICAgICAgICAgY2hhciAqIHMsICpwOwotICAgICAgICAg ICAgZXh0ZXJuIGNoYXIgdHRuYW1lW107Ci0gICAgICAgICAgICBpZiAoIWlrbG9nb3BlbikgKFZP SUQpIGRvaWtsb2coKTsgLyogT3BlbiBsb2cgaWYgbmVjZXNzYXJ5ICovCi0gICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJ6Y2xvc2UgaWtsb2dvcGVuIiwiIixpa2xvZ29wZW4pOwotICAgICAgICAgICAg aWYgKGlrbG9nb3BlbikgewotCQlpbnQgbGVuOwotCQljaGFyICogZm5hbTsKLQotICAgICAgICAg ICAgICAgIHRpbWVub3cgPSB0aW1lKE5VTEwpOwotI2lmZGVmIENLX0xPR0lOCi0gICAgICAgICAg ICAgICAgaWYgKGxvZ2dlZF9pbikKLSAgICAgICAgICAgICAgICAgIHMgPSBjbGllbnRob3N0Owot ICAgICAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgICAgICAgICAg ICAgICAgcyA9IChjaGFyICopdHRuYW1lOwotICAgICAgICAgICAgICAgIGlmICghcykgcyA9ICIi OwotICAgICAgICAgICAgICAgIGlmICghKnMpIHMgPSAiKiI7Ci0jaWZkZWYgQ0tfTE9HSU4KLSAg ICAgICAgICAgICAgICBpZiAobG9nZ2VkX2luKSB7Ci0gICAgICAgICAgICAgICAgICAgIHAgPSBn dWVzdHBhc3M7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghKnApIHAgPSAiKiI7Ci0gICAgICAg ICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICAgICAgICAgICAgICAg IHAgPSB3aG9hbWkoKTsKLQotCQlsZW4gPSAyNCArIDEyICsgKGludClzdHJsZW4ocykgKyAxNgot CQkgICsgKGludClzdHJsZW4oZnVsbG5hbWUpICsgMSArIDEgKyAxICsgMQotCQkgICAgKyAoaW50 KXN0cmxlbihwKSArIDYgKyAyICsgMTI7Ci0JCWZuYW0gPSBmdWxsbmFtZTsKLQkJaWYgKCEqZm5h bSkgZm5hbSA9ICIocGlwZSkiOwotCi0JCWlmIChsZW4gPiBJS1NETVNHTEVOKQotCQkgIHNwcmlu dGYoaWtzZG1zZywJLyogU0FGRSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIiUuMjRzIFtC VUZGRVIgV09VTEQgT1ZFUkZMT1ddXG4iLGN0aW1lKCZ0aW1lbm93KSk7Ci0JCWVsc2UKLQkJICBz cHJpbnRmKGlrc2Rtc2csCS8qIFNBRkUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICIlLjI0 cyAlZCAlcyAlcyAlcyAlYyAlcyAlYyAlYyAlcyAlcyAlZCAlc1xuIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgIGN0aW1lKCZ0aW1lbm93KSwgICAgICAgIC8qIGRhdGUvdGltZSAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgZ3RpbWVyKCksICAgICAgICAgICAgICAgLyogZWxhcHNlZCBzZWNz ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBzLCAgICAgICAgICAgICAgICAgICAgICAvKiBw ZWVyIG5hbWUgKi8KLQkJCWNrZnN0b2EoZmZjKSwJICAgICAgICAvKiBieXRlIGNvdW50ICovCi0g ICAgICAgICAgICAgICAgICAgICAgICBmbmFtLAkJCS8qIGZ1bGwgcGF0aG5hbWUgb2YgZmlsZSAq LwotICAgICAgICAgICAgICAgICAgICAgICAgKGJpbmFyeSA/ICdiJyA6ICdhJyksICAgLyogYmlu YXJ5IG9yIGFzY2lpICovCi0gICAgICAgICAgICAgICAgICAgICAgICAiXyIsICAgICAgICAgICAg ICAgICAgICAvKiBvcHRpb25zID0gbm9uZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgbiA9 PSBaSUZJTEUgPyAnbycgOiAnaScsIC8qIGluL291dCAqLwotI2lmZGVmIENLX0xPR0lOCi0gICAg ICAgICAgICAgICAgICAgICAgICAoaXNndWVzdCA/ICdhJyA6ICdyJyksICAvKiBVc2VyIHR5cGUg Ki8KLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAncicsCi0jZW5kaWYgLyogQ0tfTE9H SU4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHAsICAgICAgICAgICAgICAgICAgICAgIC8q IFVzZXJuYW1lIG9yIGd1ZXN0IHBhc3N3ZCAqLwotI2lmZGVmIENLX0xPR0lOCi0gICAgICAgICAg ICAgICAgICAgICAgICBsb2dnZWRfaW4gPyAiaWtzIiA6ICJrZXJtaXQiLCAvKiBSZWNvcmQgSUQg Ki8KLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAia2VybWl0IiwKLSNlbmRpZiAvKiBD S19MT0dJTiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIC8qIFVz ZXIgSUQgb24gY2xpZW50IHN5c3RlbSB1bmtub3duICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAiKiIgICAgICAgICAgICAgLyogRGl0dG8gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiemNsb3NlIGlrc2Rtc2ciLGlrc2Rtc2csMCk7 Ci0gICAgICAgICAgICAgICAgd3JpdGUoeGZlcmxvZywgaWtzZG1zZywgKGludClzdHJsZW4oaWtz ZG1zZykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMDEsInpj bG9zZSByZXR1cm5zIiwiIiwxKTsKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLX0KLQotLyog IFogQyBIIEkgTiAgLS0gIEdldCBhIGNoYXJhY3RlciBmcm9tIHRoZSBpbnB1dCBmaWxlLiAgKi8K LQotLyogIFJldHVybnMgLTEgaWYgRU9GLCAwIG90aGVyd2lzZSB3aXRoIGNoYXJhY3RlciByZXR1 cm5lZCBpbiBhcmd1bWVudCAgKi8KLQotaW50Ci16Y2hpbihuLGMpIGludCBuOyBpbnQgKmM7IHsK LSAgICBpbnQgYTsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsICYm IChuID09IFpDVEVSTSB8fCBuID09IFpTVERJTykpIHsKLSAgICAgICAgYSA9IGNvbmluYygwKTsK LSAgICAgICAgaWYgKCpjIDwgMCkKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgIH0gZWxzZQot I2VuZGlmIC8qIElLU0QgKi8KLSAgICAvKiAoUFdQKSBKdXN0IGluIGNhc2UgdGhpcyBnZXRzIGNh bGxlZCB3aGVuIGl0IHNob3VsZG4ndC4gKi8KLSAgICBpZiAobiA9PSBaSUZJTEUpIHsKLSAgICAg ICAgYSA9IHptaW5jaGFyKCk7CQkJLyogTm90ZTogdGhpcyBjYXRjaGVzIEN0cmwtWiAqLwotICAg ICAgICBpZiAoYSA8IDApCQkJLyogKFNlZSB6aW5maWxsKCkuLi4pICovCi0JICByZXR1cm4oLTEp OwotICAgIH0gZWxzZSB7Ci0JYSA9IGdldGMoZnBbbl0pOwotCWlmIChhID09IEVPRikgcmV0dXJu KC0xKTsKLSNpZmRlZiBDS19DVFJMWgotCS8qIElmIFNFVCBGSUxFIEVPRiBDVFJMLVosIGZpcnN0 IEN0cmwtWiBtYXJrcyBFT0YgKi8KLQlpZiAoIWJpbmFyeSAmJiBhID09IDB4MUEgJiYgZW9mbWV0 aG9kID09IFhZRU9GX1opCi0JICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIENLX0NUUkxaICovCi0g ICAgfQotICAgICpjID0gKENIQVIpIGEgJiAwMzc3OwotICAgIHJldHVybigwKTsKLX0KLQotLyog IFogUyBJIE4gTCAgLS0gIFJlYWQgYSBsaW5lIGZyb20gYSBmaWxlICAqLwotCi0vKgotICBXcml0 ZXMgdGhlIGxpbmUgaW50byB0aGUgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgotICBu IGlzIHRoZSBLZXJtaXQgImNoYW5uZWwgbnVtYmVyIi4KLSAgV3JpdGluZyB0ZXJtaW5hdGVzIHdo ZW4gbmV3bGluZSBpcyBlbmNvdW50ZXJlZCwgbmV3bGluZSBpcyBub3QgY29waWVkLgotICBXcml0 aW5nIGFsc28gdGVybWluYXRlcyB1cG9uIEVPRiBvciBpZiBsZW5ndGggeCBpcyBleGhhdXN0ZWQu Ci0gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBFT0Ygb3IgZXJyb3IuCi0qLwotaW50Ci16 c2lubChuLHMseCkgaW50IG4sIHg7IGNoYXIgKnM7IHsKLSAgICBpbnQgYSwgeiA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAvKiB6IGlzIHJldHVybiBjb2RlLiAqLwotICAgIGludCBjb3VudCA9 IDA7Ci0gICAgaW50IGxlbiA9IDA7Ci0gICAgY2hhciAqYnVmOwotICAgIGV4dGVybiBDSEFSIGZl b2w7ICAgICAgICAgICAgICAgICAgIC8qIExpbmUgdGVybWluYXRvciAqLwotCi0gICAgaWYgKCFz IHx8IGNoa2ZuKG4pIDwgMSkgICAgICAgICAgICAgLyogTWFrZSBzdXJlIGZpbGUgaXMgb3Blbiwg ZXRjICovCi0gICAgICByZXR1cm4oLTEpOwotICAgIGJ1ZiA9IHM7Ci0gICAgc1swXSA9ICdcMCc7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgcmV0dXJuIGp1bmsgKi8KLQotICAgIGEg PSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgY2hhcmFjdGVyLCBu b25lIHlldC4gKi8KLSAgICB3aGlsZSAoeC0tKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBV cCB0byBnaXZlbiBsZW5ndGggKi8KLSAgICAgICAgaW50IG9sZCA9IDA7Ci0gICAgICAgIGlmIChm ZW9sKSAgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmlvdXMgY2hhcmFjdGVyICovCi0gICAg ICAgICAgb2xkID0gYTsKLSAgICAgICAgaWYgKHpjaGluKG4sJmEpIDwgMCkgeyAgICAgICAgICAv KiBSZWFkIGEgY2hhcmFjdGVyIGZyb20gdGhlIGZpbGUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYx MDEsInpzaW5sIHpjaGluIGZhaWwiLCIiLGNvdW50KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9 PSAwKQotICAgICAgICAgICAgICB6ID0gLTE7ICAgICAgICAgICAgICAgICAgIC8qIEVPRiBvciBv dGhlciBlcnJvciAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZQotICAgICAg ICAgIGNvdW50Kys7Ci0gICAgICAgIGlmIChmZW9sKSB7ICAgICAgICAgICAgICAgICAgICAgLyog U2luZ2xlLWNoYXJhY3RlciBsaW5lIHRlcm1pbmF0b3IgKi8KLSAgICAgICAgICAgIGlmIChhID09 IGZlb2wpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENSTEYgbGluZSB0ZXJtaW5hdG9yICovCi0gICAgICAgICAgICBpZiAo YSA9PSAnXDAxNScpICAgICAgICAgICAgLyogQ1IsIGdldCBuZXh0IGNoYXJhY3RlciAqLwotICAg ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChvbGQgPT0gJ1wwMTUnKSB7ICAg ICAgICAvKiBQcmV2aW91cyBjaGFyYWN0ZXIgd2FzIENSICovCi0gICAgICAgICAgICAgICAgaWYg KGEgPT0gJ1wwMTInKSB7ICAgICAgLyogVGhpcyBvbmUgaXMgTEYsIHNvIHdlIGhhdmUgYSBsaW5l ICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgIC8qIE5vdCBMRiwgZGVwb3NpdCBDUiAqLwotICAgICAgICAgICAgICAg ICAgICAqcysrID0gJ1wwMTUnOwotICAgICAgICAgICAgICAgICAgICB4LS07Ci0gICAgICAgICAg ICAgICAgICAgIGxlbisrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgICAgICAqcyA9IGE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlcG9zaXQg Y2hhcmFjdGVyICovCi0gICAgICAgIHMrKzsKLSAgICAgICAgbGVuKys7Ci0gICAgfQotICAgICpz ID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSB0aGUgc3RyaW5n ICovCi0gICAgZGVidWcoRjAxMSwienNpbmwiLGJ1ZixsZW4pOwotICAgIHJldHVybih6KTsKLX0K LQotLyogIFogWCBJIE4gIC0tICBSZWFkIHggYnl0ZXMgZnJvbSBhIGZpbGUgICovCi0KLS8qCi0g IFJlYWRzIHggYnl0ZXMgKG9yIGxlc3MpIGZyb20gY2hhbm5lbCBuIGFuZCB3cml0ZXMgdGhlbQot ICB0byB0aGUgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgotICBSZXR1cm5zIG51bWJl ciBvZiBieXRlcyByZWFkIG9uIHN1Y2Nlc3MsIDAgb24gRU9GIG9yIGVycm9yLgotKi8KLWludAot enhpbihuLHMseCkgaW50IG4sIHg7IGNoYXIgKnM7IHsKLSNpZmRlZiBJS1NECi0gICAgaWYgKGlu c2VydmVyICYmICFsb2NhbCAmJiAobiA9PSBaQ1RFUk0gfHwgbiA9PSBaU1RESU8pKSB7Ci0gICAg ICAgIGludCBhLCBpOwotICAgICAgICBhID0gdHRjaGsoKTsKLSAgICAgICAgaWYgKGEgPCAxKSBy ZXR1cm4oMCk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhICYmIGkgPCB4OyBpKyspCi0gICAg ICAgICAgc1tpXSA9IGNvbmluYygwKTsKLSAgICAgICAgcmV0dXJuKGkpOwotICAgIH0KLSNlbmRp ZiAvKiBJS1NEICovCi0KLSAgICByZXR1cm4oZnJlYWQocywgc2l6ZW9mIChjaGFyKSwgeCwgZnBb bl0pKTsKLX0KLQotLyoKLSAgWiBJIE4gRiBJIEwgTCAgLS0gIEJ1ZmZlcmVkIGZpbGUgaW5wdXQu Ci0KLSAgKHJlKWZpbGwgdGhlIGZpbGUgaW5wdXQgYnVmZmVyIHdpdGggZGF0YS4gIEFsbCBmaWxl IGlucHV0Ci0gIHNob3VsZCBnbyB0aHJvdWdoIHRoaXMgcm91dGluZSwgdXN1YWxseSBieSBjYWxs aW5nIHRoZSB6bWluY2hhcigpCi0gIG1hY3JvIGRlZmluZWQgaW4gY2tja2VyLmguICBSZXR1cm5z OgotCi0gIFZhbHVlIDAuLjI1NSBvbiBzdWNjZXNzLCB0aGUgY2hhcmFjdGVyIHRoYXQgd2FzIHJl YWQuCi0gIC0xIG9uIGVuZCBvZiBmaWxlLgotICAtMiBvbiBhbnkga2luZCBvZiBlcnJvciBvdGhl ciB0aGFuIGVuZCBvZiBmaWxlLgotICAtMyB0aW1lb3V0IHdoZW4gcmVhZGluZyBmcm9tIHBpcGUg KEtlcm1pdCBwYWNrZXQgbW9kZSBvbmx5KS4KLSovCi1pbnQKLXppbmZpbGwoKSB7Ci0gICAgZXh0 ZXJuIGludCBrYWN0aXZlLCBzcnZwaW5nOwotICAgIGVycm5vID0gMDsKLQotI2lmZGVmIFpERUJV RwotICAgIHByaW50ZigiWklORklMTCBmcFslZF09JWxkXG4iLFpJRklMRSxmcFtaSUZJTEVdKTsK LSNlbmRpZiAvKiBaREVCVUcgKi8KLQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIgJiYg IWxvY2FsICYmIGZwW1pJRklMRV0gPT0gc3RkaW4pIHsKLSAgICAgICAgaW50IGEsIGk7Ci0gICAg ICAgIGEgPSB0dGNoaygpOwotICAgICAgICBpZiAoYSA8IDApIHJldHVybigtMik7Ci0gICAgICAg IGZvciAoaSA9IDA7IGkgPCBhICYmIGkgPCBJTkJVRlNJWkU7IGkrKykgewotICAgICAgICAgICAg emluYnVmZmVyW2ldID0gY29uaW5jKDApOwotICAgICAgICB9Ci0gICAgICAgIHppbmNudCA9IGk7 Ci0gICAgICAgIC8qIHNldCBwb2ludGVyIHRvIGJlZ2lubmluZywgKD09ICZ6aW5idWZmZXJbMF0p ICovCi0gICAgICAgIHppbnB0ciA9IHppbmJ1ZmZlcjsKLSAgICAgICAgaWYgKHppbmNudCA9PSAw KSByZXR1cm4oLTEpOwotICAgICAgICB6aW5jbnQtLTsgICAgICAgICAgICAgICAgICAgICAgIC8q IE9uZSBsZXNzIGNoYXIgaW4gYnVmZmVyICovCi0gICAgICAgIHJldHVybigoaW50KSgqemlucHRy KyspICYgMDM3Nyk7IC8qIGJlY2F1c2Ugd2UgcmV0dXJuIHRoZSBmaXJzdCAqLwotICAgIH0KLSNl bmRpZiAvKiBJS1NEICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ6aW5maWxsIGthY3RpdmUiLCIiLGth Y3RpdmUpOwotCi0gICAgaWYgKCEoa2FjdGl2ZSAmJiBpc3BpcGVbWklGSUxFXSkpIHsKLSAgICAg ICAgaWYgKGZlb2YoZnBbWklGSUxFXSkpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsIlpJTkZJ TEwgZmVvZiIsIiIsMCk7Ci0jaWZkZWYgWkRFQlVHCi0gICAgICAgICAgICBwcmludGYoIlpJTkZJ TEwgRU9GXG4iKTsKLSNlbmRpZiAvKiBaREVCVUcgKi8KLSAgICAgICAgICAgIHJldHVybigtMSk7 Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2xlYXJlcnIoZnBbWklGSUxFXSk7Ci0KLSNpZmRlZiBT RUxFQ1QKLSAgICAvKiBIZXJlIHdlIGNhbiBjYWxsIHNlbGVjdCgpIHRvIGdldCBhIHRpbWVvdXQu Li4gKi8KLSAgICBpZiAoa2FjdGl2ZSAmJiBpc3BpcGVbWklGSUxFXSkgewotICAgICAgICBpbnQg c2VjcywgeiA9IDA7Ci0jaWZuZGVmIE5PWEZFUgotICAgICAgICBpZiAoc3J2cGluZykgewotICAg ICAgICAgICAgc2VjcyA9IDE7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6aW5maWxsIGNhbGxp bmcgdHR3YWl0IiwiIixzZWNzKTsKLSAgICAgICAgICAgIHogPSB0dHdhaXQoZmlsZW5vKGZwW1pJ RklMRV0pLHNlY3MpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiemluZmlsbCB0dHdhaXQiLCIi LHopOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgICAgIGlmICh6ID09IDAp Ci0gICAgICAgICAgcmV0dXJuKC0zKTsKLSAgICB9Ci0jZW5kaWYgLyogU0VMRUNUICovCi0KLSNp ZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIGRl YnVnKEYxMDEsIlpJTkZJTEwgSU5CVUZTSVpFIiwiIixJTkJVRlNJWkUpOwotI2lmZGVmIFVTRV9N RU1DUFkKLSAgICAgICAgbWVtc2V0KHppbmJ1ZmZlciwgMHhGRiwgSU5CVUZTSVpFKTsKLSNlbHNl Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBJTkJVRlNJWkU7IGkrKykgewotICAgICAgICAgICAg emluYnVmZmVyW2ldID0gMHhGRjsKLSNpZmRlZiBDT01NRU5UCQkJCS8qIFRvbyBtdWNoISAqLwot ICAgICAgICAgICAgZGVidWcoRjEwMSwiWklORklMTCB6aW5idWZmZXJbaV0iLCIiLGkpOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgfQotI2VuZGlmIC8qIFVTRV9NRU1DUFkgKi8KLQlj a3N0cm5jcHkoemluYnVmZmVyLCJ6aW5idWZmZXIgaXMgYSB2YWxpZCBidWZmZXIiLElOQlVGU0la RSk7Ci0JLyogZGVidWcoRjExMSwiWklORklMTCBhYm91dCB0byBjYWxsIGZyZWFkIix6aW5idWZm ZXIsemluYnVmZmVyKTsgKi8KLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotLyoKLSAgTm90 ZTogVGhlIGZvbGxvd2luZyByZWFkIE1VU1QgYmUgbm9uYmxvY2tpbmcgd2hlbiByZWFkaW5nIGZy b20gYSBwaXBlCi0gIGFuZCB3ZSB3YW50IHRpbWVvdXRzIHRvIHdvcmsuICBTZWUgenhjbWQoKS4K LSovCi0gICAgemluY250ID0gZnJlYWQoemluYnVmZmVyLCBzaXplb2YgKGNoYXIpLCBJTkJVRlNJ WkUsIGZwW1pJRklMRV0pOwotICAgIGRlYnVnKEYxMDEsIlpJTkZJTEwgZnJlYWQiLCIiLHppbmNu dCk7IC8qIEp1c3QgdGhlIHNpemUgKi8KLSNpZmRlZiBaREVCVUcKLSAgICBwcmludGYoIkZSRUFE PSVkXG4iLHppbmNudCk7Ci0jZW5kaWYgLyogWkRFQlVHICovCi0jaWZkZWYgQ0tfQ1RSTFoKLSAg ICAvKiBJZiBTRVQgRklMRSBFT0YgQ1RSTC1aLCBmaXJzdCBDdHJsLVogbWFya3MgRU9GICovCi0g ICAgaWYgKHppbmNudCA+IDAgJiYgIWJpbmFyeSAmJiBlb2ZtZXRob2QgPT0gWFlFT0ZfWikgewot CXJlZ2lzdGVyIGludCBpOwotCWZvciAoaSA9IDA7IGkgPCB6aW5jbnQ7IGkrKykgewotCSAgICBp ZiAoemluYnVmZmVyW2ldID09IFNVQikgewotCQl6aW5jbnQgPSBpOwkJLyogU3RvcCBhdCBmaXJz dCBDdHJsLVogKi8KLQkJaWYgKGkgPT0gMCkKLQkJICByZXR1cm4oLTEpOwotCQlicmVhazsKLQkg ICAgfQotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENLX0NUUkxaICovCi0KLSAgICBpZiAo emluY250ID09IDApIHsgICAgICAgICAgICAgICAgICAvKiBHb3Qgbm90aGluZz8gKi8KLSAgICAg ICAgaWYgKGZlcnJvcihmcFtaSUZJTEVdKSkgewotICAgICAgICAgICAgZGVidWcoRjEwMCwiWklO RklMTCBmZXJyb3IiLCIiLDApOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiWklORklMTCBlcnJu byIsIiIsZXJybm8pOwotI2lmZGVmIFpERUJVRwotICAgICAgICAgICAgcHJpbnRmKCJaSU5GSUxM IGVycm5vPSVkXG4iLGVycm5vKTsKLSNlbmRpZiAvKiBaREVCVUcgKi8KLSNpZmRlZiBFV09VTERC TE9DSwotICAgICAgICAgICAgcmV0dXJuKChlcnJubyA9PSBFV09VTERCTE9DSykgPyAtMyA6IC0y KTsKLSNlbHNlCi0gICAgICAgICAgICByZXR1cm4oLTIpOwotI2VuZGlmIC8qIEVXT1VMREJMT0NL ICovCi0gICAgICAgIH0KLQotICAgIC8qIEluIGNhc2UgZmVvZigpIGRpZG4ndCB3b3JrIGp1c3Qg YWJvdmUgLS0gc29tZXRpbWVzIGl0IGRvZXNuJ3QuLi4gKi8KLQotICAgICAgICBpZiAoZmVvZihm cFtaSUZJTEVdKSApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsIlpJTkZJTEwgY291bnQgMCBF T0YgcmV0dXJuIC0xIiwiIiwwKTsKLSAgICAgICAgICAgIHJldHVybiAoLTEpOwotICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgZGVidWcoRjEwMCwiWklORklMTCBjb3VudCAwIG5vdCBFT0Yg cmV0dXJuIC0yIiwiIiwwKTsKLSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgemlucHRyID0gemluYnVmZmVyOyAgICAvKiBzZXQgcG9pbnRlciB0byBiZWdpbm5p bmcsICg9PSAmemluYnVmZmVyWzBdKSAqLwotICAgIHppbmNudC0tOyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE9uZSBsZXNzIGNoYXIgaW4gYnVmZmVyICovCi0gICAgcmV0dXJuKChpbnQp KCp6aW5wdHIrKykgJiAwMzc3KTsgICAgLyogYmVjYXVzZSB3ZSByZXR1cm4gdGhlIGZpcnN0ICov Ci19Ci0KLS8qICBaIFMgTyBVIFQgIC0tICBXcml0ZSBhIHN0cmluZyBvdXQgdG8gdGhlIGdpdmVu IGZpbGUsIGJ1ZmZlcmVkLiAgKi8KLQotLyogIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBm YWlsdXJlICovCi0KLWludAotenNvdXQobixzKSBpbnQgbjsgY2hhciAqczsgewotICAgIGludCBy YyA9IDA7Ci0gICAgcmMgPSBjaGtmbihuKTsKLSAgICBpZiAocmMgPCAxKSByZXR1cm4oLTEpOyAg ICAgICAgICAgICAvKiBLZWVwIHRoaXMsIHByZXZlbnRzIG1lbW9yeSBmYXVsdHMgKi8KLSAgICBp ZiAoIXMpIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAvKiBOdWxsIHBvaW50ZXIsIGRvIG5v dGhpbmcsIHN1Y2NlZWQgKi8KLSAgICBpZiAoISpzKSByZXR1cm4oMCk7ICAgICAgICAgICAgICAg ICAvKiBlbXB0eSBzdHJpbmcsIGRpdHRvICovCi0KLSNpZmRlZiBJS1NECi0gICAgLyoKLSAgICAg IFRoaXMgaGFwcGVucyB3aXRoIGNsaWVudC1zaWRlIEtlcm1pdCBzZXJ2ZXIgd2hlbiBhIFJFTU9U RSBjb21tYW5kCi0gICAgICB3YXMgc2VudCBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudCBh bmQgdGhlIHNlcnZlciBpcyBzdXBwb3NlZCB0bwotICAgICAgZGlzcGxheSB0aGUgdGV4dCwgYnV0 IG9mIGNvdXJzZSB0aGVyZSBpcyBubyBwbGFjZSB0byBkaXNwbGF5IGl0Ci0gICAgICBzaW5jZSBp dCBpcyBpbiByZW1vdGUgbW9kZSBleGVjdXRpbmcgS2VybWl0IHByb3RvY29sLgotICAgICovCi0g ICAgaWYgKGluc2VydmVyICYmICFsb2NhbCAmJiAobiA9PSBaQ1RFUk0gfHwgbiA9PSBaU1RESU8p KSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICByZXR1cm4odHRvbChzLCgoaW50KXN0cmxlbihz KSkgPCAwKSA/IC0xIDogMCk7Ci0jZWxzZQotICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICBpZiAobiA9PSBaU0ZJ TEUpIHsKLQlpbnQgazsKLQlrID0gc3RybGVuKHMpOwotCXJjID0gd3JpdGUoZmlsZW5vKGZwW25d KSxzLGspOwotCXJldHVybigocmMgPT0gaykgPyAwIDogLTEpOwotICAgIH0KLSAgICByYyA9IGZw dXRzKHMsZnBbbl0pID09IEVPRiA/IC0xIDogMDsKLSAgICBpZiAobiA9PSBaV0ZJTEUpCi0gICAg ICBmZmx1c2goZnBbbl0pOwotICAgIHJldHVybihyYyk7Ci19Ci0KLS8qICBaIFMgTyBVIFQgTCAg LS0gIFdyaXRlIHN0cmluZyB0byBmaWxlLCB3aXRoIGxpbmUgdGVybWluYXRvciwgYnVmZmVyZWQg ICovCi0KLS8qICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZSAqLwotCi1pbnQK LXpzb3V0bChuLHMpIGludCBuOyBjaGFyICpzOyB7Ci0gICAgaWYgKHpzb3V0KG4scykgPCAwKQot ICAgICAgICByZXR1cm4oLTEpOwotCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlciAmJiAh bG9jYWwgJiYgKG4gPT0gWkNURVJNIHx8IG4gPT0gWlNURElPKSkgewotI2lmZGVmIENPTU1FTlQK LSAgICAgICAgcmV0dXJuKHR0b2MoTEYpKTsKLSNlbHNlCi0gICAgICAgIHJldHVybigwKTsgICAg ICAgICAgICAgICAgICAgICAgLyogU2VlIGNvbW1lbnRzIGluIHpzb3V0KCkgKi8KLSNlbmRpZiAv KiBDT01NRU5UICovCi0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotICAgIGlmIChuID09IFpT RklMRSkgICAgICAgICAgICAgICAgICAgIC8qIFNlc3Npb24gbG9nIGlzIHVuYnVmZmVyZWQgKi8K LSAgICAgIHJldHVybih3cml0ZShmaWxlbm8oZnBbbl0pLCJcbiIsMSkgPT0gMSA/IDAgOiAtMSk7 Ci0gICAgZWxzZSBpZiAoZnB1dHMoIlxuIixmcFtuXSkgPT0gRU9GKQotICAgICAgcmV0dXJuKC0x KTsKLSAgICBpZiAobiA9PSBaRElGSUwgfHwgbiA9PSBaV0ZJTEUpICAgICAvKiBGbHVzaCBjb25u ZWN0aW9uIGxvZyByZWNvcmRzICovCi0gICAgICBmZmx1c2goZnBbbl0pOwotICAgIHJldHVybigw KTsKLX0KLQotLyogIFogUyBPIFUgVCBYICAtLSAgV3JpdGUgeCBjaGFyYWN0ZXJzIHRvIGZpbGUs IHVuYnVmZmVyZWQuICAqLwotCi0vKiAgUmV0dXJucyBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0 dGVuIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUgKi8KLQotaW50Ci16c291dHgobixzLHgpIGlu dCBuLCB4OyBjaGFyICpzOyB7Ci0gICAgaW50IGs7Ci0gICAgaWYgKCFzKSByZXR1cm4oMCk7Ci0g ICAgaWYgKCEqcykgcmV0dXJuKDApOwotCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlciAm JiAhbG9jYWwgJiYgKG4gPT0gWkNURVJNIHx8IG4gPT0gWlNURElPKSkgewotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgcmV0dXJuKHR0b2wocyx4KSk7ICAgICAgICAgICAgICAvKiBTZWUgY29tbWVu dHMgaW4genNvdXQoKSAqLwotI2Vsc2UKLSAgICAgICAgcmV0dXJuKHgpOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0gICAgaWYgKChrID0gKGludClz dHJsZW4ocykpID4geCkgeCA9IGs7IC8qIE5vdGhpbmcgZWxzZSB3b3VsZCBtYWtlIHNlbnNlICov Ci0jaWZkZWYgQ09NTUVOVAotICAgIGlmIChjaGtmbihuKSA8IDEpIHJldHVybigtMSk7Ci0gICAg cmV0dXJuKHdyaXRlKGZwW25dLT5fZmlsZSxzLHgpKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0g ICAgcmV0dXJuKHdyaXRlKGZpbGVubyhmcFtuXSkscyx4KSA9PSB4ID8geCA6IC0xKTsKLX0KLQot LyogIFogQyBIIE8gVSBUICAtLSAgQWRkIGEgY2hhcmFjdGVyIHRvIHRoZSBnaXZlbiBmaWxlLiAg Ki8KLQotLyogIFNob3VsZCByZXR1cm4gMCBvciBncmVhdGVyIG9uIHN1Y2Nlc3MsIC0xIG9uIGZh aWx1cmUgKGUuZy4gZGlzayBmdWxsKSAgKi8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXpjaG91 dChyZWdpc3RlciBpbnQgbiwgY2hhciBjKQotI2Vsc2UKLXpjaG91dChuLGMpIHJlZ2lzdGVyIGlu dCBuOyBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHpjaG91dCgpICovIHsKLSAg ICAvKiBpZiAoY2hrZm4obikgPCAxKSByZXR1cm4oLTEpOyAqLwotCi0jaWZkZWYgSUtTRAotICAg IGlmIChpbnNlcnZlciAmJiAhbG9jYWwgJiYgKG4gPT0gWkNURVJNIHx8IG4gPT0gWlNURElPKSkg ewotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgcmV0dXJuKHR0b2MoYykpOwotI2Vsc2UKLSAgICAg ICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAvKiBTZWUgY29tbWVudHMgaW4genNv dXQoKSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwot Ci0gICAgaWYgKG4gPT0gWlNGSUxFKSAgICAgICAgICAgICAgICAgICAgLyogVXNlIHVuYnVmZmVy ZWQgZm9yIHNlc3Npb24gbG9nICovCi0gICAgICByZXR1cm4od3JpdGUoZmlsZW5vKGZwW25dKSwm YywxKSA9PSAxID8gMCA6IC0xKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog QnVmZmVyZWQgZm9yIGV2ZXJ5dGhpbmcgZWxzZSAqLwotICAgIGlmIChwdXRjKGMsZnBbbl0pID09 IEVPRikgICAvKiBJZiB0cnVlLCBtYXliZSB0aGVyZSB3YXMgYW4gZXJyb3IgKi8KLSAgICAgIHJl dHVybihmZXJyb3IoZnBbbl0pPy0xOjApOyAgICAgICAvKiBDaGVjayB0byBtYWtlIHN1cmUgKi8K LSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UuLi4g Ki8KLSAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVyZSB3YXMg bm8gZXJyb3IuICovCi19Ci0KLS8qIChQV1ApIGJ1ZmZlcmVkIGNoYXJhY3RlciBvdXRwdXQgcm91 dGluZSB0byBzcGVlZCB1cCBmaWxlIElPICovCi0KLWludAotem91dGR1bXAoKSB7Ci0gICAgaW50 IHg7Ci0gICAgY2hhciAqIHpwOwotICAgIHpvdXRwdHIgPSB6b3V0YnVmZmVyOyAgICAgICAgICAg ICAgIC8qIFJlc2V0IGJ1ZmZlciBwb2ludGVyIGluIGFsbCBjYXNlcyAqLwotI2lmZGVmIERFQlVH Ci0gICAgaWYgKGRlYmxvZykKLSAgICAgIGRlYnVnKEYxMDEsInpvdXRkdW1wIHpvdXRjbnQiLCIi LHpvdXRjbnQpOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgaWYgKHpvdXRjbnQgPT0gMCkgeyAg ICAgICAgICAgICAgICAgLyogTm90aGluZyB0byBvdXRwdXQgKi8KLSAgICAgICAgcmV0dXJuKDAp OwotICAgIH0gZWxzZSBpZiAoem91dGNudCA8IDApIHsgICAgICAgICAgIC8qIFVuZXhwZWN0ZWQg bmVnYXRpdmUgYXJndW1lbnQgKi8KLSAgICAgICAgem91dGNudCA9IDA7ICAgICAgICAgICAgICAg ICAgICAvKiBSZXNldCBvdXRwdXQgYnVmZmVyIGNvdW50ICovCi0gICAgICAgIHJldHVybigtMSk7 ICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGZhaWwuICovCi0gICAgfQotCi0jaWZkZWYgSUtT RAotICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwgJiYgZnBbWk9GSUxFXSA9PSBzdGRvdXQpIHsK LSNpZmRlZiBDT01NRU5UCi0gICAgICAgIHggPSB0dG9sKHpvdXRidWZmZXIsem91dGNudCk7Ci0j ZWxzZQotICAgICAgICB4ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlZSBjb21t ZW50cyBpbiB6c291dCgpICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICB6b3V0Y250 ID0gMDsKLSAgICAgICAgcmV0dXJuKHggPiAwID8gMCA6IC0xKTsKLSAgICB9Ci0jZW5kaWYgLyog SUtTRCAqLwotCi0vKgotICBGcmFuayBQcmluZGxlIHN1Z2dlc3RlZCB0aGF0IHJlcGxhY2luZyB0 aGlzIGZ3cml0ZSgpIGJ5IGFuIGZmbHVzaCgpCi0gIGZvbGxvd2VkIGJ5IGEgd3JpdGUoKSB3b3Vs ZCBpbXByb3ZlIHRoZSBlZmZpY2llbmN5LCBlc3BlY2lhbGx5IHdoZW4KLSAgd3JpdGluZyB0byBz dGRvdXQuICBTdWJzZXF1ZW50IHRlc3RzIHNob3dlZCBhIDUtZm9sZCBpbXByb3ZlbWVudC4KLSov Ci0jaWZkZWYgQ09NTUVOVAotICAgIGlmICh4ID0gZndyaXRlKHpvdXRidWZmZXIsIDEsIHpvdXRj bnQsIGZwW1pPRklMRV0pKSAuLi4KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZm5kZWYgQ0tf Tk9OQkxPQ0sKLSAgICBmZmx1c2goZnBbWk9GSUxFXSk7Ci0jZW5kaWYgLyogQ0tfTk9OQkxPQ0sg Ki8KLSAgICB6cCA9IHpvdXRidWZmZXI7Ci0gICAgd2hpbGUgKHpvdXRjbnQgPiAwKSB7Ci0gICAg ICAgIGlmICgoeCA9IHdyaXRlKGZpbGVubyhmcFtaT0ZJTEVdKSx6cCx6b3V0Y250KSkgPiAtMSkg ewotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICBpZiAoZGVibG9nKSAgICAgICAgICAgICAgICAg LyogU2F2ZSBhIGZ1bmN0aW9uIGNhbGwuLi4gKi8KLSAgICAgICAgICAgICAgZGVidWcoRjEwMSwi em91dGR1bXAgd3JvdGUiLCIiLHgpOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgICAgICB6 b3V0Y250IC09IHg7ICAgICAgICAgICAgICAgLyogQWRqdXN0IG91dHB1dCBidWZmZXIgY291bnQg Ki8KLSAgICAgICAgICAgIHpwICs9IHg7ICAgICAgICAgICAgICAgICAgICAvKiBhbmQgcG9pbnRl ciAqLwotICAgICAgICB9IGVsc2UgewotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICBpZiAoZGVi bG9nKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiem91dGR1bXAgd3JpdGUgZXJyb3Ii LCIiLGVycm5vKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6b3V0ZHVtcCB3cml0ZSBy ZXR1cm5zIiwiIix4KTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgICAg ICAgICAgem91dGNudCA9IDA7ICAgICAgICAgICAgICAgIC8qIFJlc2V0IG91dHB1dCBidWZmZXIg Y291bnQgKi8KLSAgICAgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAvKiB3cml0 ZSgpIGZhaWxlZCAqLwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0KLQotLyog IEMgSCBLIEYgTiAgLS0gIEludGVybmFsIGZ1bmN0aW9uIHRvIHZlcmlmeSBmaWxlIG51bWJlciBp cyBvayAgKi8KLQotLyoKLSBSZXR1cm5zOgotICAtMTogRmlsZSBudW1iZXIgbiBpcyBvdXQgb2Yg cmFuZ2UKLSAgIDA6IG4gaXMgaW4gcmFuZ2UsIGJ1dCBmaWxlIGlzIG5vdCBvcGVuCi0gICAxOiBu IGluIHJhbmdlIGFuZCBmaWxlIGlzIG9wZW4KLSovCi1pbnQKLWNoa2ZuKG4pIGludCBuOyB7Ci0g ICAgLyogaWYgKG4gIT0gWkRGSUxFKSBkZWJ1ZyhGMTAxLCJjaGtmbiIsIiIsbik7ICovCi0gICAg aWYgKG4gPCAwIHx8IG4gPj0gWk5GSUxTKSB7Ci0gICAgICAgIGlmIChuICE9IFpERklMRSkgZGVi dWcoRjEwMSwiY2hrZm4gb3V0IG9mIHJhbmdlIiwiIixuKTsKLSAgICAgICAgcmV0dXJuKC0xKTsK LSAgICB9IGVsc2UgewotICAgICAgICAvKiBpZiAobiAhPSBaREZJTEUpIGRlYnVnKEYxMDEsImNo a2ZuIGZwW25dIiwiIixmcFtuXSk7ICovCi0gICAgICAgIHJldHVybigoZnBbbl0gPT0gTlVMTCkg PyAwIDogMSk7Ci0gICAgfQotfQotCi0vKiAgWiBHIEUgVCBGIFMgLS0gUmV0dXJuIGZpbGUgc2l6 ZSByZWdhcmRsZXNzIG9mIGFjY2Vzc2liaWxpdHkgKi8KLS8qCi0gIFVzZWQgZm9yIGRpcmVjdG9y eSBsaXN0aW5ncywgZXRjLgotICBSZXR1cm5zOgotICAgIFRoZSBzaXplIG9mIHRoZSBmaWxlIGlu IGJ5dGVzLCAwIG9yIGdyZWF0ZXIsIGlmIHRoZSBzaXplIGNhbiBiZSBsZWFybmVkLgotICAgIC0x IGlmIHRoZSBmaWxlIHNpemUgY2FuIG5vdCBiZSBvYnRhaW5lZC4KLSAgQWxzbyAoYW5kIHRoaXMg aXMgYSBoYWNrIGp1c3QgZm9yIFVOSVgpOgotICAgIElmIHRoZSBhcmd1bWVudCBpcyB0aGUgbmFt ZSBvZiBhIHN5bWJvbGljIGxpbmssCi0gICAgdGhlIGdsb2JhbCB2YXJpYWJsZSBpc3N5bWxpbmsg aXMgc2V0IHRvIDEsCi0gICAgYW5kIHRoZSBnbG9iYWwgYnVmZmVyIGxpbmtuYW1lW10gZ2V0cyB0 aGUgbGluayB2YWx1ZS4KLSAgICBBbmQgaXQgc2V0cyB6Z2ZzX2RpciB0byAxIGlmIGl0J3MgYSBk aXJlY3RvcnksIG90aGVyd2lzZSAwLgotICBUaGlzIGxldHMgdXMgYXZvaWQgbnVtZXJvdXMgcmVk dW5kYW50IGNhbGxzIHRvIHN0YXQoKS4KLSovCi1pbnQgemdmc19saW5rID0gMDsKLWludCB6Z2Zz X2RpciA9IDA7Ci10aW1lX3Qgemdmc19tdGltZSA9IDA7Ci11bnNpZ25lZCBpbnQgemdmc19tb2Rl ID0gMDsKLQotI2lmZGVmIENLU1lNTElOSwotY2hhciBsaW5rbmFtZVtDS01BWFBBVEgrMV07Ci0j aWZuZGVmIF9JRkxOSwotI2RlZmluZSBfSUZMTksgMDEyMDAwMAotI2VuZGlmIC8qIF9JRkxOSyAq LwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotCi1DS19PRkZfVAotemdldGZzKG5hbWUpIGNoYXIg Km5hbWU7IHsKLSAgICBzdHJ1Y3Qgc3RhdCBidWY7Ci0gICAgY2hhciBmbmFtW0NLTUFYUEFUSCs0 XTsKLSAgICBDS19PRkZfVCBzaXplID0gKENLX09GRl9UKS0xOwotICAgIGludCB4OwotICAgIGlu dCBuZWVkcmxpbmsgPSAwOwotICAgIGNoYXIgKiBzOwotCi0gICAgaWYgKCFuYW1lKSBuYW1lID0g IiI7Ci0gICAgaWYgKCEqbmFtZSkgcmV0dXJuKC0xKTsKLQotI2lmZGVmIFVOSVgKLSAgICB4ID0g c3RybGVuKG5hbWUpOwotICAgIGlmICh4ID09IDkgJiYgIXN0cmNtcChuYW1lLCIvZGV2L251bGwi KSkKLSAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBVTklYICovCi0KLSAgICBzID0gbmFtZTsK LSNpZmRlZiBEVElMREUKLSAgICBpZiAoKnMgPT0gJ34nKSB7Ci0gICAgICAgIHMgPSB0aWxkZV9l eHBhbmQocyk7Ci0gICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAgICBpZiAoISpzKSBzID0g bmFtZTsKLSAgICB9Ci0jZW5kaWYgLyogRFRJTERFICovCi0gICAgeCA9IGNrc3RybmNweShmbmFt LHMsQ0tNQVhQQVRIKTsKLSAgICBzID0gZm5hbTsKLSAgICBkZWJ1ZyhGMTExLCJ6Z2V0ZnMgZm5h bSIscyx4KTsKLSAgICBpZiAoeCA+IDAgJiYgc1t4LTFdID09ICcvJykKLSAgICAgIHNbeC0xXSA9 ICdcMCc7Ci0KLSAgICB6Z2ZzX2RpciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1 bWUgaXQncyBub3QgYSBkaXJlY3RvcnkgKi8KLSAgICB6Z2ZzX2xpbmsgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAvKiBBc3N1bWUgaXQncyBub3QgYSBzeW1saW5rICovCi0gICAgemdmc19tdGlt ZSA9IDA7CQkJLyogTm8gdGltZSB5ZXQgKi8KLSAgICB6Z2ZzX21vZGUgPSAwOwkJCS8qIE5vIHBl cm1pc3Npb24gYml0cyB5ZXQgKi8KLQotI2lmZGVmIENLU1lNTElOSyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFdlJ3JlIGRvaW5nIHN5bWxpbmtzPyAqLwotI2lmZGVmIFVTRV9MU1RBVCAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE9LIHRvIHVzZSBsc3RhdCgpPyAqLwotICAgIHggPSBsc3Rh dChzLCZidWYpOwotICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIiLDEpOwotICAgIGlmICh4IDwgMCkg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXQoKSBmYWlsZWQgKi8KLSAgICAgIHJldHVy bigtMSk7Ci0gICAgaWYgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm93IHNl ZSBpZiBpdCdzIGEgc3ltbGluayAqLwotI2lmZGVmIFNfSVNMTksKLSAgICAgICAgU19JU0xOSyhi dWYuc3RfbW9kZSkKLSNlbHNlCi0jaWZkZWYgX0lGTE5LCi0gICAgICAgICgoX0lGTVQgJiBidWYu c3RfbW9kZSkgPT0gX0lGTE5LKQotI2VuZGlmIC8qIF9JRkxOSyAqLwotI2VuZGlmIC8qIFNfSVNM TksgKi8KLSAgICAgICAgKSB7Ci0gICAgICAgIHpnZnNfbGluayA9IDE7ICAgICAgICAgICAgICAg ICAgLyogSXQncyBhIHN5bWxpbmsgKi8KLSAgICAgICAgbGlua25hbWVbMF0gPSAnXDAnOyAgICAg ICAgICAgICAvKiBHZXQgdGhlIG5hbWUgKi8KLSAgICAgICAgeCA9IHJlYWRsaW5rKHMsbGlua25h bWUsQ0tNQVhQQVRIKTsKLSAgICAgICAgZGVidWcoRjEwMSwiemdldGZzIHJlYWRsaW5rIixzLHgp OwotICAgICAgICBpZiAoeCA+IC0xICYmIHggPCBDS01BWFBBVEgpIHsgIC8qIEl0J3MgYSBsaW5r ICovCi0gICAgICAgICAgICBsaW5rbmFtZVt4XSA9ICdcMCc7Ci0gICAgICAgICAgICBzaXplID0g YnVmLnN0X3NpemU7ICAgICAgICAgLyogUmVtZW1iZXIgc2l6ZSBvZiBsaW5rICovCi0gICAgICAg ICAgICB4ID0gc3RhdChzLCZidWYpOyAgICAgICAgICAgLyogTm93IHN0YXQgdGhlIGxpbmtlZC10 byBmaWxlICovCi0JICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIiLDIpOwotICAgICAgICAgICAgaWYg KHggPCAwKSAgICAgICAgICAgICAgICAgIC8qIHNvIHdlIGNhbiBzZWUgaWYgaXQncyBhIGRpcmVj dG9yeSAqLwotICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgY2tzdHJuY3B5KGxpbmtuYW1lLCIobG9va3VwIGZhaWxlZCkiLENLTUFYUEFUSCk7 Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZSAgLyogIVVTRV9MU1RBVCAqLwotICAgIHggPSBzdGF0 KHMsJmJ1Zik7ICAgICAgICAgICAgICAgICAgIC8qIE5vIGxzdGF0KCksIHVzZSBzdGF0KCkgaW5z dGVhZCAqLwotICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIiLDMpOwotICAgIGlmICh4IDwgMCkKLSAg ICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogVVNFX0xTVEFUICovCi0KLSAgICAvKiBEbyB3ZSBu ZWVkIHRvIGNhbGwgcmVhZGxpbmsoKT8gKi8KLQotI2lmZGVmIE5PTElOS0JJVFMKLS8qCi0gIGxz dGF0KCkgZG9lcyBub3Qgd29yayBpbiBTQ08gb3BlcmF0aW5nIHN5c3RlbXMuICBGcm9tICJtYW4g TlMgbHN0YXQiOgotCi0gIGxzdGF0IG9idGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpbGUg bmFtZWQgYnkgcGF0aC4gSW4gdGhlIGNhc2Ugb2YgYQotICBzeW1ib2xpYyBsaW5rLCBsc3RhdCBy ZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rLCBhbmQgbm90IHRoZSBmaWxlCi0gIG5h bWVkIGJ5IHRoZSBsaW5rLiBJdCBpcyBvbmx5IHVzZWQgYnkgdGhlIE5GUyBhdXRvbW91bnQgZGFl bW9uIGFuZCBzaG91bGQKLSAgbm90IGJlIHV0aWxpemVkIGJ5IHVzZXJzLgotKi8KLSAgICBuZWVk cmxpbmsgPSAxOwotICAgIGRlYnVnKEYxMDEsInpnZXRmcyBmb3JjZWQgbmVlZHJsaW5rIiwiIixu ZWVkcmxpbmspOwotI2Vsc2UKLSNpZmRlZiBTX0lTTE5LCi0gICAgbmVlZHJsaW5rID0gU19JU0xO SyhidWYuc3RfbW9kZSk7Ci0gICAgZGVidWcoRjEwMSwiemdldGZzIFNfSVNMTksgbmVlZHJsaW5r IiwiIixuZWVkcmxpbmspOwotI2Vsc2UKLSNpZmRlZiBfSUZMTksKLSAgICBuZWVkcmxpbmsgPSAo X0lGTVQgJiBidWYuc3RfbW9kZSkgPT0gX0lGTE5LOwotICAgIGRlYnVnKEYxMDEsInpnZXRmcyBf SUZMTksgbmVlZHJsaW5rIiwiIixuZWVkcmxpbmspOwotI2Vsc2UKLSAgICBuZWVkcmxpbmsgPSAx OwotICAgIGRlYnVnKEYxMDEsInpnZXRmcyBkZWZhdWx0IG5lZWRybGluayIsIiIsbmVlZHJsaW5r KTsKLSNlbmRpZiAvKiBfSUZMTksgKi8KLSNlbmRpZiAvKiBTX0lTTE5LICovCi0jZW5kaWYgLyog Tk9MSU5LQklUUyAqLwotCi0gICAgaWYgKG5lZWRybGluaykgewotICAgICAgICBsaW5rbmFtZVsw XSA9ICdcMCc7Ci0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgeCA9IHJlYWRsaW5rKHMsbGlu a25hbWUsQ0tNQVhQQVRIKTsKLSNpZmRlZiBERUJVRwotICAgICAgICBkZWJ1ZyhGMTExLCJ6Z2V0 ZnMgcmVhZGxpbmsiLHMseCk7Ci0gICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICBkZWJ1ZyhG MTAxLCJ6Z2V0ZnMgcmVhZGxpbmsgZXJybm8iLCIiLGVycm5vKTsKLSAgICAgICAgZWxzZQotICAg ICAgICAgIGRlYnVnKEYxMTAsInpnZXRmcyByZWFkbGluayByZXN1bHQiLGxpbmtuYW1lLDApOwot I2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgIGlmICh4ID4gLTEgJiYgeCA8IENLTUFYUEFUSCkg ewotICAgICAgICAgICAgemdmc19saW5rID0gMTsKLSAgICAgICAgICAgIGxpbmtuYW1lW3hdID0g J1wwJzsKLSAgICAgICAgfQotICAgIH0KLSNlbHNlICAvKiAhQ0tTWU1MSU5LICovCi0gICAgeCA9 IHN0YXQocywmYnVmKTsgICAgICAgICAgICAgICAgICAgLyogSnVzdCBzdGF0IHRoZSBmaWxlICov Ci0gICAgZGVidWcoRjExMSwiemdldGZzIHN0YXQiLHMseCk7Ci0gICAgaWYgKHggPCAwKSAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGdldCB0aGUgc2l6ZSAqLwotICAgICAgcmV0dXJu KC0xKTsKLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLQotICAgIHpnZnNfbXRpbWUgPSBidWYuc3Rf bXRpbWU7Ci0gICAgemdmc19tb2RlID0gYnVmLnN0X21vZGU7Ci0gICAgemdmc19kaXIgPSAoU19J U0RJUihidWYuc3RfbW9kZSkpID8gMSA6IDA7IC8qIFNldCAiaXMgZGlyZWN0b3J5IiBmbGFnICov Ci0gICAgZGVidWcoRjExMSwiemdldGZzIHNpemUiLHMsc2l6ZSk7Ci0gICAgZGVidWcoRjExMSwi emdldGZzIHN0X3NpemUiLHMsYnVmLnN0X3NpemUpOwotICAgIHJldHVybigoc2l6ZSA8IDBMKSA/ IGJ1Zi5zdF9zaXplIDogc2l6ZSk7IC8qIFJldHVybiB0aGUgc2l6ZSAqLwotfQotCi0KLS8qICBa IEMgSCBLIEkgIC0tICBDaGVjayBpZiBpbnB1dCBmaWxlIGV4aXN0cyBhbmQgaXMgcmVhZGFibGUg ICovCi0KLS8qCi0gIFJldHVybnM6Ci0gICA+PSAwIGlmIHRoZSBmaWxlIGNhbiBiZSByZWFkIChy ZXR1cm5zIHRoZSBzaXplKS4KLSAgICAgLTEgaWYgZmlsZSBkb2Vzbid0IGV4aXN0IG9yIGNhbid0 IGJlIGFjY2Vzc2VkLAotICAgICAtMiBpZiBmaWxlIGV4aXN0cyBidXQgaXMgbm90IHJlYWRhYmxl IChlLmcuIGEgZGlyZWN0b3J5IGZpbGUpLgotICAgICAtMyBpZiBmaWxlIGV4aXN0cyBidXQgcHJv dGVjdGVkIGFnYWluc3QgcmVhZCBhY2Nlc3MuCi0KLSAgRm9yIEJlcmtlbGV5IFVuaXgsIGEgZmls ZSBtdXN0IGJlIG9mIHR5cGUgInJlZ3VsYXIiIHRvIGJlIHJlYWRhYmxlLgotICBEaXJlY3Rvcnkg ZmlsZXMsIHNwZWNpYWwgZmlsZXMsIGFuZCBzeW1ib2xpYyBsaW5rcyBhcmUgbm90IHJlYWRhYmxl LgotKi8KLUNLX09GRl9UCi16Y2hraShuYW1lKSBjaGFyICpuYW1lOyB7Ci0gICAgc3RydWN0IHN0 YXQgYnVmOwotICAgIGNoYXIgKiBzOwotICAgIGludCB4LCBpdHNhZGlyID0gMDsKLSAgICBleHRl cm4gaW50IHpjaGtpZCwgZGlyYWN0aXZlLCBtYXRjaGZpZm87Ci0KLSAgICBpZiAoIW5hbWUpCi0g ICAgICByZXR1cm4oLTEpOwotICAgIHggPSBzdHJsZW4obmFtZSk7Ci0gICAgaWYgKHggPCAxKQot ICAgICAgcmV0dXJuKC0xKTsKLSAgICBzID0gbmFtZTsKLQotI2lmZGVmIFVOSVgKLSAgICBpZiAo eCA9PSA5ICYmICFzdHJjbXAocywiL2Rldi9udWxsIikpCi0gICAgICByZXR1cm4oMCk7Ci0gICAg aWYgKHggPT0gOCAmJiAhc3RyY21wKHMsIi9kZXYvdHR5IikpCi0gICAgICByZXR1cm4oMCk7Ci0j ZW5kaWYgLyogVU5JWCAqLwotCi0jaWZkZWYgRFRJTERFCi0gICAgaWYgKCpzID09ICd+Jykgewot ICAgICAgICBzID0gdGlsZGVfZXhwYW5kKHMpOwotICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAg ICAgICAgaWYgKCEqcykgcyA9IG5hbWU7Ci0gICAgfQotI2VuZGlmIC8qIERUSUxERSAqLwotCi0j aWZkZWYgQ0tST09UCi0gICAgZGVidWcoRjExMSwiemNoa2kgc2V0cm9vdCIsY2tyb290LGNrcm9v dHNldCk7Ci0gICAgaWYgKGNrcm9vdHNldCkgaWYgKCF6aW5yb290KG5hbWUpKSB7Ci0JZGVidWco RjExMCwiemNoa2kgc2V0cm9vdCB2aW9sYXRpb24iLG5hbWUsMCk7Ci0JcmV0dXJuKC0xKTsKLSAg ICB9Ci0jZW5kaWYgLyogQ0tST09UICovCi0KLSAgICB4ID0gc3RhdChzLCZidWYpOwotICAgIGRl YnVnKEYxMDEsIlNUQVQiLCIiLDUpOwotICAgIGlmICh4IDwgMCkgewotICAgICAgICBkZWJ1ZyhG MTExLCJ6Y2hraSBzdGF0IGZhaWxzIixzLGVycm5vKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICB9Ci0gICAgaWYgKFNfSVNESVIgKGJ1Zi5zdF9tb2RlKSkKLSAgICAgIGl0c2FkaXIgPSAxOwot Ci0gICAgaWYgKCEoaXRzYWRpciAmJiB6Y2hraWQpKSB7ICAgICAgICAgLyogVW5sZXNzIHRoaXMu Li4gKi8KLSAgICAgICAgaWYgKCFTX0lTUkVHIChidWYuc3RfbW9kZSkgICAgICAvKiBNdXN0IGJl IHJlZ3VsYXIgZmlsZSAqLwotI2lmZGVmIFNfSVNGSUZPCi0gICAgICAgICAgICAmJiAoIW1hdGNo ZmlmbyB8fCAhU19JU0ZJRk8gKGJ1Zi5zdF9tb2RlKSkgIC8qIG9yIEZJRk8gKi8KLSNlbmRpZiAv KiBTX0lTRklGTyAqLwotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6 Y2hraSBub3QgcmVndWxhciBmaWxlIChvciBmaWZvKSIscyxtYXRjaGZpZm8pOwotICAgICAgICAg ICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ6Y2hraSBz dGF0IG9rOiIscyx4KTsKLQotICAgIGlmIChkaXJhY3RpdmUpIHsJCQkvKiBJZiBsaXN0aW5nIGRv bid0IGNoZWNrIGFjY2VzcyAqLwotCXggPSAxOwotICAgIH0gZWxzZSB7Ci0jaWZkZWYgU1dfQUND X0lECi0JZGVidWcoRjEwMCwiemNoa2kgc3dhcHBpbmcgaWRzIGZvciBhY2Nlc3MoKSIsIiIsMCk7 Ci0JcHJpdl9vbigpOwotI2VuZGlmIC8qIFNXX0FDQ19JRCAqLwotCWlmICgoeCA9IGFjY2Vzcyhz LFJfT0spKSA8IDApCi0JICB4ID0gYWNjZXNzKHMsWF9PSyk7CQkvKiBGb3IgUlVOLWNsYXNzIGNv bW1hbmRzICovCi0jaWZkZWYgU1dfQUNDX0lECi0JcHJpdl9vZmYoKTsKLQlkZWJ1ZyhGMTAwLCJ6 Y2hraSBzd2FwcGVkIGlkcyByZXN0b3JlZCIsIiIsMCk7Ci0jZW5kaWYgLyogU1dfQUNDX0lEICov Ci0gICAgfQotICAgIGlmICh4IDwgMCkgewkJCS8qIElzIHRoZSBmaWxlIGFjY2Vzc2libGU/ICov Ci0gICAgICAgIGRlYnVnKEYxMTEsInpjaGtpIGFjY2VzcyBmYWlsZWQ6IixzLHgpOyAvKiBObyAq LwotICAgICAgICByZXR1cm4oLTMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmbGVuID0gYnVm LnN0X3NpemU7ICAgICAgICAgICAgLyogWWVzLCByZW1lbWJlciBzaXplICovCi0gICAgICAgIGNr c3RybmNweShuYW1idWYscyxDS01BWFBBVEgpOyAgLyogYW5kIG5hbWUgZ2xvYmFsbHkuICovCi0g ICAgICAgIGRlYnVnKEYxMTEsInpjaGtpIGFjY2VzcyBvazoiLHMsaWZsZW4pOwotICAgICAgICBy ZXR1cm4oKGlmbGVuID4gLTFMKSA/IGlmbGVuIDogMEwpOwotICAgIH0KLX0KLQotLyogIFogQyBI IEsgTyAgLS0gIENoZWNrIGlmIG91dHB1dCBmaWxlIGNhbiBiZSBjcmVhdGVkICAqLwotCi0vKgot ICBSZXR1cm5zIC0xIGlmIHdyaXRlIHBlcm1pc3Npb24gZm9yIHRoZSBmaWxlIHdvdWxkIGJlIGRl bmllZCwgMCBvdGhlcndpc2UuCi0KLSAgTk9URTogVGhlIGRlc2lnbiBpcyBmbGF3ZWQuICBUaGVy ZSBpcyBubyBkaXN0aW5jdGlvbiBhbW9uZzoKLSAgIC4gQ2FuIEkgb3ZlcndyaXRlIGFuIGV4aXN0 aW5nIGZpbGU/Ci0gICAuIENhbiBJIGNyZWF0ZSBhIGZpbGUgKG9yIGRpcmVjdG9yeSkgaW4gYW4g ZXhpc3RpbmcgZGlyZWN0b3J5PwotICAgLiBDYW4gSSBjcmVhdGUgYSBmaWxlIChvciBkaXJlY3Rv cnkpIGFuZCBpdHMgcGFyZW50KHMpPwotKi8KLWludAotemNoa28obmFtZSkgY2hhciAqbmFtZTsg ewotICAgIGludCBpLCB4LCBpdHNhZGlyID0gMDsKLSAgICBjaGFyICpzID0gTlVMTDsKLSAgICBj aGFyICogb25hbWU7Ci0gICAgZXh0ZXJuIGludCB6Y2hrb2Q7ICAgICAgICAgICAgICAgICAgLyog VXNlZCBieSBJRiBXUklURUFCTEUgKi8KLQotICAgIGRlYnVnKEYxMTAsInpjaGtvIGVudHJ5Iixu YW1lLDApOwotCi0gICAgaWYgKCFuYW1lKSByZXR1cm4oLTEpOyAgICAgICAgICAgICAgLyogV2F0 Y2ggb3V0IGZvciBudWxsIHBvaW50ZXIuICovCi0KLSAgICBvbmFtZSA9IG5hbWU7Ci0KLSNpZmRl ZiBDS1JPT1QKLSAgICBkZWJ1ZyhGMTExLCJ6Y2hrbyBzZXRyb290Iixja3Jvb3QsY2tyb290c2V0 KTsKLSAgICBpZiAoY2tyb290c2V0KSBpZiAoIXppbnJvb3QobmFtZSkpIHsKLQlkZWJ1ZyhGMTEw LCJ6Y2hrbyBzZXRyb290IHZpb2xhdGlvbiIsbmFtZSwwKTsKLQllcnJubyA9IEVBQ0NFUzsKLQly ZXR1cm4oLTEpOwotICAgIH0KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotICAgIHggPSAoaW50KXN0 cmxlbihuYW1lKTsgICAgICAgICAgICAgIC8qIEdldCBsZW5ndGggb2YgZmlsZW5hbWUgKi8KLSAg ICBkZWJ1ZyhGMTExLCJ6Y2hrbyBsZW4iLG5hbWUseCk7Ci0gICAgZGVidWcoRjExMSwiemNoa28g emNoa29kIixuYW1lLHpjaGtvZCk7Ci0KLSNpZmRlZiBVTklYCi0vKgotICBXcml0aW5nIHRvIG51 bGwgZGV2aWNlIGlzIE9LLgotKi8KLSAgICBpZiAoeCA9PSA5ICYmICFzdHJjbXAobmFtZSwiL2Rl di9udWxsIikpCi0gICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKHggPT0gOCAmJiAhc3RyY21wKG5h bWUsIi9kZXYvdHR5IikpCi0gICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogVU5JWCAqLwotCi0g ICAgcyA9IG5hbWU7Ci0jaWZkZWYgRFRJTERFCi0gICAgaWYgKCpzID09ICd+JykgewotICAgICAg ICBzID0gdGlsZGVfZXhwYW5kKHMpOwotICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICAgICAg aWYgKCEqcykgcyA9IG5hbWU7Ci0JeCA9IHN0cmxlbihzKTsKLSAgICB9Ci0jZW5kaWYgLyogRFRJ TERFICovCi0gICAgbmFtZSA9IHM7Ci0gICAgcyA9IE5VTEw7Ci0vKgotICB6Y2hrb2QgaXMgYSBn bG9iYWwgZmxhZyBtZWFuaW5nIHdlJ3JlIGNoZWNraW5nIG5vdCB0byBzZWUgaWYgdGhlIGRpcmVj dG9yeQotICBmaWxlIGlzIHdyaXRlYWJsZSwgYnV0IGlmIGl0J3MgT0sgdG8gY3JlYXRlIGZpbGVz IElOIHRoZSBkaXJlY3RvcnkuCi0qLwotICAgIGlmICghemNoa29kICYmIGlzZGlyKG5hbWUpKSB7 CS8qIERpcmVjdG9yaWVzIGFyZSBub3Qgd3JpdGVhYmxlICovCi0JZGVidWcoRjExMSwiemNoa28g aXNkaXIiLG5hbWUsMSk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgcyA9IG1hbGxvYyh4KzMp OyAgICAgICAgICAgICAgICAgICAgLyogTXVzdCBjb3B5IGJlY2F1c2Ugd2UgY2FuJ3QgKi8KLSAg ICBpZiAoIXMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3cml0ZSBpbnRvIG91ciBh cmd1bWVudC4gKi8KLSAgICAgICAgZnByaW50ZihzdGRlcnIsInpjaGtvOiBNYWxsb2MgZXJyb3Ig NDZcbiIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBja3N0cm5jcHkocyxuYW1l LHgrMyk7Ci0jaWZkZWYgVU5JWAotI2lmZGVmIE5PVVVDUAotICAgIHsJCQkJCS8qIDIwMDkvMTAv MjAgKi8KLSAgICAvKiBBbGxvdyB0dHkgZGV2aWNlcyB0byBvcGVuZWQgYXMgb3V0cHV0IGZpbGVz ICovCi0JaW50IGZkLCBpc3R0eSA9IDAsIG1vZGUgPSAwOwotCWRlYnVnKEYxMTAsInpjaGtvIGF0 dGVtcHRpbmcgdG8gb3BlbiIsbmFtZSwwKTsKLQkvKiBEb24ndCBibG9jayBvbiBsYWNrIG9mIENh cnJpZXIgb3Igb3RoZXIgbW9kZW0gc2lnbmFscyAqLwotI2lmZGVmIE9fTk9OQkxPQ0sKLQltb2Rl ID0gT19OT05CTE9DSzsKLSNlbHNlCi0jaWZkZWYgT19OREVMQVkKLQltb2RlID0gT19OREVMQVk7 Ci0jZWxzZQotI2lmZGVmIEZOREVMQVkKLQltb2RlID0gRk5ERUxBWTsKLSNlbmRpZiAvKiBGTkRF TEFZICovCi0jZW5kaWYJLyogT19OREVMQVkgKi8KLSNlbmRpZgkvKiBPX05PTkJMT0NLICovCi0J ZGVidWcoRjExMSwiemNoa28gb3BlbiBtb2RlIixuYW1lLG1vZGUpOwotCWZkID0gb3BlbihuYW1l LE9fV1JPTkxZLG1vZGUpOwkvKiBNdXN0IGF0dGVtcHQgdG8gb3BlbiBpdCAqLwotCWRlYnVnKEYx MTEsInpjaGtvIG9wZW4iLG5hbWUsZmQpOyAKLQlpZiAoZmQgPiAtMSkgewkJCS8qIHRvIGdldCBh IGZpbGUgZGVzY3JpcHRvciAqLwotCSAgICBpZiAoaXNhdHR5KGZkKSkJCS8qIGZvciBpc2F0dHko KSAqLwotCSAgICAgIGlzdHR5Kys7Ci0JICAgIGRlYnVnKEYxMTEsInpjaGtvIGlzYXR0eSIsbmFt ZSxpc3R0eSk7Ci0JICAgIGZkID0gY2xvc2UoZmQpOwotCSAgICBpZiAoaXN0dHkpIHsKLQkJZ290 byBkb2FjY2VzczsKLQkgICAgfQotCX0gZWxzZSB7Ci0JICAgIGRlYnVnKEYxMDEsInpjaGtvIG9w ZW4gZXJybm8iLCIiLGVycm5vKTsgCi0JICAgIHggPSAtMTsKLQl9Ci0gICAgfQotI2VuZGlmCS8q IE5PVVVDUCAqLwotI2VuZGlmCS8qIFVOSVggKi8KLSAgICBmb3IgKGkgPSB4OyBpID4gMDsgaS0t KSB7ICAgICAgICAgICAvKiBTdHJpcCBmaWxlbmFtZSBmcm9tIHJpZ2h0LiAqLwotICAgICAgICBp ZiAoSVNESVJTRVAoc1tpLTFdKSkgewotICAgICAgICAgICAgaXRzYWRpciA9IDE7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJ6Y2hrbyBpIiwi IixpKTsKLSAgICBkZWJ1ZyhGMTAxLCJ6Y2hrbyBpdHNhZGlyIiwiIixpdHNhZGlyKTsKLQotI2lm ZGVmIENPTU1FTlQKLS8qIFgvT1BFTiBYUEczLWNvbXBsaWFudCBzeXN0ZW1zIGZhaWwgaWYgYXJn dW1lbnQgZW5kcyB3aXRoICIvIi4uLiAgKi8KLSAgICBpZiAoaSA9PSAwKSAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBJZiBubyBwYXRoLCB1c2UgY3VycmVudCBkaXJlY3RvcnkgKi8KLSAgICAg IHN0cmNweShzLCIuLyIpOwotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE90aGVyd2lzZSwgdXNlIGdpdmVuIG9uZS4gKi8KLSAgICAgIHNbaV0gPSAnXDAnOwotI2Vs c2UKLSNpZmRlZiBDT01NRU5UCi0vKgotICBUaGUgZm9sbG93aW5nIGRvZXMgbm90IHdvcmsgZm9y ICJmb28vYmFyIiB3aGVyZSB0aGUgZm9vIGRpcmVjdG9yeSBkb2VzCi0gIG5vdCBleGlzdCBldmVu IHRob3VnaCB3ZSBjb3VsZCBjcmVhdGUgaXQ6IGFjY2VzcygiZm9vLy4iKSBmYWlscywgYnV0Ci0g IGFjY2VzcygiZm9vIikgd29ya3MgT0suCi0qLwotLyogU28gbm93IHdlIHVzZSAicGF0aC8uIiBp ZiBwYXRoIGdpdmVuLCBvciAiLiIgaWYgbm8gcGF0aCBnaXZlbi4gKi8KLSAgICBzW2krK10gPSAn Lic7ICAgICAgICAgICAgICAgICAgICAgICAvKiBBcHBlbmQgIi4iIHRvIHBhdGguICovCi0gICAg c1tpXSA9ICdcMCc7Ci0jZWxzZQotLyogU28gTk9XIHdlIHN0cmlwIHBhdGggc2VnbWVudHMgZnJv bSB0aGUgcmlnaHQgYXMgbG9uZyBhcyB0aGV5IGRvbid0ICovCi0vKiBleGlzdCAtLSB3ZSBvbmx5 IGNhbGwgYWNjZXNzKCkgZm9yIHBhdGggc2VnbWVudHMgdGhhdCAqZG8qIGV4aXN0Li4gKi8KLS8q IChCdXQgdGhpcyBpc24ndCBxdWl0ZSByaWdodCBlaXRoZXIgc2luY2Ugbm93IHpjaGtvKC9mb28v YmFyL2Jhei94eHgpICovCi0vKiBzdWNjZWVkcyB3aGVuIEkgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8g Zm9vIGFuZCBiYXIgYnV0IGJheiBkb2Vzbid0IGV4aXQuKSAqLwotCi0gICAgaWYgKGl0c2FkaXIg JiYgaSA+IDApIHsKLSAgICAgICAgc1tpLTFdID0gJ1wwJzsKLSAgICAgICAgd2hpbGUgKHNbMF0g JiYgIWlzZGlyKHMpKSB7Ci0gICAgICAgICAgICBmb3IgKGkgPSAoaW50KXN0cmxlbihzKTsgaSA+ IDA7IGktLSkgewotICAgICAgICAgICAgICAgIGlmIChJU0RJUlNFUChzW2ktMV0pKSB7Ci0gICAg ICAgICAgICAgICAgICAgIHNbaS0xXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpID09 IDApCi0gICAgICAgICAgICAgIHNbMF0gPSAnXDAnOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK LSAgICAgICAgc1tpKytdID0gJy4nOyAgICAgICAgICAgICAgICAgICAvKiBBcHBlbmQgIi4iIHRv IHBhdGguICovCi0gICAgICAgIHNbaV0gPSAnXDAnOwotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5U ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgaWYgKCFzWzBdKQotICAgICAgY2tzdHJu Y3B5KHMsIi4iLHgrMyk7Ci0KLSAgZG9hY2Nlc3M6Ci0KLSNpZmRlZiBTV19BQ0NfSUQKLSAgICBk ZWJ1ZyhGMTAwLCJ6Y2hrbyBzd2FwcGluZyBpZHMgZm9yIGFjY2VzcygpIiwiIiwwKTsKLSAgICBw cml2X29uKCk7Ci0jZW5kaWYgLyogU1dfQUNDX0lEICovCi0KLSAgICB4ID0gYWNjZXNzKHMsV19P Syk7ICAgICAgICAgICAgICAgICAvKiBDaGVjayBhY2Nlc3Mgb2YgcGF0aC4gKi8KLQotI2lmZGVm IFNXX0FDQ19JRAotICAgIHByaXZfb2ZmKCk7Ci0gICAgZGVidWcoRjEwMCwiemNoa28gc3dhcHBl ZCBpZHMgcmVzdG9yZWQiLCIiLDApOwotI2VuZGlmIC8qIFNXX0FDQ19JRCAqLwotCi0gICAgaWYg KHggPCAwKQotICAgICAgZGVidWcoRjExMSwiemNoa28gYWNjZXNzIGZhaWxlZDoiLHMsZXJybm8p OwotICAgIGVsc2UKLSAgICAgIGRlYnVnKEYxMTEsInpjaGtvIGFjY2VzcyBvazoiLHMseCk7Ci0g ICAgaWYgKHMpIGZyZWUocyk7CQkJLyogRnJlZSB0ZW1wb3Jhcnkgc3RvcmFnZSAqLwotCi0gICAg cmV0dXJuKCh4IDwgMCkgPyAtMSA6IDApOyAgICAgICAgICAgLyogYW5kIHJldHVybi4gKi8KLX0K LQotLyogIFogRCBFIEwgRSBUICAtLSAgRGVsZXRlIHRoZSBuYW1lZCBmaWxlLiAgKi8KLQotLyog UmV0dXJuczogLTEgb24gZXJyb3IsIDAgb24gc3VjY2VzcyAqLwotCi1pbnQKLXpkZWxldChuYW1l KSBjaGFyICpuYW1lOyB7Ci0gICAgaW50IHg7Ci0jaWZkZWYgQ0tfTE9HSU4KLSAgICBpZiAoaXNn dWVzdCkKLSAgICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotI2lmZGVm IENLUk9PVAotICAgIGRlYnVnKEYxMTEsInpkZWxldCBzZXRyb290Iixja3Jvb3QsY2tyb290c2V0 KTsKLSAgICBpZiAoY2tyb290c2V0KSBpZiAoIXppbnJvb3QobmFtZSkpIHsKLQlkZWJ1ZyhGMTEw LCJ6ZGVsZXQgc2V0cm9vdCB2aW9sYXRpb24iLG5hbWUsMCk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9 Ci0jZW5kaWYgLyogQ0tST09UICovCi0KLSAgICB4ID0gdW5saW5rKG5hbWUpOwotICAgIGRlYnVn KEYxMTEsInpkZWxldCIsbmFtZSx4KTsKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNs b2cgPj0gU1lTTEdfRkMgJiYgY2t4bG9nZ2luZykgewotICAgICAgICBmdWxsbmFtZVswXSA9ICdc MCc7Ci0gICAgICAgIHpmbnFmcChuYW1lLENLTUFYUEFUSCxmdWxsbmFtZSk7Ci0gICAgICAgIGRl YnVnKEYxMTAsInpkZWxldCBmdWxsbmFtZSIsZnVsbG5hbWUsMCk7Ci0gICAgICAgIGlmICh4IDwg MCkKLSAgICAgICAgICBzeXNsb2coTE9HX0lORk8sICJmaWxlW10gJXM6IGRlbGV0ZSBmYWlsZWQg KCVtKSIsIGZ1bGxuYW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHN5c2xvZyhMT0dfSU5G TywgImZpbGVbXSAlczogZGVsZXRlIG9rIiwgZnVsbG5hbWUpOwotICAgIH0KLSNlbmRpZiAvKiBD S1NZU0xPRyAqLwotICAgIHJldHVybih4KTsKLX0KLQotLyogIFogUiBUIE8gTCAgLS0gIENvbnZl cnQgcmVtb3RlIGZpbGVuYW1lIGludG8gbG9jYWwgZm9ybSAgKi8KLQotVk9JRAotenJ0b2wobmFt ZSxuYW1lMikgY2hhciAqbmFtZSwgKm5hbWUyOyB7Ci0gICAgbnpydG9sKG5hbWUsbmFtZTIsMSww LENLTUFYUEFUSCk7Ci19Ci0KLVZPSUQKLW56cnRvbChuYW1lLG5hbWUyLGZuY252LGZucnBhdGgs bWF4KQotICAgIGNoYXIgKm5hbWUsICpuYW1lMjsgaW50IGZuY252LCBmbnJwYXRoLCBtYXg7Ci17 IC8qIG56cnRvbCAqLwotICAgIGNoYXIgKnMsICpwOwotICAgIGludCBmbGFnID0gMCwgbiA9IDA7 Ci0gICAgY2hhciBmdWxsbmFtZVtDS01BWFBBVEgrMV07Ci0gICAgaW50IGRldm51bGwgPSAwOwot ICAgIGludCBhY2FzZSA9IDA7Ci0gICAgaWYgKCFuYW1lMikgcmV0dXJuOwotICAgIGlmICghbmFt ZSkgbmFtZSA9ICIiOwotCi0gICAgZGVidWcoRjExMSwibnpydG9sIG5hbWUiLG5hbWUsZm5jbnYp OwotCi0jaWZkZWYgRFRJTERFCi0gICAgcyA9IG5hbWU7Ci0gICAgaWYgKCpzID09ICd+Jykgewot ICAgICAgICBzID0gdGlsZGVfZXhwYW5kKHMpOwotICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAg ICAgICAgaWYgKCpzKSBuYW1lID0gczsKLSAgICB9Ci0jZW5kaWYgLyogRFRJTERFICovCi0KLSAg ICAvKiBIYW5kbGUgdGhlIHBhdGggLS0gd2UgZG9uJ3QgaGF2ZSB0byBjb252ZXJ0IGl0cyBmb3Jt YXQsIHNpbmNlICovCi0gICAgLyogdGhlIHN0YW5kYXJkIHBhdGggZm9ybWF0IGFuZCBvdXIgKFVO SVgpIGZvcm1hdCBhcmUgdGhlIHNhbWUuICovCi0KLSAgICBmdWxsbmFtZVswXSA9IE5VTDsKLSAg ICBkZXZudWxsID0gIXN0cmNtcChuYW1lLCIvZGV2L251bGwiKTsKLQotICAgIGlmICghZGV2bnVs bCAmJiBmbnJwYXRoID09IFBBVEhfT0ZGKSB7IC8qIFJFQ0VJVkUgUEFUSE5BTUVTIE9GRiAqLwot ICAgICAgICB6c3RyaXAobmFtZSwmcCk7Ci0gICAgICAgIHN0cm5jcHkoZnVsbG5hbWUscCxDS01B WFBBVEgpOwotICAgIH0gZWxzZSBpZiAoIWRldm51bGwgJiYgZm5ycGF0aCA9PSBQQVRIX0FCUykg eyAvKiBSRUMgUEFUSE5BTUVTIEFCU09MVVRFICovCi0gICAgICAgIHN0cm5jcHkoZnVsbG5hbWUs bmFtZSxDS01BWFBBVEgpOwotICAgIH0gZWxzZSBpZiAoIWRldm51bGwgJiYgaXNhYnNvbHV0ZShu YW1lKSkgeyAvKiBSRUNFSVZFIFBBVEhOQU1FUyBSRUxBVElWRSAqLwotCWNrbWFrbXNnKGZ1bGxu YW1lLENLTUFYUEFUSCwiLiIsbmFtZSxOVUxMLE5VTEwpOwotICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIERpdHRvICovCi0gICAgICAgIGNrc3RybmNweShmdWxsbmFt ZSxuYW1lLENLTUFYUEFUSCk7Ci0gICAgfQotICAgIGZ1bGxuYW1lW0NLTUFYUEFUSF0gPSBOVUw7 Ci0gICAgZGVidWcoRjExMCwibnpydG9sIGZ1bGxuYW1lIixmdWxsbmFtZSwwKTsKLQotI2lmbmRl ZiBOT1RSVU5DQVRFCi0vKgotICBUaGUgbWF4aW11bSBsZW5ndGggZm9yIGFueSBzZWdtZW50IG9m IGEgZmlsZW5hbWUgaXMgTUFYTkFNTEVOLCBkZWZpbmVkCi0gIGFib3ZlLiAgT24gc29tZSBwbGF0 Zm9ybXMgKGF0IGxlYXN0IFFOWCkgaWYgYSBzZWdtZW50IGV4Y2VlZHMgdGhpcyBsaW1pdCwKLSAg dGhlIG9wZW4gZmFpbHMgd2l0aCBFTkFNRVRPT0xPTkcsIHNvIHdlIG11c3QgcHJldmVudCBpdCBi eSB0cnVuY2F0aW5nIGVhY2gKLSAgb3ZlcmxvbmcgbmFtZSBzZWdtZW50IHRvIHRoZSBtYXhpbXVt IHNlZ21lbnQgbGVuZ3RoIGJlZm9yZSBwYXNzaW5nIHRoZQotICBuYW1lIHRvIG9wZW4oKS4gIFRo aXMgbXVzdCBiZSBkb25lIGV2ZW4gd2hlbiBmaWxlIG5hbWVzIGFyZSBsaXRlcmFsLCBzbyBhcwot ICBub3QgdG8gaGFsdCBhIGZpbGUgdHJhbnNmZXIgdW5uZWNlc3NhcmlseS4KLSovCi0gICAgewot ICAgICAgICBjaGFyIGJ1ZltDS01BWFBBVEgrMV07ICAgICAgICAgIC8qIE5ldyB0ZW1wb3Jhcnkg YnVmZmVyIG9uIHN0YWNrICovCi0gICAgICAgIGNoYXIgKnAgPSBmdWxsbmFtZTsgICAgICAgICAg ICAgLyogU291cmNlIGFuZCAgKi8KLSAgICAgICAgY2hhciAqcyA9IGJ1ZjsgICAgICAgICAgICAg ICAgICAvKiBkZXN0aW5hdGlvbiBwb2ludGVycyAqLwotICAgICAgICBpbnQgaSA9IDAsIG4gPSAw OwotICAgICAgICBkZWJ1ZyhGMTAxLCJuenJ0b2wgc2l6aW5nIE1BWE5BTUxFTiIsIiIsTUFYTkFN TEVOKTsKLSAgICAgICAgd2hpbGUgKCpwICYmIG4gPCBDS01BWFBBVEgpIHsgICAvKiBDb3B5IG5h bWUgdG8gbmV3IGJ1ZmZlciAqLwotICAgICAgICAgICAgaWYgKCsraSA+IE1BWE5BTUxFTikgeyAg ICAgIC8qIElmIHRoaXMgc2VnbWVudCB0b28gbG9uZyAqLwotICAgICAgICAgICAgICAgIHdoaWxl ICgqcCAmJiAqcCAhPSAnLycpIC8qIHNraXAgcGFzdCB0aGUgcmVzdC4uLiAqLwotICAgICAgICAg ICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIGkgPSAwOyAgICAgICAgICAgICAgICAgIC8q IGFuZCByZXNldCBjb3VudGVyLiAqLwotICAgICAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnLycp IHsgICAgIC8qIEVuZCBvZiB0aGlzIHNlZ21lbnQuICovCi0gICAgICAgICAgICAgICAgaSA9IDA7 ICAgICAgICAgICAgICAgICAgLyogUmVzZXQgY291bnRlci4gKi8KLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICpzKysgPSAqcCsrOyAgICAgICAgICAgICAgICAvKiBDb3B5IHRoaXMgY2hhcmFj dGVyLiAqLwotICAgICAgICAgICAgbisrOwotICAgICAgICB9Ci0gICAgICAgICpzID0gTlVMOwot ICAgICAgICBja3N0cm5jcHkoZnVsbG5hbWUsYnVmLENLTUFYUEFUSCk7IC8qIENvcHkgYmFjayB0 byBvcmlnaW5hbCBidWZmZXIuICovCi0gICAgICAgIGRlYnVnKEYxMTEsIm56cnRvbCBzaXppbmci LGZ1bGxuYW1lLG4pOwotICAgIH0KLSNlbmRpZiAvKiBOT1RSVU5DQVRFICovCi0KLSAgICBpZiAo IWZuY252IHx8IGRldm51bGwpIHsgICAgICAgICAgICAvKiBOb3QgY29udmVydGluZyAqLwotICAg ICAgICBja3N0cm5jcHkobmFtZTIsZnVsbG5hbWUsbWF4KTsgIC8qIFdlJ3JlIGRvbmUuICovCi0g ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbmFtZSA9IGZ1bGxuYW1lOyAgICAgICAgICAgICAg ICAgICAgLyogQ29udmVydGluZyAqLwotCi0gICAgcCA9IG5hbWUyOwotICAgIGZvciAoOyAqbmFt ZSAhPSAnXDAnICYmIG4gPCBtYXhuYW07IG5hbWUrKykgewotICAgICAgICBpZiAoKm5hbWUgPiBT UCkgZmxhZyA9IDE7ICAgICAgIC8qIFN0cmlwIGxlYWRpbmcgYmxhbmtzIGFuZCBjb250cm9scyAq LwotICAgICAgICBpZiAoZmxhZyA9PSAwICYmICpuYW1lIDwgJyEnKQotICAgICAgICAgIGNvbnRp bnVlOwotCWlmIChmbmNudiA+IDApIHsKLQkgICAgaWYgKCpuYW1lID09IFNQKSB7Ci0JCSpwKysg PSAnXyc7Ci0JCW4rKzsKLQkJY29udGludWU7Ci0JICAgIH0KLQkgICAgaWYgKGlzdXBwZXIoKm5h bWUpKQkJLyogQ2hlY2sgZm9yIG1peGVkIGNhc2UgKi8KLQkgICAgICBhY2FzZSB8PSAxOwotCSAg ICBlbHNlIGlmIChpc2xvd2VyKCpuYW1lKSkKLQkgICAgICBhY2FzZSB8PSAyOwotCX0KLSAgICAg ICAgKnArKyA9ICpuYW1lOwotICAgICAgICBuKys7Ci0gICAgfQotICAgICpwLS0gPSAnXDAnOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSAqLwotICAgIHdoaWxlICgqcCA8ICch JyAmJiBwID4gbmFtZTIpICAgICAgIC8qIFN0cmlwIHRyYWlsaW5nIGJsYW5rcyAmIGNvbnRyb2xz ICovCi0gICAgICAqcC0tID0gJ1wwJzsKLQotICAgIGlmICgqbmFtZTIgPT0gJ1wwJykgeyAgICAg ICAgICAgICAgIC8qIE5vdGhpbmcgbGVmdD8gKi8KLSAgICAgICAgY2tzdHJuY3B5KG5hbWUyLCJO T05BTUUiLG1heCk7CS8qIGRvIHRoaXMuLi4gKi8KLSAgICB9IGVsc2UgaWYgKGFjYXNlID09IDEp IHsgICAgICAgICAgICAvKiBBbGwgdXBwZXJjYXNlPyAqLwotICAgICAgICBwID0gbmFtZTI7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFNvIGNvbnZlcnQgYWxsIGxldHRlcnMgdG8gbG93ZXIgKi8K LSAgICAgICAgd2hpbGUgKCpwKSB7Ci0gICAgICAgICAgICBpZiAoaXN1cHBlcigqcCkpCi0gICAg ICAgICAgICAgICpwID0gdG9sb3dlcigqcCk7Ci0gICAgICAgICAgICBwKys7Ci0gICAgICAgIH0K LSAgICB9Ci0gICAgZGVidWcoRjExMCwibnpydG9sIG5ldyBuYW1lIixuYW1lMiwwKTsKLX0KLQot Ci0vKiAgWiBTIFQgUiBJIFAgIC0tICBTdHJpcCBkZXZpY2UgJiBkaXJlY3RvcnkgbmFtZSBmcm9t IGZpbGUgc3BlY2lmaWNhdGlvbiAqLwotCi0vKiAgU3RyaXAgcGF0aG5hbWUgZnJvbSBmaWxlbmFt ZSAibmFtZSIsIHJldHVybiBwb2ludGVyIHRvIHJlc3VsdCBpbiBuYW1lMiAqLwotCi1zdGF0aWMg Y2hhciB3b3JrW0NLTUFYUEFUSCsxXTsKLQotVk9JRAotenN0cmlwKG5hbWUsbmFtZTIpIGNoYXIg Km5hbWUsICoqbmFtZTI7IHsKLSAgICBjaGFyICpjcCwgKnBwOwotICAgIGludCBuID0gMDsKLQot ICAgIGRlYnVnKEYxMTAsInpzdHJpcCBiZWZvcmUiLG5hbWUsMCk7Ci0gICAgaWYgKCFuYW1lKSB7 ICpuYW1lMiA9ICIiOyByZXR1cm47IH0KLSAgICBwcCA9IHdvcms7Ci0jaWZkZWYgRFRJTERFCi0g ICAgLyogU3RyaXAgbGVhZGluZyB0aWxkZSAqLwotICAgIGlmICgqbmFtZSA9PSAnficpIG5hbWUr KzsKLSAgICBkZWJ1ZyhGMTEwLCJ6c3RyaXAgYWZ0ZXIgdGlsZGUtc3RyaXBwaW5nIixuYW1lLDAp OwotI2VuZGlmIC8qIERUSUxERSAqLwotICAgIGZvciAoY3AgPSBuYW1lOyAqY3A7IGNwKyspIHsK LSAgICAgICAgaWYgKElTRElSU0VQKCpjcCkpIHsKLSAgICAgICAgICAgIHBwID0gd29yazsKLSAg ICAgICAgICAgIG4gPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKnBwKysgPSAq Y3A7Ci0gICAgICAgICAgICBpZiAobisrID49IENLTUFYUEFUSCkKLSAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgKnBwID0gJ1wwJzsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVGVybWluYXRlIHRoZSBzdHJpbmcgKi8KLSAgICAqbmFtZTIgPSB3b3JrOwotICAg IGRlYnVnKEYxMTAsInpzdHJpcCBhZnRlciIsKm5hbWUyLDApOwotfQotCi0vKiAgWiBMIFQgTyBS ICAtLSAgTG9jYWwgVE8gUmVtb3RlICovCi0KLVZPSUQKLXpsdG9yKG5hbWUsbmFtZTIpIGNoYXIg Km5hbWUsICpuYW1lMjsgewotICAgIG56bHRvcihuYW1lLG5hbWUyLDEsMCxDS01BWFBBVEgpOwot fQotCi0vKiAgTiBaIEwgVCBPIFIgIC0tICBOZXcgTG9jYWwgVE8gUmVtb3RlICovCi0KLS8qCi0g IGZuY252ID0gMCBmb3Igbm8gY29udmVyc2lvbiwgPiAwIGZvciByZWd1bGFyIGNvbnZlcnNpb24s IDwgMCBmb3IgbWluaW1hbC4KLSovCi1WT0lECi1uemx0b3IobmFtZSxuYW1lMixmbmNudixmbnNw YXRoLG1heCkKLSAgICBjaGFyICpuYW1lLCAqbmFtZTI7IGludCBmbmNudiwgZm5zcGF0aCwgbWF4 OwoteyAvKiBuemx0b3IgKi8KLSAgICBjaGFyICpjcCwgKnBwOwotI2lmZGVmIENPTU1FTlQKLSAg ICBpbnQgZGMgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBpbnQgbiA9IDA7Ci0gICAg Y2hhciAqZG90cCA9IE5VTEw7Ci0gICAgY2hhciAqZGlycCA9IE5VTEw7Ci0gICAgY2hhciBmdWxs bmFtZVtDS01BWFBBVEgrMV07Ci0gICAgY2hhciAqcDsKLSAgICBDSEFSIGM7Ci0KLSNpZm5kZWYg Tk9DU0VUUwotICAgIGV4dGVybiBpbnQgZmNoYXJzZXQsIC8qIHRjaGFyc2V0LCAqLyBsYW5ndWFn ZTsKLSAgICBpbnQgbGFuZ3N2OwotICAgIF9QUk9UT1RZUCAoIENIQVIgKCpzeG8pLCAoQ0hBUikg KSA9IE5VTEw7IC8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9ucyAqLwotI2lmZGVmIENLX0FOU0lDCi0g ICAgZXh0ZXJuIENIQVIgKCp4bHNbTUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSkoQ0hBUik7Ci0j ZWxzZQotICAgIGV4dGVybiBDSEFSICgqeGxzW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKCk7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSAgICBsYW5nc3YgPSBsYW5ndWFnZTsKLSAgICBsYW5n dWFnZSA9IExfVVNBU0NJSTsKLSNpZmRlZiBDT01NRU5UCi0gICAgLyogUHJvcGVyIHRyYW5zbGF0 aW9uIG9mIGZpbGVuYW1lcyBtdXN0IGJlIGRvbmUgZWxzZXdoZXJlICovCi0gICAgbiA9IHRjaGFy c2V0ID8gdGNoYXJzZXQgOiBUQ19VU0FTQ0lJOwotICAgIHN4byA9IHhsc1tuXVtmY2hhcnNldF07 Ci0jZWxzZQotICAgIHN4byA9IHhsc1tUQ19VU0FTQ0lJXVtmY2hhcnNldF07Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotICAgIGRlYnVnKEYxMTAsIm56bHRv ciBuYW1lIixuYW1lLDApOwotCi0gICAgLyogSGFuZGxlIHBhdGhuYW1lICovCi0KLSAgICBmdWxs bmFtZVswXSA9IE5VTDsKLSAgICBpZiAoZm5zcGF0aCA9PSBQQVRIX09GRikgeyAgICAgICAgICAv KiBQQVRITkFNRVMgT0ZGICovCi0gICAgICAgIHpzdHJpcChuYW1lLCZwKTsKLSAgICAgICAgY2tz dHJuY3B5KGZ1bGxuYW1lLHAsQ0tNQVhQQVRIKTsKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBQQVRITkFNRVMgUkVMQVRJVkUgb3IgQUJTT0xVVEUgKi8KLSAgICAg ICAgY2hhciAqIHAgPSBuYW1lOwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgaWYg KCFzdHJuY21wKHAsIi4uLyIsMykpCi0gICAgICAgICAgICAgIHAgKz0gMzsKLSAgICAgICAgICAg IGVsc2UgaWYgKCFzdHJuY21wKHAsIi4vIiwyKSkKLSAgICAgICAgICAgICAgcCArPSAyOwotICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBp ZiAoZm5zcGF0aCA9PSBQQVRIX0FCUykgeyAgICAgIC8qIEFCU09MVVRFICovCi0gICAgICAgICAg ICB6Zm5xZnAocCxDS01BWFBBVEgsZnVsbG5hbWUpOwotICAgICAgICB9IGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJFTEFUSVZFICovCi0gICAgICAgICAgICBja3N0cm5jcHkoZnVs bG5hbWUscCxDS01BWFBBVEgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsIm56 bHRvciBmdWxsbmFtZSIsZnVsbG5hbWUsMCk7Ci0KLSAgICBpZiAoIWZuY252KSB7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBOb3QgY29udmVydGluZyAqLwotICAgICAgICBja3N0cm5jcHkobmFt ZTIsZnVsbG5hbWUsbWF4KTsgIC8qIFdlJ3JlIGRvbmUuICovCi0jaWZuZGVmIE5PQ1NFVFMKLSAg ICAgICAgbGFuZ3N2ID0gbGFuZ3VhZ2U7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICAgICBy ZXR1cm47Ci0gICAgfQotICAgIG5hbWUgPSBmdWxsbmFtZTsgICAgICAgICAgICAgICAgICAgIC8q IENvbnZlcnRpbmcgKi8KLQotI2lmZGVmIGFlZ2lzCi0gICAgY2hhciAqbmFtZWNoYXJzOwotICAg IGludCB0aWxkZSA9IDAsIGJzbGFzaCA9IDA7Ci0KLSAgICBpZiAoKG5hbWVjaGFycyA9IGdldGVu digiTkFNRUNIQVJTIikpICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKGNrc3RyY2hyKG5hbWVjaGFy cywgJ34nICkgIT0gTlVMTCkgdGlsZGUgID0gJ34nOwotICAgICAgICBpZiAoY2tzdHJjaHIobmFt ZWNoYXJzLCAnXFwnKSAhPSBOVUxMKSBic2xhc2ggPSAnXFwnOwotICAgIH0gZWxzZSB7Ci0gICAg ICAgIHRpbGRlID0gJ34nOwotICAgICAgICBic2xhc2ggPSAnXFwnOwotICAgIH0KLSNlbmRpZiAv KiBhZWdpcyAqLwotCi0gICAgcHAgPSB3b3JrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyog T3V0cHV0IGJ1ZmZlciAqLwotICAgIGZvciAoY3AgPSBuYW1lLCBuID0gMDsgKmNwICYmIG4gPCBt YXg7IGNwKyssbisrKSB7IC8qIENvbnZlcnQgbmFtZSBjaGFycyAqLwotICAgICAgICBjID0gKmNw OwotI2lmbmRlZiBOT0NTRVRTCi0gICAgICAgIGlmIChzeG8pIGMgPSAoKnN4bykoYyk7ICAgICAg ICAgLyogQ29udmVydCB0byBBU0NJSSAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICAgICAg aWYgKGZuY252ID4gMCAmJiBpc2xvd2VyKGMpKQkvKiBVcHBlcmNhc2UgbGV0dGVycyAqLwotICAg ICAgICAgICpwcCsrID0gdG91cHBlcihjKTsgICAgICAgICAgIC8qIENoYW5nZSB0aWxkZSB0byBo eXBoZW4gKi8KLSAgICAgICAgZWxzZSBpZiAoYyA9PSAnficpCi0gICAgICAgICAgKnBwKysgPSAn LSc7Ci0gICAgICAgIGVsc2UgaWYgKGZuY252ID4gMCAmJiBjID09ICcjJykJLyogQ2hhbmdlIG51 bWJlciBzaWduIHRvICdYJyAqLwotICAgICAgICAgICpwcCsrID0gJ1gnOwotICAgICAgICBlbHNl IGlmIChjID09ICcqJyB8fCBjID09ICc/JykgIC8qIENoYW5nZSB3aWxkY2FyZCBjaGFycyB0byAn WCcgKi8KLSAgICAgICAgICAqcHArKyA9ICdYJzsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAnICcp ICAgICAgICAgICAgICAvKiBDaGFuZ2Ugc3BhY2UgdG8gdW5kZXJzY29yZSAqLwotICAgICAgICAg ICpwcCsrID0gJ18nOwotICAgICAgICBlbHNlIGlmIChjIDwgJyAnKSAgICAgICAgICAgICAgIC8q IENoYW5nZSBjb250cm9scyB0byAnWCcgKi8KLSAgICAgICAgICAqcHArKyA9ICdYJzsKLSAgICAg ICAgZWxzZSBpZiAoZm5jbnYgPiAwICYmIGMgPT0gJy4nKSB7IC8qIENoYW5nZSBkb3QgdG8gdW5k ZXJzY29yZSAqLwotICAgICAgICAgICAgZG90cCA9IHBwOyAgICAgICAgICAgICAgICAgIC8qIFJl bWVtYmVyIHdoZXJlIHdlIGxhc3QgZGlkIHRoaXMgKi8KLSAgICAgICAgICAgICpwcCsrID0gJ18n OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGMgPT0gJy8nKQotICAgICAgICAg ICAgICBkaXJwID0gcHA7Ci0gICAgICAgICAgICAqcHArKyA9IGM7Ci0gICAgICAgIH0KLSAgICB9 Ci0gICAgKnBwID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGllIGl0IG9mZi4g Ki8KLSNpZmRlZiBDT01NRU5UCi0gICAgaWYgKGRvdHApICpkb3RwID0gJy4nOyAgICAgICAgICAg ICAgLyogUmVzdG9yZSBsYXN0IGRvdCAoaWYgYW55KSAqLwotI2Vsc2UKLSAgICBpZiAoZG90cCA+ IGRpcnApICpkb3RwID0gJy4nOyAgICAgICAvKiBSZXN0b3JlIGxhc3QgZG90IGluIGZpbGUgbmFt ZSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBjcCA9IG5hbWUyOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBJZiBub3RoaW5nIGJlZm9yZSBkb3QsICovCi0gICAgaWYgKCp3b3JrID09 ICcuJykgKmNwKysgPSAnWCc7ICAgICAgLyogaW5zZXJ0ICdYJyAqLwotICAgIGNrc3RybmNweShj cCx3b3JrLG1heCk7Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICBsYW5ndWFnZSA9IGxhbmdzdjsKLSNl bmRpZiAvKiBOT0NTRVRTICovCi0gICAgZGVidWcoRjExMCwibnpsdG9yIG5hbWUyIixuYW1lMiww KTsKLX0KLQotCi0vKiAgWiBDIEggRCBJIFIgIC0tICBDaGFuZ2UgZGlyZWN0b3J5ICAqLwotLyoK LSAgQ2FsbCB3aXRoOgotICAgIGRpcm5hbSA9IHBvaW50ZXIgdG8gbmFtZSBvZiBkaXJlY3Rvcnkg dG8gY2hhbmdlIHRvLAotICAgICAgd2hpY2ggbWF5IGJlICIiIG9yIE5VTEwgdG8gaW5kaWNhdGUg dXNlcidzIGhvbWUgZGlyZWN0b3J5LgotICBSZXR1cm5zOgotICAgIDAgb24gZmFpbHVyZQotICAg IDEgb24gc3VjY2VzcwotKi8KLWludAotemNoZGlyKGRpcm5hbSkgY2hhciAqZGlybmFtOyB7Ci0g ICAgY2hhciAqaGQsICpzcDsKLSNpZmRlZiBJS1NEQgotICAgIF9QUk9UT1RZUCAoaW50IHNsb3Rk aXIsKGNoYXIgKixjaGFyICopKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotI2lmbmRlZiBOT1NQTAot ICAgIGV4dGVybiBzdHJ1Y3QgbXRhYiAqbWFjdGFiOyAgICAgICAgICAgICAvKiBNYWluIG1hY3Jv IHRhYmxlICovCi0gICAgZXh0ZXJuIGludCBubWFjOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IE51bWJlciBvZiBtYWNyb3MgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgZGVidWcoRjEx MCwiemNoZGlyIixkaXJuYW0sMCk7Ci0gICAgaWYgKCFkaXJuYW0pIGRpcm5hbSA9ICIiOwotICAg IGlmICghKmRpcm5hbSkgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGFyZ3VtZW50IGlzIG51 bGwgb3IgZW1wdHksICovCi0gICAgICBkaXJuYW0gPSB6aG9tZSgpOyAgICAgICAgICAgICAgICAg LyogdXNlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gKi8KLSAgICBzcCA9IGRpcm5hbTsKLSAgICBk ZWJ1ZyhGMTEwLCJ6Y2hkaXIgMiIsZGlybmFtLDApOwotCi0jaWZkZWYgRFRJTERFCi0gICAgaGQg PSB0aWxkZV9leHBhbmQoZGlybmFtKTsgICAgICAgICAgLyogQXR0ZW1wdCB0byBleHBhbmQgdGls ZGUgKi8KLSAgICBpZiAoIWhkKSBoZCA9ICIiOwotICAgIGlmICgqaGQgPT0gJ1wwJykgaGQgPSBk aXJuYW07ICAgICAgIC8qIGluIGRpcmVjdG9yeSBuYW1lLiAqLwotI2Vsc2UKLSAgICBoZCA9IGRp cm5hbTsKLSNlbmRpZiAvKiBEVElMREUgKi8KLSAgICBkZWJ1ZyhGMTEwLCJ6Y2hkaXIgMyIsaGQs MCk7Ci0KLSNpZmRlZiBDS1JPT1QKLSAgICBkZWJ1ZyhGMTExLCJ6Y2hkaXIgc2V0cm9vdCIsY2ty b290LGNrcm9vdHNldCk7Ci0gICAgaWYgKGNrcm9vdHNldCkgaWYgKCF6aW5yb290KGhkKSkgewot CWRlYnVnKEYxMTAsInpjaGRpciBzZXRyb290IHZpb2xhdGlvbiIsaGQsMCk7Ci0JcmV0dXJuKDAp OwotICAgIH0KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotI2lmZGVmIHBkcDExCi0gICAgLyogSnVz dCB0byBzYXZlIHNvbWUgc3BhY2UgKi8KLSAgICByZXR1cm4oKGNoZGlyKGhkKSA9PSAwKSA/IDEg OiAwKTsKLSNlbHNlCi0gICAgaWYgKGNoZGlyKGhkKSA9PSAwKSB7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBUcnkgdG8gY2QgKi8KLSNpZmRlZiBJS1NEQgotI2lmZGVmIENLX0xPR0lOCi0gICAg ICAgIGlmIChpbnNlcnZlciAmJiBpa2Rib3BlbikKLSAgICAgICAgICBzbG90ZGlyKGlzZ3Vlc3Qg PyBhbm9ucm9vdCA6ICIiLCB6Z3RkaXIoKSk7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNlbmRp ZiAvKiBJS1NEQiAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgIGlmIChubWFjKSB7CQkJLyog QW55IG1hY3JvcyBkZWZpbmVkPyAqLwotICAgICAgICAgICAgaW50IGs7CQkJLyogWWVzICovCi0g ICAgICAgICAgICBzdGF0aWMgaW50IG9uX2NkID0gMDsKLSAgICAgICAgICAgIGlmICghb25fY2Qp IHsKLSAgICAgICAgICAgICAgICBvbl9jZCA9IDE7Ci0gICAgICAgICAgICAgICAgayA9IG1sb29r KG1hY3RhYiwib25fY2QiLG5tYWMpOyAgIC8qIExvb2sgdGhpcyB1cCAqLwotICAgICAgICAgICAg ICAgIGlmIChrID49IDApIHsgICAgICAgICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KLSAg ICAgICAgICAgICAgICAgICAgaWYgKGRvZG8oayx6Z3RkaXIoKSwwKSA+IC0xKSAgLyogc2V0IGl0 IHVwLCAqLwotCQkgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgICAgLyogYW5kIGV4ZWN1 dGUgaXQgKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb25fY2QgPSAwOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgcmV0 dXJuKDEpOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogcGRwMTEgKi8KLX0KLQot aW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXpjaGtwaWQodW5zaWduZWQgbG9uZyB4cGlkKQotI2Vsc2UK LXpjaGtwaWQoeHBpZCkgdW5zaWduZWQgbG9uZyB4cGlkOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17Ci0gICAgcmV0dXJuKChraWxsKChQSURfVCl4cGlkLDApIDwgMCkgPyAwIDogMSk7Ci19Ci0K LQotLyogIFogSCBPIE0gRSAgLS0gIFJldHVybiBwb2ludGVyIHRvIHVzZXIncyBob21lIGRpcmVj dG9yeSAgKi8KLQotc3RhdGljIGNoYXIgKiB6aG9tZGlyID0gTlVMTDsKLQotY2hhciAqCi16aG9t ZSgpIHsKLSAgICBjaGFyICogaG9tZTsKLQotI2lmZGVmIENLUk9PVAotICAgIGlmIChja3Jvb3Rz ZXQpCi0gICAgICByZXR1cm4oKGNoYXIgKilja3Jvb3QpOwotI2VuZGlmIC8qIENLUk9PVCAqLwot Ci0jaWZkZWYgUGxhbjkKLSAgICBob21lID0gZ2V0ZW52KCJob21lIik7Ci0jZWxzZQotICAgIGhv bWUgPSBnZXRlbnYoIkhPTUUiKTsKLSNlbmRpZiAvKiBQbGFuOSAqLwotICAgIG1ha2VzdHIoJnpo b21kaXIsaG9tZSk7Ci0gICAgcmV0dXJuKGhvbWUgPyB6aG9tZGlyIDogIi4iKTsKLX0KLQotLyog IFogRyBUIEQgSSBSICAtLSAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGlyZWN0 b3J5ICAqLwotCi0vKgotICBUaGUgInByZWZlcnJlZCIgaW50ZXJmYWNlIGZvciBnZXR0aW5nIHRo ZSBjdXJyZW50IGRpcmVjdG9yeSBpbiBtb2Rlcm4gVU5JWAotICBpcyBnZXRjd2QoKSBbUE9TSVgg MTAwMy4xIDUuMi4yXS4gIEhvd2V2ZXIsIG9uIGNlcnRhaW4gcGxhdGZvcm1zIChzdWNoIGFzCi0g IFN1bk9TKSwgaXQgaXMgaW1wbGVtZW50ZWQgYnkgZm9ya2luZyBhIHNoZWxsLCBmZWVkaW5nIGl0 IHRoZSBwd2QgY29tbWFuZCwKLSAgYW5kIHJldHVybmluZyB0aGUgcmVzdWx0LCB3aGljaCBpcyBu b3Qgb25seSBpbmVmZmljaWVudCBidXQgYWxzbyBjYW4gcmVzdWx0Ci0gIGluIHN0cmF5IG1lc3Nh Z2VzIHRvIHRoZSB0ZXJtaW5hbC4gIEluIHN1Y2ggY2FzZXMgLS0gYXMgd2VsbCBhcyB3aGVuCi0g IGdldGN3ZCgpIGlzIG5vdCBhdmFpbGFibGUgYXQgYWxsIC0tIGdldHdkKCkgY2FuIGJlIHVzZWQg aW5zdGVhZCBieSBkZWZpbmluZwotICBVU0VfR0VUV0QuICBIb3dldmVyLCBub3RlIHRoYXQgZ2V0 d2QoKSBwcm92aWRlcyBubyBidWZmZXItbGVuZ3RoIGFyZ3VtZW50Ci0gIGFuZCB0aGVyZWZvcmUg bm8gc2FmZWd1YXJkIGFnYWluc3QgbWVtb3J5IGxlYWtzLgotKi8KLSNpZm5kZWYgVVNFX0dFVFdE Ci0jaWZkZWYgQlNENDIKLSNkZWZpbmUgVVNFX0dFVFdECi0jZWxzZQotI2lmZGVmIFNVTk9TNAot I2RlZmluZSBVU0VfR0VUV0QKLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNlbmRpZiAvKiBCU0Q0MiAq LwotI2VuZGlmIC8qIFVTRV9HRVRXRCAqLwotCi0jaWZkZWYgcGRwMTEKLSNkZWZpbmUgQ1dEQkwg ODAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIGV2ZXJ5IGJ5dGUgd2UgY2FuLi4uICov Ci0jZWxzZQotI2RlZmluZSBDV0RCTCBDS01BWFBBVEgKLSNlbmRpZiAvKiBwZHAxMSAqLwotc3Rh dGljIGNoYXIgY3dkYnVmW0NXREJMKzJdOwotLyoKLSAgTk9URTogVGhlIGdldGN3ZCgpIHByb3Rv dHlwZXMgYXJlIGNvbW1lbnRlZCBvdXQgb24gcHVycG9zZS4gIElmIHlvdSBnZXQKLSAgY29tcGls ZS10aW1lIHdhcm5pbmdzLCBzZWFyY2ggdGhyb3VnaCB5b3VyIHN5c3RlbSdzIGhlYWRlciBmaWxl cyB0byBzZWUKLSAgd2hpY2ggb25lIGhhcyB0aGUgbmVlZGVkIHByb3RvdHlwZSwgYW5kICNpbmNs dWRlIGl0LiAgVXN1YWxseSBpdCBpcwotICA8dW5pc3RkLmg+LiAgU2VlIHRoZSBzZWN0aW9uIGZv ciBpbmNsdWRpbmcgPHVuaXN0ZC5oPiBpbiBja2NkZWIuaCBhbmQKLSAgbWFrZSBhbnkgbmVlZGVk IGFkanVzdG1lbnRzIHRoZXJlIChhbmQgcmVwb3J0IHRoZW0pLgotKi8KLWNoYXIgKgotemd0ZGly KCkgewotICAgIGNoYXIgKiBidWYgPSBjd2RidWY7Ci0gICAgY2hhciAqIHM7Ci0KLSNpZmRlZiBV U0VfR0VUV0QKLSAgICBleHRlcm4gY2hhciAqZ2V0d2QoKTsKLSAgICBzID0gZ2V0d2QoYnVmKTsK LSAgICBkZWJ1ZyhGMTEwLCJ6Z3RkaXIgQlNENCBnZXR3ZCgpIixzLDApOwotICAgIGlmICghcykg cyA9ICIuLyI7Ci0gICAgcmV0dXJuKHMpOwotI2Vsc2UKLSNpZmRlZiBCU0Q0NAotI2lmZGVmIERD TEdFVENXRAotX1BST1RPVFlQKCBjaGFyICogZ2V0Y3dkLCAoY2hhciAqLCBTSVpFX1QpICk7Ci0j ZW5kaWYgLyogRENMR0VUQ1dEICovCi0gICAgZGVidWcoRjEwMSwiemd0ZGlyIEJTRDQ0IENXREJM IiwiIixDV0RCTCk7Ci0gICAgcyA9IGdldGN3ZChidWYsQ1dEQkwpOwotICAgIGlmICghcykgcyA9 ICIuLyI7Ci0gICAgcmV0dXJuKHMpOwotI2Vsc2UKLSNpZmRlZiBNSU5JWDIKLSNpZmRlZiBEQ0xH RVRDV0QKLSAgICBfUFJPVE9UWVAoIGNoYXIgKiBnZXRjd2QsIChjaGFyICosIFNJWkVfVCkgKTsK LSNlbmRpZiAvKiBEQ0xHRVRDV0QgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ6Z3RkaXIgTUlOSVgyIENX REJMIiwiIixDV0RCTCk7Ci0gICAgcyA9IGdldGN3ZChidWYsQ1dEQkwpOwotICAgIGlmICghcykg cyA9ICIuLyI7Ci0gICAgcmV0dXJuKHMpOwotI2Vsc2UKLSNpZmRlZiBTVk9SUE9TSVgKLSNpZmRl ZiBDT01NRU5UCi0vKiBUaGlzIG5vbi1BTlNJIHByb3RvdHlwZSBjYW4gYmUgZmF0YWwgYXQgcnVu dGltZSEgKGUuZy4gaW4gU0NPMy4ydjUuMC41KS4gKi8KLS8qIEFueXdheSBpdCdzIGFscmVhZHkg cHJvdG90eXBlZCBpbiBzb21lIGhlYWRlciBmaWxlIHRoYXQgd2UgaGF2ZSBpbmNsdWRlZC4gKi8K LSAgICBleHRlcm4gY2hhciAqZ2V0Y3dkKCk7Ci0jZWxzZQotI2lmZGVmIERDTEdFVENXRAotICAg IF9QUk9UT1RZUCggY2hhciAqIGdldGN3ZCwgKGNoYXIgKiwgU0laRV9UKSApOwotI2VuZGlmIC8q IERDTEdFVENXRCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ6Z3Rk aXIgU1ZPUlBPU0lYIENXREJMIiwiIixDV0RCTCk7Ci0gICAgcyA9IGdldGN3ZChidWYsQ1dEQkwp OwotICAgIGlmICghcykgcyA9ICIuLyI7Ci0gICAgcmV0dXJuKHMpOwotI2Vsc2UKLSNpZmRlZiBD T0hFUkVOVAotI2lmZGVmIF9JMzg2Ci0jaWZkZWYgRENMR0VUQ1dECi0gICAgZXh0ZXJuIGNoYXIg KmdldGN3ZCgpOwotI2VuZGlmIC8qIERDTEdFVENXRCAqLwotICAgIGRlYnVnKEYxMDEsInpndGRp ciBDT0hFUkVOVCBfSTM4NiBDV0RCTCIsIiIsQ1dEQkwpOwotICAgIHMgPSBnZXRjd2QoYnVmLENX REJMKTsKLSAgICBpZiAoIXMpIHMgPSAiLi8iOwotICAgIHJldHVybihzKTsKLSNlbHNlCi0gICAg ZXh0ZXJuIGNoYXIgKmdldHdkKCk7Ci0gICAgZGVidWcoRjEwMSwiemd0ZGlyIENPSEVSRU5UIENX REJMIiwiIixDV0RCTCk7Ci0gICAgcyA9IGdldHdkKGJ1Zik7Ci0gICAgaWYgKCFzKSBzID0gIi4v IjsKLSAgICByZXR1cm4ocyk7Ci0jZW5kaWYgLyogX0kzODYgKi8KLSNlbHNlCi0jaWZkZWYgU1VO T1M0Ci0gICAgZGVidWcoRjEwMSwiemd0ZGlyIFNVTk9TIENXREJMIiwiIixDV0RCTCk7Ci0gICAg cyA9IGdldGN3ZChidWYsQ1dEQkwpOwotICAgIGlmICghcykgcyA9ICIuLyI7Ci0gICAgcmV0dXJu KHMpOwotI2Vsc2UKLSAgICByZXR1cm4oIi4vIik7Ci0jZW5kaWYgLyogU1VOT1M0ICovCi0jZW5k aWYgLyogQ09IRVJFTlQgKi8KLSNlbmRpZiAvKiBTWVNWT1JQT1NJWCAqLwotI2VuZGlmIC8qIE1J TklYMiAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogVVNFX0dFVFdEICovCi19Ci0K LS8qICBaIFggQyBNIEQgLS0gUnVuIGEgc3lzdGVtIGNvbW1hbmQgc28gaXRzIG91dHB1dCBjYW4g YmUgcmVhZCBsaWtlIGEgZmlsZSAqLwotCi0jaWZuZGVmIE5PUFVTSAotaW50Ci16eGNtZChmaWxu dW0sY29tYW5kKSBpbnQgZmlsbnVtOyBjaGFyICpjb21hbmQ7IHsKLSAgICBpbnQgb3V0OwotICAg IGludCBwaXBlc1syXTsKLSAgICBleHRlcm4gaW50IGthY3RpdmU7ICAgICAgICAgICAgICAgICAv KiBGcm9tIGNrY3Byby53IGFuZCBja2NtYWkuYyAqLwotCi0gICAgaWYgKG5vcHVzaCkgewotICAg ICAgICBkZWJ1ZyhGMTAwLCJ6eGNtZCBmYWlsczogbm9wdXNoIiwiIiwwKTsKLSAgICAgICAgcmV0 dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwienhjbWQiLGNvbWFuZCxmaWxudW0pOwot ICAgIGlmIChjaGtmbihmaWxudW0pIDwgMCkgcmV0dXJuKC0xKTsgIC8qIE5lZWQgYSB2YWxpZCBL ZXJtaXQgZmlsZSBudW1iZXIuICovCi0gICAgaWYgKGZpbG51bSA9PSBaU1RESU8gfHwgZmlsbnVt ID09IFpDVEVSTSkgLyogQnV0IG5vdCBvbmUgb2YgdGhlc2UuICovCi0gICAgICByZXR1cm4oMCk7 Ci0KLSAgICBvdXQgPSAoZmlsbnVtID09IFpJRklMRSB8fCBmaWxudW0gPT0gWlJGSUxFKSA/IDAg OiAxIDsKLSAgICBkZWJ1ZyhGMTAxLCJ6eGNtZCBvdXQiLGNvbWFuZCxvdXQpOwotCi0vKiBPdXRw dXQgdG8gYSBjb21tYW5kICovCi0KLSAgICBpZiAob3V0KSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBOZWVkIHBvcGVuKCkgdG8gZG8gdGhpcy4gKi8KLQlja3N0cm5jcHkoZnVsbG5hbWUs IihwaXBlKSIsQ0tNQVhQQVRIKTsKLSNpZmRlZiBOT1BPUEVOCi0gICAgICAgIHJldHVybigwKTsg ICAgICAgICAgICAgICAgICAgICAgLyogbm8gcG9wZW4oKSwgZmFpbC4gKi8KLSNlbHNlCi0vKiBV c2UgcG9wZW4oKSB0byBydW4gdGhlIGNvbW1hbmQuICovCi0KLSNpZmRlZiBfUE9TSVhfU09VUkNF Ci0vKiBTdHJpY3RseSBzcGVha2luZywgcG9wZW4oKSBpcyBub3QgYXZhaWxhYmxlIGluIFBPU0lY LjEgKi8KLSNkZWZpbmUgRENMUE9QRU4KLSNlbmRpZiAvKiBfUE9TSVhfU09VUkNFICovCi0KLQlk ZWJ1ZyhGMTEwLCJ6eGNtZCBvdXQiLGNvbWFuZCwwKTsKLQotICAgICAgICBpZiAocHJpdl9jaGso KSkgewotCSAgICBkZWJ1ZyhGMTAwLCJ6eGNtZCBwcml2X2NoayBmYWlsZWQiLCIiLDApOwotICAg ICAgICAgICAgcmV0dXJuKDApOwotCX0JCi0JZXJybm8gPSAwOwotICAgICAgICBmcFtmaWxudW1d ID0gcG9wZW4oY29tYW5kLCJ3Iik7Ci0JZGVidWcoRjExMSwienhjbWQgcG9wZW4iLGZwW2ZpbG51 bV0gPyAiT0siIDogIkZhaWxlZCIsIGVycm5vKTsKLQlpZiAoZnBbZmlsbnVtXSA9PSBOVUxMKQot CSAgcmV0dXJuKDApOwotI2lmZGVmIENPTU1FTlQKLS8qIEkgd29uZGVyIHdoYXQgdGhpcyBpcyBh bGwgYWJvdXQuLi4gKi8KLQljbG9zZShwaXBlc1swXSk7CQkvKiBEb24ndCBuZWVkIHRoZSBpbnB1 dCBzaWRlICovCi0JZnBbZmlsbnVtXSA9IGZkb3BlbihwaXBlc1sxXSwidyIpOyAvKiBPcGVuIG91 dHB1dCBzdHJlYW0uICovCi0JZnBbWlNZU0ZOXSA9IGZwW2ZpbG51bV07ICAgICAgICAgICAvKiBS ZW1lbWJlci4gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JaXNwaXBlW2ZpbG51bV0gPSAxOwot CXpvdXRjbnQgPSAwOwkJCS8qIChQV1ApIHJlc2V0IGlucHV0IGJ1ZmZlciAqLwotCXpvdXRwdHIg PSB6b3V0YnVmZmVyOwotCXJldHVybigxKTsKLSNlbmRpZiAvKiBOT1BPUEVOICovCi0gICAgfQot Ci0vKiBJbnB1dCBmcm9tIGEgY29tbWFuZCAqLwotCi0jaWZkZWYgU05JNTQxCi0gICAgLyogU0lO SVgtTCA1LjQxIGRvZXMgbm90IGxpa2UgZmRvcGVuKCkgKi8KLSAgICByZXR1cm4oMCk7Ci0jZWxz ZQotICAgIGlmIChwaXBlKHBpcGVzKSAhPSAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsInp4Y21k IHBpcGUgZmFpbHVyZSIsIiIsMCk7Ci0gICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAg ICAgICAgLyogY2FuJ3QgbWFrZSBwaXBlLCBmYWlsICovCi0gICAgfQotCi0vKiBDcmVhdGUgYSBm b3JrIGluIHdoaWNoIHRvIHJ1biB0aGUgbmFtZWQgcHJvY2VzcyAqLwotCi0gICAgaWYgKCgKLSNp ZmRlZiBhZWdpcwotICAgICAgICAgcGlkID0gdmZvcmsoKSAgICAgICAgICAgICAgICAgIC8qIGNo aWxkICovCi0jZWxzZQotICAgICAgICAgcGlkID0gZm9yaygpICAgICAgICAgICAgICAgICAgIC8q IGNoaWxkICovCi0jZW5kaWYgLyogYWVnaXMgKi8KLSAgICAgICAgICkgPT0gMCkgewotCi0vKiBX ZSdyZSBpbiB0aGUgZm9yay4gKi8KLQotICAgICAgICBjaGFyICpzaHBhdGgsICpzaG5hbWUsICpz aHB0cjsgIC8qIEZpbmQgdXNlcidzIHByZWZlcnJlZCBzaGVsbCAqLwotI2lmbmRlZiBhZWdpcwot ICAgICAgICBzdHJ1Y3QgcGFzc3dkICpwOwotICAgICAgICBjaGFyICpkZWZzaGVsbDsKLSNpZmRl ZiBIUFVYMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHNoZWxsICovCi0g ICAgICAgIGRlZnNoZWxsID0gIi91c3IvYmluL3NoIjsKLSNlbHNlCi0jaWZkZWYgUGxhbjkKLSAg ICAgICAgZGVmc2hlbGwgPSAiL2Jpbi9yYyI7Ci0jZWxzZQotICAgICAgICBkZWZzaGVsbCA9ICIv YmluL3NoIjsKLSNlbmRpZiAvKiBQbGFuOSAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlm IC8qIGFlZ2lzICovCi0gICAgICAgIGlmIChwcml2X2NhbigpKSBleGl0KDEpOyAgICAgICAgLyog VHVybiBvZmYgYW55IHByaXZpbGVnZXMhICovCi0gICAgICAgIGRlYnVnKEYxMDEsInp4Y21kIHBp ZCIsIiIscGlkKTsKLSAgICAgICAgY2xvc2UocGlwZXNbMF0pOyAgICAgICAgICAgICAgICAvKiBj bG9zZSBpbnB1dCBzaWRlIG9mIHBpcGUgKi8KLSAgICAgICAgY2xvc2UoMCk7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBjbG9zZSBzdGRpbiAqLwotICAgICAgICBpZiAob3BlbigiL2Rldi9udWxs IiwwKSA8IDApIHJldHVybigwKTsgLyogcmVwbGFjZSBpbnB1dCBieSBudWxsICovCi0jaWZuZGVm IE9YT1MKLSNpZm5kZWYgU1ZPUlBPU0lYCi0gICAgICAgIGR1cDIocGlwZXNbMV0sMSk7ICAgICAg ICAgICAgICAgLyogQlNEOiByZXBsYWNlIHN0ZG91dCAmIHN0ZGVyciAqLwotICAgICAgICBkdXAy KHBpcGVzWzFdLDIpOyAgICAgICAgICAgICAgIC8qIGJ5IHRoZSBwaXBlICovCi0jZWxzZQotICAg ICAgICBjbG9zZSgxKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEFUJlQ6IGNsb3NlIHN0ZG91 dCAqLwotICAgICAgICBpZiAoZHVwKHBpcGVzWzFdKSAhPSAxKSAgICAgICAgIC8qIFNlbmQgc3Rk b3V0IHRvIHRoZSBwaXBlICovCi0gICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICBjbG9zZSgy KTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgc3RkZXJyIHRvIHRoZSBwaXBlICovCi0g ICAgICAgIGlmIChkdXAocGlwZXNbMV0pICE9IDIpCi0gICAgICAgICAgcmV0dXJuKDApOwotI2Vu ZGlmIC8qIFNWT1JQT1NJWCAqLwotI2Vsc2UgLyogT1hPUyAqLwotICAgICAgICBkdXAyKHBpcGVz WzFdLDEpOwotICAgICAgICBkdXAyKHBpcGVzWzFdLDIpOwotI2VuZGlmIC8qIE9YT1MgKi8KLSAg ICAgICAgY2xvc2UocGlwZXNbMV0pOyAgICAgICAgICAgICAgICAvKiBEb24ndCBuZWVkIHRoaXMg YW55IG1vcmUuICovCi0KLSNpZmRlZiBhZWdpcwotICAgICAgICBpZiAoKHNocGF0aCA9IGdldGVu digiU0VSVkVSU0hFTEwiKSkgPT0gTlVMTCkKLSAgICAgICAgICBzaHBhdGggPSAiL2Jpbi9zaCI7 Ci0jZWxzZQotICAgICAgICBzaHBhdGggPSBnZXRlbnYoIlNIRUxMIik7ICAgICAgIC8qIFdoYXQg c2hlbGw/ICovCi0gICAgICAgIGlmIChzaHBhdGggPT0gTlVMTCkgewotICAgICAgICAgICAgcCA9 IGdldHB3dWlkKCByZWFsX3VpZCgpICk7IC8qIEdldCBsb2dpbiBkYXRhICovCi0gICAgICAgICAg ICAvKiBkZWJ1ZyhGMTExLCJ6eGNtZCBzaHBhdGgiLCJnZXRwd3VpZCgpIixwKTsgKi8KLSAgICAg ICAgICAgIGlmIChwID09IChzdHJ1Y3QgcGFzc3dkICopTlVMTCB8fCAhKihwLT5wd19zaGVsbCkp Ci0gICAgICAgICAgICAgIHNocGF0aCA9IGRlZnNoZWxsOwotICAgICAgICAgICAgZWxzZSBzaHBh dGggPSBwLT5wd19zaGVsbDsKLSAgICAgICAgfQotI2VuZGlmIC8qIGFlZ2lzICovCi0gICAgICAg IHNocHRyID0gc2huYW1lID0gc2hwYXRoOwotICAgICAgICB3aGlsZSAoKnNocHRyICE9ICdcMCcp Ci0gICAgICAgICAgaWYgKCpzaHB0cisrID09ICcvJykKLSAgICAgICAgICAgIHNobmFtZSA9IHNo cHRyOwotICAgICAgICBkZWJ1ZyhGMTEwLHNocGF0aCxzaG5hbWUsMCk7Ci0JcmVzdG9yc2lncygp OwkJCS8qIFJlc3RvcmUgaWdub3JlZCBzaWduYWxzICovCi0gICAgICAgIGV4ZWNsKHNocGF0aCxz aG5hbWUsIi1jIixjb21hbmQsKGNoYXIgKilOVUxMKTsgLyogRXhlY3V0ZSB0aGUgY21kICovCi0g ICAgICAgIGV4aXQoMCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyoganVzdCBwdW50IGlmIGl0 IGZhaWxlZC4gKi8KLSAgICB9IGVsc2UgaWYgKHBpZCA9PSAoUElEX1QpIC0xKSB7Ci0gICAgICAg IGRlYnVnKEYxMDAsInp4Y21kIGZvcmsgZmFpbHVyZSIsIiIsMCk7Ci0gICAgICAgIHJldHVybigw KTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwienhjbWQgcGlkIiwiIixwaWQpOwotICAgIGNsb3Nl KHBpcGVzWzFdKTsgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IG5lZWQgdGhlIG91dHB1dCBz aWRlICovCi0gICAgaXNwaXBlW2ZpbG51bV0gPSAxOyAgICAgICAgICAgICAgICAgLyogUmVtZW1i ZXIgaXQncyBhIHBpcGUgKi8KLSAgICBmcFtmaWxudW1dID0gZmRvcGVuKHBpcGVzWzBdLCJyIik7 CS8qIE9wZW4gYSBzdHJlYW0gZm9yIGlucHV0LiAqLwotCi0jaWZkZWYgRE9OREVMQVkKLSNpZmRl ZiBTRUxFQ1QKLSAgICBpZiAoZmlsbnVtID09IFpJRklMRSAmJiBrYWN0aXZlKSB7ICAvKiBNYWtl IHBpcGUgcmVhZHMgbm9uYmxvY2tpbmcgKi8KLSAgICAgICAgaW50IGZsYWdzLCB4OwotICAgICAg ICBpZiAoKGZsYWdzID0gZmNudGwoZmlsZW5vKGZwW2ZpbG51bV0pLEZfR0VURkwsMCkpID4gLTEp IHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInp4Y21kIGZjbnRsIDEgcGlwZSBmbGFncyIsIiIs ZmxhZ3MpOwotICAgICAgICAgICAgeCA9IGZjbnRsKGZpbGVubyhmcFtmaWxudW1dKSxGX1NFVEZM LCBmbGFncyB8Ci0jaWZkZWYgUU5YCi0gICAgICAgICAgICAgICAgICBPX05PTkJMT0NLCi0jZWxz ZQotICAgICAgICAgICAgICAgICAgT19OREVMQVkKLSNlbmRpZiAvKiBRTlggKi8KLSAgICAgICAg ICAgICAgICAgICk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6eGNtZCBmY250bCAyIHJlc3Vs dCIsIiIseCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogU0VMRUNUICovCi0jZW5kaWYg LyogRE9OREVMQVkgKi8KLSNlbmRpZiAvKiBTTkk1NDEgKi8KLSAgICBmcFtaU1lTRk5dID0gZnBb ZmlsbnVtXTsgICAgICAgICAgICAvKiBSZW1lbWJlci4gKi8KLSAgICB6aW5jbnQgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAoUFdQKSByZXNldCBpbnB1dCBidWZmZXIgKi8KLSAgICB6 aW5wdHIgPSB6aW5idWZmZXI7Ci0gICAgZnVsbG5hbWVbMF0gPSAnXDAnOwotICAgIHJldHVybigx KTsKLX0gLyogenhjbWQgKi8KLQotLyogIFogQyBMIE8gUyBGICAtIHdhaXQgZm9yIHRoZSBjaGls ZCBmb3JrIHRvIHRlcm1pbmF0ZSBhbmQgY2xvc2UgdGhlIHBpcGUuICovCi0KLS8qICBVc2VkIGlu dGVybmFsbHkgYnkgemNsb3NlIC0gcmV0dXJucyAtMSBvbiBmYWlsdXJlLCAxIG9uIHN1Y2Nlc3Mu ICovCi0KLWludAotemNsb3NmKGZpbG51bSkgaW50IGZpbG51bTsgewotICAgIGludCB3c3RhdCwg b3V0OwotICAgIGludCBzdGF0dXNwOwotCi0gICAgZGVidWcoRjEwMSwiemNsb3NmIGZpbG51bSIs IiIsZmlsbnVtKTsKLSAgICBvdXQgPSAoZmlsbnVtID09IFpJRklMRSB8fCBmaWxudW0gPT0gWlJG SUxFKSA/IDAgOiAxIDsKLSAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2Ygb3V0IiwiIixvdXQpOwotCi0j aWZuZGVmIE5PUE9QRU4KLSAgICBpZiAoaXNwaXBlW2ZpbG51bV0KLSAgICAgICAgLyogSW4gVU5J WCB3ZSB1c2UgcG9wZW4oKSBvbmx5IGZvciBvdXRwdXQgZmlsZXMgKi8KLSAgICAgICAgJiYgb3V0 Ci0gICAgICAgICkgewotICAgICAgICBpbnQgeDsKLSAgICAgICAgeCA9IHBjbG9zZShmcFtmaWxu dW1dKTsKLSAgICAgICAgcGV4aXRzdGF0ID0geCA+PiA4OwotICAgICAgICBkZWJ1ZyhGMTAxLCJ6 Y2xvc2YgcGNsb3NlIiwiIix4KTsKLSAgICAgICAgZGVidWcoRjEwMSwiemNsb3NmIHBleGl0c3Rh dCIsIiIscGV4aXRzdGF0KTsKLSAgICAgICAgZnBbZmlsbnVtXSA9IGZwW1pTWVNGTl0gPSBOVUxM OwotICAgICAgICBpc3BpcGVbZmlsbnVtXSA9IDA7Ci0gICAgICAgIHJldHVybigoeCAhPSAwKSA/ IC0xIDogMSk7Ci0gICAgfQotI2VuZGlmIC8qIE5PUE9QRU4gKi8KLSAgICAvKiBkZWJ1ZyhGMTAx LCJ6Y2xvc2YgZnBbZmlsbnVtXSIsIiIsIGZwW2ZpbG51bV0pOyAqLwotICAgIC8qIGRlYnVnKEYx MDEsInpjbG9zZiBmcFtaU1lTRk5dIiwiIiwgZnBbWlNZU0ZOXSk7ICovCi0KLSAgICBpZiAocGlk ICE9IChQSURfVCkgMCkgewotICAgICAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2Yga2lsbGluZyBwaWQi LCIiLHBpZCk7Ci0jaWZkZWYgUGxhbjkKLSAgICAgICAga2lsbChwaWQsIFNJR0tJTEwpOwotI2Vs c2UKLSAgICAgICAga2lsbChwaWQsOSk7Ci0jZW5kaWYgLyogUGxhbjkgKi8KLQotI2lmbmRlZiBD S19DSElMRAotLyoKLSAgVGhpcyBpcyB0aGUgb3JpZ2luYWwgY29kZSAoYmVmb3JlIDIwIEFwcmls IDE5OTcpIGFuZCBoYXMgcHJvdmVuIHRvdGFsbHkKLSAgcG9ydGFibGUuICBCdXQgaXQgZG9lcyBu b3QgZ2l2ZSB1cyB0aGUgcHJvY2VzcydzIHJldHVybiBjb2RlLgotKi8KLSAgICAgICAgd2hpbGUg KCh3c3RhdCA9IHdhaXQoKFdBSVRfVCAqKTApKSAhPSBwaWQgJiYgd3N0YXQgIT0gLTEpIDsKLSNl bHNlCi0vKiBIZXJlIHdlIHRyeSB0byBnZXQgdGhlIHJldHVybiBjb2RlLiAgTGV0J3MgaG9wZSB0 aGlzIGlzIHBvcnRhYmxlIHRvby4gKi8KLSAgICAgICAgd2hpbGUgKCh3c3RhdCA9IHdhaXQoJnN0 YXR1c3ApKSAhPSBwaWQgJiYgd3N0YXQgIT0gLTEpIDsKLSAgICAgICAgcGV4aXRzdGF0ID0gKHN0 YXR1c3AgJiAweGZmKSA/IHN0YXR1c3AgOiBzdGF0dXNwID4+IDg7Ci0gICAgICAgIGRlYnVnKEYx MDEsInpjbG9zZiB3YWl0IHN0YXR1c3AiLCIiLHN0YXR1c3ApOwotICAgICAgICBkZWJ1ZyhGMTAx LCJ6Y2xvc2Ygd2FpdCBwZXhpdHN0YXQiLCIiLHBleGl0c3RhdCk7Ci0jZW5kaWYgLyogQ0tfQ0hJ TEQgKi8KLSAgICAgICAgcGlkID0gMDsKLSAgICB9Ci0gICAgZmNsb3NlKGZwW2ZpbG51bV0pOwot ICAgIGZwW2ZpbG51bV0gPSBmcFtaU1lTRk5dID0gTlVMTDsKLQotICAgIGlzcGlwZVtmaWxudW1d ID0gMDsKLSAgICAvKiBkZWJ1ZyhGMTAxLCJ6Y2xvc2YgZnBbZmlsbnVtXSIsIiIsZnBbZmlsbnVt XSk7ICovCi0jaWZkZWYgQ0tfQ0hJTEQKLSAgICByZXR1cm4ocGV4aXRzdGF0ID09IDAgPyAxIDog LTEpOwotI2Vsc2UKLSAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogQ0tfQ0hJTEQgKi8KLX0KLQot I2Vsc2UgIC8qIE5PUFVTSCAqLwotCi1pbnQKLXp4Y21kKGZpbG51bSxjb21hbmQpIGludCBmaWxu dW07IGNoYXIgKmNvbWFuZDsgewotICAgIHJldHVybigwKTsKLX0KLWludAotemNsb3NmKGZpbG51 bSkgaW50IGZpbG51bTsgewotICAgIHJldHVybihFT0YpOwotfQotI2VuZGlmIC8qIE5PUFVTSCAq LwotCi0KLS8qICBaIFggUCBBIE4gRCAgLS0gIEV4cGFuZCBhIHdpbGRjYXJkIHN0cmluZyBpbnRv IGFuIGFycmF5IG9mIHN0cmluZ3MgICovCi0vKgotICBBcyBvZiBDLUtlcm1pdCA3LjAsIHRoaXMg QVBJIGlzIG9ic29sZXRlLCByZXBsYWNlZCBieSBuenhwYW5kKCksIGFuZCB0aGlzCi0gIGZ1bmN0 aW9uIGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5LiAgU2VlIG56eHBhbmQoKSBiZWxvdy4KLQotICBS ZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZXMgdGhhdCBtYXRjaCBmbmFyZywgd2l0aCBkYXRhIHN0 cnVjdHVyZXMgc2V0IHVwCi0gIHNvIHRoYXQgZmlyc3QgZmlsZSAoaWYgYW55KSB3aWxsIGJlIHJl dHVybmVkIGJ5IHRoZSBuZXh0IHpuZXh0KCkgY2FsbC4KLQotICBEZXBlbmRzIG9uIGV4dGVybmFs IHZhcmlhYmxlIHdpbGR4cGFuZDogMCBtZWFucyB3ZSBleHBhbmQgd2lsZGNhcmRzCi0gIGludGVy bmFsbHksIG5vbnplcm8gbWVhbnMgd2UgY2FsbCB0aGUgc2hlbGwgdG8gZG8gaXQuCi0gIAotICBB TkQgaW4gQy1LZXJtaXQgOC4wLjIxMiBhbmQgbGF0ZXIsIG9uIGV4dGVybiB3aWxkZW5hOiAxIG1l YW5zIHdpbGRjYXJkcwotICBhcmUgZW5hYmxlZCwgMCBtZWFucyBkaXNhYmxlZCwgdGhlIGNoYXJh Y3RlcnMgYXJlIHRha2VuIGxpdGVyYWxseS4KLSovCi1zdGF0aWMgaW50IHhkaXJvbmx5ID0gMDsK LXN0YXRpYyBpbnQgeGZpbG9ubHkgPSAwOwotc3RhdGljIGludCB4bWF0Y2hkb3QgPSAwOwotc3Rh dGljIGludCB4cmVjdXJzaXZlID0gMDsKLXN0YXRpYyBpbnQgeG5vYmFja3VwID0gMDsKLXN0YXRp YyBpbnQgeG5vbGlua3MgPSAwOwotCi1zdGF0aWMgY2hhciAqZnJlZXB0ciA9IE5VTEwsICoqcmVz cHRyID0gTlVMTDsgLyogQ29waWVzIG9mIGNhbGxlcidzIGFyZ3MgKi8KLXN0YXRpYyBpbnQgcmVt bGVuOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1haW5pbmcgc3BhY2UgaW4gY2FsbGVyJ3Mg YXJyYXkgKi8KLXN0YXRpYyBpbnQgbnVtZm5kID0gMDsJCQkvKiBOdW1iZXIgb2YgbWF0Y2hlcyBm b3VuZCAqLwotCi0jZGVmaW5lIE1JTlNQQUNFIDEwMjQKLQotc3RhdGljIGludAotaW5pdHNwYWNl KHJlc2FycnksbGVuKSBjaGFyICogcmVzYXJyeVtdOyBpbnQgbGVuOyB7Ci0jaWZkZWYgRFlOQU1J QwotICAgIGlmIChsZW4gPCBNSU5TUEFDRSkgbGVuID0gTUlOU1BBQ0U7Ci0gICAgaWYgKCFzc3Bh Y2UpIHsgICAgICAgICAgICAgICAgICAgICAgLyogTmVlZCB0byBhbGxvY2F0ZSBzdHJpbmcgc3Bh Y2U/ICovCi0gICAgICAgIHdoaWxlIChsZW4gPj0gTUlOU1BBQ0UpIHsKLSAgICAgICAgICAgIGlm ICgoc3NwYWNlID0gbWFsbG9jKGxlbisyKSkpIHsgLyogR290IGl0LiAqLwotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDEsImZnZW4gc3RyaW5nIHNwYWNlIiwiIixsZW4pOwotICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVuID0gKGxlbiAvIDIpICsg KGxlbiAvIDQpOyAvKiBEaWRuJ3QsIHJlZHVjZSBieSAzLzQgKi8KLSAgICAgICAgfQotICAgICAg ICBpZiAobGVuIDw9IE1JTlNQQUNFKSB7CQkvKiBEaWQgd2UgZ2V0IGl0PyAqLwotICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsImZnZW4gY2FuJ3QgbWFsbG9jIHN0cmluZyBzcGFjZVxuIik7Ci0g ICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0Jc3NwbGVuID0gbGVuOwotICAgIH0K LSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSAgICBmcmVlcHRyID0gc3NwYWNlOyAgICAgICAgICAg ICAgICAgICAvKiBUaGlzIGlzIHdoZXJlIG1hdGNoZXMgYXJlIGNvcGllZC4gKi8KLSAgICByZXNw dHIgPSByZXNhcnJ5OwkJCS8qIFN0YXRpYyBjb3BpZXMgb2YgdGhlc2Ugc28gKi8KLSAgICByZW1s ZW4gPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAvKiByZWN1cnNpdmUgY2FsbHMgY2FuIGFs dGVyIHRoZW0uICovCi0gICAgZGVidWcoRjEwMSwiaW5pdHNwYWNlIHNzcGxlbiIsIiIsc3NwbGVu KTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qCi0gIFogUyBFIFQgRiBJIEwgIC0tICBRdWVyeSBv ciBjaGFuZ2UgdGhlIHNpemUgb2YgZmlsZSBsaXN0IGJ1ZmZlcnMuCi0KLSAgZmMgPSAxOiBDaGFu Z2UgY3VycmVudCBzdHJpbmcgc3BhY2UgdG8gbiwgcmV0dXJuIG5ldyBzaXplLgotICBmYyA9IDI6 IFJldHVybiBjdXJyZW50IHN0cmluZyBzcGFjZSBzaXplLgotICBmYyA9IDM6IENoYW5nZSBjdXJy ZW50IG1heG5hbWVzIHRvIG4sIHJldHVybiBuZXcgbWF4bmFtZXMuCi0gIGZjID0gNDogUmV0dXJu IGN1cnJlbnQgbWF4bmFtZXMuCi0gIFJldHVybnMgPCAwIG9uIGVycm9yLgotKi8KLWludAotenNl dGZpbChuLCBmYykgaW50IG4sIGZjOyB7Ci0jaWZkZWYgRFlOQU1JQwotICAgIHN3aXRjaCAoZmMp IHsKLSAgICAgIGNhc2UgMToJCQkJLyogU3RyaW5nc3BhY2UgKi8KLQlpZiAoc3NwYWNlKSB7Ci0J ICAgIGZyZWUoc3NwYWNlKTsKLQkgICAgc3NwYWNlID0gTlVMTDsKLQl9Ci0JaWYgKGluaXRzcGFj ZShtdGNocyxuKSA8IDApCi0JICByZXR1cm4oLTEpOwotICAgICAgY2FzZSAyOgkJCQkvKiBGYWxs IHRocnUgZGVsaWJlcmF0ZWx5ICovCi0JcmV0dXJuKHNzcGxlbik7Ci0gICAgICBjYXNlIDM6CQkJ CS8qIExpc3RzaXplICovCi0JaWYgKG10Y2hzKSB7Ci0JICAgIGZyZWUoKGNoYXIgKiltdGNocyk7 Ci0JICAgIG10Y2hzID0gTlVMTDsKLQl9Ci0JbXRjaHMgPSAoY2hhciAqKiltYWxsb2MobiAqIHNp emVvZihjaGFyICopKTsKLQlpZiAoIW10Y2hzKQotCSAgcmV0dXJuKC0xKTsKLQltYXhuYW1lcyA9 IG47Ci0gICAgICBjYXNlIDQ6CQkJCS8qIEZhbGwgdGhydSBkZWxpYmVyYXRlbHkgKi8KLQlyZXR1 cm4obWF4bmFtZXMpOwotICAgIH0KLSNlbmRpZiAvKiBEWU5BTUlDICovCi0gICAgcmV0dXJuKC0x KTsKLX0KLQotCi0KLSNpZm5kZWYgTk9OWlhQQU5ECi0jaWZuZGVmIHBkcDExCi1zdGF0aWMKLSNl bmRpZiAvKiBwZHAxMSAqLwotI2VuZGlmIC8qIE5PTlpYUEFORCAqLwotaW50Ci16eHBhbmQoZm5h cmcpIGNoYXIgKmZuYXJnOyB7Ci0gICAgZXh0ZXJuIGludCBkaXJhY3RpdmU7Ci0gICAgY2hhciBm bmJ1ZltDS01BWFBBVEgrOF0sICogZm4sICogcDsKLQotI2lmZGVmIERUSUxERSAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEJ1aWx0IHdpdGggdGlsZGUtZXhwYW5zaW9uPyAqLwotICAgIGNo YXIgKnRuYW07Ci0jZW5kaWYgLyogRFRJTERFICovCi0gICAgaW50IHg7Ci0gICAgaW50IGhhdmVv bmVkaXIgPSAwOwotCi0gICAgaWYgKCFmbmFyZykgeyAgICAgICAgICAgICAgICAgICAgICAgLyog SWYgbm8gYXJndW1lbnQgcHJvdmlkZWQgKi8KLQlueHBhbmQgPSBmY291bnQgPSAwOwotCXJldHVy bigwKTsJCQkvKiBSZXR1cm4gemVybyBmaWxlcyBmb3VuZCAqLwotICAgIH0KLSAgICBkZWJ1ZyhG MTEwLCJ6eHBhbmQgZW50cnkiLGZuYXJnLDApOwotICAgIGRlYnVnKEYxMDEsInp4cGFuZCB4ZGly b25seSIsIiIseGRpcm9ubHkpOwotICAgIGRlYnVnKEYxMDEsInp4cGFuZCB4Zmlsb25seSIsIiIs eGZpbG9ubHkpOwotCi0gICAgaWYgKCEqZm5hcmcpIHsJCQkvKiBJZiBubyBhcmd1bWVudCBwcm92 aWRlZCAqLwotCW54cGFuZCA9IGZjb3VudCA9IDA7Ci0JcmV0dXJuKDApOwkJCS8qIFJldHVybiB6 ZXJvIGZpbGVzIGZvdW5kICovCi0gICAgfQotCi0jaWZkZWYgQ0tST09UCi0gICAgZGVidWcoRjEx MSwienhwYW5kIHNldHJvb3QiLGNrcm9vdCxja3Jvb3RzZXQpOwotICAgIGlmIChja3Jvb3RzZXQp IGlmICghemlucm9vdChmbmFyZykpIHsKLQlkZWJ1ZyhGMTEwLCJ6eHBhbmQgc2V0cm9vdCB2aW9s YXRpb24iLGZuYXJnLDApOwotCW54cGFuZCA9IGZjb3VudCA9IDA7Ci0JcmV0dXJuKDApOwotICAg IH0KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFRoaXMgd291 bGQgaGF2ZSBiZWVuIHBlcmZlY3QsIGV4Y2VwdCBpdCBtYWtlcyB1cyByZXR1cm4gZnVsbHkgcXVh bGlmaWVkCi0gIHBhdGhuYW1lcyBmb3IgYWxsIGZpbGVzLgotKi8KLSAgICB6Zm5xZnAoZm5hcmcs Q0tNQVhQQVRILGZuYnVmKTsKLSAgICBkZWJ1ZyhGMTEwLCJ6eHBhbmQgemZucWZwIixmbmJ1Ziww KTsKLSAgICBzID0gemd0ZGlyKCk7Ci0gICAgZGVidWcoRjExMCwienhwYW5kIHpndGRpciIscyww KTsKLSAgICBwID0gZm5idWY7Ci0gICAgd2hpbGUgKCpwICYmICpzKSAgICAgICAgICAgICAgICAg ICAgLyogTWFrZSBpdCByZWxhdGl2ZSAqLwotICAgICAgaWYgKCpzKysgIT0gKnArKykKLSAgICAg ICAgYnJlYWs7Ci0gICAgZm4gPSAoKnMpID8gZm5idWYgOiBwOwotICAgIGRlYnVnKEYxMTAsInp4 cGFuZCBmbiAwIixmbiwwKTsKLSAgICBpZiAoISpmbikgewotICAgICAgICBmbiA9IGZuYnVmOwot ICAgICAgICBmbmJ1ZlswXSA9ICcqJzsKLSAgICAgICAgZm5idWZbMV0gPSAnXDAnOwotICAgIH0K LSAgICBkZWJ1ZyhGMTEwLCJ6eHBhbmQgZm4gMC41IixmbiwwKTsKLSNlbHNlCi0jaWZkZWYgRFRJ TERFICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnVpbHQgd2l0aCB0aWxkZS1leHBhbnNp b24/ICovCi0gICAgaWYgKCpmbmFyZyA9PSAnficpIHsgICAgICAgICAgICAgICAgLyogU3RhcnRz IHdpdGggdGlsZGU/ICovCi0gICAgICAgIHRuYW0gPSB0aWxkZV9leHBhbmQoZm5hcmcpOyAgICAg LyogVHJ5IHRvIGV4cGFuZCBpdC4gKi8KLSAgICAgICAgY2tzdHJuY3B5KGZuYnVmLHRuYW0sQ0tN QVhQQVRIKTsKLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBEVElMREUgKi8KLSAgICAgIGNrc3RybmNw eShmbmJ1ZixmbmFyZyxDS01BWFBBVEgpOwotICAgIGZuID0gZm5idWY7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFBvaW50IHRvIHdoYXQgd2UnbGwgd29yayB3aXRoICovCi0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgIGRlYnVnKEYxMTAsInp4cGFuZCBmbiAxIixmbiwwKTsKLQotICAgIGlm ICghKmZuKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1dCBtYWtlIHN1cmUgc29tZXRo aW5nIGlzIHRoZXJlICovCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBwID0gZm4gKyAoaW50KXN0 cmxlbihmbikgLSAxOwotICAgIGlmICgqcCA9PSAnLycpIHsgICAgICAgICAgICAgICAgICAgIC8q IElmIGxhc3QgY2hhciA9IC8gaXQgbXVzdCBiZSBhIGRpciAqLwotCWlmICgheGZpbG9ubHkgJiYg IWlzd2lsZChwKSkgaGF2ZW9uZWRpcisrOwotICAgICAgICBja3N0cm5jYXQoZm4sICIqIiwgQ0tN QVhQQVRIKzgpOyAvKiBzbyBhcHBlbmQgJyonICovCi0gICAgfSBlbHNlIGlmIChwID4gZm4pIHsg ICAgICAgICAgICAgICAgLyogSWYgZW5kcyBpbiAiLy4iICovCi0gICAgICAgIGlmICgqKHAtMSkg PT0gJy8nICYmICpwID09ICcuJykgLyogY2hhbmdlICcuJyB0byAnKicgKi8KLSAgICAgICAgICAq cCA9ICcqJzsKLSAgICB9IGVsc2UgaWYgKHAgPT0gZm4pIHsgICAgICAgICAgICAgICAvKiBJZiBp dCdzICcuJyBhbG9uZSAqLwotICAgICAgICBpZiAoKnAgPT0gJy4nKSAgICAgICAgICAgICAgICAg IC8qIGNoYW5nZSAnLicgdG8gJyonICovCi0gICAgICAgICAgKnAgPSAnKic7Ci0gICAgfQotICAg IGRlYnVnKEYxMTAsInp4cGFuZCBmbiAyIixmbiwwKTsKLSAgICB4ID0gaXNkaXIoZm4pOyAgICAg ICAgICAgICAgICAgICAgICAvKiBJcyBpdCBhIGRpcmVjdG9yeT8gKi8KLSAgICBkZWJ1ZyhGMTEx LCJ6eHBhbmQgaXNkaXIgMSIsZm4seCk7Ci0gICAgaWYgKHgpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSWYgc28sIG1ha2UgaXQgaW50byBhIHdpbGRjYXJkICovCi0JaWYgKCF4Zmls b25seSAmJiAhaXN3aWxkKHApKQotCSAgaGF2ZW9uZWRpcisrOwotICAgICAgICBpZiAoKHggPSBz dHJsZW4oZm4pKSA+IDApIHsKLSAgICAgICAgICAgIGlmICghSVNESVJTRVAoZm5beC0xXSkpCi0g ICAgICAgICAgICAgIGZuW3grK10gPSBESVJTRVA7Ci0gICAgICAgICAgICBmblt4KytdID0gJyon OwotICAgICAgICAgICAgZm5beF0gPSAnXDAnOwotICAgICAgICB9Ci0gICAgfQotICAgIGRlYnVn KEYxMTEsInp4cGFuZCBmbiAzIGhhdmVvbmVkaXIiLGZuLGhhdmVvbmVkaXIpOwotLyoKLSAgVGhl IGZvbGxvd2luZyBhbGxvd3MgdXMgdG8gcGFyc2UgYSBzaW5nbGUgZGlyZWN0b3J5IG5hbWUgd2l0 aG91dCBvcGVuaW5nCi0gIHRoZSBkaXJlY3RvcnkgYW5kIGxvb2tpbmcgYXQgaXRzIGNvbnRlbnRz LiAgVGhlIGRpcmFjdGl2ZSBmbGFnIGlzIGEgaG9ycmlibGUKLSAgaGFjayAoZXNwZWNpYWxseSBz aW5jZSBESVIgL05PUkVDVVJTSVZFIHR1cm5zIGl0IG9mZiksIGJ1dCBvdGhlcndpc2Ugd2UnZAot ICBoYXZlIHRvIGNoYW5nZSB0aGUgQVBJLgotKi8KLSAgICBkZWJ1ZyhGMTExLCJ6eHBhbmQgZm4g MyBkaXJhY3RpdmUiLGZuLGRpcmFjdGl2ZSk7Ci0gICAgaWYgKCFkaXJhY3RpdmUgJiYgaGF2ZW9u ZWRpcikgewotCWZjb3VudCA9IDA7Ci0JaWYgKCFtdGNocykgewotCSAgICBtdGNocyA9IChjaGFy ICoqKW1hbGxvYyhtYXhuYW1lcyAqIHNpemVvZigqbXRjaHMpKTsKLQkgICAgaWYgKCFtdGNocykK LQkgICAgICByZXR1cm4obnhwYW5kID0gZmNvdW50KTsKLQl9Ci0JZmNvdW50ID0gMTsKLQlkZWJ1 ZyhGMTEwLCJ6eHBhbmQgaGF2ZW9uZWRpciBBMSIsZm5hcmcsMCk7Ci0JaW5pdHNwYWNlKG10Y2hz LHNzcGxlbik7Ci0JYWRkcmVzdWx0KGZuYXJnLDEpOwotCWlmIChudW1mbmQgPCAwKSByZXR1cm4o LTEpOwotCW10Y2hwdHIgPSBtdGNoczsJCS8qIFNhdmUgcG9pbnRlciBmb3IgbmV4dC4gKi8KLQlk ZWJ1ZyhGMTExLCJ6eHBhbmQgaGF2ZW9uZWRpciBBMiIsKm10Y2hwdHIsbnVtZm5kKTsKLQlyZXR1 cm4obnhwYW5kID0gZmNvdW50KTsKLSAgICB9Ci0KLSNpZm5kZWYgTk9QVVNICi0gICAgaWYgKCFu b3B1c2ggJiYgd2lsZHhwYW5kKSAgICAgICAgICAgLyogV2hvIGlzIGV4cGFuZGluZyB3aWxkY2Fy ZHM/ICovCi0gICAgICBmY291bnQgPSAobXRjaHMgPT0gTlVMTCAmJiAgICAgICAgLyogU2hlbGwg Ki8KLSAgICAgICAgICAgICAgICAobXRjaHMgPSAoY2hhciAqKiltYWxsb2MobWF4bmFtZXMgKiBz aXplb2YoKm10Y2hzKSkpID09IE5VTEwpCi0gICAgICAgID8gMAotICAgICAgICAgIDogIHNoeHBh bmQoZm4sbXRjaHMsbWF4bmFtZXMpOwotICAgIGVsc2UKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSAg ICAgIGZjb3VudCA9IChtdGNocyA9PSBOVUxMICYmICAgICAgICAvKiBLZXJtaXQgKi8KLSAgICAg ICAgICAgICAgICAobXRjaHMgPSAoY2hhciAqKiltYWxsb2MobWF4bmFtZXMgKiBzaXplb2YoKm10 Y2hzKSkpID09IE5VTEwpCi0gICAgICAgID8gMAotICAgICAgICAgIDogZmdlbihmbixtdGNocyxt YXhuYW1lcyk7ICAgICAgLyogTG9vayB1cCB0aGUgZmlsZS4gKi8KLQotICAgIGlmIChmY291bnQg PT0gMCAmJiBoYXZlb25lZGlyKSB7Ci0JZmNvdW50ID0gMTsKLQlkZWJ1ZyhGMTEwLCJ6eHBhbmQg aGF2ZW9uZWRpciBCIixmbmFyZywwKTsKLQlhZGRyZXN1bHQoZm5hcmcsMSk7Ci0JaWYgKG51bWZu ZCA8IDApIHJldHVybigtMSk7Ci0gICAgfQotICAgIG10Y2hwdHIgPSBtdGNoczsgICAgICAgICAg ICAgICAgICAgIC8qIFNhdmUgcG9pbnRlciBmb3IgbmV4dC4gKi8KLSAgICBueHBhbmQgPSBmY291 bnQ7Ci0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgaWYgKGZjb3Vu dCA+IDEpCi0gICAgICAgICAgZGVidWcoRjExMSwienhwYW5kIG9rIixtdGNoc1swXSxmY291bnQp OwotICAgICAgICBlbHNlCi0gICAgICAgICAgZGVidWcoRjEwMSwienhwYW5kIGZjb3VudCIsIiIs ZmNvdW50KTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByZXR1cm4oZmNvdW50KTsK LX0KLQotI2lmbmRlZiBOT05aWFBBTkQKLS8qICBOIFogWCBQIEEgTiBEICAtLSAgRXhwYW5kIGEg ZmlsZSBsaXN0LCB3aXRoIG9wdGlvbnMuICAqLwotLyoKLSAgQ2FsbCB3aXRoOgotICAgcyA9IHBv aW50ZXIgdG8gZmlsZW5hbWUgb3IgcGF0dGVybi4KLSAgIGZsYWdzID0gb3B0aW9uIGJpdHM6Ci0K LSAgICAgZmxhZ3MgJiBaWF9GSUxPTkxZICAgTWF0Y2ggcmVndWxhciBmaWxlcwotICAgICBmbGFn cyAmIFpYX0RJUk9OTFkgICBNYXRjaCBkaXJlY3RvcmllcwotICAgICBmbGFncyAmIFpYX1JFQ1VS U0UgICBEZXNjZW5kIHRocm91Z2ggZGlyZWN0b3J5IHRyZWUKLSAgICAgZmxhZ3MgJiBaWF9NQVRD SERPVCAgTWF0Y2ggImRvdCBmaWxlcyIKLSAgICAgZmxhZ3MgJiBaWF9OT0JBQ0tVUCAgRG9uJ3Qg bWF0Y2ggImJhY2t1cCBmaWxlcyIKLSAgICAgZmxhZ3MgJiBaWF9OT0xJTktTICAgRG9uJ3QgZm9s bG93IHN5bWxpbmtzLgotCi0gICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZXMgdGhhdCBtYXRj aCBzLCB3aXRoIGRhdGEgc3RydWN0dXJlcyBzZXQgdXAKLSAgIHNvIHRoYXQgZmlyc3QgZmlsZSAo aWYgYW55KSB3aWxsIGJlIHJldHVybmVkIGJ5IHRoZSBuZXh0IHpuZXh0KCkgY2FsbC4KLSovCi1p bnQKLW56eHBhbmQocyxmbGFncykgY2hhciAqIHM7IGludCBmbGFnczsgewotICAgIGNoYXIgKiBw OwotICAgIGludCB4OwotCi0gICAgZGVidWcoRjExMSwibnp4cGFuZCIscyxmbGFncyk7Ci0gICAg eCA9IGZsYWdzICYgKFpYX0RJUk9OTFl8WlhfRklMT05MWSk7Ci0gICAgeGRpcm9ubHkgPSAoeCA9 PSBaWF9ESVJPTkxZKTsKLSAgICB4Zmlsb25seSA9ICh4ID09IFpYX0ZJTE9OTFkpOwotICAgIGlm ICh4ZGlyb25seSAmJiB4Zmlsb25seSkgewotICAgICAgICB4ZGlyb25seSA9IDA7Ci0gICAgICAg IHhmaWxvbmx5ID0gMDsKLSAgICB9Ci0gICAgeG1hdGNoZG90ICA9IChmbGFncyAmIFpYX01BVENI RE9UKTsKLSAgICBkZWJ1ZyhGMTExLCJuenhwYW5kIHhtYXRjaGRvdCAxIixzLHhtYXRjaGRvdCk7 Ci0gICAgLyogSWYgeG1hdGNoZG90IG5vdCBzZXQgYnkgY2FsbGVyIGJ1dCBwYXR0ZXJuIGltcGxp ZXMgaXQsIHNldCBpdCBhbnl3YXkgKi8KLSAgICBpZiAoIXhtYXRjaGRvdCAmJiAoKHAgPSBja3N0 cmNocihzLCcuJykpKSkgewotCWlmIChwID09IHMgJiYgcFsxXSAhPSAnLycpIHsKLQkgICAgeG1h dGNoZG90ID0gMTsKLQkgICAgZGVidWcoRjExMSwibnp4cGFuZCB4bWF0Y2hkb3QgMiIscyx4bWF0 Y2hkb3QpOwotCX0gZWxzZSBpZiAocCA+IHMpIHsKLQkgICAgeG1hdGNoZG90ID0gKCoocC0xKSA9 PSAnLCcpIHx8ICgqKHAtMSkgPT0gJ3snKSB8fCAoKihwLTEpID09ICcvJyk7Ci0JICAgIGRlYnVn KEYxMTEsIm56eHBhbmQgeG1hdGNoZG90IDMiLHMseG1hdGNoZG90KTsKLQl9Ci0gICAgfQotICAg IHhyZWN1cnNpdmUgPSAoZmxhZ3MgJiBaWF9SRUNVUlNFKTsKLSAgICB4bm9iYWNrdXAgID0gKGZs YWdzICYgWlhfTk9CQUNLVVApOwotICAgIHhub2xpbmtzICAgPSAoZmxhZ3MgJiBaWF9OT0xJTktT KTsKLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDEsIm56eHBh bmQgeGRpcm9ubHkiLCIiLHhkaXJvbmx5KTsKLQlkZWJ1ZyhGMTAxLCJuenhwYW5kIHhmaWxvbmx5 IiwiIix4Zmlsb25seSk7Ci0JZGVidWcoRjEwMSwibnp4cGFuZCB4bWF0Y2hkb3QiLCIiLHhtYXRj aGRvdCk7Ci0JZGVidWcoRjEwMSwibnp4cGFuZCB4cmVjdXJzaXZlIiwiIix4cmVjdXJzaXZlKTsK LQlkZWJ1ZyhGMTAxLCJuenhwYW5kIHhub2JhY2t1cCIsIiIseG5vYmFja3VwKTsKLQlkZWJ1ZyhG MTAxLCJuenhwYW5kIHhub2xpbmtzIiwiIix4bm9saW5rcyk7Ci0gICAgfQotI2VuZGlmIC8qIERF QlVHICovCi0KLSAgICB4ID0genhwYW5kKHMpOwotICAgIGlmICh4ID4gMSkKLSAgICAgIHNoX3Nv cnQobXRjaHMsTlVMTCx4LDAsMCwxKTsJLyogQWxwaGFiZXRpemUgdGhlIGxpc3QgKi8KLSAgICB4 ZGlyb25seSA9IDA7Ci0gICAgeGZpbG9ubHkgPSAwOwotICAgIHhtYXRjaGRvdCA9IDA7Ci0gICAg eHJlY3Vyc2l2ZSA9IDA7Ci0gICAgeG5vYmFja3VwID0gMDsKLSAgICB4bm9saW5rcyA9IDA7Ci0g ICAgcmV0dXJuKHgpOwotfQotI2VuZGlmIC8qIE5PTlpYUEFORCAqLwotCi0jaWZuZGVmIE5PWlhS RVdJTkQKLS8qICBaIFggUiBFIFcgSSBOIEQgIC0tICBSZXdpbmRzIHRoZSB6eHBhbmQoKSBsaXN0 ICovCi0KLWludAotenhyZXdpbmQoKSB7Ci0gICAgLyogaWYgKCFtdGNocykgcmV0dXJuKC0xKTsg Ki8KLSAgICBmY291bnQgPSBueHBhbmQ7Ci0gICAgbXRjaHB0ciA9IG10Y2hzOwotICAgIHJldHVy bihueHBhbmQpOwotfQotI2VuZGlmIC8qIE5PWlhSRVdJTkQgKi8KLQotLyogIFogTiBFIFggVCAg LS0gIEdldCBuYW1lIG9mIG5leHQgZmlsZSBmcm9tIGxpc3QgY3JlYXRlZCBieSB6eHBhbmQoKS4g Ki8KLS8qCi0gIFJldHVybnMgPjAgaWYgdGhlcmUncyBhbm90aGVyIGZpbGUsIHdpdGggaXRzIG5h bWUgY29waWVkIGludG8gdGhlIGFyZyBzdHJpbmcsCi0gIG9yIDAgaWYgbm8gbW9yZSBmaWxlcyBp biBsaXN0LgotKi8KLWludAotem5leHQoZm4pIGNoYXIgKmZuOyB7Ci0gICAgaWYgKGZjb3VudC0t ID4gMCkgewotICAgICAgICBja3N0cm5jcHkoZm4sKm10Y2hwdHIrKyxDS01BWFBBVEgpOwotICAg IH0gZWxzZSB7Ci0gICAgICAgIGZuWzBdID0gJ1wwJzsKLSAgICB9Ci0jaWZuZGVmIENPTU1FTlQK LSAgICBkZWJ1ZyhGMTExLCJ6bmV4dCIsZm4sZmNvdW50KzEpOwotICAgIHJldHVybihmY291bnQr MSk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMTEsInpuZXh0IixmbixmY291bnQpOyAgICAgIC8qIFJl dHVybiAwIGlmIG5vIGZpbGVuYW1lIHRvIHJldHVybiAqLwotICAgIHJldHVybihmY291bnQpOwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLX0KLQotLyogIFogQyBIIEsgUyBQIEEgIC0tICBDaGVjayBp ZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgdG8gc3RvcmUgdGhlIGZpbGUgICovCi0KLS8qCi0gQ2Fs bCB3aXRoIGZpbGUgc3BlY2lmaWNhdGlvbiBmLCBzaXplIG4gaW4gYnl0ZXMuCi0gUmV0dXJucyAt MSBvbiBlcnJvciwgMCBpZiBub3QgZW5vdWdoIHNwYWNlLCAxIGlmIGVub3VnaCBzcGFjZS4KLSov Ci0vKkFSR1NVU0VEKi8KLWludAotI2lmZGVmIENLX0FOU0lDCi16Y2hrc3BhKGNoYXIgKmYsIENL X09GRl9UIG4pCi0jZWxzZQotemNoa3NwYShmLG4pIGNoYXIgKmY7IENLX09GRl9UIG47Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLS8qIHpjaGtzcGEoKSAqLyB7Ci0gICAgLyogSW4gVU5JWCB0aGVy ZSBpcyBubyBnb29kIChhbmQgcG9ydGFibGUpIHdheS4gKi8KLSAgICByZXR1cm4oMSk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBBbHdheXMgc2F5IE9LLiAqLwotfQotCi0jaWZkZWYgQ09N TUVOVAkJCQkvKiAobm90IHVzZWQpICovCi0KLS8qICBJIFMgQiBBIEMgSyBVIFAgIC0tICBUZWxs cyBpZiBnaXZlbiBmaWxlIGhhcyBhIGJhY2t1cCBzdWZmaXggICovCi0vKgotICAgUmV0dXJuczoK LSAgIC0xOiBJbnZhbGlkIGFyZ3VtZW50Ci0gICAgMDogRmlsZSBkb2VzIG5vdCBoYXZlIGEgYmFj a3VwIHN1ZmZpeAotICAgPjA6IEJhY2t1cCBzdWZmaXggbnVtYmVyCi0qLwotaW50Ci1pc2JhY2t1 cChmbikgY2hhciAqIGZuOyB7CQkvKiBHZXQgYmFja3VwIHN1ZmZpeCBudW1iZXIgKi8KLSAgICBp bnQgaSwgaiwgaywgeCwgc3RhdGUsIGZsYWc7Ci0KLSAgICBpZiAoIWZuKQkJCQkvKiBXYXRjaCBv dXQgZm9yIG51bGwgcG9pbnRlcnMuICovCi0gICAgICByZXR1cm4oLTEpOwotICAgIGlmICghKmZu KQkJCQkvKiBBbmQgZW1wdHkgbmFtZXMuICovCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgZmxh ZyA9IHN0YXRlID0gMDsKLSAgICBmb3IgKGkgPSAoaW50KXN0cmxlbihmbikgLSAxOyAoIWZsYWcg JiYgKGkgPiAwKSk7IGktLSkgewotCXN3aXRjaCAoc3RhdGUpIHsKLQkgIGNhc2UgMDoJCQkvKiBT dGF0ZSAwIC0gZmluYWwgY2hhciAqLwotCSAgICBpZiAoZm5baV0gPT0gJ34nKQkJLyogSXMgdGls ZGUgKi8KLQkgICAgICBzdGF0ZSA9IDE7CQkvKiBTd2l0Y2ggdG8gbmV4dCBzdGF0ZSAqLwotCSAg ICBlbHNlCQkJLyogT3RoZXJ3aXNlICovCi0JICAgICAgZmxhZyA9IDE7CQkJLyogUXVpdCAtIG5v IGJhY2t1cCBzdWZmaXguICovCi0JICAgIGJyZWFrOwotCSAgY2FzZSAxOgkJCS8qIFN0YXRlIDEg LSBkaWdpdHMgKi8KLQkgICAgaWYgKGZuW2ldID09ICd+JyAgJiYgZm5baS0xXSA9PSAnLicpIHsg LyogSGF2ZSBzdWZmaXggKi8KLQkJcmV0dXJuKGF0b2koJmZuW2krMV0pKTsKLQkgICAgfSBlbHNl IGlmIChmbltpXSA+PSAnMCcgJiYgZm5baV0gPD0gJzknKSB7IC8qIEluIG51bWJlciBwYXJ0ICov Ci0JCWNvbnRpbnVlOwkJLyogS2VlcCBnb2luZyAqLwotCSAgICB9IGVsc2UgewkJCS8qIFNvbWV0 aGluZyBlbHNlICovCi0JCWZsYWcgPSAxOwkJLyogTm90IGEgYmFja3VwIHN1ZmZpeCAtIHF1aXQu ICovCi0JICAgIH0KLQkgICAgYnJlYWs7Ci0JfQotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCi0KLS8qICBaIE4gRSBXIE4gIC0tICBNYWtlIGEgbmV3IG5h bWUgZm9yIHRoZSBnaXZlbiBmaWxlICAqLwotCi0vKgotICBHaXZlbiB0aGUgbmFtZSwgZm4sIG9m IGEgZmlsZSB0aGF0IGFscmVhZHkgZXhpc3RzLCB0aGlzIGZ1bmN0aW9uIGJ1aWxkcyBhCi0gIG5l dyBuYW1lIG9mIHRoZSBmb3JtICI8b2xkbmFtZT4ufjxuPn4iLCB3aGVyZSA8b2xkbmFtZT4gaXMg YXJndW1lbnQgbmFtZQotICAoZm4pLCBhbmQgPG4+IGlzIGEgdmVyc2lvbiBudW1iZXIsIG9uZSBo aWdoZXIgdGhhbiBhbnkgZXhpc3RpbmcgdmVyc2lvbgotICBudW1iZXIgZm9yIHRoYXQgZmlsZSwg dXAgdG8gOTk5OTkuICBUaGlzIGZvcm1hdCBpcyBjb25zaXN0ZW50IHdpdGggdGhhdCB1c2VkCi0g IGJ5IEdOVSBFTUFDUy4gIElmIHRoZSBjb25zdHJ1Y3RlZCBuYW1lIGlzIHRvbyBsb25nIGZvciB0 aGUgc3lzdGVtJ3MgbWF4aW11bSwKLSAgZW5vdWdoIGNoYXJhY3RlcnMgYXJlIHRydW5jYXRlZCBm cm9tIHRoZSBlbmQgb2YgPGZuPiB0byBhbGxvdyB0aGUgdmVyc2lvbgotICBudW1iZXIgdG8gZml0 LiAgSWYgbm8gZnJlZSB2ZXJzaW9uIG51bWJlcnMgZXhpc3QgYmV0d2VlbiAxIGFuZCA5OTk5OSwg YQotICB2ZXJzaW9uIG51bWJlciBvZiAieHh4eCIgaXMgdXNlZC4gIFJldHVybnMgYSBwb2ludGVy IHRvIHRoZSBuZXcgbmFtZSBpbgotICBhcmd1bWVudCBzLgotKi8KLSNpZmRlZiBwZHAxMQotI2Rl ZmluZSBaTkVXTkJMIDYzICAgICAgICAgICAgICAgICAgICAgIC8qIE5hbWUgYnVmZmVyIGxlbmd0 aCAqLwotI2RlZmluZSBaTkVXTk1EIDMgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heCBkaWdp dHMgZm9yIHZlcnNpb24gbnVtYmVyICovCi0jZWxzZQotI2RlZmluZSBaTkVXTkJMIENLTUFYUEFU SAotI2RlZmluZSBaTkVXTk1EIDQKLSNlbmRpZiAvKiBwZHAxMSAqLwotCi0jZGVmaW5lIE1BWEJV RElHSVRTIDUKLQotc3RhdGljIGNoYXIgem5ld2J1ZltaTkVXTkJMKzEyXTsKLQotVk9JRAotem5l d24oZm4scykgY2hhciAqZm4sICoqczsgewotICAgIGNoYXIgKiBidWY7CQkJCS8qIFBvaW50ZXIg dG8gYnVmZmVyIGZvciBuZXcgbmFtZSAqLwotICAgIGNoYXIgKiB4cCwgKiBuYW1lcGFydCA9IE5V TEw7ICAgICAgIC8qIFBvaW50ZXIgdG8gZmlsZW5hbWUgcGFydCAqLwotICAgIHN0cnVjdCB6Zm5m cCAqIGZuZnA7ICAgICAgICAgICAgICAgIC8qIHpuZnFmcCgpIHJlc3VsdCBzdHJ1Y3QgcG9pbnRl ciAqLwotICAgIGludCBkID0gMCwgdCwgZm5sZW4sIGJ1ZmxlbjsKLSAgICBpbnQgbiwgaSwgaywg ZmxhZywgc3RhdGU7Ci0gICAgaW50IG1heCA9IE1BWE5BTUxFTjsgICAgICAgICAgICAgICAgLyog TWF4aW11bSBuYW1lIGxlbmd0aCAqLwotICAgIGNoYXIgKiBkbmFtZSA9IE5VTEw7Ci0KLSAgICBi dWYgPSB6bmV3YnVmOwotICAgICpzID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEluaXRpYWxpemUgcmV0dXJuIHZhbHVlICovCi0gICAgaWYgKCFmbikgZm4gPSAiIjsgICAgICAg ICAgICAgICAgICAgLyogQ2hlY2sgZmlsZW5hbWUgYXJndW1lbnQgKi8KLSAgICBpID0gc3RybGVu KGZuKTsKLQotLyogSWYgaW5jb21pbmcgZmlsZSBhbHJlYWR5IGhhcyBhIGJhY2t1cCBzdWZmaXgs IHJlbW92ZSBpdC4gKi8KLS8qIFRoZW4gd2UnbGwgdGFjayBhIG5ldyBvbiBsYXRlciwgd2hpY2gg d2lsbCBiZSB0aGUgaGlnaGVzdCBmb3IgdGhpcyBmaWxlLiAqLwotCi0gICAgaWYgKGkgPD0gbWF4 ICYmIGkgPiAwICYmIGZuW2ktMV0gPT0gJ34nKSB7Ci0JY2hhciAqIHA7Ci0JaS0tOwotCWRlYnVn KEYxMTEsInpuZXduIHN1ZmZpeCByZW1vdmFsIixmbixpKTsKLQlpZiAoKGRuYW1lID0gKGNoYXIg KiltYWxsb2MoaSsxKSkpIHsKLQkgICAgY2tzdHJuY3B5KGRuYW1lLGZuLGkrMSk7Ci0JICAgIHAg PSBkbmFtZTsKLQkgICAgZm9yIChmbGFnID0gc3RhdGUgPSAwOyAoIWZsYWcgJiYgKGkgPiAwKSk7 IGktLSkgewotCQlzd2l0Y2ggKHN0YXRlKSB7Ci0JCSAgY2FzZSAwOgkJLyogU3RhdGUgMCAtIGZp bmFsIGNoYXIgKi8KLQkJICAgIGlmIChwW2ldID09ICd+JykJLyogSXMgdGlsZGUgKi8KLQkJICAg ICAgc3RhdGUgPSAxOwkvKiBTd2l0Y2ggdG8gbmV4dCBzdGF0ZSAqLwotCQkgICAgZWxzZQkJLyog T3RoZXJ3aXNlICovCi0JCSAgICAgIGZsYWcgPSAxOwkJLyogUXVpdCAtIG5vIGJhY2t1cCBzdWZm aXguICovCi0JCSAgICBicmVhazsKLQkJICBjYXNlIDE6CQkvKiBTdGF0ZSAxIC0gZGlnaXRzICov Ci0JCSAgICBpZiAocFtpXSA9PSAnficgICYmIHBbaS0xXSA9PSAnLicpIHsgLyogSGF2ZSBzdWZm aXggKi8KLQkJCXBbaS0xXSA9IE5VTDsJLyogVHJpbSBpdCAqLwotCQkJZm4gPSBkbmFtZTsKLQkJ CWRlYnVnKEYxMTEsInpuZXduIHN1ZmZpeCByZW1vdmFsIDIiLGZuLGkpOwotCQkJZmxhZyA9IDE7 CS8qIGRvbmUgKi8KLQkJICAgIH0gZWxzZSBpZiAocFtpXSA+PSAnMCcgJiYgcFtpXSA8PSAnOScp IHsgLyogTnVtYmVyIHBhcnQgKi8KLQkJCWNvbnRpbnVlOwkvKiBLZWVwIGdvaW5nICovCi0JCSAg ICB9IGVsc2UgewkJLyogU29tZXRoaW5nIGVsc2UgKi8KLQkJCWZsYWcgPSAxOwkvKiBOb3QgYSBi YWNrdXAgc3VmZml4IC0gcXVpdC4gKi8KLQkJICAgIH0KLQkJICAgIGJyZWFrOwotCQl9Ci0JICAg IH0KLQl9Ci0gICAgfQotICAgIGlmICgoZm5sZW4gPSBzdHJsZW4oZm4pKSA8IDEpIHsJLyogR2V0 IGxlbmd0aCAqLwotCWlmIChkbmFtZSkgZnJlZShkbmFtZSk7Ci0JcmV0dXJuOwotICAgIH0KLSAg ICBkZWJ1ZyhGMTExLCJ6bmV3biIsZm4sZm5sZW4pOwotCi0gICAgZGVidWcoRjEwMSwiem5ld24g bWF4IDEiLCIiLG1heCk7Ci0gICAgaWYgKG1heCA8IDE0KSBtYXggPSAxNDsgICAgICAgICAgICAg LyogTWFrZSBtYXggcmVhc29uYWJsZSBmb3IgYW55IFVOSVggKi8KLSAgICBpZiAobWF4ID4gWk5F V05CTCkgbWF4ID0gWk5FV05CTDsKLSAgICBkZWJ1ZyhGMTAxLCJ6bmV3biBtYXggMiIsIiIsbWF4 KTsKLQotICAgIGlmICgoZm5mcCA9IHpmbnFmcChmbiwgWk5FV05CTCwgYnVmKSkpIHsgLyogR2V0 IGZ1bGx5IHF1YWxpZmllZCBuYW1lICovCi0gICAgICAgIG5hbWVwYXJ0ID0gZm5mcC0+Zm5hbWU7 ICAgICAgICAgLyogSXNvbGF0ZSB0aGUgZmlsZW5hbWUgKi8KLSAgICAgICAgayA9IHN0cmxlbihm bik7ICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgbmFtZSBwYXJ0ICovCi0gICAgICAgIGRl YnVnKEYxMTEsInpuZXduIG5hbWVwYXJ0IixuYW1lcGFydCxrKTsKLSAgICB9IGVsc2UgewotCWlm IChkbmFtZSkgZnJlZShkbmFtZSk7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBidWZsZW4gPSBmbmZw LT5sZW47ICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgZnVsbHkgcXVhbGlmaWVkIG5hbWUg Ki8KLSAgICBkZWJ1ZyhGMTExLCJ6bmV3biBsZW4iLGJ1ZixidWZsZW4pOwotCi0gICAgaWYgKGsg KyBNQVhCVURJR0lUUyArIDMgPCBtYXgpIHsgICAgLyogQmFja3VwIG5hbWUgZml0cyAtIG5vIG92 ZXJmbG93ICovCi0JLyogTWFrZSBwYXR0ZXJuIGZvciBiYWNrdXAgbmFtZXMgKi8KLSAgICAgICAg Y2tzdHJuY3B5KGJ1ZitidWZsZW4sIi5+Kn4iLFpORVdOQkwrMTItYnVmbGVuKTsKLSAgICAgICAg biA9IG56eHBhbmQoYnVmLFpYX0ZJTE9OTFkpOyAgICAvKiBFeHBhbmQgdGhlIHBhdHRlcm4gKi8K LSAgICAgICAgZGVidWcoRjExMSwiem5ld24gQSBtYXRjaGVzIixidWYsbik7Ci0gICAgICAgIHdo aWxlIChuLS0gPiAwKSB7ICAgICAgICAgICAgICAgLyogRmluZCBhbnkgZXhpc3RpbmcgbmFtZS5+ bn4gZmlsZXMgKi8KLSAgICAgICAgICAgIHhwID0gKm10Y2hwdHIrKzsgICAgICAgICAgICAvKiBQ b2ludCBhdCBtYXRjaGluZyBuYW1lICovCi0gICAgICAgICAgICB0ID0gYXRvaSh4cCtidWZsZW4r Mik7ICAgICAgLyogR2V0IG51bWJlciAqLwotICAgICAgICAgICAgaWYgKHQgPiBkKSBkID0gdDsg ICAgICAgICAgIC8qIFNhdmUgZCA9IGhpZ2hlc3QgdmVyc2lvbiBudW1iZXIgKi8KLSAgICAgICAg fQotICAgICAgICBzcHJpbnRmKGJ1ZitidWZsZW4sIi5+JWR+IixkKzEpOyAvKiBZZXMsIG1ha2Ug Im5hbWUufjxkKzE+fiIgKi8KLSAgICAgICAgZGVidWcoRjExMCwiem5ld24gQSBuZXduYW1lIixi dWYsMCk7Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFja3Vw IG5hbWUgd291bGQgYmUgdG9vIGxvbmcgKi8KLSAgICAgICAgaW50IHhsZW47ICAgICAgICAgICAg ICAgICAgICAgICAvKiBTbyB3ZSBoYXZlIHRvIGVhdCBiYWNrIGludG8gaXQgKi8KLSAgICAgICAg aW50IGRlbHRhOwotICAgICAgICBjaGFyIGJ1ZjJbWk5FV05CTCsxMl07Ci0KLSAgICAgICAgZGVs dGEgPSBtYXggLSBrOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ6bmV3biBCIGRlbHRhIiwiIixkZWx0 YSk7Ci0KLSAgICAgICAgZm9yIChpID0gTUFYQlVESUdJVFM7IGkgPiAwOyBpLS0pIHsgLyogSW4g dGhpcyBjYXNlIHRoZSBmb3JtYXQgb2YgKi8KLSAgICAgICAgICAgIGNrc3RybmNweShidWYyLGJ1 ZixaTkVXTkJMKzEyKTsgLyogdGhlIGJhY2t1cCBuYW1lIGRlcGVuZHMgb24gKi8KLSAgICAgICAg ICAgIHhsZW4gPSBidWZsZW4gLSBpIC0gMyArIGRlbHRhOyAgLyogaG93IG1hbnkgZGlnaXRzIGFy ZSBpbiB0aGUgKi8KLSAgICAgICAgICAgIGNrc3RybmNweShidWYyK3hsZW4sIi5+Kn4iLFpORVdO QkwrMTIteGxlbik7IC8qIGJhY2t1cCBudW1iZXIgKi8KLSAgICAgICAgICAgIG4gPSBuenhwYW5k KGJ1ZjIsWlhfRklMT05MWSk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6bmV3biBCIG1hdGNo ZXMiLGJ1ZjIsbik7Ci0gICAgICAgICAgICBpZiAobiA+IDApCi0gICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChuLS0gPiAwKSB7ICAgICAgICAgICAgICAgLyog RmluZCBhbnkgZXhpc3RpbmcgbmFtZS5+bn4gZmlsZXMgKi8KLSAgICAgICAgICAgIHhwID0gKm10 Y2hwdHIrKzsgICAgICAgICAgICAvKiBQb2ludCBhdCBtYXRjaGluZyBuYW1lICovCi0gICAgICAg ICAgICB0ID0gYXRvaSh4cCt4bGVuKzIpOyAgICAgICAgLyogR2V0IG51bWJlciAqLwotICAgICAg ICAgICAgaWYgKHQgPiBkKSBkID0gdDsgICAgICAgICAgIC8qIFNhdmUgZCA9IGhpZ2hlc3QgdmVy c2lvbiBudW1iZXIgKi8KLSAgICAgICAgfQotICAgICAgICBpZiAoZCA+IDApICAgICAgICAgICAg ICAgICAgICAgIC8qIElmIHRoZSBvZG9tZXRlciB0dXJuZWQgb3Zlci4uLiAqLwotICAgICAgICAg IGlmICgoZCAlIDEwKSA9PSA5KSAgICAgICAgICAgIC8qIGJhY2sgdXAgb25lIHNwYWNlLiAqLwot ICAgICAgICAgICAgeGxlbi0tOwotICAgICAgICBzcHJpbnRmKGJ1ZjIreGxlbiwiLn4lZH4iLGQr MSk7IC8qIFRoaXMganVzdCBmaXRzICovCi0gICAgICAgIGNrc3RybmNweShidWYsYnVmMixaTkVX TkJMKzEyKTsJLyogKHdlIGNvdWxkIGJlIG1vcmUgY2xldmVyIGhlcmUuLi4pICovCi0gICAgICAg IGRlYnVnKEYxMTAsInpuZXduIEIgbmV3IG5hbWUiLGJ1ZiwwKTsKLSAgICB9Ci0gICAgKnMgPSBi dWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gbmV3IG5hbWUgKi8KLSAg ICBja196bmV3biA9IGQrMTsgICAgICAgICAgICAgICAgICAgICAvKiBBbHNvIG1ha2UgaXQgYXZh aWxhYmxlIGdsb2JhbGx5ICovCi0gICAgaWYgKGRuYW1lKSBmcmVlKGRuYW1lKTsKLSAgICByZXR1 cm47Ci19Ci0KLS8qICBaIFIgRSBOIEEgTSBFICAtLSAgUmVuYW1lIGEgZmlsZSAgKi8KLS8qCi0g ICBDYWxsIHdpdGggb2xkIGFuZCBuZXcgbmFtZXMuCi0gICBJZiBuZXcgbmFtZSBpcyB0aGUgbmFt ZSBvZiBhIGRpcmVjdG9yeSwgdGhlICdvbGQnIGZpbGUgaXMgbW92ZWQgdG8KLSAgIHRoYXQgZGly ZWN0b3J5LgotICAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCi0qLwotaW50 Ci16cmVuYW1lKG9sZCxuZXcpIGNoYXIgKm9sZCwgKm5ldzsgewotICAgIGNoYXIgKnAsICpzOwot ICAgIGludCB4OwotCi0gICAgaWYgKCFvbGQpIG9sZCA9ICIiOwotICAgIGlmICghbmV3KSBuZXcg PSAiIjsKLSAgICBkZWJ1ZyhGMTEwLCJ6cmVuYW1lIG9sZCIsb2xkLDApOwotICAgIGRlYnVnKEYx MTAsInpyZW5hbWUgbmV3IixuZXcsMCk7Ci0gICAgaWYgKCEqb2xkKSByZXR1cm4oLTEpOwotICAg IGlmICghKm5ldykgcmV0dXJuKC0xKTsKLQotI2lmZGVmIElLU0QKLSNpZmRlZiBDS19MT0dJTgot ICAgIGlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KQotICAgICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAv KiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQotI2lmZGVmIENLUk9PVAotICAgIGRl YnVnKEYxMTEsInpyZW5hbWUgc2V0cm9vdCIsY2tyb290LGNrcm9vdHNldCk7Ci0gICAgaWYgKGNr cm9vdHNldCkgewotCWlmICghemlucm9vdChvbGQpKSB7Ci0JICAgIGRlYnVnKEYxMTAsInpyZW5h bWUgb2xkOiBzZXRyb290IHZpb2xhdGlvbiIsb2xkLDApOwotCSAgICByZXR1cm4oLTEpOwotCX0K LQlpZiAoIXppbnJvb3QobmV3KSkgewotCSAgICBkZWJ1ZyhGMTEwLCJ6cmVuYW1lIG5ldzogc2V0 cm9vdCB2aW9sYXRpb24iLG5ldywwKTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgfQotI2Vu ZGlmIC8qIENLUk9PVCAqLwotCi0gICAgcCA9IE5VTEw7Ci0gICAgcyA9IG5ldzsKLQotICAgIGlm IChpc2RpcihuZXcpKSB7Ci0gICAgICAgIGNoYXIgKnEgPSBOVUxMOwotICAgICAgICB4ID0gc3Ry bGVuKG5ldyk7Ci0gICAgICAgIGlmICghKHAgPSBtYWxsb2Moc3RybGVuKG5ldykgKyBzdHJsZW4o b2xkKSArIDIpKSkKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBzdHJjcHkocCxuZXcp OyAgICAgICAgICAgICAgICAgIC8qIChzYWZlKSBEaXJlY3RvcnkgcGFydCAqLwotICAgICAgICBp ZiAoIUlTRElSU0VQKCoobmV3K3gtMSkpKSAgICAgIC8qIFNlcGFyYXRvciwgaWYgbmVlZGVkICov Ci0gICAgICAgICAgc3RyY2F0KHAsIi8iKTsJCS8qIChzYWZlKSAqLwotICAgICAgICB6c3RyaXAo b2xkLCZxKTsgICAgICAgICAgICAgICAgIC8qIFN0cmlwIHBhdGggcGFydCBmcm9tIG9sZCBuYW1l ICovCi0gICAgICAgIHN0cmNhdChwLHEpOyAgICAgICAgICAgICAgICAgICAgLyogY2F0IHRvIG5l dyBkaXJlY3RvcnkgKHNhZmUpICovCi0gICAgICAgIHMgPSBwOwotICAgICAgICBkZWJ1ZyhGMTEw LCJ6cmVuYW1lIGRpciIscywwKTsKLSAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICBlbHNlIGRlYnVn KEYxMTAsInpyZW5hbWUgbm8gZGlyIixzLDApOwotI2VuZGlmIC8qIERFQlVHICovCi0KLSNpZmRl ZiBJS1NECi0gICAgaWYgKGluc2VydmVyICYmICghRU5BQkxFRChlbl9kZWwpKSkgewotCWlmICh6 Y2hraShzKSA+IC0xKQkJLyogRGVzdGluYXRpb24gZmlsZSBleGlzdHM/ICovCi0JICByZXR1cm4o LTEpOwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICB4ID0gLTE7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gY29kZS4gKi8KLSNpZmRlZiBSRU5BTUUKLS8qIEF0 b21pYywgcHJlZmVycmVkLCB1c2VzIGEgc2luZ2xlIHN5c3RlbSBjYWxsLCByZW5hbWUoKSwgaWYg YXZhaWxhYmxlLiAqLwotICAgIHggPSByZW5hbWUob2xkLHMpOwotICAgIGRlYnVnKEYxMTEsInpy ZW5hbWUgcmVuYW1lKCkiLG9sZCx4KTsKLSAgICBpZiAoeCkgeCA9IC0xOwotI2VuZGlmIC8qIFJF TkFNRSAqLwotCi0gICAgLyogSWYgcmVuYW1lKCkgZmFpbGVkIG9yIG5vdCBhdmFpbGFibGUgdHJ5 IGxpbmsoKS91bmxpbmsoKSAqLwotCi0gICAgaWYgKHggPCAwKSB7Ci0JaWYgKHpjaGtvKG9sZCkg PiAtMSkgewkJLyogUmVxdWlyZXMgd3JpdGUgYWNjZXNzIHRvIG9yaWduYWwgKi8KLQkgICAgeCA9 IGxpbmsob2xkLHMpOwotCSAgICBkZWJ1ZyhGMTExLCJ6cmVuYW1lIGxpbmsoKSIsb2xkLHgpOwot CSAgICBpZiAoeCA+IC0xKSB7CQkvKiBNYWtlIGEgbGluayB3aXRoIHRoZSBuZXcgbmFtZS4gKi8K LQkJeCA9IHVubGluayhvbGQpOwotCQlkZWJ1ZyhGMTExLCJ6cmVuYW1lIHVubGluaygpIixvbGQs eCk7Ci0JICAgIH0KLQkgICAgLyogSWYgbGluay91bmxpbmsgZmFpbGVkIGNvcHkgYW5kIGRlbGV0 ZSAqLwotCSAgICBpZiAoeCA8IDApIHsKLQkJeCA9IHpjb3B5KG9sZCxzKTsKLQkJZGVidWcoRjEx MSwienJlbmFtZSB6Y29weSgpIixvbGQseCk7Ci0JCWlmICh4ID4gLTEpIHsKLQkJICAgIHggPSB6 ZGVsZXQob2xkKTsKLQkJICAgIGRlYnVnKEYxMTEsInpyZW5hbWUgemRlbGV0KCkiLG9sZCx4KTsK LQkJfQotCSAgICB9Ci0JfQotICAgIH0KLSAgICBmdWxsbmFtZVswXSA9ICdcMCc7CQkJLyogQ2xl YXIgdGhpcyBvdXQgZm9yIG5leHQgdGltZS4gKi8KLQotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYg KGNreHN5c2xvZyA+PSBTWVNMR19GQyAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgIHpmbnFmcChv bGQsQ0tNQVhQQVRILGZ1bGxuYW1lKTsKLSAgICAgICAgdG1wMlswXSA9ICdcMCc7Ci0gICAgICAg IHpmbnFmcChzLENLTUFYUEFUSCx0bXAyKTsKLSAgICAgICAgaWYgKHggPiAtMSkKLSAgICAgICAg ICBzeXNsb2coTE9HX0lORk8sImZpbGVbXSAlczogcmVuYW1lZCB0byAlcyBvayIsIGZ1bGxuYW1l LCB0bXAyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywiZmlsZVtd ICVzOiByZW5hbWUgdG8gJXMgZmFpbGVkICglbSkiLGZ1bGxuYW1lLHRtcDIpOwotICAgIH0KLSNl bmRpZiAvKiBDS1NZU0xPRyAqLwotCi0gICAgaWYgKHApIGZyZWUocCk7Ci0gICAgcmV0dXJuKHgp OwotfQotCi0vKiAgWiBDIE8gUCBZICAtLSAgQ29weSBhIHNpbmdsZSBmaWxlLiAqLwotLyoKLSAg Q2FsbCB3aXRoIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbmFtZXMuCi0gIElmIGRlc3RpbmF0aW9u IGlzIGEgZGlyZWN0b3J5LCB0aGUgc291cmNlIGZpbGUgaXMKLSAgY29waWVkIHRvIHRoYXQgZGly ZWN0b3J5IHdpdGggaXRzIG9yaWdpbmFsIG5hbWUuCi0gIFJldHVybnM6Ci0gICAwIG9uIHN1Y2Nl c3MuCi0gIDwwIG9uIGZhaWx1cmU6Ci0gIC0yID0gc291cmNlIGZpbGUgaXMgbm90IGEgcmVndWxh ciBmaWxlLgotICAtMyA9IHNvdXJjZSBmaWxlIG5vdCBmb3VuZC4KLSAgLTQgPSBwZXJtaXNzaW9u IGRlbmllZC4KLSAgLTUgPSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxl LgotICAtNiA9IGkvbyBlcnJvci4KLSAgLTEgPSBvdGhlciBlcnJvci4KLSovCi1pbnQKLXpjb3B5 KHNvdXJjZSxkZXN0aW5hdGlvbikgY2hhciAqc291cmNlLCAqZGVzdGluYXRpb247IHsKLSAgICBj aGFyICpzcmMsICpkc3Q7CQkJLyogTG9jYWwgcG9pbnRlcnMgdG8gZmlsZW5hbWVzICovCi0gICAg aW50IHgsIHksIHJjOyAgICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VycyAqLwotICAgIGlu dCBpbiA9IC0xLCBvdXQgPSAtMTsgICAgICAgICAgICAgIC8qIGkvbyBmaWxlIGRlc2NyaXB0b3Jz ICovCi0gICAgc3RydWN0IHN0YXQgc3JjYnVmOyAgICAgICAgICAgICAgICAgLyogU291cmNlIGZp bGUgaW5mbyBidWZmZXIgKi8KLSAgICBpbnQgcGVybXM7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBPdXRwdXQgZmlsZSBwZXJtaXNzaW9ucyAqLwotICAgIGNoYXIgYnVmWzEwMjRdOyAgICAg ICAgICAgICAgICAgICAgIC8qIEZpbGUgY29weWluZyBidWZmZXIgKi8KLQotICAgIGlmICghc291 cmNlKSBzb3VyY2UgPSAiIjsKLSAgICBpZiAoIWRlc3RpbmF0aW9uKSBkZXN0aW5hdGlvbiA9ICIi OwotCi0gICAgZGVidWcoRjExMCwiemNvcHkgc3JjIGFyZyIsc291cmNlLDApOwotICAgIGRlYnVn KEYxMTAsInpjb3B5IGRzdCBhcmciLGRlc3RpbmF0aW9uLDApOwotCi0gICAgaWYgKCEqc291cmNl KSByZXR1cm4oLTEpOwotICAgIGlmICghKmRlc3RpbmF0aW9uKSByZXR1cm4oLTEpOwotCi0jaWZk ZWYgSUtTRAotI2lmZGVmIENLX0xPR0lOCi0gICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpCi0g ICAgICByZXR1cm4oLTQpOwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jZW5kaWYgLyogSUtTRCAq LwotCi0jaWZkZWYgQ0tST09UCi0gICAgZGVidWcoRjExMSwiemNvcHkgc2V0cm9vdCIsY2tyb290 LGNrcm9vdHNldCk7Ci0gICAgaWYgKGNrcm9vdHNldCkgewotCWlmICghemlucm9vdChzb3VyY2Up KSB7Ci0JICAgIGRlYnVnKEYxMTAsInpjb3B5IHNvdXJjZTogc2V0cm9vdCB2aW9sYXRpb24iLHNv dXJjZSwwKTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0JaWYgKCF6aW5yb290KGRlc3RpbmF0aW9u KSkgewotCSAgICBkZWJ1ZyhGMTEwLCJ6Y29weSBkZXN0aW5hdGlvbjogc2V0cm9vdCB2aW9sYXRp b24iLGRlc3RpbmF0aW9uLDApOwotCSAgICByZXR1cm4oLTEpOwotCX0KLSAgICB9Ci0jZW5kaWYg LyogQ0tST09UICovCi0KLSAgICBzcmMgPSBzb3VyY2U7Ci0gICAgZHN0ID0gZGVzdGluYXRpb247 Ci0KLSAgICBpZiAoc3RhdChzcmMsJnNyY2J1ZikgPT0gMCkgeyAgICAgICAvKiBHZXQgc291cmNl IGZpbGUgaW5mbyAqLwotICAgICAgICBzdHJ1Y3Qgc3RhdCBkc3RidWY7ICAgICAgICAgICAgIC8q IERlc3RpbmF0aW9uIGZpbGUgaW5mbyBidWZmZXIgKi8KLQlkZWJ1ZyhGMTAxLCJTVEFUIiwiIiw2 KTsKLSAgICAgICAgaWYgKHN0YXQoZHN0LCZkc3RidWYpID09IDApIHsKLQkgICAgZGVidWcoRjEw MSwiU1RBVCIsIiIsNyk7Ci0gICAgICAgICAgICBpZiAoc3JjYnVmLnN0X2RldiA9PSBkc3RidWYu c3RfZGV2KQotICAgICAgICAgICAgICBpZiAoc3JjYnVmLnN0X2lubyA9PSBkc3RidWYuc3RfaW5v KSB7Ci0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6Y29weSBmaWxlcyBpZGVudGljYWw6 IHN0YXQoKSIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oLTUpOwotICAgICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBzdGF0KCkgZmFpbGVkLi4uICovCi0JZGVidWcoRjEwMSwiU1RBVCIsIiIsOCk7Ci0gICAg ICAgIGRlYnVnKEYxMTEsInNvdXJjZSBmaWxlIG5vdCBmb3VuZCIsc3JjLGVycm5vKTsKLSAgICAg ICAgcmV0dXJuKC0zKTsKLSAgICB9Ci0gICAgZnVsbG5hbWVbMF0gPSAnXDAnOyAgICAgICAgICAg ICAgICAgLyogR2V0IGZ1bGwgcGF0aG5hbWVzICovCi0gICAgaWYgKHpmbnFmcChzb3VyY2UsQ0tN QVhQQVRILGZ1bGxuYW1lKSkKLSAgICAgIHNyYyA9IGZ1bGxuYW1lOwotICAgIGRlYnVnKEYxMTAs Inpjb3B5IHNyYyIsc3JjLDApOwotICAgIHRtcDJbMF0gPSAnXDAnOwotICAgIGlmICh6Zm5xZnAo ZGVzdGluYXRpb24sQ0tNQVhQQVRILHRtcDIpKQotICAgICAgZHN0ID0gdG1wMjsKLSAgICBkZWJ1 ZyhGMTEwLCJ6Y29weSBkc3QgMSIsZHN0LDApOwotICAgIGlmICghc3RyY21wKHNyYyxkc3QpKSB7 ICAgICAgICAgICAgIC8qIFNyYyBhbmQgZHN0IGFyZSBzYW1lIGZpbGU/ICovCi0gICAgICAgIGRl YnVnKEYxMDAsInpjb3B5IGZpbGVzIGlkZW50aWNhbDogc3RyY21wKCkiLCIiLDApOyAvKiBUaGlz Li4uICovCi0gICAgICAgIHJldHVybigtNSk7ICAgICAgICAgICAgICAgICAgICAgLyogc2hvdWxk IG5vdCBoYXBwZW4uICovCi0gICAgfQotICAgIGlmIChpc2RpcihzcmMpKSB7ICAgICAgICAgICAg ICAgICAgIC8qIFNvdXJjZSBmaWxlIGlzIGEgZGlyZWN0b3J5PyAqLwotICAgICAgICBkZWJ1ZyhG MTEwLCJ6Y29weSBzb3VyY2UgaXMgZGlyZWN0b3J5IixzcmMsMCk7Ci0gICAgICAgIHJldHVybigt Mik7ICAgICAgICAgICAgICAgICAgICAgLyogRmFpbCAqLwotICAgIH0KLSAgICBpZiAoaXNkaXIo ZHN0KSkgeyAgICAgICAgICAgICAgICAgICAvKiBEZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeT8g Ki8KLSAgICAgICAgY2hhciAqcSA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBZZXMsIGFkZCBm aWxlbmFtZSB0byBpdC4gKi8KLSAgICAgICAgeCA9IHN0cmxlbihkc3QpOwotCWlmICh4IDwgMSkg cmV0dXJuKC0xKTsKLSAgICAgICAgaWYgKCFJU0RJUlNFUCgqKGRzdCt4LTEpKSkgeyAgICAvKiBB ZGQgc2VwYXJhdG9yIGlmIG5lZWRlZCAqLwotICAgICAgICAgICAgdG1wMlt4KytdID0gJy8nOwot ICAgICAgICAgICAgdG1wMlt4XSA9ICdcMCc7Ci0gICAgICAgIH0KLQlkZWJ1ZyhGMTExLCJ6Y29w eSBkc3QgMiIsZHN0LHgpOwotICAgICAgICB6c3RyaXAoc3JjLCZxKTsgICAgICAgICAgICAgICAg IC8qIFN0cmlwIHBhdGggcGFydCBmcm9tIG9sZCBuYW1lICovCi0gICAgICAgIGNrc3RybmNweSh0 bXAyK3gscSxDS01BWFBBVEgteCk7IC8qIENvbmNhdGVuYXRlIGl0IHRvIG5ldyBuYW1lICovCi0g ICAgfQotICAgIGRlYnVnKEYxMTAsInpjb3B5IGRzdCAzIixkc3QsMCk7Ci0KLSNpZmRlZiBJS1NE Ci0gICAgaWYgKGluc2VydmVyICYmICghRU5BQkxFRChlbl9kZWwpKSkgewotCWlmICh6Y2hraShk c3QpID4gLTEpCQkvKiBEZXN0aW5hdGlvbiBmaWxlIGV4aXN0cz8gKi8KLQkgIHJldHVybigtNCk7 Ci0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotICAgIHBlcm1zID0gdW1hc2soMCk7ICAgICAg ICAgICAgICAgICAgIC8qIEdldCB1c2VyJ3MgdW1hc2sgKi8KLSAgICB1bWFzayhwZXJtcyk7CQkJ LyogUHV0IGl0IGJhY2shICovCi0gICAgcGVybXMgXj0gMDc3NzsgICAgICAgICAgICAgICAgICAg ICAgLyogRmxpcCB0aGUgYml0cyAqLwotICAgIHBlcm1zICY9IDA2NjY7ICAgICAgICAgICAgICAg ICAgICAgIC8qIFplcm8gZXhlY3V0ZSBiaXRzIGZyb20gdW1hc2sgKi8KLSAgICBwZXJtcyB8PSAo c3JjYnVmLnN0X21vZGUgJiAwMTExKTsgICAvKiBPUiBpbiBzb3VyY2UgZmlsZSdzIGV4ZWN1dGUg Yml0cyAqLwotICAgIHJjID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1 bHQgcmV0dXJuIGNvZGUgKi8KLSAgICBlcnJubyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZXNldCBlcnJubyAqLwotICAgIGluID0gb3BlbihzcmMsIE9fUkRPTkxZLCAwKTsgICAg ICAgIC8qIE9wZW4gc291cmNlIGZpbGUgKi8KLSAgICBkZWJ1ZyhGMTExLCJ6Y29weSBvcGVuIHNv dXJjZSIsc3JjLGluKTsKLSAgICBpZiAoaW4gPiAtMSkgeyAgICAgICAgICAgICAgICAgICAgICAv KiBJZiBvcGVuLi4uICovCi0JLyogT3BlbiBkZXN0aW5hdGlvbiBmaWxlICovCi0jaWZkZWYgT19U UlVOQwotICAgICAgICBvdXQgPSBvcGVuKGRzdCwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DLCBw ZXJtcyk7Ci0jZWxzZQotICAgICAgICBvdXQgPSBvcGVuKGRzdCwgT19XUk9OTFl8T19DUkVBVCwg cGVybXMpOwotI2VuZGlmIC8qIE9fVFJVTkMgKi8KLSAgICAgICAgZGVidWcoRjExMSwiemNvcHkg b3BlbiBkZXN0Iixkc3Qsb3V0KTsKLSAgICAgICAgaWYgKG91dCA+IC0xKSB7ICAgICAgICAgICAg ICAgICAvKiBJZiBvcGVuLi4uICovCi0gICAgICAgICAgICB3aGlsZSAoKHggPSByZWFkKGluLGJ1 ZiwxMDI0KSkgPiAwKSB7IC8qIENvcHkgaW4gMUsgYmxvY2tzICovCi0gICAgICAgICAgICAgICAg eSA9IHdyaXRlKG91dCxidWYseCk7Ci0gICAgICAgICAgICAgICAgaWYgKHkgPCAwKSB7ICAgICAg ICAgICAgLyogT24gd3JpdGUgZmFpbHVyZSAqLwotICAgICAgICAgICAgICAgICAgICB4ID0gLTE7 Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gLTY7ICAgICAgICAgICAgLyogSW5kaWNhdGUgaS9v IGVycm9yICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInpjb3B5IGZpbmFsIHJlYWQi LCIiLHgpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiemNvcHkgZXJybm8iLCIiLGVycm5vKTsK LSAgICAgICAgICAgIHJjID0gKHggPT0gMCkgPyAwIDogLTY7ICAgICAvKiBJbiBjYXNlIG9mIHJl YWQgZmFpbHVyZSAqLwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChpbiA+IC0xKSBjbG9zZShp bik7ICAgICAgICAgICAgIC8qIENsb3NlIGZpbGVzICovCi0gICAgaWYgKG91dCA+IC0xKSBjbG9z ZShvdXQpOwotICAgIGlmIChyYyA9PSAtMSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBy ZXR1cm4gY29kZSAqLwotICAgICAgICBzd2l0Y2ggKGVycm5vKSB7Ci0gICAgICAgICAgY2FzZSBF Tk9FTlQ6IHJjID0gLTM7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRUFDQ0VTOiByYyA9IC00OyBi cmVhazsKLSAgICAgICAgICBjYXNlIEVJTzogICAgcmMgPSAtNjsKLSAgICAgICAgfQotICAgIH0K LQotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKHJjID4gLTEgJiYgY2t4c3lzbG9nID49IFNZU0xH X0ZDICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgaWYgKHJjKQotICAgICAgICAgIHN5c2xvZyhM T0dfSU5GTywiZmlsZVtdICVzOiBjb3B5IHRvICVzIGZhaWxlZCAoJW0pIiwgZnVsbG5hbWUsIHRt cDIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgc3lzbG9nKExPR19JTkZPLCJmaWxlW10gJXM6 IGNvcHkgdG8gJXMgb2siLCBmdWxsbmFtZSwgdG1wMik7Ci0gICAgfQotI2VuZGlmIC8qIENLU1lT TE9HICovCi0KLSAgICByZXR1cm4ocmMpOwotfQotCi0vKiAgWiBTIEEgVCBUIFIgKi8KLS8qCi0g RmlsbHMgaW4gYSBLZXJtaXQgZmlsZSBhdHRyaWJ1dGUgc3RydWN0dXJlIGZvciB0aGUgZmlsZSB3 aGljaCBpcyB0byBiZSBzZW50LgotIFJldHVybnMgMCBvbiBzdWNjZXNzIHdpdGggdGhlIHN0cnVj dHVyZSBmaWxsZWQgaW4sIG9yIC0xIG9uIGZhaWx1cmUuCi0gSWYgYW55IHN0cmluZyBtZW1iZXIg aXMgbnVsbCwgdGhlbiBpdCBzaG91bGQgYmUgaWdub3JlZC4KLSBJZiBhbnkgbnVtZXJpYyBtZW1i ZXIgaXMgLTEsIHRoZW4gaXQgc2hvdWxkIGJlIGlnbm9yZWQuCi0qLwotI2lmZGVmIENLX1BFUk1T Ci0KLSNpZmRlZiBDS19HUEVSTVMKLSN1bmRlZiBDS19HUEVSTVMKLSNlbmRpZiAvKiBDS19HUEVS TVMgKi8KLQotI2lmZGVmIFVOSVgKLSNpZm5kZWYgU19JUlVTUgotI2RlZmluZSBTX0lSVVNSIDA0 MDAKLSNlbmRpZiAvKiBTX0lSVVNSICovCi0jaWZuZGVmIFNfSVdVU1IKLSNkZWZpbmUgU19JWFVT UiAwMjAwCi0jZW5kaWYgLyogU19JV1VTUiAqLwotI2lmbmRlZiBTX0lYVVNSCi0jZGVmaW5lIFNf SVhVU1IgMDEwMAotI2VuZGlmIC8qIFNfSVhVU1IgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNp ZmRlZiBTX0lSVVNSCi0jaWZkZWYgU19JV1VTUgotI2lmZGVmIFNfSVhVU1IKLSNkZWZpbmUgQ0tf R1BFUk1TCi0jZW5kaWYgLyogU19JWFVTUiAqLwotI2VuZGlmIC8qIFNfSVdVU1IgKi8KLSNlbmRp ZiAvKiBTX0lSVVNSICovCi0KLXN0YXRpYyBjaGFyIGdwZXJtc1syXTsKLQotI2VuZGlmIC8qIENL X0dQRVJNUyAqLwotCi1zdGF0aWMgY2hhciBscGVybXNbMjRdOwotCi0jaWZkZWYgQ0tfUEVSTVMK LXN0YXRpYyBjaGFyIHhscGVybXNbMjRdOwotCi0vKiAgWiBTIEUgVCBQIEUgUiBNICAtLSAgU2V0 IHBlcm1pc3Npb25zIG9mIGEgZmlsZSAgKi8KLQotaW50Ci16c2V0cGVybShmLGNvZGUpIGNoYXIg KiBmOyBpbnQgY29kZTsgewotICAgIGludCB4OwotI2lmZGVmIENLX1NDTzMyVjQKLSAgICBtb2Rl X3QgbWFzazsKLSNlbHNlCi0gICAgaW50IG1hc2s7Ci0jZW5kaWYgLyogQ0tfU0NPMzJWNCAqLwot ICAgIG1hc2sgPSBjb2RlOwotICAgIGlmIChpbnNlcnZlciAmJiBndWVzdCkgewotCWRlYnVnKEYx MTAsInpzZXRwZXJtIGd1ZXN0IixmLDApOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgeCA9IGNo bW9kKGYsbWFzayk7Ci0gICAgaWYgKHggPCAwKSB7Ci0JZGVidWcoRjExMSwienNldHBlcm0gZXJy b3IiLGYsZXJybm8pOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwienNldHBl cm0gb2siLGYsbWFzayk7Ci0gICAgcmV0dXJuKDEpOwotfQotCi0vKiAgWiBHIFAgRSBSIE0gIC0t ICBHZXQgcGVybWlzc2lvbnMgb2YgYSBmaWxlIGFzIGFuIG9jdGFsIHN0cmluZyAgKi8KLQotY2hh ciAqCi16Z3Blcm0oZikgY2hhciAqZjsgewotICAgIGV4dGVybiBpbnQgZGlyYWN0aXZlOwotICAg IGludCB4OyBjaGFyICpzID0gKGNoYXIgKil4bHBlcm1zOwotICAgIHN0cnVjdCBzdGF0IGJ1ZjsK LSAgICBkZWJ1ZyhGMTEwLCJ6Z3Blcm0iLGYsMCk7Ci0gICAgaWYgKCFmKSByZXR1cm4oIi0tLS0t LS0tLS0iKTsKLSAgICBpZiAoISpmKSByZXR1cm4oIi0tLS0tLS0tLS0iKTsKLQotI2lmZGVmIENL Uk9PVAotICAgIGRlYnVnKEYxMTEsInpncGVybSBzZXRyb290Iixja3Jvb3QsY2tyb290c2V0KTsK LSAgICBpZiAoY2tyb290c2V0KSBpZiAoIXppbnJvb3QoZikpIHsKLQlkZWJ1ZyhGMTEwLCJ6Z3Bl cm0gc2V0cm9vdCB2aW9sYXRpb24iLGYsMCk7Ci0JcmV0dXJuKCItLS0tLS0tLS0tIik7Ci0gICAg fQotI2VuZGlmIC8qIENLUk9PVCAqLwotCi0jaWZkZWYgVVNFX0xTVEFUCi0gICAgaWYgKGRpcmFj dGl2ZSkKLSAgICAgIHggPSBsc3RhdChmLCZidWYpOwotICAgIGVsc2UKLSNlbmRpZiAvKiBVU0Vf TFNUQVQgKi8KLSAgICAgIHggPSBzdGF0KGYsJmJ1Zik7Ci0gICAgZGVidWcoRjEwMSwiU1RBVCIs IiIsOSk7Ci0gICAgaWYgKHggPCAwKQotICAgICAgcmV0dXJuKCItLS0tLS0tLS0tIik7Ci0gICAg c3ByaW50ZihzLCIlbyIsYnVmLnN0X21vZGUpOwotICAgIGRlYnVnKEYxMTAsInpncGVybSIscyww KTsKLSAgICByZXR1cm4ocyk7Ci19Ci0KLS8qIExpa2UgemdwZXJtKCkgYnV0IHJldHVybnMgcGVy bWlzc2lvbnMgaW4gImxzIC1sIiBzdHJpbmcgZm9ybWF0ICovCi0KLXN0YXRpYyBjaGFyIHhzcGVy bXNbMjRdOwotCi1jaGFyICoKLXppcGVybShmKSBjaGFyICogZjsgewotICAgIGV4dGVybiBpbnQg ZGlyYWN0aXZlOwotICAgIGludCB4OyBjaGFyICpzID0gKGNoYXIgKil4c3Blcm1zOwotICAgIHN0 cnVjdCBzdGF0IGJ1ZjsKLSAgICB1bnNpZ25lZCBpbnQgcGVybXMgPSAwOwotCi0gICAgZGVidWco RjExMCwiemlwZXJtIixmLDApOwotCi0gICAgaWYgKCFmKSByZXR1cm4oTlVMTCk7Ci0gICAgaWYg KCEqZikgcmV0dXJuKE5VTEwpOwotCi0gICAgaWYgKGRpcmFjdGl2ZSAmJiB6Z2ZzX21vZGUgIT0g MCkgewotCXBlcm1zID0gemdmc19tb2RlOwkJLyogemdldGZzKCkgYWxyZWFkeSBnb3QgdGhlbSAq LwotICAgIH0gZWxzZSB7Ci0jaWZkZWYgVVNFX0xTVEFUCi0JaWYgKGRpcmFjdGl2ZSkKLQkgIHgg PSBsc3RhdChmLCZidWYpOwotCWVsc2UKLSNlbmRpZiAvKiBVU0VfTFNUQVQgKi8KLQkgIHggPSBz dGF0KGYsJmJ1Zik7Ci0JZGVidWcoRjEwMSwiU1RBVCIsIiIsMTApOwotCWlmICh4IDwgMCkKLQkg IHJldHVybigiLS0tLS0tLS0tLSIpOwotCXBlcm1zID0gYnVmLnN0X21vZGU7Ci0gICAgfQotICAg IHN3aXRjaCAocGVybXMgJiBTX0lGTVQpIHsKLSAgICAgIGNhc2UgU19JRkRJUjoKLSAgICAgICAg KnMrKyA9ICdkJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNfSUZDSFI6ICAgICAgICAg ICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHNwZWNpYWwgKi8KLSAgICAgICAgKnMrKyA9ICdjJzsK LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNfSUZCTEs6ICAgICAgICAgICAgICAgICAgICAg LyogQmxvY2sgc3BlY2lhbCAqLwotICAgICAgICAqcysrID0gJ2InOwotICAgICAgICBicmVhazsK LSAgICAgIGNhc2UgU19JRlJFRzogICAgICAgICAgICAgICAgICAgICAvKiBSZWd1bGFyICovCi0g ICAgICAgICpzKysgPSAnLSc7Ci0gICAgICAgIGJyZWFrOwotI2lmZGVmIFNfSUZMTksKLSAgICAg IGNhc2UgU19JRkxOSzogICAgICAgICAgICAgICAgICAgICAvKiBTeW1ib2xpYyBsaW5rICovCi0g ICAgICAgICpzKysgPSAnbCc7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFNfSUZMTksgKi8K LSNpZmRlZiBTX0lGU09DSwotICAgICAgY2FzZSBTX0lGU09DSzogICAgICAgICAgICAgICAgICAg IC8qIFNvY2tldCAqLwotICAgICAgICAqcysrID0gJ3MnOwotICAgICAgICBicmVhazsKLSNlbmRp ZiAvKiBTX0lGU09DSyAqLwotI2lmZGVmIFNfSUZJRk8KLSNpZm5kZWYgUGxhbjkKLSNpZm5kZWYg Q09IRVJFTlQKLSAgICAgIGNhc2UgU19JRklGTzogICAgICAgICAgICAgICAgICAgICAvKiBGSUZP ICovCi0gICAgICAgICpzKysgPSAncCc7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENPSEVS RU5UICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLSNlbmRpZiAvKiBTX0lGSUZPICovCi0jaWZkZWYg U19JRldIVAotICAgICAgY2FzZSBTX0lGV0hUOiAgICAgICAgICAgICAgICAgICAgIC8qIFdoaXRl b3V0ICovCi0gICAgICAgICpzKysgPSAndyc7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFNf SUZXSFQgKi8KLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtu b3duICovCi0gICAgICAgICpzKysgPSAnPyc7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBp ZiAocGVybXMgJiBTX0lSVVNSKSAgICAgICAgICAvKiBPd25lcidzIHBlcm1pc3Npb25zICovCi0g ICAgICAqcysrID0gJ3InOwotICAgIGVsc2UKLSAgICAgICpzKysgPSAnLSc7Ci0gICAgaWYgKHBl cm1zICYgU19JV1VTUikKLSAgICAgICpzKysgPSAndyc7Ci0gICAgZWxzZQotICAgICAgKnMrKyA9 ICctJzsKLSAgICBzd2l0Y2ggKHBlcm1zICYgKFNfSVhVU1IgfCBTX0lTVUlEKSkgewotICAgICAg Y2FzZSAwOgotICAgICAgICAqcysrID0gJy0nOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug U19JWFVTUjoKLSAgICAgICAgKnMrKyA9ICd4JzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl IFNfSVNVSUQ6Ci0gICAgICAgICpzKysgPSAnUyc7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz ZSBTX0lYVVNSIHwgU19JU1VJRDoKLSAgICAgICAgKnMrKyA9ICdzJzsKLSAgICAgICAgYnJlYWs7 Ci0gICAgfQotICAgIGlmIChwZXJtcyAmIFNfSVJHUlApICAgICAgICAgIC8qIEdyb3VwIHBlcm1p c3Npb25zICovCi0gICAgICAqcysrID0gJ3InOwotICAgIGVsc2UKLSAgICAgICpzKysgPSAnLSc7 Ci0gICAgaWYgKHBlcm1zICYgU19JV0dSUCkKLSAgICAgICpzKysgPSAndyc7Ci0gICAgZWxzZQot ICAgICAgKnMrKyA9ICctJzsKLSAgICBzd2l0Y2ggKHBlcm1zICYgKFNfSVhHUlAgfCBTX0lTR0lE KSkgewotICAgICAgY2FzZSAwOgotICAgICAgICAqcysrID0gJy0nOwotICAgICAgICBicmVhazsK LSAgICAgIGNhc2UgU19JWEdSUDoKLSAgICAgICAgKnMrKyA9ICd4JzsKLSAgICAgICAgYnJlYWs7 Ci0gICAgICBjYXNlIFNfSVNHSUQ6Ci0gICAgICAgICpzKysgPSAnUyc7Ci0gICAgICAgIGJyZWFr OwotICAgICAgY2FzZSBTX0lYR1JQIHwgU19JU0dJRDoKLSAgICAgICAgKnMrKyA9ICdzJzsKLSAg ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChwZXJtcyAmIFNfSVJPVEgpICAgICAgICAgIC8q IFdvcmxkIHBlcm1pc3Npb25zICovCi0gICAgICAqcysrID0gJ3InOwotICAgIGVsc2UKLSAgICAg ICpzKysgPSAnLSc7Ci0gICAgaWYgKHBlcm1zICYgU19JV09USCkKLSAgICAgICpzKysgPSAndyc7 Ci0gICAgZWxzZQotICAgICAgKnMrKyA9ICctJzsKLSAgICBzd2l0Y2ggKAotI2lmZGVmIFBsYW45 Ci0gICAgICAgICAgICBwZXJtcyAmIChTX0lYT1RIKQotI2Vsc2UKLSAgICAgICAgICAgIHBlcm1z ICYgKFNfSVhPVEggfCBTX0lTVlRYKQotI2VuZGlmCi0gICAgICAgICAgICApIHsKLSAgICAgIGNh c2UgMDoKLSAgICAgICAgKnMrKyA9ICctJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNf SVhPVEg6Ci0gICAgICAgICpzKysgPSAneCc7Ci0gICAgICAgIGJyZWFrOwotI2lmbmRlZiBQbGFu OQotICAgICAgY2FzZSBTX0lTVlRYOgotICAgICAgICAqcysrID0gJ1QnOwotICAgICAgICBicmVh azsKLSAgICAgIGNhc2UgU19JWE9USCB8IFNfSVNWVFg6Ci0gICAgICAgICpzKysgPSAndCc7Ci0g ICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFBsYW45ICovCi0gICAgfQotICAgICpzID0gJ1wwJzsK LSAgICBkZWJ1ZyhGMTEwLCJ6aXBlcm0iLHhzcGVybXMsMCk7Ci0gICAgcmV0dXJuKChjaGFyICop eHNwZXJtcyk7Ci19Ci0KLSNlbHNlCi0KLWNoYXIgKgotemdwZXJtKGYpIGNoYXIgKmY7IHsKLSAg ICByZXR1cm4oIi0tLS0tLS0tLS0iKTsKLX0KLWNoYXIgKgotemlwZXJtcyhmKSBjaGFyICpmOyB7 Ci0gICAgcmV0dXJuKCItLS0tLS0tLS0tIik7Ci19Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLQot aW50Ci16c2F0dHIoeHgpIHN0cnVjdCB6YXR0ciAqeHg7IHsKLSAgICBDS19PRkZfVCBrOyBpbnQg eDsKLSAgICBzdHJ1Y3Qgc3RhdCBidWY7Ci0KLSAgICBrID0gaWZsZW4gJSAxMDI0OwkJCS8qIEZp bGUgbGVuZ3RoIGluIEsgKi8KLSAgICBpZiAoaykgayA9IDFMOwotICAgIHh4LT5sZW5ndGhrID0g KGlmbGVuIC8gMTAyNCkgKyBrOwotICAgIHh4LT50eXBlLmxlbiA9IDA7ICAgICAgICAgICAgICAg ICAgIC8qIEZpbGUgdHlwZSBjYW4ndCBiZSBmaWxsZWQgaW4gaGVyZSAqLwotICAgIHh4LT50eXBl LnZhbCA9ICIiOwotICAgIGlmICgqbmFtYnVmKSB7Ci0gICAgICAgIHh4LT5kYXRlLnZhbCA9IHpm Y2RhdChuYW1idWYpOyAgLyogRmlsZSBjcmVhdGlvbiBkYXRlICovCi0gICAgICAgIHh4LT5kYXRl LmxlbiA9IChpbnQpc3RybGVuKHh4LT5kYXRlLnZhbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg eHgtPmRhdGUubGVuID0gMDsKLSAgICAgICAgeHgtPmRhdGUudmFsID0gIiI7Ci0gICAgfQotICAg IHh4LT5jcmVhdG9yLmxlbiA9IDA7ICAgICAgICAgICAgICAgIC8qIEZpbGUgY3JlYXRvciAqLwot ICAgIHh4LT5jcmVhdG9yLnZhbCA9ICIiOwotICAgIHh4LT5hY2NvdW50LmxlbiA9IDA7ICAgICAg ICAgICAgICAgIC8qIEZpbGUgYWNjb3VudCAqLwotICAgIHh4LT5hY2NvdW50LnZhbCA9ICIiOwot ICAgIHh4LT5hcmVhLmxlbiA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgYXJlYSAqLwot ICAgIHh4LT5hcmVhLnZhbCA9ICIiOwotICAgIHh4LT5wYXNzd29yZC5sZW4gPSAwOyAgICAgICAg ICAgICAgIC8qIEFyZWEgcGFzc3dvcmQgKi8KLSAgICB4eC0+cGFzc3dvcmQudmFsID0gIiI7Ci0g ICAgeHgtPmJsa3NpemUgPSAtMUw7ICAgICAgICAgICAgICAgICAgLyogRmlsZSBibG9ja3NpemUg Ki8KLSAgICB4eC0+eGFjY2Vzcy5sZW4gPSAwOyAgICAgICAgICAgICAgICAvKiBGaWxlIGFjY2Vz cyAqLwotICAgIHh4LT54YWNjZXNzLnZhbCA9ICIiOwotICAgIHh4LT5lbmNvZGluZy5sZW4gPSAw OyAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIHN5bnRheCAqLwotICAgIHh4LT5lbmNvZGluZy52 YWwgPSAwOwotICAgIHh4LT5kaXNwLmxlbiA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIERpc3Bv c2l0aW9uIHVwb24gYXJyaXZhbCAqLwotICAgIHh4LT5kaXNwLnZhbCA9ICIiOwotICAgIHh4LT5s cHJvdGVjdC5sZW4gPSAwOyAgICAgICAgICAgICAgIC8qIExvY2FsIHByb3RlY3Rpb24gKi8KLSAg ICB4eC0+bHByb3RlY3QudmFsID0gIiI7Ci0gICAgeHgtPmdwcm90ZWN0LmxlbiA9IDA7ICAgICAg ICAgICAgICAgLyogR2VuZXJpYyBwcm90ZWN0aW9uICovCi0gICAgeHgtPmdwcm90ZWN0LnZhbCA9 ICIiOwotICAgIHggPSAtMTsKLSAgICBpZiAoKm5hbWJ1ZikgeCA9IHN0YXQobmFtYnVmLCZidWYp OwotICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIiLDExKTsKLSAgICBpZiAoeCA+PSAwKSB7Ci0gICAg ICAgIGRlYnVnKEYxMTEsInpzYXR0ciBidWYuc3RfbW9kZSAmIDA3NzciLG5hbWJ1ZixidWYuc3Rf bW9kZSAmIDA3NzcpOwotICAgICAgICAvKiBVTklYIGZpbGVtb2RlIGFzIGFuIG9jdGFsIHN0cmlu ZyB3aXRob3V0IGZpbGV0eXBlIGJpdHMgKi8KLSAgICAgICAgc3ByaW50ZihscGVybXMsIiVvIixi dWYuc3RfbW9kZSAmIDA3NzcpOwotICAgICAgICB4eC0+bHByb3RlY3QubGVuID0gKGludClzdHJs ZW4obHBlcm1zKTsKLSAgICAgICAgeHgtPmxwcm90ZWN0LnZhbCA9IChjaGFyICopbHBlcm1zOwot ICAgICAgICB4ID0gMDsKLSNpZmRlZiBDS19HUEVSTVMKLSAgICAgICAgLyogR2VuZXJpYyBwZXJt aXNzaW9ucyBvbmx5IGlmIHdlIGhhdmUgc3RhdC5oIHN5bWJvbHMgZGVmaW5lZCAqLwotICAgICAg ICBpZiAoYnVmLnN0X21vZGUgJiBTX0lSVVNSKSB4IHw9IDE7ICAgICAgLyogUmVhZCAqLwotICAg ICAgICBpZiAoYnVmLnN0X21vZGUgJiBTX0lXVVNSKSB4IHw9ICgyKzE2KTsgLyogV3JpdGUgYW5k IERlbGV0ZSAqLwotICAgICAgICBpZiAoYnVmLnN0X21vZGUgJiBTX0lYVVNSKSB4IHw9IDQ7ICAg ICAgLyogRXhlY3V0ZSAqLwotICAgICAgICBncGVybXNbMF0gPSB0b2NoYXIoeCk7Ci0gICAgICAg IGdwZXJtc1sxXSA9IE5VTDsKLSAgICAgICAgeHgtPmdwcm90ZWN0LmxlbiA9IDE7Ci0gICAgICAg IHh4LT5ncHJvdGVjdC52YWwgPSAoY2hhciAqKWdwZXJtczsKLSNlbmRpZiAvKiBDS19HUEVSTVMg Ki8KLSAgICB9Ci0gICAgZGVidWcoRjExMSwienNhdHRyIGxwZXJtcyIseHgtPmxwcm90ZWN0LnZh bCx4eC0+bHByb3RlY3QubGVuKTsKLSAgICBkZWJ1ZyhGMTExLCJ6c2F0dHIgZ3Blcm1zIix4eC0+ Z3Byb3RlY3QudmFsLHh4LT5ncHJvdGVjdC5sZW4pOwotICAgIHh4LT5zeXN0ZW1pZC52YWwgPSAi VTEiOyAgICAgICAgICAgIC8qIFUxID0gVU5JWCAqLwotICAgIHh4LT5zeXN0ZW1pZC5sZW4gPSAy OyAgICAgICAgICAgICAgIC8qIFN5c3RlbSBJRCAqLwotICAgIHh4LT5yZWNmbS5sZW4gPSAwOyAg ICAgICAgICAgICAgICAgIC8qIFJlY29yZCBmb3JtYXQgKi8KLSAgICB4eC0+cmVjZm0udmFsID0g IiI7Ci0gICAgeHgtPnN5c3BhcmFtLmxlbiA9IDA7ICAgICAgICAgICAgICAgLyogU3lzdGVtLWRl cGVuZGVudCBwYXJhbWV0ZXJzICovCi0gICAgeHgtPnN5c3BhcmFtLnZhbCA9ICIiOwotICAgIHh4 LT5sZW5ndGggPSBpZmxlbjsgICAgICAgICAgICAgICAgIC8qIExlbmd0aCAqLwotICAgIHJldHVy bigwKTsKLX0KLQotLyogWiBGIEMgRCBBIFQgIC0tICBHZXQgZmlsZSBjcmVhdGlvbiBkYXRlICov Ci0vKgotICBDYWxsIHdpdGggcG9pbnRlciB0byBmaWxlbmFtZS4KLSAgT24gc3VjY2VzcywgcmV0 dXJucyBwb2ludGVyIHRvIG1vZGlmaWNhdGlvbiBkYXRlIGluIHl5eXltbWRkIGhoOm1tOnNzIGZv cm1hdC4KLSAgT24gZmFpbHVyZSwgcmV0dXJucyBwb2ludGVyIHRvIG51bGwgc3RyaW5nLgotKi8K LXN0YXRpYyBjaGFyIGRhdGJ1Zls0MF07Ci0KLWNoYXIgKgotI2lmZGVmIENLX0FOU0lDCi16ZHRz dHIodGltZV90IHRpbWVhcmcpCi0jZWxzZQotemR0c3RyKHRpbWVhcmcpIHRpbWVfdCB0aW1lYXJn OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB6ZHRzdHIgKi8gewotI2lmbmRlZiBUSU1FU1RB TVAKLSAgICByZXR1cm4oIiIpOwotI2Vsc2UKLSAgICBzdHJ1Y3QgdG0gKiB0aW1lX3N0YW1wOwot ICAgIHN0cnVjdCB0bSAqIGxvY2FsdGltZSgpOwotICAgIGludCB5eSwgc3M7Ci0KLSAgICBkZWJ1 ZyhGMTAxLCJ6ZHRzdHIgdGltZWFyZyIsIiIsdGltZWFyZyk7Ci0gICAgaWYgKHRpbWVhcmcgPCAw KQotICAgICAgcmV0dXJuKCIiKTsKLSAgICB0aW1lX3N0YW1wID0gbG9jYWx0aW1lKCYodGltZWFy ZykpOwotICAgIGlmICghdGltZV9zdGFtcCkgewotICAgICAgICBkZWJ1ZyhGMTAwLCJsb2NhbHRp bWUgcmV0dXJucyBudWxsIiwiIiwwKTsKLSAgICAgICAgcmV0dXJuKCIiKTsKLSAgICB9Ci0vKgot ICBXZSBhc3N1bWUgdGhhdCB0bV95ZWFyIGlzIEFMV0FZUyB5ZWFycyBzaW5jZSAxOTAwLgotICBB bnkgcGxhdGZvcm0gd2hlcmUgdGhpcyBpcyBub3QgdGhlIGNhc2Ugd2lsbCBoYXZlIHByb2JsZW1z Ci0gIHN0YXJ0aW5nIGluIDIwMDAuCi0qLwotICAgIHl5ID0gdGltZV9zdGFtcC0+dG1feWVhcjsg ICAgICAgICAgIC8qIFllYXIgLSAxOTAwICovCi0gICAgZGVidWcoRjEwMSwiemR0c3RyIHRtX3ll YXIiLCIiLHRpbWVfc3RhbXAtPnRtX3llYXIpOwotICAgIGlmICh5eSA+IDEwMDApIHsKLSAgICAg ICAgZGVidWcoRjEwMSwienN0cmR0IFlFQVItMjAwMCBBTEVSVCAxOiBsb2NhbHRpbWUgeWVhciIs IiIseXkpOwotICAgIH0KLSAgICB5eSArPSAxOTAwOwotICAgIGRlYnVnKEYxMDEsInpkYXRzdHIg eWVhciIsIiIseXkpOwotCi0gICAgaWYgKHRpbWVfc3RhbXAtPnRtX21vbiAgPCAwIHx8IHRpbWVf c3RhbXAtPnRtX21vbiAgPiAxMSkKLSAgICAgIHJldHVybigiIik7Ci0gICAgaWYgKHRpbWVfc3Rh bXAtPnRtX21kYXkgPCAwIHx8IHRpbWVfc3RhbXAtPnRtX21kYXkgPiAzMSkKLSAgICAgIHJldHVy bigiIik7Ci0gICAgaWYgKHRpbWVfc3RhbXAtPnRtX2hvdXIgPCAwIHx8IHRpbWVfc3RhbXAtPnRt X2hvdXIgPiAyMykKLSAgICAgIHJldHVybigiIik7Ci0gICAgaWYgKHRpbWVfc3RhbXAtPnRtX21p biAgPCAwIHx8IHRpbWVfc3RhbXAtPnRtX21pbiAgPiA1OSkKLSAgICAgIHJldHVybigiIik7Ci0g ICAgc3MgPSB0aW1lX3N0YW1wLT50bV9zZWM7ICAgICAgICAgICAgLyogU2Vjb25kcyAqLwotICAg IGlmIChzcyA8IDAgfHwgc3MgID4gNTkpICAgICAgICAgICAgIC8qIFNvbWUgc3lzdGVtcyBnaXZl IGEgQklHIG51bWJlciAqLwotICAgICAgc3MgPSAwOwotICAgIHNwcmludGYoZGF0YnVmLAotI2lm ZGVmIHBkcDExCi0vKiBGb3Igc29tZSByZWFzb24sIDIuMXggQlNEIHNwcmludGYgZ2V0cyB0aGUg bGFzdCBmaWVsZCB3cm9uZy4gKi8KLSAgICAgICAgICAgICIlMDRkJTAyZCUwMmQgJTAyZDolMDJk OjAwIiwKLSNlbHNlCi0gICAgICAgICAgICAiJTA0ZCUwMmQlMDJkICUwMmQ6JTAyZDolMDJkIiwK LSNlbmRpZiAvKiBwZHAxMSAqLwotICAgICAgICAgICAgeXksCi0gICAgICAgICAgICB0aW1lX3N0 YW1wLT50bV9tb24gKyAxLAotICAgICAgICAgICAgdGltZV9zdGFtcC0+dG1fbWRheSwKLSAgICAg ICAgICAgIHRpbWVfc3RhbXAtPnRtX2hvdXIsCi0gICAgICAgICAgICB0aW1lX3N0YW1wLT50bV9t aW4KLSNpZm5kZWYgcGRwMTEKLSAgICAgICAgICAgICwgc3MKLSNlbmRpZiAvKiBwZHAxMSAqLwot ICAgICAgICAgICAgKTsKLSAgICB5eSA9IChpbnQpc3RybGVuKGRhdGJ1Zik7Ci0gICAgZGVidWco RjExMSwiemRhdHN0ciIsZGF0YnVmLHl5KTsKLSAgICBpZiAoeXkgPiAxNykgZGF0YnVmWzE3XSA9 ICdcMCc7Ci0gICAgcmV0dXJuKGRhdGJ1Zik7Ci0jZW5kaWYgLyogVElNRVNUQU1QICovCi19Ci0K LWNoYXIgKgotemZjZGF0KG5hbWUpIGNoYXIgKm5hbWU7IHsKLSNpZmRlZiBUSU1FU1RBTVAKLSAg ICBzdHJ1Y3Qgc3RhdCBidWZmZXI7Ci0gICAgZXh0ZXJuIGludCBkaXJhY3RpdmU7Ci0gICAgdW5z aWduZWQgaW50IG10aW1lOwotICAgIGludCB4OwotICAgIGNoYXIgKiBzOwotCi0gICAgaWYgKCFu YW1lKQotICAgICAgcmV0dXJuKCIiKTsKLSAgICBzID0gbmFtZTsKLSAgICBpZiAoISpzKQotICAg ICAgcmV0dXJuKCIiKTsKLQotI2lmZGVmIENLUk9PVAotICAgIGRlYnVnKEYxMTEsInpmY2RhdCBz ZXRyb290Iixja3Jvb3QsY2tyb290c2V0KTsKLSAgICBpZiAoY2tyb290c2V0KSBpZiAoIXppbnJv b3QobmFtZSkpIHsKLQlkZWJ1ZyhGMTEwLCJ6ZmNkYXQgc2V0cm9vdCB2aW9sYXRpb24iLG5hbWUs MCk7Ci0JcmV0dXJuKCIiKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tST09UICovCi0KLSNpZmRlZiBE VElMREUKLSAgICBpZiAoKnMgPT0gJ34nKSB7Ci0gICAgICAgIHMgPSB0aWxkZV9leHBhbmQocyk7 Ci0gICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAgICBpZiAoISpzKSBzID0gbmFtZTsKLSAg ICB9Ci0jZW5kaWYgLyogRFRJTERFICovCi0KLSAgICBkYXRidWZbMF0gPSAnXDAnOwotICAgIHgg PSAwOwotICAgIGRlYnVnKEYxMTEsInpmY2RhdCIscyxkaXJhY3RpdmUpOwotCi0gICAgaWYgKGRp cmFjdGl2ZSAmJiB6Z2ZzX210aW1lKSB7Ci0JbXRpbWUgPSB6Z2ZzX210aW1lOwotICAgIH0gZWxz ZSB7Ci0jaWZkZWYgVVNFX0xTVEFUCi0JaWYgKGRpcmFjdGl2ZSkgewotCSAgICB4ID0gbHN0YXQo cywmYnVmZmVyKTsKLQkgICAgZGVidWcoRjEwMSwiU1RBVCIsIiIsMTIpOwotCSAgICBkZWJ1ZyhG MTAxLCJ6ZmNkYXQgbHN0YXQiLCIiLHgpOwotCX0gZWxzZSB7Ci0jZW5kaWYgLyogVVNFX0xTVEFU ICovCi0JICAgIHggPSBzdGF0KHMsJmJ1ZmZlcik7Ci0JICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIi LDEzKTsKLQkgICAgZGVidWcoRjEwMSwiemZjZGF0IHN0YXQiLCIiLHgpOwotI2lmZGVmIFVTRV9M U1RBVAotCX0KLSNlbmRpZiAvKiBVU0VfTFNUQVQgKi8KLQlpZiAoeCAhPSAwKSB7Ci0jaWZkZWYg VVNFX0xTVEFUCi0JICAgIGRlYnVnKEYxMTEsInpmY2RhdCBzdGF0IGZhaWxlZCIscyxlcnJubyk7 Ci0jZWxzZQotCSAgICBkZWJ1ZyhGMTExLCJ6ZmNkYXQgbHN0YXQgZmFpbGVkIixzLGVycm5vKTsK LSNlbmRpZiAvKiBVU0VfTFNUQVQgKi8KLQkgICAgcmV0dXJuKCIiKTsKLQl9Ci0JZGVidWcoRjEw MSwiemZjZGF0IGJ1ZmZlci5zdF9tdGltZSIsIiIsYnVmZmVyLnN0X210aW1lKTsKLQltdGltZSA9 IGJ1ZmZlci5zdF9tdGltZTsKLSAgICB9Ci0gICAgcmV0dXJuKHpkdHN0cihtdGltZSkpOwotI2Vs c2UKLSAgICByZXR1cm4oIiIpOwotI2VuZGlmIC8qIFRJTUVTVEFNUCAqLwotfQotCi0jaWZuZGVm IE5PVElNRVNUQU1QCi0KLS8qIFogUyBUIFIgRCBUICAtLSAgQ29udmVydHMgbG9jYWwgZGF0ZSBz dHJpbmcgdG8gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKi8KLS8qCi0gIEluIG91ciBjYXNlIChV TklYKSB0aGlzIGlzIHNlY29uZHMgc2luY2UgbWlkbml0ZSAxIEphbiAxOTcwIFVUQywKLSAgc3Vp dGFibGUgZm9yIGNvbXBhcmlzb24gd2l0aCBVTklYIGZpbGUgZGF0ZXMuICBBcyBmYXIgYXMgSSBr bm93LCB0aGVyZSBpcwotICBubyBsaWJyYXJ5IG9yIHN5c3RlbSBjYWxsIC0tIGF0IGxlYXN0IG5v dGhpbmcgcmVhc29uYWJseSBwb3J0YWJsZSAtLSB0bwotICBjb252ZXJ0IGxvY2FsIHRpbWUgdG8g VVRDLgotKi8KLXRpbWVfdAotenN0cmR0KGRhdGUsbGVuKSBjaGFyICogZGF0ZTsgaW50IGxlbjsg ewotI2lmZGVmIE1fVU5JWAotLyoKLSAgU0NPIFVOSVggMy4ydjIuMCBhbmQgT0RUIDIuMCBsYWNr IHByb3RvdHlwZXMgZm9yIGZ0aW1lKCkuCi0gIE9EVCAzLjAgKDMuMnY0LjIgT1MpIGhhcyBhIHBy b3RvdHlwZSwgd2hpY2ggbWF5IHZhcnkgaW4KLSAgZGVwZW5kZW5jZSBvbiB0aGUgWFBHNCBzdXBw bGVtZW50IHByZXNlbmNlLiAgU28gYWx3YXlzIHVzZQotICB3aGF0IHRoZSBzeXN0ZW0gaGVhZGVy IGZpbGUgc3VwcGxpZXMgaW4gT0RUIDMuMC4uLgotKi8KLSNpZm5kZWYgT0RUMzAKLSNpZm5kZWYg X1NDT19EUwotICAgIGV4dGVybiB2b2lkIGZ0aW1lKCk7ICAvKiBleHRlcm4gdm9pZCBmdGltZShz dHJ1Y3QgdGltZWIgKikgKi8KLSNlbmRpZiAvKiBfU0NPX0RTICovCi0jZW5kaWYgLyogT0RUMzAg Ki8KLSNlbHNlCi0jaWZuZGVmIE1fWEVOSVgKLSAgICBleHRlcm4gaW50IGZ0aW1lKCk7Ci0jZW5k aWYgLyogTV9YRU5JWCAqLwotI2VuZGlmIC8qIE1fVU5JWCAqLwotICAgIGV4dGVybiBzdHJ1Y3Qg dG0gKiBsb2NhbHRpbWUoKTsKLQotICAgIC8qIEFuZCB0aGlzIHNob3VsZCBoYXZlIGJlZW4gZGVj bGFyZWQgYWx3YXlzIHRocm91Z2ggYSBoZWFkZXIgZmlsZSAqLwotI2lmZGVmIEhQVVgxMAotICAg IHRpbWVfdCB0bXg7Ci0gICAgbG9uZyBkYXlzOwotI2Vsc2UKLSNpZmRlZiBCU0Q0NAotICAgIHRp bWVfdCB0bXg7Ci0gICAgbG9uZyBkYXlzOwotI2Vsc2UKLSAgICBsb25nIHRteCwgZGF5czsKLSNl bmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotICAgIGludCBpLCBuLCBpc2xl YXB5ZWFyOwotICAgICAgICAgICAgICAgICAgIC8qICAgICAgIEogIEYgIE0gIEEgICBNICAgSiAg IEogICBBICAgUyAgIE8gICBOICAgRCAgICovCi0gICAgICAgICAgICAgICAgICAgLyogICAgICAz MSAyOCAzMSAzMCAgMzEgIDMwICAzMSAgMzEgIDMwICAzMSAgMzAgIDMxICAgKi8KLSAgICBzdGF0 aWMKLSAgICBpbnQgbW9udGhkYXlzIFsxM10gPSB7ICAwLDAsMzEsNTksOTAsMTIwLDE1MSwxODEs MjEyLDI0MywyNzMsMzA0LDMzNCB9OwotICAgIGNoYXIgc1s1XTsKLSAgICBzdHJ1Y3QgdG0gKnRp bWVfc3RhbXA7Ci0KLSNpZmRlZiBCU0Q0NAotICAgIHN0cnVjdCB0aW1ldmFsIHRwWzJdOwotICAg IGxvbmcgeHRpbWV6b25lID0gMEw7Ci0jZWxzZQotI2lmZGVmIFY3Ci0gICAgc3RydWN0IHV0aW1i dWYgewotICAgICAgdGltZV90IHRpbWVwWzJdOyAgICAgICAgICAvKiBOZXcgYWNjZXNzIGFuZCBt b2RpZmljYXRvbiB0aW1lICovCi0gICAgfSB0cDsKLSAgICBjaGFyICp0ejsKLSAgICBsb25nIHRp bWV6b25lOyAgICAgICAgICAgICAgLyogSW4gY2FzZSB0aW1lem9uZSBub3QgZGVmaW5lZCBpbiAu aCBmaWxlICovCi0jZWxzZQotI2lmZGVmIFNZU1VUSU1FSAotICAgIHN0cnVjdCB1dGltYnVmIHRw OwotI2Vsc2UKLSAgICBzdHJ1Y3QgdXRpbWJ1ZiB7Ci0gICAgICAgIHRpbWVfdCBhdGltZTsKLSAg ICAgICAgdGltZV90IG10aW1lOwotICAgIH0gdHA7Ci0jZW5kaWYgLyogU1lTVVRJTUVIICovCi0j ZW5kaWYgLyogVjcgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotCi0jaWZkZWYgQU5ZQlNECi0gICAg bG9uZyB0aW1lem9uZSA9IDBMOwotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIgdGJwOwotI2VuZGlm IC8qIEFOWUJTRCAqLwotCi0jaWZkZWYgQkVCT1gKLSAgICBsb25nIHRpbWV6b25lID0gMEw7Ci0j ZW5kaWYgLyogQkVCT1ggKi8KLQotICAgIGRlYnVnKEYxMTEsInpzdHJkdCIsZGF0ZSxsZW4pOwot Ci0gICAgaWYgKChsZW4gPT0gMCkKLSAgICAgICAgfHwgKGxlbiAhPSAxNykKLSAgICAgICAgfHwg KGRhdGVbOF0gIT0gJyAnKQotICAgICAgICB8fCAoZGF0ZVsxMV0gIT0gJzonKQotICAgICAgICB8 fCAoZGF0ZVsxNF0gIT0gJzonKSApIHsKLSAgICAgICAgZGVidWcoRjExMSwiQmFkIGNyZWF0aW9u IGRhdGUgIixkYXRlLGxlbik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGRlYnVn KEYxMTEsInpzdHJkdCBkYXRlIGNoZWNrIDEiLGRhdGUsbGVuKTsKLSAgICBmb3IoaSA9IDA7IGkg PCA4OyBpKyspIHsKLSAgICAgICAgaWYgKCFpc2RpZ2l0KGRhdGVbaV0pKSB7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTExLCJCYWQgY3JlYXRpb24gZGF0ZSAiLGRhdGUsbGVuKTsKLSAgICAgICAgICAg IHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVidWcoRjExMSwienN0cmR0IGRh dGUgY2hlY2sgMiIsZGF0ZSxsZW4pOwotICAgIGkrKzsKLQotICAgIGZvciAoOyBpIDwgMTY7IGkg Kz0gMykgewotICAgICAgICBpZiAoKCFpc2RpZ2l0KGRhdGVbaV0pKSB8fCAoIWlzZGlnaXQoZGF0 ZVtpICsgMV0pKSkgewotICAgICAgICAgICAgZGVidWcoRjExMSwiQmFkIGNyZWF0aW9uIGRhdGUg IixkYXRlLGxlbik7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgfQot ICAgIGRlYnVnKEYxMTEsInpzdHJkdCBkYXRlIGNoZWNrIDMiLGRhdGUsbGVuKTsKLQotCi0jaWZk ZWYgQ09NTUVOVCAvKiB3YXMgQlNENDQgKi8KLS8qCi0gICBtYW4gZ2V0dGltZW9mZGF5IG9uIEJT REkgMy4xIHNheXM6Ci0gICAiVGhlIHRpbWV6b25lIGZpZWxkIGlzIG5vIGxvbmdlciB1c2VkOyB0 aW1lem9uZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgb3V0LQotICAgICBzaWRlIHRoZSBrZXJuZWwu ICBTZWUgY3RpbWUoMykgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAgU28gdGhpcyBjaHVuayBvZgot ICAgY29kZSBpcyBlZmZlY3RpdmVseSBhIG5vLW9wLCBhdCBsZWFzdCBpbiBCU0RJIDMueC4KLSov Ci0gICAgewotICAgICAgICBpbnQgeDsKLSAgICAgICAgc3RydWN0IHRpbWV6b25lIHR6cDsKLSAg ICAgICAgeCA9IGdldHRpbWVvZmRheShOVUxMLCAmdHpwKTsKLSAgICAgICAgZGVidWcoRjEwMSwi enN0cmR0IEJTRDQ0IGdldHRpbWVvZmRheSIsIiIseCk7Ci0gICAgICAgIGlmICh4ID4gLTEpCi0g ICAgICAgICAgeHRpbWV6b25lID0gdHpwLnR6X21pbnV0ZXN3ZXN0ICogNjBMOwotICAgICAgICBl bHNlCi0gICAgICAgICAgeHRpbWV6b25lID0gMEw7Ci0gICAgICAgIGRlYnVnKEYxMDEsInpzdHJk dCBCU0Q0NCB0aW1lem9uZSIsIiIseHRpbWV6b25lKTsKLSAgICB9Ci0jZWxzZQotI2lmZGVmIEFO WUJTRAotICAgIGRlYnVnKEYxMDAsInpzdHJkdCBCU0QgY2FsbGluZyBmdGltZSIsIiIsMCk7Ci0g ICAgZnRpbWUoJnRicCk7Ci0gICAgZGVidWcoRjEwMCwienN0cmR0IEJTRCBiYWNrIGZyb20gZnRp bWUiLCIiLDApOwotICAgIHRpbWV6b25lID0gdGJwLnRpbWV6b25lICogNjBMOwotICAgIGRlYnVn KEYxMDEsInpzdHJkdCBCU0QgdGltZXpvbmUiLCIiLHRpbWV6b25lKTsKLSNlbHNlCi0jaWZkZWYg U1ZPUlBPU0lYCi0gICAgdHpzZXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0 IHRpbWV6b25lICovCi0jZWxzZQotI2lmZGVmIFY3Ci0gICAgaWYgKCh0eiA9IGdldGVudigiVFoi KSkgPT0gTlVMTCkKLSAgICAgIHRpbWV6b25lID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBV VEMvR01UICovCi0gICAgZWxzZQotICAgICAgdGltZXpvbmUgPSBhdG9pKCZ0elszXSk7ICAgICAg ICAgIC8qIFNldCAndGltZXpvbmUnLiAqLwotICAgIHRpbWV6b25lICo9IDYwTDsKLSNlbmRpZiAv KiBWNyAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2VuZGlmIC8qIEFOWUJTRCAqLwotI2Vu ZGlmIC8qIENPTU1FTlQgKHdhcyBCU0Q0NCkgKi8KLQotICAgIGRlYnVnKEYxMDAsInpzdHJkdCBz byBmYXIgc28gZ29vZCIsIiIsMCk7Ci0KLSAgICBzWzRdID0gJ1wwJzsKLSAgICBmb3IgKGkgPSAw OyBpIDwgNDsgaSsrKSAgICAgICAgICAgICAvKiBGaXggdGhlIHllYXIgKi8KLSAgICAgIHNbaV0g PSBkYXRlW2ldOwotCi0gICAgbiA9IGF0b2kocyk7Ci0gICAgZGVidWcoRjExMSwienN0cmR0IHll YXIiLHMsbik7Ci0gICAgaWYgKG4gPCAxOTcwKSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsInpzdHJk dCBmYWlscyAtIHllYXIiLCIiLG4pOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotLyog IFByZXZpb3VzIHllYXIncyBsZWFwIGRheXMuICBUaGlzIHdvbid0IHdvcmsgYWZ0ZXIgeWVhciAy MTAwLiAqLwotCi0gICAgaXNsZWFweWVhciA9ICgoIG4gJSA0ID09IDAgJiYgbiAlIDEwMCAhPTAp IHx8IG4gJSA0MDAgPT0gMCk7Ci0gICAgZGF5cyA9IChsb25nKSAobiAtIDE5NzApICogMzY1Owot ICAgIGRheXMgKz0gKG4gLSAxOTY4IC0gMSkgLyA0IC0gKG4gLSAxOTAwIC0gMSkgLyAxMDAgKyAo biAtIDE2MDAgLSAxKSAvIDQwMDsKLQotICAgIHNbMl0gPSAnXDAnOwotCi0gICAgZm9yIChpID0g NDsgaSA8IDE2OyBpICs9IDIpIHsKLSAgICAgICAgc1swXSA9IGRhdGVbaV07Ci0gICAgICAgIHNb MV0gPSBkYXRlW2kgKyAxXTsKLSAgICAgICAgbiA9IGF0b2kocyk7Ci0gICAgICAgIHN3aXRjaCAo aSkgewotICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgICAgIC8qIE1NOiBtb250 aCAqLwotICAgICAgICAgICAgaWYgKChuIDwgMSApIHx8ICggbiA+IDEyKSkgewotICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTEsInpzdHJkdCA0IGJhZCBkYXRlICIsZGF0ZSxsZW4pOwotICAgICAg ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXlzICs9 IG1vbnRoZGF5cyBbbl07Ci0gICAgICAgICAgICBpZiAoaXNsZWFweWVhciAmJiBuID4gMikKLSAg ICAgICAgICAgICAgKytkYXlzOwotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICBj YXNlIDY6ICAgICAgICAgICAgICAgICAgICAgICAvKiBERDogZGF5ICovCi0gICAgICAgICAgICBp ZiAoKG4gPCAxICkgfHwgKCBuID4gMzEpKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwi enN0cmR0IDYgYmFkIGRhdGUgIixkYXRlLGxlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0x KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRteCA9IChkYXlzICsgbiAtIDEpICogMjRM ICogNjBMICogNjBMOwotICAgICAgICAgICAgaSsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFNraXAgdGhlIHNwYWNlICovCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgIGNh c2UgOTogICAgICAgICAgICAgICAgICAgICAgIC8qIGhoOiBob3VyICovCi0gICAgICAgICAgICBp ZiAoKG4gPCAwICkgfHwgKCBuID4gMjMpKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwi enN0cmR0IDkgYmFkIGRhdGUgIixkYXRlLGxlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0x KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRteCArPSBuICogNjBMICogNjBMOwotICAg ICAgICAgICAgaSsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgdGhlIGNvbG9uICov Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgIGNhc2UgMTI6ICAgICAgICAgICAg ICAgICAgICAgIC8qIG1tOiBtaW51dGUgKi8KLSAgICAgICAgICAgIGlmICgobiA8IDAgKSB8fCAo IG4gPiA1OSkpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6c3RyZHQgMTIgYmFkIGRh dGUgIixkYXRlLGxlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAg IH0KLSNpZmRlZiBDT01NRU5UIC8qICh3YXMgQlNENDQpICovICAgICAgICAvKiBDb3JyZWN0IGZv ciB0aW1lIHpvbmUgKi8KLSAgICAgICAgICAgIHRteCArPSB4dGltZXpvbmU7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJ6c3RyZHQgQlNENDQgdG14IiwiIix0bXgpOwotI2Vsc2UKLSNpZmRlZiBB TllCU0QKLSAgICAgICAgICAgIHRteCArPSB0aW1lem9uZTsKLSNlbHNlCi0jaWZuZGVmIENPTlZF WDkgLyogRG9uJ3QgeWV0IGtub3cgaG93IHRvIGRvIHRoaXMgaGVyZSAqLwotI2lmZGVmIHVsdHJp eAotICAgICAgICAgICAgdG14ICs9IChsb25nKSB0aW1lem9uZTsKLSNlbHNlCi0jaWZkZWYgUGxh bjkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBleHRlcm4gdGltZV90IHR6b2Zmc2V0 OwotICAgICAgICAgICAgICAgIHRteCArPSB0em9mZnNldDsKLSAgICAgICAgICAgIH0KLSNlbHNl Ci0jaWZuZGVmIEJTRDQ0Ci0jaWZuZGVmIE5PVElNRVpPTkUKLSAgICAgICAgICAgIHRteCArPSB0 aW1lem9uZTsKLSNlbmRpZgkvKiBOT1RJTUVaT05FICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNl bmRpZiAvKiBQbGFuOSAqLwotI2VuZGlmIC8qIHVsdHJpeCAqLwotI2VuZGlmIC8qIENPTlZFWDkg Ki8KLSNlbmRpZiAvKiBBTllCU0QgKi8KLSNlbmRpZiAvKiBDT01NRU5UICh3YXMgQlNENDQpICov Ci0gICAgICAgICAgICB0bXggKz0gbiAqIDYwTDsKLSAgICAgICAgICAgIGkrKzsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTa2lwIHRoZSBjb2xvbiAqLwotICAgICAgICAgICAgY29udGludWU7 Ci0KLSAgICAgICAgICBjYXNlIDE1OiAgICAgICAgICAgICAgICAgICAgICAvKiBzczogc2Vjb25k ICovCi0gICAgICAgICAgICBpZiAoKG4gPCAwICkgfHwgKCBuID4gNTkpKSB7Ci0gICAgICAgICAg ICAgICAgZGVidWcoRjExMSwienN0cmR0IDE1IGJhZCBkYXRlICIsZGF0ZSxsZW4pOwotICAgICAg ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0bXggKz0g bjsKLSAgICAgICAgfQotICAgICAgICB0aW1lX3N0YW1wID0gbG9jYWx0aW1lKCZ0bXgpOwotICAg ICAgICBkZWJ1ZyhGMTAxLCJ6c3RyZHQgdG14IDEiLCIiLHRteCk7Ci0gICAgICAgIGlmICghdGlt ZV9zdGFtcCkKLSAgICAgICAgICByZXR1cm4oLTEpOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAg LyogV2h5IHdhcyB0aGlzIGhlcmU/ICovCi0gICAgICAgIHRpbWVfc3RhbXAgPSBsb2NhbHRpbWUo JnRteCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInpzdHJkdCB0bXggMiIsIiIsdG14KTsKLSNlbmRp ZiAvKiBDT01NRU5UICovCi0jaWZkZWYgQlNENDQKLSAgICAgICAgeyAgIC8qIE5ldyB0byA3LjAg LSBXb3JrcyBpbiBhdCBhdCBsZWFzdCBCU0RJIDMuMSBhbmQgRnJlZUJTRCAyLjIuNyAqLwotICAg ICAgICAgICAgbG9uZyB6ejsKLSAgICAgICAgICAgIHp6ID0gdGltZV9zdGFtcC0+dG1fZ210b2Zm OyAvKiBTZWNvbmRzIGF3YXkgZnJvbSBaZXJvIE1lcmlkaWFuICovCi0gICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJ6c3RyZHQgQlNENDQgdG1fZ210b2ZmIiwiIix6eik7Ci0gICAgICAgICAgICB0bXgg LT0geno7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6c3RyZHQgQlNENDQgdG14IDMgKEdNVCki LCIiLHRteCk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIC8qCi0gICAgICAgICAgIERheWxp Z2h0IFNhdmluZ3MgVGltZSBhZGp1c3RtZW50LgotICAgICAgICAgICBEbyB0aGlzIGV2ZXJ5d2hl cmUgQlVUIGluIEJTRDQ0IGJlY2F1c2UgaW4gQlNENDQsCi0gICAgICAgICAgIHRtX2dtdG9mZiBh bHNvIGluY2x1ZGVzIHRoZSBEU1QgYWRqdXN0bWVudC4KLSAgICAgICAgKi8KLSAgICAgICAgaWYg KHRpbWVfc3RhbXAtPnRtX2lzZHN0KSB7Ci0gICAgICAgICAgICB0bXggLT0gNjBMICogNjBMOwot ICAgICAgICAgICAgZGVidWcoRjEwMSwienN0cmR0IHRteCAzIChEU1QpIiwiIix0bXgpOwotICAg ICAgICB9Ci0jZW5kaWYgLyogQlNENDQgKi8KLSAgICAgICAgbiA9IHRpbWVfc3RhbXAtPnRtX3ll YXI7Ci0gICAgICAgIGlmIChuIDwgMzAwKSB7Ci0gICAgICAgICAgICBuICs9IDE5MDA7Ci0gICAg ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKHRteCk7Ci19Ci0KLQotI2lmZGVmIFpMT0NBTFRJTUUK LS8qIFogTCBPIEMgQSBMIFQgSSBNIEUgIC0tICBHTVQvVVRDIHRpbWUgc3RyaW5nIHRvIGxvY2Fs IHRpbWUgc3RyaW5nICovCi0KLS8qCi0gICBDYWxsIHdpdGg6ICJ5eXl5bW1kZCBoaDptbTpzcyIg R01UL1VUQyBkYXRlLXRpbWUuCi0gICBSZXR1cm5zOiAgICJ5eXl5bW1kZCBoaDptbTpzcyIgbG9j YWwgZGF0ZS10aW1lIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KLSovCi1zdGF0aWMgY2hh ciB6bHRpbWJ1Zls2NF07Ci0KLWNoYXIgKgotemxvY2FsdGltZShnbXRzdHJpbmcpIGNoYXIgKiBn bXRzdHJpbmc7IHsKLSNpZmRlZiBNX1VOSVgKLS8qCi0gIFNDTyBVTklYIDMuMnYyLjAgYW5kIE9E VCAyLjAgbGFjayBwcm90b3R5cGVzIGZvciBmdGltZSgpLgotICBPRFQgMy4wICgzLjJ2NC4yIE9T KSBoYXMgYSBwcm90b3R5cGUsIHdoaWNoIG1heSB2YXJ5IGluCi0gIGRlcGVuZGVuY2Ugb24gdGhl IFhQRzQgc3VwcGxlbWVudCBwcmVzZW5jZS4gIFNvIGFsd2F5cyB1c2UKLSAgd2hhdCB0aGUgc3lz dGVtIGhlYWRlciBmaWxlIHN1cHBsaWVzIGluIE9EVCAzLjAuLi4KLSovCi0jaWZuZGVmIE9EVDMw Ci0jaWZuZGVmIF9TQ09fRFMKLSAgICBleHRlcm4gdm9pZCBmdGltZSgpOyAgLyogZXh0ZXJuIHZv aWQgZnRpbWUoc3RydWN0IHRpbWViICopICovCi0jZW5kaWYgLyogX1NDT19EUyAqLwotI2VuZGlm IC8qIE9EVDMwICovCi0jZWxzZQotI2lmbmRlZiBNX1hFTklYCi0gICAgZXh0ZXJuIGludCBmdGlt ZSgpOwotI2VuZGlmIC8qIE1fWEVOSVggKi8KLSNlbmRpZiAvKiBNX1VOSVggKi8KLSAgICBleHRl cm4gc3RydWN0IHRtICogbG9jYWx0aW1lKCk7Ci0KLSAgICAvKiBBbmQgdGhpcyBzaG91bGQgaGF2 ZSBiZWVuIGRlY2xhcmVkIGFsd2F5cyB0aHJvdWdoIGEgaGVhZGVyIGZpbGUgKi8KLSNpZmRlZiBI UFVYMTAKLSAgICB0aW1lX3QgdG14OwotICAgIGxvbmcgZGF5czsKLSNlbHNlCi0jaWZkZWYgQlNE NDQKLSAgICB0aW1lX3QgdG14OwotICAgIGxvbmcgZGF5czsKLSNlbHNlCi0gICAgbG9uZyB0bXgs IGRheXM7Ci0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBIUFVYMTAgKi8KLSAgICBpbnQg aSwgbiwgeCwgaXNsZWFweWVhcjsKLSAgICAgICAgICAgICAgICAgICAvKiAgICAgICBKICBGICBN ICBBICAgTSAgIEogICBKICAgQSAgIFMgICBPICAgTiAgIEQgICAqLwotICAgICAgICAgICAgICAg ICAgIC8qICAgICAgMzEgMjggMzEgMzAgIDMxICAzMCAgMzEgIDMxICAzMCAgMzEgIDMwICAzMSAg ICovCi0gICAgc3RhdGljCi0gICAgaW50IG1vbnRoZGF5cyBbMTNdID0geyAgMCwwLDMxLDU5LDkw LDEyMCwxNTEsMTgxLDIxMiwyNDMsMjczLDMwNCwzMzQgfTsKLSAgICBjaGFyIHNbNV07Ci0gICAg c3RydWN0IHRtICp0aW1lX3N0YW1wOwotCi0jaWZkZWYgQlNENDQKLSAgICBzdHJ1Y3QgdGltZXZh bCB0cFsyXTsKLSNlbHNlCi0jaWZkZWYgVjcKLSAgICBzdHJ1Y3QgdXRpbWJ1ZiB7Ci0gICAgICB0 aW1lX3QgdGltZXBbMl07ICAgICAgICAgIC8qIE5ldyBhY2Nlc3MgYW5kIG1vZGlmaWNhdG9uIHRp bWUgKi8KLSAgICB9IHRwOwotI2Vsc2UKLSNpZmRlZiBTWVNVVElNRUgKLSAgICBzdHJ1Y3QgdXRp bWJ1ZiB0cDsKLSNlbHNlCi0gICAgc3RydWN0IHV0aW1idWYgewotICAgICAgICB0aW1lX3QgYXRp bWU7Ci0gICAgICAgIHRpbWVfdCBtdGltZTsKLSAgICB9IHRwOwotI2VuZGlmIC8qIFNZU1VUSU1F SCAqLwotI2VuZGlmIC8qIFY3ICovCi0jZW5kaWYgLyogQlNENDQgKi8KLQotI2lmZGVmIEFOWUJT RAotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIgdGJwOwotI2VuZGlmIC8qIEFOWUJTRCAqLwotCi0g ICAgY2hhciAqIGRhdGUgPSBnbXRzdHJpbmc7Ci0gICAgaW50IGxlbjsKLQotICAgIGxlbiA9IHN0 cmxlbihkYXRlKTsKLSAgICBkZWJ1ZyhGMTExLCJ6bG9jYWx0aW1lIixkYXRlLGxlbik7Ci0KLSAg ICBpZiAoKGxlbiA9PSAwKQotICAgICAgICB8fCAobGVuICE9IDE3KQotICAgICAgICB8fCAoZGF0 ZVs4XSAhPSAnICcpCi0gICAgICAgIHx8IChkYXRlWzExXSAhPSAnOicpCi0gICAgICAgIHx8IChk YXRlWzE0XSAhPSAnOicpICkgewotICAgICAgICBkZWJ1ZyhGMTExLCJCYWQgY3JlYXRpb24gZGF0 ZSAiLGRhdGUsbGVuKTsKLSAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBkZWJ1ZyhG MTExLCJ6bG9jYWx0aW1lIGRhdGUgY2hlY2sgMSIsZGF0ZSxsZW4pOwotICAgIGZvcihpID0gMDsg aSA8IDg7IGkrKykgewotICAgICAgICBpZiAoIWlzZGlnaXQoZGF0ZVtpXSkpIHsKLSAgICAgICAg ICAgIGRlYnVnKEYxMTEsIkJhZCBjcmVhdGlvbiBkYXRlICIsZGF0ZSxsZW4pOwotICAgICAgICAg ICAgcmV0dXJuKE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInpsb2Nh bHRpbWUgZGF0ZSBjaGVjayAyIixkYXRlLGxlbik7Ci0gICAgaSsrOwotCi0gICAgZm9yICg7IGkg PCAxNjsgaSArPSAzKSB7Ci0gICAgICAgIGlmICgoIWlzZGlnaXQoZGF0ZVtpXSkpIHx8ICghaXNk aWdpdChkYXRlW2kgKyAxXSkpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJCYWQgY3JlYXRp b24gZGF0ZSAiLGRhdGUsbGVuKTsKLQkgICAgcmV0dXJuKE5VTEwpOwotICAgICAgICB9Ci0gICAg fQotICAgIGRlYnVnKEYxMTEsInpsb2NhbHRpbWUgZGF0ZSBjaGVjayAzIixkYXRlLGxlbik7Ci0K LSAgICBkZWJ1ZyhGMTAwLCJ6bG9jYWx0aW1lIHNvIGZhciBzbyBnb29kIiwiIiwwKTsKLQotICAg IHNbNF0gPSAnXDAnOwotICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspICAgICAgICAgICAgIC8q IEZpeCB0aGUgeWVhciAqLwotICAgICAgc1tpXSA9IGRhdGVbaV07Ci0KLSAgICBuID0gYXRvaShz KTsKLSAgICBkZWJ1ZyhGMTExLCJ6bG9jYWx0aW1lIHllYXIiLHMsbik7Ci0gICAgaWYgKG4gPCAx OTcwKSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsInpsb2NhbHRpbWUgZmFpbHMgLSB5ZWFyIiwiIixu KTsKLSAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgIH0KLQotLyogIFByZXZpb3VzIHllYXIncyBs ZWFwIGRheXMuICBUaGlzIHdvbid0IHdvcmsgYWZ0ZXIgeWVhciAyMTAwLiAqLwotCi0gICAgaXNs ZWFweWVhciA9ICgoIG4gJSA0ID09IDAgJiYgbiAlIDEwMCAhPTApIHx8IG4gJSA0MDAgPT0gMCk7 Ci0gICAgZGF5cyA9IChsb25nKSAobiAtIDE5NzApICogMzY1OwotICAgIGRheXMgKz0gKG4gLSAx OTY4IC0gMSkgLyA0IC0gKG4gLSAxOTAwIC0gMSkgLyAxMDAgKyAobiAtIDE2MDAgLSAxKSAvIDQw MDsKLQotICAgIHNbMl0gPSAnXDAnOwotCi0gICAgZm9yIChpID0gNDsgaSA8IDE2OyBpICs9IDIp IHsKLSAgICAgICAgc1swXSA9IGRhdGVbaV07Ci0gICAgICAgIHNbMV0gPSBkYXRlW2kgKyAxXTsK LSAgICAgICAgbiA9IGF0b2kocyk7Ci0gICAgICAgIHN3aXRjaCAoaSkgewotICAgICAgICAgIGNh c2UgNDogICAgICAgICAgICAgICAgICAgICAgIC8qIE1NOiBtb250aCAqLwotICAgICAgICAgICAg aWYgKChuIDwgMSApIHx8ICggbiA+IDEyKSkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEs Inpsb2NhbHRpbWUgNCBiYWQgZGF0ZSAiLGRhdGUsbGVuKTsKLSAgICAgICAgICAgICAgICByZXR1 cm4oTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXlzICs9IG1vbnRoZGF5cyBb bl07Ci0gICAgICAgICAgICBpZiAoaXNsZWFweWVhciAmJiBuID4gMikKLSAgICAgICAgICAgICAg KytkYXlzOwotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICBjYXNlIDY6ICAgICAg ICAgICAgICAgICAgICAgICAvKiBERDogZGF5ICovCi0gICAgICAgICAgICBpZiAoKG4gPCAxICkg fHwgKCBuID4gMzEpKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwiemxvY2FsdGltZSA2 IGJhZCBkYXRlICIsZGF0ZSxsZW4pOwotICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIHRteCA9IChkYXlzICsgbiAtIDEpICogMjRMICogNjBM ICogNjBMOwotICAgICAgICAgICAgaSsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAg dGhlIHNwYWNlICovCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgIGNhc2UgOTog ICAgICAgICAgICAgICAgICAgICAgIC8qIGhoOiBob3VyICovCi0gICAgICAgICAgICBpZiAoKG4g PCAwICkgfHwgKCBuID4gMjMpKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwiemxvY2Fs dGltZSA5IGJhZCBkYXRlICIsZGF0ZSxsZW4pOwotICAgICAgICAgICAgICAgIHJldHVybihOVUxM KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRteCArPSBuICogNjBMICogNjBMOwotICAg ICAgICAgICAgaSsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgdGhlIGNvbG9uICov Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgIGNhc2UgMTI6ICAgICAgICAgICAg ICAgICAgICAgIC8qIG1tOiBtaW51dGUgKi8KLSAgICAgICAgICAgIGlmICgobiA8IDAgKSB8fCAo IG4gPiA1OSkpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6bG9jYWx0aW1lIDEyIGJh ZCBkYXRlICIsZGF0ZSxsZW4pOwotICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIHRteCArPSBuICogNjBMOwotICAgICAgICAgICAgaSsrOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgdGhlIGNvbG9uICovCi0gICAgICAgICAgICBj b250aW51ZTsKLQotICAgICAgICAgIGNhc2UgMTU6ICAgICAgICAgICAgICAgICAgICAgIC8qIHNz OiBzZWNvbmQgKi8KLSAgICAgICAgICAgIGlmICgobiA8IDAgKSB8fCAoIG4gPiA1OSkpIHsKLSAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6bG9jYWx0aW1lIDE1IGJhZCBkYXRlICIsZGF0ZSxs ZW4pOwotICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIHRteCArPSBuOwotICAgICAgICB9Ci0KLS8qCi0gIEF0IHRoaXMgcG9pbnQgdG14IGlz IHRoZSB0aW1lX3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFyZ3VtZW50IGRhdGUtdGltZQotICBz dHJpbmcgd2l0aG91dCBhbnkgdGltZXpvbmUgb3IgRFNUIGFkanVzdG1lbnRzLiAgVGhlcmVmb3Jl IGl0IHNob3VsZCBiZQotICB0aGUgc2FtZSBhcyB0aGUgdGltZV90IHJlcHJlc2VudGF0aW9uIG9m IHRoZSBHTVQvVVRDIHRpbWUuICBOb3cgd2Ugc2hvdWxkCi0gIGJlIGFibGUgdG8gZmVlZCBpdCB0 byBsb2NhbHRpbWUoKSBhbmQgaGF2ZSBpdCBjb252ZXJ0ZWQgdG8gYSBzdHJ1Y3QgdG0KLSAgcmVw cmVzZW50aW5nIHRoZSBsb2NhbCB0aW1lIGVxdWl2YWxlbnQgb2YgdGhlIGdpdmVuIFVUQyB0aW1l LgotKi8KLSAgICAgICAgdGltZV9zdGFtcCA9IGxvY2FsdGltZSgmdG14KTsKLSAgICAgICAgaWYg KCF0aW1lX3N0YW1wKQotICAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICB9Ci0KLS8qIE5vdyB3 ZSBzaW1wbHkgcmVmb3JtYXQgdGhlIHN0cnVjdCB0bSB0byBhIHN0cmluZyAqLwotCi0gICAgeCA9 IHRpbWVfc3RhbXAtPnRtX3llYXI7Ci0gICAgaWYgKHRpbWVfc3RhbXAtPnRtX3llYXIgPCA3MCB8 fCB0aW1lX3N0YW1wLT50bV95ZWFyID4gODA5OSkKLSAgICAgIHJldHVybihOVUxMKTsKLSAgICBp ZiAodGltZV9zdGFtcC0+dG1fbW9uIDwgMCB8fCB0aW1lX3N0YW1wLT50bV9tb24gPiAxMSkKLSAg ICAgIHJldHVybihOVUxMKTsKLSAgICBpZiAodGltZV9zdGFtcC0+dG1fbWRheSA8IDEgfHwgdGlt ZV9zdGFtcC0+dG1fbWRheSA+IDMxKQotICAgICAgcmV0dXJuKE5VTEwpOwotICAgIGlmICh0aW1l X3N0YW1wLT50bV9ob3VyIDwgMCB8fCB0aW1lX3N0YW1wLT50bV9ob3VyID4gMjQpCi0gICAgICBy ZXR1cm4oTlVMTCk7Ci0gICAgaWYgKHRpbWVfc3RhbXAtPnRtX21pbiA8IDAgfHwgdGltZV9zdGFt cC0+dG1fbWluID4gNjApCi0gICAgICByZXR1cm4oTlVMTCk7Ci0gICAgaWYgKHRpbWVfc3RhbXAt PnRtX3NlYyA8IDAgfHwgdGltZV9zdGFtcC0+dG1fc2VjID4gNjApCi0gICAgICByZXR1cm4oTlVM TCk7Ci0gICAgc3ByaW50Zih6bHRpbWJ1ZiwiJTA0ZCUwMmQlMDJkICUwMmQ6JTAyZDolMDJkIiwK LQkgICAgdGltZV9zdGFtcC0+dG1feWVhciArIDE5MDAsCi0JICAgIHRpbWVfc3RhbXAtPnRtX21v biArIDEsCi0JICAgIHRpbWVfc3RhbXAtPnRtX21kYXksCi0JICAgIHRpbWVfc3RhbXAtPnRtX2hv dXIsCi0JICAgIHRpbWVfc3RhbXAtPnRtX21pbiwKLQkgICAgdGltZV9zdGFtcC0+dG1fc2VjCi0J ICAgICk7Ci0gICAgcmV0dXJuKChjaGFyICopemx0aW1idWYpOwotfQotI2VuZGlmIC8qIFpMT0NB TFRJTUUgKi8KLSNlbmRpZiAvKiBOT1RJTUVTVEFNUCAqLwotCi0vKiBaIFMgVCBJIE0gRSAgLS0g IFNldCBtb2RpZmljYXRpb24gZGF0ZS90aW1lK3Blcm1pc3Npb25zIGZvciBpbmNvbWluZyBmaWxl ICovCi0vKgotIENhbGwgd2l0aDoKLSBmICA9IHBvaW50ZXIgdG8gbmFtZSBvZiBleGlzdGluZyBm aWxlLgotIHl5ID0gcG9pbnRlciB0byBhIEtlcm1pdCBmaWxlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUg aW4gd2hpY2ggeXktPmRhdGUudmFsCi0gICAgICBpcyBhIGRhdGUgb2YgdGhlIGZvcm0geXl5eW1t ZGQgaGg6bW06c3MsIGUuZy4gMTk5MDAyMDggMTM6MDA6MDAuCi0gICAgICB5eS0+bHByb3RlY3Qu dmFsICYgeXktPmdwcm90ZWN0LnZhbCBhcmUgcGVybWlzc2lvbi9wcm90ZWN0aW9uIHZhbHVlcy4K LSB4ICA9IGlzIGEgZnVuY3Rpb24gY29kZTogMCBtZWFucyB0byBzZXQgdGhlIGZpbGUncyBhdHRy aWJ1dGVzIGFzIGdpdmVuLgotICAgICAgMSBtZWFucyBjb21wYXJlIHRoZSBkYXRlIGluIHN0cnVj dCB5eSB3aXRoIHRoZSBmaWxlIGNyZWF0aW9uIGRhdGUuCi0gUmV0dXJuczoKLSAtMSBvbiBhbnkg a2luZCBvZiBlcnJvci4KLSAgMCBpZiB4IGlzIDAgYW5kIHRoZSBhdHRyaWJ1dGVzIHdlcmUgc2V0 IHN1Y2Nlc3NmdWxseS4KLSAgMCBpZiB4IGlzIDEgYW5kIGRhdGUgZnJvbSBhdHRyaWJ1dGUgc3Ry dWN0dXJlIDw9IGZpbGUgY3JlYXRpb24gZGF0ZS4KLSAgMSBpZiB4IGlzIDEgYW5kIGRhdGUgZnJv bSBhdHRyaWJ1dGUgc3RydWN0dXJlID4gZmlsZSBjcmVhdGlvbiBkYXRlLgotKi8KLWludAotenN0 aW1lKGYseXkseCkKLSAgICBjaGFyICpmOyBzdHJ1Y3QgemF0dHIgKnl5OyBpbnQgeDsKLS8qIHpz dGltZSAqLyB7Ci0gICAgaW50IHIgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0 dXJuIGNvZGUgKi8KLSNpZmRlZiBDS19QRVJNUwotICAgIGludCBzZXRwZXJtcyA9IDA7Ci0jZW5k aWYgLyogQ0tfUEVSTVMgKi8KLSAgICBpbnQgc2V0ZGF0ZSA9IDA7Ci0KLS8qIEl0IGlzIGlmZGVm J2QgVElNRVNUQU1QIGJlY2F1c2UgaXQgbWlnaHQgbm90IHdvcmsgb24gVjcuIGJrQGt1bGxtYXIu c2UuICAqLwotCi0jaWZkZWYgVElNRVNUQU1QCi0jaWZkZWYgQlNENDQKLSAgICBleHRlcm4gaW50 IHV0aW1lcygpOwotI2Vsc2UKLSAgICBleHRlcm4gaW50IHV0aW1lKCk7Ci0jZW5kaWYgLyogQlNE NDQgKi8KLQotICAgIHN0cnVjdCBzdGF0IHNiOwotCi0vKiBBdCBsZWFzdCwgdGhlIGRlY2xhcmF0 aW9ucyBmb3IgaW50IGZ1bmN0aW9ucyBhcmUgbm90IG5lZWRlZCBhbnl3YXkgKi8KLQotI2lmZGVm IEJTRDQ0Ci0gICAgc3RydWN0IHRpbWV2YWwgdHBbMl07Ci0gICAgbG9uZyB4dGltZXpvbmU7Ci0j ZWxzZQotI2lmZGVmIFY3Ci0gICAgc3RydWN0IHV0aW1idWYgewotCXRpbWVfdCB0aW1lcFsyXTsJ CS8qIE5ldyBhY2Nlc3MgYW5kIG1vZGlmaWNhdG9uIHRpbWUgKi8KLSAgICB9IHRwOwotICAgIGNo YXIgKnR6OwotICAgIGxvbmcgdGltZXpvbmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIEluIGNh c2Ugbm90IGRlZmluZWQgaW4gLmggZmlsZSAqLwotI2Vsc2UKLSNpZmRlZiBTWVNVVElNRUgKLSAg ICBzdHJ1Y3QgdXRpbWJ1ZiB0cDsKLSNlbHNlCi0gICAgc3RydWN0IHV0aW1idWYgewotICAgICAg ICB0aW1lX3QgYXRpbWU7Ci0gICAgICAgIHRpbWVfdCBtdGltZTsKLSAgICB9IHRwOwotI2VuZGlm IC8qIFNZU1VUSU1FSCAqLwotI2VuZGlmIC8qIFY3ICovCi0jZW5kaWYgLyogQlNENDQgKi8KLQot ICAgIGxvbmcgdG0gPSAwTDsKLQotICAgIGlmICghZikgZiA9ICIiOwotICAgIGlmICghKmYpIHJl dHVybigtMSk7Ci0gICAgaWYgKCF5eSkgcmV0dXJuKC0xKTsKLQotI2lmZGVmIENLUk9PVAotICAg IGRlYnVnKEYxMTEsInpzdGltZSBzZXRyb290Iixja3Jvb3QsY2tyb290c2V0KTsKLSAgICBpZiAo Y2tyb290c2V0KSBpZiAoIXppbnJvb3QoZikpIHsKLQlkZWJ1ZyhGMTEwLCJ6c3RpbWUgc2V0cm9v dCB2aW9sYXRpb24iLGYsMCk7Ci0JcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS1JPT1Qg Ki8KLQotICAgIGlmICh5eS0+ZGF0ZS5sZW4gPT0gMCkgeyAgICAgICAgICAgIC8qIE5vIGRhdGUg aW4gc3RydWN0ICovCi0gICAgICAgIGlmICh5eS0+bHByb3RlY3QubGVuICE9IDApIHsgICAgLyog U28gZ28gZG8gcGVybWlzc2lvbnMgKi8KLSAgICAgICAgICAgIGdvdG8genNwZXJtczsKLSAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsInpzdGltZTogbm90aGluZyB0byBk byIsIiIsMCk7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg aWYgKCh0bSA9IHpzdHJkdCh5eS0+ZGF0ZS52YWwseXktPmRhdGUubGVuKSkgPCAwKSB7Ci0gICAg ICAgIGRlYnVnKEYxMDEsInpzdGltZTogenN0cmR0IGZhaWxzIiwiIiwwKTsKLSAgICAgICAgcmV0 dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwienN0aW1lOiB0bSIsIiIsdG0pOwotICAg IGRlYnVnKEYxMTEsInpzdGltZTogQS1wa3QgZGF0ZSBvayAiLHl5LT5kYXRlLnZhbCx5eS0+ZGF0 ZS5sZW4pOwotCi0gICAgaWYgKHN0YXQoZiwmc2IpKSB7ICAgICAgICAgICAgICAgICAgLyogR2V0 IHRoZSB0aW1lIGZvciB0aGUgZmlsZSAqLwotCWRlYnVnKEYxMDEsIlNUQVQiLCIiLDE0KTsKLSAg ICAgICAgZGVidWcoRjExMSwienN0aW1lOiBDYW4ndCBzdGF0IGZpbGU6IixmLGVycm5vKTsKLSAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiU1RBVCIsIiIsMTUpOwot ICAgIHNldGRhdGUgPSAxOwotCi0gIHpzcGVybXM6Ci0jaWZkZWYgQ0tfUEVSTVMKLSAgICB7Ci0g ICAgICAgIGludCBpLCB4ID0gMCwgeHgsIGZsYWcgPSAwOwotICAgICAgICBjaGFyICogczsKLSNp ZmRlZiBERUJVRwotICAgICAgICBjaGFyIG9idWZbMjRdOwotICAgICAgICBpZiAoZGVibG9nKSB7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6c3RpbWUgbHBlcm1zIix5eS0+bHByb3RlY3QudmFs LHl5LT5scHJvdGVjdC5sZW4pOwotICAgICAgICAgICAgZGVidWcoRjExMSwienN0aW1lIGdwZXJt cyIseXktPmdwcm90ZWN0LnZhbCx5eS0+Z3Byb3RlY3QubGVuKTsKLSAgICAgICAgICAgIGRlYnVn KEYxMTAsInpzdGltZSBzeXN0ZW0gaWQiLHl5LT5zeXN0ZW1pZC52YWwsMCk7Ci0gICAgICAgICAg ICBzcHJpbnRmKG9idWYsIiVvIixzYi5zdF9tb2RlKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAs InpzdGltZSBmaWxlIHBlcm1zIGJlZm9yZSIsb2J1ZiwwKTsKLSAgICAgICAgfQotI2VuZGlmIC8q IERFQlVHICovCi0KLSNpZmRlZiBDS19MT0dJTgotICAgICAgICBkZWJ1ZyhGMTAxLCJ6c3RpbWUg aXNndWVzdCIsIiIsaXNndWVzdCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBja3hwZXJt cyIsIiIsY2t4cGVybXMpOwotICAgICAgICBpZiAoaXNndWVzdCkgewotI2lmZGVmIENPTU1FTlQK LSAgICAgICAgICAgIC8qIENsZWFyIG93bmVyIHBlcm1pc3Npb25zICovCi0gICAgICAgICAgICBz Yi5zdF9tb2RlICY9ICh1bnNpZ25lZCkgMDE3NzA3NzsgLyogKDE2IGJpdHMpICovCi0jZWxzZQot ICAgICAgICAgICAgLyogU2V0IHBlcm1pc3Npb25zIGZyb20gY2t4cGVybXMgdmFyaWFibGUgKi8K LSAgICAgICAgICAgIHNiLnN0X21vZGUgPSBja3hwZXJtczsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6c3RpbWUgaXNndWVzdCBzYi5zdF9tb2RlIiwiIixz Yi5zdF9tb2RlKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAvKiBXZSBhbHJlYWR5IHNl dCB0aGVtIGluIHpvcGVubygpICovCi0gICAgICAgICAgICBzZXRwZXJtcyA9IDE7Ci0jZW5kaWYg LyogQ09NTUVOVCAqLwotICAgICAgICAgICAgZmxhZyA9IDA7Ci0gICAgICAgIH0gZWxzZQotI2Vu ZGlmIC8qIENLX0xPR0lOICovCi0gICAgICAgICAgaWYgKCh5eS0+bHByb3RlY3QubGVuID4gMCAm JiAgLyogSGF2ZSBsb2NhbC1mb3JtYXQgcGVybWlzc2lvbnMgKi8KLSAgICAgICAgICAgIHl5LT5z eXN0ZW1pZC5sZW4gPiAwICYmICAgICAvKiBmcm9tIEEtcGFja2V0Li4uICovCi0jaWZkZWYgVU5J WAotICAgICAgICAgICAgIXN0cmNtcCh5eS0+c3lzdGVtaWQudmFsLCJVMSIpIC8qIEFORCB5b3Ug YXJlIHNhbWUgYXMgbWUgKi8KLSNlbHNlCi0gICAgICAgICAgICAwCi0jZW5kaWYgLyogVU5JWCAq LwotICAgICAgICAgICAgICkgfHwgKHl5LT5scHJvdGVjdC5sZW4gPCAwKSAvKiBPUiBieSBpbmhl cml0YW5jZSBmcm9tIG9sZCBmaWxlICovCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgIGZs YWcgPSAxOwotICAgICAgICAgICAgcyA9IHl5LT5scHJvdGVjdC52YWw7ICAgICAgIC8qIFVOSVgg ZmlsZW1vZGUgKi8KLSAgICAgICAgICAgIHh4ID0geXktPmxwcm90ZWN0LmxlbjsKLSAgICAgICAg ICAgIGlmICh4eCA8IDApICAgICAgICAgICAgICAgICAvKiBsZW4gPCAwIG1lYW5zIGluaGVyaXRh bmNlICovCi0gICAgICAgICAgICAgIHh4ID0gMCAtIHh4OwotICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IHh4OyBpKyspIHsgIC8qIERlY29kZSBvY3RhbCBzdHJpbmcgKi8KLSAgICAgICAgICAg ICAgICBpZiAoKnMgPD0gJzcnICYmICpzID49ICcwJykgewotICAgICAgICAgICAgICAgICAgICB4 ID0gOCAqIHggKyAoaW50KSgqcykgLSAnMCc7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICAgICAgZmxhZyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICB9Ci0j aWZkZWYgREVCVUcKLSAgICAgICAgICAgIHNwcmludGYob2J1ZiwiJW8iLHgpOwotICAgICAgICAg ICAgZGVidWcoRjExMCwienN0aW1lIG9jdGFsIGxwZXJtIixvYnVmLDApOwotI2VuZGlmIC8qIERF QlVHICovCi0gICAgICAgIH0gZWxzZSBpZiAoIWZsYWcgJiYgeXktPmdwcm90ZWN0LmxlbiA+IDAp IHsKLSAgICAgICAgICAgIGludCBnOwotI2lmZGVmIENLX1NDTzMyVjQKLSAgICAgICAgICAgIG1v ZGVfdCBtYXNrOwotI2Vsc2UKLSAgICAgICAgICAgIGludCBtYXNrOwotI2VuZGlmIC8qIENLX1ND TzMyVjQgKi8KLSAgICAgICAgICAgIG1hc2sgPSB1bWFzaygwKTsgICAgICAgICAgICAvKiBHZXQg dW1hc2sgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBtYXNrIDEiLCIiLG1hc2sp OwotICAgICAgICAgICAgdW1hc2sobWFzayk7ICAgICAgICAgICAgICAgIC8qIFB1dCBpdCBiYWNr ICovCi0gICAgICAgICAgICBtYXNrIF49IDA3Nzc7ICAgICAgICAgICAgICAgLyogRmxpcCB0aGUg Yml0cyAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwienN0aW1lIG1hc2sgMiIsIiIsbWFzayk7 Ci0gICAgICAgICAgICBnID0geHVuY2hhcigqKHl5LT5ncHJvdGVjdC52YWwpKTsgLyogRGVjb2Rl IGdlbmVyaWMgcHJvdGVjdGlvbiAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwienN0aW1lIGdw cm90ZWN0IiwiIixnKTsKLSNpZmRlZiBTX0lSVVNSCi0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6 c3RpbWUgU19JUlVTUiIsIiIsMCk7Ci0gICAgICAgICAgICBpZiAoZyAmIDEpIHggfD0gU19JUlVT UjsgICAgLyogUmVhZCBwZXJtaXNzaW9uICovCi0gICAgICAgICAgICBmbGFnID0gMTsKLSNlbmRp ZiAvKiBTX0lSVVNSICovCi0jaWZkZWYgU19JV1VTUgotICAgICAgICAgICAgZGVidWcoRjEwMCwi enN0aW1lIFNfSVdVU1IiLCIiLDApOwotICAgICAgICAgICAgaWYgKGcgJiAyKSB4IHw9IFNfSVdV U1I7ICAgIC8qIFdyaXRlIHBlcm1pc3Npb24gKi8KLSAgICAgICAgICAgIGlmIChnICYgMTYpIHgg fD0gU19JV1VTUjsgICAvKiBEZWxldGUgcGVybWlzc2lvbiAqLwotICAgICAgICAgICAgZmxhZyA9 IDE7Ci0jZW5kaWYgLyogU19JV1VTUiAqLwotI2lmZGVmIFNfSVhVU1IKLSAgICAgICAgICAgIGRl YnVnKEYxMDAsInpzdGltZSBTX0lYVVNSIiwiIiwwKTsKLSAgICAgICAgICAgIGlmIChnICYgNCkg ICAgICAgICAgICAgICAgICAvKiBIYXMgZXhlY3V0ZSBwZXJtaXNzaW9uIGJpdCAqLwotICAgICAg ICAgICAgICB4IHw9IFNfSVhVU1I7Ci0gICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAg ICAgICAgLyogRG9lc24ndCBoYXZlIGl0ICovCi0gICAgICAgICAgICAgIG1hc2sgJj0gMDY2Njsg ICAgICAgICAgICAgLyogc28gYWxzbyBjbGVhciBpdCBvdXQgb2YgbWFzayAqLwotICAgICAgICAg ICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogU19JWFVTUiAqLwotICAgICAgICAgICAgZGVidWcoRjEw MSwienN0aW1lIG1hc2sgeCIsIiIseCk7Ci0gICAgICAgICAgICB4IHw9IG1hc2s7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJ6c3RpbWUgbWFzayB4fG1hc2siLCIiLHgpOwotICAgICAgICB9Ci0g ICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBmbGFnIiwiIixmbGFnKTsKLSAgICAgICAgaWYgKGZs YWcpIHsKLSNpZmRlZiBTX0lGTVQKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBTX0lG TVQgeCIsIiIseCk7Ci0gICAgICAgICAgICBzYi5zdF9tb2RlID0gKHNiLnN0X21vZGUgJiBTX0lG TVQpIHwgeDsKLSAgICAgICAgICAgIHNldHBlcm1zID0gMTsKLSNlbHNlCi0jaWZkZWYgX0lGTVQK LSAgICAgICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBfSUZNVCB4IiwiIix4KTsKLSAgICAgICAg ICAgIHNiLnN0X21vZGUgPSAoc2Iuc3RfbW9kZSAmIF9JRk1UKSB8IHg7Ci0gICAgICAgICAgICBz ZXRwZXJtcyA9IDE7Ci0jZW5kaWYgLyogX0lGTVQgKi8KLSNlbmRpZiAvKiBTX0lGTVQgKi8KLSAg ICAgICAgfQotI2lmZGVmIERFQlVHCi0gICAgICAgIHNwcmludGYob2J1ZiwiJTA0byIsc2Iuc3Rf bW9kZSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsInpzdGltZSBmaWxlIHBlcm1zIGFmdGVyIixvYnVm LHNldHBlcm1zKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIH0KLSNlbmRpZiAvKiBDS19QRVJN UyAqLwotCi0gICAgZGVidWcoRjEwMSwienN0aW1lOiBzYi5zdF9hdGltZSIsIiIsc2Iuc3RfYXRp bWUpOwotCi0jaWZkZWYgQlNENDQKLSAgICB0cFswXS50dl9zZWMgPSBzYi5zdF9hdGltZTsgICAg ICAgICAvKiBBY2Nlc3MgdGltZSBmaXJzdCAqLwotICAgIHRwWzFdLnR2X3NlYyA9IHRtOyAgICAg ICAgICAgICAgICAgIC8qIFVwZGF0ZSB0aW1lIHNlY29uZCAqLwotICAgIGRlYnVnKEYxMDAsInpz dGltZTogQlNENDQgbW9kdGltZSIsIiIsMCk7Ci0jZWxzZQotI2lmZGVmIFY3Ci0gICAgdHAudGlt ZXBbMF0gPSB0bTsgICAgICAgICAgICAgICAgICAgLyogU2V0IG1vZGlmLiB0aW1lIHRvIGNyZWF0 aW9uIGRhdGUgKi8KLSAgICB0cC50aW1lcFsxXSA9IHNiLnN0X2F0aW1lOyAgICAgICAgICAvKiBE b24ndCBjaGFuZ2UgdGhlIGFjY2VzcyB0aW1lICovCi0gICAgZGVidWcoRjEwMCwienN0aW1lOiBW NyBtb2R0aW1lIiwiIiwwKTsKLSNlbHNlCi0jaWZkZWYgU1lTVVRJTUVICi0gICAgdHAubW9kdGlt ZSA9IHRtOyAgICAgICAgICAgICAgICAgICAgLyogU2V0IG1vZGlmLiB0aW1lIHRvIGNyZWF0aW9u IGRhdGUgKi8KLSAgICB0cC5hY3RpbWUgPSBzYi5zdF9hdGltZTsgICAgICAgICAgICAvKiBEb24n dCBjaGFuZ2UgdGhlIGFjY2VzcyB0aW1lICovCi0gICAgZGVidWcoRjEwMCwienN0aW1lOiBTWVNV VElNRUggbW9kdGltZSIsIiIsMCk7Ci0jZWxzZQotICAgIHRwLm10aW1lID0gdG07ICAgICAgICAg ICAgICAgICAgICAgIC8qIFNldCBtb2RpZi4gdGltZSB0byBjcmVhdGlvbiBkYXRlICovCi0gICAg dHAuYXRpbWUgPSBzYi5zdF9hdGltZTsgICAgICAgICAgICAgLyogRG9uJ3QgY2hhbmdlIHRoZSBh Y2Nlc3MgdGltZSAqLwotICAgIGRlYnVnKEYxMDAsInpzdGltZTogZGVmYXVsdCBtb2R0aW1lIiwi IiwwKTsKLSNlbmRpZiAvKiBTWVNVVElNRUggKi8KLSNlbmRpZiAvKiBWNyAqLwotI2VuZGlmIC8q IEJTRDQ0ICovCi0KLSAgICBzd2l0Y2ggKHgpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBF eGVjdXRlIGRlc2lyZWQgZnVuY3Rpb24gKi8KLSAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTZXQgdGhlIGNyZWF0aW9uIGRhdGUgb2YgdGhlIGZpbGUgKi8KLSNpZmRl ZiBDS19QRVJNUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbmQgcGVybWlzc2lvbnMgKi8K LS8qCi0gIE5PVEU6IElmIHdlIGFyZSBpbmhlcml0aW5nIHBlcm1pc3Npb25zIGZyb20gYSBwcmV2 aW91cyBmaWxlLCBhbmQgdGhlCi0gIHByZXZpb3VzIGZpbGUgd2FzIGEgZGlyZWN0b3J5LCB0aGlz IHdvdWxkIHR1cm4gdGhlIG5ldyBmaWxlIGludG8gYSBkaXJlY3RvcnkKLSAgdG9vLCBidXQgaXQn cyBub3QsIHNvIHdlIHRyeSB0byB1bnNldCB0aGUgcmlnaHQgYml0LiAgTHVja2lseSwgdGhpcyBj b2RlCi0gIHdpbGwgcHJvYmFibHkgbmV2ZXIgYmUgZXhlY3V0ZWQgc2luY2UgdGhlIHVwcGVyIGxl dmVsIG1vZHVsZXMgZG8gbm90IGFsbG93Ci0gIHJlY2VwdGlvbiBvZiBhIGZpbGUgdGhhdCBoYXMg dGhlIHNhbWUgbmFtZSBhcyBhIGRpcmVjdG9yeS4KLQotICBOT1RFIDI6IFdlIGNoYW5nZSB0aGUg cGVybWlzc2lvbnMgKmJlZm9yZSogd2UgY2hhbmdlIHRoZSBtb2RpZmljYXRpb24gdGltZSwKLSAg b3RoZXJ3aXNlIGNoYW5naW5nIHRoZSBwZXJtaXNzaW9ucyB3b3VsZCBzZXQgdGhlIG1vZCB0aW1l IHRvIHRoZSBwcmVzZW50Ci0gIHRpbWUuCi0qLwotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQg eDsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBzZXRwZXJtcyIsIiIsc2V0cGVybXMp OwotICAgICAgICAgICAgaWYgKFNfSVNESVIoc2Iuc3RfbW9kZSkpIHsKLSAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJ6c3RpbWUgRElSRUNUT1JZIGJpdCBvbiIsIiIsc2Iuc3RfbW9kZSk7Ci0g ICAgICAgICAgICAgICAgc2Iuc3RfbW9kZSBePSAwMDQwMDAwOwotICAgICAgICAgICAgICAgIGRl YnVnKEYxMDEsInpzdGltZSBESVJFQ1RPUlkgYml0IG9mZiIsIiIsc2Iuc3RfbW9kZSk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2V0cGVybXMpIHsKLSAgICAgICAgICAgICAgICB4 ID0gY2htb2QoZixzYi5zdF9tb2RlKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6c3Rp bWUgY2htb2QiLCIiLHgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICh4 IDwgMCkgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBDS19QRVJNUyAqLwotCi0gICAgICAgIGlmICgh c2V0ZGF0ZSkgICAgICAgICAgICAgICAgICAgLyogV2UgZG9uJ3QgaGF2ZSBhIGRhdGUgKi8KLSAg ICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAvKiBzbyBza2lwIHRoZSBmb2xs b3dpbmcuLi4gKi8KLQotICAgICAgICBpZiAoCi0jaWZkZWYgQlNENDQKLSAgICAgICAgICAgIHV0 aW1lcyhmLHRwKQotI2Vsc2UKLSAgICAgICAgICAgIHV0aW1lKGYsJnRwKQotI2VuZGlmIC8qIEJT RDQ0ICovCi0gICAgICAgICAgICApIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRml4IG1v ZGlmaWNhdGlvbiB0aW1lICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6c3RpbWUgMDogY2Fu J3Qgc2V0IG1vZHRpbWUgZm9yIGZpbGUiLGYsZXJybm8pOwotICAgICAgICAgICAgciA9IC0xOwot ICAgICAgICB9IGVsc2UgIHsKLQkgICAgLyogSW5jbHVkaW5nIHRoZSBtb2R0aW1lIGhlcmUgaXMg bm90IHBvcnRhYmxlICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6c3RpbWUgMDogbW9kdGlt ZSBzZXQgZm9yIGZpbGUiLGYsMCk7Ci0gICAgICAgICAgICByID0gMDsKLSAgICAgICAgfQotICAg ICAgICBicmVhazsKLQotICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IENvbXBhcmUgdGhlIGRhdGVzICovCi0vKgotICBUaGlzIHdhcyBzdF9hdGltZSwgd2hpY2ggd2Fz IHdyb25nLiAgV2Ugd2FudCB0aGUgZmlsZS1kYXRhIG1vZGlmaWNhdGlvbgotICB0aW1lLCBzdF9t dGltZS4KLSovCi0gICAgICAgIGRlYnVnKEYxMTEsInpzdGltZSAxOiBjb21wYXJlIixmLHNiLnN0 X210aW1lKTsKLSAgICAgICAgZGVidWcoRjExMSwienN0aW1lIDE6IGNvbXBhcmUiLCJwYWNrZXQi LHRtKTsKLQotICAgICAgICByID0gKHNiLnN0X210aW1lIDwgdG0pID8gMCA6IDE7Ci0gICAgICAg IGJyZWFrOwotCi0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXJy b3IgKi8KLSAgICAgICAgciA9IC0xOwotICAgIH0KLSNlbmRpZiAvKiBUSU1FU1RBTVAgKi8KLSAg ICByZXR1cm4ocik7Ci19Ci0KLS8qIEZpbmQgaW5pdGlhbGl6YXRpb24gZmlsZS4gKi8KLQotI2lm ZGVmIE5PVFVTRUQKLWludAotemtlcm1pbmkoKSB7Ci0vKiAgbm90aGluZyBoZXJlIGZvciBVbml4 LiAgVGhpcyBmdW5jdGlvbiBhZGRlZCBmb3IgYmVuZWZpdCBvZiBWTVMgS2VybWl0LiAgKi8KLSAg ICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogTk9UVVNFRCAqLwotCi0jaWZuZGVmIFVOSVgKLS8q IEhpc3RvcmljYWwgLS0gbm90IHVzZWQgaW4gVW5peCBhbnkgbW9yZSAoMjAwMS0xMS0wMykgKi8K LSNpZm5kZWYgTk9GUklMTFMKLWludAotem1haWwocCxmKSBjaGFyICpwOyBjaGFyICpmOyB7ICAg ICAgICAgIC8qIFNlbmQgZmlsZSBmIGFzIG1haWwgdG8gYWRkcmVzcyBwICovCi0vKgotICBSZXR1 cm5zIDAgb24gc3VjY2VzcwotICAgMiBpZiBtYWlsIGRlbGl2ZXJlZCBidXQgdGVtcCBmaWxlIGNh bid0IGJlIGRlbGV0ZWQKLSAgLTIgaWYgbWFpbCBjYW4ndCBiZSBkZWxpdmVyZWQKLSAgLTEgb24g ZmlsZSBhY2Nlc3MgZXJyb3IKLSAgVGhlIFVOSVggdmVyc2lvbiBhbHdheXMgcmV0dXJucyAwIGJl Y2F1c2UgaXQgY2FuJ3QgZ2V0IGEgZ29vZCByZXR1cm4KLSAgY29kZSBmcm9tIHpzeXNjbWQuCi0q LwotICAgIGludCBuOwotCi0jaWZkZWYgQ0tfTE9HSU4KLSAgICBpZiAoaXNndWVzdCkKLSAgICAg IHJldHVybigtMik7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotICAgIGlmICghZikgZiA9ICIi OwotICAgIGlmICghKmYpIHJldHVybigtMSk7Ci0KLSNpZmRlZiBDS1JPT1QKLSAgICBkZWJ1ZyhG MTExLCJ6bWFpbCBzZXRyb290Iixja3Jvb3QsY2tyb290c2V0KTsKLSAgICBpZiAoY2tyb290c2V0 KSBpZiAoIXppbnJvb3QoZikpIHsKLQlkZWJ1ZyhGMTEwLCJ6bWFpbCBzZXRyb290IHZpb2xhdGlv biIsZiwwKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotI2lm ZGVmIEJTRDQKLS8qIFRoZSBpZGVhIGlzIHRvIHVzZSAvdXNyL3VjYi9tYWlsLCByYXRoZXIgdGhh biByZWd1bGFyIG1haWwsIHNvIHRoYXQgICAqLwotLyogYSBzdWJqZWN0IGxpbmUgY2FuIGJlIGlu Y2x1ZGVkIHdpdGggLXMuICBTaW5jZSB3ZSBjYW4ndCBkZXBlbmQgb24gdGhlICovCi0vKiB1c2Vy J3MgcGF0aCwgd2UgdXNlIHRoZSBjb252ZW50aW9uIHRoYXQgL3Vzci91Y2IvTWFpbCA9IC91c3Iv dWNiL21haWwgKi8KLS8qIGFuZCBldmVuIGlmIE1haWwgaGFzIGJlZW4gbW92ZWQgdG8gc29tZXdo ZXJlIGVsc2UsIHRoaXMgc2hvdWxkIHN0aWxsICAqLwotLyogZmluZCBpdC4uLiAgVGhlIHNlYXJj aCBjb3VsZCBiZSBtYWRlIG1vcmUgcmVsaWFibGUgYnkgYWN0dWFsbHkgdXNpbmcgICovCi0vKiBh Y2Nlc3MoKSB0byBzZWUgaWYgL3Vzci91Y2IvTWFpbCBleGlzdHMuICovCi0KLSAgICBuID0gc3Ry bGVuKGYpOwotICAgIG4gPSBuICsgbiArIDE1ICsgKGludClzdHJsZW4ocCk7Ci0KLSAgICBpZiAo biA+IFpNQlVGTEVOKQotICAgICAgcmV0dXJuKC0yKTsKLQotI2lmZGVmIERHVVg1NDAKLSAgICBz cHJpbnRmKHptYnVmLCJtYWlseCAtcyAlYyVzJWMgJXMgPCAlcyIsICciJywgZiwgJyInLCBwLCBm KTsKLSNlbHNlCi0gICAgc3ByaW50Zih6bWJ1ZiwiTWFpbCAtcyAlYyVzJWMgJXMgPCAlcyIsICci JywgZiwgJyInLCBwLCBmKTsKLSNlbmRpZiAvKiBER1VYNTQwICovCi0gICAgenN5c2NtZCh6bWJ1 Zik7Ci0jZWxzZQotI2lmZGVmIFNWT1JQT1NJWAotI2lmbmRlZiBPWE9TCi0gICAgc3ByaW50Zih6 bWJ1ZiwibWFpbCAlcyA8ICVzIiwgcCwgZik7Ci0jZWxzZSAvKiBPWE9TICovCi0gICAgc3ByaW50 Zih6bWJ1ZiwibWFpbHggLXMgJWMlcyVjICVzIDwgJXMiLCAnIicsIGYsICciJywgcCwgZik7Ci0j ZW5kaWYgLyogT1hPUyAqLwotICAgIHpzeXNjbWQoem1idWYpOwotI2Vsc2UKLSAgICAqem1idWYg PSAnXDAnOwotI2VuZGlmCi0jZW5kaWYKLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogTk9G UklMTFMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZm5kZWYgTk9GUklMTFMKLWludAotenBy aW50KHAsZikgY2hhciAqcDsgY2hhciAqZjsgeyAgICAgICAgIC8qIFByaW50IGZpbGUgZiB3aXRo IG9wdGlvbnMgcCAqLwotICAgIGV4dGVybiBjaGFyICogcHJpbnRlcm5hbWU7ICAgICAgICAgIC8q IEZyb20gY2t1dXMzLmMgKi8KLSAgICBleHRlcm4gaW50IHByaW50cGlwZTsKLSAgICBpbnQgbjsK LQotI2lmZGVmIENLX0xPR0lOCi0gICAgaWYgKGlzZ3Vlc3QpCi0gICAgICByZXR1cm4oLTIpOwot I2VuZGlmIC8qIENLX0xPR0lOICovCi0KLSAgICBpZiAoIWYpIGYgPSAiIjsKLSAgICBpZiAoISpm KSByZXR1cm4oLTEpOwotCi0jaWZkZWYgQ0tST09UCi0gICAgZGVidWcoRjExMSwienByaW50IHNl dHJvb3QiLGNrcm9vdCxja3Jvb3RzZXQpOwotICAgIGlmIChja3Jvb3RzZXQpIGlmICghemlucm9v dChmKSkgewotCWRlYnVnKEYxMTAsInpwcmludCBzZXRyb290IHZpb2xhdGlvbiIsZiwwKTsKLQly ZXR1cm4oLTEpOwotICAgIH0KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotICAgIGRlYnVnKEYxMTAs InpwcmludCBmaWxlIixmLDApOwotICAgIGRlYnVnKEYxMTAsInpwcmludCBmbGFncyIscCwwKTsK LSAgICBkZWJ1ZyhGMTEwLCJ6cHJpbnQgcHJpbnRlcm5hbWUiLHByaW50ZXJuYW1lLDApOwotICAg IGRlYnVnKEYxMDEsInpwcmludCBwcmludHBpcGUiLCIiLHByaW50cGlwZSk7Ci0KLSNpZmRlZiBV TklYCi0vKgotICBOb3RlIHVzZSBvZiBzdGFuZGFyZCBpbnB1dCByZWRpcmVjdGlvbi4gIEluIHNv bWUgc3lzdGVtcywgbHBbcl0gcnVucwotICBzZXR1aWQgdG8gbHAgKG9yIC4uLj8pLCBzbyBpZiB1 c2VyIGhhcyBzZW50IGEgZmlsZSBpbnRvIGEgZGlyZWN0b3J5Ci0gIHRoYXQgbHAgZG9lcyBub3Qg aGF2ZSByZWFkIGFjY2VzcyB0bywgaXQgY2FuJ3QgYmUgcHJpbnRlZCB1bmxlc3MgaXQgaXMKLSAg ZmVkIHRvIGxwW3JdIGFzIHN0YW5kYXJkIGlucHV0LgotKi8KLSAgICBpZiAocHJpbnRwaXBlICYm IHByaW50ZXJuYW1lKSB7Ci0JbiA9IDggKyAoaW50KXN0cmxlbihmKSArIChpbnQpc3RybGVuKHBy aW50ZXJuYW1lKTsKLQlpZiAobiA+IFpNQlVGTEVOKQotCSAgcmV0dXJuKC0yKTsKLSAgICAgICAg c3ByaW50Zih6bWJ1ZiwiY2F0ICVzIHwgJXMiLCBmLCBwcmludGVybmFtZSk7Ci0gICAgfSBlbHNl IGlmIChwcmludGVybmFtZSkgewotCW4gPSA4ICsgKGludClzdHJsZW4oZikgKyAoaW50KXN0cmxl bihwcmludGVybmFtZSk7Ci0JaWYgKG4gPiBaTUJVRkxFTikKLQkgIHJldHVybigtMik7Ci0gICAg ICAgIHNwcmludGYoem1idWYsImNhdCAlcyA+PiAlcyIsIGYsIHByaW50ZXJuYW1lKTsKLSAgICB9 IGVsc2UgewotCW4gPSA0ICsgKGludClzdHJsZW4oUFJJTlRDTUQpICsgKGludClzdHJsZW4ocCkg KyAoaW50KXN0cmxlbihmKTsKLQlpZiAobiA+IFpNQlVGTEVOKQotCSAgcmV0dXJuKC0yKTsKLSAg ICAgICAgc3ByaW50Zih6bWJ1ZiwiJXMgJXMgPCAlcyIsIFBSSU5UQ01ELCBwLCBmKTsKLSAgICB9 Ci0gICAgZGVidWcoRjExMCwienByaW50IGNvbW1hbmQiLHptYnVmLDApOwotICAgIHpzeXNjbWQo em1idWYpOwotI2Vsc2UgLyogTm90IFVOSVggKi8KLSAgICAqem1idWYgPSAnXDAnOwotI2VuZGlm IC8qIFVOSVggKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQot LyogIFdpbGRjYXJkIGV4cGFuc2lvbiBmdW5jdGlvbnMuLi4gICovCi0KLXN0YXRpYyBjaGFyIHNj cmF0Y2hbTUFYUEFUSCs0XTsgICAgICAgICAvKiBVc2VkIGJ5IGJvdGggbWV0aG9kcyAqLwotCi1z dGF0aWMgaW50IG9sZG10Y2hzID0gMDsgICAgICAgICAgICAgICAgLyogTGV0IHNoZWxsIChscykg ZXhwYW5kIHRoZW0uICovCi0jaWZkZWYgQ09NTUVOVAotc3RhdGljIGNoYXIgKmxzY21kID0gIi9i aW4vbHMgLWQiOyAgICAgIC8qIENvbW1hbmQgdG8gdXNlLiAqLwotI2Vsc2UKLXN0YXRpYyBjaGFy ICpsc2NtZCA9ICJlY2hvIjsgICAgICAgICAgICAvKiBDb21tYW5kIHRvIHVzZS4gKi8KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0KLSNpZm5kZWYgTk9QVVNICi1pbnQKLXNoeHBhbmQocGF0LG5hbWxz dCxsZW4pIGNoYXIgKnBhdCwgKm5hbWxzdFtdOyBpbnQgbGVuOyB7Ci0gICAgY2hhciAqZmdidWYg PSBOVUxMOyAgICAgICAgICAgICAgICAgLyogQnVmZmVyIGZvciBmb3JtaW5nIGxzIGNvbW1hbmQg Ki8KLSAgICBjaGFyICpwLCAqcTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXJzICov Ci0KLSAgICBpbnQgaSwgeCwgcmV0Y29kZSwgaXRzYWRpcjsKLSAgICBjaGFyIGM7Ci0KLSAgICB4 ID0gKGludClzdHJsZW4ocGF0KSArIChpbnQpc3RybGVuKGxzY21kKSArIDM7IC8qIExlbmd0aCBv ZiBscyBjb21tYW5kICovCi0gICAgZm9yIChpID0gMDsgaSA8IG9sZG10Y2hzOyBpKyspIHsgICAg LyogRnJlZSBwcmV2aW91cyBmaWxlIGxpc3QgKi8KLSAgICAgICAgaWYgKG5hbWxzdFtpXSApIHsg ICAgICAgICAgICAgICAvKiBJZiBtZW1vcnkgaXMgYWxsb2NhdGVkICAqLwotICAgICAgICAgICAg ZnJlZShuYW1sc3RbaV0pOyAgICAgICAgICAgIC8qIEZyZWUgdGhlIG1lbW9yeSAgICAgICAgICov Ci0gICAgICAgICAgICBuYW1sc3RbaV0gPSBOVUxMIDsgICAgICAgICAgLyogUmVtZW1iZXIgbm8g bWVtb3J5IGlzIGFsbG9jYXRlZCAqLwotICAgICAgICB9Ci0gICAgfQotICAgIG9sZG10Y2hzID0g MCA7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZXJlIGFyZSBubyBtYXRjaGVz ICovCi0gICAgZmdidWYgPSBtYWxsb2MoeCk7ICAgICAgICAgICAgICAgICAgLyogR2V0IGJ1ZmZl ciBmb3IgY29tbWFuZCAqLwotICAgIGlmICghZmdidWYpIHJldHVybigtMSk7ICAgICAgICAgICAg IC8qIEZhaWwgaWYgY2Fubm90ICovCi0gICAgY2ttYWttc2coZmdidWYseCxsc2NtZCwiICIscGF0 LE5VTEwpOyAvKiBGb3JtIHRoZSBjb21tYW5kICovCi0gICAgenhjbWQoWklGSUxFLGZnYnVmKTsg ICAgICAgICAgICAgICAgLyogU3RhcnQgdGhlIGNvbW1hbmQgKi8KLSAgICBpID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGNvdW50ZXIgKi8KLSAgICBwID0gc2NyYXRj aDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBzY3JhdGNoIGFyZWEgKi8KLSAg ICByZXRjb2RlID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgZmFpbHVyZSAq LwotICAgIHdoaWxlICgoeCA9IHptaW5jaGFyKCkpICE9IC0xKSB7ICAgIC8qIFJlYWQgY2hhcmFj dGVycyBmcm9tIGNvbW1hbmQgKi8KLSAgICAgICAgYyA9IChjaGFyKSB4OwotICAgICAgICBpZiAo YyA9PSAnICcgfHwgYyA9PSAnXG4nKSB7ICAgIC8qIEdvdCBuZXdsaW5lIG9yIHNwYWNlPyAqLwot ICAgICAgICAgICAgKnAgPSAnXDAnOyAgICAgICAgICAgICAgICAgIC8qIFllcywgdGVybWluYXRl IHN0cmluZyAqLwotICAgICAgICAgICAgcCA9IHNjcmF0Y2g7ICAgICAgICAgICAgICAgIC8qIFBv aW50IGJhY2sgdG8gYmVnaW5uaW5nICovCi0gICAgICAgICAgICBpZiAoemNoa2kocCkgPT0gLTEp ICAgICAgICAgLyogRG9lcyBmaWxlIGV4aXN0PyAqLwotICAgICAgICAgICAgICBjb250aW51ZTsg ICAgICAgICAgICAgICAgIC8qIE5vLCBjb250aW51ZSAqLwotICAgICAgICAgICAgaXRzYWRpciA9 IGlzZGlyKHApOyAgICAgICAgIC8qIFllcywgaXMgaXQgYSBkaXJlY3Rvcnk/ICovCi0gICAgICAg ICAgICBpZiAoeGRpcm9ubHkgJiYgIWl0c2FkaXIpICAgLyogV2FudCBvbmx5IGRpcnMgYnV0IHRo aXMgaXNuJ3QgKi8KLSAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAvKiBz byBza2lwLiAqLwotICAgICAgICAgICAgaWYgKHhmaWxvbmx5ICYmIGl0c2FkaXIpICAgIC8qIEl0 J3MgYSBkaXIgYnV0IHdhbnQgb25seSBmaWxlcyAqLwotICAgICAgICAgICAgICBjb250aW51ZTsg ICAgICAgICAgICAgICAgIC8qIHNvIHNraXAuICovCi0gICAgICAgICAgICB4ID0gKGludClzdHJs ZW4ocCk7ICAgICAgICAgLyogS2VlcCAtIGdldCBsZW5ndGggb2YgbmFtZSAqLwotICAgICAgICAg ICAgcSA9IG1hbGxvYyh4KzEpOyAgICAgICAgICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBpdCAq LwotICAgICAgICAgICAgaWYgKCFxKSBnb3RvIHNoeGZpbjsgICAgICAgIC8qIEZhaWwgaWYgc3Bh Y2UgY2FuJ3QgYmUgb2J0YWluZWQgKi8KLSAgICAgICAgICAgIHN0cmNweShxLHNjcmF0Y2gpOyAg ICAgICAgICAvKiAoc2FmZSkgQ29weSBuYW1lIHRvIHNwYWNlICovCi0gICAgICAgICAgICBuYW1s c3RbaSsrXSA9IHE7ICAgICAgICAgICAgLyogQ29weSBwb2ludGVyIHRvIG5hbWUgaW50byBhcnJh eSAqLwotICAgICAgICAgICAgaWYgKGkgPj0gbGVuKSBnb3RvIHNoeGZpbjsgIC8qIEZhaWwgaWYg dG9vIG1hbnkgKi8KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZWd1bGFyIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgKnArKyA9IGM7ICAgICAgICAgICAgICAg ICAgIC8qIENvcHkgaXQgaW50byBzY3JhdGNoIGFyZWEgKi8KLSAgICAgICAgfQotICAgIH0KLSAg ICByZXRjb2RlID0gaTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gbnVtYmVyIG9m IG1hdGNoaW5nIGZpbGVzICovCi1zaHhmaW46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ29tbW9uIGV4aXQgcG9pbnQgKi8KLSAgICBmcmVlKGZnYnVmKTsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBGcmVlIGNvbW1hbmQgYnVmZmVyICovCi0gICAgZmdidWYgPSBOVUxMOwot ICAgIHpjbG9zZihaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIERlbGV0ZSB0aGUgY29t bWFuZCBmb3JrLiAqLwotICAgIG9sZG10Y2hzID0gaTsgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlbWVtYmVyIGhvdyBtYW55IGZpbGVzICovCi0gICAgcmV0dXJuKHJldGNvZGUpOwotfQotI2Vu ZGlmIC8qIE5PUFVTSCAqLwotCi0vKgotICBEaXJlY3RvcnktcmVhZGluZyBmdW5jdGlvbnMgZm9y IFVOSVggb3JpZ2luYWxseSB3cml0dGVuIGZvciBDLUtlcm1pdCA0LjAKLSAgYnkgSmVmZiBEYW1l bnMsIENVQ0NBLCAxOTg0LgotKi8KLXN0YXRpYyBjaGFyICogeHBhdCA9IE5VTEw7ICAgICAgICAg ICAgICAvKiBHbG9iYWwgY29weSBvZiBmZ2VuKCkgcGF0dGVybiAqLwotc3RhdGljIGNoYXIgKiB4 cGF0bGFzdCA9IE5VTEw7ICAgICAgICAgIC8qIFJpZ2h0bW9zdCBzZWdtZW50IG9mIHBhdHRlcm4q Lwotc3RhdGljIGludCB4cGF0c2xhc2ggPSAwOyAgICAgICAgICAgICAgIC8qIFNsYXNoIGNvdW50 IGluIHBhdHRlcm4gKi8KLXN0YXRpYyBpbnQgeHBhdHdpbGQgPSAwOyAgICAgICAgICAgICAgICAv KiBPcmlnaW5hbCBwYXR0ZXJuIGlzIHdpbGQgKi8KLXN0YXRpYyBpbnQgeGxlYWZ3aWxkID0gMDsg ICAgICAgICAgICAgICAvKiBMYXN0IHNlZ21lbnQgb2YgcGF0dGVybiBpcyB3aWxkICovCi1zdGF0 aWMgaW50IHhwYXRhYnNvbHV0ZSA9IDA7Ci0KLSNpZmRlZiBhZWdpcwotc3RhdGljIGNoYXIgYnNs YXNoOwotI2VuZGlmIC8qIGFlZ2lzICovCi0KLQotLyogIFMgUCBMIEkgVCBQIEEgVCBIICAqLwot Ci0vKgotICBTcGxpdHMgdGhlIHNsYXNoLXNlcGFyYXRlZCBwb3J0aW9ucyBvZiB0aGUgYXJndW1l bnQgc3RyaW5nIGludG8KLSAgYSBsaXN0IG9mIHBhdGggc3RydWN0dXJlcy4gIFJldHVybnMgdGhl IGhlYWQgb2YgdGhlIGxpc3QuICBUaGUKLSAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGJ5IG1h bGxvYywgc28gdGhleSBtdXN0IGJlIGZyZWVkLgotICBTcGxpdHBhdGggaXMgdXNlZCBpbnRlcm5h bGx5IGJ5IHRoZSBmaWxlbmFtZSBnZW5lcmF0b3IuCi0KLSAgSW5wdXQ6Ci0gICAgQSBwYXRoIHN0 cmluZy4KLQotICBSZXR1cm5zOgotICAgIEEgbGlua2VkIGxpc3Qgb2YgdGhlIHNsYXNoLXNlcGFy YXRlZCBzZWdtZW50cyBvZiB0aGUgaW5wdXQuCi0qLwotc3RhdGljIHN0cnVjdCBwYXRoICoKLXNw bGl0cGF0aChwKSBjaGFyICpwOyB7Ci0gICAgc3RydWN0IHBhdGggKmhlYWQsKmN1ciwqcHJ2Owot ICAgIGludCBpOwotCi0gICAgZGVidWcoRjExMSwic3BsaXRwYXRoIixwLHhyZWN1cnNpdmUpOwot ICAgIGhlYWQgPSBwcnYgPSBOVUxMOwotCi0gICAgaWYgKCFwKSByZXR1cm4oTlVMTCk7Ci0gICAg aWYgKCEqcCkgcmV0dXJuKE5VTEwpOwotCi0gICAgaWYgKCFzdHJjbXAocCwiKioiKSkgeyAgICAg ICAgICAgICAgLyogRml4IHRoaXMgKi8KLSAgICAgICAgcCA9ICIqIjsKLSAgICB9Ci0gICAgaWYg KElTRElSU0VQKCpwKSkgcCsrOyAgICAgICAgICAgICAgLyogU2tpcCBsZWFkaW5nIHNsYXNoIGlm IGFueSAqLwotCi0gICAgLyogTWFrZSBsaW5rZWQgbGlzdCBvZiBwYXRoIHNlZ21lbnRzIGZyb20g cGF0dGVybiAqLwotCi0gICAgd2hpbGUgKCpwKSB7Ci0gICAgICAgIGN1ciA9IChzdHJ1Y3QgcGF0 aCAqKSBtYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgcGF0aCkpOwotICAgICAgICAvKiBkZWJ1ZyhGMTAx LCJzcGxpdHBhdGggbWFsbG9jIiwiIixjdXIpOyAqLwotICAgICAgICBpZiAoY3VyID09IE5VTEwp IHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsInNwbGl0cGF0aCBtYWxsb2MgZmFpbHVyZSIsIiIs MCk7Ci0gICAgICAgICAgICBwcnYgLT4gZndkID0gTlVMTDsKLSAgICAgICAgICAgIHJldHVybigo c3RydWN0IHBhdGggKilOVUxMKTsKLSAgICAgICAgfQotICAgICAgICBjdXIgLT4gZndkID0gTlVM TDsKLSAgICAgICAgaWYgKGhlYWQgPT0gTlVMTCkgICAgICAgICAgICAgICAvKiBGaXJzdCwgbWFr ZSBsaXN0IGhlYWQgKi8KLSAgICAgICAgICBoZWFkID0gY3VyOwotICAgICAgICBlbHNlICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBmaXJzdCwgbGluayBpbnRvIGNoYWluICovCi0g ICAgICAgICAgcHJ2IC0+IGZ3ZCA9IGN1cjsKLSAgICAgICAgcHJ2ID0gY3VyOyAgICAgICAgICAg ICAgICAgICAgICAvKiBMaW5rIGZyb20gcHJldmlvdXMgdG8gdGhpcyBvbmUgKi8KLQotI2lmZGVm IGFlZ2lzCi0gICAgICAgIC8qIHRyZWF0IGJhY2tzbGFzaCBhcyAiLi4vIiAqLwotICAgICAgICBp ZiAoYnNsYXNoICYmICpwID09IGJzbGFzaCkgewotICAgICAgICAgICAgc3RyY3B5KGN1ci0+bnBh cnQsICIuLiIpOwkvKiBzYWZlICovCi0gICAgICAgICAgICArK3A7Ci0gICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICBmb3IgKGk9MDsgaSA8IE1BWE5BTUxFTiAmJiAqcCAmJiAqcCAhPSAnLycg JiYgKnAgIT0gYnNsYXNoOyBpKyspCi0gICAgICAgICAgICAgIGN1ciAtPiBucGFydFtpXSA9ICpw Kys7Ci0gICAgICAgICAgICBjdXIgLT4gbnBhcnRbaV0gPSAnXDAnOyAgICAgLyogZW5kIHRoaXMg c2VnbWVudCAqLwotICAgICAgICAgICAgaWYgKGkgPj0gTUFYTkFNTEVOKQotICAgICAgICAgICAg ICB3aGlsZSAoKnAgJiYgKnAgIT0gJy8nICYmICpwICE9IGJzbGFzaCkKLSAgICAgICAgICAgICAg ICBwKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCpwID09ICcvJykgcCsrOwotI2Vsc2UKLSAg ICAgICAgLyogR2VuZXJhbCBjYXNlIChVTklYKSAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwg TUFYTkFNTEVOICYmICFJU0RJUlNFUCgqcCkgJiYgKnAgIT0gJ1wwJzsgaSsrKSB7Ci0gICAgICAg ICAgICBjdXIgLT4gbnBhcnRbaV0gPSAqcCsrOwotICAgICAgICB9Ci0KLSAgICAgICAgY3VyIC0+ IG5wYXJ0W2ldID0gJ1wwJzsgICAgICAgICAvKiBFbmQgdGhpcyBwYXRoIHNlZ21lbnQgKi8KLSAg ICAgICAgaWYgKGkgPj0gTUFYTkFNTEVOKQotICAgICAgICAgIHdoaWxlICghSVNESVJTRVAoKnAp ICYmICpwICE9ICdcMCcpIHArKzsKLSAgICAgICAgaWYgKElTRElSU0VQKCpwKSkKLSAgICAgICAg ICBwKys7Ci0KLSNlbmRpZiAvKiBhZWdpcyAqLwotICAgIH0KLSAgICBpZiAocHJ2KSB7Ci0gICAg ICAgIG1ha2VzdHIoJnhwYXRsYXN0LHBydiAtPiBucGFydCk7Ci0gICAgICAgIGRlYnVnKEYxMTAs InNwbGl0cGF0aCB4cGF0bGFzdCIseHBhdGxhc3QsMCk7Ci0gICAgfQotI2lmZGVmIERFQlVHCi0g ICAgLyogU2hvdyBvcmlnaW5hbCBwYXRoIGxpc3QgKi8KLSAgICBpZiAoZGVibG9nKSB7Ci0gICAg ICAgIGZvciAoaSA9IDAsIGN1ciA9IGhlYWQ7IGN1cjsgaSsrKSB7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTExLCJTUExJVFBBVEgiLGN1ciAtPiBucGFydCwgaSk7Ci0gICAgICAgICAgICBjdXIgPSBj dXIgLT4gZndkOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgcmV0 dXJuKGhlYWQpOwotfQotCi0vKiAgRiBHIEUgTiAgLS0gIEdlbmVyYXRlIEZpbGUgTGlzdCAgKi8K LQotLyoKLSAgRmlsZSBuYW1lIGdlbmVyYXRvci4gIEl0IGlzIHBhc3NlZCBhIHN0cmluZywgcG9z c2libHkgY29udGFpbmluZyB3aWxkY2FyZHMsCi0gIGFuZCBhbiBhcnJheSBvZiBjaGFyYWN0ZXIg cG9pbnRlcnMuICBJdCBmaW5kcyBhbGwgdGhlIG1hdGNoaW5nIGZpbGVuYW1lcyBhbmQKLSAgc3Rv cmVzIHBvaW50ZXJzIHRvIHRoZW0gaW4gdGhlIGFycmF5LiAgVGhlIHJldHVybmVkIHN0cmluZ3Mg YXJlIGFsbG9jYXRlZAotICBmcm9tIGEgc3RhdGljIGJ1ZmZlciBsb2NhbCB0byB0aGlzIG1vZHVs ZSAoc28gdGhlIGNhbGxlciBkb2Vzbid0IGhhdmUgdG8KLSAgd29ycnkgYWJvdXQgZGVhbGxvY2F0 aW5nIHRoZW0pOyB0aGlzIG1lYW5zIHRoYXQgc3VjY2Vzc2l2ZSBjYWxscyB0byBmZ2VuCi0gIHdp bGwgd2lwZSBvdXQgdGhlIHJlc3VsdHMgb2YgcHJldmlvdXMgY2FsbHMuCi0KLSAgSW5wdXQ6Ci0g ICAgQSB3aWxkY2FyZCBzdHJpbmcsIGFuIGFycmF5IHRvIHdyaXRlIG5hbWVzIHRvLCB0aGUgbGVu Z3RoIG9mIHRoZSBhcnJheS4KLQotICBSZXR1cm5zOgotICAgIFRoZSBudW1iZXIgb2YgbWF0Y2hl cy4KLSAgICBUaGUgYXJyYXkgaXMgZmlsbGVkIHdpdGggZmlsZW5hbWVzIHRoYXQgbWF0Y2hlZCB0 aGUgcGF0dGVybi4KLSAgICBJZiB0aGVyZSB3YXNuJ3QgZW5vdWdoIHJvb20gaW4gdGhlIGFycmF5 LCAtMSBpcyByZXR1cm5lZC4KLQotICBPcmlnaW5hbGx5IGJ5OiBKZWZmIERhbWVucywgQ1VDQ0Es IDE5ODQuICBNYW55IGNoYW5nZXMgc2luY2UgdGhlbi4KLSovCi1zdGF0aWMgaW50Ci1mZ2VuKHBh dCxyZXNhcnJ5LGxlbikgY2hhciAqcGF0LCpyZXNhcnJ5W107IGludCBsZW47IHsKLSAgICBzdHJ1 Y3QgcGF0aCAqaGVhZDsKLSAgICBjaGFyICpzcHRyLCAqczsKLSAgICBpbnQgbjsKLQotI2lmZGVm IGFlZ2lzCi0gICAgY2hhciAqbmFtZWNoYXJzOwotICAgIGludCB0aWxkZSA9IDAsIGJxdW90ZSA9 IDA7Ci0KLSAgICBpZiAoKG5hbWVjaGFycyA9IGdldGVudigiTkFNRUNIQVJTIikpICE9IE5VTEwp IHsKLSAgICAgICAgaWYgKGNrc3RyY2hyKG5hbWVjaGFycywgJ34nICkgIT0gTlVMTCkgdGlsZGUg ID0gJ34nOwotICAgICAgICBpZiAoY2tzdHJjaHIobmFtZWNoYXJzLCAnXFwnKSAhPSBOVUxMKSBi c2xhc2ggPSAnXFwnOwotICAgICAgICBpZiAoY2tzdHJjaHIobmFtZWNoYXJzLCAnYCcgKSAhPSBO VUxMKSBicXVvdGUgPSAnYCc7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGlsZGUgPSAnfic7IGJz bGFzaCA9ICdcXCc7IGJxdW90ZSA9ICdgJzsKLSAgICB9Ci0gICAgc3B0ciA9IHNjcmF0Y2g7Ci0K LSAgICAvKiBjb3B5ICJgbm9kZV9kYXRhIiwgZXRjLiBhbmNob3JzICovCi0gICAgaWYgKGJxdW90 ZSAmJiAqcGF0ID09IGJxdW90ZSkKLSAgICAgIHdoaWxlICgqcGF0ICYmICpwYXQgIT0gJy8nICYm ICpwYXQgIT0gYnNsYXNoKQotICAgICAgICAqc3B0cisrID0gKnBhdCsrOwotICAgIGVsc2UgaWYg KHRpbGRlICYmICpwYXQgPT0gdGlsZGUpCi0gICAgICAqc3B0cisrID0gKnBhdCsrOwotICAgIHdo aWxlICgqcGF0ID09ICcvJykKLSAgICAgICpzcHRyKysgPSAqcGF0Kys7Ci0gICAgaWYgKHNwdHIg PT0gc2NyYXRjaCkgewotICAgICAgICBzdHJjcHkoc2NyYXRjaCwiLi8iKTsJCS8qIHNhZmUgKi8K LSAgICAgICAgc3B0ciA9IHNjcmF0Y2grMjsKLSAgICB9Ci0gICAgaWYgKCEoaGVhZCA9IHNwbGl0 cGF0aChwYXQpKSkgcmV0dXJuKC0xKTsKLQotI2Vsc2UgLyogbm90IGFlZ2lzICovCi0KLSAgICBk ZWJ1ZyhGMTExLCJmZ2VuIHBhdCIscGF0LGxlbik7Ci0gICAgZGVidWcoRjExMCwiZmdlbiBjdXJy ZW50IGRpcmVjdG9yeSIsemd0ZGlyKCksMCk7Ci0gICAgZGVidWcoRjEwMSwiZmdlbiBzdGF0aGFj ayIsIiIsc3RhdGhhY2spOwotCi0gICAgc2NyYXRjaFswXSA9ICdcMCc7Ci0gICAgeHBhdHdpbGQg PSAwOwotICAgIHhsZWFmd2lsZCA9IDA7Ci0gICAgeHBhdGFic29sdXRlID0gMDsKLQotICAgIGlm ICghKGhlYWQgPSBzcGxpdHBhdGgocGF0KSkpICAgICAgIC8qIE1ha2UgdGhlIHBhdGggc2VnbWVu dCBsaXN0ICovCi0JcmV0dXJuKC0xKTsKLQotICAgIHNwdHIgPSBzY3JhdGNoOwotCi0jaWZkZWYg Q09NTUVOVAotICAgIGlmIChzdHJuY21wKHBhdCwiLi8iLDIpICYmIHN0cm5jbXAocGF0LCIuLi8i LDMpKSB7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCWlmICghSVNESVJTRVAoKnBhdCkpCQkvKiBJ ZiBuYW1lIGlzIG5vdCBhYnNvbHV0ZSAqLwotCSAgKnNwdHIrKyA9ICcuJzsJCS8qIHB1dCAiLi8i IGluIGZyb250LiAqLwotCSpzcHRyKysgPSBESVJTRVA7Ci0jaWZkZWYgQ09NTUVOVAotICAgIH0K LSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgKnNwdHIgPSAnXDAnOwotI2VuZGlmIC8qIGFlZ2lz ICovCi0KLSAgICBtYWtlc3RyKCZ4cGF0LHBhdCk7ICAgICAgICAgICAgICAgICAvKiBTYXZlIGNv cHkgb2Ygb3JpZ2luYWwgcGF0dGVybiAqLwotICAgIGRlYnVnKEYxMTAsImZnZW4gc2NyYXRjaCIs c2NyYXRjaCwwKTsKLQotICAgIGZvciAobiA9IDAsIHMgPSB4cGF0OyAqczsgcysrKSAgICAgIC8q IEhvdyBtYW55IHNsYXNoZXMgaW4gdGhlIHBhdHRlcm4gKi8KLSAgICAgIGlmICgqcyA9PSBESVJT RVApICAgICAgICAgICAgICAgICAvKiBzaW5jZSB0aGVzZSBhcmUgZmVuY2VzIGZvciAqLwotICAg ICAgICBuKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBhdHRlcm4gbWF0Y2hpbmcg Ki8KLSAgICB4cGF0c2xhc2ggPSBuOwotICAgIGRlYnVnKEYxMDEsImZnZW4geHBhdHNsYXNoIiwi Iix4cGF0c2xhc2gpOwotCi0gICAgbnVtZm5kID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg LyogTm9uZSBmb3VuZCB5ZXQgKi8KLQotICAgIGlmIChpbml0c3BhY2UocmVzYXJyeSxzc3BsZW4p IDwgMCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICB4cGF0d2lsZCA9IGlzd2lsZCh4cGF0KTsJ CS8qIE9yaWdpbmFsIHBhdHRlcm4gaXMgd2lsZD8gKi8KLSAgICB4cGF0YWJzb2x1dGUgPSBpc2Fi c29sdXRlKHhwYXQpOwotICAgIHhsZWFmd2lsZCA9IGlzd2lsZCh4cGF0bGFzdCk7Ci0KLSAgICBk ZWJ1ZyhGMTExLCJmZ2VuIHhwYXQiLHhwYXQseHBhdHdpbGQpOwotICAgIGRlYnVnKEYxMTEsImZn ZW4geHBhdGxhc3QiLHhwYXRsYXN0LHhsZWFmd2lsZCk7Ci0gICAgZGVidWcoRjEwMSwiZmdlbiB4 cGF0YWJzb2x1dGUiLCIiLHhwYXRhYnNvbHV0ZSk7Ci0KLSAgICB0cmF2ZXJzZShoZWFkLHNjcmF0 Y2gsc3B0cik7ICAgICAgICAvKiBHbyB3YWxrIHRoZSBkaXJlY3RvcnkgdHJlZS4gKi8KLSAgICB3 aGlsZSAoaGVhZCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAvKiBEb25lIC0gZnJlZSBwYXRoIHNl Z21lbnQgbGlzdC4gKi8KLSAgICAgICAgc3RydWN0IHBhdGggKm5leHQgPSBoZWFkIC0+IGZ3ZDsK LSAgICAgICAgZnJlZSgoY2hhciAqKWhlYWQpOwotICAgICAgICBoZWFkID0gbmV4dDsKLSAgICB9 Ci0gICAgZGVidWcoRjEwMSwiZmdlbiIsIiIsbnVtZm5kKTsKLSAgICByZXR1cm4obnVtZm5kKTsg ICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBtYXRjaGVzICovCi19 Ci0KLS8qIERlZmluZSBMT05HRk4gKGxvbmcgZmlsZSBuYW1lcykgYXV0b21hdGljYWxseSBmb3Ig QlNEIDIuOSBhbmQgNC4yICovCi0vKiBMT05HRk4gY2FuIGFsc28gYmUgZGVmaW5lZCBvbiB0aGUg Y2MgY29tbWFuZCBsaW5lLiAqLwotCi0jaWZkZWYgQlNEMjkKLSNpZm5kZWYgTE9OR0ZOCi0jZGVm aW5lIExPTkdGTgotI2VuZGlmCi0jZW5kaWYKLQotI2lmZGVmIEJTRDQyCi0jaWZuZGVmIExPTkdG TgotI2RlZmluZSBMT05HRk4KLSNlbmRpZgotI2VuZGlmCi0KLS8qCi0gICBUIFIgQSBWIEUgUiBT IEUgIC0tICBUcmF2ZXJzZSBhIGRpcmVjdG9yeSB0cmVlLgotCi0gICBXYWxrcyB0aGUgZGlyZWN0 b3J5IHRyZWUgbG9va2luZyBmb3IgbWF0Y2hlcyB0byBpdHMgYXJndW1lbnRzLgotICAgVGhlIGFs Z29yaXRobSBpcywgYnJpZWZseToKLQotICAgIElmIHRoZSBjdXJyZW50IHBhdHRlcm4gc2VnbWVu dCBjb250YWlucyBubyB3aWxkY2FyZHMsIHRoYXQKLSAgICBzZWdtZW50IGlzIGFkZGVkIHRvIHdo YXQgd2UgYWxyZWFkeSBoYXZlLiAgSWYgdGhlIG5hbWUgc28gZmFyCi0gICAgZXhpc3RzLCB3ZSBj YWxsIG91cnNlbHZlcyByZWN1cnNpdmVseSB3aXRoIHRoZSBuZXh0IHNlZ21lbnQKLSAgICBpbiB0 aGUgcGF0dGVybiBzdHJpbmc7IG90aGVyd2lzZSwgd2UganVzdCByZXR1cm4uCi0KLSAgICBJZiB0 aGUgY3VycmVudCBwYXR0ZXJuIHNlZ21lbnQgY29udGFpbnMgd2lsZGNhcmRzLCB3ZSBvcGVuIHRo ZSBuYW1lCi0gICAgd2UndmUgYWNjdW11bGF0ZWQgc28gZmFyIChhc3N1bWluZyBpdCBpcyByZWFs bHkgYSBkaXJlY3RvcnkpLCB0aGVuIHJlYWQKLSAgICBlYWNoIGZpbGVuYW1lIGluIGl0LCBhbmQs IGlmIGl0IG1hdGNoZXMgdGhlIHdpbGRjYXJkIHBhdHRlcm4gc2VnbWVudCwgYWRkCi0gICAgdGhh dCBmaWxlbmFtZSB0byB3aGF0IHdlIGhhdmUgc28gZmFyIGFuZCBjYWxsIG91cnNlbHZlcyByZWN1 cnNpdmVseSBvbgotICAgIHRoZSBuZXh0IHNlZ21lbnQuCi0KLSAgICBGaW5hbGx5LCB3aGVuIG5v IG1vcmUgcGF0dGVybiBzZWdtZW50cyByZW1haW4sIHdlIGFkZCB3aGF0J3MgYWNjdW11bGF0ZWQK LSAgICBzbyBmYXIgdG8gdGhlIHJlc3VsdCBhcnJheSBhbmQgaW5jcmVtZW50IHRoZSBudW1iZXIg b2YgbWF0Y2hlcy4KLQotICBJbnB1dHM6Ci0gICAgQSBwYXR0ZXJuIHBhdGggbGlzdCAoYXMgZ2Vu ZXJhdGVkIGJ5IHNwbGl0cGF0aCksIGEgc3RyaW5nIHBvaW50ZXIgdGhhdAotICAgIHBvaW50cyB0 byB3aGF0IHdlJ3ZlIHRyYXZlcnNlZCBzbyBmYXIgKHRoaXMgY2FuIGJlIGluaXRpYWxpemVkIHRv ICIvIgotICAgIHRvIHN0YXJ0IHRoZSBzZWFyY2ggYXQgdGhlIHJvb3QgZGlyZWN0b3J5LCBvciB0 byAiLi8iIHRvIHN0YXJ0IHRoZQotICAgIHNlYXJjaCBhdCB0aGUgY3VycmVudCBkaXJlY3Rvcnkp LCBhbmQgYSBzdHJpbmcgcG9pbnRlciB0byB0aGUgZW5kIG9mCi0gICAgdGhlIHN0cmluZyBpbiB0 aGUgcHJldmlvdXMgYXJndW1lbnQsIHBsdXMgdGhlIGdsb2JhbCAicmVjdXJzaXZlIiwKLSAgICAi eG1hdGNoZG90IiwgYW5kICJ4ZGlyb25seSIgZmxhZ3MuCi0KLSAgUmV0dXJuczogdm9pZCwgd2l0 aDoKLSAgICBtdGNoc1tdIGNvbnRhaW5pbmcgdGhlIGFycmF5IG9mIGZpbGVuYW1lIHN0cmluZyBw b2ludGVycywgYW5kOgotICAgIG51bWZuZCBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgZmlsZW5h bWVzLgotCi0gIEFsdGhvdWdoIGl0IG1pZ2h0IGJlIHBvb3IgcHJhY3RpY2UsIHRoZSBtdGNoc1td IGFycmF5IGlzIHJldmVhbGVkIHRvIHRoZQotICBvdXRzaWRlIGluIGNhc2UgaXQgbmVlZHMgaXQ7 IGZvciBleGFtcGxlLCB0byBiZSBzb3J0ZWQgcHJpb3IgdG8gdXNlLgotICAoSXQgaXMgcG9vciBw cmFjdGljZSBiZWNhdXNlIG5vdCBhbGwgcGxhdGZvcm1zIGltcGxlbWVudCBmaWxlIGxpc3RzIHRo ZQotICBzYW1lIHdheTsgc29tZSBkb24ndCB1c2UgYW4gYXJyYXkgYXQgYWxsLikKLQotICBOb3Rl IHRoYXQgYWRkcmVzdWx0KCkgYWN0cyBhcyBhIHNlY29uZC1sZXZlbCBmaWx0ZXI7IGR1ZSB0byBz ZWxlY3Rpb24KLSAgY3JpdGVyaWEgb3V0c2lkZSBvZiB0aGUgcGF0dGVybiwgaXQgbWlnaHQgZGVj bGluZSB0byBhZGQgZmlsZXMgdGhhdAotICB0aGlzIHJvdXRpbmUgYXNrcyBpdCB0bywgZS5nLiBi ZWNhdXNlIHdlIGFyZSBjb2xsZWN0aW5nIG9ubHkgZGlyZWN0b3J5Ci0gIG5hbWVzIGJ1dCBub3Qg dGhlIG5hbWVzIG9mIHJlZ3VsYXIgZmlsZXMuCi0KLSAgV0FSTklORzogSW4gdGhlIGNvdXJzZSBv ZiBDLUtlcm1pdCA3LjAgZGV2ZWxvcG1lbnQsIHRoaXMgcm91dGluZSBiZWNhbWUKLSAgcmlkaWN1 bG91c2x5IGNvbXBsZXgsIGluIG9yZGVyIHRvIG1lZXQgYXBwcm94aW1hdGVseSBzaXh0eSBzcGVj aWZpYwotICByZXF1aXJlbWVudHMuICBET04nVCBFVkVOIFRISU5LIEFCT1VUIE1PRElGWUlORyBU SElTIFJPVVRJTkUhICBUcnVzdCBtZTsKLSAgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGZpeCBhbnl0 aGluZyBpbiBpdCB3aXRob3V0IGJyZWFraW5nIHNvbWV0aGluZyBlbHNlLgotICBUaGlzIHJvdXRp bmUgYmFkbHkgbmVlZHMgYSB0b3RhbCByZWRlc2lnbiBhbmQgcmV3cml0ZS4gIE5vdGU6IFRoZXJl IG1heQotICBiZSBzb21lIGdvb2QgYXBwbGljYXRpb25zIGZvciByZWFscGF0aCgpIGFuZC9vciBz Y2FuZGlyKCkgYW5kL29yIGZ0c19ibGFoKCkKLSAgaGVyZSwgb24gcGxhdGZvcm1zIHdoZXJlIHRo ZXkgYXJlIGF2YWlsYWJsZS4KLSovCi1zdGF0aWMgVk9JRAotdHJhdmVyc2UocGwsc29mYXIsZW5k Y3VyKSBzdHJ1Y3QgcGF0aCAqcGw7IGNoYXIgKnNvZmFyLCAqZW5kY3VyOyB7Ci0KLS8qIEFwcHJv cHJpYXRlIGRlY2xhcmF0aW9ucyBmb3IgZGlyZWN0b3J5IHJvdXRpbmVzIGFuZCBzdHJ1Y3R1cmVz ICovCi0vKiAjZGVmaW5lIE9QRU5ESVIgbWVhbnMgdG8gdXNlIG9wZW5kaXIoKSwgcmVhZGRpcigp LCBjbG9zZWRpcigpICAqLwotLyogSWYgT1BFTkRJUiBub3QgZGVmaW5lZCwgd2UgdXNlIG9wZW4o KSwgcmVhZCgpLCBjbG9zZSgpICovCi0KLSNpZmRlZiBESVJFTlQgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBOZXcgd2F5LCA8ZGlyZW50Lmg+ICovCi0jZGVmaW5lIE9QRU5ESVIKLSAgICBE SVIgKmZkLCAqb3BlbmRpcigpOwotICAgIHN0cnVjdCBkaXJlbnQgKmRpcmJ1ZjsKLSAgICBzdHJ1 Y3QgZGlyZW50ICpyZWFkZGlyKCk7Ci0jZWxzZSAvKiAhRElSRU5UICovCi0jaWZkZWYgTE9OR0ZO ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT2xkIHdheSwgPGRpci5oPiB3aXRoIG9wZW5k aXIoKSAqLwotI2RlZmluZSBPUEVORElSCi0gICAgRElSICpmZCwgKm9wZW5kaXIoKTsKLSAgICBz dHJ1Y3QgZGlyZWN0ICpkaXJidWY7Ci0jZWxzZSAvKiAhTE9OR0ZOICovCi0gICAgaW50IGZkOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT2xkIHdheSwgPGRpci5oPiB3aXRoIG9wZW4o KSAqLwotICAgIHN0cnVjdCBkaXJlY3QgZGlyX2VudHJ5OwotICAgIHN0cnVjdCBkaXJlY3QgKmRp cmJ1ZiA9ICZkaXJfZW50cnk7Ci0jZW5kaWYgLyogTE9OR0ZOICovCi0jZW5kaWYgLyogRElSRU5U ICovCi0gICAgaW50IG1vcHRzID0gMDsJCQkvKiBja21hdGNoKCkgb3B0cyAqLwotICAgIGludCBk ZXB0aCA9IDA7CQkJLyogRGlyZWN0b3J5IHRyZWUgZGVwdGggKi8KLQotICAgIGNoYXIgbmFtYnVm W01BWE5BTUxFTis0XTsgICAgICAgICAgIC8qIEJ1ZmZlciBmb3IgYSBmaWxlbmFtZSAqLwotICAg IGludCBpdHNhZGlyID0gMCwgc2VnaXNkaXIgPSAwLCBpdHN3aWxkID0gMCwgbXJlc3VsdCwgbiwg eCAvKiAsIHkgKi8gOwotICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7ICAgICAgICAgICAgICAgIC8q IEZvciBmaWxlIGluZm8uICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwxNik7Ci0gICAg aWYgKHBsID09IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mIHBhdGgtc2VnbWVu dCBsaXN0ICovCi0gICAgICAgICotLWVuZGN1ciA9ICdcMCc7IC8qIFRlcm1pbmF0ZSBzdHJpbmcs IG92ZXJ3cml0ZSB0cmFpbGluZyBzbGFzaCAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJ0cmF2ZXJz ZSBhZGQ6IGVuZCBvZiBwYXRoIHNlZ21lbnQiLHNvZmFyLDApOwotICAgICAgICBhZGRyZXN1bHQo c29mYXIsLTEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzdGF0aGFjaykgewot CS8qIFRoaXMgc3BlZWRzIHVwIHRoZSBzZWFyY2ggYSBsb3QgYW5kIHdlIHN0aWxsIGdldCBnb29k IHJlc3VsdHMgKi8KLQkvKiBidXQgaXQgYnJlYWtzIHRoZSB0YWdnaW5nIG9mIGRpcmVjdG9yeSBu YW1lcyBkb25lIGluIGFkZHJlc3VsdCAqLwotCWlmICh4cmVjdXJzaXZlIHx8IHhmaWxvbmx5IHx8 IHhkaXJvbmx5IHx8IHhwYXRzbGFzaCkgewotCSAgICBpdHNhZGlyID0geGlzZGlyKHNvZmFyKTsK LQkgICAgZGVidWcoRjEwMSwiU1RBVCIsIiIsMTcpOwotCX0gZWxzZQotCSAgaXRzYWRpciA9IChz dHJuY21wKHNvZmFyLCIuLyIsMikgPT0gMCk7Ci0gICAgfSBlbHNlIHsKLQlpdHNhZGlyID0geGlz ZGlyKHNvZmFyKTsKLQlkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwxOCk7Ci0gICAgfQotICAgIGRlYnVn KEYxMTEsInRyYXZlcnNlIGVudHJ5IHNvZmFyIixzb2ZhcixpdHNhZGlyKTsKLQotI2lmZGVmIENL U1lNTElOSyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlJ3JlIGRvaW5nIHN5bWxpbmtzPyAq LwotI2lmZGVmIFVTRV9MU1RBVCAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9LIHRvIHVzZSBs c3RhdCgpPyAqLwotICAgIGlmIChpdHNhZGlyICYmIHhub2xpbmtzKSB7CQkvKiBJZiBub3QgZm9s bG93aW5nIHN5bWxpbmtzICovCi0JaW50IHg7Ci0Jc3RydWN0IHN0YXQgYnVmOwotCXggPSBsc3Rh dChzb2ZhciwmYnVmKTsKLQlkZWJ1ZyhGMTExLCJ0cmF2ZXJzZSBsc3RhdCAxIixzb2Zhcix4KTsK LQlpZiAoeCA+IC0xICYmCi0jaWZkZWYgU19JU0xOSwotCSAgICBTX0lTTE5LKGJ1Zi5zdF9tb2Rl KQotI2Vsc2UKLSNpZmRlZiBfSUZMTksKLQkgICAgKChfSUZNVCAmIGJ1Zi5zdF9tb2RlKSA9PSBf SUZMTkspCi0jZW5kaWYgLyogX0lGTE5LICovCi0jZW5kaWYgLyogU19JU0xOSyAqLwotCSAgICAp Ci0JICBpdHNhZGlyID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogVVNFX0xTVEFUICovCi0jZW5kaWYg LyogQ0tTWU1MSU5LICovCi0KLSAgICBpZiAoIXhtYXRjaGRvdCAmJiB4cGF0bGFzdFswXSA9PSAn LicpCi0gICAgICB4bWF0Y2hkb3QgPSAxOwotICAgIGlmICgheG1hdGNoZG90ICYmIHhwYXRbMF0g PT0gJy4nICYmIHhwYXRbMV0gIT0gJy8nICYmIHhwYXRbMV0gIT0gJy4nKQotICAgICAgeG1hdGNo ZG90ID0gMTsKLQotICAgIC8qIGNrbWF0Y2goKSBvcHRpb25zICovCi0KLSAgICBpZiAoeG1hdGNo ZG90KSAgIG1vcHRzIHw9IDE7CS8qIE1hdGNoIGRvdCAqLwotICAgIGlmICgheHJlY3Vyc2l2ZSkg bW9wdHMgfD0gMjsJLyogRGlyc2VwIGlzIGZlbmNlICovCi0KLSAgICBkZWJ1ZyhGMTExLCJ0cmF2 ZXJzZSBlbnRyeSB4cGF0Iix4cGF0LHhwYXRzbGFzaCk7Ci0gICAgZGVidWcoRjExMSwidHJhdmVy c2UgZW50cnkgeHBhdGxhc3QiLHhwYXRsYXN0LHhtYXRjaGRvdCk7Ci0gICAgZGVidWcoRjExMCwi dHJhdmVyc2UgZW50cnkgcGwgLT4gbnBhcnQiLHBsIC0+IG5wYXJ0LDApOwotCi0jaWZkZWYgUkVD VVJTSVZFCi0gICAgaWYgKHhyZWN1cnNpdmUgPiAwICYmICFpdHNhZGlyKSB7Ci0gICAgICAgIGNo YXIgKiBzOyAgICAgICAgIC8qIFJlY3Vyc2l2ZSBkZXNjZW50IGFuZCB0aGlzIGlzIGEgcmVndWxh ciBmaWxlICovCi0gICAgICAgICotLWVuZGN1ciA9ICdcMCc7IC8qIFRlcm1pbmF0ZSBzdHJpbmcs IG92ZXJ3cml0ZSB0cmFpbGluZyBzbGFzaCAqLwotCi0gICAgICAgIC8qIEZpbmQgdGhlIG50aCBz bGFzaCBmcm9tIHRoZSByaWdodCBhbmQgbWF0Y2ggZnJvbSB0aGVyZS4uLiAqLwotICAgICAgICAv KiAobiA9PSB0aGUgbnVtYmVyIG9mIHNsYXNoZXMgaW4gdGhlIG9yaWdpbmFsIHBhdHRlcm4gLSBz ZWUgZmdlbikgKi8KLSAgICAgICAgaWYgKCpzb2ZhciA9PSAnLycpIHsKLSAgICAgICAgICAgIGRl YnVnKEYxMTAsInRyYXZlcnNlIHhwYXRzbGFzaCBhYnNvbHV0ZSIsc29mYXIsMCk7Ci0gICAgICAg ICAgICBzID0gc29mYXI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEx LCJ0cmF2ZXJzZSB4cGF0c2xhc2ggcmVsYXRpdmUiLHNvZmFyLHhwYXRzbGFzaCk7Ci0gICAgICAg ICAgICBmb3IgKHMgPSBlbmRjdXIgLSAxLCBuID0gMDsgcyA+PSBzb2Zhcjsgcy0tKSB7Ci0gICAg ICAgICAgICAgICAgaWYgKCpzID09ICcvJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoKytu ID49IHhwYXRzbGFzaCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcysrOwotICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNpZm5kZWYgTk9TS0lQTUFUQ0gKLQkv KiBUaGlzIHNwZWVkcyB0aGluZ3MgdXAgYSBiaXQuICovCi0JLyogSWYgaXQgY2F1c2VzIHRyb3Vi bGUgZGVmaW5lIE5PU0tJUE1BVENIIGFuZCByZWJ1aWxkLiAqLwotCWlmICh4cGF0WzBdID09ICcq JyAmJiAheHBhdFsxXSkKLQkgIHggPSB4bWF0Y2hkb3QgPyAxIDogKHNbMF0gIT0gJy4nKTsKLQll bHNlCi0jZW5kaWYgLyogTk9TS0lQTUFUQ0ggKi8KLQkgIHggPSBja21hdGNoKHhwYXQsIHMsIDEs IG1vcHRzKTsgLyogTWF0Y2ggd2l0aCBvcmlnaW5hbCBwYXR0ZXJuICovCi0gICAgICAgIGRlYnVn KEYxMTEsInRyYXZlcnNlIHhwYXRzbGFzaCBja21hdGNoIixzLHgpOwotICAgICAgICBpZiAoeCA+ IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInRyYXZlcnNlIGFkZDogcmVjdXJzaXZlLCBt YXRjaCwgJiYgIWlzZGlyIixzb2ZhciwwKTsKLSAgICAgICAgICAgIGFkZHJlc3VsdChzb2Zhcixp dHNhZGlyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIFJF Q1VSU0lWRSAqLwotCi0gICAgZGVidWcoRjExMSwidHJhdmVyc2Ugc29mYXIgMiIsc29mYXIsMCk7 Ci0KLSAgICBzZWdpc2RpciA9ICgocGwgLT4gZndkKSA9PSBOVUxMKSA/IDAgOiAxOwotICAgIGl0 c3dpbGQgPSB3aWxkZW5hID8gKGlzd2lsZChwbCAtPiBucGFydCkpIDogMDsgLyogMTUgSnVuIDIw MDUgKi8KLQotICAgIGRlYnVnKEYxMTEsInRyYXZlcnNlIHNlZ2lzZGlyIixzb2ZhcixzZWdpc2Rp cik7Ci0gICAgZGVidWcoRjExMSwidHJhdmVyc2UgaXRzd2lsZCAiLHBsIC0+IG5wYXJ0LGl0c3dp bGQpOwotCi0jaWZkZWYgUkVDVVJTSVZFCi0gICAgaWYgKHhyZWN1cnNpdmUgPiAwKSB7ICAgICAg ICAgICAgICAgLyogSWYgcmVjdXJzaW5nIGFuZC4uLiAqLwotICAgICAgICBpZiAoc2VnaXNkaXIg JiYgaXRzd2lsZCkgICAgICAgIC8qIHRoaXMgaXMgYSBkaXIgYW5kIG5wYXJ0IGlzIHdpbGQgKi8K LSAgICAgICAgICBnb3RvIGJsYWg7ICAgICAgICAgICAgICAgICAgICAvKiBvci4uLiAqLwotICAg ICAgICBlbHNlIGlmICgheHBhdGFic29sdXRlICYmICF4cGF0d2lsZCkgLyogc2VhcmNoIG9iamVj dCBpcyBub253aWxkICovCi0gICAgICAgICAgZ290byBibGFoOyAgICAgICAgICAgICAgICAgICAg LyogdGhlbiBnbyByZWN1cnNlICovCi0gICAgfQotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotCi0g ICAgaWYgKCFpdHN3aWxkKSB7ICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBwYXRoIHNlZ21l bnQgbm90IHdpbGQ/ICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBzdHJjcHkoZW5kY3VyLHBs IC0+IG5wYXJ0KTsgICAgIC8qIChzYWZlKSBBcHBlbmQgbmV4dCBwYXJ0LiAqLwotICAgICAgICBl bmRjdXIgKz0gKGludClzdHJsZW4ocGwgLT4gbnBhcnQpOyAvKiBBZHZhbmNlIGVuZCBwb2ludGVy ICovCi0jZWxzZQotLyoKLSAgc3RyY3B5KCkgZG9lcyBub3QgYWNjb3VudCBmb3IgcXVvdGVkIG1l dGFjaGFyYWN0ZXJzLgotICBXZSBtdXN0IHJlbW92ZSB0aGUgcXVvdGVzIGJlZm9yZSBkb2luZyB0 aGUgc3RhdCgpLgotKi8KLQl7Ci0JICAgIGludCBxdW90ZSA9IDA7Ci0JICAgIGNoYXIgYywgKiBz OwotCSAgICBzID0gcGwgLT4gbnBhcnQ7Ci0JICAgIHdoaWxlICgoYyA9ICpzKyspKSB7Ci0JCWlm ICghcXVvdGUpIHsKLQkJICAgIGlmIChjID09IENNRFEpIHsKLQkJCXF1b3RlID0gMTsKLQkJCWNv bnRpbnVlOwotCQkgICAgfQotCQl9Ci0JCSplbmRjdXIrKyA9IGM7Ci0JCXF1b3RlID0gMDsKLQkg ICAgfQotCX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICplbmRjdXIgPSAnXDAnOyAg ICAgICAgICAgICAgICAgLyogRW5kIG5ldyBjdXJyZW50IHN0cmluZy4gKi8KLQotICAgICAgICBp ZiAoc3RhdChzb2Zhciwmc3RhdGJ1ZikgPT0gMCkgeyAvKiBJZiB0aGlzIHBpZWNlIGV4aXN0cy4u LiAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwidHJhdmVyc2UgZXhpc3RzIixzb2ZhciwwKTsK LSAgICAgICAgICAgICplbmRjdXIrKyA9IERJUlNFUDsgICAgICAgICAvKiBhZGQgc2xhc2ggdG8g ZW5kICovCi0gICAgICAgICAgICAqZW5kY3VyID0gJ1wwJzsgICAgICAgICAgICAgLyogYW5kIGVu ZCB0aGUgc3RyaW5nIGFnYWluLiAqLwotICAgICAgICAgICAgdHJhdmVyc2UocGwgLT4gZndkLCBz b2ZhciwgZW5kY3VyKTsKLSAgICAgICAgfQotI2lmZGVmIERFQlVHCi0gICAgICAgIGVsc2UgZGVi dWcoRjExMCwidHJhdmVyc2Ugbm90IGZvdW5kIiwgc29mYXIsIDApOwotI2VuZGlmIC8qIERFQlVH ICovCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAqZW5kY3VyID0gJ1wwJzsgICAgICAg ICAgICAgICAgICAgICAvKiBFbmQgY3VycmVudCBzdHJpbmcgKi8KLSAgICBkZWJ1ZyhGMTExLCJ0 cmF2ZXJzZSBzb2ZhciAzIixzb2ZhciwwKTsKLQotICAgIGlmICghaXRzYWRpcikKLSAgICAgIHJl dHVybjsKLQotICAgIC8qIFNlYXJjaCBpcyByZWN1cnNpdmUgb3IgLi4uICovCi0gICAgLyogcGF0 aCBzZWdtZW50IGNvbnRhaW5zIHdpbGRjYXJkcywgaGF2ZSB0byBvcGVuIGFuZCBzZWFyY2ggZGly ZWN0b3J5LiAqLwotCi0gIGJsYWg6Ci0KLSAgICBkZWJ1ZyhGMTEwLCJ0cmF2ZXJzZSBvcGVuaW5n IGRpcmVjdG9yeSIsIHNvZmFyLCAwKTsKLQotI2lmZGVmIE9QRU5ESVIKLSAgICBkZWJ1ZyhGMTEw LCJ0cmF2ZXJzZSBvcGVuZGlyKCkiLHNvZmFyLDApOwotICAgIGlmICgoZmQgPSBvcGVuZGlyKHNv ZmFyKSkgPT0gTlVMTCkgeyAgICAgICAgLyogQ2FuJ3Qgb3BlbiwgZmFpbC4gKi8KLSAgICAgICAg ZGVidWcoRjEwMSwidHJhdmVyc2Ugb3BlbmRpcigpIGZhaWxlZCIsIiIsZXJybm8pOwotICAgICAg ICByZXR1cm47Ci0gICAgfQotICAgIHdoaWxlICgoZGlyYnVmID0gcmVhZGRpcihmZCkpKQotI2Vs c2UgLyogIU9QRU5ESVIgKi8KLSAgICBkZWJ1ZyhGMTEwLCJ0cmF2ZXJzZSBkaXJlY3Rvcnkgb3Bl bigpIixzb2ZhciwwKTsKLSAgICBpZiAoKGZkID0gb3Blbihzb2ZhcixPX1JET05MWSkpIDwgMCkg ewotICAgICAgICBkZWJ1ZyhGMTAxLCJ0cmF2ZXJzZSBkaXJlY3Rvcnkgb3BlbigpIGZhaWxlZCIs IiIsZXJybm8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHdoaWxlIChyZWFkKGZkLCAo Y2hhciAqKWRpcmJ1Ziwgc2l6ZW9mIGRpcl9lbnRyeSkgPiAwKQotI2VuZGlmIC8qIE9QRU5ESVIg Ki8KLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVhZCBlYWNoIGVudHJ5IGlu IHRoaXMgZGlyZWN0b3J5ICovCi0gICAgICAgICAgaW50IGV4aXN0czsKLSAgICAgICAgICBjaGFy ICplb3MsICpzOwotICAgICAgICAgIGV4aXN0cyA9IDA7Ci0KLSAgICAgICAgICAvKiBPbiBzb21l IHBsYXRmb3JtcywgdGhlIHJlYWRbZGlyXSgpIGNhbiByZXR1cm4gZGVsZXRlZCBmaWxlcywgKi8K LSAgICAgICAgICAvKiBlLmcuIEhQLVVYIDUuMDAuICBUaGVyZSBpcyBubyBwb2ludCBpbiBncmlu ZGluZyB0aHJvdWdoIHRoaXMgKi8KLSAgICAgICAgICAvKiByb3V0aW5lIHdoZW4gdGhlIGZpbGUg ZG9lc24ndCBleGlzdC4uLiAqLwotCi0gICAgICAgICAgaWYgKCAgICAgICAgICAvKiBUaGVyZSAg YWN0dWFsbHkgaXMgYW4gaW5vZGUuLi4gKi8KLSNpZmRlZiBCU0Q0MgotICAgICAgICAgICAgICAg ICAgICAgICAgIGRpcmJ1Zi0+ZF9pbm8gIT0gLTEKLSNlbHNlCi0jaWZkZWYgdW5vcwotICAgICAg ICAgICAgICAgICAgICAgICAgIGRpcmJ1Zi0+ZF9pbm8gIT0gLTEKLSNlbHNlCi0jaWZkZWYgUU5Y Ci0gICAgICAgICAgICAgICAgICAgICAgICAgZGlyYnVmLT5kX3N0YXQuc3RfaW5vICE9IDAKLSNl bHNlCi0jaWZkZWYgU09MQVJJUwotICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmJ1Zi0+ZF9p bm8gIT0gMAotI2Vsc2UKLSNpZmRlZiBzdW4KLSAgICAgICAgICAgICAgICAgICAgICAgICBkaXJi dWYtPmRfZmlsZW5vICE9IDAKLSNlbHNlCi0jaWZkZWYgYnNkaQotICAgICAgICAgICAgICAgICAg ICAgICAgIGRpcmJ1Zi0+ZF9maWxlbm8gIT0gMAotI2Vsc2UKLSNpZmRlZiBfXzM4NkJTRF9fCi0g ICAgICAgICAgICAgICAgICAgICAgICAgZGlyYnVmLT5kX2ZpbGVubyAhPSAwCi0jZWxzZQotI2lm ZGVmIF9fRnJlZUJTRF9fCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGlyYnVmLT5kX2ZpbGVu byAhPSAwCi0jZWxzZQotI2lmZGVmIHVsdHJpeAotICAgICAgICAgICAgICAgICAgICAgICAgIGRp cmJ1Zi0+Z2RfaW5vICE9IDAKLSNlbHNlCi0jaWZkZWYgUGxhbjkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAxCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmJ1Zi0+ZF9pbm8g IT0gMAotI2VuZGlmIC8qIFBsYW45ICovCi0jZW5kaWYgLyogdWx0cml4ICovCi0jZW5kaWYgLyog X19GcmVlQlNEX18gKi8KLSNlbmRpZiAvKiBfXzM4NkJTRF9fICovCi0jZW5kaWYgLyogYnNkaSAq LwotI2VuZGlmIC8qIHN1biAqLwotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNlbmRpZiAvKiBRTlgg Ki8KLSNlbmRpZiAvKiB1bm9zICovCi0jZW5kaWYgLyogQlNENDIgKi8KLSAgICAgICAgICAgICAg KQotICAgICAgICAgICAgZXhpc3RzID0gMTsKLSAgICAgICAgICBpZiAoIWV4aXN0cykKLSAgICAg ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgY2tzdHJuY3B5KG5hbWJ1ZiwgICAgICAgICAg ICAgLyogQ29weSB0aGUgbmFtZSAqLwotICAgICAgICAgICAgICAgICAgZGlyYnVmLT5kX25hbWUs Ci0gICAgICAgICAgICAgICAgICBNQVhOQU1MRU4KLSAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgaWYgKG5hbWJ1ZlswXSA9PSAnLicpIHsKLSAgICAgICAgICAgICAgaWYgKCFuYW1idWZb MV0gfHwgKG5hbWJ1ZlsxXSA9PSAnLicgJiYgIW5hbWJ1ZlsyXSkpIHsKLSAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTAsInRyYXZlcnNlIHNraXBwaW5nIixuYW1idWYsMCk7Ci0gICAgICAgICAg ICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgLyogc2tpcCAiLiIgYW5kICIuLiIgKi8KLSAg ICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBzID0gbmFtYnVmOyAgICAgICAg ICAgICAgICAgICAvKiBDb3B5IG5hbWUgdG8gZW5kIG9mIHNvZmFyICovCi0gICAgICAgICAgZW9z ID0gZW5kY3VyOwotICAgICAgICAgIHdoaWxlICgoKmVvcyA9ICpzKSkgewotICAgICAgICAgICAg ICBzKys7Ci0gICAgICAgICAgICAgIGVvcysrOwotICAgICAgICAgIH0KLS8qCi0gIE5vdyB3ZSBj aGVjayB0aGUgZmlsZSBmb3IgKGEpIHdoZXRoZXIgaXQgaXMgYSBkaXJlY3RvcnksIGFuZCAoYikg d2hldGhlcgotICBpdHMgbmFtZSBtYXRjaGVzIG91ciBwYXR0ZXJuLiAgSWYgaXQgaXMgYSBkaXJl Y3RvcnksIGFuZCBpZiB3ZSBoYXZlIGJlZW4KLSAgdG9sZCB0byBidWlsZCBhIHJlY3Vyc2l2ZSBs aXN0LCB0aGVuIHdlIG11c3QgZGVzY2VuZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIKLSAgaXQgbWF0 Y2hlcyB0aGUgcGF0dGVybi4gIElmIGl0IGlzIG5vdCBhIGRpcmVjdG9yeSBhbmQgaXQgZG9lcyBu b3QgbWF0Y2gKLSAgb3VyIHBhdHRlcm4sIHdlIHNraXAgaXQuICBOb3RlOiBzb2ZhciBpcyB0aGUg ZnVsbCBwYXRobmFtZSwgbmFtYnVmIGlzCi0gIHRoZSBuYW1lIG9ubHkuCi0qLwotICAgICAgICAg IC8qIERvIHRoaXMgZmlyc3QgdG8gc2F2ZSBwb2ludGxlc3MgZnVuY3Rpb24gY2FsbHMgKi8KLSAg ICAgICAgICBpZiAobmFtYnVmWzBdID09ICcuJyAmJiAheG1hdGNoZG90KSAvKiBEaXIgbmFtZSBz dGFydHMgd2l0aCAnLicgKi8KLSAgICAgICAgICAgIGNvbnRpbnVlOwotCSAgaWYgKHN0YXRoYWNr KSB7Ci0JICAgICAgaWYgKHhyZWN1cnNpdmUgfHwgeGZpbG9ubHkgfHwgeGRpcm9ubHkgfHwgeHBh dHNsYXNoKSB7Ci0JCSAgaXRzYWRpciA9IHhpc2Rpcihzb2Zhcik7IC8qIFNlZSBpZiBpdCdzIGEg ZGlyZWN0b3J5ICovCi0JCSAgZGVidWcoRjEwMSwiU1RBVCIsIiIsMTkpOwotCSAgICAgIH0gZWxz ZSB7Ci0JCSAgaXRzYWRpciA9IDA7Ci0JICAgICAgfQotCSAgfSBlbHNlIHsKLQkgICAgICBpdHNh ZGlyID0geGlzZGlyKHNvZmFyKTsKLQkgICAgICBkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwyMCk7Ci0J ICB9Ci0KLSNpZmRlZiBDS1NZTUxJTksKLSNpZmRlZiBVU0VfTFNUQVQKLQkgIGlmIChpdHNhZGly ICYmIHhub2xpbmtzKSB7CQkvKiBJZiBub3QgZm9sbG93aW5nIHN5bWxpbmtzICovCi0JICAgICAg aW50IHg7Ci0JICAgICAgc3RydWN0IHN0YXQgYnVmOwotCSAgICAgIHggPSBsc3RhdChzb2Zhciwm YnVmKTsKLQkgICAgICBkZWJ1ZyhGMTExLCJ0cmF2ZXJzZSBsc3RhdCAyIixzb2Zhcix4KTsKLQkg ICAgICBpZiAoeCA+IC0xICYmCi0jaWZkZWYgU19JU0xOSwotCQkgIFNfSVNMTksoYnVmLnN0X21v ZGUpCi0jZWxzZQotI2lmZGVmIF9JRkxOSwotCQkgICgoX0lGTVQgJiBidWYuc3RfbW9kZSkgPT0g X0lGTE5LKQotI2VuZGlmIC8qIF9JRkxOSyAqLwotI2VuZGlmIC8qIFNfSVNMTksgKi8KLQkJICAp Ci0JCWl0c2FkaXIgPSAwOwotCSAgfQotI2VuZGlmIC8qIFVTRV9MU1RBVCAqLwotI2VuZGlmIC8q IENLU1lNTElOSyAqLwotCi0jaWZkZWYgUkVDVVJTSVZFCi0gICAgICAgICAgaWYgKHhyZWN1cnNp dmUgPiAwICYmIGl0c2FkaXIgJiYKLSAgICAgICAgICAgICAgKHhwYXRsYXN0WzBdID09ICcqJykg JiYgIXhwYXRsYXN0WzFdCi0gICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICBkZWJ1ZyhG MTEwLAotICAgICAgICAgICAgICAgICAgICAidHJhdmVyc2UgYWRkOiByZWN1cnNpdmUgJiYgaXNk aXIgJiYgc2VnaXNkaXIgb3IgbWF0Y2giLAotICAgICAgICAgICAgICAgICAgICBzb2ZhciwKLSAg ICAgICAgICAgICAgICAgICAgc2VnaXNkaXIKLSAgICAgICAgICAgICAgICAgICAgKTsKLQkgICAg ICBhZGRyZXN1bHQoc29mYXIsaXRzYWRpcik7Ci0JICAgICAgaWYgKG51bWZuZCA8IDApIHJldHVy bjsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0KLSAgICAgICAgICBkZWJ1 ZyhGMTExLCJ0cmF2ZXJzZSBtcmVzdWx0IHhwYXQiLHhwYXQseHJlY3Vyc2l2ZSk7Ci0gICAgICAg ICAgZGVidWcoRjExMSwidHJhdmVyc2UgbXJlc3VsdCBwbCAtPiBucGFydCIsCi0gICAgICAgICAg ICAgICAgcGwgLT4gbnBhcnQsCi0gICAgICAgICAgICAgICAgKChwbCAtPiBmd2QpID8gOTk5OSA6 IDApCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICBkZWJ1ZyhGMTExLCJ0cmF2ZXJzZSBt cmVzdWx0IHNvZmFyIHNlZ2lzZGlyIixzb2ZhcixzZWdpc2Rpcik7Ci0gICAgICAgICAgZGVidWco RjExMSwidHJhdmVyc2UgbXJlc3VsdCBzb2ZhciBpdHNhZGlyIixzb2ZhcixpdHNhZGlyKTsKLSAg ICAgICAgICBkZWJ1ZyhGMTAxLCJ0cmF2ZXJzZSBtcmVzdWx0IHhtYXRjaGRvdCIsIiIseG1hdGNo ZG90KTsKLS8qCi0gIE1hdGNoIHRoZSBwYXRoIHNvIGZhciB3aXRoIHRoZSBwYXR0ZXJuIGFmdGVy IHN0cmlwcGluZyBhbnkgbGVhZGluZyAiLi8iCi0gIGZyb20gZWl0aGVyIG9yIGJvdGguICBUaGUg cGF0dGVybiBjaG9zZW4gaXMgdGhlIGZ1bGwgb3JpZ2luYWwgcGF0dGVybiBpZgotICB0aGUgbWF0 Y2ggY2FuZGlkYXRlIChzb2ZhcikgaXMgbm90IGEgZGlyZWN0b3J5LCBvciBlbHNlIGp1c3QgdGhl IG5hbWUgcGFydAotICAocGwtPm5wYXJ0KSBpZiBpdCBpcy4KLSovCi0JICB7Ci0JICAgICAgY2hh ciAqIHMxOwkJLyogVGhlIHBhdHRlcm4gKi8KLQkgICAgICBjaGFyICogczIgPSBzb2ZhcjsJLyog VGhlIHBhdGggc28gZmFyICovCi0JICAgICAgY2hhciAqIHMzOwkJLyogV29ya2VyICovCi0JICAg ICAgaW50IG9wdHM7CQkJLyogTWF0Y2ggb3B0aW9ucyAqLwotCi0JICAgICAgczEgPSBpdHNhZGly ID8gcGwtPm5wYXJ0IDogeHBhdDsKLQotI2lmbmRlZiBDT01NRU5UCi0JICAgICAgLyogSSBjYW4n dCBleHBsYWluIHRoaXMgYnV0IGl0IHVuYnJlYWtzICJjZCBibGFoL3N1YjxFc2M+IiAqLwotCSAg ICAgIGlmIChpdHNhZGlyICYmICF4cmVjdXJzaXZlICYmIHhwYXRzbGFzaCA+IDAgJiYKLQkJICBz ZWdpc2RpciA9PSAwICYmIGl0c3dpbGQpIHsKLQkJICBzMSA9IHhwYXQ7Ci0JCSAgZGVidWcoRjEx MCwidHJhdmVyc2UgbXJlc3VsdCBzMSBrbHVkZ2UiLHMxLDApOwotCSAgICAgIH0KLSNlbmRpZiAv KiBDT01NRU5UICovCi0KLQkgICAgICBpZiAoeHJlY3Vyc2l2ZSAmJiB4cGF0c2xhc2ggPT0gMCkK LQkJczIgPSBuYW1idWY7Ci0JICAgICAgd2hpbGUgKChzMVswXSA9PSAnLicpICYmIChzMVsxXSA9 PSAnLycpKSAvKiBTdHJpcCAiLi8iICovCi0JCXMxICs9IDI7Ci0JICAgICAgd2hpbGUgKChzMlsw XSA9PSAnLicpICYmIChzMlsxXSA9PSAnLycpKSAvKiBEaXR0byAqLwotCQlzMiArPSAyOwotCSAg ICAgIG9wdHMgPSBtb3B0czsJCS8qIE1hdGNoIG9wdGlvbnMgKi8KLQkgICAgICBpZiAoaXRzYWRp cikgCQkvKiBDdXJyZW50IHNlZ21lbnQgaXMgYSBkaXJlY3RvcnkgKi8KLQkJb3B0cyA9IG1vcHRz ICYgMTsJLyogTm8gZmVuY2VzICovCi0JICAgICAgczMgPSBzMjsJCQkvKiBHZXQgc2VnbWVudCBk ZXB0aCAqLwotCSAgICAgIGRlcHRoID0gMDsKLQkgICAgICB3aGlsZSAoKnMzKSB7IGlmICgqczMr KyA9PSAnLycpIGRlcHRoKys7IH0KLSNpZm5kZWYgTk9TS0lQTUFUQ0gKLQkgICAgICAvKiBUaGlz IHNwZWVkcyB0aGluZ3MgdXAgYSBiaXQuICovCi0JICAgICAgLyogSWYgaXQgY2F1c2VzIHRyb3Vi bGUgZGVmaW5lIE5PU0tJUE1BVENIIGFuZCByZWJ1aWxkLiAqLwotCSAgICAgIGlmIChkZXB0aCA9 PSAwICYmIChzMVswXSA9PSAnKicpICYmICFzMVsxXSkKLQkJbXJlc3VsdCA9IHhtYXRjaGRvdCA/ IDEgOiAoczJbMF0gIT0gJy4nKTsKLQkgICAgICBlbHNlCi0jZW5kaWYgLyogTk9TS0lQTUFUQ0gg Ki8KLQkJbXJlc3VsdCA9IGNrbWF0Y2goczEsczIsMSxvcHRzKTsgLyogTWF0Y2ggKi8KLQkgIH0K LSNpZmRlZiBERUJVRwotCSAgaWYgKGRlYmxvZykgewotCSAgICAgIGRlYnVnKEYxMTEsInRyYXZl cnNlIG1yZXN1bHQgZGVwdGgiLHNvZmFyLGRlcHRoKTsKLQkgICAgICBkZWJ1ZyhGMTAxLCJ0cmF2 ZXJzZSBtcmVzdWx0IHhwYXRzbGFzaCIsIiIseHBhdHNsYXNoKTsKLQkgICAgICBkZWJ1ZyhGMTEx LCJ0cmF2ZXJzZSBtcmVzdWx0IG5hbWJ1ZiIsbmFtYnVmLG1yZXN1bHQpOwotCSAgICAgIGRlYnVn KEYxMTEsInRyYXZlcnNlIG1yZXN1bHQgaXRzd2lsZCIscGwgLT4gbnBhcnQsaXRzd2lsZCk7Ci0J ICAgICAgZGVidWcoRjExMSwidHJhdmVyc2UgbXJlc3VsdCBzZWdpc2RpciIscGwgLT4gbnBhcnQs c2VnaXNkaXIpOwotCSAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgICAgaWYgKG1yZXN1 bHQgfHwJCS8qIElmIG1hdGNoIHN1Y2NlZWRlZCAqLwotCSAgICAgIHhyZWN1cnNpdmUgfHwJCS8q IE9yIHNlYXJjaCBpcyByZWN1cnNpdmUgKi8KLQkgICAgICBkZXB0aCA8IHhwYXRzbGFzaAkJLyog T3Igbm90IGRlZXAgZW5vdWdoIHRvIG1hdGNoLi4uICovCi0JICAgICAgKSB7Ci0gICAgICAgICAg ICAgIGlmICggICAgICAgICAgICAgICAgICAgICAgLyogSWYgaXQncyBub3QgYSBkaXJlY3Rvcnku Li4gKi8KLS8qCi0gIFRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBzZWdpc2RpciBpcyBhcHBhcmVu dGx5IG5vdCBzZXQgYXBwcm9wcmlhdGVseS4KLSAgSWYgSSBsZWF2ZSBpbiB0aGUgIXNlZ2lzZGly IHRlc3QsIHRoZW4gImRpciAvcmVjdXJzaXZlIGJsYWgiICh3aGVyZSBibGFoIGlzCi0gIGEgZGly ZWN0b3J5IG5hbWUpIG1pc3NlcyBzb21lIHJlZ3VsYXIgZmlsZXMgYmVjYXVzZSBzb21ldGltZXMg c2VnaXNkaXIKLSAgaXMgc2V0IGFuZCBzb21ldGltZXMgaXQncyBub3QuICBCdXQgaWYgSSBjb21t ZW50IGl0IG91dCwgdGhlbgotICAiZGlyIDxzdGFyPi88c3Rhcj4udHh0IGxpc3RzIGV2ZXJ5IGZp bGUgaW4gKiBhbmQgZG9lcyBub3QgZXZlbiBvcGVuIHVwIHRoZQotICBzdWJkaXJlY3Rvcmllcy4g IEhvd2V2ZXIsICJkaXIgL3JlYyA8c3Rhcj4vPHN0YXI+LnR4dCIgd29ya3MgcmlnaHQuCi0qLwot I2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgICAgIG1yZXN1bHQgJiYgKCFpdHNhZGlyICYm ICFzZWdpc2RpcikKLSNlbHNlCi0gICAgICAgICAgICAgICAgICBtcmVzdWx0ICYmCQkvKiBNYXRj aGVkICovCi0gICAgICAgICAgICAgICAgICAhaXRzYWRpciAmJgkJLyogc29mYXIgaXMgbm90IGEg ZGlyZWN0b3J5ICovCi0gICAgICAgICAgICAgICAgICAoKCF4cmVjdXJzaXZlICYmICFzZWdpc2Rp cikgfHwgeHJlY3Vyc2l2ZSkKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAg ICApIHsKLQkJICBkZWJ1ZyhGMTEwLAotCQkJInRyYXZlcnNlIGFkZDogbWF0Y2ggJiYgIWl0c2Fk aXIiLHNvZmFyLDApOwotCQkgIGFkZHJlc3VsdChzb2ZhcixpdHNhZGlyKTsKLQkJICBpZiAobnVt Zm5kIDwgMCkgcmV0dXJuOwotICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0c2FkaXIgJiYgKHhy ZWN1cnNpdmUgfHwgbXJlc3VsdCkpIHsKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYXRoICog eHggPSBOVUxMOwotICAgICAgICAgICAgICAgICAgKmVvcysrID0gRElSU0VQOyAgICAgIC8qIEFk ZCBkaXJlY3Rvcnkgc2VwYXJhdG9yICovCi0gICAgICAgICAgICAgICAgICAqZW9zID0gJ1wwJzsg ICAgICAgICAgLyogdG8gZW5kIG9mIHNlZ21lbnQgKi8KLSNpZmRlZiBSRUNVUlNJVkUKLSAgICAg ICAgICAgICAgICAgIC8qIENvcHkgcHJldmlvdXMgcGF0dGVybiBzZWdtZW50IHRvIHRoaXMgbmV3 IGRpcmVjdG9yeSAqLwotCi0gICAgICAgICAgICAgICAgICBpZiAoeHJlY3Vyc2l2ZSA+IDAgJiYg IShwbCAtPiBmd2QpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgeHggPSAoc3RydWN0IHBhdGgg KikgbWFsbG9jKHNpemVvZiAoc3RydWN0IHBhdGgpKTsKLSAgICAgICAgICAgICAgICAgICAgICBw bCAtPiBmd2QgPSB4eDsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoeHgpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgeHggLT4gZndkID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RyY3B5KHh4IC0+IG5wYXJ0LCBwbCAtPiBucGFydCk7IC8qIHNhZmUgKi8KLSAgICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogUkVDVVJT SVZFICovCi0gICAgICAgICAgICAgICAgICB0cmF2ZXJzZShwbCAtPiBmd2QsIHNvZmFyLCBlb3Mp OyAvKiBUcmF2ZXJzZSBuZXcgZGlyZWN0b3J5ICovCi0gICAgICAgICAgICAgIH0KLSAgICAgICAg ICB9Ci0gICAgICB9Ci0jaWZkZWYgT1BFTkRJUgotICAgIGNsb3NlZGlyKGZkKTsKLSNlbHNlIC8q ICFPUEVORElSICovCi0gICAgY2xvc2UoZmQpOwotI2VuZGlmIC8qIE9QRU5ESVIgKi8KLX0KLQot LyoKLSAqIGFkZHJlc3VsdDoKLSAqICBBZGRzIGEgcmVzdWx0IHN0cmluZyB0byB0aGUgcmVzdWx0 IGFycmF5LiAgSW5jcmVtZW50cyB0aGUgbnVtYmVyCi0gKiAgb2YgbWF0Y2hlcyBmb3VuZCwgY29w aWVzIHRoZSBmb3VuZCBzdHJpbmcgaW50byBvdXIgc3RyaW5nCi0gKiAgYnVmZmVyLCBhbmQgcHV0 cyBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpbnRvIHRoZSBjYWxsZXIncyByZXN1bHQKLSAqICBh cnJheS4gIE91ciBmcmVlIGJ1ZmZlciBwb2ludGVyIGlzIHVwZGF0ZWQuICBJZiB0aGVyZSBpcyBu bwotICogIG1vcmUgcm9vbSBpbiB0aGUgY2FsbGVyJ3MgYXJyYXksIHRoZSBudW1iZXIgb2YgbWF0 Y2hlcyBpcyBzZXQgdG8gLTEuCi0gKiBJbnB1dDogYSByZXN1bHQgc3RyaW5nLgotICogUmV0dXJu czogbm90aGluZy4KLSAqLwotc3RhdGljIFZPSUQKLWFkZHJlc3VsdChzdHIsaXRzYWRpcikgY2hh ciAqc3RyOyBpbnQgaXRzYWRpcjsgewotICAgIGludCBsZW47Ci0KLSAgICBpZiAoIWZyZWVwdHIp IHsKLQlkZWJ1ZyhGMTAwLCJhZGRyZXN1bHQgc3RyaW5nIHNwYWNlIG5vdCBpbml0J2QiLCIiLDAp OwotCWluaXRzcGFjZShtdGNocyxzc3BsZW4pOwotICAgIH0KLSAgICBpZiAoIXN0cikgc3RyID0g IiI7Ci0gICAgZGVidWcoRjExMSwiYWRkcmVzdWx0IixzdHIsaXRzYWRpcik7Ci0gICAgaWYgKCEq c3RyKQotICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGl0c2FkaXIgPCAwKSB7Ci0JaXRzYWRpciA9 IHhpc2RpcihzdHIpOwotICAgIH0KLSAgICBpZiAoKHhkaXJvbmx5ICYmICFpdHNhZGlyKSB8fCAo eGZpbG9ubHkgJiYgaXRzYWRpcikpIHsKLSAgICAgICAgZGVidWcoRjExMSwiYWRkcmVzdWx0IHNr aXAiLHN0cixpdHNhZGlyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB3aGlsZSAoc3Ry WzBdID09ICcuJyAmJiBJU0RJUlNFUChzdHJbMV0pKSAvKiBTdHJpcCBhbGwgIi4vIiBmcm9tIGZy b250ICovCi0gICAgICBzdHIgKz0gMjsKLSAgICBpZiAoLS1yZW1sZW4gPCAwKSB7ICAgICAgICAg ICAgICAgICAvKiBFbGVtZW50cyBsZWZ0IGluIGFycmF5IG9mIG5hbWVzICovCi0gICAgICAgIGRl YnVnKEYxMTEsImFkZHJlc3VsdCBBUlJBWSBGVUxMIixzdHIsbnVtZm5kKTsKLSAgICAgICAgbnVt Zm5kID0gLTE7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbGVuID0gKGludClzdHJsZW4o c3RyKTsJCS8qIFNwYWNlIHRoaXMgd2lsbCB1c2UgKi8KLSAgICBkZWJ1ZyhGMTExLCJhZGRyZXN1 bHQgbGVuIixzdHIsbGVuKTsKLQotICAgIGlmIChsZW4gPCAxKQotICAgICAgcmV0dXJuOwotCi0g ICAgaWYgKChmcmVlcHRyICsgbGVuICsgaXRzYWRpciArIDEpID4gKHNzcGFjZSArIHNzcGxlbikp IHsKLSAgICAgICAgZGVidWcoRjExMSwiYWRkcmVzdWx0IE9VVCBPRiBTUEFDRSIsc3RyLG51bWZu ZCk7Ci0jaWZkZWYgRFlOQU1JQwotCXByaW50ZigKLSI/U3RyaW5nIHNwYWNlICVkIGV4aGF1c3Rl ZCAtIHVzZSBTRVQgRklMRSBTVFJJTkdTUEFDRSB0byBpbmNyZWFzZVxuIixzc3BsZW4pOwotI2Vs c2UKLQlwcmludGYoIj9TdHJpbmcgc3BhY2UgJWQgZXhoYXVzdGVkXG4iLHNzcGxlbik7Ci0jZW5k aWYgLyogRFlOQU1JQyAqLwotICAgICAgICBudW1mbmQgPSAtMTsgICAgICAgICAgICAgICAgICAg IC8qIERvIG5vdCByZWNvcmQgaWYgbm90IGVub3VnaCBzcGFjZSAqLwotICAgICAgICByZXR1cm47 Ci0gICAgfQotICAgIHN0cmNweShmcmVlcHRyLHN0cik7CQkvKiBzYWZlICovCi0KLSAgICAvKiBU YWcgZGlyZWN0b3J5IG5hbWVzIGJ5IHB1dHRpbmcgJy8nIGF0IHRoZSBlbmQgKi8KLQotICAgIGlm IChpdHNhZGlyICYmIChmcmVlcHRyW2xlbi0xXSA9PSAnLycpKSB7Ci0gICAgICAgIGZyZWVwdHJb bGVuKytdID0gRElSU0VQOwotICAgICAgICBmcmVlcHRyW2xlbl0gPSAnXDAnOwotICAgIH0KLSAg ICBpZiAobnVtZm5kID49IG1heG5hbWVzKSB7Ci0jaWZkZWYgRFlOQU1JQwotCXByaW50ZigKLSI/ VG9vIG1hbnkgZmlsZXMgKCVkIG1heCkgLSB1c2UgU0VUIEZJTEUgTElTVFNJWkUgdG8gaW5jcmVh c2VcbiIsbWF4bmFtZXMpOwotI2Vsc2UKLQlwcmludGYoIj9Ub28gbWFueSBmaWxlcyAtICVkIG1h eFxuIixtYXhuYW1lcyk7Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotICAgICAgICBudW1mbmQgPSAt MTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdHIgPSBmcmVlcHRyOwotICAgICpyZXNw dHIrKyA9IGZyZWVwdHI7Ci0gICAgZnJlZXB0ciArPSAobGVuICsgMSk7Ci0gICAgbnVtZm5kKys7 Ci0gICAgZGVidWcoRjExMSwiYWRkcmVzdWx0IEFERCIsc3RyLG51bWZuZCk7Ci19Ci0KLSNpZmRl ZiBDT01NRU5UCi0vKgotICogbWF0Y2gocGF0dGVybixzdHJpbmcpOgotICogIHBhdHRlcm4gbWF0 Y2hlci4gIFRha2VzIGEgc3RyaW5nIGFuZCBhIHBhdHRlcm4gcG9zc2libHkgY29udGFpbmluZwot ICogIHRoZSB3aWxkY2FyZCBjaGFyYWN0ZXJzICcqJyBhbmQgJz8nLiAgUmV0dXJucyB0cnVlIGlm IHRoZSBwYXR0ZXJuCi0gKiAgbWF0Y2hlcyB0aGUgc3RyaW5nLCBmYWxzZSBvdGhlcndpc2UuCi0g KiBPcmlnbmFsbHkgYnk6IEplZmYgRGFtZW5zLCBDVUNDQSwgMTk4NAotICogTm8gbG9uZ2VyIHVz ZWQgYXMgb2YgQy1LZXJtaXQgNy4wLCBub3cgd2UgdXNlIGNrbWF0Y2goKSBpbnN0ZWFkIChja2Ns aWIuYykuCi0gKgotICogSW5wdXQ6IGEgc3RyaW5nIGFuZCBhIHdpbGRjYXJkIHBhdHRlcm4uCi0g KiBSZXR1cm5zOiAxIGlmIG1hdGNoLCAwIGlmIG5vIG1hdGNoLgotICovCi1zdGF0aWMgaW50Ci1t YXRjaChwYXR0ZXJuLCBzdHJpbmcpIGNoYXIgKnBhdHRlcm4sICpzdHJpbmc7IHsKLSAgICBjaGFy ICpwc2F2ZSA9IE5VTEwsICpzc2F2ZSA9IE5VTEw7ICAvKiBCYWNrdXAgcG9pbnRlcnMgZm9yIGZh aWx1cmUgKi8KLSAgICBpbnQgcSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBRdW90 ZSBmbGFnICovCi0KLSAgICBpZiAoKnN0cmluZyA9PSAnLicgJiYgKnBhdHRlcm4gIT0gJy4nICYm ICF4bWF0Y2hkb3QpIHsKLSAgICAgICAgZGVidWcoRjExMCwibWF0Y2ggc2tpcCIsc3RyaW5nLDAp OwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGZv ciAoOyAqcGF0dGVybiA9PSAqc3RyaW5nOyBwYXR0ZXJuKyssc3RyaW5nKyspIC8qIFNraXAgZmly c3QgKi8KLSAgICAgICAgICBpZiAoKnN0cmluZyA9PSAnXDAnKSByZXR1cm4oMSk7IC8qIEVuZCBv ZiBzdHJpbmdzLCBzdWNjZWVkICovCi0KLSAgICAgICAgaWYgKCpwYXR0ZXJuID09ICdcXCcgJiYg cSA9PSAwKSB7IC8qIFdhdGNoIG91dCBmb3IgcXVvdGVkICovCi0gICAgICAgICAgICBxID0gMTsg ICAgICAgICAgICAgICAgICAgICAgLyogbWV0YWNoYXJhY3RlcnMgKi8KLSAgICAgICAgICAgIHBh dHRlcm4rKzsgICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBhc3QgcXVvdGUgKi8KLSAgICAg ICAgICAgIGlmICgqcGF0dGVybiAhPSAqc3RyaW5nKSByZXR1cm4oMCk7Ci0gICAgICAgICAgICBj b250aW51ZTsKLSAgICAgICAgfSBlbHNlIHEgPSAwOwotCi0gICAgICAgIGlmIChxKSB7Ci0gICAg ICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKnN0 cmluZyAhPSAnXDAnICYmICpwYXR0ZXJuID09ICc/JykgewotICAgICAgICAgICAgICAgIHBhdHRl cm4rKzsgICAgICAgICAgICAgIC8qICc/JywgbGV0IGl0IG1hdGNoICovCi0gICAgICAgICAgICAg ICAgc3RyaW5nKys7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCpwYXR0ZXJuID09ICcqJykgeyAv KiAnKicgLi4uICovCi0gICAgICAgICAgICAgICAgcHNhdmUgPSArK3BhdHRlcm47ICAgICAgLyog cmVtZW1iZXIgd2hlcmUgd2Ugc2F3IGl0ICovCi0gICAgICAgICAgICAgICAgc3NhdmUgPSBzdHJp bmc7ICAgICAgICAgLyogbGV0IGl0IG1hdGNoIDAgY2hhcnMgKi8KLSAgICAgICAgICAgIH0gZWxz ZSBpZiAoc3NhdmUgIT0gTlVMTCAmJiAqc3NhdmUgIT0gJ1wwJykgeyAvKiBpZiBub3QgYXQgZW5k ICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC4uLmhhdmUg c2VlbiBhIHN0YXIgKi8KLSAgICAgICAgICAgICAgICBzdHJpbmcgPSArK3NzYXZlOyAgICAgICAv KiBza2lwIDEgY2hhciBmcm9tIHN0cmluZyAqLwotICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBw c2F2ZTsgICAgICAgIC8qIGFuZCBiYWNrIHVwIHBhdHRlcm4gKi8KLSAgICAgICAgICAgIH0gZWxz ZSByZXR1cm4oMCk7ICAgICAgICAgICAvKiBvdGhlcndpc2UganVzdCBmYWlsICovCi0gICAgICAg IH0KLSAgICB9Ci19Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKgotICBUaGUgZm9sbG93aW5n IHR3byBmdW5jdGlvbnMgYXJlIGZvciBleHBhbmRpbmcgdGlsZGUgaW4gZmlsZW5hbWVzCi0gIENv bnRyaWJ1dGVkIGJ5IEhvd2llIEtheWUsIENVQ0NBLCBkZXZlbG9wZWQgZm9yIENDTUQgcGFja2Fn ZS4KLSovCi0KLS8qICBXIEggTyBBIE0gSSAgLS0gIEdldCB1c2VyJ3MgdXNlcm5hbWUuICAqLwot Ci0vKgotICAxKSBHZXQgcmVhbCB1aWQKLSAgMikgU2VlIGlmIHRoZSAkVVNFUiBlbnZpcm9ubWVu dCB2YXJpYWJsZSBpcyBzZXQgKCRMT0dOQU1FIG9uIEFUJlQpCi0gIDMpIElmICRVU0VSJ3MgdWlk IGlzIHRoZSBzYW1lIGFzIHJ1aWQsIHJlYWxuYW1lIGlzICRVU0VSCi0gIDQpIE90aGVyd2lzZSBn ZXQgbG9nZ2VkIGluIHVzZXIncyBuYW1lCi0gIDUpIElmIHRoYXQgbmFtZSBoYXMgdGhlIHNhbWUg dWlkIGFzIHRoZSByZWFsIHVpZCByZWFsbmFtZSBpcyBsb2dpbm5hbWUKLSAgNikgT3RoZXJ3aXNl LCBnZXQgYSBuYW1lIGZvciBydWlkIGZyb20gL2V0Yy9wYXNzd2QKLSovCi1jaGFyICoKLXdob2Ft aSgpIHsKLSNpZmRlZiBEVElMREUKLSNpZmRlZiBwZHAxMQotI2RlZmluZSBXSE9MRU4gMTAwCi0j ZWxzZQotI2RlZmluZSBXSE9MRU4gMjU3Ci0jZW5kaWYgLyogcGRwMTEgKi8KLSAgICBzdGF0aWMg Y2hhciByZWFsbmFtZVtVSURCVUZMRU4rMV07ICAvKiB1c2VyJ3MgbmFtZSAqLwotICAgIHN0YXRp YyBpbnQgcnVpZCA9IC0xOyAgICAgICAgICAgICAgIC8qIHVzZXIncyByZWFsIHVpZCAqLwotICAg IGNoYXIgbG9naW5uYW1lW1VJREJVRkxFTisxXSwgZW52bmFtZVsyNTZdOyAvKiB0ZW1wIHN0b3Jh Z2UgKi8KLSAgICBjaGFyICpjOwotICAgIHN0cnVjdCBwYXNzd2QgKnA7Ci0gICAgX1BST1RPVFlQ KGV4dGVybiBjaGFyICogZ2V0bG9naW4sICh2b2lkKSApOwotCi0gICAgZGVidWcoRjExMSwid2hv YW1pIHJ1aWQgQSIscmVhbG5hbWUscnVpZCk7Ci0KLSAgICBpZiAocnVpZCAhPSAtMSkKLSAgICAg IHJldHVybihyZWFsbmFtZSk7Ci0KLSAgICBydWlkID0gcmVhbF91aWQoKTsgICAgICAgICAgICAg ICAgICAvKiBnZXQgb3VyIHVpZCAqLwotICAgIGRlYnVnKEYxMDEsIndob2FtaSBydWlkIEIiLCIi LHJ1aWQpOwotICAgIGlmIChydWlkIDwgMCkgcnVpZCA9IGdldHVpZCgpOwotICAgIGRlYnVnKEYx MDEsIndob2FtaSBydWlkIEMiLCIiLHJ1aWQpOwotCi0gIC8qIGhvdyBhYm91dCAkVVNFUiBvciAk TE9HTkFNRT8gKi8KLSAgICBpZiAoKGMgPSBnZXRlbnYoTkFNRUVOVikpICE9IE5VTEwpIHsgLyog Y2hlY2sgdGhlIGVudiB2YXJpYWJsZSAqLwotICAgICAgICBja3N0cm5jcHkoZW52bmFtZSwgYywg MjU1KTsKLQlkZWJ1ZyhGMTEwLCJ3aG9hbWkgZW52bmFtZSIsZW52bmFtZSwwKTsKLSAgICAgICAg aWYgKChwID0gZ2V0cHduYW0oZW52bmFtZSkpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChw LT5wd191aWQgPT0gcnVpZCkgeyAgICAvKiBnZXQgcGFzc3dkIGVudHJ5IGZvciBlbnZuYW1lICov Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KHJlYWxuYW1lLCBlbnZuYW1lLCBVSURCVUZMRU4p OyAvKiB1aWQncyBhcmUgc2FtZSAqLwotCQlkZWJ1ZyhGMTEwLCJ3aG9hbWkgcmVhbG5hbWUiLHJl YWxuYW1lLDApOwotICAgICAgICAgICAgICAgIHJldHVybihyZWFsbmFtZSk7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgLyogY2FuIHdlIHVzZSBsb2dpbm5hbWUoKSA/ICov Ci0KLSAgICBpZiAoKGMgPSAgZ2V0bG9naW4oKSkgIT0gTlVMTCkgeyAgICAvKiBuYW1lIGZyb20g dXRtcCBmaWxlICovCi0gICAgICAgIGNrc3RybmNweSAobG9naW5uYW1lLCBjLCBVSURCVUZMRU4p OwotCWRlYnVnKEYxMTAsIndob2FtaSBsb2dpbm5hbWUiLGxvZ2lubmFtZSwwKTsgCi0gICAgICAg IGlmICgocCA9IGdldHB3bmFtKGxvZ2lubmFtZSkpICE9IE5VTEwpIC8qIGdldCBwYXNzd2QgZW50 cnkgKi8KLSAgICAgICAgICBpZiAocC0+cHdfdWlkID09IHJ1aWQpICAgICAgICAvKiBmb3IgbG9n aW5uYW1lICovCi0gICAgICAgICAgICBja3N0cm5jcHkocmVhbG5hbWUsIGVudm5hbWUsIFVJREJV RkxFTik7IC8qIGlmIHVpZCdzIGFyZSBzYW1lICovCi0gICAgfQotCi0gIC8qIFVzZSBmaXJzdCBu YW1lIHdlIGdldCBmb3IgcnVpZCAqLwotCi0gICAgaWYgKChwID0gZ2V0cHd1aWQocnVpZCkpID09 IE5VTEwpIHsgLyogbmFtZSBmb3IgdWlkICovCi0JZGVidWcoRjEwMSwid2hvYW1pIG5vIHVzZXJu YW1lIGZvciBydWlkIiwiIixydWlkKTsgCi0gICAgICAgIHJlYWxuYW1lWzBdID0gJ1wwJzsgICAg ICAgICAgICAgLyogbm8gdXNlciBuYW1lICovCi0gICAgICAgIHJ1aWQgPSAtMTsKLSAgICAgICAg cmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBja3N0cm5jcHkocmVhbG5hbWUsIHAtPnB3X25hbWUs IFVJREJVRkxFTik7Ci0gICAgZGVidWcoRjExMCwid2hvYW1pIHJlYWxuYW1lIGZyb20gZ2V0cHd1 aWQiLHJlYWxuYW1lLDApOwotICAgIHJldHVybihyZWFsbmFtZSk7Ci0jZWxzZQotICAgIHJldHVy bihOVUxMKTsKLSNlbmRpZiAvKiBEVElMREUgKi8KLX0KLQotLyogIFQgSSBMIEQgRSBfIEUgWCBQ IEEgTiBEICAtLSAgZXhwYW5kIH51c2VyIHRvIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuICov Ci0KLWNoYXIgKgotdGlsZGVfZXhwYW5kKGRpcm5hbWUpIGNoYXIgKmRpcm5hbWU7IHsKLSNpZmRl ZiBEVElMREUKLSNpZmRlZiBwZHAxMQotI2RlZmluZSBCVUZMRU4gMTAwCi0jZWxzZQotI2RlZmlu ZSBCVUZMRU4gMjU3Ci0jZW5kaWYgLyogcGRwMTEgKi8KLSAgICBzdHJ1Y3QgcGFzc3dkICp1c2Vy OwotICAgIHN0YXRpYyBjaGFyIG9sZGRpcltCVUZMRU4rMV07Ci0gICAgc3RhdGljIGNoYXIgb2xk cmVhbGRpcltCVUZMRU4rMV07Ci0gICAgc3RhdGljIGNoYXIgdGVtcFtCVUZMRU4rMV07Ci0gICAg aW50IGksIGo7Ci0KLSAgICBkZWJ1ZyhGMTExLCJ0aWxkZV9leHBhbmQiLGRpcm5hbWUsZGlybmFt ZVswXSk7Ci0KLSAgICBpZiAoZGlybmFtZVswXSAhPSAnficpIHsgICAgICAgICAgICAgIC8qIE5v dCBhIHRpbGRlLi4ucmV0dXJuIHBhcmFtICovCi0JZGVidWcoRjAwMCwidGlsZGVfZXhwYW5kIE5P VCBUSUxERSIsIiIsZGlybmFtZVswXSk7Ci0JcmV0dXJuKGRpcm5hbWUpOwotICAgIH0KLSAgICBp ZiAoIXN0cmNtcChvbGRkaXIsZGlybmFtZSkpIHsgICAgICAvKiBTYW1lIGFzIGxhc3QgdGltZSAq LwotCWRlYnVnKEYxMTAsInRpbGRlX2V4cGFuZCBzYW1lIGFzIHByZXZpb3VzIixvbGRyZWFsZGly LDApOwotCXJldHVybihvbGRyZWFsZGlyKTsgICAgICAgICAgICAgICAvKiBzbyByZXR1cm4gb2xk IGFuc3dlci4gKi8KLSAgICB9IGVsc2UgewotCWRlYnVnKEYxMTAsInRpbGRlX2V4cGFuZCB3b3Jr aW5nLi4uIiwiIiwwKTsKLSAgICAgICAgaiA9IChpbnQpc3RybGVuKGRpcm5hbWUpOwotICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSAgICAgICAgIC8qIGZpbmQgdXNlcm5hbWUgcGFydCBv ZiBzdHJpbmcgKi8KLSAgICAgICAgICBpZiAoIUlTRElSU0VQKGRpcm5hbWVbaV0pKQotICAgICAg ICAgICAgdGVtcFtpXSA9IGRpcm5hbWVbaV07Ci0gICAgICAgICAgZWxzZSBicmVhazsKLSAgICAg ICAgdGVtcFtpXSA9ICdcMCc7ICAgICAgICAgICAgICAgICAvKiB0aWUgb2ZmIHdpdGggYSBOVUxM ICovCi0JZGVidWcoRjExMSwidGlsZGVfZXhwYW5kIGZpcnN0IHBhcnQiLHRlbXAsaSk7Ci0gICAg ICAgIGlmIChpID09IDEpIHsgICAgICAgICAgICAgICAgICAgLyogaWYganVzdCBhICJ+IiAqLwot I2lmZGVmIElLU0QKLSAgICAgICAgICAgIGlmIChpbnNlcnZlcikKLSAgICAgICAgICAgICAgdXNl ciA9IGdldHB3bmFtKHVpZGJ1Zik7ICAvKiBHZXQgaW5mbyBvbiBjdXJyZW50IHVzZXIgKi8KLSAg ICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICAgICB7Ci0gICAgICAg ICAgICAgICAgY2hhciAqIHAgPSB3aG9hbWkoKTsKLQkJZGVidWcoRjExMCwidGlsZGVfZXhwYW5k IHAiLHAsMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHApIHsKLQkJICAgIHVzZXIgPSBnZXRwd25h bShwKTsKLQkJICAgIGRlYnVnKEYxMTAsInRpbGRlX2V4cGFuZCBnZXRwd3BhbSB+Iix1c2VyLDAp OwotCQl9IGVsc2UgewotCQkgICAgdXNlciA9IE5VTEw7Ci0JCX0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgfSBlbHNlIHsKLQkgICAgZGVidWcoRjExMCwidGlsZGVfZXhwYW5kIH51c2VyIiwmdGVt cFsxXSwwKTsKLSAgICAgICAgICAgIHVzZXIgPSBnZXRwd25hbSgmdGVtcFsxXSk7ICAvKiBvdGhl cndpc2Ugb24gdGhlIHNwZWNpZmllZCB1c2VyICovCi0JICAgIGRlYnVnKEYxMTAsInRpbGRlX2V4 cGFuZCBnZXRwd3BhbSB1c2VyIix1c2VyLDApOwotICAgICAgICB9Ci0KLSAgICB9Ci0gICAgaWYg KHVzZXIgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgLyogdmFsaWQgdXNlcj8gKi8KLSAgICAg ICAgY2tzdHJuY3B5KG9sZGRpciwgZGlybmFtZSwgQlVGTEVOKTsgLyogcmVtZW1iZXIgdGhlIGRp cmVjdG9yeSAqLwotICAgICAgICBja3N0cm5jcHkob2xkcmVhbGRpcix1c2VyLT5wd19kaXIsIEJV RkxFTik7IC8qIGFuZCBob21lIGRpcmVjdG9yeSAqLwotICAgICAgICBja3N0cm5jYXQob2xkcmVh bGRpciwmZGlybmFtZVtpXSwgQlVGTEVOKTsKLSAgICAgICAgb2xkcmVhbGRpcltCVUZMRU5dID0g J1wwJzsKLSAgICAgICAgcmV0dXJuKG9sZHJlYWxkaXIpOwotICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGludmFsaWQ/ICovCi0gICAgICAgIGNrc3RybmNweShvbGRk aXIsIGRpcm5hbWUsIEJVRkxFTik7IC8qIHJlbWVtYmVyIGZvciBuZXh0IHRpbWUgKi8KLSAgICAg ICAgY2tzdHJuY3B5KG9sZHJlYWxkaXIsIGRpcm5hbWUsIEJVRkxFTik7Ci0gICAgICAgIHJldHVy bihvbGRyZWFsZGlyKTsKLSAgICB9Ci0jZWxzZQotICAgIHJldHVybihOVUxMKTsKLSNlbmRpZiAv KiBEVElMREUgKi8KLX0KLQotLyoKLSAgRnVuY3Rpb25zIGZvciBleGVjdXRpbmcgc3lzdGVtIGNv bW1hbmRzLgotICB6c3lzY21kKCkgZXhlY3V0ZXMgdGhlIHN5c3RlbSBjb21tYW5kIGluIHRoZSBu b3JtYWwsIGRlZmF1bHQgd2F5IGZvcgotICB0aGUgc3lzdGVtLiAgSW4gVU5JWCwgaXQgZG9lcyB3 aGF0IHN5c3RlbSgpIGRvZXMuICBUaHVzLCBpdHMgcmVzdWx0cwotICBhcmUgYWx3YXlzIHByZWRp Y3RhYmxlLgotICB6c2hjbWQoKSBleGVjdXRlcyB0aGUgY29tbWFuZCB1c2luZyB0aGUgdXNlcidz IHByZWZlcnJlZCBzaGVsbC4KLSovCi1pbnQKLXpzeXNjbWQocykgY2hhciAqczsgewotI2lmZGVm IGFlZ2lzCi0gICAgaWYgKG5vcHVzaCkgcmV0dXJuKC0xKTsKLSAgICBpZiAoIXByaXZfY2hrKCkp IHJldHVybihzeXN0ZW0ocykpOwotI2Vsc2UKLSAgICBQSURfVCBzaHBpZDsKLSNpZmRlZiBDT01N RU5UCi0vKiBUaGlzIGRvZXNuJ3Qgd29yay4uLiAqLwotICAgIFdBSVRfVCBzdGF0dXM7Ci0jZWxz ZQotICAgIGludCBzdGF0dXM7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgaWYgKG5vcHVz aCkgcmV0dXJuKC0xKTsKLSAgICBpZiAoKHNocGlkID0gZm9yaygpKSkgewotICAgICAgICBpZiAo c2hwaWQgPCAoUElEX1QpMCkgcmV0dXJuKC0xKTsgLyogUGFyZW50ICovCi0gICAgICAgIHdoaWxl IChzaHBpZCAhPSAoUElEX1QpIHdhaXQoJnN0YXR1cykpCi0gICAgICAgICA7Ci0gICAgICAgIHJl dHVybihzdGF0dXMpOwotICAgIH0KLSAgICBpZiAocHJpdl9jYW4oKSkgeyAgICAgICAgICAgICAg ICAgICAvKiBDaGlsZDogY2FuY2VsIGFueSBwcml2J3MgKi8KLSAgICAgICAgcHJpbnRmKCI/UHJp dmlsZWdlIGNhbmNlbGxhdGlvbiBmYWlsdXJlXG4iKTsKLSAgICAgICAgX2V4aXQoMjU1KTsKLSAg ICB9Ci0gICAgcmVzdG9yc2lncygpOwkJCS8qIFJlc3RvcmUgaWdub3JlZCBzaWduYWxzICovCi0j aWZkZWYgSFBVWDEwCi0gICAgZXhlY2woIi91c3IvYmluL3NoIiwic2giLCItYyIscyxOVUxMKTsK LSAgICBwZXJyb3IoIi91c3IvYmluL3NoIik7Ci0jZWxzZQotI2lmZGVmIFBsYW45Ci0gICAgZXhl Y2woIi9iaW4vcmMiLCAicmMiLCAiLWMiLCBzLCBOVUxMKTsKLSAgICBwZXJyb3IoIi9iaW4vcmMi KTsKLSNlbHNlCi0gICAgZXhlY2woIi9iaW4vc2giLCJzaCIsIi1jIixzLE5VTEwpOwotICAgIHBl cnJvcigiL2Jpbi9zaCIpOwotI2VuZGlmIC8qIFBsYW45ICovCi0jZW5kaWYgLyogSFBVWDEwICov Ci0gICAgX2V4aXQoMjU1KTsKLSAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTaHV0IHVwIEFOU0kgY29tcGlsZXJzLiAqLwotI2VuZGlmIC8qIGFlZ2lzICovCi19Ci0K LQotLyogIFogXyBFIFggRSBDICAtLSAgT3ZlcmxheSBvdXJzZWx2ZXMgd2l0aCBhbm90aGVyIHBy b2dyYW0gICovCi0KLSNpZm5kZWYgTk9aRVhFQwotI2lmZGVmIEhQVVg1Ci0jZGVmaW5lIE5PWkVY RUMKLSNlbHNlCi0jaWZkZWYgQVRUNzMwMAotI2RlZmluZSBOT1pFWEVDCi0jZW5kaWYgLyogQVRU NzMwMCAqLwotI2VuZGlmIC8qIEhQVVg1ICovCi0jZW5kaWYgLyogTk9aRVhFQyAqLwotCi1WT0lE Ci16X2V4ZWMocCxzLHQpIGNoYXIgKiBwLCAqKiBzOyBpbnQgdDsgeyAgLyogT3ZlcmxheSBvdXJz ZWx2ZXMgd2l0aCAicCBzLi4uIiAqLwotI2lmZGVmIE5PWkVYRUMKLSAgICBwcmludGYoIkVYRUMg L1JFRElSRUNUIE5PVCBJTVBMRU1FTlRFRCBJTiBUSElTIFZFUlNJT04gT0YgQy1LRVJNSVRcbiIp OwotICAgIGRlYnVnKEYxMTAsInpfZXhlYyBOT1QgSU1QTEVNRU5URUQiLHAsMCk7Ci0jZWxzZQot ICAgIGludCB4OwotICAgIGV4dGVybiBpbnQgdHR5ZmQ7Ci0gICAgZGVidWcoRjExMCwiel9leGVj IGNvbW1hbmQiLHAsMCk7Ci0gICAgZGVidWcoRjExMCwiel9leGVjIGFyZyAwIixzWzBdLDApOwot ICAgIGRlYnVnKEYxMTAsInpfZXhlYyBhcmcgMSIsc1sxXSwwKTsKLSAgICBkZWJ1ZyhGMTAxLCJ6 X2V4ZWMgdCIsIiIsdCk7Ci0gICAgZXJybm8gPSAwOwotICAgIGlmICh0KSB7Ci0gICAgICAgIGlm ICh0dHlmZCA+IDIpIHsKLSAgICAgICAgICAgIGR1cDIodHR5ZmQsIDApOwotICAgICAgICAgICAg ZHVwMih0dHlmZCwgMSk7Ci0gICAgICAgICAgICAvKiBkdXAyKHR0eWZkLCAyKTsgKi8KLSAgICAg ICAgICAgIGNsb3NlKHR0eWZkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXN0b3JzaWdzKCk7 CQkJLyogUmVzdG9yZSBpZ25vcmVkIHNpZ25hbHMgKi8KLSAgICB4ID0gZXhlY3ZwKHAscyk7Ci0g ICAgaWYgKHggPCAwKSBkZWJ1ZyhGMTAxLCJ6X2V4ZWMgZXJybm8iLCIiLGVycm5vKTsKLSNlbmRp ZiAvKiBOT1pFWEVDICovCi19Ci0KLS8qCi0gIFogUyBIIEMgTSBEICAtLSAgRXhlY3V0ZSBhIHNo ZWxsIGNvbW1hbmQgKG9yIHByb2dyYW0gdGhydSB0aGUgc2hlbGwpLgotCi0gIE9yaWdpbmFsIFVO SVggY29kZSBieSBILiBGaXNjaGVyOyBjb3B5cmlnaHQgcmlnaHRzIGFzc2lnbmVkIHRvIENvbHVt YmlhIFUuCi0gIEFkYXB0ZWQgdG8gdXNlIGdldHB3dWlkIHRvIGZpbmQgbG9naW4gc2hlbGwgYmVj YXVzZSBtYW55IHN5c3RlbXMgZG8gbm90Ci0gIGhhdmUgU0hFTEwgaW4gZW52aXJvbm1lbnQsIGFu ZCB0byB1c2UgZGlyZWN0IGNhbGxpbmcgb2Ygc2hlbGwgcmF0aGVyCi0gIHRoYW4gaW50ZXJtZWRp YXRlIHN5c3RlbSgpIGNhbGwuIC0tIEguIEZpc2NoZXIgKDE5ODUpOyBtYW55IGNoYW5nZXMgc2lu Y2UKLSAgdGhlbi4gIENhbGwgd2l0aCBzIHBvaW50aW5nIHRvIGNvbW1hbmQgdG8gZXhlY3V0ZS4g IFJldHVybnM6Ci0gICAtMSBvbiBmYWlsdXJlIHRvIHN0YXJ0IHRoZSBjb21tYW5kIChjYW4ndCBm aW5kLCBjYW4ndCBmb3JrLCBjYW4ndCBydW4pLgotICAgIDEgaWYgY29tbWFuZCByYW4gYW5kIGdh dmUgYW4gZXhpdCBzdGF0dXMgb2YgMC4KLSAgICAwIGlmIGNvbW1hbmQgcmFuIGFuZCBnYXZlIGEg bm9uemVybyBleGl0IHN0YXR1cy4KLSAgd2l0aCBwZXhpdHN0YXR1cyBjb250YWluaW5nIHRoZSBj b21tYW5kJ3MgZXhpdCBzdGF0dXMuCi0qLwotaW50Ci16c2hjbWQocykgY2hhciAqczsgewotICAg IFBJRF9UIHBpZDsKLQotI2lmZGVmIE5PUFVTSAotICAgIHJldHVybigwKTsKLSNlbHNlCi0gICAg aWYgKG5vcHVzaCkgcmV0dXJuKC0xKTsKLSAgICBpZiAoIXMpIHJldHVybigtMSk7Ci0gICAgd2hp bGUgKCpzID09ICcgJykgcysrOwotCi0gICAgZGVidWcoRjExMCwienNoY21kIGNvbW1hbmQiLHMs MCk7Ci0KLSNpZmRlZiBhZWdpcwotICAgIGlmICgocGlkID0gdmZvcmsoKSkgPT0gMCkgeyAgICAg ICAgIC8qIE1ha2UgY2hpbGQgcXVpY2tseSAqLwotICAgICAgICBjaGFyICpzaHBhdGgsICpzaG5h bWUsICpzaHB0cjsgIC8qIEZvciBmaW5kaW5nIGRlc2lyZWQgc2hlbGwgKi8KLQotICAgICAgICBp ZiAocHJpdl9jYW4oKSkgZXhpdCgxKTsgICAgICAgIC8qIFR1cm4gb2ZmIHByaXZzLiAqLwotICAg ICAgICBpZiAoKHNocGF0aCA9IGdldGVudigiU0hFTEwiKSkgPT0gTlVMTCkgc2hwYXRoID0gIi9j b20vc2giOwotCi0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxs IFVuaXggc3lzdGVtcyAqLwotICAgIGlmICgocGlkID0gZm9yaygpKSA9PSAwKSB7ICAgICAgICAg IC8qIE1ha2UgY2hpbGQgKi8KLSAgICAgICAgY2hhciAqc2hwYXRoLCAqc2huYW1lLCAqc2hwdHI7 ICAvKiBGb3IgZmluZGluZyBkZXNpcmVkIHNoZWxsICovCi0gICAgICAgIHN0cnVjdCBwYXNzd2Qg KnA7Ci0jaWZkZWYgSFBVWDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCAq LwotICAgICAgICBjaGFyICpkZWZzaGVsbCA9ICIvdXNyL2Jpbi9zaCI7Ci0jZWxzZQotI2lmZGVm IFBsYW45Ci0gICAgICAgIGNoYXIgKmRlZnNoZWxsID0gIi9iaW4vcmMiOwotI2Vsc2UKLSAgICAg ICAgY2hhciAqZGVmc2hlbGwgPSAiL2Jpbi9zaCI7Ci0jZW5kaWYgLyogUGxhbjkgKi8KLSNlbmRp ZiAvKiBIUFVYMTAgKi8KLSAgICAgICAgaWYgKHByaXZfY2FuKCkpIGV4aXQoMSk7ICAgICAgICAv KiBUdXJuIG9mZiBwcml2cy4gKi8KLSNpZmRlZiBDT01NRU5UCi0vKiBPbGQgd2F5IGFsd2F5cyB1 c2VkIC9ldGMvcGFzc3dkIHNoZWxsICovCi0gICAgICAgIHAgPSBnZXRwd3VpZChyZWFsX3VpZCgp KTsgICAgICAgLyogR2V0IGxvZ2luIGRhdGEgKi8KLSAgICAgICAgaWYgKHAgPT0gKHN0cnVjdCBw YXNzd2QgKikgTlVMTCB8fCAhKihwLT5wd19zaGVsbCkpCi0gICAgICAgICAgc2hwYXRoID0gZGVm c2hlbGw7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzaHBhdGggPSBwLT5wd19zaGVsbDsKLSNl bHNlCi0vKiBOZXcgd2F5IGxldHMgdXNlciBvdmVycmlkZSB3aXRoIFNIRUxMIHZhcmlhYmxlLCBi dXQgZG9lcyBub3QgcmVseSBvbiBpdC4gKi8KLS8qIFRoaXMgYWxsb3dzIHVzZXIgdG8gc3BlY2lm eSBhIGRpZmZlcmVudCBzaGVsbC4gKi8KLSAgICAgICAgc2hwYXRoID0gZ2V0ZW52KCJTSEVMTCIp OyAgICAgICAvKiBXaGF0IHNoZWxsPyAqLwotCWRlYnVnKEYxMTAsInpzaGNtZCBTSEVMTCIsc2hw YXRoLDApOwotCXsKLQkgICAgaW50IHggPSAwOwotCSAgICBpZiAoIXNocGF0aCkgewotCQl4Kys7 Ci0JICAgIH0gZWxzZSBpZiAoISpzaHBhdGgpIHsKLQkJeCsrOwotCSAgICB9Ci0JICAgIGlmICh4 KSB7Ci0JCWRlYnVnKEYxMDAsInpzaGNtZCBTSEVMTCBub3QgZGVmaW5lZCIsIiIsMCk7Ci0JCXAg PSBnZXRwd3VpZCggcmVhbF91aWQoKSApOyAvKiBHZXQgbG9naW4gZGF0YSAqLwotCQlpZiAocCA9 PSAoc3RydWN0IHBhc3N3ZCAqKU5VTEwgfHwgISoocC0+cHdfc2hlbGwpKSB7Ci0JCSAgICBzaHBh dGggPSBkZWZzaGVsbDsKLQkJfSBlbHNlIHsKLQkJICAgIHNocGF0aCA9IHAtPnB3X3NoZWxsOwot CQl9Ci0JCWRlYnVnKEYxMTAsInpzaGNtZCBzaHBhdGggZnJvbSBnZXRwd3VpZCIsc2hwYXRoLDAp OwotCSAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogYWVn aXMgKi8KLSAgICAgICAgc2hwdHIgPSBzaG5hbWUgPSBzaHBhdGg7Ci0gICAgICAgIHdoaWxlICgq c2hwdHIgIT0gJ1wwJykKLSAgICAgICAgICBpZiAoKnNocHRyKysgPT0gRElSU0VQKQotICAgICAg ICAgICAgc2huYW1lID0gc2hwdHI7Ci0JcmVzdG9yc2lncygpOwkJCS8qIFJlc3RvcmUgaWdub3Jl ZCBzaWduYWxzICovCi0JZGVidWcoRjExMCwienNoY21kIGV4ZWNsIHNocGF0aCIsc2hwYXRoLDAp OwotCWRlYnVnKEYxMTAsInpzaGNtZCBleGVjbCBzaG5hbWUiLHNobmFtZSwwKTsKLSAgICAgICAg aWYgKHMgPT0gTlVMTCB8fCAqcyA9PSAnXDAnKSB7ICAvKiBJbnRlcmFjdGl2ZSBzaGVsbCByZXF1 ZXN0ZWQ/ICovCi0JICAgIGRlYnVnKEYxMDAsInpzaGNtZCBleGVjbCBpbnRlcmFjdGl2ZSIsIiIs MCk7Ci0gICAgICAgICAgICBleGVjbChzaHBhdGgsc2huYW1lLCItaSIsTlVMTCk7IC8qIFllcywg ZG8gdGhhdCAqLwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90 aGVyd2lzZSwgKi8KLQkgICAgZGVidWcoRjExMCwienNoY21kIGV4ZWNsIGNvbW1hbmQiLHMsMCk7 Ci0gICAgICAgICAgICBleGVjbChzaHBhdGgsc2huYW1lLCItYyIscyxOVUxMKTsgLyogZXhlYyB0 aGUgZ2l2ZW4gY29tbWFuZCAqLwotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIElmIGV4ZWNsKCkgZmFpbGVkLCAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJ6c2hjbWQg ZXJybm8iLCIiLGVycm5vKTsKLQlwZXJyb3Ioc2hwYXRoKTsJCQkvKiBwcmludCByZWFzb24gYW5k ICovCi0gICAgICAgIGV4aXQoQkFEX0VYSVQpOyAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGJh ZCByZXR1cm4gY29kZS4gKi8KLQotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFBhcmVudCAqLwotCi0gICAgICAgIGludCB3c3RhdDsgICAgICAgICAgICAgICAgICAg ICAgLyogLi4uIG11c3Qgd2FpdCBmb3IgY2hpbGQgKi8KLSNpZmRlZiBDS19DSElMRAotICAgICAg ICBpbnQgY2hpbGQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIENoaWxkJ3MgZXhpdCBzdGF0dXMg Ki8KLSNlbmRpZiAvKiBDS19DSElMRCAqLwotICAgICAgICBTSUdUWVAgKCppc3RhdCkoKSwgKCpx c3RhdCkoKTsKLQotICAgICAgICBpZiAocGlkID09IChQSURfVCkgLTEpIHJldHVybigtMSk7IC8q IGZvcmsoKSBmYWlsZWQ/ICovCi0KLSAgICAgICAgaXN0YXQgPSBzaWduYWwoU0lHSU5ULFNJR19J R04pOyAvKiBMZXQgdGhlIGZvcmsgaGFuZGxlIGtleWJvYXJkICovCi0gICAgICAgIHFzdGF0ID0g c2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7IC8qIGludGVycnVwdHMgaXRzZWxmLi4uICovCi0KLQlk ZWJ1ZyhGMTEwLCJ6c2hjbWQgcGFyZW50IHdhaXRpbmcgZm9yIGNoaWxkIixzLDApOwotI2lmZGVm IENLX0NISUxECi0gICAgICAgIHdoaWxlICgoKHdzdGF0ID0gd2FpdCgmY2hpbGQpKSAhPSBwaWQp ICYmICh3c3RhdCAhPSAtMSkpCi0jZWxzZQotICAgICAgICB3aGlsZSAoKCh3c3RhdCA9IHdhaXQo KFdBSVRfVCAqKTApKSAhPSBwaWQpICYmICh3c3RhdCAhPSAtMSkpCi0jZW5kaWYgLyogQ0tfQ0hJ TEQgKi8KLSAgICAgICAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IGZv ciBmb3JrICovCi0gICAgICAgIHNpZ25hbChTSUdJTlQsaXN0YXQpOyAgICAgICAgICAgLyogUmVz dG9yZSBpbnRlcnJ1cHRzICovCi0gICAgICAgIHNpZ25hbChTSUdRVUlULHFzdGF0KTsKLSNpZmRl ZiBDS19DSElMRAotICAgICAgICBwZXhpdHN0YXQgPSAoY2hpbGQgJiAweGZmKSA/IGNoaWxkIDog Y2hpbGQgPj4gODsKLQlkZWJ1ZyhGMTAxLCJ6c2hjbWQgZXhpdCBzdGF0dXMiLCIiLHBleGl0c3Rh dCk7Ci0gICAgICAgIHJldHVybihjaGlsZCA9PSAwID8gMSA6IDApOyAgICAgLyogUmV0dXJuIGNo aWxkJ3Mgc3RhdHVzICovCi0jZW5kaWYgLyogQ0tfQ0hJTEQgKi8KLSAgICB9Ci0gICAgcmV0dXJu KDEpOwotI2VuZGlmIC8qIE5PUFVTSCAqLwotfQotCi0vKiAgSSBTIFcgSSBMIEQgIC0tICBDaGVj ayBpZiBmaWxlc3BlYyBpcyAid2lsZCIgICovCi0KLS8qCi0gIFJldHVybnM6Ci0gICAgMCB3aWxk Y2FyZHMgZGlzYWJsZWQgb3IgYXJndW1lbnQgaXMgZW1wdHkgb3IgaXMgdGhlIG5hbWUgb2YgYSBz aW5nbGUgZmlsZTsKLSAgICAxIGlmIGl0IGNvbnRhaW5zIHdpbGRjYXJkIGNoYXJhY3RlcnMuCi0g IE5vdGU6IG11c3QgbWF0Y2ggdGhlIGFsZ29yaXRobSB1c2VkIGJ5IG1hdGNoKCksIGhlbmNlIG5v IFthLXpdLCBldGMuCi0qLwotaW50Ci1pc3dpbGQoZmlsZXNwZWMpIGNoYXIgKmZpbGVzcGVjOyB7 Ci0gICAgY2hhciBjLCAqcCwgKmY7IGludCB4OwotICAgIGludCBxdW8gPSAwOwotICAgIGlmICgh ZmlsZXNwZWMpCQkJLyogU2FmZXR5ICovCi0gICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKCF3aWxk ZW5hKQkJCS8qIFdpbGRjYXJkcyBkaXNhYmxlZCAtIDEyIEp1biAyMDA1ICovCi0gICAgICByZXR1 cm4oMCk7Ci0gICAgZiA9IGZpbGVzcGVjOwotICAgIGlmICh3aWxkeHBhbmQpIHsJCQkvKiBTaGVs bCBoYW5kbGVzIHdpbGRjYXJkaW5nICovCi0gICAgICAgIGlmICgoeCA9IG56eHBhbmQoZmlsZXNw ZWMsMCkpID4gMSkKLSAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgIGlmICh4ID09IDApIHJl dHVybigwKTsgICAgICAgICAgLyogRmlsZSBkb2VzIG5vdCBleGlzdCAqLwotICAgICAgICBwID0g bWFsbG9jKE1BWE5BTUxFTiArIDIwKTsKLSAgICAgICAgem5leHQocCk7Ci0gICAgICAgIHggPSAo c3RyY21wKGZpbGVzcGVjLHApICE9IDApOwotICAgICAgICBmcmVlKHApOwotICAgICAgICBwID0g TlVMTDsKLSAgICAgICAgcmV0dXJuKHgpOwotICAgIH0gZWxzZSB7CQkJCS8qIFdlIGRvIGl0IG91 cnNlbHZlcyAqLwotICAgICAgICB3aGlsZSAoKGMgPSAqZmlsZXNwZWMrKykgIT0gJ1wwJykgewot ICAgICAgICAgICAgaWYgKGMgPT0gJ1xcJyAmJiBxdW8gPT0gMCkgewotICAgICAgICAgICAgICAg IHF1byA9IDE7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBpZiAoIXF1byAmJiAoYyA9PSAnKicgfHwgYyA9PSAnPycKLSNpZmRlZiBDS1JFR0VY Ci0jaWZuZGVmIFZNUwotICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGMgPT0gJ1snCi0jZW5k aWYgLyogVk1TICovCi0JCQkgfHwgYyA9PSAneycKLSNlbmRpZiAvKiBDS1JFR0VYICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgKSkgewotCQlkZWJ1ZyhGMTExLCJpc3dpbGQiLGYsMSk7Ci0J CXJldHVybigxKTsKLQkgICAgfQotICAgICAgICAgICAgcXVvID0gMDsKLSAgICAgICAgfQotCWRl YnVnKEYxMTEsImlzd2lsZCIsZiwwKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLX0KLQot LyoKLSAgSSBTIEQgSSBSICAtLSAgSXMgYSBEaXJlY3RvcnkuCi0KLSAgVGVsbCBpZiBzdHJpbmcg cG9pbnRlciBzIGlzIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4gIFJldHVybnMg MSBpZgotICBkaXJlY3RvcnksIDAgaWYgbm90IGEgZGlyZWN0b3J5LgotCi0gIFRoZSBmb2xsb3dp bmcgbm8gbG9uZ2VyIGFwcGxpZXM6Ci0KLSAgSWYgdGhlIGZpbGUgaXMgYSBzeW1saW5rLCB3ZSBy ZXR1cm4gMSBpZgotICBpdCBpcyBhIGRpcmVjdG9yeSBPUiBpZiBpdCBpcyBhIGxpbmsgdG8gYSBk aXJlY3RvcnkgYW5kIHRoZSAieHJlY3Vyc2l2ZSIgZmxhZwotICBpcyBOT1Qgc2V0LiAgVGhpcyBp cyB0byBhbGxvdyBwYXJzaW5nIGEgbGluayB0byBhIGRpcmVjdG9yeSBhcyBpZiBpdCB3ZXJlIGEK LSAgZGlyZWN0b3J5IChlLmcuIGluIHRoZSBDRCBvciBJRiBESVJFQ1RPUlkgY29tbWFuZCkgYnV0 IHN0aWxsIHByZXZlbnQKLSAgcmVjdXJzaXZlIHRyYXZlcnNhbCBmcm9tIHZpc2l0aW5nIHRoZSBz YW1lIGRpcmVjdG9yeSB0d2ljZS4KLSovCi0KLSNpZmRlZiBJU0RJUkNBQ0hFCi0vKiBUaGlzIHR1 cm5zIG91dCB0byBiZSB1bnNhZmUgYW5kIGdpdmVzIGxpdHRsZSBiZW5lZml0IGFueXdheS4gKi8K LS8qIFNlZSBub3RlcyAyOCBTZXAgMjAwMy4gIFRodXMgSVNESVJDQUNIRSBpcyBub3QgZGVmaW5l ZC4gKi8KLQotc3RhdGljIGNoYXIgcHJldnBhdGhbQ0tNQVhQQVRIKzRdID0geyAnXDAnLCAnXDAn IH07Ci1zdGF0aWMgaW50IHByZXZzdGF0ID0gLTE7Ci1pbnQKLWNscmRpcmNhY2hlKCkgewotICAg IGRlYnVnKEYxMDAsIkNMRUFSIElTRElSIENBQ0hFIiwiIiwwKTsKLSAgICBwcmV2c3RhdCA9IC0x OwotICAgIHByZXZwYXRoWzBdID0gTlVMOwotfQotI2VuZGlmIC8qIElTRElSQ0FDSEUgKi8KLQot aW50Ci1pc2FsaW5rKHMpIGNoYXIgKnM7IHsKLSNpZm5kZWYgQ0tTWU1MSU5LCi0gICAgcmV0dXJu KDApOwotI2Vsc2UKLSAgICBpbnQgciA9IDA7Ci0gICAgY2hhciBmaWxidWZbQ0tNQVhQQVRIKzRd OwotICAgIGlmIChyZWFkbGluayhzLGZpbGJ1ZixDS01BWFBBVEgpID4gLTEpCi0gICAgICByID0g MTsKLSAgICBkZWJ1ZyhGMTEwLCJpc2FsaW5rIHJlYWRsaW5rIixzLHIpOwotICAgIHJldHVybihy KTsKLSNlbmRpZgkvKiBDS1NZTUxJTksgKi8KLX0KLQotaW50Ci1pc2RpcihzKSBjaGFyICpzOyB7 Ci0gICAgaW50IHgsIG5lZWRybGluayA9IDAsIGlzbGluayA9IDA7Ci0gICAgc3RydWN0IHN0YXQg c3RhdGJ1ZjsKLSAgICBjaGFyIGZuYW1bQ0tNQVhQQVRIKzRdOwotCi0gICAgaWYgKCFzKSByZXR1 cm4oMCk7Ci0gICAgZGVidWcoRjExMCwiaXNkaXIgZW50cnkiLHMsMCk7Ci0jaWZkZWYgRFRJTERF CQkJCS8qIDIwMDUtMDgtMTMgKi8KLSAgICBpZiAoKnMgPT0gJ34nKSB7CQkJLyogU3RhcnRzIHdp dGggdGlsZGU/ICovCi0gICAgICAgIHMgPSB0aWxkZV9leHBhbmQocyk7CQkvKiBBdHRlbXB0IHRv IGV4cGFuZCB0aWxkZSAqLwotICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLQlkZWJ1ZyhGMTEwLCJp c2RpciB0aWxkZV9leHBhbmQiLHMsMCk7Ci0gICAgfQotI2VuZGlmIC8qIERUSUxERSAqLwotICAg IGlmICghKnMpIHJldHVybigwKTsKLQotI2lmZGVmIElTRElSQ0FDSEUKLSAgICBpZiAocHJldnN0 YXQgPiAtMSkgewotCWlmIChzWzBdID09IHByZXZwYXRoWzBdKSB7Ci0JICAgIGlmICghc3RyY21w KHMscHJldnBhdGgpKSB7Ci0JCWRlYnVnKEYxMTEsImlzZGlyIGNhY2hlIGhpdCIscyxwcmV2c3Rh dCk7Ci0JCXJldHVybihwcmV2c3RhdCk7Ci0JICAgIH0KLQl9Ci0gICAgfQotI2VuZGlmIC8qIElT RElSQ0FDSEUgKi8KLQotI2lmZGVmIENLU1lNTElOSwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFRo ZSBmb2xsb3dpbmcgb3Zlci1jbGV2ZXIgYml0IGhhcyBiZWVuIGNvbW1lbnRlZCBvdXQgYmVjYXVz ZSBpdCBwcmVzdW1lcwotICB0byBrbm93IHdoZW4gYSBzeW1saW5rIG1pZ2h0IGJlIHJlZHVuZGFu dCwgd2hpY2ggaXQgY2FuJ3QgcG9zc2libHkga25vdy4KLSAgVXNpbmcgcGxhaW4gb2xkIHN0YXQo KSBnaXZlcyBLZXJtaXQgdGhlIHNhbWUgcmVzdWx0cyBhcyBscyBhbmQgbHMgLVIsIHdoaWNoCi0g IGlzIGp1c3QgZmluZTogbm8gc3VycHJpc2VzLgotKi8KLSNpZmRlZiBVU0VfTFNUQVQKLSAgICBp ZiAoeHJlY3Vyc2l2ZSkgewotICAgICAgICB4ID0gbHN0YXQocywmc3RhdGJ1Zik7Ci0gICAgICAg IGRlYnVnKEYxMTEsImlzZGlyIGxzdGF0IixzLHgpOwotICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyog VVNFX0xTVEFUICovCi0gICAgICAgIHggPSBzdGF0KHMsJnN0YXRidWYpOwotICAgICAgICBkZWJ1 ZyhGMTExLCJpc2RpciBzdGF0IixzLHgpOwotI2lmZGVmIFVTRV9MU1RBVAotICAgIH0KLSNlbmRp ZiAvKiBVU0VfTFNUQVQgKi8KLSNlbHNlCi0gICAgeCA9IHN0YXQocywmc3RhdGJ1Zik7Ci0gICAg ZGVidWcoRjExMSwiaXNkaXIgc3RhdCIscyx4KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg aWYgKHggPT0gLTEpIHsKLSAgICAgICAgZGVidWcoRjEwMSwiaXNkaXIgZXJybm8iLCIiLGVycm5v KTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBpc2xpbmsgPSAwOwotICAgIGlmICh4 cmVjdXJzaXZlKSB7Ci0jaWZkZWYgTk9MSU5LQklUUwotICAgICAgICBuZWVkcmxpbmsgPSAxOwot I2Vsc2UKLSNpZmRlZiBTX0lTTE5LCi0gICAgICAgIGlzbGluayA9IFNfSVNMTksoc3RhdGJ1Zi5z dF9tb2RlKTsKLSAgICAgICAgZGVidWcoRjEwMSwiaXNkaXIgU19JU0xOSyBpc2xpbmsiLCIiLGlz bGluayk7Ci0jZWxzZQotI2lmZGVmIF9JRkxOSwotICAgICAgICBpc2xpbmsgPSAoX0lGTVQgJiBz dGF0YnVmLnN0X21vZGUpID09IF9JRkxOSzsKLSAgICAgICAgZGVidWcoRjEwMSwiaXNkaXIgX0lG TE5LIGlzbGluayIsIiIsaXNsaW5rKTsKLSNlbmRpZiAvKiBfSUZMTksgKi8KLSNlbmRpZiAvKiBT X0lTTE5LICovCi0jZW5kaWYgLyogTk9MSU5LQklUUyAqLwotICAgICAgICBpZiAobmVlZHJsaW5r KSB7Ci0gICAgICAgICAgICBpZiAocmVhZGxpbmsocyxmbmFtLENLTUFYUEFUSCkgPiAtMSkKLSAg ICAgICAgICAgICAgaXNsaW5rID0gMTsKLSAgICAgICAgfQotICAgIH0KLSNlbHNlCi0gICAgeCA9 IHN0YXQocywmc3RhdGJ1Zik7Ci0gICAgaWYgKHggPT0gLTEpIHsKLSAgICAgICAgZGVidWcoRjEw MSwiaXNkaXIgZXJybm8iLCIiLGVycm5vKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAg ICBkZWJ1ZyhGMTExLCJpc2RpciBzdGF0IixzLHgpOwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwot ICAgIGRlYnVnKEYxMDEsImlzZGlyIGlzbGluayIsIiIsaXNsaW5rKTsKLSAgICBkZWJ1ZyhGMTAx LCJpc2RpciBzdGF0YnVmLnN0X21vZGUiLCIiLHN0YXRidWYuc3RfbW9kZSk7Ci0gICAgeCA9IGlz bGluayA/IDAgOiAoU19JU0RJUiAoc3RhdGJ1Zi5zdF9tb2RlKSA/IDEgOiAwKTsKLSNpZmRlZiBJ U0RJUkNBQ0hFCi0gICAgcHJldnN0YXQgPSB4OwotICAgIGNrc3RybmNweShwcmV2cGF0aCxzLENL TUFYUEFUSCsxKTsKLSNlbmRpZiAvKiBJU0RJUkNBQ0hFICovCi0gICAgcmV0dXJuKHgpOwotfQot Ci0jaWZkZWYgQ0tfTUtESVIKLS8qIFNvbWUgc3lzdGVtcyBkb24ndCBoYXZlIG1rZGlyKCksIGUu Zy4gVGFuZHkgWGVuaXggMy4yLi4gKi8KLQotLyogWiBNIEsgRCBJIFIgIC0tICBDcmVhdGUgZGly ZWN0b3J5KHMpIGlmIG5lY2Vzc2FyeSAqLwotLyoKLSAgIENhbGwgd2l0aDoKLSAgICBBIHBvaW50 ZXIgdG8gYSBmaWxlIHNwZWNpZmljYXRpb24gdGhhdCBtaWdodCBjb250YWluIGRpcmVjdG9yeQot ICAgIGluZm9ybWF0aW9uLiAgVGhlIGZpbGVuYW1lIGlzIGV4cGVjdGVkIHRvIGJlIGluY2x1ZGVk LgotICAgIElmIHRoZSBmaWxlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhbnkgZGly ZWN0b3J5IHNlcGFyYXRvcnMsCi0gICAgdGhlbiBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgcGxhaW4g ZmlsZS4KLSAgICBJZiBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhl IGZpbGUgc3BlY2lmaWNhdGlvbiwKLSAgICB0aGlzIHJvdXRpbmUgdHJpZXMgdG8gY3JlYXRlIHRo ZW0gaWYgdGhleSBkb24ndCBhbHJlYWR5IGV4aXN0LgotICAgUmV0dXJuczoKLSAgICAwIG9yIGdy ZWF0ZXIgb24gc3VjY2VzcywgaS5lLiB0aGUgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIGNyZWF0ZWQu Ci0gICAtMSBvbiBmYWlsdXJlIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5Ci0qLwotaW50Ci16bWtk aXIocGF0aCkgY2hhciAqcGF0aDsgewotICAgIGNoYXIgKnhwLCAqdHAsIGM7Ci0gICAgaW50IHgs IGNvdW50ID0gMDsKLQotICAgIGlmICghcGF0aCkgcGF0aCA9ICIiOwotICAgIGlmICghKnBhdGgp IHJldHVybigtMSk7Ci0KLSNpZmRlZiBDS1JPT1QKLSAgICBkZWJ1ZyhGMTExLCJ6bWtkaXIgc2V0 cm9vdCIsY2tyb290LGNrcm9vdHNldCk7Ci0gICAgaWYgKGNrcm9vdHNldCkgaWYgKCF6aW5yb290 KHBhdGgpKSB7Ci0JZGVidWcoRjExMCwiem1rZGlyIHNldHJvb3QgdmlvbGF0aW9uIixwYXRoLDAp OwotCXJldHVybigtMSk7Ci0gICAgfQotI2VuZGlmIC8qIENLUk9PVCAqLwotCi0gICAgeCA9IHN0 cmxlbihwYXRoKTsKLSAgICBkZWJ1ZyhGMTExLCJ6bWtkaXIiLHBhdGgseCk7Ci0gICAgaWYgKHgg PCAxIHx8IHggPiBNQVhQQVRIKSAgICAgICAgICAgLyogQ2hlY2sgbGVuZ3RoICovCi0gICAgICBy ZXR1cm4oLTEpOwotICAgIGlmICghKHRwID0gbWFsbG9jKHgrMSkpKSAgICAgICAgICAgIC8qIE1h a2UgYSB0ZW1wb3JhcnkgY29weSAqLwotICAgICAgcmV0dXJuKC0xKTsKLSAgICBzdHJjcHkodHAs cGF0aCk7CQkJLyogc2FmZSAocHJlY2hlY2tlZCkgKi8KLSNpZmRlZiBEVElMREUKLSAgICBpZiAo KnRwID09ICd+JykgeyAgICAgICAgICAgICAgICAgICAvKiBTdGFydHMgd2l0aCB0aWxkZT8gKi8K LSAgICAgICAgeHAgPSB0aWxkZV9leHBhbmQodHApOyAgICAgICAgICAvKiBBdHRlbXB0IHRvIGV4 cGFuZCB0aWxkZSAqLwotICAgICAgICBpZiAoIXhwKSB4cCA9ICIiOwotICAgICAgICBpZiAoKnhw KSB7Ci0gICAgICAgICAgICBjaGFyICp6cDsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInpta2Rp ciB0aWxkZV9leHBhbmQiLHhwLDApOwotICAgICAgICAgICAgaWYgKCEoenAgPSBtYWxsb2Moc3Ry bGVuKHhwKSArIDEpKSkgeyAvKiBNYWtlIGEgcGxhY2UgZm9yIGl0ICovCi0gICAgICAgICAgICAg ICAgZnJlZSh0cCk7Ci0gICAgICAgICAgICAgICAgdHAgPSBOVUxMOwotICAgICAgICAgICAgICAg IHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcmVlKHRwKTsgICAgICAg ICAgICAgICAgICAgLyogRnJlZSBwcmV2aW91cyBidWZmZXIgKi8KLSAgICAgICAgICAgIHRwID0g enA7ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBuZXcgb25lICovCi0gICAgICAgICAg ICBzdHJjcHkodHAseHApOyAgICAgICAgICAgICAgLyogQ29weSBleHBhbmRlZCBuYW1lIHRvIG5l dyBidWZmZXIgKi8KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBEVElMREUgKi8KLSAgICBk ZWJ1ZyhGMTEwLCJ6bWtkaXIgdHAgYWZ0ZXIgdGlsZGVfZXhwYW5zaW9uIix0cCwwKTsKLSAgICB4 cCA9IHRwOwotICAgIGlmIChJU0RJUlNFUCgqeHApKSAgICAgICAgICAgICAgICAgIC8qIERvbid0 IGNyZWF0ZSByb290IGRpcmVjdG9yeSEgKi8KLSAgICAgIHhwKys7Ci0KLSAgICAvKiBHbyB0aHJ1 IGZpbGVzcGVjIGZyb20gbGVmdCB0byByaWdodC4uLiAqLwotCi0gICAgZm9yICg7ICp4cDsgeHAr KykgeyAgICAgICAgICAgICAgICAgLyogQ3JlYXRlIHBhcnRzIHRoYXQgZG9uJ3QgZXhpc3QgKi8K LSAgICAgICAgaWYgKCFJU0RJUlNFUCgqeHApKSAgICAgICAgICAgICAvKiBGaW5kIG5leHQgZGly ZWN0b3J5IHNlcGFyYXRvciAqLwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjID0gKnhw OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdvdCBvbmUuICovCi0gICAgICAgICp4cCA9IE5V TDsgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSB0aGlzIHRoZSBlbmQgb2YgdGhlIHN0cmlu Zy4gKi8KLSAgICAgICAgaWYgKCFpc2Rpcih0cCkpIHsgICAgICAgICAgICAgICAvKiBUaGlzIGRp cmVjdG9yeSBleGlzdHMgYWxyZWFkeT8gKi8KLSNpZmRlZiBDS19MT0dJTgotICAgICAgICAgICAg aWYgKGlzZ3Vlc3QpICAgICAgICAgICAgICAgICAgICAvKiBOb3QgYWxsb3dlZCBmb3IgZ3Vlc3Rz ICovCi0JICAgICAgcmV0dXJuKC0xKTsKLSNpZm5kZWYgTk9YRkVSCi0gICAgICAgICAgICAvKiBO b3IgaWYgTUtESVIgYW5kL29yIENEIGFyZSBkaXNhYmxlZCAqLwotICAgICAgICAgICAgZWxzZQot I2VuZGlmIC8qIENLX0xPR0lOICovCi0JICAgICAgaWYgKChzZXJ2ZXIKLSNpZmRlZiBJS1NECi0J CSAgIHx8IGluc2VydmVyCi0jZW5kaWYgLyogSUtTRCAqLwotCQkgICApICYmICghRU5BQkxFRChl bl9ta2QpIHx8ICFFTkFCTEVEKGVuX2N3ZCkpKQotCQlyZXR1cm4oLTEpOwotI2VuZGlmIC8qIElL U0QgKi8KLQotICAgICAgICAgICAgZGVidWcoRjExMCwiem1rZGlyIG1ha2luZyIsdHAsMCk7Ci0g ICAgICAgICAgICB4ID0gICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8sIHRyeSB0byBjcmVh dGUgaXQgKi8KLSNpZmRlZiBOT01LRElSCi0gICAgICAgICAgICAgICAtMSAgICAgICAgICAgICAg ICAgICAgICAgLyogU3lzdGVtcyB3aXRob3V0IG1rZGlyKCkgKi8KLSNlbHNlCi0gICAgICAgICAg ICAgICBta2Rpcih0cCwwNzc3KSAgICAgICAgICAgLyogVU5JWCAqLwotI2VuZGlmIC8qIE5PTUtE SVIgKi8KLSAgICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiem1rZGlyIGZhaWxlZCwgZXJybm8iLCIiLGVycm5vKTsK LSAgICAgICAgICAgICAgICBmcmVlKHRwKTsgICAgICAgICAgICAgICAvKiBGcmVlIHRlbXBvcmFy eSBidWZmZXIuICovCi0gICAgICAgICAgICAgICAgdHAgPSBOVUxMOwotICAgICAgICAgICAgICAg IHJldHVybigtMSk7ICAgICAgICAgICAgIC8qIFJldHVybiBmYWlsdXJlIGNvZGUuICovCi0gICAg ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgfQotICAgICAg ICAqeHAgPSBjOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGxhY2UgdGhlIHNlcGFyYXRv ci4gKi8KLSAgICB9Ci0gICAgZnJlZSh0cCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog RnJlZSB0ZW1wb3JhcnkgYnVmZmVyLiAqLwotICAgIHJldHVybihjb3VudCk7ICAgICAgICAgICAg ICAgICAgICAgIC8qIFJldHVybiBzdWNjZXNzIGNvZGUuICovCi19Ci0jZW5kaWYgLyogQ0tfTUtE SVIgKi8KLQotaW50Ci16cm1kaXIocGF0aCkgY2hhciAqcGF0aDsgewotI2lmZGVmIENLX0xPR0lO Ci0gICAgaWYgKGlzZ3Vlc3QpCi0gICAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIENLX0xPR0lO ICovCi0KLSAgICBpZiAoIXBhdGgpIHBhdGggPSAiIjsKLSAgICBpZiAoISpwYXRoKSByZXR1cm4o LTEpOwotCi0jaWZkZWYgQ0tST09UCi0gICAgZGVidWcoRjExMSwienJtZGlyIHNldHJvb3QiLGNr cm9vdCxja3Jvb3RzZXQpOwotICAgIGlmIChja3Jvb3RzZXQpIGlmICghemlucm9vdChwYXRoKSkg ewotCWRlYnVnKEYxMTAsInpybWRpciBzZXRyb290IHZpb2xhdGlvbiIscGF0aCwwKTsKLQlyZXR1 cm4oLTEpOwotICAgIH0KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotI2lmbmRlZiBOT01LRElSCi0g ICAgcmV0dXJuKHJtZGlyKHBhdGgpKTsKLSNlbHNlCi0gICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAv KiBOT01LRElSICovCi19Ci0KLS8qIFogRiBTIEUgRSBLICAtLSAgUG9zaXRpb24gaW5wdXQgZmls ZSBwb2ludGVyICovCi0vKgotICAgQ2FsbCB3aXRoOgotICAgIENLX09GRl9UICgzMiBvciA2NCBi aXRzKSwgMC1iYXNlZCwgaW5kaWNhdGluZyBkZXNpcmVkIHBvc2l0aW9uLgotICAgUmV0dXJuczoK LSAgICAwIG9uIHN1Y2Nlc3MuCi0gICAtMSBvbiBmYWlsdXJlLgotKi8KLSNpZm5kZWYgTk9SRVNF TkQKLWludAotI2lmZGVmIENLX0FOU0lDCi16ZnNlZWsoQ0tfT0ZGX1QgcG9zKQotI2Vsc2UKLXpm c2Vlayhwb3MpIENLX09GRl9UIHBvczsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogemZzZWVr ICovIHsKLSAgICB6aW5jbnQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBNdXN0IGVt cHR5IHRoZSBpbnB1dCBidWZmZXIgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ6ZnNlZWsiLCIiLHBvcyk7 Ci0gICAgcmV0dXJuKENLRlNFRUsoZnBbWklGSUxFXSwgcG9zLCAwKT8tMTowKTsKLX0KLSNlbmRp ZiAvKiBOT1JFU0VORCAqLwotCi0vKiAgWiBGIE4gUSBGIFAgIC0tICBDb252ZXJ0IGZpbGVuYW1l IHRvIGZ1bGx5IHF1YWxpZmllZCBhYnNvbHV0ZSBwYXRobmFtZSAqLwotCi0vKgotICBHaXZlbiBh IHBvc3NpYmx5IHVucXVhbGlmaWVkIG9yIHJlbGF0aXZlIGZpbGUgc3BlY2lmaWNhdGlvbiBmbiwg emZucWZwKCkKLSAgcmV0dXJucyB0aGUgZnVsbHkgcXVhbGlmaWVkIGZpbGVzcGVjIGZvciB0aGUg c2FtZSBmaWxlLCByZXR1cm5pbmcgYSBzdHJ1Y3QKLSAgdGhhdCBjb250YWlucyB0aGUgbGVuZ3Ro IChsZW4pIG9mIHRoZSByZXN1bHQsIGEgcG9pbnRlciAoZnBhdGgpIHRvIHRoZQotICB3aG9sZSBy ZXN1bHQsIGFuZCBhIHBvaW50ZXIgKGZuYW1lKSB0byB3aGVyZSB0aGUgZmlsZW5hbWUgc3RhcnRz LgotKi8KLXN0YXRpYyBzdHJ1Y3QgemZuZnAgZm5mcCA9IHsgMCwgTlVMTCwgTlVMTCB9OwotCi1z dHJ1Y3QgemZuZnAgKgotemZucWZwKGZuYW1lLCBidWZsZW4sIGJ1ZikgIGNoYXIgKiBmbmFtZTsg aW50IGJ1ZmxlbjsgY2hhciAqIGJ1ZjsgewotICAgIGNoYXIgKiBzOwotICAgIGludCBsZW47Ci0j aWZkZWYgTUFYUEFUSExFTgotICAgIGNoYXIgemZudG1wW01BWFBBVEhMRU4rNF07Ci0jZWxzZQot ICAgIGNoYXIgemZudG1wW0NLTUFYUEFUSCs0XTsKLSNlbmRpZiAvKiBNQVhQQVRITEVOICovCi0K LSAgICBjaGFyIHNiWzMyXSwgKiB0bXA7Ci0gICAgaW50IGkgPSAwLCBqID0gMCwgayA9IDAsIHgg PSAwLCB5ID0gMDsKLSAgICBpbnQgaXRzYWRpciA9IDA7Ci0KLSAgICBzID0gZm5hbWU7Ci0gICAg aWYgKCFzKQotICAgICAgcmV0dXJuKE5VTEwpOwotICAgIGlmICghKnMpCi0gICAgICByZXR1cm4o TlVMTCk7Ci0gICAgaWYgKCFidWYpCi0gICAgICByZXR1cm4oTlVMTCk7Ci0KLSAgICAvKiBJbml0 aWFsaXplIHRoZSBkYXRhIHN0cnVjdHVyZSAqLwotCi0gICAgZm5mcC5sZW4gPSBja3N0cm5jcHko YnVmLGZuYW1lLGJ1Zmxlbik7Ci0gICAgZm5mcC5mcGF0aCA9IGJ1ZjsKLSAgICBmbmZwLmZuYW1l ID0gTlVMTDsKLSAgICBsZW4gPSBidWZsZW47Ci0gICAgZGVidWcoRjExMSwiemZucWZwIGZuYW1l IixmbmFtZSxsZW4pOwotCi0jaWZkZWYgRFRJTERFCi0gICAgaWYgKCpzID09ICd+JykgeyAgICAg ICAgICAgICAgICAgICAgLyogU3RhcnRzIHdpdGggdGlsZGU/ICovCi0gICAgICAgIGNoYXIgKiB4 cDsKLSAgICAgICAgeHAgPSB0aWxkZV9leHBhbmQocyk7ICAgICAgICAgICAvKiBBdHRlbXB0IHRv IGV4cGFuZCB0aWxkZSAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJ6Zm5xZnAgeHAiLHhwLDApOyAg IC8qIChyZWFscGF0aCgpIGRvZXNuJ3QgZG8gdGhpcykgKi8KLSAgICAgICAgaWYgKCF4cCkgeHAg PSAiIjsKLSAgICAgICAgaWYgKCp4cCkKLSAgICAgICAgICBzID0geHA7Ci0gICAgfQotI2VuZGlm IC8qIERUSUxERSAqLwotCi0jaWZkZWYgQ0tSRUFMUEFUSAotCi0vKiBOLkIuOiBUaGUgcmVhbHBh dGgoKSByZXN1bHQgYnVmZmVyIE1VU1QgYmUgTUFYUEFUSExFTiBieXRlcyBsb25nICovCi0vKiBv dGhlcndpc2Ugd2Ugd3JpdGUgb3ZlciBtZW1vcnkuICovCi0KLSAgICBpZiAoIXJlYWxwYXRoKHMs emZudG1wKSkgewotICAgICAgICBkZWJ1ZyhGMTExLCJ6Zm5xZnAgcmVhbHBhdGggZmFpbHMiLHMs ZXJybm8pOwotI2lmZGVmIENPTU1FTlQKLQlpZiAoZXJybm8gIT0gRU5PRU5UKQotCSAgcmV0dXJu KE5VTEwpOwotI2Vsc2UKLQkvKiBJZiByZWFscGF0aCgpIGZhaWxzIHVzZSB0aGUgZG8taXQteW91 cnNlbGYgbWV0aG9kICovCi0JLyogMTYgSmFuIDIwMDIgKi8KLQlnb3RvIG5vcmVhbHBhdGg7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0KLSAgICBsZW4gPSBzdHJsZW4oemZudG1wKTsKLSAg ICBpZiAobGVuID4gYnVmbGVuKSB7Ci0JZGVidWcoRjExMSwiemZucWZwIHJlc3VsdCB0b28gbG9u ZyIsY2tpdG9hKGJ1ZmxlbiksbGVuKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfSBlbHNlIHsKLQlj a3N0cm5jcHkoYnVmLHpmbnRtcCxidWZsZW4pOwotICAgIH0KLSAgICBpZiAoYnVmW2xlbi0xXSAh PSAnLycpIHsKLQlpZiAoKGl0c2FkaXIgPSBpc2RpcihidWYpKSAmJiBsZW4gPCAoYnVmbGVuIC0g MSkpIHsKLQkgICAgYnVmW2xlbisrXSA9ICcvJzsKLQkgICAgYnVmW2xlbl0gPSBOVUw7Ci0JfQot ICAgIH0KLSAgICBmbmZwLmxlbiA9IGxlbjsKLSAgICBmbmZwLmZwYXRoID0gYnVmOwotICAgIGRl YnVnKEYxMTAsInpmbnFmcCByZWFscGF0aCBwYXRoIixmbmZwLmZwYXRoLDApOwotICAgIHRtcCA9 IGJ1ZiArIGZuZnAubGVuIC0gMTsKLSAgICBpZiAoIWl0c2FkaXIpIHsKLQl3aGlsZSAodG1wID49 IGJ1ZikgewotCSAgICBpZiAoKnRtcCA9PSAnLycpIHsKLQkJZm5mcC5mbmFtZSA9IHRtcCArIDE7 Ci0JCWRlYnVnKEYxMTAsInpmbnFmcCByZWFscGF0aCBuYW1lIixmbmZwLmZuYW1lLDApOwotCQli cmVhazsKLQkgICAgfQotCSAgICB0bXAtLTsKLQl9Ci0gICAgfQotICAgIHJldHVybigmZm5mcCk7 Ci0KLSNlbmRpZiAvKiBDS1JFQUxQQVRIICovCi0KLSAgbm9yZWFscGF0aDoKLQotICAgIHRtcCA9 IHpmbnRtcDsKLSAgICB3aGlsZSAoKnMpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1v dmUgbGVhZGluZyAiLi8iICgwIG9yIG1vcmUpICovCi0gICAgICAgIGRlYnVnKEYxMTAsInpmbnFm cCB3aGlsZSAqcyIscywwKTsKLSAgICAgICAgaWYgKCpzID09ICcuJyAmJiAqKHMrMSkgPT0gJy8n KSB7Ci0gICAgICAgICAgICBzICs9IDI7Ci0gICAgICAgICAgICB3aGlsZSAoKnMgPT0gJy8nKSBz Kys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoISpz KSByZXR1cm4oTlVMTCk7Ci0gICAgaWYgKCpzID09ICcvJykgeyAgICAgICAgICAgICAgICAgICAg LyogUGF0aG5hbWUgaXMgYWJzb2x1dGUgKi8KLSAgICAgICAgY2tzdHJuY3B5KGJ1ZixzLGxlbik7 Ci0gICAgICAgIHggPSBzdHJsZW4oYnVmKTsKLSAgICAgICAgeSA9IDA7Ci0gICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGF0aG5hbWUgaXMgcmVsYXRpdmUgKi8KLSAg ICAgICAgY2hhciAqIHA7Ci0gICAgICAgIGlmIChwID0gemd0ZGlyKCkpIHsgICAgICAgICAgICAg LyogU28gZ2V0IGN1cnJlbnQgZGlyZWN0b3J5ICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6 Zm5xZnAgemd0ZGlyIixwLDApOwotICAgICAgICAgICAgeCA9IGNrc3RybmNweShidWYscCxsZW4p OwotICAgICAgICAgICAgYnVmW3grK10gPSAnLyc7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6 Zm5xZnAgYnVmIDEiLGJ1ZiwwKTsKLSAgICAgICAgICAgIGxlbiAtPSB4OyAgICAgICAgICAgICAg ICAgICAvKiBIb3cgbXVjaCByb29tIGxlZnQgaW4gYnVmZmVyICovCi0gICAgICAgICAgICBpZiAo KHkgPSAoaW50KXN0cmxlbihzKSkgPiBsZW4pIC8qIElmIGVub3VnaCByb29tLi4uICovCi0gICAg ICAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICAgICAgICAgIGNrc3RybmNweShidWYreCxzLGxl bik7ICAgICAvKiAuLi4gYXBwZW5kIHRoZSBmaWxlbmFtZSAqLwotICAgICAgICAgICAgZGVidWco RjExMCwiemZucWZwIGJ1ZiAyIixidWYsMCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICByZXR1cm4oTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBCdWYgbm93IGhvbGRz IGZ1bGwgcGF0aCBidXQgbWF5YmUgY29udGFpbmluZyBzb21lIC4gb3IgLi4gdHJpY2tzICovCi0K LSAgICBqID0geCArIHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2Ygd2hh dCdzIGluIGJ1ZiAqLwotICAgIGxlbiA9IGo7Ci0gICAgZGVidWcoRjEwMSwiemZucWZwIGxlbiIs IiIsbGVuKTsKLQotICAgIC8qIENhdGNoIGRhbmdsaW5nICIvLiIgb3IgIi8uLiIgKi8KLSAgICBp ZiAoKGogPiAxICYmIGJ1ZltqLTFdID09ICcuJyAmJiBidWZbai0yXSA9PSAnLycpIHx8Ci0gICAg ICAgIChqID4gMiAmJiBidWZbai0xXSA9PSAnLicgJiYgYnVmW2otMl0gPT0gJy4nICYmIGJ1Zltq LTNdID09ICcvJykpIHsKLSAgICAgICAgaWYgKGogPCBidWZsZW4gLSAyKSB7Ci0gICAgICAgICAg ICBidWZbal0gPSAnLyc7Ci0gICAgICAgICAgICBidWZbaisxXSA9IE5VTDsKLSAgICAgICAgfQot ICAgIH0KLSAgICBqID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBqID0gcG9z aXRpb24gb2YgcmlnaHRtb3N0ICIvIiAqLwotICAgIGkgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGkgPSBkZXN0aW5hdGlvbiBpbmRleCAqLwotICAgIHRtcFtpXSA9IE5VTDsg ICAgICAgICAgICAgICAgICAgICAgIC8qIGRlc3RpbmF0aW9uIGlzIHRlbXBvcmFyeSBidWZmZXIg ICovCi0KLSAgICBmb3IgKHggPSAwOyB4IDwgbGVuOyB4KyspIHsgICAgICAgICAvKiB4ID0gc291 cmNlIGluZGV4ICovCi0gICAgICAgIGlmIChidWZbeF0gPT0gJy8nKSB7Ci0gICAgICAgICAgICBm b3IgKGsgPSAwOyBrIDwgNDsgaysrKSB7Ci0gICAgICAgICAgICAgICAgc2Jba10gPSBidWZbeCtr XTsKLSAgICAgICAgICAgICAgICBzYltrKzFdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBpZiAo IXNiW2tdKSBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghc3RybmNtcChz YiwiLy4vIiwzKSkgeyAvKiBFbGltaW5hdGUgIi4vIiBpbiAiLy4vIiAqLwotICAgICAgICAgICAg ICAgIHggKz0gMTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxz ZSBpZiAoIXN0cm5jbXAoc2IsIi8vIiwyKSkgeyAvKiBDaGFuZ2UgIi8vIiB0byAiLyIgKi8KLSAg ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAo c2IsIi8uLi8iLDQpKSB7IC8qICIuLiIgaW4gcGF0aCAqLwotICAgICAgICAgICAgICAgIGZvciAo ayA9IGkgLSAxOyBrID49IDA7IGstLSkgeyAvKiBCYWNrIHVwIG9uZSBsZXZlbCAqLwotICAgICAg ICAgICAgICAgICAgICBpZiAodG1wW2tdID09ICcvJykgewotICAgICAgICAgICAgICAgICAgICAg ICAgaSA9IGs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bXBbaV0gPSBOVUw7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICB4ICs9IDI7Ci0gICAgICAgICAgICAgICAgY29udGlu dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgPj0gKGJ1ZmxlbiAt IDEpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6Zm5xZnAgb3ZlcmZsb3ciLHRtcCxpKTsK LSAgICAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICAgICAgfQotICAgICAgICB0bXBbaSsrXSA9 IGJ1Zlt4XTsgICAgICAgICAgICAgIC8qIFJlZ3VsYXIgY2hhcmFjdGVyLCBjb3B5ICovCi0gICAg ICAgIHRtcFtpXSA9IE5VTDsKLSAgICAgICAgaWYgKGJ1Zlt4XSA9PSAnLycpICAgICAgICAgICAg ICAvKiBSZW1lbWJlciByaWdodG1vc3QgIi8iICovCi0gICAgICAgICAgaiA9IGk7Ci0gICAgfQot ICAgIGNrc3RybmNweShidWYsdG1wLGJ1Zmxlbi0xKTsgICAgICAgIC8qIENvcHkgdGhlIHJlc3Vs dCBiYWNrICovCi0KLSAgICBidWZbYnVmbGVuLTFdID0gTlVMOwotICAgIGlmICghYnVmWzBdKSB7 ICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGVtcHR5LCBzYXkgcm9vdCAqLwotICAgICAgICBi dWZbMF0gPSAnLyc7Ci0gICAgICAgIGJ1ZlsyXSA9IE5VTDsKLSAgICAgICAgaiA9IDA7Ci0gICAg ICAgIGkgPSAxOwotICAgIH0KLSAgICBpZiAoKGl0c2FkaXIgPSBpc2RpcihidWYpKSkgewotCWlm IChidWZbaS0xXSAhPSAnLycgJiYgaSA8IChidWZsZW4gLSAxKSkgewotCSAgICBidWZbaSsrXSA9 ICcvJzsKLQkgICAgYnVmW2ldID0gTlVMOwotCX0KLSAgICB9Ci0gICAgaWYgKCFpdHNhZGlyICYm IChqID4gLTEpKSB7CQkvKiBTZXQgcG9pbnRlciB0byBiYXNlbmFtZSAqLwotICAgICAgICBmbmZw LmZuYW1lID0gKGNoYXIgKikoYnVmICsgaik7Ci0gICAgICAgIGZuZnAuZnBhdGggPSAoY2hhciAq KWJ1ZjsKLSAgICAgICAgZm5mcC5sZW4gPSBpOwotICAgICAgICBkZWJ1ZyhGMTExLCJ6Zm5xZnAg cGF0aCIsZm5mcC5mcGF0aCxpKTsKLSAgICAgICAgZGVidWcoRjExMCwiemZucWZwIG5hbWUiLGZu ZnAuZm5hbWUsMCk7Ci0gICAgICAgIHJldHVybigmZm5mcCk7Ci0gICAgfQotICAgIHJldHVybihO VUxMKTsKLX0KLQotLyogIFogQyBNIFAgRiBOICAtLSAgQ29tcGFyZSB0d28gZmlsZW5hbWVzICAq LwotCi0vKiAgUmV0dXJucyAxIGlmIHRoZSB0d28gbmFtZXMgcmVmZXIgdG8gdGhlIHNhbWUgZXhp c3RpbmcgZmlsZSwgMCBvdGhlcndpc2UuICovCi0KLWludAotemNtcGZuKHMxLHMyKSBjaGFyICog czEsICogczI7IHsKLSAgICBjaGFyIGJ1ZjFbQ0tNQVhQQVRIKzFdOwotICAgIGNoYXIgYnVmMltD S01BWFBBVEgrMV07Ci0KLSNpZmRlZiBVU0VfTFNUQVQKLSAgICBjaGFyIGxpbmtuYW1lW0NLTUFY UEFUSCsxXTsKLSAgICBzdHJ1Y3Qgc3RhdCBidWY7Ci0jZW5kaWYgLyogVVNFX0xTVEFUICovCi0g ICAgaW50IHgsIHJjID0gMDsKLQotICAgIGlmICghczEpIHMxID0gIiI7Ci0gICAgaWYgKCFzMikg czIgPSAiIjsKLSAgICBpZiAoISpzMSB8fCAhKnMyKSByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDS1NZ TUxJTksgICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSdyZSBkb2luZyBzeW1saW5rcz8gKi8K LSNpZmRlZiBVU0VfTFNUQVQgICAgICAgICAgICAgICAgICAgICAgICAvKiBPSyB0byB1c2UgbHN0 YXQoKT8gKi8KLSAgICB4ID0gbHN0YXQoczEsJmJ1Zik7Ci0gICAgaWYgKHggPiAtMSAmJgkJCS8q IE5vdyBzZWUgaWYgaXQncyBhIHN5bWxpbmsgKi8KLSNpZmRlZiBTX0lTTE5LCi0gICAgICAgIFNf SVNMTksoYnVmLnN0X21vZGUpCi0jZWxzZQotI2lmZGVmIF9JRkxOSwotICAgICAgICAoKF9JRk1U ICYgYnVmLnN0X21vZGUpID09IF9JRkxOSykKLSNlbmRpZiAvKiBfSUZMTksgKi8KLSNlbmRpZiAv KiBTX0lTTE5LICovCi0gICAgICAgICkgewotICAgICAgICBsaW5rbmFtZVswXSA9ICdcMCc7ICAg ICAgICAgICAgIC8qIEdldCB0aGUgbmFtZSAqLwotICAgICAgICB4ID0gcmVhZGxpbmsoczEsbGlu a25hbWUsQ0tNQVhQQVRIKTsKLSAgICAgICAgaWYgKHggPiAtMSAmJiB4IDwgQ0tNQVhQQVRIKSB7 ICAvKiBJdCdzIGEgbGluayAqLwotICAgICAgICAgICAgbGlua25hbWVbeF0gPSAnXDAnOwotCSAg ICBzMSA9IGxpbmtuYW1lOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIFVTRV9MU1RBVCAq LwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotCi0gICAgaWYgKHpmbnFmcChzMSxDS01BWFBBVEgs YnVmMSkpIHsJLyogQ29udmVydCB0byBmdWxsIHBhdGhuYW1lICovCi0KLSNpZmRlZiBDS1NZTUxJ TksJCQkvKiBTYW1lIGRlYWwgZm9yIHNlY29uZCBuYW1lLi4uICovCi0jaWZkZWYgVVNFX0xTVEFU Ci0JeCA9IGxzdGF0KHMyLCZidWYpOwotCWlmICh4ID4gLTEgJiYKLSNpZmRlZiBTX0lTTE5LCi0J ICAgIFNfSVNMTksoYnVmLnN0X21vZGUpCi0jZWxzZQotI2lmZGVmIF9JRkxOSwotCSAgICAoKF9J Rk1UICYgYnVmLnN0X21vZGUpID09IF9JRkxOSykKLSNlbmRpZiAvKiBfSUZMTksgKi8KLSNlbmRp ZiAvKiBTX0lTTE5LICovCi0JICAgICkgewotCSAgICBsaW5rbmFtZVswXSA9ICdcMCc7Ci0JICAg IHggPSByZWFkbGluayhzMixsaW5rbmFtZSxDS01BWFBBVEgpOwotCSAgICBpZiAoeCA+IC0xICYm IHggPCBDS01BWFBBVEgpIHsKLQkJbGlua25hbWVbeF0gPSAnXDAnOwotCQlzMiA9IGxpbmtuYW1l OwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIFVTRV9MU1RBVCAqLwotI2VuZGlmIC8qIENLU1lNTElO SyAqLwotCWlmICh6Zm5xZnAoczIsQ0tNQVhQQVRILGJ1ZjIpKSB7Ci0JICAgIGRlYnVnKEYxMTAs InpjbXBmbiBzMSIsYnVmMSwwKTsKLQkgICAgZGVidWcoRjExMCwiemNtcGZuIHMyIixidWYyLDAp OwotCSAgICBpZiAoIXN0cm5jbXAoYnVmMSxidWYyLENLTUFYUEFUSCkpCi0JICAgICAgcmMgPSAx OwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiemNtcGZuIHJlc3VsdCIsIiIscmMpOwotICAg IHJldHVybihyYyk7Ci19Ci0KLSNpZmRlZiBDS1JPT1QKLQotLyogVXNlci1tb2RlIGNocm9vdCgp IGltcGxlbWVudGF0aW9uICovCi0KLWludAotenNldHJvb3QocykgY2hhciAqIHM7IHsJCQkvKiBT ZXRzIHRoZSByb290ICovCi0gICAgY2hhciBidWZbQ0tNQVhQQVRIKzFdOwotICAgIGlmICghcykg cmV0dXJuKC0xKTsKLSAgICBpZiAoISpzKSByZXR1cm4oLTEpOwotICAgIGRlYnVnKEYxMTAsInpz ZXRyb290IixzLDApOwotICAgIGlmICghaXNkaXIocykpIHJldHVybigtMik7Ci0gICAgaWYgKCF6 Zm5xZnAocyxDS01BWFBBVEgsYnVmKSkJLyogR2V0IGZ1bGwsIHJlYWwgcGF0aCAqLwotICAgICAg cmV0dXJuKC0zKTsKLSAgICBpZiAoYWNjZXNzKGJ1ZixSX09LKSA8IDApIHsJCS8qIENoZWNrIGFj Y2VzcyAqLwotCWRlYnVnKEYxMTAsInpzZXRyb290IGFjY2VzcyBkZW5pZWQiLGJ1ZiwwKTsKLQly ZXR1cm4oLTQpOwotICAgIH0KLSAgICBzID0gYnVmOwotICAgIGlmIChja3Jvb3RzZXQpIHsJCQkv KiBJZiByb290IGFscmVhZHkgc2V0ICovCi0JaWYgKCF6aW5yb290KHMpKSB7CQkvKiBtYWtlIHN1 cmUgbmV3IHJvb3QgaXMgaW4gaXQgKi8KLQkgICAgZGVidWcoRjExMCwienNldHJvb3QgbmV3IHJv b3Qgbm90IGluIHJvb3QiLGNrcm9vdCwwKTsKLQkgICAgcmV0dXJuKC01KTsKLQl9Ci0gICAgfQot ICAgIGlmICh6Y2hkaXIoYnVmKSA8IDEpIHJldHVybigtNCk7CS8qIENoYW5nZSBkaXJlY3Rvcnkg dG8gbmV3IHJvb3QgKi8KLSAgICBja3Jvb3RzZXQgPSBja3N0cm5jcHkoY2tyb290LGJ1ZixDS01B WFBBVEgpOyAvKiBOb3cgc2V0IHRoZSBuZXcgcm9vdCAqLwotICAgIGlmIChja3Jvb3RbY2tyb290 c2V0LTFdICE9ICcvJykgewotCWNrcm9vdFtja3Jvb3RzZXQrK10gPSAnLyc7Ci0JY2tyb290W2Nr cm9vdHNldF0gPSAnXDAnOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ6c2V0cm9vdCByb290c2V0 Iixja3Jvb3QsY2tyb290c2V0KTsKLSAgICBja3Jvb3RlcnIgPSAwOwkJCS8qIFJlc2V0IGVycm9y IGZsYWcgKi8KLSAgICByZXR1cm4oMSk7Ci19Ci0KLWNoYXIgKgotemdldHJvb3QoKSB7CQkJCS8q IFJldHVybnMgdGhlIHJvb3QgKi8KLSAgICBpZiAoIWNrcm9vdHNldCkKLSAgICAgIHJldHVybihO VUxMKTsKLSAgICByZXR1cm4oKGNoYXIgKilja3Jvb3QpOwotfQotCi1pbnQKLXppbnJvb3Qocykg Y2hhciAqIHM7IHsJCQkvKiBDaGVja3MgaWYgZmlsZSBzIGlzIGluIHRoZSByb290ICovCi0gICAg aW50IHgsIG47Ci0gICAgc3RydWN0IHpmbmZwICogZiA9IE5VTEw7Ci0gICAgY2hhciBidWZbQ0tN QVhQQVRIKzJdOwotCi0gICAgZGVidWcoRjExMSwiemlucm9vdCBzZXRyb290Iixja3Jvb3QsY2ty b290c2V0KTsKLSAgICBja3Jvb3RlcnIgPSAwOwkJCS8qIFJlc2V0IGdsb2JhbCBlcnJvciBmbGFn ICovCi0gICAgaWYgKCFja3Jvb3RzZXQpCQkJLyogUm9vdCBub3Qgc2V0ICovCi0gICAgICByZXR1 cm4oMSk7CQkJLyogc28gaXQncyBvayAtIG5vIG5lZWQgdG8gY2hlY2sgKi8KLSAgICBpZiAoIShm ID0gemZucWZwKHMsQ0tNQVhQQVRILGJ1ZikpKQkvKiBHZXQgZnVsbCBhbmQgcmVhbCBwYXRobmFt ZSAqLwotICAgICAgcmV0dXJuKDApOwkJCS8qIEZhaWwgaWYgd2UgY2FuJ3QgICovCi0gICAgbiA9 IGYtPmxlbjsJCQkJLyogTGVuZ3RoIG9mIGZ1bGwgcGF0aG5hbWUgKi8KLSAgICBkZWJ1ZyhGMTEx LCJ6aW5yb290IG4iLGJ1ZixuKTsKLSAgICBpZiAobiA8IChja3Jvb3RzZXQgLSAxKSB8fCBuID4g Q0tNQVhQQVRIKSB7CS8qIEJhZCBsZW5ndGggKi8KLQlja3Jvb3RlcnIgPSAxOwkJCSAgICAgICAg LyogRmFpbCAqLwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKGlzZGlyKGJ1ZikgJiYgYnVm W24tMV0gIT0gJy8nKSB7ICAvKiBJZiBpdCdzIGEgZGlyZWN0b3J5IG5hbWUgKi8KLQlidWZbbisr XSA9ICcvJzsJCQkgIC8qIG1ha2Ugc3VyZSBpdCBlbmRzIHdpdGggJy8nICovCi0JYnVmW25dID0g J1wwJzsKLSAgICB9Ci0gICAgeCA9IHN0cm5jbXAoYnVmLGNrcm9vdCxja3Jvb3RzZXQpOwkvKiBD b21wYXJlLCBjYXNlLXNlbnNpdGl2ZSAqLwotICAgIGRlYnVnKEYxMTEsInppbnJvb3QgY2hlY2tl ZCIsYnVmLHgpOwotICAgIGlmICh4ID09IDApCQkJCS8qIE9LICovCi0gICAgICByZXR1cm4oMSk7 Ci0gICAgY2tyb290ZXJyID0gMTsJCQkvKiBOb3QgT0sgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0j ZW5kaWYgLyogQ0tST09UICovCi0KLSNpZmRlZiBDS19MT0dJTgotLyoKLSAgVGhlIGZvbGxvd2lu ZyBjb2RlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHVzZXIgbG9naW4gYW5kIGxvZ291dAotICBpbmNs dWRpbmcgYW5vbnltb3VzIGFjY291bnRzLiAgSWYgdGhpcyBmZWF0dXJlIGlzIHRvIGJlIHN1cHBv cnRlZAotICBvdXRzaWRlIG9mIFVOSVgsIGl0IHNob3VsZCBiZSBzcHJlYWQgb3V0IGFtb25nIHRo ZSBjaz9maW8uYyBtb2R1bGVzLi4uCi0qLwotI2lmbmRlZiBfUEFUSF9CU0hFTEwKLSNkZWZpbmUg X1BBVEhfQlNIRUxMICAgICIvdXNyL2Jpbi9iYXNoIgotI2VuZGlmIC8qIF9QQVRIX0JTSEVMTCAq LwotI2lmbmRlZiBfUEFUSF9GVFBVU0VSUwotI2RlZmluZSBfUEFUSF9GVFBVU0VSUyAgIi9ldGMv ZnRwdXNlcnMiCi0jZW5kaWYgLyogX1BBVEhfRlRQVVNFUlMgKi8KLQotLyoKLSAqIEhlbHBlciBm dW5jdGlvbiBmb3Igc2dldHB3bmFtKCkuCi0gKi8KLWNoYXIgKgotc2dldHNhdmUocykgY2hhciAq czsgewotICAgIGNoYXIgKm5ldyA9IG1hbGxvYygodW5zaWduZWQpIHN0cmxlbihzKSArIDEpOwot ICAgIGlmIChuZXcgPT0gTlVMTCkgewotICAgICAgICBwcmludGYoIj9Mb2NhbCByZXNvdXJjZSBm YWlsdXJlOiBtYWxsb2NcbiIpOwotICAgICAgICBleGl0KDEpOwotICAgICAgICAvKiBOT1RSRUFD SEVEICovCi0gICAgfQotICAgICh2b2lkKSBzdHJjcHkobmV3LCBzKTsJCS8qIHNhZmUgKi8KLSAg ICByZXR1cm4gKG5ldyk7Ci19Ci0KLS8qCi0gKiBTYXZlIHRoZSByZXN1bHQgb2YgZ2V0cHduYW0o KS4gIFVzZWQgZm9yIFVTRVIgY29tbWFuZCwgc2luY2UKLSAqIHRoZSBkYXRhIHJldHVybmVkIG11 c3Qgbm90IGJlIGNsb2JiZXJlZCBieSBhbnkgb3RoZXIgY29tbWFuZAotICogKGUuZy4sIGdsb2Ji aW5nKS4KLSAqLwotc3RydWN0IHBhc3N3ZCAqCi1zZ2V0cHduYW0obmFtZSkgY2hhciAqbmFtZTsg ewotICAgIHN0YXRpYyBzdHJ1Y3QgcGFzc3dkIHNhdmU7Ci0gICAgcmVnaXN0ZXIgc3RydWN0IHBh c3N3ZCAqcDsKLSNpZmRlZiBDS19TSEFET1cKLSAgICByZWdpc3RlciBzdHJ1Y3Qgc3B3ZCAqc3A7 Ci0jZW5kaWYgLyogQ0tfU0hBRE9XICovCi0gICAgY2hhciAqc2dldHNhdmUoKTsKLQotI2lmZGVm IEhQVVgxMF9UUlVTVEVECi0gICAgc3RydWN0IHByX3Bhc3N3ZCAqcHI7Ci0jZW5kaWYgLyogSFBV WDEwX1RSVVNURUQgKi8KLQotI2lmZGVmIENLX1NIQURPVwotICAgIHNwID0gZ2V0c3BuYW0obmFt ZSk7Ci0gICAgaWYgKHNwID09IE5VTEwpIHsKLSAgICAgICAgZGVidWcoRjExMCwic2dldHB3bmFt IiwiZ2V0c3BuYW0oKSBmYWlscyIsMCk7Ci0JcmV0dXJuIChOVUxMKTsKLSAgICB9Ci0jZW5kaWYg LyogQ0tfU0hBRE9XICovCi0KLSNpZmRlZiBIUFVYMTBfVFJVU1RFRAotICAgIGlmICgocHIgPSBn ZXRwcnB3bmFtKG5hbWUpKSA9PSBOVUxMKQotICAgICAgcmV0dXJuKE5VTEwpOwotI2VuZGlmIC8q IEhQVVgxMF9UUlVTVEVEICovCi0KLSAgICBwID0gZ2V0cHduYW0obmFtZSk7Ci0gICAgLyogZGVi dWcoRjExMSwic2dldHB3bmFtIiwiZ2V0cHduYW0oKSIscCk7ICovCi0gICAgaWYgKHAgPT0gTlVM TCkKLSAgICAgIHJldHVybihOVUxMKTsKLSAgICBpZiAoc2F2ZS5wd19uYW1lKSB7Ci0gICAgICAg IGZyZWUoc2F2ZS5wd19uYW1lKTsKLSAgICAgICAgZnJlZShzYXZlLnB3X3Bhc3N3ZCk7Ci0gICAg ICAgIGZyZWUoc2F2ZS5wd19nZWNvcyk7Ci0gICAgICAgIGZyZWUoc2F2ZS5wd19kaXIpOwotICAg ICAgICBmcmVlKHNhdmUucHdfc2hlbGwpOwotICAgIH0KLSAgICBzYXZlID0gKnA7Ci0gICAgc2F2 ZS5wd19uYW1lID0gc2dldHNhdmUocC0+cHdfbmFtZSk7Ci0jaWZkZWYgQ0tfU0hBRE9XCi0gICAg c2F2ZS5wd19wYXNzd2QgPSBzZ2V0c2F2ZShzcC0+c3BfcHdkcCk7Ci0jZWxzZSAvKiBDS19TSEFE T1cgKi8KLSNpZmRlZiBIUFVYMTBfVFJVU1RFRAotICAgIGlmIChwci0+dWZsZy5mZ19lbmNyeXB0 ICYmIHByLT51ZmxkLmZkX2VuY3J5cHQgJiYgKnByLT51ZmxkLmZkX2VuY3J5cHQpCi0gICAgICBz YXZlLnB3X3Bhc3N3ZCA9IHNnZXRzYXZlKHByLT51ZmxkLmZkX2VuY3J5cHQpOwotICAgIGVsc2UK LSAgICAgIHNhdmUucHdfcGFzc3dkID0gc2dldHNhdmUoIiIpOwotI2Vsc2UgLyogSFBVWDEwX1RS VVNURUQgKi8KLSAgICBzYXZlLnB3X3Bhc3N3ZCA9IHNnZXRzYXZlKHAtPnB3X3Bhc3N3ZCk7Ci0j ZW5kaWYgLyogSFBVWDEwX1RSVVNURUQgKi8KLSNlbmRpZiAvKiBDS19TSEFET1cgKi8KLSAgICBz YXZlLnB3X2dlY29zID0gc2dldHNhdmUocC0+cHdfZ2Vjb3MpOwotICAgIHNhdmUucHdfZGlyID0g c2dldHNhdmUocC0+cHdfZGlyKTsKLSAgICBzYXZlLnB3X3NoZWxsID0gc2dldHNhdmUocC0+cHdf c2hlbGwpOwotICAgIHJldHVybigmc2F2ZSk7Ci19Ci0KLSNkZWZpbmUgQ0tYTE9HQlNJWiAyNTYK LQotc3RydWN0IHBhc3N3ZCAqIHB3ID0gTlVMTDsKLWNoYXIgKiBob21lID0gTlVMTDsgICAgICAg ICAgICAgICAgICAgICAvKiBIb21lIGRpcmVjdG9yeSBwb2ludGVyIGZvciBnbG9iICovCi0jaWZk ZWYgQ01BU0sKLSN1bmRlZiBDTUFTSwotI2VuZGlmIC8qIENNQVNLICovCi0KLSNkZWZpbmUgQ01B U0sgMDI3Ci0KLWludCBkZWZ1bWFzayA9IENNQVNLOyAgICAgICAgICAgICAgICAgICAvKiBEZWZh dWx0IHVtYXNrIHZhbHVlICovCi0KLS8qICBaIFYgVSBTIEUgUiAgLS0gIFZlcmlmeSB1c2VyLCBS ZXR1cm5zIDEgaWYgdXNlciBPSywgMCBvdGhlcndpc2UuICAqLwotCi0vKiBTZXRzIGdsb2JhbCBw YXNzd2QgcG9pbnRlciBwdyBpZiBuYW1lZCBhY2NvdW50IGV4aXN0cyBhbmQgaXMgYWNjZXB0YWJs ZTsKLSAqIHNldHMgYXNrcGFzc3dkIGlmIGEgUEFTUyBjb21tYW5kIGlzIGV4cGVjdGVkLiAgSWYg bG9nZ2VkIGluIHByZXZpb3VzbHksCi0gKiBuZWVkIHRvIHJlc2V0IHN0YXRlLiAgSWYgbmFtZSBp cyAiZnRwIiBvciAiYW5vbnltb3VzIiwgdGhlIG5hbWUgaXMgbm90IGluCi0gKiBfUEFUSF9GVFBV U0VSUywgYW5kIGZ0cCBhY2NvdW50IGV4aXN0cywgc2V0IGd1ZXN0IGFuZCBwdywgdGhlbiBqdXN0 IHJldHVybi4KLSAqIElmIGFjY291bnQgZG9lc24ndCBleGlzdCwgYXNrIGZvciBwYXNzd2QgYW55 d2F5LiAgT3RoZXJ3aXNlLCBjaGVjayB1c2VyCi0gKiByZXF1ZXN0aW5nIGxvZ2luIHByaXZpbGVn ZXMuICBEaXNhbGxvdyBhbnlvbmUgd2hvIGRvZXMgbm90IGhhdmUgYSBzdGFuZGFyZAotICogc2hl bGwgYXMgcmV0dXJuZWQgYnkgZ2V0dXNlcnNoZWxsKCkuICBEaXNhbGxvdyBhbnlvbmUgbWVudGlv bmVkIGluIHRoZSBmaWxlCi0gKiBfUEFUSF9GVFBVU0VSUyB0byBhbGxvdyBwZW9wbGUgc3VjaCBh cyByb290IGFuZCB1dWNwIHRvIGJlIGF2b2lkZWQuCi0gKi8KLV9QUk9UT1RZUChzdGF0aWMgaW50 IGNoZWNrdXNlciwgKGNoYXIgKikgKTsKLQotY2hhciB6dnVuYW1lWzY0XSA9IHsgTlVMLCBOVUwg fTsKLWNoYXIgenZob21lW0NLTUFYUEFUSCsxXSA9IHsgTlVMLCBOVUwgfTsKLSNkZWZpbmUgWkVO VlVTRVIgNzAKLSNkZWZpbmUgWkVOVkhPTUUgQ0tNQVhQQVRIKzEyCi0jZGVmaW5lIFpFTlZMT0dO QU1FIDc0Ci1zdGF0aWMgY2hhciB6ZW52dXNlcltaRU5WVVNFUl07Ci1zdGF0aWMgY2hhciB6ZW52 aG9tZVtaRU5WSE9NRV07Ci1zdGF0aWMgY2hhciB6ZW52bG9nbmFtZVtaRU5WTE9HTkFNRV07Ci0K LSNpZmRlZiBDS19QQU0KLXN0YXRpYyBjaGFyIHBhbV9kYXRhWzUwMF07Ci1zdHJ1Y3QgcGFtX2Nv bnYgcGFtX2NvbnYgPSB7cGFtX2NiLCBwYW1fZGF0YX07IC8qIFBBTSBzdHJ1Y3R1cmUgKi8KLXN0 cnVjdCBwYW1faGFuZGxlICogcGFtaCA9IE5VTEw7ICAgICAgICAgICAgICAgLyogUEFNIHJlZmVy ZW5jZSBoYW5kbGUgKi8KLSNlbmRpZiAvKiBDS19QQU0gKi8KLQotaW50Ci16dnVzZXIobmFtZSkg Y2hhciAqbmFtZTsgewotICAgIHJlZ2lzdGVyIGNoYXIgKmNwID0gTlVMTDsKLSAgICBpbnQgeDsK LSAgICBjaGFyICpzaGVsbDsKLSNpZmRlZiBHRVRVU0VSU0hFTEwKLV9QUk9UT1RZUChjaGFyICog Z2V0dXNlcnNoZWxsLCAodm9pZCkgKTsKLSNlbmRpZiAvKiBHRVRVU0VSU0hFTEwgKi8KLSNpZm5k ZWYgTk9EQ0xFTkRVU0VSU0hFTEwKLV9QUk9UT1RZUChWT0lEIGVuZHVzZXJzaGVsbCwgKHZvaWQp ICk7Ci0jZW5kaWYJLyogTk9EQ0xFTkRVU0VSU0hFTEwgKi8KLQotI2lmZGVmIENLX1BBTQotICAg IGludCBwYW1fc3RhdHVzOwotICAgIGNvbnN0IGNoYXIgKiByZXBseSA9IE5VTEw7Ci0jZW5kaWYg LyogQ0tfUEFNICovCi0KLSAgICBkZWJ1ZyhGMTExLCJ1c2VyIixuYW1lLGxvZ2dlZF9pbik7Ci0K LSAgICBpZiAoIW5hbWUpIG5hbWUgPSAiIjsKLSAgICB6dnVuYW1lWzBdID0gTlVMOwotCi0gICAg ZGVidWcoRjEwMSwienZ1c2VyIGNreHN5c2xvZyIsIiIsY2t4c3lzbG9nKTsKLQotI2lmZGVmIENL U1lTTE9HCi0gICAgZGVidWcoRjEwMCwienZ1c2VyIENLU1lTTE9HIGRlZmluZWQiLCIiLDApOwot I2VuZGlmIC8qIENLU1lTTE9HICovCi0KLSAgICBpZiAobG9nZ2VkX2luKSAgICAgICAgICAgICAg ICAgICAgICAvKiBTaG91bGQgbm90IGJlIGNhbGxlZCBpZiBsb2dnZWQgaW4gKi8KLSAgICAgIHJl dHVybigwKTsKLQotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyAmJiBja3hsb2dn aW5nKSB7Ci0gICAgICAgIHN5c2xvZyhMT0dfSU5GTywKLSAgICAgICAgICAgICAgICAibG9naW46 IHVzZXIgJXMiLG5hbWUKLSAgICAgICAgICAgICAgICApOwotICAgIH0KLSNlbmRpZiAvKiBDS1NZ U0xPRyAqLwotCi0gICAgZ3Vlc3QgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNz dW1lIG5vdCBndWVzdCAqLwotICAgIGFza3Bhc3N3ZCA9IDA7Ci0KLSAgICBpZiAoc3RyY21wKG5h bWUsICJmdHAiKSA9PSAwIHx8IHN0cmNtcChuYW1lLCAiYW5vbnltb3VzIikgPT0gMCkgewotICAg ICAgICBkZWJ1ZyhGMTAxLCJ6dnVzZXIgYW5vbnltb3VzIGNreGFub24iLCIiLGNreGFub24pOwot ICAgICAgICBpZiAoIWNreGFub24pIHsgICAgICAgICAgICAgICAgIC8qIEFub255bW91cyBsb2dp biBub3QgYWxsb3dlZCAqLwotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICBpZiAoY2t4c3lz bG9nICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0lORk8sCi0g ICAgICAgICAgICAgICAgICAgICAgICJsb2dpbjogYW5vbnltb3VzIGxvZ2luIG5vdCBhbGxvd2Vk OiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNsaWVudGhvc3QgPyBjbGllbnRob3N0IDog Iih1bmtub3duIGhvc3QpIgotICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg fQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKGNoZWNrdXNlcigiZnRwIikgfHwgY2hlY2t1c2VyKCJhbm9ueW1vdXMi KSkgewotICAgICAgICAgICAgZGVidWcoRjEwMCwienZ1c2VyIGFub24gZm9yYmlkZGVuIGJ5IGZ0 cHVzZXJzIGZpbGUiLCIiLDApOwotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICBpZiAoY2t4 c3lzbG9nICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0lORk8s Ci0gICAgICAgICAgICAgICAgICAgICAgICJsb2dpbjogYW5vbnltb3VzIGxvZ2luIGZvcmJpZGRl biBieSBmdHB1c2VycyBmaWxlOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNsaWVudGhv c3QgPyBjbGllbnRob3N0IDogIih1bmtub3duIGhvc3QpIgotICAgICAgICAgICAgICAgICAgICAg ICApOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgICAgICBy ZXR1cm4oMCk7Ci0JfSBlbHNlIGlmICgocHcgPSBzZ2V0cHduYW0oImZ0cCIpKSAhPSBOVUxMKSB7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6dnVzZXIgYW5vbiBzZ2V0cHduYW0oZnRwKSBPSyIs IiIsMCk7Ci0gICAgICAgICAgICBndWVzdCA9IDE7Ci0gICAgICAgICAgICBhc2twYXNzd2QgPSAx OwotICAgICAgICAgICAgY2tzdHJuY3B5KHp2dW5hbWUsImFub255bW91cyIsNjQpOwotICAgICAg ICAgICAgcmV0dXJuKDEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVidWcoRjEw MCwienZ1c2VyIGFub24gc2dldHB3bmFtKGZ0cCkgRkFJTEVEIiwiIiwwKTsKLSNpZmRlZiBDS1NZ U0xPRwotICAgICAgICAgICAgaWYgKGNreHN5c2xvZyAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAg ICAgICAgICAgc3lzbG9nKExPR19JTkZPLAotICAgICAgICAgICAgICAgICAgICAgICAibG9naW46 IGFub255bW91cyBnZXRwd25hbShmdHApIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICAgICAg ICAgICBjbGllbnRob3N0ID8gY2xpZW50aG9zdCA6ICIodW5rbm93biBob3N0KSIKLSAgICAgICAg ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwot ICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0gICAgfQotICAgIHB3ID0gc2dldHB3 bmFtKG5hbWUpOwotICAgIGlmIChwdykgewotLyoKLSAgT2YgY291cnNlIHNvbWUgVU5JWCBwbGF0 Zm9ybXMgKGxpa2UgQUlYKSBkb24ndCBoYXZlIGdldHVzZXJzaGVsbCgpLgotICBJbiB0aGF0IGNh c2Ugd2UgY2FuJ3QgY2hlY2sgaWYgdGhlIHVzZXIncyBhY2NvdW50IGhhcyBiZWVuICJ0dXJuZWQg b2ZmIgotICBvciBzb21lc3VjaCwgZS5nLiBieSBzZXR0aW5nIHRoZWlyIHNoZWxsIHRvICIvZXRj L25vbG9naW4iIG9yIHNvbWVzdWNoLAotICB3aGljaCBydW5zICh1c3VhbGx5IGp1c3QgcHJpbnRp bmcgYSBtZXNzYWdlIGFuZCBleGl0aW5nKSwgYnV0IHdoaWNoIGlzCi0gIG5vdCBsaXN0ZWQgaW4g L2V0Yy9zaGVsbHMuICBGb3IgdGhhdCBtYXR0ZXIsIGlmIGdldHVzZXJzaGVsbCgpIGlzIG5vdAot ICBhdmFpbGFibGUsIHRoZW4gcHJvYmFibHkgbmVpdGhlciBpcyAvZXRjL3NoZWxscy4KLSovCi0g ICAgICAgIGRlYnVnKEYxMDAsInp2dXNlciBzZ2V0cHduYW0gb2siLCIiLDApOwotICAgICAgICBz aGVsbCA9IHB3LT5wd19zaGVsbDsKLSAgICAgICAgaWYgKCFzaGVsbCkgc2hlbGwgPSAiIjsKLSAg ICAgICAgaWYgKCEqc2hlbGwpCi0gICAgICAgICAgc2hlbGwgPSBfUEFUSF9CU0hFTEw7Ci0gICAg ICAgIGRlYnVnKEYxMTAsInp2dXNlciBzaGVsbCIsc2hlbGwsMCk7Ci0jaWZkZWYgR0VUVVNFUlNI RUxMCi0gICAgICAgIHdoaWxlICgoY3AgPSBnZXR1c2Vyc2hlbGwoKSkgIT0gTlVMTCkgewotICAg ICAgICAgICAgZGVidWcoRjExMCwienZ1c2VyIGdldHVzZXJzaGVsbCIsY3AsMCk7Ci0gICAgICAg ICAgICBpZiAoKGludClzdHJjbXAoY3AsIHNoZWxsKSA9PSAwKQotICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTAwLCJ6dnVzZXIgZW5kdXNlcnNoZWxsIDEi LCIiLDApOwotI2lmbmRlZiBOT0RDTEVORFVTRVJTSEVMTAotICAgICAgICAoVk9JRCkgZW5kdXNl cnNoZWxsKCk7Ci0jZWxzZQotICAgICAgICBlbmR1c2Vyc2hlbGwoKTsKLSNlbmRpZgkvKiBOT0RD TEVORFVTRVJTSEVMTCAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJ6dnVzZXIgZW5kdXNlcnNoZWxs IDIiLCIiLDApOwotI2Vsc2UgLyogR0VUVVNFUlNIRUxMICovCi0gICAgICAgIGNwID0gIiI7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90IHJlZnVzZSBpZiB3ZSBjYW5ub3QgY2hlY2sg Ki8KLSNlbmRpZiAvKiBHRVRVU0VSU0hFTEwgKi8KLSAgICAgICAgeCA9IGNoZWNrdXNlcihuYW1l KTsKLSAgICAgICAgZGVidWcoRjEwMSwienZ1c2VyIGNoZWNrdXNlciIsIiIseCk7Ci0gICAgICAg IGlmIChjcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6dnVzZXIgcmVmdXNl ZCAxIiwiIiwwKTsKLSAgICAgICAgICAgIHB3ID0gKHN0cnVjdCBwYXNzd2QgKikgTlVMTDsKLSNp ZmRlZiBDS1NZU0xPRwotICAgICAgICAgICAgaWYgKGNreHN5c2xvZyAmJiBja3hsb2dnaW5nKSB7 Ci0gICAgICAgICAgICAgICAgc3lzbG9nKExPR19JTkZPLAotICAgICAgICAgICAgICAgICAgICAg ICAibG9naW46IGludmFsaWQgc2hlbGwgJXMgZm9yICVzICVzIixzaGVsbCwgbmFtZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgY2xpZW50aG9zdCA/IGNsaWVudGhvc3QgOiAiKHVua25vd24gaG9z dCkiCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyog Q0tTWVNMT0cgKi8KLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfSBlbHNlIGlmICh4 KSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6dnVzZXIgcmVmdXNlZCAyIiwiIiwwKTsKLSAg ICAgICAgICAgIHB3ID0gKHN0cnVjdCBwYXNzd2QgKikgTlVMTDsKLSNpZmRlZiBDS1NZU0xPRwot ICAgICAgICAgICAgaWYgKGNreHN5c2xvZyAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICAg ICAgc3lzbG9nKExPR19JTkZPLAotICAgICAgICAgICAgICAgICAgICAgICAibG9naW46ICVzIGxv Z2luIGZvcmJpZGRlbiBieSBmdHB1c2VycyBmaWxlOiAlcyIsCi0gICAgICAgICAgICAgICAgICAg ICAgIG5hbWUsIGNsaWVudGhvc3QgPyBjbGllbnRob3N0IDogIih1bmtub3duIGhvc3QpIgotICAg ICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9H ICovCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICB4ID0gMDsKLSNpZmRlZiBDS19QQU0KLSAgICAgICAgICAgIC8qIEdldCBQQU0gYXV0aGVudGlj YXRpb24gZGV0YWlscyAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwienZ1c2VyIiwiY2FsbGlu ZyBwYW1fc3RhcnQiLDApOwotICAgICAgICAgICAgaWYgKChwYW1fc3RhdHVzID0KLSAgICAgICAg ICAgICAgICAgcGFtX3N0YXJ0KFBBTV9TRVJWSUNFX1RZUEUsbmFtZSwmcGFtX2NvbnYsJnBhbWgp KQotICAgICAgICAgICAgICAgICE9IFBBTV9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgcmVw bHkgPSBwYW1fc3RyZXJyb3IoTlVMTCwgcGFtX3N0YXR1cyk7Ci0gICAgICAgICAgICAgICAgZGVi dWcoRjExMCwienZ1c2VyIFBBTSBmYWlsdXJlIixyZXBseSwwKTsKLSAgICAgICAgICAgICAgICBw cmludGYoIiVzXG4iLHJlcGx5KTsKLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICAgICAgICAgIGlm IChja3hzeXNsb2cgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAgICAgICAgICBzeXNsb2co TE9HX0lORk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibG9naW46ICVzIHJlZnVzZWQg YnkgUEFNIFwiJXNcIjogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxyZXBs eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudGhvc3QgPyBjbGllbnRob3N0IDog Iih1bmtub3duIGhvc3QpIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4o MCk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfUEFNICovCi0gICAgICAgICAgICBhc2tw YXNzd2QgPSAxOwotICAgICAgICAgICAgY2tzdHJuY3B5KHp2dW5hbWUsbmFtZSw2NCk7Ci0gICAg ICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICB4ID0g MDsKLSAgICAgICAgZGVidWcoRjEwMCwienZ1c2VyIHNnZXRwd25hbSBOVUxMIiwiIiwwKTsKLSNp ZmRlZiBDS1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nICYmIGNreGxvZ2dpbmcpIHsKLSAg ICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywKLSAgICAgICAgICAgICAgICAgICAibG9naW46IGdl dHB3bmFtKCVzKSBmYWlsZWQ6ICVzIixuYW1lLAotICAgICAgICAgICAgICAgICAgIGNsaWVudGhv c3QgPyBjbGllbnRob3N0IDogIih1bmtub3duIGhvc3QpIgotICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICByZXR1cm4oMCk7Ci0g ICAgfQotCi0jaWZkZWYgRlRQX0tFUkJFUk9TCi0gICAgaWYgKGF1dGhfdHlwZSAmJiBzdHJjbXAo YXV0aF90eXBlLCAiS0VSQkVST1NfVjQiKSA9PSAwKSB7Ci0jaWZkZWYgQ09NTUVOVAotCS8qIFdo eSBzcHJpbnRmIGFuZCB0aGVuIHByaW50Zj8gKi8KLQkvKiBBbHNvLCB3aGF0IGlzIGtlcmJfb2s/ ICBBbmQgaXMgdGhlIHRlc3Qgb24gaXQgcmlnaHQ/ICovCi0gICAgICAgIGNoYXIgYnVmW0NLWExP R0JTSVpdOwotICAgICAgICBzcHJpbnRmKGJ1ZiwgIktlcmJlcm9zIHVzZXIgJXMlcyVzQCVzIGlz JXMgYXV0aG9yaXplZCBhcyAlcyVzIiwKLSAgICAgICAgICAgICAgICAga2RhdGEucG5hbWUsICpr ZGF0YS5waW5zdCA/ICIuIiA6ICIiLAotICAgICAgICAgICAgICAgICBrZGF0YS5waW5zdCwga2Rh dGEucHJlYWxtLAotICAgICAgICAgICAgICAgICAoa2VyYl9vayA9IGt1c2Vyb2soJmtkYXRhLG5h bWUpID09IDApID8gIiIgOiAiIG5vdCIsCi0gICAgICAgICAgICAgICAgIG5hbWUsIGtlcmJfb2sg PyAiIiA6ICI7IFBhc3N3b3JkIHJlcXVpcmVkLiIpOwotICAgICAgICBwcmludGYoIiVzIiwgYnVm KTsKLSNlbHNlCi0gICAgICAgIHByaW50ZigiS2VyYmVyb3MgdXNlciAlcyVzJXNAJXMgaXMlcyBh dXRob3JpemVkIGFzICVzJXMiLAotICAgICAgICAgICAgICAgICBrZGF0YS5wbmFtZSwgKmtkYXRh LnBpbnN0ID8gIi4iIDogIiIsCi0gICAgICAgICAgICAgICAgIGtkYXRhLnBpbnN0LCBrZGF0YS5w cmVhbG0sCi0gICAgICAgICAgICAgICAgIChrZXJiX29rID0ga3VzZXJvaygma2RhdGEsbmFtZSkg PT0gMCkgPyAiIiA6ICIgbm90IiwKLSAgICAgICAgICAgICAgICAgbmFtZSwga2VyYl9vayA/ICIi IDogIjsgUGFzc3dvcmQgcmVxdWlyZWQuIik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAg ICBpZiAoa2VyYl9vaykgcmV0dXJuKDEpOwotICAgIH0gZWxzZQotICAgICAgcmV0dXJuKDApOwot I2VuZGlmIC8qIEZUUF9LRVJCRVJPUyAqLwotfQotCi0vKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdXNl ciBpcyBpbiB0aGUgZm9yYmlkZGVuLXVzZXIgZmlsZSAqLwotCi1zdGF0aWMgaW50Ci1jaGVja3Vz ZXIobmFtZSkgY2hhciAqbmFtZTsgewotICAgIGV4dGVybiBjaGFyICogdXNlcmZpbGU7Ci0gICAg RklMRSAqZmQ7Ci0gICAgaW50IGk7Ci0gICAgY2hhciBsaW5lW0NLWExPR0JTSVorMV07Ci0KLSAg ICBpZiAoIW5hbWUpCi0gICAgICBuYW1lID0gIiI7Ci0gICAgaSA9IHN0cmxlbihuYW1lKTsKLSAg ICBkZWJ1ZyhGMTExLCJjaGVja3VzZXIgbmFtZSIsbmFtZSxpKTsKLSAgICBpZiAoISpuYW1lKQot ICAgICAgcmV0dXJuKDEpOwotCi0gICAgZmQgPSBmb3Blbih1c2VyZmlsZSA/IHVzZXJmaWxlIDog X1BBVEhfRlRQVVNFUlMsICJyIik7Ci0gICAgLyogZGVidWcoRjExMSwiY2hlY2t1c2VyIHVzZXJm aWxlIix1c2VyZmlsZSxmZCk7ICovCi0gICAgaWYgKGZkKSB7Ci0gICAgICAgIGxpbmVbMF0gPSAn XDAnOwotICAgICAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmZCkpIHsKLSAg ICAgICAgICAgIGRlYnVnKEYxMTAsImNoZWNrdXNlciBsaW5lIixsaW5lLDApOwotICAgICAgICAg ICAgaWYgKGxpbmVbMF0gPD0gJyMnKQotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg ICAgIGlmIChzdHJuY21wKGxpbmUsIG5hbWUsIGkpID09IDApIHsKLSAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJjaGVja3VzZXIgUkVGVVNFRCIsbmFtZSwwKTsKLSAgICAgICAgICAgICAgICBy ZXR1cm4oMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lWzBdID0gJ1wwJzsKLSAg ICAgICAgfQotICAgICAgICAoVk9JRCkgZmNsb3NlKGZkKTsKLSAgICB9Ci0gICAgZGVidWcoRjEx MCwiY2hlY2t1c2VyIE9LIixuYW1lLDApOwotICAgIHJldHVybigwKTsKLX0KLQotLyogIFogViBM IE8gRyBPIFUgVCAgLS0gIExvZyBvdXQgZnJvbSBJbnRlcm5ldCBLZXJtaXQgU2VydmljZSAgKi8K LQotVk9JRAotenZsb2dvdXQoKSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgIC8qIFRoaXMgY291bGQg YmUgZGFuZ2Vyb3VzICovCi0gICAgaWYgKHNldHVpZCgoVUlEX1QpMCkgPCAwKSB7Ci0gICAgICAg IGRlYnVnKEYxMDAsInp2bG9nb3V0IHNldHVpZCBGQUlMRUQiLCIiLDApOwotICAgICAgICBnb3Rv IGJhZDsKLSAgICB9Ci0gICAgZGVidWcoRjEwMCwienZsb2dvdXQgc2V0dWlkIE9LIiwiIiwwKTsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9n ID49IFNZU0xHX0xJICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgY2tzeXNsb2coU1lTTEdfTEks IDEsICJsb2dvdXQiLChjaGFyICopIHVpZGJ1ZiwgY2xpZW50aG9zdCk7Ci0gICAgfQotI2VuZGlm IC8qIENLU1lTTE9HICovCi0jaWZkZWYgQ0tXVE1QCi0gICAgZGVidWcoRjExMCwiV1RNUCBsb2dv dXQiLGNrc3lzbGluZSxsb2dnZWRfaW4pOwotICAgIGlmIChsb2dnZWRfaW4pCi0gICAgICBsb2d3 dG1wKGNrc3lzbGluZSwgIiIsICIiKTsKLSNlbmRpZiAvKiBDS1dUTVAgKi8KLSAgICBwdyA9IE5V TEw7Ci0gICAgbG9nZ2VkX2luID0gMDsKLSAgICBndWVzdCA9IDA7Ci0gICAgaXNndWVzdCA9IDA7 Ci19Ci0KLSNpZmRlZiBGVFBfS0VSQkVST1MKLWtwYXNzKG5hbWUsIHApIGNoYXIgKm5hbWUsICpw OyB7Ci0gICAgY2hhciBpbnN0YW5jZVtJTlNUX1NaXTsKLSAgICBjaGFyIHJlYWxtW1JFQUxNX1Na XTsKLSAgICBjaGFyIHRrdF9maWxlWzIwXTsKLSAgICBLVEVYVF9TVCB0aWNrZXQ7Ci0gICAgQVVU SF9EQVQgYXV0aGRhdGE7Ci0gICAgdW5zaWduZWQgbG9uZyBmYWRkcjsKLSAgICBzdHJ1Y3QgaG9z dGVudCAqaHA7Ci0KLSAgICBpZiAoa3JiX2dldF9scmVhbG0ocmVhbG0sIDEpICE9IEtTVUNDRVNT KQotICAgICAgcmV0dXJuKDApOwotCi0gICAgY2tzdHJuY3B5KHRrdF9maWxlLCBUS1RfUk9PVCwg MjApOwotICAgIGNrc3RybmNhdCh0a3RfZmlsZSwgIl9mdHBkWFhYWFhYIiwgMjApOwotICAgIGty Yl9zZXRfdGt0X3N0cmluZyhta3RlbXAodGt0X2ZpbGUpKTsKLQotICAgIChWT0lEKSBja3N0cm5j cHkoaW5zdGFuY2UsIGtyYl9nZXRfcGhvc3QoaG9zdG5hbWUpLCBzaXplb2YoaW5zdGFuY2UpKTsK LQotICAgIGlmICgoaHAgPSBnZXRob3N0YnluYW1lKGluc3RhbmNlKSkgPT0gTlVMTCkKLSAgICAg IHJldHVybigwKTsKLQotI2lmZGVmIEhBRERSTElTVAotICAgIGhwID0gY2tfY29weWhvc3RlbnQo aHApOwkJLyogc2FmZSBjb3B5IHRoYXQgd29uJ3QgY2hhbmdlICovCi0jZW5kaWYgLyogSEFERFJM SVNUICovCi0gICAgYmNvcHkoKGNoYXIgKilocC0+aF9hZGRyLCAoY2hhciAqKSAmZmFkZHIsIHNp emVvZihmYWRkcikpOwotCi0gICAgaWYgKGtyYl9nZXRfcHdfaW5fdGt0KG5hbWUsICIiLCByZWFs bSwgImtyYnRndCIsIHJlYWxtLCAxLCBwKSB8fAotICAgICAgICBrcmJfbWtfcmVxKCZ0aWNrZXQs ICJyY21kIiwgaW5zdGFuY2UsIHJlYWxtLCAzMykgfHwKLSAgICAgICAga3JiX3JkX3JlcSgmdGlj a2V0LCAicmNtZCIsIGluc3RhbmNlLCBmYWRkciwgJmF1dGhkYXRhLCAiIikgfHwKLSAgICAgICAg a3VzZXJvaygmYXV0aGRhdGEsIG5hbWUpKSB7Ci0gICAgICAgIGRlc3RfdGt0KCk7Ci0gICAgICAg IHJldHVybigwKTsKLSAgICB9Ci0gICAgZGVzdF90a3QoKTsKLSAgICByZXR1cm4oMSk7Ci19Ci0j ZW5kaWYgLyogRlRQX0tFUkJFUk9TICovCi0KLVZPSUQKLXpzeXNsb2coKSB7Ci0jaWZkZWYgQ0tT WVNMT0cKLSAgICBpZiAoY2t4c3lzbG9nICYmICFja3hsb2dnaW5nKSB7Ci0jaWZkZWYgTE9HX0RB RU1PTgotICAgICAgICBvcGVubG9nKGluc2VydmVyID8gImlrc2QiIDogImNrZXJtaXQiLCBMT0df UElELCBMT0dfREFFTU9OKTsKLSNlbHNlCi0gICAgICAgIG9wZW5sb2coaW5zZXJ2ZXIgPyAiaWtz ZCIgOiAiY2tlcm1pdCIsIExPR19QSUQpOwotI2VuZGlmIC8qIExPR19EQUVNT04gKi8KLSAgICAg ICAgY2t4bG9nZ2luZyA9IDE7Ci0gICAgICAgIGRlYnVnKEYxMDAsInpzeXNsb2cgc3lzbG9nIG9w ZW5lZCIsIiIsMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi19Ci0KLS8qICBaIFYg UCBBIFMgUyAgLS0gIFZlcmlmeSBwYXNzd29yZDsgcmV0dXJucyAxIGlmIE9LLCAwIG90aGVyd2lz ZSAgKi8KLQotI2lmbmRlZiBBVVRIX1VTRVIKLSNkZWZpbmUgQVVUSF9VU0VSIDMKLSNlbmRpZiAv KiBBVVRIX1VTRVIgKi8KLSNpZm5kZWYgQVVUSF9WQUxJRAotI2RlZmluZSBBVVRIX1ZBTElEIDQK LSNlbmRpZiAvKiBBVVRIX1ZBTElEICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwkJCS8qIDI5OSBU aGlzIHdhcyBuZWNlc3NhcnkgaW4gKi8KLSNpZm5kZWYgTk9EQ0xJTklUR1JPVVBTCQkJLyogRnJl ZUJTRCA0LjQsIGRvbid0IGtub3cgKi8KLSNkZWZpbmUgTk9EQ0xJTklUR1JPVVBTCQkJLyogYWJv dXQgb3RoZXIgdmVyc2lvbnMuLi4gKi8KLSNlbmRpZgkvKiBOT0RDTElOSVRHUk9VUFMgKi8gICAg ICAgICAgICAKLSNlbmRpZgkvKiAgX19GcmVlQlNEX18gKi8KLQotaW50Ci16dnBhc3MocCkgY2hh ciAqcDsgewotI2lmbmRlZiBOT0RDTElOSVRHUk9VUFMKLV9QUk9UT1RZUChpbnQgaW5pdGdyb3Vw cywgKGNvbnN0IGNoYXIgKiwgZ2lkX3QpICk7Ci0jZW5kaWYJLyogTk9EQ0xJTklUR1JPVVBTICov Ci0KLSAgICBjaGFyICp4cGFzc3dkLCAqc2FsdDsKLSAgICBjaGFyICogZGlyID0gTlVMTDsKLSNp ZmRlZiBDS19QQU0KLSAgICBpbnQgcGFtX3N0YXR1czsKLSAgICBjb25zdCBjaGFyICogcmVwbHkg PSBOVUxMOwotI2VuZGlmIC8qIENLX1BBTSAqLwotCi0gICAgaWYgKGxvZ2dlZF9pbiB8fCBhc2tw YXNzd2QgPT0gMCkgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEs Inp2cGFzcyIscCA/IChndWVzdCA/IHAgOiAieHh4eHh4IikgOiAiKG51bGwpIixndWVzdCk7Ci0g ICAgaWYgKCFwKSBwID0gIiI7Ci0gICAgYXNrcGFzc3dkID0gMDsKLSAgICBpZiAoZ3Vlc3QgJiYg ISpwKSB7ICAgICAgICAgICAgICAgICAvKiBHdWVzdHMgbXVzdCBzcGVjaWZ5IGEgcGFzc3dvcmQg Ki8KLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nICYmIGNreGxvZ2dpbmcp IHsKLSAgICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywKLSAgICAgICAgICAgICAgICAgICAibG9n aW46IGFub255bW91cyBndWVzdHMgbXVzdCBzcGVjaWZ5IGEgcGFzc3dvcmQiCi0gICAgICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgIHJl dHVybigwKTsKLSAgICB9Ci0gICAgaWYgKCFndWVzdAotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9O Ci0gICAgICAgICYmIGNrX3RuX2F1dGhfdmFsaWQoKSAhPSBBVVRIX1ZBTElECi0jZW5kaWYgLyog Q0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAgICAgLyog ImZ0cCIgaXMgb25seSBhY2NvdW50IGFsbG93ZWQgbm8gcGFzc3dvcmQgKi8KLSNpZmRlZiBDS19Q QU0KLSAgICAgICAgZGVidWcoRjExMCwienZwYXNzIiwiY2FsbGluZyBwYW1fc2V0X2l0ZW0oQVVU SFRPSykiLDApOwotICAgICAgICBpZiAoKHBhbV9zdGF0dXMgPSBwYW1fc2V0X2l0ZW0ocGFtaCxQ QU1fQVVUSFRPSyxwKSkgIT0gUEFNX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIHJlcGx5ID0gcGFt X3N0cmVycm9yKHBhbWgsIHBhbV9zdGF0dXMpOwotICAgICAgICAgICAgZGVidWcoRjExMCwienZw YXNzIFBBTSBmYWlsdXJlIixyZXBseSwwKTsKLSAgICAgICAgICAgIC8qIGlmIG5vIHBhc3N3b3Jk IGdpdmVuIHRyZWF0IGFzIG5vbi1mYXRhbCBlcnJvciAqLwotICAgICAgICAgICAgLyogcGFtIHdp bGwgcHJvbXB0IGZvciBwYXNzd29yZCBpbiBwYW1fYXV0aGVudGljYXRlKCkgKi8KLSAgICAgICAg ICAgIGlmICghcCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIscmVwbHkpOwotICAg ICAgICAgICAgICAgIHBhbV9lbmQocGFtaCwgMCk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEw MCwienZwYXNzIGRlbmllZCIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgcHcgPSBOVUxMOwotICAg ICAgICAgICAgICAgIHp2dW5hbWVbMF0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKDAp OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMTAsInp2cGFzcyIs ImNhbGxpbmcgcGFtX2F1dGhlbnRpY2F0ZSIsMCk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICBp ZiAoKnApCi0JICBwYW1fcHcgPSBwOwotI2Vsc2UKLS8qCi0gIE1ha2UgSUtTRCBhdXRoZW50aWNh dGlvbiAodXNpbmcgUEFNKSBhc2sgZm9yIGEgcGFzc3dvcmQgd2hlbiBhbgotICBpbnZhbGlkIHVz ZXJuYW1lIGhhcyBiZWVuIGdpdmVuLCB0byBhdm9pZCBkaXNjbG9zaW5nIHdoaWNoIGFjY291bnQK LSAgbmFtZXMgYXJlIHZhbGlkLiBTZWUgIzQxNzI0NyAoRGViaWFuKS4KLSovCi0gICAgICAgIGlm ICgqcAotI2lmZGVmIENLX0xPR0lOCi0JICAgIHx8IGdvdGVtcHR5cGFzc3dkCi0jZW5kaWYgLyog Q0tfTE9HSU4gKi8KLQkgICAgKQotCSAgICBwYW1fcHcgPSBwOwotI2VuZGlmCS8qIENPTU1FTlQg Ki8KLSAgICAgICAgaWYgKChwYW1fc3RhdHVzID0gcGFtX2F1dGhlbnRpY2F0ZShwYW1oLCAwKSkg IT0gUEFNX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIHJlcGx5ID0gcGFtX3N0cmVycm9yKHBhbWgs IHBhbV9zdGF0dXMpOwotICAgICAgICAgICAgZGVidWcoRjExMCwienZwYXNzIFBBTSBmYWlsdXJl IixyZXBseSwwKTsKLSAgICAgICAgICAgIHByaW50ZigiJXNcbiIscmVwbHkpOwotICAgICAgICAg ICAgcGFtX2VuZChwYW1oLCAwKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsInp2cGFzcyBkZW5p ZWQiLCIiLDApOwotICAgICAgICAgICAgcGFtX3B3ID0gTlVMTDsKLSAgICAgICAgICAgIHB3ID0g TlVMTDsKLSAgICAgICAgICAgIHp2dW5hbWVbMF0gPSBOVUw7Ci0gICAgICAgICAgICByZXR1cm4o MCk7Ci0gICAgICAgIH0KLSAgICAgICAgcGFtX3B3ID0gTlVMTDsKLSAgICAgICAgZGVidWcoRjEx MCwienZwYXNzIiwiY2FsbGluZyBwYW1fYWNjdF9tZ210IiwwKTsKLSAgICAgICAgaWYgKChwYW1f c3RhdHVzID0gcGFtX2FjY3RfbWdtdChwYW1oLCAwKSkgIT0gUEFNX1NVQ0NFU1MpIHsKLSAgICAg ICAgICAgIHJlcGx5ID0gcGFtX3N0cmVycm9yKHBhbWgsIHBhbV9zdGF0dXMpOwotICAgICAgICAg ICAgZGVidWcoRjExMCwienZwYXNzIFBBTSBmYWlsdXJlIixyZXBseSwwKTsKLSAgICAgICAgICAg IHByaW50ZigiJXNcbiIscmVwbHkpOwotICAgICAgICAgICAgcGFtX2VuZChwYW1oLCAwKTsKLSAg ICAgICAgICAgIGRlYnVnKEYxMDAsInp2cGFzcyBkZW5pZWQiLCIiLDApOwotICAgICAgICAgICAg cHcgPSBOVUxMOwotICAgICAgICAgICAgenZ1bmFtZVswXSA9IE5VTDsKLSAgICAgICAgICAgIHJl dHVybigwKTsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTEwLCJ6dnBhc3MiLCJQQU0gdmFs aWRhdGVzIE9LIiwwKTsKLSAgICAgICAgcGFtX2VuZChwYW1oLDApOwotI2Vsc2UgLyogQ0tfUEFN ICovCi0gICAgICAgIGlmIChwdyA9PSBOVUxMKQotICAgICAgICAgIHNhbHQgPSAieHgiOwotICAg ICAgICBlbHNlCi0gICAgICAgICAgc2FsdCA9IHB3LT5wd19wYXNzd2Q7Ci0KLSNpZmRlZiBIUFVY MTBfVFJVU1RFRAotICAgICAgICB4cGFzc3dkID0gYmlnY3J5cHQocCwgc2FsdCk7Ci0jZWxzZQot LyoKLSAgT24gNjQtYml0IHBsYXRmb3JtcyB0aGlzIGNhbiBnaXZlICJjYXN0IHRvIHBvaW50ZXIg ZnJvbSBpbnRlZ2VyIG9mCi0gIGRpZmZlcmVudCBzaXplIiB3YXJuaW5nLCBidXQgSSdtIG5vdCBz dXJlIHdoYXQgdGhlIGVmZmVjdCBpcyBhdCBydW50aW1lLAotICBvciB3aGF0IHRvIGRvIGFib3V0 IGl0LgotICovCi0gICAgICAgIHhwYXNzd2QgPSAoY2hhciAqKWNyeXB0KHAsIHNhbHQpOwotI2Vu ZGlmIC8qIEhQVVgxMF9UUlVTVEVEICovCi0KLSAgICAgICAgaWYgKAotI2lmZGVmIEZUUF9LRVJC RVJPUwotICAgICAgICAgICAgLyogbnVsbCBwd19wYXNzd2Qgb2sgaWYgS2VyYmVyb3MgcGFzc3dv cmQgb2sgKi8KLSAgICAgICAgICAgIHB3ID09IE5VTEwgfHwKLSAgICAgICAgICAgICgoKnB3LT5w d19wYXNzd2QgIT0gJ1wwJyB8fAotICAgICAgICAgICAgICBzdHJjbXAoeHBhc3N3ZCwgcHctPnB3 X3Bhc3N3ZCkpCi0gICAgICAgICAgICAgJiYgIWtwYXNzKHB3LT5wd19uYW1lLCBwKSkKLSNlbHNl Ci0jaWZkZWYgQ0tfU1JQCi0gICAgICAgICAgICAvKiBjaGVjayB3aXRoIHRwYXNzd2QgZmlyc3Qg aWYgdGhlcmUgKi8KLSAgICAgICAgICAgIHB3ID09IE5VTEwgfHwgKnB3LT5wd19wYXNzd2QgPT0g J1wwJyB8fAotICAgICAgICAgICAgdF92ZXJpZnlwdyAocHctPnB3X25hbWUsIHApID09IDAgfHwK LSAgICAgICAgICAgICh0X3ZlcmlmeXB3IChwdy0+cHdfbmFtZSwgcCkgPCAwICYmCi0gICAgICAg ICAgICBzdHJjbXAgKHhwYXNzd2QsIHB3LT5wd19wYXNzd2QpKQotI2Vsc2UgLyogQ0tfU1JQICov Ci0gICAgICAgICAgICAvKiBUaGUgc3RyY21wIGRvZXMgbm90IGNhdGNoIG51bGwgcGFzc3dvcmRz ISAqLwotICAgICAgICAgICAgKHB3ID09IE5VTEwpIHx8ICgqcHctPnB3X3Bhc3N3ZCA9PSAnXDAn KSB8fAotICAgICAgICAgICAgc3RyY21wKHhwYXNzd2QsIHB3LT5wd19wYXNzd2QpCi0jZW5kaWYg LyogQ0tfU1JQICovCi0jZW5kaWYgLyogRlRQX0tFUkJFUk9TICovCi0gICAgICAgICAgICApIHsK LSAgICAgICAgICAgIGRlYnVnKEYxMDAsInp2cGFzcyBkZW5pZWQiLCIiLDApOwotICAgICAgICAg ICAgcHcgPSBOVUxMOwotICAgICAgICAgICAgenZ1bmFtZVswXSA9IE5VTDsKLSAgICAgICAgICAg IHJldHVybigwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLX1BBTSAqLwotICAgIH0KLQotICAg IChWT0lEKSBzZXRnaWQoKEdJRF9UKXB3LT5wd19naWQpOyAgIC8qIFNldCBncm91cCBJRCAqLwot Ci0jaWZuZGVmIE5PSU5JVEdST1VQUwotICAgIChWT0lEKSBpbml0Z3JvdXBzKHB3LT5wd19uYW1l LCBwdy0+cHdfZ2lkKTsKLSNlbmRpZiAvKiBOT0lOSVRHUk9VUFMgKi8KLQotICAgIGxvZ2dlZF9p biA9IDE7Ci0gICAgZGlyID0gcHctPnB3X2RpcjsKLQotI2lmZGVmIENLV1RNUAotICAgIC8qIE9w ZW4gd3RtcCBiZWZvcmUgY2hyb290ICovCi0gICAgaWYgKGNreHd0bXApIHsKLSAgICAgICAgc3By aW50Zihja3N5c2xpbmUsImlrc18lMDR4IiwgZ2V0cGlkKCkpOyAvKiBzYWZlICovCi0gICAgICAg IGxvZ3d0bXAoY2tzeXNsaW5lLCBwdy0+cHdfbmFtZSwKLSAgICAgICAgICAgICAgICAgY2xpZW50 aG9zdCA/IGNsaWVudGhvc3QgOiAiKHVua25vd24gaG9zdCkiCi0gICAgICAgICAgICAgICAgKTsK LSAgICAgICAgZGVidWcoRjExMCwiV1RNUCBsb2dpbiIsY2tzeXNsaW5lLGxvZ2dlZF9pbik7Ci0g ICAgfQotI2VuZGlmIC8qIENLV1RNUCAqLwotLyoKLSAgRm9yIGFub255bW91cyB1c2Vycywgd2Ug Y2hyb290IHRvIHVzZXIgZnRwJ3MgaG9tZSBkaXJlY3RvcnkgdW5sZXNzCi0gIHN0YXJ0ZWQgd2l0 aCAtLWFub25yb290Onh4eCwgaW4gd2hpY2ggY2FzZSB3ZSBjaHJvb3QgdG8geHh4LiAgV2UgbXVz dAotICBpbW1lZGlhdGVseSBjaGRpcigpIHRvIHRoZSBzYW1lIGRpcmVjdG9yeSB3ZSBjaHJvb3Qo KSB0byBvciBlbHNlIHRoZQotICBvbGQgY3VycmVudCBkaXJlY3RvcnkgcmVtYWlucyBhY2Nlc3Np YmxlIGFzICIuIiBvdXRzaWRlIHRoZSBuZXcgcm9vdC4KLSovCi0gICAgaWYgKGd1ZXN0KSB7Ci0g ICAgICAgIGlmIChhbm9ucm9vdCkgICAgICAgICAgICAgICAgICAgLyogTm9uLWRlZmF1bHQgYW5v bnltb3VzIHJvb3QgKi8KLSAgICAgICAgICBkaXIgPSBhbm9ucm9vdDsKLSAgICAgICAgZWxzZQot ICAgICAgICAgIG1ha2VzdHIoJmFub25yb290LGRpcik7Ci0gICAgICAgIGVycm5vID0gMDsKLSAg ICAgICAgZGVidWcoRjExMCwienZwYXNzIGFub24gY2hyb290IixkaXIsMCk7Ci0gICAgICAgIGlm IChjaHJvb3QoZGlyKSA8IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInp2cGFzcyBhbm9u IGNocm9vdCBGQUlMRUQiLGRpcixlcnJubyk7Ci0gICAgICAgICAgICBnb3RvIGJhZDsKLSAgICAg ICAgfQotICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIGlmIChjaGRpcigiLyIpIDwgMCkgewot ICAgICAgICAgICAgZGVidWcoRjExMSwienZwYXNzIGFub24gY2hkaXIgRkFJTEVEIixkaXIsZXJy bm8pOwotICAgICAgICAgICAgZ290byBiYWQ7Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjEx MCwienZwYXNzIGFub24gY2hyb290L2NoZGlyIE9LIixkaXIsMCk7Ci0gICAgfSBlbHNlIGlmIChj aGRpcihkaXIpIDwgMCkgeyAgICAgICAgLyogTm90IGd1ZXN0ICovCi0jaWZkZWYgQ09NTUVOVAot ICAgICAgICBpZiAoY2hkaXIoIi8iKSA8IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsIk5v bi1ndWVzdCBjaGRpciBGQUlMRUQiLGRpciwwKTsKLSAgICAgICAgICAgIGdvdG8gYmFkOwotICAg ICAgICB9IGVsc2UKLSAgICAgICAgICBwcmludGYoIj9ObyBkaXJlY3RvcnkhIExvZ2dpbmcgaW4g d2l0aCBob21lPS9cbiIpOwotI2Vsc2UKLSAgICAgICAgZGVidWcoRjExMCwienZwYXNzIG5vbi1n dWVzdCBjaGRpciBGQUlMRUQiLGRpciwwKTsKLSAgICAgICAgZ290byBiYWQ7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBCZSBjb25zZXJ2YXRpdmUgYXQgZmlyc3QgKi8KLSNlbmRpZiAvKiBDT01N RU5UICovCi0gICAgfQotICAgIGRlYnVnKEYxMTAsInp2cGFzcyBub24tZ3Vlc3QgY2hkaXIgT0si LGRpciwwKTsKLSAgICBpZiAoc2V0dWlkKChVSURfVClwdy0+cHdfdWlkKSA8IDApIHsKLSAgICAg ICAgZGVidWcoRjEwMSwienZwYXNzIHNldHVpZCBGQUlMRUQiLCIiLHB3LT5wd191aWQpOwotICAg ICAgICBnb3RvIGJhZDsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwienZwYXNzIHNldHVpZCBPSyIs IiIscHctPnB3X3VpZCk7Ci0KLSAgICBndWVzdHBhc3NbMF0gPSAnXDAnOwotICAgIGlmIChndWVz dCkgewotICAgICAgICBleHRlcm4gaW50IGZuY2FjdDsKLSAgICAgICAgaXNndWVzdCA9IDE7Ci0g ICAgICAgIGZuY2FjdCA9IFhZRlhfUjsgICAgICAgICAgICAgICAgLyogRklMRSBDT0xMSVNJT04g PSBSRU5BTUUgKi8KLSAgICAgICAgZGVidWcoRjExMCwiR1VFU1QgZm5jYWN0PVIiLHAsMCk7Ci0g ICAgICAgIGxzZXQoZ3Vlc3RwYXNzLCJhbm9ueW1vdXM6IiwxMCwzMik7Ci0gICAgICAgIGNrc3Ry bmNweSgmZ3Vlc3RwYXNzWzEwXSxwLEdVRVNUUEFTUy0xMCk7Ci0gICAgICAgIGhvbWUgPSAiLyI7 Ci0gICAgICAgIHByaW50ZigiQW5vbnltb3VzIGxvZ2luLlxyXG4iKTsKLQotI2lmZGVmIFNFVFBS T0NUSVRMRQotCS8qIHByb2N0aXRsZSBkZWNsYXJlZCB3aGVyZT8gIE9idmlvdXNseSB0aGlzIGNv ZGUgaXMgbmV2ZXIgY29tcGlsZWQuICovCi0gICAgICAgIHNwcmludGYocHJvY3RpdGxlLCAiJXM6 IGFub255bW91cy8lLipzIiwKLSAgICAgICAgICAgICAgICBjbGllbnRob3N0ID8gY2xpZW50aG9z dCA6ICIodW5rKSIsCi0gICAgICAgICAgICAgICAgc2l6ZW9mKHByb2N0aXRsZSkgLSBzaXplb2Yo Y2xpZW50aG9zdCkgLQotICAgICAgICAgICAgICAgIHNpemVvZigiOiBhbm9ueW1vdXMvIiksIHAp OwotICAgICAgICBzZXRwcm9jdGl0bGUocHJvY3RpdGxlKTsKLSNlbmRpZiAvKiBTRVRQUk9DVElU TEUgKi8KLQotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgIGlmIChja3hzeXNsb2cgJiYgY2t4bG9n Z2luZykgewotICAgICAgICAgICAgc3lzbG9nKExPR19JTkZPLAotICAgICAgICAgICAgICAgICAg ICJsb2dpbjogYW5vbnltb3VzICVzICVzIiwKLSAgICAgICAgICAgICAgICAgICBjbGllbnRob3N0 ID8gY2xpZW50aG9zdCA6ICIodW5rbm93biBob3N0KSIsCi0gICAgICAgICAgICAgICAgICAgcAot ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwot Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVhbCB1c2VyICov Ci0gICAgICAgIGlzZ3Vlc3QgPSAwOwotICAgICAgICBob21lID0gZGlyOwotICAgICAgICBja3N0 cm5jcHkoZ3Vlc3RwYXNzLHp2dW5hbWUsR1VFU1RQQVNTKTsKLQotICAgICAgICBwcmludGYoIlVz ZXIgJXMgbG9nZ2VkIGluLlxyXG4iLCBwdy0+cHdfbmFtZSk7Ci0jaWZkZWYgU0VUUFJPQ1RJVExF Ci0JLyogbm90IHVzZWQgKi8KLSAgICAgICAgc3ByaW50Zihwcm9jdGl0bGUsICIlczogJXMiLAot ICAgICAgICAgICAgICAgIGNsaWVudGhvc3QgPyBjbGllbnRob3N0IDogIih1bmspIiwKLSAgICAg ICAgICAgICAgICBwdy0+cHdfbmFtZQotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHNldHBy b2N0aXRsZShwcm9jdGl0bGUpOwotI2VuZGlmIC8qIFNFVFBST0NUSVRMRSAqLwotCi0jaWZkZWYg Q0tTWVNMT0cKLSAgICAgICAgaWYgKGNreHN5c2xvZyAmJiBja3hsb2dnaW5nKQotICAgICAgICAg IHN5c2xvZyhMT0dfSU5GTywgImxvZ2luOiAlcyAlcyIsCi0gICAgICAgICAgICAgICAgIHB3LT5w d19uYW1lLAotICAgICAgICAgICAgICAgICBjbGllbnRob3N0ID8gY2xpZW50aG9zdCA6ICIodW5r bm93biBob3N0KSIKLSAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwot ICAgIH0KLSAgICBja3N0cm5jcHkoenZob21lLGhvbWUsQ0tNQVhQQVRIKTsgICAvKiBTZXQgZW52 aXJvbm1lbnQgdmFyaWFibGVzICovCi0jaWZuZGVmIE5PUFVURU5WCi0KLSAgICBja21ha21zZyh6 ZW52dXNlcixaRU5WVVNFUiwiVVNFUj0iLHp2dW5hbWUsTlVMTCxOVUxMKTsKLSAgICBwdXRlbnYo KGNoYXIgKil6ZW52dXNlcik7Ci0gICAgY2ttYWttc2coemVudmxvZ25hbWUsWkVOVkxPR05BTUUs IkxPR05BTUU9Iix6dnVuYW1lLE5VTEwsTlVMTCk7Ci0gICAgcHV0ZW52KChjaGFyICopemVudmxv Z25hbWUpOwotICAgIGNrbWFrbXNnKHplbnZob21lLFpFTlZIT01FLCJIT01FPSIsenZob21lLE5V TEwsTlVMTCk7Ci0gICAgcHV0ZW52KChjaGFyICopemVudmhvbWUpOwotI2VuZGlmIC8qIE5PUFVU RU5WICovCi0gICAgLyogaG9tZGlyID0gKGNoYXIgKil6dmhvbWU7ICovCi0gICAgY2tzdHJuY3B5 KChjaGFyICopdWlkYnVmLChjaGFyICopenZ1bmFtZSw2NCk7Ci0gICAgKFZPSUQpIHVtYXNrKGRl ZnVtYXNrKTsKLSNpZmRlZiBJS1NEQgotICAgIGlmIChpa2Rib3BlbikgewotICAgICAgICBjaGFy ICogcDI7Ci0gICAgICAgIGludCBrOwotICAgICAgICBleHRlcm4gY2hhciBkYnJlY1tdOwotICAg ICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBteWZsYWdzOwotICAgICAgICBleHRlcm4gdW5zaWdu ZWQgaW50IG15ZGJzbG90OwotICAgICAgICBleHRlcm4gc3RydWN0IGlrc2RiZmxkIGRiZmxkW107 Ci0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICAgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcg bXlhbW9kZSwgbXlhdHlwZTsKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotICAgICAg ICBteWZsYWdzIHw9IERCRl9MT0dHRUQ7Ci0jaWZkZWYgREVCVUcKLQlpZiAoZGVibG9nKSB7Ci0J ICAgIGRlYnVnKEYxMDEsInp2cGFzcyBndWVzdCIsIiIsZ3Vlc3QpOwotCSAgICBkZWJ1ZyhGMTEx LCJ6dnBhc3MgenZ1bmFtZSIsenZ1bmFtZSwwKTsKLQkgICAgZGVidWcoRjExMCwienZwYXNzIGd1 ZXN0cGFzcyIsZ3Vlc3RwYXNzLDApOwotCSAgICBkZWJ1ZyhGMTEwLCJ6dnBhc3MgZGlyIixkaXIs MCk7Ci0JICAgIGRlYnVnKEYxMTAsInp2cGFzcyBob21lIixob21lLDApOwotCSAgICBkZWJ1ZyhG MTEwLCJ6dnBhc3MgYW5vbnJvb3QiLGFub25yb290LDApOwotCX0KLSNlbmRpZiAvKiBERUJVRyAq LwotICAgICAgICBwMiA9IGd1ZXN0ID8gZ3Vlc3RwYXNzIDogenZ1bmFtZTsKLSAgICAgICAgaWYg KGd1ZXN0KSB7Ci0gICAgICAgICAgICBwMiA9IChjaGFyICopZ3Vlc3RwYXNzOwotICAgICAgICAg ICAgbXlmbGFncyAmPSB+REJGX1VTRVI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBw MiA9IChjaGFyICopenZ1bmFtZTsKLSAgICAgICAgICAgIG15ZmxhZ3MgfD0gREJGX1VTRVI7Ci0g ICAgICAgIH0KLSAgICAgICAgayA9IHN0cmxlbihwMik7Ci0gICAgICAgIHN0cm5jcHkoJmRicmVj W0RCX1VMRU5dLHVsb25ndG9oZXgoKHVuc2lnbmVkIGxvbmcpayw0KSw0KTsKLSAgICAgICAgbHNl dCgmZGJyZWNbZGJmbGRbZGJfVVNFUl0ub2ZmXSxwMiwxMDI0LDMyKTsKLSAgICAgICAgc3RybmNw eSgmZGJyZWNbREJfRkxBR1NdLHVsb25ndG9oZXgobXlmbGFncyw0KSw0KTsKLSNpZmRlZiBDS19B VVRIRU5USUNBVElPTgotICAgICAgICBteWFtb2RlID0gY2tfdG5fYXV0aF92YWxpZCgpOwotICAg ICAgICBzdHJuY3B5KCZkYnJlY1tEQl9BTU9ERV0sdWxvbmd0b2hleChteWFtb2RlLDQpLDQpOwot ICAgICAgICBteWF0eXBlID0gY2tfdG5fYXV0aGVudGljYXRlZCgpOwotICAgICAgICBzdHJuY3B5 KCZkYnJlY1tEQl9BVFlQRV0sdWxvbmd0b2hleChteWF0eXBlLDQpLDQpOwotI2VuZGlmIC8qIENL X0FVVEhFTlRJQ0FUSU9OICovCi0gICAgICAgIGlmIChndWVzdCkgewotICAgICAgICAgICAgcDIg PSBkaXI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwMiA9IHpndGRpcigpOwotICAg ICAgICAgICAgaWYgKCFwMikgcDIgPSAiIjsKLSAgICAgICAgICAgIGlmICghKnAyKSBwMiA9IGhv bWU7Ci0gICAgICAgIH0KLSAgICAgICAgc3RybmNweSgmZGJyZWNbREJfRExFTl0sCi0gICAgICAg ICAgICAgICAgdWxvbmd0b2hleCgodW5zaWduZWQgbG9uZylzdHJsZW4ocDIpLDQpLAotICAgICAg ICAgICAgICAgIDQKLSAgICAgICAgICAgICAgICApOwotICAgICAgICBsc2V0KCZkYnJlY1tkYmZs ZFtkYl9ESVJdLm9mZl0scDIsMTAyNCwzMik7Ci0gICAgICAgIHVwZHNsb3QobXlkYnNsb3QpOwot ICAgIH0KLSNlbmRpZiAvKiBJS1NEQiAqLwotICAgIHJldHVybigxKTsKLQotYmFkOiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1vbiBmYWlsdXJlIGV4aXQgKi8KLSAg ICB6dnVuYW1lWzBdID0gTlVMOwotICAgIHp2bG9nb3V0KCk7Ci0gICAgcmV0dXJuKDApOwotfQot I2VuZGlmIC8qIENLX0xPR0lOICovCi0KLS8qIEJ1Z2d5IFhlbml4IDIuMy40IGNjIG5lZWRzIHRo aXMgbGluZSBhZnRlciB0aGUgZW5kaWYgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWlucy50eHQgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrdWlucy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDA4Y2ZlZGIuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja3VpbnMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzU4OCArMCwwIEBACi0KLSAgIFsx XVRoZSBDb2x1bWJpYSBDcm93biBUaGUgS2VybWl0IFByb2plY3QgfCBDb2x1bWJpYSBVbml2ZXJz aXR5Ci0gICA2MTIgV2VzdCAxMTV0aCBTdHJlZXQsIE5ldyBZb3JrIE5ZIDEwMDI1IFVTQSBvIFsy XWtlcm1pdEBjb2x1bWJpYS5lZHUKLSAgIC4uLnNpbmNlIDE5ODEKLSAgIFszXUhvbWUgWzRdS2Vy bWl0IDk1IFs1XUMtS2VybWl0IFs2XVNjcmlwdHMgWzddQ3VycmVudCBbOF1OZXcgWzldRkFRCi0g ICBbMTBdU3VwcG9ydAotCi1DLUtlcm1pdCA5LjAgSW5zdGFsbGF0aW9uIEluc3RydWN0aW9ucyBh bmQgT3B0aW9ucyBmb3IgVW5peAotCi0gICBbIFsxMV1Db250ZW50cyBdIFsgWzEyXUMtS2VybWl0 IF0gWyBbMTNdS2VybWl0IEhvbWUgXQotCi0gICBGcmFuayBkYSBDcnV6Ci0gICBUaGUgS2VybWl0 IFByb2plY3QKLSAgIENvbHVtYmlhIFVuaXZlcnNpdHkKLQotICAgICAgQXMgb2YgQy1LZXJtaXQg dmVyc2lvbjogOS4wLjMwMiwgMjAgQXVndXN0IDIwMTEKLSAgICAgIFRoaXMgZmlsZSBsYXN0IHVw ZGF0ZWQ6IFN1biBBdWcgMjEgMTI6MDg6MjkgMjAxMSAoTmV3IFlvcmsgQ2l0eQotICAgdGltZSkK LQotICAgSUYgWU9VIEFSRSBSRUFESU5HIEEgUExBSU4tVEVYVCB2ZXJzaW9uIG9mIHRoaXMgZG9j dW1lbnQsIGl0IGlzIGEKLSAgIHBsYWluLXRleHQgY29weSBvZiBhIFdlYiBwYWdlLiBZb3UgY2Fu IHZpc2l0IHRoZSBvcmlnaW5hbCAoYW5kIHBvc3NpYmx5Ci0gICBtb3JlIHVwLXRvLWRhdGUpIFdl YiBwYWdlIGhlcmU6Ci0KLVsxNF1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwKLQotQ09OVEVOVFMKLQotICAgWzE1XU9WRVJWSUVXCi0gICAgMS4gWzE2XUlOVEVSTkVU IFFVSUNLIFNUQVJUCi0gICAgMi4gWzE3XUlOU1RBTExJTkcgRlJPTSBQQUNLQUdFUwotICAgIDMu IFsxOF1JTlNUQUxMSU5HIFBSRUJVSUxUIEJJTkFSSUVTCi0gICAgNC4gWzE5XUJVSUxESU5HIEZS T00gU09VUkNFIENPREUKLSAgICA1LiBbMjBdSU5TVEFMTElORyBUSEUgS0VSTUlUIEZJTEVTCi0g ICAgNi4gWzIxXUlOU1RBTExJTkcgVU5JWCBDLUtFUk1JVCBGUk9NIERPUy1GT1JNQVQgRElTS0VU VEVTCi0gICAgNy4gWzIyXUNIRUNLSU5HIFRIRSBSRVNVTFRTCi0gICAgOC4gWzIzXVJFRFVDSU5H IFRIRSBTSVpFIE9GIFRIRSBFWEVDVVRBQkxFIFBST0dSQU0gSU1BR0UKLSAgICA5LiBbMjRdVU5J WCBWRVJTSU9OUwotICAgMTAuIFsyNV1ESUFMSU5HIE9VVCBBTkQgQ09PUkRJTkFUSU5HIFdJVEgg VVVDUAotICAgMTEuIFsyNl1SVU5OSU5HIFVOSVggQy1LRVJNSVQgU0VUVUlEIE9SIFNFVEdJRAot ICAgMTIuIFsyN11DT05GSUdVUklORyBVTklYIFdPUktTVEFUSU9OUwotICAgMTMuIFsyOF1CSVpB UlJFIEJFSEFWSU9SIEFUIFJVTlRJTUUKLSAgIDE0LiBbMjldQ1JBU0hFUyBBTkQgQ09SRSBEVU1Q UwotICAgMTUuIFszMF1TWVNMT0dHSU5HCi0gICAxNi4gWzMxXUJVSUxESU5HIFNFQ1VSRSBWRVJT SU9OUyBPRiBDLUtFUk1JVCA5LjAKLSAgIDE3LiBbMzJdSU5TVEFMTElORyBDLUtFUk1JVCBBUyBB TiBTU0ggU0VSVkVSIFNVQlNZU1RFTQotCi1PVkVSVklFVwotCi0gICBbIFszM11Ub3AgXSBbIFsz NF1Db250ZW50cyBdIFsgWzM1XU5leHQgXQotCi0gICAgIFdBUk5JTkc6IFRoaXMgZG9jdW1lbnQg Y29udGFpbnMgbm90ZXMgdGhhdCBoYXZlIGJlZW4gYWNjdW11bGF0aW5nCi0gICAgIHNpbmNlIHRo ZSBtaWQgMTk4MHMuIE1hbnkgb2YgdGhlIHByb2R1Y3RzIGFuZCBVbml4IHZlcnNpb25zCi0gICAg IG1lbnRpb25lZCBoZXJlIGhhdmUgbm90IGJlZW4gaGVhcmQgb2YgaW4gYSBsb25nIHdoaWxlLCBi dXQgdGhhdCBkb2VzCi0gICAgIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoZXkgYXJlIG5vdCBzdGls bCBydW5uaW5nIGluIHNvbWUgb2JzY3VyZQotICAgICBub29rLgotCi0gICBUaGlzIGZpbGUgY29u dGFpbnMgVW5peC1zcGVjaWZpYyBpbmZvcm1hdGlvbi4gQSBsb3Qgb2YgaXQuIFVubGlrZSBtb3N0 Ci0gICBvdGhlciBwYWNrYWdlcywgQy1LZXJtaXQgdHJpZXMgdmVyeSBoYXJkIHRvIGJlIHBvcnRh YmxlIHRvIGV2ZXJ5IFVuaXgKLSAgIHZhcmlldHkgKGFuZCBldmVyeSByZWxlYXNlIG9mIGVhY2gg b25lKSBrbm93biB0byBleGlzdCwgaW5jbHVkaW5nIG1hbnkKLSAgIHRoYXQgYXJlIHF1aXRlIG9s ZCwgYXMgd2VsbCBhcyB0byBvdGhlciBwbGF0Zm9ybXMgbGlrZSBWTVMsIEFPUy9WUywKLSAgIFZP UywgT1MtOSwgdGhlIEJlQm94LCB0aGUgQW1pZ2EsIGV0Yy4KLQotICAgU2luY2UgQy1LZXJtaXQg Z2V0cyBzbyBkZWVwbHkgaW50byB0aGUgZmlsZSBzeXN0ZW0sIGkvbyBzeXN0ZW0sIGFuZAotICAg b3RoZXIgYXJlYXMgdGhhdCBkaWZmZXIgcmFkaWNhbGx5IGZyb20gb25lIFVuaXggcGxhdGZvcm0g dG8gdGhlIG5leHQsCi0gICB0aGlzIG1lYW5zIHRoYXQgYSBsb3QgY2FuIGdvIHdyb25nIHdoZW4g eW91IHRyeSB0byBpbnN0YWxsIEMtS2VybWl0IG9uCi0gICAoZm9yIGV4YW1wbGUpIGEgbmV3IHJl bGVhc2Ugb2YgYSBwYXJ0aWN1bGFyIHZhcmlldHkgb2YgVW5peCwgaW4gd2hpY2gKLSAgIGNlcnRh aW4gdGhpbmdzIG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGF0IEMtS2VybWl0IGRlcGVuZGVkIHVwb24u Ci0KLSAgIFRoaXMgZmlsZSBjb25jZW50cmF0ZXMgb24gaW5zdGFsbGF0aW9uLiBGb3IgYSBkZXNj cmlwdGlvbiBvZiBnZW5lcmFsCi0gICBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEMtS2VybWl0 LCBwbGVhc2UgcmVhZCB0aGUgWzM2XUNvbmZpZ3VyYXRpb25zCi0gICBPcHRpb25zIGRvY3VtZW50 LiBGb3IgdHJvdWJsZXNob290aW5nIGFmdGVyIGluc3RhbGxhdGlvbiwgc2VlIHRoZQotICAgWzM3 XUdlbmVyYWwgSGludHMgYW5kIFRpcHMgYW5kIFszOF1Vbml4LVNwZWNpZmljIEhpbnRzIGFuZCBU aXBzCi0gICBkb2N1bWVudHMuIFRoZSBsYXR0ZXIsIGluIHBhcnRpY3VsYXIsIGNvbnRhaW5zIGxv dHMgb2YgaW5mb3JtYXRpb24gb24KLSAgIGxvdHMgb2Ygc3BlY2lmaWMgVW5peCBwbGF0Zm9ybXMu IElmIHlvdSB3YW50IHRvIHdvcmsgb24gdGhlIHNvdXJjZQotICAgY29kZSwgc2VlIHRoZSBbMzld Qy1LZXJtaXQgUHJvZ3JhbSBMb2dpYyBNYW51YWwKLQotICAgWW91IG1heSBpbnN0YWxsIEMtS2Vy bWl0OgotCi0gICAgICogRnJvbSBhbiAiWzQwXWluc3RhbGwgcGFja2FnZSIsIGlmIG9uZSBpcyBh dmFpbGFibGUuCi0gICAgICogQXMgYSBbNDFdcHJlYnVpbHQgYmluYXJ5LCBpZiBhdmFpbGFibGUs IHBsdXMgYWNjb21wYW55aW5nIHRleHQKLSAgICAgICBmaWxlcy4KLSAgICAgKiBCeSBidWlsZGlu ZyBmcm9tIFs0Ml1zb3VyY2UgY29kZS4KLQotMS4gSU5URVJORVQgUVVJQ0sgU1RBUlQKLQotICAg WyBbNDNdVG9wIF0gWyBbNDRdQ29udGVudHMgXSBbIFs0NV1OZXh0IF0gWyBbNDZdUHJldmlvdXMg XQotCi0gICBJZiB5b3VyIFVuaXggY29tcHV0ZXIgaXMgb24gdGhlIEludGVybmV0IGFuZCBpdCBo YXMgYSBDIGNvbXBpbGVyLAotICAgaGVyZSdzIGhvdyB0byBkb3dubG9hZCwgYnVpbGQsIGFuZCBp bnN0YWxsIEMtS2VybWl0IGRpcmVjdGx5IGZyb20gdGhlCi0gICAidGFyYmFsbHMiIG9yIFppcCBh cmNoaXZlczoKLQotICAgIDEuIE1ha2UgYSBmcmVzaCBkaXJlY3RvcnkgYW5kIGNkIHRvIGl0Lgot ICAgIDIuIERvd25sb2FkIHRoZSBDLUtlcm1pdCBzb3VyY2UgY29kZToKLSAgICAgICBbNDddZnRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvYXJjaGl2ZXMvY2t1MjExLnRhci5aIChjb21wcmVz cwotICAgICAgIGZvcm1hdCkgb3IgWzQ4XWZ0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Fy Y2hpdmVzL2NrdTIxMS50YXIuZ3oKLSAgICAgICAoZ3VuemlwIGZvcm1hdCkuIElmIHRob3NlIGxp bmtzIGRvbid0IHdvcmssIEZUUCB0cmFuc2ZlcnMgYXJlIGJlaW5nCi0gICAgICAgYmxvY2tlZDsg dHJ5IHRoZXNlIEhUVFAgbGlua3MgaW5zdGVhZDoKLSAgICAgICBbNDldaHR0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUvZnRwL2FyY2hpdmVzL2NrdTIxMS50YXIuWiAoY29tcHJlc3MKLSAgICAgICBm b3JtYXQpIG9yCi0gICAgICAgWzUwXWh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2Z0cC9hcmNo aXZlcy9ja3UyMTEudGFyLmd6IChndW56aXAKLSAgICAgICBmb3JtYXQpLgotICAgIDMuIFVuY29t cHJlc3MgdGhlIGNvbXByZXNzZWQgdGFyIGZpbGUgd2l0aCAidW5jb21wcmVzcyIgb3IgImd1bnpp cCIsCi0gICAgICAgYWNjb3JkaW5nIHRvIHdoaWNoIHR5cGUgb2YgY29tcHJlc3NlZCBmaWxlIHlv dSBkb3dubG9hZGVkLiAoSWYgeW91Ci0gICAgICAgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzLCB5b3Ug Y291bGQgZG93bmxvYWQgYSAobXVjaCBsYXJnZXIpCi0gICAgICAgdW5jb21wcmVzc2VkIHRhciBh cmNoaXZlIGRpcmVjdGx5OgotICAgICAgIFs1MV1mdHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9hcmNoaXZlcy9ja3UyMTEudGFyIG9yCi0gICAgICAgWzUyXWh0dHA6Ly9rZXJtaXQuY29sdW1i aWEuZWR1L2Z0cC9hcmNoaXZlcy9ja3UyMTEudGFyCi0gICAgNC4gTm93IHR5cGUgInRhciB4dmYg Y2t1MjExLnRhciIgdG8gdW5wYWNrIHRoZSBpbmRpdmlkdWFsIGZpbGVzIGZyb20KLSAgICAgICB0 aGUgdGFyIGFyY2hpdmUuCi0gICAgNS4gVHlwZSAicm0gY2t1MjExLnRhciIgdG8gZ2V0IHJpZCBv ZiB0aGUgdGFyIGFyY2hpdmUsIHdoaWNoIGlzIG5vCi0gICAgICAgbG9uZ2VyIG5lZWRlZC4KLSAg ICA2LiBSZWFkIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoZSBtYWtlZmlsZSB0byBmaW5k IG91dCB3aGljaAotICAgICAgIHRhcmdldCB0byB1c2UgYW5kIHRoZW4gdHlwZSB0aGUgYXBwcm9w cmlhdGUgIm1ha2UiIGNvbW1hbmQsIHN1Y2ggYXMKLSAgICAgICAibWFrZSBsaW51eCIsICJtYWtl IHNvbGFyaXM4IiwgZXRjLgotICAgIDcuIFRoaXMgcHJvZHVjZXMgYSBiaW5hcnkgaW4geW91ciBj dXJyZW50IGRpcmVjdG9yeSBjYWxsZWQgIndlcm1pdCIuCi0gICAgICAgU3RhcnQgaXQgYnkgdHlw aW5nICIuL3dlcm1pdCIgYW5kIFs1M110cnkgaXQgb3V0IHRvIG1ha2Ugc3VyZSBpdAotICAgICAg IHdvcmtzLiBUaGVuIHJlYWQgWzU0XVNlY3Rpb24gNSBmb3IgaG93IHRvIGluc3RhbGwgaXQsIG9y IHNpbXBseQotICAgICAgIGNvcHkgdGhlIHdlcm1pdCBiaW5hcnkgdG8gdGhlIGRlc2lyZWQgcHVi bGljIGRpcmVjdG9yeSwgcmVuYW1lIGl0Ci0gICAgICAgdG8ga2VybWl0LCBhbmQgZ2l2ZSBpdCB0 aGUgbmVlZGVkIHBlcm1pc3Npb25zIChhbmQsIGlmIGl0IGlzIGdvaW5nCi0gICAgICAgdG8gYmUg dXNlZCB0byBkaWFsIG91dCwgZ2l2ZSBpdCB0aGUgc2FtZSBncm91cCBhbmQgb3duZXIgYW5kCi0g ICAgICAgcGVybWlzc2lvbnMgYXMgdGhlIGN1LCB0aXAsIG9yIG1pbmljb20gcHJvZ3JhbSkuCi0K LSAgIEZvciBzZWN1cmUgaW5zdGFsbGF0aW9ucywgc2VlIFs1NV1TZWN0aW9ucyA1IGFuZCBbNTZd MTYuCi0KLTIuIElOU1RBTExJTkcgRlJPTSBQQUNLQUdFUwotCi0gICBbIFs1N11Ub3AgXSBbIFs1 OF1Db250ZW50cyBdIFsgWzU5XU5leHQgXSBbIFs2MF1QcmV2aW91cyBdCi0KLSAgIFZhcmlvdXMg VW5peCB2YXJpZXRpZXMgLS0gTGludXgsIFNvbGFyaXMsIEFJWCwgZXRjIC0tIG5vdyBpbmNvcnBv cmF0ZQotICAgdGhlIGlkZWEgb2YgImluc3RhbGwgcGFja2FnZXMiLCBhbmQgbWFueSB1c2VycyBl eHBlY3QgdG8gZmluZCBhbGwgbmV3Ci0gICBhcHBsaWNhdGlvbnMgaW4gdGhpcyBmb3JtYXQuIEEg c2VsZWN0aW9uIG9mIGluc3RhbGwgcGFja2FnZXMgbWlnaHQgYmUKLSAgIGF2YWlsYWJsZSBmb3Ig YW55IGdpdmVuIHJlbGVhc2Ugb2YgQy1LZXJtaXQsIGJ1dCB0aGVyZSBpcyBhIHRyYWRlb2ZmCi0g ICBiZXR3ZWVuIGNvbnZlbmllbmNlIGFuZCBzYWZldHkuIFVuaXggcHJlc2VudHMgc2V2ZXJhbCBu b3RhYmxlIHByb2JsZW1zCi0gICB0byB0aGUgYnVpbGRlciBvZiBpbnN0YWxsIHBhY2thZ2VzOgot Ci0gICAgYS4gU2luY2UgQy1LZXJtaXQgaXMgcG9ydGFibGUgdG8gbWFueSBub24tVW5peCBwbGF0 Zm9ybXMgKFZNUywgVk9TLAotICAgICAgIEFPUy9WUywgZXRjKSwgc29tZSBvZiB0aGUgZmlsZXMg aW4gdGhlIEMtS2VybWl0IGRpc3RyaWJ1dGlvbiBkbyBub3QKLSAgICAgICBmaXQgaW50byB0aGUg VW5peCBhcHBsaWNhdGlvbiBtb2RlbC4gSW4gcGFydGljdWxhciwgQy1LZXJtaXQKLSAgICAgICBp bmNsdWRlcyBzb21lIHBsYWluIHRleHQgZmlsZXMgKGRlc2NyaWJlZCBpbiBbNjFdU2VjdGlvbiA1 KSBhbmQKLSAgICAgICBVbml4IGhhcyBubyBzdGFuZGFyZCBwbGFjZSB0byBwdXQgc3VjaCBmaWxl cy4gVHlwaWNhbCBVbml4IHBhY2thZ2UKLSAgICAgICBtYW5hZ2VycyBkbyBub3QgYWxsb3cgZm9y IHRoZW0uIFdoZXJlIHNob3VsZCB0aGV5IGdvLCBhbmQgaG93IHdpbGwKLSAgICAgICB0aGUgdXNl ciBrbm93IHdoZXJlIHRvIGZpbmQgdGhlbT8KLSAgICBiLiBJbnN0YWxsYXRpb24gb2YgYW55IHBy b2dyYW0gdGhhdCB3aWxsIGJlIHVzZWQgdG8gbWFrZSBtb2RlbSBjYWxscwotICAgICAgIHJlcXVp cmVzIHNvbWUgaW1wb3J0YW50IGRlY2lzaW9ucyBmcm9tIHRoZSBpbnN0YWxsZXIgcmVnYXJkaW5n Ci0gICAgICAgc2VjdXJpdHkgYW5kIHByaXZpbGVnZS4KLQotICAgSXRlbSAoYikgaXMgZGlzY3Vz c2VkIGF0IGxlbmd0aCBpbiBbNjJdU2VjdGlvbnMgMTAgYW5kIFs2M10xMSBvZiB0aGlzCi0gICBk b2N1bWVudCwgYnV0IHRoZSBwYWNrYWdlLXJlbGF0ZWQgYXNwZWN0cyBhcmUgYWxzbyBnaXZlbiBo ZXJlLiBUaGUKLSAgIGJhc2ljIHByb2JsZW0gaXMgdGhhdCBVbml4IGRpYWxvdXQgZGV2aWNlcyBh bmQgdGhlIFVVQ1AgImxvY2sgZmlsZXMiCi0gICB0aGF0IHJlZ3VsYXRlIGNvbnRlbnRpb24gZm9y IHRoZW0gKGRlc2NyaWJlZCBpbiBbNjRdU2VjdGlvbiAxMCkgYXJlCi0gICB1c3VhbGx5IHByb3Rl Y3RlZCBhZ2FpbnN0ICJ3b3JsZCIuIFRoZXJlZm9yZSwgdGhlIGluc3RhbGwgcHJvY2VkdXJlCi0g ICBtdXN0IGVpdGhlciBydW4gYXMgcm9vdCBpbiBvcmRlciB0byBnaXZlIHRoZSBLZXJtaXQgYmlu YXJ5IHRoZSByZXF1aXJlZAotICAgcGVybWlzc2lvbnMsIGdyb3VwLCBhbmQvb3Igb3duZXIsIG9y IGVsc2UgdGhlIGRpYWxvdXQgZGV2aWNlcyBhbmQKLSAgIGFzc29jaWF0ZWQgZGlyZWN0b3JpZXMg bXVzdCBiZSBvcGVuIGZvciBncm91cCBvciB3b3JsZCByZWFkaW5nIGFuZAotICAgd3JpdGluZy4g T3RoZXJ3aXNlLCB0aGUgS2VybWl0IHByb2dyYW0ganVzdCBpbnN0YWxsZWQgV0lMTCBOT1QgV09S SyBmb3IKLSAgIGRpYWxpbmcgb3V0LgotCi0gICBUaHVzLCBhIHdlbGwtY3JhZnRlZCBpbnN0YWxs YXRpb24gcHJvY2VkdXJlIHNob3VsZCBwcmVzZW50IHRoZSBvcHRpb25zCi0gICBhbmQgYWxsb3cg dGhlIGluc3RhbGxlciB0byBjaG9vc2UgdGhlIG1ldGhvZCwgaWYgYW55LCBmb3IgcmVndWxhdGlu ZwotICAgYWNjZXNzIHRvIHRoZSBkaWFsb3V0IGRldmljZXM6Ci0KLSAgICBhLiBDaGVjayB0aGUg cGVybWlzc2lvbnMgb2YgdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSBhbmQgdGhlIGRpYWxvdXQKLSAg ICAgICBkZXZpY2VzLiBJZiB0aGV5IGRvIG5vdCBhbGxvdyBncm91cCBvciB3b3JsZCBSL1cgYWNj ZXNzLCB0aGVuOgotICAgIGIuICJZb3VyIFVVQ1AgbG9ja2ZpbGUgZGlyZWN0b3J5IGFuZC9vciBk aWFsb3V0IGRldmljZXMgcmVxdWlyZQotICAgICAgIHByaXZpbGVnZSB0byBhY2Nlc3MuIFlvdSBt dXN0IGVpdGhlciBjaGFuZ2UgdGhlaXIgcGVybWlzc2lvbnMgb3IKLSAgICAgICBpbnN0YWxsIEtl cm1pdCB3aXRoIHByaXZpbGVnZXMuIgotICAgIGMuICJJZiB5b3Ugd2lzaCB0byBpbnN0YWxsIEtl cm1pdCB3aXRoIHByaXZpbGVnZXMsIGl0IHdpbGwgYmUgZ2l2ZW4KLSAgICAgICB0aGUgc2FtZSBv d25lciwgZ3JvdXAsIGFuZCBwZXJtaXNzaW9ucyBhcyB0aGUgY3UgcHJvZ3JhbSBzbyBpdCBjYW4K LSAgICAgICB1c2UgdGhlIGRpYWxvdXQgZGV2aWNlcy4iIChUaGlzIGlzIGluY3JlYXNpbmdseSBw cm9ibGVtYXRpYyBhcyBzb21lCi0gICAgICAgbmV3ZXIgVW5peCBzeXN0ZW1zIGxpa2UgTWFjIE9T IFggZG9uJ3QgaGF2ZSBhIGN1IHByb2dyYW0sIG9yIGV2ZW4gYQotICAgICAgIHNlcmlhbCBwb3J0 ISkKLSAgICBkLiBJZiB0aGV5IGNob29zZSAoYykgYnV0IHRoZSB1c2VyIGlzIG5vdCByb290LCBn aXZlIGEgbWVzc2FnZSB0aGF0Ci0gICAgICAgdGhlIGluc3RhbGwgcHJvY2VkdXJlIGNhbiBiZSBy dW4gb25seSBieSByb290IGFuZCB0aGVuIHF1aXQuCi0KLSAgIEl0IHNob3VsZCBnbyB3aXRob3V0 IHNheWluZywgb2YgY291cnNlLCB0aGF0IGFueSBiaW5hcmllcyB0aGF0IGFyZSB0bwotICAgYmUg aW5jbHVkZWQgaW4gYW4gaW5zdGFsbCBwYWNrYWdlIHNob3VsZCBiZSBidWlsdCBmcmVzaCBvbiB0 aGUgZXhhY3QKLSAgIHBsYXRmb3JtIChlLmcuIFJlZCBIYXQgOC4wIG9uIEludGVsKSBmb3Igd2hp Y2ggdGhlIHBhY2thZ2UgaXMgdGFyZ2V0ZWQ7Ci0gICBwcmVidWlsdCBiaW5hcmllcyAoWzY1XW5l eHQgc2VjdGlvbikgZnJvbSBvdGhlciBzaXRlcyBhcmUgbGlrZWx5IHRvCi0gICBoYXZlIGxpYnJh cnkgbWlzbWF0Y2hlcy4gWzY2XUNMSUNLIEhFUkUgZm9yIG1vcmUgYWJvdXQgYnVpbGRpbmcKLSAg IEMtS2VybWl0IGluc3RhbGwgcGFja2FnZXMuCi0KLSAgIFRoZSBLZXJtaXQgUHJvamVjdCBkb2Vz IG5vdCBoYXZlIHRoZSByZXNvdXJjZXMgb3IgdGhlIGV4cGVydGlzZSB0byBtYWtlCi0gICBpbnN0 YWxsIHBhY2thZ2VzIGZvciBldmVyeSBwbGF0Zm9ybS4gTW9zdCBpbnN0YWxsIHBhY2thZ2VzLCB0 aGVyZWZvcmUsCi0gICBhcmUgY29udHJpYnV0ZWQgYnkgb3RoZXJzLCBhbmQgdGhleSBkbyBub3Qg bmVjZXNzYXJpbHkgZm9sbG93IHRoZQotICAgZ3VpZGVsaW5lcyBnaXZlbiBhYm92ZS4gUGF5IGF0 dGVudGlvbiB0byB3aGF0IHRoZXkgZG8uCi0KLSAgIElmIHlvdSBhcmUgYW4gZW5kIHVzZXIgd2hv IGhhcyBvYnRhaW5lZCBhIEMtS2VybWl0IGluc3RhbGwgcGFja2FnZSBmb3IKLSAgIGEgcGFydGlj dWxhciBwbGF0Zm9ybSwgeW91IHNob3VsZCBiZSBhd2FyZSB0aGF0IHNvbWUgYWRkaXRpb25hbCBz dGVwcwotICAgbWlnaHQgbmVlZGVkIGlmIHlvdSB3YW50IHRvIHVzZSBLZXJtaXQgdG8gZGlhbCBv dXQuIFJlYWQgWzY3XVNlY3Rpb24gMTAKLSAgIGZvciBkZXRhaWxzLgotCi0zLiBJTlNUQUxMSU5H IFBSRUJVSUxUIEJJTkFSSUVTCi0KLSAgIFsgWzY4XVRvcCBdIFsgWzY5XUNvbnRlbnRzIF0gWyBb NzBdTmV4dCBdIFsgWzcxXVByZXZpb3VzIF0KLQotICAgSHVuZHJlZHMgb2YgcHJlYnVpbHQgQy1L ZXJtaXQgYmluYXJpZXMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgQ0RST00gaW4KLSAgIHRoZSBCSU5B UlkgdHJlZSBbTk9URTogVGhlIEMtS2VybWl0IENEUk9NIGlzIHN0aWxsIGZvciB2ZXJzaW9uIDcu MF0sCi0gICBhbmQgYXQgb3VyIGZ0cCBzaXRlIGluIHRoZSBbNzJda2VybWl0L2JpbiBhcmVhICh3 aXRoIG5hbWVzIHN0YXJ0aW5nCi0gICB3aXRoICJjayIpLCBhbHNvIGFjY2Vzc2libGUgb24gdGhl IFs3M11DLUtlcm1pdCB3ZWJzaXRlLiBUbyBpbnN0YWxsIGEKLSAgIHByZWJ1aWx0IGJpbmFyeToK LQotICAgIGEuIFJlbmFtZSB0aGUgYmluYXJ5IHRvICJ3ZXJtaXQiLgotICAgIGIuIE1ha2Ugc3Vy ZSBpdCB3b3Jrczsgc29tZSB0ZXN0cyBhcmUgc3VnZ2VzdGVkIGluIFs3NF1TZWN0aW9uIDcuCi0g ICAgYy4gRm9sbG93IHN0ZXBzIChiKSB0aHJvdWdoIChlKSBpbiBbNzVdU2VjdGlvbiA0LgotICAg IGQuIEluc3RhbGwgcmVsYXRlZCBmaWxlcyBhcyBkZXNjcmliZWQgaW4gWzc2XVNlY3Rpb24gNS4K LQotICAgQnV0IGZpcnN0Li4uIFBsZWFzZSBoZWVkIHRoZSBmb2xsb3dpbmcgY2F1dGlvbnM6Ci0K LSAgICBhLiBJZiB5b3UgcGljayB0aGUgd3JvbmcgYmluYXJ5LCBpdCB3b24ndCB3b3JrIChvciB3 b3JzZSkuCi0gICAgYi4gRXZlbiB3aGVuIHlvdSBwaWNrIHRoZSBhcHByb3ByaWF0ZSBiaW5hcnks IGl0IHN0aWxsIG1pZ2h0IG5vdCB3b3JrCi0gICAgICAgZHVlIHRvIHNoYXJlZC1saWJyYXJ5IG1p c21hdGNoZXMsIGV0Yy4gKHNlZSBbNzddU2VjdGlvbiA0LjApLgotICAgIGMuIERvbid0IGV4cGVj dCBhIGJpbmFyeSBidWlsdCBvbiBvciBmb3IgdmVyc2lvbiBuIG9mIHlvdXIgT1MgdG8gd29yawot ICAgICAgIG9uIHZlcnNpb24gbiAtIHggKHdoZXJlIHggPiAwKS4gSG93ZXZlciwgaXQgaXMgc3Vw cG9zZWQgdG8gYmUgc2FmZQotICAgICAgIHRvIHJ1biBhIGJpbmFyeSBidWlsdCBvbiAob3IgZm9y KSBhbiBvbGRlciBPUyByZWxlYXNlIG9uIGEgbmV3ZXIKLSAgICAgICBvbmUgKGJ1dCBpcyBbNzhd aW5jcmVhc2luZ2x5IGxlc3Mgc28gYXMgdGltZS1ob25vcmVkIHByaW5jaXBsZXMgb2YKLSAgICAg ICBzdGFiaWxpdHkgYW5kIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGdvIGZhZGluZyBpbnRvIG9i c2N1cml0eSkuCi0KLSAgIFRoZXJlZm9yZSwgaXQgaXMgYWx3YXlzIGJldHRlciB0byBidWlsZCB5 b3VyIG93biBiaW5hcnkgZnJvbSBzb3VyY2UKLSAgIGNvZGUgKFs3OV1uZXh0IHNlY3Rpb24pIGlm IHlvdSBjYW4uIEJ1dCBzaW5jZSBpdCBpcyBpbmNyZWFzaW5nbHkgY29tbW9uCi0gICBmb3IgVW5p eCBzeXN0ZW1zIChub3QgdG8gbWVudGlvbiBWTVMgYW5kIG90aGVyIE9TJ3MpIHRvIGJlIGRlbGl2 ZXJlZAotICAgd2l0aG91dCBDIGNvbXBpbGVycywgaXQgaXMgc29tZXRpbWVzIG5vdCBwb3NzaWJs ZS4gSW4gc3VjaCBjYXNlcywgdHJ5Ci0gICB0aGUgbW9zdCBhcHByb3ByaWF0ZSBwcmVidWlsdCBi aW5hcnkgb3IgYmluYXJpZXMsIGFuZCBpZiBub25lIG9mIHRoZW0KLSAgIHdvcmssIFs4MF1jb250 YWN0IHVzIGFuZCB3ZSdsbCBzZWUgd2hhdCB3ZSBjYW4gZG8gdG8gaGVscC4KLQotNC4gQlVJTERJ TkcgRlJPTSBTT1VSQ0UgQ09ERQotCi0gICBbIFs4MV1Ub3AgXSBbIFs4Ml1Db250ZW50cyBdIFsg WzgzXU5leHQgXSBbIFs4NF1QcmV2aW91cyBdCi0KLSAgIEFsc28gc2VlOiBbODVdU2VjdGlvbiA4 IGFuZCBbODZdU2VjdGlvbiA5LgotCi0gICBDLUtlcm1pdCBpcyBkZXNpZ25lZCB0byBiZSBidWls dCBhbmQgdXNlZCBvbiBhcyBtYW55IHBsYXRmb3JtcyBhcwotICAgcG9zc2libGU6IFVuaXggYW5k IG5vbi1Vbml4LCBvbGQgYW5kIG5ldyAoYW5kIGFuY2llbnQpLCBBTlNJIEMgYW5kIEsmUi4KLSAg IFRoZSBVbml4IHZlcnNpb24gZG9lcyBub3QgdXNlIG9yIGRlcGVuZCBvbiBhbnkgZXh0ZXJuYWwg dG9vbHMgZm9yCi0gICBidWlsZGluZyBleGNlcHQgdGhlICJtYWtlIiB1dGlsaXR5LCB0aGUgQyBj b21waWxlciwgdGhlIGxpbmtlciwgYW5kIHRoZQotICAgc2hlbGwuIEl0IGRvZXMgbm90IHVzZSBh bnkgZXh0ZXJuYWwgYXV0b21hdGVkIGNvbmZpZ3VyYXRpb24gdG9vbHMgc3VjaAotICAgYXMgY29u ZmlndXJlLCBhdXRvY29uZiwgYXV0b21ha2UsIGxpYnRvb2wsIGV0Yy4gRXZlcnl0aGluZyBpbiBD LUtlcm1pdAotICAgaGFzIGJlZW4gYnVpbHQgYnkgaGFuZCBiYXNlZCBvbiBkaXJlY3QgZXhwZXJp ZW5jZSBvciByZXBvcnRzIG9yCi0gICBjb250cmlidXRpb25zIGZyb20gdXNlcnMgb2YgZWFjaCBw bGF0Zm9ybS4KLQotICAgVGhlIFs4N11DLUtlcm1pdCBtYWtlZmlsZSBjb250YWlucyB0aGUgcnVs ZXMgZm9yIGJ1aWxkaW5nIHRoZSBwcm9ncmFtCi0gICBmb3IgZWFjaCBvZiB0aGUgaHVuZHJlZHMg b2YgZGlmZmVyZW50IGtpbmRzIG9mIFVuaXggc3lzdGVtcyB0aGF0Ci0gICBDLUtlcm1pdCBhdHRl bXB0cyB0byBzdXBwb3J0LiBJdCBjb3ZlcnMgYWxsIFVuaXggdmFyaWF0aW9ucyBzaW5jZSBhYm91 dAotICAgMTk4MCAtLSBwcmV0dHkgbXVjaCBldmVyeXRoaW5nIGFmdGVyIFVuaXggVjYuIFNlcGFy YXRlIG1ha2VmaWxlcyBhcmUKLSAgIHVzZWQgZm9yIFs4OF1QbGFuIDkgYW5kIFs4OV0yLnggQlNE LgotCi0gICBQcmVyZXF1aXNpdGVzOgotCi0gICAgICogVGhlIEMgY29tcGlsZXIsIGxpbmtlciwg YW5kIG1ha2UgcHJvZ3JhbSBtdXN0IGJlIGluc3RhbGxlZC4KLSAgICAgKiBUaGUgQyBsaWJyYXJp ZXMgYW5kIGhlYWRlciBmaWxlcyBtdXN0IGJlIGluc3RhbGxlZCAoKikuCi0gICAgICogVGhlIEMt S2VybWl0IHNvdXJjZSBjb2RlIGFuZCBtYWtlZmlsZSBpbiB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5 LgotICAgICAqIFRoZSBDLUtlcm1pdCB0ZXh0IGZpbGVzIChbOTBdU2VjdGlvbiA1KSBpbiB5b3Vy IGN1cnJlbnQgZGlyZWN0b3J5LgotCi0gICAgICogVGhpcyBpcyBiZWNvbWluZyBwcm9ibGVtYXRp YyBpbiB0aGlzIG5ldyBhZ2Ugb2YgInNlbGVjdGl2ZQotICAgICAgIGluc3RhbGxzIiBlLmcuIG9m IExpbnV4IHBhY2thZ2VzLiBDLUtlcm1pdCBidWlsZHMgd2lsbCBvZnRlbiBmYWlsCi0gICAgICAg YmVjYXVzZSByZXBseWluZyAibm8iIHRvIHNvbWUgb2JzY3VyZSBMaW51eCBpbnN0YWxsYXRpb24g b3B0aW9uCi0gICAgICAgd2lsbCByZXN1bHQgaW4gbWlzc2luZyBsaWJyYXJpZXMgb3IgaGVhZGVy IGZpbGVzLiBEaXR0byBvbgotICAgICAgIHBsYXRmb3JtcyBsaWtlIEFJWCBhbmQgU29sYXJpcyB0 aGF0IGRvbid0IGNvbWUgd2l0aCBDIGNvbXBpbGVycywKLSAgICAgICBhbmQgdGhlbiBsYXRlciBo YXZlIGdjYyBpbnN0YWxsZWQsIGJ1dCBhcmUgc3RpbGwgbWlzc2luZyBjcnVjaWFsCi0gICAgICAg bGlicmFyaWVzLCBsaWtlIGxpYm0gKG1hdGgpLgotCi0gICBQbHVzOgotCi0gICAgICogRm9yIFRD UC9JUCBuZXR3b3JraW5nIHN1cHBvcnQsIHRoZSBzb2NrZXRzIGxpYnJhcnkgYW5kIHJlbGF0ZWQK LSAgICAgICBoZWFkZXIgZmlsZXMgbXVzdCBiZSBpbnN0YWxsZWQuCi0gICAgICogVGhlIG1hdGgg bGlicmFyeSBmb3IgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyBzdXBwb3J0IChjYW4gYmUKLSAg ICAgICBkZXNlbGVjdGVkIGJ5IGFkZGluZyAtRE5PRkxPQVQgdG8gQ0ZMQUdTIGFuZCByZW1vdmlu ZyAtbG0gZnJvbQotICAgICAgIExJQlMpLgotICAgICAqIE1hbnkgYW5kIHZhcmllZCBzZWN1cml0 eSBsaWJyYXJpZXMgZm9yIGJ1aWxkaW5nIGEgc2VjdXJlIHZlcnNpb24KLSAgICAgICAoS2VyYmVy b3MsIFNTTC9UTFMsIFNSUCwgWmxpYiwuLi4pIFRoZXNlIGFyZSByZXF1aXJlZCBvbmx5IGlmIHlv dQotICAgICAgIHNlbGVjdCBhIHNlY3VyZSB0YXJnZXQuCi0gICAgICogRm9yIHRoZSBjdXJzZXMt YmFzZWQgZnVsbHNjcmVlbiBmaWxlLXRyYW5zZmVyIGRpc3BsYXksIHRoZSBjdXJzZXMKLSAgICAg ICBvciBuY3Vyc2VzIGhlYWRlciBmaWxlKHMpIGFuZCBsaWJyYXJ5LCBhbmQgcHJvYmFibHkgYWxz byB0aGUKLSAgICAgICB0ZXJtY2FwIGFuZC9vciB0ZXJtbGliIGxpYnJhcnkuIE5vdGUgdGhhdCB0 aGUgbmFtZXMgYW5kIGxvY2F0aW9ucwotICAgICAgIG9mIHRoZXNlIGZpbGVzIGFuZCBsaWJyYXJp ZXMgYXJlIGxpa2VseSB0byBjaGFuZ2UgY2FwcmljaW91c2x5IHdpdGgKLSAgICAgICBldmVyeSBu ZXcgcmVsZWFzZSBvZiB5b3VyIFVuaXggcHJvZHVjdC4gSWYgeW91IGRpc2NvdmVyIHRoYXQgdGhl Ci0gICAgICAgQy1LZXJtaXQgYnVpbGQgcHJvY2VkdXJlIGZhaWxzIGJlY2F1c2UgeW91ciBjdXJz ZXMgYW5kL29yIHRlcm14eHgKLSAgICAgICBoZWFkZXJzIG9yIGxpYnJhcmllcyBhcmUgbm90IG5h bWVkIG9yIGxvY2F0ZWQgYXMgZXhwZWN0ZWQsIHBsZWFzZQotICAgICAgIFs5MV1sZXQgdXMga25v dy4gSW4gdGhlIG1lYW50aW1lLCB3b3JrIGFyb3VuZCBieSBpbnN0YWxsaW5nCi0gICAgICAgc3lt bGlua3MuCi0gICAgICogSU1QT1JUQU5UOiBNb2Rlcm4gTGludXggZGlzdHJpYnV0aW9ucyBtaWdo dCBnaXZlIHlvdSB0aGUgY2hvaWNlCi0gICAgICAgZHVyaW5nIGluc3RhbGxhdGlvbiBvZiB3aGV0 aGVyIHRvIGluc3RhbGwgdGhlICJuY3Vyc2VzIGRldmVsb3BtZW50Ci0gICAgICAgcGFja2FnZSIg KHBlcmhhcHMgY2FsbGVkICJuY3Vyc2VzLWRldmVsIikuIElmIHlvdSBkaWQgbm90IGluc3RhbGwK LSAgICAgICBpdCwgeW91IHdvbid0IGJlIGFibGUgdG8gYnVpbGQgQy1LZXJtaXQgd2l0aCBjdXJz ZXMgc3VwcG9ydAotICAgICAgIGluY2x1ZGVkLiBJbiB0aGlzIGNhc2UsIGVpdGhlciBnbyBiYWNr IGFuZCBpbnN0YWxsIG5jdXJzZXMsIG9yIGVsc2UKLSAgICAgICBjaG9vc2UgKG9yIGNyZWF0ZSkg YSBub24tY3Vyc2VzIG1ha2VmaWxlIHRhcmdldCBmb3IgeW91ciBwbGF0Zm9ybS4KLSAgICAgICBU byBpbnN0YWxsIHRoZSBuY3Vyc2VzIGRldmVsb3BlcnMgdG9vbHMgaW4gUmVkIEhhdCBMaW51eCwg ZG8KLSAgICAgICAiYXB0LWdldCBpbnN0YWxsIG5jdXJzZXMtZGV2ZWxvcGVyIiBvciBpZiB5b3Ug aGF2ZSB0aGUgQ0Q6Ci0KLW1vdW50IHJlZGhhdCBjZHJvbQotZ290byBSZWRIYXQvUlBNUwotcnBt IC1pdmggbmN1cnNlcy1kZXZlbCoucnBtCi1vciB0byBoYXZlIHRoZSBleGFjdCBuYW1lIGxzIG5j dXJzZSogYW5kIGxvYWQgYXMKLXJwbSAtaXZoIGZpbGVuYW1lCi10aGVuIGxlYXZlIHRoZSBjZHJv bSBhbmQgdW5tb3VudCBpdC4KLQotICAgICAqIEluIEFJWCB5b3UgbWlnaHQgaGF2ZSB0byBnbyBi YWNrIGFuZCBpbnN0YWxsIGFueSBvciBhbGwgb2Y6Ci0KLWJvcy5hZHQuYmFzZQotYm9zLmFkdC5p bmNsdWRlCi1ib3MuYWR0LmxpYgotYm9zLmFkdC5saWJtCi1ib3MuYWR0LnV0aWxzCi0KLSAgICAg ICBmcm9tIHRoZSBmaXJzdCBpbnN0YWxsYXRpb24gQ0QuCi0KLSAgIERlcGVuZGluZyBvbiB3aGVy ZSB5b3UgZ290IGl0LCB0aGUgbWFrZWZpbGUgbWlnaHQgbmVlZCB0byBiZSByZW5hbWVkCi0gICBm cm9tIGNrdWtlci5tYWsgdG8gbWFrZWZpbGUuIERpcmVjdGlvbnM6Ci0KLSAgICBhLiBUeXBlICJt YWtlIHh4eCIgd2hlcmUgeHh4IGlzIHRoZSBuYW1lIG9mIHRoZSBtYWtlZmlsZSB0YXJnZXQgbW9z dAotICAgICAgIGFwcHJvcHJpYXRlIHRvIHlvdXIgcGxhdGZvcm0sIGUuZy4gIm1ha2UgbGludXgi LCAibWFrZSBhaXg0MyIsIGV0Yy4KLSAgICAgICBSZWFkIHRoZSBbOTJdY29tbWVudHMgYXQgdGhl IHRvcCBvZiB0aGUgbWFrZWZpbGUgZm9yIGEgY29tcGxldGUKLSAgICAgICBsaXN0IG9mIGF2YWls YWJsZSB0YXJnZXRzIChpdCdzIGEgbG9uZyBsaXN0KS4KLSAgICBiLiBUZXN0IHRoZSByZXN1bHRp bmcgJ3dlcm1pdCcgZmlsZSAoc2VlIFs5M11TZWN0aW9uIDcgZm9yCi0gICAgICAgc3VnZ2VzdGlv bnMpLiBJZiBpdCdzIE9LLCBwcm9jZWVkOyBvdGhlcndpc2UgWzk0XW5vdGlmeSB1cy4KLQotICAg ICBOT1RFOiBzdGVwcyAoYykgdGhyb3VnaCAoZSkgY2FuIGJlIGFjY29tcGxpc2hlZCB1c2luZyB0 aGUKLSAgICAgWzk1XW1ha2VmaWxlICdpbnN0YWxsJyB0YXJnZXQgYXMgZGVzY3JpYmVkIGluIFs5 Nl1TZWN0aW9uIDUuNC4KLSAgICBjLiBSZW5hbWUgdGhlICd3ZXJtaXQnIGZpbGUgdG8gJ2tlcm1p dCcsIGNvcHkgaXQgdG8gdGhlIGRlc2lyZWQgYmluYXJ5Ci0gICAgICAgZGlyZWN0b3J5IChzdWNo IGFzIC91c3IvbG9jYWwvYmluIG9yIC9vcHQvc29tZXRoaW5nKSwgYW5kIGlmIGl0IGlzCi0gICAg ICAgdG8gYmUgdXNlZCBmb3IgZGlhbGluZyBvdXQsIGdpdmUgaXQgdGhlIHNhbWUgb3duZXIsIGdy b3VwLCBhbmQKLSAgICAgICBwZXJtaXNzaW9ucyBhcyB0aGUgJ2N1JyBwcm9ncmFtIChJTVBPUlRB TlQ6IHJlYWQgWzk3XVNlY3Rpb25zIDEwCi0gICAgICAgYW5kIFs5OF0xMSBmb3IgZGV0YWlscyku Ci0gICAgZC4gSW5zdGFsbCB0aGUgbWFuIHBhZ2UsIGNrdWtlci5uciwgd2l0aCB5b3VyIG90aGVy IG1hbiBwYWdlcy4KLSAgICBlLiBJbnN0YWxsIHRoZSBhY2NvbXBhbnlpbmcgdGV4dCBmaWxlcyAo c2VlIFs5OV1TZWN0aW9uIDUpLgotICAgIGYuIElmIHlvdSB3YW50IEMtS2VybWl0IHRvIGFsc28g b2ZmZXIgYSBUZWxuZXQgY29tbWFuZC1saW5lCi0gICAgICAgcGVyc29uYWxpdHksIG1ha2UgYSBz eW1ib2xpYyBsaW5rIGFzIGZvbGxvd3M6Ci0KLWNkIGRpcmVjdG9yeS13aGVyZS1rZXJtaXQtYmlu YXJ5LWlzCi1sbiAtcyBrZXJtaXQgdGVsbmV0Ci0KLSAgICAgICBJZiB5b3Ugd2FudCBDLUtlcm1p dCB0byBiZSB0aGUgZGVmYXVsdCBUZWxuZXQgY2xpZW50LCBtYWtlIHN1cmUgdGhlCi0gICAgICAg ZGlyZWN0b3J5IGluIHdoaWNoIHlvdSBjcmVhdGVkIHRoZSBzeW1saW5rIGlzIGluIHRoZSBQQVRI IGFoZWFkIG9mCi0gICAgICAgdGhlIHdoZXJlIHRoZSByZWd1bGFyIFRlbG5ldCBjbGllbnQgaXMu Ci0gICAgZy4gSWYgeW91IHdhbnQgQy1LZXJtaXQgdG8gYWxzbyBvZmZlciBhbiBGVFAgY29tbWFu ZC1saW5lIHBlcnNvbmFsaXR5LAotICAgICAgIG1ha2UgYSBzeW1saW5rIGNhbGxlZCAiZnRwIiBh cyBpbiAoZikuCi0gICAgaC4gSWYgeW91IHdhbnQgQy1LZXJtaXQgdG8gYWxzbyBvZmZlciBhbiBG VFRQIGNvbW1hbmQtbGluZQotICAgICAgIHBlcnNvbmFsaXR5LCBtYWtlIGEgc3ltbGluayBjYWxs ZWQgImh0dHAiIGFzIGluIChmKS4KLSAgICBpLiBJZiB5b3Ugd2FudCB0byBvZmZlciBhbiBJbnRl cm5ldCBLZXJtaXQgU2VydmljZSwgZm9sbG93IHRoZQotICAgICAgIGRpcmVjdGlvbnMgaW4gdGhl IFsxMDBdSUtTRCBBZG1pbmlzdHJhdG9yJ3MgR3VpZGUuCi0KLTQuMC4gU3BlY2lhbCBDb25zaWRl cmF0aW9ucyBmb3IgQy1LZXJtaXQgOC4wLTkuMAotCi0gICBbIFsxMDFdVG9wIF0gWyBbMTAyXUNv bnRlbnRzIF0gWyBbMTAzXU5leHQgXQotCi0gICBBbHNvIHNlZTogWzEwNF1DLUtlcm1pdCBDb25m aWd1cmF0aW9uIE9wdGlvbnMKLQotICAgU0VDVElPTiBDT05URU5UUwotCi00LjEuIFsxMDVdVGhl IFVuaXggTWFrZWZpbGUKLTQuMi4gWzEwNl1UaGUgQy1LZXJtaXQgSW5pdGlhbGl6YXRpb24gRmls ZQotNC4zLiBbMTA3XVRoZSAyLnggQlNEIE1ha2VmaWxlCi00LjQuIFsxMDhdVGhlIFBsYW4gOSBN YWtlZmlsZQotNC41LiBbMTA5XU1ha2VmaWxlIEZhaWx1cmVzCi0KLSAgIChBbHNvIHNlZSB0aGUg WzExMF1Db25maWd1cmF0aW9ucyBPcHRpb25zIGRvY3VtZW50LCBbMTExXVNlY3Rpb24gOCkuCi0K LSAgIExvdHMgb2YgbmV3IGZlYXR1cmVzIGhhdmUgYmVlbiBhZGRlZCBpbiB2ZXJzaW9ucyA3LjAg YW5kIDguMCB0aGF0Ci0gICByZXF1aXJlIGFjY2VzcyB0byBuZXcgc3ltYm9scywgQVBJcywgbGli cmFyaWVzLCBldGMsIGFuZCB0aGlzIHdpbGwgbm8KLSAgIGRvdWJ0IGNhdXNlIHByb2JsZW1zIGlu IGNvbXBpbGluZywgbGlua2luZywgb3IgZXhlY3V0aW9uIG9uIHBsYXRmb3JtcwotICAgd2hlcmUg Ni4wIGFuZCBlYXJsaWVyIGJ1aWx0IHdpdGhvdXQgaW5jaWRlbnQuIFRoaXMgc2VjdGlvbiBjb250 YWlucwotICAgd2hhdCB3ZSBrbm93IGFzIG9mIHRoZSBkYXRlIG9mIHRoaXMgZmlsZS4KLQotICAg VGhlIGZpcnN0IGNhdGVnb3J5IGNvbmNlcm5zIHRoZSBuZXcgS2VybWl0IFNlcnZpY2UgRGFlbW9u IChJS1NEOyBzZWUKLSAgIHRoZSBbMTEyXUlLU0QgQWRtaW5pc3RyYXRvcidzIEd1aWRlIGZvciBk ZXRhaWxzKToKLQotICAgVGhlIHd0bXAgRmlsZQotICAgICAgICAgIFdoZW4gQy1LZXJtaXQgaXMg c3RhcnRlZCBhcyBhbiBJS1NEICh1bmRlciBpbmV0ZCksIGl0IG1ha2VzCi0gICAgICAgICAgc3lz bG9nIGFuZCB3dG1wIGVudHJpZXMsIGFuZCBhbHNvIGtlZXBzIGl0cyBvd24gZnRwZC1saWtlIGxv Zy4KLSAgICAgICAgICBUaGUgY29kZSBhc3N1bWVzIHRoZSB3dG1wIGxvZyBpcyAvdmFyL2xvZy93 dG1wIG9uIExpbnV4IGFuZAotICAgICAgICAgIC91c3IvYWRtL3d0bXAgZWxzZXdoZXJlLiBObyBk b3VidCB0aGlzIGFzc3VtcHRpb24gd2lsbCBuZWVkCi0gICAgICAgICAgYWRqdXN0bWVudC4gVXNl IC1EV1RNUEZJTEU9cGF0aCB0byBvdmVycmlkZSBhdCBjb21waWxlIHRpbWUKLSAgICAgICAgICAo dGhlcmUgaXMgYWxzbyBhIHJ1bnRpbWUgb3ZlcnJpZGUpLiBTZWUgWzExM11pa3NkLmh0bWwgZm9y Ci0gICAgICAgICAgZGV0YWlscy4KLQotICAgVVRNUCwgdXRzbmFtZSgpLCBldGMKLSAgICAgICAg ICBDLUtlcm1pdCA3LjAgZ2V0cyBhcyBtdWNoIGluZm8gYXMgaXQgY2FuIGFib3V0IGl0cyBqb2Ig LS0gbWFpbmx5Ci0gICAgICAgICAgZm9yIElLU0QgbG9nZ2luZyAtLSBmcm9tIHV0bXAuIEJ1dCBv ZiBjb3Vyc2UgdXRtcCBmb3JtYXRzIGFuZAotICAgICAgICAgIGZpZWxkcyBkaWZmZXIsIGFuZCBm b3IgdGhhdCBtYXR0ZXIsIHRoZXJlIGNhbiBiZSB0d28gZGlmZmVyZW50Ci0gICAgICAgICAgaGVh ZGVyIGZpbGVzLCA8dXRtcC5oPiBhbmQgPHV0bXB4Lmg+LiBMb29rIGZvciBIQVZFVVRNUFggYW5k Ci0gICAgICAgICAgSEFWRVVUSE9TVCBpbiBbMTE0XWNrdWZpby5jIGFuZCBsZXQgbWUga25vdyBv ZiBhbnkgbmVlZGVkCi0gICAgICAgICAgYWRqdXN0bWVudHMuCi0KLSAgIFBhc3N3b3JkIGxvb2t1 cAotICAgICAgICAgIElLU0QgbmVlZHMgdG8gYXV0aGVudGljYXRlIGluY29taW5nIHVzZXJzIGFn YWluc3QgdGhlIHBhc3N3b3JkCi0gICAgICAgICAgbGlzdC4gSW4gc29tZSBjYXNlcywgdGhpcyBy ZXF1aXJlcyB0aGUgYWRkaXRpb24gb2YgLWxjcnlwdCAoZS5nLgotICAgICAgICAgIGluIFVuaXh3 YXJlIDIueCkuIEluIG1vc3Qgb3RoZXJzLCB0aGUgY3J5cHQgZnVuY3Rpb25zIGFyZSBpbiB0aGUK LSAgICAgICAgICByZWd1bGFyIEMgbGlicmFyeS4gSWYgeW91IGdldCAiY3J5cHQiIGFzIGFuIHVu cmVzb2x2ZWQgc3ltYm9sIGF0Ci0gICAgICAgICAgbGluayB0aW1lLCBhZGQgLWxjcnlwdCB0byBM SUJTLiBJZiB5b3VyIHNpdGUgaGFzIGxvY2FsCi0gICAgICAgICAgcmVwbGFjZW1lbnQgbGlicmFy aWVzIGZvciBhdXRoZW50aWNhdGlvbiwgeW91IG1pZ2h0IG5lZWQgYQotICAgICAgICAgIHNwZWNp YWwgTElCUyBjbGF1c2Ugc3VjaCBhcyAiTElCUz0tTC91c3IvbG9jYWwvbGliIC1scHdlbnQiLgot Ci0gICAgICAgICAgVGhlc2UgZGF5cyBtb3N0IFVuaXggc3lzdGVtcyB0YWtlIGFkdmFudGFnZSBv ZiBzaGFkb3cgcGFzc3dvcmQKLSAgICAgICAgICBmaWxlcyBvciBQbHVnZ2FibGUgQXV0aGVudGlj YXRpb24gTW9kdWxlcyAoUEFNKS4gSWYgeW91ciBzeXN0ZW0KLSAgICAgICAgICB1c2VzIHNoYWRv dyBwYXNzd29yZHMgeW91IG11c3QgYWRkIC1EQ0tfU0hBRE9XIHRvIHRoZSBDRkxBR1MKLSAgICAg ICAgICBsaXN0LiBJZiB5b3VyIHN5c3RlbSByZXF1aXJlcyBQQU0geW91IG11c3QgYWRkIC1EQ0tf UEFNIHRvIHRoZQotICAgICAgICAgIENGTEFHUyBhbmQgLWxwYW0gLWxkbCB0byBMSUJTLgotCi0g ICBnZXR1c2Vyc2hlbGwoKQotICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBJS1NEIGF0 IGxvZ2luIHRpbWUgdG8gc2VlIGlmIGEgdXNlciBoYXMKLSAgICAgICAgICBiZWVuICJ0dXJuZWQg b2ZmIi4gQnV0IG1hbnkgVW5peCBwbGF0Zm9ybXMgbGFjayB0aGlzIGZ1bmN0aW9uLgotICAgICAg ICAgIEluIHRoYXQgY2FzZSwgeW91IHdpbGwgZ2V0IHVucmVzb2x2ZWQgc3ltYm9sIHJlcG9ydHMg YXQgbGluawotICAgICAgICAgIHRpbWUgZm9yIF9nZXR1c2Vyc2hlbGwsIF9lbmR1c2Vyc2hlbGw7 IHRvIHdvcmsgYXJvdW5kLCBhZGQKLSAgICAgICAgICAtRE5PR0VUVVNFUlNIRUxMLgotCi0gICBp bml0Z3JvdXBzKCkKLSAgICAgICAgICBUaGlzIGlzIGNhbGxlZCBieSBJS1NEIGFmdGVyIHN1Y2Nl c3NmdWwgYXV0aGVudGljYXRpb24uIEJ1dCBzb21lCi0gICAgICAgICAgcGxhdGZvcm1zIGRvIG5v dCBoYXZlIHRoaXMgZnVuY3Rpb24sIHNvIG9idmlvdXNseSBpdCBjYW4ndCBiZQotICAgICAgICAg IGNhbGxlZCB0aGVyZSwgaW4gd2hpY2ggY2FzZSBhZGQgLUROT0lOSVRHUk9VUFMuCi0KLSAgIHNl dHJldWlkKCksIHNldHJldWlkKCksIHNldHJlZ2lkKCkgbm90IGZvdW5kIG9yICJkZXByZWNhdGVk IgotICAgICAgICAgIEZpbmQgb3V0IHdoYXQgeW91ciBVbml4IHZhcmlldHkgd2FudHMgeW91IHRv IHVzZSBpbnN0ZWFkLCBhbmQKLSAgICAgICAgICBtYWtlIGFwcHJvcHJpYXRlIHN1YnN0aXR1dGlv bnMgaW4gcm91dGluZSB6dnBhc3MoKSwgbW9kdWxlCi0gICAgICAgICAgWzExNV1ja3VmaW8uYywg YW5kIFsxMTZdbGV0IHVzIGtub3cuCi0KLSAgIHByaW50ZigpCi0gICAgICAgICAgSUtTRCBpbnN0 YWxscyBhIHByaW50ZigpIHN1YnN0aXR1dGUgdG8gYWxsb3cgcmVkaXJlY3Rpb24gb2YKLSAgICAg ICAgICBwcmludGYtbGlrZSBvdXRwdXQgdG8gdGhlIGNvbm5lY3Rpb24uIEhvd2V2ZXIsIHRoaXMg Y2FuIGNvbmZsaWN0Ci0gICAgICAgICAgd2l0aCBzb21lIGN1cnNlcyBsaWJyYXJpZXMuIEluIHRo aXMgY2FzZSwgc2VwYXJhdGUgYmluYXJpZXMgbXVzdAotICAgICAgICAgIGJlIGJ1aWx0IGZvciBJ S1NEIGFuZCBub24tSUtTRCB1c2UuCi0KLSAgIElmIHlvdSBlbmNvdW50ZXIgZGlmZmljdWx0aWVz IHdpdGggYW55IG9mIHRoZSBhYm92ZSwgYW5kIHlvdSBhcmUgbm90Ci0gICBpbnRlcmVzdGVkIGlu IHJ1bm5pbmcgQy1LZXJtaXQgYXMgYW4gSUtTRCwgdGhlbiBzaW1wbHkgYWRkIE5PSUtTRCB0bwot ICAgQ0ZMQUdTIGFuZCByZWJ1aWxkLiBFeGFtcGxlOgotCi1tYWtlIHNjbzI4NgotKGdldCBsb3Rz IG9mIGVycm9ycykKLW1ha2UgY2xlYW4KLW1ha2Ugc2NvMjg2ICJLRkxBR1M9LUROT0lLU0QiCi0K LSAgIFNvbWUgbm9uLUlLU0QgdGhpbmdzIHRvIHdhdGNoIG91dCBmb3I6Ci0KLSAgIFJldHVybiB0 eXBlIG9mIG1haW4oKQotICAgICAgICAgIFRoZSBtYWluKCkgcm91dGluZSBpcyBpbiBbMTE3XWNr Y21haS5jLiBJZiB5b3UgZ2V0IGNvbXBsYWludHMKLSAgICAgICAgICBhYm91dCAibWFpbjogcmV0 dXJuIHR5cGUgaXMgbm90IGJsYWgiLCBkZWZpbmUgTUFJTlRZUEUgb24gdGhlIENDCi0gICAgICAg ICAgY29tbWFuZCBsaW5lLCBlLmcuOgotCi1tYWtlIHh4eCAiS0ZMQUdTPS1ETUFJTlRZUEU9Ymxh aAotCi0gICAgICAgICAgKHdoZXJlIGJsYWggaXMgaW50LCBsb25nLCBvciB3aGF0ZXZlcikuIElm IHRoZSBjb21wbGFpbnQgaXMKLSAgICAgICAgICAiQXR0ZW1wdCB0byByZXR1cm4gYSB2YWx1ZSBm cm9tIGEgZnVuY3Rpb24gb2YgdHlwZSB2b2lkIiB0aGVuCi0gICAgICAgICAgYWRkIC1ETUFJTklT Vk9JRDoKLQotbWFrZSB4eHggIktGTEFHUz0tRE1BSU5JU1ZPSUQ9YmxhaAotCi0gICBETlMgU2Vy dmljZSBSZWNvcmRzCi0gICAgICAgICAgVGhpcyBmZWF0dXJlIGFsbG93cyBhIHJlbW90ZSBob3N0 IHRvIHJlZGlyZWN0IEMtS2VybWl0IHRvIHRoZQotICAgICAgICAgIGFwcHJvcHJpYXRlIHNvY2tl dCBmb3IgdGhlIHJlcXVlc3RlZCBzZXJ2aWNlOyBlLmcuIGlmIEMtS2VybWl0Ci0gICAgICAgICAg cmVxdWVzdHMgc2VydmljZSAidGVsbmV0IiBhbmQgdGhlIGhvc3Qgb2ZmZXJzIFRlbG5ldCBzZXJ2 aWNlIG9uCi0gICAgICAgICAgcG9ydCA5OTkgcmF0aGVyIHRoYW4gdGhlIGN1c3RvbWFyeSBwb3J0 IDIzLiBJZiB5b3UgZ2V0Ci0gICAgICAgICAgY29tcGlsZS10aW1lIGNvbXBsYWludHMgYWJvdXQg bm90IGJlaW5nIGFibGUgdG8gZmluZCA8cmVzb2x2Lmg+LAotICAgICAgICAgIDxuZXRkYi5oPiwg b3IgPGFycGEvbmFtZXNlci5oPiwgYWRkIC1ETk9fRE5TX1NSViB0byBDRkxBR1MuIElmCi0gICAg ICAgICAgeW91IGdldCBsaW5rLXRpbWUgY29tcGxhaW50cyBhYm91dCB1bnJlc29sdmVkIHN5bWJv bHMgcmVzX3NlYXJjaAotICAgICAgICAgIG9yIGRuX2V4cGFuZCwgdHJ5IGFkZGluZyAtbHJlc29s dmUgdG8gTElCUy4KLQotICAgXHYoaXBhZGRyZXNzKQotICAgICAgICAgIElmICJlY2hvIFx2KGlw YWRkcmVzcykiIHNob3dzIGFuIGVtcHR5IHN0cmluZyByYXRoZXIgdGhhbiB5b3VyCi0gICAgICAg ICAgbG9jYWwgSVAgYWRkcmVzcywgYWRkIC1EQ0tHSE5MSE9TVCB0byBDRkxBR1MgYW5kIHJlYnVp bGQuCi0KLSAgIDxzeXMvd2FpdC5oPgotICAgICAgICAgIElmIHRoaXMgZmlsZSBjYW4ndCBiZSBm b3VuZCBhdCBjb21waWxlIHRpbWUsIGFkZCAtRE5PUkVESVJFQ1QgdG8KLSAgICAgICAgICBDRkxB R1MuIFRoaXMgZGlzYWJsZXMgdGhlIFJFRElSRUNUIGFuZCBQSVBFIGNvbW1hbmRzIGFuZAotICAg ICAgICAgIGFueXRoaW5nIGVsc2UgdGhhdCBuZWVkcyB0aGUgd2FpdCgpIHN5c3RlbSBzZXJ2aWNl LgotCi0gICBzeXNsb2coKQotICAgICAgICAgIEMtS2VybWl0IGNhbiBub3cgd3JpdGUgc3lzbG9n IHJlY29yZHMuIFNvbWUgb2xkZXIgcGxhdGZvcm1zCi0gICAgICAgICAgbWlnaHQgbm90IGhhdmUg dGhlIHN5c2xvZyBmYWNpbGl0eS4gSW4gdGhhdCBjYXNlLCBhZGQKLSAgICAgICAgICAtRE5PU1lT TE9HLiBPdGhlcnMgbWlnaHQgaGF2ZSBpdCwgYnV0IHJlcXVpcmUgYWRkaXRpb24gb2YKLSAgICAg ICAgICAtbHNvY2tldCB0byBMSUJTIChTQ08gT1NSNSBpcyBhbiBleGFtcGxlKS4gU2VlIFsxMThd U2VjdGlvbiAxNS4KLQotICAgcHV0ZW52KCkKLSAgICAgICAgICBJZiAiX3B1dGVudiIgY29tZXMg dXAgYXMgYW4gdW5kZWZpbmVkIHN5bWJvbCwgYWRkIC1ETk9QVVRFTlYgdG8KLSAgICAgICAgICBD RkxBR1MgYW5kIHJlYnVpbGQuCi0KLSAgICJQYXNzaW5nIGFyZzEgb2YgJ3RpbWUnIGZyb20gaW5j b21wYXRpYmxlIHBvaW50ZXIiCi0gICAgICAgICAgVGhpcyBpcyBhIG1lc3MuIFNlZSB0aGUgbWFz cyBvZiAjaWZkZWZzIGluIHRoZSBhcHByb3ByaWF0ZQotICAgICAgICAgIG1vZHVsZSwgWzExOV1j a3V0aW8uYyBvciBbMTIwXWNrdWZpby5jLgotCi0gICBnZXR0aW1lb2ZkYXkoKQotICAgICAgICAg IFdyb25nIG51bWJlciBvZiBhcmd1bWVudHMuIE9uIG1vc3QgcGxhdGZvcm1zLCBnZXR0aW1lb2Zk YXkoKQotICAgICAgICAgIHRha2VzIHR3byBhcmd1bWVudHMsIGJ1dCBvbiBhIGhhbmRmdWwgb2Yg b3RoZXJzIChlLmcuIE1vdG9yb2xhCi0gICAgICAgICAgU3lzdGVtIFYvODggVjQsIFNOSSBSZWxp YW50IFVOSVggNS40MywgZXRjKSBpdCB0YWtlcyBvbmUuIElmCi0gICAgICAgICAgeW91ciB2ZXJz aW9uIG9mIGdldHRpbWVvZmRheSgpIGlzIGJlaW5nIGNhbGxlZCB3aXRoIHR3byBhcmdzIGJ1dAot ICAgICAgICAgIHdhbnRzIG9uZSwgYWRkIC1ER1RPRE9ORUFSRy4KLQotICAgIkFzc2lnbm1lbnQg bWFrZXMgcG9pbnRlciBmcm9tIGludGVnZXIgd2l0aG91dCBhIGNhc3QiCi0gICAgICAgICAgVGhp cyB3YXJuaW5nIG1pZ2h0IGFwcGVhciBpbiBbMTIxXWNrdXRpby5jIG9yIFsxMjJdY2t1ZmlvLmMu IChvcgotICAgICAgICAgIGVsc2V3aGVyZSksIGFuZCB1c3VhbGx5IGNhbiBiZSB0cmFjZWQgdG8g dGhlIHVzZSBvZiBhIHN5c3RlbSBvcgotICAgICAgICAgIGxpYnJhcnkgZnVuY3Rpb24gdGhhdCBy ZXR1cm5zIGEgcG9pbnRlciBidXQgdGhhdCBpcyBub3QgZGVjbGFyZWQKLSAgICAgICAgICBpbiB0 aGUgc3lzdGVtIGhlYWRlciBmaWxlcyBldmVuIHRob3VnaCBpdCBzaG91bGQgYmUuIFNldmVyYWwK LSAgICAgICAgICBmdW5jdGlvbnMgYXJlIGNvbW1vbmx5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVy cm9yOgotCi0gICAgICAgICAgKyBnZXRjd2QoKTogQWRkIC1ERENMR0VUQ1dEIHRvIENGTEFHUyBh bmQgcmVidWlsZC4KLSAgICAgICAgICArIHBvcGVuKCkgOiBBZGQgLUREQ0xQT1BFTiB0byBDRkxB R1MgYW5kIHJlYnVpbGQuCi0gICAgICAgICAgKyBmZG9wZW4oKTogQWRkIC1ERENMRkRPUEVOIHRv IENGTEFHUyBhbmQgcmVidWlsZC4KLQotICAgIk9wZXJhbmRzIG9mID0gaGF2ZSBpbmNvbXBhdGli bGUgdHlwZXMiCi0gICAiSW5jb21wYXRpYmxlIHR5cGVzIGluIGFzc2lnbm1lbnQiCi0gICAgICAg ICAgSWYgdGhpcyBjb21lcyBmcm9tIFsxMjNdY2tjbmV0LmMgYW5kIGNvbWVzIGZyb20gYSBzdGF0 ZW1lbnQKLSAgICAgICAgICBpbnZvbHZpbmcgaW5ldF9hZGRyKCksIHRyeSBhZGRpbmcgLURJTkFE RFJYIHRvIENGTEFHUy4gSWYgdGhhdAotICAgICAgICAgIGRvZXNuJ3QgaGVscCwgdGhlbiB0cnkg YWRkaW5nIC1ETk9NSEhPU1QuCi0KLSAgIENvbXBsYWludHMgYWJvdXQgYXJncyB0byBnZXQvc2V0 c29ja29wdCgpLCBnZXRwZWVybmFtZSgpLCBnZXRzb2NrbmFtZSgpCi0gICAgICAgICAgVGhlc2Ug YXJlIGFsbCBpbiBbMTI0XWNrY25ldC5jLiBEaWZmZXJlbnQgcGxhdGZvcm1zIGFuZCBPUydzIGFu ZAotICAgICAgICAgIHZlcnNpb25zIG9mIHRoZSBzYW1lIE9TIGNoYW5nZSB0aGlzIGFsbCB0aGUg dGltZTogaW50LCBzaXplX3QsCi0gICAgICAgICAgdW5zaWduZWQgbG9uZywgZXRjLiBBbGwgdGhl IGFmZmVjdGVkIHZhcmlhYmxlcyBhcmUgZGVjbGFyZWQKLSAgICAgICAgICBhY2NvcmRpbmcgdG8g I2lmZGVmcyB3aXRoaW4gY2tjbmV0LmMsIHNvIGZpbmQgdGhlIGRlY2xhcmF0aW9ucwotICAgICAg ICAgIGFuZCBhZGp1c3QgdGhlICNpZmRlZnMgYWNjb3JkaW5nbHkuCi0KLSAgIHNpemVfdAotICAg ICAgICAgIEluIGNhc2Ugb2YgY29tcGxhaW50cyBhYm91dCAidW5rbm93biB0eXBlIHNpemVfdCIs IGFkZAotICAgICAgICAgIC1EU0laRV9UPWludCAob3Igb3RoZXIgYXBwcm9wcmlhdGUgdHlwZSkg dG8gQ0ZMQUdTLgotCi0gICAndHonIHVuZGVmaW5lZAotICAgVXNlIG9mIHVuZGVmaW5lZCBlbnVt L3N0cnVjdC91bmlvbiAndGltZXpvbmUnCi0gICAgICAgICAgTGVmdCBvZiAndHZfc2VjJyBzcGVj aWZpZXMgdW5kZWZpbmVkIHN0cnVjdC91bmlvbiAndGltZXZhbCcgQW5kCi0gICAgICAgICAgc2lt aWxhciBjb21wbGFpbnRzIGluIFsxMjVdY2t1dGlvLmM6IEFkZCAtRE5PR0ZUSU1FUiBhbmQvb3IK LSAgICAgICAgICAtRE5PVElNRVZBTC4KLQotICAgU3ltbGlua3MKLSAgICAgICAgICBUaGUgbmV3 IGJ1aWx0LWluIERJUkVDVE9SWSBjb21tYW5kIHNob3VsZCBzaG93IHN5bWxpbmtzIGxpa2UgImxz Ci0gICAgICAgICAgLWwiIGRvZXMuIElmIGl0IGRvZXMgbm90LCBjaGVjayB0byBzZWUgaWYgeW91 ciBwbGF0Zm9ybSBoYXMgdGhlCi0gICAgICAgICAgbHN0YXQoKSBhbmQgcmVhZGxpbmsoKSBmdW5j dGlvbnMuIElmIHNvLCBhZGQgLURVU0VfTFNUQVQgYW5kCi0gICAgICAgICAgLURDS1NZTUxJTksg dG8gQ0ZMQUdTIGFuZCByZWJ1aWxkLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgbHN0YXQoKQotICAg ICAgICAgIGlzIHVucmVzb2x2ZWQgYXQgbGluayB0aW1lLCBhZGQgLUROT0xTVEFUIHRvIENGTEFH Uy4gSWYKLSAgICAgICAgICByZWFkbGluaygpIGlzIGFsc28gdW5yZXNvbHZlZCwgYWRkIC1ETk9T WU1MSU5LLgotCi0gICByZWFscGF0aCgpCi0gICAgICAgICAgTGluay10aW1lIGNvbXBsYWlucyBh Ym91dCByZWFscGF0aCgpIC0tIGZpbmQgdGhlIGxpYnJhcnkgaW4KLSAgICAgICAgICB3aGljaCBp dCByZXNpZGVzIGFuZCBhZGQgaXQgdG8gTElCUyAoZXhhbXBsZSBmb3IgVW5peHdhcmUgNy4xOgot ICAgICAgICAgICItbGN1ZGs3MCIpIG9yIGFkZCAtRE5PUkVBTFBBVEggdG8gQ0ZMQUdTIGFuZCBy ZWJ1aWxkLiBJZiBidWlsdAotICAgICAgICAgIHdpdGggcmVhbHBhdGgoKSBidXQgZGVidWcgbG9n IGZpbGUgaXMgdHJ1bmNhdGVkIG9yIG1hbmdsZWQsCi0gICAgICAgICAgZGl0dG8gKHNvbWUgcmVh bHBhdGgoKSBpbXBsZW1lbnRhdGlvbnMgYmVoYXZlIGRpZmZlcmVudGx5IGZyb20KLSAgICAgICAg ICBvdGhlcnMpLiBJZiBidWlsdCB3aXRoIHJlYWxwYXRoKCkgYW5kIHNlZW1pbmdseSByYW5kb20g Y29yZQotICAgICAgICAgIGR1bXBzIG9jY3VyIGR1cmluZyBmaWxlIHBhdGggcmVzb2x1dGlvbiwg ZGl0dG8uCi0KLSAgIEZhaWx1cmUgdG8gbG9jYXRlIGhlYWRlciBmaWxlIDx0ZXJtLmg+Ci0gICAg ICAgICAgVXN1YWxseSBoYXBwZW5zIG9uIExpbnV4IHN5c3RlbXMgdGhhdCBoYXZlIHRoZSBDIGNv bXBpbGVyCi0gICAgICAgICAgaW5zdGFsbGVkLCBidXQgbm90IHRoZSBuY3Vyc2VzIHBhY2thZ2Ug KHNlZSBjb21tZW50cyBhYm91dAotICAgICAgICAgIHNlbGVjdGl2ZSBpbnN0YWxscyBhYm92ZSku IEdvIGJhY2sgYW5kIGluc3RhbGwgbmN1cnNlcywgb3IgdXNlCi0gICAgICAgICAgIm1ha2UgbGlu dXhuYyIgKExpbnV4IE5vIEN1cnNlcykuCi0KLSAgICJDYW4ndCBmaW5kIHNoYXJlZCBsaWJyYXJ5 IGxpYmMuc28uMi4xIgotICAgIkNhbid0IGZpbmQgc2hhcmVkIGxpYnJhcnkgbGlibmN1cnNlcy5z by4zLjAiLCBldGMuLi4KLSAgICAgICAgICBZb3UgYXJlIHRyeWluZyB0byBydW4gYSBiaW5hcnkg dGhhdCB3YXMgYnVpbHQgb24gYSBjb21wdXRlciB0aGF0Ci0gICAgICAgICAgaGFzIGRpZmZlcmVu dCBsaWJyYXJ5IHZlcnNpb25zIHRoYW4geW91ciBjb21wdXRlciwgYW5kIHlvdXIKLSAgICAgICAg ICBjb21wdXRlcidzIGxvYWRlciBpcyBwaWNreSBhYm91dCBsaWJyYXJ5IHZlcnNpb24gbnVtYmVy cy4KLSAgICAgICAgICBSZWJ1aWxkIGZyb20gc291cmNlIG9uIHlvdXIgY29tcHV0ZXIuCi0KLSAg IFRpbWUgKHN0cnVjdCB0bSkgcmVsYXRlZCBkaWZmaWN1bHRpZXM6Ci0gICAgICAgICAgRXJyb3Jz IGxpa2UgdGhlIGZvbGxvd2luZzoKLQotImNrdXRpby5jIiwgbGluZSAxMTk5NDogaW5jb21wbGV0 ZSBzdHJ1Y3QvdW5pb24vZW51bSB0bTogX3RtCi0iY2t1dGlvLmMiLCBsaW5lIDExOTk1OiBlcnJv cjogY2Fubm90IGRlcmVmZXJlbmNlIG5vbi1wb2ludGVyIHR5cGUKLSJja3V0aW8uYyIsIGxpbmUg MTE5OTU6IGVycm9yOiBhc3NpZ25tZW50IHR5cGUgbWlzbWF0Y2gKLSJja3V0aW8uYyIsIGxpbmUg MTE5OTc6IHdhcm5pbmc6IHVzaW5nIG91dCBvZiBzY29wZSBkZWNsYXJhdGlvbjogbG9jYWx0aW1l Ci0iY2t1dGlvLmMiLCBsaW5lIDExOTk3OiBlcnJvcjogdW5rbm93biBvcGVyYW5kIHNpemU6IG9w ICI9IgotImNrdXRpby5jIiwgbGluZSAxMTk5NzogZXJyb3I6IGFzc2lnbm1lbnQgdHlwZSBtaXNt YXRjaAotImNrdXRpby5jIiwgbGluZSAxMTk5ODogZXJyb3I6IHVuZGVmaW5lZCBzdHJ1Y3QvdW5p b24gbWVtYmVyOiB0bV95ZWFyCi0iY2t1dGlvLmMiLCBsaW5lIDEyMDAwOiBlcnJvcjogdW5kZWZp bmVkIHN0cnVjdC91bmlvbiBtZW1iZXI6IHRtX21vbgotImNrdXRpby5jIiwgbGluZSAxMjAwMTog ZXJyb3I6IHVuZGVmaW5lZCBzdHJ1Y3QvdW5pb24gbWVtYmVyOiB0bV9tZGF5Ci0iY2t1dGlvLmMi LCBsaW5lIDEyMDAyOiBlcnJvcjogdW5kZWZpbmVkIHN0cnVjdC91bmlvbiBtZW1iZXI6IHRtX2hv dXIKLSJja3V0aW8uYyIsIGxpbmUgMTIwMDM6IGVycm9yOiB1bmRlZmluZWQgc3RydWN0L3VuaW9u IG1lbWJlcjogdG1fbWluCi0iY2t1dGlvLmMiLCBsaW5lIDEyMDA0OiBlcnJvcjogdW5kZWZpbmVk IHN0cnVjdC91bmlvbiBtZW1iZXI6IHRtX3NlYwotCi0gICAgICAgICAgYXJlIGR1ZSB0byBmYWls dXJlIHRvIGluY2x1ZGUgdGhlIGFwcHJvcHJpYXRlIHRpbWUuaCBoZWFkZXIKLSAgICAgICAgICBm aWxlcy4gVW5peCBwbGF0Zm9ybXMgZ2VuZXJhbGx5IGhhdmUgb25lIG9yIG1vcmUgb2YgdGhlCi0g ICAgICAgICAgZm9sbG93aW5nOiA8dGltZS5oPiwgPHN5cy90aW1lLmg+LCBhbmQgPHN5cy90aW1l Yi5oPi4gQW55Ci0gICAgICAgICAgY29tYmluYXRpb24gb2YgdGhlc2UgbWlnaHQgYmUgcmVxdWly ZWQuIERlZmF1bHRzIGFyZSBzZXQgdXAgZm9yCi0gICAgICAgICAgZWFjaCBtYWtlZmlsZSB0YXJn ZXQuIFRoZSBkZWZhdWx0cyBjYW4gYmUgY29ycmVjdGVkIG9uIHRoZSBDQwotICAgICAgICAgIGNv bW1hbmQgbGluZSBieSBhZGRpbmcgdGhlIGFwcHJvcHJpYXRlIGRlZmluaXRpb24gZnJvbSB0aGUK LSAgICAgICAgICBmb2xsb3dpbmcgbGlzdCB0byBDRkxBR1M6Ci0KLS1EVElNRUggICAgICAgICBJ bmNsdWRlIDx0aW1lLmg+Ci0tRE5PVElNRUggICAgICAgRG9uJ3QgaW5jbHVkZSA8dGltZS5oPgot LURTWVNUSU1FSCAgICAgIEluY2x1ZGUgPHN5cy90aW1lLmg+Ci0tRE5PU1lTVElNRUggICAgRG9u J3QgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLS1EU1lTVElNRUJIICAgICBJbmNsdWRlIDxzeXMvdGlt ZWIuaD4KLS1ETk9TWVNUSU1FQkggICBEb24ndCBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLQotICAg ICAgICAgIE5vdGUgdGhhdCA8c3lzL3RpbWViLmg+IGlzIHJlbGF0aXZlbHkgc2NhcmNlIGluIHRo ZSBTeXN0ZW0gViBhbmQKLSAgICAgICAgICBQT1NJWCBlbnZpcm9ubWVudHM7IHRoZSBvbmx5IHBs YXRmb3JtIG9mIHJlY2VudCB2aW50YWdlIHdoZXJlIGl0Ci0gICAgICAgICAgd2FzL2lzIHVzZWQg aXMgT1NGLzEgYW5kIGl0cyBkZXJpdmF0aXZlcyAoRGlnaXRhbCBVbml4IGFuZCBUcnU2NAotICAg ICAgICAgIFVuaXgpLgotCi0gICBTdHJ1Y3QgdGltZXZhbCBhbmQvb3IgdGltZXpvbmUgbm90IGRl Y2xhcmVkOgotICAgICAgICAgIEluIHNvbWUgY2FzZXMsIG1lcmVseSBpbmNsdWRpbmcgdGhlIGFw cHJvcHJpYXRlIHRpbWUuaCBoZWFkZXIKLSAgICAgICAgICBmaWxlcyBpcyBzdGlsbCBub3QgZW5v dWdoLiBQT1NJWC4xIGRvZXMgbm90IGRlZmluZSB0aGUgdGltZXZhbAotICAgICAgICAgIHN0cnVj dCwgYW5kIHNvIHRoZSBpdGVtcyB3ZSBuZWVkIGZyb20gdGhlIGhlYWRlciBhcmUgcHJvdGVjdGVk Ci0gICAgICAgICAgYWdhaW5zdCB1cyBieSAjaWZuZGVmIF9QT1NJWF9TT1VSQ0Ugb3Igc29tZXN1 Y2guIEluIHRoaXMgY2FzZSwKLSAgICAgICAgICB3ZSBoYXZlIHRvIGRlY2xhcmUgdGhlIHRpbWV2 YWwgKGFuZCB0aW1lem9uZSkgc3RydWN0cyBvdXJzZWx2ZXMuCi0gICAgICAgICAgVG8gZm9yY2Ug dGhpcywgaW5jbHVkZSAtRERDTFRJTUVWQUwgaW4gQ0ZMQUdTLgotCi0gICBXYXJuaW5ncyBhYm91 dCBkbl9leHBhbmQoKSBBcmd1bWVudCAjNAotICAgICAgICAgIFdBUk5JTkc6IGFyZ3VtZW50IGlz IGluY29tcGF0aWJsZSB3aXRoIHByb3RvdHlwLiBJdCdzIHRoZSBvbGQKLSAgICAgICAgICBjaGFy IHZlcnN1cyB1bnNpZ25lZCBjaGFyIHN0dXBpZGl0eSBhZ2Fpbi4gVHJ5IHRvIGZpbmQgYQotICAg ICAgICAgIGNvbXBpbGVyIHN3aXRjaCBsaWtlIEdDQydzICItZnVuc2lnbmVkLWNoYXIiLiBGYWls aW5nIHRoYXQsIGFkZAotICAgICAgICAgIC1EQ0tRVUVSWVRZUEU9eHh4IHRvIENGTEFHUywgd2hl cmUgeHh4IGlzIHdoYXRldmVyICdtYW4KLSAgICAgICAgICBkbl9leHBhbmQnIHRlbGxzIHlvdSB0 aGUgdHlwZSBvZiB0aGUgNHRoIGFyZ3VtZW50IHNob3VsZCBiZQotICAgICAgICAgIChwcmVzdW1h Ymx5IGVpdGhlciBjaGFyIG9yIHVuc2lnbmVkIGNoYXI7IGluIHRoZSBsYXR0ZXIgY2FzZSB1c2UK LSAgICAgICAgICBDSEFSIHRvIGF2b2lkIGNvbmZ1c2lvbiBjYXVzZWQgYnkgbXVsdGlwbGUgd29y ZHMuCi0KLSAgIFN3aXRjaCBUYWJsZSBPdmVyZmxvdyAoaW4gWzEyNl1ja2N1bmkuYykKLSAgICAg ICAgICBBZGQgLUROT1VOSUNPREUgdG8gQ0ZMQUdTLgotCi0gICBDb21waWxlLXRpbWUgd2Fybmlu Z3MgYWJvdXQgY2tfb3V0KCkgb3IgdGdldHN0cigpIG9yIHRwdXRzKCk6Ci0gICAgICAgICAgRWFz eSBzb2x1dGlvbjogQWRkIC1ETk9URVJNQ0FQIHRvIENGTEFHUy4gQnV0IHRoZW4geW91IGxvc2Ug dGhlCi0gICAgICAgICAgU0NSRUVOIGZ1bmN0aW9uLiBSZWFsIHNvbHV0aW9uOiBUcnkgYWxsIGRp ZmZlcmVudCBjb21iaW5hdGlvbnMKLSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIENGTEFHUzoK LQotLURUUFVUU0FSR1RZUEU9Y2hhciAgICAtRFRQVVRTRk5UWVBFPWludAotLURUUFVUU0FSR1RZ UEU9aW50ICAgICAtRFRQVVRTRk5UWVBFPXZvaWQKLQotICAgICAgICAgIFVudGlsIHRoZSB3YXJu aW5ncyBnbyBhd2F5LCBleGNlcHQgbWF5YmUgImNrX291dGM6IHJldHVybiB3aXRoIGEKLSAgICAg ICAgICB2YWx1ZSBpbiBhIGZ1bmN0aW9uIHJldHVybmluZyB2b2lkIiwgYW5kIGluIHRoYXQgY2Fz ZSBhbHNvIGFkZAotICAgICAgICAgIC1EVFBVVFNJU1ZPSUQuCi0KLSAgICJQYXNzaW5nIGFyZyAx IG9mIHRvIHRwdXRzKCkgbWFrZXMgcG9pbnRlciBmcm9tIGludGVnZXIgd2l0aG91dCBhCi0gICAg ICAgICAgY2FzdCI6Ci0gICAgICAgICAgQWRkIC1EVFBVVFNBUkcxQ09OU1QgdG8gQ0ZMQUdTLgot Ci0gICAiVW5kZWZpbmVkIHN5bWJvbDogZHVwMiIKLSAgICAgICAgICBBZGQgLUROT1pFWEVDIHRv IENGTEFHUy4KLQotICAgImhlYWRlciBmaWxlICd0ZXJtY2FwLmgnIG5vdCBmb3VuZCIKLSAgICAg ICAgICBBZGQgLUROT0hURVJNQ0FQIHRvIENGTEFHUy4KLQotICAgT3RoZXIgZGlmZmljdWx0aWVz IGFyZSBnZW5lcmFsbHkgb2YgdGhlICJ3aGVyZSBpcyBjdXJzZXMuaCBhbmQgd2hhdCBpcwotICAg aXQgY2FsbGVkIHRoaXMgd2Vlaz8iIHZhcmlldHkgKG1vc3QgZWFzaWx5IHNvbHZlZCBieSBtYWtp bmcgc3ltbGlua3MgaW4KLSAgIHRoZSBpbmNsdWRlIGFuZCBsaWIgZGlyZWN0b3JpZXMpLCBvciBv dmVyemVhbG91cyBjb21wbGFpbnRzIHJlZ2FyZGluZwotICAgdHlwZSBtaXNtYXRjaGVzIGluIGZ1 bmN0aW9uIGNhbGxzIGJlY2F1c2Ugb2YgdGhlIHRvdGFsbHkgbmVlZGxlc3MgYW5kCi0gICBzaWxs eSBzaWduZWQgdmVyc3VzIHVuc2lnbmVkIGNoYXIgY29uZmxpY3QgKCopLCBldGMuIEluIGFueSBj YXNlLAotICAgcGxlYXNlIHNlbmQgYW55IGNvbXBpbGF0aW9uIG9yIGxpbmtpbmcgd2FybmluZ3Mg b3IgZXJyb3JzIHRvIHRoZQotICAgYXV0aG9yLCBwcmVmZXJhYmx5IGFsb25nIHdpdGggZml4ZXMu Ci0KLSAgICAgKiBDLUtlcm1pdCBkb2VzIG5vdCB1c2UgdGhlIHNpZ25lZCBwcm9wZXJ0eSBvZiBj aGFycyBhdCBhbGwgYW55d2hlcmUsCi0gICAgICAgZXZlci4gU28gaWYgYWxsIGNoYXJzIGFuZCBj aGFyIConcyBjYW4gYmUgbWFkZSB1bnNpZ25lZCBhdCBjb21waWxlCi0gICAgICAgdGltZSwgYXMg dGhleSBjYW4gaW4gZ2NjIHdpdGggIi1mdW5zaWduZWQtY2hhciIsIHRoZXkgc2hvdWxkIGJlLgot Ci0gICBJTVBPUlRBTlQ6IElmIHlvdSBmaW5kIGFueSBvZiB0aGVzZSBoaW50cyBuZWNlc3Nhcnkg Zm9yIGEgcGFydGljdWxhcgotICAgbWFrZSB0YXJnZXQgKG9yIHlvdSBoaXQgdXBvbiBvdGhlcnMg bm90IGxpc3RlZCBoZXJlKSwgUExFQVNFIFNFTkQgQQotICAgUkVQT1JUIFRPOgotCi1bMTI3XWtl cm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdQotCi00LjEuIFRoZSBVbml4IE1ha2VmaWxlCi0KLSAg IFsgWzEyOF1Ub3AgXSBbIFsxMjldQ29udGVudHMgXSBbIFsxMzBdU2VjdGlvbiBDb250ZW50cyBd IFsgWzEzMV1OZXh0IF0KLSAgIFsgWzEzMl1QcmV2aW91cyBdCi0KLSAgIElmIHlvdXIgZGlzdHJp YnV0aW9uIGRvZXMgbm90IGNvbnRhaW4gYSBmaWxlIHdpdGggdGhlIG5hbWUgIm1ha2VmaWxlIgot ICAgb3IgIk1ha2VmaWxlIiwgdGhlbiByZW5hbWUgdGhlIGZpbGUgY2FsbGVkIGNrdWtlci5tYWsg dG8gbWFrZWZpbGU6Ci0KLW12IGNrdWtlci5tYWsgbWFrZWZpbGUKLQotICAgVGhlbiB0eXBlICJt YWtlIHh4eCIsIHdoZXJlIHh4eCBpcyB0aGUgcGxhdGZvcm0geW91IHdhbnQgdG8gYnVpbGQKLSAg IEMtS2VybWl0IGZvci4gVGhlc2UgYXJlIGxpc3RlZCBpbiB0aGUgWzEzM11jb21tZW50cyBhdCB0 aGUgdG9wIG9mIHRoZQotICAgbWFrZWZpbGUuIEZvciBleGFtcGxlLCB0byBidWlsZCBDLUtlcm1p dCBmb3IgTGludXgsIHR5cGU6Ci0KLW1ha2UgbGludXgKLQotICAgSGVyZSBhcmUgc29tZSB0eXBp Y2FsIGV4YW1wbGVzOgotCi0gICAgIFRhcmdldCAgICBEZXNjcmlwdGlvbgotICAgICBsaW51eCAg ICAgTGludXgsIGFueSB2ZXJzaW9uIG9uIGFueSBoYXJkd2FyZSBwbGF0Zm9ybQotICAgICBvcGVu YnNkICAgT3BlbkJTRCwgYW55IHZlcnNpb24gb24gYW55IGhhcmR3YXJlIHBsYXRmb3JtCi0gICAg IGFpeDQzICAgICBBSVggNC4zCi0gICAgIGFpeDQzZyAgICBBSVggNC4zLCBidWlsdCB3aXRoIGdj YwotICAgICBzb2xhcmlzOSAgU29sYXJpcyA5Ci0gICAgIHNvbGFyaXM5ZyBTb2xhcmlzIDkgYnVp bHQgd2l0aCBnY2MKLSAgICAgaHB1eDExMDAgIEhQLVVYIDExLXBvaW50LWFueXRoaW5nCi0KLSAg IFRoZSBtYWtlZmlsZSBpcyBxdWl0ZSBsb25nLCBhbmQgYXQgbGVhc3QgdHdvIHZlcnNpb25zIG9m IFVuaXgsIFNDTwotICAgWGVuaXgvMjg2IGFuZCAyLnggQlNELCBjYW5ub3QgY29wZSB3aXRoIGl0 cyBsZW5ndGguIEFuIGF0dGVtcHQgdG8gIm1ha2UKLSAgIHNjbzI4NiIgZ2l2ZXMgdGhlIG1lc3Nh Z2UgIk1ha2U6IENhbm5vdCBhbGxvYyBtZW0gZm9yIGVudi4uIFN0b3AiLgotICAgU29sdXRpb246 IGVkaXQgYXdheSBzb21lIG9yIGFsbCBvZiB0aGUgbm9ucmVsZXZhbnQgbWF0ZXJpYWwgZnJvbSB0 aGUKLSAgIG1ha2VmaWxlLiAoQSBzZXBhcmF0ZSB2ZXJzaW9uIG9mIHRoZSBtYWtlZmlsZSBpcyBw cm92aWRlZCBmb3IgQlNEIDIueDoKLSAgIGNrdWJzMi5tYWsgYnV0IEMtS2VybWl0IDguMCBjYW4n dCBiZSBidWlsdCBmb3IgQlNEIDIueCAtLSBpdCBoYXMgc2ltcGx5Ci0gICBncm93biB0b28gbGFy Z2UuKQotCi0gICBTb21lIG1ha2UgcHJvZ3JhbXMgcmVwb3J0ZWRseSBjYW5ub3QgaGFuZGxlIGNv bnRpbnVlZCBsaW5lcyAobGluZXMKLSAgIGVuZGluZyBpbiBiYWNrc2xhc2ggKFwpKS4gSWYgeW91 IGhhdmUgYSBwcm9ibGVtIHdpdGggdGhlIG1ha2VmaWxlLCB0cnkKLSAgIGVkaXRpbmcgdGhlIG1h a2VmaWxlIHRvIGpvaW4gdGhlIGNvbnRpbnVlZCBsaW5lcyAocmVtb3ZlIHRoZQotICAgYmFja3Ns YXNoZXMgYW5kIHRoZSBmb2xsb3dpbmcgbGluZWZlZWQpLgotCi0gICBPdGhlciBtYWtlZmlsZSB0 cm91YmxlcyBtYXkgb2NjdXIgYmVjYXVzZSB0YWJzIGluIHRoZSBtYWtlZmlsZSBoYXZlCi0gICBz b21laG93IGJlZW4gY29udmVydGVkIHRvIHNwYWNlcy4gU3BhY2VzIGFuZCB0YWJzIGFyZSBkaXN0 aW5jdCBpbiBVbml4Ci0gICBtYWtlZmlsZXMuCi0KLSAgIFNpbWlsYXJseSwgY2FycmlhZ2UgcmV0 dXJucyBtaWdodCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGVuZCBvZiBlYWNoCi0gICBsaW5lLCB3 aGljaCBhbHNvIHByb3ZlcyBjb25mdXNpbmcgdG8gbW9zdCBVbml4IHZlcnNpb25zIG9mIG1ha2Uu Ci0KLSAgIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgY29tbWVudHMgYWJvdXQgeW91ciBwYXJ0 aWN1bGFyIHZlcnNpb24gaW4gaXRzCi0gICBtYWtlZmlsZSB0YXJnZXQgaXRzZWxmLiBJbiBhIHRl eHQgZWRpdG9yIHN1Y2ggYXMgRU1BQ1Mgb3IgVkksIHNlYXJjaAotICAgZm9yIHRoZSBtYWtlIGVu dHJ5IG5hbWUgZm9sbG93ZWQgYnkgYSBjb2xvbiwgZS5nLiAibGludXg6IiAoaWYgeW91Ci0gICBy ZWFsbHkgYXJlIGJ1aWxkaW5nIEMtS2VybWl0IGZvciBMaW51eCwgZG8gdGhpcyBub3cpLgotCi0g ICBDaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGNvbW1lbnRzIGFib3V0IHlvdXIgcGFydGljdWxh ciB2ZXJzaW9uIGluIHRoZQotICAgWzEzNF1ja3Vid3IudHh0IGZpbGUgKFsxMzVdQ0xJQ0sgSEVS RSBmb3IgdGhlIFdlYiB2ZXJzaW9uKS4KLQotICAgSWYgeW91IGhhdmUgdHJvdWJsZSB3aXRoIGJ1 aWxkaW5nIFsxMzZdY2t3YXJ0LmMsIG9yIHJ1bm5pbmcgdGhlCi0gICByZXN1bHRpbmcgd2FydCBw cmVwcm9jZXNzb3IgcHJvZ3JhbSBvbiBbMTM3XWNrY3Byby53OgotCi0gICAgMS4gSnVzdCAidG91 Y2giIHRoZSBbMTM4XWNrY3Byby5jIGZpbGUgdGhhdCBjb21lcyBpbiB0aGUgZGlzdHJpYnV0aW9u Ci0gICAgICAgYW5kIHRoZW4gZ2l2ZSB0aGUgIm1ha2UiIGNvbW1hbmQgYWdhaW4sIG9yOgotICAg IDIuIENvbXBpbGUgY2t3YXJ0LmMgImJ5IGhhbmQiOiBjYyAtbyB3YXJ0IGNrd2FydC5jLCBvcjoK LSAgICAzLiBUcnkgdmFyaW91cyBvdGhlciB0cmlja3MuIEUuZy4gb25lIExpbnV4IHVzZXIgcmVw b3J0ZWQgdGhhdCB0aGF0Ci0gICAgICAgYWRkaW5nIHRoZSAic3RhdGljIiBzd2l0Y2ggdG8gdGhl IHJ1bGUgZm9yIGJ1aWxkaW5nIHdhcnQgZml4ZWQKLSAgICAgICBldmVyeXRoaW5nOgotCi13YXJ0 OiBja3dhcnQuJChFWFQpCi0gICAgICAgICQoQ0MpIC1zdGF0aWMgLW8gd2FydCBja3dhcnQuJChF WFQpICQoTElCUykKLQotICAgSWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBhIGNvbXBpbGUtdGlt ZSBvcHRpb24gdG8gdHJlYXQgQUxMIGNoYXJzIChhbmQKLSAgIGNoYXIgKidzLCBldGMpIGFzIHVu c2lnbmVkLCBieSBhbGwgbWVhbnMgdXNlIGl0IC0tIGFuZCBzZW5kIG1lIGVtYWlsIHRvCi0gICBs ZXQgbWUga25vdyB3aGF0IGl0IGlzIChJIGFscmVhZHkga25vdyBhYm91dCBnY2MgLWZ1bnNpZ25l ZC1jaGFyKS4KLQotICAgVG8gYWRkIGNvbXBpbGF0aW9uIG9wdGlvbnMgKHdoaWNoIGFyZSBleHBs YWluZWQgbGF0ZXIgaW4gdGhpcyBkb2N1bWVudCkKLSAgIHRvIHlvdXIgbWFrZWZpbGUgdGFyZ2V0 IHdpdGhvdXQgZWRpdGluZyB0aGUgbWFrZWZpbGUsIGluY2x1ZGUKLSAgICJLRkxBR1M9Li4uIiBv biB0aGUgbWFrZSBjb21tYW5kIGxpbmUsIGZvciBleGFtcGxlOgotCi1tYWtlIGxpbnV4IEtGTEFH Uz0tRE5PREVCVUcKLW1ha2UgYnNkICJLRkxBR1M9LURLQU5KSSAtRE5PREVCVUcgLUROT1RMT0cg LUREWU5BTUlDIC1VVENQU09DS0VUIgotCi0gICBNdWx0aXBsZSBvcHRpb25zIG11c3QgYmUgc2Vw YXJhdGVkIGJ5IHNwYWNlcy4gUXVvdGVzIGFyZSBuZWNlc3NhcnkgaWYKLSAgIHRoZSBLRkxBR1M9 IGNsYXVzZSBpbmNsdWRlcyBzcGFjZXMuIFRoZSBLRkxBR1MgYXJlIGFkZGVkIHRvIHRoZSBlbmQg b2YKLSAgIHRoZSBDRkxBR1MgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgc2VsZWN0ZWQgbWFrZWZp bGUgdGFyZ2V0LiBGb3IKLSAgIGV4YW1wbGUsIHRoZSAiYnNkIiBlbnRyeSBpbmNsdWRlcyAtREJT RDQgLURUQ1BTT0NLRVQsIHNvIHRoZSBzZWNvbmQKLSAgIGV4YW1wbGUgYWJvdmUgY29tcGlsZXMg S2VybWl0IHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zOgotCi0tREJTRDQgLURUQ1BTT0NLRVQg LURLQU5KSSAtRE5PREVCVUcgLUROT1RMT0cgLUREWU5BTUlDIC1VVENQU09DS0VUCi0KLSAgIChO b3RpY2UgaG93ICItVVRDUFNPQ0tFVCIgaXMgdXNlZCB0byBuZWdhdGUgdGhlIGVmZmVjdCBvZiB0 aGUKLSAgICItRFRDUFNPQ0tFVCIgb3B0aW9uIHRoYXQgaXMgaW5jbHVkZWQgaW4gdGhlIG1ha2Vm aWxlIHRhcmdldC4pCi0KLSAgIFdBUk5JTkc6IEJlIGNhcmVmdWwgd2l0aCBLRkxBR1MuIElmIHlv dSBidWlsZCBDLUtlcm1pdCwgY2hhbmdlIHNvbWUKLSAgIGZpbGVzLCBhbmQgdGhlbiBydW4gbWFr ZSBhZ2FpbiB1c2luZyB0aGUgc2FtZSBtYWtlIGVudHJ5IGJ1dCBzcGVjaWZ5aW5nCi0gICBkaWZm ZXJlbnQgS0ZMQUdTIHRoYW4gbGFzdCB0aW1lLCBtYWtlIHdvbid0IGRldGVjdCBpdCBhbmQgeW91 IGNvdWxkCi0gICBlYXNpbHkgd2luZCB1cCB3aXRoIGluY29uc2lzdGVudCBvYmplY3QgbW9kdWxl cywgZS5nLiBzb21lIG9mIHRoZW0KLSAgIGJ1aWx0IHdpdGggYSBjZXJ0YWluIG9wdGlvbiwgb3Ro ZXJzIG5vdC4gV2hlbiBpbiBkb3VidCwgIm1ha2UgY2xlYW4iCi0gICBmaXJzdCB0byBtYWtlIHN1 cmUgYWxsIHlvdXIgb2JqZWN0IGZpbGVzIGFyZSBjb25zaXN0ZW50LiBTaW1pbGFybHksIGlmCi0g ICB5b3UgY2hhbmdlIENGTEFHUywgTElCUywgb3IgYW55IG90aGVyIGl0ZW1zIGluIHRoZSBtYWtl ZmlsZSwgb3IgeW91Ci0gICByZWJ1aWxkIHVzaW5nIGEgZGlmZmVyZW50IG1ha2VmaWxlIHRhcmdl dCwgIm1ha2UgY2xlYW4iIGZpcnN0LgotCi0gICBJZiB5b3UgY3JlYXRlIGEgbmV3IG1ha2VmaWxl IHRhcmdldCwgdXNlIHN0YXRpYyBsaW5raW5nIGlmIHBvc3NpYmxlLgotICAgRXZlbiB0aG91Z2gg dGhpcyBtYWtlcyB5b3VyIEMtS2VybWl0IGJpbmFyeSBiaWdnZXIsIHRoZSByZXN1bHRpbmcKLSAg IGJpbmFyeSB3aWxsIGJlIG1vcmUgcG9ydGFibGUuIER5bmFtaWNhbGx5IGxpbmtlZCBiaW5hcmll cyB0ZW5kIHRvIHJ1bgotICAgb25seSBvbiB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBhbmQgdmVy c2lvbiB3aGVyZSB0aGV5IHdlcmUgYnVpbHQ7IG9uCi0gICBvdGhlcnMsIGludm9jYXRpb24gdGVu ZHMgdG8gZmFpbCB3aXRoIGEgbWVzc2FnZSBsaWtlOgotCi1DYW4ndCBmaW5kIHNoYXJlZCBsaWJy YXJ5ICJsaWJjLnNvLjIuMSIKLQotNC4yLiBUaGUgQy1LZXJtaXQgSW5pdGlhbGl6YXRpb24gRmls ZQotCi0gICBbIFsxMzldVG9wIF0gWyBbMTQwXUNvbnRlbnRzIF0gWyBbMTQxXVNlY3Rpb24gQ29u dGVudHMgXSBbIFsxNDJdTmV4dCBdCi0gICBbIFsxNDNdUHJldmlvdXMgXQotCi0gICAoVGhpcyBz ZWN0aW9uIGlzIG9ic29sZXRlLikgUmVhZCBbMTQ0XVNlY3Rpb24gNSBhYm91dCB0aGUKLSAgIGlu aXRpYWxpemF0aW9uIGZpbGUuCi0KLTQuMy4gVGhlIDIueCBCU0QgTWFrZWZpbGUKLQotICAgWyBb MTQ1XVRvcCBdIFsgWzE0Nl1Db250ZW50cyBdIFsgWzE0N11TZWN0aW9uIENvbnRlbnRzIF0gWyBb MTQ4XU5leHQgXQotICAgWyBbMTQ5XVByZXZpb3VzIF0KLQotICAgICBUaGlzIHNlY3Rpb24gaXMg b2Jzb2xldGUuIEMtS2VybWl0IDYuMCB3YXMgdGhlIGxhc3QgcmVsZWFzZSB0aGF0Ci0gICAgIGNv dWxkIGJlIGJ1aWx0IG9uIFBEUC0xMSBiYXNlZCBCU0QgdmVyc2lvbnMuCi0KLTQuNC4gVGhlIFBs YW4gOSBNYWtlZmlsZQotCi0gICBbIFsxNTBdVG9wIF0gWyBbMTUxXUNvbnRlbnRzIF0gWyBbMTUy XVNlY3Rpb24gQ29udGVudHMgXSBbIFsxNTNdTmV4dCBdCi0gICBbIFsxNTRdUHJldmlvdXMgXQot Ci0gICBVc2UgdGhlIHNlcGFyYXRlIG1ha2VmaWxlIFsxNTVdY2twa2VyLm1rLiBOT1RFOiBUaGUg UGxhbiA5IHZlcnNpb24gb2YKLSAgIEMtS2VybWl0IDguMCBoYXMgbm90IHlldCBiZWVuIGJ1aWx0 LiBUaGVyZSBzaG91bGQgYmUgbm8gaW1wZWRpbWVudCB0bwotICAgYnVpbGRpbmcgaXQuIEhvd2V2 ZXIsIGV2ZW4gd2hlbiBidWlsdCBzdWNjZXNzZnVsbHksIGNlcnRhaW4ga2V5Ci0gICBmZWF0dXJl cyBhcmUgbWlzc2luZywgbm90YWJseSBUQ1AvSVAgbmV0d29ya2luZy4KLQotNC41LiBNYWtlZmls ZSBGYWlsdXJlcwotCi0gICBbIFsxNTZdVG9wIF0gWyBbMTU3XUNvbnRlbnRzIF0gWyBbMTU4XVNl Y3Rpb24gQ29udGVudHMgXSBbCi0gICBbMTU5XVByZXZpb3VzIF0KLQotICAgRmlyc3QsIGJlIHN1 cmUgdGhlIHNvdXJjZSBmaWxlcyBhcmUgc3RvcmVkIG9uIHlvdXIgY3VycmVudCBkaXNrIGFuZAot ICAgZGlyZWN0b3J5IHdpdGggdGhlIHJpZ2h0IG5hbWVzIChpbiBsb3dlcmNhc2UpLiBTZWNvbmQs IG1ha2Ugc3VyZSB0aGF0Ci0gICB0aGUgbWFrZWZpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4g YW55IGxpbmVzIHdpdGggbGVhZGluZyBzcGFjZXM6Ci0gICBpbmRlbnRlZCBsaW5lcyBtdXN0IGFs bCBzdGFydCB3aXRoIGhvcml6b250YWwgVEFCLCBhbmQgbm8gc3BhY2VzLgotCi0gICBUaGVuIG1h a2Ugc3VyZSB0aGF0IHlvdXIgVW5peCBQQVRIIGlzIGRlZmluZWQgdG8gZmluZCB0aGUgYXBwcm9w cmlhdGUKLSAgIGNvbXBpbGVyIGZvciB5b3VyIG1ha2VmaWxlIHRhcmdldC4gRm9yIGV4YW1wbGUs IG9uIFN1bk9TIHN5c3RlbXMsICJtYWtlCi0gICBzdW5vczQxIiBidWlsZHMgQy1LZXJtaXQgZm9y IHRoZSBCU0QgZW52aXJvbm1lbnQsIGFuZCBhc3N1bWVzIHRoYXQKLSAgIC91c3IvdWNiL2NjIHdp bGwgYmUgdXNlZCBmb3IgY29tcGlsYXRpb24gYW5kIGxpbmtpbmcuIElmIHlvdXIgUEFUSCBoYXMK LSAgIC91c3IvNWJpbiBhaGVhZCBvZiAvdXNyL3VjYiwgeW91IGNhbiBoYXZlIHByb2JsZW1zIGF0 IGNvbXBpbGUgb3IgbGluawotICAgdGltZSAoYSBjb21tb25seSByZXBvcnRlZCBzeW1wdG9tIGlz IHRoZSBpbmFiaWxpdHkgdG8gZmluZCAiZnRpbWUiCi0gICBkdXJpbmcgbGlua2luZykuIEZpeCBz dWNoIHByb2JsZW1zIGJ5IHJlZGVmaW5pbmcgeW91ciBVbml4IFBBVEgsIG9yIGJ5Ci0gICBzcGVj aWZ5aW5nIHRoZSBhcHByb3ByaWF0ZSAiY2MiIGluIENDPSBhbmQgQ0MyPSBzdGF0ZW1lbnRzIGlu IHlvdXIKLSAgIG1ha2VmaWxlIHRhcmdldC4KLQotICAgRHVyaW5nIGVkaXRzIDE2Ni0xNjcsIGNv bnNpZGVyYWJsZSBlZmZvcnQgd2VudCBpbnRvIG1ha2luZyBDLUtlcm1pdAotICAgY29tcGlsYWJs ZSBieSBBTlNJIEMgY29tcGlsZXJzLiBUaGlzIGluY2x1ZGVzIHByb3RvdHlwaW5nIGFsbCBvZgot ICAgQy1LZXJtaXQncyBmdW5jdGlvbnMsIGFuZCBpbmNsdWRpbmcgdGhlIEFOU0ktZGVmaW5lZCBz eXN0ZW0gaGVhZGVyCi0gICBmaWxlcyBmb3Igc3lzdGVtIGFuZCBsaWJyYXJ5IGZ1bmN0aW9ucywg YXMgZGVmaW5lZCBpbiBLJlIsIHNlY29uZAotICAgZWRpdGlvbjogPHN0cmluZy5oPiwgPHN0ZGxp Yi5oPiwgPHVuaXN0ZC5oPiAoZXhjZXB0IGluIE5lWFRTVEVQIHRoaXMgaXMKLSAgIDxsaWJjLmg+ KSwgYW5kIDxzeXMvc3RkdHlwZXMuaD4uIElmIHlvdSBnZXQgd2FybmluZ3MgYWJvdXQgYW55IG9m IHRoZXNlCi0gICBoZWFkZXIgZmlsZXMgbm90IGJlaW5nIGZvdW5kLCBvciBhYm91dCBhcmd1bWVu dCBtaXNtYXRjaGVzIGludm9sdmluZwotICAgcGlkX3QsIHVpZF90LCBvciBnaWRfdCwgbG9vayBp biBja2NkZWIuaCBhbmQgbWFrZSBhbWVuZG1lbnRzLiBDLUtlcm1pdAotICAgYXNzdW1lcyBpdCBp cyBiZWluZyBjb21waWxlZCBieSBhbiBBTlNJLWNvbXBsaWFudCBDIGNvbXBpbGVyIGlmCi0gICBf X1NURENfXyBpcyBkZWZpbmVkLCBub3JtYWxseSBkZWZpbmVkIGJ5IHRoZSBjb21waWxlciBpdHNl bGYuIFlvdSBjYW4KLSAgIGZvcmNlIEFOU0kgY29tcGlsYXRpb24gd2l0aG91dCBkZWZpbmluZyBf X1NURENfXyAod2hpY2ggc29tZSBjb21waWxlcnMKLSAgIHdvbid0IGxldCB5b3UgZGVmaW5lKSBi eSBpbmNsdWRpbmcgLURDS19BTlNJQyBvbiB0aGUgY2MgY29tbWFuZCBsaW5lLgotCi0gICBPbiB0 aGUgb3RoZXIgaGFuZCwgaWYgeW91ciBjb21waWxlciBkZWZpbmVzIF9fU1REQ19fIGJ1dCBzdGls bAotICAgY29tcGxhaW5zIGFib3V0IHRoZSBzeW50YXggb2YgS2VybWl0J3MgZnVuY3Rpb24gcHJv dG90eXBlcywgeW91IGNhbgotICAgZGlzYWJsZSB0aGUgQU5TSS1zdHlsZSBmdW5jdGlvbiBwcm90 b3R5cGluZyBieSBpbmNsdWRpbmcgLUROT0FOU0kgb24KLSAgIHRoZSBjb21tYW5kIGxpbmUuCi0K LSAgIEZvciBTQ08gT3BlblNlcnZlciwgVU5JWCwgT0RULCBhbmQgWEVOSVggY29tcGlsYXRpb25z LCBiZSBzdXJlIHRvIHBpY2sKLSAgIHRoZSBtb3N0IGFwcHJvcHJpYXRlIFsxNjBdbWFrZWZpbGUg dGFyZ2V0LCBhbmQgYmUgc3VyZSB5b3UgaGF2ZQotICAgaW5zdGFsbGVkIGFuIFNDTyBkZXZlbG9w bWVudCBzeXN0ZW0gdGhhdCBpcyBrZXllZCB0byB5b3VyIGV4YWN0IFNDTwotICAgb3BlcmF0aW5n IHN5c3RlbSByZWxlYXNlLCBkb3duIHRvIHRoZSBtaW5vciB2ZXJzaW9uIChsaWtlIDIuMy4xKS4K LQotICAgQWxzbyBub3RlIHRoYXQgU0NPIGRpc3RyaWJ1dGVzIHNvbWUgb2YgaXRzIGxpYnJhcmll cyBpbiBlbmNyeXB0ZWQgZm9ybSwKLSAgIGFuZCB0aGV5IG11c3QgYmUgZGVjcnlwdGVkIGJlZm9y ZSBDLUtlcm1pdCBjYW4gYmUgbGlua2VkIHdpdGggdGhlbS4gSWYKLSAgIG5vdCwgeW91IG1pZ2h0 IHNlZSBhIG1lc3NhZ2UgbGlrZToKLQotbGQ6IGZpbGUgL3Vzci9saWIvbGlic29ja2V0LmEgaXMg b2YgdW5rbm93biB0eXBlOiBtYWdpYyBudW1iZXIgPSA2MzY1Ci0KLSAgIFRvIGRlY3J5cHQsIHlv dSBtdXN0IHN1cHBseSBhIGtleSAocGFzc3dvcmQpIHRoYXQgY2FtZSB3aXRoIHlvdXIKLSAgIGxp Y2Vuc2UuIENhbGwgU0NPIGZvciBmdXJ0aGVyIGluZm8uCi0KLSAgIElmIHlvdXIgY29tcGlsZXIg dXNlcyBzb21ldGhpbmcgb3RoZXIgdGhhbiBpbnQgZm9yIHRoZSBwaWQgKHByb2Nlc3MgaWQpCi0g ICBkYXRhIHR5cGUsIHB1dCAtRFBJRF9UPXBpZF90IG9yIHdoYXRldmVyIGluIHlvdXIgQ0ZMQUdT LgotCi0gICBJZiB5b3UgZ2V0IGNvbXBsYWludHMgYWJvdXQgdW5rbm93biBkYXRhIHR5cGVzIHVp ZF90IGFuZCBnaWRfdCwgcHV0Ci0gICAtRFVJRF9UPXh4eCAtREdJRF9UPXl5eSBpbiB5b3VyIENG TEFHUywgd2hlcmUgeHh4IGFuZCB5eXkgYXJlIHRoZQotICAgYXBwcm9wcmlhdGUgdHlwZXMuCi0K LSAgIElmIHlvdXIgY29tcGlsYXRpb24gZmFpbHMgYmVjYXVzZSBvZiBjb25mbGljdGluZyBvciBk dXBsaWNhdGUKLSAgIGRlY2xhcmF0aW9ucyBmb3Igc3lzX2Vycmxpc3QsIGFkZCAtRFVTRV9TVFJF UlJPUiBvciAtRE5EU1lTRVJSTElTVCB0bwotICAgQ0ZMQUdTLgotCi0gICBJZiB5b3VyIGNvbXBp bGF0aW9uIGRpZXMgYmVjYXVzZSBnZXRwd25hbSgpIGlzIGJlaW5nIHJlZGVjbGFyZWQgKG9yCi0g ICBiZWNhdXNlIG9mICJjb25mbGljdGluZyB0eXBlcyBmb3IgZ2V0d3BuYW0iKSwgYWRkIC1ETkRH UFdOQU0gdG8geW91cgotICAgQ0ZMQUdTLiBJZiB0aGF0IGRvZXNuJ3Qgd29yaywgdGhlbiBhZGQg LUREQ0dQV05BTSB0byB5b3VyIENGTEFHUyAoc2VlCi0gICBja3VmaW8uYyBhcm91bmQgbGluZSA0 NDApLgotCi0gICBJZiB0aGUgY29tcGlsZXIgY29tcGxhaW5zIGFib3V0IHRoZSBkZWNsYXJhdGlv biBvZiBnZXRwd25hbSgpIGR1cmluZyBhbgotICAgQU5TSSBDIGNvbXBpbGF0aW9uLCByZW1vdmUg dGhlIGRlY2xhcmF0aW9uIGZyb20gY2t1ZmlvLmMgb3IgY2hhbmdlIHRoZQotICAgYXJndW1lbnQg aW4gdGhlIHByb3RvdHlwZSBmcm9tIChjaGFyICopIHRvIChjb25zdCBjaGFyICopLgotCi0gICBJ ZiB5b3UgZ2V0IGNvbXBsYWludHMgdGhhdCBnZXRwd3VpZCgpIGlzIGJlaW5nIGNhbGxlZCB3aXRo IGFuIGltcHJvcGVyCi0gICB0eXBlLCBwdXQgLURQV0lEX1Q9eHggaW4geW91ciBDRkxBR1MuCi0K LSAgIElmIHlvdSBnZXQgY29tcGlsZS10aW1lIHdhcm5pbmdzIHRoYXQgdF9icmtjIG9yIHRfZW9m YyAodGNoYXJzCi0gICBzdHJ1Y3R1cmUgbWVtYmVycywgdXNlZCBpbiBCU0QtYmFzZWQgdmVyc2lv bnMpIGFyZSB1bmRlZmluZWQsIG9yCi0gICBzdHJ1Y3R1cmUtbWVtYmVyLSByZWxhdGVkIHdhcm5p bmdzIHRoYXQgbWlnaHQgYmUgdHJhY2VkIHRvIHRoaXMgZmFjdCwKLSAgIGFkZCAtRE5PQlJLQyB0 byBDRkxBR1MuCi0KLSAgIElmIHlvdSBnZXQgYSBsaW5rZXIgbWVzc2FnZSB0byB0aGUgZWZmZWN0 IHRoYXQgX3NldHJldWlkIG9yIF9zZXRyZWdpZAotICAgaXMgbm90IGRlZmluZWQsIGFkZCAtRE5P U0VUUkVVIHRvIENGTEFHUywgb3IgYWRkIC1EQ0tUWVBfSD1ibGFoIHRvCi0gICBDRkxBR1MgdG8g bWFrZSBDLUtlcm1pdCByZWFkIHRoZSByaWdodCA8dHlwZXMuaD4ta2luZC1vZi1maWxlIHRvIHBp Y2sKLSAgIHVwIHRoZXNlIGRlZmluaXRpb25zLgotCi0gICBJZiB5b3UgZ2V0IGEgbWVzc2FnZSB0 aGF0IF9wb3BlbiBpcyB1bmRlZmluZWQsIGFkZCAtRE5PUE9QRU4gdG8gQ0ZMQUdTLgotCi0gICBJ ZiB5b3UgZ2V0IGEgY29tcGxhaW50IGF0IGNvbXBpbGUgdGltZSBhYm91dCBhbiBpbGxlZ2FsIHBv aW50ZXItaW50ZWdlcgotICAgY29tYmluYXRpb24gaW4gY2t1ZmlvLmMgaW52b2x2aW5nIHBvcGVu KCksIG9yIGF0IGxpbmsgdGltZSB0aGF0IF9wb3BlbgotICAgaXMgYW4gdW5kZWZpbmVkIHN5bWJv bCwgYWRkIHRoZSBkZWNsYXJhdGlvbiAiRklMRSAqcG9wZW4oKTsiIHRvIHRoZQotICAgZnVuY3Rp b24genhjbWQoKSBpbiBja3VmaW8uYyAodGhpcyBkZWNsYXJhdGlvbiBpcyBzdXBwb3NlZCB0byBi ZSBpbgotICAgPHN0ZGlvLmg+KS4gSWYgbWFraW5nIHRoaXMgY2hhbmdlIGRvZXMgbm90IGhlbHAs IHRoZW4gYXBwYXJlbnRseSB5b3VyCi0gICBVbml4IGRvZXMgbm90IGhhdmUgdGhlIHBvcGVuKCkg ZnVuY3Rpb24sIHNvIHlvdSBzaG91bGQgYWRkIC1ETk9QT1BFTiB0bwotICAgeW91ciBtYWtlIGVu dHJ5LCBpbiB3aGljaCBjYXNlIGNlcnRhaW4gZnVuY3Rpb25zIGludm9sdmluZyAiZmlsZSIgaS9v Ci0gICB0byB0aGUgc3RhbmRhcmQgaW5wdXQgYW5kIG91dHB1dCBvZiBzdWJwcm9jZXNzZXMgd2ls bCBub3QgYmUgYXZhaWxhYmxlLgotCi0gICBJZiB5b3VyIGxpbmtlciBjb21wbGFpbnMgdGhhdCBf Z2V0Y3dkIGlzIHVuZGVmaW5lZCwgeW91IGNhbiBhZGQgYQotICAgZ2V0Y3dkKCkgZnVuY3Rpb24g dG8gY2t1ZmlvLmMsIG9yIGFkZCBpdCB0byB5b3VyIGxpYmMuYSBsaWJyYXJ5IHVzaW5nCi0gICBh cjoKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLWNoYXIgKgotZ2V0Y3dkKGJ1ZixzaXplKSBjaGFy ICpidWY7IGludCBzaXplOyB7Ci0jaWZuZGVmIE5PUE9QRU4KLSNpZmRlZiBEQ0xQT1BFTgotICAg IEZJTEUgKnBvcGVuKCk7Ci0jZW5kaWYKLSAgICBGSUxFICpwZnA7Ci0KLSAgICBpZiAoIWJ1Zikg cmV0dXJuKE5VTEwpOwotICAgIGlmICghKHBmcCA9IHBvcGVuKCJwd2QiLCJyIikpKSByZXR1cm4o TlVMTCk7Ci0gICAgZmdldHMoYnVmLHNpemUtMixwZnApOwotICAgIHBjbG9zZShwZnApOwotICAg IGJ1ZltzdHJsZW4oYnVmKS0xXSA9ICdcMCc7Ci0gICAgcmV0dXJuKChjaGFyICopYnVmKTsKLSNl bHNlCi0gICAgYnVmWzBdID0gJ1wwJzsKLSAgICByZXR1cm4oTlVMTCk7Ci0jZW5kaWYgLyogTk9Q T1BFTiAqLwotfQotCi0jaWZkZWYgTk9QT1BFTgotRklMRSAqcG9wZW4ocyx0KSBjaGFyICpzLCp0 OyB7Ci0gICAgcmV0dXJuKE5VTEwpOwotfQotI2VuZGlmIC8qIE5PUE9QRU4gKi8KLQotICAgSWYg eW91IGdldCBjb21wbGFpbnRzIGFib3V0IE5QUk9DIGhhdmluZyBhbiBpbnZhbGlkIHZhbHVlLCBh ZGQgYSB2YWxpZAotICAgZGVmaW5pdGlvbiBmb3IgaXQgKGRlcGVuZHMgb24geW91ciBzeXN0ZW0p LCBhcyBpbiB0aGUgY3JheSBlbnRyeS4KLQotICAgSWYgeW91IGdldCBzb21lIHN5bWJvbCB0aGF0 J3MgbXVsdGlwbHkgZGVmaW5lZCwgaXQgcHJvYmFibHkgbWVhbnMgdGhhdAotICAgYSB2YXJpYWJs ZSBuYW1lIHVzZWQgYnkgS2VybWl0IGlzIGFsc28gdXNlZCBpbiBvbmUgb2YgeW91ciBzeXN0ZW0K LSAgIGxpYnJhcmllcyB0aGF0IEtlcm1pdCBpcyBsaW5rZWQgd2l0aC4gRm9yIGV4YW1wbGUsIHVu ZGVyIFBDL0lYIHNvbWUKLSAgIGxpYnJhcnkgaGFzIGEgdmFyaWFibGUgb3IgZnVuY3Rpb24gY2Fs bGVkICJkYXRhIiwgYW5kIHRoZSB2YXJpYWJsZQotICAgImRhdGEiIGlzIGFsc28gdXNlZCBleHRl bnNpdmVseSBieSBLZXJtaXQuIFJhdGhlciB0aGFuIGVkaXQgdGhlIEtlcm1pdAotICAgc291cmNl IGZpbGVzLCBqdXN0IHB1dCBhIC1EIGluIHRoZSBtYWtlIGVudHJ5IENGTEFHUyB0byBjaGFuZ2Ug dGhlCi0gICBLZXJtaXQgc3ltYm9sIGF0IGNvbXBpbGUgdGltZS4gSW4gdGhpcyBleGFtcGxlLCBp dCBtaWdodCBiZQotICAgLURkYXRhPXhkYXRhLgotCi0gICBTb21lIHN5bWJvbCBpcyBkZWZpbmVk IGluIHlvdXIgc3lzdGVtJ3MgaGVhZGVyIGZpbGVzLCBidXQgaXQgcHJvZHVjZXMKLSAgIGNvbmZs aWN0cyB3aXRoLCBvciB1bmRlc2lyZWQgcmVzdWx0cyBmcm9tLCBLZXJtaXQuIFRyeSB1bmRlZmlu aW5nIHRoZQotICAgc3ltYm9sIGluIHRoZSBtYWtlZmlsZSB0YXJnZXQncyBDRkxBR1MsIGZvciBl eGFtcGxlIC1VRklPTlJFQUQuCi0KLSAgIFNvbWUgd2VsbC1rbm93biBzeW1ib2wgaXMgbWlzc2lu ZyBmcm9tIHlvdXIgc3lzdGVtIGhlYWRlciBmaWxlcy4gVHJ5Ci0gICBkZWZpbmluZyBpbiB0aGUg bWFrZWZpbGUgdGFyZ2V0J3MgQ0ZMQUdTLCBmb3IgZXhhbXBsZSAtREZSRUFEPTEuCi0KLSAgIFlv dSBnZXQgbWFueSB3YXJuaW5ncyBhYm91dCBwb2ludGVyIG1pc21hdGNoZXMuIFRoaXMgcHJvYmFi bHkgbWVhbnMKLSAgIHRoYXQgS2VybWl0IGlzIGFzc3VtaW5nIGFuIGludCB0eXBlIGZvciBzaWdu YWwoKSB3aGVuIGl0IHNob3VsZCBiZQotICAgdm9pZCwgb3IgdmljZS12ZXJzYS4gVHJ5IGFkZGlu ZyAtRFNJR19JIChmb3IgaW50ZWdlciBzaWduYWwoKSkgb3IKLSAgIC1EU0lHX1YgKGZvciB2b2lk KSB0byBDRkxBR1MuIE9yIGp1c3QgaW5jbHVkZSBLRkxBR1M9LURTSUdfViAob3IKLSAgIHdoYXRl dmVyKSBpbiB5b3VyICJtYWtlIiBjb21tYW5kLCBmb3IgZXhhbXBsZToKLQotbWFrZSBic2QgS0ZM QUdTPS1EU0lHX1YKLQotICAgWW91IGdldCBtYW55IG1lc3NhZ2VzIGFib3V0IHZhcmlhYmxlcyB0 aGF0IGFyZSBkZWNsYXJlZCBhbmQvb3Igc2V0IGJ1dAotICAgbmV2ZXIgdXNlZC4gSXQgaXMgZGlm ZmljdWx0IHRvIGF2b2lkIHRoZXNlIGJlY2F1c2Ugb2YgYWxsIHRoZQotICAgY29uZGl0aW9uYWwg Y29tcGlsYXRpb24gaW4gdGhlIHByb2dyYW0uIElnbm9yZSB0aGVzZSBtZXNzYWdlcy4KLQotICAg U29tZSBvZiBDLUtlcm1pdCdzIG1vZHVsZXMgYXJlIHNvIGxhcmdlLCBvciBjb250YWluIHNvIG1h bnkgY2hhcmFjdGVyCi0gICBzdHJpbmcgY29uc3RhbnRzLCBvciBhcmUgc28gb2ZmZW5zaXZlIGlu IHNvbWUgb3RoZXIgd2F5LCB0aGF0IHNvbWUgQwotICAgY29tcGlsZXJzIGdpdmUgdXAgYW5kIHJl ZnVzZSB0byBjb21waWxlIHRoZW0uIFRoaXMgaXMgdXN1YWxseSBiZWNhdXNlCi0gICB0aGUgLU8g KG9wdGltaXplKSBvcHRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIG1ha2UgZW50cnkuIElmIHRoaXMg aGFwcGVucwotICAgdG8geW91LCB5b3UgY2FuIChhKSByZW1vdmUgdGhlIC1PIG9wdGlvbiBmcm9t IHRoZSBtYWtlIGVudHJ5LCB3aGljaAotICAgd2lsbCB0dXJuIG9mZiB0aGUgb3B0aW1pemVyIGZv ciBBTEwgbW9kdWxlczsgb3IgKGIpIGNvbXBpbGUgdGhlCi0gICBvZmZlbmRpbmcgbW9kdWxlKHMp IGJ5IGhhbmQsIGluY2x1ZGluZyBhbGwgdGhlIHN3aXRjaGVzIGZyb20gbWFrZSBlbnRyeQotICAg ZXhjZXB0IGZvciAtTywgYW5kIHRoZW4gZ2l2ZSB0aGUgYXBwcm9wcmlhdGUgIm1ha2UiIGNvbW1h bmQgYWdhaW47IG9yCi0gICAoYykgaW5jcmVhc2UgdGhlIHZhbHVlIG9mIHRoZSAtT2xpbWl0IG9w dGlvbiwgaWYgeW91ciBjb21waWxlciBzdXBwb3J0cwotICAgdGhpcyBvcHRpb247IG9yIChkKSBj aGFuZ2UgdGhlIFsxNjFdbWFrZWZpbGUgdGFyZ2V0IHRvIGZpcnN0IGNvbXBpbGUKLSAgIGVhY2gg b2ZmZW5kaW5nIG1vZHVsZSBleHBsaWNpdGx5IHdpdGhvdXQgb3B0aW1pemF0aW9uLCB0aGVuIGNv bXBpbGUgdGhlCi0gICBvdGhlcnMgbm9ybWFsbHkgKHdpdGggb3B0aW1pemF0aW9uKSwgZm9yIGV4 YW1wbGU6Ci0KLSNGb3J0dW5lIDMyOjE2LCBGb3I6UHJvIDIuMSAobW9zdGx5IGxpa2UgNC4xYnNk KQotZnQyMToKLSAgICAgICAgQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRm9y dHVuZSAzMjoxNiBGb3I6UHJvIDIuMS4uLicKLSAgICAgICAgJChNQUtFKSBja3V1c3guJChFWFQp ICJDRkxBR1M9IC1ETk9ERUJVRyAtREJTRDQgLURGVDIxIC1ETk9GSUxFSCBcCi0gICAgICAgIC1T WU0gODAwIFwgLUREWU5BTUlDIC1ETk9TRVRCVUYgLURDS19DVVJTRVMgJChLRkxBR1MpIC1EUElE X1Q9c2hvcnQiCi0gICAgICAgICQoTUFLRSkgY2t1eGxhLiQoRVhUKSAiQ0ZMQUdTPSAtRE5PREVC VUcgLURCU0Q0IC1ERlQyMSAtRE5PRklMRUggXAotICAgICAgICAtU1lNIDgwMCBcIC1ERFlOQU1J QyAtRE5PU0VUQlVGIC1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSAtRFBJRF9UPXNob3J0IgotICAgICAg ICAkKE1BS0UpIGNrdWRpYS4kKEVYVCkgIkNGTEFHUz0gLUROT0RFQlVHIC1EQlNENCAtREZUMjEg LUROT0ZJTEVIIFwKLSAgICAgICAgLVNZTSA4MDAgXCAtRERZTkFNSUMgLUROT1NFVEJVRiAtRENL X0NVUlNFUyAkKEtGTEFHUykgLURQSURfVD1zaG9ydCIKLSAgICAgICAgJChNQUtFKSB3ZXJtaXQg IkNGTEFHUz0gLU8gLUROT0RFQlVHIC1EQlNENCAtREZUMjEgLUROT0ZJTEVIIC1TWU0gODAwIFwK LSAgICAgICAgLUREWU5BTUlDIC1ETk9TRVRCVUYgLURDS19DVVJTRVMgJChLRkxBR1MpIC1EUElE X1Q9c2hvcnQiIFwKLSAgICAgICAgIkxOS0ZMQUdTPSAtbiAtcyIgIkxJQlM9IC1sY3Vyc2VzIC1s dGVybWNhcCAtbHYgLWxuZXQiCi0KLSAgIEFzIGFuIGV4dHJlbWUgZXhhbXBsZSwgc29tZSBjb21w aWxlcnMgKGUuZy4gZ2NjIG9uIHRoZSBERyBBVmlpT04pIGhhdmUKLSAgIGJlZW4ga25vd24gdG8g ZHVtcCBjb3JlIHdoZW4gdHJ5aW5nIHRvIGNvbXBpbGUgY2t3YXJ0LmMgd2l0aAotICAgb3B0aW1p emF0aW9uLiBTbyBqdXN0IGRvIHRoaXMgb25lICJieSBoYW5kIjoKLQotY2MgLW8gd2FydCBja3dh cnQuYwotCi0gICBvcjoKLQotdG91Y2ggY2tjcHJvLmMKLQotICAgYW5kIHRoZW4gZ2l2ZSB0aGUg Im1ha2UiIGNvbW1hbmQgYWdhaW4uCi0KLSAgIFNwZWFraW5nIG9mIHdhcnQsIGl0IGlzIHVuYXZv aWRhYmxlIHRoYXQgc29tZSBwaWNreSBjb21waWxlcnMgbWlnaHQKLSAgIGdlbmVyYXRlICJzdGF0 ZW1lbnQgdW5yZWFjaGFibGUiIG1lc3NhZ2VzIHdoZW4gY29tcGlsaW5nIGNrY3Byby5jLgotICAg VW5yZWFjaGFibGUgc3RhdGVtZW50cyBjYW4gYmUgZ2VuZXJhdGVkIGJ5IHRoZSB3YXJ0IHByb2dy YW0sIHdoaWNoCi0gICBnZW5lcmF0ZXMgY2tjcHJvLmMgYXV0b21hdGljYWxseSBmcm9tIFsxNjJd Y2tjcHJvLncsIHdoaWNoIHRyYW5zbGF0ZXMKLSAgIGxleC1saWtlIHN0YXRlL2lucHV0IGNvbnN0 cnVjdGlvbnMgaW50byBhIGJpZyBzd2l0Y2gvY2FzZSBjb25zdHJ1Y3Rpb24uCi0KLSAgIFNvbWUg ZnVuY3Rpb24gaW4gS2VybWl0IHdyZWFrcyBoYXZvYyB3aGVuIGl0IGlzIGNhbGxlZC4gQ2hhbmdl IGFsbAotICAgaW52b2NhdGlvbnMgb2YgdGhlIGZ1bmN0aW9uIGludG8gYSBtYWNybyB0aGF0IGV2 YWx1YXRlcyB0byB0aGUKLSAgIGFwcHJvcHJpYXRlIHJldHVybiBjb2RlIHRoYXQgd291bGQgaGF2 ZSBiZWVuIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbgotICAgaGFkIGl0IGJlZW4gY2FsbGVkIGFu ZCBmYWlsZWQsIGZvciBleGFtcGxlOiAtRHprc2VsZigpPTAuIE9idmlvdXNseSBub3QKLSAgIGEg Z29vZCBpZGVhIGlmIHRoZSBmdW5jdGlvbiBpcyByZWFsbHkgbmVlZGVkLgotCi0gICBJZiB5b3Ug aGF2ZSBqdXN0IGluc3RhbGxlZCBTdW5PUyA0LjEuMiBvciA0LjEuMywgeW91IG1pZ2h0IGZpbmQg dGhhdAotICAgQy1LZXJtaXQgKGFuZCBhbnkgb3RoZXIgQyBwcm9ncmFtKSBmYWlscyB0byBsaW5r IGJlY2F1c2Ugb2YgdW5yZXNvbHZlZAotICAgcmVmZXJlbmNlcyBmcm9tIHdpdGhpbiBsaWJjLiBU aGlzIGlzIGJlY2F1c2Ugb2YgYSBtaXN0YWtlIGluIFN1bidzCi0gICAvdXNyL2xpYi9zaGxpYi5l dGMgZmlsZXMgZm9yIGJ1aWxkaW5nIHRoZSBuZXcgbGliYy4gQ2hhbmdlIHRoZSBsaWJjCi0gICBN YWtlZmlsZSBzbyB0aGF0IHRoZSAibGQiIGxpbmVzIGhhdmUgIi1sZGwiIGF0IHRoZSBlbmQuIENo YW5nZSB0aGUKLSAgIFJFQURNRSBmaWxlIHRvIHNheSAibXYgeGNjcy5tdWx0aWJ5dGUuIHhjY3Mu bXVsdGlieXRlLm8iIGFuZCBmb2xsb3cKLSAgIHRoYXQgaW5zdHJ1Y3Rpb24uCi0KLTUuIElOU1RB TExJTkcgVEhFIEtFUk1JVCBGSUxFUwotCi0gICBbIFsxNjNdVG9wIF0gWyBbMTY0XUNvbnRlbnRz IF0gWyBbMTY1XU5leHQgXSBbIFsxNjZdUHJldmlvdXMgXQotCi0gICBTRUNUSU9OIENPTlRFTlRT Ci0KLTUuMS4gWzE2N11UaGUgQy1LZXJtaXQgSW5pdGlhbGl6YXRpb24gRmlsZQotNS4yLiBbMTY4 XVRleHQgRmlsZXMKLTUuMy4gWzE2OV1JbnN0YWxsaW5nIHRoZSBLZXJtaXQgRmlsZXMKLTUuNC4g WzE3MF1UaGUgTWFrZWZpbGUgSW5zdGFsbCBUYXJnZXQKLQotICAgVGhlIEMtS2VybWl0IGV4ZWN1 dGFibGUgZG9lcyBub3QgbmVlZCBhbnkgZXh0ZXJuYWwgZmlsZXMgdG8gcnVuLgotICAgVW5saWtl LCBzYXksIHRoZSBjdSBwcm9ncmFtLCB3aGljaCBvbiBtb3N0IHBsYXRmb3JtcyBpcyB1c2VsZXNz IHVubGVzcwotICAgeW91IChhcyByb290KSBlZGl0IHRoZSAvdXNyL3Nwb29sL3V1Y3AvU3lzdGVt cyBhbmQKLSAgIC91c3Ivc3Bvb2wvdXVjcC9EZXZpY2VzIGZpbGVzIHRvIHN1cHBseSB3aGF0ZXZl ciBvYnNjdXJlIGFuZAotICAgdW5kb2N1bWVudGVkIHN5bnRheCBpcyByZXF1aXJlZCB0byBtYXRj aCBzb21lIHN1cHBvc2VkbHkgdXNlci1mcmllbmRseQotICAgbW5lbW9uaWMgdG8gdGhlIHJlYWwg cGF0aG5hbWUgb2Ygd2hhdGV2ZXIgZGV2aWNlIHlvdSB3YW50IHRvIHVzZSwKLSAgIEtlcm1pdCBy dW5zIG9uIGl0cyBvd24gd2l0aG91dCBuZWVkaW5nIGFueSBleHRlcm5hbCBjb25maWd1cmF0aW9u Ci0gICBmaWxlcywgYW5kIGxldHMgeW91IHJlZmVyIHRvIGRldmljZSAoYW5kIG5ldHdvcmsgaG9z dHMgYW5kIHNlcnZpY2VzKSBieQotICAgdGhlaXIgb3duIG5hdHVyYWwgdW5kaXNndWlzZWQgbmFt ZXMuCi0KLSAgIE5ldmVydGhlbGVzcywgYSBudW1iZXIgb2YgZXh0ZXJuYWwgZmlsZXMgY2FuIGJl IGluc3RhbGxlZCBhbG9uZyB3aXRoCi0gICB0aGUgQy1LZXJtaXQgZXhlY3V0YWJsZSBpZiB5b3Ug d2lzaC4gVGhlc2UgaW5jbHVkZSBjb25maWd1cmF0aW9uIGFuZAotICAgY3VzdG9taXphdGlvbiBm aWxlcyB0aGF0IGFyZSByZWFkIGJ5IEtlcm1pdCBhcyB3ZWxsIGFzIGRvY3VtZW50YXRpb24KLSAg IGZpbGVzIHRvIGJlIHJlYWQgYnkgcGVvcGxlLiBBbGwgb2YgdGhpcyBtYXRlcmlhbCBpcyAoYSkg b3B0aW9uYWwsIGFuZAotICAgKGIpIGF2YWlsYWJsZSBvbiB0aGUgS2VybWl0IHdlYnNpdGU6Ci0K LVsxNzFdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LwotCi0gICBhbmQgdXN1YWxseSBp biBhIG1vcmUgcGxlYXNhbnQgZm9ybSwgcGVyaGFwcyBhbHNvIHdpdGggdXBkYXRlZCBjb250ZW50 LgotICAgU28gaWYgeW91ciBjb21wdXRlciBpcyBvbiB0aGUgSW50ZXJuZXQsIHRoZXJlIGlzIG5v IG5lZWQgdG8gaW5zdGFsbAotICAgYW55dGhpbmcgYnV0IHRoZSBLZXJtaXQgZXhlY3V0YWJsZSBp ZiB1c2VycyBrbm93IGhvdyB0byBmaW5kIHRoZSBLZXJtaXQKLSAgIHdlYnNpdGUgKGFuZCBpZiB0 aGV5IGRvbid0LCBLZXJtaXQncyAiaGVscCIgY29tbWFuZCB0ZWxscyB0aGVtKS4KLQotNS4xLiBU aGUgQy1LZXJtaXQgSW5pdGlhbGl6YXRpb24gRmlsZQotCi0gICBJbiBDLUtlcm1pdCA3LjAgYW5k IGVhcmxpZXIsIHRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBmaWxlIHdhcyBhIGtleQotICAg Qy1LZXJtaXQgY29tcG9uZW50IGJlY2F1c2U6Ci0KLSAgICBhLiBJdCAibG9hZGVkIiB0aGUgZGlh bGluZyBhbmQgbmV0d29yayBkaXJlY3Rvcmllcy4KLSAgICBiLiBJdCBkZWZpbmVkIGFsbCB0aGUg bWFjcm9zIGFuZCB2YXJpYWJsZXMgZm9yIHRoZSBzZXJ2aWNlcyBkaXJlY3RvcnkuCi0gICAgYy4g SXQgZGVmaW5lZCBtYWNyb3MgZm9yIHF1aWNrbHkgY2hhbmdpbmcgS2VybWl0J3MgZmlsZS10cmFu c2ZlcgotICAgICAgIHBlcmZvcm1hbmNlIHR1bmluZy4KLQotICAgVGhlIHN0YW5kYXJkIGluaXRp YWxpemF0aW9uIGZpbGUgaXMgcXVpdGUgbG9uZyAobW9yZSB0aGFuIDYwMCBsaW5lcykKLSAgIGFu ZCByZXF1aXJlcyBub3RpY2VhYmxlIHByb2Nlc3NpbmcgdGltZSAodGhlIHNsb3dlciB0aGUgY29t cHV0ZXIsIHRoZQotICAgbW9yZSBub3RpY2VhYmxlKSwgeWV0IGZldyBwZW9wbGUgYWN0dWFsbHkg dXNlIHRoZSBzZXJ2aWNlcyBkaXJlY3RvcnksCi0gICB3aG9zZSBkZWZpbml0aW9uIHRha2VzIHVw IG1vc3Qgb2YgaXRzIGJ1bGsuIE1lYW53aGlsZSwgaW4gQy1LZXJtaXQgOC4wLAotICAgbWFueSBv ZiB0aGUgcmVtYWluaW5nIGZ1bmN0aW9ucyBvZiB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24g ZmlsZSBhcmUKLSAgIG5vdyBidWlsdCBpbjsgZm9yIGV4YW1wbGUsIHRoZSBGQVNULCBDQVVUSU9V UywgYW5kIFJPQlVTVCBjb21tYW5kcy4KLQotICAgTW9yZSB0byB0aGUgcG9pbnQsIG1hbnkgb2Yg dGhlIHNldHRpbmdzIHRoYXQgY291bGQgYmUgbWFkZSBvbmx5IGluIHRoZQotICAgaW5pdGlhbGl6 YXRpb24gYW5kIGN1c3RvbWl6YXRpb24gZmlsZXMgY2FuIG5vdyBiZSBwaWNrZWQgdXAgZnJvbQot ICAgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGUgZmlyc3QgZ3JvdXAgaWRlbnRpZmllcyBpbml0 aWFsaXphdGlvbiBhbmQKLSAgIGRpcmVjdG9yeSBmaWxlczoKLQotICAgQ0tFUk1JVF9JTkkKLSAg ICAgICAgICBUaGUgcGF0aCBvZiB5b3VyIEtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlLCBpZiBh bnkuIFRoaXMKLSAgICAgICAgICBvdmVycmlkZXMgdGhlIGJ1aWx0LWluIHNlYXJjaCBmb3IgJEhP TUUvLmtlcm1yYy4KLQotICAgS19DSEFSU0VUCi0gICAgICAgICAgVGhlIGNoYXJhY3RlciBzZXQg dXNlZCBmb3IgZW5jb2RpbmcgbG9jYWwgdGV4dCBmaWxlcy4gRXF1aXZhbGVudAotICAgICAgICAg IHRvIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQuCi0KLSAgIEtfRElBTF9ESVJFQ1RPUlkKLSAgICAg ICAgICBUaGUgZnVsbCBwYXRobmFtZSBvZiBvbmUgb3IgbW9yZSBLZXJtaXQgZGlhbGluZyBkaXJl Y3RvcnkgZmlsZXMuCi0gICAgICAgICAgRXF1aXZhbGVudCB0byBTRVQgRElBTCBESVJFQ1RPUlku Ci0KLSAgIEtfTkVUX0RJUkVDVE9SWQotICAgICAgICAgIFRoZSBmdWxsIHBhdGhuYW1lIG9mIG9u ZSBvciBtb3JlIEtlcm1pdCBuZXR3b3JrIGRpcmVjdG9yeSBmaWxlcy4KLSAgICAgICAgICBFcXVp dmFsZW50IHRvIFNFVCBORVRXT1JLIERJUkVDVE9SWS4KLQotICAgS19JTkZPX0RJUkVDVE9SWQot ICAgS19JTkZPX0RJUgotICAgICAgICAgIFRoZSBmdWxsIHBhdGhuYW1lIG9mIGEgZGlyZWN0b3J5 IGNvbnRhaW5pbmcgS2VybWl0IChpZiBhbnkpCi0gICAgICAgICAgY29udGFpbmluZyBja3Vid3Iu dHh0IGFuZCBvdGhlciBLZXJtaXQgdGV4dCBmaWxlcy4gT3ZlcnJpZGVzCi0gICAgICAgICAgS2Vy bWl0J3MgYnVpbHQtaW4gc2VhcmNoIGZvciB0aGlzIGRpcmVjdG9yeS4KLQotICAgVGhlIG5leHQg Z3JvdXAgaXMgcmVsYXRlZCB0byBkaWFsaW5nIG1vZGVtczoKLQotICAgS19DT1VOVFJZQ09ERQot ICAgICAgICAgIFRoZSB0ZWxlcGhvbmljIG51bWVyaWMgY291bnRyeSBjb2RlIGZvciB0aGlzIGxv Y2F0aW9uLCBlLmcuIDEKLSAgICAgICAgICBmb3IgTm9ydGggQW1lcmljYSBvciAzOSBmb3IgSXRh bHkuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcwotICAgICAgICAgIG9uZSBiZSBzZXQgZm9y IGFsbCB1c2Vycywgc3lzdGVtLXdpZGUuIE5vdCBvbmx5IGlzIGl0IHVzZWQgdG8KLSAgICAgICAg ICBwcm9jZXNzIHBvcnRhYmxlLWZvcm1hdCBkaWFsaW5nIGRpcmVjdG9yeSBlbnRyaWVzLCBidXQg aXQgaXMKLSAgICAgICAgICBhbHNvIGNvbXBhcmVkIGFnYWluc3QgS2VybWl0J3MgYnVpbHQtaW4g bGlzdCBvZiAidG9uZSBjb3VudHJpZXMiCi0gICAgICAgICAgdG8gc2VlIGlmIHRvbmUgZGlhbGlu ZyBjYW4gYmUgdXNlZC4gRXF1aXZhbGVudCB0byBLZXJtaXQncyBTRVQKLSAgICAgICAgICBESUFM IENPVU5UUlktQ09ERSBjb21tYW5kLgotCi0gICBLX0FSRUFDT0RFCi0gICAgICAgICAgVGhlIHRl bGVwaG9uaWMgbnVtZXJpYyBhcmVhIGNvZGUgZm9yIHRoaXMgbG9jYXRpb24sIGUuZy4gMjEyIGZv cgotICAgICAgICAgIE1hbmhhdHRhbiwgTmV3IFlvcmssIFVTQS4gUmVjb21tZW5kIHRoaXMgb25l IGFsc28gYmUgc2V0Ci0gICAgICAgICAgc3lzdGVtLXdpZGUsIHNvIHNoYXJlZCBwb3J0YWJsZS1m b3JtYXQgZGlhbGluZyBkaXJlY3RvcmllcyB3aWxsCi0gICAgICAgICAgd29yayBhdXRvbWF0aWNh bGx5IGZvciBldmVyeWJvZHkuIEVxdWl2YWxlbnQgdG8gS2VybWl0J3MgU0VUCi0gICAgICAgICAg RElBTCBBUkVBLUNPREUgY29tbWFuZC4KLQotICAgS19ESUFMX01FVEhPRAotICAgICAgICAgIFRP TkUgb3IgUFVMU0UuIEVxdWl2YWxlbnQgdG8gS2VybWl0J3MgU0VUIERJQUwgTUVUSE9EIGNvbW1h bmQuCi0gICAgICAgICAgSWYgYSBkaWFsIG1ldGhvZCBpcyBub3Qgc2V0IGV4cGxpY2l0bHkgKG9y IGltcGxpY2l0bHkgZnJvbSB0aGUKLSAgICAgICAgICBjb3VudHJ5IGNvZGUpLCBLZXJtaXQgZG9l cyBub3Qgc3BlY2lmeSBhIGRpYWxpbmcgbWV0aG9kLCBhbmQKLSAgICAgICAgICB1c2VzIHRoZSBt b2RlbSdzIGRlZmF1bHQgbWV0aG9kLCB3aGljaCB0ZW5kcyB0byBiZSBwdWxzZS4KLQotICAgS19J TlRMX1BSRUZJWAotICAgICAgICAgIFRoZSB0ZWxlcGhvbmljIG51bWVyaWMgaW50ZXJuYXRpb25h bCBkaWFsaW5nIHByZWZpeCBmb3IgdGhpcwotICAgICAgICAgIGxvY2F0aW9uLiBFcXVpdmFsZW50 IHRvIEtlcm1pdCdzIFNFVCBESUFMIElOVEwtUFJFRklYIGNvbW1hbmQuCi0KLSAgIEtfTERfUFJF RklYCi0gICAgICAgICAgVGhlIHRlbGVwaG9uaWMgbnVtZXJpYyBsb25nLWRpc3RhbmNlIGRpYWxp bmcgcHJlZml4IGZvciB0aGlzCi0gICAgICAgICAgbG9jYXRpb24uIEVxdWl2YWxlbnQgdG8gS2Vy bWl0J3MgU0VUIERJQUwgTEQtUFJFRklYIGNvbW1hbmQuCi0KLSAgIEtfUEJYX0lDUAotICAgICAg ICAgIFRoZSB0ZWxlcGhvbmljIG51bWVyaWMgUEJYIGludGVybmFsIGNhbGwgcHJlZml4IGZvciB0 aGlzCi0gICAgICAgICAgbG9jYXRpb24uIEVxdWl2YWxlbnQgdG8gS2VybWl0J3MgU0VUIERJQUwg UEJYLUlOU0lERS1QUkVGSVgKLSAgICAgICAgICBjb21tYW5kLgotCi0gICBLX1BCWF9PQ1AKLSAg ICAgICAgICBUaGUgdGVsZXBob25pYyBudW1lcmljIFBCWCBleHRlcm5hbCBjYWxsIHByZWZpeCBm b3IgdGhpcwotICAgICAgICAgIGxvY2F0aW9uLiBFcXVpdmFsZW50IHRvIEtlcm1pdCdzIFNFVCBE SUFMIFBCWC1PVVRTSURFLVBSRUZJWAotICAgICAgICAgIGNvbW1hbmQuCi0KLSAgIEtfUEJYX1hD SAotICAgICAgICAgIFRoZSB0ZWxlcGhvbmljIG51bWVyaWMgUEJYIGV4Y2hhbmdlIChmaXJzdCBw YXJ0IG9mIHRoZQotICAgICAgICAgIHN1YnNjcmliZXIgbnVtYmVyKS4gRXF1aXZhbGVudCB0byBL ZXJtaXQncyBTRVQgRElBTCBQQlgtRVhDSEFOR0UKLSAgICAgICAgICBjb21tYW5kLgotCi0gICBL X1RGX0FSRUFDT0RFCi0gICAgICAgICAgQSBsaXN0IG9mIG9uZSBvciBtb3JlIHRlbGVwaG9uaWMg bnVtZXJpYyB0b2xsLWZyZWUgYXJlYSBjb2Rlcy4KLQotICAgS19URl9QUkVGSVgKLSAgICAgICAg ICBUaGUgdGVsZXBob25pYyBudW1lcmljIHRvbGwtZnJlZSBkaWFsaW5nIHByZWZpeCwgaW4gY2Fz ZSBpdCBpcwotICAgICAgICAgIGRpZmZlcmVudCBmcm9tIHRoZSBsb25nLWRpc3RhbmNlIHByZWZp eC4gRXF1aXZhbGVudCB0byBLZXJtaXQncwotICAgICAgICAgIFNFVCBESUFMIFRGLVBSRUZJWCBj b21tYW5kLgotCi0gICBUaGUgZmluYWwgZ3JvdXAgaW5jbHVkZXMgd2VsbC1rbm93biBlbnZpcm9u bWVudCB2YXJpYWJsZXMgdGhhdCBhcmUgYWxzbwotICAgdXNlZCBieSBLZXJtaXQ6Ci0KLSAgIENE UEFUSAotICAgICAgICAgIFdoZXJlIHRoZSBDRCBjb21tYW5kIHNob3VsZCBsb29rIGZvciByZWxh dGl2ZSBkaXJlY3RvcnkgbmFtZXMuCi0KLSAgIFNIRUxMCi0gICAgICAgICAgVGhlIHBhdGggb2Yg eW91ciBVbml4IHNoZWxsLiBVc2VkIGJ5IHRoZSBSVU4gKCEpIGNvbW1hbmQgdG8KLSAgICAgICAg ICBjaG9vc2UgdGhlIHNoZWxsIHRvIGV4ZWN1dGUgaXRzIGFyZ3VtZW50cy4KLQotICAgVVNFUgot ICAgICAgICAgIFlvdXIgVW5peCB1c2VybmFtZS4KLQotICAgRURJVE9SCi0gICAgICAgICAgVGhl IG5hbWUgb3IgcGF0aCBvZiB5b3VyIHByZWZlcnJlZCBlZGl0b3IgKHVzZWQgYnkgdGhlIEVESVQK LSAgICAgICAgICBjb21tYW5kKS4gRXF1aXZhbGVudCB0byBTRVQgRURJVE9SLgotCi0gICBCUk9X U0VSCi0gICAgICAgICAgVGhlIG5hbWUgb3IgcGF0aCBvZiB5b3VyIHByZWZlcnJlZCB3ZWIgYnJv d3NlciAodXNlZCBieSB0aGUKLSAgICAgICAgICBCUk9XU0UgY29tbWFuZCkuIEVxdWl2YWxlbnQg dG8gS2VybWl0J3MgU0VUIEJST1dTRVIgY29tbWFuZC4KLQotICAgRG9lcyB0aGlzIG1lYW4gdGhl IGluaXRpYWxpemF0aW9uIGZpbGUgY2FuIGJlIGFib2xpc2hlZD8gSSB0aGluayBzby4KLSAgIEhl cmUncyB3aHk6Ci0KLSAgICAgKiBLZXJtaXQgYWxyZWFkeSBkb2VzIGV2ZXJ5dGhpbmcgbW9zdCBw ZW9wbGUgd2FudCBpdCB0byBkbyB3aXRob3V0Ci0gICAgICAgb25lLgotICAgICAqIEltcG9ydGFu dCBzaXRlLXNwZWNpZmljIGN1c3RvbWl6YXRpb25zIGNhbiBiZSBkb25lIHdpdGggZ2xvYmFsCi0g ICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzLgotICAgICAqIFRoZXJlIGlzIG5vIGxvbmdlciBh bnkgbmVlZCBmb3IgZXZlcnlib2R5IHRvIGhhdmUgdG8gdXNlIHRoZQotICAgICAgIHN0YW5kYXJk IGluaXRpYWxpemF0aW9uIGZpbGUuCi0gICAgICogVGhpcyBtZWFucyB0aGF0IHlvdXIgaW5pdGlh bGl6YXRpb24gZmlsZSwgaWYgeW91IHdhbnQgb25lLCBjYW4KLSAgICAgICBjb250YWluIHlvdXIg b3duIHBlcnNvbmFsIHNldHRpbmdzLCBkZWZpbml0aW9ucywgYW5kIHByZWZlcmVuY2VzLAotICAg ICAgIHJhdGhlciB0aGFuIDYwMCBsaW5lcyBvZiAic3RhbmRhcmQiIHNldHVwcy4KLSAgICAgKiBJ ZiB5b3Ugc3RpbGwgd2FudCB0aGUgc2VydmljZXMgZGlyZWN0b3J5LCB5b3UgY2FuIGVpdGhlciBU QUtFIHRoZQotICAgICAgIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIGZpbGUgKHdoaWNoIG11c3Qg YmUgbmFtZWQgYW55dGhpbmcgb3RoZXIKLSAgICAgICB0aGFuICRIT01FLy5rZXJtcmMgdG8gYXZv aWQgYmVpbmcgZXhlY3V0ZWQgYXV0b21hdGljYWxseSBldmVyeSB0aW1lCi0gICAgICAgeW91IHN0 YXJ0IEtlcm1pdCksIG9yIHlvdSBjYW4gbWFrZSBpdCBhIGtlcmJhbmcgc2NyaXB0IGFuZCBleGVj dXRlCi0gICAgICAgaXQgImRpcmVjdGx5IiAodGhlIFsxNzJdbWFrZWZpbGUgaW5zdGFsbCB0YXJn ZXQgZG9lcyB0aGlzIGZvciB5b3UKLSAgICAgICBieSBwdXR0aW5nIGNrZXJtaXQuaW5pIGluIHRo ZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgS2VybWl0IGJpbmFyeSwKLSAgICAgICBhZGRpbmcgdGhl IGFwcHJvcHJpYXRlIEtlcmJhbmcgbGluZSB0byB0aGUgdG9wLCBhbmQgZ2l2aW5nIGl0Ci0gICAg ICAgZXhlY3V0ZSBwZXJtaXNzaW9uKS4KLQotICAgSW4gZmFjdCwgeW91IGNhbiBwdXQgYW55IG51 bWJlciBvZiBrZXJiYW5nIHNjcmlwdHMgaW4geW91ciBQQVRIIHRvCi0gICBzdGFydCB1cCBDLUtl cm1pdCBpbiBkaWZmZXJlbnQgd2F5cywgdG8gaGF2ZSBpdCBhZG9wdCBjZXJ0YWluIHNldHRpbmdz LAotICAgbWFrZSBwYXJ0aWN1bGFyIGNvbm5lY3Rpb25zLCBleGVjdXRlIGNvbXBsaWNhdGVkIHNj cmlwdHMsIHdoYXRldmVyIHlvdQotICAgd2FudC4KLQotICAgQW5kIGluIEMtS2VybWl0IDkuMCB0 aGUgaW5pdGlhbGl6YXRpb24gaGFzIGluZGVlZCBiZWVuICJyZXRpcmVkIiBieQotICAgcmVuYW1p bmcgaXQgdG8gb2tlcm1pdC5pbmksIGFuZCByZXBsYWNlZCBieSBhIHN0dWIgY2tlcm1pdC5pbmkg dGhhdAotICAgZG9lc24ndCBkbyBhbnl0aGluZyBidXQgcHJpbnQgYSBtZXNzYWdlLiBEaXR0byBm b3IgY2tlcm1vZC5pbmkuCi0KLTUuMi4gVGV4dCBGaWxlcwotCi0gICBUaGVzZSBhcmUgZW50aXJl bHkgb3B0aW9uYWwuIE1hbnkgb2YgdGhlbSBhcmUgdG8gYmUgZm91bmQgYXQgdGhlIEtlcm1pdAot ICAgd2Vic2l0ZSBpbiBIVE1MIGZvcm0gKGkuZS4gYXMgV2ViIHBhZ2VzIHdpdGggY2xpY2thYmxl IGxpbmtzLCBldGMpLCBhbmQKLSAgIHZlcnkgbGlrZWx5IGFsc28gbW9yZSB1cCB0byBkYXRlLiBQ bGFpbi10ZXh0IGZpbGVzIHRoYXQgY29ycmVzcG9uZCB0bwotICAgV2ViIHBhZ2VzIHdlcmUgc2lt cGx5ICJkdW1wZWQiIGJ5IEx5bnggZnJvbSB0aGUgd2Vic2l0ZSB0byBwbGFpbiBBU0NJSQotICAg dGV4dC4gVGhlIGZvcm1hdCBpcyB3aGF0ZXZlciBMeW54IHVzZXMgZm9yIHRoaXMgcHVycG9zZS4g SWYgeW91IHdpc2gsCi0gICB5b3UgY2FuIGluc3RhbGwgdGhlbSBvbiB5b3VyIGNvbXB1dGVyIGFz IGRlc2NyaWJlZCBpbiB0aGUgWzE3M11uZXh0Ci0gICBzZWN0aW9uLgotCi0gICBbMTc0XUNPUFlJ TkcuVFhUCi0gICAgICAgICAgQ29weXJpZ2h0IG5vdGljZSwgcGVybWlzc2lvbnMsIGFuZCBkaXNj bGFpbWVyLgotCi0gICBbMTc1XWNrZXJtaXQuaW5pCi0gICAgICAgICAgVGhlIHN0YW5kYXJkIGlu aXRpYWxpemF0aW9uIGZpbGUsIGludGVuZGVkIG1vcmUgZm9yIHJlZmVyZW5jZQotICAgICAgICAg IChpbiBtb3N0IGNhc2VzKSB0aGFuIGFjdHVhbCB1c2U7IHNlZSBbMTc2XVNlY3Rpb24gNS4xLgot Ci0gICBbMTc3XWNrZXJtb2QuaW5pCi0gICAgICAgICAgQSBzYW1wbGUgY3VzdG9taXphdGlvbiBm aWxlLgotCi0gICBbMTc4XWNrZXJtaXQ3MC50eHQKLSAgICAgICAgICBTdXBwbGVtZW50IHRvIFsx NzldVXNpbmcgQy1LZXJtaXQgZm9yIHZlcnNpb24gNy4wLiBBdmFpbGFibGUgb24KLSAgICAgICAg ICB0aGUgS2VybWl0IHdlYnNpdGUgYXM6Ci0gICAgICAgICAgWzE4MF1odHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwKLQotICAgWzE4MV1ja2VybWl0ODAudHh0Ci0g ICAgICAgICAgU3VwcGxlbWVudCB0byBbMTgyXVVzaW5nIEMtS2VybWl0IGZvciB2ZXJzaW9uIDgu MC4gQXZhaWxhYmxlIG9uCi0gICAgICAgICAgdGhlIEtlcm1pdCB3ZWJzaXRlIGFzOgotICAgICAg ICAgIFsxODNdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sCi0K LSAgIFsxODRdY2tlcm1pdDkwLnR4dAotICAgICAgICAgIFN1cHBsZW1lbnQgdG8gWzE4NV1Vc2lu ZyBDLUtlcm1pdCBmb3IgdmVyc2lvbiA5LjAuIEF2YWlsYWJsZSBvbgotICAgICAgICAgIHRoZSBL ZXJtaXQgd2Vic2l0ZSBhczoKLSAgICAgICAgICBbMTg2XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0OTAuaHRtbAotCi0gICBbMTg3XWNrY2J3ci50eHQKLSAgICAgICAgICBU aGUgZ2VuZXJhbCBDLUtlcm1pdCBoaW50cyBhbmQgdGlwcyAoImJld2FyZSIpIGZpbGUuIEF2YWls YWJsZQotICAgICAgICAgIG9uIHRoZSBLZXJtaXQgd2Vic2l0ZSBhczoKLSAgICAgICAgICBbMTg4 XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbAotCi0gICBbMTg5XWNr dWJ3ci50eHQKLSAgICAgICAgICBUaGUgVW5peC1zcGVjaWZpYyBDLUtlcm1pdCBoaW50cyBhbmQg dGlwcyBmaWxlLiBBdmFpbGFibGUgb24gdGhlCi0gICAgICAgICAgS2VybWl0IHdlYnNpdGUgYXM6 Ci0gICAgICAgICAgWzE5MF1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwKLQotICAgWzE5MV1ja3VpbnMudHh0Ci0gICAgICAgICAgVW5peCBDLUtlcm1pdCBJbnN0YWxs YXRpb24gSW5zdHJ1Y3Rpb25zICh0aGlzIGZpbGUpLiBBdmFpbGFibGUKLSAgICAgICAgICBvbiB0 aGUgS2VybWl0IHdlYnNpdGUgYXM6Ci0gICAgICAgICAgWzE5Ml1odHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKLQotICAgWzE5M11ja2NjZmcudHh0Ci0gICAgICAgICAg Qy1LZXJtaXQgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQXZhaWxhYmxlIG9u IHRoZQotICAgICAgICAgIEtlcm1pdCB3ZWJzaXRlIGFzOgotICAgICAgICAgIFsxOTRdaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sCi0KLSAgIFsxOTVdY2tjcGxtLnR4 dAotICAgICAgICAgIFRoZSBDLUtlcm1pdCBwcm9ncmFtIGxvZ2ljIG1hbnVhbC4gQXZhaWxhYmxl IG9uIHRoZSBLZXJtaXQKLSAgICAgICAgICB3ZWJzaXRlIGFzOgotICAgICAgICAgIFsxOTZdaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sCi0KLSAgIFsxOTddY2FfY2Vy dHMucGVtCi0gICAgICAgICAgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IGNlcnRpZmljYXRlcyBmb3Ig c2VjdXJlIGNvbm5lY3Rpb25zIChzZWUKLSAgICAgICAgICBbMTk4XVNlY3Rpb24gMTYpLgotCi01 LjMuIEluc3RhbGxpbmcgdGhlIEtlcm1pdCBGaWxlcwotCi0gICBUaGVyZSBpcyBhbiAiaW5zdGFs bCIgdGFyZ2V0IGluIHRoZSBbMTk5XW1ha2VmaWxlIHRoYXQgeW91IGNhbiB1c2UgaWYKLSAgIHlv dSB3aXNoLiBIb3dldmVyLCBzaW5jZSBldmVyeSBzaXRlIGhhcyBpdHMgb3duIGxheW91dCBhbmQK LSAgIHJlcXVpcmVtZW50cywgaXQgaXMgb2Z0ZW4gYmV0dGVyIHRvIGluc3RhbGwgdGhlIEtlcm1p dCBmaWxlcyBieSBoYW5kLgotICAgWW91IGRvbid0IGhhdmUgdG8gdXNlIHRoZSBtYWtlZmlsZSBp bnN0YWxsIHRhcmdldCB0byBpbnN0YWxsIEMtS2VybWl0LgotICAgVGhpcyBpcyBlc3BlY2lhbGx5 IHRydWUgc2luY2Ugbm90IGFsbCBzaXRlcyBidWlsZCBDLUtlcm1pdCBmcm9tIHNvdXJjZSwKLSAg IGFuZCB0aGVyZWZvcmUgbWlnaHQgbm90IGV2ZW4gaGF2ZSB0aGUgbWFrZWZpbGUuIEJ1dCB5b3Ug c2hvdWxkIHJlYWQKLSAgIHRoaXMgc2VjdGlvbiBpbiBhbnkgY2FzZS4KLQotICAgICBJZiB5b3Vy IGNvbXB1dGVyIGFscmVhZHkgaGFzIGFuIG9sZGVyIHZlcnNpb24gb2YgQy1LZXJtaXQgaW5zdGFs bGVkLAotICAgICB5b3Ugc2hvdWxkIHJlbmFtZSBpdCAoZS5nLiB0byAia2VybWl0NiIgb3IgImtl cm1pdDciKSBzbyBpbiBjYXNlIHlvdQotICAgICBoYXZlIGFueSB0cm91YmxlIHdpdGggdGhlIG5l dyB2ZXJzaW9uLCB0aGUgb2xkIG9uZSBpcyBzdGlsbAotICAgICBhdmFpbGFibGUuCi0KLSAgIElu IG1vc3QgY2FzZXMsIHlvdSBuZWVkIHRvIGJlIHJvb3QgdG8gaW5zdGFsbCBDLUtlcm1pdCwgaWYg b25seSB0byBnYWluCi0gICB3cml0ZSBhY2Nlc3MgdG8gZGlyZWN0b3JpZXMgaW4gd2hpY2ggdGhl IGJpbmFyeSBhbmQgbWFudWFsIHBhZ2UgYXJlIHRvCi0gICBiZSBjb3BpZWQuIFRoZSBDLUtlcm1p dCBiaW5hcnkgc2hvdWxkIGJlIGluc3RhbGxlZCBpbiBhIGRpcmVjdG9yeSB0aGF0Ci0gICBpcyBp biB0aGUgdXNlcnMnIFBBVEgsIGJ1dCB0aGF0IGlzIG5vdCBsaWtlbHkgdG8gYmUgb3ZlcndyaXR0 ZW4gd2hlbgotICAgeW91IGluc3RhbGwgYSBuZXcgdmVyc2lvbiBvZiB0aGUgb3BlcmF0aW5nIHN5 c3RlbS4gQSBnb29kIGNhbmRpZGF0ZQotICAgd291bGQgYmUgdGhlIC91c3IvbG9jYWwvYmluLyBk aXJlY3RvcnksIGJ1dCB0aGUgc3BlY2lmaWMgY2hvaWNlIGlzIHNpdGUKLSAgIGRlcGVuZGVudC4g RXhhbXBsZSAoYXNzdW1pbmcgdGhlIGFwcHJvcHJpYXRlIEtlcm1pdCBiaW5hcnkgaXMgc3RvcmVk IGluCi0gICB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5IGFzICJ3ZXJtaXQiLCBlLmcuIGJlY2F1c2Ug eW91IGp1c3QgYnVpbHQgaXQgZnJvbQotICAgc291cmNlIGFuZCB0aGF0J3MgdGhlIG5hbWUgdGhl IG1ha2VmaWxlIGdhdmUgaXQpOgotCi1tdiB3ZXJtaXQgL3Vzci9sb2NhbC9iaW4va2VybWl0Ci1j aG1vZCA3NTUgL3Vzci9sb2NhbC9iaW4va2VybWl0Ci0KLSAgIG9yIChvbmx5IGFmdGVyIHlvdSBm aW5pc2ggcmVhZGluZyB0aGlzIHNlY3Rpb24hKSBzaW1wbHk6Ci0KLW1ha2UgaW5zdGFsbAotCi0g ICBJTVBPUlRBTlQ6IElGIEMtS0VSTUlUIElTIFRPIEJFIFVTRUQgRk9SIERJQUxJTkcgT1VULCB5 b3UgbXVzdCBhbHNvIGRvCi0gICBzb21ldGhpbmcgdG8gZ2l2ZSBpdCBhY2Nlc3MgdG8gdGhlIGRp YWxvdXQgZGV2aWNlcyBhbmQgbG9ja2ZpbGUKLSAgIGRpcmVjdG9yaWVzLiBUaGUgJ2luc3RhbGwn IHRhcmdldCBkb2VzIG5vdCBhdHRlbXB0IHRvIHNldCBLZXJtaXQncwotICAgb3duZXIsIGdyb3Vw LCBhbmQgcGVybWlzc2lvbnMgdG8gYWxsb3cgZGlhbGluZyBvdXQuIFRoaXMgcmVxdWlyZXMKLSAg IHByaXZpbGVnZXMsIG9wZW4gZXllcywgYW5kIGh1bWFuIGRlY2lzaW9uLW1ha2luZy4gUGxlYXNl IHJlYWQKLSAgIFsyMDBdU2VjdGlvbnMgMTAgYW5kIFsyMDFdMTEgYmVsb3csIG1ha2UgdGhlIG5l Y2Vzc2FyeSBkZWNpc2lvbnMsIGFuZAotICAgdGhlbiBpbXBsZW1lbnQgdGhlbSBieSBoYW5kIGFz IGRlc2NyaWJlZCBpbiB0aG9zZSBzZWN0aW9ucy4KLQotICAgWW91IHNob3VsZCBhbHNvIGluc3Rh bGwgdGhlIG1hbiBwYWdlLCB3aGljaCBpcyBjYWxsZWQgY2t1a2VyLm5yLCBpbiB0aGUKLSAgIG1h biBwYWdlIGRpcmVjdG9yeSBmb3IgbG9jYWwgY29tbWFuZHMsIHN1Y2ggYXMgL3Vzci9tYW4vbWFu MS8sIHJlbmFtZWQKLSAgIGFwcHJvcHJpYXRlbHksIGUuZy4gdG8ga2VybWl0LjEuIFRoaXMgaXMg YWxzbyB0YWtlbiBjYXJlIG9mIGJ5ICJtYWtlCi0gICBpbnN0YWxsIi4KLQotICAgT3B0aW9uYWxs eSwgdGhlIHRleHQgZmlsZXMgbGlzdGVkIGluIHRoZSBbMjAyXXByZXZpb3VzIHNlY3Rpb24gY2Fu IGJlCi0gICBwbGFjZWQgaW4gYSBwdWJsaWNseSByZWFkYWJsZSBkaXJlY3RvcnkuIFN1Z2dlc3Rl ZCBkaXJlY3RvcnkgbmFtZXMgYXJlOgotCi0vdXNyL2xvY2FsL2RvYy9rZXJtaXQvCi0vdXNyL2xv Y2FsL2xpYi9rZXJtaXQvCi0vdXNyL3NoYXJlL2xpYi9rZXJtaXQvCi0vb3B0L2tlcm1pdC9kb2Mv Ci0KLSAgIChvciBhbnkgb2YgdGhlc2Ugd2l0aG91dCB0aGUgIi9rZXJtaXQiKS4gVXBvbiBzdGFy dHVwLCBDLUtlcm1pdCBjaGVja3MKLSAgIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFi bGVzIHdob3NlIHB1cnBvc2UgaXMgdG8gc3BlY2lmeSB0aGUKLSAgIGRpcmVjdG9yeSB3aGVyZSB0 aGUgQy1LZXJtaXQgdGV4dCBmaWxlcyBhcmUsIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6Ci0KLUtf SU5GT19ESVJFQ1RPUlkKLUtfSU5GT19ESVIKLQotICAgSWYgZWl0aGVyIG9mIHRoZXNlIGlzIGRl ZmluZWQsIEMtS2VybWl0IGNoZWNrcyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUKLSAgIGNrdWJ3 ci50eHQgZmlsZSAoVW5peCBDLUtlcm1pdCBIaW50cyBhbmQgVGlwcykuIElmIG5vdCBmb3VuZCwg aXQgY2hlY2tzCi0gICB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGFib3ZlIChib3RoIHdpdGggYW5k IHdpdGhvdXQgdGhlICIva2VybWl0IikgcGx1cwotICAgc2V2ZXJhbCBvdGhlcnMgdG8gc2VlIGlm IHRoZXkgY29udGFpbiB0aGUgY2t1YndyLnR4dCBmaWxlLiBJZiBmb3VuZCwKLSAgIHZhcmlvdXMg Qy1LZXJtaXQgbWVzc2FnZXMgY2FuIHJlZmVyIHRoZSB1c2VyIHRvIHRoaXMgZGlyZWN0b3J5Lgot Ci0gICBGaW5hbGx5LCBpZiB5b3Ugd2FudCB0byBwdXQgdGhlIHNvdXJjZSBjb2RlIGZpbGVzIHNv bWV3aGVyZSBmb3IgcGVvcGxlCi0gICB0byBsb29rIGF0LCB5b3UgY2FuIGRvIHRoYXQgdG9vLgot Ci01LjQuIFRoZSBNYWtlZmlsZSBJbnN0YWxsIFRhcmdldAotCi0gICBUaGUgbWFrZWZpbGUgImlu c3RhbGwiIHRhcmdldCBkb2VzIGFsbW9zdCBldmVyeXRoaW5nIGZvciB5b3UgaWYgeW91Ci0gICBn aXZlIGl0IHRoZSBpbmZvcm1hdGlvbiBpdCBuZWVkcyBieSBzZXR0aW5nIHRoZSB2YXJpYWJsZXMg ZGVzY3JpYmVkCi0gICBiZWxvdy4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgaWY6Ci0KLSAgICAg KiBZb3UgZG93bmxvYWRlZCB0aGUgWzIwM11jb21wbGV0ZSBDLUtlcm1pdCBhcmNoaXZlIGFuZCBi dWlsdAotICAgICAgIEMtS2VybWl0IGZyb20gc291cmNlOyBvcjoKLSAgICAgKiBZb3UgZG93bmxv YWRlZCBhbiBbMjA0XWluZGl2aWR1YWwgQy1LZXJtaXQgYmluYXJ5IGFuZCB0aGUKLSAgICAgICBb MjA1XUMtS2VybWl0IHRleHQtZmlsZSBhcmNoaXZlLCBhbmQgeW91ciBjb21wdXRlciBoYXMgYSAi bWFrZSIKLSAgICAgICBjb21tYW5kLgotCi0gICBIZXJlIGFyZSB0aGUgcGFyYW1ldGVycyB5b3Ug bmVlZCB0byBrbm93OgotCi0gICBCSU5BUlkKLSAgICAgICAgICBOYW1lIG9mIHRoZSBiaW5hcnkg eW91IHdhbnQgdG8gaW5zdGFsbCBhcyAia2VybWl0Ii4gRGVmYXVsdDoKLSAgICAgICAgICAid2Vy bWl0Ii4KLQotICAgcHJlZml4Ci0gICAgICAgICAgKGxvd2VyIGNhc2UpIElmIHlvdSBkZWZpbmUg dGhpcyB2YXJpYWJsZSwgaXRzIHZhbHVlIGlzIHByZXBlbmRlZAotICAgICAgICAgIHRvIGFsbCB0 aGUgZm9sbG93aW5nIHh4eERJUiB2YXJpYWJsZXMgKDguMC4yMTEgYW5kIGxhdGVyKS4KLQotICAg REVTVERJUgotICAgICAgICAgIElmIHlvdSB3YW50IHRvIGluc3RhbGwgdGhlIEtlcm1pdCBmaWxl cyBpbiBhIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKLSAgICAgICAgICBsaWtlIC9vcHQva2VybWl0L2Jp bi8sIC9vcHQva2VybWl0L2RvYy8sIC9vcHQva2VybWl0L3NyYy8sIHRoZW4KLSAgICAgICAgICBk ZWZpbmUgREVTVElSIGFzIHRoZSByb290IG9mIHRoaXMgc3RydWN0dXJlOyBmb3IgZXhhbXBsZSwK LSAgICAgICAgICAvb3B0L2tlcm1pdC4gVGhlIERFU1RESVIgc3RyaW5nIHNob3VsZCBub3QgZW5k IHdpdGggYSBzbGFzaC4gQnkKLSAgICAgICAgICBkZWZhdWx0LCBERVNURElSIGlzIG5vdCBkZWZp bmVkLiBJZiBpdCBpcyBkZWZpbmVkLCBidXQgdGhlCi0gICAgICAgICAgZGlyZWN0b3J5IGRvZXMg bm90IGV4aXN0LCB0aGUgbWFrZWZpbGUgYXR0ZW1wdHMgdG8gY3JlYXRlIGl0LAotICAgICAgICAg IHdoaWNoIG1pZ2h0IHJlcXVpcmUgeW91IHRvIGJlIHJvb3QuIEV2ZW4gc28sIHRoaXMgY2FuIGZh aWwgaWYKLSAgICAgICAgICBhbnkgc2VnbWVudHMgaW4gdGhlIHBhdGggZXhjZXB0IHRoZSBsYXN0 IG9uZSBkbyBub3QgYWxyZWFkeQotICAgICAgICAgIGV4aXN0LiBXQVJOSU5HOiBJZiB0aGUgbWFr ZWZpbGUgY3JlYXRlcyBhbnkgZGlyZWN0b3JpZXMsIGl0Ci0gICAgICAgICAgZ2l2ZXMgdGhlbSBh IG1vZGUgb2YgNzU1LCBhbmQgdGhlIGRlZmF1bHQgb3duZXIgYW5kIGdyb3VwLgotICAgICAgICAg IE1vZGlmeSB0aGVzZSBieSBoYW5kIGlmIG5lY2Vzc2FyeS4KLQotICAgQklORElSCi0gICAgICAg ICAgRGlyZWN0b3J5IGluIHdoaWNoIHRvIGluc3RhbGwgdGhlIEtlcm1pdCBiaW5hcnkgKGFuZCB0 aGUKLSAgICAgICAgICBzdGFuZGFyZCBDLUtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlLCBpZiBp dCBpcyBmb3VuZCwgYXMgYQotICAgICAgICAgIEtlcmJhbmcgc2NyaXB0KS4gSWYgREVTVERJUiBp cyBkZWZpbmVkLCBCSU5ESVIgbXVzdCBzdGFydCB3aXRoIGEKLSAgICAgICAgICBzbGFzaC4gQklO RElSIG11c3Qgbm90IGVuZCB3aXRoIGEgc2xhc2guIElmIERFU1RESVIgaXMgZGVmaW5lZCwKLSAg ICAgICAgICBCSU5ESVIgaXMgYSBzdWJkaXJlY3Rvcnkgb2YgREVTVERJUi4gSWYgQklORElSIGRv ZXMgbm90IGV4aXN0LAotICAgICAgICAgIHRoZSBtYWtlZmlsZSBhdHRlbXB0cyB0byBjcmVhdGUg aXQgYXMgd2l0aCBERVNURElSLiBEZWZhdWx0OgotICAgICAgICAgIC91c3IvbG9jYWwvYmluLgot Ci0gICBNQU5ESVIKLSAgICAgICAgICBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gaW5zdGFsbCB0aGUg Qy1LZXJtaXQgbWFudWFsIHBhZ2UgYXMKLSAgICAgICAgICAia2VybWl0IiBmb2xsb3dlZCBieSB0 aGUgbWFudWFsLWNoYXB0ZXIgZXh0ZW5zaW9uIChuZXh0IGl0ZW0pLgotICAgICAgICAgIERlZmF1 bHQ6IC91c3IvbWFuL21hbjEuIElmIE1BTkRJUiBpcyBkZWZpbmVkLCB0aGUgZGlyZWN0b3J5IG11 c3QKLSAgICAgICAgICBhbHJlYWR5IGV4aXN0LgotCi0gICBNQU5FWFQKLSAgICAgICAgICBFeHRl bnNpb24gZm9yIHRoZSBtYW51YWwgcGFnZS4gRGVmYXVsdDogMSAoZGlnaXQgb25lKS4KLQotICAg U1JDRElSCi0gICAgICAgICAgRGlyZWN0b3J5IGluIHdoaWNoIHRvIGluc3RhbGwgdGhlIEMtS2Vy bWl0IHNvdXJjZSBjb2RlLiBJZgotICAgICAgICAgIERFU1RESVIgaXMgZGVmaW5lZCwgdGhpcyBp cyBhIHN1YmRpcmVjdG9yeSBvZiBERVNURElSLiBEZWZhdWx0OgotICAgICAgICAgIE5vbmUuCi0K LSAgIENFUlRESVIKLSAgICAgICAgICBGb3Igc2VjdXJlIGJ1aWxkcyBvbmx5OiBEaXJlY3Rvcnkg aW4gd2hpY2ggdG8gaW5zdGFsbCB0aGUKLSAgICAgICAgICBjYV9jZXJ0cy5wZW0gZmlsZS4gVGhp cyBtdXN0IGJlIHRoZSB2ZXJpZmljYXRpb24gZGlyZWN0b3J5IHVzZWQKLSAgICAgICAgICBieSBw cm9ncmFtcyB0aGF0IHVzZSB0aGUgU1NMIGxpYnJhcmllcyBhdCB5b3VyIHNpdGUuIERlZmF1bHQ6 Ci0gICAgICAgICAgbm9uZS4gUG9zc2liaWxpdGllcyBpbmNsdWRlOiAvdXNyL2xvY2FsL3NzbCwg L29wdC9zc2wsCi0gICAgICAgICAgL3Vzci9saWIvc3NsLCAuIC4gLiAgICAgSWYgQ0VSVERJUiBp cyBkZWZpbmVkLCB0aGUgZGlyZWN0b3J5Ci0gICAgICAgICAgbXVzdCBhbHJlYWR5IGV4aXN0Lgot Ci0gICBJTkZPRElSCi0gICAgICAgICAgRGlyZWN0b3J5IGluIHdoaWNoIHRvIGluc3RhbGwgdGhl IEMtS2VybWl0IHRleHQgZmlsZXMuIElmCi0gICAgICAgICAgREVTVERJUiBpcyBkZWZpbmVkLCB0 aGlzIGlzIGEgc3ViZGlyZWN0b3J5IG9mIERFU1RESVIuIERlZmF1bHQ6Ci0gICAgICAgICAgTm9u ZS4gSWYgSU5GT0RJUiBpcyBkZWZpbmVkIGJ1dCBkb2VzIG5vdCBleGlzdCwgdGhlIG1ha2VmaWxl Ci0gICAgICAgICAgYXR0ZW1wdHMgdG8gY3JlYXRlIGl0LCBhcyB3aXRoIERFU1RESVIuCi0KLSAg IEV4YW1wbGVzOgotCi0gICBtYWtlIGluc3RhbGwKLSAgICAgICAgICBJbnN0YWxscyAid2VybWl0 IiBhcyAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgd2l0aCBwZXJtaXNzaW9ucyA3NTUsCi0gICAgICAg ICAgdGhlIGRlZmF1bHQgb3duZXIgYW5kIGdyb3VwLCBhbmQgbm8gc3BlY2lhbCBwcml2aWxlZ2Vz LiBUaGUKLSAgICAgICAgICBtYW51YWwgcGFnZSBpcyBpbnN0YWxsZWQgYXMgL3Vzci9tYW4vbWFu MS9rZXJtaXQuMS4gVGV4dCBmaWxlcwotICAgICAgICAgIGFyZSBub3QgY29waWVkIGFueXdoZXJl LCBub3IgYXJlIHRoZSBzb3VyY2VzLgotCi0gICBtYWtlIE1BTkRJUj0gaW5zdGFsbAotICAgICAg ICAgIEp1c3QgbGlrZSAibWFrZSBpbnN0YWxsIiBidXQgZG9lcyBub3QgYXR0ZW1wdCB0byBpbnN0 YWxsIHRoZQotICAgICAgICAgIG1hbnVhbCBwYWdlLgotCi0gICBtYWtlIERFU1RESVI9L29wdC9r ZXJtaXQgQklORElSPS9iaW4gU1JDRElSPS9zcmMgSU5GT0RJUj0vZG9jIGluc3RhbGwKLSAgICAg ICAgICBJbnN0YWxscyB0aGUgS2VybWl0IGJpbmFyeSAid2VybWl0IiBhcyAvb3B0L2tlcm1pdC9i aW4va2VybWl0LAotICAgICAgICAgIHB1dHMgdGhlIHNvdXJjZSBjb2RlIGluIC9vcHQva2VybWl0 L3NyYywgYW5kIHB1dHMgdGhlIHRleHQgZmlsZXMKLSAgICAgICAgICBpbiAvb3B0L2tlcm1pdC9k b2MsIGNyZWF0aW5nIHRoZSBkaXJlY3RvcmllcyBpZiB0aGV5IGRvbid0Ci0gICAgICAgICAgYWxy ZWFkeSBleGlzdCwgYW5kIHB1dHMgdGhlIG1hbiBwYWdlIGluIHRoZSBkZWZhdWx0IGxvY2F0aW9u LgotCi0gICBtYWtlIEJJTkRJUj0vdXNyL2xvY2FsL2JpbiBDRVJURElSPS91c3IvbG9jYWwvc3Ns IGluc3RhbGwKLSAgICAgICAgICBJbnN0YWxscyB0aGUgS2VyYmVyaXplZCBLZXJtaXQgYmluYXJ5 ICJ3ZXJtaXQiIGFzCi0gICAgICAgICAgL3Vzci9sb2NhbC9iaW4va2VybWl0LCBwdXRzIHRoZSBD QSBDZXJ0aWZpY2F0ZXMgZmlsZSBpbgotICAgICAgICAgIC91c3IvbG9jYWwvc3NsLywgYW5kIHRo ZSBtYW4gcGFnZSBpbiB0aGUgbm9ybWFsIHBsYWNlLgotCi0gICBGb3IgZGVmaW5pdGl2ZSBpbmZv cm1hdGlvbiwgc2VlIHRoZSBtYWtlZmlsZS4gVGhlIGZvbGxvd2luZyBpcwotICAgZXhjZXJwdGVk IGZyb20gdGhlIDguMC4yMTEgbWFrZWZpbGU6Ci0KLSMgVGhlIGZvbGxvd2luZyBzeW1ib2xzIGFy ZSB1c2VkIHRvIHNwZWNpZnkgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGUgbG9jYXRpb25zCi0jIFJl ZGVmaW5lIHRoZW0gdG8gdGhlIHZhbHVlcyB1c2VkIG9uIHlvdXIgc3lzdGVtIGJ5OgotIyAuIGVk aXRpbmcgdGhpcyBmaWxlCi0jIC4gZGVmaW5pbmcgdGhlIHZhbHVlcyBvbiB0aGUgY29tbWFuZCBs aW5lCi0jIC4gZGVmaW5pbmcgdGhlIHZhbHVlcyBpbiB0aGUgZW52aXJvbm1lbnQgYW5kIHVzZSB0 aGUgLWUgb3B0aW9uCi0jCi1wcmVmaXggID0gL3Vzci9sb2NhbAotc3Jwcm9vdCA9ICQocHJlZml4 KQotc3Nscm9vdCA9ICQocHJlZml4KQotbWFucm9vdCA9ICQocHJlZml4KQotCi1LNExJQj0tTC91 c3Iva2VyYmVyb3MvbGliCi1LNElOQz0tSS91c3Iva2VyYmVyb3MvaW5jbHVkZQotSzVMSUI9LUwv dXNyL2tlcmJlcm9zL2xpYgotSzVJTkM9LUkvdXNyL2tlcmJlcm9zL2luY2x1ZGUKLVNSUExJQj0t TCQoc3Jwcm9vdCkvbGliCi1TUlBJTkM9LUkkKHNycHJvb3QpL2luY2x1ZGUKLVNTTExJQj0tTCQo c3Nscm9vdCkvc3NsL2xpYgotU1NMSU5DPS1JJChzc2xyb290KS9zc2wvaW5jbHVkZQotLi4uCi1X RVJNSVQgPSBtYWtld2hhdAotQklOQVJZID0gd2VybWl0Ci1ERVNURElSID0KLUJJTkRJUiA9ICQo cHJlZml4KS9iaW4KLU1BTkRJUiA9ICQobWFucm9vdCkvbWFuL21hbjEKLU1BTkVYVCA9IDEKLVNS Q0RJUiA9Ci1JTkZPRElSID0KLUNFUlRESVIgPQotCi02LiBJTlNUQUxMSU5HIFVOSVggQy1LRVJN SVQgRlJPTSBET1MtRk9STUFUIERJU0tFVFRFUwotCi0gICBbIFsyMDZdVG9wIF0gWyBbMjA3XUNv bnRlbnRzIF0gWyBbMjA4XU5leHQgXSBbIFsyMDldUHJldmlvdXMgXQotCi0gICAgIFRoaXMgc2Vj dGlvbiBpcyBvYnNvbGV0ZS4gV2UgZG9uJ3QgZGlzdHJpYnV0ZSBDLUtlcm1pdCBvbiBkaXNrZXR0 ZXMKLSAgICAgYW55IG1vcmUgYmVjYXVzZSAoYSl0aGVyZSBpcyBubyBkZW1hbmQsIGFuZCAoYikg aXQgbm8gbG9uZ2VyIGZpdHMuCi0KLSAgIElmIHlvdSByZWNlaXZlZCBhIERPUy1mb3JtYXQgZGlz a2V0dGUgY29udGFpbmluZyBhIGJpbmFyeSBleGVjdXRhYmxlCi0gICBDLUtlcm1pdCBwcm9ncmFt IHBsdXMgc3VwcG9ydGluZyB0ZXh0IGZpbGVzLCBiZSBzdXJlIHRvIGNobW9kICt4IHRoZQotICAg ZXhlY3V0YWJsZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBydW4gaXQuCi0KLSAgIEluIHZlcnNpb24g NUEoMTkwKSBhbmQgbGF0ZXIsIGFsbCB0aGUgdGV4dCBmaWxlcyBvbiB0aGUgQy1LZXJtaXQKLSAg IERPUy1mb3JtYXQgZGlza2V0dGVzIGFyZSBpbiBVbml4IGZvcm1hdDogTEYgYXQgdGhlIGVuZCBv ZiBlYWNoIGxpbmUKLSAgIHJhdGhlciB0aGFuIENSTEYuIFRoaXMgbWVhbnMgdGhhdCBubyBjb252 ZXJzaW9ucyBhcmUgbmVjZXNzYXJ5IHdoZW4KLSAgIGNvcHlpbmcgdG8geW91ciBVbml4IGZpbGUg c3lzdGVtLCBhbmQgdGhhdCBhbGwgdGhlIGZpbGVzIG9uIHRoZQotICAgZGlza2V0dGUsIHRleHQg YW5kIGJpbmFyeSwgY2FuIGJlIGNvcGllZCB0b2dldGhlci4gVGhlIGZvbGxvd2luZwotICAgY29t bWVudHMgYXBwbHkgdG8gdGhlIERPUy1mb3JtYXQgZGlza2V0dGVzIGZ1cm5pc2hlZCB3aXRoIHZl cnNpb24KLSAgIDVBKDE4OSkgYW5kIGVhcmxpZXIgb3IgdG8gb3RoZXIgRE9TLWZvcm1hdCBkaXNr ZXR0ZXMgeW91IG1pZ2h0IGhhdmUKLSAgIG9idGFpbmVkIGZyb20gb3RoZXIgc291cmNlcy4KLQot ICAgSWYgeW91IGhhdmUgcmVjZWl2ZWQgQy1LZXJtaXQgb24gTVMtRE9TIGZvcm1hdCBkaXNrZXR0 ZXMgKHN1Y2ggYXMgdGhvc2UKLSAgIGRpc3RyaWJ1dGVkIGJ5IENvbHVtYmlhIFVuaXZlcnNpdHkp LCB5b3Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHlvdXIKLSAgIERPUy10by1Vbml4IGNvbnZlcnNp b24gdXRpbGl0eSAoc3VjaCBhcyAiZG9zcmVhZCIpIGJvdGg6ICgxKSBjaGFuZ2VzCi0gICBsaW5l IHRlcm1pbmF0b3JzIGluIGFsbCBmaWxlcyBmcm9tIGNhcnJpYWdlLXJldHVybiBsaW5lZmVlZCAo Q1JMRikgdG8KLSAgIGp1c3QgbGluZWZlZWQgKExGKSAoc3VjaCBhcyAiZG9zcmVhZCAtYSIpIGFu ZCByZW1vdmUgYW55IEN0cmwtWidzLCBhbmQKLSAgICgyKSB0aGF0IGFsbCBmaWxlbmFtZXMgYXJl IGNvbnZlcnRlZCBmcm9tIHVwcGVyY2FzZSB0byBsb3dlcmNhc2UuIElmCi0gICB0aGVzZSBjb252 ZXJzaW9ucyB3ZXJlIG5vdCBkb25lLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHNoZWxsIHNj cmlwdAotICAgb24geW91ciBVbml4IHN5c3RlbSB0byBkbyB0aGVtOgotCi0tLS0oY3V0IGhlcmUp LS0tCi0jIS9iaW4vc2gKLSMKLSMgU2hlbGwgc2NyaXB0IHRvIGNvbnZlcnQgQy1LZXJtaXQgRE9T LWZvcm1hdCBmaWxlcyBpbnRvIFVuaXggZm9ybWF0LgotIyBMb3dlcmNhc2VzIHRoZSBmaWxlbmFt ZXMsIHN0cmlwcyBvdXQgY2FycmlhZ2UgcmV0dXJucyBhbmQgQ3RybC1aJ3MuCi0jCi14PSQxICMg dGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBkaXJlY3RvcnkKLXk9JDIgIyB0aGUgbmFtZSBvZiB0aGUg dGFyZ2V0IGRpcmVjdG9yeSBpZiBbICQjIC1sdCAyIF07IHRoZW4KLSAgZWNobyAidXNhZ2U6ICQw IHNvdXJjZS1kaXJlY3RvcnkgdGFyZ2V0LWRpcmVjdG9yeSIKLSAgZXhpdCAxCi1maQotaWYgY2Qg JDEgOyB0aGVuCi0gIGVjaG8gIkNvbnZlcnRpbmcgZmlsZXMgZnJvbSAkMSB0byAkMiIKLWVsc2UK LSAgZWNobyAiJDA6IGNhbm5vdCBjZCB0byAkMSIKLSAgZXhpdCAxCi1maQotZm9yIGkgaW4gKjsg ZG8KLSAgaj1gZWNobyAkaSB8IHRyICdBLVonICdhLXonYAotICBlY2hvICR4LyRpID1cPiAkeS8k agotICB0ciAtZCAnXDAxNVwwMzInIDwgJGkgPiAkeS8kagotZG9uZQotLS0tKGN1dCBoZXJlKS0t LQotCi0gICBDdXQgb3V0IHRoaXMgc2hlbGwgc2NyaXB0LCBzYXZlIGl0IGFzICJjb252ZXJ0LnNo IiAob3IgYW55IG90aGVyIG5hbWUKLSAgIHlvdSBwcmVmZXIpLCB0aGVuICJjaG1vZCAreCBjb252 ZXJ0LnNoIi4gVGhlbiwgY3JlYXRlIGEgbmV3LCBlbXB0eQotICAgZGlyZWN0b3J5IHRvIHB1dCB0 aGUgY29udmVydGVkIGZpbGVzIGluLCBhbmQgdGhlbiAiY29udmVydC5zaCAveHh4Ci0gICAveXl5 IiB3aGVyZSAveHh4IGlzIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIFBDLWZv cm1hdCBmaWxlcwotICAgYXJlLCBhbmQgL3l5eSBpcyB0aGUgbmFtZSBvZiB0aGUgbmV3LCBlbXB0 eSBkaXJlY3RvcnkuIFRoZSBjb252ZXJ0ZWQKLSAgIGZpbGVzIHdpbGwgYXBwZWFyIGluIHRoZSBu ZXcgZGlyZWN0b3J5LgotCi03LiBDSEVDS0lORyBUSEUgUkVTVUxUUwotCi0gICBbIFsyMTBdVG9w IF0gWyBbMjExXUNvbnRlbnRzIF0gWyBbMjEyXU5leHQgXSBbIFsyMTNdUHJldmlvdXMgXQotCi0g ICBGaXJzdCBzb21lIHF1aWNrIGNoZWNrcyBmb3IgcHJvYmxlbXMgdGhhdCBjYW4gYmUgZWFzaWx5 IGNvcnJlY3RlZCBieQotICAgcmVjb21waWxpbmcgd2l0aCBkaWZmZXJlbnQgb3B0aW9uczoKLQot ICAgRElSRUNUT1JZIGxpc3RpbmcgaXMgZ2FyYmFnZQotICAgICAgICAgIFBlcm1pc3Npb25zLCBz aXplLCBhbmQgZGF0ZSBhcmUgcmFuZG9tIGdhcmJhZ2UgKGJ1dCB0aGUKLSAgICAgICAgICBmaWxl bmFtZXMgYXJlIGNvcnJlY3QpIGluIGEgQy1LZXJtaXQgRElSRUNUT1JZIGxpc3RpbmcuIE9uIHNv bWUKLSAgICAgICAgICBwbGF0Zm9ybXMsIHRoZSBsc3RhdCgpIGZ1bmN0aW9uIGlzIHByZXNlbnQg YnV0IHNpbXBseSBkb2Vzbid0Ci0gICAgICAgICAgd29yazsgdHJ5IGFkZGluZyAtRE5PTFNUQVQg dG8gQ0ZMQUdTIGFuZCByZWJ1aWxkLiBJZiB0aGF0Ci0gICAgICAgICAgZG9lc24ndCBmaXggaXQs IGFsc28gYWRkIC1ETk9MSU5LQklUUy4gSWYgaXQncyBzdGlsbCBub3QgZml4ZWQsCi0gICAgICAg ICAgcmVtb3ZlIC1ETk9MU1RBVCBhbmQgLUROT0xJTktCSVRTIGFuZCBhZGQgLUROT1NZTUxJTksu Ci0KLSAgIGN1cnNlcwotICAgICAgICAgIFdoZW4geW91IG1ha2UgYSBjb25uZWN0aW9uIHdpdGgg Qy1LZXJtaXQgYW5kIHRyYW5zZmVyIGZpbGVzCi0gICAgICAgICAgdXNpbmcgdGhlIGZ1bGxzY3Jl ZW4gKGN1cnNlcykgZmlsZS10cmFuc2ZlciBkaXNwbGF5LCBhbmQgdGhlbgotICAgICAgICAgIGdl dCB0aGUgQy1LZXJtaXQ+IHByb21wdCBiYWNrIGFmdGVyd2FyZHMsIGRvIGNoYXJhY3RlcnMgZWNo bwotICAgICAgICAgIHdoZW4geW91IHR5cGUgdGhlbT8gSWYgbm90LCB0aGUgY3Vyc2VzIGxpYnJh cnkgaGFzIGFsdGVyZWQgdGhlCi0gICAgICAgICAgYnVmZmVyaW5nIG9mIC9kZXYvdHR5LiBUcnkg cmVidWlsZGluZyB3aXRoIEtGTEFHUz0tRENLX05FV1RFUk0uCi0gICAgICAgICAgSWYgaXQgYWxy ZWFkeSBoYXMgLURDS19ORVdURVJNIGluIENGTEFHUywgdHJ5IHJlbW92aW5nIGl0LiBJZgotICAg ICAgICAgIHRoYXQgZG9lc24ndCBoZWxwLCB0aGVuIHJlYnVpbGQgd2l0aCAtRE5PTk9TRVRCVUYg KHllcywgdHdvCi0gICAgICAgICAgTk8ncykuIElmIG5vbmUgb2YgdGhpcyB3b3JrcyAoYW5kIHlv dSBjYW4ndCBmaXggdGhlIGNvZGUpLCB0aGVuCi0gICAgICAgICAgZWl0aGVyIGRvbid0IHVzZSB0 aGUgZnVsbHNjcmVlbiBkaXNwbGF5LCBvciByZWJ1aWxkIHdpdGgKLSAgICAgICAgICAtRE5PQ1VS U0VTLgotCi0gICBDdHJsLUwgb3IgYW55IFNDUkVFTiBjb21tYW5kIGNyYXNoZXMgQy1LZXJtaXQ6 Ci0gICAgICAgICAgUmVidWlsZCB3aXRoIC1ETk9URVJNQ0FQLgotCi0gICBObyBwcm9tcHQgYWZ0 ZXIgQ09OTkVDVDoKLSAgICAgICAgICBBZnRlciBlc2NhcGluZyBiYWNrIGZyb20gQ09OTkVDVCBt b2RlLCBkb2VzIHlvdXIgQy1LZXJtaXQ+Ci0gICAgICAgICAgcHJvbXB0IGRpc2FwcGVhcj8gKFll dCwgdHlwaW5nICI/IiBzdGlsbCBwcm9kdWNlcyBhIGNvbW1hbmQKLSAgICAgICAgICBsaXN0LCBl dGMpIEluIHRoYXQgY2FzZSwgYWRkIC1EQ0tDT05JTlRCNENCIHRvIENGTEFHUyBhbmQKLSAgICAg ICAgICByZWJ1aWxkLgotCi0gICBIZXJlIGlzIGEgbW9yZSB0aG9yb3VnaCBjaGVja2xpc3QgY2Fu IHVzZSB0byB0ZWxsIHdoZXRoZXIgeW91ciB2ZXJzaW9uCi0gICBvZiBDLUtlcm1pdCB3YXMgYnVp bHQgY29ycmVjdGx5IGZvciB5b3VyIFVuaXggc3lzdGVtLCB3aXRoIGhpbnRzIG9uIGhvdwotICAg dG8gZml4IG9yIHdvcmsgYXJvdW5kIHByb2JsZW1zOgotCi0gICAgYS4gU3RhcnQgQy1LZXJtaXQg KHVzdWFsbHkgYnkgdHlwaW5nICIuL3dlcm1pdCIgaW4gdGhlIGRpcmVjdG9yeSB3aGVyZQotICAg ICAgIHlvdSByYW4gdGhlIG1ha2VmaWxlKS4gRG8geW91IHNlZSB0aGUgQy1LZXJtaXQ+IHByb21w dD8gSWYgbm90LAotICAgICAgIEMtS2VybWl0IGluY29ycmVjdGx5IGRlZHVjZWQgdGhhdCBpdCB3 YXMgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZC4KLSAgICAgICBUaGUgdGVzdCBpcyBpbiBjb25i Z3QoKSBpbiBbMjE0XWNrdXRpby5jLiBJZiB5b3UgY2FuIGZpeCBpdCBmb3IKLSAgICAgICB5b3Vy IHN5c3RlbSwgcGxlYXNlIHNlbmQgaW4gdGhlIGZpeCAoSGludDogcmVhZCBhYm91dCAiUElEX1Qi Ci0gICAgICAgYmVsb3cpLiBPdGhlcndpc2UsIHlvdSBjYW4gZm9yY2UgQy1LZXJtaXQgdG8gZm9y ZWdyb3VuZCBtb2RlIGJ5Ci0gICAgICAgc3RhcnRpbmcgaXQgd2l0aCB0aGUgLXogY29tbWFuZCBs aW5lIG9wdGlvbiwgYXMgaW4gImtlcm1pdCAteiIsIG9yCi0gICAgICAgZ2l2aW5nIHRoZSBpbnRl cmFjdGl2ZSBjb21tYW5kIFNFVCBCQUNLR1JPVU5EIE9GRi4KLSAgICBiLiBXaGVuIHlvdSB0eXBl IGNoYXJhY3RlcnMgYXQgdGhlIEMtS2VybWl0IHByb21wdCwgZG8gdGhleSBlY2hvCi0gICAgICAg aW1tZWRpYXRlbHk/IElmIG5vdCwgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggY29uY2IoKSBhbmQg cHJvYmFibHkKLSAgICAgICB0aGUgb3RoZXIgdGVybWluYWwgbW9kZSBzZXR0aW5ncyByb3V0aW5l cyBpbiBbMjE1XWNrdXRpby5jLiBCZSBzdXJlCi0gICAgICAgeW91IGhhdmUgdXNlZCB0aGUgbW9z dCBhcHByb3ByaWF0ZSBtYWtlIGVudHJ5LgotICAgIGMuIEF0IHRoZSBDLUtlcm1pdD4gcHJvbXB0 LCB0eXBlICJzZW5kIC4vPyIuIEMtS2VybWl0IHNob3VsZCBsaXN0IGFsbAotICAgICAgIHRoZSBm aWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuIElmIG5vdCwgaXQgd2FzIGJ1aWx0IGZvciB0 aGUKLSAgICAgICB3cm9uZyB0eXBlIG9mIFVuaXggZmlsZSBzeXN0ZW0uIERldGFpbHMgYmVsb3cu IEluIHRoZSBtZWFudGltZSwgdHJ5Ci0gICAgICAgU0VUIFdJTERDQVJELUVYUEFOU0lPTiBTSEVM TCBhcyBhIHdvcmthcm91bmQuCi0gICAgZC4gQ0QgdG8gYSBkaXJlY3RvcnkgdGhhdCBjb250YWlu cyBhIHZhcmlldHkgb2YgZmlsZXMsIHN5bWxpbmtzLCBhbmQKLSAgICAgICBzdWJkaXJlY3Rvcmll cyBhbmQgZ2l2ZSBhIERJUkVDVE9SWSBjb21tYW5kIGF0IHRoZSBDLUtlcm1pdD4KLSAgICAgICBw cm9tcHQuIERvIHRoZSBwZXJtaXNzaW9ucywgc2l6ZSwgYW5kIGRhdGUgYXBwZWFyIGNvcnJlY3Q/ IElmIG5vdAotICAgICAgIHNlZSBbMjE2XVNlY3Rpb24gNC4wLgotICAgIGUuIEFzc3VtaW5nIHlv dXIgcGxhdGZvcm0gc3VwcG9ydHMgbG9uZyBmaWxlIG5hbWVzLCBjcmVhdGUgYSBmaWxlIHdpdGgK LSAgICAgICBhIGxvbmcgbmFtZSBpbiB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5LCBlLmcuOgotCi0k IHRvdWNoIHRoaXNpc2FmaWxld2l0aGF2ZXJ5dmVyeXZlcnl2ZXJ5dmVyeXZlcnl2ZXJ5dmVyeWxv b29vb29vb29uZ25hbWUKLQotICAgICAgICh5b3UgbWlnaHQgbmVlZCB0byBtYWtlIGl0IGxvbmdl ciB0aGFuIHRoaXMsIHBlcmhhcHMgYXMgbG9uZyBhcyAyNTcKLSAgICAgICBvciBldmVuIDEwMjUg Y2hhcmFjdGVycykuCi0gICAgICAgQ2hlY2sgd2l0aCBscyB0byBzZWUgaWYgeW91ciB2ZXJzaW9u IG9mIFVuaXggdHJ1bmNhdGVkIHRoZSBuYW1lLgotICAgICAgIE5vdyBzdGFydCBDLUtlcm1pdCBh bmQgdHlwZSAic2VuZCB0aGlzaXM8RVNDPiIuIERvZXMgS2VybWl0Ci0gICAgICAgY29tcGxldGUg dGhlIG5hbWUsIHNob3dpbmcgdGhlIHNhbWUgbmFtZSBhcyBscyBkaWQ/IElmIG5vdCwgd3JvbmcK LSAgICAgICBmaWxlc3lzdGVtLiBSZWFkIG9uLgotICAgIGYuIE1ha2Ugc3VyZSB0aGF0IEtlcm1p dCBoYXMgdGhlIG1heGltdW0gcGF0aCBsZW5ndGggcmlnaHQuIEp1c3QgdHlwZQotICAgICAgIFNI T1cgRklMRSBhbmQgc2VlIHdoYXQgaXQgc2F5cyBhYm91dCB0aGlzLiBJZiBpdCBpcyB0b28gc2hv cnQsCi0gICAgICAgdGhlcmUgY291bGQgYmUgc29tZSBwcm9ibGVtcyBhdCBydW50aW1lLiBUbyBj b3JyZWN0LCBsb29rIGluCi0gICAgICAgWzIxN11ja2NkZWIuaCB0byBzZWUgaG93IHRoZSBzeW1i b2wgQ0tNQVhQQVRIIGlzIHNldCBhbmQgbWFrZSBhbnkKLSAgICAgICBuZWVkZWQgYWRqdXN0bWVu dHMuCi0gICAgZy4gU2VuZCBhIGZpbGUgdG8geW91ciBuZXcgS2VybWl0IHByb2dyYW0gZnJvbSBh IGRpZmZlcmVudCBLZXJtaXQKLSAgICAgICBwcm9ncmFtIHRoYXQgaXMga25vd24gdG8gd29yay4g SXMgdGhlIGRhdGUvdGltZXN0YW1wIG9mIHRoZSBuZXcKLSAgICAgICBmaWxlIGlkZW50aWNhbCB0 byB0aGUgb3JpZ2luYWw/IElmIG5vdCwgYWRqdXN0bWVudHMgYXJlIG5lZWRlZCBpbgotICAgICAg IHpzdHJkdCgpIGluIFsyMThdY2t1ZmlvLmMuCi0gICAgaC4gR28gdG8gYW5vdGhlciBjb21wdXRl ciAoQ29tcHV0ZXIgQikgZnJvbSB3aGljaCB5b3UgY2FuIHNlbmQgZmlsZXMKLSAgICAgICB0byBD LUtlcm1pdC4gQ29ubmVjdCBDb21wdXRlciBCIHRvIHRoZSBjb21wdXRlciAoQSkgd2hlcmUgeW91 IGFyZQotICAgICAgIHRlc3RpbmcgQy1LZXJtaXQuIFRoZW46Ci0gICAgaS4gU2VuZCBhIGZpbGUg ZnJvbSBCIHRvIEEuIE1ha2Ugc3VyZSBpdCB0cmFuc2ZlcnJlZCBPSyBhbmQgd2FzCi0gICAgICAg Y3JlYXRlZCB3aXRoIHRoZSByaWdodCBuYW1lLgotICAgIGouIFNlbmQgYSBmaWxlIGZyb20gQiB0 byBBLCBzcGVjaWZ5aW5nIGFuICJhcy1uYW1lIiB0aGF0IGlzIHZlcnksIHZlcnkKLSAgICAgICBs b25nIChsb25nZXIgdGhhbiB0aGUgbWF4aW11bSBuYW1lIGxlbmd0aCBvbiBjb21wdXRlciBBKS4g Q2hlY2sgdG8KLSAgICAgICBtYWtlIHN1cmUgdGhhdCB0aGUgZmlsZSB3YXMgcmVjZWl2ZWQgT0sg YW5kIHRoYXQgaXRzIG5hbWUgd2FzCi0gICAgICAgdHJ1bmNhdGVkIHRvIENvbXB1dGVyIEEncyBt YXhpbXVtIGxlbmd0aC4gSWYgbm90LCBjaGVjayB0aGUKLSAgICAgICBNQVhOQU1MRU4gZGVmaW5p dGlvbiBpbiBbMjE5XWNrdWZpby5jLgotICAgIGsuIFRlbGwgQy1LZXJtaXQgb24gQ29tcHV0ZXIg QSB0byAic2V0IHJlY2VpdmUgcGF0aG5hbWVzIHJlbGF0aXZlIiBhbmQKLSAgICAgICB0aGVuIHNl bmQgaXQgYSBmaWxlIGZyb20gQ29tcHV0ZXIgQiBzcGVjaWZ5aW5nIGFuIGFzLW5hbWUgdGhhdAot ICAgICAgIGNvbnRhaW5zIHNldmVyYWwgZGlyZWN0b3J5IHNlZ21lbnRzOgotCi1zZW5kIGZvbyBk aXIxL2RpcjIvZGlyMy9mb28KLQotICAgICAgIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IGRpcjEv ZGlyMi9kaXIzL2ZvbyB3YXMgY3JlYXRlZCBpbiBDb21wdXRlcgotICAgICAgIEEncyBjdXJyZW50 IGRpcmVjdG9yeSAoaS5lLiB0aGF0IHRocmVlIGxldmVscyBvZiBkaXJlY3RvcmllcyB3ZXJlCi0g ICAgICAgY3JlYXRlZCkuCi0gICAgbC4gUmVwZWF0IHN0ZXAgaywgYnV0IG1ha2UgZWFjaCBwYXRo IHNlZ21lbnQgaW4gdGhlIHBhdGhuYW1lIGxvbmdlcgotICAgICAgIHRoYW4gQ29tcHV0ZXIgQSdz IG1heGltdW0gbmFtZSBsZW5ndGguIE1ha2Ugc3VyZSBlYWNoIGRpcmVjdG9yeQotICAgICAgIG5h bWUsIGFuZCB0aGUgZmluYWwgZmlsZW5hbWUsIHdlcmUgdHJ1bmNhdGVkIHByb3Blcmx5LgotICAg IG0uIFR5cGUgQ3RybC1DIChvciB3aGF0ZXZlciB5b3VyIFVuaXggaW50ZXJydXB0IGNoYXJhY3Rl ciBpcykgYXQgdGhlCi0gICAgICAgcHJvbXB0LiBEbyB5b3UgZ2V0ICJeQy4uLiIgYW5kIGEgbmV3 IHByb21wdD8gSWYgaW5zdGVhZCwgeW91IGdldCBhCi0gICAgICAgY29yZSBkdW1wICh0aGlzIHNo b3VsZG4ndCBoYXBwZW4gYW55IG1vcmUpICJybSBjb3JlIiBhbmQgdGhlbgotICAgICAgIHJlYnVp bGQgd2l0aCAtRE5PQ0NUUkFQIGFkZGVkIHRvIHlvdXIgQ0ZMQUdTLiBJZiBpdCBkaWQgd29yaywg dGhlbgotICAgICAgIHR5cGUgYW5vdGhlciBDdHJsLUMuIElmIHRoaXMgZG9lcyB0aGUgc2FtZSB0 aGluZyBhcyB0aGUgZmlyc3Qgb25lLAotICAgICAgIHRoZW4gQ3RybC1DIGhhbmRsaW5nIGlzIE9L LiBPdGhlcndpc2UsIHRoZSBTSUdJTlQgc2lnbmFsIGlzIGVpdGhlcgotICAgICAgIG5vdCBnZXR0 aW5nIHJlLWFybWVkIChzaG91bGRuJ3QgaGFwcGVuKSBvciBpcyBiZWluZyBtYXNrZWQgb2ZmCi0g ICAgICAgYWZ0ZXIgdGhlIGZpcnN0IHRpbWUgaXQgaXMgY2F1Z2h0LCBpbiB3aGljaCBjYXNlLCBp ZiB5b3VyIFVuaXggaXMKLSAgICAgICBQT1NJWC1iYXNlZCwgdHJ5IHJlYnVpbGRpbmcgQy1LZXJt aXQgd2l0aCAtRENLX1BPU0lYX1NJRy4KLSAgICBuLiBUeXBlIEN0cmwtWiAob3Igd2hhdGV2ZXIg eW91ciBVbml4IHN1c3BlbmQgY2hhcmFjdGVyIGlzKSB0byBwdXQKLSAgICAgICBDLUtlcm1pdCBp biB0aGUgYmFja2dyb3VuZC4gRGlkIGl0IHdvcms/IElmIG5vdGhpbmcgaGFwcGVuZWQsIHRoZW4K LSAgICAgICAoYSl5b3VyIHZlcnNpb24gb2YgVW5peCBkb2VzIG5vdCBzdXBwb3J0IGpvYiBjb250 cm9sLCBvciAoYikgeW91cgotICAgICAgIHZlcnNpb24gb2YgQy1LZXJtaXQgd2FzIHByb2JhYmx5 IGJ1aWx0IHdpdGggLUROT0pDLiBJZiB5b3VyIHNlc3Npb24KLSAgICAgICBiZWNhbWUgdG90YWxs eSBmcm96ZW4sIHRoZW4geW91IGFyZSBwcm9iYWJseSBydW5uaW5nIEMtS2VybWl0IG9uIGEKLSAg ICAgICBVbml4IHZlcnNpb24gdGhhdCBzdXBwb3J0cyBqb2IgY29udHJvbCwgYnV0IHVuZGVyIGEg c2hlbGwgdGhhdAotICAgICAgIGRvZXNuJ3QuIElmIHRoYXQncyBub3QgdGhlIGNhc2UsIGxvb2sg aW4gdGhlIGNvbmdtKCkgYW5kIHBzdXNwZW5kKCkKLSAgICAgICByb3V0aW5lcyBpbiBbMjIwXWNr dXRpby5jIGFuZCBzZWUgaWYgeW91IGNhbiBmaWd1cmUgb3V0IHdoYXQncwotICAgICAgIHdyb25n LiBJZiB5b3UgY2FuJ3QsIHJlYnVpbGQgd2l0aCAtRE5PSkMuCi0gICAgby4gR2l2ZSBhIFNFVCBM SU5FIGNvbW1hbmQgZm9yIGEgZGlhbG91dCBkZXZpY2UsIGUuZy4gInNldCBsaW5lCi0gICAgICAg L2Rldi90dHkwMCIuIElmIHlvdSBnb3Qgc29tZSBraW5kIG9mIHBlcm1pc3Npb24gb3IgYWNjZXNz IGRlbmllZAotICAgICAgIG1lc3NhZ2UsIGdvIHJlYWQgWzIyMV1TZWN0aW9uIDEwIGFuZCB0aGVu IGNvbWUgYmFjayBoZXJlLgotICAgIHAuIEFmdGVyIGdpdmluZyBhIHN1Y2Nlc3NmdWwgU0VUIExJ TkUgY29tbWFuZCwgdHlwZSAic2hvdyBjb21tIiB0byBzZWUKLSAgICAgICB0aGUgY29tbXVuaWNh dGlvbiBwYXJhbWV0ZXJzLiBEbyB0aGV5IG1ha2Ugc2Vuc2U/Ci0gICAgcS4gVHlwZSAic2V0IHNw ZWVkID8iIGFuZCBvYnNlcnZlIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzcGVlZHMuIElzIGl0Ci0g ICAgICAgd2hhdCB5b3UgZXhwZWN0ZWQ/IElmIG5vdCwgc2VlIFsyMjJdU2VjdGlvbiAyKSBvZiB0 aGUKLSAgICAgICBbMjIzXUNvbmZpZ3VyYXRpb25zIE9wdGlvbnMgZG9jdW1lbnQuCi0gICAgci4g R2l2ZSBhIFNFVCBTUEVFRCBjb21tYW5kIHRvIGNoYW5nZSB0aGUgZGV2aWNlJ3Mgc3BlZWQuIERp ZCBpdCB3b3JrPwotICAgICAgIChUeXBlICJzaG93IGNvbW0iIGFnYWluIHRvIGNoZWNrLikKLSAg ICBzLiBUcnkgZGlhbGluZyBvdXQ6IFNFVCBNT0RFTSBUWVBFICwgU0VUIExJTkUgLCBTRVQgU1BF RUQgLCBESUFMIC4gSWYKLSAgICAgICBpdCBkb2Vzbid0IHdvcmssIGtlZXAgcmVhZGluZy4gQWZ0 ZXIgZGlhbGluZywgY2FuIHlvdSBSRURJQUw/Ci0gICAgdC4gSWYgeW91ciB2ZXJzaW9uIHdhcyBi dWlsdCB3aXRoIFRDUC9JUCBuZXR3b3JrIHN1cHBvcnQsIHRyeSB0aGUKLSAgICAgICBURUxORVQg Y29tbWFuZC4KLSAgICB1LiBUcmFuc2ZlciBzb21lIGZpbGVzIGluIHJlbW90ZSBtb2RlIG9uIGlu Y29taW5nIGFzeW5jaHJvbm91cyBzZXJpYWwKLSAgICAgICAoZGlyZWN0IG9yIG1vZGVtKSBjb25u ZWN0aW9ucywgYW5kIG9uIGluY29taW5nIG5ldHdvcmsgKHRlbG5ldCwKLSAgICAgICBybG9naW4s IHRlcm1pbmFsIHNlcnZlcikgY29ubmVjdGlvbnMuIElmIHlvdSBnZXQgbG90cyBvZiBlcnJvcnMs Ci0gICAgICAgdHJ5IGRpZmZlcmVudCBTRVQgRkxPVyBzZXR0aW5ncyBvbiB0aGUgcmVtb3RlIEtl cm1pdCBwcm9ncmFtLgotICAgIHYuIEVzdGFibGlzaCBhIHNlcmlhbCBjb25uZWN0aW9uIGZyb20g Qy1LZXJtaXQgdG8gYW5vdGhlciBjb21wdXRlcgotICAgICAgIChkaXJlY3Qgb3IgZGlhbGVkKSBh bmQgdHJhbnNmZXIgc29tZSBmaWxlcy4gSWYgeW91IGhhdmUgbmV0d29yawotICAgICAgIHN1cHBv cnQsIGRvIHRoZSBzYW1lIHdpdGggYSBuZXR3b3JrIGNvbm5lY3Rpb24uCi0gICAgdy4gSWYgeW91 ciB2ZXJzaW9uIHdhcyBidWlsdCB3aXRoIGZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5 Ci0gICAgICAgc3VwcG9ydCwgY2hlY2sgdGhhdCBpdCB3b3JrcyBkdXJpbmcgbG9jYWwtbW9kZSBm aWxlIHRyYW5zZmVyLiBBbHNvLAotICAgICAgIGNoZWNrIEMtS2VybWl0J3Mgb3BlcmF0aW9uIGFm dGVyd2FyZHM6IGlzIHRoZSBlY2hvaW5nIGZ1bm55PyBldGMKLSAgICAgICBldGMuIElmIHRoZXJl IGFyZSBwcm9ibGVtcywgc2VlIFsyMjRdU2VjdGlvbiA0LgotICAgIHguIElmIHlvdXIgdmVyc2lv biB3YXMgYnVpbHQgd2l0aCBzY3JpcHQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugc3VwcG9ydCwKLSAg ICAgICBUQUtFIHRoZSBja2VkZW1vLmtzYyBmaWxlIHRvIGdpdmUgaXQgYSB3b3Jrb3V0LgotICAg IHkuIERvZXMgQy1LZXJtaXQgaW50ZXJsb2NrIGNvcnJlY3RseSB3aXRoIFVVQ1AtZmFtaWx5IHBy b2dyYW1zIChjdSwKLSAgICAgICB0aXAsIHV1Y3AsIGV0Yyk/IElmIG5vdCwgcmVhZCB0aGUgc2Vj dGlvbiBbMjI1XURJQUxJTkcgT1VUIEFORAotICAgICAgIENPT1JESU5BVElORyBXSVRIIFVVQ1Ag YmVsb3cuCi0gICAgei4gTW9kZW0gc2lnbmFscy4uLiBHaXZlIGEgU0VUIExJTkUgY29tbWFuZCB0 byBhIHNlcmlhbCBkZXZpY2UgYW5kCi0gICAgICAgdGhlbiB0eXBlIHRoZSBTSE9XIE1PREVNIGNv bW1hbmQuIElmIGl0IHNheXMgIk1vZGVtIHNpZ25hbHMKLSAgICAgICB1bmF2YWlsYWJsZSBpbiB0 aGlzIHZlcnNpb24gb2YgS2VybWl0IiwgdGhlbiB5b3UgbWlnaHQgd2FudCB0byBsb29rCi0gICAg ICAgYXQgdGhlIHR0Z21kbSgpIHJvdXRpbmUgaW4gWzIyNl1ja3V0aW8uYyBhbmQgYWRkIHRoZSBu ZWVkZWQgY29kZSAtLQotICAgICAgIGlmIGluZGVlZCB5b3VyIHZlcnNpb24gb2YgVW5peCBwcm92 aWRlcyBhIHdheSB0byBnZXQgbW9kZW0gc2lnbmFscwotICAgICAgIChzb21lIGRvbid0OyBlLmcu IG1vZGVtIHNpZ25hbHMgYXJlIGEgZm9yZWlnbiBjb25jZXB0IHRvIFBPU0lYLAotICAgICAgIHJl cXVpcmluZyBwb2xpdGljYWxseSBpbmNvcnJlY3Qgd29ya2Fyb3VuZHMpLgotICAgYWEuIElmIGl0 IHNheXMgIk1vZGVtIHNpZ25hbHMgdW5hdmFpbGFibGUiLCB0aGVuIGl0IGlzIGxpa2VseSB0aGF0 IHRoZQotICAgICAgIEFQSSBmb3IgZ2V0dGluZyBtb2RlbSBzaWduYWxzIGlzIHByb3ZpZGVkLCBi dXQgaXQgZG9lc24ndCBhY3R1YWxseQotICAgICAgIGRvIGFueXRoaW5nIChlLmcuIGlvY3RsKHR0 eWZkLFRJT0NNR0VULCZ4KSByZXR1cm5zIEVJTlZBTCkuCi0gICBhYi4gSW4gYW55IGNhc2UsIGl0 IHN0aWxsIHNob3VsZCBiZSBhYmxlIHRvIG1hbmlwdWxhdGUgdGhlIERUUiBzaWduYWwuCi0gICAg ICAgVG8gdGVzdCwgU0VUIExJTkUgLCBTRVQgTU9ERU0gTk9ORSwgYW5kIEhBTkdVUC4gVGhlIERU UiBsaWdodAotICAgICAgIHNob3VsZCBnbyBvdXQgbW9tZW50YXJpbHkuIElmIGl0IGRvZXNuJ3Qs IHNlZSBpZiB5b3UgY2FuIGFkZCB0aGUKLSAgICAgICBuZWVkZWQgY29kZSBmb3IgeW91ciBzeXN0 ZW0gdG8gdGhlIHR0aGFuZygpIHJvdXRpbmUgaW4KLSAgICAgICBbMjI3XWNrdXRpby5jLgotICAg YWMuIElmIHlvdXIgdmVyc2lvbiBvZiBLZXJtaXQgaGFzIHRoZSBTRVQgRkxPVyBSVFMvQ1RTIGNv bW1hbmQsIGNoZWNrCi0gICAgICAgdG8gc2VlIGlmIGl0IHdvcmtzOiBnaXZlIEtlcm1pdCB0aGlz IGNvbW1hbmQsIHNldCB5b3VyIG1vZGVtIGZvcgotICAgICAgIFJUUy9DVFMsIHRyYW5zZmVyIHNv bWUgZmlsZXMgKHVzaW5nIGJpZyBwYWNrZXQgYW5kIHdpbmRvdyBzaXplcykKLSAgICAgICBhbmQg d2F0Y2ggdGhlIFJUUyBhbmQgQ1RTIGxpZ2h0cyBvbiB0aGUgbW9kZW0uIElmIHRoZXkgZ28gb24g YW5kCi0gICAgICAgb2ZmIChhbmQgS2VybWl0IGRvZXMgbm90IGdldCBwYWNrZXQgZXJyb3JzKSwg dGhlbiBpdCB3b3Jrcy4gSWYgeW91cgotICAgICAgIHZlcnNpb24gb2YgS2VybWl0IGRvZXMgbm90 IGhhdmUgdGhpcyBjb21tYW5kLCBidXQgeW91ciB2ZXJzaW9uIG9mCi0gICAgICAgVW5peCBkb2Vz IHN1cHBvcnQgaGFyZHdhcmUgZmxvdyBjb250cm9sLCB0YWtlIGEgbG9vayBhdCB0aGUKLSAgICAg ICB0dGhmbG93KCkgY29tbWFuZCBpbiBbMjI4XWNrdXRpby5jIGFuZCBzZWUgaWYgeW91IGNhbiBh ZGQgdGhlCi0gICAgICAgbmVlZGVkIGNvZGUgKHNlZSB0aGUgc2VjdGlvbiBvbiBbMjI5XUhBUkRX QVJFIEZMT1cgQ09OVFJPTCBiZWxvdykuCi0gICAgICAgKEFuZCBwbGVhc2UgWzIzMF1zZW5kIGJh Y2sgYW55IGFkZGVkIGNvZGUsIHNvIHRoYXQgb3RoZXJzIGNhbgotICAgICAgIGJlbmVmaXQgZnJv bSBpdCBhbmQgaXQgY2FuIGJlIGNhcnJpZWQgZm9yd2FyZCBpbnRvIGZ1dHVyZQotICAgICAgIHJl bGVhc2VzLikKLSAgIGFkLiBJZiBDLUtlcm1pdCBzdGFydHMgbm9ybWFsbHkgYW5kIGlzc3VlcyBp dHMgcHJvbXB0LCBlY2hvaW5nIGlzCi0gICAgICAgbm9ybWFsLCBldGMsIGJ1dCB0aGVuIGFmdGVy IHJldHVybmluZyBmcm9tIGEgQ09OTkVDVCBzZXNzaW9uLCB0aGUKLSAgICAgICBwcm9tcHQgbm8g bG9uZ2VyIGFwcGVhcnMsIHRyeSByZWJ1aWxkaW5nIHdpdGggLURDS0NPTklOVEI0Q0IuCi0gICBh ZS4gKDguMC4yMDYgb3IgbGF0ZXIpIFR5cGUgc29tZSBjb21tYW5kcyBhdCB0aGUgQy1LZXJtaXQg cHJvbXB0LiBDYW4KLSAgICAgICB5b3UgdXNlIHRoZSBVcC1hcnJvdyBhbmQgRG93bi1hcnJvdyBr ZXlzIG9uIHlvdXIga2V5Ym9hcmQgdG8gYWNjZXNzCi0gICAgICAgS2VybWl0J3MgY29tbWFuZCBo aXN0b3J5PyBJZiBub3QsIGFuZCB5b3UncmUgYSBwcm9ncmFtbWVyLCB0YWtlIGEKLSAgICAgICBs b29rIGF0IHRoZSBVU0VfQVJST1dLRVlTIHNlY3Rpb25zIG9mIGNrdWNtZC5jLgotCi04LiBSRURV Q0lORyBUSEUgU0laRSBPRiBUSEUgRVhFQ1VUQUJMRSBQUk9HUkFNIElNQUdFCi0KLSAgIFsgWzIz MV1Ub3AgXSBbIFsyMzJdQ29udGVudHMgXSBbIFsyMzNdTmV4dCBdIFsgWzIzNF1QcmV2aW91cyBd Ci0KLSAgIEFsc28gc2VlOiBbMjM1XUMtS2VybWl0IENvbmZpZ3VyYXRpb24gT3B0aW9ucwotCi0g ICAgYS4gTWFueSBvZiBDLUtlcm1pdCdzIG9wdGlvbnMgYW5kIGZlYXR1cmVzIGNhbiBiZSBkZXNl bGVjdGVkIGF0Ci0gICAgICAgY29tcGlsZSB0aW1lLiBUaGUgZ3JlYXRlc3Qgc2F2aW5ncyBhdCB0 aGUgbGVhc3Qgc2FjcmlmaWNlIGluCi0gICAgICAgZnVuY3Rpb25hbGl0eSBpcyB0byBkaXNhYmxl IHRoZSBsb2dnaW5nIG9mIGRlYnVnIGluZm9ybWF0aW9uIGJ5Ci0gICAgICAgZGVmaW5pbmcgTk9E RUJVRyBkdXJpbmcgY29tcGlsYXRpb24uIFNlZSB0aGUgWzIzNl1Db25maWd1cmF0aW9ucwotICAg ICAgIE9wdGlvbnMgZG9jdW1lbnQgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCi0gICAgYi4gVXNl IHNoYXJlZCBsaWJyYXJpZXMgcmF0aGVyIHRoYW4gc3RhdGljIGxpbmtpbmcuIFRoaXMgaXMgdGhl Ci0gICAgICAgZGVmYXVsdCBvbiBtYW55IFVuaXggc3lzdGVtcyBhbnl3YXkuIEhvd2V2ZXIsIGV4 ZWN1dGFibGVzIGJ1aWx0IGZvcgotICAgICAgIGR5bmFtaWMgbGlua2luZyB3aXRoIHNoYXJlZCBs aWJyYXJpZXMgYXJlIGdlbmVyYWxseSBub3QgcG9ydGFibGUKLSAgICAgICBhd2F5IGZyb20gdGhl IG1hY2hpbmUgdGhleSB3ZXJlIGJ1aWx0IG9uLCBzbyB0aGlzIGlzIHJlY29tbWVuZGVkIGlmCi0g ICAgICAgdGhlIGJpbmFyeSBpcyBmb3IgeW91ciB1c2Ugb25seS4KLSAgICBjLiBNb3N0IFVuaXgg c3lzdGVtcyBoYXZlIGEgInN0cmlwIiBjb21tYW5kIHRvIHJlbW92ZSBzeW1ib2wgdGFibGUKLSAg ICAgICBpbmZvcm1hdGlvbiBmcm9tIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBpbWFnZS4gIm1hbiBz dHJpcCIgZm9yCi0gICAgICAgZnVydGhlciBpbmZvcm1hdGlvbi4gVGhlIHNhbWUgZWZmZWN0IGNh biBiZSBhY2hpZXZlZCBieSBpbmNsdWRpbmcKLSAgICAgICAiLXMiIGFtb25nIHRoZSBsaW5rIGZs YWdzIHdoZW4gYnVpbGRpbmcgQy1LZXJtaXQuCi0gICAgZC4gU0NPLCBJbnRlcmFjdGl2ZSwgYW5k IHNvbWUgb3RoZXIgVW5peCB2ZXJzaW9ucyBoYXZlIGFuICJtY3MiCi0gICAgICAgY29tbWFuZC4g Im1jcyAtZCB3ZXJtaXQiIGNhbiBiZSB1c2VkIHRvIGRlbGV0ZSB0aGUgY29udGVudHMgb2YgdGhl Ci0gICAgICAgIi5jb21tZW50IiBzZWN0aW9uIGZyb20gdGhlIGV4ZWN1dGFibGUgcHJvZ3JhbSBp bWFnZS4KLSAgICBlLiBNYW55IG1vZGVybiBvcHRpbWl6ZXJzIGNhbiBiZSBpbnN0cnVjdGVkIHRv IG9wdGltaXplIGZvciBzcGFjZQotICAgICAgIHJhdGhlciB0aGFuIGV4ZWN1dGlvbiBlZmZpY2ll bmN5LiBDaGVjayB0aGUgQ0ZMQUdTIGluIHRoZSBtYWtlZmlsZQotICAgICAgIHRhcmdldCwgYWRq dXN0IGFzIGRlc2lyZWQuCi0KLTkuIFVOSVggVkVSU0lPTlMKLQotICAgWyBbMjM3XVRvcCBdIFsg WzIzOF1Db250ZW50cyBdIFsgWzIzOV1OZXh0IF0gWyBbMjQwXVByZXZpb3VzIF0KLQotICAgU0VD VElPTiBDT05URU5UUwotCi05LjEgWzI0MV1TdGFuZGFyZHMKLSAgICAgOS4xLjEuIFsyNDJdUE9T SVgKLSAgICAgOS4xLjIuIFsyNDNdQU5TSSBDCi0gICAgIDkuMS4zLiBbMjQ0XU90aGVyIFN0YW5k YXJkcwotOS4yLiBbMjQ1XUxpYnJhcnkgSXNzdWVzCi05LjMuIFsyNDZdVW5peCBGaWxlIFN5c3Rl bSBQZWN1bGlhcml0aWVzCi05LjQuIFsyNDddSGFyZHdhcmUgRmxvdyBDb250cm9sCi05LjUuIFsy NDhdVGVybWluYWwgU3BlZWRzCi05LjYuIFsyNDldTWlsbGlzZWNvbmQgU2xlZXBzCi05LjcuIFsy NTBdTm9uZGVzdHJ1Y3RpdmUgSW5wdXQgQnVmZmVyIFBlZWtpbmcKLTkuOC4gWzI1MV1PdGhlciBT eXN0ZW0tRGVwZW5kZW50IEZlYXR1cmVzCi05LjkuIFsyNTJdVGVybWluYWwgSW50ZXJydXB0aW9u Ci0KLSAgIFRoZXJlIGFyZSBzZXZlcmFsIG1ham9yIHZhcmlldGllcyBvZiBVbml4OiBCZWxsIExh Ym9yYXRvcmllcyBTZXZlbnRoCi0gICBFZGl0aW9uLCBBVCZUIFN5c3RlbSBWLCBCZXJrZWxleSBT dGFuZGFyZCBEaXN0cmlidXRpb24gKEJTRCksIGFuZAotICAgUE9TSVguIEVhY2ggaGFzIG1hbnks IG1hbnkgc3VidmFyaWV0aWVzIGFuZCBkZXNjZW5kZW50cywgYW5kIHRoZXJlIGFyZQotICAgYWxz byBoeWJyaWRzIHRoYXQgZXhoaWJpdCBzeW1wdG9tcyBvZiB0d28gb3IgbW9yZSB2YXJpZXRpZXMs IHBsdXMKLSAgIHNwZWNpYWwgcXVpcmtzIG9mIHRoZWlyIG93bi4KLQotICAgU2V2ZW50aCBlZGl0 aW9uIHZlcnNpb25zIG9mIEMtS2VybWl0IGluY2x1ZGUgdGhlIGNvbXBpbGUtdGltZSBvcHRpb24K LSAgIC1EVjcgaW4gdGhlIENGTEFHUyBzdHJpbmcgaW4gdGhlIG1ha2VmaWxlIHRhcmdldC4gVmFy aW91cyBWNy1iYXNlZAotICAgaW1wbGVtZW50YXRpb25zIGFyZSBhbHNvIHN1cHBvcnRlZDogLURD T0hFUkVOVCwgLURNSU5JWCwgZXRjLgotCi0gICBBVCZULWJhc2VkIHZlcnNpb25zIG9mIFVuaXgg S2VybWl0IGluY2x1ZGUgdGhlIGNvbXBpbGUtdGltZSBvcHRpb24KLSAgIC1EQVRUU1YgKHN0YW5k aW5nIGZvciBBVCZtcDtUIFVuaXggU3lzdGVtIFYpLiBUaGlzIGFwcGxpZXMgdG8gU3lzdGVtCi0g ICBJSUkgYW5kIHRvIFN5c3RlbSBWIHVwIHRvIGFuZCBpbmNsdWRpbmcgUmVsZWFzZSAyLiBGb3Ig U3lzdGVtIFYgUmVsZWFzZQotICAgMywgdGhlIGZsYWcgLURTVlIzIHNob3VsZCBiZSB1c2VkIGlu c3RlYWQgKHdoaWNoIGFsc28gaW1wbGllcyAtREFUVFNWKS4KLSAgIFRoaXMgaXMgYmVjYXVzZSB0 aGUgZGF0YSB0eXBlIG9mIHNpZ25hbCgpIGFuZCBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucwotICAg d2FzIGNoYW5nZWQgYmV0d2VlbiBTVlIyIGFuZCBTVlIzLiBGb3IgU3lzdGVtIFYgUmVsZWFzZSA0 LCBpbmNsdWRlCi0gICAtRFNWUjQgYmVjYXVzZSBvZiBjaGFuZ2VzIGluIFVVQ1AgbG9ja2ZpbGUg Y29udmVudGlvbnM7IHRoaXMgYWxzbwotICAgaW1wbGllcyAtRFNWUjMgYW5kIC1EQVRUU1YuCi0K LSAgIEZvciBCU0QsIHRoZSBmbGFnIC1CU0R4eCBtdXN0IGJlIGluY2x1ZGVkLCB3aGVyZSB4eCBp cyB0aGUgQlNEIHZlcnNpb24KLSAgIG51bWJlciwgZm9yIGV4YW1wbGUgQlNENCAoZm9yIHZlcnNp b24gNC4yIG9yIGxhdGVyLCB1c2luZyBvbmx5IDQuMgotICAgZmVhdHVyZXMpLCAtREJTRDQxIChm b3IgQlNEIDQuMSBvbmx5KSwgLURCU0Q0MyAoZm9yIDQuMyksIC1EQlNEMjkgKEJTRAotICAgMi45 IGZvciBERUMgUERQLTExcykuIC1EQlNENDQgaXMgZm9yIDQuNEJTRCwgd2hpY2ggaXMgdGhlIGJh c2lzIG9mCi0gICBGcmVlQlNELCBOZXRCU0QsIE9wZW5CU0QsIEJTREksIGFuZCBNYWMgT1MgWCwg YW5kIHdoaWNoIGNvbnRhaW5zIG1hbnkKLSAgIFBPU0lYIGZlYXR1cmVzLCBhbmQgaGFzIGxpdHRs ZSByZWxhdGlvbiB0byA0LjNCU0QgYW5kIGVhcmxpZXIuCi0KLSAgIEZvciBQT1NJWCwgaW5jbHVk ZSB0aGUgZmxhZyAtRFBPU0lYLiBQT1NJWCBkZWZpbmVzIGEgd2hvbGUgbmV3IHNldCBvZgotICAg dGVybWluYWwgaS9vIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgZm91bmQgaW4gdHJhZGl0aW9uYWwg QVQmVCBvcgotICAgQmVya2VsZXkgaW1wbGVtZW50YXRpb25zLCBhbmQgYWxzbyBkZWZpbmVzIHRo ZSBzeW1ib2wgX1BPU0lYX1NPVVJDRSwKLSAgIHdoaWNoIGlzIHVzZWQgaW4gbWFueSBzeXN0ZW0g YW5kIGxpYnJhcnkgaGVhZGVyIGZpbGVzLCBtYWlubHkgdG8KLSAgIGRpc2FibGUgbm9uLVBPU0lY IChpLmUuIHVzZWZ1bCkgZmVhdHVyZXMuCi0KLSAgIE5vdGUgKGNpcmNhIDE5OTcpOiBJbiBvcmRl ciB0byBlbmFibGUgc2VyaWFsIHNwZWVkcyBoaWdoZXIgdGhhbiAzODQwMAotICAgYnBzLCBpdCBp cyBnZW5lcmFsbHkgbmVjZXNzYXJ5IHRvIGFkZCAtRFBPU0lYIChhbW9uZyBvdGhlciB0aGluZ3Mp LAotICAgc2luY2UgdGhlIG9sZGVyIHRlcm1pbmFsIEFQSXMgY2FuIG5vdCBhY2NvbW1vZGF0ZSB0 aGUgbmV3IHNwZWVkcyAtLSBvdXQKLSAgIG8nIGJpdHMuIEJ1dCB0aGlzIG9mdGVuIGFsc28gbWVh bnMgd2hvbGVzYWxlIGNvbnZlcnNpb24gdG8gUE9TSVggQVBJcy4KLSAgIEluIGdlbmVyYWwsIGp1 c3QgdHJ5IGFkZGluZyAtRFBPU0lYIGFuZCB0aGVuIHNlZSB3aGF0IGdvZXMgd3JvbmcuIEJlCi0g ICB3YXJ5IG9mIGZlYXR1cmVzIGRpc2FwcGVhcmluZzogd2hlbiBfUE9TSVhfU09VUkNFIGlzIGRl ZmluZWQsIGFsbCBzb3J0cwotICAgb2YgdGhpbmdzIHRoYXQgd2VyZSBwZXJmZWN0bHkgT0sgYmVm b3JlIHN1ZGRlbmx5IGJlY29tZSBwb2xpdGljYWxseQotICAgaW5jb3JyZWN0IC0tIGxpa2UgcmVh ZGluZyBtb2RlbSBzaWduYWxzLCBkb2luZyBoYXJkd2FyZSBmbG93IGNvbnRyb2wsCi0gICBldGMu IFBPU0lYIHdhcyBldmlkZW50bHkgbm90IGRlc2lnbmVkIHdpdGggc2VyaWFsIGNvbW11bmljYXRp b24gaW4KLSAgIG1pbmQhCi0KLSAgIENhc2UgaW4gcG9pbnQ6IEluIFVuaXhXYXJlIDcuMCwgI2Rl ZmluZSdpbmcgUE9TSVggY2F1c2VzIHN0cmljdG5lc3MKLSAgIGNsYXVzZXMgaW4gdGhlIGhlYWRl ciBmaWxlcyB0byB0YWtlIGVmZmVjdC4gVGhlc2UgcHJldmVudCA8c3lzL3RpbWUuaD4KLSAgIGZy b20gZGVmaW5pbmcgdGhlIHRpbWV2YWwgYW5kIHRpbWV6b25lIHN0cnVjdHMsIHdoaWNoIGFyZSBu ZWVkZWQgZm9yCi0gICBhbGwgc29ydHMgb2YgdGhpbmdzIChsaWtlIHNlbGVjdCgpKS4gVGh1cywg aWYgd2Ugd2FudCB0aGUgaGlnaCBzZXJpYWwKLSAgIHNwZWVkcywgd2UgaGF2ZSB0byBjaXJjdW12 ZW50IHRoZSBQT1NJWCBjbGF1c2VzLgotCi0gICBTaW1pbGFybHkgaW4gU0NPIE9wZW5TZXJ2ZXIg UjUuMC40IHdoZXJlLCBhZ2Fpbiwgd2UgbXVzdCB1c2UgdGhlIFBPU0lYCi0gICBBUElzIHRvIGdl dCBhdCBzZXJpYWwgc3BlZWRzIGhpZ2hlciB0aGFuIDM4NDAwLCBidXQgdGhlbiBkb2luZyBzbwot ICAgcmVtb3ZlcyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgLS0ganVzdCB3aGVuIHdlIG5lZWQgaXQg bW9zdCEgSW4gY2FzZXMKLSAgIGxpa2UgdGhpcywgZGlydHkgdHJpY2tzIGFyZSB0aGUgb25seSBy ZWNvdXJzZSAoc2VhcmNoIGZvciBTQ09fT1NSNTA0IGluCi0gICBbMjUzXWNrdXRpby5jIGZvciBl eGFtcGxlcykuCi0KLSAgIEZvciByZWFzb25zIGxpa2UgdGhpcywgVW5peCBpbXBsZW1lbnRhdGlv bnMgdGVuZCB0byBiZSBuZWl0aGVyIHB1cmUKLSAgIEFUJlQgbm9yIHB1cmUgQlNEIG5vciBwdXJl IFBPU0lYLCBidXQgYSBtaXh0dXJlIG9mIHR3byBvciBtb3JlIG9mCi0gICB0aGVzZSwgd2l0aCAi Y29tcGF0aWJpbGl0eSBmZWF0dXJlcyIgYWxsb3dpbmcgZGlmZmVyZW50IHZhcmlldGllcyBvZgot ICAgcHJvZ3JhbXMgdG8gYmUgYnVpbHQgb24gdGhlIHNhbWUgY29tcHV0ZXIuIEluIGdlbmVyYWws IEtlcm1pdCB0cmllcyBub3QKLSAgIHRvIG1peCBhbmQgbWF0Y2ggYnV0IHRvIGtlZXAgYSBjb25z aXN0ZW50IHJlcGVydG9pcmUgdGhyb3VnaG91dC4KLSAgIEhvd2V2ZXIsIHRoZXJlIGFyZSBjZXJ0 YWluIFVuaXggaW1wbGVtZW50YXRpb25zIHRoYXQgb25seSB3b3JrIHdoZW4geW91Ci0gICBtaXgg YW5kIG1hdGNoLiBGb3IgZXhhbXBsZSwgdGhlIFNpbGljb24gR3JhcGhpY3MgSVJJWCBvcGVyYXRp bmcgc3lzdGVtCi0gICAocHJpb3IgdG8gdmVyc2lvbiAzLjMpIGlzIGFuIEFUJlQgVW5peCBidXQg d2l0aCBhIEJTRCBmaWxlIHN5c3RlbS4gVGhlCi0gICBvbmx5IHdheSB5b3UgY2FuIGJ1aWxkIEtl cm1pdCBzdWNjZXNzZnVsbHkgZm9yIHRoaXMgY29uZmlndXJhdGlvbiBpcyB0bwotICAgaW5jbHVk ZSAtRFNWUjMgcGx1cyB0aGUgc3BlY2lhbCBvcHRpb24gLURMT05HRk4sIG1lYW5pbmcgInByZXRl bmQgSSB3YXMKLSAgIGJ1aWx0IHdpdGggLURCU0R4eCB3aGVuIGl0J3MgdGltZSB0byBjb21waWxl IGZpbGUtcmVsYXRlZCBjb2RlIi4gU2VlCi0gICB0aGUgImlyaXMiIG1ha2VmaWxlIHRhcmdldC4K LQotOS4xLiBTdGFuZGFyZHMKLQotICAgWyBbMjU0XVRvcCBdIFsgWzI1NV1TZWN0aW9uIENvbnRl bnRzIF0gWyBbMjU2XUNvbnRlbnRzIF0gWyBbMjU3XU5leHQgXQotCi0gICBTVUJTRUNUSU9OIENP TlRFTlRTCi0KLTkuMS4xLiBbMjU4XVBPU0lYCi05LjEuMi4gWzI1OV1BTlNJIEMKLTkuMS4zLiBb MjYwXU90aGVyIFN0YW5kYXJkcwotCi0gICBJbiBlZGl0cyAxNjYtMTY3ICgxOTg4LTg5KSwgQy1L ZXJtaXQgd2FzIGhlYXZpbHkgbW9kaWZpZWQgdG8gdHJ5IHRvCi0gICBrZWVwIGFicmVhc3Qgb2Yg bmV3IHN0YW5kYXJkcyB3aGlsZSBzdGlsbCByZW1haW5pbmcgY29tcGF0aWJsZSB3aXRoIG9sZAot ICAgdmVyc2lvbnMgb2YgQyBhbmQgVW5peC4gVGhlcmUgYXJlIHR3byBuZXcgc3RhbmRhcmRzIG9m IGludGVyZXN0OiBBTlNJIEMKLSAgIChhcyBkZXNjcmliZWQgaW4gS2VybmlnaGFuIGFuZCBSaXRj aGllLCAiVGhlIEMgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UiLAotICAgU2Vjb25kIEVkaXRpb24sIFBy ZW50aWNlIEhhbGwsIDE5ODgpIGFuZCBQT1NJWC4xIChJRUVFIFN0YW5kYXJkIDEwMDMuMQotICAg YW5kIElTTy9JRUMgOTk0NS0xLCAxOTkwLCAiUG9ydGFibGUgT3BlcmF0aW5nIFN5c3RlbSBJbnRl cmZhY2UiKS4gVGhlc2UKLSAgIHR3byBzdGFuZGFyZHMgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGgg ZWFjaCBvdGhlcjogeW91IGNhbiBidWlsZAotICAgQy1LZXJtaXQgd2l0aCBhIG5vbi1BTlNJIGNv bXBpbGVyIGZvciBhIFBPU0lYIHN5c3RlbSwgb3IgZm9yIGEKLSAgIG5vbi1QT1NJWCBzeXN0ZW0g d2l0aCB3aXRoIGFuIEFOU0kgY29tcGlsZXIuCi0KLTkuMS4xLiBQT1NJWAotCi0gICBQT1NJWC4x IGRlZmluZXMgYSByZXBlcnRvaXJlIG9mIHN5c3RlbSBmdW5jdGlvbnMgYW5kIGhlYWRlciBmaWxl cyBmb3IKLSAgIHVzZSBieSBDIGxhbmd1YWdlIHByb2dyYW1zLiBNb3N0IG5vdGFibHksIHRoZSBp b2N0bCgpIGZ1bmN0aW9uIGlzIG5vdAotICAgYWxsb3dlZCBpbiBQT1NJWDsgYWxsIGlvY3RsKCkg ZnVuY3Rpb25zIGhhdmUgYmVlbiByZXBsYWNlZCBieQotICAgZGV2aWNlLXNwZWNpZmljIGZ1bmN0 aW9ucyBsaWtlIHRjc2V0YXR0cigpLCB0Y3NlbmRicmVhaygpLCBldGMuCi0KLSAgIENvbXB1dGVy IHN5c3RlbXMgdGhhdCBjbGFpbSBzb21lIGRlZ3JlZSBvZiBQT1NJWCBjb21wbGlhbmNlIGhhdmUg bWFkZQotICAgc29tZSBhdHRlbXB0IHRvIHB1dCB0aGVpciBoZWFkZXIgZmlsZXMgaW4gdGhlIHJp Z2h0IHBsYWNlcyBhbmQgZ2l2ZQotICAgdGhlbSB0aGUgcmlnaHQgbmFtZXMsIGFuZCB0byBwcm92 aWRlIHN5c3RlbSBsaWJyYXJ5IGZ1bmN0aW9ucyB3aXRoIHRoZQotICAgcmlnaHQgbmFtZXMgYW5k IGNhbGxpbmcgY29udmVudGlvbnMuIFdpdGhpbiB0aGUgaGVhZGVyIGZpbGVzLAotICAgUE9TSVgt Y29tcGxpYW50IGZ1bmN0aW9ucyBhcmUgc3VwcG9zZWQgdG8gYmUgd2l0aGluICNpZmRlZgotICAg X1BPU0lYX1NPVVJDRS4uI2VuZGlmIGNvbmRpdGlvbmFscywgYW5kIG5vbi1QT1NJWCBpdGVtcyBh cmUgbm90IHdpdGhpbgotICAgdGhlc2UgY29uZGl0aW9uYWxzLgotCi0gICBJZiBLZXJtaXQgaXMg YnVpbHQgd2l0aCBuZWl0aGVyIC1EX1BPU0lYX1NPVVJDRSBub3IgLURQT1NJWCwgdGhlCi0gICBm dW5jdGlvbnMgYW5kIGhlYWRlciBmaWxlcyBvZiB0aGUgc2VsZWN0ZWQgdmVyc2lvbiBvZiBVbml4 IChvciBWTVMsCi0gICBldGMpIGFyZSB1c2VkIGFjY29yZGluZyB0byB0aGUgQ0ZMQUdTIEtlcm1p dCB3YXMgYnVpbHQgd2l0aC4KLQotICAgSWYgS2VybWl0IGlzIGJ1aWx0IHdpdGggLURfUE9TSVhf U09VUkNFIGJ1dCBub3QgLURQT1NJWCwgdGhlbiBvbmUgb2YKLSAgIHRoZSAtREJTRCBvciAtREFU VFNWIGZsYWdzIChvciBvbmUgdGhhdCBpbXBsaWVzIHRoZW0pIG11c3QgYWxzbyBiZQotICAgZGVm aW5lZCwgYnV0IGl0IHN0aWxsIHVzZXMgb25seSB0aGUgUE9TSVggZmVhdHVyZXMgaW4gdGhlIHN5 c3RlbSBoZWFkZXIKLSAgIGZpbGVzLiBUaGlzIGFsbG93cyBDLUtlcm1pdCB0byBiZSBidWlsdCBv biBCU0Qgb3IgQVQmVCBzeXN0ZW1zIHRoYXQKLSAgIGhhdmUgc29tZSBkZWdyZWUgb2YgUE9TSVgg Y29tcGxpYW5jZSwgYnV0IHN0aWxsIHVzZSBCU0Qgb3IgQVQmVAotICAgc3BlY2lmaWMgZmVhdHVy ZXMuCi0KLSAgIFRoZSBkaWxlbW1hIGlzIHRoaXM6IGl0IGlzIG9mdGVuIG5lY2Vzc2FyeSB0byBk ZWZpbmUgX1BPU0lYX1NPVVJDRSB0bwotICAgZ2V0IGF0IG5ldyBvciBtb2Rlcm4gZmVhdHVyZXMs IHN1Y2ggYXMgaGlnaCBzZXJpYWwgc3BlZWRzIGFuZCB0aGUgQVBJcwotICAgdG8gZGVhbCB3aXRo IHRoZW0uIEJ1dCBkZWZpbmluZyBfUE9TSVhfU09VUkNFIGFsc28gaGlkZXMgb3RoZXIgQVBJcwot ICAgdGhhdCBLZXJtaXQgbmVlZHMsIGZvciBleGFtcGxlIHRoZSBvbmVzIGRlYWxpbmcgd2l0aCBt b2RlbSBzaWduYWxzCi0gICAob3RoZXJzIGFyZSBsaXN0ZWQganVzdCBiZWxvdykuIFRodXMgYWxs IHNvcnRzIG9mIGhpZGVvdXMgY29udG9ydGlvbnMKLSAgIGFyZSBvZnRlbiByZXF1aXJlZCB0byBn ZXQgYSBmdWxsIHNldCBvZiBmZWF0dXJlcy4KLQotICAgVGhlIFBPU0lYIHN0YW5kYXJkIGRvZXMg bm90IGRlZmluZSBhbnl0aGluZyBhYm91dCB1dWNwIGxvY2tmaWxlcy4gIm1ha2UKLSAgIHBvc2l4 IiB1c2VzIE5PIChyZXBlYXQsIE5PKSBsb2NrZmlsZSBjb252ZW50aW9ucy4gSWYgeW91cgotICAg UE9TSVgtY29tcGxpYW50IFVuaXggdmVyc2lvbiB1c2VzIGEgbG9ja2ZpbGUgY29udmVudGlvbiBz dWNoIGFzIEhEQlVVQ1AKLSAgIChzZWUgYmVsb3cpLCB1c2UgdGhlICJwb3NpeCIgZW50cnksIGJ1 dCBpbmNsdWRlIHRoZSBhcHByb3ByaWF0ZQotICAgbG9ja2ZpbGUgb3B0aW9uIGluIHlvdXIgS0ZM QUdTIG9uIHRoZSAibWFrZSIgY29tbWFuZCBsaW5lLCBmb3IgZXhhbXBsZToKLQotbWFrZSBwb3Np eCAiS0ZMQUdTPS1ESERCVVVDUCIKLQotICAgUE9TSVguMSBhbHNvIGxhY2tzIGNlcnRhaW4gb3Ro ZXIgZmVhdHVyZXMgdGhhdCBLZXJtaXQgbmVlZHMuIEZvcgotICAgZXhhbXBsZToKLQotICAgICAq IFRoZXJlIGlzIG5vIGRlZmluZWQgd2F5IGZvciBhbiBhcHBsaWNhdGlvbiB0byBkbyB3aWxkY2Fy ZCBtYXRjaGluZwotICAgICAgIG9mIGZpbGVuYW1lcy4gS2VybWl0IHVzZXMgdGhlIGlub2RlIGlu IHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLCBidXQKLSAgICAgICBQT1NJWC4xIGRvZXMgbm90IGlu Y2x1ZGUgdGhpcyBjb25jZXB0LiAoTGF0ZXIgUE9TSVggcmV2aXNpb25zCi0gICAgICAgaW5jbHVk ZSBmdW5jdGlvbnMgbmFtZWQgKEkgdGhpbmspIGdsb2IoKSBhbmQgZm5tYXRjaCgpLCBidXQgdGhl c2UKLSAgICAgICBmdW5jdGlvbnMgYXJlIG5vdCB5ZXQgaW4gS2VybWl0LCBhbmQgbWlnaHQgbm90 IGJlIGFwcHJvcHJpYXRlIGluCi0gICAgICAgYW55IGNhc2UuKQotICAgICAqIFRoZXJlIGlzIG5v IFBPU0lYIG1lY2hhbmlzbSBmb3Igc2Vuc2luZyBvciBjb250cm9sbGluZyBtb2RlbQotICAgICAg IHNpZ25hbHMsIG5vciB0byBlbmFibGUgUlRTL0NUUyBvciBvdGhlciBoYXJkd2FyZSBmbG93IGNv bnRyb2wuCi0gICAgICogVGhlcmUgaXMgbm8gc2VsZWN0KCkgZm9yIG11bHRpcGxleGluZyBpL28s IGFuZCB0aGVyZWZvcmUgbm8gVENQL0lQLgotICAgICAqIFRoZXJlIGlzIG5vIHdheSB0byBjaGVj ayBpZiBjaGFyYWN0ZXJzIGFyZSB3YWl0aW5nIGluIGEKLSAgICAgICBjb21tdW5pY2F0aW9ucyBk ZXZpY2UgKG9yIGNvbnNvbGUpIGlucHV0IGJ1ZmZlciwgc2hvcnQgb2YgdHJ5aW5nIHRvCi0gICAg ICAgcmVhZCB0aGVtIC0tIG5vIHNlbGVjdCgpLCBpb2N0bChmZCxGSU9OUkVBRCxibGFoKSwgcmRj aGsoKSwgZXRjLgotICAgICAgIFRoaXMgaXMgYmFkIGZvciBDT05ORUNUIG1vZGUgYW5kIGJhZCBm b3Igc2xpZGluZyB3aW5kb3dzLgotICAgICAqIE5vIHdheSB0byBkbyBhIG1pbGxpc2Vjb25kIHNs ZWVwIChubyBuYXAoKSwgdXNsZWVwKCksIHNlbGVjdCgpLAotICAgICAgIGV0YykuCi0gICAgICog VGhlcmUgaXMgbm8gcG9wZW4oKS4KLQotICAgU28gYXQgdGhpcyBwb2ludCwgdGhlcmUgY2Fubm90 IGJlIG9uZSBzaW5nbGUgZnVsbHkgZnVuY3Rpb25hbCBQT1NJWAotICAgZm9ybSBvZiBDLUtlcm1p dCB1bmxlc3MgaXQgYWxzbyBoYXMgImV4dGVuc2lvbnMiLCBhcyBkbyBMaW51eCwgUU5YLAotICAg ZXRjLgotCi0gICBNb3JlIG9uIFBPU0lYIChxdW90aW5nIGZyb20gYSBuZXdzZ3JvdXAgcG9zdGlu ZyBieSBEYXZlIEJ1dGVuaG9mKToKLQotICAgICBTdGFuZGFyZHMgdGVuZCB0byBsb29rIGF0IHRo ZW1zZWx2ZXMgYXMgImVuYWJsaW5nIi4gU28gUE9TSVgKLSAgICAgc3RhbmRhcmRzIHNheSB0aGF0 LCBpbiBvcmRlciB0byB1c2UgUE9TSVggZnVuY3Rpb25zLCBhIHByb2dyYW0gbXVzdAotICAgICBk ZWZpbmUgc29tZSBtYWNybyB0aGF0IHdpbGwgcHV0IHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVu dCBpbgotICAgICAiUE9TSVggbW9kZSIuIEZvciB0aGUgYW5jaWVudCBQT1NJWCAxMDAzLjEtMTk5 MCwgdGhlIHN5bWJvbCBpcwotICAgICBfUE9TSVhfU09VUkNFLiBGb3IgcmVjZW50IHJldmlzaW9u cywgaXQncyBfUE9TSVhfQ19TT1VSQ0Ugd2l0aCBhbgotICAgICBhcHByb3ByaWF0ZSB2YWx1ZS4g UE9TSVggMTAwMy4xLTE5OTYgc2F5cyB0aGF0LCB0byB1c2UgaXRzIGZlYXR1cmVzCi0gICAgIGlu IGEgcG9ydGFibGUgbWFubmVyLCB5b3UgbXVzdCBkZWZpbmUgX1BPU0lYX0NfU09VUkNFPTE5OTUw NkwgYmVmb3JlCi0gICAgIGluY2x1ZGluZyBhbnkgaGVhZGVyIGZpbGVzLgotCi0gICAgIEJ1dCBm b3IgU29sYXJpcywgb3IgRGlnaXRhbCBVbml4LCB0aGUgcGljdHVyZSBpcyBkaWZmZXJlbnQuIFBP U0lYIGlzCi0gICAgIG9uZSBpbXBvcnRhbnQgYnV0IHNtYWxsIHBhcnQgb2YgdGhlIHVuaXZlcnNl LiBZZXQgUE9TSVgKLSAgICAgdW5jb25kaXRpb25hbGx5IGFuZCB1bmFtYmlndW91c2x5IFJFUVVJ UkVTIHRoYXQsIHdoZW4KLSAgICAgX1BPU0lYX0NfU09VUkNFPTE5OTUwNkwsIEFMTCBvZiB0aGUg ZnVuY3Rpb25zIGFuZCBkZWZpbml0aW9ucwotICAgICByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQs IGFuZCBOTyBvdGhlcnMgKGV4Y2VwdCBpbiBzcGVjaWZpYwotICAgICByZXN0cmljdGVkIG5hbWVz cGFjZXMsIHNwZWNpZmljYWxseSAiXyIgZm9sbG93ZWQgYnkgYW4gdXBwZXJjYXNlCi0gICAgIGxl dHRlciBvciAiX18iIGZvbGxvd2VkIGJ5IGEgbG93ZXJjYXNlIGxldHRlcikgc2hhbGwgYmUgdmlz aWJsZS4KLSAgICAgVGhhdCBraW5kYSBwdXRzIGEgY3JhbXAgb24gQlNEIGFuZCBTVklEIHN1cHBv cnQsIGJlY2F1c2UgdGhvc2UKLSAgICAgcmVxdWlyZSBuYW1lcyB0aGF0IGFyZSBub3QgaW4gdGhl ICJwcm90ZWN0ZWQiIFBPU0lYIG5hbWVzcGFjZXMuIEl0J3MKLSAgICAgSUxMRUdBTCB0byBtYWtl IHRob3NlIHN5bWJvbHMgdmlzaWJsZSwgdW5sZXNzIHlvdSd2ZSBkb25lIHNvbWV0aGluZwotICAg ICBlbHNlIHRoYXQncyBiZXlvbmQgdGhlIHNjb3BlIG9mIFBPU0lYIHRvIGFsbG93IHRoZSBzeXN0 ZW0gdG8gaW5mZXIKLSAgICAgdGhhdCB5b3UgZGlkbid0IHJlYWxseSBtZWFuIGl0LgotCi0gICAg IEluIG1vc3QgY2FzZXMsIHlvdSBzaG91bGQganVzdCBjb21waWxlLCB3aXRoIG5vIHN0YW5kYXJk cy1yZWxhdGVkCi0gICAgIG1hY3JvcyBkZWZpbmVkLiBUaGUgc3lzdGVtIHdpbGwgbWFrZSBhdmFp bGFibGUgZXZlcnkgaW50ZXJmYWNlIGFuZAotICAgICBkZWZpbml0aW9uIHRoYXQgaXNuJ3QgaW5j b21wYXRpYmxlIHdpdGggdGhlICJtYWluIHN0cmVhbSIuIFRoZXJlIG1heQotICAgICBpbmRlZWQg YmUgY2FzZXMgd2hlcmUgdHdvIHN0YW5kYXJkcyBjcm9zcywgYW5kIHlvdSByZWFsbHkgY2FuJ3Qg dXNlCi0gICAgIGJvdGggdG9nZXRoZXIuIEJ1dCwgaW4gZ2VuZXJhbCwgdGhleSBwbGF5IG5pY2Vs eSB0b2dldGhlciBhcyBsb25nIGFzCi0gICAgIHlvdSBkb24ndCBkbyBhbnl0aGluZyByYXNoIC0t IGxpa2UgdGVsbGluZyB0aGUgc3lzdGVtIHRoYXQgaXQncyBub3QKLSAgICAgYWxsb3dlZCB0byBs ZXQgdGhlbS4KLQotICAgICBJbiB0aGUgYXJlYSBvZiB0aHJlYWRzLCBib3RoIFNvbGFyaXMgYW5k IERpZ2l0YWwgVW5peCBzdXBwb3J0Ci0gICAgIGluY29tcGF0aWJsZSB0aHJlYWQgQVBJcy4gV2Ug aGF2ZSBQT1NJWCBhbmQgRENFLCB0aGV5IGhhdmUgUE9TSVggYW5kCi0gICAgIFVJLiBUaGUgbmFz dHkgYXJlYXMgYXJlIGluIHRoZSBfciByb3V0aW5lcyBhbmQgaW4gc29tZSBhc3BlY3RzIG9mCi0g ICAgIHNpZ25hbCBiZWhhdmlvci4gWW91IGNhbm5vdCBjb21waWxlIGEgc2luZ2xlIHNvdXJjZSBm aWxlIHRoYXQgdXNlcwotICAgICBib3RoIHNlbWFudGljcy4gVGhhdCdzIGxpZmUuIEl0IHNvdW5k cyBhcyBpZiBTb2xhcmlzIGRlZmF1bHRzIHRvIHRoZQotICAgICBVSSB2YXJpYW50cywgYnV0IGFs bG93cyB5b3UgdG8gZGVmaW5lIHRoaXMgX1BPU0lYX1RIUkVBRF9TRU1BTlRJQ1MKLSAgICAgdG8g Z2V0IGFyb3VuZCBpdC4gV2UgZGVmYXVsdCB0byBQT1NJWCwgYW5kIGFsbG93IHlvdSB0byBkZWZp bmUKLSAgICAgX1BUSFJFQURfVVNFX0Q0IChhdXRvbWF0aWNhbGx5IGRlZmluZWQgYnkgdGhlIGNj ICItdGhyZWFkcyIgc3dpdGNoKQotICAgICB0byBzZWxlY3QgdGhlIERDRSB0aHJlYWQgdmFyaWFu dHMuIFRoYXQgZGVmYXVsdCwgYmVjYXVzZSB5b3UncmUKLSAgICAgb3BlcmF0aW5nIG91dHNpZGUg b2YgYW55IGluZGl2aWR1YWwgc3RhbmRhcmQsIGlzIHJlYWxseSBqdXN0IGEKLSAgICAgbWFya2V0 aW5nIGRlY2lzaW9uLgotCi05LjEuMi4gQU5TSSBDCi0KLSAgIFsgWzI2MV1Ub3AgXSBbIFsyNjJd Q29udGVudHMgXSBbIFsyNjNdU2VjdGlvbiBDb250ZW50cyBdIFsKLSAgIFsyNjRdU3Vic2VjdGlv biBDb250ZW50cyBdIFsgWzI2NV1OZXh0IF0gWyBbMjY2XVByZXZpb3VzIF0KLQotICAgVGhlIG1h am9yIGRpZmZlcmVuY2UgYmV0d2VlbiBBTlNJIEMgYW5kIGVhcmxpZXIgQyBjb21waWxlcnMgaXMg ZnVuY3Rpb24KLSAgIHByb3RvdHlwaW5nLiBBTlNJIEMgYWxsb3dzIGZ1bmN0aW9uIGFyZ3VtZW50 cyB0byBiZSBjaGVja2VkIGZvciB0eXBlCi0gICBhZ3JlZW1lbnQsIGFuZCAod2hlbiBwb3NzaWJs ZSkgdHlwZSBjb2VyY2lvbiBpbiB0aGUgZXZlbnQgb2YgYQotICAgbWlzbWF0Y2guIEZvciB0aGlz IHRvIHdvcmssIGZ1bmN0aW9ucyBhbmQgdGhlaXIgYXJndW1lbnRzIG11c3QgYmUKLSAgIGRlY2xh cmVkIGJlZm9yZSB0aGV5IGFyZSBjYWxsZWQuIFRoZSBmb3JtIGZvciBmdW5jdGlvbiBkZWNsYXJh dGlvbnMgaXMKLSAgIGRpZmZlcmVudCBpbiBBTlNJIEMgYW5kIG5vbi1BTlNJIEMgKEFOU0kgQyBh bHNvIGFjY2VwdHMgdGhlIGVhcmxpZXIKLSAgIGZvcm0sIGJ1dCB0aGVuIGRvZXMgbm90IGRvIHR5 cGUgY2hlY2tpbmcpLgotCi0gICBBcyBvZiBlZGl0IDE2NywgQy1LZXJtaXQgdHJpZXMgdG8gdGFr ZSBmdWxsIGFkdmFudGFnZSBvZiBBTlNJIEMKLSAgIGZlYXR1cmVzLCBlc3BlY2lhbGx5IGZ1bmN0 aW9uIHByb3RvdHlwaW5nLiBUaGlzIHJlbW92ZXMgbWFueSBidWdzCi0gICBpbnRyb2R1Y2VkIGJ5 IGRpZmZlcmluZyBkYXRhIHR5cGVzIHVzZWQgb3IgcmV0dXJuZWQgYnkgdGhlIHNhbWUKLSAgIGZ1 bmN0aW9ucyBvbiBkaWZmZXJlbnQgY29tcHV0ZXJzLiBBTlNJIEMgZmVhdHVyZXMgYXJlIGF1dG9t YXRpY2FsbHkKLSAgIGVuYWJsZWQgd2hlbiB0aGUgc3ltYm9sIF9fU1REQ19fIGlzIGRlZmluZWQu IE1vc3QgQU5TSSBDIGNvbXBpbGVycywKLSAgIHN1Y2ggYXMgR05VIENDIGFuZCB0aGUgbmV3IERF QyBDIGNvbXBpbGVyIGRlZmluZSB0aGlzIHN5bWJvbAotICAgaW50ZXJuYWxseS4KLQotICAgT24g dGhlIGRvd25zaWRlLCBBTlNJIEMgY29tcGlsYXRpb24gaW5jcmVhc2VzIHRoZQotICAgYWRtaW5p c3RyYXRpdmUvYnVyZWF1Y3JhdGljIGJ1cmRlbiwgc3Bld2luZyBvdXQgY291bnRsZXNzIHVubmVl ZGVkCi0gICB3YXJuaW5ncyBhYm91dCBtaXNtYXRjaGVkIHR5cGVzLCBlc3BlY2lhbGx5IHdoZW4g d2UgYXJlIGRlYWxpbmcgd2l0aAotICAgc2lnbmVkIGFuZCB1bnNpZ25lZCBjaGFyYWN0ZXJzLCBy ZXF1aXJpbmcgY2FzdHMgZXZlcnl3aGVyZSB0byBzaHV0IHVwCi0gICB0aGUgbWluZGxlc3MgY29t cGxhaW50cyAtLSB0aGVyZSBpcyBubyB1c2UgZm9yIHNpZ25lZCBjaGFycyBpbiBLZXJtaXQKLSAg IChvciBwcm9iYWJseSBhbnl3aGVyZSBlbHNlKS4gU29tZSBjb21waWxlcnMsIG1lcmNpZnVsbHks IGluY2x1ZGUgYQotICAgInRyZWF0IGFsbCBjaGFycyBhcyB1bnNpZ25lZCIgb3B0aW9uLCBhbmQg d2hlbiBhdmFpbGFibGUgaXQgc2hvdWxkIGJlCi0gICB1c2VkIC0tIG5vdCBvbmx5IHRvIHN0b3Ag dGhlIHdhcm5pbmdzLCBidXQgYWxzbyB0byBhdm9pZCB1bmhlbHBmdWwgc2lnbgotICAgZXh0ZW5z aW9uIG9uIGhpZ2gtYml0IGNoYXJhY3RlcnMuCi0KLSAgIFRvIGZvcmNlIHVzZSBvZiBBTlNJIEMg cHJvdG90eXBlcywgaW5jbHVkZSAtRENLX0FOU0lDIG9uIHRoZSBjYyBjb21tYW5kCi0gICBsaW5l LiBUbyBkaXNhYmxlIHRoZSB1c2Ugb2YgQU5TSSBwcm90b3R5cGVzLCBpbmNsdWRlIC1ETk9BTlNJ LgotCi05LjEuMy4gT3RoZXIgU3RhbmRhcmRzCi0KLSAgIFsgWzI2N11Ub3AgXSBbIFsyNjhdQ29u dGVudHMgXSBbIFsyNjldU2VjdGlvbiBDb250ZW50cyBdIFsKLSAgIFsyNzBdU3Vic2VjdGlvbiBD b250ZW50cyBdIFsgWzI3MV1OZXh0IF0gWyBbMjcyXVByZXZpb3VzIF0KLQotICAgQXMgdGhlIHll YXJzIGdvIGJ5LCBzdGFuZGFyZHMgd2l0aC13aGljaC1hbGwtbXVzdC1jb21wbHkgY29udGludWUg dG8KLSAgIHBpbGUgdXA6IEFFUywgWFBHMiwgWFBHMywgWFBHNCwgRklQUyAxNTEtMiwgc3VjY2Vz c2l2ZSBnZW5lcmF0aW9ucyBvZgotICAgUE9TSVgsIE9TRi8xLCBYL09wZW4sIFNwZWMgMTE3MCwg VU5JWDk1LCBPcGVuIEdyb3VwIFVOSVg5OCwgSVNPL0lFQwotICAgOTk0NSBwYXJ0cyAxLTQsIElT TyA5ODk5LCA4OE9wZW4sIE9TIDk5LCBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9uCi0gICAoU1VT LCBbMjczXUlFRUUgMTAwMy4xLTIwMDEsIG5vdCB0byBtZW50aW9uICJtYXR1cmUgc3RhbmRhcmRz IiBsaWtlIFY3LAotICAgNC4yLzQuM0JTRCwgU3lzdGVtIFYgUjMgYW5kIFI0IChTVklEMiBhbmQg U1ZJRDMpLCA0LjRCU0QgKHRoZSBiYXNpcyBmb3IKLSAgIEJTREksIE9wZW5CU0QsIE5ldEJTRCwg RnJlZUJTRCwgTWFjIE9TIFggZXRjKSwgL3Vzci9ncm91cCwgcGx1cwotICAgYXNzb3J0ZWQgc2Vp c21pYyBwcm9ub3VuY2VtZW50cyBvZiB0aGUgbmV2ZXJlbmRpbmcgc2VyaWVzIG9mIGVwaGVtZXJh bAotICAgY29ycG9yYXRlIGNvbnNvcnRpYSwgbm90IHRvIG1lbnRpb24gdGhlIGxpYmMtdnMtZ2xp YmMgdHVybW9pbCBpbiB0aGUKLSAgIExpbnV4IGFyZW5hIGFuZCB3aG8ga25vd3Mgd2hhdCBlbHNl LgotCi0gICBOb25lIG9mIHRoZXNlIHN0YW5kYXJkcyBzaW1wbGlmaWVzIGxpZmUgZm9yIHBvcnRh YmxlIGFwcGxpY2F0aW9ucyBsaWtlCi0gICBDLUtlcm1pdCAtLSBlYWNoIG9uZSBpcyBzaW1wbHkg b25lIG1vcmUgZW52aXJvbm1lbnQgdG8gc3VwcG9ydCAob3IKLSAgIGNpcmN1bXZlbnQsIGFzIGlu IG1hbnkgY2FzZXMgdGhlc2Ugc3RhbmRhcmRzIGRvIG1vcmUgaGFybSB0aGFuIGdvb2QgYnkKLSAg IGRlbnlpbmcgYWNjZXNzIHRvIGZhY2lsaXRpZXMgd2UgbmVlZCwgZS5nLiBhcyBub3RlZCBpbiBh Ym92ZSBpbgotICAgWzI3NF05LjEuMSkuCi0KLTkuMi4gTGlicmFyeSBJc3N1ZXMKLQotICAgWyBb Mjc1XVRvcCBdIFsgWzI3Nl1Db250ZW50cyBdIFsgWzI3N11TZWN0aW9uIENvbnRlbnRzIF0gWwot ICAgWzI3OF1TdWJzZWN0aW9uIENvbnRlbnRzIF0gWyBbMjc5XU5leHQgXSBbIFsyODBdUHJldmlv dXMgXQotCi0gICBPbiBtb3N0IG1vZGVybiBwbGF0Zm9ybXMsIGFwcGxpY2F0aW9ucyBhcmUgLS0g YW5kIG9mdGVuIG11c3QgYmUgLS0KLSAgIGR5bmFtaWNhbGx5IGxpbmtlZC4gVGhpcyBoYXMgbnVt ZXJvdXMgYWR2YW50YWdlcyAoc21hbGxlciBleGVjdXRhYmxlcywKLSAgIGFiaWxpdHkgdG8gcGF0 Y2ggYSBsaWJyYXJ5IGFuZCB0aGVyZWJ5IHBhdGNoIGFsbCBhcHBsaWNhdGlvbnMgdGhhdCB1c2UK LSAgIGl0LCBldGMpLCBidXQgYWxzbyBjYXVzZXMgc29tZSBoZWFkYWNoZXM6IG1vc3QgY29tbW9u bHksIHRoZSBsaWJyYXJ5IElECi0gICBidWlsdCBpbnRvIHRoZSBleGVjdXRhYmxlIGF0IGxpbmsg dGltZSBkb2VzIG5vdCBtYXRjaCB0aGUgSUQgb2YgdGhlCi0gICBjb3JyZXNwb25kaW5nIGxpYnJh cnkgb24gdGhlIHRhcmdldCBzeXN0ZW0sIGFuZCBzbyB0aGUgbG9hZGVyIHJlZnVzZXMKLSAgIHRv IGxldCB0aGUgYXBwbGljYXRpb24gcnVuLgotCi0gICBUaGlzIHByb2JsZW0gb25seSBnZXRzIHdv cnNlIG92ZXIgdGltZS4gSW4gdGhlIExpbnV4IGFuZCAqQlNEIHdvcmxkLCB3ZQotICAgYWxzbyBo YXZlIHRvdGFsbHkgZGlmZmVyZW50IGxpYnJhcmllcyAoZWFjaCB3aXRoIHRoZWlyIG93biBuYW1l cyBhbmQKLSAgIG51bWJlcmluZyBzeXN0ZW1zKSB0aGF0IGNvdmVyIHRoZSBzYW1lIHRlcnJpdG9y eTsgZm9yIGV4YW1wbGUsIGN1cnNlcwotICAgdnMgbmN1cnNlcywgbGliYyB2ZXJzdXMgZ2xpYmMu IENvbWJpbmF0aW9ucyBwcm9saWZlcmF0ZSBhbmQgYW55IGdpdmVuCi0gICBVbml4IGNvbXB1dGVy IG1pZ2h0IGhhdmUgYW55IGNvbWJpbmF0aW9uLiBGb3IgdGhpcyByZWFzb24gaXQgaXMKLSAgIGJl Y29taW5nIGluY3JlYXNpbmdseSBkaWZmaWN1bHQgdG8gcHJvZHVjZSBhICJMaW51eCBiaW5hcnki IGZvciBhIGdpdmVuCi0gICBhcmNoaXRlY3R1cmUgKGUuZy4gUEMgb3IgQWxwaGEpLiBUaGVyZSBo YXMgdG8gYmUgYSBzZXBhcmF0ZSBiaW5hcnkgZm9yCi0gICAoYXQgbGVhc3QpIGV2ZXJ5IGNvbWJp bmF0aW9uIG9mIGN1cnNlcyB2cyBuY3Vyc2VzIGFuZCBsaWJjIHZzIGdsaWJjLgotCi0gICBJbiBz dWNoIGNhc2VzLCB0aGUgYmVzdCBhZHZpY2UgaXMgZm9yIGV2ZXJ5IHVzZXIgdG8gYnVpbGQgQy1L ZXJtaXQgZnJvbQotICAgc291cmNlIGNvZGUgb24gdGhlIHN5c3RlbSB3aGVyZSBpdCB3aWxsIHJ1 bi4gVG9vIGJhZCBtb3N0IGNvbW1lcmNpYWwKLSAgIFVuaXggdmVuZG9ycyBoYXZlIHN0b3BwZWQg aW5jbHVkaW5nIEMgY29tcGlsZXJzIHdpdGggdGhlIG9wZXJhdGluZwotICAgc3lzdGVtIQotCi05 LjMuIFVuaXggRmlsZSBTeXN0ZW0gUGVjdWxpYXJpdGllcwotCi0gICBbIFsyODFdVG9wIF0gWyBb MjgyXUNvbnRlbnRzIF0gWyBbMjgzXVNlY3Rpb24gQ29udGVudHMgXSBbIFsyODRdTmV4dCBdCi0g ICBbIFsyODVdUHJldmlvdXMgXQotCi0gICBOb3JtYWxseSwgaW5jbHVkaW5nIGEgQlNELCBTeXN0 ZW0tViwgUE9TSVgsIG9yIERJUkVOVCBmbGFnIGluIHRoZSBtYWtlCi0gICBlbnRyeSBzZWxlY3Rz IHRoZSByaWdodCBmaWxlIHN5c3RlbSBjb2RlLiBCdXQgc29tZSB2ZXJzaW9ucyBvZiBVbml4IGFy ZQotICAgaW5jb25zaXN0ZW50IGluIHRoaXMgcmVnYXJkLCBhbmQgYnVpbGRpbmcgaW4gdGhlIG5v cm1hbCB3YXkgZWl0aGVyCi0gICBnaXZlcyBjb21waWxlciBvciBsaW5rZXIgZXJyb3JzLCBvciBy ZXN1bHRzIGluIHByb2JsZW1zIGF0IHJ1bnRpbWUsCi0gICB0eXBpY2FsbHkgZmFpbHVyZSB0byBw cm9wZXJseSBleHBhbmQgd2lsZGNhcmQgZmlsZSBzcGVjaWZpY2F0aW9ucyB3aGVuCi0gICB5b3Ug ZG8gc29tZXRoaW5nIGxpa2UgInNlbmQgKi4qIiwgb3IgZmFpbHVyZSB0byByZWNvZ25pemUgbG9u ZwotICAgZmlsZW5hbWVzLCBhcyBpbiAic2VuZCBmaWxld2l0aGF2ZXJ5dmVyeXZlcnl2ZXJ5dmVy eWxvbmduYW1lIi4KLQotICAgQy1LZXJtaXQgaXMgc3VwcG9zZWQgdG8ga25vdyBhYm91dCBhbGwg dGhlIHZhcmlvdXMgc3R5bGVzIG9mIFVuaXggZmlsZQotICAgc3lzdGVtcywgYnV0IGl0IGhhcyB0 byBiZSB0b2xkIHdoaWNoIG9uZSB0byB1c2Ugd2hlbiB5b3UgYnVpbGQgaXQsCi0gICB1c3VhbGx5 IGluIHRoZSBtYWtlZmlsZSB0YXJnZXQgQ0ZMQUdTIGFzIHNob3duIGJlbG93LCBidXQgeW91IG1p Z2h0Ci0gICBhbHNvIGhhdmUgdG8gYWRkIHNvbWV0aGluZyBsaWtlIC1JL3Vzci9pbmNsdWRlL2Jz ZCB0byBDRkxBR1MsIG9yCi0gICBzb21ldGhpbmcgbGlrZSAtbGJzZCB0byBMSUJTLgotCi0gICBD LUtlcm1pdCBnaXZlcyB5b3UgdGhlIGZvbGxvd2luZyBDRkxBR1Mgc3dpdGNoZXMgdG8gYWRhcHQg dG8geW91ciBmaWxlCi0gICBzeXN0ZW0ncyBwZWN1bGlhcml0aWVzOgotCi0tRERJUkVOVCAgIC0g I2luY2x1ZGUgPGRpcmVudC5oPgotLURTRElSRU5UICAtICNpbmNsdWRlIDxzeXMvZGlyZW50Lmg+ Ci0tRE5ESVIgICAgIC0gI2luY2x1ZGUgPG5kaXIuaD4KLS1EWE5ESVIgICAgLSAjaW5jbHVkZSA8 c3lzL25kaXIuaD4KLS1EUlRVICAgICAgLSAjaW5jbHVkZSAiL3Vzci9saWIvbmRpci5oIiwgb25s eSBpZiBORElSIGFuZCBYTkRJUiBub3QgZGVmaW5lZC4KLS1EU1lTVVRJTUggLSAjaW5jbHVkZSA8 c3lzL3V0aW1lLmg+IGZvciBzZXR0aW5nIGZpbGUgY3JlYXRpb24gZGF0ZXMuCi0tRFVUSU1FSCAg IC0gI2luY2x1ZGUgPHV0aW1lLmg+IGZvciBzZXR0aW5nIGZpbGUgY3JlYXRpb24gZGF0ZXMuCi0K LSAgIChOb3RlLCBSVFUgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgTWFzc2NvbXAgUlRVIHN5c3Rl bXMsIGJlY2F1c2UgaXQKLSAgIGFsc28gc2VsZWN0cyBjZXJ0YWluIG90aGVyIFJUVS1zcGVjaWZp YyBmZWF0dXJlcy4pCi0KLSAgIElmIG5vbmUgb2YgdGhlc2UgaXMgZGVmaW5lZCwgdGhlbiA8c3lz L2Rpci5oPiBpcyB1c2VkLiBJTVBPUlRBTlQ6IElmCi0gICB5b3VyIHN5c3RlbSBoYXMgdGhlIGZp bGUgL3Vzci9pbmNsdWRlL2RpcmVudC5oIHRoZW4gYmUgc3VyZSB0byBhZGQKLSAgIC1ERElSRU5U IHRvIHlvdXIgbWFrZWZpbGUgdGFyZ2V0J3MgQ0ZMQUdTLiAiZGlyZW50IiBzaG91bGQgYmUgdXNl ZCBpbgotICAgcHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIG90aGVycywgYmVjYXVzZSBpdCBzdXBw b3J0cyBhbGwgdGhlIGZlYXR1cmVzCi0gICBvZiB5b3VyIGZpbGUgc3lzdGVtLCBhbmQgdGhlIG90 aGVycyBwcm9iYWJseSBkb24ndC4KLQotICAgSGF2aW5nIHNlbGVjdGVkIHRoZSBhcHByb3ByaWF0 ZSBkaXJlY3RvcnkgaGVhZGVyIGZpbGUsIHlvdSBtaWdodCBhbHNvCi0gICBuZWVkIHRvIHRlbGwg S2VybWl0IGhvdyB0byBkZWNsYXJlIHRoZSByb3V0aW5lcyBhbmQgdmFyaWFibGVzIGl0IG5lZWRz Ci0gICB0byByZWFkIHRoZSBkaXJlY3RvcnkuIFRoaXMgaGFwcGVucyBtb3N0IGNvbW1vbmx5IG9u IEFUJlQgU3lzdGVtLVYKLSAgIGJhc2VkIFVOSVhlcywgcGFydGljdWxhcmx5IFN5c3RlbSBWIFIz IGFuZCBlYXJsaWVyLCB0aGF0IHByb3ZpZGUgbG9uZwotICAgZmlsZSBhbmQgZGlyZWN0b3J5IG5h bWVzIChsb25nZXIgdGhhbiAxNCBjaGFyYWN0ZXJzKS4gRXhhbXBsZXMgaW5jbHVkZQotICAgY2Vy dGFpbiByZWxlYXNlcyBvZiBIUC1VWCwgRElBQiBETklYLCBvbGRlciB2ZXJzaW9ucyBvZiBTaWxp Y29uCi0gICBHcmFwaGljcyBJUklYLCBhbmQgcGVyaGFwcyBhbHNvIE1JUFMuIEluIHRoaXMgY2Fz ZSwgdHJ5IGFkZGluZyAtRExPTkdGTgotICAgdG8geW91ciBtYWtlZmlsZSB0YXJnZXQuCi0KLSAg IEFub3RoZXIgcHJvYmxlbSBjaGlsZCBpcyA8c3lzL2ZpbGUuaD4uIE1vc3QgVW5peCBDLUtlcm1p dCB2ZXJzaW9ucyBuZWVkCi0gICB0byAjaW5jbHVkZSB0aGlzIGZpbGUgZnJvbSB3aXRoaW4gWzI4 Nl1ja3VmaW8uYyBhbmQgWzI4N11ja3V0aW8uYywgYnV0Ci0gICBzb21lIG5vdCBvbmx5IGRvIG5v dCBuZWVkIHRvIGluY2x1ZGUgaXQsIGJ1dCBNVVNUIG5vdCBpbmNsdWRlIGl0Ci0gICBiZWNhdXNl IChhKSBpdCBkb2Vzbid0IGV4aXN0LCBvciAoYikgaXQgaGFzIGFscmVhZHkgYmVlbiBpbmNsdWRl ZCBieQotICAgc29tZSBvdGhlciBoZWFkZXIgZmlsZSBhbmQgaXQgZG9lc24ndCBwcm90ZWN0IGl0 c2VsZiBhZ2FpbnN0IG11bHRpcGxlCi0gICBpbmNsdXNpb24sIG9yIChjKSBzb21lIG90aGVyIHJl YXNvbiB0aGF0IHByZXZlbnRzIHN1Y2Nlc3NmdWwKLSAgIGNvbXBpbGF0aW9uLiBJZiB5b3UgaGF2 ZSBjb21waWxhdGlvbiBwcm9ibGVtcyB0aGF0IHNlZW0gdG8gc3RlbSBmcm9tCi0gICBpbmNsdWRp bmcgdGhpcyBmaWxlLCB0aGVuIGFkZCB0aGUgZm9sbG93aW5nIHN3aXRjaCB0byBDRkxBR1MgaW4g eW91cgotICAgbWFrZWZpbGUgdGFyZ2V0OgotCi0tRE5PRklMRUgKLQotICAgVGhlcmUgYXJlIGEg ZmV3IG9kZCBjYXNlcyB3aGVyZSA8c3lzL2ZpbGUuaD4gbXVzdCBiZSBpbmNsdWRlZCBpbiBvbmUg b2YKLSAgIHRoZSBja3VbZnRdaW8uYyBmaWxlcywgYnV0IG5vdCB0aGUgb3RoZXIuIEluIHRoYXQg Y2FzZSwgYWRkIHRoZQotICAgYWZvcmVtZW50aW9uZWQgc3dpdGNoLCBidXQgZ28gaW50byB0aGUg ZmlsZSB0aGF0IG5lZWRzIDxzeXMvZmlsZS5oPiBhbmQKLSAgIGFkZCBzb21ldGhpbmcgbGlrZSB0 aGlzOgotCi0jaWZkZWYgWFhYICAgICAgIC8qICh3aGVyZSBYWFggaXMgYSBzeW1ib2wgdW5pcXVl IHRvIHlvdXIgc3lzdGVtKSAqLwotI3VuZGVmIE5PRklMRUgKLSNlbmRpZiAvKiBYWFggKi8KLQot ICAgYmVmb3JlIHRoZSBzZWN0aW9uIHRoYXQgaW5jbHVkZXMgPHN5cy9maWxlLmg+LgotCi0gICBL ZXJtaXQncyBTRU5EIGNvbW1hbmQgZXhwYW5kcyB3aWxkY2FyZCBjaGFyYWN0ZXJzICI/IiBhbmQg IioiIGl0c2VsZi4KLSAgIEJlZm9yZSB2ZXJzaW9uIDVBLCBjb21tYW5kcyBsaWtlICJzZW5kICoi IHdvdWxkIHNlbmQgYWxsIHJlZ3VsYXIKLSAgIChub24tZGlyZWN0b3J5KSBmaWxlcywgaW5jbHVk aW5nICJoaWRkZW4gZmlsZXMiICh3aG9zZSBuYW1lcyBzdGFydCB3aXRoCi0gICAiLiIpLiBJbiB2 ZXJzaW9uIDVBLCB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBtYXRjaCBsaWtlIHRoZSBCb3Vy bmUKLSAgIHNoZWxsIG9yIHRoZSBscyBjb21tYW5kLCBhbmQgbm90IGluY2x1ZGUgZmlsZXMgd2hv c2UgbmFtZXMgc3RhcnQgd2l0aAotICAgZG90LiBTdWNoIGZpbGVzIGNhbiBzdGlsbCBiZSBzZW50 IGlmIHRoZSBkb3QgaXMgaW5jbHVkZWQgZXhwbGljaXRseSBpbgotICAgdGhlIFNFTkQgY29tbWFu ZDogInNlbmQgLm9vZmEsIHNlbmQgLioiLiBUbyBjaGFuZ2UgYmFjayB0byB0aGUgb2xkIHdheQot ICAgYW5kIGxldCBsZWFkaW5nIHdpbGRjYXJkIGNoYXJhY3RlcnMgbWF0Y2ggZG90IGZpbGVzLCBp bmNsdWRlIHRoZQotICAgZm9sbG93aW5nIGluIHlvdXIgQ0ZMQUdTOgotCi0tRE1BVENIRE9UCi0K LSAgIChJbiBDLUtlcm1pdCA2LjAsIHRoZXJlIGlzIGFsc28gYSBjb21tYW5kIHRvIGNvbnRyb2wg dGhpcyBhdCBydW50aW1lLikKLQotICAgQ29tcGxhaW50cyBhYm91dCBkYXRhLXR5cGUgbWlzbWF0 Y2hlczoKLQotICAgICAqIElmIHlvdSBnZXQgY29tcGlsZS10aW1lIGNvbXBsYWludHMgYWJvdXQg ZGF0YSB0eXBlIG1pc21hdGNoZXMgZm9yCi0gICAgICAgcHJvY2Vzcy1JRCByZWxhdGVkIGZ1bmN0 aW9ucyBsaWtlIGdldHBpZCgpLCBhZGQgLURQSURfVD1waWRfdC4KLSAgICAgKiBJZiB5b3UgZ2V0 IGNvbXBpbGUtdGltZSBjb21wbGFpbnRzIGFib3V0IGRhdGEgdHlwZSBtaXNtYXRjaGVzIGZvcgot ICAgICAgIHVzZXIgSUQgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBnZXR1aWQoKSwgYWRkIC1EVUlE X1Q9dWlkX3QuCi0gICAgICogSWYgeW91IGdldCBjb21waWxlLXRpbWUgY29tcGxhaW50cyBhYm91 dCBkYXRhIHR5cGUgbWlzbWF0Y2hlcyBmb3IKLSAgICAgICB1c2VyLUlEIHJlbGF0ZWQgZnVuY3Rp b25zIGxpa2UgZ2V0Z2lkKCksIGFkZCAtREdJRF9UPWdpZF90LgotICAgICAqIElmIHlvdSBnZXQg Y29tcGlsZS10aW1lIGNvbXBsYWludHMgYWJvdXQgZGF0YSB0eXBlIG1pc21hdGNoZXMgZm9yCi0g ICAgICAgZ2V0cHd1aWQoKSwgYWRkIC1EUFdJRF9UPXVpZF90IChvciB3aGF0ZXZlciBpdCBzaG91 bGQgYmUpLgotCi0gICBGaWxlIGNyZWF0aW9uIGRhdGVzOiBDLUtlcm1pdCBhdHRlbXB0cyB0byBz ZXQgdGhlIGNyZWF0aW9uIGRhdGUvdGltZSBvZgotICAgYW4gaW5jb21pbmcgZmlsZSBhY2NvcmRp bmcgdG8gdGhlIGRhdGUvdGltZSBnaXZlbiBpbiB0aGUgZmlsZSdzCi0gICBhdHRyaWJ1dGUgcGFj a2V0LCBpZiBhbnkuIElmIHlvdSBmaW5kIHRoYXQgdGhlIGRhdGVzIGFyZSBzZXQKLSAgIGluY29y cmVjdGx5LCB5b3UgbWlnaHQgbmVlZCB0byBidWlsZCBLZXJtaXQgd2l0aCB0aGUgLURTWVNVVElN RUggZmxhZywKLSAgIHRvIHRlbGwgaXQgdG8gaW5jbHVkZSA8c3lzL3V0aW1lLmg+LiBJZiB0aGF0 IGRvZXNuJ3QgaGVscCwgbG9vayBhdCB0aGUKLSAgIGNvZGUgaW4genN0cmR0KCkgaW4gWzI4OF1j a3VmaW8uYy4KLQotOS40LiBIYXJkd2FyZSBGbG93IENvbnRyb2wKLQotICAgWyBbMjg5XVRvcCBd IFsgWzI5MF1Db250ZW50cyBdIFsgWzI5MV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMjkyXU5leHQg XQotICAgWyBbMjkzXVByZXZpb3VzIF0KLQotICAgSGFyZHdhcmUgZmxvdyBjb250cm9sIGlzIGEg cHJvYmxlbWF0aWMgY29uY2VwdCBpbiBtYW55IHBvcHVsYXIgVW5peAotICAgaW1wbGVtZW50YXRp b25zLiBPZnRlbiBpdCBpcyBsYWNraW5nIGFsdG9nZXRoZXIsIGFuZCB3aGVuIGF2YWlsYWJsZSwK LSAgIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtIGludGVyZmFjZSAoQVBJKSB0byBpdCBpcyBpbmNv bnNpc3RlbnQgZnJvbQotICAgc3lzdGVtIHRvIHN5c3RlbS4gSGVyZSBhcmUgc29tZSBleGFtcGxl czoKLQotICAgIGEuIFBPU0lYIGRvZXMgbm90IHN1cHBvcnQgaGFyZHdhcmUgZmxvdyBjb250cm9s LgotICAgIGIuIFJUUy9DVFMgZmxvdyBjb250cm9sIHN1cHBvcnQgTUlHSFQgYmUgYXZhaWxhYmxl IGZvciBTeXN0ZW0gViBSMyBhbmQKLSAgICAgICBsYXRlciBpZiAvdXNyL2luY2x1ZGUvdGVybWlv eC5oIGV4aXN0cyAoaXRzIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uCi0gICAgICAgYWxzbyBkZXBlbmRz IG9uIHRoZSBkZXZpY2UgZHJpdmVyLCBhbmQgdGhlIGRldmljZSBpdHNlbGYsIG5vdCB0bwotICAg ICAgIG1lbnRpb24gdGhlIFsyOTRdY2FibGUsIGV0YywgYWN0dWFsbHkgc3VwcG9ydGluZyBpdCku IElmIHlvdXIKLSAgICAgICBTVlIzLW9yLWxhdGVyIFVuaXggc3lzdGVtIGRvZXMgaGF2ZSB0aGlz IGZpbGUsIGFkZDoKLQotLURURVJNSU9YCi0KLSAgICAgICB0byB5b3VyIENGTEFHUy4gSWYgdGhl IGZpbGUgaXMgaW4gL3Vzci9pbmNsdWRlL3N5cyBpbnN0ZWFkLCBhZGQ6Ci0KLS1EU1RFUk1JT1gK LQotICAgICAgIE5vdGUgdGhhdCB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBmaWxlIGRvZXMgbm90IGd1 YXJhbnRlZSB0aGF0IFJUUy9DVFMKLSAgICAgICB3aWxsIGFjdHVhbGx5IHdvcmsgLS0gdGhhdCBk ZXBlbmRzIG9uIHRoZSBkZXZpY2UtZHJpdmVyCi0gICAgICAgaW1wbGVtZW50YXRpb24gKHJlcG9y dGVkbHksIG1hbnkgVW5peCB2ZXJzaW9ucyB0cmVhdAotICAgICAgIGhhcmR3YXJlLWZsb3ctY29u dHJvbCByZWxhdGVkIGlvY3RsJ3MgYXMgbm8tb3BzKS4KLSAgICBjLiBTZWFyY2ggKCJncmVwIC1p IikgdGhyb3VnaCAvdXNyL2luY2x1ZGUvKi5oIGFuZAotICAgICAgIC91c3IvaW5jbHVkZS9zeXMv Ki5oIGZvciBSVFMgb3IgQ1RTIGFuZCBzZWUgd2hhdCB0dXJucyB1cC4gRm9yCi0gICAgICAgZXhh bXBsZSwgaW4gU3VuT1MgNC54IHdlIGZpbmQgIkNSVFNDVFMiLiBGaWd1cmluZyBvdXQgaG93IHRv IHVzZSBpdAotICAgICAgIGlzIGFub3RoZXIgcXVlc3Rpb24gZW50aXJlbHkhIEluIElCTSBBSVgg UlMvNjAwMCAzLngsIHdlIGhhdmUgdG8KLSAgICAgICAiYWRkIiBhIG5ldyAibGluZSBkaXNjaXBs aW5lIiAoYW5kIHlvdSB3b24ndCBmaW5kIHVwcGVyY2FzZSBSVFMgb3IKLSAgICAgICBDVFMgc3lt Ym9scyBpbiB0aGUgaGVhZGVyIGZpbGVzKS4KLSAgICBkLiBOZVhUU1RFUCBhbmQgSVJJWCwgYW5k IHBvc3NpYmx5IG90aGVycywgc3VwcG9ydCBoYXJkd2FyZSBmbG93Ci0gICAgICAgY29udHJvbCwg YnV0IGRvIG5vdCBmdXJuaXNoIGFuIEFQSSB0byBjb250cm9sIGl0LCBhbmQgdGh1cyBvbiB0aGVz ZQotICAgICAgIHN5c3RlbXMgS2VybWl0IGhhcyBubyBjb21tYW5kIHRvIHNlbGVjdCBpdCAtLSBp bnN0ZWFkLCBhIHNwZWNpYWwKLSAgICAgICBkZXZpY2UgbmFtZSBtdXN0IGJlIHVzZWQuIChOZVhU U1RFUDogL2Rldi9jdWZhIGluc3RlYWQgb2YgL2Rldi9jdWE7Ci0gICAgICAgSVJJWDogL2Rldi90 dHlmMDApCi0KLSAgIFNlZSB0aGUgcm91dGluZSB0dGhmbG93KCkgaW4gWzI5NV1ja3V0aW8uYyBm b3IgZGV0YWlscy4gSWYgeW91IGZpbmQKLSAgIHRoYXQgeW91ciBzeXN0ZW0gb2ZmZXJzIGhhcmR3 YXJlIGZsb3cgY29udHJvbCBzZWxlY3Rpb24gdW5kZXIgcHJvZ3JhbQotICAgY29udHJvbCwgeW91 IGNhbiBhZGQgdGhpcyBjYXBhYmlsaXR5IHRvIEMtS2VybWl0IGFzIGZvbGxvd3M6Ci0KLSAgICBh LiBTZWUgaWYgaXQgYWdyZWVzIHdpdGggb25lIG9mIHRoZSBtZXRob2RzIGFscmVhZHkgdXNlZCBp biB0dGhmbG93KCkuCi0gICAgICAgaWYgbm90LCBhZGQgbmV3IGNvZGUsIGFwcHJvcHJpYXRlbHkg I2lmZGVmJ2QuCi0gICAgYi4gQWRkIC1EQ0tfUlRTQ1RTIHRvIHRoZSBjb21waWxlciBDRkxBR1Mg aW4geW91ciBtYWtlZmlsZSB0YXJnZXQgb3IKLSAgICAgICBkZWZpbmUgdGhpcyBzeW1ib2wgd2l0 aGluIHRoZSBhcHByb3ByaWF0ZSAjaWZkZWZzIGluIFsyOTZdY2tjZGViLmguCi0KLSAgIFRvIGls bHVzdHJhdGUgdGhlIGRpZmZpY3VsdGllcyB3aXRoIFJUUy9DVFMsIGhlcmUgaXMgYSB0YWxlIGZy b20gSmFtaWUKLSAgIFdhdHNvbiA8andAYWRhc29mdC5jaD4sIHdobyBhZGRlZCB0aGUgUlRTL0NU UyBjb2RlIGZvciB0aGUgUlMvNjAwMCwKLSAgIGFib3V0IGhpcyBhdHRlbXB0cyB0byBkbyB0aGUg c2FtZSBmb3IgREVDIFVMVFJJWDoKLQotICAgICAiVGhlIG51bWJlciBhbmQgdHlwZSBvZiBoYXJk d2FyZSBzaWduYWxzIGF2YWlsYWJsZSB0by9mcm9tIGEgc2VyaWFsCi0gICAgIHBvcnQgdmFyeSBi ZXR3ZWVuIGRpZmZlcmVudCBtYWNoaW5lcyBhbmQgZGlmZmVyZW50IHR5cGVzIG9mIHNlcmlhbAot ICAgICBpbnRlcmZhY2VzIG9uIGVhY2ggbWFjaGluZS4gVGhpcyBtZWFucyB0aGF0LCBmb3IgZXhh bXBsZSwgdGhlcmUgYXJlCi0gICAgIHZpcnR1YWxseSBubyBoYXJkd2FyZSBzaWduYWxzIGluIG9y IG91dCBhdmFpbGFibGUgb24gdGhlIERFQ3N5c3RlbQotICAgICAzMDAwLzMxMDAgc2VyaWVzOyBv biB0aGUgREVDc3lzdGVtIDUwMDAvMnh4IHNlcmllcyBhbGwgbW9kZW0gc2lnbmFscwotICAgICBp bi9vdXQgYXJlIHByZXNlbnQgb24gYm90aCBidWlsdC1pbiBzZXJpYWwgcG9ydHM7IG9uIHRoZSBE RUNzeXN0ZW0KLSAgICAgNTEwMCBzb21lIHBvcnRzIGhhdmUgYWxsIHNpZ25hbHMgYW5kIHNvbWUg b25seSBoYXZlIHNvbWU7IGFuZCBzbwotICAgICBvbi4uLiBJdCBsb29rcyB0byBtZSBhcyBpZiB0 aGlzIHByZXR0eSB3ZWxsIHJ1bGVzIG91dCBhbnkgYXR0ZW1wdCB0bwotICAgICB1c2UgaGFyZHdh cmUgZmxvdyBjb250cm9sIG9uIHRoZXNlIHBsYXRmb3JtcywgZXZlbiBpZiB3ZSBjb3VsZAotICAg ICBmaWd1cmUgb3V0IGhvdyB0byBkbyBpdC4gVGhlIGNvbmZ1c2lvbiBvbiB0aGUgdXNlciBsZXZl bCBhYm91dAotICAgICB3aGV0aGVyIG9yIG5vdCBpdCBzaG91bGQgd29yayBmb3IgYW55IGdpdmVu IHBsYXRmb3JtIG9yIHBvcnQgd291bGQKLSAgICAgYmUgdHJlbWVuZG91cy4gQW5kIHRoZW4gaXQg aXNuJ3QgY2xlYXIgaG93IHRvIHVzZSB0aGUgaGFyZHdhcmUKLSAgICAgc2lnbmFscyBldmVuIGlu IHRoZSBjYXNlcyB3aGVyZSB0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZW0uIgotCi0gIDkuNS4gVGVy bWluYWwgU3BlZWRzCi0KLSAgIFsgWzI5N11Ub3AgXSBbIFsyOThdQ29udGVudHMgXSBbIFsyOTld U2VjdGlvbiBDb250ZW50cyBdIFsgWzMwMF1OZXh0IF0KLSAgIFsgWzMwMV1QcmV2aW91cyBdCi0K LSAgIFRoZSBhbGxvd2FibGUgc3BlZWRzIGZvciB0aGUgU0VUIFNQRUVEIGNvbW1hbmQgYXJlIGRl ZmluZWQgaW4KLSAgIFszMDJdY2tjZGViLmguIElmIHlvdXIgc3lzdGVtIHN1cHBvcnRzIHNwZWVk cyB0aGF0IGFyZSBub3QgbGlzdGVkIGluCi0gICAic2V0IHNwZWVkID8iLCB5b3UgY2FuIGFkZCBk ZWZpbml0aW9ucyBmb3IgdGhlbSB0byBja2NkZWIuaC4KLQotICAgVGhlbiBpZiB0aGUgc3BlZWQg eW91IGFyZSBhZGRpbmcgaXMgb25lIHRoYXQgd2FzIG5ldmVyIHVzZWQgYmVmb3JlIGluCi0gICBL ZXJtaXQsIHN1Y2ggYXMgOTIxNjAwLCB5b3UnbGwgYWxzbyBuZWVkIHRvIGFkZCB0aGUgYXBwcm9w cmlhdGUKLSAgIGtleXdvcmRzIHRvIHNwZHRhYltdIGluIFszMDNdY2t1dXMzLmMsIGFuZCB0aGUg Y29ycmVzcG9uZGluZyBjYXNlIHRvCi0gICB0dHNzcGQoKSBpbiBbMzA0XWNrdXRpby5jLgotCi0g IDkuNi4gTWlsbGlzZWNvbmQgU2xlZXBzCi0KLSAgIFsgWzMwNV1Ub3AgXSBbIFszMDZdQ29udGVu dHMgXSBbIFszMDddU2VjdGlvbiBDb250ZW50cyBdIFsgWzMwOF1OZXh0IF0KLSAgIFsgWzMwOV1Q cmV2aW91cyBdCi0KLSAgIFRoZXJlIGlzIG5vIHN0YW5kYXJkIGZvciBtaWxsaXNlY29uZCBzbGVl cHMsIGJ1dCBhdCBsZWFzdCBmaXZlCi0gICBkaWZmZXJlbnQgZnVuY3Rpb25zIGhhdmUgYXBwZWFy ZWQgaW4gdmFyaW91cyBVbml4IHZlcnNpb25zIHRoYXQgY2FuIGJlCi0gICB1c2VkIGZvciB0aGlz IHB1cnBvc2U6IG5hcCgpIChtb3N0bHkgaW4gU3lzdGVtIFYpLCB1c2xlZXAoKSAoZm91bmQgYXQK LSAgIGxlYXN0IGluIFN1bk9TIGFuZCBOZVhUIE9TKSwgc2VsZWN0KCkgKGZvdW5kIGluIDQuMkJT RCBhbmQgbGF0ZXIsIGFuZAotICAgcGFydCBvZiBhbnkgVENQL0lQIHNvY2tldHMgbGlicmFyeSks IG5hbm9zbGVlcCgpLCBhbmQgc2dpbmFwKCkuIElmIHlvdQotICAgaGF2ZSBhbnkgb2YgdGhlc2Ug YXZhaWxhYmxlLCBwaWNrIG9uZSAoaW4gdGhpcyBvcmRlciBvZiBwcmVmZXJlbmNlLCBpZgotICAg eW91IGhhdmUgbW9yZSB0aGFuIG9uZSk6Ci0KLS1EU0VMRUNUOiBJbmNsdWRlIHRoaXMgaW4gQ0ZM QUdTIGlmIHlvdXIgc3lzdGVtIGhhcyB0aGUgc2VsZWN0KCkgZnVuY3Rpb24uCi0tRE5BUDogICAg SW5jbHVkZSB0aGlzIGluIENGTEFHUyBpZiB5b3VyIHN5c3RlbSBoYXMgdGhlIG5hcCgpIGZ1bmN0 aW9uLgotLVVTTEVFUDogIEluY2x1ZGUgdGhpcyBpbiBDRkxBR1MgaWYgeW91ciBzeXN0ZW0gaGFz IHRoZSB1c2xlZXAoKSBmdW5jdGlvbi4KLQotICAgTk9URTogVGhlIG5hcCgpIGZ1bmN0aW9uIGlz IGFzc3VtZWQgdG8gYmUgYSBmdW5jdGlvbiB0aGF0IHB1dHMgdGhlCi0gICBwcm9jZXNzIHRvIHNs ZWVwIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gSWYgeW91ciBzeXN0ZW0n cwotICAgbmFwKCkgZnVuY3Rpb24gZG9lcyBzb21ldGhpbmcgZWxzZSBvciB1c2VzIHNvbWUgb3Ro ZXIgdW5pdHMgb2YgdGltZQotICAgKGxpa2UgdGhlIE5DUiBUb3dlciAzMiwgd2hpY2ggdXNlcyBj bG9jay10aWNrcyksIGRvIG5vdCBpbmNsdWRlIC1ETkFQLgotCi0gICBSZXBvcnRlZGx5LCBhbGwg dmVyc2lvbnMgb2YgU3lzdGVtIFYgUjQgZm9yIEludGVsLWJhc2VkIGNvbXB1dGVycywgYW5kCi0g ICBwb3NzaWJseSBhbHNvIFNWUjMuMiwgaW5jbHVkZSBuYXAoKSBhcyBhIGtlcm5lbCBjYWxsLCBi dXQgaXQncyBub3QgaW4KLSAgIHRoZSBsaWJyYXJ5LiBUbyBpbmNsdWRlIGNvZGUgdG8gdXNlIGl0 IHZpYSBzeXNjYWxsKDMxMTIseCksIHdpdGhvdXQKLSAgIGhhdmluZyB0byBpbmNsdWRlIFhlbml4 IGNvbXBhdGliaWxpdHkgZmVhdHVyZXMsIGluY2x1ZGUgdGhlIGZvbGxvd2luZwotICAgY29tcGls ZS10aW1lIG9wdGlvbjoKLQotLUROQVBIQUNLCi0KLSAgOS43LiBOb25kZXN0cnVjdGl2ZSBJbnB1 dCBCdWZmZXIgUGVla2luZwotCi0gICBbIFszMTBdVG9wIF0gWyBbMzExXUNvbnRlbnRzIF0gWyBb MzEyXVNlY3Rpb24gQ29udGVudHMgXSBbIFszMTNdTmV4dCBdCi0gICBbIFszMTRdUHJldmlvdXMg XQotCi0gICBTb21lIEFUJlQgVW5peCB2ZXJzaW9ucyBoYXZlIG5vIHdheSB0byBjaGVjayBpZiBp bnB1dCBpcyB3YWl0aW5nIG9uIGEKLSAgIHR0eSBkZXZpY2UsIGJ1dCB0aGlzIGlzIGEgdmVyeSBp bXBvcnRhbnQgZmVhdHVyZSBmb3IgS2VybWl0LiBXaXRob3V0Ci0gICBpdCwgc2xpZGluZyB3aW5k b3dzIG1pZ2h0IG5vdCB3b3JrIHZlcnkgd2VsbCAob3IgYXQgYWxsKSwgYW5kIHlvdSBhbHNvCi0g ICBoYXZlIHRvIHR5cGUgeW91ciBlc2NhcGUgY2hhcmFjdGVyIHRvIGdldCBLZXJtaXQncyBhdHRl bnRpb24gaW4gb3JkZXIKLSAgIHRvIGludGVycnVwdCBhIGxvY2FsLW1vZGUgZmlsZSB0cmFuc2Zl ci4gSWYgeW91ciBzeXN0ZW0gb2ZmZXJzIGFuCi0gICBGSU9OUkVBRCBpb2N0bCwgdGhlIGJ1aWxk IHByb2NlZHVyZSBzaG91bGQgcGljayB0aGF0IHVwIGF1dG9tYXRpY2FsbHkKLSAgIGFuZCB1c2Ug aXQsIHdoaWNoIGlzIGlkZWFsLgotCi0gICBJZiB5b3VyIHN5c3RlbSBsYWNrcyBGSU9OUkVBRCBi dXQgaGFzIGEgc2VsZWN0KCkgZnVuY3Rpb24sIHRoaXMgY2FuIGJlCi0gICB1c2VkIGluc3RlYWQu IElmIHRoZSBidWlsZCBwcm9jZWR1cmUgZmFpbHMgdG8gaW5jbHVkZSBpdCAoU0hPVyBGRUFUVVJF UwotICAgd2lsbCBsaXN0IFNFTEVDVCksIHRoZW4geW91IGNhbiBhZGQgaXQgdG8geW91ciBDRkxB R1M6Ci0KLS1EU0VMRUNUCi0KLSAgIENvbnZlcnNlbHksIGlmIHRoZSBidWlsZCBwcm9jZWR1cmUg dHJpZXMgdG8gdXNlIHNlbGVjdCgpIHdoZW4gaXQgcmVhbGx5Ci0gICBpcyBub3QgdGhlcmUsIGFk ZDoKLQotLUROT1NFTEVDVAotCi0gICBOb3RlOiBzZWxlY3QoKSBpcyBub3QgcGFydCBvZiBTeXN0 ZW0gViBub3Igb2YgUE9TSVgsIGJ1dCBpdCBoYXMgYmVlbgotICAgYWRkZWQgdG8gdmFyaW91cyBT eXN0ZW0tVi0gYW5kIFBPU0lYLWJhc2VkIHN5c3RlbXMgYXMgYW4gZXh0ZW5zaW9uLgotCi0gICBT b21lIFN5c3RlbS1WIHZhcmlhdGlvbnMgKFNDTyBYZW5peC9VTklYL09EVCBhbmQgRElBQiBETklY KSBpbmNsdWRlIGEKLSAgIHJkY2hrKCkgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgYnVm ZmVyIHBlZWtpbmcuIEl0IHJldHVybnMgMCBpZgotICAgbm8gY2hhcmFjdGVycyBhcmUgd2FpdGlu ZyBhbmQgMSBpZiBjaGFyYWN0ZXJzIGFyZSB3YWl0aW5nIChidXQgdW5saWtlCi0gICBGSU9OUkVB RCwgaXQgZG9lcyBub3QgdGVsbCB0aGUgYWN0dWFsIG51bWJlcikuIElmIHlvdXIgc3lzdGVtIGhh cwotICAgcmRjaGsoKSwgYWRkOgotCi0tRFJEQ0hLOiAgSW5jbHVkZSB0aGlzIGluIENGTEFHUyBp ZiB5b3VyIHN5c3RlbSBoYXMgdGhlIHJkY2hrKCkgZnVuY3Rpb24uCi0KLSAgIE90aGVyd2lzZSwg aWYgeW91ciB2ZXJzaW9uIG9mIFVuaXggaGFzIHRoZSBwb2xsKCkgZnVuY3Rpb24gKGFuZCB0aGUK LSAgIC91c3IvaW5jbHVkZS9wb2xsLmggZmlsZSkgLS0gd2hpY2ggYXBwZWFycyB0byBiZSBhIHN0 YW5kYXJkIHBhcnQgb2YKLSAgIFN5c3RlbSBWIGdvaW5nIGJhY2sgdG8gYXQgbGVhc3QgU1ZSMywg aW5jbHVkZToKLQotLURDS19QT0xMCi0KLSAgOS44LiBPdGhlciBTeXN0ZW0tRGVwZW5kZW50IEZl YXR1cmVzCi0KLSAgIFsgWzMxNV1Ub3AgXSBbIFszMTZdQ29udGVudHMgXSBbIFszMTddU2VjdGlv biBDb250ZW50cyBdIFsgWzMxOF1OZXh0IF0KLSAgIFsgWzMxOV1QcmV2aW91cyBdCi0KLSAgIFN5 c3RlbXMgd2l0aCA8dGVybWlvcy5oPiBtaWdodCBoYXZlIHRoZSBzeW1ib2wgSUVYVEVOIGRlZmlu ZWQuIFRoaXMgaXMKLSAgIHVzZWQgdG8gdHVybiAiZXh0ZW5kZWQgZmVhdHVyZXMiIGluIHRoZSB0 dHkgZGV2aWNlIGRyaXZlciBvbiBhbmQgb2ZmLAotICAgc3VjaCBhcyBDdHJsLU8gdG8gdG9nZ2xl IG91dHB1dCBmbHVzaGluZywgQ3RybC1WIHRvIHF1b3RlIGlucHV0Ci0gICBjaGFyYWN0ZXJzLCBl dGMuCi0KLSAgIEluIG1vc3QgVW5peCBpbXBsZW1lbnRhdGlvbnMsIGl0IHNob3VsZCBiZSB0dXJu ZWQgb2ZmIGR1cmluZyBLZXJtaXQKLSAgIG9wZXJhdGlvbiwgc28gaWYgWzMyMF1ja3V0aW8uYyBm aW5kcyB0aGlzIHN5bWJvbCwgaXQgdXNlcyBpdC4gVGhpcyBpcwotICAgbmVjZXNzYXJ5LCBhdCBs ZWFzdCwgb24gQlNESS4gT24gc29tZSBzeXN0ZW1zLCBob3dldmVyLCBJRVhURU4gaXMKLSAgIGVp dGhlciBtaXNkZWZpbmVkIG9yIG1pc2ltcGxlbWVudGVkLiBUaGUgc3ltcHRvbSBpcyB0aGF0IENS LCB3aGVuIHR5cGVkCi0gICB0byB0aGUgY29tbWFuZCBwcm9jZXNzb3IsIGlzIGVjaG9lZCBhcyBM RiwgcmF0aGVyIHRoYW4gQ1JMRi4gVGhpcwotICAgaGFwcGVucyAoYXQgbGVhc3QpIG9uIENvbnZl eC9PUyA5LjEuIFRoZSBzb2x1dGlvbiBpcyB0byBhZGQgdGhlCi0gICBmb2xsb3dpbmcgc3ltYm9s IHRvIHRoZSBtYWtlZmlsZSB0YXJnZXQncyBDRkxBQ1M6Ci0KLS1ETk9JRVhURU4KLQotICAgSG93 ZXZlciwgaW4gYXQgbGVhc3Qgb25lIFVuaXggaW1wbGVtZW50YXRpb24sIFFOWCA0LjIxLCBJRVhU RU4gbXVzdCBiZQotICAgc2V0IGJlZm9yZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgY2FuIGJlIHVz ZWQuCi0KLSAgIEluIGVkaXRzIDE3NyBhbmQgZWFybGllciwgd29ya3N0YXRpb24gdXNlcnMgbm90 aWNlZCBhICJzbG93IHNjcmVlbgotICAgd3JpdGluZyIgcGhlbm9tZW5vbiBkdXJpbmcgaW50ZXJh Y3RpdmUgY29tbWFuZCBwYXJzaW5nLiBUaGlzIHdhcyB0cmFjZWQKLSAgIHRvIGEgc2V0YnVmKCkg Y2FsbCBpbiBbMzIxXWNrdXRpby5jIHRoYXQgbWFkZSBjb25zb2xlIChzdGRvdXQpIHdyaXRlcwot ICAgdW5idWZmZXJlZC4gVGhpcyBzZXRidWYoKSBjYWxsIGhhcyBiZWVuIHRoZXJlIGZvcmV2ZXIs IGFuZCBjb3VsZCBub3QgYmUKLSAgIHJlbW92ZWQgd2l0aG91dCBzb21lIHJpc2suIEtlcm1pdCdz IG9wZXJhdGlvbiB3YXMgdGVzdGVkIG9uIHRoZSBOZVhUIGluCi0gICBlZGl0IDE3OCB3aXRoIHRo ZSBzZXRidWYoKSBjYWxsIHJlbW92ZWQsIGFuZCB0aGUgc2xvdy13cml0aW5nIHN5bXB0b20KLSAg IHdhcyBjdXJlZCwgYW5kIGV2ZXJ5dGhpbmcgZWxzZSAoY29tbWFuZCBwYXJzaW5nLCBwcm9wZXIg d2FrZXVwIG9uID8sCi0gICBFU0MsIEN0cmwtVSwgYW5kIG90aGVyIGVkaXRpbmcgY2hhcmFjdGVy cywgdGVybWluYWwgZW11bGF0aW9uLAotICAgcmVtb3RlLW1vZGUgYW5kIGxvY2FsLW1vZGUgZmls ZSB0cmFuc2ZlciwgZXRjKSBzZWVtZWQgdG8gd29yayBhcyB3ZWxsCi0gICBhcyBvciBiZXR0ZXIg dGhhbiBiZWZvcmUuIEluIHN1YnNlcXVlbnQgZWRpdHMsIHRoaXMgY2hhbmdlIHdhcyBtYWRlIHRv Ci0gICBtYW55IG90aGVyIHZlcnNpb25zIHRvbywgd2l0aCBubyBhcHBhcmVudCBpbGwgZWZmZWN0 cy4gVG8gcmVtb3ZlIHRoZQotICAgc2V0YnVmKCkgY2FsbCBmb3IgeW91ciB2ZXJzaW9uIG9mIEtl cm1pdCwgYWRkOgotCi0tRE5PU0VUQlVGCi0KLSAgIExhdGVyIHJlcG9ydHMgaW5kaWNhdGUgdGhh dCBhZGRpbmcgLUROT1NFVEJVRiBoYXMgb3RoZXIgYmVuZWZpY2lhbAotICAgZWZmZWN0cywgbGlr ZSBjdXR0aW5nIGRvd24gb24gc3dhcHBpbmcgd2hlbiBLZXJtaXQgaXMgcnVuIG9uCi0gICB3b3Jr c3RhdGlvbnMgd2l0aCBzbWFsbCBtZW1vcmllcy4gQnV0IEJFV0FSRTogb24gY2VydGFpbiBzbWFs bCBVbml4Ci0gICBzeXN0ZW1zLCBub3RhYmx5IHRoZSBBVCZUIDYzMDAgYW5kIDNCMSAodGhlIHZl cnkgc2FtZSBvbmVzIHRoYXQgYmVuZWZpdAotICAgZnJvbSBOT1NFVEJVRiksIE5PU0VUQlVGIHNl ZW1zIHRvIGNvbmZsaWN0IHdpdGggQ0tfQ1VSU0VTLiBUaGUgcHJvZ3JhbQotICAgYnVpbGRzIGFu ZCBydW5zIE9LLCBidXQgYWZ0ZXIgb25jZSB1c2luZyB0aGUgY3Vyc2VzIGRpc3BsYXksIGVjaG9p bmcgaXMKLSAgIG1lc3NlZCB1cC4gSW4gdGhpcyBjYXNlLCB3ZSB1c2UgYSBTeXN0ZW0tViBzcGVj aWZpYyB2YXJpYXRpb24gaW4gdGhlCi0gICBjdXJzZXMgY29kZSwgdXNpbmcgbmV3dGVybSgpIHRv IHByZXZlbnQgU3lzdGVtIFYgZnJvbSBhbHRlcmluZyB0aGUKLSAgIGJ1ZmZlcmluZy4gU2VlIG1h a2VmaWxlIGVudHJpZXMgZm9yIEFUJlQgNjMwMCBhbmQgM0IxLgotCi0gICBUaGUgVW5peCB2ZXJz aW9uIG9mIEMtS2VybWl0IGluY2x1ZGVzIGNvZGUgdG8gc3dpdGNoIHRvIGZpbGUgZGVzY3JpcHRv cgotICAgemVybyAoc3RkaW4pIGZvciByZW1vdGUtbW9kZSBmaWxlIHRyYW5zZmVyLiBUaGlzIGNv ZGUgaXMgbmVjZXNzYXJ5IHRvCi0gICBwcmV2ZW50IEtlcm1pdCBmcm9tIGdpdmluZyB0aGUgaW1w cmVzc2lvbiB0aGF0IGl0IGlzICJpZGxlIiBkdXJpbmcgZmlsZQotICAgdHJhbnNmZXJzLCB3aGlj aCwgYXQgc29tZSBzaXRlcywgY2FuIHJlc3VsdCBpbiB0aGUgam9iIGJlaW5nIGxvZ2dlZCBvdXQK LSAgIGluIHRoZSBtaWRkbGUgb2YgYW4gYWN0aXZlIGZpbGUgdHJhbnNmZXIgYnkgaWRsZS1qb2Ig bW9uaXRvcnMuCi0KLSAgIEhvd2V2ZXIsIHRoaXMgZmVhdHVyZSBjYW4gaW50ZXJmZXJlIHdpdGgg Y2VydGFpbiBzZXR1cHM7IGZvciBleGFtcGxlLAotICAgdGhlcmUgaXMgYSBwYWNrYWdlIHdoaWNo IHN1YnN0aXR1dGVzIGEgcHR5L3R0eSBwYWlyIGZvciAvZGV2L3R0eSBhbmQKLSAgIHNldHMgZmls ZSBkZXNjcmlwdG9yIDAgdG8gYmUgcmVhZC1vbmx5LCBwcmV2ZW50aW5nIEtlcm1pdCBmcm9tIHNl bmRpbmcKLSAgIHBhY2tldHMuIE9yLi4uIFdoZW4gYSBVbml4IHNoZWxsIGlzIGludm9rZWQgdW5k ZXIgdGhlIFBJQ0sgZW52aXJvbm1lbnQsCi0gICBmaWxlIGRlc2NyaXB0b3IgMCBpcyBpbm9wZXJh dGl2ZS4KLQotICAgVG8gcmVtb3ZlIHRoaXMgZmVhdHVyZSBhbmQgYWxsb3cgS2VybWl0IHRvIHdv cmsgaW4gc3VjaCBlbnZpcm9ubWVudHMsCi0gICBhZGQgdGhlIGNvbXBpbGUtdGltZSBvcHRpb246 Ci0KLS1ETk9GRFpFUk8KLQotICAgT24gc29tZSB2ZXJzaW9ucyBvZiBVbml4LCBlYXJsaWVyIHJl bGVhc2VzIG9mIEMtS2VybWl0IHdlcmUgcmVwb3J0ZWQgdG8KLSAgIHJlbmRlciBhIHR0eSBkZXZp Y2UgdW51c2FibGUgYWZ0ZXIgYSBoYW5ndXAgb3BlcmF0aW9uLiBFeGFtcGxlcyBpbmNsdWRlCi0g ICBJQk0gQUlYIG9uIHRoZSBSVCBQQyBhbmQgUlMvNjAwMC4gQSB0eXBpY2FsIHN5bXB0b20gb2Yg dGhpcyBwaGVub21lbm9uCi0gICBpcyB0aGF0IHRoZSBESUFMIGNvbW1hbmQgZG9lc24ndCB3b3Jr LCBidXQgQ09OTkVDVGluZyB0byB0aGUgZGV2aWNlIGFuZAotICAgZGlhbGluZyBtYW51YWxseSBk byB3b3JrLiBBIGZ1cnRoZXIgdGVzdCBpcyB0byBTRVQgRElBTCBIQU5HVVAgT0ZGLAotICAgd2hp Y2ggc2hvdWxkIG1ha2UgZGlhbGluZyB3b3JrIG9uY2UgYnkgc2tpcHBpbmcgdGhlIHByZS1kaWFs IGhhbmd1cC4KLSAgIEhvd2V2ZXIsIGFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGJyb2tlbiwgaXQg Y2FuJ3QgYmUgdXNlZCBhbnkgbW9yZToKLSAgIHN1YnNlcXVlbnQgYXR0ZW1wdHMgdG8gRElBTCB0 aGUgc2FtZSBkZXZpY2UgZG9uJ3Qgd29yay4gVGhlIGN1cmUgaXMKLSAgIHVzdWFsbHkgdG8gY2xv c2UgYW5kIHJlb3BlbiB0aGUgZGV2aWNlIGFzIHBhcnQgb2YgdGhlIGhhbmd1cCBvcGVyYXRpb24u Ci0gICBUbyBkbyB0aGlzLCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgY29tcGlsZS10aW1lIG9wdGlv bjoKLQotLURDTFNPUE4KLQotICAgU2ltaWxhcmx5LCB0aGVyZSBpcyBhIHNlY3Rpb24gb2YgY29k ZSBpbiB0dG9wZW4oKSwgd2hpY2ggZG9lcyBhbm90aGVyCi0gICBjbG9zZShvcGVuKCkpIHRvIGZv cmNlIHRoZSBPX05ERUxBWSBtb2RlIGNoYW5nZS4gT24gc29tZSBzeXN0ZW1zLCB0aGUKLSAgIGNs b3NlKG9wZW4oKSkgaXMgcmVxdWlyZWQgdG8gbWFrZSB0aGUgbW9kZSBjaGFuZ2UgdGFrZSBlZmZl Y3QsIGFuZAotICAgYXBwYXJlbnRseSBvbiBtb3N0IG90aGVycyBpdCBkb2VzIG5vIGhhcm0uIEJ1 dCByZXBvcnRlZGx5IG9uIGF0IGxlYXN0Ci0gICBvbmUgU3lzdGVtIFYgUjQgaW1wbGVtZW50YXRp b24sIGFuZCBvbiBTQ08gWGVuaXggMy4yLCB0aGUgY2xvc2Uob3BlbigpKQotICAgb3BlcmF0aW9u IGhhbmdzIGlmIHRoZSBkZXZpY2UgbGFja3MgY2FycmllciwgRVZFTiBUSE9VR0ggdGhlIENMT0NB TAotICAgY2hhcmFjdGVyaXN0aWMgaGFzIGp1c3QgYmVlbiBzZXQgdG8gYXZvaWQgdGhpcyB2ZXJ5 IHByb2JsZW0uIElmIHRoaXMKLSAgIGhhcHBlbnMgdG8geW91LCBhZGQgdGhpcyB0byB5b3VyIENG TEFHUzoKLQotLUROT0NPVEZNQwotCi0gICBvciwgZXF1aXZhbGVudGx5LCBpbiB5b3VyIEtGTEFH UyBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUuIEl0IHN0YW5kcwotICAgZm9yIE5PIENsb3NlKE9w ZW4oKSkgVG8gRm9yY2UgTW9kZSBDaGFuZ2UuCi0KLSAgIEMtS2VybWl0IHJlbmFtZXMgZmlsZXMg d2hlbiB5b3UgZ2l2ZSBhIFJFTkFNRSBjb21tYW5kIGFuZCBhbHNvCi0gICBhY2NvcmRpbmcgdG8g dGhlIGN1cnJlbnQgU0VUIEZJTEUgQ09MTElTSU9OIG9wdGlvbiB3aGVuIHJlY2VpdmluZwotICAg ZmlsZXMuIFRoZSBub3JtYWwgVW5peCB3YXkgdG8gcmVuYW1lIGEgZmlsZSBpcyB2aWEgdHdvIHN5 c3RlbSBjYWxsczoKLSAgIGxpbmsoKSBhbmQgdW5saW5rKCkuIEJ1dCB0aGlzIGxlYXZlcyBvcGVu IGEgd2luZG93IG9mIHZ1bG5lcmFiaWxpdHkuCi0gICBTb21lIFVuaXggc3lzdGVtcyBhbHNvIG9m ZmVyIGFuIGF0b21pYyByZW5hbWUob2xkbmFtZSxuZXduYW1lKQotICAgZnVuY3Rpb24uIElmIHlv dXIgdmVyc2lvbiBvZiBVbml4IGhhcyB0aGlzIGZ1bmN0aW9uLCBhZGQgdGhlIGZvbGxvd2luZwot ICAgdG8geW91ciBDRkxBR1M6Ci0KLS1EUkVOQU1FCi0KLSAgIEMtS2VybWl0IHByZWRlZmluZXMg dGhlIFJFTkFNRSBmb3Igc2V2ZXJhbCBVbml4IHZlcnNpb25zIGluCi0gICBbMzIyXWNrY2RlYi5o IChTVlI0LCBTVU5PUzQxLCBCU0Q0NCwgQUlYUlMsIGV0YykuIFlvdSBjYW4gdGVsbCBpZgotICAg cmVuYW1lKCkgaXMgYmVpbmcgdXNlZCBpZiB0aGUgU0hPVyBGRUFUVVJFUyBjb21tYW5kIGluY2x1 ZGVzIFJFTkFNRSBpbgotICAgdGhlIGNvbXBpbGVyIG9wdGlvbnMgbGlzdC4gSWYgdGhlIHByZWRl ZmluZWQgUkVOQU1FIHN5bWJvbCBjYXVzZXMKLSAgIHRyb3VibGUsIHRoZW4gYWRkIE5PUkVOQU1F IHRvIHlvdXIgQ0ZMQUdTLiBUcm91YmxlIGluY2x1ZGVzOgotCi0gICAgYS4gTGlua2VyIGNvbXBs YWlucyB0aGF0IF9yZW5hbWUgaXMgYW4gdW5yZXNvbHZlZCBzeW1ib2wuCi0gICAgYi4gTGlua2lu ZyB3b3JrcywgYnV0IEtlcm1pdCdzIFJFTkFNRSBjb21tYW5kIGRvZXNuJ3Qgd29yayAod2hpY2gK LSAgICAgICBoYXBwZW5zIGJlY2F1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgcmVuYW1lKCkgbWlnaHQg aGF2ZSB0aGVpcgotICAgICAgIGFyZ3VtZW50cyByZXZlcnNlZCkuCi0KLSAgIElmIHJlbmFtZSgp IGlzIG5vdCB1c2VkLCB0aGVuIEtlcm1pdCB1c2VzIGxpbmsoKS91bmxpbmsoKSwgd2hpY2ggaXMK LSAgIGVxdWl2YWxlbnQgZXhjZXB0IGl0IGlzIG5vdCBhdG9taWM6IHRoZXJlIGlzIGEgdGlueSBp bnRlcnZhbCBpbiB3aGljaAotICAgc29tZSBvdGhlciBwcm9jZXNzIG1pZ2h0ICJkbyBzb21ldGhp bmciIHRvIG9uZSBvZiB0aGUgZmlsZXMgb3IgbGlua3MuCi0KLSAgIFNvbWUgVW5peCBzeXN0ZW1z IChPbGl2ZXR0aSBYL09TLCBBbWRhaGwgVVRTL1YsIElDTCBTVlIzLCBldGMpIGRlZmluZQotICAg dGhlIFNfSVNSRUcgYW5kIFNfSVNESVIgbWFjcm9zIGluY29ycmVjdGx5LiBUaGlzIGlzIGNvbXBl bnNhdGVkIGZvcgotICAgYXV0b21hdGljYWxseSBpbiBbMzIzXWNrdWZpby5jLiBPdGhlciBzeXN0 ZW1zIG1pZ2h0IGhhdmUgdGhpcyBzYW1lCi0gICBwcm9ibGVtLiBJZiB5b3UgZ2V0IGEgY29tcGls ZS10aW1lIGVycm9yIG1lc3NhZ2UgcmVnYXJkaW5nIFNfSVNSRUcKLSAgIGFuZC9vciBTX0lTRElS LCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIENGTEFHUzoKLQotLURJU0RJUkJVRwotCi0gICBG aW5hbGx5LCBoZXJlJ3MgYSBzeW1ib2wgeW91IHNob3VsZCBORVZFUiBkZWZpbmU6Ci0KLS1EQ09N TUVOVAotCi0gICBJdCdzIHVzZWQgZm9yIGNvbW1lbnRpbmcgb3V0IGJsb2NrcyBvZiBjb2RlLiBJ ZiBmb3Igc29tZSByZWFzb24geW91Ci0gICBmaW5kIHRoYXQgeW91ciBjb21waWxlciBoYXMgQ09N TUVOVCBkZWZpbmVkLCB0aGVuIGFkZCAtVUNPTU1FTlQgdG8KLSAgIENGTEFHUyBvciBLRkxBR1Mh IFNpbWlsYXJseSwgc29tZSBoZWFkZXIgZmlsZXMgaGF2ZSBiZWVuIGtub3duIHRvCi0gICBkZWZp bmUgQ09NTUVOVCwgaW4gd2hpY2ggY2FzZSB5b3UgbXVzdCBhZGQgIiN1bmRlZiBDT01NRU5UIiB0 byBlYWNoCi0gICBDLUtlcm1pdCBzb3VyY2UgbW9kdWxlLCBhZnRlciBhbGwgdGhlICNpbmNsdWRl cy4KLQotICA5LjkuIFRlcm1pbmFsIEludGVycnVwdGlvbgotCi0gICBbIFszMjRdVG9wIF0gWyBb MzI1XUNvbnRlbnRzIF0gWyBbMzI2XVNlY3Rpb24gQ29udGVudHMgXSBbIFszMjddTmV4dCBdCi0g ICBbIFszMjhdUHJldmlvdXMgXQotCi0gICBXaGVuIEMtS2VybWl0IGVudGVycyBpbnRlcmFjdGl2 ZSBjb21tYW5kIG1vZGUsIGl0IHNldHMgYSBDb250cm9sLUMKLSAgICh0ZXJtaW5hbCBrZXlib2Fy ZCBpbnRlcnJ1cHQgPSBTSUdJTlQpIHRyYXAgdG8gYWxsb3cgaXQgdG8gcmV0dXJuIHRvCi0gICB0 aGUgY29tbWFuZCBwcm9tcHQgd2hlbmV2ZXIgdGhlIHVzZXIgdHlwZXMgQ29udHJvbC1DIChvciB3 aGF0ZXZlciBpcwotICAgYXNzaWduZWQgdG8gYmUgdGhlIGludGVycnVwdCBjaGFyYWN0ZXIpLiBU aGlzIGlzIGltcGxlbWVudGVkIHVzaW5nCi0gICBzZXRqbXAoKSBhbmQgbG9uZ2ptcCgpLiBPbiBz b21lIHN5c3RlbXMsIGRlcGVuZGluZyBvbiB0aGUgbWFjaGluZQotICAgYXJjaGl0ZWN0dXJlIGFu ZCBDIGNvbXBpbGVyIGFuZCB3aG8ga25vd3Mgd2hhdCBlbHNlLCB5b3UgbWlnaHQgZ2V0Ci0gICAi TWVtb3J5IGZhdWx0IChjb3JlZHVtcCkiIG9yICJsb25nam1wIGJvdGNoIiBpbnN0ZWFkIG9mIHRo ZSBkZXNpcmVkCi0gICBlZmZlY3QgKHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gaW4gNUEoMTkwKSBh bmQgbGF0ZXIpLiBJbiB0aGF0IGNhc2UsIGFkZAotICAgLUROT0NDVFJBUCB0byB5b3VyIENGTEFH UyBhbmQgcmVidWlsZCB0aGUgcHJvZ3JhbS4KLQotICAgSm9iIGNvbnRyb2wgLS0gdGhlIGFiaWxp dHkgdG8gInN1c3BlbmQiIEMtS2VybWl0IG9uIGEgVW5peCBzeXN0ZW0gYnkKLSAgIHR5cGluZyB0 aGUgInN1c3AiIGNoYXJhY3RlciAobm9ybWFsbHkgQ3RybC1aKSBhbmQgdGhlbiByZXN1bWUgZXhl Y3V0aW9uCi0gICBsYXRlciAod2l0aCB0aGUgImZnIiBjb21tYW5kKSAtLSBpcyBhIHRyaWNreSBi dXNpbmVzcy4gQy1LZXJtaXQgbXVzdAotICAgdHJhcCBzdXNwZW5kIHNpZ25hbHMgc28gaXQgY2Fu IHB1dCB0aGUgdGVybWluYWwgYmFjayBpbnRvIG5vcm1hbCBtb2RlCi0gICB3aGVuIHlvdSBzdXNw ZW5kIGl0IChLZXJtaXQgcHV0cyB0aGUgdGVybWluYWwgaW50byB2YXJpb3VzIHN0cmFuZ2UKLSAg IG1vZGVzIGR1cmluZyBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNpbmcsIENPTk5FQ1QsIGFuZCBm aWxlIHRyYW5zZmVyKS4KLSAgIFN1cHBvcnRpbmcgY29kZSBpcyBjb21waWxlZCBpbnRvIEMtS2Vy bWl0IGF1dG9tYXRpY2FsbHkgaWYgPHNpZ25hbC5oPgotICAgaW5jbHVkZXMgYSBkZWZpbml0aW9u IGZvciB0aGUgU0lHVFNUUCBzaWduYWwuIEhPV0VWRVIuLi4gc29tZSBzeXN0ZW1zCi0gICBkZWZp bmUgdGhpcyBzaWduYWwgd2l0aG91dCBzdXBwb3J0aW5nIGpvYiBjb250cm9sIGNvcnJlY3RseS4g WW91IGNhbgotICAgYnVpbGQgS2VybWl0IHRvIGlnbm9yZSBTSUdUU1RQIHNpZ25hbHMgYnkgaW5j bHVkaW5nIHRoZSAtRE5PSkMgb3B0aW9uCi0gICBpbiBDRkxBR1MuIChZb3UgY2FuIGFsc28gZG8g dGhpcyBhdCBydW50aW1lIGJ5IGdpdmluZyB0aGUgY29tbWFuZCBTRVQKLSAgIFNVU1BFTkQgT0ZG LikKLQotICAgICBOT1RFOiBBcyBvZiB2ZXJzaW9uIDVBKDE5MCksIEMtS2VybWl0IG1ha2VzIGFu b3RoZXIgc2FmZXR5IGNoZWNrLgotICAgICBFdmVuIGlmIGpvYiBjb250cm9sIGlzIGF2YWlsYWJs ZSBpbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSAoYWNjb3JkaW5nCi0gICAgIHRvIHRoZSBudW1lcm91 cyBjaGVja3MgbWFkZSBpbiBjb25nbSgpKSwgaXQgd2lsbCBzdGlsbCBkaXNhYmxlIHRoZQotICAg ICBjYXRjaGluZyBvZiBTSUdUU1RQIHNpZ25hbHMgaWYgU0lHVFNUUCB3YXMgc2V0IHRvIFNJR19J R04gYXQgdGhlCi0gICAgIHRpbWUgQy1LZXJtaXQgd2FzIHN0YXJ0ZWQuCi0KLSAgIFN5c3RlbSBW IFIzIGFuZCBlYXJsaWVyIHN5c3RlbXMgbm9ybWFsbHkgZG8gbm90IHN1cHBvcnQgam9iIGNvbnRy b2wuIElmCi0gICB5b3UgaGF2ZSBhbiBTVlIzIHN5c3RlbSB0aGF0IGRvZXMsIGluY2x1ZGUgdGhl IGZvbGxvd2luZyBvcHRpb24gaW4geW91cgotICAgQ0ZMQUdTOgotCi0tRFNWUjNKQwotCi0gICBP biBzeXN0ZW1zIHRoYXQgY29ycmVjdGx5IGltcGxlbWVudCBQT1NJWCBzaWduYWwgaGFuZGxpbmcs IHNpZ25hbHMgY2FuCi0gICBiZSBoYW5kbGVkIG1vcmUgcmVsaWFibHkgdGhhbiBpbiBCZWxsLCBC ZXJrZWxleSwgb3IgQVQmVCBVbml4ZXMuIE9uCi0gICBzeXN0ZW1zIChzdWNoIGFzIFFOWCkgdGhh dCBhcmUgInN0cmljdGx5IFBPU0lYIiwgUE9TSVggc2lnbmFsIGhhbmRsaW5nCi0gICAqbXVzdCog YmUgdXNlZCwgb3RoZXJ3aXNlIG5vIHNpZ25hbCB3aWxsIHdvcmsgbW9yZSB0aGFuIG9uY2UuIElm IHlvdQotICAgaGF2ZSBQT1NJWC1iYXNlZCBzeXN0ZW0gYW5kIHlvdSBmaW5kIHRoYXQgeW91ciB2 ZXJzaW9uIG9mIEtlcm1pdAotICAgcmVzcG9uZHMgdG8gQ3RybC1DIChTSUdJTlQpIG9yIEN0cmwt WiAoU0lHVFNUUCkgb25seSBvbmNlLCB0aGVuIHlvdQotICAgc2hvdWxkIGFkZCB0aGUgZm9sbG93 aW5nIG9wdGlvbiB0byB5b3VyIENGTEFHUzoKLQotLURDS19QT1NJWF9TSUcKLQotICAgQnV0IGJl IGNhcmVmdWw7IHNvbWUgUE9TSVggaW1wbGVtZW50YXRpb25zLCBub3RhYmx5IDQuNEJTRCwgaW5j bHVkZQotICAgUE9TSVggc2lnbmFsIGhhbmRsaW5nIHN5bWJvbHMgYW5kIGZ1bmN0aW9ucyBhcyAi c3R1YnMiIG9ubHksIHdoaWNoIGRvCi0gICBub3RoaW5nLiBMb29rIGluIDxzaWduYWwuaD4gZm9y IHNpZ3NldGptcCBhbmQgc2lnbG9uZ2ptcCBhbmQgcmVhZCB0aGUKLSAgIGNvbW1lbnRzLgotCi0x MC4gRElBTElORyBPVVQgQU5EIENPT1JESU5BVElORyBXSVRIIFVVQ1AKLQotICAgWyBbMzI5XVRv cCBdIFsgWzMzMF1Db250ZW50cyBdIFsgWzMzMV1OZXh0IF0gWyBbMzMyXVByZXZpb3VzIF0KLQot ICAgVGhlIHNob3J0IHZlcnNpb24gKGdlbmVyYWwpOgotCi0gICAgIEluIG9yZGVyIGZvciBDLUtl cm1pdCB0byBiZSBhYmxlIHRvIGRpYWwgb3V0IGZyb20geW91ciBVbml4Ci0gICAgIGNvbXB1dGVy LCB5b3UgbmVlZCB0byBnaXZlIGl0IHRoZSBzYW1lIG93bmVyLCBncm91cCwgYW5kIHBlcm1pc3Np b25zCi0gICAgIGFzIHlvdXIgb3RoZXIgZGlhbG91dCBwcm9ncmFtcywgc3VjaCBhcyBjdSwgdGlw LCBtaW5pY29tLCB1dWNwLAotICAgICBzZXlvbiwgZXRjLgotCi0gICBUaGUgc2hvcnQgdmVyc2lv biBmb3IgTGludXggb25seToKLQotICAgICBTaW5jZSBSZWQgSGF0IDcuMiwgYWJvdXQgMjAwMiwg TGludXggZG9lcyBub3QgbGVhdmUgdGhlIGxvY2tmaWxlCi0gICAgIGhhbmRsaW5nIHRvIGVhY2gg YXBwbGljYXRpb24sIGJ1dCBpbnN0ZWFkIHByb3ZpZGVzIGFuIGV4dGVybmFsCi0gICAgIGFwcGxp Y2F0aW9uLCAvdXNyL3NiaW4vbG9ja2RldiwgdGhhdCBhbGwgYXBwbGljYXRpb25zIHNob3VsZCBp bnZva2UKLSAgICAgd2hlbiB0aGV5IG5lZWQgdG8gYWNjZXNzIGEgc2VyaWFsIHBvcnQ7IGxvY2tk ZXYgbG9ja3MgYW5kIHVubG9ja3MKLSAgICAgdGhlIHBvcnQgd2l0aG91dCByZXF1aXJpbmcgdGhl IGFwcGxpY2F0aW9uIHRvIGhhdmUgcHJpdmlsZWdlcywgc2luY2UKLSAgICAgdGhlIHByaXZpbGVn ZXMgb24gdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSBhcmUgYXNzaWduZWQgdG8gbG9ja2Rldi4KLSAg ICAgQy1LZXJtaXQgOC4wLjIxMSBhbmQgbGF0ZXIgc3VwcG9ydCB0aGlzIG1ldGhvZC4gQnV0IEMt S2VybWl0IHN0aWxsCi0gICAgIG5lZWRzIHRvIGJlIGFibGUgdG8gb3BlbiB0aGUgcG9ydCBpdHNl bGYsIGFuZCB0aGVyZWZvcmUgaWYgdGhlCi0gICAgIHBvcnQncyBwZXJtaXNzaW9ucyBkbyBub3Qg YWxsb3cgcmVhZC93cml0ZSBhY2Nlc3MgdG8gdGhlIGdlbmVyYWwKLSAgICAgcHVibGljLCB0aGUg Z2VuZXJhbCBydWxlIG11c3Qgc3RpbGwgYmUgZm9sbG93ZWQ6IGluIHRoZSBtb3N0IGNvbW1vbgot ICAgICBjYXNlLCBpdCBtdXN0IGJlIFNFVEdJRCB0byB0aGUgZ3JvdXAgdXVjcCAoZXhwbGFpbmVk IGJlbG93KS4gSWYgYQotICAgICBwcmUtOC4wLjIxMSB2ZXJzaW9uIG9mIEMtS2VybWl0IGlzIHRv IGJlIGluc3RhbGxlZCBmb3IgdXNlIHdpdGgKLSAgICAgc2VyaWFsIHBvcnRzIG9uIGFueSB2ZXJz aW9uIG9mIExpbnV4LCBpdCBtdXN0IHN0aWxsIGJlIGluc3RhbGxlZCBhcwotICAgICBkZXNjcmli ZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KLQotICAgVGhlIGxvbmcgdmVyc2lvbjoKLQot ICAgTWFrZSBzdXJlIHlvdXIgZGlhbG91dCBsaW5lIGlzIGNvcnJlY3RseSBjb25maWd1cmVkIGZv ciBkaWFsaW5nIG91dCAoYXMKLSAgIG9wcG9zZWQgdG8gbG9naW4pLiBUaGUgbWV0aG9kIGZvciBk b2luZyB0aGlzIGlzIGRpZmZlcmVudCBmb3IgZWFjaCBraW5kCi0gICBvZiBVbml4LiBDb25zdWx0 IHlvdXIgc3lzdGVtIGRvY3VtZW50YXRpb24gZm9yIGNvbmZpZ3VyaW5nIGxpbmVzIGZvcgotICAg ZGlhbGluZyBvdXQgKGZvciBleGFtcGxlLCBTdW4gU1BBUkNzdGF0aW9uIElQQyB1c2VycyBzaG91 bGQgcmVhZCB0aGUKLSAgIHNlY3Rpb24gIlNldHRpbmcgdXAgTW9kZW0gU29mdHdhcmUiIGluIHRo ZSBEZXNrdG9wIFNQQVJDIFN1biBTeXN0ZW0gYW5kCi0gICBOZXR3b3JrIE1hbmFnZXIncyBHdWlk ZSwgb3IgdGhlIFRlcm1pbmFscyBhbmQgTW9kZW1zIHNlY3Rpb24gb2YgdGhlIEhQCi0gICBtYW51 YWwsICJDb25maWd1cmluZyBIUC1VWCBmb3IgUGVyaXBoZXJhbHMiIChlLmcuIC91c3Ivc2Jpbi9z YW0gPT4KLSAgIFBlcmlwaGVyYWwgRGV2aWNlcyA9PiBUZXJtaW5hbHMgYW5kIE1vZGVtcyA9PiBB ZGQgTW9kZW0pLgotCi0gICBVbmxpa2UgbW9zdCBvdGhlciBtdWx0aXVzZXIsIG11bHRpdGFza2lu ZyBvcGVyYXRpbmcgc3lzdGVtcywgVW5peAotICAgYWxsb3dzIG11bHRpcGxlIHVzZXJzIHRvIGFj Y2VzcyB0aGUgc2FtZSBzZXJpYWwgZGV2aWNlIGF0IHRoZSBzYW1lCi0gICB0aW1lLCBldmVuIHRo b3VnaCB0aGVyZSBpcyBubyBlYXJ0aGx5IHJlYXNvbiB3aHkgdHdvIHVzZXJzIHNob3VsZCBkbwot ICAgdGhpcy4gV2hlbiB0aGV5IGRvLCB1c2VyIEEgd2lsbCByZWFkIHNvbWUgb2YgdGhlIGluY29t aW5nIGNoYXJhY3RlcnMsCi0gICBhbmQgdXNlciBCIHdpbGwgcmVhZCB0aGUgb3RoZXJzLiBJbiBh bGwgbGlrZWxpaG9vZCwgbmVpdGhlciB1c2VyIHdpbGwKLSAgIHNlZSB0aGVtIGFsbC4gRnVydGhl cm1vcmUsIFVzZXIgQiBjYW4gaGFuZyB1cCBVc2VyIEEncyBjYWxsLCBhbmQgc28KLSAgIG9uZS4K LQotICAgUmF0aGVyIHRoYW4gY2hhbmdlIFVuaXggdG8gZW5mb3JjZSBleGNsdXNpdmUgYWNjZXNz IHRvIHNlcmlhbCBkZXZpY2VzCi0gICBzdWNoIGFzIHR0eXMsIHdoZW4gaXQgbWlnaHQgc3RpbGwg aGF2ZSBiZWVuIHBvc3NpYmxlLCBVbml4IGRldmVsb3BlcnMKLSAgIG9wdGVkIGZvciBhICJsb2Nr IGZpbGUiIG1lY2hhbmlzbS4gQW55IHByb2Nlc3MgdGhhdCB3YW50cyB0byBvcGVuIGEgdHR5Ci0g ICBkZXZpY2Ugc2hvdWxkIGZpcnN0IGNoZWNrIHRvIHNlZSBpZiBhIGZpbGUgb2YgYSBjZXJ0YWlu IG5hbWUgZXhpc3RzLAotICAgYW5kIGlmIHNvLCBub3QgdG8gb3BlbiB0aGUgZGV2aWNlLiBJZiB0 aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgdGhlCi0gICBwcm9jZXNzIGNyZWF0ZXMgdGhlIGZpbGUg YW5kIHRoZW4gb3BlbnMgdGhlIGRldmljZS4gV2hlbiB0aGUgcHJvY2VzcwotICAgY2xvc2VzIHRo ZSBkZXZpY2UsIGl0IGRlc3Ryb3lzIHRoZSBsb2NrZmlsZS4gVGhpcyBwcm9jZWR1cmUgd2FzCi0g ICBvcmlnaW5hdGVkIGZvciB1c2Ugd2l0aCBVbml4J3MgVVVDUCwgQ1UsIGFuZCBUSVAgcHJvZ3Jh bXMsIGFuZCBzbyB0aGVzZQotICAgbG9ja2ZpbGVzIGFyZSBjb21tb25seSBjYWxsZWQgIlVVQ1Ag bG9ja2ZpbGVzIiAoVVVDUCA9IFVuaXgtdG8tVW5peAotICAgQ29weSBQcm9ncmFtKS4KLQotICAg QXMgeW91IGNhbiBpbWFnaW5lLCB0aGlzIG1ldGhvZCBpcyByaWRkbGVkIHdpdGggcGl0ZmFsbHM6 Ci0KLSAgICAgKiBJZiBhIHByb2Nlc3MgZG9lcyBub3Qgb2JzZXJ2ZSB0aGUgcHJldmFpbGluZyBs b2NrZmlsZSBjb252ZW50aW9uLAotICAgICAgIHRoZW4gaXQgY2FuIGludGVyZmVyZSB3aXRoIG90 aGVyICJwb2xpdGUiIHByb2Nlc3Nlcy4gQW5kIGluIGZhY3QsCi0gICAgICAgdmVyeSBmZXcgVW5p eCBhcHBsaWNhdGlvbnMgb3IgY29tbWFuZHMgaGFuZGxlIGxvY2tmaWxlcyBhdCBhbGw7IGFuCi0g ICAgICAgb3JpZ2luYWwgZGVzaWduIGdvYWwgb2YgVW5peCB3YXMgdGhhdCAiZXZlcnl0aGluZyBp cyBhIGZpbGUiLCBhbmQKLSAgICAgICBjb3VudGxlc3MgdXRpbGl0aWVzIG9wZXJhdGUgb24gZmls ZXMgZGlyZWN0bHkgKGJ5IG9wZW5pbmcgdGhlbSkgb3IKLSAgICAgICBpbmRpcmVjdGx5IHRocm91 Z2ggcmVkaXJlY3Rpb24gb2Ygc3RhbmRhcmQgaS9vLCB3aXRob3V0IGNyZWF0aW5nIG9yCi0gICAg ICAgbG9va2luZyBmb3IgbG9ja2ZpbGVzLgotICAgICAqIElmIGEgcHJvY2VzcyBjcmFzaGVzIHdo aWxlIGl0IGhhcyB0aGUgZGV2aWNlIG9wZW4sIHRoZSBsb2NrZmlsZSBpcwotICAgICAgIGxlZnQg YmVoaW5kLCBwcmV2ZW50aW5nIGZ1cnRoZXIgcHJvY2Vzc2VzIGZyb20gdXNpbmcgdGhlIGRldmlj ZS4KLSAgICAgKiBWYXJpb3VzIHZlcnNpb25zIG9mIFVuaXggdXNlIGRpZmZlcmVudCBuYW1lcyBm b3IgdGhlIGxvY2tmaWxlcywgcHV0Ci0gICAgICAgdGhlbSBpbiBkaWZmZXJlbnQgZGlyZWN0b3Jp ZXMsIHdpdGggZGlmZmVyZW50IG93bmVycyBhbmQgZ3JvdXBzIGFuZAotICAgICAgIHBlcm1pc3Np b25zLCBhbmQgc3BlY2lmeSB0aGVpciBjb250ZW50cyBkaWZmZXJlbnRseS4KLSAgICAgKiBPbiBh IGdpdmVuIHBsYXRmb3JtLCB0aGUgbG9ja2ZpbGUgY29udmVudGlvbnMgbWF5IGNoYW5nZSBmcm9t IG9uZQotICAgICAgIFVuaXggcmVsZWFzZSB0byB0aGUgbmV4dCAoZm9yIGV4YW1wbGUsIFN1bk9T IDQuMCB0byA0LjEpIG9yLCBpbiB0aGUKLSAgICAgICBjYXNlIG9mIExpbnV4LCBhY3Jvc3MgZGlm ZmVyZW50IGRpc3RyaWJ1dGlvbnMuCi0gICAgICogVGhlIHNhbWUgdHR5IGRldmljZSBtaWdodCBo YXZlIG1vcmUgdGhhbiBvbmUgbmFtZSwgYW5kIG1vc3QKLSAgICAgICBsb2NrZmlsZSBjb252ZW50 aW9ucyBkb24ndCBhbGxvdyBmb3IgdGhpcy4gU2ltaWxhcmx5IGZvciBzeW1ib2xpYwotICAgICAg IGxpbmtzLgotCi0gICBJbiBhbiBhdHRlbXB0IHRvIGFkZHJlc3MgdGhlIHByb2JsZW0gb2YgInN0 YWxlIiBsb2NrZmlsZXMsIG1vc3QgVVVDUAotICAgaW1wbGVtZW50YXRpb25zIHB1dCB0aGUgUElE IChQcm9jZXNzIElEKSBvZiB0aGUgY3JlYXRpbmcgcHJvY2VzcyBpbiB0aGUKLSAgIGxvY2tmaWxl LiBUaHVzLCBhbm90aGVyIHByb2Nlc3MgdGhhdCB3YW50cyB0byBvcGVuIHRoZSBjb3JyZXNwb25k aW5nCi0gICBkZXZpY2UgY2FuIGNoZWNrIG5vdCBvbmx5IGZvciB0aGUgbG9ja2ZpbGUgaXRzZWxm LCBidXQgYWxzbyBjYW4gY2hlY2sKLSAgIHRoZSBQSUQgZm9yIHZhbGlkaXR5LiBCdXQgdGhpcyBk b2Vzbid0IHdvcmsgd2VsbCBlaXRoZXI6Ci0KLSAgICAgKiBQSURzIGFyZSBzdG9yZWQgaW4gZGl2 ZXJzZSBmb3JtYXRzIHRoYXQgY2hhbmdlIHdpdGggZXZlcnkgbmV3Ci0gICAgICAgcmVsZWFzZSAo c2hvcnQsIGludGVnZXIsIGxvbmcsIG9yIHN0cmluZyBpbiBhbnkgb2YgdmFyaW91cwotICAgICAg IGZvcm1hdHMpLiBJZiB0aGUgcmVhZGluZyBwcm9ncmFtIGRvZXMgbm90IGZvbGxvdyB0aGUgc2Ft ZQotICAgICAgIGNvbnZlbnRpb24gYXMgdGhlIHdyaXRpbmcgcHJvZ3JhbSwgaXQgY2FuIGRpYWdu b3NlIGEgdmFsaWQgUElEIHRvCi0gICAgICAgYmUgaW52YWxpZCwgYW5kIHRoZXJlZm9yZSBub3Qg aG9ub3IgdGhlIGxvY2suCi0gICAgICogUElEcyByZWN5Y2xlLiBJZiB0aGUgbG9ja2ZpbGUgd2Fz IGNyZWF0ZWQgYnkgUElEIDEyMzQsIHdoaWNoIGxhdGVyCi0gICAgICAgY3Jhc2hlZCB3aXRob3V0 IHJlbW92aW5nIHRoZSBsb2NrZmlsZSwgYW5kIHRoZW4gYSBuZXcgcHJvY2VzcyAxMjM0Ci0gICAg ICAgZXhpc3RzIGEgdGhlIHRpbWUgdGhlIGxvY2tmaWxlIGlzIGNoZWNrZWQsIHRoZSBsb2NrZmls ZSB3aWxsIGJlCi0gICAgICAgaW1wcm9wZXJseSB0YWtlbiBhcyB2YWxpZCwgYW5kIGFjY2VzcyB0 byB0aGUgZGV2aWNlIGRlbmllZAotICAgICAgIHVubmVjZXNzYXJpbHkuCi0KLSAgIFNldmVyYWwg dGVjaG5pcXVlcyBhZGRyZXNzIHRoZSBwcm9ibGVtIG9mIG11bHRpcGxlIG5hbWVzIGZvciB0aGUg c2FtZQotICAgZGV2aWNlOgotCi0gICAgICogTXVsdGlwbGUgbG9ja2ZpbGVzLiBGb3IgZXhhbXBs ZSwgaWYgdGhlIHVzZXIgb3BlbnMgYSBkZXZpY2UgdGhyb3VnaAotICAgICAgIGEgc3ltbGluaywg YSBsb2NrZmlsZSBpcyBjcmVhdGVkIGZvciBib3RoIHRoZSBzeW1saW5rIG5hbWUgYW5kIHRoZQot ICAgICAgIHRydWUgbmFtZSAob2J0YWluZWQgZnJvbSByZWFkbGluaygpKS4gSG93ZXZlciwgd2hl biBtdWx0aXBsZQotICAgICAgIGRyaXZlcnMgYXJlIGluc3RhbGxlZCBmb3IgdGhlIHNhbWUgZGV2 aWNlIChlLmcuIC9kZXYvY3VhLAotICAgICAgIC9kZXYvY3VmYSwgZXRjKSwgdGhpcyBhcHByb2Fj aCB3b24ndCB3b3JrIHVubGVzcyBhbGwgYXBwbGljYXRpb25zCi0gICAgICAgKmtub3cqIGFsbCB0 aGUgZGlmZmVyZW50IG5hbWVzIGZvciB0aGUgc2FtZSBkZXZpY2UgYW5kIG1ha2UKLSAgICAgICBs b2NrZmlsZXMgZm9yIGFsbCBvZiB0aGVtLCB3aGljaCBpcyBvYnZpb3VzbHkgbm90IHByYWN0aWNh bC4KLSAgICAgKiBMb2NrZmlsZXMgd2hvc2UgbmFtZXMgYXJlIG5vdCBiYXNlZCBvbiB0aGUgZGV2 aWNlIG5hbWUuIFRoZXNlCi0gICAgICAgbG9ja2ZpbGVzIGdlbmVyYWxseSBoYXZlIG5hbWVzIGxp a2UgTEsuaW5vZGUvbWFqb3IvbWlub3IsIHdoZXJlCi0gICAgICAgaW5vZGUsIG1ham9yLCBhbmQg bWlub3IgYXJlIG51bWJlcnMsIHdoaWNoIHdpbGwgYWx3YXlzIGJlIHRoZSBzYW1lCi0gICAgICAg Zm9yIGFueSBwaHlzaWNhbCBkZXZpY2UsIG5vIG1hdHRlciB3aGF0IGl0cyBuYW1lLiBUaGlzIGZv cm0gb2YKLSAgICAgICBsb2NrZmlsZSBpcyB1c2VkIGluIFN5c3RlbSBWIFI0IGFuZCBpdHMgZGVy aXZhdGl2ZXMsIHN1Y2ggYXMKLSAgICAgICBTb2xhcmlzLCBVbml4V2FyZSwgZXRjLiBJZiBsb2Nr ZmlsZXMgbXVzdCBiZSB1c2VkIChhcyBvcHBvc2VkIHRvLAotICAgICAgIHNheSwga2VybmVsLWJh c2VkIGxvY2tzKSwgdGhpcyB3b3VsZCBzZWVtIHRvIGJlIHRoZSBtb3N0IGVmZmVjdGl2ZQotICAg ICAgIGZvcm0uCi0KLSAgIE1vc3QgdmVyc2lvbnMgb2YgVW5peCB3ZXJlIG5vdCBkZXNpZ25lZCB0 byBhY2NvbW1vZGF0ZSB0aGlyZC1wYXJ0eQotICAgY29tbXVuaWNhdGlvbnMgc29mdHdhcmU7IHRo dXMgdmVuZG9ycyBvZiB0aGVzZSBVbml4IHByb2R1Y3RzIGZlZWwgbm8KLSAgIGNvbXB1bmN0aW9u IGFib3V0IGNoYW5naW5nIGxvY2tmaWxlIGNvbnZlbnRpb25zIGZyb20gcmVsZWFzZSB0bwotICAg cmVsZWFzZSwgc2luY2UgdGhleSBhbHNvIGNoYW5nZSB0aGVpciB2ZXJzaW9ucyBvZiB0aGUgY3Us IHV1Y3AsIHRpcCwKLSAgIGV0YywgcHJvZ3JhbXMgYXQgdGhlIHNhbWUgdGltZSB0byBtYXRjaC4g QW5kIHNpbmNlIHRoZSBzb3VyY2UgY29kZSB0bwotICAgdGhlc2UgcHJvZ3JhbXMgbWlnaHQgbm90 IGJlIHB1Ymxpc2hlZCwgaXQgaXMgZGlmZmljdWx0IGZvciBtYWtlcnMgb2YKLSAgIHRoaXJkLXBh cnR5IHByb2R1Y3RzIGxpa2UgQy1LZXJtaXQgdG8gZmluZCBvdXQgd2hhdCB0aGUgbmV3IGNvbnZl bnRpb25zCi0gICBhcmUuIEl0IGFsc28gZm9yY2VzIHJlbGVhc2Ugb2YgbmV3IHZlcnNpb25zIG9m IEMtS2VybWl0IHdoZW5ldmVyIHRoZSBPUwotICAgdmVuZG9yIG1ha2VzIGEgY2hhbmdlIGxpa2Ug dGhpcy4KLQotICAgU29tZSBVbml4IHZlbmRvcnMgaGF2ZSB0YWtlbiBhIHNtYWxsIHN0ZXAgdG8g c2ltcGxpZnkgY29tbXVuaWNhdGlvbnMKLSAgIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGZvciB0 aGVpciBwcm9kdWN0czogdGhlIGluY2x1c2lvbiBvZiBsb2NrZmlsZQotICAgcm91dGluZXMgaW4g dGhlIHN0YW5kYXJkIHN5c3RlbSBDIHJ1bnRpbWUgbGlicmFyaWVzIHRvIHNoaWVsZCB0aGUKLSAg IGFwcGxpY2F0aW9uIGZyb20gdGhlIGRldGFpbHMgb2YgbG9ja2ZpbGUgbWFuYWdlbWVudCAoSUJN IEFJWCBpcyBhbgotICAgZXhhbXBsZSkuIFdoZW4gc3VjaCByb3V0aW5lcyBhcmUgdXNlZCwgY29t bXVuaWNhdGlvbnMgYXBwbGljYXRpb25zIGRvCi0gICBub3QgbmVlZCBtb2RpZmljYXRpb24gd2hl biBsb2NrZmlsZSBjb252ZW50aW9ucyBjaGFuZ2UgKGFsdGhvdWdoIHRoZXkKLSAgIHdpbGwgbmVl ZCByZWNvbXBpbGluZyBpZiB0aGUgcm91dGluZXMgYXJlIHN0YXRpY2FsbHkgbGlua2VkIGludG8g dGhlCi0gICBhcHBsaWNhdGlvbikuIEluIHRoZSBBSVggZXhhbXBsZSwgdGhlIHNpbXBsZSBmdW5j dGlvbiBjYWxscyB0dHlsb2NrKCksCi0gICB0dHl1bmxvY2soKSwgYW5kIHR0eWxvY2tlZCgpIHJl cGxhY2UgaHVuZHJlZHMgb2YgbGluZXMgb2YgdWdseSBjb2RlIGluCi0gICBDLUtlcm1pdCB0aGF0 IGF0dGVtcHRzIHRvIGtlZXAgcGFjZSB3aXRoIGV2ZXJ5IHJlbGVhc2Ugb2YgZXZlcnkgVW5peAot ICAgcHJvZHVjdCBvdmVyIHRoZSBsYXN0IDIwIHllYXJzLiBJbmNsdXNpb24gb2YgdHR5bG9jaygp IGNvZGUgb2NjdXJzCi0gICB3aGVuOgotCi0tRFVTRVRUWUxPQ0sKLQotICAgaXMgaW5jbHVkZWQg aW4gdGhlIENGTEFHUy4KLQotICAgSWYgc3VjaCByb3V0aW5lcyBhcmUgYXZhaWxhYmxlLCB0aGV5 IHNob3VsZCBiZSB1c2VkLiBUaGUgcmVzdCBvZiB0aGlzCi0gICBzZWN0aW9uIGFwcGxpZXMgd2hl biB0aGV5IGFyZSBub3QuCi0KLSAgIFRvIGZpdCBpbiB3aXRoIFVVQ1AgYW5kIG90aGVyIFVuaXgt YmFzZWQgc2VyaWFsLXBvcnQgY29tbXVuaWNhdGlvbgotICAgc29mdHdhcmUsIEMtS2VybWl0IG11 c3QgaGF2ZSB0aGUgc2FtZSBpZGVhIGFzIHlvdXIgc3lzdGVtJ3MgdXVjcCwgY3UsCi0gICBhbmQg dGlwIHByb2dyYW1zIGFib3V0IHdoYXQgdGhlIFVVQ1AgbG9jayBkaXJlY3RvcnkgaXMgY2FsbGVk LCB3aGF0IHRoZQotICAgbG9ja2ZpbGUgaXRzZWxmIGlzIGNhbGxlZCwgYW5kIHdoYXQgaXRzIGNv bnRlbnRzIHNob3VsZCBiZS4gSW4gbW9zdAotICAgY2FzZXMsIEMtS2VybWl0IHByZXByb2Nlc3Nv ciBmbGFncyBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24KLSAgIGF0IGNvbXBp bGUgdGltZSBpZiB0aGUgYXBwcm9wcmlhdGUgbWFrZWZpbGUgdGFyZ2V0IHdhcyB1c2VkIChzZWUK LSAgIFszMzNdY2t1dGlvLmMpLiBUaGUgZm9sbG93aW5nIENGTEFHUyBvcHRpb25zIGNhbiBiZSB1 c2VkIHRvIG92ZXJyaWRlCi0gICB0aGUgYnVpbHQtaW4gY29uZmlndXJhdGlvbjoKLQotICAgLURM Q0tESVIKLSAgICAgICAgICBUZWxscyBLZXJtaXQgdGhhdCB0aGUgVVVDUCBsb2NrIGRpcmVjdG9y eSBpcwotICAgICAgICAgIC91c3Ivc3Bvb2wvdXVjcC9MQ0suCi0KLSAgIC1EQUNVQ05UUkwKLSAg ICAgICAgICBUZWxscyBLZXJtaXQgdG8gdXNlIHRoZSBCU0QgNC4zIGFjdWNudHJsKCkgcHJvZ3Jh bSB0byB0dXJuIG9mZgotICAgICAgICAgIGdldHR5IChsb2dpbikgb24gdGhlIGxpbmUgYmVmb3Jl IHVzaW5nIGl0LCBhbmQgcmVzdG9yZSBnZXR0eQotICAgICAgICAgIHdoZW4gZG9uZS4KLQotICAg LURIREJVVUNQCi0gICAgICAgICAgSW5jbHVkZSB0aGlzIGlmIHlvdXIgc3lzdGVtIHVzZXMgSG9u ZXkgRGFuQmVyIFVVQ1AsIGluIHdoaWNoIHRoZQotICAgICAgICAgIGxvY2tmaWxlIGRpcmVjdG9y eSBhbmQgZm9ybWF0IGFyZSByZWxhdGl2ZWx5IHN0YW5kYXJkaXplZC4KLQotICAgLURMT0NLX0RJ Uj1cXFwiL3h4eC95eXlcXFwiCi0gICAgICAgICAgR2l2ZXMgdGhlIGxvY2sgZGlyZWN0b3J5IG5h bWUgZXhwbGljaXRseS4gVGhlIHRyaXBsZSBxdW90aW5nIGlzCi0gICAgICAgICAgbmVjZXNzYXJ5 LiBGb3IgZXhhbXBsZToKLQotQ0ZMQUdTPSAtREJTRDQgLURMT0NLX0RJUj1cXFwiL3Vzci9sb2Nh bC9sb2Nrc1xcXCIgLUROT0RFQlVHCi0KLSAgICAgICAgICAoTk9URTogVGhlIHRyaXBsZSBxdW90 aW5nIGFzc3VtZXMgdGhpcyBpcyBhICJ0b3AtbGV2ZWwiIG1ha2UKLSAgICAgICAgICBlbnRyeSwg YW5kIG5vdCBhIG1ha2UgZW50cnkgdGhhdCBjYWxscyBhbm90aGVyIG9uZS4pCi0KLSAgIC1ETEZE RVZOTyBUaGUgbG9ja2ZpbGUgbmFtZSB1c2VzIHRoZSB0dHkgZGV2aWNlIGlub2RlIGFuZCBtYWpv ciBhbmQKLSAgICAgICAgICBtaW5vcgotICAgICAgICAgIG51bWJlcnM6IExLLmRldi5tYWoubWlu LCBhcyBpbiBTeXMgViBSNCwgZS5nLiBMSy4wMzUuMDQ0LjAwOC4KLQotICAgV2hlbiB0aGUgTEsu aW5vZGUubWFqb3IubWlub3IgZm9ybSBpcyB1c2VkLCBhIHNpbmdsZSBsb2NrZmlsZSBpcwotICAg ZW5vdWdoLiBPdGhlcndpc2UsIGEgc2luZ2xlIGxvY2tmaWxlIHJhcmVseSBzdWZmaWNlcy4gRm9y IGV4YW1wbGUsIGluCi0gICBMaW51eCwgaXQgaXMgY29tbW9uIHRvIGhhdmUgYSAvZGV2L21vZGVt IHN5bWJvbGljIGxpbmsgdG8gYW4gYWN0dWFsCi0gICBkaWFsb3V0IGRldmljZSwgbGlrZSAvZGV2 L2N1YTAgb3IgL2Rldi90dHlTMCwgd2hvc2UgcHVycG9zZSBpcyB0byBoaWRlCi0gICB0aGUgZGV0 YWlscyBvZiB0aGUgYWN0dWFsIGRyaXZlciBmcm9tIHRoZSB1c2VyLiBTbyBpZiBvbmUgdXNlciBv cGVucwotICAgL2Rldi9tb2RlbSwgYSBsb2NrZmlsZSBjYWxsZWQgTENLLi5tb2RlbSBpcyBjcmVh dGVkLCB3aGljaCBkb2VzIG5vdAotICAgcHJldmVudCBhbm90aGVyIHVzZXIgZnJvbSBzaW11bHRh bmVvdXNseSBvcGVuaW5nIHRoZSBzYW1lIGRldmljZSBieSBpdHMKLSAgIHJlYWwgbmFtZS4KLQot ICAgT24gU0NPIFVuaXggcGxhdGZvcm1zLCB3ZSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHBy b2JsZW06IHRoZSBzYW1lCi0gICBkZXZpY2UgaXMsIGJ5IGNvbnZlbnRpb24sIGtub3duIGJ5ICJs b3dlcmNhc2UiIGFuZCAidXBwZXJjYXNlIiBuYW1lcywKLSAgIGRlcGVuZGluZyBvbiB3aGV0aGVy IGl0IGhhcyBtb2RlbSBjb250cm9sLiBTbyBieSBjb252ZW50aW9uLAotICAgY29tbXVuaWNhdGlv bnMgcHJvZ3JhbXMgYXJlIHN1cHBvc2VkIHRvIGNyZWF0ZSB0aGUgbG9ja2ZpbGVzIGJhc2VkIG9u Ci0gICB0aGUgbG93ZXJjYXNlIG5hbWUuIEJ1dCBzb21lIHByb2dyYW1zIGRvbid0IGZvbGxvdyB0 aGlzIGNvbnZlbnRpb24uIEluCi0gICBIUC1VWCwgd2UgaGF2ZSBzZXZlcmFsIGRpZmZlcmVudCBu YW1lcyBmb3IgZWFjaCBzZXJpYWwgZGV2aWNlLiBBbmQgc28KLSAgIG9uLgotCi0gICBGb3IgdGhp cyByZWFzb24sIG9uIHBsYXRmb3JtcyB3aGVyZSB0aGUgTEsuaW5vZGUubWFqb3IubWlub3IgZm9y bSBpcwotICAgbm90IHVzZWQsIEMtS2VybWl0IGFsc28gY3JlYXRlcyBhIHNlY29uZGFyeSBsb2Nr ZmlsZSAod2hpY2ggaXMgc2ltcGx5IGEKLSAgIGxpbmsgdG8gdGhlIGZpcnN0KSBpZjoKLQotICAg IGEuIFRoZSBnaXZlbiBkZXZpY2UgbmFtZSBpcyBhIHN5bWJvbGljIGxpbmsuIFRoZSBzZWNvbmRh cnkgbGluayBpcwotICAgICAgIGJhc2VkIG9uIHRoZSBkZXZpY2UncyByZWFsIG5hbWUuCi0gICAg Yi4gT24gU0NPOiBUaGUgZGV2aWNlIG5hbWUgaXMgbm90IGEgc3ltYm9saWMgbGluaywgYnV0IGl0 IGNvbnRhaW5zCi0gICAgICAgdXBwZXJjYXNlIGxldHRlcnMuIFRoZSBwcmltYXJ5IGxpbmsgaXMg YmFzZWQgb24gdGhlIGxvd2VyY2FzZSBuYW1lOwotICAgICAgIHRoZSBzZWNvbmRhcnkgbGluayBp cyBiYXNlZCBvbiB0aGUgbmFtZSB0aGF0IHdhcyBnaXZlbi4KLSAgICBjLiBPbiBIUC1VWDogVGhl IGRldmljZSBuYW1lIHN0YXJ0cyB3aXRoICJjdSIuIFRoZSBwcmltYXJ5IGxpbmsgaXMKLSAgICAg ICBiYXNlZCBvbiB0aGUgbmFtZSB0aGF0IHdhcyBnaXZlbjsgdGhlIHNlY29uZGFyeSBsaW5rIGlz IGJhc2VkIG9uCi0gICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgInR0eWQiIGRldmljZSwgZS5nLiAi TENLLi5jdWEwcDAiIGFuZAotICAgICAgICJMQ0suLnR0eWQwcDAiLgotCi0gICBOT1RFOiBzeW1s aW5rcyBhcmUgbm90IGhhbmRsZWQgaW4gSFAtVVguCi0KLSAgIEhvbmV5IERhbkJlciAoSERCKSBV VUNQLCB0aGUgYmFzaXMgb2YgbWFueSBVVUNQIGltcGxlbWVudGF0aW9ucywgaGFzCi0gICB0d28g Y2hhcmFjdGVyaXN0aWNzOgotCi0gICAgYS4gTG9ja2ZpbGVzIGFyZSBrZXB0IGluIC91c3Ivc3Bv b2wvbG9ja3MvICh1c3VhbGx5KS4KLSAgICBiLiBBIGxvY2tmaWxlIGNvbnRhaW5zIHRoZSBwcm9j ZXNzIGlkIChwaWQpIGluIEFTQ0lJLCByYXRoZXIgdGhhbiBhcwotICAgICAgIGFuIGludC4KLQot ICAgTm9uLUhEQiBzZWxlY3Rpb25zIGFzc3VtZSB0aGUgbG9ja2ZpbGUgY29udGFpbnMgdGhlIHBp ZCBpbiBpbnQgZm9ybQotICAgKG9yLCBtb3JlIHByZWNpc2VseSwgaW4gUElEX1QgZm9ybSwgd2hl cmUgUElEX1QgaXMgZWl0aGVyIGludCBvciBwaWRfdCwKLSAgIGRlcGVuZGluZyBvbiB5b3VyIHN5 c3RlbSdzIEMgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzKS4gKGIpLCBieSB0aGUKLSAgIHdheSwg aXMgc3ViamVjdCB0byBpbnRlcnByZXRhdGlvbjogdGhlIG51bWVyaWMgQVNDSUkgc3RyaW5nIG1h eSBvciBtYXkKLSAgIG5vdCBiZSB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZSwgaXQgbWF5IG9yIG1h eSBub3QgaGF2ZSBsZWFkaW5nIHNwYWNlcwotICAgKG9yIHplcm9zKSwgYW5kIHRoZSBudW1iZXIg b2YgbGVhZGluZyBzcGFjZXMgb3IgemVyb3MgY2FuIGRpZmZlciwgYW5kCi0gICB0aGUgZGlmZmVy ZW5jZXMgY2FuIGJlIHNpZ25pZmljYW50LgotCi0gICBFdmVuIGlmIHlvdSBidWlsZCB0aGUgcHJv Z3JhbSB3aXRoIHRoZSByaWdodCBsb2NrZmlsZSBvcHRpb24sIHlvdSBjYW4KLSAgIHN0aWxsIGhh dmUgcHJvYmxlbXMgd2hlbiB5b3UgdHJ5IHRvIG9wZW4gdGhlIGRldmljZS4gSGVyZSBhcmUgdGhl IGVycm9yCi0gICBtZXNzYWdlcyB5b3UgY2FuIGdldCBmcm9tIFNFVCBMSU5FLCBhbmQgd2hhdCB0 aGV5IG1lYW46Ci0KLSAgICBhLiAiVGltZWQgb3V0LCBubyBjYXJyaWVyLiIgVGhpcyBvbmUgaXMg bm90IHJlbGF0ZWQgdG8gbG9ja2ZpbGVzLiBJdAotICAgICAgIG1lYW5zIHRoYXQgeW91IGhhdmUg U0VUIENBUlJJRVIgT04geHgsIHdoZXJlIHh4IGlzIHRoZSBudW1iZXIgb2YKLSAgICAgICBzZWNv bmRzIHRvIHdhaXQgZm9yIGNhcnJpZXIsIGFuZCBjYXJyaWVyIGRpZCBub3QgYXBwZWFyIHdpdGhp biB4eAotICAgICAgIHNlY29uZHMuIFNvbHV0aW9uOiBTRVQgQ0FSUklFUiBBVVRPIG9yIE9GRi4K LSAgICBiLiAiU29ycnksIGFjY2VzcyB0byBsb2NrIGRlbmllZC4iIEtlcm1pdCBoYXMgYmVlbiBj b25maWd1cmVkIHRvIHVzZQotICAgICAgIGxvY2tmaWxlcywgYnV0IChhKXRoZSBsb2NrZmlsZSBk aXJlY3RvcnkgaXMgd3JpdGUtcHJvdGVjdGVkIGFnYWluc3QKLSAgICAgICB5b3UsIG9yIChiKSBp dCBkb2VzIG5vdCBleGlzdC4gVGhlICJhY2Nlc3MgdG8gbG9jayBkZW5pZWQiIG1lc3NhZ2UKLSAg ICAgICB3aWxsIHRlbGwgeW91IHRoZSByZWFzb24uIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3Qg ZXhpc3QsIGNoZWNrIHRvCi0gICAgICAgbWFrZSBzdXJlIEtlcm1pdCBpcyB1c2luZyB0aGUgcmln aHQgbmFtZS4gSnVzdCBiZWNhdXNlIHZlcnNpb24gbiBvZgotICAgICAgIHlvdXIgVW5peCB1c2Vk IGEgY2VydGFpbiBsb2NrZmlsZSBkaXJlY3RvcnkgaXMgbm8gZ3VhcmFudGVlIHRoYXQKLSAgICAg ICB2ZXJzaW9uIG4uMSBkb2VzIG5vdCB1c2UgYSBkaWZmZXJlbnQgb25lLiBXb3JrYXJvdW5kOiBh c2sgdGhlCi0gICAgICAgc3lzdGVtIGFkbWluaXN0cmF0b3IgdG8gaW5zdGFsbCBhIHN5bWJvbGlj IGxpbmsgZnJvbSB0aGUgb2xkIG5hbWUKLSAgICAgICB0byB0aGUgbmV3IG5hbWUuIE90aGVyIHNv bHV0aW9uczogKHNlZSBiZWxvdykKLSAgICBjLiAiU29ycnksIGFjY2VzcyB0byB0dHkgZGV2aWNl IGRlbmllZC4iIFRoZSB0dHkgZGV2aWNlIHRoYXQgeW91Ci0gICAgICAgc3BlY2lmaWVkIGluIHlv dXIgU0VUIExJTkUgY29tbWFuZCBpcyByZWFkL3dyaXRlIHByb3RlY3RlZCBhZ2FpbnN0Ci0gICAg ICAgeW91LiBTb2x1dGlvbjogKHNlZSBiZWxvdykKLSAgICBkLiAiU29ycnksIGRldmljZSBpcyBp biB1c2UuIiBUaGUgdHR5IGRldmljZSB5b3UgaGF2ZSBzcGVjaWZpZWQgaXMKLSAgICAgICBjdXJy ZW50bHkgYmVpbmcgdXNlZCBieSBhbm90aGVyIHVzZXIuIEEgcHJlZmF0b3J5IG1lc3NhZ2UgZ2l2 ZXMgeW91Ci0gICAgICAgYW4gImxzIC1sIiBsaXN0aW5nIG9mIHRoZSBsb2NrZmlsZSwgd2hpY2gg c2hvdWxkIHNob3cgdGhlIHVzZXJuYW1lCi0gICAgICAgb2YgdGhlIHBlcnNvbiB3aG8gY3JlYXRl ZCBpdCwgcGx1cyBhIG1lc3NhZ2UgInBpZCA9IG5ubiIgdG8gc2hvdwotICAgICAgIHlvdSB0aGUg cHJvY2VzcyBpZCBvZiB0aGUgdXNlcidzIHByb2dyYW0uIFNvbHV0aW9uczogdHJ5IGFub3RoZXIK LSAgICAgICBkZXZpY2UsIHdhaXQgdW50aWwgdGhlIG90aGVyIHVzZXIgaXMgZmluaXNoZWQsIGFz ayB0aGUgb3RoZXIgdXNlcgotICAgICAgIHRvIGh1cnJ5IHVwLCBvciBhc2sgdGhlIHN5c3RlbSBt YW5hZ2VyIGZvciBoZWxwLgotICAgIGUuICJTb3JyeSwgY2FuJ3Qgb3BlbiBjb25uZWN0aW9uOiBy ZWFzb24iLiBUaGUgZGV2aWNlIGNhbm5vdCBiZSBvcGVuZWQKLSAgICAgICBmb3Igc29tZSBvdGhl ciByZWFzb24sIHdoaWNoIGlzIGxpc3RlZC4KLSAgICBmLiAic2g6IC91c3IvbGliL3V1Y3AvYWN1 Y250cmw6IG5vdCBmb3VuZCIuIFRoaXMgbWVhbnMgeW91ciBLZXJtaXQKLSAgICAgICBwcm9ncmFt IHdhcyBidWlsdCB3aXRoIHRoZSAtREFDVUNOVFJMIHN3aXRjaCwgYnV0IHlvdXIgY29tcHV0ZXIK LSAgICAgICBzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGUgQlNEIDQuMyBhY3VjbnRybCBwcm9ncmFt LiBTb2x1dGlvbjoKLSAgICAgICBpbnN0YWxsIHRoZSBhY3VjbnRybCBwcm9ncmFtIGlmIHlvdSBo YXZlIGl0LCBvciByZWJ1aWxkIEtlcm1pdAotICAgICAgIHdpdGhvdXQgdGhlIC1EQUNVQ05UUkwg c3dpdGNoLgotCi0gICBUaGVyZSBhcmUgdHdvIHNvbHV0aW9ucyBmb3IgcHJvYmxlbXMgKGIpIGFu ZCAoYyksIGJvdGggb2Ygd2hpY2ggaW52b2x2ZQotICAgaW50ZXJ2ZW50aW9uIGJ5IHlvdXIgVW5p eCBzeXN0ZW0gYWRtaW5pc3RyYXRvciAoc3VwZXJ1c2VyKToKLQotICAgIGEuIEhhdmUgdGhlIHN1 cGVydXNlciBjaGFuZ2UgdGhlIHBlcm1pc3Npb24gb2YgdGhlIGxvY2tmaWxlIGRpcmVjdG9yeQot ICAgICAgIGFuZCB0byB0aGUgdHR5IGRldmljZXMgc28gdGhhdCBldmVyeW9uZSBvbiB0aGUgc3lz dGVtIGhhcwotICAgICAgIHJlYWQvd3JpdGUgcGVybWlzc2lvbi4KLQotc3UlIGNobW9kIDc3NyAv dXNyL3Nwb29sL2xvY2tzIChvciB3aGF0ZXZlciB0aGUgcGF0aCBpcykKLXN1JSBjaG1vZCA2NjYg L2Rldi90dHlYWAotCi0gICAgICAgT25lIHJpc2sgaGVyZSBpcyB0aGF0IHBlb3BsZSBjYW4gd3Jp dGUgbG90cyBvZiBqdW5rIGludG8gdGhlCi0gICAgICAgbG9ja2ZpbGUgZGlyZWN0b3J5LCBkZWxl dGUgb3RoZXIgcGVvcGxlJ3MgZmlsZXMgaW4gdGhlIGxvY2tmaWxlCi0gICAgICAgZGlyZWN0b3J5 LCBhbmQgaW50ZXJjZXB0IG90aGVyIHBlb3BsZSdzIGRhdGEgYXMgaXQgZ29lcyBpbiBhbmQgb3V0 Ci0gICAgICAgb2YgdGhlIHR0eSBkZXZpY2UuIFRoZSBtYWpvciBkYW5nZXIgaGVyZSB3b3VsZCBi ZSBpbnRlcmNlcHRpbmcgYQotICAgICAgIHByaXZpbGVnZWQgcGFzc3dvcmQuIE9mIGNvdXJzZSwg YW55IHVzZXIgY291bGQgd3JpdGUgYSBzaG9ydCwKLSAgICAgICBvcmRpbmFyeSwgdW5wcml2aWxl Z2VkIHByb2dyYW0gdG8gZG8gZXhhY3RseSB0aGUgc2FtZSB0aGluZyBpZiB0aGUKLSAgICAgICB0 dHkgZGV2aWNlIHdhcyB3b3JsZCByZWFkL3dyaXRlYWJsZS4gVGhlIG90aGVyIHJpc2sgYXMgdGhh dAotICAgICAgIHRlbGVwaG9uZSBjYWxscyBhcmUgbm90IGNvbnRyb2xsZWQgLS0gYW55Ym9keSBv biB5b3VyIHN5c3RlbSBjYW4KLSAgICAgICBtYWtlIHRoZW0sIHdpdGhvdXQgaGF2aW5nIHRvIGJl bG9uZyB0byBhbnkgcGFydGljdWxhciBncm91cCwgYW5kCi0gICAgICAgdGhpcyBjb3VsZCBydW4g dXAgeW91ciBwaG9uZSBiaWxsLgotICAgIGIuIFVzZSBncm91cHMgdG8gcmVndWxhdGUgYWNjZXNz LiBOb3JtYWxseSB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5IGFuZAotICAgICAgIGFuZCB0aGUgZGlh bG91dCBkZXZpY2VzIHdpbGwgaGF2ZSB0aGUgc2FtZSBncm91cCAoc3VjaCBhcyB1dWNwKS4gSWYK LSAgICAgICBzbywgdGhlbiBwdXQgZXZlcnlib2R5IHdobydzIGFsbG93ZWQgdG8gZGlhbCBvdXQg aW50byB0aGF0IGdyb3VwLAotICAgICAgIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgbG9ja2ZpbGUg ZGlyZWN0b3J5IGFuZCB0aGUgdHR5IGRldmljZXMgaGF2ZQotICAgICAgIGdyb3VwIHJlYWQgQU5E IHdyaXRlIHBlcm1pc3Npb24uIEV4YW1wbGU6Ci0KLXN1JSBjaG1vZCA3NzAgL3Vzci9zcG9vbC9s b2NrcyAob3Igd2hhdGV2ZXIgdGhlIHBhdGggaXMpCi1zdSUgY2htb2QgNjYwIC9kZXYvdHR5WFgK LQotICAgICAgIFVzZXIgd2hhdGV2ZXIgdG9vbCBpcyBhdmFpbGFibGUgb24geW91ciBwbGF0Zm9y bSB0byBhZGQgdXNlcnMgdG8KLSAgICAgICB0aGUgYXBwcm9wcmlhdGUgZ3JvdXAgKGUuZy4gZWRp dCB0aGUgL2V0Yy9ncm91cCBmaWxlKS4KLSAgICBjLiBIYXZlIHRoZSBzdXBlcnVzZXIgY2hhbmdl IEtlcm1pdCB0byBydW4gc2V0dWlkIGFuZC9vciBzZXRnaWQgdG8gdGhlCi0gICAgICAgb3duZXIg YW5kL29yIGdyb3VwIG9mIHRoZSBsb2NrZmlsZSBkaXJlY3RvcnkgYW5kIHRoZSB0dHkgZGV2aWNl cyBpZgotICAgICAgIG5lY2Vzc2FyeSksIHR5cGljYWxseSB1dWNwIChzZWUgWzMzNF1uZXh0IHNl Y3Rpb24pLCBidXQgTk9UIHJvb3QuCi0gICAgICAgRXhhbXBsZToKLQotc3UlIGNob3duIHV1Y3Ag a2VybWl0ICAgICAgICAgIC0gb3IgLSAgY2hncnAgdXVjcCBrZXJtaXQKLXN1JSBjaG1vZCB1K3Mg a2VybWl0IChzZXR1aWQpICAtIG9yIC0gIGNobW9kIGcrcyBrZXJtaXQgKHNldGdpZCkKLQotICAg ICAgIGFuZCB0aGVuIG1ha2Ugc3VyZSB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5LCBhbmQgdGhlIHR0 eSBkZXZpY2VzLAotICAgICAgIGhhdmUgb3duZXIgKHNldHVpZCkgYW5kL29yIGdyb3VwIChzZXRn aWQpIHdyaXRlIHBlcm1pc3Npb24uIEZvcgotICAgICAgIGV4YW1wbGU6Ci0KLXN1JSBjaG1vZCBv K3J3eCAvdXNyL3Nwb29sL3V1Y3AKLXN1JSBjaG93biB1dWNwIC9kZXYvdHR5WFggOyBjaG1vZCA2 MDAgL2Rldi90dHlYWAotCi0gICAgICAgSW4gc29tZSBjYXNlcywgdGhlIG93bmVyIGFuZCBncm91 cCBtdXN0IGJlIGRpc3RpbmN0OyB0aGUga2V5IHBvaW50Ci0gICAgICAgaXMgdGhhdCByZWFkL3dy aXRlIGFjY2VzcyBpcyByZXF1aXJlZCB0byBib3RoIHRoZSBVVUNQIGxvY2tmaWxlCi0gICAgICAg ZGlyZWN0b3J5IGFuZCB0aGUgdHR5IGl0c2VsZi4KLQotICAgSWYgeW91IG1ha2UgQy1LZXJtaXQg c2V0dWlkIG9yIHNldGdpZCB0byByb290LCBpdCByZWZ1c2VzIHRvIHJ1bjoKLQotRmF0YWw6IEMt S2VybWl0IHNldHVpZCB0byByb290IQotCi0gICBFeGFtcGxlOgotCi1jcnctci0tLS0tICAgMSB1 dWNwICAgICB1dWNwICAgICAgIDUsICA2NyBGZWIgMTEgMDY6MjMgL2Rldi9jdWEzCi1kcnd4cnd4 ci14ICAgMyByb290ICAgICB1dWNwICAgICAgICAgMTAyNCBGZWIgMTEgMDY6MjIgL3Zhci9sb2Nr Ci0KLSAgIHJlcXVpcmVzIHN1aWQgdXVjcCB0byBnZXQgcmVhZC93cml0ZSBhY2Nlc3Mgb24gL2Rl di9jdWEzIGFuZCBzZ2lkIHRvCi0gICBnZXQgcmVhZC93cml0ZSBhY2Nlc3Mgb24gL3Zhci9sb2Nr IChzaW5jZSB5b3UgY2FuJ3Qgc2V0IEtlcm1pdCdzIHVpZCBvcgotICAgZ2lkIHRvIHJvb3QpLgot Ci0gICAgIFRoZSByZWFzb24gS2VybWl0IGNhbid0IGJlIHNldHVpZCBvciBzZXRnaWQgdG8gcm9v dCBoYXMgdG8gZG8gd2l0aAotICAgICB0aGUgZmFjdCB0aGF0IHNvbWUgVW5peCBPUydzIGNhbid0 IHN3aXRjaCB1c2VyIG9yIGdyb3VwIElEcyBpbiB0aGF0Ci0gICAgIGNhc2UuIFVuZm9ydHVuYXRl bHksIHRoZSBwcm9oaWJpdGlvbiBhZ2FpbnN0IG1ha2luZyBLZXJtaXQgc2V0dWlkIG9yCi0gICAg IHNldGdpZCB0byByb290IG1lYW5zIHRoYXQgVW5peCBDLUtlcm1pdCBjYW4ndCBiZSB1c2VkIHRv IG1ha2UgcmxvZ2luCi0gICAgIGNvbm5lY3Rpb25zIGJ5IG5vbi1yb290IHVzZXJzLiAoVGhlIHJs b2dpbiBwb3J0IGlzIHByaXZpbGVnZWQsIHdoaWNoCi0gICAgIGlzIHdoeSB0aGUgcmVndWxhciBy bG9naW4gY29tbWFuZCBpcyBzZXR1aWQgcm9vdCAtLSB3aGljaCBpcyBzYWZlCi0gICAgIGJlY2F1 c2UgdGhlIHJsb2dpbiBwcm9ncmFtIG5ldmVyIGhhcyB0byBjcmVhdGUgb3IgYWNjZXNzIGZpbGVz IGxpa2UKLSAgICAgS2VybWl0IGRvZXMuKQotCi0gICBGb3IgdGhlIGxvY2tmaWxlIG1lY2hhbmlz bSB0byBhY2hpZXZlIGl0cyBkZXNpcmVkIHB1cnBvc2UgLS0gcHJldmVudGlvbgotICAgb2YgYWNj ZXNzIHRvIHRoZSBzYW1lIHR0eSBkZXZpY2UgYnkgbW9yZSB0aGFuIG9uZSBwcm9jZXNzIGF0IGEg dGltZSAtLQotICAgQUxMIHByb2dyYW1zIG9uIGEgZ2l2ZW4gY29tcHV0ZXIgdGhhdCBvcGVuLCBy ZWFkIG9yIHdyaXRlLCBhbmQgY2xvc2UKLSAgIHR0eSBkZXZpY2VzIG11c3QgdXNlIHRoZSBTQU1F IGxvY2tmaWxlIGNvbnZlbnRpb25zLiBVbmZvcnR1bmF0ZWx5LCB0aGlzCi0gICBpcyBvZnRlbiBu b3QgdGhlIGNhc2UuIEhlcmUgaXMgYSB0eXBpY2FsIGV4YW1wbGUgb2YgaG93IHRoaXMgY2FuIGdv Ci0gICB3cm9uZzogSW4gU3VuT1MgNC4wIGFuZCBlYXJsZXIsIHRoZSBsb2NrZmlsZSBkaXJlY3Rv cnkgd2FzCi0gICAvdXNyL3Nwb29sL3V1Y3A7IGluIDQuMSBpdCB3YXMgY2hhbmdlZCB0byAvdmFy L3Nwb29sL2xvY2tzIGluIHRoZSBxdWVzdAotICAgZm9yIHBvbGl0aWNhbCBjb3JyZWN0bmVzcy4g Q29uc2VxdWVudGx5LCBhbnkgdGhpcmQtcGFydHkgcHJvZ3JhbXMgKHN1Y2gKLSAgIGFzIEMtS2Vy bWl0KSB0aGF0IHdlcmUgbm90IG1vZGlmaWVkIHRvIGFjY291bnQgZm9yIHRoaXMgY2hhbmdlLAot ICAgcmVjb21waWxlZCwgYW5kIHJlaW5zdGFsbGVkLCBkaWQgbm90IHVzZSB0aGUgc2FtZSBsb2Nr ZmlsZXMgYXMgdXVjcCwKLSAgIHRpcCwgZXRjLCBhbmQgc28gdGhlIGVudGlyZSBwdXJwb3NlIG9m IHRoZSBsb2NrZmlsZSBpcyBkZWZlYXRlZC4KLQotICAgV2hhdCBpZiB5b3VyIFVuaXggc3lzdGVt IGRvZXMgbm90IGhhdmUgVVVDUCBpbnN0YWxsZWQ/IEZvciBleGFtcGxlLCB5b3UKLSAgIGhhdmUg YSBVbml4IHdvcmtzdGF0aW9uLCBhbmQgeW91IGRvIG5vdCB1c2UgdXVjcCwgY3UsIG9yIHRpcCwg b3IgVVVDUAotICAgd2FzIG5vdCBldmVuIHN1cHBsaWVkIHdpdGggeW91ciB2ZXJzaW9uIG9mIFVu aXggKFFOWCBpcyBhbiBleGFtcGxlKS4gSW4KLSAgIHRoaXMgY2FzZSwgeW91IGhhdmUgdHdvIGNo b2ljZXM6Ci0KLSAgICBhLiBJZiB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBwZXJzb24gcnVu bmluZyBLZXJtaXQgYXQgdGhlIHNhbWUKLSAgICAgICB0aW1lLCBjb21wZXRpbmcgZm9yIHRoZSBz YW1lIHR0eSBkZXZpY2UsIHRoZW4gY3JlYXRlIGEgc3BlY2lhbAotICAgICAgIGxvY2tmaWxlIGRp cmVjdG9yeSBqdXN0IGZvciBLZXJtaXQsIGZvciBleGFtcGxlLCAvdXNyL3Nwb29sL2tlcm1pdCwK LSAgICAgICBhbmQgbWFrZSBzdXJlIHlvdSBoYXZlIHJlYWQvd3JpdGUgYWNjZXNzIHRvIGl0LiBU aGVuIGFkZCB0aGUKLSAgICAgICBmb2xsb3dpbmcgdG8geW91ciBtYWtlZmlsZSB0YXJnZXQgQ0ZM QUdTLCBhcyBzaG93biBlYXJsaWVyOgotCi0tRExPQ0tfRElSPVxcXCIvdXNyL3Nwb29sL2tlcm1p dFxcXCIKLQotICAgIGIuIElmIHlvdSBhcmUgdGhlIG9ubHkgdXNlciBvbiB5b3VyIHdvcmtzdGF0 aW9uLCBhbmQgbm8gb3RoZXIKLSAgICAgICBwcm9jZXNzZXMgd2lsbCBldmVyIGJlIGNvbXBldGlu ZyB3aXRoIEtlcm1pdCBmb3IgdGhlIGRpYWxvdXQgdHR5Ci0gICAgICAgZGV2aWNlLCB0aGVuIGFk ZCAtRE5PVVVDUCB0byB5b3VyIG1ha2VmaWxlIHRhcmdldCdzIENGTEFHUyBhbmQKLSAgICAgICBy ZWJ1aWxkIEtlcm1pdC4KLQotMTEuIFJVTk5JTkcgVU5JWCBDLUtFUk1JVCBTRVRVSUQgT1IgU0VU R0lECi0KLSAgIFsgWzMzNV1Ub3AgXSBbIFszMzZdQ29udGVudHMgXSBbIFszMzddTmV4dCBdIFsg WzMzOF1QcmV2aW91cyBdCi0KLSAgIEV2ZW4gaWYgeW91IGRvbid0IGludGVuZCB0byBydW4gQy1L ZXJtaXQgc2V0dWlkLCBzb21lYm9keSBlbHNlIG1pZ2h0Ci0gICBjb21lIGFsb25nIGFuZCBjaG93 biBhbmQgY2htb2QgaXQgYWZ0ZXIgaXQgaGFzIGJlZW4gYnVpbHQuIFlvdSBzaG91bGQKLSAgIGJl IHN1cmUgdGhhdCBpdCBpcyBidWlsdCBjb3JyZWN0bHkgdG8gcnVuIHNldHVpZCBvbiB5b3VyIHN5 c3RlbS4gRm9yCi0gICBQT1NJWCBhbmQgQVQmVCBVbml4IGJhc2VkIHZlcnNpb25zLCB5b3UgZG9u J3QgaGF2ZSB0byBkbyBhbnl0aGluZwotICAgc3BlY2lhbC4KLQotICAgRm9yIDQuMiBhbmQgNC4z IEJTRC1iYXNlZCBVbml4IHZlcnNpb25zLCB5b3Ugbm9ybWFsbHkgbmVlZCBub3QgYWRkCi0gICBh bnl0aGluZyBzcGVjaWFsIHRvIHRoZSBtYWtlZmlsZS4gVGhlIHByb2dyYW0gYXNzdW1lcyB0aGF0 IHRoZQotICAgc2V0cmV1aWQoKSBhbmQgc2V0cmVnaWQoKSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJs ZSwgd2l0aG91dCB3aGljaCB3ZQotICAgY2Fubm90IHN3aXRjaCBiYWNrIGFuZCBmb3J0aCBiZXR3 ZWVuIHJlYWwgYW5kIGVmZmVjdGl2ZSB1aWRzLiBJZiAibWFrZSIKLSAgIGNvbXBsYWlucyB0aGF0 IF9zZXRyZXVpZCBvciBfc2V0cmVnaWQgaXMvYXJlIG5vdCBkZWZpbmVkLCBhZGQKLSAgIC1ETk9T RVRSRVUgdG8gQ0ZMQUdTLiBJbiB0aGlzIGNhc2UgaXQgaXMgdmVyeSBsaWtlbHkgKGJ1dCBub3Qg Y2VydGFpbikKLSAgIHRoYXQgeW91IGNhbm5vdCBwcm90ZWN0IHR0eXMgYW5kIGxvY2tmaWxlcyBh Z2FpbnN0IHBlb3BsZSBhbmQgaGF2ZSB0aGVtCi0gICBydW4gS2VybWl0IHNldHVpZC4KLQotICAg SWYgbWFrZSBkb2VzIG5vdCBjb21wbGFpbiBhYm91dCB0aGlzLCB5b3Ugc2hvdWxkIGZpbmQgb3V0 IHdoZXRoZXIgeW91cgotICAgQlNEIHZlcnNpb24gKDQuMyBvciBvdGhlciBzeXN0ZW1zIGxpa2Ug U3VuT1MgNC54IHRoYXQgY2xhaW0gdG8gaW5jbHVkZQotICAgQlNEIDQuMyBjb21wYXRpYmlsaXR5 KSBpbmNsdWRlcyB0aGUgc2F2ZWQtc2V0dWlkIGZlYXR1cmUgKHNlZSBsb25nCi0gICBub3RlcyB1 bmRlciBlZGl0IDE0NiBpbiBja2MxNzgudXBkKS4gSWYgaXQgZG9lcywgdGhlbiBhZGQgLURTQVZF RFVJRCB0bwotICAgQ0ZMQUdTLgotCi0gICAgIElNUE9SVEFOVCBOT1RFOiBNb3N0IFVuaXggc3lz dGVtIGRvY3VtZW50YXRpb24gd2lsbCBub3QgZ2l2ZSB5b3UgdGhlCi0gICAgIHJlcXVpcmVkIGlu Zm9ybWF0aW9uLiBUbyBkZXRlcm1pbmUgd2hldGhlciB5b3VyIFVuaXggc3lzdGVtIHN1cHBsaWVz Ci0gICAgIHRoZSBzYXZlZC1vcmlnaW5hbC1lZmZlY3RpdmUtdXNlci9ncm91cC1pZCBmZWF0dXJl LCB1c2UgdGhlIGNrdXVpZC5jCi0gICAgIHByb2dyYW0uIFJlYWQgYW5kIGZvbGxvdyB0aGUgaW5z dHJ1Y3Rpb25zIGluIHRoZSBjb21tZW50cyBhdCB0aGUKLSAgICAgYmVnaW5uaW5nLgotCi0gICBD LUtlcm1pdCBmb3IgNC40QlNELWJhc2VkIHN5c3RlbXMgYXV0b21hdGljYWxseSB1c2Ugc2V0ZVt1 Z11pZCgpLiBTZWUKLSAgIFszMzldY2t1dGlvLmMuCi0KLSAgIElmIHlvdSBoYXZlIGEgdmVyc2lv biBvZiBVbml4IHRoYXQgaXMgbm90IEJTRC1iYXNlZCwgYnV0IHdoaWNoIHN1cHBsaWVzCi0gICB0 aGUgc2V0cmV1aWQoKSBhbmQgc2V0cmVnaWQoKSBmdW5jdGlvbnMsIGFuZCB0aGVzZSBhcmUgdGhl IG9ubHkgd2F5IHRvCi0gICBzd2l0Y2ggYmV0d2VlbiByZWFsIGFuZCBlZmZlY3RpdmUgdWlkLCBh ZGQgLURTRVRSRVVJRCB0byB5b3VyIG1ha2VmaWxlCi0gICB0YXJnZXQuCi0KLSAgICAgV0FSTklO RzogVGhlcmUgYXJlIHR3byBjYWxscyB0byBhY2Nlc3MoKSBpbiBbMzQwXWNrdWZpby5jLCBieSB3 aGljaAotICAgICBLZXJtaXQgY2hlY2tzIHRvIHNlZSBpZiBpdCBjYW4gY3JlYXRlIGFuIG91dHB1 dCBmaWxlLiBUaGVzZSBjYWxscwotICAgICB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIChh KXlvdSBoYXZlIGluc3RhbGxlZCBDLUtlcm1pdCBzZXR1aWQKLSAgICAgb3Igc2V0Z2lkIG9uIGEg QlNELWJhc2VkIFVuaXggc3lzdGVtLCBhbmQgKGIpIHRoZQotICAgICBzYXZlZC1vcmlnaW5hbC1l ZmZlY3RpdmUtdWlkL2dpZCBmZWF0dXJlIGlzIG5vdCBwcmVzZW50LCBhbmQgKGMpIHRoZQotICAg ICBhY2Nlc3MoKSBmdW5jdGlvbiBhbHdheXMgY2hlY2tzIHdoYXQgaXQgYmVsaWV2ZXMgdG8gYmUg dGhlIHJlYWwgSUQKLSAgICAgcmF0aGVyIHRoYW4gdGhlIGVmZmVjdGl2ZSBJRC4gVGhpcyBpcyB0 aGUgY2FzZSwgZm9yIGV4YW1wbGUsIGluCi0gICAgIE9saXZldHRpIFgvT1MgYW5kIGluIE5lWFRT VEVQLiBJbiBzdWNoIGNhc2VzLCB5b3UgY2FuIGZvcmNlIGNvcnJlY3QKLSAgICAgb3BlcmF0aW9u IG9mIGFjY2VzcygpIGNhbGxzIGJ5IGRlZmluaW5nIHRoZSBzeW1ib2wgU1dfQUNDX0lEIGF0Ci0g ICAgIGNvbXBpbGUgdGltZSBpbiBDRkxBR1MuCi0KLSAgIElmIHlvdSBoYXZlIGEgdmVyc2lvbiBv ZiBVbml4IHRoYXQgZG9lcyBub3QgYWxsb3cgYSBwcm9jZXNzIHRvIHN3aXRjaAotICAgYmFjayBh bmQgZm9ydGggYmV0d2VlbiBpdHMgZWZmZWN0aXZlIGFuZCByZWFsIHVzZXIgYW5kIGdyb3VwIGlk cwotICAgbXVsdGlwbGUgdGltZXMsIHlvdSBwcm9iYWJseSBzaG91bGQgbm90IGF0dGVtcHQgdG8g cnVuIEtlcm1pdCBzZXR1aWQsCi0gICBiZWNhdXNlIG9uY2UgaGF2aW5nIGdpdmVuIHVwIGl0cyBl ZmZlY3RpdmUgdWlkIG9yIGdpZCAod2hpY2ggaXQgbXVzdCBkbwotICAgaW4gb3JkZXIgdG8gdHJh bnNmZXIgZmlsZXMsIGZvcmsgYSBzaGVsbCwgZXRjKSBpdCBjYW4gbmV2ZXIgZ2V0IGl0Ci0gICBi YWNrLCBhbmQgc28gaXQgY2FuIG5vdCB1c2UgdGhlIG9yaWdpbmFsIGVmZmVjdGl2ZSB1aWQgb3Ig Z2lkIHRvIGNyZWF0ZQotICAgb3IgZGVsZXRlIHV1Y3AgbG9ja2ZpbGVzLiBJbiB0aGlzIGNhc2Us IHlvdSdsbCBlaXRoZXIgaGF2ZSB0byBzZXQgdGhlCi0gICBwZXJtaXNzaW9ucyBvbiB5b3VyIGxv Y2tmaWxlIGRpcmVjdG9yeSB0byBtYWtlIHRoZW0gcHVibGljbHkKLSAgIHJlYWQvd3JpdGFibGUs IG9yIGRpc3BlbnNlIHdpdGggbG9ja2luZyBhbHRvZ2V0aGVyLgotCi0gICBNT1JBTDogQXJlIHlv dSB0aG9yb3VnaGx5IHNpY2tlbmVkIGFuZC9vciBmcmlnaHRlbmVkIGJ5IGFsbCB0aGF0IHlvdQot ICAgaGF2ZSBqdXN0IHJlYWQ/IFlvdSBzaG91bGQgYmUuIFdoYXQgaXMgdGhlIHJlYWwgYW5zd2Vy PyBTaW1wbGUuIFNlcmlhbAotICAgZGV2aWNlcyAtLSBzdWNoIGFzIHR0eXMgYW5kIG1hZ25ldGlj IHRhcGVzIC0tIGluIFVuaXggc2hvdWxkIGJlIG9wZW5lZAotICAgd2l0aCBleGNsdXNpdmUgYWNj ZXNzIG9ubHksIGVuZm9yY2VkIGJ5IHRoZSBVbml4IGtlcm5lbC4gU2hhcmVkIGFjY2VzcwotICAg aGFzIG5vIGNvbmNlaXZhYmxlIHB1cnBvc2UsIGxlZ2l0aW1hdGUgb3Igb3RoZXJ3aXNlLCBleGNl cHQgYnkKLSAgIHByaXZpbGVnZWQgc3lzdGVtIHByb2dyYW1zIHN1Y2ggYXMgZ2V0dHkuIFRoZSBv cmlnaW5hbCBkZXNpZ24gZGF0ZXMKLSAgIGZyb20gdGhlIGxhdGUgMTk2MHMsIHdoZW4gVW5peCB3 YXMgZGV2ZWxvcGVkIGZvciBsYWJvcmF0b3J5IHVzZSB1bmRlciBhCi0gICBwaGlsb3NvcGh5IG9m IHRydXN0IGJ5IHBlb3BsZSB3aXRoaW4gc2hvdXRpbmcgZGlzdGFuY2Ugb2YgZWFjaCBvdGhlciAt LQotICAgYnV0IGV2ZW4gdGhlbiwgbm8gdXNlZnVsIHB1cnBvc2Ugd2FzIHNlcnZlZCBieSB0aGlz IHBhcnRpY3VsYXIgZm9ybSBvZgotICAgb3Blbm5lc3M7IGl0IHdhcyBwcm9iYWJseSBtb3JlIG9m IGEgcG9saXRpY2FsIHN0YXRlbWVudC4gU2luY2UgdGhlCi0gICBlbWVyZ2VuY2Ugb2YgVW5peCBm cm9tIHRoZSBsYWJvcmF0b3J5IGludG8gdGhlIGNvbW1lcmNpYWwgbWFya2V0LCB3ZQotICAgaGF2 ZSBzZWVuIGV2ZXJ5IHZlc3RpZ2Ugb2Ygb3Blbm5lc3MgLS0gYnV0IHRoaXMgb25lIC0tIHN0cmlw cGVkIGF3YXkuCi0gICBJJ2QgbGlrZSB0byBzZWUgc29tZSBpbmZsdWVudGlhbCBVbml4IG1ha2Vy IHRha2UgdGhlIGJvbGQgc3RlcCBvZgotICAgbWFraW5nIHRoZSBzaW1wbGUga2VybmVsIGNoYW5n ZSByZXF1aXJlZCB0byBlbmZvcmNlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8KLSAgIHNlcmlhbCBkZXZp Y2VzLiAoV2VsbCwgcGVyaGFwcyBub3Qgc28gc2ltcGxlIHdoZW4gYmlkaXJlY3Rpb25hbGl0eSBt dXN0Ci0gICBhbHNvIGJlIGEgZ29hbCAtLSBidXQgdGhlbiBvdGhlciBPUydzIGxpa2UgVk1TIHNv bHZlZCB0aGlzIHByb2JsZW0KLSAgIGRlY2FkZXMgYWdvLikKLQotMTIuIENPTkZJR1VSSU5HIFVO SVggV09SS1NUQVRJT05TCi0KLSAgIFsgWzM0MV1Ub3AgXSBbIFszNDJdQ29udGVudHMgXSBbIFsz NDNdTmV4dCBdIFsgWzM0NF1QcmV2aW91cyBdCi0KLSAgIE9uIGRlc2t0b3Agd29ya3N0YXRpb25z IHRoYXQgYXJlIHVzZWQgYnkgb25seSB0aGUgdXNlciBhdCB0aGUgY29uc29sZQotICAga2V5Ym9h cmQsIEMtS2VybWl0IGlzIGFsd2F5cyB1c2VkIGluIGxvY2FsIG1vZGUuIEJ1dCBhcyBkZWxpdmVy ZWQsCi0gICBDLUtlcm1pdCBydW5zIGluIHJlbW90ZSBtb2RlIGJ5IGRlZmF1bHQuIFRvIHB1dCBp dCBpbiBsb2NhbCBtb2RlIGF0Ci0gICBzdGFydHVwLCB5b3UgY2FuIHB1dCBhIFNFVCBMSU5FIGNv bW1hbmQgaW4geW91ciAubXlrZXJtcmMuCi0KLSAgIFlvdSBjYW4gYWxzbyBidWlsZCBDLUtlcm1p dCB0byBzdGFydCB1cCBpbiBsb2NhbCBtb2RlIGJ5IGRlZmF1bHQuIFRvIGRvCi0gICB0aGlzLCBp bmNsdWRlIHRoZSBmb2xsb3dpbmcgaW4gdGhlIENGTEFHUyBpbiB5b3VyIG1ha2VmaWxlIHRhcmdl dDoKLQotLURERlRUWT1cXFwiL2Rldi90dHl4eFxcXCIKLQotICAgd2hlcmUgdHR5eHggaXMgdGhl IG5hbWUgb2YgdGhlIGRldmljZSB5b3Ugd2lsbCBiZSB1c2luZyBmb3IKLSAgIGNvbW11bmljYXRp b25zLiBQcmVzZW50bHkgdGhlcmUgaXMgbm8gd2F5IG9mIHNldHRpbmcgdGhlIGRlZmF1bHQgbW9k ZW0KLSAgIHR5cGUgYXQgY29tcGlsZSB0aW1lLCBzbyB1c2UgdGhpcyBvcHRpb24gb25seSBmb3Ig ZGlyZWN0IGxpbmVzLgotCi0gICBDLUtlcm1pdCBkb2VzIG5vdCB3b3JrIHdlbGwgb24gY2VydGFp biB3b3Jrc3RhdGlvbnMgaWYgaXQgaXMgbm90IHJ1bgotICAgZnJvbSB3aXRoaW4gYSB0ZXJtaW5h bCB3aW5kb3cuIEZvciBleGFtcGxlLCB5b3UgY2Fubm90IHN0YXJ0IEMtS2VybWl0Ci0gICBvbiBh IE5lWFQgYnkgbGF1bmNoaW5nIGl0IGRpcmVjdGx5IGZyb20gTmVYVHN0ZXAuIFNpbWlsYXJseSBm b3IgU3VuCi0gICB3b3Jrc3RhdGlvbnMgaW4gdGhlIE9wZW4gV2luZG93cyBlbnZpcm9ubWVudC4g UnVuIEtlcm1pdCBpbiBhIHRlcm1pbmFsCi0gICB3aW5kb3cuCi0KLTEzLiBCSVpBUlJFIEJFSEFW SU9SIEFUIFJVTlRJTUUKLQotICAgWyBbMzQ1XVRvcCBdIFsgWzM0Nl1Db250ZW50cyBdIFsgWzM0 N11OZXh0IF0gWyBbMzQ4XVByZXZpb3VzIF0KLQotICAgU2VlIHRoZSAiYmV3YXJlIGZpbGUiLAot Ci0gICBbMzQ5XWNrdWJ3ci50eHQsIGZvciBoaW50cyBhYm91dCBydW50aW1lIG1pc2JlaGF2aW9y LiBUaGlzIHNlY3Rpb24KLSAgIGxpc3RzIHNvbWUgcnVudGltZSBwcm9ibGVtcyB0aGF0IGNhbiBi ZSBjdXJlZCBieSByZWJ1aWxkaW5nIEMtS2VybWl0LgotCi0gICBUaGUgcHJvZ3JhbSBzdGFydHMs IGJ1dCB0aGVyZSBpcyBubyBwcm9tcHQsIGFuZCBjZXJ0YWluIG9wZXJhdGlvbnMKLSAgIGRvbid0 IHdvcmsgKHlvdSBzZWUgZXJyb3IgbWVzc2FnZXMgbGlrZSAiS2VybWl0IGNvbW1hbmQgZXJyb3Ig aW4KLSAgIGJhY2tncm91bmQgZXhlY3V0aW9uIikuIFRoaXMgaXMgYmVjYXVzZSBLZXJtaXQgdGhp bmtzIGl0IGlzIHJ1bm5pbmcgaW4KLSAgIHRoZSBiYWNrZ3JvdW5kLiBTZWUgY29uYmd0KCkgaW4g WzM1MF1ja3V0aW8uYy4gVHJ5IHJlYnVpbGRpbmcgS2VybWl0Ci0gICB3aXRoOgotCi0gLURQSURf VD1waWRfdAotCi0gICBhZGRlZCB0byB5b3VyIENGTEFHUy4gSWYgdGhhdCBkb2Vzbid0IGhlbHAs IGZpbmQgb3V0IHRoZSBhY3R1YWwgZGF0YQotICAgdHlwZSBmb3IgcGlkcyAobG9vayBpbiB0eXBl cy5oIG9yIHNpbWlsYXIgZmlsZSkgYW5kIHVzZSBpdCBpbiBwbGFjZSBvZgotICAgInBpZF90Iiwg Zm9yIGV4YW1wbGU6Ci0KLSAtRFBJRF9UPXNob3J0Ci0KLSAgIFVuZXhwbGFpbmFibGUgYW5kIGlu YXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZXMgKCJTb2NrZXRzIG5vdCBzdXBwb3J0ZWQKLSAgIG9u IHRoaXMgZGV2aWNlIiwgZXRjKSBoYXZlIGJlZW4gdHJhY2VkIGluIGF0IGxlYXN0IG9uZSBjYXNl IHRvIGEgbGFjawotICAgb2YgYWdyZWVtZW50IGJldHdlZW4gdGhlIHN5c3RlbSBoZWFkZXIgZmls ZXMgYW5kIHRoZSBhY3R1YWwga2VybmVsLgotICAgVGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSBH TlUgQyBjb21waWxlciAoZ2NjKSB3YXMgYmVpbmcgdXNlZC4gZ2NjCi0gICB3YW50cyB0byBoYXZl IEFOU0ktQy1jb21wbGlhbnQgaGVhZGVyIGZpbGVzLCBhbmQgc28gcGFydCBvZiB0aGUKLSAgIGlu c3RhbGxhdGlvbiBwcm9jZWR1cmUgZm9yIGdjYyBpcyAob3Igd2FzKSB0byBydW4gYSBzaGVsbCBz Y3JpcHQgY2FsbGVkCi0gICAiZml4aW5jbHVkZXMiLCB3aGljaCB0cmFuc2xhdGVzIHRoZSBzeXN0 ZW0ncyBoZWFkZXIgZmlsZXMgaW50byBhCi0gICBzZXBhcmF0ZSBzZXQgb2YgaGVhZGVycyB0aGF0 IGdjYyBsaWtlcy4gU28gZmFyIHNvIGdvb2QuIExhdGVyLCBhIG5ldwotICAgdmVyc2lvbiBvZiB0 aGUgb3BlcmF0aW5nIHN5c3RlbSBpcyBpbnN0YWxsZWQgYW5kIG5vYm9keSByZW1lbWJlcnMgdG8K LSAgIHJ1biBmaXhpbmNsdWRlcyBhZ2Fpbi4gRnJvbSB0aGF0IHBvaW50LCBhbnkgcHJvZ3JhbSBj b21waWxlZCB3aXRoIGdjYwotICAgdGhhdCBtYWtlcyB1c2Ugb2YgaGVhZGVyIGZpbGVzIChwYXJ0 aWN1bGFybHkgaW9jdGwuaCkgaXMgdmVyeSBsaWtlbHkgdG8KLSAgIG1pc2JlaGF2ZS4gU29sdXRp b246IHJ1biBmaXhpbmNsdWRlcyBhZ2Fpbiwgb3IgdXNlIHlvdXIgc3lzdGVtJ3MKLSAgIHJlZ3Vs YXIgQyBjb21waWxlciwgbGlicmFyaWVzLCBhbmQgaGVhZGVyIGZpbGVzIGluc3RlYWQgb2YgZ2Nj LgotCi0xNC4gQ1JBU0hFUyBBTkQgQ09SRSBEVU1QUwotCi0gICBbIFszNTFdVG9wIF0gWyBbMzUy XUNvbnRlbnRzIF0gWyBbMzUzXU5leHQgXSBbIFszNTRdUHJldmlvdXMgXQotCi0gICBJZiBDLUtl cm1pdCBjb25zaXN0ZW50bHkgZHVtcHMgY29yZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZmlsZQot ICAgdHJhbnNmZXIsIGxvb2sgaW4gU0hPVyBGRUFUVVJFUyBmb3IgQ0tSRUFMUEFUSC4gSWYgZm91 bmQsIHJlYnVpbGQgd2l0aAotICAgLUROT1JFQUxQQVRIIGFuZCBzZWUgaWYgdGhhdCBmaXhlcyB0 aGUgcHJvYmxlbSAoc29tZSBVTklYZXMgaGF2ZQotICAgcmVhbHBhdGgoKSBidXQgaXQgZG9lc24n dCB3b3JrKS4KLQotICAgVG90YWwgZmFpbHVyZSBvZiB0aGUgS2VybWl0IHByb2dyYW0gY2FuIG9j Y3VyIGJlY2F1c2Ugb2YgYmFkIG1lbW9yeQotICAgcmVmZXJlbmNlcywgYmFkIHN5c3RlbSBjYWxs cywgb3IgcHJvYmxlbXMgd2l0aCBkeW5hbWljIG1lbW9yeQotICAgYWxsb2NhdGlvbi4gRmlyc3Qs IHRyeSB0byByZXByb2R1Y2UgdGhlIHByb2JsZW0gd2l0aCBkZWJ1Z2dpbmcgdHVybmVkCi0gICBv bjogcnVuIEtlcm1pdCB3aXRoIHRoZSAtZCBjb21tYW5kLWxpbmUgb3B0aW9uIChmb3IgZXhhbXBs ZSwgIndlcm1pdAotICAgLWQiKSBhbmQgdGhlbiBleGFtaW5lIHRoZSByZXN1bHRpbmcgZGVidWcu bG9nIGZpbGUuIFRoZSBsYXN0IGVudHJ5Ci0gICBzaG91bGQgYmUgaW4gdGhlIHZpY2luaXR5IG9m IHRoZSBjcmFzaC4gSW4gVk1TLCBhIGNyYXNoIGF1dG9tYXRpY2FsbHkKLSAgIHByb2R1Y2VzIGEg InN0YWNrIGR1bXAiIHdoaWNoIHNob3dzIHRoZSByb3V0aW5lIHdoZXJlIHRoZSBjcmFzaCBvY2N1 cnMuCi0gICBJbiBzb21lIHZlcnNpb25zIG9mIFVuaXgsIHlvdSBjYW4gZ2V0IGEgc3RhY2sgZHVt cCB3aXRoICJhZGIiIC0tIGp1c3QKLSAgIHR5cGUgImFkYiB3ZXJtaXQgY29yZSIgYW5kIHRoZW4g Z2l2ZSB0aGUgY29tbWFuZCAiJGMiLCB0aGVuIEN0cmwtRCB0bwotICAgcXVpdCAobm90ZTogcmVw bGFjZSAid2VybWl0IiBieSAia2VybWl0IiBvciBieSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUK LSAgIGV4ZWN1dGFibGUgdGhhdCBjcmFzaGVkIGlmIGl0IGlzIG5vdCBpbiB0aGUgY3VycmVudCBk aXJlY3RvcnkpLiBPciB1c2UKLSAgIGdkYiB0byBnZXQgYSBiYWNrdHJhY2UsIGV0Yy4KLQotICAg SW4gZWRpdCAxODYsIG9uZSBpbXBsZW1lbnRhdGlvbiwgVU5JU1lTIDUwMDAvOTUgYnVpbHQgd2l0 aCAibWFrZQotICAgc3lzNXIzIiwgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gcnVuIG91dCBvZiBtZW1v cnkgdmVyeSBxdWlja2x5IChlLmcuCi0gICB3aGlsZSBleGVjdXRpbmcgYSBzaG9ydCBpbml0aWFs aXphdGlvbiBmaWxlIHRoYXQgY29udGFpbnMgYSBTRVQgRElBTAotICAgRElSRUNUT1JZIGNvbW1h bmQpLiBEZWJ1ZyBsb2dzIHNob3cgdGhhdCBtYWxsb2MgY2FsbHMgYXJlIGZhaWxpbmcsCi0gICBy ZWFzb24gdW5rbm93bi4gRm9yIHRoaXMgYW5kIGFueSBvdGhlciBpbXBsZW1lbnRhdGlvbiB0aGF0 IGdpdmVzIGVycm9yCi0gICBtZXNzYWdlcyBhYm91dCAibWFsbG9jIGZhaWx1cmUiIG9yICJtZW1v cnkgYWxsb2NhdGlvbiBmYWlsdXJlIiwgcmVidWlsZAotICAgdGhlIHByb2dyYW0gKndpdGhvdXQq IHRoZSAtRERZTkFNSUMgQ0ZMQUdTIGRlZmluaXRpb24sIGZvciBleGFtcGxlOgotCi1tYWtlIHN5 czVyMyBLRkxBR1M9LVVEWU5BTUlDCi0KLSAgIEFzIG9mIGVkaXQgMTY5LCBDLUtlcm1pdCBpbmNs dWRlcyBhIG1hbGxvYygpIGRlYnVnZ2luZyBwYWNrYWdlIHdoaWNoCi0gICB5b3UgbWF5IGxpbmsg d2l0aCB0aGUgS2VybWl0IHByb2dyYW0gdG8gY2F0Y2ggcnVudGltZSBtYWxsb2MgZXJyb3JzLgot ICAgU2VlIHRoZSBtYWtlZmlsZSBlbnRyaWVzIGZvciBzdW5vczQxbWQgYW5kIG5leHRtZCBmb3Ig ZXhhbXBsZXMgb2YgaG93Ci0gICB0byBzZWxlY3QgbWFsbG9jIGRlYnVnZ2luZy4gT25jZSB5b3Ug aGF2ZSBsaW5rZWQgS2VybWl0IHdpdGggdGhlIG1hbGxvYwotICAgZGVidWdnZXIsIGl0IHdpbGwg aGFsdCB3aXRoIGFuIGluZm9ybWF0aXZlIG1lc3NhZ2UgaWYgYSBtYWxsb2MtcmVsYXRlZAotICAg ZXJyb3Igb2NjdXJzIGFuZCwgaWYgcG9zc2libGUsIGR1bXAgY29yZS4gRm9yIHRoaXMgcmVhc29u LAotICAgbWFsbG9jLWRlYnVnZ2luZyB2ZXJzaW9ucyBvZiBLZXJtaXQgc2hvdWxkIGJlIGJ1aWx0 IHdpdGhvdXQgdGhlICItcyIKLSAgIGxpbmsgb3B0aW9uICh3aGljaCByZW1vdmVzIHN5bWJvbHMs IHByZXZlbnRpbmcgYW5hbHlzaXMgb2YgdGhlIGNvcmUKLSAgIGR1bXApLiBZb3UgaGF2ZSBzZXZl cmFsIHdheXMgdG8gdHJhY2sgZG93biB0aGUgbWFsbG9jIGVycm9yOiBBbmFseXplCi0gICB0aGUg Y29yZSBkdW1wIHdpdGggYWRiLiBPciByZXByb2R1Y2UgdGhlIHByb2JsZW0gd2l0aCAibG9nIGRl YnVnIiBhbmQKLSAgIHRoZW4gbG9vayBhdCB0aGUgY29kZSBhcm91bmQgdGhlIGxhc3QgZGVidWcu bG9nIGVudHJ5LiBJZiB5b3UgaGF2ZSBnY2MsCi0gICBidWlsZCB0aGUgcHJvZ3JhbSB3aXRoICIt ZyIgYWRkZWQgdG8gQ0ZMQUdTIGFuZCB0aGVuIGRlYnVnIGl0IHdpdGggZ2RiLAotICAgZS5nLgot Ci1nZGIgd2VybWl0Ci1icmVhayBtYWluCi1ydW4KLS4uIHNldCBvdGhlciBicmVha3BvaW50cyBv ciB3YXRjaHBvaW50cwotY29udGludWUKLQotICAgV2F0Y2hwb2ludHMgYXJlIGVzcGVjaWFsbHkg dXNlZnVsIGZvciBmaW5kaW5nIG1lbW9yeSBsZWFrcywgYnV0IHRoZXkKLSAgIG1ha2UgdGhlIHBy b2dyYW0gcnVuIGFib3V0IGEgdGhvdXNhbmQgdGltZXMgc2xvd2VyIHRoYW4gdXN1YWwsIHNvIGRv bid0Ci0gICBzZXQgdGhlbSB1bnRpbCB0aGUgbGFzdCBwb3NzaWJsZSBtb21lbnQuIFdoZW4gYSB3 YXRjaHBvaW50IGlzIGhpdCwgeW91Ci0gICBjYW4gdXNlIHRoZSAid2hlcmUiIGNvbW1hbmQgdG8g ZmluZCBvdXQgd2hpY2ggQy1LZXJtaXQgc291cmNlIHN0YXRlbWVudAotICAgdHJpZ2dlcmVkIGl0 LgotCi0gICBJZiB5b3UgaGF2ZSB0aGUgUHVyZSBTb2Z0d2FyZSBJbmMgIlB1cmlmeSIgcHJvZHVj dCwgc2VlIHRoZSBzdW5vczQxY3AKLSAgIG1ha2VmaWxlIGVudHJ5IGZvciBhbiBleGFtcGxlIG9m IGhvdyB0byB1c2UgaXQgdG8gZGVidWcgQy1LZXJtaXQuCi0KLTE1LiBTWVNMT0dHSU5HCi0KLSAg IFsgWzM1NV1Ub3AgXSBbIFszNTZdQ29udGVudHMgXSBbIFszNTddTmV4dCBdIFsgWzM1OF1QcmV2 aW91cyBdCi0KLSAgICJTeXNsb2dnaW5nIiBtZWFucyByZWNvcmRpbmcgc2VsZWN0ZWQgaW5mb3Jt YXRpb24gaW4gdGhlIHN5c3RlbSBsb2cgdmlhCi0gICB0aGUgVW5peCBzeXNsb2coKSBmYWNpbGl0 eSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIG1vc3QgVW5peCB2ZXJzaW9ucy4KLSAgIFN5c2xvZ2dp bmcgaXMgbm90IGRvbmUgdW5sZXNzIEMtS2VybWl0IGlzIHN0YXJ0ZWQgd2l0aDoKLQotLS1zeXNs b2c6bgotCi0gICBvbiB0aGUgY29tbWFuZC1saW5lLCB3aGVyZSBuIGlzIGEgbnVtYmVyIGdyZWF0 ZXIgdGhhbiAwIHRvIGluZGljYXRlIHRoZQotICAgbGV2ZWwgb2Ygc3lzbG9nZ2luZy4gU2VlIFsz NTldU2VjdGlvbiA0LjIgb2YgdGhlIFszNjBdSUtTRAotICAgQWRtaW5pc3RyYXRvcidzIEd1aWRl IGZvciBkZXRhaWxzLgotCi0gICBPYnZpb3VzbHkgeW91IGNhbid0IGRlcGVuZCBvbiB1c2VycyB0 byBpbmNsdWRlIC0tc3lzbG9nOjMgKG9yIHdoYXRldmVyKQotICAgb24gdGhlIGNvbW1hbmQgbGlu ZSBldmVyeSB0aW1lIHRoZXkgc3RhcnQgQy1LZXJtaXQsIHNvIGlmIHlvdSB3YW50Ci0gICBjZXJ0 YWluIGtpbmRzIG9mIHJlY29yZHMgdG8gYmUgcmVjb3JkZWQgaW4gdGhlIHN5c3RlbSBsb2csIHlv dSBjYW4KLSAgIGJ1aWxkIEMtS2VybWl0IHdpdGggZm9yY2VkIHN5c2xvZ2dpbmcgYXQgdGhlIGRl c2lyZWQgbGV2ZWw7IGZvcgotICAgZXhhbXBsZSwgdG8gcmVjb3JkIGxvZ2lucyBhbmQgZGlhbG91 dHM6Ci0KLW1ha2UgbGludXggS0ZMQUdTPS1EU1lTTE9HTEVWRUw9MgotCi0gICBMZXZlbHMgMiBh bmQgMyBhcmUgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIHRoaXMgdHJlYXRtZW50LiBM ZXZlbAotICAgMiBmb3JjZXMgbG9nZ2luZyBvZiBhbGwgc3VjY2Vzc2Z1bCBkaWFsb3V0IGNhbGxz IChlLmcuIGZvciBjaGVja2luZwotICAgYWdhaW5zdCBvciBwaG9uZSBiaWxscyksIGFuZCBsZXZl bCAzIHJlY29yZHMgYWxsIGNvbm5lY3Rpb25zIChTRVQgTElORQotICAgb3IgU0VUIEhPU1QgLyBU RUxORVQgLyBSTE9HSU4sIGV0Yykgc28geW91IGNhbiBzZWUgd2hvIGlzIGNvbm5lY3RpbmcKLSAg IG91dCBmcm9tIHlvdXIgc3lzdGVtLCBhbmQgdG8gd2hlcmUsIGUuZy4gZm9yIHNlY3VyaXR5IGF1 ZGl0aW5nLgotCi0gICBMZXZlbCAyIGFuZCAzIHJlY29yZHMgYXJlIGVxdWl2YWxlbnQgdG8gdGhv c2UgaW4gdGhlIGNvbm5lY3Rpb24gbG9nOwotICAgc2VlIHRoZSBbMzYxXUMtS2VybWl0IDcuMCBT dXBwbGVtZW50KSBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUKLSAgIGNvbm5lY3Rp b24gbG9nLgotCi0xNi4gQlVJTERJTkcgU0VDVVJFIFZFUlNJT05TIE9GIEMtS0VSTUlUIDguMAot Ci0gICBbIFszNjJdVG9wIF0gWyBbMzYzXUNvbnRlbnRzIF0gWyBbMzY0XU5leHQgXSBbIFszNjVd UHJldmlvdXMgXQotCi0gICBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyIG1heSBiZSBidWlsdCB3aXRo IEtlcmJlcm9zKFRNKSBhbmQvb3IgU1JQKFRNKQotICAgKFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQp IGFuZC9vciBTU0wvVExTIHNlY3VyaXR5IGZvciBzdHJvbmcKLSAgIGF1dGhlbnRpY2F0aW9uIGFu ZCBlbmNyeXB0aW9uIG9mIEludGVybmV0IGNvbm5lY3Rpb25zLiBUaGVzZSBzZWN1cml0eQotICAg bWV0aG9kcyByZXF1aXJlIGV4dGVybmFsIGxpYnJhcmllcyB0aGF0LCBpbiB0aGVpciBiaW5hcnkg Zm9ybXMsIGFyZQotICAgcmVzdHJpY3RlZCBmcm9tIGV4cG9ydCBieSBVU0EgbGF3LiBTZWUgdGhl IFszNjZdS2VybWl0IFNlY3VyaXR5Ci0gICBSZWZlcmVuY2UpIGZvciBkZXRhaWxzLiBDLUtlcm1p dCBiaW5hcmllcyB0aGVtc2VsdmVzIGFyZSBsaWtld2lzZQotICAgcmVzdHJpY3RlZDsgdGhlIEMt S2VybWl0IGJpbmFyaWVzIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgcHVibGljCi0gICBkb3dubG9h ZCBvbiB0aGUgSW50ZXJuZXQgYXJlIG5vdCBhbGxvd2VkIHRvIGNvbnRhaW4gdGhlIHNlY3VyaXR5 Ci0gICBvcHRpb25zLgotCi0gICBTYW1wbGUgbWFrZWZpbGUgZW50cmllcyBhcmUgcHJvdmlkZWQg Zm9yIExpbnV4IGFuZCBtYW55IG90aGVyIG9wZXJhdGluZwotICAgc3lzdGVtcy4gQSBsaXN0IG9m IHNlY3VyZSBtYWtlZmlsZSBlbnRyaWVzIGlzIGluY2x1ZGVkIGluIHRoZSBNYWtlZmlsZS4KLSAg IENvbXBsZXRlIGluc3RydWN0aW9ucyBvbiBidWlsZGluZyBDLUtlcm1pdCA4LjAgd2l0aCBNSVQg S2VyYmVyb3M7Ci0gICBTZWN1cmUgUmVtb3RlIFBhc3N3b3JkOyBhbmQvb3IgT3BlblNTTCBjYW4g YmUgZm91bmQgaW4gdGhlIFszNjddS2VybWl0Ci0gICBTZWN1cml0eSBSZWZlcmVuY2UuCi0KLSAg IFNTTC9UTFMgYW5kIEtlcmJlcm9zIGJ1aWxkcyBhcmUgaW5jcmVhc2luZ2x5IHByb2JsZW1hdGlj IHdpdGggdGhlCi0gICAiZGVwcmVjYXRpb24iIG9mIERFUy4gVGhlcmUgaXMgY29kZSB0byBkZXRl Y3QgdGhlIHByZXNlbmNlIG9yIGFic2VuY2UKLSAgIG9mIERFUyBpbiB0aGUgT3BlblNTTCBidWls ZHMsIGJ1dCBpdCBkb2Vzbid0IGFsd2F5cyB3b3JrIGJlY2F1c2UKLSAgIHNvbWV0aW1lcyB0aGUg U1NMIGxpYnJhcmllcyBhcmUgcHJlc2VudCBidXQgcm91dGluZXMgYXJlIG1pc3NpbmcgZnJvbQot ICAgdGhlbS4KLQotICAgICAqIEZpcnN0IG9mIGFsbCByZW1lbWJlciB0aGF0IGlmIHlvdXIgU1NM IGFuZC9vciBLZXJiZXJvcyBoZWFkZXIgZmlsZXMKLSAgICAgICBhbmQgbGlicmFyaWVzIGFyZSBu b3QgaW4gdGhlIGRlZmF1bHQgcGxhY2UsIHlvdSdsbCBuZWVkIHRvIG92ZXJyaWRlCi0gICAgICAg dGhlIGFzc3VtZWQgcGF0aHMuIFRvIGZpbmQgb3V0IHdoYXQgdGhlIGRlZmF1bHQgcGxhY2VzIGFy ZSB0eXBlCi0gICAgICAgIm1ha2Ugc2hvdyIsIGUuZy46Ci0KLVt+L2tlcm1pdF0gbWFrZSBzaG93 Ci1wcmVmaXg9L3Vzci9sb2NhbAotc3Jwcm9vdD0vdXNyL2xvY2FsCi1zc2xyb290PS91c3IvbG9j YWwKLW1hbnJvb3Q9L3Vzci9sb2NhbAotSzRMSUI9LUwvdXNyL2tlcmJlcm9zL2xpYgotSzRJTkM9 LUkvdXNyL2tlcmJlcm9zL2luY2x1ZGUKLUs1TElCPS1ML3Vzci9rZXJiZXJvcy9saWIKLUs1SU5D PS1JL3Vzci9rZXJiZXJvcy9pbmNsdWRlCi1TUlBMSUI9LUwvdXNyL2xvY2FsL2xpYgotU1JQSU5D PS1JL3Vzci9sb2NhbC9pbmNsdWRlCi1TU0xMSUI9LUwvdXNyL2xvY2FsL3NzbC9saWIKLVNTTElO Qz0tSS91c3IvbG9jYWwvc3NsL2luY2x1ZGUKLVt+L2tlcm1pdF0KLQotICAgICAqIFlvdSBjYW4g b3ZlcnJpZGUgYW55IG9yIGFsbCBvZiB0aGVzZSBieSBwdXR0aW5nIGFzc2lnbm1lbnRzIG9uIHRo ZQotICAgICAgICdtYWtlJyBjb21tYW5kIGxpbmU7IGV4YW1wbGVzOgotCi1tYWtlIGxpbnV4K2ty YjUgXAotICJLNUlOQz0tSS91c3IvaW5jbHVkZS8iIFwKLSAiSzVMSUI9LUwvdXNyL2xpYjY0LyIK LQotbWFrZSBzb2xhcmlzOWcrc3NsIFwKLSAgIlNTTExJQj0tTC9vcHQvb3BlbnNzbC0wLjkuOHEv bGliIiBcCi0gICJTU0xJTkM9LUkvb3B0L29wZW5zc2wtMC45LjhxL2luY2x1ZGUiCi0KLSAgICAg ICBPciBieSBzZXR0aW5nIGFuZCBleHBvcnRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHByaW9y IHRvIGdpdmluZwotICAgICAgIHRoZSAnbWFrZScgY29tbWFuZCwgYXMgaW4gdGhpcyBleGFtcGxl IGluIHdoaWNoIChhZnRlciBCZXRhLjAxIHdhcwotICAgICAgIHVwbG9hZGVkKSBDLUtlcm1pdCB3 YXMgc3VjY2Vzc2Z1bGx5IGxpbmtlZCB3aXRoIE9wZW5TU0wgMS4wLjBkLAotICAgICAgIHdoaWNo IHdhcyBpbnN0YWxsZWQgYWxvbmdzaWRlIE9wZW5TU0wgMC45LjhyIG9uIHRoZSBzYW1lIGNvbXB1 dGVyLgotICAgICAgIE5vdGUgdGhlIHVzZSBvZiB0aGUgJy1pJyBvcHRpb24gaW5zdGVhZCBvZiAn LUknIHRvIGZvcmNlIGdjYyB0bwotICAgICAgIGluY2x1ZGUgdGhlIHJpZ2h0IGhlYWRlciBmaWxl cyAodGhhbmtzIHRvIE5lbHNvbiBCZWViZSBmb3IgdGhpcyk6Ci0KLWV4cG9ydCBQQVRIPS91c3Iv YmluOiRQQVRICi1leHBvcnQgU1NMSU5DPS1pc3lzdGVtL3Vzci9pbmNsdWRlCi1leHBvcnQgIlNT TExJQj0tTC91c3IvbGliIC1XbCwtcnBhdGgsL3Vzci9saWIiCi1tYWtlIGxpbnV4K3NzbAotCi0g ICAgICAgLWkgaXMgZXhwbGFpbmVkIGluICdtYW4gZ2NjJzsgdGhlcmUgaXMgYSBjaGFuZ2UgaW4g d2hhdCAtSSBkb2VzCi0gICAgICAgdGhhdCBjb3VsZCBoYXZlIHJhbWlmaWNhdGlvbnMgZm9yIG1h bnkgbWFrZWZpbGUgdGFyZ2V0cywgbm90IGp1c3QKLSAgICAgICBLZXJtaXQuIEFuZCAtV2wgYW5k IC1ycGF0aCBhcmUgZXhwbGFpbmVkIGluICdtYW4gbGQnOyB0aGUgaWRlYSBpcwotICAgICAgIGJ1 aWxkIGEgYmluYXJ5IGZyb20gd2hpY2ggdXNlZnVsIHJlcG9ydHMgY2FuIGJlIG9idGFpbmVkIHdp dGggbGRkLgotICAgICAqIEJ1aWxkaW5nIHdpdGggT3BlblNTTCB2ZXJzaW9ucyBwcmlvciB0byAw LjkuNyBkb2Vzbid0IHdvcmssIGV2ZW4KLSAgICAgICB0aG91Z2ggQy1LZXJtaXQgaXMgZGVzaWdu ZWQgdG8gd29yayB3aXRoIGJvdGggdGhlIG9sZCBhbmQgbmV3Ci0gICAgICAgdmVyc2lvbnMuIFRo aXMgY291bGQgcHJvYmFibHkgYmUgZml4ZWQgaWYgYW55Ym9keSBjYXJlcy4KLSAgICAgKiBJZiBh IEtlcmJlcm9zIG9yIFNTTCBidWlsZCBmYWlscyBhdCBsaW5rIHRpbWUgYmVjYXVzZQotICAgICAg IGRlc19lY2IzX2VuY3J5cHQsIGRlc19yYW5kb21fc2VlZCwgYW5kL29yIGRlc19zZXRfb2RkX3Bh cml0eSBjb21lCi0gICAgICAgdXAgbWlzc2luZywgcmVkbyB0aGUgYnVpbGQgd2l0aCAtVUNLX0RF UzoKLQotbWFrZSBuZXRic2Qra3JiNStzc2wgXAotICJLNUlOQz0tSS91c3IvbG9jYWwvaW5jbHVk ZSIgXAotICJLNUxJQj0tTC91c3IvbG9jYWwva2VyYmxpYiIgS0ZMQUdTPS1VQ0tfREVTCi0KLSAg ICAgICBJIHN1cHBvc2UgYWxsIHRoZSBTU0wgYW5kIEtlcmJlcm9zIHRhcmdldHMgY291bGQgYmUg cmVjb2RlZCB0bwotICAgICAgIGZpZ3VyZSB0aGlzIG91dCBhdXRvbWF0aWNhbGx5IChpLmUuIHRo YXQgREVTIGlzIGluc3RhbGxlZCBidXQgd2l0aAotICAgICAgIHNvbWUgZW50cnkgcG9pbnRzIG1p c3NpbmcpLCBidXQgaXQgd291bGRuJ3QgYmUgcHJldHR5LgotICAgICAqIERpZmZlcmVudCBLZXJi ZXJvcyBhbmQgT3BlblNTTCBkaXN0cmlidXRpb25zIGNhbiBiZSBpbnN0YWxsZWQgd2l0aAotICAg ICAgIGRpZmZlcmVudCBvcHRpb25zOyBjZXJ0YWluIGxpYnJhcmllcyBtaWdodCBiZSBtaXNzaW5n IG9yIG5hbWVkCi0gICAgICAgZGlmZmVyZW50bHkgKGZvciBleGFtcGxlLCBsaWJnc3NhcGkgdnMg bGliZ3NzYXBpX2tyYjUpLiBTb21lLCBidXQKLSAgICAgICBub3QgYWxsLCBvZiB0aGUgQy1LZXJt aXQgbWFrZWZpbGUgdGFyZ2V0cyBoYXZlIGJlZW4gZml4ZWQgdG8gdGFrZQotICAgICAgIHNvbWUg b2YgdGhlc2UgdmFyaWF0aW9ucyBpbnRvIGFjY291bnQgYnkgdGVzdGluZyBmb3IgdGhlbSwgbW9z dAotICAgICAgIG5vdGFibHkgdGhlIGxpbnV4IG9uZXMsIGxpbnV4K3NzbCwgbGludXgra3JiNSwg YW5kIGxpbnV4K2tyYjUrc3NsLgotICAgICAgIFByb2JhYmx5IGV2ZXJ5IHRhcmdldCB0aGF0IGJ1 aWxkcyB3aXRoIE9wZW5TU0wgb3IgS2VyYmVyb3MgbmVlZHMKLSAgICAgICB0aGUgc2FtZSB0cmVh dG1lbnQgYnV0IEkgd29uJ3QgaGF2ZSB0aW1lLgotICAgICAqIFdoeSBkb2Vzbid0IEMtS2VybWl0 IGp1c3QgdXNlIEF1dG9jb25mPyBNYWlubHkgYmVjYXVzZSB0aGUgbWFrZWZpbGUKLSAgICAgICBp cyBmdWxsIG9mIHRhcmdldHMgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgQXV0b2NvbmYg b3IgYW55Ci0gICAgICAgb3RoZXIgdG9vbCBsaWtlIGl0LiAoQW5vdGhlciByZWFzb24gaXMgdGhh dCBJJ3ZlIGFsd2F5cyBwcmVmZXJyZWQKLSAgICAgICB0aGF0IEtlcm1pdCBoYXZlIHRoZSBsZWFz dCBkZXBlbmRlbmNpZXMgcG9zc2libGUgb24gZXh0ZXJuYWwKLSAgICAgICB0b29sc2V0cy4pIFBl cmhhcHMgY2VydGFpbiB0YXJnZXRzIGNvdWxkIGJlIGNvbnZlcnRlZCB0byB1c2UgdGhlbSwKLSAg ICAgICBlc3BlY2lhbGx5IExpbnV4IGJlY2F1c2UgdGhlcmUgYXJlIHNvIG1hbnkgdmFyaWF0aW9u cyBhbW9uZwotICAgICAgIGRpc3RyaWJ1dGlvbnMgYW5kIHZlcnNpb25zLiBBbnlib2R5IHdobyB3 YW50cyB0byBtYWtlLCBzYXksIGFuCi0gICAgICAgQXV0b2NvbmYtYmFzZWQgTGludXggdGFyZ2V0 LCBiZSBteSBndWVzdCwgYnV0IGJlYXIgaW4gbWluZCB0aGF0IG9uZQotICAgICAgIExpbnV4IHRh cmdldCBpcyBzdXBwb3NlZCB0byB3b3JrIGZvciBhbGwgdmVyc2lvbnMgYW5kIGRpc3RyaWJ1dGlv bnMKLSAgICAgICBvZiBMaW51eCBvbiBhbGwgcGxhdGZvcm1zLiBXZWxsLCBvbmUgdGFyZ2V0IGZv ciBMaW51eCBieSBpdHNlbGYsCi0gICAgICAgYW5vdGhlciBmb3IgTGludXggd2l0aCBPcGVuU1NM LCBhbm90aGVyIGZvciBMaW51eCB3aXRoIEtlcmJlcm9zIDUsCi0gICAgICAgYW5kIGFub3RoZXIg Zm9yIExpbnV4IHdpdGggS2VyYmVyb3MgNSBhbmQgT3BlblNTTC4gRWFjaCBvZiB0aGVzZSBpcwot ICAgICAgIHN1cHBvc2VkIHRvIHdvcmsgb24gYW55IExpbnV4IHZlcnNpb24gd2l0aCBhbnkgdmVy c2lvbiBvZgotICAgICAgIEtlcmJlcm9zIDUgb3IgT3BlblNTTC4KLQotICAgQWxzbyBub3RlIHRo YXQgS2VyYmVyb3Mgc3VwcG9ydCBpcyBmb3IgdGhlIE1JVCB2ZXJzaW9uIG9ubHksIEhlaW1kYWwK LSAgIGFuZCBvdGhlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgKG5ldmVyIGhhdmUgYmVlbikuIE9mIGNv dXJzZSBhbnlib2R5IGNhbgotICAgcGl0Y2ggaW4gYW5kIGFkZCBvciBpbXByb3ZlIHN1cHBvcnQg Zm9yIHdoYXRldmVyIHRoZXkgd2FudC4KLQotMTcuIElOU1RBTExJTkcgQy1LRVJNSVQgQVMgQU4g U1NIIFNFUlZFUiBTVUJTWVNURU0KLQotICAgWyBbMzY4XVRvcCBdIFsgWzM2OV1Db250ZW50cyBd IFsgWzM3MF1QcmV2aW91cyBdCi0KLSAgIFRoaXMgcmVxdWlyZXMgQy1LZXJtaXQgOC4wLjIwNiBv ciBsYXRlciBhbmQgYW4gU1NIIHYyIHNlcnZlci4gSWYgeW91Ci0gICBsaXN0IEMtS2VybWl0IGFz IGEgU3Vic3lzdGVtIGluIHRoZSBTU0ggdjIgc2VydmVyIGNvbmZpZ3VyYXRpb24gZmlsZQotICAg KGFzLCBmb3IgZXhhbXBsZSwgU0ZUUCBpcyBsaXN0ZWQpLCB1c2VycyBjYW4gbWFrZSBTU0ggY29u bmVjdGlvbnMKLSAgIGRpcmVjdCB0byBhIEtlcm1pdCBzZXJ2ZXIgYXMgZXhwbGFpbmVkIGhlcmU6 Ci0KLVszNzFdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NrZXJtaXQuaHRtbAotCi0g ICBUaGUgbmFtZSBhbmQgbG9jYXRpb24gb2YgdGhlIFNTSCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBm aWxlIGRlcGVuZHMgb24KLSAgIHlvdXIgcGxhdGZvcm0sIHdoaWNoIFNTSCBwcm9kdWN0KHMpIHlv dSBoYXZlLCBldGMuIEMtS2VybWl0IGl0c2VsZiBtdXN0Ci0gICBiZSByZWZlcnJlZCB0byBpbiB0 aGlzIGZpbGUgYXMgImtlcm1pdC1zc2hzdWIiLiBPbiB0aGUgaG9zdCwgaW5zdGFsbAotICAgdGhl IEMtS2VybWl0IDguMC4yMTEgYmluYXJ5IGluIHRoZSBub3JtYWwgd2F5LiBUaGVuLCBpbiB0aGUg c2FtZQotICAgZGlyZWN0b3J5IGFzIHRoZSBDLUtlcm1pdCBiaW5hcnksIG1ha2UgYSBzeW1ib2xp YyBsaW5rOgotCi1sbiAtcyBrZXJtaXQga2VybWl0LXNzaHN1YgotCi0gICAoTm90ZTogdGhlICJt YWtlIGluc3RhbGwiIG1ha2VmaWxlIHRhcmdldCBkb2VzIHRoaXMgZm9yIHlvdS4pIFRoZW4gaW4K LSAgIHRoZSBzc2hkIGNvbmZpZ3VyYXRpb24gZmlsZSwgYWRkIGEgbGluZToKLQotU3Vic3lzdGVt ICBrZXJtaXQgICAvc29tZS9wYXRoL2tlcm1pdC1zc2hzdWIKLQotICAgKHdoZXJlIC9zb21lL3Bh dGggaXMgdGhlIGZ1bGx5IHNwZWNpZmllZCBkaXJlY3Rvcnkgd2hlcmUgdGhlIHN5bWxpbmsKLSAg IGlzLikgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBsaW5lIHRoYXQgc2V0cyB1cCB0aGUgU0ZUUCBz dWJzeXN0ZW0uCi0gICBFeGFtcGxlOgotCi1TdWJzeXN0ZW0gICBzZnRwICAgIC91c3IvbG9jYWwv bGliZXhlYy9zZnRwLXNlcnZlcgotU3Vic3lzdGVtICAga2VybWl0ICAvdXNyL2xvY2FsL2Jpbi9r ZXJtaXQtc3Noc3ViCi0KLSAgIFRoZSBtZWNoYW5pY3MgbWlnaHQgdmFyeSBmb3Igb3RoZXIgU1NI IHNlcnZlcnM7ICJtYW4gc3NoZCIgZm9yIGRldGFpbHMuCi0gICBUaGUgbWV0aG9kIHNob3duIGhl cmUgaXMgdXNlZCBiZWNhdXNlIHRoZSBPcGVuU1NIIHNlcnZlciBkb2VzIG5vdAotICAgcGVybWl0 IHRoZSBzdWJzeXN0ZW0gaW52b2NhdGlvbiB0byBpbmNsdWRlIGNvbW1hbmQtbGluZSBvcHRpb25z LgotICAgQy1LZXJtaXQgd291bGQgaGF2ZSBubyB3YXkgb2Yga25vd2luZyB0aGF0IGl0IHNob3Vs ZCBlbnRlciBTZXJ2ZXIgbW9kZQotICAgaWYgaXQgd2VyZSBub3QgY2FsbGVkIGJ5IGEgc3BlY2lh bCBuYW1lLgotCi0gICBbIFszNzJdVG9wIF0gWyBbMzczXUNvbnRlbnRzIF0gWyBbMzc0XUMtS2Vy bWl0IEhvbWUgXSBbIFszNzVdQy1LZXJtaXQKLSAgIDkuMCBPdmVydmlldyBdIFsgWzM3Nl1LZXJt aXQgSG9tZSBdCi0gICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwotCi0KLSAgICBDLUtlcm1pdCA5LjAgVW5peCBJbnN0 YWxsYXRpb24gSW5zdHJ1Y3Rpb25zIC8gVGhlIEtlcm1pdCBQcm9qZWN0IC8KLSAgICBDb2x1bWJp YSBVbml2ZXJzaXR5IC8gMzAgSnVuZSAyMDExCi0KLVJlZmVyZW5jZXMKLQotICAgMS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUvCi0gICAyLiBtYWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQotICAg My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAgIDQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAotICAgNS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICAgNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2Nrc2NyaXB0cy5odG1sCi0gICA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY3VycmVudC5odG1sCi0gICA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv d2hhdHNuZXcuaHRtbAotICAgOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2ZhcS5o dG1sCi0gIDEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCi0g IDExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMK LSAgMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgMTMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gIDE0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKLSAgMTUuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MAotICAxNi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxCi0gIDE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDIKLSAgMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbCN4MwotICAxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sI3g0Ci0gIDIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwjeDUKLSAgMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMu aHRtbCN4NgotICAyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I3g3Ci0gIDIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDgK LSAgMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQotICAy NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMAotICAyNi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMQotICAyNy4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMgotICAyOC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMwotICAyOS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxNAotICAzMC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxNQotICAzMS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxNgotICAzMi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxNwotICAzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotICAzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gIDM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEKLSAgMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbAotICAzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr Y2J3ci5odG1sCi0gIDM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwKLSAgMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbAotICA0 MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gyCi0gIDQxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDMKLSAgNDIuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NAotICA0My4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotICA0NC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gIDQ1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDIKLSAgNDYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MAotICA0Ny4gZnRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvYXJjaGl2ZXMvY2t1MjExLnRhci5aCi0gIDQ4LiBmdHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9hcmNoaXZlcy9ja3UyMTEudGFyLmd6Ci0gIDQ5LiBodHRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9mdHAvYXJjaGl2ZXMvY2t1MjExLnRhci5aCi0gIDUwLiBodHRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS9mdHAvYXJjaGl2ZXMvY2t1MjExLnRhci5negotICA1MS4gZnRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvYXJjaGl2ZXMvY2t1MjExLnRhcgotICA1Mi4gaHR0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUvZnRwL2FyY2hpdmVzL2NrdTIxMS50YXIKLSAgNTMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NwotICA1NC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1Ci0gIDU1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUKLSAgNTYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTYKLSAgNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAgNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotICA1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3gzCi0gIDYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjeDEKLSAgNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN4NQotICA2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI1gxMAotICA2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sI3gxMQotICA2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3gxMAotICA2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I3gzCi0gIDY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s4MHBhY2thZ2VzLmh0 bWwKLSAgNjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTAK LSAgNjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAg NjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwot ICA3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0Ci0gIDcx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDIKLSAgNzIuIGZ0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Jpbi8KLSAgNzMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9jazgwYmluYXJpZXMuaHRtbAotICA3NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g3Ci0gIDc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjYnVpbGQKLSAgNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCN4NQotICA3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3g0Ci0gIDc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tmYXEuaHRtbCN2ZXJzaW9uCi0gIDc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDQKLSAgODAuIG1haWx0bzprZXJtaXRAY29sdW1iaWEuZWR1Ci0gIDgxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0gIDgyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAgODMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NQotICA4NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gzCi0gIDg1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDgKLSAgODYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQotICA4Ny4gZnRwOi8va2VybWl0LmNvbHVt YmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvbWFrZWZpbGUKLSAgODguIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrcGtlci5tawotICA4OS4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1YnNkLm1hawotICA5MC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1Ci0gIDkxLiBtYWlsdG86a2VybWl0LXN1 cHBvcnRAY29sdW1iaWEuZWR1Ci0gIDkyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9tYWtlZmlsZQotICA5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sI3g3Ci0gIDk0LiBtYWlsdG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1 Ci0gIDk1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9tYWtlZmls ZQotICA5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1LjQK LSAgOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTAKLSAg OTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTEKLSAgOTku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NQotIDEwMC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lrc2QuaHRtbAotIDEwMS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotIDEwMi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMTAzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQuMQotIDEwNC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sCi0gMTA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQuMQotIDEwNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3g0LjIKLSAxMDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbCN4NC4zCi0gMTA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1aW5zLmh0bWwjeDQuNAotIDEwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sI3g0LjUKLSAxMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2NjZmcuaHRtbAotIDExMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5o dG1sI3g4Ci0gMTEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaWtzZC5odG1sCi0g MTEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaWtzZC5odG1sCi0gMTE0LiBmdHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VmaW8uYwotIDExNS4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1ZmlvLmMKLSAxMTYuIG1h aWx0bzprZXJtaXQtc3VwcG9ydEBjb2x1bWJpYS5lZHUKLSAxMTcuIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY21haS5jCi0gMTE4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE1Ci0gMTE5LiBmdHA6Ly9rZXJtaXQuY29sdW1i aWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYwotIDEyMC4gZnRwOi8va2VybWl0LmNvbHVt YmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1ZmlvLmMKLSAxMjEuIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCi0gMTIyLiBmdHA6Ly9rZXJtaXQuY29s dW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VmaW8uYwotIDEyMy4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjbmV0LmMKLSAxMjQuIGZ0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY25ldC5jCi0gMTI1LiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYwotIDEyNi4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjdW5pLmMKLSAxMjcuIG1haWx0bzprZXJt aXQtc3VwcG9ydEBjb2x1bWJpYS5lZHUKLSAxMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAxMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDEzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3g0Ci0gMTMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDQuMgotIDEzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3g0LjAKLSAxMzMuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L21ha2VmaWxlCi0gMTM0LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja3Vid3IudHh0Ci0gMTM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwKLSAxMzYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2Vy bWl0L2Nrd2FydC5jCi0gMTM3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtl cm1pdC9ja2Nwcm8udwotIDEzOC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2tjcHJvLmMKLSAxMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN0b3AKLSAxNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMu aHRtbCNjb250ZW50cwotIDE0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sI3g0Ci0gMTQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwjeDQuMwotIDE0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I3g0LjEKLSAxNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4 NQotIDE0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAot IDE0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRz Ci0gMTQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQKLSAx NDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NC40Ci0gMTQ5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQuMgotIDE1MC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotIDE1MS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMTUyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQKLSAxNTMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NC41Ci0gMTU0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQuMwotIDE1NS4gZnRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2twa2VyLm1rCi0gMTU2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0gMTU3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAxNTguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NAotIDE1OS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0LjQKLSAxNjAuIGZ0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L21ha2VmaWxlCi0gMTYxLiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9tYWtlZmlsZQotIDE2Mi4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjcHJvLncKLSAxNjMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAxNjQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDE2NS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g2Ci0gMTY2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQKLSAxNjcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NS4xCi0gMTY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUuMgotIDE2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3g1LjMKLSAxNzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbCN4NS40Ci0gMTcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvCi0gMTcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUu NAotIDE3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1LjMK LSAxNzQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L0NPUFlJTkcu VFhUCi0gMTc1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2Vy bWl0LmluaQotIDE3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I3g1LjEKLSAxNzcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2Nr ZXJtb2QuaW5pCi0gMTc4LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1p dC9ja2VybWl0NzAudHh0Ci0gMTc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2 MG1hbnVhbC5odG1sCi0gMTgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwKLSAxODEuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0 L2NrZXJtaXQ4MC50eHQKLSAxODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazYw bWFudWFsLmh0bWwKLSAxODMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbAotIDE4NC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQv Y2tlcm1pdDkwLnR4dAotIDE4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrNjBt YW51YWwuaHRtbAotIDE4Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5 MC5odG1sCi0gMTg3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9j a2Nid3IudHh0Ci0gMTg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0 bWwKLSAxODkuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWJ3 ci50eHQKLSAxOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbAot IDE5MS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1aW5zLnR4 dAotIDE5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCi0gMTkz LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NjZmcudHh0Ci0g MTk0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwKLSAxOTUuIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY3BsbS50eHQKLSAxOTYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbAotIDE5Ny4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2FfY2VydHMucGVtCi0gMTk4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE2IgotIDE5OS4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvbWFrZWZpbGUKLSAyMDAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4PwotIDIwMS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMQotIDIwMi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1LjIKLSAyMDMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwjZG93bmxvYWQKLSAyMDQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2JpbmFyaWVzLmh0bWwKLSAyMDUuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwjZG93bmxvYWQKLSAyMDYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAyMDcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDIwOC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g3Ci0gMjA5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUKLSAyMTAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAyMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDIxMi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g4Ci0gMjEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDYKLSAyMTQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L2NrdXRpby5jCi0gMjE1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYwotIDIxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3g0LjAKLSAyMTcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L2NrY2RlYi5oCi0gMjE4LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja3VmaW8uYwotIDIxOS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvYy1rZXJtaXQvY2t1ZmlvLmMKLSAyMjAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5l ZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCi0gMjIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEwCi0gMjIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjeDIKLSAyMjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NjZmcuaHRtbAotIDIyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sI3g0Ci0gMjI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwjeDEwCi0gMjI2LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9j a3V0aW8uYwotIDIyNy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQv Y2t1dGlvLmMKLSAyMjguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0 L2NrdXRpby5jCi0gMjI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwjeDkuNAotIDIzMC4gbWFpbHRvOmtlcm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdQotIDIzMS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotIDIzMi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMjMzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkKLSAyMzQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NwotIDIzNS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sCi0gMjM2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwKLSAyMzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAyMzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDIzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3gxMAotIDI0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3g4Ci0gMjQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDkuMQotIDI0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3g5LjEuMQotIDI0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3g5LjEuMgotIDI0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3g5LjEuMwotIDI0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3g5LjIKLSAyNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4OS4zCi0gMjQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDkuNAotIDI0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3g5LjUKLSAyNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bCN4OS42Ci0gMjUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwj eDkuNwotIDI1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5 LjgKLSAyNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS45 Ci0gMjUzLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8u YwotIDI1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAot IDI1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5Ci0gMjU2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAy NTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4yCi0gMjU4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuMS4xCi0gMjU5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuMS4yCi0gMjYw LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuMS4zCi0gMjYx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0gMjYyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAyNjMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQotIDI2NC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjEKLSAyNjUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xLjMKLSAyNjYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xLjEKLSAyNjcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAyNjguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDI2OS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5Ci0gMjcwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuMQotIDI3MS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjIKLSAyNzIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xLjIKLSAyNzMuIGh0dHA6Ly93d3cub3Bl bmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwNzkwNDk3NS8KLSAyNzQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xLjEKLSAyNzUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAyNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDI3Ny4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5Ci0gMjc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuMQotIDI3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3g5LjMKLSAyODAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbCN4OS4xCi0gMjgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1aW5zLmh0bWwjdG9wCi0gMjgyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjY29udGVudHMKLSAyODMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN4OQotIDI4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3g5LjQKLSAyODUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4OS4yCi0gMjg2LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtl cm1pdC9ja3VmaW8uYwotIDI4Ny4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2t1dGlvLmMKLSAyODguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrdWZpby5jCi0gMjg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwjdG9wCi0gMjkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjY29udGVudHMKLSAyOTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4OQotIDI5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3g5LjUKLSAyOTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bCN4OS4zCi0gMjk0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2FibGUuaHRtbAot IDI5NS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMK LSAyOTYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2RlYi5o Ci0gMjk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0g Mjk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMK LSAyOTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQotIDMw MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjYKLSAzMDEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS40Ci0gMzAyLiBm dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NkZWIuaAotIDMwMy4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dXMzLmMKLSAzMDQu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCi0gMzA1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0gMzA2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAzMDcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQotIDMwOC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjcKLSAzMDkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS41Ci0gMzEwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0gMzExLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAzMTIuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQotIDMxMy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjgKLSAzMTQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS42Ci0gMzE1LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0gMzE2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAzMTcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQotIDMxOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjkKLSAzMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS43Ci0gMzIwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYwotIDMyMS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKLSAzMjIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5l ZHUva2VybWl0L2Mta2VybWl0L2NrY2RlYi5oCi0gMzIzLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VmaW8uYwotIDMyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotIDMyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMzI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkKLSAzMjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbCN4MTAKLSAzMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN4OS44Ci0gMzI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjdG9wCi0gMzMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwjY29udGVudHMKLSAzMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbCN4MTEKLSAzMzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4OQotIDMzMy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJt aXQvY2t1dGlvLmMKLSAzMzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMu aHRtbCN4MTEKLSAzMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bCN0b3AKLSAzMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNj b250ZW50cwotIDMzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I3gxMgotIDMzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gx MAotIDMzOS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlv LmMKLSAzNDAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWZp by5jCi0gMzQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9w Ci0gMzQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVu dHMKLSAzNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTMK LSAzNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTEKLSAz NDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAzNDYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDM0 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxNAotIDM0OC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMgotIDM0OS4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1YndyLnR4dAotIDM1MC4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKLSAzNTEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAzNTIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDM1My4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxNQotIDM1NC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMwotIDM1NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotIDM1Ni4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMzU3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE2Ci0gMzU4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE0Ci0gMzU5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvdWlrc2QuaHRtbCN4NC4yCi0gMzYwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvdWlrc2QuaHRtbAotIDM2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQyLmh0bWwKLSAzNjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN0b3AKLSAzNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbCNjb250ZW50cwotIDM2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sI3gxNwotIDM2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3gxNQotIDM2Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3Vy aXR5Lmh0bWwKLSAzNjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eTgw Lmh0bWwKLSAzNjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0 b3AKLSAzNjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250 ZW50cwotIDM3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gx NgotIDM3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NrZXJtaXQuaHRtbAotIDM3 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotIDM3My4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMzc0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMzc1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s5MHVwZGF0ZXMuaHRtbAotIDM3Ni4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKCmRpZmYgLS1naXQgYS9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWtlci5uciBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1a2VyLm5yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwM2IzMGU3Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2Vy bWl0LTkuMC4zMDIvY2t1a2VyLm5yCisrKyAvZGV2L251bGwKQEAgLTEsMTgzMSArMCwwIEBACi0u XCIgQCgjKSBrZXJtaXQuMSA5LjAuMzAyIDIwMTEvMDgvMjAgQ29sdW1iaWEgVW5pdmVyc2l0eQot LlRIIEtFUk1JVCAxICJKVUxZIDIwMTEiICJVc2VyIE1hbnVhbHMiCi0ubmEKLS5TSCBOQU1FCi1r ZXJtaXQgXC0KLS5CIENcKGh5S2VybWl0IDkuMDoKLXRyYW5zcG9ydFwoaHkgYW5kIHBsYXRmb3Jt XChoeWluZGVwZW5kZW50Ci1pbnRlcmFjdGl2ZSBhbmQgc2NyaXB0YWJsZSBjb21tdW5pY2F0aW9u cyBzb2Z0d2FyZS4KLS5JUAotCi1UaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIGdpdmUgdGhl IGJlZ2lubmVyIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gdG8KLW1ha2UgYmFzaWMgKGlmIG5vdCBh ZHZhbmNlZCkgdXNlIG9mIENcKGh5S2VybWl0IDkuMC4gIEFsdGhvdWdoIGl0IG1pZ2h0IGJlCi1y YXRoZXIgbG9uZyBmb3IgYSBVbml4IG1hbnVhbCBwYWdlLCBpdCdzIHN0aWxsIGZhciBzaG9ydGVy IHRoYW4gdGhlCi1DXChoeUtlcm1pdCBtYW51YWwsIHdoaWNoIHNob3VsZCBiZSBjb25zdWx0ZWQg Zm9yIGFkdmFuY2VkIHRvcGljcyBzdWNoIGFzCi1jdXN0b21pemF0aW9uLCBjaGFyYWN0ZXJcKGh5 c2V0cywgc2NyaXB0aW5nLCBldGMuIFdlIGFsc28gYXR0ZW1wdCB0byBwcm92aWRlCi1hIGNsZWFy IHN0cnVjdHVyYWwgb3ZlcnZpZXcgb2YgQ1woaHlLZXJtaXQncyBtYW55IGNhcGFiaWxpdGllcywg ZnVuY3Rpb25hbAotYXJlYXMsIHN0YXRlcywgYW5kIG1vZGVzIGFuZCB0aGVpciBpbnRlcnJlbGF0 aW9uLCB0aGF0IHNob3VsZCBiZSBoZWxwZnVsIHRvCi1iZWdpbm5lcnMgYW5kIHZldGVyYW5zIGFs aWtlLCBhcyB3ZWxsIGFzIHRvIHRob3NlIHVwZ3JhZGluZyB0byB2ZXJzaW9uIDkuMAotZnJvbSBl YXJsaWVyIHJlbGVhc2VzLgotLlBQCi1UaGlzIGRvY3VtZW50IGlzIGFsc28gYXZhaWxhYmxlIGFz IGEgV2ViIHBhZ2UgYXQ6Ci0uSVAKLWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0 dXRvci5odG1sCi0uU0ggREVTQ1JJUFRJT04KLUNcKGh5S2VybWl0IGlzIGFuIGFsbFwoaHlwdXJw b3NlIGNvbW11bmljYXRpb25zIHNvZnR3YXJlIHBhY2thZ2UgZnJvbSB0aGUgS2VybWl0Ci1Qcm9q ZWN0IGF0IENvbHVtYmlhIFVuaXZlcnNpdHkgdGhhdDoKLS5QUAotLm5mCi1cKGJ1CUlzIHBvcnRh YmxlIHRvIG1hbnkgcGxhdGZvcm1zLCBVbml4IGFuZCBub25cKGh5VW5peCBhbGlrZS4KLS5icgot XChidQlDYW4gbWFrZSBib3RoIHNlcmlhbCBhbmQgbmV0d29yayBjb25uZWN0aW9ucy4KLS5icgot XChidQlDYW4gY29uZHVjdCBpbnRlcmFjdGl2ZSB0ZXJtaW5hbCBzZXNzaW9ucyBvdmVyIGl0cyBj b25uZWN0aW9uLgotLmJyCi1cKGJ1CUNhbiB0cmFuc2ZlciB0ZXh0IG9yIGJpbmFyeSBmaWxlcyBv dmVyIHRoZSBzYW1lIGNvbm5lY3Rpb24uCi0uYnIKLVwoYnUJQ2FuIGNvbnZlcnQgY2hhcmFjdGVy IHNldHMgaW4gdGhlIHRlcm1pbmFsIHNlc3Npb24uCi0uYnIKLVwoYnUJQ2FuIGNvbnZlcnQgY2hh cmFjdGVyIHNldHMgZHVyaW5nIHRleHRcKGh5ZmlsZSBmaWxlIHRyYW5zZmVyLgotLmJyCi1cKGJ1 CUlzIGN1c3RvbWl6YWJsZSBpbiBldmVyeSBhc3BlY3Qgb2YgaXRzIG9wZXJhdGlvbi4KLS5maQot LlBQCi1DXChoeUtlcm1pdCBpcyBhIG1vZGVtIHByb2dyYW0sIGEgVGVsbmV0IGNsaWVudCwgYW4g UmxvZ2luIGNsaWVudCwgYW4gRlRQCi1jbGllbnQsIGFuIEhUVFAgY2xpZW50LCBhbmQgb24gc2Vs ZWN0ZWQgcGxhdGZvcm1zLCBhbHNvIGFuIFguMjUgY2xpZW50LiBJdAotY2FuIG1ha2UgaXRzIG93 biBzZWN1cmUgSW50ZXJuZXQgY29ubmVjdGlvbnMgdXNpbmcgSUVURlwoaHlhcHByb3ZlZCBzZWN1 cml0eQotbWV0aG9kcyBpbmNsdWRpbmcgS2VyYmVyb3MgSVYsIEtlcmJlcm9zIFYsIFNTTC9UTFMs IGFuZCBTUlAgYW5kIGl0IGNhbiBhbHNvCi1tYWtlIFNTSCBjb25uZWN0aW9ucyB0aHJvdWdoIHlv dXIgZXh0ZXJuYWwgU1NIIGNsaWVudCBhcHBsaWNhdGlvbi4gSXQgY2FuCi1iZSB0aGUgZmFyXCho eWVuZCBmaWxlXChoeXRyYW5zZmVyIG9yIGNsaWVudC9zZXJ2ZXIgcGFydG5lciBvZiB5b3VyIGRl c2t0b3AKLUtlcm1pdCBjbGllbnQuIEl0IGNhbiBhbHNvIGFjY2VwdCBpbmNvbWluZyBkaWFsZWQg YW5kIG5ldHdvcmsgY29ubmVjdGlvbnMuCi1JdCBjYW4gZXZlbiBiZSBpbnN0YWxsZWQgYXMgYW4g SW50ZXJuZXQgc2VydmljZSBvbiBpdHMgb3duIHN0YW5kYXJkIFRDUAotc29ja2V0LCAxNjQ5IFtS RkMyODM5LCBSRkMyODQwXS4KLS5QUAotQW5kIHBlcmhhcHMgbW9zdCBpbXBvcnRhbnQsIGV2ZXJ5 dGhpbmcgeW91IGNhbiBkbyAiYnkgaGFuZCIgKGludGVyYWN0aXZlbHkpCi13aXRoIENcKGh5S2Vy bWl0LCBjYW4gYmUgInNjcmlwdGVkIiAoYXV0b21hdGVkKSB1c2luZyBpdHMgYnVpbHRcKGh5aW4K LWNyb3NzXChoeXBsYXRmb3JtIHRyYW5zcG9ydFwoaHlpbmRlcGVuZGVudCBzY3JpcHQgcHJvZ3Jh bW1pbmcgbGFuZ3VhZ2UsIHdoaWNoCi1oYXBwZW5zIHRvIGJlIGlkZW50aWNhbCB0byBpdHMgaW50 ZXJhY3RpdmUgY29tbWFuZCBsYW5ndWFnZS4KLS5QUAotVGhpcyBtYW51YWwgcGFnZSBvZmZlcnMg YW4gb3ZlcnZpZXcgb2YgQ1woaHlLZXJtaXQgOS4wIGZvciBVbml4ICgiVW5peCIgaXMgYW4KLW9w ZXJhdGluZyBzeXN0ZW0gZmFtaWx5IHRoYXQgaW5jbHVkZXMgQUlYLCBERy9VWCwgRnJlZUJTRCwg SFBcKGh5VVgsIElSSVgsCi1MaW51eCwgTWFjIE9TIFgsIE5ldEJTRCwgT3BlbkJTRCwgT3BlbiBT ZXJ2ZXIsIE9wZW4gVW5peCwgUU5YLCBTb2xhcmlzLAotU3VuT1MsIFN5c3RlbSBWIFIzLCBTeXN0 ZW0gViBSNCwgVHJ1NjQgVW5peCwgVW5peHdhcmUsIFhlbml4LCBhbmQgbWFueQotb3RoZXJzKS4g Rm9yIHRob3JvdWdoIGNvdmVyYWdlLCBwbGVhc2UgY29uc3VsdCB0aGUgcHVibGlzaGVkIENcKGh5 S2VybWl0Ci1tYW51YWwgYW5kIHN1cHBsZW1lbnRzIChzZWUgRE9DVU1FTlRBVElPTiBiZWxvdyku IEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uCi1hYm91dCBDXChoeUtlcm1pdCwgS2VybWl0IHNvZnR3 YXJlIGZvciBvdGhlciBwbGF0Zm9ybXMsIGFuZCBLZXJtaXQgbWFudWFscywKLXZpc2l0IHRoZSBL ZXJtaXQgUHJvamVjdCB3ZWJzaXRlOgotLlBQCi0gIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC8KLS5QUAotVGhpcyBpcyBhIGxvbmdlclwoaHl0aGFuXChoeWF2ZXJhZ2UgbWFudWFsIHBh Z2UsIGFuZCB5ZXQgaXQgYmFyZWx5IHNjcmF0Y2hlcyB0aGUKLXN1cmZhY2UuIERvbid0IGJlIGRh dW50ZWQuIENcKGh5S2VybWl0IGlzIGEgbGFyZ2UgYW5kIGNvbXBsZXggcGFja2FnZSwKLWV2b2x2 aW5nIG92ZXIgZGVjYWRlcyBvZiBwcmFjdGljZSBhbmQgZXhwZXJpZW5jZSwgYnV0IHRoYXQgZG9l c24ndCBtZWFuCi1pdCdzIGhhcmQgdG8gbGVhcm4gb3IgdXNlLiBJdHMgbW9zdCBjb21tb25seSB1 c2VkIGZ1bmN0aW9ucyBhcmUgZXhwbGFpbmVkCi1oZXJlIHdpdGggcG9pbnRlcnMgdG8gYWRkaXRp b25hbCBpbmZvcm1hdGlvbiBlbHNld2hlcmUuCi0uU0ggU1lOT1BTSVMKLS5CIGtlcm1pdCBbCi0u SSBmaWxlbmFtZQotLkIgXSBbCi0uSSBvcHRpb25zCi0uQiBdIFsgez0sXC1cLSwrfQotLkkgdGV4 dAotLkIgXSBdCi0uUFAKLW9yOgotLlBQCi0uQiBrZXJtaXQgCi0uSSBVUkwKLS5QUAotSWYgdGhl IGZpcnN0IGNvbW1hbmRcKGh5bGluZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiBhIGZpbGUsIGlu dGVyYWN0aXZlXChoeW1vZGUKLWNvbW1hbmRzIGFyZSBleGVjdXRlZCBmcm9tIHRoZSBmaWxlLiBU aGUgJz0nIChvciAiXC1cLSIpIGFyZ3VtZW50IHRlbGxzCi1LZXJtaXQgbm90IHRvIHBhcnNlIHRo ZSByZW1haW5kZXIgb2YgdGhlIGNvbW1hbmQgbGluZSwgYnV0IHRvIG1ha2UgdGhlCi13b3JkcyBm b2xsb3dpbmcgJz0nIGF2YWlsYWJsZSBhcyBcZSUxLCBcZSUyLCAuLi4gXGUlOS4gVGhlICIrIiBh cmd1bWVudCBpcwotbGlrZSAiPSIgYnV0IGZvciB1c2UgaW4gImtlcmJhbmcgc2NyaXB0cyIgKGV4 cGxhaW5lZCBiZWxvdykuIEEgc2Vjb25kCi1jb21tYW5kXChoeWxpbmUgZm9ybWF0IGFsbG93cyB0 aGUgb25lIGFuZCBvbmx5IGFyZ3VtZW50IHRvIGJlIGEgVGVsbmV0LCBGVFAsCi1IVFRQLCBvciBJ S1NEIFVSTC4KLS5QUAotT3JkZXIgb2YgZXhlY3V0aW9uOgotLlRQCi0gMS4KLVRoZSBjb21tYW5k IGZpbGUgKGlmIGFueSkuCi0uVFAKLS5uZgotIDIuCi1UaGUgaW5pdGlhbGl6YXRpb24gZmlsZSwg aWYgYW55LCB1bmxlc3Mgc3VwcHJlc3NlZCB3aXRoIFwtWS4KLS5maQotLlRQCi0gMy4KLVRoZSBj dXN0b21pemF0aW9uIGZpbGUgKGlmIGl0IGlzIGV4ZWN1dGVkIGJ5IHRoZSBpbml0aWFsaXphdGlv biBmaWxlKS4KLS5UUAotIDQuCi1UaGUgY29tbWFuZFwoaHlsaW5lIFVSTCAoaWYgYW55LCBhbmQg aWYgc28sIGV4ZWN1dGlvbiBzdG9wcyBoZXJlKS4KLS5UUAotIDUuCi1Db21tYW5kXChoeWxpbmUg b3B0aW9ucyAoaWYgYW55KS4KLS5UUAotIDYuCi1JbnRlcmFjdGl2ZSBjb21tYW5kcy4KLS5QUAot U29tZSBjb21tYW5kXChoeWxpbmUgb3B0aW9ucyBjYW4gY2F1c2UgYWN0aW9ucyAoc3VjaCBhcyBc LXMgdG8gc2VuZCBhIGZpbGUpOwotb3RoZXJzIGp1c3Qgc2V0IHBhcmFtZXRlcnMuIElmIGFueSBh Y3Rpb24gb3B0aW9ucyBhcmUgaW5jbHVkZWQgb24gdGhlCi1jb21tYW5kIGxpbmUsIEtlcm1pdCBl eGl0cyB3aGVuIGZpbmlzaGVkIHVubGVzcyBhbHNvIGdpdmVuIHRoZSBcLVMgKCJzdGF5IikKLW9w dGlvbi4gSWYgbm8gYWN0aW9uIG9wdGlvbnMgYXJlIGdpdmVuLCBubyBpbml0aWFsaXphdGlvbiBv ciBjb21tYW5kIGZpbGVzCi1jb250YWluZWQgYW4gRVhJVCBvciBRVUlUIGNvbW1hbmQsIGFuZCBu byBmYXRhbCBlcnJvcnMgb2NjdXJyZWQsIEtlcm1pdAotaXNzdWVzIGl0cyBwcm9tcHQgYW5kIHdh aXRzIGZvciB5b3UgdG8gdHlwZSBjb21tYW5kcy4KLS5JUAotQmVhciBpbiBtaW5kIHRoYXQgQ1wo aHlLZXJtaXQgY2FuIGJlIGJ1aWx0IHdpdGggc2VsZWN0ZWQgZmVhdHVyZXMKLWRpc2FibGVkLCBh bmQgYWxzbyB0aGF0IGNlcnRhaW4gZmVhdHVyZXMgYXJlIG5vdCBhdmFpbGFibGUgb24gYWxsCi1w bGF0Zm9ybXMuIEZvciBleGFtcGxlLCBDXChoeUtlcm1pdCBjYW4ndCBiZSBidWlsdCB3aXRoIFRD UC9JUAotc3VwcG9ydCBvbiBhIHBsYXRmb3JtIHRoYXQgZG9lcyBub3QgaGF2ZSBUQ1AvSVAgaGVh ZGVyIGZpbGVzIGFuZAotbGlicmFyaWVzIChhbmQgZXZlbiBpZiBLZXJtaXQgZG9lcyBpbmNsdWRl IFRDUC9JUCBzdXBwb3J0LCBpdAotY2FuJ3QgYmUgdXNlZCB0byBtYWtlIFRDUC9JUCBjb25uZWN0 aW9ucyBvbiBhIGNvbXB1dGVyIHRoYXQgZG9lcwotbm90IGhhdmUgYSBUQ1AvSVAgc3RhY2sgaW5z dGFsbGVkKS4gSWYgeW91ciB2ZXJzaW9uIG9mIAotQ1woaHlLZXJtaXQgbGFja3MgYSBmZWF0dXJl IG1lbnRpb25lZCBoZXJlLCB1c2UgaXRzIFNIT1cgRkVBVFVSRVMgY29tbWFuZCB0bwotc2VlIHdo YXQgbWlnaHQgaGF2ZSBiZWVuIGV4Y2x1ZGVkLgotLlBQCi1DXChoeUtlcm1pdCBoYXMgdGhyZWUg a2luZHMgb2YgY29tbWFuZHM6IHJlZ3VsYXIgc2luZ2xlXChoeWxldHRlciBjb21tYW5kXChoeWxp bmUKLW9wdGlvbnMsIGV4dGVuZGVkXChoeWZvcm1hdCBjb21tYW5kXChoeWxpbmUgb3B0aW9ucywg YW5kIGludGVyYWN0aXZlIGNvbW1hbmRzLgotLlBQCi1MaWtlIG1vc3QgVW5peCBjb21tYW5kcywg Q1woaHlLZXJtaXQgY2FuIGJlIGJlIGdpdmVuIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQKLWxpbmUu IEJ1dCBDXChoeUtlcm1pdCBhbHNvIGNhbiBiZSB1c2VkIGludGVyYWN0aXZlbHkgYnkgZ2l2aW5n IGl0IGNvbW1hbmRzCi1jb21wb3NlZCBvZiB3b3Jkcywgd2hpY2ggYXJlIG1vcmUgaW50dWl0aXZl IHRoYW4gY3J5cHRpYyBjb21tYW5kXChoeWxpbmUKLW9wdGlvbnMsIGFuZCBtb3JlIGZsZXhpYmxl IHRvby4gSW4gb3RoZXIgd29yZHMsIHlvdSBkb24ndCBoYXZlIHRvIHVzZQotQ1woaHlLZXJtaXQn cyBjb21tYW5kXChoeWxpbmUgb3B0aW9ucywgYnV0IHRoZXkgYXJlIGF2YWlsYWJsZSBpZiB5b3Ug d2FudCB0by4gKEJ5Ci10aGUgc2FtZSB0b2tlbiwgeW91IGRvbid0IGhhdmUgdG8gdXNlIGl0cyBp bnRlcmFjdGl2ZSBjb21tYW5kcyBlaXRoZXIgXChoeVwoaHkKLXlvdSBjYW4gdXNlIGVpdGhlciBv ciBib3RoIGluIGFueSBjb21iaW5hdGlvbi4pCi0uUFAKLUNcKGh5S2VybWl0IGlzIGdlbmVyYWxs eSBpbnN0YWxsZWQgaW4gdGhlIFBBVEggYXMgImtlcm1pdCIsIGFuZCB0aGVyZWZvcmUgaXMKLWlu dm9rZWQgYnkgdHlwaW5nIHRoZSB3b3JkICJrZXJtaXQiIChsb3dlcmNhc2UpIGF0IHRoZSBzaGVs bCBwcm9tcHQsIGFuZAotdGhlbiBwcmVzc2luZyB0aGUgUmV0dXJuIG9yIEVudGVyIGtleS4gSWYg eW91IHdpc2ggdG8gaW5jbHVkZSBjb21tYW5kXChoeWxpbmUKLW9wdGlvbnMsIHB1dCB0aGVtIGFm dGVyIHRoZSB3b3JkICJrZXJtaXQiIGJ1dCBiZWZvcmUgcHJlc3NpbmcgUmV0dXJuIG9yCi1FbnRl ciwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgZm9yIGV4YW1wbGU6Ci0uUFAKLSAgJCBrZXJtaXQgXC1z IGNrZXJtaXQudGFyLmd6Ci0uUFAKLSgnJCcgaXMgdGhlIHNoZWxsIHByb21wdDsgImtlcm1pdCBc LXMgY2tlcm1pdC50YXIuZ3oiIGlzIHdoYXQgeW91IHR5cGUsCi1mb2xsb3dlZCBieSBSZXR1cm4g b3IgRW50ZXIuKQotLlNIIE9QVElPTlMKLUhlcmUgaXMgYSBsaXN0IG9mIENcKGh5S2VybWl0J3Mg c2luZ2xlXChoeWxldHRlciBjb21tYW5kXChoeWxpbmUgb3B0aW9ucywgd2hpY2gKLXN0YXJ0IHdp dGggYSBzaW5nbGUgZGFzaCAoXC0pLCBpbiBBU0NJSSAoImFscGhhYmV0aWNhbCIpIG9yZGVyLiBB bHBoYWJldGljCi1jYXNlIGlzIHNpZ25pZmljYW50IChcLUEgaXMgbm90IHRoZSBzYW1lIGFzIFwt YSkuICBBY3Rpb24gb3B0aW9ucyBhcmUgCi10YWdnZWQgIkFDVElPTiIuCi0uVFAKLVwtMAotKGRp Z2l0IHplcm8pICAxMDAlIHRyYW5zcGFyZW50IENvbm5lY3Qgc3RhdGUgZm9yCi0iaW5cKGh5dGhl XChoeW1pZGRsZSIgb3BlcmF0aW9uOiA4IGJpdHMsIG5vIHBhcml0eSwgbm8KLWVzY2FwZSBjaGFy YWN0ZXIsIGV2ZXJ5dGhpbmcgcGFzc2VzIHRocm91Z2guCi0uVFAKLVwtOAotKGRpZ2l0IGVpZ2h0 KSAgQ29ubmVjdGlvbiBpcyA4XChoeWJpdCBjbGVhbiAodGhpcyBpcyB0aGUKLWRlZmF1bHQgaW4g Q1woaHlLZXJtaXQgOC4wIGFuZCBsYXRlcikuIEVxdWl2YWxlbnQgdG8gdGhlIEVJR0hUQklUCi1j b21tYW5kLCB3aGljaCBpbiB0dXJuIGlzIGEgc2hvcnRjdXQgZm9yIFNFVCBURVJNSU5BTAotQllU RVNJWkUgOCwgU0VUIENPTU1BTkQgQllURVNJWkUgOCwgU0VUIFBBUklUWSBOT05FLgotLlRQCi1c LTkgYXJnCi0oZGlnaXQgbmluZSkgIE1ha2UgYSBjb25uZWN0aW9uIHRvIGFuIEZUUCBzZXJ2ZXIu Ci1FcXVpdmFsZW50IHRvIHRoZSBGVFAgT1BFTiBjb21tYW5kLgotQXJndW1lbnQ6IElQXChoeWFk ZHJlc3NcKGh5b3JcKGh5aG9zdG5hbWVbOm9wdGlvbmFsXChoeVRDUFwoaHlwb3J0XS4KLU5PVEU6 IENcKGh5S2VybWl0IGFsc28gaGFzIGEgc2VwYXJhdGUgRlRQIGNvbW1hbmRcKGh5bGluZQotcGVy c29uYWxpdHksIHdpdGggcmVndWxhciBGVFBcKGh5bGlrZSBjb21tYW5kXChoeWxpbmUKLXN5bnRh eC4gTW9yZSBhYm91dCB0aGlzIGJlbG93LgotLlRQCi1cLUEKLUtlcm1pdCBpcyB0byBiZSBzdGFy dGVkIGFzIGFuIEludGVybmV0IHNlcnZpY2UgKElLU0QpCi0ob25seSBmcm9tIGluZXRkLmNvbmYp LgotLlRQCi1cLUIKLUtlcm1pdCBpcyBydW5uaW5nIGluIEJhdGNoIG9yIEJhY2tncm91bmQgKG5v Ci1jb250cm9sbGluZyB0ZXJtaW5hbCkuIFRvIGJlIHVzZWQgaW4gY2FzZSBLZXJtaXQKLWRvZXNu J3QgYXV0b21hdGljYWxseSBzZW5zZSBpdHMgYmFja2dyb3VuZCBzdGF0dXMuCi1FcXVpdmFsZW50 IHRvIHRoZSBTRVQgQkFDS0dST1VORCBPTiBjb21tYW5kLgotLlRQCi1cLUMgYXJnCi1JbnRlcmFj dGl2ZVwoaHltb2RlIENvbW1hbmRzIHRvIGJlIGV4ZWN1dGVkLgotQXJndW1lbnQ6IENvbW1hbmRz IHNlcGFyYXRlZCBieSBjb21tYXMsIGxpc3QgaW4KLWRvdWJsZXF1b3Rlcy4KLS5UUAotXC1EIGFy ZwotRGVsYXkgYmVmb3JlIHN0YXJ0aW5nIHRvIHNlbmQgaW4gUmVtb3RlIG1vZGUuCi1FcXVpdmFs ZW50IHRvIHRoZSBTRVQgREVMQVkgY29tbWFuZC4KLUFyZ3VtZW50OiBOdW1iZXIgb2Ygc2Vjb25k cy4KLS5UUAotXC1FCi1FeGl0IGF1dG9tYXRpY2FsbHkgd2hlbiBjb25uZWN0aW9uIGNsb3Nlcy4g RXF1aXZhbGVudAotdG8gU0VUIEVYSVQgT05cLURJU0NPTk5FQ1QgT04uCi0uVFAKLVwtRiBhcmcK LVVzZSBhbiBvcGVuIFRDUCBjb25uZWN0aW9uLgotQXJndW1lbnQ6IE51bWVyaWMgZmlsZSBkZXNj cmlwdG9yIG9mIG9wZW4gVENQCi1jb25uZWN0aW9uLgotQWxzbyBzZWU6IFwtaiwgXC1KLgotLlRQ Ci1cLUcgYXJnCi0oQUNUSU9OKSBHZXQgZmlsZShzKSBmcm9tIHNlcnZlciwgc2VuZCBjb250ZW50 cyB0byBzdGFuZGFyZAotb3V0cHV0LCB3aGljaCBub3JtYWxseSB3b3VsZCBiZSBwaXBlZCB0byBh bm90aGVyCi1wcm9jZXNzLgotQXJndW1lbnQ6IFJlbW90ZSBmaWxlIHNwZWNpZmljYXRpb24sIGlu IHF1b3RlcyBpZiBpdAotY29udGFpbnMgbWV0YWNoYXJhY3RlcnMuCi1BbHNvIHNlZTogXC1nLCBc LWsuCi0uVFAKLVwtSAotU3VwcHJlc3MgcHJvZ3JhbSBzdGFydHVwIEhlcmFsZCBhbmQgZ3JlZXRp bmcuCi0uVFAKLVwtSQotVGVsbCBLZXJtaXQgaXQgaGFzIGEgcmVsaWFibGUgY29ubmVjdGlvbiwg dG8gZm9yY2Ugc3RyZWFtaW5nIHRvIGJlIHVzZWQgd2hlcmUKLWl0IG5vcm1hbGx5IHdvdWxkIG5v dCBiZS4gIEVxdWl2YWxlbnQgdG8gdGhlIFNFVCBSRUxJQUJMRSBPTiBjb21tYW5kLgotLlRQCi1c LUogYXJnCi0oQUNUSU9OKSAiQmUgbGlrZSBUZWxuZXQuIiBMaWtlIFwtaiBidXQgaW1wbGllcyBc LUUuICBBcmd1bWVudDogSVAKLWhvc3RuYW1lL2FkZHJlc3Mgb3B0aW9uYWxseSBmb2xsb3dlZCBi eSBzZXJ2aWNlLiAgTk9URTogQ1woaHlLZXJtaXQgYWxzbyBoYXMgYQotc2VwYXJhdGUgVGVsbmV0 IGNvbW1hbmRcKGh5bGluZSBwZXJzb25hbGl0eSwgd2l0aCByZWd1bGFyIFRlbG5ldFwoaHlsaWtl Ci1jb21tYW5kXChoeWxpbmUgc3ludGF4LiBNb3JlIGFib3V0IHRoaXMgYmVsb3cuCi0uVFAKLVwt TAotUmVjdXJzaXZlIGRpcmVjdG9yeSBkZXNjZW50IGZvciBmaWxlcyBpbiBcLXMgb3B0aW9uLgot LlRQCi1cLU0gYXJnCi1NeSB1c2VyIG5hbWUgKGZvciB1c2Ugd2l0aCBUZWxuZXQsIFJsb2dpbiwg RlRQLCBldGMpLgotRXF1aXZhbGVudCB0byB0aGUgU0VUIExPR0lOIFVTRVIgY29tbWFuZC4KLUFy Z3VtZW50OiBVc2VybmFtZSBzdHJpbmcuCi0uVFAKLVwtTwotKEFDVElPTikgKFVwcGVyY2FzZSBs ZXR0ZXIgTykgQmUgYSBzZXJ2ZXIgZm9yIE9uZSBjb21tYW5kIG9ubHkuCi1BbHNvIHNlZTogXC14 LgotLlRQCi1cLVAKLURvbid0IGNvbnZlcnQgZmlsZSAoUGF0aCkgbmFtZXMgb2YgdHJhbnNmZXJy ZWQgZmlsZXMuCi1FcXVpdmFsZW50IHRvIFNFVCBGSUxFIE5BTUVTIExJVEVSQUwuCi0uVFAKLVwt UQotUXVpY2sgS2VybWl0IHByb3RvY29sIHNldHRpbmdzLiBFcXVpdmFsZW50IHRvIHRoZSBGQVNU Ci1jb21tYW5kLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGluIENcKGh5S2VybWl0IDcuMCBhbmQgbGF0 ZXIuCi0uVFAKLVwtUgotUmVtb3RlXChoeW9ubHkgKHRoaXMganVzdCBtYWtlcyBJRiBSRU1PVEUg dHJ1ZSkuCi0uVFAKLVwtUwotU3RheSAoZW50ZXIgY29tbWFuZCBwYXJzZXIgYWZ0ZXIgYWN0aW9u IG9wdGlvbnMpLgotLlRQCi1cLVQKLUZvcmNlIFRleHQgbW9kZSBmb3IgZmlsZSB0cmFuc2Zlcjsg aW1wbGllcyBcLVYuCi1FcXVpdmFsZW50IHRvIFNFVCBUUkFOU0ZFUiBNT0RFIE1BTlVBTCwgU0VU IEZJTEUgVFlQRSBURVhULgotLlRQCi1cLVYKLURpc2FibGUgYXV0b21hdGljIHBlclwoaHlmaWxl IHRleHQvYmluYXJ5IHN3aXRjaGluZy4KLUVxdWl2YWxlbnQgdG8gU0VUIFRSQU5TRkVSIE1PREUg TUFOVUFMLgotLlRQCi1cLVkKLVNraXAgKGRvbid0IGV4ZWN1dGUpIHRoZSBpbml0aWFsaXphdGlv biBmaWxlLgotLlRQCi1cLWEgYXJnCi1Bc1woaHluYW1lIGZvciBmaWxlKHMpIGluIFwtcywgXC1y LCBvciBcLWcuCi1Bcmd1bWVudDogQXNcKGh5bmFtZSBzdHJpbmcgKGFsdGVybmF0aXZlIGZpbGVu YW1lKS4gV2hlbgotcmVjZWl2aW5nIGZpbGVzLCB0aGlzIGNhbiBiZSBhIGRpcmVjdG9yeSBuYW1l LgotLlRQCi1cLWIgYXJnCi1TcGVlZCBmb3Igc2VyaWFsIGRldmljZS4gRXF1aXZhbGVudCB0byBT RVQgU1BFRUQuCi1Bcmd1bWVudDogTnVtZXJpYyBCaXRzIHBlciBzZWNvbmQgZm9yIHNlcmlhbAot Y29ubmVjdGlvbnMuCi0uVFAKLVwtYwotKEFDVElPTikgRW50ZXIgQ29ubmVjdCBzdGF0ZSBiZWZv cmUgdHJhbnNmZXJyaW5nIGZpbGVzLgotLlRQCi1cLWQKLUNyZWF0ZSBhIGRlYnVnLmxvZyBmaWxl IHdpdGggZGV0YWlsZWQgZGVidWdnaW5nCi1pbmZvcm1hdGlvbiAoYSBzZWNvbmQgXC1kIGFkZHMg dGltZXN0YW1wcykuIEVxdWl2YWxlbnQKLXRvIExPRyBERUJVRyBidXQgdGFrZXMgZWZmZWN0IHNv b25lci4KLS5UUAotXC1lIGFyZwotTWF4aW11bSBsZW5ndGggZm9yIGluY29taW5nIEtlcm1pdCBm aWxlXChoeXRyYW5zZmVyCi1wYWNrZXRzLiBFcXVpdmFsZW50IHRvIFNFVCBSRUNFSVZFIFBBQ0tF VFwtTEVOR1RILgotQXJndW1lbnQ6IExlbmd0aCBpbiBieXRlcy4KLS5UUAotXC1mCi0oQUNUSU9O KSBTZW5kIGEgRklOSVNIIGNvbW1hbmQgdG8gYSBLZXJtaXQgc2VydmVyLgotLlRQCi1cLWcgYXJn Ci1HZXQgZmlsZShzKSBmcm9tIGEgS2VybWl0IHNlcnZlci4KLUFyZ3VtZW50OiBGaWxlIHNwZWNp ZmljYXRpb24gb24gb3RoZXIgY29tcHV0ZXIsIGluCi1xdW90ZXMgaWYgaXQgY29udGFpbnMgbWV0 YWNoYXJhY3RlcnMuIEVxdWl2YWxlbnQgdG8KLUdFVC4gQWxzbyBzZWU6IFwtYSwgXC1HLCBcLXIu Ci0uVFAKLVwtaAotKEFDVElPTikgUHJpbnQgSGVscCB0ZXh0IGZvciBzaW5nbGVcKGh5bGV0dGVy IGNvbW1hbmRcKGh5bGluZSBvcHRpb25zCi0ocGlwZSB0aHJ1ICdtb3JlJyB0byBwcmV2ZW50IHNj cm9sbGluZykuCi0uVFAKLVwtaQotRm9yY2UgYmluYXJ5IChJbWFnZSkgbW9kZSBmb3IgZmlsZSB0 cmFuc2ZlcjsgaW1wbGllcwotXC1WLiBFcXVpdmFsZW50IHRvIFNFVCBUUkFOU0ZFUiBNT0RFIE1B TlVBTCwgU0VUIEZJTEUKLVRZUEUgQklOQVJZLgotLlRQCi1cLWogYXJnCi1NYWtlIGEgVENQL0lQ IGNvbm5lY3Rpb24uCi1Bcmd1bWVudDogSVAgaG9zdCBuYW1lL2FkZHJlc3MgYW5kIG9wdGlvbmFs IHNlcnZpY2UKLW5hbWUgb3IgbnVtYmVyLiBFcXVpdmFsZW50IHRvIHRoZSBURUxORVQgY29tbWFu ZC4KLUFsc28gc2VlOiBcLUosIFwtRi4KLS5UUAotXC1rCi0oQUNUSU9OKSBSZWNlaXZlIGZpbGUo cykgdG8gc3RhbmRhcmQgb3V0cHV0LCB3aGljaCBub3JtYWxseSAKLXdvdWxkIGJlIHBpcGVkIHRv IGFub3RoZXIgcHJvY2Vzcy4KLUFsc28gc2VlOiBcLXIsIFwtRy4KLS5UUAotXC1sIGFyZwotKExv d2VyY2FzZSBsZXR0ZXIgTCkgTWFrZSBhIGNvbm5lY3Rpb24gb24gdGhlIGdpdmVuCi1zZXJpYWwg Y29tbXVuaWNhdGlvbnMgZGV2aWNlLiBFcXVpdmFsZW50IHRvIHRoZSBTRVQKLUxJTkUgKFNFVCBQ T1JUKSBjb21tYW5kLgotQXJndW1lbnQ6IFNlcmlhbCBkZXZpY2UgbmFtZSwgZS5nLiAvZGV2L3R0 eVMwLgotLlRQCi1cLW0gYXJnCi1Nb2RlbSB0eXBlIGZvciB1c2Ugd2l0aCB0aGUgXC1sIGRldmlj ZS4gRXF1aXZhbGVudCB0bwotdGhlIFNFVCBNT0RFTSBUWVBFIGNvbW1hbmQuCi1Bcmd1bWVudDog TW9kZW0gbmFtZSBhcyBpbiBTRVQgTU9ERU0gVFlQRSBjb21tYW5kLAotZS5nLiAidXNyb2JvdGlj cyIuCi0uVFAKLVwtbgotKEFDVElPTikgRW50ZXIgQ29ubmVjdCBzdGF0ZSBhZnRlciB0cmFuc2Zl cnJpbmcgZmlsZXMgKGhpc3RvcmljYWwpLgotLlRQCi1cLXAgYXJnCi1QYXJpdHkuIEVxdWl2YWxl bnQgdG8gdGhlIFNFVCBQQVJJVFkgY29tbWFuZC4KLUFyZ3VtZW50OiBPbmUgb2YgdGhlIGZvbGxv d2luZzogZSh2ZW4pLCBvKGRkKSwgbShhcmspLAotbihvbmUpLCBzKHBhY2UpLgotLlRQCi1cLXEK LVF1aWV0IChzdXBwcmVzcyBtb3N0IG1lc3NhZ2VzKS4gRXF1aXZhbGVudCB0byBTRVQgUVVJRVQg T04uCi0uVFAKLVwtcgotKEFDVElPTikgUmVjZWl2ZSBmaWxlKHMpLiBFcXVpdmFsZW50IHRvIHRo ZSBSRUNFSVZFIGNvbW1hbmQuCi1Bcmd1bWVudDogKG5vbmUsIGJ1dCBzZWUgXC1hKQotLlRQCi1c LXMgYXJnCi1TZW5kIGZpbGUocykuCi1Bcmd1bWVudDogT25lIG9yIG1vcmUgbG9jYWwgZmlsZSBz cGVjaWZpY2F0aW9ucy4KLUVxdWl2YWxlbnQgdG8gdGhlIFNFTkQgY29tbWFuZC4KLUFsc28gc2Vl OiBcLWEuCi0uVFAKLVwtdAotKEhpc3RvcmljYWwpIFhvbiAoQ3RybFwtUSkgVHVybmFyb3VuZCBj aGFyYWN0ZXIgZm9yCi1oYWxmXChoeWR1cGxleCBjb25uZWN0aW9ucyAodXNlZCBvbiBzZXJpYWwg bGluZW1vZGUKLWNvbm5lY3Rpb25zIHRvIG9sZCBtYWluZnJhbWVzKS4gRXF1aXZhbGVudCB0byBT RVQKLURVUExFWCBIQUxGLCBTRVQgSEFORFNIQUtFIFhPTi4KLS5UUAotXC12IGFyZwotV2luZG93 IHNpemUgZm9yIEtlcm1pdCBwcm90b2NvbCAoaWdub3JlZCB3aGVuCi1zdHJlYW1pbmcpLiBFcXVp dmFsYW5ldCB0byBTRVQgV0lORE9XXC1TSVpFLgotQXJndW1lbnQ6IE51bWJlciwgMSB0byAzMi4K LS5UUAotXC13Ci1JbmNvbWluZyBmaWxlcyBXcml0ZSBvdmVyIGV4aXN0aW5nIGZpbGVzLiBFcXVp dmFsZW50Ci10byBTRVQgRklMRSBDT0xMSVNJT04gT1ZFUldSSVRFLgotLlRQCi1cLXgKLShBQ1RJ T04pIEVudGVyIHNlcnZlciBtb2RlLiBFcXVpdmFsZW50IHRvIHRoZSBTRVJWRVIgY29tbWFuZC4K LUFsc28gc2VlOiBcLU8uCi0uVFAKLVwteSBhcmcKLUFsdGVybmF0aXZlIGluaXRpYWxpemF0aW9u IGZpbGUuCi1Bcmd1bWVudDogRmlsZW5hbWUuCi0uVFAKLVwtegotRm9yY2UgZm9yZWdyb3VuZCBi ZWhhdmlvci4gVG8gYmUgdXNlZCBpbiBjYXNlIEtlcm1pdAotZG9lc24ndCBhdXRvbWF0aWNhbGx5 IHNlbnNlIGl0cyBmb3JlZ3JvdW5kIHN0YXR1cy4KLUVxdWl2YWxlbnQgdG8gdGhlIFNFVCBCQUNL R1JPVU5EIE9GRiBjb21tYW5kLgotLlBQCi1FeHRlbmRlZCBjb21tYW5kXChoeWxpbmUgb3B0aW9u cyAobmVjZXNzYXJ5IGJlY2F1c2Ugc2luZ2xlXChoeWxldHRlciBvbmVzIGFyZQotYWJvdXQgdXNl ZCB1cCkgc3RhcnQgd2l0aCB0d28gZGFzaGVzIChcLVwtKSwgd2l0aCB3b3JkcyByYXRoZXIgdGhh biBzaW5nbGUKLWxldHRlcnMgYXMgb3B0aW9uIG5hbWVzLiBJZiBhbiBleHRlbmRlZCBvcHRpb24g dGFrZXMgYW4gYXJndW1lbnQsIGl0IGlzCi1zZXBhcmF0ZWQgZnJvbSB0aGUgb3B0aW9uIHdvcmQg YnkgYSBjb2xvbiAoOikuIEV4dGVuZGVkIG9wdGlvbnMgaW5jbHVkZToKLQotLlRQCi0gXC1cLWJh bm5lcmZpbGU6ZmlsZW5hbWUKLUZpbGUgdG8gZGlzcGxheSB1cG9uIHN0YXJ0dXAgb3IgSUtTRCBs b2dpbi4KLS5UUAotIFwtXC1jZGZpbGU6ZmlsZW5hbWUKLUZpbGUgdG8gYmUgc2VudCBmb3IgZGlz cGxheSB0byB0aGUgY2xpZW50IHdoZW4KLXNlcnZlciBjaGFuZ2VzIGRpcmVjdG9yeSAoZmlsZW5h bWUgaXMgcmVsYXRpdmUgdG8KLXRoZSBjaGFuZ2VkXChoeXRvIGRpcmVjdG9yeSkuCi0uVFAKLSBc LVwtY2RtZXNzYWdlOntvbixvZmZ9Ci1FbmFibGUvZGlzYWJsZSB0aGUgc2VydmVyIENEIG1lc3Nh Z2UgZmVhdHVyZS4KLS5UUAotIFwtXC1oZWxwCi1QcmludHMgdXNhZ2UgbWVzc2FnZSBmb3IgZXh0 ZW5kZWQgb3B0aW9ucy4KLS5UUAotIFwtXC1oZWxwZmlsZTpmaWxlbmFtZQotRGVzaWduYXRlcyBh IGZpbGUgY29udGFpbmluZyBjdXN0b20gdGV4dCB0bwotcmVwbGFjZSB0aGUgdG9wXChoeWxldmVs IEhFTFAgY29tbWFuZC4KLS5UUAotIFwtXC1ub2ludGVycnVwdHMKLURpc2FibGVzIGtleWJvYXJk IGludGVycnVwdHMuCi0uVFAKLSBcLVwtbm9wZXJtcwotRGlzYWJsZXMgdGhlIEtlcm1pdCBwcm90 b2NvbCBmaWxlIFBlcm1pc3Npb25zCi1hdHRyaWJ1dGUsIHRvIHByZXZlbnQgdHJhbnNtaXNzaW9u IG9mIGZpbGUKLXBlcm1pc3Npb25zIChwcm90ZWN0aW9uKSBmcm9tIHNlbmRlciB0byByZWNlaXZl ci4KLS5UUAotIFwtXC12ZXJzaW9uCi0oQUNUSU9OKSBDXChoeUtlcm1pdCBwcmludHMgaXRzIHZl cnNpb24gbnVtYmVyLgotLlBQCi1QbHVzIHNldmVyYWwgb3RoZXIgSUtTRFwoaHlPbmx5IG9wdGlv bnMgZGVzY3JpYmVkIGF0OgotLlBQCi0gIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9p a3NkLmh0bWwKLS5QUAotU2VlIHRoZSBmaWxlXChoeXRyYW5zZmVyIHNlY3Rpb24gZm9yIGV4YW1w bGVzIG9mIGNvbW1hbmRcKGh5bGluZSBpbnZvY2F0aW9uLgotLlNIIENPTU1BTkQgTEFOR1VBR0UK LUNcKGh5S2VybWl0J3MgaW50ZXJhY3RpdmUgY29tbWFuZCBsYW5ndWFnZSBpcyB0aGUgc3ViamVj dCBvZiBhIDYyMlwoaHlwYWdlIGJvb2sKLWFuZCBhbm90aGVyIHNldmVyYWwgaHVuZHJlZCBwYWdl cyBvZiB1cGRhdGVzLCBmYXIgdG9vIG11Y2ggZm9yIGEgbWFudWFsCi1wYWdlLiBCdXQgaXQncyBu b3QgaGFyZCB0byBnZXQgc3RhcnRlZC4gQXQgdGhlIHNoZWxsIHByb21wdCwganVzdCB0eXBlCi0i a2VybWl0IiB0byBnZXQgQ1woaHlLZXJtaXQncyBpbnRlcmFjdGl2ZSBjb21tYW5kIHByb21wdDoK LS5QUAotLm5mCi0gICQga2VybWl0Ci0gICgvY3VycmVudC9kaXJlY3RvcnkpIENcLUtlcm1pdD4K LS5maQotLlBQCi1CZWdpbiBieSB0eXBpbmcgImhlbHAiIChhbmQgdGhlbiBwcmVzcyB0aGUgUmV0 dXJuIG9yIEVudGVyIGtleSkgZm9yIGEKLXRvcFwoaHlsZXZlbCBvdmVydmlldywgcmVhZCBpdCwg YW5kIGdvIGZyb20gdGhlcmUuIFlvdXIgc2Vjb25kIGNvbW1hbmQgc2hvdWxkCi1wcm9iYWJseSBi ZSAiaW50cm8iIChpbnRyb2R1Y3Rpb24pLiBOb3RlIHRoZSBwcm9tcHQgc2hvd3MgeW91ciBjdXJy ZW50Ci1kaXJlY3RvcnkgKHVubGVzcyB5b3UgdGVsbCBLZXJtaXQgdG8gcHJvbXB0IHlvdSB3aXRo IHNvbWV0aGluZyBlbHNlKS4KLS5QUAotSW50ZXJhY3RpdmUgY29tbWFuZHMgYXJlIGNvbXBvc2Vk IG1haW5seSBvZiByZWd1bGFyIEVuZ2xpc2ggd29yZHMsIHVzdWFsbHkKLWluIHRoZSBmb3JtIG9m IGltcGVyYXRpdmUgc2VudGVuY2VzLCBzdWNoIGFzOgotLlBQCi0gIHNlbmQgb29mYS50eHQKLS5Q UAotd2hpY2ggdGVsbHMgS2VybWl0IHRvIHNlbmQgKHRyYW5zZmVyKSB0aGUgZmlsZSB3aG9zZSBu YW1lIGlzIG9vZmEudHh0LCBvcjoKLS5QUAotICBzZXQgdHJhbnNmZXIgbW9kZSBhdXRvbWF0aWMK LS5QUAotd2hpY2ggc2V0cyBLZXJtaXQncyAidHJhbnNmZXIgbW9kZSIgdG8gImF1dG9tYXRpYyIg KHdoYXRldmVyIHRoYXQgbWVhbnMpLgotLlBQCi1XaGlsZSB0eXBpbmcgY29tbWFuZHMsIHlvdSBj YW4gYWJicmV2aWF0ZSwgYXNrIGZvciBoZWxwIChieSBwcmVzc2luZyB0aGUKLSI/IiBrZXkgYW55 d2hlcmUgaW4gYSBjb21tYW5kKSwgY29tcGxldGUga2V5d29yZHMgb3IgZmlsZW5hbWVzICh3aXRo IHRoZQotVGFiIG9yIEVzYyBrZXkpLCBhbmQgZWRpdCB5b3VyIHR5cGluZyB3aXRoIEJhY2tzcGFj ZSBvciBEZWxldGUsIEN0cmxcLVcsCi1DdHJsXC1VLCBldGMuIFlvdSBjYW4gYWxzbyByZWNhbGwg cHJldmlvdXMgY29tbWFuZHMsIHNhdmUgeW91ciBjb21tYW5kCi1oaXN0b3J5LCBhbmQgd2hvIGtu b3dzIHdoYXQgZWxzZS4gR2l2ZSB0aGUgSU5UUk8gY29tbWFuZCBmb3IgZGV0YWlscy4KLS5QUAot Q1woaHlLZXJtaXQgaGFzIGh1bmRyZWRzIG9mIGNvbW1hbmRzLCBhbmQgdGhleSBjYW4gYmUgaXNz dWVkIGluIGluZmluaXRlCi12YXJpZXR5IGFuZCBjb21iaW5hdGlvbnMsIGluY2x1ZGluZyBjb21t YW5kcyBmb3I6Ci0ubmYKLS5QUAotXChidQlNYWtpbmcgY29ubmVjdGlvbnMgKFNFVCBMSU5FLCBE SUFMLCBURUxORVQsIFNTSCwgRlRQLCAuLi4pCi0uYnIKLVwoYnUJQnJlYWtpbmcgY29ubmVjdGlv bnMgKEhBTkdVUCwgQ0xPU0UpCi0uYnIKLVwoYnUJVHJhbnNmZXJyaW5nIGZpbGVzIChTRU5ELCBH RVQsIFJFQ0VJVkUsIE1PVkUsIFJFU0VORCwgLi4uKQotLmJyCi1cKGJ1CUVzdGFibGlzaGluZyBw cmVmZXJlbmNlcyAoU0VUKQotLmJyCi1cKGJ1CURpc3BsYXlpbmcgcHJlZmVyZW5jZXMgKFNIT1cp Ci0uYnIKLVwoYnUJTWFuYWdpbmcgbG9jYWwgZmlsZXMgKENELCBERUxFVEUsIE1LRElSLCBESVIs IFJFTkFNRSwgVFlQRSwgLi4uKQotLmJyCi1cKGJ1CU1hbmFnaW5nIHJlbW90ZSBmaWxlcyAoUkNE LCBSREVMLCBSTUtESVIsIFJESVIsIC4uLikKLS5icgotXChidQlVc2luZyBsb2NhbCBmaWxlcyAo Rk9QRU4sIEZDTE9TRSwgRlJFQUQsIEZXUklURSkKLS5icgotXChidQlQcm9ncmFtbWluZyAoVEFL RSwgREVGSU5FLCBJRiwgRk9SLCBXSElMRSwgU1dJVENILCBERUNMQVJFLCAuLi4pCi0uYnIKLVwo YnUJSW50ZXJhY3Rpbmcgd2l0aCB0aGUgdXNlciAoRUNITywgQVNLLCAuLi4pCi0uYnIKLVwoYnUJ SW50ZXJhY3Rpbmcgd2l0aCBhIHJlbW90ZSBjb21wdXRlciAoSU5QVVQsIE9VVFBVVCwgLi4uKQot LmJyCi1cKGJ1CUludGVyYWN0aW5nIHdpdGggbG9jYWwgcHJvZ3JhbXMgKFJVTiwgRVhFQywgUFRZ LCAuLi4pCi0uYnIKLVwoYnUJTG9nZ2luZyB0aGluZ3MgKExPRyBTRVNTSU9OLCBMT0cgUEFDS0VU UywgTE9HIERFQlVHLCAuLi4pCi0uUFAKLS5maQotQW5kIG9mIGNvdXJzZSBRVUlUIG9yIEVYSVQg dG8gZ2V0IG91dCBhbmQgSEVMUCB0byBnZXQgaGVscCwgYW5kIGZvcgotcHJvZ3JhbW1lcnM6IGxv b3BzLCBkZWNpc2lvbiBtYWtpbmcsIHZhcmlhYmxlcywgYXJyYXlzLCBhc3NvY2lhdGl2ZSBhcnJh eXMsCi1pbnRlZ2VyIGFuZCBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljLCBtYWNyb3MsIGJ1aWx0 XChoeWluIGFuZCB1c2VyXChoeWRlZmluZWQKLWZ1bmN0aW9ucywgc3RyaW5nIG1hbmlwdWxhdGlv biwgcGF0dGVybiBtYXRjaGluZywgYmxvY2sgc3RydWN0dXJlLCBzY29waW5nLAotcmVjdXJzaW9u LCBhbmQgYWxsIHRoZSByZXN0LiBUbyBnZXQgYSBsaXN0IG9mIGFsbCBDXChoeUtlcm1pdCdzIGNv bW1hbmRzLCB0eXBlCi1hIHF1ZXN0aW9uIG1hcmsgKD8pIGF0IHRoZSBwcm9tcHQuIFRvIGdldCBh IGRlc2NyaXB0aW9uIG9mIGFueSBjb21tYW5kLAotdHlwZSBIRUxQIGZvbGxvd2VkIGJ5IHRoZSBu YW1lIG9mIHRoZSBjb21tYW5kLCBmb3IgZXhhbXBsZToKLS5QUAotICBoZWxwIHNlbmQKLS5QUAot VGhlIGNvbW1hbmQgaW50ZXJydXB0aW9uIGNoYXJhY3RlciBpcyBDdHJsXC1DIChob2xkIGRvd24g dGhlIEN0cmwga2V5IGFuZAotcHJlc3MgdGhlIEMga2V5KS4KLS5QUAotVGhlIGNvbW1hbmQgbGFu Z3VhZ2UgImVzY2FwZSBjaGFyYWN0ZXIiLCB1c2VkIHRvIGludHJvZHVjZSB2YXJpYWJsZSBuYW1l cywKLWZ1bmN0aW9uIGludm9jYXRpb25zLCBhbmQgc28gb24sIGlzIGJhY2tzbGFzaCAoXCkuIElm IHlvdSBuZWVkIHRvIGluY2x1ZGUgYQotbGl0ZXJhbCBiYWNrc2xhc2ggaW4gYSBjb21tYW5kLCB0 eXBlIHR3byBvZiB0aGVtLCBlLmcuOgotLlBQCi0gIGdldCBjOlxlazk1XGVrOTVjdXN0b20uaW5p Ci0uU1MgQ29tbWFuZCBGaWxlcywgTWFjcm9zLCBhbmQgU2NyaXB0cwotQSBmaWxlIGNvbnRhaW5p bmcgS2VybWl0IGNvbW1hbmRzIGlzIGNhbGxlZCBhIEtlcm1pdCBjb21tYW5kIGZpbGUgb3IgS2Vy bWl0Ci1zY3JpcHQuIEl0IGNhbiBiZSBleGVjdXRlZCB3aXRoIEtlcm1pdCdzIFRBS0UgY29tbWFu ZDoKLS5QUAotICAoL2N1cnJlbnQvZGlyKSBDXC1LZXJtaXQ+IHRha2UgY29tbWFuZGZpbGUKLS5Q UAotKHdoZXJlICJjb21tYW5kZmlsZSIgaXMgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgZmlsZSku IFBsZWFzZSBkb24ndCBwaXBlIGEKLWNvbW1hbmQgZmlsZSBpbnRvIEtlcm1pdCdzIHN0YW5kYXJk IGlucHV0ICh3aGljaCBtaWdodCBvciBtaWdodCBub3Qgd29yayk7Ci1pZiB5b3UgaGF2ZSBLZXJt aXQgY29tbWFuZHMgaW4gYSBmaWxlLCB0ZWxsIEtlcm1pdCB0byBUQUtFIHRoZSBmaWxlLgotLlBQ Ci1JbiBVbml4IG9ubHksIGEgS2VybWl0IGNvbW1hbmQgZmlsZSBjYW4gYWxzbyBiZSBleGVjdXRl ZCBkaXJlY3RseSBieQotaW5jbHVkaW5nIGEgImtlcmJhbmciIGxpbmUgYXMgdGhlIGZpcnN0IGxp bmUgb2YgdGhlIGZpbGU6Ci0uUFAKLSAgIyEvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgKwotLlBQCi1U aGF0IGlzLCBhIHRvcCBsaW5lIHRoYXQgc3RhcnRzIHdpdGggIiMhIiwgZm9sbG93ZWQgaW1tZWRp YXRlbHkgYnkgdGhlIGZ1bGwKLXBhdGggb2YgdGhlIEtlcm1pdCBleGVjdXRhYmxlLCBhbmQgdGhl biwgaWYgdGhlIEtlcm1pdCBzY3JpcHQgaXMgdG8gYmUKLWdpdmVuIGFyZ3VtZW50cyBvbiB0aGUg Y29tbWFuZCBsaW5lLCBhIHNwYWNlIGFuZCBhIHBsdXMgc2lnbi4gVGhlIHNjcmlwdAotZmlsZSBt dXN0IGFsc28gaGF2ZSBleGVjdXRlIHBlcm1pc3Npb246Ci0uUFAKLSAgY2htb2QgK3ggY29tbWFu ZGZpbGUKLS5QUAotRXhjZXB0IGZvciB0aGUgIiArIiBwYXJ0LCB0aGlzIGlzIGV4YWN0bHkgdGhl IHNhbWUgYXMgeW91IHdvdWxkIGRvIGZvciBhCi1zaGVsbCBzY3JpcHQsIGEgUGVybCBzY3JpcHQs IGV0Yy4gSGVyZSdzIGEgc2ltcGxlIGJ1dCB1c2VsZXNzIGV4YW1wbGUKLXNjcmlwdCB0aGF0IHJl Z3VyZ2l0YXRlcyBpdHMgYXJndW1lbnRzICh1cCB0byB0aHJlZSBvZiB0aGVtKToKLS5QUAotICAj IS91c3IvbG9jYWwvYmluL2tlcm1pdCArCi0gIGlmIGRlZmluZWQgXGUlMSBlY2hvICJBcmd1bWVu dCAxOiBcZSUxIgotICBpZiBkZWZpbmVkIFxlJTIgZWNobyAiQXJndW1lbnQgMjogXGUlMiIKLSAg aWYgZGVmaW5lZCBcZSUzIGVjaG8gIkFyZ3VtZW50IDM6IFxlJTMiCi0gIGlmIGRlZmluZWQgXGUl NCBlY2hvICJldGMuLi4iCi0gIGV4aXQKLS5QUAotSWYgdGhpcyBmaWxlIGlzIHN0b3JlZCBpbiB5 b3VyIGN1cnJlbnQgZGlyZWN0b3J5IGFzICJjb21tYW5kZmlsZSIsIHRoZW46Ci0uUFAKLSAgLi9j b21tYW5kZmlsZSBvbmUgdHdvIHRocmVlIGZvdXIgZml2ZQotLlBQCi1wcmludHM6Ci0uUFAKLSAg QXJndW1lbnQgMTogb25lCi0gIEFyZ3VtZW50IDI6IHR3bwotICBBcmd1bWVudCAzOiB0aHJlZQot ICBldGMuLi4KLS5QUAotVGhpcyBpbGx1c3RyYXRlcyB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIGEg c3RhbmRhbG9uZSBLZXJtaXQgc2NyaXB0OiB0aGUKLSJrZXJiYW5nIGxpbmUiLCB0aGVuIHNvbWUg Y29tbWFuZHMuIEl0IHNob3VsZCBlbmQgd2l0aCAiZXhpdCIgdW5sZXNzIHlvdQotd2FudCB0aGUg S2VybWl0IHByb21wdCB0byBhcHBlYXIgd2hlbiBpdCBpcyBmaW5pc2hlZC4gXGUlMSBpcyB0aGUg Zmlyc3QKLWFyZ3VtZW50LCBcZSUyIHRoZSBzZWNvbmQsIGFuZCBzbyBvbi4KLS5QUAotWW91IGNh biBhbHNvIGNyZWF0ZSB5b3VyIG93biBjb21tYW5kcyBieSBkZWZpbmluZyBuYW1lZCBtYWNyb3Mg Y29tcG9zZWQgb2YKLW90aGVyIEtlcm1pdCBjb21tYW5kcyAob3IgbWFjcm9zKS4gRm9yIGV4YW1w bGU6Ci0uUFAKLS5uZgotICBkZWZpbmUgbXlkZWxldGUgewotICAgICAgbG9jYWwgdHJhc2gKLSAg ICAgIGFzc2lnbiB0cmFzaCBcZXYoaG9tZSl0cmFzaGNhbi8KLSAgICAgIGlmIG5vdCBkZWZpbmVk IFxlJTEgZW5kIDEgIkRlbGV0ZSB3aGF0PyIKLSAgICAgIGlmIHdpbGQgXGUlMSB7Ci0gICAgICAg ICAgZW5kIDEgIkRlbGV0aW5nIG11bHRpcGxlIGZpbGVzIGlzIHRvbyBzY2FyeSIKLSAgICAgIH0K LSAgICAgIGlmIG5vdCBleGlzdCBcZSUxIGVuZCAxICJJIGNhbid0IGZpbmQgXGUlMSIKLSAgICAg IGlmIG5vdCBkaXJlY3RvcnkgXGVtKHRyYXNoKSB7Ci0gICAgICAgICAgbWtkaXIgXGVtKHRyYXNo KQotICAgICAgICAgIGlmIGZhaWwgZW5kIDEgIk5vIHRyYXNoIGNhbiIKLSAgICAgIH0KLSAgICAg IHJlbmFtZSAvbGlzdCBcZSUxIFxlbSh0cmFzaCkKLSAgfQotICBkZWZpbmUgbXl1bmRlbGV0ZSB7 Ci0gICAgICBsb2NhbCB0cmFzaAotICAgICAgYXNzaWduIHRyYXNoIFxldihob21lKXRyYXNoY2Fu LwotICAgICAgaWYgbm90IGRlZmluZWQgXGUlMSBlbmQgMSAiVW5kZWxldGUgd2hhdD8iCi0gICAg ICBpZiB3aWxkIFxlJTEgewotICAgICAgICAgIGVuZCAxICJVbmRlbGV0aW5nIG11bHRpcGxlIGZp bGVzIGlzIHRvbyBoYXJkIgotICAgICAgfQotICAgICAgaWYgbm90IGRpcmVjdG9yeSBcZW0odHJh c2gpIGVuZCAxICJObyB0cmFzaCBjYW4iCi0gICAgICBpZiBub3QgZXhpc3QgXGVtKHRyYXNoKVxl JTEgewotICAgICAgICAgIGVuZCAxICJJIGNhbid0IGZpbmQgXGUlMSBpbiB0cmFzaCBjYW4iCi0g ICAgICB9Ci0gICAgICByZW5hbWUgL2xpc3QgXGVtKHRyYXNoKVxlJTEgLgotICB9Ci0uUFAKLS5m aQotVGhlc2Ugc2FtcGxlIG1hY3JvcyBhcmUgbm90IGV4YWN0bHkgcHJvZHVjdGlvbiBxdWFsaXR5 ICh0aGV5IGRvbid0IGhhbmRsZQotZmlsZW5hbWVzIHRoYXQgaW5jbHVkZSBwYXRoIHNlZ21lbnRz LCB0aGV5IGRvbid0IGhhbmRsZSBtdWx0aXBsZSBmaWxlcywKLWV0YyksIGJ1dCB5b3UgZ2V0IHRo ZSBpZGVhOiB5b3UgY2FuIHBhc3MgYXJndW1lbnRzIHRvIG1hY3JvcywgYW5kIHRoZXkgY2FuCi1j aGVjayB0aGVtIGFuZCBtYWtlIG90aGVyIGtpbmRzIG9mIGRlY2lzaW9ucy4gSWYgeW91IHB1dCB0 aGUgYWJvdmUgbGluZXMKLWludG8geW91ciBpbml0aWFsaXphdGlvbiBvciBjdXN0b21pemF0aW9u IGZpbGUgKGV4cGxhaW5lZCBiZWxvdyksIHlvdSdsbAotaGF2ZSBNWURFTEVURSBhbmQgTVlVTkRF TEVURSBjb21tYW5kcyBhdmFpbGFibGUgZXZlcnkgdGltZSB5b3Ugc3RhcnQKLUtlcm1pdCwgYXQg bGVhc3QgYXMgbG9uZyBhcyB5b3UgZG9uJ3Qgc3VwcHJlc3MgZXhlY3V0aW9uIG9mIHRoZQotaW5p dGlhbGl6YXRpb24gZmlsZS4gKEV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyOiBNYWtlIHRoZXNlIG1h Y3JvcyBnZW5lcmFsbHkKLXVzZWZ1bDogcmVtb3ZlIGxpbWl0YXRpb25zLCBhZGQgdHJhc2hjYW4g ZGlzcGxheSwgYnJvd3NpbmcsIGVtcHR5aW5nLCBldGMuKQotLlBQCi1LZXJiYW5nIHNjcmlwdHMg ZXhlY3V0ZSB3aXRob3V0IHRoZSBpbml0aWFsaXphdGlvbiBmaWxlLiBUaGlzIHRvIGtlZXAgdGhl bQotcG9ydGFibGUgYW5kIGFsc28gdG8gbWFrZSB0aGVtIHN0YXJ0IGZhc3Rlci4gSWYgeW91IHdh bnQgdG8gd3JpdGUgS2VyYmFuZwotc2NyaXB0cyB0aGF0IGRlcGVuZCBvbiB0aGUgaW5pdGlhbGl6 YXRpb24gZmlsZSwgaW5jbHVkZSB0aGUgY29tbWFuZAotLlBQCi0gIHRha2UgXGV2KGhvbWUpLmtl cm1yYwotLlBQCi1hdCB0aGUgZGVzaXJlZCBzcG90IGluIHRoZSBzY3JpcHQuIEJ5IHRoZSB3YXks IFxldih4eHgpIGlzIGEgYnVpbHRcKGh5aW4KLXZhcmlhYmxlICh4eHggaXMgdGhlIHZhcmlhYmxl IG5hbWUsICJob21lIiBpbiB0aGlzIGNhc2UpLiBUbyBzZWUgd2hhdAotYnVpbHRcKGh5aW4gdmFy aWFibGVzIGFyZSBhdmFpbGFibGUsIHR5cGUgInNob3cgdmFyaWFibGVzIiBhdCB0aGUgQ1woaHlL ZXJtaXQKLXByb21wdC4gVG8gc2VlIHdoYXQgZWxzZSB5b3UgY2FuIHNob3csIHR5cGUgInNob3cg PyIuIFxlbSh4eHgpIGlzIGEgdXNlcgotZGVmaW5lZCB2YXJpYWJsZSAoc3RyaWN0bHkgc3BlYWtp bmcsIGl0IGlzIGEgbWFjcm8gdXNlZCBhcyBhIHZhcmlhYmxlKS4KLS5TUyBDb21tYW5kIExpc3QK LUNcKGh5S2VybWl0IGhhcyBtb3JlIHRoYW4gMjAwIHRvcFwoaHlsZXZlbCBjb21tYW5kcywgYW5k IHNvbWUgb2YgdGhlc2UsIHN1Y2ggYXMKLVNFVCwgYnJhbmNoIG9mZiBpbnRvIGh1bmRyZWRzIG9m IHN1YmNvbW1hbmRzIG9mIHRoZWlyIG93biwgc28gaXQncyBub3QKLXByYWN0aWNhbCB0byBkZXNj cmliZSB0aGVtIGFsbCBoZXJlLiBJbnN0ZWFkLCBoZXJlJ3MgYSBjb25jaXNlIGxpc3Qgb2YgdGhl Ci1tb3N0IGNvbW1vbmx5IHVzZWQgdG9wXChoeWxldmVsIGNvbW1hbmRzLCBncm91cGVkIGJ5IGNh dGVnb3J5LiBUbyBsZWFybiBhYm91dAotZWFjaCBjb21tYW5kLCB0eXBlICJoZWxwIiBmb2xsb3dl ZCBieSB0aGUgY29tbWFuZCBuYW1lLCBlLmcuICJoZWxwIHNldCIuCi1UZXJtcyBzdWNoIGFzIENv bW1hbmQgc3RhdGUgYW5kIENvbm5lY3Qgc3RhdGUgYXJlIGV4cGxhaW5lZCBpbiBzdWJzZXF1ZW50 Ci1zZWN0aW9ucy4KLS5QUAotT3B0aW9uYWwgZmllbGRzIGFyZSBzaG93biBpbiBbIGJyYWNrZXRz IF0uICAiZmlsZW5hbWUiIG1lYW5zIHRoZQotbmFtZSBvZiBhIHNpbmdsZSBmaWxlLiBmaWxlc3Bl YyBtZWFucyBhIGZpbGUgc3BlY2lmaWNhdGlvbiB0aGF0IGlzIGFsbG93ZWQKLXRvIGNvbnRhaW4g d2lsZGNhcmQgY2hhcmFjdGVycyBsaWtlICcqJyB0byBtYXRjaCBncm91cHMgb2YgZmlsZXMuIG9w dGlvbnMKLWFyZSAob3B0aW9uYWwpIHN3aXRjaGVzIGxpa2UgL1BBR0UsIC9OT1BBR0UsIC9RVUlF VCwgZXRjLCBsaXN0ZWQgaW4gdGhlCi1IRUxQIHRleHQgZm9yIGVhY2ggY29tbWFuZC4gRXhhbXBs ZToKLS5QUAotLm5mCi0gIHNlbmQgL3JlY3Vyc2l2ZSAvbGFyZ2VyOjEwMDAwIC9hZnRlcjpcLTF3 ZWVrIC9leGNlcHQ6Ki50eHQgKgotLmZpCi0uUFAKLXdoaWNoIGNhbiBiZSByZWFkIGFzICJzZW5k IGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgYW5kIGFsbCB0aGUgb25lcwotdW5kZXJu ZWF0aCBpdCB0aGF0IGFyZSBsYXJnZXIgdGhhbiAxMDAwMCBieXRlcywgbm8gbW9yZSB0aGFuIG9u ZSB3ZWVrIG9sZCwKLWFuZCB3aG9zZSBuYW1lcyBkb24ndCBlbmQgd2l0aCAiLnR4dCIuCi0uU1MK LUJhc2ljIENvbW1hbmRzCi0uUlMKLS5UUAotSEVMUAotUmVxdWVzdHMgdG9wXChoeWxldmVsIGhl bHAuCi0uVFAKLUhFTFAgY29tbWFuZAotUmVxdWVzdHMgaGVscCBhYm91dCB0aGUgZ2l2ZW4gY29t bWFuZC4KLS5UUAotSU5UUk9EVUNUSU9OCi1SZXF1ZXN0cyBhIGJyaWVmIGludHJvZHVjdGlvbiB0 byBDXChoeUtlcm1pdC4KLS5UUAotTElDRU5TRQotRGlzcGxheXMgdGhlIENcKGh5S2VybWl0IHNv ZnR3YXJlIGNvcHlyaWdodCBhbmQgbGljZW5zZS4KLS5UUAotVkVSU0lPTgotRGlzcGxheXMgQ1wo aHlLZXJtaXQncyB2ZXJzaW9uIG51bWJlci4KLS5UUAotRVhJVCBbIG51bWJlciBdCi1FeGl0cyBm cm9tIEtlcm1pdCB3aXRoIHRoZSBnaXZlbgotc3RhdHVzIGNvZGUuIFN5bm9ueW1zOiBRVUlULCBF LCBRLgotLlRQCi1UQUtFIGZpbGVuYW1lIFsgcGFyYW1ldGVycy4uLiBdCi1FeGVjdXRlcyBjb21t YW5kcyBmcm9tIHRoZSBnaXZlbgotLlRQCi1MT0cgaXRlbSBbIGZpbGVuYW1lIF0KLUtlZXBzIGEg bG9nIG9mIHRoZSBnaXZlbiBpdGVtIGluIHRoZSBnaXZlbiBmaWxlLgotLlRQCi1bIERPIF0gbWFj cm8gWyBwYXJhbWV0ZXJzLi4uIF0KLUV4ZWN1dGVzIGNvbW1hbmRzIGZyb20gdGhlIGdpdmVuIG1h Y3JvLgotLlRQCi1TRVQgcGFyYW1ldGVyIHZhbHVlCi1TZXRzIHRoZSBnaXZlbiBwYXJhbWV0ZXIg dG8gdGhlIGdpdmVuIHZhbHVlLgotLlRQCi1TSE9XIGNhdGVnb3J5Ci1TaG93cyBzZXR0aW5ncyBp biBhIGdpdmVuIGNhdGVnb3J5LgotLlRQCi1TVEFUVVMKLVRlbGxzIHdoZXRoZXIgcHJldmlvdXMg Y29tbWFuZCBzdWNjZWVkZWQgb3IgZmFpbGVkLgotLlRQCi1EQVRFIFsgZGF0ZVwoaHlhbmQvb3Jc KGh5dGltZSBdCi1TaG93cyBjdXJyZW50IGRhdGVcKGh5dGltZSBvciBpbnRlcnByZXRzIGdpdmVu IGRhdGVcKGh5dGltZS4KLS5UUAotUlVOIFsgZXh0ZXJuXChoeWNvbW1hbmQgWyBwYXJhbWV0ZXJz Li4uIF0gICAgICAgICAgICAgICAgIAotUnVucyB0aGUgZ2l2ZW4gZXh0ZXJuYWwgY29tbWFuZC4g U3lub255bTogIS4KLS5UUAotRVhFQyBbIGV4dGVyblwoaHljb21tYW5kIFsgcGFyYW1zLi4uIF0K LUtlcm1pdCBvdmVybGF5cyBpdHNlbGYgd2l0aCB0aGUgZ2l2ZW4gY29tbWFuZC4KLS5UUAotU1VT UEVORAotU3RvcHMgS2VybWl0IGFuZCBwdXRzIGl0IGluIHRoZSBiYWNrZ3JvdW5kLiBTeW5vbnlt OiBaLgotLlJFCi0uU1MKLUxvY2FsIEZpbGUgTWFuYWdlbWVudAotLlJTCi0uVFAKLVRZUEUgWyBv cHRpb25zIF0gZmlsZW5hbWUKLURpc3BsYXlzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gZmls ZS4KLS5UUAotTU9SRSBbIG9wdGlvbnMgXSBmaWxlbmFtZSAgICAgCi1FcXVpdmFsZW50IHRvIFRZ UEUgL1BBR0UgKHBhdXNlIGFmdGVyIGVhY2ggc2NyZWVuZnVsKS4KLS5UUAotQ0FUIFsgb3B0aW9u cyBdIGZpbGVuYW1lICAgICAgCi1FcXVpdmFsZW50IHRvIFRZUEUgL05PUEFHRS4KLS5UUAotSEVB RCBbIG9wdGlvbnMgXSBmaWxlbmFtZSAgICAgCi1EaXNwbGF5cyB0aGUgZmlyc3QgZmV3IGxpbmVz IG9mIGEgZ2l2ZW4gZmlsZS4KLS5UUAotVEFJTCBbIG9wdGlvbnMgXSBmaWxlbmFtZSAgICAgCi1E aXNwbGF5cyB0aGUgbGFzdCBmZXcgbGluZXMgb2YgYSBnaXZlbiBmaWxlLgotLlRQCi1HUkVQIFsg b3B0aW9ucyBdIHBhdHRlcm4gZmlsZXNwZWMKLURpc3BsYXlzIGxpbmVzIGZyb20gZmlsZXMgdGhh dCBtYXRjaAotdGhlIHBhdHRlcm4uIFN5bm9ueW06IEZJTkQuCi0uVFAKLURJUkVDVE9SWSBbIG9w dGlvbnMgXSBbZmlsZXNwZWMgXQotTGlzdHMgZmlsZXMgKGJ1aWx0XChoeWluLCBtYW55IG9wdGlv bnMpLgotLlRQCi1MUyBbIG9wdGlvbnMgXSBbIGZpbGVzcGVjIF0gICAKLUxpc3RzIGZpbGVzIChy dW5zIGV4dGVybmFsICJscyIgY29tbWFuZCkuCi0uVFAKLURFTEVURSBbIG9wdGlvbnMgXSBbIGZp bGVzcGVjIF0KLURlbGV0ZXMgZmlsZXMuIFN5bm9ueW06IFJNLgotLlRQCi1QVVJHRSBbIG9wdGlv bnMgXSBbIGZpbGVzcGVjIF0KLVJlbW92ZXMgYmFja3VwICgqLn5ufikgZmlsZXMuCi0uVFAKLUNP UFkgWyBvcHRpb25zIF0gWyBmaWxlc3BlY3MuLi4gXQotQ29waWVzIGZpbGVzLiBTeW5vbnltOiBD UC4KLS5UUAotUkVOQU1FIFsgb3B0aW9ucyBdIFsgZmlsZXNwZWNzLi4uIF0KLVJlbmFtZXMgZmls ZXMuIFN5bm9ueW06IE1WLgotLlRQCi1DSE1PRCBbIG9wdGlvbnMgXSBbIGZpbGVzcGVjcy4uLiBd Ci1DaGFuZ2VzIHBlcm1pc3Npb25zIG9mIGZpbGVzLgotLlRQCi1UUkFOU0xBVEUgZmlsZW5hbWUg Y2hhcnNldHMgWyBmaWxlbmFtZSBdCi1Db252ZXJ0cyBmaWxlJ3MgY2hhcmFjdGVyIHNldC4gU3lu b255bTogWExBVEUuCi0uVFAKLUNECi1DaGFuZ2VzIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgdG8g eW91ciBob21lIGRpcmVjdG9yeS4KLS5UUAotQ0QgZGlyZWN0b3J5Ci1DaGFuZ2VzIHlvdXIgd29y a2luZyBkaXJlY3RvcnkgdG8gdGhlIG9uZSBnaXZlbi4KLS5UUAotQ0RVUAotQ2hhbmdlcyB5b3Vy IHdvcmtpbmcgZGlyZWN0b3J5IG9uZSBsZXZlbCB1cC4KLS5UUAotUFdECi1EaXNwbGF5cyB5b3Vy IHdvcmtpbmcgZGlyZWN0b3J5LgotLlRQCi1CQUNLCi1SZXR1cm5zIHRvIHlvdXIgcHJldmlvdXMg d29ya2luZyBkaXJlY3RvcnkuCi0uVFAKLU1LRElSIFsgZGlyZWN0b3J5IF0KLUNyZWF0ZXMgYSBk aXJlY3RvcnkuCi0uVFAKLVJNRElSIFsgZGlyZWN0b3J5IF0KLVJlbW92ZXMgYSBkaXJlY3Rvcnku Ci0uUkUKLS5TUwotTWFraW5nIENvbm5lY3Rpb25zCi0uUlMKLS5UUAotU0VUIExJTkUgWyBvcHRp b25zIF0gZGV2aWNlbmFtZSAgICAgICAgICAgICAgICAgICAgICAKLU9wZW5zIHRoZSBuYW1lZCBz ZXJpYWwgcG9ydC4gU3lub255bTogU0VUIFBPUlQuCi0uVFAKLU9QRU4gTElORSBbIG9wdGlvbnMg XSBkZXZpY2VuYW1lCi1TYW1lIGFzIFNFVCBMSU5FLiBTeW5vbnltOiBPUEVOIFBPUlQuCi0uVFAK LVNFVCBNT0RFTSBUWVBFIFsgbmFtZSBdCi1UZWxscyBLZXJtaXQgd2hhdCBraW5kIG9mIG1vZGVt IGlzIG9uIHRoZSBwb3J0LgotLlRQCi1ESUFMIFsgbnVtYmVyIF0KLVRlbGxzIEtlcm1pdCB0byBk aWFsIHRoZSBnaXZlbiBwaG9uZSBudW1iZXIgd2l0aCB0aGUgbW9kZW0uCi0uVFAKLVJFRElBTAot UmVkaWFscyB0aGUgbW9zdCByZWNlbnRseSBkaWFsZWQgcGhvbmUgbnVtYmVyLgotLlRQCi1BTlNX RVIKLVdhaXRzIGZvciBhbmQgYW5zd2VycyBhbiBpbmNvbWluZyBjYWxsIG9uIHRoZSBtb2RlbS4K LS5UUAotQVVUSEVOVElDQVRFIFsgcGFyYW1ldGVycy4uLiBdCi1QZXJmb3JtcyBzZWN1cmUgYXV0 aGVudGljYXRpb24gb24gYSBUQ1AvSVAgY29ubmVjdGlvbi4KLS5UUAotU0VUIE5FVFdPUksgVFlQ RSB7IFRDUC9JUCwgWC4yNSwgLi4uIH0KLVNlbGVjdHMgbmV0d29yayB0eXBlIGZvciBzdWJzZXF1 ZW50IFNFVCBIT1NUIGNvbW1hbmRzLgotLlRQCi1TRVQgSE9TVCBbIG9wdGlvbnMgXSBob3N0IFsg cG9ydCBdICAgICAgICAgICAgICAgICAgICAgICAgICAKLU9wZW5zIGEgbmV0d29yayBjb25uZWN0 aW9uIHRvIHRoZSBnaXZlbiBob3N0IGFuZCBwb3J0LgotLlRQCi1TRVQgSE9TVCAqIHBvcnQKLVdh aXRzIGZvciBhbiBpbmNvbWluZyBUQ1AvSVAgY29ubmVjdGlvbiBvbiB0aGUgZ2l2ZW4gcG9ydC4K LS5UUAotVEVMTkVUIFsgb3B0aW9ucyBdIGhvc3QKLU9wZW5zIGEgVGVsbmV0IGNvbm5lY3Rpb24g dG8gdGhlIGhvc3QgYW5kIGVudGVycyBDb25uZWN0IHN0YXRlLgotLlRQCi1STE9HSU4gWyBvcHRp b25zIF0gaG9zdAotT3BlbnMgYW4gUmxvZ2luIGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgYW5kIGVu dGVycyBDb25uZWN0IHN0YXRlLgotLlRQCi1JS1NEIFsgb3B0aW9ucyBdIGhvc3QKLU9wZW5zIGEg Y29ubmVjdGlvbiB0byBhbiBJbnRlcm5ldCBLZXJtaXQgU2VydmljZS4KLS5UUAotU1NIIFsgb3B0 aW9ucyBdIGhvc3QKLU9wZW5zIGFuIFNTSCBjb25uZWN0aW9uIHRvIHRoZSBob3N0IGFuZCBlbnRl cnMgQ29ubmVjdCBzdGF0ZS4KLS5UUAotRlRQIE9QRU4gaG9zdCBbIG9wdGlvbnMgXQotT3BlbnMg YW4gRlRQIGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QuCi0uVFAKLUhUVFAgWyBvcHRpb25zIF0gT1BF TiBob3N0Ci1PcGVucyBhbiBIVFRQIGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QuCi0uVFAKLVBUWSBl eHRlcm5hbFwoaHljb21tYW5kCi1SdW5zIHRoZSBjb21tYW5kIG9uIGEgcHNldWRvdGVybWluYWwg YXMgaWYgaXQgd2VyZSBhIGNvbm5lY3Rpb24uCi0uVFAKLVBJUEUgZXh0ZXJuYWxcKGh5Y29tbWFu ZAotUnVucyB0aGUgY29tbWFuZCB0aHJvdWdoIGEgcGlwZSBhcyBpZiBpdCB3ZXJlIGEgY29ubmVj dGlvbi4KLS5SRQotLlNTCi1Vc2luZyBDb25uZWN0aW9ucwotLlJTCi0uVFAKLUNPTk5FQ1QgWyBv cHRpb25zIF0KLUVudGVycyBDb25uZWN0ICh0ZXJtaW5hbCkgc3RhdGUuICBTeW5vbnltOiBDLgot LlRQCi1SRURJUkVDVCBjb21tYW5kCi1SZWRpcmVjdHMgdGhlIGdpdmVuIGV4dGVybmFsIGNvbW1h bmQgb3ZlciB0aGUgY29ubmVjdGlvbi4KLS5UUAotVEVMT1BUIGNvbW1hbmQKLVNlbmRzIGEgVGVs bmV0IHByb3RvY29sIGNvbW1hbmQgKFRlbG5ldCBjb25uZWN0aW9ucyBvbmx5KS4KLS5UUAotQ3Ry bFwtXGVDCi0iRXNjYXBlcyBiYWNrIiBmcm9tIENvbm5lY3Qgc3RhdGUgdG8gQ29tbWFuZCBzdGF0 ZS4KLS5UUAotQ3RybFwtXGVCCi0oSW4gQ29ubmVjdCBzdGF0ZSkgU2VuZHMgYSBCUkVBSyBzaWdu YWwgKHNlcmlhbCBvciBUZWxuZXQpLgotLlRQCi1DdHJsXC1cZSEKLShJbiBDb25uZWN0IHN0YXRl KSBFbnRlcnMgaW5mZXJpb3Igc2hlbGw7ICJleGl0IiB0byByZXR1cm4uCi0uVFAKLUN0cmxcLVxl PwotKEluIENvbm5lY3Qgc3RhdGUpIFNob3dzIGEgbWVudSBvZiBvdGhlciBlc2NhcGVcKGh5bGV2 ZWwgb3B0aW9ucy4KLS5UUAotQ3RybFwtXGVDdHJsXC1cZQotKEluIENvbm5lY3Qgc3RhdGUpIFR5 cGUgdHdvCi1DdHJsXC1CYWNrc2xhc2hlcyB0byBzZW5kIG9uZSBvZiB0aGVtLgotLlRQCi1TRVQg RVNDQVBFIFsgY2hhcmFjdGVyIF0KLUNoYW5nZXMgS2VybWl0J3MgQ29ubmVjdFwoaHlzdGF0ZSBl c2NhcGUgY2hhcmFjdGVyLgotLlJFCi0uU1MKLUNsb3NpbmcgQ29ubmVjdGlvbnMKLS5SUwotLlRQ Ci1IQU5HVVAKLUhhbmdzIHVwIHRoZSBjdXJyZW50bHkgb3Blbgotc2VyaWFsXChoeXBvcnQgb3Ig bmV0d29yayBjb25uZWN0aW9uLgotLlRQCi1DTE9TRQotQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3Bl bgotc2VyaWFsXChoeXBvcnQgb3IgbmV0d29yayBjb25uZWN0aW9uLgotLlRQCi1TRVQgTElORSAo d2l0aCBubyBkZXZpY2VuYW1lKQotQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3Blbgotc2VyaWFsXCho eXBvcnQgb3IgbmV0d29yayBjb25uZWN0aW9uLgotLlRQCi1TRVQgSE9TVCAod2l0aCBubyBob3N0 bmFtZSkKLUNsb3NlcyB0aGUgY3VycmVudGx5IG9wZW4gc2VyaWFsXChoeXBvcnQgb3IgbmV0d29y ayBjb25uZWN0aW9uLgotLlRQCi1GVFAgQ0xPU0UKLUNsb3NlcyB0aGUgY3VycmVudGx5IG9wZW4g RlRQIGNvbm5lY3Rpb24uCi0uVFAKLUhUVFAgQ0xPU0UKLUNsb3NlcyB0aGUgY3VycmVudGx5IG9w ZW4gSFRUUCBjb25uZWN0aW9uLgotLlRQCi1FWElUIAotQWxzbyBjbG9zZXMgYWxsIGNvbm5lY3Rp b25zLiBTeW5vbnltOiBRVUlULgotLlRQCi1TRVQgRVhJVCBXQVJOSU5HIE9GRgotU3VwcHJlc3Nl cyB3YXJuaW5nIGFib3V0IG9wZW4gY29ubmVjdGlvbnMgb24gZXhpdCBvciBjbG9zZS4KLS5SRQot LlNTCi1GaWxlIFRyYW5zZmVyCi0uUlMKLS5UUAotU0VORCBbIG9wdGlvbnMgXSBmaWxlbmFtZSBb IGFzXChoeW5hbWUgXQotU2VuZHMgdGhlIGdpdmVuIGZpbGUuIFN5bm9ueW06IFMuCi0uVFAKLVNF TkQgWyBvcHRpb25zIF0gZmlsZXNwZWMKLVNlbmRzIGFsbCBmaWxlcyB0aGF0IG1hdGNoLgotLlRQ Ci1SRVNFTkQgWyBvcHRpb25zIF0gZmlsZXNwZWMKLVJlc3VtZXMgYW4gaW50ZXJydXB0ZWQgU0VO RCBmcm9tIHRoZSBwb2ludCBvZiBmYWlsdXJlLgotLlRQCi1SRUNFSVZFIFsgb3B0aW9ucyBdIFsg YXNcKGh5bmFtZSBdICAgICAgICAgICAgICAgICAgICAKLVdhaXRzIHBhc3NpdmVseSBmb3IgZmls ZXMgdG8gYXJyaXZlLiBTeW5vbnltOiBSLgotLlRQCi1MT0cgVFJBTlNBQ1RJT05TIFsgZmlsZW5h bWUgXQotS2VlcHMgYSByZWNvcmQgb2YgZmlsZSB0cmFuc2ZlcnMuCi0uVFAKLUZBU1QKLVVzZSBm YXN0IGZpbGVcKGh5dHJhbnNmZXIgc2V0dGluZ3MgKGRlZmF1bHQpLgotLlRQCi1DQVVUSU9VUwot VXNlIGNhdXRpb3VzIGFuZCBsZXNzIGZhc3QgZmlsZVwoaHl0cmFuc2ZlciBzZXR0aW5ncy4KLS5U UAotUk9CVVNUCi1Vc2UgdWx0cmFcKGh5Y29uc2VydmF0aXZlIGFuZCBzbG93IGZpbGVcKGh5dHJh bnNmZXIgc2V0dGluZ3MuCi0uVFAKLVNUQVRJU1RJQ1MgWyBvcHRpb25zIF0gCi1HaXZlcyBzdGF0 aXN0aWNzIGFib3V0IHRoZSBtb3N0IHJlY2VudCBmaWxlIHRyYW5zZmVyLgotLlRQCi1XSEVSRQot QWZ0ZXIgdHJhbnNmZXI6ICJXaGVyZSBkaWQgbXkgZmlsZXMgZ28/Ii4KLS5UUAotVFJBTlNNSVQg WyBvcHRpb25zIF0gW29maWxlbmFtZSBdCi1TZW5kcyBmaWxlIHdpdGhvdXQgcHJvdG9jb2wuIFN5 bm9ueW06IFhNSVQuCi0uVFAKLUxPRyBTRVNTSU9OIFsgZmlsZW5hbWUgXQotQ2FwdHVyZXMgcmVt b3RlIHRleHQgb3IgZmlsZXMgd2l0aG91dCBwcm90b2NvbC4KLS5UUAotU0VUIFBST1RPQ09MIFsg bmFtZS4uLiBdCi1UZWxscyBLZXJtaXQgdG8gdXNlIGFuIGV4dGVybmFsIGZpbGVcKGh5dHJhbnNm ZXIgcHJvdG9jb2wuCi0uVFAKLUZUUCB7IFBVVCwgTVBVVCwgR0VULCBNR0VULCAuLi4gfQotRlRQ IGNsaWVudCBjb21tYW5kcy4KLS5UUAotSFRUUCB7IFBVVCwgR0VULCBIRUFELCBQT1NULCAuLi4g fQotSFRUUCBjbGllbnQgY29tbWFuZHMuCi0uUkUKLS5TUwotS2VybWl0IFNlcnZlcgotLlJTCi0u VFAKLUVOQUJMRSwgRElTQUJMRQotQ29udHJvbHMgd2hpY2ggc2VydmVyIGZlYXR1cmVzIGNhbiBi ZSB1c2VkIGJ5IGNsaWVudHMuCi0uVFAKLVNFVCBTRVJWRVIKLVNldHMgcGFyYW1ldGVycyBwcmlv ciB0byBlbnRlcmluZyBTZXJ2ZXIgc3RhdGUuCi0uVFAKLVNFUlZFUgotRW50ZXJzIFNlcnZlciBz dGF0ZS4KLS5SRQotLlNTCi1DbGllbnQgb2YgS2VybWl0IG9yIEZUUCBTZXJ2ZXIKLS5SUwotLlRQ Ci1bIFJFTU9URSBdIExPR0lOIFsgdXNlciBwYXNzd29yZCBdICAgICAgICAgCi1Mb2dzIGluIHRv IGEgS2VybWl0IHNlcnZlciBvciBJS1NEIHRoYXQgcmVxdWlyZXMgaXQuCi0uVFAKLVsgUkVNT1RF IF0gTE9HT1VUCi1Mb2dzIG91dCBmcm9tIGEgS2VybWl0IHNlcnZlciBvciBJS1NELgotLlRQCi1T RU5EIFsgb3B0aW9ucyBdIGZpbGVuYW1lIFsgYXNcKGh5bmFtZSBdICAgICAgICAgICAgICAgICAg IAotU2VuZHMgdGhlIGdpdmVuIGZpbGUgdG8gdGhlIHNlcnZlci4gU3lub255bXM6IFMsIFBVVC4K LS5UUAotU0VORCBbIG9wdGlvbnMgXSBmaWxlc3BlYwotU2VuZHMgYWxsIGZpbGVzIHRoYXQgbWF0 Y2guCi0uVFAKLVJFU0VORCBbIG9wdGlvbnMgXSBmaWxlc3BlYwotUmVzdW1lcyBhbiBpbnRlcnJ1 cHRlZCBTRU5EIGZyb20gdGhlIHBvaW50IG9mIGZhaWx1cmUuCi0uVFAKLUdFVCBbIG9wdGlvbnMg XSByZW1vdGVcKGh5ZmlsZXNwZWMKLUFza3MgdGhlIHNlcnZlciB0byBzZW5kIHRoZSBnaXZlbiBm aWxlcy4gU3lub255bTogRy4KLS5UUAotUkVHRVQgWyBvcHRpb25zIF0gcmVtb3RlXChoeWZpbGVz cGVjCi1SZXN1bWVzIGFuIGludGVycnVwdGVkIEdFVCBmcm9tIHRoZSBwb2ludCBvZiBmYWlsdXJl LgotLlRQCi1SRU1PVEUgQ0QgWyBkaXJlY3RvcnkgXQotQXNrcyBzZXJ2ZXIgdG8gY2hhbmdlIGl0 cyB3b3JraW5nCi1kaXJlY3RvcnkuIFN5bm9ueW06IFJDRC4KLS5UUAotUkVNT1RFIFBXRCBbIGRp cmVjdG9yeSBdCi1Bc2tzIHNlcnZlciB0byBkaXNwbGF5IGl0cyB3b3JraW5nIGRpcmVjdG9yeS4g U3lub255bTogUlBXRC4KLS5UUAotUkVNT1RFIERJUkVDVE9SWSBbIGZpbGVzcGVjLi4uIF0KLUFz a3Mgc2VydmVyIHRvIHNlbmQgYSBkaXJlY3RvcnkgbGlzdGluZy4gU3lub255bTogUkRJUi4KLS5U UAotUkVNT1RFIERFTEVURSBbIGZpbGVzcGVjLi4uIF0KLUFza3Mgc2VydmVyIHRvIGRlbGV0ZSBm aWxlcy4gU3lub255bTogUkRFTC4KLS5UUAotUkVNT1RFIFsgY29tbWFuZC4uLiBdCi0oTWFueSBv dGhlciBjb21tYW5kczogInJlbW90ZSA/IiBmb3IgYSBsaXN0KS4KLS5UUAotTUFJTCBbIG9wdGlv bnMgXSBmaWxlc3BlYwotU2VuZHMgZmlsZShzKSB0byBiZSBkZWxpdmVyZWQgYXMgZVwoaHltYWls IChLZXJtaXQgb25seSkuCi0uVFAKLUZJTklTSAotQXNrcyB0aGUgc2VydmVyIHRvIGV4aXQgc2Vy dmVyIHN0YXRlIChLZXJtaXQgb25seSkuCi0uVFAKLUJZRQotQXNrcyB0aGUgc2VydmVyIHRvIGxv ZyBvdXQgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uLgotLlJFCi0uU1MKLVNjcmlwdCBQcm9ncmFt bWluZwotLlBQCi0uUlMKLURFRklORSwgREVDTEFSRSwgVU5ERUZJTkUsIFVOREVDTEFSRSwgQVNT SUdOLCBFVkFMVUFURSwgU0VYUFJFU1NJT04sCi1BUlJBWSwgU09SVCwgSU5QVVQsIE9VVFBVVCwg SUYsIEZPUiwgV0hJTEUsIFNXSVRDSCwgR09UTywgRUNITywgQVNLLAotR0VUQywgR0VUT0ssIEFT U0VSVCwgV0FJVCwgU0xFRVAsIEZPUEVOLCBGUkVBRCwgRldSSVRFLCBGQ0xPU0UsIFNUT1AsCi1F TkQsIFJFVFVSTiwgTEVBUk4sIFNISUZULCBUUkFDRSwgVk9JRCwgSU5DUkVNRU5ULCBERUNSRU1F TlQsIC4uLiBGb3IKLXRoZXNlIGFuZCBtYW55IG1vcmUgeW91J2xsIG5lZWQgdG8gY29uc3VsdCB0 aGUgbWFudWFsIGFuZCBzdXBwbGVtZW50cywKLWFuZC9vciB2aXNpdCB0aGUgS2VybWl0IFNjcmlw dCBMaWJyYXJ5LCB3aGljaCBhbHNvIGluY2x1ZGVzIGEgYnJpZWYKLXR1dG9yaWFsLiBIaW50OiBI RUxQIExFQVJOIHRvIGZpbmQgb3V0IGhvdyB0byBnZXQgS2VybWl0IHRvIHdyaXRlCi1zaW1wbGUg c2NyaXB0cyBmb3IgeW91LgotLlJFCi0uUFAKLU1hbnkgb2YgS2VybWl0J3MgY29tbWFuZHMgaGF2 ZSBzeW5vbnltcywgdmFyaWFudHMsIHJlbGF0aXZlcywgYW5kIHNvIG9uLgotRm9yIGV4YW1wbGUs IE1TRU5EIGlzIGEgdmVyc2lvbiBvZiBTRU5EIHRoYXQgYWNjZXB0cyBhIGxpc3Qgb2YgZmlsZQot c3BlY2lmaWNhdGlvbnMgdG8gYmUgc2VudCwgcmF0aGVyIHRoYW4ganVzdCBvbmUgZmlsZSBzcGVj aWZpY2F0aW9uLCBhbmQKLU1QVVQgaXMgYSBzeW5vbnltIG9mIE1TRU5ELiBNT1ZFIG1lYW5zIHRv IFNFTkQgYW5kIHRoZW4gREVMRVRFIHRoZSBzb3VyY2UKLWZpbGUgaWYgc3VjY2Vzc2Z1bC4gTU1P VkUgaXMgbGlrZSBNT1ZFLCBidXQgYWNjZXB0cyBhIGxpc3Qgb2YgZmlsZXNwZWNzLAotYW5kIHNv IG9uLiBUaGVzZSBhcmUgZGVzY3JpYmVkIGluIHRoZSBmdWxsIGRvY3VtZW50YXRpb24uCi0uUFAK LVVzZSBxdWVzdGlvbiBtYXJrIHRvIGZlZWwgeW91ciB3YXkgdGhyb3VnaCBhbiB1bmZhbWlsaWFy IGNvbW1hbmQsIGFzIGluCi10aGlzIGV4YW1wbGU6Ci0uUFAKLS5uZgotICBDXC1LZXJtaXQ+IHJl bW90ZSA/IE9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgYXNzaWduICAgICBkaXJlY3RvcnkgIGtl cm1pdCAgICAgcHJpbnQgICAgICBybWRpcgotICAgY2QgICAgICAgICBleGl0ICAgICAgIGxvZ2lu ICAgICAgcHdkICAgICAgICBzZXQKLSAgIGNvcHkgICAgICAgaGVscCAgICAgICBsb2dvdXQgICAg IHF1ZXJ5ICAgICAgc3BhY2UKLSAgIGRlbGV0ZSAgICAgaG9zdCAgICAgICBta2RpciAgICAgIHJl bmFtZSAgICAgdHlwZQotICBDXC1LZXJtaXQ+IHJlbW90ZSBzZXQgPyBPbmUgb2YgdGhlIGZvbGxv d2luZzoKLSAgIGF0dHJpYnV0ZXMgICBmaWxlICAgICAgICAgcmV0cnkgICAgICAgIHRyYW5zZmVy Ci0gICBibG9ja1wtY2hlY2sgIHJlY2VpdmUgICAgICBzZXJ2ZXIgICAgICAgd2luZG93Ci0gIENc LUtlcm1pdD4gcmVtb3RlIHNldCBmaWxlID8gT25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICBjaGFy YWN0ZXJcLXNldCAgaW5jb21wbGV0ZSAgICAgcmVjb3JkXC1sZW5ndGgKLSAgIGNvbGxpc2lvbiAg ICAgIG5hbWVzICAgICAgICAgIHR5cGUKLSAgQ1wtS2VybWl0PiByZW1vdGUgc2V0IGZpbGUgbmFt ZXMgPyBPbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAgIGNvbnZlcnRlZCAgbGl0ZXJhbAotICBDXC1L ZXJtaXQ+IHJlbW90ZSBzZXQgZmlsZSBuYW1lcyBsaXRlcmFsCi0gIENcLUtlcm1pdD4KLS5QUAot LmZpCi1UaGlzIGlzIGNhbGxlZCBtZW51IG9uIGRlbWFuZDogeW91IGdldCBhIG1lbnUgd2hlbiB5 b3Ugd2FudCBvbmUsIGJ1dCBtZW51cwotYXJlIG5vdCBmb3JjZWQgb24geW91IGV2ZW4gd2hlbiBr bm93IHdoYXQgeW91J3JlIGRvaW5nLiBOb3RlIHRoYXQgeW91IGNhbgotYWxzbyBhYmJyZXZpYXRl IG1vc3Qga2V5d29yZHMsIGFuZCB5b3UgY2FuIGNvbXBsZXRlIHRoZW0gd2l0aCB0aGUgVGFiIG9y Ci1Fc2Mga2V5LiBBbHNvIG5vdGUgdGhhdCA/IHdvcmtzIGZvciBmaWxlbmFtZXMgdG9vLCBhbmQg dGhhdCB5b3UgY2FuIHVzZSBpdAotaW4gdGhlIG1pZGRsZSBvZiBhIGtleXdvcmQgb3IgZmlsZW5h bWUsIG5vdCBqdXN0IGF0IHRoZSBiZWdpbm5pbmcuIEZvcgotZXhhbXBsZSwgInNlbmQgeD8iIGxp c3RzIGFsbCB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdob3NlIG5hbWVzCi1z dGFydCB3aXRoICd4Jy4KLS5TSCBJTklUSUFMSVpBVElPTiBGSUxFCi1JbiBpdHMgZGVmYXVsdCBj b25maWd1cmF0aW9uLCBDXChoeUtlcm1pdCBleGVjdXRlcyBjb21tYW5kcyBmcm9tIGEgZmlsZSAK LWNhbGxlZCAua2VybXJjIGluIHlvdXIgaG9tZSBkaXJlY3Rvcnkgd2hlbiBpdCBzdGFydHMsIHVu bGVzcyBpdCBpcyBnaXZlbiB0aGUKLVwtWSBvciBcLXkgY29tbWFuZFwoaHlsaW5lIG9wdGlvbi4g Q3VzdG9tIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IHN1YnN0aXR1dGUgYSBzaGFyZWQKLXN5c3RlbVwo aHl3aWRlIGluaXRpYWxpemF0aW9uIGZpbGUuIFRoZSBTSE9XIEZJTEUgY29tbWFuZCB0ZWxscyB3 aGF0Ci1pbml0aWFsaXphdGlvbiBmaWxlLCBpZiBhbnksIHdhcyB1c2VkLiBUaGUgc3RhbmRhcmQg aW5pdGlhbGl6YXRpb24gZmlsZQotImNoYWlucyIgdG8gYW4gaW5kaXZpZHVhbCBjdXN0b21pemF0 aW9uIGZpbGUsIC5teWtlcm1jLCBpbiB0aGUgaG9tZSBkaXJlY3RvcnksCi1pbiB3aGljaCBlYWNo IHVzZXIgY2FuIGVzdGFibGlzaCBoZXIvaGlzIG93biBwcmVmZXJlbmNlcywgZGVmaW5lIG1hY3Jv cywgYW5kCi1zbyBvbi4KLS5QUAotU2luY2UgZXhlY3V0aW9uIG9mIHRoZSBpbml0aWFsaXphdGlv biBmaWxlIChhdCBsZWFzdCB0aGUgc3RhbmRhcmQgb25lKQotbWFrZXMgQ1woaHlLZXJtaXQgdGFr ZSBsb25nZXIgdG8gc3RhcnQsIGl0IG1pZ2h0IGJlIGJldHRlciBub3QgdG8gaGF2ZSBhbgotaW5p dGlhbGl6YXRpb24gZmlsZSwgZXNwZWNpYWxseSBub3cgdGhhdCBLZXJtaXQncyBkZWZhdWx0IHN0 YXJ0dXAKLWNvbmZpZ3VyYXRpb24gaXMgd2VsbCBhdHR1bmVkIHRvIG1vZGVybiBjb21wdXRpbmcg YW5kIG5ldHdvcmtpbmcgXChoeVwoaHkgaW4KLW90aGVyIHdvcmRzLCB5b3Ugbm8gbG9uZ2VyIGhh dmUgZG8gYW55dGhpbmcgc3BlY2lhbCB0byBtYWtlIEtlcm1pdAotdHJhbnNmZXJzIGdvIGZhc3Qu IFNvIGluc3RlYWQgb2YgaGF2aW5nIGFuIGluaXRpYWxpemF0aW9uIGZpbGUgdGhhdCBpcwotZXhl Y3V0ZWQgZXZlcnkgdGltZSBLZXJtaXQgc3RhcnRzLCB5b3UgbWlnaHQgY29uc2lkZXIgbWFraW5n IG9uZSBvciBtb3JlCi1rZXJiYW5nIHNjcmlwdHMgKHdpdGggbmFtZXMgb3RoZXIgdGhhdCAua2Vy bXJjKSB0aGF0IGRvIE5PVCBpbmNsdWRlIGFuCi0iZXhpdCIgY29tbWFuZCwgYW5kIGludm9rZSB0 aG9zZSB3aGVuIHlvdSBuZWVkIHRoZSBzZXR0aW5ncywgbWFjcm8KLWRlZmluaXRpb25zLCBhbmQv b3Igc2NyaXB0ZWQgYWN0aW9ucyB0aGV5IGNvbnRhaW4sIGFuZCBpbnZva2UgQ1woaHlLZXJtaXQK LWRpcmVjdGx5IHdoZW4geW91IGRvbid0LgotLlBQCi1UbyBwdXQgaXQgYW5vdGhlciB3YXkuLi4g V2Ugc3RpbGwgZGlzdHJpYnV0ZSB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24KLWZpbGUgc2lu Y2UgaXQncyBmZWF0dXJlZCBpbiB0aGUgbWFudWFsIGFuZCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0 eSBpcwotaW1wb3J0YW50IHRvIHVzLiBCdXQgdGhlcmUncyBubyBoYXJtIGluIG5vdCB1c2luZyBp dCBpZiB5b3UgZG9uJ3QgbmVlZCB0aGUKLXN0dWZmIHRoYXQncyBpbiBpdCAoc2VydmljZXMgZGly ZWN0b3J5LCBkaWFsaW5nIGRpcmVjdG9yeSwgbmV0d29yawotZGlyZWN0b3J5LCBhbmQgYXNzb2Np YXRlZCBtYWNybyBkZWZpbml0aW9ucykuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGVyZQotYXJl IHNldHRpbmdzIG9yIG1hY3JvcyB5b3Ugd2FudCBpbiBlZmZlY3QgRVZFUlkgdGltZSB5b3UgdXNl IEtlcm1pdCwgdGhlCi1pbml0aWFsaXphdGlvbiBmaWxlIChvciB0aGUgY3VzdG9taXphdGlvbiBm aWxlIGl0IGNoYWlucyB0bykgaXMgdGhlIHBsYWNlCi10byBwdXQgdGhlbSwgYmVjYXVzZSB0aGF0 J3MgdGhlIG9ubHkgcGxhY2UgS2VybWl0IGxvb2tzIGZvciB0aGVtCi1hdXRvbWF0aWNhbGx5IGVh Y2ggdGltZSB5b3Ugc3RhcnQgaXQuCi0uU0ggTU9ERVMgT0YgT1BFUkFUSU9OCi1LZXJtaXQgaXMg c2FpZCB0byBiZSBpbiBMb2NhbCBtb2RlIGlmIGl0IGhhcyBtYWRlIGEgY29ubmVjdGlvbiB0byBh bm90aGVyCi1jb21wdXRlciwgZS5nLiBieSBkaWFsaW5nIGl0IG9yIGVzdGFibGlzaGluZyBhIFRl bG5ldCBjb25uZWN0aW9uIHRvIGl0LiBUaGUKLW90aGVyIGNvbXB1dGVyIGlzIHJlbW90ZSwgc28g aWYgeW91IHN0YXJ0IGFub3RoZXIgY29weSBvZiBLZXJtaXQgb24gdGhlCi1yZW1vdGUgY29tcHV0 ZXIsIGl0IGlzIHNhaWQgdG8gYmUgaW4gUmVtb3RlIG1vZGUgKGFzIGxvbmcgYXMgaXQgaGFzIG5v dAotbWFkZSBhbnkgY29ubmVjdGlvbnMgb2YgaXRzIG93bikuIFRoZSBsb2NhbCBLZXJtaXQgY29t bXVuaWNhdGVzIG92ZXIgdGhlCi1jb21tdW5pY2F0aW9ucyBkZXZpY2Ugb3IgbmV0d29yayBjb25u ZWN0aW9uLCBhY3RpbmcgYXMgYSBjb25kdWl0IGJldHdlZW4KLXRoZSB0aGUgcmVtb3RlIGNvbXB1 dGVyIGFuZCB5b3VyIGtleWJvYXJkIGFuZCBzY3JlZW4uIFRoZSByZW1vdGUgS2VybWl0IGlzCi10 aGUgZmlsZVwoaHl0cmFuc2ZlciBwYXJ0bmVyIHRvIHRoZSBsb2NhbCBLZXJtaXQgYW5kIGNvbW11 bmljYXRlcyBvbmx5IHRocm91Z2gKLWl0cyBzdGFuZGFyZCBpbnB1dCBhbmQgb3V0cHV0LgotLlBQ Ci1BdCBhbnkgbW9tZW50LCBhIEtlcm1pdCBwcm9ncmFtIGNhbiBiZSBpbiBhbnkgb2YgdGhlIGZv bGxvd2luZyBzdGF0ZXMuIEl0J3MKLWltcG9ydGFudCB0byBrbm93IHdoYXQgdGhleSBhcmUgYW5k IGhvdyB0byBjaGFuZ2UgZnJvbSBvbmUgdG8gdGhlIG90aGVyLgotLlRQCi1Db21tYW5kIHN0YXRl Ci1JbiB0aGlzIHN0YXRlLCBLZXJtaXQgcmVhZHMgY29tbWFuZHMgZnJvbToKLS5zcAotXChidQlZ b3VyIGtleWJvYXJkOyBvcjoKLS5icgotXChidQlBIGZpbGUsIG9yOgotLmJyCi1cKGJ1CUEgbWFj cm8gZGVmaW5pdGlvbi4KLS5zcAotWW91IGNhbiBleGl0IGZyb20gQ29tbWFuZCBzdGF0ZSBiYWNr IHRvIFVuaXggd2l0aCB0aGUgRVhJVCBvciBRVUlUCi1jb21tYW5kIChzYW1lIHRoaW5nKS4gWW91 IGNhbiBlbnRlciBDb25uZWN0IHN0YXRlIHdpdGggYW55IG9mIHZhcmlvdXMKLWNvbW1hbmRzIChD T05ORUNULCBESUFMLCBURUxORVQsIGV0YykuIFlvdSBjYW4gZW50ZXIgZmlsZSB0cmFuc2Zlcgot c3RhdGUgd2l0aCBjb21tYW5kcyBsaWtlIFNFTkQsIFJFQ0VJVkUsIGFuZCBHRVQuIFlvdSBjYW4g ZW50ZXIgU2VydmVyCi1zdGF0ZSB3aXRoIHRoZSBTRVJWRVIgY29tbWFuZC4gVGhlIFRBS0UgY29t bWFuZCB0ZWxscyBLZXJtaXQgdG8gcmVhZAotYW5kIGV4ZWN1dGUgY29tbWFuZHMgZnJvbSBhIGZp bGUuIFRoZSAocGVyaGFwcyBpbXBsaWVkKSBETyBjb21tYW5kCi10ZWxscyBLZXJtaXQgdG8gcmVh ZCBhbmQgZXhlY3V0ZSBjb21tYW5kcyBmcm9tIGEgbWFjcm8gZGVmaW5pdGlvbi4KLVdoaWxlIGlu IENvbW1hbmQgc3RhdGUsIHlvdSBjYW4gaW50ZXJydXB0IGFueSBjb21tYW5kLCBtYWNybywgb3IK LWNvbW1hbmQgZmlsZSBieSB0eXBpbmcgQ3RybFwtQyAoaG9sZCBkb3duIHRoZSBDdHJsIGtleSBh bmQgcHJlc3MgdGhlIEMKLWtleSk7IHRoaXMgbm9ybWFsbHkgYnJpbmdzIHlvdSBiYWNrIHRvIHRo ZSBwcm9tcHQuCi0uVFAKLVNoZWxsIHN0YXRlCi1Zb3UgY2FuIGludm9rZSBhbiBpbmZlcmlvciBz aGVsbCBvciBleHRlcm5hbCBjb21tYW5kIGZyb20gdGhlIEtlcm1pdAotY29tbWFuZCBwcm9tcHQg YnkgdXNpbmcgdGhlIFBVU0gsIFJVTiAoISksIEVESVQsIG9yIEJST1dTRSBjb21tYW5kLgotV2hp bGUgdGhlIGluZmVyaW9yIHNoZWxsIG9yIGNvbW1hbmQgaXMgYWN0aXZlLCBLZXJtaXQgaXMgc3Vz cGVuZGVkIGFuZAotZG9lcyBub3RoaW5nLiBSZXR1cm4gdG8gS2VybWl0IENvbW1hbmQgc3RhdGUg YnkgZXhpdGluZyBmcm9tIHRoZQotaW5mZXJpb3Igc2hlbGwgb3IgYXBwbGljYXRpb24uCi0uVFAK LUNvbm5lY3Qgc3RhdGUKLUluIHRoaXMgc3RhdGUsIHdoaWNoIGNhbiBiZSBlbnRlcmVkIG9ubHkg d2hlbiBpbiBMb2NhbCBtb2RlIChpLmUuIHdoZW4KLUtlcm1pdCBoYXMgbWFkZSBhIGNvbm5lY3Rp b24gdG8gYW5vdGhlciBjb21wdXRlciksIEtlcm1pdCBpcyBhY3RpbmcgYXMKLWEgdGVybWluYWwg dG8gdGhlIHJlbW90ZSBjb21wdXRlci4gWW91ciBrZXlzdHJva2VzIGFyZSBzZW50IHRvIHRoZQot cmVtb3RlIGNvbXB1dGVyIGFuZCBjaGFyYWN0ZXJzIHRoYXQgYXJyaXZlIG92ZXIgdGhlIGNvbW11 bmljYXRpb24KLWNvbm5lY3Rpb24gYXJlIGRpc3BsYXllZCBvbiB5b3VyIHNjcmVlbi4gVGhpcyBz dGF0ZSBpcyBlbnRlcmVkIHdoZW4KLXlvdSBnaXZlIGEgQ09OTkVDVCwgRElBTCwgVEVMTkVULCBS TE9HSU4sIG9yIElLU0QgY29tbWFuZC4gWW91IGNhbgotcmV0dXJuIHRvIGNvbW1hbmQgc3RhdGUg YnkgbG9nZ2luZyBvdXQgb2YgdGhlIHJlbW90ZSBjb21wdXRlciwgb3IgYnkKLXR5cGluZzoKLS5z cAotICBDdHJsXC1cZWMKLS5zcAotVGhhdCBpczogSG9sZCBkb3duIHRoZSBDdHJsIGtleSBhbmQg cHJlc3MgdGhlIGJhY2tzbGFzaCBrZXksIHRoZW4gbGV0Ci1nbyBvZiB0aGUgQ3RybCBrZXkgYW5k IHByZXNzIHRoZSBDIGtleS4gVGhpcyBpcyBjYWxsZWQgZXNjYXBpbmcgYmFjay4KLUNlcnRhaW4g b3RoZXIgZXNjYXBlXChoeWxldmVsIGNvbW1hbmRzIGFyZSBhbHNvIHByb3ZpZGVkOyB0eXBlIEN0 cmxcLVxlPwotZm9yIGEgbGlzdC4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gZW50ZXIgU2hlbGwgc3Rh dGUgd2l0aDoKLS5zcAotICBDdHJsXC1cZSEKLS5zcAotVG8gc2VuZCBhIEN0cmxcLVxlIHRvIHRo ZSBob3N0IHdoaWxlIGluIENvbm5lY3Qgc3RhdGUsIHR5cGUgdHdvIG9mIHRoZW0KLWluIGEgcm93 LiBTZWUgSEVMUCBDT05ORUNUIGFuZCBIRUxQIFNFVCBFU0NBUEUgZm9yIG1vcmUgaW5mby4KLS5U UAotTG9jYWwgZmlsZVwoaHl0cmFuc2ZlciBzdGF0ZQotSW4gdGhpcyBzdGF0ZSwgS2VybWl0IGlz IHNlbmRpbmcgcGFja2V0cyBiYWNrIGFuZCBmb3J0aCB3aXRoIHRoZSBvdGhlcgotY29tcHV0ZXIg aW4gb3JkZXIgdG8gdHJhbnNmZXIgYSBmaWxlIG9yIGFjY29tcGxpc2ggc29tZSBvdGhlcgotZmls ZVwoaHlyZWxhdGVkIHRhc2suIEFuZCBhdCB0aGUgc2FtZSB0aW1lLCBpdCBpcyBkaXNwbGF5aW5n IGl0cyBwcm9ncmVzcwotb24geW91ciBzY3JlZW4gYW5kIHdhdGNoaW5nIHlvdXIga2V5Ym9hcmQg Zm9yIGludGVycnVwdGlvbnMuIEluIHRoaXMKLXN0YXRlLCB0aGUgZm9sbG93aW5nIHNpbmdsZVwo aHlrZXlzdHJva2UgY29tbWFuZHMgYXJlIGFjY2VwdGVkOgotLnNwCi0uUlMKLS5UUAotWAotSW50 ZXJydXB0IHRoZSBjdXJyZW50IGZpbGUgYW5kIGdvIG9uIHRvIHRoZSBuZXh0IChpZiBhbnkpLgot LlRQCi1aCi1JbnRlcnJ1cHQgdGhlIGN1cnJlbnQgZmlsZSBhbmQgc2tpcCBhbGwgdGhlIHJlc3Qu Ci0uVFAKLUUKLUxpa2UgWiBidXQgdXNlcyBhICJzdHJvbmdlciIgcHJvdG9jb2wgKHVzZSBpZiBY IG9yIFogZG9uJ3Qgd29yaykuCi0uVFAKLUN0cmxcLUMKLUludGVycnVwdCBmaWxlXChoeXRyYW5z ZmVyIG1vZGUgKHVzZSBpZiBaIG9yIEUgZG9uJ3Qgd29yaykuCi0uc3AKLS5SRQotS2VybWl0IHJl dHVybnMgdG8gaXRzIHByZXZpb3VzIHN0YXRlIChDb21tYW5kIG9yIENvbm5lY3QpIHdoZW4gdGhl Ci10cmFuc2ZlciBpcyBjb21wbGV0ZSBvciB3aGVuIGludGVycnVwdGVkIHN1Y2Nlc3NmdWxseSBi eSBYLCBaLCBFLCBvcgotQ3RybFwtQyAoaG9sZCBkb3duIHRoZSBDdHJsIGtleSBhbmQgcHJlc3Mg dGhlIEMga2V5KS4KLS5UUAotUmVtb3RlIGZpbGVcKGh5dHJhbnNmZXIgc3RhdGUKLUluIHRoaXMg c3RhdGUsIEtlcm1pdCBpcyBleGNoYW5naW5nIGZpbGVcKGh5dHJhbnNmZXIgcGFja2V0cyB3aXRo IGl0cwotbG9jYWwgcGFydG5lciBvdmVyIGl0cyBzdGFuZGFyZCBpL28uIEl0IGxlYXZlcyB0aGlz IHN0YXRlCi1hdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLiBJbiBj YXNlIHlvdSBmaW5kIHlvdXIKLWxvY2FsIEtlcm1pdCBpbiBDb25uZWN0IHN0YXRlIGFuZCB0aGUg cmVtb3RlIG9uZSBpbiBGaWxlXChoeXRyYW5zZmVyCi1zdGF0ZSAoaW4gd2hpY2ggaXQgc2VlbXMg dG8gaWdub3JlIHlvdXIga2V5c3Ryb2tlcyksIHlvdSBjYW4gdXN1YWxseQotcmV0dXJuIGl0IHRv IGNvbW1hbmQgc3RhdGUgYnkgdHlwaW5nIHRocmVlIEN0cmxcLUMncyBpbiBhIHJvdy4gSWYgdGhh dAotZG9lc24ndCB3b3JrLCByZXR1cm4geW91ciBsb2NhbCBLZXJtaXQgdG8gQ29tbWFuZCBzdGF0 ZSAoQ3RybFwtXGUgQykgYW5kCi10eXBlICJlXChoeXBhY2tldCIgYW5kIHRoZW4gcHJlc3MgdGhl IFJldHVybiBvciBFbnRlciBrZXk7IHRoaXMgZm9yY2VzIGEKLWZhdGFsIEtlcm1pdCBwcm90b2Nv bCBlcnJvci4KLS5UUAotUmVtb3RlIFNlcnZlciBzdGF0ZQotVGhpcyBpcyBsaWtlIFJlbW90ZSBG aWxlXChoeXRyYW5zZmVyIHN0YXRlLCBleGNlcHQgaXQgbmV2ZXIgcmV0dXJucwotYXV0b21hdGlj YWxseSB0byBDb21tYW5kIHN0YXRlLiBSYXRoZXIsIGl0IGF3YWl0cyBmdXJ0aGVyIGluc3RydWN0 aW9ucwotZnJvbSB0aGUgY2xpZW50IHByb2dyYW07IHRoYXQgaXMsIGZyb20geW91ciBMb2NhbCBL ZXJtaXQgcHJvZ3JhbS4gWW91Ci1jYW4gcmV0dXJuIHRoZSBSZW1vdGUgU2VydmVyIHRvIGl0cyBw cmV2aW91cyBzdGF0ZSBieSBpc3N1aW5nIGEKLSJmaW5pc2giIGNvbW1hbmQgdG8gdGhlIGNsaWVu dCwgb3IgaWYgeW91IGFyZSBpbiBDb25uZWN0IHN0YXRlLCBieQotdHlwaW5nIHRocmVlIEN0cmxc LUMncyBpbiBhIHJvdy4gWW91IGNhbiB0ZWxsIHRoZSBzZXJ2ZXIgam9iIHRvIGxvZyBvdXQKLWFu ZCBicmVhayB0aGUgY29ubmVjdGlvbiBieSBpc3N1aW5nIGEgImJ5ZSIgY29tbWFuZCB0byB0aGUg Y2xpZW50LgotLlRQCi1Mb2NhbCBTZXJ2ZXIgc3RhdGUKLUxpa2UgUmVtb3RlXChoeVNlcnZlciBz dGF0ZSwgYnV0IGluIGxvY2FsIG1vZGUsIGFuZCB0aGVyZWZvcmUgd2l0aCBpdHMKLWZpbGVcKGh5 dHJhbnNmZXIgZGlzcGxheSBzaG93aW5nLCBhbmQgbGlzdGVuaW5nIGZvciBzaW5nbGVcKGh5a2V5 IGNvbW1hbmRzLAotYXMgaW4gTG9jYWwgRmlsZVwoaHl0cmFuc2ZlciBzdGF0ZS4gVXN1YWxseSB0 aGlzIHN0YXRlIGlzIGVudGVyZWQKLWF1dG9tYXRpY2FsbHkgd2hlbiBhIHJlbW90ZSBLZXJtaXQg cHJvZ3JhbSBnaXZlcyBhIEdFVCBjb21tYW5kLgotLnNwCi1DXChoeUtlcm1pdCwgS2VybWl0IDk1 LCBhbmQgTVNcKGh5RE9TIEtlcm1pdCBhbGwgY2FuIHN3aXRjaCBhdXRvbWF0aWNhbGx5IGZyb20K LUNvbm5lY3Qgc3RhdGUgdG8gTG9jYWwgRmlsZVwoaHl0cmFuc2ZlciBzdGF0ZSB3aGVuIHlvdSBp bml0aWF0ZSBhIGZpbGUKLXRyYW5zZmVyIGZyb20gdGhlIHJlbW90ZSBjb21wdXRlciBieSBzdGFy dGluZyBLZXJtaXQgYW5kIHRlbGxpbmcgaXQgdG8gc2VuZAotb3IgZ2V0IGEgZmlsZSwgaW4gd2hp Y2ggY2FzZSwgQ29ubmVjdCBzdGF0ZSBpcyBhdXRvbWF0aWNhbGx5IHJlc3VtZWQgYWZ0ZXIKLXRo ZSBmaWxlIHRyYW5zZmVyIGlzIGZpbmlzaGVkLgotLnNwCi1Ob3RlIHRoYXQgQ1woaHlLZXJtaXQg aXMgbm90IGEgdGVybWluYWwgZW11bGF0b3IuIEl0IGlzIGEgY29tbXVuaWNhdGlvbnMKLWFwcGxp Y2F0aW9uIHRoYXQgeW91IHJ1biBpbiBhIHRlcm1pbmFsIHdpbmRvdyAoZS5nLiBjb25zb2xlIG9y IFh0ZXJtKS4gVGhlCi1zcGVjaWZpYyBlbXVsYXRpb24sIHN1Y2ggYXMgVlQxMDAsIFZUMjIwLCBM aW51eCBDb25zb2xlLCBvciBYdGVybSwgaXMKLXByb3ZpZGVkIGJ5IHRoZSB0ZXJtaW5hbCB3aW5k b3cgaW4gd2hpY2ggeW91IGFyZSBydW5uaW5nIENcKGh5S2VybWl0LiBLZXJtaXQKLTk1IGFuZCBN U1woaHlET1MgS2VybWl0LCBvbiB0aGUgb3RoZXIgaGFuZCwgYXJlIHRydWUgdGVybWluYWwgZW11 bGF0b3JzLiBXaHkKLWlzIENcKGh5S2VybWl0IG5vdCBhIHRlcm1pbmFsIGVtdWxhdG9yPyBDTElD SyBIRVJFIHRvIHJlYWQgYWJvdXQgaXQuCi0uU0ggTUFLSU5HIENPTk5FQ1RJT05TCi1IZXJlIGlz IGhvdyB0byBtYWtlIGRpZmZlcmVudCBraW5kcyBvZiBjb25uZWN0aW9ucyB1c2luZyBpbnRlcmFj dGl2ZSBLZXJtaXQKLWNvbW1hbmRzIChhcyBub3RlZCBhYm92ZSwgeW91IGNhbiBhbHNvIG1ha2Ug Y29ubmVjdGlvbnMgd2l0aCBjb21tYW5kXChoeWxpbmUKLW9wdGlvbnMpLiBOb3RlIHRoYXQgeW91 IGRvbid0IGhhdmUgdG8gbWFrZSBjb25uZWN0aW9ucyB3aXRoIEtlcm1pdC4gSXQgY2FuCi1hbHNv IGJlIHVzZWQgb24gdGhlIGZhciBlbmQgb2YgYSBjb25uZWN0aW9uIGFzIHRoZSByZW1vdGUgZmls ZSB0cmFuc2ZlciBhbmQKLW1hbmFnZW1lbnQgcGFydG5lciBvZiB5b3VyIGxvY2FsIGNvbW11bmlj YXRpb25zIHNvZnR3YXJlLgotLlRQCi1NYWtpbmcgYSBUZWxuZXQgQ29ubmVjdGlvbgotQXQgdGhl IENcKGh5S2VybWl0IGNvbW1hbmQgcHJvbXB0LCBzaW1wbHkgdHlwZToKLS5zcAotLm5mCi0gIHRl bG5ldCBmb28uYmFyLmNvbQotLmZpCi0uc3AKLShzdWJzdGl0dXRpbmcgZGVzaXJlZCBob3N0bmFt ZSBvciBhZGRyZXNzKS4gIAotWW91IGNhbiBhbHNvIGluY2x1ZGUgYSBwb3J0IG51bWJlcjoKLS5z cAotLm5mCi0gIHRlbG5ldCB4eXpjb3JwLmNvbSAzMDAwIDsgCi0uZmkKLS5zcAotSWYgdGhlIGNv bm5lY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgS2VybWl0IGF1dG9taWNhbGx5IGVudGVycyBDb25uZWN0 Ci1zdGF0ZS4gV2hlbiB5b3UgbG9nb3V0IGZyb20gdGhlIHJlbW90ZSBob3N0LCBLZXJtaXQgYXV0 b21hdGljYWxseQotcmV0dXJucyB0byBpdHMgcHJvbXB0LiBNb3JlIGluZm86IEhFTFAgVEVMTkVU LCBIRUxQIFNFVCBURUxORVQsIEhFTFAKLVNFVCBURUxPUFQuIEFsc28gc2VlIHRoZSBJS1NEIHNl Y3Rpb24gYmVsb3cuCi0uVFAKLU1ha2luZyBhbiBSbG9naW4gY29ubmVjdGlvbgotVGhpcyBpcyBq dXN0IGxpa2UgVGVsbmV0LCBleGNlcHQgeW91IGhhdmUgdG8gYmUgcm9vdCB0byBkbyBpdCBiZWNh dXNlCi1SbG9naW4gdXNlcyBhIHByaXZpbGVnZWQgVENQIHBvcnQ6Ci0uc3AKLS5uZgotICBybG9n aW4gZm9vLmJhci5jb20KLS5maQotLnNwCi1Nb3JlIGluZm86IEhFTFAgUkxPR0lOLgotLlRQCi1N YWtpbmcgYW4gU1NIIENvbm5lY3Rpb24KLVVubGlrZSBUZWxuZXQgYW5kIFJsb2dpbiwgU1NIIGNv bm5lY3Rpb25zIGFyZSBub3QgYnVpbHRcKGh5aW4sIGJ1dAotaGFuZGxlZCBieSBydW5uaW5nIHlv dXIgZXh0ZXJuYWwgU1NIIGNsaWVudCB0aHJvdWdoIGEgcHNldWRvdGVybWluYWwuCi1Vc2luZyBD XChoeUtlcm1pdCB0byBjb250cm9sIHRoZSBTU0ggY2xpZW50IGdpdmVzIHlvdSBhbGwgb2YgS2Vy bWl0J3MKLWZlYXR1cmVzIChmaWxlIHRyYW5zZmVyLCBjaGFyYWN0ZXJcKGh5c2V0IGNvbnZlcnNp b24sIHNjcmlwdGluZywgZXRjKQotb3ZlciBTU0guCi0uc3AKLSAgc3NoIGZvby5iYXIuY29tCi0u c3AKLU1vcmUgaW5mbzogSEVMUCBTU0gsIEhFTFAgU0VUIFNTSC4KLS5UUAotRGlhbGluZyB3aXRo IGEgTW9kZW0KLUlmIGl0J3MgYW4gZXh0ZXJuYWwgbW9kZW0sIG1ha2Ugc3VyZSBpdCBpcyBjb25u ZWN0ZWQgdG8gYSB1c2FibGUKLXNlcmlhbCBwb3J0IG9uIHlvdXIgY29tcHV0ZXIgd2l0aCBhIHJl Z3VsYXIgKHN0cmFpZ2h0XChoeXRocm91Z2gpIG1vZGVtCi1jYWJsZSwgYW5kIHRvIHRoZSB0ZWxl cGhvbmUgamFjayB3aXRoIGEgdGVsZXBob25lIGNhYmxlLCBhbmQgdGhhdCBpdCdzCi10dXJuZWQg b24uIFRoZW4gdXNlIHRoZXNlIGNvbW1hbmRzOgotLnNwCi0ubmYKLSAgc2V0IG1vZGVtIHR5cGUg dXNyb2JvdGljcyAgOyBPciBvdGhlciBzdXBwb3J0ZWQgdHlwZQotICBzZXQgbGluZSAvZGV2L3R0 eVMwICAgICAgICA7IFNwZWNpZnkgZGV2aWNlIG5hbWUKLSAgc2V0IHNwZWVkIDU3NjAwICAgICAg ICAgICAgOyBPciBvdGhlciBkZXNpcmVkIHNwZWVkCi0gIHNldCBmbG93IHJ0cy9jdHMgICAgICAg ICAgIDsgTW9zdCBtb2Rlcm4gbW9kZW1zIHN1cHBvcnQgdGhpcwotICBzZXQgZGlhbCBtZXRob2Qg dG9uZSAgICAgICA7IChvciBwdWxzZSkKLSAgZGlhbCA3NjU0MzIxICAgICAgICAgICAgICAgOyBE aWFsIHRoZSBkZXNpcmVkIG51bWJlcgotLmZpCi0uc3AKLVR5cGUgInNldCBtb2RlbSB0eXBlID8i IGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIG1vZGVtIHR5cGVzLiBJZiB5b3UKLW9taXQgdGhlIFNF VCBNT0RFTSBUWVBFIGNvbW1hbmQsIHRoZSBkZWZhdWx0IHR5cGUgaXMKLSJnZW5lcmljXChoeWhp Z2hcKGh5c3BlZWQiLCB3aGljaCBzaG91bGQgd29yayBmb3IgbW9zdCBtb2Rlcm4gQVRcKGh5Y29t bWFuZFwoaHlzZXQKLW1vZGVtcy4gSWYgdGhlIGxpbmUgaXMgYnVzeSwgS2VybWl0IHJlZGlhbHMg YXV0b21hdGljYWxseS4gSWYgdGhlIGNhbGwKLWRvZXMgbm90IHN1Y2NlZWQsIHVzZSAic2V0IGRp YWwgZGlzcGxheSBvbiIgYW5kIHRyeSBpdCBhZ2FpbiB0byB3YXRjaAotd2hhdCBoYXBwZW5zLiBJ ZiB0aGUgY2FsbCBzdWNjZWVkcywgS2VybWl0IGVudGVycyBDb25uZWN0IHN0YXRlCi1hdXRvbWF0 aWNhbGx5IGFuZCByZXR1cm5zIHRvIGl0cyBwcm9tcHQgYXV0b21hdGljYWxseSB3aGVuIHlvdSBs b2cgb3V0Ci1mcm9tIHRoZSByZW1vdGUgY29tcHV0ZXIgb3IgdGhlIGNvbm5lY3Rpb24gaXMgb3Ro ZXJ3aXNlIGxvc3QuCi0uc3AKLVlvdSBjYW4gYWxzbyBkaWFsIGZyb20gYSBtb2RlbSB0aGF0IGlz IGFjY2Vzc2libGUgYnkgVGVsbmV0LCBlLmcuIHRvIGEKLXJldmVyc2UgdGVybWluYWwgc2VydmVy LiBJbiB0aGlzIGNhc2UgdGhlIGNvbW1hbmQgc2VxdWVuY2UgaXM6Ci0uc3AKLS5uZgotICBzZXQg aG9zdCB0cy54eHguY29tIDIwMDAgICA7IFRlcm1pbmFsXChoeXNlcnZlciBhbmQgcG9ydAotICBz ZXQgbW9kZW0gdHlwZSB1c3JvYm90aWNzICA7IE9yIG90aGVyIHN1cHBvcnRlZCB0eXBlCi0gIHNl dCBkaWFsIG1ldGhvZCB0b25lICAgICAgIDsgKG9yIHB1bHNlKQotICBkaWFsIDc2NTQzMjEgICAg ICAgICAgICAgICA7IERpYWwgdGhlIGRlc2lyZWQgbnVtYmVyCi0uZmkKLS5zcAotSWYgdGhlIHRl cm1pbmFsIHNlcnZlciBzdXBwb3J0cyB0aGUgVGVsbmV0IENvbSBQb3J0IE9wdGlvbiwgUkZDIDIy MTcsCi15b3UgY2FuIGFsc28gZ2l2ZSBzZXJpYWxcKGh5cG9ydCByZWxhdGVkIGNvbW1hbmRzIHN1 Y2ggYXMgU0VUIFNQRUVELCBTRVQKLVBBUklUWSwgYW5kIHNvIG9uLCBhbmQgS2VybWl0IHJlbGF5 cyB0aGVtIHRvIHRoZSB0ZXJtaW5hbCBzZXJ2ZXIgdXNpbmcKLXRoZSBwcm90b2NvbCBzcGVjaWZp ZWQgaW4gdGhlIFJGQy4KLS5zcAotTW9yZSBpbmZvOiBIRUxQIFNFVCBNT0RFTSwgSEVMUCBTRVQg TElORSwgSEVMUCBTRVQgU1BFRUQsIEhFTFAgU0VUCi1GTE9XLCBIRUxQIERJQUwsIEhFTFAgU0VU IERJQUwsIEhFTFAgU0VUIE1PREVNLCBIRUxQIFNFVCAKLUNBUlJJRVJcLVdBVENILCBTSE9XIENP TU1VTklDQVRJT05TLCBTSE9XIE1PREVNLCBTSE9XIERJQUwuCi0uVFAKLURpcmVjdCBTZXJpYWwg UG9ydAotQ29ubmVjdCB0aGUgdHdvIGNvbXB1dGVycywgQSBhbmQgQiwgd2l0aCBhIG51bGwgbW9k ZW0gY2FibGUgKG9yIHR3bwotbW9kZW0gY2FibGVzIGludGVyY29ubmVjdGVkIHdpdGggYSBudWxs XChoeW1vZGVtIGFkYXB0ZXIgb3IgbW9kZW0KLWVsaW1pbmF0b3IpLiBGcm9tIENvbXB1dGVyIEE6 Ci0uc3AKLS5uZgotICBzZXQgbW9kZW0gdHlwZSBub25lICAgOyBUaGVyZSBpcyBubyBtb2RlbQot ICBzZXQgbGluZSAvZGV2L3R0eVMwICAgOyBTcGVjaWZ5IGRldmljZSBuYW1lCi0gIHNldCBjYXJy aWVyXC13YXRjaCBvZmYgOyBJZiBEVFIgQ0QgYXJlIG5vdCBjcm9zc1woaHljb25uZWN0ZWQKLSAg c2V0IHNwZWVkIDU3NjAwICAgICAgIDsgT3Igb3RoZXIgZGVzaXJlZCBzcGVlZAotICBzZXQgZmxv dyBydHMvY3RzICAgICAgOyBJZiBSVFMgYW5kIENUUyBhcmUgY3Jvc3NcKGh5Y29ubmVjdGVkCi0g IHNldCBwYXJpdHkgZXZlbiAgICAgICA7IChvciAibWFyayIgb3IgInNwYWNlIiwgaWYgbmVjZXNz YXJ5KQotICBzZXQgc3RvcFwtYml0cyAyICAgICAgIDsgKHJhcmVseSBuZWNlc3NhcnkpCi0gIHNl dCBmbG93IHhvbi94b2ZmICAgICA7IElmIHlvdSBjYW4ndCB1c2UgUlRTL0NUUwotICBjb25uZWN0 ICAgICAgICAgICAgICAgOyBFbnRlciBDb25uZWN0ICh0ZXJtaW5hbCkgc3RhdGUKLS5maQotLnNw Ci1UaGlzIGFzc3VtZXMgQ29tcHV0ZXIgQiBpcyBzZXQgdXAgdG8gbGV0IHlvdSBsb2cgaW4uIElm IGl0IGlzbid0LCB5b3UgCi1jYW4gcnVuIGEgY29weSBvZiBLZXJtaXQgb24gQ29tcHV0ZXIgQiBh bmQgZm9sbG93IGFwcHJveGltYXRlbHkgdGhlCi1zYW1lIGRpcmVjdGlvbnMuIE1vcmUgaW5mbzog QXMgYWJvdmUgcGx1cyBIRUxQIENPTk5FQ1QuCi0uUFAKLVdpdGggbW9kZW1zIG9yIGRpcmVjdCBz ZXJpYWwgY29ubmVjdGlvbnMsIHlvdSBtaWdodCBhbHNvIGhhdmUgdG8gInNldAotcGFyaXR5IGV2 ZW4iIChvciAibWFyayIgb3IgInNwYWNlIikgaWYgaXQncyBhIDdcKGh5Yml0IGNvbm5lY3Rpb24u Ci0uUFAKLU9mIHRoZSBjb25uZWN0aW9uIHR5cGVzIGxpc3RlZCBhYm92ZSwgb25seSBvbmUgY2Fu IGJlIG9wZW4gYXQgYSB0aW1lLgotSG93ZXZlciwgYW55IG9uZSBvZiB0aGVzZSBjYW4gYmUgb3Bl biBjb25jdXJyZW50bHkgd2l0aCBhbiBGVFAgb3IgSFRUUAotc2Vzc2lvbi4gRWFjaCBjb25uZWN0 aW9uIHR5cGUgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gYW55IGRlc2lyZWQgZGVncmVlLAotc2NyaXB0 ZWQsIGxvZ2dlZCwgeW91IG5hbWUgaXQuIFNlZSB0aGUgbWFudWFsLgotLlBQCi1OT1RFOiBPbiBz ZWxlY3RlZCBwbGF0Zm9ybXMsIENcKGh5S2VybWl0IGFsc28gY2FuIG1ha2UgWC4yNSBjb25uZWN0 aW9ucy4gU2VlCi10aGUgbWFudWFsIGZvciBkZXRhaWxzLgotLlNIIFRSQU5TRkVSUklORyBGSUxF UyBXSVRIIEtFUk1JVAotVGhlcmUgaXMgYSB3aWRlc3ByZWFkIGFuZCBwZXJzaXN0ZW50IGJlbGll ZiB0aGF0IEtlcm1pdCBpcyBhIHNsb3cgcHJvdG9jb2wuCi1UaGlzIGlzIGJlY2F1c2UsIHVudGls IHJlY2VudGx5LCBpdCB1c2VkIGNvbnNlcnZhdGl2ZSB0dW5pbmcgYnkgZGVmYXVsdCB0bwotbWFr ZSBzdXJlIGZpbGUgdHJhbnNmZXJzIHN1Y2NlZWRlZCwgcmF0aGVyIHRoYW4gZmFpbGluZyBiZWNh dXNlIHRoZXkKLW92ZXJsb2FkZWQgdGhlIGNvbm5lY3Rpb24uIFNvbWUgZXh0cmEgY29tbWFuZHMg KG9yIGNvbW1hbmRcKGh5bGluZSBvcHRpb25zLAotbGlrZSBcLVEpIHdlcmUgbmVlZGVkIHRvIG1h a2UgaXQgZ28gZmFzdCwgYnV0IG5vYm9keSBib3RoZXJlZCB0byBmaW5kIG91dAotYWJvdXQgdGhl bS4gQWxzbywgaXQgdGFrZXMgdHdvIHRvIHRhbmdvOiBtb3N0IG5vblwoaHlLZXJtaXRcKGh5UHJv amVjdCBLZXJtaXQKLXByb3RvY29sIGltcGxlbWVudGF0aW9ucyByZWFsbHkgQVJFIHNsb3cuIFRo ZSBiZXN0IGZpbGVcKGh5dHJhbnNmZXIgcGFydG5lcnMKLWZvciBDXChoeUtlcm1pdCBhcmU6IGFu b3RoZXIgY29weSBvZiBDXChoeUtlcm1pdCAoNy4wIG9yIGxhdGVyKSBhbmQgS2VybWl0IDk1Lgot VGhlc2UgY29tYmluYXRpb25zIHdvcmsgd2VsbCBhbmQgdGhleSB3b3JrIGZhc3QgYnkgZGVmYXVs dC4gTVNcKGh5RE9TIEtlcm1pdAotaXMgZ29vZCB0b28sIGJ1dCB5b3UgaGF2ZSB0byB0ZWxsIGl0 IHRvIGdvIGZhc3QgKGJ5IGdpdmluZyBpdCB0aGUgRkFTVAotY29tbWFuZCkuCi0uUFAKLUZ1cnRo ZXJtb3JlLCBhbGwgdGhyZWUgb2YgdGhlc2UgS2VybWl0IHByb2dyYW1zIHN1cHBvcnQgImF1dG9k b3dubG9hZCIgYW5kCi0iYXV0b3VwbG9hZCIsIG1lYW5pbmcgdGhhdCB3aGVuIHRoZXkgYXJlIGlu IENvbm5lY3Qgc3RhdGUgYW5kIGEgS2VybWl0Ci1wYWNrZXQgY29tZXMgaW4gZnJvbSB0aGUgcmVt b3RlLCB0aGV5IGF1dG9tYXRpY2FsbHkgc3dpdGNoIGludG8gZmlsZQotdHJhbnNmZXIgbW9kZS4K LS5QUAotQW5kIHBsdXMsIENcKGh5S2VybWl0IGFuZCBLOTUgYWxzbyBzd2l0Y2ggYXV0b21hdGlj YWxseSBiZXR3ZWVuIHRleHQgYW5kCi1iaW5hcnkgbW9kZSBmb3IgZWFjaCBmaWxlLCBzbyB0aGVy ZSBpcyBubyBuZWVkIHRvICJzZXQgZmlsZSB0eXBlIGJpbmFyeSIgb3IKLSJzZXQgZmlsZSB0eXBl IHRleHQiLCBvciB0byB3b3JyeSBhYm91dCBmaWxlcyBiZWluZyBjb3JydXB0ZWQgYmVjYXVzZSB0 aGV5Ci13ZXJlIHRyYW5zZmVycmVkIGluIHRoZSB3cm9uZyBtb2RlLgotLlBQCi1XaGF0IGFsbCBv ZiB0aGVzZSB3b3JkcyBhZGQgdXAgdG8gaXMgdGhhdCBub3csIHdoZW4geW91IHVzZSB1cFwoaHl0 b1woaHlkYXRlCi1LZXJtaXQgc29mdHdhcmUgZnJvbSB0aGUgS2VybWl0IFByb2plY3QsIGZpbGUg dHJhbnNmZXIgaXMgbm90IG9ubHkgZmFzdCwKLWl0J3MgcmlkaWN1bG91c2x5IGVhc3kuIFlvdSBi YXJlbHkgaGF2ZSB0byBnaXZlIGFueSBjb21tYW5kcyBhdCBhbGwuCi0uVFAKLURvd25sb2FkaW5n IEZpbGVzCi1MZXQncyBzYXkgeW91IGhhdmUgS2VybWl0IDk1LCBDXChoeUtlcm1pdCwgb3IgTVNc KGh5RE9TIEtlcm1pdCBvbiB5b3VyCi1kZXNrdG9wIGNvbXB1dGVyLCB3aXRoIGEgY29ubmVjdGlv biB0byBhIFVuaXggY29tcHV0ZXIgdGhhdCBoYXMKLUNcKGh5S2VybWl0IGluc3RhbGxlZCBhcyAi a2VybWl0Ii4gVG8gZG93bmxvYWQgYSBmaWxlIChzZW5kIGl0IGZyb20gVW5peAotdG8geW91ciBk ZXNrdG9wIGNvbXB1dGVyKSwganVzdCB0eXBlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBhdCB5b3Vy Ci1Vbml4IHNoZWxsIHByb21wdDoKLS5zcAotICBrZXJtaXQgXC1zIG9vZmEudHh0Ci0uc3AKLSh3 aGVyZSBvb2ZhLnR4dCBpcyB0aGUgZmlsZW5hbWUpLiBJZiB5b3Ugd2FudCB0byBzZW5kIG1vcmUg dGhhbiBvbmUKLWZpbGUsIHlvdSBjYW4gcHV0IGFzIG1hbnkgZmlsZW5hbWVzIGFzIHlvdSB3YW50 IG9uIHRoZSBjb21tYW5kIGxpbmUsCi1hbmQgdGhleSBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9m IHRleHQgYW5kIGJpbmFyeToKLS5zcAotICBrZXJtaXQgXC1zIG9vZmEudHh0IG9vZmEuemlwIG9v ZmEuaHRtbCBvb2ZhLnRhci5negotLnNwCi1hbmQvb3IgeW91IGNhbiB1c2Ugd2lsZGNhcmRzIHRv IHNlbmQgZ3JvdXBzIG9mIGZpbGVzOgotLnNwCi0gIGtlcm1pdCBcLXMgb29mYS4qCi0uc3AKLUlm IHlvdSB3YW50IHRvIHNlbmQgYSBmaWxlIHVuZGVyIGFuIGFzc3VtZWQgbmFtZSwgdXNlOgotLnNw Ci0gIGtlcm1pdCBcLXMgZnJpZGF5LnR4dCBcLWEgdG9kYXkudHh0Ci0uc3AKLVRoaXMgc2VuZHMg dGhlIGZpbGUgZnJpZGF5LnR4dCBidXQgdGVsbHMgdGhlIHJlY2VpdmluZyBLZXJtaXQgdGhhdCBp dHMKLW5hbWUgaXMgdG9kYXkudHh0LiBJbiBhbGwgY2FzZXMsIGFzIG5vdGVkLCB3aGVuIHRoZSBm aWxlIHRyYW5zZmVyIGlzCi1maW5pc2hlZCwgeW91ciBkZXNrdG9wIEtlcm1pdCByZXR1cm5zIGF1 dG9tYXRpY2FsbHkgdG8gQ29ubmVjdCBzdGF0ZS4KLU5vIHdvcnJpZXMgYWJvdXQgZXNjYXBpbmcg YmFjaywgcmVcKGh5Y29ubmVjdGluZywgdGV4dC9iaW5hcnkgbW9kZQotc3dpdGNoaW5nLiBBbG1v c3QgdG9vIGVhc3ksIHJpZ2h0PwotLlRQCi1VcGxvYWRpbmcgRmlsZXMKLVRvIHVwbG9hZCBmaWxl cyAoc2VuZCB0aGVtIGZyb20geW91ciBkZXNrdG9wIGNvbXB1dGVyIHRvIHRoZSByZW1vdGUKLVVu aXggY29tcHV0ZXIpIGRvIHRoZSBzYW1lIHRoaW5nLCBidXQgdXNlIHRoZSBcLWcgKEdFVCkgb3B0 aW9uIGluc3RlYWQKLW9mIFwtczoKLS5zcAotICBrZXJtaXQgXC1nIG9vZmEudHh0Ci0uc3AKLVRo aXMgY2F1c2VzIHlvdXIgbG9jYWwgS2VybWl0IHRvIGVudGVyIHNlcnZlciBtb2RlOyB0aGVuIHRo ZSByZW1vdGUKLUtlcm1pdCBwcm9ncmFtIHJlcXVlc3RzIHRoZSBuYW1lZCBmaWxlIGFuZCB0aGUg bG9jYWwgS2VybWl0IHNlbmRzIGl0Ci1hbmQgcmV0dXJucyBhdXRvbWF0aWNhbGx5IHRvIENvbm5l Y3Qgc3RhdGUgd2hlbiBkb25lLgotLnNwCi1JZiB5b3Ugd2FudCB0byB1cGxvYWQgbXVsdGlwbGUg ZmlsZXMsIHlvdSBoYXZlIGhhdmUgdXNlIHNoZWxsIHF1b3RpbmcKLXJ1bGVzLCBzaW5jZSB0aGVz ZSBhcmVuJ3QgbG9jYWwgZmlsZXM6Ci0uc3AKLS5uZgotICBrZXJtaXQgXC1nICJvb2ZhLnR4dCBv b2ZhLnppcCBvb2ZhLmh0bWwgb29mYS50YXIuZ3oiCi0gIGtlcm1pdCBcLWcgIm9vZmEuKiIKLS5m aQotLnNwCi1JZiB5b3Ugd2FudCB0byB1cGxvYWQgYSBmaWxlIGJ1dCBzdG9yZSBpdCB1bmRlciBh IGRpZmZlcmVudCBuYW1lLCB1c2U6Ci0uc3AKLSAga2VybWl0IFwtZyBmcmlkYXkudHh0IFwtYSB0 b2RheS50eHQKLS5UUAotS2VybWl0IFRyYW5zZmVycyB0aGUgT2xkXChoeUZhc2hpb25lZCBXYXkK LUlmIHlvdXIgZGVza3RvcCBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSBkb2VzIG5vdCBzdXBwb3J0 IGF1dG91cGxvYWQgb3IKLWF1dG9kb3dubG9hZCwgb3IgaXQgZG9lcyBub3QgaW5jbHVkZSBLZXJt aXQgc2VydmVyIG1vZGUsIHRoZSBwcm9jZWR1cmUKLXJlcXVpcmVzIG1vcmUgc3RlcHMuCi0uc3AK LVRvIGRvd25sb2FkIGEgZmlsZSwgdHlwZToKLS5zcAotICBrZXJtaXQgXC1zIGZpbGVuYW1lCi0u c3AKLW9uIHRoZSBob3N0IGFzIGJlZm9yZSwgYnV0IGlmIG5vdGhpbmcgaGFwcGVucyBhdXRvbWF0 aWNhbGx5IGluCi1yZXNwb25zZSB0byB0aGlzIGNvbW1hbmQsIHlvdSBoYXZlIHRvIHN3aXRjaCB5 b3VyIGRlc2t0b3AKLWNvbW11bmljYXRpb25zIHNvZnR3YXJlIGludG8gS2VybWl0IFJlY2VpdmUg c3RhdGUuIFRoaXMgbWlnaHQgYmUgZG9uZQotYnkgZXNjYXBpbmcgYmFjayB1c2luZyBrZXlib2Fy ZCBjaGFyYWN0ZXJzIG9yIGhvdCBrZXlzIChBbHRcLXggaXMKLXR5cGljYWwpIGFuZC9vciB3aXRo IGEgY29tbWFuZCAobGlrZSBSRUNFSVZFKSBvciBhIG1lbnUuIFdoZW4gdGhlIGZpbGUKLXRyYW5z ZmVyIGlzIGNvbXBsZXRlLCB5b3UgaGF2ZSB0byBnbyBiYWNrIHRvIENvbm5lY3Qgc3RhdGUsIFRl cm1pbmFsCi1lbXVsYXRpb24sIG9yIHdoYXRldmVyIHRlcm1pbm9sb2d5IGFwcGxpZXMgdG8geW91 ciBkZXNrdG9wCi1jb21tdW5pY2F0aW9ucyBzb2Z0d2FyZS4KLS5zcAotVG8gdXBsb2FkIGEgZmls ZSwgdHlwZToKLS5zcAotICBrZXJtaXQgXC1yCi0uc3AKLW9uIHRoZSBob3N0IChyYXRoZXIgdGhh biAia2VybWl0IFwtZyIpLiBUaGlzIHRlbGxzIENcKGh5S2VybWl0IHRvIHdhaXQKLXBhc3NpdmVs eSBmb3IgYSBmaWxlIHRvIHN0YXJ0IGFycml2aW5nLiBUaGVuIHJlZ2FpbiB0aGUgYXR0ZW50aW9u IG9mCi15b3VyIGRlc2t0b3Agc29mdHdhcmUgKEFsdFwteCBvciB3aGF0ZXZlcikgYW5kIGluc3Ry dWN0IGl0IHRvIHNlbmQgdGhlCi1kZXNpcmVkIGZpbGUocykgd2l0aCBLZXJtaXQgcHJvdG9jb2wu IFdoZW4gdGhlIHRyYW5zZmVyIGlzIGZpbmlzaGVkLAotcmV0dXJuIHRvIHRoZSBDb25uZWN0IG9y IFRlcm1pbmFsIHNjcmVlbi4KLS5UUAotSWYgRmlsZSBUcmFuc2ZlciBGYWlscwotQWx0aG91Z2gg ZXZlcnkgYXNwZWN0IG9mIEtlcm1pdCdzIG9wZXJhdGlvbiBjYW4gYmUgZmluZWx5IHR1bmVkLCB0 aGVyZQotYXJlIGFsc28gdGhyZWUgc2hvcnQgYW5kIHNpbXBsZSAib21uaWJ1cyB0dW5pbmciIGNv bW1hbmRzIHlvdSBjYW4gdXNlCi1mb3IgdHJvdWJsZXNob290aW5nOgotLlJTCi0uVFAKLUZBU1QK LVVzZSBmYXN0IGZpbGVcKGh5dHJhbnNmZXIgc2V0dGluZ3MuIFRoaXMgaGFzIGJlZW4gdGhlIGRl ZmF1bHQgc2luY2UKLUNcKGh5S2VybWl0IDcuMCBub3cgdGhhdCBtb3N0IG1vZGVybiBjb21wdXRl cnMgYW5kIGNvbm5lY3Rpb25zCi1zdXBwb3J0IGl0LiBJZiB0cmFuc2ZlcnMgZmFpbCB3aXRoIGZh c3Qgc2V0dGluZ3MsIHRyeSAuIC4gLgotLlRQCi1DQVVUSU9VUwotVXNlIGNhdXRpb3VzIGJ1dCBu b3QgcGFyYW5vaWQgc2V0dGluZ3MuIEZpbGUgdHJhbnNmZXJzLCBpZiB0aGV5Ci13b3JrLCB3aWxs IGdvIGF0IG1lZGl1bSBzcGVlZC4gSWYgbm90LCB0cnkgLiAuIC4KLS5UUAotUk9CVVNUCi1Vc2Ug dGhlIG1vc3Qgcm9idXN0LCByZXNpbGllbnQsIGNvbnNlcnZhdGl2ZSwgc2FmZSwgYW5kIHJlbGlh YmxlCi1zZXR0aW5ncy4gRmlsZSB0cmFuc2ZlcnMgd2lsbCBhbG1vc3QgY2VydGFpbmx5IHdvcmss IGJ1dCB0aGV5Ci13aWxsIGJlIHF1aXRlIHNsb3cgKG9mIGNvdXJzZSB0aGlzIGlzIGEgY2xhc3Np YyB0cmFkZW9mZjsgUk9CVVNUCi13YXMgQ1woaHlLZXJtaXQncyBkZWZhdWx0IHR1bmluZyBpbiB2 ZXJzaW9ucyA2LjAgYW5kIGVhcmxpZXIsIHdoaWNoCi1tYWRlIGV2ZXJ5Ym9keSB0aGluayBLZXJt aXQgcHJvdG9jb2wgd2FzIHNsb3cpLiBJZiBST0JVU1QgZG9lc24ndAotZG8gdGhlIHRyaWNrLCB0 cnkgYWdhaW4gd2l0aCBTRVQgUEFSSVRZIFNQQUNFIGZpcnN0IGluIGNhc2UgaXQncwotbm90IGFu IDhcKGh5Yml0IGNvbm5lY3Rpb24uCi0uUkUKLS5zcAotT2J2aW91c2x5IHRoZSBzdWNjZXNzIGFu ZCBwZXJmb3JtYW5jZSBvZiBhIGZpbGUgdHJhbnNmZXIgYWxzbyBkZXBlbmRzCi1vbiBDXChoeUtl cm1pdCdzIGZpbGUgdHJhbnNmZXIgcGFydG5lci4gVXBcKGh5dG9cKGh5ZGF0ZSwgcmVhbCBLZXJt aXQgUHJvamVjdAotcGFydG5lcnMgYXJlIHJlY29tbWVuZGVkIGJlY2F1c2UgdGhleSBjb250YWlu IHRoZSBiZXN0IEtlcm1pdCBwcm90b2NvbAotaW1wbGVtZW50YXRpb25zIGFuZCBiZWNhdXNlIHdl IGNhbiBzdXBwb3J0IHRoZW0gaW4gY2FzZSBvZiB0cm91YmxlLgotLnNwCi1JZiB5b3Ugc3RpbGwg aGF2ZSB0cm91YmxlLCBjb25zdWx0IENoYXB0ZXIgMTAgb2YgVXNpbmcgQ1woaHlLZXJtaXQsIG9y Ci1zZW5kIGVtYWlsIHRvIGtlcm1pdFwoaHlzdXBwb3J0QGNvbHVtYmlhLmVkdS4KLS5UUAotQWR2 YW5jZWQgS2VybWl0IEZpbGVcKGh5VHJhbnNmZXIgRmVhdHVyZXMKLU9idmlvdXNseSB0aGVyZSBp cyBhIGxvdCBtb3JlIHRvIEtlcm1pdCBmaWxlIHRyYW5zZmVyLCBpbmNsdWRpbmcgYWxsCi1zb3J0 cyBvZiBpbnRlcmFjdGl2ZSBjb21tYW5kcywgcHJlZmVyZW5jZXMsIG9wdGlvbnMsIGxvZ2dpbmcs Ci1kZWJ1Z2dpbmcsIHRyb3VibGVzaG9vdGluZywgYW5kIGFueXRoaW5nIGVsc2UgeW91IGNhbiBp bWFnaW5lIGJ1dAotdGhhdCdzIHdoYXQgdGhlIG1hbnVhbCBhbmQgdXBkYXRlcyBhcmUgZm9yLiBI ZXJlIGFyZSBhIGZldyB0b3BpY3MgeW91Ci1jYW4gZXhwbG9yZSBpZiB5b3UncmUgaW50ZXJlc3Rl ZCBieSBUeXBpbmcgSEVMUCBmb3IgdGhlIGxpc3RlZAotY29tbWFuZHM6Ci0uUlMKLS5UUAotTG9n Z2luZyB0cmFuc2ZlcnM6Ci1MT0cgVFJBTlNBQ1RJT05TIChIRUxQIExPRykKLS5UUAotQXV0b21h dGljIHBlclwoaHlmaWxlIHRleHQvYmluYXJ5IG1vZGUgc3dpdGNoaW5nOgotU0VUIFRSQU5TRkVS IE1PREUgeyBBVVRPTUFUSUMsIE1BTlVBTCB9IChIRUxQIFNFVCBUUkFOU0ZFUikuCi0uVFAKLUNy b3NzXChoeXBsYXRmb3JtIHJlY3Vyc2l2ZSBkaXJlY3RvcnkgdHJlZSB0cmFuc2ZlcjoKLVNFTkQg L1JFQ1VSU0lWRSwgR0VUIC9SRUNVUlNJVkUgKEhFTFAgU0VORCwgSEVMUCBHRVQpLgotLlRQCi1G aWxlIGNvbGxpc2lvbiBvcHRpb25zOgotU0VUIEZJTEUgQ09MTElTSU9OIHsgT1ZFUldSSVRFLCBC QUNLVVAsIERJU0NBUkQsIC4uLiB9IChIRUxQIFNFVCBGSUxFKS4KLS5UUAotVXBkYXRlOiBUcmFu c2ZlciBvbmx5IGZpbGVzIHRoYXQgY2hhbmdlZCBzaW5jZSBsYXN0IHRpbWU6Ci1TRVQgRklMRSBD T0xMSVNJT04gVVBEQVRFIChIRUxQIFNFVCBGSUxFKS4KLS5UUAotRmlsZW5hbWUgc2VsZWN0aW9u IHBhdHRlcm5zOgotKEhFTFAgV0lMRENBUkQpLgotLlRQCi1GbGV4aWJsZSBmaWxlIHNlbGVjdGlv bjoKLVNFTkQgKG9yIEdFVCkgL0JFRk9SRSAvQUZURVIgL0xBUkdFUiAvU01BTExFUiAvVFlQRSAv RVhDRVBULCAuLi4KLS5UUAotQ2hhcmFjdGVyXChoeXNldCBjb252ZXJzaW9uOgotU0VUIHsgRklM RSwgVFJBTlNGRVIgfSBDSEFSQUNURVJcLVNFVCwgQVNTT0NJQVRFLCAuLi4KLS5UUAotRmlsZS9Q YXRobmFtZSBjb250cm9sOgotU0VUIHsgU0VORCwgUkVDRUlWRSB9IFBBVEhOQU1FUywgU0VUIEZJ TEUgTkFNRVMuCi0uVFAKLUF0b21pYyBmaWxlIG1vdmVtZW50OgotU0VORCAob3IgR0VUKSAvREVM RVRFIC9SRU5BTUUgL01PVkVcLVRPCi0uVFAKLVRyYW5zZmVycmluZyB0by9mcm9tIHN0YW5kYXJk IGkvbyBvZiBvdGhlciBjb21tYW5kczoKLVNFTkQgKG9yIEdFVCkgL0NPTU1BTkQKLS5UUAotUmVj b3Zlcnkgb2YgaW50ZXJydXB0ZWQgdHJhbnNmZXIgZnJvbSBwb2ludCBvZiBmYWlsdXJlOgotUkVT RU5ELCBSRUdFVCAoSEVMUCBSRVNFTkQsIEhFTFAgUkVHRVQpLgotLlJFCi0uVFAKLU5vblwoaHlL ZXJtaXQgRmlsZSBUcmFuc2ZlcgotWW91IGNhbiBhbHNvIHVzZSBDXChoeUtlcm1pdCB0byB0cmFu c2ZlciBmaWxlcyB3aXRoIEZUUCBvciBIVFRQIEludGVybmV0Ci1wcm90b2NvbHM7IHNlZSBiZWxv dy4KLS5zcAotT24gYSByZWd1bGFyIHNlcmlhbCBvciBUZWxuZXQgY29ubmVjdGlvbiB3aGVyZSB0 aGUgb3RoZXIgY29tcHV0ZXIKLWRvZXNuJ3Qgc3VwcG9ydCBLZXJtaXQgcHJvdG9jb2wgYXQgYWxs LCB5b3UgaGF2ZSBzZXZlcmFsIG9wdGlvbnMuIEZvcgotZXhhbXBsZSwgaWYgeW91ciBkZXNrdG9w IGNvbW11bmljYXRpb25zIHNvZnR3YXJlIHN1cHBvcnRzIFptb2RlbSwgdXNlCi0icnoiIGFuZCAi c3oiIG9uIHRoZSBob3N0IHJhdGhlciB0aGFuIEtlcm1pdC4gQnV0IGlmIEtlcm1pdCBpcyB5b3Vy Ci1kZXNrdG9wIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB1c2luZyBpdCB0byBtYWtlIGNhbGxzIG9y IG5ldHdvcmsKLWNvbm5lY3Rpb25zIHRvIG90aGVyIGNvbXB1dGVycyB0aGF0IGRvbid0IHN1cHBv cnQgS2VybWl0IHByb3RvY29sIChvcgotdGhhdCBkb24ndCBoYXZlIGEgZ29vZCBpbXBsZW1lbnRh dGlvbiBvZiBpdCksIHRoZW4gaWYgeW91ciBjb21wdXRlcgotYWxzbyBoYXMgZXh0ZXJuYWwgWCwg WSwgb3IgWm1vZGVtIHByb2dyYW1zIHRoYXQgYXJlIHJlZGlyZWN0YWJsZSwKLUtlcm1pdCBjYW4g dXNlIHRoZW0gYXMgZXh0ZXJuYWwgcHJvdG9jb2xzLiBIRUxQIFNFVCBQUk9UT0NPTCBmb3IKLWRl dGFpbHMuCi0uc3AKLVlvdSBjYW4gYWxzbyBjYXB0dXJlICJyYXciIGRhdGEgc3RyZWFtcyBmcm9t IHRoZSBvdGhlciBjb21wdXRlciB3aXRoCi1MT0cgU0VTU0lPTiAoSEVMUCBMT0cgYW5kIEhFTFAg U0VUIFNFU1NJT05cLUxPRyBmb3IgZGV0YWlscyksIGFuZCB5b3UKLWNhbiB1cGxvYWQgZmlsZXMg d2l0aG91dCBhbnkgcHJvdG9jb2wgYXQgYWxsIHdpdGggVFJBTlNNSVQgKEhFTFAKLVRSQU5TTUlU LCBIRUxQIFNFVCBUUkFOU01JVCkuCi0uU0ggS0VSTUlUJ1MgQlVJTFRcKGh5SU4gRlRQIEFORCBI VFRQIENMSUVOVFMKLUtlcm1pdCdzIEZUUCBjbGllbnQgaXMgbGlrZSB0aGUgcmVndWxhciBVbml4 IEZUUCBjbGllbnQgdGhhdCB5b3UncmUgdXNlZAotdG8sIGJ1dCB3aXRoIHNvbWUgZGlmZmVyZW5j ZXM6Ci0uVFAKLVwoYnUKLUl0IGhhcyBsb3RzIG1vcmUgY29tbWFuZHMgYW5kIGZlYXR1cmVzLgot LlRQCi1cKGJ1Ci1FYWNoIEZUUCBjb21tYW5kIG11c3QgYmUgcHJlZml4ZWQgd2l0aCAiZnRwIiwg Zm9yIGV4YW1wbGUgImZ0cCBvcGVuIiwKLSJmdHAgZ2V0IiwgImZ0cCBieWUiLCBldGMgKHRoaXMg aXMgbm90IHN0cmljdGx5IHRydWUsIGJ1dCB1bnRpbCB5b3UncmUKLW1vcmUgZmFtaWxpYXIgd2l0 aCBpdCwgaXQncyBiZXN0IHRvIGZvbGxvdyB0aGlzIHJ1bGUpLgotLlRQCi1cKGJ1Ci1Db21tYW5k cyBsaWtlICJjZCIsICJkaXJlY3RvcnkiLCBldGMsIGV4ZWN1dGUgbG9jYWxseSwgbm90IG9uIHRo ZQotc2VydmVyLiBVc2UgImZ0cCBjZCIsICJmdHAgZGlyIiwgZXRjLCB0byBoYXZlIHRoZW0gYWN0 IG9uIHRoZSBzZXJ2ZXIuCi0uVFAKLVwoYnUKLVlvdSBjYW4gaGF2ZSBhbiBGVFAgc2Vzc2lvbiBh bmQgYSByZWd1bGFyIEtlcm1pdCBzZXJpYWwgb3IgVGVsbmV0Ci1zZXNzaW9uIG9wZW4gYXQgdGhl IHNhbWUgdGltZS4KLS5UUAotXChidQotRlRQIHNlc3Npb25zIGNhbiBiZSBmdWxseSBhdXRvbWF0 ZWQuCi0uUFAKLVBlbmRpbmcgcHVibGljYXRpb24gb2YgdGhlIG5leHQgZWRpdGlvbiBvZiB0aGUg bWFudWFsLCB0aGUgS2VybWl0IEZUUAotY2xpZW50IGlzIHRob3JvdWdobHkgZG9jdW1lbnRlZCBh dCB0aGUgS2VybWl0IFByb2plY3Qgd2Vic2l0ZToKLS5zcAotICBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvZnRwY2xpZW50Lmh0bWwKLS5zcAotWW91IGFsc28gY2FuIHVzZSBIRUxQIEZU UCBhbmQgSEVMUCBTRVQgRlRQIHRvIGdldCBkZXNjcmlwdGlvbnMgb2YgS2VybWl0J3MKLUZUUFwo aHlyZWxhdGVkIGNvbW1hbmRzLgotLlBQCi1UaGUgSFRUUCBjbGllbnQgaXMgc2ltaWxhciB0byB0 aGUgRlRQIG9uZSwgZXhjZXB0IHlvdSBwcmVmaXggZWFjaCBjb21tYW5kCi13aXRoIEhUVFAgaW5z dGVhZCBvZiBGVFA6IEhUVFAgT1BFTiwgSFRUUCBHRVQsIEhUVFAgUFVULCBIVFRQIENMT1NFLCBl dGMuCi1UeXBlIEhFTFAgSFRUUCBmb3IgZGV0YWlscywgb3IgdmlzaXQgdGhlIHRvIHZpZXcgdGhl IG1hbnVhbCBzdXBwbGVtZW50cy4KLUhUVFAgY29ubmVjdGlvbnMgY2FuIGJlIG9wZW4gYXQgdGhl IHNhbWUgdGltZSBhcyByZWd1bGFyIHNlcmlhbCBvciBUZWxuZXQKLWNvbm5lY3Rpb25zIGFuZCBG VFAgY29ubmVjdGlvbnMuIFNvIEtlcm1pdCBjYW4gbWFuYWdlIHVwIHRvIHRocmVlIHR5cGVzCi1j b25uZWN0aW9ucyBzaW11bHRhbmVvdXNseS4KLS5TSCBJTlRFUk5FVCBLRVJNSVQgU0VSVklDRQot Q1woaHlLZXJtaXQgY2FuIGJlIGNvbmZpZ3VyZWQgYW5kIHJ1biBhcyBhbiBJbnRlcm5ldCBzZXJ2 aWNlIChjYWxsZWQgSUtTRCksCi1zaW1pbGFyIHRvIGFuIEZUUCBzZXJ2ZXIgKEZUUEQpIGV4Y2Vw dCB5b3UgY2FuIChidXQgbmVlZCBub3QpIGludGVyYWN0IHdpdGgKLWl0IGRpcmVjdGx5LCBwbHVz IGl0IGRvZXMgYSBsb3QgbW9yZSB0aGFuIGFuIEZUUCBzZXJ2ZXIgY2FuIGRvLiBUaGUgVENQCi1w b3J0IGZvciBJS1NEIGlzIDE2NDkuIEl0IHVzZXMgVGVsbmV0IHByb3RvY29sLiBDXChoeUtlcm1p dCBjYW4gYmUgYW4gSW50ZXJuZXQKLUtlcm1pdCBTZXJ2ZXIsIG9yIGl0IGNhbiBiZSBhIGNsaWVu dCBvZiBhbiBJS1NELiBZb3UgY2FuIG1ha2UgY29ubmVjdGlvbnMKLWZyb20gQ1woaHlLZXJtaXQg dG8gYW4gSUtTRCB3aXRoIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgotLnNwCi0ubmYK LSAgdGVsbmV0IGZvby5iYXIuZWR1IDE2NDkKLSAgdGVsbmV0IGZvby5iYXIuZWR1IGtlcm1pdCAg IDsgaWYgImtlcm1pdCIgaXMgbGlzdGVkIGluIC9ldGMvc2VydmljZXMKLSAgaWtzZCBmb28uYmFy LmVkdQotLmZpCi0uc3AKLVRoZSBJS1NEIGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0byBhIFRFTE5F VCBjb21tYW5kIHNwZWNpZnlpbmcgcG9ydCAxNjQ5LgotRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJv dXQgbWFraW5nIGFuZCB1c2luZyBjb25uZWN0aW9ucyB0byBhbiBJS1NELCBzZWU6Ci0uc3AKLSAg aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1aWtzZC5odG1sCi0uc3AKLVlvdSBjYW4g cnVuIGFuIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlIG9uIHlvdXIgb3duIGNvbXB1dGVyIHRvbyAo aWYgeW91IGFyZQotdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yKS4gRm9yIGluc3RydWN0aW9ucywg c2VlOgotLnNwCi0gIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pa3NkLmh0bWwKLS5T SCBTRUNVUklUWQotQWxsIG9mIENcKGh5S2VybWl0J3MgYnVpbHRcKGh5aW4gVENQL0lQIG5ldHdv cmtpbmcgbWV0aG9kcyAoVGVsbmV0LCBSbG9naW4sIElLU0QsCi1GVFAsIGFuZCBIVFRQKSBjYW4g YmUgc2VjdXJlZCBieSBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIElFVEZcKGh5YXBwcm92 ZWQKLW1ldGhvZHM6Ci0uUFAKLVwoYnUJTUlUIEtlcmJlcm9zIElWCi0uYnIKLVwoYnUJTUlUIEtl cmJlcm9zIFYKLS5icgotXChidQlTU0wvVExTCi0uYnIKLVwoYnUJU3RhbmZvcmQgU1JQCi0uUFAK LUZvciBjb21wbGV0ZSBpbnN0cnVjdGlvbnMgc2VlOgotLlBQCi0gIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9zZWN1cml0eS5odG1sCi0uUFAKLUFuZCBhcyBub3RlZCBwcmV2aW91c2x5 LCB5b3UgY2FuIGFsc28gbWFrZSBTU0ggY29ubmVjdGlvbnMgd2l0aCBDXChoeUtlcm1pdCBpZgot eW91IGFscmVhZHkgaGF2ZSBhbiBTU0ggY2xpZW50IGluc3RhbGxlZC4KLS5TSCBBTFRFUk5BVElW RSBDT01NQU5EXChoeUxJTkUgUEVSU09OQUxJVElFUwotV2hlbiBpbnZva2VkIGFzICJrZXJtaXQi IG9yIGFueSBvdGhlciBuYW1lIGJlc2lkZXMgImZ0cCIgb3IgInRlbG5ldCIsCi1DXChoeUtlcm1p dCBoYXMgdGhlIGNvbW1hbmRcKGh5bGluZSBvcHRpb25zIGRlc2NyaWJlZCBhYm92ZSBpbiB0aGUg T1BUSU9OUwotc2VjdGlvbi4gSG93ZXZlciwgaWYgeW91IGludm9rZSBDXChoeUtlcm1pdCBhcyAi dGVsbmV0IiBvciAiZnRwIiwgaXQgY2hhbmdlcwotaXRzIGNvbW1hbmRcKGh5bGluZSBwZXJzb25h bGl0eSB0byBtYXRjaC4gVGhpcyBjYW4gYmUgZG9uZSAoYW1vbmcgb3RoZXIgd2F5cykKLXdpdGgg c3ltYm9saWMgbGlua3MgKHN5bWxpbmtzKS4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IENcKGh5 S2VybWl0IHRvIGJlCi15b3VyIHJlZ3VsYXIgVGVsbmV0IGNsaWVudCwgb3IgdGhlIFRlbG5ldCBo ZWxwZXIgb2YgeW91ciBXZWIgYnJvd3NlciwgeW91Ci1jYW4gY3JlYXRlIGEgbGluayBsaWtlIHRo ZSBmb2xsb3dpbmcgaW4gYSBkaXJlY3RvcnkgdGhhdCBsaWVzIGluIHlvdXIgUEFUSAotYWhlYWQg b2YgdGhlIHJlZ3VsYXIgdGVsbmV0IHByb2dyYW06Ci0uc3AKLSAgbG4gXC1zIC91c3IvbG9jYWwv YmluL2tlcm1pdCB0ZWxuZXQKLS5zcAotTm93IHdoZW4geW91IGdpdmUgYSAidGVsbmV0IiBjb21t YW5kLCB5b3UgYXJlIGludm9raW5nIEtlcm1pdCBpbnN0ZWFkLCBidXQKLXdpdGggaXRzIFRlbG5l dCBjb21tYW5kXChoeWxpbmUgcGVyc29uYWxpdHkgc28sIGZvciBleGFtcGxlOgotLnNwCi0gIHRl bG5ldCB4eXpjb3JwLmNvbQotLnNwCi1NYWtlcyBhIFRlbG5ldCBjb25uZWN0aW9uIHRvIHh5emNv cnAuY29tLCBhbmQgS2VybWl0IGV4aXRzIGF1dG9tYXRpY2FsbHkKLXdoZW4gdGhlIGNvbm5lY3Rp b24gaXMgY2xvc2VkIChqdXN0IGxpa2UgdGhlIHJlZ3VsYXIgVGVsbmV0IGNsaWVudCkuIFR5cGUK LSJ0ZWxuZXQgXC1oIiB0byBnZXQgYSBsaXN0IG9mIEtlcm1pdCdzIFRlbG5ldFwoaHlwZXJzb25h bGl0eSBjb21tYW5kXChoeWxpbmUKLW9wdGlvbnMsIHdoaWNoIGFyZSBpbnRlbmRlZCB0byBiZSBh cyBjb21wYXRpYmxlIGFzIHBvc3NpYmxlIHdpdGggdGhlCi1yZWd1bGFyIFRlbG5ldCBjbGllbnQu Ci0uUFAKLVNpbWlsYXJseSBmb3IgRlRQOgotLnNwCi0gIGxuIFwtcyAvdXNyL2xvY2FsL2Jpbi9r ZXJtaXQgZnRwCi0uc3AKLUFuZCBub3cgdHlwZSAiZnRwIFwtaCIgdG8gc2VlIGl0cyBjb21tYW5k XChoeWxpbmUgb3B0aW9ucywgYW5kIGNvbW1hbmQgbGluZXMKLWp1c3QgbGlrZSB5b3Ugd291bGQg Z2l2ZSB5b3VyIHJlZ3VsYXIgRlRQIGNsaWVudDoKLS5zcAotICBmdHAgeHl6Y29ycC5jb20KLS5z cAotYnV0IHdpdGggYWRkaXRpb25hbCBvcHRpb25zIGFsbG93aW5nIGFuIGVudGlyZSBzZXNzaW9u IHRvIGJlIHNwZWNpZmllZCBvbgotdGhlIGNvbW1hbmQgbGluZS4gRmluYWxseSwgaWYgS2VybWl0 J3MKLWZpcnN0IGNvbW1hbmRcKGh5bGluZSBvcHRpb24gaXMgYSBUZWxuZXQsIEZUUCwgSUtTRCwg b3IgSFRUUCBVUkwsIEtlcm1pdAotYXV0b21hdGljYWxseSBtYWtlcyB0aGUgYXBwcm9wcmlhdGUg a2luZCBvZiBjb25uZWN0aW9uIGFuZCwgaWYgaW5kaWNhdGVkIGJ5Ci10aGUgVVJMLCB0YWtlcyB0 aGUgZGVzaXJlZCBhY3Rpb246Ci0uVFAKLWtlcm1pdCB0ZWxuZXQ6eHl6Y29ycC5jb20KLU9wZW5z IGEgVGVsbmV0IHNlc3Npb24KLS5UUAota2VybWl0IHRlbG5ldDovL29sZ2FAeHl6Y29ycC5jb20K LURpdHRvIGZvciB1c2VyIG9sZ2EKLS5UUAota2VybWl0IGZ0cDovL29sZ2FAeHl6Y29ycC5jb20v cHVibGljL29vZmEuemlwCi1Eb3dubG9hZHMgYSBmaWxlCi0uVFAKLWtlcm1pdCBrZXJtaXQ6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL1JFQUQuTUUKLURpdHRvIGZvciBJS1NECi0uVFAK LWtlcm1pdCBpa3NkOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9SRUFELk1FCi0oVGhp cyB3b3JrcyB0b28pCi0uVFAKLWtlcm1pdCBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv aW5kZXguaHRtbAotR3JhYnMgYSB3ZWIgcGFnZQotLmZpCi0uU0ggTElDRU5TRQotQ1woaHlLZXJt aXQgaGFzIGFuIHVudXN1YWwgbGljZW5zZSwgYnV0IGEgZmFpciBhbmQgc2Vuc2libGUgb25lIHNp bmNlIHRoZQotS2VybWl0IFByb2plY3QgbXVzdCBzdXBwb3J0IGl0c2VsZiBvdXQgb2YgcmV2ZW51 ZTogaXQncyBub3QgYSBCU0QgbGljZW5zZSwKLW5vdCBHUEwsIG5vdCBBcnRpc3RpYywgbm90IGNv bW1lcmNpYWwsIG5vdCBzaGFyZXdhcmUsIG5vdCBmcmVld2FyZS4gSXQgY2FuCi1iZSBzdW1tZWQg dXAgbGlrZSB0aGlzOiBpZiB5b3Ugd2FudCBDXChoeUtlcm1pdCBmb3IgeW91ciBvd24gdXNlLCB5 b3UgY2FuCi1kb3dubG9hZCBhbmQgdXNlIGl0IHdpdGhvdXQgY29zdCBvciBsaWNlbnNlIChidXQg d2UnZCBhcHByZWNpYXRlIGl0IGlmIHlvdQotd291bGQgcHVyY2hhc2UgdGhlIG1hbnVhbCkuIEJ1 dCBpZiB5b3Ugd2FudCB0byBzZWxsIENcKGh5S2VybWl0IG9yIGJ1bmRsZSBpdAotd2l0aCBhIHBy b2R1Y3Qgb3Igb3RoZXJ3aXNlIGRpc3RyaWJ1dGUgaXQgaW4gYSBjb21tZXJjaWFsIHNldHRpbmcg RVhDRVBUCi1XSVRIIEFOIE9QRU5cKGh5U09VUkNFIE9QRVJBVElORyBTWVNURU0gRElTVFJJQlVU SU9OIHN1Y2ggYXMgTGludXgsIEZyZWVCU0QsCi1OZXRCU0QsIG9yIE9wZW5CU0QsIHlvdSBtdXN0 IGxpY2Vuc2UgaXQuIFRvIHNlZSB0aGUgY29tcGxldGUgbGljZW5zZSwgZ2l2ZQotdGhlIExJQ0VO U0UgY29tbWFuZCBhdCB0aGUgcHJvbXB0LCBvciBzZWUgdGhlIENPUFlJTkcuVFhUIGZpbGUgZGlz dHJpYnV0ZWQKLXdpdGggQ1woaHlLZXJtaXQgNy4wIG9yIGxhdGVyLCBvciBkb3dubG9hZCBpdCBm cm9tCi0uc3AKLSAgZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvY1wta2VybWl0L0NP UFlJTkcuVFhUCi0uc3AKLVNlbmQgbGljZW5zaW5nIGlucXVpcmllcyB0byBrZXJtaXRAY29sdW1i aWEuZWR1LgotLlNIIEJVR1MKLVNlZSB0aGUgZm9sbG93aW5nIGZpbGVzIGZvciBsaXN0aW5ncyBv ZiBrbm93biBidWdzLCBsaW1pdGF0aW9ucywKLXdvcmthcm91bmRzLCBoaW50cyBhbmQgdGlwczoK LS5UUAotY2tjYndyLnR4dAotR2VuZXJhbCBDXChoeUtlcm1pdCBidWdzLCBoaW50cywgdGlwcy4K LS5UUAotY2t1YndyLnR4dAotVW5peFwoaHlzcGVjaWZpYyBDXChoeUtlcm1pdCBidWdzLCBoaW50 cywgdGlwcy4KLS5QUAotUmVwb3J0IGJ1Z3MgYW5kIHByb2JsZW1zIGJ5IGVtYWlsIHRvOgotLnNw Ci0gICBrZXJtaXRcLXN1cHBvcnRAY29sdW1iaWEuZWR1LgotLnNwCi1CZWZvcmUgcmVxdWVzdGlu ZyB0ZWNobmljYWwgc3VwcG9ydCwgcGxlYXNlIHJlYWQgdGhlIGhpbnRzIGhlcmU6Ci0uc3AKLSAg aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRtbAotLnNwCi1hbmQgYWxz byByZWFkIHRoZSBDXChoeUtlcm1pdCBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uczoKLS5zcAot ICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAotLlNIIE9USEVSIFRP UElDUwotVGhlcmUncyB3YXkgbW9yZSB0byBDXChoeUtlcm1pdCB0aGFuIHdlJ3ZlIHRvdWNoZWQg b24gaGVyZSBcKGh5XChoeSB0cm91Ymxlc2hvb3RpbmcsCi1jdXN0b21pemF0aW9uLCBjaGFyYWN0 ZXIgc2V0cywgZGlhbGluZyBkaXJlY3Rvcmllcywgc2VuZGluZyBwYWdlcywgc2NyaXB0Ci13cml0 aW5nLCBhbmQgb24gYW5kIG9uLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgaW4gdGhlIG1hbnVh bCBhbmQgdXBkYXRlcwotYW5kIHN1cHBsZW1lbnRzLiBGb3IgdGhlIG1vc3QgdXBcKGh5dG9cKGh5 ZGF0ZSBpbmZvcm1hdGlvbiBvbiBkb2N1bWVudGF0aW9uIChvcgotdXBkYXRlZCBkb2N1bWVudGF0 aW9uIGl0c2VsZikgdmlzaXQgdGhlIEtlcm1pdCBQcm9qZWN0IHdlYnNpdGU6Ci0uc3AKLSAgaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LwotLlBQCi1UaGVyZSB5b3Ugd2lsbCBhbHNvIGZp bmQgS2VybWl0IHNvZnR3YXJlIHBhY2thZ2VzIGZvciBvdGhlciBwbGF0Zm9ybXM6Ci1kaWZmZXJl bnQgVW5peCB2YXJpZXRpZXMsIFdpbmRvd3MsIERPUywgVk1TLCBJQk0gbWFpbmZyYW1lcywgYW5k IG1hbnkKLW90aGVyczogMjArIHllYXJzJyB3b3J0aC4KLS5TSCBET0NVTUVOVEFUSU9OIEFORCBV UERBVEVTCi1UaGUgbWFudWFsIGZvciBDXChoeUtlcm1pdCBpczoKLS5UUAotLkkKLVVzaW5nIENc KGh5S2VybWl0Ci1GcmFuayBkYSBDcnV6IGFuZCBDaHJpc3RpbmUgTS4gR2lhbm9uZSwKLVNlY29u ZCBFZGl0aW9uLCBEaWdpdGFsIFByZXNzIC8gQnV0dGVyd29ydGhcKGh5SGVpbmVtYW5uLCBXb2J1 cm4sIE1BLCAxOTk3LCA2MjIKLXBhZ2VzLCBJU0JOIDFcLTU1NTU4XC0xNjRcLTEuIFRoaXMgaXMg YSBwcmludGVkIGJvb2suIEl0IGNvdmVycyBDXChoeUtlcm1pdCA2LjAuCi0uVFAKLVRoZSBDXCho eUtlcm1pdCA3LjAgU3VwcGxlbWVudAotaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sCi0uVFAKLVRoZSBDXChoeUtlcm1pdCA4LjAgU3VwcGxlbWVudAotaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sCi0uVFAKLVRoZSBDXChoeUtl cm1pdCA5LjAgU3VwcGxlbWVudAotaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ5MC5odG1sCi0uUFAKLVZpc2l0IENcKGh5S2VybWl0IGhvbWUgcGFnZToKLS5zcAotICBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0uc3AKLXRvIGxlYXJuIGFi b3V0IG5ldyB2ZXJzaW9ucywgQmV0YSB0ZXN0cywgYW5kIG90aGVyIG5ld3M7IHRvCi1yZWFkIGNh c2Ugc3R1ZGllcyBhbmQgdHV0b3JpYWxzOyB0byBkb3dubG9hZCBzb3VyY2UgY29kZSwgaW5zdGFs bCBwYWNrYWdlcywKLWFuZCBwcmVidWlsdCBiaW5hcmllcyBmb3IgbWFueSBwbGF0Zm9ybXMuIEFs c28gdmlzaXQ6Ci0uVFAKLWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zY3JpcHRsaWIu aHRtbAotVGhlIEtlcm1pdCBzY3JpcHQgbGlicmFyeSBhbmQgdHV0b3JpYWwKLS5UUAotaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L25ld2ZhcS5odG1sCi1UaGUgS2VybWl0IEZBUSAoRnJl cXVlbnRseSBBc2tlZCBRdWVzdGlvbnMgYWJvdXQgS2VybWl0KQotLlRQCi1odHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAotVGhlIENcKGh5S2VybWl0IEZBUSAoRnJlcXVl bnRseSBBc2tlZCBRdWVzdGlvbnMgYWJvdXQgQ1woaHlLZXJtaXQpCi0uVFAKLWh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC90ZWxuZXQuaHRtbAotQ1woaHlLZXJtaXQgVGVsbmV0IGNsaWVu dCBkb2N1bWVudGF0aW9uCi0uVFAKLWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1 cml0eS5odG1sCi1DXChoeUtlcm1pdCBzZWN1cml0eSBkb2N1bWVudGF0aW9uIChLZXJiZXJvcywg U1NML1RMUywgZXRjKQotLlRQCi1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3Vpa3Nk Lmh0bWwKLUludGVybmV0IEtlcm1pdCBTZXJ2aWNlIHVzZXIgZG9jdW1lbnRhdGlvbgotLlRQCi1o dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaWtzZC5odG1sCi1JbnRlcm5ldCBLZXJtaXQg U2VydmljZSBhZG1pbmlzdHJhdG9yIGRvY3VtZW50YXRpb24KLS5UUAotaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L3N0dWRpZXMuaHRtbAotQ2FzZSBzdHVkaWVzLgotLlRQCi1odHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCi1UZWNobmljYWwgc3VwcG9ydC4K LS5UUAotaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2s5NXR1dG9yaWFsLmh0bWwKLUtl cm1pdCA5NSB0dXRvcmlhbC4KLS5UUAotY29tcC5wcm90b2NvbHMua2VybWl0Lm1pc2MKLVRoZSBL ZXJtaXQgbmV3c2dyb3VwICh1bm1vZGVyYXRlZCkuCi0uU0ggRklMRVMKLS5UUAotQ09QWUlORy5U WFQKLUNcKGh5S2VybWl0IGxpY2Vuc2UuCi0uVFAKLX4vLmtlcm1yYwotSW5pdGlhbGl6YXRpb24g ZmlsZS4KLS5UUAotfi8ubXlrZXJtcmMKLUN1c3RvbWl6YXRpb24gZmlsZS4KLS5UUAotfi8ua2Rk Ci1LZXJtaXQgZGlhbGluZyBkaXJlY3RvcnkgKHNlZSBtYW51YWwpLgotLlRQCi1+Ly5rbmQKLUtl cm1pdCBuZXR3b3JrIGRpcmVjdG9yeSAoc2VlIG1hbnVhbCkuCi0uVFAKLX4vLmtzZAotS2VybWl0 IHNlcnZpY2VzIGRpcmVjdG9yeSAoc2VlIG1hbnVhbCkuCi0uVFAKLWNhX2NlcnRzLnBlbQotQ2Vy dGlmaWNhdGUgQXV0aG9yaXR5IGNlcnRpZmNhdGVzIHVzZWQgZm9yIFNTTCBjb25uZWN0aW9ucy4K LS5UUAotY2t1aW5zLnR4dAotSW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBmb3IgVW5peC4gIEFs c28gYXQKLWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbC4KLS5UUAot Y2tjYndyLnR4dAotR2VuZXJhbCBDXChoeUtlcm1pdCBidWdzLCBoaW50cywgdGlwcy4KLS5UUAot Y2t1YndyLnR4dAotVW5peFwoaHlzcGVjaWZpYyBDXChoeUtlcm1pdCBidWdzLCBoaW50cywgdGlw cy4KLS5UUAotY2tjcGxtLnR4dAotQ1woaHlLZXJtaXQgcHJvZ3JhbSBsb2dpYyBtYW51YWwuCi0u VFAKLWNrY2NmZy50eHQKLUNcKGh5S2VybWl0IGNvbXBpbGVcKGh5dGltZSBjb25maWd1cmF0aW9u IG9wdGlvbnMuCi0uVFAKLXNzaAotKGluIHlvdXIgUEFUSCkgU1NIIGNvbm5lY3Rpb24gaGVscGVy LgotLlRQCi1yeiwgc3osIGV0Yy4KLShpbiB5b3VyIFBBVEgpIGV4dGVybmFsIHByb3RvY29scyBm b3IgWFlabW9kZW0uCi0uVFAKLS92YXIvc3Bvb2wvbG9ja3MgKG9yIHdoYXRldmVyKQotVVVDUCBs b2NrZmlsZSBmb3IgZGlhbGluZyBvdXQgKHNlZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zKS4K LS5TSCBBVVRIT1JTCi0uVFAKLVNvZnR3YXJlCi1GcmFuayBkYSBDcnV6IGFuZCBKZWZmcmV5IEUg QWx0bWFuLAotLmJyCi0xOTg1XChoeXByZXNlbnQsIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIGh1 bmRyZWRzIG9mIG90aGVycyBhbGwgb3ZlciB0aGUKLXdvcmxkLgotLlRQCi1Eb2N1bWVudGF0aW9u Ci1GcmFuayBkYSBDcnV6Ci0uVFAKLUFkZHJlc3MKLS5uZgotVGhlIEtlcm1pdCBQcm9qZWN0IFwo aHkgQ29sdW1iaWEgVW5pdmVyaXR5Ci02MTIgV2VzdCAxMTV0aCBTdHJlZXQKLU5ldyBZb3JrIE5Z IDEwMDI1XC03Nzk5Ci1VU0EKLS5maQotLlRQCi1FXChoeU1haWwKLWtlcm1pdEBjb2x1bWJpYS5l ZHUKLS5UUAotV2ViCi1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0uZmkKLS5icgoK ZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1cHR5 LmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXB0eS5jCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTA0NzZiLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1cHR5LmMKKysrIC9kZXYvbnVsbApAQCAt MSwxOTgzICswLDAgQEAKLWNoYXIgKmNrcHR5diA9ICJQc2V1ZG90ZXJtaW5hbCBzdXBwb3J0LCA5 LjAuMTAxLCAxMyBKdW4gMjAxMSI7Ci0KLS8qICBDIEsgVSBQIFQgWSAgLS0gIEMtS2VybWl0IHBz ZXVkb3Rlcm1pbmFsIGNvbnRyb2wgZnVuY3Rpb25zIGZvciBVTklYICAqLwotCi0vKiBMYXN0IHVw ZGF0ZTogTW9uIEp1biAxMyAxMTozMjo1MiAyMDExICovCi0KLS8qCi0gIENvcHlyaWdodCAxOTk1 IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgotCi0gIFBlcm1p c3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUg YW5kIGl0cwotICBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUg aXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkCi0gIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0Ci0gIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcK LSAgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2Vk IGluIGFkdmVydGlzaW5nIG9yCi0gIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlv biBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKLSAgd3JpdHRlbiBwcmlvciBwZXJt aXNzaW9uLiAgRnVydGhlcm1vcmUgaWYgeW91IG1vZGlmeSB0aGlzIHNvZnR3YXJlIHlvdSBtdXN0 Ci0gIGxhYmVsIHlvdXIgc29mdHdhcmUgYXMgbW9kaWZpZWQgc29mdHdhcmUgYW5kIG5vdCBkaXN0 cmlidXRlIGl0IGluIHN1Y2ggYQotICBmYXNoaW9uIHRoYXQgaXQgbWlnaHQgYmUgY29uZnVzZWQg d2l0aCB0aGUgb3JpZ2luYWwgTS5JLlQuIHNvZnR3YXJlLgotICBNLkkuVC4gbWFrZXMgbm8gcmVw cmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvcgot ICBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9y IGltcGxpZWQgd2FycmFudHkuCi0KLSAgTW9kaWZpZWQgZm9yIHVzZSBpbiBDLUtlcm1pdCwgYW5k IG5ldyBtYXRlcmlhbCBhZGRlZCwgYnk6Ci0KLSAgSmVmZnJleSBBbHRtYW4gPGphbHRtYW5Ac2Vj dXJlLWVuZHBvaW50cy5jb20+Ci0gIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0 eQotICBOb3ZlbWJlciAxOTk5Ci0KLSAgUGFyYW1ldGVyaXplZCBmb3IgcHR5IGZpbGUgZGVzY3Jp cHRvciBhbmQgZnVuY3Rpb24gY29kZSwKLSAgRnJhbmsgZGEgQ3J1eiwgQ29sdW1iaWEgVW5pdmVy c2l0eSwgTmV3IFlvcmsgQ2l0eQotICBEZWMgMjAwNiAtIFNlcCAyMDA5Ci0qLwotCi0vKgotICBC dWlsdCBhbmQgdGVzdGVkIHN1Y2Nlc3N1bGx5IG9uOgotICAgLiA0LjRCU0QsIGluY2x1ZGluZyBC U0RJL09TLCBOZXRCU0QsIEZyZWVCU0QsIE9wZW5CU0QsIE1hYyBPUyBYCi0gICAuIEFJWCA0LjEg YW5kIGxhdGVyCi0gICAuIERHL1VYIDUuNFI0LjExCi0gICAuIERpZ2l0YWwgVU5JWCAzLjIgYW5k IDQuMAotICAgLiBIUC1VWCA5LjAwIGFuZCBsYXRlcgotICAgLiBJUklYIDYuMCBhbmQgbGF0ZXIK LSAgIC4gTGludXgKLSAgIC4gTWFjIE9TIFggMTAuNAotICAgLiBOZVhUU1RFUCAzLngKLSAgIC4g T3BlbkJTRAotICAgLiBRTlggNC4yNSAoZXhjZXB0IFBUWSBwcm9jZXNzIHRlcm1pbmF0aW9uIG5v dCBkZXRlY3RlZCkKLSAgIC4gU0NPIE9TUjUuMC41Ci0gICAuIFNDTyBVbml4d2FyZSA3Ci0gICAu IFNJTklYIDUuNDIKLSAgIC4gU29sYXJpcyAyLnggYW5kIDcKLSAgIC4gU3VuT1MgNC4xLjMKLQot ICBGYWlsdXJlcyBpbmNsdWRlOgotICAgLiBTQ08gVU5JWCAzLjJ2NC4yIChjb21waWxlIGZhaWxz IHdpdGggc3ludGF4IGVycm9yIGluIDxtZW1vcnkuaD4pCi0gICAuIEhQLVVYIDguMDAgYW5kIGVh cmxpZXIgKG5vIHZoYW5ndXAgb3IgcHRzbmFtZSByb3V0aW5lcykKLSovCi0KLSNpbmNsdWRlICJj a2NzeW0uaCIKLSNpbmNsdWRlICJja2NkZWIuaCIJCQkvKiBUbyBwaWNrIHVwIE5FVFBUWSBkZWZp bml0aW9uICovCi0KLSNpZm5kZWYgTkVUUFRZCQkJCS8qIFNlbGVjdG9yIGZvciBQVFkgc3VwcG9y dCAqLwotCi1jaGFyICogcHR5dmVyID0gIk5vIFBUWSBzdXBwb3J0IjsKLQotI2Vsc2UgIC8qIChy ZXN0IG9mIHRoaXMgbW9kdWxlLi4uKSAqLwotCi1jaGFyICogcHR5dmVyID0gIlBUWSBzdXBwb3J0 IDguMC4wMTYsIDIyIEF1ZyAyMDA3IjsKLQotLyogVGhlc2Ugd2lsbCBubyBkb3VidCBuZWVkIGFk anVzdG1lbnQuLi4gKi8KLQotI2lmbmRlZiBORVhUCi0jZGVmaW5lIEhBVkVfU0VUU0lECi0jZW5k aWYgLyogTkVYVCAqLwotI2RlZmluZSBIQVZFX0tJTExQRwotI2RlZmluZSBIQVZFX1RUWU5BTUUK LSNkZWZpbmUgSEFWRV9XQUlUUElECi0KLSNpZmRlZiBTVU5PUzQxCi0jZGVmaW5lIEJTRDQ0T1JQ T1NJWAotI2VuZGlmCS8qIFNVTk9TNDEgKi8KLQotI2lmbmRlZiBVU0VfVEVSTUlPCi0jaWZkZWYg TElOVVgKLSNkZWZpbmUgVVNFX1RFUk1JTwotI2Vsc2UKLSNpZmRlZiBBVFRTVgotI2RlZmluZSBV U0VfVEVSTUlPCi0jZWxzZQotI2lmZGVmIEhQVVgKLSNkZWZpbmUgVVNFX1RFUk1JTwotI2Vsc2UK LSNpZmRlZiBBSVgKLSNkZWZpbmUgVVNFX1RFUk1JTwotI2Vsc2UKLSNpZmRlZiBCU0Q0NE9SUE9T SVgKLSNkZWZpbmUgVVNFX1RFUk1JTwotI2Vsc2UKLSNpZmRlZiBJUklYNjAKLSNkZWZpbmUgVVNF X1RFUk1JTwotI2Vsc2UKLSNpZmRlZiBRTlgKLSNkZWZpbmUgVVNFX1RFUk1JTwotI2VuZGlmIC8q IFFOWCAqLwotI2VuZGlmIC8qIElSSVg2MCAqLwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwot I2VuZGlmIC8qIEFJWCAqLwotI2VuZGlmIC8qIEhQVVggKi8KLSNlbmRpZiAvKiBBVFRTViAqLwot I2VuZGlmIC8qIExJTlVYICovCi0jZW5kaWYgLyogVVNFX1RFUk1JTyAqLwotCi0jaWZkZWYgUU5Y Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNlbmRpZiAvKiBRTlggKi8KLQotI2lmZGVmIFVTRV9URVJN SU8KLSNkZWZpbmUgUE9TSVhfVEVSTUlPUwkJCS8qIFNlZW1zIHRvIGJlIGEgbWlzbm9tZXIgKi8K LSNlbmRpZiAvKiBVU0VfVEVSTUlPICovCi0KLSNpZmRlZiBORVhUCi0jaWZuZGVmIEdFVFBHUlBf T05FQVJHCi0jZGVmaW5lIEdFVFBHUlBfT05FQVJHCi0jZW5kaWYgLyogR0VUUEdSUF9PTkVBUkcg Ki8KLSNlbmRpZiAvKiBORVhUICovCi0KLSNpZmRlZiBXQU5UX1VUTVAJCQkvKiBTZWUgY2t1cHR5 LmggKi8KLS8qCi0gIFdBTlRfVVRNUCBpcyBub3QgZGVmaW5lZCBiZWNhdXNlIChhKSB0aGUgdXRt cC93dG1wIGp1bmsgaXMgdGhlIG1vc3QKLSAgbm9ucG9ydGFibGUgcGFydCBvZiB0aGlzIG1vZHVs ZSwgYW5kIChiKSB3ZSdyZSBub3QgbG9nZ2luZyBhbnlib2R5Ci0gIGluLCB3ZSdyZSBqdXN0IHJ1 bm5pbmcgYSBwcm9jZXNzLCBhbmQgZG9uJ3QgbmVlZCB0byB3cml0ZSB1dG1wL3d0bXAgcmVjb3Jk cy4KLSovCi0jaWZuZGVmIEhBVkVfU0VUVVRYRU5UCQkJLyogV2hvIGhhcyA8dXRtcHguaD4gKi8K LSNpZmRlZiBTT0xBUklTCi0jZGVmaW5lIEhBVkVfU0VUVVRYRU5UCi0jZWxzZQotI2lmZGVmIElS SVg2MAotI2RlZmluZSBIQVZFX1NFVFVUWEVOVAotI2Vsc2UKLSNpZmRlZiBDS19TQ09WNQotI2Rl ZmluZSBIQVZFX1NFVFVUWEVOVAotI2Vsc2UKLSNpZmRlZiBIUFVYMTAKLSNkZWZpbmUgSEFWRV9T RVRVVFhFTlQKLSNlbHNlCi0jaWZkZWYgVU5JWFdBUkUKLSNkZWZpbmUgSEFWRV9TRVRVVFhFTlQK LSNlbHNlCi0jaWZkZWYgSVJJWDYwCi0jZGVmaW5lIEhBVkVfU0VUVVRYRU5UCi0jZW5kaWYgLyog SVJJWDYwICovCi0jZW5kaWYgLyogVU5JWFdBUkUgKi8KLSNlbmRpZiAvKiBIUFVYMTAgKi8KLSNl bmRpZiAvKiBDS19TQ09WNSAqLwotI2VuZGlmIC8qIElSSVg2MCAqLwotI2VuZGlmIC8qIFNPTEFS SVMgKi8KLSNlbmRpZiAvKiBIQVZFX1NFVFVUWEVOVCAqLwotCi0jaWZuZGVmIEhBVkVfVVRIT1NU CQkJLyogRG9lcyB1dG1wIGluY2x1ZGUgdXRfaG9zdFtdPyAqLwotI2lmZGVmIEhBVkVfU0VUVVRY RU5UCQkJLyogdXRtcHggYWx3YXlzIGRvZXMgKi8KLSNkZWZpbmUgSEFWRV9VVEhPU1QKLSNlbHNl Ci0jaWZkZWYgTElOVVgJCQkJLyogTGludXggZG9lcyAqLwotI2RlZmluZSBIQVZFX1VUSE9TVAot I2Vsc2UKLSNpZmRlZiBTVU5PUzQJCQkJLyogU3VuT1MgZG9lcyAqLwotI2RlZmluZSBIQVZFX1VU SE9TVAotI2Vsc2UKLSNpZmRlZiBBSVg0MQkJCQkvKiBBSVggNC4xIGFuZCBsYXRlciBkbyAqLwot I2RlZmluZSBIQVZFX1VUSE9TVAotI2VuZGlmIC8qIEFJWDQxICovCi0jZW5kaWYgLyogU1VOT1M0 ICovCi0jZW5kaWYgLyogTElOVVggKi8KLSNlbmRpZiAvKiBIQVZFX1NFVFVUWEVOVCAqLwotI2Vu ZGlmIC8qIEhBVkVfVVRIT1NUICovCi0KLSNpZm5kZWYgSEFWRV9VVF9IT1NUCi0jaWZuZGVmIE5P X1VUX0hPU1QKLSNkZWZpbmUgTk9fVVRfSE9TVAotI2VuZGlmIC8qIE5PX1VUX0hPU1QgKi8KLSNl bmRpZiAvKiBIQVZFX1VUX0hPU1QgKi8KLQotI2VuZGlmIC8qIFdBTlRfVVRNUCAqLwotCi0jaWZk ZWYgTElOVVgKLSNkZWZpbmUgQ0tfVkhBTkdVUAotI2RlZmluZSBIQVZFX1NZU19TRUxFQ1RfSAot I2RlZmluZSBIQVZFX0dFVFVURU5UCi0jZGVmaW5lIEhBVkVfU0VUVVRFTlQKLSNkZWZpbmUgSEFW RV9VUERXVE1QCi0jZW5kaWYgLyogTElOVVggKi8KLQotI2lmZGVmIEhQVVgxMAotI2RlZmluZSBD S19WSEFOR1VQCi0jZGVmaW5lIFZIQU5HX0ZJUlNUCi0jZGVmaW5lIEhBVkVfUFRTTkFNRQotI2lm bmRlZiBIQVZFX1BUWVRSQVAKLSNkZWZpbmUgSEFWRV9QVFlUUkFQCi0jZW5kaWYgLyogSEFWRV9Q VFlUUkFQICovCi0jZWxzZQotI2lmZGVmIEhQVVg5Ci0jZGVmaW5lIENLX1ZIQU5HVVAKLSNkZWZp bmUgVkhBTkdfRklSU1QKLSNkZWZpbmUgSEFWRV9QVFNOQU1FCi0jaWZuZGVmIEhBVkVfUFRZVFJB UAotI2RlZmluZSBIQVZFX1BUWVRSQVAKLSNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KLSNlbmRp ZiAvKiBIUFVYOSAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotCi0jaWZkZWYgU1VOT1M0Ci0jZGVm aW5lIENLX1ZIQU5HVVAKLSNkZWZpbmUgTk9fVVRfUElECi0jZGVmaW5lIFZIQU5HX0ZJUlNUCi0j ZW5kaWYgLyogU1VOT1M0ICovCi0KLSNpZmRlZiBJUklYNjAKLSNkZWZpbmUgQ0tfVkhBTkdVUAot I2RlZmluZSBIQVZFX19HRVRQVFkKLSNlbmRpZiAvKiBJUklYNjAgKi8KLQotI2lmZGVmIFNJTklY Ci0jZGVmaW5lIEhBVkVfU1RSRUFNUwotI2RlZmluZSBIQVZFX0dSQU5UUFQKLSNkZWZpbmUgSEFW RV9QVFNOQU1FCi0jZGVmaW5lIFBVU0hfUFRFTQotI2RlZmluZSBQVVNIX0xEVEVSTQotI2RlZmlu ZSBQVVNIX1RUQ09NUEFUCi0jZW5kaWYgLyogU0lOSVggKi8KLQotI2lmZGVmIHVsdHJpeAotI2Rl ZmluZSBNVVNUX1NFVFBHUlAKLSNlbmRpZiAvKiB1bHRyaXggKi8KLQotI2lmZGVmIFFOWAotI2Rl ZmluZSBNVVNUX1NFVFBHUlAKLSNkZWZpbmUgTk9fREVWVFRZCi0jZGVmaW5lIElOSVRfU1BUWQot I2VuZGlmIC8qIFFOWCAqLwotCi0jaWZkZWYgTElOVVgKLSNpZmRlZiBIQVZFX1BUTVgKLSNkZWZp bmUgSEFWRV9HUkFOVFBUCi0jZGVmaW5lIEhBVkVfUFRTTkFNRQotI2VuZGlmIC8qIEhBVkVfUFRN WCAqLwotI2Vsc2UKLSNpZmRlZiBIQVZFX1NUUkVBTVMKLSNkZWZpbmUgSEFWRV9QVE1YCi0jZW5k aWYgLyogSEFWRV9TVFJFQU1TICovCi0jZW5kaWYgLyogTElOVVggKi8KLQotI2luY2x1ZGUgImNr dXB0eS5oIgotCi0jaWZkZWYgUFRZTk9CTE9DSwotI2lmbmRlZiBPX05ERUxBWQotI2lmZGVmIE9f Tk9OQkxPQ0sKLSNkZWZpbmUgT19OREVMQVkgT19OT05CTE9DSwotI2VuZGlmIC8qIE9fTk9OQkxP Q0sgKi8KLSNlbmRpZiAvKiBPX05ERUxBWSAqLwotI2Vsc2UgLyogUFRZTk9CTE9DSyAqLwotI2lm ZGVmIE9fTkRFTEFZCi0jdW5kZWYgT19OREVMQVkKLSNlbmRpZiAvKiBPX05ERUxBWSAqLwotI2Rl ZmluZSBPX05ERUxBWSAwCi0jZW5kaWYgLyogUFRZTk9CTE9DSyAqLwotCi0jaWZuZGVmIE9OTENS Ci0jZGVmaW5lIE9OTENSIDAKLSNlbmRpZiAvKiBPTkxDUiAqLwotCi0jaWZkZWYgQ0tfV0FJVF9I Ci0jaW5jbHVkZSA8c3lzL3dhaXQuaD4KLSNlbmRpZiAvKiBDS19XQUlUX0ggKi8KLQotI2lmZGVm IFNUUkVBTVNQVFkKLSNpZm5kZWYgSU5JVF9TUFRZCi0jZGVmaW5lIElOSVRfU1BUWQotI2VuZGlm IC8qIElOSVRfU1BUWSAqLwotCi0jaW5jbHVkZSA8c3lzL3N0cmVhbS5oPgotI2luY2x1ZGUgPHN0 cm9wdHMuaD4KLSNpbmNsdWRlIDx0ZXJtaW8uaD4KLQotLyogTWFrZSBzdXJlIHdlIGRvbid0IGdl dCB0aGUgQlNEIHZlcnNpb24gKi8KLQotI2lmZGVmIEhBVkVfU1lTX1RUWV9ICi0jaW5jbHVkZSAi L3Vzci9pbmNsdWRlL3N5cy90dHkuaCIKLSNlbmRpZiAvKiBIQVZFX1NZU19UVFlfSCAqLwotCi0j aWZkZWYgSEFTX1BUWVZBUgkJCS8qIFdoZXJlIGlzIHRoaXMgc2V0PyAqLwotCi0jaW5jbHVkZSA8 c3lzL3B0eXZhci5oPgotCi0jZWxzZSAvKiBIQVNfUFRZVkFSICovCi0KLSNpZm5kZWYgVElPQ1BL VF9GTFVTSFdSSVRFCi0jZGVmaW5lIFRJT0NQS1RfRkxVU0hXUklURSAweDAyCi0jZGVmaW5lIFRJ T0NQS1RfTk9TVE9QICAgICAweDEwCi0jZGVmaW5lIFRJT0NQS1RfRE9TVE9QICAgICAweDIwCi0j ZGVmaW5lIFRJT0NQS1RfSU9DVEwgICAgICAweDQwCi0jZW5kaWYgLyogVElPQ1BLVF9GTFVTSFdS SVRFICovCi0KLSNlbmRpZiAvKiBIQVNfUFRZVkFSICovCi0KLSNpZmRlZiBIQVZFX1RUWV9ICi0j aW5jbHVkZSA8dHR5Lmg+Ci0jZW5kaWYgLyogSEFWRV9UVFlfSCAqLwotCi0vKgotICBCZWNhdXNl IG9mIHRoZSB3YXkgcHR5aWJ1ZiBpcyB1c2VkIHdpdGggc3RyZWFtcyBtZXNzYWdlcywgd2UgbmVl ZAotICBwdHlpYnVmKzEgdG8gYmUgb24gYSBmdWxsLXdvcmQgYm91bmRhcnkuICBUaGUgZm9sbG93 aW5nIHdlaXJkbmVzcwotICBpcyBzaW1wbHkgdG8gbWFrZSB0aGF0IGhhcHBlbi4KLSovCi1sb25n IHB0eWlidWZidWZbQlVGU0laL3NpemVvZihsb25nKSsxXTsKLWNoYXIgKnB0eWlidWYgPSAoKGNo YXIgKikmcHR5aWJ1ZmJ1ZlsxXSktMTsKLWNoYXIgKnB0eWlwID0gKChjaGFyICopJnB0eWlidWZi dWZbMV0pLTE7Ci1jaGFyIHB0eWlidWYyW0JVRlNJWl07Ci11bnNpZ25lZCBjaGFyIGN0bGJ1ZltC VUZTSVpdOwotc3RydWN0IHN0cmJ1ZiBzdHJidWZjLCBzdHJidWZkOwotCi1pbnQgcmVhZHN0cmVh bSgpOwotCi0jZWxzZSAgLyogISBTVFJFQU1TUFRZICovCi0KLS8qIEkvTyBkYXRhIGJ1ZmZlcnMs IHBvaW50ZXJzLCBhbmQgY291bnRlcnMuICovCi0KLWNoYXIgcHR5aWJ1ZltCVUZTSVpdLCAqcHR5 aXAgPSBwdHlpYnVmOwotY2hhciBwdHlpYnVmMltCVUZTSVpdOwotCi0jZW5kaWYgLyogISBTVFJF QU1TUFRZICovCi0KLSNpZm5kZWYgVVNFX1RFUk1JTwotc3RydWN0IHRlcm1idWYgewotICAgIHN0 cnVjdCBzZ3R0eWIgc2c7Ci0gICAgc3RydWN0IHRjaGFycyB0YzsKLSAgICBzdHJ1Y3QgbHRjaGFy cyBsdGM7Ci0gICAgaW50IHN0YXRlOwotICAgIGludCBsZmxhZ3M7Ci19IHRlcm1idWYsIHRlcm1i dWYyOwotCi0jZGVmaW5lIGNmc2V0b3NwZWVkKHRwLHZhbCkgKHRwKS0+c2cuc2dfb3NwZWVkID0g KHZhbCkKLSNkZWZpbmUgY2ZzZXRpc3BlZWQodHAsdmFsKSAodHApLT5zZy5zZ19pc3BlZWQgPSAo dmFsKQotI2RlZmluZSBjZmdldG9zcGVlZCh0cCkgICAgICh0cCktPnNnLnNnX29zcGVlZAotI2Rl ZmluZSBjZmdldGlzcGVlZCh0cCkgICAgICh0cCktPnNnLnNnX2lzcGVlZAotCi0jZWxzZSAgLyog VVNFX1RFUk1JTyAqLwotCi0jaWZkZWYgU1lTVl9URVJNSU8KLSNkZWZpbmUgdGVybWlvcyB0ZXJt aW8KLSNlbmRpZiAvKiBTWVNWX1RFUk1JTyAqLwotCi0jaWZuZGVmIFRDU0FOT1cKLQotI2lmZGVm IFRDU0VUUwotCi0jZGVmaW5lIFRDU0FOT1cgVENTRVRTCi0jZGVmaW5lIFRDU0FEUkFJTiBUQ1NF VFNXCi0jZGVmaW5lIHRjZ2V0YXR0cihmLCB0KSBpb2N0bChmLCBUQ0dFVFMsIChjaGFyICopdCkK LQotI2Vsc2UgLyogVENTRVRTICovCi0KLSNpZmRlZiBUQ1NFVEEKLSNkZWZpbmUgVENTQU5PVyBU Q1NFVEEKLSNkZWZpbmUgVENTQURSQUlOIFRDU0VUQVcKLSNkZWZpbmUgdGNnZXRhdHRyKGYsdCkg aW9jdGwoZixUQ0dFVEEsKGNoYXIgKil0KQotI2Vsc2UgLyogVENTRVRBICovCi0jZGVmaW5lIFRD U0FOT1cgVElPQ1NFVEEKLSNkZWZpbmUgVENTQURSQUlOIFRJT0NTRVRBVwotI2RlZmluZSB0Y2dl dGF0dHIoZix0KSBpb2N0bChmLFRJT0NHRVRBLChjaGFyICopdCkKLSNlbmRpZiAvKiBUQ1NFVEEg Ki8KLQotI2VuZGlmIC8qIFRDU0VUUyAqLwotCi0jZGVmaW5lIHRjc2V0YXR0cihmLGEsdCkgaW9j dGwoZixhLHQpCi0jZGVmaW5lIGNmc2V0b3NwZWVkKHRwLHZhbCkgKHRwKS0+Y19jZmxhZyAmPSB+ Q0JBVUQ7KHRwKS0+Y19jZmxhZ3w9KHZhbCkKLSNkZWZpbmUgY2ZnZXRvc3BlZWQodHApICgodHAp LT5jX2NmbGFnICYgQ0JBVUQpCi0KLSNpZmRlZiBDSUJBVUQKLSNkZWZpbmUgY2ZzZXRpc3BlZWQo dHAsdmFsKSBcCi0gKHRwKS0+Y19jZmxhZyAmPSB+Q0lCQVVEOyAodHApLT5jX2NmbGFnIHw9ICgo dmFsKTw8SUJTSElGVCkKLSNkZWZpbmUgY2ZnZXRpc3BlZWQodHApICgoKHRwKS0+Y19jZmxhZyAm IENJQkFVRCk+PklCU0hJRlQpCi0jZWxzZSAvKiBDSUJBVUQgKi8KLSNkZWZpbmUgY2ZzZXRpc3Bl ZWQodHAsdmFsKSAodHApLT5jX2NmbGFnICY9IH5DQkFVRDsgKHRwKS0+Y19jZmxhZ3w9KHZhbCkK LSNkZWZpbmUgY2ZnZXRpc3BlZWQodHApICgodHApLT5jX2NmbGFnICYgQ0JBVUQpCi0jZW5kaWYg LyogQ0lCQVVEICovCi0KLSNlbmRpZiAvKiBUQ1NBTk9XICovCi0KLSNpZmRlZiBIQVZFX09QRU5Q VFkKLSNpbmNsdWRlIDxwdHkuaD4KLSNlbmRpZgotCi1zdHJ1Y3QgdGVybWlvcyB0ZXJtYnVmLCB0 ZXJtYnVmMjsgICAgICAgLyogcHR5IGNvbnRyb2wgc3RydWN0dXJlICovCi0KLSNpZmRlZiBJTklU X1NQVFkKLXN0YXRpYyBpbnQgc3B0eSA9IC0xOwotI2VuZGlmIC8qIElOSVRfU1BUWSAqLwotCi0j ZW5kaWYgLyogVVNFX1RFUk1JTyAqLwotCi0jaWZkZWYgUU5YCQkJCS8qIDI5OSAqLwotI2lmbmRl ZiBJWEFOWQotI2RlZmluZSBJWEFOWSAwCi0jZW5kaWYJLyogSVhBTlkgKi8KLSNlbmRpZgkvKiBR TlggKi8KLQotc3RhdGljIGludCBtc2cgPSAwOwotCi0vKiBWYXJpYWJsZXMgYXZhaWxhYmxlIHRv IG90aGVyIG1vZHVsZXMgKi8KLQotaW50IHB0eV9mb3JrX2FjdGl2ZSA9IDA7CQkvKiBwdHkgZm9y ayBpcyBhY3RpdmUgKi8KLVBJRF9UIHB0eV9mb3JrX3BpZCA9IC0xOwkJLyogcHR5IGZvcmsgcGlk ICovCi1pbnQgcHR5X3NsYXZlX2ZkID0gLTE7CQkJLyogcHR5IHNsYXZlIGZpbGUgZGVzY3JpcHRv ciAqLwotaW50IHB0eV9tYXN0ZXJfZmQgPSAtMTsJCQkvKiBwdHkgbWFzdGVyIGZpbGUgZGVzY3Jp cHRvciAqLwotCi0vKiB0ZXJtYnVmIHJvdXRpbmVzIChiZWdpbikgKi8KLS8qCi0gIGluaXRfdGVy bWJ1ZigpCi0gIGNvcHlfdGVybWJ1ZihjcCkKLSAgc2V0X3Rlcm1idWYoKQotCi0gIFRoZXNlIHRo cmVlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIGdldCBhbmQgc2V0IHRoZSAidGVybWJ1ZiIgc3RydWN0 dXJlCi0gIHRvIGFuZCBmcm9tIHRoZSBrZXJuZWwuICBpbml0X3Rlcm1idWYoKSBnZXRzIHRoZSBj dXJyZW50IHNldHRpbmdzLgotICBjb3B5X3Rlcm1idWYoKSBoYW5kcyBpbiBhIG5ldyAidGVybWJ1 ZiIgdG8gd3JpdGUgdG8gdGhlIGtlcm5lbCwgYW5kCi0gIHNldF90ZXJtYnVmKCkgd3JpdGVzIHRo ZSBzdHJ1Y3R1cmUgaW50byB0aGUga2VybmVsLgotKi8KLVZPSUQKLWluaXRfdGVybWJ1ZihmZCkg aW50IGZkOyB7Ci0gICAgaW50IHR0eWZkOwotICAgIGludCByYyA9IDA7Ci0KLSAgICB0dHlmZCA9 IGZkOwotCi0jaWZkZWYgSEFWRV9TVFJFQU1TCi0gICAgZGVidWcoRjEwMCwiaW5pdF90ZXJtYnVm IEhBVkVfU1RSRUFNUyIsIiIsMCk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAsImluaXRfdGVybWJ1 ZiBIQVZFX1NUUkVBTVMgTk9UIERFRklORUQiLCIiLDApOwotI2VuZGlmCS8qIEhBVkVfU1RSRUFN UyAqLwotI2lmZGVmIFNUUkVBTVNQVFkKLSAgICBkZWJ1ZyhGMTAwLCJpbml0X3Rlcm1idWYgU1RS RUFNU1BUWSIsIiIsMCk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAsImluaXRfdGVybWJ1ZiBTVFJF QU1TUFRZIE5PVCBERUZJTkVEIiwiIiwwKTsKLSNlbmRpZgkvKiBTVFJFQU1TUFRZICovCi0jaWZk ZWYgSU5JVF9TUFRZCi0gICAgZGVidWcoRjEwMCwiaW5pdF90ZXJtYnVmIElOSVRfU1BUWSIsIiIs MCk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAsImluaXRfdGVybWJ1ZiBJTklUX1NQVFkgTk9UIERF RklORUQiLCIiLDApOwotI2VuZGlmCS8qIElOSVRfU1BUWSAqLwotCi0gICAgZGVidWcoRjEwMSwi aW5pdF90ZXJtYnVmIHR0eWZkIiwiIix0dHlmZCk7Ci0jaWZkZWYgSU5JVF9TUFRZCi0gICAgZGVi dWcoRjEwMSwiaW5pdF90ZXJtYnVmIHNwdHkiLCIiLHNwdHkpOwotI2VuZGlmCS8qIElOSVRfU1BU WSAqLwotCi0gICAgbWVtc2V0KCZ0ZXJtYnVmLDAsc2l6ZW9mKHRlcm1idWYpKTsKLSAgICBtZW1z ZXQoJnRlcm1idWYyLDAsc2l6ZW9mKHRlcm1idWYyKSk7Ci0jaWZuZGVmCVVTRV9URVJNSU8KLSAg ICByYyA9IGlvY3RsKHR0eWZkLCBUSU9DR0VUUCwgKGNoYXIgKikmdGVybWJ1Zi5zZyk7Ci0gICAg cmMgfD0gaW9jdGwodHR5ZmQsIFRJT0NHRVRDLCAoY2hhciAqKSZ0ZXJtYnVmLnRjKTsKLSAgICBy YyB8PSBpb2N0bCh0dHlmZCwgVElPQ0dMVEMsIChjaGFyICopJnRlcm1idWYubHRjKTsKLSNpZmRl ZiBUSU9DR1NUQVRFCi0gICAgcmMgfD0gaW9jdGwodHR5ZmQsIFRJT0NHU1RBVEUsIChjaGFyICop JnRlcm1idWYuc3RhdGUpOwotI2VuZGlmIC8qIFRJT0NHU1RBVEUgKi8KLSNlbHNlIC8qIFVTRV9U RVJNSU8gKi8KLSAgICBlcnJubyA9IDA7Ci0jaWZkZWYgSU5JVF9TUFRZCi0gICAgcmMgPSB0Y2dl dGF0dHIoc3B0eSwgJnRlcm1idWYpOwotICAgIGRlYnVnKEYxMTEsImluaXRfdGVybWJ1ZigpIHRj Z2V0YXR0cihzcHR5KSIsY2tpdG9hKHJjKSxlcnJubyk7Ci0jZWxzZQotICAgIHJjID0gdGNnZXRh dHRyKHR0eWZkLCAmdGVybWJ1Zik7Ci0gICAgZGVidWcoRjExMSwiaW5pdF90ZXJtYnVmKCkgdGNn ZXRhdHRyKHR0eWZkKSIsY2tpdG9hKHJjKSxlcnJubyk7Ci0jZW5kaWYgLyogSU5JVF9TUFRZICov Ci0jZW5kaWYgLyogVVNFX1RFUk1JTyAqLwotICAgIGlmICghcmMpCi0gICAgICB0ZXJtYnVmMiA9 IHRlcm1idWY7Ci19Ci0KLSNpZmRlZiBUSU9DUEtUX0lPQ1RMCi1WT0lECi1jb3B5X3Rlcm1idWYo Y3AsIGxlbikgY2hhciAqY3A7IGludCBsZW47IHsKLSAgICBpZiAobGVuID4gc2l6ZW9mKHRlcm1i dWYpKQotICAgICAgbGVuID0gc2l6ZW9mKHRlcm1idWYpOwotICAgIG1lbWNweSgoY2hhciAqKSZ0 ZXJtYnVmLCBjcCwgbGVuKTsKLSAgICB0ZXJtYnVmMiA9IHRlcm1idWY7Ci19Ci0jZW5kaWYgLyog VElPQ1BLVF9JT0NUTCAqLwotCi1WT0lECi1zZXRfdGVybWJ1ZihmZCkgaW50IGZkOyB7CQkvKiBP bmx5IG1ha2UgdGhlIG5lY2Vzc2FyeSBjaGFuZ2VzLiAqLwotICAgIGludCB4OwotICAgIGludCB0 dHlmZDsKLSAgICB0dHlmZCA9IGZkOwotCi0gICAgZGVidWcoRjEwMSwic2V0X3Rlcm1idWYgdHR5 ZmQiLCIiLHR0eWZkKTsKLSNpZmRlZiBJTklUX1NQVFkKLSAgICBkZWJ1ZyhGMTAxLCJzZXRfdGVy bWJ1ZiBzcHR5IiwiIixzcHR5KTsKLSNlbmRpZgkvKiBJTklUX1NQVFkgKi8KLQotI2lmbmRlZglV U0VfVEVSTUlPCi0gICAgZGVidWcoRjEwMCwic2V0X3Rlcm1idWYgVVNFX1RFUk1JTyIsIiIsMCk7 Ci0gICAgaWYgKG1lbWNtcCgoY2hhciAqKSZ0ZXJtYnVmLnNnLCAoY2hhciAqKSZ0ZXJtYnVmMi5z Zywgc2l6ZW9mKHRlcm1idWYuc2cpKSkKLSAgICAgIGlvY3RsKHR0eWZkLCBUSU9DU0VUTiwgKGNo YXIgKikmdGVybWJ1Zi5zZyk7Ci0gICAgaWYgKG1lbWNtcCgoY2hhciAqKSZ0ZXJtYnVmLnRjLCAo Y2hhciAqKSZ0ZXJtYnVmMi50Yywgc2l6ZW9mKHRlcm1idWYudGMpKSkKLSAgICAgIGlvY3RsKHR0 eWZkLCBUSU9DU0VUQywgKGNoYXIgKikmdGVybWJ1Zi50Yyk7Ci0gICAgaWYgKG1lbWNtcCgoY2hh ciAqKSZ0ZXJtYnVmLmx0YywgKGNoYXIgKikmdGVybWJ1ZjIubHRjLAotCSAgICAgICBzaXplb2Yo dGVybWJ1Zi5sdGMpKSkKLSAgICAgIGlvY3RsKHR0eWZkLCBUSU9DU0xUQywgKGNoYXIgKikmdGVy bWJ1Zi5sdGMpOwotICAgIGlmICh0ZXJtYnVmLmxmbGFncyAhPSB0ZXJtYnVmMi5sZmxhZ3MpCi0g ICAgICBpb2N0bCh0dHlmZCwgVElPQ0xTRVQsIChjaGFyICopJnRlcm1idWYubGZsYWdzKTsKLSNl bHNlICAvKiBVU0VfVEVSTUlPICovCi0gICAgeCA9IG1lbWNtcCgoY2hhciAqKSZ0ZXJtYnVmLCAo Y2hhciAqKSZ0ZXJtYnVmMiwgc2l6ZW9mKHRlcm1idWYpKTsKLSAgICBkZWJ1ZyhGMTAxLCJzZXRf dGVybWJ1ZiAhVVNFX1RFUk1JTyBtZW1jbXAiLCIiLHgpOwotICAgIHggPSAxOwkJCQkvKiBGb3Jj ZSB0aGlzICovCi0gICAgaWYgKHgpIHsKLQlpbnQgeDsKLQllcnJubyA9IDA7Ci0jaWZkZWYgSU5J VF9TUFRZCi0JZGVidWcoRjEwMCwic2V0X3Rlcm1idWYgSU5JVF9TUFRZIiwiIiwwKTsKLQl4ID0g dGNzZXRhdHRyKHNwdHksIFRDU0FOT1csICZ0ZXJtYnVmKTsKLQlkZWJ1ZyhGMTExLCJzZXRfdGVy bWJ1ZiB0Y3NldGF0dHIoc3B0eSkiLGNraXRvYSh4KSxlcnJubyk7Ci0jZWxzZQotCWRlYnVnKEYx MDAsInNldF90ZXJtYnVmICFJTklUX1NQVFkiLCIiLDApOwotCXggPSB0Y3NldGF0dHIodHR5ZmQs IFRDU0FOT1csICZ0ZXJtYnVmKTsKLQlkZWJ1ZyhGMTExLCJzZXRfdGVybWJ1ZiB0Y3NldGF0dHIo dHR5ZmQpIixja2l0b2EoeCksZXJybm8pOwotI2VuZGlmIC8qIElOSVRfU1BUWSAqLwotICAgIH0K LSNlbmRpZiAvKiBVU0VfVEVSTUlPICovCi19Ci0vKiB0ZXJtYnVmIHJvdXRpbmVzIChlbmQpICov Ci0KLVZPSUQKLXB0eWludF92aGFuZ3VwKCkgewotI2lmZGVmIENLX1ZIQU5HVVAKLSNpZmRlZiBD S19QT1NJWF9TSUcKLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwotICAgIC8qIEluaXRpYWxpemUg InNhIiBzdHJ1Y3R1cmUuICovCi0gICAgc2lnZW1wdHlzZXQoJnNhLnNhX21hc2spOwotICAgIHNh LnNhX2ZsYWdzID0gMDsKLSAgICBzYS5zYV9oYW5kbGVyID0gU0lHX0lHTjsKLSAgICBzaWdhY3Rp b24oU0lHSFVQLCAmc2EsIChzdHJ1Y3Qgc2lnYWN0aW9uICopMCk7Ci0gICAgdmhhbmd1cCgpOwot ICAgIHNhLnNhX2hhbmRsZXIgPSBTSUdfREZMOwotICAgIHNpZ2FjdGlvbihTSUdIVVAsICZzYSwg KHN0cnVjdCBzaWdhY3Rpb24gKikwKTsKLSNlbHNlIC8qIENLX1BPU0lYX1NJRyAqLwotICAgIHNp Z25hbChTSUdIVVAsU0lHX0lHTik7Ci0gICAgdmhhbmd1cCgpOwotICAgIHNpZ25hbChTSUdIVVAs U0lHX0RGTCk7Ci0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0jZW5kaWYgLyogQ0tfVkhBTkdV UCAqLwotfQotCi0vKgotICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHR3aWNlLiAgSXQncyBub3Qg cGFydGljdWxhcmx5IGltcG9ydGFudCB0aGF0IHRoZQotICBzZXRzaWQoKSBvciBUSU9DU0NUVFkg aW9jdGxzIHN1Y2NlZWQgKHRoZXkgbWF5IG5vdCB0aGUgc2Vjb25kIHRpbWUpLCBidXQKLSAgcmF0 aGVyIHRoYXQgd2UgaGF2ZSBhIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGF0IHRoZSBlbmQuICBJdCBp cyBhc3N1bWVkIHRoYXQKLSAgdmhhbmd1cCBkb2Vzbid0IGV4aXN0IGFuZCBjb25mdXNlIHRoZSBw cm9jZXNzJ3Mgbm90aW9uIG9mIGNvbnRyb2xsaW5nCi0gIHRlcm1pbmFsIG9uIGFueSBzeXN0ZW0g d2l0aG91dCBUSU9DTk9UVFkuICBUaGF0IGlzLCBlaXRoZXIgdmhhbmd1cCgpIGxlYXZlcwotICB0 aGUgY29udHJvbGxpbmcgdGVybWluYWwgaW4gdGFjdCwgYnJlYWtzIHRoZSBhc3NvY2lhdGlvbiBj b21wbGV0ZWx5LCBvciB0aGUKLSAgc3lzdGVtIHByb3ZpZGVzIFRJT0NOT1RUWSB0byBnZXQgdGhp bmdzIGJhY2sgaW50byBhIHJlYXNvbmFibGUgc3RhdGUuICBJbgotICBwcmFjdGljZSwgdmhhbmd1 cCgpIGVpdGhlciBicmVha3MgdGhlIGFzc29jaWF0aW9uIGNvbXBsZXRlbHkgb3IgZG9lc24ndAot ICBlZmZlY3QgY29udHJvbGxpbmcgdGVybWluYWxzLCBzbyB0aGlzIGNvbmRpdGlvbiBpcyBtZXQu Ci0qLwotbG9uZwotcHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKSB7Ci0gICAgaW50IGNvbl9mZDsK LSNpZmRlZiBIQVZFX1NFVFNJRAotICAgIGRlYnVnKEYxMTAsCi0JICAicHR5aW50X3ZvaWRfYXNz b2NpYXRpb24oKSIsCi0JICAic2V0c2lkKCkiLAotCSAgMAotCSAgKTsKLSAgICBzZXRzaWQoKTsK LSNlbmRpZiAvKiBIQVZFX1NFVFNJRCAqLwotCi0jaWZuZGVmIE5PX0RFVlRUWQotICAgIC8qIFZv aWQgdHR5IGFzc29jaWF0aW9uIGZpcnN0ICovCi0jaWZkZWYgVElPQ05PVFRZCi0gICAgY29uX2Zk ID0gb3BlbigiL2Rldi90dHkiLCBPX1JEV1IpOwotICAgIGRlYnVnKEYxMTEsCi0JICAicHR5aW50 X3ZvaWRfYXNzb2NpYXRpb24oKSBvcGVuKC9kZXYvdHR5LE9fUkRXUikiLAotCSAgIi9kZXYvdHR5 IiwKLQkgIGNvbl9mZCk7Ci0gICAgaWYgKGNvbl9mZCA+PSAwKSB7Ci0gICAgICAgIGlvY3RsKGNv bl9mZCwgVElPQ05PVFRZLCAwKTsKLSAgICAgICAgY2xvc2UoY29uX2ZkKTsKLSAgICB9Ci0jaWZk ZWYgREVCVUcKLSAgICBlbHNlIGRlYnVnKEYxMDEsICJwdHlpbnRfdm9pZF9hc3NvY2lhdGlvbigp IG9wZW4oKSBlcnJubyIsIiIsZXJybm8pOwotI2VuZGlmIC8qIERFQlVHICovCi0jZW5kaWYgLyog VElPQ05PVFRZICovCi0jZW5kaWYgLyogTk9fREVWVFRZICovCi0gICAgcmV0dXJuKDApOwotfQot Ci0vKiBQSUQgbWF5IGJlIHplcm8gZm9yIHVua25vd24uKi8KLQotbG9uZwotcHR5X2NsZWFudXAo c2xhdmUsIHBpZCwgdXBkYXRlX3V0bXApIGNoYXIgKnNsYXZlOyBpbnQgcGlkOyBpbnQgdXBkYXRl X3V0bXA7IHsKLSNpZmRlZiBWSEFOR19MQVNUCi0gICAgaW50IHJldHZhbCwgZmQ7Ci0jZW5kaWYg LyogVkhBTkdfTEFTVCAqLwotCi0gICAgZGVidWcoRjExMSwicHR5X2NsZWFudXAoKSIsc2xhdmUs cGlkKTsKLSNpZmRlZiBXQU5UX1VUTVAKLSAgICBpZiAodXBkYXRlX3V0bXApCi0gICAgICBwdHlf dXBkYXRlX3V0bXAoUFRZX0RFQURfUFJPQ0VTUywKLQkJICAgICAgMCwKLQkJICAgICAgIiIsCi0J CSAgICAgIHNsYXZlLAotCQkgICAgICAoY2hhciAqKTAsCi0JCSAgICAgIFBUWV9VVE1QX1VTRVJO QU1FX1ZBTElECi0JCSAgICAgICk7Ci0jZW5kaWYgLyogV0FOVF9VVE1QICovCi0KLSNpZmRlZiBT RVRVSUQKLSAgICBjaG1vZChzbGF2ZSwgMDY2Nik7Ci0gICAgY2hvd24oc2xhdmUsIDAsIDApOwot I2VuZGlmIC8qIFNFVFVJRCAqLwotCi0jaWZkZWYgSEFWRV9SRVZPS0UKLSAgICByZXZva2Uoc2xh dmUpOwotICAgIC8qCi0gICAgICAgUmV2b2tlIGlzbid0IGd1YXJhbnRlZWQgdG8gc2VuZCBhIFNJ R0hVUCB0byB0aGUgcHJvY2Vzc2VzIGl0Ci0gICAgICAgZGlzc29jaWF0ZXMgZnJvbSB0aGUgdGVy bWluYWwuICBUaGUgYmVzdCBzb2x1dGlvbiB3aXRob3V0IGEgUG9zaXgKLSAgICAgICBtZWNoYW5p c20gZm9yIGZvcmNpbmcgYSBoYW5ndXAgaXMgdG8ga2lsbHBnKCkgdGhlIHByb2Nlc3MgZ3JvdXAg b2YgdGhlCi0gICAgICAgcHR5LiAgVGhpcyB3aWxsIGF0IGxlYXN0IGtpbGwgdGhlIHNoZWxsIGFu ZCBob3BlZnVsbHksIHRoZSBjaGlsZAotICAgICAgIHByb2Nlc3Nlcy4gIFRoaXMgaXMgbm90IGFs d2F5cyB0aGUgY2FzZSwgaG93ZXZlci4gIElmIHRoZSBzaGVsbCBwdXRzCi0gICAgICAgZWFjaCBq b2IgaW4gYSBwcm9jZXNzIGdyb3VwIGFuZCBkb2Vzbid0IHBhc3MgYWxvbmcgU0lHSFVQLCBhbGwK LSAgICAgICBwcm9jZXNzZXMgbWF5IG5vdCBkaWUuCi0gICAgKi8KLSAgICBpZiAocGlkID4gMCkg ewotI2lmZGVmIEhBVkVfS0lMTFBHCi0Ja2lsbHBnKHBpZCwgU0lHSFVQKTsKLSNlbHNlCi0Ja2ls bCgtKHBpZCksIFNJR0hVUCk7Ci0jZW5kaWYgLypIQVZFX0tJTExQRyovCi0gICAgfQotI2Vsc2Ug LyogSEFWRV9SRVZPS0UqLwotI2lmZGVmIFZIQU5HX0xBU1QKLSAgICB7Ci0gICAgICAgIGludCBz dGF0dXM7Ci0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0gICAgICAgIHNpZ3NldF90IG9sZCwgbmV3Owot ICAgICAgICBzaWdlbXB0eXNldCgmbmV3KTsKLSAgICAgICAgc2lnYWRkc2V0KCZuZXcsIFNJR0NI TEQpOwotICAgICAgICBzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZuZXcsICZvbGQpOwotI2Vsc2Ug LypDS19QT1NJWF9TSUcqLwotICAgICAgICBpbnQgbWFzayA9IHNpZ2Jsb2NrKHNpZ21hc2soU0lH Q0hMRCkpOwotI2VuZGlmIC8qQ0tfUE9TSVhfU0lHKi8KLSAgICAgICAgc3dpdGNoIChyZXR2YWwg PSBmb3JrKCkpIHsKLQkgIGNhc2UgLTE6Ci0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0gICAgICAgICAg ICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9sZCwgMCk7Ci0jZWxzZSAvKkNLX1BPU0lYX1NJ RyovCi0gICAgICAgICAgICBzaWdzZXRtYXNrKG1hc2spOwotI2VuZGlmIC8qQ0tfUE9TSVhfU0lH Ki8KLSAgICAgICAgICAgIHJldHVybiBlcnJubzsKLQkgIGNhc2UgMDoKLSAgICAgICAgICAgIHB0 eWludF92b2lkX2Fzc29jaWF0aW9uKCk7Ci0gICAgICAgICAgICBpZiAocmV0dmFsID0gKHB0eV9v cGVuX2N0dHkoc2xhdmUsICZmZCwgLTEpKSkKLQkgICAgICBleGl0KHJldHZhbCk7Ci0gICAgICAg ICAgICBwdHlpbnRfdmhhbmd1cCgpOwotICAgICAgICAgICAgZXhpdCgwKTsKLQkgICAgYnJlYWs7 Ci0JICBkZWZhdWx0OgotI2lmZGVmIEhBVkVfV0FJVFBJRAotICAgICAgICAgICAgd2FpdHBpZChy ZXR2YWwsICZzdGF0dXMsIDApOwotI2Vsc2UgLypIQVZFX1dBSVRQSUQqLwotICAgICAgICAgICAg d2FpdCgmc3RhdHVzKTsKLSNlbmRpZiAvKiBIQVZFX1dBSVRQSUQgKi8KLSNpZmRlZiBDS19QT1NJ WF9TSUcKLSAgICAgICAgICAgIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb2xkLCAwKTsKLSNl bHNlIC8qQ0tfUE9TSVhfU0lHKi8KLSAgICAgICAgICAgIHNpZ3NldG1hc2sobWFzayk7Ci0jZW5k aWYgLypDS19QT1NJWF9TSUcqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9 Ci0jZW5kaWYgLypWSEFOR19MQVNUKi8KLSNlbmRpZiAvKiBIQVZFX1JFVk9LRSovCi0jaWZuZGVm IEhBVkVfU1RSRUFNUwotICAgIHNsYXZlW3N0cmxlbigiL2Rldi8iKV0gPSAncCc7Ci0jaWZkZWYg U0VUVUlECi0gICAgY2htb2Qoc2xhdmUsIDA2NjYpOwotICAgIGNob3duKHNsYXZlLCAwLCAwKTsK LSNlbmRpZiAvKiBTRVRVSUQgKi8KLSNlbmRpZiAvKiBIQVZFX1NUUkVBTVMgKi8KLSAgICByZXR1 cm4oMCk7Ci19Ci0KLWxvbmcKLXB0eV9nZXRwdHkoZmQsIHNsYXZlLCBzbGF2ZWxlbmd0aCkgaW50 IHNsYXZlbGVuZ3RoOyBpbnQgKmZkOyBjaGFyICpzbGF2ZTsgewotICAgIGNoYXIgKmNwOwotICAg IGNoYXIgKnA7Ci0gICAgaW50IGksIHB0eW51bTsKLSAgICBzdHJ1Y3Qgc3RhdCBzdGI7Ci0jaWZu ZGVmIEhBVkVfT1BFTlBUWQotI2lmbmRlZiBIQVZFX19HRVRQVFkKLSAgICBjaGFyIHNsYXZlYnVm WzEwMjRdOwotI2VuZGlmIC8qIEhBVkVfX0dFVFBUWSAqLwotI2VuZGlmIC8qIEhBVkVfT1BFTlBU WSAqLwotI2lmZGVmIEhBVkVfX0dFVFBUWQotICAgIGNoYXIgKnNsYXZlcmV0OwkJCS8qIFRlbXAg dG8gaG9sZCBwb2ludGVyIHRvIHNsYXZlICovCi0jZW5kaWYgLypIQVZFX19HRVRQVFkqLwotCi0j aWZkZWYgSEFWRV9PUEVOUFRZCi0gICAgaW50IHNsYXZlZmQ7Ci0KLSAgICBwdHlfbWFzdGVyX2Zk ID0gLTE7Ci0gICAgZGVidWcoRjEwMCwiSEFWRV9PUEVOUFRZIiwiIiwwKTsKLSAgICBpZiAob3Bl bnB0eShmZCwKLQkJJnNsYXZlZmQsCi0JCXNsYXZlLAotCQkoc3RydWN0IHRlcm1pb3MgKikwLAot CQkoc3RydWN0IHdpbnNpemUgKikwCi0JCSkKLQkpIHsKLQlwdHlfbWFzdGVyX2ZkID0gKmZkOwot CXJldHVybigxKTsKLSAgICB9Ci0gICAgY2xvc2Uoc2xhdmVmZCk7Ci0gICAgcmV0dXJuKDApOwot Ci0jZWxzZSAvKiBIQVZFX09QRU5QVFkgKi8KLQotI2lmZGVmIEhBVkVfX0dFVFBUWQotLyoKLSAg VGhpcyBjb2RlIGlzIGluY2x1ZGVkIGZvciBJcml4OyBhcyBvZiB2ZXJzaW9uIDUuMywgSXJpeCBo YXMgL2Rldi9wdG14LCBidXQKLSAgaXQgZmFpbHMgdG8gd29yayBwcm9wZXJseTsgZXZlbiBhZnRl ciBjYWxsaW5nIHVubG9ja3B0LCByb290IGdldHMgcGVybWlzc2lvbgotICBkZW5pZWQgb3Blbmlu ZyB0aGUgcHR5LiAgVGhlIGNvZGUgdG8gc3VwcG9ydCBfZ2V0cHR5IHNob3VsZCBiZSByZW1vdmVk IGlmCi0gIElyaXggZ2V0cyB3b3JraW5nIHN0cmVhbXMgcHR5cyBpbiBmYXZvciBvZiBtYWludGFp bmluZyB0aGUgbGVhc3QgbmVlZGVkIGNvZGUKLSAgcGF0aHMuCi0qLwotICAgIGRlYnVnKEYxMDAs IkhBVkVfX0dFVFBUWSIsIiIsMCk7Ci0gICAgaWYgKChzbGF2ZXJldCA9IF9nZXRwdHkoZmQsIE9f UkRXUiB8IE9fTkRFTEFZLCAwNjAwLCAwKSkgPT0gMCkgewotCSpmZCA9IC0xOwotCXJldHVybihQ VFlfR0VUUFRZX05PUFRZKTsKLSAgICB9Ci0gICAgaWYgKHN0cmxlbihzbGF2ZXJldCkgPiBzbGF2 ZWxlbmd0aCAtIDEpIHsKLQljbG9zZSgqZmQpOwotCSpmZCA9IC0xOwotCXJldHVybihQVFlfR0VU UFRZX1NMQVZFX1RPT0xPTkcpOwotICAgIH0gZWxzZSB7Ci0JY2tzdHJuY3B5KHNsYXZlLCBzbGF2 ZXJldCwgc2xhdmVsZW5ndGgpOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci0KLSNlbHNlIC8qIEhB VkVfX0dFVFBUWSAqLwotCi0gICAgKmZkID0gb3BlbigiL2Rldi9wdHltL2Nsb25lIiwgT19SRFdS fE9fTkRFTEFZKTsgLyogSFBVWCAqLwotICAgIGlmICgqZmQgPj0gMCkgewotICAgICAgICBkZWJ1 ZyhGMTEwLCJwdHlfZ2V0cHR5KCkiLCJvcGVuKC9kZXYvcHR5bS9jbG9uZSkgc3VjY2VzcyIsMCk7 Ci0gICAgICAgIGdvdG8gaGF2ZV9mZDsKLSAgICB9Ci0KLSNpZmRlZiBIQVZFX1BUTVgKLSAgICBk ZWJ1ZyhGMTAwLCJIQVZFX1BUTVgiLCIiLDApOwotICAgICpmZCA9IG9wZW4oIi9kZXYvcHRteCIs T19SRFdSfE9fTkRFTEFZKTsKLSAgICBpZiAoKmZkID49IDApIHsKLSAgICAgICAgZGVidWcoRjEx MCwicHR5X2dldHB0eSgpIiwib3BlbigvZGV2L3B0bXgpIHN1Y2Nlc3MiLDApOwotICAgICAgICBn b3RvIGhhdmVfZmQ7Ci0gICAgfQotI2VuZGlmIC8qIEhBVkVfUFRNWCAqLwotCi0gICAgKmZkID0g b3BlbigiL2Rldi9wdGMiLCBPX1JEV1J8T19OREVMQVkpOyAvKiBBSVggKi8KLSAgICBpZiAoKmZk ID49IDApIHsKLSAgICAgICAgZGVidWcoRjExMCwicHR5X2dldHB0eSgpIiwib3BlbigvZGV2L3B0 Yykgc3VjY2VzcyIsMCk7Ci0gICAgICAgIGdvdG8gaGF2ZV9mZDsKLSAgICB9Ci0gICAgKmZkID0g b3BlbigiL2Rldi9wdHkiLCBPX1JEV1J8T19OREVMQVkpOyAvKiBzeXN2aW1wICovCi0gICAgaWYg KCpmZCA+PSAwKQotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfZ2V0cHR5KCkiLCJvcGVuKC9kZXYv cHR5KSBzdWNjZXNzIiwwKTsKLQotICBoYXZlX2ZkOgotICAgIC8qIFRoaXMgd291bGQgYmUgdGhl IHB0eSBtYXN0ZXIgKi8KLSAgICBkZWJ1ZyhGMTAxLCJwdHlfZ2V0cHR5IGZkKEEpIiwiIiwqZmQp OwotICAgIGlmICgqZmQgPj0gMCkgewotCXB0eV9tYXN0ZXJfZmQgPSAqZmQ7Ci0KLSNpZmRlZiBI QVZFX0dSQU5UUFQKLSNpZmRlZiBIQVZFX1BUTVgKLSAgICAgICAgZGVidWcoRjEwMCwiSEFWRV9H UkFOVFBUIiwiIiwwKTsKLQlpZiAoZ3JhbnRwdCgqZmQpIHx8IHVubG9ja3B0KCpmZCkpCi0JICBy ZXR1cm4oUFRZX0dFVFBUWV9TVFJFQU1TKTsKLSNlbmRpZiAvKiBIQVZFX1BUTVggKi8KLSNlbmRp ZiAvKiBIQVZFX0dSQU5UUFQgKi8KLQotI2lmZGVmIEhBVkVfUFRTTkFNRQotICAgICAgICBkZWJ1 ZyhGMTAwLCJIQVZFX1BUU05BTUUiLCIiLDApOwotCXAgPSAoY2hhciAqKXB0c25hbWUoKmZkKTsK LSAgICAgICAgZGVidWcoRjExMCwicHR5X2dldHB0eSgpIHB0c25hbWUoKSIscCwwKTsKLSNlbHNl Ci0jaWZkZWYgSEFWRV9UVFlOQU1FCi0gICAgICAgIGRlYnVnKEYxMDAsIkhBVkVfVFRZTkFNRSIs IiIsMCk7Ci0JcCA9IHR0eW5hbWUoKmZkKTsKLSAgICAgICAgZGVidWcoRjExMCwicHR5X2dldHB0 eSgpIHR0eW5hbWUoKSIscCwwKTsKLSNlbHNlCi0JLyogSWYgd2UgZG9uJ3QgaGF2ZSBlaXRoZXIg d2hhdCBkbyB3ZSBkbz8gKi8KLSAgCXJldHVybihQVFlfR0VUUFRZX05PUFRZKTsJLyogcHVudCAq LwotI2VuZGlmIC8qIEhBVkVfVFRZTkFNRSAqLwotI2VuZGlmIC8qIEhBVkVfUFRTTkFNRSAqLwot CWlmIChwKSB7Ci0JICAgIGlmIChzdHJsZW4ocCkgPiBzbGF2ZWxlbmd0aCAtIDEpIHsKLSAgICAg ICAgICAgICAgICBjbG9zZSAoKmZkKTsKLSAgICAgICAgICAgICAgICAqZmQgPSAtMTsKLSAgICAg ICAgICAgICAgICByZXR1cm4oUFRZX0dFVFBUWV9TTEFWRV9UT09MT05HKTsKLQkgICAgfQotCSAg ICBja3N0cm5jcHkoc2xhdmUsIHAsIHNsYXZlbGVuZ3RoKTsKLQkgICAgcmV0dXJuKDApOwotCX0K LQlpZiAoZnN0YXQoKmZkLCAmc3RiKSA8IDApIHsKLQkgICAgY2xvc2UoKmZkKTsKLQkgICAgcmV0 dXJuKFBUWV9HRVRQVFlfRlNUQVQpOwotCX0KLQlwdHludW0gPSAoaW50KShzdGIuc3RfcmRldiYw eEZGKTsKLQlzcHJpbnRmKHNsYXZlYnVmLCAiL2Rldi90dHlwJXgiLCBwdHludW0pOyAvKiBzYWZl ICovCi0JaWYgKHN0cmxlbihzbGF2ZWJ1ZikgPiBzbGF2ZWxlbmd0aCAtIDEpIHsKLQkgICAgY2xv c2UoKmZkKTsKLQkgICAgKmZkID0gLTE7Ci0JICAgIHJldHVybihQVFlfR0VUUFRZX1NMQVZFX1RP T0xPTkcpOwotCX0KLSAgICAgICAgZGVidWcoRjExMCwicHR5X2dldHB0eSgpIHNsYXZlYnVmIixz bGF2ZWJ1ZiwwKTsKLQlja3N0cm5jcHkoc2xhdmUsIHNsYXZlYnVmLCBzbGF2ZWxlbmd0aCk7Ci0J cmV0dXJuKDApOwotICAgIH0gZWxzZSB7Ci0gICAgCWZvciAoY3AgPSAicHFyc3R1dnd4eXpQUVJT VCI7KmNwOyBjcCsrKSB7Ci0JICAgIHNwcmludGYoc2xhdmVidWYsIi9kZXYvcHR5WFgiKTsgLyog c2FmZSAqLwotCSAgICBzbGF2ZWJ1ZltzaXplb2YoIi9kZXYvcHR5IikgLSAxXSA9ICpjcDsKLQkg ICAgc2xhdmVidWZbc2l6ZW9mKCIvZGV2L3B0eXAiKSAtIDFdID0gJzAnOwotCSAgICBpZiAoc3Rh dChzbGF2ZWJ1ZiwgJnN0YikgPCAwKQotCSAgICAgIGJyZWFrOwotCSAgICBmb3IgKGkgPSAwOyBp IDwgMTY7IGkrKykgewotCQlzbGF2ZWJ1ZltzaXplb2YoIi9kZXYvcHR5cCIpIC0gMV0gPSAiMDEy MzQ1Njc4OWFiY2RlZiJbaV07Ci0JCWVycm5vID0gMDsKLQkJKmZkID0gb3BlbihzbGF2ZWJ1Ziwg T19SRFdSfE9fTkRFTEFZKTsKLQkJaWYgKCpmZCA8IDApIHsKLQkJICAgIGRlYnVnKEYxMTEsInB0 eV9nZXRwdHkoKSBwdHkgbWFzdGVyIG9wZW4gZXJyb3IiLAotCQkJICBzbGF2ZWJ1ZixlcnJubyk7 Ci0JCSAgICBjb250aW51ZTsKLQkJfQotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInB0eV9n ZXRwdHkoKSBmb3VuZCBwdHkgbWFzdGVyIixzbGF2ZWJ1ZiwqZmQpOwotCQlzbGF2ZWJ1ZltzaXpl b2YoIi9kZXYvIikgLSAxXSA9ICd0JzsgLyogZ290IHB0eSAqLwotCQlpZiAoc3RybGVuKHNsYXZl YnVmKSA+IHNsYXZlbGVuZ3RoIC0xKSB7Ci0JCSAgICBjbG9zZSgqZmQpOwotCQkgICAgKmZkID0g LTE7Ci0JCSAgICByZXR1cm4oUFRZX0dFVFBUWV9TTEFWRV9UT09MT05HKTsKLQkJfQotCQlja3N0 cm5jcHkoc2xhdmUsIHNsYXZlYnVmLCBzbGF2ZWxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgZGVi dWcoRjExMCwicHR5X2dldHB0eSBzbGF2ZSBuYW1lIixzbGF2ZSwwKTsKLQkJcHR5X21hc3Rlcl9m ZCA9ICpmZDsKLQkJcmV0dXJuKDApOwotCSAgICB9Ci0JfQotCXJldHVybihQVFlfR0VUUFRZX05P UFRZKTsKLSAgICB9Ci0jZW5kaWYgLypIQVZFX19HRVRQVFkqLwotI2VuZGlmIC8qIEhBVkVfT1BF TlBUWSAqLwotfQotCi1sb25nCi1wdHlfaW5pdCgpIHsKLSNpZmRlZiBIQVZFX1BUWU0KLSAgICBz dGF0aWMgY2hhciBkdW1teTsKLSAgICBkZWJ1ZyhGMTAwLCJIQVZFX1BUWU0iLCIiLDApOwotICAg IHR0eV9iYW5rID0gICZtYXN0ZXJfbmFtZVtzdHJsZW4oIi9kZXYvcHR5bS9wdHkiKV07Ci0gICAg dHR5X251bSAgPSAgJm1hc3Rlcl9uYW1lW3N0cmxlbigiL2Rldi9wdHltL3B0eVgiKV07Ci0gICAg c2xhdmVfYmFuayA9ICZzbGF2ZV9uYW1lW3N0cmxlbigiL2Rldi9wdHkvdHR5IildOwotICAgIHNs YXZlX251bSAgPSAmc2xhdmVfbmFtZVtzdHJsZW4oIi9kZXYvcHR5L3R0eVgiKV07Ci0jZW5kaWYK LSAgICByZXR1cm4oMEwpOwotfQotCi0vKgotICBUaGUgZm9sbG93aW5nIGlzIGFuIGFycmF5IG9m IG1vZHVsZXMgdGhhdCBzaG91bGQgYmUgcHVzaGVkIG9uIHRoZSBzdHJlYW0uCi0gIFNlZSBjb25m aWd1cmUuaW4gZm9yIGNhdmlhdHMgYW5kIG5vdGVzIGFib3V0IHdoZW4gdGhpcyBhcnJheSBpcyB1 c2VkIGFuZCBub3QKLSAgdXNlZC4KLSovCi0jaWZkZWYgSEFWRV9TVFJFQU1TCi0jaWZuZGVmIEhB VkVfTElORV9QVVNICi1zdGF0aWMgY2hhciAqcHVzaF9saXN0W10gPSB7Ci0jaWZkZWYgUFVTSF9Q VEVNCi0gICAgInB0ZW0iLAotI2VuZGlmCi0jaWZkZWYgUFVTSF9MRFRFUk0KLSAgICAibGR0ZXJt IiwKLSNlbmRpZgotI2lmZGVmIFBVU0hfVFRDT01QQVQKLSAgICAidHRjb21wYXQiLAotI2VuZGlm Ci0gICAgMAotfTsKLSNlbmRpZiAvKiBIQVZFX0xJTkVfUFVTSCAqLwotI2VuZGlmIC8qIEhBVkVf U1RSRUFNUyAqLwotCi1sb25nCi1wdHlfaW5pdGlhbGl6ZV9zbGF2ZSAoZmQpIGludCBmZDsgewot I2lmZGVmIFBPU0lYX1RFUk1JT1MKLSNpZm5kZWYgdWx0cml4Ci0gICAgc3RydWN0IHRlcm1pb3Mg bmV3X3Rlcm1pbzsKLSNlbHNlCi0gICAgc3RydWN0IHNndHR5YiBiOwotI2VuZGlmIC8qIHVsdHJp eCAqLwotI2Vsc2UKLSAgICBzdHJ1Y3Qgc2d0dHliIGI7Ci0jZW5kaWYgLyogUE9TSVhfVEVSTUlP UyAqLwotICAgIGludCBwaWQ7Ci0jaWZkZWYgUE9TSVhfVEVSTUlPUwotI2lmbmRlZiB1bHRyaXgK LSAgICBpbnQgcmM7Ci0jZW5kaWYgLyogdWx0cml4ICovCi0jZW5kaWYgLyogUE9TSVhfVEVSTUlP UyAqLwotCi0gICAgZGVidWcoRjExMSwicHR5X2luaXRpYWxpemVfc2xhdmUoKSIsImZkIixmZCk7 Ci0KLSNpZmRlZiBIQVZFX1NUUkVBTVMKLSNpZmRlZiBIQVZFX0xJTkVfUFVTSAotICAgIHdoaWxl IChpb2N0bChmZCxJX1BPUCwwKSA9PSAwKSA7CS8qIENsZWFyIG91dCBhbnkgb2xkIGxpbmVkJ3Mg Ki8KLQotICAgIGlmIChsaW5lX3B1c2goZmQpIDwgMCkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJw dHlfaW5pdGlhbGl6ZV9zbGF2ZSgpIiwibGluZV9wdXNoKCkgZmFpbGVkIiwwKTsKLQljbG9zZShm ZCk7Ci0gICAgICAgIGZkID0gLTE7Ci0gICAgICAgIHJldHVybihQVFlfT1BFTl9TTEFWRV9MSU5F X1BVU0hGQUlMKTsKLSAgICB9Ci0jZWxzZSAvKk5vIGxpbmVfcHVzaCAqLwotICAgIHsKLSAgICAg ICAgY2hhciAqKm1vZHVsZSA9ICZwdXNoX2xpc3RbMF07Ci0gICAgICAgIHdoaWxlICgqbW9kdWxl KSB7Ci0JICAgIGlmIChpb2N0bChmZCwgSV9QVVNILCAqKG1vZHVsZSsrKSkgPCAwKSB7Ci0gICAg ICAgICAgICAgICAgZGVidWcoRjExMCwicHR5X2luaXRpYWxpemVfc2xhdmUoKSIsImlvY3RsKElf UFVTSCkgZmFpbGVkIiwwKTsKLQkJcmV0dXJuKFBUWV9PUEVOX1NMQVZFX1BVU0hfRkFJTCk7Ci0J ICAgIH0KLQl9Ci0gICAgfQotI2VuZGlmIC8qTElORV9QVVNIKi8KLSNlbmRpZiAvKkhBVkVfU1RS RUFNUyovCi0vKgotICBVbmRlciBVbHRyaXggMy4wLCB0aGUgcGdycCBvZiB0aGUgc2xhdmUgcHR5 IHRlcm1pbmFsIG5lZWRzIHRvIGJlIHNldAotICBleHBsaWNpdGx5LiAgV2h5IHJsb2dpbmQgd29y a3MgYXQgYWxsIHdpdGhvdXQgdGhpcyBvbiA0LjNCU0QgaXMgYSBteXN0ZXJ5LgotKi8KLSNpZmRl ZiBHRVRQR1JQX09ORUFSRwotICAgIHBpZCA9IGdldHBncnAoZ2V0cGlkKCkpOwotI2Vsc2UKLSAg ICBwaWQgPSBnZXRwZ3JwKCk7Ci0jZW5kaWYgLyogR0VUUEdSUF9PTkVBUkcgKi8KLQotICAgIGRl YnVnKEYxMTEsInB0eV9pbml0aWFsaXplX3NsYXZlKCkiLCJwaWQiLHBpZCk7Ci0KLSNpZmRlZiBU SU9DU1BHUlAKLSAgICBpb2N0bChmZCwgVElPQ1NQR1JQLCAmcGlkKTsKLSNlbmRpZiAvKiBUSU9D U1BHUlAgKi8KLQotI2lmZGVmIFBPU0lYX1RFUk1JT1MKLSNpZm5kZWYgdWx0cml4Ci0gICAgdGNz ZXRwZ3JwKGZkLCBwaWQpOwotICAgIGVycm5vID0gMDsKLSAgICByYyA9IHRjZ2V0YXR0cihmZCwm bmV3X3Rlcm1pbyk7Ci0gICAgZGVidWcoRjExMSwicHR5X2luaXRpYWxpemVfc2xhdmUgdGNnZXRh dHRyKGZkKSIsY2tpdG9hKHJjKSxlcnJubyk7Ci0gICAgaWYgKHJjID09IDApIHsKLQluZXdfdGVy bWlvLmNfY2NbVk1JTl0gPSAxOwotCW5ld190ZXJtaW8uY19jY1tWVElNRV0gPSAwOwotCXJjID0g dGNzZXRhdHRyKGZkLFRDU0FOT1csJm5ld190ZXJtaW8pOwotCWRlYnVnKEYxMTEsInB0eV9pbml0 aWFsaXplX3NsYXZlIHRjc2V0YXR0cihmZCkiLGNraXRvYShyYyksZXJybm8pOwotICAgIH0KLSNl bmRpZiAvKiB1bHRyaXggKi8KLSNlbmRpZiAvKiBQT1NJWF9URVJNSU9TICovCi0gICAgcmV0dXJu KDBMKTsKLX0KLQotI2lmZGVmIFdBTlRfVVRNUAotbG9uZwotcHR5X2xvZ3d0bXAgKHR0eSwgdXNl ciwgaG9zdCkgY2hhciAqdXNlciwgKnR0eSwgKmhvc3Q7IHsKLSNpZmRlZiBIQVZFX0xPR1dUTVAK LSAgICBsb2d3dG1wKHR0eSx1c2VyLGhvc3QpOwotICAgIHJldHVybigwKTsKLSNlbHNlCi0gICAg c3RydWN0IHV0bXAgdXQ7Ci0gICAgY2hhciAqdG1weDsKLSAgICBjaGFyIHV0bXBfaWRbNV07Ci0g ICAgaW50IGxvZ2dpbmdpbiA9IHVzZXJbMF07CQkvKiBXaWxsIGJlIGVtcHR5IGZvciBsb2dvdXQg Ki8KLQotI2lmbmRlZiBOT19VVF9IT1NUCi0gICAgc3RybmNweSh1dC51dF9ob3N0LCBob3N0LCBz aXplb2YodXQudXRfaG9zdCkpOwotI2VuZGlmIC8qIE5PX1VUX0hPU1QgKi8KLQotICAgIHN0cm5j cHkodXQudXRfbGluZSwgdHR5LCBzaXplb2YodXQudXRfbGluZSkpOwotICAgIHV0LnV0X3RpbWUg PSB0aW1lKDApOwotCi0jaWZuZGVmIE5PX1VUX1BJRAotICAgIHV0LnV0X3BpZCA9IGdldHBpZCgp OwotICAgIHN0cm5jcHkodXQudXRfdXNlciwgdXNlciwgc2l6ZW9mKHV0LnV0X3VzZXIpKTsKLQot ICAgIHRtcHggPSB0dHkgKyBzdHJsZW4odHR5KSAtIDI7Ci0gICAgY2ttYWttc2codXRtcF9pZCw1 LCJrciIsdG1weCxOVUxMLE5VTEwpOwotICAgIHN0cm5jcHkodXQudXRfaWQsIHV0bXBfaWQsIHNp emVvZih1dC51dF9pZCkpOwotICAgIHV0LnV0X3BpZCA9IChsb2dnaW5naW4gPyBnZXRwaWQoKSA6 IDApOwotICAgIHV0LnV0X3R5cGUgPSAobG9nZ2luZ2luID8gVVNFUl9QUk9DRVNTIDogREVBRF9Q Uk9DRVNTKTsKLSNlbHNlCi0gICAgc3RybmNweSh1dC51dF9uYW1lLCB1c2VyLCBzaXplb2YodXQu dXRfbmFtZSkpOwotI2VuZGlmIC8qIE5PX1VUX1BJRCAqLwotCi0gICAgcmV0dXJuKHB0eWludF91 cGRhdGVfd3RtcCgmdXQsIGhvc3QsIHVzZXIpKTsKLQotI2VuZGlmIC8qIEhBVkVfTE9HV1RNUCAq LwotfQotI2VuZGlmIC8qIFdBTlRfVVRNUCAqLwotCi0vKgotICBUaGlzIHJvdXRpbmUgaXMgY2Fs bGVkIHR3aWNlLiAgSXQncyBub3QgcGFydGljdWxhcmx5IGltcG9ydGFudCB0aGF0IHRoZQotICBz ZXRzaWQoKSBvciBUSU9DU0NUVFkgaW9jdGxzIHN1Y2NlZWQgKHRoZXkgbWF5IG5vdCB0aGUgc2Vj b25kIHRpbWUpLCBidXQKLSAgcmF0aGVyIHRoYXQgd2UgaGF2ZSBhIGNvbnRyb2xsaW5nIHRlcm1p bmFsIGF0IHRoZSBlbmQuICBJdCBpcyBhc3N1bWVkIHRoYXQKLSAgdmhhbmd1cCBkb2Vzbid0IGV4 aXN0IGFuZCBjb25mdXNlIHRoZSBwcm9jZXNzJ3Mgbm90aW9uIG9mIGNvbnRyb2xsaW5nCi0gIHRl cm1pbmFsIG9uIGFueSBzeXN0ZW0gd2l0aG91dCBUSU9DTk9UVFkuICBUaGF0IGlzLCBlaXRoZXIg dmhhbmd1cCgpIGxlYXZlcwotICB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgaW4gdGFjdCwgYnJl YWtzIHRoZSBhc3NvY2lhdGlvbiBjb21wbGV0ZWx5LCBvciB0aGUKLSAgc3lzdGVtIHByb3ZpZGVz IFRJT0NOT1RUWSB0byBnZXQgdGhpbmdzIGJhY2sgaW50byBhIHJlYXNvbmFibGUgc3RhdGUuICBJ bgotICBwcmFjdGljZSwgdmhhbmd1cCgpIGVpdGhlciBicmVha3MgdGhlIGFzc29jaWF0aW9uIGNv bXBsZXRlbHkgb3IgZG9lc24ndAotICBlZmZlY3QgY29udHJvbGxpbmcgdGVybWluYWxzLCBzbyB0 aGlzIGNvbmRpdGlvbiBpcyBtZXQuCi0qLwotbG9uZwotcHR5X29wZW5fY3R0eShzbGF2ZSwgZmQs IGZjKSBjaGFyICogc2xhdmU7IGludCAqZmQ7IGludCBmYzsgewotICAgIGludCByZXR2YWw7Ci0K LSAgICBkZWJ1ZyhGMTEwLCJwdHlfb3Blbl9jdHR5KCkgc2xhdmUiLHNsYXZlLDApOwotCi0vKiBG aXJzdCwgZGlzc29jaWF0ZSBmcm9tIHByZXZpb3VzIHRlcm1pbmFsICovCi0KLSAgICBpZiAoKHJl dHZhbCA9IHB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkpICE9IDApIHsKLSAgICAgICAgZGVidWco RjExMSwKLQkgICAgICAicHR5X29wZW5fY3R0eSgpIiwKLQkgICAgICAicHR5aW50X3ZvaWRfYXNz b2NpYXRpb24oKSBmYWlsZWQiLAotCSAgICAgIHJldHZhbAotCSAgICAgICk7Ci0JcmV0dXJuKHJl dHZhbCk7Ci0gICAgfQotI2lmZGVmIE1VU1RfU0VUUEdSUAotLyoKLSAgVGhlIFVsdHJpeCAoYW5k IG90aGVyIEJTRCB0dHkgZHJpdmVycykgcmVxdWlyZSB0aGUgcHJvY2VzcyBncm91cAotICB0byBi ZSB6ZXJvIGluIG9yZGVyIHRvIGFjcXVpcmUgdGhlIG5ldyB0dHkgYXMgYSBjb250cm9sbGluZyB0 dHkuCi0qLwotICAgIHNldHBncnAoMCwwKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfb3Blbl9jdHR5 IE1VU1RfU0VUUEdSUCBzZXRwZ3JwKDAsMCkiLCIiLGVycm5vKTsKLSNlbmRpZiAvKiBNVVNUX1NF VFBHUlAgKi8KLQotICAgIGVycm5vID0gMDsKLSAgICAqZmQgPSBvcGVuKHNsYXZlLCBPX1JEV1Ip OwotICAgIGRlYnVnKEYxMTEsInB0eV9vcGVuX2N0dHkgb3BlbihzbGF2ZSkgZmQiLHNsYXZlLCpm ZCk7Ci0gICAgaWYgKCpmZCA8IDApIHsKLQlkZWJ1ZyhGMTExLCJwdHlfb3Blbl9jdHR5KCkgb3Bl biBmYWlsdXJlIiwgc2xhdmUsIGVycm5vKTsKLQlyZXR1cm4oUFRZX09QRU5fU0xBVkVfT1BFTkZB SUwpOwotICAgIH0KLSNpZmRlZiBTT0xBUklTCi0gICAgLyogVGhpcyBmb3JjZXMgdGhlIGpvYiB0 byBoYXZlIGEgY29udHJvbGxpbmcgdGVybWluYWwuICovCi0gICAgY2xvc2UoKmZkKTsKLSAgICAq ZmQgPSBvcGVuKHNsYXZlLCBPX1JEV1IpOwotICAgIGRlYnVnKEYxMTEsInB0eV9vcGVuX2N0dHkg Y2xvc2Uvb3BlbihzbGF2ZSkgZmQiLHNsYXZlLCpmZCk7Ci0jaWZkZWYgREVCVUcKLSAgICAvKiBU aGlzIHNob3dzIHRoYXQgL2Rldi90dHkgZXhpc3RzICovCi1pZiAoZGVibG9nKSB7Ci0JaW50IHg7 Ci0JeCA9IG9wZW4oIi9kZXYvdHR5IiwgT19SRFdSKTsKLQlkZWJ1ZyhGMTExLCJwdHlfb3Blbl9j dHR5IG9wZW4oL2Rldi90dHkpIGZkIixzbGF2ZSx4KTsKLQlpZiAoeCA8IDApIGRlYnVnKEYxMTEs InB0eV9vcGVuX2N0dHkgb3BlbigvZGV2L3R0eSkgZXJybm8iLCIiLGVycm5vKTsKLQlkZWJ1ZyhG MTEwLCJwdHlfb3Blbl9jdHR5IHR0eW5hbWUoL2Rldi90dHkpIix0dHluYW1lKHgpLDApOwotCWlm ICh4ID4gLTEpIGNsb3NlKHgpOwotICAgIH0KLSNlbmRpZgkvKiBERUJVRyAqLwotI2VuZGlmIC8q IFNPTEFSSVMgKi8KLQotI2lmZGVmIE1VU1RfU0VUUEdSUAotICAgIHNldHBncnAoMCwgZ2V0cGlk KCkpOwotI2VuZGlmIC8qIE1VU1RfU0VUUEdSUCAqLwotCi0jaWZkZWYgVElPQ1NDVFRZCi0gICAg aWYgKAotI2lmZGVmIENPTU1FTlQKLQlmYyA9PSAwCi0jZWxzZQotCTEKLSNlbmRpZgkvKiBDT01N RU5UICovCi0JKSB7Ci0JLyogVElPQ1NDVFRZID0gTWFrZSB0aGlzIHRoZSBqb2IncyBjb250cm9s bGluZyB0ZXJtaW5hbCAqLwotCWVycm5vID0gMDsKLQlyZXR2YWwgPSBpb2N0bCgqZmQsIFRJT0NT Q1RUWSwgMCk7IC8qIERvbid0IGNoZWNrIHJldHVybi4qLwotCWRlYnVnKEYxMTEsInB0eV9vcGVu X2N0dHkoKSBpb2N0bCBUSU9DU0NUVFkiLGNraXRvYShyZXR2YWwpLGVycm5vKTsKLSAgICB9Ci0j ZW5kaWYgLyogVElPQ1NDVFRZICovCi0gICAgcmV0dXJuKDBMKTsKLX0KLQotbG9uZwotcHR5X29w ZW5fc2xhdmUoc2xhdmUsIGZkLCBmYykgY2hhciAqc2xhdmU7IGludCAqZmQ7IGludCBmYzsgewot ICAgIGludCB2ZmQsIHRlc3RmZDsKLSAgICBsb25nIHJldHZhbDsKLSNpZmRlZiBDS19QT1NJWF9T SUcKLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwotCi0gICAgc2lnZW1wdHlzZXQoJnNhLnNhX21h c2spOwkJLyogSW5pdGlhbGl6ZSAic2EiIHN0cnVjdHVyZS4gKi8KLSAgICBzYS5zYV9mbGFncyA9 IDA7Ci0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0KLS8qCi0gIEZpcnN0LCBjaG1vZCBhbmQg Y2hvd24gdGhlIHNsYXZlLiAgSWYgd2UgaGF2ZSB2aGFuZ3VwIHRoZW4gd2UgcmVhbGx5IG5lZWQK LSAgcHR5X29wZW5fY3R0eSB0byBtYWtlIHN1cmUgb3VyIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGlz IHRoZSBwdHkgd2UncmUKLSAgb3BlbmluZy4gIEhvd2V2ZXIsIGlmIHdlIGFyZSB1c2luZyByZXZv a2Ugb3Igbm90aGluZyB0aGVuIHdlIGp1c3QgbmVlZCBhCi0gIGZpbGUgZGVzY3JpaXB0b3IgZm9y IHRoZSBwdHkuICBDb25zaWRlcmluZyBzb21lIE9TZXMgaW4gdGhpcyBjYXRlZ29yeSBicmVhawot ICBvbiB0aGUgc2Vjb25kIGNhbGwgdG8gb3Blbl9jdHR5IChjdXJyZW50bHkgT1NGIGJ1dCBvdGhl cnMgbWF5KSwgd2Ugc2ltcGx5Ci0gIHVzZSBhIGRlc2NyaXB0b3IgaWYgd2UgY2FuLgotKi8KLSNp ZmRlZiBWSEFOR19GSVJTVAotICAgIGlmICgocmV0dmFsID0gcHR5X29wZW5fY3R0eShzbGF2ZSwg JnZmZCwgZmMpKSAhPSAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsCi0JICAgICAgInB0eV9vcGVu X3NsYXZlKCkgVkhBTkdfRklSU1QiLAotCSAgICAgICJwdHlfb3Blbl9jdHR5KCkgZmFpbGVkIiwK LQkgICAgICByZXR2YWwKLQkgICAgICApOwotICAgICAgICByZXR1cm4ocmV0dmFsKTsKLSAgICB9 Ci0gICAgaWYgKHZmZCA8IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwKLQkgICAgICAicHR5X29w ZW5fc2xhdmUoKSBWSEFOR19GSVJTVCIsCi0JICAgICAgIlBUWV9PUEVOX1NMQVZFX09QRU5GQUlM IiwKLQkgICAgICB2ZmQKLQkgICAgICApOwotCXJldHVybihQVFlfT1BFTl9TTEFWRV9PUEVORkFJ TCk7Ci0gICAgfQotI2VuZGlmIC8qIFZIQU5HX0ZJUlNUICovCi0KLSAgICBpZiAoc2xhdmUgPT0g TlVMTCB8fCAqc2xhdmUgPT0gJ1wwJykgewotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfb3Blbl9z bGF2ZSgpIiwiUFRZX09QRU5fU0xBVkVfVE9PU0hPUlQiLDApOwotICAgICAgICByZXR1cm4oUFRZ X09QRU5fU0xBVkVfVE9PU0hPUlQpOwotICAgIH0KLQotI2lmZGVmIFNFVFVJRAotICAgIGlmIChj aG1vZChzbGF2ZSwgMCkpIHsKLSAgICAgICAgZGVidWcoRjExMCwicHR5X29wZW5fc2xhdmUoKSIs IlBUWV9PUEVOX1NMQVZFX0NITU9ERkFJTCIsMCk7Ci0gICAgICAgIHJldHVybihQVFlfT1BFTl9T TEFWRV9DSE1PREZBSUwpOwotICAgIH0KLSAgICBpZiAoY2hvd24oc2xhdmUsIDAsIDAgKSA9PSAt MSApIHsKLSAgICAgICAgZGVidWcoRjExMCwicHR5X29wZW5fc2xhdmUoKSIsIlBUWV9PUEVOX1NM QVZFX0NIT1dORkFJTCIsMCk7Ci0gICAgICAgIHJldHVybihQVFlfT1BFTl9TTEFWRV9DSE9XTkZB SUwpOwotICAgIH0KLSNlbmRpZiAvKiBTRVRVSUQgKi8KLSNpZmRlZiBWSEFOR19GSVJTVAotICAg IHB0eWludF92aGFuZ3VwKCk7Ci0gICAgY2xvc2UodmZkKTsKLSNlbmRpZiAvKiBWSEFOR19GSVJT VCAqLwotCi0gICAgaWYgKChyZXR2YWwgPSBwdHlpbnRfdm9pZF9hc3NvY2lhdGlvbigpKSAhPSAw KSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsCi0JICAgICAgInB0eV9vcGVuX3NsYXZlKCkiLAotCSAg ICAgICJwdHlpbnRfdm9pZF9hc3NvY2lhdGlvbigpIGZhaWxlZCIsCi0JICAgICAgcmV0dmFsCi0J ICAgICAgKTsKLSAgICAgICAgcmV0dXJuKHJldHZhbCk7Ci0gICAgfQotCi0jaWZkZWYgSEFWRV9S RVZPS0UKLSAgICBpZiAocmV2b2tlIChzbGF2ZSkgPCAwICkgewotICAgICAgICBkZWJ1ZyhGMTEw LCJwdHlfb3Blbl9zbGF2ZSgpIiwiUFRZX09QRU5fU0xBVkVfUkVWT0tFRkFJTCIsMCk7Ci0JcmV0 dXJuKFBUWV9PUEVOX1NMQVZFX1JFVk9LRUZBSUwpOwotICAgIH0KLSNlbmRpZiAvKiBIQVZFX1JF Vk9LRSAqLwotCi0vKiBPcGVuIHRoZSBwdHkgZm9yIHJlYWwuICovCi0KLSAgICByZXR2YWwgPSBw dHlfb3Blbl9jdHR5KHNsYXZlLCBmZCwgZmMpOwotICAgIGRlYnVnKEYxMTEsInB0eV9vcGVuX3Ns YXZlIHJldHZhbCIsc2xhdmUscmV0dmFsKTsKLSAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9zbGF2 ZSBmZCIsc2xhdmUsKmZkKTsKLSAgICBpZiAocmV0dmFsICE9IDApIHsKLSAgICAgICAgZGVidWco RjExMSwicHR5X29wZW5fc2xhdmUoKSIsInB0eV9vcGVuX2N0dHkoKSBmYWlsZWQiLHJldHZhbCk7 Ci0JcmV0dXJuKFBUWV9PUEVOX1NMQVZFX09QRU5GQUlMKTsKLSAgICB9Ci0gICAgcHR5X3NsYXZl X2ZkID0gKmZkOwkJICAgLyogVGhpcyBpcyBub3QgdmlzaWJsZSB0byB0aGUgdXBwZXIgZm9yayAq LwotICAgIGRlYnVnKEYxMTEsInB0eV9vcGVuX3NsYXZlIGZkIGN0dHknZCIsc2xhdmUscHR5X3Ns YXZlX2ZkKTsKLSAgICByZXR2YWwgPSBwdHlfaW5pdGlhbGl6ZV9zbGF2ZSgqZmQpOwotICAgIGRl YnVnKEYxMTEsInB0eV9vcGVuX3NsYXZlIGZkIGluaXQnZCIsc2xhdmUscHR5X3NsYXZlX2ZkKTsK LSAgICBpZiAocmV0dmFsKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsInB0eV9vcGVuX3NsYXZlKCki LCJwdHlfaW5pdGlhbGl6ZV9zbGF2ZSgpIGZhaWxlZCIscmV0dmFsKTsKLSAgICAgICAgcmV0dXJu KHJldHZhbCk7Ci0gICAgfQotICAgIC8qIChWT0lEKXB0eV9tYWtlX3JhdygqZmQpOyAqLwotCi0g ICAgZGVidWcoRjEwMCwicHR5X29wZW5fc2xhdmUgT0siLCIiLCpmZCk7Ci0gICAgcmV0dXJuKDBM KTsKLX0KLQotI2lmZGVmIFdBTlRfVVRNUAotCi0jaWZuZGVmIFVUTVBfRklMRQotI2lmZGVmIF9Q QVRIX1VUTVAKLSNkZWZpbmUgVVRNUF9GSUxFIF9QQVRIX1VUTVAKLSNlbmRpZiAvKiBfUEFUSF9V VE1QICovCi0jZW5kaWYgLyogIFVUTVBfRklMRSAqLwotCi0vKiBJZiBpdCBpcyAqc3RpbGwqIG1p c3NpbmcsIGFzc3VtZSAvZXRjL3V0bXAgKi8KLQotI2lmbmRlZiBVVE1QX0ZJTEUKLSNkZWZpbmUJ VVRNUF9GSUxFICIvZXRjL3V0bXAiCi0jZW5kaWYgLyogVVRNUF9GSUxFICovCi0KLSNpZm5kZWYg Tk9fVVRfUElECi0jZGVmaW5lIFdUTVBfUkVRVUlSRVNfVVNFUk5BTUUKLSNlbmRpZiAvKiBOT19V VF9QSUQgKi8KLQotbG9uZwotcHR5X3VwZGF0ZV91dG1wKHByb2Nlc3NfdHlwZSwgcGlkLCB1c2Vy bmFtZSwgbGluZSwgaG9zdCwgZmxhZ3MpCi0gICAgaW50IHByb2Nlc3NfdHlwZTsKLSAgICBpbnQg cGlkOwotICAgIGNoYXIgKnVzZXJuYW1lLCAqbGluZSwgKmhvc3Q7Ci0gICAgaW50IGZsYWdzOwot LyogcHR5X3VwZGF0ZV91dG1wICovIHsKLSAgICBzdHJ1Y3QgdXRtcCBlbnQsIHV0OwotI2lmbmRl ZiBIQVZFX1NFVFVURU5UCi0gICAgc3RydWN0IHN0YXQgc3RhdGI7Ci0gICAgaW50IHR0eTsKLSNl bmRpZiAvKiBIQVZFX1NFVFVURU5UICovCi0jaWZkZWYgSEFWRV9TRVRVVFhFTlQKLSAgICBzdHJ1 Y3QgdXRtcHggdXR4OwotI2VuZGlmIC8qIEhBVkVfU0VUVVRYRU5UICovCi0jaWZuZGVmIE5PX1VU X1BJRAotICAgIGNoYXIgKnRtcHg7Ci0gICAgY2hhciB1dG1wX2lkWzVdOwotI2VuZGlmIC8qIE5P X1VUX1BJRCAqLwotICAgIGNoYXIgdXNlcmJ1ZlszMl07Ci0gICAgaW50IGZkOwotCi0gICAgZGVi dWcoRjEwMCwicHR5X3VwZGF0ZV91dG1wKCkiLCIiLDApOwotICAgIHN0cm5jcHkoZW50LnV0X2xp bmUsIGxpbmUrc2l6ZW9mKCIvZGV2LyIpLTEsIHNpemVvZihlbnQudXRfbGluZSkpOwotICAgIGVu dC51dF90aW1lID0gdGltZSgwKTsKLQotI2lmZGVmIE5PX1VUX1BJRAotICAgIGlmIChwcm9jZXNz X3R5cGUgPT0gUFRZX0xPR0lOX1BST0NFU1MpCi0gICAgICByZXR1cm4oMEwpOwotI2Vsc2UgLyog Tk9fVVRfUElEICovCi0KLSAgICBlbnQudXRfcGlkID0gcGlkOwotCi0gICAgc3dpdGNoIChwcm9j ZXNzX3R5cGUpIHsKLSAgICAgIGNhc2UgUFRZX0xPR0lOX1BST0NFU1M6Ci0JZW50LnV0X3R5cGUg PSBMT0dJTl9QUk9DRVNTOwotCWJyZWFrOwotICAgICAgY2FzZSBQVFlfVVNFUl9QUk9DRVNTOgot CWVudC51dF90eXBlID0gVVNFUl9QUk9DRVNTOwotCWJyZWFrOwotICAgICAgY2FzZSBQVFlfREVB RF9QUk9DRVNTOgotCWVudC51dF90eXBlID0gREVBRF9QUk9DRVNTOwotCWJyZWFrOwotICAgICAg ZGVmYXVsdDoKLQlyZXR1cm4oUFRZX1VQREFURV9VVE1QX1BST0NUWVBFX0lOVkFMSUQpOwotICAg IH0KLSNlbmRpZiAvKk5PX1VUX1BJRCovCi0KLSNpZm5kZWYgTk9fVVRfSE9TVAotICAgIGlmICho b3N0KQotICAgICAgc3RybmNweShlbnQudXRfaG9zdCwgaG9zdCwgc2l6ZW9mKGVudC51dF9ob3N0 KSk7Ci0gICAgZWxzZQotICAgICAgZW50LnV0X2hvc3RbMF0gPSAnXDAnOwotI2VuZGlmIC8qIE5P X1VUX0hPU1QgKi8KLQotI2lmbmRlZiBOT19VVF9QSUQKLSAgICBpZiAoIXN0cmNtcCAobGluZSwg Ii9kZXYvY29uc29sZSIpKSB7Ci0JY2hhciAqIHMgPSBOVUxMOwotCi0jaWZkZWYgc3VuCi0jaWZk ZWYgX19TVlI0Ci0JcyA9ICJjbyI7Ci0jZWxzZQotCXMgPSAiY29ucyI7Ci0jZW5kaWYgLyogX19T VlI0ICovCi0jZWxzZQotCXMgPSAiY29ucyI7Ci0jZW5kaWYgLyogc3VuICovCi0KLQlzdHJuY3B5 KGVudC51dF9pZCwgcywgNCk7Ci0KLSAgICB9IGVsc2UgewotCi0JdG1weCA9IGxpbmUgKyBzdHJs ZW4obGluZSktMTsKLQlpZiAoKih0bXB4LTEpICE9ICcvJykgdG1weC0tOwkvKiBsYXN0IDIgY2hh cnMgdW5sZXNzIGl0J3MgYSAnLycgKi8KLSNpZmRlZiBfX2hwdXgKLQlja3N0cm5jcHkodXRtcF9p ZCwgdG1weCwgNSk7Ci0jZWxzZQotCWNrbWFrbXNnKHV0bXBfaWQsNSwia2wiLHRtcHgsTlVMTCxO VUxMKTsKLSNlbmRpZiAvKiBfX2hwdXggKi8KLQlzdHJuY3B5KGVudC51dF9pZCwgdXRtcF9pZCwg c2l6ZW9mKGVudC51dF9pZCkpOwotICAgIH0KLSAgICBzdHJuY3B5KGVudC51dF91c2VyLCB1c2Vy bmFtZSwgc2l6ZW9mKGVudC51dF91c2VyKSk7Ci0KLSNlbHNlCi0KLSAgICBzdHJuY3B5KGVudC51 dF9uYW1lLCB1c2VybmFtZSwgc2l6ZW9mKGVudC51dF9uYW1lKSk7Ci0KLSNlbmRpZiAvKiBOT19V VF9QSUQgKi8KLQotICAgIGlmICh1c2VybmFtZVswXSkKLSAgICAgIHN0cm5jcHkodXNlcmJ1Ziwg dXNlcm5hbWUsIHNpemVvZih1c2VyYnVmKSk7Ci0gICAgZWxzZQotICAgICAgdXNlcmJ1ZlswXSA9 ICdcMCc7Ci0KLSNpZmRlZiBIQVZFX1NFVFVURU5UCi0KLSAgICB1dG1wbmFtZShVVE1QX0ZJTEUp OwotICAgIHNldHV0ZW50KCk7Ci0vKgotICBJZiB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoZSB1c2Vy IG5hbWUgaW4gdGhlIHd0bXAgc3RydWN0dXJlIGFuZCBPdXIgZmxhZ3MKLSAgdGVsbCB1cyB3ZSBj YW4gb2J0YWluIGl0IGZyb20gdGhlIHV0bXAgYW5kIHdlIHN1Y2NlZWQgaW4gb2J0YWluaW5nIGl0 LCB3ZQotICB0aGVuIHNhdmUgdGhlIHV0bXAgc3RydWN0dXJlIHdlIG9idGFpbiwgd3JpdGUgb3V0 IHRoZSB1dG1wIHN0cnVjdHVyZSBhbmQKLSAgY2hhbmdlIHRoZSB1c2VybmFtZSBwb2ludGVyIHNv IGl0IGlzIHVzZWQgYnkgdXBkYXRlX3d0bXAuCi0qLwotCi0jaWZkZWYgV1RNUF9SRVFVSVJFU19V U0VSTkFNRQotICAgIGlmICgoIXVzZXJuYW1lWzBdKSAmJiAoZmxhZ3MmUFRZX1VUTVBfVVNFUk5B TUVfVkFMSUQpICYmbGluZSkgewotCXN0cnVjdCB1dG1wICp1dHB0cjsKLQlzdHJuY3B5KHV0LnV0 X2xpbmUsIGxpbmUsIHNpemVvZih1dC51dF9saW5lKSk7Ci0JdXRwdHIgPSBnZXR1dGxpbmUoJnV0 KTsKLQlpZiAodXRwdHIpCi0JICBzdHJuY3B5KHVzZXJidWYsdXRwdHItPnV0X3VzZXIsc2l6ZW9m KHV0LnV0X3VzZXIpKTsKLSAgICB9Ci0jZW5kaWYgLyogV1RNUF9SRVFVSVJFU19VU0VSTkFNRSAq LwotCi0gICAgcHV0dXRsaW5lKCZlbnQpOwotICAgIGVuZHV0ZW50KCk7Ci0KLSNpZmRlZiBIQVZF X1NFVFVUWEVOVAotICAgIHNldHV0eGVudCgpOwotI2lmZGVmIEhBVkVfR0VUVVRNUFgKLSAgICBn ZXR1dG1weCgmZW50LCAmdXR4KTsKLSNlbHNlIC8qIEhBVkVfR0VUVVRNUFggKi8KLSAgICAvKiBG b3IgcGxhdGZvcm1zIGxpa2UgSFBVWCBhbmQgRGVjIFVuaXggd2hpY2ggZG9uJ3QgaGF2ZSBnZXR1 dG1weCAqLwotICAgIHN0cm5jcHkodXR4LnV0X3VzZXIsIGVudC51dF91c2VyLCBzaXplb2YoZW50 LnV0X3VzZXIpKTsKLSAgICBzdHJuY3B5KHV0eC51dF9pZCwgZW50LnV0X2lkLCBzaXplb2YoZW50 LnV0X2lkKSk7Ci0gICAgc3RybmNweSh1dHgudXRfbGluZSwgZW50LnV0X2xpbmUsIHNpemVvZihl bnQudXRfbGluZSkpOwotICAgIHV0eC51dF9waWQgPSBwaWQ7CQkvKiBrbHVkZ2UgZm9yIElyaXgs IGV0Yy4gdG8gYXZvaWQgdHJ1bmMuICovCi0gICAgdXR4LnV0X3R5cGUgPSBlbnQudXRfdHlwZTsK LSNpZmRlZiBVVF9FWElUX1NUUlVDVFVSRV9ESUZGRVIKLSAgICB1dHgudXRfZXhpdC51dF9leGl0 ID0gZW50LnV0X2V4aXQuZV9leGl0OwotI2Vsc2UgLyogVVRfRVhJVF9TVFJVQ1RVUkVfRElGRkVS ICovCi0vKiBLTFVER0UgZm9yIG5vdzsgZXZlbnR1YWxseSB0aGlzIHdpbGwgYmUgYSBmZWF0dXJl IHRlc3QuLi4gU2VlIFBSI1s0MF0gKi8KLSNpZmRlZiBfX2hwdXgKLSAgICB1dHgudXRfZXhpdC5f X2VfdGVybWluYXRpb24gPSBlbnQudXRfZXhpdC5lX3Rlcm1pbmF0aW9uOwotICAgIHV0eC51dF9l eGl0Ll9fZV9leGl0ID0gZW50LnV0X2V4aXQuZV9leGl0OwotI2Vsc2UgLyogX19ocHV4ICovCi0g ICAgLyogWFhYIGRvIG5vdGhpbmcgZm9yIG5vdzsgd2UgZG9uJ3QgZXZlbiBrbm93IHRoZSBzdHJ1 Y3QgbWVtYmVyIGV4aXN0cyAqLwotI2VuZGlmIC8qIF9faHB1eCAqLwotI2VuZGlmIC8qIFVUX0VY SVRfU1RSVUNUVVJFX0RJRkZFUiAqLwotICAgIHV0eC51dF90di50dl9zZWMgPSBlbnQudXRfdGlt ZTsKLSAgICB1dHgudXRfdHYudHZfdXNlYyA9IDA7Ci0jZW5kaWYgLyogSEFWRV9HRVRVVE1QWCAq LwotICAgIGlmIChob3N0KQotICAgICAgc3RybmNweSh1dHgudXRfaG9zdCwgaG9zdCwgc2l6ZW9m KHV0eC51dF9ob3N0KSk7Ci0gICAgZWxzZQotICAgICAgdXR4LnV0X2hvc3RbMF0gPSAwOwotICAg IHB1dHV0eGxpbmUoJnV0eCk7Ci0gICAgZW5kdXR4ZW50KCk7Ci0jZW5kaWYgLyogSEFWRV9TRVRV VFhFTlQgKi8KLQotI2Vsc2UgLyogSEFWRV9TRVRVVEVOVCAqLwotICAgIGlmIChmbGFncyZQVFlf VFRZU0xPVF9VU0FCTEUpIHsKLQl0dHkgPSB0dHlzbG90KCk7Ci0gICAgfSBlbHNlIHsKLQlpbnQg bGM7Ci0JdHR5ID0gLTE7Ci0JaWYgKChmZCA9IG9wZW4oVVRNUF9GSUxFLCBPX1JEV1IpKSA8IDAp Ci0JICByZXR1cm4oZXJybm8pOwotCWZvciAobGMgPSAwOwotCSAgICAgbHNlZWsoZmQsIChvZmZf dCkobGMgKiBzaXplb2Yoc3RydWN0IHV0bXApKSwgU0VFS19TRVQpICE9IC0xOwotCSAgICAgbGMr KwotCSAgICAgKSB7Ci0JICAgIGlmIChyZWFkKGZkLAotCQkgICAgIChjaGFyICopJnV0LAotCQkg ICAgIHNpemVvZihzdHJ1Y3QgdXRtcCkKLQkJICAgICApICE9IHNpemVvZihzdHJ1Y3QgdXRtcCkK LQkJKQotCSAgICAgIGJyZWFrOwotCSAgICBpZiAoc3RybmNtcCh1dC51dF9saW5lLCBlbnQudXRf bGluZSwgc2l6ZW9mKHV0LnV0X2xpbmUpKSA9PSAwKSB7Ci0JCXR0eSA9IGxjOwotI2lmZGVmIFdU TVBfUkVRVUlSRVNfVVNFUk5BTUUKLQkJaWYgKCF1c2VybmFtZSYmKGZsYWdzJlBUWV9VVE1QX1VT RVJOQU1FX1ZBTElEKSkKLQkJICBzdHJuY3B5KHVzZXJidWYsIHV0LnV0X3VzZXIsIHNpemVvZih1 dC51dF91c2VyKSk7Ci0jZW5kaWYgLyogV1RNUF9SRVFVSVJFU19VU0VSTkFNRSAqLwotCQlicmVh azsKLQkgICAgfQotCX0KLQljbG9zZShmZCk7Ci0gICAgfQotICAgIGlmICh0dHkgPiAwICYmIChm ZCA9IG9wZW4oVVRNUF9GSUxFLCBPX1dST05MWSwgMCkpID49IDApIHsKLQlsc2VlayhmZCwgKG9m Zl90KSh0dHkgKiBzaXplb2Yoc3RydWN0IHV0bXApKSwgU0VFS19TRVQpOwotCXdyaXRlKGZkLCAo Y2hhciAqKSZlbnQsIHNpemVvZihzdHJ1Y3QgdXRtcCkpOwotCWNsb3NlKGZkKTsKLSAgICB9Ci0j ZW5kaWYgLyogSEFWRV9TRVRVVEVOVCAqLwotCi0gICAgLyogRG9uJ3QgcmVjb3JkIExPR0lOX1BS T0NFU1MgZW50cmllcy4gKi8KLSAgICBpZiAocHJvY2Vzc190eXBlID09IFBUWV9MT0dJTl9QUk9D RVNTKQotICAgICAgcmV0dXJuKDApOwotICAgIGVsc2UKLSAgICAgIHJldHVybihwdHlpbnRfdXBk YXRlX3d0bXAoJmVudCwgaG9zdCwgdXNlcmJ1ZikpOwotfQotI2lmbmRlZiBXVE1QX0ZJTEUKLSNp ZmRlZiBfUEFUSF9XVE1QCi0jZGVmaW5lIFdUTVBfRklMRSBfUEFUSF9XVE1QCi0jZW5kaWYgLyog X1BBVEhfV1RNUCAqLwotI2VuZGlmIC8qIFdUTVBfRklMRSAqLwotCi0jaWZuZGVmIFdUTVBYX0ZJ TEUKLSNpZmRlZiBfUEFUSF9XVE1QWAotI2lmZGVmIEhBVkVfVVBEV1RNUFgKLSNkZWZpbmUgV1RN UFhfRklMRSBfUEFUSF9XVE1QWAotI2VuZGlmIC8qIEhBVkVfVVBEV1RNUFggKi8KLSNlbmRpZiAv KiBfUEFUSF9XVE1QWCAqLwotI2VuZGlmIC8qIFdUTVBYX0ZJTEUgKi8KLQotLyogSWYgaXQgaXMg KnN0aWxsKiBtaXNzaW5nLCBhc3N1bWUgL3Vzci9hZG0vd3RtcCAqLwotCi0jaWZuZGVmIFdUTVBf RklMRQotI2RlZmluZQlXVE1QX0ZJTEUgIi91c3IvYWRtL3d0bXAiCi0jZW5kaWYgLyogV1RNUF9G SUxFICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBUaGUgZm9sbG93aW5nIHRlc3QgY2FuIG5vdCBi ZSBtYWRlIHBvcnRhYmx5ICovCi0KLS8qICNpZiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgKF9fR0xJ QkNfXyA+PSAyKSAmJiAoX19HTElCQ19NSU5PUl9fID49IDEpICovCi0vKgotICBUaGlzIGlzIHVn bHksIGJ1dCB0aGUgbGFjayBvZiBzdGFuZGFyZGl6YXRpb24gaW4gdGhlIHV0bXAvdXRtcHggc3Bh Y2UsIGFuZAotICB3aGF0IGdsaWJjIGltcGxlbWVudHMgYW5kIGRvZXNuJ3QgbWFrZSBhdmFpbGFi bGUsIGlzIGV2ZW4gd29yc2UuCi0qLwotLyogI3VuZGVmIEhBVkVfVVBEV1RNUFggKi8JLyogRG9u J3QgdXNlIHVwZHd0bXB4IGZvciBnbGliYyAyLjEgKi8KLS8qICNlbmRpZiAqLyAvKiBfX0dMSUJD X18gZXRjICovCi0KLSNlbHNlICAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBfX0dMSUJDX18KLSN1 bmRlZiBIQVZFX1VQRFdUTVBYCQkvKiBEb24ndCB1c2UgdXBkd3RtcHggZm9yIGdsaWJjIHBlcmlv ZCAqLwotI2VuZGlmIC8qIF9fR0xJQkNfXyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotbG9u ZwotcHR5aW50X3VwZGF0ZV93dG1wKGVudCxob3N0LHVzZXIpIHN0cnVjdCB1dG1wICplbnQ7IGNo YXIgKmhvc3Q7IGNoYXIgKnVzZXI7IHsKLSAgICBzdHJ1Y3QgdXRtcCB1dDsKLSAgICBzdHJ1Y3Qg c3RhdCBzdGF0YjsKLSAgICBpbnQgZmQ7Ci0gICAgdGltZV90IHV0dGltZTsKLSNpZmRlZiBIQVZF X1VQRFdUTVBYCi0gICAgc3RydWN0IHV0bXB4IHV0eDsKLQotICAgIGdldHV0bXB4KGVudCwgJnV0 eCk7Ci0gICAgaWYgKGhvc3QpCi0gICAgICBzdHJuY3B5KHV0eC51dF9ob3N0LCBob3N0LCBzaXpl b2YodXR4LnV0X2hvc3QpICk7Ci0gICAgZWxzZQotICAgICAgdXR4LnV0X2hvc3RbMF0gPSAwOwot ICAgIGlmICh1c2VyKQotICAgICAgc3RybmNweSh1dHgudXRfdXNlciwgdXNlciwgc2l6ZW9mKHV0 eC51dF91c2VyKSk7Ci0gICAgdXBkd3RtcHgoV1RNUFhfRklMRSwgJnV0eCk7Ci0jZW5kaWYgLyog SEFWRV9VUERXVE1QWCAqLwotCi0jaWZkZWYgSEFWRV9VUERXVE1QCi0jaWZuZGVmIEhBVkVfVVBE V1RNUFgKLSAgICAvKiBUaGlzIGlzIGFscmVhZHkgcGVyZm9ybWVkIGJ5dXBkd3RtcHggaWYgcHJl c2VudC4qLwotICAgIHVwZHd0bXAoV1RNUF9GSUxFLCBlbnQpOwotI2VuZGlmIC8qIEhBVkVfVVBE V1RNUFgqLwotI2Vsc2UgLyogSEFWRV9VUERXVE1QICovCi0KLSAgICBpZiAoKGZkID0gb3BlbihX VE1QX0ZJTEUsIE9fV1JPTkxZfE9fQVBQRU5ELCAwKSkgPj0gMCkgewotCWlmICghZnN0YXQoZmQs ICZzdGF0YikpIHsKLQkgICAgbWVtc2V0KChjaGFyICopJnV0LCAwLCBzaXplb2YodXQpKTsKLSNp ZmRlZiBfX2hwdXgKLQkgICAgc3RybmNweSh1dC51dF9pZCwgZW50LT51dF9pZCwgc2l6ZW9mICh1 dC51dF9pZCkpOwotI2VuZGlmIC8qIF9faHB1eCAqLwotCSAgICBzdHJuY3B5KHV0LnV0X2xpbmUs IGVudC0+dXRfbGluZSwgc2l6ZW9mKHV0LnV0X2xpbmUpKTsKLQkgICAgc3RybmNweSh1dC51dF9u YW1lLCBlbnQtPnV0X25hbWUsIHNpemVvZih1dC51dF9uYW1lKSk7Ci0jaWZuZGVmIE5PX1VUX0hP U1QKLQkgICAgc3RybmNweSh1dC51dF9ob3N0LCBlbnQtPnV0X2hvc3QsIHNpemVvZih1dC51dF9o b3N0KSk7Ci0jZW5kaWYgLyogTk9fVVRfSE9TVCAqLwotCi0JICAgIHRpbWUoJnV0dGltZSk7Ci0J ICAgIHV0LnV0X3RpbWUgPSB1dHRpbWU7Ci0KLSNpZmRlZiBIQVZFX0dFVFVURU5UCi0jaWZkZWYg VVNFUl9QUk9DRVNTCi0JICAgIGlmIChlbnQtPnV0X25hbWUpIHsKLQkJaWYgKCF1dC51dF9waWQp Ci0JCSAgdXQudXRfcGlkID0gZ2V0cGlkKCk7Ci0jaWZuZGVmIF9faHB1eAotCQl1dC51dF90eXBl ID0gVVNFUl9QUk9DRVNTOwotI2Vsc2UgIC8qIF9faHB1eCAqLwotCQl1dC51dF90eXBlID0gZW50 LT51dF90eXBlOwotI2VuZGlmIC8qIF9faHB1eCAqLwotCi0JICAgIH0gZWxzZSB7Ci0KLSNpZmRl ZiBFTVBUWQotCQl1dC51dF90eXBlID0gRU1QVFk7Ci0jZWxzZQotCQl1dC51dF90eXBlID0gREVB RF9QUk9DRVNTOyAvKiBGb3IgTGludXggYnJva2VubmVzcyovCi0jZW5kaWYgLyogRU1QVFkgKi8K LQotCSAgICB9Ci0jZW5kaWYgLyogVVNFUl9QUk9DRVNTICovCi0jZW5kaWYgLyogSEFWRV9HRVRV VEVOVCAqLwotCi0JICAgIGlmICh3cml0ZShmZCwgKGNoYXIgKikmdXQsIHNpemVvZihzdHJ1Y3Qg dXRtcCkpICE9Ci0JCXNpemVvZihzdHJ1Y3QgdXRtcCkpCi0jaWZuZGVmIENPSEVSRU5UCi0JICAg ICAgZnRydW5jYXRlKGZkLCBzdGF0Yi5zdF9zaXplKTsKLSNlbHNlCi0JICAgICAgY2hzaXplKGZk LCBzdGF0Yi5zdF9zaXplKTsKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCX0KLQljbG9zZShmZCk7 Ci0gICAgfQotI2VuZGlmIC8qIEhBVkVfVVBEV1RNUCAqLwotICAgIHJldHVybigwKTsgLyogbm8g Y3VycmVudCBmYWlsdXJlIGNhc2VzOyBmaWxlIG5vdCBmb3VuZCBpcyBub3QgZmFpbHVyZSEgKi8K LX0KLSNlbmRpZiAvKiBXQU5UX1VUTVAgKi8KLQotLyogVGhpcyBpcyBmb3IgYW5jaWVudCBVbml4 ZXMgdGhhdCBkb24ndCBoYXZlIHRoZXNlIHR0eSBzeW1ib2xzIGRlZmluZWQuICovCi0KLSNpZm5k ZWYgUEVORElOCi0jZGVmaW5lIFBFTkRJTiBJQ0FOT04KLSNlbmRpZiAvKiBQRU5ESU4gKi8KLSNp Zm5kZWYgRkxVU0hPCi0jZGVmaW5lIEZMVVNITyBJQ0FOT04KLSNlbmRpZiAvKiBGTFVTSE8gKi8K LSNpZm5kZWYgSU1BWEJFTAotI2RlZmluZSBJTUFYQkVMIElDQU5PTgotI2VuZGlmIC8qIElNQVhC RUwgKi8KLSNpZm5kZWYgRVhUUFJPQwotI2RlZmluZSBFWFRQUk9DIElDQU5PTgotI2VuZGlmIC8q IEVYVFBST0MgKi8KLQotc3RhdGljIGNoYXIgWGxpbmVbMTddID0geyAwLCAwIH07Ci0vKgotICBn ZXRwdHlzbGF2ZSgpCi0gIE9wZW4gdGhlIHNsYXZlIHNpZGUgb2YgdGhlIHB0eSwgYW5kIGRvIGFu eSBpbml0aWFsaXphdGlvbiB0aGF0IGlzIG5lY2Vzc2FyeS4KLSAgVGhlIHJldHVybiB2YWx1ZSBm ZCBpcyBhIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIHNsYXZlIHNpZGUuCi0gIGZjID0gZnVuY3Rp b24gY29kZSBmcm9tIGRvX3B0eSgpIChxLnYuKQotKi8KLWludAotZ2V0cHR5c2xhdmUoZmQsIGZj KSBpbnQgKiBmZCwgZmM7IHsKLSAgICBpbnQgdHR5ZmQ7Ci0gICAgaW50IHQgPSAtMTsKLSAgICBs b25nIHJldHZhbDsKLSNpZmRlZiBUSU9DR1dJTlNaCi0gICAgc3RydWN0IHdpbnNpemUgd3M7Ci0g ICAgZXh0ZXJuIGludCBjbWRfcm93cywgY21kX2NvbHM7Ci0jZW5kaWYgLyogVElPQ0dXSU5TWiAq LwotCi0gICAgdHR5ZmQgPSAqZmQ7Ci0gICAgZGVidWcoRjExMSwiZ2V0cHR5c2xhdmUoKSIsInR0 eWZkIix0dHlmZCk7Ci0gICAgLyoKLSAgICAgKiBPcGVuaW5nIHRoZSBzbGF2ZSBzaWRlIG1heSBj YXVzZSBpbml0aWxpemF0aW9uIG9mIHRoZQotICAgICAqIGtlcm5lbCB0dHkgc3RydWN0dXJlLiAg V2UgbmVlZCByZW1lbWJlciB0aGUgc3RhdGUgb2Y6Ci0gICAgICogICAgICBpZiBsaW5lbW9kZSB3 YXMgdHVybmVkIG9uCi0gICAgICogICAgICB0ZXJtaW5hbCB3aW5kb3cgc2l6ZQotICAgICAqICAg ICAgdGVybWluYWwgc3BlZWQKLSAgICAgKiBzbyB0aGF0IHdlIGNhbiByZXNldCB0aGVtIGlmIHdl IG5lZWQgdG8uCi0gICAgICovCi0gICAgaWYgKChyZXR2YWwgPSBwdHlfb3Blbl9zbGF2ZShYbGlu ZSwgJnQsIGZjKSkgIT0gMCkgewotCXBlcnJvcihYbGluZSk7Ci0JbXNnKys7Ci0gICAgICAgIGRl YnVnKEYxMTEsImdldHB0eXNsYXZlKCkiLCJVbmFibGUgdG8gb3BlbiBzbGF2ZSIscmV0dmFsKTsK LSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwiZ2V0cHR5c2xhdmUi LCJ0Iix0KTsKLSNpZmRlZiBJTklUX1NQVFkKLSAgICBzcHR5ID0gdDsKLSAgICBkZWJ1ZyhGMTEx LCJnZXRwdHlzbGF2ZSIsInNwdHkiLHNwdHkpOwotI2VuZGlmIC8qIElOSVRfU1BUWSAqLwotI2lm ZGVmIFNUUkVBTVNQVFkKLSAgICBpZiAoaW9jdGwodCxJX1BVU0gsInBja3QiKSA8IDApIHsKLSAg ICAgICAgZGVidWcoRjExMSwiZ2V0cHR5c2xhdmUoKSIsImlvY3RsKElfUFVTSCkgZmFpbGVkIixl cnJubyk7Ci0jaWZuZGVmIF9BSVgKLSAgICAgICAgZmF0YWwoIklfUFVTSCBwY2t0Iik7Ci0jZW5k aWYgLyogX0FJWCAqLwotICAgIH0KLSNlbmRpZiAvKiBTVFJFQU1TUFRZICovCi0KLSAgICAvKiBT ZXQgdXAgdGhlIHR0eSBtb2RlcyBhcyB3ZSBsaWtlIHRoZW0gdG8gYmUuICovCi0jaWZkZWYgQ09N TUVOVAotICAgIC8qIE9yaWdpbmFsbHkgbGlrZSB0aGlzLi4uIEJ1dCB0aGlzIGlzIHRoZSBtYXN0 ZXIgLSB3ZSB3YW50IHRoZSBzbGF2ZSAqLwotICAgIC8qIEFueXdheSwgdGhpcyBmYWlscyBvbiBT b2xhcmlzIGFuZCBwcm9iYWJseSBvdGhlciBTeXN0ZW0gViBPUydzICovCi0gICAgaW5pdF90ZXJt YnVmKHR0eWZkKTsKLSNlbHNlCi0gICAgaW5pdF90ZXJtYnVmKHQpOwotI2VuZGlmCS8qIENPTU1F TlQgKi8KLSNpZmRlZiBUSU9DR1dJTlNaCi0gICAgaWYgKGNtZF9yb3dzIHx8IGNtZF9jb2xzKSB7 Ci0gICAgICAgIG1lbXNldCgoY2hhciAqKSZ3cywgMCwgc2l6ZW9mKHdzKSk7Ci0gICAgICAgIHdz LndzX2NvbCA9IGNtZF9jb2xzOwotICAgICAgICB3cy53c19yb3cgPSBjbWRfcm93czsKLQlkZWJ1 ZyhGMTAxLCJnZXRwdHlzbGF2ZSgpIGRvaW5nIFRJT0NTV0lOU1ouLi4iLCIiLHQpOwotICAgICAg ICBpb2N0bCh0LCBUSU9DU1dJTlNaLCAoY2hhciAqKSZ3cyk7Ci0gICAgfQotI2VuZGlmIC8qIFRJ T0NHV0lOU1ogKi8KLQotICAgIC8qIEZvciBleHRlcm5hbCBwcm90b2NvbHMsIHB1dCB0aGUgcHR5 IGluIG5vLWVjaG8gbW9kZSAqLwotICAgIGlmIChmYyA9PSAxKSB7Ci0JZGVidWcoRjEwMCwiZ2V0 cHR5c2xhdmUoKSBzZXR0aW5nIHJhd21vZGUiLCIiLDApOwotCS8qIGlmbGFncyAqLwotCXRlcm1i dWYuY19pZmxhZyAmPSB+KFBBUk1SS3xJU1RSSVB8QlJLSU5UfElOTENSfElHTkNSfElDUk5MKTsK LQl0ZXJtYnVmLmNfaWZsYWcgJj0gfihJTlBDS3xJR05QQVJ8SU1BWEJFTHxJWEFOWXxJWE9OfElY T0ZGKTsKLQl0ZXJtYnVmLmNfaWZsYWcgfD0gSUdOQlJLOwotI2lmZGVmIElVQ0xDCi0JdGVybWJ1 Zi5jX2lmbGFnICY9IH5JVUNMQzsKLSNlbmRpZiAvKiBJVUNMQyAqLwotCi0JLyogb2ZsYWdzICov Ci0JdGVybWJ1Zi5jX29mbGFnICY9IH5PUE9TVDsKLSNpZmRlZiBPWFRBQlMKLQl0ZXJtYnVmLmNf b2ZsYWcgJj0gfk9YVEFCUzsKLSNlbmRpZiAvKiBPWFRBQlMgKi8KLSNpZmRlZiBPTk9DUgotCXRl cm1idWYuY19vZmxhZyAmPSB+T05PQ1I7Ci0jZW5kaWYgLyogT05PQ1IgKi8KLSNpZmRlZiBPTkxS RVQKLQl0ZXJtYnVmLmNfb2ZsYWcgJj0gfk9OTFJFVDsKLSNlbmRpZiAvKiBPTkxSRVQgKi8KLSNp ZmRlZiBPTkxDUgotCXRlcm1idWYuY19vZmxhZyAmPSB+T05MQ1I7Ci0jZW5kaWYgLyogT05MQ1Ig Ki8KLQotCS8qIGxmbGFncyAqLwotCXRlcm1idWYuY19sZmxhZyAmPSB+RUNITzsKLSNpZmRlZiBF Q0hPRQotCXRlcm1idWYuY19sZmxhZyAmPSB+RUNIT0U7Ci0jZW5kaWYgLyogRUNIT0UgKi8KLSNp ZmRlZiBFQ0hPTkwKLQl0ZXJtYnVmLmNfbGZsYWcgJj0gfkVDSE9OTDsKLSNlbmRpZiAvKiBFQ0hP TkwgKi8KLSNpZmRlZiBFQ0hPUFJUCi0JdGVybWJ1Zi5jX2xmbGFnICY9IH5FQ0hPUFJUOwotI2Vu ZGlmIC8qIEVDSE9QUlQgKi8KLSNpZmRlZiBFQ0hPS0UKLQl0ZXJtYnVmLmNfbGZsYWcgJj0gfkVD SE9LRTsKLSNlbmRpZiAvKiBFQ0hPS0UgKi8KLSNpZmRlZiBFQ0hPQ1RMCi0JdGVybWJ1Zi5jX2xm bGFnICY9IH5FQ0hPQ1RMOwotI2VuZGlmIC8qIEVDSE9DVEwgKi8KLSNpZmRlZiBBTFRXRVJBU0UK LQl0ZXJtYnVmLmNfbGZsYWcgJj0gfkFMVFdFUkFTRTsKLSNlbmRpZiAvKiBBTFRXRVJBU0UgKi8K LSNpZmRlZiBFWFRQUk9DCi0JdGVybWJ1Zi5jX2xmbGFnICY9IH5FWFRQUk9DOwotI2VuZGlmIC8q IEVYVFBST0MgKi8KLQl0ZXJtYnVmLmNfbGZsYWcgJj0gfihJQ0FOT058SVNJR3xJRVhURU58VE9T VE9QfEZMVVNIT3xQRU5ESU4pOwotCi0jaWZkZWYgTk9LRVJOSU5GTwotCXRlcm1idWYuY19sZmxh ZyB8PSBOT0tFUk5JTkZPOwotI2VuZGlmCS8qIE5PS0VSTklORk8gKi8KLQkvKiB0ZXJtYnVmLmNf bGZsYWcgfD0gTk9GTFNIOyAqLwotCXRlcm1idWYuY19sZmxhZyAmPSB+Tk9GTFNIOwotCi0JLyog Y2ZsYWdzICovCi0JdGVybWJ1Zi5jX2NmbGFnICY9IH4oQ1NJWkV8UEFSRU5CfFBBUk9ERCk7Ci0J dGVybWJ1Zi5jX2NmbGFnIHw9IENTOHxDUkVBRDsKLSNpZmRlZiBWTUlOCi0JdGVybWJ1Zi5jX2Nj W1ZNSU5dID0gMTsKLSNlbmRpZgkvKiBWTUlOICovCi0gICAgfSBlbHNlIHsJCQkJLyogUmVndWxh ciBpbnRlcmFjdGl2ZSB1c2UgKi8KLQlkZWJ1ZyhGMTAwLCJnZXRwdHlzbGF2ZSgpIHNldHRpbmcg Y29va2VkIG1vZGUiLCIiLDApOwotCi0JLyogU2V0dGluZ3MgZm9yIHNndHR5IGJhc2VkIHN5c3Rl bXMgKi8KLQotI2lmbmRlZiBVU0VfVEVSTUlPCi0JdGVybWJ1Zi5zZy5zZ19mbGFncyB8PSBDUk1P RHxBTllQfEVDSE98WFRBQlM7Ci0jZW5kaWYgLyogVVNFX1RFUk1JTyAqLwotCi0jaWZuZGVmIE9Y VEFCUwotI2RlZmluZSBPWFRBQlMgMAotI2VuZGlmIC8qIE9YVEFCUyAqLwotCi0JLyogU2V0dGlu Z3MgZm9yIFVOSUNPUyBhbmQgSFBVWCAqLwotCi0jaWZkZWYgQ1JBWQotCXRlcm1idWYuY19vZmxh ZyA9IE9QT1NUfE9OTENSfFRBQjM7Ci0JdGVybWJ1Zi5jX2lmbGFnID0gSUdOUEFSfElTVFJJUHxJ Q1JOTHxJWE9OOwotCXRlcm1idWYuY19sZmxhZyA9IElTSUd8SUNBTk9OfEVDSE98RUNIT0V8RUNI T0s7Ci0JdGVybWJ1Zi5jX2NmbGFnID0gRVhUQnxIVVBDTHxDUzg7Ci0jZWxzZSAvKiBDUkFZICov Ci0jaWZkZWYgSFBVWAotCXRlcm1idWYuY19vZmxhZyA9IE9QT1NUfE9OTENSfFRBQjM7Ci0JdGVy bWJ1Zi5jX2lmbGFnID0gSUdOUEFSfElTVFJJUHxJQ1JOTHxJWE9OOwotCXRlcm1idWYuY19sZmxh ZyA9IElTSUd8SUNBTk9OfEVDSE98RUNIT0V8RUNIT0s7Ci0JdGVybWJ1Zi5jX2NmbGFnID0gRVhU QnxIVVBDTHxDUzg7Ci0jZWxzZSAvKiBIUFVYICovCi0jaWZkZWYgVVNFX1RFUk1JTwotCS8qCi0J ICBTZXR0aW5ncyBmb3IgYWxsIG90aGVyIHRlcm1pb3MvdGVybWlvIGJhc2VkIHN5c3RlbXMsIG90 aGVyIHRoYW4gCi0JICA0LjRCU0QuICBJbiA0LjRCU0QgdGhlIGtlcm5lbCBkb2VzIHRoZSBpbml0 aWFsIHRlcm1pbmFsIHNldHVwLgotCSovCi0jaWZkZWYgQlNENDIKLSNpZm5kZWYgQlNENDQKLQl0 ZXJtYnVmLmNfbGZsYWcgfD0gRUNIT3xJQ0FOT058SUVYVEVOfElTSUc7Ci0JdGVybWJ1Zi5jX29m bGFnIHw9IE9OTENSfE9YVEFCU3xPUE9TVDsKLQl0ZXJtYnVmLmNfaWZsYWcgfD0gSUNSTkx8SUdO UEFSOwotCXRlcm1idWYuY19jZmxhZyB8PSBIVVBDTDsKLQl0ZXJtYnVmLmNfaWZsYWcgJj0gfklY T0ZGOwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZWxzZSAvKiBCU0Q0MiAqLwotCXRlcm1idWYuY19s ZmxhZyB8PSBFQ0hPfElDQU5PTnxJRVhURU58SVNJRzsKLQl0ZXJtYnVmLmNfb2ZsYWcgfD0gT05M Q1J8T1hUQUJTfE9QT1NUOwotCXRlcm1idWYuY19pZmxhZyB8PSBJQ1JOTHxJR05QQVI7Ci0JdGVy bWJ1Zi5jX2NmbGFnIHw9IEhVUENMOwotCXRlcm1idWYuY19pZmxhZyAmPSB+SVhPRkY7Ci0jZW5k aWYgLyogQlNENDIgKi8KLSNlbmRpZiAvKiBVU0VfVEVSTUlPICovCi0jZW5kaWYgLyogSFBVWCAq LwotI2VuZGlmIC8qIENSQVkgKi8KLSAgICB9Ci0KLSAgICAvKiBTZXQgdGhlIHR0eSBtb2Rlcywg YW5kIG1ha2UgdGhpcyBvdXIgY29udHJvbGxpbmcgdHR5LiAqLwotI2lmZGVmIENPTU1FTlQKLSAg ICAvKiBCdXQgdGhpcyBpcyB0aGUgbWFzdGVyIC0gd2Ugd2FudCB0aGUgc2xhdmUgKi8KLSAgICBz ZXRfdGVybWJ1Zih0dHlmZCk7Ci0jZWxzZQotICAgIHNldF90ZXJtYnVmKHQpOwotI2VuZGlmCS8q IENPTU1FTlQgKi8KLQotICAgIGlmICh0ICE9IDApCi0gICAgICBkdXAyKHQsIDApOwotICAgIGlm ICh0ICE9IDEpCi0gICAgICBkdXAyKHQsIDEpOwotICAgIGlmICh0ICE9IDIpIHsKLQlpZiAoZmMg PT0gMCkgewotCSAgICBkdXAyKHQsIDIpOwotCX0gZWxzZSBpZiAoZmMgPT0gMSkgewotCSAgICAv KiBGb3IgZXh0ZXJuYWwgcHJvdG9jb2xzLCBzZW5kIHN0ZGVyciB0byAvZGV2L251bGwgKi8KLSNp ZmRlZiBDT01NRU5UCi0JICAgIGludCB4eDsKLSNpZm5kZWYgQ09NTUVOVAotCSAgICBjaGFyICog cyA9ICIvZGV2L251bGwiOwotCSAgICBlcnJubyA9IDA7Ci0JICAgIHh4ID0gb3BlbihzLCBPX1dS T05MWSk7Ci0jZWxzZQotCSAgICBjaGFyICogcyA9ICJwdHkubG9nIjsKLQkgICAgZXJybm8gPSAw OwotCSAgICB4eCA9IG9wZW4ocywgT19DUkVBVCwgMDY0NCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotCSAgICBkZWJ1ZyhGMTExLCJnZXRwdHlzbGF2ZSByZWRpcmVjdCBzdGRlcnIiLHMsZXJybm8p OwotCSAgICBkdXAyKHh4LDIpOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQl9Ci0gICAgfQotICAg IGlmICh0ID4gMikKLSAgICAgIGNsb3NlKHQpOwotCi0gICAgaWYgKHR0eWZkID4gMikgewotCWNs b3NlKHR0eWZkKTsKLSAgICAgICAgdHR5ZmQgPSAtMTsKLQkqZmQgPSB0dHlmZDsKLSAgICB9Ci0g ICAgcmV0dXJuKDApOwotfQotCi0jaWZkZWYgSEFWRV9QVFlUUkFQCi0vKgotICBUbyBiZSBjYWxs ZWQgdG8gZGV0ZXJtaW5lIGlmIGEgdHJhcCBpcyBwZW5kaW5nIG9uIGEgcHR5Ci0gIGlmIGFuZCBv bmx5IGlmIHNlbGVjdCgpIGNhbm5vdCBiZSB1c2VkLgotKi8KLWludAotcHR5X3RyYXBfcGVuZGlu ZyhmZCkgaW50IGZkOyB7Ci0gICAgaW50IHBlbmRpbmc7Ci0gICAgaW50IHJjOwotCi0gICAgcmMg PSBpb2N0bChmZCwgVElPQ1RSQVBTVEFUVVMsIChjaGFyICopJnBlbmRpbmcsIHNpemVvZihwZW5k aW5nKSk7Ci0gICAgaWYgKHJjID09IDApIHsKLSAgICAgICAgZGVidWcoRjEwMSwicHR5X3RyYXBf cGVuZGluZygpIiwiIixwZW5kaW5nKTsKLSAgICAgICAgcmV0dXJuKHBlbmRpbmcpOwotICAgIH0g ZWxzZSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsInB0eV90cmFwX3BlbmRpbmcoKSIsImlvY3RsKCkg ZmFpbGVkIixyYyk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotfQotCi0vKgotICBUbyBi ZSBjYWxsZWQgYWZ0ZXIgc2VsZWN0KCkgaGFzIHJldHVybmVkIGluZGljYXRpbmcgdGhhdCBhbiBl eGNlcHRpb24gaXMKLSAgd2FpdGluZyBvbiBhIHB0eS4gIEl0IHNob3VsZCBiZSBjYWxsZWQgd2l0 aCB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBwdHkuCi0gIFJldHVybnMgLTEgb24gZXJyb3I7 IDAgaWYgcHR5IGlzIHN0aWxsIG9wZW47IDEgaWYgcHR5IGhhcyBjbG9zZWQuCi0qLwotaW50Ci1w dHlfdHJhcF9oYW5kbGVyKGZkKSBpbnQgZmQ7IHsKLSAgICBzdHJ1Y3QgcmVxdWVzdF9pbmZvIHJp OwotCi0gICAgbWVtc2V0KCZyaSwwLHNpemVvZihyaSkpOwotICAgIGlmIChpb2N0bChmZCxUSU9D UkVRQ0hFQ0ssKGNoYXIgKikmcmksIHNpemVvZihyaSkpICE9IDApIHsKLSAgICAgICAgZGVidWco RjExMSwicHR5X3RyYXBfaGFuZGxlcigpIiwiaW9jdGwoVElPQ1JFUUNIRUNLKSBmYWlsZWQiLGVy cm5vKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgc3dpdGNoIChyaS5yZXF1ZXN0 KSB7Ci0gICAgICBjYXNlIFRJT0NPUEVOOgotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfdHJhcF9o YW5kbGVyKCkiLCJhbiBvcGVuKCkgY2FsbCIsMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz ZSBUSU9DQ0xPU0U6Ci0gICAgICAgIGRlYnVnKEYxMTAsInB0eV90cmFwX2hhbmRsZXIoKSIsImEg Y2xvc2UoKSBjYWxsIiwwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAg ICBkZWJ1ZyhGMTEwLCJwdHlfdHJhcF9oYW5kbGVyKCkiLCJhbiBpb2N0bCgpIGNhbGwiLDApOwot ICAgICAgICByaS5lcnJub19lcnJvciA9IEVJTlZBTDsKLSAgICB9Ci0gICAgaWYgKGlvY3RsKGZk LCBUSU9DUkVRU0VULCAoY2hhciAqKSZyaSxzaXplb2YocmkpKSAhPSAwKSB7Ci0gICAgICAgIGRl YnVnKEYxMTEsInB0eV90cmFwX2hhbmRsZXIoKSIsImlvY3RsKFRJT0NSRVFTRVQpIGZhaWxlZCIs ZXJybm8pOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAocmkucmVxdWVzdCA9 PSBUSU9DQ0xPU0UpCi0gICAgICByZXR1cm4oMSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKDAp OwotfQotI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAqLwotCi1WT0lECi1leGVjX2NtZChzKSBjaGFy ICogczsgewotICAgIHN0cnVjdCBzdHJpbmdhcnJheSAqIHE7Ci0gICAgY2hhciAqKiBhcmdzID0g TlVMTDsKLQotICAgIGlmICghcykgcmV0dXJuOwotICAgIGlmICghKnMpIHJldHVybjsKLQotICAg IHEgPSBja3NwbGl0KDEsMCxzLE5VTEwsIlxcJVtdJiQrLS89Kl5fQCF7fS88PnwuI34nYDo7PyIs NywwLDApOwotICAgIGlmICghcSkgcmV0dXJuOwotCi0gICAgYXJncyA9IHEtPmFfaGVhZCArIDE7 Ci0KLSNpZmRlZiBERUJVRyAgICAKLSAgICB7Ci0JaW50IGksIG47Ci0JbiA9IHEtPmFfc2l6ZTsK LQlmb3IgKGkgPSAwOyBpIDw9IG47IGkrKykgewotCSAgICBpZiAoIWFyZ3NbaV0pIHsKLQkJZGVi dWcoRjExMSwiZXhlY19jbWQgYXJnIiwiTlVMTCIsaSk7Ci0JCWJyZWFrOwotCSAgICB9IGVsc2Ug ewotCQlkZWJ1ZyhGMTExLCJleGVjX2NtZCBhcmciLGFyZ3NbaV0saSk7Ci0JCWlmIChpID09IG4g JiYgYXJnc1tpXSkgewotCQkgICAgZGVidWcoRjEwMSwiZXhlY19jbWQgU1VCU1RJVFVUSU5HIE5V TEwiLCIiLGkpOwotCQkgICAgaWYgKHN0cmxlbihhcmdzW2ldKSA9PSAwKQotCQkgICAgICBtYWtl c3RyKCYoYXJnc1tpXSksTlVMTCk7Ci0JCX0KLQotCSAgICB9Ci0JfQkgICAgCi0gICAgfQotI2Vu ZGlmCS8qIERFQlVHICovCi0KLSAgICBleGVjdnAoYXJnc1swXSxhcmdzKTsKLX0KLQotLyogR2V0 IGEgcHR5LCBzY2FuIGlucHV0IGxpbmVzLiAqLwotLyogZmMgPSAwIGZvciBpbnRlcmFjdGl2ZSBh Y2Nlc3M7IGZjID0gMSBmb3IgcnVubmluZyBleHRlcm5hbCBwcm90b2NvbHMgKi8KLQotc3RhdGlj IGludCBwdHlfZmMgPSAtMTsJCQkvKiBHbG9iYWwgY29weSBvZiBmYyAqLwotCi1pbnQKLWRvX3B0 eShmZCwgY21kLCBmYykgaW50ICogZmQ7IGNoYXIgKiBjbWQ7IGludCBmYzsgewotICAgIGxvbmcg cmV0dmFsOwotICAgIGludCBzeW5jcGlwZVsyXTsKLSAgICBpbnQgaSwgdHR5ZmQ7Ci0jaWZkZWYg SEFWRV9QVFlUUkFQCi0gICAgaW50IHg7Ci0jZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCi0KLSAg ICBkZWJ1ZyhGMTAxLCJDS1VQVFkuQyBkb19wdHkgZmMiLCIiLGZjKTsKLQotICAgIHR0eWZkID0g KmZkOwotCi0gICAgcHR5X21hc3Rlcl9mZCA9IC0yOwotICAgIHB0eV9zbGF2ZV9mZCA9IC0yOwot ICAgIHB0eV9mb3JrX3BpZCA9IC0yOwotCi0gICAgbXNnID0gMDsJCQkJLyogTWVzc2FnZSBjb3Vu dGVyICovCi0gICAgcHR5X2luaXQoKTsJCQkJLyogRmluZCBhbiBhdmFpbGFibGUgcHR5IHRvIHVz ZS4gKi8KLSAgICBlcnJubyA9IDA7Ci0KLSAgICBpZiAoKHJldHZhbCA9IHB0eV9nZXRwdHkoJnR0 eWZkLCBYbGluZSwgMjApKSAhPSAwKSB7Ci0JaWYgKG1zZysrID09IDApCi0JICBwZXJyb3IoWGxp bmUpOwotICAgICAgICBkZWJ1ZyhGMTExLCJkb19wdHkoKSIsInB0eV9nZXRwdHkoKSBmYWlscyIs cmV0dmFsKTsKLQkqZmQgPSB0dHlmZDsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAg KmZkID0gdHR5ZmQ7Ci0gICAgZGVidWcoRjExMSwiZG9fcHR5KCkgWGxpbmUiLFhsaW5lLHR0eWZk KTsKLQotI2lmZGVmIFNJR1RUT1UKLS8qCi0gIElnbm9yaW5nIFNJR1RUT1Uga2VlcHMgdGhlIGtl cm5lbCBmcm9tIGJsb2NraW5nIHVzLiAgd2UgdHdlYWsgdGhlIHR0eSB3aXRoCi0gIGFuIGlvY3Rs KCkgKGluIHR0aW9jdCgpIGluIC9zeXMvdHR5LmMgaW4gYSBCU0Qga2VybmVsKQotKi8KLSAgICAg c2lnbmFsKFNJR1RUT1UsIFNJR19JR04pOwotI2VuZGlmIC8qIFNJR1RUT1UgKi8KLQotLyogU3Rh cnQgdXAgdGhlIGNvbW1hbmQgb24gdGhlIHNsYXZlIHNpZGUgb2YgdGhlIHRlcm1pbmFsICovCi0K LSAgICBpZiAocGlwZShzeW5jcGlwZSkgPCAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsImRvX3B0 eSgpIiwicGlwZSgpIGZhaWxzIiwwKTsKLQlwZXJyb3IoInBpcGUoKSBmYWlsZWQiKTsKLQltc2cr KzsKLSAgICAgICAgZGVidWcoRjExMSwiZG9fcHR5KCkiLCJwaXBlIGZhaWxzIixlcnJubyk7Ci0g ICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGlmICgoaSA9IGZvcmsoKSkgPCAwKSB7Ci0g ICAgICAgIC8qIFhYWCAtIG5lZWQgdG8gY2xlYW4gdXAgdGhlIGFsbG9jYXRlZCBwdHkgKi8KLSAg ICAgICAgcGVycm9yKCJmb3JrKCkgZmFpbGVkIik7Ci0JbXNnKys7Ci0gICAgICAgIGRlYnVnKEYx MTEsImRvX3B0eSgpIiwiZm9yayBmYWlscyIsZXJybm8pOwotICAgICAgICByZXR1cm4oLTEpOwot ICAgIH0KLSAgICBpZiAoaSkgeyAgLyogV2FpdCBmb3IgY2hpbGQgYmVmb3JlIHdyaXRpbmcgdG8g cGFyZW50IHNpZGUgb2YgcHR5LiAqLwotICAgICAgICBjaGFyIGM7Ci0jaWZkZWYgSEFWRV9QVFlU UkFQCi0gICAgICAgIGludCBvbiA9IDE7Ci0jZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCi0JY2xv c2Uoc3luY3BpcGVbMV0pOwotCWVycm5vID0gMDsKLSAgICAgICAgaWYgKHJlYWQoc3luY3BpcGVb MF0sICZjLCAxKSA9PSAwKSB7IC8qIFNsYXZlIHNpZGUgZGllZCAqLwotCSAgICBwZXJyb3IoIlBp cGUgcmVhZCgpIGZhaWxlZCIpOwotCSAgICBtc2crKzsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAs ImRvX3B0eSgpIiwiU2xhdmUgZmFpbHMgdG8gaW5pdGlhbGl6ZSIsMCk7Ci0gICAgICAgICAgICBj bG9zZShzeW5jcGlwZVswXSk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0g ICAgICAgIHB0eV9mb3JrX3BpZCA9IGk7CQkvKiBTbyB3ZSBjYW4gY2xlYW4gaXQgdXAgbGF0ZXIg Ki8KLQlwdHlfZm9ya19hY3RpdmUgPSAxOwotCWRlYnVnKEYxMDEsImRvX3B0eSBwdHlfZm9ya19w aWQiLCIiLHB0eV9mb3JrX3BpZCk7Ci0jaWZkZWYgSEFWRV9QVFlUUkFQCi0gICAgICAgIC8qIEhQ VVggZG9lcyBub3QgYWxsb3cgdGhlIG1hc3RlciB0byByZWFkIGVuZCBvZiBmaWxlLiAgKi8KLSAg ICAgICAgLyogVGhlcmVmb3JlLCB3ZSBtdXN0IGRldGVybWluZSB0aGF0IHRoZSBzbGF2ZSBoYXMg YmVlbiAqLwotICAgICAgICAvKiBjbG9zZWQgYnkgdHJhcHBpbmcgdGhlIGNhbGwgdG8gY2xvc2Uo KS4gICAgICAgICAgICAgICovCi0JZXJybm8gPSAwOwotCXggPSBpb2N0bCh0dHlmZCwgVElPQ1RS QVAsIChjaGFyICopJm9uKTsKLQlkZWJ1ZyhGMTExLCJkb19wdHkgaW9jdGwoVElPQ1RSQVApIixj a2l0b2EoeCksZXJybm8pOwotI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAqLwotICAgICAgICBkZWJ1 ZyhGMTExLCJkb19wdHkoKSIsInN5bmNocm9uaXplZCAtIHB0eV9mb3JrX3BpZCIscHR5X2Zvcmtf cGlkKTsKLSAgICAgICAgY2xvc2Uoc3luY3BpcGVbMF0pOwotICAgIH0gZWxzZSB7Ci0JaW50IHg7 Ci0JZGVidWcoRjEwMSwiZG9fcHR5IGdldHB0eXNsYXZlIHR0eWZkIEEiLCIiLHR0eWZkKTsKLSAg ICAgICAgZGVidWcoRjExMCwiZG9fcHR5KCkiLCJTbGF2ZSBzdGFydHMiLDApOwotCXggPSBnZXRw dHlzbGF2ZSgmdHR5ZmQsZmMpOwotCWRlYnVnKEYxMDEsImRvX3B0eSBnZXRwdHlzbGF2ZSIsIiIs eCk7Ci0gICAgICAgIGlmICh4ID09IDApIHsKLQkgICAgZGVidWcoRjEwMSwiZG9fcHR5IGdldHB0 eXNsYXZlIHR0eWZkIEIiLCIiLHR0eWZkKTsKLSNpZmRlZiBXQU5UX1VUTVAKLSAgICAgICAgICAg IHB0eV91cGRhdGVfdXRtcChQVFlfVVNFUl9QUk9DRVNTLAotCQkJICAgIGdldHBpZCgpLAotCQkJ ICAgICJLRVJNSVQiLAotCQkJICAgIFhsaW5lLAotCQkJICAgIGNtZCwKLQkJCSAgICBQVFlfVFRZ U0xPVF9VU0FCTEUKLQkJCSAgICApOwotI2VuZGlmIC8qIFdBTlRfVVRNUCAqLwotICAgICAgICAg ICAgLyogTm90aWZ5IG91ciBwYXJlbnQgd2UncmUgcmVhZHkgdG8gY29udGludWUuKi8KLSAgICAg ICAgICAgIGRlYnVnKEYxMTAsImRvX3B0eSgpIiwic2xhdmUgc3luY2hyb25pemluZyIsMCk7Ci0g ICAgICAgICAgICB3cml0ZShzeW5jcGlwZVsxXSwieSIsMSk7Ci0gICAgICAgICAgICBjbG9zZShz eW5jcGlwZVswXSk7Ci0gICAgICAgICAgICBjbG9zZShzeW5jcGlwZVsxXSk7Ci0KLQkgICAgZGVi dWcoRjExMCwiZG9fcHR5IGNtZCIsY21kLCIiKTsKLSAgICAgICAgICAgIGV4ZWNfY21kKGNtZCk7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb19wdHkoKSIsImV4ZWNfY21kKCkgcmV0dXJucyAt IHdoeT8iLGVycm5vKTsKLSAgICAgICAgfQotCSpmZCA9IHR0eWZkOwotICAgICAgICBkZWJ1ZyhG MTEwLCJkb19wdHkoKSIsImdldHB0eXNsYXZlKCkgZmFpbHMgLSBleGl0aW5nIiwwKTsKLSAgICAg ICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgKmZkID0gdHR5ZmQ7Ci0gICAgcHR5X2ZjID0gZmM7Ci0g ICAgcmV0dXJuKGdldHBpZCgpKTsKLX0gLyogZW5kIG9mIGRvX3B0eSgpICovCi0KLQotVk9JRAot ZW5kX3B0eSgpIHsKLSAgICBtc2cgPSAwOwkJCQkvKiBNZXNzYWdlIGNvdW50ZXIgKi8KLSAgICBk ZWJ1ZyhGMTAxLCJlbmRfcHR5IHB0eV9mb3JrX3BpZCIsIiIscHR5X2ZvcmtfcGlkKTsKLSAgICBp ZiAoWGxpbmVbMF0gJiYgcHR5X2ZvcmtfcGlkID49IDApIHsKLSAgICAgICAgcHR5X2NsZWFudXAo WGxpbmUscHR5X2ZvcmtfcGlkLDEpOwotICAgICAgICBYbGluZVswXSA9ICdcMCc7Ci0gICAgICAg IHB0eV9mb3JrX3BpZCA9IC0xOwotCXB0eV9mb3JrX2FjdGl2ZSA9IDA7Ci0JZGVidWcoRjEwMSwi ZW5kX3B0eSBwdHlfZm9ya19hY3RpdmUiLCIiLHB0eV9mb3JrX2FjdGl2ZSk7Ci0gICAgfQotICAg IHB0eV9mYyA9IC0xOwotfQotI2VuZGlmIC8qIE5FVFBUWSAqLwoKZGlmZiAtLWdpdCBhL2NrZXJt aXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1cHR5LmMuYzk5IGIvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VwdHkuYy5jOTkKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDk5MDY1NTUuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VwdHkuYy5jOTkKKysrIC9kZXYvbnVsbApAQCAtMSwxOTc5 ICswLDAgQEAKLWNoYXIgKmNrcHR5diA9ICJQc2V1ZG90ZXJtaW5hbCBzdXBwb3J0LCA5LjAuMTAx LCAxMyBKdW4gMjAxMSI7Ci0KLS8qICBDIEsgVSBQIFQgWSAgLS0gIEMtS2VybWl0IHBzZXVkb3Rl cm1pbmFsIGNvbnRyb2wgZnVuY3Rpb25zIGZvciBVTklYICAqLwotCi0vKiBMYXN0IHVwZGF0ZTog TW9uIEp1biAxMyAxMTozMjo1MiAyMDExICovCi0KLS8qCi0gIENvcHlyaWdodCAxOTk1IGJ5IHRo ZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgotCi0gIFBlcm1pc3Npb24g dG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0 cwotICBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVy ZWJ5IGdyYW50ZWQsIHByb3ZpZGVkCi0gIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0Ci0gIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKLSAgZG9j dW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFk dmVydGlzaW5nIG9yCi0gIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0 aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKLSAgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9u LiAgRnVydGhlcm1vcmUgaWYgeW91IG1vZGlmeSB0aGlzIHNvZnR3YXJlIHlvdSBtdXN0Ci0gIGxh YmVsIHlvdXIgc29mdHdhcmUgYXMgbW9kaWZpZWQgc29mdHdhcmUgYW5kIG5vdCBkaXN0cmlidXRl IGl0IGluIHN1Y2ggYQotICBmYXNoaW9uIHRoYXQgaXQgbWlnaHQgYmUgY29uZnVzZWQgd2l0aCB0 aGUgb3JpZ2luYWwgTS5JLlQuIHNvZnR3YXJlLgotICBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50 YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvcgotICBhbnkg cHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxp ZWQgd2FycmFudHkuCi0KLSAgTW9kaWZpZWQgZm9yIHVzZSBpbiBDLUtlcm1pdCwgYW5kIG5ldyBt YXRlcmlhbCBhZGRlZCwgYnk6Ci0KLSAgSmVmZnJleSBBbHRtYW4gPGphbHRtYW5Ac2VjdXJlLWVu ZHBvaW50cy5jb20+Ci0gIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQotICBO b3ZlbWJlciAxOTk5Ci0KLSAgUGFyYW1ldGVyaXplZCBmb3IgcHR5IGZpbGUgZGVzY3JpcHRvciBh bmQgZnVuY3Rpb24gY29kZSwKLSAgRnJhbmsgZGEgQ3J1eiwgQ29sdW1iaWEgVW5pdmVyc2l0eSwg TmV3IFlvcmsgQ2l0eQotICBEZWMgMjAwNiAtIFNlcCAyMDA5Ci0qLwotCi0vKgotICBCdWlsdCBh bmQgdGVzdGVkIHN1Y2Nlc3N1bGx5IG9uOgotICAgLiA0LjRCU0QsIGluY2x1ZGluZyBCU0RJL09T LCBOZXRCU0QsIEZyZWVCU0QsIE9wZW5CU0QsIE1hYyBPUyBYCi0gICAuIEFJWCA0LjEgYW5kIGxh dGVyCi0gICAuIERHL1VYIDUuNFI0LjExCi0gICAuIERpZ2l0YWwgVU5JWCAzLjIgYW5kIDQuMAot ICAgLiBIUC1VWCA5LjAwIGFuZCBsYXRlcgotICAgLiBJUklYIDYuMCBhbmQgbGF0ZXIKLSAgIC4g TGludXgKLSAgIC4gTWFjIE9TIFggMTAuNAotICAgLiBOZVhUU1RFUCAzLngKLSAgIC4gT3BlbkJT RAotICAgLiBRTlggNC4yNSAoZXhjZXB0IFBUWSBwcm9jZXNzIHRlcm1pbmF0aW9uIG5vdCBkZXRl Y3RlZCkKLSAgIC4gU0NPIE9TUjUuMC41Ci0gICAuIFNDTyBVbml4d2FyZSA3Ci0gICAuIFNJTklY IDUuNDIKLSAgIC4gU29sYXJpcyAyLnggYW5kIDcKLSAgIC4gU3VuT1MgNC4xLjMKLQotICBGYWls dXJlcyBpbmNsdWRlOgotICAgLiBTQ08gVU5JWCAzLjJ2NC4yIChjb21waWxlIGZhaWxzIHdpdGgg c3ludGF4IGVycm9yIGluIDxtZW1vcnkuaD4pCi0gICAuIEhQLVVYIDguMDAgYW5kIGVhcmxpZXIg KG5vIHZoYW5ndXAgb3IgcHRzbmFtZSByb3V0aW5lcykKLSovCi0KLSNpbmNsdWRlICJja2NzeW0u aCIKLSNpbmNsdWRlICJja2NkZWIuaCIJCQkvKiBUbyBwaWNrIHVwIE5FVFBUWSBkZWZpbml0aW9u ICovCi0KLSNpZm5kZWYgTkVUUFRZCQkJCS8qIFNlbGVjdG9yIGZvciBQVFkgc3VwcG9ydCAqLwot Ci1jaGFyICogcHR5dmVyID0gIk5vIFBUWSBzdXBwb3J0IjsKLQotI2Vsc2UgIC8qIChyZXN0IG9m IHRoaXMgbW9kdWxlLi4uKSAqLwotCi1jaGFyICogcHR5dmVyID0gIlBUWSBzdXBwb3J0IDguMC4w MTYsIDIyIEF1ZyAyMDA3IjsKLQotLyogVGhlc2Ugd2lsbCBubyBkb3VidCBuZWVkIGFkanVzdG1l bnQuLi4gKi8KLQotI2lmbmRlZiBORVhUCi0jZGVmaW5lIEhBVkVfU0VUU0lECi0jZW5kaWYgLyog TkVYVCAqLwotI2RlZmluZSBIQVZFX0tJTExQRwotI2RlZmluZSBIQVZFX1RUWU5BTUUKLSNkZWZp bmUgSEFWRV9XQUlUUElECi0KLSNpZmRlZiBTVU5PUzQxCi0jZGVmaW5lIEJTRDQ0T1JQT1NJWAot I2VuZGlmCS8qIFNVTk9TNDEgKi8KLQotI2lmbmRlZiBVU0VfVEVSTUlPCi0jaWZkZWYgTElOVVgK LSNkZWZpbmUgVVNFX1RFUk1JTwotI2Vsc2UKLSNpZmRlZiBBVFRTVgotI2RlZmluZSBVU0VfVEVS TUlPCi0jZWxzZQotI2lmZGVmIEhQVVgKLSNkZWZpbmUgVVNFX1RFUk1JTwotI2Vsc2UKLSNpZmRl ZiBBSVgKLSNkZWZpbmUgVVNFX1RFUk1JTwotI2Vsc2UKLSNpZmRlZiBCU0Q0NE9SUE9TSVgKLSNk ZWZpbmUgVVNFX1RFUk1JTwotI2Vsc2UKLSNpZmRlZiBJUklYNjAKLSNkZWZpbmUgVVNFX1RFUk1J TwotI2Vsc2UKLSNpZmRlZiBRTlgKLSNkZWZpbmUgVVNFX1RFUk1JTwotI2VuZGlmIC8qIFFOWCAq LwotI2VuZGlmIC8qIElSSVg2MCAqLwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotI2VuZGlm IC8qIEFJWCAqLwotI2VuZGlmIC8qIEhQVVggKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlm IC8qIExJTlVYICovCi0jZW5kaWYgLyogVVNFX1RFUk1JTyAqLwotCi0jaWZkZWYgUU5YCi0jaW5j bHVkZSA8ZmNudGwuaD4KLSNlbmRpZiAvKiBRTlggKi8KLQotI2lmZGVmIFVTRV9URVJNSU8KLSNk ZWZpbmUgUE9TSVhfVEVSTUlPUwkJCS8qIFNlZW1zIHRvIGJlIGEgbWlzbm9tZXIgKi8KLSNlbmRp ZiAvKiBVU0VfVEVSTUlPICovCi0KLSNpZmRlZiBORVhUCi0jaWZuZGVmIEdFVFBHUlBfT05FQVJH Ci0jZGVmaW5lIEdFVFBHUlBfT05FQVJHCi0jZW5kaWYgLyogR0VUUEdSUF9PTkVBUkcgKi8KLSNl bmRpZiAvKiBORVhUICovCi0KLSNpZmRlZiBXQU5UX1VUTVAJCQkvKiBTZWUgY2t1cHR5LmggKi8K LS8qCi0gIFdBTlRfVVRNUCBpcyBub3QgZGVmaW5lZCBiZWNhdXNlIChhKSB0aGUgdXRtcC93dG1w IGp1bmsgaXMgdGhlIG1vc3QKLSAgbm9ucG9ydGFibGUgcGFydCBvZiB0aGlzIG1vZHVsZSwgYW5k IChiKSB3ZSdyZSBub3QgbG9nZ2luZyBhbnlib2R5Ci0gIGluLCB3ZSdyZSBqdXN0IHJ1bm5pbmcg YSBwcm9jZXNzLCBhbmQgZG9uJ3QgbmVlZCB0byB3cml0ZSB1dG1wL3d0bXAgcmVjb3Jkcy4KLSov Ci0jaWZuZGVmIEhBVkVfU0VUVVRYRU5UCQkJLyogV2hvIGhhcyA8dXRtcHguaD4gKi8KLSNpZmRl ZiBTT0xBUklTCi0jZGVmaW5lIEhBVkVfU0VUVVRYRU5UCi0jZWxzZQotI2lmZGVmIElSSVg2MAot I2RlZmluZSBIQVZFX1NFVFVUWEVOVAotI2Vsc2UKLSNpZmRlZiBDS19TQ09WNQotI2RlZmluZSBI QVZFX1NFVFVUWEVOVAotI2Vsc2UKLSNpZmRlZiBIUFVYMTAKLSNkZWZpbmUgSEFWRV9TRVRVVFhF TlQKLSNlbHNlCi0jaWZkZWYgVU5JWFdBUkUKLSNkZWZpbmUgSEFWRV9TRVRVVFhFTlQKLSNlbHNl Ci0jaWZkZWYgSVJJWDYwCi0jZGVmaW5lIEhBVkVfU0VUVVRYRU5UCi0jZW5kaWYgLyogSVJJWDYw ICovCi0jZW5kaWYgLyogVU5JWFdBUkUgKi8KLSNlbmRpZiAvKiBIUFVYMTAgKi8KLSNlbmRpZiAv KiBDS19TQ09WNSAqLwotI2VuZGlmIC8qIElSSVg2MCAqLwotI2VuZGlmIC8qIFNPTEFSSVMgKi8K LSNlbmRpZiAvKiBIQVZFX1NFVFVUWEVOVCAqLwotCi0jaWZuZGVmIEhBVkVfVVRIT1NUCQkJLyog RG9lcyB1dG1wIGluY2x1ZGUgdXRfaG9zdFtdPyAqLwotI2lmZGVmIEhBVkVfU0VUVVRYRU5UCQkJ LyogdXRtcHggYWx3YXlzIGRvZXMgKi8KLSNkZWZpbmUgSEFWRV9VVEhPU1QKLSNlbHNlCi0jaWZk ZWYgTElOVVgJCQkJLyogTGludXggZG9lcyAqLwotI2RlZmluZSBIQVZFX1VUSE9TVAotI2Vsc2UK LSNpZmRlZiBTVU5PUzQJCQkJLyogU3VuT1MgZG9lcyAqLwotI2RlZmluZSBIQVZFX1VUSE9TVAot I2Vsc2UKLSNpZmRlZiBBSVg0MQkJCQkvKiBBSVggNC4xIGFuZCBsYXRlciBkbyAqLwotI2RlZmlu ZSBIQVZFX1VUSE9TVAotI2VuZGlmIC8qIEFJWDQxICovCi0jZW5kaWYgLyogU1VOT1M0ICovCi0j ZW5kaWYgLyogTElOVVggKi8KLSNlbmRpZiAvKiBIQVZFX1NFVFVUWEVOVCAqLwotI2VuZGlmIC8q IEhBVkVfVVRIT1NUICovCi0KLSNpZm5kZWYgSEFWRV9VVF9IT1NUCi0jaWZuZGVmIE5PX1VUX0hP U1QKLSNkZWZpbmUgTk9fVVRfSE9TVAotI2VuZGlmIC8qIE5PX1VUX0hPU1QgKi8KLSNlbmRpZiAv KiBIQVZFX1VUX0hPU1QgKi8KLQotI2VuZGlmIC8qIFdBTlRfVVRNUCAqLwotCi0jaWZkZWYgTElO VVgKLSNkZWZpbmUgQ0tfVkhBTkdVUAotI2RlZmluZSBIQVZFX1NZU19TRUxFQ1RfSAotI2RlZmlu ZSBIQVZFX0dFVFVURU5UCi0jZGVmaW5lIEhBVkVfU0VUVVRFTlQKLSNkZWZpbmUgSEFWRV9VUERX VE1QCi0jZW5kaWYgLyogTElOVVggKi8KLQotI2lmZGVmIEhQVVgxMAotI2RlZmluZSBDS19WSEFO R1VQCi0jZGVmaW5lIFZIQU5HX0ZJUlNUCi0jZGVmaW5lIEhBVkVfUFRTTkFNRQotI2lmbmRlZiBI QVZFX1BUWVRSQVAKLSNkZWZpbmUgSEFWRV9QVFlUUkFQCi0jZW5kaWYgLyogSEFWRV9QVFlUUkFQ ICovCi0jZWxzZQotI2lmZGVmIEhQVVg5Ci0jZGVmaW5lIENLX1ZIQU5HVVAKLSNkZWZpbmUgVkhB TkdfRklSU1QKLSNkZWZpbmUgSEFWRV9QVFNOQU1FCi0jaWZuZGVmIEhBVkVfUFRZVFJBUAotI2Rl ZmluZSBIQVZFX1BUWVRSQVAKLSNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KLSNlbmRpZiAvKiBI UFVYOSAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotCi0jaWZkZWYgU1VOT1M0Ci0jZGVmaW5lIENL X1ZIQU5HVVAKLSNkZWZpbmUgTk9fVVRfUElECi0jZGVmaW5lIFZIQU5HX0ZJUlNUCi0jZW5kaWYg LyogU1VOT1M0ICovCi0KLSNpZmRlZiBJUklYNjAKLSNkZWZpbmUgQ0tfVkhBTkdVUAotI2RlZmlu ZSBIQVZFX19HRVRQVFkKLSNlbmRpZiAvKiBJUklYNjAgKi8KLQotI2lmZGVmIFNJTklYCi0jZGVm aW5lIEhBVkVfU1RSRUFNUwotI2RlZmluZSBIQVZFX0dSQU5UUFQKLSNkZWZpbmUgSEFWRV9QVFNO QU1FCi0jZGVmaW5lIFBVU0hfUFRFTQotI2RlZmluZSBQVVNIX0xEVEVSTQotI2RlZmluZSBQVVNI X1RUQ09NUEFUCi0jZW5kaWYgLyogU0lOSVggKi8KLQotI2lmZGVmIHVsdHJpeAotI2RlZmluZSBN VVNUX1NFVFBHUlAKLSNlbmRpZiAvKiB1bHRyaXggKi8KLQotI2lmZGVmIFFOWAotI2RlZmluZSBN VVNUX1NFVFBHUlAKLSNkZWZpbmUgTk9fREVWVFRZCi0jZGVmaW5lIElOSVRfU1BUWQotI2VuZGlm IC8qIFFOWCAqLwotCi0jaWZkZWYgTElOVVgKLSNpZmRlZiBIQVZFX1BUTVgKLSNkZWZpbmUgSEFW RV9HUkFOVFBUCi0jZGVmaW5lIEhBVkVfUFRTTkFNRQotI2VuZGlmIC8qIEhBVkVfUFRNWCAqLwot I2Vsc2UKLSNpZmRlZiBIQVZFX1NUUkVBTVMKLSNkZWZpbmUgSEFWRV9QVE1YCi0jZW5kaWYgLyog SEFWRV9TVFJFQU1TICovCi0jZW5kaWYgLyogTElOVVggKi8KLQotI2luY2x1ZGUgImNrdXB0eS5o IgotCi0jaWZkZWYgUFRZTk9CTE9DSwotI2lmbmRlZiBPX05ERUxBWQotI2lmZGVmIE9fTk9OQkxP Q0sKLSNkZWZpbmUgT19OREVMQVkgT19OT05CTE9DSwotI2VuZGlmIC8qIE9fTk9OQkxPQ0sgKi8K LSNlbmRpZiAvKiBPX05ERUxBWSAqLwotI2Vsc2UgLyogUFRZTk9CTE9DSyAqLwotI2lmZGVmIE9f TkRFTEFZCi0jdW5kZWYgT19OREVMQVkKLSNlbmRpZiAvKiBPX05ERUxBWSAqLwotI2RlZmluZSBP X05ERUxBWSAwCi0jZW5kaWYgLyogUFRZTk9CTE9DSyAqLwotCi0jaWZuZGVmIE9OTENSCi0jZGVm aW5lIE9OTENSIDAKLSNlbmRpZiAvKiBPTkxDUiAqLwotCi0jaWZkZWYgQ0tfV0FJVF9ICi0jaW5j bHVkZSA8c3lzL3dhaXQuaD4KLSNlbmRpZiAvKiBDS19XQUlUX0ggKi8KLQotI2lmZGVmIFNUUkVB TVNQVFkKLSNpZm5kZWYgSU5JVF9TUFRZCi0jZGVmaW5lIElOSVRfU1BUWQotI2VuZGlmIC8qIElO SVRfU1BUWSAqLwotCi0jaW5jbHVkZSA8c3lzL3N0cmVhbS5oPgotI2luY2x1ZGUgPHN0cm9wdHMu aD4KLSNpbmNsdWRlIDx0ZXJtaW8uaD4KLQotLyogTWFrZSBzdXJlIHdlIGRvbid0IGdldCB0aGUg QlNEIHZlcnNpb24gKi8KLQotI2lmZGVmIEhBVkVfU1lTX1RUWV9ICi0jaW5jbHVkZSAiL3Vzci9p bmNsdWRlL3N5cy90dHkuaCIKLSNlbmRpZiAvKiBIQVZFX1NZU19UVFlfSCAqLwotCi0jaWZkZWYg SEFTX1BUWVZBUgkJCS8qIFdoZXJlIGlzIHRoaXMgc2V0PyAqLwotCi0jaW5jbHVkZSA8c3lzL3B0 eXZhci5oPgotCi0jZWxzZSAvKiBIQVNfUFRZVkFSICovCi0KLSNpZm5kZWYgVElPQ1BLVF9GTFVT SFdSSVRFCi0jZGVmaW5lIFRJT0NQS1RfRkxVU0hXUklURSAweDAyCi0jZGVmaW5lIFRJT0NQS1Rf Tk9TVE9QICAgICAweDEwCi0jZGVmaW5lIFRJT0NQS1RfRE9TVE9QICAgICAweDIwCi0jZGVmaW5l IFRJT0NQS1RfSU9DVEwgICAgICAweDQwCi0jZW5kaWYgLyogVElPQ1BLVF9GTFVTSFdSSVRFICov Ci0KLSNlbmRpZiAvKiBIQVNfUFRZVkFSICovCi0KLSNpZmRlZiBIQVZFX1RUWV9ICi0jaW5jbHVk ZSA8dHR5Lmg+Ci0jZW5kaWYgLyogSEFWRV9UVFlfSCAqLwotCi0vKgotICBCZWNhdXNlIG9mIHRo ZSB3YXkgcHR5aWJ1ZiBpcyB1c2VkIHdpdGggc3RyZWFtcyBtZXNzYWdlcywgd2UgbmVlZAotICBw dHlpYnVmKzEgdG8gYmUgb24gYSBmdWxsLXdvcmQgYm91bmRhcnkuICBUaGUgZm9sbG93aW5nIHdl aXJkbmVzcwotICBpcyBzaW1wbHkgdG8gbWFrZSB0aGF0IGhhcHBlbi4KLSovCi1sb25nIHB0eWli dWZidWZbQlVGU0laL3NpemVvZihsb25nKSsxXTsKLWNoYXIgKnB0eWlidWYgPSAoKGNoYXIgKikm cHR5aWJ1ZmJ1ZlsxXSktMTsKLWNoYXIgKnB0eWlwID0gKChjaGFyICopJnB0eWlidWZidWZbMV0p LTE7Ci1jaGFyIHB0eWlidWYyW0JVRlNJWl07Ci11bnNpZ25lZCBjaGFyIGN0bGJ1ZltCVUZTSVpd Owotc3RydWN0IHN0cmJ1ZiBzdHJidWZjLCBzdHJidWZkOwotCi1pbnQgcmVhZHN0cmVhbSgpOwot Ci0jZWxzZSAgLyogISBTVFJFQU1TUFRZICovCi0KLS8qIEkvTyBkYXRhIGJ1ZmZlcnMsIHBvaW50 ZXJzLCBhbmQgY291bnRlcnMuICovCi0KLWNoYXIgcHR5aWJ1ZltCVUZTSVpdLCAqcHR5aXAgPSBw dHlpYnVmOwotY2hhciBwdHlpYnVmMltCVUZTSVpdOwotCi0jZW5kaWYgLyogISBTVFJFQU1TUFRZ ICovCi0KLSNpZm5kZWYgVVNFX1RFUk1JTwotc3RydWN0IHRlcm1idWYgewotICAgIHN0cnVjdCBz Z3R0eWIgc2c7Ci0gICAgc3RydWN0IHRjaGFycyB0YzsKLSAgICBzdHJ1Y3QgbHRjaGFycyBsdGM7 Ci0gICAgaW50IHN0YXRlOwotICAgIGludCBsZmxhZ3M7Ci19IHRlcm1idWYsIHRlcm1idWYyOwot Ci0jZGVmaW5lIGNmc2V0b3NwZWVkKHRwLHZhbCkgKHRwKS0+c2cuc2dfb3NwZWVkID0gKHZhbCkK LSNkZWZpbmUgY2ZzZXRpc3BlZWQodHAsdmFsKSAodHApLT5zZy5zZ19pc3BlZWQgPSAodmFsKQot I2RlZmluZSBjZmdldG9zcGVlZCh0cCkgICAgICh0cCktPnNnLnNnX29zcGVlZAotI2RlZmluZSBj ZmdldGlzcGVlZCh0cCkgICAgICh0cCktPnNnLnNnX2lzcGVlZAotCi0jZWxzZSAgLyogVVNFX1RF Uk1JTyAqLwotCi0jaWZkZWYgU1lTVl9URVJNSU8KLSNkZWZpbmUgdGVybWlvcyB0ZXJtaW8KLSNl bmRpZiAvKiBTWVNWX1RFUk1JTyAqLwotCi0jaWZuZGVmIFRDU0FOT1cKLQotI2lmZGVmIFRDU0VU UwotCi0jZGVmaW5lIFRDU0FOT1cgVENTRVRTCi0jZGVmaW5lIFRDU0FEUkFJTiBUQ1NFVFNXCi0j ZGVmaW5lIHRjZ2V0YXR0cihmLCB0KSBpb2N0bChmLCBUQ0dFVFMsIChjaGFyICopdCkKLQotI2Vs c2UgLyogVENTRVRTICovCi0KLSNpZmRlZiBUQ1NFVEEKLSNkZWZpbmUgVENTQU5PVyBUQ1NFVEEK LSNkZWZpbmUgVENTQURSQUlOIFRDU0VUQVcKLSNkZWZpbmUgdGNnZXRhdHRyKGYsdCkgaW9jdGwo ZixUQ0dFVEEsKGNoYXIgKil0KQotI2Vsc2UgLyogVENTRVRBICovCi0jZGVmaW5lIFRDU0FOT1cg VElPQ1NFVEEKLSNkZWZpbmUgVENTQURSQUlOIFRJT0NTRVRBVwotI2RlZmluZSB0Y2dldGF0dHIo Zix0KSBpb2N0bChmLFRJT0NHRVRBLChjaGFyICopdCkKLSNlbmRpZiAvKiBUQ1NFVEEgKi8KLQot I2VuZGlmIC8qIFRDU0VUUyAqLwotCi0jZGVmaW5lIHRjc2V0YXR0cihmLGEsdCkgaW9jdGwoZixh LHQpCi0jZGVmaW5lIGNmc2V0b3NwZWVkKHRwLHZhbCkgKHRwKS0+Y19jZmxhZyAmPSB+Q0JBVUQ7 KHRwKS0+Y19jZmxhZ3w9KHZhbCkKLSNkZWZpbmUgY2ZnZXRvc3BlZWQodHApICgodHApLT5jX2Nm bGFnICYgQ0JBVUQpCi0KLSNpZmRlZiBDSUJBVUQKLSNkZWZpbmUgY2ZzZXRpc3BlZWQodHAsdmFs KSBcCi0gKHRwKS0+Y19jZmxhZyAmPSB+Q0lCQVVEOyAodHApLT5jX2NmbGFnIHw9ICgodmFsKTw8 SUJTSElGVCkKLSNkZWZpbmUgY2ZnZXRpc3BlZWQodHApICgoKHRwKS0+Y19jZmxhZyAmIENJQkFV RCk+PklCU0hJRlQpCi0jZWxzZSAvKiBDSUJBVUQgKi8KLSNkZWZpbmUgY2ZzZXRpc3BlZWQodHAs dmFsKSAodHApLT5jX2NmbGFnICY9IH5DQkFVRDsgKHRwKS0+Y19jZmxhZ3w9KHZhbCkKLSNkZWZp bmUgY2ZnZXRpc3BlZWQodHApICgodHApLT5jX2NmbGFnICYgQ0JBVUQpCi0jZW5kaWYgLyogQ0lC QVVEICovCi0KLSNlbmRpZiAvKiBUQ1NBTk9XICovCi0KLXN0cnVjdCB0ZXJtaW9zIHRlcm1idWYs IHRlcm1idWYyOyAgICAgICAvKiBwdHkgY29udHJvbCBzdHJ1Y3R1cmUgKi8KLQotI2lmZGVmIElO SVRfU1BUWQotc3RhdGljIGludCBzcHR5ID0gLTE7Ci0jZW5kaWYgLyogSU5JVF9TUFRZICovCi0K LSNlbmRpZiAvKiBVU0VfVEVSTUlPICovCi0KLSNpZmRlZiBRTlgJCQkJLyogMjk5ICovCi0jaWZu ZGVmIElYQU5ZCi0jZGVmaW5lIElYQU5ZIDAKLSNlbmRpZgkvKiBJWEFOWSAqLwotI2VuZGlmCS8q IFFOWCAqLwotCi1zdGF0aWMgaW50IG1zZyA9IDA7Ci0KLS8qIFZhcmlhYmxlcyBhdmFpbGFibGUg dG8gb3RoZXIgbW9kdWxlcyAqLwotCi1pbnQgcHR5X2ZvcmtfYWN0aXZlID0gMDsJCS8qIHB0eSBm b3JrIGlzIGFjdGl2ZSAqLwotUElEX1QgcHR5X2ZvcmtfcGlkID0gLTE7CQkvKiBwdHkgZm9yayBw aWQgKi8KLWludCBwdHlfc2xhdmVfZmQgPSAtMTsJCQkvKiBwdHkgc2xhdmUgZmlsZSBkZXNjcmlw dG9yICovCi1pbnQgcHR5X21hc3Rlcl9mZCA9IC0xOwkJCS8qIHB0eSBtYXN0ZXIgZmlsZSBkZXNj cmlwdG9yICovCi0KLS8qIHRlcm1idWYgcm91dGluZXMgKGJlZ2luKSAqLwotLyoKLSAgaW5pdF90 ZXJtYnVmKCkKLSAgY29weV90ZXJtYnVmKGNwKQotICBzZXRfdGVybWJ1ZigpCi0KLSAgVGhlc2Ug dGhyZWUgcm91dGluZXMgYXJlIHVzZWQgdG8gZ2V0IGFuZCBzZXQgdGhlICJ0ZXJtYnVmIiBzdHJ1 Y3R1cmUKLSAgdG8gYW5kIGZyb20gdGhlIGtlcm5lbC4gIGluaXRfdGVybWJ1ZigpIGdldHMgdGhl IGN1cnJlbnQgc2V0dGluZ3MuCi0gIGNvcHlfdGVybWJ1ZigpIGhhbmRzIGluIGEgbmV3ICJ0ZXJt YnVmIiB0byB3cml0ZSB0byB0aGUga2VybmVsLCBhbmQKLSAgc2V0X3Rlcm1idWYoKSB3cml0ZXMg dGhlIHN0cnVjdHVyZSBpbnRvIHRoZSBrZXJuZWwuCi0qLwotVk9JRAotaW5pdF90ZXJtYnVmKGZk KSBpbnQgZmQ7IHsKLSAgICBpbnQgdHR5ZmQ7Ci0gICAgaW50IHJjID0gMDsKLQotICAgIHR0eWZk ID0gZmQ7Ci0KLSNpZmRlZiBIQVZFX1NUUkVBTVMKLSAgICBkZWJ1ZyhGMTAwLCJpbml0X3Rlcm1i dWYgSEFWRV9TVFJFQU1TIiwiIiwwKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwiaW5pdF90ZXJt YnVmIEhBVkVfU1RSRUFNUyBOT1QgREVGSU5FRCIsIiIsMCk7Ci0jZW5kaWYJLyogSEFWRV9TVFJF QU1TICovCi0jaWZkZWYgU1RSRUFNU1BUWQotICAgIGRlYnVnKEYxMDAsImluaXRfdGVybWJ1ZiBT VFJFQU1TUFRZIiwiIiwwKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwiaW5pdF90ZXJtYnVmIFNU UkVBTVNQVFkgTk9UIERFRklORUQiLCIiLDApOwotI2VuZGlmCS8qIFNUUkVBTVNQVFkgKi8KLSNp ZmRlZiBJTklUX1NQVFkKLSAgICBkZWJ1ZyhGMTAwLCJpbml0X3Rlcm1idWYgSU5JVF9TUFRZIiwi IiwwKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwiaW5pdF90ZXJtYnVmIElOSVRfU1BUWSBOT1Qg REVGSU5FRCIsIiIsMCk7Ci0jZW5kaWYJLyogSU5JVF9TUFRZICovCi0KLSAgICBkZWJ1ZyhGMTAx LCJpbml0X3Rlcm1idWYgdHR5ZmQiLCIiLHR0eWZkKTsKLSNpZmRlZiBJTklUX1NQVFkKLSAgICBk ZWJ1ZyhGMTAxLCJpbml0X3Rlcm1idWYgc3B0eSIsIiIsc3B0eSk7Ci0jZW5kaWYJLyogSU5JVF9T UFRZICovCi0KLSAgICBtZW1zZXQoJnRlcm1idWYsMCxzaXplb2YodGVybWJ1ZikpOwotICAgIG1l bXNldCgmdGVybWJ1ZjIsMCxzaXplb2YodGVybWJ1ZjIpKTsKLSNpZm5kZWYJVVNFX1RFUk1JTwot ICAgIHJjID0gaW9jdGwodHR5ZmQsIFRJT0NHRVRQLCAoY2hhciAqKSZ0ZXJtYnVmLnNnKTsKLSAg ICByYyB8PSBpb2N0bCh0dHlmZCwgVElPQ0dFVEMsIChjaGFyICopJnRlcm1idWYudGMpOwotICAg IHJjIHw9IGlvY3RsKHR0eWZkLCBUSU9DR0xUQywgKGNoYXIgKikmdGVybWJ1Zi5sdGMpOwotI2lm ZGVmIFRJT0NHU1RBVEUKLSAgICByYyB8PSBpb2N0bCh0dHlmZCwgVElPQ0dTVEFURSwgKGNoYXIg KikmdGVybWJ1Zi5zdGF0ZSk7Ci0jZW5kaWYgLyogVElPQ0dTVEFURSAqLwotI2Vsc2UgLyogVVNF X1RFUk1JTyAqLwotICAgIGVycm5vID0gMDsKLSNpZmRlZiBJTklUX1NQVFkKLSAgICByYyA9IHRj Z2V0YXR0cihzcHR5LCAmdGVybWJ1Zik7Ci0gICAgZGVidWcoRjExMSwiaW5pdF90ZXJtYnVmKCkg dGNnZXRhdHRyKHNwdHkpIixja2l0b2EocmMpLGVycm5vKTsKLSNlbHNlCi0gICAgcmMgPSB0Y2dl dGF0dHIodHR5ZmQsICZ0ZXJtYnVmKTsKLSAgICBkZWJ1ZyhGMTExLCJpbml0X3Rlcm1idWYoKSB0 Y2dldGF0dHIodHR5ZmQpIixja2l0b2EocmMpLGVycm5vKTsKLSNlbmRpZiAvKiBJTklUX1NQVFkg Ki8KLSNlbmRpZiAvKiBVU0VfVEVSTUlPICovCi0gICAgaWYgKCFyYykKLSAgICAgIHRlcm1idWYy ID0gdGVybWJ1ZjsKLX0KLQotI2lmZGVmIFRJT0NQS1RfSU9DVEwKLVZPSUQKLWNvcHlfdGVybWJ1 ZihjcCwgbGVuKSBjaGFyICpjcDsgaW50IGxlbjsgewotICAgIGlmIChsZW4gPiBzaXplb2YodGVy bWJ1ZikpCi0gICAgICBsZW4gPSBzaXplb2YodGVybWJ1Zik7Ci0gICAgbWVtY3B5KChjaGFyICop JnRlcm1idWYsIGNwLCBsZW4pOwotICAgIHRlcm1idWYyID0gdGVybWJ1ZjsKLX0KLSNlbmRpZiAv KiBUSU9DUEtUX0lPQ1RMICovCi0KLVZPSUQKLXNldF90ZXJtYnVmKGZkKSBpbnQgZmQ7IHsJCS8q IE9ubHkgbWFrZSB0aGUgbmVjZXNzYXJ5IGNoYW5nZXMuICovCi0gICAgaW50IHg7Ci0gICAgaW50 IHR0eWZkOwotICAgIHR0eWZkID0gZmQ7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJzZXRfdGVybWJ1ZiB0 dHlmZCIsIiIsdHR5ZmQpOwotI2lmZGVmIElOSVRfU1BUWQotICAgIGRlYnVnKEYxMDEsInNldF90 ZXJtYnVmIHNwdHkiLCIiLHNwdHkpOwotI2VuZGlmCS8qIElOSVRfU1BUWSAqLwotCi0jaWZuZGVm CVVTRV9URVJNSU8KLSAgICBkZWJ1ZyhGMTAwLCJzZXRfdGVybWJ1ZiBVU0VfVEVSTUlPIiwiIiww KTsKLSAgICBpZiAobWVtY21wKChjaGFyICopJnRlcm1idWYuc2csIChjaGFyICopJnRlcm1idWYy LnNnLCBzaXplb2YodGVybWJ1Zi5zZykpKQotICAgICAgaW9jdGwodHR5ZmQsIFRJT0NTRVROLCAo Y2hhciAqKSZ0ZXJtYnVmLnNnKTsKLSAgICBpZiAobWVtY21wKChjaGFyICopJnRlcm1idWYudGMs IChjaGFyICopJnRlcm1idWYyLnRjLCBzaXplb2YodGVybWJ1Zi50YykpKQotICAgICAgaW9jdGwo dHR5ZmQsIFRJT0NTRVRDLCAoY2hhciAqKSZ0ZXJtYnVmLnRjKTsKLSAgICBpZiAobWVtY21wKChj aGFyICopJnRlcm1idWYubHRjLCAoY2hhciAqKSZ0ZXJtYnVmMi5sdGMsCi0JICAgICAgIHNpemVv Zih0ZXJtYnVmLmx0YykpKQotICAgICAgaW9jdGwodHR5ZmQsIFRJT0NTTFRDLCAoY2hhciAqKSZ0 ZXJtYnVmLmx0Yyk7Ci0gICAgaWYgKHRlcm1idWYubGZsYWdzICE9IHRlcm1idWYyLmxmbGFncykK LSAgICAgIGlvY3RsKHR0eWZkLCBUSU9DTFNFVCwgKGNoYXIgKikmdGVybWJ1Zi5sZmxhZ3MpOwot I2Vsc2UgIC8qIFVTRV9URVJNSU8gKi8KLSAgICB4ID0gbWVtY21wKChjaGFyICopJnRlcm1idWYs IChjaGFyICopJnRlcm1idWYyLCBzaXplb2YodGVybWJ1ZikpOwotICAgIGRlYnVnKEYxMDEsInNl dF90ZXJtYnVmICFVU0VfVEVSTUlPIG1lbWNtcCIsIiIseCk7Ci0gICAgeCA9IDE7CQkJCS8qIEZv cmNlIHRoaXMgKi8KLSAgICBpZiAoeCkgewotCWludCB4OwotCWVycm5vID0gMDsKLSNpZmRlZiBJ TklUX1NQVFkKLQlkZWJ1ZyhGMTAwLCJzZXRfdGVybWJ1ZiBJTklUX1NQVFkiLCIiLDApOwotCXgg PSB0Y3NldGF0dHIoc3B0eSwgVENTQU5PVywgJnRlcm1idWYpOwotCWRlYnVnKEYxMTEsInNldF90 ZXJtYnVmIHRjc2V0YXR0cihzcHR5KSIsY2tpdG9hKHgpLGVycm5vKTsKLSNlbHNlCi0JZGVidWco RjEwMCwic2V0X3Rlcm1idWYgIUlOSVRfU1BUWSIsIiIsMCk7Ci0JeCA9IHRjc2V0YXR0cih0dHlm ZCwgVENTQU5PVywgJnRlcm1idWYpOwotCWRlYnVnKEYxMTEsInNldF90ZXJtYnVmIHRjc2V0YXR0 cih0dHlmZCkiLGNraXRvYSh4KSxlcnJubyk7Ci0jZW5kaWYgLyogSU5JVF9TUFRZICovCi0gICAg fQotI2VuZGlmIC8qIFVTRV9URVJNSU8gKi8KLX0KLS8qIHRlcm1idWYgcm91dGluZXMgKGVuZCkg Ki8KLQotVk9JRAotcHR5aW50X3ZoYW5ndXAoKSB7Ci0jaWZkZWYgQ0tfVkhBTkdVUAotI2lmZGVm IENLX1BPU0lYX1NJRwotICAgIHN0cnVjdCBzaWdhY3Rpb24gc2E7Ci0gICAgLyogSW5pdGlhbGl6 ZSAic2EiIHN0cnVjdHVyZS4gKi8KLSAgICBzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7Ci0gICAg c2Euc2FfZmxhZ3MgPSAwOwotICAgIHNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOOwotICAgIHNpZ2Fj dGlvbihTSUdIVVAsICZzYSwgKHN0cnVjdCBzaWdhY3Rpb24gKikwKTsKLSAgICB2aGFuZ3VwKCk7 Ci0gICAgc2Euc2FfaGFuZGxlciA9IFNJR19ERkw7Ci0gICAgc2lnYWN0aW9uKFNJR0hVUCwgJnNh LCAoc3RydWN0IHNpZ2FjdGlvbiAqKTApOwotI2Vsc2UgLyogQ0tfUE9TSVhfU0lHICovCi0gICAg c2lnbmFsKFNJR0hVUCxTSUdfSUdOKTsKLSAgICB2aGFuZ3VwKCk7Ci0gICAgc2lnbmFsKFNJR0hV UCxTSUdfREZMKTsKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLSNlbmRpZiAvKiBDS19WSEFO R1VQICovCi19Ci0KLS8qCi0gIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdHdpY2UuICBJdCdzIG5v dCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHRoYXQgdGhlCi0gIHNldHNpZCgpIG9yIFRJT0NTQ1RU WSBpb2N0bHMgc3VjY2VlZCAodGhleSBtYXkgbm90IHRoZSBzZWNvbmQgdGltZSksIGJ1dAotICBy YXRoZXIgdGhhdCB3ZSBoYXZlIGEgY29udHJvbGxpbmcgdGVybWluYWwgYXQgdGhlIGVuZC4gIEl0 IGlzIGFzc3VtZWQgdGhhdAotICB2aGFuZ3VwIGRvZXNuJ3QgZXhpc3QgYW5kIGNvbmZ1c2UgdGhl IHByb2Nlc3MncyBub3Rpb24gb2YgY29udHJvbGxpbmcKLSAgdGVybWluYWwgb24gYW55IHN5c3Rl bSB3aXRob3V0IFRJT0NOT1RUWS4gIFRoYXQgaXMsIGVpdGhlciB2aGFuZ3VwKCkgbGVhdmVzCi0g IHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBpbiB0YWN0LCBicmVha3MgdGhlIGFzc29jaWF0aW9u IGNvbXBsZXRlbHksIG9yIHRoZQotICBzeXN0ZW0gcHJvdmlkZXMgVElPQ05PVFRZIHRvIGdldCB0 aGluZ3MgYmFjayBpbnRvIGEgcmVhc29uYWJsZSBzdGF0ZS4gIEluCi0gIHByYWN0aWNlLCB2aGFu Z3VwKCkgZWl0aGVyIGJyZWFrcyB0aGUgYXNzb2NpYXRpb24gY29tcGxldGVseSBvciBkb2Vzbid0 Ci0gIGVmZmVjdCBjb250cm9sbGluZyB0ZXJtaW5hbHMsIHNvIHRoaXMgY29uZGl0aW9uIGlzIG1l dC4KLSovCi1sb25nCi1wdHlpbnRfdm9pZF9hc3NvY2lhdGlvbigpIHsKLSAgICBpbnQgY29uX2Zk OwotI2lmZGVmIEhBVkVfU0VUU0lECi0gICAgZGVidWcoRjExMCwKLQkgICJwdHlpbnRfdm9pZF9h c3NvY2lhdGlvbigpIiwKLQkgICJzZXRzaWQoKSIsCi0JICAwCi0JICApOwotICAgIHNldHNpZCgp OwotI2VuZGlmIC8qIEhBVkVfU0VUU0lEICovCi0KLSNpZm5kZWYgTk9fREVWVFRZCi0gICAgLyog Vm9pZCB0dHkgYXNzb2NpYXRpb24gZmlyc3QgKi8KLSNpZmRlZiBUSU9DTk9UVFkKLSAgICBjb25f ZmQgPSBvcGVuKCIvZGV2L3R0eSIsIE9fUkRXUik7Ci0gICAgZGVidWcoRjExMSwKLQkgICJwdHlp bnRfdm9pZF9hc3NvY2lhdGlvbigpIG9wZW4oL2Rldi90dHksT19SRFdSKSIsCi0JICAiL2Rldi90 dHkiLAotCSAgY29uX2ZkKTsKLSAgICBpZiAoY29uX2ZkID49IDApIHsKLSAgICAgICAgaW9jdGwo Y29uX2ZkLCBUSU9DTk9UVFksIDApOwotICAgICAgICBjbG9zZShjb25fZmQpOwotICAgIH0KLSNp ZmRlZiBERUJVRwotICAgIGVsc2UgZGVidWcoRjEwMSwgInB0eWludF92b2lkX2Fzc29jaWF0aW9u KCkgb3BlbigpIGVycm5vIiwiIixlcnJubyk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNlbmRpZiAv KiBUSU9DTk9UVFkgKi8KLSNlbmRpZiAvKiBOT19ERVZUVFkgKi8KLSAgICByZXR1cm4oMCk7Ci19 Ci0KLS8qIFBJRCBtYXkgYmUgemVybyBmb3IgdW5rbm93bi4qLwotCi1sb25nCi1wdHlfY2xlYW51 cChzbGF2ZSwgcGlkLCB1cGRhdGVfdXRtcCkgY2hhciAqc2xhdmU7IGludCBwaWQ7IGludCB1cGRh dGVfdXRtcDsgewotI2lmZGVmIFZIQU5HX0xBU1QKLSAgICBpbnQgcmV0dmFsLCBmZDsKLSNlbmRp ZiAvKiBWSEFOR19MQVNUICovCi0KLSAgICBkZWJ1ZyhGMTExLCJwdHlfY2xlYW51cCgpIixzbGF2 ZSxwaWQpOwotI2lmZGVmIFdBTlRfVVRNUAotICAgIGlmICh1cGRhdGVfdXRtcCkKLSAgICAgIHB0 eV91cGRhdGVfdXRtcChQVFlfREVBRF9QUk9DRVNTLAotCQkgICAgICAwLAotCQkgICAgICAiIiwK LQkJICAgICAgc2xhdmUsCi0JCSAgICAgIChjaGFyICopMCwKLQkJICAgICAgUFRZX1VUTVBfVVNF Uk5BTUVfVkFMSUQKLQkJICAgICAgKTsKLSNlbmRpZiAvKiBXQU5UX1VUTVAgKi8KLQotI2lmZGVm IFNFVFVJRAotICAgIGNobW9kKHNsYXZlLCAwNjY2KTsKLSAgICBjaG93bihzbGF2ZSwgMCwgMCk7 Ci0jZW5kaWYgLyogU0VUVUlEICovCi0KLSNpZmRlZiBIQVZFX1JFVk9LRQotICAgIHJldm9rZShz bGF2ZSk7Ci0gICAgLyoKLSAgICAgICBSZXZva2UgaXNuJ3QgZ3VhcmFudGVlZCB0byBzZW5kIGEg U0lHSFVQIHRvIHRoZSBwcm9jZXNzZXMgaXQKLSAgICAgICBkaXNzb2NpYXRlcyBmcm9tIHRoZSB0 ZXJtaW5hbC4gIFRoZSBiZXN0IHNvbHV0aW9uIHdpdGhvdXQgYSBQb3NpeAotICAgICAgIG1lY2hh bmlzbSBmb3IgZm9yY2luZyBhIGhhbmd1cCBpcyB0byBraWxscGcoKSB0aGUgcHJvY2VzcyBncm91 cCBvZiB0aGUKLSAgICAgICBwdHkuICBUaGlzIHdpbGwgYXQgbGVhc3Qga2lsbCB0aGUgc2hlbGwg YW5kIGhvcGVmdWxseSwgdGhlIGNoaWxkCi0gICAgICAgcHJvY2Vzc2VzLiAgVGhpcyBpcyBub3Qg YWx3YXlzIHRoZSBjYXNlLCBob3dldmVyLiAgSWYgdGhlIHNoZWxsIHB1dHMKLSAgICAgICBlYWNo IGpvYiBpbiBhIHByb2Nlc3MgZ3JvdXAgYW5kIGRvZXNuJ3QgcGFzcyBhbG9uZyBTSUdIVVAsIGFs bAotICAgICAgIHByb2Nlc3NlcyBtYXkgbm90IGRpZS4KLSAgICAqLwotICAgIGlmIChwaWQgPiAw KSB7Ci0jaWZkZWYgSEFWRV9LSUxMUEcKLQlraWxscGcocGlkLCBTSUdIVVApOwotI2Vsc2UKLQlr aWxsKC0ocGlkKSwgU0lHSFVQKTsKLSNlbmRpZiAvKkhBVkVfS0lMTFBHKi8KLSAgICB9Ci0jZWxz ZSAvKiBIQVZFX1JFVk9LRSovCi0jaWZkZWYgVkhBTkdfTEFTVAotICAgIHsKLSAgICAgICAgaW50 IHN0YXR1czsKLSNpZmRlZiBDS19QT1NJWF9TSUcKLSAgICAgICAgc2lnc2V0X3Qgb2xkLCBuZXc7 Ci0gICAgICAgIHNpZ2VtcHR5c2V0KCZuZXcpOwotICAgICAgICBzaWdhZGRzZXQoJm5ldywgU0lH Q0hMRCk7Ci0gICAgICAgIHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJm5ldywgJm9sZCk7Ci0jZWxz ZSAvKkNLX1BPU0lYX1NJRyovCi0gICAgICAgIGludCBtYXNrID0gc2lnYmxvY2soc2lnbWFzayhT SUdDSExEKSk7Ci0jZW5kaWYgLypDS19QT1NJWF9TSUcqLwotICAgICAgICBzd2l0Y2ggKHJldHZh bCA9IGZvcmsoKSkgewotCSAgY2FzZSAtMToKLSNpZmRlZiBDS19QT1NJWF9TSUcKLSAgICAgICAg ICAgIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb2xkLCAwKTsKLSNlbHNlIC8qQ0tfUE9TSVhf U0lHKi8KLSAgICAgICAgICAgIHNpZ3NldG1hc2sobWFzayk7Ci0jZW5kaWYgLypDS19QT1NJWF9T SUcqLwotICAgICAgICAgICAgcmV0dXJuIGVycm5vOwotCSAgY2FzZSAwOgotICAgICAgICAgICAg cHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKTsKLSAgICAgICAgICAgIGlmIChyZXR2YWwgPSAocHR5 X29wZW5fY3R0eShzbGF2ZSwgJmZkLCAtMSkpKQotCSAgICAgIGV4aXQocmV0dmFsKTsKLSAgICAg ICAgICAgIHB0eWludF92aGFuZ3VwKCk7Ci0gICAgICAgICAgICBleGl0KDApOwotCSAgICBicmVh azsKLQkgIGRlZmF1bHQ6Ci0jaWZkZWYgSEFWRV9XQUlUUElECi0gICAgICAgICAgICB3YWl0cGlk KHJldHZhbCwgJnN0YXR1cywgMCk7Ci0jZWxzZSAvKkhBVkVfV0FJVFBJRCovCi0gICAgICAgICAg ICB3YWl0KCZzdGF0dXMpOwotI2VuZGlmIC8qIEhBVkVfV0FJVFBJRCAqLwotI2lmZGVmIENLX1BP U0lYX1NJRwotICAgICAgICAgICAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvbGQsIDApOwot I2Vsc2UgLypDS19QT1NJWF9TSUcqLwotICAgICAgICAgICAgc2lnc2V0bWFzayhtYXNrKTsKLSNl bmRpZiAvKkNLX1BPU0lYX1NJRyovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg IH0KLSNlbmRpZiAvKlZIQU5HX0xBU1QqLwotI2VuZGlmIC8qIEhBVkVfUkVWT0tFKi8KLSNpZm5k ZWYgSEFWRV9TVFJFQU1TCi0gICAgc2xhdmVbc3RybGVuKCIvZGV2LyIpXSA9ICdwJzsKLSNpZmRl ZiBTRVRVSUQKLSAgICBjaG1vZChzbGF2ZSwgMDY2Nik7Ci0gICAgY2hvd24oc2xhdmUsIDAsIDAp OwotI2VuZGlmIC8qIFNFVFVJRCAqLwotI2VuZGlmIC8qIEhBVkVfU1RSRUFNUyAqLwotICAgIHJl dHVybigwKTsKLX0KLQotbG9uZwotcHR5X2dldHB0eShmZCwgc2xhdmUsIHNsYXZlbGVuZ3RoKSBp bnQgc2xhdmVsZW5ndGg7IGludCAqZmQ7IGNoYXIgKnNsYXZlOyB7Ci0gICAgY2hhciAqY3A7Ci0g ICAgY2hhciAqcDsKLSAgICBpbnQgaSwgcHR5bnVtOwotICAgIHN0cnVjdCBzdGF0IHN0YjsKLSNp Zm5kZWYgSEFWRV9PUEVOUFRZCi0jaWZuZGVmIEhBVkVfX0dFVFBUWQotICAgIGNoYXIgc2xhdmVi dWZbMTAyNF07Ci0jZW5kaWYgLyogSEFWRV9fR0VUUFRZICovCi0jZW5kaWYgLyogSEFWRV9PUEVO UFRZICovCi0jaWZkZWYgSEFWRV9fR0VUUFRZCi0gICAgY2hhciAqc2xhdmVyZXQ7CQkJLyogVGVt cCB0byBob2xkIHBvaW50ZXIgdG8gc2xhdmUgKi8KLSNlbmRpZiAvKkhBVkVfX0dFVFBUWSovCi0K LSNpZmRlZiBIQVZFX09QRU5QVFkKLSAgICBpbnQgc2xhdmVmZDsKLQotICAgIHB0eV9tYXN0ZXJf ZmQgPSAtMTsKLSAgICBkZWJ1ZyhGMTAwLCJIQVZFX09QRU5QVFkiLCIiLDApOwotICAgIGlmIChv cGVucHR5KGZkLAotCQkmc2xhdmVmZCwKLQkJc2xhdmUsCi0JCShzdHJ1Y3QgdGVybWlvcyAqKTAs Ci0JCShzdHJ1Y3Qgd2luc2l6ZSAqKTAKLQkJKQotCSkgewotCXB0eV9tYXN0ZXJfZmQgPSAqZmQ7 Ci0JcmV0dXJuKDEpOwotICAgIH0KLSAgICBjbG9zZShzbGF2ZWZkKTsKLSAgICByZXR1cm4oMCk7 Ci0KLSNlbHNlIC8qIEhBVkVfT1BFTlBUWSAqLwotCi0jaWZkZWYgSEFWRV9fR0VUUFRZCi0vKgot ICBUaGlzIGNvZGUgaXMgaW5jbHVkZWQgZm9yIElyaXg7IGFzIG9mIHZlcnNpb24gNS4zLCBJcml4 IGhhcyAvZGV2L3B0bXgsIGJ1dAotICBpdCBmYWlscyB0byB3b3JrIHByb3Blcmx5OyBldmVuIGFm dGVyIGNhbGxpbmcgdW5sb2NrcHQsIHJvb3QgZ2V0cyBwZXJtaXNzaW9uCi0gIGRlbmllZCBvcGVu aW5nIHRoZSBwdHkuICBUaGUgY29kZSB0byBzdXBwb3J0IF9nZXRwdHkgc2hvdWxkIGJlIHJlbW92 ZWQgaWYKLSAgSXJpeCBnZXRzIHdvcmtpbmcgc3RyZWFtcyBwdHlzIGluIGZhdm9yIG9mIG1haW50 YWluaW5nIHRoZSBsZWFzdCBuZWVkZWQgY29kZQotICBwYXRocy4KLSovCi0gICAgZGVidWcoRjEw MCwiSEFWRV9fR0VUUFRZIiwiIiwwKTsKLSAgICBpZiAoKHNsYXZlcmV0ID0gX2dldHB0eShmZCwg T19SRFdSIHwgT19OREVMQVksIDA2MDAsIDApKSA9PSAwKSB7Ci0JKmZkID0gLTE7Ci0JcmV0dXJu KFBUWV9HRVRQVFlfTk9QVFkpOwotICAgIH0KLSAgICBpZiAoc3RybGVuKHNsYXZlcmV0KSA+IHNs YXZlbGVuZ3RoIC0gMSkgewotCWNsb3NlKCpmZCk7Ci0JKmZkID0gLTE7Ci0JcmV0dXJuKFBUWV9H RVRQVFlfU0xBVkVfVE9PTE9ORyk7Ci0gICAgfSBlbHNlIHsKLQlja3N0cm5jcHkoc2xhdmUsIHNs YXZlcmV0LCBzbGF2ZWxlbmd0aCk7Ci0gICAgfQotICAgIHJldHVybigwKTsKLQotI2Vsc2UgLyog SEFWRV9fR0VUUFRZICovCi0KLSAgICAqZmQgPSBvcGVuKCIvZGV2L3B0eW0vY2xvbmUiLCBPX1JE V1J8T19OREVMQVkpOyAvKiBIUFVYICovCi0gICAgaWYgKCpmZCA+PSAwKSB7Ci0gICAgICAgIGRl YnVnKEYxMTAsInB0eV9nZXRwdHkoKSIsIm9wZW4oL2Rldi9wdHltL2Nsb25lKSBzdWNjZXNzIiww KTsKLSAgICAgICAgZ290byBoYXZlX2ZkOwotICAgIH0KLQotI2lmZGVmIEhBVkVfUFRNWAotICAg IGRlYnVnKEYxMDAsIkhBVkVfUFRNWCIsIiIsMCk7Ci0gICAgKmZkID0gb3BlbigiL2Rldi9wdG14 IixPX1JEV1J8T19OREVMQVkpOwotICAgIGlmICgqZmQgPj0gMCkgewotICAgICAgICBkZWJ1ZyhG MTEwLCJwdHlfZ2V0cHR5KCkiLCJvcGVuKC9kZXYvcHRteCkgc3VjY2VzcyIsMCk7Ci0gICAgICAg IGdvdG8gaGF2ZV9mZDsKLSAgICB9Ci0jZW5kaWYgLyogSEFWRV9QVE1YICovCi0KLSAgICAqZmQg PSBvcGVuKCIvZGV2L3B0YyIsIE9fUkRXUnxPX05ERUxBWSk7IC8qIEFJWCAqLwotICAgIGlmICgq ZmQgPj0gMCkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfZ2V0cHR5KCkiLCJvcGVuKC9kZXYv cHRjKSBzdWNjZXNzIiwwKTsKLSAgICAgICAgZ290byBoYXZlX2ZkOwotICAgIH0KLSAgICAqZmQg PSBvcGVuKCIvZGV2L3B0eSIsIE9fUkRXUnxPX05ERUxBWSk7IC8qIHN5c3ZpbXAgKi8KLSAgICBp ZiAoKmZkID49IDApCi0gICAgICAgIGRlYnVnKEYxMTAsInB0eV9nZXRwdHkoKSIsIm9wZW4oL2Rl di9wdHkpIHN1Y2Nlc3MiLDApOwotCi0gIGhhdmVfZmQ6Ci0gICAgLyogVGhpcyB3b3VsZCBiZSB0 aGUgcHR5IG1hc3RlciAqLwotICAgIGRlYnVnKEYxMDEsInB0eV9nZXRwdHkgZmQoQSkiLCIiLCpm ZCk7Ci0gICAgaWYgKCpmZCA+PSAwKSB7Ci0JcHR5X21hc3Rlcl9mZCA9ICpmZDsKLQotI2lmZGVm IEhBVkVfR1JBTlRQVAotI2lmZGVmIEhBVkVfUFRNWAotICAgICAgICBkZWJ1ZyhGMTAwLCJIQVZF X0dSQU5UUFQiLCIiLDApOwotCWlmIChncmFudHB0KCpmZCkgfHwgdW5sb2NrcHQoKmZkKSkKLQkg IHJldHVybihQVFlfR0VUUFRZX1NUUkVBTVMpOwotI2VuZGlmIC8qIEhBVkVfUFRNWCAqLwotI2Vu ZGlmIC8qIEhBVkVfR1JBTlRQVCAqLwotCi0jaWZkZWYgSEFWRV9QVFNOQU1FCi0gICAgICAgIGRl YnVnKEYxMDAsIkhBVkVfUFRTTkFNRSIsIiIsMCk7Ci0JcCA9IChjaGFyICopcHRzbmFtZSgqZmQp OwotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfZ2V0cHR5KCkgcHRzbmFtZSgpIixwLDApOwotI2Vs c2UKLSNpZmRlZiBIQVZFX1RUWU5BTUUKLSAgICAgICAgZGVidWcoRjEwMCwiSEFWRV9UVFlOQU1F IiwiIiwwKTsKLQlwID0gdHR5bmFtZSgqZmQpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfZ2V0 cHR5KCkgdHR5bmFtZSgpIixwLDApOwotI2Vsc2UKLQkvKiBJZiB3ZSBkb24ndCBoYXZlIGVpdGhl ciB3aGF0IGRvIHdlIGRvPyAqLwotICAJcmV0dXJuKFBUWV9HRVRQVFlfTk9QVFkpOwkvKiBwdW50 ICovCi0jZW5kaWYgLyogSEFWRV9UVFlOQU1FICovCi0jZW5kaWYgLyogSEFWRV9QVFNOQU1FICov Ci0JaWYgKHApIHsKLQkgICAgaWYgKHN0cmxlbihwKSA+IHNsYXZlbGVuZ3RoIC0gMSkgewotICAg ICAgICAgICAgICAgIGNsb3NlICgqZmQpOwotICAgICAgICAgICAgICAgICpmZCA9IC0xOwotICAg ICAgICAgICAgICAgIHJldHVybihQVFlfR0VUUFRZX1NMQVZFX1RPT0xPTkcpOwotCSAgICB9Ci0J ICAgIGNrc3RybmNweShzbGF2ZSwgcCwgc2xhdmVsZW5ndGgpOwotCSAgICByZXR1cm4oMCk7Ci0J fQotCWlmIChmc3RhdCgqZmQsICZzdGIpIDwgMCkgewotCSAgICBjbG9zZSgqZmQpOwotCSAgICBy ZXR1cm4oUFRZX0dFVFBUWV9GU1RBVCk7Ci0JfQotCXB0eW51bSA9IChpbnQpKHN0Yi5zdF9yZGV2 JjB4RkYpOwotCXNwcmludGYoc2xhdmVidWYsICIvZGV2L3R0eXAleCIsIHB0eW51bSk7IC8qIHNh ZmUgKi8KLQlpZiAoc3RybGVuKHNsYXZlYnVmKSA+IHNsYXZlbGVuZ3RoIC0gMSkgewotCSAgICBj bG9zZSgqZmQpOwotCSAgICAqZmQgPSAtMTsKLQkgICAgcmV0dXJuKFBUWV9HRVRQVFlfU0xBVkVf VE9PTE9ORyk7Ci0JfQotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfZ2V0cHR5KCkgc2xhdmVidWYi LHNsYXZlYnVmLDApOwotCWNrc3RybmNweShzbGF2ZSwgc2xhdmVidWYsIHNsYXZlbGVuZ3RoKTsK LQlyZXR1cm4oMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAJZm9yIChjcCA9ICJwcXJzdHV2d3h5elBR UlNUIjsqY3A7IGNwKyspIHsKLQkgICAgc3ByaW50ZihzbGF2ZWJ1ZiwiL2Rldi9wdHlYWCIpOyAv KiBzYWZlICovCi0JICAgIHNsYXZlYnVmW3NpemVvZigiL2Rldi9wdHkiKSAtIDFdID0gKmNwOwot CSAgICBzbGF2ZWJ1ZltzaXplb2YoIi9kZXYvcHR5cCIpIC0gMV0gPSAnMCc7Ci0JICAgIGlmIChz dGF0KHNsYXZlYnVmLCAmc3RiKSA8IDApCi0JICAgICAgYnJlYWs7Ci0JICAgIGZvciAoaSA9IDA7 IGkgPCAxNjsgaSsrKSB7Ci0JCXNsYXZlYnVmW3NpemVvZigiL2Rldi9wdHlwIikgLSAxXSA9ICIw MTIzNDU2Nzg5YWJjZGVmIltpXTsKLQkJZXJybm8gPSAwOwotCQkqZmQgPSBvcGVuKHNsYXZlYnVm LCBPX1JEV1J8T19OREVMQVkpOwotCQlpZiAoKmZkIDwgMCkgewotCQkgICAgZGVidWcoRjExMSwi cHR5X2dldHB0eSgpIHB0eSBtYXN0ZXIgb3BlbiBlcnJvciIsCi0JCQkgIHNsYXZlYnVmLGVycm5v KTsKLQkJICAgIGNvbnRpbnVlOwotCQl9Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwicHR5 X2dldHB0eSgpIGZvdW5kIHB0eSBtYXN0ZXIiLHNsYXZlYnVmLCpmZCk7Ci0JCXNsYXZlYnVmW3Np emVvZigiL2Rldi8iKSAtIDFdID0gJ3QnOyAvKiBnb3QgcHR5ICovCi0JCWlmIChzdHJsZW4oc2xh dmVidWYpID4gc2xhdmVsZW5ndGggLTEpIHsKLQkJICAgIGNsb3NlKCpmZCk7Ci0JCSAgICAqZmQg PSAtMTsKLQkJICAgIHJldHVybihQVFlfR0VUUFRZX1NMQVZFX1RPT0xPTkcpOwotCQl9Ci0JCWNr c3RybmNweShzbGF2ZSwgc2xhdmVidWYsIHNsYXZlbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJwdHlfZ2V0cHR5IHNsYXZlIG5hbWUiLHNsYXZlLDApOwotCQlwdHlfbWFzdGVy X2ZkID0gKmZkOwotCQlyZXR1cm4oMCk7Ci0JICAgIH0KLQl9Ci0JcmV0dXJuKFBUWV9HRVRQVFlf Tk9QVFkpOwotICAgIH0KLSNlbmRpZiAvKkhBVkVfX0dFVFBUWSovCi0jZW5kaWYgLyogSEFWRV9P UEVOUFRZICovCi19Ci0KLWxvbmcKLXB0eV9pbml0KCkgewotI2lmZGVmIEhBVkVfUFRZTQotICAg IHN0YXRpYyBjaGFyIGR1bW15OwotICAgIGRlYnVnKEYxMDAsIkhBVkVfUFRZTSIsIiIsMCk7Ci0g ICAgdHR5X2JhbmsgPSAgJm1hc3Rlcl9uYW1lW3N0cmxlbigiL2Rldi9wdHltL3B0eSIpXTsKLSAg ICB0dHlfbnVtICA9ICAmbWFzdGVyX25hbWVbc3RybGVuKCIvZGV2L3B0eW0vcHR5WCIpXTsKLSAg ICBzbGF2ZV9iYW5rID0gJnNsYXZlX25hbWVbc3RybGVuKCIvZGV2L3B0eS90dHkiKV07Ci0gICAg c2xhdmVfbnVtICA9ICZzbGF2ZV9uYW1lW3N0cmxlbigiL2Rldi9wdHkvdHR5WCIpXTsKLSNlbmRp ZgotICAgIHJldHVybigwTCk7Ci19Ci0KLS8qCi0gIFRoZSBmb2xsb3dpbmcgaXMgYW4gYXJyYXkg b2YgbW9kdWxlcyB0aGF0IHNob3VsZCBiZSBwdXNoZWQgb24gdGhlIHN0cmVhbS4KLSAgU2VlIGNv bmZpZ3VyZS5pbiBmb3IgY2F2aWF0cyBhbmQgbm90ZXMgYWJvdXQgd2hlbiB0aGlzIGFycmF5IGlz IHVzZWQgYW5kIG5vdAotICB1c2VkLgotKi8KLSNpZmRlZiBIQVZFX1NUUkVBTVMKLSNpZm5kZWYg SEFWRV9MSU5FX1BVU0gKLXN0YXRpYyBjaGFyICpwdXNoX2xpc3RbXSA9IHsKLSNpZmRlZiBQVVNI X1BURU0KLSAgICAicHRlbSIsCi0jZW5kaWYKLSNpZmRlZiBQVVNIX0xEVEVSTQotICAgICJsZHRl cm0iLAotI2VuZGlmCi0jaWZkZWYgUFVTSF9UVENPTVBBVAotICAgICJ0dGNvbXBhdCIsCi0jZW5k aWYKLSAgICAwCi19OwotI2VuZGlmIC8qIEhBVkVfTElORV9QVVNIICovCi0jZW5kaWYgLyogSEFW RV9TVFJFQU1TICovCi0KLWxvbmcKLXB0eV9pbml0aWFsaXplX3NsYXZlIChmZCkgaW50IGZkOyB7 Ci0jaWZkZWYgUE9TSVhfVEVSTUlPUwotI2lmbmRlZiB1bHRyaXgKLSAgICBzdHJ1Y3QgdGVybWlv cyBuZXdfdGVybWlvOwotI2Vsc2UKLSAgICBzdHJ1Y3Qgc2d0dHliIGI7Ci0jZW5kaWYgLyogdWx0 cml4ICovCi0jZWxzZQotICAgIHN0cnVjdCBzZ3R0eWIgYjsKLSNlbmRpZiAvKiBQT1NJWF9URVJN SU9TICovCi0gICAgaW50IHBpZDsKLSNpZmRlZiBQT1NJWF9URVJNSU9TCi0jaWZuZGVmIHVsdHJp eAotICAgIGludCByYzsKLSNlbmRpZiAvKiB1bHRyaXggKi8KLSNlbmRpZiAvKiBQT1NJWF9URVJN SU9TICovCi0KLSAgICBkZWJ1ZyhGMTExLCJwdHlfaW5pdGlhbGl6ZV9zbGF2ZSgpIiwiZmQiLGZk KTsKLQotI2lmZGVmIEhBVkVfU1RSRUFNUwotI2lmZGVmIEhBVkVfTElORV9QVVNICi0gICAgd2hp bGUgKGlvY3RsKGZkLElfUE9QLDApID09IDApIDsJLyogQ2xlYXIgb3V0IGFueSBvbGQgbGluZWQn cyAqLwotCi0gICAgaWYgKGxpbmVfcHVzaChmZCkgPCAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAs InB0eV9pbml0aWFsaXplX3NsYXZlKCkiLCJsaW5lX3B1c2goKSBmYWlsZWQiLDApOwotCWNsb3Nl KGZkKTsKLSAgICAgICAgZmQgPSAtMTsKLSAgICAgICAgcmV0dXJuKFBUWV9PUEVOX1NMQVZFX0xJ TkVfUFVTSEZBSUwpOwotICAgIH0KLSNlbHNlIC8qTm8gbGluZV9wdXNoICovCi0gICAgewotICAg ICAgICBjaGFyICoqbW9kdWxlID0gJnB1c2hfbGlzdFswXTsKLSAgICAgICAgd2hpbGUgKCptb2R1 bGUpIHsKLQkgICAgaWYgKGlvY3RsKGZkLCBJX1BVU0gsICoobW9kdWxlKyspKSA8IDApIHsKLSAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfaW5pdGlhbGl6ZV9zbGF2ZSgpIiwiaW9jdGwo SV9QVVNIKSBmYWlsZWQiLDApOwotCQlyZXR1cm4oUFRZX09QRU5fU0xBVkVfUFVTSF9GQUlMKTsK LQkgICAgfQotCX0KLSAgICB9Ci0jZW5kaWYgLypMSU5FX1BVU0gqLwotI2VuZGlmIC8qSEFWRV9T VFJFQU1TKi8KLS8qCi0gIFVuZGVyIFVsdHJpeCAzLjAsIHRoZSBwZ3JwIG9mIHRoZSBzbGF2ZSBw dHkgdGVybWluYWwgbmVlZHMgdG8gYmUgc2V0Ci0gIGV4cGxpY2l0bHkuICBXaHkgcmxvZ2luZCB3 b3JrcyBhdCBhbGwgd2l0aG91dCB0aGlzIG9uIDQuM0JTRCBpcyBhIG15c3RlcnkuCi0qLwotI2lm ZGVmIEdFVFBHUlBfT05FQVJHCi0gICAgcGlkID0gZ2V0cGdycChnZXRwaWQoKSk7Ci0jZWxzZQot ICAgIHBpZCA9IGdldHBncnAoKTsKLSNlbmRpZiAvKiBHRVRQR1JQX09ORUFSRyAqLwotCi0gICAg ZGVidWcoRjExMSwicHR5X2luaXRpYWxpemVfc2xhdmUoKSIsInBpZCIscGlkKTsKLQotI2lmZGVm IFRJT0NTUEdSUAotICAgIGlvY3RsKGZkLCBUSU9DU1BHUlAsICZwaWQpOwotI2VuZGlmIC8qIFRJ T0NTUEdSUCAqLwotCi0jaWZkZWYgUE9TSVhfVEVSTUlPUwotI2lmbmRlZiB1bHRyaXgKLSAgICB0 Y3NldHBncnAoZmQsIHBpZCk7Ci0gICAgZXJybm8gPSAwOwotICAgIHJjID0gdGNnZXRhdHRyKGZk LCZuZXdfdGVybWlvKTsKLSAgICBkZWJ1ZyhGMTExLCJwdHlfaW5pdGlhbGl6ZV9zbGF2ZSB0Y2dl dGF0dHIoZmQpIixja2l0b2EocmMpLGVycm5vKTsKLSAgICBpZiAocmMgPT0gMCkgewotCW5ld190 ZXJtaW8uY19jY1tWTUlOXSA9IDE7Ci0JbmV3X3Rlcm1pby5jX2NjW1ZUSU1FXSA9IDA7Ci0JcmMg PSB0Y3NldGF0dHIoZmQsVENTQU5PVywmbmV3X3Rlcm1pbyk7Ci0JZGVidWcoRjExMSwicHR5X2lu aXRpYWxpemVfc2xhdmUgdGNzZXRhdHRyKGZkKSIsY2tpdG9hKHJjKSxlcnJubyk7Ci0gICAgfQot I2VuZGlmIC8qIHVsdHJpeCAqLwotI2VuZGlmIC8qIFBPU0lYX1RFUk1JT1MgKi8KLSAgICByZXR1 cm4oMEwpOwotfQotCi0jaWZkZWYgV0FOVF9VVE1QCi1sb25nCi1wdHlfbG9nd3RtcCAodHR5LCB1 c2VyLCBob3N0KSBjaGFyICp1c2VyLCAqdHR5LCAqaG9zdDsgewotI2lmZGVmIEhBVkVfTE9HV1RN UAotICAgIGxvZ3d0bXAodHR5LHVzZXIsaG9zdCk7Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSAg ICBzdHJ1Y3QgdXRtcCB1dDsKLSAgICBjaGFyICp0bXB4OwotICAgIGNoYXIgdXRtcF9pZFs1XTsK LSAgICBpbnQgbG9nZ2luZ2luID0gdXNlclswXTsJCS8qIFdpbGwgYmUgZW1wdHkgZm9yIGxvZ291 dCAqLwotCi0jaWZuZGVmIE5PX1VUX0hPU1QKLSAgICBzdHJuY3B5KHV0LnV0X2hvc3QsIGhvc3Qs IHNpemVvZih1dC51dF9ob3N0KSk7Ci0jZW5kaWYgLyogTk9fVVRfSE9TVCAqLwotCi0gICAgc3Ry bmNweSh1dC51dF9saW5lLCB0dHksIHNpemVvZih1dC51dF9saW5lKSk7Ci0gICAgdXQudXRfdGlt ZSA9IHRpbWUoMCk7Ci0KLSNpZm5kZWYgTk9fVVRfUElECi0gICAgdXQudXRfcGlkID0gZ2V0cGlk KCk7Ci0gICAgc3RybmNweSh1dC51dF91c2VyLCB1c2VyLCBzaXplb2YodXQudXRfdXNlcikpOwot Ci0gICAgdG1weCA9IHR0eSArIHN0cmxlbih0dHkpIC0gMjsKLSAgICBja21ha21zZyh1dG1wX2lk LDUsImtyIix0bXB4LE5VTEwsTlVMTCk7Ci0gICAgc3RybmNweSh1dC51dF9pZCwgdXRtcF9pZCwg c2l6ZW9mKHV0LnV0X2lkKSk7Ci0gICAgdXQudXRfcGlkID0gKGxvZ2dpbmdpbiA/IGdldHBpZCgp IDogMCk7Ci0gICAgdXQudXRfdHlwZSA9IChsb2dnaW5naW4gPyBVU0VSX1BST0NFU1MgOiBERUFE X1BST0NFU1MpOwotI2Vsc2UKLSAgICBzdHJuY3B5KHV0LnV0X25hbWUsIHVzZXIsIHNpemVvZih1 dC51dF9uYW1lKSk7Ci0jZW5kaWYgLyogTk9fVVRfUElEICovCi0KLSAgICByZXR1cm4ocHR5aW50 X3VwZGF0ZV93dG1wKCZ1dCwgaG9zdCwgdXNlcikpOwotCi0jZW5kaWYgLyogSEFWRV9MT0dXVE1Q ICovCi19Ci0jZW5kaWYgLyogV0FOVF9VVE1QICovCi0KLS8qCi0gIFRoaXMgcm91dGluZSBpcyBj YWxsZWQgdHdpY2UuICBJdCdzIG5vdCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHRoYXQgdGhlCi0g IHNldHNpZCgpIG9yIFRJT0NTQ1RUWSBpb2N0bHMgc3VjY2VlZCAodGhleSBtYXkgbm90IHRoZSBz ZWNvbmQgdGltZSksIGJ1dAotICByYXRoZXIgdGhhdCB3ZSBoYXZlIGEgY29udHJvbGxpbmcgdGVy bWluYWwgYXQgdGhlIGVuZC4gIEl0IGlzIGFzc3VtZWQgdGhhdAotICB2aGFuZ3VwIGRvZXNuJ3Qg ZXhpc3QgYW5kIGNvbmZ1c2UgdGhlIHByb2Nlc3MncyBub3Rpb24gb2YgY29udHJvbGxpbmcKLSAg dGVybWluYWwgb24gYW55IHN5c3RlbSB3aXRob3V0IFRJT0NOT1RUWS4gIFRoYXQgaXMsIGVpdGhl ciB2aGFuZ3VwKCkgbGVhdmVzCi0gIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBpbiB0YWN0LCBi cmVha3MgdGhlIGFzc29jaWF0aW9uIGNvbXBsZXRlbHksIG9yIHRoZQotICBzeXN0ZW0gcHJvdmlk ZXMgVElPQ05PVFRZIHRvIGdldCB0aGluZ3MgYmFjayBpbnRvIGEgcmVhc29uYWJsZSBzdGF0ZS4g IEluCi0gIHByYWN0aWNlLCB2aGFuZ3VwKCkgZWl0aGVyIGJyZWFrcyB0aGUgYXNzb2NpYXRpb24g Y29tcGxldGVseSBvciBkb2Vzbid0Ci0gIGVmZmVjdCBjb250cm9sbGluZyB0ZXJtaW5hbHMsIHNv IHRoaXMgY29uZGl0aW9uIGlzIG1ldC4KLSovCi1sb25nCi1wdHlfb3Blbl9jdHR5KHNsYXZlLCBm ZCwgZmMpIGNoYXIgKiBzbGF2ZTsgaW50ICpmZDsgaW50IGZjOyB7Ci0gICAgaW50IHJldHZhbDsK LQotICAgIGRlYnVnKEYxMTAsInB0eV9vcGVuX2N0dHkoKSBzbGF2ZSIsc2xhdmUsMCk7Ci0KLS8q IEZpcnN0LCBkaXNzb2NpYXRlIGZyb20gcHJldmlvdXMgdGVybWluYWwgKi8KLQotICAgIGlmICgo cmV0dmFsID0gcHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKSkgIT0gMCkgewotICAgICAgICBkZWJ1 ZyhGMTExLAotCSAgICAgICJwdHlfb3Blbl9jdHR5KCkiLAotCSAgICAgICJwdHlpbnRfdm9pZF9h c3NvY2lhdGlvbigpIGZhaWxlZCIsCi0JICAgICAgcmV0dmFsCi0JICAgICAgKTsKLQlyZXR1cm4o cmV0dmFsKTsKLSAgICB9Ci0jaWZkZWYgTVVTVF9TRVRQR1JQCi0vKgotICBUaGUgVWx0cml4IChh bmQgb3RoZXIgQlNEIHR0eSBkcml2ZXJzKSByZXF1aXJlIHRoZSBwcm9jZXNzIGdyb3VwCi0gIHRv IGJlIHplcm8gaW4gb3JkZXIgdG8gYWNxdWlyZSB0aGUgbmV3IHR0eSBhcyBhIGNvbnRyb2xsaW5n IHR0eS4KLSovCi0gICAgc2V0cGdycCgwLDApOwotICAgIGRlYnVnKEYxMDEsInB0eV9vcGVuX2N0 dHkgTVVTVF9TRVRQR1JQIHNldHBncnAoMCwwKSIsIiIsZXJybm8pOwotI2VuZGlmIC8qIE1VU1Rf U0VUUEdSUCAqLwotCi0gICAgZXJybm8gPSAwOwotICAgICpmZCA9IG9wZW4oc2xhdmUsIE9fUkRX Uik7Ci0gICAgZGVidWcoRjExMSwicHR5X29wZW5fY3R0eSBvcGVuKHNsYXZlKSBmZCIsc2xhdmUs KmZkKTsKLSAgICBpZiAoKmZkIDwgMCkgewotCWRlYnVnKEYxMTEsInB0eV9vcGVuX2N0dHkoKSBv cGVuIGZhaWx1cmUiLCBzbGF2ZSwgZXJybm8pOwotCXJldHVybihQVFlfT1BFTl9TTEFWRV9PUEVO RkFJTCk7Ci0gICAgfQotI2lmZGVmIFNPTEFSSVMKLSAgICAvKiBUaGlzIGZvcmNlcyB0aGUgam9i IHRvIGhhdmUgYSBjb250cm9sbGluZyB0ZXJtaW5hbC4gKi8KLSAgICBjbG9zZSgqZmQpOwotICAg ICpmZCA9IG9wZW4oc2xhdmUsIE9fUkRXUik7Ci0gICAgZGVidWcoRjExMSwicHR5X29wZW5fY3R0 eSBjbG9zZS9vcGVuKHNsYXZlKSBmZCIsc2xhdmUsKmZkKTsKLSNpZmRlZiBERUJVRwotICAgIC8q IFRoaXMgc2hvd3MgdGhhdCAvZGV2L3R0eSBleGlzdHMgKi8KLWlmIChkZWJsb2cpIHsKLQlpbnQg eDsKLQl4ID0gb3BlbigiL2Rldi90dHkiLCBPX1JEV1IpOwotCWRlYnVnKEYxMTEsInB0eV9vcGVu X2N0dHkgb3BlbigvZGV2L3R0eSkgZmQiLHNsYXZlLHgpOwotCWlmICh4IDwgMCkgZGVidWcoRjEx MSwicHR5X29wZW5fY3R0eSBvcGVuKC9kZXYvdHR5KSBlcnJubyIsIiIsZXJybm8pOwotCWRlYnVn KEYxMTAsInB0eV9vcGVuX2N0dHkgdHR5bmFtZSgvZGV2L3R0eSkiLHR0eW5hbWUoeCksMCk7Ci0J aWYgKHggPiAtMSkgY2xvc2UoeCk7Ci0gICAgfQotI2VuZGlmCS8qIERFQlVHICovCi0jZW5kaWYg LyogU09MQVJJUyAqLwotCi0jaWZkZWYgTVVTVF9TRVRQR1JQCi0gICAgc2V0cGdycCgwLCBnZXRw aWQoKSk7Ci0jZW5kaWYgLyogTVVTVF9TRVRQR1JQICovCi0KLSNpZmRlZiBUSU9DU0NUVFkKLSAg ICBpZiAoCi0jaWZkZWYgQ09NTUVOVAotCWZjID09IDAKLSNlbHNlCi0JMQotI2VuZGlmCS8qIENP TU1FTlQgKi8KLQkpIHsKLQkvKiBUSU9DU0NUVFkgPSBNYWtlIHRoaXMgdGhlIGpvYidzIGNvbnRy b2xsaW5nIHRlcm1pbmFsICovCi0JZXJybm8gPSAwOwotCXJldHZhbCA9IGlvY3RsKCpmZCwgVElP Q1NDVFRZLCAwKTsgLyogRG9uJ3QgY2hlY2sgcmV0dXJuLiovCi0JZGVidWcoRjExMSwicHR5X29w ZW5fY3R0eSgpIGlvY3RsIFRJT0NTQ1RUWSIsY2tpdG9hKHJldHZhbCksZXJybm8pOwotICAgIH0K LSNlbmRpZiAvKiBUSU9DU0NUVFkgKi8KLSAgICByZXR1cm4oMEwpOwotfQotCi1sb25nCi1wdHlf b3Blbl9zbGF2ZShzbGF2ZSwgZmQsIGZjKSBjaGFyICpzbGF2ZTsgaW50ICpmZDsgaW50IGZjOyB7 Ci0gICAgaW50IHZmZCwgdGVzdGZkOwotICAgIGxvbmcgcmV0dmFsOwotI2lmZGVmIENLX1BPU0lY X1NJRwotICAgIHN0cnVjdCBzaWdhY3Rpb24gc2E7Ci0KLSAgICBzaWdlbXB0eXNldCgmc2Euc2Ff bWFzayk7CQkvKiBJbml0aWFsaXplICJzYSIgc3RydWN0dXJlLiAqLwotICAgIHNhLnNhX2ZsYWdz ID0gMDsKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLQotLyoKLSAgRmlyc3QsIGNobW9kIGFu ZCBjaG93biB0aGUgc2xhdmUuICBJZiB3ZSBoYXZlIHZoYW5ndXAgdGhlbiB3ZSByZWFsbHkgbmVl ZAotICBwdHlfb3Blbl9jdHR5IHRvIG1ha2Ugc3VyZSBvdXIgY29udHJvbGxpbmcgdGVybWluYWwg aXMgdGhlIHB0eSB3ZSdyZQotICBvcGVuaW5nLiAgSG93ZXZlciwgaWYgd2UgYXJlIHVzaW5nIHJl dm9rZSBvciBub3RoaW5nIHRoZW4gd2UganVzdCBuZWVkIGEKLSAgZmlsZSBkZXNjcmlpcHRvciBm b3IgdGhlIHB0eS4gIENvbnNpZGVyaW5nIHNvbWUgT1NlcyBpbiB0aGlzIGNhdGVnb3J5IGJyZWFr Ci0gIG9uIHRoZSBzZWNvbmQgY2FsbCB0byBvcGVuX2N0dHkgKGN1cnJlbnRseSBPU0YgYnV0IG90 aGVycyBtYXkpLCB3ZSBzaW1wbHkKLSAgdXNlIGEgZGVzY3JpcHRvciBpZiB3ZSBjYW4uCi0qLwot I2lmZGVmIFZIQU5HX0ZJUlNUCi0gICAgaWYgKChyZXR2YWwgPSBwdHlfb3Blbl9jdHR5KHNsYXZl LCAmdmZkLCBmYykpICE9IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwKLQkgICAgICAicHR5X29w ZW5fc2xhdmUoKSBWSEFOR19GSVJTVCIsCi0JICAgICAgInB0eV9vcGVuX2N0dHkoKSBmYWlsZWQi LAotCSAgICAgIHJldHZhbAotCSAgICAgICk7Ci0gICAgICAgIHJldHVybihyZXR2YWwpOwotICAg IH0KLSAgICBpZiAodmZkIDwgMCkgewotICAgICAgICBkZWJ1ZyhGMTExLAotCSAgICAgICJwdHlf b3Blbl9zbGF2ZSgpIFZIQU5HX0ZJUlNUIiwKLQkgICAgICAiUFRZX09QRU5fU0xBVkVfT1BFTkZB SUwiLAotCSAgICAgIHZmZAotCSAgICAgICk7Ci0JcmV0dXJuKFBUWV9PUEVOX1NMQVZFX09QRU5G QUlMKTsKLSAgICB9Ci0jZW5kaWYgLyogVkhBTkdfRklSU1QgKi8KLQotICAgIGlmIChzbGF2ZSA9 PSBOVUxMIHx8ICpzbGF2ZSA9PSAnXDAnKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsInB0eV9vcGVu X3NsYXZlKCkiLCJQVFlfT1BFTl9TTEFWRV9UT09TSE9SVCIsMCk7Ci0gICAgICAgIHJldHVybihQ VFlfT1BFTl9TTEFWRV9UT09TSE9SVCk7Ci0gICAgfQotCi0jaWZkZWYgU0VUVUlECi0gICAgaWYg KGNobW9kKHNsYXZlLCAwKSkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfb3Blbl9zbGF2ZSgp IiwiUFRZX09QRU5fU0xBVkVfQ0hNT0RGQUlMIiwwKTsKLSAgICAgICAgcmV0dXJuKFBUWV9PUEVO X1NMQVZFX0NITU9ERkFJTCk7Ci0gICAgfQotICAgIGlmIChjaG93bihzbGF2ZSwgMCwgMCApID09 IC0xICkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfb3Blbl9zbGF2ZSgpIiwiUFRZX09QRU5f U0xBVkVfQ0hPV05GQUlMIiwwKTsKLSAgICAgICAgcmV0dXJuKFBUWV9PUEVOX1NMQVZFX0NIT1dO RkFJTCk7Ci0gICAgfQotI2VuZGlmIC8qIFNFVFVJRCAqLwotI2lmZGVmIFZIQU5HX0ZJUlNUCi0g ICAgcHR5aW50X3ZoYW5ndXAoKTsKLSAgICBjbG9zZSh2ZmQpOwotI2VuZGlmIC8qIFZIQU5HX0ZJ UlNUICovCi0KLSAgICBpZiAoKHJldHZhbCA9IHB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkpICE9 IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwKLQkgICAgICAicHR5X29wZW5fc2xhdmUoKSIsCi0J ICAgICAgInB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkgZmFpbGVkIiwKLQkgICAgICByZXR2YWwK LQkgICAgICApOwotICAgICAgICByZXR1cm4ocmV0dmFsKTsKLSAgICB9Ci0KLSNpZmRlZiBIQVZF X1JFVk9LRQotICAgIGlmIChyZXZva2UgKHNsYXZlKSA8IDAgKSB7Ci0gICAgICAgIGRlYnVnKEYx MTAsInB0eV9vcGVuX3NsYXZlKCkiLCJQVFlfT1BFTl9TTEFWRV9SRVZPS0VGQUlMIiwwKTsKLQly ZXR1cm4oUFRZX09QRU5fU0xBVkVfUkVWT0tFRkFJTCk7Ci0gICAgfQotI2VuZGlmIC8qIEhBVkVf UkVWT0tFICovCi0KLS8qIE9wZW4gdGhlIHB0eSBmb3IgcmVhbC4gKi8KLQotICAgIHJldHZhbCA9 IHB0eV9vcGVuX2N0dHkoc2xhdmUsIGZkLCBmYyk7Ci0gICAgZGVidWcoRjExMSwicHR5X29wZW5f c2xhdmUgcmV0dmFsIixzbGF2ZSxyZXR2YWwpOwotICAgIGRlYnVnKEYxMTEsInB0eV9vcGVuX3Ns YXZlIGZkIixzbGF2ZSwqZmQpOwotICAgIGlmIChyZXR2YWwgIT0gMCkgewotICAgICAgICBkZWJ1 ZyhGMTExLCJwdHlfb3Blbl9zbGF2ZSgpIiwicHR5X29wZW5fY3R0eSgpIGZhaWxlZCIscmV0dmFs KTsKLQlyZXR1cm4oUFRZX09QRU5fU0xBVkVfT1BFTkZBSUwpOwotICAgIH0KLSAgICBwdHlfc2xh dmVfZmQgPSAqZmQ7CQkgICAvKiBUaGlzIGlzIG5vdCB2aXNpYmxlIHRvIHRoZSB1cHBlciBmb3Jr ICovCi0gICAgZGVidWcoRjExMSwicHR5X29wZW5fc2xhdmUgZmQgY3R0eSdkIixzbGF2ZSxwdHlf c2xhdmVfZmQpOwotICAgIHJldHZhbCA9IHB0eV9pbml0aWFsaXplX3NsYXZlKCpmZCk7Ci0gICAg ZGVidWcoRjExMSwicHR5X29wZW5fc2xhdmUgZmQgaW5pdCdkIixzbGF2ZSxwdHlfc2xhdmVfZmQp OwotICAgIGlmIChyZXR2YWwpIHsKLSAgICAgICAgZGVidWcoRjExMSwicHR5X29wZW5fc2xhdmUo KSIsInB0eV9pbml0aWFsaXplX3NsYXZlKCkgZmFpbGVkIixyZXR2YWwpOwotICAgICAgICByZXR1 cm4ocmV0dmFsKTsKLSAgICB9Ci0gICAgLyogKFZPSUQpcHR5X21ha2VfcmF3KCpmZCk7ICovCi0K LSAgICBkZWJ1ZyhGMTAwLCJwdHlfb3Blbl9zbGF2ZSBPSyIsIiIsKmZkKTsKLSAgICByZXR1cm4o MEwpOwotfQotCi0jaWZkZWYgV0FOVF9VVE1QCi0KLSNpZm5kZWYgVVRNUF9GSUxFCi0jaWZkZWYg X1BBVEhfVVRNUAotI2RlZmluZSBVVE1QX0ZJTEUgX1BBVEhfVVRNUAotI2VuZGlmIC8qIF9QQVRI X1VUTVAgKi8KLSNlbmRpZiAvKiAgVVRNUF9GSUxFICovCi0KLS8qIElmIGl0IGlzICpzdGlsbCog bWlzc2luZywgYXNzdW1lIC9ldGMvdXRtcCAqLwotCi0jaWZuZGVmIFVUTVBfRklMRQotI2RlZmlu ZQlVVE1QX0ZJTEUgIi9ldGMvdXRtcCIKLSNlbmRpZiAvKiBVVE1QX0ZJTEUgKi8KLQotI2lmbmRl ZiBOT19VVF9QSUQKLSNkZWZpbmUgV1RNUF9SRVFVSVJFU19VU0VSTkFNRQotI2VuZGlmIC8qIE5P X1VUX1BJRCAqLwotCi1sb25nCi1wdHlfdXBkYXRlX3V0bXAocHJvY2Vzc190eXBlLCBwaWQsIHVz ZXJuYW1lLCBsaW5lLCBob3N0LCBmbGFncykKLSAgICBpbnQgcHJvY2Vzc190eXBlOwotICAgIGlu dCBwaWQ7Ci0gICAgY2hhciAqdXNlcm5hbWUsICpsaW5lLCAqaG9zdDsKLSAgICBpbnQgZmxhZ3M7 Ci0vKiBwdHlfdXBkYXRlX3V0bXAgKi8gewotICAgIHN0cnVjdCB1dG1wIGVudCwgdXQ7Ci0jaWZu ZGVmIEhBVkVfU0VUVVRFTlQKLSAgICBzdHJ1Y3Qgc3RhdCBzdGF0YjsKLSAgICBpbnQgdHR5Owot I2VuZGlmIC8qIEhBVkVfU0VUVVRFTlQgKi8KLSNpZmRlZiBIQVZFX1NFVFVUWEVOVAotICAgIHN0 cnVjdCB1dG1weCB1dHg7Ci0jZW5kaWYgLyogSEFWRV9TRVRVVFhFTlQgKi8KLSNpZm5kZWYgTk9f VVRfUElECi0gICAgY2hhciAqdG1weDsKLSAgICBjaGFyIHV0bXBfaWRbNV07Ci0jZW5kaWYgLyog Tk9fVVRfUElEICovCi0gICAgY2hhciB1c2VyYnVmWzMyXTsKLSAgICBpbnQgZmQ7Ci0KLSAgICBk ZWJ1ZyhGMTAwLCJwdHlfdXBkYXRlX3V0bXAoKSIsIiIsMCk7Ci0gICAgc3RybmNweShlbnQudXRf bGluZSwgbGluZStzaXplb2YoIi9kZXYvIiktMSwgc2l6ZW9mKGVudC51dF9saW5lKSk7Ci0gICAg ZW50LnV0X3RpbWUgPSB0aW1lKDApOwotCi0jaWZkZWYgTk9fVVRfUElECi0gICAgaWYgKHByb2Nl c3NfdHlwZSA9PSBQVFlfTE9HSU5fUFJPQ0VTUykKLSAgICAgIHJldHVybigwTCk7Ci0jZWxzZSAv KiBOT19VVF9QSUQgKi8KLQotICAgIGVudC51dF9waWQgPSBwaWQ7Ci0KLSAgICBzd2l0Y2ggKHBy b2Nlc3NfdHlwZSkgewotICAgICAgY2FzZSBQVFlfTE9HSU5fUFJPQ0VTUzoKLQllbnQudXRfdHlw ZSA9IExPR0lOX1BST0NFU1M7Ci0JYnJlYWs7Ci0gICAgICBjYXNlIFBUWV9VU0VSX1BST0NFU1M6 Ci0JZW50LnV0X3R5cGUgPSBVU0VSX1BST0NFU1M7Ci0JYnJlYWs7Ci0gICAgICBjYXNlIFBUWV9E RUFEX1BST0NFU1M6Ci0JZW50LnV0X3R5cGUgPSBERUFEX1BST0NFU1M7Ci0JYnJlYWs7Ci0gICAg ICBkZWZhdWx0OgotCXJldHVybihQVFlfVVBEQVRFX1VUTVBfUFJPQ1RZUEVfSU5WQUxJRCk7Ci0g ICAgfQotI2VuZGlmIC8qTk9fVVRfUElEKi8KLQotI2lmbmRlZiBOT19VVF9IT1NUCi0gICAgaWYg KGhvc3QpCi0gICAgICBzdHJuY3B5KGVudC51dF9ob3N0LCBob3N0LCBzaXplb2YoZW50LnV0X2hv c3QpKTsKLSAgICBlbHNlCi0gICAgICBlbnQudXRfaG9zdFswXSA9ICdcMCc7Ci0jZW5kaWYgLyog Tk9fVVRfSE9TVCAqLwotCi0jaWZuZGVmIE5PX1VUX1BJRAotICAgIGlmICghc3RyY21wIChsaW5l LCAiL2Rldi9jb25zb2xlIikpIHsKLQljaGFyICogcyA9IE5VTEw7Ci0KLSNpZmRlZiBzdW4KLSNp ZmRlZiBfX1NWUjQKLQlzID0gImNvIjsKLSNlbHNlCi0JcyA9ICJjb25zIjsKLSNlbmRpZiAvKiBf X1NWUjQgKi8KLSNlbHNlCi0JcyA9ICJjb25zIjsKLSNlbmRpZiAvKiBzdW4gKi8KLQotCXN0cm5j cHkoZW50LnV0X2lkLCBzLCA0KTsKLQotICAgIH0gZWxzZSB7Ci0KLQl0bXB4ID0gbGluZSArIHN0 cmxlbihsaW5lKS0xOwotCWlmICgqKHRtcHgtMSkgIT0gJy8nKSB0bXB4LS07CS8qIGxhc3QgMiBj aGFycyB1bmxlc3MgaXQncyBhICcvJyAqLwotI2lmZGVmIF9faHB1eAotCWNrc3RybmNweSh1dG1w X2lkLCB0bXB4LCA1KTsKLSNlbHNlCi0JY2ttYWttc2codXRtcF9pZCw1LCJrbCIsdG1weCxOVUxM LE5VTEwpOwotI2VuZGlmIC8qIF9faHB1eCAqLwotCXN0cm5jcHkoZW50LnV0X2lkLCB1dG1wX2lk LCBzaXplb2YoZW50LnV0X2lkKSk7Ci0gICAgfQotICAgIHN0cm5jcHkoZW50LnV0X3VzZXIsIHVz ZXJuYW1lLCBzaXplb2YoZW50LnV0X3VzZXIpKTsKLQotI2Vsc2UKLQotICAgIHN0cm5jcHkoZW50 LnV0X25hbWUsIHVzZXJuYW1lLCBzaXplb2YoZW50LnV0X25hbWUpKTsKLQotI2VuZGlmIC8qIE5P X1VUX1BJRCAqLwotCi0gICAgaWYgKHVzZXJuYW1lWzBdKQotICAgICAgc3RybmNweSh1c2VyYnVm LCB1c2VybmFtZSwgc2l6ZW9mKHVzZXJidWYpKTsKLSAgICBlbHNlCi0gICAgICB1c2VyYnVmWzBd ID0gJ1wwJzsKLQotI2lmZGVmIEhBVkVfU0VUVVRFTlQKLQotICAgIHV0bXBuYW1lKFVUTVBfRklM RSk7Ci0gICAgc2V0dXRlbnQoKTsKLS8qCi0gIElmIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIHVz ZXIgbmFtZSBpbiB0aGUgd3RtcCBzdHJ1Y3R1cmUgYW5kIE91ciBmbGFncwotICB0ZWxsIHVzIHdl IGNhbiBvYnRhaW4gaXQgZnJvbSB0aGUgdXRtcCBhbmQgd2Ugc3VjY2VlZCBpbiBvYnRhaW5pbmcg aXQsIHdlCi0gIHRoZW4gc2F2ZSB0aGUgdXRtcCBzdHJ1Y3R1cmUgd2Ugb2J0YWluLCB3cml0ZSBv dXQgdGhlIHV0bXAgc3RydWN0dXJlIGFuZAotICBjaGFuZ2UgdGhlIHVzZXJuYW1lIHBvaW50ZXIg c28gaXQgaXMgdXNlZCBieSB1cGRhdGVfd3RtcC4KLSovCi0KLSNpZmRlZiBXVE1QX1JFUVVJUkVT X1VTRVJOQU1FCi0gICAgaWYgKCghdXNlcm5hbWVbMF0pICYmIChmbGFncyZQVFlfVVRNUF9VU0VS TkFNRV9WQUxJRCkgJiZsaW5lKSB7Ci0Jc3RydWN0IHV0bXAgKnV0cHRyOwotCXN0cm5jcHkodXQu dXRfbGluZSwgbGluZSwgc2l6ZW9mKHV0LnV0X2xpbmUpKTsKLQl1dHB0ciA9IGdldHV0bGluZSgm dXQpOwotCWlmICh1dHB0cikKLQkgIHN0cm5jcHkodXNlcmJ1Zix1dHB0ci0+dXRfdXNlcixzaXpl b2YodXQudXRfdXNlcikpOwotICAgIH0KLSNlbmRpZiAvKiBXVE1QX1JFUVVJUkVTX1VTRVJOQU1F ICovCi0KLSAgICBwdXR1dGxpbmUoJmVudCk7Ci0gICAgZW5kdXRlbnQoKTsKLQotI2lmZGVmIEhB VkVfU0VUVVRYRU5UCi0gICAgc2V0dXR4ZW50KCk7Ci0jaWZkZWYgSEFWRV9HRVRVVE1QWAotICAg IGdldHV0bXB4KCZlbnQsICZ1dHgpOwotI2Vsc2UgLyogSEFWRV9HRVRVVE1QWCAqLwotICAgIC8q IEZvciBwbGF0Zm9ybXMgbGlrZSBIUFVYIGFuZCBEZWMgVW5peCB3aGljaCBkb24ndCBoYXZlIGdl dHV0bXB4ICovCi0gICAgc3RybmNweSh1dHgudXRfdXNlciwgZW50LnV0X3VzZXIsIHNpemVvZihl bnQudXRfdXNlcikpOwotICAgIHN0cm5jcHkodXR4LnV0X2lkLCBlbnQudXRfaWQsIHNpemVvZihl bnQudXRfaWQpKTsKLSAgICBzdHJuY3B5KHV0eC51dF9saW5lLCBlbnQudXRfbGluZSwgc2l6ZW9m KGVudC51dF9saW5lKSk7Ci0gICAgdXR4LnV0X3BpZCA9IHBpZDsJCS8qIGtsdWRnZSBmb3IgSXJp eCwgZXRjLiB0byBhdm9pZCB0cnVuYy4gKi8KLSAgICB1dHgudXRfdHlwZSA9IGVudC51dF90eXBl OwotI2lmZGVmIFVUX0VYSVRfU1RSVUNUVVJFX0RJRkZFUgotICAgIHV0eC51dF9leGl0LnV0X2V4 aXQgPSBlbnQudXRfZXhpdC5lX2V4aXQ7Ci0jZWxzZSAvKiBVVF9FWElUX1NUUlVDVFVSRV9ESUZG RVIgKi8KLS8qIEtMVURHRSBmb3Igbm93OyBldmVudHVhbGx5IHRoaXMgd2lsbCBiZSBhIGZlYXR1 cmUgdGVzdC4uLiBTZWUgUFIjWzQwXSAqLwotI2lmZGVmIF9faHB1eAotICAgIHV0eC51dF9leGl0 Ll9fZV90ZXJtaW5hdGlvbiA9IGVudC51dF9leGl0LmVfdGVybWluYXRpb247Ci0gICAgdXR4LnV0 X2V4aXQuX19lX2V4aXQgPSBlbnQudXRfZXhpdC5lX2V4aXQ7Ci0jZWxzZSAvKiBfX2hwdXggKi8K LSAgICAvKiBYWFggZG8gbm90aGluZyBmb3Igbm93OyB3ZSBkb24ndCBldmVuIGtub3cgdGhlIHN0 cnVjdCBtZW1iZXIgZXhpc3RzICovCi0jZW5kaWYgLyogX19ocHV4ICovCi0jZW5kaWYgLyogVVRf RVhJVF9TVFJVQ1RVUkVfRElGRkVSICovCi0gICAgdXR4LnV0X3R2LnR2X3NlYyA9IGVudC51dF90 aW1lOwotICAgIHV0eC51dF90di50dl91c2VjID0gMDsKLSNlbmRpZiAvKiBIQVZFX0dFVFVUTVBY ICovCi0gICAgaWYgKGhvc3QpCi0gICAgICBzdHJuY3B5KHV0eC51dF9ob3N0LCBob3N0LCBzaXpl b2YodXR4LnV0X2hvc3QpKTsKLSAgICBlbHNlCi0gICAgICB1dHgudXRfaG9zdFswXSA9IDA7Ci0g ICAgcHV0dXR4bGluZSgmdXR4KTsKLSAgICBlbmR1dHhlbnQoKTsKLSNlbmRpZiAvKiBIQVZFX1NF VFVUWEVOVCAqLwotCi0jZWxzZSAvKiBIQVZFX1NFVFVURU5UICovCi0gICAgaWYgKGZsYWdzJlBU WV9UVFlTTE9UX1VTQUJMRSkgewotCXR0eSA9IHR0eXNsb3QoKTsKLSAgICB9IGVsc2UgewotCWlu dCBsYzsKLQl0dHkgPSAtMTsKLQlpZiAoKGZkID0gb3BlbihVVE1QX0ZJTEUsIE9fUkRXUikpIDwg MCkKLQkgIHJldHVybihlcnJubyk7Ci0JZm9yIChsYyA9IDA7Ci0JICAgICBsc2VlayhmZCwgKG9m Zl90KShsYyAqIHNpemVvZihzdHJ1Y3QgdXRtcCkpLCBTRUVLX1NFVCkgIT0gLTE7Ci0JICAgICBs YysrCi0JICAgICApIHsKLQkgICAgaWYgKHJlYWQoZmQsCi0JCSAgICAgKGNoYXIgKikmdXQsCi0J CSAgICAgc2l6ZW9mKHN0cnVjdCB1dG1wKQotCQkgICAgICkgIT0gc2l6ZW9mKHN0cnVjdCB1dG1w KQotCQkpCi0JICAgICAgYnJlYWs7Ci0JICAgIGlmIChzdHJuY21wKHV0LnV0X2xpbmUsIGVudC51 dF9saW5lLCBzaXplb2YodXQudXRfbGluZSkpID09IDApIHsKLQkJdHR5ID0gbGM7Ci0jaWZkZWYg V1RNUF9SRVFVSVJFU19VU0VSTkFNRQotCQlpZiAoIXVzZXJuYW1lJiYoZmxhZ3MmUFRZX1VUTVBf VVNFUk5BTUVfVkFMSUQpKQotCQkgIHN0cm5jcHkodXNlcmJ1ZiwgdXQudXRfdXNlciwgc2l6ZW9m KHV0LnV0X3VzZXIpKTsKLSNlbmRpZiAvKiBXVE1QX1JFUVVJUkVTX1VTRVJOQU1FICovCi0JCWJy ZWFrOwotCSAgICB9Ci0JfQotCWNsb3NlKGZkKTsKLSAgICB9Ci0gICAgaWYgKHR0eSA+IDAgJiYg KGZkID0gb3BlbihVVE1QX0ZJTEUsIE9fV1JPTkxZLCAwKSkgPj0gMCkgewotCWxzZWVrKGZkLCAo b2ZmX3QpKHR0eSAqIHNpemVvZihzdHJ1Y3QgdXRtcCkpLCBTRUVLX1NFVCk7Ci0Jd3JpdGUoZmQs IChjaGFyICopJmVudCwgc2l6ZW9mKHN0cnVjdCB1dG1wKSk7Ci0JY2xvc2UoZmQpOwotICAgIH0K LSNlbmRpZiAvKiBIQVZFX1NFVFVURU5UICovCi0KLSAgICAvKiBEb24ndCByZWNvcmQgTE9HSU5f UFJPQ0VTUyBlbnRyaWVzLiAqLwotICAgIGlmIChwcm9jZXNzX3R5cGUgPT0gUFRZX0xPR0lOX1BS T0NFU1MpCi0gICAgICByZXR1cm4oMCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHB0eWludF91 cGRhdGVfd3RtcCgmZW50LCBob3N0LCB1c2VyYnVmKSk7Ci19Ci0jaWZuZGVmIFdUTVBfRklMRQot I2lmZGVmIF9QQVRIX1dUTVAKLSNkZWZpbmUgV1RNUF9GSUxFIF9QQVRIX1dUTVAKLSNlbmRpZiAv KiBfUEFUSF9XVE1QICovCi0jZW5kaWYgLyogV1RNUF9GSUxFICovCi0KLSNpZm5kZWYgV1RNUFhf RklMRQotI2lmZGVmIF9QQVRIX1dUTVBYCi0jaWZkZWYgSEFWRV9VUERXVE1QWAotI2RlZmluZSBX VE1QWF9GSUxFIF9QQVRIX1dUTVBYCi0jZW5kaWYgLyogSEFWRV9VUERXVE1QWCAqLwotI2VuZGlm IC8qIF9QQVRIX1dUTVBYICovCi0jZW5kaWYgLyogV1RNUFhfRklMRSAqLwotCi0vKiBJZiBpdCBp cyAqc3RpbGwqIG1pc3NpbmcsIGFzc3VtZSAvdXNyL2FkbS93dG1wICovCi0KLSNpZm5kZWYgV1RN UF9GSUxFCi0jZGVmaW5lCVdUTVBfRklMRSAiL3Vzci9hZG0vd3RtcCIKLSNlbmRpZiAvKiBXVE1Q X0ZJTEUgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIFRoZSBmb2xsb3dpbmcgdGVzdCBjYW4gbm90 IGJlIG1hZGUgcG9ydGFibHkgKi8KLQotLyogI2lmIGRlZmluZWQoX19HTElCQ19fKSAmJiAoX19H TElCQ19fID49IDIpICYmIChfX0dMSUJDX01JTk9SX18gPj0gMSkgKi8KLS8qCi0gIFRoaXMgaXMg dWdseSwgYnV0IHRoZSBsYWNrIG9mIHN0YW5kYXJkaXphdGlvbiBpbiB0aGUgdXRtcC91dG1weCBz cGFjZSwgYW5kCi0gIHdoYXQgZ2xpYmMgaW1wbGVtZW50cyBhbmQgZG9lc24ndCBtYWtlIGF2YWls YWJsZSwgaXMgZXZlbiB3b3JzZS4KLSovCi0vKiAjdW5kZWYgSEFWRV9VUERXVE1QWCAqLwkvKiBE b24ndCB1c2UgdXBkd3RtcHggZm9yIGdsaWJjIDIuMSAqLwotLyogI2VuZGlmICovIC8qIF9fR0xJ QkNfXyBldGMgKi8KLQotI2Vsc2UgIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIF9fR0xJQkNfXwot I3VuZGVmIEhBVkVfVVBEV1RNUFgJCS8qIERvbid0IHVzZSB1cGR3dG1weCBmb3IgZ2xpYmMgcGVy aW9kICovCi0jZW5kaWYgLyogX19HTElCQ19fICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi1s b25nCi1wdHlpbnRfdXBkYXRlX3d0bXAoZW50LGhvc3QsdXNlcikgc3RydWN0IHV0bXAgKmVudDsg Y2hhciAqaG9zdDsgY2hhciAqdXNlcjsgewotICAgIHN0cnVjdCB1dG1wIHV0OwotICAgIHN0cnVj dCBzdGF0IHN0YXRiOwotICAgIGludCBmZDsKLSAgICB0aW1lX3QgdXR0aW1lOwotI2lmZGVmIEhB VkVfVVBEV1RNUFgKLSAgICBzdHJ1Y3QgdXRtcHggdXR4OwotCi0gICAgZ2V0dXRtcHgoZW50LCAm dXR4KTsKLSAgICBpZiAoaG9zdCkKLSAgICAgIHN0cm5jcHkodXR4LnV0X2hvc3QsIGhvc3QsIHNp emVvZih1dHgudXRfaG9zdCkgKTsKLSAgICBlbHNlCi0gICAgICB1dHgudXRfaG9zdFswXSA9IDA7 Ci0gICAgaWYgKHVzZXIpCi0gICAgICBzdHJuY3B5KHV0eC51dF91c2VyLCB1c2VyLCBzaXplb2Yo dXR4LnV0X3VzZXIpKTsKLSAgICB1cGR3dG1weChXVE1QWF9GSUxFLCAmdXR4KTsKLSNlbmRpZiAv KiBIQVZFX1VQRFdUTVBYICovCi0KLSNpZmRlZiBIQVZFX1VQRFdUTVAKLSNpZm5kZWYgSEFWRV9V UERXVE1QWAotICAgIC8qIFRoaXMgaXMgYWxyZWFkeSBwZXJmb3JtZWQgYnl1cGR3dG1weCBpZiBw cmVzZW50LiovCi0gICAgdXBkd3RtcChXVE1QX0ZJTEUsIGVudCk7Ci0jZW5kaWYgLyogSEFWRV9V UERXVE1QWCovCi0jZWxzZSAvKiBIQVZFX1VQRFdUTVAgKi8KLQotICAgIGlmICgoZmQgPSBvcGVu KFdUTVBfRklMRSwgT19XUk9OTFl8T19BUFBFTkQsIDApKSA+PSAwKSB7Ci0JaWYgKCFmc3RhdChm ZCwgJnN0YXRiKSkgewotCSAgICBtZW1zZXQoKGNoYXIgKikmdXQsIDAsIHNpemVvZih1dCkpOwot I2lmZGVmIF9faHB1eAotCSAgICBzdHJuY3B5KHV0LnV0X2lkLCBlbnQtPnV0X2lkLCBzaXplb2Yg KHV0LnV0X2lkKSk7Ci0jZW5kaWYgLyogX19ocHV4ICovCi0JICAgIHN0cm5jcHkodXQudXRfbGlu ZSwgZW50LT51dF9saW5lLCBzaXplb2YodXQudXRfbGluZSkpOwotCSAgICBzdHJuY3B5KHV0LnV0 X25hbWUsIGVudC0+dXRfbmFtZSwgc2l6ZW9mKHV0LnV0X25hbWUpKTsKLSNpZm5kZWYgTk9fVVRf SE9TVAotCSAgICBzdHJuY3B5KHV0LnV0X2hvc3QsIGVudC0+dXRfaG9zdCwgc2l6ZW9mKHV0LnV0 X2hvc3QpKTsKLSNlbmRpZiAvKiBOT19VVF9IT1NUICovCi0KLQkgICAgdGltZSgmdXR0aW1lKTsK LQkgICAgdXQudXRfdGltZSA9IHV0dGltZTsKLQotI2lmZGVmIEhBVkVfR0VUVVRFTlQKLSNpZmRl ZiBVU0VSX1BST0NFU1MKLQkgICAgaWYgKGVudC0+dXRfbmFtZSkgewotCQlpZiAoIXV0LnV0X3Bp ZCkKLQkJICB1dC51dF9waWQgPSBnZXRwaWQoKTsKLSNpZm5kZWYgX19ocHV4Ci0JCXV0LnV0X3R5 cGUgPSBVU0VSX1BST0NFU1M7Ci0jZWxzZSAgLyogX19ocHV4ICovCi0JCXV0LnV0X3R5cGUgPSBl bnQtPnV0X3R5cGU7Ci0jZW5kaWYgLyogX19ocHV4ICovCi0KLQkgICAgfSBlbHNlIHsKLQotI2lm ZGVmIEVNUFRZCi0JCXV0LnV0X3R5cGUgPSBFTVBUWTsKLSNlbHNlCi0JCXV0LnV0X3R5cGUgPSBE RUFEX1BST0NFU1M7IC8qIEZvciBMaW51eCBicm9rZW5uZXNzKi8KLSNlbmRpZiAvKiBFTVBUWSAq LwotCi0JICAgIH0KLSNlbmRpZiAvKiBVU0VSX1BST0NFU1MgKi8KLSNlbmRpZiAvKiBIQVZFX0dF VFVURU5UICovCi0KLQkgICAgaWYgKHdyaXRlKGZkLCAoY2hhciAqKSZ1dCwgc2l6ZW9mKHN0cnVj dCB1dG1wKSkgIT0KLQkJc2l6ZW9mKHN0cnVjdCB1dG1wKSkKLSNpZm5kZWYgQ09IRVJFTlQKLQkg ICAgICBmdHJ1bmNhdGUoZmQsIHN0YXRiLnN0X3NpemUpOwotI2Vsc2UKLQkgICAgICBjaHNpemUo ZmQsIHN0YXRiLnN0X3NpemUpOwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0JfQotCWNsb3NlKGZk KTsKLSAgICB9Ci0jZW5kaWYgLyogSEFWRV9VUERXVE1QICovCi0gICAgcmV0dXJuKDApOyAvKiBu byBjdXJyZW50IGZhaWx1cmUgY2FzZXM7IGZpbGUgbm90IGZvdW5kIGlzIG5vdCBmYWlsdXJlISAq LwotfQotI2VuZGlmIC8qIFdBTlRfVVRNUCAqLwotCi0vKiBUaGlzIGlzIGZvciBhbmNpZW50IFVu aXhlcyB0aGF0IGRvbid0IGhhdmUgdGhlc2UgdHR5IHN5bWJvbHMgZGVmaW5lZC4gKi8KLQotI2lm bmRlZiBQRU5ESU4KLSNkZWZpbmUgUEVORElOIElDQU5PTgotI2VuZGlmIC8qIFBFTkRJTiAqLwot I2lmbmRlZiBGTFVTSE8KLSNkZWZpbmUgRkxVU0hPIElDQU5PTgotI2VuZGlmIC8qIEZMVVNITyAq LwotI2lmbmRlZiBJTUFYQkVMCi0jZGVmaW5lIElNQVhCRUwgSUNBTk9OCi0jZW5kaWYgLyogSU1B WEJFTCAqLwotI2lmbmRlZiBFWFRQUk9DCi0jZGVmaW5lIEVYVFBST0MgSUNBTk9OCi0jZW5kaWYg LyogRVhUUFJPQyAqLwotCi1zdGF0aWMgY2hhciBYbGluZVsxN10gPSB7IDAsIDAgfTsKLS8qCi0g IGdldHB0eXNsYXZlKCkKLSAgT3BlbiB0aGUgc2xhdmUgc2lkZSBvZiB0aGUgcHR5LCBhbmQgZG8g YW55IGluaXRpYWxpemF0aW9uIHRoYXQgaXMgbmVjZXNzYXJ5LgotICBUaGUgcmV0dXJuIHZhbHVl IGZkIGlzIGEgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgc2xhdmUgc2lkZS4KLSAgZmMgPSBmdW5j dGlvbiBjb2RlIGZyb20gZG9fcHR5KCkgKHEudi4pCi0qLwotaW50Ci1nZXRwdHlzbGF2ZShmZCwg ZmMpIGludCAqIGZkLCBmYzsgewotICAgIGludCB0dHlmZDsKLSAgICBpbnQgdCA9IC0xOwotICAg IGxvbmcgcmV0dmFsOwotI2lmZGVmIFRJT0NHV0lOU1oKLSAgICBzdHJ1Y3Qgd2luc2l6ZSB3czsK LSAgICBleHRlcm4gaW50IGNtZF9yb3dzLCBjbWRfY29sczsKLSNlbmRpZiAvKiBUSU9DR1dJTlNa ICovCi0KLSAgICB0dHlmZCA9ICpmZDsKLSAgICBkZWJ1ZyhGMTExLCJnZXRwdHlzbGF2ZSgpIiwi dHR5ZmQiLHR0eWZkKTsKLSAgICAvKgotICAgICAqIE9wZW5pbmcgdGhlIHNsYXZlIHNpZGUgbWF5 IGNhdXNlIGluaXRpbGl6YXRpb24gb2YgdGhlCi0gICAgICoga2VybmVsIHR0eSBzdHJ1Y3R1cmUu ICBXZSBuZWVkIHJlbWVtYmVyIHRoZSBzdGF0ZSBvZjoKLSAgICAgKiAgICAgIGlmIGxpbmVtb2Rl IHdhcyB0dXJuZWQgb24KLSAgICAgKiAgICAgIHRlcm1pbmFsIHdpbmRvdyBzaXplCi0gICAgICog ICAgICB0ZXJtaW5hbCBzcGVlZAotICAgICAqIHNvIHRoYXQgd2UgY2FuIHJlc2V0IHRoZW0gaWYg d2UgbmVlZCB0by4KLSAgICAgKi8KLSAgICBpZiAoKHJldHZhbCA9IHB0eV9vcGVuX3NsYXZlKFhs aW5lLCAmdCwgZmMpKSAhPSAwKSB7Ci0JcGVycm9yKFhsaW5lKTsKLQltc2crKzsKLSAgICAgICAg ZGVidWcoRjExMSwiZ2V0cHR5c2xhdmUoKSIsIlVuYWJsZSB0byBvcGVuIHNsYXZlIixyZXR2YWwp OwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJnZXRwdHlzbGF2 ZSIsInQiLHQpOwotI2lmZGVmIElOSVRfU1BUWQotICAgIHNwdHkgPSB0OwotICAgIGRlYnVnKEYx MTEsImdldHB0eXNsYXZlIiwic3B0eSIsc3B0eSk7Ci0jZW5kaWYgLyogSU5JVF9TUFRZICovCi0j aWZkZWYgU1RSRUFNU1BUWQotICAgIGlmIChpb2N0bCh0LElfUFVTSCwicGNrdCIpIDwgMCkgewot ICAgICAgICBkZWJ1ZyhGMTExLCJnZXRwdHlzbGF2ZSgpIiwiaW9jdGwoSV9QVVNIKSBmYWlsZWQi LGVycm5vKTsKLSNpZm5kZWYgX0FJWAotICAgICAgICBmYXRhbCgiSV9QVVNIIHBja3QiKTsKLSNl bmRpZiAvKiBfQUlYICovCi0gICAgfQotI2VuZGlmIC8qIFNUUkVBTVNQVFkgKi8KLQotICAgIC8q IFNldCB1cCB0aGUgdHR5IG1vZGVzIGFzIHdlIGxpa2UgdGhlbSB0byBiZS4gKi8KLSNpZmRlZiBD T01NRU5UCi0gICAgLyogT3JpZ2luYWxseSBsaWtlIHRoaXMuLi4gQnV0IHRoaXMgaXMgdGhlIG1h c3RlciAtIHdlIHdhbnQgdGhlIHNsYXZlICovCi0gICAgLyogQW55d2F5LCB0aGlzIGZhaWxzIG9u IFNvbGFyaXMgYW5kIHByb2JhYmx5IG90aGVyIFN5c3RlbSBWIE9TJ3MgKi8KLSAgICBpbml0X3Rl cm1idWYodHR5ZmQpOwotI2Vsc2UKLSAgICBpbml0X3Rlcm1idWYodCk7Ci0jZW5kaWYJLyogQ09N TUVOVCAqLwotI2lmZGVmIFRJT0NHV0lOU1oKLSAgICBpZiAoY21kX3Jvd3MgfHwgY21kX2NvbHMp IHsKLSAgICAgICAgbWVtc2V0KChjaGFyICopJndzLCAwLCBzaXplb2Yod3MpKTsKLSAgICAgICAg d3Mud3NfY29sID0gY21kX2NvbHM7Ci0gICAgICAgIHdzLndzX3JvdyA9IGNtZF9yb3dzOwotCWRl YnVnKEYxMDEsImdldHB0eXNsYXZlKCkgZG9pbmcgVElPQ1NXSU5TWi4uLiIsIiIsdCk7Ci0gICAg ICAgIGlvY3RsKHQsIFRJT0NTV0lOU1osIChjaGFyICopJndzKTsKLSAgICB9Ci0jZW5kaWYgLyog VElPQ0dXSU5TWiAqLwotCi0gICAgLyogRm9yIGV4dGVybmFsIHByb3RvY29scywgcHV0IHRoZSBw dHkgaW4gbm8tZWNobyBtb2RlICovCi0gICAgaWYgKGZjID09IDEpIHsKLQlkZWJ1ZyhGMTAwLCJn ZXRwdHlzbGF2ZSgpIHNldHRpbmcgcmF3bW9kZSIsIiIsMCk7Ci0JLyogaWZsYWdzICovCi0JdGVy bWJ1Zi5jX2lmbGFnICY9IH4oUEFSTVJLfElTVFJJUHxCUktJTlR8SU5MQ1J8SUdOQ1J8SUNSTkwp OwotCXRlcm1idWYuY19pZmxhZyAmPSB+KElOUENLfElHTlBBUnxJTUFYQkVMfElYQU5ZfElYT058 SVhPRkYpOwotCXRlcm1idWYuY19pZmxhZyB8PSBJR05CUks7Ci0jaWZkZWYgSVVDTEMKLQl0ZXJt YnVmLmNfaWZsYWcgJj0gfklVQ0xDOwotI2VuZGlmIC8qIElVQ0xDICovCi0KLQkvKiBvZmxhZ3Mg Ki8KLQl0ZXJtYnVmLmNfb2ZsYWcgJj0gfk9QT1NUOwotI2lmZGVmIE9YVEFCUwotCXRlcm1idWYu Y19vZmxhZyAmPSB+T1hUQUJTOwotI2VuZGlmIC8qIE9YVEFCUyAqLwotI2lmZGVmIE9OT0NSCi0J dGVybWJ1Zi5jX29mbGFnICY9IH5PTk9DUjsKLSNlbmRpZiAvKiBPTk9DUiAqLwotI2lmZGVmIE9O TFJFVAotCXRlcm1idWYuY19vZmxhZyAmPSB+T05MUkVUOwotI2VuZGlmIC8qIE9OTFJFVCAqLwot I2lmZGVmIE9OTENSCi0JdGVybWJ1Zi5jX29mbGFnICY9IH5PTkxDUjsKLSNlbmRpZiAvKiBPTkxD UiAqLwotCi0JLyogbGZsYWdzICovCi0JdGVybWJ1Zi5jX2xmbGFnICY9IH5FQ0hPOwotI2lmZGVm IEVDSE9FCi0JdGVybWJ1Zi5jX2xmbGFnICY9IH5FQ0hPRTsKLSNlbmRpZiAvKiBFQ0hPRSAqLwot I2lmZGVmIEVDSE9OTAotCXRlcm1idWYuY19sZmxhZyAmPSB+RUNIT05MOwotI2VuZGlmIC8qIEVD SE9OTCAqLwotI2lmZGVmIEVDSE9QUlQKLQl0ZXJtYnVmLmNfbGZsYWcgJj0gfkVDSE9QUlQ7Ci0j ZW5kaWYgLyogRUNIT1BSVCAqLwotI2lmZGVmIEVDSE9LRQotCXRlcm1idWYuY19sZmxhZyAmPSB+ RUNIT0tFOwotI2VuZGlmIC8qIEVDSE9LRSAqLwotI2lmZGVmIEVDSE9DVEwKLQl0ZXJtYnVmLmNf bGZsYWcgJj0gfkVDSE9DVEw7Ci0jZW5kaWYgLyogRUNIT0NUTCAqLwotI2lmZGVmIEFMVFdFUkFT RQotCXRlcm1idWYuY19sZmxhZyAmPSB+QUxUV0VSQVNFOwotI2VuZGlmIC8qIEFMVFdFUkFTRSAq LwotI2lmZGVmIEVYVFBST0MKLQl0ZXJtYnVmLmNfbGZsYWcgJj0gfkVYVFBST0M7Ci0jZW5kaWYg LyogRVhUUFJPQyAqLwotCXRlcm1idWYuY19sZmxhZyAmPSB+KElDQU5PTnxJU0lHfElFWFRFTnxU T1NUT1B8RkxVU0hPfFBFTkRJTik7Ci0KLSNpZmRlZiBOT0tFUk5JTkZPCi0JdGVybWJ1Zi5jX2xm bGFnIHw9IE5PS0VSTklORk87Ci0jZW5kaWYJLyogTk9LRVJOSU5GTyAqLwotCS8qIHRlcm1idWYu Y19sZmxhZyB8PSBOT0ZMU0g7ICovCi0JdGVybWJ1Zi5jX2xmbGFnICY9IH5OT0ZMU0g7Ci0KLQkv KiBjZmxhZ3MgKi8KLQl0ZXJtYnVmLmNfY2ZsYWcgJj0gfihDU0laRXxQQVJFTkJ8UEFST0REKTsK LQl0ZXJtYnVmLmNfY2ZsYWcgfD0gQ1M4fENSRUFEOwotI2lmZGVmIFZNSU4KLQl0ZXJtYnVmLmNf Y2NbVk1JTl0gPSAxOwotI2VuZGlmCS8qIFZNSU4gKi8KLSAgICB9IGVsc2UgewkJCQkvKiBSZWd1 bGFyIGludGVyYWN0aXZlIHVzZSAqLwotCWRlYnVnKEYxMDAsImdldHB0eXNsYXZlKCkgc2V0dGlu ZyBjb29rZWQgbW9kZSIsIiIsMCk7Ci0KLQkvKiBTZXR0aW5ncyBmb3Igc2d0dHkgYmFzZWQgc3lz dGVtcyAqLwotCi0jaWZuZGVmIFVTRV9URVJNSU8KLQl0ZXJtYnVmLnNnLnNnX2ZsYWdzIHw9IENS TU9EfEFOWVB8RUNIT3xYVEFCUzsKLSNlbmRpZiAvKiBVU0VfVEVSTUlPICovCi0KLSNpZm5kZWYg T1hUQUJTCi0jZGVmaW5lIE9YVEFCUyAwCi0jZW5kaWYgLyogT1hUQUJTICovCi0KLQkvKiBTZXR0 aW5ncyBmb3IgVU5JQ09TIGFuZCBIUFVYICovCi0KLSNpZmRlZiBDUkFZCi0JdGVybWJ1Zi5jX29m bGFnID0gT1BPU1R8T05MQ1J8VEFCMzsKLQl0ZXJtYnVmLmNfaWZsYWcgPSBJR05QQVJ8SVNUUklQ fElDUk5MfElYT047Ci0JdGVybWJ1Zi5jX2xmbGFnID0gSVNJR3xJQ0FOT058RUNIT3xFQ0hPRXxF Q0hPSzsKLQl0ZXJtYnVmLmNfY2ZsYWcgPSBFWFRCfEhVUENMfENTODsKLSNlbHNlIC8qIENSQVkg Ki8KLSNpZmRlZiBIUFVYCi0JdGVybWJ1Zi5jX29mbGFnID0gT1BPU1R8T05MQ1J8VEFCMzsKLQl0 ZXJtYnVmLmNfaWZsYWcgPSBJR05QQVJ8SVNUUklQfElDUk5MfElYT047Ci0JdGVybWJ1Zi5jX2xm bGFnID0gSVNJR3xJQ0FOT058RUNIT3xFQ0hPRXxFQ0hPSzsKLQl0ZXJtYnVmLmNfY2ZsYWcgPSBF WFRCfEhVUENMfENTODsKLSNlbHNlIC8qIEhQVVggKi8KLSNpZmRlZiBVU0VfVEVSTUlPCi0JLyoK LQkgIFNldHRpbmdzIGZvciBhbGwgb3RoZXIgdGVybWlvcy90ZXJtaW8gYmFzZWQgc3lzdGVtcywg b3RoZXIgdGhhbiAKLQkgIDQuNEJTRC4gIEluIDQuNEJTRCB0aGUga2VybmVsIGRvZXMgdGhlIGlu aXRpYWwgdGVybWluYWwgc2V0dXAuCi0JKi8KLSNpZmRlZiBCU0Q0MgotI2lmbmRlZiBCU0Q0NAot CXRlcm1idWYuY19sZmxhZyB8PSBFQ0hPfElDQU5PTnxJRVhURU58SVNJRzsKLQl0ZXJtYnVmLmNf b2ZsYWcgfD0gT05MQ1J8T1hUQUJTfE9QT1NUOwotCXRlcm1idWYuY19pZmxhZyB8PSBJQ1JOTHxJ R05QQVI7Ci0JdGVybWJ1Zi5jX2NmbGFnIHw9IEhVUENMOwotCXRlcm1idWYuY19pZmxhZyAmPSB+ SVhPRkY7Ci0jZW5kaWYgLyogQlNENDQgKi8KLSNlbHNlIC8qIEJTRDQyICovCi0JdGVybWJ1Zi5j X2xmbGFnIHw9IEVDSE98SUNBTk9OfElFWFRFTnxJU0lHOwotCXRlcm1idWYuY19vZmxhZyB8PSBP TkxDUnxPWFRBQlN8T1BPU1Q7Ci0JdGVybWJ1Zi5jX2lmbGFnIHw9IElDUk5MfElHTlBBUjsKLQl0 ZXJtYnVmLmNfY2ZsYWcgfD0gSFVQQ0w7Ci0JdGVybWJ1Zi5jX2lmbGFnICY9IH5JWE9GRjsKLSNl bmRpZiAvKiBCU0Q0MiAqLwotI2VuZGlmIC8qIFVTRV9URVJNSU8gKi8KLSNlbmRpZiAvKiBIUFVY ICovCi0jZW5kaWYgLyogQ1JBWSAqLwotICAgIH0KLQotICAgIC8qIFNldCB0aGUgdHR5IG1vZGVz LCBhbmQgbWFrZSB0aGlzIG91ciBjb250cm9sbGluZyB0dHkuICovCi0jaWZkZWYgQ09NTUVOVAot ICAgIC8qIEJ1dCB0aGlzIGlzIHRoZSBtYXN0ZXIgLSB3ZSB3YW50IHRoZSBzbGF2ZSAqLwotICAg IHNldF90ZXJtYnVmKHR0eWZkKTsKLSNlbHNlCi0gICAgc2V0X3Rlcm1idWYodCk7Ci0jZW5kaWYJ LyogQ09NTUVOVCAqLwotCi0gICAgaWYgKHQgIT0gMCkKLSAgICAgIGR1cDIodCwgMCk7Ci0gICAg aWYgKHQgIT0gMSkKLSAgICAgIGR1cDIodCwgMSk7Ci0gICAgaWYgKHQgIT0gMikgewotCWlmIChm YyA9PSAwKSB7Ci0JICAgIGR1cDIodCwgMik7Ci0JfSBlbHNlIGlmIChmYyA9PSAxKSB7Ci0JICAg IC8qIEZvciBleHRlcm5hbCBwcm90b2NvbHMsIHNlbmQgc3RkZXJyIHRvIC9kZXYvbnVsbCAqLwot I2lmZGVmIENPTU1FTlQKLQkgICAgaW50IHh4OwotI2lmbmRlZiBDT01NRU5UCi0JICAgIGNoYXIg KiBzID0gIi9kZXYvbnVsbCI7Ci0JICAgIGVycm5vID0gMDsKLQkgICAgeHggPSBvcGVuKHMsIE9f V1JPTkxZKTsKLSNlbHNlCi0JICAgIGNoYXIgKiBzID0gInB0eS5sb2ciOwotCSAgICBlcnJubyA9 IDA7Ci0JICAgIHh4ID0gb3BlbihzLCBPX0NSRUFULCAwNjQ0KTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0JICAgIGRlYnVnKEYxMTEsImdldHB0eXNsYXZlIHJlZGlyZWN0IHN0ZGVyciIscyxlcnJu byk7Ci0JICAgIGR1cDIoeHgsMik7Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCX0KLSAgICB9Ci0g ICAgaWYgKHQgPiAyKQotICAgICAgY2xvc2UodCk7Ci0KLSAgICBpZiAodHR5ZmQgPiAyKSB7Ci0J Y2xvc2UodHR5ZmQpOwotICAgICAgICB0dHlmZCA9IC0xOwotCSpmZCA9IHR0eWZkOwotICAgIH0K LSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZmRlZiBIQVZFX1BUWVRSQVAKLS8qCi0gIFRvIGJlIGNh bGxlZCB0byBkZXRlcm1pbmUgaWYgYSB0cmFwIGlzIHBlbmRpbmcgb24gYSBwdHkKLSAgaWYgYW5k IG9ubHkgaWYgc2VsZWN0KCkgY2Fubm90IGJlIHVzZWQuCi0qLwotaW50Ci1wdHlfdHJhcF9wZW5k aW5nKGZkKSBpbnQgZmQ7IHsKLSAgICBpbnQgcGVuZGluZzsKLSAgICBpbnQgcmM7Ci0KLSAgICBy YyA9IGlvY3RsKGZkLCBUSU9DVFJBUFNUQVRVUywgKGNoYXIgKikmcGVuZGluZywgc2l6ZW9mKHBl bmRpbmcpKTsKLSAgICBpZiAocmMgPT0gMCkgewotICAgICAgICBkZWJ1ZyhGMTAxLCJwdHlfdHJh cF9wZW5kaW5nKCkiLCIiLHBlbmRpbmcpOwotICAgICAgICByZXR1cm4ocGVuZGluZyk7Ci0gICAg fSBlbHNlIHsKLSAgICAgICAgZGVidWcoRjExMSwicHR5X3RyYXBfcGVuZGluZygpIiwiaW9jdGwo KSBmYWlsZWQiLHJjKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci19Ci0KLS8qCi0gIFRv IGJlIGNhbGxlZCBhZnRlciBzZWxlY3QoKSBoYXMgcmV0dXJuZWQgaW5kaWNhdGluZyB0aGF0IGFu IGV4Y2VwdGlvbiBpcwotICB3YWl0aW5nIG9uIGEgcHR5LiAgSXQgc2hvdWxkIGJlIGNhbGxlZCB3 aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIHB0eS4KLSAgUmV0dXJucyAtMSBvbiBlcnJv cjsgMCBpZiBwdHkgaXMgc3RpbGwgb3BlbjsgMSBpZiBwdHkgaGFzIGNsb3NlZC4KLSovCi1pbnQK LXB0eV90cmFwX2hhbmRsZXIoZmQpIGludCBmZDsgewotICAgIHN0cnVjdCByZXF1ZXN0X2luZm8g cmk7Ci0KLSAgICBtZW1zZXQoJnJpLDAsc2l6ZW9mKHJpKSk7Ci0gICAgaWYgKGlvY3RsKGZkLFRJ T0NSRVFDSEVDSywoY2hhciAqKSZyaSwgc2l6ZW9mKHJpKSkgIT0gMCkgewotICAgICAgICBkZWJ1 ZyhGMTExLCJwdHlfdHJhcF9oYW5kbGVyKCkiLCJpb2N0bChUSU9DUkVRQ0hFQ0spIGZhaWxlZCIs ZXJybm8pOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBzd2l0Y2ggKHJpLnJlcXVl c3QpIHsKLSAgICAgIGNhc2UgVElPQ09QRU46Ci0gICAgICAgIGRlYnVnKEYxMTAsInB0eV90cmFw X2hhbmRsZXIoKSIsImFuIG9wZW4oKSBjYWxsIiwwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj YXNlIFRJT0NDTE9TRToKLSAgICAgICAgZGVidWcoRjExMCwicHR5X3RyYXBfaGFuZGxlcigpIiwi YSBjbG9zZSgpIGNhbGwiLDApOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg ICAgIGRlYnVnKEYxMTAsInB0eV90cmFwX2hhbmRsZXIoKSIsImFuIGlvY3RsKCkgY2FsbCIsMCk7 Ci0gICAgICAgIHJpLmVycm5vX2Vycm9yID0gRUlOVkFMOwotICAgIH0KLSAgICBpZiAoaW9jdGwo ZmQsIFRJT0NSRVFTRVQsIChjaGFyICopJnJpLHNpemVvZihyaSkpICE9IDApIHsKLSAgICAgICAg ZGVidWcoRjExMSwicHR5X3RyYXBfaGFuZGxlcigpIiwiaW9jdGwoVElPQ1JFUVNFVCkgZmFpbGVk IixlcnJubyk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGlmIChyaS5yZXF1ZXN0 ID09IFRJT0NDTE9TRSkKLSAgICAgIHJldHVybigxKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4o MCk7Ci19Ci0jZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCi0KLVZPSUQKLWV4ZWNfY21kKHMpIGNo YXIgKiBzOyB7Ci0gICAgc3RydWN0IHN0cmluZ2FycmF5ICogcTsKLSAgICBjaGFyICoqIGFyZ3Mg PSBOVUxMOwotCi0gICAgaWYgKCFzKSByZXR1cm47Ci0gICAgaWYgKCEqcykgcmV0dXJuOwotCi0g ICAgcSA9IGNrc3BsaXQoMSwwLHMsTlVMTCwiXFwlW10mJCstLz0qXl9AIXt9Lzw+fC4jfidgOjs/ Iiw3LDAsMCk7Ci0gICAgaWYgKCFxKSByZXR1cm47Ci0KLSAgICBhcmdzID0gcS0+YV9oZWFkICsg MTsKLQotI2lmZGVmIERFQlVHICAgIAotICAgIHsKLQlpbnQgaSwgbjsKLQluID0gcS0+YV9zaXpl OwotCWZvciAoaSA9IDA7IGkgPD0gbjsgaSsrKSB7Ci0JICAgIGlmICghYXJnc1tpXSkgewotCQlk ZWJ1ZyhGMTExLCJleGVjX2NtZCBhcmciLCJOVUxMIixpKTsKLQkJYnJlYWs7Ci0JICAgIH0gZWxz ZSB7Ci0JCWRlYnVnKEYxMTEsImV4ZWNfY21kIGFyZyIsYXJnc1tpXSxpKTsKLQkJaWYgKGkgPT0g biAmJiBhcmdzW2ldKSB7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJleGVjX2NtZCBTVUJTVElUVVRJTkcg TlVMTCIsIiIsaSk7Ci0JCSAgICBpZiAoc3RybGVuKGFyZ3NbaV0pID09IDApCi0JCSAgICAgIG1h a2VzdHIoJihhcmdzW2ldKSxOVUxMKTsKLQkJfQotCi0JICAgIH0KLQl9CSAgICAKLSAgICB9Ci0j ZW5kaWYJLyogREVCVUcgKi8KLQotICAgIGV4ZWN2cChhcmdzWzBdLGFyZ3MpOwotfQotCi0vKiBH ZXQgYSBwdHksIHNjYW4gaW5wdXQgbGluZXMuICovCi0vKiBmYyA9IDAgZm9yIGludGVyYWN0aXZl IGFjY2VzczsgZmMgPSAxIGZvciBydW5uaW5nIGV4dGVybmFsIHByb3RvY29scyAqLwotCi1zdGF0 aWMgaW50IHB0eV9mYyA9IC0xOwkJCS8qIEdsb2JhbCBjb3B5IG9mIGZjICovCi0KLWludAotZG9f cHR5KGZkLCBjbWQsIGZjKSBpbnQgKiBmZDsgY2hhciAqIGNtZDsgaW50IGZjOyB7Ci0gICAgbG9u ZyByZXR2YWw7Ci0gICAgaW50IHN5bmNwaXBlWzJdOwotICAgIGludCBpLCB0dHlmZDsKLSNpZmRl ZiBIQVZFX1BUWVRSQVAKLSAgICBpbnQgeDsKLSNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KLQot ICAgIGRlYnVnKEYxMDEsIkNLVVBUWS5DIGRvX3B0eSBmYyIsIiIsZmMpOwotCi0gICAgdHR5ZmQg PSAqZmQ7Ci0KLSAgICBwdHlfbWFzdGVyX2ZkID0gLTI7Ci0gICAgcHR5X3NsYXZlX2ZkID0gLTI7 Ci0gICAgcHR5X2ZvcmtfcGlkID0gLTI7Ci0KLSAgICBtc2cgPSAwOwkJCQkvKiBNZXNzYWdlIGNv dW50ZXIgKi8KLSAgICBwdHlfaW5pdCgpOwkJCQkvKiBGaW5kIGFuIGF2YWlsYWJsZSBwdHkgdG8g dXNlLiAqLwotICAgIGVycm5vID0gMDsKLQotICAgIGlmICgocmV0dmFsID0gcHR5X2dldHB0eSgm dHR5ZmQsIFhsaW5lLCAyMCkpICE9IDApIHsKLQlpZiAobXNnKysgPT0gMCkKLQkgIHBlcnJvcihY bGluZSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImRvX3B0eSgpIiwicHR5X2dldHB0eSgpIGZhaWxz IixyZXR2YWwpOwotCSpmZCA9IHR0eWZkOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAg ICAqZmQgPSB0dHlmZDsKLSAgICBkZWJ1ZyhGMTExLCJkb19wdHkoKSBYbGluZSIsWGxpbmUsdHR5 ZmQpOwotCi0jaWZkZWYgU0lHVFRPVQotLyoKLSAgSWdub3JpbmcgU0lHVFRPVSBrZWVwcyB0aGUg a2VybmVsIGZyb20gYmxvY2tpbmcgdXMuICB3ZSB0d2VhayB0aGUgdHR5IHdpdGgKLSAgYW4gaW9j dGwoKSAoaW4gdHRpb2N0KCkgaW4gL3N5cy90dHkuYyBpbiBhIEJTRCBrZXJuZWwpCi0qLwotICAg ICBzaWduYWwoU0lHVFRPVSwgU0lHX0lHTik7Ci0jZW5kaWYgLyogU0lHVFRPVSAqLwotCi0vKiBT dGFydCB1cCB0aGUgY29tbWFuZCBvbiB0aGUgc2xhdmUgc2lkZSBvZiB0aGUgdGVybWluYWwgKi8K LQotICAgIGlmIChwaXBlKHN5bmNwaXBlKSA8IDApIHsKLSAgICAgICAgZGVidWcoRjExMCwiZG9f cHR5KCkiLCJwaXBlKCkgZmFpbHMiLDApOwotCXBlcnJvcigicGlwZSgpIGZhaWxlZCIpOwotCW1z ZysrOwotICAgICAgICBkZWJ1ZyhGMTExLCJkb19wdHkoKSIsInBpcGUgZmFpbHMiLGVycm5vKTsK LSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgaWYgKChpID0gZm9yaygpKSA8IDApIHsK LSAgICAgICAgLyogWFhYIC0gbmVlZCB0byBjbGVhbiB1cCB0aGUgYWxsb2NhdGVkIHB0eSAqLwot ICAgICAgICBwZXJyb3IoImZvcmsoKSBmYWlsZWQiKTsKLQltc2crKzsKLSAgICAgICAgZGVidWco RjExMSwiZG9fcHR5KCkiLCJmb3JrIGZhaWxzIixlcnJubyk7Ci0gICAgICAgIHJldHVybigtMSk7 Ci0gICAgfQotICAgIGlmIChpKSB7ICAvKiBXYWl0IGZvciBjaGlsZCBiZWZvcmUgd3JpdGluZyB0 byBwYXJlbnQgc2lkZSBvZiBwdHkuICovCi0gICAgICAgIGNoYXIgYzsKLSNpZmRlZiBIQVZFX1BU WVRSQVAKLSAgICAgICAgaW50IG9uID0gMTsKLSNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KLQlj bG9zZShzeW5jcGlwZVsxXSk7Ci0JZXJybm8gPSAwOwotICAgICAgICBpZiAocmVhZChzeW5jcGlw ZVswXSwgJmMsIDEpID09IDApIHsgLyogU2xhdmUgc2lkZSBkaWVkICovCi0JICAgIHBlcnJvcigi UGlwZSByZWFkKCkgZmFpbGVkIik7Ci0JICAgIG1zZysrOwotICAgICAgICAgICAgZGVidWcoRjEx MCwiZG9fcHR5KCkiLCJTbGF2ZSBmYWlscyB0byBpbml0aWFsaXplIiwwKTsKLSAgICAgICAgICAg IGNsb3NlKHN5bmNwaXBlWzBdKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0K LSAgICAgICAgcHR5X2ZvcmtfcGlkID0gaTsJCS8qIFNvIHdlIGNhbiBjbGVhbiBpdCB1cCBsYXRl ciAqLwotCXB0eV9mb3JrX2FjdGl2ZSA9IDE7Ci0JZGVidWcoRjEwMSwiZG9fcHR5IHB0eV9mb3Jr X3BpZCIsIiIscHR5X2ZvcmtfcGlkKTsKLSNpZmRlZiBIQVZFX1BUWVRSQVAKLSAgICAgICAgLyog SFBVWCBkb2VzIG5vdCBhbGxvdyB0aGUgbWFzdGVyIHRvIHJlYWQgZW5kIG9mIGZpbGUuICAqLwot ICAgICAgICAvKiBUaGVyZWZvcmUsIHdlIG11c3QgZGV0ZXJtaW5lIHRoYXQgdGhlIHNsYXZlIGhh cyBiZWVuICovCi0gICAgICAgIC8qIGNsb3NlZCBieSB0cmFwcGluZyB0aGUgY2FsbCB0byBjbG9z ZSgpLiAgICAgICAgICAgICAgKi8KLQllcnJubyA9IDA7Ci0JeCA9IGlvY3RsKHR0eWZkLCBUSU9D VFJBUCwgKGNoYXIgKikmb24pOwotCWRlYnVnKEYxMTEsImRvX3B0eSBpb2N0bChUSU9DVFJBUCki LGNraXRvYSh4KSxlcnJubyk7Ci0jZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCi0gICAgICAgIGRl YnVnKEYxMTEsImRvX3B0eSgpIiwic3luY2hyb25pemVkIC0gcHR5X2ZvcmtfcGlkIixwdHlfZm9y a19waWQpOwotICAgICAgICBjbG9zZShzeW5jcGlwZVswXSk7Ci0gICAgfSBlbHNlIHsKLQlpbnQg eDsKLQlkZWJ1ZyhGMTAxLCJkb19wdHkgZ2V0cHR5c2xhdmUgdHR5ZmQgQSIsIiIsdHR5ZmQpOwot ICAgICAgICBkZWJ1ZyhGMTEwLCJkb19wdHkoKSIsIlNsYXZlIHN0YXJ0cyIsMCk7Ci0JeCA9IGdl dHB0eXNsYXZlKCZ0dHlmZCxmYyk7Ci0JZGVidWcoRjEwMSwiZG9fcHR5IGdldHB0eXNsYXZlIiwi Iix4KTsKLSAgICAgICAgaWYgKHggPT0gMCkgewotCSAgICBkZWJ1ZyhGMTAxLCJkb19wdHkgZ2V0 cHR5c2xhdmUgdHR5ZmQgQiIsIiIsdHR5ZmQpOwotI2lmZGVmIFdBTlRfVVRNUAotICAgICAgICAg ICAgcHR5X3VwZGF0ZV91dG1wKFBUWV9VU0VSX1BST0NFU1MsCi0JCQkgICAgZ2V0cGlkKCksCi0J CQkgICAgIktFUk1JVCIsCi0JCQkgICAgWGxpbmUsCi0JCQkgICAgY21kLAotCQkJICAgIFBUWV9U VFlTTE9UX1VTQUJMRQotCQkJICAgICk7Ci0jZW5kaWYgLyogV0FOVF9VVE1QICovCi0gICAgICAg ICAgICAvKiBOb3RpZnkgb3VyIHBhcmVudCB3ZSdyZSByZWFkeSB0byBjb250aW51ZS4qLwotICAg ICAgICAgICAgZGVidWcoRjExMCwiZG9fcHR5KCkiLCJzbGF2ZSBzeW5jaHJvbml6aW5nIiwwKTsK LSAgICAgICAgICAgIHdyaXRlKHN5bmNwaXBlWzFdLCJ5IiwxKTsKLSAgICAgICAgICAgIGNsb3Nl KHN5bmNwaXBlWzBdKTsKLSAgICAgICAgICAgIGNsb3NlKHN5bmNwaXBlWzFdKTsKLQotCSAgICBk ZWJ1ZyhGMTEwLCJkb19wdHkgY21kIixjbWQsIiIpOwotICAgICAgICAgICAgZXhlY19jbWQoY21k KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvX3B0eSgpIiwiZXhlY19jbWQoKSByZXR1cm5z IC0gd2h5PyIsZXJybm8pOwotICAgICAgICB9Ci0JKmZkID0gdHR5ZmQ7Ci0gICAgICAgIGRlYnVn KEYxMTAsImRvX3B0eSgpIiwiZ2V0cHR5c2xhdmUoKSBmYWlscyAtIGV4aXRpbmciLDApOwotICAg ICAgICBleGl0KDEpOwotICAgIH0KLSAgICAqZmQgPSB0dHlmZDsKLSAgICBwdHlfZmMgPSBmYzsK LSAgICByZXR1cm4oZ2V0cGlkKCkpOwotfSAvKiBlbmQgb2YgZG9fcHR5KCkgKi8KLQotCi1WT0lE Ci1lbmRfcHR5KCkgewotICAgIG1zZyA9IDA7CQkJCS8qIE1lc3NhZ2UgY291bnRlciAqLwotICAg IGRlYnVnKEYxMDEsImVuZF9wdHkgcHR5X2ZvcmtfcGlkIiwiIixwdHlfZm9ya19waWQpOwotICAg IGlmIChYbGluZVswXSAmJiBwdHlfZm9ya19waWQgPj0gMCkgewotICAgICAgICBwdHlfY2xlYW51 cChYbGluZSxwdHlfZm9ya19waWQsMSk7Ci0gICAgICAgIFhsaW5lWzBdID0gJ1wwJzsKLSAgICAg ICAgcHR5X2ZvcmtfcGlkID0gLTE7Ci0JcHR5X2ZvcmtfYWN0aXZlID0gMDsKLQlkZWJ1ZyhGMTAx LCJlbmRfcHR5IHB0eV9mb3JrX2FjdGl2ZSIsIiIscHR5X2ZvcmtfYWN0aXZlKTsKLSAgICB9Ci0g ICAgcHR5X2ZjID0gLTE7Ci19Ci0jZW5kaWYgLyogTkVUUFRZICovCgpkaWZmIC0tZ2l0IGEvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VwdHkuaCBiL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1cHR5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDM3NGM1MDguLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja3VwdHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi0v KiBDIEsgVSBQIFQgWSAuIEggIC0tICBJbmNsdWRlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIGNrdXB0 eS5jICAqLwotCi0vKgotICBDb3B5cmlnaHQgMTk5NSBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0 aXR1dGUgb2YgVGVjaG5vbG9neS4KLQotICBNb2RpZmllZCBmb3IgdXNlIGluIEMtS2VybWl0IGJ5 OgotCi0gIEplZmZyZXkgRSBBbHRtYW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+Ci0g ICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5Ci0gIE5vdmVtYmVyIDE5OTkK LSovCi0jaWZuZGVmIF9fUFRZX0lOVF9IX18KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotLyog I2RlZmluZSBXQU5UX1VUTVAgKi8KLS8qIFdlIGRvbid0IHdhbnQgYWxsIHRoZSB1dG1wL3d0bXAg c3R1ZmYgKi8KLQotI2lmZGVmIFdBTlRfVVRNUAotI2lmZGVmIEhBVkVfVVRNUF9ICi0jaW5jbHVk ZSA8dXRtcC5oPgotI2VuZGlmIC8qIEhBVkVfVVRNUF9IICovCi0jaWZkZWYgSEFWRV9VVE1QWF9I Ci0jaW5jbHVkZSA8dXRtcHguaD4KLSNlbmRpZiAvKiBIQVZFX1VUTVBYX0ggKi8KLSNlbmRpZiAv KiBXQU5UX1VUTVAgKi8KLQotI2lmZGVmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQu aD4KLSNlbmRpZiAvKiBIQVZFX1VOSVNURF9IICovCi0jaWZkZWYgX19TQ09fXwotI2luY2x1ZGUg PHN5cy91bmlzdGQuaD4KLSNlbmRpZiAvKiBfX1NDT19fICovCi0jaWZkZWYgSEFWRV9TVERMSUJf SAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmIC8qIEhBVkVfU1RETElCX0ggKi8KLQotI2lu Y2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2lmbmRlZiBTVU5PUzQx Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jZW5kaWYJLyogU1VOT1M0MSAqLwotI2luY2x1ZGUg PHN5cy9maWxlLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgot I2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGVy cm5vLmg+Ci0jaW5jbHVkZSA8cHdkLmg+Ci0KLSNpZmRlZiBIQVZFX1NZU19MQUJFTF9ICi0vKiBv bmx5IFN1bk9TIDQ/ICovCi0jaW5jbHVkZSA8c3lzL2xhYmVsLmg+Ci0jaW5jbHVkZSA8c3lzL2F1 ZGl0Lmg+Ci0jaW5jbHVkZSA8cHdkYWRqLmg+Ci0jZW5kaWYgLyogSEFWRV9TWVNfTEFCRUxfSCAq LwotCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLSNpZmRlZiBIUFVYCi0jaW5jbHVkZSA8c3lzL3B0 eWlvLmg+Ci0jZW5kaWYgLyogSFBVWCAqLwotI2lmZGVmIHN5c3ZpbXAKLSNpbmNsdWRlIDxjb21w YXQuaD4KLSNlbmRpZiAvKiBzeXN2aW1wICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBJIGRvbid0 IHRoaW5rIHdlIGFjdHVhbGx5IHVzZSB0aGlzIGZvciBhbnl0aGluZyAqLwotLyogYW5kIGl0IGtp bGxzIFNsYWNrd2FyZSBidWlsZHMsIHdoZXJlIHRoZXJlIGlzIG5vIHNlbGVjdC5oLiAqLwotI2lm bmRlZiBOT19TWVNfU0VMRUNUX0gKLSNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAotI2luY2x1ZGUg PHN5cy9zZWxlY3QuaD4KLSNlbmRpZiAvKiBIQVZFX1NZU19TRUxFQ1RfSCAqLwotI2VuZGlmIC8q IE5PX1NZU19TRUxFQ1RfSCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIEhBVkVf U1RSRUFNUwotI2luY2x1ZGUgPHN5cy9zdHJlYW0uaD4KLSNpbmNsdWRlIDxzeXMvc3Ryb3B0cy5o PgotI2VuZGlmIC8qIEhBVkVfU1RSRUFNUyAqLwotCi0jaWZkZWYgUE9TSVhfVEVSTUlPUwotI2lm bmRlZiB1bHRyaXgKLSNpbmNsdWRlIDx0ZXJtaW9zLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHNndHR5 Lmg+Ci0jZW5kaWYgLyogdWx0cml4ICovCi0jZWxzZSAvKiBQT1NJWF9URVJNSU9TICovCi0jaW5j bHVkZSA8c2d0dHkuaD4KLSNlbmRpZiAvKiBQT1NJWF9URVJNSU9TICovCi0KLSNpbmNsdWRlIDxu ZXRkYi5oPgotLyogI2luY2x1ZGUgPHN5c2xvZy5oPiAqLwotI2lmbmRlZiB1bHRyaXgKLSNpbmNs dWRlIDxzdHJpbmcuaD4KLSNlbmRpZiAvKiB1bHRyaXggKi8KLS8qICNpbmNsdWRlIDxzeXMvcGFy YW0uaD4gKi8JCS8qIChub3cgZG9uZSBpbiBja2NkZWIuaCkgKi8KLQotI2lmZGVmIEhBVkVfU1RS RUFNUwotLyoga3Jsb2dpbiBkb2Vzbid0IHRlc3Qgc3lzL3R0eS4uLiAqLwotI2lmZGVmIEhBVkVf U1lTX1RUWV9ICi0jaW5jbHVkZSA8c3lzL3R0eS5oPgotI2VuZGlmIC8qIEhBVkVfU1lTX1RUWV9I ICovCi0KLSNpZmRlZiBIQVZFX1NZU19QVFlWQVJfSAotLyogU29sYXJpcyBhY3R1YWxseSB1c2Vz IHBhY2tldCBtb2RlLCBzbyB0aGUgcmVhbCBtYWNyb3MgYXJlIG5lZWRlZCB0b28gKi8KLSNpbmNs dWRlIDxzeXMvcHR5dmFyLmg+Ci0jZW5kaWYgLyogSEFWRV9TWVNfUFRZVkFSX0ggKi8KLSNlbmRp ZiAvKiBIQVZFX1NUUkVBTVMgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIFRoaXMgYmxvY2sgbW92 ZWQgdG8gY2tjZGViLmggKi8KLSNpZm5kZWYgTk9fT1BFTlBUWQotLyogRm9yIE5ldEJTRCwgc2Vl IG1ha2VmaWxlICovCi0jaWZuZGVmIEhBVkVfT1BFTlBUWQotI2lmZGVmIF9fRnJlZUJTRF9fCi0j ZGVmaW5lIEhBVkVfT1BFTlBUWQotI2Vsc2UKLSNpZmRlZiBNQUNPU1gxMAotI2RlZmluZSBIQVZF X09QRU5QVFkKLSNlbmRpZgkvKiBNQUNPU1gxMCAqLwotI2VuZGlmCS8qIF9fRnJlZUJTRF9fICov Ci0jZW5kaWYJLyogSEFWRV9PUEVOUFRZICovCi0jZW5kaWYJLyogTk9fT1BFTlBUWSAqLwotI2Vu ZGlmCS8qIENPTU1FTlQgKi8KLQotI2lmZGVmIEhBVkVfVkhBTkdVUAotI2lmbmRlZiBPUEVOX0NU VFlfT05MWV9PTkNFCi0vKgotICBCcmVha3MgdW5kZXIgVWx0cml4IGFuZCBvdGhlcnMgd2hlcmUg eW91IGNhbm5vdCBnZXQgY29udHJvbGxpbmcKLSAgdGVybWluYWwgdHdpY2UuCi0qLwotI2RlZmlu ZSBWSEFOR19maXJzdAotI2RlZmluZSBWSEFOR19MQVNUCi0jZW5kaWYgLyogT1BFTl9DVFRZX09O TFlfT05DRSAqLwotI2VuZGlmIC8qIEhBVkVfVkhBTkdVUCAqLwotCi0vKiBJbnRlcm5hbCBmdW5j dGlvbnMgKi8KLV9QUk9UT1RZUChsb25nIHB0eWludF92b2lkX2Fzc29jaWF0aW9uLCh2b2lkKSk7 Ci1fUFJPVE9UWVAobG9uZyBwdHlpbnRfb3Blbl9jdHR5ICwoY2hhciAqLCBpbnQgKikpOwotX1BS T1RPVFlQKFZPSUQgcHR5aW50X3ZoYW5ndXAsICh2b2lkKSk7Ci0KLSNpZmRlZiBXQU5UX1VUTVAK LV9QUk9UT1RZUChsb25nIHB0eWludF91cGRhdGVfd3RtcCwgKHN0cnVjdCB1dG1wICosIGNoYXIg KiwgY2hhciAqKSk7Ci0jZW5kaWYgLyogV0FOVF9VVE1QICovCi0KLSNkZWZpbmUgX19QVFlfSU5U X0hfXwotI2VuZGlmIC8qIF9fUFRZX0lOVF9IX18gKi8KLQotI2lmbmRlZiBfX0xJQlBUWV9IX18K LQotI2lmZGVmIFdBTlRfVVRNUAotLyogQ29uc3RhbnRzIGZvciBwdHlfdXBkYXRlX3V0bXAgKi8K LSNkZWZpbmUgUFRZX0xPR0lOX1BST0NFU1MgMAotI2RlZmluZSBQVFlfVVNFUl9QUk9DRVNTIDEK LSNkZWZpbmUgUFRZX0RFQURfUFJPQ0VTUyAyCi0jZGVmaW5lIFBUWV9UVFlTTE9UX1VTQUJMRSAo MHgxKQkvKiBmbGFncyB0byB1cGRhdGVfdXRtcCovCi0jZGVmaW5lIFBUWV9VVE1QX1VTRVJOQU1F X1ZBTElEICgweDIpCi0jZW5kaWYgLyogV0FOVF9VVE1QICovCi0KLV9QUk9UT1RZUChsb25nIHB0 eV9pbml0LCh2b2lkKSk7Ci1fUFJPVE9UWVAobG9uZyBwdHlfZ2V0cHR5LCAoIGludCAqLCBjaGFy ICosIGludCkpOwotX1BST1RPVFlQKGxvbmcgcHR5X29wZW5fc2xhdmUsIChjaGFyICosIGludCAq LCBpbnQpKTsKLV9QUk9UT1RZUChsb25nIHB0eV9vcGVuX2N0dHksIChjaGFyICosIGludCAqLCBp bnQpKTsKLV9QUk9UT1RZUChsb25nIHB0eV9pbml0aWFsaXplX3NsYXZlLCAoaW50KSk7Ci0jaWZk ZWYgV0FOVF9VVE1QCi1fUFJPVE9UWVAobG9uZyBwdHlfdXBkYXRlX3V0bXAsIChpbnQsIGludCwg Y2hhciAqLCBjaGFyICosIGNoYXIgKiwgaW50KSk7Ci1fUFJPVE9UWVAobG9uZyBwdHlfbG9nd3Rt cCwgKGNoYXIgKiwgY2hhciAqLCBjaGFyICopKTsKLSNlbmRpZiAvKiBXQU5UX1VUTVAgKi8KLV9Q Uk9UT1RZUChsb25nIHB0eV9jbGVhbnVwLCAoY2hhciAqLCBpbnQsIGludCkpOwotCi0jZGVmaW5l IFBUWV9HRVRQVFlfU1RSRUFNUyAgICAgICAgICAgICAgICg0NDgwNjkxMkwpCi0jZGVmaW5lIFBU WV9HRVRQVFlfRlNUQVQgICAgICAgICAgICAgICAgICg0NDgwNjkxM0wpCi0jZGVmaW5lIFBUWV9H RVRQVFlfTk9QVFkgICAgICAgICAgICAgICAgICg0NDgwNjkxNEwpCi0jZGVmaW5lIFBUWV9HRVRQ VFlfU0xBVkVfVE9PTE9ORyAgICAgICAgICg0NDgwNjkxNUwpCi0jZGVmaW5lIFBUWV9PUEVOX1NM QVZFX09QRU5GQUlMICAgICAgICAgICg0NDgwNjkxNkwpCi0jZGVmaW5lIFBUWV9PUEVOX1NMQVZF X0NITU9ERkFJTCAgICAgICAgICg0NDgwNjkxN0wpCi0jZGVmaW5lIFBUWV9PUEVOX1NMQVZFX05P Q1RUWSAgICAgICAgICAgICg0NDgwNjkxOEwpCi0jZGVmaW5lIFBUWV9PUEVOX1NMQVZFX0NIT1dO RkFJTCAgICAgICAgICg0NDgwNjkxOUwpCi0jZGVmaW5lIFBUWV9PUEVOX1NMQVZFX0xJTkVfUFVT SEZBSUwgICAgICg0NDgwNjkyMEwpCi0jZGVmaW5lIFBUWV9PUEVOX1NMQVZFX1BVU0hfRkFJTCAg ICAgICAgICg0NDgwNjkyMUwpCi0jZGVmaW5lIFBUWV9PUEVOX1NMQVZFX1JFVk9LRUZBSUwgICAg ICAgICg0NDgwNjkyMkwpCi0jaWZkZWYgV0FOVF9VVE1QCi0jZGVmaW5lIFBUWV9VUERBVEVfVVRN UF9QUk9DVFlQRV9JTlZBTElEICg0NDgwNjkyM0wpCi0jZW5kaWYgLyogV0FOVF9VVE1QICovCi0j ZGVmaW5lIFBUWV9PUEVOX1NMQVZFX1RPT1NIT1JUICAgICAgICAgICg0NDgwNjkyNEwpCi0jZGVm aW5lIEVSUk9SX1RBQkxFX0JBU0VfcHR5ICAgICAgICAgICAgICg0NDgwNjkxMkwpCi0KLWV4dGVy biBzdHJ1Y3QgZXJyb3JfdGFibGUgZXRfcHR5X2Vycm9yX3RhYmxlOwotCi0jZGVmaW5lIF9fTElC UFRZX0hfXwotI2VuZGlmIC8qIF9fTElCUFRZX0hfXyAqLwotCgpkaWZmIC0tZ2l0IGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VzY3IuYyBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1c2NyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDdhMmQ5YjcuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja3VzY3IuYworKysgL2Rldi9udWxsCkBAIC0xLDY4OCArMCwwIEBACi0jaW5j bHVkZSAiY2tjc3ltLmgiCi0KLSNpZm5kZWYgTk9JQ1AKLSNpZm5kZWYgTk9TQ1JJUFQKLWNoYXIg KmxvZ2ludiA9ICJTY3JpcHQgQ29tbWFuZCwgOS4wLjAzMiwgMTYgT2N0IDIwMDkiOwotCi0vKiAg QyBLIFUgUyBDIFIgIC0tICBleHBlY3Qtc2VuZCBzY3JpcHQgaW1wbGVtZW50YXRpb24gICovCi0K LS8qCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJp YSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVz ZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29w eXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVy bWlzc2lvbnMuCi0KLSAgT3JpZ2luYWwgKHZlcnNpb24gMSwgMTk4NSkgYXV0aG9yOiBIZXJtIEZp c2NoZXIsIEVuY2lubywgQ0EuCi0gIENvbnRyaWJ1dGVkIHRvIENvbHVtYmlhIFVuaXZlcnNpdHkg aW4gMTk4NSBmb3IgaW5jbHVzaW9uIGluIEMtS2VybWl0IDQuMC4KLSAgTWFpbnRhaW5lZCBzaW5j ZSAxOTg1IGJ5IEZyYW5rIGRhIENydXosIENvbHVtYmlhIFVuaXZlcnNpdHksCi0gIGZkY0Bjb2x1 bWJpYS5lZHUuCi0KLSAgVGhlIG1vZHVsZSB0YWtlcyBhIFVVQ1Atc3R5bGUgc2NyaXB0IG9mIHRo ZSAiZXhwZWN0IHNlbmQgW2V4cGVjdCBzZW5kXSAuLi4iCi0gIGZvcm1hdC4gIEl0IGlzIGludGVu ZGVkIHRvIG9wZXJhdGUgc2ltaWxhcmx5IHRvIHRoZSB3YXkgdGhlIGNvbW1vbgotICBVVUNQIEwu c3lzIGxvZ2luIGVudHJpZXMgd29yay4gIENvbmRpdGlvbmFsIHJlc3BvbnNlcyBhcmUgc3VwcG9y dGVkOgotICBleHBlY3RbLXNlbmQtZXhwZWN0Wy4uLl1dLCBhcyB3aXRoIFVVQ1AuICBUaGUgc2Vu ZCBrZXl3b3JkIEVPVCBzZW5kcyBhCi0gIENvbnRyb2wtZCwgYW5kIHRoZSBrZXl3b3JkIEJSRUFL IHNlbmRzIGEgYnJlYWsuICBMZXR0ZXJzIHByZWZpeGVkCi0gIGJ5ICd+JyBhcmUgJ35iJyBiYWNr c3BhY2UsICd+cycgc3BhY2UsICd+bicgbGluZWZlZWQsICd+cicgcmV0dXJuLCAnfngnIHhvbiwK LSAgJ350JyB0YWIsICd+cScgPyAobm90IGFsbG93ZWQgb24ga2VybWl0IGNvbW1hbmQgbGluZXMp LCAnficgfiwgJ34nJywKLSAgJ34iJywgJ35jJyBkb24ndCBhcHBlbmQgcmV0dXJuLCAnfm9bb1tv XV0nIG9jdGFsIGNoYXJhY3Rlci4gIEFzIHdpdGgKLSAgc29tZSB1dWNwIHN5c3RlbXMsIHNlbnQg c3RyaW5ncyBhcmUgZm9sbG93ZWQgYnkgfnIgKG5vdCB+bikgdW5sZXNzIHRoZXkKLSAgZW5kIHdp dGggfmMuIE51bGwgZXhwZWN0IHN0cmluZ3MgKGUuZy4sIH4wIG9yIC0tKSBjYXVzZSBhIHNob3J0 Ci0gIGRlbGF5LCBhbmQgYXJlIHVzZWZ1bCBmb3Igc2VuZGluZyBzZXF1ZW5jZXMgcmVxdWlyaW5n IHNsaWdodCBwYXVzZXMuCi0KLSAgVGhpcyBtb2R1bGUgY2FsbHMgZXh0ZXJuYWxseSBkZWZpbmVk IHN5c3RlbS1kZXBlbmRlbnQgZnVuY3Rpb25zIGZvcgotICBjb21tdW5pY2F0aW9ucyBpL28sIGFz IGRlZmluZWQgaW4gY2tjcGxtLnR4dCwgdGhlIEMtS2VybWl0IFByb2dyYW0gTG9naWMKLSAgTWFu dWFsLCBhbmQgdGh1cyBzaG91bGQgYmUgcG9ydGFibGUgdG8gYWxsIHN5c3RlbXMgdGhhdCBpbXBs ZW1lbnQgdGhvc2UKLSAgZnVuY3Rpb25zLCBhbmQgd2hlcmUgYWxhcm0oKSBhbmQgc2lnbmFsKCkg d29yayBhcyB0aGV5IGRvIGluIFVOSVguCi0qLwotI2luY2x1ZGUgImNrY2RlYi5oIgotI2luY2x1 ZGUgPHNpZ25hbC5oPgotI2lmZGVmIE5UCi0jaW5jbHVkZSA8c2V0am1wZXguaD4KLSNlbHNlIC8q IE5UICovCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0jZW5kaWYgLyogTlQgKi8KLSNpbmNsdWRlICJj a2Nhc2MuaCIKLSNpbmNsdWRlICJja2NrZXIuaCIKLSNpbmNsdWRlICJja3V1c3IuaCIKLSNpbmNs dWRlICJja2NuZXQuaCIKLSNpbmNsdWRlICJja2NzaWcuaCIKLQotX1BST1RPVFlQKCBWT0lEIGZs dXNoaSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBWT0lEIG15ZmxzaCwgKHZvaWQpICk7 Ci1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgc2VxdWVuYywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIHN0 YXRpYyBWT0lEIHJlY3ZzZXEsICh2b2lkKSApOwotX1BST1RPVFlQKCBzdGF0aWMgaW50IG91dHNl cSwgKHZvaWQpICk7Ci0KLSNpZmRlZiBNQUMKLSNkZWZpbmUgc2lnbmFsIG1zaWduYWwKLSNkZWZp bmUgU0lHVFlQIGxvbmcKLSNkZWZpbmUgYWxhcm0gbWFsYXJtCi0jZGVmaW5lIFNJR19JR04gMAot I2RlZmluZSBTSUdBTFJNIDEKLSNkZWZpbmUgU0lHSU5UICAyCi1TSUdUWVAgKCptc2lnbmFsKGlu dCB0eXBlLCBTSUdUWVAgKCpmdW5jKShpbnQpKSkoaW50KTsKLSNlbmRpZiAvKiBNQUMgKi8KLQot I2lmZGVmIEFNSUdBCi0jZGVmaW5lIHNpZ25hbCBhc2lnbmFsCi0jZGVmaW5lIGFsYXJtIGFhbGFy bQotI2RlZmluZSBTSUdBTFJNIChfTlVNU0lHKzEpCi0jZGVmaW5lIFNJR1RZUCB2b2lkCi1TSUdU WVAgKCphc2lnbmFsKGludCB0eXBlLCBTSUdUWVAgKCpmdW5jKShpbnQpKSkoaW50KTsKLXVuc2ln bmVkIGFhbGFybSh1bnNpZ25lZCk7Ci0jZW5kaWYgLyogQU1JR0EgKi8KLQotI2lmZGVmIFNUUkFU VVMKLS8qIFZPUyBkb2Vzbid0IGhhdmUgYWxhcm0oKSwgYnV0IGl0IGRvZXMgaGF2ZSBzb21lIHRo aW5ncyB3ZSBjYW4gd29yayB3aXRoLiAqLwotLyogaG93ZXZlciwgd2UgaGF2ZSB0byBjYXRjaCBh bGwgdGhlIHNpZ25hbHMgaW4gb25lIHBsYWNlIHRvIGRvIHRoaXMsIHNvICAgICovCi0vKiB3ZSBp bnRlcmNlcHQgdGhlIHNpZ25hbCgpIHJvdXRpbmUgYW5kIGNhbGwgaXQgZnJvbSBvdXIgb3duIHJl cGxhY2VtZW50LiAgKi8KLSNkZWZpbmUgc2lnbmFsIHZzaWduYWwKLSNkZWZpbmUgYWxhcm0gdmFs YXJtCi1TSUdUWVAgKCp2c2lnbmFsKGludCB0eXBlLCBTSUdUWVAgKCpmdW5jKShpbnQpKSkoaW50 KTsKLWludCB2YWxhcm0oaW50IGludGVydmFsKTsKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0KLWV4 dGVybiBpbnQgc2Vzc2Z0OwotZXh0ZXJuIGludCBsb2NhbCwgZmxvdywgc2VzbG9nLCBtZG10eXAs IG1zZ2ZsZywgZHVwbGV4LCBiYWNrZ3JkLCBzZWNobywgcXVpZXQ7Ci1leHRlcm4gaW50IG5ldHdv cmssIG5ldHR5cGUsIHR0bnByb3RvOwotZXh0ZXJuIGxvbmcgc3BlZWQ7Ci1leHRlcm4gY2hhciB0 dG5hbWVbXTsKLQotI2lmZGVmIE5UU0lHCi1leHRlcm4gaW50IFRsc0luZGV4OwotI2VuZGlmIC8q IE5UU0lHICovCi0jaWZkZWYgSUtTRAotZXh0ZXJuIGludCBpbnNlcnZlcjsKLSNlbmRpZiAvKiBJ S1NEICovCi0KLXN0YXRpYyBpbnQgaXNfdG4gPSAwOwkJCS8qIERvIFRlbG5ldCBuZWdvdGlhdGlv bnMgKi8KLQotI2lmbmRlZiBOT1NQTAotI2lmZGVmIERDTURCVUYKLWV4dGVybiBzdHJ1Y3QgY21k cHRyICpjbWRzdGs7Ci0jZWxzZQotZXh0ZXJuIHN0cnVjdCBjbWRwdHIgY21kc3RrW107Ci0jZW5k aWYgLyogRENNREJVRiAqLwotZXh0ZXJuIGludCB0ZWNobywgY21kbHZsOwotZXh0ZXJuIGludCBt ZWNobzsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1zdGF0aWMgaW50IHNjcl9lY2hvOwkJCS8qIFdo ZXRoZXIgdG8gZWNobyBzY3JpcHQgY29tbWFuZHMgKi8KLQotc3RhdGljIGludCBleHBfYWxybSA9 IDE1OwkJLyogVGltZSB0byB3YWl0IGZvciBleHBlY3Qgc3RyaW5nICovCi0jZGVmaW5lIFNORF9B TFJNIDE1CQkJLyogVGltZSB0byBhbGxvdyBmb3Igc2VuZGluZyBzdHJpbmcgKi8KLSNkZWZpbmUg TlVMTF9FWFAgMgkJCS8qIFRpbWUgdG8gcGF1c2Ugb24gbnVsbCBleHBlY3Qgc3RyZyovCi0jZGVm aW5lIERFTF9NU0VDIDMwMAkJCS8qIE1pbGxpc2Vjb25kcyB0byBwYXVzZSBvbiB+ZCAqLwotCi0j ZGVmaW5lIFNCVUZMIDUxMgotc3RhdGljIGNoYXIgc2VxX2J1ZltTQlVGTCsyXSwgKnM7CS8qIGV4 cGVjdC1zZW5kIHNlcXVlbmNlIGJ1ZmZlciAqLwotc3RhdGljIGludCBnb3RfaXQsIG5vX2NyOwot Ci0vKiAgQ29ubmVjdCBzdGF0ZSBwYXJlbnQvY2hpbGQgY29tbXVuaWNhdGlvbiBzaWduYWwgaGFu ZGxlcnMgKi8KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBDS19QT1NJWF9TSUcKLXN0YXRpYyBz aWdqbXBfYnVmIGFscm1ybmc7Ci0jZWxzZQotc3RhdGljIGptcF9idWYgYWxybXJuZzsKLSNlbmRp ZiAvKiBDS19QT1NJWF9TSUcgKi8KLSNlbHNlCi1zdGF0aWMgY2tqbXBidWYgYWxybXJuZzsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0KLXN0YXRpYyBTSUdUWVAKLSNpZmRlZiBDS19BTlNJQwotc2Ny dGltZShpbnQgZm9vKQkJCS8qIG1vZGVtIHJlYWQgZmFpbHVyZSBoYW5kbGVyLCAqLwotI2Vsc2UK LXNjcnRpbWUoZm9vKSBpbnQgZm9vOwkJCS8qIEFsYXJtIGhhbmRsZXIgKi8KLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotLyogc2NydGltZSAqLyB7Ci0KLSNpZmRlZiBCRUJPWAotI2lmZGVmIEJFX0RS XzcKLSAgICBhbGFybV9leHBpcmVkKCk7Ci0jZW5kaWYgLyogQkVfRFJfNyAqLwotI2VuZGlmIC8q IEJFQk9YICovCi0jaWZkZWYgTlRTSUcKLSAgICBpZiAoZm9vID09IFNJR0FMUk0pCi0gICAgICBQ b3N0QWxhcm1TaWdTZW0oKTsKLSAgICBlbHNlCi0gICAgICBQb3N0Q3RybENTZW0oKTsKLSNlbHNl IC8qIE5UU0lHICovCi0jaWZkZWYgTlQKLSAgICBja2xvbmdqbXAoY2tqYWRkcihhbHJtcm5nKSwx KTsKLSNlbHNlIC8qIE5UICovCi0gICAgY2tsb25nam1wKGFscm1ybmcsMSk7Ci0jZW5kaWYgLyog TlQgKi8KLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgIFNJR1JFVFVSTjsKLX0KLQotLyoKLSBTZXF1 ZW5jZSBpbnRlcnByZXRlciAtLSBwaWNrIHVwIG5leHQgc2VxdWVuY2UgZnJvbSBjb21tYW5kIHN0 cmluZywKLSBkZWNvZGUgZXNjYXBlcyBhbmQgcGxhY2UgaW50byBzZXFfYnVmLgotCi0gSWYgc3Ry aW5nIGNvbnRhaW5zIGEgfmQgKGRlbGF5KSB0aGVuIHNlcXVlbmMoKSByZXR1cm5zIGEgMSBleHBl Y3RpbmcKLSB0byBiZSBjYWxsZWQgYWdhaW4gYWZ0ZXIgdGhlIH5kIGV4ZWN1dGVzLgotKi8KLXN0 YXRpYyBpbnQKLXNlcXVlbmMoKSB7Ci0gICAgaW50IGk7Ci0gICAgY2hhciBjLCBvY3RfY2hhcjsK LQotICAgIG5vX2NyID0gMDsJCQkJLyogb3V0cHV0IG5lZWRzIGNyIGFwcGVuZGVkICovCi0gICAg Zm9yIChpID0gMDsgaSA8IFNCVUZMOyApIHsKLQlpZiAoKnMgPT0gJ1wwJyB8fCAqcyA9PSAnLScg fHwgaXNzcGFjZSgqcykgKSB7IC8qIGRvbmUgKi8KLQkgICAgc2VxX2J1ZltpXSA9ICdcMCc7Ci0J ICAgIHJldHVybigwKSA7Ci0JfQotCWlmICgqcyA9PSAnficpIHsJCS8qIGVzY2FwZSBjaGFyYWN0 ZXIgKi8KLQkgICAgcysrOwotCSAgICBzd2l0Y2ggKGMgPSAqcykgewotCQljYXNlICduJzogIHNl cV9idWZbaSsrXSA9IExGOyBicmVhazsKLQkJY2FzZSAncic6ICBzZXFfYnVmW2krK10gPSBDUjsg YnJlYWs7Ci0JCWNhc2UgJ3QnOiAgc2VxX2J1ZltpKytdID0gJ1x0JzsgYnJlYWs7Ci0JCWNhc2Ug J2InOiAgc2VxX2J1ZltpKytdID0gJ1xiJzsgYnJlYWs7Ci0JCWNhc2UgJ3EnOiAgc2VxX2J1Zltp KytdID0gJz8nOyAgYnJlYWs7Ci0jaWZkZWYgQ09NTUVOVAotLyogVGhlIGRlZmF1bHQgY2FzZSBz aG91bGQgY2F0Y2ggdGhlc2Ugbm93Li4uICovCi0JCWNhc2UgJ34nOiAgc2VxX2J1ZltpKytdID0g J34nOyAgYnJlYWs7Ci0JCWNhc2UgJy0nOiAgc2VxX2J1ZltpKytdID0gJy0nOyAgYnJlYWs7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCQljYXNlICdcJyc6IHNlcV9idWZbaSsrXSA9ICdcJyc7IGJy ZWFrOwotCQljYXNlICdcIic6IHNlcV9idWZbaSsrXSA9ICdcIic7IGJyZWFrOwotCQljYXNlICdz JzogIHNlcV9idWZbaSsrXSA9ICcgJzsgIGJyZWFrOwotCQljYXNlICd4JzogIHNlcV9idWZbaSsr XSA9ICdcMDIxJzsgYnJlYWs7Ci0JCWNhc2UgJ2MnOiAgbm9fY3IgPSAxOyBicmVhazsKLQkJY2Fz ZSAnZCc6IHsJCQkvKiBzZW5kIHdoYXQgd2UgaGF2ZSAmIHRoZW4gKi8KLQkJICAgIHNlcV9idWZb aV0gPSAnXDAnOwkJLyogZXhwZWN0IHRvIHNlbmQgcmVzdCBhZnRlciAqLwotCQkgICAgbm9fY3Ig PSAxOwkJCS8qIHNlbmRlciBkZWxheXMgYSBsaXR0bGUgKi8KLQkJICAgIHMrKzsKLQkJICAgIHJl dHVybigxKTsKLQkJfQotCQljYXNlICd3JzogewkJCS8qIHdhaXQgY291bnQgKi8KLQkJICAgIGV4 cF9hbHJtID0gMTU7CQkvKiBkZWZhdWx0IHRvIDE1IHNlYyAqLwotCQkgICAgaWYgKGlzZGlnaXQo KihzKzEpKSkgewotCQkJcysrOwotCQkJZXhwX2Fscm0gPSAqcyAmIDE1OwotCQkJaWYgKGlzZGln aXQoKihzKzEpKSApIHsKLQkJCSAgICBzKys7Ci0JCQkgICAgZXhwX2Fscm0gPSBleHBfYWxybSAq IDEwICsgKCpzICYgMTUpOwotCQkJfQotCQkgICAgfQotCQkgICAgYnJlYWs7Ci0JCX0KLQkJZGVm YXVsdDoKLQkJICAgIGlmICggaXNkaWdpdChjKSApIHsJICAgIAkvKiBvY3RhbCBjaGFyYWN0ZXIg Ki8KLQkJICAgIAlvY3RfY2hhciA9IChjaGFyKSAoYyAmIDcpOyAvKiBtb3N0IHNpZ25pZmljYW50 IGRpZ2l0ICovCi0JCQlpZiAoaXNkaWdpdCggKihzKzEpICkgKSB7Ci0JCQkgICAgcysrOwotCQkJ ICAgIG9jdF9jaGFyID0gKGNoYXIpICgob2N0X2NoYXI8PDMpIHwgKCAqcyAmIDcgKSk7Ci0JCQkg ICAgaWYgKGlzZGlnaXQoICoocysxKSApICkgewotCQkJCXMrKzsKLQkJCSAgICAJb2N0X2NoYXIg PSAoY2hhcikgKChvY3RfY2hhcjw8MykgfCAoICpzICYgNyApKTsKLQkJCSAgICB9Ci0JCQl9Ci0J CQlzZXFfYnVmW2krK10gPSBvY3RfY2hhcjsKLQkJCWJyZWFrOwotCQkgICAgfSBlbHNlIHNlcV9i dWZbaSsrXSA9ICpzOyAvKiBUcmVhdCB+IGFzIHF1b3RlICovCi0JICAgICAgfQotCX0gZWxzZSBz ZXFfYnVmW2krK10gPSAqczsJLyogUGxhaW4gb2xkIGNoYXJhY3RlciAqLwotCXMrKzsKLSAgICB9 Ci0gICAgc2VxX2J1ZltpXSA9ICdcMCc7Ci0gICAgcmV0dXJuKDApOwkJCQkvKiBlbmQgb2Ygc3Bh Y2UsIHJldHVybiBhbnl3YXkgKi8KLX0KLQotCi0vKiBPdXRwdXQgYnVmZmVyaW5nIGZvciAicmVj dnNlcSIgYW5kICJmbHVzaGkiICovCi0KLSNkZWZpbmUJTUFYQlVSU1QgMjU2CQkvKiBtYXhpbXVt IHNpemUgb2YgaW5wdXQgYnVyc3QgKi8KLXN0YXRpYyBDSEFSIGNvbmJ1ZltNQVhCVVJTVF07CS8q IGJ1ZmZlciB0byBob2xkIG91dHB1dCBmb3IgY29uc29sZSAqLwotc3RhdGljIGludCBjb25jbnQg PSAwOwkJLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMgYnVmZmVyZWQgKi8KLXN0YXRpYyBDSEFSIHNl c2J1ZltNQVhCVVJTVF07CS8qIGJ1ZmZlciB0byBob2xkIG91dHB1dCBmb3Igc2Vzc2lvbiBsb2cg Ki8KLXN0YXRpYyBpbnQgc2VzY250ID0gMDsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJ1ZmZl cmVkICovCi0KLXN0YXRpYyBWT0lECi1teWZsc2goKSB7Ci0gICAgaWYgKGNvbmNudCA+IDApIHsK LQljb254byhjb25jbnQsIChjaGFyICopIGNvbmJ1Zik7Ci0JY29uY250ID0gMDsKLSAgICB9Ci0g ICAgaWYgKHNlc2NudCA+IDApIHsKLSAgICAgICAgbG9nc3RyKChjaGFyICopIHNlc2J1Ziwgc2Vz Y250KTsKLQlzZXNjbnQgPSAwOwotICAgIH0KLX0KLQotLyogdGhlc2UgdmFyaWFibGVzIGFyZSB1 c2VkIHRvIHBhc3MgZGF0YSBiZXR3ZWVuIHRoZSByZWN2c2VxKCkgKi8KLS8qIGFuZCB0aGUgZG9y c2VxKCkuICBUaGV5IGFyZSBuZWNlc3NhcnkgYmVjYXVzZSBpbiBzb21lIHZlcnNpb25zICovCi0v KiBkb3JzZXEoKSBpcyBleGVjdXRlZCBpbiBhIHNlcGFyYXRlIHRocmVhZCBhbmQgZGF0YSBjYW5u b3QgYmUgKi8KLS8qIHBhc3NlZCBieSBwYXJhbWV0ZXIuICovCi0KLXN0YXRpYyBjaGFyICpyc2Vx ZSwgKiByc2VxZ290LCAqIHJzZXF0cmFjZSA7Ci1zdGF0aWMgaW50IHJzZXFsOwotCi1zdGF0aWMg U0lHVFlQCi0jaWZkZWYgQ0tfQU5TSUMKLWRvcnNlcSh2b2lkICogdGhyZWFkaW5mbykKLSNlbHNl IC8qIENLX0FOU0lDICovCi1kb3JzZXEodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRvcnNlcSAqLyB7Ci0gICAgaW50IGksIHg7Ci0gICAg aW50IGJ1cnN0ID0gMDsJCQkvKiBjaGFycyByZW1haW5pbmcgaW4gaW5wdXQgYnVyc3QgKi8KLQot I2lmZGVmIE5UU0lHCi0gICAgc2V0aW50KCk7Ci0gICAgaWYgKHRocmVhZGluZm8pIHsJCQkvKiBU aHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLwotCVRsc1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGlu Zm8pOwotICAgIH0KLSNlbmRpZiAvKiBOVFNJRyAqLwotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYg TlQKLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyKQotICAgICAgc2V0bnRjcmVkcygpOwot I2VuZGlmIC8qIElLU0QgKi8KLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIENLX0xPR0lOICov Ci0KLSAgICB3aGlsZSAoIWdvdF9pdCkgewotCWZvciAoaSA9IDA7IGkgPCByc2VxbC0xOyBpKysp IHJzZXFnb3RbaV0gPSByc2VxZ290W2krMV07Ci0JeCA9IHR0aW5jKDApOwkJCS8qIFJlYWQgYSBj aGFyYWN0ZXIgKi8KLQlkZWJ1ZyhGMTAxLCJyZWN2c2VxIiwiIix4KTsKLQlpZiAoeCA8IDApIHsK LSNpZmRlZiBOVFNJRwotCSAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBO VFNJRyAqLwotCSAgICBTSUdSRVRVUk47CQkJLyogQ2hlY2sgZm9yIGVycm9yICovCi0JfQotI2lm ZGVmIE5FVENPTk4KLSNpZmRlZiBUTkNPREUKLS8qIENoZWNrIGZvciB0ZWxuZXQgcHJvdG9jb2wg bmVnb3RpYXRpb24gKi8KLQlpZiAoKCh4ICYgMHhmZikgPT0gSUFDKSAmJiBpc190bikgeyAvKiBU ZWxuZXQgbmVnb3RpYXRpb24gKi8KLQkgICAgbXlmbHNoKCk7Ci0JICAgIGJ1cnN0ID0gMDsKLQkg ICAgc3dpdGNoICh0bl9kb29wKChDSEFSKSh4ICYgMHhmZiksZHVwbGV4LHR0aW5jKSkgewotCSAg ICAgIGNhc2UgMjogZHVwbGV4ID0gMDsgY29udGludWU7Ci0JICAgICAgY2FzZSAxOiBkdXBsZXgg PSAxOwotCSAgICAgIGRlZmF1bHQ6IGNvbnRpbnVlOwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIFRO Q09ERSAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQlyc2VxZ290W3JzZXFsLTFdID0gKGNoYXIp ICh4ICYgMHg3Zik7IC8qIEdvdCBhIGNoYXJhY3RlciAqLwotCWJ1cnN0LS07CQkJLyogT25lIGxl c3Mgd2FpdGluZyAqLwotCWlmIChzY3JfZWNobykgY29uYnVmW2NvbmNudCsrXSA9IHJzZXFnb3Rb cnNlcWwtMV07IC8qIEJ1ZmZlciBpdCAqLwotCWlmIChzZXNsb2cpCQkJLyogTG9nIGl0IGluIHNl c3Npb24gbG9nICovCi0jaWZkZWYgVU5JWAotCSAgaWYgKHNlc3NmdCAhPSAwIHx8IHJzZXFnb3Rb cnNlcWwtMV0gIT0gJ1xyJykKLSNlbHNlCi0jaWZkZWYgT1NLCi0JICAgIGlmIChzZXNzZnQgIT0g MCB8fCByc2VxZ290W3JzZXFsLTFdICE9ICdcMDEyJykKLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRp ZiAvKiBVTklYICovCi0JICAgICAgaWYgKHJzZXFnb3RbcnNlcWwtMV0pCS8qIEZpbHRlciBvdXQg TlVMcyAqLwotCQlzZXNidWZbc2VzY250KytdID0gcnNlcWdvdFtyc2VxbC0xXTsKLQlpZiAoKGlu dClzdHJsZW4ocnNlcXRyYWNlKSA8IFNCVUZMLTIgKQotCSAgc3RyY2F0KHJzZXF0cmFjZSxkYmNo cihyc2VxZ290W3JzZXFsLTFdKSk7Ci0JZ290X2l0ID0gKCFzdHJuY21wKHJzZXFlLCByc2VxZ290 LCByc2VxbCkpOwotCWlmIChidXJzdCA8PSAwKSB7CQkvKiBGbHVzaCBidWZmZXJlZCBvdXRwdXQg Ki8KLQkgICAgbXlmbHNoKCk7Ci0JICAgIGlmICgoYnVyc3QgPSB0dGNoaygpKSA8IDApIHsgLyog R2V0IHNpemUgb2YgbmV4dCBpbnB1dCBidXJzdCAqLwotI2lmZGVmIE5UU0lHCi0JCWNrVGhyZWFk RW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0JCVNJR1JFVFVSTjsKLQkgICAg fQotCSAgICAvKiBwcmV2ZW50IG92ZXJmbG93IG9mICJjb25idWYiIGFuZCAic2VzYnVmIiAqLwot CSAgICBpZiAoYnVyc3QgPiBNQVhCVVJTVCkKLQkgICAgICBidXJzdCA9IE1BWEJVUlNUOwotCX0K LSAgICB9Ci0jaWZkZWYgTlRTSUcKLSAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRp ZiAvKiBOVFNJRyAqLwotICAgIFNJR1JFVFVSTjsKLX0KLQotc3RhdGljIFNJR1RZUAotI2lmZGVm IENLX0FOU0lDCi1mYWlscnNlcSh2b2lkICogdGhyZWFkaW5mbykKLSNlbHNlIC8qIENLX0FOU0lD ICovCi1mYWlscnNlcSh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotLyogZmFpbHJzZXEgKi8gewotICAgICBnb3RfaXQgPSAwOwkJCS8qIFRpbWVk IG91dCBoZXJlICovCi0gICAgIFNJR1JFVFVSTjsKLX0KLQotLyoKLSAgUmVjZWl2ZSBzZXF1ZW5j ZSAtLSBzZWUgaWYgZXhwZWN0ZWQgcmVzcG9uc2UgY29tZXMsCi0gIHJldHVybiBzdWNjZXNzIChv ciBmYWlsdXJlKSBpbiBnb3RfaXQuCi0qLwotc3RhdGljIFZPSUQKLXJlY3ZzZXEoKSB7Ci0gICAg Y2hhciAqZSwgZ290WzddLCB0cmFjZVtTQlVGTF07Ci0gICAgaW50IGksIGw7Ci0KLSAgICBzZXF1 ZW5jKCk7Ci0gICAgbCA9IChpbnQpc3RybGVuKGU9c2VxX2J1Zik7CQkvKiBubyBtb3JlIHRoYW4g NyBjaGFycyBhbGxvd2VkICovCi0gICAgaWYgKGwgPiA3KSB7Ci0JZSArPSBsLTc7Ci0JbCA9IDc7 Ci0gICAgfQotICAgIHRsb2coRjExMSwiZXhwZWN0aW5nIHNlcXVlbmNlIixlLChsb25nKSBsKTsK LSAgICBpZiAobCA9PSAwKSB7CQkJLyogbnVsbCBzZXF1ZW5jZSwgZGVsYXkgYSBsaXR0bGUgKi8K LQlzbGVlcCAoTlVMTF9FWFApOwotCWdvdF9pdCA9IDE7Ci0JdGxvZyhGMTAwLCJnb3QgaXQgKG51 bGwgc2VxdWVuY2UpIiwiIiwwTCk7Ci0JcmV0dXJuOwotICAgIH0KLSAgICAqdHJhY2UgPSAnXDAn OwotICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIGdvdFtpXT0nXDAnOwotCi0gICAgcnNlcXRy YWNlID0gdHJhY2U7Ci0gICAgcnNlcWUgPSBlOwotICAgIHJzZXFnb3QgPSBnb3Q7Ci0gICAgcnNl cWwgPSBsOwotCi0gICAgYWxybV9leGVjdXRlKGNramFkZHIoYWxybXJuZyksIGV4cF9hbHJtLCBz Y3J0aW1lLCBkb3JzZXEsIGZhaWxyc2VxKTsKLQotICAgIHRsb2coRjExMCwicmVjZWl2ZWQgc2Vx dWVuY2U6ICIsdHJhY2UsMEwpOwotICAgIHRsb2coRjEwMSwicmV0dXJuaW5nIHdpdGggZ290LWl0 IGNvZGUiLCIiLChsb25nKSBnb3RfaXQpOwotICAgIG15ZmxzaCgpOwkJCQkvKiBGbHVzaCBidWZm ZXJlZCBvdXRwdXQgKi8KLSAgICByZXR1cm47Ci19Ci0KLS8qCi0gT3V0cHV0IEEgU2VxdWVuY2Ug c3RhcnRpbmcgYXQgcG9pbnRlciBzLAotIHJldHVybiAwIGlmIG9rYXksCi0gMSBpZiBmYWlsZWQg dG8gcmVhZCAobW9kZW0gaGFuZ3VwIG9yIHdoYXRldmVyKQotKi8KLXN0YXRpYyBpbnQgb3NlcXJl dCA9IDA7CQkJLyogUmV0dXJuIGNvZGUgZm9yIG91dHNlcSAqLwotCQkJCQkvKiBPdXQgaGVyZSB0 byBwcmV2ZW50IGNsb2JiZXJpbmcgKi8KLQkJCQkJLyogYnkgbG9uZ2ptcC4gKi8KLQotc3RhdGlj IFNJR1RZUAotI2lmZGVmIENLX0FOU0lDCi1kb29zZXEodm9pZCAqIHRocmVhZGluZm8pCi0jZWxz ZSAvKiBDS19BTlNJQyAqLwotZG9vc2VxKHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaW50IGw7Ci0gICAgY2hhciAqc2I7Ci0jaWZk ZWYgVENQU09DS0VUCi0gICAgZXh0ZXJuIGludCB0bl9ubG0sIHRuX2JfbmxtOwotI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLwotCi0jaWZkZWYgTlRTSUcKLSAgICBzZXRpbnQoKTsKLSAgICBpZiAodGhy ZWFkaW5mbykgewkJCS8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0JVGxzU2V0VmFsdWUo VGxzSW5kZXgsdGhyZWFkaW5mbyk7Ci0gICAgfQotI2VuZGlmIC8qIE5UU0lHICovCi0jaWZkZWYg Q0tfTE9HSU4KLSNpZmRlZiBOVAotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAg ICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogSUtTRCAqLwotI2VuZGlmIC8qIE5UICovCi0jZW5k aWYgLyogQ0tfTE9HSU4gKi8KLQotICAgIGwgPSAoaW50KXN0cmxlbihzZXFfYnVmKTsKLSAgICB0 bG9nKEYxMTEsInNlbmRpbmcgc2VxdWVuY2UgIixzZXFfYnVmLChsb25nKSBsKTsKLQotICAgIGlm ICghc3RyY21wKHNlcV9idWYsIkVPVCIpKSB7Ci0JdHRvYyhkb3BhcignXDAwNCcpKTsKLQlpZiAo c2NyX2VjaG8pIGNvbm9sKCI8RU9UPiIpOwotCWlmIChzZXNsb2cgJiYgZHVwbGV4KQotICAgICAg ICAgICAgbG9nc3RyKCI8RU9UPiIsNSk7Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKHNlcV9idWYs IkJSRUFLIikgfHwKLQkgICAgICAgIXN0cmNtcChzZXFfYnVmLCJcXGIiKSB8fAotCSAgICAgICAh c3RyY21wKHNlcV9idWYsIlxcQiIpKSB7Ci0JdHRzbmRiKCk7Ci0JaWYgKHNjcl9lY2hvKSBjb25v bCgiPEJSRUFLPiIpOwotCWlmIChzZXNsb2cpCi0JICBsb2dzdHIoIntCUkVBS30iLDcpOwotICAg IH0gZWxzZSB7Ci0JaWYgKGwgPiAwKSB7Ci0JICAgIGZvciAoIHNiID0gc2VxX2J1ZjsgKnNiOyBz YisrKQotCSAgICAgICpzYiA9IGRvcGFyKCpzYik7CS8qIGFkZCBwYXJpdHkgKi8KLQkgICAgdHRv bCgoQ0hBUiAqKXNlcV9idWYsbCk7IC8qIHNlbmQgaXQgKi8KLQkgICAgaWYgKHNjcl9lY2hvICYm IGR1cGxleCkgewotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0JCXsJCQkvKiBFY2hvIHRv IGVtdWxhdG9yICovCi0JCSAgICBjaGFyICpzID0gc2VxX2J1ZjsKLQkJICAgIHdoaWxlICgqcykg ewotCQkJc2NyaXB0d3J0YnVmKChVU0hPUlQpKnMpOwotCQkgICAgfQotCQl9Ci0jZW5kaWYgLyog T1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCQljb254byhsLHNlcV9idWYpOwotCSAgICB9 Ci0JICAgIGlmIChzZXNsb2cgJiYgZHVwbGV4KSAvKiBsb2cgaXQgKi8KLQkgICAgICBsb2dzdHIo c2VxX2J1ZixzdHJsZW4oc2VxX2J1ZikpOwotCX0KLQlpZiAoIW5vX2NyKSB7Ci0JICAgIHR0b2Mo IGRvcGFyKENSKSApOwotI2lmZGVmIFRDUFNPQ0tFVAotCSAgICBpZiAoaXNfdG4pIHsKLQkJaWYg KCFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkgJiYgdG5fbmxtICE9IFROTF9DUikKLQkJICB0dG9j KChjaGFyKSgodG5fbmxtID09IFROTF9DUkxGKSA/Ci0JCQkgICAgICBkb3BhcihMRikgOiBkb3Bh cihOVUwpKSk7Ci0JCWVsc2UgaWYgKFRFTE9QVF9NRShURUxPUFRfQklOQVJZKSAmJgotCQkJICh0 bl9iX25sbSA9PSBUTkxfQ1JMRiB8fCB0bl9iX25sbSA9PSBUTkxfQ1JOVUwpKQotCQkgIHR0b2Mo KGNoYXIpKCh0bl9iX25sbSA9PSBUTkxfQ1JMRikgPwotCQkJICAgICAgZG9wYXIoTEYpIDogZG9w YXIoTlVMKSkpOwotCSAgICB9Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0JICAgIGlmIChzZXNs b2cgJiYgZHVwbGV4KQotCSAgICAgIGxvZ2NoYXIoZG9wYXIoQ1IpKTsKLQl9Ci0gICAgfQotI2lm ZGVmIE5UU0lHCi0gICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcg Ki8KLSAgICBTSUdSRVRVUk47Ci19Ci0KLVNJR1RZUAotI2lmZGVmIENLX0FOU0lDCi1mYWlsb3Nl cSh2b2lkICogdGhyZWFkaW5mbykKLSNlbHNlIC8qIENLX0FOU0lDICovCi1mYWlsb3NlcSh0aHJl YWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZmFp bG9zZXEgKi8gewotICAgICBvc2VxcmV0ID0gLTE7CQkvKiBlbHNlIC0tIGFsYXJtIHJhbmcgKi8K LSAgICAgU0lHUkVUVVJOOwotfQotCi1zdGF0aWMgaW50Ci1vdXRzZXEoKSB7Ci0gICAgaW50IGRl bGF5OwotCi0gICAgb3NlcXJldCA9IDA7CQkJLyogSW5pdGlhbGl6ZSByZXR1cm4gY29kZSAqLwot ICAgIHdoaWxlKDEpIHsKLQlkZWxheSA9IHNlcXVlbmMoKTsKLQlhbHJtX2V4ZWN1dGUoIGNramFk ZHIoYWxybXJuZyksIFNORF9BTFJNLCBzY3J0aW1lLCBkb29zZXEsIGZhaWxvc2VxICkgOwotCi0J aWYgKCFkZWxheSkKLQkgIHJldHVybihvc2VxcmV0KTsKLSNpZm5kZWYgTUFDCi0JbXNsZWVwKERF TF9NU0VDKTsJCS8qIGRlbGF5LCBsb29wIHRvIG5leHQgc2VuZCAqLwotI2VuZGlmIC8qIE1BQyAq LwotICAgIH0KLX0KLQotCi0vKiAgTCBPIEcgSSBOICAtLSAgKGhpc3RvcmljYWwgbWlzbm9tZXIp IEV4ZWN1dGUgdGhlIFNDUklQVCBjb21tYW5kICovCi0KLWludAotZG9sb2dpbihjbWRzdHIpIGNo YXIgKmNtZHN0cjsgewotCi0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSAgICBTSUdUWVAgKCogc2F2 ZWFsbSkoaW50KTsJCS8qIFNhdmUgaW5jb21pbmcgYWxhcm0gZnVuY3Rpb24gKi8KLSNlbHNlIC8q IE5UICovCi0gICAgU0lHVFlQICgqIHZvbGF0aWxlIHNhdmVhbG0pKGludCk7CS8qIFNhdmUgaW5j b21pbmcgYWxhcm0gZnVuY3Rpb24gKi8KLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UgLyogT1MyICov Ci0gICAgU0lHVFlQICgqc2F2ZWFsbSkoKTsJCS8qIFNhdmUgaW5jb21pbmcgYWxhcm0gZnVuY3Rp b24gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBjaGFyICplOwotCi0gICAgcyA9IGNtZHN0cjsJ CQkJLyogTWFrZSBnbG9iYWwgdG8gdGhpcyBtb2R1bGUgKi8KLQotICAgIHRsb2coRjEwMCxsb2dp bnYsIiIsMEwpOwotCi0gICAgaWYgKHNwZWVkIDwgMEwpIHNwZWVkID0gdHRnc3BkKCk7Ci0gICAg aWYgKHR0b3Blbih0dG5hbWUsJmxvY2FsLG1kbXR5cCwwKSA8IDApIHsKLQlja21ha21zZyhzZXFf YnVmLFNCVUZMLCJTb3JyeSwgY2FuJ3Qgb3BlbiAiLHR0bmFtZSxOVUxMLE5VTEwpOwotCXBlcnJv cihzZXFfYnVmKTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotICAgIC8qIFdoZXRoZXIgdG8gZWNobyBz Y3JpcHQgY29tbWFuZHMgLi4uICovCi0gICAgc2NyX2VjaG8gPSAoIXF1aWV0ICYmICFiYWNrZ3Jk ICYmIHNlY2hvKTsKLSNpZm5kZWYgTk9TUEwKLSAgICBpZiAoc2NyX2VjaG8gJiYgY21kbHZsID4g MSkgewotCWlmIChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01EX1RGKQotCSAgc2NyX2VjaG8gPSB0 ZWNobzsKLQlpZiAoY21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9NRCkKLQkgIHNjcl9lY2hvID0g bWVjaG87Ci0gICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgaWYgKHNjcl9lY2hvKSB7Ci0j aWZkZWYgTkVUQ09OTgotCWlmIChuZXR3b3JrKQotCSAgcHJpbnRmKCJFeGVjdXRpbmcgU0NSSVBU IHRvIGhvc3QgJXMuXG4iLHR0bmFtZSk7Ci0JZWxzZQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQkg IHByaW50ZigiRXhlY3V0aW5nIFNDUklQVCB0aHJvdWdoICVzLCBzcGVlZCAlbGQuXG4iLHR0bmFt ZSxzcGVlZCk7Ci0gICAgfQotI2lmZGVmIFROQ09ERQotICAgIC8qIFRFTE5FVCBpbnB1dCBtdXN0 IGJlIHNjYW5uZWQgZm9yIElBQyAqLwotICAgIGlzX3RuID0gKGxvY2FsICYmIG5ldHdvcmsgJiYg SVNfVEVMTkVUKCkpIHx8Ci0JICAgICghbG9jYWwgJiYgc3N0ZWxuZXQpOwotI2VuZGlmIC8qIFRO Q09ERSAqLwotCi0gICAgKnNlcV9idWYgPSAwOwotICAgIGZvciAoZSA9IHM7ICplOyBlKyspIGNr c3RybmNhdChzZXFfYnVmLGRiY2hyKCplKSxTQlVGTCk7Ci0jaWZkZWYgQ09NTUVOVAotLyogU2tp cCB0aGlzIGJlY2F1c2UgaXQgdGVuZHMgdG8gY29udGFpbiBhIHBhc3N3b3JkLi4uICovCi0gICAg aWYgKHNjcl9lY2hvKSBwcmludGYoIlNDUklQVCBzdHJpbmc6ICVzXG4iLHNlcV9idWYpOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICB0bG9nKEYxMTAsIlNDUklQVCBzdHJpbmc6ICIsc2VxX2J1 ZiwgMEwpOwotCi0vKiBDb25kaXRpb24gY29uc29sZSB0ZXJtaW5hbCBhbmQgY29tbXVuaWNhdGlv biBsaW5lLi4uICovCi0KLSAgICBpZiAodHR2dChzcGVlZCxmbG93KSA8IDApIHsKLQlwcmludGYo IlNvcnJ5LCBDYW4ndCBjb25kaXRpb24gY29tbXVuaWNhdGlvbiBsaW5lXG4iKTsKLQlyZXR1cm4o MCk7Ci0gICAgfQotICAgIC8qIFNhdmUgaW5pdGlhbCB0aW1lciBpbnRlcnJ1cHQgdmFsdWUgKi8K LSAgICBzYXZlYWxtID0gc2lnbmFsKFNJR0FMUk0sU0lHX0lHTik7Ci0KLSAgICBmbHVzaGkoKTsJ CQkJLyogRmx1c2ggc3RhbGUgaW5wdXQgKi8KLQotLyogc3RhcnQgZXhwZWN0IC0gc2VuZCBzZXF1 ZW5jZSAqLwotCi0gICAgd2hpbGUgKCpzKSB7CQkJLyogV2hpbGUgbm90IGRvbmUgd2l0aCBidWZm ZXIgKi8KLQotCXdoaWxlICgqcyAmJiBpc3NwYWNlKCpzKSkgcysrOwkvKiBTa2lwIG92ZXIgc2Vw YXJhdGluZyB3aGl0ZXNwYWNlcyAqLwotCQkJCQkvKiBHYXRoZXIgdXAgZXhwZWN0IHNlcXVlbmNl ICovCi0JZ290X2l0ID0gMDsKLQlyZWN2c2VxKCk7Ci0KLQl3aGlsZSAoIWdvdF9pdCkgewkJLyog SGF2ZSBpdCB5ZXQ/ICovCi0JICAgIGlmICgqcysrICE9ICctJykJCS8qIE5vLCBpcyB0aGVyZSBh IGNvbmRpdGlvbmFsIHNlbmQ/ICovCi0JICAgICAgZ290byBmYWlscmV0OwkJLyogTm8sIHJldHVy biBmYWlsdXJlICovCi0JICAgIGZsdXNoaSgpOwkJCS8qIFllcywgZmx1c2ggb3V0IGlucHV0IGJ1 ZmZlciAqLwotCSAgICBpZiAob3V0c2VxKCkpCQkvKiBJZiB1bmFibGUgdG8gc2VuZCwgKi8KLQkg ICAgICBnb3RvIGZhaWxyZXQ7CQkvKiByZXR1cm4gZmFpbHVyZS4gKi8KLQkgICAgaWYgKCpzKysg IT0gJy0nKQkJLyogSWYgbm8gY29uZGl0aW9uYWwgcmVzcG9uc2UgaGVyZSwgKi8KLQkgICAgICBn b3RvIGZhaWxyZXQ7CQkvKiByZXR1cm4gZmFpbHVyZS4gKi8KLQkgICAgcmVjdnNlcSgpOwkJCS8q IEFsbCBPSywgcmVhZCByZXNwb25zZSBmcm9tIGhvc3QuICovCi0JfQkJCQkvKiBMb29wIGJhY2sg YW5kIGNoZWNrIGdvdF9pdCAqLwotCi0Jd2hpbGUgKCpzICYmICFpc3NwYWNlKCpzKyspICkgOwkv KiBTa2lwIG92ZXIgY29uZGl0aW9uYWxzICovCi0Jd2hpbGUgKCpzICYmIGlzc3BhY2UoKnMpKSBz Kys7CS8qIFNraXAgb3ZlciBzZXBhcmF0aW5nIHdoaXRlc3BhY2VzICovCi0JZmx1c2hpKCk7CQkJ LyogRmx1c2ggKi8KLQlpZiAoKnMpIGlmIChvdXRzZXEoKSkgZ290byBmYWlscmV0OyAvKiBJZiBh bnkgKi8KLSAgICB9Ci0gICAgc2lnbmFsKFNJR0FMUk0sc2F2ZWFsbSk7Ci0gICAgaWYgKHNjcl9l Y2hvKSBwcmludGYoIlNjcmlwdCBzdWNjZXNzZnVsLlxuIik7Ci0gICAgdGxvZyhGMTAwLCJTY3Jp cHQgc3VjY2Vzc2Z1bC4iLCIiLDBMKTsKLSAgICByZXR1cm4oMSk7Ci0KLWZhaWxyZXQ6Ci0gICAg c2lnbmFsKFNJR0FMUk0sc2F2ZWFsbSk7Ci0gICAgaWYgKHNjcl9lY2hvKSBwcmludGYoIlNvcnJ5 LCBzY3JpcHQgZmFpbGVkXG4iKTsKLSAgICB0bG9nKEYxMDAsIlNjcmlwdCBmYWlsZWQiLCIiLDBM KTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qICBGIEwgVSBTIEggSSAgLS0gIEZsdXNoLCBidXQg bG9nLCBTQ1JJUFQgaW5wdXQgYnVmZmVyICAqLwotCi1WT0lECi1mbHVzaGkoKSB7Ci0gICAgaW50 IG4sIHg7Ci0gICAgaWYgKAotCXNlc2xvZwkJCQkvKiBMb2dnaW5nIHNlc3Npb24/ICovCi0JfHwg c2NyX2VjaG8JCQkvKiBPciBjb25zb2xlIGVjaG9pbmc/ICovCi0jaWZkZWYgTkVUQ09OTgotI2lm ZGVmIFROQ09ERQotCS8qIFRFTE5FVCBpbnB1dCBtdXN0IGJlIHNjYW5uZWQgZm9yIElBQyAqLwot CXx8IGlzX3RuCi0jZW5kaWYgLyogVE5DT0RFICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotCSkg ewotICAgICAgICBpZiAoKG4gPSB0dGNoaygpKSA8IDApCQkvKiBZZXMsIGFueXRoaW5nIGluIGJ1 ZmZlcj8gKi8KLQkgIHJldHVybjsKLQlpZiAobiA+IE1BWEJVUlNUKSBuID0gTUFYQlVSU1Q7CS8q IE1ha2Ugc3VyZSBub3QgdG9vIG11Y2gsICovCi0JbXlmbHNoKCk7CQkJLyogYW5kIHRoYXQgYnVm ZmVycyBhcmUgZW1wdHkuICovCi0Jd2hpbGUgKG4tLSA+IDApIHsKLSAgCSAgICB4ID0gdHRpbmMo MCk7CQkvKiBDb2xsZWN0IGEgY2hhcmFjdGVyICovCi0jaWZkZWYgTkVUQ09OTgotI2lmZGVmIFRO Q09ERQotLyogQ2hlY2sgZm9yIHRlbG5ldCBwcm90b2NvbCBuZWdvdGlhdGlvbiAqLwotICAJICAg IGlmIChpc190biAmJiAoKHggJiAweGZmKSA9PSBJQUMpICkgewotCQlteWZsc2goKTsJCS8qIFN5 bmMgb3V0cHV0ICovCi0gIAkJc3dpdGNoICh0bl9kb29wKChDSEFSKSh4ICYgMHhmZiksZHVwbGV4 LHR0aW5jKSkgewotICAJCSAgY2FzZSAyOiBkdXBsZXggPSAwOyBicmVhazsKLSAgCQkgIGNhc2Ug MTogZHVwbGV4ID0gMTsKLQkJICBkZWZhdWx0OiBicmVhazsKLQkJfQotCi0JCS8qIFJlY2FsY3Vs YXRlIGZsdXNoIGNvdW50ICovCi0JCWlmICgobiA9IHR0Y2hrKCkpIDwgMCkKLQkJICByZXR1cm47 Ci0JCWlmIChuID4gTUFYQlVSU1QpIG4gPSBNQVhCVVJTVDsKLSAgCQljb250aW51ZTsKLSAgCSAg ICB9Ci0jZW5kaWYgLyogVE5DT0RFICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotCSAgICBpZiAo c2NyX2VjaG8pIGNvbmJ1Zltjb25jbnQrK10gPSAoQ0hBUikgeDsgLyogYnVmZmVyIGZvciBjb25z b2xlICovCi0JICAgIGlmIChzZXNsb2cpCi0jaWZkZWYgVU5JWAotCSAgICAgIGlmIChzZXNzZnQg IT0gMCB8fCB4ICE9ICdccicpCi0jZWxzZQotI2lmZGVmIE9TSwotCSAgICAgIGlmIChzZXNzZnQg IT0gMCB8fCB4ICE9ICdcMDEyJykKLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBVTklYICov Ci0JCXNlc2J1ZltzZXNjbnQrK10gPSAoQ0hBUikgeDsgLyogYnVmZmVyIGZvciBzZXNzaW9uIGxv ZyAqLwotICAJfQotCW15ZmxzaCgpOwotICAgIH0gZWxzZSB0dGZsdWkoKTsJCQkvKiBPdGhlcndp c2UganVzdCBmbHVzaC4gKi8KLX0KLQotI2Vsc2UgLyogTk9TQ1JJUFQgKi8KLWNoYXIgKmxvZ2lu diA9ICJTY3JpcHQgQ29tbWFuZCBEaXNhYmxlZCI7Ci0jZW5kaWYgLyogTk9TQ1JJUFQgKi8KLSNl bmRpZiAvKiBOT0lDUCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2Vy bWl0LTkuMC4zMDIvY2t1c2lnLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrdXNpZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDU1NmU1Li4wMDAw MDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1c2lnLmMK KysrIC9kZXYvbnVsbApAQCAtMSwzNTQgKzAsMCBAQAotY2hhciAqY2t1c2lndiA9ICJTaWduYWwg c3VwcG9ydCwgOS4wLjEwMCwgMTYgT2N0IDIwMDkiOwotCi0vKiBDIEsgVSBTIEkgRyAgLS0gIEtl cm1pdCBzaWduYWwgaGFuZGxpbmcgZm9yIFVuaXggYW5kIE9TLzIgc3lzdGVtcyAqLwotCi0vKgot ICBBdXRob3I6IEplZmZyZXkgQWx0bWFuIChqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tKSwK LSAgICAgICAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eS4KLQotICBD b3B5cmlnaHQgKEMpIDE5ODUsIDIwMDksCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVy c2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAg U2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0 ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25z LgotKi8KLSNpbmNsdWRlICJja2NzeW0uaCIKLSNpbmNsdWRlICJja2Nhc2MuaCIJCQkvKiBBU0NJ SSBjaGFyYWN0ZXIgc3ltYm9scyAqLwotI2luY2x1ZGUgImNrY2RlYi5oIgkJCS8qIERlYnVnICYg b3RoZXIgc3ltYm9scyAqLwotI2luY2x1ZGUgImNrY2tlci5oIgkJCS8qIEtlcm1pdCBzeW1ib2xz ICovCi0jaW5jbHVkZSAiY2tjbmV0LmgiCQkJLyogTmV0d29yayBzeW1ib2xzICovCi0jaWZuZGVm IE5PU1BMCi0jaW5jbHVkZSAiY2t1dXNyLmgiCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2luY2x1 ZGUgPHNpZ25hbC5oPgotI2lmZGVmIE5UCi0jaW5jbHVkZSA8c2V0am1wZXguaD4KLSNpbmNsdWRl IDxleGNwdC5oPgotI2Vsc2UgLyogTlQgKi8KLSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNlbmRpZiAv KiBOVCAqLwotI2luY2x1ZGUgImNrY3NpZy5oIgotCi0jaWZkZWYgTk9DQ1RSQVAKLWV4dGVybiBj a2ptcGJ1ZiBjbWpidWY7Ci0jZW5kaWYgLyogTk9DQ1RSQVAgKi8KLQotI2lmZGVmIE1BQwotI2Rl ZmluZSBzaWduYWwgbXNpZ25hbAotI2RlZmluZSBTSUdUWVAgbG9uZwotI2RlZmluZSBhbGFybSBt YWxhcm0KLSNkZWZpbmUgU0lHX0lHTiAwCi0jZGVmaW5lIFNJR0FMUk0gMQotI2RlZmluZSBTSUdJ TlQgIDIKLVNJR1RZUCAoKm1zaWduYWwoaW50IHR5cGUsIFNJR1RZUCAoKmZ1bmMpKGludCkpKShp bnQpOwotI2VuZGlmIC8qIE1BQyAqLwotCi0jaWZkZWYgU1RSQVRVUwotLyogV2Uga25vdyB0aGVz ZSBhcmUgc2V0IGhlcmUuICBNVVNUIHVuc2V0IHRoZW0gYmVmb3JlIHRoZSBkZWZpbml0aW9ucy4g Ki8KLSNkZWZpbmUgc2lnbmFsIHZzaWduYWwKLSNkZWZpbmUgYWxhcm0gdmFsYXJtCi1TSUdUWVAg KCp2c2lnbmFsKGludCB0eXBlLCBTSUdUWVAgKCpmdW5jKShpbnQpKSkoaW50KTsKLWludCB2YWxh cm0oaW50IGludGVydmFsKTsKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0KLSNpZmRlZiBBTUlHQQot I2RlZmluZSBzaWduYWwgYXNpZ25hbAotI2RlZmluZSBhbGFybSBhYWxhcm0KLSNkZWZpbmUgU0lH QUxSTSAoX05VTVNJRysxKQotI2RlZmluZSBTSUdUWVAgdm9pZAotU0lHVFlQICgqYXNpZ25hbChp bnQgdHlwZSwgU0lHVFlQICgqZnVuYykoaW50KSkpKGludCk7Ci11bnNpZ25lZCBhYWxhcm0odW5z aWduZWQpOwotI2VuZGlmIC8qIEFNSUdBICovCi0KLSNpZmRlZiBOVEFTTQotRFdPUkQKLWNrZ2V0 SVAodm9pZCkKLXsKLSAgIF9fYXNtCi0gICB7Ci0gICAgICBtb3YgZWF4LCBkd29yZCBwdHIgW2Vz cCsweDEwXQotICAgICAgam1wIGNrZ2V0SVAgKyAweDE4Ci0gICB9Ci0gICByZXR1cm4gMTsKLQot fQotI2VuZGlmIC8qIE5UQVNNICovCi0KLSNpZmRlZiBOVAotRFdPUkQKLWV4Y2VwdGlvbl9maWx0 ZXIoIHZvaWQgKQotewotICAgR2V0RXhjZXB0aW9uSW5mb3JtYXRpb24gOwotICAgcmV0dXJuKCBF WENFUFRJT05fRVhFQ1VURV9IQU5ETEVSICkgOwotfQotdm9pZAotY3Jhc2goIHZvaWQgKQotewot ICAgaW50IHggPSAwLCB5ID0gMCA7Ci0gICAgeCAvIHkgOwotfQotI2VuZGlmIC8qIE5UICovCi0K LSNpZm5kZWYgTk9DQ1RSQVAKLWludAotI2lmZGVmIENLX0FOU0lDCi1jY19leGVjdXRlKCBja2pw dHIoc2pfYnVmKSwgY2tfc2lnZnVuYyBkb2Z1bmMsIGNrX3NpZ2Z1bmMgZmFpbGZ1bmMgKQotI2Vs c2UKLWNjX2V4ZWN1dGUoIHNqX2J1ZiwgZG9mdW5jLCBmYWlsZnVuYykKLSAgICBja2pwdHIoc2pf YnVmKTsKLSAgICBja19zaWdmdW5jIGRvZnVuYzsKLSAgICBja19zaWdmdW5jIGZhaWxmdW5jOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBjY19leGVjdXRlICovIHsKLSAgICBpbnQgcmMgPSAw IDsKLSNpZmRlZiBOVEFTTQotICAgRFdPUkQgRWlwLCBFc3AgOwotICAgIGlzaW50ZXJydXB0ZWQg PSAwOwotICAgIHNqX2J1Zi0+cmV0Y29kZSA9IDAgOwotICAgIHNqX2J1Zi0+SWQgPSBHZXRDdXJy ZW50VGhyZWFkSWQoKSA7Ci0gICAgbWVtc2V0KCAmc2pfYnVmLT5jb250ZXh0LCAwLCBzaXplb2Yo Q09OVEVYVCkgKTsKLSAgICBzal9idWYtPmNvbnRleHQuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9G VUxMIDsKLSNpZm5kZWYgQ09NTUVOVAotICAgIEdldFRocmVhZENvbnRleHQoR2V0Q3VycmVudFRo cmVhZCgpLCAmKHNqX2J1Zi0+Y29udGV4dCkgKSA7Ci0gICAgX19hc20KLSAgICB7Ci0gICAgICAg ICAgbW92ICAgICAgIGVjeCxkd29yZCBwdHIgW3NqX2J1Zl0KLSAgICAgICAgICBtb3YgICAgICAg ZHdvcmQgcHRyIFtlY3grMHhjNF0sZXNwCi0gICAgfQotICAgc2pfYnVmLT5jb250ZXh0LkVGbGFn cyA9IDUzMCA7Ci0gICBzal9idWYtPmNvbnRleHQuRWlwID0gY2tnZXRJUCgpKzB4MEMgOwotI2Vs c2UgLyogQ09NTUVOVCAqLwotICAgX19hc20KLSAgIHsKLSAgICAgIG1vdiBlYXgsIGR3b3JkIHB0 ciBbc2pfYnVmXQotICAgICAgcHVzaCBlYXgKLSAgICAgIG1vdiBlYXgsIDB4ZmZmZmZmZmUKLSAg ICAgIHB1c2ggZWF4Ci0gICAgICBtb3YgZWF4LCAweDAwMDAwMDM5Ci0gICAgICBtb3YgZWR4LGVz cAotICAgICAgaW50IDB4MmUKLSAgICAgIHBvcCBlYXgKLSAgICAgIHBvcCBlYXgKLSAgIH0KLSNl bmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogTlRBU00gKi8KLSAgICBpZiAoCi0jaWZkZWYg TlRBU00KLSAgICAgICAgIGlzaW50ZXJydXB0ZWQKLSNlbHNlCi0JCSBja3NldGptcChja2pkcmVm KHNqX2J1ZikpCi0jZW5kaWYgLyogTlRBU00gKi8KLQkJICkgewotI2lmZGVmIE5UQVNNCi0gICAg ICAgICAgX19hc20KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtb3YgZXNwLCBFU1BU b1Jlc3RvcmUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlzaW50ZXJydXB0ZWQgPSAwIDsK LSNlbmRpZiAvKiBOVEFTTSAqLwotICAgICAgICAgICAgKCpmYWlsZnVuYykoTlVMTCkgOwotI2lm ZGVmIE5UQVNNCi0gICAgICAgICAgICAgcmMgPSBzal9idWYtPnJldGNvZGUgOwotI2Vsc2UgLyog TlRBU00gKi8KLSAgICAgICAgICAgICByYyA9IC0xIDsKLSNlbmRpZiAgLyogTlRBU00gKi8KLSAg ICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgIF9fdHJ5IHsKLSAgICAgICAg ICAgICAgICgqZG9mdW5jKShOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF9fZXhj ZXB0KGV4Y2VwdGlvbl9maWx0ZXIoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGRl YnVnKEYxMDAsImNjX2V4ZWN1dGUgX19leGNlcHQiLCIiLDApOwotICAgICAgICAgICAgICAgZGVi dWcoRjExMSwKLQkJICAgICAiZXhjZXB0aW9uX2ZpbHRlciIsCi0JCSAgICAgIl9leGNlcHRpb25f Y29kZSIsCi0JCSAgICAgZXRFeGNlcHRpb25Db2RlKCkKLQkJICAgICApOwotICAgICAgICAgICAg ICAgbG9uZ2ptcChja2pkcmVmKHNqX2J1ZiksU0lHSU5UKTsKLSAgICAgICAgICAgIH0KLSNlbHNl IC8qIE5UICovCi0gICAgICAgICAgICAoKmRvZnVuYykoTlVMTCk7Ci0jZW5kaWYgLyogTlQgKi8K LSAgICAgICAgIH0KLSAgIHJldHVybiByYyA7Ci19Ci0jZW5kaWYgLyogTk9DQ1RSQVAgKi8KLQot aW50Ci0jaWZkZWYgQ0tfQU5TSUMJCQkJLyogQU5TSUMgQyBkZWNsYXJhdGlvbi4uLiAqLwotYWxy bV9leGVjdXRlKGNranB0cihzal9idWYpLAotCSAgICAgaW50IHRpbW8sCi0JICAgICBja19zaWdo YW5kIGhhbmRsZXIsCi0JICAgICBja19zaWdmdW5jIGRvZnVuYywKLQkgICAgIGNrX3NpZ2Z1bmMg ZmFpbGZ1bmMKLQkgICAgICkKLQotI2Vsc2UgLyogTm90IEFOU0lDIEMgLi4uICovCi0KLWFscm1f ZXhlY3V0ZShzal9idWYsCi0JICAgICB0aW1vLAotCSAgICAgaGFuZGxlciwKLQkgICAgIGRvZnVu YywKLQkgICAgIGZhaWxmdW5jCi0JICAgICApCi0gICAgY2tqcHRyKHNqX2J1Zik7Ci0gICAgaW50 IHRpbW87Ci0gICAgY2tfc2lnaGFuZCBoYW5kbGVyOwotICAgIGNrX3NpZ2Z1bmMgZG9mdW5jOwot ICAgIGNrX3NpZ2Z1bmMgZmFpbGZ1bmM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLQotLyogYWxy bV9leGVjdXRlICovIHsKLQotICAgIGludCByYyA9IDA7Ci0gICAgaW50IHNhdmFscm0gPSAwOwot X1BST1RPVFlQKFNJR1RZUCAoKnNhdmhhbmRsZXIpLCAoaW50KSk7Ci0KLSAgICBzYXZhbHJtID0g YWxhcm0odGltbyk7Ci0gICAgc2F2aGFuZGxlciA9IHNpZ25hbChTSUdBTFJNLCBoYW5kbGVyKTsK LQotI2lmZGVmIE5UQVNNCi0gICAgc2pfYnVmLT5yZXRjb2RlID0gMCA7Ci0gICAgc2pfYnVmLT5J ZCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOwotICAgIG1lbXNldCgmc2pfYnVmLT5jb250ZXh0LCAw LCBzaXplb2YoQ09OVEVYVCkpOwotICAgIHNqX2J1Zi0+Y29udGV4dC5Db250ZXh0RmxhZ3MgPSBD T05URVhUX0ZVTEw7Ci0jaWZuZGVmIENPTU1FTlQKLSAgICBHZXRUaHJlYWRDb250ZXh0KEdldEN1 cnJlbnRUaHJlYWQoKSwgJihzal9idWYtPmNvbnRleHQpKTsKLSNlbHNlCi0gICBfX2FzbQotICAg ewotICAgICAgbW92IGVheCwgZHdvcmQgcHRyIFtzal9idWZdCi0gICAgICBwdXNoIGVheAotICAg ICAgbW92IGVheCwgMHhmZmZmZmZmZQotICAgICAgcHVzaCBlYXgKLSAgICAgIG1vdiBlYXgsIDB4 MDAwMDAwMzkKLSAgICAgIG1vdiBlZHgsZXNwCi0gICAgICBpbnQgMHgyZQotICAgICAgcG9wIGVh eAotICAgICAgcG9wIGVheAotICAgfQotI2VuZGlmCi0gICAgaXNpbnRlcnJ1cHRlZCA9IDA7Ci0j ZW5kaWYgLyogTlRBU00gKi8KLSAgICBpZiAoCi0jaWZkZWYgTlRBU00KLQkJIHNqX2J1Zi0+cmV0 Y29kZQotI2Vsc2UKLQkJIGNrc2V0am1wKGNramRyZWYoc2pfYnVmKSkKLSNlbmRpZiAvKiBOVEFT TSAqLwotCQkpIHsKLQkoKmZhaWxmdW5jKShOVUxMKSA7Ci0JcmMgPSAtMSA7Ci0gICAgfSBlbHNl IHsKLSNpZmRlZiBOVAotICAgICAgIF9fdHJ5IHsKLSAgICAgICAgICAoKmRvZnVuYykoTlVMTCkg OwotICAgICAgIH0KLSAgICAgICBfX2V4Y2VwdCggZXhjZXB0aW9uX2ZpbHRlcigpICkKLSAgICAg ICB7Ci0gICAgICAgICAgZGVidWcoRjEwMCwiYWxybV9leGVjdXRlIF9fZXhjZXB0IiwiIiwwKTsK LSAgICAgICAgICBkZWJ1ZyhGMTExLCJleGNlcHRpb25fZmlsdGVyIiwKLQkJIl9leGNlcHRpb25f Y29kZSIsCi0JCUdldEV4Y2VwdGlvbkNvZGUoKQotCQkpOwotICAgICAgICAgIGxvbmdqbXAoY2tq ZHJlZihzal9idWYpLFNJR0lOVCk7Ci0gICAgICAgfQotI2Vsc2UgLyogTlQgKi8KLSAgICAgICAo KmRvZnVuYykoTlVMTCkgOwotI2VuZGlmIC8qIE5UICovCi0gICAgfQotICAgIGFsYXJtKHNhdmFs cm0pIDsKLSAgICBpZiAoIHNhdmhhbmRsZXIgKQotICAgICAgICBzaWduYWwoIFNJR0FMUk0sIHNh dmhhbmRsZXIgKSA7Ci0gICAgcmV0dXJuIHJjIDsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMJ CQkJLyogQU5TSUMgQyBkZWNsYXJhdGlvbi4uLiAqLwotY2NfYWxybV9leGVjdXRlKGNranB0cihz al9idWYpLAotCQlpbnQgdGltbywKLQkJY2tfc2lnaGFuZCBoYW5kbGVyLAotCQlja19zaWdmdW5j IGRvZnVuYywKLQkJY2tfc2lnZnVuYyBmYWlsZnVuYwotCQkpCi0KLSNlbHNlIC8qIE5vdCBBTlNJ QyBDIC4uLiAqLwotCi1jY19hbHJtX2V4ZWN1dGUoc2pfYnVmLAotCSAgICAgdGltbywKLQkgICAg IGhhbmRsZXIsCi0JICAgICBkb2Z1bmMsCi0JICAgICBmYWlsZnVuYwotCSAgICAgKQotICAgIGNr anB0cihzal9idWYpOwotICAgIGludCB0aW1vOwotICAgIGNrX3NpZ2hhbmQgaGFuZGxlcjsKLSAg ICBja19zaWdmdW5jIGRvZnVuYzsKLSAgICBja19zaWdmdW5jIGZhaWxmdW5jOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi0KLS8qIGNjX2Fscm1fZXhlY3V0ZSAqLyB7Ci0KLSAgICBpbnQgcmMgPSAw OwotICAgIGludCBzYXZhbHJtID0gMDsKLV9QUk9UT1RZUChTSUdUWVAgKCpzYXZoYW5kbGVyKSwg KGludCkpOwotICAgIHNhdmFscm0gPSBhbGFybSh0aW1vKTsKLSAgICBzYXZoYW5kbGVyID0gc2ln bmFsKCBTSUdBTFJNLCBoYW5kbGVyICk7Ci0KLSNpZmRlZiBOVEFTTQotICAgIHNqX2J1Zi0+cmV0 Y29kZSA9IDAgOwotICAgIHNqX2J1Zi0+SWQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKSA7Ci0gICAg bWVtc2V0KCAmc2pfYnVmLT5jb250ZXh0LCAwLCBzaXplb2YoQ09OVEVYVCkgKTsKLSAgICBzal9i dWYtPmNvbnRleHQuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9GVUxMIDsKLSNpZm5kZWYgQ09NTUVO VAotICAgIEdldFRocmVhZENvbnRleHQoIEdldEN1cnJlbnRUaHJlYWQoKSwgJihzal9idWYtPmNv bnRleHQpICkgOwotI2Vsc2UKLSAgIF9fYXNtCi0gICB7Ci0gICAgICBtb3YgZWF4LCBkd29yZCBw dHIgW3NqX2J1Zl0KLSAgICAgIHB1c2ggZWF4Ci0gICAgICBtb3YgZWF4LCAweGZmZmZmZmZlCi0g ICAgICBwdXNoIGVheAotICAgICAgbW92IGVheCwgMHgwMDAwMDAzOQotICAgICAgbW92IGVkeCxl c3AKLSAgICAgIGludCAweDJlCi0gICAgICBwb3AgZWF4Ci0gICAgICBwb3AgZWF4Ci0gICB9Ci0j ZW5kaWYKLSAgICBpc2ludGVycnVwdGVkID0gMDsKLSNlbmRpZiAvKiBOVEFTTSAqLwotICAgIGlm ICgKLSNpZmRlZiBOVEFTTQotCQkgc2pfYnVmLT5yZXRjb2RlCi0jZWxzZQotCQkgY2tzZXRqbXAo Y2tqZHJlZihzal9idWYpKQotI2VuZGlmIC8qIE5UQVNNICovCi0JCSkgewotCSgqZmFpbGZ1bmMp KE5VTEwpIDsKLQlyYyA9IC0xIDsKLSAgICB9IGVsc2UgewotI2lmZGVmIE5UCi0gICAgICAgX190 cnkgewotICAgICAgICAgICgqZG9mdW5jKShOVUxMKSA7Ci0gICAgICAgfQotICAgICAgIF9fZXhj ZXB0KCBleGNlcHRpb25fZmlsdGVyKCkgKQotICAgICAgIHsKLQkgICBkZWJ1ZyhGMTAwLCJjY19h bHJtX2V4ZWN1dGUgX19leGNlcHQiLCIiLDApOwotCSAgIGRlYnVnKEYxMTEsCi0JCSAiZXhjZXB0 aW9uX2ZpbHRlciIsCi0JCSAiX2V4Y2VwdGlvbl9jb2RlIiwKLQkJIEdldEV4Y2VwdGlvbkNvZGUo KQotCQkgKTsKLQkgICBsb25nam1wKGNramRyZWYoc2pfYnVmKSxTSUdJTlQpIDsKLSAgICAgICB9 Ci0jZWxzZSAvKiBOVCAqLwotICAgICAgICgqZG9mdW5jKShOVUxMKSA7Ci0jZW5kaWYgLyogTlQg Ki8KLSAgICB9Ci0gICAgYWxhcm0oc2F2YWxybSk7Ci0gICAgaWYgKHNhdmhhbmRsZXIpCi0gICAg ICBzaWduYWwoU0lHQUxSTSxzYXZoYW5kbGVyKTsKLSAgICByZXR1cm4ocmMpOwotfQoKZGlmZiAt LWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1c2lnLmggYi9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXNpZy5oCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAzNDgyOTAwLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1c2lnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSAr MCwwIEBACi0vKiAgQyBLIFUgUyBJIEcgLiBIICAqLwotCi0vKiAgRGVmaW5pdGlvbnMgYW5kIHBy b3RvdHlwZXMgZm9yIHNpZ25hbCBoYW5kbGluZyAgKi8KLQotLyoKLSAgQXV0aG9yOiBKZWZmcmV5 IEUgQWx0bWFuIChqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tKSwKLSAgICAgICAgICAgIFNl Y3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eS4KLQotICBDb3B5cmlnaHQgKEMpIDE5 ODUsIDIwMDksCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0 eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1p dCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2Nt YWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotKi8KLQotI2lmZGVm IENLX0FOU0lDCi10eXBlZGVmIHZvaWQgKCpja19zaWdmdW5jKSh2b2lkICopOwotdHlwZWRlZiB2 b2lkICgqY2tfc2lnaGFuZCkoaW50KTsKLSNlbHNlCi10eXBlZGVmIFZPSUQgKCpja19zaWdmdW5j KSgpOwotdHlwZWRlZiBWT0lEICgqY2tfc2lnaGFuZCkoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotCi0vKiBNYWNyb3MgZm9yIFBPU0lYIHZzIG9sZC1zdHlsZSBzaWduYWwgaGFuZGxpbmcuICov Ci0KLSNpZmRlZiBDS19QT1NJWF9TSUcKLXR5cGVkZWYgc2lnam1wX2J1ZiBja2ptcGJ1ZjsKLSNl bHNlCi10eXBlZGVmIGptcF9idWYgY2tqbXBidWY7Ci0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICov Ci0vKgotICBTdXBwb3NlIHlvdSB3YW50IHRvIHBhc3MgdGhlIGFkZHJlc3Mgb2YgYSBqbXBfYnVm IGJhciB0byBhIGZ1bmN0aW9uIGZvby4KLSAgU2luY2Ugam1wX2J1ZiBpcyBub3JtYWxseSBkZWZp bmVkICh0eXBlZGVmJ2QpIGFzIGFuIGFycmF5LCB5b3Ugd291bGQgZG8KLSAgaXQgbGlrZSB0aGlz OiAgZm9vKGJhciksIHdoZXJlIGZvbyA9IGZvbyhqbXBfYnVmIGJhcikuICBCdXQgc3VwcG9zZSBh Ci0gIGptcF9idWYgaXMgKHNheSkgYSBzdHJ1Y3QgcmF0aGVyIHRoYW4gYW4gYXJyYXkuICBUaGVu IHlvdSBtdXN0IGRvCi0gIGZvbygmYmFyKSB3aGVyZSBmb28gaXMgZm9vKGptcF9idWYgKiBiYXIp LiAgVGhpcyBpcyBjb250cm9sbGVkIGhlcmUgaW4KLSAgdGhlIHRyYWRpdGlvbmFsIGZhc2hpb24s IGJ5IGlmZGVmcy4gIEJ5IGRlZmF1bHQsIHdlIGFzc3VtZSB0aGF0IGptcF9idWYKLSAgaXMgYW4g YXJyYXkuICBEZWZpbmUgdGhlIHN5bWJvbCBKQk5PVEFSUkFZIGlmIGptcF9idWYgaXMgbm90IGFu IGFycmF5LgotKi8KLSNpZm5kZWYgSkJOT1RBUlJBWQotI2lmZGVmIE5UCi0jZGVmaW5lIEpCTk9U QVJSQVkKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIEpCTk9UQVJSQVkgKi8KLQotI2lmZGVm IEpCTk9UQVJSQVkKLXR5cGVkZWYgY2tqbXBidWYgKiBja2pwdHI7Ci0jZGVmaW5lIGNramFkZHIo eCkgJiB4Ci0jZGVmaW5lIGNramRyZWYoeCkgKiB4Ci0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0jZGVm aW5lIGNrc2V0am1wKHgpIHNpZ3NldGptcCh4LDEpCi0jZWxzZQotI2RlZmluZSBja3NldGptcCh4 KSBzZXRqbXAoeCwxKQotI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLwotI2Vsc2UgIC8qIGptcF9i dWYgaXMgYW4gYXJyYXkgKi8KLXR5cGVkZWYgY2tqbXBidWYgY2tqcHRyOwotI2RlZmluZSBja2ph ZGRyKHgpIHgKLSNkZWZpbmUgY2tqZHJlZih4KSB4Ci0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0jZGVm aW5lIGNrc2V0am1wIHNpZ3NldGptcAotI2Vsc2UKLSNkZWZpbmUgY2tzZXRqbXAgc2V0am1wCi0j ZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0jZW5kaWYgLyogSkJOT1RBUlJBWSAqLwotCi1fUFJP VE9UWVAoIGludCBjY19leGVjdXRlLCAoY2tqcHRyLCBja19zaWdmdW5jLCBja19zaWdmdW5jKSAp OwotX1BST1RPVFlQKCBpbnQgYWxybV9leGVjdXRlLAotCSAgKGNranB0ciwKLQkgICBpbnQgdGlt bywKLQkgICBja19zaWdoYW5kIGhhbmRsZXIsCi0JICAgY2tfc2lnZnVuYywgY2tfc2lnZnVuYykg KTsKLV9QUk9UT1RZUCggaW50IGNjX2Fscm1fZXhlY3V0ZSwKLQkgIChja2pwdHIsCi0JICAgaW50 IHRpbW8sCi0JICAgY2tfc2lnaGFuZCBoYW5kbGVyLAotCSAgIGNrX3NpZ2Z1bmMsCi0JICAgY2tf c2lnZnVuYykgKTsKLQotLyogRW5kIG9mIGNrdXNpZy5oICovCi0KCmRpZmYgLS1naXQgYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXRpby5jIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V0aW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMGQ3OWUwYy4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrdXRpby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYwNTQgKzAsMCBAQAot I2RlZmluZSBDS1VUSU9fQwotCi0jaWZkZWYgYWVnaXMKLWNoYXIgKmNreHYgPSAiQWVnaXMgQ29t bXVuaWNhdGlvbnMgc3VwcG9ydCwgOS4wLjMyNiwgMjAgQXVndXN0IDIwMTEiOwotI2Vsc2UKLSNp ZmRlZiBQbGFuOQotY2hhciAqY2t4diA9ICJQbGFuIDkgQ29tbXVuaWNhdGlvbnMgc3VwcG9ydCwg OS4wLjMyNiwgMjAgQXVndXN0IDIwMTEiOwotI2Vsc2UKLWNoYXIgKmNreHYgPSAiVU5JWCBDb21t dW5pY2F0aW9ucyBzdXBwb3J0LCA5LjAuMzI2LCAyMCBBdWd1c3QgMjAxMSI7Ci0jZW5kaWYgLyog UGxhbjkgKi8KLSNlbmRpZiAvKiBhZWdpcyAqLwotCi0vKiAgQyBLIFUgVCBJIE8gICovCi0KLS8q IEMtS2VybWl0IGludGVycnVwdCwgY29tbXVuaWNhdGlvbnMgY29udHJvbCBhbmQgSS9PIGZ1bmN0 aW9ucyBmb3IgVU5JWCAqLwotCi0vKgotICBBdXRob3I6IEZyYW5rIGRhIENydXogKGZkY0Bjb2x1 bWJpYS5lZHUpLAotICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5 c3RlbXMsIE5ldyBZb3JrIENpdHkuCi0KLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDExLAotICAg IFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsu Ci0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQg ZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZv ciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLSovCi0KLS8qCi0gIE5PVEUgVE8gQ09OVFJJ QlVUT1JTOiBUaGlzIGZpbGUsIGFuZCBhbGwgdGhlIG90aGVyIEMtS2VybWl0IGZpbGVzLCBtdXN0 IGJlCi0gIGNvbXBhdGlibGUgd2l0aCBDIHByZXByb2Nlc3NvcnMgdGhhdCBzdXBwb3J0IG9ubHkg I2lmZGVmLCAjZWxzZSwgI2VuZGlmLAotICAjZGVmaW5lLCBhbmQgI3VuZGVmLiAgUGxlYXNlIGRv IG5vdCB1c2UgI2lmLCBsb2dpY2FsIG9wZXJhdG9ycywgb3Igb3RoZXIKLSAgcHJlcHJvY2Vzc29y IGZlYXR1cmVzIGluIGFueSBvZiB0aGUgcG9ydGFibGUgQy1LZXJtaXQgbW9kdWxlcy4gIFlvdSBj YW4sCi0gIG9mIGNvdXJzZSwgdXNlIHRoZXNlIGNvbnN0cnVjdGlvbnMgaW4gcGxhdGZvcm0tc3Bl Y2lmaWMgbW9kdWxlcyB3aGVuIHRoZXkKLSAgYXJlIHN1cHBvcnRlZCBieSBhbGwgY29tcGlsZXJz L3ByZXByb2Nlc3NvcnMgdGhhdCBjb3VsZCBiZSB1c2VkIG9uIHRoYXQKLSAgcGxhdGZvcm0uCi0q LwotCi1leHRlcm4gaW50IG5ldHR5cGU7CQkJLyogRGVmaW5lZCBpbiBja2NtYWkuYyAqLwotZXh0 ZXJuIGludCBkdXBsZXg7Ci0KLS8qIEluY2x1ZGVzICovCi0KLSNpbmNsdWRlICJja2NzeW0uaCIJ CQkvKiBUaGlzIG11c3QgZ28gZmlyc3QgICAqLwotI2luY2x1ZGUgImNrY2RlYi5oIgkJCS8qIFRo aXMgbXVzdCBnbyBzZWNvbmQgICovCi0KLSNpZmRlZiBPU0YxMwotI2lmZGVmIENLX0FOU0lDCi0j aWZkZWYgX05PX1BST1RPCi0jdW5kZWYgX05PX1BST1RPCi0jZW5kaWYgLyogX05PX1BST1RPICov Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNlbmRpZiAvKiBPU0YxMyAqLwotCi0jaWZuZGVmIEhQ VVhQUkU2NQotI2luY2x1ZGUgPGVycm5vLmg+CQkJLyogRXJyb3IgbnVtYmVyIHN5bWJvbHMgKi8K LSNlbHNlCi0jaWZuZGVmIEVSUk5PX0lOQ0xVREVECi0jaW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBF cnJvciBudW1iZXIgc3ltYm9scyAqLwotI2VuZGlmCS8qIEVSUk5PX0lOQ0xVREVEICovCi0jZW5k aWYJLyogSFBVWFBSRTY1ICovCi0KLSNpZmRlZiBfXzM4NkJTRF9fCi0jZGVmaW5lIEVOT1RDT05O IDU3Ci0jZWxzZQotI2lmZGVmIF9fYnNkaV9fCi0jZGVmaW5lIEVOT1RDT05OIDU3Ci0jZWxzZQot I2lmZGVmIF9fRnJlZUJTRF9fCi0jZGVmaW5lIEVOT1RDT05OIDU3Ci0jZW5kaWYgLyogX19GcmVl QlNEX18gKi8KLSNlbmRpZiAvKiBfX2JzZGlfXyAqLwotI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8K LQotI2lmZGVmIFNDT19PU1I1MDQKLSNkZWZpbmUgTkJCWSA4Ci0jZW5kaWYgLyogU0NPX09TUjUw NCAqLwotCi0jaWZkZWYgUGxhbjkKLSNkZWZpbmUgU0VMRUNUCi0jaW5jbHVkZSA8c3lzL3RpbWUu aD4KLSNpbmNsdWRlIDxzZWxlY3QuaD4KLSNkZWZpbmUgRkRfU0VUU0laRSAoMyAqIHNpemVvZihs b25nKSAqIDgpCi1zdGF0aWMgc3RydWN0IHRpbWV2YWwgdHY7Ci0jZW5kaWYgLyogUGxhbjkgKi8K LQotI2lmZGVmIENMSVgKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmIC8qIENMSVggKi8K LQotI2luY2x1ZGUgImNrY25ldC5oIgkJCS8qIFN5bWJvbHMgZm9yIG5ldHdvcmsgdHlwZXMuICov Ci0jaWZkZWYgQ0tfU1NMCi0jaW5jbHVkZSAiY2tfc3NsLmgiCi0jZW5kaWYgLyogQ0tfU1NMICov Ci0KLS8qCi0gIFRoZSBkaXJlY3RvcnktcmVsYXRlZCBpbmNsdWRlcyBhcmUgaGVyZSBiZWNhdXNl IHdlIG5lZWQgdG8gdGVzdCBzb21lCi0gIGZpbGUtc3lzdGVtLXJlbGF0ZWQgc3ltYm9scyB0byBm aW5kIG91dCB3aGljaCBzeXN0ZW0gd2UncmUgYmVpbmcgY29tcGlsZWQKLSAgdW5kZXIuICBGb3Ig ZXhhbXBsZSwgTUFYTkFNTEVOIGlzIGRlZmluZWQgaW4gQlNENC4yIGJ1dCBub3QgNC4xLgotKi8K LSNpZmRlZiBTRElSRU5UCQkJCS8qIERpcmVjdG9yeSBiaXRzLi4uICovCi0jZGVmaW5lIERJUkVO VAotI2VuZGlmIC8qIFNESVJFTlQgKi8KLQotI2lmZGVmIFhORElSCi0jaW5jbHVkZSA8c3lzL25k aXIuaD4KLSNlbHNlIC8qICFYTkRJUiAqLwotI2lmZGVmIE5ESVIKLSNpbmNsdWRlIDxuZGlyLmg+ Ci0jZWxzZSAvKiAhTkRJUiwgIVhORElSICovCi0jaWZkZWYgUlRVCi0jaW5jbHVkZSAiL3Vzci9s aWIvbmRpci5oIgotI2Vsc2UgLyogIVJUVSwgIU5ESVIsICFYTkRJUiAqLwotI2lmZGVmIERJUkVO VAotI2lmZGVmIFNESVJFTlQKLSNpbmNsdWRlIDxzeXMvZGlyZW50Lmg+Ci0jZWxzZQotI2luY2x1 ZGUgPGRpcmVudC5oPgotI2VuZGlmIC8qIFNESVJFTlQgKi8KLSNlbHNlIC8qICFSVFUsICFORElS LCAhWE5ESVIsICFESVJFTlQsIGkuZS4gYWxsIG90aGVycyAqLwotI2luY2x1ZGUgPHN5cy9kaXIu aD4KLSNlbmRpZiAvKiBESVJFTlQgKi8KLSNlbmRpZiAvKiBSVFUgKi8KLSNlbmRpZiAvKiBORElS ICovCi0jZW5kaWYgLyogWE5ESVIgKi8KLQotI2lmZGVmIFFOWAotI2luY2x1ZGUgPHN5cy9kZXYu aD4KLSNlbmRpZiAvKiBRTlggKi8KLQotI2lmZGVmIEhQVVg1Ci0jaWZuZGVmIFRDUFNPQ0tFVAot LyogSSBkb24ndCBrbm93IHdoeSB0aGlzIGlzIG5lZWRlZCBoZXJlIHNpbmNlIHdlIG5ldmVyIHJl ZmVyZW5jZSBiemVybygpLiAqLwotLyogQnV0IHdpdGhvdXQgaXQgQy1LZXJtaXQgd29uJ3QgbGlu ayBpbiBhbiBIUC1VWCA1Lnh4IG5vbi1UQ1AgYnVpbGQuICovCi12b2lkCi1iemVybyhzLG4pIGNo YXIgKnM7IGludCBuOyB7Ci0gICAgZXh0ZXJuIGNoYXIgKiBtZW1zZXQoKTsKLSAgICBtZW1zZXQo cywwLG4pOwotfQotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIEhQVVg1ICovCi0K LS8qIERlZmluaXRpb24gb2YgSFosIHVzZWQgaW4gbXNsZWVwKCkgKi8KLQotI2lmZGVmIE1JUFMK LSNkZWZpbmUgSFogKCAxMDAwIC8gQ0xPQ0tfVElDSyApCi0jZWxzZSAgLyogTUlQUyAqLwotI2lm ZGVmIEFUVFNWCi0jaWZuZGVmIE5BUAotI2lmZGVmIFRSUzE2Ci0jZGVmaW5lIEhaICggMTAwMCAv IENMT0NLX1RJQ0sgKQotI2VuZGlmIC8qIFRSUzE2ICovCi0jaWZkZWYgTkFQSEFDSwotI2RlZmlu ZSBuYXAoeCkgKHZvaWQpc3lzY2FsbCgzMTEyLCAoeCkpCi0jZGVmaW5lIE5BUAotI2VuZGlmIC8q IE5BUEhBQ0sgKi8KLSNlbmRpZiAvKiBOQVAgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlm IC8qIE1JUFMgKi8KLQotI2lmZGVmIE1fVU5JWAotI3VuZGVmIE5HUk9VUFNfTUFYCQkvKiBQcmV2 ZW50IG11bHRpcGxlIGRlZmluaXRpb24gd2FybmluZ3MgKi8KLSNlbmRpZiAvKiBNX1VOSVggKi8K LQotLyoKLSAgTk9URTogSFAtVVggOC4wIGhhcyBhIDxzeXMvcG9sbC5oPiwgYnV0IHRoZXJlIGlz IG5vIGNvcnJlc3BvbmRpbmcKLSAgbGlicmFyeSByb3V0aW5lLCBzbyBfcG9sbCBjb21lcyB1cCB1 bmRlZmluZWQgYXQgbGluayB0aW1lLgotKi8KLSNpZmRlZiBDS19QT0xMCi0jaWZuZGVmIEFJWFJT CQkJLyogSUJNIEFJWCBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nICovCi0jaW5jbHVkZSA8cG9sbC5o PgkJLyogInN0YW5kYXJkIiAoU1ZJRCkgaS9vIG11bHRpcGxleGluZywgZXRjICovCi0jZWxzZSAv KiBBSVhSUyAqLwotI2lmZGVmIFNWUjQJCQkvKiBBSVggMy4yIGlzIGxpa2UgU1ZJRC4uLiAqLwot I2luY2x1ZGUgPHBvbGwuaD4KLSNlbHNlCQkJCS8qIEJ1dCBBSVggMy4xIGlzIG5vdCAuLi4gKi8K LSNpbmNsdWRlIDxzeXMvcG9sbC5oPgkJLyogVGhlIGluY2x1ZGUgZmlsZSBpcyBpbiBpbmNsdWRl L3N5cyAqLwotI2RlZmluZSBldmVudHMgcmVxZXZlbnRzCS8qIEFuZCBpdCBkb2VzIG5vdCBtYXAg SUJNLXNwZWNpZmljIG1lbWJlciAqLwotI2RlZmluZSByZXZlbnRzIHJ0bmV2ZW50cwkvKiBuYW1l cyB0byB0aGUgU3lzdGVtIFYgZXF1aXZhbGVudHMgKi8KLSNlbmRpZiAvKiBTVlI0ICovCi0jZW5k aWYgLyogQUlYUlMgKi8KLSNlbmRpZiAvKiBDS19QT0xMICovCi0KLSNpbmNsdWRlIDxzaWduYWwu aD4gICAgICAgICAgICAgICAgICAgICAvKiBTaWduYWxzICovCi0KLS8qIEZvciBzZXRqbXAgYW5k IGxvbmdqbXAgKi8KLQotI2lmbmRlZiBaSUxPRwotI2luY2x1ZGUgPHNldGptcC5oPgotI2Vsc2UK LSNpbmNsdWRlIDxzZXRyZXQuaD4KLSNlbmRpZiAvKiBaSUxPRyAqLwotCi0vKgotICBUaGUgZm9s bG93aW5nIHRlc3QgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiA0LjEgQlNEIGFuZCA0LjIgJiBsYXRl ci4KLSAgSWYgeW91IGhhdmUgYSA0LjFCU0Qgc3lzdGVtIHdpdGggdGhlIERJUkVOVCBsaWJyYXJ5 LCB0aGlzIHRlc3QgY291bGQKLSAgbWlzdGFrZW5seSBkaWFnbm9zZSA0LjJCU0QgYW5kIHRoZW4g bGF0ZXIgZW5hYmxlIHRoZSB1c2Ugb2Ygc3lzdGVtIGNhbGxzCi0gIHRoYXQgYXJlbid0IGRlZmlu ZWQuICBJZiBpbmRlZWQgdGhlcmUgYXJlIHN1Y2ggc3lzdGVtcywgd2UgY2FuIHVzZSBzb21lCi0g IG90aGVyIHdheSBvZiB0ZXN0aW5nIGZvciA0LjFCU0QsIG9yIGFkZCB5ZXQgYW5vdGhlciBjb21w aWxlLXRpbWUgc3dpdGNoLgotKi8KLSNpZmRlZiBCU0Q0Ci0jaWZkZWYgTUFYTkFNTEVOCi0jaWZu ZGVmIEZUMjEJCQkJLyogRXhjZXB0IGZvciBGb3J0dW5lLiAqLwotI2lmbmRlZiBGVDE4Ci0jaWZu ZGVmIEJFTExWMTAJCQkJLyogQW5kIEJlbGwgTGFicyBSZXNlYXJjaCBVTklYIFYxMCAqLwotI2Rl ZmluZSBCU0Q0MgotI2VuZGlmIC8qIEJFTExWMTAgKi8KLSNlbmRpZiAvKiBGVDE4ICovCi0jZW5k aWYgLyogRlQyMSAqLwotI2VuZGlmIC8qIE1BWE5BTUxFTiAqLwotI2VuZGlmIC8qIEJTRDQgKi8K LQotI2lmZGVmIFNVTk9TNDEJCQkJLyogRnJvbSBDaHJpc3RpYW4gQ29ydGkgKi8KLSNkZWZpbmUg QlNENDRPUlBPU0lYCQkJLyogVW5pIFN0dXR0Z2FydCAqLwotI2RlZmluZSBTVk9SUE9TSVgJCQkv KiBGZWJydWFyeSAyMDEwICovCi0jaW5jbHVkZSA8dGVybWlvcy5oPgotI2luY2x1ZGUgPHN5cy9p b2N0bC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2VuZGlm CS8qIFNVTk9TNDEgKi8KLQotI2lmZGVmIFNOSTU0MgotI2luY2x1ZGUgPHN5cy9maWxpby5oPgkJ CS8qIDI5OSBmb3IgRklPTlJFQUQgKi8KLSNlbmRpZgkvKiBTTkk1NDIgKi8KLQotLyoKLSAgTWlu aXggMi4wIHN1cHBvcnQgYWRkZWQgYnkgVGVycnkgTWNDb25uZWxsLAotICBTeXJhY3VzZSBVbml2 ZXJzaXR5IDx0bWNAYmFybnlhcmQuc3lyLmVkdT4KLSAgTm8gbW9yZSBzZ3R0eSBpbnRlcmZhY2Us IHBvc2l4IGNvbXBsaWFudC4KLSovCi0jaWZkZWYgTUlOSVgyCi0jZGVmaW5lIF9NSU5JWCAgIC8q IE5lZWRlZCBmb3Igc29tZSBNaW5peCBoZWFkZXIgZmlsZXMgKi8KLSNkZWZpbmUgQlNENDRPUlBP U0lYCi0jZGVmaW5lIFNWT1JQT1NJWAotI2lmbmRlZiBNSU5JWDMKLSNkZWZpbmUgRENMVElNRVZB TAotI2VuZGlmCS8qIE1JTklYMyAqLwotI2RlZmluZSBOT0ZJTEVICi0jaW5jbHVkZSA8c3lzL3R5 cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8dGVybWlvcy5oPgotI2lu Y2x1ZGUgPGxpbWl0cy5oPgotI3VuZGVmIFRJT0NHRVRDICAgIC8qIGRlZmluZWQgaW4gc3lzL2lv Y3RsLmgsIGJ1dCBub3QgcmVhbGx5IHN1cHBvcnRlZCAqLwotI2RlZmluZSBUQU5ERU0gMAotI2Vu ZGlmIC8qIE1JTklYMiAqLwotCi0vKgotIE1JTklYIDEuMCBzdXBwb3J0IGFkZGVkIGJ5IENoYXJs ZXMgSGVkcmljaywKLSBSdXRnZXJzIFVuaXZlcnNpdHkgPGhlZHJpY2tAYXJhbWlzLnJ1dGdlcnMu ZWR1Pi4KLSBNSU5JWCBhbHNvIGhhcyBWNyBlbmFibGVkLgotKi8KLSNpZmRlZiBNSU5JWAotI2Rl ZmluZSBUQU5ERU0gMAotI2RlZmluZSBNWVJFQUQKLSNkZWZpbmUgTk9TWVNJT0NUTEgKLSNpbmNs dWRlIDxsaW1pdHMuaD4KLSNlbmRpZiAvKiBNSU5JWCAqLwotCi0jaWZkZWYgQ0tfUkVESVIJCS8q IDxzeXMvd2FpdC5oPiBuZWVkZWQgb25seSBmb3IgUkVESVJFQ1QgY29tbWFuZC4gKi8KLS8qCi0g IElmIGFueWJvZHkgY2FuIGZpZ3VyZSBvdXQgaG93IHRvIG1ha2UgdGhpcyB3b3JrIHdpdGggTmVY VFNURVAsIGJlCi0gIG15IGd1ZXN0ISAgKE5lWFRCbGFoL05lWFRCbGFoL2JzZC9zeXMvd2FpdC5o IGRvZXMgbm90IGRlZmluZSBXRVhJVFNUQVRVUykKLSovCi0jaWZuZGVmIENLX1dBSVRfSAkJCS8q IElmIHdhaXQuaCBub3QgYWxyZWFkeSBpbmNsdWRlZC4uLiAqLwotI2lmZGVmIE9TRgkJCQkvKiBm b3JjZSBPU0YgdG8gc2VsZWN0IFBPU0lYIHdhaXQgKi8KLSNpZmRlZiBfQlNECQkJCS8qIGluc3Rl YWQgb2YgQlNEIChzZWUgY2tjZGViLmgpICovCi0jZGVmaW5lIENLX09TRl9CU0QKLSN1bmRlZiBf QlNECi0jZW5kaWYgLyogX0JTRCAqLwotI2VuZGlmIC8qIE9TRiAqLwotI2luY2x1ZGUgPHN5cy93 YWl0Lmg+CQkJLyogSW5jbHVkZSBpdCAqLwotI2lmZGVmIE9TRgotI2lmZGVmIENLX09TRl9CU0QK LSNkZWZpbmUgX0JTRAkJCQkvKiBSZXN0b3JlIGl0ICovCi0jdW5kZWYgQ0tfT1NGX0JTRAotI2Vu ZGlmIC8qIENLX09TRl9CU0QgKi8KLSNlbmRpZiAvKiBPU0YgKi8KLSNlbmRpZiAvKiBDS19XQUlU X0ggKi8KLSNlbmRpZiAvKiBDS19SRURJUiAqLwotCi0jaW5jbHVkZSAiY2t1dmVyLmgiCQkJLyog VmVyc2lvbiBoZXJhbGQgKi8KLWNoYXIgKmNreHN5cyA9IEhFUkFMRDsKLQotI2lmZGVmIENLX1VU U05BTUUKLSNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgotCi0jaWZkZWYgVFJVNjQJCQkJLyogVHJ1 NjQgVU5JWCA0LjAgYW5kIGxhdGVyICovCi0vKiBWZXJpZmllZCBvbiBUcnU2NCA0LjBGIC0gbWln aHQgYnJlYWsgb24gNC4wRSBvciBlYXJsaWVyICovCi0jaW5jbHVkZSA8c3lzL3N5c2luZm8uaD4J CS8qIChkb24ndCBrbm93IGFib3V0IE9TRi8xIG9yIERVKSAqLwotI2luY2x1ZGUgPG1hY2hpbmUv aGFsX3N5c2luZm8uaD4KLSNlbmRpZiAvKiBUUlU2NCAqLwotCi0jaWZkZWYgU09MQVJJUzI1CQkJ LyogU29sYXJpcyAyLjUgYW5kIGxhdGVyICovCi0jaW5jbHVkZSA8c3lzL3N5c3RlbWluZm8uaD4J CS8qIChkb24ndCBrbm93IGFib3V0IGVhcmxpZXIgb25lcykgKi8KLSNlbmRpZiAvKiBTT0xBUklT MjUgKi8KLQotI2lmZGVmIFVXNwotI2lmbmRlZiBTWVNfTk1MTgotI2RlZmluZSBTWVNfTk1MTiAy NTcKLSNlbmRpZiAvKiBOTUxOICovCi0jZW5kaWYgLyogVVc3ICovCi0jaWZkZWYgSFBVWDlQTFVT Ci1zdGF0aWMgaW50IGhwaXM4MDAgPSAwOwotI2VuZGlmIC8qIEhQVVg5UExVUyAqLwotI2lmZGVm IFNZU19OTUxOCi0jZGVmaW5lIENLX1NZU05NTE4gU1lTX05NTE4KLSNlbHNlCi0jaWZkZWYgX1NZ U19OTUxOCi0jZGVmaW5lIENLX1NZU05NTE4gX1NZU19OTUxOCi0jZWxzZQotI2lmZGVmIFVUU0xF TgotI2RlZmluZSBDS19TWVNOTUxOIFVUU0xFTgotI2Vsc2UKLSNkZWZpbmUgQ0tfU1lTTk1MTiAz MQotI2VuZGlmIC8qIFVUU0xFTiAqLwotI2VuZGlmIC8qIF9TWVNfTk1MTiAqLwotI2VuZGlmIC8q IFNZU19OTUxOICovCi1jaGFyIHVubV9tY2hbQ0tfU1lTTk1MTisxXSA9IHsgJ1wwJywgJ1wwJyB9 OwotY2hhciB1bm1fbW9kW0NLX1NZU05NTE4rMV0gPSB7ICdcMCcsICdcMCcgfTsKLWNoYXIgdW5t X25hbVtDS19TWVNOTUxOKzFdID0geyAnXDAnLCAnXDAnIH07Ci1jaGFyIHVubV9yZWxbQ0tfU1lT Tk1MTisxXSA9IHsgJ1wwJywgJ1wwJyB9OwotY2hhciB1bm1fdmVyW0NLX1NZU05NTE4rMV0gPSB7 ICdcMCcsICdcMCcgfTsKLSNlbmRpZiAvKiBDS19VVFNOQU1FICovCi0KLSNpZmRlZiBDSUUKLSNp bmNsdWRlIDxzdGF0Lmg+CQkJLyogRm9yIGNoYXNpbmcgc3ltbGlua3MsIGV0Yy4gKi8KLSNlbHNl Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZiAvKiBDSUUgKi8KLQotI2lmZGVmIFFOWAkJ CQkvKiAyOTkgKi8KLSNpZm5kZWYgSVhBTlkKLSNkZWZpbmUgSVhBTlkgMAotI2VuZGlmCS8qIElY QU5ZICovCi0jZW5kaWYJLyogUU5YICovCi0KLS8qIFVVQ1AgbG9ja2ZpbGUgbWF0ZXJpYWwuLi4g Ki8KLQotI2lmbmRlZiBOT1VVQ1AKLSNpZmRlZiBVU0VUVFlMT0NLCi0jaWZkZWYgSEFWRV9MT0NL REVWCQkJLyogUmVkIEhhdCBiYXVkYm95L2xvY2tkZXYgKi8KLS8qCi0gIFdhdGNoIG91dDogYmF1 ZGJveS5oIHJlZmVyZW5jZXMgb3BlbigpIHdpdGhvdXQgbWFraW5nIHN1cmUgaXQgaGFzIGJlZW4K LSAgZGVjbGFyZWQsIHJlc3VsdGluZyBpbiB3YXJuaW5ncyBvbiBhdCBsZWFzdCBSZWQgSGF0IDcu My4gIEl0J3MgZGVjbGFyZWQgaW4KLSAgZmNudGwuaCwgYnV0IHdlIGRvbid0IGluY2x1ZGUgdGhh dCB1bnRpbCBsYXRlci4gIEluIHRoaXMgY2FzZSBvbmx5LCB3ZQotICBpbmNsdWRlIGl0IGhlcmUs IGFuZCB0aGVuIHRoZSBzZWNvbmQgaW5jbHVkZSBpcyBoYXJtbGVzcyBiZWNhdXNlIGluIFJlZCBI YXQKLSAgTGludXggKHRoZSBvbmx5IHBsYWNlIHdoZXJlIHlvdSBmaW5kIGJhdWRib3kuaCkgZmNu dGwuaCBpcyBwcm90ZWN0ZWQgZnJvbQotICBtdWx0aXBsZSBpbmNsdXNpb24gYnkgX0ZDTlRMX0gu ICAgLSBmZGMsIDEwIE1heSAyMDA0LgotCi0gIE5PVEU6IEFsdGhvdWdoIExpbnV4IC91c3Ivc2Jp bi9sb2NrZGV2IG9idmlhdGVzIHRoZSBuZWVkIGZvciBzZXR1aWQgb3IKLSAgc2V0Z2lkIGJpdHMg dG8gYWNjZXNzIHRoZSBsb2NrZmlsZSwgQy1LZXJtaXQgd2lsbCBzdGlsbCBuZWVkIHRoZW0gdG8g YWNjZXNzCi0gIHRoZSBzZXJpYWwgcG9ydCBpdHNlbGYgdW5sZXNzIHRoZSBwb3J0IGlzIG9wZW4g Zm9yIHdvcmxkIHJlYWQvd3JpdGUuCi0gIE5vcm1hbGx5IHNldGdpZCB1dWNwIGRvZXMgdGhlIHRy aWNrLgotCi0gIEV4dHJhOiBIQVZFX0xPQ0tERVYgaGFzIGJlZW4gYWRkZWQgYWxzIG9wZW5TdVNF ID49IDExLjMgZG9lc24ndCB1c2UgYmF1ZGJveQotICBidXQgdHR5bG9jay4gIC0gamIsIDI2IEp1 bCAyMDEwCi0qLwotI2luY2x1ZGUgPGZjbnRsLmg+CQkJLyogVGhpcyBoYXMgdG8gY29tZSBiZWZv cmUgYmF1ZGJveSAqLwotI2lmZGVmIEhBVkVfQkFVREJPWQkJCS8qIFJlZCBIYXQgYmF1ZGJveS9s b2NrZGV2ICovCi0jaW5jbHVkZSA8YmF1ZGJveS5oPgotI2Vsc2UgIC8qICFIQVZFX0JBVURCT1kg Ki8JCS8qIG9wZW5TdVNFIGxvY2sgdmlhIHR0eWxvY2sgKi8KLSNpbmNsdWRlIDx0dHlsb2NrLmg+ Ci0jZW5kaWYgIC8qIEhBVkVfQkFVREJPWSAqLwotI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9sb2Nr IgkJLyogKGV2ZW4gdGhvdWdoIHdlIGRvbid0IGNhcmUpICovCi0KLSNlbHNlICAvKiAhSEFWRV9M T0NLREVWICovCi0KLSNpZmRlZiBVU0VfVVVfTE9DSwotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5j bHVkZSA8bGlidXRpbC5oPgkJCS8qIEZyZWVCU0QgKi8KLSNlbHNlCi0jaW5jbHVkZSA8dXRpbC5o PgkJCS8qIE9wZW5CU0QgKi8KLSNlbmRpZiAvKiBIQVZFX0xPQ0tERVYgKi8KLSNlbmRpZiAvKiBf X0ZyZWVCU0QgKi8KLSNlbmRpZiAvKiBVU0VfVVVfTE9DSyAqLwotI2Vsc2UgIC8qIFVTRVRUWUxP Q0sgKi8KLQotLyogTmFtZSBvZiBVVUNQIHR0eSBkZXZpY2UgbG9ja2ZpbGUgKi8KLQotI2lmZGVm IExJTlVYRlNTVE5ECi0jaWZuZGVmIEhEQlVVQ1AKLSNkZWZpbmUgSERCVVVDUAotI2VuZGlmIC8q IEhEQlVVQ1AgKi8KLSNlbmRpZiAvKiBMSU5VWEZTU1RORCAqLwotCi0jaWZkZWYgQUNVQ05UUkwK LSNkZWZpbmUgTENLRElSCi0jZW5kaWYgLyogQUNVQ05UUkwgKi8KLQotLyoKLSAgUElEU1RSSU5H IG1lYW5zIHVzZSBBU0NJSSBzdHJpbmcgdG8gcmVwcmVzZW50IHBpZCBpbiBsb2NrZmlsZS4KLSov Ci0jaWZuZGVmIFBJRFNUUklORwotI2lmZGVmIEhEQlVVQ1AKLSNkZWZpbmUgUElEU1RSSU5HCi0j ZWxzZQotI2lmZGVmIEJTRDQ0Ci0jZGVmaW5lIFBJRFNUUklORwotI2Vsc2UKLSNpZmRlZiBSVEFJ WAotI2RlZmluZSBQSURTVFJJTkcKLSNlbHNlCi0jaWZkZWYgQUlYUlMKLSNkZWZpbmUgUElEU1RS SU5HCi0jZWxzZQotI2lmZGVmIENPSEVSRU5UCi0jZGVmaW5lIFBJRFNUUklORwotI2VuZGlmIC8q IENPSEVSRU5UICovCi0jZW5kaWYgLyogQUlYUlMgKi8KLSNlbmRpZiAvKiBSVEFJWCAqLwotI2Vu ZGlmIC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogSERCVVVDUCAqLwotI2VuZGlmIC8qIFBJRFNUUklO RyAqLwotCi0vKiBOb3cgdGhlIFBJRFNUUklORyBleGNlcHRpb25zLi4uICovCi0KLSNpZmRlZiBQ SURTVFJJTkcKLSNpZmRlZiBIUFVYCi0jdW5kZWYgUElEU1RSSU5HCi0jZW5kaWYgLyogSFBVWCAq LwotI2VuZGlmIC8qIFBJRFNUUklORyAqLwotCi0jaWZkZWYgX19ic2RpX18JCQkJLyogQlNESSAo YXQgbGVhc3QgdGhydSAxLjEpICovCi0jaWZkZWYgUElEU1RSSU5HCi0jdW5kZWYgUElEU1RSSU5H Ci0jZW5kaWYgLyogUElEU1RSSU5HICovCi0jZW5kaWYgLyogX19ic2RpX18gKi8KLQotI2lmZGVm IE9TRjMyCQkJCS8qIERpZ2l0YWwgVU5JWCAoT1NGLzEpIDMuMiAqLwotI2lmZGVmIFBJRFNUUklO RwotI3VuZGVmIFBJRFNUUklORwotI2VuZGlmIC8qIFBJRFNUUklORyAqLwotI2VuZGlmIC8qIE9T RjMyICovCi0KLS8qCi0gIExPQ0tfRElSIGlzIHRoZSBuYW1lIG9mIHRoZSBsb2NrZmlsZSBkaXJl Y3RvcnkuCi0gIElmIExPQ0tfRElSIGlzIGFscmVhZHkgZGVmaW5lZCAoZS5nLiBvbiBjb21tYW5k IGxpbmUpLCB3ZSBkb24ndCBjaGFuZ2UgaXQuCi0qLwotCi0jaWZuZGVmIExPQ0tfRElSCi0jaWZk ZWYgTUFDT1NYCi0jZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29sL2xvY2siCi0jZW5kaWYgLyog TUFDT1NYICovCi0jZW5kaWYvKiBMT0NLX0RJUiAqLwotCi0jaWZuZGVmIExPQ0tfRElSCi0jaWZk ZWYgQlNENDQKLSNpZmRlZiBfXzM4NkJTRF9fCi0jZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29s L2xvY2siCi0jZWxzZQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jZGVmaW5lIExPQ0tfRElSICIvdmFy L3Nwb29sL2xvY2siCi0jZWxzZQotI2lmZGVmIF9fTmV0QlNEX18KLSNkZWZpbmUgTE9DS19ESVIg Ii92YXIvc3Bvb2wvbG9jayIKLSNlbHNlCi0jaWZkZWYgX19PcGVuQlNEX18KLSNkZWZpbmUgTE9D S19ESVIgIi92YXIvc3Bvb2wvbG9jayIKLSNlbHNlCi0vKiBTbyB3aGljaCBvbmVzIGlzIHRoaXMg Zm9yPyAqLwotLyogUHJvYmFibHkgb3JpZ2luYWwgNC40QlNEIG9uIFZhbmdvZ2ggKi8KLS8qIFBs dXMgd2hvIGtub3dzIGFib3V0IE1hYyBPUyBYLi4uIEl0IGRvZXNuJ3QgZXZlbiBoYXZlIGEgY3Ug cHJvZ3JhbSAqLwotI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC91dWNwIgotI2VuZGlmIC8q IF9fT3BlbkJTRF9fICovCi0jZW5kaWYgLyogX19OZXRCU0RfXyAqLwotI2VuZGlmIC8qIF9fRnJl ZUJTRF9fICovCi0jZW5kaWYgLyogX18zODZCU0RfXyAqLwotI2Vsc2UKLSNpZmRlZiBER1VYNDMw Ci0jZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29sL2xvY2tzIgotI2Vsc2UKLSNpZmRlZiBIUFVY MTAKLSNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9ja3MiCi0jZWxzZQotI2lmZGVmIFJU QUlYCQkJCS8qIElCTSBSVCBQQyBBSVggMi4yLjEgKi8KLSNkZWZpbmUgTE9DS19ESVIgIi9ldGMv bG9ja3MiCi0jZWxzZQotI2lmZGVmIEFJWFJTCi0jZGVmaW5lIExPQ0tfRElSICIvZXRjL2xvY2tz IgotI2Vsc2UKLSNpZmRlZiBJU0lJSQotI2RlZmluZSBMT0NLX0RJUiAiL2V0Yy9sb2NrcyIKLSNl bHNlCi0jaWZkZWYgSERCVVVDUAotI2lmZGVmIE1fU1lTNQotI2RlZmluZSBMT0NLX0RJUiAiL3Vz ci9zcG9vbC91dWNwIgotI2Vsc2UKLSNpZmRlZiBNX1VOSVgKLSNkZWZpbmUgTE9DS19ESVIgIi91 c3Ivc3Bvb2wvdXVjcCIKLSNlbHNlCi0jaWZkZWYgU1ZSNAotI2RlZmluZSBMT0NLX0RJUiAiL3Zh ci9zcG9vbC9sb2NrcyIKLSNlbHNlCi0jaWZkZWYgU1VOT1M0Ci0jZGVmaW5lIExPQ0tfRElSICIv dmFyL3Nwb29sL2xvY2tzIgotI2Vsc2UKLSNpZmRlZiBMSU5VWEZTU1RORAotI2RlZmluZSBMT0NL X0RJUiAiL3Zhci9sb2NrIjsKLSNlbHNlCi0jZGVmaW5lIExPQ0tfRElSICIvdXNyL3Nwb29sL2xv Y2tzIgotI2VuZGlmIC8qIExJTlVYRlNTVE5EICovCi0jZW5kaWYgLyogU1VOT1M0ICovCi0jZW5k aWYgLyogU1ZSNCAqLwotI2VuZGlmIC8qIE1fVU5JWCAqLwotI2VuZGlmIC8qIE1fU1lTNSAqLwot I2Vsc2UKLSNpZmRlZiBMQ0tESVIKLSNkZWZpbmUgTE9DS19ESVIgIi91c3Ivc3Bvb2wvdXVjcC9M Q0siCi0jZWxzZQotI2lmZGVmIENPSEVSRU5UCi0jZGVmaW5lIExPQ0tfRElSICIvdXNyL3Nwb29s L3V1Y3AiCi0jZWxzZQotI2RlZmluZSBMT0NLX0RJUiAiL3Vzci9zcG9vbC91dWNwIgotI2VuZGlm IC8qIENPSEVSRU5UICovCi0jZW5kaWYgLyogTENLRElSICovCi0jZW5kaWYgLyogSERCVVVDUCAq LwotI2VuZGlmIC8qIElTSUlJICovCi0jZW5kaWYgLyogQUlYUlMgKi8KLSNlbmRpZiAvKiBSVEFJ WCAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlmIC8qIERHVVg0MzAgKi8KLSNlbmRpZiAv KiBCU0Q0NCAqLwotI2VuZGlmIC8qICFMT0NLX0RJUiAob3V0c2lkZSBpZm5kZWYpICovCi0KLSNp ZmRlZiBPU0YyCQkJCS8qIE9TRi8xIDIuMCBvciBsYXRlciAqLwotI2lmZGVmIExPQ0tfRElSCQkJ CS8qIChtYXliZSAxLnggdG9vLCB3aG8ga25vd3MuLi4pICovCi0jdW5kZWYgTE9DS19ESVIKLSNk ZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9ja3MiCi0jZW5kaWYgLyogTE9DS19ESVIgKi8K LSNlbmRpZiAvKiBPU0YyICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBTb3JyeSBubyBtb3JlIGxv Y2tmKCkgLS0gd2UgbG9jayBmaXJzdCBhbmQgVEhFTiBvcGVuIHRoZSBkZXZpY2UuICovCi0jaWZk ZWYgU1ZSNAotI2lmbmRlZiBCU0Q0NAotI2lmbmRlZiBMT0NLRgotI2RlZmluZSBMT0NLRgkJCQkv KiBVc2UgbG9ja2YoKSBvbiB0dHkgZGV2aWNlIGluIFNWUjQgKi8KLSNlbmRpZiAvKiBMT0NLRiAq LwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogU1ZSNCAqLwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQotI2lmZGVmIE5PTE9DS0YJCQkJLyogQnV0IE5PTE9DS0YgY2FuY2VscyBMT0NLRiAq LwotI2lmZGVmIExPQ0tGCi0jdW5kZWYgTE9DS0YKLSNlbmRpZiAvKiBMT0NLRiAqLwotI2VuZGlm IC8qIE5PTE9DS0YgKi8KLQotLyogTW9yZSBhYm91dCB0aGlzIGJlbG93Li4uICovCi0KLSNlbmRp ZiAvKiBVU0VUVFlMT0NLICovCi0jZW5kaWYgLyogTk9VVUNQICovCi0KLS8qCi0gIE1ZUkVBRCBt ZWFucyB1c2Ugb3VyIGludGVybmFsbHkgZGVmaW5lZCBub25ibG9ja2luZyBidWZmZXJlZCByZWFk IHJvdXRpbmUuCi0qLwotI2lmZGVmIEFUVFNWCi0jZGVmaW5lIE1ZUkVBRAotI2VuZGlmIC8qIEFU VFNWICovCi0KLSNpZmRlZiBBVFQ3MzAwCi0jaWZuZGVmIE1ZUkVBRAotI2RlZmluZSBNWVJFQUQK LSNlbmRpZiAvKiBNWVJFQUQgKi8KLS8qIGJpdHMgZm9yIGF0dG1vZGVtOiBpbnRlcm5hbCBtb2Rl bSBpbiB1c2UsIHJlc3RhcnQgZ2V0dHkgKi8KLSNkZWZpbmUgSVNNT0RFTSAxCi0jZGVmaW5lIERP R0VUWSA1MTIKLSNlbmRpZiAgLyogQVRUNzMwMCAqLwotCi0jaWZkZWYgQlNENDIKLSNkZWZpbmUg TVlSRUFECi0jZW5kaWYgLyogQlNENDIgKi8KLQotI2lmZGVmIFBPU0lYCi0jZGVmaW5lIE1ZUkVB RAotI2VuZGlmIC8qIFBPU0lYICovCi0jaWZkZWYgX19ic2RpX18KLSNpZm5kZWYgT19OREVMQVkK LSNkZWZpbmUgT19OREVMQVkgT19OT05CTE9DSwotI2VuZGlmIC8qIE9fTkRFTEFZICovCi0jZW5k aWYgLyogX19ic2RpX18gKi8KLQotLyoKLSBWYXJpYWJsZXMgYXZhaWxhYmxlIHRvIG91dHNpZGUg d29ybGQ6Ci0KLSAgIGRmdHR5ICAtLSBQb2ludGVyIHRvIGRlZmF1bHQgdHR5IG5hbWUgc3RyaW5n LCBsaWtlICIvZGV2L3R0eSIuCi0gICBkZmxvYyAgLS0gMCBpZiBkZnR0eSBpcyBjb25zb2xlLCAx IGlmIGV4dGVybmFsIGxpbmUuCi0gICBkZnBydHkgLS0gRGVmYXVsdCBwYXJpdHkKLSAgIGRmZmxv dyAtLSBEZWZhdWx0IGZsb3cgY29udHJvbAotICAgY2t4ZWNoIC0tIEZsYWcgZm9yIHdobyBlY2hv ZXMgY29uc29sZSB0eXBlaW46Ci0gICAgIDEgLSBUaGUgcHJvZ3JhbSAoc3lzdGVtIGVjaG8gaXMg dHVybmVkIG9mZikKLSAgICAgMCAtIFRoZSBzeXN0ZW0gKG9yIGZyb250IGVuZCwgb3IgdGVybWlu YWwpLgotICAgZnVuY3Rpb25zIHRoYXQgd2FudCB0byBkbyB0aGVpciBvd24gZWNob2luZyBzaG91 bGQgY2hlY2sgdGhpcyBmbGFnCi0gICBiZWZvcmUgZG9pbmcgc28uCi0KLSAgIGZsZm5hbSAgLS0g TmFtZSBvZiBsb2NrIGZpbGUsIGluY2x1ZGluZyBpdHMgcGF0aCwgZS5nLiwKLSAgICAgICAgICAg ICAgICAiL3Vzci9zcG9vbC91dWNwL0xDSy4uY3VsMCIgb3IgIi9ldGMvbG9ja3MvdHR5NzciCi0g ICBsa2ZsZm4gIC0tIE5hbWUgb2YgbGluayB0byBsb2NrIGZpbGUsIGluY2x1ZGluZyBpdHMgcGF0 aHMKLSAgIGhhc2xvY2sgLS0gRmxhZyBzZXQgaWYgdGhpcyBrZXJtaXQgZXN0YWJsaXNoZWQgYSB1 dWNwIGxvY2suCi0gICBsb2NrcGlkIC0tIFBJRCBvZiBvdGhlciBwcm9jZXNzIHRoYXQgaGFzIGRl c2lyZWQgbGluZSBvcGVuLCBhcyBzdHJpbmcuCi0gICBiYWNrZ3JkIC0tIEZsYWcgaW5kaWNhdGlu ZyBwcm9ncmFtIGV4ZWN1dGluZyBpbiBiYWNrZ3JvdW5kICggJiBvbgotICAgICAgICAgICAgICAg IGVuZCBvZiBzaGVsbCBjb21tYW5kKS4gVXNlZCB0byBpZ25vcmUgSU5UIGFuZCBRVUlUIHNpZ25h bHMuCi0gICBydHVfYnVnIC0tIFNldCBieSBzdHB0cmFwKCkuICBSVFUgdHJlYXRzIF5aIGFzIEVP RiAoYnV0IG9ubHkgd2hlbiB3ZSBoYW5kbGUKLSAgICAgICAgICAgICAgICBTSUdUU1RQKQotCi0g RnVuY3Rpb25zIGZvciBhc3NpZ25lZCBjb21tdW5pY2F0aW9uIGxpbmUgKGVpdGhlciBleHRlcm5h bCBvciBjb25zb2xlIHR0eSk6Ci0KLSAgIHN5c2luaXQoKSAgICAgICAgICAgICAgIC0tIFN5c3Rl bSBkZXBlbmRlbnQgcHJvZ3JhbSBpbml0aWFsaXphdGlvbgotICAgc3lzY2xlYW51cCgpICAgICAg ICAgICAgLS0gU3lzdGVtIGRlcGVuZGVudCBwcm9ncmFtIHNodXRkb3duCi0gICB0dG9wZW4odHRu YW1lLGxvY2FsLG1kbXR5cCx0aW1vKSAtLSBPcGVuIHRoZSBuYW1lZCB0dHkgZm9yIGV4Y2x1c2l2 ZSBhY2Nlc3MuCi0gICB0dGNsb3MoKSAgICAgICAgICAgICAgICAtLSBDbG9zZSAmIHJlc2V0IHRo ZSB0dHksIHJlbGVhc2luZyBhbnkgYWNjZXNzIGxvY2suCi0gICB0dHNzcGQoY3BzKSAgICAgICAg ICAgICAtLSBTZXQgdGhlIHRyYW5zbWlzc2lvbiBzcGVlZCBvZiB0aGUgdHR5LgotICAgdHRnc3Bk KCkgICAgICAgICAgICAgICAgLS0gR2V0IChyZWFkKSB0aGUgdGhlIHRyYW5zbWlzc2lvbiBzcGVl ZCBvZiB0aGUgdHR5LgotICAgdHRwa3Qoc3BlZWQsZmxvdyxwYXJpdHkpIC0tIFB1dCB0aGUgdHR5 IGluIHBhY2tldCBtb2RlIGFuZCBzZXQgdGhlIHNwZWVkLgotICAgdHR2dChzcGVlZCxmbG93KSAg ICAgICAgLS0gUHV0IHRoZSB0dHkgaW4gdmlydHVhbCB0ZXJtaW5hbCBtb2RlLgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvciBpbiBESUFMSU5HIG9yIENPTk5FQ1RFRCBtb2RlbSBj b250cm9sIHN0YXRlLgotICAgdHRyZXMoKSAgICAgICAgICAgICAgICAgLS0gUmVzdG9yZSBvcmln aW5hbCB0dHkgbW9kZXMuCi0gICB0dHNjYXJyKGNhcnJpZXIpICAgICAgICAtLSBTZXQgY2Fycmll ciBjb250cm9sIG1vZGUsIG9uL29mZi9hdXRvLgotICAgdHRpbmwoZGVzdCxtYXgsdGltbykgICAg LS0gVGltZWQgcmVhZCBsaW5lIGZyb20gdGhlIHR0eS4KLSAgIHR0aW5jKHRpbW8pICAgICAgICAg ICAgIC0tIFRpbWVkIHJlYWQgY2hhcmFjdGVyIGZyb20gdHR5LgotICAgbXlyZWFkKCkgICAgICAg ICAgICAgICAgLS0gUmF3IG1vZGUgYnVsayBidWZmZXIgcmVhZCwgZ2l2ZXMgc3Vic2VxdWVudAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFycyBvbmUgYXQgYSB0aW1lIGFuZCBz aW11bGF0ZXMgRklPTlJFQUQuCi0gICBteXVucmQoYykgICAgICAgICAgICAgICAtLSBQbGFjZXMg YyBiYWNrIGluIGJ1ZmZlciB0byBiZSByZWFkIChvbmUgb25seSkKLSAgIHR0Y2hrKCkgICAgICAg ICAgICAgICAgIC0tIFNlZSBob3cgbWFueSBjaGFyYWN0ZXJzIGluIHR0eSBpbnB1dCBidWZmZXIu Ci0gICB0dHhpbihuLGJ1ZikgICAgICAgICAgICAtLSBSZWFkIG4gY2hhcmFjdGVycyBmcm9tIHR0 eSAodW50aW1lZCkuCi0gICB0dG9sKHN0cmluZyxsZW5ndGgpICAgICAtLSBXcml0ZSBhIHN0cmlu ZyB0byB0aGUgdHR5LgotICAgdHRvYyhjKSAgICAgICAgICAgICAgICAgLS0gV3JpdGUgYSBjaGFy YWN0ZXIgdG8gdGhlIHR0eS4KLSAgIHR0Zmx1aSgpICAgICAgICAgICAgICAgIC0tIEZsdXNoIHR0 eSBpbnB1dCBidWZmZXIuCi0gICB0dHNuZGIoKSAgICAgICAgICAgICAgICAtLSBTZW5kIEJSRUFL IHNpZ25hbC4KLSAgIHR0c25kbGIoKSAgICAgICAgICAgICAgIC0tIFNlbmQgTG9uZyBCUkVBSyBz aWduYWwuCi0KLSAgIHR0bG9jayh0dG5hbWUpICAgICAgICAgIC0tICJMb2NrIiB0dHkgZGV2aWNl IGFnYWluc3QgdXVjcCBjb2xsaXNpb25zLgotICAgdHR1bmxjaygpICAgICAgICAgICAgICAgLS0g VW5sb2NrIHR0eSBkZXZpY2UuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBB VFQ3MzAwL1VuaXggUEMsIFN5c3RlbSBWOgotICAgYXR0ZGlhbCh0dG5hbWUsc3BlZWQsdGVsbmJy KSAtLSBkaWFscyBBVFQ3MzAwL1VuaXggUEMgaW50ZXJuYWwgbW9kZW0KLSAgIG9mZmdldHR5KHR0 bmFtZSkgICAgICAgIC0tIFR1cm5zIG9mZiBnZXR0eSgxbSkgZm9yIGNvbW1zIGxpbmUKLSAgIG9u Z2V0dHkodHRuYW1lKSAgICAgICAgIC0tIFJlc3RvcmVzIGdldHR5KCkgdG8gY29tbXMgbGluZQot Ki8KLQotLyoKLUZ1bmN0aW9ucyBmb3IgY29uc29sZSB0ZXJtaW5hbDoKLQotICAgY29uZ20oKSAg IC0tIEdldCBjb25zb2xlIHRlcm1pbmFsIG1vZGVzLgotICAgY29uY2IoZXNjKSAtLSBQdXQgdGhl IGNvbnNvbGUgaW4gc2luZ2xlLWNoYXJhY3RlciB3YWtldXAgbW9kZSB3aXRoIG5vIGVjaG8uCi0g ICBjb25iaW4oZXNjKSAtLSBQdXQgdGhlIGNvbnNvbGUgaW4gYmluYXJ5IChyYXcpIG1vZGUuCi0g ICBjb25yZXMoKSAgLS0gUmVzdG9yZSB0aGUgY29uc29sZSB0byBtb2RlIG9idGFpbmVkIGJ5IGNv bmdtKCkuCi0gICBjb25vYyhjKSAgLS0gVW5idWZmZXJlZCBvdXRwdXQsIG9uZSBjaGFyYWN0ZXIg dG8gY29uc29sZS4KLSAgIGNvbm9sKHMpICAtLSBVbmJ1ZmZlcmVkIG91dHB1dCwgbnVsbC10ZXJt aW5hdGVkIHN0cmluZyB0byB0aGUgY29uc29sZS4KLSAgIGNvbm9sYShzKSAtLSBVbmJ1ZmZlcmVk IG91dHB1dCwgYXJyYXkgb2Ygc3RyaW5ncyB0byB0aGUgY29uc29sZS4KLSAgIGNvbnhvKG4scykg LS0gVW5idWZmZXJlZCBvdXRwdXQsIG4gY2hhcmFjdGVycyB0byB0aGUgY29uc29sZS4KLSAgIGNv bmNoaygpICAtLSBDaGVjayBpZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZSBhdCBjb25zb2xlIChic2Qg NC4yKS4KLSAgICAgICAgICAgICAgICBDaGVjayBpZiBlc2NhcGUgY2hhciAoXlwpIHR5cGVkIGF0 IGNvbnNvbGUgKFN5c3RlbSBJSUkvVikuCi0gICBjb25pbmModGltbykgIC0tIFRpbWVkIGdldCBh IGNoYXJhY3RlciBmcm9tIHRoZSBjb25zb2xlLgotICAgY29uZ2tzKHRpbW8pICAtLSBUaW1lZCBn ZXQga2V5Ym9hcmQgc2NhbiBjb2RlLgotICAgY29uaW50KCkgIC0tIEVuYWJsZSB0ZXJtaW5hbCBp bnRlcnJ1cHRzIG9uIHRoZSBjb25zb2xlIGlmIG5vdCBiYWNrZ3JvdW5kLgotICAgY29ubm9pKCkg IC0tIERpc2FibGUgdGVybWluYWwgaW50ZXJydXB0cyBvbiB0aGUgY29uc29sZSBpZiBub3QgYmFj a2dyb3VuZC4KLQotVGltZSBmdW5jdGlvbnMKLQotICAgbXNsZWVwKG0pIC0tIE1pbGxpc2Vjb25k IHNsZWVwCi0gICB6dGltZSgmcykgLS0gUmV0dXJuIHBvaW50ZXIgdG8gZGF0ZS90aW1lIHN0cmlu ZwotICAgcnRpbWVyKCkgLS0gIFJlc2V0IHRpbWVyCi0gICBndGltZXIoKSAgLS0gR2V0IGVsYXBz ZWQgdGltZSBzaW5jZSBsYXN0IGNhbGwgdG8gcnRpbWVyKCkKLSovCi0KLS8qIENvbmRpdGlvbmFs IEluY2x1ZGVzICovCi0KLS8qIFdoZXRoZXIgdG8gaW5jbHVkZSA8c3lzL2ZpbGUuaD4gKi8KLQot I2lmZGVmIFJUVQkJCQkvKiBSVFUgZG9lc24ndCAqLwotI2RlZmluZSBOT0ZJTEVICi0jZW5kaWYg LyogUlRVICovCi0KLSNpZmRlZiBDSUUJCQkJLyogQ0lFIGRvZXMuICovCi0jdW5kZWYgTk9GSUxF SAotI2VuZGlmIC8qIENJRSAqLwotCi0jaWZkZWYgQlNENDEJCQkJLyogNC4xIEJTRCBkb2Vzbid0 ICovCi0jZGVmaW5lIE5PRklMRUgKLSNlbmRpZiAvKiBCU0Q0MSAqLwotCi0jaWZkZWYgaXM2OGsJ CQkJLyogSW50ZWdyYXRlZCBTb2x1dGlvbnMgNjgwMDAgVU5JWCAgKi8KLSNkZWZpbmUgTk9GSUxF SAkJCQkvKiBlLmcuIG9uIFBsZXh1eCBQNjAgYW5kIFN1bi0xICovCi0jZW5kaWYgLyogaXM2OGsg Ki8KLQotI2lmZGVmIE1JTklYCQkJCS8qIE1JTklYICovCi0jZGVmaW5lIE5PRklMRUgKLSNlbmRp ZiAvKiBNSU5JWCAqLwotCi0jaWZkZWYgQ09IRVJFTlQJCQkJLyogQ29oZXJlbnQgKi8KLSNkZWZp bmUgTk9GSUxFSAotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLSNpZm5kZWYgTk9GSUxFSAkJCQkv KiBOb3cgaW5jbHVkZSBpZiBzZWxlY3RlZC4gKi8KLSNpbmNsdWRlIDxzeXMvZmlsZS5oPgotI2Vu ZGlmIC8qIE5PRklMRUggKi8KLQotLyogUE9TSVggKi8KLQotI2lmZGVmIEJTRDQ0T1JQT1NJWAkJ CS8qIFBPU0lYIHVzZXMgdGVybWlvcy5oICovCi0jZGVmaW5lIFRFUk1JT1MKLSNpZmRlZiBfX2Jz ZGlfXwotI2lmZGVmIFBPU0lYCi0jdW5kZWYgX1BPU0lYX1NPVVJDRQkJCS8qIEdldCBleHRyYSBz dHVmZiBmcm9tIHRlcm1pb3MuaCAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0jZW5kaWYgLyogX19i c2RpX18gKi8KLSNpbmNsdWRlIDx0ZXJtaW9zLmg+Ci0jaWZkZWYgTElOVVgKLSNpbmNsdWRlIDxz eXMvaW9jdGwuaD4KLSNlbmRpZiAvKiBMSU5VWCAqLwotI2lmZGVmIFFOWDE2Ci0jaW5jbHVkZSA8 aW9jdGwuaD4KLSNlbHNlCi0jaWZkZWYgUU5YNgotI2luY2x1ZGUgPGlvY3RsLmg+Ci0jZW5kaWYg LyogUU5YNiAqLwotI2VuZGlmIC8qIFFOWDE2ICovCi0jaWZkZWYgX19ic2RpX18KLSNpZmRlZiBQ T1NJWAotI2RlZmluZSBfUE9TSVhfU09VUkNFCi0jZW5kaWYgLyogUE9TSVggKi8KLSNlbmRpZiAv KiBfX2JzZGlfXyAqLwotI2lmbmRlZiBCU0Q0NAkJCQkvKiBSZWFsbHkgUE9TSVggKi8KLSNpZm5k ZWYgQ0tfUU5YMzIJCQkvKiB3YXMgQ0tfUU5YMzIgKi8KLSNkZWZpbmUgTk9TWVNJT0NUTEgJCQkv KiBObyBpb2N0bCdzIGFsbG93ZWQuICovCi0jdW5kZWYgdWx0cml4CQkJCS8qIFR1cm4gb2ZmIGFu eSB1bHRyaXggZmVhdHVyZXMuICovCi0jZW5kaWYgLyogQ0tfUU5YMzIgKi8KLSNlbmRpZiAvKiBC U0Q0NCAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0KLS8qIFN5c3RlbSBJSUksIFN5c3RlbSBWICov Ci0KLSNpZmRlZiBBVFRTVgotI2lmbmRlZiBCU0Q0NAotI2lmbmRlZiBQT1NJWAotI2luY2x1ZGUg PHRlcm1pby5oPgotI2VuZGlmIC8qIFBPU0lYICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNpZmRl ZiBURVJNSU9YCi0vKiBOZWVkIHRoaXMgZm9yIHRlcm1pb3ggc3RydWN0dXJlLCBSVFMvQ1RTIGFu ZCBEVFIvQ0QgZmxvdyBjb250cm9sICovCi0jaW5jbHVkZSA8dGVybWlveC5oPgotICBzdHJ1Y3Qg dGVybWlveCByY3RzeDsKLSNlbHNlCi0jaWZkZWYgU1RFUk1JT1gKLSNpZmRlZiBTQ09fT1NSNTA0 Ci0vKiBTb3JyeSwgdGhpcyBpcyB0cnVseSBkaXNndXN0aW5nIGJ1dCBpdCdzIFNDTydzIGZhdWx0 LiAqLwotI2lmbmRlZiBfU1ZJRDMKLSNkZWZpbmUgX0NLX1NWSUQzX1gKLSNkZWZpbmUgX1NWSUQz Ci0jZW5kaWYgLyogX1NWSUQzICovCi0jZW5kaWYgLyogU0NPX09TUjUwNCAqLwotI2luY2x1ZGUg PHN5cy90ZXJtaW94Lmg+Ci0gIHN0cnVjdCB0ZXJtaW94IHJjdHN4OwotI2lmZGVmIENLX1NWSUQz X1gKLSN1bmRlZiBfU1ZJRDMKLSN1bmRlZiBDS19TVklEM19YCi0jZW5kaWYgLyogQ0tfU1ZJRDNf WCAqLwotI2VuZGlmIC8qIFNURVJNSU9YICovCi0jZW5kaWYgLyogVEVSTUlPWCAqLwotI2VuZGlm IC8qIEFUVFNWICovCi0KLSNpZmRlZiBDT0hFUkVOVAkJCS8qIFVzZSB0ZXJtaW8uaCwgbm90IHNn dHR5LmggZm9yIENvaGVyZW50ICovCi0jaW5jbHVkZSA8dGVybWlvLmg+Ci0jZW5kaWYgLyogQ09I RVJFTlQgKi8KLQotI2lmZGVmIE1JTklYCQkJCS8qIE1JTklYIHVzZXMgaW9jdGwncyAqLwotI2Rl ZmluZSBOT1NZU0lPQ1RMSAkJCS8qIGJ1dCBoYXMgbm8gPHN5cy9pb2N0bC5oPiAqLwotI2VuZGlm IC8qIE1JTklYICovCi0KLS8qIE90aGVycyAqLwotCi0jaWZuZGVmIE5PU1lTSU9DVExICQkJLyog T3RoZXJzIHVzZSBpb2N0bCgpICovCi0jaWZkZWYgU1VONFM1Ci0vKgotICBUaGlzIGlzIHRvIGdl dCByaWQgb2YgY3BwIHdhcm5pbmcgbWVzc2FnZXMgdGhhdCBvY2N1ciBiZWNhdXNlIGFsbCBvZgot ICB0aGVzZSBzeW1ib2xzIGFyZSBkZWZpbmVkIGJ5IGJvdGggdGVybWlvcy5oIGFuZCBpb2N0bC5o IG9uIHRoZSBTVU4uCi0qLwotI3VuZGVmIEVDSE8KLSN1bmRlZiBOTDAKLSN1bmRlZiBOTDEKLSN1 bmRlZiBUQUIwCi0jdW5kZWYgVEFCMQotI3VuZGVmIFRBQjIKLSN1bmRlZiBYVEFCUwotI3VuZGVm IENSMAotI3VuZGVmIENSMQotI3VuZGVmIENSMgotI3VuZGVmIENSMwotI3VuZGVmIEZGMAotI3Vu ZGVmIEZGMQotI3VuZGVmIEJTMAotI3VuZGVmIEJTMQotI3VuZGVmIFRPU1RPUAotI3VuZGVmIEZM VVNITwotI3VuZGVmIFBFTkRJTgotI3VuZGVmIE5PRkxTSAotI2VuZGlmIC8qIFNVTjRTNSAqLwot I2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2VuZGlmIC8qIE5PU1lTSU9DVExIICovCi0vKgotICBX ZSByZWFsbHksIHJlYWxseSwgUkVBTExZIHdhbnQgRklPTlJFQUQsIGJlY2F1c2UgaXQgaXMgdGhl IG9ubHkgd2F5IHRvIGZpbmQKLSAgb3V0IG5vdCBqdXN0ICppZiogc3R1ZmYgaXMgd2FpdGluZyB0 byBiZSByZWFkLCBidXQgaG93IG11Y2gsIHdoaWNoIGlzCi0gIGNyaXRpY2FsIHRvIG91ciBzbGlk aW5nLXdpbmRvdyBhbmQgc3RyZWFtaW5nIHByb2NlZHVyZXMsIG5vdCB0byBtZW50aW9uCi0gIGVm ZmljaWVuY3kgb2YgQ09OTkVDVCwgZXRjLgotKi8KLSNpZmRlZiBCRUxMVjEwCi0jaW5jbHVkZSA8 c3lzL2ZpbGlvLmg+CQkJLyogRm9yIEZJT05SRUFEICovCi0jaWZkZWYgRklPTlJFQUQKLSNkZWZp bmUgTVlSRUFECi0jZW5kaWYgLyogTVlSRUFEICovCi0jZW5kaWYgLyogQkVMTFYxMCAqLwotCi0j aWZuZGVmIEZJT05SRUFECi0vKiBJdCB3YXNuJ3QgZm91bmQgaW4gaW9jdGwuaCBvciB0ZXJtKi5o IC0gdHJ5IHRoZXNlIHBsYWNlczogKi8KLSNpZmRlZiBVTklYV0FSRQotI2luY2x1ZGUgPHN5cy9m aWxpby5oPgotI2Vsc2UKLSNpZmRlZiBTT0xBUklTCi0jaW5jbHVkZSA8c3lzL2ZpbGlvLmg+Ci0j ZW5kaWYgLyogU09MQVJJUyAqLwotI2VuZGlmIC8qIFVOSVhXQVJFICovCi0jZW5kaWYgLyogRklP TlJFQUQgKi8KLQotI2lmZGVmIFhFTklYIC8qIFdhcyBNX1VOSVggYnV0IFhFTklYIGltcGxpZXMg TV9VTklYIGFuZCBhcHBsaWVzIHRvIFhFTklYIHRvbyAqLwotLyoKLSAgPHN5cy9zb2NrZXQuaD4g aW5jbHVkZWQgYWJvdmUgdmlhICJja2NuZXQuaCIgZGVmaW5lcyBGSU9OUkVBRCBhcwotICBzb21l dGhpbmcuICBEdWUgdG8gdGhpcywgaW5fY2hrKCkgdXNlcyB0aGUgRklPTlJFQUQgaW5zdGVhZCBv ZiBSRENISwotICBhbmQgdGhlIGhvdCBrZXlzIGR1cmluZyBmaWxlIHRyYW5zZmVyIChYIHRvIGNh bmNlbCBmaWxlIGV0YykgZG8gbm90Ci0gIHdvcmsgYmVjYXVzZSBGSU9OUkVBRCBkb2Vzbid0IHdv cmsgZXZlbiB0aG91Z2ggaXQgaXMgZGVmaW5lZC4KLQotICBOT1RFOiBUaGlzIG1pZ2h0IGFsc28g YmUgdHJ1ZSBlbHNld2hlcmUuCi0qLwotI2lmZGVmIEZJT05SRUFECi0jdW5kZWYgRklPTlJFQUQK LSNlbmRpZiAvKiBGSU9OUkVBRCAqLwotI2VuZGlmIC8qIFhFTklYICovCi0KLSNpZmRlZiBDS19T Q09WNQkJCQkvKiBEaXR0byBmb3IgU0NPIE9wZW5TZXJ2ZXIgNS4wICovCi0jaWZuZGVmIFNDT19P U1I1MDcJCQkvKiAyOTkgKi8KLSNpZmRlZiBGSU9OUkVBRAotI3VuZGVmIEZJT05SRUFECi0jZW5k aWYgLyogRklPTlJFQUQgKi8KLSNlbmRpZgkvKiBTQ09fT1NSNTA3ICovCi0jZW5kaWYgLyogQ0tf U0NPVjUgKi8KLQotI2lmZGVmIFNDT19PU1I1MDcJCQkvKiAyOTkgKi8KLSNpZmRlZiBSRENISwot I3VuZGVmIFJEQ0hLCi0jZW5kaWYJLyogUkRDSEsgKi8KLSNlbmRpZgkvKiBTQ09fT1NSNTA3ICov Ci0KLS8qIFdoZXRoZXIgdG8gaW5jbHVkZSA8ZmNudGwuaD4gKi8KLQotI2lmbmRlZiBpczY4awkJ CQkvKiBPbmx5IGEgZmV3IGRvbid0IGhhdmUgdGhpcyBvbmUuICovCi0jaWZuZGVmIEJTRDQxCi0j aWZuZGVmIEZUMjEKLSNpZm5kZWYgRlQxOAotI2lmbmRlZiBDT0hFUkVOVAotI2luY2x1ZGUgPGZj bnRsLmg+Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSNlbmRpZiAvKiBGVDE4ICovCi0jZW5kaWYg LyogRlQyMSAqLwotI2VuZGlmIC8qIEJTRDQxICovCi0jZW5kaWYgLyogbm90IGlzNjhrICovCi0K LSNpZmRlZiBDT0hFUkVOVAotI2lmZGVmIF9JMzg2Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNlbHNl Ci0jaW5jbHVkZSA8c3lzL2ZjbnRsLmg+Ci0jZW5kaWYgLyogX0kzODYgKi8KLSNlbmRpZiAvKiBD T0hFUkVOVCAqLwotCi0jaWZkZWYgQVRUNzMwMAkJCQkvKiBVbml4IFBDLCBpbnRlcm5hbCBtb2Rl bSBkaWFsZXIgKi8KLSNpbmNsdWRlIDxzeXMvcGhvbmUuaD4KLSNlbmRpZiAvKiBBVFQ3MzAwICov Ci0KLSNpZmRlZiBIUFVYCQkJCS8qIEhQLVVYIHZhcmlhdGlvbnMuICovCi0jZGVmaW5lIEhQVVhK T0JDVEwKLSNpbmNsdWRlIDxzeXMvbW9kZW0uaD4JCQkvKiBIUC1VWCBtb2RlbSBzaWduYWxzICov Ci0jaWZkZWYgaHA5MDAwczUwMAkJCS8qIE1vZGVsIDUwMCAqLwotI3VuZGVmIEhQVVhKT0JDVEwK LSNlbmRpZiAvKiBocDkwMDBzNTAwICovCi0jaWZkZWYgSFBVWFBSRTY1Ci0jdW5kZWYgSFBVWEpP QkNUTAotdHlwZWRlZiBsb25nIG1mbGFnOwotI2VuZGlmIC8qIEhQVVhQUkU2NSAqLwotI2lmZGVm IEhQVVhKT0JDVEwKLSNpbmNsdWRlIDxzeXMvYnNkdHR5Lmg+CQkJLyogSFAtVVggQmVya2VsZXkg dHR5IHN1cHBvcnQgKi8KLSNlbmRpZiAvKiBIUFVYSk9CQ1RMICovCi0jZW5kaWYgLyogSFBVWCAq LwotCi0vKgotICBXaGljaCB0aW1lLmggZmlsZXMgdG8gaW5jbHVkZS4uLiBTZWUgY2tjZGViLmgg Zm9yIGRlZmF1bHRzLgotICBOb3RlIHRoYXQgMCwgMSwgMiwgb3IgYWxsIDMgb2YgdGhlc2UgY2Fu IGJlIGluY2x1ZGVkIGFjY29yZGluZyB0bwotICB0aGUgc3ltYm9sIGRlZmluaXRpb25zLgotKi8K LSNpZm5kZWYgTk9USU1FSAotI2lmZGVmIFRJTUVICi0jaW5jbHVkZSA8dGltZS5oPgotI2VuZGlm IC8qIFRJTUVIICovCi0jZW5kaWYgLyogTk9USU1FSCAqLwotCi0jaWZuZGVmIE5PU1lTVElNRUgK LSNpZmRlZiBTWVNUSU1FSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYgLyogU1lTVElN RUggKi8KLSNlbmRpZiAvKiBOT1NZU1RJTUVIICovCi0KLSNpZm5kZWYgTk9TWVNUSU1FQkgKLSNp ZmRlZiBTWVNUSU1FQkgKLSNpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSNlbmRpZiAvKiBTWVNUSU1F QkggKi8KLSNlbmRpZiAvKiBOT1NZU1RJTUVCSCAqLwotCi0jaWZuZGVmIE5PRENMVElNRVZBTAot I2lmZGVmIERDTFRJTUVWQUwKLS8qCi0gIEluIGNlcnRhaW4gUE9TSVggYnVpbGRzIChsaWtlIFVu aXh3YXJlIDcpLCA8W3N5cy9ddGltZS5oPiByZWZ1c2VzIHRvCi0gIGRlZmluZSB0aGUgc3RydWN0 cyB3ZSBuZWVkIHRvIGFjY2VzcyB0aGUgaGlnaGVyIHNwZWVkcywgc28gd2UgaGF2ZSB0bwotICBk byBpdCBvdXJzZWx2ZXMuCi0qLwotc3RydWN0IHRpbWV2YWwgewotICAgIGxvbmcgdHZfc2VjOwot ICAgIGxvbmcgdHZfdXNlYzsKLX07Ci1zdHJ1Y3QgdGltZXpvbmUgewotICAgIGludCB0el9taW51 dGVzd2VzdDsKLSAgICBpbnQgdHpfZHN0dGltZTsKLX07Ci0jZW5kaWYgLyogRENMVElNRVZBTCAq LwotI2VuZGlmIC8qIE5PRENMVElNRVZBTCAqLwotCi0jaWZkZWYgX19saW51eF9fCi0vKiBUSElT IElTIE9CU09MRVRFIHNpbmNlIGFib3V0IExpbnV4IDAuOTIgKi8KLSNpZmRlZiBPTElOVVhISVNQ RUVECi0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jZW5kaWYgLyogT0xJTlVYSElTUEVFRCAq LwotI2lmZGVmIF9fYWxwaGFfXwkJCS8qIExpbnV4IG9uIERFQyBBbHBoYSAqLwotI2lmbmRlZiBf X0dMSUJDX18JCQkvKiBCdXQgbm90IHdpdGggZ2xpYmMgKi8KLSNpbmNsdWRlIDxhc20vdGVybWlv cy5oPgotI2VuZGlmIC8qIF9fR0xJQkNfXyAqLwotI2VuZGlmIC8qIF9fYWxwaGFfXyAqLwotI2Vu ZGlmIC8qIF9fbGludXhfXyAqLwotCi0jaWZkZWYgTk9JRVhURU4JCQkJLyogVGhpcyBpcyBicm9r ZW4gb24gc29tZSBzeXN0ZW1zICovCi0jdW5kZWYgSUVYVEVOCQkJCS8qIGxpa2UgQ29udmV4L09T IDkuMSAqLwotI2VuZGlmIC8qIE5PSUVYVEVOICovCi0jaWZuZGVmIElFWFRFTgkJCQkvKiBUdXJu IG9mZiBeTy9eViBwcm9jZXNzaW5nLiAqLwotI2RlZmluZSBJRVhURU4gMAkJCS8qIE5lZWRlZCwg YXQgbGVhc3QsIG9uIEJTREkuICovCi0jZW5kaWYgLyogSUVYVEVOICovCi0vKgotICBQaWNrIHVw IGRlZmluaXRpb25zIG5lZWRlZCBmb3Igc2VsZWN0KCkgaWYgd2UgZG9uJ3QgaGF2ZSB0aGVtIGFs cmVhZHkuCi0gIE5vcm1hbGx5IHRoZXkgY29tZSBmcm9tIDxzeXMvdHlwZXMuaD4gYnV0IHNvbWUg c3lzdGVtcyBnZXQgdGhlbSBmcm9tCi0gIDxzeXMvc2VsZWN0Lmg+Li4uICBSYXRoZXIgdGhhbiBo YXJkd2lyZSBhbGwgb2YgdGhlbSBpbnRvIHRoZSBzb3VyY2UsIHdlCi0gIGluY2x1ZGUgaXQgaWYg U0VMRUNUX0ggaXMgZGVmaW5lZCBpbiBjb21waWxlLXRpbWUgQ0ZMQUdTLgotKi8KLSNpZm5kZWYg U0NPX09TUjUwNAotI2lmZGVmIFNFTEVDVF9ICi0jaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgotI2Vu ZGlmIC8qIFNFTEVDVF9IICovCi0jZW5kaWYgLyogU0NPX09TUjUwNCAqLwotCi0jaWZkZWYgYWVn aXMKLSNpbmNsdWRlICIvc3lzL2lucy9iYXNlLmlucy5jIgotI2luY2x1ZGUgIi9zeXMvaW5zL2Vy cm9yLmlucy5jIgotI2luY2x1ZGUgIi9zeXMvaW5zL2lvcy5pbnMuYyIKLSNpbmNsdWRlICIvc3lz L2lucy9zaW8uaW5zLmMiCi0jaW5jbHVkZSAiL3N5cy9pbnMvcGFkLmlucy5jIgotI2luY2x1ZGUg Ii9zeXMvaW5zL3RpbWUuaW5zLmMiCi0jaW5jbHVkZSAiL3N5cy9pbnMvcGZtLmlucy5jIgotI2lu Y2x1ZGUgIi9zeXMvaW5zL3BnbS5pbnMuYyIKLSNpbmNsdWRlICIvc3lzL2lucy9lYzIuaW5zLmMi Ci0jaW5jbHVkZSAiL3N5cy9pbnMvdHlwZV91aWRzLmlucy5jIgotI2luY2x1ZGUgPGRlZmF1bHRf YWNsLmg+Ci0jdW5kZWYgVElPQ0VYQ0wKLSN1bmRlZiBGSU9OUkVBRAotI2VuZGlmIC8qIGFlZ2lz ICovCi0KLSNpZmRlZiBzeGFFNTAJCQkJLyogUEZVIENvbXBhY3QgQSBTWC9BIFRJU1AgVjEwL0w1 MCAqLwotI3VuZGVmIEZJT05SRUFECi0jZW5kaWYgLyogc3hhRTUwICovCi0KLS8qIFRoZSBmb2xs b3dpbmcgI2RlZmluZXMgYXJlIGNhdGNoLWFsbHMgZm9yIHRob3NlIHN5c3RlbXMgKi8KLS8qIHRo YXQgZGlkbid0IGhhdmUgb3IgY291bGRuJ3QgZmluZCA8ZmlsZS5oPi4uLiAqLwotCi0jaWZuZGVm IEZSRUFECi0jZGVmaW5lIEZSRUFEIDB4MDEKLSNlbmRpZiAvKiBGUkVBRCAqLwotCi0jaWZuZGVm IEZXUklURQotI2RlZmluZSBGV1JJVEUgMHgxMAotI2VuZGlmIC8qIEZXUklURSAqLwotCi0jaWZu ZGVmIE9fUkRPTkxZCi0jZGVmaW5lIE9fUkRPTkxZIDAwMAotI2VuZGlmIC8qIE9fUkRPTkxZICov Ci0KLS8qIFRoaXMgaXMgZm9yIGFuY2llbnQgVW5peGVzIHRoYXQgZG9uJ3QgaGF2ZSB0aGVzZSB0 dHkgc3ltYm9scyBkZWZpbmVkLiAqLwotCi0jaWZuZGVmIFBFTkRJTgotI2RlZmluZSBQRU5ESU4g SUNBTk9OCi0jZW5kaWYgLyogUEVORElOICovCi0jaWZuZGVmIEZMVVNITwotI2RlZmluZSBGTFVT SE8gSUNBTk9OCi0jZW5kaWYgLyogRkxVU0hPICovCi0jaWZuZGVmIEVYVFBST0MKLSNkZWZpbmUg RVhUUFJPQyBJQ0FOT04KLSNlbmRpZiAvKiBFWFRQUk9DICovCi0KLSNpZmRlZiBTVk9SUE9TSVgK LS8qCi0gIE1vZGVtIHNpZ25hbHMgYXJlIGFsc28gZm9yYmlkZGVuIGluIHRoZSBQT1NJWCB3b3Js ZC4gIEJ1dCBzb21lIFBPU0lYLWJhc2VkCi0gIHBsYXRmb3JtcyBsZXQgdXMgYXQgdGhlbSBhbnl3 YXkgaWYgd2Uga25vdyB3aGVyZSB0byBsb29rLgotKi8KLSNpZm5kZWYgTkVFRE1ETURFRlMKLS8q IERvZXNuJ3Qgd29yayBmb3IgTGludXggKi8KLSNpZmRlZiBVTklYV0FSRTcKLSNkZWZpbmUgTkVF RE1ETURFRlMKLSNlbmRpZiAvKiBVTklYV0FSRTcgKi8KLSNlbmRpZiAvKiBORUVETURNREVGUyAq LwotCi0jaWZkZWYgTkVFRE1ETURFRlMKLSNpZm5kZWYgVElPQ01HRVQKLSNkZWZpbmUgVElPQ01H RVQgKCgndCc8PDgpfDI5KQotI2VuZGlmIC8qIFRJT0NNR0VUICovCi0KLSNpZm5kZWYgVElPQ01f RFRSCi0jZGVmaW5lIFRJT0NNX0RUUiAweDAwMDIKLSNlbmRpZiAvKiBUSU9DTV9EVFIgKi8KLSNp Zm5kZWYgVElPQ01fUlRTCi0jZGVmaW5lIFRJT0NNX1JUUyAweDAwMDQKLSNlbmRpZiAvKiBUSU9D TV9SVFMgKi8KLSNpZm5kZWYgVElPQ01fQ1RTCi0jZGVmaW5lIFRJT0NNX0NUUyAweDAwMjAKLSNl bmRpZiAvKiBUSU9DTV9DVFMgKi8KLSNpZm5kZWYgVElPQ01fQ0FSCi0jZGVmaW5lIFRJT0NNX0NB UiAweDAwNDAKLSNlbmRpZiAvKiBUSU9DTV9DQVIgKi8KLSNpZm5kZWYgVElPQ01fUk5HCi0jZGVm aW5lIFRJT0NNX1JORyAweDAwODAKLSNlbmRpZiAvKiBUSU9DTV9STkcgKi8KLSNpZm5kZWYgVElP Q01fRFNSCi0jZGVmaW5lIFRJT0NNX0RTUiAweDAxMDAKLSNlbmRpZiAvKiBUSU9DTV9EU1IgKi8K LSNlbmRpZiAvKiBORUVETURNREVGUyAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotCi0vKiBE ZWNsYXJhdGlvbnMgKi8KLQotI2lmZGVmIE9YT1MKLSN1bmRlZiBUQ0dFVEEKLSN1bmRlZiBUQ1NF VEEKLSN1bmRlZiBUQ1NFVEFXCi0jdW5kZWYgVENTRVRBRgotI2RlZmluZSBUQ0dFVEEgVENHRVRT Ci0jZGVmaW5lIFRDU0VUQSBUQ1NFVFMKLSNkZWZpbmUgVENTRVRBVyBUQ1NFVFNXCi0jZGVmaW5l IFRDU0VUQUYgVENTRVRTRgotI2RlZmluZSB0ZXJtaW8gdGVybWlvcwotI2VuZGlmIC8qIE9YT1Mg Ki8KLQotI2lmZGVmIFNWT1JQT1NJWAkJCS8qIEFUJlQgU3lzIFYgb3IgUE9TSVggKi8KLSNpZmRl ZiBVTklYV0FSRVBPU0lYCQkJLyogVW5peFdhcmUgNyBQT1NJWCBidWlsZCAqLwotLyoKLSAgSW4g VW5peHdhcmUgUE9TSVggYnVpbGRzLCA8W3N5cy9ddGltZS5oPiByZWZ1c2VzIHRvIGRlZmluZSB0 aGUKLSAgc3RydWN0cyB3ZSBuZWVkIHRvIGFjY2VzcyB0aGUgaGlnaGVyIHNwZWVkcywgc28gd2Ug aGF2ZSB0byBkbyBpdAotICBvdXJzZWx2ZXMuCi0qLwotc3RydWN0IHRpbWV2YWwgewotICAgIGxv bmcgdHZfc2VjOwotICAgIGxvbmcgdHZfdXNlYzsKLX07Ci1zdHJ1Y3QgdGltZXpvbmUgewotICAg IGludCB0el9taW51dGVzd2VzdDsKLSAgICBpbnQgdHpfZHN0dGltZTsKLX07Ci0jZW5kaWYgLyog VU5JWFdBUkVQT1NJWCAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotCi0jaWZkZWYgX19HTlVD X18KLSNpZmRlZiBYRU5JWAotLyoKLSAgQmVjYXVzZSBYZW5peCA8dGltZS5oPiBkb2Vzbid0IGRl Y2xhcmUgdGltZSgpIGlmIHdlJ3JlIHVzaW5nIGdjYy4KLSovCi10aW1lX3QgdGltZSgpOwotI2Vu ZGlmIC8qIFhFTklYICovCi0jZW5kaWYgLyogX19HTlVDX18gKi8KLQotLyogU3BlY2lhbCBzdHVm ZiBmb3IgVjcgaW5wdXQgYnVmZmVyIHBlZWtpbmcgKi8KLQotI2lmZGVmICBWNwotaW50IGttZW1b Ml0gPSB7IC0xLCAtMX07Ci1jaGFyICppbml0cmF3cSgpLCAqcWFkZHJbMl09ezAsMH07Ci0jZGVm aW5lIENPTiAwCi0jZGVmaW5lIFRUWSAxCi0jZW5kaWYgLyogVjcgKi8KLQotLyogZGZ0dHkgaXMg dGhlIGRldmljZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGRldmljZSBmb3IgZmlsZSB0cmFuc2ZlciAq LwotLyogZGZsb2MgaXMgMCBpZiBkZnR0eSBpcyB0aGUgdXNlcidzIGNvbnNvbGUgdGVybWluYWws IDEgaWYgYW4gZXh0ZXJuYWwgbGluZSAqLwotCi0jaWZkZWYgQkVPUwotICAgIGNoYXIgKiBkZnR0 eSA9IE5VTEw7Ci0gICAgY2hhciAqIGRmbWRtID0gIm5vbmUiOwotICAgIGludCBkZmxvYyA9IDA7 ICAgICAgICAgICAgICAgICAgLyogdGhhdCBnb2VzIGluIGxvY2FsIG1vZGUgYnkgZGVmYXVsdCAq LwotI2Vsc2UKLSNpZm5kZWYgREZUVFkKLSNpZmRlZiBQUk9WWDEKLSAgICBjaGFyICpkZnR0eSA9 ICIvZGV2L2NvbTEuZG91dCI7IC8qIE9ubHkgZXhhbXBsZSBzbyBmYXIgb2YgYSBzeXN0ZW0gKi8K LSAgICBjaGFyICpkZm1kbSA9ICJub25lIjsKLSAgICBpbnQgZGZsb2MgPSAxOyAgICAgICAgICAg ICAgICAgIC8qIHRoYXQgZ29lcyBpbiBsb2NhbCBtb2RlIGJ5IGRlZmF1bHQgKi8KLSNlbHNlCi0g ICAgY2hhciAqZGZ0dHkgPSBDVFROQU07ICAgICAgICAgICAgICAgLyogUmVtb3RlIGJ5IGRlZmF1 bHQsIHVzZSBub3JtYWwgKi8KLSAgICBjaGFyICpkZm1kbSA9ICJub25lIjsKLSAgICBpbnQgZGZs b2MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGluZyB0ZXJtaW5hbCBuYW1l LiAqLwotI2VuZGlmIC8qIFBST1ZYMSAqLwotI2Vsc2UKLSAgICBjaGFyICpkZnR0eSA9IERGVFRZ OwkJLyogRGVmYXVsdCBsb2NhdGlvbiBzcGVjaWZpZWQgb24gKi8KLSAgICBjaGFyICpkZm1kbSA9 ICJub25lIjsJCS8qIGNvbW1hbmQgbGluZS4gKi8KLSAgICBpbnQgZGZsb2MgPSAxOyAgICAgICAg ICAgICAgICAgICAgICAvKiBjb250cm9sbGluZyB0ZXJtaW5hbCBuYW1lLiAqLwotI2VuZGlmIC8q IERGVFRZICovCi0jZW5kaWYgLyogQkVPUyAqLwotCi0jZGVmaW5lIENPTl9SRVMgMAkJCS8qIENv bnNvbGUgc3RhdGUgaXMgInJlc2V0IiAqLwotI2RlZmluZSBDT05fQ0IgIDEJCQkvKiBDb25zb2xl IHN0YXRlIGlzIENCUkVBSyAqLwotI2RlZmluZSBDT05fQklOIDIJCQkvKiBDb25zb2xlIHN0YXRl IGlzIGJpbmFyeSAqLwotICAgIHN0YXRpYyBpbnQgY29uc3RhdGUgPSBDT05fUkVTOwotCi0jZGVm aW5lIENPTklfUkVTIDAJCQkvKiBDb25zb2xlIGludGVycnVwdHMgYXJlICJyZXNldCIgKi8KLSNk ZWZpbmUgQ09OSV9JTlQgMQkJCS8qIENvbnNvbGUgaW50dGVydXB0cyBhcmUgc2V0ICovCi0jZGVm aW5lIENPTklfTk9JIDIJCQkvKiBDb25zb2xlIGludHRlcnVwdHMgYXJlIGRpc2FibGVkICovCi0g ICAgc3RhdGljIGludCBjb25pc3RhdGUgPSBDT05JX1JFUzsKLQotI2lmZGVmIENLX1NNQUxMCi0j ZGVmaW5lIENPTkJVRlNJWiAxNQotI2Vsc2UKLSNkZWZpbmUgQ09OQlVGU0laIDI1NQotI2VuZGlm IC8qIENLX1NNQUxMICovCi0gICAgc3RhdGljIGNoYXIgY29uYnVmW0NPTkJVRlNJWl07CS8qIENv bnNvbGUgcmVhZGFoZWFkIGJ1ZmZlciAqLwotICAgIHN0YXRpYyBpbnQgIGNvbmJ1Zm4gPSAwOwkJ LyogQ2hhcnMgaW4gcmVhZGFoZWFkIGJ1ZmZlciAqLwotICAgIHN0YXRpYyBjaGFyICpjb25idWZw ID0gY29uYnVmOwkvKiBOZXh0IGNoYXIgaW4gcmVhZGFoZWFkIGJ1ZmZlciAqLwotCi0gICAgY2hh ciBjdHRuYW1bREVWTkFNTEVOKzFdID0geyAnXDAnLCAnXDAnIH07IC8qIERldGVybWluZWQgYXQg cnVudGltZSAqLwotCi0jaWZkZWYgUlRVCi0gICAgaW50IHJ0dV9idWcgPSAwOwkJICAgIC8qIHNl dCB0byAxIHdoZW4gcmV0dXJuaW5nIGZyb20gU0lHVFNUUCAqLwotI2VuZGlmIC8qIFJUVSAqLwot Ci0gICAgaW50IGRmcHJ0eSA9IERFRlBBUjsgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBwYXJp dHkgKDAgPSBub25lKSAqLwotICAgIGludCB0dHBydHkgPSAwOyAgICAgICAgICAgICAgICAgICAg IC8qIFRoZSBwYXJpdHkgdGhhdCBpcyBpbiB1c2UuICovCi0gICAgc3RhdGljIGludCB0dHBtc2sg PSAweGZmOwkJLyogUGFyaXR5IHN0cmlwcGluZyBtYXNrLiAqLwotICAgIGludCB0dG1kbSA9IDA7 ICAgICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGluIHVzZS4gKi8KLSAgICBpbnQgdHRjYXJy ID0gQ0FSX0FVVDsJCS8qIENhcnJpZXIgaGFuZGxpbmcgbW9kZS4gKi8KLSAgICBpbnQgZGZmbG93 ID0gRkxPX05PTkU7CQkvKiBEZWZhdWx0IGZsb3cgY29udHJvbCBpcyBOT05FICovCi0gICAgaW50 IGJhY2tncmQgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIGluIGZvcmVncm91bmQg KG5vICcmJyApICovCi0jaWZkZWYgRl9TRVRGTAotICAgIGludCBpbmlmbGFncyA9IC0xOwkJCS8q IGZjbnRsIGZsYWdzIGZvciB0dHlmZCAqLwotI2VuZGlmIC8qIEZfU0VURkwgKi8KLSAgICBpbnQg ZmRmbGFnID0gMDsJCQkvKiBGbGFnIGZvciByZWRpcmVjdGVkIHN0ZGlvICovCi0gICAgaW50IHR0 ZmRmbGcgPSAwOwkJCS8qIE9wZW4gRmlsZSBkZXNjcmlwdG9yIHdhcyBnaXZlbiAqLwotICAgIGlu dCB0dnRmbGcgPSAwOwkJCS8qIEZsYWcgdGhhdCB0dHZ0IGhhcyBiZWVuIGNhbGxlZCAqLwotICAg IGxvbmcgdHRzcGVlZCA9IC0xTDsJCQkvKiBGb3Igc2F2aW5nIHNwZWVkICovCi0gICAgaW50IHR0 ZmxvdyA9IC05OwkJCS8qIEZvciBzYXZpbmcgZmxvdyAqLwotICAgIGludCB0dGxkID0gLTE7CQkJ LyogTGluZSBkaXNjaXBsaW5lICovCi0KLSNpZmRlZiBzb255X25ld3MKLSAgICBzdGF0aWMgaW50 IGttX2NvbiA9IC0xOwkJLyogS2FuamkgbW9kZSBmb3IgY29uc29sZSB0dHkgKi8KLSAgICBzdGF0 aWMgaW50IGttX2V4dCA9IC0xOwkJLyogS2FuamkgbW9kZSBmb3IgZXh0ZXJuYWwgZGV2aWNlICov Ci0jZW5kaWYgLyogc29ueV9uZXdzICovCi0KLSNpZmRlZiBQQVJTRU5TRQotICAgIHN0YXRpYyBp bnQgbmVlZHBjaGsgPSAxOwkJLyogTmVlZCBwYXJpdHkgY2hlY2sgKi8KLSNlbHNlCi0gICAgc3Rh dGljIGludCBuZWVkcGNoayA9IDA7Ci0jZW5kaWYgLyogUEFSU0VOU0UgKi8KLQotICAgIGV4dGVy biBpbnQgc3RvcGJpdHM7CQkvKiBTdG9wIGJpdHMgKi8KLSNpZmRlZiBIV1BBUklUWQotLyoKLSAg VW5mb3J0dW5hdGVseSB3ZSBtdXN0IGRvIHRoaXMgd2l0aCBnbG9iYWwgdmFyaWFibGVzIHJhdGhl ciB0aGFuIHRocm91Z2ggdGhlCi0gIHR0Li4uKCkgQVBJcyB0byBhdm9pZCBjaGFuZ2luZyB0aGUg QVBJcyBhbmQgdGhlIG1hbnkgbW9kdWxlcyB0aGF0IHVzZSB0aGVtLgotICBJZiBod3Bhcml0eSAh PSAwLCB0aGlzIGluZGljYXRlcyA4IGRhdGEgYml0cyArIHBhcml0eSwgcmF0aGVyIHRoYW4gNyBk YXRhCi0gIGJpdHMgKyBwYXJpdHkgb3IgOCBkYXRhIGJpdHMgYW5kIG5vIHBhcml0eSwgYW5kIG92 ZXJyaWRlcyB0aGUgcmVndWxhciBwYXJpdHkKLSAgdmFyaWFibGUsIHdoaWNoIGlzIGNvbW11bmlj YXRlZCB0byB0aGlzIG1vZHVsZSB0aHJ1IHR0cGt0KCksIGFuZCByZXByZXNlbnRlZAotICBsb2Nh bGx5IGJ5IHRoZSB0dHBydHkgdmFyaWFibGUuCi0qLwotICAgIGV4dGVybiBpbnQgaHdwYXJpdHk7 CQkvKiBIYXJkd2FyZSBwYXJpdHkgKi8KLSNlbmRpZiAvKiBIV1BBUklUWSAqLwotCi0jaWZkZWYg VENQU09DS0VUCi0jaWZkZWYgVENQX05PREVMQVkKLXN0YXRpYyBpbnQgbm9kZWxheV9zYXYgPSAt MTsKLSNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi1z dGF0aWMgaW50IHNpZ2ludF9pZ24gPSAwOwkJLyogU0lHSU5UIGlzIGlnbm9yZWQgKi8KLQotLyoK LSAgSGF2aW5nIHRoaXMgbW9kdWxlIHJlbHkgb24gZXh0ZXJuYWwgZ2xvYmFscyBpcyBiYWQsIGJ1 dCBmaXhpbmcgdGhpcwotICByZXF1aXJlcyBvdmVyaGF1bCBvZiB0aGUgY2sqdGlvLmMgbW9kdWxl cyBmb3IgYWxsIHRoZSBkaWZmZXJlbnQgb3BlcmF0aW5nCi0gIHN5c3RlbXMgc3VwcG9ydGVkIGJ5 IEMtS2VybWl0LiAgTGVmdCBmb3IgYSBmdXR1cmUgcmVsZWFzZS4KLSovCi1leHRlcm4gaW50IHR0 bnByb3RvOwkJCS8qIERlZmluZWQgaW4gY2tjbmV0LmMgKi8KLWV4dGVybiBpbnQgdHRuZXQ7CQkJ LyogRGVmaW5lZCBpbiBja2NuZXQuYyAqLwotZXh0ZXJuIGludCBub3B1c2gsIHhmcmNhbiwgeGZy Y2hyLCB4ZnJudW07IC8qIERlZmluZWQgaW4gY2tjbWFpLmMgKi8KLWV4dGVybiBpbnQgeHN1c3Bl bmQsIHdhc2Nsb3NlZDsKLWV4dGVybiBpbnQgaW5zZXJ2ZXIsIGxvY2FsOwotCi1pbnQgY2t4ZWNo ID0gMDsgLyogMCBpZiBzeXN0ZW0gbm9ybWFsbHkgZWNob2VzIGNvbnNvbGUgY2hhcmFjdGVycywg ZWxzZSAxICovCi0KLWludCBja21heGZpbGVzID0gMDsJCQkvKiBNYXggbnVtYmVyIG9mIG9wZW4g ZmlsZXMgKi8KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04JCQkvKiBLZXJiZXJvcyAqLwotI2luY2x1 ZGUgImNrdWF0aC5oIgotZXh0ZXJuIGludCBtZV9lbmNyeXB0LCB1X2VuY3J5cHQ7Ci0jZW5kaWYg LyogQ0tfRU5DUllQVElPTiAqLwotCi0vKiBEZWNsYXJhdGlvbnMgb2YgdmFyaWFibGVzIGdsb2Jh bCB3aXRoaW4gdGhpcyBtb2R1bGUgKi8KLQotI2lmZGVmIFRUTEVCVUYJCQkJLyogU2VlIGNrY25l dC5oICovCi1pbnQgdHRwdXNoID0gLTE7Ci0jZGVmaW5lIExFQlVGU0laIDQwOTYKLXN0YXRpYyBD SEFSIGxlX2J1ZltMRUJVRlNJWl07Ci1zdGF0aWMgaW50IGxlX3N0YXJ0ID0gMCwgbGVfZW5kID0g MCwgbGVfZGF0YSA9IDA7Ci0jZW5kaWYgLyogVFRMRUJVRiAqLwotCi0jZGVmaW5lIE1TR0JVRl9T SVpFIDEwMjQJCS8qIEZvciBkZWJ1Z2dpbmcgKi8KLXN0YXRpYyBjaGFyIG1zZ2J1ZltNU0dCVUZf U0laRV07Ci0KLXN0YXRpYyBpbnQgZ290c2lncyA9IDA7Ci0KLXN0YXRpYyB0aW1lX3QgdGNvdW50 ID0gKHRpbWVfdCkwOwkvKiBFbGFwc2VkIHRpbWUgY291bnRlciAqLwotCi1zdGF0aWMgU0lHVFlQ ICgqc2F2YWwpKCkgICAgID0gTlVMTDsJLyogRm9yIHNhdmluZyBhbGFybSgpIGhhbmRsZXIgKi8K LXN0YXRpYyBTSUdUWVAgKCpzYXZxdWl0KSgpICAgPSBOVUxMOwkvKiBhbmQgb3RoZXIgc2lnbmFs IGhhbmRsZXJzICovCi0jaWZkZWYgU0lHVVNSMQotc3RhdGljIFNJR1RZUCAoKnNhdnVzcjEpKCkg ICA9IE5VTEw7Ci0jZW5kaWYgLyogU0lHVVNSMSAqLwotI2lmZGVmIFNJR1VTUjIKLXN0YXRpYyBT SUdUWVAgKCpzYXZ1c3IyKSgpICAgPSBOVUxMOwotI2VuZGlmIC8qIFNJR1VTUjIgKi8KLSNpZmRl ZiBTSUdQSVBFCi1zdGF0aWMgU0lHVFlQICgqc2F2cGlwZSkoKSAgID0gTlVMTDsKLSNlbmRpZiAv KiBTSUdQSVBFICovCi0jaWZkZWYgU0lHREFOR0VSCi1zdGF0aWMgU0lHVFlQICgqc2F2ZGFuZ2Vy KSgpID0gTlVMTDsKLSNlbmRpZiAvKiBTSUdEQU5HRVIgKi8KLQotI2lmbmRlZiBOT0pDCi1zdGF0 aWMgU0lHVFlQICgqamNoZGxyKSgpICAgID0gTlVMTDsJLyogRm9yIGNoZWNraW5nIHN1c3BlbmQg aGFuZGxlciAqLwotI2VuZGlmIC8qIE5PSkMgKi8KLXN0YXRpYyBpbnQgamNzaGVsbCA9IC0xOwkJ LyogQW5kIGZsYWcgZm9yIHJlc3VsdCAqLwotCi0vKgotICBCUkVBS05VTFMgaXMgZGVmaW5lZCBm b3Igc3lzdGVtcyB0aGF0IHNpbXVsYXRlIHNlbmRpbmcgYSBCUkVBSyBzaWduYWwKLSAgYnkgc2Vu ZGluZyBhIGJ1bmNoIG9mIE5VTCBjaGFyYWN0ZXJzIGF0IGxvdyBzcGVlZC4KLSovCi0jaWZkZWYg UFJPVlgxCi0jaWZuZGVmIEJSRUFLTlVMUwotI2RlZmluZSBCUkVBS05VTFMKLSNlbmRpZiAvKiBC UkVBS05VTFMgKi8KLSNlbmRpZiAvKiBQUk9WWDEgKi8KLQotI2lmZGVmIFY3Ci0jaWZuZGVmIEJS RUFLTlVMUwotI2RlZmluZSBCUkVBS05VTFMKLSNlbmRpZiAvKiBCUkVBS05VTFMgKi8KLSNlbmRp ZiAvKiBWNyAqLwotCi0jaWZkZWYgQlJFQUtOVUxTCi1zdGF0aWMgY2hhcgkJCQkvKiBBIHN0cmlu ZyBvZiBudWxscyAqLwotKmJybnVscyA9ICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwIjsKLSNlbmRpZiAvKiBCUkVBS05VTFMgKi8KLQotI2lmZGVm IENLX1BPU0lYX1NJRwkJCS8qIExvbmdqdW1wIGJ1ZmZlcnMgKi8KLXN0YXRpYyBzaWdqbXBfYnVm IHNqYnVmOwkJLyogUE9TSVggc2lnbmFsIGhhbmRsaW5nICovCi0jZWxzZQotc3RhdGljIGptcF9i dWYgc2pidWY7Ci0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0KLSNpZmRlZiBWNwotc3RhdGlj IGptcF9idWYgampidWY7Ci0jZW5kaWYgLyogVjcgKi8KLQotLyogc3RhdGljICovCQkJCS8qIChO b3Qgc3RhdGljIGFueSBtb3JlKSAqLwotaW50IHR0eWZkID0gLTE7CQkJCS8qIFRUWSBmaWxlIGRl c2NyaXB0b3IgKi8KLQotaW50IHR0cGlwZSA9IDA7CQkJCS8qIE5FVENNRDogVXNlIHBpcGUgaW5z dGVhZCBvZiB0dHlmZCAqLwotaW50IHR0cHR5ICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE5FVFBUWTogVXNlIHB0eSBpbnN0ZWFkIG9mIHR0ZnlkICovCi0KLSNpZmRlZiBORVRQVFkJ CQkJLyogVGhlc2UgYXJlIGluIGNrdXB0eS5jICovCi1leHRlcm4gUElEX1QgcHR5X2ZvcmtfcGlk OwotZXh0ZXJuIGludCBwdHlfbWFzdGVyX2ZkLCBwdHlfc2xhdmVfZmQ7Ci0jZW5kaWYJLyogTkVU UFRZICovCi0KLSNpZmRlZiBORVRDTUQKLSNpZmRlZiBORVRDT05OCi1zdGF0aWMgaW50IHBpcGUw WzJdLCBwaXBlMVsyXTsJCS8qIFBpcGVzIGZvciBuZXQgaS9vICovCi0jZW5kaWYgLyogTkVUQ09O TiAqLwotc3RhdGljIFBJRF9UIHR0cGlkID0gMDsJCQkvKiBQcm9jZXNzIElEIGZvciBmb3JrICov Ci1zdGF0aWMgaW50IGZkaW4sIGZkb3V0OwkJCS8qIEZpbGUgZGVzY3JpcHRvcnMgZm9yIHBpcGUg Ki8KLXN0YXRpYyBGSUxFICogdHRvdXQgPSBOVUxMOwkJLyogRmlsZSBwb2ludGVyIGZvciBvdXRw dXQgcGlwZSAqLwotI2lmZGVmIERDTEZET1BFTgotLyogZmRvcGVuKCkgbmVlZHMgZGVjbGFyaW5n IGJlY2F1c2UgaXQncyBub3QgZGVjbGFyZWQgaW4gPHN0ZGlvLmg+ICovCi1fUFJPVE9UWVAoIEZJ TEUgKiBmZG9wZW4sIChpbnQsIGNoYXIgKikgKTsKLSNlbmRpZiAvKiBEQ0xGRE9QRU4gKi8KLSNl bmRpZiAvKiBORVRDTUQgKi8KLQotZXh0ZXJuIGludCBwZXhpdHN0YXQsIHF1aWV0OwotCi0jaWZk ZWYgUGxhbjkKLWludCB0dHljdGxmZCAgPSAtMTsgICAvKiBUVFkgY29udHJvbCBjaGFubmVsIC0g V2hhdD8gVU5JWCBkb2Vzbid0IGhhdmUgb25lPyAqLwotaW50IGNvbnNjdGxmZCA9IC0xOwkJCS8q IENvbnNvbGUgY29udHJvbCBjaGFubmVsICovCi1pbnQgbm9pc2VmZCA9IC0xOwkJCS8qIHRvbmUg Y2hhbm5lbCAqLwotc3RhdGljIGludCB0dHlsYXN0c3BlZWQgPSAtMTsJCS8qIFNvIHdlIGNhbiBs aWUgYWJvdXQgdGhlIHNwZWVkICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLQotaW50IHRlbG5ldGZk ID0gMDsJCQkvKiBGaWxlIGRlc2NyaXB0b3IgaXMgZm9yIHRlbG5ldCAqLwotI2lmZGVmIE5FVENP Tk4KLWludCB4MjVmZCA9IDA7CQkJCS8qIEZpbGUgZGVzY3JpcHRvciBpcyBmb3IgWC4yNSAqLwot I2VuZGlmIC8qIE5FVENPTk4gKi8KLQotY2hhciBsb2NrcGlkWzE2XSA9IHsgJ1wwJywgJ1wwJyB9 OwkvKiBQSUQgc3RvcmVkIGluIGxvY2tmaWxlLCBhcyBzdHJpbmcgKi8KLQotc3RhdGljIGludCBs a2YgPSAwLCAgICAgICAgICAgICAgICAgICAgIC8qIExpbmUgbG9jayBmbGFnICovCi0gICAgY2dt ZiA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyB0aGF0IGNvbnNvbGUgbW9k ZXMgc2F2ZWQgKi8KLSAgICB4bG9jYWwgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBG bGFnIGZvciB0dHkgbG9jYWwgb3IgcmVtb3RlICovCi0gICAgY3VyY2FyciA9IDA7CQkJLyogQ2Fy cmllciBtb2RlOiByZXF1aXJlL2lnbm9yZS4gKi8KLQotc3RhdGljIGludCBuZXRjb25uID0gMDsJ CQkvKiAxIGlmIG5ldHdvcmsgY29ubmVjdGlvbiBhY3RpdmUgKi8KLQotc3RhdGljIGNoYXIgZXNj Y2hyOyAgICAgICAgICAgICAgICAgICAgIC8qIEVzY2FwZSBvciBhdHRuIGNoYXJhY3RlciAqLwot Ci0jaWZkZWYgQ0tfU0NPMzJWNAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYgLyogQ0tf U0NPMzJWNCAqLwotCi0jaWZkZWYgSEFWRV9UVgotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0 djsJCS8qIEZvciBnZXR0aW5nIHRpbWUsIGZyb20gc3lzL3RpbWUuaCAqLwotI2VuZGlmIC8qIEhB VkVfVFYgKi8KLSNpZmRlZiBIQVZFX1RaCi0gICAgc3RhdGljIHN0cnVjdCB0aW1lem9uZSB0ejsK LSNlbmRpZiAvKiBIQVZFX1RaICovCi0KLSNpZmRlZiBPU0YKLSAgICBzdGF0aWMgc3RydWN0IHRp bWViIGZ0cDsgICAgICAgICAgICAvKiBBbmQgZnJvbSBzeXMvdGltZWIuaCAqLwotI2VuZGlmIC8q IE9TRiAqLwotCi0jaWZkZWYgQlNEMjkKLSAgICBzdGF0aWMgbG9uZyB4Y2xvY2s7CQkJLyogRm9y IGdldHRpbmcgdGltZSBmcm9tIHN5cy90aW1lLmggKi8KLSAgICBzdGF0aWMgc3RydWN0IHRpbWVi IGZ0cDsgICAgICAgICAgICAvKiBBbmQgZnJvbSBzeXMvdGltZWIuaCAqLwotI2VuZGlmIC8qIEJT RDI5ICovCi0KLSNpZmRlZiBCU0Q0MQotICAgIHN0YXRpYyBsb25nIHhjbG9jazsJCQkvKiBGb3Ig Z2V0dGluZyB0aW1lIGZyb20gc3lzL3RpbWUuaCAqLwotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIg ZnRwOyAgICAgICAgICAgIC8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCi0jZW5kaWYgLyogQlNE NDEgKi8KLQotI2lmZGVmIEJFTExWMTAKLSAgICBzdGF0aWMgbG9uZyB4Y2xvY2s7CQkJLyogRm9y IGdldHRpbmcgdGltZSBmcm9tIHN5cy90aW1lLmggKi8KLSAgICBzdGF0aWMgc3RydWN0IHRpbWVi IGZ0cDsgICAgICAgICAgICAvKiBBbmQgZnJvbSBzeXMvdGltZWIuaCAqLwotI2VuZGlmIC8qIEJF TExWMTAgKi8KLQotI2lmZGVmIEZUMjEKLSAgICBzdGF0aWMgbG9uZyB4Y2xvY2s7CQkJLyogRm9y IGdldHRpbmcgdGltZSBmcm9tIHN5cy90aW1lLmggKi8KLSAgICBzdGF0aWMgc3RydWN0IHRpbWVi IGZ0cDsgICAgICAgICAgICAvKiBBbmQgZnJvbSBzeXMvdGltZWIuaCAqLwotI2VuZGlmIC8qIEZU MjEgKi8KLQotI2lmZGVmIFRPV0VSMQotICAgIHN0YXRpYyBsb25nIHhjbG9jazsJCQkvKiBGb3Ig Z2V0dGluZyB0aW1lIGZyb20gc3lzL3RpbWUuaCAqLwotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIg ZnRwOwkJLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KLSNlbmRpZiAvKiBUT1dFUjEgKi8KLQot I2lmZGVmIENPSEVSRU5UCi0gICAgc3RhdGljIGxvbmcgeGNsb2NrOwkJCS8qIEZvciBnZXR0aW5n IHRpbWUgZnJvbSBzeXMvdGltZS5oICovCi0gICAgc3RhdGljIHN0cnVjdCB0aW1lYiBmdHA7CQkv KiBBbmQgZnJvbSBzeXMvdGltZWIuaCAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLSNpZmRl ZiBWNwotICAgIHN0YXRpYyBsb25nIHhjbG9jazsKLSNlbmRpZiAvKiBWNyAqLwotCi0vKiBzZ3R0 eS90ZXJtaW8gaW5mb3JtYXRpb24uLi4gKi8KLQotI2lmZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIFBP U0lYIG9yIEJTRDQ0ICovCi0gIHN0YXRpYyBzdHJ1Y3QgdGVybWlvcwotICAgIHR0b2xkLCB0dHJh dywgdHR0dnQsIHR0Y3VyLAotICAgIGNjb2xkLCBjY3JhdywgY2NjYnJrOwotI2Vsc2UJCQkJCS8q IEJTRCwgVjcsIGV0YyAqLwotCi0jaWZkZWYgQ09IRVJFTlQJCQkJLyogSGFjayBhbGVydC4uLiAq LwotI2RlZmluZSBBVFRTVgotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLSNpZmRlZiBBVFRTVgot ICBzdGF0aWMgc3RydWN0IHRlcm1pbyB0dG9sZCA9IHswfTsJLyogSW5pdCdkIGZvciB3b3JkIGFs aWdubWVudCwgKi8KLSAgc3RhdGljIHN0cnVjdCB0ZXJtaW8gdHRyYXcgPSB7MH07CS8qIHdoaWNo IGlzIGltcG9ydGFudCBmb3Igc29tZSAqLwotICBzdGF0aWMgc3RydWN0IHRlcm1pbyB0dHR2dCA9 IHswfTsJLyogc3lzdGVtcywgbGlrZSBaaWxvZy4uLiAqLwotICBzdGF0aWMgc3RydWN0IHRlcm1p byB0dGN1ciA9IHswfTsKLSAgc3RhdGljIHN0cnVjdCB0ZXJtaW8gY2NvbGQgPSB7MH07Ci0gIHN0 YXRpYyBzdHJ1Y3QgdGVybWlvIGNjcmF3ID0gezB9OwotICBzdGF0aWMgc3RydWN0IHRlcm1pbyBj Y2NicmsgPSB7MH07Ci0jZWxzZQotICBzdGF0aWMgc3RydWN0IHNndHR5YiAgICAgICAgICAgICAg ICAgIC8qIHNndHR5IGluZm8uLi4gKi8KLSAgICB0dG9sZCwgdHRyYXcsIHR0dHZ0LCB0dGN1ciwg CS8qIGZvciBjb21tdW5pY2F0aW9uIGxpbmUgKi8KLSAgICBjY29sZCwgY2NyYXcsIGNjY2JyazsJ CS8qIGFuZCBmb3IgY29uc29sZSAqLwotI2lmZGVmIEJFTExWMTAKLSAgc3RhdGljIHN0cnVjdCB0 dHlkZXZiCQkJLyogRGV2aWNlIGluZm8uLi4gKi8KLSAgICB0ZG9sZCwgdGRjdXI7CQkJLyogZm9y IGNvbW11bmljYXRpb24gZGV2aWNlICovCi0jZW5kaWYgLyogQkVMTFYxMCAqLwotI2lmZGVmIFRJ T0NHRVRDCi0gIHN0YXRpYyBzdHJ1Y3QgdGNoYXJzIHRjaG9sZCwgdGNobm9pOwotCi0gIHN0YXRp YyBpbnQgdGNoYXJmOwotI2VuZGlmIC8qIFRJT0NHRVRDICovCi0jaWZkZWYgVElPQ0dMVEMKLSAg c3RhdGljIHN0cnVjdCBsdGNoYXJzIGx0Y2hvbGQsIGx0Y2hub2k7Ci0gIHN0YXRpYyBpbnQgbHRj aGFyZjsKLSNlbmRpZiAvKiBUSU9DR0xUQyAqLwotICBpbnQgbG1vZGVmID0gMDsJCQkvKiBMb2Nh bCBtb2RlcyAqLwotICBpbnQgbG1vZGUgPSAwOwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYg LyogQlNENDRPUlBPU0lYICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBJdCBwaWNrcyB1cCB0aGUg c3BlZWRzIGJ1dCB0aGV5IGRvbid0IHdvcmsgKi8KLSNpZmRlZiBVTklYV0FSRQkJCQkvKiBGb3Ig aGlnaGVyIHNlcmlhbCBzcGVlZHMgKi8KLSNpZmRlZiBVVzcJCQkJLyogaW4gVW5peHdhcmUgNy4w ICovCi0jaW5jbHVkZSA8c3lzL2FzeWMuaD4JCQkvKiBUaGlzIHBpY2tzIHVwIDU3NjAwIGFuZCAx MTUyMDAgKi8KLSNlbmRpZiAvKiBVVzcgKi8KLSNlbmRpZiAvKiBVTklYV0FSRSAqLwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIFBST1ZYMQotICBzdGF0aWMgc3RydWN0IHNndHR5YiB0 dGJ1ZjsKLSNlbmRpZiAvKiBQUk9WWDEgKi8KLQotI2lmZGVmIHVsdHJpeAotLyogZG8gd2UgcmVh bGx5IG5lZWQgdGhpcz8gKi8KLSAgc3RhdGljIHN0cnVjdCBzZ3R0eWIgdmFuaWxsYTsKLSNlbmRp ZiAvKiB1bHRyaXggKi8KLQotI2lmZGVmIEFUVDczMDAKLXN0YXRpYyBpbnQgYXR0bW9kZW0gPSAw OyAgICAgICAgICAgICAgICAvKiBBVFQ3MzAwIGludGVybmFsLW1vZGVtIHN0YXR1cyAqLwotc3Ry dWN0IHVwZGF0YSBkaWFsZXIgPSB7MH07CQkvKiBDb25kaXRpb24gZGlhbGVyIGZvciBkYXRhIGNh bGwgKi8KLSNlbmRpZiAvKiBBVFQ3MzAwICovCi0KLSNpZm5kZWYgTk9VVUNQCi0jZGVmaW5lIEZM Rk5BTUwgMTI4Ci0jaWZuZGVmIFVTRVRUWUxPQ0sKLSNpZmRlZiBSVEFJWAotY2hhciBsa2ZsZm5b RkxGTkFNTF0gPSB7ICdcMCcsICdcMCcgfTsJLyogYW5kIHBvc3NpYmxlIGxpbmsgdG8gaXQgKi8K LSNlbmRpZiAvKiBSVEFJWCAqLwotY2hhciBsb2NrMltGTEZOQU1MXSA9ICB7ICdcMCcsICdcMCcg fTsJLyogTmFtZSBvZiBzZWNvbmQgbG9ja2ZpbGUgKi8KLSNlbmRpZiAvKiBVU0VUVFlMT0NLICov Ci0jZWxzZQotI2RlZmluZSBGTEZOQU1MIDcKLSNlbmRpZiAvKiBOT1VVQ1AgKi8KLWNoYXIgZmxm bmFtW0ZMRk5BTUwrMV0gPSB7ICdcMCcsICdcMCcgfTsgLyogVVVDUCBsb2NrIGZpbGUgcGF0aCBu YW1lICovCi0KLWludCBoYXNsb2NrID0gMDsJCQkvKiA9MSBpZiB0aGlzIGtlcm1pdCBsb2NrZWQg dXVjcCAqLwotCi0jaWZuZGVmIE9YT1MKLSNpZmRlZiBTVk9SUE9TSVgKLXN0YXRpYyBpbnQgY29u ZXNjID0gMDsgICAgICAgICAgICAgICAgICAvKiBzZXQgdG8gMSBpZiBlc2MgY2hhciAoXlwpIHR5 cGVkICovCi0jZWxzZQotI2lmZGVmIFY3Ci1zdGF0aWMgaW50IGNvbmVzYyA9IDA7Ci0jZWxzZQot I2lmZGVmIEM3MAotc3RhdGljIGludCBjb25lc2MgPSAwOwotI2VuZGlmIC8qIEM3MCAqLwotI2Vu ZGlmIC8qIFY3ICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0jZW5kaWYgLyogT1hPUyAqLwot Ci0vKiBMb2NhbCBjb3B5IG9mIGNvbW0gZGV2aWNlIG5hbWUgb3IgbmV0d29yayBob3N0ICovCi1z dGF0aWMgY2hhciB0dG5tc3ZbREVWTkFNTEVOKzFdID0geyAnXDAnLCAnXDAnIH07Ci0jaWZkZWYg VVNFVFRZTE9DSwotc3RhdGljIGNoYXIgbG9ja25hbWVbREVWTkFNTEVOKzFdOwkvKiBEaXR0bywg dGhlIHBhcnQgYWZ0ZXIgIi9kZXYvIi4gKi8KLSNlbmRpZiAvKiBVU0VUVFlMT0NLICovCi0KLSNp ZmRlZiBhZWdpcwotc3RhdGljIHN0YXR1c18kdCBzdDsgICAgICAgICAgICAgICAgICAgIC8qIGVy cm9yIHN0YXR1cyByZXR1cm4gdmFsdWUgKi8KLXN0YXRpYyBzaG9ydCBjb25jcnAgPSAwOyAgICAg ICAgICAgICAgICAvKiB0cnVlIGlmIGNvbnNvbGUgaXMgQ1JQIHBhZCAqLwotc3RhdGljIHVpZF8k dCB0dHl1aWQ7ICAgICAgICAgICAgICAgICAgIC8qIHR0eSB0eXBlIHVpZCAqLwotc3RhdGljIHVp ZF8kdCBjb251aWQ7ICAgICAgICAgICAgICAgICAgIC8qIHN0ZG91dCB0eXBlIHVpZCAqLwotCi0v KiBBUE9MTE8gQWVnaXMgbWFpbigpCi0gKiBlc3RhYmxpc2ggYWNsIHVzYWdlIGFuZCBjbGVhbnVw IGhhbmRsaW5nCi0gKiAgICB0aGlzIG1ha2VzIHN1cmUgdGhhdCBDUlAgcGFkcwotICogICAgZ2V0 IHJlc3RvcmVkIHRvIGEgdXNhYmxlIG1vZGUKLSAqLwotbWFpbihhcmdjLGFyZ3YpIGludCBhcmdj OyBjaGFyICoqYXJndjsgewotICAgICAgICBzdGF0dXNfJHQgc3RhdHVzOwotICAgICAgICBwZm1f JGNsZWFudXBfcmVjIGRpcnR5OwotCi0gICAgICAgIFBJRF9UIHBpZCA9IGdldHBpZCgpOwotCi0g ICAgICAgIC8qIGFjbCB1c2FnZSBhY2NvcmRpbmcgdG8gaW52b2tpbmcgZW52aXJvbm1lbnQgKi8K LSAgICAgICAgZGVmYXVsdF9hY2woVVNFX0RFRkVOVik7Ci0KLSAgICAgICAgLyogZXN0YWJsaXNo IGEgY2xlYW51cCBjb250aW51YXRpb24gKi8KLSAgICAgICAgc3RhdHVzID0gcGZtXyRjbGVhbnVw KGRpcnR5KTsKLSAgICAgICAgaWYgKHN0YXR1cy5hbGwgIT0gcGZtXyRjbGVhbnVwX3NldCkgewot ICAgICAgICAgICAgICAgIC8qIG9ubHkgaGFuZGxlIGZhdWx0cyBmb3IgdGhlIG9yaWdpbmFsIHBy b2Nlc3MgKi8KLSAgICAgICAgICAgICAgICBpZiAocGlkID09IGdldHBpZCgpICYmIHN0YXR1cy5h bGwgPiBwZ21fJG1heF9zZXZlcml0eSkgewotCQkgICAgLyogYmxldyB1cCBpbiBtYWluIHByb2Nl c3MgKi8KLQkJICAgIHN0YXR1c18kdCBxdW87Ci0JCSAgICBwZm1fJGNsZWFudXBfcmVjIGNsZWFu OwotCi0JCSAgICAvKiByZXN0b3JlIHRoZSBjb25zb2xlIGluIGFueSBjYXNlICovCi0JCSAgICBj b25yZXMoKTsKLQotCQkgICAgLyogYXR0ZW1wdCBhIGNsZWFuIGV4aXQgKi8KLQkJICAgIGRlYnVn KEYxMDEsICJjbGVhbnVwIGZhdWx0IHN0YXR1cyIsICIiLCBzdGF0dXMuYWxsKTsKLQotCQkgICAg LyogZG9leGl0KCksIHRoZW4gc2VuZCBzdGF0dXMgdG8gY29udGludWF0aW9uICovCi0JCSAgICBx dW8gPSBwZm1fJGNsZWFudXAoY2xlYW4pOwotCQkgICAgaWYgKHF1by5hbGwgPT0gcGZtXyRjbGVh bnVwX3NldCkKLQkJICAgICAgZG9leGl0KHBnbV8kcHJvZ3JhbV9mYXVsdGVkLC0xKTsKLQkJICAg IGVsc2UgaWYgKHF1by5hbGwgPiBwZ21fJG1heF9zZXZlcml0eSkKLQkJICAgICAgcGZtXyRzaWdu YWwocXVvKTsgLyogYmxldyB1cCBpbiBkb2V4aXQoKSAqLwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAvKiBzZW5kIHRvIHRoZSBvcmlnaW5hbCBjb250aW51YXRpb24gKi8KLSAg ICAgICAgICAgICAgICBwZm1fJHNpZ25hbChzdGF0dXMpOwotICAgICAgICAgICAgICAgIC8qTk9U UkVBQ0hFRCovCi0JICAgIH0KLSAgICAgICAgcmV0dXJuKGNrY21haShhcmdjLCBhcmd2KSk7Ci19 Ci0jZW5kaWYgLyogYWVnaXMgKi8KLQotLyogQU5TSS1zdHlsZSBwcm90b3R5cGVzIGZvciBpbnRl cm5hbCBmdW5jdGlvbnMuICovCi0vKiBGdW5jdGlvbnMgdXNlZCBvdXRzaWRlIHRoaXMgbW9kdWxl IGFyZSBwcm90b3R5cGVkIGluIGNrY2tlci5oLiAqLwotCi0jaWZkZWYgYXBvbGxvCi1fUFJPVE9U WVAoIFNJR1RZUCB0aW1lcmgsICgpICk7Ci1fUFJPVE9UWVAoIFNJR1RZUCBjY3RyYXAsICgpICk7 Ci1fUFJPVE9UWVAoIFNJR1RZUCBlc2N0cnAsICgpICk7Ci1fUFJPVE9UWVAoIFNJR1RZUCBzaWdf aWduLCAoKSApOwotI2Vsc2UKLV9QUk9UT1RZUCggU0lHVFlQIHRpbWVyaCwgKGludCkgKTsKLV9Q Uk9UT1RZUCggU0lHVFlQIGNjdHJhcCwgKGludCkgKTsKLV9QUk9UT1RZUCggU0lHVFlQIGVzY3Ry cCwgKGludCkgKTsKLSNlbmRpZiAvKiBhcG9sbG8gKi8KLV9QUk9UT1RZUCggaW50IGRvX29wZW4s IChjaGFyICopICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgaW5fY2hrLCAoaW50LCBpbnQpICk7 Ci1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgdHRycGlkLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBz dGF0aWMgaW50IHR0Y2hrcGlkLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBzdGF0aWMgaW50IHR0 bG9jaywgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggc3RhdGljIGludCB0dHVubGNrLCAodm9pZCkg KTsKLV9QUk9UT1RZUCggc3RhdGljIFZPSUQgc2lnY2hsZF9oYW5kbGVyLCAoaW50KSApOwotX1BS T1RPVFlQKCBpbnQgbXlnZXRidWYsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgbXlmaWxsYnVm LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBjb25iZ3QsIChpbnQpICk7Ci0jaWZkZWYgQUNV Q05UUkwKLV9QUk9UT1RZUCggVk9JRCBhY3VjbnRybCwgKGNoYXIgKiwgY2hhciAqKSApOwotI2Vu ZGlmIC8qIEFDVUNOVFJMICovCi0KLSNpZmRlZiBCU0Q0NE9SUE9TSVgKLV9QUk9UT1RZUCggaW50 IGNhcnJjdGwsIChzdHJ1Y3QgdGVybWlvcyAqLCBpbnQpICk7Ci0jZWxzZQotI2lmZGVmIEFUVFNW Ci1fUFJPVE9UWVAoIGludCBjYXJyY3RsLCAoc3RydWN0IHRlcm1pbyAqLCBpbnQpICk7Ci0jZWxz ZQotX1BST1RPVFlQKCBpbnQgY2FycmN0bCwgKHN0cnVjdCBzZ3R0eWIgKiwgaW50KSApOwotI2Vu ZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0KLSNpZmRlZiBBVFQ3 MzAwCi1fUFJPVE9UWVAoIGludCBhdHRkaWFsLCAoY2hhciAqLCBsb25nLCBjaGFyICopICk7Ci1f UFJPVE9UWVAoIGludCBvZmZnZXR0eSwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IG9uZ2V0 dHksIChjaGFyICopICk7Ci0jZW5kaWYgLyogQVRUNzMwMCAqLwotCi0jaWZkZWYgQkVPU09SQkVC T1gKLSNpZmRlZiBTRUxFQ1QKLSAgICAvKiBCZU9TIGlzIG5vdCBjYXBhYmxlIG9mIHVzaW5nIFNF TEVDVCBvbiBhbnl0aGluZyBidXQgc29ja2V0cyAqLwotI3VuZGVmIFNFTEVDVAotI2VuZGlmIC8q IFNFTEVDVCAqLwotI2luY2x1ZGUgPGtlcm5lbC9PUy5oPgotLyogI2lmZGVmIEJFX0RSXzcgKi8K LXN0YXRpYyBkb3VibGUgdGltZV9zdGFydGVkID0gMC4wOwotc3RydWN0IEFMQVJNX1NUUlVDVCB7 Ci0gICAgdGhyZWFkX2lkIHRocmVhZDsKLSAgICBpbnQgdGltZTsKLX07Ci1zdGF0aWMgdGhyZWFk X2lkIGFsYXJtX3RocmVhZCA9IC0xOwotc3RhdGljIHN0cnVjdCBBTEFSTV9TVFJVQ1QgYWxhcm1f c3RydWN0OwotX1BST1RPVFlQKCBsb25nIGRvX2FsYXJtLCAodm9pZCAqKSApOwotX1BST1RPVFlQ KCB1bnNpZ25lZCBpbnQgYWxhcm0sICh1bnNpZ25lZCBpbnQpICk7Ci1fUFJPVE9UWVAoIHZvaWQg YWxhcm1fZXhwaXJlZCwgKHZvaWQpICk7Ci0vKiAjZW5kaWYgKi8gLyogQkVfRFJfNyAqLwotI2Vu ZGlmIC8qIEJFT1NPUkJFQk9YICovCi0KLSNpZm5kZWYgeHVuY2hhcgotI2RlZmluZSB4dW5jaGFy KGNoKSAoKChjaCkgLSAzMiApICYgMHhGRiApCS8qIENoYXJhY3RlciB0byBudW1iZXIgKi8KLSNl bmRpZiAvKiB4dW5jaGFyICovCi0KLSNpZmRlZiBDS19BTlNJQwotc3RhdGljIGNoYXIgKgoteHhs YXN0KGNoYXIgKnMsIGNoYXIgYykKLSNlbHNlCi1zdGF0aWMgY2hhciAqCi14eGxhc3QocyxjKSBj aGFyICpzOyBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHh4bGFzdCAqLyB7CQkv KiAgTGFzdCBvY2N1cnJlbmNlIG9mIGNoYXJhY3RlciBjIGluIHN0cmluZyBzLiAqLwotICAgIGlu dCBpOwotICAgIGZvciAoaSA9IChpbnQpc3RybGVuKHMpOyBpID4gMDsgaS0tKQotICAgICAgaWYg KHNbaS0xXSA9PSBjICkgcmV0dXJuKHMgKyAoaSAtIDEpKTsKLSAgICByZXR1cm4oTlVMTCk7Ci19 Ci0KLS8qIFRpbWVvdXQgaGFuZGxlciBmb3IgY29tbXVuaWNhdGlvbiBsaW5lIGlucHV0IGZ1bmN0 aW9ucyAqLwotCi0vKkFSR1NVU0VEKi8KLVNJR1RZUAotdGltZXJoKGZvbykgaW50IGZvbzsgewot ICAgIHR0aW1vZmYoKTsKLSNpZmRlZiBCRU9TT1JCRUJPWAotLyogI2lmZGVmIEJFX0RSXzcgKi8K LSAgICBhbGFybV9leHBpcmVkKCk7Ci0vKiAjZW5kaWYgKi8gLyogQkVfRFJfNyAqLwotI2VuZGlm IC8qIEJFT1NPUkJFQk9YICovCi0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0gICAgc2lnbG9uZ2ptcChz amJ1ZiwxKTsKLSNlbHNlCi0gICAgbG9uZ2ptcChzamJ1ZiwxKTsKLSNlbmRpZiAvKiBDS19QT1NJ WF9TSUcgKi8KLX0KLQotLypBUkdTVVNFRCovCi1TSUdUWVAKLXh0aW1lcmgoZm9vKSBpbnQgZm9v OyB7CQkJLyogTGlrZSB0aW1lcmgoKSBidXQgZG9lcyAqLwotI2lmZGVmIEJFT1NPUkJFQk9YCQkJ Lyogbm90IHJlc2V0IHRoZSB0aW1lciBpdHNlbGYgKi8KLS8qICNpZmRlZiBCRV9EUl83ICovCi0g ICAgYWxhcm1fZXhwaXJlZCgpOwotLyogI2VuZGlmICovIC8qIEJFX0RSXzcgKi8KLSNlbmRpZiAv KiBCRU9TT1JCRUJPWCAqLwotI2lmZGVmIENLX1BPU0lYX1NJRwotICAgIHNpZ2xvbmdqbXAoc2pi dWYsMSk7Ci0jZWxzZQotICAgIGxvbmdqbXAoc2pidWYsMSk7Ci0jZW5kaWYgLyogQ0tfUE9TSVhf U0lHICovCi19Ci0KLQotLyogQ29udHJvbC1DIHRyYXAgZm9yIGNvbW11bmljYXRpb24gbGluZSBp bnB1dCBmdW5jdGlvbnMgKi8KLQotaW50IGNjX2ludDsJCQkJLyogRmxhZyAqLwotU0lHVFlQICgq IG9jY3QpKCk7CQkJLyogRm9yIHNhdmluZyBvbGQgU0lHSU5UIGhhbmRsZXIgKi8KLQotLypBUkdT VVNFRCovCi1TSUdUWVAKLWNjdHJhcChmb28pIGludCBmb287IHsJCQkvKiBOZWVkcyBhcmcgZm9y IEFOU0kgQyAqLwotICBjY19pbnQgPSAxOwkJCQkvKiBzaWduYWwoKSBwcm90b3R5cGUuICovCi0g IHJldHVybjsKLX0KLQotLyogIFMgWSBTIEkgTiBJIFQgIC0tICBTeXN0ZW0tZGVwZW5kZW50IHBy b2dyYW0gaW5pdGlhbGl6YXRpb24uICAqLwotCi0vKgotICogdHRnd3NpeigpIHJldHVybnM6Ci0g KgkxICAgIHR0X3Jvd3MgYW5kIHR0X2NvbHMgYXJlIGtub3duLCBib3RoIGFsdGVyZWQsIGJvdGgg PiAwCi0gKgkwICAgIHR0X3Jvd3MgYW5kL29yIHR0X2NvbHMgYXJlIGtub3duLCBib3RoIGFsdGVy ZWQsIG9uZSBvciBib3RoIDw9IDAKLSAqCS0xICAgdHRfcm93cyBhbmQgdHRfY29scyBhcmUgdW5r bm93biBhbmQgdW5hbHRlcmVkCi0gKi8KLQotZXh0ZXJuIGludCB0dF9yb3dzLCB0dF9jb2xzOwot Ci1zdGF0aWMgaW50Ci14dHRnd3NpeigpIHsKLSAgICBjaGFyICpwOwotICAgIGludCByb3dzID0g MCwgY29scyA9IDA7Ci0gICAgcCA9IGdldGVudigiTElORVMiKTsKLSAgICBkZWJ1ZyhGMTEwLCJ4 dHRnd3NpeiBMSU5FUyIscCwwKTsKLSAgICBpZiAocCkgewotCXJvd3MgPSBhdG9sKHApOwotCWlm IChyb3dzID4gMCkgewotCSAgICBwID0gZ2V0ZW52KCJDT0xVTU5TIik7Ci0JICAgIGRlYnVnKEYx MTAsInh0dGd3c2l6IENPTFVNTlMiLHAsMCk7Ci0JICAgIGlmIChwKSB7Ci0JCWNvbHMgPSBhdG9s KHApOwotCQlpZiAoY29scyA+IDApIHsKLQkJICAgIHR0X3Jvd3MgPSByb3dzOwotCQkgICAgdHRf Y29scyA9IGNvbHM7Ci0JCSAgICByZXR1cm4oMSk7Ci0JCX0KLQkJcmV0dXJuKDApOwotCSAgICB9 Ci0JfQotICAgIH0KLSAgICByZXR1cm4oLTEpOwotfQotCi0jaWZkZWYgVFRMRUJVRgotVk9JRAot bGVfaW5pdCgpIHsJCQkJLyogTG9jYWxFY2hvSW5pdCgpICovCi0gICAgaW50IGk7Ci0gICAgZm9y IChpID0gMDsgaSA8IExFQlVGU0laOyBpKyspCi0gICAgICBsZV9idWZbaV0gPSAnXDAnOwotICAg IGxlX3N0YXJ0ID0gMDsKLSAgICBsZV9lbmQgPSAwOwotICAgIGxlX2RhdGEgPSAwOwotfQotCi1W T0lECi1sZV9jbGVhbigpIHsJCQkJLyogTG9jYWxFY2hvQ2xlYW51cCgpICovCi0gICAgbGVfaW5p dCgpOwotICAgIHJldHVybjsKLX0KLQotaW50Ci1sZV9pbmJ1ZigpIHsKLSAgICBpbnQgcmMgPSAw OwotICAgIGlmIChsZV9zdGFydCAhPSBsZV9lbmQpIHsKLQlyYyA9IChsZV9lbmQgLQotCSAgICAg IGxlX3N0YXJ0ICsKLQkgICAgICBMRUJVRlNJWikgJSBMRUJVRlNJWjsKLSAgICB9Ci0gICAgZGVi dWcoRjExMSwibGVfaW5idWYiLCJjaGFycyB3YWl0aW5nIixyYyk7Ci0gICAgcmV0dXJuKHJjKTsK LX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWxlX3B1dGNoYXIoQ0hBUiBjaCkKLSNlbHNlCi1s ZV9wdXRjaGFyKGNoKSBDSEFSIGNoOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBsZV9wdXRj aGFyICovIHsKLSNpZmRlZiBDT01NRU5UCi0gICAgLyogSW4gVU5JWCB3ZSBkbyBub3QgaGF2ZSBh bm90aGVyIHRocmVhZCB0YWtpbmcgY2hhcnMgb3V0IG9mIHRoZSBidWZmZXIgKi8KLSAgICB3aGls ZSAoKGxlX3N0YXJ0IC0gbGVfZW5kID09IDEpIHx8Ci0gICAgICAgICAgICAobGVfc3RhcnQgPT0g MCAmJiBsZV9lbmQgPT0gTEVCVUZTSVogLSAxKSkgewotCS8qIEJ1ZmZlciBpcyBmdWxsICovCi0g ICAgICAgIGRlYnVnKEYxMTEsImxlX3B1dGNoYXIiLCJCdWZmZXIgaXMgRnVsbCIsY2gpOwotICAg ICAgICBSZWxlYXNlTG9jYWxFY2hvTXV0ZXgoKSA7Ci0gICAgICAgIG1zbGVlcCgyNTApOwotICAg ICAgICBSZXF1ZXN0TG9jYWxFY2hvTXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKSA7Ci0gICAg fQotI2Vsc2UKLSAgICBpZiAoKGxlX3N0YXJ0IC0gbGVfZW5kICsgTEVCVUZTSVopJUxFQlVGU0la ID09IDEpIHsKLSAgICAgICAgZGVidWcoRjExMCwibGVfcHV0Y2hhciIsImJ1ZmZlciBpcyBmdWxs IiwwKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgIGxlX2J1ZltsZV9lbmQrK10gPSBjaDsKLSAgICBpZiAobGVfZW5kID09IExFQlVGU0laKQot ICAgICAgbGVfZW5kID0gMDsKLSAgICBsZV9kYXRhID0gMTsKLSAgICByZXR1cm4oMCk7Ci19Ci0K LWludAotI2lmZGVmIENLX0FOU0lDCi1sZV9wdXRzKENIQVIgKiBzLCBpbnQgbikKLSNlbHNlCi1s ZV9wdXRzKHMsbikgQ0hBUiAqIHM7IGludCBuOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBs ZV9wdXRzICovIHsKLSAgICBpbnQgcmMgPSAwOwotICAgIGludCBpID0gMDsKLSAgICBDSEFSICog cCA9IChDSEFSICopImxlX3B1dHMiOwotICAgIGNraGV4ZHVtcChwLHMsbik7Ci0gICAgZm9yIChp ID0gMDsgaSA8IG47IGkrKykKLSAgICAgIHJjID0gbGVfcHV0Y2hhcigoY2hhcilzW2ldKTsKLSAg ICBkZWJ1ZyhGMTAxLCJsZV9wdXRzIiwiIixyYyk7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotaW50 Ci0jaWZkZWYgQ0tfQU5TSUMKLWxlX3B1dHN0cihDSEFSICogcykKLSNlbHNlCi1sZV9wdXRzdHIo cykgQ0hBUiAqIHM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGxlX3B1dHMgKi8gewotICAg IENIQVIgKiBwOwotICAgIGludCByYyA9IDA7Ci0gICAgcCA9IChDSEFSICopImxlX3B1dHN0ciI7 Ci0gICAgY2toZXhkdW1wKHAscywoaW50KXN0cmxlbigoY2hhciAqKXMpKTsKLSAgICBmb3IgKHAg PSBzOyAqcCAmJiAhcmM7IHArKykKLSAgICAgIHJjID0gbGVfcHV0Y2hhcigqcCk7Ci0gICAgcmV0 dXJuKHJjKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWxlX2dldGNoYXIoQ0hBUiAqIHBj aCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi1sZV9nZXRjaGFyKHBjaCkgQ0hBUiAqIHBjaDsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogbGVfZ2F0Y2hhciAqLyB7Ci0gICAgaW50IHJjID0gMDsK LSAgICBpZiAobGVfc3RhcnQgIT0gbGVfZW5kKSB7Ci0gICAgICAgICpwY2ggPSBsZV9idWZbbGVf c3RhcnRdOwotICAgICAgICBsZV9idWZbbGVfc3RhcnRdID0gMDsKLSAgICAgICAgbGVfc3RhcnQr KzsKLQotICAgICAgICBpZiAobGVfc3RhcnQgPT0gTEVCVUZTSVopCi0gICAgICAgICAgbGVfc3Rh cnQgPSAwOwotCi0gICAgICAgIGlmIChsZV9zdGFydCA9PSBsZV9lbmQpIHsKLSAgICAgICAgICAg IGxlX2RhdGEgPSAwOwotICAgICAgICB9Ci0gICAgICAgIHJjKys7Ci0gICAgfSBlbHNlIHsKLSAg ICAgICAgKnBjaCA9IDA7Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19Ci0jZW5kaWYgLyogVFRM RUJVRiAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgU29tZSBzeXN0ZW1zIGxpa2UgT1NGLzEg dXNlIFRJT0NHU0laRSBpbnN0ZWFkIG9mIFRJT0NHV0lOU1ouCi0gIEJ1dCBhcyBmYXIgYXMgSSBr bm93LCB3aGVuZXZlciBUSU9DR1NJWkUgaXMgZGVmaW5lZCwgaXQgaXMKLSAgZXF1YXRlZCB0byBU SU9DR1dJTlNaLiAgRm9yIGNhc2VzIHdoZXJlIHRoaXMgaXMgbm90IGRvbmUsIHRyeSB0aGlzOgot Ki8KLSNpZm5kZWYgVElPQ0dXSU5TWgotI2lmZGVmIFRJT0NHU0laRQotI2RlZmluZSBUSU9DR1dJ TlNaIFRJT0NHU0laRQotI2VuZGlmIC8qIFRJT0NHU0laRSAqLwotI2VuZGlmIC8qIFRJT0NHV0lO U1ogKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLXN0YXRpYyBpbnQgdHRfeHBpeGVsID0gMCwg dHRfeXBpeGVsID0gMDsKLQotaW50Ci10dGd3c2l6KCkgewotICAgIGludCB4ID0gMDsKLSNpZm5k ZWYgTk9OQVdTCi0jaWZkZWYgUU5YCi0vKgotICBOT1RFOiBUSU9DR1dTSVogd29ya3MgaGVyZSB0 b28sIGJ1dCBvbmx5IGluIHRoZSAzMi1iaXQgdmVyc2lvbi4KLSAgVGhpcyBjb2RlIHdvcmtzIGZv ciBib3RoIHRoZSAxNi0gYW5kIDMyLWJpdCB2ZXJzaW9ucy4KLSovCi0gICAgZXh0ZXJuIGludCBk ZXZfc2l6ZShpbnQsIGludCwgaW50LCBpbnQgKiwgaW50ICopOwotICAgIGludCByLCBjOwotCi0g ICAgaWYgKGRldl9zaXplKDAsIC0xLCAtMSwgJnIsICZjKSA9PSAwKSB7Ci0JZGVidWcoRjEwMSwi dHRnd3NpeiBRTlggciIsIiIscik7Ci0JZGVidWcoRjEwMSwidHRnd3NpeiBRTlggYyIsIiIsYyk7 Ci0JdHRfcm93cyA9IHI7Ci0JdHRfY29scyA9IGM7Ci0JcmV0dXJuICgociA+IDAgJiYgYyA+IDAp ID8gMSA6IDApOwotICAgIH0gZWxzZSByZXR1cm4oeHR0Z3dzaXooKSk7Ci0jZWxzZSAvKiBRTlgg Ki8KLSNpZmRlZiBUSU9DR1dJTlNaCi0KLS8qIE5vdGUsIHRoaXMgd2FzIE1fVU5JWCwgY2hhbmdl ZCB0byBYRU5JWCB0byBhbGxvdyBjcm9zcyBjb21waWxhdGlvbi4uLiAqLwotI2lmZGVmIFhFTklY CQkJCS8qIFNDTyBVTklYIDMuMnY0LjAgKi8KLSNpbmNsdWRlIDxzeXMvc3RyZWFtLmg+CQkJLyog dHlwZWRlZiBtYmxrX3QgbmVlZGVkIGJ5IHB0ZW0uaCAqLwotI2luY2x1ZGUgPHN5cy9wdGVtLmg+ CQkJLyogZm9yIHR0Z3dzaXooKSAqLwotI2VuZGlmIC8qIFhFTklYICovCi0KLSNpZmRlZiBJMzg2 SVgJCQkJLyogRGl0dG8gZm9yIEludGVyYWN0aXZlICovCi0jaW5jbHVkZSA8c3lzL3N0cmVhbS5o PgotI2luY2x1ZGUgPHN5cy9wdGVtLmg+Ci0jZW5kaWYgLyogSTM4NklYICovCi0KLS8qIE5vdGUs IHRoZSBhYm92ZSBtaWdodCBiZSBuZWVkZWQgZm9yIHNvbWUgb3RoZXIgb2xkZXIgU1ZSMyBJbnRl bCBtYWtlcy4uLiAqLwotCi0gICAgc3RydWN0IHdpbnNpemUgdzsKLSAgICB0dF94cGl4ZWwgPSAw OwotICAgIHR0X3lwaXhlbCA9IDA7Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyKQot ICAgICAgcmV0dXJuKHh0dGd3c2l6KCkpOwotI2VuZGlmIC8qIElLU0QgKi8KLSAgICB4ID0gaW9j dGwoMCwgKGludClUSU9DR1dJTlNaLCAoY2hhciAqKSZ3KTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dGd3 c2l6IFRJT0NHV0lOU1oiLCIiLHgpOwotICAgIGlmICh4IDwgMCkgewotCXJldHVybih4dHRnd3Np eigpKTsKLSAgICB9IGVsc2UgaWYgKHcud3Nfcm93ID4gMCAmJiB3LndzX2NvbCA+IDApIHsKLQl0 dF9yb3dzID0gdy53c19yb3c7Ci0JdHRfY29scyA9IHcud3NfY29sOwotCXR0X3hwaXhlbCA9IHcu d3NfeHBpeGVsOwotCXR0X3lwaXhlbCA9IHcud3NfeXBpeGVsOwotCWRlYnVnKEYxMDEsInR0Z3dz aXogdHRfcm93cyIsIiIsdHRfcm93cyk7Ci0JZGVidWcoRjEwMSwidHRnd3NpeiB0dF9jb2xzIiwi Iix0dF9jb2xzKTsKLQlyZXR1cm4oMSk7Ci0gICAgfSBlbHNlIHsKLQlkZWJ1ZyhGMTAwLCJ0dGd3 c2l6IFRJT0NHV0lOU1ogMDAiLCIiLDApOwotCXJldHVybih4dHRnd3NpeigpKTsKLSAgICB9Ci0j ZWxzZQotICAgIHJldHVybih4dHRnd3NpeigpKTsKLSNlbmRpZiAvKiBUSU9DR1dJTlNaICovCi0j ZW5kaWYgLyogUU5YICovCi0jZW5kaWYgLyogTk9OQVdTICovCi19Ci0KLQotI2lmZGVmIFJMT0dD T0RFCi1fUFJPVE9UWVAoIGludCBybG9nX25hd3MsICh2b2lkKSApOwotI2VuZGlmCS8qIFJMT0dD T0RFICovCi0KLSNpZm5kZWYgTk9TSUdXSU5DSAotI2lmZGVmIFNJR1dJTkNICi1TSUdUWVAKLXdp bmNoaChmb28pIGludCBmb287IHsJCQkvKiBTSUdXSU5DSCBoYW5kbGVyICovCi0gICAgaW50IHgg PSAwOwotI2lmZGVmIENLX1RUWUZECi0jaWZuZGVmIFZNUwotICAgIGV4dGVybiBpbnQgdHR5ZmQ7 Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogQ0tfVFRZRkQgKi8KLSAgICBleHRlcm4gaW50 IHR0X3Jvd3MsIHR0X2NvbHMsIGNtZF9yb3dzLCBjbWRfY29sczsKLSNpZmRlZiBERUJVRwotICAg IGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKioiLCIiLDApOwotCWRl YnVnKEYxMDAsIlNJR1dJTkNIIGNhdWdodCIsIiIsMCk7Ci0JZGVidWcoRjEwMCwiKioqKioqKioq KioqKioqIiwiIiwwKTsKLSNpZmRlZiBORVRQVFkKLQlkZWJ1ZyhGMTAxLCJTSUdXSU5DSCBwdHlf Zm9ya19waWQiLCIiLHB0eV9mb3JrX3BpZCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgfQot I2VuZGlmIC8qIERFVUIgKi8KLSAgICBzaWduYWwoU0lHV0lOQ0gsd2luY2hoKTsgICAgICAgICAg ICAvKiBSZS1hcm0gdGhlIHNpZ25hbCAqLwotICAgIHggPSB0dGd3c2l6KCk7ICAgICAgICAgICAg ICAgICAgICAgIC8qIEdldCBuZXcgd2luZG93IHNpemUgKi8KLSAgICBjbWRfcm93cyA9IHR0X3Jv d3M7CQkJLyogQWRqdXN0IGNvbW1hbmQgc2NyZWVuIHRvbyAqLwotICAgIGNtZF9jb2xzID0gdHRf Y29sczsKLQotI2lmZGVmIENLX1RUWUZECi0gICAgaWYJCQkJCS8qIElmIHdlIGRvbid0IGhhdmUg YSBjb25uZWN0aW9uICovCi0jaWZkZWYgVk1TCQkJCS8qIHdlJ3JlIGRvbmUuICovCi0gICAgICAo dm1zdHR5ZmQoKSA9PSAtMSkKLSNlbHNlCi0gICAgICAodHR5ZmQgPT0gLTEpCi0jZW5kaWYgLyog Vk1TICovCi0jZWxzZQotICAgICAgKCFsb2NhbCkKLSNlbmRpZiAvKiBDS19UVFlGRCAqLwotICAg ICAgICByZXR1cm47Ci0KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAocHR5X2ZvcmtfcGlkID4gLTEp IHsJCS8qICJzZXQgaG9zdCIgdG8gYSBQVFk/ICovCi0JaW50IHg7Ci0KLSNpZmRlZiBUSU9DU1dJ TlNaCi0Jc3RydWN0IHdpbnNpemUgdzsJCS8qIFJlc2l6ZSB0aGUgUFRZICovCi0JZXJybm8gPSAw OwotCXcud3NfY29sID0gdHRfY29sczsKLQl3LndzX3JvdyA9IHR0X3Jvd3M7Ci0Jdy53c194cGl4 ZWwgPSB0dF94cGl4ZWw7Ci0Jdy53c195cGl4ZWwgPSB0dF95cGl4ZWw7Ci0JeCA9IGlvY3RsKHR0 eWZkLFRJT0NTV0lOU1osJncpOwotCWRlYnVnKEYxMDEsIndpbmNoaCBUSU9DU1dJTlNaIiwiIix4 KTsKLQlkZWJ1ZyhGMTAxLCJ3aW5jaGggVElPQ1NXSU5TWiBlcnJubyIsIiIsZXJybm8pOwotI2Vu ZGlmIC8qIFRJT0NTV0lOU1ogKi8KLQotCWVycm5vID0gMDsKLQl4ID0ga2lsbChwdHlfZm9ya19w aWQsU0lHV0lOQ0gpOwotCWRlYnVnKEYxMDEsIndpbmNoaCBraWxsIiwiIix4KTsKLQlkZWJ1ZyhG MTAxLCJ3aW5jaGgga2lsbCBlcnJubyIsIiIsZXJybm8pOwotICAgIH0KLSNlbmRpZiAvKiBORVRQ VFkgKi8KLQotLyoKLSAgVGhpcyBzaG91bGQgYmUgT0suICBJdCBtaWdodCBzZWVtIHRoYXQgc2Vu ZGluZyB0aGlzIGZyb20KLSAgaW50ZXJydXB0IGxldmVsIGNvdWxkIGludGVyZmVyZSB3aXRoIGFu b3RoZXIgVEVMTkVUIElBQyBzdHJpbmcKLSAgdGhhdCB3YXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVp bmcgc2VudC4gIEJ1dCB3ZSBhbHdheXMgc2VuZAotICBURUxORVQgc3RyaW5ncyB3aXRoIGEgc2lu Z2xlIHdyaXRlKCksIHdoaWNoIHNob3VsZCBwcmV2ZW50IG1peHVwcy4KLSAgYmxhaF9zbmF3cygp IHNob3VsZCBwcm90ZWN0IHRoZW1zZWx2ZXMgZnJvbSBiZWluZyBjYWxsZWQgb24gdGhlCi0gIHdy b25nIGtpbmQgb2YgY29ubmVjdGlvbi4KLSovCi0jaWZkZWYgVENQU09DS0VUCi0jaWZuZGVmIE5P VFRHV1NJWgotICAgIGlmICh4ID4gMCAmJiB0dF9yb3dzID4gMCAmJiB0dF9jb2xzID4gMCkgewot ICAgICAgICB0bl9zbmF3cygpOwotI2lmZGVmIFJMT0dDT0RFCi0gICAgICAgIHJsb2dfbmF3cygp OwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0gICAgfQotI2VuZGlmIC8qIE5PVFRHV1NJWiAqLwot I2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotICAgIFNJR1JFVFVSTjsKLX0KLSNlbmRpZiAvKiBTSUdX SU5DSCAqLwotI2VuZGlmIC8qIE5PU0lHV0lOQ0ggKi8KLQotU0lHVFlQCi1zaWdodXAoZm9vKSBp bnQgZm9vOyB7CQkJLyogU0lHSFVQIGhhbmRsZXIgKi8KLSAgICBiYWNrZ3JkID0gMTsKLSAgICBk ZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKioiLCIiLDApOwotICAgIGRlYnVnKEYxMDAsIlNJR0hV UCByZWNlaXZlZCIsIiIsMCk7Ci0gICAgZGVidWcoRjEwMCwiKioqKioqKioqKioqKioqIiwiIiww KTsKLSAgICBkb2V4aXQoQkFEX0VYSVQsLTEpOwotICAgIC8qTk9UUkVBQ0hFRCovCi0gICAgU0lH UkVUVVJOOwkJCQkvKiBTaHV0IHBpY2t5IGNvbXBpbGVycyB1cC4uLiAqLwotfQotCi0jaWZkZWYg Q0tfU0NPMzJWNAotLyogRXhpc3RzIGJ1dCB0aGVyZSBpcyBubyBwcm90b3R5cGUgaW4gdGhlIGhl YWRlciBmaWxlcyAqLwotX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwgKGludCkgKTsKLSNlbHNl Ci0jaWZkZWYgU1Y2OFIzVjYKLV9QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUsIChpbnQpICk7Ci0j ZWxzZQotI2lmZGVmIHVsdHJpeAotX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwgKGludCkgKTsK LSNlbHNlCi0jaWZkZWYgSFBVWDYKLV9QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUsIChpbnQpICk7 Ci0jZWxzZQotI2lmZGVmIEhQVVg1Ci1fUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSAp OwotI2Vsc2UKLSNpZmRlZiBQUzJBSVgxMAotX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwgKGlu dCkgKTsKLSNlbHNlCi0jaWZkZWYgQlNENDIKLV9QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUsIChp bnQpICk7Ci0jZW5kaWYgLyogQlNENDIgKi8KLSNlbmRpZiAvKiBQUzJBSVgxMCAqLwotI2VuZGlm IC8qIEhQVVg1ICovCi0jZW5kaWYgLyogSFBVWDYgKi8KLSNlbmRpZiAvKiB1bHRyaXggKi8KLSNl bmRpZiAvKiBTVjY4UjNWNiAqLwotI2VuZGlmIC8qIENLX1NDTzMyVjQgKi8KLQotI2lmbmRlZiBT SUdVU1IxCQkJCS8qIFVzZXItZGVmaW5lZCBzaWduYWxzICovCi0jZGVmaW5lIFNJR1VTUjEgMzAK LSNlbmRpZiAvKiBTSUdVU1IxICovCi0KLSNpZm5kZWYgU0lHVVNSMgotI2RlZmluZSBTSUdVU1Iy IDMxCi0jZW5kaWYgLyogU0lHVVNSMiAqLwotCi0vKgotICBpZ25vcnNpZ3MoKSBzZXRzIGNlcnRh aW4gc2lnbmFscyB0byBTSUdfSUdOLiAgQnV0IHdoZW4gYSBzaWduYWwgaXMKLSAgaWdub3JlZCwg aXQgcmVtYWlucyBpZ25vcmVkIGFjcm9zcyBleGVjKCksIHNvIHdlIGhhdmUgdG8gcmVzdG9yZSB0 aGVzZQotICBzaWduYWxzIGJlZm9yZSBleGVjKCksIHdoaWNoIGlzIHRoZSBwdXJwb3NlIG9mIHJl c3RvcnNpZ3MoKS4KLSovCi1zdGF0aWMgVk9JRAotaWdub3JzaWdzKCkgewkJCQkvKiBJZ25vcmUg dGhlc2Ugc2lnbmFscyAqLwotICAgIHNhdnF1aXQgPSBzaWduYWwoU0lHUVVJVCxTSUdfSUdOKTsJ LyogSWdub3JlIFF1aXQgc2lnbmFsICovCi0KLSNpZmRlZiBTSUdEQU5HRVIJCQkvKiBJZ25vcmUg ZGFuZ2VyIHNpZ25hbHMgKi8KLS8qCi0gIFRoaXMgc2lnbmFsIGlzIHNlbnQgd2hlbiB0aGUgc3lz dGVtIGlzIGxvdyBvbiBzd2FwIHNwYWNlLiAgUHJvY2Vzc2VzCi0gIHRoYXQgZG9uJ3QgaGFuZGxl IGl0IGFyZSBjYW5kaWRhdGVzIGZvciB0ZXJtaW5hdGlvbi4gIElmIHN3YXAgc3BhY2UgZG9lc24n dAotICBjbGVhciBvdXQgZW5vdWdoLCB3ZSBzdGlsbCBtaWdodCBiZSB0ZXJtaW5hdGVkIHZpYSBr aWxsKCkgLS0gbm90aGluZyB3ZSBjYW4KLSAgZG8gYWJvdXQgdGhhdCEgIENvbmNlaXZhYmx5LCB0 aGlzIGNvdWxkIGJlIGltcHJvdmVkIGJ5IGluc3RhbGxpbmcgYSByZWFsCi0gIHNpZ25hbCBoYW5k bGVyIHRoYXQgd2FybnMgdGhlIHVzZXIsIGJ1dCB0aGF0IHdvdWxkIGJlIHByZXR0eSBjb21wbGlj YXRlZCwKLSAgc2luY2Ugd2UgYXJlIG5vdCBhbHdheXMgaW4gY29udHJvbCBvZiB0aGUgc2NyZWVu IC0tIGUuZy4gZHVyaW5nIHJlbW90ZS1tb2RlCi0gIGZpbGUgdHJhbnNmZXIuCi0qLwotICAgIHNh dmRhbmdlciA9IHNpZ25hbChTSUdEQU5HRVIsU0lHX0lHTik7IC8qIGUuZy4gaW4gQUlYICovCi0j ZW5kaWYgLyogU0lHREFOR0VSICovCi0jaWZkZWYgU0lHUElQRQotLyoKLSAgVGhpcyBvbmUgY29t ZXMgd2hlbiBhIFRDUC9JUCBjb25uZWN0aW9uIGlzIGJyb2tlbiBieSB0aGUgcmVtb3RlLgotICBX ZSBwcmVmZXIgdG8gY2F0Y2ggdGhpcyBzaXR1YXRpb24gYnkgZXhhbWluaW5nIGVycm9yIGNvZGVz IGZyb20gd3JpdGUoKS4KLSovCi0gICAgc2F2cGlwZSA9IHNpZ25hbChTSUdQSVBFLFNJR19JR04p OwotI2VuZGlmIC8qIFNJR1BJUEUgKi8KLSAgICBzYXZ1c3IxID0gc2lnbmFsKFNJR1VTUjEsU0lH X0lHTik7CS8qIElnbm9yZSB1c2VyLWRlZmluZWQgc2lnbmFscyAqLwotICAgIHNhdnVzcjIgPSBz aWduYWwoU0lHVVNSMixTSUdfSUdOKTsKLX0KLQotVk9JRAotcmVzdG9yc2lncygpIHsJCQkJLyog UmVzdG9yZSB0aGVzZSBzaWduYWxzICovCi0gICAgKFZPSUQpIHNpZ25hbChTSUdRVUlULHNhdnF1 aXQpOwkvKiAodXNlZCBpbiBja3VmaW8uYykgKi8KLSNpZmRlZiBTSUdEQU5HRVIKLSAgICAoVk9J RCkgc2lnbmFsKFNJR0RBTkdFUixzYXZkYW5nZXIpOwotI2VuZGlmIC8qIFNJR0RBTkdFUiAqLwot I2lmZGVmIFNJR1BJUEUKLSAgICAoVk9JRCkgc2lnbmFsKFNJR1BJUEUsc2F2cGlwZSk7Ci0jZW5k aWYgLyogU0lHUElQRSAqLwotICAgIChWT0lEKSBzaWduYWwoU0lHVVNSMSxzYXZ1c3IxKTsKLSAg ICAoVk9JRCkgc2lnbmFsKFNJR1VTUjIsc2F2dXNyMik7Ci19Ci0KLWludAotc3lzaW5pdCgpIHsK LSAgICBpbnQgeDsKLSAgICBjaGFyICogczsKLSNpZmRlZiBDS19VVFNOQU1FCi0gICAgc3RydWN0 IHV0c25hbWUgbmFtZTsKLSNlbmRpZiAvKiBDS19VVFNOQU1FICovCi0KLSAgICBleHRlcm4gY2hh ciBzdGFydHVwZGlyW107Ci0vKgotICBCRUZPUkUgQU5ZVEhJTkcgRUxTRTogSW5pdGlhbGl6ZSB0 aGUgc2V0dWlkIHBhY2thZ2UuCi0gIENoYW5nZSB0byB0aGUgdXNlcidzIHJlYWwgdXNlciBhbmQg Z3JvdXAgSUQuCi0gIElmIHRoaXMgY2FuJ3QgYmUgZG9uZSwgZG9uJ3QgcnVuIGF0IGFsbC4KLSov Ci0gICAgeCA9IHByaXZfaW5pKCk7Ci0jaWZkZWYgU1VJRERFQlVHCi0gICAgZnByaW50ZihzdGRl cnIsIlBSSVZfSU5JPSVkXG4iLHgpOwotI2VuZGlmIC8qIFNVSURERUJVRyAqLwotICAgIGlmICh4 KSB7Ci0JaWYgKHggJiAxKSBmcHJpbnRmKHN0ZGVyciwiRmF0YWw6IHNldHVpZCBmYWlsdXJlLlxu Iik7Ci0JaWYgKHggJiAyKSBmcHJpbnRmKHN0ZGVyciwiRmF0YWw6IHNldGdpZCBmYWlsdXJlLlxu Iik7Ci0JaWYgKHggJiA0KSBmcHJpbnRmKHN0ZGVyciwiRmF0YWw6IEMtS2VybWl0IHNldHVpZCB0 byByb290IVxuIik7Ci0JZXhpdCgxKTsKLSAgICB9Ci0gICAgc2lnbmFsKFNJR0lOVCxTSUdfSUdO KTsJCS8qIElnbm9yZSBpbnRlcnJ1cHRzIGF0IGZpcnN0ICovCi0gICAgc2lnbmFsKFNJR0ZQRSxT SUdfSUdOKTsJCS8qIElnbm9yZSBmbG9hdGluZy1wb2ludCBleGNlcHRpb25zICovCi0gICAgc2ln bmFsKFNJR0hVUCxzaWdodXApOwkJLyogQ2F0Y2ggU0lHSFVQICovCi0jaWZuZGVmIE5PU0lHV0lO Q0gKLSNpZmRlZiBTSUdXSU5DSAotICAgIHNpZ25hbChTSUdXSU5DSCx3aW5jaGgpOwkJLyogQ2F0 Y2ggd2luZG93LXNpemUgY2hhbmdlICovCi0jZW5kaWYgLyogU0lHV0lOQ0ggKi8KLSNlbmRpZiAv KiBOT1NJR1dJTkNIICovCi0KLSNpZmRlZiBTSUdYRlNaCi0gICAgc2lnbmFsKFNJR1hGU1osU0lH X0lHTik7CQkvKiBJZ25vcmUgd3JpdGluZyBwYXN0IGZpbGUgbGltaXQgKi8gCi0jZW5kaWYJLyog U0lHWEZTWiAqLwotCi0jaWZuZGVmIE5PSkMKLS8qCi0gIEdldCB0aGUgaW5pdGlhbCBqb2IgY29u dHJvbCBzdGF0ZS4KLSAgSWYgaXQgaXMgU0lHX0lHTiwgdGhhdCBtZWFucyB0aGUgc2hlbGwgZG9l cyBub3Qgc3VwcG9ydCBqb2IgY29udHJvbCwKLSAgYW5kIHNvIHdlJ2QgYmV0dGVyIG5vdCBzdXNw ZW5kIG91cnNlbHZlcy4KLSovCi0jaWZkZWYgU0lHVFNUUAotICAgIGpjaGRsciA9IHNpZ25hbChT SUdUU1RQLFNJR19JR04pOwotICAgIGlmIChqY2hkbHIgPT0gU0lHX0lHTikgewotCWpjc2hlbGwg PSAwOwotCWRlYnVnKEYxMDAsInN5c2luaXQgamNoZGxyOiBTSUdfSUdOIiwiIiwwKTsKLSAgICB9 IGVsc2UgaWYgKGpjaGRsciA9PSBTSUdfREZMKSB7Ci0JZGVidWcoRjEwMCwic3lzaW5pdCBqY2hk bHI6IFNJR19ERkwiLCIiLDApOwotCWpjc2hlbGwgPSAxOwotICAgIH0gZWxzZSB7Ci0JZGVidWco RjEwMCwic3lzaW5pdCBqY2hkbHI6IG90aGVyIiwiIiwwKTsKLQlqY3NoZWxsID0gMzsKLSAgICB9 Ci0gICAgKFZPSUQpIHNpZ25hbChTSUdUU1RQLGpjaGRscik7CS8qIFB1dCBpdCBiYWNrLi4uICov Ci0jZW5kaWYgLyogU0lHVFNUUCAqLwotI2VuZGlmIC8qIE5PSkMgKi8KLQotICAgIGNvbmJndCgw KTsJCQkJLyogU2VlIGlmIHdlJ3JlIGluIHRoZSBiYWNrZ3JvdW5kICovCi0gICAgY29uZ20oKTsJ CQkJLyogR2V0IGNvbnNvbGUgbW9kZXMgKi8KLQotICAgIChWT0lEKSBzaWduYWwoU0lHQUxSTSxT SUdfSUdOKTsJLyogSWdub3JlIGFsYXJtcyAqLwotCi0gICAgaWdub3JzaWdzKCk7CQkJLyogSWdu b3JlIHNvbWUgb3RoZXIgc2lnbmFscyAqLwotCi0jaWZkZWYgRl9TRVRGTAotICAgIGluaWZsYWdz ID0gZmNudGwoMCxGX0dFVEZMLDApOwkvKiBHZXQgc3RkaW4gZmxhZ3MgKi8KLSNlbmRpZiAvKiBG X1NFVEZMICovCi0KLSNpZmRlZiB1bHRyaXgKLSAgICBndHR5KDAsJnZhbmlsbGEpOwkJCS8qIEdl dCBzZ3R0eSBpbmZvICovCi0jZWxzZQotI2lmZGVmIEFVWAotICAgIHNldDQyc2lnKCk7CQkJCS8q IERvbid0IGFzayEgKGhha2Fuc29uQGNzLm9yc3QuZWR1KSAqLwotI2VuZGlmIC8qIEFVWCAqLwot I2VuZGlmIC8qIHVsdHJpeCAqLwotLyoKLSAgV2FybmluZzogb24gc29tZSBVTklYIHN5c3RlbXMg KFNWUjQ/KSwgdHR5bmFtZSgpIHJlcG9ydGVkbHkgb3BlbnMgL2RldiBidXQKLSAgbmV2ZXIgY2xv c2VzIGl0LiAgSWYgaXQgaXMgY2FsbGVkIG9mdGVuIGVub3VnaCwgd2UgcnVuIG91dCBvZiBmaWxl Ci0gIGRlc2NyaXB0b3JzIGFuZCBzdWJzZXF1ZW50IG9wZW4oKSdzIG9mIG90aGVyIGRldmljZXMg b3IgZmlsZXMgY2FuIGZhaWwuCi0qLwotICAgIHMgPSBOVUxMOwotI2lmbmRlZiBNSU5JWAotICAg IGlmIChpc2F0dHkoMCkpCQkJLyogTmFtZSBvZiBjb250cm9sbGluZyB0ZXJtaW5hbCAqLwotICAg ICAgcyA9IHR0eW5hbWUoMCk7Ci0gICAgZWxzZSBpZiAoaXNhdHR5KDEpKQotICAgICAgcyA9IHR0 eW5hbWUoMSk7Ci0gICAgZWxzZSBpZiAoaXNhdHR5KDIpKQotICAgICAgcyA9IHR0eW5hbWUoMik7 Ci0gICAgZGVidWcoRjExMCwic3lzaW5pdCB0dHluYW1lKDApIixzLDApOwotI2VuZGlmIC8qIE1J TklYICovCi0KLSNpZmRlZiBCRU9TCi0gICAgaWYgKCFkZnR0eSkKLSAgICAgIG1ha2VzdHIoJmRm dHR5LHMpOwotI2VuZGlmIC8qIEJFT1MgKi8KLQotICAgIGlmIChzKQotICAgICAgY2tzdHJuY3B5 KChjaGFyICopY3R0bmFtLHMsREVWTkFNTEVOKzEpOwotI2lmZGVmIFNWT1JQT1NJWAotICAgIGlm ICghY3R0bmFtWzBdKQotICAgICAgY3Rlcm1pZChjdHRuYW0pOwotI2VuZGlmIC8qIFNWT1JQT1NJ WCAqLwotICAgIGlmICghY3R0bmFtWzBdKQotICAgICAgY2tzdHJuY3B5KChjaGFyICopY3R0bmFt LGRmdHR5LERFVk5BTUxFTisxKTsKLSAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IENUVE5BTSIsQ1RU TkFNLDApOwotICAgIGRlYnVnKEYxMTAsInN5c2luaXQgY3R0bmFtIixjdHRuYW0sMCk7Ci0KLSAg ICB0dGd3c2l6KCk7CQkJCS8qIEdldCB3aW5kb3cgKHNjcmVlbikgZGltZW5zaW9ucy4gKi8KLQot I2lmbmRlZiBOT1NZU0NPTkYKLSNpZmRlZiBfU0NfT1BFTl9NQVgKLSAgICBja21heGZpbGVzID0g c3lzY29uZihfU0NfT1BFTl9NQVgpOwotI2VuZGlmIC8qIF9TQ19PUEVOX01BWCAqLwotI2VuZGlm IC8qIE5PU1lTQ09ORiAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICBpZiAoIWJhY2tncmQpIHsKLSAg ICAJY29uc2N0bGZkID0gb3BlbigiL2Rldi9jb25zY3RsIiwgT19XUk9OTFkpOwotICAgIAkvKm5v aXNlZmQgPSBvcGVuKCIvZGV2L25vaXNlIiwgT19XUk9OTFkpKi8KLSAgICB9Ci0gICAgY2t4ZWNo ID0gMTsKLSNlbmRpZiAvKiBQbGFuOSAqLwotCi0jaWZkZWYgQ0tfVVRTTkFNRQotICAgIGlmICh1 bmFtZSgmbmFtZSkgPiAtMSkgewotCWNrc3RybmNweSh1bm1fbWNoLG5hbWUubWFjaGluZSxDS19T WVNOTUxOKTsKLQlja3N0cm5jcHkodW5tX25hbSxuYW1lLnN5c25hbWUsQ0tfU1lTTk1MTik7Ci0J Y2tzdHJuY3B5KHVubV9yZWwsbmFtZS5yZWxlYXNlLENLX1NZU05NTE4pOwotCWNrc3RybmNweSh1 bm1fdmVyLG5hbWUudmVyc2lvbixDS19TWVNOTUxOKTsKLSNpZmRlZiBERUJVRwotCWlmIChkZWJs b2cpIHsKLQkgICAgZGVidWcoRjExMCwic3lzaW5pdCB1bmFtZSBtYWNoaW5lIix1bm1fbWNoLDAp OwotCSAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHVuYW1lIHN5c25hbWUiLHVubV9uYW0sMCk7Ci0J ICAgIGRlYnVnKEYxMTAsInN5c2luaXQgdW5hbWUgcmVsZWFzZSIsdW5tX3JlbCwwKTsKLQkgICAg ZGVidWcoRjExMCwic3lzaW5pdCB1bmFtZSB2ZXJzaW9uIix1bm1fdmVyLDApOwotCX0KLSNlbmRp ZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgSFBVWDlQTFVTCi0JaWYgKG5hbWUubWFjaGluZVs1XSA9 PSAnOCcpCi0JICBocGlzODAwID0gMTsKLQllbHNlCi0JICBocGlzODAwID0gMDsKLQlkZWJ1ZyhG MTAxLCJzeXNpbml0IGhwaXM4MDAiLCIiLGhwaXM4MDApOwotI2VuZGlmIC8qIEhQVVg5UExVUyAq LwotI2lmZGVmIFRSVTY0Ci0gICAgICAgIGdldHN5c2luZm8oR1NJX1BMQVRGT1JNX05BTUUsIHVu bV9tb2QsIENLX1NZU05NTE4sIDAsIDApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IGdl dHN5c2luZm8gbW9kZWwiLHVubV9tb2QsMCk7Ci0jZW5kaWYgLyogVFJVNjQgKi8KLSNpZmRlZiBT T0xBUklTMjUKLSAgICAgICAgc3lzaW5mbyhTSV9QTEFURk9STSwgdW5tX21vZCwgQ0tfU1lTTk1M Tik7Ci0gICAgICAgIGRlYnVnKEYxMTAsInN5c2luaXQgc3lzaW5mbyBtb2RlbCIsdW5tX21vZCww KTsKLSNlbmRpZiAvKiBTT0xBUklTMjUgKi8KLSAgICB9Ci0jZW5kaWYgLyogQ0tfVVRTTkFNRSAq LwotCi0jaWZkZWYgQ0tfRU5WSVJPTk1FTlQKLSAgICB7Ci0jaWZkZWYgVE5DT0RFCi0JZXh0ZXJu IGNoYXIgdG5fZW52X2FjY3RbXSwgdG5fZW52X2Rpc3BbXSwgdG5fZW52X2pvYltdLAotCXRuX2Vu dl9wcm50W10sIHRuX2Vudl9zeXNbXTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQlleHRlcm4gY2hh ciB1aWRidWZbXTsKLSAgICAgICAgZXh0ZXJuIGNoYXIgKiB3aG9hbWkoKTsKLQljaGFyICpwOwot I2lmZGVmIENLU0VORFVJRAotICAgICAgICB1aWRidWZbMF0gPSAnXDAnOwotI2lmZGVmIElLU0QK LSAgICAgICAgaWYgKCFpbnNlcnZlcikgewotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgICAg IHAgPSBnZXRlbnYoIlVTRVIiKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInN5c2luaXQgdWlk YnVmIGZyb20gVVNFUiIsdWlkYnVmLDApOwotCSAgICBpZiAoIXApIHAgPSAiIjsKLSAgICAgICAg ICAgIGlmICghKnApIHsKLSAgICAgICAgICAgICAgICBwID0gZ2V0ZW52KCJMT0dOQU1FIik7Ci0g ICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3lzaW5pdCB1aWRidWYgZnJvbSBMT0dOQU1FIix1 aWRidWYsMCk7Ci0gICAgICAgICAgICB9Ci0JICAgIGlmICghcCkgcCA9ICIiOwotICAgICAgICAg ICAgaWYgKCEqcCkgewotICAgICAgICAgICAgICAgIHAgPSB3aG9hbWkoKTsKLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHVpZGJ1ZiBmcm9tIHdob2FtaSgpIix1aWRidWYsMCk7 Ci0gICAgICAgICAgICB9Ci0JICAgIGlmICghcCkgcCA9ICIiOwotCSAgICBja3N0cm5jcHkodWlk YnVmLCAqcCA/IHAgOiAiVU5LTk9XTiIsIFVJREJVRkxFTik7Ci0jaWZkZWYgSUtTRAotICAgICAg ICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCWRlYnVnKEYxMTAsInN5c2luaXQgZmluYWwgdWlkYnVm Iix1aWRidWYsMCk7Ci0jZW5kaWYgLyogQ0tTRU5EVUlEICovCi0KLSNpZmRlZiBUTkNPREUKLQlp ZiAoKHAgPSBnZXRlbnYoIkpPQiIpKSkgY2tzdHJuY3B5KHRuX2Vudl9qb2IscCw2Myk7Ci0JaWYg KChwID0gZ2V0ZW52KCJBQ0NUIikpKSBja3N0cm5jcHkodG5fZW52X2FjY3QscCw2Myk7Ci0JaWYg KChwID0gZ2V0ZW52KCJQUklOVEVSIikpKSBja3N0cm5jcHkodG5fZW52X3BybnQscCw2Myk7Ci0J aWYgKChwID0gZ2V0ZW52KCJESVNQTEFZIikpKSBja3N0cm5jcHkodG5fZW52X2Rpc3AscCw2Myk7 Ci0jaWZkZWYgYWVnaXMKLQlja3N0cm5jcHkodG5fZW52X3N5cywiQWVnaXMiLDY0KTsKLSNlbHNl Ci0jaWZkZWYgUGxhbjkKLQlja3N0cm5jcHkodG5fZW52X3N5cywiUGxhbjkiLDY0KTsKLSNlbHNl Ci0JY2tzdHJuY3B5KHRuX2Vudl9zeXMsIlVOSVgiLDY0KTsKLSNlbmRpZiAvKiBQbGFuOSAqLwot I2VuZGlmIC8qIGFlZ2lzICovCi0jZW5kaWYgLyogVE5DT0RFICovCi0gICAgfQotI2VuZGlmIC8q IENLX0VOVklST05NRU5UICovCi0jaWZkZWYgQ0tfU05ETE9DCi0gICAgewotCWV4dGVybiBjaGFy ICogdG5fbG9jOwotCWNoYXIgKnA7Ci0JaWYgKHAgPSBnZXRlbnYoIkxPQ0FUSU9OIikpCi0JICBp ZiAodG5fbG9jID0gKGNoYXIgKiltYWxsb2MoKGludClzdHJsZW4ocCkrMSkpCi0JICAgIHN0cmNw eSh0bl9sb2MscCk7CQkvKiBzYWZlICovCi0gICAgfQotI2VuZGlmIC8qIENLX1NORExPQyAqLwot Ci0gICAgY2tzdHJuY3B5KHN0YXJ0dXBkaXIsIHpndGRpcigpLCBDS01BWFBBVEgpOwotICAgIHN0 YXJ0dXBkaXJbQ0tNQVhQQVRIXSA9ICdcMCc7Ci0gICAgeCA9IHN0cmxlbihzdGFydHVwZGlyKTsK LSAgICBpZiAoeCA8PSAwKSB7Ci0Jc3RhcnR1cGRpclswXSA9ICcvJzsKLQlzdGFydHVwZGlyWzFd ID0gJ1wwJzsKLSAgICB9IGVsc2UgaWYgKHN0YXJ0dXBkaXJbeC0xXSAhPSAnLycpIHsKLQlzdGFy dHVwZGlyW3hdID0gJy8nOwotCXN0YXJ0dXBkaXJbeCsxXSA9ICdcMCc7Ci0gICAgfQotICAgIGRl YnVnKEYxMTAsInN5c2luaXQgc3RhcnR1cGRpciIsc3RhcnR1cGRpciwwKTsKLSNpZmRlZiBUVExF QlVGCi0gICAgbGVfaW5pdCgpOwotI2VuZGlmIC8qIFRUTEVCVUYgKi8KLSNpZmRlZiBCU0Q0NE9S UE9TSVgKLSAgICAvKiBUaGlzIHNob3VsZCBjYXRjaCB0aGUgbmN1cnNlcyBwbGF0Zm9ybXMgKi8K LSAgICAvKiBTb21lIHBsYXRmb3JtcyBkb24ndCBoYXZlIHB1dGVudigpLCBsaWtlIE5lWFRTVEVQ ICovCi0gICAgcHV0ZW52KCJOQ1VSU0VTX05PX1NFVEJVRj0xIik7Ci0jZW5kaWYgLyogQlNENDRP UlBPU0lYICovCi0gICAgcmV0dXJuKDApOwotfQotCi0vKiAgUyBZIFMgQyBMIEUgQSBOIFUgUCAg LS0gIFN5c3RlbS1kZXBlbmRlbnQgcHJvZ3JhbSBjbGVhbnVwLiAgKi8KLQotaW50Ci1zeXNjbGVh bnVwKCkgewotI2lmZGVmIEZfU0VURkwKLSAgICBpZiAoaW5pZmxhZ3MgPiAtMSkKLSAgICAgIGZj bnRsKDAsRl9TRVRGTCxpbmlmbGFncyk7CS8qIFJlc3RvcmUgc3RkaW4gZmxhZ3MgKi8KLSNlbmRp ZiAvKiBGX1NFVEZMICovCi0jaWZkZWYgdWx0cml4Ci0gICAgc3R0eSgwLCZ2YW5pbGxhKTsgICAg ICAgICAgICAgICAgICAgLyogR2V0IHNndHR5IGluZm8gKi8KLSNlbmRpZiAvKiB1bHRyaXggKi8K LSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaWQpIGtpbGwodHRwaWQsOSk7Ci0jZW5kaWYgLyog TkVUQ01EICovCi0gICAgcmV0dXJuKDApOwotfQotCi0vKiAgVCBUIE8gUCBFIE4gIC0tICBPcGVu IGEgdHR5IGZvciBleGNsdXNpdmUgYWNjZXNzLiAgKi8KLQotLyoKLSAgQ2FsbCB3aXRoOgotICAg IHR0bmFtZTogY2hhcmFjdGVyIHN0cmluZyAtIGRldmljZSBuYW1lIG9yIG5ldHdvcmsgaG9zdCBu YW1lLgotICAgIGxjbDoKLSAgSWYgY2FsbGVkIHdpdGggbGNsIDwgMCwgc2V0cyB2YWx1ZSBvZiBs Y2wgYXMgZm9sbG93czoKLSAgMDogdGhlIHRlcm1pbmFsIG5hbWVkIGJ5IHR0bmFtZSBpcyB0aGUg am9iJ3MgY29udHJvbGxpbmcgdGVybWluYWwuCi0gIDE6IHRoZSB0ZXJtaW5hbCBuYW1lZCBieSB0 dG5hbWUgaXMgbm90IHRoZSBqb2IncyBjb250cm9sbGluZyB0ZXJtaW5hbC4KLSAgQnV0IHdhdGNo IG91dDogaWYgYSBsaW5lIGlzIGFscmVhZHkgb3Blbiwgb3IgaWYgcmVxdWVzdGVkIGxpbmUgY2Fu J3QKLSAgYmUgb3BlbmVkLCB0aGVuIGxjbCByZW1haW5zIChhbmQgaXMgcmV0dXJuZWQgYXMpIC0x LgotICAgIG1vZGVtOgotICBMZXNzIHRoYW4gemVybzogdHRuYW1lIGlzIGEgbmV0d29yayBob3N0 IG5hbWUuCi0gIFplcm8gb3IgZ3JlYXRlcjogdHRuYW1lIGlzIGEgdGVybWluYWwgZGV2aWNlIG5h bWUuCi0gIFplcm8gbWVhbnMgYSBsb2NhbCBjb25uZWN0aW9uIChkb24ndCB1c2UgbW9kZW0gc2ln bmFscykuCi0gIFBvc2l0aXZlIG1lYW5zIHVzZSBtb2RlbSBzaWduYWxzLgotICAgdGltbzoKLSAg MCA9IG5vIHRpbWVyLgotICBub256ZXJvID0gbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBmb3Ig b3BlbigpIHRvIHJldHVybiBiZWZvcmUgdGltaW5nIG91dC4KLQotICBSZXR1cm5zOgotICAgIDAg b24gc3VjY2VzcwotICAgLTUgaWYgZGV2aWNlIGlzIGluIHVzZQotICAgLTQgaWYgYWNjZXNzIHRv IGRldmljZSBpcyBkZW5pZWQKLSAgIC0zIGlmIGFjY2VzcyB0byBsb2NrIGRpcmVjdG9yeSBkZW5p ZWQKLSAgIC0yIHVwb24gdGltZW91dCB3YWl0aW5nIGZvciBkZXZpY2UgdG8gb3BlbgotICAgLTEg b24gb3RoZXIgZXJyb3IKLSovCi1zdGF0aWMgaW50IHR0b3RtbyA9IDA7CQkJLyogVGltZW91dCBm bGFnICovCi0vKiBGbGFnIGtlcHQgaGVyZSB0byBhdm9pZCBiZWluZyBjbG9iYmVyZWQgYnkgbG9u Z2ptcC4gICovCi0KLWludAotdHRvcGVuKHR0bmFtZSxsY2wsbW9kZW0sdGltbykgY2hhciAqdHRu YW1lOyBpbnQgKmxjbCwgbW9kZW0sIHRpbW87IHsKLQotI2lmZGVmIEJTRDQ0Ci0jZGVmaW5lIGN0 ZXJtaWQoeCkgc3RyY3B5KHgsIiIpCi0jZWxzZQotI2lmZGVmIFNWT1JQT1NJWAotI2lmbmRlZiBD SUUKLSAgICBleHRlcm4gY2hhciAqY3Rlcm1pZCgpOwkJLyogV2lzaCB0aGV5IGFsbCBoYWQgdGhp cyEgKi8KLSNlbHNlCQkJCQkvKiBDSUUgUmVndWx1cyAqLwotI2RlZmluZSBjdGVybWlkKHgpIHN0 cmNweSh4LCIiKQotI2VuZGlmIC8qIENJRSAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2Vu ZGlmIC8qIEJTRDQ0ICovCi0KLSNpZmRlZiB1bHRyaXgKLSAgICBpbnQgdGVtcCA9IDA7Ci0jZW5k aWYgLyogdWx0cml4ICovCi0KLSNpZm5kZWYgT1BFTkZJUlNUCi0gICAgY2hhciBmdWxsbmFtZVtE RVZOQU1MRU4rMV07Ci0jZW5kaWYgLyogT1BFTkZJUlNUICovCi0KLSAgICBjaGFyICogZm5hbTsJ CQkvKiBGdWxsIG5hbWUgYWZ0ZXIgZXhwYW5zaW9uICovCi0KLSAgICBpbnQgeTsKLQotI2lmbmRl ZiBwZHAxMQotI2RlZmluZSBOQU1FRkQJIC8qIEZlYXR1cmUgdG8gYWxsb3cgbmFtZSB0byBiZSBh biBvcGVuIGZpbGUgZGVzY3JpcHRvciAqLwotI2VuZGlmIC8qIHBkcDExICovCi0KLSNpZmRlZiBO QU1FRkQKLSAgICBjaGFyICpwOwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0ZWxuZXRmZCIsIiIs dGVsbmV0ZmQpOwotI2VuZGlmIC8qIE5BTUVGRCAqLwotCi0gICAgZGVidWcoRjExMCwidHRvcGVu IHR0bmFtZSIsdHRuYW1lLDApOwotICAgIGRlYnVnKEYxMTAsInR0b3BlbiB0dG5tc3YiLHR0bm1z diwwKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gbW9kZW0iLCIiLG1vZGVtKTsKLSAgICBkZWJ1 ZyhGMTAxLCJ0dG9wZW4gbmV0Y29ubiIsIiIsbmV0Y29ubik7Ci0gICAgZGVidWcoRjEwMSwidHRv cGVuIHR0eWZkIiwiIix0dHlmZCk7Ci0gICAgZGVidWcoRjEwMSwidHRvcGVuICpsY2wiLCIiLCps Y2wpOwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0dG1kbSIsIiIsdHRtZG0pOwotICAgIGRlYnVn KEYxMDEsInR0b3BlbiB0dG5ldCIsIiIsdHRuZXQpOwotCi0gICAgdHRwbXNrID0gMHhmZjsKLSAg ICBsb2NrcGlkWzBdID0gJ1wwJzsKLQotICAgIGlmICh0dHlmZCA+IC0xKSB7CQkJLyogSWYgZGV2 aWNlIGFscmVhZHkgb3BlbmVkICovCi0gICAgICAgIGlmICghc3RybmNtcCh0dG5hbWUsdHRubXN2 LERFVk5BTUxFTikpIC8qIGFyZSBuZXcgJiBvbGQgbmFtZXMgZXF1YWw/ICovCi0JICByZXR1cm4o MCk7CQkJLyogWWVzLCBub3RoaW5nIHRvIGRvIC0ganVzdCByZXR1cm4gKi8KLQl0dG5tc3ZbMF0g PSAnXDAnOwkJLyogTm8sIGNsZWFyIG91dCBvbGQgbmFtZSAqLwotCXR0Y2xvcyh0dHlmZCk7CQkJ LyogY2xvc2Ugb2xkIGNvbm5lY3Rpb24uICAqLwotICAgIH0KLSAgICB3YXNjbG9zZWQgPSAwOwkJ CS8qIE5ldyBjb25uZWN0aW9uLCBub3QgY2xvc2VkIHlldC4gKi8KLSAgICB0dHBpcGUgPSAwOwkJ CQkvKiBBc3N1bWUgaXQncyBub3QgYSBwaXBlICovCi0gICAgdHRwdHkgPSAwOwkJCQkvKiBvciBh IHB0eS4uLiAqLwotCi0jaWZkZWYgTkVUQ09OTgotLyoKLSAgVGhpcyBpcyBhIGJpdCB0cmlja3ku Li4gIFN1cHBvc2UgdGhhdCBwcmV2aW91c2x5IEtlcm1pdCBoYWQgZGlhbGVkIGEgdGVsbmV0Ci0g IG1vZGVtIHNlcnZlciAoInNldCBob3N0IHh4eDoyMDAxLCBzZXQgbW9kZW0gdHlwZSB1c3IsIGRp YWwgLi4uIikuICBUaGVuIHRoZQotICBjb25uZWN0aW9uIHdhcyBjbG9zZWQgKHR0eWZkID0gLTEp LCBhbmQgdGhlbiBhIFJFRElBTCBjb21tYW5kIHdhcyBnaXZlbi4gIEF0Ci0gIHRoaXMgcG9pbnQg d2UndmUgb2JsaXRlcmF0ZWQgdGhlIG5lZ2F0aXZlIG1vZGVtIHR5cGUgaGFjaywgYW5kIHNvIHdv dWxkCi0gIHRyZWF0IHRoZSBJUCBob3N0bmFtZSBhcyBhIGRldmljZSBuYW1lLCBhbmQgd291bGQg dGhlbiBmYWlsIGJlY2F1c2Ugb2YgIk5vCi0gIHN1Y2ggZGV2aWNlIG9yIGRpcmVjdG9yeSIuICBC dXQgdGhlIHByZXZpb3VzIGNvbm5lY3Rpb24gaGFzIGxlZnQgYmVoaW5kIHNvbWUKLSAgY2x1ZXMs IHNvIGxldCdzIHVzZSB0aGVtLi4uCi0qLwotICAgIGlmICh0dHlmZCA8IDApIHsJCQkvKiBDb25u ZWN0aW9uIGlzIG5vdCBvcGVuICovCi0JaWYgKCFzdHJjbXAodHRuYW1lLHR0bm1zdikpIHsJLyog T2xkIGFuZCBuZXcgbmFtZXMgdGhlIHNhbWU/ICovCi0JICAgIGlmICgoKG5ldGNvbm4gPiAwKSAm JiAodHRtZG0gPCAwKSkgfHwKLQkJKCh0dG5ldCA+IDApICYmCi0JCSAoIWNrc3RyY2hyKHR0bmFt ZSwnLycpKSAmJiAoY2tzdHJjaHIodHRuYW1lLCc6JykpKQotCQkpIHsKLQkJaW50IHgsIHJjOwot CQl4ID0gKHR0bWRtIDwgMCkgPyAtdHRtZG0gOiB0dG5ldDsKLQkJcmMgPSBuZXRvcGVuKHR0bmFt ZSwgbGNsLCB4KTsKLQkJZGVidWcoRjExMSwidHRvcGVuIFJFT1BFTiBuZXRvcGVuIix0dG5hbWUs cmMpOwotCQlpZiAocmMgPiAtMSkgewotCQkgICAgbmV0Y29ubiA9IDE7Ci0JCSAgICB4bG9jYWwg PSAqbGNsID0gMTsKLQkJfSBlbHNlIHsKLQkJICAgIG5ldGNvbm4gPSAwOwotCQl9Ci0JCWdvdHNp Z3MgPSAwOwotCQlyZXR1cm4ocmMpOwotCSAgICB9Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBORVRD T05OICovCi0KLSNpZmRlZiBNQVhOQU1MRU4KLSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gTUFYTkFN TEVOIGRlZmluZWQiLCIiLDApOwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gTUFYTkFN TEVOICpOT1QqIGRlZmluZWQiLCIiLDApOwotI2VuZGlmCi0KLSNpZmRlZiBCU0Q0Ci0gICAgZGVi dWcoRjEwMCwidHRvcGVuIEJTRDQgZGVmaW5lZCIsIiIsMCk7Ci0jZWxzZQotICAgIGRlYnVnKEYx MDAsInR0b3BlbiBCU0Q0ICpOT1QqIGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8qIEJTRDQgKi8K LQotI2lmZGVmIEJTRDQyCi0gICAgZGVidWcoRjEwMCwidHRvcGVuIEJTRDQyIGRlZmluZWQiLCIi LDApOwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gQlNENDIgKk5PVCogZGVmaW5lZCIs IiIsMCk7Ci0jZW5kaWYgLyogQlNENDIgKi8KLQotI2lmZGVmIE1ZUkVBRAotICAgIGRlYnVnKEYx MDAsInR0b3BlbiBNWVJFQUQgZGVmaW5lZCIsIiIsMCk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAs InR0b3BlbiBNWVJFQUQgKk5PVCogZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYgLyogTVlSRUFEICov Ci0KLSNpZmRlZglORVRDT05OCi0gICAgaWYgKG1vZGVtIDwgMCkgewkJCS8qIG1vZGVtIDwgMCA9 IGNvZGUgZm9yIG5ldHdvcmsgKi8KLQlpbnQgeDsKLQl0dG1kbSA9IG1vZGVtOwotCW1vZGVtID0g LW1vZGVtOwkJCS8qIFBvc2l0aXZlIG5ldHdvcmsgdHlwZSBudW1iZXIgKi8KLQlmZGZsYWcgPSAw OwkJCS8qIFN0ZGlvIG5vdCByZWRpcmVjdGVkLiAqLwotCW5ldGNvbm4gPSAxOwkJCS8qIEFuZCBp dCdzIGEgbmV0d29yayBjb25uZWN0aW9uICovCi0JZGVidWcoRjExMSwidHRvcGVuIG5ldCIsdHRu YW1lLG1vZGVtKTsKLSNpZmRlZiBOQU1FRkQKLQlmb3IgKHAgPSB0dG5hbWU7IGlzZGlnaXQoKnAp OyBwKyspIDsgLyogQ2hlY2sgZm9yIGFsbCBkaWdpdHMgKi8KLSAJaWYgKCpwID09ICdcMCcgJiYg KHRlbG5ldGZkIHx8IHgyNWZkKSkgeyAvKiBBdm9pZCBYLjEyMSBhZGRyZXNzZXMgKi8KLQkgICAg dHR5ZmQgPSBhdG9pKHR0bmFtZSk7CS8qIElzIHRoZXJlIGEgd2F5IHRvIHRlc3QgaXQncyBvcGVu PyAqLwotCSAgICB0dGZkZmxnID0gMTsJCS8qIFdlIGdvdCBhbiBvcGVuIGZpbGUgZGVzY3JpcHRv ciAqLwotCSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gbmV0IHR0ZmRmbGciLHR0bmFtZSx0dGZkZmxn KTsKLQkgICAgZGVidWcoRjEwMSwidHRvcGVuIG5ldCB0dHlmZCIsIiIsdHR5ZmQpOwotCSAgICBj a3N0cm5jcHkodHRubXN2LHR0bmFtZSxERVZOQU1MRU4pOyAvKiBSZW1lbWJlciB0aGUgIm5hbWUi LiAqLwotCSAgICB4ID0gMTsJCQkvKiBSZXR1cm4gY29kZSBpcyAiZ29vZCIuICovCi0JICAgIGlm ICh0ZWxuZXRmZCkgewotCQl0dG5ldCA9IE5FVF9UQ1BCOwotCQlpZiAodHRucHJvdG8gIT0gTlBf VENQUkFXKQotCQkgIHR0bnByb3RvID0gTlBfVEVMTkVUOwotI2lmZGVmIFNVTlgyNQotCSAgICB9 IGVsc2UgaWYgKHgyNWZkKSB7Ci0JCXR0bmV0ID0gTkVUX1NYMjU7Ci0JCXR0bnByb3RvID0gTlBf Tk9ORTsKLSNlbmRpZiAvKiBTVU5YMjUgKi8KLQkgICAgfQotCX0gZWxzZSB7CQkJLyogSG9zdCBu YW1lIG9yIGFkZHJlc3MgZ2l2ZW4gKi8KLSNpZmRlZiBORVRQVFkKLQkgICAgaWYgKG1vZGVtID09 IE5FVF9QVFkpIHsKLQkJaW50IHg7Ci0JCWlmIChub3B1c2gpIHsKLQkJICAgIGRlYnVnKEYxMDAs InR0b3BlbiBQVFk6IG5vcHVzaCIsIiIsMCk7Ci0JCSAgICByZXR1cm4oLTEpOwotCQl9Ci0gICAg ICAgICAgICAgICAgdHRuZXQgPSBORVRfUFRZOwotCQl0dG5wcm90byA9IE5QX05PTkU7Ci0gICAg ICAgICAgICAgICAgbmV0Y29ubiA9IDE7ICAgICAgICAgICAgLyogYnV0IHdlIGRvbid0IHVzZSBu ZXR3b3JrIGkvbyAqLwotICAgICAgICAgICAgICAgIHR0cHR5ID0gMTsKLSAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gUFRZIix0dG5hbWUsMCk7Ci0JCXggPSBkb19wdHkoJnR0eWZk LHR0bmFtZSwwKTsKLQkJaWYgKHggPiAtMSkgewotCQkgICAgY2tzdHJuY3B5KHR0bm1zdix0dG5h bWUsREVWTkFNTEVOKTsKLQkJICAgIHhsb2NhbCA9ICpsY2wgPSAxOwkvKiBJdCdzIGxvY2FsICov Ci0JCX0gZWxzZSB7Ci0JCSAgICB0dHB0eSA9IDA7Ci0JCSAgICBuZXRjb25uID0gMDsKLQkJfQot CQlnb3RzaWdzID0gMDsKLQkJcmV0dXJuKHgpOwotCSAgICB9Ci0jZW5kaWYgLyogTkVUUFRZICov Ci0jaWZkZWYgTkVUQ01ECi0vKgotICBkdXAyKCkgaXMgbm90IGF2YWlsYWJsZSBvbiBvbGRlciBT eXN0ZW0gViBwbGF0Zm9ybXMgbGlrZSBBVCZUIDNCeC4gIEZvcgotICB0aG9zZSBzeXN0ZW1zIHdl IHB1bnQgYnkgbm90IGRlZmluaW5nIE5FVENNRCwgYnV0IHdlIG1pZ2h0IGJlIGFibGUgdG8gZG8K LSAgYmV0dGVyIC0tIHNlZSB3b3JrYXJvdW5kcyBmb3IgdGhpcyBwcm9ibGVtIGluIGNrdWZpby5j IChzZWFyY2ggZm9yIGR1cDIpLgotKi8KLQkgICAgaWYgKG1vZGVtID09IE5FVF9DTUQpIHsKLQkJ aWYgKG5vcHVzaCkgewotCQkgICAgZGVidWcoRjEwMCwidHRvcGVuIHBpcGU6IG5vcHVzaCIsIiIs MCk7Ci0JCSAgICByZXR1cm4oLTEpOwotCQl9Ci0JCWlmIChwaXBlKHBpcGUwKSB8fCBwaXBlKHBp cGUxKSkgewotCQkgICAgcGVycm9yKCJQaXBlIGVycm9yIik7Ci0JCSAgICByZXR1cm4oLTEpOwot CQl9Ci0JCXR0cGlkID0gZm9yaygpOwkJLyogTWFrZSBhIGZvcmsgKi8KLQotCQlzd2l0Y2ggKHR0 cGlkKSB7Ci0JCSAgY2FzZSAtMToJCS8qIEVycm9yIG1ha2luZyBmb3JrICovCi0JCSAgICBjbG9z ZShwaXBlMFswXSk7Ci0JCSAgICBjbG9zZShwaXBlMFsxXSk7Ci0JCSAgICBjbG9zZShwaXBlMVsw XSk7Ci0JCSAgICBjbG9zZShwaXBlMVsxXSk7Ci0JCSAgICBwZXJyb3IoIkZvcmsgZXJyb3IiKTsK LQkJICAgIHJldHVybigtMSk7Ci0JCSAgY2FzZSAwOgkJLyogQ2hpbGQuICovCi0JCSAgICBjbG9z ZShwaXBlMFswXSk7Ci0JCSAgICBjbG9zZShwaXBlMVsxXSk7Ci0JCSAgICBkdXAyKHBpcGUwWzFd LCAxKTsKLQkJICAgIGNsb3NlKHBpcGUwWzFdKTsKLQkJICAgIGR1cDIocGlwZTFbMF0sIDApOwot CQkgICAgY2xvc2UocGlwZTFbMF0pOwotCQkgICAgc3lzdGVtKHR0bmFtZSk7Ci0JCSAgICBfZXhp dCgwKTsKLQkJICBkZWZhdWx0OgkJLyogUGFyZW50ICovCi0JCSAgICBjbG9zZShwaXBlMFsxXSk7 Ci0JCSAgICBjbG9zZShwaXBlMVswXSk7Ci0JCSAgICBmZGluID0gcGlwZTBbMF07CS8qIFJlYWQg ZnJvbSBwaXBlICovCi0JCSAgICBmZG91dCA9IHBpcGUxWzFdOwkvKiBXcml0ZSB0byBwaXBlICov Ci0JCSAgICB0dG91dCA9IGZkb3BlbihmZG91dCwidyIpOyAvKiBHZXQgc3RyZWFtIHNvIHdlIGNh biAqLwotCQkgICAgaWYgKCF0dG91dCkgewkvKiBtYWtlIGl0IHVuYnVmZmVyZWQuICovCi0JCQlw ZXJyb3IoImZkb3BlbiBmYWlsdXJlIik7Ci0JCQlyZXR1cm4oLTEpOwotCQkgICAgfQotCQkgICAg c2V0YnVmKHR0b3V0LE5VTEwpOwotCQkgICAgY2tzdHJuY3B5KHR0bm1zdix0dG5hbWUsREVWTkFN TEVOKTsKLQkJICAgIHhsb2NhbCA9ICpsY2wgPSAxOwkvKiBJdCdzIGxvY2FsICovCi0JCSAgICBu ZXRjb25uID0gMTsJLyogQ2FsbCBpdCBhIG5ldHdvcmsgY29ubmVjdGlvbiAqLwotCQkgICAgdHRt ZG0gPSBtb2RlbTsJLyogUmVtZW1iZXIgbmV0d29yayB0eXBlICovCi0JCSAgICB0dHlmZCA9IGZk aW47Ci0JCSAgICB0dHBpcGUgPSAxOwotCQkgICAgZ290c2lncyA9IDA7Ci0JCSAgICByZXR1cm4o MCk7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIE5FVENNRCAqLwotI2VuZGlmIC8qIE5BTUVGRCAq LwotCSAgICB4ID0gbmV0b3Blbih0dG5hbWUsIGxjbCwgbW9kZW0pOyAvKiAoc2VlIGNrY25ldC5o KSAqLwotCSAgICBpZiAoeCA+IC0xKSB7Ci0JCWNrc3RybmNweSh0dG5tc3YsdHRuYW1lLERFVk5B TUxFTik7Ci0JICAgIH0gZWxzZSBuZXRjb25uID0gMDsKLSNpZmRlZiBOQU1FRkQKLQl9Ci0jZW5k aWYgLyogTkFNRUZEICovCi0KLSNpZmRlZiBzb255X25ld3MJCQkvKiBTb255IE5FV1MgKi8KLQlp ZiAoaW9jdGwodHR5ZmQsVElPQ0tHRVQsJmttX2V4dCkgPCAwKSB7IC8qIEdldCBLYW5qaSBtb2Rl ICovCi0JICAgIHBlcnJvcigidHRvcGVuIGVycm9yIGdldHRpbmcgS2FuamkgbW9kZSAobmV0d29y aykiKTsKLQkgICAgZGVidWcoRjExMSwidHRvcGVuIGVycm9yIGdldHRpbmcgS2FuamkgbW9kZSIs Im5ldHdvcmsiLDApOwotCSAgICBrbV9leHQgPSAtMTsJCS8qIE1ha2Ugc3VyZSB0aGlzIHN0YXlz IHVuZGVmaW5lZC4gKi8KLQl9Ci0jZW5kaWYgLyogc29ueV9uZXdzICovCi0KLQl4bG9jYWwgPSAq bGNsID0gMTsJCS8qIE5ldHdvcmsgY29ubmVjdGlvbnMgYXJlIGxvY2FsLiAqLwotCWRlYnVnKEYx MDEsInR0b3BlbiBuZXQgeCIsIiIseCk7Ci0jaWZkZWYgQ09NTUVOVAotLyogTGV0IG5ldG9wZW4o KSBkbyB0aGlzICovCi0JaWYgKHggPiAtMSAmJiAheDI1ZmQpCi0JICB4ID0gdG5faW5pKCk7CQkJ LyogSW5pdGlhbGl6ZSBURUxORVQgcHJvdG9jb2wgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0J Z290c2lncyA9IDA7Ci0JcmV0dXJuKHgpOwotICAgIH0gZWxzZSB7CQkJCS8qIFRlcm1pbmFsIGRl dmljZSAqLwotI2VuZGlmCS8qIE5FVENPTk4gKi8KLQotI2lmZGVmIE5BTUVGRAotLyoKLSAgVGhp cyBjb2RlIGxldHMgeW91IGdpdmUgS2VybWl0IGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGZvciBh IHNlcmlhbAotICBjb21tdW5pY2F0aW9uIGRldmljZSwgcmF0aGVyIHRoYW4gYSBkZXZpY2UgbmFt ZS4gIEtlcm1pdCBhc3N1bWVzIHRoYXQgdGhlCi0gIGxpbmUgaXMgYWxyZWFkeSBvcGVuLCBsb2Nr ZWQsIGNvbmRpdGlvbmVkIHdpdGggdGhlIHJpZ2h0IHBhcmFtZXRlcnMsIGV0Yy4KLSovCi0JZm9y IChwID0gdHRuYW1lOyBpc2RpZ2l0KCpwKTsgcCsrKSA7IC8qIENoZWNrIGZvciBhbGwtZGlnaXRz ICovCi0JaWYgKCpwID09ICdcMCcpIHsKLQkgICAgdHR5ZmQgPSBhdG9pKHR0bmFtZSk7CS8qIElz IHRoZXJlIGEgd2F5IHRvIHRlc3QgaXQncyBvcGVuPyAqLwotCSAgICBkZWJ1ZyhGMTExLCJ0dG9w ZW4gZ290IG9wZW4gZmQiLHR0bmFtZSx0dHlmZCk7Ci0JICAgIGNrc3RybmNweSh0dG5tc3YsdHRu YW1lLERFVk5BTUxFTik7IC8qIFJlbWVtYmVyIHRoZSAibmFtZSIuICovCi0JICAgIGlmICh0dHlm ZCA+PSAwICYmIHR0eWZkIDwgMykgLyogSWYgaXQncyBzdGRpby4uLiAqLwotCSAgICAgIHhsb2Nh bCA9ICpsY2wgPSAwOwkvKiB3ZSdyZSBpbiByZW1vdGUgbW9kZSAqLwotCSAgICBlbHNlCQkJLyog b3RoZXJ3aXNlICovCi0JICAgICAgeGxvY2FsID0gKmxjbCA9IDE7CS8qIGxvY2FsIG1vZGUuICov Ci0JICAgIG5ldGNvbm4gPSAwOwkJLyogQXNzdW1lIGl0J3Mgbm90IGEgbmV0d29yay4gKi8KLQkg ICAgdHZ0ZmxnID0gMDsJCQkvKiBNaWdodCBuZWVkIHRvIGluaXRpYWxpemUgbW9kZXMuICovCi0J ICAgIHR0bWRtID0gbW9kZW07CQkvKiBSZW1lbWJlciBtb2RlbSB0eXBlLiAqLwotCSAgICBmZGZs YWcgPSAwOwkJCS8qIFN0ZGlvIG5vdCByZWRpcmVjdGVkLiAqLwotCSAgICB0dGZkZmxnID0gMTsJ CS8qIEZsYWcgd2Ugd2VyZSBvcGVuZWQgdGhpcyB3YXkuICovCi0JICAgIGRlYnVnKEYxMTEsInR0 b3BlbiBub24tbmV0IHR0ZmRmbGciLHR0bmFtZSx0dGZkZmxnKTsKLQkgICAgZGVidWcoRjEwMSwi dHRvcGVuIG5vbi1uZXQgdHR5ZmQiLCIiLHR0eWZkKTsKLQotI2lmZGVmIHNvbnlfbmV3cwkJCS8q IFNvbnkgTkVXUyAqLwotCSAgICAvKiBHZXQgZGV2aWNlIEthbmppIG1vZGUgKi8KLQkgICAgaWYg KGlvY3RsKHR0eWZkLFRJT0NLR0VULCZrbV9leHQpIDwgMCkgewotCQlwZXJyb3IoInR0b3BlbiBl cnJvciBnZXR0aW5nIEthbmppIG1vZGUiKTsKLQkJZGVidWcoRjEwMSwidHRvcGVuIGVycm9yIGdl dHRpbmcgS2FuamkgbW9kZSIsIiIsMCk7Ci0JCWttX2V4dCA9IC0xOwkJLyogTWFrZSBzdXJlIHRo aXMgc3RheXMgdW5kZWZpbmVkLiAqLwotCSAgICB9Ci0jZW5kaWYgLyogc29ueV9uZXdzICovCi0J ICAgIGdvdHNpZ3MgPSAwOwotCSAgICByZXR1cm4oMCk7CQkJLyogUmV0dXJuIHN1Y2Nlc3MgKi8K LQl9Ci0jZW5kaWYgLyogTkFNRUZEICovCi0jaWZkZWYgTkVUQ09OTgotICAgIH0KLSNlbmRpZiAv KiBORVRDT05OICovCi0KLS8qIEhlcmUgd2UgaGF2ZSB0byBvcGVuIGEgc2VyaWFsIGRldmljZSBv ZiB0aGUgZ2l2ZW4gbmFtZS4gKi8KLQotICAgIG5ldGNvbm4gPSAwOwkJCS8qIFNvIGl0J3Mgbm90 IGEgbmV0d29yayBjb25uZWN0aW9uICovCi0gICAgb2NjdCA9IHNpZ25hbChTSUdJTlQsIGNjdHJh cCk7CS8qIFNldCBDb250cm9sLUMgdHJhcCwgc2F2ZSBvbGQgb25lICovCi0gICAgc2lnaW50X2ln biA9IDA7Ci0KLSAgICB0dnRmbGcgPSAwOwkJCS8qIEZsYWcgZm9yIHVzZSBieSB0dHZ0KCkuICov Ci0JCQkJLyogMCA9IHR0dnQgbm90IGNhbGxlZCB5ZXQgZm9yIHRoaXMgZGV2aWNlICovCi0KLSAg ICBmZGZsYWcgPSAoIWlzYXR0eSgwKSB8fCAhaXNhdHR5KDEpKTsgLyogRmxhZyBmb3Igc3RkaW8g cmVkaXJlY3RlZCAqLwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiBmZGZsYWciLCIiLGZkZmxhZyk7 Ci0KLSAgICB0dG1kbSA9IG1vZGVtOyAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHRoaXMg YXZhaWxhYmxlIHRvIG90aGVyIGZucyAqLwotICAgIHhsb2NhbCA9ICpsY2w7ICAgICAgICAgICAg ICAgICAgICAgIC8qIE1ha2UgdGhpcyBhdmFpbGFibGUgdG8gb3RoZXIgZm5zICovCi0KLS8qIENv ZGUgZm9yIGhhbmRsaW5nIGJpZGlyZWN0aW9uYWwgdHR5IGxpbmVzIGdvZXMgaGVyZS4gKi8KLS8q IFVzZSBzcGVjaWZpZWQgbWV0aG9kIGZvciB0dXJuaW5nIG9mZiBsb2dpbnMgYW5kIHN1cHByZXNz aW5nIGdldHR5LiAqLwotCi0jaWZkZWYgQUNVQ05UUkwKLSAgICAvKiBTaG91bGQgcHV0IGNhbGwg dG8gcHJpdl9vbigpIGhlcmUsIGJ1dCB0aGF0IHdvdWxkIGJlIHZlcnkgcmlza3khICovCi0gICAg YWN1Y250cmwoImRpc2FibGUiLHR0bmFtZSk7ICAgICAgICAgLyogYWN1Y250cmwoKSBwcm9ncmFt LiAqLwotICAgIC8qIGFuZCBwcml2X29mZigpIGhlcmUuLi4gKi8KLSNlbHNlCi0jaWZkZWYgQVRU NzMwMAotICAgIGlmICgoYXR0bW9kZW0gJiBET0dFVFkpID09IDApICAgICAgIC8qIG9mZmdldHR5 KCkgcHJvZ3JhbS4gKi8KLSAgICAgIGF0dG1vZGVtIHw9IG9mZmdldHR5KHR0bmFtZSk7CS8qIFJl bWVtYmVyIHJlc3BvbnNlLiAgKi8KLSNlbmRpZiAvKiBBVFQ3MzAwICovCi0jZW5kaWYgLyogQUNV Q05UUkwgKi8KLQotI2lmZGVmIE9QRU5GSVJTVAotLyoKLSAxOTg1LTIwMDE6IG9wZW5zIGRldmlj ZSBmaXJzdCB0aGVuIGdldHMgbG9jazsgcmVhc29uOgotIEtlcm1pdCB1c3VhbGx5IGhhcyB0byBy dW4gc2V0dWlkIG9yIHNldGdpZCBpbiBvcmRlciB0byBjcmVhdGUgYSBsb2NrZmlsZS4KLSBJZiB5 b3UgZ2l2ZSBhIFNFVCBMSU5FIGNvbW1hbmQgZm9yIGEgZGV2aWNlIHRoYXQgaGFwcGVucyB0byBi ZSB5b3VyIGpvYidzCi0gY29udHJvbGxpbmcgdGVybWluYWwsIEtlcm1pdCBkb2Vzbid0IGhhdmUg dG8gY3JlYXRlIGEgbG9ja2ZpbGUsIGFuZCBpbiBmYWN0Ci0gc2hvdWxkIG5vdCBjcmVhdGUgb25l LCBhbmQgd291bGQgZmFpbCBpZiBpdCB0cmllZCB0byBpZiBpdCBkaWQgbm90IGhhdmUgdGhlCi0g cmVxdWlyZWQgcHJpdmlsZWdlcy4gIEJ1dCB5b3UgY2FuJ3QgZmluZCBvdXQgaWYgdHdvIHR0eSBk ZXZpY2UgbmFtZXMgYXJlCi0gZXF1aXZhbGVudCB1bnRpbCB5b3UgaGF2ZSBhIGZpbGUgZGVzY3Jp cHRvciB0aGF0IHlvdSBjYW4gZ2l2ZSB0byB0dHluYW1lKCkuCi0gQnV0IHRoaXMgY2FuIGNhdXNl IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBLZXJtaXQgYW5kIFttXWdldHR5LiAgU28gc2VlCi0g dGhlIFsjXWVsc2UgcGFydC4uLgotKi8gCi0KLS8qCi0gSW4gdGhlIGZvbGxvd2luZyBzZWN0aW9u LCB3ZSBvcGVuIHRoZSB0dHkgZGV2aWNlIGZvciByZWFkL3dyaXRlLgotIElmIGEgbW9kZW0gaGFz IGJlZW4gc3BlY2lmaWVkIHZpYSAic2V0IG1vZGVtIiBwcmlvciB0byAic2V0IGxpbmUiCi0gdGhl biB0aGUgT19OREVMQVkgcGFyYW1ldGVyIGlzIHVzZWQgaW4gdGhlIG9wZW4sIHByb3ZpZGVkIHRo aXMgc3ltYm9sCi0gaXMgZGVmaW5lZCAoZS5nLiBpbiBmY250bC5oKSwgc28gdGhhdCB0aGUgcHJv Z3JhbSBkb2VzIG5vdCBoYW5nIHdhaXRpbmcKLSBmb3IgY2FycmllciAod2hpY2ggaW4gbW9zdCBj YXNlcyB3b24ndCBiZSBwcmVzZW50IGJlY2F1c2UgYSBjb25uZWN0aW9uCi0gaGFzIG5vdCBiZWVu IGRpYWxlZCB5ZXQpLiAgT19OREVMQVkgaXMgcmVtb3ZlZCBsYXRlciBvbiBpbiB0dG9wZW4oKS4g IEl0Ci0gd291bGQgbWFrZSBtb3JlIHNlbnNlIHRvIGZpcnN0IGRldGVybWluZSBpZiB0aGUgbGlu ZSBpcyBsb2NhbCBiZWZvcmUKLSBkb2luZyB0aGlzLCBidXQgYmVjYXVzZSB0dHluYW1lKCkgcmVx dWlyZXMgYSBmaWxlIGRlc2NyaXB0b3IsIHdlIGhhdmUKLSB0byBvcGVuIGl0IGZpcnN0LiAgU2Vl IGRvX29wZW4oKS4KLQotIE5vdyBvcGVuIHRoZSBkZXZpY2UgdXNpbmcgdGhlIGRlc2lyZWQgdHJl YXRtZW50IG9mIGNhcnJpZXIuCi0gSWYgY2FycmllciBpcyBSRVFVSVJFRCwgdGhlbiBvcGVuIGNv dWxkIGhhbmcgZm9yZXZlciwgc28gYW4gb3B0aW9uYWwKLSB0aW1lciBpcyBwcm92aWRlZC4gIElm IGNhcnJpZXIgaXMgbm90IHJlcXVpcmVkLCB0aGUgdGltZXIgc2hvdWxkIG5ldmVyCi0gZ28gb2Zm LCBhbmQgc2hvdWxkIGRvIG5vIGhhcm0uLi4KLSovCi0gICAgdHRvdG1vID0gMDsJCQkJLyogRmxh ZyBubyB0aW1lb3V0ICovCi0gICAgZGVidWcoRjEwMSwidHRvcGVuIHRpbW8iLCIiLHRpbW8pOwot ICAgIGRlYnVnKEYxMDEsInR0b3BlbiB4bG9jYWwiLCIiLHhsb2NhbCk7Ci0gICAgaWYgKHRpbW8g PiAwKSB7Ci0JaW50IHh4OwotCXNhdmFsID0gc2lnbmFsKFNJR0FMUk0sdGltZXJoKTsJLyogVGlt ZWQsIHNldCB1cCB0aW1lci4gKi8KLQl4eCA9IGFsYXJtKHRpbW8pOwkJLyogVGltZWQgb3Blbigp ICovCi0JZGVidWcoRjEwMSwidHRvcGVuIGFsYXJtIiwiIix4eCk7Ci0JaWYgKAotI2lmZGVmIENL X1BPU0lYX1NJRwotCSAgICBzaWdzZXRqbXAoc2pidWYsMSkKLSNlbHNlCi0JICAgIHNldGptcChz amJ1ZikKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLQkgICAgKSB7Ci0JICAgIHR0b3RtbyA9 IDE7CQkJLyogRmxhZyB0aW1lb3V0LiAqLwotCX0gZWxzZSB0dHlmZCA9IGRvX29wZW4odHRuYW1l KTsKLQl0dGltb2ZmKCk7Ci0JZGVidWcoRjExMSwidHRvcGVuIiwibW9kZW0iLG1vZGVtKTsKLQlk ZWJ1ZyhGMTAxLCJ0dG9wZW4gdHR5ZmQiLCIiLHR0eWZkKTsKLQlkZWJ1ZyhGMTAxLCJ0dG9wZW4g YWxhcm0gcmV0dXJuIiwiIix0dG90bW8pOwotICAgIH0gZWxzZSB7Ci0JZXJybm8gPSAwOwotCXR0 eWZkID0gZG9fb3Blbih0dG5hbWUpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gdHR5 ZmQiLHR0bmFtZSx0dHlmZCk7Ci0gICAgaWYgKHR0eWZkIDwgMCkgewkJCS8qIElmIGNvdWxkbid0 IG9wZW4sIGZhaWwuICovCi0JZGVidWcoRjEwMSwidHRvcGVuIGVycm5vIiwiIixlcnJubyk7Ci0J aWYgKGVycm5vID4gMCAmJiAhcXVpZXQpCi0JICBwZXJyb3IodHRuYW1lKTsJCS8qIFByaW50IG1l c3NhZ2UgKi8KLQotI2lmZGVmIEFUVDczMDAKLQlpZiAoYXR0bW9kZW0gJiBET0dFVFkpCQkvKiB3 YXMgZ2V0dHkoMW0pIHJ1bm5pbmcgYmVmb3JlIHVzPyAqLwotCSAgb25nZXR0eSh0dG5tc3YpOwkJ LyogeWVzLCByZXN0YXJ0IG9uIHR0eSBsaW5lICovCi0JYXR0bW9kZW0gJj0gfkRPR0VUWTsJCS8q IG5vIHBob25lIGluIHVzZSwgZ2V0dHkgcmVzdG9yZWQgKi8KLSNlbHNlCi0jaWZkZWYgQUNVQ05U UkwKLSAgICAgICAgLyogU2hvdWxkIHB1dCBjYWxsIHRvIHByaXZfb24oKSBoZXJlLCBidXQgdGhh dCB3b3VsZCBiZSByaXNreSEgKi8KLQlhY3VjbnRybCgiZW5hYmxlIix0dG5hbWUpOwkvKiBhY3Vj bnRybCgpIHByb2dyYW0uICovCi0JLyogYW5kIHByaXZfb2ZmKCkgaGVyZS4uLiAqLwotI2VuZGlm IC8qIEFDVU5UUkwgKi8KLSNlbmRpZiAvKiBBVFQ3MzAwICovCi0KLQlzaWduYWwoU0lHSU5ULG9j Y3QpOwkJLyogUHV0IG9sZCBDdHJsLUMgdHJhcCBiYWNrLiAqLwotCWlmIChlcnJubyA9PSBFQUND RVMpIHsJCS8qIERldmljZSBpcyBwcm90ZWN0ZWQgYWdhaW5zdCB1c2VyICovCi0JICAgIGRlYnVn KEYxMTAsInR0b3BlbiBFQUNDRVNTIix0dG5hbWUsMCk7IC8qIFJldHVybiAtNCAqLwotCSAgICBy ZXR1cm4oLTQpOwotCX0gZWxzZSByZXR1cm4odHRvdG1vID8gLTIgOiAtMSk7IC8qIE90aGVyd2lz ZSAtMiBpZiB0aW1lb3V0LCBvciAtMSAqLwotICAgIH0KLQotI2lmZGVmIFFOWAotICAgIHsKLQll eHRlcm4gaW50IHFueHBvcnRsb2NrOwotCXggPSBxbnhvcGVuY291bnQoKTsKLQlkZWJ1ZyhGMTAx LCJ0dG9wZW4gcW54b3BlbmNvdW50IiwiIix4KTsKLQlkZWJ1ZyhGMTAxLCJ0dG9wZW4gcW54cG9y dGxvY2siLCIiLHFueHBvcnRsb2NrKTsKLQlpZiAoeCA8IDAgJiYgcW54cG9ydGxvY2spIHsKLQkg ICAgdHRjbG9zKDApOwotCSAgICBwcmludGYoIj9DYW4ndCBnZXQgcG9ydCBvcGVuIGNvdW50XG4i KTsKLQkgICAgcHJpbnRmKCIoVHJ5IGFnYWluIHdpdGggU0VUIFFOWC1QT1JULUxPQ0sgT0ZGKVxu Iik7Ci0JICAgIHJldHVybigtMSk7CQkJLyogSW5kaWNhdGUgZGV2aWNlIGlzIGluIHVzZSAqLwot CX0KLQlpZiAoeCA+IDEpIHsJCQkvKiAxID09IG1lICovCi0JICAgIGlmIChxbnhwb3J0bG9jaykK LQkgICAgICB0dGNsb3MoMCk7Ci0JICAgICAgcmV0dXJuKC0yKTsJCS8qIEluZGljYXRlIGRldmlj ZSBpcyBpbiB1c2UgKi8KLQkgICAgZWxzZSBpZiAoIXF1aWV0KQotCSAgICAgIHByaW50ZigiV0FS TklORzogXCIlc1wiIGxvb2tzIGJ1c3kuLi5cbiIsdHRkZXYpOwotCX0KLSAgICB9Ci0jZW5kaWYg LyogUU5YICovCi0KLSNpZmRlZiBQbGFuOQotICAgIC8qIHRha2UgdGhpcyBvcHBvcnR1bml0eSB0 byBvcGVuIHRoZSBjb250cm9sIGNoYW5uZWwgKi8KLSAgICBpZiAocDlvcGVudHR5Y3RsKHR0bmFt ZSkgPCAwKQotI2Vsc2UKLSAgICAvKiBNYWtlIHN1cmUgaXQncyBhIHJlYWwgdHR5LiAqLwotICAg IGlmICghdHRmZGZsZyAmJiAhaXNhdHR5KHR0eWZkKSAmJiBzdHJjbXAodHRuYW1lLCIvZGV2L251 bGwiKSkKLSNlbmRpZiAvKiBQbGFuOSAqLwotICAgICAgewotCWZwcmludGYoc3RkZXJyLCIlcyBp cyBub3QgYSB0ZXJtaW5hbCBkZXZpY2VcbiIsdHRuYW1lKTsKLQlkZWJ1ZyhGMTExLCJ0dG9wZW4g bm90IGEgdHR5Iix0dG5hbWUsZXJybm8pOwotCWNsb3NlKHR0eWZkKTsKLQl0dHlmZCA9IC0xOwot CXdhc2Nsb3NlZCA9IDE7Ci0Jc2lnbmFsKFNJR0lOVCxvY2N0KTsKLQlyZXR1cm4oLTEpOwotICAg IH0KLQotI2lmZGVmIGFlZ2lzCi0JLyogQXBvbGxvIEMgcnVudGltZSBjbGFpbXMgdGhhdCBjb25z b2xlIHBhZHMgYXJlIHR0eSBkZXZpY2VzLCB3aGljaAotCSAqIGlzIHJlYXNvbmFibGUsIGJ1dCB0 aGV5IGFyZW4ndCBhbnkgZ29vZCBmb3IgcGFja2V0IHRyYW5zZmVyLiAqLwotCWlvc18kaW5xX3R5 cGVfdWlkKChzaG9ydCl0dHlmZCwgdHR5dWlkLCBzdCk7Ci0JaWYgKHN0LmFsbCAhPSBzdGF0dXNf JG9rKSB7Ci0JICAgIGZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBnZXR0aW5nIHR0eSBvYmplY3Qg dHlwZTogIik7Ci0JICAgIGVycm9yXyRwcmludChzdCk7Ci0JfSBlbHNlIGlmICh0dHl1aWQgIT0g c2lvXyR1aWQpIHsgLyogcmVqZWN0IG5vbi1TSU8gbGluZXMgKi8KLQkgICAgY2xvc2UodHR5ZmQp OyB0dHlmZCA9IC0xOwotCSAgICB3YXNjbG9zZWQgPSAxOwotCSAgICBlcnJubyA9IEVOT1RUWTsg cGVycm9yKHR0bmFtZSk7Ci0JICAgIHNpZ25hbChTSUdJTlQsb2NjdCk7Ci0JICAgIHJldHVybigt MSk7Ci0JfQotI2VuZGlmIC8qIGFlZ2lzICovCi0KLSAgICBzaWdpbnRfaWduID0gKG9jY3QgPT0g U0lHX0lHTikgPyAxIDogMDsKLQotICAgIGNrc3RybmNweSh0dG5tc3YsdHRuYW1lLERFVk5BTUxF Tik7CS8qIEtlZXAgY29weSBvZiBuYW1lIGxvY2FsbHkuICovCi0KLS8qIENhbGxlciB3YW50cyB1 cyB0byBmaWd1cmUgb3V0IGlmIGxpbmUgaXMgY29udHJvbGxpbmcgdHR5ICovCi0KLSAgICBpZiAo KmxjbCA8IDApIHsKLSAgICAgICAgaWYgKHN0cmNtcCh0dG5hbWUsQ1RUTkFNKSA9PSAwKSB7IC8q ICIvZGV2L3R0eSIgYWx3YXlzIHJlbW90ZSAqLwotICAgICAgICAgICAgeGxvY2FsID0gMDsKLQkg ICAgZGVidWcoRjExMSwidHRvcGVuIHR0bmFtZT1DVFROQU0iLHR0bmFtZSx4bG9jYWwpOwotICAg ICAgICB9IGVsc2UgaWYgKHN0cmNtcCh0dG5hbWUsY3R0bmFtKSA9PSAwKSB7Ci0gICAgICAgICAg ICB4bG9jYWwgPSAwOwotCSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gdHRuYW1lPWN0dG5hbSIsdHRu YW1lLHhsb2NhbCk7Ci0JfSBlbHNlIGlmIChjdHRuYW1bMF0pIHsKLSNpZmRlZiBCRUJPWF9EUjcK LSAgICAgICAgICAgIHggPSB0dG5tc3Y7CQkJLyogdHR5bmFtZSgpIGlzIGJyb2tlbiAqLwotI2Vs c2UKLSAgICAgICAgICAgIHggPSB0dHluYW1lKHR0eWZkKTsgICAgICAgICAvKiBHZXQgcmVhbCBu YW1lIG9mIHR0bmFtZS4gKi8KLSNlbmRpZiAvKiBCRUJPWF9EUjcgKi8KLQkgICAgaWYgKCF4KSB4 ID0gIiI7Ci0JICAgIGlmICgqeCkKLQkgICAgICB4bG9jYWwgPSAoKHN0cm5jbXAoeCxjdHRuYW0s REVWTkFNTEVOKSA9PSAwKSA/IDAgOiAxKTsKLQkgICAgZWxzZQotCSAgICAgIHhsb2NhbCA9IDE7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gdHR5bmFtZSh0dHlmZCkgeGxvY2FsIix4 LHhsb2NhbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZm5kZWYgTk9GRFpFUk8KLS8qIE5vdGUs IHRoZSBmb2xsb3dpbmcgY29kZSB3YXMgYWRkZWQgc28gdGhhdCBVbml4ICJpZGxlLWxpbmUiIHNu b29wZXJzICovCi0vKiB3b3VsZCBub3QgdGhpbmsgS2VybWl0IHdhcyBpZGxlIHdoZW4gaXQgd2Fz IHRyYW5zZmVycmluZyBmaWxlcywgYW5kICovCi0vKiBtYXliZSBsb2cgcGVvcGxlIG91dC4gKi8K LSAgICBpZiAoeGxvY2FsID09IDApIHsJCQkvKiBSZW1vdGUgbW9kZSAqLwotCWlmIChmZGZsYWcg PT0gMCkgewkJLyogU3RhbmRhcmQgaS9vIGlzIG5vdCByZWRpcmVjdGVkICovCi0JICAgIGRlYnVn KEYxMDAsInR0b3BlbiBzZXR0aW5nIHR0eWZkID0gMCIsIiIsMCk7Ci0jaWZkZWYgTFlOWE9TCi0J ICAgIC8qIE9uIEx5bnggT1MsIGZkIDAgaXMgb3BlbiBmb3IgcmVhZCBvbmx5LiAqLwotCSAgICBk dXAyKHR0eWZkLDApOwotI2VuZGlmIC8qIExZTlhPUyAqLwotCSAgICBjbG9zZSh0dHlmZCk7CQkv KiBVc2UgZmlsZSBkZXNjcmlwdG9yIDAgKi8KLQkgICAgdHR5ZmQgPSAwOwotCX0gZWxzZSB7CQkJ LyogU3RhbmRhcmQgaS9vIGlzIHJlZGlyZWN0ZWQgKi8KLQkgICAgZGVidWcoRjEwMSwidHRvcGVu IHN0ZGlvIHJlZGlyZWN0ZWQiLCIiLHR0eWZkKTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIE5PRkRa RVJPICovCi0KLS8qIE5vdyBjaGVjayBpZiBsaW5lIGlzIGxvY2tlZCAtLSBpZiBzbyBmYWlsLCBl bHNlIGxvY2sgZm9yIG91cnNlbHZlcyAqLwotLyogTm90ZTogQWZ0ZXIgaGF2aW5nIGRvbmUgdGhp cywgZG9uJ3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGUgbG9jayBpZiB5b3UgKi8KLS8qIGxlYXZlIHR0 b3BlbigpIHdpdGggYW4gZXJyb3IgY29uZGl0aW9uLiAqLwotCi0gICAgbGtmID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgbG9jayAqLwotICAgIGlmICh4bG9jYWwgPiAw KSB7Ci0JaW50IHh4OyBpbnQgeHBpZDsKLSAgICAgICAgaWYgKCh4eCA9IHR0bG9jayh0dG5hbWUp KSA8IDApIHsgLyogQ2FuJ3QgbG9jayBpdC4gKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInR0 b3BlbiB0dGxvY2sgZmFpbHMiLHR0bmFtZSx4eCk7Ci0JICAgIC8qIFdBUk5JTkcgLSBUaGlzIGNs b3NlKCkgY2FuIGhhbmcgaWYgdHR5IGlzIGFuIGVtcHR5IHNvY2tldC4uLiAqLwotICAgICAgICAg ICAgY2xvc2UodHR5ZmQpOwkJLyogQ2xvc2UgdGhlIGRldmljZS4gKi8KLQkgICAgdHR5ZmQgPSAt MTsJCQkvKiBFcmFzZSBpdHMgZmlsZSBkZXNjcmlwdG9yLiAqLwotCSAgICB3YXNjbG9zZWQgPSAx OwotCSAgICBzaWduYWwoU0lHSU5ULG9jY3QpOwkvKiBQdXQgb2xkIFNJR0lOVCBiYWNrLiAqLwot CSAgICBzaWdpbnRfaWduID0gKG9jY3QgPT0gU0lHX0lHTikgPyAxIDogMDsKLQkgICAgaWYgKHh4 ID09IC0yKSB7CQkvKiBJZiBsb2NrZmlsZSBzYXlzIGRldmljZSBpbiB1c2UsICovCi0jaWZuZGVm IE5PVVVDUAotCQlkZWJ1ZyhGMTExLCJ0dG9wZW4gcmVhZGluZyBsb2NrZmlsZSBwaWQiLGZsZm5h bSx4eCk7Ci0JCXhwaWQgPSB0dHJwaWQoZmxmbmFtKTsJLyogVHJ5IHRvIHJlYWQgcGlkIGZyb20g bG9ja2ZpbGUgKi8KLQkJaWYgKHhwaWQgPiAtMSkgewkvKiBJZiB3ZSBnb3QgYSBwaWQgKi8KLSAg ICAgICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKLQkJICAgICAgcHJpbnRmKCJMb2NrZWQgYnkg cHJvY2VzcyAlZFxuIix4cGlkKTsgLyogdGVsbCB0aGVtLiAqLwotCQkgICAgc3ByaW50Zihsb2Nr cGlkLCIlZCIseHBpZCk7CS8qIFJlY29yZCBpdCB0b28gKi8KLQkJICAgIGRlYnVnKEYxMTAsInR0 b3BlbiBsb2NrcGlkIixsb2NrcGlkLDApOwotCQl9IGVsc2UgaWYgKCpmbGZuYW0pIHsKLQkJICAg IGV4dGVybiBjaGFyICpESVJDTUQ7Ci0JCSAgICBjaGFyICpwID0gTlVMTDsKLQkJICAgIGludCB4 OwotCQkgICAgeCA9IChpbnQpc3RybGVuKGZsZm5hbSkgKyAoaW50KXN0cmxlbihESVJDTUQpICsg MjsKLQkJICAgIHAgPSBtYWxsb2MoeCk7CS8qIFByaW50IGEgZGlyZWN0b3J5IGxpc3RpbmcuICov Ci0vKgotICBOb3RlOiBwcml2X29uKCkgd29uJ3QgaGVscCBoZXJlLCBiZWNhdXNlIHdlIGRvIG5v dCBwYXNzIHByaXZzIGFsb25nIHRvCi0gIHRvIGluZmVyaW9yIHByb2Nlc3NlcywgaW4gdGhpcyBj YXNlIGxzLiAgU28gaWYgdGhlIHJlYWwgdXNlciBkb2VzIG5vdCBoYXZlCi0gIGRpcmVjdG9yeS1s aXN0aW5nIGFjY2VzcyB0byB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5LCB0aGlzIHdpbGwgcmVzdWx0 IGluCi0gIHNvbWV0aGluZyBsaWtlICJub3QgZm91bmQiLiAgVGhhdCdzIHdoeSB3ZSB0cnkgdGhp cyBvbmx5IGFzIGEgbGFzdCByZXNvcnQuCi0qLwotCQkgICAgaWYgKHApIHsJCS8qIElmIHdlIGdv dCB0aGUgc3BhY2UuLi4gKi8KLQkJCWNrbWFrbXNnKHAseCxESVJDTUQsIiAiLGZsZm5hbSxOVUxM KTsKLQkJCXpzeXNjbWQocCk7CS8qIEdldCBsaXN0aW5nLiAqLwotCQkJaWYgKHApIHsJLyogZnJl ZSB0aGUgc3BhY2UgKi8KLQkJCSAgICBmcmVlKHApOwotCQkJICAgIHAgPSBOVUxMOwotCQkJfQot CQkgICAgfQotCQl9Ci0jZW5kaWYgLyogTk9VVUNQICovCi0JCXJldHVybigtNSk7CQkvKiBDb2Rl IGZvciBkZXZpY2UgaW4gdXNlICovCi0JICAgIH0gZWxzZSByZXR1cm4oLTMpOwkJLyogQWNjZXNz IGRlbmllZCAqLwotICAgICAgICB9IGVsc2UgbGtmID0gMTsKLSAgICB9Ci0jZWxzZSAgLyogT1BF TkZJUlNUICovCi0KLS8qCi0gIDI3IE9jdCAyMDAxOiBOZXcgc2ltcGxlciBjb2RlIHRoYXQgZ2V0 cyB0aGUgbG9jayBmaXJzdCBhbmQgdGhlbiBvcGVucyB0aGUKLSAgZGV2aWNlLCB3aGljaCBlbGlt aW5hdGVzIHRoZSByYWNlIGNvbmRpdGlvbi4gIFRoZSBkb3duc2lkZSBpcyB5b3UgY2FuIG5vCi0g IGxvbmdlciBzYXkgInNldCBsaW5lIC9kZXYvdHR5cDAiIG9yIHdoYXRldmVyLCB3aGVyZSAvZGV2 L3R0eXAwIGlzIHlvdXIgbG9naW4KLSAgdGVybWluYWwsIHdpdGhvdXQgdHJ5aW5nIHRvIGNyZWF0 ZSBhIGxvY2tmaWxlLCB3aGljaCBmYWlscyBpZiBDLUtlcm1pdCBsYWNrcwotICBwcml2cywgYW5k IGlmIGl0IHN1Y2NlZWRzLCBpdCBoYXMgY3JlYXRlZCBhIGxvY2tmaWxlIHdoZXJlIGl0IGRpZG4n dCBjcmVhdGUKLSAgb25lIGJlZm9yZS4KLSovCi0gICAgeGxvY2FsID0gKmxjbDsJCQkvKiBJcyB0 aGUgZGV2aWNlIG15IGxvZ2luIHRlcm1pbmFsPyAqLwotICAgIGRlYnVnKEYxMTEsInR0b3BlbiB4 bG9jYWwiLCJBIix4bG9jYWwpOwotICAgIGZuYW0gPSB0dG5hbWU7Ci0gICAgaWYgKHN0cmNtcCh0 dG5hbWUsQ1RUTkFNKSAmJiBuZXRjb25uID09IDApIHsKLQlpZiAoemZucWZwKHR0bmFtZSxERVZO QU1MRU4rMSxmdWxsbmFtZSkpIHsKLQkgICAgaWYgKChpbnQpc3RybGVuKGZ1bGxuYW1lKSA+IDAp Ci0JICAgICAgZm5hbSA9IGZ1bGxuYW1lOwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjExMCwidHRv cGVuIGZuYW0iLGZuYW0sMCk7Ci0gICAgaWYgKHhsb2NhbCA8IDApIHsKLQl4bG9jYWwgPSAoc3Ry Y21wKGZuYW0sQ1RUTkFNKSAhPSAwKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwidHRvcGVuIHhs b2NhbCIsIkIiLHhsb2NhbCk7Ci0KLSAgICBsa2YgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBObyBsb2NrIHlldCAqLwotICAgIGlmICh4bG9jYWwgPiAwKSB7CQkJLyogSWYgbm90 Li4uICovCi0JaW50IHh4OyBpbnQgeHBpZDsKLQl4eCA9IHR0bG9jayhmbmFtKTsJCS8qIFRyeSB0 byBsb2NrIGl0LiAqLwotCWRlYnVnKEYxMDEsInR0b3BlbiB0dGxvY2siLCIiLHh4KTsKLSAgICAg ICAgaWYgKHh4IDwgMCkgewkJCS8qIENhbid0IGxvY2sgaXQuICovCi0gICAgICAgICAgICBkZWJ1 ZyhGMTExLCJ0dG9wZW4gdHRsb2NrIGZhaWxzIixmbmFtLHh4KTsKLQkgICAgaWYgKHh4ID09IC0y KSB7CQkvKiBJZiBsb2NrZmlsZSBzYXlzIGRldmljZSBpbiB1c2UsICovCi0jaWZuZGVmIE5PVVVD UAotCQlkZWJ1ZyhGMTExLCJ0dG9wZW4gcmVhZGluZyBsb2NrZmlsZSBwaWQiLGZsZm5hbSx4eCk7 Ci0JCXhwaWQgPSB0dHJwaWQoZmxmbmFtKTsJLyogVHJ5IHRvIHJlYWQgcGlkIGZyb20gbG9ja2Zp bGUgKi8KLQkJaWYgKHhwaWQgPiAtMSkgewkvKiBJZiB3ZSBnb3QgYSBwaWQgKi8KLSAgICAgICAg ICAgICAgICAgICAgaWYgKCFxdWlldCkKLQkJICAgICAgcHJpbnRmKCJMb2NrZWQgYnkgcHJvY2Vz cyAlZFxuIix4cGlkKTsgLyogdGVsbCB0aGVtLiAqLwotCQkgICAgY2tzdHJuY3B5KGxvY2twaWQs Y2tpdG9hKHhwaWQpLDE2KTsKLQkJICAgIGRlYnVnKEYxMTAsInR0b3BlbiBsb2NrcGlkIixsb2Nr cGlkLDApOwotI2lmbmRlZiBOT1BVU0gKLQkJfSBlbHNlIGlmIChmbGZuYW1bMF0gJiYgIW5vcHVz aCkgewotCQkgICAgZXh0ZXJuIGNoYXIgKkRJUkNNRDsKLQkJICAgIGNoYXIgKnAgPSBOVUxMOwot CQkgICAgaW50IHg7Ci0JCSAgICB4ID0gKGludClzdHJsZW4oZmxmbmFtKSArIChpbnQpc3RybGVu KERJUkNNRCkgKyAyOwotCQkgICAgcCA9IG1hbGxvYyh4KTsJLyogUHJpbnQgYSBkaXJlY3Rvcnkg bGlzdGluZy4gKi8KLS8qCi0gIE5vdGU6IHByaXZfb24oKSB3b24ndCBoZWxwIGhlcmUsIGJlY2F1 c2Ugd2UgZG8gbm90IHBhc3MgcHJpdnMgYWxvbmcgdG8KLSAgdG8gaW5mZXJpb3IgcHJvY2Vzc2Vz LCBpbiB0aGlzIGNhc2UgbHMuICBTbyBpZiB0aGUgcmVhbCB1c2VyIGRvZXMgbm90IGhhdmUKLSAg ZGlyZWN0b3J5LWxpc3RpbmcgYWNjZXNzIHRvIHRoZSBsb2NrZmlsZSBkaXJlY3RvcnksIHRoaXMg d2lsbCByZXN1bHQgaW4KLSAgc29tZXRoaW5nIGxpa2UgIm5vdCBmb3VuZCIuICBUaGF0J3Mgd2h5 IHdlIHRyeSB0aGlzIG9ubHkgYXMgYSBsYXN0IHJlc29ydC4KLSovCi0JCSAgICBpZiAocCkgewkJ LyogSWYgd2UgZ290IHRoZSBzcGFjZS4uLiAqLwotCQkJY2ttYWttc2cocCx4LERJUkNNRCwiICIs ZmxmbmFtLE5VTEwpOwotCQkJenN5c2NtZChwKTsJLyogR2V0IGxpc3RpbmcuICovCi0JCQlpZiAo cCkgewkvKiBmcmVlIHRoZSBzcGFjZSAqLwotCQkJICAgIGZyZWUocCk7Ci0JCQkgICAgcCA9IE5V TEw7Ci0JCQl9Ci0JCSAgICB9Ci0jZW5kaWYgLyogTk9QVVNIICovCi0JCX0KLSNlbmRpZiAvKiBO T1VVQ1AgKi8KLQkJcmV0dXJuKC01KTsJCS8qIENvZGUgZm9yIGRldmljZSBpbiB1c2UgKi8KLQkg ICAgfSBlbHNlIHJldHVybigtMyk7CQkvKiBBY2Nlc3MgZGVuaWVkICovCi0gICAgICAgIH0gZWxz ZSBsa2YgPSAxOwotICAgIH0KLSAgICAvKiBIYXZlIGxvY2sgLS0gbm93IGl0J3Mgc2FmZSB0byBv cGVuIHRoZSBkZXZpY2UgKi8KLQotICAgIGRlYnVnKEYxMDEsInR0b3BlbiBsa2YiLCIiLGxrZik7 Ci0gICAgZGVidWcoRjEwMSwidHRvcGVuIHRpbW8iLCIiLHRpbW8pOwotCi0gICAgdHRvdG1vID0g MDsJCQkJLyogRmxhZyBubyB0aW1lb3V0ICovCi0gICAgaWYgKHRpbW8gPiAwKSB7Ci0JaW50IHh4 OwotCXNhdmFsID0gc2lnbmFsKFNJR0FMUk0sdGltZXJoKTsJLyogVGltZWQsIHNldCB1cCB0aW1l ci4gKi8KLQl4eCA9IGFsYXJtKHRpbW8pOwkJLyogVGltZWQgb3BlbigpICovCi0JZGVidWcoRjEw MSwidHRvcGVuIGFsYXJtIiwiIix4eCk7Ci0JaWYgKAotI2lmZGVmIENLX1BPU0lYX1NJRwotCSAg ICBzaWdzZXRqbXAoc2pidWYsMSkKLSNlbHNlCi0JICAgIHNldGptcChzamJ1ZikKLSNlbmRpZiAv KiBDS19QT1NJWF9TSUcgKi8KLQkgICAgKSB7Ci0JICAgIHR0b3RtbyA9IDE7CQkJLyogRmxhZyB0 aW1lb3V0LiAqLwotCX0gZWxzZSB7Ci0JICAgIHR0eWZkID0gZG9fb3BlbihmbmFtKTsKLQl9Ci0J dHRpbW9mZigpOwotCWRlYnVnKEYxMTEsInR0b3BlbiB0aW1lZCB0dHlmZCIsZm5hbSx0dHlmZCk7 Ci0gICAgfSBlbHNlIHsKLQllcnJubyA9IDA7Ci0JdHR5ZmQgPSBkb19vcGVuKGZuYW0pOwotCWRl YnVnKEYxMTEsInR0b3BlbiB1bnRpbWVkIHR0eWZkIixmbmFtLHR0eWZkKTsKLSAgICB9Ci0gICAg aWYgKHR0eWZkIDwgMCkgewkJCS8qIElmIGNvdWxkbid0IG9wZW4sIGZhaWwuICovCi0JZGVidWco RjExMSwidHRvcGVuIGVycm5vIixmbmFtLGVycm5vKTsKLQlkZWJ1ZyhGMTExLCJ0dG9wZW4geGxv Y2FsIiwiQyIseGxvY2FsKTsKLQlpZiAoeGxvY2FsID09IDApIHsKLQkgICAgZGVidWcoRjEwMCwi dHRvcGVuIHN1YnN0aXR1dGluZyAwIiwiIiwwKTsKLQkgICAgdHR5ZmQgPSAwOwotCX0gZWxzZSB7 Ci0JICAgIGlmIChlcnJubyA+IDAgJiYgIXF1aWV0KSB7Ci0JICAgICAgICBkZWJ1ZyhGMTExLCJ0 dG9wZW4gcGVycm9yIixmbmFtLGVycm5vKTsKLQkJcGVycm9yKGZuYW0pOwkJLyogUHJpbnQgbWVz c2FnZSAqLwotCSAgICB9Ci0JICAgIGlmICh0dHVubGNrKCkpICAgICAgICAgICAgICAgICAgLyog UmVsZWFzZSB0aGUgbG9jayBmaWxlICovCi0JICAgICAgZnByaW50ZihzdGRlcnIsIldhcm5pbmcs IHByb2JsZW0gcmVsZWFzaW5nIGxvY2tcclxuIik7Ci0JfQotICAgIH0KLQotICAgIGlmICh0dHlm ZCA8IDApIHsJCQkvKiB0dHlmZCBpcyBzdGlsbCA8IDA/ICovCi0jaWZkZWYgQVRUNzMwMAotCWlm IChhdHRtb2RlbSAmIERPR0VUWSkJCS8qIHdhcyBnZXR0eSgxbSkgcnVubmluZyBiZWZvcmUgdXM/ ICovCi0JICBvbmdldHR5KHR0bm1zdik7CQkvKiB5ZXMsIHJlc3RhcnQgb24gdHR5IGxpbmUgKi8K LQlhdHRtb2RlbSAmPSB+RE9HRVRZOwkJLyogbm8gcGhvbmUgaW4gdXNlLCBnZXR0eSByZXN0b3Jl ZCAqLwotI2Vsc2UKLSNpZmRlZiBBQ1VDTlRSTAotICAgICAgICAvKiBTaG91bGQgcHV0IGNhbGwg dG8gcHJpdl9vbigpIGhlcmUsIGJ1dCB0aGF0IHdvdWxkIGJlIHJpc2t5ISAqLwotCWFjdWNudHJs KCJlbmFibGUiLGZuYW0pOwkvKiBhY3VjbnRybCgpIHByb2dyYW0uICovCi0JLyogYW5kIHByaXZf b2ZmKCkgaGVyZS4uLiAqLwotI2VuZGlmIC8qIEFDVU5UUkwgKi8KLSNlbmRpZiAvKiBBVFQ3MzAw ICovCi0KLQlzaWduYWwoU0lHSU5ULG9jY3QpOwkJLyogUHV0IG9sZCBDdHJsLUMgdHJhcCBiYWNr LiAqLwotCWlmIChlcnJubyA9PSBFQUNDRVMpIHsJCS8qIERldmljZSBpcyBwcm90ZWN0ZWQgYWdh aW5zdCB1c2VyICovCi0JICAgIGRlYnVnKEYxMTAsInR0b3BlbiBFQUNDRVNTIixmbmFtLDApOyAv KiBSZXR1cm4gLTQgKi8KLQkgICAgcmV0dXJuKC00KTsKLQl9IGVsc2UgcmV0dXJuKHR0b3RtbyA/ IC0yIDogLTEpOyAvKiBPdGhlcndpc2UgLTIgaWYgdGltZW91dCwgb3IgLTEgKi8KLSAgICB9Ci0K LS8qIE1ha2Ugc3VyZSBpdCdzIGEgcmVhbCB0dHkuICovCi0KLSNpZmRlZiBQbGFuOQotICAgIC8q IHRha2UgdGhpcyBvcHBvcnR1bml0eSB0byBvcGVuIHRoZSBjb250cm9sIGNoYW5uZWwgKi8KLSAg ICBpZiAocDlvcGVudHR5Y3RsKGZuYW0pIDwgMCkgICAgICAgCi0jZWxzZQotICAgICAgaWYgKCF0 dGZkZmxnICYmICFpc2F0dHkodHR5ZmQpICYmIHN0cmNtcChmbmFtLCIvZGV2L251bGwiKSkKLSNl bmRpZiAvKiBQbGFuOSAqLwotCXsKLQkgICAgZnByaW50ZihzdGRlcnIsIiVzIGlzIG5vdCBhIHRl cm1pbmFsIGRldmljZVxuIixmbmFtKTsKLQkgICAgZGVidWcoRjExMSwidHRvcGVuIG5vdCBhIHR0 eSIsZm5hbSxlcnJubyk7Ci0JICAgIGlmICh0dHVubGNrKCkpCQkvKiBSZWxlYXNlIHRoZSBsb2Nr IGZpbGUgKi8KLQkgICAgICBmcHJpbnRmKHN0ZGVyciwiV2FybmluZywgcHJvYmxlbSByZWxlYXNp bmcgbG9ja1xyXG4iKTsKLQkgICAgY2xvc2UodHR5ZmQpOwotCSAgICB0dHlmZCA9IC0xOwotCSAg ICB3YXNjbG9zZWQgPSAxOwotCSAgICBzaWduYWwoU0lHSU5ULG9jY3QpOwotCSAgICByZXR1cm4o LTEpOwotCX0KLQotI2lmZGVmIGFlZ2lzCi0gICAgLyoKLSAgICAgIEFwb2xsbyBDIHJ1bnRpbWUg Y2xhaW1zIHRoYXQgY29uc29sZSBwYWRzIGFyZSB0dHkgZGV2aWNlcywgd2hpY2gKLSAgICAgIGlz IHJlYXNvbmFibGUsIGJ1dCB0aGV5IGFyZW4ndCBhbnkgZ29vZCBmb3IgcGFja2V0IHRyYW5zZmVy LgotICAgICovCi0gICAgaW9zXyRpbnFfdHlwZV91aWQoKHNob3J0KXR0eWZkLCB0dHl1aWQsIHN0 KTsKLSAgICBpZiAoc3QuYWxsICE9IHN0YXR1c18kb2spIHsKLQlmcHJpbnRmKHN0ZGVyciwgInBy b2JsZW0gZ2V0dGluZyB0dHkgb2JqZWN0IHR5cGU6ICIpOwotCWVycm9yXyRwcmludChzdCk7Ci0g ICAgfSBlbHNlIGlmICh0dHl1aWQgIT0gc2lvXyR1aWQpIHsJLyogUmVqZWN0IG5vbi1TSU8gbGlu ZXMgKi8KLQljbG9zZSh0dHlmZCk7IHR0eWZkID0gLTE7Ci0Jd2FzY2xvc2VkID0gMTsKLQllcnJu byA9IEVOT1RUWTsgcGVycm9yKGZuYW0pOwotCXNpZ25hbChTSUdJTlQsb2NjdCk7Ci0JcmV0dXJu KC0xKTsKLSAgICB9Ci0jZW5kaWYgLyogYWVnaXMgKi8KLQotICAgIHNpZ2ludF9pZ24gPSAob2Nj dCA9PSBTSUdfSUdOKSA/IDEgOiAwOwotCi0gICAgY2tzdHJuY3B5KHR0bm1zdix0dG5hbWUsREVW TkFNTEVOKTsJLyogS2VlcCBjb3B5IG9mIG5hbWUgbG9jYWxseS4gKi8KLQotLyogQ2FsbGVyIHdh bnRzIHVzIHRvIGZpZ3VyZSBvdXQgaWYgbGluZSBpcyBjb250cm9sbGluZyB0dHkgKi8KLQotICAg IGlmICgqbGNsIDwgMCkgewotCWNoYXIgKiBzOwotICAgICAgICBpZiAoc3RyY21wKGZuYW0sQ1RU TkFNKSA9PSAwKSB7IC8qICIvZGV2L3R0eSIgYWx3YXlzIHJlbW90ZSAqLwotICAgICAgICAgICAg eGxvY2FsID0gMDsKLQkgICAgZGVidWcoRjExMSwidHRvcGVuIGZuYW09Q1RUTkFNIixmbmFtLHhs b2NhbCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGZuYW0sY3R0bmFtKSA9PSAwKSB7Ci0g ICAgICAgICAgICB4bG9jYWwgPSAwOwotCSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gZm5hbT1jdHRu YW0iLGZuYW0seGxvY2FsKTsKLQl9IGVsc2UgaWYgKGN0dG5hbVswXSkgewotI2lmZGVmIEJFQk9Y X0RSNwotICAgICAgICAgICAgcyA9IHR0bm1zdjsJCQkvKiB0dHluYW1lKCkgaXMgYnJva2VuICov Ci0jZWxzZQotICAgICAgICAgICAgcyA9IHR0eW5hbWUodHR5ZmQpOyAgICAgICAgIC8qIEdldCBy ZWFsIG5hbWUgb2YgdHRuYW1lLiAqLwotI2VuZGlmIC8qIEJFQk9YX0RSNyAqLwotCSAgICBpZiAo IXMpIHMgPSAiIjsKLQkgICAgaWYgKCpzKQotCSAgICAgIHhsb2NhbCA9ICgoc3RybmNtcChzLGN0 dG5hbSxERVZOQU1MRU4pID09IDApID8gMCA6IDEpOwotCSAgICBlbHNlCi0JICAgICAgeGxvY2Fs ID0gMTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInR0b3BlbiB0dHluYW1lKHR0eWZkKSB4bG9j YWwiLHMseGxvY2FsKTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmbmRlZiBOT0ZEWkVSTwotLyog Tm90ZSwgdGhlIGZvbGxvd2luZyBjb2RlIHdhcyBhZGRlZCBzbyB0aGF0IFVuaXggImlkbGUtbGlu ZSIgc25vb3BlcnMgKi8KLS8qIHdvdWxkIG5vdCB0aGluayBLZXJtaXQgd2FzIGlkbGUgd2hlbiBp dCB3YXMgdHJhbnNmZXJyaW5nIGZpbGVzLCBhbmQgKi8KLS8qIG1heWJlIGxvZyBwZW9wbGUgb3V0 LiAqLwotICAgIGlmICh4bG9jYWwgPT0gMCkgewkJCS8qIFJlbW90ZSBtb2RlICovCi0JaWYgKGZk ZmxhZyA9PSAwKSB7CQkvKiBTdGFuZGFyZCBpL28gaXMgbm90IHJlZGlyZWN0ZWQgKi8KLQkgICAg ZGVidWcoRjEwMCwidHRvcGVuIHNldHRpbmcgdHR5ZmQgPSAwIiwiIiwwKTsKLSNpZmRlZiBMWU5Y T1MKLQkgICAgLyogT24gTHlueCBPUywgZmQgMCBpcyBvcGVuIGZvciByZWFkIG9ubHkuICovCi0J ICAgIGR1cDIodHR5ZmQsMCk7Ci0jZW5kaWYgLyogTFlOWE9TICovCi0JICAgIGNsb3NlKHR0eWZk KTsJCS8qIFVzZSBmaWxlIGRlc2NyaXB0b3IgMCAqLwotCSAgICB0dHlmZCA9IDA7Ci0JfSBlbHNl IHsJCQkvKiBTdGFuZGFyZCBpL28gaXMgcmVkaXJlY3RlZCAqLwotCSAgICBkZWJ1ZyhGMTAxLCJ0 dG9wZW4gc3RkaW8gcmVkaXJlY3RlZCIsIiIsdHR5ZmQpOwotCX0KLSAgICB9Ci0jZW5kaWYgLyog Tk9GRFpFUk8gKi8KLSNlbmRpZiAvKiBPUEVORklSU1QgKi8KLQotLyogR290IHRoZSBsaW5lLCBu b3cgc2V0IHRoZSBkZXNpcmVkIHZhbHVlIGZvciBsb2NhbC4gKi8KLQotICAgIGlmICgqbGNsICE9 IDApICpsY2wgPSB4bG9jYWw7Ci0KLS8qIFNvbWUgc3BlY2lhbCBzdHVmZiBmb3IgdjcuLi4gKi8K LQotI2lmZGVmICBWNwotI2lmbmRlZiBNSU5JWAotICAgIGlmIChrbWVtW1RUWV0gPCAwKSB7CQkv KiAgSWYgb3BlbiwgdGhlbiBza2lwIHRoaXMuICAqLwotCXFhZGRyW1RUWV0gPSBpbml0cmF3cSh0 dHlmZCk7ICAgLyogSW5pdCB0aGUgcXVldWUuICovCi0JaWYgKChrbWVtW1RUWV0gPSBvcGVuKCIv ZGV2L2ttZW0iLCAwKSkgPCAwKSB7Ci0JICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgcmVhZCAv ZGV2L2ttZW0gaW4gdHRvcGVuLlxuIik7Ci0JICAgIHBlcnJvcigiL2Rldi9rbWVtIik7Ci0JICAg IGV4aXQoMSk7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiAhTUlOSVggKi8KLSNlbmRpZiAvKiBWNyAq LwotCi0vKiBObyBmYWlsdXJlIHJldHVybnMgYWZ0ZXIgdGhpcyBwb2ludCAqLwotCi0jaWZkZWYg dWx0cml4Ci0gICAgaW9jdGwodHR5ZmQsIFRJT0NNT0RFTSwgJnRlbXApOwotI2lmZGVmIFRJT0NT SU5VU0UKLSAgICBpZiAoeGxvY2FsICYmIGlvY3RsKHR0eWZkLCBUSU9DU0lOVVNFLCBOVUxMKSA8 IDApIHsKLQlpZiAoIXF1aWV0KQotCSAgcGVycm9yKGZuYW0pOwotICAgIH0KLSNlbmRpZiAvKiBU SU9DU0lOVVNFICovCi0jZW5kaWYgLyogdWx0cml4ICovCi0KLS8qIEdldCB0dHkgZGV2aWNlIHNl dHRpbmdzICAqLwotCi0jaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogUE9TSVggKi8KLSAgICB0Y2dl dGF0dHIodHR5ZmQsJnR0b2xkKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdGNnZXRhdHRyIHR0 b2xkLmNfbGZsYWciLCIiLHR0b2xkLmNfbGZsYWcpOwotICAgIHRjZ2V0YXR0cih0dHlmZCwmdHRy YXcpOwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0Y2dldGF0dHIgdHRyYXcuY19sZmxhZyIsIiIs dHRyYXcuY19sZmxhZyk7Ci0gICAgdGNnZXRhdHRyKHR0eWZkLCZ0dHR2dCk7Ci0gICAgZGVidWco RjEwMSwidHRvcGVuIHRjZ2V0YXR0ciB0dHR2dC5jX2xmbGFnIiwiIix0dHR2dC5jX2xmbGFnKTsK LSNlbHNlCQkJCQkvKiBCU0QsIFY3LCBhbmQgYWxsIG90aGVycyAqLwotI2lmZGVmIEFUVFNWCQkJ CS8qIEFUJlQgVU5JWCAqLwotICAgIGlvY3RsKHR0eWZkLFRDR0VUQSwmdHRvbGQpOwotICAgIGRl YnVnKEYxMDEsInR0b3BlbiBpb2N0bCBUQ0dFVEEgdHRvbGQuY19sZmxhZyIsIiIsdHRvbGQuY19s ZmxhZyk7Ci0gICAgaW9jdGwodHR5ZmQsVENHRVRBLCZ0dHJhdyk7Ci0gICAgaW9jdGwodHR5ZmQs VENHRVRBLCZ0dHR2dCk7Ci0jZWxzZQotI2lmZGVmIEJFTExWMTAKLSAgICBpb2N0bCh0dHlmZCxU SU9DR0VUUCwmdHRvbGQpOwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiBCRUxMVjEwIHR0b2xkLnNn X2ZsYWdzIiwiIix0dG9sZC5zZ19mbGFncyk7Ci0gICAgaW9jdGwodHR5ZmQsVElPQ0dERVYsJnRk b2xkKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gQkVMTFYxMCB0ZG9sZC5mbGFncyIsIiIsdGRv bGQuZmxhZ3MpOwotI2Vsc2UKLSAgICBndHR5KHR0eWZkLCZ0dG9sZCk7Ci0gICAgZGVidWcoRjEw MSwidHRvcGVuIGd0dHkgdHRvbGQuc2dfZmxhZ3MiLCIiLHR0b2xkLnNnX2ZsYWdzKTsKLSNlbmRp ZiAvKiBCRUxMVjEwICovCi0KLSNpZmRlZiBzb255X25ld3MJCQkvKiBTb255IE5FV1MgKi8KLSAg ICBpZiAoaW9jdGwodHR5ZmQsVElPQ0tHRVQsJmttX2V4dCkgPCAwKSB7IC8qIEdldCBjb25zb2xl IEthbmppIG1vZGUgKi8KLQlwZXJyb3IoInR0b3BlbiBlcnJvciBnZXR0aW5nIEthbmppIG1vZGUi KTsKLQlkZWJ1ZyhGMTAxLCJ0dG9wZW4gZXJyb3IgZ2V0dGluZyBLYW5qaSBtb2RlIiwiIiwwKTsK LQlrbV9leHQgPSAtMTsJCQkvKiBNYWtlIHN1cmUgdGhpcyBzdGF5cyB1bmRlZmluZWQuICovCi0g ICAgfQotI2VuZGlmIC8qIHNvbnlfbmV3cyAqLwotCi0jaWZkZWYgVElPQ0dFVEMKLSAgICBkZWJ1 ZyhGMTAwLCJ0dG9wZW4gVElPQ0dFVEMiLCIiLDApOwotICAgIHRjaGFyZiA9IDA7CQkJCS8qIElu IHJlbW90ZSBtb2RlLCBhbHNvIGdldCAqLwotICAgIGlmICh4bG9jYWwgPT0gMCkgewkJCS8qIHNw ZWNpYWwgY2hhcmFjdGVycyAqLwotCWlmIChpb2N0bCh0dHlmZCxUSU9DR0VUQywmdGNob2xkKSA8 IDApIHsKLQkgICAgZGVidWcoRjEwMCwidHRvcGVuIFRJT0NHRVRDIGZhaWxlZCIsIiIsMCk7Ci0J fSBlbHNlIHsKLQkgICAgdGNoYXJmID0gMTsJCQkvKiBJdCB3b3JrZWQuICovCi0JICAgIGlvY3Rs KHR0eWZkLFRJT0NHRVRDLCZ0Y2hub2kpOyAvKiBHZXQgYW5vdGhlciBjb3B5ICovCi0JICAgIGRl YnVnKEYxMDAsInR0b3BlbiBUSU9DR0VUQyBvayIsIiIsMCk7Ci0JfQotICAgIH0KLSNlbHNlCi0g ICAgZGVidWcoRjEwMCwidHRvcGVuIFRJT0NHRVRDIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRp ZiAvKiBUSU9DR0VUQyAqLwotCi0jaWZkZWYgVElPQ0dMVEMKLSAgICBkZWJ1ZyhGMTAwLCJ0dG9w ZW4gVElPQ0dMVEMiLCIiLDApOwotICAgIGx0Y2hhcmYgPSAwOwkJCS8qIEluIHJlbW90ZSBtb2Rl LCBhbHNvIGdldCAqLwotICAgIGlmICh4bG9jYWwgPT0gMCkgewkJCS8qIGxvY2FsIHNwZWNpYWwg Y2hhcmFjdGVycyAqLwotCWlmIChpb2N0bCh0dHlmZCxUSU9DR0xUQywmbHRjaG9sZCkgPCAwKSB7 Ci0JICAgIGRlYnVnKEYxMDAsInR0b3BlbiBUSU9DR0xUQyBmYWlsZWQiLCIiLDApOwotCX0gZWxz ZSB7Ci0JICAgIGx0Y2hhcmYgPSAxOwkJLyogSXQgd29ya2VkLiAqLwotCSAgICBpb2N0bCh0dHlm ZCxUSU9DR0xUQywmbHRjaG5vaSk7IC8qIEdldCBhbm90aGVyIGNvcHkgKi8KLQkgICAgZGVidWco RjEwMCwidHRvcGVuIFRJT0NHTFRDIG9rIiwiIiwwKTsKLQl9Ci0gICAgfQotI2Vsc2UKLSAgICBk ZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0dMVEMgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8q IFRJT0NHTFRDICovCi0KLSNpZmRlZiBUSU9DTEdFVAotICAgIGRlYnVnKEYxMDAsInR0b3BlbiBU SU9DTEdFVCIsIiIsMCk7Ci0gICAgbG1vZGVmID0gMDsKLSAgICBpZiAoaW9jdGwodHR5ZmQsVElP Q0xHRVQsJmxtb2RlKSA8IDApIHsKLQlkZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0xHRVQgZmFpbGVk IiwiIiwwKTsKLSAgICB9IGVsc2UgewotCWxtb2RlZiA9IDE7Ci0JZGVidWcoRjEwMCwidHRvcGVu IFRJT0NMR0VUIG9rIiwiIiwwKTsKLSAgICB9Ci0jZW5kaWYgLyogVElPQ0xHRVQgKi8KLQotI2lm ZGVmIEJFTExWMTAKLSAgICBpb2N0bCh0dHlmZCxUSU9DR0VUUCwmdHRyYXcpOwotICAgIGlvY3Rs KHR0eWZkLFRJT0NHRVRQLCZ0dHR2dCk7Ci0jZWxzZQotICAgIGd0dHkodHR5ZmQsJnR0cmF3KTsg ICAgICAgICAgICAgICAgIC8qIEFuZCBhIGNvcHkgb2YgaXQgZm9yIHBhY2tldHMqLwotICAgIGd0 dHkodHR5ZmQsJnR0dHZ0KTsgICAgICAgICAgICAgICAgIC8qIEFuZCBvbmUgZm9yIHZpcnR1YWwg dHR5IHNlcnZpY2UgKi8KLSNlbmRpZiAvKiBCRUxMVjEwICovCi0KLSNlbmRpZiAvKiBBVFRTViAq LwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotCi0vKiBTZWN0aW9uIGZvciBjaGFuZ2luZyBs aW5lIGRpc2NpcGxpbmUuICBJdCdzIHJlc3RvcmVkIGluIHR0cmVzKCkuICovCi0KLSNpZmRlZiBB SVhSUwotI2lmbmRlZiBBSVg0MQotICAgIHsgdW5pb24gdHhuYW1lIGxkX25hbWU7IGludCBsZF9p ZHggPSAwOwotICAgICAgdHRsZCA9IDA7Ci0gICAgICAgIGRvIHsKLSAgCSAgbGRfbmFtZS50eF93 aGljaCA9IGxkX2lkeCsrOwotICAJICBpb2N0bCh0dHlmZCwgVFhHRVRDRCwgJmxkX25hbWUpOwot CSAgaWYgKCFzdHJuY21wKGxkX25hbWUudHhfbmFtZSwgInJ0cyIsIDMpKQotICAJICAgIHR0bGQg fD0gMTsKLSAgICAgICAgfSB3aGlsZSAoKmxkX25hbWUudHhfbmFtZSk7Ci0gICAgICAgIGRlYnVn KEYxMDEsIkFJWCBsaW5lIGRpc2NpcGxpbmUiLCIiLHR0bGQpOwotICAgICAgfQotI2VuZGlmIC8q IEFJWDQxICovCi0jZW5kaWYgLyogQUlYUlMgKi8KLQotI2lmZGVmIEJTRDQxCi0vKiBGb3IgNC4x QlNEIG9ubHksIGZvcmNlICJvbGQiIHR0eSBkcml2ZXIsIG5ldyBvbmUgYm90Y2hlcyBUQU5ERU0u ICovCi0gICAgeyBpbnQgazsKLSAgICAgIGlvY3RsKHR0eWZkLCBUSU9DR0VURCwgJnR0bGQpOwkv KiBHZXQgYW5kIHNhdmUgbGluZSBkaXNjaXBsaW5lICovCi0gICAgICBkZWJ1ZyhGMTAxLCI0LjFi c2QgbGluZSBkaXNjaXBsaW5lIiwiIix0dGxkKTsKLSAgICAgIGsgPSBPVFRZRElTQzsJCQkvKiBT d2l0Y2ggdG8gIm9sZCIgZGlzY2lwbGluZSAqLwotICAgICAgayA9IGlvY3RsKHR0eWZkLCBUSU9D U0VURCwgJmspOwotICAgICAgZGVidWcoRjEwMSwiNC4xYnNkIHRpb2NzZXRkIiwiIixrKTsKLSAg ICB9Ci0jZW5kaWYgLyogQlNENDEgKi8KLQotI2lmZGVmIGFlZ2lzCi0gICAgLyogVGhpcyB3YXMg cHJldmlvdXNseSBkb25lIGJlZm9yZSB0aGUgbGFzdCB0d28gVENHRVRBIG9yIGd0dHkgYWJvdmUs Ci0gICAgICogaW4gYm90aCB0aGUgQVRUU1YgYW5kIG5vdC1BVFRTViBjYXNlLiAgSWYgaXQgaXMg bm90IG9rYXkgdG8gaGF2ZSBvbmx5Ci0gICAgICogb25lIGNvcHkgaWYgaXQgaGVyZSBpbnN0ZWFk LCBnaXZlIHVzIGEgc2hvdXQhCi0gICAgICovCi0gICAgc2lvXyRjb250cm9sKChzaG9ydCl0dHlm ZCwgc2lvXyRyYXdfbmwsIGZhbHNlLCBzdCk7Ci0gICAgaWYgKHhsb2NhbCkgeyAgICAgICAvKiBp Z25vcmUgYnJlYWtzIGZyb20gbG9jYWwgbGluZSAqLwotICAgICAgICBzaW9fJGNvbnRyb2woKHNo b3J0KXR0eWZkLCBzaW9fJGludF9lbmFibGUsIGZhbHNlLCBzdCk7Ci0gICAgICAgIHNpb18kY29u dHJvbCgoc2hvcnQpdHR5ZmQsIHNpb18kcXVpdF9lbmFibGUsIGZhbHNlLCBzdCk7Ci0gICAgfQot I2VuZGlmIC8qIGFlZ2lzICovCi0KLSNpZmRlZiBWWFZFCi0gICAgdHRyYXcuY19saW5lID0gMDsg ICAgICAgICAgICAgICAgICAgLyogU1RUWSBsaW5lIDAgZm9yIFZYL1ZFICovCi0gICAgdHR0dnQu Y19saW5lID0gMDsgICAgICAgICAgICAgICAgICAgLyogU1RUWSBsaW5lIDAgZm9yIFZYL1ZFICov Ci0gICAgaW9jdGwodHR5ZmQsVENTRVRBLCZ0dHJhdyk7Ci0jZW5kaWYgLyogdnh2ZSAqLwotCi0v KiBJZiBPX05ERUxBWSB3YXMgdXNlZCBkdXJpbmcgb3BlbigpLCB0aGVuIHJlbW92ZSBpdCBub3cu ICovCi0KLSNpZmRlZiBPX05ERUxBWQotICAgIGRlYnVnKEYxMDAsInR0b3BlbiBPX05ERUxBWSIs IiIsMCk7Ci0gICAgaWYgKHhsb2NhbCA+IDApIHsKLSAgICAgIGlmIChmY250bCh0dHlmZCwgRl9H RVRGTCwgMCkgJiBPX05ERUxBWSkgewotCWRlYnVnKEYxMDAsInR0b3BlbiBmY250bCBPX05ERUxB WSIsIiIsMCk7Ci0jaWZuZGVmIGFlZ2lzCi0JaWYgKGZjbnRsKHR0eWZkLEZfU0VURkwsIGZjbnRs KHR0eWZkLCBGX0dFVEZMLCAwKSAmIH5PX05ERUxBWSkgPCAwKSB7Ci0JICAgIGRlYnVnKEYxMDAs InR0b3BlbiBmY250bCBmYWlsdXJlIHRvIHVuc2V0IE9fTkRFTEFZIiwiIiwwKTsKLQkgICAgcGVy cm9yKCJDYW4ndCB1bnNldCBPX05ERUxBWSIpOwotCX0KLSNlbmRpZiAvKiBhZWdpcyAqLwotCS8q IFNvbWUgc3lzdGVtcywgbm90YWJseSBYZW5peCAoZG9uJ3Qga25vdyBob3cgY29tbW9uIHRoaXMg aXMgaW4KLQkgKiBvdGhlciBzeXN0ZW1zKSwgbmVlZCBzcGVjaWFsIHRyZWF0bWVudCB0byBnZXQg cmlkIG9mIHRoZSBPX05ERUxBWQotCSAqIGJlaGF2aW91ciBvbiByZWFkKCkgd2l0aCByZXNwZWN0 IHRvIGNhcnJpZXIgcHJlc2VuY2UgKGkuZS4gcmVhZCgpCi0JICogcmV0dXJuaW5nIDAgd2hlbiBj YXJyaWVyIGFic2VudCksIGV2ZW4gdGhvdWdoIHRoZSBhYm92ZSBmY250bCgpCi0JICogaXMgZW5v dWdoIHRvIG1ha2UgcmVhZCgpIHdhaXQgZm9yIGlucHV0IHdoZW4gY2FycmllciBpcyBwcmVzZW50 LgotCSAqIFRoaXMgbWFnaWMsIGluIHR1cm4sIHJlcXVpcmVzIENMT0NBTCBmb3Igd29ya2luZyB3 aGVuIHRoZSBjYXJyaWVyCi0JICogaXMgYWJzZW50LiBCdXQgaWYgeGxvY2FsID09IDAsIHByZXN1 bWFibHkgeW91IGFscmVhZHkgaGF2ZSBDTE9DQUwKLQkgKiBvciB5b3UgaGF2ZSBhIGNhcnJpZXIs IG90aGVyd2lzZSB5b3Ugd291bGRuJ3QgYmUgcnVubmluZyB0aGlzLgotCSAqLwotCWRlYnVnKEYx MDEsInR0b3BlbiB4bG9jYWwiLCIiLHhsb2NhbCk7Ci0jaWZkZWYgQVRUU1YKLSNpZmRlZiBCU0Q0 NE9SUE9TSVgKLSNpZmRlZiBDT01NRU5UCQkJCS8qIDEyIEF1ZyAxOTk3ICovCi0jaWZkZWYgX19i c2RpX18KLQlpZiAoeGxvY2FsKQotCSAgdHRyYXcuY19jZmxhZyB8PSBDTE9DQUw7Ci0jZWxzZQot I2lmZGVmIF9fRnJlZUJTRF9fCi0JaWYgKHhsb2NhbCkKLQkgIHR0cmF3LmNfY2ZsYWcgfD0gQ0xP Q0FMOwotI2VuZGlmIC8qIF9fRnJlZUJTRF9fICovCi0jZW5kaWYgLyogX19ic2RpX18gKi8KLSNl bHNlIC8qIE5vdCBDT01NRU5UICovCi0jaWZkZWYgQ0xPQ0FMCi0JaWYgKHhsb2NhbCkJCQkvKiBV bnNldCB0aGlzIGlmIGl0J3MgZGVmaW5lZC4gKi8KLQkgIHR0cmF3LmNfY2ZsYWcgfD0gQ0xPQ0FM OwotI2VuZGlmIC8qIENMT0NBTCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQlkZWJ1ZyhGMTAx LCJ0dG9wZW4gQlNENDRPUlBPU0lYIGNhbGxpbmcgdGNzZXRhdHRyIiwiIixUQ1NBRFJBSU4pOwot CWlmICh0Y3NldGF0dHIodHR5ZmQsIFRDU0FEUkFJTiwgJnR0cmF3KSA8IDApIHsKLQkgICAgZGVi dWcoRjEwMCwidHRvcGVuIFBPU0lYIHRjc2VhdHRyIGZhaWxzIiwiIiwwKTsKLQkgICAgcGVycm9y KCJ0Y3NldGF0dHIiKTsKLQl9Ci0jZWxzZSAvKiAhQlNENDRPUlBPU0lYICovCi0JaWYgKHhsb2Nh bCkgewotCSAgICB0dHJhdy5jX2NmbGFnIHw9IENMT0NBTDsKLQkgICAgZGVidWcoRjEwMCwidHRv cGVuIGNhbGxpbmcgaW9jdGwoVENTRVRBKSIsIiIsMCk7Ci0JICAgIGVycm5vID0gMDsKLQkgICAg aWYgKGlvY3RsKHR0eWZkLCBUQ1NFVEEsICZ0dHJhdykgPCAwKSB7Ci0gICAgICAgICAgICAgICAg ZGVidWcoRjEwMSwidHRvcGVuIGlvY3RsKFRDU0VUQSkgZmFpbHMiLCIiLGVycm5vKTsKLSAgICAg ICAgICAgICAgICBwZXJyb3IoImlvY3RsKFRDU0VUQSkiKTsKLSAgICAgICAgICAgIH0KLQl9Ci0j ZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNpZm5kZWYgTk9D T1RGTUMgLyogPSBOTyBDbG9zZShPcGVuKCkpIFRvIEZvcmNlIE1vZGUgQ2hhbmdlICovCi0vKiBS ZXBvcnRlZGx5IGxldHMgdXVnZXR0eSBncmFiIHRoZSBkZXZpY2UgaW4gU0NPIFVOSVggMy4yIC8g WEVOSVggMi4zICovCi0JZGVidWcoRjEwMCwidHRvcGVuIGV4ZWN1dGluZyBjbG9zZS9vcGVuIiwi IiwwKTsKLQljbG9zZSggcHJpdl9vcG4oZm5hbSwgT19SRFdSKSApOyAvKiBNYWdpYyB0byBmb3Jj ZSBjaGFuZ2UuICovCi0jZW5kaWYgLyogTk9DT1RGTUMgKi8KLSAgICAgIH0KLSAgICB9Ci0jZW5k aWYgLyogT19OREVMQVkgKi8KLQotLyogSW5zdHJ1Y3QgdGhlIHN5c3RlbSBob3cgdG8gdHJlYXQg dGhlIGNhcnJpZXIsIGFuZCBzZXQgYSBmZXcgb3RoZXIgdHR5Ci0gKiBwYXJhbWV0ZXJzLgotICoK LSAqIFRoaXMgYWxzbyB1bmRvZXMgdGhlIHRlbXBvcmFyeSBzZXR0aW5nIG9mIENMT0NBTCB0aGF0 IG1heSBoYXZlIGJlZW4gZG9uZQotICogZm9yIHRoZSBjbG9zZShvcGVuKCkpIGFib3ZlIChleGNl cHQgaW4gWGVuaXgpLiAgQWxzbyB0aHJvdyBpbiB+RUNITywgdG8KLSAqIHByZXZlbnQgdGhlIG90 aGVyIGVuZCBvZiB0aGUgbGluZSBmcm9tIHNpdHRpbmcgdGhlcmUgdGFsa2luZyB0byBpdHNlbGYs Ci0gKiBwcm9kdWNpbmcgZ2FyYmFnZSB3aGVuIHRoZSB1c2VyIHBlcmZvcm1zIGEgY29ubmVjdC4K LSAqCi0gKiBTQ08gWGVuaXggdW5mb3J0dW5hdGVseSBzZWVtcyB0byBpZ25vcmUgdGhlIGFjdHVh bCBzdGF0ZSBvZiBDTE9DQUwuCi0gKiBOb3cgaXQgdGhpbmtzIENMT0NBTCBpcyBhbHdheXMgb24u IEl0IHNlZW1zIHRoZSBvbmx5IHJlYWwgc29sdXRpb24gZm9yCi0gKiBYZW5peCBpcyB0byBzd2l0 Y2ggYmV0d2VlbiB0aGUgbG93ZXIgYW5kIHVwcGVyIGNhc2UgZGV2aWNlIG5hbWVzLgotICoKLSAq IFRoaXMgc2VjdGlvbiBtYXkgYXQgc29tZSBmdXR1cmUgdGltZSBleHBhbmQgaW50byBzZXR0aW5n IGEgY29tcGxldGUKLSAqIGNvbGxlY3Rpb24gb2YgdHR5IHBhcmFtZXRlcnMsIG9yIGNhbGwgYSBm dW5jdGlvbiBzaGFyZWQgd2l0aCB0dHBrdCgpLwotICogdHR2dCgpIHRoYXQgZG9lcyBzby4gIE9u IHRoZSBvdGhlciBoYW5kLCB0aGUgaW5pdGlhbCBwYXJhbWV0ZXJzIGFyZSBub3QKLSAqIHRoYXQg aW1wb3J0YW50LCBzaW5jZSB0dHBrdCgpIG9yIHR0dnQoKSBzaG91bGQgYWx3YXlzIGZpeCB0aGF0 IGJlZm9yZQotICogYW55IGNvbW11bmljYXRpb24gaXMgZG9uZS4gIFdlbGwsIHdlJ2xsIHNlZS4u LgotICovCi0gICAgaWYgKHhsb2NhbCkgewotICAgIAljdXJjYXJyID0gLTI7Ci0JZGVidWcoRjEw MCwidHRvcGVuIGNhbGxpbmcgY2FycmN0bCIsIiIsMCk7Ci0JY2FycmN0bCgmdHRyYXcsIHR0Y2Fy ciA9PSBDQVJfT04pOwotCWRlYnVnKEYxMDAsInR0b3BlbiBjYXJyY3RsIG9rIiwiIiwwKTsKLQot I2lmZGVmIENPSEVSRU5UCi0jZGVmaW5lIFNWT1JQT1NJWAotI2VuZGlmIC8qIENPSEVSRU5UICov Ci0KLSNpZmRlZiBTVk9SUE9TSVgKLQl0dHJhdy5jX2xmbGFnICY9IH5FQ0hPOwotCXR0b2xkLmNf bGZsYWcgJj0gfkVDSE87Ci0jaWZkZWYgQlNENDRPUlBPU0lYCi0JeSA9IHRjc2V0YXR0cih0dHlm ZCwgVENTQURSQUlOLCAmdHRyYXcpOwotCWRlYnVnKEYxMDEsInR0b3BlbiB0Y3NldGF0dHIiLCIi LHkpOwotI2Vsc2UKLQl5ID0gaW9jdGwodHR5ZmQsIFRDU0VUQSwgJnR0cmF3KTsKLQlkZWJ1ZyhG MTAwLCJ0dG9wZW4gaW9jdGwiLCIiLHkpOwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotCi0j ZWxzZSAvKiBCU0QsIGV0YyAqLwotCXR0cmF3LnNnX2ZsYWdzICY9IH5FQ0hPOwotCXR0b2xkLnNn X2ZsYWdzICY9IH5FQ0hPOwotI2lmZGVmIEJFTExWMTAKLQl5ID0gaW9jdGwodHR5ZmQsVElPQ1NF VFAsJnR0cmF3KTsKLQlkZWJ1ZyhGMTAwLCJ0dG9wZW4gaW9jdGwiLCIiLHkpOwotI2Vsc2UKLQl5 ID0gc3R0eSh0dHlmZCwmdHRyYXcpOwotCWRlYnVnKEYxMDAsInR0b3BlbiBzdHR5IiwiIix5KTsK LSNlbmRpZiAvKiBCRUxMVjEwICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0KLSNpZmRlZiBD T0hFUkVOVAotI3VuZGVmIFNWT1JQT1NJWAotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLQkvKiB0 dGZsdWkoKTsgKi8gIC8qICBUaGlzIGZhaWxzIGZvciBzb21lIHJlYXNvbi4gICovCi0gICAgfQot Ci0gICAgLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KLQotI2lmbmRlZiBCRUJPWAotICAgIHR0c3Bl ZWQgPSB0dGdzcGQoKTsKLSNlbHNlCi0gICAgdHRzcGVlZCA9IDE5MjAwOwotI2VuZGlmIC8qICFC RUJPWCAqLwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0dHNwZWVkIiwiIix0dHNwZWVkKTsKLQot ICAgIC8qIERvbmUsIG1ha2UgZW50cmllcyBpbiBkZWJ1ZyBsb2csIHJlc3RvcmUgQ3RybC1DIHRy YXAsIGFuZCByZXR1cm4uICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdHR5ZmQiLCIiLHR0 eWZkKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gKmxjbCIsIiIsKmxjbCk7Ci0gICAgZGVidWco RjExMSwidHRvcGVuIGxvY2sgZmlsZSIsZmxmbmFtLGxrZik7Ci0gICAgc2lnbmFsKFNJR0lOVCxv Y2N0KTsKLSAgICBzaWdpbnRfaWduID0gKG9jY3QgPT0gU0lHX0lHTikgPyAxIDogMDsKLSAgICBn b3RzaWdzID0gMDsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLQotLyogIEQgTyBfIE8gUCBFIE4gIC0t ICBEbyB0aGUgcmlnaHQga2luZCBvZiBvcGVuKCkgY2FsbCBmb3IgdGhlIHR0eS4gKi8KLQotaW50 Ci1kb19vcGVuKHR0bmFtZSkgY2hhciAqdHRuYW1lOyB7Ci0gICAgaW50IGZsYWdzOwotCi0jaWZk ZWYgUU5YNgotICAgIC8qIE9fTk9OQkxPQ0sgb24gL2Rldi90dHkgbWFrZXMgb3BlbigpIGZhaWwg Ki8KLSAgICByZXR1cm4ocHJpdl9vcG4odHRuYW1lLCBPX1JEV1IgfAotCQkgICAgKAotCQkgICAg ICgoaW50KXN0cmNtcCh0dG5hbWUsIi9kZXYvdHR5IikgPT0gMCkgPwotCQkgICAgIDAgOgotCQkg ICAgICh0dGNhcnIgIT0gQ0FSX09OKSA/IE9fTk9OQkxPQ0sgOiAwKQotCQkgICAgKQotCSAgICk7 IAotI2Vsc2UgIC8qICFRTlg2ICovCi0KLSNpZm5kZWYJT19OREVMQVkJCQkvKiBPX05ERUxBWSBu b3QgZGVmaW5lZCAqLwotICAgIHJldHVybihwcml2X29wbih0dG5hbWUsMikpOwotI2Vsc2UJCQkJ CS8qIE9fTkRFTEFZIGRlZmluZWQgKi8KLQotI2lmZGVmIEFUVDczMDAKLS8qCi0gT3BlbiBjb21t cyBsaW5lIHdpdGhvdXQgd2FpdGluZyBmb3IgY2FycmllciBzbyBpbml0aWFsIGNhbGwgZG9lcyBu b3QgaGFuZwotIGJlY2F1c2Ugc3RhdGUgb2YgIm1vZGVtIiBpcyBsaWtlbHkgdW5rbm93biBhdCB0 aGUgaW5pdGlhbCBjYWxsICAtanJkLgotIElmIHRoaXMgaXMgbmVlZGVkIGZvciB0aGUgZ2V0dHkg c3R1ZmYgdG8gd29yaywgYW5kIHRoZSBvcGVuIHdvdWxkIG5vdCB3b3JrCi0gd2l0aG91dCBPX05E RUxBWSB3aGVuIGdldHR5IGlzIHN0aWxsIG9uLCB0aGVuIHRoaXMgc3BlY2lhbCBjYXNlIGlzIG9r LgotIE90aGVyd2lzZSwgZ2V0IHJpZCBvZiBpdC4gLXNrZQotKi8KLSAgICByZXR1cm4ocHJpdl9v cG4odHRuYW1lLCBPX1JEV1IgfCBPX05ERUxBWSkpOwotCi0jZWxzZQkvKiAhQVRUNzMwMCAqLwot Ci0gICAgLyogTm9ybWFsIGNhc2UuIFVzZSBPX05ERUxBWSBhY2NvcmRpbmcgdG8gU0VUIENBUlJJ RVIuIFNlZSB0dHNjYXJyKCkuICovCi0gICAgZmxhZ3MgPSBPX1JEV1I7Ci0gICAgZGVidWcoRjEw MSwiZG9fb3BlbiB4bG9jYWwiLCIiLHhsb2NhbCk7Ci0gICAgZGVidWcoRjExMSwiZG9fb3BlbiBm bGFncyBBIix0dG5hbWUsZmxhZ3MpOwotICAgIGlmICh4bG9jYWwgJiYgKHR0Y2FyciAhPSBDQVJf T04pKQotICAgICAgZmxhZ3MgfD0gT19OREVMQVk7Ci0gICAgZGVidWcoRjExMSwiZG9fb3BlbiBm bGFncyBCIix0dG5hbWUsZmxhZ3MpOwotICAgIHJldHVybihwcml2X29wbih0dG5hbWUsIGZsYWdz KSk7Ci0jZW5kaWYgLyogIUFUVDczMDAgKi8KLSNlbmRpZiAvKiBPX05ERUxBWSAqLwotI2VuZGlm IC8qIFFOWDYgKi8KLX0KLQotLyogIFQgVCBDIEwgTyBTICAtLSAgQ2xvc2UgdGhlIFRUWSwgcmVs ZWFzaW5nIGFueSBsb2NrLiAgKi8KLQotc3RhdGljIGludCB0dGNfc3RhdGUgPSAwOwkJLyogdHRj bG9zZSgpIHN0YXRlICovCi1zdGF0aWMgY2hhciAqIHR0Y19uYW1bXSA9IHsgInNldHVwIiwgImhh bmd1cCIsICJyZXNldCIsICJjbG9zZSIgfTsKLQotaW50Ci10dGNsb3MoZm9vKSBpbnQgZm9vOyB7 CQkJLyogQXJnIHJlcSdkIGZvciBzaWduYWwoKSBwcm90b3R5cGUgKi8KLSAgICBpbnQgeHgsIHgg PSAwOwotICAgIGV4dGVybiBpbnQgZXhpdGhhbmd1cDsKLQotICAgIGRlYnVnKEYxMDEsInR0Y2xv cyB0dHlmZCIsIiIsdHR5ZmQpOwotICAgIGRlYnVnKEYxMDEsInR0Y2xvcyBuZXRjb25uIiwiIixu ZXRjb25uKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dGNsb3MgeGxvY2FsIiwiIix4bG9jYWwpOwotI2lm ZGVmIE5PRkRaRVJPCi0gICAgZGVidWcoRjEwMCwidHRjbG9zIE5PRkRaRVJPIiwiIiwwKTsKLSNl bmRpZiAvKiBOT0ZEWkVSTyAqLwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIFRUTEVCVUYKLSAg ICBsZV9pbml0KCk7CQkJCS8qIE5vIG5lZWQgZm9yIGFueSBvZiB0aGlzICovCi0jZW5kaWYgLyog VFRMRUJVRiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIGlmICh0dHlmZCA8IDApCQkJ LyogV2Fzbid0IG9wZW4uICovCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAodHRmZGZsZykJ CQkvKiBJZiB3ZSBpbmhlcml0ZWQgdHR5ZmQgZnJvbSAqLwotICAgICAgcmV0dXJuKDApOwkJCS8q IGFub3RoZXIgcHJvY2VzcywgZG9uJ3QgY2xvc2UgaXQuICovCi0KLSAgICB0dnRmbGcgPSAwOwkJ CQkvKiAoc29tZSBkYXkgZ2V0IHJpZCBvZiB0aGlzLi4uKSAqLwotICAgIGdvdHNpZ3MgPSAwOwot Ci0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikgewotI2lmZGVmIFROQ09ERQotICAgICAg ICAgIHRuX3B1c2goKTsgICAgICAgICAgICAgICAgICAgIC8qIFBsYWNlIGFueSB3YWl0aW5nIGRh dGEgaW50byBpbnB1dCovCi0gICAgICAgICAgdG5fc29wdChETyxURUxPUFRfTE9HT1VUKTsgICAg LyogU2VuZCBMT0dPVVQgb3B0aW9uIGJlZm9yZSBjbG9zZSAqLwotICAgICAgICAgIFRFTE9QVF9V TkFOU1dFUkVEX0RPKFRFTE9QVF9MT0dPVVQpID0gMTsKLSAgICAgICAgICB0bl9yZXNldCgpOyAg ICAgICAgICAgICAgICAgICAvKiBUaGUgUmVzZXQgVGVsbmV0IE9wdGlvbiB0YWJsZS4gICovCi0j ZW5kaWYgLyogVE5DT0RFICovCi0jaWZkZWYgQ0tfU1NMCi0JICBpZiAoc3NsX2FjdGl2ZV9mbGFn KSB7Ci0JICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotCQlCSU9fcHJpbnRmKGJpb19lcnIsImNh bGxpbmcgU1NMX3NodXRkb3duKHNzbClcbiIpOwotCSAgICAgIFNTTF9zaHV0ZG93bihzc2xfY29u KTsKLQkgICAgICBTU0xfZnJlZShzc2xfY29uKTsKLQkgICAgICBzc2xfY29uID0gTlVMTDsKLQkg ICAgICBzc2xfYWN0aXZlX2ZsYWcgPSAwOwotCSAgfQotCSAgaWYgKHRsc19hY3RpdmVfZmxhZykg ewotCSAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLQkJQklPX3ByaW50ZihiaW9fZXJyLCJjYWxs aW5nIFNTTF9zaHV0ZG93bih0bHMpXG4iKTsKLQkgICAgICBTU0xfc2h1dGRvd24odGxzX2Nvbik7 Ci0JICAgICAgU1NMX2ZyZWUodGxzX2Nvbik7Ci0JICAgICAgdGxzX2NvbiA9IE5VTEw7Ci0JICAg ICAgdGxzX2FjdGl2ZV9mbGFnID0gMDsKLQkgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICB9 Ci0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpIHsJCQkv KiBXZSd2ZSBiZWVuIHVzaW5nIGEgcGlwZSAqLwotCS8qIHR0cGlwZSA9IDA7ICovCi0JaWYgKHR0 cGlkID4gMCkgewotCSAgICBpbnQgd3N0YXQ7Ci0JICAgIGludCBzdGF0dXNwOwotCSAgICBjbG9z ZShmZGluKTsJCS8qIENsb3NlIHRoZXNlLiAqLwotCSAgICBjbG9zZShmZG91dCk7Ci0JICAgIGZk aW4gPSBmZG91dCA9IC0xOwotCSAgICBraWxsKHR0cGlkLDEpOwkJLyogS2lsbCBmb3JrIHdpdGgg U0lHSFVQICovCi0JICAgIHdoaWxlICgxKSB7Ci0JCXdzdGF0ID0gd2FpdCgmc3RhdHVzcCk7Ci0J CWlmICh3c3RhdCA9PSB0dHBpZCB8fCB3c3RhdCA9PSAtMSkKLQkJICBicmVhazsKLQkJcGV4aXRz dGF0ID0gKHN0YXR1c3AgJiAweGZmKSA/IHN0YXR1c3AgOiBzdGF0dXNwID4+IDg7Ci0JICAgIH0K LQkgICAgdHRwaWQgPSAwOwotCX0KLQluZXRjb25uID0gMDsKLQl3YXNjbG9zZWQgPSAxOwotCXR0 eWZkID0gLTE7Ci0JcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRl ZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHsKLSNpZm5kZWYgTk9ET1BUWQotICAgICAgICBlbmRf cHR5KCk7Ci0jZW5kaWYgLyogTk9ET1BUWSAqLwotICAgICAgICBjbG9zZSh0dHlmZCk7Ci0JbmV0 Y29ubiA9IDA7Ci0Jd2FzY2xvc2VkID0gMTsKLSAgICAgICAgdHRwdHkgPSAwOwotICAgICAgICB0 dHlmZCA9IC0xOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIE5FVFBUWSAq LwotCi0jaWZkZWYJTkVUQ09OTgotICAgIGlmIChuZXRjb25uKSB7CQkJLyogSWYgaXQncyBhIG5l dHdvcmsgY29ubmVjdGlvbi4gKi8KLQlkZWJ1ZyhGMTAwLCJ0dGNsb3MgY2xvc2luZyBuZXQiLCIi LDApOwotCW5ldGNsb3MoKTsJCQkvKiBMZXQgdGhlIG5ldHdvcmsgbW9kdWxlIGNsb3NlIGl0LiAq LwotCW5ldGNvbm4gPSAwOwkJCS8qIE5vIG1vcmUgbmV0d29yayBjb25uZWN0aW9uLiAqLwotCWRl YnVnKEYxMDEsInR0Y2xvcyB0dHlmZCBhZnRlciBuZXRjbG9zIiwiIix0dHlmZCk7IC8qIFNob3Vs ZCBiZSAtMSAqLwotCXJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYJLyogTkVUQ09OTiAqLwotCi0g ICAgaWYgKHhsb2NhbCkgewkJCS8qIFdlJ3JlIGNsb3NpbmcgYSBTRVQgTElORSBkZXZpY2UgKi8K LSNpZmRlZiBGVDIxCQkJCS8qIEZvcnR1bmUgMi4xLXNwZWNpZmljIGl0ZW1zIC4uLiAqLwotCWlv Y3RsKHR0eWZkLFRJT0NIUENMLCBOVUxMKTsKLSNlbmRpZiAvKiBGVDIxICovCi0jaWZkZWYgdWx0 cml4CQkJCS8qIFVsdHJpeC1zcGVjaWZpYyBpdGVtcyAuLi4gKi8KLSNpZmRlZiBUSU9DU0lOVVNF Ci0JLyogVW5zZXQgdGhlIElOVVNFIGZsYWcgdGhhdCB3ZSBzZXQgaW4gdHRvcGVuKCkgKi8KLQlp b2N0bCh0dHlmZCwgVElPQ1NJTlVTRSwgTlVMTCk7Ci0jZW5kaWYgLyogVElPQ1NJTlVTRSAqLwot CWlvY3RsKHR0eWZkLCBUSU9DTk1PREVNLCAmeCk7Ci0jaWZkZWYgQ09NTUVOVAotCS8qIFdoYXQg d2FzIHRoaXM/ICovCi0JaW9jdGwodHR5ZmQsIFRJT0NOQ0FSLCBOVUxMKTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0jZW5kaWYgLyogdWx0cml4ICovCi0gICAgfQotCi0gICAgLyogVGhpcyBpcyB0 byBwcmV2ZW50IHVzIGZyb20gc3RpY2tpbmcgaW4gdHRoYW5nKCkgb3IgY2xvc2UoKS4gKi8KLQot I2lmZGVmIE9fTkRFTEFZCi0jaWZuZGVmIGFlZ2lzCi0gICAgaWYgKHR0eWZkID4gMCkgewkJCS8q IEJ1dCBza2lwIGl0IG9uIHN0ZGluLiAqLwotCWRlYnVnKEYxMDAsInR0Y2xvcyBzZXR0aW5nIE9f TkRFTEFZIiwiIiwwKTsKLQl4ID0gZmNudGwodHR5ZmQsRl9TRVRGTCxmY250bCh0dHlmZCxGX0dF VEZMLCAwKXxPX05ERUxBWSk7Ci0jaWZkZWYgREVCVUcKLQlpZiAoZGVibG9nICYmIHggPT0gLTEp IHsKLQkgICAgcGVycm9yKCJXYXJuaW5nIC0gQ2FuJ3Qgc2V0IE9fTkRFTEFZIik7Ci0JICAgIGRl YnVnKEYxMDEsInR0Y2xvcyBmY250bCBmYWlsdXJlIHRvIHNldCBPX05ERUxBWSIsIiIseCk7Ci0J fQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgfQotI2VuZGlmIC8qIGFlZ2lzICovCi0jZW5kaWYg LyogT19OREVMQVkgKi8KLQotICAgIHggPSAwOwotICAgIHR0Y19zdGF0ZSA9IDA7Ci0gICAgaWYg KHhsb2NhbAotI2lmZGVmIE5PRkRaRVJPCi0JfHwgdHR5ZmQgPiAwCi0jZW5kaWYgLyogTk9GRFpF Uk8gKi8KLQkpIHsKLQlzYXZhbCA9IHNpZ25hbChTSUdBTFJNLHh0aW1lcmgpOyAvKiBFbmFibGUg dGltZXIgaW50ZXJydXB0LiAqLwotCXh4ID0gYWxhcm0oOCk7CQkJLyogQWxsb3cgOCBzZWNvbmRz LiAqLwotCWRlYnVnKEYxMDEsInR0Y2xvcyBhbGFybSIsIiIseHgpOwotCWlmICgKLSNpZmRlZiBD S19QT1NJWF9TSUcKLQkgICAgc2lnc2V0am1wKHNqYnVmLDEpCi0jZWxzZQotCSAgICBzZXRqbXAo c2pidWYpCi0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0JICAgICkgewkJCQkvKiBUaW1lciB3 ZW50IG9mZj8gKi8KLQkgICAgeCA9IC0xOwotI2lmZGVmIERFQlVHCi0JICAgIGRlYnVnKEYxMTEs InR0Y2xvcyBBTEFSTSBUUkFQIGVycm5vIixja2l0b2EodHRjX3N0YXRlKSxlcnJubyk7Ci0JICAg IHByaW50ZigidHRjbG9zKCkgdGltZW91dDogJXNcbiIsIHR0Y19uYW1bdHRjX3N0YXRlXSk7Ci0j ZW5kaWYgLyogREVCVUcgKi8KLQl9Ci0JLyogSGFuZyB1cCB0aGUgZGV2aWNlIChkcm9wIERUUikg Ki8KLQotCWVycm5vID0gMDsKLQlkZWJ1ZyhGMTExLCJ0dGNsb3MgQSIsY2tpdG9hKHgpLHR0Y19z dGF0ZSk7Ci0JaWYgKHR0Y19zdGF0ZSA8IDEpIHsKLQkgICAgdHRjX3N0YXRlID0gMTsKLQkgICAg ZGVidWcoRjEwMSwidHRjbG9zIGV4aXRoYW5ndXAiLCIiLGV4aXRoYW5ndXApOwotCSAgICBpZiAo ZXhpdGhhbmd1cCkgewotCQlhbGFybSg4KTsJCS8qIFJlLWFybSB0aGUgdGltZXIgKi8KLQkJZGVi dWcoRjEwMSwidHRjbG9zIGNhbGxpbmcgdHRoYW5nKCkiLCIiLHgpOwotCQl4ID0gdHRoYW5nKCk7 CQkvKiBIYW5nIHVwIGZpcnN0LCB0aGVuLi4uICovCi0JCWRlYnVnKEYxMDEsInR0Y2xvcyB0dGhh bmcoKSIsIiIseCk7Ci0JICAgIH0KLSNpZm5kZWYgQ0tfTk9IVVBDTAotLyoKLSAgT2N0IDIwMDYg LSBMZWF2ZSBEVFIgb24gaWYgU0VUIEVYSVQgSEFOR1VQIE9GRi4KLSAgU3VnZ2VzdGVkIGJ5IFNv ZXdvbm8gRWZmZW5kaS4KLSovCi0jaWZkZWYgSFVQQ0wKLQkgICAgZWxzZSB7Ci0JCXR0b2xkLmNf Y2ZsYWcgJj0gfkhVUENMOyAvKiBMZXQncyBzZWUgaG93IHRoaXMgdHJhdmVscyAqLwotI2lmZGVm IEJTRDQ0T1JQT1NJWAotCQl0Y3NldGF0dHIodHR5ZmQsVENTQU5PVywmdHRvbGQpOwotI2Vsc2Ug LyogIUJTRDQ0T1JQT1NJWCAqLwotI2lmZGVmIEFUVFNWCi0JCWlvY3RsKHR0eWZkLFRDU0VUQVcs JnR0b2xkKTsJCQotI2Vsc2UgIC8qICFBVFRTViAqLwotCQlzdHR5KHR0eWZkLCZ0dG9sZCk7Ci0j ZW5kaWYJLyogQVRUU1YgKi8KLSNlbmRpZgkvKiBCU0Q0NE9SUE9TSVggKi8KLQkgICAgfQotI2Vu ZGlmCS8qIEhVUENMICovCi0jZW5kaWYJLyogQ0tfTk9IVVBDTCAqLwotCX0KLQkvKiBQdXQgYmFj ayBkZXZpY2UgbW9kZXMgYXMgd2UgZm91bmQgdGhlbSAqLwotCi0JZXJybm8gPSAwOwotCWRlYnVn KEYxMTEsInR0Y2xvcyBCIixja2l0b2EoeCksdHRjX3N0YXRlKTsKLQlpZiAodHRjX3N0YXRlIDwg MikgewotCSAgICB0dGNfc3RhdGUgPSAyOwotCSAgICAvKiBEb24ndCB0cnkgdG8gbWVzcyB3aXRo IHR0eSBtb2RlcyBpZiB0dGhhbmcgZmFpbGVkKCkgKi8KLQkgICAgLyogc2luY2UgaXQgcHJvYmFi bHkgd29uJ3Qgd29yay4gKi8KLQkgICAgaWYgKHggPiAtMSkgewotCQlkZWJ1ZyhGMTAxLCJ0dGNs b3MgY2FsbGluZyB0dHJlcygpIiwiIix4KTsKLQkJc2lnbmFsKFNJR0FMUk0seHRpbWVyaCk7IC8q IFJlLWVuYWJsZSB0aGUgYWxhcm0uICovCi0JCWFsYXJtKDgpOwkJLyogUmUtYXJtIHRoZSB0aW1l ciAqLwotCQl4ID0gdHRyZXMoKTsJCS8qIFJlc2V0IGRldmljZSBtb2Rlcy4gKi8KLQkJZGVidWco RjEwMSwidHRjbG9zIHR0cmVzKCkiLCIiLHgpOwotCQlhbGFybSgwKTsKLQkgICAgfQotCX0KLQkv KiBDbG9zZSB0aGUgZGV2aWNlICovCi0KLQllcnJubyA9IDA7Ci0JZGVidWcoRjEwMSwidHRjbG9z IEMiLCIiLHR0Y19zdGF0ZSk7Ci0JaWYgKHR0Y19zdGF0ZSA8IDMpIHsKLQkgICAgdHRjX3N0YXRl ID0gMzsKLQkgICAgZXJybm8gPSAwOwotCSAgICBkZWJ1ZyhGMTAxLCJ0dGNsb3MgY2FsbGluZyBj bG9zZSIsIiIseCk7Ci0JICAgIHNpZ25hbChTSUdBTFJNLHh0aW1lcmgpOwkvKiBSZS1lbmFibGUg YWxhcm0uICovCi0JICAgIGFsYXJtKDgpOwkJCS8qIFJlLWFybSB0aGUgdGltZXIgKi8KLQkgICAg eCA9IGNsb3NlKHR0eWZkKTsJCS8qIENsb3NlIHRoZSBkZXZpY2UuICovCi0JICAgIGRlYnVnKEYx MDEsInR0Y2xvcyBjbG9zZSgpIiwiIix4KTsKLQkgICAgaWYgKHggPiAtMSkKLQkgICAgICB0dGNf c3RhdGUgPSAzOwotCX0KLQlkZWJ1ZyhGMTAxLCJ0dGNsb3MgRCIsIiIsdHRjX3N0YXRlKTsKLQl0 dGltb2ZmKCk7CQkJLyogVHVybiBvZmYgdGltZXIuICovCi0JaWYgKHggPCAwKSB7Ci0JICAgIHBy aW50ZigiP1dBUk5JTkcgLSBjbG9zZSBmYWlsZWQ6ICVzXG4iLHR0bm1zdik7Ci0jaWZkZWYgREVC VUcKLQkgICAgaWYgKGRlYmxvZykgewotCQlwcmludGYoImVycm5vID0gJWRcbiIsIGVycm5vKTsK LQkJZGVidWcoRjEwMSwidHRjbG9zIGZhaWxlZCIsIiIsZXJybm8pOwotCSAgICB9Ci0jZW5kaWYg LyogREVCVUcgKi8KLQl9Ci0JLyogVW5sb2NrIGFmdGVyIGNsb3NpbmcgYnV0IGJlZm9yZSBhbnkg Z2V0dHkgbXVtYm8ganVtYm8gKi8KLQotCWRlYnVnKEYxMDAsInR0Y2xvcyBhYm91dCB0byBjYWxs IHR0dW5sY2siLCIiLDApOwotICAgICAgICBpZiAodHR1bmxjaygpKSAgICAgICAgICAgICAgICAg IC8qIFJlbGVhc2UgdXVjcC1zdHlsZSBsb2NrICovCi0JICBmcHJpbnRmKHN0ZGVyciwiV2Fybmlu ZywgcHJvYmxlbSByZWxlYXNpbmcgbG9ja1xyXG4iKTsKLSAgICB9Ci0KLS8qIEZvciBiaWRpcmVj dGlvbmFsIGxpbmVzLCByZXN0b3JlIGdldHR5IGlmIGl0IHdhcyB0aGVyZSBiZWZvcmUuICovCi0K LSNpZmRlZiBBQ1VDTlRSTAkJCQkvKiA0LjNCU0QgYWN1Y250cmwoKSBtZXRob2QuICovCi0gICAg aWYgKHhsb2NhbCkgewotCWRlYnVnKEYxMDAsInR0Y2xvcyBBQ1VDTlRSTCIsIiIsMCk7Ci0JYWN1 Y250cmwoImVuYWJsZSIsdHRubXN2KTsJLyogRW5hYmxlIGdldHR5IG9uIHRoZSBkZXZpY2UuICov Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBBVFQ3MzAwCQkJCS8qIEFUVCBVTklYIFBDICgzQjEsIDcz MDApIG1ldGhvZC4gKi8KLSAgICBpZiAoeGxvY2FsKSB7Ci0JZGVidWcoRjEwMCwidHRjbG9zIEFU VDczMDAgb25nZXR0eSIsIiIsMCk7Ci0JaWYgKGF0dG1vZGVtICYgRE9HRVRZKQkJLyogV2FzIGdl dHR5KDFtKSBydW5uaW5nIGJlZm9yZSB1cz8gKi8KLQkgIG9uZ2V0dHkodHRubXN2KTsJCS8qIFll cywgcmVzdGFydCBnZXR0eSBvbiB0dHkgbGluZSAqLwotCWF0dG1vZGVtICY9IH5ET0dFVFk7CQkv KiBObyBwaG9uZSBpbiB1c2UsIGdldHR5IHJlc3RvcmVkICovCi0gICAgfQotI2VuZGlmIC8qIEFU VDczMDAgKi8KLSNlbmRpZiAvKiBTeXN0ZW0tZGVwZW5kZW50IGdldHR5LXJlc3RvcmluZyBtZXRo b2RzICovCi0KLSNpZmRlZiBzb255X25ld3MKLSAgICBrbV9leHQgPSAtMTsJCQkvKiBJbnZhbGlk YXRlIGRldmljZSdzIEthbmppLW1vZGUgKi8KLSNlbmRpZiAvKiBzb255X25ld3MgKi8KLQotICAg IHR0eWZkID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEludmFsaWRhdGUgdGhlIGZp bGUgZGVzY3JpcHRvci4gKi8KLSAgICB3YXNjbG9zZWQgPSAxOwotICAgIGRlYnVnKEYxMDAsInR0 Y2xvcyBkb25lIiwiIiwwKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qICBUIFQgSCBBIE4gRyAg LS0gIEhhbmd1cCBwaG9uZSBsaW5lIG9yIG5ldHdvcmsgY29ubmVjdGlvbi4gICovCi0vKgotICBS ZXR1cm5zOgotICAwIGlmIGl0IGRvZXMgbm90aGluZy4KLSAgMSBpZiBpdCBiZWxpZXZlcyB0aGF0 IGl0IGh1bmcgdXAgc3VjY2Vzc2Z1bGx5LgotIC0xIGlmIGl0IGJlbGlldmVzIHRoYXQgdGhlIGhh bmd1cCBhdHRlbXB0IGZhaWxlZC4KLSovCi0KLSNkZWZpbmUgSFVQVElNRSA1MDAJCQkvKiBNaWxs aXNlY29uZHMgZm9yIGhhbmd1cCAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyogVGhlIGZvbGxvd2lu ZyBkaWRuJ3Qgd29yayBidXQgVElPQ1NEVFIgZG9lcyB3b3JrICovCi0jaWZkZWYgVU5JWFdBUkUK LS8qIERlZmluZSBIVVBfUE9TSVggdG8gZm9yY2Ugbm9uLVBPU0lYIGJ1aWxkcyB0byB1c2UgdGhl IFBPU0lYIGhhbmd1cCBtZXRob2QgKi8KLSNpZm5kZWYgUE9TSVgJCQkJLyogU3VjaCBhcyBVbml4 d2FyZSAxLngsIDIueCAqLwotI2lmbmRlZiBIVVBfUE9TSVgKLSNkZWZpbmUgSFVQX1BPU0lYCi0j ZW5kaWYgLyogSFVQX1BPU0lYICovCi0jZW5kaWYgLyogUE9TSVggKi8KLSNlbmRpZiAvKiBVTklY V0FSRSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmbmRlZiBVU0VfVElPQ1NEVFIKLSNp ZmRlZiBfX05ldEJTRF9fCi0vKiBCZWNhdXNlIHRoZSBQT1NJWCBtZXRob2QgKHNldCBvdXRwdXQg c3BlZWQgdG8gMCkgZG9lc24ndCB3b3JrIGluIE5ldEJTRCAqLwotI2lmZGVmIFRJT0NTRFRSCi0j aWZkZWYgVElPQ0NEVFIKLSNkZWZpbmUgVVNFX1RJT0NTRFRSCi0jZW5kaWYgLyogVElPQ0NEVFIg Ki8KLSNlbmRpZiAvKiBUSU9DU0RUUiAqLwotI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KLSNlbmRp ZiAvKiBVU0VfVElPQ1NEVFIgKi8KLQotI2lmbmRlZiBIVVBfQ0xPU0VfUE9TSVgKLSNpZmRlZiBP VTgKLSNkZWZpbmUgSFVQX0NMT1NFX1BPU0lYCi0jZWxzZQotI2lmZGVmIENLX1NDT1Y1Ci0jZGVm aW5lIEhVUF9DTE9TRV9QT1NJWAotI2VuZGlmIC8qIENLX1NDT1Y1ICovCi0jZW5kaWYgLyogT1U4 ICovCi0jZW5kaWYgLyogSFVQX0NMT1NFX1BPU0lYICovCi0KLSNpZmRlZiBOT19IVVBfQ0xPU0Vf UE9TSVgKLSNpZmRlZiBIVVBfQ0xPU0VfUE9TSVgKLSN1bmRlZiBIVVBfQ0xPU0VfUE9TSVgKLSNl bmRpZiAvKiBIVVBfQ0xPU0VfUE9TSVggKi8KLSNlbmRpZiAvKiBOT19IVVBfQ0xPU0VfUE9TSVgg Ki8KLQotaW50Ci10dGhhbmcoKSB7Ci0jaWZkZWYgTk9MT0NBTAotICAgIHJldHVybigwKTsKLSNl bHNlCi0gICAgaW50IHggPSAwOwkJCQkvKiBTb21ldGltZXMgdXNlZCBhcyByZXR1cm4gY29kZS4g Ki8KLSNpZm5kZWYgUE9TSVgKLSAgICBpbnQgejsJCQkJLyogd29ya2VyICovCi0jZW5kaWYgLyog UE9TSVggKi8KLQotI2lmZGVmIENPSEVSRU5UCi0jZGVmaW5lIFNWT1JQT1NJWAotI2VuZGlmIC8q IENPSEVSRU5UICovCi0KLSNpZmRlZiBTVk9SUE9TSVgJCQkvKiBBVCZULCBQT1NJWCwgSFBVWCBk ZWNsYXJhdGlvbnMuICovCi0gICAgaW50IHNwZHNhdjsJCQkJLyogZm9yIHNhdmluZyBzcGVlZCAq LwotI2lmZGVmIEhVUF9QT1NJWAotICAgIGludCBzcGRzYXZpOwotI2Vsc2UKLSNpZmRlZiBCU0Q0 NE9SUE9TSVgKLSAgICBpbnQgc3Bkc2F2aTsKLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSNl bmRpZiAvKiBIVVBfUE9TSVggKi8KLSNpZmRlZiBIUFVYCi0vKgotICBFYXJseSB2ZXJzaW9ucyBv ZiBIUC1VWCBvbWl0dGVkIHRoZSBtZmxhZyB0eXBlZGVmLiAgSWYgeW91IGdldCBjb21wbGFpbnRz Ci0gIGFib3V0IGl0LCBqdXN0IGNoYW5nZSBpdCB0byBsb25nIChvciBiZXR0ZXIgc3RpbGwsIHVu c2lnbmVkIGxvbmcpLgotKi8KLSAgICBtZmxhZwotICAgICAgZHRyX2Rvd24gPSAwMDAwMDAwMDAw MCwKLSAgICAgIG1vZGVtX3J0biwKLSAgICAgIG1vZGVtX3NhdjsKLSAgICBjaGFyIG1vZGVtX3N0 YXRlWzY0XTsKLSNlbmRpZiAvKiBIUFVYICovCi0gICAgaW50IGZsYWdzOwkJCQkvKiBmY250bCBm bGFncyAqLwotICAgIHVuc2lnbmVkIHNob3J0IHR0Y19zYXZlOwotI2VuZGlmIC8qIFNWT1JQT1NJ WCAqLwotCi0gICAgaWYgKHR0eWZkIDwgMCkgcmV0dXJuKDApOyAgICAgICAgICAgLyogRG9uJ3Qg ZG8gdGhpcyBpZiBub3Qgb3BlbiAgKi8KLSAgICBpZiAoeGxvY2FsIDwgMSkgcmV0dXJuKDApOwkJ LyogRG9uJ3QgZG8gdGhpcyBpZiBub3QgbG9jYWwgKi8KLQotI2lmZGVmIE5FVENNRAotICAgIGlm ICh0dHBpcGUpCi0gICAgICByZXR1cm4oKHR0Y2xvcygwKSA8IDApID8gLTEgOiAxKTsKLSNlbmRp ZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpCi0gICAgICByZXR1 cm4oKHR0Y2xvcygwKSA8IDApID8gLTEgOiAxKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLSNpZmRl ZiBORVRDT05OCi0gICAgaWYgKG5ldGNvbm4pIHsJCQkvKiBOZXR3b3JrIGNvbm5lY3Rpb24uICov Ci0jaWZkZWYgVE5fQ09NUE9SVAotICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgewotICAgICAg ICAgICAgaW50IHJjID0gdG5jX3NldF9kdHJfc3RhdGUoMCk7Ci0gICAgICAgICAgICBpZiAocmMg Pj0gMCkgewotICAgICAgICAgICAgICAgIG1zbGVlcChIVVBUSU1FKTsKLSAgICAgICAgICAgICAg ICByYyA9IHRuY19zZXRfZHRyX3N0YXRlKDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg cmV0dXJuKHJjID49IDAgPyAxIDogLTEpOwotICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBUTl9D T01QT1JUICovCi0JICByZXR1cm4oKG5ldGNsb3MoKSA8IDApID8gLTEgOiAxKTsgLyogSnVzdCBj bG9zZSBpdC4gKi8KLSAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotLyogRnJvbSBoZXJlIGRv d24sIHdlIGhhbmRsZSByZWFsIHR0eSBkZXZpY2VzLiAqLwotI2lmZGVmIEhVUF9QT1NJWAotLyoK LSAgZS5nLiBmb3IgVW5peHdhcmUgMiwgd2hlcmUgd2UgZG9uJ3QgaGF2ZSBhIGZ1bGwgUE9TSVgg YnVpbGQsIHdlCi0gIHN0aWxsIGhhdmUgdG8gdXNlIFBPU0lYLXN0eWxlIGhhbmd1cC4gIFRodXMg dGhlIGR1cGxpY2F0aW9uIG9mIHRoaXMKLSAgYW5kIHRoZSBuZXh0IGNhc2UsIHRoZSBvbmx5IGRp ZmZlcmVuY2UgYmVpbmcgd2UgdXNlIGEgbG9jYWwgdGVybWlvcwotICBzdHJ1Y3QgaGVyZSwgc2lu Y2UgYSBkaWZmZXJlbnQgbW9kZWwgaXMgdXNlZCBlbHNld2hlcmUuCi0KLSAgTk8gTE9OR0VSIFVT RUQgYXMgb2YgQy1LZXJtaXQgOC4wIC0tIGl0IHR1cm5zIG91dCB0aGF0IHRoaXMgbWV0aG9kLAot ICBldmVuIHRob3VnaCBpdCBjb21waWxlcyBhbmQgZXhlY3V0ZXMgd2l0aG91dCBlcnJvciwgZG9l c24ndCBhY3R1YWxseQotICB3b3JrIChpLmUuIERUUiBkb2VzIG5vdCBkcm9wKSwgd2hlcmVhcyB0 aGUgVElPQ1NEVFIgbWV0aG9kIHdvcmtzIGp1c3QgZmluZSwKLSovCi0gICAgewotCXN0cnVjdCB0 ZXJtaW9zIHR0Y3VyOwotCWludCB4OwotCWRlYnVnKEYxMDAsInR0aGFuZyBIVVBfUE9TSVggc3R5 bGUiLCIiLDApOwotCXggPSB0Y2dldGF0dHIodHR5ZmQsICZ0dGN1cik7CS8qIEdldCBjdXJyZW50 IGF0dHJpYnV0ZXMgKi8KLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgdGNnZXRhdHRyIixja2l0b2EoZXJy bm8pLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQlzcGRzYXYgPSBjZmdldG9zcGVlZCgm dHRjdXIpOwkvKiBHZXQgY3VycmVudCBzcGVlZCAqLwotCWRlYnVnKEYxMTEsInR0aGFuZyBjZmdl dG9zcGVlZCIsY2tpdG9hKGVycm5vKSxzcGRzYXYpOwotCXNwZHNhdmkgPSBjZmdldGlzcGVlZCgm dHRjdXIpOwkvKiBHZXQgY3VycmVudCBzcGVlZCAqLwotCWRlYnVnKEYxMTEsInR0aGFuZyBjZmdl dGlzcGVlZCIsY2tpdG9hKGVycm5vKSxzcGRzYXZpKTsKLQl4ID0gY2ZzZXRvc3BlZWQoJnR0Y3Vy LEIwKTsJLyogUmVwbGFjZSBieSAwICovCi0JZGVidWcoRjExMSwidHRoYW5nIGNmc2V0b3NwZWVk Iixja2l0b2EoZXJybm8pLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQl4ID0gY2ZzZXRp c3BlZWQoJnR0Y3VyLEIwKTsKLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgY2ZzZXRpc3BlZWQiLGNraXRv YShlcnJubykseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCXggPSB0Y3NldGF0dHIodHR5 ZmQsVENTQURSQUlOLCZ0dGN1cik7Ci0JZGVidWcoRjExMSwidHRoYW5nIHRjc2V0YXR0ciBCMCIs Y2tpdG9hKGVycm5vKSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JbXNsZWVwKEhVUFRJ TUUpOwkJLyogU2xlZXAgMC41IHNlYyAqLwotCXggPSBjZnNldG9zcGVlZCgmdHRjdXIsc3Bkc2F2 KTsgLyogUmVzdG9yZSBwcmV2IHNwZWVkICovCi0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCWRl YnVnKEYxMTEsInR0aGFuZyBjZnNldG9zcGVlZCBwcmV2Iixja2l0b2EoZXJybm8pLHgpOwotCXgg PSBjZnNldGlzcGVlZCgmdHRjdXIsc3Bkc2F2aSk7Ci0JZGVidWcoRjExMSwidHRoYW5nIGNmc2V0 aXNwZWVkIHByZXYiLGNraXRvYShlcnJubykseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwot CXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0dGN1cik7Ci0JZGVidWcoRjExMSwidHRo YW5nIHRjc2V0YXR0ciByZXN0b3JlIixja2l0b2EoZXJybm8pLHgpOwotCWlmICh4IDwgMCkgcmV0 dXJuKC0xKTsKLQlyZXR1cm4oMSk7Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBCU0Q0NE9SUE9TSVgK LSNpZmRlZiBRTlgKLSAgICB7Ci0JaW50IHg7Ci0JeCA9IHRjZHJvcGxpbmUodHR5ZmQsNTAwKTsK LQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgUU5YIHRjZHJvcGxpbmUiLCIiLHgpOwotCXR0Y3VyLmNfY2Zs YWcgfD0gQ0xPQ0FMOwotCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0dGN1cik7Ci0J ZGVidWcoRjEwMSwidHRoYW5nIFFOWCB0Y3NldGF0dHIgcmVzdG9yZSIsIiIseCk7Ci0JaWYgKHgg PCAwKSB7Ci0JICAgIGRlYnVnKEYxMDEsInR0aGFuZyBRTlggdGNzZXRhdHRyIHJlc3RvcmUgZXJy bm8iLCIiLGVycm5vKTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0JLyogRml4IGZsYWdzIC0gZW5z dXJlIE9fTk9OQkxPQ0sgaXMgb2ZmICovCi0KLQllcnJubyA9IDA7Ci0JZGVidWcoRjEwMSwidHRo YW5nIFFOWCBpbmlmbGFncyIsIiIsaW5pZmxhZ3MpOwotCWlmIChmY250bCh0dHlmZCwgRl9TRVRG TCwgaW5pZmxhZ3MpID09IC0xKSB7Ci0JICAgIGRlYnVnKEYxMDEsInR0aGFuZyBRTlggRl9TRVRG TCBlcnJubyIsIiIsZXJybm8pOwotCSAgICByZXR1cm4oLTEpOwotCX0KLQlyZXR1cm4oeCk7Ci0g ICAgfQotI2Vsc2UgIC8qIFFOWCAqLwotICAgIHsKLQlpbnQgeDsKLSNpZmRlZiBVU0VfVElPQ1NE VFIKLQlkZWJ1ZyhGMTAwLCJ0dGhhbmcgQlNENDRPUlBPU0lYIFVTRV9USU9DU0RUUiIsIiIsMCk7 Ci0JZXJybm8gPSAwOwotCXggPSBpb2N0bCh0dHlmZCwgVElPQ0NEVFIsIE5VTEwpOwotCWRlYnVn KEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggaW9jdGwgVElPQ0NEVFIiLGNraXRvYShlcnJubyks eCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCW1zbGVlcChIVVBUSU1FKTsJCS8qIFNsZWVw IDAuNSBzZWMgKi8KLQllcnJubyA9IDA7Ci0JeCA9IGlvY3RsKHR0eWZkLCBUSU9DU0RUUiwgTlVM TCk7Ci0JZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCBpb2N0bCBUSU9DU0RUUiIsY2tp dG9hKGVycm5vKSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0jZWxzZSAgLyogVVNFX1RJ T0NTRFRSICovCi0KLSNpZmRlZiBIVVBfQ0xPU0VfUE9TSVgKLS8qCi0gIEluIE9TUjUgdmVyc2lv bnMgd2hlcmUgVElPQ1NEVFIgaXMgbm90IGRlZmluZWQgKHVwIHRvIGFuZCBpbmNsdWRpbmcgYXQK LSAgbGVhc3QgNS4wLjZhKSB0aGUgUE9TSVggQVBJcyBpbiB0aGUgIiNlbHNlIiBwYXJ0IGJlbG93 IGFyZSBhdmFpbGFibGUgYnV0Ci0gIGRvbid0IHdvcmssIGFuZCBubyBvdGhlciBBUElzIGFyZSBh dmFpbGFibGUgdGhhdCBkbyB3b3JrLiAgSW4gdGhpcyBjYXNlCi0gIHdlIGhhdmUgdG8gZHJvcCBE VFIgYnkgYnJ1dGUgZm9yY2U6IGNsb3NlIGFuZCByZW9wZW4gdGhlIHBvcnQuICBUaGlzCi0gIGNv ZGUgYWN0dWFsbHkgd29ya3MsIGJ1dCBhbGwgdGhlIHN0ZXBzIGFyZSBjcnVjaWFsOiBzZXR0aW5n IENMT0NBTCwgdGhlCi0gIE9fTkRFTEFZIG1hbmlwdWxhdGlvbnMsIGV0Yy4KLSovCi0JZGVidWco RjEwMCwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBjbG9zZS9vcGVuIiwiIiwwKTsKLQlkZWJ1ZyhG MTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIE9fTk9OQkxPQ0siLCIiLE9fTk9OQkxPQ0spOwot CWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggT19OREVMQVkiLCIiLE9fTkRFTEFZ KTsKLQllcnJubyA9IDA7Ci0JeCA9IHRjZ2V0YXR0cih0dHlmZCwgJnR0Y3VyKTsJLyogR2V0IGN1 cnJlbnQgYXR0cmlidXRlcyAqLwotCWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVgg dGNnZXRhdHRyIiwiIix4KTsKLQlpZiAoeCA8IDApIHsKLQkgICAgZGVidWcoRjEwMSwidHRoYW5n IEhVUF9DTE9TRV9QT1NJWCB0Y2dldGF0dHIgZXJybm8iLCIiLGVycm5vKTsKLQkgICAgcmV0dXJu KC0xKTsKLQl9Ci0JZXJybm8gPSAwOwotCi0JeCA9IGNsb3NlKHR0eWZkKTsJCS8qIENsb3NlIHdp dGhvdXQgcmVsZWFzaW5nIGxvY2sgKi8KLQlpZiAoeCA8IDApIHsKLQkgICAgZGVidWcoRjEwMSwi dHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBjbG9zZSBlcnJubyIsIiIsZXJybm8pOwotCSAgICByZXR1 cm4oLTEpOwotCX0KLQllcnJubyA9IDA7Ci0JeCA9IG1zbGVlcCg1MDApOwkJLyogUGF1c2UgaGFs ZiBhIHNlY29uZCAqLwotCWlmICh4IDwgMCkgewkJCS8qIE9yIGlmIHRoYXQgZG9lc24ndCB3b3Jr LCAxIHNlYyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIG1zbGVl cCBlcnJubyIsIiIsZXJybm8pOwotCSAgICBzbGVlcCgxKTsKLQl9Ci0JZXJybm8gPSAwOwotCXR0 eWZkID0gcHJpdl9vcG4odHRubXN2LCAoT19SRFdSfE9fTkRFTEFZKSk7IC8qIFJlb3BlbiB0aGUg ZGV2aWNlICovCi0JZGVidWcoRjExMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCByZW9wZW4iLHR0 bm1zdix0dHlmZCk7Ci0JaWYgKHR0eWZkIDwgMCkgewotCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcg SFVQX0NMT1NFX1BPU0lYIHJlb3BlbiBlcnJubyIsIiIsZXJybm8pOwotCSAgICByZXR1cm4oLTEp OwotCX0KLQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIHJlLXR0b3BlbiB0dHlm ZCIsIiIsdHR5ZmQpOwotCi0JLyogUmVzdG9yZSBwcmV2aW91cyBhdHRyaWJ1dGVzICovCi0KLQll cnJubyA9IDA7Ci0JdHZ0ZmxnID0gMDsKLQl0dGN1ci5jX2NmbGFnIHw9IENMT0NBTDsKLQl4ID0g dGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOwotCWRlYnVnKEYxMDEsInR0aGFuZyBI VVBfQ0xPU0VfUE9TSVggdGNzZXRhdHRyIHJlc3RvcmUiLCIiLHgpOwotCWlmICh4IDwgMCkgewot CSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIHRjc2V0YXR0ciByZXN0b3Jl IGVycm5vIiwKLQkJICAiIixlcnJubyk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotCS8qIEZpeCBm bGFncyAtIGVuc3VyZSBPX05ERUxBWSBhbmQgT19OT05CTE9DSyBhcmUgb2ZmICovCi0KLQllcnJu byA9IDA7Ci0gICAgICAgIGlmICgoeCA9IGZjbnRsKHR0eWZkLCBGX0dFVEZMLCAwKSkgPT0gLTEp IHsKLQkgICAgZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBGX0dFVEZMIGVycm5v IiwiIixlcnJubyk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotCWRlYnVnKEYxMDEsInR0aGFuZyBI VVBfQ0xPU0VfUE9TSVggZmxhZ3MiLCIiLHgpOwotCWVycm5vID0gMDsKLSAgICAgICAgeCAmPSB+ KE9fTk9OQkxPQ0t8T19OREVMQVkpOwotCWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9T SVggZmxhZ3MgdG8gc2V0IiwiIix4KTsKLQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BP U0lYIGluaWZsYWdzIiwiIixpbmlmbGFncyk7Ci0JaWYgKGZjbnRsKHR0eWZkLCBGX1NFVEZMLCB4 KSA9PSAtMSkgewotCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIEZfU0VU RkwgZXJybm8iLCIiLGVycm5vKTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0jaWZkZWYgREVCVUcK LQlpZiAoZGVibG9nKSB7Ci0JICAgIGlmICgoeCA9IGZjbnRsKHR0eWZkLCBGX0dFVEZMLCAwKSkg PiAtMSkgewotCQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIGZsYWdzIiwiIix4 KTsKLQkJZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBmbGFncyAmIE9fTk9OQkxP Q0siLAotCQkgICAgICAiIix4Jk9fTk9OQkxPQ0spOwotCQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQ X0NMT1NFX1BPU0lYIGZsYWdzICYgT19OREVMQVkiLAotCQkgICAgICAiIix4Jk9fTkRFTEFZKTsK LQkgICAgfQotCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0jZWxzZSAgLyogSFVQX0NMT1NFX1BP U0lYICovCi0JCi0JLyogR2VuZXJhbCBCU0Q0NE9SUE9TSVggY2FzZSAoTGludXgsIEJTREksIEZy ZWVCU0QsIGV0YykgKi8KLQotCWRlYnVnKEYxMDAsInR0aGFuZyBCU0Q0NE9SUE9TSVggQjAiLCIi LDApOwotCXggPSB0Y2dldGF0dHIodHR5ZmQsICZ0dGN1cik7CS8qIEdldCBjdXJyZW50IGF0dHJp YnV0ZXMgKi8KLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIHRjZ2V0YXR0ciIsY2tp dG9hKGVycm5vKSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0Jc3Bkc2F2ID0gY2ZnZXRv c3BlZWQoJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KLQlkZWJ1ZyhGMTExLCJ0dGhh bmcgQlNENDRPUlBPU0lYIGNmZ2V0b3NwZWVkIixja2l0b2EoZXJybm8pLHNwZHNhdik7Ci0Jc3Bk c2F2aSA9IGNmZ2V0aXNwZWVkKCZ0dGN1cik7CS8qIEdldCBjdXJyZW50IHNwZWVkICovCi0JZGVi dWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCBjZmdldGlzcGVlZCIsY2tpdG9hKGVycm5vKSxz cGRzYXZpKTsKLQl4ID0gY2ZzZXRvc3BlZWQoJnR0Y3VyLEIwKTsJLyogUmVwbGFjZSBieSAwICov Ci0JZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCBjZnNldG9zcGVlZCIsY2tpdG9hKGVy cm5vKSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JeCA9IGNmc2V0aXNwZWVkKCZ0dGN1 cixCMCk7Ci0JZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCBjZnNldGlzcGVlZCIsY2tp dG9hKGVycm5vKSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JLyogVGhpcyBnZXRzIEVJ TlZBTCBvbiBOZXRCU0QgMS40LjEgYmVjYXVzZSBvZiBCMC4uLiAqLwotCXggPSB0Y3NldGF0dHIo dHR5ZmQsVENTQURSQUlOLCZ0dGN1cik7Ci0JZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJ WCB0Y3NldGF0dHIgQjAiLGNraXRvYShlcnJubykseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEp OwotCW1zbGVlcChIVVBUSU1FKTsJCS8qIFNsZWVwIDAuNSBzZWMgKi8KLQlkZWJ1ZyhGMTAxLCJ0 dGhhbmcgQlNENDRPUlBPU0lYIHJlc3RvcmUgb3V0cHV0IHNwZWVkIiwiIixzcGRzYXYpOwotCXgg PSBjZnNldG9zcGVlZCgmdHRjdXIsc3Bkc2F2KTsgLyogUmVzdG9yZSBwcmV2IHNwZWVkICovCi0J ZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCBjZnNldG9zcGVlZCBwcmV2Iixja2l0b2Eo ZXJybm8pLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQlkZWJ1ZyhGMTAxLCJ0dGhhbmcg QlNENDRPUlBPU0lYIHJlc3RvcmUgaW5wdXQgc3BlZWQiLCIiLHNwZHNhdmkpOwotCXggPSBjZnNl dGlzcGVlZCgmdHRjdXIsc3Bkc2F2aSk7Ci0JZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJ WCBjZnNldGlzcGVlZCBwcmV2Iixja2l0b2EoZXJybm8pLHgpOwotCWlmICh4IDwgMCkgcmV0dXJu KC0xKTsKLQl0dGN1ci5jX2NmbGFnIHw9IENMT0NBTDsJLyogRG9uJ3QgZXhwZWN0IENEIGFmdGVy IGhhbmd1cCAqLwotCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0dGN1cik7Ci0JZGVi dWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCB0Y3NldGF0dHIgcmVzdG9yZSIsY2tpdG9hKGVy cm5vKSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0KLSNlbmRpZiAvKiBIVVBfQ0xPU0Vf UE9TSVggKi8KLSNlbmRpZiAvKiBVU0VfVElPQ1NEVFIgKi8KLQotCXJldHVybigxKTsKLSAgICB9 Ci0KLSNlbmRpZiAvKiBRTlggKi8KLSNlbHNlIC8qIEJTRDQ0T1JQT1NJWCAqLwotCi0jaWZkZWYg YWVnaXMJCQkJLyogQXBvbGxvIEFlZ2lzICovCi0gICAgc2lvXyRjb250cm9sKChzaG9ydCl0dHlm ZCwgc2lvXyRkdHIsIGZhbHNlLCBzdCk7ICAgIC8qIERUUiBkb3duICovCi0gICAgbXNsZWVwKEhV UFRJTUUpOwkJCQkJLyogcGF1c2UgKi8KLSAgICBzaW9fJGNvbnRyb2woKHNob3J0KXR0eWZkLCBz aW9fJGR0ciwgdHJ1ZSwgIHN0KTsgICAgLyogRFRSIHVwICovCi0gICAgcmV0dXJuKDEpOwotI2Vu ZGlmIC8qIGFlZ2lzICovCi0KLSNpZmRlZiBBTllCU0QJCQkJLyogQW55IEJTRCB2ZXJzaW9uLiAq LwotI2lmZGVmIFRJT0NDRFRSCQkJCS8qIEV4Y2VwdCB0aG9zZSB0aGF0IGRvbid0IGhhdmUgdGhp cyAqLwotICAgIGRlYnVnKEYxMDAsInR0aGFuZyBCU0Qgc3R5bGUiLCIiLDApOwotICAgIGlmIChp b2N0bCh0dHlmZCxUSU9DQ0RUUiwwKSA8IDApIHsJLyogQ2xlYXIgRFRSLiAqLwotCWRlYnVnKEYx MDEsInR0aGFuZyBUSU9DQ0RUUiBmYWlscyIsIiIsZXJybm8pOwotCXJldHVybigtMSk7Ci0gICAg fQotICAgIG1zbGVlcChIVVBUSU1FKTsJCQkvKiBGb3IgYWJvdXQgMS8yIHNlYyAqLwotICAgIGVy cm5vID0gMDsKLSAgICB4ID0gaW9jdGwodHR5ZmQsVElPQ1NEVFIsMCk7CS8qIFJlc3RvcmUgRFRS ICovCi0gICAgaWYgKHggPCAwKSB7Ci0JLyoKLQkgIEZvciBzb21lIHJlYXNvbiwgdGhpcyB0ZW5k cyB0byBmYWlsIHdpdGggIm5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MiCi0JICBidXQgdGhlIG9w ZXJhdGlvbiBzdGlsbCB3b3JrcywgcHJvYmFibHkgYmVjYXVzZSBvZiB0aGUgY2xvc2Uvb3Blbgot CSAgbGF0ZXIgb24uICBTbyBsZXQncyBub3Qgc2NhcmUgdGhlIHVzZXIgdW5uZWNlc3NhcmlseSBo ZXJlLgotCSovCi0JZGVidWcoRjEwMSwidHRoYW5nIFRJT0NTRFRSIGVycm5vIiwiIixlcnJubyk7 IC8qIExvZyB0aGUgZXJyb3IgKi8KLQl4ID0gMTsJCQkJLyogUHJldGVuZCB3ZSBzdWNjZWVkZWQg Ki8KLSAgICB9IGVsc2UgaWYgKHggPT0gMCkgeCA9IDE7CQkvKiBTdWNjZXNzICovCi0jaWZkZWYg Q09NTUVOVAotI2lmZGVmIEZUMjEKLSAgICBpb2N0bCh0dHlmZCwgVElPQ1NBVkVNT0RFUywgMCk7 Ci0gICAgaW9jdGwodHR5ZmQsIFRJT0NIUENMLCAwKTsKLSAgICBjbG9zZSh0dHlmZCk7CQkJLyog WWVzLCBtdXN0IGRvIHRoaXMgdHdpY2UgKi8KLSAgICBpZiAoKHR0eWZkID0gb3Blbih0dG5tc3Ys MikpIDwgMCkJLyogb24gRm9ydHVuZSBjb21wdXRlcnMuLi4gKi8KLSAgICAgIHJldHVybigtMSk7 CQkJLyogKGJ1dCB3aHk/KSAqLwotICAgIGVsc2UgeCA9IDE7Ci0jZW5kaWYgLyogRlQyMSAqLwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBUSU9DQ0RUUiAqLwotICAgIGNsb3NlKGRv X29wZW4odHRubXN2KSk7CQkvKiBDbGVhciBpL28gZXJyb3IgY29uZGl0aW9uICovCi0gICAgZXJy bm8gPSAwOwotI2lmZGVmIENPTU1FTlQKLS8qIFRoaXMgaXMgZGVmaW5pdGVseSBkYW5nZXJvdXMu ICBXaHkgd2FzIGl0IGhlcmU/ICovCi0gICAgeiA9IHR0dnQodHRzcGVlZCx0dGZsb3cpOwkJLyog UmVzdG9yZSBtb2Rlcy4gKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgdHR2dCByZXR1cm5zIiwi Iix6KTsKLSAgICByZXR1cm4oeiA8IDAgPyAtMSA6IDEpOwotI2Vsc2UKLSAgICByZXR1cm4oeCk7 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIEFOWUJTRCAqLwotCi0jaWZkZWYgQVRU U1YKLS8qIEFUJlQgVU5JWCBzZWN0aW9uLCBpbmNsdWRlcyBIUC1VWCBhbmQgZ2VuZXJpYyBBVCZU IFN5c3RlbSBJSUkvVi4uLiAqLwotCi0jaWZkZWYgSFBVWAotLyogSGV3bGV0dCBQYWNrYXJkIGFs bG93cyBleHBsaWNpdCBtYW5pcHVsYXRpb24gb2YgbW9kZW0gc2lnbmFscy4gKi8KLQotI2lmZGVm IENPTU1FTlQKLS8qIE9sZCB3YXkuLi4gKi8KLSAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAtVVgg c3R5bGUiLCIiLDApOwotICAgIGlmIChpb2N0bCh0dHlmZCxNQ1NFVEFGLCZkdHJfZG93bikgPCAw KSAgICAgICAgLyogbG93ZXIgRFRSICovCi0gICAgICByZXR1cm4oLTEpOwkJICAgIAkgICAgICAg ICAgIC8qIG9vcHMsIGNhbid0LiAqLwotICAgIG1zbGVlcChIVVBUSU1FKTsJCQkgICAgICAgICAg IC8qIFBhdXNlIGhhbGYgYSBzZWNvbmQuICovCi0gICAgeCA9IDE7CQkJCSAgICAgICAgICAgLyog U2V0IHJldHVybiBjb2RlICovCi0gICAgaWYgKGlvY3RsKHR0eWZkLE1DR0VUQSwmbW9kZW1fcnRu KSA+IC0xKSB7ICAgICAvKiBHZXQgbGluZSBzdGF0dXMuICovCi0JaWYgKChtb2RlbV9ydG4gJiBN RENEKSAhPSAwKSAgICAgIAkgICAvKiBDaGVjayBpZiBDRCBpcyBsb3cuICovCi0JICB4ID0gLTE7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENEIGRpZG4ndCBkcm9wLCBmYWls LiAqLwotICAgIH0gZWxzZSB4ID0gLTE7Ci0KLSAgICAvKiBFdmVuIGlmIGFib3ZlIGNhbGxzIGZh aWwsIFJUUyAmIERUUiBzaG91bGQgYmUgdHVybmVkIGJhY2sgb24uICovCi0gICAgbW9kZW1fcnRu ID0gTVJUUyB8IE1EVFI7Ci0gICAgaWYgKGlvY3RsKHR0eWZkLE1DU0VUQUYsJm1vZGVtX3J0bikg PCAwKSB4ID0gLTE7Ci0gICAgcmV0dXJuKHgpOwotI2Vsc2UKLS8qIE5ldyB3YXksIGZyb20gSGVs bG11dGggTWljaGFlbGlzICovCi0gICAgZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYIHN0eWxlLCBI UFVYREVCVUciLCIiLDApOwotICAgIGlmIChpb2N0bCh0dHlmZCxNQ0dFVEEsJm1vZGVtX3J0bikg PT0gLTEpIHsgLyogR2V0IGN1cnJlbnQgc3RhdHVzLiAqLwotCWRlYnVnKEYxMDAsInR0aGFuZyBI UC1VWDogY2FuJ3QgZ2V0IG1vZGVtIGxpbmVzLCBOTyBIQU5HVVAhIiwiIiwwKTsKLQlyZXR1cm4o LTEpOwotICAgIH0KLSAgICBzcHJpbnRmKG1vZGVtX3N0YXRlLCIlI2x4Iixtb2RlbV9ydG4pOwot ICAgIGRlYnVnKEYxMTAsInR0aGFuZyBIUC1VWDogbW9kZW0gbGluZXMgPSAiLG1vZGVtX3N0YXRl LDApOwotICAgIG1vZGVtX3NhdiA9IG1vZGVtX3J0bjsJCS8qIFNhdmUgY3VycmVudCBtb2RlbSBz aWduYWxzICovCi0gICAgbW9kZW1fcnRuICY9IH5NRFRSOwkJCS8qIFR1cm4gRFRSIGJpdCBvZmYg Ki8KLSAgICBzcHJpbnRmKG1vZGVtX3N0YXRlLCIlI2x4Iixtb2RlbV9ydG4pOwotICAgIGRlYnVn KEYxMTAsInR0aGFuZyBIUC1VWDogRFRSIGRvd24gPSAiLG1vZGVtX3N0YXRlLDApOwotICAgIGlm IChpb2N0bCh0dHlmZCxNQ1NFVEFGLCZtb2RlbV9ydG4pIDwgMCkgeyAvKiBsb3dlciBEVFIgKi8K LQlkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAtVVg6IGNhbid0IGxvd2VyIERUUiEiLCIiLDApOwotCXJl dHVybigtMSk7CQkJLyogb29wcywgY2FuJ3QuICovCi0gICAgfQotICAgIG1zbGVlcChIVVBUSU1F KTsJCQkvKiBQYXVzZSBoYWxmIGEgc2Vjb25kLiAqLwotICAgIHggPSAxOwkJCQkvKiBTZXQgcmV0 dXJuIGNvZGUgKi8KLSAgICBpZiAoaW9jdGwodHR5ZmQsTUNHRVRBLCZtb2RlbV9ydG4pID4gLTEp IHsgLyogR2V0IGxpbmUgc3RhdHVzLiAqLwotCXNwcmludGYobW9kZW1fc3RhdGUsIiUjbHgiLG1v ZGVtX3J0bik7Ci0JZGVidWcoRjExMCwidHRoYW5nIEhQLVVYOiBtb2RlbSBsaW5lcyBnb3QgPSAi LG1vZGVtX3N0YXRlLDApOwotCWlmICgobW9kZW1fcnRuICYgTURDRCkgIT0gMCkgewkvKiBDaGVj ayBpZiBDRCBpcyBsb3cuICovCi0JICAgIGRlYnVnKEYxMDAsInR0aGFuZyBIUC1VWDogRENEIG5v dCBkb3duIiwiIiwwKTsKLQkgICAgeCA9IC0xOwkJCS8qIENEIGRpZG4ndCBkcm9wLCBmYWlsLiAq LwotCX0gZWxzZSB7Ci0JICAgIGRlYnVnKEYxMDAsInR0aGFuZyBIUC1VWDogRENEIGRvd24iLCIi LDApOwotCX0KLSAgICB9IGVsc2UgewotCXggPSAtMTsKLQlkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAt VVg6IGNhbid0IGdldCBEQ0Qgc3RhdHVzICEiLCIiLDApOwotICAgIH0KLQotICAgIC8qIEV2ZW4g aWYgYWJvdmUgY2FsbHMgZmFpbCwgRFRSIHNob3VsZCBiZSB0dXJuZWQgYmFjayBvbi4gKi8KLQot ICAgIG1vZGVtX3NhdiB8PSBNRFRSOwotICAgIGlmIChpb2N0bCh0dHlmZCxNQ1NFVEFGLCZtb2Rl bV9zYXYpIDwgMCkgewotCXggPSAtMTsKLQlkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAtVVg6IGNhbid0 IHNldCBzYXZlZCBzdGF0ZSIsIiIsMCk7Ci0gICAgfSBlbHNlIHsKLQlzcHJpbnRmKG1vZGVtX3N0 YXRlLCIlI2x4Iixtb2RlbV9zYXYpOwotCWRlYnVnKEYxMTAsInR0aGFuZyBIUC1VWDogZmluYWwg bW9kZW0gbGluZXMgPSAiLG1vZGVtX3N0YXRlLDApOwotICAgIH0KLSAgICByZXR1cm4oeCk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jZWxzZSAvKiBBVCZUIGJ1dCBub3QgSFAtVVggKi8KLQot LyogU1ZJRCBmb3IgQVQmVCBTeXN0ZW0gViBSMyBkZWZpbmVzIGlvY3RsJ3MgZm9yIGhhbmRsaW5n IG1vZGVtIHNpZ25hbHMuICovCi0vKiBJdCBpcyBub3Qga25vd24gaG93IG1hbnksIGlmIGFueSwg c3lzdGVtcyBhY3R1YWxseSBpbXBsZW1lbnQgdGhlbSwgKi8KLS8qIHNvIHdlIGluY2x1ZGUgdGhl bSBoZXJlIGluIGlmZGVmJ3MuICovCi0KLS8qCi0gIFVuaXh3YXJlIGhhcyB0aGUgVElPQ014eHgg c3ltYm9scyBkZWZpbmVkLCBidXQgY2FsbGluZyBpb2N0bCgpIHdpdGggdGhlbQotICBnaXZlcyBl cnJvciAyMiAoaW52YWxpZCBhcmd1bWVudCkuCi0qLwotI2lmbmRlZiBfSUJNUjIKLS8qCi0gIE5v IG1vZGVtLXNpZ25hbCB0d2lkZGxpbmcgZm9yIElCTSBSVCBQQyBvciBSUy82MDAwLgotICBJbiBB SVggMy4xIGFuZCBlYXJsaWVyLCB0aGUgaW9jdGwoKSBjYWxsIGlzIGJyb2tlbi4KLSAgVGhpcyBj b2RlIGNvdWxkIGJlIGFjdGl2YXRlZCBmb3IgQUlYIDMuMSB3aXRoIFBURiAyMDA2IG9yIGxhdGVy Ci0gIChlLmcuIEFJWCAzLjIpLCBidXQgY2xvc2Uvb3BlbiBkb2VzIHRoZSBqb2IgdG9vLCBzbyB3 aHkgYm90aGVyLgotKi8KLSNpZmRlZiBUSU9DTUJJUwkJCQkvKiBCaXQgU2V0ICovCi0jaWZkZWYg VElPQ01CSUMJCQkJLyogQml0IENsZWFyICovCi0jaWZkZWYgVElPQ01fRFRSCQkJLyogRFRSICov Ci0KLS8qIENsZWFyIERUUiwgc2xlZXAgMzAwIG1zZWMsIHR1cm4gaXQgYmFjayBvbi4gKi8KLS8q IElmIGFueSBvZiB0aGUgaW9jdGwncyByZXR1cm4gZmFpbHVyZSwgZ28gb24gdG8gdGhlIG5leHQg c2VjdGlvbi4gKi8KLQotICAgIHogPSBUSU9DTV9EVFI7CQkJLyogQ29kZSBmb3IgRFRSLiAqLwot I2lmZGVmIENPTU1FTlQKLS8qCi0gIFRoaXMgd2FzIHRoZSBjYXVzZSBvZiB0aGUgdHJvdWJsZXMg d2l0aCB0aGUgU29sYXJpcyBQb3J0IE1vbml0b3IuCi0gIFRoZSBwcm9ibGVtIGlzOiBSVFMgbmV2 ZXIgY29tZXMgYmFjayBvbi4gIE1vcmFsOiBEb24ndCBkbyBpdCEKLSAgKEJ1dCB3aHkgZG9lc24n dCBpdCBjb21lIGJhY2sgb24/ICBTZWUgdGhlIFRJT0NNQklTIGNhbGwuLi4pCi0qLwotI2lmZGVm IFRJT0NNX1JUUwkJCS8qIExvd2VyIFJUUyB0b28gaWYgc3ltYm9sIGlzIGtub3duLiAqLwotICAg IHogfD0gVElPQ01fUlRTOwotI2VuZGlmIC8qIFRJT0NNX1JUUyAqLwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQotICAgIGRlYnVnKEYxMDEsInR0aGFuZyBUSU9DTSBzaWduYWwgbWFzayIsIiIseik7 Ci0gICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NNQklDLCZ6KSA+IC0xKSB7ICAgLyogVHJ5IHRvIGxv d2VyIERUUi4gKi8KLQlkZWJ1ZyhGMTAwLCJ0dGhhbmcgVElPQ01CSUMgb2siLCIiLDApOwotCW1z bGVlcChIVVBUSU1FKTsJCSAgIC8qIFBhdXNlIGhhbGYgYSBzZWNvbmQuICovCi0JaWYgKGlvY3Rs KHR0eWZkLFRJT0NNQklTLCZ6KSA+IC0xKSB7IC8qIFRyeSB0byB0dXJuIGl0IGJhY2sgb24uICov Ci0JICAgIGRlYnVnKEYxMDAsInR0aGFuZyBUSU9DTUJJUyBvayIsIiIsMCk7Ci0jaWZuZGVmIENM U09QTgotCSAgICByZXR1cm4oMSk7CQkJLyogU3VjY2VzcywgZG9uZS4gKi8KLSNlbmRpZiAvKiBD TFNPUE4gKi8KLQl9IGVsc2UgewkJCS8qIENvdWxkbid0IHJhaXNlLCBjb250aW51ZS4gKi8KLQkg ICAgZGVidWcoRjEwMSwidHRoYW5nIFRJT0NNQklTIGVycm5vIiwiIixlcnJubyk7Ci0JfQotICAg IH0gZWxzZSB7CQkJCS8qIENvdWxkbid0IGxvd2VyLCBjb250aW51ZS4gKi8KLSAJZGVidWcoRjEw MSwidHRoYW5nIFRJT0NNQklDIGVycm5vIiwiIixlcnJubyk7Ci0gICAgfQotI2VuZGlmIC8qIFRJ T0NNX0RUUiAqLwotI2VuZGlmIC8qIFRJT0NNQklDICovCi0jZW5kaWYgLyogVElPQ01CSVMgKi8K LSNlbmRpZiAvKiBfSUJNUjIgKi8KLQotLyoKLSAgR2VuZXJhbCBBVCZUIFVOSVggY2FzZSwgbm90 IEhQVVguICBUaGUgZm9sbG93aW5nIGNvZGUgaXMgaGlnaGx5IHN1c3BlY3QuICBObwotICB0d28g QVQmVC1iYXNlZCBzeXN0ZW1zIHNlZW0gdG8gZG8gdGhpcyB0aGUgc2FtZSB3YXkuICBUaGUgb2Jq ZWN0IGlzIHNpbXBseQotICB0byB0dXJuIG9mZiBEVFIgYW5kIHRoZW4gdHVybiBpdCBiYWNrIG9u LiAgU1ZJRCBzYXlzIHRoZSB1bml2ZXJzYWwgbWV0aG9kCi0gIGZvciB0dXJuaW5nIG9mZiBEVFIg aXMgdG8gc2V0IHRoZSBzcGVlZCB0byB6ZXJvLCBhbmQgdGhpcyBkb2VzIHNlZW0gdG8gZG8KLSAg dGhlIHRyaWNrIGluIGFsbCBjYXNlcy4gIEJ1dCBuZWl0aGVyIFNWSUQgbm9yIGFueSBrbm93biBt YW4gcGFnZXMgc2F5IGhvdyB0bwotICB0dXJuIERUUiBiYWNrIG9uIGFnYWluLiAgU29tZSB2YXJp YW50cywgbGlrZSBtb3N0IFhlbml4IGltcGxlbWVudGF0aW9ucywKLSAgcmFpc2UgRFRSIGFnYWlu IHdoZW4gdGhlIHNwZWVkIGlzIHJlc3RvcmVkIHRvIGEgbm9uemVybyB2YWx1ZS4gIE90aGVycwot ICByZXF1aXJlIHRoZSBkZXZpY2UgdG8gYmUgY2xvc2VkIGFuZCBvcGVuZWQgYWdhaW4sIGJ1dCB0 aGlzIGlzIHJpc2t5IGJlY2F1c2UKLSAgZ2V0dHkgY291bGQgc2VpemUgdGhlIGRldmljZSBkdXJp bmcgdGhlIGluc3RhbnQgaXQgaXMgY2xvc2VkLgotKi8KLQotLyogUmV0dXJuIGNvZGUgZm9yIGlv Y3RsIGZhaWx1cmVzLi4uICovCi0jaWZkZWYgQVRUNjMwMAotICAgIHggPSAxOwkJCQkvKiBBVFQ2 MzAwIGRvZXNuJ3Qgd2FudCB0byBmYWlsLi4uICovCi0jZWxzZQotICAgIHggPSAtMTsKLSNlbmRp ZiAvKiBBVFQ2MzAwICovCi0KLSAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgZ2V0IHNldHRpbmdzIiwi IiwwKTsKLSAgICBpZiAoaW9jdGwodHR5ZmQsVENHRVRBLCZ0dGN1cikgPCAwKSAvKiBHZXQgY3Vy cmVudCBzZXR0aW5ncy4gKi8KLSAgICAgIHJldHVybih4KTsJCQkvKiBGYWlsIGlmIHRoaXMgZG9l c24ndCB3b3JrLiAqLwotICAgIGlmICgoZmxhZ3MgPSBmY250bCh0dHlmZCxGX0dFVEZMLDApKSA8 IDApIC8qIEdldCBkZXZpY2UgZmxhZ3MuICovCi0gICAgICByZXR1cm4oeCk7Ci0gICAgdHRjX3Nh dmUgPSB0dGN1ci5jX2NmbGFnOwkJLyogUmVtZW1iZXIgY3VycmVudCBzcGVlZC4gKi8KLSAgICBz cGRzYXYgPSB0dGNfc2F2ZSAmIENCQVVEOwotICAgIGRlYnVnKEYxMDEsInR0aGFuZyBzcGVlZCIs IiIsc3Bkc2F2KTsKLQotI2lmZGVmIE9fTkRFTEFZCi0gICAgZGVidWcoRjEwMCwidHRoYW5nIHR1 cm5pbmcgT19OREVMQVkgb24iLCIiLDApOwotICAgIGZjbnRsKHR0eWZkLCBGX1NFVEZMLCBmbGFn cyB8IE9fTkRFTEFZKTsgLyogQWN0aXZhdGUgT19OREVMQVkgKi8KLSNlbmRpZiAvKiBPX05ERUxB WSAqLwotCi0jaWZkZWYgQVRUNzMwMCAvKiBUaGlzIGlzIHRoZSB3YXkgaXQgaXMgU1VQUE9TRUQg dG8gd29yayAqLwotICAgIHR0Y3VyLmNfY2ZsYWcgJj0gfkNCQVVEOwkJLyogQ2hhbmdlIHRoZSBz cGVlZCB0byB6ZXJvLiAgKi8KLSNlbHNlCi0jaWZkZWYgUlRBSVgKLSAgICB0dGN1ci5jX2NmbGFn ICY9IH5DQkFVRDsJCS8qIENoYW5nZSB0aGUgc3BlZWQgdG8gemVyby4gICovCi0jZWxzZSAgICAg ICAgICAvKiBUaGlzIHdheSByZWFsbHkgd29ya3MgYnV0IG1heSBiZSBkYW5nZXJvdXMgKi8KLSNp ZmRlZiB1M2IyCi0gICAgdHRjdXIuY19jZmxhZyA9IH4oQ0JBVUR8Q0xPQ0FMKTsJLyogU3BlY2lh bCBmb3IgQVQmVCAzQjJzICovCi0JCQkJCS8qIChDTE9DQUwgbXVzdCBiZSBPRkYpICovCi0jZWxz ZQotI2lmZGVmIFNDTzNSMgkJCQkvKiBTQ08gVU5JWCAzLjIgKi8KLS8qCi0gIFRoaXMgaXMgY29t cGxldGUgbm9uc2Vuc2UsIGJ1dCBhbiBTQ08gdXNlciBjbGFpbWVkIHRoaXMgY2hhbmdlIG1hZGUK LSAgaGFuZ2luZyB1cCB3b3JrLiAgQ29tbWVudHMgZnJvbSBvdGhlciBTQ08gVU5JWCAzLjIgdXNl cnMgd291bGQgYmUKLSAgYXBwcmVjaWF0ZWQuCi0qLwotICAgIHR0Y3VyLmNfY2ZsYWcgPSBDQkFV RHxCMDsKLSNlbHNlCi0jaWZkZWYgQUlYUlMJCQkJLyogQUlYIG9uIFJTLzYwMDAgKi8KLS8qCi0g IENhbid0IHNldCBzcGVlZCB0byB6ZXJvIG9uIEFJWCAzLjEgb24gUlMvNjAwMCA2NC1wb3J0IGFk YXB0ZXIsCi0gIGV2ZW4gdGhvdWdoIHlvdSBjYW4gZG8gaXQgb24gdGhlIGJ1aWx0LWluIHBvcnQg YW5kIHRoZSA4LSBhbmQgMTYtcG9ydAotICBhZGFwdGVycy4gIChVbnRlc3RlZCBvbiAxMjgtcG9y dCBhZGFwdGVyLikKLSovCi0gICAgdHRjdXIuY19jZmxhZyA9IENMT0NBTHxIVVBDTHxzcGRzYXY7 IC8qIFNwZWVkIDAgY2F1c2VzIEVJTlZBTCAqLwotI2Vsc2UJCQkJCS8qIE5vbmUgb2YgdGhlIGFi b3ZlICovCi0vKgotICBTZXQgZXZlcnl0aGluZywgaW5jbHVkaW5nIHRoZSBzcGVlZCwgdG8gemVy bywgZXhjZXB0IGZvciB0aGUgQ0xPQ0FMCi0gIGFuZCBIVVBDTCBiaXRzLgotKi8KLSAgICB0dGN1 ci5jX2NmbGFnID0gQ0xPQ0FMfEhVUENMOwotI2VuZGlmIC8qIEFJWFJTICovCi0jZW5kaWYgLyog U0NPM1IyICovCi0jZW5kaWYgLyogdTNiMiAqLwotI2VuZGlmIC8qIFJUQUlYICovCi0jZW5kaWYg LyogQVRUNzMwMCAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgIC8qIGFuZCBpZiBub25lIG9mIHRo b3NlIHdvcmssIHRyeSBvbmUgb2YgdGhlc2UuLi4gKi8KLSAgICB0dGN1ci5jX2NmbGFnID0gMDsK LSAgICB0dGN1ci5jX2NmbGFnID0gQ0xPQ0FMOwotICAgIHR0Y3VyLmNfY2ZsYWcgJj0gfihDQkFV RHxIVVBDTCk7Ci0gICAgdHRjdXIuY19jZmxhZyAmPSB+KENCQVVEfENSRUFEKTsKLSAgICB0dGN1 ci5jX2NmbGFnICY9IH4oQ0JBVUR8Q1JFQUR8SFVQQ0wpOwotICAgIC8qIG9yIG90aGVyIGNvbWJp bmF0aW9ucyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIFRDWE9OQwotICAgIGRl YnVnKEYxMDAsInR0aGFuZyBUQ1hPTkMiLCIiLDApOwotICAgIGlmIChpb2N0bCh0dHlmZCwgVENY T05DLCAxKSA8IDApIHsKLQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgVENYT05DIGZhaWxlZCIsIiIsZXJy bm8pOwotICAgIH0KLSNlbmRpZiAvKiBUQ1hPTkMgKi8KLQotI2lmZGVmIFRJT0NTVEFSVAotICAg IGRlYnVnKEYxMDAsInR0aGFuZyBUSU9DU1RBUlQiLCIiLDApOwotICAgIGlmIChpb2N0bCh0dHlm ZCwgVElPQ1NUQVJULCAwKSA8IDApIHsKLQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgVElPQ1NUQVJUIGZh aWxlZCIsIiIsZXJybm8pOwotICAgIH0KLSNlbmRpZiAvKiBUSU9DU1RBUlQgKi8KLQotICAgIGlm IChpb2N0bCh0dHlmZCxUQ1NFVEFGLCZ0dGN1cikgPCAwKSB7IC8qIEZhaWwgaWYgd2UgY2FuJ3Qu ICovCi0JZGVidWcoRjEwMSwidHRoYW5nIFRDU0VUQUYgZmFpbGVkIiwiIixlcnJubyk7Ci0JZmNu dGwodHR5ZmQsIEZfU0VURkwsIGZsYWdzKTsJLyogUmVzdG9yZSBmbGFncyAqLwotCXJldHVybigt MSk7CQkJLyogYmVmb3JlIHJldHVybmluZy4gKi8KLSAgICB9Ci0gICAgbXNsZWVwKDMwMCk7CQkJ LyogR2l2ZSBtb2RlbSB0aW1lIHRvIG5vdGljZS4gKi8KLQotI2lmbmRlZiBOT0NPVEZNQwotCi0v KiBOb3csIGV2ZW4gdGhvdWdoIGl0IGRvZXNuJ3Qgc2F5IHRoaXMgaW4gU1ZJRCBvciBhbnkgbWFu IHBhZ2UsIHdlIGhhdmUgKi8KLS8qIHRvIGNsb3NlIGFuZCByZW9wZW4gdGhlIGRldmljZS4gIFRo aXMgaXMgbm90IG5lY2Vzc2FyeSBmb3IgYWxsIHN5c3RlbXMsICovCi0vKiBidXQgaXQncyBpbXBv c3NpYmxlIHRvIHByZWRpY3Qgd2hpY2ggb25lcyBuZWVkIGl0IGFuZCB3aGljaCBvbmVzIGRvbid0 LiAqLwotCi0jaWZkZWYgQVRUNzMwMAotLyoKLSAgU3BlY2lhbCBoYW5kbGluZyBmb3IgQVRUIDcz MDAgVU5JWCBQQyBhbmQgM0IxLCB3aGljaCBoYXZlICJwaG9uZSIKLSAgcmVsYXRlZCBpb2N0bCdz IGZvciB0aGVpciBpbnRlcm5hbCBtb2RlbXMuICBhdHRtb2RlbSBoYXMgZ2V0dHkgc3RhdHVzIGFu ZAotICBtb2RlbS1pbi11c2UgYml0LiAgUmVwb3J0ZWRseSB0aGUgQVRUNzMwMC8zQjEgUElPQ0RJ U0MgY2FsbCBpcyBuZWNlc3NhcnksCi0gIGJ1dCBhbHNvIHJ1aW5zIHRoZSBmaWxlIGRlc2NyaXB0 b3IsIGFuZCBubyBvdGhlciBwaG9uZSg3KSBpb2N0bCBjYWxsIGNhbiBmaXgKLSAgaXQuICBXaGF0 ZXZlciBpdCBkb2VzLCBpdCBzZWVtcyB0byBlc2NhcGUgZGV0ZWN0aW9uIHdpdGggUElPQ0dFVEEg YW5kIFRDR0VUQS4KLSAgVGhlIG9ubHkgd2F5IHRvIHVuZG8gdGhlIGRhbWFnZSBpcyB0byBjbG9z ZSB0aGUgZmQgYW5kIHRoZW4gcmVvcGVuIGl0LgotKi8KLSAgICBpZiAoYXR0bW9kZW0gJiBJU01P REVNKSB7Ci0JZGVidWcoRjEwMCwidHRoYW5nIGF0dG1vZGVtIGNsb3NlL29wZW4iLCIiLDApOwot CWlvY3RsKHR0eWZkLFBJT0NVTkhPTEQsJmRpYWxlcik7IC8qIFJldHVybiBjYWxsIHRvIGhhbmRz ZXQuICovCi0JaW9jdGwodHR5ZmQsUElPQ0RJU0MsJmRpYWxlcik7CS8qIERpc2Nvbm5lY3QgcGhv bmUuICovCi0JY2xvc2UodHR5ZmQpOwkJCS8qIENsb3NlIGFuZCByZW9wZW4gdGhlIGZkLiAqLwot CXR0eWZkID0gcHJpdl9vcG4odHRubXN2LCBPX1JEV1IgfCBPX05ERUxBWSk7Ci0JYXR0bW9kZW0g Jj0gfklTTU9ERU07CQkvKiBQaG9uZSBubyBsb25nZXIgaW4gdXNlLiAqLwotICAgIH0KLSNlbHNl IC8qICFBVFQ3MzAwICovCi0vKiBJdCBzZWVtcyB3ZSBoYXZlIHRvIGNsb3NlIGFuZCBvcGVuIHRo ZSBkZXZpY2UgZm9yIG90aGVyIEFUJlQgc3lzdGVtcyAqLwotLyogdG9vLCBhbmQgdGhpcyBpcyB0 aGUgcGxhY2UgdG8gZG8gaXQuICBUaGUgZm9sbG93aW5nIGNvZGUgZG9lcyB0aGUgKi8KLS8qIGZh bW91cyBjbG9zZShvcGVuKC4uLikpIG1hZ2ljIGJ5IGRlZmF1bHQuICBJZiB0aGF0IGRvZXNuJ3Qg d29yayBmb3IgeW91LCAqLwotLyogdGhlbiB0cnkgdW5jb21tZW50aW5nIHRoZSBmb2xsb3dpbmcg c3RhdGVtZW50IG9yIHB1dHRpbmcgLURDTFNPUE4gaW4gKi8KLS8qIHRoZSBtYWtlZmlsZSBDRkxB R1MuICovCi0KLS8qICNkZWZpbmUgQ0xTT1BOICovCi0KLSNpZm5kZWYgU0NPMzIgLyogTm90IG5l ZWRlZCBieSwgYW5kIGhhcm1mdWwgdG8sIFNDTyBVTklYIDMuMiAvIFhlbml4IDIuMyAqLwotCi0j aWZkZWYgT19OREVMQVkKLSNkZWZpbmUgT1BFTkZMR1MgT19SRFdSIHwgT19OREVMQVkKLSNlbHNl Ci0jZGVmaW5lIE9QRU5GTEdTIE9fUkRXUgotI2VuZGlmCi0KLSNpZm5kZWYgQ0xTT1BOCi0vKiBU aGlzIG1ldGhvZCBpcyB1c2VkIGJ5IGRlZmF1bHQsIGkuZS4gdW5sZXNzIENMU09QTiBpcyBkZWZp bmVkLiAqLwotLyogSXQgaXMgdGhvdWdodCB0byBiZSBzYWZlciBiZWNhdXNlIHRoZXJlIGlzIG5v IHdpbmRvdyB3aGVyZSBnZXR0eSAqLwotLyogY2FuIHNlaXplIGNvbnRyb2wgb2YgdGhlIGRldmlj ZS4gIFRoZSBkcmF3YmFjayBpcyB0aGF0IGl0IG1pZ2h0IG5vdCB3b3JrLiAqLwotCi0gICAgZGVi dWcoRjEwMSwidHRoYW5nIGNsb3NlKG9wZW4oKSksIE9QRU5GTEdTIiwiIixPUEVORkxHUyk7Ci0g ICAgY2xvc2UocHJpdl9vcG4odHRubXN2LCBPUEVORkxHUykpOwotCi0jZWxzZQotLyogVGhpcyBt ZXRob2QgaXMgdXNlZCBpZiB5b3UgI2RlZmluZSBDTFNPUE4uICBJdCBpcyBtb3JlIGxpa2VseSB0 byB3b3JrICovCi0vKiB0aGFuIHRoZSBwcmV2aW91cyBtZXRob2QsIGJ1dCBpdCdzIGFsc28gbW9y ZSBkYW5nZXJvdXMuICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgY2xvc2Uvb3BlbiwgT1BF TkZMR1MiLCIiLE9QRU5GTEdTKTsKLSAgICBjbG9zZSh0dHlmZCk7Ci0gICAgbXNsZWVwKDEwKTsK LSAgICB0dHlmZCA9IHByaXZfb3BuKHR0bm1zdiwgT1BFTkZMR1MpOwkvKiBPcGVuIGl0IGFnYWlu ICovCi0jZW5kaWYgLyogQ0xTT1BOICovCi0jdW5kZWYgT1BFTkZMR1MKLQotI2VuZGlmIC8qIFND TzMyICovCi0jZW5kaWYgLyogQVRUNzMwMCAqLwotCi0jZW5kaWYgLyogTk9DT1RGTUMgKi8KLQot LyogTm93IHB1dCBhbGwgZmxhZ3MgJiBtb2RlcyBiYWNrIHRoZSB3YXkgd2UgZm91bmQgdGhlbS4g Ki8KLS8qIChEb2VzIHRoZSBvcmRlciBvZiBpb2N0bCAmIGZjbnRsIG1hdHRlciA/ICkgKi8KLQot ICAgIGRlYnVnKEYxMDAsInR0aGFuZyByZXN0b3JlIHNldHRpbmdzIiwiIiwwKTsKLSAgICB0dGN1 ci5jX2NmbGFnID0gdHRjX3NhdmU7CQkvKiBHZXQgb2xkIHNwZWVkIGJhY2suICovCi0gICAgaWYg KGlvY3RsKHR0eWZkLFRDU0VUQUYsJnR0Y3VyKSA8IDApIC8qIGlvY3RsIHBhcmFtZXRlcnMuICov Ci0gICAgICByZXR1cm4oLTEpOwotI2lmZGVmIE9fTkRFTEFZCi0vKgotICBUaGlzIGlzIHJlcXVp cmVkIGZvciBJQk0gUlQgYW5kIFJTLzYwMDAsIHByb2JhYmx5IGhlbHBzIGVsc2V3aGVyZSB0b28g KD8pLgotICBBZnRlciBjbG9zaW5nIGEgbW9kZW0gbGluZSwgdGhlIG1vZGVtIHdpbGwgcHJvYmFi bHkgbm90IGJlIGFzc2VydGluZwotICBjYXJyaWVyIGFueSBtb3JlLCBzbyB3ZSBzaG91bGQgbm90 IHJlcXVpcmUgY2FycmllciBhbnkgbW9yZS4gIElmIHRoaXMKLSAgY2F1c2VzIHRyb3VibGUgb24g bm9uLUlCTSBVTklYZXMsIGNoYW5nZSB0aGUgI2lmZGVmIHRvIHVzZSBfSUJNUjIgcmF0aGVyCi0g IHRoYW4gT19OREVMQVkuCi0qLwotICAgIGZsYWdzICY9IH5PX05ERUxBWTsJCQkvKiBEb24ndCBy ZXF1aXJlIGNhcnJpZXIgb24gcmVvcGVuICovCi0jZW5kaWYgLyogT19OREVMQVkgKi8KLSAgICBp ZiAoZmNudGwodHR5ZmQsRl9TRVRGTCxmbGFncykgPCAwKQkvKiBmY250bCBwYXJhbWV0ZXJzICov Ci0gICAgICByZXR1cm4oLTEpOwotCi0gICAgcmV0dXJuKDEpOwotI2VuZGlmIC8qIG5vdCBIUFVY ICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSNlbmRp ZiAvKiBIVVBfUE9TSVggKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi19Ci0KLS8qCi0gIE1ham9y IGNoYW5nZSBpbiA1QSgxNzQpLiAgV2UgdXNlZCB0byB1c2UgTFBBU1M4LCBpZiBpdCB3YXMgZGVm aW5lZCwgdG8KLSAgYWxsb3cgOC1iaXQgZGF0YSBhbmQgWG9uL1hvZmYgZmxvdyBjb250cm9sIGF0 IHRoZSBzYW1lIHRpbWUuICBCdXQgdGhpcwotICBMUEFTUzggYnVzaW5lc3Mgc2VlbXMgdG8gaGF2 ZSBiZWVuIGNhdXNpbmcgdHJvdWJsZSBmb3IgZXZlcnlib2R5IGJ1dCBtZSEKLSAgRm9yIGV4YW1w bGUsIEFubmV4IHRlcm1pbmFsIHNlcnZlcnMsIGNvbW1vbmx5IHVzZWQgd2l0aCBFbmNvcmUgY29t cHV0ZXJzLAotICBkbyBub3Qgc3VwcG9ydCBMUEFTUzggZXZlbiB0aG91Z2ggdGhlIEVuY29yZSBp dHNlbGYgZG9lcy4gIERpdHRvIGZvciBtYW55Ci0gIG90aGVyIHRlcm1pbmFsIHNlcnZlcnMsIFRF TE5FVCBjb25uZWN0aW9ucywgcmxvZ2luIGNvbm5lY3Rpb25zLCBldGMgZXRjLgotICBOb3csIHJl cG9ydGVkbHksIGV2ZW4gdmFuaWxsYSA0LjMgQlNEIHN5c3RlbXMgY2FuJ3QgZG8gdGhpcyByaWdo dCBvbiB0aGVpcgotICBzZXJpYWwgbGluZXMsIGV2ZW4gdGhvdWdoIExQQVNTOCBpcyBhIGZlYXR1 cmUgb2YgNC4zQlNELiAgU28gbGV0J3MgdHVybiBpdAotICBvZmYgZm9yIGV2ZXJ5Ym9keS4gIFRo YXQgbWVhbnMgd2UgZ29lcyBiYWNrIHRvIHVzaW5nIHJhdyBtb2RlLCB3aXRoIG5vCi0gIGZsb3cg Y29udHJvbC4gIFBob29leS4KLQotICBOT1RFOiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhl IGZpcnN0IHJlZmVyZW5jZSB0byBMUEFTUzggaW4gdGhpcyBmaWxlLAotICBhbmQgYWZ0ZXIgdGhl IGxhc3QgI2luY2x1ZGUgc3RhdG1lbnQuCi0qLwotI2lmZGVmIExQQVNTOAotI3VuZGVmIExQQVNT OAotI2VuZGlmIC8qIExQQVNTOCAqLwotCi0vKiAgVCBUIFIgRSBTICAtLSAgUmVzdG9yZSB0ZXJt aW5hbCB0byAibm9ybWFsIiBtb2RlLiAgKi8KLQotLyogc2tlQHBrbWFiLnNlOiBUaGVyZSBhcmUg dHdvIGNob2ljZXMgZm9yIHdoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgZG8uCi0gKiAoMSkgUmVz dG9yZSB0aGUgdHR5IHRvIGN1cnJlbnQgIm5vcm1hbCIgbW9kZSwgd2l0aCBjYXJyaWVyIHRyZWF0 bWVudAotICogYWNjb3JkaW5nIHRvIHR0Y2FyciwgdG8gYmUgdXNlZCBhZnRlciBldmVyeSBrZXJt aXQgY29tbWFuZC4gKDIpIFJlc3RvcmUKLSAqIHRoZSB0dHkgdG8gdGhlIHN0YXRlIGl0IHdhcyBp biBiZWZvcmUga2VybWl0IG9wZW5lZCBpdC4gVGhlc2UgY2hvaWNlcwotICogY29uZmxpY3QsIHNp bmNlIHR0b2xkIGNhbid0IGhvbGQgYm90aCBjaG9pY2VzIG9mIHR0eSBwYXJhbWV0ZXJzLiAgdHRy ZXMoKQotICogaXMgY3VycmVudGx5IGJlaW5nIGNhbGxlZCBhcyBpbiBjaG9pY2UgKDEpLCBidXQg dHRvbGQgYmFzaWNhbGx5IGhvbGRzCi0gKiB0aGUgaW5pdGlhbCBwYXJhbWV0ZXJzLCBhcyBpbiAo MiksIGFuZCB0aGUgZGVzY3JpcHRpb24gYXQgdGhlIGJlZ2lubmluZwotICogb2YgdGhpcyBmaWxl IHNheXMgKDIpLgotICoKLSAqIEkgZG9uJ3QgdGhpbmsgcmVzdG9yaW5nIHR0eSBwYXJhbWV0ZXJz IGFmdGVyIGFsbCBrZXJtaXQgY29tbWFuZHMgbWFrZXMKLSAqIG11Y2ggb2YgYSBkaWZmZXJlbmNl LiAgUmVzdG9yaW5nIHRoZW0gdXBvbiBleGl0IGZyb20ga2VybWl0IG1heSBiZSBvZgotICogc29t ZSB1c2UgaW4gc29tZSBjYXNlcyAod2hlbiB0aGUgbGluZSBpcyBub3QgcmVzdG9yZWQgYXV0b21h dGljYWxseSBvbgotICogY2xvc2UsIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtKS4KLSAqCi0gKiBJ IGNhbid0IGNob29zZSB3aGljaCBvbmUgaXQgc2hvdWxkIGJlLCBzbyBJIGhhdmVuJ3QgY2hhbmdl ZCBpdC4gSXQKLSAqIHByb2JhYmx5IHdvcmtzIGFzIGl0IGlzLCB0b28uIEl0IHdvdWxkIHByb2Jh Ymx5IGV2ZW4gd29yayBldmVuIHdpdGgKLSAqIHR0cmVzKCkgZW50aXJlbHkgZGVsZXRlZC4uLgot ICoKLSAqIChmcm9tIGZkYzogQWN0dWFsbHksIHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgaW4gcmVt b3RlIG1vZGUgdG9vLCBzbwotICogaXQgcmVzdG9yZXMgdGhlIGNvbnNvbGUgKGNvbW1hbmQpIHRl cm1pbmFsIHRvIHdoYXRldmVyIG1vZGUgaXQgd2FzCi0gKiBpbiBiZWZvcmUgcGFja2V0IG9wZXJh dGlvbnMgYmVnYW4sIHNvIHRoYXQgY29tbWFuZHMgd29yayByaWdodCBhZ2Fpbi4pCi0gKi8KLWlu dAotdHRyZXMoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgdGhl IHR0eSB0byBub3JtYWwuICovCi0gICAgaW50IHg7Ci0KLSAgICBpZiAodHR5ZmQgPCAwKSByZXR1 cm4oLTEpOyAgICAgICAgICAvKiBOb3Qgb3Blbi4gKi8KLQotICAgIGlmICh0dGZkZmxnKSByZXR1 cm4oMCk7CQkvKiBEb24ndCBtZXNzIHdpdGggdGVybWluYWwgbW9kZXMgaWYgKi8KLQkJCQkJLyog d2UgZ290IHR0eWZkIGZyb20gYW5vdGhlciBwcm9jZXNzICovCi0jaWZkZWYJTkVUQ09OTgotICAg IGlmIChuZXRjb25uKSB7CQkJLyogTmV0d29yayBjb25uZWN0aW9uICovCi0gICAgICAgIHR2dGZs ZyA9IDA7Ci0jaWZkZWYgVENQU09DS0VUCi0jaWZkZWYgVENQX05PREVMQVkKLSAgICAgICAgewot CSAgICBleHRlcm4gaW50IHRjcF9ub2RlbGF5OwkvKiBKdXN0IHB1dCB0aGlzIGJhY2sgaWYgbmVj ZXNzYXJ5ICovCi0JICAgIGlmICh0dG5ldCA9PSBORVRfVENQQikgewotCQlpZiAobm9kZWxheV9z YXYgPiAtMSkgewotCQkgICAgbm9fZGVsYXkodHR5ZmQsbm9kZWxheV9zYXYpOwotCQkgICAgbm9k ZWxheV9zYXYgPSAtMTsKLQkJfQotCSAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBUQ1BfTk9E RUxBWSAqLwotI2lmZGVmIFROX0NPTVBPUlQKLSAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsK LSAgICAgICAgICAgIGludCByYyA9IC0xOwotICAgICAgICAgICAgaWYgKChyYyA9IHRuc2V0Zmxv dyh0dGZsb3cpKSA8IDApCi0JICAgICAgcmV0dXJuKHJjKTsKLSAgICAgICAgICAgIGlmICh0dHNw ZWVkIDw9IDApIAotCSAgICAgIHR0c3BlZWQgPSB0bmNfZ2V0X2JhdWQoKTsKLSAgICAgICAgICAg IGVsc2UgaWYgKChyYyA9IHRuY19zZXRfYmF1ZCh0dHNwZWVkKSkgPCAwKQotCSAgICAgIHJldHVy bihyYyk7Ci0gICAgICAgICAgICB0bmNfc2V0X2RhdGFzaXplKDgpOwotCSAgICB0bmNfc2V0X3N0 b3BzaXplKHN0b3BiaXRzKTsKLQotI2lmZGVmIEhXUEFSSVRZCi0gICAgICAgICAgICBpZiAoaHdw YXJpdHkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGh3cGFyaXR5KSB7Ci0JCSAgY2FzZSAn ZSc6CQkJLyogRXZlbiAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4 IGJpdHMgKyBldmVuIHBhcml0eSIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIHRuY19zZXRf cGFyaXR5KDMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJICBjYXNlICdvJzoJCQkv KiBPZGQgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsg b2RkIHBhcml0eSIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDIp OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJICBjYXNlICdtJzoJCQkvKiBNYXJrICov Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyArIGludmFsaWQg cGFyaXR5OiBtYXJrIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHko NCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkgIGNhc2UgJ3MnOgkJCS8qIFNwYWNl ICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyArIGludmFs aWQgcGFyaXR5OiBzcGFjZSIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIHRuY19zZXRfcGFy aXR5KDUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBIV1BBUklUWSAqLwotCSAgICB7Ci0gICAgICAg ICAgICAgICAgdG5jX3NldF9wYXJpdHkoMSk7ICAgICAgICAgICAgICAvKiBOb25lICovCi0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICB0dnRmbGcgPSAwOwotICAgICAgICAgICAgcmV0dXJuKDAp OwotICAgICAgICB9Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLwotCXJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYJLyogTkVUQ09OTiAqLwotI2lmZGVmIE5F VENNRAotICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNp ZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRQVFkg Ki8KLQotLyogUmVhbCB0ZXJtaW5hbCBkZXZpY2UsIHNvIHJlc3RvcmUgaXRzIG9yaWdpbmFsIG1v ZGVzICovCi0KLSNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBGb3IgUE9TSVggbGlrZSB0aGlzICov Ci0gICAgZGVidWcoRjEwMCwidHRyZXMgQlNENDRPUlBPU0lYIiwiIiwwKTsKLSAgICB4ID0gdGNz ZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRvbGQpOwotI2Vsc2UJCQkJCS8qIEZvciBhbGwgb3Ro ZXJzLi4uICovCi0jaWZkZWYgQVRUU1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9y IEFUJlQgdmVyc2lvbnMuLi4gKi8KLSAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyBBVFRTViIsIiIsMCk7 Ci0gICAgeCA9IGlvY3RsKHR0eWZkLFRDU0VUQVcsJnR0b2xkKTsJLyogUmVzdG9yZSB0dHkgbW9k ZXMgdGhpcyB3YXkuICovCi0jZWxzZQotLyogSGVyZSB3ZSByZXN0b3JlIHRoZSBtb2RlcyBmb3Ig QlNEICovCi0KLSNpZmRlZiBMUEFTUzgJCQkJLyogVW5kbyAicGFzczgiIGlmIGl0IHdlcmUgZG9u ZSAqLwotICAgIGlmIChsbW9kZWYpIHsKLQlpZiAoaW9jdGwodHR5ZmQsVElPQ0xTRVQsJmxtb2Rl KSA8IDApCi0JICBkZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9DTFNFVCBmYWlsZWQiLCIiLDApOwotCWVs c2UKLQkgIGRlYnVnKEYxMDAsInR0cmVzIFRJT0NMU0VUIG9rIiwiIiwwKTsKLSAgICB9Ci0jZW5k aWYgLyogTFBBU1M4ICovCi0KLSNpZmRlZiBDS19EVFJDVFMJCSAgIC8qIFVuZG8gaGFyZHdhcmUg ZmxvdyBpZiBpdCB3ZXJlIGRvbmUgKi8KLSAgICBpZiAobG1vZGVmKSB7Ci0gCWlmIChpb2N0bCh0 dHlmZCxUSU9DTFNFVCwmbG1vZGUpIDwgMCkKLSAJICBkZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9DTFNF VCBmYWlsZWQiLCIiLDApOwotIAllbHNlCi0gCSAgZGVidWcoRjEwMCwidHRyZXMgVElPQ0xTRVQg b2siLCIiLDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19EVFJDVFMgKi8KLQotI2lmZGVmIFRJT0NH RVRDCQkJCS8qIFB1dCBiYWNrIHNwZWNpYWwgY2hhcmFjdGVycyAqLwotICAgIGlmICh0Y2hhcmYg JiYgKHhsb2NhbCA9PSAwKSkgewotCWlmIChpb2N0bCh0dHlmZCxUSU9DU0VUQywmdGNob2xkKSA8 IDApCi0JICBkZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9DU0VUQyBmYWlsZWQiLCIiLDApOwotCWVsc2UK LQkgIGRlYnVnKEYxMDAsInR0cmVzIFRJT0NTRVRDIG9rIiwiIiwwKTsKLSAgICB9Ci0jZW5kaWYg LyogVElPQ0dFVEMgKi8KLQotI2lmZGVmIFRJT0NHTFRDCQkJCS8qIFB1dCBiYWNrIGxvY2FsIHNw ZWNpYWwgY2hhcmFjdGVycyAqLwotICAgIGlmIChsdGNoYXJmICYmICh4bG9jYWwgPT0gMCkpIHsK LQlpZiAoaW9jdGwodHR5ZmQsVElPQ1NMVEMsJmx0Y2hvbGQpIDwgMCkKLQkgIGRlYnVnKEYxMDAs InR0cmVzIFRJT0NTTFRDIGZhaWxlZCIsIiIsMCk7Ci0JZWxzZQotCSAgZGVidWcoRjEwMCwidHRy ZXMgVElPQ1NMVEMgb2siLCIiLDApOwotICAgIH0KLSNlbmRpZiAvKiBUSU9DR0xUQyAqLwotCi0j aWZkZWYgQkVMTFYxMAotICAgIGRlYnVnKEYxMDAsInR0cmVzIEJFTExWMTAiLCIiLDApOwotICAg IHggPSBpb2N0bCh0dHlmZCxUSU9DU0VUUCwmdHRvbGQpOwkvKiBSZXN0b3JlIGJvdGggc3RydWN0 cyAqLwotICAgIHggPSBpb2N0bCh0dHlmZCxUSU9DU0RFViwmdGRvbGQpOwotI2Vsc2UKLSAgICBk ZWJ1ZyhGMTAwLCJ0dHJlcyBzdHR5IiwiIiwwKTsKLSAgICB4ID0gc3R0eSh0dHlmZCwmdHRvbGQp OyAgICAgICAgICAgICAvKiBSZXN0b3JlIHR0eSBtb2RlcyB0aGUgb2xkIHdheS4gKi8KLSNlbmRp ZiAvKiBCRUxMVjEwICovCi0KLSAgICBpZiAoIXhsb2NhbCkKLSAgICAgIG1zbGVlcCgxMDApOwkJ CS8qIFRoaXMgcmVwbGFjZXMgc2xlZXAoMSkuLi4gKi8KLQkJCQkJLyogUHV0IGJhY2sgc2xlZXAo MSkgaWYgdHR5IGlzICovCi0JCQkJCS8qIG1lc3NlZCB1cCBhZnRlciBjbG9zZS4gKi8KLSNlbmRp ZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotCi0gICAgZGVidWcoRjEw MSwidHRyZXMgcmVzdWx0IiwiIix4KTsKLSNpZm5kZWYgUU5YCi0gICAgaWYgKHggPCAwKSBkZWJ1 ZyhGMTAxLCJ0dHJlcyBlcnJubyIsIiIsZXJybm8pOwotI2VuZGlmIC8qIFFOWCAqLwotCi0jaWZk ZWYgQUlYUlMKLSNpZm5kZWYgQUlYNDEKLSAgICB4ID0gaW9jdGwodHR5ZmQsIHR0bGQgJiAxID8g VFhBRERDRCA6IFRYREVMQ0QsICJydHMiKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHJlcyBBSVggbGlu ZSBkaXNjaXBsaW5lIHJ0cyByZXN0b3JlIiwiIix4KTsKLSNlbmRpZiAvKiBBSVg0MSAqLwotI2Vu ZGlmIC8qIEFJWFJTICovCi0KLSNpZmRlZiBCU0Q0MQotICAgIGlmICh0dGxkID4gLTEpIHsJCQkv KiBQdXQgYmFjayBsaW5lIGRpc2NpcGxpbmUgKi8KLQl4ID0gaW9jdGwodHR5ZmQsIFRJT0NTRVRE LCAmdHRsZCk7Ci0JZGVidWcoRjEwMSwidHRyZXMgQlNENDEgbGluZSBkaXNjaXBsaW5lIHJlc3Rv cmUiLCIiLHgpOwotCWlmICh4IDwgMCkgZGVidWcoRjEwMSwiLi4uaW9jdGwgZXJybm8iLCIiLGVy cm5vKTsKLQl0dGxkID0gLTE7Ci0gICAgfQotI2VuZGlmIC8qIEJTRDQxICovCi0KLSNpZmRlZiBz b255X25ld3MKLSAgICB4ID0geGxvY2FsID8ga21fZXh0IDoga21fY29uOwkvKiBSZXN0b3JlIEth bmppIG1vZGUuICovCi0gICAgaWYgKHggIT0gLTEpIHsJCQkvKiBNYWtlIHN1cmUgd2Uga25vdyBv cmlnaW5hbCBtb2Rlcy4gKi8KLQlpZiAoaW9jdGwodHR5ZmQsVElPQ0tTRVQsICZ4KSA8IDApIHsK LQkgICAgcGVycm9yKCJ0dHJlcyBjYW4ndCBzZXQgS2FuamkgbW9kZSIpOwotCSAgICBkZWJ1ZyhG MTAxLCJ0dHJlcyBlcnJvciBzZXR0aW5nIEthbmppIG1vZGUiLCIiLHgpOwotCSAgICByZXR1cm4o LTEpOwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjEwMCwidHRyZXMgc2V0IEthbmppIG1vZGUgb2si LCIiLDApOwotI2VuZGlmIC8qIHNvbnlfbmV3cyAqLwotCi0gICAgdHZ0ZmxnID0gMDsJCQkJLyog SW52YWxpZGF0ZSB0ZXJtaW5hbCBtb2RlIHNldHRpbmdzICovCi0gICAgZGVidWcoRjEwMSwidHRy ZXMgcmV0dXJuIGNvZGUiLCIiLHgpOwotICAgIHJldHVybih4KTsKLX0KLQotI2lmbmRlZiBOT1VV Q1AKLQotLyogIFQgVCBDIEggSyBQIEkgRCAgLS0gIENoZWNrIGxvY2tmaWxlIHBpZCAgKi8KLS8q Ci0gIFJlYWQgcGlkIGZyb20gbG9ja2ZpbGUgbmFtZWQgZiwgY2hlY2sgdGhhdCBpdCdzIHN0aWxs IHZhbGlkLgotICBJZiBzbywgcmV0dXJuIDEuCi0gIE9uIGZhaWx1cmUgdG8gcmVhZCBwaWQsIHJl dHVybiAxLgotICBPdGhlcndpc2UsIHRyeSB0byBkZWxldGUgbG9ja2ZpbGUgZiBhbmQgcmV0dXJu IDAgaWYgc3VjY2Vzc2Z1bCwgZWxzZSAxLgotKi8KLXN0YXRpYyBpbnQKLXR0Y2hrcGlkKGYpIGNo YXIgKmY7IHsKLSAgICBpbnQgcGlkLCBteXBpZCwgeDsKLSAgICBwaWQgPSB0dHJwaWQoZik7CQkJ LyogUmVhZCBwaWQgZnJvbSBmaWxlLiAqLwotICAgIGlmIChwaWQgPiAtMSkgewkJCS8qIElmIHdl IHdlcmUgYWJsZSB0byByZWFkIHRoZSBwaWQuLiAqLwotCWRlYnVnKEYxMDEsInR0Y2hrcGlkIGxv Y2sgcGlkIiwiIixwaWQpOwotCWVycm5vID0gMDsJCQkvKiBTZWUgaWYgcHJvY2VzcyBzdGlsbCBl eGlzdHMuICovCi0JbXlwaWQgPSAoaW50KWdldHBpZCgpOwkJLyogR2V0IG15IG93biBwaWQuICov Ci0JZGVidWcoRjEwMSwidHRjaGtwaWQgbXkgcGlkIiwiIixteXBpZCk7Ci0JaWYgKHBpZCA9PSBt eXBpZCkgewkJLyogSXQncyBtZSEgKi8KLQkgICAgeCA9IC0xOwkJCS8qIFNvIEkgY2FuIGRlbGV0 ZSBpdCAqLwotCSAgICBlcnJubyA9IEVTUkNIOwkJLyogcHJldGVuZCBpdCdzIGludmFsaWQgKi8K LQl9IGVsc2UgewkJCS8qIEl0J3Mgbm90IG1lICovCi0JICAgIHggPSBraWxsKChQSURfVClwaWQs IDApOwkvKiBTZWUgaWYgaXQncyBhIGxpdmUgcHJvY2VzcyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJ0 dGNoa3BpZCBraWxsIGVycm5vIiwiIixlcnJubyk7Ci0JfQotCWRlYnVnKEYxMDEsInR0Y2hrcGlk IHBpZCB0ZXN0IiwiIix4KTsKLQlpZiAoeCA8IDAgJiYgZXJybm8gPT0gRVNSQ0gpIHsgLyogcGlk IGlzIGludmFsaWQgKi8KLQkgICAgZGVidWcoRjExMSwicmVtb3Zpbmcgc3RhbGUgbG9jayIsZixw aWQpOwotCSAgICBpZiAoIWJhY2tncmQpCi0JICAgICAgcHJpbnRmKCJSZW1vdmluZyBzdGFsZSBs b2NrICVzIChwaWQgJWQgdGVybWluYXRlZClcbiIsIGYsIHBpZCk7Ci0JICAgIHByaXZfb24oKTsK LQkgICAgeCA9IHVubGluayhmKTsJCS8qIFJlbW92ZSB0aGUgbG9ja2ZpbGUuICovCi0JICAgIHBy aXZfb2ZmKCk7Ci0JICAgIGRlYnVnKEYxMTEsInR0Y2hrcGlkIHVubGluayIsZix4KTsKLQkgICAg aWYgKHggPiAtMSkKLQkgICAgICByZXR1cm4oMCk7CQkvKiBEZXZpY2UgaXMgbm90IGxvY2tlZCBh ZnRlciBhbGwgKi8KLQkgICAgZWxzZSBpZiAoIWJhY2tncmQpCi0JICAgICAgcGVycm9yKGYpOwot CX0KLQlyZXR1cm4oMSk7Ci0gICAgfQotICAgIHJldHVybigxKTsJCQkJLyogRmFpbHVyZSB0byBy ZWFkIHBpZCAqLwotfQotCi0jaWZkZWYgSFBVWAotCi0vKiBBbGlhc2VzIChkaWZmZXJlbnQgZHJp dmVycykgZm9yIEhQLVVYIGRpYWxvdXQgZGV2aWNlczogKi8KLQotc3RhdGljIGNoYXIgKmRldnBy ZWZpeFtdID0geyAidHR5IiwgInR0eWQiLCAiY3VsIiwgImN1YSIsICJjdWFkIiwgImN1bGQiLCAi IiB9Owotc3RhdGljIGludCB0dHlkZXhpc3RzID0gMDsKLQotI2VuZGlmIC8qIEhQVVggKi8KLQot LyogIFQgVCBSIFAgSSBEICAtLSAgUmVhZCBwaWQgZnJvbSBsb2NrZmlsZSAibmFtZSIgKi8KLQot c3RhdGljIGludAotdHRycGlkKG5hbWUpIGNoYXIgKm5hbWU7IHsKLSAgICBsb25nIGxlbjsKLSAg ICBpbnQgeCwgZmQsIHBpZDsKLSAgICBzaG9ydCBzcGlkOwotICAgIGNoYXIgYnVmWzMyXTsKLQot ICAgIGRlYnVnKEYxMTAsInR0cnBpZCIsbmFtZSwwKTsKLSAgICBpZiAoIW5hbWUpIHJldHVybigt MSk7Ci0gICAgaWYgKCEqbmFtZSkgcmV0dXJuKC0xKTsKLSAgICBwcml2X29uKCk7Ci0gICAgbGVu ID0gemNoa2kobmFtZSk7CQkJLyogR2V0IGZpbGUgbGVuZ3RoICovCi0gICAgcHJpdl9vZmYoKTsK LSAgICBkZWJ1ZyhGMTAxLCJ0dHJwaWQgemNoa2kiLCIiLGxlbik7Ci0gICAgaWYgKGxlbiA8IDAp Ci0gICAgICByZXR1cm4oLTEpOwotICAgIGlmIChsZW4gPiAzMSkKLSAgICAgIHJldHVybigtMSk7 Ci0gICAgcHJpdl9vbigpOwotICAgIGZkID0gb3BlbihuYW1lLE9fUkRPTkxZKTsJCS8qIFRyeSB0 byBvcGVuIGxvY2tmaWxlLiAqLwotICAgIHByaXZfb2ZmKCk7Ci0gICAgZGVidWcoRjEwMSwidHRy cGlkIGZkIiwiIixmZCk7Ci0gICAgaWYgKGZkIDw9IDApCi0gICAgICByZXR1cm4oLTEpOwotLyoK LSAgSGVyZSB3ZSB0cnkgdG8gYmUgZmxleGlibGUgYW5kIGFsbG93IGZvciBhbGwgZGlmZmVyZW50 IGJpbmFyeSBhbmQgc3RyaW5nCi0gIGZvcm1hdHMgYXQgcnVudGltZSwgcmF0aGVyIHRoYW4gYSBz cGVjaWZpYyBmb3JtYXQgZm9yIGVhY2ggY29uZmlndXJhdGlvbgotICBoYXJkd2lyZWQgYXQgY29t cGlsZSB0aW1lLgotKi8KLSAgICBwaWQgPSAtMTsKLSNpZm5kZWYgQ09IRVJFTlQKLS8qCi0gIENP SEVSRU5UIHVzZXMgYSBzdHJpbmcgUElEIGJ1dCB3aXRob3V0IGxlYWRpbmcgc3BhY2VzIG9yIDAn cywgc28gdGhlcmUgaXMKLSAgbm8gd2F5IHRvIHRlbGwgZnJvbSB0aGUgZmlsZSdzIGxlbmd0aCB3 aGV0aGVyIGl0IGNvbnRhaW5zIGEgc3RyaW5nIG9yIGJpbmFyeQotICBwaWQuICBTbyBmb3IgQ09I RVJFTlQgb25seSwgd2Ugb25seSBhbGxvdyBzdHJpbmcgcGlkcy4gIEZvciBhbGwgb3RoZXJzLCB3 ZQotICBkZWNpZGUgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIGxvY2tmaWxlLgotKi8KLSAgICBp ZiAobGVuID4gNCkgewkJCS8qIElmIGZpbGUgPiA0IGJ5dGVzIGl0J3MgYSBzdHJpbmcgKi8KLSNl bmRpZiAvKiBDT0hFUkVOVCAqLwotCXggPSByZWFkKGZkLGJ1ZiwoaW50KWxlbik7Ci0JZGVidWco RjExMSwidHRycGlkIHN0cmluZyByZWFkIixidWYseCk7Ci0JaWYgKHggPCAwKSB7Ci0JICAgIHBp ZCA9IC0xOwotCX0gZWxzZSB7Ci0JICAgIGJ1ZlszMV0gPSAnXDAnOwotCSAgICB4ID0gc3NjYW5m KGJ1ZiwiJWQiLCZwaWQpOwkvKiBHZXQgdGhlIGludGVnZXIgcGlkIGZyb20gaXQuICovCi0JfQot I2lmbmRlZiBDT0hFUkVOVAotICAgIH0gZWxzZSBpZiAobGVuID09IDQpIHsJCS8qIDQgYnl0ZXMg c28gYmluYXJ5ICovCi0JeCA9IHJlYWQoZmQsIChjaGFyICopJnBpZCwgNCk7CS8qIFJlYWQgdGhl IGJ5dGVzIGludG8gYW4gaW50ICovCi0JZGVidWcoRjEwMSwidHRycGlkIGludGVnZXIgcmVhZCIs IiIseCk7Ci0JaWYgKHggPCA0KQotCSAgcGlkID0gLTE7Ci0gICAgfSBlbHNlIGlmIChsZW4gPT0g MikgewkJLyogMiBieXRlcyBiaW5hcnkgKi8KLQl4ID0gcmVhZChmZCwgKGNoYXIgKikmc3BpZCwg Mik7CS8qIFJlYWQgdGhlIGJ5dGVzIGludG8gYSBzaG9ydCAqLwotCWRlYnVnKEYxMDEsInR0cnBp ZCBzaG9ydCByZWFkIiwiIix4KTsKLQlpZiAoeCA8IDIpCi0JICBwaWQgPSAtMTsKLQllbHNlCi0J ICBwaWQgPSBzcGlkOwotICAgIH0gZWxzZQotICAgICAgcGlkID0gLTE7Ci0jZW5kaWYgLyogQ09I RVJFTlQgKi8KLSAgICBjbG9zZShmZCk7CQkJCS8qIENsb3NlIHRoZSBsb2NrZmlsZSAqLwotICAg IGRlYnVnKEYxMDEsInR0cnBpZCBwaWQiLCIiLHBpZCk7Ci0gICAgcmV0dXJuKHBpZCk7Ci19Ci0j ZW5kaWYgLyogTk9VVUNQICovCi0KLS8qICBUIFQgTCBPIEMgSyAgKi8KLQotLyoKLSAgVGhpcyBm dW5jdGlvbiBhdHRlbXB0cyB0byBjb29yZGluYXRlIHVzZSBvZiB0aGUgY29tbXVuaWNhdGlvbiBk ZXZpY2Ugd2l0aAotICBvdGhlciBjb3BpZXMgb2YgS2VybWl0IGFuZCBhbnkgb3RoZXIgcHJvZ3Jh bSB0aGF0IGZvbGxvd3MgdGhlIFVVQ1AKLSAgZGV2aWNlLWxvY2tpbmcgY29udmVudGlvbnMsIHdo aWNoLCB1bmZvcnR1bmF0ZWx5LCB2YXJ5IGFtb25nIGRpZmZlcmVudCBVTklYCi0gIGltcGxlbWVu dGF0aW9ucy4gIFRoZSBpZGVhIGlzIHRvIGxvb2sgZm9yIGEgZmlsZSBvZiBhIGNlcnRhaW4gbmFt ZSwgdGhlCi0gICJsb2NrZmlsZSIsIGluIGEgY2VydGFpbiBkaXJlY3RvcnkuICBJZiBzdWNoIGEg ZmlsZSBpcyBmb3VuZCwgdGhlbiB0aGUgbGluZQotICBpcyBwcmVzdW1lZCB0byBiZSBpbiB1c2Us IGFuZCBLZXJtaXQgc2hvdWxkIG5vdCB1c2UgaXQuICBJZiBubyBzdWNoIGZpbGUgaXMKLSAgZm91 bmQsIEtlcm1pdCBhdHRlbXB0cyB0byBjcmVhdGUgb25lIHNvIHRoYXQgb3RoZXIgcHJvZ3JhbXMg d2lsbCBub3QgdXNlIHRoZQotICBzYW1lIGxpbmUgYXQgdGhlIHNhbWUgdGltZS4gIEJlY2F1c2Ug dGhlIGxvY2tmaWxlIGFuZC9vciB0aGUgZGlyZWN0b3J5IGl0J3MKLSAgaW4gbWlnaHQgbGFjayB3 cml0ZSBwZXJtaXNzaW9uIGZvciB0aGUgcGVyc29uIHJ1bm5pbmcgS2VybWl0LCBLZXJtaXQgY291 bGQKLSAgZmluZCBpdHNlbGYgcnVubmluZyBzZXR1aWQgdG8gdXVjcCBvciBvdGhlciB1c2VyIHRo YXQgZG9lcyBoYXZlIHRoZQotICBuZWNlc3NhcnkgcGVybWlzc2lvbnMuICBBdCBzdGFydHVwLCBL ZXJtaXQgaGFzIGNoYW5nZWQgaXRzIGVmZmVjdGl2ZSB1aWQgdG8KLSAgdGhlIHVzZXIncyByZWFs IHVpZCwgYW5kIHNvIHR0bG9jaygpIG11c3Qgc3dpdGNoIGJhY2sgdG8gdGhlIG9yaWdpbmFsCi0g IGVmZmVjdGl2ZSB1aWQgaW4gb3JkZXIgdG8gY3JlYXRlIHRoZSBsb2NrZmlsZSwgYW5kIHRoZW4g YmFjayBhZ2FpbiB0byB0aGUKLSAgcmVhbCB1aWQgdG8gcHJldmVudCB1bmF1dGhvcml6ZWQgYWNj ZXNzIHRvIG90aGVyIGRpcmVjdG9yaWVzIG9yIGZpbGVzIG93bmVkCi0gIGJ5IHRoZSB1c2VyIHRo ZSBwcm9ncmFtIGlzIHNldHVpZCB0by4KLQotICBUb3RhbGx5IHJld3JpdHRlbiBmb3IgQy1LZXJt aXQgNUEgdG8gZWxpbWluYXRlIHdpbmRvd3Mgb2YgdnVsbmVyYWJpbGl0eSwKLSAgYmFzZWQgb24g c3VnZ2VzdGlvbnMgZnJvbSBXYXJyZW4gVHVja2VyLiAgQ2FsbCB3aXRoIHBvaW50ZXIgdG8gbmFt ZSBvZgotICB0dHkgZGV2aWNlLiAgUmV0dXJuczoKLQotICAgMCBvbiBzdWNjZXNzCi0gIC0xIG9u IGZhaWx1cmUKLQotICBOb3RlOiBPbmNlIHByaXZpbGVnZXMgYXJlIHR1cm5lZCBvbiB1c2luZyBw cml2X29uKCksIGl0IGlzIGVzc2VudGlhbCB0aGF0Ci0gIHRoZXkgYXJlIHR1cm5lZCBvZmYgYWdh aW4gYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KLSovCi0jaWZkZWYgU1ZSNAkJCQkvKiBM b2NrZmlsZSB1c2VzIGRldmljZSBudW1iZXJzLiAqLwotLyoKLSAgQWx0aG91Z2ggSSBjYW4ndCBm aW5kIHRoaXMgaW4gd3JpdGluZyBhbnl3aGVyZSAoZS5nLiBpbiBTVklEIGZvciBTVlI0KSwKLSAg aXQgaXMgdGhlIGJlaGF2aW9yIG9mIHRoZSAicmVmZXJlbmNlIHZlcnNpb24iIG9mIFNWUjQsIGku ZS4gdGhlIEludGVsCi0gIHBvcnQgZnJvbSBVTklYIFN5c3RlbXMgTGFib3JhdG9yaWVzLCB0aGVu IGNhbGxlZCBVbml2ZWwgVW5peFdhcmUsCi0gIHRoZW4gY2FsbGVkIE5vdmVsbCBVbml4V2FyZSwg dGhlbiBjYWxsZWQgU0NPIFVuaXh3YXJlLCB0aGVuIGNhbGxlZCBDYWxkZXJhCi0gIE9wZW4gVU5J WC4uLiAgSXQgYWxzbyBtYWtlcyBtdWNoIG1vcmUgc2Vuc2UgdGhhbiBkZXZpY2UtbmFtZS1iYXNl ZCBsb2NrZmlsZXMKLSAgc2luY2UgdGhlcmUgY2FuIGJlIG11bHRpcGxlIG5hbWVzIGZvciB0aGUg c2FtZSBkZXZpY2UsIHN5bWxpbmtzLCBldGMuCi0qLwotI2lmbmRlZiBOT0xGREVWTk8KLSNpZm5k ZWYgTEZERVZOTwkJCQkvKiBEZWZpbmUgdGhpcyBmb3IgU1ZSNCAqLwotI2lmbmRlZiBBSVhSUwkJ CQkvKiBCdXQgbm90IGZvciBSUy82MDAwIEFJWCAzLjIsIGV0Yy4gKi8KLSNpZm5kZWYgQlNENDQJ CQkJLyogSWYgYW55Ym9keSBlbHNlIG5lZWRzIGl0Li4uICovCi0jaWZuZGVmIF9fMzg2QlNEX18K LSNpZm5kZWYgX19GcmVlQlNEX18KLSNpZm5kZWYgSFBVWDEwCi0jaWZuZGVmIElSSVg1MQkJCQkv KiBTR0kgSVJJWCA1LjEgb3IgbGF0ZXIgKi8KLSNpZm5kZWYgQ0tfU0NPVjUJCQkvKiBTQ08gT3Bl biBTZXJ2ZXIgNS4wICovCi0jZGVmaW5lIExGREVWTk8KLSNlbmRpZiAvKiBDS19TQ09WNSAqLwot I2VuZGlmIC8qIElSSVg1MSAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlmIC8qIF9fRnJl ZUJTRF9fICovCi0jZW5kaWYgLyogX18zODZCU0RfXyAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0j ZW5kaWYgLyogQUlYUlMgKi8KLSNlbmRpZiAvKiBMRkRFVk5PICovCQkJLyogLi4uIGRlZmluZSBp dCBoZXJlIG9yIG9uIENDICovCi0jZW5kaWYgLyogTk9MRkRFVk5PICovCi0jZW5kaWYgLyogU1ZS NCAqLwkJCS8qIGNvbW1hbmQgbGluZS4gKi8KLQotI2lmZGVmIENPSEVSRU5UCi0jZGVmaW5lIExG REVWTk8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0vKgotICBGb3IgcGxhdGZvcm1zIHdoZXJl IHRoZSBsb2NrZmlsZSBuYW1lIGlzIG1hZGUgZnJvbSBkZXZpY2UvbWFqb3IvbWlub3IKLSAgZGV2 aWNlIG51bWJlciwgYXMgaW4gU1ZSNC4gIFdoaWNoLCBpZiB3ZSBtdXN0IGhhdmUgbG9ja2ZpbGVz IGF0IGFsbCwgaXMKLSAgYnkgZmFyIHRoZSBiZXN0IGZvcm1hdCwgc2luY2UgaXQgZWxpbWluYXRl cyBhbGwgdGhlIGNvbmZ1c2lvbiB0aGF0IHN0ZW1zCi0gIGZyb20gbXVsdGlwbGUgbmFtZXMgKG9y IGRyaXZlcnMpIGZvciB0aGUgc2FtZSBwb3J0LCBub3QgdG8gbWVudGlvbgotICBzeW1saW5rcy4g IEl0IG1pZ2h0IGV2ZW4gYmUgYSBnb29kIGlkZWEgdG8gc3RhcnQgdXNpbmcgdGhpcyBmb3JtIGV2 ZW4KLSAgb24gcGxhdGZvcm1zIHdoZXJlIGl0J3Mgbm90IHN1cHBvcnRlZCwgYWxvbmdzaWRlIHRo ZSBub3JtYWwgZm9ybXMgZm9yIHRob3NlCi0gIHBsYXRmb3JtcywgaW4gb3JkZXIgdG8gZ2V0IHBl b3BsZSB1c2VkIHRvIGl0Li4uCi0qLwotI2lmZGVmIExGREVWTk8KLSNpZm5kZWYgbWFqb3IJCQkJ LyogSWYgd2UgZGlkbid0IGZpbmQgaXQgKi8KLSNpZmRlZiBTVlI0CQkJCS8qIHRoZW4gZm9yIFN5 cyBWIFI0ICovCi0jaW5jbHVkZSA8c3lzL21rZGV2Lmg+CQkJLyogbG9vayBoZXJlICovCi0jZWxz ZQkJCQkJLyogb3IgZm9yIFN1bk9TIHZlcnNpb25zICovCi0jaWZkZWYgU1VOT1M0CQkJCS8qIC4u LiAqLwotI2luY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4JCS8qIGxvb2sgaGVyZSAqLwotI2Vsc2UJ CQkJCS8qIE90aGVyd2lzZSB0YWtlIGEgY2hhbmNlOiAqLwotI2RlZmluZQltYWpvcihkZXYpICgg KGludCkgKCAoKHVuc2lnbmVkKShkZXYpID4+IDgpICYgMHhmZikpCi0jZGVmaW5lCW1pbm9yKGRl dikgKCAoaW50KSAoIChkZXYpICYgMHhmZikpCi0jZW5kaWYgLyogU1VOT1M0ICovCi0jZW5kaWYg LyogU1ZSNCAqLwotI2VuZGlmIC8qIG1ham9yICovCi0jZW5kaWYgLyogTEZERVZOTyAqLwotCi0v KiBObyBhZHZpc29yeSBsb2NrcyBpZiBGX1RMT0NLIGFuZCBGX1VMT0NLIGFyZSBub3QgZGVmaW5l ZCBhdCB0aGlzIHBvaW50ICovCi0KLSNpZmRlZiBMT0NLRgotI2lmbmRlZiBGX1RMT0NLCi0jdW5k ZWYgTE9DS0YKLSNpZm5kZWYgTk9MT0NLRgotI2RlZmluZSBOT0xPQ0tGCi0jZW5kaWYgLyogTk9M T0NLRiAqLwotI2VuZGlmIC8qIEZfVExPQ0sgKi8KLSNlbmRpZiAvKiBMT0NLRiAqLwotCi0jaWZk ZWYgTE9DS0YKLSNpZm5kZWYgRl9VTE9DSwotI3VuZGVmIExPQ0tGCi0jaWZuZGVmIE5PTE9DS0YK LSNkZWZpbmUgTk9MT0NLRgotI2VuZGlmIC8qIE5PTE9DS0YgKi8KLSNlbmRpZiAvKiBGX1VMT0NL ICovCi0jZW5kaWYgLyogTE9DS0YgKi8KLQotc3RhdGljIGNoYXIgbGlua3RvW0RFVk5BTUxFTisx XTsKLXN0YXRpYyBjaGFyICogbGlua2RldiA9IE5VTEw7Ci0KLSNpZm5kZWYgTk9VVUNQCi0jaWZk ZWYgVVNFVFRZTE9DSwotI2lmZGVmIExPQ0tfRElSCi1jaGFyICogdXVjcGxvY2tkaXIgPSBMT0NL X0RJUjsKLSNlbHNlCi1jaGFyICogdXVjcGxvY2tkaXIgPSAiIjsKLSNlbmRpZiAvKiBMT0NLX0RJ UiAqLwotI2Vsc2UKLSNpZmRlZiBMT0NLX0RJUgotY2hhciAqIHV1Y3Bsb2NrZGlyID0gTE9DS19E SVI7Ci0jZWxzZQotY2hhciAqIHV1Y3Bsb2NrZGlyID0gIiI7Ci0jZW5kaWYgLyogTE9DS19ESVIg Ki8KLSNlbmRpZiAvKiBVU0VUVFlMT0NLICovCi0jZWxzZQotY2hhciAqIHV1Y3Bsb2NrZGlyID0g IiI7Ci0jZW5kaWYgLyogTk9VVUNQICovCi0KLSNpZmRlZiBRTlgJCQkJLyogT25seSBmb3IgUU5Y NCAqLwotaW50CQkJCQkvKiBWaXNpYmxlIHRvIG91dHNpZGUgd29ybGQgKi8KLXFueG9wZW5jb3Vu dCgpIHsJCQkvKiBHZXQgUU5YIGRldmljZSBvcGVuIGNvdW50ICovCi0gICAgc3RydWN0IF9kZXZf aW5mb19lbnRyeSBpbmZvOwotICAgIGludCB4OwotCi0gICAgeCA9IC0xOwkJCQkvKiBVbmtub3du ICovCi0gICAgaWYgKHR0eWZkID4gLTEpIHsKLQlpZiAoIWRldl9pbmZvKHR0eWZkLCAmaW5mbykp IHsKLQkgICAgZGVidWcoRjEwMSwidHRsb2NrIFFOWCBvcGVuX2NvdW50IiwiIixpbmZvLm9wZW5f Y291bnQpOwotCSAgICB4ID0gaW5mby5vcGVuX2NvdW50OwotCX0KLSAgICB9Ci0gICAgcmV0dXJu KHgpOwotfQotI2VuZGlmIC8qIFFOWCAqLwotCi1jaGFyICoKLXR0Z2xja2RpcigpIHsJCQkJLyog R2V0IExvY2tmaWxlIGRpcmVjdG9yeSBuYW1lICovCi0jaWZkZWYgX19PcGVuQlNEX18KLSAgICBy ZXR1cm4oIi92YXIvc3Bvb2wvbG9jayIpOwotI2Vsc2UgLyogX19PcGVuQlNEX18gKi8KLSNpZmRl ZiBfX0ZyZWVCU0RfXwotICAgIHJldHVybigiL3Zhci9zcG9vbC9sb2NrIik7Ci0jZWxzZSAgLyog X19GcmVlQlNEX18gKi8KLSNpZmRlZiBMT0NLX0RJUgotICAgIGNoYXIgKiBzID0gTE9DS19ESVI7 Ci0jZW5kaWYgLyogTE9DS19ESVIgKi8KLSNpZmRlZiBOT1VVQ1AKLSAgICByZXR1cm4oIiIpOwot I2Vsc2UgIC8qIE5PVVVDUCAqLwotI2lmZGVmIExPQ0tfRElSCi0gICAgcmV0dXJuKHMpOwotI2Vs c2UgIC8qIExPQ0tfRElSICovCi0gICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBMT0NLX0RJUiAq LwotI2VuZGlmIC8qIE5PVVVDUCAqLwotI2VuZGlmIC8qIF9fRnJlZUJTRF9fICovCi0jZW5kaWYg LyogX19PcGVuQlNEX18gKi8KLX0KLQotc3RhdGljIGludAotdHRsb2NrKHR0ZGV2KSBjaGFyICp0 dGRldjsgewotCi0gICAgaW50IHgsIG47Ci0gICAgaW50IGlzbGluayA9IDA7Ci0jaWZkZWYgX19G cmVlQlNEX18KLSAgICBjaGFyICpkZXZuYW1lOwotI2VuZGlmCS8qIF9fRnJlZUJTRF9fICovCi0K LSNpZmRlZiBOT1VVQ1AKLSAgICBkZWJ1ZyhGMTAwLCJ0dGxvY2sgTk9VVUNQIiwiIiwwKTsKLSAg ICBja3N0cm5jcHkoZmxmbmFtLCJOT0xPQ0siLEZMRk5BTUwpOwotICAgIGhhc2xvY2sgPSAxOwot ICAgIHJldHVybigwKTsKLSNlbHNlIC8qICFOT1VVQ1AgKi8KLQotI2lmZGVmIFVTRVRUWUxPQ0sK LSAgICBoYXNsb2NrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgbG9ja2VkIHll dC4gKi8KLSAgICAqZmxmbmFtID0gJ1wwJzsJCQkvKiBMb2NrZmlsZSBuYW1lIGlzIGVtcHR5LiAq LwotI2lmZGVmIF9fRnJlZUJTRF9fCi0gICAgaWYgKChkZXZuYW1lID0geHhsYXN0KHR0ZGV2LCcv JykpICE9IE5VTEwpCi0jaWZkZWYgRlJFRUJTRDgKLSAgICAgIGNrc3RybmNhdChsb2NrbmFtZSxk ZXZuYW1lKzEsREVWTkFNTEVOLWNrc3RybmNweShsb2NrbmFtZSwicHRzIiw0KSk7Ci0jZWxzZQot ICAgICAgY2tzdHJuY3B5KGxvY2tuYW1lLGRldm5hbWUrMSxERVZOQU1MRU4pOwotI2VuZGlmCS8q IEZSRUVCU0Q4ICovCi0jZWxzZQotICAgIGlmICghc3RybmNtcCh0dGRldiwiL2Rldi8iLDUpICYm IHR0ZGV2WzVdKQotICAgICAgY2tzdHJuY3B5KGxvY2tuYW1lLHR0ZGV2KzUsREVWTkFNTEVOKTsK LSNlbmRpZgkvKiBfX0ZyZWVCU0RfXyAqLwotICAgIGVsc2UKLSAgICAgIGNrc3RybmNweShsb2Nr bmFtZSx0dGRldixERVZOQU1MRU4pOwotLyoKLSAgVGhpcyBtaWdodCBiZSBvdmVya2lsbCwgYnV0 IGl0J3Mgbm90IGNsZWFyIGZyb20gdGhlIG1hbiBwYWdlcyB3aGV0aGVyCi0gIHR0eWxvY2soKSBj YW4gYmUgY2FsbGVkIHdpdGhvdXQgY2FsbGluZyB0dHlsb2NrZWQoKSBmaXJzdCwgc2luY2UgdGhl IGRvYwotICBzYXlzIHRoYXQgdHR5bG9ja2VkKCkgcmVtb3ZlcyBhbnkgc3RhbGUgbG9ja2ZpbGVz LCBidXQgaXQgZG9lcyBub3Qgc2F5IHRoaXMKLSAgYWJvdXQgdHR5bG9jaygpLiAgQWxzbyB0aGUg ZG9jcyBkb24ndCBzYXkgd2hhdCB0dHlsb2NrZWQoKSByZXR1cm5zIGluIHRoZQotICBjYXNlIHdo ZW4gaXQgZmluZHMgYW5kIHJlbW92ZXMgYSBzdGFsZSBsb2NrZmlsZS4gIFNvIG9uZSBvciBib3Ro IGNhbGxzIHRvCi0gIHRvIHR0eWxvY2tlZCgpIG1pZ2h0IGJlIHN1cGVyZmx1b3VzLCBidXQgdGhl eSBzaG91bGQgZG8gbm8gaGFybS4gIEFsc28gSSdtCi0gIGFzc3VtaW5nIHRoYXQgd2UgaGF2ZSB0 byBkbyBhbGwgdGhlIHNhbWUgSUQgc3dhcHBpbmcsIGV0Yywgd2l0aCB0aGVzZQotICByb3V0aW5l cyBhcyB3ZSBkbyB3aXRob3V0IHRoZW0uICBUaHVzIHRoZSBwcml2X29uL29mZigpIHNhbmR3aWNo LgotKi8KLSNpZmRlZiBVU0VfVVVfTE9DSwotICAgIHByaXZfb24oKTsJCQkJLyogVHVybiBvbiBw cml2cyAqLwotICAgIHggPSB1dV9sb2NrKGxvY2tuYW1lKTsJCS8qIFRyeSB0byBzZXQgdGhlIGxv Y2sgKi8KLSAgICBwcml2X29mZigpOwkJCQkvKiBUdXJuIHByaXZzIG9mZiAqLwotICAgIGRlYnVn KEYxMTEsInR0bG9jayB1dV9sb2NrIixsb2NrbmFtZSx4KTsKLSAgICBzd2l0Y2ggKHgpIHsKLSAg ICAgIGNhc2UgVVVfTE9DS19JTlVTRToKLQlyZXR1cm4oLTIpOwotICAgICAgY2FzZSBVVV9MT0NL X09LOgotI2lmZGVmIEJTRDQ0Ci0JY2ttYWttc2coZmxmbmFtLEZMRk5BTUwsIi92YXIvc3Bvb2wv bG9jay9MQ0suLiIsbG9ja25hbWUsTlVMTCxOVUxMKTsKLSNlbmRpZiAvKiBCU0Q0NCAqLwotCWhh c2xvY2sgPSAxOwotCXJldHVybigwKTsKLSAgICAgIGRlZmF1bHQ6Ci0JcmV0dXJuKC0xKTsKLSAg ICB9Ci0jZWxzZSAgLyogVVNFX1VVX0xPQ0sgKi8KLSAgICBwcml2X29uKCk7CQkJCS8qIFR1cm4g b24gcHJpdnMgKi8KLSAgICBpZiAodHR5bG9ja2VkKGxvY2tuYW1lKSkgewkJLyogVGhpcyBzaG91 bGQgcmVtb3ZlIGFueSBzdGFsZSBsb2NrICovCi0JaWYgKHR0eWxvY2tlZChsb2NrbmFtZSkpIHsJ Lyogc28gY2hlY2sgYWdhaW4uICovCi0JICAgIHByaXZfb2ZmKCk7Ci0JICAgIHJldHVybigtNSk7 CQkJLyogU3RpbGwgbG9ja2VkLCBmYWlsLiAqLwotCX0KLSAgICB9Ci0gICAgeCA9IHR0eWxvY2so bG9ja25hbWUpOwkJLyogTG9jayBpdC4gKi8KLSAgICBwcml2X29mZigpOwkJCQkvKiBUdXJuIG9m ZiBwcml2cyAqLwotCi0gICAgZGVidWcoRjExMSwidHRsb2NrIGxvY2tuYW1lIixsb2NrbmFtZSx4 KTsKLSAgICBpZiAoeCA+IC0xKSB7Ci0JLyoKLQkgIFdlIGRvbid0IHJlYWxseSBrbm93IHRoZSBu YW1lIG9mIHRoZSBsb2NrZmlsZSwgYnV0Ci0JICB0aGlzIGlzIHdoYXQgdGhlIG1hbiBwYWdlIHNh eXMgaXQgaXMuICBJbiBVU0VUVFlMT0NLCi0gICAgICAgICAgYnVpbGRzLCBpdCBpcyB1c2VkIG9u bHkgZm9yIGRpc3BsYXkgYnkgU0hPVyBDT01NLgotCSovCi0JY2ttYWttc2coZmxmbmFtLEZMRk5B TUwsIi9ldGMvbG9ja3MvTENLLi4iLGxvY2tuYW1lLE5VTEwsTlVMTCk7Ci0JaGFzbG9jayA9IDE7 Ci0gICAgfQotICAgIHJldHVybih4KTsKLSNlbmRpZiAvKiBVU0VfVVVfTE9DSyAqLwotI2Vsc2Ug IC8qIFN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIHR0eWxvY2soKS4uLiAqLwotCi0jaWZuZGVmIEhQ VVgKLQotICAgIGludCBsb2NrZmQ7CQkJCS8qIEZpbGUgZGVzY3JpcHRvciBmb3IgbG9jayBmaWxl LiAqLwotICAgIFBJRF9UIHBpZDsJCQkJLyogUHJvY2VzcyBpZCBvZiB0aGlzIHByb2Nlc3MuICov Ci0gICAgaW50IHRyaWVzOwkJCQkvKiBIb3cgbWFueSB0aW1lcyB3ZSd2ZSB0cmllZC4uLiAqLwot ICAgIHN0cnVjdCBzdGF0IGRldmJ1ZjsJCQkvKiBGb3IgZGV2aWNlIG51bWJlcnMgKFNWUjQpLiAq LwotCi0jaWZkZWYgUElEU1RSSU5HCi0gICAgY2hhciBwaWRfc3RyWzMyXTsJCQkvKiBNeSBwaWQg aW4gc3RyaW5nIGZvcm1hdC4gKi8KLSNlbmRpZiAvKiBQSURTVFJJTkcgKi8KLQotICAgIGNoYXIg KmRldmljZSwgKmRldm5hbWU7Ci0KLSNkZWZpbmUgTEZOQU1MIDI1NgkJCS8qIE1heCBsZW5ndGgg Zm9yIGxvY2sgZmlsZSBuYW1lLiAqLwotICAgIGNoYXIgbG9ja2ZpbFtMRk5BTUxdOwkJLyogTG9j ayBmaWxlIG5hbWUgKi8KLSNpZmRlZiBSVEFJWAotICAgIGNoYXIgbGtsb2NrZltMRk5BTUxdOwkJ LyogTmFtZSBmb3IgbGluayB0byBsb2NrIGZpbGUgICovCi0jZW5kaWYgLyogUlRBSVggKi8KLSNp ZmRlZiBDS1NZTUxJTksKLSAgICBjaGFyIHN5bWxvY2tbTEZOQU1MXTsJCS8qIE5hbWUgZm9yIHN5 bWxpbmsgbG9ja2ZpbGUgbmFtZSAqLwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotICAgIGNoYXIg dG1wbmFtW0xGTkFNTCszMF07CQkvKiBUZW1wb3JhcnkgbG9ja2ZpbGUgbmFtZS4gKi8KLSAgICBj aGFyICpsb2NrZGlyID0gTE9DS19ESVI7CQkvKiBEZWZpbmVkIG5lYXIgdG9wIG9mIHRoaXMgZmls ZSwgKi8KLQkJCQkJLyogb3Igb24gY2MgY29tbWFuZCBsaW5lLiAqLwotICAgIGhhc2xvY2sgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBsb2NrZWQgeWV0LiAqLwotICAgICpmbGZu YW0gPSAnXDAnOwkJCS8qIExvY2tmaWxlIG5hbWUgaXMgZW1wdHkuICovCi0gICAgbG9jazJbMF0g PSAnXDAnOwkJCS8qIENsZWFyIHNlY29uZGFyeSBsb2NrZmlsZSBuYW1lLiAqLwotICAgIHBpZCA9 IGdldHBpZCgpOwkJCS8qIEdldCBpZCBvZiB0aGlzIHByb2Nlc3MuICovCi0KLS8qICBDb25zdHJ1 Y3QgbmFtZSBvZiBsb2NrZmlsZSBhbmQgdGVtcG9yYXJ5IGZpbGUgKi8KLQotLyogIGRldmljZSAg PSBuYW1lIG9mIHR0eSBkZXZpY2Ugd2l0aG91dCB0aGUgcGF0aCwgZS5nLiAidHR5aDgiICovCi0v KiAgbG9ja2ZpbCA9IG5hbWUgb2YgbG9jayBmaWxlLCB3aXRob3V0IHBhdGgsIGUuZy4gIkxDSy4u dHR5aDgiICovCi0KLSAgICBkZXZpY2UgPSAoKGRldm5hbWUgPSB4eGxhc3QodHRkZXYsJy8nKSkg IT0gTlVMTCA/IGRldm5hbWUrMSA6IHR0ZGV2KTsKLQotICAgIGlmIChzdGF0KHR0ZGV2LCZkZXZi dWYpIDwgMCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSNpZmRlZiBDS1NZTUxJTksKLSAgICBpc2xp bmsgPSAxOwkJCQkvKiBBc3N1bWUgaXQncyBhIHN5bWxpbmsgKi8KLSAgICBsaW5rdG9bMF0gPSAn XDAnOwkJCS8qIEJ1dCB3ZSBkb24ndCBrbm93IHRvIHdoYXQgKi8KLSNpZmRlZiBDT01NRU5UCi0v KgotICBUaGlzIGlzIHVuZGVwZW5kYWJsZS4gIElmIGl0IHdvcmtlZCBpdCB3b3VsZCBzYXZlIHRo ZSByZWFkbGluayBjYWxsIGlmCi0gIHdlIGtuZXcgdGhlIGRldmljZSBuYW1lIHdhcyBub3QgYSBs aW5rLgotKi8KLSNpZmRlZiBTX0lTTE5LCi0gICAgaXNsaW5rID0gU19JU0xOSyhkZXZidWYuc3Rf bW9kZSk7Ci0gICAgZGVidWcoRjEwMSwidHRsb2NrIHN0YXQgU19JU0xOSyIsIiIsaXNsaW5rKTsK LSNlbmRpZiAvKiBTX0lTTE5LICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGlmIChpc2xp bmspIHsKLQluID0gcmVhZGxpbmsodHRkZXYsbGlua3RvLERFVk5BTUxFTik7IC8qIFNlZSBpZiBp dCdzIGEgbGluayAqLwotCWRlYnVnKEYxMTEsInR0bG9jayByZWFkbGluayIsdHRkZXYsbik7Ci0J aWYgKG4gPiAtMSkJCQkvKiBJdCBpcyAqLwotCSAgbGlua3RvW25dID0gJ1wwJzsKLQllbHNlCQkJ CS8qIEl0J3Mgbm90ICovCi0JICBpc2xpbmsgPSAwOwotCWRlYnVnKEYxMTEsInR0bG9jayBsaW5r IixsaW5rdG8saXNsaW5rKTsKLSAgICB9Ci0gICAgaWYgKGlzbGluaykgewotCWxpbmtkZXYgPSAo ZGV2bmFtZSA9IHh4bGFzdChsaW5rdG8sJy8nKSkgPyBkZXZuYW1lICsgMSA6IGxpbmt0bzsKLQlk ZWJ1ZyhGMTEwLCJ0dGxvY2sgbGlua2RldiIsbGlua2RldiwwKTsKLSAgICB9Ci0jZW5kaWYgLyog Q0tTWU1MSU5LICovCi0KLS8qCi0gIE9uIFNDTyBwbGF0Zm9ybXMsIGlmIHdlIGRvbid0IGhhdmUg YSBzeW1saW5rLCB0aGVuIGxldCdzIHByZXRlbmQgdGhlCi0gIG5hbWUgZ2l2ZW4gZm9yIHRoZSBk ZXZpY2UgaXMgYSBzeW1saW5rLCBiZWNhdXNlIGxhdGVyIHdlIHdpbGwgY2hhbmdlCi0gIHRoZSBu YW1lIGlmIGl0IGNvbnRhaW5zIGFueSB1cHBlcmNhc2UgY2hhcmFjdGVycy4KLSovCi0jaWZkZWYg Q0tfU0NPVjUJCQkJLyogU0NPIE9wZW4gU2VydmVyIDUuMCAqLwotICAgIGlmICghaXNsaW5rKSB7 Ci0JaXNsaW5rID0gMTsKLQlja3N0cm5jcHkobGlua3RvLHR0ZGV2LERFVk5BTUxFTik7Ci0JbGlu a2RldiA9IChkZXZuYW1lID0geHhsYXN0KGxpbmt0bywnLycpKSA/IGRldm5hbWUgKyAxIDogbGlu a3RvOwotCWRlYnVnKEYxMTAsInR0bG9jayBsaW5rZGV2IixsaW5rZGV2LDApOwotICAgIH0KLSNl bHNlCi0jaWZkZWYgTV9YRU5JWAkJCQkvKiBTQ08gWGVuaXggb3IgVU5JWCAqLwotICAgIGlmICgh aXNsaW5rKSB7Ci0JaXNsaW5rID0gMTsKLQlja3N0cm5jcHkobGlua3RvLHR0ZGV2LERFVk5BTUxF Tik7Ci0JbGlua2RldiA9IChkZXZuYW1lID0geHhsYXN0KGxpbmt0bywnLycpKSA/IGRldm5hbWUg KyAxIDogbGlua3RvOwotCWRlYnVnKEYxMTAsInR0bG9jayBsaW5rZGV2IixsaW5rZGV2LDApOwot ICAgIH0KLSNlbmRpZiAvKiBNX1hFTklYICovCi0jZW5kaWYgLyogQ0tfU0NPVjUgKi8KLQotI2lm ZGVmIElTSUlJCQkJCS8qIEludGVyYWN0aXZlIFN5c3RlbSBJSUksIFBDL0lYICovCi0gICAgY2tz dHJuY3B5KGxvY2tmaWwsIGRldmljZSwgREVWTkFNTEVOKTsKLSNlbHNlICAvKiBub3QgSVNJSUkg Ki8KLSNpZmRlZiBMRkRFVk5PCQkJCS8qIExvY2tmaWxlbmFtZSBoYXMgZGV2aWNlIG51bWJlcnMu ICovCi0jaWZkZWYgQ09IRVJFTlQKLSAgICBzcHJpbnRmKGxvY2tmaWwsIkxDSy4uJWQuJWQiLAkv KiBTQUZFICovCi0JICAgIG1ham9yKGRldmJ1Zi5zdF9yZGV2KSwJICAgLyogbWFqb3IgZGV2aWNl IG51bWJlciAqLwotCSAgICAweDFmICYgbWlub3IoZGV2YnVmLnN0X3JkZXYpKTsgLyogbWlub3Ig ZGV2aWNlIG51bWJlciAqLwotI2Vsc2UKLSAgICAvKiBOb3RlOiAlZCBjaGFuZ2VkIHRvICV1IGlu IDguMCAtLSAldSBpcyBwYXJ0IG9mIFNWSUQgZm9yIFNWUjQgKi8KLSAgICAvKiBMb2NrZmlsZSBu YW1lIGZvcm1hdCB2ZXJpZmllZCB0byBhZ3JlZSB3aXRoIFNvbGFyaXMgY3UsIERlYyAyMDAxICov Ci0gICAgc3ByaW50Zihsb2NrZmlsLCJMSy4lMDN1LiUwM3UuJTAzdSIsIC8qIFNBRkUgKi8KLQkg ICAgbWFqb3IoZGV2YnVmLnN0X2RldiksCS8qIGRldmljZSAqLwotCSAgICBtYWpvcihkZXZidWYu c3RfcmRldiksCS8qIG1ham9yIGRldmljZSBudW1iZXIgKi8KLQkgICAgbWlub3IoZGV2YnVmLnN0 X3JkZXYpKTsJLyogbWlub3IgZGV2aWNlIG51bWJlciAqLwotI2VuZGlmIC8qIENPSEVSRU5UICov Ci0jZWxzZSAgLyogTm90IExGREVWTk8gKi8KLSNpZmRlZiBQVFgJCQkJLyogRHluaXggUFRYICov Ci0gICAgaWYgKChkZXZpY2UgIT0gJnR0ZGV2WzVdKSAmJiAoc3RybmNtcCh0dGRldiwiL2Rldi8i LDUpID09IDApKSB7Ci0JaWYgKChpbnQpc3RybGVuKGRldmljZSkgKyA4IDwgTEZOQU1MKQotCSAg c3ByaW50Zihsb2NrZmlsLCJMQ0suLiUuM3MlcyIsICZ0dGRldls1XSwgZGV2aWNlKTsKLQllbHNl Ci0JICBja3N0cm5jcHkobG9ja2ZpbCwiTE9DS0ZJTEVfTkFNRV9UT09fTE9ORyIsTEZOQU1MKTsK LSAgICB9IGVsc2UKLSNlbmRpZiAvKiBQVFggKi8KLSAgICAgIGlmICgoaW50KXN0cmxlbihkZXZp Y2UpICsgNSA8IExGTkFNTCkKLQlzcHJpbnRmKGxvY2tmaWwsIkxDSy4uJXMiLCBkZXZpY2UpOwot ICAgICAgZWxzZQotCWNrc3RybmNweShsb2NrZmlsLCJMT0NLRklMRV9OQU1FX1RPT19MT05HIixM Rk5BTUwpOwotI2lmZGVmIFJUQUlYCi0gICAgY2tzdHJuY3B5KGxrbG9ja2YsZGV2aWNlLERFVk5B TUxFTik7Ci0jZW5kaWYgLyogUlRBSVggKi8KLSNpZmRlZiBDS1NZTUxJTksKLSAgICBzeW1sb2Nr WzBdID0gJ1wwJzsKLSAgICBpZiAoaXNsaW5rKQotICAgICAgY2ttYWttc2coc3ltbG9jayxMRk5B TUwsICJMQ0suLiIsIGxpbmtkZXYsIE5VTEwsIE5VTEwpOwotI2VuZGlmIC8qIENLU1lNTElOSyAq LwotI2VuZGlmIC8qIExGREVWTk8gKi8KLSNlbmRpZiAvKiBJU0lJSSAqLwotCi0jaWZkZWYgQ0tf U0NPVjUJCQkJLyogU0NPIE9wZW4gU2VydmVyIDUuMCAqLwotICAgIHsKLQkvKiBMb3dlcmNhc2Ug dGhlIGVudGlyZSBmaWxlbmFtZS4gKi8KLSAgICAgICAgLyogU0NPIHNheXMgd2UgbXVzdCBkbyB0 aGlzIGluIFY1LjAgYW5kIGxhdGVyLiAqLwotCS8qIEJVVC4uLiB3YXRjaCBvdXQgZm9yIGRldmlj ZXMgLS0gbGlrZSBEaWdpYm9hcmQgUG9ydHNlcnZlciAqLwotCS8qIFRoYXQgY2FuIGhhdmUgaHVu ZHJlZHMgb2YgcG9ydHMuLi4gKi8KLQljaGFyICpwID0gKGNoYXIgKikobG9ja2ZpbCArIDUpOwot CXdoaWxlICgqcCkgeyBpZiAoaXN1cHBlcigqcCkpICpwID0gKGNoYXIpIHRvbG93ZXIoKnApOyBw Kys7IH0KLSAgICB9Ci0jaWZkZWYgQ0tTWU1MSU5LCi0gICAgaWYgKGlzbGluaykgewkJCS8qIElm IG5vIGNoYW5nZSAqLwotCWlmICghc3RyY21wKGxvY2tmaWwsc3ltbG9jaykpIHsJLyogdGhlbiBu byBzZWNvbmQgbG9ja2ZpbGUgbmVlZGVkICovCi0JICAgIGlzbGluayA9IDA7Ci0JICAgIHN5bWxv Y2tbMF0gPSAnXDAnOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0jZWxzZQot I2lmZGVmIE1fWEVOSVgJCQkJLyogU0NPIFhlbml4IG9yIFVOSVggKi8KLSAgICB7Ci0JaW50IHg7 IGNoYXIgYzsKLQl4ID0gKGludClzdHJsZW4obG9ja2ZpbCkgLSAxOwkvKiBHZXQgbGFzdCBsZXR0 ZXIgb2YgZGV2aWNlIG5hbWUuICovCi0JaWYgKHggPiAwKSB7CQkJLyogSWYgaXQncyB1cHBlcmNh c2UsIGxvd2VyIGl0LiAqLwotCSAgICBjID0gbG9ja2ZpbFt4XTsKLQkgICAgaWYgKGMgPj0gJ0En ICYmIGMgPD0gJ1onKSBsb2NrZmlsW3hdICs9ICgnYScgLSAnQScpOwotCX0KLSAgICB9Ci0jaWZk ZWYgQ0tTWU1MSU5LCi0gICAgaWYgKGlzbGluaykgewotCWlmICghc3RyY21wKGxvY2tmaWwsc3lt bG9jaykpIHsJLyogTm8gY2hhbmdlICovCi0JICAgIGlzbGluayA9IDA7CQkJLyogc28gbm8gc2Vj b25kIGxvY2tmaWxlICovCi0JICAgIHN5bWxvY2tbMF0gPSAnXDAnOwotCX0KLSAgICB9Ci0jZW5k aWYgLyogQ0tTWU1MSU5LICovCi0jZW5kaWYgLyogTV9YRU5JWCAqLwotI2VuZGlmIC8qIENLX1ND T1Y1ICovCi0KLS8qICBmbGZuYW0gPSBmdWxsIGxvY2tmaWxlIHBhdGhuYW1lLCBlLmcuICIvdXNy L3Nwb29sL3V1Y3AvTENLLi50dHloOCIgKi8KLS8qICB0bXBuYW0gPSB0ZW1wb3JhcnkgdW5pcXVl LCBlLmcuICIvdXNyL3Nwb29sL3V1Y3AvTFRNUC4ucGlkIiAqLwotCi0gICAgY2ttYWttc2coZmxm bmFtLExGTkFNTCxsb2NrZGlyLCIvIixsb2NrZmlsLE5VTEwpOwotCi0jaWZkZWYgUlRBSVgKLSAg ICBja21ha21zZyhsa2ZsZm4sRkxGTkFNTCxsb2NrZGlyLCIvIixsa2xvY2tmLE5VTEwpOwotI2Vu ZGlmIC8qIFJUQUlYICovCi0KLSNpZm5kZWYgTEZERVZOTwotI2lmZGVmIENLU1lNTElOSwotICAg IC8qIElmIGl0J3MgYSBsaW5rIHRoZW4gYWxzbyBtYWtlIGEgbG9ja2ZpbGUgZm9yIHRoZSByZWFs IG5hbWUgKi8KLSAgICBkZWJ1ZyhGMTExLCJ0dGxvY2sgbGluayBzeW1sb2NrIixzeW1sb2NrLGlz bGluayk7Ci0gICAgaWYgKGlzbGluayAmJiBzeW1sb2NrWzBdKSB7Ci0JLyogQnV0IG9ubHkgaWYg dGhlIGxvY2tmaWxlIG5hbWVzIHdvdWxkIGJlIGRpZmZlcmVudC4gKi8KLQkvKiBXQVJOSU5HOiBU aGV5IHdvbid0IGJlLCBlLmcuIGZvciAvZGV2L3R0eWQyID0+IC9ody90dHlzL3R0eWQyICovCi0J Y2ttYWttc2cobG9jazIsRkxGTkFNTCxsb2NrZGlyLCIvIixzeW1sb2NrLE5VTEwpOwotCWRlYnVn KEYxMTAsInR0bG9jayBsb2NrMiIsbG9jazIsMCk7Ci0JaWYgKCFzdHJjbXAobG9jazIsZmxmbmFt KSkgewkvKiBBcmUgbG9ja2ZpbGUgbmFtZXMgdGhlIHNhbWU/ICovCi0JICAgIGRlYnVnKEYxMDAs InR0bG9jayBsb2NrMiBjbGVhcmVkIiwiIiwwKTsKLQkgICAgbG9jazJbMF0gPSAnXDAnOwkJLyog Q2xlYXIgc2Vjb25kYXJ5IGxvY2tmaWxlIG5hbWUuICovCi0JfQotICAgIH0KLSNlbmRpZiAvKiBD S1NZTUxJTksgKi8KLSNlbmRpZiAvKiBMRkRFVk5PICovCi0KLSAgICBzcHJpbnRmKHRtcG5hbSwi JXMvTFRNUC4lMDVkIixsb2NrZGlyLChpbnQpIHBpZCk7IC8qIHNhZmUgKi8KLSAgICBkZWJ1ZyhG MTEwLCJ0dGxvY2sgZmxmbmFtIixmbGZuYW0sMCk7Ci0gICAgZGVidWcoRjExMCwidHRsb2NrIHRt cG5hbSIsdG1wbmFtLDApOwotCi0gICAgcHJpdl9vbigpOwkJCQkvKiBUdXJuIG9uIHByaXZpbGVn ZXMgaWYgcG9zc2libGUuICovCi0gICAgbG9ja2ZkID0gY3JlYXQodG1wbmFtLCAwNDQ0KTsJLyog VHJ5IHRvIGNyZWF0ZSB0ZW1wIGxvY2sgZmlsZS4gKi8KLSAgICBpZiAobG9ja2ZkIDwgMCkgewkJ CS8qIENyZWF0ZSBmYWlsZWQuICovCi0JZGVidWcoRjExMSwidHRsb2NrIGNyZWF0IGZhaWxlZCIs dG1wbmFtLGVycm5vKTsKLQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7Ci0JICAgIHBlcnJvcihsb2Nr ZGlyKTsKLQkgICAgcHJpbnRmKCJVVUNQIG5vdCBpbnN0YWxsZWQgb3IgS2VybWl0IG1pc2NvbmZp Z3VyZWRcbiIpOwotCX0gZWxzZSB7Ci0JICAgIGlmICghcXVpZXQpCi0JICAgICAgcGVycm9yKGxv Y2tkaXIpOwotCSAgICB1bmxpbmsodG1wbmFtKTsJCS8qIEdldCByaWQgb2YgdGhlIHRlbXBvcmFy eSBmaWxlLiAqLwotCX0KLQlwcml2X29mZigpOwkJCS8qIFR1cm4gb2ZmIHByaXZpbGVnZXMhISEg Ki8KLQlyZXR1cm4oLTEpOwkJCS8qIFJldHVybiBmYWlsdXJlIGNvZGUuICovCi0gICAgfQotLyog Tm93IHdyaXRlIHRoZSBwaWQgaW50byB0aGUgdGVtcCBsb2NrZmlsZSBpbiB0aGUgYXBwcm9wcmlh dGUgZm9ybWF0ICovCi0KLSNpZmRlZiBQSURTVFJJTkcJCQkvKiBGb3IgSG9uZXkgRGFuQmVyIFVV Q1AsICovCi0gICAgc3ByaW50ZigJCQkJLyogd3JpdGUgUElEIGFzIGRlY2ltYWwgc3RyaW5nICov Ci0JICAgIHBpZF9zdHIsCi0jaWZkZWYgTElOVVhGU1NUTkQJCQkvKiBUaGUgIkxpbnV4IEZpbGUg U3lzdGVtIFN0YW5kYXJkIiAqLwotI2lmZGVmIEZTU1RORDEwCQkJCS8qIFZlcnNpb24gMS4wIGNh bGxzIGZvciAqLwotCSAgICAiJTAxMGRcbiIsCQkJLyogbGVhZGluZyB6ZXJvcyAqLwotI2Vsc2UJ CQkJCS8qIHdoaWxlIHZlcnNpb24gMS4yIGNhbGxzIGZvciAqLwotCSAgICAiJTEwZFxuIiwJCQkv KiBsZWFkaW5nIHNwYWNlcyAqLwotI2VuZGlmIC8qIEZTU1RORDEwICovCi0jZWxzZQotI2lmZGVm IENPSEVSRU5UCi0JICAgICIlZFxuIiwJCQkvKiB3aXRoIGxlYWRpbmcgbm90aGluZyAqLwotI2Vs c2UKLQkgICAgIiUxMGRcbiIsCQkJLyogd2l0aCBsZWFkaW5nIGJsYW5rcyAqLwotI2VuZGlmIC8q IENPSEVSRU5UICovCi0jZW5kaWYgLyogTElOVVhGU1NUTkQgKi8KLQkgICAgKGludCkgcGlkCi0J ICAgICk7CQkJCS8qIHNhZmUgKi8KLSAgICB3cml0ZShsb2NrZmQsIHBpZF9zdHIsIDExKTsKLSAg ICBkZWJ1ZyhGMTExLCJ0dGxvY2sgaGRiIHBpZCBzdHJpbmciLHBpZF9zdHIsKGludCkgcGlkKTsK LQotI2Vsc2UgLyogTm90IFBJRFNUUklORywgdXNlIGludGVnZXIgUElEICovCi0KLSAgICB3cml0 ZShsb2NrZmQsIChjaGFyICopJnBpZCwgc2l6ZW9mKHBpZCkgKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0 dGxvY2sgcGlkIiwiIiwoaW50KSBwaWQpOwotCi0jZW5kaWYgLyogUElEU1RSSU5HICovCi0KLS8q IE5vdyB0cnkgdG8gcmVuYW1lIHRoZSB0ZW1wIGZpbGUgdG8gdGhlIHJlYWwgbG9jayBmaWxlIG5h bWUuICovCi0vKiBUaGlzIHdpbGwgZmFpbCBpZiBhIGxvY2sgZmlsZSBvZiB0aGF0IG5hbWUgYWxy ZWFkeSBleGlzdHMuICAqLwotCi0gICAgY2xvc2UobG9ja2ZkKTsJCQkvKiBDbG9zZSB0aGUgdGVt cCBsb2NrZmlsZS4gKi8KLSAgICBjaG1vZCh0bXBuYW0sMDQ0NCk7CQkJLyogUGVybWlzc2lvbiBm b3IgYSB2YWxpZCBsb2NrLiAqLwotICAgIHRyaWVzID0gMDsKLSAgICB3aGlsZSAoIWhhc2xvY2sg JiYgdHJpZXMrKyA8IDIpIHsKLQloYXNsb2NrID0gKGxpbmsodG1wbmFtLGZsZm5hbSkgPT0gMCk7 IC8qIENyZWF0ZSBhIGxpbmsgdG8gaXQuICovCi0JaWYgKGhhc2xvY2spIHsJCQkgICAgICAvKiBJ ZiB3ZSBnb3QgdGhlIGxvY2tmaWxlICovCi0jaWZkZWYgUlRBSVgKLQkgICAgbGluayhmbGZuYW0s bGtmbGZuKTsKLSNlbmRpZiAvKiBSVEFJWCAqLwotI2lmZGVmIENLU1lNTElOSwotI2lmbmRlZiBM RkRFVk5PCi0JICAgIGlmIChpc2xpbmsgJiYgbG9jazJbMF0pCi0JICAgICAgbGluayhmbGZuYW0s bG9jazIpOwotI2VuZGlmIC8qIExGREVWTk8gKi8KLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLQot I2lmZGVmIENPTU1FTlQKLS8qIENhbid0IGRvIHRoaXMgYW55IG1vcmUgYmVjYXVzZSBkZXZpY2Ug aXMgbm90IG9wZW4geWV0IHNvIG5vIHR0eWZkLiAqLwotI2lmZGVmIExPQ0tGCi0vKgotICBBZHZp c29yeSBmaWxlIGxvY2tpbmcgd29ya3Mgb24gU1ZSNCwgc28gd2UgdXNlIGl0LiAgSW4gZmFjdCwg aXQgaXMKLSAgbmVjZXNzYXJ5IGluIHNvbWUgY2FzZXMsIGUuZy4gd2hlbiBTTElQIGlzIGludm9s dmVkLiAgQnV0IGl0IHN0aWxsIGRvZXNuJ3QKLSAgc2VlbSB0byBwcmV2ZW50IG11bHRpcGxlIHVz ZXJzIGFjY2Vzc2luZyB0aGUgc2FtZSBkZXZpY2UgYnkgZGlmZmVyZW50IG5hbWVzLgotKi8KLSAg ICAgICAgICAgIHdoaWxlIChsb2NrZih0dHlmZCwgRl9UTE9DSywgMEwpICE9IDApIHsKLSAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTExLCAidHRsb2NrIGxvY2tmIHJldHVybnMgZXJybm8iLCAiIiwg ZXJybm8pOwotICAgICAgICAgICAgICAgIGlmICgoKyt0cmllcyA+PSAzKSB8fCAoZXJybm8gIT0g RUFHQUlOKSkgewotICAgICAgICAgICAgICAgICAgICB4ID0gdW5saW5rKGZsZm5hbSk7IC8qIHJl bW92ZSB0aGUgbG9ja2ZpbGUgKi8KLSNpZmRlZiBSVEFJWAotCQkgICAgdW5saW5rKGxrZmxmbik7 CS8qIEFuZCBhbnkgbGlua3MgdG8gaXQuLi4gKi8KLSNlbmRpZiAvKiBSVEFJWCAqLwotI2lmZGVm IENLU1lNTElOSwotI2lmbmRlZiBMRkRFVk5PCi0JCSAgICBpZiAoaXNsaW5rICYmIGxvY2syWzBd KQotCQkgICAgICB1bmxpbmsobG9jazIpOwkvKiBkaXR0by4uLiAqLwotI2VuZGlmIC8qIExGREVW Tk8gKi8KLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWco RjExMSwidHRsb2NrIHVubGluayIsZmxmbmFtLHgpOwotICAgICAgICAgICAgICAgICAgICBoYXNs b2NrID0gMDsKLQkJICAgIGJyZWFrOwotCQl9Ci0gICAgICAgICAgICAgICAgc2xlZXAoMik7Ci0J ICAgIH0KLQkgICAgaWYgKGhhc2xvY2spCQkvKiBJZiB3ZSBnb3QgYW4gYWR2aXNvcnkgbG9jayAq LwotI2VuZGlmIC8qIExPQ0tGICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICAgIGJyZWFr OwkJCS8qIFdlJ3JlIGRvbmUuICovCi0KLQl9IGVsc2UgewkJCS8qIFdlIGRpZG4ndCBjcmVhdGUg YSBuZXcgbG9ja2ZpbGUuICovCi0JICAgIHByaXZfb2ZmKCk7Ci0JICAgIGlmICh0dGNoa3BpZChm bGZuYW0pKSB7CS8qIENoZWNrIGV4aXN0aW5nIGxvY2tmaWxlICovCi0JCXByaXZfb24oKTsJCS8q IGNhdXNlIHR0Y2hrcGlkIHR1cm5zIHByaXZfb2ZmLi4uICovCi0JCXVubGluayh0bXBuYW0pOwkJ LyogRGVsZXRlIHRoZSB0ZW1wZmlsZSAqLwotCQlkZWJ1ZyhGMTAwLCJ0dGxvY2sgZm91bmQgdHR5 IGxvY2tlZCIsIiIsMCk7Ci0JCXByaXZfb2ZmKCk7CQkvKiBUdXJuIG9mZiBwcml2cyAqLwotCQly ZXR1cm4oLTIpOwkJLyogQ29kZSBmb3IgZGV2aWNlIGlzIGluIHVzZS4gKi8KLQkgICAgfQotCSAg ICBwcml2X29uKCk7Ci0JfQotICAgIH0KLSAgICB1bmxpbmsodG1wbmFtKTsJCQkvKiBVbmxpbmsg KHJlbW92ZSkgdGhlIHRlbXAgZmlsZS4gKi8KLSAgICBwcml2X29mZigpOwkJCQkvKiBUdXJuIG9m ZiBwcml2cyAqLwotICAgIHJldHVybihoYXNsb2NrID8gMCA6IC0xKTsJCS8qIFJldHVybiBsaW5r J3MgcmV0dXJuIGNvZGUuICovCi0KLSNlbHNlIC8qIEhQVVggKi8KLQotLyoKLSAgSFAtVVggZ2V0 cyBpdHMgb3duIGNvcHkgb2YgdGhpcyByb3V0aW5lLCBtb2RlbGVkIGFmdGVyIHRoZSBvYnNlcnZl ZCBiZWhhdmlvcgotICBvZiB0aGUgSFAtVVggJ2N1JyBwcm9ncmFtLiAgSFAtVVggc2VyaWFsIGRl dmljZSBuYW1lcyBjb25zaXN0IG9mIGEgYmFzZSBuYW1lCi0gIHN1Y2ggYXMgInR0eSIsICJ0dHlk IiwgImN1YSIsICJjdWwiLCAiY3VhZCIsIG9yICJjdWxkIiwgZm9sbG93ZWQgYnkgYSB1bml0Ci0g IGRlc2lnbmF0b3Igd2hpY2ggaXMgYSBzdHJpbmcgb2YgZGlnaXRzLCBwb3NzaWJseSBjb250YWlu aW5nIGFuIGltYmVkZGVkCi0gIGxldHRlciAicCIuICBFeGFtcGxlcyAoZm9yIGJhc2UgbmFtZSAi dHR5Iik6Ci0KLSAgICAgL2Rldi90dHkwLCAvZGV2L3R0eTAwLCBkZXYvdHR5ZDAwLCAvZGV2L3R0 eTBwMAotCi0gIEFjY29yZGluZyB0byB0aGUgSFAtVVggVVVDUCBtYW51YWwgb2YgMTk4OCwgdGhl ICIwcDAiIG5vdGF0aW9uIGhhcyBiZWVuCi0gIHVzZWQgb24gU2VyaWVzIDgwMCBzaW5jZSBIUC1V WCAyLjAwLCBhbmQgdGhlICJub24tcCIgbm90YXRpb24gd2FzIHVzZWQKLSAgb24gb3RoZXIgbW9k ZWxzLiAgSW4gSFAtVVggMTAuMDAsICIwcDAiIG5vdGF0aW9uIHdhcyBhZG9wdGVkIGZvciBhbGwg bW9kZWxzLgotICBIb3dldmVyLCB3ZSBtYWtlIGFuZCBlbmZvcmNlIG5vIHN1Y2ggZGlzdGluY3Rp b25zOyBlaXRoZXIgbm90YXRpb24gaXMKLSAgYWNjZXB0ZWQgb24gYW55IG1vZGVsIG9yIEhQLVVY IHZlcnNpb24gYXMgYSB2YWxpZCB1bml0IGRlc2lnbmF0b3IuCi0KLSAgSWYgYSB2YWxpZCB1bml0 IGlzIHNwZWNpZmllZCAoYXMgb3Bwb3NlZCB0byBhIGRlc2lnbmVyIG5hbWUgb3Igc3ltbGluayks IHdlCi0gIGNoZWNrIGZvciBhbGwgYWxpYXNlcyBvZiB0aGUgZ2l2ZW4gdW5pdCBhY2NvcmRpbmcg dG8gdGhlIGRldnByZWZpeFtdIGFycmF5LgotICBJZiBubyBsb2NrZmlsZXMgYXJlIGZvdW5kIGZv ciB0aGUgZ2l2ZW4gdW5pdCwgd2UgY2FuIGhhdmUgdGhlIGRldmljZTsgd2UKLSAgY3JlYXRlIGEg bG9ja2ZpbGUgTENLLi5uYW1lIGluIHRoZSBsb2NrZmlsZSBkaXJlY3RvcnkgYXBwcm9wcmlhdGUg Zm9yIHRoZQotICBIUC1VWCB2ZXJzaW9uICgvdmFyL3Nwb29sL2xvY2tzIGZvciAxMC4wMCBhbmQg bGF0ZXIsIC91c3Ivc3Bvb2wvdXVjcCBmb3IKLSAgOS54eCBhbmQgZWFybGllcikuICBJZiBpdCBp cyBhICJjdWEiIG9yICJjdWwiIGRldmljZSwgYSBzZWNvbmQgbG9ja2ZpbGUgaXMKLSAgY3JlYXRl ZCB3aXRoIHRoZSAidHR5ZCIgcHJlZml4LiAgVGhpcyBpcyBleGFjdGx5IHdoYXQgY3UgZG9lcy4K LQotICBJZiB0aGUgInNldCBsaW5lIiBkZXZpY2UgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIHVuaXQg ZGVzaWduYXRvciwgdGhlbiBpdCBpcwotICB1c2VkIGxpdGVyYWxseSBhbmQgbm8gc3lub215bXMg YXJlIHNlYXJjaGVkIGZvciBhbmQgb25seSBvbmUgbG9ja2ZpbGUgaXMKLSAgY3JlYXRlZC4KLQot ICAtZmRjLCBNYXJjaCAxOTk4LgotKi8KLSNkZWZpbmUgTEZOQU1MIDgwCQkJLyogTWF4IGxlbmd0 aCBmb3IgbG9jayBmaWxlIG5hbWUuICovCi0KLSAgICBpbnQgbG9ja2ZkOwkJCQkvKiBGaWxlIGRl c2NyaXB0b3IgZm9yIGxvY2sgZmlsZS4gKi8KLSAgICBQSURfVCBwaWQ7CQkJCS8qIFByb2Nlc3Mg SUQgb2YgdGhpcyBwcm9jZXNzLiAqLwotICAgIGludCBmcGlkOwkJCQkvKiBwaWQgZm91bmQgaW4g ZXhpc3RpbmcgbG9ja2ZpbGUuICovCi0gICAgaW50IHRyaWVzOwkJCQkvKiBIb3cgbWFueSB0aW1l cyB3ZSd2ZSB0cmllZC4uLiAqLwotICAgIGludCBpLCBrOwkJCQkvKiBXb3JrZXJzICovCi0KLSAg ICBjaGFyICpkZXZpY2UsICpkZXZuYW1lOwkJLyogIi9kZXYveHh4IiwgInh4eCIgKi8KLSAgICBj aGFyICp1bml0LCAqcDsJCQkvKiA8aW5zdGFuY2U+cDxwb3J0PiBwYXJ0IG9mIHh4eCAqLwotCi0g ICAgY2hhciBsb2NrZmlsW0xGTkFNTF07CQkvKiBMb2NrZmlsZSBuYW1lIChubyBwYXRoKSAqLwot ICAgIGNoYXIgdG1wbmFtW0xGTkFNTF07CQkvKiBUZW1wb3JhcnkgbG9ja2ZpbGUgbmFtZS4gKi8K LQotI2lmZGVmIEhQVVgxMAkJCQkvKiBMb2NrZmlsZSBkaXJlY3RvcnkgKi8KLSAgICBjaGFyICps b2NrZGlyID0gIi92YXIvc3Bvb2wvbG9ja3MiOwkvKiBBbHdheXMgdGhpcyBmb3IgMTAuMDAgYW5k IGhpZ2hlciAqLwotI2Vsc2UgIC8qIEhQLVVYIDkueHggYW5kIGJlbG93ICovCi0jaWZkZWYgTE9D S19ESVIKLSAgICBjaGFyICpsb2NrZGlyID0gTE9DS19ESVI7CQkvKiBEZWZpbmVkIG5lYXIgdG9w IG9mIHRoaXMgZmlsZSAqLwotI2Vsc2UKLSAgICBjaGFyICpsb2NrZGlyID0gIi91c3Ivc3Bvb2wv dXVjcCI7CS8qIG9yIG5vdC4uLiAqLwotI2VuZGlmIC8qIExPQ0tfRElSICovCi0jZW5kaWYgLyog SFBVWDEwICovCi0KLSAgICBoYXNsb2NrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBO b3QgbG9ja2VkIHlldC4gKi8KLSAgICAqZmxmbmFtID0gJ1wwJzsJCQkvKiBMb2NrZmlsZSBuYW1l IGlzIGVtcHR5LiAqLwotICAgIGxvY2syWzBdID0gJ1wwJzsJCQkvKiBTZWNvbmQgb25lIHRvby4g Ki8KLSAgICBwaWQgPSBnZXRwaWQoKTsJCQkvKiBHZXQgbXkgcHJvY2VzcyBJRCAqLwotLyoKLSAg Q29uc3RydWN0IG5hbWUgb2YgbG9ja2ZpbGUgYW5kIHRlbXBvcmFyeSBmaWxlLi4uCi0gIGRldmlj ZSAgPSBuYW1lIG9mIHR0eSBkZXZpY2Ugd2l0aG91dCB0aGUgcGF0aCwgZS5nLiAidHR5MHAwIgot ICBsb2NrZmlsID0gbmFtZSBvZiBsb2NrIGZpbGUsIHdpdGhvdXQgcGF0aCwgZS5nLiAiTENLLi50 dHkwcDAiCi0qLwotICAgIGRldmljZSA9ICgoZGV2bmFtZSA9IHh4bGFzdCh0dGRldiwnLycpKSAh PSBOVUxMID8gZGV2bmFtZSsxIDogdHRkZXYpOwotICAgIGRlYnVnKEYxMTAsIlRUTE9DSyBkZXZp Y2UiLGRldmljZSwwKTsKLSAgICBja21ha21zZyhsb2NrZmlsLExGTkFNTCwiTENLLi4iLGRldmlj ZSxOVUxMLE5VTEwpOwotCi0gICAgayA9IDA7CQkJCS8qIEFzc3VtZSBkZXZpY2UgaXMgbm90IGxv Y2tlZCAqLwotICAgIG4gPSAwOwkJCQkvKiBEaWdpdCBjb3VudGVyICovCi0gICAgdW5pdCA9IGRl dmljZTsJCQkvKiBVbml0ID0gPGluc3RhbmNlPnA8cG9ydD4gKi8KLSAgICB3aGlsZSAoKnVuaXQg JiYgIWlzZGlnaXQoKnVuaXQpKQkvKiBTZWFyY2ggZm9yIGRpZ2l0Li4uICovCi0gICAgICB1bml0 Kys7Ci0gICAgcCA9IHVuaXQ7CQkJCS8qIFZlcmlmeSA8bnVtPnA8bnVtPiBmb3JtYXQuLi4gKi8K LSAgICBkZWJ1ZyhGMTEwLCJUVExPQ0sgdW5pdCAxIix1bml0LDApOwotLyoKLSAgVGhlIHVuaXQg bnVtYmVyIGlzIHJlY29nbml6ZWQgYXM6Ci0gIChhKSBhbnkgc2VxdWVuY2Ugb2YgZGlnaXRzIHRo YXQgcnVucyB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCi0gIChiKSBhbnkgKGEpIHRoYXQgaW5j bHVkZXMgb25lIGFuZCBvbmx5IG9uZSBsZXR0ZXIgInAiLCB3aXRoIGF0IGxlYXN0Ci0gICAgICBv bmUgZGlnaXQgYmVmb3JlIGFuZCBhZnRlciBpdC4KLSovCi0gICAgd2hpbGUgKGlzZGlnaXQoKnAp KSBwKyssIG4rKzsJLyogR2V0IGEgcnVuIG9mIGRpZ2l0cyAqLwotICAgIGlmICgqcCAmJiBuID4g MCkgewkJCS8qIEhhdmUgYSAicCI/ICovCi0JaWYgKCpwID09ICdwJyAmJiBpc2RpZ2l0KCoocCsx KSkpIHsKLQkgICAgcCsrOwotCSAgICBuID0gMDsKLQkgICAgd2hpbGUgKGlzZGlnaXQoKnApKSBw KyssIG4rKzsKLQl9Ci0gICAgfQotICAgIGlmIChuID09IDAgfHwgKnApIHVuaXQgPSAiIjsKLSAg ICBkZWJ1ZyhGMTEwLCJUVExPQ0sgdW5pdCAyIix1bml0LDApOwotCi0gICAgaWYgKCp1bml0KSB7 CQkJLyogRGV2aWNlIG5hbWUgaGFzIHVuaXQgbnVtYmVyLiAqLwotCS8qIFRoZSBmb2xsb3dpbmcg bG9vcCBub3Qgb25seSBzZWFyY2hlcyBmb3IgdGhlIHZhcmlvdXMgbG9ja2ZpbGUgICAgKi8KLQkv KiBzeW5vbnltcywgYnV0IGFsc28gcmVtb3ZlcyBhbGwgLS0gbm90IGp1c3Qgb25lIC0tIHN0YWxl IGxvY2tmaWxlICovCi0JLyogZm9yIHRoZSBkZXZpY2UsIHNob3VsZCB0aGVyZSBiZSBtb3JlIHRo YW4gb25lLiAgU2VlIHR0Y2hrcGlkKCkuICAqLwotCXR0eWRleGlzdHMgPSAwOwotCWZvciAoaSA9 IDA7ICpkZXZwcmVmaXhbaV07IGkrKykgeyAvKiBGb3IgZWFjaCBkcml2ZXIuLi4gKi8KLQkgICAg LyogTWFrZSBkZXZpY2UgbmFtZSAqLwotCSAgICBja21ha21zZyhsb2NrMixGTEZOQU1MLCIvZGV2 LyIsZGV2cHJlZml4W2ldLHVuaXQsTlVMTCk7Ci0JICAgIHByaXZfb24oKTsJCQkvKiBQcml2cyBv biAqLwotCSAgICBrID0gemNoa2kobG9jazIpICE9IC0xOwkvKiBTZWUgaWYgZGV2aWNlIGV4aXN0 cyAqLwotCSAgICBwcml2X29mZigpOwkJCS8qIFByaXZzIG9mZiAqLwotCSAgICBkZWJ1ZyhGMTEx LCJUVExPQ0sgZXhpc3QiLGxvY2syLGspOwotICAgICAgICAgICAgaWYgKGspIHsKLQkJaWYgKCFz dHJjbXAoZGV2cHJlZml4W2ldLCJ0dHlkIikpIC8qIHR0eWQgZGV2aWNlIGV4aXN0cyAqLwotCQkg IHR0eWRleGlzdHMgPSAxOwotCQkvKiBNYWtlIGxvY2tmaWxlIG5hbWUgKi8KLQkJY2ttYWttc2co bG9jazIsRkxGTkFNTCxsb2NrZGlyLCIvTENLLi4iLGRldnByZWZpeFtpXSx1bml0KTsKLQkJZGVi dWcoRjExMCwiVFRMT0NLIGNoZWNraW5nIixsb2NrMiwwKTsKLQkJcHJpdl9vbigpOwkJLyogUHJp dnMgb24gKi8KLQkJayA9IHpjaGtpKGxvY2syKSAhPSAtMTsJLyogU2VlIGlmIGxvY2tmaWxlIGV4 aXN0cyAqLwotCQlwcml2X29mZigpOwkJLyogUHJpdnMgb2ZmICovCi0JCWRlYnVnKEYxMTEsIlRU TE9DSyBjaGVjayBmb3IgbG9jayBBIixsb2NrMixrKTsKLQkJaWYgKGspIGlmICh0dGNoa3BpZChs b2NrMikpIHsgLyogSWYgcGlkIHN0aWxsIGFjdGl2ZSwgZmFpbC4gKi8KLQkJICAgIGNrc3RybmNw eShmbGZuYW0sbG9jazIsRkxGTkFNTCk7Ci0JCSAgICByZXR1cm4oLTIpOwotCQl9Ci0JICAgIH0K LQl9Ci0gICAgfSBlbHNlIHsJCQkJLyogU29tZSBvdGhlciBkZXZpY2UtbmFtZSBmb3JtYXQgKi8K LQkvKiBUaGlzIHRha2VzIGNhcmUgb2Ygc3ltYm9saWMgbGlua3MsIGV0Yy4uLiAqLwotCS8qIEJ1 dCBkb2VzIG5vdCBjaGFzZSB0aGVtIGRvd24hICovCi0JY2ttYWttc2cobG9jazIsRkxGTkFNTCxs b2NrZGlyLCIvTENLLi4iLGRldmljZSxOVUxMKTsKLQlwcml2X29uKCk7Ci0JayA9IHpjaGtpKGxv Y2syKSAhPSAtMTsJCS8qIENoZWNrIGZvciBleGlzdGluZyBsb2NrZmlsZSAqLwotCXByaXZfb2Zm KCk7Ci0JZGVidWcoRjExMSwiVFRMT0NLIGNoZWNrIGZvciBsb2NrIEIiLGxvY2syLGspOwotCWlm IChrKSBpZiAodHRjaGtwaWQobG9jazIpKSB7CS8qIENoZWNrIHBpZCBmcm9tIGxvY2tmaWxlICov Ci0JICAgIGNrc3RybmNweShmbGZuYW0sbG9jazIsRkxGTkFNTCk7Ci0JICAgIGRlYnVnKEYxMTAs IlRUTE9DSyBpbiB1c2UiLGRldmljZSwwKTsKLQkgICAgZGVidWcoRjEwMSwiVFRMT0NLIHJldHVy bnMiLCIiLC0yKTsKLQkgICAgcmV0dXJuKC0yKTsKLQl9Ci0gICAgfQotLyoKLSAgR2V0IGhlcmUg b25seSBpZiB0aGVyZSBpcyBubyAobW9yZSkgbG9ja2ZpbGUsIHNvIG5vdyB3ZSBtYWtlIG9uZSAo b3IgdHdvKS4uLgotICBmbGZuYW0gPSBmdWxsIGxvY2tmaWxlIHBhdGhuYW1lLCBlLmcuICIvdXNy L3Nwb29sL3V1Y3AvTENLLi5jdWwwcDAiLgotICB0bXBuYW0gPSB1bmlxdWUgdGVtcG9yYXJ5IGZp bG5hbWUsIGUuZy4gIi91c3Ivc3Bvb2wvdXVjcC9MVE1QLi5waWQiLgotKi8KLSAgICBja21ha21z ZyhmbGZuYW0sRkxGTkFNTCxsb2NrZGlyLCIvIixsb2NrZmlsLE5VTEwpOyAvKiBTRVQgTElORSBk ZXZpY2UgKi8KLQotICAgIC8qIElmIGRpYWxvdXQgZGV2aWNlLCBhbHNvIG1ha2Ugb25lIGZvciBj b3JyZXNwb25kaW5nIGRpYWxpbiBkZXZpY2UgKi8KLSAgICBsb2NrMlswXSA9ICdcMCc7Ci0gICAg aWYgKCFzdHJuY21wKGRldmljZSwiY3UiLDIpICYmICp1bml0ICYmIHR0eWRleGlzdHMpCi0gICAg ICBja21ha21zZyhsb2NrMixGTEZOQU1MLGxvY2tkaXIsIi9MQ0suLnR0eWQiLHVuaXQsTlVMTCk7 Ci0KLSAgICBpZiAoKGludClzdHJsZW4obG9ja2RpcikrMTIgPCBMRk5BTUwpCi0gICAgICBzcHJp bnRmKHRtcG5hbSwiJXMvTFRNUC4lMDVkIixsb2NrZGlyLChpbnQpIHBpZCk7IC8qIE1ha2UgdGVt cCBuYW1lICovCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjExMCwi VFRMT0NLIGZsZm5hbSIsZmxmbmFtLDApOwotCWRlYnVnKEYxMTAsIlRUTE9DSyBsb2NrMiIsbG9j azIsMCk7Ci0JZGVidWcoRjExMCwiVFRMT0NLIHRtcG5hbSIsdG1wbmFtLDApOwotICAgIH0KLSNl bmRpZiAvKiBERUJVRyAqLwotLyoKLSAgIExvY2tmaWxlIHBlcm1pc3Npb25zLi4uCi0gICA0NDQg aXMgc3RhbmRhcmQsIEhQLVVYIDEwLjAwIHVzZXMgNjY0LiAgSXQgZG9lc24ndCBtYXR0ZXIuCi0g ICBLZXJtaXQgdXNlcyA0NDQ7IHRoZSBkaWZmZXJlbmNlIGxldHMgdXMgdGVsbCB3aGV0aGVyIEtl cm1pdCBjcmVhdGVkCi0gICB0aGUgbG9jayBmaWxlLgotKi8KLSAgICBwcml2X29uKCk7CQkJCS8q IFR1cm4gb24gcHJpdmlsZWdlcy4gKi8KLSAgICBsb2NrZmQgPSBjcmVhdCh0bXBuYW0sIDA0NDQp OwkvKiBUcnkgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlLiAqLwotICAgIGlmIChsb2NrZmQgPCAw KSB7CQkJLyogQ3JlYXRlIGZhaWxlZC4gKi8KLQlkZWJ1ZyhGMTExLCJUVExPQ0sgY3JlYXQgZmFp bGVkIix0bXBuYW0sZXJybm8pOwotCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKLQkgICAgcGVycm9y KGxvY2tkaXIpOwotCSAgICBwcmludGYoIlVVQ1Agbm90IGluc3RhbGxlZCBvciBLZXJtaXQgbWlz Y29uZmlndXJlZFxuIik7Ci0JfSBlbHNlIHsKLQkgICAgaWYgKCFxdWlldCkKLQkgICAgICBwZXJy b3IobG9ja2Rpcik7Ci0JICAgIHVubGluayh0bXBuYW0pOwkJLyogR2V0IHJpZCBvZiB0aGUgdGVt cG9yYXJ5IGZpbGUuICovCi0JfQotCXByaXZfb2ZmKCk7CQkJLyogVHVybiBvZmYgcHJpdmlsZWdl cyEhISAqLwotCWRlYnVnKEYxMDEsIlRUTE9DSyByZXR1cm5zIiwiIiwtMSk7Ci0JcmV0dXJuKC0x KTsJCQkvKiBSZXR1cm4gZmFpbHVyZSBjb2RlLiAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJU VExPQ0sgdGVtcCBvayIsdG1wbmFtLDApOwotCi0vKiBOb3cgd3JpdGUgb3VyIHBpZCBpbnRvIHRo ZSB0ZW1wIGxvY2tmaWxlIGluIGludGVnZXIgZm9ybWF0LiAqLwotCi0gICAgaSA9IHdyaXRlKGxv Y2tmZCwgKGNoYXIgKikmcGlkLCBzaXplb2YocGlkKSk7Ci0KLSNpZmRlZiBERUJVRwotICAgIGlm IChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAxLCJUVExPQ0sgcGlkIiwiIixwaWQpOwotCWRlYnVnKEYx MDEsIlRUTE9DSyBzaXplb2YgcGlkIiwiIixzaXplb2YocGlkKSk7Ci0JZGVidWcoRjEwMSwiVFRM T0NLIHdyaXRlIHBpZCByZXR1cm5zIiwiIixpKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8K LQotLyoKLSAgTm93IHRyeSB0byByZW5hbWUgdGhlIHRlbXBvcmFyeSBmaWxlIHRvIHRoZSByZWFs IGxvY2tmaWxlIG5hbWUuCi0gIFRoaXMgd2lsbCBmYWlsIGlmIGEgbG9jayBmaWxlIG9mIHRoYXQg bmFtZSBhbHJlYWR5IGV4aXN0cywgd2hpY2gKLSAgd2lsbCBjYXRjaCByYWNlIGNvbmRpdGlvbnMg d2l0aCBvdGhlciB1c2Vycy4KLSovCi0gICAgY2xvc2UobG9ja2ZkKTsJCQkvKiBDbG9zZSB0aGUg dGVtcCBsb2NrZmlsZS4gKi8KLSAgICBjaG1vZCh0bXBuYW0sMDQ0NCk7Ci0KLSAgICB0cmllcyA9 IDA7Ci0gICAgd2hpbGUgKCFoYXNsb2NrICYmIHRyaWVzKysgPCAyKSB7Ci0JaGFzbG9jayA9IChs aW5rKHRtcG5hbSxmbGZuYW0pID09IDApOyAvKiBDcmVhdGUgYSBsaW5rIHRvIGl0LiAqLwotCWRl YnVnKEYxMDEsIlRUTE9DSyBsaW5rIiwiIixoYXNsb2NrKTsKLQlpZiAoaGFzbG9jaykgewkJCS8q IElmIHdlIG1hZGUgdGhlIGxvY2tmaWxlLi4uICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBXZSBj YW4ndCBkbyB0aGlzIGFueSBtb3JlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIGZpbGUgZGVzY3Jp cHRvciB5ZXQuICovCi0jaWZkZWYgTE9DS0YJCQkJLyogQ2FuIGJlIGNhbmNlbGVkIHdpdGggLURO T0xPQ0tGICovCi0vKgotICBDcmVhdGUgYW4gYWR2aXNvcnkgbG9jayBvbiB0aGUgZGV2aWNlIHRo cm91Z2ggaXRzIGZpbGUgZGVzY3JpcHRvci4KLSAgVGhpcyBjb2RlIGFjdHVhbGx5IHNlZW1zIHRv IHdvcmsuICBJZiBpdCBpcyBleGVjdXRlZCwgYW5kIHRoZW4gYW5vdGhlcgotICBwcm9jZXNzIHRy aWVzIHRvIG9wZW4gdGhlIHNhbWUgZGV2aWNlIHVuZGVyIGEgZGlmZmVyZW50IG5hbWUgdG8gY2ly Y3VtdmVudAotICB0aGUgbG9ja2ZpbGUsIHRoZXkgZ2V0IGEgImRldmljZSBidXN5IiBlcnJvci4K LSovCi0JICAgIGRlYnVnKEYxMDAsIlRUTE9DSyBMT0NLRiBjb2RlLi4uIiwiIiwwKTsKLSAgICAg ICAgICAgIHdoaWxlICggbG9ja2YodHR5ZmQsIEZfVExPQ0ssIDBMKSAhPSAwICkgewotICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsICJUVExPQ0sgbG9ja2YgZXJyb3IiLCAiIiwgZXJybm8pOwot ICAgICAgICAgICAgICAgIGlmICgoKyt0cmllcyA+PSAzKSB8fCAoZXJybm8gIT0gRUFHQUlOKSkg ewotICAgICAgICAgICAgICAgICAgICB4ID0gdW5saW5rKGZsZm5hbSk7IC8qIFJlbW92ZSB0aGUg bG9ja2ZpbGUgKi8KLQkJICAgIGlmIChlcnJubyA9PSBFQUNDRVMgJiYgIXF1aWV0KQotCQkgICAg ICBwcmludGYoIkRldmljZSBhbHJlYWR5IGxvY2tlZCBieSBhbm90aGVyIHByb2Nlc3NcbiIpOwot ICAgICAgICAgICAgICAgICAgICBoYXNsb2NrID0gMDsKLQkJICAgIGJyZWFrOwotCQl9Ci0gICAg ICAgICAgICAgICAgc2xlZXAoMik7Ci0JICAgIH0KLSNlbmRpZiAvKiBMT0NLRiAqLwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQotCSAgICBpZiAoaGFzbG9jaykgewkJLyogSWYgd2UgbWFkZSB0aGUg bG9ja2ZpbGUgLi4uICovCi0JCWlmIChsb2NrMlswXSkgewkJLyogaWYgdGhlcmUgaXMgdG8gYmUg YSAybmQgbG9ja2ZpbGUgKi8KLQkJICAgIGxvY2tmZCA9IGNyZWF0KGxvY2syLCAwNDQ0KTsgLyog Q3JlYXRlIGl0ICovCi0JCSAgICBkZWJ1ZyhGMTExLCJUVExPQ0sgbG9jazIgY3JlYXQiLCBsb2Nr MiwgbG9ja2ZkKTsKLQkJICAgIGlmIChsb2NrZmQgPiAtMSkgewkvKiBDcmVhdGVkIE9LLCB3cml0 ZSBwaWQuICovCi0JCQl3cml0ZShsb2NrZmQsIChjaGFyICopJnBpZCwgc2l6ZW9mKHBpZCkgKTsK LQkJCWNsb3NlKGxvY2tmZCk7CS8qIENsb3NlIGFuZCAqLwotCQkJY2htb2QobG9jazIsIDA0NDQp OyAvKiBzZXQgcGVybWlzc2lvbnMuICovCi0JCSAgICB9IGVsc2UgewkJIC8qIE5vdCBPSywgYnV0 IGRvbid0IGZhaWwuICovCi0JCQlsb2NrMlswXSA9ICdcMCc7IC8qIEp1c3QgcmVtZW1iZXIgaXQn cyBub3QgdGhlcmUuICovCi0JCSAgICB9Ci0JCX0KLQkJYnJlYWs7CQkJLyogYW5kIHdlJ3JlIGRv bmUuICovCi0JICAgIH0KLQl9Ci0gICAgfQotICAgIHVubGluayh0bXBuYW0pOwkJCS8qIFVubGlu ayAocmVtb3ZlKSB0aGUgdGVtcCBmaWxlLiAqLwotICAgIHByaXZfb2ZmKCk7CQkJCS8qIFR1cm4g b2ZmIHByaXZzICovCi0gICAgaSA9IGhhc2xvY2sgPyAwIDogLTE7CQkvKiBPdXIgcmV0dXJuIHZh bHVlICovCi0gICAgZGVidWcoRjEwMSwiVFRMT0NLIHJldHVybnMiLCIiLGkpOwotICAgIHJldHVy bihpKTsKLSNlbmRpZiAvKiBIUFVYICovCi0jZW5kaWYgLyogVVNFVFRZTE9DSyAqLwotI2VuZGlm IC8qICFOT1VVQ1AgKi8KLX0KLQotLyogIFQgVCBVIE4gTCBPIEMgSyAgKi8KLQotc3RhdGljIGlu dAotdHR1bmxjaygpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbW92ZSBVVUNQ IGxvY2tmaWxlKHMpLiAqLwotI2lmbmRlZiBOT1VVQ1AKLSAgICBpbnQgeDsKLQotICAgIGRlYnVn KEYxMTEsInR0dW5sY2siLGZsZm5hbSxoYXNsb2NrKTsKLQotI2lmZGVmIFVTRVRUWUxPQ0sKLQot ICAgIGlmIChoYXNsb2NrICYmICpmbGZuYW0pIHsKLQlpbnQgeDsKLQlwcml2X29uKCk7CQkJLyog VHVybiBvbiBwcml2cyAqLwotI2lmZGVmIFVTRV9VVV9MT0NLCi0JeCA9IHV1X3VubG9jayhsb2Nr bmFtZSk7Ci0jZWxzZSAgLyogVVNFX1VVX0xPQ0sgKi8KLQl4ID0gdHR5dW5sb2NrKGxvY2tuYW1l KTsJLyogVHJ5IHRvIHVubG9jayAqLwotI2VuZGlmIC8qIFVTRV9VVV9MT0NLICovCi0JcHJpdl9v ZmYoKTsJCQkvKiBUdXJuIG9mZiBwcml2cyAqLwotCWlmICh4IDwgMCAmJiAhcXVpZXQpCi0JICBw cmludGYoIldhcm5pbmcgLSBDYW4ndCByZW1vdmUgbG9ja2ZpbGU6ICVzXG4iLCBmbGZuYW0pOwot Ci0JKmZsZm5hbSA9ICdcMCc7CQkJLyogRXJhc2UgdGhlIG5hbWUuICovCi0JaGFzbG9jayA9IDA7 Ci0JcmV0dXJuKDApOwotICAgIH0KLQotI2Vsc2UgIC8qIE5vIHR0eWxvY2soKS4uLiAqLwotCi0g ICAgaWYgKGhhc2xvY2sgJiYgKmZsZm5hbSkgewotCS8qIERvbid0IHJlbW92ZSBsb2NrZmlsZSBp ZiB3ZSBkaWRuJ3QgbWFrZSBpdCBvdXJzZWx2ZXMgKi8KLQlpZiAoKHggPSB0dHJwaWQoZmxmbmFt KSkgIT0gKGludClnZXRwaWQoKSkgewotCSAgICBkZWJ1ZyhGMTExLCJ0dHVubGNrIGxvY2tmaWxl IHNlaXplZCIsZmxmbmFtLHgpOwotCSAgICBwcmludGYoIldhcm5pbmcgLSBMb2NrZmlsZSAlcyBz ZWl6ZWQgYnkgcGlkICVkXG4iLAotCQkgICBmbGZuYW0sCi0JCSAgIHgKLQkJICAgKTsKLQkgICAg cmV0dXJuKDApOwotCX0KLQlwcml2X29uKCk7CQkJLyogVHVybiBwcml2aWxlZ2VzIG9uLiAgKi8K LQllcnJubyA9IDA7Ci0JeCA9IHVubGluayhmbGZuYW0pOwkJLyogUmVtb3ZlIHRoZSBsb2NrZmls ZS4gKi8KLQlkZWJ1ZyhGMTExLCJ0dHVubGNrIHVubGluayIsZmxmbmFtLHgpOwotCWlmICh4IDwg MCkgewotCSAgICBpZiAoZXJybm8gJiYgIXF1aWV0KQotCSAgICAgIHBlcnJvcih0dG5tc3YpOwot CSAgICBwcmludGYoIldhcm5pbmcgLSBDYW4ndCByZW1vdmUgbG9ja2ZpbGU6ICVzXG4iLCBmbGZu YW0pOwotCX0KLQloYXNsb2NrID0gMDsKLQkqZmxmbmFtID0gJ1wwJzsJCQkvKiBFcmFzZSB0aGUg bmFtZS4gKi8KLQotI2lmZGVmIFJUQUlYCi0JZXJybm8gPSAwOwotCXggPSB1bmxpbmsobGtmbGZu KTsJCS8qIFJlbW92ZSBsaW5rIHRvIGxvY2tmaWxlICovCi0JZGVidWcoRjExMSwidHR1bmxjayBB SVggbGluayB1bmxpbmsiLGxrZmxmbix4KTsKLQlpZiAoeCA8IDApIHsKLQkgICAgaWYgKGVycm5v ICYmICFxdWlldCkKLQkgICAgICBwZXJyb3IodHRubXN2KTsKLQkgICAgcHJpbnRmKCJXYXJuaW5n IC0gQ2FuJ3QgcmVtb3ZlIGxpbmsgdG8gbG9ja2ZpbGU6ICVzXG4iLCBsa2ZsZm4pOwotCX0KLQkq bGtmbGZuID0gJ1wwJzsKLSNlbHNlCi0JaWYgKGxvY2syWzBdKSB7CQkJLyogSWYgdGhlcmUgaXMg YSBzZWNvbmQgbG9ja2ZpbGUsICovCi0JICAgIGVycm5vID0gMDsKLQkgICAgeCA9IHVubGluayhs b2NrMik7CQkvKiAgcmVtb3ZlIGl0IHRvby4gKi8KLQkgICAgZGVidWcoRjExMSwidHR1bmxjayBs b2NrMiB1bmxpbmsiLGxvY2syLHgpOwotCSAgICBpZiAoeCA8IDApIHsKLQkJaWYgKGVycm5vICYm ICFxdWlldCkKLQkJICBwZXJyb3IodHRubXN2KTsKLQkJcHJpbnRmKCJXYXJuaW5nIC0gQ2FuJ3Qg cmVtb3ZlIHNlY29uZGFyeSBsb2NrZmlsZTogJXNcbiIsCi0JCSAgICAgICBsb2NrMgotCQkgICAg ICAgKTsKLQkgICAgfQotCSAgICBsb2NrMlswXSA9ICdcMCc7CQkvKiBGb3JnZXQgaXRzIG5hbWUu ICovCi0JfQotI2VuZGlmIC8qIFJUQUlYICovCi0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgTE9D S0YKLSAgICAgICAgKFZPSUQpIGxvY2tmKHR0eWZkLCBGX1VMT0NLLCAwTCk7IC8qIFJlbW92ZSBh ZHZpc29yeSBsb2NrICovCi0jZW5kaWYgLyogTE9DS0YgKi8KLSNlbmRpZiAvKiBDT01NRU5UICov Ci0KLQlwcml2X29mZigpOwkJCS8qIFR1cm4gcHJpdmlsZWdlcyBvZmYuICovCi0gICAgfQotI2Vu ZGlmIC8qIFVTRVRUWUxPQ0sgKi8KLSNlbmRpZiAvKiAhTk9VVUNQICovCi0gICAgcmV0dXJuKDAp OwotfQotCi0vKgotICA0LjNCU0Qtc3R5bGUgVVVDUCBsaW5lIGRpcmVjdGlvbiBjb250cm9sLgot ICAoU3RhbiBCYXJiZXIsIFJpY2UgVSwgMTk4MC1zb21ldGhpbmcuLi4pCi0qLwotI2lmbmRlZiBO T1VVQ1AKLSNpZmRlZiBBQ1VDTlRSTAotVk9JRAotYWN1Y250cmwoZmxhZyx0dG5hbWUpIGNoYXIg KmZsYWcsICp0dG5hbWU7IHsKLSAgICBjaGFyIHhbREVWTkFNTEVOKzMyXSwgKmRldmljZSwgKmRl dm5hbWU7Ci0KLSAgICBpZiAoc3RyY21wKHR0bmFtZSxDVFROQU0pID09IDAgfHwgeGxvY2FsID09 IDApIC8qIElmIG5vdCBsb2NhbCwgKi8KLSAgICAgIHJldHVybjsJCQkJLyoganVzdCByZXR1cm4u ICovCi0gICAgZGV2aWNlID0gKChkZXZuYW1lID0geHhsYXN0KHR0bmFtZSwnLycpKSAhPSBOVUxM ID8gZGV2bmFtZSsxIDogdHRuYW1lKTsKLSAgICBpZiAoc3RybmNtcChkZXZpY2UsIkxDSy4uIiw0 KSA9PSAwKSBkZXZpY2UgKz0gNTsKLSAgICBja21ha21zZyh4LERFVk5BTUxFTiszMiwiL3Vzci9s aWIvdXVjcC9hY3VjbnRybCAiLGZsYWcsIiAiLGRldmljZSk7Ci0gICAgZGVidWcoRjExMCwiY2Fs bGVkICIseCwwKTsKLSAgICB6c3lzY21kKHgpOwotfQotI2VuZGlmIC8qIEFDVUNOVFJMICovCi0j ZW5kaWYgLyogTk9VVUNQICovCi0KLS8qCi0gIFQgVCBIIEYgTCBPIFcgIC0tICBTZXQgb3IgUmVz ZXQgaGFyZHdhcmUgZmxvdyBjb250cm9sLgotCi0gIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBjb2xs ZWN0IGFsbCBoYXJkd2FyZS1mbG93LWNvbnRyb2wgcmVsYXRlZCBjb2RlCi0gIGludG8gYSBzaW5n bGUgbW9kdWxlLiAgVGhhbmtzIHRvIFJpY2sgU2xhZGtleSBhbmQgSm9obiBLb2hsIGZvciBsb3Rz IG9mCi0gIGhlbHAgaGVyZS4gIE92ZXJ2aWV3OgotCi0gIEhhcmR3YXJlIGZsb3cgY29udHJvbCBp cyBub3Qgc3VwcG9ydGVkIGluIG1hbnkgVU5JWCBpbXBsZW1lbnRpb25zLiAgRXZlbgotICB3aGVu IGl0IGlzIHN1cHBvcnRlZCwgdGhlcmUgaXMgbm8gKGhhIGhhKSAic3RhbmRhcmQiIGZvciB0aGUg cHJvZ3JhbW1pbmcKLSAgaW50ZXJmYWNlLiAgSW4gZ2VuZXJhbCwgNC4zQlNEIGFuZCBlYXJsaWVy IChzb21ldGltZXMpLCA0LjRCU0QsIFN5c3RlbSBWLAotICBTdW5PUywgQUlYLCBldGMsIGhhdmUg dG90YWxseSBkaWZmZXJlbnQgbWV0aG9kcy4gIChBbmQsIG5vdCBzdHJpY3RseQotICByZWxldmFu dCBoZXJlLCB0aGUgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIG9mdGVuIGJyaW5ncyBvbmUgb25seSB0 byBhIG5vLW9wCi0gIGluIHRoZSBkZXZpY2UgZHJpdmVyISkKLQotICBBbW9uZyBhbGwgdGhlc2Us IHdlIGhhdmUgdHdvIG1ham9yIHR5cGVzIG9mIEFQSXM6IHRob3NlIGluIHdoaWNoIGhhcmR3YXJl Ci0gIGZsb3cgY29udHJvbCBpcyBkZXRlcm1pbmVkIGJ5IGJpdHMgaW4gdGhlIHNhbWUgdGVybWlv L3Rlcm1pb3Mvc2d0dHkgbW9kZQotICB3b3JkKHMpIHRoYXQgYXJlIHVzZWQgZm9yIGNvbnRyb2xs aW5nIHN1Y2ggaXRlbXMgYXMgQ0JSRUFLIHZzIFJBVyBtb2RlLCBhbmQKLSAgd2hpY2ggYXJlIGFs c28gdXNlZCBieSB0aGUgdHR2dCgpLCB0dHBrdCgpLCBjb25iaW4oKSwgYW5kIGNvbmNiKCkgcm91 dGluZXMKLSAgZm9yIGNoYW5naW5nIHRlcm1pbmFsIG1vZGVzLiAgQW5kIHRob3NlIHRoYXQgdXNl IGVudGlyZWx5IGRpZmZlcmVudAotICBtZWNoYW5pc21zLgotCi0gIEluIHRoZSBmaXJzdCBjYXRl Z29yeSwgaXQgaXMgaW1wb3J0YW50IHRoYXQgYW55IGNoYW5nZSBpbiB0aGUgbW9kZSBiaXRzIGJl Ci0gIHJlZmxlY3RlZCBpbiB0aGUgcmVsZXZhbnQgdGVybWlvKHMpL3NndHR5IHN0cnVjdHVyZSwg c28gdGhhdCBzdWJzZXF1ZW50Ci0gIGNoYW5nZXMgdG8gdGhhdCBzdHJ1Y3R1cmUgZG8gbm90IHdp cGUgb3V0IHRoZSBlZmZlY3RzIG9mIHRoaXMgcm91dGluZS4gIFRoYXQKLSAgaXMgd2h5IGEgcG9p bnRlciwgYXR0cnMsIHRvIHRoZSBhcHByb3ByaWF0ZSBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGFzIGEK LSAgcGFyYW1ldGVyIHRvIHRoaXMgcm91dGluZS4KLQotICBUaGUgc2Vjb25kIGNhdGVnb3J5IHNo b3VsZCBnaXZlIHVzIG5vIHdvcnJpZXMsIHNpbmNlIGFueSBjaGFuZ2VzIHRvIGhhcmR3YXJlCi0g IGZsb3cgY29udHJvbCBhY2NvbXBsaXNoZWQgYnkgdGhpcyByb3V0aW5lIHNob3VsZCBub3QgYWZm ZWN0IHRoZSB0ZXJtaW8ocykvCi0gIHNndHR5IHN0cnVjdHVyZXMsIGFuZCB0aGVyZWZvcmUgd2ls bCBub3QgYmUgdW5kb25lIGJ5IGxhdGVyIGNoYW5nZXMgdG8gdGhlbS4KLQotICBUaGUgc2Vjb25k IGFyZ3VtZW50LCBzdGF0dXMsIG1lYW5zIHRvIHR1cm4gb24gaGFyZHdhcmUgZmxvdyBjb250cm9s IGlmCi0gIG5vbnplcm8sIGFuZCB0byB0dXJuIGl0IG9mZiBpZiB6ZXJvLgotCi0gIFJldHVybnM6 IDAgb24gYXBwYXJlbnQgc3VjY2VzcywgLTEgb24gcHJvYmFibGUgZmFpbHVyZS4KLSovCi0KLS8q Ci0gIFRoZSBmb2xsb3dpbmcgYnVzaW5lc3MgaXMgZm9yIEJTREksIHdoZXJlIGl0IHdhcyBkaXNj b3ZlcmVkIHRoYXQgdHdvCi0gIHNlcGFyYXRlIGJpdHMsIENDVFNfT0ZMT1cgYW5kIENSVFNfSUZM T1csIGFyZSB1c2VkIGluIGhhcmR3YXJlIGZsb3cgY29udHJvbCwKLSAgYnV0IENUUlNDVFMgaXMg ZGVmaW5lZCAoaW4gPHRlcm1pb3MuaD4pIHRvIGJlIGp1c3QgQ0NUU19PRkxPVyByYXRoZXIgYm90 aAotICBiaXRzLCBzbyBod2ZjIG9ubHkgd29ya3MgaW4gb25lIGRpcmVjdGlvbiBpZiB5b3UgdXNl IENSVFNDVFMgdG8gY29udHJvbCBpdC4KLSAgT3RoZXIgNC40QlNELWJhc2VkIFVuaXhlcyBzdWNo IGFzIEZyZWVCU0QgNC4xLCB3aGljaCB1c2UgdGhlc2UgdHdvIGJpdHMsCi0gIGRlZmluZSBDUlRT Q1RTIGNvcnJlY3RseS4KLSovCi0jaWZkZWYgRklYQ1JUU0NUUwotI2lmZGVmIENSVFNDVFMKLSNp ZmRlZiBDQ1RTX09GTE9XCi0jaWZkZWYgQ1JUU19JRkxPVwotI3VuZGVmIENSVFNDVFMKLSNkZWZp bmUgQ1JUU0NUUyAoQ1JUU19JRkxPV3xDQ1RTX09GTE9XKQotI2VuZGlmIC8qIENSVFNfSUZMT1cg Ki8KLSNlbmRpZiAvKiBDQ1RTX09GTE9XICovCi0jZW5kaWYgLyogQ1JUU0NUUyAqLwotI2VuZGlm IC8qIEZJWENSVFNDVFMgKi8KLQotc3RhdGljIGludAotdHRoZmxvdyhmbG93LCBzdGF0dXMsIGF0 dHJzKQotICAgIGludCBmbG93LAkJCQkvKiBUeXBlIG9mIGZsb3cgY29udHJvbCAoY2tjZGViLmgp ICovCi0gICAgc3RhdHVzOwkJCQkvKiBOb256ZXJvID0gdHVybiBpdCBvbiAqLwotCQkJCQkvKiBa ZXJvID0gdHVybiBpdCBvZmYgKi8KLSNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCBvciBC U0Q0NCAqLwotICAgIHN0cnVjdCB0ZXJtaW9zICphdHRyczsKLSNlbHNlCQkJCQkvKiBTeXN0ZW0g ViAqLwotI2lmZGVmIEFUVFNWCi0jaWZkZWYgQVRUNzMwMAotI2lmZGVmIFVOSVgzNTFNCi0vKiBB VCZUIFVOSVggMy41MW0gY2FuIHNldCBidXQgbm90IHRlc3QgZm9yIGhhcmR3YXJlIGZsb3cgY29u dHJvbCAqLwotI2RlZmluZSBSVFNGTE9XIENUU0NECi0jZGVmaW5lIENUU0ZMT1cgQ1RTQ0QKLSNl bmRpZiAvKiBBVFQ3MzAwICovCi0jZW5kaWYgLyogVU5JWDM1MU0gKi8KLSAgICBzdHJ1Y3QgdGVy bWlvICphdHRyczsKLSNlbHNlCQkJCQkvKiBCU0QsIFY3LCBldGMgKi8KLSAgICBzdHJ1Y3Qgc2d0 dHliICphdHRyczsJCS8qIHNndHR5IGluZm8uLi4gKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2Vu ZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotLyogdHRoZmxvdyAqLyB7Ci0KLSAgICBpbnQgeCA9IDA7 CQkJCS8qIHR0aGZsb3coKSByZXR1cm4gY29kZSAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICByZXR1 cm4gcDl0dGhmbG93KGZsb3csIHN0YXR1cyk7Ci0jZWxzZQotCi0jaWZuZGVmIE9YT1MJCQkJLyog Tk9UIE9saXZldHRpIFgvT1MuLi4gKi8KLS8qCi0gIEZvciBTdW5PUyA0LjAgYW5kIGxhdGVyIGlu IHRoZSBCU0QgZW52aXJvbm1lbnQgLi4uCi0KLSAgVGhlIGRlY2xhcmF0aW9ucyBhcmUgY29waWVk IGFuZCBpbnRlcnByZXRlZCBmcm9tIHRoZSBTeXN0ZW0gViBoZWFkZXIgZmlsZXMsCi0gIHNvIHdl IGRvbid0IGFjdHVhbGx5IGhhdmUgdG8gcHVsbCBpbiBhbGwgdGhlIFN5c3RlbSBWIGp1bmsgd2hl biBidWlsZGluZwotICBDLUtlcm1pdCBmb3IgU3VuT1MgaW4gdGhlIEJTRCBlbnZpcm9ubWVudCwg d2hpY2ggd291bGQgYmUgZGFuZ2Vyb3VzIGJlY2F1c2UKLSAgaGF2aW5nIHRob3NlIHN5bWJvbHMg ZGVmaW5lZCB3b3VsZCBjYXVzZSB1cyB0byB0YWtlIHRoZSB3cm9uZyBwYXRocyB0aHJvdWdoCi0g IHRoZSBjb2RlLiAgVGhlIGNvZGUgaW4gdGhpcyBzZWN0aW9uIGlzIHVzZWQgaW4gYm90aCB0aGUg QlNEIGFuZCBTeXMgViBTdW5PUwotICB2ZXJzaW9ucy4KLSovCi0jaWZkZWYgU1VOT1M0MQotLyoK LSAgSW4gU3VuT1MgNC4xIGFuZCBsYXRlciwgd2UgdXNlIHRoZSBQT1NJWCBjYWxscyByYXRoZXIg dGhhbiBpb2N0bCBjYWxscwotICBiZWNhdXNlIEdOVSBDQyB1c2VzIGRpZmZlcmVudCBmb3JtYXRz IGZvciB0aGUgX0lPeHh4IG1hY3JvcyB0aGFuIHJlZ3VsYXIgQ0M7Ci0gIHRoZSBQT1NJWCBmb3Jt cyB3b3JrIGZvciBib3RoLiAgQnV0IHRoZSBQT1NJWCBjYWxscyBhcmUgbm90IGF2YWlsYWJsZSBp bgotICBTdW5PUyA0LjAuCi0qLwotI2RlZmluZSBDUlRTQ1RTIDB4ODAwMDAwMDAJCS8qIFJUUy9D VFMgZmxvdyBjb250cm9sICovCi0jZGVmaW5lIFRDU0FOT1cgMAkJCS8qIERvIGl0IG5vdyAqLwot Ci0gICAgc3RydWN0IHRlcm1pb3MgewotCXVuc2lnbmVkIGxvbmcgY19pZmxhZzsJCS8qIElucHV0 IG1vZGVzICovCi0JdW5zaWduZWQgbG9uZyBjX29mbGFnOwkJLyogT3V0cHV0IG1vZGVzICovCi0J dW5zaWduZWQgbG9uZyBjX2NmbGFnOwkJLyogQ29udHJvbCBtb2RlcyAqLwotCXVuc2lnbmVkIGxv bmcgY19sZmxhZzsJCS8qIExpbmUgZGlzY2lwbGluZSBtb2RlcyAqLwotCWNoYXIgY19saW5lOwot CUNIQVIgY19jY1sxN107Ci0gICAgfTsKLSAgICBzdHJ1Y3QgdGVybWlvcyB0ZW1wOwotCi1fUFJP VE9UWVAoIGludCB0Y2dldGF0dHIsIChpbnQsIHN0cnVjdCB0ZXJtaW9zICopICk7Ci1fUFJPVE9U WVAoIGludCB0Y3NldGF0dHIsIChpbnQsIGludCwgc3RydWN0IHRlcm1pb3MgKikgKTsKLS8qCi0g IFdoZW4gQ1JUU0NUUyBpcyBzZXQsIFN1bk9TIHdvbid0IGRvIG91dHB1dCB1bmxlc3MgYm90aCBD VFMgYW5kIENEIGFyZQotICBhc3NlcnRlZC4gIFNvIHdlIGRvbid0IHNldCBDUlRTQ1RTIHVubGVz cyBDRCBpcyB1cC4gIFRoaXMgc2hvdWxkIGJlIE9LLAotICBzaW5jZSB3ZSBkb24ndCBuZWVkIFJU Uy9DVFMgZHVyaW5nIGRpYWxpbmcsIGFuZCBhZnRlciBkaWFsaW5nIGlzIGNvbXBsZXRlLAotICB3 ZSBzaG91bGQgaGF2ZSBDRC4gIElmIG5vdCwgd2Ugc3RpbGwgY29tbXVuaWNhdGUsIGJ1dCB3aXRo b3V0IFJUUy9DVFMuCi0qLwotICAgIGludCBtZmxhZ3M7CQkJCS8qIE1vZGVtIHNpZ25hbCBmbGFn cyAqLwotCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOwotI2VuZGlm IC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOwot I2VuZGlmIC8qIE5FVFBUWSAqLwotCi0gICAgZGVidWcoRjEwMSwidHRoZmxvdyBTVU5PUzQxIGVu dHJ5IHN0YXR1cyIsIiIsc3RhdHVzKTsKLSAgICBpZiAoIXN0YXR1cykgewkJCS8qIFR1cm4gaGFy ZCBmbG93IG9mZiAqLwotCWlmICh0Y2dldGF0dHIodHR5ZmQsICZ0ZW1wKSA+IC0xICYmIC8qIEdl dCBkZXZpY2UgYXR0cmlidXRlcyAqLwotCSAgICAodGVtcC5jX2NmbGFnICYgQ1JUU0NUUykpIHsg LyogQ2hlY2sgZm9yIFJUUy9DVFMgKi8KLQkgICAgdGVtcC5jX2NmbGFnICY9IH5DUlRTQ1RTOwkv KiBJdCdzIHRoZXJlLCByZW1vdmUgaXQgKi8KLQkgICAgeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NB Tk9XLCZ0ZW1wKTsKLQl9Ci0gICAgfSBlbHNlIHsJCQkJLyogVHVybiBoYXJkIGZsb3cgb24gKi8K LQlpZiAoaW9jdGwodHR5ZmQsVElPQ01HRVQsJm1mbGFncykgPiAtMSAmJiAvKiBHZXQgbW9kZW0g c2lnbmFscyAqLwotCSAgICAobWZsYWdzICYgVElPQ01fQ0FSKSkgewkJLyogQ2hlY2sgZm9yIENE ICovCi0JICAgIGRlYnVnKEYxMDAsInR0aGZsb3cgU3VuT1MgaGFzIENEIiwiIiwwKTsKLQkgICAg aWYgKHRjZ2V0YXR0cih0dHlmZCwgJnRlbXApID4gLTEgJiYgLyogR2V0IGRldmljZSBhdHRyaWJ1 dGVzICovCi0JCSEodGVtcC5jX2NmbGFnICYgQ1JUU0NUUykpIHsgLyogQ2hlY2sgZm9yIFJUUy9D VFMgKi8KLQkJdGVtcC5jX2NmbGFnIHw9IENSVFNDVFM7CS8qIE5vdCB0aGVyZSwgYWRkIGl0ICov Ci0JCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQU5PVywmdGVtcCk7Ci0JICAgIH0KLQl9IGVsc2Ug ewotCSAgICB4ID0gLTE7Ci0JICAgIGRlYnVnKEYxMDAsInR0aGZsb3cgU3VuT1Mgbm8gQ0QiLCIi LDApOwotCX0KLSAgICB9Ci0jZWxzZQotI2lmZGVmIFFOWAotICAgIHN0cnVjdCB0ZXJtaW9zIHRl bXA7Ci0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOwotI2VuZGlmIC8q IE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOwotI2Vu ZGlmIC8qIE5FVFBUWSAqLwotICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgUU5YIGVudHJ5IHN0YXR1 cyIsIiIsc3RhdHVzKTsKLSAgICBpZiAodGNnZXRhdHRyKHR0eWZkLCAmdGVtcCkgPiAtMSkgewkv KiBHZXQgZGV2aWNlIGF0dHJpYnV0ZXMgKi8KLQlpZiAoIXN0YXR1cykgewkJCS8qIFR1cm4gaGFy ZCBmbG93IG9mZiAqLwotCSAgICBpZiAoKHRlbXAuY19jZmxhZyAmIChJSEZMT1d8T0hGTE9XKSkg PT0gKElIRkxPV3xPSEZMT1cpKSB7Ci0JCXRlbXAuY19jZmxhZyAmPSB+KElIRkxPV3xPSEZMT1cp OyAvKiBJdCdzIHRoZXJlLCByZW1vdmUgaXQgKi8KLQkJYXR0cnMtPmNfY2ZsYWcgJj0gfihJSEZM T1d8T0hGTE9XKTsKLQkJeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBTk9XLCZ0ZW1wKTsKLQkgICAg fQotCX0gZWxzZSB7CQkJLyogVHVybiBoYXJkIGZsb3cgb24gKi8KLQkgICAgaWYgKCh0ZW1wLmNf Y2ZsYWcgJiAoSUhGTE9XfE9IRkxPVykpICE9IChJSEZMT1d8T0hGTE9XKSkgewotCQl0ZW1wLmNf Y2ZsYWcgfD0gKElIRkxPV3xPSEZMT1cpOyAvKiBOb3QgdGhlcmUsIGFkZCBpdCAqLwotCQl0ZW1w LmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGKTsgICAvKiBCeWUgdG8gSVhPTi9JWE9GRiAqLwotCQl0 dHJhdy5jX2xmbGFnIHw9IElFWFRFTjsgICAgICAgICAvKiBNdXN0IGJlIG9uICovCi0JCXggPSB0 Y3NldGF0dHIodHR5ZmQsVENTQU5PVywmdGVtcCk7Ci0JCWF0dHJzLT5jX2NmbGFnIHw9IChJSEZM T1d8T0hGTE9XKTsKLQkJYXR0cnMtPmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGKTsKLQkgICAgfQot CX0KLSAgICB9IGVsc2UgewotCXggPSAtMTsKLQlkZWJ1ZyhGMTAwLCAidHRoZmxvdyBRTlggZ2V0 YXR0ciBmYWlscyIsICIiLCAwKTsKLSAgICB9Ci0jZWxzZQotI2lmZGVmIFBPU0lYX0NSVFNDVFMK LS8qCi0gIFBPU0lYX0NSVFNDVFMgaXMgZGVmaW5lZCBpbiBja2NkZWIuaCBvciBvbiBDQyBjb21t YW5kIGxpbmUuCi0gIE5vdGU6IERvIG5vdCBhc3N1bWUgQ1JUU0NUUyBpcyBhIG9uZS1iaXQgZmll bGQhCi0qLwotICAgIHN0cnVjdCB0ZXJtaW9zIHRlbXA7Ci0jaWZkZWYgTkVUQ01ECi0gICAgaWYg KHR0cGlwZSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQot ICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotICAgIGRlYnVn KEYxMDEsInR0aGZsb3cgUE9TSVhfQ1JUU0NUUyBlbnRyeSBzdGF0dXMiLCIiLHN0YXR1cyk7Ci0g ICAgZXJybm8gPSAwOwotICAgIHggPSB0Y2dldGF0dHIodHR5ZmQsICZ0ZW1wKTsKLSAgICBkZWJ1 ZyhGMTExLCJ0dGhmbG93IFBPU0lYX0NSVFNDVFMgdGNnZXRhdHRyIixja2l0b2EoeCksZXJybm8p OwotICAgIGVycm5vID0gMDsKLSAgICBpZiAoeCA8IDApIHsKLQl4ID0gLTE7Ci0gICAgfSBlbHNl IHsKLQlpZiAoIXN0YXR1cykgewkJCS8qIFR1cm4gaGFyZCBmbG93IG9mZiAqLwotCSAgICBpZiAo Ci0jaWZkZWYgQ09NTUVOVAotCQkvKiBUaGlzIGNhbiBmYWlsIGJlY2F1c2Ugb2Ygc2lnbiBleHRl bnNpb24gKi8KLQkJLyogZS5nLiBpbiBMaW51eCB3aGVyZSBpdCdzIEJpdCAzMSAqLwotCQkodGVt cC5jX2NmbGFnICYgQ1JUU0NUUykgPT0gQ1JUU0NUUwotI2Vsc2UKLQkJKHRlbXAuY19jZmxhZyAm IENSVFNDVFMpICE9IDAKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JCSkgewotCQl0ZW1wLmNfY2Zs YWcgJj0gfkNSVFNDVFM7IC8qIEl0J3MgdGhlcmUsIHJlbW92ZSBpdCAqLwotCQlhdHRycy0+Y19j ZmxhZyAmPSB+Q1JUU0NUUzsKLQkJeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBTk9XLCZ0ZW1wKTsK LQkJZGVidWcoRjExMSwidHRoZmxvdyBQT1NJWF9DUlRTQ1RTIE9GRiB0Y3NldGF0dHIiLAotCQkg ICAgICBja2l0b2EoeCksZXJybm8pOwotCSAgICB9IGVsc2UgewkJCS8qIEpvaG4gRHVubGFwIDIw MTAtMDEtMjYgKi8KLQkJZGVidWcoRjAwMSwKLQkJICAgICAgInR0aGZsb3cgYmVmb3JlIGZvcmNp bmcgb2ZmIGF0dHJzIENSVFNDVFMiLAotCQkgICAgICAiIiwKLQkJICAgICAgYXR0cnMtPmNfY2Zs YWcmQ1JUU0NUUwotCQkgICAgICApOwotCQlhdHRycy0+Y19jZmxhZyAmPSB+Q1JUU0NUUzsgLyog Zm9yY2UgaXQgb2ZmIGlmICFzdGF0dXMgKi8KLQkJZGVidWcoRjAwMSwKLQkJICAgICAgInR0aGZs b3cgYWZ0ZXIgZm9yY2luZyBvZmYgYXR0cnMgQ1JUU0NUUyIsCi0JCSAgICAgICIiLAotCQkgICAg ICBhdHRycy0+Y19jZmxhZyZDUlRTQ1RTCi0JCSAgICAgICk7Ci0JCX0KLQl9IGVsc2UgewkJCS8q IFR1cm4gaGFyZCBmbG93IG9uICovCi0JICAgIGlmICgKLSNpZmRlZiBDT01NRU5UCi0JCS8qIFRo aXMgY2FuIGZhaWwgYmVjYXVzZSBvZiBzaWduIGV4dGVuc2lvbiAqLwotCQkodGVtcC5jX2NmbGFn ICYgQ1JUU0NUUykgIT0gQ1JUU0NUUwotI2Vsc2UKLQkJKHRlbXAuY19jZmxhZyAmIENSVFNDVFMp ID09IDAKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JCSkgewotCQl0ZW1wLmNfY2ZsYWcgfD0gQ1JU U0NUUzsgLyogTm90IHRoZXJlLCBhZGQgaXQgKi8KLQkJdGVtcC5jX2lmbGFnICY9IH4oSVhPTnxJ WE9GRnxJWEFOWSk7IC8qIEJ5ZSB0byBJWE9OL0lYT0ZGICovCi0JCXggPSB0Y3NldGF0dHIodHR5 ZmQsVENTQU5PVywmdGVtcCk7Ci0JCWRlYnVnKEYxMTEsInR0aGZsb3cgUE9TSVhfQ1JUU0NUUyBP TiB0Y3NldGF0dHIiLAotCQkgICAgICBja2l0b2EoeCksZXJybm8pOwotCQlhdHRycy0+Y19jZmxh ZyB8PSBDUlRTQ1RTOwotCQlhdHRycy0+Y19pZmxhZyAmPSB+KElYT058SVhPRkZ8SVhBTlkpOwot CSAgICB9Ci0JfQotICAgIH0KLSNlbHNlCi0jaWZkZWYgU1VOT1M0Ci0vKgotICBTdW5PUyA0LjAg KGFuZCBtYXliZSBlYXJsaWVyPykuICBUaGlzIGNvZGUgaXMgZGFuZ2Vyb3VzIGJlY2F1c2UgaXQK LSAgcHJldmVudHMgY29tcGlsYXRpb24gd2l0aCBHTlUgZ2NjLCB3aGljaCB1c2VzIGRpZmZlcmVu dCBmb3JtYXRzIGZvciB0aGUKLSAgX0lPUnh4eCBtYWNyb3MgdGhhbiByZWd1bGFyIGNjLiAgU3Vu T1MgNC4xIGFuZCBsYXRlciBjYW4gdXNlIHRoZSBQT1NJWAotICByb3V0aW5lcyBhYm92ZSwgd2hp Y2ggd29yayBmb3IgYm90aCBjYyBhbmQgZ2NjLgotKi8KLSNkZWZpbmUgVENHRVRTIF9JT1IoVCwg OCwgc3RydWN0IHRlcm1pb3MpIC8qIEdldCBtb2RlcyBpbnRvIHRlcm1pb3Mgc3RydWN0ICovCi0j ZGVmaW5lIFRDU0VUUyBfSU9XKFQsIDksIHN0cnVjdCB0ZXJtaW9zKSAvKiBTZXQgbW9kZXMgZnJv bSB0ZXJtaW9zIHN0cnVjdCAqLwotI2RlZmluZSBDUlRTQ1RTIDB4ODAwMDAwMDAJCSAgLyogUlRT L0NUUyBmbG93IGNvbnRyb2wgKi8KLQotICAgIHN0cnVjdCB0ZXJtaW9zIHsKLQl1bnNpZ25lZCBs b25nIGNfaWZsYWc7CQkvKiBJbnB1dCBtb2RlcyAqLwotCXVuc2lnbmVkIGxvbmcgY19vZmxhZzsJ CS8qIE91dHB1dCBtb2RlcyAqLwotCXVuc2lnbmVkIGxvbmcgY19jZmxhZzsJCS8qIENvbnRyb2wg bW9kZXMgKi8KLQl1bnNpZ25lZCBsb25nIGNfbGZsYWc7CQkvKiBMaW5lIGRpc2NpcGxpbmUgbW9k ZXMgKi8KLQljaGFyIGNfbGluZTsKLQlDSEFSIGNfY2NbMTddOwotICAgIH07Ci0gICAgc3RydWN0 IHRlcm1pb3MgdGVtcDsKLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7 Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1 cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgZGVidWcoRjEwMSwidHRoZmxvdyBlbnRy eSBzdGF0dXMiLCIiLHN0YXR1cyk7Ci0gICAgaWYgKGlvY3RsKHR0eWZkLFRDR0VUUywmdGVtcCkg PiAtMSkgeyAvKiBHZXQgdGVybWluYWwgbW9kZXMuICovCi0JaWYgKHN0YXR1cykgewkJCS8qIFR1 cm4gaGFyZCBmbG93IG9uICovCi0JICAgIHRlbXAuY19jZmxhZyB8PSBDUlRTQ1RTOwkvKiBBZGQg UlRTL0NUUyB0byB0aGVtLiAqLwotCSAgICB4ID0gaW9jdGwodHR5ZmQsVENTRVRTLCZ0ZW1wKTsg LyogU2V0IHRoZW0gYWdhaW4uICovCi0JICAgIGF0dHJzLT5jX2NmbGFnIHw9IENSVFNDVFM7CS8q IEFkZCB0byBnbG9iYWwgaW5mby4gKi8KLQl9IGVsc2UgewkJCS8qIFR1cm4gaGFyZCBmbG93IG9m ZiAqLwotCSAgICB0ZW1wLmNfY2ZsYWcgJj0gfkNSVFNDVFM7Ci0JICAgIHggPSBpb2N0bCh0dHlm ZCxUQ1NFVFMsJnRlbXApOwotCSAgICBhdHRycy0+Y19jZmxhZyAmPSB+Q1JUU0NUUzsKLQl9Ci0g ICAgfQotI2Vsc2UJCQkJCS8qIE5vdCBTdW5PUyA0LjAgb3IgbGF0ZXIgKi8KLSNpZmRlZiBBSVhS UwkJCQkvKiBJQk0gQUlYIFJTLzYwMDAgKi8KLSNpZm5kZWYgQUlYNDEJCQkJLyogQnV0IG9ubHkg cHJlLTQueCA9PSBTVlI0ICovCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0dXJu KDApOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkg cmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotICAgIGlmIChzdGF0dXMpIHsKLQlpZiAo KHggPSBpb2N0bCh0dHlmZCwgVFhBRERDRCwgInJ0cyIpKSA8IDAgJiYgZXJybm8gIT0gRUJVU1kp Ci0JICBkZWJ1ZyhGMTAwLCJoYXJkZmxvdyBUWEFERENEIChydHMpIGVycm9yIiwgIiIsIDApOwot ICAgIH0gZWxzZSB7Ci0JaWYgKCh4ID0gaW9jdGwodHR5ZmQsIFRYREVMQ0QsICJydHMiKSkgPCAw ICYmIGVycm5vICE9IEVJTlZBTCkKLQkgIGRlYnVnKEYxMDAsImhhcmRmbG93IFRYREVMQ0QgKHJ0 cykgZXJyb3IiLCAiIiwgMCk7Ci0gICAgfQotI2VuZGlmIC8qIEFJWDQxICovCi0jZWxzZQkJCQkJ LyogTm90IEFJWCBSUy82MDAwICovCi0KLSNpZmRlZiBBVFRTVgkJCQkvKiBTeXN0ZW0gVi4uLiAq LwotCi0jaWZkZWYgQ0tfU0NPVjUJCQkJLyogU0NPIE9wZW4gU2VydmVyIDUuMCAqLwotI2RlZmlu ZSBDS19TQ09VTklYCi0jZWxzZQotI2lmZGVmIE1fVU5JWAkJCQkvKiBTQ08gVU5JWCAzLjJ2NC54 IG9yIGVhcmxpZXIgKi8KLSNkZWZpbmUgQ0tfU0NPVU5JWAotI2VuZGlmIC8qIE1fVU5JWCAqLwot I2VuZGlmIC8qIENLX1NDT1Y1ICovCi0KLSNpZmRlZiBTQ09fRk9SQ0VfUlRTWE9GRgotI2lmZGVm IENLX1NDT1VOSVgJCQkvKiBCdXQgbm90IFNDTyBPcGVuU2VydmVyIDUuMC40ICovCi0jaWZkZWYg U0NPX09TUjUwNAkJCS8qIG9yIGxhdGVyLi4uICovCi0jdW5kZWYgQ0tfU0NPVU5JWAotI2VuZGlm IC8qIFNDT19PU1I1MDQgKi8KLSNlbmRpZiAvKiBDS19TQ09VTklYICovCi0jZW5kaWYgLyogU0NP X0ZPUkNFX1JUU1hPRkYgKi8KLQotI2lmZGVmIENLX1NDT1VOSVgKLSNpZmRlZiBQT1NJWAotICAg IHN0cnVjdCB0ZXJtaW9zIHRlbXA7Ci0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0 dXJuKDApOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0 eSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotICAgIGRlYnVnKEYxMDEsInR0aGZs b3cgU0NPVU5JWCBQT1NJWCBlbnRyeSBzdGF0dXMiLCIiLHN0YXR1cyk7Ci0gICAgZXJybm8gPSAw OwotICAgIHggPSB0Y2dldGF0dHIodHR5ZmQsICZ0ZW1wKTsKLSAgICBkZWJ1ZyhGMTExLCJ0dGhm bG93IFNDTyBVTklYIFBPU0lYIHRjZ2V0YXR0ciIsY2tpdG9hKHgpLGVycm5vKTsKLSNlbHNlIC8q IFBPU0lYICovCi0gICAgc3RydWN0IHRlcm1pbyB0ZW1wOwotI2lmZGVmIE5FVENNRAotICAgIGlm ICh0dHBpcGUpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkK LSAgICBpZiAodHRwdHkpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLSAgICBkZWJ1 ZyhGMTAxLCJ0dGhmbG93IFNDT1VOSVggbm9uLVBPU0lYIGVudHJ5IHN0YXR1cyIsIiIsc3RhdHVz KTsKLSAgICB4ID0gaW9jdGwodHR5ZmQsIFRDR0VUQSwgJnRlbXApOwotICAgIGRlYnVnKEYxMTEs InR0aGZsb3cgU0NPIFVOSVggbm9uLVBPU0lYIFRDR0VUQSIsY2tpdG9hKHgpLGVycm5vKTsKLSNl bmRpZiAvKiBQT1NJWCAqLwotLyoKLSAgVGhpcyBpcyBub3QgcmVhbGx5IFBPU0lYLCBzaW5jZSBQ T1NJWCBkb2VzIG5vdCBkZWFsIHdpdGggaGFyZHdhcmUgZmxvdwotICBjb250cm9sLCBidXQgd2Ug YXJlIHVzaW5nIHRoZSBQT1NJWCBBUElzLiAgSW4gZmFjdCwgUlRTRkxPVyBhbmQgQ1RTRkxPVwot ICBhcmUgZGVmaW5lZCBpbiB0ZXJtaW8uaCwgYnV0IHdpdGhpbiAjaWZuZGVmIF9QT1NJWF9TT1VS Q0UuLiNlbmRpZi4gIFNvCi0gIGxldCdzIHRyeSBmb3JjaW5nIHRoZWlyIGRlZmluaXRpb25zIGhl cmUuCi0qLwotI2lmbmRlZiBDVFNGTE9XCi0jZGVmaW5lIENUU0ZMT1cgMDAyMDAwMAotICAgIGRl YnVnKEYxMDEsInR0aGZsb3cgU0NPIGRlZmluaW5nIENUU0ZMT1ciLCIiLENUU0ZMT1cpOwotI2Vs c2UKLSAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBDVFNGTE9XIiwiIixDVFNGTE9XKTsKLSNl bmRpZiAvKiBDVFNGTE9XICovCi0jaWZuZGVmIFJUU0ZMT1cKLSNkZWZpbmUgUlRTRkxPVyAwMDQw MDAwCi0gICAgZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gZGVmaW5pbmcgUlRTRkxPVyIsIiIsUlRT RkxPVyk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIFJUU0ZMT1ciLCIiLFJU U0ZMT1cpOwotI2VuZGlmIC8qIFJUU0ZMT1cgKi8KLSNpZm5kZWYgT1JUU0ZMCi0jZGVmaW5lIE9S VFNGTCAwMTAwMDAwCi0gICAgZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gZGVmaW5pbmcgT1JUU0ZM IiwiIixPUlRTRkwpOwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBPUlRTRkwi LCIiLE9SVFNGTCk7Ci0jZW5kaWYgLyogT1JUU0ZMICovCi0KLSAgICBpZiAoeCAhPSAtMSkgewot CWlmIChzdGF0dXMpIHsJCQkvKiBUdXJuIGl0IE9OICovCi0JICAgIHRlbXAuY19jZmxhZyB8PSBS VFNGTE9XfENUU0ZMT1c7Ci0JICAgIGF0dHJzLT5jX2NmbGFnIHw9IFJUU0ZMT1d8Q1RTRkxPVzsK LSNpZmRlZiBPUlRTRkwKLQkgICAgdGVtcC5jX2NmbGFnICY9IH5PUlRTRkw7Ci0JICAgIGF0dHJz LT5jX2NmbGFnICY9IH5PUlRTRkw7Ci0jZW5kaWYgLyogT1JUU0ZMICovCi0JICAgIHRlbXAuY19p ZmxhZyAmPSB+KElYT058SVhPRkZ8SVhBTlkpOwotCSAgICBhdHRycy0+Y19pZmxhZyAmPSB+KElY T058SVhPRkZ8SVhBTlkpOwotCX0gZWxzZSB7CQkJLyogVHVybiBpdCBPRkYgKi8KLSNpZmRlZiBP UlRTRkwKLQkgICAgdGVtcC5jX2NmbGFnICY9IH4oUlRTRkxPV3xDVFNGTE9XfE9SVFNGTCk7Ci0J ICAgIGF0dHJzLT5jX2NmbGFnICY9IH4oUlRTRkxPV3xDVFNGTE9XfE9SVFNGTCk7Ci0jZWxzZSAg LyogT1JUU0ZMICovCi0JICAgIHRlbXAuY19jZmxhZyAmPSB+KFJUU0ZMT1d8Q1RTRkxPVyk7Ci0J ICAgIGF0dHJzLT5jX2NmbGFnICY9IH4oUlRTRkxPV3xDVFNGTE9XKTsKLSNlbmRpZiAvKiBPUlRT RkwgKi8KLQl9Ci0jaWZkZWYgUE9TSVgKLQl4ID0gdGNzZXRhdHRyKHR0eWZkLCBUQ1NBRFJBSU4s ICZ0ZW1wKTsKLSNlbHNlCi0JeCA9IGlvY3RsKHR0eWZkLCBUQ1NFVEEsICZ0ZW1wKTsKLSNlbmRp ZiAvKiBQT1NJWCAqLwotCWRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIHNldCBtb2RlcyIsIiIseCk7 Ci0gICAgfQotI2Vsc2UgLyogTm90IFNDTyBVTklYICovCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYg KHR0cGlwZSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQot ICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotICAgIGlmICgh c3RhdHVzKSB7CQkJLyogVHVybiBpdCBPRkYgKi8KLSNpZmRlZiBSVFNYT0ZGCi0JZGVidWcoRjEw MCwidHRoZmxvdyBBVFRTViBSVFMvQ1RTIE9GRiIsIiIsMCk7Ci0JcmN0c3gueF9oZmxhZyAmPSB+ KFJUU1hPRkZ8Q1RTWE9OKTsKLSNpZmRlZiBUQ1NFVFgKLQl4ID0gaW9jdGwodHR5ZmQsVENTRVRY LCZyY3RzeCk7Ci0JZGVidWcoRjEwMSwidHRoZmxvdyBBVFRTViBUQ1NFVFggT0ZGIiwiIix4KTsK LSNlbHNlCi0JeCA9IC0xCi0JZGVidWcoRjEwMCwidHRoZmxvdyBUQ1NFVFggbm90IGRlZmluZWQi LCIiLDApOwotI2VuZGlmIC8qIFRDU0VUWCAqLwotI2Vsc2UKLQlkZWJ1ZyhGMTAwLCJ0dGhmbG93 IEFUVFNWIFJUU1hPRkYgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8qIFJUU1hPRkYgKi8K LSNpZmRlZiBEVFJYT0ZGCi0JZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBEVFIvQ0QgT0ZGIiwi IiwwKTsKLQlyY3RzeC54X2hmbGFnICY9IH4oRFRSWE9GRnxDRFhPTik7Ci0JeCA9IGlvY3RsKHR0 eWZkLFRDU0VUWCwmcmN0c3gpOwotCWRlYnVnKEYxMDEsInR0aGZsb3cgQVRUU1YgRFRSWE9GRiBP RkYiLCIiLHgpOwotI2Vsc2UKLQlkZWJ1ZyhGMTAwLCJ0dGhmbG93IEFUVFNWIERUUlhPRkYgbm90 IGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8qIERUUlhPRkYgKi8KLSAgICB9IGVsc2UgewkJCQkv KiBUdXJuIGl0IE9OLiAqLwotCWlmIChmbG93ID09IEZMT19SVFNDKSB7CS8qIFJUUy9DVFMgRmxv dyBjb250cm9sLi4uICovCi0JICAgIGRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgUlRTL0NUUyBP TiIsIiIsMCk7Ci0jaWZkZWYgUlRTWE9GRgotCSAgICAvKiBUaGlzIGlzIHRoZSBwcmVmZXJyZWQg d2F5LCBhY2NvcmRpbmcgdG8gU1ZJRDMgKi8KLSNpZmRlZiBUQ0dFVFgKLQkgICAgeCA9IGlvY3Rs KHR0eWZkLFRDR0VUWCwmcmN0c3gpOwotCSAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFRDR0VUWCIs IiIseCk7Ci0JICAgIGlmICh4ID4gLTEpIHsKLQkJcmN0c3gueF9oZmxhZyB8PSBSVFNYT0ZGIHwg Q1RTWE9OOwotCQl4ID0gaW9jdGwodHR5ZmQsVENTRVRYLCZyY3RzeCk7Ci0JCWRlYnVnKEYxMDAs InR0aGZsb3cgQVRUU1YgaW9jdGwiLCIiLHgpOwotCSAgICB9Ci0jZWxzZQotCSAgICBkZWJ1ZyhG MTAwLCJ0dGhmbG93IFRDR0VUWCBub3QgZGVmaW5lZCIsIiIsMCk7Ci0JICAgIHggPSAtMQotI2Vu ZGlmIC8qIFRDR0VUWCAqLwotI2Vsc2UKLQkgICAgZGVidWcoRjEwMCwidHRoZmxvdyBSVFNYT0ZG IG5vdCBkZWZpbmVkIiwiIiwwKTsKLQkgICAgeCA9IC0xOwotI2VuZGlmIC8qIFJUU1hPRkYgKi8K LQl9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX0RUUkMpIHsJLyogRFRSL0NEIEZsb3cgY29udHJvbC4u LiAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IEFUVFNWIERUUi9DRCBPTiIsIiIsMCk7Ci0j aWZkZWYgRFRSWE9GRgotCSAgICAvKiBUaGlzIGlzIHN0cmFpZ2h0IG91dCBvZiBTVklEIFI0ICov Ci0JICAgIGlmIChpb2N0bCh0dHlmZCxUQ0dFVFgsJnJjdHN4KSA+IC0xKSB7Ci0JCXJjdHN4Lnhf aGZsYWcgJj0gfihEVFJYT0ZGfENEWE9OKTsKLQkJeCA9IGlvY3RsKHR0eWZkLFRDU0VUWCwmcmN0 c3gpOwotCSAgICB9Ci0jZWxzZQotCSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IEFUVFNWIERUUlhP RkYgbm90IGRlZmluZWQiLCIiLDApOwotCSAgICB4ID0gLTE7Ci0jZW5kaWYgLyogRFRSWE9GRiAq LwotCX0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfU0NPVU5JWCAqLwotCi0jZWxzZSAvKiBub3QgU3lz dGVtIFYuLi4gKi8KLQotI2lmZGVmIENLX0RUUkNUUwotI2lmZGVmIExET0RUUgotI2lmZGVmIExE T0NUUwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKLSNlbmRpZiAv KiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHJldHVybigwKTsKLSNl bmRpZiAvKiBORVRQVFkgKi8KLSAgICB4ID0gTERPRFRSIHwgTERPQ1RTOwkJLyogRm91bmQgb25s eSBvbiBVVEVLPyAqLwotICAgIGlmIChmbG93ID09IEZMT19EVFJUICYmIHN0YXR1cykgewkvKiBV c2UgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCi0JaWYgKGxtb2RlZikgewotCSAgICB4ID0gaW9j dGwodHR5ZmQsVElPQ0xCSVMsJngpOwotCSAgICBpZiAoeCA8IDApIHsKLQkgICAgICAgIGRlYnVn KEYxMDAsImhhcmRmbG93IFRJT0NMQklTIGVycm9yIiwiIiwwKTsKLQkgICAgfSBlbHNlIHsKLQkJ bG1vZGVmKys7Ci0JCWRlYnVnKEYxMDAsImhhcmRmbG93IFRJT0NMQklTIG9rIiwiIiwwKTsKLQkg ICAgfQotCX0KLSAgICB9IGVsc2UgewotCWlmIChsbW9kZWYpIHsKLQkgICAgeCA9IGlvY3RsKHR0 eWZkLFRJT0NMQklDLCZ4KTsKLQkgICAgaWYgKHggPCAwKSB7Ci0JICAgICAgICBkZWJ1ZyhGMTAw LCJoYXJkZmxvdyBUSU9DTEJJQyBlcnJvciIsIiIsMCk7Ci0JICAgIH0gZWxzZSB7Ci0JCWxtb2Rl ZisrOwotCQlkZWJ1ZyhGMTAwLCJoYXJkZmxvdyBUSU9DTEJJQyBvayIsIiIsMCk7Ci0JICAgIH0K LQl9Ci0gICAgfQotI2VuZGlmIC8qIExET0RUUiAqLwotI2VuZGlmIC8qIExET0NUUyAqLwotI2Vu ZGlmIC8qIENLX0RUUkNUUyAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogQUlYUlMg Ki8KLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNlbmRpZiAvKiBRTlggKi8KLSNlbmRpZiAvKiBQT1NJ WF9DUlRTQ1RTICovCi0jZW5kaWYgLyogU1VOT1M0MSAqLwotCi0jZWxzZSAvKiBPWE9TICovCi0K LSAgICBzdHJ1Y3QgdGVybWlvcyB0ZW1wOwkJLyogT2xpdmV0dGkgWC9PUyAuLi4gKi8KLQotI2lm ZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRDTUQg Ki8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHJldHVybigwKTsKLSNlbmRpZiAvKiBO RVRQVFkgKi8KLSAgICB4ID0gaW9jdGwodHR5ZmQsVENHRVRTLCZ0ZW1wKTsKLSAgICBpZiAoeCA9 PSAwKSB7Ci0JdGVtcC5jX2NmbGFnICY9IH4oQ1JUU0NUU3xDRFRSQ1RTfENCUktGTE9XfENEVFJE U1J8Q1JUU0RTUik7Ci0JaWYgKHN0YXR1cykgewotCSAgICBzd2l0Y2ggKGZsb3cpIHsKLQkgICAg ICBjYXNlIEZMT19SVFNDOiB0ZW1wLmNfY2ZsYWcgfD0gQ1JUU0NUUzsgLyogUlRTL0NUUyAoaGFy ZCkgKi8KLQkJYnJlYWs7Ci0JICAgICAgY2FzZSBGTE9fRFRSVDogdGVtcC5jX2NmbGFnIHw9IENE VFJDVFM7IC8qIERUUi9DVFMgKGhhcmQpICovCi0JCWJyZWFrOwotCSAgICB9Ci0JfQotCXggPSBp b2N0bCh0dHlmZCxUQ1NFVFMsJnRlbXApOwotICAgIH0KLSNlbmRpZiAvKiBPWE9TICovCi0gICAg cmV0dXJuKHgpOwotCi0jZW5kaWYgLyogUGxhbjkgKi8KLX0KLQotLyogIFQgVCBQIEsgVCAgLS0g IENvbmRpdGlvbiB0aGUgY29tbXVuaWNhdGlvbiBsaW5lIGZvciBwYWNrZXRzICovCi0vKiAgICAg ICAgICAgICAgICAgb3IgZm9yIG1vZGVtIGRpYWxpbmcgKi8KLQotLyoKLSAgSWYgY2FsbGVkIHdp dGggc3BlZWQgPiAtMSwgYWxzbyBzZXQgdGhlIHNwZWVkLgotICBSZXR1cm5zIDAgb24gc3VjY2Vz cywgLTEgb24gZmFpbHVyZS4KLQotICBOT1RFOiB0aGUgInhmbG93IiBwYXJhbWV0ZXIgaXMgc3Vw cG9zZWQgdG8gYmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAotICB0eXBlIG9mIGZsb3cgY29udHJv bCwgYnV0IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHRoaXMgcGFyYW1ldGVyIGlzIGFsc28KLSAg dXNlZCB0byBpbmRpY2F0ZSB0aGF0IHdlIGFyZSBkaWFsaW5nLiAgVGhlcmVmb3JlLCB3aGVuIHRo ZSB0cnVlIGZsb3cKLSAgY29udHJvbCBzZXR0aW5nIGlzIG5lZWRlZCwgd2UgYWNjZXNzIHRoZSBl eHRlcm5hbCB2YXJpYWJsZSAiZmxvdyIsIHJhdGhlcgotICB0aGFuIHRydXN0aW5nIG91ciAieGZs b3ciIGFyZ3VtZW50LgotKi8KLWludAotI2lmZGVmIENLX0FOU0lDCi10dHBrdChsb25nIHNwZWVk LCBpbnQgeGZsb3csIGludCBwYXJpdHkpCi0jZWxzZQotdHRwa3Qoc3BlZWQseGZsb3cscGFyaXR5 KSBsb25nIHNwZWVkOyBpbnQgeGZsb3csIHBhcml0eTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot LyogdHRwa3QgKi8gewotI2lmbmRlZiBOT0xPQ0FMCi0gICAgaW50IHMyOwotICAgIGludCBzID0g LTE7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIGludCB4OwotICAgIGV4dGVybiBpbnQgZmxv dzsJCQkvKiBSRUFMIGZsb3ctY29udHJvbCBzZXR0aW5nICovCi0KLSAgICBpZiAodHR5ZmQgPCAw KSByZXR1cm4oLTEpOyAgICAgICAgICAvKiBOb3Qgb3Blbi4gKi8KLQotICAgIGRlYnVnKEYxMDEs InR0cGt0IHBhcml0eSIsIiIscGFyaXR5KTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCB4ZmxvdyIs IiIseGZsb3cpOwotICAgIGRlYnVnKEYxMDEsInR0cGt0IHNwZWVkIiwiIiwoaW50KSBzcGVlZCk7 Ci0KLSAgICB0dHBydHkgPSBwYXJpdHk7ICAgICAgICAgICAgICAgICAgICAvKiBMZXQgb3RoZXIg dHQgZnVuY3Rpb25zIHNlZSB0aGVzZS4gKi8KLSAgICB0dHNwZWVkID0gc3BlZWQ7CQkJLyogTWFr ZSBnbG9iYWwgY29weSBmb3IgdGhpcyBtb2R1bGUgKi8KLSAgICB0dHBtc2sgPSB0dHBydHkgPyAw MTc3IDogMDM3NzsJLyogUGFyaXR5IHN0cmlwcGluZyBtYXNrICovCi0jaWZkZWYgUEFSU0VOU0UK LSAgICBuZWVkcGNoayA9IHR0cHJ0eSA/IDAgOiAxOwkJLyogUGFyaXR5IGNoZWNrIG5lZWRlZD8g Ki8KLSNlbHNlCi0gICAgbmVlZHBjaGsgPSAwOwotI2VuZGlmIC8qIFBBUlNFTlNFICovCi0KLSAg ICBkZWJ1ZyhGMTAxLCJ0dHBrdCB0dHBtc2siLCIiLHR0cG1zayk7Ci0gICAgZGVidWcoRjEwMSwi dHRwa3QgbmV0Y29ubiIsIiIsbmV0Y29ubik7Ci0KLSNpZmRlZiBORVRDT05OCQkJCS8qIE5vIG1v ZGUtY2hhbmdpbmcgZm9yIHRlbG5ldCAqLwotICAgIGlmIChuZXRjb25uKSB7Ci0jaWZkZWYgVENQ U09DS0VUCi0jaWZkZWYgVENQX05PREVMQVkKLSAgICAgICAgaWYgKHR0bmV0ID09IE5FVF9UQ1BC KSB7CS8qIEJ1dCB0dXJuIG9mZiBOYWdsZSAqLwotICAgICAgICAgICAgZXh0ZXJuIGludCB0Y3Bf bm9kZWxheTsKLSAgICAgICAgICAgIG5vZGVsYXlfc2F2ID0gdGNwX25vZGVsYXk7Ci0gICAgICAg ICAgICBub19kZWxheSh0dHlmZCwxKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIFRDUF9OT0RFTEFZ ICovCi0jaWZkZWYgVE5fQ09NUE9SVAotICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgewotICAg ICAgICAgICAgaW50IHJjID0gLTE7Ci0gICAgICAgICAgICBpZiAodHZ0ZmxnID09IDAgJiYgc3Bl ZWQgPT0gdHRzcGVlZCAmJiBmbG93ID09IHR0ZmxvdwotICAgICAgICAgICAgICAgICAvKiAmJiB0 dGNhcnIgPT0gY3VyY2FyciAqLyApIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHBr dCBtb2RlcyBhbHJlYWR5IHNldCwgc2tpcHBpbmcuLi4iLCIiLDApOwotICAgICAgICAgICAgICAg IHJldHVybigwKTsJCS8qIEFscmVhZHkgYmVlbiBjYWxsZWQuICovCi0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBpZiAoZmxvdyAhPSB0dGZsb3cpIHsKLSAgICAgICAgICAgICAgICBpZiAoKHJj ID0gdG5zZXRmbG93KGZsb3cpKSA8IDApCi0JCSAgcmV0dXJuKHJjKTsKLSAgICAgICAgICAgICAg ICB0dGZsb3cgPSBmbG93OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNwZWVkICE9 IHR0c3BlZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3BlZWQgPD0gMCkgCi0JCSAgc3BlZWQg PSB0bmNfZ2V0X2JhdWQoKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICgocmMgPSB0bmNfc2V0 X2JhdWQoc3BlZWQpKSA8IDApCi0JCSAgcmV0dXJuKHJjKTsKLSAgICAgICAgICAgICAgICB0dHNw ZWVkID0gc3BlZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0bmNfc2V0X2RhdGFzaXpl KDgpOwotCSAgICB0bmNfc2V0X3N0b3BzaXplKHN0b3BiaXRzKTsKLQotI2lmZGVmIEhXUEFSSVRZ Ci0gICAgICAgICAgICBpZiAoaHdwYXJpdHkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGh3 cGFyaXR5KSB7Ci0JCSAgY2FzZSAnZSc6CQkJLyogRXZlbiAqLwotICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBldmVuIHBhcml0eSIsIiIsMCk7Ci0gICAgICAg ICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDMpOwotICAgICAgICAgICAgICAgICAgICBicmVh azsKLQkJICBjYXNlICdvJzoJCQkvKiBPZGQgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWco RjEwMCwidHRyZXMgOCBiaXRzICsgb2RkIHBhcml0eSIsIiIsMCk7Ci0gICAgICAgICAgICAgICAg ICAgIHRuY19zZXRfcGFyaXR5KDIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJICBj YXNlICdtJzoJCQkvKiBNYXJrICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0 cmVzIDggYml0cyArIGludmFsaWQgcGFyaXR5OiBtYXJrIiwiIiwwKTsKLSAgICAgICAgICAgICAg ICAgICAgdG5jX3NldF9wYXJpdHkoNCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkg IGNhc2UgJ3MnOgkJCS8qIFNwYWNlICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAs InR0cmVzIDggYml0cyArIGludmFsaWQgcGFyaXR5OiBzcGFjZSIsIiIsMCk7Ci0gICAgICAgICAg ICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgCi0jZW5kaWYgLyogSFdQQVJJ VFkgKi8KLQkgICAgewotICAgICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDEpOyAgICAgICAg ICAgICAgLyogTm9uZSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdHZ0ZmxnID0gMDsK LSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIFROX0NPTVBPUlQg Ki8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSAgICAgICAgdHZ0ZmxnID0gMDsKLSAgICAgICAg cmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBORVRDT05OICovCi0jaWZkZWYgTkVUQ01ECi0g ICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5F VFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotCi0j aWZuZGVmIFBsYW45Ci0gICAgaWYgKHR0ZmRmbGcgJiYgIWlzYXR0eSh0dHlmZCkpIHJldHVybigw KTsKLSNlbmRpZiAvKiBQbGFuOSAqLwotCi0jaWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUgU1ZPUlBP U0lYCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2lmbmRlZiBTVk9SUE9TSVgJCQkvKiBCZXJr ZWxleSwgVjcsIGV0Yy4gKi8KLSNpZmRlZiBMUEFTUzgKLS8qCi0gRm9yIHNvbWUgcmVhc29uLCB3 aXRoIEJTRCB0ZXJtaW5hbCBkcml2ZXJzLCB5b3UgY2FuJ3Qgc2V0IEZMT1cgdG8gWE9OL1hPRkYK LSBhZnRlciBoYXZpbmcgcHJldmlvdXNseSBzZXQgaXQgdG8gTk9ORSB3aXRob3V0IGNsb3Npbmcg YW5kIHJlb3BlbmluZyB0aGUKLSBkZXZpY2UuICBVbmxlc3MgdGhlcmUncyBzb21ldGhpbmcgSSBv dmVybG9va2VkIGJlbG93Li4uCi0qLwotICAgIGlmICh0dGZsb3cgPT0gRkxPX05PTkUgJiYgZmxv dyA9PSBGTE9fWE9OWCAmJiB4bG9jYWwgPT0gMCkgewotCWRlYnVnKEYxMDEsInR0cGt0IGV4ZWN1 dGluZyBob3JyaWJsZSBmbG93IGtsdWRnZSIsIiIsMCk7Ci0JdHRjbG9zKDApOwkJCS8qIENsb3Nl IGl0ICovCi0JeCA9IDA7Ci0JdHRvcGVuKHR0bm1zdiwmeCx0dG1kbSwwKTsJLyogT3BlbiBpdCBh Z2FpbiAqLwotICAgIH0KLSNlbmRpZiAvKiBMUEFTUzggKi8KLSNlbmRpZiAvKiBTVk9SUE9TSVgg Ki8KLQotI2lmZGVmIENPSEVSRU5UCQkJCS8qIFRoaXMgbXVzdCBiZSB2ZXN0aWdpYWwgc2luY2Ug d2UgKi8KLSN1bmRlZiBTVk9SUE9TSVgJCQkvKiByZXZlcnNlIGl0IGEgZmV3IGxpbmVzIGJlbG93 Li4uICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotICAgIGlmICh4ZmxvdyAhPSBGTE9fRElB TCAmJiB4ZmxvdyAhPSBGTE9fRElBWCkKLSAgICAgIHR0ZmxvdyA9IHhmbG93OwkJCS8qIE5vdyBt YWtlIHRoaXMgYXZhaWxhYmxlIHRvby4gKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgaWYgKHhs b2NhbCkgewotCXMyID0gKGludCkgKHNwZWVkIC8gMTBMKTsJLyogQ29udmVydCBicHMgdG8gY3Bz ICovCi0JZGVidWcoRjEwMSwidHRwa3QgY2FsbGluZyB0dHNzcGQiLCIiLHMyKTsKLQlzID0gdHRz c3BkKHMyKTsJCQkvKiBDaGVjayBhbmQgc2V0IHRoZSBzcGVlZCAqLwotCWRlYnVnKEYxMDEsInR0 cGt0IHR0c3NwZCByZXN1bHQiLCIiLHMpOwotIAljYXJyY3RsKCZ0dHJhdywgeGZsb3cgIT0gRkxP X0RJQUwgLyogQ2FycmllciBjb250cm9sICovCi0JCSYmICh0dGNhcnIgPT0gQ0FSX09OIHx8ICh0 dGNhcnIgPT0gQ0FSX0FVVCAmJiB0dG1kbSAhPSAwKSkpOwotCXR2dGZsZyA9IDA7CQkJLyogU28g dHR2dCgpIHdpbGwgd29yayBuZXh0IHRpbWUgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9MT0NBTCAq LwotCi0jaWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUgU1ZPUlBPU0lYCi0jZW5kaWYgLyogQ09IRVJF TlQgKi8KLQotI2lmbmRlZiBTVk9SUE9TSVgJCQkvKiBCU0Qgc2VjdGlvbiAqLwotICAgIGlmIChm bG93ID09IEZMT19SVFNDIHx8CQkvKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KLQlmbG93ID09 IEZMT19EVFJDIHx8Ci0JZmxvdyA9PSBGTE9fRFRSVCkgewotCXR0aGZsb3coZmxvdywgMSwgJnR0 cmF3KTsKLQlkZWJ1ZyhGMTAwLCJ0dHBrdCBoYXJkIGZsb3csIFRBTkRFTSBvZmYsIFJBVyBvbiIs IiIsMCk7Ci0JdHRyYXcuc2dfZmxhZ3MgJj0gflRBTkRFTTsJLyogVHVybiBvZmYgc29mdHdhcmUg ZmxvdyBjb250cm9sICovCi0JdHRyYXcuc2dfZmxhZ3MgfD0gUkFXOwkJLyogRW50ZXIgcmF3IG1v ZGUgKi8KLSAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX05PTkUpIHsJLyogTm8gZmxvdyBjb250 cm9sICovCi0JZGVidWcoRjEwMCwidHRwa3Qgbm8gZmxvdywgVEFOREVNIG9mZiwgUkFXIG9uIiwi IiwwKTsKLQl0dHJhdy5zZ19mbGFncyAmPSB+VEFOREVNOwkvKiBUdXJuIG9mZiBzb2Z0d2FyZSBm bG93IGNvbnRyb2wgKi8KLQl0dGhmbG93KGZsb3csIDAsICZ0dHJhdyk7CS8qIFR1cm4gb2ZmIGFu eSBoYXJkd2FyZSBmL2MgdG9vICovCi0JdHRyYXcuc2dfZmxhZ3MgfD0gUkFXOwkJLyogRW50ZXIg cmF3IG1vZGUgKi8KLSAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX0tFRVApIHsJLyogS2VlcCBk ZXZpY2UncyBvcmlnaW5hbCBzZXR0aW5nICovCi0JZGVidWcoRjEwMCwidHRwa3Qga2VlcGluZyBv cmlnaW5hbCBUQU5ERU0iLCIiLDApOwotCXR0cmF3LnNnX2ZsYWdzICY9IH5UQU5ERU07Ci0JdHRy YXcuc2dfZmxhZ3MgfD0gKHR0b2xkLnNnX2ZsYWdzICYgVEFOREVNKTsKLQkvKiBOT1RFOiBXZSBz aG91bGQgYWxzbyBoYW5kbGUgaGFyZHdhcmUgZmxvdyBjb250cm9sIGhlcmUhICovCi0gICAgfQot Ci0vKiBTRVQgRkxPVyBYT04vWE9GRiBpcyBpbiBlZmZlY3QsIG9yIFNFVCBGTE9XIEtFRVAgcmVz dWx0ZWQgaW4gWG9uL1hvZmYgKi8KLQotICAgIGlmICgoZmxvdyA9PSBGTE9fWE9OWCkgfHwgKHR0 cmF3LnNnX2ZsYWdzICYgVEFOREVNKSkgewotCWRlYnVnKEYxMDAsInR0cGt0IHR1cm5pbmcgb24g VEFOREVNIiwiIiwwKTsKLQl0dHJhdy5zZ19mbGFncyB8PSBUQU5ERU07CS8qIFNvIGFzayBmb3Ig aXQuICovCi0KLSNpZmRlZiBMUEFTUzgJCQkJLyogQ2FuIHBhc3MgOC1iaXQgZGF0YSB0aHJvdWdo PyAqLwotLyogSWYgdGhlIExQQVNTOCBsb2NhbCBtb2RlIGlzIGF2YWlsYWJsZSwgdGhlbiBmbG93 IGNvbnRyb2wgY2FuIGFsd2F5cyAgKi8KLS8qIGJlIHVzZWQsIGV2ZW4gaWYgcGFyaXR5IGlzIG5v bmUgYW5kIHdlIGFyZSB0cmFuc2ZlcnJpbmcgOC1iaXQgZGF0YS4gICovCi0vKiBCdXQgd2Ugb25s eSBuZWVkIHRvIGRvIGFsbCB0aGlzIGlmIFhvbi9Yb2ZmIGlzIHJlcXVlc3RlZC4gKi8KLS8qIEJV VC4uLiB0aGlzIHRlbmRzIG5vdCB0byB3b3JrIHRocm91Z2ggSVAgb3IgTEFUIGNvbm5lY3Rpb25z LCB0ZXJtaW5hbCAqLwotLyogc2VydmVycywgdGVsbmV0LCBybG9naW4sIGV0Yywgc28gaXQgaXMg Y3VycmVudGx5IGRpc2FibGVkLiAqLwotCXggPSBMUEFTUzg7CQkJLyogSWYgTFBBU1M4IGRlZmlu ZWQsIHRoZW4gKi8KLQlkZWJ1ZyhGMTAwLCJ0dHBrdCBleGVjdXRpbmcgTFBBU1M4IGNvZGUiLCIi LDApOwotCWlmIChsbW9kZWYpIHsJCQkvKiBUSU9DTEJJUyBtdXN0IGJlIHRvby4gKi8KLQkgICAg eCA9IGlvY3RsKHR0eWZkLFRJT0NMQklTLCZ4KTsgLyogVHJ5IHRvIHNldCBMUEFTUzguICovCi0J ICAgIGlmICh4IDwgMCkgewotCQlkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9DTEJJUyBlcnJvciIsIiIs MCk7Ci0JICAgIH0gZWxzZSB7Ci0JCWxtb2RlZisrOwotCQlkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9D TEJJUyBvayIsIiIsMCk7Ci0JICAgIH0KLQl9Ci0vKgotIEJ1dCBpZiB3ZSB1c2UgTFBBU1M4IG1v ZGUsIHdlIG11c3QgZXhwbGljaXRseSB0dXJuIG9mZgotIHRlcm1pbmFsIGludGVycnVwdHMgb2Yg YWxsIGtpbmRzLgotKi8KLSNpZmRlZiBUSU9DR0VUQwkJCQkvKiBOb3QgcmF3bW9kZSwgKi8KLQlp ZiAodGNoYXJmICYmICh4bG9jYWwgPT0gMCkpIHsJLyogbXVzdCB0dXJuIG9mZiAqLwotCSAgICB0 Y2hub2kudF9pbnRyYyA9IC0xOwkvKiBpbnRlcnJ1cHQgY2hhcmFjdGVyICovCi0JICAgIHRjaG5v aS50X3F1aXRjID0gLTE7CS8qIGFuZCBxdWl0IGNoYXJhY3Rlci4gKi8KLQkgICAgdGNobm9pLnRf c3RhcnRjID0gMTc7CS8qIE1ha2Ugc3VyZSB4b24gKi8KLQkgICAgdGNobm9pLnRfc3RvcGMgPSAx OTsJLyogYW5kIHhvZmYgbm90IGlnbm9yZWQuICovCi0jaWZuZGVmIE5PQlJLQwotCSAgICB0Y2hu b2kudF9lb2ZjID0gLTE7CQkvKiBlb2YgY2hhcmFjdGVyLiAqLwotCSAgICB0Y2hub2kudF9icmtj ID0gLTE7CQkvKiBicmsgY2hhcmFjdGVyLiAqLwotI2VuZGlmIC8qIE5PQlJLQyAqLwotCSAgICBp ZiAoaW9jdGwodHR5ZmQsVElPQ1NFVEMsJnRjaG5vaSkgPCAwKSB7Ci0JCWRlYnVnKEYxMDAsInR0 cGt0IFRJT0NTRVRDIGZhaWxlZCIsIiIsMCk7Ci0JICAgIH0gZWxzZSB7Ci0JCXRjaGFyZiA9IDE7 Ci0JCWRlYnVnKEYxMDAsInR0cGt0IFRJT0NTRVRDIG9rIiwiIiwwKTsKLQkgICAgfQotI2lmZGVm IENPTU1FTlQKLS8qIG9ubHkgZm9yIHBhcmFub2lkIGRlYnVnZ2luZyAqLwotCSAgICBpZiAodGNo YXJmKSB7Ci0JCXN0cnVjdCB0Y2hhcnMgZm9vOwotCQljaGFyIHRjaGJ1ZlsxMDBdOwotCQlpb2N0 bCgwLFRJT0NHRVRDLCZmb28pOwotCQlzcHJpbnRmKHRjaGJ1ZiwKLQkJICAgICJpbnRyPSVkLHF1 aXQ9JWQsIHN0YXJ0PSVkLCBzdG9wPSVkLCBlb2Y9JWQsIGJyaz0lZCIsCi0JCSAgICBmb28udF9p bnRyYywgZm9vLnRfcXVpdGMsIGZvby50X3N0YXJ0YywKLQkJICAgIGZvby50X3N0b3BjLCBmb28u dF9lb2ZjLCAgZm9vLnRfYnJrYyk7Ci0JCWRlYnVnKEYxMTAsInR0cGt0IGNoYXJzIix0Y2hidWYs MCk7Ci0JICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JfQotCXR0cmF3LnNnX2ZsYWdzIHw9 IENCUkVBSzsJLyogTmVlZGVkIGZvciB1bmtub3duIHJlYXNvbiAqLwotI2VuZGlmIC8qIFRJT0NH RVRDICovCi0KLS8qIFByZXZlbnQgc3VzcGVuZCBkdXJpbmcgcGFja2V0IG1vZGUgKi8KLSNpZmRl ZiBUSU9DR0xUQwkJCQkvKiBOb3QgcmF3bW9kZSwgKi8KLQlpZiAobHRjaGFyZiAmJiAoeGxvY2Fs ID09IDApKSB7CS8qIG11c3QgdHVybiBvZmYgKi8KLQkgICAgbHRjaG5vaS50X3N1c3BjID0gLTE7 CS8qIHN1c3BlbmQgY2hhcmFjdGVyICovCi0JICAgIGx0Y2hub2kudF9kc3VzcGMgPSAtMTsJLyog YW5kIGRlbGF5ZWQgc3VzcGVuZCBjaGFyYWN0ZXIgKi8KLQkgICAgaWYgKGlvY3RsKHR0eWZkLFRJ T0NTTFRDLCZ0Y2hub2kpIDwgMCkgewotCQlkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9DU0xUQyBmYWls ZWQiLCIiLDApOwotCSAgICB9IGVsc2UgewotCQlsdGNoYXJmID0gMTsKLQkJZGVidWcoRjEwMCwi dHRwa3QgVElPQ1NMVEMgb2siLCIiLDApOwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIFRJT0NHTFRD ICovCi0KLSNlbHNlIC8qIExQQVNTOCBub3QgZGVmaW5lZCAqLwotCi0vKiBQcmV2aW91c2x5LCBC U0QtYmFzZWQgaW1wbGVtZW50YXRpb25zIGFsd2F5cyAqLwotLyogdXNlZCByYXdtb2RlIGZvciBw YWNrZXRzLiAgTm93LCB3ZSB1c2UgcmF3bW9kZSBvbmx5IGlmIHBhcml0eSBpcyBOT05FLiAqLwot LyogVGhpcyBhbGxvd3MgdGhlIGZsb3cgY29udHJvbCByZXF1ZXN0ZWQgYWJvdmUgdG8gYWN0dWFs bHkgd29yaywgYnV0IG9ubHkgKi8KLS8qIGlmIHRoZSB1c2VyIGFza3MgZm9yIHBhcml0eSAod2hp Y2ggYWxzbyBtZWFucyB0aGV5IGdldCA4dGgtYml0IHF1b3RpbmcpLiAqLwotCi0JaWYgKHBhcml0 eSkgewkJCS8qIElmIHBhcml0eSwgKi8KLQkgICAgdHRyYXcuc2dfZmxhZ3MgJj0gflJBVzsJLyog dXNlIGNvb2tlZCBtb2RlICovCi0jaWZkZWYgQ09NTUVOVAotLyogV0hZPz8/ICovCi0JICAgIGlm ICh4bG9jYWwpCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICAgIHR0cmF3LnNnX2ZsYWdzIHw9 IENCUkVBSzsKLQkgICAgZGVidWcoRjEwMSwidHRwa3QgY29va2VkLCBjYnJlYWssIHBhcml0eSIs IiIscGFyaXR5KTsKLSNpZmRlZiBUSU9DR0VUQwkJCQkvKiBOb3QgcmF3bW9kZSwgKi8KLQkgICAg aWYgKHRjaGFyZiAmJiAoeGxvY2FsID09IDApKSB7IC8qIG11c3QgdHVybiBvZmYgKi8KLQkJdGNo bm9pLnRfaW50cmMgPSAtMTsJLyogaW50ZXJydXB0IGNoYXJhY3RlciAqLwotCQl0Y2hub2kudF9x dWl0YyA9IC0xOwkvKiBhbmQgcXVpdCBjaGFyYWN0ZXIuICovCi0JCXRjaG5vaS50X3N0YXJ0YyA9 IDE3OwkvKiBNYWtlIHN1cmUgeG9uICovCi0JCXRjaG5vaS50X3N0b3BjID0gMTk7CS8qIGFuZCB4 b2ZmIG5vdCBpZ25vcmVkLiAqLwotI2lmbmRlZiBOT0JSS0MKLQkJdGNobm9pLnRfZW9mYyA9IC0x OwkvKiBlb2YgY2hhcmFjdGVyLiAqLwotCQl0Y2hub2kudF9icmtjID0gLTE7CS8qIGJyayBjaGFy YWN0ZXIuICovCi0jZW5kaWYgLyogTk9CUktDICovCi0JCWlmIChpb2N0bCh0dHlmZCxUSU9DU0VU QywmdGNobm9pKSA8IDApIHsKLQkJICAgIGRlYnVnKEYxMDAsInR0cGt0IFRJT0NTRVRDIGZhaWxl ZCIsIiIsMCk7Ci0JCX0gZWxzZSB7Ci0JCSAgICB0Y2hhcmYgPSAxOwotCQkgICAgZGVidWcoRjEw MCwidHRwa3QgVElPQ1NFVEMgb2siLCIiLDApOwotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBUSU9D R0VUQyAqLwotI2lmZGVmIFRJT0NHTFRDCQkJCS8qIE5vdCByYXdtb2RlLCAqLwotLyogUHJldmVu dCBzdXNwZW5kIGR1cmluZyBwYWNrZXQgbW9kZSAqLwotCSAgICBpZiAobHRjaGFyZiAmJiAoeGxv Y2FsID09IDApKSB7IC8qIG11c3QgdHVybiBvZmYgKi8KLQkJbHRjaG5vaS50X3N1c3BjID0gLTE7 CS8qIHN1c3BlbmQgY2hhcmFjdGVyICovCi0JCWx0Y2hub2kudF9kc3VzcGMgPSAtMTsJLyogYW5k IGRlbGF5ZWQgc3VzcGVuZCBjaGFyYWN0ZXIgKi8KLQkJaWYgKGlvY3RsKHR0eWZkLFRJT0NTTFRD LCZ0Y2hub2kpIDwgMCkgewotCQkgICAgZGVidWcoRjEwMCwidHRwa3QgVElPQ1NMVEMgZmFpbGVk IiwiIiwwKTsKLQkJfSBlbHNlIHsKLQkJICAgIGx0Y2hhcmYgPSAxOwotCQkgICAgZGVidWcoRjEw MCwidHRwa3QgVElPQ1NMVEMgb2siLCIiLDApOwotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBUSU9D R0xUQyAqLwotCX0gZWxzZSB7CQkJLyogSWYgbm8gcGFyaXR5LCAqLwotCSAgICB0dHJhdy5zZ19m bGFncyB8PSBSQVc7CS8qIG11c3QgdXNlIDgtYml0IHJhdyBtb2RlLiAqLwotCSAgICBkZWJ1ZyhG MTAxLCJ0dHBrdCBzZXR0aW5nIHJhd21vZGUsIHBhcml0eSIsIiIscGFyaXR5KTsKLQl9Ci0jZW5k aWYgLyogTFBBU1M4ICovCi0gICAgfSAvKiBFbmQgb2YgWG9uL1hvZmYgc2VjdGlvbiAqLwotCi0g ICAgLyogRG9uJ3QgZWNobywgZG9uJ3QgbWFwIENSIHRvIENSTEYgb24gb3V0cHV0LCBkb24ndCBm b29sIHdpdGggY2FzZSAqLwotI2lmZGVmIExDQVNFCi0gICAgdHRyYXcuc2dfZmxhZ3MgJj0gfihF Q0hPfENSTU9EfExDQVNFKTsKLSNlbHNlCi0gICAgdHRyYXcuc2dfZmxhZ3MgJj0gfihFQ0hPfENS TU9EKTsKLSNlbmRpZiAvKiBMQ0FTRSAqLwotCi0jaWZkZWYgVE9XRVIxCi0gICAgdHRyYXcuc2df ZmxhZ3MgJj0gfkFOWVA7ICAgICAgICAgICAgLyogTXVzdCBzZXQgdGhpcyBvbiBvbGQgVG93ZXJz ICovCi0jZW5kaWYgLyogVE9XRVIxICovCi0KLSNpZmRlZiBCRUxMVjEwCi0gICAgaWYgKGlvY3Rs KHR0eWZkLFRJT0NTRVRQLCZ0dHJhdykgPCAwKSAvKiBTZXQgdGhlIG5ldyBtb2Rlcy4gKi8KLSAg ICAgIHJldHVybigtMSk7Ci0jZWxzZQotICAgIGVycm5vID0gMDsKLSAgICBpZiAoc3R0eSh0dHlm ZCwmdHRyYXcpIDwgMCkgeyAgICAgICAvKiBTZXQgdGhlIG5ldyBtb2Rlcy4gKi8KLSAgICAgICAg ZGVidWcoRjEwMSwidHRwa3Qgc3R0eSBmYWlsZWQiLCIiLGVycm5vKTsKLSAgICAgICAgcmV0dXJu KC0xKTsKLSAgICB9Ci0jZW5kaWYgLyogQkVMTFYxMCAqLwotICAgIGRlYnVnKEYxMDAsInR0cGt0 IHN0dHkgb2siLCIiLDApOwotCi0jaWZkZWYgc29ueV9uZXdzCi0gICAgeCA9IHhsb2NhbCA/IGtt X2V4dCA6IGttX2NvbjsJLyogUHV0IGxpbmUgaW4gQVNDSUkgbW9kZS4gKi8KLSAgICBpZiAoeCAh PSAtMSkgewkJCS8qIE1ha2Ugc3VyZSB3ZSBrbm93IG9yaWdpbmFsIG1vZGVzLiAqLwotCXggJj0g fktNX1RUWVBFOwotCXggfD0gS01fQVNDSUk7Ci0JaWYgKGlvY3RsKHR0eWZkLFRJT0NLU0VULCAm eCkgPCAwKSB7Ci0JICAgIHBlcnJvcigidHRwa3QgY2FuJ3Qgc2V0IEFTQ0lJIG1vZGUiKTsKLQkg ICAgZGVidWcoRjEwMSwidHRwa3QgZXJyb3Igc2V0dGluZyBBU0NJSSBtb2RlIiwiIix4KTsKLQkg ICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgfQotICAgIGRlYnVnKEYxMDAsInR0cGt0IHNldCBBU0NJ SSBtb2RlIG9rIiwiIiwwKTsKLSNlbmRpZiAvKiBzb255X25ld3MgKi8KLQotICAgIGlmICh4bG9j YWwgPT0gMCkgewkJCS8qIFR1cm4gdGhpcyBvZmYgc28gd2UgY2FuIHJlYWQgKi8KLQlzaWduYWwo U0lHSU5ULFNJR19JR04pOwkJLyogQ3RybC1DIGNoYXJzIHR5cGVkIGF0IGNvbnNvbGUgKi8KLQlz aWdpbnRfaWduID0gMTsKLSAgICB9Ci0gICAgdHZ0ZmxnID0gMDsJCQkJLyogU28gdHR2dCgpIHdp bGwgd29yayBuZXh0IHRpbWUgKi8KLSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBzdWNjZXNzIiwiIiww KTsKLSAgICByZXR1cm4oMCk7Ci0KLSNlbmRpZiAvKiBOb3QgQVRUU1Ygb3IgUE9TSVggKi8KLQot LyogQVQmVCBVTklYIGFuZCBQT1NJWCAqLwotCi0jaWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUgU1ZP UlBPU0lYCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2lmZGVmIFNWT1JQT1NJWAotICAgIGlm IChmbG93ID09IEZMT19YT05YKSB7CQkvKiBYb24vWG9mZiAqLwotCXR0cmF3LmNfaWZsYWcgfD0g KElYT058SVhPRkYpOwotCXR0aGZsb3coZmxvdywgMCwgJnR0cmF3KTsKLSAgICB9IGVsc2UgaWYg KGZsb3cgPT0gRkxPX05PTkUpIHsJLyogTm9uZSAqLwotCS8qIE5PVEU6IFdlIHNob3VsZCBhbHNv IHR1cm4gb2ZmIGhhcmR3YXJlIGZsb3cgY29udHJvbCBoZXJlISAqLwotCXR0cmF3LmNfaWZsYWcg Jj0gfihJWE9OfElYT0ZGKTsKLQl0dGhmbG93KGZsb3csIDAsICZ0dHJhdyk7Ci0gICAgfSBlbHNl IGlmIChmbG93ID09IEZMT19LRUVQKSB7CS8qIEtlZXAgKi8KLQl0dHJhdy5jX2lmbGFnICY9IH4o SVhPTnxJWE9GRik7CS8qIFR1cm4gb2ZmIFhvbi9Yb2ZmIGZsYWdzICovCi0JdHRyYXcuY19pZmxh ZyB8PSAodHRvbGQuY19pZmxhZyAmIChJWE9OfElYT0ZGKSk7IC8qIE9SIGluIG9sZCBvbmVzICov Ci0JLyogTk9URTogV2Ugc2hvdWxkIGFsc28gaGFuZGxlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBo ZXJlISAqLwotI2lmZGVmIFBPU0lYX0NSVFNDVFMKLS8qIEluIExpbnV4IGNhc2UsIHdlIGRvIHRo aXMsIHdoaWNoIGlzIHVubGlrZWx5IHRvIGJlIHBvcnRhYmxlICovCi0gICAgICAgIHR0cmF3LmNf Y2ZsYWcgJj0gfkNSVFNDVFM7CS8qIFR1cm4gb2ZmIFJUUy9DVFMgZmxhZyAqLwotICAgICAgICB0 dHJhdy5jX2NmbGFnIHw9ICh0dG9sZC5jX2NmbGFnICYgQ1JUU0NUUyk7IC8qIE9SIGluIG9sZCBv bmUgKi8KLSNlbmRpZiAvKiBQT1NJWF9DUlRTQ1RTICovCi0gICAgfSBlbHNlIGlmIChmbG93ID09 IEZMT19SVFNDIHx8CS8qIEhhcmR3YXJlICovCi0JICAgICAgIGZsb3cgPT0gRkxPX0RUUkMgfHwK LQkgICAgICAgZmxvdyA9PSBGTE9fRFRSVCkgewotCXR0cmF3LmNfaWZsYWcgJj0gfihJWE9OfElY T0ZGKTsJLyogKDE5MCkgKi8KLQl0dGhmbG93KGZsb3csIDEsICZ0dHJhdyk7Ci0gICAgfQotICAg IHR0cmF3LmNfbGZsYWcgJj0gfihJQ0FOT058RUNITyk7Ci0gICAgdHRyYXcuY19sZmxhZyAmPSB+ SVNJRzsJCS8qIERvIE5PVCBjaGVjayBmb3IgaW50ZXJydXB0IGNoYXJzICovCi0KLSNpZm5kZWYg T1hPUwotI2lmZGVmIFFOWAotICAgIGlmIChmbG93ICE9IEZMT19SVFNDICYmIGZsb3cgIT0gRkxP X0RUUkMgJiYgZmxvdyAhPSBGTE9fRFRSVCkKLSNlbmRpZiAvKiBRTlggKi8KLSNpZm5kZWYgQ09I RVJFTlQKLSAgICAgIHR0cmF3LmNfbGZsYWcgJj0gfklFWFRFTjsJCS8qIFR1cm4gb2ZmIF5PL15W IHByb2Nlc3NpbmcgKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2Vsc2UgLyogT1hPUyAqLwot ICAgIHR0cmF3LmNfY2NbVkRJU0NBUkRdID0gdHRyYXcuY19jY1tWTE5FWFRdID0gQ0RJU0FCTEU7 Ci0jZW5kaWYgLyogT1hPUyAqLwotICAgIHR0cmF3LmNfbGZsYWcgfD0gTk9GTFNIOwkJLyogRG9u J3QgZmx1c2ggKi8KLSAgICB0dHJhdy5jX2lmbGFnIHw9IElHTlBBUjsJCS8qIElnbm9yZSBwYXJp dHkgZXJyb3JzICovCi0jaWZkZWYgQVRUU1YKLSNpZmRlZiBCU0Q0NAotICAgIHR0cmF3LmNfaWZs YWcgJj0gfihJR05CUkt8SU5MQ1J8SUdOQ1J8SUNSTkx8SU5QQ0t8SVNUUklQfElYQU5ZKTsKLSNl bHNlCi0gICAgdHRyYXcuY19pZmxhZyAmPSB+KElHTkJSS3xJTkxDUnxJR05DUnxJQ1JOTHxJVUNM Q3xJTlBDS3xJU1RSSVB8SVhBTlkpOwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZWxzZSAvKiBQT1NJ WCAqLwotICAgIHR0cmF3LmNfaWZsYWcgJj0gfihJR05CUkt8SU5MQ1J8SUdOQ1J8SUNSTkx8SU5Q Q0t8SVNUUklQKTsKLSNlbmRpZiAvKiBBVFRTViAqLwotICAgIHR0cmF3LmNfb2ZsYWcgJj0gfk9Q T1NUOwotICAgIHR0cmF3LmNfY2ZsYWcgJj0gfihDU0laRSk7Ci0gICAgdHRyYXcuY19jZmxhZyB8 PSAoQ1M4fENSRUFEfEhVUENMKTsKLQotI2lmZGVmIENTVE9QQgotICAgIGlmICh4bG9jYWwpIHsK LQlpZiAoc3RvcGJpdHMgPT0gMikgewotCSAgICB0dHJhdy5jX2NmbGFnIHw9IENTVE9QQjsJLyog MiBzdG9wIGJpdHMgKi8KLQkgICAgZGVidWcoRjEwMCwidHRwa3QgMiBzdG9wYml0cyIsIiIsMCk7 Ci0JfSBlbHNlIGlmIChzdG9wYml0cyA9PSAxKSB7Ci0JICAgIHR0cmF3LmNfY2ZsYWcgJj0gfihD U1RPUEIpOwkvKiAxIHN0b3AgYml0ICovCi0JICAgIGRlYnVnKEYxMDAsInR0cGt0IDEgc3RvcGJp dCIsIiIsMCk7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBDU1RPUEIgKi8KLQotI2lmZGVmIEhXUEFS SVRZCi0gICAgaWYgKGh3cGFyaXR5ICYmIHhsb2NhbCkgewkJLyogSGFyZHdhcmUgcGFyaXR5ICov Ci0JdHRyYXcuY19jZmxhZyB8PSBQQVJFTkI7CS8qIEVuYWJsZSBwYXJpdHkgKi8KLSNpZmRlZiBD T01NRU5UCi0vKiBVbmNvbW1lbnQgdGhpcyBvbmx5IGlmIG5lZWRlZCAtLSBJIGRvbid0IHRoaW5r IGl0IGlzICovCi0JdHRyYXcuY19jZmxhZyAmPSB+KENTSVpFKTsJLyogQ2xlYXIgb3V0IGNoYXJh Y3Rlci1zaXplIG1hc2sgKi8KLQl0dHJhdy5jX2NmbGFnIHw9IENTODsJCS8qIEFuZCBzZXQgaXQg dG8gOCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZmRlZiBJR05QQVIKLQl0dHJhdy5jX2lm bGFnIHw9IElHTlBBUjsJLyogRG9uJ3QgZGlzY2FyZCBpbmNvbWluZyBieXRlcyAqLwotCWRlYnVn KEYxMDAsInR0cGt0IElHTlBBUiIsIiIsMCk7IC8qIHRoYXQgaGF2ZSBwYXJpdHkgZXJyb3JzICov Ci0jZW5kaWYgLyogSUdOUEFSICovCi0Jc3dpdGNoIChod3Bhcml0eSkgewotCSAgY2FzZSAnZSc6 CQkJLyogRXZlbiAqLwotCSAgICB0dHJhdy5jX2NmbGFnICY9IH4oUEFST0REKTsKLQkgICAgZGVi dWcoRjEwMCwidHRwa3QgOCBiaXRzICsgZXZlbiBwYXJpdHkiLCIiLDApOwotCSAgICBicmVhazsK LQkgIGNhc2UgJ28nOgkJCS8qIE9kZCAqLwotCSAgICB0dHJhdy5jX2NmbGFnIHw9IFBBUk9ERDsK LQkgICAgZGVidWcoRjEwMCwidHRwa3QgOCBiaXRzICsgb2RkIHBhcml0eSIsIiIsMCk7Ci0JICAg IGJyZWFrOwotCSAgY2FzZSAnbSc6CQkJLyogTWFyayAqLwotCSAgY2FzZSAncyc6CQkJLyogU3Bh Y2UgKi8KLQkgICAgLyogUEFSRVhUIGlzIG1lbnRpb25lZCBpbiBTVklEIGJ1dCB0aGUgZGV0YWls cyBhcmUgbm90IGdpdmVuLiAqLwotCSAgICAvKiBQQVJFWFQgaXMgbm90IGluY2x1ZGVkIGluIFBP U0lYIElTTy9JRUMgOTk0NS0xLiAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCA4IGJpdHMgKyBp bnZhbGlkIHBhcml0eSIsIiIsMCk7Ci0JICAgIGJyZWFrOwotCX0KLSAgICB9IGVsc2UgewkJCQkv KiBXZSBoYW5kbGUgcGFyaXR5IG91cnNlbHZlcyAqLwotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0J dHRyYXcuY19jZmxhZyAmPSB+KFBBUkVOQik7CS8qIERvbid0IGVuYWJsZSBwYXJpdHkgKi8KLSNp ZmRlZiBIV1BBUklUWQotICAgIH0KLSNlbmRpZiAvKiBIV1BBUklUWSAqLwotCi0jaWZkZWYgSVgz NzAKLSAgICB0dHJhdy5jX2NjWzRdID0gNDg7ICAvKiBTbyBTZXJpZXMvMSBkb2Vzbid0IGludGVy cnVwdCBvbiBldmVyeSBjaGFyICovCi0gICAgdHRyYXcuY19jY1s1XSA9IDE7Ci0jZWxzZQotI2lm bmRlZiBWRU9GCQkJCS8qIGZvciBER1VYIHRoaXMgaXMgVkVPRiwgbm90IFZNSU4gKi8KLSAgICB0 dHJhdy5jX2NjWzRdID0gMTsgICAvKiBbVk1JTl0gIHJldHVybiBtYXggb2YgdGhpcyBtYW55IGNo YXJhY3RlcnMgb3IgKi8KLSNlbHNlCi0jaWZuZGVmIE9YT1MKLSNpZmRlZiBWTUlOCi0gICAgdHRy YXcuY19jY1tWTUlOXSA9IDE7Ci0jZW5kaWYgLyogVk1JTiAqLwotI2Vsc2UgLyogT1hPUyAqLwot ICAgIHR0cmF3LmNfbWluID0gMTsKLSNlbmRpZiAvKiBPWE9TICovCi0jZW5kaWYgLyogVkVPRiAq LwotI2lmbmRlZiBWRU9MCQkJCS8qIGZvciBER1VYIHRoaXMgaXMgVkVPTCwgbm90IFZUSU1FICov Ci0gICAgdHRyYXcuY19jY1s1XSA9IDA7CSAvKiBbVlRJTUVdIHdoZW4gdGhpcyBtYW55IHNlY3Mv MTAgZXhwaXJlIHcvbm8gaW5wdXQgKi8KLSNlbHNlCi0jaWZuZGVmIE9YT1MKLSNpZmRlZiBWVElN RQotICAgIHR0cmF3LmNfY2NbVlRJTUVdID0gMDsKLSNlbmRpZiAvKiBWVElNRSAqLwotI2Vsc2Ug LyogT1hPUyAqLwotICAgIHR0cmF3LmNfdGltZSA9IDA7Ci0jZW5kaWYgLyogT1hPUyAqLwotI2Vu ZGlmIC8qIFZFT0wgKi8KLSNlbmRpZiAvKiBJWDM3MCAqLwotCi0jaWZkZWYgVklOVFIJCQkJLyog VHVybiBvZmYgaW50ZXJydXB0IGNoYXJhY3RlciAqLwotICAgIGlmICh4bG9jYWwgPT0gMCkJCQkv KiBzbyBeQ15DIGNhbiBicmVhayB1cyBvdXQgb2YgKi8KLSAgICAgIHR0cmF3LmNfY2NbVklOVFJd ID0gMDsJCS8qIHBhY2tldCBtb2RlLiAqLwotI2VuZGlmIC8qIFZJTlRSICovCi0KLSNpZmRlZiBQ bGFuOQotICAgIGlmIChwOXR0eXBhcml0eSgnbicpIDwgMCkKLQlyZXR1cm4gLTE7Ci0jZWxzZQot I2lmZGVmIEJTRDQ0T1JQT1NJWAotICAgIGVycm5vID0gMDsKLSNpZmRlZiBCRU9TT1JCRUJPWAot ICAgIHR0cmF3LmNfY2NbVk1JTl0gPSAwOwkJLyogRFI3IGNhbiBvbmx5IHBvbGwuICovCi0jZW5k aWYgLyogQkVPU09SQkVCT1ggKi8KLQotI2RlZmluZSBURVNUSU5HMjM0Ci0jaWZkZWYgVEVTVElO RzIzNAotICAgIGlmICgxKSB7Ci0JZGVidWcoRjEwMCwidHRwa3QgVEVTVElORzIzNCByYXdtb2Rl IiwiIiwwKTsKLQotCS8qIGlmbGFncyAqLwotCXR0cmF3LmNfaWZsYWcgJj0gfihQQVJNUkt8SVNU UklQfEJSS0lOVHxJTkxDUnxJR05DUnxJQ1JOTCk7Ci0JdHRyYXcuY19pZmxhZyAmPSB+KElOUENL fElHTlBBUnxJWE9OfElYT0ZGKTsKLQl0dHJhdy5jX2lmbGFnIHw9IElHTkJSSzsKLSNpZmRlZiBJ TUFYQkVMCi0JdHRyYXcuY19pZmxhZyAmPSB+SU1BWEJFTDsKLSNlbmRpZgkvKiBJTUFYQkVMICov Ci0jaWZkZWYgSVhBTlkKLQl0dHJhdy5jX2lmbGFnICY9IH5JWEFOWTsKLSNlbmRpZgkvKiBJWEFO WSAqLwotI2lmZGVmIElVQ0xDCi0JdHRyYXcuY19pZmxhZyAmPSB+SVVDTEM7Ci0jZW5kaWYgLyog SVVDTEMgKi8KLQotCS8qIG9mbGFncyAqLwotCXR0cmF3LmNfb2ZsYWcgJj0gfk9QT1NUOwotI2lm ZGVmIE9YVEFCUwotCXR0cmF3LmNfb2ZsYWcgJj0gfk9YVEFCUzsKLSNlbmRpZiAvKiBPWFRBQlMg Ki8KLSNpZmRlZiBPTk9DUgotCXR0cmF3LmNfb2ZsYWcgJj0gfk9OT0NSOwotI2VuZGlmIC8qIE9O T0NSICovCi0jaWZkZWYgT05MUkVUCi0JdHRyYXcuY19vZmxhZyAmPSB+T05MUkVUOwotI2VuZGlm IC8qIE9OTFJFVCAqLwotI2lmZGVmIE9OTENSCi0JdHRyYXcuY19vZmxhZyAmPSB+T05MQ1I7Ci0j ZW5kaWYgLyogT05MQ1IgKi8KLQotCS8qIGxmbGFncyAqLwotCXR0cmF3LmNfbGZsYWcgJj0gfkVD SE87Ci0jaWZkZWYgRUNIT0UKLQl0dHJhdy5jX2xmbGFnICY9IH5FQ0hPRTsKLSNlbmRpZiAvKiBF Q0hPRSAqLwotI2lmZGVmIEVDSE9OTAotCXR0cmF3LmNfbGZsYWcgJj0gfkVDSE9OTDsKLSNlbmRp ZiAvKiBFQ0hPTkwgKi8KLSNpZmRlZiBFQ0hPUFJUCi0JdHRyYXcuY19sZmxhZyAmPSB+RUNIT1BS VDsKLSNlbmRpZiAvKiBFQ0hPUFJUICovCi0jaWZkZWYgRUNIT0tFCi0JdHRyYXcuY19sZmxhZyAm PSB+RUNIT0tFOwotI2VuZGlmIC8qIEVDSE9LRSAqLwotI2lmZGVmIEVDSE9DVEwKLQl0dHJhdy5j X2xmbGFnICY9IH5FQ0hPQ1RMOwotI2VuZGlmIC8qIEVDSE9DVEwgKi8KLSNpZmRlZiBBTFRXRVJB U0UKLQl0dHJhdy5jX2xmbGFnICY9IH5BTFRXRVJBU0U7Ci0jZW5kaWYgLyogQUxUV0VSQVNFICov Ci0jaWZkZWYgRVhUUFJPQwotCXR0cmF3LmNfbGZsYWcgJj0gfkVYVFBST0M7Ci0jZW5kaWYgLyog RVhUUFJPQyAqLwotCXR0cmF3LmNfbGZsYWcgJj0gfihJQ0FOT058SVNJR3xJRVhURU58VE9TVE9Q fEZMVVNIT3xQRU5ESU4pOwotI2lmZGVmIE5PS0VSTklORk8KLQl0dHJhdy5jX2xmbGFnIHw9IE5P S0VSTklORk87Ci0jZW5kaWYJLyogTk9LRVJOSU5GTyAqLwotCS8qIHR0cmF3LmNfbGZsYWcgfD0g Tk9GTFNIOyAqLwotCXR0cmF3LmNfbGZsYWcgJj0gfk5PRkxTSDsKLQotCS8qIGNmbGFncyAqLwot CXR0cmF3LmNfY2ZsYWcgJj0gfihDU0laRXxQQVJFTkJ8UEFST0REKTsKLQl0dHJhdy5jX2NmbGFn IHw9IENTOHxDUkVBRDsKLSNpZmRlZiBWTUlOCi0JdHRyYXcuY19jY1tWTUlOXSA9IDE7CQkvKiBT dXBwb3NlZGx5IG5lZWRlZCBmb3IgQUlYICovCi0jZW5kaWYJLyogVk1JTiAqLwotCi0gICAgfQot I2VuZGlmIC8qIFRFU1RJTkcyMzQgKi8KLQotICAgIGRlYnVnKEYxMDAsInR0cGt0IGNhbGxpbmcg dGNzZXRhdHRyKFRDU0VUQVcpIiwiIiwwKTsKLSAgICB4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FE UkFJTiwmdHRyYXcpOwotICAgIGRlYnVnKEYxMDEsInR0cGt0IEJTRDQ0T1JQT1NJWCB0Y3NldGF0 dHIiLCIiLHgpOwotICAgIGlmICh4IDwgMCkgewotCWRlYnVnKEYxMDEsInR0cGt0IEJTRDQ0T1JQ T1NJWCB0Y3NldGF0dHIgZXJybm8iLCIiLGVycm5vKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICB9Ci0jZWxzZSAvKiBCU0Q0NE9SUE9TSVggKi8KLSAgICB4ID0gaW9jdGwodHR5ZmQsVENTRVRB VywmdHRyYXcpOwotICAgIGRlYnVnKEYxMDEsInR0cGt0IEFUVFNWIGlvY3RsIFRDU0VUQVciLCIi LHgpOwotICAgIGlmICh4IDwgMCkgeyAgLyogc2V0IG5ldyBtb2RlcyAuICovCi0JZGVidWcoRjEw MSwidHRwa3QgQVRUU1YgaW9jdGwgVENTRVRBVyBlcnJubyIsIiIsZXJybm8pOwotICAgICAgICBy ZXR1cm4oLTEpOwotICAgIH0KLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSNlbmRpZiAvKiBQ bGFuOSAqLwotICAgIHR2dGZsZyA9IDA7Ci0gICAgZGVidWcoRjEwMCwidHRwa3Qgb2siLCIiLDAp OwotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBBVFRTViAqLwotCi0jaWZkZWYgQ09IRVJFTlQK LSN1bmRlZiBTVk9SUE9TSVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi19Ci0KLS8qICBUIFQg UyBFIFQgRiBMIE8gVyAgLS0gIFNldCBmbG93IGNvbnRyb2wgaW1tZWRpYXRlbHkuICAqLwotCi0j aWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUgU1ZPUlBPU0lYCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8K LQotaW50Ci10dHNldGZsb3coZmxvdykgaW50IGZsb3c7IHsKLSAgICBpZiAodHR5ZmQgPCAwKQkJ CS8qIEEgY2hhbm5lbCBtdXN0IGJlIG9wZW4gKi8KLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBk ZWJ1ZyhGMTAxLCJ0dHNldGZsb3cgZmxvdyIsIiIsZmxvdyk7Ci0KLSNpZmRlZiBUTl9DT01QT1JU Ci0gICAgaWYgKG5ldGNvbm4gJiYgaXN0bmNvbXBvcnQoKSkgewotCWRlYnVnKEYxMDEsInR0c2V0 ZmxvdyBuZXQgbW9kZW0iLCIiLHR0bWRtKTsKLQlyZXR1cm4odG5zZXRmbG93KGZsb3cpKTsKLSAg ICB9Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBp cGUpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBp ZiAodHRwdHkpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLQotI2lmZGVmIENPTU1F TlQKLSAgICAvKiBUaGlzIHNlZW1zIHRvIGh1cnQuLi4gKi8KLSAgICBpZiAoZmxvdyA9PSBGTE9f S0VFUCkKLSAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICBpZiAo ZmxvdyA9PSBGTE9fUlRTQyB8fAkJLyogSGFyZHdhcmUgZmxvdyBjb250cm9sLi4uICovCi0JZmxv dyA9PSBGTE9fRFRSQyB8fAotCWZsb3cgPT0gRkxPX0RUUlQpIHsKLQl0dGhmbG93KGZsb3csIDEs ICZ0dHJhdyk7Ci0jaWZuZGVmIFNWT1JQT1NJWAotCXR0cmF3LnNnX2ZsYWdzICY9IH5UQU5ERU07 CS8qIFR1cm4gb2ZmIHNvZnR3YXJlIGZsb3cgY29udHJvbCAqLwotI2Vsc2UKLQl0dHJhdy5jX2lm bGFnICY9IH4oSVhPTnxJWE9GRik7Ci0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0KLSAgICB9IGVs c2UgaWYgKGZsb3cgPT0gRkxPX1hPTlgpIHsJLyogWG9uL1hvZmYuLi4gKi8KLQotI2lmbmRlZiBT Vk9SUE9TSVgKLQl0dHJhdy5zZ19mbGFncyB8PSBUQU5ERU07Ci0jZWxzZQotCXR0cmF3LmNfaWZs YWcgfD0gKElYT058SVhPRkYpOwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotCXR0aGZsb3coRkxP X1JUU0MsIDAsICZ0dHJhdyk7CS8qIFR1cm4gb2ZmIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLwot Ci0gICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19OT05FKSB7CS8qIE5vIGZsb3cgY29udHJvbCAq LwotCi0jaWZuZGVmIFNWT1JQT1NJWAotCXR0cmF3LnNnX2ZsYWdzICY9IH5UQU5ERU07CS8qIFR1 cm4gb2ZmIHNvZnR3YXJlIGZsb3cgY29udHJvbCAqLwotI2Vsc2UKLQl0dHJhdy5jX2lmbGFnICY9 IH4oSVhPTnxJWE9GRik7Ci0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0JdHRoZmxvdyhGTE9fUlRT QywgMCwgJnR0cmF3KTsJLyogVHVybiBvZmYgYW55IGhhcmR3YXJlIGYvYyB0b28gKi8KLSAgICB9 Ci0KLS8qIFNldCB0aGUgbmV3IG1vZGVzLi4uICovCi0KLSNpZm5kZWYgU1ZPUlBPU0lYCQkJLyog QlNEIGFuZCBmcmllbmRzICovCi0jaWZkZWYgQkVMTFYxMAotICAgIGlmIChpb2N0bCh0dHlmZCxU SU9DU0VUUCwmdHRyYXcpIDwgMCkKLSAgICAgIHJldHVybigtMSk7Ci0jZWxzZQotI2lmbmRlZiBN SU5JWDIKLSAgICBpZiAoc3R0eSh0dHlmZCwmdHRyYXcpIDwgMCkKLSAgICAgIHJldHVybigtMSk7 Ci0jZW5kaWYgLyogTUlOSVgyICovCi0jZW5kaWYgLyogQkVMTFYxMCAqLwotI2Vsc2UKLSNpZmRl ZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCAqLwotICAgIGlmICh0Y3NldGF0dHIodHR5ZmQsVENT QURSQUlOLCZ0dHJhdykgPCAwKQotICAgICAgcmV0dXJuKC0xKTsKLSNlbHNlCQkJCQkvKiBTeXN0 ZW0gViAqLwotICAgIGlmIChpb2N0bCh0dHlmZCxUQ1NFVEFXLCZ0dHJhdykgPCAwKQotICAgICAg cmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSNlbmRpZiAvKiBTVk9SUE9T SVggKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0jaWZkZWYgQ09IRVJFTlQKLSN1bmRlZiBTVk9SUE9T SVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0vKiAgVCBUIFYgVCAtLSBDb25kaXRpb24gY29t bXVuaWNhdGlvbiBkZXZpY2UgZm9yIHVzZSBhcyB2aXJ0dWFsIHRlcm1pbmFsLiAqLwotCi1pbnQK LSNpZmRlZiBDS19BTlNJQwotdHR2dChsb25nIHNwZWVkLCBpbnQgZmxvdykKLSNlbHNlCi10dHZ0 KHNwZWVkLGZsb3cpIGxvbmcgc3BlZWQ7IGludCBmbG93OwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0vKiB0dHZ0ICovIHsKLSAgICBpbnQgcywgczIsIHg7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJ0dHZ0 IHR0eWZkIiwiIix0dHlmZCk7Ci0gICAgZGVidWcoRjEwMSwidHR2dCB0dnRmbGciLCIiLHR2dGZs Zyk7Ci0gICAgZGVidWcoRjExMSwidHR2dCBzcGVlZCIsY2tpdG9hKHR0c3BlZWQpLHNwZWVkKTsK LSAgICBkZWJ1ZyhGMTExLCJ0dHZ0IGZsb3ciLGNraXRvYSh0dGZsb3cpLGZsb3cpOwotICAgIGRl YnVnKEYxMTEsInR0dnQgY3VyY2FyciIsY2tpdG9hKHR0Y2FyciksY3VyY2Fycik7Ci0KLS8qIE5v dGU6IE5ldEJTRCBhbmQgbWF5YmUgb3RoZXIgQlNENDRzIGhhdmUgY2ZtYWtlcmF3KCkgKi8KLS8q IE1heWJlIGl0IHdvdWxkIGJlIHNpbXBsZXIgdG8gdXNlIGl0Li4uICovCi0KLSAgICB0dHBtc2sg PSAweGZmOwotI2lmZGVmIE5PTE9DQUwKLSAgICByZXR1cm4oY29uYmluKChjaGFyKWVzY2Nocikp OwotI2Vsc2UKLSAgICBpZiAodHR5ZmQgPCAwKSB7CQkJLyogTm90IG9wZW4uICovCi0JaWYgKHR0 Y2hrKCkgPCAwKQotCSAgcmV0dXJuKC0xKTsKLQllbHNlCQkJCS8qIEJ1dCBtYXliZSBzb21ldGhp bmcgYnVmZmVyZWQuICovCi0JICByZXR1cm4oMCk7Ci0gICAgfQotI2lmZGVmIE5FVENNRAotICAg IGlmICh0dHBpcGUpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQ VFkKLSAgICBpZiAodHRwdHkpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLSNpZmRl ZiBORVRDT05OCi0gICAgaWYgKG5ldGNvbm4pIHsKLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZmRlZiBU Q1BfTk9ERUxBWQotICAgICAgICB7Ci0JICAgIGV4dGVybiBpbnQgdGNwX25vZGVsYXk7Ci0JICAg IGlmICh0dG5ldCA9PSBORVRfVENQQikgewotCQlpZiAobm9kZWxheV9zYXYgPiAtMSkgewotCQkg ICAgbm9fZGVsYXkodHR5ZmQsbm9kZWxheV9zYXYpOwotCQkgICAgbm9kZWxheV9zYXYgPSAtMTsK LQkJfQotCSAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwotI2lmZGVm IFROX0NPTVBPUlQKLSAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKLSAgICAgICAgICAgIGlu dCByYyA9IC0xOwotICAgICAgICAgICAgaWYgKHR2dGZsZyAhPSAwICYmIHNwZWVkID09IHR0c3Bl ZWQgJiYgZmxvdyA9PSB0dGZsb3cKLSAgICAgICAgICAgICAgICAgLyogJiYgdHRjYXJyID09IGN1 cmNhcnIgKi8gKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHR2dCBtb2RlcyBhbHJl YWR5IHNldCwgc2tpcHBpbmcuLi4iLCIiLDApOwotICAgICAgICAgICAgICAgIHJldHVybigwKTsJ CQkvKiBBbHJlYWR5IGJlZW4gY2FsbGVkLiAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAg aWYgKGZsb3cgIT0gdHRmbG93KSB7Ci0gICAgICAgICAgICAgICAgaWYgKChyYyA9IHRuc2V0Zmxv dyhmbG93KSkgPCAwKQotCQkgIHJldHVybihyYyk7Ci0gICAgICAgICAgICAgICAgdHRmbG93ID0g ZmxvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzcGVlZCAhPSB0dHNwZWVkKSB7 Ci0gICAgICAgICAgICAgICAgaWYgKHNwZWVkIDw9IDApIAotCQkgIHNwZWVkID0gdG5jX2dldF9i YXVkKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoKHJjID0gdG5jX3NldF9iYXVkKHNwZWVk KSkgPCAwKQotCQkgIHJldHVybihyYyk7Ci0gICAgICAgICAgICAgICAgdHRzcGVlZCA9IHNwZWVk OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdG5jX3NldF9kYXRhc2l6ZSg4KTsKLQkgICAg dG5jX3NldF9zdG9wc2l6ZShzdG9wYml0cyk7Ci0KLSNpZmRlZiBIV1BBUklUWQotICAgICAgICAg ICAgaWYgKGh3cGFyaXR5KSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChod3Bhcml0eSkgewot CQkgIGNhc2UgJ2UnOgkJLyogRXZlbiAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAw LCJ0dHJlcyA4IGJpdHMgKyBldmVuIHBhcml0eSIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAg IHRuY19zZXRfcGFyaXR5KDMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJICBjYXNl ICdvJzoJCS8qIE9kZCAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4 IGJpdHMgKyBvZGQgcGFyaXR5IiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9w YXJpdHkoMik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkgIGNhc2UgJ20nOgkJLyog TWFyayAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBp bnZhbGlkIHBhcml0eTogbWFyayIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIHRuY19zZXRf cGFyaXR5KDQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJICBjYXNlICdzJzoJCS8q IFNwYWNlICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyAr IGludmFsaWQgcGFyaXR5OiBzcGFjZSIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIHRuY19z ZXRfcGFyaXR5KDUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBIV1BBUklUWSAqLwotICAgICAgICAg ICAgewotICAgICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDEpOwkvKiBOb25lICovCi0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICB0dnRmbGcgPSAxOwotICAgICAgICAgICAgcmV0dXJuKDAp OwotICAgICAgICB9Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLwotCXR2dGZsZyA9IDE7CQkJLyogTmV0d29yayBjb25uZWN0aW9ucy4uLiAqLwotCWRlYnVn KEYxMDAsInR0dnQgbmV0d29yayBjb25uZWN0aW9uLCBza2lwcGluZy4uLiIsIiIsMCk7Ci0JcmV0 dXJuKDApOwkJCS8qIC4uLiByZXF1aXJlIG5vIHNwZWNpYWwgc2V0dXAgKi8KLSAgICB9Ci0jZW5k aWYgLyogTkVUQ09OTiAqLwotCi0gICAgaWYgKHR2dGZsZyAhPSAwICYmIHNwZWVkID09IHR0c3Bl ZWQgJiYgZmxvdyA9PSB0dGZsb3cKLQkvKiAmJiB0dGNhcnIgPT0gY3VyY2FyciAqLyApCi0gICAg ICB7Ci0JICBkZWJ1ZyhGMTAwLCJ0dHZ0IG1vZGVzIGFscmVhZHkgc2V0LCBza2lwcGluZy4uLiIs IiIsMCk7Ci0JICByZXR1cm4oMCk7CQkJLyogQWxyZWFkeSBiZWVuIGNhbGxlZC4gKi8KLSAgICAg IH0KLQotICAgIGlmICh0dGZkZmxnCi0jaWZuZGVmIFBsYW45Ci0JJiYgIWlzYXR0eSh0dHlmZCkK LSNlbmRpZiAvKiBQbGFuOSAqLwotCSkgewotCWRlYnVnKEYxMDAsInR0dnQgdXNpbmcgZXh0ZXJu YWwgZmQsIHNraXBwaW5nLi4uIiwiIiwwKTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotCi0gICAgZGVi dWcoRjEwMCwidHR2dCBzZXR0aW5nIG1vZGVzLi4uIiwiIiwwKTsKLQotICAgIGlmICh4bG9jYWwp IHsJCQkvKiBGb3IgZXh0ZXJuYWwgbGluZXMuLi4gKi8KLQlzMiA9IChpbnQpIChzcGVlZCAvIDEw TCk7Ci0JcyA9IHR0c3NwZChzMik7CQkJLyogQ2hlY2svc2V0IHRoZSBzcGVlZCAqLwotCWNhcnJj dGwoJnR0dHZ0LCBmbG93ICE9IEZMT19ESUFMIC8qIERvIGNhcnJpZXIgY29udHJvbCAqLwotCQkm JiAodHRjYXJyID09IENBUl9PTiB8fCAodHRjYXJyID09IENBUl9BVVQgJiYgdHRtZG0gIT0gMCkp KTsKLSAgICB9IGVsc2UKLSAgICAgIHMgPSBzMiA9IC0xOwotCi0jaWZkZWYgQ09IRVJFTlQKLSNk ZWZpbmUgU1ZPUlBPU0lYCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2lmbmRlZiBTVk9SUE9T SVgKLSAgICAvKiBCZXJrZWxleSwgVjcsIGV0YyAqLwotICAgIGlmIChmbG93ID09IEZMT19SVFND IHx8CQkvKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KLQlmbG93ID09IEZMT19EVFJDIHx8Ci0J ZmxvdyA9PSBGTE9fRFRSVCkgewotCXR0aGZsb3coZmxvdywgMSwgJnR0dHZ0KTsKLQlkZWJ1ZyhG MTAwLCJ0dHZ0IGhhcmQgZmxvdywgVEFOREVNIG9mZiIsIiIsMCk7Ci0JdHR0dnQuc2dfZmxhZ3Mg Jj0gflRBTkRFTTsJLyogVHVybiBvZmYgc29mdHdhcmUgZmxvdyBjb250cm9sICovCi0gICAgfSBl bHNlIGlmIChmbG93ID09IEZMT19YT05YKSB7CS8qIFhvbi9Yb2ZmIGZsb3cgY29udHJvbCAqLwot CWRlYnVnKEYxMDAsInR0dnQgVEFOREVNIG9uIiwiIiwwKTsKLQl0dHR2dC5zZ19mbGFncyB8PSBU QU5ERU07CS8qIEFzayBmb3IgaXQuICovCi0JdHRoZmxvdyhmbG93LCAwLCAmdHR0dnQpOwkvKiBU dXJuIG9mZiBoYXJkd2FyZSBmL2MgKi8KLSAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX05PTkUp IHsKLQlkZWJ1ZyhGMTAwLCJ0dHZ0IG5vIGZsb3csIFRBTkRFTSBvZmYsIFJBVyBvbiIsIiIsMCk7 Ci0JdHR0dnQuc2dfZmxhZ3MgJj0gflRBTkRFTTsJLyogVHVybiBvZmYgc29mdHdhcmUgZmxvdyBj b250cm9sICovCi0JdHRoZmxvdyhmbG93LCAwLCAmdHR0dnQpOwkvKiBUdXJuIG9mZiBhbnkgaGFy ZHdhcmUgZi9jIHRvbyAqLwotCXR0dHZ0LnNnX2ZsYWdzIHw9IFJBVzsJCS8qIEVudGVyIHJhdyBt b2RlICovCi0gICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19LRUVQKSB7CS8qIEtlZXAgZGV2aWNl J3Mgb3JpZ2luYWwgc2V0dGluZyAqLwotCWRlYnVnKEYxMDAsInR0dnQga2VlcGluZyBvcmlnaW5h bCBUQU5ERU0iLCIiLDApOwotCXR0dHZ0LnNnX2ZsYWdzICY9IH5UQU5ERU07Ci0JdHR0dnQuc2df ZmxhZ3MgfD0gKHR0b2xkLnNnX2ZsYWdzICYgVEFOREVNKTsKLQkvKiBOT1RFOiBXZSBzaG91bGQg YWxzbyBoYW5kbGUgaGFyZHdhcmUgZmxvdyBjb250cm9sIGhlcmUhICovCi0gICAgfQotICAgIHR0 dHZ0LnNnX2ZsYWdzIHw9IFJBVzsgICAgICAgICAgICAgIC8qIFJhdyBtb2RlIGluIGFsbCBjYXNl cyAqLwotI2lmZGVmIFRPV0VSMQotICAgIHR0dHZ0LnNnX2ZsYWdzICY9IH4oRUNIT3xBTllQKTsg ICAgIC8qIE5vIGVjaG8gb3IgcGFyaXR5ICovCi0jZWxzZQotICAgIHR0dHZ0LnNnX2ZsYWdzICY9 IH5FQ0hPOyAgICAgICAgICAgIC8qIE5vIGVjaG8gKi8KLSNlbmRpZiAvKiBUT1dFUjEgKi8KLQot I2lmZGVmIEJFTExWMTAKLSAgICBpZiAoaW9jdGwodHR5ZmQsVElPQ1NFVFAsJnR0dHZ0KSA8IDAp IC8qIFNldCB0aGUgbmV3IG1vZGVzICovCi0gICAgICByZXR1cm4oLTEpOwotI2Vsc2UKLSAgICBp ZiAoc3R0eSh0dHlmZCwmdHR0dnQpIDwgMCkJCS8qIFNldCB0aGUgbmV3IG1vZGVzICovCi0gICAg ICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLQotI2Vsc2UgLyogSXQgaXMgQVRU U1Ygb3IgUE9TSVggKi8KLQotICAgIGlmIChmbG93ID09IEZMT19YT05YKSB7CQkvKiBTb2Z0d2Fy ZSBmbG93IGNvbnRyb2wgKi8KLQl0dHR2dC5jX2lmbGFnIHw9IChJWE9OfElYT0ZGKTsJLyogT24g aWYgcmVxdWVzdGVkLiAqLwotCXR0aGZsb3coZmxvdywgMCwgJnR0dHZ0KTsJLyogVHVybiBvZmYg aGFyZHdhcmUgZi9jICovCi0JZGVidWcoRjEwMCwidHR2dCBTVk9SUE9TSVggZmxvdyBYT04vWE9G RiIsIiIsMCk7Ci0gICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19OT05FKSB7CS8qIE5PTkUgKi8K LQl0dHR2dC5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7CS8qIFR1cm4gb2ZmIFhvbi9Yb2ZmICov Ci0JdHRoZmxvdyhmbG93LCAwLCAmdHR0dnQpOwkvKiBUdXJuIG9mZiBoYXJkd2FyZSBmL2MgKi8K LQlkZWJ1ZyhGMTAwLCJ0dHZ0IFNWT1JQT1NJWCBmbG93IE5PTkUiLCIiLDApOwotICAgIH0gZWxz ZSBpZiAoZmxvdyA9PSBGTE9fS0VFUCkgewotCXR0dHZ0LmNfaWZsYWcgJj0gfihJWE9OfElYT0ZG KTsJLyogVHVybiBvZmYgWG9uL1hvZmYgZmxhZ3MgKi8KLQl0dHR2dC5jX2lmbGFnIHw9ICh0dG9s ZC5jX2lmbGFnICYgKElYT058SVhPRkYpKTsgLyogT1IgaW4gb2xkIG9uZXMgKi8KLSNpZmRlZiBQ T1NJWF9DUlRTQ1RTCi0gICAgICAgIHR0dHZ0LmNfY2ZsYWcgJj0gfkNSVFNDVFM7CS8qIFR1cm4g b2ZmIFJUUy9DVFMgZmxhZyAqLwotICAgICAgICB0dHR2dC5jX2NmbGFnIHw9ICh0dG9sZC5jX2Nm bGFnICYgQ1JUU0NUUyk7IC8qIE9SIGluIG9sZCBvbmUgKi8KLSNlbmRpZiAvKiBQT1NJWF9DUlRT Q1RTICovCi0JZGVidWcoRjEwMCwidHR2dCBTVk9SUE9TSVggZmxvdyBLRUVQIiwiIiwwKTsKLSAg ICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX1JUU0MgfHwJLyogSGFyZHdhcmUgZmxvdyBjb250cm9s ICovCi0JICAgICAgIGZsb3cgPT0gRkxPX0RUUkMgfHwKLQkgICAgICAgZmxvdyA9PSBGTE9fRFRS VCkgewotCXR0dHZ0LmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGKTsJLyogKDE5NikgKi8KLQl0dGhm bG93KGZsb3csIDEsICZ0dHR2dCk7Ci0JZGVidWcoRjEwMCwidHR2dCBTVk9SUE9TSVggZmxvdyBI QVJEIiwiIiwwKTsKLSAgICB9Ci0jaWZuZGVmIE9YT1MKLSNpZmRlZiBDT0hFUkVOVAotICAgIHR0 dHZ0LmNfbGZsYWcgJj0gfihJU0lHfElDQU5PTnxFQ0hPKTsKLSNlbHNlCi0gICAgdHR0dnQuY19s ZmxhZyAmPSB+KElTSUd8SUNBTk9OfEVDSE98SUVYVEVOKTsKLSNlbmRpZiAvKiBDT0hFUkVOVCAq LwotI2lmZGVmIFFOWAotICAgIC8qIE5lZWRlZCBmb3IgaHdmYyAqLwotICAgIGlmIChmbG93ID09 IEZMT19SVFNDIHx8IGZsb3cgPT0gRkxPX0RUUkMgfHwgZmxvdyA9PSBGTE9fRFRSVCkKLSAgICAg IHR0dHZ0LmNfbGZsYWcgfD0gSUVYVEVOOwotI2VuZGlmIC8qIFFOWCAqLwotI2Vsc2UgLyogT1hP UyAqLwotICAgIHR0dHZ0LmNfbGZsYWcgJj0gfihJU0lHfElDQU5PTnxFQ0hPKTsKLSAgICB0dHR2 dC5jX2NjW1ZESVNDQVJEXSA9IHR0dHZ0LmNfY2NbVkxORVhUXSA9IENESVNBQkxFOwotI2VuZGlm IC8qIE9YT1MgKi8KLQotICAgIHR0dHZ0LmNfaWZsYWcgfD0gKElHTkJSS3xJR05QQVIpOwotCi0v KiBTdG9wIGJpdHMgKi8KLQotI2lmZGVmIENTVE9QQgotICAgIGlmICh4bG9jYWwpIHsKLQlpZiAo c3RvcGJpdHMgPT0gMikgewotCSAgICB0dHR2dC5jX2NmbGFnIHw9IENTVE9QQjsJLyogMiBzdG9w IGJpdHMgKi8KLQkgICAgZGVidWcoRjEwMCwidHR2dCAyIHN0b3BiaXRzIiwiIiwwKTsKLQl9IGVs c2UgaWYgKHN0b3BiaXRzID09IDEpIHsKLQkgICAgdHR0dnQuY19jZmxhZyAmPSB+KENTVE9QQik7 CS8qIDEgc3RvcCBiaXQgKi8KLQkgICAgZGVidWcoRjEwMCwidHR2dCAxIHN0b3BiaXQiLCIiLDAp OwotCX0KLSAgICB9Ci0jZW5kaWYgLyogQ1NUT1BCICovCi0KLS8qIFBhcml0eSAqLwotCi0jaWZk ZWYgSFdQQVJJVFkKLSAgICBpZiAoaHdwYXJpdHkgJiYgeGxvY2FsKSB7CQkvKiBIYXJkd2FyZSBw YXJpdHkgKi8KLSNpZmRlZiBDT01NRU5UCi0vKiBVbmNvbW1lbnQgdGhpcyBvbmx5IGlmIG5lZWRl ZCAtLSBJIGRvbid0IHRoaW5rIGl0IGlzICovCi0JdHRyYXcuY19jZmxhZyAmPSB+KENTSVpFKTsJ LyogQ2xlYXIgb3V0IGNoYXJhY3Rlci1zaXplIG1hc2sgKi8KLQl0dHJhdy5jX2NmbGFnIHw9IENT ODsJCS8qIEFuZCBzZXQgaXQgdG8gOCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZmRlZiBJ R05QQVIKLQlkZWJ1ZyhGMTAxLCJ0dHZ0IGh3cGFyaXR5IElHTlBBUiIsIiIsSUdOUEFSKTsKLQl0 dHR2dC5jX2lmbGFnIHw9IElHTlBBUjsJLyogRG9uJ3QgZGlzY2FyZCBpbmNvbWluZyBieXRlcyAq LwotI2VuZGlmIC8qIElHTlBBUiAqLwotCXR0dHZ0LmNfY2ZsYWcgfD0gUEFSRU5COwkvKiBFbmFi bGUgcGFyaXR5ICovCi0KLQlzd2l0Y2ggKGh3cGFyaXR5KSB7Ci0JICBjYXNlICdlJzoJCQkvKiBF dmVuICovCi0JICAgIHR0dHZ0LmNfY2ZsYWcgJj0gfihQQVJPREQpOwotCSAgICBkZWJ1ZyhGMTAw LCJ0dHZ0IDggYml0cyArIGV2ZW4gcGFyaXR5IiwiIiwwKTsKLQkgICAgYnJlYWs7Ci0JICBjYXNl ICdvJzoJCQkvKiBPZGQgKi8KLQkgICAgdHR0dnQuY19jZmxhZyB8PSBQQVJPREQ7Ci0JICAgIGRl YnVnKEYxMDAsInR0dnQgOCBiaXRzICsgb2RkIHBhcml0eSIsIiIsMCk7Ci0JICAgIGJyZWFrOwot CSAgY2FzZSAnbSc6CQkJLyogTWFyayAqLwotCSAgY2FzZSAncyc6CQkJLyogU3BhY2UgKi8KLQkg ICAgLyogUEFSRVhUIGlzIG1lbnRpb25lZCBpbiBTVklEIGJ1dCB0aGUgZGV0YWlscyBhcmUgbm90 IGdpdmVuLiAqLwotCSAgICAvKiBQQVJFWFQgaXMgbm90IGluY2x1ZGVkIGluIFBPU0lYIElTTy9J RUMgOTk0NS0xLiAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0dHZ0IDggYml0cyArIGludmFsaWQgcGFy aXR5IiwiIiwwKTsKLQkgICAgYnJlYWs7Ci0JfQotICAgIH0gZWxzZSB7CQkJCS8qIFdlIGhhbmRs ZSBwYXJpdHkgb3Vyc2VsdmVzICovCi0jZW5kaWYgLyogSFdQQVJJVFkgKi8KLQl0dHR2dC5jX2Nm bGFnICY9IH4oUEFSRU5CKTsJLyogRG9uJ3QgZW5hYmxlIHBhcml0eSAqLwotI2lmZGVmIEhXUEFS SVRZCi0gICAgfQotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0KLSNpZmRlZiBBVFRTVgotI2lmZGVm IEJTRDQ0Ci0gICAgLyogVGhpbmdzIG5vdCB0byBkby4uLiAqLwotICAgIHR0dHZ0LmNfaWZsYWcg Jj0gfihJTkxDUnxJR05DUnxJQ1JOTHxJTlBDS3xJU1RSSVB8SVhBTlkpOwotI2Vsc2UKLSAgICB0 dHR2dC5jX2lmbGFnICY9IH4oSU5MQ1J8SUdOQ1J8SUNSTkx8SVVDTEN8SU5QQ0t8SVNUUklQfElY QU5ZKTsKLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2Vsc2UgLyogUE9TSVggKi8KLSAgICB0dHR2dC5j X2lmbGFnICY9IH4oSU5MQ1J8SUdOQ1J8SUNSTkx8SU5QQ0t8SVNUUklQKTsKLSNlbmRpZiAvKiBB VFRTViAqLwotICAgIHR0dHZ0LmNfY2ZsYWcgJj0gfihDU0laRSk7CQkvKiBaZXJvIG91dCB0aGUg Y2hhciBzaXplIGZpZWxkICovCi0gICAgdHR0dnQuY19jZmxhZyB8PSAoQ1M4fENSRUFEfEhVUENM KTsJLyogQ2hhciBzaXplIDgsIGVuYWJsZSByZWNlaXZlciwgaHVwICovCi0gICAgdHR0dnQuY19v ZmxhZyAmPSB+T1BPU1Q7CQkvKiBEb24ndCBwb3N0cHJvY2VzcyBvdXRwdXQgKi8KLSNpZm5kZWYg VkVPRiAvKiBER1VYIHRlcm1pbyBoYXMgVkVPRiBhdCBlbnRyeSA0LCBzZWUgY29tbWVudCBhYm92 ZSAqLwotICAgIHR0dHZ0LmNfY2NbNF0gPSAxOwotI2Vsc2UKLSNpZm5kZWYgT1hPUwotI2lmZGVm IFZNSU4KLSAgICB0dHR2dC5jX2NjW1ZNSU5dID0gMTsKLSNlbmRpZiAvKiBWTUlOICovCi0jZWxz ZSAvKiBPWE9TICovCi0gICAgdHR0dnQuY19taW4gPSAxOwotI2VuZGlmIC8qIE9YT1MgKi8KLSNl bmRpZiAvKiBWRU9GICovCi0jaWZuZGVmIFZFT0wJLyogREdVWCB0ZXJtaW8gaGFzIFZFT0wgYXQg ZW50cnkgNSwgc2VlIGNvbW1lbnQgYWJvdmUgKi8KLSAgICB0dHR2dC5jX2NjWzVdID0gMDsKLSNl bHNlCi0jaWZuZGVmIE9YT1MKLSNpZmRlZiBWVElNRQotICAgIHR0dHZ0LmNfY2NbVlRJTUVdID0g MDsKLSNlbmRpZiAvKiBWVElNRSAqLwotI2Vsc2UgLyogT1hPUyAqLwotICAgIHR0dHZ0LmNfdGlt ZSA9IDA7Ci0jZW5kaWYgLyogT1hPUyAqLwotI2VuZGlmIC8qIFZFT0wgKi8KLQotI2lmZGVmIFBs YW45Ci0gICAgaWYgKHA5dHR5cGFyaXR5KCduJykgPCAwKQotICAgICAgcmV0dXJuIC0xOwotI2Vs c2UKLSNpZmRlZiBCU0Q0NE9SUE9TSVgKLSAgICBlcnJubyA9IDA7Ci0jaWZkZWYgQkVPU09SQkVC T1gKLSAgICB0dHR2dC5jX2NjW1ZNSU5dID0gMDsJCS8qIERSNyBjYW4gb25seSBwb2xsLiAqLwot I2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCi0KLSAgICB4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FE UkFJTiwmdHR0dnQpOwotICAgIGRlYnVnKEYxMDEsInR0dnQgQlNENDRPUlBPU0lYIHRjc2V0YXR0 ciIsIiIseCk7Ci0gICAgaWYgKHggPCAwKSB7Ci0JZGVidWcoRjEwMSwidHR2dCBCU0Q0NE9SUE9T SVggdGNzZXRhdHRyIGVycm5vIiwiIixlcnJubyk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0jZWxz ZSAvKiBBVFRTViAqLwotICAgIHggPSBpb2N0bCh0dHlmZCxUQ1NFVEFXLCZ0dHR2dCk7Ci0gICAg ZGVidWcoRjEwMSwidHR2dCBBVFRTViBpb2N0bCBUQ1NFVEFXIiwiIix4KTsKLSAgICBpZiAoeCA8 IDApIHsJCQkvKiBzZXQgbmV3IG1vZGVzIC4gKi8KLQlkZWJ1ZyhGMTAxLCJ0dHZ0IEFUVFNWIGlv Y3RsIFRDU0VUQVcgZXJybm8iLCIiLGVycm5vKTsKLQlyZXR1cm4oLTEpOwkKLSAgICB9Ci0jZW5k aWYgLyogQlNENDRPUlBPU0lYICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLSNlbmRpZiAvKiBBVFRT ViAqLwotCi0gICAgdHRzcGVlZCA9IHNwZWVkOwkJCS8qIERvbmUsIHJlbWVtYmVyIGhvdyB3ZSB3 ZXJlICovCi0gICAgdHRmbG93ID0gZmxvdzsJCQkvKiBjYWxsZWQsIHNvIHdlIGNhbiBkZWNpZGUg aG93IHRvICovCi0gICAgdHZ0ZmxnID0gMTsJCQkJLyogcmVzcG9uZCBuZXh0IHRpbWUuICovCi0g ICAgZGVidWcoRjEwMCwidHR2dCBvayIsIiIsMCk7Ci0gICAgcmV0dXJuKDApOwotCi0jaWZkZWYg Q09IRVJFTlQKLSN1bmRlZiBTVk9SUE9TSVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0jZW5k aWYgLyogTk9MT0NBTCAqLwotfQotCi0jaWZuZGVmIE5PTE9DQUwKLQotLyogU2VyaWFsIHNwZWVk IGRlcGFydG1lbnQgLiAuIC4gKi8KLQotLyoKLSAgU0NPIE9TUjUuMC54IG1pZ2h0IG9yIG1pZ2h0 IG5vdCBzdXBwb3J0IGhpZ2ggc3BlZWRzLiAgU29tZXRpbWVzIHRoZXkgYXJlIG5vdAotICBkZWZp bmVkIGluIHRoZSBoZWFkZXIgZmlsZXMgYnV0IHRoZXkgYXJlIHN1cHBvcnRlZCAoZS5nLiB3aGVu IGJ1aWxkaW5nIHdpdGgKLSAgVURLIGNvbXBpbGVyIHJhdGhlciB0aGFuIC9iaW4vY2MpLCBzb21l dGltZXMgdmljZSB2ZXJzYS4gIEV2ZW4gdGhvdWdoIDUuMC40Ci0gIHdhcyB0aGUgZmlyc3QgcmVs ZWFzZSB0aGF0IGNhbWUgd2l0aCBoaWdoIHNlcmlhbCBzcGVlZHMgc3RhbmRhcmQsIHJlbGVhc2Vz Ci0gIGJhY2sgdG8gNS4wLjAgY291bGQgdXNlIHRoZW0gaWYgY2VydGFpbiBwYXRjaGVzIChvciAi c3VwcGxlbWVudHMiKSB3ZXJlCi0gIGFwcGxpZWQgdG8gdGhlIFNJTyBkcml2ZXIuICBQbHVzIGEg bG90IG9mIFNDTyBpbnN0YWxsYXRpb25zIHJ1biB0aGlyZC1wYXJ0eQotICBkcml2ZXJzLgotKi8K LSNpZmRlZiBDS19TQ09WNQotI2lmbmRlZiBCMzg0MDAKLSNkZWZpbmUJQjM4NDAwCTAwMDAwMTcK LSNlbmRpZiAvKiBCMzg0MDAgKi8KLSNpZm5kZWYgQjU3NjAwCi0jZGVmaW5lCUI1NzYwMAkwMDAw MDIxCi0jZW5kaWYgLyogQjU3NjAwICovCi0jaWZuZGVmIEI3NjgwMAotI2RlZmluZQlCNzY4MDAJ MDAwMDAyMgotI2VuZGlmIC8qIEI3NjgwMCAqLwotI2lmbmRlZiBCMTE1MjAwCi0jZGVmaW5lCUIx MTUyMDAJMDAwMDAyMwotI2VuZGlmIC8qIEIxMTUyMDAgKi8KLSNpZm5kZWYgQjIzMDQwMAotI2Rl ZmluZQlCMjMwNDAwCTAwMDAwMjQKLSNlbmRpZiAvKiBCMjMwNDAwICovCi0jaWZuZGVmIEI0NjA4 MDAKLSNkZWZpbmUJQjQ2MDgwMAkwMDAwMDI1Ci0jZW5kaWYgLyogQjQ2MDgwMCAqLwotI2lmbmRl ZiBCOTIxNjAwCi0jZGVmaW5lCUI5MjE2MDAJMDAwMDAyNgotI2VuZGlmIC8qIEI5MjE2MDAgKi8K LSNlbmRpZiAvKiBDS19TQ09WNSAqLwotLyoKLSAgUGxhbiA5J3MgbmF0aXZlIHNwZWVkIHNldHRp bmcgaW50ZXJmYWNlIGxldHMgeW91IHNldCBhbnl0aGluZyB5b3UgbGlrZSwKLSAgYnV0IHdpbGwg ZmFpbCBpZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBsaWtlIGl0LCBzbyB3ZSBhbGxvdyBhbGwgdGhl IGNvbW1vbgotICBzcGVlZHMuCi0qLwotI2lmZGVmIFBsYW45Ci0jaWZuZGVmIEI1MAotI2RlZmlu ZSBCNTAgNTAKLSNlbmRpZiAvKiBCNTAgKi8KLSNpZm5kZWYgQjc1Ci0jZGVmaW5lIEI3NSA3NQot I2VuZGlmIC8qIEI3NSAqLwotI2lmbmRlZiBCMTEwCi0jZGVmaW5lIEIxMTAgMTEwCi0jZW5kaWYg LyogQjExMCAqLwotI2lmbmRlZiBCMTM0Ci0jZGVmaW5lIEIxMzQgMTM0Ci0jZW5kaWYgLyogQjEz NCAqLwotI2lmbmRlZiBCMjAwCi0jZGVmaW5lIEIyMDAgMjAwCi0jZW5kaWYgLyogQjIwMCAqLwot I2lmbmRlZiBCMzAwCi0jZGVmaW5lIEIzMDAgMzAwCi0jZW5kaWYgLyogQjMwMCAqLwotI2lmbmRl ZiBCMTIwMAotI2RlZmluZSBCMTIwMCAxMjAwCi0jZW5kaWYgLyogQjEyMDAgKi8KLSNpZm5kZWYg QjE4MDAKLSNkZWZpbmUgQjE4MDAgMTgwMAotI2VuZGlmIC8qIEIxODAwICovCi0jaWZuZGVmIEIy NDAwCi0jZGVmaW5lIEIyNDAwIDI0MDAKLSNlbmRpZiAvKiBCMjQwMCAqLwotI2lmbmRlZiBCNDgw MAotI2RlZmluZSBCNDgwMCA0ODAwCi0jZW5kaWYgLyogQjQ4MDAgKi8KLSNpZm5kZWYgQjk2MDAK LSNkZWZpbmUgQjk2MDAgOTYwMAotI2VuZGlmIC8qIEI5NjAwICovCi0jaWZuZGVmIEIxNDQwMAot I2RlZmluZSBCMTQ0MDAgMTQ0MDAKLSNlbmRpZiAvKiBCMTQ0MDAgKi8KLSNpZm5kZWYgQjE5MjAw Ci0jZGVmaW5lIEIxOTIwMCAxOTIwMAotI2VuZGlmIC8qIEIxOTIwMCAqLwotI2lmbmRlZiBCMjg4 MDAKLSNkZWZpbmUgQjI4ODAwIDI4ODAwCi0jZW5kaWYgLyogQjI4ODAwICovCi0jaWZuZGVmIEIz ODQwMAotI2RlZmluZSBCMzg0MDAgMzg0MDAKLSNlbmRpZiAvKiBCMzg0MDAgKi8KLSNpZm5kZWYg QjU3NjAwCi0jZGVmaW5lIEI1NzYwMCA1NzYwMAotI2VuZGlmIC8qIEI1NzYwMCAqLwotI2lmbmRl ZiBCNzY4MDAKLSNkZWZpbmUgQjc2ODAwIDc2ODAwCi0jZW5kaWYgLyogQjc2ODAwICovCi0jaWZu ZGVmIEIxMTUyMDAKLSNkZWZpbmUgQjExNTIwMCAxMTUyMDAKLSNlbmRpZiAvKiBCMTE1MjAwICov Ci0jaWZuZGVmIEIyMzA0MDAKLSNkZWZpbmUgQjIzMDQwMCAyMzA0MDAKLSNlbmRpZiAvKiBCMjMw NDAwICovCi0jaWZuZGVmIEI0NjA4MDAKLSNkZWZpbmUgQjQ2MDgwMCA0NjA4MDAKLSNlbmRpZiAv KiBCNDYwODAwICovCi0jaWZuZGVmIEI5MjE2MDAKLSNkZWZpbmUgQjkyMTYwMCA5MjE2MDAKLSNl bmRpZiAvKiBCOTIxNjAwICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLQotLyogIFQgVCBTIFMgUCBE ICAtLSAgQ2hlY2tzIGFuZCBzZXRzIHRyYW5zbWlzc2lvbiByYXRlLiAgKi8KLQotLyogIENhbGwg d2l0aCBzcGVlZCBpbiBjaGFyYWN0ZXJzIChub3QgYml0cyEpIHBlciBzZWNvbmQuICovCi0vKiAg UmV0dXJucyAtMSBvbiBmYWlsdXJlLCAwIGlmIGl0IGRpZCBub3RoaW5nLCAxIGlmIGl0IGNoYW5n ZWQgdGhlIHNwZWVkLiAqLwotCi0jaWZkZWYgVVNFVENTRVRTUEVFRAotLyoKLSAgVGhlIHRjc2V0 c3BlZWQoKSAvIHRjZ2V0c3BlZWQoKSBpbnRlcmZhY2UgbGV0cyB5b3UgcGFzcyBhbnkgbnVtYmVy IGF0IGFsbAotICB0byBiZSB1c2VkIGFzIGEgc3BlZWQgdG8gYmUgc2V0LCByYXRoZXIgdGhhbiBm b3JjaW5nIGEgY2hvaWNlIGZyb20gYQotICBwcmVkZWZpbmVkIGxpc3QuICBJdCBzZWVtcyB0byBi ZSBwZWN1bGlhciB0byBVbml4V2FyZSA3LgotCi0gIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb24gY29k ZXMgdG8gYmUgcGFzc2VkIHRvIHRjW2dzXWV0c3BlZWQoKSwKLSAgYnV0IGZvciBzb21lIHJlYXNv biB0aGV5IGRvbid0IHNlZW0gdG8gYmUgcGlja2VkIHVwIGZyb20gdGVybWlvcy5oLgotKi8KLSNp Zm5kZWYgVENTX0FMTAotI2RlZmluZSBUQ1NfQUxMIDAKLSNlbmRpZiAvKiBUQ1NfQUxMICovCi0j aWZuZGVmIFRDU19JTgotI2RlZmluZSBUQ1NfSU4gMQotI2VuZGlmIC8qIFRDU19JTiAqLwotI2lm bmRlZiBUQ1NfT1VUCi0jZGVmaW5lIFRDU19PVVQgMgotI2VuZGlmIC8qIFRDU19PVVQgKi8KLSNl bmRpZiAvKiBVU0VUQ1NFVFNQRUVEICovCi0KLWludAotdHRzc3BkKGNwcykgaW50IGNwczsgewot ICAgIGludCB4OwotI2lmZGVmIFBPU0lYCi0vKiBXYXRjaCBvdXQsIHNwZWVkX3Qgc2hvdWxkIGJl IHVuc2lnbmVkLCBzbyBkb24ndCBjb21wYXJlIHdpdGggLTEsIGV0Yy4uLiAqLwotICAgIHNwZWVk X3QKLSNlbHNlCi0gICAgaW50Ci0jZW5kaWYgLyogUE9TSVggKi8KLSAgICAgIHMsIHMyOwotICAg IGludCBvayA9IDE7CQkJCS8qIFNwZWVkIGNoZWNrIHJlc3VsdCwgYXNzdW1lIG9rICovCi0KLSNp ZmRlZiBPTElOVVhISVNQRUVECi0gICAgdW5zaWduZWQgaW50IHNwZF9mbGFncyA9IDA7Ci0gICAg c3RydWN0IHNlcmlhbF9zdHJ1Y3Qgc2VyaW5mbzsKLSNlbmRpZiAvKiBPTElOVVhISVNQRUVEICov Ci0KLSAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgY3BzIiwiIixjcHMpOwotICAgIGRlYnVnKEYxMDEs InR0c3NwZCB0dHlmZCIsIiIsdHR5ZmQpOwotICAgIGRlYnVnKEYxMDEsInR0c3NwZCB4bG9jYWwi LCIiLHhsb2NhbCk7Ci0KLSAgICBpZiAodHR5ZmQgPCAwIHx8IHhsb2NhbCA9PSAwKQkvKiBEb24n dCBzZXQgc3BlZWQgb24gY29uc29sZSAqLwotICAgICAgcmV0dXJuKDApOwotCi0jaWZkZWYJTkVU Q09OTgotICAgIGlmIChuZXRjb25uKSB7Ci0jaWZkZWYgVE5fQ09NUE9SVAotICAgICAgICBpZiAo aXN0bmNvbXBvcnQoKSkKLQkgIHJldHVybih0bmNfc2V0X2JhdWQoY3BzICogMTApKTsKLSAgICAg ICAgZWxzZQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQlyZXR1cm4oMCk7Ci0gIH0KLSNlbmRp ZgkvKiBORVRDT05OICovCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0dXJuKDAp OwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkgcmV0 dXJuKDApOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotCi0gICAgaWYgKGNwcyA8IDApIHJldHVybigt MSk7Ci0gICAgcyA9IHMyID0gMDsJCQkJLyogTkI6IHMgYW5kIHMyIG1pZ2h0IGJlIHVuc2lnbmVk ICovCi0KLSNpZmRlZiBVU0VUQ1NFVFNQRUVECi0KLSAgICBzID0gY3BzICogMTBMOwotCi0gICAg eCA9IHRjZ2V0YXR0cih0dHlmZCwmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBzcGVlZCAqLwotICAg IGRlYnVnKEYxMDEsInR0c3NwZCB0Y2dldGF0dHIiLCIiLHgpOwotICAgIGlmICh4IDwgMCkKLSAg ICAgIHJldHVybigtMSk7Ci0gICAgZGVidWcoRjEwMSwidHRzc3BkIFRDU0VUU1BFRUQgc3BlZWQi LCIiLHMpOwotCi0gICAgZXJybm8gPSAwOwotICAgIGlmIChzID09IDg4ODBMKSB7CQkJLyogNzUv MTIwMCBzcGxpdCBzcGVlZCByZXF1ZXN0ZWQgKi8KLQl0Y3NldHNwZWVkKFRDU19JTiwgJnR0Y3Vy LCAxMjAwTCk7Ci0JdGNzZXRzcGVlZChUQ1NfT1VULCAmdHRjdXIsIDc1TCk7Ci0gICAgfSBlbHNl Ci0gICAgICB0Y3NldHNwZWVkKFRDU19BTEwsICZ0dGN1ciwgcyk7CS8qIFB1dCBuZXcgc3BlZWQg aW4gc3RydWN0cyAqLwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGVycm5vICYgZGVibG9nKSB7Ci0J ZGVidWcoRjEwMSwidHRzc3BkIFRDU0VUU1BFRUQgZXJybm8iLCIiLGVycm5vKTsKLSAgICB9Ci0j ZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIENPTU1FTlQKLSAgICB0Y3NldHNwZWVkKFRDU19B TEwsICZ0dHJhdywgcyk7Ci0gICAgdGNzZXRzcGVlZChUQ1NfQUxMLCAmdHR0dnQsIHMpOwotICAg IHRjc2V0c3BlZWQoVENTX0FMTCwgJnR0b2xkLCBzKTsKLSNlbHNlCi0gICAgaWYgKHMgPT0gODg4 MEwpIHsJCQkvKiA3NS8xMjAwIHNwbGl0IHNwZWVkIHJlcXVlc3RlZCAqLwotCXRjc2V0c3BlZWQo VENTX0lOLCAmdHRyYXcsIDEyMDBMKTsKLQl0Y3NldHNwZWVkKFRDU19PVVQsICZ0dHJhdywgNzVM KTsKLQl0Y3NldHNwZWVkKFRDU19JTiwgJnR0dHZ0LCAxMjAwTCk7Ci0JdGNzZXRzcGVlZChUQ1Nf T1VULCAmdHR0dnQsIDc1TCk7Ci0JdGNzZXRzcGVlZChUQ1NfSU4sICZ0dG9sZCwgMTIwMEwpOwot CXRjc2V0c3BlZWQoVENTX09VVCwgJnR0b2xkLCA3NUwpOwotICAgIH0gZWxzZSB7Ci0JdGNzZXRz cGVlZChUQ1NfQUxMLCAmdHRyYXcsIHMpOwotCXRjc2V0c3BlZWQoVENTX0FMTCwgJnR0dHZ0LCBz KTsKLQl0Y3NldHNwZWVkKFRDU19BTEwsICZ0dG9sZCwgcyk7Ci0gICAgfQotI2VuZGlmIC8qIENP TU1FTlQgKi8KLQotICAgIHggPSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0dGN1cik7IC8q IFNldCB0aGUgc3BlZWQgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgdGNzZXRhdHRyIiwiIix4 KTsKLSAgICBpZiAoeCA8IDApCi0gICAgICByZXR1cm4oLTEpOwotCi0jZWxzZSAgLyogTm90IFVT RVRDU0VUU1BFRUQgKi8KLQotICAgIC8qIEZpcnN0IGNoZWNrIHRoYXQgdGhlIGdpdmVuIHNwZWVk IGlzIHZhbGlkLiAqLwotCi0gICAgc3dpdGNoIChjcHMpIHsKLSNpZm5kZWYgTUlOSVgKLSAgICAg IGNhc2UgMDogICBzID0gQjA7ICAgIGJyZWFrOwotICAgICAgY2FzZSA1OiAgIHMgPSBCNTA7ICAg YnJlYWs7Ci0gICAgICBjYXNlIDc6ICAgcyA9IEI3NTsgICBicmVhazsKLSNlbmRpZiAvKiBNSU5J WCAqLwotICAgICAgY2FzZSAxMTogIHMgPSBCMTEwOyAgYnJlYWs7Ci0jaWZuZGVmIE1JTklYCi0g ICAgICBjYXNlIDEzOiAgcyA9IEIxMzQ7ICBicmVhazsKLSAgICAgIGNhc2UgMTU6ICBzID0gQjE1 MDsgIGJyZWFrOwotICAgICAgY2FzZSAyMDogIHMgPSBCMjAwOyAgYnJlYWs7Ci0jZW5kaWYgLyog TUlOSVggKi8KLSAgICAgIGNhc2UgMzA6ICBzID0gQjMwMDsgIGJyZWFrOwotI2lmbmRlZiBNSU5J WAotICAgICAgY2FzZSA2MDogIHMgPSBCNjAwOyAgYnJlYWs7Ci0jZW5kaWYgLyogTUlOSVggKi8K LSAgICAgIGNhc2UgMTIwOiBzID0gQjEyMDA7IGJyZWFrOwotI2lmbmRlZiBNSU5JWAotICAgICAg Y2FzZSAxODA6IHMgPSBCMTgwMDsgYnJlYWs7Ci0jZW5kaWYgLyogTUlOSVggKi8KLSAgICAgIGNh c2UgMjQwOiBzID0gQjI0MDA7IGJyZWFrOwotICAgICAgY2FzZSA0ODA6IHMgPSBCNDgwMDsgYnJl YWs7Ci0jaWZuZGVmIE1JTklYCi0gICAgICBjYXNlIDg4ODogcyA9IEI3NTsgczIgPSBCMTIwMDsg YnJlYWs7IC8qIDg4OCA9IDc1LzEyMDAgc3BsaXQgc3BlZWQgKi8KLSNlbmRpZiAvKiBNSU5JWCAq LwotI2lmZGVmIEI3MjAwCi0gICAgICBjYXNlIDcyMDogcyA9IEI3MjAwOyBicmVhazsKLSNlbmRp ZiAvKiBCNzIwMCAqLwotICAgICAgY2FzZSA5NjA6IHMgPSBCOTYwMDsgYnJlYWs7Ci0jaWZkZWYg QjE0NDAwCi0gICAgICBjYXNlIDE0NDA6IHMgPSBCMTQ0MDA7IGJyZWFrOwotI2VuZGlmIC8qIEIx NDQwMCAqLwotI2lmZGVmIEIxOTIwMAotICAgICAgY2FzZSAxOTIwOiBzID0gQjE5MjAwOyBicmVh azsKLSNlbHNlCi0jaWZkZWYgRVhUQQotICAgICAgY2FzZSAxOTIwOiBzID0gRVhUQTsgYnJlYWs7 Ci0jZW5kaWYgLyogRVhUQSAqLwotI2VuZGlmIC8qIEIxOTIwMCAqLwotI2lmZGVmIEIyODgwMAot ICAgICAgY2FzZSAyODgwOiBzID0gQjI4ODAwOyBicmVhazsKLSNlbmRpZiAvKiBCMjg4MDAgKi8K LSNpZmRlZiBCMzg0MDAKLSAgICAgIGNhc2UgMzg0MDogcyA9IEIzODQwMDsKLSNpZmRlZiBPTElO VVhISVNQRUVECi0gICAgICAgIHNwZF9mbGFncyA9IH5BU1lOQ19TUERfTUFTSzsJLyogTm9uemVy bywgYnV0IHplcm8gZmxhZ3MgKi8KLSNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCi0JYnJlYWs7 Ci0jZWxzZSAvKiBCMzg0MDAgbm90IGRlZmluZWQuLi4gKi8KLSNpZmRlZiBFWFRCCi0gICAgICBj YXNlIDM4NDA6IHMgPSBFWFRCOyBicmVhazsKLSNlbmRpZiAvKiBFWFRCICovCi0jZW5kaWYgLyog QjM4NDAwICovCi0KLSNpZmRlZiBIUFVYCi0jaWZkZWYgX0I1NzYwMAotICAgICAgY2FzZSA1NzYw OiBzID0gX0I1NzYwMDsgYnJlYWs7Ci0jZW5kaWYgLyogX0I1NzYwMCAqLwotI2lmZGVmIF9CMTE1 MjAwCi0gICAgICBjYXNlIDExNTIwOiBzID0gX0IxMTUyMDA7IGJyZWFrOwotI2VuZGlmIC8qIF9C MTE1MjAwICovCi0jZWxzZQotI2lmZGVmIE9MSU5VWEhJU1BFRUQKLS8qCi0gIFRoaXMgYml0IGZy b20gPGNhcmxvQHNnLnRuLnR1ZGVsZnQubmw+OgotICAiT25seSBub3RlIHRvIG1ha2UgaXMgbWF5 YmUgdGhpczogV2hlbiB0aGUgQVNZTkNfU1BEX0NVU1QgZmxhZ3MgYXJlIHNldCB0aGVuCi0gIHNl dHRpbmcgdGhlIHNwZWVkIHRvIDM4NDAwIHdpbGwgc2V0IHRoZSBjdXN0b20gc3BlZWQgKGFuZCB0 dGdzcGQgcmV0dXJucwotICAzODQwMCksIGJ1dCBzcGVlZHMgNTc2MDAgYW5kIDExNTIwMCB3b24n dCB3b3JrIGFueSBtb3JlIGJlY2F1c2UgSSBkaWRuJ3QKLSAgd2FudCB0byBtZXNzIHVwIHRoZSBz cGVlZCBmbGFncyB3aGVuIHNvbWVvbmUgaXMgZG9pbmcgc29waGlzdGljYXRlZCBzdHVmZgotICBs aWtlIGN1c3RvbSBzcGVlZHMuLi4iCi0qLwotICAgICAgY2FzZSA1NzYwOiBzID0gQjM4NDAwOyBz cGRfZmxhZ3MgPSBBU1lOQ19TUERfSEk7IGJyZWFrOwotICAgICAgY2FzZSAxMTUyMDogcyA9IEIz ODQwMDsgc3BkX2ZsYWdzID0gQVNZTkNfU1BEX1ZISTsgYnJlYWs7Ci0jZWxzZQotI2lmZGVmIEI1 NzYwMAotICAgICAgY2FzZSA1NzYwOiBzID0gQjU3NjAwOyBicmVhazsKLSNlbmRpZiAvKiBCNTc2 MDAgKi8KLSNpZmRlZiBCNzY4MDAKLSAgICAgIGNhc2UgNzY4MDogcyA9IEI3NjgwMDsgYnJlYWs7 Ci0jZW5kaWYgLyogQjc2ODAwICovCi0jaWZkZWYgQjExNTIwMAotICAgICAgY2FzZSAxMTUyMDog cyA9IEIxMTUyMDA7IGJyZWFrOwotI2VuZGlmIC8qIEIxMTUyMDAgKi8KLSNlbmRpZiAvKiBPTElO VVhISVNQRUVEICovCi0jaWZkZWYgQjE1MzYwMAotICAgICAgY2FzZSAxNTM2MDogcyA9IEIxNTM2 MDA7IGJyZWFrOwotI2VuZGlmIC8qIEIxNTM2MDAgKi8KLSNpZmRlZiBCMjMwNDAwCi0gICAgICBj YXNlIDIzMDQwOiBzID0gQjIzMDQwMDsgYnJlYWs7Ci0jZW5kaWYgLyogQjIzMDQwMCAqLwotI2lm ZGVmIEIzMDcyMDAKLSAgICAgIGNhc2UgMzA3MjA6IHMgPSBCMzA3MjAwOyBicmVhazsKLSNlbmRp ZiAvKiBCMzA3MjAwICovCi0jaWZkZWYgQjQ2MDgwMAotICAgICAgY2FzZSA0NjA4MDogcyA9IEI0 NjA4MDA7IGJyZWFrOwotI2VuZGlmIC8qIDQ2MDgwMCAqLwotI2lmZGVmIEI5MjE2MDAKLSAgICAg IGNhc2UgOTIxNjA6IHMgPSBCOTIxNjAwOyBicmVhazsKLSNlbmRpZiAvKiBCOTIxNjAwICovCi0j ZW5kaWYgLyogSFBVWCAqLwotICAgICAgZGVmYXVsdDoKLQlvayA9IDA7CQkJCS8qIEdvb2Qgc3Bl ZWQgbm90IGZvdW5kLCBzbyBub3Qgb2sgKi8KLQlicmVhazsKLSAgICB9Ci0gICAgZGVidWcoRjEw MSwidHRzc3BkIG9rIiwiIixvayk7Ci0gICAgZGVidWcoRjEwMSwidHRzc3BkIHMiLCIiLHMpOwot Ci0gICAgaWYgKCFvaykgewotCWRlYnVnKEYxMDAsInR0c3NwZCBmYWlscyIsIiIsMCk7Ci0JcmV0 dXJuKC0xKTsKLSAgICB9IGVsc2UgewotCWlmICghczIpIHMyID0gczsJCS8qIFNldCBpbnB1dCBz cGVlZCAqLwotI2lmZGVmIFBsYW45Ci0JaWYgKHA5dHRzc3BkKGNwcykgPCAwKQotCSAgcmV0dXJu KC0xKTsKLSNlbHNlCi0jaWZkZWYgQlNENDRPUlBPU0lYCi0JeCA9IHRjZ2V0YXR0cih0dHlmZCwm dHRjdXIpOwkvKiBHZXQgY3VycmVudCBzcGVlZCAqLwotCWRlYnVnKEYxMDEsInR0c3NwZCB0Y2dl dGF0dHIiLCIiLHgpOwotCWlmICh4IDwgMCkKLQkgIHJldHVybigtMSk7Ci0jaWZkZWYgT0xJTlVY SElTUEVFRAotCWRlYnVnKEYxMDEsInR0c3NwZCBzcGRfZmxhZ3MiLCIiLHNwZF9mbGFncyk7Ci0J aWYgKHNwZF9mbGFncyAmJiBzcGRfZmxhZ3MgIT0gQVNZTkNfU1BEX0NVU1QpIHsKLQkgICAgaWYg KGlvY3RsKHR0eWZkLCBUSU9DR1NFUklBTCwgJnNlcmluZm8pIDwgMCkgewotCQlkZWJ1ZyhGMTAw LCJ0dHNzcGQ6IFRJT0NHU0VSSUFMIGZhaWxlZCIsIiIsMCk7Ci0JCXJldHVybigtMSk7Ci0JICAg IH0gZWxzZSBkZWJ1ZyhGMTAwLCJ0dHNzcGQ6IFRJT0NHU0VSSUFMIG9rIiwiIiwwKTsKLQkgICAg c2VyaW5mby5mbGFncyAmPSB+QVNZTkNfU1BEX01BU0s7Ci0JICAgIHNlcmluZm8uZmxhZ3MgfD0g KHNwZF9mbGFncyAmIEFTWU5DX1NQRF9NQVNLKTsKLQkgICAgaWYgKGlvY3RsKHR0eWZkLCBUSU9D U1NFUklBTCwgJnNlcmluZm8pIDwgMCkKLQkgICAgICByZXR1cm4oLTEpOwotCX0KLSNlbmRpZiAv KiBPTElOVVhISVNQRUVEICovCi0JY2ZzZXRvc3BlZWQoJnR0Y3VyLHMpOwotCWNmc2V0aXNwZWVk KCZ0dGN1cixzMik7Ci0JY2ZzZXRvc3BlZWQoJnR0cmF3LHMpOwotCWNmc2V0aXNwZWVkKCZ0dHJh dyxzMik7Ci0JY2ZzZXRvc3BlZWQoJnR0dHZ0LHMpOwotCWNmc2V0aXNwZWVkKCZ0dHR2dCxzMik7 Ci0JY2ZzZXRvc3BlZWQoJnR0b2xkLHMpOwotCWNmc2V0aXNwZWVkKCZ0dG9sZCxzMik7Ci0JeCA9 IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKLQlkZWJ1ZyhGMTAxLCJ0dHNzcGQg dGNzZXRhdHRyIiwiIix4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0jZWxzZQotI2lmZGVm IEFUVFNWCi0JaWYgKGNwcyA9PSA4ODgpIHJldHVybigtMSk7CS8qIE5vIHNwbGl0IHNwZWVkcywg c29ycnkuICovCi0JeCA9IGlvY3RsKHR0eWZkLFRDR0VUQSwmdHRjdXIpOwotCWRlYnVnKEYxMDEs InR0c3NwZCBUQ0dFVEEgaW9jdGwiLCIiLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQl0 dGN1ci5jX2NmbGFnICY9IH5DQkFVRDsKLQl0dGN1ci5jX2NmbGFnIHw9IHM7Ci0JdHR0dnQuY19j ZmxhZyAmPSB+Q0JBVUQ7Ci0JdHR0dnQuY19jZmxhZyB8PSBzOwotCXR0cmF3LmNfY2ZsYWcgJj0g fkNCQVVEOwotCXR0cmF3LmNfY2ZsYWcgfD0gczsKLQl0dG9sZC5jX2NmbGFnICY9IH5DQkFVRDsK LQl0dG9sZC5jX2NmbGFnIHw9IHM7Ci0JeCA9IGlvY3RsKHR0eWZkLFRDU0VUQVcsJnR0Y3VyKTsK LQlkZWJ1ZyhGMTAxLCJ0dHNzcGQgVENTRVRBVyBpb2N0bCIsIiIseCk7Ci0JaWYgKHggPCAwKSBy ZXR1cm4oLTEpOwotI2Vsc2UKLSNpZmRlZiBCRUxMVjEwCi0JeCA9IGlvY3RsKHR0eWZkLFRJT0NH REVWLCZ0ZGN1cik7Ci0JZGVidWcoRjEwMSwidHRzc3BkIFRJT0NHREVWIGlvY3RsIiwiIix4KTsK LQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JdGRjdXIuaXNwZWVkID0gczI7Ci0JdGRjdXIub3Nw ZWVkID0gczsKLQllcnJubyA9IDA7Ci0Jb2sgPSBpb2N0bCh0dHlmZCxUSU9DU0RFViwmdGRjdXIp OwotCWRlYnVnKEYxMDEsInR0c3NwZCBCRUxMVjEwIGlvY3RsIiwiIixvayk7Ci0JaWYgKG9rIDwg MCkgewotCSAgICBwZXJyb3IodHRubXN2KTsKLQkgICAgZGVidWcoRjEwMSwidHRzc3BkIEJFTExW MTAgZXJybm8iLCIiLG9rKTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0jZWxzZQotCXggPSBndHR5 KHR0eWZkLCZ0dGN1cik7Ci0JZGVidWcoRjEwMSwidHRzc3BkIGd0dHkiLCIiLHgpOwotCWlmICh4 IDwgMCkgcmV0dXJuKC0xKTsKLQl0dGN1ci5zZ19vc3BlZWQgPSBzOyB0dGN1ci5zZ19pc3BlZWQg PSBzMjsKLQl0dHR2dC5zZ19vc3BlZWQgPSBzOyB0dHR2dC5zZ19pc3BlZWQgPSBzMjsKLQl0dHJh dy5zZ19vc3BlZWQgPSBzOyB0dHJhdy5zZ19pc3BlZWQgPSBzMjsKLQl0dG9sZC5zZ19vc3BlZWQg PSBzOyB0dG9sZC5zZ19pc3BlZWQgPSBzMjsKLQl4ID0gc3R0eSh0dHlmZCwmdHRjdXIpOwotCWRl YnVnKEYxMDEsInR0c3NwZCBzdHR5IiwiIix4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0j ZW5kaWYgLyogQkVMTFYxMCAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogQlNENDRP UlBPU0lYICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLSAgICB9Ci0gICAgcmV0dXJuKDEpOwkJCQkv KiBSZXR1cm4gMSA9IHN1Y2Nlc3MuICovCi0jZW5kaWYgLyogVVNFVENTRVRTUEVFRCAqLwotfQot Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0vKiBDIE8gTiBHIFMgUCBEICAtICBHZXQgc3BlZWQg b2YgY29uc29sZSB0ZXJtaW5hbCAgKi8KLQotbG9uZwotY29uZ3NwZCgpIHsKLS8qCi0gIFRoaXMg aXMgYSBkaXNndXN0aW5nIGhhY2suICBUaGUgcmlnaHQgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUg dG8gcGFzcyBhbgotICBhcmd1bWVudCB0byB0dGdzcGQoKSwgYnV0IHRoZW4gd2UnZCBuZWVkIHRv IGNoYW5nZSB0aGUgS2VybWl0IEFQSSBhbmQKLSAgYWxsIG9mIHRoZSBjaz90aW8uYyBtb2R1bGVz LiAgKEN1cnJlbnRseSB1c2VkIG9ubHkgZm9yIHJsb2dpbi4pCi0qLwotICAgIGludCB0MTsKLSAg ICBsb25nIHNwZDsKLSNpZmRlZiBORVRDT05OCi0gICAgaW50IHQyID0gbmV0Y29ubjsKLSAgICBu ZXRjb25uID0gMDsKLSNlbmRpZiAvKiBORVRDT05OICovCi0gICAgdDEgPSB0dHlmZDsKLSAgICB0 dHlmZCA9IC0xOwotICAgIHNwZCA9IHR0Z3NwZCgpOwotICAgIGRlYnVnKEYxMDEsImNvbmdzcGQi LCIiLHNwZCk7Ci0jaWZkZWYgTkVUQ09OTgotICAgIG5ldGNvbm4gPSB0MjsKLSNlbmRpZiAvKiBO RVRDT05OICovCi0gICAgdHR5ZmQgPSB0MTsKLSAgICByZXR1cm4oc3BkKTsKLX0KLQotLyogIFQg VCBTIFAgRCBMIEkgUyBUICAtLSBHZXQgbGlzdCBvZiBzZXJpYWwgc3BlZWRzIGFsbG93ZWQgb24g dGhpcyBwbGF0Zm9ybSAqLwotCi0jZGVmaW5lIE5TUERMSVNUIDY0Ci1zdGF0aWMgbG9uZyBzcGRs aXN0W05TUERMSVNUXTsKLS8qCi0gIEFzIHdyaXR0ZW4sIHRoaXMgcGlja3MgdXAgdGhlIHNwZWVk cyBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCB0aHVzCi0gIGFwcGx5IHRvIHRoZSBzeXN0ZW0g d2hlcmUgQy1LZXJtaXQgd2FzIGJ1aWx0LCByYXRoZXIgdGhhbiB0byB0aGUgb25lIHdoZXJlCi0g IGl0IGlzIHJ1bm5pbmcuICBTdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQgYXJlIGFsd2F5cyB3 ZWxjb21lLgotKi8KLWxvbmcgKgotdHRzcGRsaXN0KCkgewotICAgIGludCBpOwotICAgIGZvciAo aSA9IDA7IGkgPCBOU1BETElTVDsgaSsrKQkvKiBJbml0aWFsaXplIHRoZSBsaXN0ICovCi0gICAg ICBzcGRsaXN0W2ldID0gLTFMOwotICAgIGkgPSAxOwotCi0jaWZkZWYgVVNFVENTRVRTUEVFRAkJ CS8qIE5vIHdheSB0byBmaW5kIG91dCB3aGF0J3MgbGVnYWwgKi8KLSAgICBkZWJ1ZyhGMTAwLCJ0 dHNwZGxpc3QgVVNFVENTRVRTUEVFRCIsIiIsMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gNTBMOwot I2lmbmRlZiBVVzcKLSAgICBzcGRsaXN0W2krK10gPSA3NUw7Ci0jZW5kaWYgLyogVVc3ICovCi0g ICAgc3BkbGlzdFtpKytdID0gMTEwTDsKLSNpZm5kZWYgVVc3Ci0gICAgc3BkbGlzdFtpKytdID0g MTM0TDsKLSNlbmRpZiAvKiBVVzcgKi8KLSAgICBzcGRsaXN0W2krK10gPSAxNTBMOwotICAgIHNw ZGxpc3RbaSsrXSA9IDIwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0gMzAwTDsKLSAgICBzcGRsaXN0 W2krK10gPSA2MDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDEyMDBMOwotICAgIHNwZGxpc3RbaSsr XSA9IDE4MDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDI0MDBMOwotICAgIHNwZGxpc3RbaSsrXSA9 IDQ4MDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDg4ODBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDk2 MDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDE0NDAwTDsKLSAgICBzcGRsaXN0W2krK10gPSAxOTIw MEw7Ci0gICAgc3BkbGlzdFtpKytdID0gMjg4MDBMOwotI2lmbmRlZiBVVzcKLSAgICBzcGRsaXN0 W2krK10gPSAzMzYwMEw7Ci0jZW5kaWYgLyogVVc3ICovCi0gICAgc3BkbGlzdFtpKytdID0gMzg0 MDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDU3NjAwTDsKLSAgICBzcGRsaXN0W2krK10gPSA3Njgw MEw7Ci0gICAgc3BkbGlzdFtpKytdID0gMTE1MjAwTDsKLSNpZm5kZWYgVVc3Ci0gICAgc3BkbGlz dFtpKytdID0gMTUzNjAwTDsKLSAgICBzcGRsaXN0W2krK10gPSAyMzA0MDBMOwotICAgIHNwZGxp c3RbaSsrXSA9IDMwNzIwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0gNDYwODAwTDsKLSAgICBzcGRs aXN0W2krK10gPSA5MjE2MDBMOwotI2VuZGlmIC8qIFVXNyAqLwotCi0jZWxzZSAgLyogVVNFVENT RVRTUEVFRCAqLwotCi0gICAgZGVidWcoRjEwMCwidHRzcGRsaXN0IG5vIFVTRVRDU0VUU1BFRUQi LCIiLDApOwotCi0jaWZkZWYgQjUwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEI1MCIsIiIs QjUwKTsKLSAgICBzcGRsaXN0W2krK10gPSA1MEw7Ci0jZW5kaWYgLyogQjUwICovCi0jaWZkZWYg Qjc1Ci0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEI3NSIsIiIsQjc1KTsKLSAgICBzcGRsaXN0 W2krK10gPSA3NUw7Ci0jZW5kaWYgLyogQjc1ICovCi0jaWZkZWYgQjExMAotICAgIGRlYnVnKEYx MDEsInR0c3BkbGlzdCBCMTEwIiwiIixCMTEwKTsKLSAgICBzcGRsaXN0W2krK10gPSAxMTBMOwot I2VuZGlmIC8qIEIxMTAgKi8KLSNpZmRlZiBCMTM0Ci0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0 IEIxMzQiLCIiLEIxMzQpOwotICAgIHNwZGxpc3RbaSsrXSA9IDEzNEw7Ci0jZW5kaWYgLyogQjEz NCAqLwotI2lmZGVmIEIxNTAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjE1MCIsIiIsQjE1 MCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMTUwTDsKLSNlbmRpZiAvKiBCMTUwICovCi0jaWZkZWYg QjIwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMjAwIiwiIixCMjAwKTsKLSAgICBzcGRs aXN0W2krK10gPSAyMDBMOwotI2VuZGlmIC8qIEIyMDAgKi8KLSNpZmRlZiBCMzAwCi0gICAgZGVi dWcoRjEwMSwidHRzcGRsaXN0IEIzMDAiLCIiLEIzMDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDMw MEw7Ci0jZW5kaWYgLyogQjMwMCAqLwotI2lmZGVmIEI2MDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNw ZGxpc3QgQjYwMCIsIiIsQjYwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gNjAwTDsKLSNlbmRpZiAv KiBCNjAwICovCi0jaWZkZWYgQjEyMDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjEyMDAi LCIiLEIxMjAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAxMjAwTDsKLSNlbmRpZiAvKiBCMTIwMCAq LwotI2lmZGVmIEIxODAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIxODAwIiwiIixCMTgw MCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMTgwMEw7Ci0jZW5kaWYgLyogQjE4MDAgKi8KLSNpZmRl ZiBCMjQwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMjQwMCIsIiIsQjI0MDApOwotICAg IHNwZGxpc3RbaSsrXSA9IDI0MDBMOwotI2VuZGlmIC8qIEIyNDAwICovCi0jaWZkZWYgQjQ4MDAK LSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjQ4MDAiLCIiLEI0ODAwKTsKLSAgICBzcGRsaXN0 W2krK10gPSA0ODAwTDsKLSNlbmRpZiAvKiBCNDgwMCAqLwotI2lmZGVmIEI5NjAwCi0gICAgZGVi dWcoRjEwMSwidHRzcGRsaXN0IEI5NjAwIiwiIixCOTYwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0g OTYwMEw7Ci0jZW5kaWYgLyogQjk2MDAgKi8KLSNpZmRlZiBCMTQ0MDAKLSAgICBkZWJ1ZyhGMTAx LCJ0dHNwZGxpc3QgQjE0NDAwIiwiIixCMTQ0MDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDE0NDAw TDsKLSNlbmRpZiAvKiBCMTQ0MDAgKi8KLSNpZmRlZiBCMTkyMDAKLSAgICBkZWJ1ZyhGMTAxLCJ0 dHNwZGxpc3QgQjE5MjAwIiwiIixCMTkyMDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDE5MjAwTDsK LSNlbHNlCi0jaWZkZWYgRVhUQQotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBFWFRBIiwiIixF WFRBKTsKLSAgICBzcGRsaXN0W2krK10gPSAxOTIwMEw7Ci0jZW5kaWYgLyogRVhUQSAqLwotI2Vu ZGlmIC8qIEIxOTIwMCAqLwotI2lmZGVmIEIyODgwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlz dCBCMjg4MDAiLCIiLEIyODgwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMjg4MDBMOwotI2VuZGlm IC8qIEIyODgwMCAqLwotI2lmZGVmIEIzMzYwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBC MzM2MDAiLCIiLEIzMzYwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMzM2MDBMOwotI2VuZGlmIC8q IEIzMzYwMCAqLwotI2lmZGVmIEIzODQwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMzg0 MDAiLCIiLEIzODQwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMzg0MDBMOwotI2Vsc2UKLSNpZmRl ZiBFWFRCCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEVYVEIiLCIiLEVYVEIpOwotICAgIHNw ZGxpc3RbaSsrXSA9IDM4NDAwTDsKLSNlbmRpZiAvKiBFWFRCICovCi0jZW5kaWYgLyogQjM4NDAw ICovCi0jaWZkZWYgX0I1NzYwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBfQjU3NjAwIiwi IixfQjU3NjAwKTsKLSAgICBzcGRsaXN0W2krK10gPSA1NzYwMEw7Ci0jZWxzZQotI2lmZGVmIEI1 NzYwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCNTc2MDAiLCIiLEI1NzYwMCk7Ci0gICAg c3BkbGlzdFtpKytdID0gNTc2MDBMOwotI2VuZGlmIC8qIEI1NzYwMCAqLwotI2VuZGlmIC8qIF9C NTc2MDAgKi8KLSNpZmRlZiBCNzY4MDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjc2ODAw IiwiIixCNzY4MDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDc2ODAwTDsKLSNlbmRpZiAvKiBCNzY4 MDAgKi8KLSNpZmRlZiBfQjExNTIwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBfQjExNTIw MCIsIiIsX0IxMTUyMDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDExNTIwMEw7Ci0jZWxzZQotI2lm ZGVmIEIxMTUyMDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjExNTIwMCIsIiIsQjExNTIw MCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMTE1MjAwTDsKLSNlbmRpZiAvKiBCMTE1MjAwICovCi0j ZW5kaWYgLyogX0IxMTUyMDAgKi8KLSNpZmRlZiBCMTUzNjAwCi0gICAgZGVidWcoRjEwMSwidHRz cGRsaXN0IEIxNTM2MDAiLCIiLEIxNTM2MDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDE1MzYwMEw7 Ci0jZW5kaWYgLyogQjE1MzYwMCAqLwotI2lmZGVmIEIyMzA0MDAKLSAgICBkZWJ1ZyhGMTAxLCJ0 dHNwZGxpc3QgQjIzMDQwMCIsIiIsQjIzMDQwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMjMwNDAw TDsKLSNlbmRpZiAvKiBCMjMwNDAwICovCi0jaWZkZWYgQjMwNzIwMAotICAgIGRlYnVnKEYxMDEs InR0c3BkbGlzdCBCMzA3MjAwIiwiIixCMzA3MjAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAzMDcy MDBMOwotI2VuZGlmIC8qIEIzMDcyMDAgKi8KLSNpZmRlZiBCNDYwODAwCi0gICAgZGVidWcoRjEw MSwidHRzcGRsaXN0IEI0NjA4MDAiLCIiLEI0NjA4MDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDQ2 MDgwMEw7Ci0jZW5kaWYgLyogQjQ2MDgwMCAqLwotI2lmZGVmIEI5MjE2MDAKLSAgICBkZWJ1ZyhG MTAxLCJ0dHNwZGxpc3QgQjkyMTYwMCIsIiIsQjkyMTYwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0g OTIxNjAwTDsKLSNlbmRpZiAvKiBCOTIxNjAwICovCi0jZW5kaWYgLyogVVNFVENTRVRTUEVFRCAq LwotICAgIHNwZGxpc3RbMF0gPSBpIC0gMTsJCQkvKiBSZXR1cm4gY291bnQgaW4gMHRoIGVsZW1l bnQgKi8KLSAgICBkZWJ1ZyhGMTExLCJ0dHNwZGxpc3Qgc3BkbGlzdCIsIjAiLHNwZGxpc3RbMF0p OwotICAgIHJldHVybigobG9uZyAqKXNwZGxpc3QpOwotfQotCi0vKiBUIFQgRyBTIFAgRCAgLSAg R2V0IHNwZWVkIG9mIGN1cnJlbnRseSBzZWxlY3RlZCB0dHkgbGluZSAgKi8KLQotLyoKLSAgVW5y ZWxpYWJsZS4gIEFmdGVyIFNFVCBMSU5FLCBpdCByZXR1cm5zIGFuIGFjdHVhbCBzcGVlZCwgYnV0 IG5vdCBuZWNlc3NhcmlseQotICB0aGUgcmVhbCBzcGVlZC4gIE9uIHNvbWUgc3lzdGVtcywgaXQg cmV0dXJucyB0aGUgbGluZSdzIG5vbWluYWwgc3BlZWQsIGZyb20KLSAgL2V0Yy90dHl0YWIuICBF dmVuIGlmIHlvdSBTRVQgU1BFRUQgdG8gc29tZXRoaW5nIGVsc2UsIHRoaXMgZnVuY3Rpb24gbWln aHQKLSAgbm90IG5vdGljZS4KLSovCi1sb25nCi10dGdzcGQoKSB7CQkJCS8qIEdldCBjdXJyZW50 IHNlcmlhbCBkZXZpY2Ugc3BlZWQgKi8KLSNpZmRlZiBOT0xPQ0FMCi0gICAgcmV0dXJuKC0xTCk7 Ci0jZWxzZQotI2lmZGVmIFBPU0lYCi0gICAgc3BlZWRfdAkJCQkvKiBTaG91bGQgYmUgdW5zaWdu ZWQgKi8KLSNlbHNlCi0gICAgaW50CQkJCQkvKiBJc24ndCB1bnNpZ25lZCAqLwotI2VuZGlmIC8q IFBPU0lYICovCi0gICAgICBzOwotICAgIGludCB4OwotICAgIGxvbmcgc3M7Ci0jaWZkZWYgT0xJ TlVYSElTUEVFRAotICAgIHVuc2lnbmVkIGludCBzcGRfZmxhZ3MgPSAwOwotICAgIHN0cnVjdCBz ZXJpYWxfc3RydWN0IHNlcmluZm87Ci0jZW5kaWYgLyogT0xJTlVYSElTUEVFRCAqLwotCi0jaWZk ZWYgTkVUQ09OTgotICAgIGlmIChuZXRjb25uKSB7Ci0jaWZkZWYgVE5fQ09NUE9SVAotCWlmIChp c3RuY29tcG9ydCgpKQotCSAgcmV0dXJuKHRuY19nZXRfYmF1ZCgpKTsKLQllbHNlCi0jZW5kaWYg LyogVE5fQ09NUE9SVCAqLwotCSAgcmV0dXJuKC0xKTsJCQkvKiAtMSBpZiBuZXR3b3JrIGNvbm5l Y3Rpb24gKi8KLSAgICB9Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2lmZGVmIE5FVENNRAotICAg IGlmICh0dHBpcGUpIHJldHVybigtMSk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVU UFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oLTEpOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotCi0g ICAgZGVidWcoRjEwMSwidHRnc3BkIHR0eWZkIiwiIix0dHlmZCk7Ci0KLSNpZmRlZiBVU0VUQ1NF VFNQRUVECi0KLSAgICB4ID0gdGNnZXRhdHRyKHR0eWZkLCZ0dGN1cik7CS8qIEdldCBjdXJyZW50 IHNwZWVkICovCi0gICAgZGVidWcoRjEwMSwidHRnc3BkIHRjZ2V0YXR0ciIsIiIseCk7Ci0gICAg aWYgKHggPCAwKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBlcnJubyA9IDA7Ci0gICAgcyA9IHRj Z2V0c3BlZWQoVENTX0FMTCwgJnR0Y3VyKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgVENHRVRT UEVFRCBzcGVlZCIsIiIscyk7Ci0gICAgaWYgKHMgPT0gMCkgewotCWxvbmcgczEsIHMyOwotCXMx ID0gdGNnZXRzcGVlZChUQ1NfSU4sICZ0dGN1cik7Ci0JczIgPSB0Y2dldHNwZWVkKFRDU19PVVQs ICZ0dGN1cik7Ci0JaWYgKHMxID09IDEyMDBMICYmIHMyID09IDc1TCkKLQkgIHJldHVybig4ODgw TCk7Ci0gICAgfQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGVycm5vICYgZGVibG9nKSB7Ci0JZGVi dWcoRjEwMSwidHRzc3BkIFRDR0VUU1BFRUQgZXJybm8iLCIiLGVycm5vKTsKLSAgICB9Ci0jZW5k aWYgLyogREVCVUcgKi8KLSAgICByZXR1cm4ocyk7Ci0KLSNlbHNlICAvKiBOb3QgVVNFVENTRVRT UEVFRCAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICBpZiAodHR5ZmQgPCAwKQotICAgICAgc3MgPSAt MTsKLSAgICBlbHNlCi0gICAgICBzcyA9IHR0eWxhc3RzcGVlZDsKLSNlbHNlCi0jaWZkZWYgT0xJ TlVYSElTUEVFRAotICAgIGRlYnVnKEYxMDAsInR0Z3NwZCBMaW51eCBPTElOVVhISVNQRUVEIiwi IiwwKTsKLSNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCi0KLSAgICBpZiAodHR5ZmQgPCAwKSB7 Ci0jaWZkZWYgQlNENDRPUlBPU0lYCi0JcyA9IGNmZ2V0b3NwZWVkKCZjY29sZCk7Ci0JZGVidWco RjEwMSwidHRnc3BkIGNmZ2V0b3NwZWVkIDEgUE9TSVgiLCIiLHMpOwotI2Vsc2UKLSNpZmRlZiBB VFRTVgotCXMgPSBjY29sZC5jX2NmbGFnICYgQ0JBVUQ7Ci0JZGVidWcoRjEwMSwidHRnc3BkIGNf Y2ZsYWcgQ0JBVUQgMSBBVFRTViIsIiIscyk7Ci0jZWxzZQotCXMgPSBjY29sZC5zZ19vc3BlZWQ7 CQkvKiAob2J0YWluZWQgYnkgY29uZ20oKSkgKi8KLQlkZWJ1ZyhGMTAxLCJ0dGdzcGQgc2dfb3Nw ZWVkIDEiLCIiLHMpOwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogQlNENDRQT1NJWCAq LwotCi0gICAgfSBlbHNlIHsKLSNpZmRlZiBCU0Q0NE9SUE9TSVgKLQlpZiAodGNnZXRhdHRyKHR0 eWZkLCZ0dGN1cikgPCAwKSByZXR1cm4oLTEpOwotCXMgPSBjZmdldG9zcGVlZCgmdHRjdXIpOwot CWRlYnVnKEYxMDEsInR0Z3NwZCBjZmdldG9zcGVlZCAyIEJTRE9SUE9TSVgiLCIiLHMpOwotI2lm ZGVmIE9MSU5VWEhJU1BFRUQKLQlpZiAoaW9jdGwodHR5ZmQsVElPQ0dTRVJJQUwsJnNlcmluZm8p ID4gLTEpCi0JICBzcGRfZmxhZ3MgPSBzZXJpbmZvLmZsYWdzICYgQVNZTkNfU1BEX01BU0s7Ci0J ZGVidWcoRjEwMSwidHRnc3BkIHNwZF9mbGFncyIsIiIsc3BkX2ZsYWdzKTsKLSNlbmRpZiAvKiBP TElOVVhISVNQRUVEICovCi0jZWxzZQotI2lmZGVmIEFUVFNWCi0JeCA9IGlvY3RsKHR0eWZkLFRD R0VUQSwmdHRjdXIpOwotCWRlYnVnKEYxMDEsInR0Z3NwZCBpb2N0bCAyIEFUVFNWIHgiLCIiLHgp OwotCWRlYnVnKEYxMDEsInR0Z3NwZCBpb2N0bCAyIEFUVFNWIGVycm5vIiwiIixlcnJubyk7Ci0J aWYgKHggPCAwKSByZXR1cm4oLTEpOwotCXMgPSB0dGN1ci5jX2NmbGFnICYgQ0JBVUQ7Ci0JZGVi dWcoRjEwMSwidHRnc3BkIGlvY3RsIDIgQVRUU1Ygc3BlZWQiLCIiLHMpOwotI2Vsc2UKLSNpZmRl ZiBCRUxMVjEwCi0JeCA9IGlvY3RsKHR0eWZkLFRJT0NHREVWLCZ0ZGN1cik7Ci0JZGVidWcoRjEw MSwidHRnc3BkIGlvY3RsIDIgQkVMTFYxMCB4IiwiIix4KTsKLQlpZiAoeCA8IDApIHJldHVybigt MSk7Ci0JcyA9IHRkY3VyLm9zcGVlZDsKLQlkZWJ1ZyhGMTAxLCJ0dGdzcGQgaW9jdGwgMiBCRUxM VjEwIHNwZWVkIiwiIixzKTsKLSNlbHNlCi0JeCA9IGd0dHkodHR5ZmQsJnR0Y3VyKTsKLQlkZWJ1 ZyhGMTAxLCJ0dGdzcGQgZ3R0eSAyIHgiLCIiLHgpOwotCWRlYnVnKEYxMDEsInR0Z3NwZCBndHR5 IDIgZXJybm8iLCIiLGVycm5vKTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JcyA9IHR0Y3Vy LnNnX29zcGVlZDsKLQlkZWJ1ZyhGMTAxLCJ0dGdzcGQgZ3R0eSAyIHNwZWVkIiwiIixzKTsKLSNl bmRpZiAvKiBCRUxMVjEwICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0NE9S UE9TSVggKi8KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwidHRnc3BkIGNvZGUiLCIiLHMpOwotI2lm ZGVmIE9MSU5VWEhJU1BFRUQKLSAgICBkZWJ1ZyhGMTAxLCJ0dGdzcGQgc3BkX2ZsYWdzIiwiIixz cGRfZmxhZ3MpOwotI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KLSAgICBzd2l0Y2ggKHMpIHsK LSNpZmRlZiBCMAotICAgICAgY2FzZSBCMDogICAgc3MgPSAwTDsgYnJlYWs7Ci0jZW5kaWYgLyog QjAgKi8KLQotI2lmbmRlZiBNSU5JWAotLyoKLSBNSU5JWCBkZWZpbmVzIHRoZSBCeHggc3ltYm9s cyB0byBiZSBicHMvMTAwLCBzbyBCNTA9PUI3NSwgQjExMD09QjEzND09QjE1MCwKLSBldGMsIG1h a2luZyBmb3IgbWFueSAiZHVwbGljYXRlIGNhc2UgaW4gc3dpdGNoIiBlcnJvcnMsIHdoaWNoIGFy ZSBmYXRhbC4KLSovCi0jaWZkZWYgQjUwCi0gICAgICBjYXNlIEI1MDogICBzcyA9IDUwTDsgYnJl YWs7Ci0jZW5kaWYgLyogQjUwICovCi0jaWZkZWYgQjc1Ci0gICAgICBjYXNlIEI3NTogICBzcyA9 IDc1TDsgYnJlYWs7Ci0jZW5kaWYgLyogQjc1ICovCi0jZW5kaWYgLyogTUlOSVggKi8KLQotI2lm ZGVmIEIxMTAKLSAgICAgIGNhc2UgQjExMDogIHNzID0gMTEwTDsgYnJlYWs7Ci0jZW5kaWYgLyog QjExMCAqLwotCi0jaWZuZGVmIE1JTklYCi0jaWZkZWYgQjEzNAotICAgICAgY2FzZSBCMTM0OiAg c3MgPSAxMzRMOyBicmVhazsKLSNlbmRpZiAvKiBCMTM0ICovCi0jaWZkZWYgQjE1MAotICAgICAg Y2FzZSBCMTUwOiAgc3MgPSAxNTBMOyBicmVhazsKLSNlbmRpZiAvKiBCMTUwICovCi0jZW5kaWYg LyogTUlOSVggKi8KLQotI2lmZGVmIEIyMDAKLSAgICAgIGNhc2UgQjIwMDogIHNzID0gMjAwTDsg YnJlYWs7Ci0jZW5kaWYgLyogQjIwMCAqLwotCi0jaWZkZWYgQjMwMAotICAgICAgY2FzZSBCMzAw OiAgc3MgPSAzMDBMOyBicmVhazsKLSNlbmRpZiAvKiBCMzAwICovCi0KLSNpZmRlZiBCNjAwCi0g ICAgICBjYXNlIEI2MDA6ICBzcyA9IDYwMEw7IGJyZWFrOwotI2VuZGlmIC8qIEI2MDAgKi8KLQot I2lmZGVmIEIxMjAwCi0gICAgICBjYXNlIEIxMjAwOiBzcyA9IDEyMDBMOyBicmVhazsKLSNlbmRp ZiAvKiBCMTIwMCAqLwotCi0jaWZkZWYgQjE4MDAKLSAgICAgIGNhc2UgQjE4MDA6IHNzID0gMTgw MEw7IGJyZWFrOwotI2VuZGlmIC8qIEIxODAwICovCi0KLSNpZmRlZiBCMjQwMAotICAgICAgY2Fz ZSBCMjQwMDogc3MgPSAyNDAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogQjI0MDAgKi8KLQotI2lmZGVm IEI0ODAwCi0gICAgICBjYXNlIEI0ODAwOiBzcyA9IDQ4MDBMOyBicmVhazsKLSNlbmRpZiAvKiBC NDgwMCAqLwotCi0jaWZkZWYgQjcyMDAKLSAgICAgIGNhc2UgQjcyMDA6IHNzID0gNzIwMEw7IGJy ZWFrOwotI2VuZGlmIC8qIEI3MjAwICovCi0KLSNpZmRlZiBCOTYwMAotICAgICAgY2FzZSBCOTYw MDogc3MgPSA5NjAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogQjk2MDAgKi8KLQotI2lmZGVmIEIxOTIw MAotICAgICAgY2FzZSBCMTkyMDA6IHNzID0gMTkyMDBMOyBicmVhazsKLSNlbHNlCi0jaWZkZWYg RVhUQQotICAgICAgY2FzZSBFWFRBOiBzcyA9IDE5MjAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogRVhU QSAqLwotI2VuZGlmIC8qIEIxOTIwMCAqLwotCi0jaWZuZGVmIE1JTklYCi0jaWZkZWYgQjM4NDAw Ci0gICAgICBjYXNlIEIzODQwMDoKLSAgICAgICAgc3MgPSAzODQwMEw7Ci0jaWZkZWYgT0xJTlVY SElTUEVFRAotICAgICAgICBzd2l0Y2goc3BkX2ZsYWdzKSB7Ci0gICAgICAgICAgY2FzZSBBU1lO Q19TUERfSEk6ICBzcyA9ICA1NzYwMEw7IGJyZWFrOwotICAgICAgICAgIGNhc2UgQVNZTkNfU1BE X1ZISTogc3MgPSAxMTUyMDBMOyBicmVhazsKLQl9Ci0jZW5kaWYgLyogT0xJTlVYSElTUEVFRCAq LwotICAgICAgICBicmVhazsKLSNlbHNlCi0jaWZkZWYgRVhUQgotICAgICAgY2FzZSBFWFRCOiBz cyA9IDM4NDAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogRVhUQiAqLwotI2VuZGlmIC8qIEIzODQwMCAq LwotI2VuZGlmIC8qIE1JTklYICovCi0KLSNpZmRlZiBIUFVYCi0jaWZkZWYgX0I1NzYwMAotICAg ICAgY2FzZSBfQjU3NjAwOiBzcyA9IDU3NjAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogX0I1NzYwMCAq LwotI2lmZGVmIF9CMTE1MjAwCi0gICAgICBjYXNlIF9CMTE1MjAwOiBzcyA9IDExNTIwMEw7IGJy ZWFrOwotI2VuZGlmIC8qIF9CMTE1MjAwICovCi0jZWxzZQotI2lmZGVmIEI1NzYwMAotICAgICAg Y2FzZSBCNTc2MDA6IHNzID0gNTc2MDBMOyBicmVhazsKLSNlbmRpZiAvKiBCNTc2MDAgKi8KLSNp ZmRlZiBCNzY4MDAKLSAgICAgIGNhc2UgQjc2ODAwOiBzcyA9IDc2ODAwTDsgYnJlYWs7Ci0jZW5k aWYgLyogQjc2ODAwICovCi0jaWZkZWYgQjExNTIwMAotICAgICAgY2FzZSBCMTE1MjAwOiBzcyA9 IDExNTIwMEw7IGJyZWFrOwotI2VuZGlmIC8qIEIxMTUyMDAgKi8KLSNpZmRlZiBCMTUzNjAwCi0g ICAgICBjYXNlIEIxNTM2MDA6IHNzID0gMTUzNjAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogQjE1MzYw MCAqLwotI2lmZGVmIEIyMzA0MDAKLSAgICAgIGNhc2UgQjIzMDQwMDogc3MgPSAyMzA0MDBMOyBi cmVhazsKLSNlbmRpZiAvKiBCMjMwNDAwICovCi0jaWZkZWYgQjMwNzIwMAotICAgICAgY2FzZSBC MzA3MjAwOiBzcyA9IDMwNzIwMEw7IGJyZWFrOwotI2VuZGlmIC8qIEIzMDcyMDAgKi8KLSNpZmRl ZiBCNDYwODAwCi0gICAgICBjYXNlIEI0NjA4MDA6IHNzID0gNDYwODAwTDsgYnJlYWs7Ci0jZW5k aWYgLyogQjQ2MDgwMCAqLwotI2VuZGlmIC8qIEhQVVggKi8KLSNpZmRlZiBCOTIxNjAwCi0gICAg ICBjYXNlIEI5MjE2MDA6IHNzID0gOTIxNjAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogQjkyMTYwMCAq LwotICAgICAgZGVmYXVsdDoKLQlzcyA9IC0xOyBicmVhazsKLSAgICB9Ci0jZW5kaWYgLyogUGxh bjkgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGdzcGQgc3BlZWQiLCIiLHNzKTsKLSAgICByZXR1cm4o c3MpOwotCi0jZW5kaWYgLyogVVNFVENTRVRTUEVFRCAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8K LX0KLSNpZmRlZiBNSU5JWDIJCQkJLyogQW5vdGhlciBoYWNrIGFsZXJ0ICovCi0jZGVmaW5lIE1J TklYCi0jZW5kaWYgLyogTUlOSVgyICovCi0KLS8qCi0gIEZJT05SRUFEIGRhdGEgdHlwZS4uLiAg VGhpcyBoYXMgYmVlbiBkZWZpbmVkIGFzICJsb25nIiBmb3IgbWFueSwgbWFueQotICB5ZWFycywg YW5kIGl0IHdvcmtlZCBPSyB1bnRpbCA2NC1iaXQgcGxhdGZvcm1zIGFwcGVhcmVkLiAgVGh1cyB3 ZSB1c2UKLSAgaW50IGZvciA2NC1iaXQgcGxhdGZvcm1zLCBidXQga2VlcCBsb25nIGZvciB0aGUg b3RoZXJzLiAgSWYgd2UgY2hhbmdlZAotICB0aGUgZGVmYXVsdCBQRUVLVFlQRSB0byBpbnQsIHRo aXMgd291bGQgcHJvYmFibHkgYnJlYWsgMTYtYml0IGJ1aWxkcwotICAobm90ZSB0aGF0IHNpemVv Zihsb25nKSA9PSBzaXplb2YoaW50KSBvbiBtb3N0IDMyLWJpdCBwbGF0Zm9ybXMpLCBtYW55Ci0g IG9mIHdoaWNoIHdlIGhhdmUgbm8gd2F5IG9mIHRlc3RpbmcgYW55IG1vcmUuICBUaGVyZWZvcmUs IGRvIG5vdCBjaGFuZ2UKLSAgdGhlIGRlZmF1bHQgZGVmaW5pdGlvbiBvZiBQRUVLVFlQRSAtLSBv bmx5IGFkZCBleGNlcHRpb25zIHRvIGl0IGFzIG5lZWRlZC4KLSovCi0jaWZkZWYgQ09IRVJFTlQK LSNpZmRlZiBGSU9OUkVBRAotI3VuZGVmIEZJT05SRUFECi0jZW5kaWYgLyogRklPTlJFQUQgKi8K LS8qICNkZWZpbmUgRklPTlJFQUQgVElPQ1FVRVJZICovCi0vKiAjZGVmaW5lIFBFRUtUWVBFIGlu dCAqLwotI2Vsc2UgIC8qIE5vdCBDT0hFUkVOVC4uLiAqLwotCi0jaWZkZWYgT1NGMzIJCQkJLyog RGlnaXRhbCBVTklYIDMuMiBvciBoaWdoZXIgKi8KLSNkZWZpbmUgUEVFS1RZUEUgaW50Ci0jZWxz ZQotI2RlZmluZSBQRUVLVFlQRSBsb25nCQkJLyogRWxzZXdoZXJlIChzZWUgbm90ZXMgYWJvdmUp ICovCi0jZW5kaWYgLyogT1NGMzIgKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0vKiBja3Vt eXIuYyBieSBLcmlzdG9mZmVyIEVyaWtzc29uLCBza2VAcGttYWIuc2UsIDE1IE1hciAxOTkwLiAq LwotCi0jaWZkZWYgTVlSRUFECi0KLS8qIFByaXZhdGUgYnVmZmVyIGZvciBteXJlYWQoKSBhbmQg aXRzIGNvbXBhbmlvbnMuICBOb3QgZm9yIHVzZSBieSBhbnl0aGluZwotICogZWxzZS4gIHR0Zmx1 aSgpIGlzIGFsbG93ZWQgdG8gcmVzZXQgdGhlbSB0byBpbml0aWFsIHZhbHVlcy4gIHR0Y2hrKCkg aXMKLSAqIGFsbG93ZWQgdG8gcmVhZCBteV9jb3VudC4KLSAqCi0gKiBteV9pdGVtIGlzIGFuIGlu ZGV4IGludG8gbXlidWZbXS4gIEluY3JlbWVudCBpdCAqYmVmb3JlKiByZWFkaW5nIG15YnVmW10u Ci0gKgotICogQSBnbG9iYWwgcGFyaXR5IG1hc2sgdmFyaWFibGUgY291bGQgYmUgdXNlZnVsIHRv by4gIFdlIGNvdWxkIHVzZSBpdCB0bwotICogbGV0IG15cmVhZCgpIHN0cmlwIHRoZSBwYXJpdHkg b24gaXRzIG93biwgaW5zdGVhZCBvZiBzdHJpcHBpbmcgc2lnbgotICogYml0cyBhcyBpdCBkb2Vz IG5vdy4KLSAqLwotI2lmZGVmIEJJR0JVRk9LCi0jZGVmaW5lIE1ZQlVGTEVOIDMyNzY4Ci0jZWxz ZQotI2lmZGVmIHBkcDExCi0jZGVmaW5lIE1ZQlVGTEVOIDI1NgotI2Vsc2UKLSNkZWZpbmUgTVlC VUZMRU4gMTAyNAotI2VuZGlmIC8qIHBkcDExICovCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLQot I2lmZGVmIEFOWVgyNQotI3VuZGVmIE1ZQlVGTEVOCi0jZGVmaW5lIE1ZQlVGTEVOIDI1NgotLyoK LSAgT24gWC4yNSBjb25uZWN0aW9ucywgdGhlcmUgaXMgYW4gZXh0cmEgY29udHJvbCBieXRlIGF0 IHRoZSBiZWdpbm5pbmcuCi0qLwotc3RhdGljIENIQVIgeDI1YnVmW01ZQlVGTEVOKzFdOwkJLyog Q29tbXVuaWNhdGlvbiBkZXZpY2UgaW5wdXQgYnVmZmVyICovCi1zdGF0aWMgQ0hBUiAgKm15YnVm ID0geDI1YnVmKzE7Ci0jZWxzZQotc3RhdGljIENIQVIgbXlidWZbTVlCVUZMRU5dOwotI2VuZGlm IC8qIEFOWVgyNSAqLwotCi1zdGF0aWMgaW50IG15X2NvdW50ID0gMDsJCS8qIE51bWJlciBvZiBj aGFycyBzdGlsbCBpbiBteWJ1ZiAqLwotc3RhdGljIGludCBteV9pdGVtID0gLTE7CQkvKiBMYXN0 IGluZGV4IHJlYWQgZnJvbSBteWJ1ZltdICAgKi8KLQotLyogIFQgVCBQIEUgRSBLICAtLSAgUGVl ayBpbnRvIG91ciBpbnRlcm5hbCBjb21tdW5pY2F0aW9ucyBpbnB1dCBidWZmZXJzLiAqLwotCi0v KgotICBOT1RFOiBUaGlzIHJvdXRpbmUgaXMgcGVjdWxpYXIgdG8gVU5JWCwgYW5kIGlzIHVzZWQg b25seSBieSB0aGUKLSAgc2VsZWN0KCktYmFzZWQgQ09OTkVDVCBtb2R1bGUsIGNrdWNucy5jLiAg SXQgbmVlZCBub3QgYmUgcmVwbGljYXRlZCBpbgotICB0aGUgY2s/dGlvLmMgb2Ygb3RoZXIgcGxh dGZvcm1zLgotKi8KLWludAotdHRwZWVrKCkgewotI2lmZGVmIFRUTEVCVUYKLSAgICBpbnQgcmMg PSAwOwotICAgIGlmICh0dHB1c2ggPj0gMCkKLSAgICAgIHJjKys7Ci0gICAgcmMgKz0gbGVfaW5i dWYoKTsKLSAgICBpZiAocmMgPiAwKQotICAgICAgcmV0dXJuKHJjKTsKLSAgICBlbHNlCi0jZW5k aWYgLyogVFRMRUJVRiAqLwotCi0jaWZkZWYgTVlSRUFECi0gICAgcmV0dXJuKG15X2NvdW50KTsK LSNlbHNlCi0gICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIE1ZUkVBRCAqLwotfQotCi0vKiBteXJl YWQoKSAtLSBFZmZpY2llbnQgcmVhZCBvZiBvbmUgY2hhcmFjdGVyIGZyb20gY29tbXVuaWNhdGlv bnMgbGluZS4KLSAqCi0gKiBOT1RFOiBteXJlYWQoKSBhbmQgaXRzIGhlbHBlcnMgbXlnZXRidWYo KSBhbmQgbXlmaWxsYnVmKCkgcmV0dXJuIHJhdwotICogYnl0ZXMgZnJvbSBjb25uZWN0aW9uLCBz byB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGVuY3J5cHRlZCwgdGhlc2UgYnl0ZXMKLSAqIG11c3Qg YmUgZGVjcnlwdGVkLgotICoKLSAqIFVzZXMgYSBwcml2YXRlIGJ1ZmZlciB0byBtaW5pbWl6ZSB0 aGUgbnVtYmVyIG9mIGV4cGVuc2l2ZSByZWFkKCkgc3lzdGVtCi0gKiBjYWxscy4gIEVzc2VudGlh bGx5IHBlcmZvcm1zIHRoZSBlcXVpdmFsZW50IG9mIHJlYWQoKSBvZiAxIGNoYXJhY3Rlciwgd2hp Y2gKLSAqIGlzIHRoZW4gcmV0dXJuZWQuICBCeSByZWFkaW5nIGFsbCBhdmFpbGFibGUgaW5wdXQg ZnJvbSB0aGUgc3lzdGVtIGJ1ZmZlcnMKLSAqIHRvIHRoZSBwcml2YXRlIGJ1ZmZlciBpbiBvbmUg Y2h1bmssIGFuZCB0aGVuIHdvcmtpbmcgZnJvbSB0aGlzIGJ1ZmZlciwgdGhlCi0gKiBudW1iZXIg b2Ygc3lzdGVtIGNhbGxzIGlzIHJlZHVjZWQgaW4gYW55IGNhc2Ugd2hlcmUgbW9yZSB0aGFuIG9u ZSBjaGFyYWN0ZXIKLSAqIGFycml2ZXMgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBwcmV2 aW91cyBjaHVuaywgZm9yIGluc3RhbmNlIGhpZ2gKLSAqIGJhdWQgcmF0ZXMgb3IgbmV0d29yayB0 eXBlIGNvbm5lY3Rpb25zIHdoZXJlIGlucHV0IGFycml2ZXMgaW4gcGFja2V0cy4KLSAqIElmIHRo ZSB0aW1lIG5lZWRlZCBmb3IgYSByZWFkKCkgc3lzdGVtIGNhbGwgYXBwcm9hY2hlcyB0aGUgdGlt ZSBmb3IgbW9yZQotICogdGhhbiBvbmUgY2hhcmFjdGVyIHRvIGFycml2ZSwgdGhlbiB0aGlzIG1l Y2hhbmlzbSBhdXRvbWF0aWNhbGx5IGNvbXBlbnNhdGVzCi0gKiBmb3IgdGhhdCBieSBwZXJmb3Jt aW5nIGJpZ2dlciByZWFkKClzIGxlc3MgZnJlcXVlbnRseS4gIElmIHRoZSBzeXN0ZW0gbG9hZAot ICogaXMgaGlnaCwgdGhlIHNhbWUgbWVjaGFuaXNtIGNvbXBlbnNhdGVzIGZvciB0aGF0IHRvby4K LSAqCi0gKiBteXJlYWQoKSBpcyBhIG1hY3JvIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBjaGFyYWN0 ZXIgZnJvbSB0aGUgYnVmZmVyLiAgSWYgdGhlCi0gKiBidWZmZXIgaXMgZW1wdHksIG15Z2V0YnVm KCkgaXMgY2FsbGVkLiAgU2VlIG15Z2V0YnVmKCkgZm9yIHBvc3NpYmxlIGVycm9yCi0gKiByZXR1 cm5zLgotICoKLSAqIFRoaXMgc2hvdWxkIGJlIGVmZmljaWVudCBlbm91Z2ggZm9yIGFueSBvbmUt Y2hhcmFjdGVyLWF0LWEtdGltZSBsb29wcy4KLSAqIEZvciBldmVuIGJldHRlciBlZmZpY2llbmN5 IHlvdSBtaWdodCB1c2UgbWVtY3B5KCkvYmNvcHkoKSBvciBzdWNoIGJldHdlZW4KLSAqIGJ1ZmZl cnMgKHNpbmNlIHRoZXkgYXJlIG9mdGVuIGJldHRlciBvcHRpbWl6ZWQgZm9yIGNvcHlpbmcpLCBi dXQgaXQgbWF5IG5vdAotICogYmUgd29ydGggaXQgaWYgeW91IGhhdmUgdG8gdGFrZSBhbiBleHRy YSBwYXNzIG92ZXIgdGhlIGJ1ZmZlciB0byBzdHJpcAotICogcGFyaXR5IGFuZCBjaGVjayBmb3Ig Q1RSTC1DIGFueXdheS4KLSAqCi0gKiBOb3RlIHRoYXQgaWYgeW91IGhhdmUgYmVlbiB1c2luZyBt eXJlYWQoKSBmcm9tIGFub3RoZXIgcHJvZ3JhbSBtb2R1bGUsIHlvdQotICogbWF5IGhhdmUgc29t ZSB0cm91YmxlIGFjY2Vzc2luZyB0aGlzIG1hY3JvIHZlcnNpb24gYW5kIHRoZSBwcml2YXRlIHZh cmlhYmxlcwotICogaXQgdXNlcy4gIEluIHRoYXQgY2FzZSwganVzdCBhZGQgYSBmdW5jdGlvbiBp biB0aGlzIG1vZHVsZSwgdGhhdCBpbnZva2VzIHRoZQotICogbWFjcm8uCi0gKi8KLSNkZWZpbmUg bXlyZWFkKCkgKC0tbXlfY291bnQgPCAwID8gbXlnZXRidWYoKSA6IDI1NSAmIChpbnQpbXlidWZb KytteV9pdGVtXSkKLQotLyogU3BlY2lmaWNhdGlvbjogUHVzaCBiYWNrIHVwIHRvIG9uZSBjaGFy YWN0ZXIgb250byBteXJlYWQoKSdzIHF1ZXVlLgotICoKLSAqIFRoaXMgaW1wbGVtZW50YXRpb246 IFB1c2ggYmFjayBjaGFyYWN0ZXJzIGludG8gbXlidWYuIEF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIK LSAqIG11c3QgaGF2ZSBiZWVuIHJlYWQgdGhyb3VnaCBteXJlYWQoKSBiZWZvcmUgbXl1bnJkKCkg bWF5IGJlIHVzZWQuICBBZnRlcgotICogRU9GIG9yIHJlYWQgZXJyb3IsIGFnYWluLCBteXVucmQo KSBjYW4gbm90IGJlIHVzZWQuICBTb21ldGltZXMgbW9yZSB0aGFuCi0gKiBvbmUgY2hhcmFjdGVy IGNhbiBiZSBwdXNoZWQgYmFjaywgYnV0IG9ubHkgb25lIGNoYXJhY3RlciBpcyBndWFyYW50ZWVk LgotICogU2luY2UgYSBwcmV2aW91cyBteXJlYWQoKSBtdXN0IGhhdmUgcmVhZCBpdHMgY2hhcmFj dGVyIG91dCBvZiBteWJ1ZltdLAotICogdGhhdCBndWFyYW50ZWVzIHRoYXQgdGhlcmUgaXMgc3Bh Y2UgZm9yIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIuICBJZiBwdXNoCi0gKiBiYWNrIHdhcyByZWFs bHkgbmVlZGVkIGFmdGVyIEVPRiwgYSBzbWFsbCBhZGRpdGlvbiBjb3VsZCBwcm92aWRlIHRoYXQu Ci0gKgotICogQXMgb2YgMDIvMjAwNyBteXVucmQoKSBpcyB1c2VkIGJ5IHR0aW5sKCkuCi0gKi8K LVZPSUQKLSNpZmRlZiBDS19BTlNJQwotbXl1bnJkKENIQVIgY2gpCi0jZWxzZQotbXl1bnJkKGNo KSBDSEFSIGNoOwotI2VuZGlmCS8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKG15X2l0ZW0gPj0g MCkgewotCW15YnVmW215X2l0ZW0tLV0gPSBjaDsKLQkrK215X2NvdW50OwotICAgIH0KLX0KLQot LyogIFQgVCBQIFUgUyBIIEIgQSBDIEsgIC0tICBQdXQgbiBieXRlcyBiYWNrIGludG8gdGhlIG15 cmVhZCBidWZmZXIgKi8KLQotc3RhdGljIENIQVIgKiBwdXNoYnVmID0gTlVMTDsKLS8qIHN0YXRp YyBpbnQgcHVzaGVkID0gMDsgKi8KLQotaW50Ci10dHB1c2hiYWNrKHMsbikgQ0hBUiAqIHM7IGlu dCBuOyB7Ci0gICAgZGVidWcoRjEwMSwidHRwdXNoYmFjayBuIiwiIixuKTsKLSAgICBpZiAocHVz aGJ1ZiB8fCBuID4gTVlCVUZMRU4gfHwgbiA8IDEpCi0gICAgICByZXR1cm4oLTEpOwotICAgIGRl YnVnKEYxMDEsInR0cHVzaGJhY2sgbXlfY291bnQiLCIiLG15X2NvdW50KTsKLSAgICBpZiAobXlf Y291bnQgPiAwKSB7Ci0JaWYgKCEocHVzaGJ1ZiA9IChDSEFSICopbWFsbG9jKG4rMSkpKQotCSAg cmV0dXJuKC0xKTsKLQltZW1jcHkocHVzaGJ1ZixteWJ1ZixteV9jb3VudCk7Ci0JLyogcHVzaGVk ID0gbXlfY291bnQ7ICovIC8qIChzZXQgYnV0IG5ldmVyIHVzZWQpICovCi0gICAgfQotICAgIG1l bWNweShteWJ1ZixzLG4pOwotICAgIG15X2NvdW50ID0gbjsKLSAgICBteV9pdGVtID0gLTE7Ci0g ICAgcmV0dXJuKDApOwotfQotCi0vKiBteWdldGJ1ZigpIC0tIEZpbGwgYnVmZmVyIGZvciBteXJl YWQoKSBhbmQgcmV0dXJuIGZpcnN0IGNoYXJhY3Rlci4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlz IHdoYXQgbXlyZWFkKCkgdXNlcyB3aGVuIGl0IGNhbid0IGdldCB0aGUgbmV4dCBjaGFyYWN0ZXIK LSAqIGRpcmVjdGx5IGZyb20gaXRzIGJ1ZmZlci4gIEZpcnN0LCBpdCBjYWxscyBhIHN5c3RlbSBk ZXBlbmRlbnQgbXlmaWxsYnVmKCkKLSAqIHRvIHJlYWQgYXQgbGVhc3Qgb25lIG5ldyBjaGFyYWN0 ZXIgaW50byB0aGUgYnVmZmVyLCBhbmQgdGhlbiBpdCByZXR1cm5zCi0gKiB0aGUgZmlyc3QgY2hh cmFjdGVyIGp1c3QgYXMgbXlyZWFkKCkgd291bGQgaGF2ZSBkb25lLiAgVGhpcyBmdW5jdGlvbiBh bHNvCi0gKiBpcyByZXNwb25zaWJsZSBmb3IgYWxsIGVycm9yIGNvbmRpdGlvbnMgdGhhdCBteXJl YWQoKSBjYW4gaW5kaWNhdGUuCi0gKgotICogUmV0dXJuczogV2hlbiBPSwk9PiBhIHBvc2l0aXZl IGNoYXJhY3RlciwgMCBvciBncmVhdGVyLgotICoJICAgIFdoZW4gRU9GCT0+IC0yLgotICoJICAg IFdoZW4gZXJyb3IJPT4gLTMsIGVycm9yIGNvZGUgaW4gZXJybm8uCi0gKgotICogT2xkZXIgbXly ZWFkKClzIGFkZGl0aW9uYWxseSByZXR1cm5lZCAtMSB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIHdh cyBub3RoaW5nCi0gKiB0byByZWFkLCB1cG9uIHdoaWNoIHRoZSBjYWxsZXIgd291bGQgY2FsbCBt eXJlYWQoKSBhZ2FpbiB1bnRpbCBpdCBnb3QKLSAqIHNvbWV0aGluZy4gIFRoZSBuZXcgbXlyZWFk KCkvbXlnZXRidWYoKSBhbHdheXMgZ2V0cyBzb21ldGhpbmcuICBJZiBpdAotICogZG9lc24ndCwg dGhlbiBtYWtlIGl0IGRvIHNvISAgQW55IHByb2dyYW0gdGhhdCBhY3R1YWxseSBkZXBlbmRzIG9u IHRoZSBvbGQKLSAqIGJlaGF2aW91ciB3aWxsIGJyZWFrLgotICoKLSAqIFRoZSBvbGRlciB2ZXJz aW9uIGFsc28gdXNlZCB0byByZXR1cm4gLTIgYm90aCBmb3IgRU9GIGFuZCBvdGhlciBlcnJvcnMs Ci0gKiBhbmQgdXNlZCB0byBzZXQgZXJybm8gdG8gOTk5OSBvbiBFT0YuICBUaGUgZXJybm8gc3R1 ZmYgaXMgZ29uZSwgRU9GIGFuZAotICogb3RoZXIgZXJyb3JzIG5vdyByZXR1cm4gZGlmZmVyZW50 IHJlc3VsdHMsIGFsdGhvdWdoIEtlcm1pdCBjdXJyZW50bHkgbmV2ZXIKLSAqIGNoZWNrcyB0byBz ZWUgd2hpY2ggaXQgd2FzLiAgSXQganVzdCBkaXNjb25uZWN0cyBpbiBib3RoIGNhc2VzLgotICoK LSAqIEtlcm1pdCBsZXRzIHRoZSB1c2VyIHVzZSB0aGUgcXVpdCBrZXkgdG8gcGVyZm9ybSBzb21l IHNwZWNpYWwgY29tbWFuZHMKLSAqIGR1cmluZyBmaWxlIHRyYW5zZmVyLiAgVGhpcyBjYXVzZXMg cmVhZCgpLCBhbmQgdGh1cyBhbHNvIG15Z2V0YnVmKCksIHRvCi0gKiBmaW5pc2ggd2l0aG91dCBy ZWFkaW5nIGFueXRoaW5nIGFuZCByZXR1cm4gdGhlIEVJTlRSIGVycm9yLiAgVGhpcyBzaG91bGQK LSAqIGJlIGNoZWNrZWQgYnkgdGhlIGNhbGxlci4gIE15Z2V0YnVmKCkgY291bGQgcmV0cnkgdGhl IHJlYWQoKSBvbiBFSU5UUiwKLSAqIGJ1dCBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIHJlYWQsIHRo aXMgY291bGQgZGVsYXkgS2VybWl0J3MgcmVhY3Rpb24gdG8KLSAqIHRoZSBjb21tYW5kLCBhbmQg bWFrZSBLZXJtaXQgYXBwZWFyIHVucmVzcG9uc2l2ZS4KLSAqCi0gKiBUaGUgZGVidWcoKSBjYWxs IHNob3VsZCBiZSByZW1vdmVkIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLgotICovCi1pbnQKLW15 Z2V0YnVmKCkgewotICAgIGludCB4OwotICAgIGVycm5vID0gMDsKLSNpZmRlZiBERUJVRwotICAg IGlmIChkZWJsb2cgJiYgbXlfY291bnQgPiAwKQotICAgICAgZGVidWcoRjEwMSwibXlnZXRidWYg SU1QUk9QRVJMWSBDQUxMRUQgd2l0aCBteV9jb3VudCIsIiIsbXlfY291bnQpOwotI2VuZGlmIC8q IERFQlVHICovCi0gICAgaWYgKG15X2NvdW50IDw9IDApCi0gICAgICBteV9jb3VudCA9IG15Zmls bGJ1ZigpOwotCi0jaWZkZWYgREVCVUcKLSNpZmRlZiBDT01NRU5UCi0gICAgaWYgKGRlYmxvZykg ZGVidWcoRjEwMSwgIm15Z2V0YnVmIHJlYWQiLCAiIiwgbXlfY291bnQpOwotI2Vsc2UgLyogQ09N TUVOVCAqLwotICAgIGNraGV4ZHVtcCgibXlnZXRidWYgcmVhZCIsIG15YnVmLCBteV9jb3VudCk7 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgeCA9IG15X2Nv dW50OwotICAgIGlmIChteV9jb3VudCA8PSAwKSB7Ci0JbXlfY291bnQgPSAwOwotCW15X2l0ZW0g PSAtMTsKLQlkZWJ1ZyhGMTAxLCJteWdldGJ1ZiBlcnJubyIsIiIsZXJybm8pOwotI2lmZGVmIFRD UFNPQ0tFVAotCWlmIChuZXRjb25uICYmIHR0bmV0ID09IE5FVF9UQ1BCICYmIGVycm5vICE9IDAp IHsKLQkgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7Ci0JCWRlYnVnKEYxMDEsIm15Z2V0YnVmIFRD UCBlcnJvciIsIiIsZXJybm8pOwotCQl0dGNsb3MoMCk7CQkvKiBDbG9zZSB0aGUgY29ubmVjdGlv bi4gKi8KLQkgICAgfQotCSAgICByZXR1cm4oLTMpOwotCX0KLSNlbmRpZiAvKiBUQ1BTT0NLRVQg Ki8KLQlpZiAoIW5ldGNvbm4gJiYgeGxvY2FsICYmIGVycm5vKSB7Ci0JICAgIGlmIChlcnJubyAh PSBFSU5UUikgewotCQlkZWJ1ZyhGMTAxLCJteWdldGJ1ZiBTRVJJQUwgZXJyb3IiLCIiLGVycm5v KTsKLQkJeCA9IC0zOwotCQl0dGNsb3MoMCk7CQkvKiBDbG9zZSB0aGUgY29ubmVjdGlvbi4gKi8K LQkgICAgfQotCX0KLQlyZXR1cm4oKHggPCAwKSA/IC0zIDogLTIpOwotICAgIH0KLSAgICAtLW15 X2NvdW50OwotICAgIHJldHVybigodW5zaWduZWQpKDB4ZmYgJiBteWJ1ZltteV9pdGVtID0gMF0p KTsKLX0KLQotLyogbXlmaWxsYnVmKCk6Ci0gKiBTeXN0ZW0tZGVwZW5kZW50IHJlYWQoKSBpbnRv IG15YnVmW10sIGFzIG1hbnkgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4KLSAqCi0gKiBSZXR1cm5z OiBPSyA9PiBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBhbHdheXMgbW9yZSB0aGFuIHplcm8u Ci0gKiAgICAgICAgICBFT0YgPT4gMAotICogICAgICAgICAgRXJyb3IgPT4gLTEsIGVycm9yIGNv ZGUgaW4gZXJybm8uCi0gKgotICogSWYgdGhlcmUgaXMgaW5wdXQgYXZhaWxhYmxlIGluIHRoZSBz eXN0ZW0ncyBidWZmZXJzLCBhbGwgb2YgaXQgc2hvdWxkIGJlCi0gKiByZWFkIGludG8gbXlidWZb XSBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybiBpbW1lZGlhdGVseS4gIElmIG5vIGlucHV0IGlzCi0g KiBhdmFpbGFibGUsIGl0IHNob3VsZCB3YWl0IGZvciBhIGNoYXJhY3RlciB0byBhcnJpdmUsIGFu ZCByZXR1cm4gd2l0aCB0aGF0Ci0gKiBvbmUgaW4gbXlidWZbXSBhcyBzb29uIGFzIHBvc3NpYmxl LiAgSXQgbWF5IHdhaXQgc29tZXdoYXQgcGFzdCB0aGUgZmlyc3QKLSAqIGNoYXJhY3RlciwgYnV0 IGJlIGF3YXJlIHRoYXQgYW55IHN1Y2ggZGVsYXkgbGVuZ3RoZW5zIHRoZSBwYWNrZXQgdHVybmFy b3VuZAotICogdGltZSBkdXJpbmcga2VybWl0IGZpbGUgdHJhbnNmZXJzLiAgU2hvdWxkIG5ldmVy IHJldHVybiB3aXRoIHplcm8gY2hhcmFjdGVycwotICogdW5sZXNzIEVPRiBvciBpcnJlY292ZXJh YmxlIHJlYWQgZXJyb3IuCi0gKgotICogQ29ycmVjdCBmdW5jdGlvbmluZyBkZXBlbmRzIG9uIHRo ZSBjb3JyZWN0IHR0eSBwYXJhbWV0ZXJzIGJlaW5nIHVzZWQuCi0gKiBCZXR0ZXIgY29udHJvbCBv ZiBjdXJyZW50IHBhcmFtZXRlcnMgaXMgcmVxdWlyZWQgdGhhbiBtYXkgaGF2ZSBiZWVuIHRoZQot ICogY2FzZSBpbiBvbGRlciBLZXJtaXQgcmVsZWFzZXMuICBGb3IgaW5zdGFuY2UsIE9fTkRFTEFZ IChvciBlcXVpdmFsZW50KSBjYW4KLSAqIG5vIGxvbmdlciBiZSBzb21ldGltZXMgb2ZmIGFuZCBz b21ldGltZXMgb24gbGlrZSBpdCB1c2VkIHRvLCB1bmxlc3MgYQotICogc3BlY2lhbCBteWZpbGxi dWYoKSBpcyB3cml0dGVuIHRvIGhhbmRsZSB0aGF0LiAgT3RoZXJ3aXNlIHRoZSBvcmRpbmFyeQot ICogbXlmaWxsYnVmKClzIG1heSB0aGluayB0aGV5IGhhdmUgY29tZSB0byBFT0YuCi0gKgotICog SWYgeW91ciBzeXN0ZW0gaGFzIGEgZmFjaWxpdHkgdG8gZGlyZWN0bHkgcGVyZm9ybSB0aGUgZnVu Y3Rpb25pbmcgb2YKLSAqIG15ZmlsbGJ1ZigpLCB0aGVuIHVzZSBpdC4gIElmIHRoZSBzeXN0ZW0g Y2FuIHRlbGwgeW91IGhvdyBtYW55IGNoYXJhY3RlcnMKLSAqIGFyZSBhdmFpbGFibGUgaW4gaXRz IGJ1ZmZlcnMsIHRoZW4gcmVhZCB0aGF0IGFtb3VudCAoYnV0IG5vdCBsZXNzIHRoYW4gMSkuCi0g KiBJZiB0aGUgc3lzdGVtIGNhbiByZXR1cm4gYSBzcGVjaWFsIGluZGljYXRpb24gd2hlbiB5b3Ug dHJ5IHRvIHJlYWQgd2l0aG91dAotICogYW55dGhpbmcgdG8gcmVhZCwgd2hpbGUgYWxsb3dpbmcg eW91IHRvIHJlYWQgYWxsIHRoZXJlIGlzIHdoZW4gdGhlcmUgaXMKLSAqIHNvbWV0aGluZywgeW91 IG1heSBsb29wIHVudGlsIHRoZXJlIGlzIHNvbWV0aGluZyB0byByZWFkLCBidXQgcHJvYmFibHkg dGhhdAotICogaXMgbm90IGdvb2QgZm9yIHRoZSBzeXN0ZW0gbG9hZC4KLSAqLwotCi0jaWZkZWYg U1ZPUlBPU0lYCi0JLyogVGhpcyBpcyBmb3IgU3lzdGVtIElJSS9WIHdpdGggVk1JTj4wLCBWVElN RT0wIGFuZCBPX05ERUxBWSBvZmYsCi0JICogYW5kIENMT0NBTCBzZXQgYW55IHdheSB5b3UgbGlr ZS4gIFRoaXMgd2F5LCByZWFkKCkgd2lsbCBkbyBleGFjdGx5Ci0JICogd2hhdCBpcyByZXF1aXJl ZCBieSBteWZpbGxidWYoKTogSWYgdGhlcmUgaXMgZGF0YSBpbiB0aGUgYnVmZmVycwotCSAqIG9m IHRoZSBPLlMuLCBhbGwgYXZhaWxhYmxlIGRhdGEgaXMgcmVhZCBpbnRvIG15YnVmLCB1cCB0byB0 aGUgc2l6ZQotCSAqIG9mIG15YnVmLiAgSWYgdGhlcmUgaXMgbm9uZSwgdGhlIGZpcnN0IGNoYXJh Y3RlciB0byBhcnJpdmUgaXMKLQkgKiBhd2FpdGVkIGFuZCByZXR1cm5lZC4KLQkgKi8KLWludAot bXlmaWxsYnVmKCkgewotICAgIGludCBmZCwgbjsKLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRw aXBlKQotICAgICAgZmQgPSBmZGluOwotICAgIGVsc2UKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSAg ICAgIGZkID0gdHR5ZmQ7Ci0KLSNpZmRlZiBzeGFFNTAKLSAgICAvKiBGcm9tIFMuIERlemF3YSBh dCBGdWppZmlsbSBpbiBKYXBhbi4gIEkgZG9uJ3Qga25vdyB3aHkgdGhpcyBpcyAqLwotICAgIC8q IG5lY2Vzc2FyeSBmb3IgdGhlIHN4YSBFNTAsIGJ1dCBpdCBpcy4gKi8KLSAgICByZXR1cm4gcmVh ZChmZCwgbXlidWYsIDI1NSk7Ci0jZWxzZQotI2lmZGVmIEJFT1NPUkJFQk9YCi0gICAgd2hpbGUg KDEpIHsKLSNpZmRlZiBORVRDT05OCi0gICAgICAgIGlmIChuZXRjb25uKSB7Ci0gICAgICAgICAg ICBuID0gbmV0eGluKHNpemVvZihteWJ1ZiksIChjaGFyICopbXlidWYpOwotICAgICAgICAgICAg ZGVidWcoRjEwMSwiQkVCT1ggU1ZPUlBPU0lYIG5ldHdvcmsgbXlmaWxsYnVmIiwiIixuKTsKLQl9 Ci0gICAgICAgIGVsc2UKLSNlbmRpZiAvKiBORVRDT05OICovCi0JICBuID0gcmVhZChmZCwgbXli dWYsIHNpemVvZihteWJ1ZikpOwotCWRlYnVnKEYxMDEsIkJFQk9YIFNWT1JQT1NJWCBub3RuZXQg bXlmaWxsYnVmIiwiIixuKTsKLSAgICAgICAgaWYgKG4gPiAwKQotCSAgcmV0dXJuKG4pOwotICAg ICAgICBzbm9vemUoMTAwMC4wKTsKLSAgICB9Ci0jZWxzZSAvKiBCRU9TT1JCRUJPWCAqLwotICAg IGVycm5vID0gMDsKLSAgICAvKiBkZWJ1ZyhGMTAxLCJTVk9SUE9TSVggbXlmaWxsYnVmIGNhbGxp bmcgcmVhZCgpIGZkIiwiIixmZCk7ICovCi0jaWZkZWYgSUJNWDI1Ci0gICAgaWYgKG5ldGNvbm4g JiYgKG5ldHR5cGUgPT0gTkVUX0lYMjUpKSB7Ci0JLyogY2FuJ3QgdXNlIHNpemVvZiBiZWNhdXNl IG15YnVmIGlzIGEgcG9pbnRlciwgYW5kIG5vdCBhbiBhcnJheSEgKi8KLQluID0geDI1eGluKCBN WUJVRkxFTiwgbXlidWYgKTsKLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBJQk1YMjUgKi8KLQotI2lm ZGVmIENLX1NTTAotICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcp IHsKLQkgIGludCBlcnJvciwgbiA9IDA7Ci0JICBkZWJ1ZyhGMTAwLCJteWZpbGxidWYgY2FsbGlu ZyBTU0xfcmVhZCgpIGZkIiwiIiwwKTsKLQkgIHdoaWxlIChuID09IDApIHsKLQkgICAgICBpZiAo c3NsX2FjdGl2ZV9mbGFnKQotICAgICAgICAgICAgICAgIG4gPSBTU0xfcmVhZChzc2xfY29uLCAo Y2hhciAqKW15YnVmLCBzaXplb2YobXlidWYpKTsKLQkgICAgICBlbHNlIGlmICh0bHNfYWN0aXZl X2ZsYWcpCi0gICAgICAgICAgICAgICAgbiA9IFNTTF9yZWFkKHRsc19jb24sIChjaGFyICopbXli dWYsIHNpemVvZihteWJ1ZikpOwotICAgICAgICAgICAgICBlbHNlCi0JCWJyZWFrOwotCSAgICAg IHN3aXRjaCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLG4p KSB7Ci0JCWNhc2UgU1NMX0VSUk9SX05PTkU6Ci0JCSAgaWYgKG4gPiAwKQotICAgICAgICAgICAg ICAgICAgICByZXR1cm4obik7Ci0JCSAgaWYgKG4gPCAwKQotICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oLTIpOwotCQkgIG1zbGVlcCg1MCk7Ci0JCSAgYnJlYWs7Ci0JCWNhc2UgU1NMX0VSUk9S X1dBTlRfV1JJVEU6Ci0JCWNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKLQkJICByZXR1cm4oLTEp OwotCQljYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgotCQkgIGlmIChuICE9IDApCi0JCSAgICByZXR1 cm4oLTEpOwotCQljYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgotCQljYXNlIFNTTF9F UlJPUl9TU0w6Ci0JCWNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgotCQlkZWZhdWx0OgotCQkg IHR0Y2xvcygwKTsKLQkJICByZXR1cm4oLTMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g ICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIENLX0tFUkJFUk9TCi0jaWZkZWYgS1JC NAotI2lmZGVmIFJMT0dDT0RFCi0gICAgaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOKSB7Ci0J ZGVidWcoRjEwMSwibXlmaWxsYnVmIGNhbGxpbmcga3JiNF9kZXNfcmVhZCgpIGZkIiwiIix0dHlm ZCk7Ci0gICAgICAgIGlmICgobiA9IGtyYjRfZGVzX3JlYWQodHR5ZmQsKGNoYXIgKilteWJ1Zixz aXplb2YobXlidWYpKSkgPCAwKQotCSAgcmV0dXJuKC0zKTsKLSAgICAgICAgZWxzZQotCSAgcmV0 dXJuKG4pOwotICAgIH0KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2VuZGlmIC8qIEtSQjQgKi8K LSNpZmRlZiBLUkI1Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs1 TE9HSU4pIHsKLQlkZWJ1ZyhGMTAxLCJteWZpbGxidWYgY2FsbGluZyBrcmI1X2Rlc19yZWFkKCkg ZmQiLCIiLHR0eWZkKTsKLSAgICAgICAgaWYgKChuID0ga3JiNV9kZXNfcmVhZCh0dHlmZCwoY2hh ciAqKW15YnVmLHNpemVvZihteWJ1ZiksMCkpIDwgMCkKLQkgIHJldHVybigtMyk7Ci0gICAgICAg IGVsc2UKLQkgIHJldHVybihuKTsKLSAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRl ZiBLUkI1X1UyVQotICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkgewotCWRlYnVnKEYxMDEs Im15ZmlsbGJ1ZiBjYWxsaW5nIGtyYjVfdTJ1X3JlYWQoKSBmZCIsIiIsdHR5ZmQpOwotICAgICAg ICBpZiAoKG4gPSBrcmI1X3UydV9yZWFkKHR0eWZkLChjaGFyICopbXlidWYsc2l6ZW9mKG15YnVm KSkpIDwgMCkKLQkgIHJldHVybigtMyk7Ci0gICAgICAgIGVsc2UKLQkgIHJldHVybihuKTsKLSAg ICB9Ci0jZW5kaWYgLyogS1JCNV9VMlUgKi8KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyog Q0tfS0VSQkVST1MgKi8KLQotI2lmZGVmIE5FVFBUWQotI2lmZGVmIEhBVkVfUFRZVFJBUAotICAg IC8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIEhQLVVYIHB0eSBpL28gKi8KLSAgcHR5cmVhZDoKLSAg ICBpZiAodHRwdHkgJiYgcHR5X3RyYXBfcGVuZGluZyh0dHlmZCkgPiAwKSB7Ci0JZGVidWcoRjEw MSwibXlmaWxsYnVmIGNhbGxpbmcgcHR5X3RyYXBfaGFuZGxlcigpIGZkIiwiIix0dHlmZCk7Ci0g ICAgICAgIGlmIChwdHlfdHJhcF9oYW5kbGVyKHR0eWZkKSA+IDApIHsKLSAgICAgICAgICAgIHR0 Y2xvcygwKTsKLSAgICAgICAgICAgIHJldHVybigtMyk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k aWYgLyogSEFWRV9QVFlUUkFQICovCi0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgZGVidWcoRjEw MSwibXlmaWxsYnVmIGNhbGxpbmcgcmVhZCgpIGZkIiwiIix0dHlmZCk7Ci0gICAgbiA9IHJlYWQo ZmQsIG15YnVmLCBzaXplb2YobXlidWYpKTsKLSAgICBkZWJ1ZyhGMTAxLCJTVk9SUE9TSVggbXlm aWxsYnVmIHJlYWQiLCIiLG4pOwotICAgIGRlYnVnKEYxMDEsIlNWT1JQT1NJWCBteWZpbGxidWYg ZXJybm8iLCIiLGVycm5vKTsKLSAgICBkZWJ1ZyhGMTAxLCJTVk9SUE9TSVggbXlmaWxsYnVmIHR0 Y2FyciIsIiIsdHRjYXJyKTsKLSAgICBpZiAobiA8IDEpIHsKLSNpZmRlZiBORVRQVFkKLSNpZmRl ZiBIQVZFX1BUWVRSQVAKLSAgICAgICAgLyogV2hlbiB3ZSBoYXZlIGEgUFRZIHRyYXAgaW4gcGxh Y2UgdGhlIGNvbm5lY3Rpb24gY2Fubm90ICovCi0gICAgICAgIC8qIGJlIGNsb3NlZCB1bnRpbCB0 aGUgdHJhcCByZWNlaXZlcyBhIGNsb3NlIGluZGljYXRpb24uICAqLwotICAgICAgICBpZiAobiA9 PSAwICYmIHR0cHR5KQotICAgICAgICAgICAgZ290byBwdHlyZWFkOwotI2VuZGlmIC8qIEhBVkVf UFRZVFJBUCAqLwotI2VuZGlmIC8qIE5FVFBUWSAqLwotICAgICAgICByZXR1cm4oLTMpOwotICAg IH0KLSAgICByZXR1cm4obik7Ci0jZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KLSNlbmRpZiAvKiBz eGFFNTAgKi8KLX0KLQotI2Vsc2UgLyogbm90IEFUJlQgb3IgUE9TSVggKi8KLQotI2lmZGVmIGFl Z2lzCi0JLyogVGhpcyBpcyBxdW90ZWQgZnJvbSB0aGUgb2xkIG15cmVhZCgpLiAgVGhlIHNlbWFu dGljcyBzZWVtIHRvIGJlCi0JICogYWxyaWdodCwgYnV0IG1heWJlIGVycm5vIHdvdWxkIG5vdCBu ZWVkIHRvIGJlIHNldCBldmVuIHdoZW4KLQkgKiB0aGVyZSBpcyBubyBlcnJvcj8gIEkgZG9uJ3Qg a25vdyBhZWdpcy4KLQkgKi8KLWludAotbXlmaWxsYnVmKCkgewotICAgIGludCBjb3VudDsKLSNp ZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKQotICAgICAgZmQgPSBmZGluOwotICAgIGVsc2UK LSNlbmRpZiAvKiBORVRDTUQgKi8KLSAgICAgIGZkID0gdHR5ZmQ7Ci0KLSAgICBjb3VudCA9IGlv c18kZ2V0KChzaG9ydClmZCwgaW9zXyRjb25kX29wdCwgbXlidWYsIDI1NkwsIHN0KTsKLSAgICBl cnJubyA9IEVJTzsKLSAgICBpZiAoc3QuYWxsID09IGlvc18kZ2V0X2NvbmRpdGlvbmFsX2ZhaWxl ZCkgLyogZ2V0IGF0IGxlYXN0IG9uZSAqLwotICAgICAgY291bnQgPSBpb3NfJGdldCgoc2hvcnQp ZmQsIDAsIG15YnVmLCAxTCwgc3QpOwotICAgIGlmIChzdC5hbGwgPT0gaW9zXyRlbmRfb2ZfZmls ZSkKLSAgICAgIHJldHVybigtMyk7Ci0gICAgZWxzZSBpZiAoc3QuYWxsICE9IHN0YXR1c18kb2sp IHsKLQllcnJubyA9IEVJTzsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICByZXR1cm4oY291bnQg PiAwID8gY291bnQgOiAtMyk7Ci19Ci0jZWxzZSAvKiAhYWVnaXMgKi8KLQotI2lmZGVmIEZJT05S RUFECi0JLyogVGhpcyBpcyBmb3Igc3lzdGVtcyB3aXRoIEZJT05SRUFELiAgRklPTlJFQUQgcmV0 dXJucyB0aGUgbnVtYmVyCi0JICogb2YgY2hhcmFjdGVycyBhdmFpbGFibGUgZm9yIHJlYWRpbmcu IElmIG5vbmUgYXJlIGF2YWlsYWJsZSwgd2FpdAotCSAqIHVudGlsIHNvbWV0aGluZyBhcnJpdmVz LCBvdGhlcndpc2UgcmV0dXJuIGFsbCB0aGVyZSBpcy4KLQkgKi8KLWludAotbXlmaWxsYnVmKCkg ewotICAgIFBFRUtUWVBFIGF2YWlsID0gMDsKLSAgICBpbnQgeCwgZmQ7Ci0jaWZkZWYgTkVUQ01E Ci0gICAgaWYgKHR0cGlwZSkKLSAgICAgIGZkID0gZmRpbjsKLSAgICBlbHNlCi0jZW5kaWYgLyog TkVUQ01EICovCi0gICAgICBmZCA9IHR0eWZkOwotCi0jaWZkZWYgU1VOWDI1Ci0vKgotICBTdW5M aW5rIFguMjUgc3VwcG9ydCBpbiB0aGlzIHJvdXRpbmUgZnJvbSBTdGVmYWFuIEEuIEVlY2tlbHMs IEV1cm9zdGF0IChDRUMpLgotICBEZXBlbmRzIG9uIFN1bk9TIGhhdmluZyBGSU9OUkVBRCwgbm90 IGJlY2F1c2Ugd2UgdXNlIGl0LCBidXQganVzdCBzbyB0aGlzCi0gIGNvZGUgaXMgZ3JvdXBlZCBj b3JyZWN0bHkgd2l0aGluIHRoZSAjaWZkZWZzLiAgTGV0J3MgaG9wZSBTb2xhcmlzIGtlZXBzIGl0 LgotCi0gIFdlIGNhbGwgeDI1eGluKCkgaW5zdGVhZCBvZiByZWFkKCkgc28gdGhhdCBRLUJpdCBw YWNrZXRzLCB3aGljaCBjb250YWluCi0gIFguMjUgc2VydmljZS1sZXZlbCBpbmZvcm1hdGlvbiAo ZS5nLiBQQUQgcGFyYW1ldGVyIGNoYW5nZXMpLCBjYW4gYmUgcHJvY2Vzc2VkCi0gIHRyYW5zcGFy ZW50bHkgdG8gdGhlIHVwcGVyLWxldmVsIGNvZGUuICBUaGlzIGlzIGEgYmxvY2tpbmcgcmVhZCwg YW5kIHNvCi0gIHdlIGRlcGVuZCBvbiBoaWdoZXItbGV2ZWwgY29kZSAoc3VjaCBhcyB0dGluYygp KSB0byBzZXQgYW55IG5lY2Vzc2FyeSBhbGFybXMuCi0qLwotICAgIGV4dGVybiBpbnQgbmV0dHlw ZTsKLSAgICBpZiAobmV0Y29ubiAmJiBuZXR0eXBlID09IE5FVF9TWDI1KSB7Ci0Jd2hpbGUgKCh4 ID0geDI1eGluKHNpemVvZih4MjVidWYpLCB4MjVidWYpKSA8IDEpIDsKLQlyZXR1cm4oeCAtIDEp OwkgICAgICAgIC8qICItMSIgY29tcGVuc2F0ZXMgZm9yIGV4dHJhIHN0YXR1cyBieXRlICovCi0g ICAgfQotI2VuZGlmIC8qIFNVTlgyNSAqLwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKHNzbF9h Y3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgaW50IGVycm9yLCBuID0g MDsKLSAgICAgICAgd2hpbGUgKG4gPT0gMCkgewotICAgICAgICAgICAgaWYgKHNzbF9hY3RpdmVf ZmxhZykKLQkgICAgICBuID0gU1NMX3JlYWQoc3NsX2NvbiwgKGNoYXIgKilteWJ1Ziwgc2l6ZW9m KG15YnVmKSk7Ci0gICAgICAgICAgICBlbHNlCi0JICAgICAgbiA9IFNTTF9yZWFkKHRsc19jb24s IChjaGFyICopbXlidWYsIHNpemVvZihteWJ1ZikpOwotICAgICAgICAgICAgc3dpdGNoIChTU0xf Z2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24sbikpIHsKLQkgICAgICBj YXNlIFNTTF9FUlJPUl9OT05FOgotICAgICAgICAgICAgICAgIGlmIChuID4gMCkKLQkJICByZXR1 cm4obik7Ci0gICAgICAgICAgICAgICAgaWYgKG4gPCAwKQotCQkgIHJldHVybigtMik7Ci0gICAg ICAgICAgICAgICAgbXNsZWVwKDUwKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQkgICAgICBj YXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVB RDoKLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1NZ U0NBTEw6Ci0JCWlmIChuICE9IDApCi0JCSAgcmV0dXJuKC0xKTsKLQkgICAgICBjYXNlIFNTTF9F UlJPUl9XQU5UX1g1MDlfTE9PS1VQOgotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKLQkgICAg ICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKLQkgICAgICBkZWZhdWx0OgotICAgICAgICAg ICAgICAgIHR0Y2xvcygwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIENLX0tF UkJFUk9TCi0jaWZkZWYgS1JCNAotI2lmZGVmIFJMT0dDT0RFCi0gICAgaWYgKHR0bnByb3RvID09 IE5QX0VLNExPR0lOKSB7Ci0gICAgICAgIGlmICgoeCA9IGtyYjRfZGVzX3JlYWQodHR5ZmQsbXli dWYsc2l6ZW9mKG15YnVmKSkpIDwgMCkKLQkgIHJldHVybigtMSk7Ci0gICAgICAgIGVsc2UKLQkg IHJldHVybih4KTsKLSAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNlbmRpZiAvKiBLUkI0 ICovCi0jaWZkZWYgS1JCNQotI2lmZGVmIFJMT0dDT0RFCi0gICAgaWYgKHR0bnByb3RvID09IE5Q X0VLNUxPR0lOKSB7Ci0gICAgICAgIGlmICgoeCA9IGtyYjVfZGVzX3JlYWQodHR5ZmQsbXlidWYs c2l6ZW9mKG15YnVmKSwwKSkgPCAwKQotCSAgcmV0dXJuKC0xKTsKLSAgICAgICAgZWxzZQotCSAg cmV0dXJuKHgpOwotICAgIH0KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2lmZGVmIEtSQjVfVTJV Ci0gICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJVKSB7Ci0gICAgICAgIGlmICgoeCA9IGtyYjVf dTJ1X3JlYWQodHR5ZmQsbXlidWYsc2l6ZW9mKG15YnVmKSkpIDwgMCkKLQkgIHJldHVybigtMSk7 Ci0gICAgICAgIGVsc2UKLQkgIHJldHVybih4KTsKLSAgICB9Ci0jZW5kaWYgLyogS1JCNV9VMlUg Ki8KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQotICAgIGVy cm5vID0gMDsKLSAgICBkZWJ1ZyhGMTAxLCJteWZpbGxidWYgY2FsbGluZyBGSU9OUkVBRCBpb2N0 bCIsIiIseGxvY2FsKTsKLSAgICB4ID0gaW9jdGwoZmQsIEZJT05SRUFELCAmYXZhaWwpOwotI2lm ZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBGSU9O UkVBRCIsIiIseCk7Ci0JZGVidWcoRjEwMSwibXlmaWxsYnVmIEZJT05SRUFEIGF2YWlsIiwiIixh dmFpbCk7Ci0JZGVidWcoRjEwMSwibXlmaWxsYnVmIEZJT05SRUFEIGVycm5vIiwiIixlcnJubyk7 Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgaWYgKHggPCAwIHx8IGF2YWlsID09IDAp Ci0gICAgICBhdmFpbCA9IDE7Ci0KLSAgICBpZiAoYXZhaWwgPiBNWUJVRkxFTikKLSAgICAgIGF2 YWlsID0gTVlCVUZMRU47Ci0KLSAgICBlcnJubyA9IDA7Ci0KLSAgICB4ID0gcmVhZChmZCwgbXli dWYsIChpbnQpIGF2YWlsKTsKLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1 ZyhGMTAxLCJteWZpbGxidWYgYXZhaWwiLCIiLGF2YWlsKTsKLQlkZWJ1ZyhGMTAxLCJteWZpbGxi dWYgcmVhZCIsIiIseCk7Ci0JZGVidWcoRjEwMSwibXlmaWxsYnVmIHJlYWQgZXJybm8iLCIiLGVy cm5vKTsKLSAgICAgICAgaWYgKHggPiAwKQotCSAgY2toZXhkdW1wKCJteWZpbGxidWYgbXlidWYi LG15YnVmLHgpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIGlmICh4IDwgMSkgeCA9 IC0zOwkJCS8qIHJlYWQgMCA9PSBjb25uZWN0aW9uIGxvc3MgKi8KLSAgICByZXR1cm4oeCk7Ci19 Ci0KLSNlbHNlIC8qICFGSU9OUkVBRCAqLwotLyogQWRkIG90aGVyIHN5c3RlbXMgaGVyZSwgYmV0 d2VlbiAjaWZkZWYgYW5kICNlbHNlLCBlLmcuIE5FVENPTk4uICovCi0vKiBXaGVuIHRoZXJlIGlz IG5vIG90aGVyIHBvc3NpYmlsaXR5LCByZWFkIDEgY2hhcmFjdGVyIGF0IGEgdGltZS4gKi8KLWlu dAotbXlmaWxsYnVmKCkgewotICAgIGludCB4OwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKHNz bF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgaW50IGVycm9yLCBu ID0gMDsKLSAgICAgICAgd2hpbGUgKG4gPT0gMCkgewotICAgICAgICAgICAgaWYgKHNzbF9hY3Rp dmVfZmxhZykKLQkgICAgICBuID0gU1NMX3JlYWQoc3NsX2NvbiwgKGNoYXIgKilteWJ1Ziwgc2l6 ZW9mKG15YnVmKSk7Ci0gICAgICAgICAgICBlbHNlCi0JICAgICAgY291bnQgPSBTU0xfcmVhZCh0 bHNfY29uLCAoY2hhciAqKW15YnVmLCBzaXplb2YobXlidWYpKTsKLSAgICAgICAgICAgIHN3aXRj aCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLG4pKSB7Ci0J ICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKLSAgICAgICAgICAgICAgICBpZiAobiA+IDApCi0J CSAgcmV0dXJuKG4pOwotICAgICAgICAgICAgICAgIGlmIChuIDwgMCkKLQkJICByZXR1cm4oLTIp OwotICAgICAgICAgICAgICAgIG1zbGVlcCg1MCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0J ICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9X QU5UX1JFQUQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLQkgICAgICBjYXNlIFNTTF9F UlJPUl9TWVNDQUxMOgotCQlpZiAobiAhPSAwKQotCQkgIHJldHVybigtMSk7Ci0JICAgICAgY2Fz ZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6 Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46Ci0JICAgICAgZGVmYXVsdDoKLSAg ICAgICAgICAgICAgICB0dGNsb3MoMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRl ZiBDS19LRVJCRVJPUwotI2lmZGVmIEtSQjQKLSNpZmRlZiBSTE9HQ09ERQotICAgIGlmICh0dG5w cm90byA9PSBOUF9FSzRMT0dJTikgewotICAgICAgICBpZiAoKGxlbiA9IGtyYjRfZGVzX3JlYWQo dHR5ZmQsbXlidWYsc2l6ZW9mKG15YnVmKSkpIDwgMCkKLQkgIHJldHVybigtMSk7Ci0gICAgICAg IGVsc2UKLQkgIHJldHVybihsZW4pOwotICAgIH0KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2Vu ZGlmIC8qIEtSQjQgKi8KLSNpZmRlZiBLUkI1Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBpZiAodHRu cHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsKLSAgICAgICAgaWYgKChsZW4gPSBrcmI1X2Rlc19yZWFk KHR0eWZkLG15YnVmLHNpemVvZihteWJ1ZiksMCkpIDwgMCkKLQkgIHJldHVybigtMSk7Ci0gICAg ICAgIGVsc2UKLQkgIHJldHVybihsZW4pOwotICAgIH0KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwot I2lmZGVmIEtSQjVfVTJVCi0gICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJVKSB7Ci0gICAgICAg IGlmICgobGVuID0ga3JiNV91MnVfcmVhZCh0dHlmZCxteWJ1ZixzaXplb2YobXlidWYpKSkgPCAw KQotCSAgcmV0dXJuKC0xKTsKLSAgICAgICAgZWxzZQotCSAgcmV0dXJuKGxlbik7Ci0gICAgfQot I2VuZGlmIC8qIEtSQjVfVTJVICovCi0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tF UkJFUk9TICovCi0KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKQotICAgICAgZmQgPSBm ZGluOwotICAgIGVsc2UKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSAgICAgIGZkID0gdHR5ZmQ7Ci0g ICAgeCA9IHJlYWQoZmQsIG15YnVmLCAxKTsKLSAgICByZXR1cm4oeCA+IDAgPyB4IDogLTMpOwot fQotCi0jZW5kaWYgLyogIUZJT05SRUFEICovCi0jZW5kaWYgLyogIWFlZ2lzICovCi0jZW5kaWYg LyogIUFUVFNWICovCi0KLSNlbmRpZiAvKiBNWVJFQUQgKi8KLQotLyogIFQgVCBfIFQgTiBPIFAg VCAgLS0gIEhhbmRsZSBUZWxuZXQgbmVnb3Rpb25zIGluIGluY29taW5nIGRhdGEgKi8KLS8qCi0g IENhbGwgd2l0aCB0aGUgSUFDIHRoYXQgd2FzIGVuY291bnRlcmVkLgotICBSZXR1cm5zOgotICAg LTM6IElmIGNvbm5lY3Rpb24gaGFzIGRyb3BwZWQgb3IgZ29uZSBiYWQuCi0gICAtMjogT24gVGVs bmV0IHByb3RvY29sIGVycm9yIHJlc3VsdGluZyBpbiBpbmNvbnNpc3RlbnQgc3RhdGVzLgotICAg IDA6IElmIG5lZ290aWF0aW9uIE9LIGFuZCBjYWxsZXIgaGFzIG5vdGhpbmcgdG8gZG8uCi0gICAg MTogSWYgcGFja2V0IHN0YXJ0IGNoYXJhY3RlciBoYXMgY2hhbmdlZCAobmV3IHZhbHVlIGlzIGlu IGdsb2JhbCBzdGNocikuCi0gIDI1NTogSWYgdGhlcmUgd2FzIGEgcXVvdGVkIElBQyBhcyBkYXRh LgotICAgb3I6IE5vdCBhdCBhbGwgaWYgd2UgZ290IGEgbGVnaXRpbWF0ZSBUZWxuZXQgTG9nb3V0 IHJlcXVlc3QuCi0qLwotI2lmZGVmIFRDUFNPQ0tFVAotc3RhdGljIGludAotdHRfdG5vcHQobikg aW50IG47IHsJCQkvKiBIYW5kbGUgVGVsbmV0IG9wdGlvbnMgKi8KLSAgICAvKiBJbiBjYXNlIGNh bGxlciBkaWQgbm90IGFscmVhZHkgY2hlY2sgdGhlc2UgY29uZGl0aW9ucy4uLiAgKi8KLSAgICBp ZiAobiA9PSBJQUMgJiYKLQkoKHhsb2NhbCAmJiBuZXRjb25uICYmIElTX1RFTE5FVCgpKSB8fAot CSAoIXhsb2NhbCAmJiBzc3RlbG5ldCkpKSB7Ci0JZXh0ZXJuIGludCBzZXJ2ZXI7Ci0JaW50IHR4 ID0gMDsKLQlkZWJ1ZyhGMTAwLCJ0dGlubCBjYWxsaW5nIHRuX2Rvb3AoKSIsIiIsMCk7Ci0JdHgg PSB0bl9kb29wKChDSEFSKShuICYgMHhmZiksZHVwbGV4LHR0aW5jKTsKLQlkZWJ1ZyhGMTExLCJ0 dGlubCB0bl9kb29wKCkgcmV0dXJuZWQiLCJ0eCIsdHgpOwotCXN3aXRjaCAodHgpIHsKLQkgIGNh c2UgMDoKLQkgICAgcmV0dXJuKDApOwotCSAgY2FzZSAtMToJCQkvKiBJL08gZXJyb3IgKi8KLQkg ICAgdHRpbW9mZigpOwkJCS8qIFR1cm4gb2ZmIHRpbWVyICovCi0JICAgIHJldHVybigtMyk7Ci0g ICAgICAgICAgY2FzZSAtMjoJCQkvKiBDb25uZWN0aW9uIGZhaWxlZC4gKi8KLSAgICAgICAgICBj YXNlIC0zOgotCSAgICB0dGltb2ZmKCk7CQkJLyogVHVybiBvZmYgdGltZXIgKi8KLQkgICAgdHRj bG9zKDApOwotCSAgICByZXR1cm4oLTMpOwotCSAgY2FzZSAxOgkJCS8qIEVDSE8gY2hhbmdlICov Ci0JICAgIGR1cGxleCA9IDE7Ci0JICAgIHJldHVybigwKTsKLQkgIGNhc2UgMjoJCQkvKiBFQ0hP IGNoYW5nZSAqLwotCSAgICBkdXBsZXggPSAwOwotCSAgICByZXR1cm4oMCk7Ci0JICBjYXNlIDM6 CQkJLyogUXVvdGVkIElBQyAqLwotCSAgICBuID0gMjU1OwotCSAgICByZXR1cm4oKHVuc2lnbmVk KTI1NSk7Ci0jaWZkZWYgSUtTX09QVElPTgotCSAgY2FzZSA0OiB7Ci0JICAgICAgaWYgKFRFTE9Q VF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCAmJiBzZXJ2ZXIKLSNpZmRlZiBJS1NE Ci0JCSAgJiYgIWluc2VydmVyCi0jZW5kaWYgLyogSUtTRCAqLwotCQkgICkgewkJCS8qIFJlbW90 ZSBpbiBTZXJ2ZXIgbW9kZSAqLwotCQkgIHR0aW1vZmYoKTsJCS8qIFR1cm4gb2ZmIHRpbWVyICov Ci0JCSAgZGVidWcoRjEwMCwidV9zdGFydCBhbmQgIWluc2VydmVyIiwiIiwwKTsKLQkJICByZXR1 cm4oLTIpOwkJLyogRW5kIHNlcnZlciBtb2RlICovCi0JICAgICAgfSBlbHNlIGlmICghVEVMT1BU X1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCAmJgotCQkJIHNlcnZlcgotCQkJICkg ewkJLyogSSdtIG5vIGxvbmdlciBpbiBTZXJ2ZXIgTW9kZSAqLwotCQkgIGRlYnVnKEYxMDAsIm1l X3N0YXJ0IGFuZCBzZXJ2ZXIiLCIiLDApOwotCQkgIHR0aW1vZmYoKTsKLQkJICByZXR1cm4oLTIp OwotCSAgICAgIH0KLQkgICAgICByZXR1cm4oMCk7Ci0JICB9Ci0JICBjYXNlIDU6IHsJCQkvKiBT dGFydCBjaGFyYWN0ZXIgY2hhbmdlICovCi0JICAgICAgLyogZXh0ZXJuIENIQVIgc3RjaHI7ICov Ci0JICAgICAgLyogc3RhcnQgPSBzdGNocjsgKi8KLQkgICAgICByZXR1cm4oMSk7Ci0JICB9Ci0j ZW5kaWYgLyogSUtTX09QVElPTiAqLwotCSAgY2FzZSA2OgkJCS8qIFJlbW90ZSBMb2dvdXQgKi8K LQkgICAgdHRpbW9mZigpOwotCSAgICB0dGNsb3MoMCk7Ci0jaWZkZWYgSUtTRAotCSAgICBpZiAo aW5zZXJ2ZXIgJiYgIWxvY2FsKQotCSAgICAgIGRvZXhpdChHT09EX0VYSVQsMCk7Ci0JICAgIGVs c2UKLSNlbmRpZiAvKiBJS1NEICovCi0JICAgICAgcmV0dXJuKC0yKTsKLQkgIGRlZmF1bHQ6Ci0J ICAgIHJldHVybigwKTsKLQl9Ci0gICAgfSBlbHNlCi0gICAgICByZXR1cm4oMCk7Ci19Ci0jZW5k aWYgLyogVENQU09DS0VUICovCi0KLS8qICBUIFQgRiBMIFUgSSAgLS0gIEZsdXNoIHR0eSBpbnB1 dCBidWZmZXIgKi8KLQotdm9pZAotdHRmbHV4KCkgewkJCQkvKiBCdXQgZmlyc3QuLi4gKi8KLSNp ZmRlZiBNWVJFQUQKLS8qCi0gIEZsdXNoIGludGVybmFsIE1ZUkVBRCBidWZmZXIuCi0qLwotI2lm ZGVmIFRDUFNPQ0tFVAotICAgIGludCBkb3Rub3B0cywgeDsKLSAgICBkb3Rub3B0cyA9ICgoKHhs b2NhbCAmJiBuZXRjb25uICYmIElTX1RFTE5FVCgpKSB8fAotCQkgKCF4bG9jYWwgJiYgc3N0ZWxu ZXQpKSk7Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0gICAgZGVidWcoRjEwMSwidHRmbHV4IG15 X2NvdW50IiwiIixteV9jb3VudCk7Ci0jaWZkZWYgVENQU09DS0VUCi0gICAgaWYgKGRvdG5vcHRz KSB7Ci0JQ0hBUiBjaCA9ICdcMCc7Ci0gICAgICAgIHdoaWxlIChteV9jb3VudCA+IDApIHsKLQkg ICAgY2ggPSBteXJlYWQoKTsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICBpZiAo VEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKQotCSAgICAgIGNrX3RuX2RlY3J5cHQoKGNoYXIg KikmY2gsMSk7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAgICAgaWYgKGNo ID09IElBQykKLQkgICAgICB4ID0gdHRfdG5vcHQoY2gpOwotICAgICAgICB9Ci0gICAgfSBlbHNl Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIENLX0VOQ1JZ UFRJT04KLSAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pICYmIG15X2NvdW50ID4g MCkKLSAgICAgIGNrX3RuX2RlY3J5cHQoJm15YnVmW215X2l0ZW0rMV0sbXlfY291bnQpOwotI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgbXlfY291 bnQgPSAwOwkJCS8qIFJlc2V0IGNvdW50IHRvIHplcm8gKi8KLSAgICBteV9pdGVtID0gLTE7CQkJ LyogQW5kIGJ1ZmZlciBpbmRleCB0byAtMSAqLwotI2VuZGlmIC8qIE1ZUkVBRCAqLwotfQotCi1p bnQKLXR0Zmx1aSgpIHsKLSAgICBpbnQgbiwgZmQ7Ci0jaWZkZWYgVENQU09DS0VUCi0gICAgaW50 IGRvdG5vcHRzOwotICAgIGRvdG5vcHRzID0gKCgoeGxvY2FsICYmIG5ldGNvbm4gJiYgSVNfVEVM TkVUKCkpIHx8Ci0JCSAoIXhsb2NhbCAmJiBzc3RlbG5ldCkpKTsKLSNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KLQotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpCi0gICAgICBmZCA9IGZkaW47 Ci0gICAgZWxzZQotI2VuZGlmIC8qIE5FVENNRCAqLwotICAgICAgZmQgPSB0dHlmZDsKLQotI2lm ZGVmIFRUTEVCVUYKLSAgICB0dHB1c2ggPSAtMTsJCQkvKiBDbGVhciB0aGUgcGVlay1haGVhZCBj aGFyICovCi0gICAgd2hpbGUgKGxlX2RhdGEgJiYgKGxlX2luYnVmKCkgPiAwKSkgewotICAgICAg ICBDSEFSIGNoID0gJ1wwJzsKLSAgICAgICAgaWYgKGxlX2dldGNoYXIoJmNoKSA+IDApIHsJLyog Q2xlYXIgYW55IG1vcmUuLi4gKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInR0Zmx1aSBsZV9p bmJ1ZiBjaCIsIiIsY2gpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIFRUTEVCVUYgKi8K LSAgICBkZWJ1ZyhGMTAxLCJ0dGZsdWkgdHRwaXBlIiwiIix0dHBpcGUpOwotCi0jaWZkZWYgTVlS RUFECi0vKgotICBGbHVzaCBpbnRlcm5hbCBNWVJFQUQgYnVmZmVyICpORVhUKiwgaW4gYWxsIGNh c2VzLgotKi8KLSAgICB0dGZsdXgoKTsKLSNlbmRpZiAvKiBNWVJFQUQgKi8KLQotI2lmZGVmIE5F VENPTk4KLS8qIE5ldHdvcmsgZmx1c2ggaXMgZG9uZSBzcGVjaWFsbHksIGluIHRoZSBuZXR3b3Jr IHN1cHBvcnQgbW9kdWxlLiAqLwotICAgIGlmICgobmV0Y29ubiB8fCBzc3RlbG5ldCkgJiYgIXR0 cGlwZSAmJiAhdHRwdHkpIHsKLQlkZWJ1ZyhGMTAwLCJ0dGZsdWkgbmV0Zmx1aSIsIiIsMCk7Ci0j aWZkZWYgQ09NTUVOVAotI2lmZGVmIFROX0NPTVBPUlQKLQlpZiAoaXN0bmNvbXBvcnQoKSkKLSAg ICAgICAgICAgIHRuY19zZW5kX3B1cmdlX2RhdGEoVE5DX1BVUkdFX1JFQ0VJVkUpOwotI2VuZGlm IC8qIFROX0NPTVBPUlQgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JcmV0dXJuKG5ldGZsdWko KSk7Ci0gICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotICAgIGRlYnVnKEYxMDEsInR0Zmx1 aSB0dHlmZCIsIiIsdHR5ZmQpOyAvKiBOb3QgbmV0d29yayAqLwotICAgIGlmICh0dHlmZCA8IDAp Ci0gICAgICByZXR1cm4oLTEpOwotCi0jaWZkZWYgYWVnaXMKLSAgICBzaW9fJGNvbnRyb2woKHNo b3J0KXlmZCwgc2lvXyRmbHVzaF9pbiwgdHJ1ZSwgc3QpOwotICAgIGlmIChzdC5hbGwgIT0gc3Rh dHVzXyRvaykgewotCWZwcmludGYoc3RkZXJyLCAiZmx1c2ggZmFpbGVkOiAiKTsgZXJyb3JfJHBy aW50KHN0KTsKLSAgICB9IGVsc2UgeyAgICAgIC8qIHNvbWV0aW1lcyB0aGUgZmx1c2ggZG9lc24n dCB3b3JrICovCi0gICAgICAgIGZvciAoOzspIHsKLQkgICAgY2hhciBidWZbMjU2XTsKLSAgICAg ICAgICAgIC8qIGVhdCBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCBzaG91bGRuJ3QgYmUgYXZhaWxh YmxlICovCi0gICAgICAgICAgICBpb3NfJGdldCgoc2hvcnQpZmQsIGlvc18kY29uZF9vcHQsIGJ1 ZiwgMjU2TCwgc3QpOyAvKiAodm9pZCkgKi8KLSAgICAgICAgICAgIGlmIChzdC5hbGwgPT0gaW9z XyRnZXRfY29uZGl0aW9uYWxfZmFpbGVkKSBicmVhazsKLSAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiZmx1c2ggZmFpbGVkKDIpOiAiKTsgZXJyb3JfJHByaW50KHN0KTsKLSAgICAgICAgfQot ICAgIH0KLSNlbHNlCi0jaWZkZWYgQlNENDQJCQkJLyogNC40IEJTRCAqLwotICAgIG4gPSBGUkVB RDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwZWNpZnkgcmVhZCBxdWV1ZSAqLwotICAg IGRlYnVnKEYxMDAsInR0Zmx1aSBCU0Q0NCIsIiIsMCk7Ci0gICAgaW9jdGwoZmQsVElPQ0ZMVVNI LCZuKTsKLSNlbHNlCi0jaWZkZWYgUGxhbjkKLSN1bmRlZiBQT1NJWAkJCQkvKiBVaCBvaC4uLiAq LwotI2VuZGlmIC8qIFBsYW45ICovCi0jaWZkZWYgUE9TSVgJCQkJLyogUE9TSVggKi8KLSAgICBk ZWJ1ZyhGMTAwLCJ0dGZsdWkgUE9TSVgiLCIiLDApOwotICAgIHRjZmx1c2goZmQsVENJRkxVU0gp OwotI2Vsc2UKLSNpZmRlZiBBVFRTVgkJCQkvKiBTeXN0ZW0gViAqLwotI2lmbmRlZiBWWFZFCi0g ICAgZGVidWcoRjEwMCwidHRmbHVpIEFUVFNWIiwiIiwwKTsKLSAgICBpb2N0bChmZCxUQ0ZMU0gs MCk7Ci0jZW5kaWYgLyogVlhWRSAqLwotI2Vsc2UJCQkJCS8qIE5vdCBCU0Q0NCwgUE9TSVgsIG9y IFN5cyBWICovCi0jaWZkZWYgVElPQ0ZMVVNICQkJLyogVGhvc2Ugd2l0aCBUSU9DRkxVU0ggZGVm aW5lZCAqLwotI2lmZGVmIEFOWUJTRAkJCQkvKiBCZXJrZWxleSAqLwotICAgIG4gPSBGUkVBRDsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwZWNpZnkgcmVhZCBxdWV1ZSAqLwotICAgIGRl YnVnKEYxMDAsInR0Zmx1aSBUSU9DRkxVU0ggQU5ZQlNEIiwiIiwwKTsKLSAgICBpb2N0bChmZCxU SU9DRkxVU0gsJm4pOwotI2Vsc2UJCQkJCS8qIE90aGVycyAoVjcsIGV0YykgKi8KLSAgICBkZWJ1 ZyhGMTAwLCJ0dGZsdWkgVElPQ0ZMVVNIIiwiIiwwKTsKLSAgICBpb2N0bChmZCxUSU9DRkxVU0gs MCk7Ci0jZW5kaWYgLyogQU5ZQlNEICovCi0jZWxzZQkJCQkJLyogQWxsIG90aGVycy4uLiAqLwot LyoKLSAgTm8gc3lzdGVtIGNhbGwgKHRoYXQgd2Uga25vdyBhYm91dCkgZm9yIGlucHV0IGJ1ZmZl ciBmbHVzaGluZy4KLSAgU28gc2VlIGhvdyBtYW55IHRoZXJlIGFyZSBhbmQgcmVhZCB0aGVtIGlu IGEgbG9vcCwgdXNpbmcgdHRpbmMoKS4KLSAgdHRpbmMoKSBpcyBidWZmZXJlZCwgc28gd2UncmUg bm90IGdldHRpbmcgY2hhcmdlZCB3aXRoIGEgc3lzdGVtIGNhbGwKLSAgcGVyIGNoYXJhY3Rlciwg anVzdCBhIGZ1bmN0aW9uIGNhbGwuCi0qLwotICAgIGlmICgobiA9IHR0Y2hrKCkpID4gMCkgewot CWRlYnVnKEYxMDEsInR0Zmx1aSByZWFkIGxvb3AiLCIiLG4pOwotCXdoaWxlICgobi0tKSAmJiB0 dGluYygwKSA+IDApIDsKLSAgICB9Ci0jZW5kaWYgLyogVElPQ0ZMVVNIICovCi0jZW5kaWYgLyog QVRUU1YgKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwotI2lmZGVmIFBsYW45Ci0jZGVmaW5lIFBPU0lY Ci0jZW5kaWYgLyogUGxhbjkgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIGFlZ2lz ICovCi0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLXR0Zmx1bygpIHsJCQkJLyogRmx1c2ggb3V0 cHV0IGJ1ZmZlciAqLwotICAgIGludCBmZDsKLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBl KQotICAgICAgZmQgPSBmZG91dDsKLSAgICBlbHNlCi0jZW5kaWYgLyogTkVUQ01EICovCi0gICAg ICBmZCA9IHR0eWZkOwotCi0jaWZkZWYgUGxhbjkKLSAgICByZXR1cm4gMDsKLSNlbHNlCi0jaWZk ZWYgUE9TSVgKLSAgICByZXR1cm4odGNmbHVzaChmZCxUQ09GTFVTSCkpOwotI2Vsc2UKLSNpZmRl ZiBPWE9TCi0gICAgcmV0dXJuKGlvY3RsKGZkLFRDRkxTSCwxKSk7Ci0jZWxzZQotICAgIHJldHVy bigwKTsJCQkJLyogQWxsIG90aGVycywgbm90aGluZyAqLwotI2VuZGlmIC8qIE9YT1MgKi8KLSNl bmRpZiAvKiBQT1NJWCAqLwotI2VuZGlmIC8qIFBsYW45ICovCi19Ci0KLS8qIEludGVycnVwdCBG dW5jdGlvbnMgKi8KLQotLyogU2V0IHVwIHRlcm1pbmFsIGludGVycnVwdHMgb24gY29uc29sZSB0 ZXJtaW5hbCAqLwotCi0jaWZuZGVmIEZJT05SRUFECQkJLyogV2UgZG9uJ3QgbmVlZCBlc2N0cnAo KSAqLwotI2lmbmRlZiBTRUxFQ1QJCQkJLyogaWYgd2UgaGF2ZSBhbnkgb2YgdGhlc2UuLi4gKi8K LSNpZm5kZWYgQ0tfUE9MTAotI2lmbmRlZiBSRENISwotCi0jaWZuZGVmIE9YT1MKLSNpZmRlZiBT Vk9SUE9TSVgKLVNJR1RZUAotZXNjdHJwKGZvbykgaW50IGZvbzsgewkJCS8qIHRyYXAgY29uc29s ZSBlc2NhcGVzICheXCkgKi8KLSAgICBzaWduYWwoU0lHUVVJVCxTSUdfSUdOKTsgICAgICAgICAg ICAvKiBpZ25vcmUgdW50aWwgdHJhcHBlZCAqLwotICAgIGNvbmVzYyA9IDE7Ci0gICAgZGVidWco RjEwMSwiZXNjdHJwIGNhdWdodCBTSUdRVUlUIiwiIixjb25lc2MpOwotfQotI2VuZGlmIC8qIFNW T1JQT1NJWCAqLwotI2VuZGlmIC8qIE9YT1MgKi8KLQotI2lmZGVmIFY3Ci0jaWZuZGVmIE1JTklY MgotU0lHVFlQCi1lc2N0cnAoZm9vKSBpbnQgZm9vOyB7CQkJLyogdHJhcCBjb25zb2xlIGVzY2Fw ZXMgKF5cKSAqLwotICAgIHNpZ25hbChTSUdRVUlULFNJR19JR04pOyAgICAgICAgICAgIC8qIGln bm9yZSB1bnRpbCB0cmFwcGVkICovCi0gICAgY29uZXNjID0gMTsKLSAgICBkZWJ1ZyhGMTAxLCJl c2N0cnAgY2F1Z2h0IFNJR1FVSVQiLCIiLGNvbmVzYyk7Ci19Ci0jZW5kaWYgLyogTUlOSVgyICov Ci0jZW5kaWYgLyogVjcgKi8KLQotI2lmZGVmIEM3MAotU0lHVFlQCi1lc2N0cnAoZm9vKSBpbnQg Zm9vOyB7CQkJLyogdHJhcCBjb25zb2xlIGVzY2FwZXMgKF5cKSAqLwotICAgIGNvbmVzYyA9IDE7 Ci0gICAgc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7ICAgICAgICAgICAgLyogaWdub3JlIHVudGls IHRyYXBwZWQgKi8KLX0KLSNlbmRpZiAvKiBDNzAgKi8KLQotI2VuZGlmIC8qIFJEQ0hLICovCi0j ZW5kaWYgLyogQ0tfUE9MTCAqLwotI2VuZGlmIC8qIFNFTEVDVCAqLwotI2VuZGlmIC8qIEZJT05S RUFEICovCi0KLS8qICBDIE8gTiBCIEcgVCAgLS0gIEJhY2tncm91bmQgVGVzdCAgKi8KLQotc3Rh dGljIGludCBqYyA9IDA7CQkJLyogMCA9IG5vIGpvYiBjb250cm9sICovCi0KLS8qCi0gIENhbGwg d2l0aCBmbGFnID09IDEgdG8gcHJldmVudCBzaWduYWwgdGVzdCwgd2hpY2ggY2FuIG5vdCBiZSBl eHBlY3RlZAotICB0byB3b3JrIGR1cmluZyBmaWxlIHRyYW5zZmVyLCB3aGVuIFNJR0lOVCBwcm9i YWJseSAqaXMqIHNldCB0byBTSUdfSUdOLgotCi0gIENhbGwgd2l0aCBmbGFnID09IDAgdG8gdXNl IHRoZSBzaWduYWwgdGVzdCwgYnV0IG9ubHkgaWYgdGhlIHByb2Nlc3MtZ3JvdXAKLSAgdGVzdCBm YWlscywgYXMgaXQgZG9lcyBvbiBzb21lIFVOSVggc3lzdGVtcywgd2hlcmUgZ2V0cGdycCgpIGlz IGJ1Z2d5LAotICByZXF1aXJlcyBhbiBhcmd1bWVudCB3aGVuIHRoZSBtYW4gcGFnZSBzYXlzIGl0 IGRvZXNuJ3QsIG9yIHZpY2UgdmVyc2EuCi0KLSAgSWYgZmxhZyA9PSAwIGFuZCB0aGUgcHJvY2Vz cy1ncm91cCB0ZXN0IGZhaWxzLCB0aGVuIHdlIGRldGVybWluZSBiYWNrZ3JvdW5kCi0gIHN0YXR1 cyBzaW1wbHkgKGJ1dCBub3QgbmVjZXNzYXJpbHkgcmVsaWFibHkpIGZyb20gaXNhdHR5KCkuCi0K LSAgY29uYmd0KCkgc2V0cyB0aGUgZ2xvYmFsIGJhY2tncmQgPSAxIGlmIHdlIGFwcGVhciB0byBi ZSBpbiB0aGUgYmFja2dyb3VuZCwKLSAgYW5kIHRvIDAgaWYgd2Ugc2VlbSB0byBiZSBpbiB0aGUg Zm9yZWdyb3VuZC4gIGNvbmJndCgpIGlzIGhpZ2hseSBwcm9uZSB0bwotICBtaXNiZWhhdmlvci4K LSovCi1WT0lECi1jb25iZ3QoZmxhZykgaW50IGZsYWc7IHsKLSAgICBpbnQgeCA9IC0xLAkJCQkv KiBwcm9jZXNzIGdyb3VwIG9yIFNJR0lOVCB0ZXN0ICovCi0gICAgICAgIHkgPSAwOwkJCQkvKiBp c2F0dHkoKSB0ZXN0ICovCi0vKgotICBDaGVjayBmb3IgYmFja2dyb3VuZCBvcGVyYXRpb24sIGV2 ZW4gaWYgbm90IHJ1bm5pbmcgb24gcmVhbCB0dHksIHNvIHRoYXQKLSAgYmFja2dyb3VuZCBmbGFn IGNhbiBiZSBzZXQgY29ycmVjdGx5LiAgSWYgYmFja2dyb3VuZCBzdGF0dXMgaXMgZGV0ZWN0ZWQs Ci0gIHRoZW4gS2VybWl0IHdpbGwgbm90IGlzc3VlIGl0cyBpbnRlcmFjdGl2ZSBwcm9tcHQgb3Ig bW9zdCBtZXNzYWdlcy4KLSAgSWYgeW91ciBwcm9tcHQgZ29lcyBhd2F5LCB5b3UgY2FuIGJsYW1l IChhbmQgZml4PykgdGhpcyBmdW5jdGlvbi4KLSovCi0KLS8qIFVzZSBwcm9jZXNzLWdyb3VwIHRl c3QgaWYgcG9zc2libGUuICovCi0KLSNpZmRlZiBQT1NJWAkJCQkvKiBXZSBjYW4gZG8gaXQgaW4g UE9TSVggKi8KLSNkZWZpbmUgUEdST1VQX1QKLSNlbHNlCi0jaWZkZWYgQlNENAkJCQkvKiBhbmQg aW4gQlNEIDQueC4gKi8KLSNkZWZpbmUgUEdST1VQX1QKLSNlbHNlCi0jaWZkZWYgSFBVWEpPQkNU TAkJCS8qIGFuZCBpbiBtb3N0IEhQLVVYJ3MgKi8KLSNkZWZpbmUgUEdST1VQX1QKLSNlbHNlCi0j aWZkZWYgVElPQ0dQR1JQCQkJLyogYW5kIGFueXBsYWNlIHRoYXQgaGFzIHRoaXMgaW9jdGwuICov Ci0jZGVmaW5lIFBHUk9VUF9UCi0jZW5kaWYgLyogVElPQ0dQR1JQICovCi0jZW5kaWYgLyogSFBV WEpPQkNUTCAqLwotI2VuZGlmIC8qIEJTRDQgKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwotCi0jaWZk ZWYgTUlQUwkJCQkvKiBFeGNlcHQgaWYgaXQgZG9lc24ndCB3b3JrLi4uICovCi0jdW5kZWYgUEdS T1VQX1QKLSNlbmRpZiAvKiBNSVBTICovCi0KLSNpZmRlZiBNSU5JWAotI3VuZGVmIFBHUk9VUF9U Ci0jZW5kaWYJLyogTUlOSVggKi8KLQotI2lmZGVmIFBHUk9VUF9UCi0vKgotICBTZW1pLXJlbGlh YmxlIHByb2Nlc3MtZ3JvdXAgdGVzdC4gIENoZWNrIHdoZXRoZXIgdGhpcyBwcm9jZXNzJ3MgZ3Jv dXAgaXMKLSAgdGhlIHNhbWUgYXMgdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsJ3MgcHJvY2VzcyBn cm91cC4gIFRoaXMgd29ya3MgaWYgdGhlCi0gIGdldHBncnAoKSBjYWxsIGRvZXNuJ3QgbGllIChh cyBpdCBkb2VzIGluIHRoZSBTVU5PUyBTeXN0ZW0gViBlbnZpcm9ubWVudCkuCi0qLwotICAgIFBJ RF9UIG15cGdycCA9IChQSURfVCkwOwkJLyogS2VybWl0J3MgcHJvY2VzcyBncm91cCAqLwotICAg IFBJRF9UIGN0cGdycCA9IChQSURfVCkwOwkJLyogVGhlIHRlcm1pbmFsJ3MgcHJvY2VzcyBncm91 cCAqLwotI2lmbmRlZiBfUE9TSVhfU09VUkNFCi0vKgotICBUaGUgZ2V0cGdycCgpIHByb3RvdHlw ZSBpcyBvYnRhaW5lZCBmcm9tIHN5c3RlbSBoZWFkZXIgZmlsZXMgZm9yIFBPU0lYCi0gIGFuZCBT eXMgViBSNCBjb21waWxhdGlvbnMuICBPdGhlciBzeXN0ZW1zLCB3aG8ga25vd3MuICBTb21lIGNv bXBsYWluIGFib3V0Ci0gIGEgZHVwbGljYXRlIGRlY2xhcmF0aW9uIGhlcmUsIG90aGVycyBkb24n dCwgc28gaXQncyBzYWZlciB0byBsZWF2ZSBpdCBpbgotICBpZiB3ZSBkb24ndCBrbm93IGZvciBj ZXJ0YWluLgotKi8KLSNpZm5kZWYgU1ZSNAotI2lmbmRlZiBQUzJBSVgxMAotI2lmbmRlZiBIUFVY OQotICAgIGV4dGVybiBQSURfVCBnZXRwZ3JwKCk7Ci0jZW5kaWYgLyogSFBVWDkgKi8KLSNlbmRp ZiAvKiBQUzJBSVgxMCAqLwotI2VuZGlmIC8qIFNWUjQgKi8KLSNlbmRpZiAvKiBfUE9TSVhfU09V UkNFICovCi0KLS8qIEdldCBteSBwcm9jZXNzIGdyb3VwLiAqLwotCi0jaWZkZWYgU1ZSMyAvKiBN YXliZSB0aGlzIHNob3VsZCBiZSBBVFRTVj8gKi8KLS8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IGRl c2NyaWJlZCBpbiBTVklEIFIyICovCi0gICAgbXlwZ3JwID0gZ2V0cGdycCgpOwotICAgIC8qIGRl YnVnKEYxMDEsIkFUVFNWIGNvbmJndCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50KSBteXBncnApOyAq LwotI2Vsc2UKLSNpZmRlZiBQT1NJWAotICAgIG15cGdycCA9IGdldHBncnAoKTsKLSAgICAvKiBk ZWJ1ZyhGMTAxLCJQT1NJWCBjb25iZ3QgcHJvY2VzcyBncm91cCIsIiIsKGludCkgbXlwZ3JwKTsg Ki8KLSNlbHNlCi0jaWZkZWYgT1NGUEMKLSAgICBteXBncnAgPSBnZXRwZ3JwKCk7Ci0gICAgLyog ZGVidWcoRjEwMSwiT1NGIGNvbmJndCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50KSBteXBncnApOyAq LwotI2Vsc2UKLSNpZmRlZiBRTlgKLSAgICBteXBncnAgPSBnZXRwZ3JwKCk7Ci0gICAgLyogZGVi dWcoRjEwMSwiUU5YIGNvbmJndCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50KSBteXBncnApOyAqLwot I2Vsc2UKLSNpZmRlZiBPU0YzMgkJCQkvKiAod2FzIE9TRjQwKSAqLwotICAgIG15cGdycCA9IGdl dHBncnAoKTsKLSAgICAvKiBkZWJ1ZyhGMTAxLCJEaWdpdGFsIFVOSVggY29uYmd0IHByb2Nlc3Mg Z3JvdXAiLCIiLChpbnQpIG15cGdycCk7ICovCi0jZWxzZSAvKiBCU0QsIFY3LCBldGMgKi8KLSNp ZmRlZiBNSU5JWDIKLSAgICBteXBncnAgPSBnZXRwZ3JwKCk7Ci0jZWxzZQotICAgIG15cGdycCA9 IGdldHBncnAoMCk7Ci0jZW5kaWYgLyogTUlOSVgyICovCi0gICAgLyogZGVidWcoRjEwMSwiQlNE IGNvbmJndCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50KSBteXBncnApOyAqLwotI2VuZGlmIC8qIE9T RjMyICovCi0jZW5kaWYgLyogUU5YICovCi0jZW5kaWYgLyogT1NGUEMgKi8KLSNlbmRpZiAvKiBQ T1NJWCAqLwotI2VuZGlmIC8qIFNWUjMgKi8KLQotI2lmZGVmIE1JTklYCi0gICAgLyogTUlOSVgg ZG9lcyBub3Qgc3VwcG9ydCBqb2IgY29udHJvbCBzbyBLZXJtaXQgaXMgYWx3YXlzIGluIGZvcmVn cm91bmQgKi8KLSAgICB4ID0gMDsKLQotI2Vsc2UgIC8qIE5vdCBNSU5JWCAqLwotCi0vKiBOb3cg Z2V0IGNvbnRyb2xsaW5nIHR0eSdzIHByb2Nlc3MgZ3JvdXAgKi8KLSNpZmRlZiBCU0Q0NE9SUE9T SVgKLSAgICBjdHBncnAgPSB0Y2dldHBncnAoMSk7CQkvKiBUaGUgUE9TSVggd2F5ICovCi0gICAg LyogZGVidWcoRjEwMSwiUE9TSVggY29uYmd0IHRlcm1pbmFsIHByb2Nlc3MgZ3JvdXAiLCIiLChp bnQpIGN0cGdycCk7ICovCi0jZWxzZQotICAgIGlvY3RsKDEsIFRJT0NHUEdSUCwgJmN0cGdycCk7 CS8qIE9yIHRoZSBCU0Qgd2F5ICovCi0gICAvKiBkZWJ1ZyhGMTAxLCJub24tUE9TSVggY29uYmd0 IHRlcm1pbmFsIHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIGN0cGdycCk7ICovCi0jZW5kaWYgLyog QlNENDRPUlBPU0lYICovCi0KLSAgICBpZiAoKG15cGdycCA+IChQSURfVCkgMCkgJiYgKGN0cGdy cCA+IChQSURfVCkgMCkpCi0gICAgICB4ID0gKG15cGdycCA9PSBjdHBncnApID8gMCA6IDE7CS8q IElmIHRoZXkgZGlmZmVyLCB0aGVuIGJhY2tncm91bmQuICovCi0gICAgZWxzZSB4ID0gLTE7CQkJ LyogSWYgZXJyb3IsIHJlbWVtYmVyLiAqLwotICAgIGRlYnVnKEYxMDEsImNvbmJndCBwcm9jZXNz IGdyb3VwIHRlc3QiLCIiLHgpOwotI2VuZGlmIC8qIFBHUk9VUF9UICovCi0jZW5kaWYJLyogTUlO SVggKi8KLQotLyogVHJ5IHRvIHNlZSBpZiBqb2IgY29udHJvbCBpcyBhdmFpbGFibGUgKi8KLQot I2lmZGVmIE5PSkMJCQkJLyogVXNlciBvdmVycmlkZSAqLwotICAgIGpjID0gMDsJCQkJLyogTm8g am9iIGNvbnRyb2wgYWxsb3dlZCAqLwotICAgIGRlYnVnKEYxMTEsIk5PSkMiLCJqYyIsamMpOwot I2Vsc2UKLSNpZmRlZiBCU0Q0NAotICAgIGpjID0gMTsKLSNlbHNlCi0jaWZkZWYgU1ZSNE9SUE9T SVgJCQkvKiBQT1NJWCBhY3R1YWxseSB0ZWxscyB1cyAqLwotICAgIGRlYnVnKEYxMDAsIlNWUjRP UlBPU0lYIGpjIHRlc3QuLi4iLCIiLDApOwotI2lmZGVmIF9TQ19KT0JfQ09OVFJPTAotI2lmZGVm IF9fYnNkaV9fCi0gICAgamMgPSAxOwotI2Vsc2UKLSNpZmRlZiBfXzM4NkJTRF9fCi0gICAgamMg PSAxOwotI2Vsc2UKLSAgICBqYyA9IHN5c2NvbmYoX1NDX0pPQl9DT05UUk9MKTsJLyogV2hhdGV2 ZXIgc3lzdGVtIHNheXMgKi8KLSAgICBpZiAoamMgPCAwKSB7Ci0JZGVidWcoRjEwMSwic3lzY29u ZiBmYWlscywgamNzaGVsbCIsIiIsamNzaGVsbCk7Ci0JamMgPSAoamNoZGxyID09IFNJR19ERkwp ID8gMSA6IDA7Ci0gICAgfSBlbHNlCi0gICAgICBkZWJ1ZyhGMTExLCJzeXNjb25mKF9TQ19KT0Jf Q09OVFJPTCkiLCJqYyIsamMpOwotI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KLSNlbmRpZiAvKiBf X2JzZGlfXyAqLwotI2Vsc2UKLSNpZmRlZiBfUE9TSVhfSk9CX0NPTlRST0wKLSAgICBqYyA9IDE7 CQkJCS8qIEJ5IGRlZmluaXRpb24gKi8KLSAgICBkZWJ1ZyhGMTExLCJfUE9TSVhfSk9CX0NPTlRS T0wgaXMgZGVmaW5lZCIsImpjIixqYyk7Ci0jZWxzZQotICAgIGpjID0gMDsJCQkJLyogQXNzdW1l IGpvYiBjb250cm9sIG5vdCBhbGxvd2VkICovCi0gICAgZGVidWcoRjExMSwiU1ZSNE9SUE9TSVgg X1NDL1BPU0lYX0pPQl9DT05UUk9MIG5vdCBkZWZpbmVkIiwiamMiLGpjKTsKLSNlbmRpZiAvKiBf UE9TSVhfSk9CX0NPTlRST0wgKi8KLSNlbmRpZiAvKiBfU0NfSk9CX0NPTlRST0wgKi8KLSNlbHNl Ci0jaWZkZWYgQlNENAotICAgIGpjID0gMTsJCQkJLyogSm9iIGNvbnRyb2wgYWxsb3dlZCAqLwot ICAgIGRlYnVnKEYxMTEsIkJTRCBqb2IgY29udHJvbCIsImpjIixqYyk7Ci0jZWxzZQotI2lmZGVm IFNWUjNKQwotICAgIGpjID0gMTsJCQkJLyogSkMgYWxsb3dlZCAqLwotICAgIGRlYnVnKEYxMTEs IlNWUjMgam9iIGNvbnRyb2wiLCJqYyIsamMpOwotI2Vsc2UKLSNpZmRlZiBPWE9TCi0gICAgamMg PSAxOwkJCQkvKiBKQyBhbGxvd2VkICovCi0gICAgZGVidWcoRjExMSwiWC9PUyBqb2IgY29udHJv bCIsImpjIixqYyk7Ci0jZWxzZQotI2lmZGVmIEhQVVg5Ci0gICAgamMgPSAxOwkJCQkvKiBKQyBh bGxvd2VkICovCi0gICAgZGVidWcoRjExMSwiSFAtVVggOS4wIGpvYiBjb250cm9sIiwiamMiLGpj KTsKLSNlbHNlCi0jaWZkZWYgSFBVWDEwCi0gICAgamMgPSAxOwkJCQkvKiBKQyBhbGxvd2VkICov Ci0gICAgZGVidWcoRjExMSwiSFAtVVggMTAuMCBqb2IgY29udHJvbCIsImpjIixqYyk7Ci0jZWxz ZQotICAgIGpjID0gMDsJCQkJLyogSkMgbm90IGFsbG93ZWQgKi8KLSAgICBkZWJ1ZyhGMTExLCJq b2IgY29udHJvbCBjYXRjaC1hbGwiLCJqYyIsamMpOwotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2Vu ZGlmIC8qIEhQVVg5ICovCi0jZW5kaWYgLyogT1hPUyAqLwotI2VuZGlmIC8qIFNWUjNKQyAqLwot I2VuZGlmIC8qIEJTRDQgKi8KLSNlbmRpZiAvKiBTVlI0T1JQT1NJWCAqLwotI2VuZGlmIC8qIEJT RDQ0ICovCi0jZW5kaWYgLyogTk9KQyAqLwotICAgIGRlYnVnKEYxMDEsImNvbmJndCBqYyIsIiIs amMpOwotI2lmbmRlZiBOT0pDCi0gICAgZGVidWcoRjEwMSwiY29uYmd0IGpjc2hlbGwiLCIiLGpj c2hlbGwpOwotLyoKLSAgQXQgdGhpcyBwb2ludCwgaWYgamMgPT0gMSBidXQgamNzaGVsbCA9PSAw LCBpdCBtZWFucyB0aGF0IHRoZSBPUyBzdXBwb3J0cwotICBqb2IgY29udHJvbCwgYnV0IHRoZSBz aGVsbCBvciBvdGhlciBwcm9jZXNzIHdlIGFyZSBydW5uaW5nIHVuZGVyIGRvZXMgbm90Ci0gIChq Y3NoZWxsIGlzIHNldCBpbiBzeXNpbml0KCkpIGFuZCBzbyBpZiB3ZSBzdXNwZW5kIG91cnNlbHZl cywgbm90aGluZyBnb29kCi0gIHdpbGwgY29tZSBvZiBpdC4gIFNvLi4uCi0qLwotICAgIGlmIChq YyA8IDApIGpjID0gMDsKLSAgICBpZiAoamMgPiAwICYmIGpjc2hlbGwgPT0gMCkgamMgPSAwOwot I2VuZGlmIC8qIE5PSkMgKi8KLQotLyoKLSAgQW5vdGhlciBiYWNrZ3JvdW5kIHRlc3QuCi0gIFRl c3QgaWYgU0lHSU5UICh0ZXJtaW5hbCBpbnRlcnJ1cHQpIGlzIHNldCB0byBTSUdfSUdOIChpZ25v cmUpLAotICB3aGljaCBpcyBkb25lIGJ5IHRoZSBzaGVsbCAoc2gpIGlmIHRoZSBwcm9ncmFtIGlz IHN0YXJ0ZWQgd2l0aCAnJicuCi0gIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgTk9UIGRvbmUgYnkg Y3NoIG9yIGtzaCBzbyB3YXRjaCBvdXQhCi0gIE5vdGUsIGl0J3Mgc2FmZSB0byBzZXQgU0lHSU5U IHRvIFNJR19JR04gaGVyZSwgYmVjYXVzZSBmdXJ0aGVyIGRvd24KLSAgd2UgYWx3YXlzIHNldCBp dCB0byBzb21ldGhpbmcgZWxzZS4KLSAgTm90ZTogYXMgb2YgMTYgSnVsIDE5OTksIHdlIGFsc28g c2tpcCB0aGlzIHRlc3QgaWYgd2Ugc2V0IFNJR0lOVCB0bwotICBTSUdfSUdOIG91cnNlbHZlcy4K LSovCi0gICAgaWYgKHggPCAwICYmICFmbGFnICYmICFzaWdpbnRfaWduKSB7IC8qIERpZG4ndCBn ZXQgZ29vZCByZXN1bHRzIGFib3ZlLi4uICovCi0KLQlTSUdUWVAgKCpvc2lnaW50KSgpOwotCi0J b3NpZ2ludCA9IHNpZ25hbChTSUdJTlQsU0lHX0lHTik7CS8qIFdoYXQgaXMgU0lHSU5UIHNldCB0 bz8gKi8KLQlzaWdpbnRfaWduID0gMTsKLQl4ID0gKG9zaWdpbnQgPT0gU0lHX0lHTikgPyAxIDog MDsJLyogU0lHX0lHTj8gKi8KLQkvKiBkZWJ1ZyhGMTAxLCJjb25iZ3Qgb3NpZ2ludCIsIiIsb3Np Z2ludCk7ICovCi0JLyogZGVidWcoRjEwMSwiY29uYmd0IHNpZ25hbCB0ZXN0IiwiIix4KTsgKi8K LSAgICB9Ci0KLS8qIEFsc28gY2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHJ1bm5pbmcgd2l0aCByZWRp cmVjdGVkIHN0ZGlvLiAqLwotLyogVGhpcyBpcyBub3QgcmVhbGx5IGJhY2tncm91bmQgb3BlcmF0 aW9uLCBidXQgd2Ugd2FudCB0byBhY3QgYXMgdGhvdWdoICovCi0vKiBpdCB3ZXJlLiAqLwotCi0j aWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikgewkJCS8qIEludGVybmV0IEtlcm1pdCBTZXJ2 ZXIgKi8KLQliYWNrZ3JkID0gMDsJCQkvKiBpcyBub3QgaW4gdGhlIGJhY2tncm91bmQgKi8KLQly ZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotICAgIHkgPSAoaXNhdHR5KDApICYm IGlzYXR0eSgxKSkgPyAxIDogMDsKLSAgICBkZWJ1ZyhGMTAxLCJjb25iZ3QgaXNhdHR5IHRlc3Qi LCIiLHkpOwotCi0jaWZkZWYgQlNEMjkKLS8qIFRoZSBwcm9jZXNzIGdyb3VwIGFuZC9vciBzaWdu YWwgdGVzdCBkb2Vzbid0IHdvcmsgdW5kZXIgdGhlc2UuLi4gKi8KLSAgICBiYWNrZ3JkID0gIXk7 Ci0jZWxzZQotI2lmZGVmIHN4YUU1MAotICAgIGJhY2tncmQgPSAheTsKLSNlbHNlCi0jaWZkZWYg TUlOSVgKLSAgICBiYWNrZ3JkID0gIXk7Ci0jZWxzZQotI2lmZGVmIE1JTklYMgotICAgIGJhY2tn cmQgPSAheTsKLSNlbHNlCi0gICAgaWYgKHggPiAtMSkKLSAgICAgIGJhY2tncmQgPSAoeCB8fCAh eSkgPyAxIDogMDsKLSAgICBlbHNlIGJhY2tncmQgPSAheTsKLSNlbmRpZiAvKiBCU0QyOSAqLwot I2VuZGlmIC8qIHN4YUU1MCAqLwotI2VuZGlmIC8qIE1JTklYICovCi0jZW5kaWYgLyogTUlOSVgy ICovCi0gICAgZGVidWcoRjEwMSwiY29uYmd0IGJhY2tncmQiLCIiLGJhY2tncmQpOwotfQotCi0v KiAgQyBPIE4gSSBOIFQgIC0tICBDb25zb2xlIEludGVycnVwdCBzZXR0ZXIgICovCi0KLS8qCi0g IEZpcnN0IGFyZyBpcyBwb2ludGVyIHRvIGZ1bmN0aW9uIHRvIGhhbmRsZSBTSUdURVJNICYgU0lH SU5UIChsaWtlIEN0cmwtQykuCi0gIFNlY29uZCBhcmcgaXMgcG9pbnRlciB0byBmdW5jdGlvbiB0 byBoYW5kbGUgU0lHVFNUUCAoc3VzcGVuZCkuCi0qLwotCi1WT0lECQkJCQkvKiBTZXQgdGVybWlu YWwgaW50ZXJydXB0IHRyYXBzLiAqLwotI2lmZGVmIENLX0FOU0lDCi0jaWZkZWYgYXBvbGxvCi1j b25pbnQoZixzKSBTSUdUWVAgKCpmKSgpLCAoKnMpKCk7Ci0jZWxzZQotY29uaW50KFNJR1RZUCAo KmYpKGludCksIFNJR1RZUCAoKnMpKGludCkpCi0jZW5kaWYgLyogYXBvbGxvICovCi0jZWxzZQot Y29uaW50KGYscykgU0lHVFlQICgqZikoKSwgKCpzKSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0vKiBjb25pbnQgKi8gewotCi0gICAgZGVidWcoRjEwMSwiY29uaW50IGNvbmlzdGF0ZSIsIiIs Y29uaXN0YXRlKTsKLQotICAgIGNvbmJndCgwKTsJCQkJLyogRG8gYmFja2dyb3VuZCB0ZXN0LiAq LwotCi0vKiBTZXQgdGhlIGRlc2lyZWQgaGFuZGxlcnMgZm9yIGhhbmd1cCBhbmQgc29mdHdhcmUg dGVybWluYXRpb24uICovCi0KLSNpZmRlZiBTSUdURVJNCi0gICAgc2lnbmFsKFNJR1RFUk0sZik7 ICAgICAgICAgICAgICAgICAgLyogU29mdHdhcmUgdGVybWluYXRpb24gKi8KLSNlbmRpZiAvKiBT SUdURVJNICovCi0KLS8qCi0gIFByaW9yIHRvIEp1bHkgMTk5OSB3ZSB1c2VkIHRvIGNhbGwgc2ln aHVwKCkgaGVyZSBidXQgbm93IGl0J3MgY2FsbGVkIGluCi0gIHN5c2luaXQoKSBzbyBTSUdIVVAg Y2FuIGJlIGNhdWdodCBkdXJpbmcgZXhlY3V0aW9uIG9mIHRoZSBpbml0IGZpbGUgb3IKLSAgYSBr ZXJiYW5nIHNjcmlwdC4KLSovCi0KLS8qIE5vdyBoYW5kbGUga2V5Ym9hcmQgc3RvcCwgcXVpdCwg YW5kIGludGVycnVwdCBzaWduYWxzLiAqLwotLyogQ2hlY2sgaWYgaW52b2tlZCBpbiBiYWNrZ3Jv dW5kIC0tIGlmIHNvIHNpZ25hbHMgc2V0IHRvIGJlIGlnbm9yZWQuICovCi0vKiBIb3dldmVyLCBp ZiBydW5uaW5nIHVuZGVyIGEgam9iIGNvbnRyb2wgc2hlbGwsIGRvbid0IGlnbm9yZSB0aGVtLiAq LwotLyogV2Ugd29uJ3QgYmUgZ2V0dGluZyBhbnksIGFzIHdlIGFyZW4ndCBpbiB0aGUgdGVybWlu YWwncyBwcm9jZXNzIGdyb3VwLiAqLwotCi0gICAgZGVidWcoRjEwMSwiY29uaW50IGJhY2tncmQi LCIiLGJhY2tncmQpOwotICAgIGRlYnVnKEYxMDEsImNvbmludCBqYyIsIiIsamMpOwotCi0gICAg aWYgKGJhY2tncmQgJiYgIWpjKSB7CQkvKiBJbiBiYWNrZ3JvdW5kLCBpZ25vcmUgc2lnbmFscyAq LwotCWRlYnVnKEYxMDEsImNvbmludCBiYWNrZ3JvdW5kIGlnbm9yaW5nIHNpZ25hbHMsIGpjIiwi IixqYyk7Ci0jaWZkZWYgU0lHVFNUUAotICAgICAgICBzaWduYWwoU0lHVFNUUCxTSUdfSUdOKTsg ICAgICAgIC8qIEtleWJvYXJkIHN0b3AgKi8KLSNlbmRpZiAvKiBTSUdUU1RQICovCi0gICAgICAg IHNpZ25hbChTSUdRVUlULFNJR19JR04pOyAgICAgICAgLyogS2V5Ym9hcmQgcXVpdCAqLwotICAg ICAgICBzaWduYWwoU0lHSU5ULFNJR19JR04pOyAgICAgICAgIC8qIEtleWJvYXJkIGludGVycnVw dCAqLwotCXNpZ2ludF9pZ24gPSAxOwotCWNvbmlzdGF0ZSA9IENPTklfTk9JOwotICAgIH0gZWxz ZSB7CQkJCS8qIEVsc2UgaW4gZm9yZWdyb3VuZCBvciBzdXNwZW5kZWQgKi8KLQlkZWJ1ZyhGMTAx LCJjb25pbnQgZm9yZWdyb3VuZCBjYXRjaGluZyBzaWduYWxzLCBqYyIsIiIsamMpOwotICAgICAg ICBzaWduYWwoU0lHSU5ULGYpOyAgICAgICAgICAgICAgIC8qIENhdGNoIHRlcm1pbmFsIGludGVy cnVwdCAqLwotCXNpZ2ludF9pZ24gPSAoZiA9PSBTSUdfSUdOKSA/IDEgOiAwOwotCi0jaWZkZWYg U0lHVFNUUAkJCQkvKiBLZXlib2FyZCBzdG9wIChzdXNwZW5kKSAqLwotCS8qIGRlYnVnKEYxMDEs ImNvbmludCBTSUdTVFNUUCIsIiIscyk7ICovCi0JaWYgKHMgPT0gTlVMTCkgcyA9IFNJR19ERkw7 Ci0jaWZkZWYgTk9KQwkJCQkvKiBObyBqb2IgY29udHJvbCBhbGxvd2VkLiAqLwotCXNpZ25hbChT SUdUU1RQLFNJR19JR04pOwotI2Vsc2UJCQkJCS8qIEpvYiBjb250cm9sIGFsbG93ZWQgKi8KLQlp ZiAoamMpCQkJCS8qIGlmIGF2YWlsYWJsZS4gKi8KLQkgIHNpZ25hbChTSUdUU1RQLHMpOwotCWVs c2UKLQkgIHNpZ25hbChTSUdUU1RQLFNJR19JR04pOwotI2VuZGlmIC8qIE5PSkMgKi8KLSNlbmRp ZiAvKiBTSUdUU1RQICovCi0KLSNpZm5kZWYgT1hPUwotI2lmZGVmIFNWT1JQT1NJWAotI2lmbmRl ZiBGSU9OUkVBRAkJCS8qIFdhdGNoIG91dCwgd2UgZG9uJ3Qga25vdyB0aGlzLi4uICovCi0jaWZu ZGVmIFNFTEVDVAotI2lmbmRlZiBDS19QT0xMCi0jaWZuZGVmIFJEQ0hLCi0gICAgICAgIHNpZ25h bChTSUdRVUlULGVzY3RycCk7ICAgICAgICAgLyogUXVpdCBzaWduYWwsIFN5cyBJSUkvVi4gKi8K LSNlbmRpZiAvKiBSRENISyAqLwotI2VuZGlmIC8qIENLX1BPTEwgKi8KLSNlbmRpZiAvKiBTRUxF Q1QgKi8KLSNlbmRpZiAvKiBGSU9OUkVBRCAqLwotICAgICAgICBpZiAoY29uZXNjKSBjb25lc2Mg PSAwOyAgICAgICAgIC8qIENsZWFyIG91dCBwZW5kaW5nIGVzY2FwZXMgKi8KLSNlbHNlCi0jaWZk ZWYgVjcKLSAgICAgICAgc2lnbmFsKFNJR1FVSVQsZXNjdHJwKTsgICAgICAgICAvKiBWNyBsaWtl IFN5cyBJSUkvViAqLwotICAgICAgICBpZiAoY29uZXNjKSBjb25lc2MgPSAwOwotI2Vsc2UKLSNp ZmRlZiBhZWdpcwotICAgICAgICBzaWduYWwoU0lHUVVJVCxmKTsgICAgICAgICAgICAgIC8qIEFw b2xsbywgY2F0Y2ggaXQgbGlrZSBvdGhlcnMuICovCi0jZWxzZQotICAgICAgICBzaWduYWwoU0lH UVVJVCxTSUdfSUdOKTsgICAgICAgIC8qIE90aGVycywgaWdub3JlIGxpa2UgNEQgJiBlYXJsaWVy LiAqLwotI2VuZGlmIC8qIGFlZ2lzICovCi0jZW5kaWYgLyogVjcgKi8KLSNlbmRpZiAvKiBTVk9S UE9TSVggKi8KLSNlbmRpZiAvKiBPWE9TICovCi0JY29uaXN0YXRlID0gQ09OSV9JTlQ7Ci0gICAg fQotfQotCi0KLS8qICBDIE8gTiBOIE8gSSAgLS0gIFJlc2V0IGNvbnNvbGUgdGVybWluYWwgaW50 ZXJydXB0cyAqLwotCi1WT0lECi1jb25ub2koKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ29uc29sZS1uby1pbnRlcnJ1cHRzICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJjb25ub2kg Y29uaXN0YXRlIiwiIixjb25pc3RhdGUpOwotI2lmZGVmIFNJR1RTVFAKLSAgICBzaWduYWwoU0lH VFNUUCxTSUdfSUdOKTsJCS8qIFN1c3BlbmQgKi8KLSNlbmRpZiAvKiBTSUdUU1RQICovCi0gICAg Y29uaW50KFNJR19JR04sU0lHX0lHTik7CQkvKiBJbnRlcnJ1cHQgKi8KLSAgICBzaWdpbnRfaWdu ID0gMTsJCQkvKiBSZW1lbWJlciB3ZSBkaWQgdGhpcyBvdXJzZWx2ZXMgKi8KLSNpZmRlZiBTSUdR VUlUCi0gICAgc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7CQkvKiBRdWl0ICovCi0jZW5kaWYgLyog U0lHUVVJVCAqLwotI2lmZGVmIFNJR1RFUk0KLSAgICBzaWduYWwoU0lHVEVSTSxTSUdfSUdOKTsJ CS8qIFRlcm0gKi8KLSNlbmRpZiAvKiBTSUdURVJNICovCi0gICAgY29uaXN0YXRlID0gQ09OSV9O T0k7Ci19Ci0KLS8qICBJIE4gSSBUIFIgQSBXIFEgIC0tICBTZXQgdXAgdG8gcmVhZCAvZGV2L2tt ZW0gZm9yIGNoYXJhY3RlciBjb3VudC4gICovCi0KLSNpZmRlZiAgVjcKLS8qCi0gVXNlZCBpbiBW ZXJzaW9uIDcgdG8gc2ltdWxhdGUgQmVya2VsZXkncyBGSU9OUkVBRCBpb2N0bCBjYWxsLiAgVGhp cwotIGVsaW1pbmF0ZXMgYmxvY2tpbmcgb24gYSByZWFkLCBiZWNhdXNlIHdlIGNhbiByZWFkIC9k ZXYva21lbSB0byBnZXQgdGhlCi0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYXZhaWxhYmxlIGZvciBy YXcgaW5wdXQuICBJZiB5b3VyIHN5c3RlbSBjYW4ndAotIG9yIHlvdSB3b24ndCBsZXQgdGhlIHdv cmxkIHJlYWQgL2Rldi9rbWVtIHRoZW4geW91IG11c3QgZmlndXJlIG91dCBhCi0gZGlmZmVyZW50 IHdheSB0byBkbyB0aGUgY291bnRpbmcgb2YgY2hhcmFjdGVycyBhdmFpbGFibGUsIG9yIGVsc2Ug cmVwbGFjZQotIHRoaXMgYnkgYSBkdW1teSBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm5zIDAu Ci0qLwotLyoKLSAqIENhbGwgdGhpcyByb3V0aW5lIGFzOiBpbml0cmF3cSh0dHkpCi0gKiB3aGVy ZSB0dHkgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiBhIHRlcm1pbmFsLiAgSXQgd2lsbCByZXR1 cm4KLSAqIChhcyBhIGNoYXIgKikgdGhlIGtlcm5lbC1tb2RlIG1lbW9yeSBhZGRyZXNzIG9mIHRo ZSByYXdxIGNoYXJhY3RlcgotICogY291bnQsIHdoaWNoIG1heSB0aGVuIGJlIHJlYWQuICBJdCBo YXMgdGhlIHNpZGUtZWZmZWN0IG9mIGZsdXNoaW5nCi0gKiBpbnB1dCBvbiB0aGUgdGVybWluYWwu Ci0gKi8KLS8qCi0gKiBKb2huIE1hY2tpbiwgUGh5c2lvbG9neSBEZXB0LiwgVW5pdmVyc2l0eSBv ZiBTeWRuZXkgKEF1c3RyYWxpYSkKLSAqIC4uLiFkZWN2YXghbXVsZ2EhcGh5c2lvbC5zdS5veiFq b2huCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBkbyBhbnl0aGluZyB3 aXRoIHRoaXMgY29kZSwgYXMKLSAqIGxvbmcgYXMgdGhpcyBjb21tZW50IGlzIHJldGFpbmVkIHVu bW9kaWZpZWQgYW5kIG5vIGNvbW1lcmNpYWwKLSAqIGFkdmFudGFnZSBpcyBnYWluZWQuCi0gKi8K LSNpZm5kZWYgTUlOSVgKLSNpZm5kZWYgTUlOSVgyCi0jaWZuZGVmIENPSEVSRU5UCi0jaW5jbHVk ZSA8YS5vdXQuaD4KLSNpbmNsdWRlIDxzeXMvcHJvYy5oPgotI2VuZGlmIC8qIENPSEVSRU5UICov Ci0jZW5kaWYgLyogTUlOSVgyICovCi0jZW5kaWYgLyogTUlOSVggKi8KLQotI2lmZGVmIENPSEVS RU5UCi0jaW5jbHVkZSA8bC5vdXQuaD4KLSNpbmNsdWRlIDxzeXMvcHJvYy5oPgotI2VuZGlmIC8q IENPSEVSRU5UICovCi0KLWNoYXIgKgotaW5pdHJhd3EodHR5KSBpbnQgdHR5OyB7Ci0jaWZkZWYg TUlOSVgKLSAgICByZXR1cm4oMCk7Ci0jZWxzZQotI2lmZGVmIE1JTklYMgotICAgIHJldHVybigw KTsKLSNlbHNlCi0jaWZkZWYgVVRTMjQKLSAgICByZXR1cm4oMCk7Ci0jZWxzZQotI2lmZGVmIEJT RDI5Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSAgICBsb25nIGxzZWVrKCk7Ci0gICAgc3RhdGlj IHN0cnVjdCBubGlzdCBubFtdID0gewotICAgICAgICB7UFJPQ05BTUV9LAotICAgICAgICB7TlBS T0NOQU1FfSwKLSAgICAgICAgeyIifQotICAgIH07Ci0gICAgc3RhdGljIHN0cnVjdCBwcm9jICpw cDsKLSAgICBjaGFyICpxYWRkciwgKnAsIGM7Ci0gICAgaW50IG07Ci0gICAgUElEX1QgcGlkLCBt ZTsKLSAgICBOUFRZUEUgeHByb2M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJdHMgdHlwZSBp cyBkZWZpbmVkIGluIG1ha2VmaWxlLiAqLwotICAgIGludCBjYXRjaCgpOwotCi0gICAgbWUgPSBn ZXRwaWQoKTsKLSAgICBpZiAoKG0gPSBvcGVuKCIvZGV2L2ttZW0iLCAwKSkgPCAwKSBlcnIoImtt ZW0iKTsKLSAgICBubGlzdChCT09UTkFNRSwgbmwpOwotICAgIGlmIChubFswXS5uX3R5cGUgPT0g MCkgZXJyKCJwcm9jIGFycmF5Iik7Ci0KLSAgICBpZiAobmxbMV0ubl90eXBlID09IDApIGVycigi bnByb2MiKTsKLQotICAgIGxzZWVrKG0sIChsb25nKShubFsxXS5uX3ZhbHVlKSwgMCk7Ci0gICAg cmVhZCAobSwgJnhwcm9jLCBzaXplb2YoeHByb2MpKTsKLSAgICBzYXZhbCA9IHNpZ25hbChTSUdB TFJNLCBjYXRjaCk7Ci0gICAgaWYgKChwaWQgPSBmb3JrKCkpID09IDApIHsKLSAgICAgICAgd2hp bGUoMSkKLSAgICAgICAgICAgIHJlYWQodHR5LCAmYywgMSk7Ci0gICAgfQotICAgIGFsYXJtKDIp OwotCi0gICAgaWYoc2V0am1wKGpqYnVmKSA9PSAwKSB7Ci0gICAgICAgIHdoaWxlKDEpCi0JICBy ZWFkKHR0eSwgJmMsIDEpOwotICAgIH0KLSAgICBzaWduYWwoU0lHQUxSTSwgU0lHX0RGTCk7Ci0K LSNpZmRlZiBESVJFQ1QKLSAgICBwcCA9IChzdHJ1Y3QgcHJvYyAqKSBubFswXS5uX3ZhbHVlOwot I2Vsc2UKLSAgICBpZiAobHNlZWsobSwgKGxvbmcpKG5sWzBdLm5fdmFsdWUpLCAwKSA8IDBMKSBl cnIoInNlZWsiKTsKLSAgICBpZiAocmVhZChtLCAmcHAsIHNpemVvZihwcCkpICE9IHNpemVvZihw cCkpICBlcnIoIm5vIHJlYWQgb2YgcHJvYyBwdHIiKTsKLSNlbmRpZgotICAgIGxzZWVrKG0sIChs b25nKShubFsxXS5uX3ZhbHVlKSwgMCk7Ci0gICAgcmVhZChtLCAmeHByb2MsIHNpemVvZih4cHJv YykpOwotCi0gICAgaWYgKGxzZWVrKG0sIChsb25nKXBwLCAwKSA8IDBMKSBlcnIoIkNhbid0IHNl ZWsgdG8gcHJvYyIpOwotICAgIGlmICgocCA9IG1hbGxvYyh4cHJvYyAqIHNpemVvZihzdHJ1Y3Qg cHJvYykpKSA9PSBOVUxMKSBlcnIoIm1hbGxvYyIpOwotICAgIGlmIChyZWFkKG0scCx4cHJvYyAq IHNpemVvZihzdHJ1Y3QgcHJvYykpICE9IHhwcm9jKnNpemVvZihzdHJ1Y3QgcHJvYykpCi0gICAg ICAgIGVycigicmVhZCBwcm9jIHRhYmxlIik7Ci0gICAgZm9yIChwcCA9IChzdHJ1Y3QgcHJvYyAq KXA7IHhwcm9jID4gMDsgLS14cHJvYywgKytwcCkgewotICAgICAgICBpZiAocHAgLT4gcF9waWQg PT0gKHNob3J0KSBwaWQpIGdvdG8gaW91dDsKLSAgICB9Ci0gICAgZXJyKCJubyBzdWNoIHByb2Mi KTsKLQotaW91dDoKLSAgICBjbG9zZShtKTsKLSAgICBxYWRkciA9IChjaGFyICopKHBwIC0+IHBf d2NoYW4pOwotICAgIGZyZWUgKHApOwotICAgIGtpbGwocGlkLCBTSUdLSUxMKTsKLSAgICB3YWl0 KChXQUlUX1QgKikwKTsKLSAgICByZXR1cm4gKHFhZGRyKTsKLSNlbmRpZgotI2VuZGlmCi0jZW5k aWYKLSNlbmRpZgotfQotCi0vKiAgTW9yZSBWNy1zdXBwb3J0IGZ1bmN0aW9ucy4uLiAgKi8KLQot c3RhdGljIFZPSUQKLWVycihzKSBjaGFyICpzOyB7Ci0gICAgY2hhciBidWZbMjAwXTsKLQotICAg IGNrbWFrbXNnKGJ1ZiwyMDAsImZhdGFsIGVycm9yIGluIGluaXRyYXdxOiAiLCBzLCBOVUxMLCBO VUxMKTsKLSAgICBwZXJyb3IoYnVmKTsKLSAgICBkb2V4aXQoMSwtMSk7Ci19Ci0KLXN0YXRpYyBW T0lECi1jYXRjaChmb28pIGludCBmb287IHsKLSAgICBsb25nam1wKGpqYnVmLCAtMSk7Ci19Ci0K LQotLyogIEcgRSBOIEIgUiBLICAtLSAgU2ltdWxhdGUgYSBtb2RlbSBicmVhay4gICovCi0KLSNp ZmRlZiBNSU5JWAotI2RlZmluZSBCU1BFRUQgQjExMAotI2Vsc2UKLSNpZmRlZiBNSU5JWDIKLSNk ZWZpbmUgQlNQRUVEIEIxMTAKLSNlbHNlCi0jZGVmaW5lIEJTUEVFRCBCMTUwCi0jZW5kaWYgLyog TUlOSVgyICovCi0jZW5kaWYgLyogTUlOSVggKi8KLQotI2lmbmRlZiBNSU5JWDIKLVZPSUQKLWdl bmJyayhmbixtc2VjKSBpbnQgZm4sIG1zZWM7IHsKLSAgICBzdHJ1Y3Qgc2d0dHliIHR0YnVmOwot ICAgIGludCByZXQsIHNvc3BlZWQsIHgsIHk7Ci0KLSAgICByZXQgPSBpb2N0bChmbiwgVElPQ0dF VFAsICZ0dGJ1Zik7Ci0gICAgc29zcGVlZCA9IHR0YnVmLnNnX29zcGVlZDsKLSAgICB0dGJ1Zi5z Z19vc3BlZWQgPSBCU1BFRUQ7Ci0gICAgcmV0ID0gaW9jdGwoZm4sIFRJT0NTRVRQLCAmdHRidWYp OwotICAgIHkgPSAoaW50KXN0cmxlbihicm51bHMpOwotICAgIHggPSAoIEJTUEVFRCAqIDEwMCAp IC8gbXNlYzsKLSAgICBpZiAoeCA+IHkpIHggPSB5OwotICAgIHJldCA9IHdyaXRlKGZuLCBicm51 bHMsICgoIEJTUEVFRCAqIDEwMCApIC8gbXNlYyApKTsKLSAgICB0dGJ1Zi5zZ19vc3BlZWQgPSBz b3NwZWVkOwotICAgIHJldCA9IGlvY3RsKGZuLCBUSU9DU0VUUCwgJnR0YnVmKTsKLSAgICByZXQg PSB3cml0ZShmbiwgIkAiLCAxKTsKLSAgICByZXR1cm47Ci19Ci0jZW5kaWYgLyogTUlOSVgyICov Ci0KLSNpZmRlZiBNSU5JWDIKLWludAotZ2VuYnJrKGZuLG1zZWMpIGludCBmbiwgbXNlYzsgewot ICAgIHN0cnVjdCB0ZXJtaW9zIHR0YnVmOwotICAgIGludCByZXQsIHgsIHk7Ci0gICAgc3BlZWRf dCBzb3NwZWVkOwotCi0gICAgcmV0ID0gdGNnZXRhdHRyKGZuLCAmdHRidWYpOwotICAgIHNvc3Bl ZWQgPSB0dGJ1Zi5jX29zcGVlZDsKLSAgICB0dGJ1Zi5jX29zcGVlZCA9IEJTUEVFRDsKLSAgICBy ZXQgPSB0Y3NldGF0dHIoZm4sVENTQURSQUlOLCAmdHRidWYpOwotICAgIHkgPSAoaW50KXN0cmxl bihicm51bHMpOwotICAgIHggPSAoIEJTUEVFRCAqIDEwMCApIC8gbXNlYzsKLSAgICBpZiAoeCA+ IHkpIHggPSB5OwotICAgIHJldCA9IHdyaXRlKGZuLCBicm51bHMsICgoIEJTUEVFRCAqIDEwMCAp IC8gbXNlYyApKTsKLSAgICB0dGJ1Zi5jX29zcGVlZCA9IHNvc3BlZWQ7Ci0gICAgcmV0ID0gdGNz ZXRhdHRyKGZuLCBUQ1NBRFJBSU4sICZ0dGJ1Zik7Ci0gICAgcmV0ID0gd3JpdGUoZm4sICJAIiwg MSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLSNlbmRpZiAvKiBNSU5JWDIgKi8KLSNlbmRpZiAvKiBW NyAqLwotCi0vKgotICBJIE4gQyBIIEsgIC0tICBDaGVjayBpZiBjaGFycyB3YWl0aW5nIHRvIGJl IHJlYWQgb24gZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLgotCi0gIFRoaXMgcm91dGluZSBpcyBhIG1l cmdlciBvZiB0dGNoaygpIGFuZCBjb25jaGsoKS4KLSAgQ2FsbCB3aXRoOgotICAgIGNoYW5uZWwg PT0gMCB0byBjaGVjayBjb25zb2xlLgotICAgIGNoYW5uZWwgPT0gMSB0byBjaGVjayBjb21tdW5p Y2F0aW9ucyBjb25uZWN0aW9uLgotICBhbmQ6Ci0gICAgZmQgPSBmaWxlIGRlc2NyaXB0b3IuCi0g IFJldHVybnM6Ci0gICA+PSAwOiBudW1iZXIgb2YgY2hhcmFjdGVycyB3YWl0aW5nLCAwIG9yIGdy ZWF0ZXIsCi0gICAgIC0xOiBvbiBhbnkga2luZCBvZiBlcnJvciwKLSAgICAgLTI6IGlmIHRoZXJl IGlzIChkZWZpbml0ZWx5KSBubyBjb25uZWN0aW9uLgotICBOb3RlOiBJbiBVTklYIHdlIGRvbid0 IGhhdmUgdG8gY2FsbCBuZXR0Y2hrKCkgYmVjYXVzZSBhIHNvY2tldAotICBmaWxlIGRlc2NyaXB0 b3Igd29ya3MganVzdCBsaWtlIGluIHNlcmlhbCBpL28sIGlvY3RscyBhbmQgYWxsLgotICAoQnV0 IHRoaXMgd2lsbCBjaGFuZ2UgaWYgd2UgYWRkIG5vbi1maWxlLWRlc2NyaXB0b3IgY2hhbm5lbHMs Ci0gIHN1Y2ggYXMgSUJNIFguMjUgZm9yIEFJWC4uLikKLSovCi1zdGF0aWMgaW50Ci1pbl9jaGso Y2hhbm5lbCwgZmQpIGludCBjaGFubmVsLCBmZDsgewotICAgIGludCB4LCBuID0gMDsJCQkvKiBX b3JrZXJzLCBuID0gcmV0dXJuIHZhbHVlICovCi0gICAgZXh0ZXJuIGludCBjbHNvbmRpc2M7CQkv KiBDbG9zZSBvbiBkaXNjb25uZWN0ICovCi0vKgotICBUaGUgZmlyc3Qgc2VjdGlvbiBjaGVja3Mg dG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBjb25uZWN0aW9uLAotICBidXQgb25seSBpZiB3ZSdyZSBp biBsb2NhbCBtb2RlLgotKi8KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1 ZyhGMTExLCJpbl9jaGsgZW50cnkiLGNraXRvYShmZCksY2hhbm5lbCk7Ci0JZGVidWcoRjEwMSwi aW5fY2hrIHR0eWZkIiwiIix0dHlmZCk7Ci0JZGVidWcoRjEwMSwiaW5fY2hrIHR0cHR5IiwiIix0 dHB0eSk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0vKgotICBCdXQgZG9uJ3Qgc2F5IGNv bm5lY3Rpb24gaXMgZ29uZSBpZiB3ZSBoYXZlIGFueSBidWZmZXJlZC1zdHVmZi4KLSovCi0jaWZk ZWYgVFRMRUJVRgotICAgIGRlYnVnKEYxMDEsImluX2NoayB0dHB1c2giLCIiLHR0cHVzaCk7Ci0g ICAgaWYgKGNoYW5uZWwgPT0gMSkgewotCWlmICh0dHB1c2ggPj0gMCkKLQkgIG4rKzsKLQluICs9 IGxlX2luYnVmKCk7Ci0JaWYgKG4gPiAwKQotCSAgcmV0dXJuKG4pOwotICAgIH0KLSNlbmRpZiAv KiBUVExFQlVGICovCi0KLSNpZmRlZiBORVRQVFkKLSNpZmRlZiBIQVZFX1BUWVRSQVAKLSAgICAv KiBTcGVjaWFsIGhhbmRsaW5nIGZvciBIUC1VWCBwdHkgaS9vICovCi0gICAgaWYgKHR0cHR5ICYm IHB0eV90cmFwX3BlbmRpbmcodHR5ZmQpID4gMCkgewotICAgICAgICBpZiAocHR5X3RyYXBfaGFu ZGxlcih0dHlmZCkgPiAwKSB7Ci0gICAgICAgICAgICB0dGNsb3MoMCk7Ci0gICAgICAgICAgICBy ZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAqLwot I2VuZGlmIC8qIE5FVFBUWSAqLwotCi0gICAgaWYgKGNoYW5uZWwpIHsJCQkvKiBDaGVja2luZyBj b21tdW5pY2F0aW9ucyBjaGFubmVsICovCi0JaWYgKHR0eWZkIDwgMCkgewkJLyogTm8gY29ubmVj dGlvbiAqLwotCSAgcmV0dXJuKC0yKTsJCQkvKiBUaGF0J3Mgd2hhdCB0aGlzIG1lYW5zICovCi0J fSBlbHNlIGlmICh4bG9jYWwgJiYJCS8qIEluIGxvY2FsIG1vZGUgKi8KLQkJICAgKCFuZXRjb25u CQkvKiBTZXJpYWwgY29ubmVjdGlvbiBvciAqLwotI2lmZGVmIFROX0NPTVBPUlQKLQkJICAgIHx8 IGlzdG5jb21wb3J0KCkgICAgLyogVGVsbmV0IENvbSBQb3J0ICovCi0jZW5kaWYgLyogVE5fQ09N UE9SVCAqLwotCQkgICApICYmIHR0Y2FyciAhPSBDQVJfT0ZGIC8qIHdpdGggQ0FSUklFUiBXQVRD SCBPTiAob3IgQVVUTykgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgTVlSRUFECi0vKgotICBT ZWVtcyBsaWtlIHRoaXMgd291bGQgYmUgYSBnb29kIGlkZWEgYnV0IGl0IHByZXZlbnRzIEMtS2Vy bWl0IGZyb20KLSAgcG9wcGluZyBiYWNrIHRvIHRoZSBwcm9tcHQgYXV0b21hdGljYWxseSB3aGVu IGNhcnJpZXIgZHJvcHMuICBIb3dldmVyLAotICBjb21tZW50aW5nIHRoaXMgb3V0IHByZXZlbnRz IHVzIGZyb20gc2VlaW5nIHRoZSBOTyBDQVJSSUVSIG1lc3NhZ2UuCi0gIE5lZWRzIG1vcmUgd29y ay4uLgotKi8KLQkJICAgJiYgbXlfY291bnQgPCAxCS8qIE5vdGhpbmcgaW4gb3VyIGludGVybmFs IGJ1ZmZlciAqLwotI2VuZGlmIC8qIE1ZUkVBRCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJ ICAgKSB7Ci0JICAgIGludCB4OwotCSAgICB4ID0gdHRnbWRtKCk7CQkvKiBTbyBnZXQgbW9kZW0g c2lnbmFscyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgY2xvc2Utb24tZGlzY29ubmVjdCIs IiIsY2xzb25kaXNjKTsKLQkgICAgaWYgKHggPiAtMSkgewkJLyogQ2hlY2sgZm9yIGNhcnJpZXIg Ki8KLQkJaWYgKCEoeCAmIEJNX0RDRCkpIHsJLyogTm8gY2FycmllciAqLwotCQkgICAgZGVidWco RjEwMSwiaW5fY2hrIGNhcnJpZXIgbG9zdCIsIiIseCk7Ci0JCSAgICBpZiAoY2xzb25kaXNjKQkv KiBJZiAiY2xvc2Utb24tZGlzY29ubmVjdCIgKi8KLQkJICAgICAgdHRjbG9zKDApOwkvKiBjbG9z ZSBkZXZpY2UgJiByZWxlYXNlIGxvY2suICovCi0JCSAgICByZXR1cm4oLTIpOwkJLyogVGhpcyBt ZWFucyAiZGlzY29ubmVjdGVkIiAqLwotCQl9Ci0JICAgIC8qIEluIGNhc2UgSS9PIHRvIGRldmlj ZSBhZnRlciBDRCBkcm9wcGVkIGFsd2F5cyBmYWlscyAqLwotCSAgICAvKiBhcyBpbiBEZWJpYW4g TGludXggMi4xIGFuZCBVbml4d2FyZSAyLjEuLi4gKi8KLQkgICAgfSBlbHNlIHsKLQkgICAgICAg IGRlYnVnKEYxMDEsImluX2NoayB0dGdtZG0gSS9PIGVycm9yIiwiIixlcnJubyk7Ci0JICAgICAg ICBkZWJ1ZyhGMTAxLCJpbl9jaGsgdHRnbWRtIGdvdHNpZ3MiLCIiLGdvdHNpZ3MpOwotCSAgICAg ICAgaWYgKGdvdHNpZ3MpIHsJCS8qIElmIHdlIGdvdCBzaWduYWxzIGJlZm9yZS4uLiAqLwotCQkg ICAgaWYgKGVycm5vID09IDUgfHwgZXJybm8gPT0gNikgeyAvKiBJL08gZXJyb3IgZXRjICovCi0J CSAgICAgICAgaWYgKGNsc29uZGlzYykJLyogbGlrZSB3aGVuIG1vZGVtIGhhbmdzIHVwICovCi0J CQkgIHR0Y2xvcygwKTsKLQkJCXJldHVybigtMik7Ci0JCSAgICB9Ci0JCX0KLQkJLyogSWYgd2Ug bmV2ZXIgZ290IG1vZGVtIHNpZ25hbHMgc3VjY2Vzc2Z1bGx5IG9uIHRoaXMgKi8KLQkJLyogY29u bmVjdGlvbiBiZWZvcmUsIHdlIGNhbid0IGNvbmNsdWRlIHRoYXQgVEhJUyBmYWlsdXJlICovCi0J CS8qIG1lYW5zIHRoZSBjb25uZWN0aW9uIHdhcyBsb3N0LiAqLwotCQlyZXR1cm4oMCk7Ci0JICAg IH0KLQl9Ci0gICAgfQotCi0vKiBXZSBzZWVtIHRvIGhhdmUgYSBjb25uZWN0aW9uIHNvIG5vdyBz ZWUgaWYgYW55IGJ5dGVzIGFyZSB3YWl0aW5nIG9uIGl0ICovCi0KLSNpZmRlZiBDS19TU0wKLSAg ICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgewotICAgICAgICBuICs9 IFNTTF9wZW5kaW5nKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24pOwotICAgICAgICBk ZWJ1ZyhGMTAxLCJpbl9jaGsgU1NMX3BlbmRpbmciLCIiLG4pOwotICAgICAgICBpZiAobiA8IDAp IHsKLSAgICAgICAgICAgIHR0Y2xvcygwKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAg ICAgIH0gZWxzZSBpZiAobiA+IDApIHsKLSAgICAgICAgICAgIHJldHVybihuKTsKLSAgICAgICAg fQotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBSTE9HQ09ERQotI2lmZGVmIENL X0tFUkJFUk9TCi0gICAgLyogSXQgaXMgbm90IHNhZmUgdG8gcmVhZCBhbnkgZGF0YSB3aGVuIHVz aW5nIGVuY3J5cHRlZCBLbG9naW4gKi8KLSAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4g fHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsKLSNpZmRlZiBLUkI0Ci0gICAgICAgIGlmICh0 dG5wcm90byA9PSBOUF9FSzRMT0dJTikgewotICAgICAgICAgICAgbiArPSBrcmI0X2Rlc19hdmFp bCh0dHlmZCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsga3JiNF9kZXNfYXZhaWwi LCIiLG4pOwotICAgICAgICB9Ci0jZW5kaWYgLyogS1JCNCAqLwotI2lmZGVmIEtSQjUKLSAgICAg ICAgaWYgKHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSB7Ci0gICAgICAgICAgICBuICs9IGtyYjVf ZGVzX2F2YWlsKHR0eWZkKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImluX2NoayBrcmI1X2Rl c19hdmFpbCIsIiIsbik7Ci0gICAgICAgIH0KLSNpZmRlZiBLUkI1X1UyVQotICAgICAgICBpZiAo dHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKLSAgICAgICAgICAgIG4gKz0ga3JiNV91MnVfYXZhaWwo dHR5ZmQpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiaW5fY2hrIGtyYjVfZGVzX2F2YWlsIiwi IixuKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIEtSQjVfVTJVICovCi0jZW5kaWYgLyogS1JCNSAq LwotICAgICAgICBpZiAobiA8IDApCQkJLyogSXMgdGhpcyByaWdodD8gKi8KLQkgIHJldHVybigt MSk7Ci0gICAgICAgIGVsc2UKLQkgIHJldHVybihuKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfS0VS QkVST1MgKi8KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotCi0gICAgZXJybm8gPSAwOwkJCQkvKiBS ZXNldCB0aGlzIHNvIHdlIGxvZyBnb29kIGluZm8gKi8KLSNpZmRlZiBGSU9OUkVBRAotICAgIHgg PSBpb2N0bChmZCwgRklPTlJFQUQsICZuKTsJLyogQlNEIGFuZCBsb3RzIG9mIG90aGVycyAqLwot I2lmZGVmIERFQlVHCQkJCS8qICh0aGUgbW9yZSB0aGUgYmV0dGVyKSAqLwotICAgIGlmIChkZWJs b2cpIHsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgRklPTlJFQUQgcmV0dXJuIGNvZGUiLCIiLHgpOwot CWRlYnVnKEYxMDEsImluX2NoayBGSU9OUkVBRCBjb3VudCIsIiIsbik7Ci0JZGVidWcoRjEwMSwi aW5fY2hrIEZJT05SRUFEIGVycm5vIiwiIixlcnJubyk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVH ICovCi0jZWxzZSAvKiBGSU9OUkVBRCBub3QgZGVmaW5lZCAqLwotLyoKLSAgSGVyZSwgaWYgKG5l dGNvbm4gJiYgdHRuZXQgPT0gTkVUX1RDUEIpLCB3ZSBtaWdodCB0cnkgY2FsbGluZyByZWN2bXNn KCkKLSAgd2l0aCBmbGFncyBNU0dfUEVFS3xNU0dfRE9OVFdBSVQgb24gdGhlIHNvY2tldCAodHR5 ZmQpLCBleGNlcHQgdGhpcyBpcyBub3QKLSAgcG9ydGFibGUgKE1TR19ET05UV0FJVCBpc24ndCBk ZWZpbmVkIGluIGFueSBvZiB0aGUgPHN5cy9zb2NrZXQuaD4gZmlsZXMKLSAgdGhhdCBJIGxvb2tl ZCBhdCwgYnV0IGl0IGlzIG5lZWRlZCB0byBwcmV2ZW50IHRoZSBjYWxsIGZyb20gYmxvY2tpbmcp LCBhbmQKLSAgdGhlIG1zZ2hkciBzdHJ1Y3QgZGlmZmVycyBmcm9tIHBsYWNlIHRvIHBsYWNlLCBz byB3ZSB3b3VsZCBuZWVkIGFub3RoZXIKLSAgYXZhbGFuY2hlIG9mIGlmZGVmcy4gIFN0aWxsLCB3 aGVuIEZJT05SRUFEIGlzIG5vdCBhdmFpbGFibGUsIHRoaXMgaXMgdGhlCi0gIG9ubHkgb3RoZXIg a25vd24gbWV0aG9kIG9mIGFza2luZyB0aGUgT1MgZm9yIHRoZSAqbnVtYmVyKiBvZiBjaGFyYWN0 ZXJzCi0gIGF2YWlsYWJsZSBmb3IgcmVhZGluZy4KLSovCi0jaWZkZWYgVjcJCQkJLyogVU5JWCBW NzogbG9vayBpbiBrZXJuZWwgbWVtb3J5ICovCi0jaWZkZWYgTUlOSVgKLSAgICBuID0gMDsJCQkJ LyogQnV0IG5vdCBpbiBNSU5JWCAqLwotI2Vsc2UKLSNpZmRlZiBNSU5JWDIKLSAgICBuID0gMDsK LSNlbHNlCi0gICAgbHNlZWsoa21lbVtUVFldLCAobG9uZykgcWFkZHJbVFRZXSwgMCk7IC8qIDd0 aCBFZGl0aW9uIFVuaXggKi8KLSAgICB4ID0gcmVhZChrbWVtW1RUWV0sICZuLCBzaXplb2YoaW50 KSk7Ci0gICAgaWYgKHggIT0gc2l6ZW9mKGludCkpCi0gICAgICBuID0gMDsKLSNlbmRpZiAvKiBN SU5JWDIgKi8KLSNlbmRpZiAvKiBNSU5JWCAqLwotI2Vsc2UgLyogTm90IFY3ICovCi0jaWZkZWYg UFJPVlgxCi0gICAgeCA9IGlvY3RsKGZkLCBUSU9DUUNOVCwgJnR0YnVmKTsJLyogREVDIFByby8z eHggVmVuaXggVi4xICovCi0gICAgbiA9IHR0YnVmLnNnX2lzcGVlZCAmIDAzNzc7CQkvKiBDaXJj YSAxOTg0ICovCi0gICAgaWYgKHggPCAwKSBuID0gMDsKLSNlbHNlCi0jaWZkZWYgTVlSRUFECi0v KgotICBIZXJlIHdlIHNraXAgYWxsIHRoZSB1bmRlcGVuZGFibGUgYW5kIGV4cGVuc2l2ZSBjYWxs cyBiZWxvdyBpZiB3ZQotICBhbHJlYWR5IGhhdmUgc29tZXRoaW5nIGluIG91ciBpbnRlcm5hbCBi dWZmZXIuICBUaGlzIHRlbmRzIHRvIHdvcmsgcXVpdGUKLSAgbmljZWx5LCBzbyB0aGUgb25seSBy ZWFsbHkgYmFkIGNhc2UgcmVtYWluaW5nIGlzIHRoZSBvbmUgaW4gd2hpY2ggbmVpdGhlcgotICBG SU9OUkVBRCBvciBNWVJFQUQgYXJlIGRlZmluZWQsIHdoaWNoIGlzIGluY3JlYXNpbmdseSByYXJl IHRoZXNlIGRheXMuCi0qLwotICAgIGlmIChjaGFubmVsICE9IDAgJiYgbXlfY291bnQgPiAwKSB7 Ci0JZGVidWcoRjEwMSwiaW5fY2hrIGJ1ZiBteV9jb3VudCIsIiIsbXlfY291bnQpOwotCW4gPSBt eV9jb3VudDsJCQkvKiBuIHdhcyAwIGJlZm9yZSB3ZSBnb3QgaGVyZSAqLwotCXJldHVybihuKTsK LSAgICB9Ci0jZW5kaWYgLyogTVlSRUFEICovCi0vKgotICByZGNoaygpLCBzZWxlY3QoKSwgYW5k IHBvbGwoKSB0ZWxsIHVzICppZiogZGF0YSBpcyBhdmFpbGFibGUgdG8gYmUgcmVhZCwgYnV0Ci0g IG5vdCBob3cgbXVjaCwgc28gdGhlc2Ugc2hvdWxkIGJlIHVzZWQgb25seSBhcyBhIGZpbmFsIHJl c29ydC4gIEVzcGVjaWFsbHkKLSAgc2luY2UgdGhlc2UgY2FsbHMgdGVuZCB0byBhZGQgYSBsb3Qg b3ZlcmhlYWQuCi0qLwotI2lmZGVmIFJEQ0hLCQkJCS8qIFRoaXMgbW9zdGx5IFNDTy1zcGVjaWZp YyAqLwotICAgIG4gPSByZGNoayhmZCk7Ci0gICAgZGVidWcoRjEwMSwiaW5fY2hrIHJkY2hrIiwi IixuKTsKLSNlbHNlIC8qIE5vIFJEQ0hLICovCi0jaWZkZWYgU0VMRUNUCi0jaWZkZWYgUGxhbjkK LSAgICAvKiBPbmx5IGFsbG93cyBzZWxlY3Qgb24gdGhlIGNvbnNvbGUgLi4uIGRvbid0IGFzayAq LwotICAgIGlmIChjaGFubmVsID09IDApCi0jZW5kaWYgLyogUGxhbjkgKi8KLSAgICAgIHsKLQlm ZF9zZXQgcmZkczsJCQkvKiBSZWFkIGZpbGUgZGVzY3JpcHRvcnMgKi8KLSNpZmRlZiBCRUxMVjEw Ci0JRkRfWkVSTyhyZmRzKTsJCQkvKiBJbml0aWFsaXplIHRoZW0gKi8KLQlGRF9TRVQoZmQscmZk cyk7CQkvKiBXZSB3YW50IHRvIGxvb2sgYXQgdGhpcyBmZCAqLwotI2Vsc2UKLQlGRF9aRVJPKCZy ZmRzKTsJCQkvKiBJbml0aWFsaXplIHRoZW0gKi8KLQlGRF9TRVQoZmQsJnJmZHMpOwkJLyogV2Ug d2FudCB0byBsb29rIGF0IHRoaXMgZmQgKi8KLQl0di50dl9zZWMgPSB0di50dl91c2VjID0gMEw7 CS8qIEEgMC12YWx1ZWQgdGltZXZhbCBzdHJ1Y3R1cmUgKi8KLSNlbmRpZiAvKiBCRUxMVjEwICov Ci0jaWZkZWYgUGxhbjkKLQluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZkcywgKGZkX3NldCAq KTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgUGxhbiA5IHNlbGVj dCIsIiIsbik7Ci0jZWxzZQotI2lmZGVmIEJFTExWMTAKLQluID0gc2VsZWN0KCAxMjgsIHJmZHMs IChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgMCApOwotCWRlYnVnKEYxMDEsImluX2NoayBCRUxM VjEwIHNlbGVjdCIsIiIsbik7Ci0jZWxzZQotI2lmZGVmIEJTRDQ0Ci0JbiA9IHNlbGVjdCggRkRf U0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0JZGVidWco RjEwMSwiaW5fY2hrIEJTRDQ0IHNlbGVjdCIsIiIsbik7Ci0jZWxzZQotI2lmZGVmIEJTRDQzCi0J biA9IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwg JnR2ICk7Ci0JZGVidWcoRjEwMSwiaW5fY2hrIEJTRDQzIHNlbGVjdCIsIiIsbik7Ci0jZWxzZQot I2lmZGVmIFNPTEFSSVMKLQluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZkcywgKGZkX3NldCAq KTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgU09MQVJJUyBzZWxl Y3QiLCIiLG4pOwotI2Vsc2UKLSNpZmRlZiBRTlg2Ci0JbiA9IHNlbGVjdCggRkRfU0VUU0laRSwg JnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0JZGVidWcoRjEwMSwiaW5f Y2hrIFFOWDYgc2VsZWN0IiwiIixuKTsKLSNlbHNlCi0jaWZkZWYgUU5YCi0JbiA9IHNlbGVjdCgg RkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0JZGVi dWcoRjEwMSwiaW5fY2hrIFFOWCBzZWxlY3QiLCIiLG4pOwotI2Vsc2UKLSNpZmRlZiBDT0hFUkVO VAotCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAq KTAsICZ0diApOwotCWRlYnVnKEYxMDEsImluX2NoayBDT0hFUkVOVCBzZWxlY3QiLCIiLG4pOwot I2Vsc2UKLSNpZmRlZiBTVlI0Ci0JbiA9IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMsIChmZF9z ZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0JZGVidWcoRjEwMSwiaW5fY2hrIFNWUjQgc2Vs ZWN0IiwiIixuKTsKLSNlbHNlCi0jaWZkZWYgX19saW51eF9fCi0JbiA9IHNlbGVjdCggRkRfU0VU U0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0JZGVidWcoRjEw MSwiaW5fY2hrIExJTlVYIHNlbGVjdCIsIiIsbik7Ci0jaWZkZWYgT1NGCi0JbiA9IHNlbGVjdCgg RkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0JZGVi dWcoRjEwMSwiaW5fY2hrIE9TRiBzZWxlY3QiLCIiLG4pOwotI2Vsc2UKLQluID0gc2VsZWN0KCBG RF9TRVRTSVpFLCAmcmZkcywgKGludCAqKTAsIChpbnQgKikwLCAmdHYgKTsKLQlkZWJ1ZyhGMTAx LCJpbl9jaGsgY2F0Y2hhbGwgc2VsZWN0IiwiIixuKTsKLSNlbmRpZiAvKiBPU0YgKi8KLSNlbmRp ZiAvKiBfX2xpbnV4X18gKi8KLSNlbmRpZiAvKiBTVlI0ICovCi0jZW5kaWYgLyogQ09IRVJFTlQg Ki8KLSNlbmRpZiAvKiBRTlggKi8KLSNlbmRpZiAvKiBRTlg2ICovCi0jZW5kaWYgLyogU09MQVJJ UyAqLwotI2VuZGlmIC8qIEJTRDQzICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBC RUxMVjEwICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLSAgICB9Ci0jZWxzZSAgLyogTm90IFNFTEVD VCAqLwotI2lmZGVmIENLX1BPTEwKLSAgICB7Ci0gICAgICBzdHJ1Y3QgcG9sbGZkIHBmZDsKLQot ICAgICAgcGZkLmZkID0gZmQ7Ci0gICAgICBwZmQuZXZlbnRzID0gUE9MTElOOwotICAgICAgcGZk LnJldmVudHMgPSAwOwotICAgICAgbiA9IHBvbGwoJnBmZCwgMSwgMCk7Ci0gICAgICBkZWJ1ZyhG MTAxLCJpbl9jaGsgcG9sbCIsIiIsbik7Ci0gICAgICBpZiAoKG4gPiAwKSAmJiAocGZkLnJldmVu dHMgJiBQT0xMSU4pKQotCW4gPSAxOwotICAgIH0KLSNlbmRpZiAvKiBDS19QT0xMICovCi0jZW5k aWYgLyogU0VMRUNUICovCi0jZW5kaWYgLyogUkRDSEsgKi8KLSNlbmRpZiAvKiBQUk9WWDEgKi8K LSNlbmRpZiAvKiBWNyAqLwotI2VuZGlmIC8qIEZJT05SRUFEICovCi0KLS8qIEZyb20gaGVyZSBk b3duLCB0cmVhdCBjb25zb2xlIGFuZCBjb21tdW5pY2F0aW9uIGRldmljZSBkaWZmZXJlbnRseS4u LiAqLwotCi0gICAgaWYgKGNoYW5uZWwgPT0gMCkgewkJCS8qIENvbnNvbGUgKi8KLQotI2lmZGVm IFNWT1JQT1NJWAotI2lmbmRlZiBGSU9OUkVBRAotI2lmbmRlZiBTRUxFQ1QKLSNpZm5kZWYgQ0tf UE9MTAotI2lmbmRlZiBSRENISwotLyoKLSAgVGhpcyBpcyB0aGUgaGlkZW91cyBoYWNrIHVzZWQg aW4gU3lzdGVtIFYgYW5kIFBPU0lYIHN5c3RlbXMgdGhhdCBkb24ndAotICBzdXBwb3J0IEZJT05S RUFELCByZGNoaygpLCBzZWxlY3QoKSwgcG9sbCgpLCBldGMsIGluIHdoaWNoIHRoZSB1c2VyJ3MK LSAgQ09OTkVDVC1tb2RlIGVzY2FwZSBjaGFyYWN0ZXIgaXMgYXR0YWNoZWQgdG8gU0lHUVVJVC4g IFVzZWQsIG9idmlvdXNseSwKLSAgb25seSBvbiB0aGUgY29uc29sZS4KLSovCi0JaWYgKGNvbmVz YykgewkJCS8qIEVzY2FwZSBjaGFyYWN0ZXIgdHlwZWQgPT0gU0lHUVVJVCAqLwotCSAgICBkZWJ1 ZyhGMTAwLCJpbl9jaGsgY29uZXNjIiwiIixjb25lc2MpOwotCSAgICBjb25lc2MgPSAwOwotCSAg ICBzaWduYWwoU0lHUVVJVCxlc2N0cnApOwkvKiBSZXN0b3JlIHNpZ25hbCAqLwotCSAgICBuICs9 IDE7Ci0JfQotI2VuZGlmIC8qIFJEQ0hLICovCi0jZW5kaWYgLyogQ0tfUE9MTCAqLwotI2VuZGlm IC8qIFNFTEVDVCAqLwotI2VuZGlmIC8qIEZJT05SRUFEICovCi0jZW5kaWYgLyogU1ZPUlBPU0lY ICovCi0KLQlyZXR1cm4obik7CQkJLyogRG9uZSB3aXRoIGNvbnNvbGUgKi8KLSAgICB9Ci0KLSAg ICBpZiAoY2hhbm5lbCAhPSAwKSB7CQkJLyogQ29tbXVuaWNhdGlvbnMgY29ubmVjdGlvbiAqLwot Ci0jaWZkZWYgTVlSRUFECi0jaWZuZGVmIEZJT05SRUFECi0vKgotICBzZWxlY3QoKSBvciByZGNo aygpLCBldGMsIGhhcyB0b2xkIHVzIHRoYXQgc29tZXRoaW5nIGlzIHdhaXRpbmcsIGJ1dCB3ZQot ICBkb24ndCBrbm93IGhvdyBtdWNoLiAgU28gd2UgZG8gYSByZWFkIHRvIGdldCBpdCBhbmQgdGhl biB3ZSBrbm93LiAgTm90ZToKLSAgVGhpcyByZWFkIGlzIE5PVCBub25ibG9ja2luZyBpZiBub3Ro aW5nIGlzIHRoZXJlIChiZWNhdXNlIG9mIFZNSU49MSksIGJ1dAotICBpdCBzaG91bGQgYmUgc2Fm ZSBpbiB0aGlzIGNhc2Ugc2luY2UgdGhlIE9TIHRlbGxzIHVzIGF0IGxlYXN0IG9uZSBieXRlIGlz Ci0gIHdhaXRpbmcgdG8gYmUgcmVhZCwgYW5kIE1ZUkVBRCByZWFkcyByZXR1cm4gYXMgbXVjaCBh cyBpcyB0aGVyZSB3aXRob3V0Ci0gIHdhaXRpbmcgZm9yIGFueSBtb3JlLiAgQ29udHJvbGxlZCB0 ZXN0cyBvbiBTb2xhcmlzIGFuZCBVbml4d2FyZSAod2l0aAotICBGSU9OUkVBRCBkZWxpYmVyYXRl bHkgdW5kZWZpbmVkKSBzaG93IHRoaXMgdG8gYmUgdHJ1ZS4KLSovCi0JZGVidWcoRjEwMSwiaW5f Y2hrIHJlYWQgbXlfY291bnQiLCIiLG15X2NvdW50KTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgcmVh ZCBuIiwiIixuKTsKLQlpZiAobiA+IDAgJiYgbXlfY291bnQgPT0gMCkgewotCSAgICAvKiBUaGlz IGFsc28gY2F0Y2hlcyBkaXNjb25uZWN0cyBldGMgKi8KLQkgICAgLyogRG8gd2hhdCBteWdldGJ1 ZiBkb2VzIGV4Y2VwdCBkb24ndCBncmFiIGEgY2hhcmFjdGVyICovCi0JICAgIG15X2NvdW50ID0g bXlmaWxsYnVmKCk7Ci0JICAgIG15X2l0ZW0gPSAtMTsJCS8qIF5eXiAqLwotCSAgICBkZWJ1ZyhG MTAxLCJpbl9jaGsgbXlmaWxsYnVmIG15X2NvdW50IiwiIixteV9jb3VudCk7Ci0JICAgIGlmICht eV9jb3VudCA8IDApCi0JICAgICAgcmV0dXJuKC0xKTsKLQkgICAgZWxzZQotCSAgICAgIG4gPSAw OwkJCS8qIE5COiBuIGlzIHJlcGxhY2VkIGJ5IG15X2NvdW50ICovCi0JfQotI2VuZGlmIC8qIEZJ T05SRUFEICovCi0vKgotICBIZXJlIHdlIGFkZCB3aGF0ZXZlciB3ZSB0aGluayBpcyB1bnJlYWQg dG8gd2hhdCBpcyBzdGlsbCBpbiBvdXIKLSAgb3VyIGludGVybmFsIGJ1ZmZlci4gIFRodXMgdGhl IGltcG9ydGFuY2Ugb2Ygc2V0dGluZyBuIHRvIDAganVzdCBhYm92ZS4KLSovCi0JZGVidWcoRjEw MSwiaW5fY2hrIG15X2NvdW50IiwiIixteV9jb3VudCk7Ci0JZGVidWcoRjEwMSwiaW5fY2hrIG4i LCIiLG4pOwotCWlmIChteV9jb3VudCA+IDApCi0JICBuICs9IG15X2NvdW50OwotI2VuZGlmIC8q IE1ZUkVBRCAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgcmVzdWx0IiwiIixuKTsK LQotICAgIC8qIEVycm9ycyBoZXJlIGRvbid0IHByb3ZlIHRoZSBjb25uZWN0aW9uIGhhcyBkcm9w cGVkIHNvIGp1c3Qgc2F5IDAgKi8KLQotICAgIHJldHVybihuIDwgMCA/IDAgOiBuKTsKLX0KLQot Ci0vKiAgVCBUIEMgSCBLICAtLSAgVGVsbCBob3cgbWFueSBjaGFyYWN0ZXJzIGFyZSB3YWl0aW5n IGluIHR0eSBpbnB1dCBidWZmZXIgICovCi0KLWludAotdHRjaGsoKSB7Ci0gICAgaW50IGZkOwot I2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpCi0gICAgICBmZCA9IGZkaW47Ci0gICAgZWxz ZQotI2VuZGlmIC8qIE5FVENNRCAqLwotICAgICAgZmQgPSB0dHlmZDsKLSAgICByZXR1cm4oaW5f Y2hrKDEsZmQpKTsKLX0KLQotLyogIFQgVCBYIEkgTiAgLS0gIEdldCBuIGNoYXJhY3RlcnMgZnJv bSB0dHkgaW5wdXQgYnVmZmVyICAqLwotCi0vKiAgUmV0dXJucyBudW1iZXIgb2YgY2hhcmFjdGVy cyBhY3R1YWxseSBnb3R0ZW4sIG9yIC0xIG9uIGZhaWx1cmUgICovCi0KLS8qICBJbnRlbmRlZCBm b3IgdXNlIG9ubHkgd2hlbiBpdCBpcyBrbm93biB0aGF0IG4gY2hhcmFjdGVycyBhcmUgYWN0dWFs bHkgKi8KLS8qICBBdmFpbGFibGUgaW4gdGhlIGlucHV0IGJ1ZmZlci4gICovCi0KLWludAotdHR4 aW4obixidWYpIGludCBuOyBDSEFSICpidWY7IHsKLSAgICByZWdpc3RlciBpbnQgeCA9IDAsIGMg PSAtMjsKLSNpZmRlZiBUVExFQlVGCi0gICAgcmVnaXN0ZXIgaW50IGkgPSAwOwotI2VuZGlmIC8q IFRUTEVCVUYgKi8KLSAgICBpbnQgZmQ7Ci0KLSAgICBpZiAobiA8IDEpCQkJCS8qIE5vdGhpbmcg dG8gZG8gKi8KLSAgICAgIHJldHVybigwKTsKLQotI2lmZGVmIFRUTEVCVUYKLSAgICBpZiAodHRw dXNoID49IDApIHsKLSAgICAgICAgYnVmWzBdID0gdHRwdXNoOwkJLyogUHV0IHB1c2hlZCBjaGFy IGluIGJ1ZmZlciovCi0gICAgICAgIHR0cHVzaCA9IC0xOwkJCS8qIENsZWFyIHRoZSBwdXNoIGJ1 ZmZlciAqLwotICAgICAgICBpZiAodHRjaGsoKSA+IDApCi0JICByZXR1cm4odHR4aW4obi0xLCAm YnVmWzFdKSArIDEpOwotICAgICAgICBlbHNlCi0JICByZXR1cm4oMSk7Ci0gICAgfQotICAgIGlm IChsZV9kYXRhKSB7Ci0gICAgICAgIHdoaWxlIChsZV9pbmJ1ZigpID4gMCkgewotCSAgICBpZiAo bGVfZ2V0Y2hhcigmYnVmW2ldKSkgewotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAg ICAgICBuLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR0Y2hrKCkg PiAwKQotCSAgcmV0dXJuKHR0eGluKG4sJmJ1ZltpXSkraSk7Ci0gICAgICAgIGVsc2UKLQkgIHJl dHVybihpKTsKLSAgICB9Ci0jZW5kaWYgLyogVFRMRUJVRiAqLwotCi0jaWZkZWYgTkVUQ01ECi0g ICAgaWYgKHR0cGlwZSkKLSAgICAgIGZkID0gZmRpbjsKLSAgICBlbHNlCi0jZW5kaWYgLyogTkVU Q01EICovCi0gICAgICBmZCA9IHR0eWZkOwotCi0jaWZkZWYgU1VOWDI1Ci0gICAgaWYgKG5ldGNv bm4gJiYgKHR0bmV0ID09IE5FVF9TWDI1KSkJLyogWC4yNSBjb25uZWN0aW9uICovCi0gICAgICBy ZXR1cm4oeDI1eGluKG4sYnVmKSk7Ci0jZW5kaWYgLyogU1VOWDI1ICovCi0KLSNpZmRlZiBJQk1Y MjUKLSAgICAvKiByaWVobTogcG9zc2libHkgbm90IG5lZWRlZC4gVGVzdCB3b3JrZWQgd2l0aCBu b3JtYWwgcmVhZHMgYW5kIHdyaXRlcyAqLwotICAgIGlmIChuZXRjb25uICYmICh0dG5ldCA9PSBO RVRfSVgyNSkpCXsgLyogWC4yNSBjb25uZWN0aW9uICovCi0JeCA9IHgyNXhpbihuLGJ1Zik7Ci0J aWYgKHggPiAwKSBidWZbeF0gPSAnXDAnOwotCXJldHVybih4KTsKLSAgICB9Ci0jZW5kaWYgLyog SUJNWDI1ICovCi0KLSNpZmRlZiBNWVJFQUQKLSAgICBkZWJ1ZyhGMTAxLCJ0dHhpbiBNWVJFQUQi LCIiLG4pOwotICAgIHdoaWxlICh4IDwgbikgewotCWMgPSBteXJlYWQoKTsKLQlpZiAoYyA8IDAp IHsKLQkgICAgZGVidWcoRjEwMSwidHR4aW4gbXlyZWFkIHJldHVybnMiLCIiLGMpOwotCSAgICBp ZiAoYyA9PSAtMykgeCA9IC0xOwotCSAgICBicmVhazsKLSAgICAgICAgfQotCWJ1Zlt4KytdID0g YyAmIHR0cG1zazsKLSNpZmRlZiBSTE9HQ09ERQotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgICAg IC8qIEl0IGlzIGltcG9zc2libGUgdG8ga25vdyBob3cgbWFueSBjaGFyYWN0ZXJzIGFyZSB3YWl0 aW5nICovCi0gICAgICAgIC8qIHRvIGJlIHJlYWQgd2hlbiB5b3UgYXJlIHVzaW5nIEVuY3J5cHRl ZCBSbG9naW4gb3IgU1NMICAgICovCi0gICAgICAgIC8qIGFzIHRoZSB0cmFuc3BvcnQgc2luY2Ug dGhlIG51bWJlciBvZiByZWFsIGRhdGEgYnl0ZXMgICAgICovCi0gICAgICAgIC8qIGNhbiBiZSBn cmVhdGVyIG9yIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9uIHRoZSAgICovCi0gICAg ICAgIC8qIHdpcmUgd2hpY2ggaXMgd2hhdCB0dGNoaygpIHJldHVybnMuICAgICAgICAgICAgICAg ICAgICAgICovCi0gICAgICAgIGlmIChuZXRjb25uICYmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJ TiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTikpCi0JICBpZiAodHRjaGsoKSA8PSAwKQotCSAg ICBicmVhazsKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2VuZGlmIC8qIFJMT0dDT0RFICov Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2 ZV9mbGFnKQotCSAgaWYgKHR0Y2hrKCkgPD0gMCkKLQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tf U1NMICovCi0gICAgfQotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAxLCJ0dHhpbiBSRUFEIiwiIixuKTsK LSAgICB4ID0gcmVhZChmZCxidWYsbik7Ci0gICAgZm9yIChjID0gMDsgYyA8IG47IGMrKykJCS8q IFN0cmlwIGFueSBwYXJpdHkgKi8KLSAgICAgIGJ1ZltjXSAmPSB0dHBtc2s7Ci0jZW5kaWYgLyog TVlSRUFEICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0dHhpbiB4IiwiIix4KTsJCS8qIERvbmUgKi8K LSAgICBpZiAoeCA+IDApIGJ1Zlt4XSA9ICdcMCc7Ci0gICAgaWYgKHggPCAwKSB4ID0gLTE7Ci0g ICAgcmV0dXJuKHgpOwotfQotCi0vKiAgVCBUIE8gTCAgLS0gIFdyaXRlIHN0cmluZyBzLCBsZW5n dGggbiwgdG8gY29tbXVuaWNhdGlvbiBkZXZpY2UuICAqLwotLyoKLSAgUmV0dXJuczoKLSAgID49 IDAgb24gc3VjY2VzcywgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWN0dWFsbHkgd3JpdHRlbi4KLSAg IC0xIG9uIGZhaWx1cmUuCi0qLwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLUNIQVIgKiB4cGFja2V0 ID0gTlVMTDsKLWludCBueHBhY2tldCA9IDA7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwot Ci0jZGVmaW5lIFRUT0xNQVhUIDUKLWludAotdHRvbChzLG4pIGludCBuOyBDSEFSICpzOyB7Ci0g ICAgaW50IHgsIGxlbiwgdHJpZXMsIGZkOwotI2lmZGVmIENLWFhDSEFSCi0gICAgZXh0ZXJuIGlu dCBkYmxmbGFnOwkJCS8qIEZvciBTRVQgU0VORCBET1VCTEUtQ0hBUkFDVEVSICovCi0gICAgZXh0 ZXJuIHNob3J0IGRibHRbXTsKLSAgICBDSEFSICpwID0gTlVMTCwgKnAyLCAqczIsIGM7Ci0gICAg aW50IG4yID0gMDsKLSNlbmRpZiAvKiBDS1hYQ0hBUiAqLwotCi0gICAgaWYgKHR0eWZkIDwgMCkJ CQkvKiBOb3Qgb3Blbj8gKi8KLSAgICAgIHJldHVybigtMyk7Ci0jaWZkZWYgREVCVUcKLSAgICBp ZiAoZGVibG9nKSB7Ci0JLyogZGVidWcoRjEwMSwidHRvbCB0dHlmZCIsIiIsdHR5ZmQpOyAqLwot CWNraGV4ZHVtcCgidHRvbCBzIixzLG4pOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0j aWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkKLSAgICAgIGZkID0gZmRvdXQ7Ci0gICAgZWxz ZQotI2VuZGlmIC8qIE5FVENNRCAqLwotICAgICAgZmQgPSB0dHlmZDsKLQotI2lmZGVmIENLWFhD SEFSCi0vKiAgRG91YmxlIGFueSBjaGFyYWN0ZXJzIHRoYXQgbXVzdCBiZSBkb3VibGVkLiAgKi8K LSAgICBkZWJ1ZyhGMTAxLCJ0dG9sIGRibGZsYWciLCIiLGRibGZsYWcpOwotICAgIGlmIChkYmxm bGFnKSB7Ci0JcCA9IChDSEFSICopIG1hbGxvYyhuICsgbiArIDEpOwotCWlmIChwKSB7Ci0JICAg IHMyID0gczsKLQkgICAgcDIgPSBwOwotCSAgICBuMiA9IDA7Ci0JICAgIHdoaWxlICgqczIpIHsK LQkJYyA9ICpzMisrOwotCQkqcDIrKyA9IGM7Ci0JCW4yKys7Ci0JCWlmIChkYmx0Wyh1bnNpZ25l ZCkgY10gJiAyKSB7Ci0JCSAgICAqcDIrKyA9IGM7Ci0JCSAgICBuMisrOwotCQl9Ci0JICAgIH0K LQkgICAgcyA9IHA7Ci0JICAgIG4gPSBuMjsKLQkgICAgc1tuXSA9ICdcMCc7Ci0JfQotI2lmZGVm IERFQlVHCi0gICAgICAgIGNraGV4ZHVtcCgidHRvbCBkb3VibGVkIHMiLHMsbik7Ci0jZW5kaWYg LyogREVCVUcgKi8KLSAgICB9Ci0jZW5kaWYgLyogQ0tYWENIQVIgKi8KLQotICAgIHRyaWVzID0g VFRPTE1BWFQ7CQkJLyogQWxsb3cgdXAgdG8gdGhpcyBtYW55IHRyaWVzICovCi0gICAgbGVuID0g bjsJCQkJLyogUmVtZW1iZXIgb3JpZ2luYWwgbGVuZ3RoICovCi0KLSNpZmRlZiBDS19FTkNSWVBU SU9OCi0vKgotICBUaGlzIGlzIHRvIGF2b2lkIGVuY3J5cHRpbmcgYSBwYWNrZXQgdGhhdCBpcyBh bHJlYWR5IGVuY3J5cHRlZCwgZS5nLgotICB3aGVuIHdlIHJlc2VuZCBhIHBhY2tldCBkaXJlY3Rs eSBvdXQgb2YgdGhlIHBhY2tldCBidWZmZXIsIGFuZCBhbHNvIHRvCi0gIGF2b2lkIGVuY3J5cHRp bmcgYSBjb25zdGFudCAobGl0ZXJhbCkgc3RyaW5nLCB3aGljaCBjYW4gY2F1c2UgYSBtZW1vcnkK LSAgZmF1bHQuCi0qLwotICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pKSB7Ci0J aW50IHg7Ci0JaWYgKG54cGFja2V0IDwgbikgewotCSAgICBpZiAoeHBhY2tldCkgewotCQlmcmVl KHhwYWNrZXQpOwotCQl4cGFja2V0ID0gTlVMTDsKLQkJbnhwYWNrZXQgPSAwOwotCSAgICB9Ci0J ICAgIHggPSBuID4gMTAyNDAgPyBuIDogMTAyNDA7Ci0JICAgIHhwYWNrZXQgPSAoQ0hBUiAqKW1h bGxvYyh4KTsKLQkgICAgaWYgKCF4cGFja2V0KSB7Ci0JCWZwcmludGYoc3RkZXJyLCJ0dG9sIG1h bGxvYyBmYWlsdXJlXG4iKTsKLQkJcmV0dXJuKC0xKTsKLQkgICAgfSBlbHNlCi0JICAgICAgbnhw YWNrZXQgPSB4OwotCX0KLQltZW1jcHkoKGNoYXIgKil4cGFja2V0LChjaGFyICopcyxuKTsKLQlz ID0geHBhY2tldDsKLQlja190bl9lbmNyeXB0KChjaGFyICopcyxuKTsKLSAgICB9Ci0jZW5kaWYg LyogQ0tfRU5DUllQVElPTiAqLwotCi0gICAgd2hpbGUgKG4gPiAwICYmCi0JICAgKHRyaWVzLS0g PiAwCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotCSAgICAvKiBrZWVwIHRyeWluZyBpZiB3ZSBhcmUg ZW5jcnlwdGluZyAqLwotCSAgICB8fCBURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pCi0jZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAgICAgKSkgewkJCS8qIEJlIHBlcnNpc3Rl bnQgKi8KLQlkZWJ1ZyhGMTAxLCJ0dG9sIHRyeSIsIiIsVFRPTE1BWFQgLSB0cmllcyk7Ci0jaWZk ZWYgQkVPU09SQkVCT1gKLSAgICAgICAgaWYgKG5ldGNvbm4gJiYgIXR0cGlwZSAmJiAhdHRwdHkp Ci0JICB4ID0gbmV0dG9sKChjaGFyICopcyxuKTsJLyogV3JpdGUgc3RyaW5nIHRvIGRldmljZSAq LwotICAgICAgICBlbHNlCi0jZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KLSNpZmRlZiBJQk1YMjUK LQkgIGlmICh0dG5ldCA9PSBORVRfSVgyNSkKLQkgICAgLyoKLQkgICAgICogdGhpcyBpcyBhIG1v cmUgY29udHJvbGxlZCB3YXkgb2Ygd3JpdGluZyB0byBYMjUKLQkgICAgICogU1RSRUFNUywgaG93 ZXZlciB3cml0ZSBzaG91bGQgYWxzbyB3b3JrIQotCSAgICAgKi8KLQkgICAgeCA9IHgyNXdyaXRl KHR0eWZkLCBzLCBuKTsKLQkgIGVsc2UKLSNlbmRpZiAvKiBJQk1YMjUgKi8KLSNpZmRlZiBDS19T U0wKLQkgICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKLQkJaW50 IGVycm9yOwotCQkvKiBXcml0ZSB1c2luZyBTU0wgKi8KLSAgICAgICAgICAgICAgICBzc2xfcmV0 cnk6Ci0JCWlmIChzc2xfYWN0aXZlX2ZsYWcpCi0gICAgICAgICAgICAgICAgICB4ID0gU1NMX3dy aXRlKHNzbF9jb24sIHMsIG4pOwotCQllbHNlCi0gICAgICAgICAgICAgICAgICB4ID0gU1NMX3dy aXRlKHRsc19jb24sIHMsIG4pOwotCQlzd2l0Y2ggKFNTTF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9m bGFnP3NzbF9jb246dGxzX2Nvbix4KSkgewotICAgICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9S X05PTkU6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4ID09IG4pCi0JCSAgICAgIHJldHVybihs ZW4pOwotICAgICAgICAgICAgICAgICAgICBzICs9IHg7Ci0gICAgICAgICAgICAgICAgICAgIG4g LT0geDsKLSAgICAgICAgICAgICAgICAgICAgZ290byBzc2xfcmV0cnk7Ci0JCSAgY2FzZSBTU0xf RVJST1JfV0FOVF9XUklURToKLQkJICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0JCSAgICB4 ID0gMDsKLQkJICAgIGJyZWFrOwotCQkgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6Ci0gICAgICAg ICAgICAgICAgICAgIGlmICh4ICE9IDApCi0JCSAgICAgIHJldHVybigtMSk7Ci0JCSAgY2FzZSBT U0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKLQkJICBjYXNlIFNTTF9FUlJPUl9TU0w6Ci0JCSAg Y2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46Ci0JCSAgZGVmYXVsdDoKLQkJICAgIHR0Y2xvcygw KTsKLQkJICAgIHJldHVybigtMyk7Ci0JCX0KLQkgICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NM ICovCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBLUkI0Ci0jaWZkZWYgUkxPR0NPREUKLQkg ICAgaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOKSB7Ci0JCXJldHVybihrcmI0X2Rlc193cml0 ZSh0dHlmZCxzLG4pKTsKLQkgICAgfSBlbHNlCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNlbmRp ZiAvKiBLUkI0ICovCi0jaWZkZWYgS1JCNQotI2lmZGVmIFJMT0dDT0RFCi0gICAgICAgICAgICBp ZiAodHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4oa3Ji NV9kZXNfd3JpdGUodHR5ZmQsKGNoYXIgKilzLG4sMCkpOwotICAgICAgICAgICAgfSBlbHNlCi0j ZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBLUkI1X1UyVQotICAgICAgICAgICAgaWYgKHR0 bnByb3RvID09IE5QX0s1VTJVKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKGtyYjVfdTJ1X3dy aXRlKHR0eWZkLChjaGFyICopcyxuKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBL UkI1X1UyVSAqLwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwot CSAgICAgIHggPSB3cml0ZShmZCxzLG4pOwkvKiBXcml0ZSBzdHJpbmcgdG8gZGV2aWNlICovCi0K LQlpZiAoeCA9PSBuKSB7CQkJLyogV29ya2VkPyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJ0dG9sIG9r IiwiIix4KTsJLyogT0sgKi8KLSNpZmRlZiBDS1hYQ0hBUgotCSAgICBpZiAocCkgZnJlZShwKTsK LSNlbmRpZiAvKiBDS1hYQ0hBUiAqLwotCSAgICByZXR1cm4obGVuKTsJCS8qIERvbmUgKi8KLQl9 IGVsc2UgaWYgKHggPCAwKSB7CQkvKiBObywgZ290IGVycm9yPyAqLwotCSAgICBkZWJ1ZyhGMTAx LCJ0dG9sIHdyaXRlIGVycm9yIiwiIixlcnJubyk7Ci0jaWZkZWYgRVdPVUxEQkxPQ0sKLQkgICAg aWYgKGVycm5vID09IEVXT1VMREJMT0NLKSB7Ci0JCW1zbGVlcCgxMCk7Ci0JCWNvbnRpbnVlOwot CSAgICB9IGVsc2UKLSNlbmRpZiAvKiBFV09VTERCTE9DSyAqLwotI2lmZGVmIFRDUFNPQ0tFVAot CSAgICBpZiAobmV0Y29ubiAmJiB0dG5ldCA9PSBORVRfVENQQikgewotCQlkZWJ1ZyhGMTAxLCJ0 dG9sIFRDUCBlcnJvciIsIiIsZXJybm8pOwotCQl0dGNsb3MoMCk7CQkvKiBDbG9zZSB0aGUgY29u bmVjdGlvbi4gKi8KLQkJeCA9IC0zOwotCSAgICB9Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0j aWZkZWYgQ0tYWENIQVIKLQkgICAgaWYgKHApIGZyZWUocCk7Ci0jZW5kaWYgLyogQ0tYWENIQVIg Ki8KLQkgICAgcmV0dXJuKHgpOwotCX0gZWxzZSB7CQkJLyogTm8gZXJyb3IsIHNvIHBhcnRpYWwg c3VjY2VzcyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJ0dG9sIHBhcnRpYWwiLCIiLHgpOyAvKiBUaGlz IG5ldmVyIGhhcHBlbnMgKi8KLQkgICAgcyArPSB4OwkJCS8qIFBvaW50IHRvIHBhcnQgbm90IHdy aXR0ZW4geWV0ICovCi0JICAgIG4gLT0geDsJCQkvKiBBZGp1c3QgbGVuZ3RoICovCi0JICAgIGlm ICh4ID4gMCkgbXNsZWVwKDEwKTsJLyogV2FpdCAxMCBtc2VjICovCi0JfQkJCQkvKiBHbyBiYWNr IGFuZCB0cnkgYWdhaW4gKi8KLSAgICB9Ci0jaWZkZWYgQ0tYWENIQVIKLSAgICBpZiAocCkgZnJl ZShwKTsKLSNlbmRpZiAvKiBDS1hYQ0hBUiAqLwotICAgIHJldHVybihuIDwgMSA/IGxlbiA6IC0x KTsJCS8qIFJldHVybiB0aGUgcmVzdWx0cyAqLwotfQotCi0vKiAgVCBUIE8gQyAgLS0gIE91dHB1 dCBhIGNoYXJhY3RlciB0byB0aGUgY29tbXVuaWNhdGlvbiBsaW5lICAqLwotCi0vKgotIFRoaXMg ZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgaW50ZXJhY3RpdmUsIGNoYXJhY3Rlci1t b2RlIG9wZXJhdGlvbnMsCi0gbGlrZSB0ZXJtaW5hbCBjb25uZWN0aW9uLCBzY3JpcHQgZXhlY3V0 aW9uLCBkaWFsZXIgaS9vLCB3aGVyZSB0aGUgb3ZlcmhlYWQKLSBvZiB0aGUgc2lnbmFscyBhbmQg YWxhcm1zIGRvZXMgbm90IGNyZWF0ZSBhIGJvdHRsZW5lY2suCi0qLwotaW50Ci0jaWZkZWYgQ0tf QU5TSUMKLXR0b2MoY2hhciBjKQotI2Vsc2UKLXR0b2MoYykgY2hhciBjOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi0vKiB0dG9jICovIHsKLSNkZWZpbmUgVFRPQ19UTU8gMTUJCQkvKiBUaW1lb3V0 IGluIGNhc2Ugd2UgZ2V0IHN0dWNrICovCi0gICAgaW50IHh4LCBmZDsKLQotICAgIGlmICh0dHlm ZCA8IDApCQkJLyogQ2hlY2sgZm9yIG5vdCBvcGVuLiAqLwotICAgICAgcmV0dXJuKC0xKTsKLQot I2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpCi0gICAgICBmZCA9IGZkb3V0OwotICAgIGVs c2UKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSAgICAgIGZkID0gdHR5ZmQ7Ci0KLSAgICBjICY9IDB4 ZmY7Ci0gICAgLyogZGVidWcoRjEwMSwidHRvYyIsIiIsKENIQVIpIGMpOyAqLwotICAgIHNhdmFs ID0gc2lnbmFsKFNJR0FMUk0sdGltZXJoKTsJLyogRW5hYmxlIHRpbWVyIGludGVycnVwdCAqLwot ICAgIHh4ID0gYWxhcm0oVFRPQ19UTU8pOwkJLyogZm9yIHRoaXMgbWFueSBzZWNvbmRzLiAqLwot ICAgIGlmICh4eCA8IDApIHh4ID0gMDsJCQkvKiBTYXZlIG9sZCBhbGFybSB2YWx1ZS4gKi8KLSAg ICAvKiBkZWJ1ZyhGMTAxLCJ0dG9jIGFsYXJtIiwiIix4eCk7ICovCi0gICAgaWYgKAotI2lmZGVm IENLX1BPU0lYX1NJRwotCXNpZ3NldGptcChzamJ1ZiwxKQotI2Vsc2UKLQlzZXRqbXAoc2pidWYp Ci0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0JKSB7CQkvKiBUaW1lciB3ZW50IG9mZj8gKi8K LQl0dGltb2ZmKCk7CQkJLyogWWVzLCBjYW5jZWwgdGhpcyBhbGFybS4gKi8KLQlpZiAoeHggLSBU VE9DX1RNTyA+IDApIGFsYXJtKHh4IC0gVFRPQ19UTU8pOyAvKiBSZXN0b3JlIHByZXZpb3VzIG9u ZSAqLwotICAgICAgICAvKiBkZWJ1ZyhGMTAwLCJ0dG9jIHRpbWVvdXQiLCIiLDApOyAqLwotI2lm ZGVmIE5FVENPTk4KLQlpZiAoIW5ldGNvbm4pIHsKLSNlbmRpZiAvKiBORVRDT05OICovCi0JICAg IGRlYnVnKEYxMDEsInR0b2MgdGltZW91dCIsIiIsYyk7Ci0JICAgIGlmICh0dGZsb3cgPT0gRkxP X1hPTlgpIHsKLQkJZGVidWcoRjEwMSwidHRvYyBmbG93IiwiIix0dGZsb3cpOyAvKiBNYXliZSB3 ZSdyZSB4b2ZmJ2QgKi8KLSNpZm5kZWYgUGxhbjkKLSNpZmRlZiBQT1NJWAotCQkvKiBQT1NJWCB3 YXkgdG8gdW5zdGljay4gKi8KLQkJZGVidWcoRjEwMCwidHRvYyB0Y2Zsb3ciLCIiLHRjZmxvdyh0 dHlmZCxUQ09PTikpOwotI2Vsc2UKLSNpZmRlZiBCU0Q0CQkJCS8qIEJlcmtlbGV5IHdheSB0byBk byBpdC4gKi8KLSNpZmRlZiBUSU9DU1RBUlQKLS8qIC4uLi4gVXNlZCB0byBiZSAiaW9jdGwodHR5 ZmQsIFRJT0NTVEFSVCwgMCk7Ii4gIFdobyBrbm93cz8gKi8KLQkJewotCQkgIGludCB4ID0gMDsK LQkJICBkZWJ1ZyhGMTAxLCJ0dG9jIFRJT0NTVEFSVCIsIiIsaW9jdGwodHR5ZmQsIFRJT0NTVEFS VCwgJngpKTsKLQkJfQotI2VuZGlmIC8qIFRJT0NTVEFSVCAqLwotI2VuZGlmIC8qIEJTRDQgKi8K LQkJCQkJLyogSXMgdGhlcmUgYSBTeXMgViB3YXkgdG8gZG8gdGhpcz8gKi8KLSNlbmRpZiAvKiBQ T1NJWCAqLwotI2VuZGlmIC8qIFBsYW45ICovCi0JICAgIH0KLSNpZmRlZiBORVRDT05OCi0gICAg ICAgIH0KLSNlbmRpZiAvKiBORVRDT05OICovCi0JcmV0dXJuKC0xKTsJCQkvKiBSZXR1cm4gZmFp bHVyZSBjb2RlLiAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCByYzsKLSNpZmRlZiBCRU9T T1JCRUJPWAotI2lmZGVmIE5FVENPTk4KLSAgICAgICAgaWYgKG5ldGNvbm4gJiYgIXR0cGlwZSAm JiAhdHRwdHkpCi0JICByYyA9IG5ldHRvYyhjKTsKLSAgICAgICAgZWxzZQotI2VuZGlmIC8qICBC RU9TT1JCRUJPWCAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9O Ci0JICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkKLQkgICAgY2tfdG5fZW5jcnlw dCgmYywxKTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgSUJNWDI1Ci0JLyog cmllaG06IG1heWJlIHRoaXMgaXNuJ3QgbmVjZXNzYXJ5IGFmdGVyIGFsbC4gVGVzdCBwcm9ncmFt Ci0JICogd29ya2VkIGZpbmUgd2l0aCBkYXRhIGJlaW5nIHNlbnQgYW5kIHJldHJpZXZlZCB3aXRo IG5vcm1hbAotCSAqIHJlYWQncyBhbmQgd3JpdGVzIQotCSAqLwotCWlmICh0dG5ldCA9PSBORVRf SVgyNSkKLQkgIHJjID0geDI1d3JpdGUodHR5ZmQsJmMsMSk7IC8qIGFzIGFib3ZlIGZvciBYMjUg c3RyZWFtcyAqLwotCWVsc2UKLSNlbmRpZiAvKiBJQk1YMjUgKi8KLSNpZmRlZiBDS19TU0wKLQkg IGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7Ci0JICAgICAgaW50IGVy cm9yOwotCSAgICAgIC8qIFdyaXRlIHVzaW5nIFNTTCAqLwotCSAgICAgIGlmIChzc2xfYWN0aXZl X2ZsYWcpCi0gICAgICAgICAgICAgICAgcmMgPSBTU0xfd3JpdGUoc3NsX2NvbiwgJmMsIDEpOwot CSAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByYyA9IFNTTF93cml0ZSh0bHNfY29uLCAmYywg MSk7Ci0JICAgICAgc3dpdGNoIChTU0xfZ2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29u OnRsc19jb24scmMpKXsKLQkJY2FzZSBTU0xfRVJST1JfTk9ORToKLQkJICBicmVhazsKLQkJY2Fz ZSBTU0xfRVJST1JfV0FOVF9XUklURToKLQkJY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotCQkg IHJjID0gMDsKLQkJICBicmVhazsKLQkJY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKLQkJICBpZiAo cmMgIT0gMCkKLQkJICAgIHJldHVybigtMSk7Ci0JCWNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9M T09LVVA6Ci0JCWNhc2UgU1NMX0VSUk9SX1NTTDoKLQkJY2FzZSBTU0xfRVJST1JfWkVST19SRVRV Uk46Ci0JCWRlZmF1bHQ6Ci0JCSAgdHRjbG9zKDApOwotCQkgIHJldHVybigtMSk7Ci0JICAgICAg fQotCSAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNp ZmRlZiBLUkI0Ci0jaWZkZWYgUkxPR0NPREUKLQkgIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJ TikgewotCSAgICAgIHJjID0gKGtyYjRfZGVzX3dyaXRlKHR0eWZkLChjaGFyICopJmMsMSkgPT0g MSk7Ci0JICB9IGVsc2UKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2VuZGlmIC8qIEtSQjQgKi8K LSNpZmRlZiBLUkI1Ci0jaWZkZWYgUkxPR0NPREUKLSAgICAgICAgICBpZiAodHRucHJvdG8gPT0g TlBfRUs1TE9HSU4pIHsKLSAgICAgICAgICAgICAgcmMgPSAoa3JiNV9kZXNfd3JpdGUodHR5ZmQs JmMsMSwwKSA9PSAxKTsKLSAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwot I2lmZGVmIEtSQjVfVTJVCi0gICAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJVKSB7Ci0g ICAgICAgICAgICAgIHJjID0gKGtyYjVfdTJ1X3dyaXRlKHR0eWZkLCZjLDEpID09IDEpOwotICAg ICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIEtSQjVfVTJVICovCi0jZW5kaWYgLyogS1JCNSAqLwot I2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0JICAgIHJjID0gd3JpdGUoZmQsJmMsMSk7CS8qIFRy eSB0byB3cml0ZSB0aGUgY2hhcmFjdGVyLiAqLwotCWlmIChyYyA8IDEpIHsJCQkvKiBGYWlsZWQg Ki8KLQkgICAgdHRpbW9mZigpOwkJCS8qIFR1cm4gb2ZmIHRoZSBhbGFybS4gKi8KLQkgICAgYWxh cm0oeHgpOwkJCS8qIFJlc3RvcmUgcHJldmlvdXMgYWxhcm0uICovCi0JICAgIGRlYnVnKEYxMDEs InR0b2MgZXJybm8iLCIiLGVycm5vKTsgLyogTG9nIHRoZSBlcnJvciwgKi8KLQkgICAgcmV0dXJu KC0xKTsJCQkvKiBhbmQgcmV0dXJuIHRoZSBlcnJvciBjb2RlLiAqLwotCX0KLSAgICB9Ci0gICAg dHRpbW9mZigpOwkJCQkvKiBTdWNjZXNzLCB0dXJuIG9mZiB0aGUgYWxhcm0uICovCi0gICAgYWxh cm0oeHgpOwkJCQkvKiBSZXN0b3JlIHByZXZpb3VzIGFsYXJtLiAqLwotICAgIHJldHVybigwKTsJ CQkJLyogUmV0dXJuIGdvb2QgY29kZS4gKi8KLX0KLQotLyogIFQgVCBJIE4gTCAgLS0gIFJlYWQg YSByZWNvcmQgKHVwIHRvIGJyZWFrIGNoYXJhY3RlcikgZnJvbSBjb21tIGxpbmUuICAqLwotLyoK LSAgUmVhZHMgdXAgdG8gIm1heCIgY2hhcmFjdGVycyBmcm9tIHRoZSBjb25uZWN0aW9uLCB0ZXJt aW5hdGluZyBvbjoKLSAgICAoYSkgdGhlIHBhY2tldCBsZW5ndGggZmllbGQgaWYgdGhlICJ0dXJu IiBhcmd1bWVudCBpcyB6ZXJvLCBvcgotICAgIChiKSBvbiB0aGUgcGFja2V0LWVuZCBjaGFyYWN0 ZXIgKGVvbCkgaWYgdGhlICJ0dXJuIiBhcmd1bWVudCBpcyBub256ZXJvCi0gICAgKGMpIGEgY2Vy dGFpbiBudW1iZXIgb2YgQ3RybC1DJ3MgaW4gYSByb3cKLQotICBSZXR1cm5zOgotICAgID49IDAs IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIHVwb24gc3VjY2VzczsKLSAgICAtMSBpZiAi bWF4IiBleGNlZWRlZCwgdGltZW91dCwgb3Igb3RoZXIgY29ycmVjdGFibGUgZXJyb3I7Ci0gICAg LTIgb24gdXNlciBpbnRlcnJ1cHRpb24gKGMpOwotICAgIC0zIG9uIGZhdGFsIGVycm9yIGxpa2Ug Y29ubmVjdGlvbiBsb3N0LgotCi0gIFRoZSBuYW1lIG9mIHRoaXMgcm91dGluZSBkYXRlcyBmcm9t IHRoZSBlYXJseSBkYXlzIHdoZW4gS2VybWl0IHBhY2tldHMKLSAgd2VyZSwgaW5kZWVkLCBhbHdh eXMgbGluZXMgb2YgdGV4dC4gIFRoYXQgd2FzIGJlZm9yZSBjb250cm9sLWNoYXJhY3RlcgotICB1 bnByZWZpeGluZyBhbmQgbGVuZ3RoLWRyaXZlbiBwYWNrZXQgZnJhbWluZyB3ZXJlIGludHJvZHVj ZWQsIHdoaWNoIHRoaXMKLSAgdmVyc2lvbiBoYW5kbGUuICBOQjogdGhpcyByb3V0aW5lIGlzIE9O TFkgZm9yIHJlYWRpbmcgaW5jb21pbmcgS2VybWl0Ci0gIHBhY2tldHMsIG5vdGhpbmcgZWxzZS4g IFRvIHJlYWQgb3RoZXIga2luZHMgb2YgaW5jb21pbmcgbWF0ZXJpYWwsIHVzZQotICB0dGluYygp IG9yIHR0eGluKCkuCi0KLSAgVGhlIGJ5dGVzIHRoYXQgd2VyZSBpbnB1dCBhcmUgY29waWVkIGlu dG8gImRlc3QiIHdpdGggdGhlaXIgcGFyaXR5IGJpdHMKLSAgc3RyaXBwZWQgaWYgcGFyaXR5IHdh cyBzZWxlY3RlZC4gIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLgotICBCeXRlcyBh ZnRlciB0aGUgZW9sIGFyZSBhdmFpbGFibGUgdXBvbiB0aGUgbmV4dCBjYWxsIHRvIHRoaXMgZnVu Y3Rpb24uCi0KLSAgVGhlIGlkZWEgaXMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBzeXN0ZW0g Y2FsbHMgcGVyIHBhY2tldCwgYW5kIGFsc28gdG8KLSAgbWluaW1pemUgdGltZW91dHMuICBUaGlz IGZ1bmN0aW9uIGlzIHRoZSBpbm5lciBsb29wIG9mIHRoZSBwcm90b2NvbCBhbmQgbXVzdAotICBi ZSBhcyBlZmZpY2llbnQgYXMgcG9zc2libGUuICBUaGUgY3VycmVudCBzdHJhdGVneSBpcyB0byB1 c2UgbXlyZWFkKCksIGEKLSAgbWFjcm8gdG8gbWFuYWdlIGJ1ZmZlcmVkIChhbmQgZ2VuZXJhbGx5 IG5vbmJsb2NraW5nKSByZWFkcy4KLQotICBXQVJOSU5HOiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHBh cmNoaygpLCB3aGljaCBpcyBkZWZpbmVkIGluIGFub3RoZXIgbW9kdWxlLgotICBOb3JtYWxseSwg Y2t1dGlvLmMgZG9lcyBub3QgZGVwZW5kIG9uIGNvZGUgZnJvbSBhbnkgb3RoZXIgbW9kdWxlLCBi dXQgdGhlcmUKLSAgaXMgYW4gZXhjZXB0aW9uIGluIHRoaXMgY2FzZSBiZWNhdXNlIGFsbCB0aGUg b3RoZXIgY2s/dGlvLmMgbW9kdWxlcyBhbHNvCi0gIG5lZWQgdG8gY2FsbCBwYXJjaGsoKSwgc28g aXQncyBiZXR0ZXIgdG8gaGF2ZSBpdCBkZWZpbmVkIGluIGEgY29tbW9uIHBsYWNlLgotKi8KLSNp ZmRlZiBDVFJMQwotI3VuZGVmIENUUkxDCi0jZW5kaWYgLyogQ1RSTEMgKi8KLSNkZWZpbmUgQ1RS TEMgJ1wwMycKLS8qCi0gIFdlIGhhdmUgZm91ciBkaWZmZXJlbnQgZGVjbGFyYXRpb25zIGhlcmUg YmVjYXVzZToKLSAgKGEpIHRvIGFsbG93IEtlcm1pdCB0byBiZSBidWlsdCB3aXRob3V0IHRoZSBh dXRvbWF0aWMgcGFyaXR5IHNlbnNpbmcgZmVhdHVyZQotICAoYikgb25lIG9mIGVhY2ggdHlwZSBm b3IgQU5TSSBDLCBvbmUgZm9yIG5vbi1BTlNJLgotKi8KLSNpZm5kZWYgTk9YRkVSCi0KLXN0YXRp YyBpbnQgcHVzaGVkYmFjayA9IDA7Ci0KLWludAotI2lmZGVmIFBBUlNFTlNFCi0jaWZkZWYgQ0tf QU5TSUMKLXR0aW5sKENIQVIgKmRlc3QsIGludCBtYXgsaW50IHRpbW8sIENIQVIgZW9sLCBDSEFS IHN0YXJ0LCBpbnQgdHVybikKLSNlbHNlCi10dGlubChkZXN0LG1heCx0aW1vLGVvbCxzdGFydCx0 dXJuKSBpbnQgbWF4LHRpbW8sdHVybjsgQ0hBUiAqZGVzdCwgZW9sLCBzdGFydDsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotI2Vsc2UgLyogbm90IFBBUlNFTlNFICovCi0jaWZkZWYgQ0tfQU5TSUMK LXR0aW5sKENIQVIgKmRlc3QsIGludCBtYXgsaW50IHRpbW8sIENIQVIgZW9sKQotI2Vsc2UKLXR0 aW5sKGRlc3QsbWF4LHRpbW8sZW9sKSBpbnQgbWF4LHRpbW87IENIQVIgKmRlc3QsIGVvbDsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotI2VuZGlmIC8qIFBBUlNFTlNFICovCi0vKiB0dGlubCAqLyB7 Ci0KLSNpZm5kZWYgTVlSRUFECi0gICAgQ0hBUiBjaCwgZHVtOwotI2VuZGlmIC8qIE1ZUkVBRCAq LwotI2lmZGVmIFBBUlNFTlNFCi0gICAgaW50IHBrdGxlbiA9IC0xOwotICAgIGludCBscGxlbiA9 IDA7Ci0gICAgaW50IGhhdmVsZW4gPSAwOwotI2VuZGlmIC8qIFBBUlNFTlNFICovCi0gICAgaW50 IGZkOwotICAgIGludCBzb3BtYXNrID0gMHhmZjsJCQkvKiBTdGFydC1PZi1QYWNrZXQgbWFzayAq LwotI2lmZGVmIENLWFhDSEFSCi0gICAgZXh0ZXJuIHNob3J0IGRibHRbXTsJCS8qIElnbm9yZS1j aGFyYWN0ZXIgdGFibGUgKi8KLSAgICBleHRlcm4gaW50IGlnbmZsYWc7Ci0jZW5kaWYgLyogQ0tY WENIQVIgKi8KLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBleHRlcm4gQ0hBUiBzdGNocjsKLSNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KLSAgICBpbnQgeDsKLSNpZmRlZiBTVFJFQU1JTkcKLSAgICBleHRl cm4gaW50IHN0cmVhbWluZzsKLSAgICBleHRlcm4gaW50IHNuZHR5cDsKLSNlbmRpZiAvKiBTVFJF QU1JTkcgKi8KLQotICAgIGlmICh0dHlmZCA8IDApIHJldHVybigtMyk7ICAgICAgICAgIC8qIE5v dCBvcGVuLiAqLwotLyoKLSAgSW4gRmVicnVhcnkgMjAwNyBJIGZpeGVkIHR0aW5sKCkgdG8gd29y ayBiZXR0ZXIgdW5kZXIgdGhlIHRydWx5IGF3ZnVsCi0gIGNvbmRpdGlvbnMgZW5jb3VudGVyZWQg YnkgdGhlIEFNLUFQRVggb2NlYW5vZ3JhcGhpYyBmbG9hdHMgdGhhdCBnYXRoZXIKLSAgaHVycmlj YW5lIGRhdGEgYW5kIHBob25lIGhvbWUgdXNpbmcgSXJpZGl1bSBzYXRlbGxpdGUgbW9kZW1zLCB3 aGljaCB1bmRlcgotICBjZXJ0YWluIGNvbmRpdGlvbnMsIGNhbiBzZW5kIHR3byBwYWNrZXRzIGJh Y2sgdG8gYmFjayBhZnRlciBhIGxvbmcgcGF1c2UuCi0gIEluIHRoaXMgY2FzZSB0aGUgc2Vjb25k IHBhY2tldCB3b3VsZCBiZSBpZ25vcmVkIGJlY2F1c2UgdGhlIFNPSCB3YXMgc2tpcHBlZAotICBk dWUgdG8gdGhlIHR0Zmx1aSgpIGNhbGwuICBCdXQgdGhlIHJld29ya2VkIGxvb2thaGVhZC9wdXNo YmFjayBsb2dpYyBicm9rZQotICBLZXJtaXQgdHJhbnNmZXJzIG9uIGVuY3J5cHRlZCBjb25uZWN0 aW9ucy4gIFRoaXMgd2FzIGZpeGVkIDEyLTEzIEF1Z3VzdAotICAyMDA3LiAgQWxsIG9mIHRoaXMg aGFwcGVuZWQgYWZ0ZXIgOC4wLjIxMiBEZXYuMjcgd2FzIHJlbGVhc2VkIGFuZCBiZWZvcmUKLSAg RGV2LjI4LCBzbyBubyBoYXJtIGRvbmUgb3RoZXIgdGhhbiB0aGUgZGVsYXkuCi0qLwotICAgIGRl YnVnKEYxMDEsInR0aW5sIG1heCIsIiIsbWF4KTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dGlubCB0aW1v IiwiIix0aW1vKTsKLQotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpCi0gICAgICBmZCA9 IGZkaW47Ci0gICAgZWxzZQotI2VuZGlmIC8qIE5FVENNRCAqLwotICAgICAgZmQgPSB0dHlmZDsK LQotI2lmZGVmIENPTU1FTlQKLSAgICBpZiAoeGxvY2FsICYmIGNvbmNoaygpID4gMCkJCS8qIEFs bG93IGZvciBjb25zb2xlIGludGVycnVwdGlvbnMgKi8KLSAgICAgIHJldHVybigtMSk7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotCi0gICAgKmRlc3QgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAg ICAgLyogQ2xlYXIgZGVzdGluYXRpb24gYnVmZmVyICovCi0gICAgaWYgKHRpbW8gPCAwKSB0aW1v ID0gMDsJCS8qIFNhZmV0eSAqLwotICAgIGlmICh0aW1vKSB7CQkJCS8qIERvbid0IHRpbWUgb3V0 IGlmIHRpbW8gPT0gMCAqLwotCWludCB4eDsKLQlzYXZhbCA9IHNpZ25hbChTSUdBTFJNLHRpbWVy aCk7CS8qIEVuYWJsZSB0aW1lciBpbnRlcnJ1cHQgKi8KLQl4eCA9IGFsYXJtKHRpbW8pOwkJLyog U2V0IGl0LiAqLwotCWRlYnVnKEYxMDEsInR0aW5sIGFsYXJtIiwiIix4eCk7Ci0gICAgfQotICAg IGlmICgKLSNpZmRlZiBDS19QT1NJWF9TSUcKLQlzaWdzZXRqbXAoc2pidWYsMSkKLSNlbHNlCi0J c2V0am1wKHNqYnVmKQotI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLwotCSkgewkJCQkvKiBUaW1l ciB3ZW50IG9mZj8gKi8KLQlkZWJ1ZyhGMTAwLCJ0dGlubCB0aW1vdXQiLCIiLDApOyAvKiBHZXQg aGVyZSBvbiB0aW1lb3V0LiAqLwotCS8qIGRlYnVnKEYxMTAsIiB3aXRoIiwoY2hhciAqKSBkZXN0 LDApOyAqLwotCXR0aW1vZmYoKTsJCQkvKiBUdXJuIG9mZiB0aW1lciAqLwotCXJldHVybigtMSk7 CQkJLyogYW5kIHJldHVybiBlcnJvciBjb2RlLiAqLwotICAgIH0gZWxzZSB7Ci0JcmVnaXN0ZXIg aW50IGksIG4gPSAtMTsJCS8qIGxvY2FsIHZhcmlhYmxlcyAqLwotCWludCBjY24gPSAwOwotI2lm ZGVmIFBBUlNFTlNFCi0JcmVnaXN0ZXIgaW50IGZsYWcgPSAwOwotCWRlYnVnKEYwMDAsInR0aW5s IHN0YXJ0IiwiIixzdGFydCk7Ci0jZW5kaWYgLyogUEFSU0VOU0UgKi8KLQotCXR0cG1zayA9IHR0 cHJ0eSA/IDAxNzcgOiAwMzc3OwkvKiBTZXQgcGFyaXR5IHN0cmlwcGluZyBtYXNrLiAqLwotCXNv cG1hc2sgPSBuZWVkcGNoayA/IDAxNzcgOiB0dHBtc2s7IC8qIEFuZCBTT1AgbWF0Y2hpbmcgbWFz ay4gKi8KLQotLyogTm93IHJlYWQgaW50byBkZXN0aW5hdGlvbiwgc3RyaXBwaW5nIHBhcml0eSBh bmQgbG9va2luZyBmb3IgdGhlICovCi0vKiB0aGUgcGFja2V0IHRlcm1pbmF0b3IsIGFuZCBhbHNv IGZvciBzZXZlcmFsIEN0cmwtQydzIHR5cGVkIGluIGEgcm93LiAqLwotCi0JaSA9IDA7CQkJCS8q IERlc3RpbmF0aW9uIGluZGV4ICovCi0JZGVidWcoRjEwMSwidHRpbmwgZW9sIiwiIixlb2wpOwot Ci0Jd2hpbGUgKGkgPCBtYXgtMSkgewotI2lmZGVmIE1ZUkVBRAotCSAgICBlcnJubyA9IDA7Ci0J ICAgIC8qIE9uIGVuY3J5cHRlZCBjb25uZWN0aW9ucyBteXJlYWQgcmV0dXJucyBlbmNyeXB0ZWQg Ynl0ZXMgKi8KLQkgICAgbiA9IG15cmVhZCgpOwotCSAgICBkZWJ1ZyhGMDAwLCJUVElOTCBteXJl YWQgY2hhciIsIiIsbik7Ci0JICAgIGlmIChuIDwgMCkgewkvKiBUaW1lb3V0IG9yIGkvbyBlcnJv cj8gKi8KLSNpZmRlZiBERUJVRwotCQlpZiAoZGVibG9nKSB7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJ0 dGlubCBteXJlYWQgZmFpbHVyZSwgbiIsIiIsbik7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJ0dGlubCBt eXJlYWQgZXJybm8iLCIiLGVycm5vKTsKLQkJfQotI2VuZGlmIC8qIERFQlVHICovCi0JCS8qIERv bid0IGxldCBFSU5UUiBicmVhayBwYWNrZXRzLiAqLwotCQlpZiAobiA9PSAtMykgewotCQkgICAg aWYgKGVycm5vID09IEVJTlRSICYmIGkgPiAwKSB7Ci0JCQlkZWJ1ZyhGMTExLCJ0dGlubCBFSU5U UiBteXJlYWQgaSIsImNvbnRpbnVpbmciLGkpOwotCQkJY29udGludWU7Ci0JCSAgICB9IGVsc2Ug ewotCQkJZGVidWcoRjExMCwidHRpbmwgbm9uLUVJTlRSIC0zIiwiY2xvc2luZyIsMCk7Ci0JCQl3 YXNjbG9zZWQgPSAxOwotCQkJdHRpbW9mZigpOwkvKiBUdXJuIG9mZiB0aW1lciAqLwotCQkJdHRj bG9zKDApOwotCQkJcmV0dXJuKG4pOwotCQkgICAgfQotCQl9IGVsc2UgaWYgKG4gPT0gLTIgJiYg bmV0Y29ubiAvKiAmJiB0aW1vID09IDAgKi8gKSB7Ci0JCSAgICAvKiBIZXJlIHdlIHRyeSB0byBj YXRjaCBicm9rZW4gbmV0d29yayBjb25uZWN0aW9ucyAqLwotCQkgICAgLyogZXZlbiB3aGVuIGlv Y3RsKCkgYW5kIHJlYWQoKSBkbyBub3QgY2F0Y2ggdGhlbSAqLwotCQkgICAgZGVidWcoRjExMSwi dHRpbmwgbmV0d29yayBteXJlYWQgZmFpbHVyZSIsImNsb3NpbmciLG4pOwotCQkgICAgd2FzY2xv c2VkID0gMTsKLQkJICAgIHR0aW1vZmYoKTsKLQkJICAgIHR0Y2xvcygwKTsKLQkJICAgIHJldHVy bigtMyk7Ci0JCX0KLSNpZmRlZiBTVFJFQU1JTkcKLQkJLyogU3RyZWFtaW5nIGFuZCBubyBkYXRh IHRvIHJlYWQgKi8KLQkJZWxzZSBpZiAobiA9PSAwICYmIHN0cmVhbWluZyAmJiBzbmR0eXAgPT0g J0QnKQotCQkgIHJldHVybigwKTsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQkJYnJlYWs7CQkJ LyogQnJlYWsgb3V0IG9mIHdoaWxlIGxvb3AgKi8KLQkgICAgfQotCi0jZWxzZSAvKiBub3QgTVlS RUFEIChpcyB0aGlzIGNvZGUgdXNlZCBhbnl3aGVyZSBhbnkgbW9yZT8pICovCi0vKgotICBUaGUg bm9uLU1ZUkVBRCBjb2RlIGRhdGVzIGZyb20gdGhlIDE5ODBzIGFuZCB3YXMgbmVlZGVkIG9uIGNl cnRhaW4gcGxhdGZvcm1zCi0gIHdoZXJlIHRoZXJlIHdlcmUgbm8gbm9uYmxvY2tpbmcgcmVhZHMu ICAtZmRjLCAyMDA3LzAyLzIyLgotKi8KLQkgICAgaWYgKChuID0gcmVhZChmZCwgJm4sIDEpKSA8 IDEpCi0JICAgICAgYnJlYWs7CQkJLyogRXJyb3IgLSBicmVhayBvdXQgb2Ygd2hpbGUgbG9vcCAq LwotCi0jZW5kaWYgLyogTVlSRUFEICovCi0KLQkgICAgLyogR2V0IGhlcmUgd2l0aCBjaGFyIGlu IG4gKi8KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLQkgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9F TkNSWVBUSU9OKSAmJiAhcHVzaGVkYmFjaykgewotCQlDSEFSIGNoID0gbjsKLQkJY2tfdG5fZGVj cnlwdCgoY2hhciAqKSZjaCwxKTsKLQkJbiA9IGNoOwotCQlkZWJ1ZyhGMDAwLCJUVElOTCBkZWNy eXAgY2hhciIsIiIsbik7Ci0JICAgIH0KLQkgICAgcHVzaGVkYmFjayA9IDA7Ci0jZW5kaWYgLyog Q0tfRU5DUllQVElPTiAqLwotCi0jaWZkZWYgVENQU09DS0VUCi0JICAgIGlmIChuID09IElBQyAm JgkJLyogSGFuZGxlIFRlbG5ldCBvcHRpb25zICovCi0JCSgoeGxvY2FsICYmIG5ldGNvbm4gJiYg SVNfVEVMTkVUKCkpIHx8Ci0JCSgheGxvY2FsICYmIHNzdGVsbmV0KSkpIHsKLQkJbiA9IHR0X3Ru b3B0KG4pOwotCQlpZiAobiA8IDApCi0JCSAgcmV0dXJuKG4pOwotI2lmbmRlZiBOT1BBUlNFTgot CQllbHNlIGlmIChuID09IDEpCi0JCSAgc3RhcnQgPSBzdGNocjsKLSNlbmRpZiAvKiBOT1BBUlNF TiAqLwotCQlpZiAobiAhPSAyNTUpCQkvKiBObyBkYXRhIC0gZ28gYmFjayBmb3IgbmV4dCBjaGFy ICovCi0JCSAgY29udGludWU7Ci0JICAgIH0JCQkJLyogUXVvdGVkIElBQyAtIGtlZXAgZ29pbmcg Ki8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotI2lmZGVmIENLWFhDSEFSCi0JICAgIGlmIChp Z25mbGFnKQotCSAgICAgIGlmIChkYmx0Wyh1bnNpZ25lZCkgbl0gJiAxKSAvKiBDaGFyYWN0ZXIg dG8gaWdub3JlPyAqLwotCQljb250aW51ZTsKLSNlbmRpZiAvKiBDS1hYQ0hBUiAqLwotLyoKLSAg VXNlIHBhcml0eSBtYXNrLCByYXRoZXIgdGhhbiBhbHdheXMgc3RyaXBwaW5nIHBhcml0eSwgdG8g Y2hlY2sgZm9yCi0gIGNhbmNlbGxhdGlvbi4gIE90aGVyd2lzZSwgcnVucyBsaWtlIFx4MDNceDgz XHgwMyBpbiBhIHBhY2tldCBjb3VsZCBjYW5jZWwKLSAgdGhlIHRyYW5zZmVyIHdoZW4gcGFyaXR5 IGlzIE5PTkUuICAoTm90ZSB0aGF0IFx4MDNceDAzXHgwMyBpcyBleHRyZW1lbHkKLSAgdW5saWtl bHkgZHVlIHRvIHJ1bi1sZW5ndGggZW5jb2RpbmcuKQotKi8KLQkgICAgLyogQ2hlY2sgY2FuY2Vs bGF0aW9uICovCi0JICAgIGlmICgheGxvY2FsICYmIHhmcmNhbiAmJiAoKG4gJiB0dHBtc2spID09 IHhmcmNocikpIHsKLQkJaWYgKCsrY2NuID49IHhmcm51bSkgewkvKiBJZiB4ZnJudW0gaW4gYSBy b3csIGJhaWwgb3V0LiAqLwotCQkgICAgaWYgKHRpbW8pIHsJCS8qIENsZWFyIHRpbWVyLiAqLwot CQkJdHRpbW9mZigpOwotCQkgICAgfQotCQkgICAgaWYgKHhmcmNociA8IDMyKQotCQkgICAgICBw cmludGYoIl4lYy4uLlxyXG4iLChjaGFyKSh4ZnJjaHIrNjQpKTsKLQkJICAgIGVsc2UKLQkJICAg ICAgcHJpbnRmKCJDYW5jZWxlZC4uLlxyXG4iKTsKLQkJICAgIHJldHVybigtMik7Ci0JCX0KLQkg ICAgfSBlbHNlIGNjbiA9IDA7CQkvKiBObyBjYW5jZWxsYXRpb24sIHJlc2V0IGNvdW50ZXIsICov Ci0KLSNpZmRlZiBQQVJTRU5TRQotLyoKLSAgUmVzdHJ1Y3R1cmVkIGNvZGUgYWxsb3dzIGZvciBh IG5ldyBwYWNrZXQgdG8gYXBwZWFyIHNvbWV3aGVyZSBpbiB0aGUKLSAgbWlkZGxlIG9mIGEgcHJl dmlvdXMgb25lLiAgLWZkYywgMjQgRmViIDIwMDcuCi0qLwotCSAgICBpZiAoKG4gJiBzb3BtYXNr KSA9PSBzdGFydCkgeyAvKiBTdGFydCBvZiBQYWNrZXQgKi8KLQkJZGVidWcoRjEwMSwidHRpbmwg U09QIGkiLCIiLGkpOwotCQlmbGFnID0gMTsJCS8qIEZsYWcgdGhhdCB3ZSBhcmUgaW4gYSBwYWNr ZXQgKi8KLQkJaGF2ZWxlbiA9IDA7CQkvKiBJbnZhbGlkYXRlIHByZXZpb3VzIGxlbmd0aCAqLwot CQlwa3RsZW4gPSAtMTsJCS8qIChpZiBhbnkpIGluIGNhc2Ugd2Ugd2VyZSAqLwotCQlscGxlbiA9 IDA7CQkvKiBhbHJlYWQgcHJvY2Vzc2FuZCBhIHBhY2tldCAqLwotCQlpID0gMDsJCQkvKiBhbmQg cmVzZXQgdGhlIGRlc3QgYnVmZmVyIHBvaW50ZXIgKi8KLQkgICAgfQotCSAgICBpZiAoZmxhZyA9 PSAwKSB7CQkvKiBObyBTT1AgeWV0Li4uICovCi0JCWRlYnVnKEYwMDAsInR0aW5sIHNraXBwaW5n IiwiIixuKTsKLQkJY29udGludWU7Ci0JICAgIH0KLQkgICAgZGVzdFtpKytdID0gbiAmIHR0cG1z azsKLS8qCi0gIElmIHdlIGhhdmUgbm90IGJlZW4gaW5zdHJ1Y3RlZCB0byB3YWl0IGZvciBhIHR1 cm5hcm91bmQgY2hhcmFjdGVyLCB3ZSBjYW4gZ28KLSAgYnkgdGhlIHBhY2tldCBsZW5ndGggZmll bGQuICBJZiB0dXJuICE9IDAsIHdlIG11c3Qgd2FpdCBmb3IgdGhlIGVuZCBvZiBsaW5lCi0gIChl b2wpIGNoYXJhY3RlciBiZWZvcmUgcmV0dXJuaW5nLiAgVGhpcyBpcyBhbiBlZ3JlZ2lvdXMgdmlv bGF0aW9uIG9mIGFsbAotICBwcmluY2lwbGVzIG9mIGxheWVyaW5nLi4uICAoTGVzcyBlZ3JlZ2lv dXMgaW4gQy1LZXJtaXQgOS4wLCBpbiB3aGljaCB3ZSBnbwotICBieSB0aGUgbGVuZ3RoIGZpZWxk IGJ1dCBhbHNvIGxvb2sgZm9yIHRoZSBlb2wgaW4gY2FzZSBpdCBhcnJpdmVzIGVhcmx5LAotICBl LmcuIGlmIHRoZSBsZW5ndGggZmllbGQgd2FzIGNvcnJ1cHRlZCB1cHdhcmRzLikKLSovCi0JICAg IGlmICghaGF2ZWxlbikgewotCQlpZiAoaSA9PSAyKSB7Ci0JCSAgICBpZiAoKGRlc3RbMV0gJiAw eDdmKSA8IDMyKSAvKiBHYXJiYWdlIGluIGxlbmd0aCBmaWVsZCAqLwotCQkgICAgICByZXR1cm4o LTEpOwkvKiBmZGMgLSAxMyBBcHIgMjAxMCAqLwotCQkgICAgcGt0bGVuID0geHVuY2hhcihkZXN0 WzFdICYgMHg3Zik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwa3RsZW4gPiA5NCkJLyogUnVi b3V0IGluIGxlbmd0aCBmaWVsZCAqLwotCQkgICAgICByZXR1cm4oLTEpOwkvKiBmZGMgLSAxMyBB cHIgMjAxMCAqLwotCQkgICAgaWYgKHBrdGxlbiA+IDEpIHsKLQkJCWhhdmVsZW4gPSAxOwotCQkJ ZGVidWcoRjEwMSwidHRpbmwgcGt0bGVuIHZhbHVlIiwiIixwa3RsZW4pOwotCQkgICAgfQotCQl9 IGVsc2UgaWYgKGkgPT0gNSAmJiBwa3RsZW4gPT0gMCkgewotCQkgICAgbHBsZW4gPSB4dW5jaGFy KGRlc3RbNF0gJiAweDdmKTsKLQkJfSBlbHNlIGlmIChpID09IDYgJiYgcGt0bGVuID09IDApIHsK LQkJICAgIHBrdGxlbiA9IGxwbGVuICogOTUgKyB4dW5jaGFyKGRlc3RbNV0gJiAweDdmKSArIDU7 Ci0JCSAgICBoYXZlbGVuID0gMTsKLQkJICAgIGRlYnVnKEYxMDEsInR0aW5sIGV4dGVuZGVkIGxl bmd0aCIsIiIscGt0bGVuKTsKLQkJfQotCSAgICB9Ci0KLS8qCi0gIFN1cHBvc2Ugd2UgbG9va2Vk IGF0IHRoZSBzZXF1ZW5jZSBudW1iZXIgaGVyZSBhbmQgZm91bmQgaXQgd2FzIG91dCBvZgotICBy YW5nZT8gIFRoaXMgd291bGQgbWVhbiBlaXRoZXIgKGEpIGluY29taW5nIHBhY2tldHMgaGFkIFNP UCB1bnByZWZpeGVkCi0gIGFuZCB3ZSBhcmUgb3V0IG9mIHN5bmMsIG9yIChiKSB0aGUgcGFja2V0 IGlzIGRhbWFnZWQuICBTaW5jZSAoYSkgaXMgYmFkCi0gIHByYWN0aWNlLCBsZXQncyBpZ25vcmUg aXQuICBTbyB3aGF0IHNob3VsZCB3ZSBkbyBoZXJlIGlmIHdlIGtub3cgdGhlCi0gIHBhY2tldCBp cyBkYW1hZ2VkPwotCi0gICAxLiBOb3RoaW5nIC0tIGtlZXAgdHJ5aW5nIHRvIHJlYWQgdGhlIHBh Y2tldCB0aWxsIHdlIGZpbmQgd2hhdCB3ZSB0aGluawotICAgICAgaXMgdGhlIGVuZCwgb3Igd2Ug dGltZSBvdXQsIGFuZCBsZXQgdGhlIHVwcGVyIGxheWVyIGRlY2lkZSB3aGF0IHRvCi0gICAgICBk by4gIEJ1dCBzaW5jZSBlaXRoZXIgdGhlIHBhY2tldCBpcyBjb3JydXB0IG9yIHdlIGFyZSBvdXQg b2Ygc3luYywKLSAgICAgIG91ciBjcml0ZXJpb24gZm9yIGZpbmRpbmcgdGhlIGVuZCBkb2VzIG5v dCBhcHBseSBhbmQgd2UgYXJlIGxpa2VseQotICAgICAgdG8gdGltZSBvdXQgKG9yIHN3YWxsb3cg YSBwaWVjZSBvZiB0aGUgbmV4dCBwYWNrZXQpIGlmIG91ciBhc3N1bWVkCi0gICAgICBsZW5ndGgg aXMgdG9vIGxvbmcuICAoVGhpcyB3YXMgdGhlIGJlaGF2aW9yIHByaW9yIHRvIHZlcnNpb24gNy4w LikKLQotICAgMi4gc2V0IGZsYWcgPSAwIGFuZCBjb250aW51ZT8gIFRoaXMgd291bGQgZm9yY2Ug dXMgdG8gd2FpdCBmb3IgdGhlCi0gICAgICBuZXh0IHBhY2tldCB0byBjb21lIGluLCBhbmQgdGhl cmVmb3JlIChpbiB0aGUgbm9ud2luZG93aW5nIGNhc2UpLAotICAgICAgd291bGQgZm9yY2UgYSB0 aW1lb3V0IGluIHRoZSBvdGhlciBLZXJtaXQuCi0KLSAgIDMuIHNldCBmbGFnID0gMCBhbmQgY29u dGludWUsIGJ1dCBvbmx5IGlmIHRoZSB3aW5kb3cgc2l6ZSBpcyA+IDEgYW5kCi0gICAgICB0aGUg d2luZG93IGlzIG5vdCBibG9ja2VkPyAgVGFsayBhYm91dCBjaGVhdGluZyEKLQotICAgNC4gUmV0 dXJuIGEgZmFpbHVyZSBjb2RlIGFuZCBsZXQgdGhlIHVwcGVyIGxheWVyIGRlY2lkZSB3aGF0IHRv IGRvLgotICAgICAgVGhpcyBzaG91bGQgYmUgZXF1aXZhbGVudCB0byAzLCBidXQgd2l0aG91dCB0 aGUgY2hlYXRpbmcuICBTbyBsZXQncwotICAgICAgZG8gaXQgdGhhdCB3YXkuLi4gIEJ1dCBub3Rl IHRoYXQgd2UgbXVzdCBpZ25vcmUgdGhlIHBhcml0eSBiaXQKLSAgICAgIGluIGNhc2UgdGhpcyBp cyB0aGUgZmlyc3QgcGFja2V0IGFuZCB3ZSBoYXZlIG5vdCB5ZXQgcnVuIHBhcmNoaygpLgotKi8K LQkgICAgaWYgKGkgPT0gMykgewkJLyogUGVlayBhdCBzZXF1ZW5jZSBudW1iZXIgKi8KLQkJeCA9 IHh1bmNoYXIoKGRlc3RbaS0xXSAmIDB4N2YpKTsgLyogSWYgaXQncyBub3QgaW4gcmFuZ2UuLi4g Ki8KLQkJaWYgKHggPCAwIHx8IHggPiA2MykgewotCQkgICAgZGVidWcoRjExMSwidHRpbmwgYmFk IHNlcSIsZGVzdCx4KTsKLQkJICAgIGlmICh0aW1vKSB0dGltb2ZmKCk7Ci0JCSAgICByZXR1cm4o LTEpOwkJLyogcmV0dXJuIGEgbm9uZmF0YWwgZXJyb3IgKi8KLQkJfQotCSAgICB9Ci0KLSNlbHNl IC8qIFBBUlNFTlNFICovCi0JICAgIGRlc3RbaSsrXSA9IG4gJiB0dHBtc2s7Ci0jZW5kaWYgLyog UEFSU0VOU0UgKi8KLQotICAgIC8qIENoZWNrIGZvciBlbmQgb2YgcGFja2V0ICovCi0KLQkgICAg aWYgKAotCQkoKG4gJiB0dHBtc2spID09IGVvbCkJLyogQWx3YXlzIGJyZWFrIG9uIHRoZSBlb2wg Y2hhciAqLwotI2lmZGVmIFBBUlNFTlNFCi0JCSB8fAkJCS8qIGZkYyAtIHNlZSBub3RlcyBvZiAx MyBBcHIgMjAxMCAqLwotLyoKLSAgUHVyZWx5IGxlbmd0aC1kcml2ZW4gaWYgU0VUIEhBTkRTSEFL RSBOT05FIChpLmUuIHR1cm4gPT0gMCkuCi0gIFRoaXMgYWxsb3dzIHBhY2tldCB0ZXJtaW5hdG9y cyBhbmQgaGFuZHNoYWtlIGNoYXJhY3RlcnMgdG8gYXBwZWFyCi0gIGxpdGVyYWxseSBpbnNpZGUg YSBwYWNrZXQgZGF0YSBmaWVsZC4KLSovCi0JCShoYXZlbGVuICYmIChpID4gcGt0bGVuKzEpICYm Ci0JCSAoIXR1cm4gfHwgKHR1cm4gJiYgKG4gJiAweDdmKSA9PSB0dXJuKSkpIC8qICh0dXJuLCBu b3QgZW9sKSAqLwotCi0jZW5kaWYgLyogUEFSU0VOU0UgKi8KLQkJKSB7Ci0vKgotICBIZXJlIHdl IGhhdmUgZWl0aGVyIHJlYWQgdGhlIGxhc3QgYnl0ZSBvZiB0aGUgcGFja2V0IGJhc2VkIG9uIGl0 cyBsZW5ndGgKLSAgZmllbGQsIG9yIGVsc2Ugd2UgaGF2ZSByZWFkIHRoZSBwYWNrZXQgdGVybWlu YXRvciAoZW9sKSBvciB0aGUgaGFsZi1kdXBsZXgKLSAgbGluZS10dXJuYXJvdW5kIGNoYXIgKHR1 cm4pLgotKi8KLSNpZm5kZWYgUEFSU0VOU0UKLQkJZGVidWcoRjEwMSwidHRpbmwgZ290IGVvbCIs IiIsZW9sKTsgLyogKG9yIHR1cm4pICovCi0JCWRlc3RbaV0gPSAnXDAnOwkJLyogWWVzLCB0ZXJt aW5hdGUgdGhlIHN0cmluZywgKi8KLQkJLyogZGVidWcoRjEwMSwidHRpbmwgaSIsIiIsaSk7ICov Ci0KLSNlbHNlICAvKiBQQVJTRU5TRSAqLwotCi0jaWZkZWYgREVCVUcKLQkJaWYgKGRlYmxvZykg ewotCQkgICAgaWYgKChuICYgdHRwbXNrKSAhPSBlb2wpIHsKLQkJCWRlYnVnKEYxMDEsInR0aW5s IEVPUCBsZW5ndGgiLCIiLHBrdGxlbik7Ci0JCQlkZWJ1ZyhGMDAwLCJ0dGlubCBFT1AgY3VycmVu dCBjaGFyIiwiIixuKTsKLQkJCWRlYnVnKEYxMDEsInR0aW5sIEVPUCBwYWNrZXQgYnVmIGluZGV4 IiwiIixpKTsKLQkJICAgIH0gZWxzZSBkZWJ1ZyhGMTAxLCJ0dGlubCBnb3QgZW9sIiwiIixlb2wp OwotCQl9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIE1ZUkVBRAotLyoKLSAgVGhlIHBh Y2tldCB3YXMgcmVhZCBiYXNlZCBvbiBpdHMgbGVuZ3RoLiAgVGhpcyBsZWF2ZXMgdGhlIHBhY2tl dCB0ZXJtaW5hdG9yCi0gIHVucmVhZCwgYW5kIHNvIHR0Y2hrKCkgd2lsbCBhbHdheXMgcmV0dXJu IGF0IGxlYXN0IDEgYmVjYXVzZSBvZiB0aGlzLAotICBwb3NzaWJseSBnaXZpbmcgYSBmYWxzZSBw b3NpdGl2ZSB0byB0aGUgImlzIHRoZXJlIGFub3RoZXIgcGFja2V0IHdhaXRpbmc/IgotICB0ZXN0 LiAgQnV0IGlmIHdlIGtub3cgdGhlIHRlcm1pbmF0b3IgKG9yIGFueSBvdGhlciBpbnRlcnBhY2tl dCBqdW5rKSBpcwotICB0aGVyZSwgd2UgY2FuIHNhZmVseSBnZXQgcmlkIG9mIGl0LgotCi0gIE5P VEU6IFRoaXMgY29kZSByZXdvcmtlZCB0byAoYSkgZXhlY3V0ZSBldmVuIGlmIHRoZSBkZWJ1ZyBs b2cgaXNuJ3QgYWN0aXZlOwotICBhbmQgKGIpIGFjdHVhbGx5IHdvcmsuICAtZmRjLCAyMDA3LzAy LzIyLiAgQW5kIGFnYWluIDIwMDcvMDgvMTItMTMgdG8gYWxzbwotICB3b3JrIG9uIGVuY3J5cHRl ZCBjb25uZWN0aW9ucy4KLSovCQotCQlkZWJ1ZyhGMTAxLCJUVElOTCBteV9jb3VudCIsIiIsbXlf Y291bnQpOwotCQlpZiAoKG4gJiB0dHBtc2spICE9IGVvbCkgeyAvKiBOb3QgdGhlIHBhY2tldCB0 ZXJtaW5hdG9yICovCi0JCSAgICBpbnQgeDsKLQkJICAgIHdoaWxlIChteV9jb3VudCA+IDApIHsK LQkJCXggPSBteXJlYWQoKTsJICAgLyogKHdhcyB0dGluYygwKSAqLwotCQkJZGVidWcoRjAwMCwi VFRJTkwgbGtyZWFkIGNoYXIiLCIiLHgpOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLQkJCWlmIChU RUxPUFRfVShURUxPUFRfRU5DUllQVElPTikpIHsKLQkJCSAgICBDSEFSIGNoID0geDsKLQkJCSAg ICBja190bl9kZWNyeXB0KChjaGFyICopJmNoLDEpOwotCQkJICAgIHggPSBjaDsKLQkJCSAgICBk ZWJ1ZyhGMDAwLCJUVElOTCBsa2RlY3IgY2hhciIsIiIseCk7IAotCQkJfQotI2VuZGlmCS8qIENL X0VOQ1JZUFRJT04gKi8KLQkJCS8qCi0JCQkgIE5vdGU6IHdoaWxlIGl0IG1pZ2h0IHNlZW0gbW9y ZSBlbGVnYW50IHRvIHNpbXBseQotCQkJICBwdXNoIGJhY2sgdGhlIGVuY3J5cHRlZCBieXRlLCB0 aGF0IGRlc3luY2hyb25pemVzCi0JCQkgIHRoZSBkZWNyeXB0aW9uIHN0cmVhbTsgdGhlIGZsYWcg aXMgbmVjZXNzYXJ5IHNvIHdlCi0JCQkgIGRvbid0IHRyeSB0byBkZWNyeXB0IHRoZSBzYW1lIGJ5 dGUgdHdpY2UuCi0JCQkqLwotCQkJaWYgKCh4ICYgdHRwbXNrKSA9PSBzdGFydCkgeyAvKiBTdGFy dCBvZiBuZXh0IHBhY2tldCAqLwotCQkJICAgIG15dW5yZCh4KTsJLyogUHVzaCBiYWNrIHRoZSBk ZWNyeXB0ZWQgYnl0ZSAqLwotCQkJICAgIHB1c2hlZGJhY2sgPSAxOyAvKiBBbmQgc2V0IGZsYWcg Ki8KLQkJCSAgICBkZWJ1ZyhGMDAwLCJUVElOTCBsa3B1c2ggY2hhciIsIiIseCk7Ci0JCQkgICAg YnJlYWs7Ci0JCQl9Ci0JCSAgICB9Ci0JCX0KLSNlbmRpZiAvKiBNWVJFQUQgKi8KLQotCQlkZXN0 W2ldID0gJ1wwJzsJCS8qIFRlcm1pbmF0ZSB0aGUgc3RyaW5nLCAqLwotCSAgICAgICAgaWYgKG5l ZWRwY2hrKSB7CQkvKiBQYXJpdHkgY2hlY2tlZCB5ZXQ/ICovCi0JCSAgICBpZiAodHRwcnR5ID09 IDApIHsJLyogTm8sIGNoZWNrLiAqLwotCQkJaWYgKCh0dHBydHkgPSBwYXJjaGsoZGVzdCxzdGFy dCxpKSkgPiAwKSB7Ci0JCQkgICAgaW50IGo7Ci0JCQkgICAgZGVidWcoRjEwMSwidHRpbmwgc2Vu c2VzIHBhcml0eSIsIiIsdHRwcnR5KTsKLQkJCSAgICBkZWJ1ZyhGMTEwLCJ0dGlubCBwYWNrZXQg YmVmb3JlIixkZXN0LDApOwotCQkJICAgIHR0cG1zayA9IDB4N2Y7Ci0JCQkgICAgZm9yIChqID0g MDsgaiA8IGk7IGorKykKLQkJCSAgICAgIGRlc3Rbal0gJj0gMHg3ZjsJLyogU3RyaXAgcGFyaXR5 IGZyb20gcGFja2V0ICovCi0JCQkgICAgZGVidWcoRjExMCwidHRpbmwgcGFja2V0IGFmdGVyICIs ZGVzdCwwKTsKLQkJCX0gZWxzZSB0dHBydHkgPSAwOyAvKiBSZXN0b3JlIGlmIHBhcmNoayBlcnJv ciAqLwotCQkgICAgfQotCQkgICAgc29wbWFzayA9IHR0cG1zazsKLQkJICAgIG5lZWRwY2hrID0g MDsKLQkJfQotI2VuZGlmIC8qIFBBUlNFTlNFICovCi0KLQkJaWYgKHRpbW8pCQkvKiBUdXJuIG9m ZiB0aW1lciBpZiBpdCB3YXMgb24gKi8KLQkJICB0dGltb2ZmKCk7Ci0gICAgICAgICAgICAgICAg Y2toZXhkdW1wKCJ0dGlubCBnb3QiLGRlc3QsaSk7Ci0KLSNpZmRlZiBTVFJFQU1JTkcKLQkJLyog dHRpbmwoKSB3YXMgY2FsbGVkIGJlY2F1c2UgdGhlcmUgd2FzIG5vbi1wYWNrZXQgKi8KLQkJLyog ZGF0YSBzaXR0aW5nIGluIHRoZSBiYWNrIGNoYW5uZWwuICBJZ25vcmUgaXQuICAgKi8KLQkJaWYg KHN0cmVhbWluZyAmJiBzbmR0eXAgPT0gJ0QnKQotCQkgIHJldHVybigtMSk7Ci0jZW5kaWYgLyog U1RSRUFNSU5HICovCi0JCXJldHVybihpKTsKLQkgICAgfQotCX0gLyogRW5kIG9mIHdoaWxlKCkg Ki8KLQl0dGltb2ZmKCk7Ci0JcmV0dXJuKG4pOwotICAgIH0KLX0KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotLyogIFQgVCBJIE4gQyAtLSAgUmVhZCBhIGNoYXJhY3RlciBmcm9tIHRoZSBjb21tdW5p Y2F0aW9uIGxpbmUgICovCi0vKgotIE9uIHN1Y2Nlc3MsIHJldHVybnMgdGhlIGNoYXJhY3RlciB0 aGF0IHdhcyByZWFkLCA+PSAwLgotIE9uIGZhaWx1cmUsIHJldHVybnMgLTEgb3Igb3RoZXIgbmVn YXRpdmUgbXlyZWFkIGVycm9yIGNvZGUsCi0gICBvciAtMiBpZiBjb25uZWN0aW9uIGlzIGJyb2tl biBvciB0dHlmZCA8IDAuCi0gICBvciAtMyBpZiBzZXNzaW9uIGxpbWl0IGhhcyBleHBpcmVkLAot ICAgb3IgLTQgaWYgc29tZXRoaW5nIG9yIG90aGVyLi4uCi0gTk9URTogVGhlIEFQSSBkb2VzIG5v dCBwcm92aWRlIGZvciB0dGluYygpIHJldHVybmluZyBhIHNwZWNpYWwgY29kZQotIHVwb24gdGlt ZW91dCwgYnV0IHdlIG5lZWQgaXQuICBTbyBmb3IgdGhpcyB3ZSBoYXZlIGEgZ2xvYmFsIHZhcmlh YmxlLAotIHR0aW5jdGltby4KLSovCi1zdGF0aWMgaW50IHR0aW5jdGltbyA9IDA7CQkvKiBZdWsg Ki8KLQotaW50Ci10dGluYyh0aW1vKSBpbnQgdGltbzsgewotCi0gICAgaW50IG4gPSAwLCBmZDsK LSAgICBpbnQgaXNfdG4gPSAwOwotICAgIENIQVIgY2ggPSAwOwotCi0gICAgdHRpbmN0aW1vID0g MDsKLQotICAgIGlmICh0dHlmZCA8IDApIHJldHVybigtMik7ICAgICAgICAgIC8qIE5vdCBvcGVu LiAqLwotCi0gICAgaXNfdG4gPSAoeGxvY2FsICYmIG5ldGNvbm4gJiYgSVNfVEVMTkVUKCkpIHx8 Ci0JICAgICgheGxvY2FsICYmIHNzdGVsbmV0KTsKLQotI2lmZGVmIFRUTEVCVUYKLSAgICBpZiAo dHRwdXNoID49IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwidHRpbmMiLCJ0dHB1c2giLHR0cHVz aCk7Ci0gICAgICAgIGNoID0gdHRwdXNoOwotICAgICAgICB0dHB1c2ggPSAtMTsKLSAgICAgICAg cmV0dXJuKGNoKTsKLSAgICB9Ci0gICAgaWYgKGxlX2RhdGEpIHsKLSAgICAgICAgaWYgKGxlX2dl dGNoYXIoJmNoKSA+IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInR0aW5jIGxlX2dldGNo YXIiLCJjaCIsY2gpOwotICAgICAgICAgICAgcmV0dXJuKGNoKTsKLSAgICAgICAgfQotICAgIH0K LSNlbmRpZiAvKiBUVExFQlVGICovCi0KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKQot ICAgICAgZmQgPSBmZGluOwotICAgIGVsc2UKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSAgICAgIGZk ID0gdHR5ZmQ7Ci0KLSAgICBpZiAoKHRpbW8gPD0gMCkJCQkvKiBVbnRpbWVkLiAqLwotI2lmZGVm IE1ZUkVBRAotCXx8IChteV9jb3VudCA+IDApCQkvKiBCdWZmZXJlZCBjaGFyIGFscmVhZHkgd2Fp dGluZy4gKi8KLSNlbmRpZiAvKiBNWVJFQUQgKi8KLQkpIHsKLSNpZmRlZiBNWVJFQUQKLSAgICAg ICAgLyogQ29tbSBsaW5lIGZhaWx1cmUgcmV0dXJucyAtMSB0aHJ1IG15cmVhZCwgc28gbm8gJj0g MDM3NyAqLwotCW4gPSBteXJlYWQoKTsJCQkvKiBXYWl0IGZvciBhIGNoYXJhY3Rlci4uLiAqLwot CS8qIGRlYnVnKEYwMDAsInR0aW5jIE1ZUkVBRCBuIiwiIixuKTsgKi8KLSNpZmRlZiBDS19FTkNS WVBUSU9OCi0JLyogZGVidWcoRjEwMSwidHRpbmMgdV9lbmNyeXB0IiwiIixURUxPUFRfVShURUxP UFRfRU5DUllQVElPTikpOyAqLwotCWlmIChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikgJiYg biA+PSAwKSB7Ci0JICAgIGNoID0gbjsKLQkgICAgY2tfdG5fZGVjcnlwdCgoY2hhciAqKSZjaCwx KTsKLQkgICAgbiA9IGNoOwotCX0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0KLSNpZmRl ZiBORVRQVFkKLQlpZiAodHRwdHkgJiYgbiA8IDApIHsKLQkgICAgZGVidWcoRjEwMSwidHRpbmMg ZXJyb3Igb24gcHR5IiwiIixuKTsKLQkgICAgdHRjbG9zKDApOwotCSAgICByZXR1cm4obik7Ci0J fQotI2VuZGlmIC8qIE5FVFBUWSAqLwotCi0jaWZkZWYgVE5DT0RFCi0JaWYgKChuID4gLTEpICYm IGlzX3RuKQotCSAgcmV0dXJuKCh1bnNpZ25lZCkobiAmIDB4ZmYpKTsKLQllbHNlCi0jZW5kaWYg LyogVE5DT0RFICovCi0JICByZXR1cm4obiA8IDAgPyBuIDogKHVuc2lnbmVkKShuICYgdHRwbXNr KSk7Ci0KLSNlbHNlICAvKiBNWVJFQUQgKi8KLQotICAgICAgICB3aGlsZSAoKG4gPSByZWFkKGZk LCZjaCwxKSkgPT0gMCkgLyogV2FpdCBmb3IgYSBjaGFyYWN0ZXIuICovCi0gICAgICAgIC8qIFNo b3VsZG4ndCBoYXZlIHRvIGxvb3AgaW4gdmVyIDVBLiAqLwotI2lmZGVmIE5FVENPTk4KLQkgIGlm IChuZXRjb25uKSB7CQkvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBuZXQgKi8KLQkgICAgICBuZXRj bG9zKCk7CQkvKiBJZiByZWFkKCkgcmV0dXJucyAwIGl0IG1lYW5zICovCi0JICAgICAgbmV0Y29u biA9IDA7CQkvKiB0aGUgY29ubmVjdGlvbiBoYXMgZHJvcHBlZC4gKi8KLQkgICAgICBlcnJubyA9 IEVOT1RDT05OOwotCSAgICAgIHJldHVybigtMik7Ci0JICB9Ci0jZW5kaWYgLyogTkVUQ09OTiAq LwotCSAgOwotCS8qIGRlYnVnKEYxMDEsInR0aW5jIiwiIixjaCk7ICovCi0jaWZkZWYgVE5DT0RF Ci0JaWYgKChuID4gMCkgJiYgaXNfdG4pIHsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0JICAgIGlm IChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikpIHsKLQkJY2tfdG5fZGVjcnlwdCgmY2gsMSk7 Ci0JCW4gPSBjaDsKLQkgICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQkgICAgcmV0 dXJuKCh1bnNpZ25lZCkoY2ggJiAweGZmKSk7Ci0JfSBlbHNlCi0jZW5kaWYgLyogVE5DT0RFICov Ci0gICAgICAgIHJldHVybigobiA8IDApID8gLTQgOiAoKG4gPT0gMCkgPyAtMSA6ICh1bnNpZ25l ZCkoY2ggJiB0dHBtc2spKSk7Ci0jZW5kaWYgLyogTVlSRUFEICovCi0KLSAgICB9IGVsc2UgewkJ CQkvKiBUaW1lZCByZWFkICovCi0KLQlpbnQgb2xkYWxhcm07Ci0Jc2F2YWwgPSBzaWduYWwoU0lH QUxSTSx0aW1lcmgpOwkvKiBTZXQgdXAgaGFuZGxlciwgc2F2ZSBvbGQgb25lLiAqLwotCW9sZGFs YXJtID0gYWxhcm0odGltbyk7CQkvKiBTZXQgYWxhcm0sIHNhdmUgb2xkIG9uZS4gKi8KLQlpZiAo Ci0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0JICAgIHNpZ3NldGptcChzamJ1ZiwxKQotI2Vsc2UKLQkg ICAgc2V0am1wKHNqYnVmKQotI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLwotCSAgICApIHsJCQkJ LyogVGltZXIgZXhwaXJlZCAqLwotCSAgICB0dGluY3RpbW8gPSAxOwotCSAgICBuID0gLTE7CQkJ Lyogc2V0IGZsYWcgKi8KLQl9IGVsc2UgewotI2lmZGVmIE1ZUkVBRAotCSAgICBuID0gbXlyZWFk KCk7CQkvKiBJZiBtYW5hZ2luZyBvd24gYnVmZmVyLi4uICovCi0JICAgIGRlYnVnKEYxMDEsInR0 aW5jIG15cmVhZCIsIiIsbik7Ci0JICAgIGNoID0gbjsKLSNlbHNlCi0JICAgIG4gPSByZWFkKGZk LCZjaCwxKTsJCS8qIE90aGVyd2lzZSBjYWxsIHRoZSBzeXN0ZW0uICovCi0JICAgIGlmIChuID09 IDApIG4gPSAtMTsKLQkgICAgZGVidWcoRjEwMSwidHRpbmMgcmVhZCIsIiIsbik7Ci0jZW5kaWYg LyogTVlSRUFEICovCi0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0JICAgIGlmIChURUxPUFRfVShU RUxPUFRfRU5DUllQVElPTikgJiYgbiA+PSAwKSB7Ci0JCWNrX3RuX2RlY3J5cHQoKGNoYXIgKikm Y2gsMSk7Ci0JICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0JICAgIGlmIChuID49 IDApCi0JICAgICAgbiA9ICh1bnNpZ25lZCkgKGNoICYgMHhmZik7Ci0JICAgIGVsc2UKLQkgICAg ICBuID0gKG4gPCAwKSA/IC00IDogLTI7CS8qIFNwZWNpYWwgcmV0dXJuIGNvZGVzLiAqLwotCX0K LQl0dGltb2ZmKCk7CQkJLyogVHVybiBvZmYgdGhlIHRpbWVyICovCi0JaWYgKG9sZGFsYXJtID4g MCkgewotCSAgICBpZiAobiA9PSAtMSkJCS8qIGFuZCByZXN0b3JlIGFueSBwcmV2aW91cyBhbGFy bSAqLwotCSAgICAgIG9sZGFsYXJtIC09IHRpbW87Ci0JICAgIGlmIChvbGRhbGFybSA8IDApCQkv KiBhZGp1c3RlZCBieSBvdXIgdGltZW91dCBpbnRlcnZhbCAqLwotCSAgICAgIG9sZGFsYXJtID0g MDsKLQkgICAgaWYgKG9sZGFsYXJtKSB7Ci0JICAgICAgICBkZWJ1ZyhGMTAxLCJ0dGluYyByZXN0 b3Jpbmcgb2xkYWxhcm0iLCIiLG9sZGFsYXJtKTsKLQkJYWxhcm0ob2xkYWxhcm0pOwotCSAgICB9 Ci0JfQotI2lmZGVmIE5FVENPTk4KLQlpZiAobmV0Y29ubikgewotCSAgICBpZiAobiA9PSAtMikg ewkJLyogcmVhZCgpIHJldHVybnMgMCAqLwotCQluZXRjbG9zKCk7CQkvKiBvbiBuZXR3b3JrIHJl YWQgZmFpbHVyZSAqLwotCQluZXRjb25uID0gMDsKLQkJZXJybm8gPSBFTk9UQ09OTjsKLQkgICAg fQotCX0KLSNlbmRpZgkvKiBORVRDT05OICovCi0jaWZkZWYgVE5DT0RFCi0JaWYgKChuID4gLTEp ICYmIGlzX3RuKQotCSAgcmV0dXJuKCh1bnNpZ25lZCkobiAmIDB4ZmYpKTsKLQllbHNlCi0jZW5k aWYgLyogVE5DT0RFICovCi0JICAvKiBSZXR1cm4gbWFza2VkIGNoYXIgb3IgbmVnLiAqLwotCSAg cmV0dXJuKCAobiA8IDApID8gbiA6ICh1bnNpZ25lZCkobiAmIHR0cG1zaykgKTsKLSAgICB9Ci19 Ci0KLS8qICBTIE4gRCBCIFIgSyAgLS0gIFNlbmQgYSBCUkVBSyBzaWduYWwgb2YgdGhlIGdpdmVu IGR1cmF0aW9uICAqLwotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXNuZGJyayhpbnQg bXNlYykgewkJCS8qIEFyZ3VtZW50IGlzIG1pbGxpc2Vjb25kcyAqLwotI2Vsc2UKLXNuZGJyayht c2VjKSBpbnQgbXNlYzsgewotI2VuZGlmIC8qIENLX0FOU0lDICovCi0jaWZuZGVmIFBPU0lYCi0g ICAgaW50IHgsIG47Ci0jZW5kaWYgLyogUE9TSVggKi8KLQotI2lmZGVmIE9YT1MKLSNkZWZpbmUg QlNEQlJFQUsKLSNlbmRpZiAvKiBPWE9TICovCi0KLSNpZmRlZiBBTllCU0QKLSNkZWZpbmUgQlNE QlJFQUsKLSNlbmRpZiAvKiBBTllCU0QgKi8KLQotI2lmZGVmIEJTRDQ0Ci0jZGVmaW5lIEJTREJS RUFLCi0jZW5kaWYgLyogQlNENDQgKi8KLQotI2lmZGVmIENPSEVSRU5UCi0jaWZkZWYgQlNEQlJF QUsKLSN1bmRlZiBCU0RCUkVBSwotI2VuZGlmIC8qIEJTREJSRUFLICovCi0jZW5kaWYgLyogQ09I RVJFTlQgKi8KLQotI2lmZGVmIEJFTExWMTAKLSNpZmRlZiBCU0RCUkVBSwotI3VuZGVmIEJTREJS RUFLCi0jZW5kaWYgLyogQlNEQlJFQUsgKi8KLSNlbmRpZiAvKiBCRUxMVjEwICovCi0KLSNpZmRl ZiBQUk9WWDEKLSAgICBjaGFyIHNwZDsKLSNlbmRpZiAvKiBQUk9WWDEgKi8KLQotICAgIGRlYnVn KEYxMDEsInR0c25kYiB0dHlmZCIsIiIsdHR5ZmQpOwotICAgIGlmICh0dHlmZCA8IDApIHJldHVy bigtMSk7ICAgICAgICAgIC8qIE5vdCBvcGVuLiAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICByZXR1 cm4gcDlzbmRicmsobXNlYyk7Ci0jZWxzZQotI2lmZGVmIE5FVENPTk4KLSNpZmRlZiBORVRDTUQK LSAgICBpZiAodHRwaXBlKQkJCQkvKiBQaXBlICovCi0gICAgICByZXR1cm4odHRvYygnXDAnKSk7 Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KQotICAg ICAgcmV0dXJuKHR0b2MoJ1wwJykpOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotICAgIGlmIChuZXRj b25uKSAJCQkvKiBTZW5kIG5ldHdvcmsgQlJFQUsgKi8KLSAgICAgIHJldHVybihuZXRicmVhaygp KTsKLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSAgICBpZiAobXNlYyA8IDEgfHwgbXNlYyA+IDUw MDApIHJldHVybigtMSk7IC8qIEJhZCBhcmd1bWVudCAqLwotCi0jaWZkZWYgUE9TSVgJCQkJLyog RWFzeSBpbiBQT1NJWCAqLwotICAgIHsKLQlpbnQgeDsKLQlkZWJ1ZyhGMTExLCJzbmRicmsgUE9T SVgiLGNraXRvYShtc2VjKSwobXNlYy8zNzUpKTsKLQllcnJubyA9IDA7Ci0JeCA9IHRjc2VuZGJy ZWFrKHR0eWZkLG1zZWMgLyAzNzUpOwotCWRlYnVnKEYxMTEsInNuZGJyayB0Y3NlbmRicmVhayIs Y2tpdG9hKGVycm5vKSx4KTsKLQlyZXR1cm4oeCk7Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBQUk9W WDEKLSAgICBndHR5KHR0eWZkLCZ0dGJ1Zik7ICAgICAgICAgICAgICAgICAvKiBHZXQgY3VycmVu dCB0dHkgZmxhZ3MgKi8KLSAgICBzcGQgPSB0dGJ1Zi5zZ19vc3BlZWQ7ICAgICAgICAgICAgICAv KiBTYXZlIHNwZWVkICovCi0gICAgdHRidWYuc2dfb3NwZWVkID0gQjUwOyAgICAgICAgICAgICAg LyogQ2hhbmdlIHRvIDUwIGJhdWQgKi8KLSAgICBzdHR5KHR0eWZkLCZ0dGJ1Zik7ICAgICAgICAg ICAgICAgICAvKiAgLi4uICovCi0gICAgbiA9IChpbnQpc3RybGVuKGJybnVscyk7CQkvKiBTZW5k IHRoZSByaWdodCBudW1iZXIgb2YgbnVsbHMgKi8KLSAgICB4ID0gbXNlYyAvIDkxOwotICAgIGlm ICh4ID4gbikgeCA9IG47Ci0gICAgd3JpdGUodHR5ZmQsYnJudWxzLG4pOwotICAgIHR0YnVmLnNn X29zcGVlZCA9IHNwZDsgICAgICAgICAgICAgIC8qIFJlc3RvcmUgc3BlZWQgKi8KLSAgICBzdHR5 KHR0eWZkLCZ0dGJ1Zik7ICAgICAgICAgICAgICAgICAvKiAgLi4uICovCi0gICAgcmV0dXJuKDAp OwotI2Vsc2UKLSNpZmRlZiBhZWdpcwotICAgIHNpb18kY29udHJvbCgoc2hvcnQpdHR5ZmQsIHNp b18kc2VuZF9icmVhaywgbXNlYywgc3QpOwotICAgIHJldHVybigwKTsKLSNlbHNlCi0jaWZkZWYg QlNEQlJFQUsKLSAgICBuID0gRldSSVRFOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbHVz aCBvdXRwdXQgcXVldWUuICovCi0vKiBXYXRjaCBvdXQgZm9yIGludCB2cyBsb25nIHByb2JsZW1z IGluICZuIGFyZyEgKi8KLSAgICBkZWJ1ZyhGMTAxLCJzbmRicmsgQlNEQlJFQUsiLCIiLG1zZWMp OwotICAgIGlvY3RsKHR0eWZkLFRJT0NGTFVTSCwmbik7ICAgICAgICAgIC8qIElnbm9yZSBhbnkg ZXJyb3JzLi4gKi8KLSAgICBpZiAoaW9jdGwodHR5ZmQsVElPQ1NCUkssKGNoYXIgKikwKSA8IDAp IHsgIC8qIFR1cm4gb24gQlJFQUsgKi8KLSAgICAgICAgcGVycm9yKCJDYW4ndCBzZW5kIEJSRUFL Iik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIHggPSBtc2xlZXAobXNlYyk7ICAg ICAgICAgICAgICAgICAgICAvKiBTbGVlcCBmb3Igc28gbWFueSBtaWxsaXNlY29uZHMgKi8KLSAg ICBpZiAoaW9jdGwodHR5ZmQsVElPQ0NCUkssKGNoYXIgKikwKSA8IDApIHsgIC8qIFR1cm4gb2Zm IEJSRUFLICovCi0gICAgICAgIHBlcnJvcigiQlJFQUsgc3R1Y2shISEiKTsKLSAgICAgICAgZG9l eGl0KEJBRF9FWElULC0xKTsJCS8qIEdldCBvdXQsIGNsb3NpbmcgdGhlIGxpbmUuICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICB3aXRoIGJhZCBleGl0IHN0 YXR1cyAqLwotICAgIH0KLSAgICByZXR1cm4oeCk7Ci0jZWxzZQotI2lmZGVmIEFUVFNWCi0vKgot ICBObyB3YXkgdG8gc2VuZCBhIGxvbmcgQlJFQUsgaW4gU3lzIFYsIHNvIHNlbmQgYSBidW5jaCBv ZiByZWd1bGFyIG9uZXMuCi0gIChBY3R1YWxseSwgU3lzIFYgUjQgaXMgKnN1cHBvc2VkKiB0byBo YXZlIHRoZSBQT1NJWCB0Y3NlbmRicmVhaygpIGZ1bmN0aW9uLAotICBidXQgdGhlcmUncyBubyB3 YXkgZm9yIHRoaXMgY29kZSB0byBrbm93IGZvciBzdXJlLikKLSovCi0gICAgZGVidWcoRjEwMSwi c25kYnJrIEFUVFNWIiwiIixtc2VjKTsKLSAgICB4ID0gbXNlYyAvIDI3NTsKLSAgICBmb3IgKG4g PSAwOyBuIDwgeDsgbisrKSB7Ci0JLyogUmVwb3J0ZWRseSB0aGUgY2FzdCBicmVha3MgdGhpcyBm dW5jdGlvbiBvbiBzb21lIHN5c3RlbXMgKi8KLQkvKiBCdXQgdGhlbiB3aHkgd2FzIGl0IGhlcmUg aW4gdGhlIGZpcnN0IHBsYWNlPyAqLwotCWlmIChpb2N0bCh0dHlmZCxUQ1NCUkssIC8qIChjaGFy ICopICovIDApIDwgMCkgewotCSAgICBwZXJyb3IoIkNhbid0IHNlbmQgQlJFQUsiKTsKLQkgICAg cmV0dXJuKC0xKTsKLQl9Ci0gICAgfQotICAgIHJldHVybigwKTsKLSNlbHNlCi0jaWZkZWYgIFY3 Ci0gICAgZGVidWcoRjEwMSwic25kYnJrIFY3IiwiIixtc2VjKTsKLSAgICByZXR1cm4oZ2VuYnJr KHR0eWZkLDI1MCkpOwkJLyogU2ltdWxhdGUgYSBCUkVBSyAqLwotI2Vsc2UKLSAgICBkZWJ1ZyhG MTAxLCJzbmRicmsgY2F0Y2hhbGwiLCIiLG1zZWMpOwotICAgIHR0b2MoMCk7dHRvYygwKTt0dG9j KDApO3R0b2MoMCk7Ci0gICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIFY3ICovCi0jZW5kaWYgLyog QlNEQlJFQUsgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIGFlZ2lzICovCi0jZW5k aWYgLyogUFJPVlgxICovCi0jZW5kaWYgLyogUE9TSVggKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwot fQotCi0vKiAgVCBUIFMgTiBEIEIgIC0tICBTZW5kIGEgQlJFQUsgc2lnbmFsICAqLwotCi1pbnQK LXR0c25kYigpIHsKLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgaWYgKG5ldGNvbm4gJiYgaXN0bmNv bXBvcnQoKSkKLSAgICAgIHJldHVybigodG5zbmRiKDI3NUwpID49IDApID8gMCA6IC0xKTsKLSAg ICBlbHNlCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotICAgICAgcmV0dXJuKHNuZGJyaygyNzUp KTsKLX0KLQotLyogIFQgVCBTIE4gRCBMIEIgIC0tICBTZW5kIGEgTG9uZyBCUkVBSyBzaWduYWwg ICovCi0KLWludAotdHRzbmRsYigpIHsKLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgaWYgKG5ldGNv bm4gJiYgaXN0bmNvbXBvcnQoKSkKLSAgICAgIHJldHVybigodG5zbmRiKDE4MDBMKSA+PSAwKSA/ IDAgOiAtMSk7Ci0gICAgZWxzZQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSAgICByZXR1cm4o c25kYnJrKDE1MDApKTsKLX0KLQotLyogIE0gUyBMIEUgRSBQICAtLSAgTWlsbGlzZWNvbmQgdmVy c2lvbiBvZiBzbGVlcCgpLiAgKi8KLQotLyoKLSAgQ2FsbCB3aXRoIG51bWJlciBvZiBtaWxsaXNl Y29uZHMgKHRob3VzYW5kdGhzIG9mIHNlY29uZHMpIHRvIHNsZWVwLgotICBJbnRlbmRlZCBvbmx5 IGZvciBzbWFsbCBpbnRlcnZhbHMuICBGb3IgYmlnIG9uZXMsIGp1c3QgdXNlIHNsZWVwKCkuCi0g IEhpZ2hseSBzeXN0ZW0tZGVwZW5kZW50LgotICBSZXR1cm5zIDAgYWx3YXlzLCBldmVuIGlmIGl0 IGRpZG4ndCB3b3JrLgotKi8KLQotLyogRGVmaW5lIE1TTEZUSU1FIGZvciBzeXN0ZW1zIHRoYXQg bXVzdCB1c2UgYW4gZnRpbWUoKSBsb29wLiAqLwotI2lmZGVmIEFOWUJTRAkJCQkvKiBGb3IgcHJl LTQuMiBCU0QgdmVyc2lvbnMgKi8KLSNpZm5kZWYgQlNENAotI2RlZmluZSBNU0xGVElNRQotI2Vu ZGlmIC8qIEJTRDQgKi8KLSNlbmRpZiAvKiBBTllCU0QgKi8KLQotI2lmZGVmIFRPV0VSMQkJCQkv KiBOQ1IgVG93ZXIgT1MgMS4wICovCi0jZGVmaW5lIE1TTEZUSU1FCi0jZW5kaWYgLyogVE9XRVIx ICovCi0KLSNpZmRlZiBDT0hFUkVOVCAgICAgICAgIC8qIENvaGVyZW50Li4uICovCi0jaWZuZGVm IF9JMzg2ICAgICAgICAgICAvKiBNYXliZSBDb2hlcmVudC8zODYgc2hvdWxkIGdldCB0aGlzLCB0 b28gKi8KLSNkZWZpbmUgTVNMRlRJTUUgICAgICAgIC8qIE9waW5pb25zIGFyZSBkaXZpZGVkICov Ci0jZW5kaWYgLyogX0kzODYgKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0jaWZkZWYgQ09N TUVOVAotI2lmZGVmIEdFVE1TRUMKLQotLyogTWlsbGlzZWNvbmQgdGltZXIgKi8KLQotc3RhdGlj IGxvbmcgbXNlY2Jhc2UgPSAwTDsJCS8qIFVuc2lnbmVkIGxvbmcgbm90IHBvcnRhYmxlICovCi0K LWxvbmcKLWdldG1zZWMoKSB7CQkJCS8qIE1pbGxpc2Vjb25kcyBzaW5jZSBiYXNlIHRpbWUgKi8K LSAgICBzdHJ1Y3QgdGltZXZhbCB4djsKLSAgICBzdHJ1Y3QgdGltZXpvbmUgeHo7Ci0gICAgbG9u ZyBzZWNzLCBtc2VjczsKLSAgICBpZiAoCi0jaWZkZWYgR1RPRE9ORUFSRwotCWdldHRpbWVvZmRh eSgmdHYpCi0jZWxzZQotI2lmZGVmIFBUWAotCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpCi0jZWxz ZQotCWdldHRpbWVvZmRheSgmdHYsICZ0eikKLSNlbmRpZiAvKiBQVFggKi8KLSNlbmRpZiAvKiBH VE9ET05FQVJHICovCi0JPCAwKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBpZiAobXNlY2Jhc2Ug PT0gMEwpIHsJCS8qIEZpcnN0IGNhbGwsIHNldCBiYXNlIHRpbWUuICovCi0JbXNlY2Jhc2UgPSB0 di50dl9zZWM7Ci0JZGVidWcoRjEwMSwiZ2V0bXNlYyBiYXNlIiwiIixtc2VjYmFzZSk7Ci0gICAg fQotICAgIHJldHVybigoKHR2LnR2X3NlYyAtIG1zZWNiYXNlKSAqIDEwMDBMKSArICh0di50dl91 c2VjIC8gMTAwMEwpKTsKLX0KLSNlbmRpZiAvKiBHRVRNU0VDICovCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotCi0jaWZkZWYgU0VMRUNUCi1pbnQKLXR0d2FpdChmZCwgc2VjcykgaW50IGZkLCBzZWNz OyB7Ci0gICAgaW50IHg7Ci0gICAgZmRfc2V0IHJmZHM7Ci0gICAgRkRfWkVSTygmcmZkcyk7Ci0g ICAgRkRfU0VUKGZkLCZyZmRzKTsKLSAgICB0di50dl9zZWMgPSBzZWNzOwotICAgIHR2LnR2X3Vz ZWMgPSAwTDsKLSAgICBlcnJubyA9IDA7Ci0gICAgaWYgKCh4ID0gc2VsZWN0KEZEX1NFVFNJWkUs Ci0jaWZkZWYgSFBVWDkKLQkJICAgIChpbnQgKikKLSNlbHNlCi0jaWZkZWYgSFBVWDEwMDAKLQkJ ICAgIChpbnQgKikKLSNlbmRpZiAvKiBIUFVYMTAwMCAqLwotI2VuZGlmIC8qIEhQVVg5ICovCi0J CSAgICAmcmZkcywKLQkJICAgIDAsIDAsICZ0dikpIDwgMCkgewotCWRlYnVnKEYxMDEsInR0d2Fp dCBzZWxlY3QgZXJybm8iLCIiLGVycm5vKTsKLQlyZXR1cm4oMCk7Ci0gICAgfSBlbHNlIHsKLQlk ZWJ1ZyhGMTAxLCJ0dHdhaXQgT0siLCIiLGVycm5vKTsKLQl4ID0gRkRfSVNTRVQoZmQsICZyZmRz KTsKLQlkZWJ1ZyhGMTAxLCJ0dHdhaXQgc2VsZWN0IHgiLCIiLHgpOwotCXJldHVybih4ID8gMSA6 IDApOwotICAgIH0KLX0KLSNlbmRpZiAvKiBTRUxFQ1QgKi8KLQotaW50Ci1tc2xlZXAobSkgaW50 IG07IHsKLS8qCi0gIE90aGVyIHBvc3NpYmlsaXRpZXMgaGVyZSBhcmU6Ci0gICBuYW5vc2xlZXAo KSwgcmVwb3J0ZWRseSBkZWZpbmVkIGluIFBPU0lYLjQuCi0gICBzZ2luYXAoKSwgSVJJWCBvbmx5 IChiYWNrIHRvIHdoYXQgSVJJWCB2ZXJzaW9uIEkgZG9uJ3Qga25vdykuCi0qLwotI2lmZGVmIFBs YW45Ci0gICAgcmV0dXJuIF9TTEVFUChtKTsKLSNlbHNlCi0jaWZkZWYgQkVPU09SQkVCT1gKLSAg ICBzbm9vemUobSoxMDAwKTsKLSNlbHNlIC8qIEJFT1NPUkJFQk9YICovCi0jaWZkZWYgU0VMRUNU Ci0gICAgaW50IHQxLCB4OwotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBTRUxFQ1QgMSIsIiIsbSk7 Ci0gICAgaWYgKG0gPD0gMCkgcmV0dXJuKDApOwotICAgIGlmIChtID49IDEwMDApIHsJCQkvKiBD YXRjaCBiaWcgYXJndW1lbnRzLiAqLwotCXNsZWVwKG0vMTAwMCk7Ci0JbSA9IG0gJSAxMDAwOwot CWlmIChtIDwgMTApIHJldHVybigwKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIFNF TEVDVCAyIiwiIixtKTsKLSNpZmRlZiBCRUxMVjEwCi0gICAgeCA9IHNlbGVjdCggMCwgKGZkX3Nl dCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgbSApOwotICAgIGRlYnVnKEYxMDEsIm1z bGVlcCBCRUxMVjEwIHNlbGVjdCIsIiIseCk7Ci0jZWxzZSAvKiBCRUxMVjEwICovCi0jaWZkZWYg SFBVWDkKLSAgICBnZXR0aW1lb2ZkYXkoJnR2LCAmdHopOwotI2Vsc2UKLQotI2lmbmRlZiBDT0hF UkVOVAotI2lmZGVmIEdUT0RPTkVBUkcKLSAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0dikgPCAwKQot I2Vsc2UKLSNpZmRlZiBQVFgKLSAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0dixOVUxMKSA8IDApCi0j ZWxzZQotI2lmZGVmIE5PVElNRVpPTkUKLSAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCkg PCAwKQkvKiB3b25kZXIgd2hhdCB0aGlzIGRvZXMuLi4gKi8KLSNlbHNlCi0gICAgaWYgKGdldHRp bWVvZmRheSgmdHYsICZ0eikgPCAwKQotI2VuZGlmIC8qIE5PVElNRVpPTkUgKi8KLSNlbmRpZiAv KiBQVFggKi8KLSNlbmRpZiAvKiBHVE9ET05FQVJHICovCi0gICAgICByZXR1cm4oLTEpOwotICAg IHQxID0gdHYudHZfc2VjOyAgICAgICAgICAgICAgICAgICAgIC8qIFNlY29uZHMgKi8KLSNlbmRp ZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlmIC8qIEhQVVg5ICovCi0gICAgdHYudHZfc2VjID0gMDsg ICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHNlbGVjdCgpICovCi0gICAgdHYudHZfdXNlYyA9 IG0gKiAxMDAwTDsKLSNpZmRlZiBCU0Q0NAotICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikw LCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwotICAgIGRlYnVnKEYxMDEsIm1zbGVl cCBCU0Q0NCBzZWxlY3QiLCIiLHgpOwotI2Vsc2UgLyogQlNENDQgKi8KLSNpZmRlZiBfX2xpbnV4 X18KLSAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQg KikwLCAmdHYgKTsKLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgX19saW51eF9fIHNlbGVjdCIsIiIs eCk7Ci0jZWxzZSAvKiBfX2xpbnV4X18gKi8KLSNpZmRlZiBCU0Q0MwotICAgIHggPSBzZWxlY3Qo IDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwotICAgIGRl YnVnKEYxMDEsIm1zbGVlcCBCU0Q0MyBzZWxlY3QiLCIiLHgpOwotI2Vsc2UgLyogQlNENDMgKi8K LSNpZmRlZiBRTlg2Ci0gICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikw LCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIFFOWDYgc2VsZWN0 IiwiIix4KTsKLSNlbHNlIC8qIFFOWDYgKi8KLSNpZmRlZiBRTlgKLSAgICB4ID0gc2VsZWN0KCAw LCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLSAgICBkZWJ1 ZyhGMTAxLCJtc2xlZXAgUU5YIHNlbGVjdCIsIiIseCk7Ci0jZWxzZSAvKiBRTlggKi8KLSNpZmRl ZiBDT0hFUkVOVAotICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwg KGZkX3NldCAqKTAsICZ0diApOwotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBDT0hFUkVOVCBzZWxl Y3QiLCIiLHgpOwotI2Vsc2UgLyogQ09IRVJFTlQgKi8KLSNpZmRlZiBIUFVYMTAwMAkJCQkvKiAx MC4wMCBvbmx5LCBub3QgMTAuMTAgb3IgbGF0ZXIgKi8KLSAgICB4ID0gc2VsZWN0KCAwLCAoaW50 ICopMCwgKGludCAqKTAsIChpbnQgKikwLCAmdHYgKTsKLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAg SFAtVVggMTAuMDAgc2VsZWN0IiwiIix4KTsKLSNlbHNlIC8qIEhQVVgxMDAwICovCi0jaWZkZWYg U1ZSNAotICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3Nl dCAqKTAsICZ0diApOwotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBTVlI0IHNlbGVjdCIsIiIseCk7 Ci0jZWxzZSAvKiBTVlI0ICovCi0jaWZkZWYgT1NGNDAKLSAgICB4ID0gc2VsZWN0KCAwLCAoZmRf c2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLSAgICBkZWJ1ZyhGMTAx LCJtc2xlZXAgT1NGNDAgc2VsZWN0IiwiIix4KTsKLSNlbHNlIC8qIE9TRjQwICovCi0jaWZkZWYg UFRYCi0gICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0 ICopMCwgJnR2ICk7Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIE9TRjQwIHNlbGVjdCIsIiIseCk7 Ci0jZWxzZQotICAgIHggPSBzZWxlY3QoIDAsIChpbnQgKikwLCAoaW50ICopMCwgKGludCAqKTAs ICZ0diApOwotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBjYXRjaC1hbGwgc2VsZWN0IiwiIix4KTsK LSNlbmRpZiAvKiBQVFggKi8KLSNlbmRpZiAvKiBPU0Y0MCAqLwotI2VuZGlmIC8qIEhQMTAwMCAq LwotI2VuZGlmIC8qIFNWUjQgKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlmIC8qIFFO WCAqLwotI2VuZGlmIC8qIFFOWDYgKi8KLSNlbmRpZiAvKiBCU0Q0MyAqLwotI2VuZGlmIC8qIF9f bGludXhfXyAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogQkVMTFYxMCAqLwotICAg IHJldHVybigwKTsKLQotI2Vsc2UJCQkJCS8qIE5vdCBTRUxFQ1QgKi8KLSNpZmRlZiBDS19QT0xM CQkJCS8qIFdlIGhhdmUgcG9sbCgpICovCi0gICAgc3RydWN0IHBvbGxmZCBwZmQ7CQkJLyogU3Vw cGx5IGEgdmFsaWQgYWRkcmVzcyBmb3IgcG9sbCgpICovCi0KLSNpZmRlZiBPRFQzMAkJCQkvKiBC dXQgaW4gU0NPIE9EVCAzLjAgKi8KLSNpZmRlZiBOQVAJCQkJLyogd2Ugc2hvdWxkIHVzZSBuYXAo KSBpbnN0ZWFkICovCi0gICAgZGVidWcoRjEwMSwibXNsZWVwIE9EVCAzLjAgTkFQIiwiIixtKTsg LyogYmVjYXVzZSB1c2luZyBwb2xsKCkgaGVyZSAqLwotICAgIG5hcCgobG9uZyltKTsJCQkgICAv KiBzZWVtcyB0byBicmVhayBkaWFsaW5nLiAqLwotICAgIHJldHVybigwKTsKLSNlbHNlCi0gICAg ZGVidWcoRjEwMSwibXNsZWVwIE9EVCAzLjAgUE9MTCIsIiIsbSk7Ci0gICAgcG9sbCgmcGZkLCAw LCBtKTsKLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkFQICovCi0jZWxzZQotICAgIGRlYnVn KEYxMDEsIm1zbGVlcCBQT0xMIiwiIixtKTsKLSAgICBwb2xsKCZwZmQsIDAsIG0pOwotICAgIHJl dHVybigwKTsKLSNlbmRpZiAvKiBPRFQzMCAqLwotCi0vKgotICBXZSBjb3VsZCBoYW5kbGUgdGhl IGFib3ZlIG1vcmUgY2xlYW5seSBieSBqdXN0IGxldHRpbmcgbmFwKCkgYWx3YXlzCi0gIHRha2Ug cHJlY2VkZW5jZSBvdmVyIHBvbGwoKSBpbiB0aGlzIHJvdXRpbmUsIGJ1dCB0aGVyZSBpcyBubyB3 YXkgdG8ga25vdwotICB3aGV0aGVyIHRoYXQgd291bGQgYnJlYWsgc29tZXRoaW5nIGVsc2UuCi0q LwotCi0jZWxzZQkJCQkJLyogTm90IFBPTEwgKi8KLSNpZmRlZiBVU0xFRVAKLS8qCi0gICJUaGlz IHJvdXRpbmUgaXMgaW1wbGVtZW50ZWQgdXNpbmcgc2V0aXRpbWVyKDIpOyBpdCByZXF1aXJlcyBl aWdodAotICBzeXN0ZW0gY2FsbHMuLi4iLiAgSW4gb3RoZXIgd29yZHMsIGl0IG1pZ2h0IHRha2Ug NSBtaW51dGVzIHRvIHNsZWVwCi0gIDEwIG1pbGxpc2Vjb25kcy4uLgotKi8KLSAgICBkZWJ1ZyhG MTAxLCJtc2xlZXAgVVNMRUVQIiwiIixtKTsKLSAgICBpZiAobSA+PSAxMDAwKSB7CQkJLyogQ2F0 Y2ggYmlnIGFyZ3VtZW50cy4gKi8KLQlzbGVlcChtLzEwMDApOwotCW0gPSBtICUgMTAwMDsKLQlp ZiAobSA8IDEwKSByZXR1cm4oMCk7Ci0gICAgfQotICAgIHVzbGVlcCgodW5zaWduZWQgaW50KSht ICogMTAwMCkpOwotICAgIHJldHVybigwKTsKLSNlbHNlCi0jaWZkZWYgYWVnaXMKLSAgICB0aW1l XyRjbG9ja190IGR1cjsKLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgYWVnaXMiLCIiLG0pOwotICAg IGR1ci5jMi5oaWdoMTYgPSAwOwotICAgIGR1ci5jMi5sb3czMiAgPSAyNTAgKiBtOyAvKiBvbmUg bWlsbGlzZWNvbmQgPSAyNTAgZm91ciBtaWNyb3NlY29uZCB0aWNrcyAqLwotICAgIHRpbWVfJHdh aXQodGltZV8kcmVsYXRpdmUsIGR1ciwgc3QpOwotICAgIHJldHVybigwKTsKLSNlbHNlCi0jaWZk ZWYgUFJPVlgxCi0gICAgZGVidWcoRjEwMSwibXNsZWVwIFZlbml4IiwiIixtKTsKLSAgICBpZiAo bSA8PSAwKSByZXR1cm4oMCk7Ci0gICAgc2xlZXAoLSgobSAqIDYwICsgNTAwKSAvIDEwMDApKTsK LSAgICByZXR1cm4oMCk7Ci0jZWxzZQotI2lmZGVmIE5BUAotICAgIGRlYnVnKEYxMDEsIm1zbGVl cCBOQVAiLCIiLG0pOwotICAgIG5hcCgobG9uZyltKTsKLSAgICByZXR1cm4oMCk7Ci0jZWxzZQot I2lmZGVmIEFUVFNWCi0jaWZuZGVmIEJTRDQ0Ci0gICAgZXh0ZXJuIGxvbmcgdGltZXMoKTsJCS8q IE9yICNpbmNsdWRlIDx0aW1lcy5oPiA/ICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSAgICBsb25n IHQxLCB0MiwgdGFycmF5WzRdOwotICAgIGludCB0MzsKLSAgICBjaGFyICpjcCA9IGdldGVudigi SFoiKTsKLSAgICBpbnQgQ0xPQ0tfVElDSzsKLSAgICBpbnQgaGVydHo7Ci0KLSAgICBpZiAoY3Ag JiYgKGhlcnR6ID0gYXRvaShjcCkpKSB7Ci0gICAgICAgIENMT0NLX1RJQ0sgID0gMTAwMCAvIGhl cnR6OwotICAgIH0gZWxzZSB7CQkJCS8qIHByb2JhYmx5IHNpbmdsZSB1c2VyIG1vZGUgKi8KLSNp ZmRlZiBIWgotICAgICAgICBDTE9DS19USUNLICA9IDEwMDAgLyBIWjsKLSNlbHNlCi0Jc3RhdGlj IHdhcm5lZCA9IDA7Ci0JLyogSFogYWx3YXlzIGV4aXN0cyBpbiwgZm9yIGluc3RhbmNlLCBTQ08g WGVuaXgsIHNvIHlvdSBkb24ndCBoYXZlIHRvCi0JICogbWFrZSBzcGVjaWFsICNpZmRlZnMgZm9y IFhFTklYIGhlcmUsIGxpa2UgaW4gdmVyIDRGLiBBbHNvLCBpZiB5b3UKLQkgKiBoYXZlIFhlbml4 LCB5b3UgaGF2ZSBzaG91bGQgaGF2ZSBuYXAoKSwgc28gdGhlIGJlc3QgaXMgdG8gdXNlIC1ETkFQ Ci0JICogaW4gdGhlIG1ha2VmaWxlLiBNb3N0IHN5c3RlbXMgaGF2ZSBIWi4KLQkgKi8KLQlDTE9D S19USUNLID0gMTc7CQkvKiAxLzYwIHNlYyAqLwotCWlmICghd2FybmVkKSB7Ci0gICAgICAgICAg cHJpbnRmKCJ3YXJuaW5nOiBlbnZpcm9ubWVudCB2YXJpYWJsZSBIWiBiYWQuLi4gdXNpbmcgSFo9 JWRcclxuIiwKLQkJIDEwMDAgLyBDTE9DS19USUNLKTsKLSAgICAgICAgICB3YXJuZWQgPSAxOwot CX0KLSNlbmRpZiAvKiAhSFogKi8KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIEFUVFNW IiwiIixtKTsKLSAgICBpZiAobSA8PSAwKSByZXR1cm4oMCk7Ci0gICAgaWYgKG0gPj0gMTAwMCkg ewkJCS8qIENhdGNoIGJpZyBhcmd1bWVudHMuICovCi0Jc2xlZXAobS8xMDAwKTsKLQltID0gbSAl IDEwMDA7Ci0JaWYgKG0gPCAxMCkgcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAoKHQxID0gdGlt ZXModGFycmF5KSkgPCAwKSByZXR1cm4oLTEpOwotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGlm ICgodDIgPSB0aW1lcyh0YXJyYXkpKSA8IDApIHJldHVybigtMSk7Ci0gICAgICAgIHQzID0gKChp bnQpKHQyIC0gdDEpKSAqIENMT0NLX1RJQ0s7Ci0gICAgICAgIGlmICh0MyA+IG0pIHJldHVybih0 Myk7Ci0gICAgfQotI2Vsc2UgLyogTm90IEFUVFNWICovCi0jaWZkZWYgTVNMRlRJTUUJCQkJLyog VXNlIGZ0aW1lKCkgbG9vcC4uLiAqLwotICAgIGludCB0MSwgdDMgPSAwOwotICAgIGRlYnVnKEYx MDEsIm1zbGVlcCBNU0xGVElNRSIsIiIsbSk7Ci0gICAgaWYgKG0gPD0gMCkgcmV0dXJuKDApOwot ICAgIGlmIChtID49IDEwMDApIHsJCQkvKiBDYXRjaCBiaWcgYXJndW1lbnRzLiAqLwotCXNsZWVw KG0vMTAwMCk7Ci0JbSA9IG0gJSAxMDAwOwotCWlmIChtIDwgMTApIHJldHVybigwKTsKLSAgICB9 Ci0jaWZkZWYgUU5YCi0gICAgZnRpbWUoJmZ0cCk7CQkJLyogdm9pZCBmdGltZSgpIGluIFFOWCAq LwotI2Vsc2UKLSAgICBpZiAoZnRpbWUoJmZ0cCkgPCAwKSByZXR1cm4oLTEpOwkvKiBHZXQgYmFz ZSB0aW1lLiAqLwotI2VuZGlmIC8qIFFOWCAqLwotICAgIHQxID0gKChmdHAudGltZSAmIDB4ZmYp ICogMTAwMCkgKyBmdHAubWlsbGl0bTsKLSAgICB3aGlsZSAoMSkgewotICAgICAgICBmdGltZSgm ZnRwKTsJCQkvKiBHZXQgY3VycmVudCB0aW1lIGFuZCBjb21wYXJlLiAqLwotICAgICAgICB0MyA9 ICgoKGZ0cC50aW1lICYgMHhmZikgKiAxMDAwKSArIGZ0cC5taWxsaXRtKSAtIHQxOwotICAgICAg ICBpZiAodDMgPiBtKSByZXR1cm4oMCk7Ci0gICAgfQotI2Vsc2UKLS8qIFRoaXMgaW5jbHVkZXMg dHJ1ZSBQT1NJWCwgd2hpY2ggaGFzIG5vIHdheSB0byBkbyB0aGlzLiAqLwotICAgIGRlYnVnKEYx MDEsIm1zbGVlcCBidXN5IGxvb3AiLCIiLG0pOwotICAgIGlmIChtID49IDEwMDApIHsJCQkvKiBD YXRjaCBiaWcgYXJndW1lbnRzLiAqLwotCXNsZWVwKG0vMTAwMCk7Ci0JbSA9IG0gJSAxMDAwOwot CWlmIChtIDwgMTApIHJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKG0gPiAwKSB3aGlsZSAobSA+ IDApIG0tLTsJLyogSnVzdCBhIGR1bWIgYnVzeSBsb29wICovCi0gICAgcmV0dXJuKDApOwotI2Vu ZGlmIC8qIE1TTEZUSU1FICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBOQVAgKi8K LSNlbmRpZiAvKiBQUk9WWDEgKi8KLSNlbmRpZiAvKiBhZWdpcyAqLwotI2VuZGlmIC8qIENLX1BP TEwgKi8KLSNlbmRpZiAvKiBTRUxFQ1QgKi8KLSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotI2Vu ZGlmIC8qIFVTTEVFUCAqLwotI2VuZGlmIC8qIFBsYW45ICovCi19Ci0KLS8qICBSIFQgSSBNIEUg UiAtLSAgUmVzZXQgZWxhcHNlZCB0aW1lIGNvdW50ZXIgICovCi0KLVZPSUQKLXJ0aW1lcigpIHsK LSAgICB0Y291bnQgPSB0aW1lKCAodGltZV90ICopIDAgKTsKLX0KLQotCi0vKiAgRyBUIEkgTSBF IFIgLS0gIEdldCBjdXJyZW50IHZhbHVlIG9mIGVsYXBzZWQgdGltZSBjb3VudGVyIGluIHNlY29u ZHMgICovCi0KLWludAotZ3RpbWVyKCkgewotICAgIGludCB4OwotICAgIHggPSAoaW50KSAodGlt ZSggKHRpbWVfdCAqKSAwICkgLSB0Y291bnQpOwotICAgIGRlYnVnKEYxMDEsImd0aW1lciIsIiIs eCk7Ci0gICAgcmV0dXJuKCAoeCA8IDApID8gMCA6IHggKTsKLX0KLQotI2lmZGVmIEdGVElNRVIK LS8qCi0gIEZsb2F0aW5nLXBvaW50IHRpbWVycy4gIFJlcXVpcmUgbm90IG9ubHkgZmxvYXRpbmcg cG9pbnQgc3VwcG9ydCwgYnV0Ci0gIGFsc28gZ2V0dGltZW9mZGF5KCkuCi0qLwotc3RhdGljIHN0 cnVjdCB0aW1ldmFsIHR6ZXJvOwotCi1WT0lECi1yZnRpbWVyKCkgewotI2lmZGVmIEdUT0RPTkVB UkcJCQkvKiBBY2NvdW50IGZvciBNb3QncyBkZWZpbml0aW9uICovCi0gICAgKFZPSUQpIGdldHRp bWVvZmRheSgmdHplcm8pOwotI2Vsc2UKLSAgICAoVk9JRCkgZ2V0dGltZW9mZGF5KCZ0emVybywg KHN0cnVjdCB0aW1lem9uZSAqKTApOwotI2VuZGlmIC8qIEdUT0RPTkVBUkcgKi8KLX0KLQotQ0tG TE9BVAotZ2Z0aW1lcigpIHsKLSAgICBzdHJ1Y3QgdGltZXZhbCB0bm93LCB0ZGVsdGE7Ci0gICAg Q0tGTE9BVCBzOwotI2lmZGVmIERFQlVHCi0gICAgY2hhciBmcGJ1Zls2NF07Ci0jZW5kaWYgLyog REVCVUcgKi8KLSNpZmRlZiBHVE9ET05FQVJHCQkJLyogQWNjb3VudCBmb3IgTW90J3MgZGVmaW5p dGlvbiAqLwotICAgIChWT0lEKSBnZXR0aW1lb2ZkYXkoJnRub3cpOwotI2Vsc2UKLSAgICAoVk9J RCkgZ2V0dGltZW9mZGF5KCZ0bm93LCAoc3RydWN0IHRpbWV6b25lICopMCk7Ci0jZW5kaWYgLyog R1RPRE9ORUFSRyAqLwotCi0gICAgdGRlbHRhLnR2X3NlYyA9IHRub3cudHZfc2VjIC0gdHplcm8u dHZfc2VjOwotICAgIHRkZWx0YS50dl91c2VjID0gdG5vdy50dl91c2VjIC0gdHplcm8udHZfdXNl YzsKLQotICAgIGlmICh0ZGVsdGEudHZfdXNlYyA8IDApIHsKLQl0ZGVsdGEudHZfc2VjLS07Ci0J dGRlbHRhLnR2X3VzZWMgKz0gMTAwMDAwMDsKLSAgICB9Ci0gICAgcyA9IChDS0ZMT0FUKSB0ZGVs dGEudHZfc2VjICsgKChDS0ZMT0FUKSB0ZGVsdGEudHZfdXNlYyAvIDEwMDAwMDAuMCk7Ci0gICAg aWYgKHMgPCBHRk1JTlRJTUUpCi0gICAgICBzID0gR0ZNSU5USU1FOwotI2lmZGVmIERFQlVHCi0g ICAgaWYgKGRlYmxvZykgewotCXNwcmludGYoZnBidWYsIiVmIixzKTsKLQlkZWJ1ZyhGMTEwLCJn ZnRpbWVyIixmcGJ1ZiwwKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByZXR1cm4o cyk7Ci19Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0vKiAgWiBUIEkgTSBFICAtLSAgUmV0dXJu IGFzY3RpbWUoKS1mb3JtYXQgZGF0ZS90aW1lIHN0cmluZyAgKi8KLS8qCi0gIE5PVEU6IGFzIGEg c2lkZSBlZmZlY3Qgb2YgY2FsbGluZyB0aGlzIHJvdXRpbmUsIHdlIGNhbiBhbHNvIHNldCB0aGUK LSAgZm9sbG93aW5nIHR3byB2YXJpYWJsZXMsIGdpdmluZyB0aGUgbWljcm8tIGFuZCBtaWxsaXNl Y29uZHMgKGZyYWN0aW9ucyBvZgotICBzZWNvbmRzKSBvZiB0aGUgY2xvY2sgdGltZS4gIEN1cnJl bnRseSB0aGlzIGlzIGRvbmUgb25seSBpbiBCU0QtYmFzZWQgYnVpbGRzCi0gIHRoYXQgdXNlIGdl dHRpbWVvZmRheSgpLiAgV2hlbiB0aGVzZSB2YXJpYWJsZXMgYXJlIG5vdCBmaWxsZWQgaW4sIHRo ZXkgYXJlCi0gIGxlZnQgd2l0aCBhIHZhbHVlIG9mIC0xTC4KLSovCi1zdGF0aWMgY2hhciBhc2N0 bWJ1Zls2NF07Ci0KLVZPSUQKLXp0aW1lKHMpIGNoYXIgKipzOyB7Ci0KLSNpZmRlZiBHRlRJTUVS Ci0vKgotICBUaGUgZ2V0dGltZW9mZGF5KCkgbWV0aG9kLCB3aGljaCBhbHNvIHNldHMgenRtc2Vj IGFuZCB6dHVzZWMsIHdvcmtzIGZvcgotICBhbGwgR0ZUSU1FUiBidWlsZHMuICBOT1RFOiB6dG1z ZWMgYW5kIHp0dXNlYyBhcmUgZGVmaW5lZCBpbiBja2NtYWkuYywKLSAgYW5kIGV4dGVybiBkZWNs YXJhdGlvbnMgZm9yIHRoZW0gYXJlIGluIGNrY2RlYi5oOyB0aHVzIHRoZXkgYXJlCi0gIGRlY2xh cmVkIGluIHRoaXMgZmlsZSBieSBpbmNsdXNpb24gb2YgY2tjZGViLmguCi0qLwotICAgIGNoYXIg KmFzY3RpbWUoKTsKLSAgICBzdHJ1Y3QgdG0gKmxvY2FsdGltZSgpOwotICAgIHN0cnVjdCB0bSAq dHA7Ci0gICAgenRtc2VjID0gLTFMOwotICAgIHp0dXNlYyA9IC0xTDsKLQotICAgIGlmICghcykK LSAgICAgIGRlYnVnKEYxMDAsInp0aW1lIHM9PU5VTEwiLCIiLDApOwotCi0jaWZkZWYgR1RPRE9O RUFSRwotICAgIC8qIE5vIDJuZCBhcmcgaW4gTW90b3JvbGEgU1Y4OCBhbmQgc29tZSBvdGhlcnMg Ki8KLSAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0dikgPiAtMSkKLSNlbHNlCi0jaWZuZGVmIENPSEVS RU5UCi0jaWZkZWYgUFRYCi0gICAgaWYgKGdldHRpbWVvZmRheSgmdHYsTlVMTCkgPiAtMSkKLSNl bHNlCi0jaWZkZWYgTk9USU1FWk9ORQotICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKSA+ IC0xKQkvKiB3b25kZXIgd2hhdCB0aGlzIGRvZXMuLi4gKi8KLSNlbHNlCi0gICAgaWYgKGdldHRp bWVvZmRheSgmdHYsICZ0eikgPiAtMSkKLSNlbmRpZiAvKiBOT1RJTUVaT05FICovCi0jZW5kaWYg LyogUFRYICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSNlbmRpZiAvKiBHVE9ET05FQVJHICov Ci0gICAgICB7CQkJCQkvKiBGaWxsIGluIHRtIHN0cnVjdCAqLwotCXp0dXNlYyA9IHR2LnR2X3Vz ZWM7CQkvKiBNaWNyb3NlY29uZHMgKi8KLQl6dG1zZWMgPSB6dHVzZWMgLyAxMDAwTDsJLyogTWls bGlzZWNvbmRzICovCi0jaWZkZWYgSFBVWDkKLQl7Ci0JICAgIHRpbWVfdCB6ejsKLQkgICAgenog PSB0di50dl9zZWM7Ci0JICAgIHRwID0gbG9jYWx0aW1lKCZ6eik7CS8qIENvbnZlcnQgdG8gbG9j YWwgdGltZSAqLwotCX0KLSNlbHNlCi0jaWZkZWYgSFBVWDEwMDAKLQl7Ci0JICAgIHRpbWVfdCB6 ejsKLQkgICAgenogPSB0di50dl9zZWM7Ci0JICAgIHRwID0gbG9jYWx0aW1lKCZ6eik7Ci0JfQot I2Vsc2UKLSNpZmRlZiBMSU5VWAotCXsgICAvKiBhdm9pZCB1bmFsaWduZWQgYWNjZXNzIHRyYXAg b24gNjQtYml0IHBsYXRmb3JtcyAqLwotCSAgICB0aW1lX3Qgeno7Ci0JICAgIHp6ID0gdHYudHZf c2VjOwotCSAgICB0cCA9IGxvY2FsdGltZSgmenopOwotCX0KLSNlbHNlCi0jaWZkZWYgTUFDT1NY Ci0JdHAgPSBsb2NhbHRpbWUoKHRpbWVfdCAqKSZ0di50dl9zZWMpOyAvKiBDb252ZXJ0IHRvIGxv Y2FsIHRpbWUgKi8KLSNlbHNlCi0JdHAgPSBsb2NhbHRpbWUoJnR2LnR2X3NlYyk7Ci0jZW5kaWYg LyogTUFDT1NYICovCi0jZW5kaWYgLyogTElOVVggKi8KLSNlbmRpZiAvKiBIUFVYMTAwMCAqLwot I2VuZGlmIC8qIEhQVVg5ICovCi0JaWYgKHMpIHsKLQkgICAgY2hhciAqIHMyOwotCSAgICBzMiA9 IGFzY3RpbWUodHApOwkJLyogQ29udmVydCByZXN1bHQgdG8gQVNDSUkgc3RyaW5nICovCi0JICAg IGFzY3RtYnVmWzBdID0gJ1wwJzsKLQkgICAgaWYgKHMyKSBja3N0cm5jcHkoYXNjdG1idWYsczIs NjQpOwotCSAgICAqcyA9IGFzY3RtYnVmOwotCSAgICBkZWJ1ZyhGMTExLCJ6dGltZSBHRlRJTUVS IGdldHRpbWVvZmRheSIsKnMsenR1c2VjKTsKLQl9Ci0gICAgfQotI2Vsc2UgIC8qIE5vdCBHRlRJ TUVSICovCi0KLSN1bmRlZiBaVElNRVY3CQkJCS8qIFdoaWNoIHN5c3RlbXMgbmVlZCB0byB1c2Ug Ki8KLSNpZmRlZiBDT0hFUkVOVAkJCQkvKiBvbGQgVU5JWCBWZXJzaW9uIDcgd2F5Li4uICovCi0j ZGVmaW5lIFpUSU1FVjcKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2lmZGVmIFRPV0VSMQotI2Rl ZmluZSBaVElNRVY3Ci0jZW5kaWYgLyogVE9XRVIxICovCi0jaWZkZWYgQU5ZQlNECi0jaWZuZGVm IEJTRDQyCi0jZGVmaW5lIFpUSU1FVjcKLSNlbmRpZiAvKiBCU0Q0MiAqLwotI2VuZGlmIC8qIEFO WUJTRCAqLwotI2lmZGVmIFY3Ci0jaWZuZGVmIE1JTklYCi0jZGVmaW5lIFpUSU1FVjcKLSNlbmRp ZiAvKiBNSU5JWCAqLwotI2VuZGlmIC8qIFY3ICovCi0jaWZkZWYgUE9TSVgKLSNkZWZpbmUgWlRJ TUVWNwotI2VuZGlmIC8qIFBPU0lYICovCi0KLSNpZmRlZiBIUFVYMTAyMAotLyoKLSAgUHJvdG90 eXBlcyBhcmUgaW4gPHRpbWUuaD4sIGluY2x1ZGVkIGFib3ZlLgotKi8KLSAgICB0aW1lX3QgY2xv Y2tfc3RvcmFnZTsKLSAgICBjbG9ja19zdG9yYWdlID0gdGltZSgodm9pZCAqKSAwKTsKLSAgICBp ZiAocykgewotCSpzID0gY3RpbWUoJmNsb2NrX3N0b3JhZ2UpOwotCWRlYnVnKEYxMTAsInp0aW1l OiBIUFVYIDEwLjIwIiwqcywwKTsKLSAgICB9Ci0jZWxzZQotI2lmZGVmIEFUVFNWCQkJCS8qIEFU JlQgd2F5ICovCi0vKiAgZXh0ZXJuIGxvbmcgdGltZSgpOyAqLwkJLyogVGhlb3JldGljYWxseSB0 aGVzZSBzaG91bGQgKi8KLSAgICBjaGFyICpjdGltZSgpOwkJCS8qIGFscmVhZHkgYmVlbiBkY2wn ZCBpbiA8dGltZS5oPiAqLwotICAgIHRpbWVfdCBjbG9ja19zdG9yYWdlOwotICAgIGNsb2NrX3N0 b3JhZ2UgPSB0aW1lKAotI2lmZGVmIElSSVg2MAotCQkJICh0aW1lX3QgKikKLSNlbHNlCi0jaWZk ZWYgQlNENDQKLQkJCSAodGltZV90ICopCi0jZWxzZQotCQkJIChsb25nICopCi0jZW5kaWYgLyog QlNENDQgKi8KLSNlbmRpZiAvKiBJUklYNjAgKi8KLQkJCSAwICk7Ci0gICAgaWYgKHMpIHsKLQkq cyA9IGN0aW1lKCAmY2xvY2tfc3RvcmFnZSApOwotCWRlYnVnKEYxMTAsInp0aW1lOiBBVFRTViIs KnMsMCk7Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBQUk9WWDEJCQkJLyogVmVuaXggMS4wIHdheSAq LwotICAgIGludCB1dGltZVsyXTsKLSAgICB0aW1lKHV0aW1lKTsKLSAgICBpZiAocykgewotCSpz ID0gY3RpbWUodXRpbWUpOwotCWRlYnVnKEYxMTAsInp0aW1lOiBQUk9WWDEiLCpzLDApOwotICAg IH0KLSNlbHNlCi0jaWZkZWYgQlNENDIJCQkJLyogNC4yQlNEIHdheSAqLwotICAgIGNoYXIgKmFz Y3RpbWUoKTsKLSAgICBzdHJ1Y3QgdG0gKmxvY2FsdGltZSgpOwotICAgIHN0cnVjdCB0bSAqdHA7 Ci0gICAgZ2V0dGltZW9mZGF5KCZ0diwgJnR6KTsKLSAgICB6dHVzZWMgPSB0di50dl91c2VjOwot ICAgIHp0bXNlYyA9IHR2LnR2X3VzZWMgLyAxMDAwTDsKLSAgICB0cCA9IGxvY2FsdGltZSgmdHYu dHZfc2VjKTsKLSAgICBpZiAocykgewotCSpzID0gYXNjdGltZSh0cCk7Ci0JZGVidWcoRjExMSwi enRpbWU6IEJTRDQyIiwqcyx6dHVzZWMpOwotICAgIH0KLSNlbHNlCi0jaWZkZWYgTUlOSVgJCQkJ LyogTUlOSVggd2F5ICovCi0jaWZkZWYgQ09NTUVOVAotICAgIGV4dGVybiBsb25nIHRpbWUoKTsJ CQkvKiBBbHJlYWR5IGdvdCB0aGVzZSBmcm9tIDx0aW1lLmg+ICovCi0gICAgZXh0ZXJuIGNoYXIg KmN0aW1lKCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHRpbWVfdCB1dGltZVsyXTsKLSAg ICB0aW1lKHV0aW1lKTsKLSAgICBpZiAocykgewotCSpzID0gY3RpbWUodXRpbWUpOwotCWRlYnVn KEYxMTAsInp0aW1lOiBNSU5JWCIsKnMsMCk7Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBaVElNRVY3 CQkJCS8qIFRoZSByZWd1bGFyIHdheSAqLwotICAgIGNoYXIgKmFzY3RpbWUoKTsKLSAgICBzdHJ1 Y3QgdG0gKmxvY2FsdGltZSgpOwotICAgIHN0cnVjdCB0bSAqdHA7Ci0gICAgbG9uZyB4Y2xvY2s7 CQkJLyogb3IgdW5zaWduZWQgbG9uZyBmb3IgQmVCb3g/ICovCi0gICAgdGltZSgmeGNsb2NrKTsK LSAgICB0cCA9IGxvY2FsdGltZSgmeGNsb2NrKTsKLSAgICBpZiAocykgewotCSpzID0gYXNjdGlt ZSh0cCk7Ci0JZGVidWcoRjExMCwienRpbWU6IFpUSU1FVjciLCpzLDApOwotICAgIH0KLSNlbHNl CQkJCQkvKiBDYXRjaC1hbGwgZm9yIG90aGVycy4uLiAqLwotICAgIGlmIChzKSB7Ci0JKnMgPSAi RGF5IE1vbiAwMCAwMDowMDowMCAwMDAwXG4iOyAvKiBEdW1teSBpbiBhc2N0aW1lKCkgZm9ybWF0 ICovCi0JZGVidWcoRjExMCwienRpbWU6IGNhdGNoLWFsbCIsKnMsMCk7Ci0gICAgfQotI2VuZGlm IC8qIFpUSU1FVjcgKi8KLSNlbmRpZiAvKiBNSU5JWCAqLwotI2VuZGlmIC8qIEJTRDQyICovCi0j ZW5kaWYgLyogUFJPVlgxICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBIUFVYMTAy MCAqLwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLX0KLQotLyogIEMgTyBOIEcgTSAgLS0gIEdldCBj b25zb2xlIHRlcm1pbmFsIG1vZGVzLiAgKi8KLQotLyoKLSAgU2F2ZXMgaW5pdGlhbCBjb25zb2xl IG1vZGUsIGFuZCBlc3RhYmxpc2hlcyB2YXJpYWJsZXMgZm9yIHN3aXRjaGluZwotICBiZXR3ZWVu IGN1cnJlbnQgKHByZXN1bWFibHkgbm9ybWFsKSBtb2RlIGFuZCBvdGhlciBtb2Rlcy4KLSAgU2hv dWxkIGJlIGNhbGxlZCB3aGVuIHByb2dyYW0gc3RhcnRzLCBidXQgb25seSBhZnRlciBlc3RhYmxp c2hpbmcKLSAgd2hldGhlciBwcm9ncmFtIGlzIGluIHRoZSBmb3JlZ3JvdW5kIG9yIGJhY2tncm91 bmQuCi0gIFJldHVybnMgMSBpZiBpdCBnb3QgdGhlIG1vZGVzIE9LLCAwIGlmIGl0IGRpZCBub3Ro aW5nLCAtMSBvbiBlcnJvci4KLSovCi1pbnQKLWNvbmdtKCkgewotICAgIGludCBmZDsKLSAgICBp ZiAoYmFja2dyZCB8fCAhaXNhdHR5KDApKSB7CS8qIElmIGluIGJhY2tncm91bmQuICovCi0JY2dt ZiA9IC0xOwkJCS8qIERvbid0IGJvdGhlciwgbW9kZXMgYXJlIGdhcmJhZ2UuICovCi0JcmV0dXJu KC0xKTsKLSAgICB9Ci0gICAgaWYgKGNnbWYgPiAwKSByZXR1cm4oMCk7CQkvKiBBbHJlYWR5IGRp ZCB0aGlzLiAqLwotICAgIGRlYnVnKEYxMDAsImNvbmdtIGdldHRpbmcgbW9kZXMiLCIiLDApOyAv KiBOZWVkIHRvIGRvIGl0LiAqLwotI2lmZGVmIGFlZ2lzCi0gICAgaW9zXyRpbnFfdHlwZV91aWQo aW9zXyRzdGRpbiwgY29udWlkLCBzdCk7Ci0gICAgaWYgKHN0LmFsbCAhPSBzdGF0dXNfJG9rKSB7 Ci0JZnByaW50ZihzdGRlcnIsICJwcm9ibGVtIGdldHRpbmcgc3RkaW4gb2JqdHlwZTogIik7Ci0J ZXJyb3JfJHByaW50KHN0KTsKLSAgICB9Ci0gICAgY29uY3JwID0gKGNvbnVpZCA9PSBtYnhfJHVp ZCk7Ci0gICAgY29uYnVmbiA9IDA7Ci0jZW5kaWYgLyogYWVnaXMgKi8KLQotI2lmbmRlZiBCRUJP WAotICAgIGlmICgoZmQgPSBvcGVuKENUVE5BTSwyKSkgPCAwKSB7CS8qIE9wZW4gY29udHJvbGxp bmcgdGVybWluYWwgKi8KLSNpZmRlZiBDT01NRU5UCi0JZnByaW50ZihzdGRlcnIsIkVycm9yIG9w ZW5pbmcgJXNcbiIsIENUVE5BTSk7Ci0JcGVycm9yKCJjb25nbSIpOwotCXJldHVybigtMSk7Ci0j ZWxzZQotCWZkID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotI2Vsc2UKLSAgICBm ZCA9IDA7Ci0jZW5kaWYgLyogIUJFQk9YICovCi0jaWZkZWYgQlNENDRPUlBPU0lYCi0gICAgaWYg KHRjZ2V0YXR0cihmZCwmY2NvbGQpIDwgMCkgcmV0dXJuKC0xKTsKLSAgICBpZiAodGNnZXRhdHRy KGZkLCZjY2NicmspIDwgMCkgcmV0dXJuKC0xKTsKLSAgICBpZiAodGNnZXRhdHRyKGZkLCZjY3Jh dykgPCAwKSByZXR1cm4oLTEpOwotI2Vsc2UKLSNpZmRlZiBBVFRTVgotICAgIGlmIChpb2N0bChm ZCxUQ0dFVEEsJmNjb2xkKSAgPCAwKSByZXR1cm4oLTEpOwotICAgIGlmIChpb2N0bChmZCxUQ0dF VEEsJmNjY2JyaykgPCAwKSByZXR1cm4oLTEpOwotICAgIGlmIChpb2N0bChmZCxUQ0dFVEEsJmNj cmF3KSAgPCAwKSByZXR1cm4oLTEpOwotI2lmZGVmIFZYVkUKLSAgICBjY2NicmsuY19saW5lID0g MDsJCQkvKiBTVFRZIGxpbmUgMCBmb3IgQ0RDIFZYL1ZFICovCi0gICAgaWYgKGlvY3RsKGZkLFRD U0VUQSwmY2NjYnJrKSA8IDApIHJldHVybigtMSk7Ci0gICAgY2NyYXcuY19saW5lID0gMDsJCQkv KiBTVFRZIGxpbmUgMCBmb3IgQ0RDIFZYL1ZFICovCi0gICAgaWYgKGlvY3RsKGZkLFRDU0VUQSwm Y2NyYXcpIDwgMCkgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBWWFZFICovCi0jZWxzZQotI2lmZGVm IEJFTExWMTAKLSAgICBpZiAoaW9jdGwoZmQsVElPQ0dFVFAsJmNjb2xkKSA8IDApIHJldHVybigt MSk7Ci0gICAgaWYgKGlvY3RsKGZkLFRJT0NHRVRQLCZjY2NicmspIDwgMCkgcmV0dXJuKC0xKTsK LSAgICBpZiAoaW9jdGwoZmQsVElPQ0dFVFAsJmNjcmF3KSA8IDApIHJldHVybigtMSk7Ci0gICAg ZGVidWcoRjEwMSwiY2NjYnJrLnNnX2ZsYWdzIG9yaWciLCIiLCBjY2Nicmsuc2dfZmxhZ3MpOwot I2Vsc2UKLSAgICBpZiAoZ3R0eShmZCwmY2NvbGQpIDwgMCkgcmV0dXJuKC0xKTsKLSAgICBpZiAo Z3R0eShmZCwmY2NjYnJrKSA8IDApIHJldHVybigtMSk7Ci0gICAgaWYgKGd0dHkoZmQsJmNjcmF3 KSA8IDApIHJldHVybigtMSk7Ci0jZW5kaWYgLyogQkVMTFYxMCAqLwotI2VuZGlmIC8qIEFUVFNW ICovCi0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0jaWZkZWYgc29ueV9uZXdzCQkJLyogU29u eSBORVdTICovCi0gICAgaWYgKGlvY3RsKGZkLFRJT0NLR0VULCZrbV9jb24pIDwgMCkgeyAvKiBH ZXQgY29uc29sZSBLYW5qaSBtb2RlICovCi0JcGVycm9yKCJjb25nbSBlcnJvciBnZXR0aW5nIEth bmppIG1vZGUiKTsKLQlkZWJ1ZyhGMTAxLCJjb25nbSBlcnJvciBnZXR0aW5nIEthbmppIG1vZGUi LCIiLDApOwotCWttX2NvbiA9IC0xOwkJCS8qIE1ha2Ugc3VyZSB0aGlzIHN0YXlzIHVuZGVmaW5l ZC4gKi8KLQlyZXR1cm4oLTEpOwotICAgIH0KLSNlbmRpZiAvKiBzb255X25ld3MgKi8KLSAgICBp ZiAoZmQgPiAwKQotICAgICAgY2xvc2UoZmQpOwotICAgIGNnbWYgPSAxOwkJCQkvKiBGbGFnIHRo YXQgd2UgZ290IHRoZW0uICovCi0gICAgcmV0dXJuKDEpOwotfQotCi0KLXN0YXRpYyBWT0lECi1j b25nZXRidWYoeCkgaW50IHg7IHsKLSAgICBpbnQgbjsKLSAgICBuID0gQ09OQlVGU0laIC0gKGNv bmJ1ZnAgLSBjb25idWYpOwkvKiBIb3cgbXVjaCByb29tIGxlZnQgaW4gYnVmZmVyPyAqLwotICAg IGlmICh4ID4gbikgewotCWRlYnVnKEYxMDEsImNvbmdldGJ1ZiBjaGFyIGxvc3MiLCIiLHgtbik7 Ci0JeCA9IG47Ci0gICAgfQotICAgIHggPSByZWFkKDAsY29uYnVmcCx4KTsKLSAgICBjb25idWZu ICs9IHg7Ci0gICAgZGVidWcoRjExMSwiY29uZ2V0YnVmIHJlYWRhaGVhZCIsY29uYnVmLHgpOwot fQotCi0KLS8qICBDIE8gTiBDIEIgLS0gIFB1dCBjb25zb2xlIGluIGNicmVhayBtb2RlLiAgKi8K LQotLyogIFJldHVybnMgMCBpZiBvaywgLTEgaWYgbm90ICAqLwotCi1pbnQKLSNpZmRlZiBDS19B TlNJQwotY29uY2IoY2hhciBlc2MpCi0jZWxzZQotY29uY2IoZXNjKSBjaGFyIGVzYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotLyogY29uY2IgKi8gewotICAgIGludCB4LCB5ID0gMDsKLSAgICBk ZWJ1ZyhGMTAxLCJjb25jYiBjb25zdGF0ZSIsIiIsY29uc3RhdGUpOwotICAgIGRlYnVnKEYxMDEs ImNvbmNiIGNnbWYiLCIiLGNnbWYpOwotICAgIGRlYnVnKEYxMDEsImNvbmNiIGJhY2tncmQiLCIi LGJhY2tncmQpOwotCi0gICAgaWYgKGNvbnN0YXRlID09IENPTl9DQikKLSAgICAgIHJldHVybigw KTsKLQotICAgIGlmIChjZ21mIDwgMSkJCQkvKiBEaWQgd2UgZ2V0IGNvbnNvbGUgbW9kZXMgeWV0 PyAqLwotICAgICAgaWYgKCFiYWNrZ3JkKQkJCS8qIE5vLCBpbiBiYWNrZ3JvdW5kPyAqLwotCWNv bmdtKCk7CQkJLyogTm8sIHRyeSB0byBnZXQgdGhlbSBub3cuICovCi0gICAgaWYgKGNnbWYgPCAx KQkJCS8qIFN0aWxsIGRvbid0IGhhdmUgdGhlbT8gKi8KLSAgICAgIHJldHVybigwKTsJCQkvKiBH aXZlIHVwLiAqLwotICAgIGRlYnVnKEYxMDEsImNvbmNiIHR0eWZkIiwiIix0dHlmZCk7Ci0gICAg ZGVidWcoRjEwMSwiY29uY2IgdHRmZGZsZyIsIiIsdHRmZGZsZyk7Ci0jaWZkZWYgQ09NTUVOVAot ICAgIC8qIFRoaXMgYnJlYWtzIHJldHVybmluZyB0byBwcm9tcHQgYWZ0ZXIgcHJvdG9jb2wgd2l0 aCAiLWwgMCIgKi8KLSAgICAvKiBDb21tZW50ZWQgb3V0IEp1bHkgMTk5OCAqLwotICAgIGlmICh0 dGZkZmxnICYmIHR0eWZkID49IDAgJiYgdHR5ZmQgPCAzKQotICAgICAgcmV0dXJuKDApOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICB4ID0gaXNhdHR5KDApOwotICAgIGRlYnVnKEYxMDEsImNv bmNiIGlzYXR0eSIsIiIseCk7Ci0gICAgaWYgKCF4KSByZXR1cm4oMCk7CQkJLyogT25seSB3aGVu IHJ1bm5pbmcgb24gcmVhbCB0dHlzICovCi0gICAgZGVidWcoRjEwMSwiY29uY2IgeHN1c3BlbmQi LCIiLHhzdXNwZW5kKTsKLSAgICBpZiAoYmFja2dyZCkJCQkvKiBEbyBub3RoaW5nIGlmIGluIGJh Y2tncm91bmQuICovCi0gICAgICByZXR1cm4oMCk7Ci0gICAgZXNjY2hyID0gZXNjOyAgICAgICAg ICAgICAgICAgICAgICAgLyogTWFrZSB0aGlzIGF2YWlsYWJsZSB0byBvdGhlciBmbnMgKi8KLSAg ICBja3hlY2ggPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9ncmFtIGNhbiBlY2hv IGNoYXJhY3RlcnMgKi8KLSNpZmRlZiBhZWdpcwotICAgIGNvbmJ1Zm4gPSAwOwotICAgIGlmIChj b25jcnApIHJldHVybih3cml0ZSgxLCAiXDAzNVwwMDIiLCAyKSk7Ci0gICAgaWYgKGNvbnVpZCA9 PSBpbnB1dF9wYWRfJHVpZCkge3BhZF8kcmF3KGlvc18kc3RkaW4sIHN0KTsgcmV0dXJuKDApO30K LSNlbmRpZiAvKiBhZWdpcyAqLwotCi0jaWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUgU1ZPUlBPU0lY Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2lmZGVmIFBsYW45Ci0gICAgeCA9IHA5Y29uY2Io KTsKLSNlbHNlCi0jaWZuZGVmIFNWT1JQT1NJWAkJCS8qIEJTRCwgVjcsIGV0YyAqLwotICAgIGRl YnVnKEYxMDEsImNjY2Jyay5zZ19mbGFncyBjb25jYiAxIiwiIiwgY2NjYnJrLnNnX2ZsYWdzKTsK LSAgICBkZWJ1ZyhGMTAxLCJjb25jYiBzdHR5IENCUkVBSyIsIiIsMCk7Ci0gICAgY2NjYnJrLnNn X2ZsYWdzIHw9IChDQlJFQUt8Q1JNT0QpOwkvKiBTZXQgdG8gY2hhcmFjdGVyIHdha2V1cCwgKi8K LSAgICBjY2Nicmsuc2dfZmxhZ3MgJj0gfkVDSE87ICAgICAgICAgICAvKiBubyBlY2hvLiAqLwot ICAgIGRlYnVnKEYxMDEsImNjY2Jyay5zZ19mbGFncyBjb25jYiAyIiwiIiwgY2NjYnJrLnNnX2Zs YWdzKTsKLSAgICBlcnJubyA9IDA7Ci0vKgotICBCU0Qgc3R0eSgpIGNsZWFycyB0aGUgY29uc29s ZSBidWZmZXIuICBTbyBpZiBhbnl0aGluZyBpcyB3YWl0aW5nIGluIGl0LAotICB3ZSBoYXZlIHRv IHJlYWQgaXQgbm93IHRvIGF2b2lkIGxvc2luZyBpdC4KLSovCi0gICAgeCA9IGNvbmNoaygpOwot ICAgIGlmICh4ID4gMCkKLSAgICAgIGNvbmdldGJ1Zih4KTsKLQotI2lmZGVmIEJFTExWMTAKLSAg ICB4ID0gaW9jdGwoMCxUSU9DU0VUUCwmY2NjYnJrKTsKLSNlbHNlCi0gICAgeCA9IHN0dHkoMCwm Y2NjYnJrKTsKLSAgICBkZWJ1ZyhGMTAxLCJjY2Nicmsuc2dfZmxhZ3MgY29uY2IgeCIsIiIsIHgp OwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLSNlbHNlCQkJCQkvKiBTeXMgViBhbmQgUE9TSVggKi8K LSNpZm5kZWYgT1hPUwotICAgIGRlYnVnKEYxMDEsImNvbmNiIGNjY2Jyay5jX2ZsYWciLCIiLGNj Y2Jyay5jX2xmbGFnKTsKLSNpZmRlZiBRTlgKLSAgICAvKiBEb24ndCBtZXNzIHdpdGggSUVYVEVO ICovCi0gICAgY2NjYnJrLmNfbGZsYWcgJj0gfihJQ0FOT058RUNITyk7Ci0jZWxzZQotI2lmZGVm IENPSEVSRU5UCi0gICAgY2NjYnJrLmNfbGZsYWcgJj0gfihJQ0FOT058RUNITyk7Ci0jZWxzZQot ICAgIGNjY2Jyay5jX2xmbGFnICY9IH4oSUNBTk9OfEVDSE98SUVYVEVOKTsKLSNlbmRpZiAvKiBD T0hFUkVOVCAqLwotI2VuZGlmIC8qIFFOWCAqLwotICAgIGNjY2Jyay5jX2xmbGFnIHw9IElTSUc7 CQkvKiBBbGxvdyBzaWduYWxzIGluIGNvbW1hbmQgbW9kZS4gKi8KLSAgICBjY2NicmsuY19pZmxh ZyB8PSBJR05CUks7CQkvKiBCdXQgaWdub3JlIEJSRUFLIHNpZ25hbCAqLwotICAgIGNjY2Jyay5j X2lmbGFnICY9IH5CUktJTlQ7Ci0KLSNlbHNlIC8qIE9YT1MgKi8KLSAgICBkZWJ1ZyhGMTAwLCJj b25jYiBPWE9TIGlzIGRlZmluZWQiLCIiLDApOwotICAgIGNjY2Jyay5jX2xmbGFnICY9IH4oSUNB Tk9OfEVDSE8pOwotICAgIGNjY2Jyay5jX2NjW1ZESVNDQVJEXSA9IGNjY2Jyay5jX2NjW1ZMTkVY VF0gPSBDRElTQUJMRTsKLSNlbmRpZiAvKiBPWE9TICovCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAg QmVsaWV2ZSBpdCBvciBub3QsIGluIFNDTyBVTklYLCBWU1VTUCBpcyBncmVhdGVyIHRoYW4gTkND LCBhbmQgc28gdGhpcwotICBhcnJheSByZWZlcmVuY2UgaXMgb3V0IG9mIGJvdW5kcy4gIEl0J3Mg b25seSBhIGRlYnVnKCkgY2FsbCBzbyB3aG8gbmVlZHMgaXQuCi0qLwotI2lmZGVmIFZTVVNQCi0g ICAgZGVidWcoRjEwMSwiY29uY2IgY19jY1tWU1VTUF0iLCIiLGNjY2Jyay5jX2NjW1ZTVVNQXSk7 Ci0jZW5kaWYgLyogVlNVU1AgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZuZGVmIFZJTlRS Ci0gICAgZGVidWcoRjEwMSwiY29uY2IgY19jY1swXSIsIiIsY2NjYnJrLmNfY2NbMF0pOwotICAg IGNjY2Jyay5jX2NjWzBdID0gMDAzOyAgICAgICAgICAgICAgIC8qIEludGVycnVwdCBjaGFyIGlz IENvbnRyb2wtQyAqLwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAxLCJjb25jYiBjX2NjW1ZJTlRSXSIs IiIsY2NjYnJrLmNfY2NbMF0pOwotICAgIGNjY2Jyay5jX2NjW1ZJTlRSXSA9IDAwMzsKLSNlbmRp ZiAvKiBWSU5UUiAqLwotI2lmbmRlZiBWUVVJVAotICAgIGNjY2Jyay5jX2NjWzFdID0gZXNjY2hy OyAgICAgICAgICAgIC8qIGVzY2FwZSBkdXJpbmcgcGFja2V0IG1vZGVzICovCi0jZWxzZQotICAg IGNjY2Jyay5jX2NjW1ZRVUlUXSA9IGVzY2NocjsKLSNlbmRpZiAvKiBWUVVJVCAqLwotI2lmbmRl ZiBWRU9GCi0gICAgY2NjYnJrLmNfY2NbNF0gPSAxOwotI2Vsc2UKLSNpZm5kZWYgT1hPUwotI2lm ZGVmIFZNSU4KLSAgICBjY2NicmsuY19jY1tWTUlOXSA9IDE7Ci0jZW5kaWYgLyogVk1JTiAqLwot I2Vsc2UgLyogT1hPUyAqLwotICAgIGNjY2Jyay5jX21pbiA9IDE7Ci0jZW5kaWYgLyogT1hPUyAq LwotI2VuZGlmIC8qIFZFT0YgKi8KLSNpZmRlZiBaSUxPRwotICAgIGNjY2Jyay5jX2NjWzVdID0g MDsKLSNlbHNlCi0jaWZuZGVmIFZFT0wKLSAgICBjY2NicmsuY19jY1s1XSA9IDE7Ci0jZWxzZQot I2lmbmRlZiBPWE9TCi0jaWZkZWYgVlRJTUUKLSAgICBjY2NicmsuY19jY1tWVElNRV0gPSAxOwot I2VuZGlmIC8qIFZUSU1FICovCi0jZWxzZSAvKiBPWE9TICovCi0gICAgY2NjYnJrLmNfdGltZSA9 IDE7Ci0jZW5kaWYgLyogT1hPUyAqLwotI2VuZGlmIC8qIFZFT0wgKi8KLSNlbmRpZiAvKiBaSUxP RyAqLwotICAgIGVycm5vID0gMDsKLSNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBTZXQgbmV3IG1v ZGVzICovCi0gICAgeCA9IHRjc2V0YXR0cigwLFRDU0FEUkFJTiwmY2NjYnJrKTsKLSNlbHNlIC8q IEFUVFNWICovICAgICAgCQkJLyogb3IgdGhlIFBPU0lYIHdheSAqLwotICAgIHggPSBpb2N0bCgw LFRDU0VUQVcsJmNjY2Jyayk7CS8qIHRoZSBTeXMgViB3YXkgKi8KLSNlbmRpZiAvKiBCU0Q0NE9S UE9TSVggKi8KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLQotI2lmZGVmIENPSEVSRU5UCi0jdW5k ZWYgU1ZPUlBPU0lYCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotICAgIGRlYnVnKEYxMDEsImNv bmNiIHgiLCIiLHgpOwotICAgIGRlYnVnKEYxMDEsImNvbmNiIGVycm5vIiwiIixlcnJubyk7Ci0K LSNpZmRlZiAgVjcKLSNpZm5kZWYgTUlOSVgKLSAgICBpZiAoa21lbVtDT05dIDwgMCkgewotICAg ICAgICBxYWRkcltDT05dID0gaW5pdHJhd3EoMCk7Ci0gICAgICAgIGlmKChrbWVtW0NPTl0gPSBv cGVuKCIvZGV2L2ttZW0iLCAwKSkgPCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IkNhbid0IHJlYWQgL2Rldi9rbWVtIGluIGNvbmNiLlxuIik7Ci0gICAgICAgICAgICBwZXJyb3Io Ii9kZXYva21lbSIpOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQotICAgIH0KLSNl bmRpZiAvKiBNSU5JWCAqLwotI2VuZGlmIC8qIFY3ICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLQot ICAgIGlmICh4ID4gLTEpCi0gICAgICBjb25zdGF0ZSA9IENPTl9DQjsKLQotICAgIGRlYnVnKEYx MDEsImNvbmNiIHJldHVybnMiLCIiLHgpOwotICAgIHJldHVybih4KTsKLX0KLQotLyogIEMgTyBO IEIgSSBOICAtLSAgUHV0IGNvbnNvbGUgaW4gYmluYXJ5IG1vZGUgICovCi0KLS8qICBSZXR1cm5z IDAgaWYgb2ssIC0xIGlmIG5vdCAgKi8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNvbmJpbihj aGFyIGVzYykKLSNlbHNlCi1jb25iaW4oZXNjKSBjaGFyIGVzYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotLyogY29uYmluICovICB7Ci0KLSAgICBpbnQgeDsKLQotICAgIGRlYnVnKEYxMDEsImNv bmJpbiBjb25zdGF0ZSIsIiIsY29uc3RhdGUpOwotCi0gICAgaWYgKGNvbnN0YXRlID09IENPTl9C SU4pCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIWlzYXR0eSgwKSkgcmV0dXJuKDApOyAg ICAgICAgICAvKiBvbmx5IGZvciByZWFsIHR0eXMgKi8KLSAgICBjb25nbSgpOwkJCQkvKiBHZXQg bW9kZXMgaWYgbmVjZXNzYXJ5LiAqLwotICAgIGRlYnVnKEYxMDAsImNvbmJpbiIsIiIsMCk7Ci0g ICAgZXNjY2hyID0gZXNjOyAgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSB0aGlzIGF2YWls YWJsZSB0byBvdGhlciBmbnMgKi8KLSAgICBja3hlY2ggPSAxOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQcm9ncmFtIGNhbiBlY2hvIGNoYXJhY3RlcnMgKi8KLSNpZmRlZiBhZWdpcwotICAg IGNvbmJ1Zm4gPSAwOwotICAgIGlmIChjb25jcnApIHJldHVybih3cml0ZSgxLCAiXDAzNVwwMDIi LCAyKSk7Ci0gICAgaWYgKGNvbnVpZCA9PSBpbnB1dF9wYWRfJHVpZCkgewotCXBhZF8kcmF3KGlv c18kc3RkaW4sIHN0KTsKLQlyZXR1cm4oMCk7Ci0gICAgICB9Ci0jZW5kaWYgLyogYWVnaXMgKi8K LQotI2lmZGVmIENPSEVSRU5UCi0jZGVmaW5lIFNWT1JQT1NJWAotI2VuZGlmIC8qIENPSEVSRU5U ICovCi0KLSNpZmRlZiBQbGFuOQotICAgIHJldHVybiBwOWNvbmJpbigpOwotI2Vsc2UKLSNpZmRl ZiBTVk9SUE9TSVgKLSNpZm5kZWYgT1hPUwotI2lmZGVmIFFOWAotICAgIGNjcmF3LmNfbGZsYWcg Jj0gfihJU0lHfElDQU5PTnxFQ0hPKTsKLSNlbHNlCi0jaWZkZWYgQ09IRVJFTlQKLSAgICBjY3Jh dy5jX2xmbGFnICY9IH4oSVNJR3xJQ0FOT058RUNITyk7Ci0jZWxzZQotICAgIGNjcmF3LmNfbGZs YWcgJj0gfihJU0lHfElDQU5PTnxFQ0hPfElFWFRFTik7Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8K LSNlbmRpZiAvKiBRTlggKi8KLSNlbHNlIC8qIE9YT1MgKi8KLSAgICBjY3Jhdy5jX2xmbGFnICY9 IH4oSVNJR3xJQ0FOT058RUNITyk7Ci0gICAgY2NyYXcuY19jY1tWRElTQ0FSRF0gPSBjY3Jhdy5j X2NjW1ZMTkVYVF0gPSBDRElTQUJMRTsKLSNlbmRpZiAvKiBPWE9TICovCi0gICAgY2NyYXcuY19p ZmxhZyB8PSBJR05QQVI7Ci0vKgotICBOb3RlIHRoYXQgZm9yIHRlcm1pbmFsIHNlc3Npb25zIHdl IGRpc2FibGUgWG9uL1hvZmYgZmxvdyBjb250cm9sIHRvIGFsbG93Ci0gIHRoZSBwYXNzYWdlIF5R IGFuZCBeUyBhcyBkYXRhIGNoYXJhY3RlcnMgZm9yIEVNQUNTLCBhbmQgdG8gYWxsb3cgWE1PREVN Ci0gIHRyYW5zZmVycyB0byB3b3JrIHdoZW4gQy1LZXJtaXQgaXMgaW4gdGhlIG1pZGRsZSwgZXRj LiAgSGFyZHdhcmUgZmxvdwotICBjb250cm9sLCBpZiBpbiB1c2UsIGlzIG5vdCBhZmZlY3RlZC4K LSovCi0jaWZkZWYgQVRUU1YKLSNpZmRlZiBCU0Q0NAotICAgIGNjcmF3LmNfaWZsYWcgJj0gfihJ R05CUkt8SU5MQ1J8SUdOQ1J8SUNSTkx8SVhPTnxJWEFOWXxJWE9GRgotICAgICAgICAgICAgICAg ICAgICAgICAgfElOUENLfElTVFJJUCk7Ci0jZWxzZQotICAgIGNjcmF3LmNfaWZsYWcgJj0gfihJ R05CUkt8SU5MQ1J8SUdOQ1J8SUNSTkx8SVVDTEN8SVhPTnxJWEFOWXxJWE9GRgotICAgICAgICAg ICAgICAgICAgICAgICAgfElOUENLfElTVFJJUCk7Ci0jZW5kaWYgLyogQlNENDQgKi8KLSNlbHNl IC8qIFBPU0lYICovCi0gICAgY2NyYXcuY19pZmxhZyAmPSB+KElHTkJSS3xJTkxDUnxJR05DUnxJ Q1JOTHxJWE9OfElYT0ZGfElOUENLfElTVFJJUCk7Ci0jZW5kaWYgLyogQVRUU1YgKi8KLSAgICBj Y3Jhdy5jX29mbGFnICY9IH5PUE9TVDsKLSNpZmRlZiBDT01NRU5UCi0vKgotICBXSEFUIFRIRSBI RUNLIFdBUyBUSElTIEZPUj8KLSAgVGhlIEI5NjAwIHNldHRpbmcgKG9idmlvdXNseSkgcHJldmVu dHMgQ09OTkVDVCBmcm9tIHdvcmtpbmcgYXQgYW55Ci0gIHNwZWVkIG90aGVyIHRoYW4gOTYwMCB3 aGVuIHlvdSBhcmUgbG9nZ2VkIGluIHRvIHRoZSA3MzAwIG9uIGEgc2VyaWFsCi0gIGxpbmUuICBN YXliZSBzb21lIG9mIHRoZSBvdGhlciBmbGFncyBhcmUgbmVjZXNzYXJ5IC0tIGlmIHNvLCBwdXQg YmFjawotICB0aGUgb25lcyB0aGF0IGFyZSBuZWVkZWQuICBUaGlzIGNvZGUgaXMgc3VwcG9zZWQg dG8gd29yayB0aGUgc2FtZSwgbm8KLSAgbWF0dGVyIHdoZXRoZXIgeW91IGFyZSBsb2dnZWQgaW4g dG8gdGhlIDczMDAgb24gdGhlIHJlYWwgY29uc29sZSBkZXZpY2UsCi0gIG9yIHRocm91Z2ggYSBz ZXJpYWwgcG9ydC4KLSovCi0jaWZkZWYgQVRUNzMwMAotICAgIGNjcmF3LmNfY2ZsYWcgPSBDTE9D QUwgfCBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0w7Ci0jZW5kaWYgLyogQVRUNzMwMCAqLwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQotLyoqKiBLZXJtaXQgdXNlZCB0byBwdXQgdGhlIGNvbnNv bGUgaW4gOC1iaXQgcmF3IG1vZGUsIGJ1dCBzb21lIHVzZXJzIGhhdmUKLSAqKiogcG9pbnRlZCBv dXQgdGhhdCB0aGlzIHNob3VsZCBub3QgYmUgZG9uZSwgc2luY2Ugc29tZSBzaXRlcyBhY3R1YWxs eQotICoqKiB1c2UgdGVybWluYWxzIHdpdGggcGFyaXR5IHNldHRpbmdzIG9uIHRoZWlyIFVuaXgg c3lzdGVtcywgYW5kIGlmIHdlCi0gKioqIG92ZXJyaWRlIHRoZSBjdXJyZW50IHNldHRpbmdzIGFu ZCBzdG9wIGRvaW5nIHBhcml0eSwgdGhlbiB0aGVpciB0ZXJtaW5hbHMKLSAqKiogd2lsbCBkaXNw bGF5IGJsb3RjaGVzIGZvciBjaGFyYWN0ZXJzIHdob3NlIHBhcml0eSBpcyB3cm9uZy4gIFRoZXJl Zm9yZSwKLSAqKiogdGhlIGZvbGxvd2luZyB0d28gbGluZXMgYXJlIGNvbW1lbnRlZCBvdXQgKExh cnJ5IEFmcmluLCBDbGVtc29uIFUpOgotICoqKgotICoqKiAgIGNjcmF3LmNfY2ZsYWcgJj0gfihQ QVJFTkJ8Q1NJWkUpOwotICoqKiAgIGNjcmF3LmNfY2ZsYWcgfD0gKENTOHxDUkVBRCk7Ci0gKioq Ci0gKioqIFN5cyBJSUkvViBzaXRlcyB0aGF0IGhhdmUgdHJvdWJsZSB3aXRoIHRoaXMgY2FuIHJl c3RvcmUgdGhlc2UgbGluZXMuCi0gKioqLwotI2lmbmRlZiBWSU5UUgotICAgIGNjcmF3LmNfY2Nb MF0gPSAwMDM7CQkvKiBJbnRlcnJ1cHQgY2hhciBpcyBDdHJsLUMgKi8KLSNlbHNlCi0gICAgY2Ny YXcuY19jY1tWSU5UUl0gPSAwMDM7Ci0jZW5kaWYgLyogVklOVFIgKi8KLSNpZm5kZWYgVlFVSVQK LSAgICBjY3Jhdy5jX2NjWzFdID0gZXNjY2hyOwkJLyogRXNjYXBlIGR1cmluZyBwYWNrZXQgbW9k ZSAqLwotI2Vsc2UKLSAgICBjY3Jhdy5jX2NjW1ZRVUlUXSA9IGVzY2NocjsKLSNlbmRpZiAvKiBW UVVJVCAqLwotI2lmbmRlZiBWRU9GCi0gICAgY2NyYXcuY19jY1s0XSA9IDE7Ci0jZWxzZQotI2lm bmRlZiBPWE9TCi0jaWZkZWYgVk1JTgotICAgIGNjcmF3LmNfY2NbVk1JTl0gPSAxOwotI2VuZGlm IC8qIFZNSU4gKi8KLSNlbHNlIC8qIE9YT1MgKi8KLSAgICBjY3Jhdy5jX21pbiA9IDE7Ci0jZW5k aWYgLyogT1hPUyAqLwotI2VuZGlmIC8qIFZFT0YgKi8KLQotI2lmZGVmIFpJTE9HCi0gICAgY2Ny YXcuY19jY1s1XSA9IDA7Ci0jZWxzZQotI2lmbmRlZiBWRU9MCi0gICAgY2NyYXcuY19jY1s1XSA9 IDE7Ci0jZWxzZQotI2lmbmRlZiBPWE9TCi0jaWZkZWYgVlRJTUUKLSAgICBjY3Jhdy5jX2NjW1ZU SU1FXSA9IDE7Ci0jZW5kaWYgLyogVlRJTUUgKi8KLSNlbHNlIC8qIE9YT1MgKi8KLSAgICBjY3Jh dy5jX3RpbWUgPSAxOwotI2VuZGlmIC8qIE9YT1MgKi8KLSNlbmRpZiAvKiBWRU9MICovCi0jZW5k aWYgLyogWklMT0cgKi8KLQotI2lmZGVmIEJTRDQ0T1JQT1NJWAotICAgIHggPSB0Y3NldGF0dHIo MCxUQ1NBRFJBSU4sJmNjcmF3KTsJLyogU2V0IG5ldyBtb2Rlcy4gKi8KLSNlbHNlCi0gICAgeCA9 IGlvY3RsKDAsVENTRVRBVywmY2NyYXcpOwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotI2Vs c2UgLyogQmVya2VsZXksIGV0Yy4gKi8KLSAgICB4ID0gY29uY2hrKCk7CQkJLyogQmVjYXVzZSBz dHR5KCkgaXMgZGVzdHJ1Y3RpdmUgKi8KLSAgICBpZiAoeCA+IDApCi0gICAgICBjb25nZXRidWYo eCk7Ci0gICAgY2NyYXcuc2dfZmxhZ3MgfD0gKFJBV3xUQU5ERU0pOyAgICAgLyogU2V0IHJhd21v ZGUsIFhPTi9YT0ZGIChoYSkgKi8KLSAgICBjY3Jhdy5zZ19mbGFncyAmPSB+KEVDSE98Q1JNT0Qp OyAgICAvKiBTZXQgY2hhciB3YWtldXAsIG5vIGVjaG8gKi8KLSNpZmRlZiBCRUxMVjEwCi0gICAg eCA9IGlvY3RsKDAsVElPQ1NFVFAsJmNjcmF3KTsKLSNlbHNlCi0gICAgeCA9IHN0dHkoMCwmY2Ny YXcpOwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLSNlbmRp ZiAvKiBQbGFuOSAqLwotCi0gICAgaWYgKHggPiAtMSkKLSAgICAgIGNvbnN0YXRlID0gQ09OX0JJ TjsKLQotICAgIGRlYnVnKEYxMDEsImNvbmJpbiByZXR1cm5zIiwiIix4KTsKLSAgICByZXR1cm4o eCk7Ci0KLSNpZmRlZiBDT0hFUkVOVAotI3VuZGVmIFNWT1JQT1NJWAotI2VuZGlmIC8qIENPSEVS RU5UICovCi0KLX0KLQotCi0vKiAgQyBPIE4gUiBFIFMgIC0tICBSZXN0b3JlIHRoZSBjb25zb2xl IHRlcm1pbmFsICAqLwotCi1pbnQKLWNvbnJlcygpIHsKLSAgICBpbnQgeDsKLSAgICBkZWJ1ZyhG MTAxLCJjb25yZXMgY2dtZiIsIiIsY2dtZik7Ci0gICAgZGVidWcoRjEwMSwiY29ucmVzIGNvbnN0 YXRlIiwiIixjb25zdGF0ZSk7Ci0KLSAgICBpZiAoY2dtZiA8IDEpCQkJLyogRG8gbm90aGluZyBp ZiBtb2RlcyB1bmNoYW5nZWQgKi8KLSAgICAgIHJldHVybigwKTsKLSAgICBpZiAoY29uc3RhdGUg PT0gQ09OX1JFUykKLSAgICAgIHJldHVybigwKTsKLQotICAgIGlmICghaXNhdHR5KDApKSByZXR1 cm4oMCk7ICAgICAgICAgIC8qIG9ubHkgZm9yIHJlYWwgdHR5cyAqLwotICAgIGRlYnVnKEYxMDAs ImNvbnJlcyBpc2F0dHkgb2siLCIiLDApOwotICAgIGNreGVjaCA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFN5c3RlbSBzaG91bGQgZWNobyBjaGFycyAqLwotCi0jaWZkZWYgYWVnaXMK LSAgICBjb25idWZuID0gMDsKLSAgICBpZiAoY29uY3JwKSByZXR1cm4od3JpdGUoMSwgIlwwMzVc MDAxIiwgMikpOwotICAgIGlmIChjb251aWQgPT0gaW5wdXRfcGFkXyR1aWQpIHsKLQlwYWRfJGNv b2tlZChpb3NfJHN0ZGluLCBzdCk7Ci0JY29uc3RhdGUgPSBDT05fUkVTOwotCXJldHVybigwKTsK LSAgICB9Ci0jZW5kaWYgLyogYWVnaXMgKi8KLQotI2lmZGVmIFBsYW45Ci0gICAgcDljb25yZXMo KTsKLSNlbHNlCi0jaWZkZWYgQlNENDRPUlBPU0lYCi0gICAgZGVidWcoRjEwMCwiY29ucmVzIHJl c3RvcmluZyB0Y3NldGF0dHIiLCIiLDApOwotICAgIHggPSB0Y3NldGF0dHIoMCxUQ1NBRFJBSU4s JmNjb2xkKTsKLSNlbHNlCi0jaWZkZWYgQVRUU1YKLSAgICBkZWJ1ZyhGMTAwLCJjb25yZXMgcmVz dG9yaW5nIGlvY3RsIiwiIiwwKTsKLSAgICB4ID0gaW9jdGwoMCxUQ1NFVEFXLCZjY29sZCk7Ci0j ZWxzZSAvKiBCU0QsIFY3LCBhbmQgZnJpZW5kcyAqLwotI2lmZGVmIHNvbnlfbmV3cwkJCS8qIFNv bnkgTkVXUyAqLwotICAgIGlmIChrbV9jb24gIT0gLTEpCi0gICAgICBpb2N0bCgwLFRJT0NLU0VU LCZrbV9jb24pOwkvKiBSZXN0b3JlIGNvbnNvbGUgS2FuamkgbW9kZSAqLwotI2VuZGlmIC8qIHNv bnlfbmV3cyAqLwotICAgIG1zbGVlcCgxMDApOwotICAgIGRlYnVnKEYxMDAsImNvbnJlcyByZXN0 b3Jpbmcgc3R0eSIsIiIsMCk7Ci0gICAgeCA9IGNvbmNoaygpOwkJCS8qIEJlY2F1c2Ugc3R0eSgp IGlzIGRlc3RydWN0aXZlICovCi0gICAgaWYgKHggPiAwKQotICAgICAgY29uZ2V0YnVmKHgpOwot I2lmZGVmIEJFTExWMTAKLSAgICB4ID0gaW9jdGwoMCxUSU9DU0VUUCwmY2NvbGQpOwotI2Vsc2UK LSAgICB4ID0gc3R0eSgwLCZjY29sZCk7Ci0jZW5kaWYgLyogQkVMTFYxMCAqLwotI2VuZGlmIC8q IEFUVFNWICovCi0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0jZW5kaWYgLyogUGxhbjkgKi8K LSAgICBpZiAoeCA+IC0xKQotICAgICAgY29uc3RhdGUgPSBDT05fUkVTOwotCi0gICAgZGVidWco RjEwMSwiY29ucmVzIHJldHVybnMiLCIiLHgpOwotICAgIHJldHVybih4KTsKLX0KLQotLyogIEMg TyBOIE8gQyAgLS0gIE91dHB1dCBhIGNoYXJhY3RlciB0byB0aGUgY29uc29sZSB0ZXJtaW5hbCAg Ki8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNvbm9jKGNoYXIgYykKLSNlbHNlCi1jb25vYyhj KSBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGNvbm9jICovIHsKLQotI2lmZGVm IElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKQotICAgICAgcmV0dXJuKHR0b2MoYykp OwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIGlmIChpbnNlcnZlciAmJiBURUxPUFRfTUUo VEVMT1BUX0VOQ1JZUFRJT04pKQotICAgICAgICBja190bl9lbmNyeXB0KCZjLDEpOwotI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0KLSNpZmRlZiBQbGFuOQot ICAgIHJldHVybiBjb253cml0ZSgmYywxKTsKLSNlbHNlCi0gICAgcmV0dXJuKHdyaXRlKDEsJmMs MSkpOwotI2VuZGlmIC8qIFBsYW45ICovCi19Ci0KLS8qICBDIE8gTiBYIE8gIC0tICBXcml0ZSB4 IGNoYXJhY3RlcnMgdG8gdGhlIGNvbnNvbGUgdGVybWluYWwgICovCi0KLWludAotY29ueG8oeCxz KSBpbnQgeDsgY2hhciAqczsgewotCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlciAmJiAh bG9jYWwpCi0gICAgICByZXR1cm4odHRvbCgoQ0hBUiAqKXMseCkpOwotCi0jaWZkZWYgQ0tfRU5D UllQVElPTgotICAgIGlmIChpbnNlcnZlciAmJiBURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04p KQotICAgICAgICBja190bl9lbmNyeXB0KHMseCk7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LwotI2VuZGlmIC8qIElLU0QgKi8KLQotI2lmZGVmIFBsYW45Ci0gICAgcmV0dXJuKGNvbndyaXRl KHMseCkpOwotI2Vsc2UKLSAgICByZXR1cm4od3JpdGUoMSxzLHgpKTsKLSNlbmRpZiAvKiBQbGFu OSAqLwotfQotCi0vKiAgQyBPIE4gTyBMICAtLSAgV3JpdGUgYSBsaW5lIHRvIHRoZSBjb25zb2xl IHRlcm1pbmFsICAqLwotCi1pbnQKLWNvbm9sKHMpIGNoYXIgKnM7IHsKLSAgICBpbnQgbGVuOwot ICAgIGlmICghcykgcyA9ICIiOwkJCS8qIEFsd2F5cyBkbyB0aGlzISAqLwotICAgIGxlbiA9IHN0 cmxlbihzKTsKLSAgICBpZiAobGVuID09IDApCi0gICAgICByZXR1cm4oMCk7Ci0KLSNpZmRlZiBJ S1NECi0gICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkKLSAgICAgIHJldHVybih0dG9sKChDSEFS ICopcyxsZW4pKTsKLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICBpZiAoaW5zZXJ2ZXIgJiYg VEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkgewotCWlmIChueHBhY2tldCA8IGxlbikgewot CSAgICBpZiAoeHBhY2tldCkgewotCQlmcmVlKHhwYWNrZXQpOwotCQl4cGFja2V0ID0gTlVMTDsK LQkJbnhwYWNrZXQgPSAwOwotCSAgICB9Ci0JICAgIGxlbiA9IGxlbiA+IDEwMjQwID8gbGVuIDog MTAyNDA7Ci0JICAgIHhwYWNrZXQgPSAoQ0hBUiAqKW1hbGxvYyhsZW4pOwotCSAgICBpZiAoIXhw YWNrZXQpIHsKLQkJZnByaW50ZihzdGRlcnIsInR0b2wgbWFsbG9jIGZhaWx1cmVcbiIpOwotCQly ZXR1cm4oLTEpOwotCSAgICB9IGVsc2UKLQkgICAgICBueHBhY2tldCA9IGxlbjsKLQl9Ci0JbWVt Y3B5KHhwYWNrZXQscyxsZW4pOwotCXMgPSAoY2hhciAqKXhwYWNrZXQ7Ci0JY2tfdG5fZW5jcnlw dChzLGxlbik7Ci0gICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAvKiBJ S1NEICovCi0KLSNpZmRlZiBQbGFuOQotICAgIHJldHVybihjb253cml0ZShzLGxlbikpOwotI2Vs c2UKLSAgICByZXR1cm4od3JpdGUoMSxzLGxlbikpOwotI2VuZGlmIC8qIFBsYW45ICovCi19Ci0K LS8qICBDIE8gTiBPIEwgQSAgLS0gIFdyaXRlIGFuIGFycmF5IG9mIGxpbmVzIHRvIHRoZSBjb25z b2xlIHRlcm1pbmFsICovCi0KLWludAotY29ub2xhKHMpIGNoYXIgKnNbXTsgewotICAgIGNoYXIg KiBwOwotICAgIGludCBpLCB4OwotCi0KLSAgICBpZiAoIXMpIHJldHVybigwKTsKLSAgICBmb3Ig KGkgPSAwOyA7IGkrKykgewotCXAgPSBzW2ldOwotCWlmICghcCkgcCA9ICIiOwkJCS8qIExldCdz IG5vdCBkdW1wIGNvcmUgc2hhbGwgd2U/ICovCi0JaWYgKCEqcCkKLQkgIGJyZWFrOwotI2lmZGVm IElLU0QKLQlpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKQotCSAgeCA9IHR0b2woKENIQVIgKilwLChp bnQpc3RybGVuKHApKTsKLQllbHNlCi0jZW5kaWYgLyogSUtTRCAqLwotCSAgeCA9IGNvbm9sKHAp OwotCWlmICh4IDwgMCkKLQkgIHJldHVybigtMSk7Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0K LQotLyogIEMgTyBOIE8gTCBMICAtLSAgT3V0cHV0IGEgc3RyaW5nIGZvbGxvd2VkIGJ5IENSTEYg ICovCi0KLWludAotY29ub2xsKHMpIGNoYXIgKnM7IHsKLSAgICBDSEFSIGJ1ZlszXTsKLSAgICBi dWZbMF0gPSAnXHInOwotICAgIGJ1ZlsxXSA9ICdcbic7Ci0gICAgYnVmWzJdID0gJ1wwJzsKLSAg ICBpZiAoIXMpIHMgPSAiIjsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxv Y2FsKSB7Ci0JaWYgKCpzKSB0dG9sKChDSEFSICopcywoaW50KXN0cmxlbihzKSk7Ci0JcmV0dXJu KHR0b2woYnVmLDIpKTsKLSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0gICAgaWYgKCpzKSBj b25vbChzKTsKLSNpZmRlZiBJS1NECi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIGlmIChpbnNl cnZlciAmJiBURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pKQotICAgICAgY2tfdG5fZW5jcnlw dCgoY2hhciAqKWJ1ZiwyKTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jZW5kaWYgLyog SUtTRCAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICByZXR1cm4oY29ud3JpdGUoYnVmLCAyKSk7Ci0j ZWxzZQotICAgIHJldHVybih3cml0ZSgxLGJ1ZiwyKSk7Ci0jZW5kaWYgLyogUGxhbjkgKi8KLX0K LQotLyogIEMgTyBOIEMgSCBLICAtLSAgUmV0dXJuIGhvdyBtYW55IGNoYXJhY3RlcnMgYXZhaWxh YmxlIGF0IGNvbnNvbGUgICovCi0vKgotICBXZSBjb3VsZCBhbHNvIHVzZSBzZWxlY3QoKSBoZXJl IHRvIGNvdmVyIGEgZmV3IG1vcmUgc3lzdGVtcyB0aGF0IGFyZSBub3QKLSAgY292ZXJlZCBieSBh bnkgb2YgdGhlIGZvbGxvd2luZywgZS5nLiBIUC1VWCA5LjB4IG9uIHRoZSBtb2RlbCA4MDAuCi0q LwotaW50Ci1jb25jaGsoKSB7Ci0gICAgc3RhdGljIGludCBjb250eXAgPSAwOwkJLyogKzEgZm9y IGlzYXR0eSwgLTEgb3RoZXJ3aXNlICovCi0KLSAgICBpZiAoY29udHlwID09IDApCQkJLyogVGhp cyBwcmV2ZW50cyB1bm5lY2Vzc2FyeSAqLwotICAgICAgY29udHlwID0gKGlzYXR0eSgwKSA/IDEg OiAtMSk7CS8qIGR1cGxpY2F0ZWQgY2FsbHMgdG8gaXNhdHR5KCkgKi8KLSAgICBkZWJ1ZyhGMTAx LCJjb25jaGsgY29udHlwIiwiIixjb250eXApOwotICAgIGlmIChiYWNrZ3JkIHx8IChjb250eXAg PCAwKSkKLSAgICAgIHJldHVybigwKTsKLQotI2lmZGVmIGFlZ2lzCi0gICAgaWYgKGNvbmJ1Zm4g PiAwKSByZXR1cm4oY29uYnVmbik7ICAgLyogdXNlIG9sZCBjb3VudCBpZiBub256ZXJvICovCi0K LSAgICAvKiByZWFkIGluIG1vcmUgY2hhcmFjdGVycyAqLwotICAgIGNvbmJ1Zm4gPSBpb3NfJGdl dChpb3NfJHN0ZGluLAotICAgICAgICAgICAgICBpb3NfJGNvbmRfb3B0LCBjb25idWYsIChsb25n KXNpemVvZihjb25idWYpLCBzdCk7Ci0gICAgaWYgKHN0LmFsbCAhPSBzdGF0dXNfJG9rKSBjb25i dWZuID0gMDsKLSAgICBjb25idWZwID0gY29uYnVmOwotICAgIHJldHVybihjb25idWZuKTsKLSNl bHNlCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwpCi0gICAgICByZXR1 cm4oaW5fY2hrKDEsdHR5ZmQpKTsKLSAgICBlbHNlCi0jZW5kaWYgLyogSUtTRCAqLwotICAgICAg cmV0dXJuKGluX2NoaygwLDApKTsKLSNlbmRpZiAvKiBhZWdpcyAqLwotfQotCi0vKiAgQyBPIE4g SSBOIEMgIC0tICBHZXQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29uc29sZSAgKi8KLS8qCi0gIENh bGwgd2l0aCB0aW1vID4gMCB0byBkbyBhIHRpbWVkIHJlYWQsIHRpbW8gPT0gMCB0byBkbyBhbiB1 bnRpbWVkIGJsb2NraW5nCi0gIHJlYWQuICBVcG9uIHN1Y2Nlc3MsIHJldHVybnMgdGhlIGNoYXJh Y3Rlci4gIFVwb24gZmFpbHVyZSwgcmV0dXJucyAtMS4KLSAgQSB0aW1lZCByZWFkIHRoYXQgZG9l cyBub3QgY29tcGxldGUgd2l0aGluIHRoZSB0aW1lb3V0IHBlcmlvZCByZXR1cm5zIC0yLgotKi8K LWludAotY29uaW5jKHRpbW8pIGludCB0aW1vOyB7Ci0gICAgaW50IG4gPSAwOyBDSEFSIGNoOwot ICAgIGludCB4eDsKLQotICAgIGlmIChjb25idWZuID4gMCkgewkJCS8qIElmIHNvbWV0aGluZyBh bHJlYWR5IGJ1ZmZlcmVkICovCi0JLS1jb25idWZuOwotCXJldHVybigodW5zaWduZWQpKCpjb25i dWZwKysgJiAweGZmKSk7Ci0gICAgfQotCi0gICAgZXJybm8gPSAwOwkJCQkvKiBDbGVhciB0aGlz ICovCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwpIHsKLQl4eCA9IHR0 aW5jKHRpbW8pOwotCWlmICh4eCA8IDApCi0JICByZXR1cm4odHRpbmN0aW1vID8gLTIgOiAtMSk7 Ci0JZWxzZQotCSAgcmV0dXJuKHh4KTsKLSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZk ZWYgYWVnaXMJCQkJLyogQXBvbGxvIEFlZ2lzIG9ubHkuLi4gKi8KLSAgICBkZWJ1ZyhGMTAxLCJj b25pbmMgdGltbyIsIiIsdGltbyk7Ci0gICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgaWYgKGNvbmNo aygpID4gMCkgewotCS0tY29uYnVmbjsKLQlyZXR1cm4oKHVuc2lnbmVkKSgqY29uYnVmcCsrICYg MHhmZikpOwotICAgIH0KLSNlbmRpZiAvKiBhZWdpcyAqLwotCi0jaWZkZWYgVFRMRUJVRgotICAg IGlmICgKLSNpZmRlZiBJS1NECi0JaW5zZXJ2ZXIgJiYKLSNlbmRpZiAvKiBJS1NEICovCi0JIXhs b2NhbAotCSkgewotCWlmICh0dHB1c2ggPj0gMCkgewotCSAgICBkZWJ1ZyhGMTExLCJ0dGluYyIs InR0cHVzaCIsdHRwdXNoKTsKLQkgICAgY2ggPSB0dHB1c2g7Ci0JICAgIHR0cHVzaCA9IC0xOwot CSAgICByZXR1cm4oY2gpOwotCX0KLQlpZiAobGVfZGF0YSkgewotCSAgICBpZiAobGVfZ2V0Y2hh cigmY2gpID4gMCkgewotCQlkZWJ1ZyhGMTExLCJ0dGluYyBMb2NhbEVjaG9JbkJ1ZiIsImNoIixj aCk7Ci0JCXJldHVybihjaCk7Ci0JICAgIH0KLQl9Ci0gICAgfQotI2VuZGlmIC8qIFRUTEVCVUYg Ki8KLQotICAgIGlmICh0aW1vIDw9IDApIHsJCQkvKiBVbnRpbWVkLCBibG9ja2luZyByZWFkLiAq LwotCXdoaWxlICgxKSB7CQkJLyogS2VlcCB0cnlpbmcgdGlsbCB3ZSBnZXQgb25lLiAqLwotCSAg ICBuID0gcmVhZCgwLCAmY2gsIDEpOwkvKiBSZWFkIGEgY2hhcmFjdGVyLiAqLwotCSAgICBpZiAo biA9PSAwKSBjb250aW51ZTsJLyogU2hvdWxkbid0IGhhcHBlbi4gKi8KLQkgICAgaWYgKG4gPiAw KSB7CQkvKiBJZiByZWFkIHdhcyBzdWNjZXNzZnVsLCAqLwotI2lmZGVmIElLU0QKLSNpZmRlZiBD S19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiY29uaW5jIGRlY3J5cHQg MSIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgaWYgKGluc2VydmVyICYmICFsb2NhbCAmJiBURUxP UFRfVShURUxPUFRfRU5DUllQVElPTikpCi0JCSAgY2tfdG5fZGVjcnlwdCgoY2hhciAqKSZjaCwx KTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jZW5kaWYgLyogSUtTRCAqLwotCQlyZXR1 cm4oKHVuc2lnbmVkKShjaCAmIDB4ZmYpKTsgLyogcmV0dXJuIHRoZSBjaGFyYWN0ZXIuICovCi0g ICAgICAgICAgICB9Ci0KLS8qIENvbWUgaGVyZSBpZiByZWFkKCkgcmV0dXJuZWQgYW4gZXJyb3Iu ICovCi0KLQkgICAgZGVidWcoRjEwMSwgImNvbmluYygwKSBlcnJubyIsIiIsZXJybm8pOyAvKiBM b2cgdGhlIGVycm9yLiAqLwotI2lmbmRlZiBPWE9TCi0jaWZkZWYgU1ZPUlBPU0lYCi0jaWZkZWYg Q0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDSUUgUmVndWx1cyBoYXMgbm8gRUlO VFIgc3ltYm9sPyAqLwotI2lmbmRlZiBFSU5UUgotI2RlZmluZSBFSU5UUiA0Ci0jZW5kaWYgLyog RUlOVFIgKi8KLSNlbmRpZiAvKiBDSUUgKi8KLS8qCi0gIFRoaXMgcm91dGluZSBpcyB1c2VkIGZv ciBzZXZlcmFsIGRpZmZlcmVudCBwdXJwb3Nlcy4gIEluIENPTk5FQ1QgbW9kZSwgaXQgaXMKLSAg dXNlZCB0byBkbyBhbiB1bnRpbWVkLCBibG9ja2luZyByZWFkIGZyb20gdGhlIGtleWJvYXJkIGlu IHRoZSBsb3dlciBDT05ORUNUCi0gIGZvcmsuICBEdXJpbmcgbG9jYWwtbW9kZSBmaWxlIHRyYW5z ZmVyLCBpdCByZWFkcyBhIGNoYXJhY3RlciBmcm9tIHRoZQotICBjb25zb2xlIHRvIGludGVycnVw dCB0aGUgZmlsZSB0cmFuc2ZlciAobGlrZSBBIGZvciBhIHN0YXR1cyByZXBvcnQsIFggdG8KLSAg Y2FuY2VsIGEgZmlsZSwgZXRjKS4gIE9idmlvdXNseSwgd2UgZG9uJ3Qgd2FudCB0aGUgcmVhZHMg aW4gdGhlIGxhdHRlciBjYXNlCi0gIHRvIGJlIGJsb2NraW5nLCBvciB0aGUgZmlsZSB0cmFuc2Zl ciB3b3VsZCBzdG9wIHVudGlsIHRoZSB1c2VyIHR5cGVkCi0gIHNvbWV0aGluZy4gIFVuZm9ydHVu YXRlbHksIFN5c3RlbSBWIGRvZXMgbm90IGFsbG93IHRoZSBjb25zb2xlIGRldmljZSBpbnB1dAot ICBidWZmZXIgdG8gYmUgc2FtcGxlZCBub25kZXN0cnVjdGl2ZWx5IChlLmcuIGJ5IGNvbmNoaygp KSwgc28gYSBrbHVkZ2UgaXMKLSAgdXNlZCBpbnN0ZWFkLiAgRHVyaW5nIGxvY2FsLW1vZGUgZmls ZSB0cmFuc2ZlciwgdGhlIFNJR1FVSVQgc2lnbmFsIGlzIGFybWVkCi0gIGFuZCB0cmFwcGVkIGJ5 IGVzY3RycCgpLCBhbmQgdGhpcyByb3V0aW5lIHByZXRlbmRzIHRvIGhhdmUgcmVhZCB0aGUgcXVp dAotICBjaGFyYWN0ZXIgZnJvbSB0aGUga2V5Ym9hcmQgbm9ybWFsbHkuICBCdXQsIGtsdWRnZSBv ciBubyBrbHVkZ2UsIHRoZSByZWFkKCkKLSAgaXNzdWVkIGJ5IHRoaXMgY29tbWFuZCwgdW5kZXIg U3lzdGVtIFYgb25seSwgY2FuIGZhaWwgaWYgYSBzaWduYWwgLS0gQU5ZCi0gIHNpZ25hbCAtLSBp cyBjYXVnaHQgd2hpbGUgdGhlIHJlYWQgaXMgcGVuZGluZy4gIFRoaXMgY2FuIG9jY3VyIG5vdCBv bmx5IHdoZW4KLSAgdGhlIHVzZXIgdHlwZXMgdGhlIHF1aXQgY2hhcmFjdGVyLCBidXQgYWxzbyBk dXJpbmcgdGVsbmV0IG5lZ290aWF0aW9ucywgd2hlbgotICB0aGUgbG93ZXIgQ09OTkVDVCBmb3Jr IHNpZ25hbHMgdGhlIHVwcGVyIG9uZSBhYm91dCBhbiBlY2hvaW5nIG1vZGUgY2hhbmdlLgotICBX aGVuIHRoaXMgaGFwcGVucywgd2UgaGF2ZSB0byBwb3N0IHRoZSByZWFkKCkgYWdhaW4uICBUaGlz IGlzIGFwcGFyZW50bHkgbm90Ci0gIGEgcHJvYmxlbSBpbiBCU0QtYmFzZWQgVU5JWCB2ZXJzaW9u cy4KLSovCi0JICAgIGlmIChlcnJubyA9PSBFSU5UUikJCS8qIFJlYWQgaW50ZXJydXB0ZWQuICov Ci0JICAgICAgaWYgKGNvbmVzYykgIHsJCS8qIElmIGJ5IFNJR1FVSVQsICovCi0gCQkgY29uZXNj ID0gMDsJCS8qIHRoZSBjb25lc2MgdmFyaWFibGUgaXMgc2V0LCAqLwotIAkJIHJldHVybihlc2Nj aHIpOwkvKiBzbyByZXR1cm4gdGhlIGVzY2FwZSBjaGFyYWN0ZXIuICovCi0JICAgICB9IGVsc2Ug Y29udGludWU7CQkvKiBCeSBvdGhlciBzaWduYWwsIHRyeSBhZ2Fpbi4gKi8KLSNlbHNlCi0vKgot ICBUaGlzIG1pZ2h0IGJlIGRhbmdlcm91cywgYnV0IGxldCdzIGRvIHRoaXMgb24gbm9uLVN5c3Rl bSBWIHZlcnNpb25zIHRvbywKLSAgc2luY2UgYXQgbGVhc3Qgb25lIFN1bk9TIDQuMS4yIHVzZXIg Y29tcGxhaW5zIG9mIGltbWVkaWF0ZSBkaXNjb25uZWN0aW9ucwotICB1cG9uIGZpcnN0IG1ha2lu ZyBhIFRFTE5FVCBjb25uZWN0aW9uLgotKi8KLQkgICAgaWYgKGVycm5vID09IEVJTlRSKQkJLyog UmVhZCBpbnRlcnJ1cHRlZC4gKi8KLQkgICAgICBjb250aW51ZTsKLSNlbmRpZiAvKiBTVk9SUE9T SVggKi8KLSNlbHNlIC8qIE9YT1MgKi8KLQkgICAgaWYgKGVycm5vID09IEVJTlRSKQkJLyogUmVh ZCBpbnRlcnJ1cHRlZC4gKi8KLQkgICAgICBjb250aW51ZTsKLSNlbmRpZiAvKiBPWE9TICovCi0J ICAgIHJldHVybigtMSk7CQkJLyogRXJyb3IgKi8KLQl9Ci0gICAgfQotI2lmZGVmIERFQlVHCi0g ICAgaWYgKGRlYmxvZyAmJiB0aW1vIDw9IDApIHsKLQlkZWJ1ZyhGMTAwLCJjb25pbmMgdGltZW91 dCBsb2dpYyBlcnJvciIsIiIsMCk7Ci0JdGltbyA9IDE7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVH ICovCi0KLS8qIFRpbWVkIHJlYWQuLi4gKi8KLQotICAgIHNhdmFsID0gc2lnbmFsKFNJR0FMUk0s dGltZXJoKTsJLyogU2V0IHVwIHRpbWVvdXQgaGFuZGxlci4gKi8KLSAgICB4eCA9IGFsYXJtKHRp bW8pOwkJCS8qIFNldCB0aGUgYWxhcm0uICovCi0gICAgZGVidWcoRjEwMSwiY29uaW5jIGFsYXJt IHNldCIsIiIsdGltbyk7Ci0gICAgaWYgKAotI2lmZGVmIENLX1BPU0lYX1NJRwotCXNpZ3NldGpt cChzamJ1ZiwxKQotI2Vsc2UKLQlzZXRqbXAoc2pidWYpCi0jZW5kaWYgLyogQ0tfUE9TSVhfU0lH ICovCi0JKQkJCQkvKiBUaGUgcmVhZCgpIHRpbWVkIG91dC4gKi8KLSAgICAgIG4gPSAtMjsJCQkJ LyogQ29kZSBmb3IgdGltZW91dC4gKi8KLSAgICBlbHNlCi0gICAgICBuID0gcmVhZCgwLCAmY2gs IDEpOwotICAgIHR0aW1vZmYoKTsJCQkJLyogVHVybiBvZmYgdGltZXIgKi8KLSAgICBpZiAobiA+ IDApIHsJCQkvKiBHb3QgY2hhcmFjdGVyIE9LLiAqLwotI2lmZGVmIElLU0QKLSNpZmRlZiBDS19F TkNSWVBUSU9OCi0gICAgICAgIGRlYnVnKEYxMDAsImNvbmluYyBkZWNyeXB0IDIiLCIiLDApOwot ICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsICYmIFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBU SU9OKSkKLQkgIGNrX3RuX2RlY3J5cHQoKGNoYXIgKikmY2gsMSk7Ci0jZW5kaWYgLyogQ0tfRU5D UllQVElPTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQlyZXR1cm4oKHVuc2lnbmVkKShjaCAmIDB4 ZmYpKTsJLyogUmV0dXJuIGl0LiAqLwotICAgIH0KLS8qCi0gIHJlYWQoKSByZXR1cm5lZCBhbiBl cnJvci4gIFNhbWUgZGVhbCBhcyBhYm92ZSwgYnV0IHdpdGhvdXQgdGhlIGxvb3AuCi0qLwotICAg IGRlYnVnKEYxMDEsICJjb25pbmModGltbykgbiIsIiIsbik7Ci0gICAgZGVidWcoRjEwMSwgImNv bmluYyh0aW1vKSBlcnJubyIsIiIsZXJybm8pOwotI2lmbmRlZiBPWE9TCi0jaWZkZWYgU1ZPUlBP U0lYCi0gICAgaWYgKG4gPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIgJiYgY29uZXNjICE9IDApIHsK LQljb25lc2MgPSAwOwotCXJldHVybihlc2NjaHIpOwkJCS8qIFVzZXIgZW50ZXJlZCBlc2NhcGUg Y2hhcmFjdGVyLiAqLwotICAgIH0KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLSAgICBpZiAobiA9 PSAwICYmIGVycm5vID4gMCkgewkJLyogSXQncyBhbiBlcnJvciAqLwotCXJldHVybigtMSk7Ci0g ICAgfQotI2VuZGlmIC8qICEgT1hPUyAqLwotICAgIHJldHVybihuKTsKLX0KLQotLyogIEMgTyBO IEcgSyBTICAtLSAgQ29uc29sZSBHZXQgS2V5Ym9hcmQgU2NhbmNvZGUgICovCi0KLSNpZm5kZWYg Y29uZ2tzCi0vKgotICBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGZpbGxlZCBpbiB3aXRoIHRo ZSB2YXJpb3VzIHN5c3RlbS1kZXBlbmRlbnQKLSAgc3lzdGVtIGNhbGxzIHVzZWQgYnkgU1VOT1Ms IE5lWFQgT1MsIFhlbml4LCBBdmlpb24sIGV0YywgdG8gcmVhZCBhIGZ1bGwKLSAga2V5Ym9hcmQg c2NhbiBjb2RlLiAgVW5mb3J0dW5hdGVseSB0aGVyZSBhcmVuJ3QgYW55LgotKi8KLWludAotY29u Z2tzKHRpbW8pIGludCB0aW1vOyB7Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyICYm ICFsb2NhbCkKLSAgICAgIHJldHVybih0dGluYyh0aW1vKSk7Ci0jZW5kaWYgLyogSUtTRCAqLwot Ci0gICAgcmV0dXJuKGNvbmluYyh0aW1vKSk7Ci19Ci0jZW5kaWYgLyogY29uZ2tzICovCi0KLSNp ZmRlZiBBVFQ3MzAwCi0KLS8qICBBIFQgVCBEIEkgQSBMICAtLSAgRGlhbCB1cCB0aGUgcmVtb3Rl IHN5c3RlbSB1c2luZyBpbnRlcm5hbCBtb2RlbQotICogUHVycG9zZTogdG8gb3BlbiBhbmQgZGlh bCBhIG51bWJlciBvbiB0aGUgaW50ZXJuYWwgbW9kZW0gYXZhaWxhYmxlIG9uIHRoZQotICogQVRU NzMwMCBVTklYIFBDLiAgV3JpdHRlbiBieSBKb2UgRG91cG5pay4gU3VwZXJjZWVkcyB2ZXJzaW9u IHdyaXR0ZW4gYnkKLSAqIFJpY2hhcmQgRS4gSGlsbCwgRGlja2luc29uLCBUWC4gd2hpY2ggZW1w bG95ZWQgZGlhbCgzYykuCi0gKiBVc2VzIGluZm9ybWF0aW9uIGluIDxzeXMvcGhvbmUuaD4gYW5k IG91ciBzdGF0dXMgaW50IGF0dG1vZGVtLgotICovCi1hdHRkaWFsKHR0bmFtZSxzcGVlZCx0ZWxu YnIpIGNoYXIgKnR0bmFtZSwqdGVsbmJyOyBsb25nIHNwZWVkOyB7Ci0gICAgY2hhciAqdGVsbnVt OwotCi0gICAgYXR0bW9kZW0gJj0gfklTTU9ERU07ICAgICAgICAgICAgICAgICAgICAgICAvKiBt b2RlbSBub3QgaW4gdXNlIHlldCAqLwotICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgT19O REVMQVkgaXMgc2V0LCBlbHNlIGkvbyB0cmFmZmljIGhhbmdzICovCi0gICAgICAgICAgICAgICAg ICAgIC8qIFdlIHR1cm4gdGhpcyBmbGFnIG9mZiBvbmNlIHRoZSBkaWFsIGlzIGNvbXBsZXRlICov Ci0gICAgZmNudGwodHR5ZmQsIEZfU0VURkwsIGZjbnRsKHR0eWZkLCBGX0dFVEZMLCAwKSB8IE9f TkRFTEFZKTsKLQotICAgIC8qIENvbmRpdGlvbiBsaW5lLCBjaGVjayBhdmFpbGFiaWxpdHkgJiBE QVRBIG1vZGUsIHR1cm4gb24gc3BlYWtlciAqLwotICAgIGlmIChpb2N0bCh0dHlmZCxQSU9DT0ZG SE9PSywgJmRpYWxlcikgPT0gLTEpIHsKLSAgICAgICAgcHJpbnRmKCJjYW5ub3QgYWNjZXNzIHBo b25lXG4iKTsKLSAgICAgICAgdHRjbG9zKDApOwotICAgICAgICByZXR1cm4gKC0yKTsKLSAgICB9 Ci0gICAgaW9jdGwodHR5ZmQsUElPQ0dFVFAsJmRpYWxlcik7ICAgICAgLyogZ2V0IHBob25lIGRp YWxlciBwYXJhbWV0ZXJzICovCi0KLSAgICBpZiAoZGlhbGVyLmNfbGluZXBhcmFtICYgVk9JQ0Up IHsJLyogcGhvbmUgbXVzdCBiZSBpbiBEQVRBIG1vZGUgKi8KLSAgICAgICAgcHJpbnRmKCIgU2hv dWxkIG5vdCBkaWFsIHdpdGggbW9kZW0gaW4gVk9JQ0UgbW9kZS5cbiIpOwotICAgICAgICBwcmlu dGYoIiBFeGl0IEtlcm1pdCwgc3dpdGNoIHRvIERBVEEgYW5kIHJldHJ5IGNhbGwuXG4iKTsKLSAg ICAgICAgdHRjbG9zKDApOwotICAgICAgICByZXR1cm4gKC0yKTsKLSAgICB9Ci0jaWZkZWYgQVRU VE9ORUQJCQkJLyogT2xkIHdheSwgdG9uZSBkaWFsaW5nIG9ubHkuICovCi0gICAgZGlhbGVyLmNf bGluZXBhcmFtID0gREFUQSB8IERUTUY7CS8qIERpYWwgd2l0aCB0b25lcywgKi8KLSAgICBkaWFs ZXIuY19saW5lcGFyYW0gJj0gflBVTFNFOwkvKiBub3Qgd2l0aCBwdWxzZXMuICovCi0jZWxzZQot ICAgIC8qIExlYXZlIGN1cnJlbnQgcHVsc2UvdG9uZSBzdGF0ZSBhbG9uZS4gKi8KLSAgICAvKiBC dXQgd2hhdCBhYm91dCBEQVRBPyAgQWRkIGl0IGJhY2sgaWYgeW91IGhhdmUgdHJvdWJsZS4gKi8K LSAgICAvKiBzeXMvcGhvbmUgc2F5cyB5b3UgZ2V0IERBVEEgYXV0b21hdGljYWxseSBieSBvcGVu aW5nIGRldmljZSBSRFdSICovCi0jZW5kaWYKLSAgICBkaWFsZXIuY193YWl0ZGlhbHRvbmUgPSA1 OyAgICAgICAgICAgICAgICAgIC8qIHdhaXQgNSBzZWMgZm9yIGRpYWx0b25lICovCi0jaWZkZWYg Q09NTUVOVAotICAgIGRpYWxlci5jX2ZlZWRiYWNrID0gU1BFQUtFUk9OfE5PUk1TUEt8UklOR09O OyAgLyogY29udHJvbCBzcGVha2VyICovCi0jZWxzZQotICAgIC8qIHN5cy9waG9uZSBzYXlzIFJJ TkdPTiB1c2VkIG9ubHkgZm9yIGluY29taW5nIHZvaWNlIGNhbGxzICovCi0gICAgZGlhbGVyLmNf ZmVlZGJhY2sgJj0gfihTT0ZUU1BLfExPVURTUEspOwotICAgIGRpYWxlci5jX2ZlZWRiYWNrIHw9 IFNQRUFLRVJPTnxOT1JNU1BLOwotI2VuZGlmCi0gICAgZGlhbGVyLmNfd2FpdGZsYXNoID0gNTAw OyAgICAgICAgICAgICAgICAgICAvKiAwLjUgc2VjIGZsYXNoIGhvb2sgKi8KLSAgICBpZihpb2N0 bCh0dHlmZCxQSU9DU0VUUCwmZGlhbGVyKSA9PSAtMSkgeyAgIC8qIHNldCBwaG9uZSBwYXJhbWV0 ZXJzICovCi0gICAgICAgIHByaW50ZigiQ2Fubm90IHNldCBtb2RlbSBjaGFyYWN0ZXJpc3RpY3Nc biIpOwotICAgICAgICB0dGNsb3MoMCk7Ci0gICAgICAgIHJldHVybiAoLTIpOwotICAgIH0KLSAg ICBpb2N0bCh0dHlmZCxQSU9DUkVDT05OLDApOwkJLyogVHVybnMgb24gc3BlYWtlciBmb3IgcHVs c2UgKi8KLQotI2lmZGVmIENPTU1FTlQKLSAgICBmcHJpbnRmKHN0ZGVyciwiUGhvbmUgbGluZSBz dGF0dXMuIGxpbmVfcGFyOiVvIGRpYWx0b25lX3dhaXQ6JW8gXAotbGluZV9zdGF0dXM6JW8gZmVl ZGJhY2s6JW9cbiIsCi0gICAgZGlhbGVyLmNfbGluZXBhcmFtLCBkaWFsZXIuY193YWl0ZGlhbHRv bmUsCi0gICAgZGlhbGVyLmNfbGluZXN0YXR1cywgZGlhbGVyLmNfZmVlZGJhY2spOwotI2VuZGlm Ci0KLSAgICBhdHRtb2RlbSB8PSBJU01PREVNOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1v ZGVtIGlzIG5vdyBpbi11c2UgKi8KLSAgICBzbGVlcCgxKTsKLSAgICBmb3IgKHRlbG51bSA9IHRl bG5icjsgKnRlbG51bSAhPSAnXDAnOyB0ZWxudW0rKykgICAgLyogZGlhbCBudW1iZXIgKi8KLSNp ZmRlZiBBVFRUT05FRAotICAgICAgLyogVG9uZSBkaWFsaW5nIG9ubHkgKi8KLSAgICAgIGlmIChp b2N0bCh0dHlmZCxQSU9DRElBTCx0ZWxudW0pICE9IDApIHsKLQkgIHBlcnJvcigiRXJyb3IgaW4g ZGlhbGluZyIpOwotCSAgdHRjbG9zKDApOwotCSAgcmV0dXJuKC0yKTsKLSAgICAgIH0KLSNlbHNl IC8qIEFsbG93IFB1bHNlIG9yIFRvbmUgZGlhbGluZyAqLwotICAgIHN3aXRjaCAoKnRlbG51bSkg ewotICAgICAgY2FzZSAndCc6IGNhc2UgJ1QnOiBjYXNlICclJzoJLyogVG9uZSBkaWFsaW5nIHJl cXVlc3RlZCAqLwotCWRpYWxlci5jX2xpbmVwYXJhbSB8PSBEVE1GOwotCWRpYWxlci5jX2xpbmVw YXJhbSAmPSB+UFVMU0U7Ci0JaWYgKGlvY3RsKHR0eWZkLFBJT0NTRVRQLCZkaWFsZXIpID09IC0x KSB7Ci0JICAgIHByaW50ZigiQ2Fubm90IHNldCBtb2RlbSB0byB0b25lIGRpYWxpbmdcbiIpOwot CSAgICB0dGNsb3MoMCk7Ci0JICAgIHJldHVybigtMik7Ci0JfQotCWJyZWFrOwotICAgICAgY2Fz ZSAnZCc6IGNhc2UgJ0QnOiBjYXNlICdwJzogY2FzZSAnUCc6IGNhc2UgJ14nOgotCWRpYWxlci5j X2xpbmVwYXJhbSB8PSBQVUxTRTsKLQlkaWFsZXIuY19saW5lcGFyYW0gJj0gfkRUTUY7Ci0JaWYg KGlvY3RsKHR0eWZkLFBJT0NTRVRQLCZkaWFsZXIpID09IC0xKSB7Ci0JICAgIHByaW50ZigiQ2Fu bm90IHNldCBtb2RlbSB0byBwdWxzZSBkaWFsaW5nXG4iKTsKLQkgICAgdHRjbG9zKDApOwotCSAg ICByZXR1cm4oLTIpOwotCX0KLQlicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChp b2N0bCh0dHlmZCxQSU9DRElBTCx0ZWxudW0pICE9IDApIHsKLQkgICAgcGVycm9yKCJEaWFsaW5n IGVycm9yIik7Ci0JICAgIHR0Y2xvcygwKTsKLQkgICAgcmV0dXJuKC0yKTsKLQl9Ci0JYnJlYWs7 Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpb2N0bCh0dHlmZCxQSU9DRElBTCwiQCIpOwkJLyogdGVy bWluYXRvciBmb3IgZGF0YSBjYWxsICovCi0gICAgZG8gewkJCQkvKiB3YWl0IGZvciBtb2RlbXMg dG8gQ29ubmVjdCAqLwotICAgICAgICBpZiAoaW9jdGwodHR5ZmQsUElPQ0dFVFAsJmRpYWxlcikg IT0gMCkJeyAvKiBnZXQgcGFyYW1zICovCi0JICAgIHBlcnJvcigiQ2Fubm90IGdldCBtb2RlbXMg dG8gY29ubmVjdCIpOwotCSAgICB0dGNsb3MoMCk7Ci0JICAgIHJldHVybigtMik7Ci0JfQotICAg IH0gd2hpbGUgKChkaWFsZXIuY19saW5lc3RhdHVzICYgTU9ERU1DT05ORUNURUQpID09IDApOwot ICAgIC8qIFR1cm4gb2ZmIE9fTkRFTEFZIGZsYWcgbm93LiAqLwotICAgIGZjbnRsKHR0eWZkLCBG X1NFVEZMLCBmY250bCh0dHlmZCwgRl9HRVRGTCwgMCkgJiB+T19OREVMQVkpOwotICAgIHNpZ25h bChTSUdIVVAsIHNpZ2h1cCk7ICAgICAgICAgICAgIC8qIGhhbmd1cCBvbiBsb3NzIG9mIGNhcnJp ZXIgKi8KLSAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4g c3VjY2VzcyAqLwotfQotCi0vKgotICBPZmZnZXR0eSwgb25nZXR0eSBmdW5jdGlvbnMuIFRoZXNl IGZ1bmN0aW9uIGdldCB0aGUgJ2dldHR5KDFtKScgb2ZmCi0gIGFuZCByZXN0b3JlIGl0IHRvIHRo ZSBpbmRpY2F0ZWQgbGluZS4gIFNoZWxsJ3MgcmV0dXJuIGNvZGVzIGFyZToKLSAgICAwOiBDYW4n dCBkbyBpdC4gIFByb2JhYmx5IGEgdXNlciBsb2dnZWQgb24uCi0gICAgMTogTm8gbmVlZC4gIE5v IGdldHR5IG9uIHRoYXQgbGluZS4KLSAgICAyOiBEb25lLCB5b3Ugc2hvdWxkIHJlc3RvcmUgdGhl IGdldHR5IHdoZW4geW91J3JlIGRvbmUuCi0gIERPR0VUWSBTeXN0ZW0oMyksIGhvd2V2ZXIsIHJl dHVybnMgdGhlbSBhcyAwLCAyNTYsIDUxMiwgcmVzcGVjdGl2ZWx5LgotICBUaGFua3MgdG8gS2V2 aW4gTydHb3JtYW4sIEFuYXJtIFNvZnR3YXJlIFN5c3RlbXMuCi0KLSAgIGdldG9mZi5zaCBsb29r cyBsaWtlOiAgIGdldG9uLnNoIGxvb2tzIGxpa2U6Ci0gICAgIHNldGdldHR5ICQxIDAgICAgICAg ICAgIHNldGdldHR5ICQxIDEKLSAgICAgZXJyPSQ/ICAgICAgICAgICAgICAgICAgZXhpdCAkPwot ICAgICBzbGVlcCAyCi0gICAgIGV4aXQgJGVycgotKi8KLQotLyogIE8gRiBGIEcgRSBUIFQgWSAg LS0gIFR1cm4gb2ZmIGdldHR5KDFtKSBmb3IgdGhlIGNvbW11bmljYXRpb25zIHR0eSBsaW5lCi0g KiBhbmQgZ2V0IHN0YXR1cyBzbyBpdCBjYW4gYmUgcmVzdGFydGVkIGFmdGVyIHRoZSBsaW5lIGlz IGh1bmcgdXAuCi0gKi8KLWludAotb2ZmZ2V0dHkodHRuYW1lKSBjaGFyICp0dG5hbWU7IHsKLSAg ICBjaGFyIHRlbXBbMzBdOwotICAgIHdoaWxlICgqdHRuYW1lICE9ICdcMCcpIHR0bmFtZSsrOyAg ICAgICAvKiBzZWVrIHRlcm1pbmF0b3Igb2YgcGF0aCAqLwotICAgIHR0bmFtZSAtPSAzOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXQgbGFzdCAzIGNoYXJzIG9mIG5hbWUgKi8KLSAg ICBzcHJpbnRmKHRlbXAsIi91c3IvYmluL2dldG9mZi5zaCAlcyIsdHRuYW1lKTsKLSAgICByZXR1 cm4oenN5c2NtZCh0ZW1wKSk7Ci19Ci0KLS8qICBPIE4gRyBFIFQgVCBZICAtLSAgVHVybiBvbiBn ZXR0eSgxbSkgZm9yIHRoZSBjb21tdW5pY2F0aW9ucyB0dHkgbGluZSAqLwotCi1pbnQKLW9uZ2V0 dHkodHRuYW1lKSBjaGFyICp0dG5hbWU7IHsKLSAgICBjaGFyIHRlbXBbMzBdOwotICAgIHdoaWxl ICgqdHRuYW1lICE9ICdcMCcpIHR0bmFtZSsrOyAgICAgICAvKiBjb21tcyB0dHkgcGF0aCBuYW1l ICovCi0gICAgdHRuYW1lIC09IDM7Ci0gICAgc3ByaW50Zih0ZW1wLCIvdXNyL2Jpbi9nZXRvbi5z aCAlcyIsdHRuYW1lKTsKLSAgICByZXR1cm4oenN5c2NtZCh0ZW1wKSk7Ci19Ci0jZW5kaWYgLyog QVRUNzMwMCAqLwotCi0vKiAgVCBUIFMgQyBBIFIgUiAgLS0gIFNldCB0dGNhcnIgdmFyaWFibGUs IGNvbnRyb2xsaW5nIGNhcnJpZXIgaGFuZGxpbmcuCi0gKgotICogIDAgPSBPZmY6IEFsd2F5cyBp Z25vcmUgY2Fycmllci4gRS5nLiB5b3UgY2FuIGNvbm5lY3Qgd2l0aG91dCBjYXJyaWVyLgotICog IDEgPSBPbjogSGVlZCBjYXJyaWVyLCBleGNlcHQgZHVyaW5nIGRpYWxpbmcuIENhcnJpZXIgbG9z cyBnaXZlcyBkaXNjb25uZWN0LgotICogIDIgPSBBdXRvOiBGb3IgIm1vZGVtIGRpcmVjdCI6IFRo ZSBzYW1lIGFzICJPZmYiLgotICogICAgICAgICAgICBGb3IgcmVhbCBtb2RlbSB0eXBlczogSGVl ZCBjYXJyaWVyIGR1cmluZyBjb25uZWN0LCBidXQgaWdub3JlCi0gKiAgICAgICAgICAgICAgICBp dCBhbnl0aW1lIGVsc2UuICBDb21wYXRpYmxlIHdpdGggcHJlLTVBIEMtS2VybWl0IHZlcnNpb25z LgotICoKLSAqIEFzIHlvdSBjYW4gc2VlLCB0aGlzIHNldHRpbmcgZG9lcyBub3QgYWZmZWN0IGRp YWxpbmcsIHdoaWNoIGFsd2F5cyBpZ25vcmVzCi0gKiBjYXJyaWVyICh1bmxlc3MgdGhlcmUgaXMg c29tZSBzcGVjaWFsIGV4Y2VwdGlvbiBmb3Igc29tZSBtb2RlbSB0eXBlKS4gIEl0Ci0gKiBkb2Vz IGFmZmVjdCB0dG9wZW4oKSBpZiBpdCBpcyBzZXQgYmVmb3JlIHR0b3BlbigpIGlzIHVzZWQuICBU aGlzIHNldHRpbmcKLSAqIHRha2VzIGVmZmVjdCBvbiB0aGUgbmV4dCBjYWxsIHRvIHR0b3Blbigp L3R0cGt0KCkvdHR2dCgpLiAgQW5kIHRoZXkgYXJlCi0gKiAob3Igc2hvdWxkIGJlKSBhbHdheXMg Y2FsbGVkIGJlZm9yZSBhbnkgY29tbXVuaWNhdGlvbnMgaXMgdHJpZWQsIHdoaWNoCi0gKiBtZWFu cyB0aGF0LCBwcmFjdGljYWxseSBzcGVha2luZywgdGhlIGVmZmVjdCBpcyBpbW1lZGlhdGUuCi0g KgotICogT2YgY291cnNlLCBub3RoaW5nIG9mIHRoaXMgYXBwbGllcyB0byByZW1vdGUgbW9kZSAo eGxvY2FsID0gMCkuCi0gKgotICogU29tZW9uZSBoYXMgeWV0IHRvIHVuY292ZXIgaG93IHRvIG1h bmlwdWxhdGUgdGhlIGNhcnJpZXIgaW4gdGhlIEJTRAotICogZW52aXJvbm1lbnQgKG9yIGFueSBu b24tdGVybWlvIHVzaW5nIGVudmlyb25tZW50KS4gIFVudGlsIHRoYXQgdGltZSwgdGhpcwotICog d2lsbCBzaW1wbHkgYmUgYSBuby1vcCBmb3IgQlNELgotICoKLSAqIE5vdGUgdGhhdCBpbiBwcmV2 aW91cyB2ZXJzaW9ucywgdGhlIGNhcnJpZXIgd2FzIG1vc3Qgb2Z0ZW4gbGVmdCB1bmNoYW5nZWQK LSAqIGluIHR0cGt0KCkvdHR2dCgpIHVubGVzcyB0aGV5IHdlcmUgY2FsbGVkIHdpdGggRkxPX0RJ QUwgb3IgRkxPX0RJQVguICBUaGlzCi0gKiBoYXMgY2hhbmdlZC4gIE5vdyBpdCBpcyBjb250cm9s bGVkIGJ5IHR0Y2FyciBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZXNlCi0gKiBtb2Rlcy4KLSAqLwot aW50Ci10dHNjYXJyKGNhcnJpZXIpIGludCBjYXJyaWVyOyB7Ci0gICAgdHRjYXJyID0gY2Fycmll cjsKLSAgICBkZWJ1ZyhGMTAxLCAidHRzY2FyciIsIiIsdHRjYXJyKTsKLSAgICByZXR1cm4odHRj YXJyKTsKLX0KLQotLyogQyBBIFIgUiBDIFQgTCAgLS0gIFNldCB0dHkgbW9kZXMgZm9yIGNhcnJp ZXIgdHJlYXRtZW50LgotICoKLSAqIFNldHMgdGhlIGFwcHJvcHJpYXRlIGJpdHMgaW4gYSB0ZXJt aW8gb3Igc2d0dHliIHN0cnVjdCBmb3IgY2FycmllciBjb250cm9sCi0gKiAoYWN0dWFsbHksIHRo ZXJlIGFyZSBubyBiaXRzIGluIHNndHR5YiBmb3IgdGhhdCksIG9yIHBlcmZvcm1zIGFueSBvdGhl cgotICogb3BlcmF0aW9ucyBuZWVkZWQgdG8gY29udHJvbCB0aGlzIG9uIHRoZSBjdXJyZW50IHN5 c3RlbS4gIFRoZSBmdW5jdGlvbiBkb2VzCi0gKiBub3QgZG8gdGhlIGFjdHVhbCBUQ1NFVEEgb3Ig c3R0eSwgc2luY2Ugb2Z0ZW4gd2Ugd2FudCB0byBzZXQgb3RoZXIgYml0cyB0b28KLSAqIGZpcnN0 LiAgRG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4geGxvY2FsIGlzIDAsIG9yIHRoZSB0dHkg aXMgbm90IG9wZW5lZC4KLSAqCi0gKiBXZSBkb24ndCBrbm93IGhvdyB0byBkbyBhbnl0aGluZyBs aWtlIGNhcnJpZXIgY29udHJvbCBvbiBub24tQVRUU1Ygc3lzdGVtcywKLSAqIGV4Y2VwdCwgYXBw YXJlbnRseSwgdWx0cml4LiAgU2VlIGFib3ZlLiAgSXQgaXMgYWxzbyBrbm93biB0aGF0IHRoaXMg ZG9lc24ndAotICogaGF2ZSBtdWNoIGVmZmVjdCBvbiBhIFhlbml4IHN5c3RlbS4gIEZvciBYZW5p eCwgb25lIHNob3VsZCBzd2l0Y2ggYmFjayBhbmQKLSAqIGZvcnRoIGJldHdlZW4gdGhlIHVwcGVy IGFuZCBsb3dlciBjYXNlIGRldmljZSBmaWxlcy4gIE1heWJlIGxhdGVyLgotICogUHJlc2VudGx5 LCBYZW5peCB3aWxsIHN0aWNrIHRvIHRoZSBtb2RlIGl0IHdhcyBvcGVuZWQgd2l0aC4KLSAqCi0g KiBjYXJyaWVyOiAwID0gaWdub3JlIGNhcnJpZXIsIDEgPSByZXF1aXJlIGNhcnJpZXIuCi0gKiBU aGUgY3VycmVudCBzdGF0ZSBpcyBzYXZlZCBpbiBjdXJjYXJyLCBhbmQgY2hlY2tlZCB0byBzYXZl IGxhYm91ci4KLSAqLwotI2lmZGVmIFNWT1JQT1NJWAotaW50Ci0jaWZkZWYgQlNENDRPUlBPU0lY Ci1jYXJyY3RsKHR0cGFyLCBjYXJyaWVyKQlzdHJ1Y3QgdGVybWlvcyAqdHRwYXI7IGludCBjYXJy aWVyOwotI2Vsc2UgLyogQVRUU1YgKi8KLWNhcnJjdGwodHRwYXIsIGNhcnJpZXIpCXN0cnVjdCB0 ZXJtaW8gKnR0cGFyOyBpbnQgY2FycmllcjsKLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLS8q IGNhcnJjdGwgKi8gewotICAgIGRlYnVnKEYxMDEsICJjYXJyY3RsIiwiIixjYXJyaWVyKTsKLSAg ICBpZiAoY2FycmllcikKLSAgICAgIHR0cGFyLT5jX2NmbGFnICY9IH5DTE9DQUw7Ci0gICAgZWxz ZQotICAgICAgdHRwYXItPmNfY2ZsYWcgfD0gQ0xPQ0FMOwotICAgIHJldHVybigwKTsKLX0KLSNl bHNlIC8qIEJlcmtlbGV5LCBWNywgZXQgYWwuLi4gKi8KLWludAotY2FycmN0bCh0dHBhciwgY2Fy cmllcikgc3RydWN0IHNndHR5YiAqdHRwYXI7IGludCBjYXJyaWVyOyB7Ci0gICAgZGVidWcoRjEw MSwgImNhcnJjdGwiLCIiLGNhcnJpZXIpOwotICAgIGlmIChjYXJyaWVyID09IGN1cmNhcnIpCi0g ICAgICByZXR1cm4oMCk7Ci0gICAgY3VyY2FyciA9IGNhcnJpZXI7Ci0jaWZkZWYgdWx0cml4Ci0j aWZkZWYgQ09NTUVOVAotLyoKLSAgT2xkIGNvZGUgZnJvbSBzb21lYm9keSBhdCBERUMgdGhhdCB0 ZW5kcyB0byBnZXQgc3R1Y2ssIHRpbWUgb3V0LCBldGMuCi0qLwotICAgIGlmIChjYXJyaWVyKSB7 Ci0JaW9jdGwodHR5ZmQsIFRJT0NNT0RFTSwgJnRlbXApOwotCWlvY3RsKHR0eWZkLCBUSU9DSFBD TCwgMCk7Ci0gICAgfSBlbHNlIHsKLQkvKiAoQWNjb3JkaW5nIHRvIHRoZSBtYW51YWxzLCBUSU9D TkNBUiBzaG91bGQgYmUgcHJlZmVycmVkICovCi0JLyogb3ZlciBUSU9DTk1PREVNLi4uKSAqLwot CWlvY3RsKHR0eWZkLCBUSU9DTk1PREVNLCAmdGVtcCk7Ci0gICAgfQotI2Vsc2UKLS8qCi0gIE5l dyBjb2RlIGZyb20gSmFtaWUgV2F0c29uIHRoYXQsIGhlIHNheXMsIGVsaW1pbmF0ZXMgdGhlIHBy b2JsZW1zLgotKi8KLSAgICBpZiAoY2FycmllcikgewotCWlvY3RsKHR0eWZkLCBUSU9DQ0FSKTsK LQlpb2N0bCh0dHlmZCwgVElPQ0hQQ0wpOwotICAgIH0gZWxzZSB7Ci0JaW9jdGwodHR5ZmQsIFRJ T0NOQ0FSKTsKLSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIHVsdHJpeCAq LwotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLQotCi0vKiAgVCBU IEcgTSBEIE0gIC0tICBHZXQgbW9kZW0gc2lnbmFscyAgKi8KLS8qCi0gTG9va3MgZm9yIFJTLTIz MiBtb2RlbSBzaWduYWxzLCBhbmQgcmV0dXJucyB0aG9zZSB0aGF0IGFyZSBvbiBpbiBhcyBpdHMK LSByZXR1cm4gdmFsdWUsIGluIGEgYml0IG1hc2sgY29tcG9zZWQgb2YgdGhlIEJNX3h4eCB2YWx1 ZXMgZGVmaW5lZCBpbiBja2NkZWIuaC4KLSBSZXR1cm5zOgotIC0zIE5vdCBpbXBsZW1lbnRlZAot IC0yIGlmIHRoZSBjb21tdW5pY2F0aW9uIGRldmljZSBkb2VzIG5vdCBoYXZlIG1vZGVtIGNvbnRy b2wgKGUuZy4gdGVsbmV0KQotIC0xIG9uIGVycm9yLgotID49IDAgb24gc3VjY2Vzcywgd2l0aCBh IGJpdCBtYXNrIGNvbnRhaW5pbmcgdGhlIG1vZGVtIHNpZ25hbHMgdGhhdCBhcmUgb24uCi0qLwot Ci0vKgotICBEZWZpbmUgdGhlIHN5bWJvbCBLX01ETUNUTCBpZiB3ZSBoYXZlIFN5cyBWIFIzIC8g NC4zIEJTRCBzdHlsZQotICBtb2RlbSBjb250cm9sLCBuYW1lbHkgdGhlIFRJT0NNR0VUIGlvY3Rs LgotKi8KLQotI2lmZGVmIEJTRDQzCi0jZGVmaW5lIEtfTURNQ1RMCi0jZW5kaWYgLyogQlNENDMg Ki8KLQotI2lmZGVmIFNVTk9TNAotI2RlZmluZSBLX01ETUNUTAotI2VuZGlmIC8qIFNVTk9TNCAq LwotCi0vKgotICBTQ08gT3BlblNlcnZlciBSNS4wLjQuICBUaGUgVElPQ01HRVQgZGVmaW5pdGlv biBpcyBoYXJkd2lyZWQgaW4gYmVjYXVzZSBpdAotICBpcyBza2lwcGVkIGluIHRlcm1pby5oIHdo ZW4gX1BPU0lYX1NPVVJDRSBpcyBkZWZpbmVkLiAgQnV0IF9QT1NJWF9TT1VSQ0UKLSAgbXVzdCBi ZSBkZWZpbmVkIGluIG9yZGVyIHRvIGdldCB0aGUgaGlnaCBzZXJpYWwgc3BlZWRzIHRoYXQgYXJl IG5ldyB0bwotICA1LjAuNC4gIEhvd2V2ZXIsIHRoZSByZWd1bGFyIFNDTyBkcml2ZXJzIGRvIG5v dCBpbXBsZW1lbnQgVElPQ01HRVQsIHNvIHRoZQotICBpb2N0bCgpIHJldHVybnMgLTEgd2l0aCBl cnJubyAyMiAoaW52YWxpZCBmdW5jdGlvbikuICBCdXQgdGhpcmQtcGFydHkKLSAgZHJpdmVycywg ZS5nLiBmb3IgRGlnaWJvYXJkLCBkbyBpbXBsZW1lbnQgaXQsIGFuZCBzbyBpdCBzaG91bGQgd29y ayBvbiBwb3J0cwotICBkcml2ZW4gYnkgdGhvc2UgZHJpdmVycy4KLSovCi0jaWZkZWYgU0NPX09T UjUwNAotI2lmbmRlZiBUSU9DTUdFVAotI2RlZmluZSBUSU9DTUdFVCAoKCd0Jzw8OCl8MjkpCi0j ZW5kaWYgLyogVElPQ01HRVQgKi8KLSNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCi0KLSNpZmRlZiBD S19TQ09WNQotLyogQmVjYXVzZSBQT1NJWCBzdHJpY3RuZXNzIGluIDxzeXMvdGVybWlvLmg+IHdv bid0IGxldCB1cyBzZWUgdGhlc2UuICovCi0jaWZuZGVmIFRJT0NNX0RUUgotI2RlZmluZSBUSU9D TV9EVFIJMHgwMDAyCQkvKiBkYXRhIHRlcm1pbmFsIHJlYWR5ICovCi0jZGVmaW5lIFRJT0NNX1JU UwkweDAwMDQJCS8qIHJlcXVlc3QgdG8gc2VuZCAqLwotI2RlZmluZSBUSU9DTV9DVFMJMHgwMDIw CQkvKiBjbGVhciB0byBzZW5kICovCi0jZGVmaW5lIFRJT0NNX0NBUgkweDAwNDAJCS8qIGNhcnJp ZXIgZGV0ZWN0ICovCi0jZGVmaW5lIFRJT0NNX1JORwkweDAwODAJCS8qIHJpbmcgKi8KLSNkZWZp bmUgVElPQ01fRFNSCTB4MDEwMAkJLyogZGF0YSBzZXQgcmVhZHkgKi8KLSNkZWZpbmUgVElPQ01f Q0QJVElPQ01fQ0FSCi0jZGVmaW5lIFRJT0NNX1JJCVRJT0NNX1JORwotI2VuZGlmIC8qIFRJT0NN X0RUUiAqLwotI2VuZGlmIC8qIENLX1NDT1Y1ICovCi0KLSNpZmRlZiBRTlgKLSNkZWZpbmUgS19N RE1DVEwKLSNlbHNlCi0jaWZkZWYgVElPQ01HRVQKLSNkZWZpbmUgS19NRE1DVEwKLSNlbmRpZiAv KiBUSU9DTUdFVCAqLwotI2VuZGlmIC8qIFFOWCAqLwotLyoKLSAgIkEgc2VyaWFsIGNvbW11bmlj YXRpb24gcHJvZ3JhbSB0aGF0IGNhbid0IHJlYWQgbW9kZW0gc2lnbmFscwotICAgaXMgbGlrZSBh IGNhciB3aXRob3V0IHdpbmRvd3MuIgotKi8KLWludAotdHRnbWRtKCkgewotCi0jaWZkZWYgUU5Y Ci0jaW5jbHVkZSA8c3lzL3Fpb2N0bC5oPgotCi0gICAgdW5zaWduZWQgbG9uZyB5LCBtZG1iaXRz WzJdOwotICAgIGludCB4LCB6ID0gMDsKLQotICAgIGlmICh4bG9jYWwgJiYgdHR5ZmQgPCAwKQot ICAgICAgcmV0dXJuKC0xKTsKLQotI2lmZGVmIE5FVENPTk4KLSAgICBpZiAobmV0Y29ubikgewkJ CS8qIE5ldHdvcmsgY29ubmVjdGlvbiAqLwotI2lmZGVmIFROX0NPTVBPUlQKLSAgICAgICAgaWYg KGlzdG5jb21wb3J0KCkpIHsKLQkgICAgZ290c2lncyA9IDE7Ci0JICAgIHJldHVybih0bmdtZG0o KSk7Ci0JfSBlbHNlCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotCSAgcmV0dXJuKC0yKTsJCQkv KiBObyBtb2RlbSBzaWduYWxzICovCi0gICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lm ZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpIHJldHVybigtMik7Ci0jZW5kaWYgLyogTkVUQ01E ICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oLTIpOwotI2VuZGlmIC8q IE5FVFBUWSAqLwotCi0gICAgbWRtYml0c1swXSA9IDBMOwotICAgIG1kbWJpdHNbMV0gPSAwTDsK LS8qCi0gKiBGcm9tIDxzeXMvcWlvY3RsLmg+OgotICoKLSAqIFNFUklBTCBkZXZpY2VzICAgKGFs bCBEZXYuc2VyIHZlcnNpb25zKQotICogMCA6IERUUiAgICAgICAgICAgOCA9IERhdGEgQml0cyAw ICAxNiAtIHJlc2VydmVkICAgICAyNCAtIHJlc2VydmVkCi0gKiAxIDogUlRTICAgICAgICAgICA5 ID0gRGF0YSBCaXRzIDEgIDE3IC0gcmVzZXJ2ZWQgICAgIDI1IC0gcmVzZXJ2ZWQKLSAqIDIgPSBP dXQgMSAgICAgICAgMTAgPSBTdG9wIEJpdHMgICAgMTggLSByZXNlcnZlZCAgICAgMjYgLSByZXNl cnZlZAotICogMyA9IEludCBFbmFibGUgICAxMSA9IFBhciBFbmFibGUgICAxOSAtIHJlc2VydmVk ICAgICAyNyAtIHJlc2VydmVkCi0gKiA0ID0gTG9vcCAgICAgICAgIDEyID0gUGFyIEV2ZW4gICAg IDIwID0gQ1RTICAgICAgICAgIDI4IC0gcmVzZXJ2ZWQKLSAqIDUgLSByZXNlcnZlZCAgICAgMTMg PSBQYXIgU3RpY2sgICAgMjEgPSBEU1IgICAgICAgICAgMjkgLSByZXNlcnZlZAotICogNiAtIHJl c2VydmVkICAgICAxNCA6IEJyZWFrICAgICAgICAyMiA9IFJJICAgICAgICAgICAzMCAtIHJlc2Vy dmVkCi0gKiA3IC0gcmVzZXJ2ZWQgICAgIDE1ID0gMCAgICAgICAgICAgIDIzID0gQ0QgICAgICAg ICAgIDMxIC0gcmVzZXJ2ZWQKLSAqLwotICAgIGVycm5vID0gMDsKLSAgICB4ID0gcW54X2lvY3Rs KHR0eWZkLCBRQ1RMX0RFVl9DVEwsICZtZG1iaXRzWzBdLCA4LCAmbWRtYml0c1swXSwgNCk7Ci0g ICAgZGVidWcoRjEwMSwidHRnbWRtIHFueF9pb2N0bCIsIiIseCk7Ci0gICAgZGVidWcoRjEwMSwi dHRnbWRtIHFueF9pb2N0bCBlcnJubyIsIiIsZXJybm8pOwotICAgIGlmICgheCkgewotCWRlYnVn KEYxMDEsInR0Z21kbSBxbnhfaW9jdGwgbWRtYml0c1swXSIsIiIsbWRtYml0c1swXSk7Ci0JZGVi dWcoRjEwMSwidHRnbWRtIHFueF9pb2N0bCBtZG1iaXRzWzFdIiwiIixtZG1iaXRzWzFdKTsKLQl5 ID0gbWRtYml0c1swXTsKLQlpZiAoeSAmIDB4MDAwMDAxTCkgeiB8PSBCTV9EVFI7CS8qIEJpdCAg MCAqLwotCWlmICh5ICYgMHgwMDAwMDJMKSB6IHw9IEJNX1JUUzsJLyogQml0ICAxICovCi0JaWYg KHkgJiAweDEwMDAwMEwpIHogfD0gQk1fQ1RTOwkvKiBCaXQgMjAgKi8KLQlpZiAoeSAmIDB4MjAw MDAwTCkgeiB8PSBCTV9EU1I7CS8qIEJpdCAyMSAqLwotCWlmICh5ICYgMHg0MDAwMDBMKSB6IHw9 IEJNX1JORzsJLyogQml0IDIyICovCi0JaWYgKHkgJiAweDgwMDAwMEwpIHogfD0gQk1fRENEOwkv KiBCaXQgMjMgKi8KLQlkZWJ1ZyhGMTAxLCJ0dGdtZG0gcW54IHJlc3VsdCIsIiIseik7Ci0JZGVi dWcoRjExMCwidHRnbWRtIHFueCBDRCA9ICIsKHogJiBCTV9EQ0QpID8gIk9uIiA6ICJPZmYiLCAw KTsKLQlnb3RzaWdzID0gMTsKLQlyZXR1cm4oeik7Ci0gICAgfSBlbHNlIHJldHVybigtMSk7Ci0j ZWxzZSAvKiBRTlggKi8KLSNpZmRlZiBIUFVYCQkJCS8qIEhQVVggaGFzIGl0cyBvd24gd2F5ICov Ci0gICAgaW50IHgsIHo7Ci0KLSNpZmRlZiBIUFVYMTAJCQkJLyogTW9kZW0gZmxhZyB3b3JkICov Ci0gICAgbWZsYWcgeTsJCQkJLyogbWZsYWcgdHlwZWRlZidkIGluIDxzeXMvbW9kZW0uaD4gKi8K LSNlbHNlCi0jaWZkZWYgSFBVWDkKLSAgICBtZmxhZyB5OwotI2Vsc2UKLSNpZmRlZiBIUFVYOAot ICAgIG1mbGFnIHk7Ci0jZWxzZQotICAgIHVuc2lnbmVkIGxvbmcgeTsJCQkvKiBOb3Qgc3VyZSBh Ym91dCBwcmUtOC4wLi4uICovCi0jZW5kaWYgLyogSFBVWDggKi8KLSNlbmRpZiAvKiBIUFVYOSAq LwotI2VuZGlmIC8qIEhQVVgxMCAqLwotCi0gICAgaWYgKHhsb2NhbCAmJiB0dHlmZCA8IDApCi0g ICAgICByZXR1cm4oLTEpOwotCi0jaWZkZWYgTkVUQ09OTgotICAgIGlmIChuZXRjb25uKSB7CQkJ LyogTmV0d29yayBjb25uZWN0aW9uICovCi0jaWZkZWYgVE5fQ09NUE9SVAotICAgICAgICBpZiAo aXN0bmNvbXBvcnQoKSkgewotCSAgICBnb3RzaWdzID0gMTsKLQkgICAgcmV0dXJuKHRuZ21kbSgp KTsKLQl9IGVsc2UKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0JICByZXR1cm4oLTIpOwkJCS8q IE5vIG1vZGVtIHNpZ25hbHMgKi8KLSAgICB9Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0jaWZk ZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBORVRDTUQg Ki8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHJldHVybigtMik7Ci0jZW5kaWYgLyog TkVUUFRZICovCi0KLSAgICBpZiAoeGxvY2FsKQkJCQkvKiBHZXQgbW9kZW0gc2lnbmFscyAqLwot ICAgICAgeCA9IGlvY3RsKHR0eWZkLE1DR0VUQSwmeSk7Ci0gICAgZWxzZQotICAgICAgeCA9IGlv Y3RsKDAsTUNHRVRBLCZ5KTsKLSAgICBpZiAoeCA8IDApIHJldHVybigtMSk7Ci0gICAgZGVidWco RjEwMSwidHRnbWRtIiwiIix5KTsKLQotICAgIHogPSAwOwkJCQkvKiBJbml0aWFsaXplIHJldHVy biB2YWx1ZSAqLwotCi0vKiBOb3cgc2V0IGJpdHMgZm9yIGVhY2ggbW9kZW0gc2lnbmFsIHRoYXQg aXMgcmVwb3J0ZWQgdG8gYmUgb24uICovCi0KLSNpZmRlZiBNQ1RTCi0gICAgLyogQ2xlYXIgVG8g U2VuZCAqLwotICAgIGRlYnVnKEYxMDEsInR0Z21kbSBIUFVYIENUUyIsIiIseSAmIE1DVFMpOwot ICAgIGlmICh5ICYgTUNUUykgeiB8PSBCTV9DVFM7Ci0jZW5kaWYKLSNpZmRlZiBNRFNSCi0gICAg LyogRGF0YSBTZXQgUmVhZHkgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gSFBVWCBEU1IiLCIi LHkgJiBNRFNSKTsKLSAgICBpZiAoeSAmIE1EU1IpIHogfD0gQk1fRFNSOwotI2VuZGlmCi0jaWZk ZWYgTURDRAotICAgIC8qIENhcnJpZXIgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gSFBVWCBE Q0QiLCIiLHkgJiBNRENEKTsKLSAgICBpZiAoeSAmIE1EQ0QpIHogfD0gQk1fRENEOwotI2VuZGlm Ci0jaWZkZWYgTVJJCi0gICAgLyogUmluZyBJbmRpY2F0ZSAqLwotICAgIGRlYnVnKEYxMDEsInR0 Z21kbSBIUFVYIFJJIiwiIix5ICYgTVJJKTsKLSAgICBpZiAoeSAmIE1SSSkgeiB8PSBCTV9STkc7 Ci0jZW5kaWYKLSNpZmRlZiBNRFRSCi0gICAgLyogRGF0YSBUZXJtaW5hbCBSZWFkeSAqLwotICAg IGRlYnVnKEYxMDEsInR0Z21kbSBIUFVYIERUUiIsIiIseSAmIE1EVFIpOwotICAgIGlmICh5ICYg TURUUikgeiB8PSBCTV9EVFI7Ci0jZW5kaWYKLSNpZmRlZiBNUlRTCi0gICAgLyogUmVxdWVzdCBU byBTZW5kICovCi0gICAgZGVidWcoRjEwMSwidHRnbWRtIEhQVVggUlRTIiwiIix5ICYgTVJUUyk7 Ci0gICAgaWYgKHkgJiBNUlRTKSB6IHw9IEJNX1JUUzsKLSNlbmRpZgotICAgIGdvdHNpZ3MgPSAx OwotICAgIHJldHVybih6KTsKLQotI2Vsc2UgLyogISBIUFVYICovCi0KLSNpZmRlZiBLX01ETUNU TAotLyoKLSAgTm90ZSwgVElPQ01HRVQgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gZGVmaW5lZCBp biA8c3lzL2lvY3RsLmg+IG9yIGVsc2V3aGVyZS4KLSAgSWYgbm90LCB3ZSB0cnkgaW5jbHVkaW5n IDxzeXMvdHR5Y29tLmg+IC0tIGlmIHRoaXMgYmxvd3MgdXAgdGhlbiBtb3JlIGlmZGVmcwotICBh cmUgbmVlZGVkLgotKi8KLSNpZm5kZWYgVElPQ01HRVQKLSNpbmNsdWRlIDxzeXMvdHR5Y29tLmg+ Ci0jZW5kaWYgLyogVElPQ01HRVQgKi8KLQotICAgIGludCB4LCB5LCB6OwotCi0gICAgZGVidWco RjEwMCwidHRnbWRtIEtfTURNQ1RMIGRlZmluZWQiLCIiLDApOwotCi0jaWZkZWYgTkVUQ09OTgot ICAgIGlmIChuZXRjb25uKSB7CQkJLyogTmV0d29yayBjb25uZWN0aW9uICovCi0jaWZkZWYgVE5f Q09NUE9SVAotICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgewotCSAgICBnb3RzaWdzID0gMTsK LQkgICAgcmV0dXJuKHRuZ21kbSgpKTsKLQl9IGVsc2UKLSNlbmRpZiAvKiBUTl9DT01QT1JUICov Ci0JICByZXR1cm4oLTIpOwkJCS8qIE5vIG1vZGVtIHNpZ25hbHMgKi8KLSAgICB9Ci0jZW5kaWYg LyogTkVUQ09OTiAqLwotCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0dXJuKC0y KTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHJl dHVybigtMik7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0KLSAgICBpZiAoeGxvY2FsICYmIHR0eWZk IDwgMCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAoeGxvY2FsKQotICAgICAgeCA9IGlv Y3RsKHR0eWZkLFRJT0NNR0VULCZ5KTsJLyogR2V0IG1vZGVtIHNpZ25hbHMuICovCi0gICAgZWxz ZQotICAgICAgeCA9IGlvY3RsKDAsVElPQ01HRVQsJnkpOwotICAgIGRlYnVnKEYxMDEsInR0Z21k bSBUSU9DTUdFVCBpb2N0bCIsIiIseCk7Ci0gICAgaWYgKHggPCAwKSB7Ci0JZGVidWcoRjEwMSwi dHRnbWRtIGVycm5vIiwiIixlcnJubyk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVidWco RjEwMSwidHRnbWRtIGJpdHMiLCIiLHkpOwotCi0gICAgeiA9IDA7CQkJCS8qIEluaXRpYWxpemUg cmV0dXJuIHZhbHVlLiAqLwotI2lmZGVmIFRJT0NNX0NUUwotICAgIC8qIENsZWFyIFRvIFNlbmQg Ki8KLSAgICBpZiAoeSAmIFRJT0NNX0NUUykgeiB8PSBCTV9DVFM7Ci0gICAgZGVidWcoRjEwMSwi dHRnbWRtIFRJT0NNX0NUUyBkZWZpbmVkIiwiIixUSU9DTV9DVFMpOyAKLSNlbHNlCi0gICAgZGVi dWcoRjEwMCwidHRnbWRtIFRJT0NNX0NUUyBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYKLSNp ZmRlZiBUSU9DTV9EU1IKLSAgICAvKiBEYXRhIFNldCBSZWFkeSAqLwotICAgIGlmICh5ICYgVElP Q01fRFNSKSB6IHw9IEJNX0RTUjsKLSAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gVElPQ01fRFNSIGRl ZmluZWQiLCIiLFRJT0NNX0RTUik7IAotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gVElP Q01fRFNSIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZgotI2lmZGVmIFRJT0NNX0NBUgotICAg IC8qIENhcnJpZXIgKi8KLSAgICBpZiAoeSAmIFRJT0NNX0NBUikgeiB8PSBCTV9EQ0Q7Ci0gICAg ZGVidWcoRjEwMSwidHRnbWRtIFRJT0NNX0NBUiBkZWZpbmVkIiwiIixUSU9DTV9DQVIpOyAKLSNl bHNlCi0gICAgZGVidWcoRjEwMCwidHRnbWRtIFRJT0NNX0NBUiBub3QgZGVmaW5lZCIsIiIsMCk7 Ci0jZW5kaWYKLSNpZmRlZiBUSU9DTV9STkcKLSAgICAvKiBSaW5nIEluZGljYXRlICovCi0gICAg aWYgKHkgJiBUSU9DTV9STkcpIHogfD0gQk1fUk5HOwotICAgIGRlYnVnKEYxMDEsInR0Z21kbSBU SU9DTV9STkcgZGVmaW5lZCIsIiIsVElPQ01fUk5HKTsgCi0jZWxzZQotICAgIGRlYnVnKEYxMDAs InR0Z21kbSBUSU9DTV9STkcgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmCi0jaWZkZWYgVElP Q01fRFRSCi0gICAgLyogRGF0YSBUZXJtaW5hbCBSZWFkeSAqLwotICAgIGlmICh5ICYgVElPQ01f RFRSKSB6IHw9IEJNX0RUUjsKLSAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gVElPQ01fRFRSIGRlZmlu ZWQiLCIiLFRJT0NNX0RUUik7IAotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gVElPQ01f RFRSIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZgotI2lmZGVmIFRJT0NNX1JUUwotICAgIC8q IFJlcXVlc3QgVG8gU2VuZCAqLwotICAgIGlmICh5ICYgVElPQ01fUlRTKSB6IHw9IEJNX1JUUzsK LSAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gVElPQ01fUlRTIGRlZmluZWQiLCIiLFRJT0NNX1JUUyk7 IAotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gVElPQ01fUlRTIG5vdCBkZWZpbmVkIiwi IiwwKTsKLSNlbmRpZgotICAgIGdvdHNpZ3MgPSAxOwotICAgIHJldHVybih6KTsKLQotI2Vsc2Ug LyogIUtfTURNQ1RMIGNhdGNoLUFsbCAqLwotCi0gICAgZGVidWcoRjEwMCwidHRnbWRtIEtfTURN Q1RMIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNpZmRlZiBUSU9DTUdFVAotICAgIGRlYnVnKEYxMDAs InR0Z21kbSBUSU9DTUdFVCBkZWZpbmVkIiwiIiwwKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwi dHRnbWRtIFRJT0NNR0VUIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZiAvKiBUSU9DTUdFVCAq LwotI2lmZGVmIF9TVklEMwotICAgIGRlYnVnKEYxMDAsInR0Z21kbSBfU1ZJRDMgZGVmaW5lZCIs IiIsMCk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAsInR0Z21kbSBfU1ZJRDMgbm90IGRlZmluZWQi LCIiLDApOwotI2VuZGlmIC8qIF9TVklEMyAqLwotCi0jaWZkZWYgTkVUQ09OTgotICAgIGlmIChu ZXRjb25uKSB7CQkJLyogTmV0d29yayBjb25uZWN0aW9uICovCi0jaWZkZWYgVE5fQ09NUE9SVAot ICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgewotCSAgICBnb3RzaWdzID0gMTsKLQkgICAgcmV0 dXJuKHRuZ21kbSgpKTsKLQl9IGVsc2UKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0JICByZXR1 cm4oLTIpOwkJCS8qIE5vIG1vZGVtIHNpZ25hbHMgKi8KLSAgICB9Ci0jZW5kaWYgLyogTkVUQ09O TiAqLwotCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0dXJuKC0yKTsKLSNlbmRp ZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHJldHVybigtMik7 Ci0jZW5kaWYgLyogTkVUUFRZICovCi0KLSAgICByZXR1cm4oLTMpOwkJCQkvKiBTb3JyeSwgSSBk b24ndCBrbm93IGhvdy4uLiAqLwotCi0jZW5kaWYgLyogS19NRE1DVEwgKi8KLSNlbmRpZiAvKiBI UFVYICovCi0jZW5kaWYgLyogUU5YICovCi19Ci0KLS8qICBQIFMgVSBTIFAgRSBOIEQgIC0tICBQ dXQgdGhpcyBwcm9jZXNzIGluIHRoZSBiYWNrZ3JvdW5kLiAgKi8KLQotLyoKLSAgQ2FsbCB3aXRo IGZsYWcgbm9uemVybyBpZiBzdXNwZW5kaW5nIGlzIGFsbG93ZWQsIHplcm8gaWYgbm90IGFsbG93 ZWQuCi0gIFJldHVybnMgMCBvbiBhcHBhcmVudCBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlIChmbGFn IHdhcyB6ZXJvLCBvcgotICBraWxsKCkgcmV0dXJuZWQgYW4gZXJyb3IgY29kZS4KLSovCi1pbnQK LXBzdXNwZW5kKGZsYWcpIGludCBmbGFnOyB7Ci0KLSNpZmRlZiBSVFUKLSAgICBleHRlcm4gaW50 IHJ0dV9idWc7Ci0jZW5kaWYgLyogUlRVICovCi0KLSAgICBpZiAoZmxhZyA9PSAwKSByZXR1cm4o LTEpOwotCi0jaWZkZWYgTk9KQwotICAgIHJldHVybigtMSk7Ci0jZWxzZQotI2lmZGVmIFNJR1RT VFAKLS8qCi0gIFRoZSBiaWcgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIGpvYiBjb250cm9sIGlz ICpyZWFsbHkqIHN1cHBvcnRlZC4KLSAgVGhlcmUncyBubyB3YXkgS2VybWl0IGNhbiBrbm93IGZv ciBzdXJlLiAgVGhlIGZhY3QgdGhhdCBTSUdUU1RQIGlzCi0gIGRlZmluZWQgZG9lcyBub3QgZ3Vh cmFudGVlIHRoZSBVbml4IGtlcm5lbCBzdXBwb3J0cyBpdCwgYW5kIHRoZSBmYWN0Ci0gIHRoYXQg dGhlIFVuaXgga2VybmVsIHN1cHBvcnRzIGl0IGRvZXNuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIHVz ZXIncwotICBzaGVsbCAob3Igb3RoZXIgcHJvY2VzcyB0aGF0IGludm9rZWQgS2VybWl0KSBzdXBw b3J0cyBpdC4KLSovCi0jaWZkZWYgUlRVCi0gICAgcnR1X2J1ZyA9IDE7Ci0jZW5kaWYgLyogUlRV ICovCi0gICAgaWYgKGtpbGwoMCxTSUdTVE9QKSA8IDAKLSNpZmRlZiBNSVBTCi0vKiBMZXQncyB0 cnkgdGhpcyBmb3IgTUlQUyB0b28uICovCi0JJiYga2lsbChnZXRwaWQoKSxTSUdTVE9QKSA8IDAK LSNlbmRpZiAvKiBNSVBTICovCi0JKSB7CQkJCS8qIElmIGpvYiBjb250cm9sLCBzdXNwZW5kIHRo ZSBqb2IgKi8KLQlwZXJyb3IoInN1c3BlbmQiKTsKLQlkZWJ1ZyhGMTAxLCJwc3VzcGVuZCBlcnJv ciIsIiIsZXJybm8pOwotCXJldHVybigtMSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDAsInBzdXNw ZW5kIG9rIiwiIiwwKTsKLSAgICByZXR1cm4oMCk7Ci0jZWxzZQotICAgIHJldHVybigtMSk7Ci0j ZW5kaWYgLyogU0lHVFNUUCAqLwotI2VuZGlmIC8qIE5PSkMgKi8KLX0KLQotLyoKLSAgc2V0dWlk IHBhY2thZ2UsIGJ5IEtyaXN0b2ZmZXIgRXJpa3Nzb24sIHdpdGggY29udHJpYnV0aW9ucyBmcm9t IERlYW4KLSAgTG9uZyBhbmQgZmRjLgotKi8KLQotLyogVGhlIGZvbGxvd2luZyBpcyBmb3IgU0NP IHdoZW4gQ0tfQU5TSUxJQlMgaXMgZGVmaW5lZC4uLiAqLwotI2lmZGVmIE1fVU5JWAotI2lmZGVm IENLX0FOU0lMSUJTCi0jaWZuZGVmIE5PR0VUSURfUFJPVE9TCi0jZGVmaW5lIE5PR0VUSURfUFJP VE9TCi0jZW5kaWYgLyogTk9HRVRJRF9QUk9UT1MgKi8KLSNlbmRpZiAvKiBDS19BTlNJTElCUyAq LwotI2VuZGlmIC8qIE1fVU5JWCAqLwotCi0jaWZuZGVmIF9QT1NJWF9TT1VSQ0UKLSNpZm5kZWYg U1VOT1M0Ci0jaWZuZGVmIE5FWFQKLSNpZm5kZWYgUFMyQUlYMTAKLSNpZm5kZWYgc2VxdWVudAot I2lmbmRlZiBIUFVYOQotI2lmbmRlZiBIUFVYMTAKLSNpZm5kZWYgQ09IRVJFTlQKLSNpZm5kZWYg Tk9HRVRJRF9QUk9UT1MKLV9QUk9UT1RZUCggVUlEX1QgZ2V0dWlkLCAodm9pZCkgKTsKLV9QUk9U T1RZUCggVUlEX1QgZ2V0ZXVpZCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFVJRF9UIGdldHJldWlk LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVUlEX1QgZ2V0Z2lkLCAodm9pZCkgKTsKLV9QUk9UT1RZ UCggVUlEX1QgZ2V0ZWdpZCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFVJRF9UIGdldHJlZ2lkLCAo dm9pZCkgKTsKLSNlbmRpZiAvKiBOT0dFVElEX1BST1RPUyAqLwotI2Vsc2UKLV9QUk9UT1RZUCgg VUlEX1QgZ2V0cmV1aWQsICh2b2lkKSApOwotX1BST1RPVFlQKCBVSURfVCBnZXRyZWdpZCwgKHZv aWQpICk7Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSNlbmRpZiAvKiBIUFVYMTAgKi8KLSNlbmRp ZiAvKiBIUFVYOSAqLwotI2VuZGlmIC8qIHNlcXVlbnQgKi8KLSNlbmRpZiAvKiBQUzJBSVgxMCAq LwotI2VuZGlmIC8qIE5FWFQgKi8KLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNlbmRpZiAvKiBfUE9T SVhfU09VUkNFICovCi0KLS8qCi1TdWJqZWN0OiBTZXQtdXNlci1pZAotVG86IGZkY0B3YXRzdW4u Y2MuY29sdW1iaWEuZWR1IChGcmFuayBkYSBDcnV6KQotRGF0ZTogU2F0LCAyMSBBcHIgOTAgNDo0 ODoyNSBNRVMKLUZyb206IEtyaXN0b2ZmZXIgRXJpa3Nzb24gPHNrZUBwa21hYi5zZT4KLQotVGhp cyBpcyBhIHNldCBvZiBmdW5jdGlvbnMgdG8gYmUgdXNlZCBpbiBwcm9ncmFtcyB0aGF0IG1heSBi ZSBydW4gc2V0LXVzZXItaWQKLWFuZC9vciBzZXQtZ3JvdXAtaWQuIFRoZXkgaGFuZGxlIGJvdGgg dGhlIGNhc2Ugd2hlcmUgdGhlIHByb2dyYW0gaXMgbm90IHJ1bgotd2l0aCBzdWNoIHByaXZpbGVn ZXMgKG5vdGhpbmcgc3BlY2lhbCBoYXBwZW5zIHRoZW4pLCBhbmQgdGhlIGNhc2Ugd2hlcmUgb25l Ci1vciBib3RoIG9mIHRoZXNlIHNldC1pZCBtb2RlcyBhcmUgdXNlZC4gIFRoZSBwcm9ncmFtIGlz IG1hZGUgdG8gcnVuIHdpdGggdGhlCi11c2VyJ3MgcmVhbCB1c2VyIGFuZCBncm91cCBpZHMgbW9z dCBvZiB0aGUgdGltZSwgZXhjZXB0IGZvciB3aGVuIG1vcmUKLXByaXZpbGVnZXMgYXJlIG5lZWRl ZC4gIERvbid0IHNldC11c2VyLWlkIHRvICJyb290Ii4KLQotVGhpcyB3b3JrcyBvbiBTeXN0ZW0g ViBhbmQgUE9TSVguICBJbiBCU0QsIGl0IGRlcGVuZHMgb24gdGhlCi0ic2F2ZWQtc2V0LXVzZXIt aWQiIGZlYXR1cmUuCi0qLwotCi0jZGVmaW5lIFVJRF9ST09UIDAJCQkvKiBSb290IHVzZXIgYW5k IGdyb3VwIGlkcyAqLwotI2RlZmluZSBHSURfUk9PVCAwCi0KLS8qCi0gIFRoZSBmb2xsb3dpbmcg Y29kZSBkZWZpbmVzIHRoZSBzeW1ib2wgU0VURVVJRCBmb3IgVU5JWCBzeXN0ZW1zIGJhc2VkCi0g IG9uIEJTRDQuNCAoZWl0aGVyIC1FbmN1bWJlcmVkIG9yIC1MaXRlKS4gIFRoaXMgcHJvZ3JhbSB3 aWxsIHRoZW4gdXNlCi0gIHNldGV1aWQoKSBhbmQgc2V0ZWdpZCgpIGluc3RlYWQgb2Ygc2V0dWlk KCkgYW5kIHNldGdpZCgpLCB3aGljaCBzdGlsbAotICBkb24ndCBhbGxvdyBhcmJpdHJhcnkgc3dp dGNoaW5nLiAgSXQgYWxzbyBhdm9pZHMgc2V0cmV1aWQoKSBhbmQKLSAgc2V0cmVnaWQoKSwgd2hp Y2ggYXJlIGluY2x1ZGVkIGluIEJTRDQuNCBmb3IgY29tcGF0aWJpbGl0eSBvbmx5LCBhcmUKLSAg aW5zZWN1cmUsIGFuZCBwcmludCB3YXJuaW5ncyB0byBzdGRlcnIgdW5kZXIgYXQgbGVhc3Qgb25l IHN5c3RlbSAoTmV0QlNECi0gIDEuMCkuICBOb3RlIHRoYXQgUE9TSVggc3lzdGVtcyBzaG91bGQg c3RpbGwgdXNlIHNldHVpZCgpIGFuZCBzZXRnaWQoKTsKLSAgdGhlIHNldGV1aWQoKSBhbmQgc2V0 ZWdpZCgpIGZ1bmN0aW9ucyBhcmUgQlNENC40IGV4dGVuc2lvbnMgdG8gdGhlCi0gIFBPU0lYIG1v ZGVsLiAgTWlrZSBMb25nIDxtaWtlLmxvbmdAYW5hbG9nLmNvbT4sIDgvOTQuCi0qLwotI2lmZGVm IEJTRDQ0Ci0jZGVmaW5lIFNFVEVVSUQKLSNlbmRpZiAvKiBCU0Q0NCAqLwotCi0vKgotICBUaGUg Zm9sbG93aW5nIGNvbnN0cnVjdGlvbiBhdXRvbWF0aWNhbGx5IGRlZmluZXMgdGhlIHN5bWJvbCBT RVRSRVVJRCBmb3IKLSAgVU5JWCB2ZXJzaW9ucyBiYXNlZCBvbiBCZXJrZWxleSBVbml4IDQuMiBh bmQgNC4zLiAgSWYgdGhpcyBzeW1ib2wgaXMKLSAgZGVmaW5lZCwgdGhlbiB0aGlzIHByb2dyYW0g d2lsbCB1c2UgZ2V0cmV1aWQoKSBhbmQgZ2V0cmVnaWQoKSBjYWxscyBpbgotICBwcmVmZXJlbmNl IHRvIGdldHVpZCgpIGFuZCBnZXRnaWQoKSwgd2hpY2ggaW4gQmVya2VsZXktYmFzZWQgVW5peGVz IGRvCi0gIG5vdCBhbGxvdyBhcmJpdHJhcnkgc3dpdGNoaW5nIGJhY2sgYW5kIGZvcnRoIG9mIHJl YWwgJiBlZmZlY3RpdmUgdWlkLgotICBUaGlzIGNvbnN0cnVjdGlvbiBhbHNvIGFsbG93cyAtRFNF VFJFVUlEIHRvIGJlIHB1dCBvbiB0aGUgY2MgY29tbWFuZCBsaW5lCi0gIGZvciBhbnkgc3lzdGVt IHRoYXQgaGFzIGFuZCB3YW50cyB0byB1c2Ugc2V0cmVbdWddaWQoKS4gIEl0IGFsc28gcHJldmVu dHMKLSAgYXV0b21hdGljIGRlZmluaXRpb24gb2YgU0VUUkVVSUQgaWYgLUROT1NFVFJFVSBpcyBp bmNsdWRlZCBvbiB0aGUgY2MKLSAgY29tbWFuZCBsaW5lIChvciBvdGhlcndpc2UgZGVmaW5lZCku Ci0qLwotI2lmZGVmIEZUMTgJCQkJLyogTm9uZSBvZiB0aGlzIGZvciBGb3J0dW5lLiAqLwotI2Rl ZmluZSBOT1NFVFJFVQotI2VuZGlmIC8qIEZUMTggKi8KLQotI2lmZGVmIEFOWUJTRAotI2lmbmRl ZiBCU0QyOQotI2lmbmRlZiBCU0Q0MQotI2lmbmRlZiBTRVRSRVVJRAotI2lmbmRlZiBOT1NFVFJF VQotI2lmbmRlZiBTRVRFVUlECi0jZGVmaW5lIFNFVFJFVUlECi0jZW5kaWYgLyogU0VURVVJRCAq LwotI2VuZGlmIC8qIE5PU0VUUkVVICovCi0jZW5kaWYgLyogU0VUUkVVSUQgKi8KLSNlbmRpZiAv KiAhQlNENDEgKi8KLSNlbmRpZiAvKiAhQlNEMjkgKi8KLSNlbmRpZiAvKiBBTllCU0QgKi8KLQot LyogVmFyaWFibGVzIGZvciB1c2VyIGFuZCBncm91cCBJRHMuICovCi0KLXN0YXRpYyBVSURfVCBy ZWFsdWlkID0gKFVJRF9UKSAtMSwgcHJpdnVpZCA9IChVSURfVCkgLTE7Ci1zdGF0aWMgR0lEX1Qg cmVhbGdpZCA9IChHSURfVCkgLTEsIHByaXZnaWQgPSAoR0lEX1QpIC0xOwotCi0KLS8qIFAgUiBJ IFYgXyBJIE4gSSAgLS0gIEluaXRpYWxpemUgcHJpdmlsZWdlcyBwYWNrYWdlICAqLwotCi0vKiBD YWxsZWQgYXMgZWFybHkgYXMgcG9zc2libGUgaW4gYSBzZXQtdWlkIG9yIHNldC1naWQgcHJvZ3Jh bSB0byBzdG9yZSB0aGUKLSAqIHNldC10byB1aWQgYW5kL29yIGdpZCBhbmQgc3RlcCBkb3duIHRv IHRoZSB1c2VycyByZWFsIHVpZCBhbmQgZ2lkLiBUaGUKLSAqIHN0b3JlZCBpZCdzIGNhbiBiZSB0 ZW1wb3JhcmlseSByZXN0b3JlZCAoYWxsb3dlZCBpbiBTeXN0ZW0gVikgZHVyaW5nCi0gKiBvcGVy YXRpb25zIHRoYXQgcmVxdWlyZSB0aGUgcHJpdmlsZWdlLiAgTW9zdCBvZiB0aGUgdGltZSwgdGhl IHByb2dyYW0KLSAqIHNob3VsZCBleGVjdXRlIGluIHVucHJpdmlsaWdlZCBzdGF0ZSwgdG8gbm90 IGltcG9zZSBhbnkgc2VjdXJpdHkgdGhyZWF0LgotICoKLSAqIE5vdGU6IERvbid0IGZvcmdldCB0 aGF0IGFjY2VzcygpIGFsd2F5cyB1c2VzIHRoZSByZWFsIGlkOnMgdG8gZGV0ZXJtaW5lCi0gKiBm aWxlIGFjY2VzcywgZXZlbiB3aXRoIHByaXZpbGVnZXMgcmVzdG9yZWQuCi0gKgotICogUmV0dXJu cyBhbiBlcnJvciBtYXNrLCB3aXRoIGVycm9yIHZhbHVlcyBvcjplZCB0b2dldGhlcjoKLSAqICAg MSBpZiBzZXR1aWQoKSBmYWlscywKLSAqICAgMiBpZiBzZXRnaWQoKSBmYWlscywgYW5kCi0gKiAg IDQgaWYgdGhlIHByb2dyYW0gaXMgc2V0LXVzZXItaWQgdG8gInJvb3QiLCB3aGljaCBjYW4ndCBi ZSBoYW5kbGVkLgotICoKLSAqIE9ubHkgdGhlIHJldHVybiB2YWx1ZSAwIGluZGljYXRlcyByZWFs IHN1Y2Nlc3MuIEluIGNhc2Ugb2YgZmFpbHVyZSwKLSAqIHRob3NlIHByaXZpbGVnZXMgdGhhdCBj b3VsZCBiZSByZWR1Y2VkIGhhdmUgYmVlbiwgYXQgbGVhc3QsIGJ1dCB0aGUKLSAqIHByb2dyYW0g c2hvdWxkIGJlIGFib3J0ZWQgbm9uZS10aGUtbGVzcy4KLSAqCi0gKiBBbHNvIG5vdGUgdGhhdCB0 aGVzZSBmdW5jdGlvbnMgZG8gbm90IGV4cGVjdCB0aGUgdWlkIG9yIGdpZCB0byBjaGFuZ2UKLSAq IHdpdGhvdXQgdGhlaXIga25vd2luZy4gSXQgbWF5IHdvcmsgaWYgaXQgaXMgb25seSBkb25lIHRl bXBvcmFyaWx5LCBidXQKLSAqIHlvdSdyZSBvbiB5b3VyIG93bi4KLSAqLwotaW50Ci1wcml2X2lu aSgpIHsKLSAgICBpbnQgZXJyID0gMDsKLQotI2lmbmRlZiBIQVZFX0xPQ0tERVYKLQotICAgIC8q IFNhdmUgcmVhbCBJRDpzLiAqLwotICAgIHJlYWx1aWQgPSBnZXR1aWQoKTsKLSAgICByZWFsZ2lk ID0gZ2V0Z2lkKCk7Ci0KLSAgICAvKiBTYXZlIGN1cnJlbnQgZWZmZWN0aXZlIElEOnMsIHRob3Nl IHNldCB0byBhdCBwcm9ncmFtIGV4ZWMuICovCi0gICAgcHJpdnVpZCA9IGdldGV1aWQoKTsKLSAg ICBwcml2Z2lkID0gZ2V0ZWdpZCgpOwotCi0gICAgLyogSWYgcnVubmluZyBzZXQtdWlkLCBnbyBk b3duIHRvIHJlYWwgdWlkLCBvdGhlcndpc2UgcmVtZW1iZXIgdGhhdAotICAgICAqIG5vIHByaXZp bGVnZWQgdWlkIGlzIGF2YWlsYWJsZS4KLSAgICAgKgotICAgICAqIEV4Y2VwdGlvbnM6Ci0gICAg ICoKLSAgICAgKiAxKSBJZiB0aGUgcmVhbCB1aWQgaXMgYWxyZWFkeSAicm9vdCIgYW5kIHRoZSBz ZXQtdWlkIHVpZCAodGhlCi0gICAgICogaW5pdGlhbCBlZmZlY3RpdmUgdWlkKSBpcyBub3QgInJv b3QiLCB0aGVuIHdlIHdvdWxkIGhhdmUgdHJvdWJsZQotICAgICAqIGlmIHdlIHdlbnQgImRvd24i IHRvICJyb290IiBoZXJlLCBhbmQgdGhlbiB0ZW1wb3JhcmlseSBiYWNrIHRvIHRoZQotICAgICAq IHNldC11aWQgdWlkIChub3QgInJvb3QiKSBhbmQgdGhlbiBhZ2FpbiB0cmllZCB0byBiZWNvbWUg InJvb3QiLiBJCi0gICAgICogdGhpbmsgdGhlICJzYXZlZCBzZXQtdWlkIiBpcyBsb3N0IHdoZW4g Y2hhbmdpbmcgdWlkIGZyb20gZWZmZWN0aXZlCi0gICAgICogdWlkICJyb290Iiwgd2hpY2ggY2hh bmdlcyBhbGwgdWlkLCBub3Qgb25seSB0aGUgZWZmZWN0aXZlIHVpZC4gQnV0Ci0gICAgICogaW4g dGhpcyBzaXR1YXRpb24sIHdlIGNhbiBzaW1wbHkgZ28gdG8gInJvb3QiIGFuZCBzdGF5IHRoZXJl IGFsbAotICAgICAqIHRoZSB0aW1lLiBUaGF0IHNob3VsZCBnaXZlIHN1ZmZpY2llbnQgcHJpdmls ZWdlICh1bmRlcnN0YXRlbWVudCEpLAotICAgICAqIGFuZCBnaXZlIHRoZSByaWdodCB1aWRzIGZv ciBzdWJwcm9jZXNzZXMuCi0gICAgICoKLSAgICAgKiAyKSBJZiB0aGUgc2V0LXVpZCAodGhlIGlu aXRpYWwgZWZmZWN0aXZlIHVpZCkgaXMgInJvb3QiLCBhbmQgd2UKLSAgICAgKiBjaGFuZ2UgdWlk IHRvIHRoZSByZWFsIHVpZCwgd2UgY2FuJ3QgY2hhbmdlIGl0IGJhY2sgdG8gInJvb3QiIHdoZW4K LSAgICAgKiB3ZSBuZWVkIHRoZSBwcml2aWxlZ2UsIGZvciB0aGUgc2FtZSByZWFzb24gYXMgaW4g MSkuIFRodXMsIHdlIGNhbid0Ci0gICAgICogaGFuZGxlIHByb2dyYW1zIHRoYXQgYXJlIHNldC11 c2VyLWlkIHRvICJyb290IiBhdCBhbGwuIFRoZSBwcm9ncmFtCi0gICAgICogc2hvdWxkIGJlIHN0 b3BwZWQuICBVc2Ugc29tZSBvdGhlciB1aWQuICAicm9vdCIgaXMgcHJvYmFibHkgdG9vCi0gICAg ICogcHJpdmlsZWdlZCBmb3Igc3VjaCB0aGluZ3MsIGFueXdheS4gKFRoZSB1aWQgaXMgcmV2ZXJ0 ZWQgdG8gdGhlCi0gICAgICogcmVhbCB1aWQgdW50aWwgdGVybWluYXRpb24uKQotICAgICAqCi0g ICAgICogVGhlc2UgdHdvIGV4Y2VwdGlvbnMgaGF2ZSB0aGUgZWZmZWN0IHRoYXQgdGhlICJyb290 IiB1aWQgd2lsbCBuZXZlcgotICAgICAqIGJlIG9uZSBvZiB0aGUgdHdvIHVpZHMgdGhhdCBhcmUg YmVpbmcgc3dpdGNoZWQgYmV0d2Vlbiwgd2hpY2ggYWxzbwotICAgICAqIG1lYW5zIHdlIGRvbid0 IGhhdmUgdG8gY2hlY2sgZm9yIHN1Y2ggY2FzZXMgaW4gdGhlIHN3aXRjaGluZwotICAgICAqIGZ1 bmN0aW9ucy4KLSAgICAgKgotICAgICAqIE5vdGUgdGhhdCBleGNlcHRpb24gMSkgaXMgaGFuZGxl ZCBieSB0aGVzZSByb3V0aW5lcyAoYnkgY29uc3RhbnRseQotICAgICAqIHJ1bm5pbmcgd2l0aCB1 aWQgInJvb3QiLCB3aGlsZSBleGNlcHRpb24gMikgaXMgYSBzZXJpb3VzIGVycm9yLCBhbmQKLSAg ICAgKiBpcyBub3QgcHJvdmlkZWQgZm9yIGF0IGFsbCBpbiB0aGUgc3dpdGNoaW5nIGZ1bmN0aW9u cy4KLSAgICAgKi8KLSAgICBpZiAocmVhbHVpZCA9PSBwcml2dWlkKQotCXByaXZ1aWQgPSAoVUlE X1QpIC0xOwkJLyogTm90IHJ1bm5pbmcgc2V0LXVzZXItaWQuICovCi0KLSAgICAvKiBJZiBydW5u aW5nIHNldC1naWQsIGdvIGRvd24gdG8gcmVhbCBnaWQsIG90aGVyd2lzZSByZW1lbWJlciB0aGF0 Ci0gICAgICogbm8gcHJpdmlsZWdlZCBnaWQgaXMgYXZhaWxhYmxlLgotICAgICAqCi0gICAgICog VGhlcmUgYXJlIG5vIGV4Y2VwdGlvbiBsaWtlIHRoZXJlIGlzIGZvciB0aGUgdXNlciBpZCwgc2lu Y2UgdGhlcmUKLSAgICAgKiBpcyBubyBncm91cCBpZCB0aGF0IGlzIHByaXZpbGVnZWQgaW4gdGhl IG1hbm5lciBvZiB1aWQgInJvb3QiLgotICAgICAqIFRoZXJlIGNvdWxkIGJlIGVxdWl2YWxlbnQg cHJvYmxlbXMgZm9yIGdyb3VwIGNoYW5naW5nIGlmIHRoZQotICAgICAqIHByb2dyYW0gc29tZXRp bWVzIHJhbiB3aXRoIHVpZCAicm9vdCIgYW5kIHNvbWV0aW1lcyBub3QsIGJ1dAotICAgICAqIHRo YXQgaXMgYWxyZWFkeSBhdm9pZGVkIGFzIGV4cGxhaW5lZCBhYm92ZS4KLSAgICAgKgotICAgICAq IFRodXMgd2UgY2FuIGV4cGVjdCBhbHdheXMgdG8gYmUgYWJsZSB0byBzd2l0Y2ggdG8gdGhlICJz YXZlZCBzZXQtCi0gICAgICogZ2lkIiB3aGVuIHdlIHdhbnQsIGFuZCBiYWNrIHRvIHRoZSByZWFs IGdpZCBhZ2Fpbi4gWW91IG1heSBhbHNvCi0gICAgICogZHJhdyB0aGUgY29uY2x1c2lvbiB0aGF0 IHNldC1naWQgcHJvdmlkZXMgZm9yIGZld2VyIGhhc3NsZXMgdGhhbgotICAgICAqIHNldC11aWQu Ci0gICAgICovCi0KLSNpZmRlZiBTVUlEREVCVUcKLSAgICBmcHJpbnRmKHN0ZGVyciwiVUlEX1JP T1Q9JWRcbiIsVUlEX1JPT1QpOwotICAgIGZwcmludGYoc3RkZXJyLCJyZWFsdWlkPSVkXG4iLHJl YWx1aWQpOwotICAgIGZwcmludGYoc3RkZXJyLCJwcml2dWlkPSVkXG4iLHByaXZ1aWQpOwotI2Vu ZGlmIC8qIFNVSURERUJVRyAqLwotCi0gICAgaWYgKHJlYWxnaWQgPT0gcHJpdmdpZCkJCS8qIElm IG5vdCBydW5uaW5nIHNldC11c2VyLWlkLCAqLwotICAgICAgcHJpdmdpZCA9IChHSURfVCkgLTE7 CQkvKiAgcmVtZW1iZXIgaXQgdGhpcyB3YXkuICovCi0KLSAgICBlcnIgPSBwcml2X29mZigpOwkJ CS8qIFR1cm4gb2ZmIHNldHVpZCBwcml2aWxlZ2UuICovCi0KLSAgICBpZiAocHJpdnVpZCA9PSBV SURfUk9PVCkJCS8qIElmIHNldHVpZCB0byByb290LCAqLwotICAgICAgZXJyIHw9IDQ7CQkJCS8q IHJldHVybiB0aGlzIGVycm9yLiAqLwotCi0gICAgaWYgKHJlYWx1aWQgPT0gVUlEX1JPT1QpIHsJ CS8qIElmIHJlYWwgaWQgaXMgcm9vdCwgKi8KLQlwcml2dWlkID0gKFVJRF9UKSAtMTsJCS8qIHN0 YXkgcm9vdCBhdCBhbGwgdGltZXMuICovCi0jaWZkZWYgQVRUNzMwMAotCS8qIElmIEtlcm1pdCBp bnN0YWxsZWQgU1VJRCB1dWNwIGFuZCB1c2VyIGlzIHJ1bm5pbmcgYXMgcm9vdCAqLwotCWVyciAm PSB+MTsJCQkvKiBTeXN0ZW0gViBSMCBkb2VzIG5vdCBzYXZlIFVJRCAqLwotI2VuZGlmIC8qIEFU VDczMDAgKi8KLSAgICB9Ci0jZW5kaWYgLyogSEFWRV9MT0NLREVWICovCi0gICAgcmV0dXJuKGVy cik7Ci19Ci0KLQotLyogTWFjcm9zIGZvciBoaWRpbmcgdGhlIGRpZmZlcmVuY2VzIGluIFVJRC9H SUQgc2V0dGluZyBiZXR3ZWVuIHZhcmlvdXMgVW5peAotICogc3lzdGVtcy4gVGhlc2UgbWFjcm9z IHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIHdpdGggYm90aCB0aGUgcHJpdmlsZWdlZCBJRAotICog YW5kIHRoZSBub24tcHJpdmlsZWdlZCBJRC4gVGhlIG9uZSBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50 LCB3aWxsIGJlY29tZSB0aGUKLSAqIGVmZmVjdGl2ZSBJRC4gVGhlIG9uZSBpbiB0aGUgZmlyc3Qg YXJndW1lbnQgd2lsbCBiZSByZXRhaW5lZCBmb3IgbGF0ZXIKLSAqIHJldHJpZXZhbC4KLSAqLwot I2lmZGVmIFNFVFJFVUlECi0jaWZkZWYgU0FWRURVSUQKLS8qIE9uIEJTRCBzeXN0ZW1zIHdpdGgg dGhlIHNhdmVkLVVJRCBmZWF0dXJlLCB3ZSBqdXN0IGp1Z2dsZSB0aGUgZWZmZWN0aXZlCi0gKiBV SUQgYmFjayBhbmQgZm9ydGgsIGFuZCBsZWF2ZSB0aGUgcmVhbCBVSUQgYXQgaXRzIHRydWUgdmFs dWUuICBUaGUga2VybmVsCi0gKiBhbGxvd3Mgc3dpdGNoaW5nIHRvIGJvdGggdGhlIGN1cnJlbnQg cmVhbCBVSUQsIHRoZSBlZmZlY3RpdmUgVUlELCBhbmQgdGhlCi0gKiBVSUQgd2hpY2ggdGhlIHBy b2dyYW0gaXMgc2V0LVVJRCB0by4gIFRoZSBzYXZlZCBzZXQtVUlEIGFsd2F5cyBob2xkcyB0aGUK LSAqIHByaXZpbGVnZWQgVUlEIGZvciB1cywgYW5kIHRoZSByZWFsIFVJRCB3aWxsIGFsd2F5cyBi ZSB0aGUgbm9uLXByaXZpbGVnZWQsCi0gKiBhbmQgd2UgY2FuIGZyZWVseSBjaG9vc2Ugb25lIG9m IHRoZW0gZm9yIHRoZSBlZmZlY3RpdmUgVUlEIGF0IGFueSB0aW1lLgotICovCi0jZGVmaW5lIHN3 aXRjaHVpZChoaWRkZW4sYWN0aXZlKSBzZXRyZXVpZCggKFVJRF9UKSAtMSwgYWN0aXZlKQotI2Rl ZmluZSBzd2l0Y2hnaWQoaGlkZGVuLGFjdGl2ZSkgc2V0cmVnaWQoIChHSURfVCkgLTEsIGFjdGl2 ZSkKLQotI2Vsc2UgICAvKiBTRVRSRVVJRCwhU0FWRURVSUQgKi8KLQotLyogT24gc3lzdGVtcyB3 aXRoIHNldHJlWGlkKCkgYnV0IHdpdGhvdXQgdGhlIHNhdmVkLVVJRCBmZWF0dXJlLCBub3RhYmx5 Ci0gKiBCU0QgNC4yLCB3ZSBzd2FwIHRoZSByZWFsIGFuZCBlZmZlY3RpdmUgVUlEcyBlYWNoIHRp bWUuICBJdCdzCi0gKiB0aGUgZWZmZWN0aXZlIFVJRCB0aGF0IHdlIGFyZSBpbnRlcmVzdGVkIGlu LCBidXQgd2UgaGF2ZSB0byByZXRhaW4gdGhlCi0gKiB1bnVzZWQgVUlEIHNvbWV3aGVyZSB0byBl bmFibGUgdXMgdG8gcmVzdG9yZSBpdCBsYXRlciwgYW5kIHdlIGRvIHRoaXMKLSAqIGluIHRoZSBy ZWFsIFVJRC4gIFRoZSBrZXJuZWwgb25seSBhbGxvd3Mgc3dpdGNoaW5nIHRvIGVpdGhlciB0aGUg Y3VycmVudAotICogcmVhbCBvciB0aGUgZWZmZWN0aXZlIFVJRCwgdW5sZXNzIHlvdSdyZSAicm9v dCIuCi0gKi8KLSNkZWZpbmUgc3dpdGNodWlkKGhpZGRlbixhY3RpdmUpCXNldHJldWlkKGhpZGRl bixhY3RpdmUpCi0jZGVmaW5lIHN3aXRjaGdpZChoaWRkZW4sYWN0aXZlKQlzZXRyZWdpZChoaWRk ZW4sYWN0aXZlKQotI2VuZGlmCi0KLSNlbHNlIC8qICFTRVRSRVVJRCwgIVNBVkVEVUlEICovCi0K LSNpZmRlZiBTRVRFVUlECi0vKgotICBCU0QgNC40IHdvcmtzIHNpbWlsYXJseSB0byBTeXN0ZW0g ViBhbmQgUE9TSVggKHNlZSBiZWxvdyksIGJ1dCB1c2VzCi0gIHNldGVYaWQoKSBpbnN0ZWFkIG9m IHNldFhpZCgpIHRvIGNoYW5nZSBlZmZlY3RpdmUgSURzLiAgSW4gYWRkaXRpb24sIHRoZQotICBz ZXRlWGlkKCkgZnVuY3Rpb25zIHdvcmsgdGhlIHNhbWUgZm9yICJyb290IiBhcyBmb3Igb3RoZXIg dXNlcnMuCi0qLwotI2RlZmluZSBzd2l0Y2h1aWQoaGlkZGVuLGFjdGl2ZSkJc2V0ZXVpZChhY3Rp dmUpCi0jZGVmaW5lIHN3aXRjaGdpZChoaWRkZW4sYWN0aXZlKQlzZXRlZ2lkKGFjdGl2ZSkKLQot I2Vsc2UgLyogIVNFVEVVSUQgKi8KLQotLyogT24gU3lzdGVtIFYgYW5kIFBPU0lYLCB0aGUgb25s eSB0aGluZyB3ZSBjYW4gY2hhbmdlIGlzIHRoZSBlZmZlY3RpdmUgVUlECi0gKiAodW5sZXNzIHRo ZSBjdXJyZW50IGVmZmVjdGl2ZSBVSUQgaXMgInJvb3QiLCBidXQgaW5pdHN1aWQoKSBhdm9pZHMg dGhhdCBmb3IKLSAqIHVzKS4gIFRoZSBrZXJuZWwgYWxsb3dzIHN3aXRjaGluZyB0byB0aGUgY3Vy cmVudCByZWFsIFVJRCBvciB0byB0aGUgc2F2ZWQKLSAqIHNldC1VSUQuICBUaGVzZSBhcmUgYWx3 YXlzIHNldCB0byB0aGUgbm9uLXByaXZpbGVnZWQgVUlEIGFuZCB0aGUgcHJpdmlsZWdlZAotICog VUlELCByZXNwZWN0aXZlbHksIGFuZCB3ZSBvbmx5IGNoYW5nZSB0aGUgZWZmZWN0aXZlIFVJRC4g IFRoaXMgYnJlYWtzIGlmCi0gKiB0aGUgY3VycmVudCBlZmZlY3RpdmUgVUlEIGlzICJyb290Iiwg dGhvdWdoLCBiZWNhdXNlIGZvciAicm9vdCIgc2V0dWlkL2dpZAotICogYmVjb21lcyBtb3JlIHBv d2VyZnVsLCB3aGljaCBpcyB3aHkgaW5pdHN1aWQoKSB0cmVhdHMgInJvb3QiIHNwZWNpYWxseS4K LSAqIE5vdGU6IFRoYXQgc3BlY2lhbCB0cmVhdG1lbnQgbWF5YmUgY291bGQgYmUgaWdub3JlZCBm b3IgQlNEPyAgTm90ZTogRm9yCi0gKiBzeXN0ZW1zIHRoYXQgZG9uJ3QgZml0IGFueSBvZiB0aGVz ZSBmb3VyIGNhc2VzLCB3ZSBzaW1wbHkgY2FuJ3Qgc3VwcG9ydAotICogc2V0LVVJRC4KLSAqLwot I2RlZmluZSBzd2l0Y2h1aWQoaGlkZGVuLGFjdGl2ZSkJc2V0dWlkKGFjdGl2ZSkKLSNkZWZpbmUg c3dpdGNoZ2lkKGhpZGRlbixhY3RpdmUpCXNldGdpZChhY3RpdmUpCi0KLSNlbmRpZiAvKiBTRVRF VUlEICovCi0jZW5kaWYgLyogU0VUUkVVSUQgKi8KLQotCi0vKiBQIFIgSSBWIF8gTyBOICAtLSAg VHVybiBvbiB0aGUgc2V0dWlkIGFuZC9vciBzZXRnaWQgKi8KLQotLyogR28gdG8gdGhlIHByaXZp bGVnZWQgdWlkIChnaWQpIHRoYXQgdGhlIHByb2dyYW0gaXMgc2V0LXVzZXItaWQKLSAqIChzZXQt Z3JvdXAtaWQpIHRvLCB1bmxlc3MgdGhlIHByb2dyYW0gaXMgcnVubmluZyB1bnByaXZpbGVnZWQu Ci0gKiBJZiBzZXR1aWQoKSBmYWlscywgcmV0dXJuIHZhbHVlIHdpbGwgYmUgMS4gSWYgZ2V0dWlk KCkgZmFpbHMgaXQKLSAqIHdpbGwgYmUgMi4gIFJldHVybiBpbW1lZGlhdGVseSBhZnRlciBmaXJz dCBmYWlsdXJlLCBhbmQgdGhlIGZ1bmN0aW9uCi0gKiB0cmllcyB0byByZXN0b3JlIGFueSBwYXJ0 aWFsIHdvcmsgZG9uZS4gIFJldHVybnMgMCBvbiBzdWNjZXNzLgotICogR3JvdXAgaWQgaXMgY2hh bmdlZCBmaXJzdCwgc2luY2UgaXQgaXMgbGVzcyBzZXJpb3VzIHRoYW4gdXNlciBpZC4KLSAqLwot aW50Ci1wcml2X29uKCkgewotI2lmbmRlZiBIQVZFX0xPQ0tERVYKLSAgICBpZiAocHJpdmdpZCAh PSAoR0lEX1QpIC0xKQotICAgICAgaWYgKHN3aXRjaGdpZChyZWFsZ2lkLHByaXZnaWQpKQotICAg ICAgICByZXR1cm4oMik7Ci0KLSAgICBpZiAocHJpdnVpZCAhPSAoVUlEX1QpIC0xKQotICAgICAg aWYgKHN3aXRjaHVpZChyZWFsdWlkLHByaXZ1aWQpKSB7Ci0JICBpZiAocHJpdmdpZCAhPSAoR0lE X1QpIC0xKQotCSAgICBzd2l0Y2hnaWQocHJpdmdpZCxyZWFsZ2lkKTsKLQkgIHJldHVybigxKTsK LSAgICAgIH0KLSNlbmRpZiAvKiBIQVZFX0xPQ0tERVYgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0K LS8qIFAgUiBJIFYgXyBPIEYgRiAgLS0gIFR1cm4gb24gdGhlIHJlYWwgdWlkIGFuZCBnaWQgKi8K LQotLyogUmV0dXJuIHRvIHRoZSB1bnByaXZpbGVnZWQgdWlkIChnaWQpIGFmdGVyIGFuIHRlbXBv cmFyeSB2aXNpdCB0bwotICogcHJpdmlsZWdlZCBzdGF0dXMsIHVubGVzcyB0aGUgcHJvZ3JhbSBp cyBydW5uaW5nIHdpdGhvdXQgc2V0LXVzZXItaWQKLSAqIChzZXQtZ3JvdXAtaWQpLiBSZXR1cm5z IDEgZm9yIGZhaWx1cmUgaW4gc2V0dWlkKCkgYW5kIDIgZm9yIGZhaWx1cmUKLSAqIGluIHNldGdp ZCgpIG9yOmVkIHRvZ2V0aGVyLiBUaGUgZnVuY3Rpb25zIHRyaWVzIHRvIHJldHVybiBib3RoIHVp ZAotICogYW5kIGdpZCB0byB1bnByaXZpbGVnZWQgc3RhdGUsIHJlZ2FyZGxlc3Mgb2YgZXJyb3Jz LiBSZXR1cm5zIDAgb24KLSAqIHN1Y2Nlc3MuCi0gKi8KLWludAotcHJpdl9vZmYoKSB7Ci0gICAg aW50IGVyciA9IDA7Ci0jaWZuZGVmIEhBVkVfTE9DS0RFVgotICAgIGlmIChwcml2dWlkICE9IChV SURfVCkgLTEpCi0gICAgICAgaWYgKHN3aXRjaHVpZChwcml2dWlkLHJlYWx1aWQpKQotCSAgZXJy IHw9IDE7Ci0KLSAgICBpZiAocHJpdmdpZCAhPSAoR0lEX1QpIC0xKQotICAgICAgIGlmIChzd2l0 Y2hnaWQocHJpdmdpZCxyZWFsZ2lkKSkKLQllcnIgfD0gMjsKLSNlbmRpZiAvKiBIQVZFX0xPQ0tE RVYgKi8KLSAgICByZXR1cm4oZXJyKTsKLX0KLQotLyogVHVybiBvZmYgcHJpdmlsZWdlIHBlcm1h bmVudGx5LiAgTm8gZ29pbmcgYmFjay4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlZm9yZQotICogYSBm b3JrKCkgb24gQlNENDMgbWFjaGluZXMgdGhhdCBkb24ndCBzYXZlIHRoZSBzZXRVSUQgb3Igc2V0 R0lELCBiZWNhdXNlCi0gKiB3ZSBzd2FwIHRoZSByZWFsIGFuZCBlZmZlY3RpdmUgaWRzLCBhbmQg d2UgZG9uJ3Qgd2FudCB0byBsZXQgdGhlIGZvcmtlZAotICogcHJvY2VzcyBzd2FwIHRoZW0gYWdh aW4gYW5kIGdldCB0aGUgcHJpdmlsZWdlIGJhY2suIEl0IHdpbGwgd29yayBvbiBvdGhlcgotICog bWFjaGluZXMgdG9vLCBzdWNoIHRoYXQgeW91IGNhbiByZWx5IG9uIGl0cyBlZmZlY3QgYWx3YXlz IGJlaW5nIHRoZSBzYW1lLAotICogZm9yIGluc3RhbmNlLCBldmVuIHdoZW4geW91J3JlIGluIHBy aXZfb24oKSBzdGF0ZSB3aGVuIHRoaXMgaXMgY2FsbGVkLgotICogKFdlbGwsIHRoYXQgcGFydCBh Ym91dCAicGVybWFuZW50IiBpcyBvbiBTeXN0ZW0gViBvbmx5IHRydWUgaWYgeW91IGZvbGxvdwot ICogdGhpcyB3aXRoIGEgY2FsbCB0byBleGVjKCksIGJ1dCB0aGF0J3Mgd2hhdCB3ZSB3YW50IGl0 IGZvciBhbnl3YXkuKQotICogQWRkZWQgYnkgRGVhbiBMb25nIC0tIGRsb25nQG1pZGdhcmQudWNz Yy5lZHUKLSAqLwotaW50Ci1wcml2X2NhbigpIHsKLSNpZm5kZWYgSEFWRV9MT0NLREVWCi0jaWZk ZWYgU0VUUkVVSUQKLSAgICBpbnQgZXJyID0gMDsKLSAgICBpZiAocHJpdnVpZCAhPSAoVUlEX1Qp IC0xKQotICAgICAgIGlmIChzZXRyZXVpZChyZWFsdWlkLHJlYWx1aWQpKQotCSAgZXJyIHw9IDE7 Ci0KLSAgICBpZiAocHJpdmdpZCAhPSAoR0lEX1QpIC0xKQotICAgICAgICBpZiAoc2V0cmVnaWQo cmVhbGdpZCxyZWFsZ2lkKSkKLSAJICBlcnIgfD0gMjsKLQotICAgIHJldHVybihlcnIpOwotCi0j ZWxzZQotI2lmZGVmIFNFVEVVSUQKLSAgICBpbnQgZXJyID0gMDsKLSAgICBpZiAocHJpdnVpZCAh PSAoVUlEX1QpIC0xKQotCWlmIChzZXR1aWQocmVhbHVpZCkpIHsKLQkgICAgZGVidWcoRjEwMSwi c2V0dWlkIGZhaWxlZCIsIiIsZXJybm8pOwotCSAgICBlcnIgfD0gMTsKLQkgICAgZGVidWcoRjEw MSwicnVpZCIsIiIsZ2V0dWlkKCkpOwotCSAgICBkZWJ1ZyhGMTAxLCJldWlkIiwiIixnZXRldWlk KCkpOwotCX0KLSAgICBkZWJ1ZyhGMTAxLCJzZXR1aWQiLCIiLHJlYWx1aWQpOwotICAgIGlmIChw cml2Z2lkICE9IChHSURfVCkgLTEpCi0gICAgICAgIGlmIChzZXRnaWQocmVhbGdpZCkpIHsKLQkg ICAgZGVidWcoRjEwMSwic2V0Z2lkIGZhaWxlZCIsIiIsZXJybm8pOwotCSAgICBlcnIgfD0gMjsK LQkgICAgZGVidWcoRjEwMSwicmdpZCIsIiIsZ2V0Z2lkKCkpOwotCSAgICBkZWJ1ZyhGMTAxLCJl Z2lkIiwiIixnZXRlZ2lkKCkpOwotCX0KLSAgICBkZWJ1ZyhGMTAxLCJzZXRnaWQiLCIiLHJlYWxn aWQpOwotICAgIHJldHVybihlcnIpOwotI2Vsc2UKLSAgICAvKiBFYXN5IHdheSBvZiB1c2luZyBz ZXR1aWQoKS9zZXRnaWQoKSBpbnN0ZWFkIG9mIHNldHJldWlkKCkvc2V0cmVnaWQoKS4qLwotICAg IHJldHVybihwcml2X29mZigpKTsKLSNlbmRpZiAvKiBTRVRFVUlEICovCi0jZW5kaWYgLyogU0VU UkVVSUQgKi8KLSNlbHNlCi0gICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIEhBVkVfTE9DS0RFViAq LwotfQotCi0vKiBQIFIgSSBWIF8gTyBQIE4gIC0tICBGb3Igb3BlbmluZyBwcm90ZWN0ZWQgZmls ZXMgb3IgZGV2aWNlcy4gKi8KLQotaW50Ci1wcml2X29wbihuYW1lLCBtb2RlcykgY2hhciAqbmFt ZTsgaW50IG1vZGVzOyB7Ci0gICAgaW50IHg7Ci0gICAgcHJpdl9vbigpOwkJCQkvKiBUdXJuIHBy aXZpbGVnZXMgb24gKi8KLSAgICBkZWJ1ZyhGMTExLCJwcml2X29wbiIsbmFtZSxtb2Rlcyk7Ci0g ICAgZXJybm8gPSAwOwotICAgIHggPSBvcGVuKG5hbWUsIG1vZGVzKTsJCS8qIFRyeSB0byBvcGVu IHRoZSBkZXZpY2UgKi8KLSAgICBkZWJ1ZyhGMTAxLCJwcml2X29wbiByZXN1bHQiLCIiLHgpOwot ICAgIGRlYnVnKEYxMDEsInByaXZfb3BuIGVycm5vIiwiIixlcnJubyk7Ci0gICAgcHJpdl9vZmYo KTsJCQkJLyogVHVybiBwcml2aWxlZ2VzIG9mZiAqLwotICAgIHJldHVybih4KTsJCQkJLyogUmV0 dXJuIG9wZW4ncyByZXR1cm4gY29kZSAqLwotfQotCi0vKiAgUCBSIEkgViBfIEMgSCBLICAtLSAg Q2hlY2sgcHJpdmlsZWdlcy4gICovCi0KLS8qICBUcnkgdG8gdHVybiB0aGVtIG9mZi4gIElmIHR1 cm5pbmcgdGhlbSBvZmYgZGlkIG5vdCBzdWNjZWVkLCBjYW5jZWwgdGhlbSAqLwotCi1pbnQKLXBy aXZfY2hrKCkgewotICAgIGludCB4LCB5ID0gMDsKLSAgICB4ID0gcHJpdl9vZmYoKTsJCQkvKiBU dXJuIG9mZiBwcml2cy4gKi8KLSAgICBpZiAoeCAhPSAwIHx8IGdldHVpZCgpID09IHByaXZ1aWQg fHwgZ2V0ZXVpZCgpID09IHByaXZ1aWQpCi0gICAgICB5ID0gcHJpdl9jYW4oKTsKLSAgICBpZiAo eCAhPSAwIHx8IGdldGdpZCgpID09IHByaXZnaWQgfHwgZ2V0ZWdpZCgpID09IHByaXZnaWQpCi0g ICAgICB5ID0geSB8IHByaXZfY2FuKCk7Ci0gICAgcmV0dXJuKHkpOwotfQotCi1VSURfVAotcmVh bF91aWQoKSB7Ci0gICAgcmV0dXJuKHJlYWx1aWQpOwotfQotCi1WT0lECi10dGltb2ZmKCkgewkJ CQkvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0cyAqLwotICAgIC8qIGludCB4eDsgKi8K LS8qCi0gIEFzIG9mIDVBKDE4MyksIHdlIHNldCBTSUdBTFJNIHRvIFNJR19JR04gKHRvIGlnbm9y ZSBhbGFybXMpIHJhdGhlciB0aGFuIHRvCi0gIFNJR19ERkwgKHRvIGNhdGNoIGFsYXJtcywgb3Ig aWYgdGhlcmUgaXMgbm8gaGFuZGxlciwgdG8gZXhpdCkuICBUaGlzIGlzIHRvCi0gIGN1cmUgKG1h c2ssIHJlYWxseSkgYSBkZWVwZXIgcHJvYmxlbSB3aXRoIHN0cmF5IGFsYXJtcyB0aGF0IG9jY3Vy cyBvbiBzb21lCi0gIHN5c3RlbXMsIHBvc3NpYmx5IGhhdmluZyB0byBkbyB3aXRoIHNsZWVwKCks IHRoYXQgY2F1c2VkIGNvcmUgZHVtcHMuICBJdAotICBzaG91bGQgYmUgT0sgdG8gZG8gdGhpcywg YmVjYXVzZSBubyBjb2RlIGluIHRoaXMgbW9kdWxlIHVzZXMgbmVzdGVkIGFsYXJtcy4KLSAgKEJ1 dCB3ZSBzdGlsbCBoYXZlIHRvIHdhdGNoIG91dCBmb3IgU0NSSVBUIGFuZCBESUFMLi4uKQotKi8K LSAgICAvKiB4eCA9ICovIGFsYXJtKDApOwotICAgIC8qIGRlYnVnKEYxMDEsInR0aW1vZmYgYWxh cm0iLCIiLHh4KTsgKi8KLSAgICBpZiAoc2F2YWwpIHsJCQkvKiBSZXN0b3JlIGFueSBwcmV2aW91 cyAqLwotCXNpZ25hbChTSUdBTFJNLHNhdmFsKTsJCS8qIGFsYXJtIGhhbmRsZXIuICovCi0JLyog ZGVidWcoRjEwMSwidHRpbW9mZiBhbGFybSByZXN0b3Jpbmcgc2F2YWwiLCIiLHNhdmFsKTsgKi8K LQlzYXZhbCA9IE5VTEw7Ci0gICAgfSBlbHNlIHsKLQlzaWduYWwoU0lHQUxSTSxTSUdfSUdOKTsJ LyogVXNlZCB0byBiZSBTSUdfREZMICovCi0JLyogZGVidWcoRjEwMCwidHRpbW9mZiBhbGFybSBT SUdfSUdOIiwiIiwwKTsgKi8KLSAgICB9Ci19Ci0KLQotaW50Ci10dF9pc19zZWN1cmUoKSB7CSAg LyogVGVsbHMgd2hldGhlciB0aGUgY3VycmVudCBjb25uZWN0aW9uIGlzIHNlY3VyZSAqLwotCi0g ICAgaWYgKHR0eWZkID09IC0xKQotICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKDAKLSNpZmRl ZiBTU0hCVUlMVElOCi0JfHwgSVNfU1NIKCkKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZk ZWYgQ0tfRU5DUllQVElPTgotCXx8IGNrX3RuX2VuY3J5cHRpbmcoKSAmJiBja190bl9kZWNyeXB0 aW5nKCkKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi0JfHwgdGxz X2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lm ZGVmIFJMT0dDT0RFCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0J fHwgdHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4KLSNl bmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNlbmRp ZiAvKiBSTE9HQ09ERSAqLwotCSkKLSAgICAgIHJldHVybigxKTsKLSAgICByZXR1cm4oMCk7Ci19 Ci0KLSNpZmRlZiBDS19SRURJUgotICAKLS8qIEV4dGVybmFsIHByb3RvY29sIGhhbmRsZXIgcGFy YW1ldGVycyBmcm9tIGNrdXVzMy5jICovCi1leHRlcm4gaW50IGV4cF9oYW5kbGVyLCBleHBfc3Rk ZXJyLCBleHBfdGltbzsKLQotI2lmZGVmIFNFTEVDVAotI2lmZGVmIE5FVFBUWQotCi0vKiBUaGUg cmlnaHQgc2l6ZSBpcyAyNDU3NiAqLwotCi0jaWZuZGVmIFBUWV9QQlVGX1NJWkUJCQkvKiBTaXpl IG9mIGJ1ZmZlciB0byByZWFkIGZyb20gcHR5ICovCi0jZGVmaW5lIFBUWV9QQlVGX1NJWkUgMjQ1 NzYJCS8qIGFuZCB3cml0ZSB0byBuZXQuICovCi0jZW5kaWYJLyogUFRZX1BCVUZfU0laRSAqLwot Ci0jaWZuZGVmIFBUWV9UQlVGX1NJWkUJCQkvKiBTaXplIG9mIGJ1ZmZlciB0byByZWFkIGZyb20g bmV0ICovCi0jZGVmaW5lIFBUWV9UQlVGX1NJWkUgMjQ1NzYJCS8qIGFuZCB3cml0ZSB0byBwdHku ICovCi0jZW5kaWYJLyogUFRZX1RCVUZfU0laRSAqLwotCi0jaWZkZWYgT19OREVMQVkJCQkJLyog V2hldGhlciB0byB1c2Ugbm9uYmxvY2tpbmcgKi8KLSNpZm5kZWYgUFRZX05PX05ERUxBWQkJCS8q IHJlYWRzIG9uIHRoZSBwc2V1ZG90ZXJtaW5hbCAqLwotI2lmbmRlZiBQVFlfVVNFX05ERUxBWQot I2RlZmluZSBQVFlfVVNFX05ERUxBWQotI2VuZGlmCS8qIFBUWV9VU0VfTkRFTEFZICovCi0jZW5k aWYJLyogUFRZX05PX05ERUxBWSAqLwotI2VuZGlmCS8qIE9fTkRFTEFZICovCi0KLSNpZm5kZWYg SEFWRV9PUEVOUFRZCi0jaWZuZGVmIFVTRV9DS1VQVFlfQwotI2RlZmluZSBVU0VfQ0tVUFRZX0MK LSNlbmRpZiAvKiBVU0VfQ0tVUFRZX0MgKi8KLSNlbmRpZiAvKiBIQVZFX09QRU5QVFkgKi8KLQot I2lmZGVmIEhBVkVfT1BFTlBUWQotI2luY2x1ZGUgPHB0eS5oPgotI2VuZGlmCi0KLVZPSUQKLXB0 eV9tYWtlX3JhdyhmZCkgaW50IGZkOyB7Ci0gICAgaW50IHggPSAtMjMsIGk7Ci0KLSNpZmRlZiBC U0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCAqLwotICAgIHN0cnVjdCB0ZXJtaW9zIHRwOwotI2Vsc2UK LSNpZmRlZiBBVFRTVgkJCQkvKiBBVCZUIFVOSVggKi8KLSNpZmRlZiBDS19BTlNJQwotICAgIHN0 cnVjdCB0ZXJtaW8gdHAgPSB7MH07Ci0jZWxzZQotICAgIHN0cnVjdCB0ZXJtaW8gdHA7Ci0jZW5k aWYJLyogQ0tfQU5TSUMgKi8KLSNlbHNlCi0gICAgc3RydWN0IHNndHR5YiB0cDsJCQkvKiBUcmFk aXRpb25hbCAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogQlNENDRPUlBPU0lYICov Ci0KLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgZmQiLCIiLGZkKTsKLSAgICBlcnJubyA9 IDA7Ci0KLSNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCAqLwotICAgIHggPSB0Y2dldGF0 dHIoZmQsJnRwKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgdGNnZXRhdHRyIiwiIix4 KTsKLSNlbHNlCi0jaWZkZWYgQVRUU1YJCQkJLyogQVQmVCBVTklYICovCi0gICAgeCA9IGlvY3Rs KGZkLFRDR0VUQSwmdHApOwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBUQ0dFVEEgaW9j dGwiLCIiLHgpOwotI2Vsc2UKLSAgICB4ID0gZ3R0eShmZCwmdHApOwotICAgIGRlYnVnKEYxMDEs InB0eV9tYWtlX3JhdyB0dHR5IiwiIix4KTsKLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8q IEJTRDQ0T1JQT1NJWCAqLwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBHRVQgZXJybm8i LCIiLGVycm5vKTsKLQotI2lmZGVmIFVTRV9DRk1BS0VSQVcKLSAgICBlcnJubyA9IDA7Ci0gICAg Y2ZtYWtlcmF3KCZ0cCk7Ci0gICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IGNmbWFrZXJhdyBl cnJubyIsIiIsZXJybm8pOwotI2Vsc2UgIC8qIFVTRV9DRk1BS0VSQVcgKi8KLQotI2lmZGVmIENP TU1FTlQKLQotLyogVGhpcyB2ZXJ5IHNpbXBsZSB2ZXJzaW9uIHJlY29tbWVuZGVkIGJ5IFNlcmcg SWFrb2xldiBkb2Vzbid0IHdvcmsgKi8KLQotICAgIHRwLmNfbGZsYWcgJj0gfihFQ0hPfElDQU5P TnxJRVhURU58SVNJRyk7Ci0gICAgdHAuY19pZmxhZyAmPSB+KEJSS0lOVHxJQ1JOTHxJTlBDS3xJ U1RSSVB8SVhPTik7Ci0gICAgdHAuY19jZmxhZyAmPSB+KENTSVpFfFBBUkVOQik7Ci0gICAgdHAu Y19jZmxhZyB8PSBDUzg7Ci0gICAgdHAuY19vZmxhZyAmPSB+KE9QT1NUKTsKLSAgICB0cC5jX2Nj W1ZNSU5dID0gMTsKLSAgICB0cC5jX2NjW1ZUSU1FXSA9IDA7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJw dHlfbWFrZV9yYXcgMSBjX2NjW10gTkNDUyIsIiIsTkNDUyk7Ci0gICAgZGVidWcoRjEwMSwicHR5 X21ha2VfcmF3IDEgaWZsYWdzIiwiIix0cC5jX2lmbGFnKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlf bWFrZV9yYXcgMSBvZmxhZ3MiLCIiLHRwLmNfb2ZsYWcpOwotICAgIGRlYnVnKEYxMDEsInB0eV9t YWtlX3JhdyAxIGxmbGFncyIsIiIsdHAuY19sZmxhZyk7Ci0gICAgZGVidWcoRjEwMSwicHR5X21h a2VfcmF3IDEgY2ZsYWdzIiwiIix0cC5jX2NmbGFnKTsKLQotI2Vsc2UKLSNpZmRlZiBDT01NRU5U Ci0vKgotICBJbiB0aGlzIHZlcnNpb24gd2UgdW5zZXQgZXZlcnl0aGluZyBhbmQgdGhlbiBzZXQg b25seSB0aGUKLSAgYml0cyB3ZSBrbm93IHdlIG5lZWQuCi0qLwotICAgIC8qIGlmbGFncyAqLwot ICAgIHRwLmNfaWZsYWcgPSAwTDsKLSAgICB0cC5jX2lmbGFnIHw9IElHTkJSSzsKLSNpZmRlZiBJ TUFYQkVMCi0gICAgdHAuY19pZmxhZyB8PSBJTUFYQkVMOwotI2VuZGlmIC8qIElNQVhCRUwgKi8K LQotICAgIC8qIG9mbGFncyAqLwotICAgIHRwLmNfb2ZsYWcgPSAwTDsKLQotICAgIC8qIGxmbGFn cyAqLwotICAgIHRwLmNfbGZsYWcgPSAwTDsKLSNpZmRlZiBOT0tFUk5JTkZPCi0gICAgdHAuY19s ZmxhZyB8PSBOT0tFUk5JTkZPOwotI2VuZGlmCS8qIE5PS0VSTklORk8gKi8KLQotICAgIC8qIGNm bGFncyAqLwotICAgIHRwLmNfY2ZsYWcgPSAwTDsKLSAgICB0cC5jX2NmbGFnIHw9IENTOHxDUkVB RDsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBOQ0NTOyBpKyspIHsJLyogTm8gc3BlY2lhbCBjaGFy YWN0ZXJzICovCi0JdHAuY19jY1tpXSA9IDA7Ci0gICAgfQotI2lmZGVmIFZNSU4KLSAgICB0cC5j X2NjW1ZNSU5dID0gMTsJCQkvKiBCdXQgYWx3YXlzIHdhaXQgZm9yIGlucHV0ICovCi0jZW5kaWYJ LyogVk1JTiAqLwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAyIGNfY2NbXSBOQ0NTIiwi IixOQ0NTKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBpZmxhZ3MiLCIiLHRwLmNf aWZsYWcpOwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAyIG9mbGFncyIsIiIsdHAuY19v ZmxhZyk7Ci0gICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDIgbGZsYWdzIiwiIix0cC5jX2xm bGFnKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBjZmxhZ3MiLCIiLHRwLmNfY2Zs YWcpOwotCi0jZWxzZSAgLyogQ09NTUVOVCAqLwotLyoKLSAgSW4gdGhpcyB2ZXJzaW9uIHdlIHNl dCBvciB1bnNldCBldmVyeSBzaW5nbGUgZmxhZyBleHBsaWNpdGx5LiAgSXQgd29ya3MgYQotICBi aXQgYmV0dGVyIHRoYW4gdGhlIHNpbXBsZSB2ZXJzaW9uIGp1c3QgYWJvdmUsIGJ1dCBpdCdzIHN0 aWxsIGZhciBmcm9tCi0gIGFkZXF1YXRlLgotKi8KLSAgICAvKiBpZmxhZ3MgKi8KLSAgICB0cC5j X2lmbGFnICY9IH4oUEFSTVJLfElTVFJJUHxCUktJTlR8SU5MQ1J8SUdOQ1J8SUNSTkwpOwotICAg IHRwLmNfaWZsYWcgJj0gfihJTlBDS3xJR05QQVJ8SVhBTll8SVhPTnxJWE9GRik7Ci0gICAgdHAu Y19pZmxhZyB8PSBJR05CUks7Ci0jaWZkZWYgSU1BWEJFTAotI2lmZGVmIENPTU1FTlQKLSAgICB0 cC5jX2lmbGFnIHw9IElNQVhCRUw7Ci0jZWxzZQotICAgIHRwLmNfaWZsYWcgJj0gfklNQVhCRUw7 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIElNQVhCRUwgKi8KLSNpZmRlZiBJVUNM QwotICAgIHRwLmNfaWZsYWcgJj0gfklVQ0xDOwotI2VuZGlmIC8qIElVQ0xDICovCi0KLSAgICAv KiBvZmxhZ3MgKi8KLSNpZmRlZiBCU0RMWQotICAgIHRwLmNfb2ZsYWcgJj0gfkJTRExZOwotI2Vu ZGlmIC8qIEJTRExZICovCi0jaWZkZWYgQ1JETFkKLSAgICB0cC5jX29mbGFnICY9IH5DUkRMWTsK LSNlbmRpZiAvKiBDUkRMWSAqLwotI2lmZGVmIEZGRExZCi0gICAgdHAuY19vZmxhZyAmPSB+RkZE TFk7Ci0jZW5kaWYgLyogRkZETFkgKi8KLSNpZmRlZiBOTERMWQotICAgIHRwLmNfb2ZsYWcgJj0g fk5MRExZOwotI2VuZGlmIC8qIE5MRExZICovCi0jaWZkZWYgVEFCRExZCi0gICAgdHAuY19vZmxh ZyAmPSB+VEFCRExZOwotI2VuZGlmIC8qIFRBQkRMWSAqLwotI2lmZGVmIFZURExZCi0gICAgdHAu Y19vZmxhZyAmPSB+VlRETFk7Ci0jZW5kaWYgLyogVlRETFkgKi8KLSNpZmRlZiBPRkRFTAotICAg IHRwLmNfb2ZsYWcgJj0gfk9GREVMOwotI2VuZGlmIC8qIE9GREVMICovCi0jaWZkZWYgT0ZJTEwK LSAgICB0cC5jX29mbGFnICY9IH5PRklMTDsKLSNlbmRpZiAvKiBPRklMTCAqLwotI2lmZGVmIE9M Q1VDCi0gICAgdHAuY19vZmxhZyAmPSB+T0xDVUM7Ci0jZW5kaWYgLyogT0xDVUMgKi8KLSNpZmRl ZiBDTVNQQVIKLSAgICB0cC5jX29mbGFnICY9IH5DTVNQQVI7Ci0jZW5kaWYgLyogQ01TUEFSICov Ci0gICAgdHAuY19vZmxhZyAmPSB+T1BPU1Q7Ci0jaWZkZWYgT1hUQUJTCi0gICAgdHAuY19vZmxh ZyAmPSB+T1hUQUJTOwotI2VuZGlmIC8qIE9YVEFCUyAqLwotI2lmZGVmIENPTU1FTlQKLSNpZmRl ZiBPTk9DUgotICAgIHRwLmNfb2ZsYWcgJj0gfk9OT0NSOwkJLyogTWF5YmUgc2hvdWxkIGJlIHw9 PyAqLwotICAgIHRwLmNfb2ZsYWcgfD0gT05PQ1I7CQkvKiBtYWtlcyBubyBkaWZmZXJlbmNlIGVp dGhlciB3YXkgKi8KLSNlbmRpZiAvKiBPTk9DUiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNp ZmRlZiBPTk9FT1QKLSAgICB0cC5jX29mbGFnICY9IH5PTk9FT1Q7Ci0jZW5kaWYgLyogT05PRU9U ICovCi0jaWZkZWYgT05MUkVUCi0gICAgdHAuY19vZmxhZyAmPSB+T05MUkVUOwotI2VuZGlmIC8q IE9OTFJFVCAqLwotI2lmZGVmIE9OTENSCi0gICAgdHAuY19vZmxhZyAmPSB+T05MQ1I7Ci0jZW5k aWYgLyogT05MQ1IgKi8KLSNpZmRlZiBPQ1JOTAotICAgIHRwLmNfb2ZsYWcgJj0gfk9DUk5MOwot I2VuZGlmIC8qIE9DUk5MICovCi0KLSAgICAvKiBsZmxhZ3MgKi8KLSAgICB0cC5jX2xmbGFnICY9 IH5FQ0hPOwotI2lmZGVmIEVDSE9FCi0gICAgdHAuY19sZmxhZyAmPSB+RUNIT0U7Ci0jZW5kaWYg LyogRUNIT0UgKi8KLSNpZmRlZiBFQ0hPTkwKLSAgICB0cC5jX2xmbGFnICY9IH5FQ0hPTkw7Ci0j ZW5kaWYgLyogRUNIT05MICovCi0jaWZkZWYgRUNIT1BSVAotICAgIHRwLmNfbGZsYWcgJj0gfkVD SE9QUlQ7Ci0jZW5kaWYgLyogRUNIT1BSVCAqLwotI2lmZGVmIEVDSE9LRQotICAgIHRwLmNfbGZs YWcgJj0gfkVDSE9LRTsKLSNlbmRpZiAvKiBFQ0hPS0UgKi8KLSNpZmRlZiBFQ0hPQ1RMCi0gICAg dHAuY19sZmxhZyAmPSB+RUNIT0NUTDsKLSNlbmRpZiAvKiBFQ0hPQ1RMICovCi0jaWZkZWYgWENB U0UKLSAgICB0cC5jX2xmbGFnICY9IH5YQ0FTRTsKLSNlbmRpZiAvKiBYQ0FTRSAqLwotI2lmZGVm IEFMVFdFUkFTRQotICAgIHRwLmNfbGZsYWcgJj0gfkFMVFdFUkFTRTsKLSNlbmRpZiAvKiBBTFRX RVJBU0UgKi8KLSNpZmRlZiBFWFRQUk9DCi0gICAgdHAuY19sZmxhZyAmPSB+KElDQU5PTnxJU0lH fElFWFRFTnxUT1NUT1B8RkxVU0hPfFBFTkRJTnxFWFRQUk9DKTsKLSNlbHNlCi0gICAgdHAuY19s ZmxhZyAmPSB+KElDQU5PTnxJU0lHfElFWFRFTnxUT1NUT1B8RkxVU0hPfFBFTkRJTik7Ci0jZW5k aWYJLyogRVhUUFJPQyAqLwotI2lmZGVmIE5PS0VSTklORk8KLSAgICB0cC5jX2xmbGFnIHw9IE5P S0VSTklORk87Ci0jZW5kaWYJLyogTk9LRVJOSU5GTyAqLwotI2lmbmRlZiBDT01NRU5UCi0gICAg dHAuY19sZmxhZyAmPSB+Tk9GTFNIOwkJLyogVFJZIElUIFRIRSBPVEhFUiBXQVk/ICovCi0jZWxz ZQotICAgIHRwLmNfbGZsYWcgfD0gTk9GTFNIOwkJLyogTm8sIHRoaXMgd2F5IGlzIHdvcnNlICov Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgLyogY2ZsYWdzICovCi0gICAgdHAuY19jZmxh ZyAmPSB+KENTSVpFfFBBUkVOQnxQQVJPREQpOwotICAgIHRwLmNfY2ZsYWcgfD0gQ1M4fENSRUFE OwotCi0jaWZkZWYgTURNQlVGCi0gICAgdHAuY19jZmxhZyAmPSB+KE1ETUJVRik7Ci0jZWxzZQot I2lmZGVmIENDQVJfT0ZMT1cKLSAgICB0cC5jX2NmbGFnICY9IH4oQ0NBUl9PRkxPVyk7CS8qIHR3 byBuYW1lcyBmb3IgdGhlIHNhbWUgdGhpbmcgKi8KLSNlbmRpZiAvKiBDQ0FSX09GTE9XICovCi0j ZW5kaWYgLyogTURNQlVGICovCi0KLSNpZmRlZiBDQ1RTX09GTE9XCi0gICAgdHAuY19jZmxhZyAm PSB+KENDVFNfT0ZMT1cpOwotI2VuZGlmIC8qIENDVFNfT0ZMT1cgKi8KLSNpZmRlZiBDRFNSX09G TE9XCi0gICAgdHAuY19jZmxhZyAmPSB+KENEU1JfT0ZMT1cpOwotI2VuZGlmIC8qIENEU1JfT0ZM T1cgKi8KLSNpZmRlZiBDRFRSX0lGTE9XCi0gICAgdHAuY19jZmxhZyAmPSB+KENEVFJfSUZMT1cp OwotI2VuZGlmIC8qIENEVFJfSUZMT1cgKi8KLSNpZmRlZiBDUlRTX0lGTE9XCi0gICAgdHAuY19j ZmxhZyAmPSB+KENSVFNfSUZMT1cpOwotI2VuZGlmIC8qIENSVFNfSUZMT1cgKi8KLSNpZmRlZiBD UlRTWE9GRgotICAgIHRwLmNfY2ZsYWcgJj0gfihDUlRTWE9GRik7Ci0jZW5kaWYgLyogQ1JUU1hP RkYgKi8KLSNpZmRlZiBDUlRTQ1RTCi0gICAgdHAuY19jZmxhZyAmPSB+KENSVFNDVFMpOwotI2Vu ZGlmIC8qIENSVFNDVFMgKi8KLSNpZmRlZiBDTE9DQUwKLSAgICB0cC5jX2NmbGFnICY9IH4oQ0xP Q0FMKTsKLSNlbmRpZiAvKiBDTE9DQUwgKi8KLSNpZmRlZiBDU1RPUEIKLSAgICB0cC5jX2NmbGFn ICY9IH4oQ1NUT1BCKTsKLSNlbmRpZiAvKiBDU1RPUEIgKi8KLSNpZmRlZiBIVVBDTAotICAgIHRw LmNfY2ZsYWcgJj0gfihIVVBDTCk7Ci0jZW5kaWYgLyogSFVQQ0wgKi8KLQotICAgIGZvciAoaSA9 IDA7IGkgPCBOQ0NTOyBpKyspIHsJLyogTm8gc3BlY2lhbCBjaGFyYWN0ZXJzICovCi0JdHAuY19j Y1tpXSA9IDA7Ci0gICAgfQotI2lmZGVmIFZNSU4KLSAgICB0cC5jX2NjW1ZNSU5dID0gMTsJCQkv KiBCdXQgYWx3YXlzIHdhaXQgZm9yIGlucHV0ICovCi0jZW5kaWYJLyogVk1JTiAqLwotICAgIGRl YnVnKEYxMDEsInB0eV9tYWtlX3JhdyAzIGNfY2NbXSBOQ0NTIiwiIixOQ0NTKTsKLSAgICBkZWJ1 ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMyBpZmxhZ3MiLCIiLHRwLmNfaWZsYWcpOwotICAgIGRlYnVn KEYxMDEsInB0eV9tYWtlX3JhdyAzIG9mbGFncyIsIiIsdHAuY19vZmxhZyk7Ci0gICAgZGVidWco RjEwMSwicHR5X21ha2VfcmF3IDMgbGZsYWdzIiwiIix0cC5jX2xmbGFnKTsKLSAgICBkZWJ1ZyhG MTAxLCJwdHlfbWFrZV9yYXcgMyBjZmxhZ3MiLCIiLHRwLmNfY2ZsYWcpOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICBlcnJubyA9IDA7Ci0jaWZkZWYg QlNENDRPUlBPU0lYCQkJLyogUE9TSVggKi8KLSAgICB4ID0gdGNzZXRhdHRyKGZkLFRDU0FOT1cs JnRwKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgdGNzZXRhdHRyIiwiIix4KTsKLSNl bHNlCi0jaWZkZWYgQVRUU1YJCQkJLyogQVQmVCBVTklYICovCi0gICAgeCA9IGlvY3RsKGZkLFRD U0VUQSwmdHApOwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBpb2N0bCIsIiIseCk7Ci0j ZWxzZQotICAgIHggPSBzdHR5KGZkLCZ0cCk7CQkJLyogVHJhZGl0aW9uYWwgKi8KLSAgICBkZWJ1 ZyhGMTAxLCJwdHlfbWFrZV9yYXcgc3R0eSIsIiIseCk7Ci0jZW5kaWYgLyogQVRUU1YgKi8KLSNl bmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgZXJy bm8iLCIiLGVycm5vKTsKLQotI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KLX0KLQotc3RhdGljIGlu dAotcHR5X2NoayhmZCkgaW50IGZkOyB7Ci0gICAgaW50IHgsIG4gPSAwOwotICAgIGVycm5vID0g MDsKLSNpZmRlZiBGSU9OUkVBRAotICAgIHggPSBpb2N0bChmZCwgRklPTlJFQUQsICZuKTsJLyog QlNEIGFuZCBtb3N0IG90aGVycyAqLwotICAgIGNrbWFrbXNnKG1zZ2J1Ziw1MDAsCi0JICAgICAi cHR5X2NoayBpb2N0bCBGSU9OUkVBRCBlcnJubz0iLAotCSAgICAgY2tpdG9hKGVycm5vKSwKLQkg ICAgICIgY291bnQ9IiwKLQkgICAgIGNraXRvYShuKSk7Ci0gICAgZGVidWcoRjEwMCxtc2didWYs IiIsMCk7Ci0jZWxzZQotI2lmZGVmIFJEQ0hLCi0gICAgbiA9IHJkY2hrKGZkKTsKLSAgICBkZWJ1 ZyhGMTAxLCJwdHlfY2hrIHJkY2hrIiwiIixuKTsKLSNlbHNlCi0gICAgbiA9IDE7Ci0jZW5kaWYJ LyogUkRDSEsgKi8KLSNlbmRpZgkvKiBGSU9OUkVBRCAqLwotICAgIHJldHVybigobiA+IC0xKSA/ IG4gOiAwKTsKLX0KLQotc3RhdGljIGludAotcHR5X2dldF9zdGF0dXMoZmQscGlkKSBpbnQgZmQ7 IFBJRF9UIHBpZDsgewotICAgIGludCB4LCBzdGF0dXMgPSAtMTsKLSAgICBQSURfVCB3OwotCi0g ICAgZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMgZmQiLCIiLGZkKTsKLSAgICBkZWJ1ZyhGMTAx LCJwdHlfZ2V0X3N0YXR1cyBwaWQiLCIiLHBpZCk7Ci0KLSAgICBpZiAocGV4aXRzdGF0ID4gLTEp Ci0gICAgICByZXR1cm4ocGV4aXRzdGF0KTsKLQotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBOb3Qg b25seSB1bm5lY2Vzc2FyeSBidXQgaGFybWZ1bCAqLwotICAgIGVycm5vID0gMDsKLSAgICB4ID0g a2lsbChwdHlfZm9ya19waWQsMCk7Ci0gICAgZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMga2ls bCB2YWx1ZSIsIiIseCk7Ci0gICAgZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMga2lsbCBlcnJu byIsIiIsZXJybm8pOwotICAgIGlmICh4ID4gLTEgJiYgZXJybm8gIT0gRVNSQ0gpCi0gICAgICBy ZXR1cm4oLTEpOwkJCS8qIEZvcmsgc3RpbGwgdGhlcmUgKi8KLSAgICAvKiBGb3JrIHNlZW1zIHRv IGJlIGdvbmUgKi8KLSNlbmRpZgkvKiBDT01NRU5UICovCi0KLSAgICBlcnJubyA9IDA7Ci0gICAg eCA9IHdhaXRwaWQocHR5X2ZvcmtfcGlkLCZzdGF0dXMsV05PSEFORyk7Ci0gICAgZGVidWcoRjEx MSwicHR5X2dldF9zdGF0dXMgd2FpdHBpZCIsY2tpdG9hKGVycm5vKSx4KTsKLSAgICBpZiAoeCA8 PSAwICYmIGVycm5vID09IDApIHsKLQlkZWJ1ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlk IHJldHVybiIsIiIsLTEpOwotCXJldHVybigtMSk7Ci0gICAgfQotICAgIGlmICh4ID4gMCkgewot CWlmICh4ICE9IHB0eV9mb3JrX3BpZCkKLQkgIGRlYnVnKEYxMDEsCi0JCSJwdHlfZ2V0X3N0YXR1 cyB3YWl0cGlkIHBpZCBkb2Vzbid0IG1hdGNoIiwiIixwdHlfZm9ya19waWQpOyAKLQlkZWJ1ZyhG MTAxLCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlkIHN0YXR1cyIsIiIsc3RhdHVzKTsKLQlkZWJ1ZyhG MTAxLCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlkIGVycm5vIiwiIixlcnJubyk7Ci0JaWYgKFdJRkVY SVRFRChzdGF0dXMpKSB7Ci0JICAgIGRlYnVnKEYxMDAsInB0eV9nZXRfc3RhdHVzIFdJRkVYSVRF RCIsIiIsMCk7Ci0JICAgIHN0YXR1cyA9IFdFWElUU1RBVFVTKHN0YXR1cyk7Ci0JICAgIGRlYnVn KEYxMDEsInB0eV9nZXRfc3RhdHVzIGZvcmsgZXhpdCBzdGF0dXMiLCIiLHN0YXR1cyk7Ci0jaWZk ZWYgQ09NTUVOVAotCSAgICBlbmRfcHR5KCk7Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCSAgICBj bG9zZShmZCk7Ci0JICAgIHBleGl0c3RhdCA9IHN0YXR1czsKLQl9IGVsc2UgewotCSAgICBkZWJ1 ZyhGMTAwLCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlkIHVuZXhwZWN0ZWQgc3RhdHVzIiwiIiwwKTsK LQl9Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInB0eV9nZXRfc3RhdHVzIHJldHVybiBzdGF0dXMi LCIiLHN0YXR1cyk7Ci0gICAgcmV0dXJuKHN0YXR1cyk7Ci19Ci0KLS8qIHQgdCBwIHQgeSBjIG0g ZCAgLS0gIFJ1biBjb21tYW5kIG9uIHB0eSBhbmQgZm9yd2FyZCB0byBuZXQgKi8KLQotLyoKLSAg TmVlZGVkIGZvciBydW5uaW5nIGV4dGVybmFsIHByb3RvY29scyBvbiBzZWN1cmUgY29ubmVjdGlv bnMuCi0gIEZvciBleGFtcGxlLCBpZiBDLUtlcm1pdCBoYXMgbWFkZSBhbiBTU0wvVExTIG9yIEtl cmJlcm9zIFRlbG5ldAotICBjb25uZWN0aW9uLCBhbmQgdGhlbiBuZWVkcyB0byB0cmFuc2ZlciBh IGZpbGUgd2l0aCBabW9kZW0sIHdoaWNoIGlzCi0gIGFuIGV4dGVybmFsIHByb2dyYW0sIHRoaXMg cm91dGluZSByZWFkcyBabW9kZW0ncyBvdXRwdXQsIGVuY3J5cHRzIGl0LAotICBhbmQgdGhlbiBm b3J3YXJkcyBpdCBvdXQgdGhlIGNvbm5lY3Rpb24sIGFuZCByZWFkcyB0aGUgZW5jcnlwdGVkIGRh dGEKLSAgc3RyZWFtIGNvbWluZyBpbiBmcm9tIHRoZSBjb25uZWN0aW9uLCBkZWNyeXB0cyBpdCwg YW5kIGZvcndhcmRzIGl0IHRvCi0gIFptb2RlbS4KLQotICBXb3JrcyBsaWtlIGEgVENQL0lQIHBv cnQgZm9yd2FyZGVyIGV4Y2VwdCBvbmUgZW5kIGlzIGEgcHR5IHJhdGhlcgotICB0aGFuIGEgc29j a2V0LCB3aGljaCBpbnRyb2R1Y2VzIHNvbWUgY29tcGxpY2F0aW9uczoKLQotICAgLiBPbiBtb3N0 IHBsYXRmb3Jtcywgc2VsZWN0KCkgYWx3YXlzIGluZGljYXRlcyB0aGUgb3V0cHV0IHNpZGUgb2YK LSAgICAgdGhlIHB0eSBoYXMgY2hhcmFjdGVycyB3YWl0aW5nIHRvIGJlIHJlYWQsIGV2ZW4gd2hl biBpdCBkb2Vzbid0LAotICAgICBldmVuIHdoZW4gdGhlIHB0eSBwcm9jZXNzIGhhcyBhbHJlYWR5 IGV4aXRlZC4KLQotICAgLiBOb25ibG9ja2luZyByZWFkcyBtdXN0IGJlIHVzZWQgb24gdGhlIHB0 eSwgYmVjYXVzZSB0aGVyZSBpcyBubwotICAgICB3YXkgb24gY2VydGFpbiBwbGF0Zm9ybXMgKGUu Zy4gTmV0QlNEKSB0byBmaW5kIG91dCBob3cgbWFueSBjaGFyYWN0ZXJzCi0gICAgIGFyZSBhdmFp bGFibGUgdG8gYmUgcmVhZCAodGhlIEZJT05SRUFEIGlvY3RsIGFsd2F5cyBzYXlzIDApLiAgVGhl IGNvZGUKLSAgICAgYWxzbyBhbGxvd3MgZm9yIGJsb2NraW5nIHJlYWRzIChpZiBPX05ERUxBWSBh bmQgT19OT05CTE9DSyBhcmUgbm90Ci0gICAgIGRlZmluZWQsIG9yIGlmIFBUWV9OT19OREVMQVkg aXMgZGVmaW5lZCksIGJ1dCBvbiBzb21lIHBsYXRmb3JtcyB0aGlzIGNhbgotICAgICByZXN1bHQg aW4gc2luZ2xlLWJ5dGUgcmVhZHMgYW5kIHdyaXRlcyAoTmV0QlNEIGFnYWluKS4KLQotICAgLiBU ZXN0aW5nIGZvciAiRU9GIiBvbiB0aGUgcHR5IGlzIHByb2JsZW1hdGljLiAgc2VsZWN0KCkgbmV2 ZXIgZ2l2ZXMKLSAgICAgYW55IGluZGljYXRpb24uICBBZnRlciB0aGUgcHR5IHByb2Nlc3MgaGFz IGV4aXRlZCBhbmQgdGhlIGZvcmsgaGFzCi0gICAgIGRpc2FwcGVhcmVkLCByZWFkKCkgY2FuIHN0 aWxsIHJldHVybiB3aXRoIDAgYnl0ZXMgcmVhZCBidXQgd2l0aG91dCBhbgotICAgICBlcnJvciAo TmV0QlNEKTsgbm8ga25vd24gdGVzdCBvbiB0aGUgcHR5IGZpbGUgZGVzY3JpcHRvciB3aWxsIGlu ZGljYXRlCi0gICAgIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgVGhlIHByb2Nlc3MgSUQg b2YgdGhlIHB0eSBmb3JrIGNhbiBiZQotICAgICB0ZXN0ZWQgb24gc29tZSBwbGF0Zm9ybXMgKE5l dEJTRCwgbHVja2lseSkgYnV0IG5vdCBvdGhlcnMgKFNvbGFyaXMsCi0gICAgIExpbnV4KS4KLQot ICBPbiB0aGUgbmV0d29yayBzaWRlLCB3ZSB1c2UgdHRpbmMoKSBhbmQgdHRvYygpLCB3aGljaCwg Zm9yIG5ldHdvcmsgCi0gIGNvbm5lY3Rpb25zLCBoYW5kbGUgYW55IGFjdGl2ZSBzZWN1cml0eSBt ZXRob2RzLgotCi0gIENhbGwgd2l0aCBzID0gY29tbWFuZC4KLSAgUmV0dXJucyAwIG9uIGZhaWx1 cmUsIDEgb24gc3VjY2Vzcy4KLSAgZmRjIC0gRGVjZW1iZXIgMjAwNiAtIEF1Z3VzdCAyMDA3Lgot Ci0gIE5PVEU6IFRoaXMgY29kZSBkZWZhdWx0cyB0byBub25ibG9ja2luZyByZWFkcyBpZiBPX05E RUxBWSBvciBPX05PTkJMT0NLIGFyZQotICBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZXMsIHdo aWNoIHNob3VsZCBiZSB0cnVlIG9mIGV2ZXJ5IHJlY2VudCBVbml4Ci0gIHBsYXRmb3JtLiAgSWYg dGhpcyBjYXVzZXMgdHJvdWJsZSBzb21ld2hlcmUsIGRlZmluZSBQVFlfTk9fTkRFTEFZLCBlLmcu IHdoZW4KLSAgYnVpbGRpbmcgQy1LZXJtaXQ6Ci0KLSAgICB0b3VjaCBja3V0aW8uYwotICAgIG1h a2UgcGxhdGZvcm1uYW1lIEtGTEFHUz0tRFBUWV9OT19OT0RFTEFZCi0qLwotc3RhdGljIGludCBo YXZlX3B0eSA9IDA7CQkvKiBEbyB3ZSBoYXZlIGEgcHR5PyAqLwotCi1zdGF0aWMgU0lHVFlQICgq c2F2ZV9zaWdjaGxkKSgpID0gTlVMTDsJLyogRm9yIGNhdGNoaW5nIFNJR0NITEQgKi8KLQotc3Rh dGljIFZPSUQKLXNpZ2NobGRfaGFuZGxlcihzaWcpIGludCBzaWc7IHsKLSAgICBoYXZlX3B0eSA9 IDA7CQkJLyogV2UgZG9uJ3QgaGF2ZSBhIHB0eSAqLwotI2lmZGVmIERFQlVHCi0gICAgaWYgKHNh dmVfc2lnY2hsZCkgewotCShWT0lEKSBzaWduYWwoU0lHQ0hMRCxzYXZlX3NpZ2NobGQpOwotCXNh dmVfc2lnY2hsZCA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAw LCIqKioqKioqKioqKioqKiIsIiIsMCk7Ci0JZGVidWcoRjEwMCwiU0lHQ0hMRCBjYXVnaHQiLCIi LDApOwotCWRlYnVnKEYxMDAsIioqKioqKioqKioqKioqIiwiIiwwKTsKLSAgICB9Ci0jZW5kaWYJ LyogREVCVUcgKi8KLX0KLSNkZWZpbmUgSEFWRV9JQUMgMQotI2RlZmluZSBIQVZFX0NSICAyCi0K LWludAotdHRwdHljbWQocykgY2hhciAqczsgewotICAgIENIQVIgdGJ1ZltQVFlfVEJVRl9TSVpF XTsJCS8qIFJlYWQgZnJvbSBuZXQsIHdyaXRlIHRvIHB0eSAqLwotICAgIGludCB0YnVmX2F2YWls ID0gMDsJCQkvKiBQb2ludGVycyBmb3IgdGJ1ZiAqLwotICAgIGludCB0YnVmX3dyaXR0ZW4gPSAw OwotICAgIHN0YXRpYyBpbnQgaW5fc3RhdGUgPSAwOwkJLyogRm9yIFRFTE5FVCBJQUMgYW5kIE5W VCBpbiAqLwotICAgIHN0YXRpYyBpbnQgb3V0X3ByZXYgPSAwOwkJLyogU2ltcGxlciBzY2hlbWUg Zm9yIG91dCAqLwotCi0gICAgQ0hBUiBwYnVmW1BUWV9QQlVGX1NJWkVdOwkJLyogUmVhZCBmcm9t IHB0eSwgd3JpdGUgdG8gbmV0ICovCi0gICAgQ0hBUiBkYnVmW1BUWV9QQlVGX1NJWkUgKyBQVFlf UEJVRl9TSVpFICsgMV07IC8qIERvdWJsZS1zaXplIGJ1ZmZlciAqLwotICAgIGludCBwYnVmX2F2 YWlsID0gMDsJCQkvKiBQb2ludGVycyBmb3IgcGJ1ZiAqLwotICAgIGludCBwYnVmX3dyaXR0ZW4g PSAwOwotCi0gICAgaW50IHB0eWZkID0gLTE7CQkJLyogUHR5IGZpbGUgZGVzY3JpcHRvciAqLwot ICAgIGludCBoYXZlX25ldCA9IDA7CQkJLyogV2UgaGF2ZSBhIG5ldHdvcmsgY29ubmVjdGlvbiAq LwotICAgIGludCBwdHlfZXJyID0gMDsJCQkvKiBHb3QgZXJyb3Igb24gcHR5ICovCi0gICAgaW50 IG5ldF9lcnIgPSAwOwkJCS8qIEdvdCBlcnJvciBvbiBuZXQgKi8KLSAgICBpbnQgc3RhdHVzID0g LTE7CQkJLyogUHR5IHByb2Nlc3MgZXhpdCBzdGF0dXMgKi8KLSAgICBpbnQgcmMgPSAwOwkJCQkv KiBPdXIgcmV0dXJuIGNvZGUgKi8KLQotICAgIGludCB4MSA9IDAsIHgyID0gMDsJCQkvKiBXb3Jr ZXJzLi4uICovCi0gICAgaW50IGMsIG4sIG0sIHQsIHg7CQkJLyogV29ya2VycyAqLwotCi0gICAg bG9uZyBzZWNvbmRzX3RvX3dhaXQgPSAwTDsJCS8qIHNlbGVjdCgpIHRpbWVvdXQgKi8KLSAgICBz dHJ1Y3QgdGltZXZhbCB0diwgKnR2MjsJCS8qIEZvciBzZWxlY3QoKSAqLwotI2lmZGVmIElOVFNF TEVDVAotICAgIGludCBpbiwgb3V0LCBlcnI7CQkJLyogRm9yIHNlbGVjdCgpICovCi0jZWxzZQot ICAgIGZkX3NldCBpbiwgb3V0LCBlcnI7Ci0jZW5kaWYgLyogSU5UU0VMRUNUICovCi0gICAgaW50 IG5mZHMgPSAwOwkJCS8qIEZvciBzZWxlY3QoKSAqLwotCi0gICAgaW50IHBzZXQgPSAwLCB0c2V0 ID0gMCwgcG5vdHNldCA9IDAsIHRub3RzZXQgPSAwOyAvKiBzdGF0cy9kZWJ1Z2dpbiBvbmx5ICov Ci0gICAgaW50IHJlYWRfbmV0X2J5dGVzID0gMDsJCS8qIFN0YXRzICovCi0gICAgaW50IHdyaXRl X25ldF9ieXRlcyA9IDA7CQkvKiBTdGF0cyAqLwotICAgIGludCByZWFkX3B0eV9ieXRlcyA9IDA7 CQkvKiBTdGF0cyAqLwotICAgIGludCB3cml0ZV9wdHlfYnl0ZXMgPSAwOwkJLyogU3RhdHMgKi8K LSAgICBpbnQgaXNfdG4gPSAwOwkJCS8qIFRFTE5FVCBwcm90b2NvbCBpcyBhY3RpdmUgKi8KLQot ICAgIGludCBtYXN0ZXJmZCA9IC0xOwotICAgIGludCBzbGF2ZWZkID0gLTE7Ci0jaWZuZGVmIFVT RV9DS1VQVFlfQwotICAgIHN0cnVjdCB0ZXJtaW9zIHRlcm07Ci0gICAgc3RydWN0IHdpbnNpemUg dHdpbjsKLSAgICBzdHJ1Y3Qgc3RyaW5nYXJyYXkgKiBxOwotICAgIGNoYXIgKiogYXJncyA9IE5V TEw7Ci0jZW5kaWYgLyogVVNFX0NLVVBUWV9DICovCi0KLSAgICBpbl9zdGF0ZSA9IDA7CQkJLyog Tm8gcHJldmlvdXMgY2hhcmFjdGVyIHlldCAqLwotCi0gICAgaWYgKHR0eWZkID09IC0xKSB7Ci0J cHJpbnRmKCI/U29ycnksIGNvbW11bmljYXRpb24gY2hhbm5lbCBpcyBub3Qgb3BlblxuIik7Ci0J cmV0dXJuKDApOwotICAgIH0gZWxzZSB7Ci0JaGF2ZV9uZXQgPSAxOwotICAgIH0KLSAgICBpZiAo bm9wdXNoKSB7Ci0JZGVidWcoRjEwMCwidHRwdHljbWQgZmFpbDogbm9wdXNoIiwiIiwwKTsKLQly ZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmICghcykgcyA9ICIiOwkJCS8qIERlZmVuc2UgZGUgYm9n dXMgYXJndW1lbnRzICovCi0gICAgaWYgKCEqcykgcmV0dXJuKDApOwotICAgIHBleGl0c3RhdCA9 IC0xOwkJCS8qIEZvcmsgcHJvY2VzcyBleGl0IHN0YXR1cyAqLwotCi0jaWZkZWYgVE5DT0RFCi0g ICAgaXNfdG4gPSAoeGxvY2FsICYmIG5ldGNvbm4gJiYgSVNfVEVMTkVUKCkpIHx8IC8qIFRlbG5l dCBwcm90b2NvbCBhY3RpdmUgKi8KLQkgICAgKCF4bG9jYWwgJiYgc3N0ZWxuZXQpOwotI2VuZGlm IC8qIFROQ09ERSAqLwotCi0gICAgZGVidWcoRjExMCwidHRwdHljbWQgY29tbWFuZCIscywwKTsK LSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCB0dHlmZCIsIiIsdHR5ZmQpOwotICAgIGRlYnVnKEYx MDEsInR0cHR5Y21kIGlzX3RuIiwiIixpc190bik7Ci0gICAgZGVidWcoRjEwMSwidHRwdHljbWQg Y2tlcm1pdCBwaWQiLCIiLGdldHBpZCgpKTsKLQotI2lmZGVmIFVTRV9DS1VQVFlfQwotICAgIC8q IENhbGwgY2t1cHR5LmMgbW9kdWxlIHRvIGdldCBhbmQgc2V0IHVwIHRoZSBwdHkgZm9yayAqLwot ICAgIC8qIGZjIDEgPT0gInJ1biBhbiBleHRlcm5hbCBwcm90b2NvbCIgKi8KLSAgICBkZWJ1ZyhG MTAwLCJ0dHB0eWNtZCB1c2luZyBja3VwdHkuYyIsIiIsMCk7Ci0gICAgaWYgKGRvX3B0eSgmcHR5 ZmQscywxKSA8IDApIHsJLyogU3RhcnQgdGhlIGNvbW1hbmQgb24gYSBwdHkgKi8KLQlkZWJ1ZyhG MTAwLCJ0dHB0eWNtZCBkb19wdHkgZmFpbHMiLCIiLDApOwotCXJldHVybigwKTsKLSAgICB9Ci0g ICAgbWFzdGVyZmQgPSBwdHlmZDsKLSAgICBwdHlfbWFzdGVyX2ZkID0gcHR5ZmQ7Ci0jaWZkZWYg Q09NTUVOVAotICAgIHNsYXZlZmQgPSBwdHlfc2xhdmVfZmQ7CQkvKiBUaGlzIGlzIG5vdCB2aXNp YmxlIHRvIHVzICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGRlYnVnKEYxMTEsInR0cHR5 Y21kIHB0eWZkIiwiVVNFX0NLVVBUWV9DIixwdHlmZCk7Ci0gICAgZGVidWcoRjExMSwidHRwdHlj bWQgbWFzdGVyZmQiLCJVU0VfQ0tVUFRZX0MiLG1hc3RlcmZkKTsKLSAgICBkZWJ1ZyhGMTExLCJ0 dHB0eWNtZCBmb3JrIHBpZCIsIlVTRV9DS1VQVFlfQyIscHR5X2ZvcmtfcGlkKTsKLSNpZm5kZWYg U09MQVJJUwotICAgIC8qICJpb2N0bCBpbmFwcHJvcHJpYXRlIG9uIGRldmljZSIgZm9yIHB0eSBt YXN0ZXIgKi8KLSAgICBwdHlfbWFrZV9yYXcobWFzdGVyZmQpOwotI2VuZGlmIC8qIFNPTEFSSVMg Ki8KLQotI2Vsc2UgLyogVVNFX0NLVVBUWV9DICovCi0KLSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNt ZCBPUEVOUFRZIiwiIiwwKTsKLSAgICBpZiAodGNnZXRhdHRyKDAsICZ0ZXJtKSA9PSAtMSkgewkv KiBHZXQgY29udHJvbGxpbmcgdGVybWluYWwncyBtb2RlcyAqLwotCXBlcnJvcigidGNnZXRhdHRy Iik7Ci0JcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAoaW9jdGwoMCwgVElPQ0dXSU5TWiwgKGNo YXIgKikgJnR3aW4pID09IC0xKSB7IC8qIGFuZCB3aW5kb3cgc2l6ZSAqLwotCXBlcnJvcigiaW9j dGwgVElPQ0dXSU5TWiIpOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKG9wZW5wdHkoJm1h c3RlcmZkLCAmc2xhdmVmZCwgTlVMTCwgTlVMTCwgTlVMTCkgPT0gLTEpIHsKLQlkZWJ1ZyhGMTAx LCJ0dHB0eWNtZCBvcGVucHR5IGZhaWxlZCBlcnJubyIsIiIsZXJybm8pOwotCXBlcnJvcigib3Bl bnRweSIpOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwidHRwdHljbWQgb3Bl bnB0eSBtYXN0ZXJmZCIsIiIsbWFzdGVyZmQpOwotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIG9w ZW5wdHkgc2xhdmVmZCIsIiIsc2xhdmVmZCk7Ci0gICAgcHR5X21hc3Rlcl9mZCA9IG1hc3RlcmZk OwotICAgIHB0eV9zbGF2ZV9mZCA9IHNsYXZlZmQ7Ci0gICAgZGVidWcoRjEwMSwidHRwdHljbWQg b3BlbnB0eSBwdHlfbWFzdGVyX2ZkIiwiIixwdHlfbWFzdGVyX2ZkKTsKLQotICAgIC8qIFB1dCBw dHkgbWFzdGVyIGluIHJhdyBtb2RlIGJ1dCBsZXQgZm9ya2VkIGFwcCBjb250cm9sIHRoZSBzbGF2 ZSAqLwotICAgIHB0eV9tYWtlX3JhdyhtYXN0ZXJmZCk7Ci0KLSNpZmRlZiBDT01NRU5UCi0jaWZk ZWYgVElPQ1JFTU9URQotICAgIC8qIFRJT0NSRU1PVEUsMCA9IGRpc2FibGUgYWxsIHRlcm1pbyBw cm9jZXNzaW5nICovCi0gICAgeCA9IGlvY3RsKG1hc3RlcmZkLCBUSU9DUkVNT1RFLCAxKTsKLSAg ICBkZWJ1ZyhGMTExLCJ0dHB0eWNtZCBpb2N0bCBUSU9DUkVNT1RFIixja2l0b2EoeCksZXJybm8p OwotI2VuZGlmCS8qIFRJT0NSRU1PVEUgKi8KLSNpZmRlZiBUSU9DVFRZCi0gICAgLyogVElPQ1RU WSwwID0gZGlzYWJsZSBhbGwgdGVybWlvIHByb2Nlc3NpbmcgKi8KLSAgICB4ID0gaW9jdGwobWFz dGVyZmQsIFRJT0NUVFksIDApOwotICAgIGRlYnVnKEYxMTEsInR0cHR5Y21kIGlvY3RsIFRJT0NU VFkiLGNraXRvYSh4KSxlcnJubyk7Ci0jZW5kaWYJLyogVElPQ1RUWSAqLwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLQotICAgIGhhdmVfcHR5ID0gMTsJCQkvKiBXZSBoYXZlIGFuIG9wZW4gcHR5ICov Ci0gICAgc2F2ZV9zaWdjaGxkID0gc2lnbmFsKFNJR0NITEQsIHNpZ2NobGRfaGFuZGxlcik7IC8q IENhdGNoIGZvcmsgcXVpdCAqLwotCi0gICAgcHR5X2ZvcmtfcGlkID0gZm9yaygpOwkJLyogTWFr ZSBmb3JrIGZvciBleHRlcm5hbCBwcm90b2NvbCAqLwotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21k IHB0eV9mb3JrX3BpZCIsIiIscHR5X2ZvcmtfcGlkKTsKLSAgICBpZiAocHR5X2ZvcmtfcGlkID09 IC0xKSB7Ci0JcGVycm9yKCJmb3JrIik7Ci0JcmV0dXJuKDApOwotICAgIH0gZWxzZSBpZiAocHR5 X2ZvcmtfcGlkID09IDApIHsJLyogSW4gbmV3IGZvcmsgKi8KLQlpbnQgeDsKLQlkZWJ1ZyhGMTAx LCJ0dHB0eWNtZCBuZXcgZm9yayBwaWQiLCIiLGdldHBpZCgpKTsKLQljbG9zZShtYXN0ZXJmZCk7 CQkvKiBTbGF2ZSBxdWFydGVycyBubyBtYXN0ZXJzIGFsbG93ZWQgKi8KLQl4ID0gc2V0c2lkKCk7 Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgbmV3IGZvcmsgc2V0c2lkIiwiIix4KTsKLQlpZiAoeCA9 PSAtMSkgewotCSAgICBwZXJyb3IoInR0cHR5Y21kIHNldHNpZCIpOwotCSAgICBleGl0KDEpOwot CX0KLQlzaWduYWwoU0lHSU5ULFNJR19JR04pOwkJLyogTGV0IHVwcGVyIGZvcmsgY2F0Y2ggdGhp cyAqLwotCQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBUSU9DU0NUVFkKLQkvKiBNYWtlIHB0eSB0 aGUgY29udHJvbGxpbmcgdGVybWluYWwgZm9yIHRoZSBwcm9jZXNzICovCi0JLyogVEhJUyBDQVVT RVMgQU4gSU5GSU5JVEUgU0lHV0lOQ0ggSU5URVJSVVBUIExPT1AgKi8KLQl4ID0gaW9jdGwoc2xh dmVmZCwgVElPQ1NDVFRZLCBOVUxMKTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBUSU9DU0NUVFki LCIiLHgpOwotI2VuZGlmCS8qIFRJT0NTQ1RUWSAqLwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQot CS8qIEluaXRpYWxpemUgc2xhdmUgcHR5IG1vZGVzIGFuZCBzaXplIHRvIHRob3NlIG9mIG91ciB0 ZXJtaW5hbCAqLwotCWlmICh0Y3NldGF0dHIoc2xhdmVmZCwgVENTQU5PVywgJnRlcm0pID09IC0x KSB7Ci0JICAgIHBlcnJvcigidHRwdHljbWQgdGNzZXRhdHRyIik7Ci0JICAgIGV4aXQoMSk7Ci0J fQotCWlmIChpb2N0bChzbGF2ZWZkLCBUSU9DU1dJTlNaLCAmdHdpbikgPT0gLTEpIHsKLQkgICAg cGVycm9yKCJ0dHB0eWNtZCBpb2N0bCIpOwotCSAgICBleGl0KDEpOwotCX0KLSNpZmRlZiBDT01N RU5UCi0jaWZkZWYgVElPQ05PVFRZCi0JLyogRGlzYXNzb2NpYXRlIHRoaXMgcHJvY2VzcyBmcm9t IGl0cyB0ZXJtaW5hbCAqLwotCS8qIFRISVMgSEFTIE5PIEVGRkVDVCAqLwotCXggPSBpb2N0bChz bGF2ZWZkLCBUSU9DTk9UVFksIE5VTEwpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kIFRJT0NOT1RU WSIsIiIseCk7Ci0jZW5kaWYJLyogVElPQ05PVFRZICovCi0jZW5kaWYJLyogQ09NTUVOVCAqLwot Ci0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIFNJR1RUT1UJCi0JLyogSWdub3JlIHRlcm1pbmFsIG91 dHB1dCBpbnRlcnJ1cHRzICovCi0JLyogVEhJUyBIQVMgTk8gRUZGRUNUICovCi0JZGVidWcoRjEw MCwidHRwdHljbWQgaWdub3JpbmcgU0lHVFRPVSIsIiIsMCk7Ci0Jc2lnbmFsKFNJR1RUT1UsIFNJ R19JR04pOwotI2VuZGlmCS8qIFNJR1RUT1UgKi8KLSNpZmRlZiBTSUdUU1RQCQotCS8qIElnbm9y ZSB0ZXJtaW5hbCBvdXRwdXQgaW50ZXJydXB0cyAqLwotCS8qIFRISVMgSEFTIE5PIEVGRkVDVCAq LwotCWRlYnVnKEYxMDAsInR0cHR5Y21kIGlnbm9yaW5nIFNJR1RTVFAiLCIiLDApOwotCXNpZ25h bChTSUdUU1RQLCBTSUdfSUdOKTsKLSNlbmRpZgkvKiBTSUdUU1RQICovCi0jZW5kaWYJLyogQ09N TUVOVCAqLwotCi0JcHR5X21ha2VfcmF3KHNsYXZlZmQpOwkJLyogUHV0IGl0IGluIHJhd21vZGUg Ki8KLQotCWVycm5vID0gMDsKLQlpZiAoZHVwMihzbGF2ZWZkLCBTVERJTl9GSUxFTk8pICE9IFNU RElOX0ZJTEVOTyB8fAotCSAgICBkdXAyKHNsYXZlZmQsIFNURE9VVF9GSUxFTk8pICE9IFNURE9V VF9GSUxFTk8pIHsKLQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgbmV3IGZvcmsgZHVwMiBlcnJv ciIsIiIsZXJybm8pOwotCSAgICBwZXJyb3IoInR0cHR5Y21kIGR1cDIiKTsKLQkgICAgZXhpdCgx KTsKLQl9Ci0JZGVidWcoRjEwMCwidHRwdHljbWQgbmV3IGZvcmsgZHVwMiBvayIsIiIsMCk7Ci0K LQkvKiBQYXJzZSBleHRlcm5hbCBwcm90b2NvbCBjb21tYW5kIGxpbmUgKi8KLQlxID0gY2tzcGxp dCgxLDAscyxOVUxMLCJcXCVbXSYkKy0vPSpeX0Ahe30vPD58LiN+J2A6Oz8iLDcsMCwwKTsKLQlp ZiAoIXEpIHsKLQkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgY2tzcGxpdCBmYWlsZWQiLCIiLDAp OwotCSAgICBleGl0KDEpOwotCX0gZWxzZSB7Ci0JICAgIGludCBpLCBuOwotCSAgICBkZWJ1ZyhG MTAwLCJ0dHB0eWNtZCBja3NwbGl0IG9rIiwiIiwwKTsKLQkgICAgbiA9IHEtPmFfc2l6ZTsKLQkg ICAgYXJncyA9IHEtPmFfaGVhZCArIDE7Ci0JICAgIGZvciAoaSA9IDA7IGkgPD0gbjsgaSsrKSB7 Ci0JCWlmICghYXJnc1tpXSkgewotCQkgICAgYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCSAgICAvKiBz b21ldGltZXMgY2tzcGxpdCgpIGRvZXNuJ3QgdGVybWluYXRlIHRoZSBsaXN0ICovCi0JCSAgICBp ZiAoKGkgPT0gbikgJiYgYXJnc1tpXSkgewotCQkJaWYgKChpbnQpc3RybGVuKGFyZ3NbaV0pID09 IDApCi0JCQkgIG1ha2VzdHIoJihhcmdzW2ldKSxOVUxMKTsKLQkJICAgIH0KLQkJfQotCSAgICB9 CSAgICAKLQl9Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgUHV0dGluZyB0aGUgc2xhdmUgcHR5IGlu IHJhd21vZGUgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYmVjYXVzZSB0aGUKLSAgZXh0ZXJuYWwg cHJvdG9jb2wgcHJvZ3JhbSBpcyBzdXBwb3NlZCB0byBkbyB0aGF0IGl0c2VsZi4gIFlldCBkb2lu ZyB0aGlzCi0gIGhlcmUgY3V0cyBkb3duIG9uIFptb2RlbSBiaW5hcnktZmlsZSB0cmFuc21pc3Np b24gZXJyb3JzIGJ5IDMwLTUwJSBidXQKLSAgc3RpbGwgZG9lc24ndCBlbGltaW5hdGUgdGhlbS4K LSovCi0JcHR5X21ha2VfcmF3KFNURElOX0ZJTEVOTyk7Ci0JcHR5X21ha2VfcmF3KFNURE9VVF9G SUxFTk8pOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotCWRlYnVnKEYxMDAsInR0cHR5Y21kIGV4 ZWN2cCdpbmcgZXh0ZXJuYWwgcHJvdG9jb2wiLCIiLDApOwotCWV4ZWN2cChhcmdzWzBdLGFyZ3Mp OwotCXBlcnJvcigiZXhlY3ZwIGZhaWxlZCIpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kIGV4ZWN2 cCBmYWlsZWQiLCIiLGVycm5vKTsKLQljbG9zZShzbGF2ZWZkKTsKLQlleGl0KDEpOwotICAgIH0g Ci0gICAgLyogKHRoZXJlIGFyZSBiZXR0ZXIgd2F5cyB0byBkbyB0aGlzLi4uKSAqLwotICAgIG1z bGVlcCgxMDAwKTsJCSAgLyogTWFrZSBwYXJlbnQgd2FpdCBmb3IgY2hpbGQgdG8gYmUgcmVhZHkg Ki8KLSAgICBwdHlmZCA9IG1hc3RlcmZkOwkJCS8qIFdlIHRhbGsgdG8gdGhlIG1hc3RlciAqLwot Ci0jZW5kaWYgLyogVVNFX0NLVVBUWV9DICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBw dHlmZCIsIiIscHR5ZmQpOwotICAgIGlmIChwdHlmZCA8IDApIHsKLQlwcmludGYoIj9GYWlsdXJl IHRvIGdldCBwdHlcbiIpOwotCXJldHVybigtOSk7Ci0gICAgfQotICAgIGhhdmVfcHR5ID0gMTsJ ICAgICAgLyogV2UgaGF2ZSBhbiBvcGVuIHB0eSBvciB3ZSB3b3VsZG4ndCBoZSBoZXJlICovCi0K LSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBQVFlfUEJVRl9TSVpFIiwiIixQVFlfUEJVRl9TSVpF KTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBQVFlfVEJVRl9TSVpFIiwiIixQVFlfVEJVRl9T SVpFKTsKLQotI2lmZGVmIFBUWV9VU0VfTkRFTEFZCi0gICAgLyogCi0gICAgICAgTk9URTogSWYg c2VsZWN0KCkgYW5kIGlvY3RsKHB0eWZkLEZJT05SRUFELCZuKSByZXR1cm4gdHJ1ZSBpbmRpY2F0 aW9ucwotICAgICAgIG9uIHRoZSBwdHksIHdlIGRvbid0IG5lZWQgbm9uYmxvY2tpbmcgcmVhZHMu ICBQZXJmb3JtYW5jZSBvZiBlaXRoZXIKLSAgICAgICBtZXRob2Qgc2VlbXMgdG8gYmUgYWJvdXQg dGhlIHNhbWUsIHNvIHVzZSB3aGF0ZXZlciB3b3Jrcy4KLSAgICAqLwotICAgIGVycm5vID0gMDsK LSAgICB4ID0gZmNudGwocHR5ZmQsRl9TRVRGTCxmY250bChwdHlmZCxGX0dFVEZMLCAwKXxPX05E RUxBWSk7Ci0gICAgY2ttYWttc2cobXNnYnVmLDUwMCwKLQkgICAgICJ0dHB0eWNtZCBzZXQgT19O REVMQVkgZXJybm89IiwKLQkgICAgIGNraXRvYShlcnJubyksCi0JICAgICAiIGZjbnRsPSIsCi0J ICAgICBja2l0b2EoeCkpOwotICAgIGRlYnVnKEYxMDAsbXNnYnVmLCIiLDApOwotI2VuZGlmIC8q IFBUWV9VU0VfTkRFTEFZICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBOb3QgbmVjZXNzYXJ5LCB0 aGUgcHJvdG9jb2wgbW9kdWxlIGFscmVhZHkgZGlkIHRoaXMgKi8KLQotI2lmZGVmIFVTRV9DRk1B S0VSQVcKLSAgICBpZiAodGNnZXRhdHRyKHR0eWZkLCAmdGVybSkgPiAtMSkgewotCWNmbWFrZXJh dygmdGVybSk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgbmV0IGNmbWFrZXJhdyBlcnJubyIsIiIs ZXJybm8pOwotCXggdGNzZXRhdHRyKHR0eWZkLCBUQ1NBTk9XLCAmdGVybSk7Ci0JZGVidWcoRjEw MSwidHRwdHljbWQgbmV0IHRjc2V0YXR0ciIsIiIseCk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQg bmV0IHRjc2V0YXR0ciIsIiIsZXJybm8pOwotICAgIH0KLSNlbHNlCi0gICAgaWYgKGxvY2FsKQkJ CQkvKiBQdXQgbmV0d29yayBjb25uZWN0aW9uIGluICovCi0gICAgICB0dHBrdCh0dHNwZWVkLHR0 Zmxvdyx0dHBydHkpOwkvKiAicGFja2V0IG1vZGUiLiAqLwotICAgIGVsc2UKLSAgICAgIGNvbmJp bigoY2hhcillc2NjaHIpOwkJLyogT1IuLi4gcHR5X21ha2VfcmF3KDApICovCi0jZW5kaWYgLyog VVNFX0NGTUFLRVJBVyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIFROQ09ERQot ICAgIGlmIChpc190bikgewotICAgICAgZGVidWcoRjEwMSwiPDw8IHR0cHR5Y21kIFRFTE9QVF9N RV9CSU5BUlkiLCIiLFRFTE9QVF9NRShURUxPUFRfQklOQVJZKSk7Ci0gICAgICBkZWJ1ZyhGMTAx LCI8PDwgdHRwdHljbWQgVEVMT1BUX1VfQklOQVJZIiwiIixURUxPUFRfVShURUxPUFRfQklOQVJZ KSk7Ci0gICAgfQotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0gICAgZGVidWcoRjEwMSwidHRwdHlj bWQgZW50ZXJpbmcgbG9vcCAtIHNlY29uZHNfdG9fd2FpdCIsIiIsc2Vjb25kc190b193YWl0KTsK LQotICAgIHdoaWxlIChoYXZlX3B0eSB8fCBoYXZlX25ldCkgewotCUZEX1pFUk8oJmluKTsJCQkv KiBJbml0aWFsaXplIHNlbGVjdCgpIHN0cnVjdHMgKi8KLQlGRF9aRVJPKCZvdXQpOwotCUZEX1pF Uk8oJmVycik7CQkJLyogKG5vdCB1c2VkIGJlY2F1c2UgdXNlbGVzcykgKi8KLQluZmRzID0gLTE7 Ci0KLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBsb29wIHRvcCBoYXZlX3B0eSIsIiIsaGF2ZV9wdHkp OwotCWRlYnVnKEYxMDEsInR0cHR5Y21kIGxvb3AgdG9wIGhhdmVfbmV0IiwiIixoYXZlX25ldCk7 Ci0KLQkvKiBQdHkgaXMgb3BlbiBhbmQgd2UgaGF2ZSByb29tIHRvIHJlYWQgZnJvbSBpdD8gKi8K LQlpZiAoaGF2ZV9wdHkgJiYgcGJ1Zl9hdmFpbCA8IFBUWV9QQlVGX1NJWkUpIHsKLQkgICAgZGVi dWcoRjEwMCwidHRwdHljbWQgRkRfU0VUIHB0eWZkIGluIiwiIiwwKTsKLSAgICAgICAgICAgIEZE X1NFVChwdHlmZCwgJmluKTsKLQkgICAgbmZkcyA9IHB0eWZkOwotICAgICAgICB9Ci0JLyogTmV0 d29yayBpcyBvcGVuIGFuZCB3ZSBoYXZlIHJvb20gdG8gcmVhZCBmcm9tIGl0PyAqLwotICAgICAg ICBpZiAoaGF2ZV9uZXQgJiYgaGF2ZV9wdHkgJiYgdGJ1Zl9hdmFpbCA8IFBUWV9UQlVGX1NJWkUp IHsKLQkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgRkRfU0VUIHR0eWZkIGluIiwiIiwwKTsKLSAg ICAgICAgICAgIEZEX1NFVCh0dHlmZCwgJmluKTsKLQkgICAgaWYgKHR0eWZkID4gbmZkcykgbmZk cyA9IHR0eWZkOwotICAgICAgICB9Ci0JLyogUHR5IGlzIG9wZW4gYW5kIHdlIGhhdmUgc3R1ZmYg dG8gd3JpdGUgdG8gaXQ/ICovCi0gICAgICAgIGlmIChoYXZlX3B0eSAmJiB0YnVmX2F2YWlsIC0g dGJ1Zl93cml0dGVuID4gMCkgewotCSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBGRF9TRVQgcHR5 ZmQgb3V0IiwiIiwwKTsKLSAgICAgICAgICAgIEZEX1NFVCAocHR5ZmQsICZvdXQpOwotCSAgICBp ZiAocHR5ZmQgPiBuZmRzKSBuZmRzID0gcHR5ZmQ7Ci0gICAgICAgIH0KLQkvKiBOZXQgaXMgb3Bl biBhbmQgd2UgaGF2ZSBzdHVmZiB0byB3cml0ZSB0byBpdD8gKi8KLQlkZWJ1ZyhGMTAxLCJ0dHB0 eWNtZCBwYnVmX2F2YWlsLXBidWZfd3JpdHRlbiIsIiIsCi0JICAgICAgcGJ1Zl9hdmFpbCAtIHBi dWZfd3JpdHRlbik7Ci0gICAgICAgIGlmIChoYXZlX25ldCAmJiBwYnVmX2F2YWlsIC0gcGJ1Zl93 cml0dGVuID4gMCkgewotCSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBGRF9TRVQgdHR5ZmQgb3V0 IiwiIiwwKTsKLSAgICAgICAgICAgIEZEX1NFVCAodHR5ZmQsICZvdXQpOwotCSAgICBpZiAodHR5 ZmQgPiBuZmRzKSBuZmRzID0gdHR5ZmQ7Ci0gICAgICAgIH0KLQkvKiBXZSBkb24ndCB1c2UgZXJy IGJlY2F1c2UgaXQncyBub3QgcmVhbGx5IGZvciBlcnJvcnMsICovCi0JLyogYnV0IGZvciBvdXQg b2YgYmFuZCBkYXRhIG9uIHRoZSBUQ1Agc29ja2V0LCB3aGljaCwgaWYgaXQgaXMgKi8KLQkvKiB0 byBiZSBoYW5kbGVkIGF0IGFsbCwgaXMgaGFuZGxlZCBpbiB0aGUgdHQqKCkgcm91dGluZXMgKi8K LQotCW5mZHMrKzsJCQkJLyogMC1iYXNlZCB0byAxLWJhc2VkICovCi0JZGVidWcoRjEwMSwidHRw dHljbWQgbmZkcyIsIiIsbmZkcyk7Ci0JaWYgKCFuZmRzKSB7Ci0JICAgIGRlYnVnKEYxMDAsInR0 cHR5Y21kIE5PIEZEcyBzZXQgZm9yIHNlbGVjdCIsIiIsMCk7Ci0JICAgIGlmIChoYXZlX3B0eSkg ewotCQkvKiBUaGlzIGlzIG5vdCByaWdodCAtLSBzbGVlcGluZyB3b24ndCBhY2NvbXBsaXNoIGFu eXRoaW5nICovCi0JCWRlYnVnKEYxMDEsInR0cHR5Y21kIG1zbGVlcCIsIiIsMTAwKTsKLQkJbXNs ZWVwKDEwMCk7CSAgICAKLQkgICAgfSBlbHNlIHsKLQkJZGVidWcoRjEwMCwidHRwdHljbWQgbm8g cHR5IC0gcXVpdHRpbmcgbG9vcCIsIiIsMCk7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotCWVycm5v ID0gMDsKLQotCWlmIChzZWNvbmRzX3RvX3dhaXQgPiAwTCkgewkvKiBUaW1lb3V0IGluIGNhc2Ug bm90aGluZyBoYXBwZW5zICovCi0JICAgIHR2LnR2X3NlYyA9IHNlY29uZHNfdG9fd2FpdDsgLyog Zm9yIGEgbG9uZyB0aW1lICovCi0JICAgIHR2LnR2X3VzZWMgPSAwTDsJCQotCSAgICB0djIgPSAm dHY7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0djIgPSBOVUxMOwotCX0KLQl4ID0g c2VsZWN0KG5mZHMsICZpbiwgJm91dCwgTlVMTCwgdHYyKTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNt ZCBzZWxlY3QiLCIiLHgpOwotCWlmICh4IDwgMCkgewotCSAgICBpZiAoZXJybm8gPT0gRUlOVFIp Ci0JICAgICAgY29udGludWU7Ci0JICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHNlbGVjdCBlcnJv ciIsIiIsZXJybm8pOwotCSAgICBicmVhazsKLQl9Ci0JaWYgKHggPT0gMCkgewotCSAgICBkZWJ1 ZyhGMTAxLCJ0dHB0eWNtZCArKysgc2VsZWN0IHRpbWVvdXQiLCIiLHNlY29uZHNfdG9fd2FpdCk7 IAotCSAgICBpZiAoaGF2ZV9wdHkpIHsKLQkJc3RhdHVzID0gcHR5X2dldF9zdGF0dXMocHR5ZmQs cHR5X2ZvcmtfcGlkKTsKLQkJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgQSIs IiIsc3RhdHVzKTsKLQkJaWYgKHN0YXR1cyA+IC0xKSBwZXhpdHN0YXQgPSBzdGF0dXM7Ci0JCWhh dmVfcHR5ID0gMDsKLQkgICAgfQotCSAgICBicmVhazsKLQl9Ci0JLyogV2Ugd2FudCB0byBoYW5k bGUgYW55IHBlbmRpbmcgd3JpdGVzIGZpcnN0IHRvIG1ha2Ugcm9vbSAqLwotCS8qIGZvciBuZXcg aW5jb21pbmcuICovCi0KLQlpZiAoRkRfSVNTRVQodHR5ZmQsICZvdXQpKSB7CS8qIENhbiB3cml0 ZSB0byBuZXQ/ICovCi0JICAgIENIQVIgKiBzOwotCSAgICBzID0gcGJ1ZiArIHBidWZfd3JpdHRl bjsJLyogQ3VycmVudCBzcG90IGZvciBzZW5kaW5nICovCi0jaWZkZWYgVE5DT0RFCi0JICAgIGlm IChpc190bikgewkJLyogdHRvbCgpIGRvZXNuJ3QgZG91YmxlIElBQ3MgKi8KLQkJQ0hBUiBjOwkJ CS8qIFJld3JpdGUgc3RyaW5nIHdpdGggSUFDcyBkb3VibGVkICovCi0JCWludCBpOwotCQlzID0g cGJ1ZiArIHBidWZfd3JpdHRlbjsgLyogU291cmNlICovCi0JCXggPSAwOwkJIAkgLyogQ291bnQg Ki8KLQkJZm9yIChpID0gMDsgaSA8IHBidWZfYXZhaWwgLSBwYnVmX3dyaXR0ZW47IGkrKykgewot CQkgICAgYyA9IHNbaV07CQkvKiBOZXh0IGNoYXJhY3RlciAqLwotCQkgICAgaWYgKGMgPT0gSUFD KSB7CS8qIElmIGl0J3MgSUFDICovCi0JCQlkYnVmW3grK10gPSBjOwkvKiBwdXQgYW5vdGhlciBv bmUgKi8KLQkJCWRlYnVnKEYwMDAsIj4+PiBRVU9URUQgSUFDIiwiIixjKTsKLQkJICAgIH0gZWxz ZSBpZiAoYyAhPSAweDBhICYmIG91dF9wcmV2ID09IDB4MGQpIHsJLyogQmFyZSBDUiAqLwotCQkJ aWYgKCFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpIHsgLyogTlZUIHJ1bGUgKi8KLQkJCSAgICBj ID0gMHgwMDsKLQkJCSAgICBkYnVmW3grK10gPSBjOwotCQkJICAgIGRlYnVnKEYwMDAsIj4+PiBD Ui1OVUwiLCIiLGMpOwotCQkJfQkJCQotCQkgICAgfQotCQkgICAgZGJ1Zlt4KytdID0gYzsJLyog Q29weSBhbmQgY291bnQgaXQgKi8KLQkJICAgIGRlYnVnKEYwMDAsIj4+PiBjaGFyIixja2l0b2Eo aW5fc3RhdGUpLGMpOwotCQkgICAgb3V0X3ByZXYgPSBjOwotCQl9Ci0JCXMgPSBkYnVmOwkJLyog TmV3IHNvdXJjZSAqLwotCSAgICB9IGVsc2UKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQkgICAgICB4 ID0gcGJ1Zl9hdmFpbCAtIHBidWZfd3JpdHRlbjsgLyogSG93IG11Y2ggdG8gc2VuZCAqLwotCi0J ICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIGJ5dGVzIHRvIHNlbmQiLCIiLHgpOwotCSAgICB4ID0g dHRvbChzLCB4KTsKLQkgICAgZGVidWcoRjEwMSwiPj4+IHR0b2wiLCIiLHgpOwotCSAgICBpZiAo eCA8IDApIHsKLQkJbmV0X2VycisrOwotCQlkZWJ1ZyhGMTExLCJ0dHB0eWNtZCB0dG9sIGVycm9y Iixja2l0b2EoeCksZXJybm8pOwotCQl4ID0gMDsKLQkgICAgfQotCSAgICB3cml0ZV9uZXRfYnl0 ZXMgKz0geDsKLQkgICAgcGJ1Zl93cml0dGVuICs9IHg7Ci0JfQotCWlmIChGRF9JU1NFVChwdHlm ZCwgJm91dCkpIHsJLyogQ2FuIHdyaXRlIHRvIHB0eT8gKi8KLQkgICAgZGVidWcoRjEwMCwidHRw dHljbWQgRkRfSVNTRVQgcHR5ZmQgb3V0IiwiIiwwKTsKLQkgICAgZXJybm8gPSAwOwotI2lmbmRl ZiBDT01NRU5UCi0JICAgIHggPSB3cml0ZShwdHlmZCx0YnVmICsgdGJ1Zl93cml0dGVuLHRidWZf YXZhaWwgLSB0YnVmX3dyaXR0ZW4pOwotI2Vsc2UKLQkgICAgLyogQnl0ZSBsb29wIHRvIHJ1bGUg b3V0IGRhdGEgb3ZlcnJ1bnMgaW4gdGhlIHB0eSAqLwotCSAgICAvKiAoaXQgbWFrZXMgbm8gZGlm ZmVyZW5jZSkgKi8KLQkgICAgewotCQljaGFyICpwID0gdGJ1Zit0YnVmX3dyaXR0ZW47Ci0JCWlu dCBuID0gdGJ1Zl9hdmFpbCAtIHRidWZfd3JpdHRlbjsKLQkJZm9yICh4ID0gMDsgeCA8IG47IHgr KykgewotCQkgICAgbXNsZWVwKDEwKTsKLQkJICAgIGlmICh3cml0ZShwdHlmZCwmKHBbeF0pLDEp IDwgMCkKLQkJICAgICAgYnJlYWs7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8K LQkgICAgZGVidWcoRjExMSwidHRwdHljbWQgcHR5ZmQgd3JpdGUiLGNraXRvYShlcnJubykseCk7 Ci0JICAgIGlmICh4ID4gMCkgewotCQl0YnVmX3dyaXR0ZW4gKz0geDsKLQkJd3JpdGVfcHR5X2J5 dGVzICs9IHg7Ci0JICAgIH0gZWxzZSB7Ci0JCXggPSAwOwotCQlwdHlfZXJyKys7Ci0JCWlmIChw ZXhpdHN0YXQgPCAwKSB7Ci0JCSAgICBzdGF0dXMgPSBwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlf Zm9ya19waWQpOwotCQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgQiIs IiIsc3RhdHVzKTsKLQkJICAgIGlmIChzdGF0dXMgPiAtMSkgcGV4aXRzdGF0ID0gc3RhdHVzOwot CQkgICAgaGF2ZV9wdHkgPSAwOwotCQl9Ci0JCWRlYnVnKEYxMDAsInR0cHR5Y21kICsrKyBwdHlm ZCB3cml0ZSBlcnJvciIsIiIsMCk7Ci0JICAgIH0KLQl9Ci0JaWYgKEZEX0lTU0VUKHR0eWZkLCAm aW4pKSB7CS8qIENhbiByZWFkIGZyb20gbmV0PyAqLwotCSAgICB0c2V0Kys7Ci0JICAgIGRlYnVn KEYxMDAsInR0cHR5Y21kIEZEX0lTU0VUIHR0eWZkIGluIiwiIiwwKTsKLQkgICAgbiA9IGluX2No aygxLHR0eWZkKTsKLQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgaW5fY2hrKHR0eWZkKSIsIiIs bik7IAotCSAgICBpZiAobiA8IDAgfHwgdHR5ZmQgPT0gLTEpIHsKLQkJZGVidWcoRjEwMSwidHRw dHljbWQgKysrIHR0eWZkIGVycm5vIiwiIixlcnJubyk7Ci0JCW5ldF9lcnIrKzsKLQkgICAgfSBl bHNlIGlmIChuID4gMCkgewotCQlpZiAobiA+IFBUWV9UQlVGX1NJWkUgLSB0YnVmX2F2YWlsKQot CQkgIG4gPSBQVFlfVEJVRl9TSVpFIC0gdGJ1Zl9hdmFpbDsKLQkJZGVidWcoRjEwMSwidHRwdHlj bWQgbmV0IHJlYWQgc2l6ZSBhZGp1c3RlZCIsIiIsbik7IAotCQlpZiAoeGxvY2FsICYmIG5ldGNv bm4pIHsKLQkJICAgIC8qCi0JCSAgICAgIFdlIGhhdmUgdG8gdXNlIGEgYnl0ZSBsb29wIGhlcmUg YmVjYXVzZSB0dHhpbigpCi0JCSAgICAgIGRvZXMgbm90IGRlY3J5cHQgb3IsIGZvciB0aGF0IG1h dHRlciwgaGFuZGxlIFRlbG5ldC4KLQkJICAgICovCi0JCSAgICBpbnQgYzsKLQkJICAgIENIQVIg KiBwOwotCQkgICAgcCA9IHRidWYgKyB0YnVmX2F2YWlsOwotCQkgICAgZm9yICh4ID0gMDsgeCA8 IG47IHgrKykgewotCQkJaWYgKChjID0gdHRpbmMoMCkpIDwgMCkKLQkJCSAgYnJlYWs7Ci0JCQlp ZiAoIWlzX3RuKSB7CS8qIE5vdCBUZWxuZXQgLSBrZWVwIGFsbCBieXRlcyAqLwotCQkJICAgICpw KysgPSAoQ0hBUiljOwotCQkJICAgIGRlYnVnKEYwMDAsIjw8PCBjaGFyIiwiIixjKTsKLSNpZmRl ZiBUTkNPREUKLQkJCX0gZWxzZSB7CS8qIFRlbG5ldCAtIG11c3QgaGFuZGxlIElBQyBhbmQgTlZU ICovCi0JCQkgICAgZGVidWcoRjAwMCwiPDw8IGNoYXIiLGNraXRvYShpbl9zdGF0ZSksYyk7Ci0J CQkgICAgc3dpdGNoIChjKSB7Ci0JCQkgICAgICBjYXNlIDB4MDA6IC8qIE5VTCAqLwotCQkJCWlm IChpbl9zdGF0ZSA9PSBIQVZFX0NSKSB7Ci0JCQkJICAgIGRlYnVnKEYwMDAsIjw8PCBTS0lQIiwi IixjKTsKLQkJCQl9IGVsc2UgewotCQkJCSAgICAqcCsrID0gYzsKLQkJCQkgICAgZGVidWcoRjAw MCwiPDw8IEtlZXAiLCIiLGMpOwotCQkJCX0KLQkJCQlpbl9zdGF0ZSA9IDA7Ci0JCQkJYnJlYWs7 Ci0JCQkgICAgICBjYXNlIDB4MGQ6IC8qIENSICovCi0JCQkJaWYgKCFURUxPUFRfVShURUxPUFRf QklOQVJZKSkKLQkJCQkgIGluX3N0YXRlID0gSEFWRV9DUjsKLQkJCQkqcCsrID0gYzsKLQkJCQlk ZWJ1ZyhGMDAwLCI8PDwgS2VlcCIsIiIsYyk7Ci0JCQkJYnJlYWs7Ci0jaWZkZWYgQ09NTUVOVAot CQkJICAgICAgY2FzZSAweDBmOiAvKiBDdHJsLU8gKi8KLQkJCSAgICAgIGNhc2UgMHgxNjogLyog Q3RybC1WICovCi0JCQkJKnArKyA9IDB4MTY7Ci0JCQkJKnArKyA9IGM7Ci0JCQkJZGVidWcoRjAw MCwiPDw8IFFVT1QiLCIiLGMpOwotCQkJCWJyZWFrOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJ CSAgICAgIGNhc2UgMHhmZjogLyogSUFDICovCi0JCQkJaWYgKGluX3N0YXRlID09IEhBVkVfSUFD KSB7Ci0JCQkJICAgIGRlYnVnKEYwMDAsIjw8PCBLRUVQIiwiIixjKTsKLQkJCQkgICAgKnArKyA9 IGM7Ci0JCQkJICAgIGluX3N0YXRlID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCSAgICBkZWJ1ZyhG MDAwLCI8PDwgU0tJUCIsIiIsYyk7Ci0JCQkJICAgIGluX3N0YXRlID0gSEFWRV9JQUM7Ci0JCQkJ fQotCQkJCWJyZWFrOwotCQkJICAgICAgZGVmYXVsdDoJLyogQWxsIG90aGVycyAqLwotCQkJCWlm IChpbl9zdGF0ZSA9PSBIQVZFX0lBQykgewotI2lmZGVmIENPTU1FTlQKLS8qCi0gIHRuX2Rvb3Ao KSB3aWxsIGNvbnN1bWUgYW4gdW5rbm93biBudW1iZXIgb2YgYnl0ZXMgYW5kIHdlJ2xsIG92ZXJz aG9vdAotICB0aGUgZm9yLWxvb3AuICBUaGUgb25seSBUZWxuZXQgY29tbWFuZCBJJ3ZlIGV2ZXIg c2VlbiBhcnJpdmUgaGVyZSBpcwotICBhIERhdGEgTWFyaywgd2hpY2ggY29tZXMgd2hlbiB0aGUg cmVtb3RlIHByb3RvY29sIGV4aXRzIGFuZCB0aGUgcmVtb3RlCi0gIGpvYiByZXR1cm5zIHRvIGl0 cyBzaGVsbCBwcm9tcHQuICBPbiB0aGUgYXNzdW1wdGlvbiBpdCdzIGEgMS1ieXRlIGNvbW1hbmQs Ci0gIHdlIGRvbid0IHdyaXRlIG91dCB0aGUgSUFDIG9yIHRoZSBjb21tYW5kLCBhbmQgd2UgY2xl YXIgdGhlIHN0YXRlLiAgSWYKLSAgd2UgY2FsbGVkIHRuX2Rvb3AoKSB3ZSdkIGhhdmUgbm8gd2F5 IG9mIGtub3dpbmcgaG93IG1hbnkgYnl0ZXMgaXQgdG9vawotICBmcm9tIHRoZSBpbnB1dCBzdHJl YW0uCi0qLwotCQkJCSAgICBpbnQgeHg7Ci0JCQkJICAgIHh4ID0gdG5fZG9vcCgoQ0hBUiljLGR1 cGxleCx0dGluYyk7Ci0JCQkJICAgIGRlYnVnKEYxMTEsIjw8PCBET09QIixja2N0b2EoYykseHgp OwotI2Vsc2UKLQkJCQkgICAgZGVidWcoRjEwMSwiPDw8IERPT1AiLCIiLGMpOwotI2VuZGlmCS8q IENPTU1FTlQgKi8KLQkJCQkgICAgaW5fc3RhdGUgPSAwOwotCQkJCX0gZWxzZSB7Ci0JCQkJICAg ICpwKysgPSBjOwotCQkJCSAgICBkZWJ1ZyhGMDAwLCI8PDwga2VlcCIsIiIsYyk7Ci0JCQkJICAg IGluX3N0YXRlID0gMDsKLQkJCQl9Ci0JCQkgICAgfQotI2VuZGlmCS8qIFROQ09ERSAqLwotCQkJ fQotCQkgICAgfQotCQkgICAgY2ttYWttc2cobXNnYnVmLDUwMCwKLQkJCSAgICAgInR0cHR5Y21k IHJlYWQgbmV0IFt0dGluYyBsb29wXSBlcnJubz0iLAotCQkJICAgICBja2l0b2EoZXJybm8pLAot CQkJICAgICAiIGNvdW50PSIsCi0JCQkgICAgIGNraXRvYSh4KSk7Ci0JCSAgICBkZWJ1ZyhGMTAw LG1zZ2J1ZiwiIiwwKTsKLQkJfSBlbHNlIHsKLQkJICAgIHggPSB0dHhpbihuLHRidWYrdGJ1Zl9h dmFpbCk7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCB0dHhpbiB4IiwiIix4KTsgCi0JCX0K LQotCQlpZiAoeCA8IDApIHsKLQkJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHJlYWQgbmV0IGVy cm9yIiwiIix4KTsKLQkJICAgIG5ldF9lcnIrKzsKLQkJfQotCQl0YnVmX2F2YWlsICs9IHg7Ci0J CXJlYWRfbmV0X2J5dGVzICs9IHg7Ci0JICAgIH0KLQotCX0gZWxzZQotCSAgdG5vdHNldCsrOwot Ci0JaWYgKEZEX0lTU0VUKHB0eWZkLCAmaW4pKSB7CS8qIFJlYWQgZnJvbSBwdHk/ICovCi0JICAg IHBzZXQrKzsKLQkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgRkRfSVNTRVQgcHR5ZmQgaW4iLCIi LDApOwotI2lmZGVmIFBUWV9VU0VfTkRFTEFZCi0JICAgIG4gPSBQVFlfUEJVRl9TSVpFOwotI2Vs c2UKLQkgICAgLyoKLQkgICAgICBUaGlzIGRvZXMgbm90IHdvcmsgb24gbm9uYmxvY2tpbmcgY2hh bm5lbHMKLQkgICAgICBvbiBjZXJ0YWluIHBsYXRmb3JtcyBzdWNoIGFzIE5ldEJTRC4KLQkgICAg Ki8KLQkgICAgbiA9IHB0eV9jaGsocHR5ZmQpOwotI2VuZGlmIC8qIFBUWV9VU0VfTkRFTEFZICov Ci0JICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9jaGsoKSBuIiwiIixuKTsgCi0KLQkgICAg aWYgKG4gPCAwKQotCSAgICAgIG4gPSAwOwotCSAgICBpZiAobiA+IDApIHsKLQkJaWYgKG4gPiBQ VFlfUEJVRl9TSVpFIC0gcGJ1Zl9hdmFpbCkKLQkJICBuID0gUFRZX1BCVUZfU0laRSAtIHBidWZf YXZhaWw7Ci0JCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eSByZWFkIHNpemUgYWRqdXN0ZWQiLCIi LG4pOyAKLQkJZXJybm8gPSAwOwotCQl4ID0gcmVhZChwdHlmZCxwYnVmK3BidWZfYXZhaWwsbik7 Ci0jaWZkZWYgREVCVUcKLQkJaWYgKGRlYmxvZykgewotCQkgICAgY2ttYWttc2cobXNnYnVmLDUw MCwKLQkJCSAgICAgInR0cHR5Y21kIHJlYWQgcHR5IGVycm5vPSIsCi0JCQkgICAgIGNraXRvYShl cnJubyksCi0JCQkgICAgICIgY291bnQ9IiwKLQkJCSAgICAgY2tpdG9hKHgpKTsKLQkJICAgIGRl YnVnKEYxMDAsbXNnYnVmLCIiLDApOwotCQl9Ci0jZW5kaWYJLyogREVCVUcgKi8KLQotCQlpZiAo eCA8IDAgJiYgZXJybm8gPT0gRUFHQUlOKQotCQkgIHggPSAwOwotCi0JCWlmICh4IDwgMCkgewkJ LyogVGhpcyB3b3JrcyBvbiBTb2xhcmlzIGFuZCBMaW51eCAqLwotCQkgICAgcHR5X2VycisrOwkJ LyogYnV0IG5vdCBOZXRCU0QgKi8KLQkJICAgIGRlYnVnKEYxMDAsIlRFUk1JTkFUSU9OIFRFU1Qg QSIsIiIsMCk7Ci0jaWZkZWYgQ09NTUVOVAotCQkgICAgaWYgKGVycm5vID09IEVJTykKLQkJICAg ICAgcmMgPSAxOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQkJICAgIGlmIChwZXhpdHN0YXQgPCAw KSB7Ci0JCQlzdGF0dXMgPSBwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9ya19waWQpOwotCQkJ ZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgQyIsIiIsc3RhdHVzKTsKLQkJCWlm IChzdGF0dXMgPiAtMSkgcGV4aXRzdGF0ID0gc3RhdHVzOwotCQkgICAgfQotCQkgICAgaGF2ZV9w dHkgPSAwOwotCQkgICAgeCA9IDA7Ci0JCX0KLQkJaWYgKHggPT0gMCAmJiAhcHR5X2VycikgeyAv KiBUaGlzIHdvcmtzIG9uIE5ldEJTRCBidXQgKi8KLQkJICAgIGRlYnVnKEYxMDAsIlRFUk1JTkFU SU9OIFRFU1QgQiIsIiIsMCk7Ci0JCSAgICBzdGF0dXMgPSBwZXhpdHN0YXQgPiAtMSA/IHBleGl0 c3RhdCA6Ci0JCQlwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9ya19waWQpOwotCQkgICAgZGVi dWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgRCIsIiIsc3RhdHVzKTsKLQkJICAgIGlm IChzdGF0dXMgPiAtMSkgewotCQkJcGV4aXRzdGF0ID0gc3RhdHVzOwotCQkJcHR5X2VycisrOwot CQkJaGF2ZV9wdHkgPSAwOwotCQkgICAgfSBlbHNlIHsJCS8qIFNlbGVjdCgpIGxpZWQgKi8KLQkJ CXB0eV9lcnIgPSAwOwkvKiBwdHkgc3RpbGwgdGhlcmUgYnV0IGhhcyBub3RoaW5nICovCi0JCQlt c2xlZXAoMTAwKTsJLyogc2xlZXAgYSBiaXQgKi8KLQkJICAgIH0KLQkJICAgIHggPSAwOwotCQl9 IAotCQkvKiBIb3BlZnVsbHkgdGhlIG5leHQgdHdvIGFyZSBubyBsb25nZXIgbmVlZGVkLi4uICov Ci0JCWlmICghcHR5X2VyciAmJiAoCi0jaWZuZGVmIFBUWV9VU0VfTkRFTEFZCi0JCSAgICB4IDwg MSB8fCBlcnJubwotI2Vsc2UKLQkJICAgIGVycm5vICE9IDAgJiYgZXJybm8gIT0gRUFHQUlOCi0j ZW5kaWYgLyogUFRZX1VTRV9OREVMQVkgKi8KLQkJICAgICkpIHsKLQkJICAgIGRlYnVnKEYxMDAs IlRFUk1JTkFUSU9OIFRFU1QgQyIsIiIsMCk7Ci0JCSAgICBwdHlfZXJyKys7Ci0JCSAgICBkZWJ1 ZyhGMTAxLCJ0dHB0eWNtZCBTRVQgcHR5X2VyciIsIiIscHR5X2Vycik7Ci0JCSAgICBpZiAoZXJy bm8gPT0gRUlPKQkvKiBlcnJubyA9PSBFSU8gaXMgbGlrZSBFT0YgKi8KLQkJICAgICAgcmMgPSAx OwotCQkgICAgaWYgKHggPCAwKQotCQkgICAgICB4ID0gMDsKLQkJfQotI2lmZGVmIENPTU1FTlQK LSNpZmRlZiBERUJVRwotCQlpZiAoZGVibG9nKSB7Ci0JCSAgICBwYnVmW3BidWZfYXZhaWwgKyB4 XSA9ICdcMCc7Ci0JCSAgICBkZWJ1ZyhGMTExLCJ0dHB0eWNtZCBhZGRlZCB0byBwdHkgYnVmZmVy IiwKLQkJCSAgcGJ1ZitwYnVmX2F2YWlsLHgpOwotCQl9Ci0jZW5kaWYJLyogREVCVUcgKi8KLSNl bmRpZgkvKiBDT01NRU5UICovCi0JCXBidWZfYXZhaWwgKz0geDsKLQkJcmVhZF9wdHlfYnl0ZXMg Kz0geDsKLQkgICAgfSBlbHNlIHsJCQkvKiBuID09IDAgd2l0aCBibG9ja2luZyByZWFkcyAqLwot CQlkZWJ1ZyhGMTAwLAotCQkgICAgICAiUFRZIFJFQUQgUkVUVVJORUQgWkVSTyBCWVRFUyAtIFNI T1VMRCBOT1QgSEFQUEVOIiwKLQkJICAgICAgIiIsMCk7Ci0JICAgIH0KLQl9IGVsc2UKLQkgIHBu b3RzZXQrKzsKLQotCS8qIElmIHdyaXRlcyBoYXZlIGNhdWdodCB1cCB0byByZWFkcywgcmVzZXQg dGhlIGJ1ZmZlcnMgKi8KLQotCWlmIChwYnVmX3dyaXR0ZW4gPT0gcGJ1Zl9hdmFpbCkKLQkgIHBi dWZfd3JpdHRlbiA9IHBidWZfYXZhaWwgPSAwOwotCWlmICh0YnVmX3dyaXR0ZW4gPT0gdGJ1Zl9h dmFpbCkKLQkgIHRidWZfd3JpdHRlbiA9IHRidWZfYXZhaWwgPSAwOwotCi0JLyogU2VlIGlmIHdl IGNhbiBleGl0ICovCi0KLQl4MSA9IHBidWZfYXZhaWwgLSBwYnVmX3dyaXR0ZW47IAotCXgyID0g dGJ1Zl9hdmFpbCAtIHRidWZfd3JpdHRlbjsKLQotCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9l cnIgTE9PUCBFWElUIFRFU1QgcHR5X2VyciIsIiIscHR5X2Vycik7Ci0JZGVidWcoRjEwMSwidHRw dHljbWQgcHR5X2VyciBMT09QIEVYSVQgVEVTVCB4MSBbd3JpdGUgdG8gbmV0XSIsIiIseDEpOwot CWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9lcnIgTE9PUCBFWElUIFRFU1QgeDIgW3dyaXRlIHRv IHB0eV0iLCIiLHgyKTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZXJyIExPT1AgRVhJVCBU RVNUIHJjIiwiIixyYyk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2VyciBMT09QIEVYSVQg VEVTVCBzdGF0dXMiLCIiLHN0YXR1cyk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2VyciBM T09QIEVYSVQgVEVTVCBwZXhpdHN0YXQiLCIiLHBleGl0c3RhdCk7Ci0KLQlpZiAobmV0X2Vycikg ewkJCS8qIE5ldCBlcnJvcj8gKi8KLQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgbmV0X2VyciBM T09QIEVYSVQgVEVTVCBuZXRfZXJyIiwiIixuZXRfZXJyKTsKLQkgICAgaWYgKGhhdmVfbmV0KSB7 Ci0JCWlmIChsb2NhbCkgewotCQkgICAgdHRjbG9zKDApOwotCQkgICAgcHJpbnRmKCI/Q29ubmVj dGlvbiBjbG9zZWRcbiIpOwotCQl9Ci0JCWhhdmVfbmV0ID0gMDsKLQkgICAgfQotCSAgICBkZWJ1 ZyhGMTAxLCJ0dHB0eWNtZCBuZXRfZXJyIExPT1AgRVhJVCBURVNUIHgxIiwiIix4MSk7Ci0JICAg IGlmICh4MSA9PSAwKQotCSAgICAgIGJyZWFrOwotCX0KLQlpZiAocHR5X2VycikgewkJCS8qIFB0 eSBlcnJvcj8gKi8KLQkgICAgaWYgKGhhdmVfcHR5KSB7Ci0JCWlmIChwZXhpdHN0YXQgPCAwKSB7 CQkKLQkJICAgIHN0YXR1cyA9IHB0eV9nZXRfc3RhdHVzKHB0eWZkLHB0eV9mb3JrX3BpZCk7Ci0J CSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZ2V0X3N0YXR1cyBFIiwiIixzdGF0dXMpOwot CQkgICAgaWYgKHN0YXR1cyA+IC0xKSBwZXhpdHN0YXQgPSBzdGF0dXM7Ci0JCX0KLQkJaGF2ZV9w dHkgPSAwOwotCSAgICB9Ci0JICAgIGlmICh4MSA9PSAwICYmIHgyID09IDApIHsJLyogSWYgYnVm ZmVycyBhcmUgY2F1Z2h0IHVwICovCi0JCXJjID0gMTsJCQkvKiBzZXQgcHJlbGltaW5hcnkgcmV0 dXJuIHRvIHN1Y2Nlc3MgKi8KLQkJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2VyciBMT09QIEVY SVQgVEVTVCByYyAyIiwiIixyYyk7Ci0JCWJyZWFrOwkJCS8qIGFuZCBleGl0IHRoZSBsb29wICov Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyBoYXZlX3B0 eSIsIiIsaGF2ZV9wdHkpOwotICAgIGlmIChoYXZlX3B0eSkgewkJCS8qIEluIGNhc2Ugc2VsZWN0 KCkgZmFpbGVkICovCi0jaWZkZWYgVVNFX0NLVVBUWV9DCi0JZW5kX3B0eSgpOwotCWNsb3NlKHB0 eWZkKTsKLSNlbHNlCi0JY2xvc2Uoc2xhdmVmZCk7Ci0JY2xvc2UobWFzdGVyZmQpOwotI2VuZGlm IC8qIFVTRV9DS1VQVFlfQyAqLwotICAgIH0KLSAgICBwdHlfbWFzdGVyX2ZkID0gLTE7Ci0gICAg ZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHBleGl0c3RhdCIsIiIscGV4aXRzdGF0KTsKLSAgICBp ZiAocGV4aXRzdGF0IDwgMCkgewkJLyogVHJ5IG9uZSBsYXN0IHRpbWUgdG8gZ2V0IHN0YXR1cyAq LwotCXN0YXR1cyA9IHB0eV9nZXRfc3RhdHVzKHB0eWZkLHB0eV9mb3JrX3BpZCk7Ci0JZGVidWco RjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgRiIsIiIsc3RhdHVzKTsKLQlpZiAoc3RhdHVz ID4gLTEpIHBleGl0c3RhdCA9IHN0YXR1czsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwidHRwdHlj bWQgKysrIGZpbmFsIHBleGl0c3RhdCIsIiIscGV4aXRzdGF0KTsKLSAgICBpZiAoZGVibG9nKSB7 CQkJLyogU3RhdHMgZm9yIGRlYnVnIGxvZyAqLwotCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyBw c2V0CSIsIiIscHNldCk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHBub3RzZXQiLCIiLHBu b3RzZXQpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyB0c2V0CSIsIiIsdHNldCk7Ci0JZGVi dWcoRjEwMSwidHRwdHljbWQgKysrIHRub3RzZXQiLCIiLHRub3RzZXQpOwotCi0JZGVidWcoRjEw MSwidHRwdHljbWQgKysrICByZWFkX3B0eV9ieXRlcyIsIiIscmVhZF9wdHlfYnl0ZXMpOwotCWRl YnVnKEYxMDEsInR0cHR5Y21kICsrKyB3cml0ZV9uZXRfYnl0ZXMiLCIiLHdyaXRlX25ldF9ieXRl cyk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgKysrICByZWFkX25ldF9ieXRlcyIsIiIscmVhZF9u ZXRfYnl0ZXMpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyB3cml0ZV9wdHlfYnl0ZXMiLCIi LHdyaXRlX3B0eV9ieXRlcyk7Ci0gICAgfQotLyoKLSAgSWYgd2UgZ290IHRoZSBleHRlcm5hbCBw cm90b2NvbCdzIGV4aXQgc3RhdHVzIGZyb20gd2FpdHBpZCgpLCB3ZSB1c2UgdGhhdAotICB0byBz ZXQgb3VyIHJldHVybiBjb2RlLiAgSWYgbm90LCB3ZSBmYWxsIGJhY2sgb24gd2hhdGV2ZXIgcmMg d2FzIHByZXZpb3VzbHkKLSAgc2V0IHRvLCBuYW1lbHkgMSAoc3VjY2VzcykgaWYgdGhlIHB0eSBm b3JrIHNlZW1lZCB0byB0ZXJtaW5hdGUsIDAgb3RoZXJ3aXNlLgotKi8KLSAgICBpZiAoc2F2ZV9z aWdjaGxkKSB7CQkJLyogUmVzdG9yZSB0aGlzIGlmIHdlIGNoYW5nZWQgaXQgKi8KLQkoVk9JRCkg c2lnbmFsKFNJR0NITEQsc2F2ZV9zaWdjaGxkKTsKLQlzYXZlX3NpZ2NobGQgPSBOVUxMOwotICAg IH0KLSAgICBtc2xlZXAoNTAwKTsKLSAgICB4ID0ga2lsbChwdHlfZm9ya19waWQsU0lHSFVQKTsJ LyogSW4gY2FzZSBpdCdzIHN0aWxsIHRoZXJlICovCi0gICAgcHR5X2ZvcmtfcGlkID0gLTE7Ci0g ICAgZGVidWcoRjEwMSwidHRwdHljbWQgZm9yayBraWxsIFNJR0hVUCIsIiIseCk7Ci0gICAgaWYg KHBleGl0c3RhdCA+IC0xKQotICAgICAgcmMgPSAocGV4aXRzdGF0ID09IDAgPyAxIDogMCk7Ci0g ICAgZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHJjIiwiIixyYyk7Ci0gICAgaWYgKCFsb2NhbCkg ewkJCS8qIElmIGluIHJlbW90ZSBtb2RlICovCi0JY29ucmVzKCk7CQkJLyogcmVzdG9yZSBjb25z b2xlIHRvIENCUkVBSyBtb2RlICovCi0JY29uY2IoKGNoYXIpZXNjY2hyKTsKLSAgICB9Ci0gICAg cmV0dXJuKHJjKTsKLX0KLSNlbmRpZgkvKiBORVRQVFkgKi8KLSNlbmRpZgkvKiBTRUxFQ1QgKi8K LQotLyogVCBUIFIgVSBOIEMgTSBEICAtLSAgUmVkaXJlY3QgYW4gZXh0ZXJuYWwgY29tbWFuZCBv dmVyIHRoZSBjb25uZWN0aW9uLiAqLwotCi0vKgotICBUVFJVTkNNRCBpcyB0aGUgcm91dGluZSB0 aGF0IHdhcyBvcmlnaW5hbGx5IHVzZWQgZm9yIHJ1bm5pbmcgZXh0ZXJuYWwKLSAgcHJvdG9jb2xz LiAgSXQgaXMgdmVyeSBzaW1wbGUgYW5kIHdvcmtzIGZpbmUgcHJvdmlkZWQgKGEpIHRoZSBjb25u ZWN0aW9uCi0gIGlzIG5vdCBlbmNyeXB0ZWQsIGFuZCAoYikgdGhlIGV4dGVybmFsIHByb3RvY29s IHVzZXMgc3RhbmRhcmQgaS9vCi0gIChmaWxlIGRlc2NyaXB0b3JzIDAgYW5kIDEpIGZvciBmaWxl IHRyYW5zZmVyLgotKi8KLQotaW50Ci10dHJ1bmNtZChzKSBjaGFyICpzOyB7Ci0gICAgUElEX1Qg cGlkOwkJCQkvKiBwaWQgb2YgbG93ZXIgZm9yayAqLwotICAgIGludCB3c3RhdDsJCQkJLyogZm9y IHdhaXQoKSAqLwotICAgIGludCB4OwotICAgIGludCBzdGF0dXNwOwotCi0gICAgaWYgKHR0eWZk ID09IC0xKSB7Ci0JcHJpbnRmKCI/U29ycnksIGRldmljZSBpcyBub3Qgb3BlblxuIik7Ci0JcmV0 dXJuKDApOwotICAgIH0KLSAgICBpZiAobm9wdXNoKSB7Ci0JZGVidWcoRjEwMCwidHRydW5jbWQg ZmFpbDogbm9wdXNoIiwiIiwwKTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotCi0jaWZkZWYgTkVUUFRZ Ci0vKioqKioqKioqKioqKioqCi0gIEl0IG1pZ2h0IGFsc28gYmUgbmVjZXNzYXJ5IHRvIHVzZSB0 aGUgcHR5IHJvdXRpbmUgZm9yIG90aGVyIHJlYXNvbnMsCi0gIGUuZy4gYmVjYXVzZSB0aGUgZXh0 ZXJuYWwgcHJvZ3JhbSBkb2VzIG5vdCB1c2Ugc3RkaW8uCi0qLwotI2lmZGVmIE5FVENPTk4KLS8q Ci0gIElmIHdlIGhhdmUgYSBuZXR3b3JrIGNvbm5lY3Rpb24gd2UgdXNlIGEgZGlmZmVyZW50IHJv dXRpbmUgYmVjYXVzZQotICAoYSkgaWYgdGhlIGNvbm5lY3Rpb24gaXMgZW5jcnlwdGVkLCB0aGUg bWVjaGFuaXNtIHVzZWQgaGVyZSBjYW4ndCBkZWFsCi0gIHdpdGggaXQ7IGFuZCAoYikgaXQgd29u J3QgaGFuZGxlIGFueSBuZXR3b3JrIHByb3RvY29scyBlaXRoZXIsIGUuZy4KLSAgVGVsbmV0LCBS bG9naW4sIEs1IFUtdG8tVSwgZXRjLiAgSG93ZXZlciwgdGhpcyByb3V0aW5lIHdvcmtzIG11Y2gK LSAgYmV0dGVyIChmYXN0ZXIsIG1vcmUgdHJhbnNwYXJlbnQpIG9uIHNlcmlhbCBjb25uZWN0aW9u cyBhbmQgd2hlbgotICBDLUtlcm1pdCBpcyBpbiByZW1vdGUgbW9kZSAoaS5lLiBpcyBvbiB0aGUg ZmFyIGVuZCkuCi0qLwotICAgIC8qIEZvciB0ZXN0aW5nIGFsd2F5cyB1c2UgdGhpcyAqLwotICAg IGlmIChuZXRjb25uKQotICAgICAgcmV0dXJuKHR0cHR5Y21kKHMpKTsKLSNlbmRpZiAvKiBORVRD T05OICovCi0KLS8qKioqKioqKioqKioqKiovCi0jZWxzZSAgLyogTkVUUFRZICovCi0gICAgaWYg KHR0X2lzX3NlY3VyZSgpKSB7Ci0JcHJpbnRmKCI/U29ycnksIFwKLWV4dGVybmFsIHByb3RvY29s cyBvdmVyIHNlY3VyZSBjb25uZWN0aW9ucyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgT1MuXG4iCi0g ICAgICAgICAgICAgICk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYJLyogTkVU UFRZICovCi0KLSAgICBjb25yZXMoKTsJCQkJLyogTWFrZSBjb25zb2xlIG5vcm1hbCAgKi8KLSAg ICBwZXhpdHN0YXQgPSAtNDsKLSAgICBpZiAoKHBpZCA9IGZvcmsoKSkgPT0gMCkgewkJLyogTWFr ZSBhIGNoaWxkIGZvcmsgKi8KLQlpZiAocHJpdl9jYW4oKSkJCQkvKiBDaGlsZDogdHVybiBvZmYg cHJpdnMuICovCi0JICBleGl0KDEpOwotCWR1cDIodHR5ZmQsIDApOwkJCS8qIEdpdmUgc3RkaW4v b3V0IHRvIHRoZSBsaW5lICovCi0JZHVwMih0dHlmZCwgMSk7Ci0JeCA9IHN5c3RlbShzKTsKLQlk ZWJ1ZyhGMTAxLCJ0dHJ1bmNtZCBzeXN0ZW0iLHMseCk7Ci0JX2V4aXQoeCA/IEJBRF9FWElUIDog MCk7Ci0gICAgfSBlbHNlIHsKLQlTSUdUWVAgKCppc3RhdCkoKSwgKCpxc3RhdCkoKTsKLQlpZiAo cGlkID09IChQSURfVCkgLTEpCQkvKiBmb3JrKCkgZmFpbGVkPyAqLwotCSAgcmV0dXJuKDApOwot CWlzdGF0ID0gc2lnbmFsKFNJR0lOVCxTSUdfSUdOKTsgLyogTGV0IHRoZSBmb3JrIGhhbmRsZSBr ZXlib2FyZCAqLwotCXFzdGF0ID0gc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7IC8qIGludGVycnVw dHMgaXRzZWxmLi4uICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgCXdoaWxlICgoKHdzdGF0ID0g d2FpdCgmc3RhdHVzcCkpICE9IHBpZCkgJiYgKHdzdGF0ICE9IC0xKSkgOwotI2Vsc2UgIC8qIE5v dCBDT01NRU5UICovCi0gICAgCXdoaWxlICgxKSB7Ci0JICAgIHdzdGF0ID0gd2FpdCgmc3RhdHVz cCk7Ci0JICAgIGRlYnVnKEYxMDEsInR0cnVuY21kIHdhaXQiLCIiLHdzdGF0KTsKLQkgICAgaWYg KHdzdGF0ID09IHBpZCB8fCB3c3RhdCA9PSAtMSkKLQkgICAgICBicmVhazsKLQl9Ci0jZW5kaWYg LyogQ09NTUVOVCAqLwotCi0JcGV4aXRzdGF0ID0gKHN0YXR1c3AgJiAweGZmKSA/IHN0YXR1c3Ag OiBzdGF0dXNwID4+IDg7Ci0JZGVidWcoRjEwMSwidHRydW5jbWQgd2FpdCBzdGF0dXNwIiwiIixz dGF0dXNwKTsKLQlkZWJ1ZyhGMTAxLCJ0dHJ1bmNtZCB3YWl0IHBleGl0c3RhdCIsIiIscGV4aXRz dGF0KTsKLQlzaWduYWwoU0lHSU5ULGlzdGF0KTsJCS8qIFJlc3RvcmUgaW50ZXJydXB0cyAqLwot CXNpZ25hbChTSUdRVUlULHFzdGF0KTsKLSAgICB9Ci0gICAgY29uY2IoKGNoYXIpZXNjY2hyKTsJ CS8qIFJlc3RvcmUgY29uc29sZSB0byBDQlJFQUsgbW9kZSAqLwotICAgIHJldHVybihzdGF0dXNw ID09IDAgPyAxIDogMCk7Ci19Ci0jZW5kaWYJLyogQ0tfUkVESVIgKi8KLQotc3RydWN0IHRtICoK LSNpZmRlZiBDS19BTlNJQwotY21kYXRlMnRtKGNoYXIgKiBkYXRlLCBpbnQgZ210KSAgICAgICAg IC8qIGRhdGUgYXMgInl5eXltbWRkIGhoOm1tOnNzIiAqLwotI2Vsc2UKLWNtZGF0ZTJ0bShkYXRl LGdtdCkgY2hhciAqIGRhdGU7IGludCBnbXQ7Ci0jZW5kaWYKLXsKLSAgICAvKiBkYXRlIGFzICJ5 eXl5bW1kZCBoaDptbTpzcyIgKi8KLSAgICBzdGF0aWMgc3RydWN0IHRtIF90bTsKLSAgICB0aW1l X3Qgbm93OwotCi0gICAgaWYgKHN0cmxlbihkYXRlKSAhPSAxNyB8fAotCWRhdGVbOF0gIT0gJyAn IHx8Ci0JZGF0ZVsxMV0gIT0gJzonIHx8Ci0JZGF0ZVsxNF0gIT0gJzonKQotICAgICAgcmV0dXJu KE5VTEwpOwotCi0gICAgdGltZSgmbm93KTsKLSAgICBpZiAoZ210KQotICAgICAgX3RtID0gKmdt dGltZSgmbm93KTsKLSAgICBlbHNlCi0gICAgICBfdG0gPSAqbG9jYWx0aW1lKCZub3cpOwotICAg IF90bS50bV95ZWFyID0gKGRhdGVbMF0tJzAnKSoxMDAwICsgKGRhdGVbMV0tJzAnKSoxMDAgKwot ICAgICAgICAgICAgICAgICAgKGRhdGVbMl0tJzAnKSoxMCAgICsgKGRhdGVbM10tJzAnKS0xOTAw OwotICAgIF90bS50bV9tb24gID0gKGRhdGVbNF0tJzAnKSoxMCAgICsgKGRhdGVbNV0tJzAnKS0x OwotICAgIF90bS50bV9tZGF5ID0gKGRhdGVbNl0tJzAnKSoxMCAgICsgKGRhdGVbN10tJzAnKTsK LSAgICBfdG0udG1faG91ciA9IChkYXRlWzldLScwJykqMTAgICArIChkYXRlWzEwXS0nMCcpOwot ICAgIF90bS50bV9taW4gID0gKGRhdGVbMTJdLScwJykqMTAgICsgKGRhdGVbMTNdLScwJyk7Ci0g ICAgX3RtLnRtX3NlYyAgPSAoZGF0ZVsxNV0tJzAnKSoxMCAgKyAoZGF0ZVsxNl0tJzAnKTsKLQot ICAgIC8qIFNob3VsZCB3ZSBzZXQgX3RtLnRtX2lzZHN0IHRvIC0xIGhlcmU/ICovCi0KLSAgICBf dG0udG1fd2RheSA9IDA7Ci0gICAgX3RtLnRtX3lkYXkgPSAwOwotCi0gICAgcmV0dXJuKCZfdG0p OwotfQotCi0jaWZkZWYgT1hPUwotI3VuZGVmIGtpbGwKLSNlbmRpZiAvKiBPWE9TICovCi0KLSNp ZmRlZiBPWE9TCi1pbnQKLXByaXZfa2lsbChwaWQsIHNpZykgaW50IHBpZCwgc2lnOyB7Ci0gICAg aW50CWk7Ci0KLSAgICBpZiAocHJpdl9vbigpKQotCWRlYnVnKEYxMDAsInByaXZfa2lsbCBwcml2 X29uIGZhaWxlZCIsIiIsMCk7Ci0gICAgaSA9IGtpbGwocGlkLCBzaWcpOwotICAgIGlmIChwcml2 X29mZigpKQotCWRlYnVnKEYxMDAsInByaXZfa2lsbCBwcml2X29mZiBmYWlsZWQiLCIiLDApOwot ICAgIHJldHVybihpKTsKLX0KLSNlbmRpZiAvKiBPWE9TICovCi0KLSNpZmRlZiBCRU9TT1JCRUJP WAotLyogI2lmZGVmIEJFX0RSXzcgKi8KLS8qCi0gIGFsYXJtKCkgZnVuY3Rpb24gbm90IHN1cHBs aWVkIHdpdGggQmUgT1MgRFI3IC0gdGhpcyBvbmUgY29udHJpYnV0ZWQgYnkKLSAgTmVhbCBQLiBN dXJwaHkuCi0qLwotCi0vKgotICBUaGlzIHNob3VsZCBtaW1pYyB0aGUgVU5JWC9QT1NJWCBhbGFy bSgpIGZ1bmN0aW9uIHdlbGwgZW5vdWdoLCB3aXRoIHRoZQotICBjYXZlYXQgdGhhdCBvbmUncyBT SUdBTFJNIGhhbmRsZXIgbXVzdCBjYWxsIGFsYXJtX2V4cGlyZWQoKSB0byBjbGVhbiB1cCB2YXJz Ci0gIGFuZCB3YWl0IGZvciB0aGUgYWxhcm0gdGhyZWFkIHRvIGZpbmlzaC4KLSovCi11bnNpZ25l ZCBpbnQKLWFsYXJtKHVuc2lnbmVkIGludCBzZWNvbmRzKSB7Ci0gICAgbG9uZyB0aW1lX2xlZnQg PSAwOwotCi0vKiBJZiBhbiBhbGFybSBpcyBhY3RpdmUsIHR1cm4gaXQgb2ZmLCBzYXZpbmcgdGhl IHVudXNlZCB0aW1lICovCi0gICAgaWYgKGFsYXJtX3RocmVhZCAhPSAtMSkgewotICAgICAgICAv KiBXZSdsbCBiZSBnZW5lcm91cyBhbmQgY291bnQgcGFydGlhbCBzZWNvbmRzIGFzIHdob2xlIHNl Y29uZHMuICovCi0gICAgICAgIHRpbWVfbGVmdCA9IGFsYXJtX3N0cnVjdC50aW1lIC0KLQkgICgo c3lzdGVtX3RpbWUoKSAtIHRpbWVfc3RhcnRlZCkgLyAxMDAwMDAwLjApOwotCi0gICAgICAgIC8q IEtpbGwgdGhlIGFsYXJtIHRocmVhZCAqLwotICAgICAgICBraWxsX3RocmVhZCAoYWxhcm1fdGhy ZWFkKTsKLQotICAgICAgICAvKiBXZSBuZWVkIHRvIGNsZWFuIHVwIGFzIHRob3VnaCB0aGUgYWxh cm0gb2NjdXJlZC4gKi8KLSAgICAgICAgdGltZV9zdGFydGVkID0gMDsKLSAgICAgICAgYWxhcm1f c3RydWN0LnRocmVhZCA9IC0xOwotICAgICAgICBhbGFybV9zdHJ1Y3QudGltZSA9IDA7Ci0gICAg ICAgIGFsYXJtX2V4cGlyZWQoKTsKLSAgICB9Ci0KLS8qIFNldCBhIG5ldyBhbGFybSBjbG9jaywg aWYgcmVxdWVzdGVkLiAqLwotICAgIGlmIChzZWNvbmRzID4gMCkgewotICAgICAgICBhbGFybV9z dHJ1Y3QudGhyZWFkID0gZmluZF90aHJlYWQoTlVMTCk7Ci0gICAgICAgIGFsYXJtX3N0cnVjdC50 aW1lID0gc2Vjb25kczsKLSAgICAgICAgdGltZV9zdGFydGVkID0gc3lzdGVtX3RpbWUoKTsKLSAg ICAgICAgYWxhcm1fdGhyZWFkID0gc3Bhd25fdGhyZWFkIChkb19hbGFybSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxhcm1fdGhyZWFkIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCX05PUk1BTF9QUklPUklUWSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAmYWxhcm1fc3RydWN0Ci0JCQkJICAgICAp OwotICAgICAgICByZXN1bWVfdGhyZWFkIChhbGFybV90aHJlYWQpOwotICAgIH0KLQotLyogTm93 IHJldHVybiBbdW51c2VkIHRpbWUgfCAwXSAqLwotICAgIHJldHVybiAoKHVuc2lnbmVkIGludCkg dGltZV9sZWZ0KTsKLX0KLQotLyoKLSAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgZGVwYXJ0dXJlIGZy b20gVU5JWC9QT1NJWCBhbGFybSBoYW5kbGluZy4gSW4gdGhlIGNhc2UKLSAgb2YgQmUncyBtaXNz aW5nIGFsYXJtKCkgZnVuY3Rpb24sIHRoaXMgc3R1ZmYgbmVlZHMgdG8gYmUgZG9uZSBpbiB0aGUg U0lHQUxSTQotICBoYW5kbGVyLiBXaGVuIEJlIGltcGxlbWVudHMgYWxhcm0oKSwgdGhpcyBmdW5j dGlvbiBjYWxsIGNhbiBiZSBlbGltaW5hdGVkCi0gIGZyb20gdXNlcidzIFNJR0FMUk0gc2lnbmFs IGhhbmRsZXJzLgotKi8KLQotdm9pZAotYWxhcm1fZXhwaXJlZCh2b2lkKSB7Ci0gICAgbG9uZyBy ZXRfdmFsOwotCi0gICAgaWYgKGFsYXJtX3RocmVhZCAhPSAtMSkgewotICAgICAgICB3YWl0X2Zv cl90aHJlYWQgKGFsYXJtX3RocmVhZCwgJnJldF92YWwpOwotICAgICAgICBhbGFybV90aHJlYWQg PSAtMTsKLSAgICB9Ci19Ci0KLS8qCi0gIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgc25vb3pl cyB0aGUgcmVxdWlzaXRlIG51bWJlciBvZiBzZWNvbmRzIGFuZCB0aGVuCi0gIFNJR0FMUk1zIHRo ZSBjYWxsaW5nIHRocmVhZC4gTm90ZSB0aGF0IGtpbGwoKSB3YW50cyBhIHBpZF90IGFyZywgd2hp bHN0IEJlCi0gIHVzZXMgdGhyZWFkX2lkOyBjdXJyZW50bHkgdGhleSBhcmUgYm90aCB0eXBkZWYn ZWQgYXMgbG9uZywgYnV0IEknbGwgZG8gdGhlCi0gIGNhc3QgYW55d2F5LiBUaGlzIGZ1bmN0aW9u IGlzIHJ1biBpbiBhIHNlcGFyYXRlIHRocmVhZC4KLSovCi0KLWxvbmcKLWRvX2FsYXJtICh2b2lk ICphbGFybV9zdHJ1Y3QpIHsKLSAgICBzbm9vemUgKChkb3VibGUpICgoc3RydWN0IEFMQVJNX1NU UlVDVCAqKSBhbGFybV9zdHJ1Y3QpLT50aW1lICogMTAwMDAwMC4wKTsKLSAgICBraWxsICgocGlk X3QpKChzdHJ1Y3QgQUxBUk1fU1RSVUNUICopIGFsYXJtX3N0cnVjdCktPnRocmVhZCwgU0lHQUxS TSk7Ci0gICAgdGltZV9zdGFydGVkID0gMDsKLSAgICAoKHN0cnVjdCBBTEFSTV9TVFJVQ1QgKikg YWxhcm1fc3RydWN0KS0+dGhyZWFkID0gLTE7Ci0gICAgKChzdHJ1Y3QgQUxBUk1fU1RSVUNUICop IGFsYXJtX3N0cnVjdCktPnRpbWUgPSAwOwotfQotLyogI2VuZGlmICovIC8qIEJFX0RSXzcgKi8K LSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotCi0jaWZkZWYgUGxhbjkKLQotaW50Ci1wOXR0eWN0 bChjaGFyIGxldHRlciwgaW50IG51bSwgaW50IHBhcmFtKSB7Ci0gICAgY2hhciBjbWRbMjBdOwot ICAgIGludCBsZW47Ci0KLSAgICBpZiAodHR5Y3RsZmQgPCAwKQotICAgICAgcmV0dXJuIC0xOwot Ci0gICAgY21kWzBdID0gbGV0dGVyOwotICAgIGlmIChudW0pCi0gICAgICBsZW4gPSBzcHJpbnRm KGNtZCArIDEsICIlZCIsIHBhcmFtKSArIDE7Ci0gICAgZWxzZSB7Ci0JY21kWzFdID0gcGFyYW07 Ci0JbGVuID0gMjsKLSAgICB9Ci0gICAgaWYgKHdyaXRlKHR0eWN0bGZkLCBjbWQsIGxlbikgPT0g bGVuKSB7Ci0JY21kW2xlbl0gPSAwOwotCS8qIGZwcmludGYoc3Rkb3V0LCAid3JvdGUgJyVzJ1xu IiwgY21kKTsgKi8KLQlyZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQK LXA5dHR5cGFyaXR5KGNoYXIgbCkgewotICAgIHJldHVybiBwOXR0eWN0bCgncCcsIDAsIGwpOwot fQotCi1pbnQKLXA5dHRoZmxvdyhpbnQgZmxvdywgaW50IHN0YXR1cykgewotICAgIHJldHVybiBw OXR0eWN0bCgnbScsIDEsIHN0YXR1cyk7Ci19Ci0KLWludAotcDl0dHNzcGQoaW50IGNwcykgewot ICAgIGlmIChwOXR0eWN0bCgnYicsIDEsIGNwcyAqIDEwKSA8IDApCi0gICAgICByZXR1cm4gLTE7 Ci0gICAgdHR5bGFzdHNwZWVkID0gY3BzICogMTA7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludAot cDlvcGVudHR5Y3RsKGNoYXIgKnR0bmFtZSkgewotICAgIGNoYXIgbmFtZVsxMDBdOwotCi0gICAg aWYgKHR0eWN0bGZkID49IDApIHsKLQljbG9zZSh0dHljdGxmZCk7Ci0JdHR5Y3RsZmQgPSAtMTsK LQl0dHlsYXN0c3BlZWQgPSAtMTsKLSAgICB9Ci0gICAgc3ByaW50ZihuYW1lLCAiJXNjdGwiLCB0 dG5hbWUpOwotICAgIHR0eWN0bGZkID0gb3BlbihuYW1lLCAxKTsKLSAgICByZXR1cm4gdHR5Y3Rs ZmQ7Ci19Ci0KLWludAotcDljb25jYigpIHsKLSAgICBpZiAoY29uc2N0bGZkID49IDApIHsKLQlp ZiAod3JpdGUoY29uc2N0bGZkLCAicmF3b24iLCA1KSA9PSA1KQotCSAgcmV0dXJuIDA7Ci0gICAg fQotICAgIHJldHVybiAtMTsKLX0KLQotaW50Ci1wOWNvbmJpbigpIHsKLSAgICByZXR1cm4gcDlj b25jYigpOwotfQotCi1pbnQKLXA5Y29ucmVzKCkgewotICAgIGlmIChjb25zY3RsZmQgPj0gMCkg ewotCWlmICh3cml0ZShjb25zY3RsZmQsICJyYXdvZmYiLCA2KSA9PSA2KQotCSAgcmV0dXJuIDA7 Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotaW50Ci1wOXNuZGJyayhpbnQgbXNlYykgewot ICAgIGlmICh0dHljdGxmZCA+PSAwKSB7Ci0JY2hhciBjbWRbMjBdOwotCWludCBpID0gc3ByaW50 ZihjbWQsICJrJWQiLCBtc2VjKTsKLQlpZiAod3JpdGUodHR5Y3RsZmQsIGNtZCwgaSkgPT0gaSkK LQkgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWludAotY29ud3JpdGUo Y2hhciAqYnVmLCBpbnQgbikgewotICAgIGludCB4OwotICAgIHN0YXRpYyBpbnQgbGVuZ3RoID0g MDsKLSAgICBzdGF0aWMgaW50IGhvbGRpbmdjciA9IDA7Ci0gICAgaW50IG5vcm1hbCA9IDA7Ci0g ICAgZm9yICh4ID0gMDsgeCA8IG47IHgrKykgewotCWNoYXIgYyA9IGJ1Zlt4XTsKLQlpZiAoYyA9 PSAwMDcpIHsKLQkgICAgaWYgKG5vcm1hbCkgewotCQl3cml0ZSgxLCBidWYgKyAoeCAtIG5vcm1h bCksIG5vcm1hbCk7Ci0JCWxlbmd0aCArPSBub3JtYWw7Ci0JCW5vcm1hbCA9IDA7Ci0JICAgIH0K LQkgICAgLyogd3JpdGUobm9pc2VmZCwgIjEwMDAgMzAwIiwgOCk7ICovCi0JICAgIGhvbGRpbmdj ciA9IDA7Ci0JfSBlbHNlIGlmIChjID09ICdccicpIHsKLQkgICAgaWYgKG5vcm1hbCkgewotCQl3 cml0ZSgxLCBidWYgKyAoeCAtIG5vcm1hbCksIG5vcm1hbCk7Ci0JCWxlbmd0aCArPSBub3JtYWw7 Ci0JCW5vcm1hbCA9IDA7Ci0JICAgIH0KLQkgICAgaG9sZGluZ2NyID0gMTsKLQl9IGVsc2UgaWYg KGMgPT0gJ1xuJykgewotCSAgICB3cml0ZSgxLCBidWYgKyAoeCAtIG5vcm1hbCksIG5vcm1hbCAr IDEpOwotCSAgICBub3JtYWwgPSAwOwotCSAgICBsZW5ndGggPSAwOwotCSAgICBob2xkaW5nY3Ig PSAwOwotCX0gZWxzZSBpZiAoYyA9PSAnXGInKSB7Ci0JICAgIGlmIChub3JtYWwpIHsKLQkJd3Jp dGUoMSwgYnVmICsgKHggLSBub3JtYWwpLCBub3JtYWwpOwotCQlsZW5ndGggKz0gbm9ybWFsOwot CQlub3JtYWwgPSAwOwotCSAgICB9Ci0JICAgIGlmIChsZW5ndGgpIHsKLQkJd3JpdGUoMSwgJmMs IDEpOwotCQlsZW5ndGgtLTsKLQkgICAgfQotCSAgICBob2xkaW5nY3IgPSAwOwotCX0gZWxzZSB7 Ci0JICAgIGlmIChob2xkaW5nY3IpIHsKLQkJY2hhciBiID0gJ1xiJzsKLQkJd2hpbGUgKGxlbmd0 aC0tID4gMCkKLQkJICB3cml0ZSgxLCAmYiwgMSk7Ci0JCWxlbmd0aCA9IDA7CS8qIGNvbXBpbGVy IGJ1ZyAqLwotCSAgICB9Ci0JICAgIGhvbGRpbmdjciA9IDA7Ci0JICAgIG5vcm1hbCsrOwotCX0K LSAgICB9Ci0gICAgaWYgKG5vcm1hbCkgewotCXdyaXRlKDEsIGJ1ZiArICh4IC0gbm9ybWFsKSwg bm9ybWFsKTsKLQlsZW5ndGggKz0gbm9ybWFsOwotICAgIH0KLSAgICByZXR1cm4gbjsKLX0KLQot dm9pZAotY29ucHJpbnQoY2hhciAqZm10LCAuLi4pIHsKLSAgICBzdGF0aWMgY2hhciBidWZbMTAw MF07CQkvKiBub3Qgc2FmZSBpZiBvbiB0aGUgc3RhY2sgKi8KLQotICAgIHZhX2xpc3QgYXA7Ci0g ICAgaW50IGk7Ci0KLSAgICB2YV9zdGFydChhcCwgZm10KTsKLSAgICBpID0gdnNwcmludGYoYnVm LCBmbXQsIGFwKTsKLSAgICBjb253cml0ZShidWYsIGkpOwotfQotI2VuZGlmIC8qIFBsYW45ICov Ci0KLS8qIGZwcmludGYsIHByaW50ZiwgcGVycm9yIHJlcGxhY2VtZW50cy4uLiAqLwotCi0vKiBm IHAgciBpIG4gdCBmICovCi0KLSNpZmRlZiBVTklYCi0jaWZkZWYgQ0tfQU5TSUMKLSNpbmNsdWRl IDxzdGRhcmcuaD4KLSNlbHNlIC8qIENLX0FOU0lDICovCi0jaWZkZWYgX19HTlVDX18KLSNpbmNs dWRlIDxzdGRhcmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8dmFyYXJncy5oPgotI2VuZGlmCS8qIF9f R05VQ19fICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNpZmRlZiBmcHJpbnRmCi0jdW5kZWYg ZnByaW50Zgotc3RhdGljIGNoYXIgc3RyMVs0MDk2XTsKLXN0YXRpYyBjaGFyIHN0cjJbNDA5Nl07 Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2t4ZnByaW50ZihGSUxFICogZmlsZSwgY29uc3QgY2hh ciAqIGZvcm1hdCwgLi4uKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWNreGZwcmludGYodmFfYWxp c3QpIHZhX2RjbAotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBja3hmcHJpbnRmICovIHsKLSAg ICBpbnQgaSwgaiwgbGVuLCBnb3RfY3I7Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIGludCByYyA9 IDA7Ci0KLSNpZmRlZiBDS19BTlNJQwotICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0jZWxz ZSAvKiBDS19BTlNJQyAqLwotICAgIGNoYXIgKiBmb3JtYXQ7Ci0gICAgRklMRSAqIGZpbGU7Ci0g ICAgdmFfc3RhcnQoYXJncyk7Ci0gICAgZmlsZSA9IHZhX2FyZyhhcmdzLEZJTEUgKik7Ci0gICAg Zm9ybWF0ID0gdmFfYXJnKGFyZ3MsY2hhciAqKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotCi0g ICAgaWYgKCFpbnNlcnZlciB8fCAoZmlsZSAhPSBzdGRvdXQgJiYgZmlsZSAhPSBzdGRlcnIgJiYg ZmlsZSAhPSBzdGRpbikpIHsKLQlyYyA9IHZmcHJpbnRmKGZpbGUsZm9ybWF0LGFyZ3MpOwotICAg IH0gZWxzZSB7Ci0JdW5zaWduZWQgaW50IGM7Ci0gICAgICAgIHJjID0gdnNwcmludGYoc3RyMSwg Zm9ybWF0LCBhcmdzKTsKLSAgICAgICAgbGVuID0gc3RybGVuKHN0cjEpOwotICAgICAgICBpZiAo bGVuID49IHNpemVvZihzdHIxKSkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwiY2t4ZnByaW50 ZigpIGJ1ZmZlciBvdmVyZmxvdyIsIiIsbGVuKTsKLSAgICAgICAgICAgIGRvZXhpdChCQURfRVhJ VCwxKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGkgPSAwLCBqID0gMCwgZ290X2NyID0gMDsK LQkgICAgIGkgPCBsZW4gJiYgaiA8IHNpemVvZihzdHIxKS0yOwotCSAgICAgaSsrLCBqKysgKSB7 Ci0JICAgIC8qIFdlIGNhbid0IHVzZSAyNTUgYXMgYSBjYXNlIGxhYmVsIGJlY2F1c2Ugb2Ygc2ln bmVkIGNoYXJzICovCi0JICAgIGMgPSAodW5zaWduZWQpKHN0cjFbaV0gJiAweGZmKTsKLSNpZmRl ZiBUTkNPREUKLQkgICAgaWYgKGMgPT0gMjU1KSB7Ci0JCWlmIChnb3RfY3IgJiYgIVRFTE9QVF9N RShURUxPUFRfQklOQVJZKSkKLQkJICBzdHIyW2orK10gPSAnXDAnOwotCQlzdHIyW2orK10gPSBJ QUM7Ci0JCXN0cjJbal0gPSBJQUM7Ci0JCWdvdF9jciA9IDA7Ci0JICAgIH0gZWxzZQotI2VuZGlm IC8qIFROQ09ERSAqLwotCSAgICBzd2l0Y2ggKGMpIHsKLQkgICAgICBjYXNlICdccic6Ci0gICAg ICAgICAgICAgICAgaWYgKGdvdF9jcgotI2lmZGVmIFROQ09ERQotCQkgICAgJiYgIVRFTE9QVF9N RShURUxPUFRfQklOQVJZKQotI2VuZGlmIC8qIFROQ09ERSAqLwotCQkgICAgKQotCQkgIHN0cjJb aisrXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0cjFbaV07Ci0gICAgICAg ICAgICAgICAgZ290X2NyID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQkgICAgICBjYXNl ICdcbic6Ci0gICAgICAgICAgICAgICAgaWYgKCFnb3RfY3IpCi0JCSAgc3RyMltqKytdID0gJ1xy JzsKLSAgICAgICAgICAgICAgICBzdHIyW2pdID0gc3RyMVtpXTsKLSAgICAgICAgICAgICAgICBn b3RfY3IgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICAgIGRlZmF1bHQ6Ci0gICAg ICAgICAgICAgICAgaWYgKGdvdF9jcgotI2lmZGVmIFROQ09ERQotCQkgICAgJiYgIVRFTE9QVF9N RShURUxPUFRfQklOQVJZKQotI2VuZGlmIC8qIFROQ09ERSAqLwotCQkgICAgKQotCQkgIHN0cjJb aisrXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0cjFbaV07Ci0gICAgICAg ICAgICAgICAgZ290X2NyID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBp ZiAoZ290X2NyCi0jaWZkZWYgVE5DT0RFCi0gICAgICAgICAgICAgJiYgIVRFTE9QVF9NRShURUxP UFRfQklOQVJZKQotI2VuZGlmIC8qIFROQ09ERSAqLwotICAgICAgICAgICAgICkKLSAgICAgICAg ICAgIHN0cjJbaisrXSA9ICdcMCc7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotI2lmZGVmIFROQ09E RQotICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkKLQkgIGNrX3RuX2Vu Y3J5cHQoc3RyMixqKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNlbmRpZiAvKiBDS19FTkNSWVBU SU9OICovCi0jaWZkZWYgQ0tfU1NMCi0JaWYgKGluc2VydmVyICYmIChzc2xfYWN0aXZlX2ZsYWcg fHwgdGxzX2FjdGl2ZV9mbGFnKSkgewotCSAgICAvKiBXcml0ZSB1c2luZyBTU0wgKi8KLSAgICAg ICAgICAgIGNoYXIgKiBwID0gc3RyMjsKLSAgICAgICAgICBzc2xfcmV0cnk6Ci0gICAgICAgICAg ICBpZiAoc3NsX2FjdGl2ZV9mbGFnKQotCSAgICAgIHJjID0gU1NMX3dyaXRlKHNzbF9jb24sIHAs IGopOwotICAgICAgICAgICAgZWxzZQotCSAgICAgIHJjID0gU1NMX3dyaXRlKHRsc19jb24sIHAs IGopOwotCSAgICBkZWJ1ZyhGMTExLCJja3hmcHJpbnRmIiwiU1NMX3dyaXRlIixyYyk7Ci0gICAg ICAgICAgICBzd2l0Y2ggKFNTTF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxz X2NvbixyYykpIHsKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgotICAgICAgICAgICAgICAg IGlmIChyYyA9PSBqKQotCQkgIGJyZWFrOwotICAgICAgICAgICAgICAgIHAgKz0gcmM7Ci0gICAg ICAgICAgICAgICAgaiAtPSByYzsKLSAgICAgICAgICAgICAgICBnb3RvIHNzbF9yZXRyeTsKLQkg ICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dB TlRfUkVBRDoKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgotICAgICAgICAgICAgICAg IGlmIChyYyAhPSAwKQotCQkgIHJldHVybigtMSk7Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfV0FO VF9YNTA5X0xPT0tVUDoKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6Ci0JICAgICAgY2FzZSBT U0xfRVJST1JfWkVST19SRVRVUk46Ci0JICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy YyA9IDA7Ci0gICAgICAgICAgICB9Ci0JfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAg ICAgIGZ3cml0ZShzdHIyLHNpemVvZihjaGFyKSxqLHN0ZG91dCk7Ci0gICAgfQotICAgIHZhX2Vu ZChhcmdzKTsKLSAgICByZXR1cm4ocmMpOwotfQotI2VuZGlmIC8qIGZwcmludGYgKi8KLQotLyog cCByIGkgbiB0IGYgKi8KLQotI2lmZGVmIHByaW50ZgotI3VuZGVmIHByaW50ZgotaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLWNreHByaW50Zihjb25zdCBjaGFyICogZm9ybWF0LCAuLi4pCi0jZWxzZSAv KiBDS19BTlNJQyAqLwotY2t4cHJpbnRmKHZhX2FsaXN0KSB2YV9kY2wKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotLyogY2t4cHJpbnRmICovIHsKLSAgICBpbnQgaSwgaiwgbGVuLCBnb3RfY3I7Ci0g ICAgdmFfbGlzdCBhcmdzOwotICAgIGludCByYyA9IDA7Ci0KLSNpZmRlZiBDS19BTlNJQwotICAg IHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0jZWxzZSAvKiBDS19BTlNJQyAqLwotICAgIGNoYXIg KiBmb3JtYXQ7Ci0gICAgdmFfc3RhcnQoYXJncyk7Ci0gICAgZm9ybWF0ID0gdmFfYXJnKGFyZ3Ms Y2hhciAqKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotCi0gICAgaWYgKCFpbnNlcnZlcikgewot CXJjID0gdnByaW50Zihmb3JtYXQsIGFyZ3MpOwotICAgIH0gZWxzZSB7Ci0JdW5zaWduZWQgaW50 IGM7Ci0gICAgICAgIHJjID0gdnNwcmludGYoc3RyMSwgZm9ybWF0LCBhcmdzKTsKLSAgICAgICAg bGVuID0gc3RybGVuKHN0cjEpOwotICAgICAgICBpZiAobGVuID49IHNpemVvZihzdHIxKSkgewot ICAgICAgICAgICAgZGVidWcoRjEwMSwiY2t4cHJpbnRmKCkgYnVmZmVyIG92ZXJmbG93IiwiIixs ZW4pOwotICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDEpOwotICAgICAgICB9Ci0gICAgICAg IGZvciAoaSA9IDAsIGogPSAwLCBnb3RfY3I9MDsKLQkgICAgIGkgPCBsZW4gJiYgaiA8IHNpemVv ZihzdHIxKS0yOwotCSAgICAgaSsrLCBqKysgKSB7Ci0JICAgIGMgPSAodW5zaWduZWQpKHN0cjFb aV0gJiAweGZmKTsKLSNpZmRlZiBUTkNPREUKLQkgICAgaWYgKGMgPT0gMjU1KSB7Ci0JCWlmIChn b3RfY3IgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKSkKLQkJICBzdHIyW2orK10gPSAnXDAn OwotCQlzdHIyW2orK10gPSBJQUM7Ci0JCXN0cjJbal0gPSBJQUM7Ci0JCWdvdF9jciA9IDA7Ci0J ICAgIH0gZWxzZQotI2VuZGlmIC8qIFROQ09ERSAqLwotCSAgICBzd2l0Y2ggKGMpIHsKLQkgICAg ICBjYXNlICdccic6Ci0gICAgICAgICAgICAgICAgaWYgKGdvdF9jcgotI2lmZGVmIFROQ09ERQot CQkgICAgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKQotI2VuZGlmIC8qIFROQ09ERSAqLwot CQkgICAgKQotCQkgIHN0cjJbaisrXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgc3RyMltqXSA9 IHN0cjFbaV07Ci0gICAgICAgICAgICAgICAgZ290X2NyID0gMTsKLSAgICAgICAgICAgICAgICBi cmVhazsKLQkgICAgICBjYXNlICdcbic6Ci0gICAgICAgICAgICAgICAgaWYgKCFnb3RfY3IpCi0J CSAgc3RyMltqKytdID0gJ1xyJzsKLSAgICAgICAgICAgICAgICBzdHIyW2pdID0gc3RyMVtpXTsK LSAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGdvdF9jcgotI2lmZGVmIFROQ09ERQot CQkgICAgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKQotI2VuZGlmIC8qIFROQ09ERSAqLwot CQkgICAgKQotCQkgIHN0cjJbaisrXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgc3RyMltqXSA9 IHN0cjFbaV07Ci0gICAgICAgICAgICAgICAgZ290X2NyID0gMDsKLSAgICAgICAgICAgICAgICBi cmVhazsKLQkgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChnb3RfY3IKLSNpZmRlZiBUTkNP REUKLSAgICAgICAgICAgICAmJiAhVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpCi0jZW5kaWYgLyog VE5DT0RFICovCi0gICAgICAgICAgICAgKQotICAgICAgICAgICAgc3RyMltqKytdID0gJ1wwJzsK LSNpZmRlZiBDS19FTkNSWVBUSU9OCi0jaWZkZWYgVE5DT0RFCi0gICAgICAgIGlmIChURUxPUFRf TUUoVEVMT1BUX0VOQ1JZUFRJT04pKQotCSAgY2tfdG5fZW5jcnlwdChzdHIyLGopOwotI2VuZGlm IC8qIFROQ09ERSAqLwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wK LQlpZiAoaW5zZXJ2ZXIgJiYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpKSB7 Ci0gICAgICAgICAgICBjaGFyICogcCA9IHN0cjI7Ci0JICAgIC8qIFdyaXRlIHVzaW5nIFNTTCAq LwotICAgICAgICAgIHNzbF9yZXRyeToKLSAgICAgICAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcp Ci0JICAgICAgcmMgPSBTU0xfd3JpdGUoc3NsX2NvbiwgcCwgaik7Ci0gICAgICAgICAgICBlbHNl Ci0JICAgICAgcmMgPSBTU0xfd3JpdGUodGxzX2NvbiwgcCwgaik7Ci0JICAgIGRlYnVnKEYxMTEs ImNreHByaW50ZiIsIlNTTF93cml0ZSIscmMpOwotICAgICAgICAgICAgc3dpdGNoIChTU0xfZ2V0 X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24scmMpKSB7Ci0JICAgICAgY2Fz ZSBTU0xfRVJST1JfTk9ORToKLSAgICAgICAgICAgICAgICBpZiAocmMgPT0gaikKLQkJICBicmVh azsKLSAgICAgICAgICAgICAgICBwICs9IHJjOwotICAgICAgICAgICAgICAgIGogLT0gcmM7Ci0g ICAgICAgICAgICAgICAgZ290byBzc2xfcmV0cnk7Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfV0FO VF9XUklURToKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0JICAgICAgY2FzZSBT U0xfRVJST1JfU1lTQ0FMTDoKLSAgICAgICAgICAgICAgICBpZiAocmMgIT0gMCkKLQkJICByZXR1 cm4oLTEpOwotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6Ci0JICAgICAg Y2FzZSBTU0xfRVJST1JfU1NMOgotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgot CSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgfQot CX0gZWxzZQotI2VuZGlmIC8qIENLX1NTTCAqLwotCSAgcmMgPSBmd3JpdGUoc3RyMixzaXplb2Yo Y2hhciksaixzdGRvdXQpOwotICAgIH0KLSAgICB2YV9lbmQoYXJncyk7Ci0gICAgcmV0dXJuKHJj KTsKLX0KLSNlbmRpZiAvKiBwcmludGYgKi8KLQotLyogIHAgZSByIHIgbyByICAqLwotCi0jaWZk ZWYgcGVycm9yCi0jdW5kZWYgcGVycm9yCi1fUFJPVE9UWVAoY2hhciAqIGNrX2VycnN0ciwoVk9J RCkpOwotI2lmZGVmIE5FWFQKLXZvaWQKLSNlbHNlCi0jaWZkZWYgQ0tfU0NPVjUKLXZvaWQKLSNl bHNlCi1pbnQKLSNlbmRpZiAvKiBDS19TQ09WNSAqLwotI2VuZGlmIC8qIE5FWFQgKi8KLSNpZmRl ZiBDS19BTlNJQwotY2t4cGVycm9yKGNvbnN0IGNoYXIgKiBzdHIpCi0jZWxzZSAvKiBDS19BTlNJ QyAqLwotY2t4cGVycm9yKHN0cikgY2hhciAqIHN0cjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot LyogY2t4cGVycm9yICovIHsKLSAgICBjaGFyICogZXJyc3RyID0gY2tfZXJyc3RyKCk7Ci0jaWZu ZGVmIE5FWFQKLSNpZm5kZWYgQ0tfU0NPVjUKLSAgICByZXR1cm4KLSNlbmRpZiAvKiBDS19TQ09W NSAqLwotI2VuZGlmIC8qIE5FWFQgKi8KLSAgICAgIGNreHByaW50ZigiJXMlcyAlc1xuIixzdHIs KmVycnN0cj8iOiI6IiIsZXJyc3RyKTsKLX0KLSNlbmRpZiAvKiBwZXJyb3IgKi8KLSNlbmRpZiAv KiBVTklYICovCi0KLSNpZmRlZiBNSU5JWDIKLQotLyogTWluaXggZG9lc24ndCBoYXZlIGEgZ2V0 dGltZW9mZGF5IGNhbGwgKGJ1dCBNSU5JWDMgZG9lcykuCi0gKiBXZSBmYWtlIG9uZSBoZXJlIHVz aW5nIHRpbWUoMikKLSAqLwotCi0jaWZuZGVmIE1JTklYMwotaW50Ci1nZXR0aW1lb2ZkYXkoc3Ry dWN0IHRpbWV2YWwgKnRwLCBzdHJ1Y3QgdGltZXpvbmUgKnR6cCkgewotICAgIHRwLT50dl91c2Vj ID0gMEw7CQkJLyogQ2xvc2UgZW5vdWdoIGZvciBob3JzZXNob2VzICovCi0gICAgaWYodGltZSgm KHRwLT50dl9zZWMpKT09LTEpCi0gICAgICByZXR1cm4oLTEpOwotICAgIHJldHVybigwKTsKLX0K LSNlbmRpZgkvKiBNSU5JWDMgKi8KLQotI2lmbmRlZiBNSU5JWDMKLWludAotcmVhZGxpbmsoY29u c3QgY2hhciAqcGF0aCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmc2l6KSB7Ci0gICAgZXJybm8gPSBF Tk9TWVM7Ci0gICAgcmV0dXJuKC0xKTsKLX0KLSNlbmRpZgkvKiBNSU5JWDMgKi8KLQotI2VuZGlm IC8qIE1JTklYMiAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2t1dGlvLmMuYzk5IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja3V0aW8uYy5jOTkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NTY0ZGUu LjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V0 aW8uYy5jOTkKKysrIC9kZXYvbnVsbApAQCAtMSwxNjA1MCArMCwwIEBACi0jZGVmaW5lIENLVVRJ T19DCi0KLSNpZmRlZiBhZWdpcwotY2hhciAqY2t4diA9ICJBZWdpcyBDb21tdW5pY2F0aW9ucyBz dXBwb3J0LCA5LjAuMzI2LCAyMCBBdWd1c3QgMjAxMSI7Ci0jZWxzZQotI2lmZGVmIFBsYW45Ci1j aGFyICpja3h2ID0gIlBsYW4gOSBDb21tdW5pY2F0aW9ucyBzdXBwb3J0LCA5LjAuMzI2LCAyMCBB dWd1c3QgMjAxMSI7Ci0jZWxzZQotY2hhciAqY2t4diA9ICJVTklYIENvbW11bmljYXRpb25zIHN1 cHBvcnQsIDkuMC4zMjYsIDIwIEF1Z3VzdCAyMDExIjsKLSNlbmRpZiAvKiBQbGFuOSAqLwotI2Vu ZGlmIC8qIGFlZ2lzICovCi0KLS8qICBDIEsgVSBUIEkgTyAgKi8KLQotLyogQy1LZXJtaXQgaW50 ZXJydXB0LCBjb21tdW5pY2F0aW9ucyBjb250cm9sIGFuZCBJL08gZnVuY3Rpb25zIGZvciBVTklY ICovCi0KLS8qCi0gIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiAoZmRjQGNvbHVtYmlhLmVkdSksCi0g IENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlv cmsgQ2l0eS4KLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCi0gICAgVHJ1c3RlZXMgb2Yg Q29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmln aHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQot ICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIg YW5kIHBlcm1pc3Npb25zLgotKi8KLQotLyoKLSAgTk9URSBUTyBDT05UUklCVVRPUlM6IFRoaXMg ZmlsZSwgYW5kIGFsbCB0aGUgb3RoZXIgQy1LZXJtaXQgZmlsZXMsIG11c3QgYmUKLSAgY29tcGF0 aWJsZSB3aXRoIEMgcHJlcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgb25seSAjaWZkZWYsICNlbHNl LCAjZW5kaWYsCi0gICNkZWZpbmUsIGFuZCAjdW5kZWYuICBQbGVhc2UgZG8gbm90IHVzZSAjaWYs IGxvZ2ljYWwgb3BlcmF0b3JzLCBvciBvdGhlcgotICBwcmVwcm9jZXNzb3IgZmVhdHVyZXMgaW4g YW55IG9mIHRoZSBwb3J0YWJsZSBDLUtlcm1pdCBtb2R1bGVzLiAgWW91IGNhbiwKLSAgb2YgY291 cnNlLCB1c2UgdGhlc2UgY29uc3RydWN0aW9ucyBpbiBwbGF0Zm9ybS1zcGVjaWZpYyBtb2R1bGVz IHdoZW4gdGhleQotICBhcmUgc3VwcG9ydGVkIGJ5IGFsbCBjb21waWxlcnMvcHJlcHJvY2Vzc29y cyB0aGF0IGNvdWxkIGJlIHVzZWQgb24gdGhhdAotICBwbGF0Zm9ybS4KLSovCi0KLWV4dGVybiBp bnQgbmV0dHlwZTsJCQkvKiBEZWZpbmVkIGluIGNrY21haS5jICovCi1leHRlcm4gaW50IGR1cGxl eDsKLQotLyogSW5jbHVkZXMgKi8KLQotI2luY2x1ZGUgImNrY3N5bS5oIgkJCS8qIFRoaXMgbXVz dCBnbyBmaXJzdCAgICovCi0jaW5jbHVkZSAiY2tjZGViLmgiCQkJLyogVGhpcyBtdXN0IGdvIHNl Y29uZCAgKi8KLQotI2lmZGVmIE9TRjEzCi0jaWZkZWYgQ0tfQU5TSUMKLSNpZmRlZiBfTk9fUFJP VE8KLSN1bmRlZiBfTk9fUFJPVE8KLSNlbmRpZiAvKiBfTk9fUFJPVE8gKi8KLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotI2VuZGlmIC8qIE9TRjEzICovCi0KLSNpZm5kZWYgSFBVWFBSRTY1Ci0jaW5j bHVkZSA8ZXJybm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9scyAqLwotI2Vsc2UKLSNpZm5k ZWYgRVJSTk9fSU5DTFVERUQKLSNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51bWJlciBz eW1ib2xzICovCi0jZW5kaWYJLyogRVJSTk9fSU5DTFVERUQgKi8KLSNlbmRpZgkvKiBIUFVYUFJF NjUgKi8KLQotI2lmZGVmIF9fMzg2QlNEX18KLSNkZWZpbmUgRU5PVENPTk4gNTcKLSNlbHNlCi0j aWZkZWYgX19ic2RpX18KLSNkZWZpbmUgRU5PVENPTk4gNTcKLSNlbHNlCi0jaWZkZWYgX19GcmVl QlNEX18KLSNkZWZpbmUgRU5PVENPTk4gNTcKLSNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLwotI2Vu ZGlmIC8qIF9fYnNkaV9fICovCi0jZW5kaWYgLyogX18zODZCU0RfXyAqLwotCi0jaWZkZWYgU0NP X09TUjUwNAotI2RlZmluZSBOQkJZIDgKLSNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCi0KLSNpZmRl ZiBQbGFuOQotI2RlZmluZSBTRUxFQ1QKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUg PHNlbGVjdC5oPgotI2RlZmluZSBGRF9TRVRTSVpFICgzICogc2l6ZW9mKGxvbmcpICogOCkKLXN0 YXRpYyBzdHJ1Y3QgdGltZXZhbCB0djsKLSNlbmRpZiAvKiBQbGFuOSAqLwotCi0jaWZkZWYgQ0xJ WAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYgLyogQ0xJWCAqLwotCi0jaW5jbHVkZSAi Y2tjbmV0LmgiCQkJLyogU3ltYm9scyBmb3IgbmV0d29yayB0eXBlcy4gKi8KLSNpZmRlZiBDS19T U0wKLSNpbmNsdWRlICJja19zc2wuaCIKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotLyoKLSAgVGhl IGRpcmVjdG9yeS1yZWxhdGVkIGluY2x1ZGVzIGFyZSBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byB0 ZXN0IHNvbWUKLSAgZmlsZS1zeXN0ZW0tcmVsYXRlZCBzeW1ib2xzIHRvIGZpbmQgb3V0IHdoaWNo IHN5c3RlbSB3ZSdyZSBiZWluZyBjb21waWxlZAotICB1bmRlci4gIEZvciBleGFtcGxlLCBNQVhO QU1MRU4gaXMgZGVmaW5lZCBpbiBCU0Q0LjIgYnV0IG5vdCA0LjEuCi0qLwotI2lmZGVmIFNESVJF TlQJCQkJLyogRGlyZWN0b3J5IGJpdHMuLi4gKi8KLSNkZWZpbmUgRElSRU5UCi0jZW5kaWYgLyog U0RJUkVOVCAqLwotCi0jaWZkZWYgWE5ESVIKLSNpbmNsdWRlIDxzeXMvbmRpci5oPgotI2Vsc2Ug LyogIVhORElSICovCi0jaWZkZWYgTkRJUgotI2luY2x1ZGUgPG5kaXIuaD4KLSNlbHNlIC8qICFO RElSLCAhWE5ESVIgKi8KLSNpZmRlZiBSVFUKLSNpbmNsdWRlICIvdXNyL2xpYi9uZGlyLmgiCi0j ZWxzZSAvKiAhUlRVLCAhTkRJUiwgIVhORElSICovCi0jaWZkZWYgRElSRU5UCi0jaWZkZWYgU0RJ UkVOVAotI2luY2x1ZGUgPHN5cy9kaXJlbnQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8ZGlyZW50Lmg+ Ci0jZW5kaWYgLyogU0RJUkVOVCAqLwotI2Vsc2UgLyogIVJUVSwgIU5ESVIsICFYTkRJUiwgIURJ UkVOVCwgaS5lLiBhbGwgb3RoZXJzICovCi0jaW5jbHVkZSA8c3lzL2Rpci5oPgotI2VuZGlmIC8q IERJUkVOVCAqLwotI2VuZGlmIC8qIFJUVSAqLwotI2VuZGlmIC8qIE5ESVIgKi8KLSNlbmRpZiAv KiBYTkRJUiAqLwotCi0jaWZkZWYgUU5YCi0jaW5jbHVkZSA8c3lzL2Rldi5oPgotI2VuZGlmIC8q IFFOWCAqLwotCi0jaWZkZWYgSFBVWDUKLSNpZm5kZWYgVENQU09DS0VUCi0vKiBJIGRvbid0IGtu b3cgd2h5IHRoaXMgaXMgbmVlZGVkIGhlcmUgc2luY2Ugd2UgbmV2ZXIgcmVmZXJlbmNlIGJ6ZXJv KCkuICovCi0vKiBCdXQgd2l0aG91dCBpdCBDLUtlcm1pdCB3b24ndCBsaW5rIGluIGFuIEhQLVVY IDUueHggbm9uLVRDUCBidWlsZC4gKi8KLXZvaWQKLWJ6ZXJvKHMsbikgY2hhciAqczsgaW50IG47 IHsKLSAgICBleHRlcm4gY2hhciAqIG1lbXNldCgpOwotICAgIG1lbXNldChzLDAsbik7Ci19Ci0j ZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogSFBVWDUgKi8KLQotLyogRGVmaW5pdGlv biBvZiBIWiwgdXNlZCBpbiBtc2xlZXAoKSAqLwotCi0jaWZkZWYgTUlQUwotI2RlZmluZSBIWiAo IDEwMDAgLyBDTE9DS19USUNLICkKLSNlbHNlICAvKiBNSVBTICovCi0jaWZkZWYgQVRUU1YKLSNp Zm5kZWYgTkFQCi0jaWZkZWYgVFJTMTYKLSNkZWZpbmUgSFogKCAxMDAwIC8gQ0xPQ0tfVElDSyAp Ci0jZW5kaWYgLyogVFJTMTYgKi8KLSNpZmRlZiBOQVBIQUNLCi0jZGVmaW5lIG5hcCh4KSAodm9p ZClzeXNjYWxsKDMxMTIsICh4KSkKLSNkZWZpbmUgTkFQCi0jZW5kaWYgLyogTkFQSEFDSyAqLwot I2VuZGlmIC8qIE5BUCAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogTUlQUyAqLwot Ci0jaWZkZWYgTV9VTklYCi0jdW5kZWYgTkdST1VQU19NQVgJCS8qIFByZXZlbnQgbXVsdGlwbGUg ZGVmaW5pdGlvbiB3YXJuaW5ncyAqLwotI2VuZGlmIC8qIE1fVU5JWCAqLwotCi0vKgotICBOT1RF OiBIUC1VWCA4LjAgaGFzIGEgPHN5cy9wb2xsLmg+LCBidXQgdGhlcmUgaXMgbm8gY29ycmVzcG9u ZGluZwotICBsaWJyYXJ5IHJvdXRpbmUsIHNvIF9wb2xsIGNvbWVzIHVwIHVuZGVmaW5lZCBhdCBs aW5rIHRpbWUuCi0qLwotI2lmZGVmIENLX1BPTEwKLSNpZm5kZWYgQUlYUlMJCQkvKiBJQk0gQUlY IG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgKi8KLSNpbmNsdWRlIDxwb2xsLmg+CQkvKiAic3RhbmRh cmQiIChTVklEKSBpL28gbXVsdGlwbGV4aW5nLCBldGMgKi8KLSNlbHNlIC8qIEFJWFJTICovCi0j aWZkZWYgU1ZSNAkJCS8qIEFJWCAzLjIgaXMgbGlrZSBTVklELi4uICovCi0jaW5jbHVkZSA8cG9s bC5oPgotI2Vsc2UJCQkJLyogQnV0IEFJWCAzLjEgaXMgbm90IC4uLiAqLwotI2luY2x1ZGUgPHN5 cy9wb2xsLmg+CQkvKiBUaGUgaW5jbHVkZSBmaWxlIGlzIGluIGluY2x1ZGUvc3lzICovCi0jZGVm aW5lIGV2ZW50cyByZXFldmVudHMJLyogQW5kIGl0IGRvZXMgbm90IG1hcCBJQk0tc3BlY2lmaWMg bWVtYmVyICovCi0jZGVmaW5lIHJldmVudHMgcnRuZXZlbnRzCS8qIG5hbWVzIHRvIHRoZSBTeXN0 ZW0gViBlcXVpdmFsZW50cyAqLwotI2VuZGlmIC8qIFNWUjQgKi8KLSNlbmRpZiAvKiBBSVhSUyAq LwotI2VuZGlmIC8qIENLX1BPTEwgKi8KLQotI2luY2x1ZGUgPHNpZ25hbC5oPiAgICAgICAgICAg ICAgICAgICAgIC8qIFNpZ25hbHMgKi8KLQotLyogRm9yIHNldGptcCBhbmQgbG9uZ2ptcCAqLwot Ci0jaWZuZGVmIFpJTE9HCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHNl dHJldC5oPgotI2VuZGlmIC8qIFpJTE9HICovCi0KLS8qCi0gIFRoZSBmb2xsb3dpbmcgdGVzdCBk aWZmZXJlbnRpYXRlcyBiZXR3ZWVuIDQuMSBCU0QgYW5kIDQuMiAmIGxhdGVyLgotICBJZiB5b3Ug aGF2ZSBhIDQuMUJTRCBzeXN0ZW0gd2l0aCB0aGUgRElSRU5UIGxpYnJhcnksIHRoaXMgdGVzdCBj b3VsZAotICBtaXN0YWtlbmx5IGRpYWdub3NlIDQuMkJTRCBhbmQgdGhlbiBsYXRlciBlbmFibGUg dGhlIHVzZSBvZiBzeXN0ZW0gY2FsbHMKLSAgdGhhdCBhcmVuJ3QgZGVmaW5lZC4gIElmIGluZGVl ZCB0aGVyZSBhcmUgc3VjaCBzeXN0ZW1zLCB3ZSBjYW4gdXNlIHNvbWUKLSAgb3RoZXIgd2F5IG9m IHRlc3RpbmcgZm9yIDQuMUJTRCwgb3IgYWRkIHlldCBhbm90aGVyIGNvbXBpbGUtdGltZSBzd2l0 Y2guCi0qLwotI2lmZGVmIEJTRDQKLSNpZmRlZiBNQVhOQU1MRU4KLSNpZm5kZWYgRlQyMQkJCQkv KiBFeGNlcHQgZm9yIEZvcnR1bmUuICovCi0jaWZuZGVmIEZUMTgKLSNpZm5kZWYgQkVMTFYxMAkJ CQkvKiBBbmQgQmVsbCBMYWJzIFJlc2VhcmNoIFVOSVggVjEwICovCi0jZGVmaW5lIEJTRDQyCi0j ZW5kaWYgLyogQkVMTFYxMCAqLwotI2VuZGlmIC8qIEZUMTggKi8KLSNlbmRpZiAvKiBGVDIxICov Ci0jZW5kaWYgLyogTUFYTkFNTEVOICovCi0jZW5kaWYgLyogQlNENCAqLwotCi0jaWZkZWYgU1VO T1M0MQkJCQkvKiBGcm9tIENocmlzdGlhbiBDb3J0aSAqLwotI2RlZmluZSBCU0Q0NE9SUE9TSVgJ CQkvKiBVbmkgU3R1dHRnYXJ0ICovCi0jZGVmaW5lIFNWT1JQT1NJWAkJCS8qIEZlYnJ1YXJ5IDIw MTAgKi8KLSNpbmNsdWRlIDx0ZXJtaW9zLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5j bHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jZW5kaWYJLyogU1VOT1M0MSAq LwotCi0jaWZkZWYgU05JNTQyCi0jaW5jbHVkZSA8c3lzL2ZpbGlvLmg+CQkJLyogMjk5IGZvciBG SU9OUkVBRCAqLwotI2VuZGlmCS8qIFNOSTU0MiAqLwotCi0vKgotICBNaW5peCAyLjAgc3VwcG9y dCBhZGRlZCBieSBUZXJyeSBNY0Nvbm5lbGwsCi0gIFN5cmFjdXNlIFVuaXZlcnNpdHkgPHRtY0Bi YXJueWFyZC5zeXIuZWR1PgotICBObyBtb3JlIHNndHR5IGludGVyZmFjZSwgcG9zaXggY29tcGxp YW50LgotKi8KLSNpZmRlZiBNSU5JWDIKLSNkZWZpbmUgX01JTklYICAgLyogTmVlZGVkIGZvciBz b21lIE1pbml4IGhlYWRlciBmaWxlcyAqLwotI2RlZmluZSBCU0Q0NE9SUE9TSVgKLSNkZWZpbmUg U1ZPUlBPU0lYCi0jaWZuZGVmIE1JTklYMwotI2RlZmluZSBEQ0xUSU1FVkFMCi0jZW5kaWYJLyog TUlOSVgzICovCi0jZGVmaW5lIE5PRklMRUgKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNs dWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlIDx0ZXJtaW9zLmg+Ci0jaW5jbHVkZSA8bGltaXRz Lmg+Ci0jdW5kZWYgVElPQ0dFVEMgICAgLyogZGVmaW5lZCBpbiBzeXMvaW9jdGwuaCwgYnV0IG5v dCByZWFsbHkgc3VwcG9ydGVkICovCi0jZGVmaW5lIFRBTkRFTSAwCi0jZW5kaWYgLyogTUlOSVgy ICovCi0KLS8qCi0gTUlOSVggMS4wIHN1cHBvcnQgYWRkZWQgYnkgQ2hhcmxlcyBIZWRyaWNrLAot IFJ1dGdlcnMgVW5pdmVyc2l0eSA8aGVkcmlja0BhcmFtaXMucnV0Z2Vycy5lZHU+LgotIE1JTklY IGFsc28gaGFzIFY3IGVuYWJsZWQuCi0qLwotI2lmZGVmIE1JTklYCi0jZGVmaW5lIFRBTkRFTSAw Ci0jZGVmaW5lIE1ZUkVBRAotI2RlZmluZSBOT1NZU0lPQ1RMSAotI2luY2x1ZGUgPGxpbWl0cy5o PgotI2VuZGlmIC8qIE1JTklYICovCi0KLSNpZmRlZiBDS19SRURJUgkJLyogPHN5cy93YWl0Lmg+ IG5lZWRlZCBvbmx5IGZvciBSRURJUkVDVCBjb21tYW5kLiAqLwotLyoKLSAgSWYgYW55Ym9keSBj YW4gZmlndXJlIG91dCBob3cgdG8gbWFrZSB0aGlzIHdvcmsgd2l0aCBOZVhUU1RFUCwgYmUKLSAg bXkgZ3Vlc3QhICAoTmVYVEJsYWgvTmVYVEJsYWgvYnNkL3N5cy93YWl0LmggZG9lcyBub3QgZGVm aW5lIFdFWElUU1RBVFVTKQotKi8KLSNpZm5kZWYgQ0tfV0FJVF9ICQkJLyogSWYgd2FpdC5oIG5v dCBhbHJlYWR5IGluY2x1ZGVkLi4uICovCi0jaWZkZWYgT1NGCQkJCS8qIGZvcmNlIE9TRiB0byBz ZWxlY3QgUE9TSVggd2FpdCAqLwotI2lmZGVmIF9CU0QJCQkJLyogaW5zdGVhZCBvZiBCU0QgKHNl ZSBja2NkZWIuaCkgKi8KLSNkZWZpbmUgQ0tfT1NGX0JTRAotI3VuZGVmIF9CU0QKLSNlbmRpZiAv KiBfQlNEICovCi0jZW5kaWYgLyogT1NGICovCi0jaW5jbHVkZSA8c3lzL3dhaXQuaD4JCQkvKiBJ bmNsdWRlIGl0ICovCi0jaWZkZWYgT1NGCi0jaWZkZWYgQ0tfT1NGX0JTRAotI2RlZmluZSBfQlNE CQkJCS8qIFJlc3RvcmUgaXQgKi8KLSN1bmRlZiBDS19PU0ZfQlNECi0jZW5kaWYgLyogQ0tfT1NG X0JTRCAqLwotI2VuZGlmIC8qIE9TRiAqLwotI2VuZGlmIC8qIENLX1dBSVRfSCAqLwotI2VuZGlm IC8qIENLX1JFRElSICovCi0KLSNpbmNsdWRlICJja3V2ZXIuaCIJCQkvKiBWZXJzaW9uIGhlcmFs ZCAqLwotY2hhciAqY2t4c3lzID0gSEVSQUxEOwotCi0jaWZkZWYgQ0tfVVRTTkFNRQotI2luY2x1 ZGUgPHN5cy91dHNuYW1lLmg+Ci0KLSNpZmRlZiBUUlU2NAkJCQkvKiBUcnU2NCBVTklYIDQuMCBh bmQgbGF0ZXIgKi8KLS8qIFZlcmlmaWVkIG9uIFRydTY0IDQuMEYgLSBtaWdodCBicmVhayBvbiA0 LjBFIG9yIGVhcmxpZXIgKi8KLSNpbmNsdWRlIDxzeXMvc3lzaW5mby5oPgkJLyogKGRvbid0IGtu b3cgYWJvdXQgT1NGLzEgb3IgRFUpICovCi0jaW5jbHVkZSA8bWFjaGluZS9oYWxfc3lzaW5mby5o PgotI2VuZGlmIC8qIFRSVTY0ICovCi0KLSNpZmRlZiBTT0xBUklTMjUJCQkvKiBTb2xhcmlzIDIu NSBhbmQgbGF0ZXIgKi8KLSNpbmNsdWRlIDxzeXMvc3lzdGVtaW5mby5oPgkJLyogKGRvbid0IGtu b3cgYWJvdXQgZWFybGllciBvbmVzKSAqLwotI2VuZGlmIC8qIFNPTEFSSVMyNSAqLwotCi0jaWZk ZWYgVVc3Ci0jaWZuZGVmIFNZU19OTUxOCi0jZGVmaW5lIFNZU19OTUxOIDI1NwotI2VuZGlmIC8q IE5NTE4gKi8KLSNlbmRpZiAvKiBVVzcgKi8KLSNpZmRlZiBIUFVYOVBMVVMKLXN0YXRpYyBpbnQg aHBpczgwMCA9IDA7Ci0jZW5kaWYgLyogSFBVWDlQTFVTICovCi0jaWZkZWYgU1lTX05NTE4KLSNk ZWZpbmUgQ0tfU1lTTk1MTiBTWVNfTk1MTgotI2Vsc2UKLSNpZmRlZiBfU1lTX05NTE4KLSNkZWZp bmUgQ0tfU1lTTk1MTiBfU1lTX05NTE4KLSNlbHNlCi0jaWZkZWYgVVRTTEVOCi0jZGVmaW5lIENL X1NZU05NTE4gVVRTTEVOCi0jZWxzZQotI2RlZmluZSBDS19TWVNOTUxOIDMxCi0jZW5kaWYgLyog VVRTTEVOICovCi0jZW5kaWYgLyogX1NZU19OTUxOICovCi0jZW5kaWYgLyogU1lTX05NTE4gKi8K LWNoYXIgdW5tX21jaFtDS19TWVNOTUxOKzFdID0geyAnXDAnLCAnXDAnIH07Ci1jaGFyIHVubV9t b2RbQ0tfU1lTTk1MTisxXSA9IHsgJ1wwJywgJ1wwJyB9OwotY2hhciB1bm1fbmFtW0NLX1NZU05N TE4rMV0gPSB7ICdcMCcsICdcMCcgfTsKLWNoYXIgdW5tX3JlbFtDS19TWVNOTUxOKzFdID0geyAn XDAnLCAnXDAnIH07Ci1jaGFyIHVubV92ZXJbQ0tfU1lTTk1MTisxXSA9IHsgJ1wwJywgJ1wwJyB9 OwotI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KLQotI2lmZGVmIENJRQotI2luY2x1ZGUgPHN0YXQu aD4JCQkvKiBGb3IgY2hhc2luZyBzeW1saW5rcywgZXRjLiAqLwotI2Vsc2UKLSNpbmNsdWRlIDxz eXMvc3RhdC5oPgotI2VuZGlmIC8qIENJRSAqLwotCi0jaWZkZWYgUU5YCQkJCS8qIDI5OSAqLwot I2lmbmRlZiBJWEFOWQotI2RlZmluZSBJWEFOWSAwCi0jZW5kaWYJLyogSVhBTlkgKi8KLSNlbmRp ZgkvKiBRTlggKi8KLQotLyogVVVDUCBsb2NrZmlsZSBtYXRlcmlhbC4uLiAqLwotCi0jaWZuZGVm IE5PVVVDUAotI2lmZGVmIFVTRVRUWUxPQ0sKLSNpZmRlZiBIQVZFX0xPQ0tERVYJCQkvKiBSZWQg SGF0IGJhdWRib3kvbG9ja2RldiAqLwotLyoKLSAgV2F0Y2ggb3V0OiBiYXVkYm95LmggcmVmZXJl bmNlcyBvcGVuKCkgd2l0aG91dCBtYWtpbmcgc3VyZSBpdCBoYXMgYmVlbgotICBkZWNsYXJlZCwg cmVzdWx0aW5nIGluIHdhcm5pbmdzIG9uIGF0IGxlYXN0IFJlZCBIYXQgNy4zLiAgSXQncyBkZWNs YXJlZCBpbgotICBmY250bC5oLCBidXQgd2UgZG9uJ3QgaW5jbHVkZSB0aGF0IHVudGlsIGxhdGVy LiAgSW4gdGhpcyBjYXNlIG9ubHksIHdlCi0gIGluY2x1ZGUgaXQgaGVyZSwgYW5kIHRoZW4gdGhl IHNlY29uZCBpbmNsdWRlIGlzIGhhcm1sZXNzIGJlY2F1c2UgaW4gUmVkIEhhdAotICBMaW51eCAo dGhlIG9ubHkgcGxhY2Ugd2hlcmUgeW91IGZpbmQgYmF1ZGJveS5oKSBmY250bC5oIGlzIHByb3Rl Y3RlZCBmcm9tCi0gIG11bHRpcGxlIGluY2x1c2lvbiBieSBfRkNOVExfSC4gICAtIGZkYywgMTAg TWF5IDIwMDQuCi0KLSAgTk9URTogQWx0aG91Z2ggTGludXggL3Vzci9zYmluL2xvY2tkZXYgb2J2 aWF0ZXMgdGhlIG5lZWQgZm9yIHNldHVpZCBvcgotICBzZXRnaWQgYml0cyB0byBhY2Nlc3MgdGhl IGxvY2tmaWxlLCBDLUtlcm1pdCB3aWxsIHN0aWxsIG5lZWQgdGhlbSB0byBhY2Nlc3MKLSAgdGhl IHNlcmlhbCBwb3J0IGl0c2VsZiB1bmxlc3MgdGhlIHBvcnQgaXMgb3BlbiBmb3Igd29ybGQgcmVh ZC93cml0ZS4KLSAgTm9ybWFsbHkgc2V0Z2lkIHV1Y3AgZG9lcyB0aGUgdHJpY2suCi0KLSAgRXh0 cmE6IEhBVkVfTE9DS0RFViBoYXMgYmVlbiBhZGRlZCBhbHMgb3BlblN1U0UgPj0gMTEuMyBkb2Vz bid0IHVzZSBiYXVkYm95Ci0gIGJ1dCB0dHlsb2NrLiAgLSBqYiwgMjYgSnVsIDIwMTAKLSovCi0j aW5jbHVkZSA8ZmNudGwuaD4JCQkvKiBUaGlzIGhhcyB0byBjb21lIGJlZm9yZSBiYXVkYm95ICov Ci0jaWZkZWYgSEFWRV9CQVVEQk9ZCQkJLyogUmVkIEhhdCBiYXVkYm95L2xvY2tkZXYgKi8KLSNp bmNsdWRlIDxiYXVkYm95Lmg+Ci0jZWxzZSAgLyogIUhBVkVfQkFVREJPWSAqLwkJLyogb3BlblN1 U0UgbG9jayB2aWEgdHR5bG9jayAqLwotI2luY2x1ZGUgPHR0eWxvY2suaD4KLSNlbmRpZiAgLyog SEFWRV9CQVVEQk9ZICovCi0jZGVmaW5lIExPQ0tfRElSICIvdmFyL2xvY2siCQkvKiAoZXZlbiB0 aG91Z2ggd2UgZG9uJ3QgY2FyZSkgKi8KLQotI2Vsc2UgIC8qICFIQVZFX0xPQ0tERVYgKi8KLQot I2lmZGVmIFVTRV9VVV9MT0NLCi0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxsaWJ1dGls Lmg+CQkJLyogRnJlZUJTRCAqLwotI2Vsc2UKLSNpbmNsdWRlIDx1dGlsLmg+CQkJLyogT3BlbkJT RCAqLwotI2VuZGlmIC8qIEhBVkVfTE9DS0RFViAqLwotI2VuZGlmIC8qIF9fRnJlZUJTRCAqLwot I2VuZGlmIC8qIFVTRV9VVV9MT0NLICovCi0jZWxzZSAgLyogVVNFVFRZTE9DSyAqLwotCi0vKiBO YW1lIG9mIFVVQ1AgdHR5IGRldmljZSBsb2NrZmlsZSAqLwotCi0jaWZkZWYgTElOVVhGU1NUTkQK LSNpZm5kZWYgSERCVVVDUAotI2RlZmluZSBIREJVVUNQCi0jZW5kaWYgLyogSERCVVVDUCAqLwot I2VuZGlmIC8qIExJTlVYRlNTVE5EICovCi0KLSNpZmRlZiBBQ1VDTlRSTAotI2RlZmluZSBMQ0tE SVIKLSNlbmRpZiAvKiBBQ1VDTlRSTCAqLwotCi0vKgotICBQSURTVFJJTkcgbWVhbnMgdXNlIEFT Q0lJIHN0cmluZyB0byByZXByZXNlbnQgcGlkIGluIGxvY2tmaWxlLgotKi8KLSNpZm5kZWYgUElE U1RSSU5HCi0jaWZkZWYgSERCVVVDUAotI2RlZmluZSBQSURTVFJJTkcKLSNlbHNlCi0jaWZkZWYg QlNENDQKLSNkZWZpbmUgUElEU1RSSU5HCi0jZWxzZQotI2lmZGVmIFJUQUlYCi0jZGVmaW5lIFBJ RFNUUklORwotI2Vsc2UKLSNpZmRlZiBBSVhSUwotI2RlZmluZSBQSURTVFJJTkcKLSNlbHNlCi0j aWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUgUElEU1RSSU5HCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8K LSNlbmRpZiAvKiBBSVhSUyAqLwotI2VuZGlmIC8qIFJUQUlYICovCi0jZW5kaWYgLyogQlNENDQg Ki8KLSNlbmRpZiAvKiBIREJVVUNQICovCi0jZW5kaWYgLyogUElEU1RSSU5HICovCi0KLS8qIE5v dyB0aGUgUElEU1RSSU5HIGV4Y2VwdGlvbnMuLi4gKi8KLQotI2lmZGVmIFBJRFNUUklORwotI2lm ZGVmIEhQVVgKLSN1bmRlZiBQSURTVFJJTkcKLSNlbmRpZiAvKiBIUFVYICovCi0jZW5kaWYgLyog UElEU1RSSU5HICovCi0KLSNpZmRlZiBfX2JzZGlfXwkJCQkvKiBCU0RJIChhdCBsZWFzdCB0aHJ1 IDEuMSkgKi8KLSNpZmRlZiBQSURTVFJJTkcKLSN1bmRlZiBQSURTVFJJTkcKLSNlbmRpZiAvKiBQ SURTVFJJTkcgKi8KLSNlbmRpZiAvKiBfX2JzZGlfXyAqLwotCi0jaWZkZWYgT1NGMzIJCQkJLyog RGlnaXRhbCBVTklYIChPU0YvMSkgMy4yICovCi0jaWZkZWYgUElEU1RSSU5HCi0jdW5kZWYgUElE U1RSSU5HCi0jZW5kaWYgLyogUElEU1RSSU5HICovCi0jZW5kaWYgLyogT1NGMzIgKi8KLQotLyoK LSAgTE9DS19ESVIgaXMgdGhlIG5hbWUgb2YgdGhlIGxvY2tmaWxlIGRpcmVjdG9yeS4KLSAgSWYg TE9DS19ESVIgaXMgYWxyZWFkeSBkZWZpbmVkIChlLmcuIG9uIGNvbW1hbmQgbGluZSksIHdlIGRv bid0IGNoYW5nZSBpdC4KLSovCi0KLSNpZm5kZWYgTE9DS19ESVIKLSNpZmRlZiBNQUNPU1gKLSNk ZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9jayIKLSNlbmRpZiAvKiBNQUNPU1ggKi8KLSNl bmRpZi8qIExPQ0tfRElSICovCi0KLSNpZm5kZWYgTE9DS19ESVIKLSNpZmRlZiBCU0Q0NAotI2lm ZGVmIF9fMzg2QlNEX18KLSNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9jayIKLSNlbHNl Ci0jaWZkZWYgX19GcmVlQlNEX18KLSNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9jayIK LSNlbHNlCi0jaWZkZWYgX19OZXRCU0RfXwotI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC9s b2NrIgotI2Vsc2UKLSNpZmRlZiBfX09wZW5CU0RfXwotI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9z cG9vbC9sb2NrIgotI2Vsc2UKLS8qIFNvIHdoaWNoIG9uZXMgaXMgdGhpcyBmb3I/ICovCi0vKiBQ cm9iYWJseSBvcmlnaW5hbCA0LjRCU0Qgb24gVmFuZ29naCAqLwotLyogUGx1cyB3aG8ga25vd3Mg YWJvdXQgTWFjIE9TIFguLi4gSXQgZG9lc24ndCBldmVuIGhhdmUgYSBjdSBwcm9ncmFtICovCi0j ZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29sL3V1Y3AiCi0jZW5kaWYgLyogX19PcGVuQlNEX18g Ki8KLSNlbmRpZiAvKiBfX05ldEJTRF9fICovCi0jZW5kaWYgLyogX19GcmVlQlNEX18gKi8KLSNl bmRpZiAvKiBfXzM4NkJTRF9fICovCi0jZWxzZQotI2lmZGVmIERHVVg0MzAKLSNkZWZpbmUgTE9D S19ESVIgIi92YXIvc3Bvb2wvbG9ja3MiCi0jZWxzZQotI2lmZGVmIEhQVVgxMAotI2RlZmluZSBM T0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrcyIKLSNlbHNlCi0jaWZkZWYgUlRBSVgJCQkJLyogSUJN IFJUIFBDIEFJWCAyLjIuMSAqLwotI2RlZmluZSBMT0NLX0RJUiAiL2V0Yy9sb2NrcyIKLSNlbHNl Ci0jaWZkZWYgQUlYUlMKLSNkZWZpbmUgTE9DS19ESVIgIi9ldGMvbG9ja3MiCi0jZWxzZQotI2lm ZGVmIElTSUlJCi0jZGVmaW5lIExPQ0tfRElSICIvZXRjL2xvY2tzIgotI2Vsc2UKLSNpZmRlZiBI REJVVUNQCi0jaWZkZWYgTV9TWVM1Ci0jZGVmaW5lIExPQ0tfRElSICIvdXNyL3Nwb29sL3V1Y3Ai Ci0jZWxzZQotI2lmZGVmIE1fVU5JWAotI2RlZmluZSBMT0NLX0RJUiAiL3Vzci9zcG9vbC91dWNw IgotI2Vsc2UKLSNpZmRlZiBTVlI0Ci0jZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29sL2xvY2tz IgotI2Vsc2UKLSNpZmRlZiBTVU5PUzQKLSNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9j a3MiCi0jZWxzZQotI2lmZGVmIExJTlVYRlNTVE5ECi0jZGVmaW5lIExPQ0tfRElSICIvdmFyL2xv Y2siOwotI2Vsc2UKLSNkZWZpbmUgTE9DS19ESVIgIi91c3Ivc3Bvb2wvbG9ja3MiCi0jZW5kaWYg LyogTElOVVhGU1NUTkQgKi8KLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNlbmRpZiAvKiBTVlI0ICov Ci0jZW5kaWYgLyogTV9VTklYICovCi0jZW5kaWYgLyogTV9TWVM1ICovCi0jZWxzZQotI2lmZGVm IExDS0RJUgotI2RlZmluZSBMT0NLX0RJUiAiL3Vzci9zcG9vbC91dWNwL0xDSyIKLSNlbHNlCi0j aWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUgTE9DS19ESVIgIi91c3Ivc3Bvb2wvdXVjcCIKLSNlbHNl Ci0jZGVmaW5lIExPQ0tfRElSICIvdXNyL3Nwb29sL3V1Y3AiCi0jZW5kaWYgLyogQ09IRVJFTlQg Ki8KLSNlbmRpZiAvKiBMQ0tESVIgKi8KLSNlbmRpZiAvKiBIREJVVUNQICovCi0jZW5kaWYgLyog SVNJSUkgKi8KLSNlbmRpZiAvKiBBSVhSUyAqLwotI2VuZGlmIC8qIFJUQUlYICovCi0jZW5kaWYg LyogSFBVWDEwICovCi0jZW5kaWYgLyogREdVWDQzMCAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0j ZW5kaWYgLyogIUxPQ0tfRElSIChvdXRzaWRlIGlmbmRlZikgKi8KLQotI2lmZGVmIE9TRjIJCQkJ LyogT1NGLzEgMi4wIG9yIGxhdGVyICovCi0jaWZkZWYgTE9DS19ESVIJCQkJLyogKG1heWJlIDEu eCB0b28sIHdobyBrbm93cy4uLikgKi8KLSN1bmRlZiBMT0NLX0RJUgotI2RlZmluZSBMT0NLX0RJ UiAiL3Zhci9zcG9vbC9sb2NrcyIKLSNlbmRpZiAvKiBMT0NLX0RJUiAqLwotI2VuZGlmIC8qIE9T RjIgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIFNvcnJ5IG5vIG1vcmUgbG9ja2YoKSAtLSB3ZSBs b2NrIGZpcnN0IGFuZCBUSEVOIG9wZW4gdGhlIGRldmljZS4gKi8KLSNpZmRlZiBTVlI0Ci0jaWZu ZGVmIEJTRDQ0Ci0jaWZuZGVmIExPQ0tGCi0jZGVmaW5lIExPQ0tGCQkJCS8qIFVzZSBsb2NrZigp IG9uIHR0eSBkZXZpY2UgaW4gU1ZSNCAqLwotI2VuZGlmIC8qIExPQ0tGICovCi0jZW5kaWYgLyog QlNENDQgKi8KLSNlbmRpZiAvKiBTVlI0ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZk ZWYgTk9MT0NLRgkJCQkvKiBCdXQgTk9MT0NLRiBjYW5jZWxzIExPQ0tGICovCi0jaWZkZWYgTE9D S0YKLSN1bmRlZiBMT0NLRgotI2VuZGlmIC8qIExPQ0tGICovCi0jZW5kaWYgLyogTk9MT0NLRiAq LwotCi0vKiBNb3JlIGFib3V0IHRoaXMgYmVsb3cuLi4gKi8KLQotI2VuZGlmIC8qIFVTRVRUWUxP Q0sgKi8KLSNlbmRpZiAvKiBOT1VVQ1AgKi8KLQotLyoKLSAgTVlSRUFEIG1lYW5zIHVzZSBvdXIg aW50ZXJuYWxseSBkZWZpbmVkIG5vbmJsb2NraW5nIGJ1ZmZlcmVkIHJlYWQgcm91dGluZS4KLSov Ci0jaWZkZWYgQVRUU1YKLSNkZWZpbmUgTVlSRUFECi0jZW5kaWYgLyogQVRUU1YgKi8KLQotI2lm ZGVmIEFUVDczMDAKLSNpZm5kZWYgTVlSRUFECi0jZGVmaW5lIE1ZUkVBRAotI2VuZGlmIC8qIE1Z UkVBRCAqLwotLyogYml0cyBmb3IgYXR0bW9kZW06IGludGVybmFsIG1vZGVtIGluIHVzZSwgcmVz dGFydCBnZXR0eSAqLwotI2RlZmluZSBJU01PREVNIDEKLSNkZWZpbmUgRE9HRVRZIDUxMgotI2Vu ZGlmICAvKiBBVFQ3MzAwICovCi0KLSNpZmRlZiBCU0Q0MgotI2RlZmluZSBNWVJFQUQKLSNlbmRp ZiAvKiBCU0Q0MiAqLwotCi0jaWZkZWYgUE9TSVgKLSNkZWZpbmUgTVlSRUFECi0jZW5kaWYgLyog UE9TSVggKi8KLSNpZmRlZiBfX2JzZGlfXwotI2lmbmRlZiBPX05ERUxBWQotI2RlZmluZSBPX05E RUxBWSBPX05PTkJMT0NLCi0jZW5kaWYgLyogT19OREVMQVkgKi8KLSNlbmRpZiAvKiBfX2JzZGlf XyAqLwotCi0vKgotIFZhcmlhYmxlcyBhdmFpbGFibGUgdG8gb3V0c2lkZSB3b3JsZDoKLQotICAg ZGZ0dHkgIC0tIFBvaW50ZXIgdG8gZGVmYXVsdCB0dHkgbmFtZSBzdHJpbmcsIGxpa2UgIi9kZXYv dHR5Ii4KLSAgIGRmbG9jICAtLSAwIGlmIGRmdHR5IGlzIGNvbnNvbGUsIDEgaWYgZXh0ZXJuYWwg bGluZS4KLSAgIGRmcHJ0eSAtLSBEZWZhdWx0IHBhcml0eQotICAgZGZmbG93IC0tIERlZmF1bHQg ZmxvdyBjb250cm9sCi0gICBja3hlY2ggLS0gRmxhZyBmb3Igd2hvIGVjaG9lcyBjb25zb2xlIHR5 cGVpbjoKLSAgICAgMSAtIFRoZSBwcm9ncmFtIChzeXN0ZW0gZWNobyBpcyB0dXJuZWQgb2ZmKQot ICAgICAwIC0gVGhlIHN5c3RlbSAob3IgZnJvbnQgZW5kLCBvciB0ZXJtaW5hbCkuCi0gICBmdW5j dGlvbnMgdGhhdCB3YW50IHRvIGRvIHRoZWlyIG93biBlY2hvaW5nIHNob3VsZCBjaGVjayB0aGlz IGZsYWcKLSAgIGJlZm9yZSBkb2luZyBzby4KLQotICAgZmxmbmFtICAtLSBOYW1lIG9mIGxvY2sg ZmlsZSwgaW5jbHVkaW5nIGl0cyBwYXRoLCBlLmcuLAotICAgICAgICAgICAgICAgICIvdXNyL3Nw b29sL3V1Y3AvTENLLi5jdWwwIiBvciAiL2V0Yy9sb2Nrcy90dHk3NyIKLSAgIGxrZmxmbiAgLS0g TmFtZSBvZiBsaW5rIHRvIGxvY2sgZmlsZSwgaW5jbHVkaW5nIGl0cyBwYXRocwotICAgaGFzbG9j ayAtLSBGbGFnIHNldCBpZiB0aGlzIGtlcm1pdCBlc3RhYmxpc2hlZCBhIHV1Y3AgbG9jay4KLSAg IGxvY2twaWQgLS0gUElEIG9mIG90aGVyIHByb2Nlc3MgdGhhdCBoYXMgZGVzaXJlZCBsaW5lIG9w ZW4sIGFzIHN0cmluZy4KLSAgIGJhY2tncmQgLS0gRmxhZyBpbmRpY2F0aW5nIHByb2dyYW0gZXhl Y3V0aW5nIGluIGJhY2tncm91bmQgKCAmIG9uCi0gICAgICAgICAgICAgICAgZW5kIG9mIHNoZWxs IGNvbW1hbmQpLiBVc2VkIHRvIGlnbm9yZSBJTlQgYW5kIFFVSVQgc2lnbmFscy4KLSAgIHJ0dV9i dWcgLS0gU2V0IGJ5IHN0cHRyYXAoKS4gIFJUVSB0cmVhdHMgXlogYXMgRU9GIChidXQgb25seSB3 aGVuIHdlIGhhbmRsZQotICAgICAgICAgICAgICAgIFNJR1RTVFApCi0KLSBGdW5jdGlvbnMgZm9y IGFzc2lnbmVkIGNvbW11bmljYXRpb24gbGluZSAoZWl0aGVyIGV4dGVybmFsIG9yIGNvbnNvbGUg dHR5KToKLQotICAgc3lzaW5pdCgpICAgICAgICAgICAgICAgLS0gU3lzdGVtIGRlcGVuZGVudCBw cm9ncmFtIGluaXRpYWxpemF0aW9uCi0gICBzeXNjbGVhbnVwKCkgICAgICAgICAgICAtLSBTeXN0 ZW0gZGVwZW5kZW50IHByb2dyYW0gc2h1dGRvd24KLSAgIHR0b3Blbih0dG5hbWUsbG9jYWwsbWRt dHlwLHRpbW8pIC0tIE9wZW4gdGhlIG5hbWVkIHR0eSBmb3IgZXhjbHVzaXZlIGFjY2Vzcy4KLSAg IHR0Y2xvcygpICAgICAgICAgICAgICAgIC0tIENsb3NlICYgcmVzZXQgdGhlIHR0eSwgcmVsZWFz aW5nIGFueSBhY2Nlc3MgbG9jay4KLSAgIHR0c3NwZChjcHMpICAgICAgICAgICAgIC0tIFNldCB0 aGUgdHJhbnNtaXNzaW9uIHNwZWVkIG9mIHRoZSB0dHkuCi0gICB0dGdzcGQoKSAgICAgICAgICAg ICAgICAtLSBHZXQgKHJlYWQpIHRoZSB0aGUgdHJhbnNtaXNzaW9uIHNwZWVkIG9mIHRoZSB0dHku Ci0gICB0dHBrdChzcGVlZCxmbG93LHBhcml0eSkgLS0gUHV0IHRoZSB0dHkgaW4gcGFja2V0IG1v ZGUgYW5kIHNldCB0aGUgc3BlZWQuCi0gICB0dHZ0KHNwZWVkLGZsb3cpICAgICAgICAtLSBQdXQg dGhlIHR0eSBpbiB2aXJ0dWFsIHRlcm1pbmFsIG1vZGUuCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG9yIGluIERJQUxJTkcgb3IgQ09OTkVDVEVEIG1vZGVtIGNvbnRyb2wgc3RhdGUu Ci0gICB0dHJlcygpICAgICAgICAgICAgICAgICAtLSBSZXN0b3JlIG9yaWdpbmFsIHR0eSBtb2Rl cy4KLSAgIHR0c2NhcnIoY2FycmllcikgICAgICAgIC0tIFNldCBjYXJyaWVyIGNvbnRyb2wgbW9k ZSwgb24vb2ZmL2F1dG8uCi0gICB0dGlubChkZXN0LG1heCx0aW1vKSAgICAtLSBUaW1lZCByZWFk IGxpbmUgZnJvbSB0aGUgdHR5LgotICAgdHRpbmModGltbykgICAgICAgICAgICAgLS0gVGltZWQg cmVhZCBjaGFyYWN0ZXIgZnJvbSB0dHkuCi0gICBteXJlYWQoKSAgICAgICAgICAgICAgICAtLSBS YXcgbW9kZSBidWxrIGJ1ZmZlciByZWFkLCBnaXZlcyBzdWJzZXF1ZW50Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXJzIG9uZSBhdCBhIHRpbWUgYW5kIHNpbXVsYXRlcyBGSU9O UkVBRC4KLSAgIG15dW5yZChjKSAgICAgICAgICAgICAgIC0tIFBsYWNlcyBjIGJhY2sgaW4gYnVm ZmVyIHRvIGJlIHJlYWQgKG9uZSBvbmx5KQotICAgdHRjaGsoKSAgICAgICAgICAgICAgICAgLS0g U2VlIGhvdyBtYW55IGNoYXJhY3RlcnMgaW4gdHR5IGlucHV0IGJ1ZmZlci4KLSAgIHR0eGluKG4s YnVmKSAgICAgICAgICAgIC0tIFJlYWQgbiBjaGFyYWN0ZXJzIGZyb20gdHR5ICh1bnRpbWVkKS4K LSAgIHR0b2woc3RyaW5nLGxlbmd0aCkgICAgIC0tIFdyaXRlIGEgc3RyaW5nIHRvIHRoZSB0dHku Ci0gICB0dG9jKGMpICAgICAgICAgICAgICAgICAtLSBXcml0ZSBhIGNoYXJhY3RlciB0byB0aGUg dHR5LgotICAgdHRmbHVpKCkgICAgICAgICAgICAgICAgLS0gRmx1c2ggdHR5IGlucHV0IGJ1ZmZl ci4KLSAgIHR0c25kYigpICAgICAgICAgICAgICAgIC0tIFNlbmQgQlJFQUsgc2lnbmFsLgotICAg dHRzbmRsYigpICAgICAgICAgICAgICAgLS0gU2VuZCBMb25nIEJSRUFLIHNpZ25hbC4KLQotICAg dHRsb2NrKHR0bmFtZSkgICAgICAgICAgLS0gIkxvY2siIHR0eSBkZXZpY2UgYWdhaW5zdCB1dWNw IGNvbGxpc2lvbnMuCi0gICB0dHVubGNrKCkgICAgICAgICAgICAgICAtLSBVbmxvY2sgdHR5IGRl dmljZS4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIEFUVDczMDAvVW5peCBQ QywgU3lzdGVtIFY6Ci0gICBhdHRkaWFsKHR0bmFtZSxzcGVlZCx0ZWxuYnIpIC0tIGRpYWxzIEFU VDczMDAvVW5peCBQQyBpbnRlcm5hbCBtb2RlbQotICAgb2ZmZ2V0dHkodHRuYW1lKSAgICAgICAg LS0gVHVybnMgb2ZmIGdldHR5KDFtKSBmb3IgY29tbXMgbGluZQotICAgb25nZXR0eSh0dG5hbWUp ICAgICAgICAgLS0gUmVzdG9yZXMgZ2V0dHkoKSB0byBjb21tcyBsaW5lCi0qLwotCi0vKgotRnVu Y3Rpb25zIGZvciBjb25zb2xlIHRlcm1pbmFsOgotCi0gICBjb25nbSgpICAgLS0gR2V0IGNvbnNv bGUgdGVybWluYWwgbW9kZXMuCi0gICBjb25jYihlc2MpIC0tIFB1dCB0aGUgY29uc29sZSBpbiBz aW5nbGUtY2hhcmFjdGVyIHdha2V1cCBtb2RlIHdpdGggbm8gZWNoby4KLSAgIGNvbmJpbihlc2Mp IC0tIFB1dCB0aGUgY29uc29sZSBpbiBiaW5hcnkgKHJhdykgbW9kZS4KLSAgIGNvbnJlcygpICAt LSBSZXN0b3JlIHRoZSBjb25zb2xlIHRvIG1vZGUgb2J0YWluZWQgYnkgY29uZ20oKS4KLSAgIGNv bm9jKGMpICAtLSBVbmJ1ZmZlcmVkIG91dHB1dCwgb25lIGNoYXJhY3RlciB0byBjb25zb2xlLgot ICAgY29ub2wocykgIC0tIFVuYnVmZmVyZWQgb3V0cHV0LCBudWxsLXRlcm1pbmF0ZWQgc3RyaW5n IHRvIHRoZSBjb25zb2xlLgotICAgY29ub2xhKHMpIC0tIFVuYnVmZmVyZWQgb3V0cHV0LCBhcnJh eSBvZiBzdHJpbmdzIHRvIHRoZSBjb25zb2xlLgotICAgY29ueG8obixzKSAtLSBVbmJ1ZmZlcmVk IG91dHB1dCwgbiBjaGFyYWN0ZXJzIHRvIHRoZSBjb25zb2xlLgotICAgY29uY2hrKCkgIC0tIENo ZWNrIGlmIGNoYXJhY3RlcnMgYXZhaWxhYmxlIGF0IGNvbnNvbGUgKGJzZCA0LjIpLgotICAgICAg ICAgICAgICAgIENoZWNrIGlmIGVzY2FwZSBjaGFyICheXCkgdHlwZWQgYXQgY29uc29sZSAoU3lz dGVtIElJSS9WKS4KLSAgIGNvbmluYyh0aW1vKSAgLS0gVGltZWQgZ2V0IGEgY2hhcmFjdGVyIGZy b20gdGhlIGNvbnNvbGUuCi0gICBjb25na3ModGltbykgIC0tIFRpbWVkIGdldCBrZXlib2FyZCBz Y2FuIGNvZGUuCi0gICBjb25pbnQoKSAgLS0gRW5hYmxlIHRlcm1pbmFsIGludGVycnVwdHMgb24g dGhlIGNvbnNvbGUgaWYgbm90IGJhY2tncm91bmQuCi0gICBjb25ub2koKSAgLS0gRGlzYWJsZSB0 ZXJtaW5hbCBpbnRlcnJ1cHRzIG9uIHRoZSBjb25zb2xlIGlmIG5vdCBiYWNrZ3JvdW5kLgotCi1U aW1lIGZ1bmN0aW9ucwotCi0gICBtc2xlZXAobSkgLS0gTWlsbGlzZWNvbmQgc2xlZXAKLSAgIHp0 aW1lKCZzKSAtLSBSZXR1cm4gcG9pbnRlciB0byBkYXRlL3RpbWUgc3RyaW5nCi0gICBydGltZXIo KSAtLSAgUmVzZXQgdGltZXIKLSAgIGd0aW1lcigpICAtLSBHZXQgZWxhcHNlZCB0aW1lIHNpbmNl IGxhc3QgY2FsbCB0byBydGltZXIoKQotKi8KLQotLyogQ29uZGl0aW9uYWwgSW5jbHVkZXMgKi8K LQotLyogV2hldGhlciB0byBpbmNsdWRlIDxzeXMvZmlsZS5oPiAqLwotCi0jaWZkZWYgUlRVCQkJ CS8qIFJUVSBkb2Vzbid0ICovCi0jZGVmaW5lIE5PRklMRUgKLSNlbmRpZiAvKiBSVFUgKi8KLQot I2lmZGVmIENJRQkJCQkvKiBDSUUgZG9lcy4gKi8KLSN1bmRlZiBOT0ZJTEVICi0jZW5kaWYgLyog Q0lFICovCi0KLSNpZmRlZiBCU0Q0MQkJCQkvKiA0LjEgQlNEIGRvZXNuJ3QgKi8KLSNkZWZpbmUg Tk9GSUxFSAotI2VuZGlmIC8qIEJTRDQxICovCi0KLSNpZmRlZiBpczY4awkJCQkvKiBJbnRlZ3Jh dGVkIFNvbHV0aW9ucyA2ODAwMCBVTklYICAqLwotI2RlZmluZSBOT0ZJTEVICQkJCS8qIGUuZy4g b24gUGxleHV4IFA2MCBhbmQgU3VuLTEgKi8KLSNlbmRpZiAvKiBpczY4ayAqLwotCi0jaWZkZWYg TUlOSVgJCQkJLyogTUlOSVggKi8KLSNkZWZpbmUgTk9GSUxFSAotI2VuZGlmIC8qIE1JTklYICov Ci0KLSNpZmRlZiBDT0hFUkVOVAkJCQkvKiBDb2hlcmVudCAqLwotI2RlZmluZSBOT0ZJTEVICi0j ZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2lmbmRlZiBOT0ZJTEVICQkJCS8qIE5vdyBpbmNsdWRl IGlmIHNlbGVjdGVkLiAqLwotI2luY2x1ZGUgPHN5cy9maWxlLmg+Ci0jZW5kaWYgLyogTk9GSUxF SCAqLwotCi0vKiBQT1NJWCAqLwotCi0jaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogUE9TSVggdXNl cyB0ZXJtaW9zLmggKi8KLSNkZWZpbmUgVEVSTUlPUwotI2lmZGVmIF9fYnNkaV9fCi0jaWZkZWYg UE9TSVgKLSN1bmRlZiBfUE9TSVhfU09VUkNFCQkJLyogR2V0IGV4dHJhIHN0dWZmIGZyb20gdGVy bWlvcy5oICovCi0jZW5kaWYgLyogUE9TSVggKi8KLSNlbmRpZiAvKiBfX2JzZGlfXyAqLwotI2lu Y2x1ZGUgPHRlcm1pb3MuaD4KLSNpZmRlZiBMSU5VWAotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgot I2VuZGlmIC8qIExJTlVYICovCi0jaWZkZWYgUU5YMTYKLSNpbmNsdWRlIDxpb2N0bC5oPgotI2Vs c2UKLSNpZmRlZiBRTlg2Ci0jaW5jbHVkZSA8aW9jdGwuaD4KLSNlbmRpZiAvKiBRTlg2ICovCi0j ZW5kaWYgLyogUU5YMTYgKi8KLSNpZmRlZiBfX2JzZGlfXwotI2lmZGVmIFBPU0lYCi0jZGVmaW5l IF9QT1NJWF9TT1VSQ0UKLSNlbmRpZiAvKiBQT1NJWCAqLwotI2VuZGlmIC8qIF9fYnNkaV9fICov Ci0jaWZuZGVmIEJTRDQ0CQkJCS8qIFJlYWxseSBQT1NJWCAqLwotI2lmbmRlZiBDS19RTlgzMgkJ CS8qIHdhcyBDS19RTlgzMiAqLwotI2RlZmluZSBOT1NZU0lPQ1RMSAkJCS8qIE5vIGlvY3RsJ3Mg YWxsb3dlZC4gKi8KLSN1bmRlZiB1bHRyaXgJCQkJLyogVHVybiBvZmYgYW55IHVsdHJpeCBmZWF0 dXJlcy4gKi8KLSNlbmRpZiAvKiBDS19RTlgzMiAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZW5k aWYgLyogUE9TSVggKi8KLQotLyogU3lzdGVtIElJSSwgU3lzdGVtIFYgKi8KLQotI2lmZGVmIEFU VFNWCi0jaWZuZGVmIEJTRDQ0Ci0jaWZuZGVmIFBPU0lYCi0jaW5jbHVkZSA8dGVybWlvLmg+Ci0j ZW5kaWYgLyogUE9TSVggKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2lmZGVmIFRFUk1JT1gKLS8q IE5lZWQgdGhpcyBmb3IgdGVybWlveCBzdHJ1Y3R1cmUsIFJUUy9DVFMgYW5kIERUUi9DRCBmbG93 IGNvbnRyb2wgKi8KLSNpbmNsdWRlIDx0ZXJtaW94Lmg+Ci0gIHN0cnVjdCB0ZXJtaW94IHJjdHN4 OwotI2Vsc2UKLSNpZmRlZiBTVEVSTUlPWAotI2lmZGVmIFNDT19PU1I1MDQKLS8qIFNvcnJ5LCB0 aGlzIGlzIHRydWx5IGRpc2d1c3RpbmcgYnV0IGl0J3MgU0NPJ3MgZmF1bHQuICovCi0jaWZuZGVm IF9TVklEMwotI2RlZmluZSBfQ0tfU1ZJRDNfWAotI2RlZmluZSBfU1ZJRDMKLSNlbmRpZiAvKiBf U1ZJRDMgKi8KLSNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCi0jaW5jbHVkZSA8c3lzL3Rlcm1pb3gu aD4KLSAgc3RydWN0IHRlcm1pb3ggcmN0c3g7Ci0jaWZkZWYgQ0tfU1ZJRDNfWAotI3VuZGVmIF9T VklEMwotI3VuZGVmIENLX1NWSUQzX1gKLSNlbmRpZiAvKiBDS19TVklEM19YICovCi0jZW5kaWYg LyogU1RFUk1JT1ggKi8KLSNlbmRpZiAvKiBURVJNSU9YICovCi0jZW5kaWYgLyogQVRUU1YgKi8K LQotI2lmZGVmIENPSEVSRU5UCQkJLyogVXNlIHRlcm1pby5oLCBub3Qgc2d0dHkuaCBmb3IgQ29o ZXJlbnQgKi8KLSNpbmNsdWRlIDx0ZXJtaW8uaD4KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0j aWZkZWYgTUlOSVgJCQkJLyogTUlOSVggdXNlcyBpb2N0bCdzICovCi0jZGVmaW5lIE5PU1lTSU9D VExICQkJLyogYnV0IGhhcyBubyA8c3lzL2lvY3RsLmg+ICovCi0jZW5kaWYgLyogTUlOSVggKi8K LQotLyogT3RoZXJzICovCi0KLSNpZm5kZWYgTk9TWVNJT0NUTEgJCQkvKiBPdGhlcnMgdXNlIGlv Y3RsKCkgKi8KLSNpZmRlZiBTVU40UzUKLS8qCi0gIFRoaXMgaXMgdG8gZ2V0IHJpZCBvZiBjcHAg d2FybmluZyBtZXNzYWdlcyB0aGF0IG9jY3VyIGJlY2F1c2UgYWxsIG9mCi0gIHRoZXNlIHN5bWJv bHMgYXJlIGRlZmluZWQgYnkgYm90aCB0ZXJtaW9zLmggYW5kIGlvY3RsLmggb24gdGhlIFNVTi4K LSovCi0jdW5kZWYgRUNITwotI3VuZGVmIE5MMAotI3VuZGVmIE5MMQotI3VuZGVmIFRBQjAKLSN1 bmRlZiBUQUIxCi0jdW5kZWYgVEFCMgotI3VuZGVmIFhUQUJTCi0jdW5kZWYgQ1IwCi0jdW5kZWYg Q1IxCi0jdW5kZWYgQ1IyCi0jdW5kZWYgQ1IzCi0jdW5kZWYgRkYwCi0jdW5kZWYgRkYxCi0jdW5k ZWYgQlMwCi0jdW5kZWYgQlMxCi0jdW5kZWYgVE9TVE9QCi0jdW5kZWYgRkxVU0hPCi0jdW5kZWYg UEVORElOCi0jdW5kZWYgTk9GTFNICi0jZW5kaWYgLyogU1VONFM1ICovCi0jaW5jbHVkZSA8c3lz L2lvY3RsLmg+Ci0jZW5kaWYgLyogTk9TWVNJT0NUTEggKi8KLS8qCi0gIFdlIHJlYWxseSwgcmVh bGx5LCBSRUFMTFkgd2FudCBGSU9OUkVBRCwgYmVjYXVzZSBpdCBpcyB0aGUgb25seSB3YXkgdG8g ZmluZAotICBvdXQgbm90IGp1c3QgKmlmKiBzdHVmZiBpcyB3YWl0aW5nIHRvIGJlIHJlYWQsIGJ1 dCBob3cgbXVjaCwgd2hpY2ggaXMKLSAgY3JpdGljYWwgdG8gb3VyIHNsaWRpbmctd2luZG93IGFu ZCBzdHJlYW1pbmcgcHJvY2VkdXJlcywgbm90IHRvIG1lbnRpb24KLSAgZWZmaWNpZW5jeSBvZiBD T05ORUNULCBldGMuCi0qLwotI2lmZGVmIEJFTExWMTAKLSNpbmNsdWRlIDxzeXMvZmlsaW8uaD4J CQkvKiBGb3IgRklPTlJFQUQgKi8KLSNpZmRlZiBGSU9OUkVBRAotI2RlZmluZSBNWVJFQUQKLSNl bmRpZiAvKiBNWVJFQUQgKi8KLSNlbmRpZiAvKiBCRUxMVjEwICovCi0KLSNpZm5kZWYgRklPTlJF QUQKLS8qIEl0IHdhc24ndCBmb3VuZCBpbiBpb2N0bC5oIG9yIHRlcm0qLmggLSB0cnkgdGhlc2Ug cGxhY2VzOiAqLwotI2lmZGVmIFVOSVhXQVJFCi0jaW5jbHVkZSA8c3lzL2ZpbGlvLmg+Ci0jZWxz ZQotI2lmZGVmIFNPTEFSSVMKLSNpbmNsdWRlIDxzeXMvZmlsaW8uaD4KLSNlbmRpZiAvKiBTT0xB UklTICovCi0jZW5kaWYgLyogVU5JWFdBUkUgKi8KLSNlbmRpZiAvKiBGSU9OUkVBRCAqLwotCi0j aWZkZWYgWEVOSVggLyogV2FzIE1fVU5JWCBidXQgWEVOSVggaW1wbGllcyBNX1VOSVggYW5kIGFw cGxpZXMgdG8gWEVOSVggdG9vICovCi0vKgotICA8c3lzL3NvY2tldC5oPiBpbmNsdWRlZCBhYm92 ZSB2aWEgImNrY25ldC5oIiBkZWZpbmVzIEZJT05SRUFEIGFzCi0gIHNvbWV0aGluZy4gIER1ZSB0 byB0aGlzLCBpbl9jaGsoKSB1c2VzIHRoZSBGSU9OUkVBRCBpbnN0ZWFkIG9mIFJEQ0hLCi0gIGFu ZCB0aGUgaG90IGtleXMgZHVyaW5nIGZpbGUgdHJhbnNmZXIgKFggdG8gY2FuY2VsIGZpbGUgZXRj KSBkbyBub3QKLSAgd29yayBiZWNhdXNlIEZJT05SRUFEIGRvZXNuJ3Qgd29yayBldmVuIHRob3Vn aCBpdCBpcyBkZWZpbmVkLgotCi0gIE5PVEU6IFRoaXMgbWlnaHQgYWxzbyBiZSB0cnVlIGVsc2V3 aGVyZS4KLSovCi0jaWZkZWYgRklPTlJFQUQKLSN1bmRlZiBGSU9OUkVBRAotI2VuZGlmIC8qIEZJ T05SRUFEICovCi0jZW5kaWYgLyogWEVOSVggKi8KLQotI2lmZGVmIENLX1NDT1Y1CQkJCS8qIERp dHRvIGZvciBTQ08gT3BlblNlcnZlciA1LjAgKi8KLSNpZm5kZWYgU0NPX09TUjUwNwkJCS8qIDI5 OSAqLwotI2lmZGVmIEZJT05SRUFECi0jdW5kZWYgRklPTlJFQUQKLSNlbmRpZiAvKiBGSU9OUkVB RCAqLwotI2VuZGlmCS8qIFNDT19PU1I1MDcgKi8KLSNlbmRpZiAvKiBDS19TQ09WNSAqLwotCi0j aWZkZWYgU0NPX09TUjUwNwkJCS8qIDI5OSAqLwotI2lmZGVmIFJEQ0hLCi0jdW5kZWYgUkRDSEsK LSNlbmRpZgkvKiBSRENISyAqLwotI2VuZGlmCS8qIFNDT19PU1I1MDcgKi8KLQotLyogV2hldGhl ciB0byBpbmNsdWRlIDxmY250bC5oPiAqLwotCi0jaWZuZGVmIGlzNjhrCQkJCS8qIE9ubHkgYSBm ZXcgZG9uJ3QgaGF2ZSB0aGlzIG9uZS4gKi8KLSNpZm5kZWYgQlNENDEKLSNpZm5kZWYgRlQyMQot I2lmbmRlZiBGVDE4Ci0jaWZuZGVmIENPSEVSRU5UCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNlbmRp ZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlmIC8qIEZUMTggKi8KLSNlbmRpZiAvKiBGVDIxICovCi0j ZW5kaWYgLyogQlNENDEgKi8KLSNlbmRpZiAvKiBub3QgaXM2OGsgKi8KLQotI2lmZGVmIENPSEVS RU5UCi0jaWZkZWYgX0kzODYKLSNpbmNsdWRlIDxmY250bC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxz eXMvZmNudGwuaD4KLSNlbmRpZiAvKiBfSTM4NiAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0K LSNpZmRlZiBBVFQ3MzAwCQkJCS8qIFVuaXggUEMsIGludGVybmFsIG1vZGVtIGRpYWxlciAqLwot I2luY2x1ZGUgPHN5cy9waG9uZS5oPgotI2VuZGlmIC8qIEFUVDczMDAgKi8KLQotI2lmZGVmIEhQ VVgJCQkJLyogSFAtVVggdmFyaWF0aW9ucy4gKi8KLSNkZWZpbmUgSFBVWEpPQkNUTAotI2luY2x1 ZGUgPHN5cy9tb2RlbS5oPgkJCS8qIEhQLVVYIG1vZGVtIHNpZ25hbHMgKi8KLSNpZmRlZiBocDkw MDBzNTAwCQkJLyogTW9kZWwgNTAwICovCi0jdW5kZWYgSFBVWEpPQkNUTAotI2VuZGlmIC8qIGhw OTAwMHM1MDAgKi8KLSNpZmRlZiBIUFVYUFJFNjUKLSN1bmRlZiBIUFVYSk9CQ1RMCi10eXBlZGVm IGxvbmcgbWZsYWc7Ci0jZW5kaWYgLyogSFBVWFBSRTY1ICovCi0jaWZkZWYgSFBVWEpPQkNUTAot I2luY2x1ZGUgPHN5cy9ic2R0dHkuaD4JCQkvKiBIUC1VWCBCZXJrZWxleSB0dHkgc3VwcG9ydCAq LwotI2VuZGlmIC8qIEhQVVhKT0JDVEwgKi8KLSNlbmRpZiAvKiBIUFVYICovCi0KLS8qCi0gIFdo aWNoIHRpbWUuaCBmaWxlcyB0byBpbmNsdWRlLi4uIFNlZSBja2NkZWIuaCBmb3IgZGVmYXVsdHMu Ci0gIE5vdGUgdGhhdCAwLCAxLCAyLCBvciBhbGwgMyBvZiB0aGVzZSBjYW4gYmUgaW5jbHVkZWQg YWNjb3JkaW5nIHRvCi0gIHRoZSBzeW1ib2wgZGVmaW5pdGlvbnMuCi0qLwotI2lmbmRlZiBOT1RJ TUVICi0jaWZkZWYgVElNRUgKLSNpbmNsdWRlIDx0aW1lLmg+Ci0jZW5kaWYgLyogVElNRUggKi8K LSNlbmRpZiAvKiBOT1RJTUVIICovCi0KLSNpZm5kZWYgTk9TWVNUSU1FSAotI2lmZGVmIFNZU1RJ TUVICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZiAvKiBTWVNUSU1FSCAqLwotI2VuZGlm IC8qIE5PU1lTVElNRUggKi8KLQotI2lmbmRlZiBOT1NZU1RJTUVCSAotI2lmZGVmIFNZU1RJTUVC SAotI2luY2x1ZGUgPHN5cy90aW1lYi5oPgotI2VuZGlmIC8qIFNZU1RJTUVCSCAqLwotI2VuZGlm IC8qIE5PU1lTVElNRUJIICovCi0KLSNpZm5kZWYgTk9EQ0xUSU1FVkFMCi0jaWZkZWYgRENMVElN RVZBTAotLyoKLSAgSW4gY2VydGFpbiBQT1NJWCBidWlsZHMgKGxpa2UgVW5peHdhcmUgNyksIDxb c3lzL110aW1lLmg+IHJlZnVzZXMgdG8KLSAgZGVmaW5lIHRoZSBzdHJ1Y3RzIHdlIG5lZWQgdG8g YWNjZXNzIHRoZSBoaWdoZXIgc3BlZWRzLCBzbyB3ZSBoYXZlIHRvCi0gIGRvIGl0IG91cnNlbHZl cy4KLSovCi1zdHJ1Y3QgdGltZXZhbCB7Ci0gICAgbG9uZyB0dl9zZWM7Ci0gICAgbG9uZyB0dl91 c2VjOwotfTsKLXN0cnVjdCB0aW1lem9uZSB7Ci0gICAgaW50IHR6X21pbnV0ZXN3ZXN0OwotICAg IGludCB0el9kc3R0aW1lOwotfTsKLSNlbmRpZiAvKiBEQ0xUSU1FVkFMICovCi0jZW5kaWYgLyog Tk9EQ0xUSU1FVkFMICovCi0KLSNpZmRlZiBfX2xpbnV4X18KLS8qIFRISVMgSVMgT0JTT0xFVEUg c2luY2UgYWJvdXQgTGludXggMC45MiAqLwotI2lmZGVmIE9MSU5VWEhJU1BFRUQKLSNpbmNsdWRl IDxsaW51eC9zZXJpYWwuaD4KLSNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCi0jaWZkZWYgX19h bHBoYV9fCQkJLyogTGludXggb24gREVDIEFscGhhICovCi0jaWZuZGVmIF9fR0xJQkNfXwkJCS8q IEJ1dCBub3Qgd2l0aCBnbGliYyAqLwotI2luY2x1ZGUgPGFzbS90ZXJtaW9zLmg+Ci0jZW5kaWYg LyogX19HTElCQ19fICovCi0jZW5kaWYgLyogX19hbHBoYV9fICovCi0jZW5kaWYgLyogX19saW51 eF9fICovCi0KLSNpZmRlZiBOT0lFWFRFTgkJCQkvKiBUaGlzIGlzIGJyb2tlbiBvbiBzb21lIHN5 c3RlbXMgKi8KLSN1bmRlZiBJRVhURU4JCQkJLyogbGlrZSBDb252ZXgvT1MgOS4xICovCi0jZW5k aWYgLyogTk9JRVhURU4gKi8KLSNpZm5kZWYgSUVYVEVOCQkJCS8qIFR1cm4gb2ZmIF5PL15WIHBy b2Nlc3NpbmcuICovCi0jZGVmaW5lIElFWFRFTiAwCQkJLyogTmVlZGVkLCBhdCBsZWFzdCwgb24g QlNESS4gKi8KLSNlbmRpZiAvKiBJRVhURU4gKi8KLS8qCi0gIFBpY2sgdXAgZGVmaW5pdGlvbnMg bmVlZGVkIGZvciBzZWxlY3QoKSBpZiB3ZSBkb24ndCBoYXZlIHRoZW0gYWxyZWFkeS4KLSAgTm9y bWFsbHkgdGhleSBjb21lIGZyb20gPHN5cy90eXBlcy5oPiBidXQgc29tZSBzeXN0ZW1zIGdldCB0 aGVtIGZyb20KLSAgPHN5cy9zZWxlY3QuaD4uLi4gIFJhdGhlciB0aGFuIGhhcmR3aXJlIGFsbCBv ZiB0aGVtIGludG8gdGhlIHNvdXJjZSwgd2UKLSAgaW5jbHVkZSBpdCBpZiBTRUxFQ1RfSCBpcyBk ZWZpbmVkIGluIGNvbXBpbGUtdGltZSBDRkxBR1MuCi0qLwotI2lmbmRlZiBTQ09fT1NSNTA0Ci0j aWZkZWYgU0VMRUNUX0gKLSNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+Ci0jZW5kaWYgLyogU0VMRUNU X0ggKi8KLSNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCi0KLSNpZmRlZiBhZWdpcwotI2luY2x1ZGUg Ii9zeXMvaW5zL2Jhc2UuaW5zLmMiCi0jaW5jbHVkZSAiL3N5cy9pbnMvZXJyb3IuaW5zLmMiCi0j aW5jbHVkZSAiL3N5cy9pbnMvaW9zLmlucy5jIgotI2luY2x1ZGUgIi9zeXMvaW5zL3Npby5pbnMu YyIKLSNpbmNsdWRlICIvc3lzL2lucy9wYWQuaW5zLmMiCi0jaW5jbHVkZSAiL3N5cy9pbnMvdGlt ZS5pbnMuYyIKLSNpbmNsdWRlICIvc3lzL2lucy9wZm0uaW5zLmMiCi0jaW5jbHVkZSAiL3N5cy9p bnMvcGdtLmlucy5jIgotI2luY2x1ZGUgIi9zeXMvaW5zL2VjMi5pbnMuYyIKLSNpbmNsdWRlICIv c3lzL2lucy90eXBlX3VpZHMuaW5zLmMiCi0jaW5jbHVkZSA8ZGVmYXVsdF9hY2wuaD4KLSN1bmRl ZiBUSU9DRVhDTAotI3VuZGVmIEZJT05SRUFECi0jZW5kaWYgLyogYWVnaXMgKi8KLQotI2lmZGVm IHN4YUU1MAkJCQkvKiBQRlUgQ29tcGFjdCBBIFNYL0EgVElTUCBWMTAvTDUwICovCi0jdW5kZWYg RklPTlJFQUQKLSNlbmRpZiAvKiBzeGFFNTAgKi8KLQotLyogVGhlIGZvbGxvd2luZyAjZGVmaW5l cyBhcmUgY2F0Y2gtYWxscyBmb3IgdGhvc2Ugc3lzdGVtcyAqLwotLyogdGhhdCBkaWRuJ3QgaGF2 ZSBvciBjb3VsZG4ndCBmaW5kIDxmaWxlLmg+Li4uICovCi0KLSNpZm5kZWYgRlJFQUQKLSNkZWZp bmUgRlJFQUQgMHgwMQotI2VuZGlmIC8qIEZSRUFEICovCi0KLSNpZm5kZWYgRldSSVRFCi0jZGVm aW5lIEZXUklURSAweDEwCi0jZW5kaWYgLyogRldSSVRFICovCi0KLSNpZm5kZWYgT19SRE9OTFkK LSNkZWZpbmUgT19SRE9OTFkgMDAwCi0jZW5kaWYgLyogT19SRE9OTFkgKi8KLQotLyogVGhpcyBp cyBmb3IgYW5jaWVudCBVbml4ZXMgdGhhdCBkb24ndCBoYXZlIHRoZXNlIHR0eSBzeW1ib2xzIGRl ZmluZWQuICovCi0KLSNpZm5kZWYgUEVORElOCi0jZGVmaW5lIFBFTkRJTiBJQ0FOT04KLSNlbmRp ZiAvKiBQRU5ESU4gKi8KLSNpZm5kZWYgRkxVU0hPCi0jZGVmaW5lIEZMVVNITyBJQ0FOT04KLSNl bmRpZiAvKiBGTFVTSE8gKi8KLSNpZm5kZWYgRVhUUFJPQwotI2RlZmluZSBFWFRQUk9DIElDQU5P TgotI2VuZGlmIC8qIEVYVFBST0MgKi8KLQotI2lmZGVmIFNWT1JQT1NJWAotLyoKLSAgTW9kZW0g c2lnbmFscyBhcmUgYWxzbyBmb3JiaWRkZW4gaW4gdGhlIFBPU0lYIHdvcmxkLiAgQnV0IHNvbWUg UE9TSVgtYmFzZWQKLSAgcGxhdGZvcm1zIGxldCB1cyBhdCB0aGVtIGFueXdheSBpZiB3ZSBrbm93 IHdoZXJlIHRvIGxvb2suCi0qLwotI2lmbmRlZiBORUVETURNREVGUwotLyogRG9lc24ndCB3b3Jr IGZvciBMaW51eCAqLwotI2lmZGVmIFVOSVhXQVJFNwotI2RlZmluZSBORUVETURNREVGUwotI2Vu ZGlmIC8qIFVOSVhXQVJFNyAqLwotI2VuZGlmIC8qIE5FRURNRE1ERUZTICovCi0KLSNpZmRlZiBO RUVETURNREVGUwotI2lmbmRlZiBUSU9DTUdFVAotI2RlZmluZSBUSU9DTUdFVCAoKCd0Jzw8OCl8 MjkpCi0jZW5kaWYgLyogVElPQ01HRVQgKi8KLQotI2lmbmRlZiBUSU9DTV9EVFIKLSNkZWZpbmUg VElPQ01fRFRSIDB4MDAwMgotI2VuZGlmIC8qIFRJT0NNX0RUUiAqLwotI2lmbmRlZiBUSU9DTV9S VFMKLSNkZWZpbmUgVElPQ01fUlRTIDB4MDAwNAotI2VuZGlmIC8qIFRJT0NNX1JUUyAqLwotI2lm bmRlZiBUSU9DTV9DVFMKLSNkZWZpbmUgVElPQ01fQ1RTIDB4MDAyMAotI2VuZGlmIC8qIFRJT0NN X0NUUyAqLwotI2lmbmRlZiBUSU9DTV9DQVIKLSNkZWZpbmUgVElPQ01fQ0FSIDB4MDA0MAotI2Vu ZGlmIC8qIFRJT0NNX0NBUiAqLwotI2lmbmRlZiBUSU9DTV9STkcKLSNkZWZpbmUgVElPQ01fUk5H IDB4MDA4MAotI2VuZGlmIC8qIFRJT0NNX1JORyAqLwotI2lmbmRlZiBUSU9DTV9EU1IKLSNkZWZp bmUgVElPQ01fRFNSIDB4MDEwMAotI2VuZGlmIC8qIFRJT0NNX0RTUiAqLwotI2VuZGlmIC8qIE5F RURNRE1ERUZTICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0KLS8qIERlY2xhcmF0aW9ucyAq LwotCi0jaWZkZWYgT1hPUwotI3VuZGVmIFRDR0VUQQotI3VuZGVmIFRDU0VUQQotI3VuZGVmIFRD U0VUQVcKLSN1bmRlZiBUQ1NFVEFGCi0jZGVmaW5lIFRDR0VUQSBUQ0dFVFMKLSNkZWZpbmUgVENT RVRBIFRDU0VUUwotI2RlZmluZSBUQ1NFVEFXIFRDU0VUU1cKLSNkZWZpbmUgVENTRVRBRiBUQ1NF VFNGCi0jZGVmaW5lIHRlcm1pbyB0ZXJtaW9zCi0jZW5kaWYgLyogT1hPUyAqLwotCi0jaWZkZWYg U1ZPUlBPU0lYCQkJLyogQVQmVCBTeXMgViBvciBQT1NJWCAqLwotI2lmZGVmIFVOSVhXQVJFUE9T SVgJCQkvKiBVbml4V2FyZSA3IFBPU0lYIGJ1aWxkICovCi0vKgotICBJbiBVbml4d2FyZSBQT1NJ WCBidWlsZHMsIDxbc3lzL110aW1lLmg+IHJlZnVzZXMgdG8gZGVmaW5lIHRoZQotICBzdHJ1Y3Rz IHdlIG5lZWQgdG8gYWNjZXNzIHRoZSBoaWdoZXIgc3BlZWRzLCBzbyB3ZSBoYXZlIHRvIGRvIGl0 Ci0gIG91cnNlbHZlcy4KLSovCi1zdHJ1Y3QgdGltZXZhbCB7Ci0gICAgbG9uZyB0dl9zZWM7Ci0g ICAgbG9uZyB0dl91c2VjOwotfTsKLXN0cnVjdCB0aW1lem9uZSB7Ci0gICAgaW50IHR6X21pbnV0 ZXN3ZXN0OwotICAgIGludCB0el9kc3R0aW1lOwotfTsKLSNlbmRpZiAvKiBVTklYV0FSRVBPU0lY ICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0KLSNpZmRlZiBfX0dOVUNfXwotI2lmZGVmIFhF TklYCi0vKgotICBCZWNhdXNlIFhlbml4IDx0aW1lLmg+IGRvZXNuJ3QgZGVjbGFyZSB0aW1lKCkg aWYgd2UncmUgdXNpbmcgZ2NjLgotKi8KLXRpbWVfdCB0aW1lKCk7Ci0jZW5kaWYgLyogWEVOSVgg Ki8KLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwotCi0vKiBTcGVjaWFsIHN0dWZmIGZvciBWNyBpbnB1 dCBidWZmZXIgcGVla2luZyAqLwotCi0jaWZkZWYgIFY3Ci1pbnQga21lbVsyXSA9IHsgLTEsIC0x fTsKLWNoYXIgKmluaXRyYXdxKCksICpxYWRkclsyXT17MCwwfTsKLSNkZWZpbmUgQ09OIDAKLSNk ZWZpbmUgVFRZIDEKLSNlbmRpZiAvKiBWNyAqLwotCi0vKiBkZnR0eSBpcyB0aGUgZGV2aWNlIG5h bWUgb2YgdGhlIGRlZmF1bHQgZGV2aWNlIGZvciBmaWxlIHRyYW5zZmVyICovCi0vKiBkZmxvYyBp cyAwIGlmIGRmdHR5IGlzIHRoZSB1c2VyJ3MgY29uc29sZSB0ZXJtaW5hbCwgMSBpZiBhbiBleHRl cm5hbCBsaW5lICovCi0KLSNpZmRlZiBCRU9TCi0gICAgY2hhciAqIGRmdHR5ID0gTlVMTDsKLSAg ICBjaGFyICogZGZtZG0gPSAibm9uZSI7Ci0gICAgaW50IGRmbG9jID0gMDsgICAgICAgICAgICAg ICAgICAvKiB0aGF0IGdvZXMgaW4gbG9jYWwgbW9kZSBieSBkZWZhdWx0ICovCi0jZWxzZQotI2lm bmRlZiBERlRUWQotI2lmZGVmIFBST1ZYMQotICAgIGNoYXIgKmRmdHR5ID0gIi9kZXYvY29tMS5k b3V0IjsgLyogT25seSBleGFtcGxlIHNvIGZhciBvZiBhIHN5c3RlbSAqLwotICAgIGNoYXIgKmRm bWRtID0gIm5vbmUiOwotICAgIGludCBkZmxvYyA9IDE7ICAgICAgICAgICAgICAgICAgLyogdGhh dCBnb2VzIGluIGxvY2FsIG1vZGUgYnkgZGVmYXVsdCAqLwotI2Vsc2UKLSAgICBjaGFyICpkZnR0 eSA9IENUVE5BTTsgICAgICAgICAgICAgICAvKiBSZW1vdGUgYnkgZGVmYXVsdCwgdXNlIG5vcm1h bCAqLwotICAgIGNoYXIgKmRmbWRtID0gIm5vbmUiOwotICAgIGludCBkZmxvYyA9IDA7ICAgICAg ICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsaW5nIHRlcm1pbmFsIG5hbWUuICovCi0jZW5kaWYg LyogUFJPVlgxICovCi0jZWxzZQotICAgIGNoYXIgKmRmdHR5ID0gREZUVFk7CQkvKiBEZWZhdWx0 IGxvY2F0aW9uIHNwZWNpZmllZCBvbiAqLwotICAgIGNoYXIgKmRmbWRtID0gIm5vbmUiOwkJLyog Y29tbWFuZCBsaW5lLiAqLwotICAgIGludCBkZmxvYyA9IDE7ICAgICAgICAgICAgICAgICAgICAg IC8qIGNvbnRyb2xsaW5nIHRlcm1pbmFsIG5hbWUuICovCi0jZW5kaWYgLyogREZUVFkgKi8KLSNl bmRpZiAvKiBCRU9TICovCi0KLSNkZWZpbmUgQ09OX1JFUyAwCQkJLyogQ29uc29sZSBzdGF0ZSBp cyAicmVzZXQiICovCi0jZGVmaW5lIENPTl9DQiAgMQkJCS8qIENvbnNvbGUgc3RhdGUgaXMgQ0JS RUFLICovCi0jZGVmaW5lIENPTl9CSU4gMgkJCS8qIENvbnNvbGUgc3RhdGUgaXMgYmluYXJ5ICov Ci0gICAgc3RhdGljIGludCBjb25zdGF0ZSA9IENPTl9SRVM7Ci0KLSNkZWZpbmUgQ09OSV9SRVMg MAkJCS8qIENvbnNvbGUgaW50ZXJydXB0cyBhcmUgInJlc2V0IiAqLwotI2RlZmluZSBDT05JX0lO VCAxCQkJLyogQ29uc29sZSBpbnR0ZXJ1cHRzIGFyZSBzZXQgKi8KLSNkZWZpbmUgQ09OSV9OT0kg MgkJCS8qIENvbnNvbGUgaW50dGVydXB0cyBhcmUgZGlzYWJsZWQgKi8KLSAgICBzdGF0aWMgaW50 IGNvbmlzdGF0ZSA9IENPTklfUkVTOwotCi0jaWZkZWYgQ0tfU01BTEwKLSNkZWZpbmUgQ09OQlVG U0laIDE1Ci0jZWxzZQotI2RlZmluZSBDT05CVUZTSVogMjU1Ci0jZW5kaWYgLyogQ0tfU01BTEwg Ki8KLSAgICBzdGF0aWMgY2hhciBjb25idWZbQ09OQlVGU0laXTsJLyogQ29uc29sZSByZWFkYWhl YWQgYnVmZmVyICovCi0gICAgc3RhdGljIGludCAgY29uYnVmbiA9IDA7CQkvKiBDaGFycyBpbiBy ZWFkYWhlYWQgYnVmZmVyICovCi0gICAgc3RhdGljIGNoYXIgKmNvbmJ1ZnAgPSBjb25idWY7CS8q IE5leHQgY2hhciBpbiByZWFkYWhlYWQgYnVmZmVyICovCi0KLSAgICBjaGFyIGN0dG5hbVtERVZO QU1MRU4rMV0gPSB7ICdcMCcsICdcMCcgfTsgLyogRGV0ZXJtaW5lZCBhdCBydW50aW1lICovCi0K LSNpZmRlZiBSVFUKLSAgICBpbnQgcnR1X2J1ZyA9IDA7CQkgICAgLyogc2V0IHRvIDEgd2hlbiBy ZXR1cm5pbmcgZnJvbSBTSUdUU1RQICovCi0jZW5kaWYgLyogUlRVICovCi0KLSAgICBpbnQgZGZw cnR5ID0gREVGUEFSOyAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHBhcml0eSAoMCA9IG5vbmUp ICovCi0gICAgaW50IHR0cHJ0eSA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogVGhlIHBhcml0 eSB0aGF0IGlzIGluIHVzZS4gKi8KLSAgICBzdGF0aWMgaW50IHR0cG1zayA9IDB4ZmY7CQkvKiBQ YXJpdHkgc3RyaXBwaW5nIG1hc2suICovCi0gICAgaW50IHR0bWRtID0gMDsgICAgICAgICAgICAg ICAgICAgICAgLyogTW9kZW0gaW4gdXNlLiAqLwotICAgIGludCB0dGNhcnIgPSBDQVJfQVVUOwkJ LyogQ2FycmllciBoYW5kbGluZyBtb2RlLiAqLwotICAgIGludCBkZmZsb3cgPSBGTE9fTk9ORTsJ CS8qIERlZmF1bHQgZmxvdyBjb250cm9sIGlzIE5PTkUgKi8KLSAgICBpbnQgYmFja2dyZCA9IDA7 ICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgaW4gZm9yZWdyb3VuZCAobm8gJyYnICkgKi8K LSNpZmRlZiBGX1NFVEZMCi0gICAgaW50IGluaWZsYWdzID0gLTE7CQkJLyogZmNudGwgZmxhZ3Mg Zm9yIHR0eWZkICovCi0jZW5kaWYgLyogRl9TRVRGTCAqLwotICAgIGludCBmZGZsYWcgPSAwOwkJ CS8qIEZsYWcgZm9yIHJlZGlyZWN0ZWQgc3RkaW8gKi8KLSAgICBpbnQgdHRmZGZsZyA9IDA7CQkJ LyogT3BlbiBGaWxlIGRlc2NyaXB0b3Igd2FzIGdpdmVuICovCi0gICAgaW50IHR2dGZsZyA9IDA7 CQkJLyogRmxhZyB0aGF0IHR0dnQgaGFzIGJlZW4gY2FsbGVkICovCi0gICAgbG9uZyB0dHNwZWVk ID0gLTFMOwkJCS8qIEZvciBzYXZpbmcgc3BlZWQgKi8KLSAgICBpbnQgdHRmbG93ID0gLTk7CQkJ LyogRm9yIHNhdmluZyBmbG93ICovCi0gICAgaW50IHR0bGQgPSAtMTsJCQkvKiBMaW5lIGRpc2Np cGxpbmUgKi8KLQotI2lmZGVmIHNvbnlfbmV3cwotICAgIHN0YXRpYyBpbnQga21fY29uID0gLTE7 CQkvKiBLYW5qaSBtb2RlIGZvciBjb25zb2xlIHR0eSAqLwotICAgIHN0YXRpYyBpbnQga21fZXh0 ID0gLTE7CQkvKiBLYW5qaSBtb2RlIGZvciBleHRlcm5hbCBkZXZpY2UgKi8KLSNlbmRpZiAvKiBz b255X25ld3MgKi8KLQotI2lmZGVmIFBBUlNFTlNFCi0gICAgc3RhdGljIGludCBuZWVkcGNoayA9 IDE7CQkvKiBOZWVkIHBhcml0eSBjaGVjayAqLwotI2Vsc2UKLSAgICBzdGF0aWMgaW50IG5lZWRw Y2hrID0gMDsKLSNlbmRpZiAvKiBQQVJTRU5TRSAqLwotCi0gICAgZXh0ZXJuIGludCBzdG9wYml0 czsJCS8qIFN0b3AgYml0cyAqLwotI2lmZGVmIEhXUEFSSVRZCi0vKgotICBVbmZvcnR1bmF0ZWx5 IHdlIG11c3QgZG8gdGhpcyB3aXRoIGdsb2JhbCB2YXJpYWJsZXMgcmF0aGVyIHRoYW4gdGhyb3Vn aCB0aGUKLSAgdHQuLi4oKSBBUElzIHRvIGF2b2lkIGNoYW5naW5nIHRoZSBBUElzIGFuZCB0aGUg bWFueSBtb2R1bGVzIHRoYXQgdXNlIHRoZW0uCi0gIElmIGh3cGFyaXR5ICE9IDAsIHRoaXMgaW5k aWNhdGVzIDggZGF0YSBiaXRzICsgcGFyaXR5LCByYXRoZXIgdGhhbiA3IGRhdGEKLSAgYml0cyAr IHBhcml0eSBvciA4IGRhdGEgYml0cyBhbmQgbm8gcGFyaXR5LCBhbmQgb3ZlcnJpZGVzIHRoZSBy ZWd1bGFyIHBhcml0eQotICB2YXJpYWJsZSwgd2hpY2ggaXMgY29tbXVuaWNhdGVkIHRvIHRoaXMg bW9kdWxlIHRocnUgdHRwa3QoKSwgYW5kIHJlcHJlc2VudGVkCi0gIGxvY2FsbHkgYnkgdGhlIHR0 cHJ0eSB2YXJpYWJsZS4KLSovCi0gICAgZXh0ZXJuIGludCBod3Bhcml0eTsJCS8qIEhhcmR3YXJl IHBhcml0eSAqLwotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQKLSNp ZmRlZiBUQ1BfTk9ERUxBWQotc3RhdGljIGludCBub2RlbGF5X3NhdiA9IC0xOwotI2VuZGlmIC8q IFRDUF9OT0RFTEFZICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLXN0YXRpYyBpbnQgc2ln aW50X2lnbiA9IDA7CQkvKiBTSUdJTlQgaXMgaWdub3JlZCAqLwotCi0vKgotICBIYXZpbmcgdGhp cyBtb2R1bGUgcmVseSBvbiBleHRlcm5hbCBnbG9iYWxzIGlzIGJhZCwgYnV0IGZpeGluZyB0aGlz Ci0gIHJlcXVpcmVzIG92ZXJoYXVsIG9mIHRoZSBjayp0aW8uYyBtb2R1bGVzIGZvciBhbGwgdGhl IGRpZmZlcmVudCBvcGVyYXRpbmcKLSAgc3lzdGVtcyBzdXBwb3J0ZWQgYnkgQy1LZXJtaXQuICBM ZWZ0IGZvciBhIGZ1dHVyZSByZWxlYXNlLgotKi8KLWV4dGVybiBpbnQgdHRucHJvdG87CQkJLyog RGVmaW5lZCBpbiBja2NuZXQuYyAqLwotZXh0ZXJuIGludCB0dG5ldDsJCQkvKiBEZWZpbmVkIGlu IGNrY25ldC5jICovCi1leHRlcm4gaW50IG5vcHVzaCwgeGZyY2FuLCB4ZnJjaHIsIHhmcm51bTsg LyogRGVmaW5lZCBpbiBja2NtYWkuYyAqLwotZXh0ZXJuIGludCB4c3VzcGVuZCwgd2FzY2xvc2Vk OwotZXh0ZXJuIGludCBpbnNlcnZlciwgbG9jYWw7Ci0KLWludCBja3hlY2ggPSAwOyAvKiAwIGlm IHN5c3RlbSBub3JtYWxseSBlY2hvZXMgY29uc29sZSBjaGFyYWN0ZXJzLCBlbHNlIDEgKi8KLQot aW50IGNrbWF4ZmlsZXMgPSAwOwkJCS8qIE1heCBudW1iZXIgb2Ygb3BlbiBmaWxlcyAqLwotCi0j aWZkZWYgQ0tfRU5DUllQVElPTgkJCS8qIEtlcmJlcm9zICovCi0jaW5jbHVkZSAiY2t1YXRoLmgi Ci1leHRlcm4gaW50IG1lX2VuY3J5cHQsIHVfZW5jcnlwdDsKLSNlbmRpZiAvKiBDS19FTkNSWVBU SU9OICovCi0KLS8qIERlY2xhcmF0aW9ucyBvZiB2YXJpYWJsZXMgZ2xvYmFsIHdpdGhpbiB0aGlz IG1vZHVsZSAqLwotCi0jaWZkZWYgVFRMRUJVRgkJCQkvKiBTZWUgY2tjbmV0LmggKi8KLWludCB0 dHB1c2ggPSAtMTsKLSNkZWZpbmUgTEVCVUZTSVogNDA5Ngotc3RhdGljIENIQVIgbGVfYnVmW0xF QlVGU0laXTsKLXN0YXRpYyBpbnQgbGVfc3RhcnQgPSAwLCBsZV9lbmQgPSAwLCBsZV9kYXRhID0g MDsKLSNlbmRpZiAvKiBUVExFQlVGICovCi0KLSNkZWZpbmUgTVNHQlVGX1NJWkUgMTAyNAkJLyog Rm9yIGRlYnVnZ2luZyAqLwotc3RhdGljIGNoYXIgbXNnYnVmW01TR0JVRl9TSVpFXTsKLQotc3Rh dGljIGludCBnb3RzaWdzID0gMDsKLQotc3RhdGljIHRpbWVfdCB0Y291bnQgPSAodGltZV90KTA7 CS8qIEVsYXBzZWQgdGltZSBjb3VudGVyICovCi0KLXN0YXRpYyBTSUdUWVAgKCpzYXZhbCkoKSAg ICAgPSBOVUxMOwkvKiBGb3Igc2F2aW5nIGFsYXJtKCkgaGFuZGxlciAqLwotc3RhdGljIFNJR1RZ UCAoKnNhdnF1aXQpKCkgICA9IE5VTEw7CS8qIGFuZCBvdGhlciBzaWduYWwgaGFuZGxlcnMgKi8K LSNpZmRlZiBTSUdVU1IxCi1zdGF0aWMgU0lHVFlQICgqc2F2dXNyMSkoKSAgID0gTlVMTDsKLSNl bmRpZiAvKiBTSUdVU1IxICovCi0jaWZkZWYgU0lHVVNSMgotc3RhdGljIFNJR1RZUCAoKnNhdnVz cjIpKCkgICA9IE5VTEw7Ci0jZW5kaWYgLyogU0lHVVNSMiAqLwotI2lmZGVmIFNJR1BJUEUKLXN0 YXRpYyBTSUdUWVAgKCpzYXZwaXBlKSgpICAgPSBOVUxMOwotI2VuZGlmIC8qIFNJR1BJUEUgKi8K LSNpZmRlZiBTSUdEQU5HRVIKLXN0YXRpYyBTSUdUWVAgKCpzYXZkYW5nZXIpKCkgPSBOVUxMOwot I2VuZGlmIC8qIFNJR0RBTkdFUiAqLwotCi0jaWZuZGVmIE5PSkMKLXN0YXRpYyBTSUdUWVAgKCpq Y2hkbHIpKCkgICAgPSBOVUxMOwkvKiBGb3IgY2hlY2tpbmcgc3VzcGVuZCBoYW5kbGVyICovCi0j ZW5kaWYgLyogTk9KQyAqLwotc3RhdGljIGludCBqY3NoZWxsID0gLTE7CQkvKiBBbmQgZmxhZyBm b3IgcmVzdWx0ICovCi0KLS8qCi0gIEJSRUFLTlVMUyBpcyBkZWZpbmVkIGZvciBzeXN0ZW1zIHRo YXQgc2ltdWxhdGUgc2VuZGluZyBhIEJSRUFLIHNpZ25hbAotICBieSBzZW5kaW5nIGEgYnVuY2gg b2YgTlVMIGNoYXJhY3RlcnMgYXQgbG93IHNwZWVkLgotKi8KLSNpZmRlZiBQUk9WWDEKLSNpZm5k ZWYgQlJFQUtOVUxTCi0jZGVmaW5lIEJSRUFLTlVMUwotI2VuZGlmIC8qIEJSRUFLTlVMUyAqLwot I2VuZGlmIC8qIFBST1ZYMSAqLwotCi0jaWZkZWYgVjcKLSNpZm5kZWYgQlJFQUtOVUxTCi0jZGVm aW5lIEJSRUFLTlVMUwotI2VuZGlmIC8qIEJSRUFLTlVMUyAqLwotI2VuZGlmIC8qIFY3ICovCi0K LSNpZmRlZiBCUkVBS05VTFMKLXN0YXRpYyBjaGFyCQkJCS8qIEEgc3RyaW5nIG9mIG51bGxzICov Ci0qYnJudWxzID0gIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDAiOwotI2VuZGlmIC8qIEJSRUFLTlVMUyAqLwotCi0jaWZkZWYgQ0tfUE9TSVhfU0lH CQkJLyogTG9uZ2p1bXAgYnVmZmVycyAqLwotc3RhdGljIHNpZ2ptcF9idWYgc2pidWY7CQkvKiBQ T1NJWCBzaWduYWwgaGFuZGxpbmcgKi8KLSNlbHNlCi1zdGF0aWMgam1wX2J1ZiBzamJ1ZjsKLSNl bmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLQotI2lmZGVmIFY3Ci1zdGF0aWMgam1wX2J1ZiBqamJ1 ZjsKLSNlbmRpZiAvKiBWNyAqLwotCi0vKiBzdGF0aWMgKi8JCQkJLyogKE5vdCBzdGF0aWMgYW55 IG1vcmUpICovCi1pbnQgdHR5ZmQgPSAtMTsJCQkJLyogVFRZIGZpbGUgZGVzY3JpcHRvciAqLwot Ci1pbnQgdHRwaXBlID0gMDsJCQkJLyogTkVUQ01EOiBVc2UgcGlwZSBpbnN0ZWFkIG9mIHR0eWZk ICovCi1pbnQgdHRwdHkgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUUFRZOiBV c2UgcHR5IGluc3RlYWQgb2YgdHRmeWQgKi8KLQotI2lmZGVmIE5FVFBUWQkJCQkvKiBUaGVzZSBh cmUgaW4gY2t1cHR5LmMgKi8KLWV4dGVybiBQSURfVCBwdHlfZm9ya19waWQ7Ci1leHRlcm4gaW50 IHB0eV9tYXN0ZXJfZmQsIHB0eV9zbGF2ZV9mZDsKLSNlbmRpZgkvKiBORVRQVFkgKi8KLQotI2lm ZGVmIE5FVENNRAotI2lmZGVmIE5FVENPTk4KLXN0YXRpYyBpbnQgcGlwZTBbMl0sIHBpcGUxWzJd OwkJLyogUGlwZXMgZm9yIG5ldCBpL28gKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi1zdGF0aWMg UElEX1QgdHRwaWQgPSAwOwkJCS8qIFByb2Nlc3MgSUQgZm9yIGZvcmsgKi8KLXN0YXRpYyBpbnQg ZmRpbiwgZmRvdXQ7CQkJLyogRmlsZSBkZXNjcmlwdG9ycyBmb3IgcGlwZSAqLwotc3RhdGljIEZJ TEUgKiB0dG91dCA9IE5VTEw7CQkvKiBGaWxlIHBvaW50ZXIgZm9yIG91dHB1dCBwaXBlICovCi0j aWZkZWYgRENMRkRPUEVOCi0vKiBmZG9wZW4oKSBuZWVkcyBkZWNsYXJpbmcgYmVjYXVzZSBpdCdz IG5vdCBkZWNsYXJlZCBpbiA8c3RkaW8uaD4gKi8KLV9QUk9UT1RZUCggRklMRSAqIGZkb3Blbiwg KGludCwgY2hhciAqKSApOwotI2VuZGlmIC8qIERDTEZET1BFTiAqLwotI2VuZGlmIC8qIE5FVENN RCAqLwotCi1leHRlcm4gaW50IHBleGl0c3RhdCwgcXVpZXQ7Ci0KLSNpZmRlZiBQbGFuOQotaW50 IHR0eWN0bGZkICA9IC0xOyAgIC8qIFRUWSBjb250cm9sIGNoYW5uZWwgLSBXaGF0PyBVTklYIGRv ZXNuJ3QgaGF2ZSBvbmU/ICovCi1pbnQgY29uc2N0bGZkID0gLTE7CQkJLyogQ29uc29sZSBjb250 cm9sIGNoYW5uZWwgKi8KLWludCBub2lzZWZkID0gLTE7CQkJLyogdG9uZSBjaGFubmVsICovCi1z dGF0aWMgaW50IHR0eWxhc3RzcGVlZCA9IC0xOwkJLyogU28gd2UgY2FuIGxpZSBhYm91dCB0aGUg c3BlZWQgKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotCi1pbnQgdGVsbmV0ZmQgPSAwOwkJCS8qIEZp bGUgZGVzY3JpcHRvciBpcyBmb3IgdGVsbmV0ICovCi0jaWZkZWYgTkVUQ09OTgotaW50IHgyNWZk ID0gMDsJCQkJLyogRmlsZSBkZXNjcmlwdG9yIGlzIGZvciBYLjI1ICovCi0jZW5kaWYgLyogTkVU Q09OTiAqLwotCi1jaGFyIGxvY2twaWRbMTZdID0geyAnXDAnLCAnXDAnIH07CS8qIFBJRCBzdG9y ZWQgaW4gbG9ja2ZpbGUsIGFzIHN0cmluZyAqLwotCi1zdGF0aWMgaW50IGxrZiA9IDAsICAgICAg ICAgICAgICAgICAgICAgLyogTGluZSBsb2NrIGZsYWcgKi8KLSAgICBjZ21mID0gMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHRoYXQgY29uc29sZSBtb2RlcyBzYXZlZCAqLwot ICAgIHhsb2NhbCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIHR0eSBs b2NhbCBvciByZW1vdGUgKi8KLSAgICBjdXJjYXJyID0gMDsJCQkvKiBDYXJyaWVyIG1vZGU6IHJl cXVpcmUvaWdub3JlLiAqLwotCi1zdGF0aWMgaW50IG5ldGNvbm4gPSAwOwkJCS8qIDEgaWYgbmV0 d29yayBjb25uZWN0aW9uIGFjdGl2ZSAqLwotCi1zdGF0aWMgY2hhciBlc2NjaHI7ICAgICAgICAg ICAgICAgICAgICAgLyogRXNjYXBlIG9yIGF0dG4gY2hhcmFjdGVyICovCi0KLSNpZmRlZiBDS19T Q08zMlY0Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZiAvKiBDS19TQ08zMlY0ICovCi0K LSNpZmRlZiBIQVZFX1RWCi0gICAgc3RhdGljIHN0cnVjdCB0aW1ldmFsIHR2OwkJLyogRm9yIGdl dHRpbmcgdGltZSwgZnJvbSBzeXMvdGltZS5oICovCi0jZW5kaWYgLyogSEFWRV9UViAqLwotI2lm ZGVmIEhBVkVfVFoKLSAgICBzdGF0aWMgc3RydWN0IHRpbWV6b25lIHR6OwotI2VuZGlmIC8qIEhB VkVfVFogKi8KLQotI2lmZGVmIE9TRgotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIgZnRwOyAgICAg ICAgICAgIC8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCi0jZW5kaWYgLyogT1NGICovCi0KLSNp ZmRlZiBCU0QyOQotICAgIHN0YXRpYyBsb25nIHhjbG9jazsJCQkvKiBGb3IgZ2V0dGluZyB0aW1l IGZyb20gc3lzL3RpbWUuaCAqLwotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIgZnRwOyAgICAgICAg ICAgIC8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCi0jZW5kaWYgLyogQlNEMjkgKi8KLQotI2lm ZGVmIEJTRDQxCi0gICAgc3RhdGljIGxvbmcgeGNsb2NrOwkJCS8qIEZvciBnZXR0aW5nIHRpbWUg ZnJvbSBzeXMvdGltZS5oICovCi0gICAgc3RhdGljIHN0cnVjdCB0aW1lYiBmdHA7ICAgICAgICAg ICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KLSNlbmRpZiAvKiBCU0Q0MSAqLwotCi0jaWZk ZWYgQkVMTFYxMAotICAgIHN0YXRpYyBsb25nIHhjbG9jazsJCQkvKiBGb3IgZ2V0dGluZyB0aW1l IGZyb20gc3lzL3RpbWUuaCAqLwotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIgZnRwOyAgICAgICAg ICAgIC8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCi0jZW5kaWYgLyogQkVMTFYxMCAqLwotCi0j aWZkZWYgRlQyMQotICAgIHN0YXRpYyBsb25nIHhjbG9jazsJCQkvKiBGb3IgZ2V0dGluZyB0aW1l IGZyb20gc3lzL3RpbWUuaCAqLwotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIgZnRwOyAgICAgICAg ICAgIC8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCi0jZW5kaWYgLyogRlQyMSAqLwotCi0jaWZk ZWYgVE9XRVIxCi0gICAgc3RhdGljIGxvbmcgeGNsb2NrOwkJCS8qIEZvciBnZXR0aW5nIHRpbWUg ZnJvbSBzeXMvdGltZS5oICovCi0gICAgc3RhdGljIHN0cnVjdCB0aW1lYiBmdHA7CQkvKiBBbmQg ZnJvbSBzeXMvdGltZWIuaCAqLwotI2VuZGlmIC8qIFRPV0VSMSAqLwotCi0jaWZkZWYgQ09IRVJF TlQKLSAgICBzdGF0aWMgbG9uZyB4Y2xvY2s7CQkJLyogRm9yIGdldHRpbmcgdGltZSBmcm9tIHN5 cy90aW1lLmggKi8KLSAgICBzdGF0aWMgc3RydWN0IHRpbWViIGZ0cDsJCS8qIEFuZCBmcm9tIHN5 cy90aW1lYi5oICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2lmZGVmIFY3Ci0gICAgc3Rh dGljIGxvbmcgeGNsb2NrOwotI2VuZGlmIC8qIFY3ICovCi0KLS8qIHNndHR5L3Rlcm1pbyBpbmZv cm1hdGlvbi4uLiAqLwotCi0jaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogUE9TSVggb3IgQlNENDQg Ki8KLSAgc3RhdGljIHN0cnVjdCB0ZXJtaW9zCi0gICAgdHRvbGQsIHR0cmF3LCB0dHR2dCwgdHRj dXIsCi0gICAgY2NvbGQsIGNjcmF3LCBjY2Nicms7Ci0jZWxzZQkJCQkJLyogQlNELCBWNywgZXRj ICovCi0KLSNpZmRlZiBDT0hFUkVOVAkJCQkvKiBIYWNrIGFsZXJ0Li4uICovCi0jZGVmaW5lIEFU VFNWCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2lmZGVmIEFUVFNWCi0gIHN0YXRpYyBzdHJ1 Y3QgdGVybWlvIHR0b2xkID0gezB9OwkvKiBJbml0J2QgZm9yIHdvcmQgYWxpZ25tZW50LCAqLwot ICBzdGF0aWMgc3RydWN0IHRlcm1pbyB0dHJhdyA9IHswfTsJLyogd2hpY2ggaXMgaW1wb3J0YW50 IGZvciBzb21lICovCi0gIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIHR0dHZ0ID0gezB9OwkvKiBzeXN0 ZW1zLCBsaWtlIFppbG9nLi4uICovCi0gIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIHR0Y3VyID0gezB9 OwotICBzdGF0aWMgc3RydWN0IHRlcm1pbyBjY29sZCA9IHswfTsKLSAgc3RhdGljIHN0cnVjdCB0 ZXJtaW8gY2NyYXcgPSB7MH07Ci0gIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIGNjY2JyayA9IHswfTsK LSNlbHNlCi0gIHN0YXRpYyBzdHJ1Y3Qgc2d0dHliICAgICAgICAgICAgICAgICAgLyogc2d0dHkg aW5mby4uLiAqLwotICAgIHR0b2xkLCB0dHJhdywgdHR0dnQsIHR0Y3VyLCAJLyogZm9yIGNvbW11 bmljYXRpb24gbGluZSAqLwotICAgIGNjb2xkLCBjY3JhdywgY2NjYnJrOwkJLyogYW5kIGZvciBj b25zb2xlICovCi0jaWZkZWYgQkVMTFYxMAotICBzdGF0aWMgc3RydWN0IHR0eWRldmIJCQkvKiBE ZXZpY2UgaW5mby4uLiAqLwotICAgIHRkb2xkLCB0ZGN1cjsJCQkvKiBmb3IgY29tbXVuaWNhdGlv biBkZXZpY2UgKi8KLSNlbmRpZiAvKiBCRUxMVjEwICovCi0jaWZkZWYgVElPQ0dFVEMKLSAgc3Rh dGljIHN0cnVjdCB0Y2hhcnMgdGNob2xkLCB0Y2hub2k7Ci0KLSAgc3RhdGljIGludCB0Y2hhcmY7 Ci0jZW5kaWYgLyogVElPQ0dFVEMgKi8KLSNpZmRlZiBUSU9DR0xUQwotICBzdGF0aWMgc3RydWN0 IGx0Y2hhcnMgbHRjaG9sZCwgbHRjaG5vaTsKLSAgc3RhdGljIGludCBsdGNoYXJmOwotI2VuZGlm IC8qIFRJT0NHTFRDICovCi0gIGludCBsbW9kZWYgPSAwOwkJCS8qIExvY2FsIG1vZGVzICovCi0g IGludCBsbW9kZSA9IDA7Ci0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0NE9SUE9T SVggKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIEl0IHBpY2tzIHVwIHRoZSBzcGVlZHMgYnV0IHRo ZXkgZG9uJ3Qgd29yayAqLwotI2lmZGVmIFVOSVhXQVJFCQkJCS8qIEZvciBoaWdoZXIgc2VyaWFs IHNwZWVkcyAqLwotI2lmZGVmIFVXNwkJCQkvKiBpbiBVbml4d2FyZSA3LjAgKi8KLSNpbmNsdWRl IDxzeXMvYXN5Yy5oPgkJCS8qIFRoaXMgcGlja3MgdXAgNTc2MDAgYW5kIDExNTIwMCAqLwotI2Vu ZGlmIC8qIFVXNyAqLwotI2VuZGlmIC8qIFVOSVhXQVJFICovCi0jZW5kaWYgLyogQ09NTUVOVCAq LwotCi0jaWZkZWYgUFJPVlgxCi0gIHN0YXRpYyBzdHJ1Y3Qgc2d0dHliIHR0YnVmOwotI2VuZGlm IC8qIFBST1ZYMSAqLwotCi0jaWZkZWYgdWx0cml4Ci0vKiBkbyB3ZSByZWFsbHkgbmVlZCB0aGlz PyAqLwotICBzdGF0aWMgc3RydWN0IHNndHR5YiB2YW5pbGxhOwotI2VuZGlmIC8qIHVsdHJpeCAq LwotCi0jaWZkZWYgQVRUNzMwMAotc3RhdGljIGludCBhdHRtb2RlbSA9IDA7ICAgICAgICAgICAg ICAgIC8qIEFUVDczMDAgaW50ZXJuYWwtbW9kZW0gc3RhdHVzICovCi1zdHJ1Y3QgdXBkYXRhIGRp YWxlciA9IHswfTsJCS8qIENvbmRpdGlvbiBkaWFsZXIgZm9yIGRhdGEgY2FsbCAqLwotI2VuZGlm IC8qIEFUVDczMDAgKi8KLQotI2lmbmRlZiBOT1VVQ1AKLSNkZWZpbmUgRkxGTkFNTCAxMjgKLSNp Zm5kZWYgVVNFVFRZTE9DSwotI2lmZGVmIFJUQUlYCi1jaGFyIGxrZmxmbltGTEZOQU1MXSA9IHsg J1wwJywgJ1wwJyB9OwkvKiBhbmQgcG9zc2libGUgbGluayB0byBpdCAqLwotI2VuZGlmIC8qIFJU QUlYICovCi1jaGFyIGxvY2syW0ZMRk5BTUxdID0gIHsgJ1wwJywgJ1wwJyB9OwkvKiBOYW1lIG9m IHNlY29uZCBsb2NrZmlsZSAqLwotI2VuZGlmIC8qIFVTRVRUWUxPQ0sgKi8KLSNlbHNlCi0jZGVm aW5lIEZMRk5BTUwgNwotI2VuZGlmIC8qIE5PVVVDUCAqLwotY2hhciBmbGZuYW1bRkxGTkFNTCsx XSA9IHsgJ1wwJywgJ1wwJyB9OyAvKiBVVUNQIGxvY2sgZmlsZSBwYXRoIG5hbWUgKi8KLQotaW50 IGhhc2xvY2sgPSAwOwkJCS8qID0xIGlmIHRoaXMga2VybWl0IGxvY2tlZCB1dWNwICovCi0KLSNp Zm5kZWYgT1hPUwotI2lmZGVmIFNWT1JQT1NJWAotc3RhdGljIGludCBjb25lc2MgPSAwOyAgICAg ICAgICAgICAgICAgIC8qIHNldCB0byAxIGlmIGVzYyBjaGFyICheXCkgdHlwZWQgKi8KLSNlbHNl Ci0jaWZkZWYgVjcKLXN0YXRpYyBpbnQgY29uZXNjID0gMDsKLSNlbHNlCi0jaWZkZWYgQzcwCi1z dGF0aWMgaW50IGNvbmVzYyA9IDA7Ci0jZW5kaWYgLyogQzcwICovCi0jZW5kaWYgLyogVjcgKi8K LSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLSNlbmRpZiAvKiBPWE9TICovCi0KLS8qIExvY2FsIGNv cHkgb2YgY29tbSBkZXZpY2UgbmFtZSBvciBuZXR3b3JrIGhvc3QgKi8KLXN0YXRpYyBjaGFyIHR0 bm1zdltERVZOQU1MRU4rMV0gPSB7ICdcMCcsICdcMCcgfTsKLSNpZmRlZiBVU0VUVFlMT0NLCi1z dGF0aWMgY2hhciBsb2NrbmFtZVtERVZOQU1MRU4rMV07CS8qIERpdHRvLCB0aGUgcGFydCBhZnRl ciAiL2Rldi8iLiAqLwotI2VuZGlmIC8qIFVTRVRUWUxPQ0sgKi8KLQotI2lmZGVmIGFlZ2lzCi1z dGF0aWMgc3RhdHVzXyR0IHN0OyAgICAgICAgICAgICAgICAgICAgLyogZXJyb3Igc3RhdHVzIHJl dHVybiB2YWx1ZSAqLwotc3RhdGljIHNob3J0IGNvbmNycCA9IDA7ICAgICAgICAgICAgICAgIC8q IHRydWUgaWYgY29uc29sZSBpcyBDUlAgcGFkICovCi1zdGF0aWMgdWlkXyR0IHR0eXVpZDsgICAg ICAgICAgICAgICAgICAgLyogdHR5IHR5cGUgdWlkICovCi1zdGF0aWMgdWlkXyR0IGNvbnVpZDsg ICAgICAgICAgICAgICAgICAgLyogc3Rkb3V0IHR5cGUgdWlkICovCi0KLS8qIEFQT0xMTyBBZWdp cyBtYWluKCkKLSAqIGVzdGFibGlzaCBhY2wgdXNhZ2UgYW5kIGNsZWFudXAgaGFuZGxpbmcKLSAq ICAgIHRoaXMgbWFrZXMgc3VyZSB0aGF0IENSUCBwYWRzCi0gKiAgICBnZXQgcmVzdG9yZWQgdG8g YSB1c2FibGUgbW9kZQotICovCi1tYWluKGFyZ2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2 OyB7Ci0gICAgICAgIHN0YXR1c18kdCBzdGF0dXM7Ci0gICAgICAgIHBmbV8kY2xlYW51cF9yZWMg ZGlydHk7Ci0KLSAgICAgICAgUElEX1QgcGlkID0gZ2V0cGlkKCk7Ci0KLSAgICAgICAgLyogYWNs IHVzYWdlIGFjY29yZGluZyB0byBpbnZva2luZyBlbnZpcm9ubWVudCAqLwotICAgICAgICBkZWZh dWx0X2FjbChVU0VfREVGRU5WKTsKLQotICAgICAgICAvKiBlc3RhYmxpc2ggYSBjbGVhbnVwIGNv bnRpbnVhdGlvbiAqLwotICAgICAgICBzdGF0dXMgPSBwZm1fJGNsZWFudXAoZGlydHkpOwotICAg ICAgICBpZiAoc3RhdHVzLmFsbCAhPSBwZm1fJGNsZWFudXBfc2V0KSB7Ci0gICAgICAgICAgICAg ICAgLyogb25seSBoYW5kbGUgZmF1bHRzIGZvciB0aGUgb3JpZ2luYWwgcHJvY2VzcyAqLwotICAg ICAgICAgICAgICAgIGlmIChwaWQgPT0gZ2V0cGlkKCkgJiYgc3RhdHVzLmFsbCA+IHBnbV8kbWF4 X3NldmVyaXR5KSB7Ci0JCSAgICAvKiBibGV3IHVwIGluIG1haW4gcHJvY2VzcyAqLwotCQkgICAg c3RhdHVzXyR0IHF1bzsKLQkJICAgIHBmbV8kY2xlYW51cF9yZWMgY2xlYW47Ci0KLQkJICAgIC8q IHJlc3RvcmUgdGhlIGNvbnNvbGUgaW4gYW55IGNhc2UgKi8KLQkJICAgIGNvbnJlcygpOwotCi0J CSAgICAvKiBhdHRlbXB0IGEgY2xlYW4gZXhpdCAqLwotCQkgICAgZGVidWcoRjEwMSwgImNsZWFu dXAgZmF1bHQgc3RhdHVzIiwgIiIsIHN0YXR1cy5hbGwpOwotCi0JCSAgICAvKiBkb2V4aXQoKSwg dGhlbiBzZW5kIHN0YXR1cyB0byBjb250aW51YXRpb24gKi8KLQkJICAgIHF1byA9IHBmbV8kY2xl YW51cChjbGVhbik7Ci0JCSAgICBpZiAocXVvLmFsbCA9PSBwZm1fJGNsZWFudXBfc2V0KQotCQkg ICAgICBkb2V4aXQocGdtXyRwcm9ncmFtX2ZhdWx0ZWQsLTEpOwotCQkgICAgZWxzZSBpZiAocXVv LmFsbCA+IHBnbV8kbWF4X3NldmVyaXR5KQotCQkgICAgICBwZm1fJHNpZ25hbChxdW8pOyAvKiBi bGV3IHVwIGluIGRvZXhpdCgpICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IC8qIHNlbmQgdG8gdGhlIG9yaWdpbmFsIGNvbnRpbnVhdGlvbiAqLwotICAgICAgICAgICAgICAg IHBmbV8kc2lnbmFsKHN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgLypOT1RSRUFDSEVEKi8KLQkg ICAgfQotICAgICAgICByZXR1cm4oY2tjbWFpKGFyZ2MsIGFyZ3YpKTsKLX0KLSNlbmRpZiAvKiBh ZWdpcyAqLwotCi0vKiBBTlNJLXN0eWxlIHByb3RvdHlwZXMgZm9yIGludGVybmFsIGZ1bmN0aW9u cy4gKi8KLS8qIEZ1bmN0aW9ucyB1c2VkIG91dHNpZGUgdGhpcyBtb2R1bGUgYXJlIHByb3RvdHlw ZWQgaW4gY2tja2VyLmguICovCi0KLSNpZmRlZiBhcG9sbG8KLV9QUk9UT1RZUCggU0lHVFlQIHRp bWVyaCwgKCkgKTsKLV9QUk9UT1RZUCggU0lHVFlQIGNjdHJhcCwgKCkgKTsKLV9QUk9UT1RZUCgg U0lHVFlQIGVzY3RycCwgKCkgKTsKLV9QUk9UT1RZUCggU0lHVFlQIHNpZ19pZ24sICgpICk7Ci0j ZWxzZQotX1BST1RPVFlQKCBTSUdUWVAgdGltZXJoLCAoaW50KSApOwotX1BST1RPVFlQKCBTSUdU WVAgY2N0cmFwLCAoaW50KSApOwotX1BST1RPVFlQKCBTSUdUWVAgZXNjdHJwLCAoaW50KSApOwot I2VuZGlmIC8qIGFwb2xsbyAqLwotX1BST1RPVFlQKCBpbnQgZG9fb3BlbiwgKGNoYXIgKikgKTsK LV9QUk9UT1RZUCggc3RhdGljIGludCBpbl9jaGssIChpbnQsIGludCkgKTsKLV9QUk9UT1RZUCgg c3RhdGljIGludCB0dHJwaWQsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgdHRj aGtwaWQsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgdHRsb2NrLCAoY2hhciAq KSApOwotX1BST1RPVFlQKCBzdGF0aWMgaW50IHR0dW5sY2ssICh2b2lkKSApOwotX1BST1RPVFlQ KCBzdGF0aWMgVk9JRCBzaWdjaGxkX2hhbmRsZXIsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBt eWdldGJ1ZiwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBteWZpbGxidWYsICh2b2lkKSApOwot X1BST1RPVFlQKCBWT0lEIGNvbmJndCwgKGludCkgKTsKLSNpZmRlZiBBQ1VDTlRSTAotX1BST1RP VFlQKCBWT0lEIGFjdWNudHJsLCAoY2hhciAqLCBjaGFyICopICk7Ci0jZW5kaWYgLyogQUNVQ05U UkwgKi8KLQotI2lmZGVmIEJTRDQ0T1JQT1NJWAotX1BST1RPVFlQKCBpbnQgY2FycmN0bCwgKHN0 cnVjdCB0ZXJtaW9zICosIGludCkgKTsKLSNlbHNlCi0jaWZkZWYgQVRUU1YKLV9QUk9UT1RZUCgg aW50IGNhcnJjdGwsIChzdHJ1Y3QgdGVybWlvICosIGludCkgKTsKLSNlbHNlCi1fUFJPVE9UWVAo IGludCBjYXJyY3RsLCAoc3RydWN0IHNndHR5YiAqLCBpbnQpICk7Ci0jZW5kaWYgLyogQVRUU1Yg Ki8KLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLQotI2lmZGVmIEFUVDczMDAKLV9QUk9UT1RZ UCggaW50IGF0dGRpYWwsIChjaGFyICosIGxvbmcsIGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50 IG9mZmdldHR5LCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgb25nZXR0eSwgKGNoYXIgKikg KTsKLSNlbmRpZiAvKiBBVFQ3MzAwICovCi0KLSNpZmRlZiBCRU9TT1JCRUJPWAotI2lmZGVmIFNF TEVDVAotICAgIC8qIEJlT1MgaXMgbm90IGNhcGFibGUgb2YgdXNpbmcgU0VMRUNUIG9uIGFueXRo aW5nIGJ1dCBzb2NrZXRzICovCi0jdW5kZWYgU0VMRUNUCi0jZW5kaWYgLyogU0VMRUNUICovCi0j aW5jbHVkZSA8a2VybmVsL09TLmg+Ci0vKiAjaWZkZWYgQkVfRFJfNyAqLwotc3RhdGljIGRvdWJs ZSB0aW1lX3N0YXJ0ZWQgPSAwLjA7Ci1zdHJ1Y3QgQUxBUk1fU1RSVUNUIHsKLSAgICB0aHJlYWRf aWQgdGhyZWFkOwotICAgIGludCB0aW1lOwotfTsKLXN0YXRpYyB0aHJlYWRfaWQgYWxhcm1fdGhy ZWFkID0gLTE7Ci1zdGF0aWMgc3RydWN0IEFMQVJNX1NUUlVDVCBhbGFybV9zdHJ1Y3Q7Ci1fUFJP VE9UWVAoIGxvbmcgZG9fYWxhcm0sICh2b2lkICopICk7Ci1fUFJPVE9UWVAoIHVuc2lnbmVkIGlu dCBhbGFybSwgKHVuc2lnbmVkIGludCkgKTsKLV9QUk9UT1RZUCggdm9pZCBhbGFybV9leHBpcmVk LCAodm9pZCkgKTsKLS8qICNlbmRpZiAqLyAvKiBCRV9EUl83ICovCi0jZW5kaWYgLyogQkVPU09S QkVCT1ggKi8KLQotI2lmbmRlZiB4dW5jaGFyCi0jZGVmaW5lIHh1bmNoYXIoY2gpICgoKGNoKSAt IDMyICkgJiAweEZGICkJLyogQ2hhcmFjdGVyIHRvIG51bWJlciAqLwotI2VuZGlmIC8qIHh1bmNo YXIgKi8KLQotI2lmZGVmIENLX0FOU0lDCi1zdGF0aWMgY2hhciAqCi14eGxhc3QoY2hhciAqcywg Y2hhciBjKQotI2Vsc2UKLXN0YXRpYyBjaGFyICoKLXh4bGFzdChzLGMpIGNoYXIgKnM7IGNoYXIg YzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogeHhsYXN0ICovIHsJCS8qICBMYXN0IG9jY3Vy cmVuY2Ugb2YgY2hhcmFjdGVyIGMgaW4gc3RyaW5nIHMuICovCi0gICAgaW50IGk7Ci0gICAgZm9y IChpID0gKGludClzdHJsZW4ocyk7IGkgPiAwOyBpLS0pCi0gICAgICBpZiAoc1tpLTFdID09IGMg KSByZXR1cm4ocyArIChpIC0gMSkpOwotICAgIHJldHVybihOVUxMKTsKLX0KLQotLyogVGltZW91 dCBoYW5kbGVyIGZvciBjb21tdW5pY2F0aW9uIGxpbmUgaW5wdXQgZnVuY3Rpb25zICovCi0KLS8q QVJHU1VTRUQqLwotU0lHVFlQCi10aW1lcmgoZm9vKSBpbnQgZm9vOyB7Ci0gICAgdHRpbW9mZigp OwotI2lmZGVmIEJFT1NPUkJFQk9YCi0vKiAjaWZkZWYgQkVfRFJfNyAqLwotICAgIGFsYXJtX2V4 cGlyZWQoKTsKLS8qICNlbmRpZiAqLyAvKiBCRV9EUl83ICovCi0jZW5kaWYgLyogQkVPU09SQkVC T1ggKi8KLSNpZmRlZiBDS19QT1NJWF9TSUcKLSAgICBzaWdsb25nam1wKHNqYnVmLDEpOwotI2Vs c2UKLSAgICBsb25nam1wKHNqYnVmLDEpOwotI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLwotfQot Ci0vKkFSR1NVU0VEKi8KLVNJR1RZUAoteHRpbWVyaChmb28pIGludCBmb287IHsJCQkvKiBMaWtl IHRpbWVyaCgpIGJ1dCBkb2VzICovCi0jaWZkZWYgQkVPU09SQkVCT1gJCQkvKiBub3QgcmVzZXQg dGhlIHRpbWVyIGl0c2VsZiAqLwotLyogI2lmZGVmIEJFX0RSXzcgKi8KLSAgICBhbGFybV9leHBp cmVkKCk7Ci0vKiAjZW5kaWYgKi8gLyogQkVfRFJfNyAqLwotI2VuZGlmIC8qIEJFT1NPUkJFQk9Y ICovCi0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0gICAgc2lnbG9uZ2ptcChzamJ1ZiwxKTsKLSNlbHNl Ci0gICAgbG9uZ2ptcChzamJ1ZiwxKTsKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLX0KLQot Ci0vKiBDb250cm9sLUMgdHJhcCBmb3IgY29tbXVuaWNhdGlvbiBsaW5lIGlucHV0IGZ1bmN0aW9u cyAqLwotCi1pbnQgY2NfaW50OwkJCQkvKiBGbGFnICovCi1TSUdUWVAgKCogb2NjdCkoKTsJCQkv KiBGb3Igc2F2aW5nIG9sZCBTSUdJTlQgaGFuZGxlciAqLwotCi0vKkFSR1NVU0VEKi8KLVNJR1RZ UAotY2N0cmFwKGZvbykgaW50IGZvbzsgewkJCS8qIE5lZWRzIGFyZyBmb3IgQU5TSSBDICovCi0g IGNjX2ludCA9IDE7CQkJCS8qIHNpZ25hbCgpIHByb3RvdHlwZS4gKi8KLSAgcmV0dXJuOwotfQot Ci0vKiAgUyBZIFMgSSBOIEkgVCAgLS0gIFN5c3RlbS1kZXBlbmRlbnQgcHJvZ3JhbSBpbml0aWFs aXphdGlvbi4gICovCi0KLS8qCi0gKiB0dGd3c2l6KCkgcmV0dXJuczoKLSAqCTEgICAgdHRfcm93 cyBhbmQgdHRfY29scyBhcmUga25vd24sIGJvdGggYWx0ZXJlZCwgYm90aCA+IDAKLSAqCTAgICAg dHRfcm93cyBhbmQvb3IgdHRfY29scyBhcmUga25vd24sIGJvdGggYWx0ZXJlZCwgb25lIG9yIGJv dGggPD0gMAotICoJLTEgICB0dF9yb3dzIGFuZCB0dF9jb2xzIGFyZSB1bmtub3duIGFuZCB1bmFs dGVyZWQKLSAqLwotCi1leHRlcm4gaW50IHR0X3Jvd3MsIHR0X2NvbHM7Ci0KLXN0YXRpYyBpbnQK LXh0dGd3c2l6KCkgewotICAgIGNoYXIgKnA7Ci0gICAgaW50IHJvd3MgPSAwLCBjb2xzID0gMDsK LSAgICBwID0gZ2V0ZW52KCJMSU5FUyIpOwotICAgIGRlYnVnKEYxMTAsInh0dGd3c2l6IExJTkVT IixwLDApOwotICAgIGlmIChwKSB7Ci0Jcm93cyA9IGF0b2wocCk7Ci0JaWYgKHJvd3MgPiAwKSB7 Ci0JICAgIHAgPSBnZXRlbnYoIkNPTFVNTlMiKTsKLQkgICAgZGVidWcoRjExMCwieHR0Z3dzaXog Q09MVU1OUyIscCwwKTsKLQkgICAgaWYgKHApIHsKLQkJY29scyA9IGF0b2wocCk7Ci0JCWlmIChj b2xzID4gMCkgewotCQkgICAgdHRfcm93cyA9IHJvd3M7Ci0JCSAgICB0dF9jb2xzID0gY29sczsK LQkJICAgIHJldHVybigxKTsKLQkJfQotCQlyZXR1cm4oMCk7Ci0JICAgIH0KLQl9Ci0gICAgfQot ICAgIHJldHVybigtMSk7Ci19Ci0KLSNpZmRlZiBUVExFQlVGCi1WT0lECi1sZV9pbml0KCkgewkJ CQkvKiBMb2NhbEVjaG9Jbml0KCkgKi8KLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwg TEVCVUZTSVo7IGkrKykKLSAgICAgIGxlX2J1ZltpXSA9ICdcMCc7Ci0gICAgbGVfc3RhcnQgPSAw OwotICAgIGxlX2VuZCA9IDA7Ci0gICAgbGVfZGF0YSA9IDA7Ci19Ci0KLVZPSUQKLWxlX2NsZWFu KCkgewkJCQkvKiBMb2NhbEVjaG9DbGVhbnVwKCkgKi8KLSAgICBsZV9pbml0KCk7Ci0gICAgcmV0 dXJuOwotfQotCi1pbnQKLWxlX2luYnVmKCkgewotICAgIGludCByYyA9IDA7Ci0gICAgaWYgKGxl X3N0YXJ0ICE9IGxlX2VuZCkgewotCXJjID0gKGxlX2VuZCAtCi0JICAgICAgbGVfc3RhcnQgKwot CSAgICAgIExFQlVGU0laKSAlIExFQlVGU0laOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJsZV9p bmJ1ZiIsImNoYXJzIHdhaXRpbmciLHJjKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotbGVfcHV0Y2hhcihDSEFSIGNoKQotI2Vsc2UKLWxlX3B1dGNoYXIoY2gp IENIQVIgY2g7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGxlX3B1dGNoYXIgKi8gewotI2lm ZGVmIENPTU1FTlQKLSAgICAvKiBJbiBVTklYIHdlIGRvIG5vdCBoYXZlIGFub3RoZXIgdGhyZWFk IHRha2luZyBjaGFycyBvdXQgb2YgdGhlIGJ1ZmZlciAqLwotICAgIHdoaWxlICgobGVfc3RhcnQg LSBsZV9lbmQgPT0gMSkgfHwKLSAgICAgICAgICAgIChsZV9zdGFydCA9PSAwICYmIGxlX2VuZCA9 PSBMRUJVRlNJWiAtIDEpKSB7Ci0JLyogQnVmZmVyIGlzIGZ1bGwgKi8KLSAgICAgICAgZGVidWco RjExMSwibGVfcHV0Y2hhciIsIkJ1ZmZlciBpcyBGdWxsIixjaCk7Ci0gICAgICAgIFJlbGVhc2VM b2NhbEVjaG9NdXRleCgpIDsKLSAgICAgICAgbXNsZWVwKDI1MCk7Ci0gICAgICAgIFJlcXVlc3RM b2NhbEVjaG9NdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApIDsKLSAgICB9Ci0jZWxzZQotICAg IGlmICgobGVfc3RhcnQgLSBsZV9lbmQgKyBMRUJVRlNJWiklTEVCVUZTSVogPT0gMSkgewotICAg ICAgICBkZWJ1ZyhGMTEwLCJsZV9wdXRjaGFyIiwiYnVmZmVyIGlzIGZ1bGwiLDApOwotICAgICAg ICByZXR1cm4oLTEpOwotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgbGVfYnVmW2xl X2VuZCsrXSA9IGNoOwotICAgIGlmIChsZV9lbmQgPT0gTEVCVUZTSVopCi0gICAgICBsZV9lbmQg PSAwOwotICAgIGxlX2RhdGEgPSAxOwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZkZWYg Q0tfQU5TSUMKLWxlX3B1dHMoQ0hBUiAqIHMsIGludCBuKQotI2Vsc2UKLWxlX3B1dHMocyxuKSBD SEFSICogczsgaW50IG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGxlX3B1dHMgKi8gewot ICAgIGludCByYyA9IDA7Ci0gICAgaW50IGkgPSAwOwotICAgIENIQVIgKiBwID0gKENIQVIgKiki bGVfcHV0cyI7Ci0gICAgY2toZXhkdW1wKHAscyxuKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsg aSsrKQotICAgICAgcmMgPSBsZV9wdXRjaGFyKChjaGFyKXNbaV0pOwotICAgIGRlYnVnKEYxMDEs ImxlX3B1dHMiLCIiLHJjKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi1pbnQKLSNpZmRlZiBDS19B TlNJQwotbGVfcHV0c3RyKENIQVIgKiBzKQotI2Vsc2UKLWxlX3B1dHN0cihzKSBDSEFSICogczsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogbGVfcHV0cyAqLyB7Ci0gICAgQ0hBUiAqIHA7Ci0g ICAgaW50IHJjID0gMDsKLSAgICBwID0gKENIQVIgKikibGVfcHV0c3RyIjsKLSAgICBja2hleGR1 bXAocCxzLChpbnQpc3RybGVuKChjaGFyICopcykpOwotICAgIGZvciAocCA9IHM7ICpwICYmICFy YzsgcCsrKQotICAgICAgcmMgPSBsZV9wdXRjaGFyKCpwKTsKLSAgICByZXR1cm4ocmMpOwotfQot Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotbGVfZ2V0Y2hhcihDSEFSICogcGNoKQotI2Vsc2UgLyog Q0tfQU5TSUMgKi8KLWxlX2dldGNoYXIocGNoKSBDSEFSICogcGNoOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi0vKiBsZV9nYXRjaGFyICovIHsKLSAgICBpbnQgcmMgPSAwOwotICAgIGlmIChsZV9z dGFydCAhPSBsZV9lbmQpIHsKLSAgICAgICAgKnBjaCA9IGxlX2J1ZltsZV9zdGFydF07Ci0gICAg ICAgIGxlX2J1ZltsZV9zdGFydF0gPSAwOwotICAgICAgICBsZV9zdGFydCsrOwotCi0gICAgICAg IGlmIChsZV9zdGFydCA9PSBMRUJVRlNJWikKLSAgICAgICAgICBsZV9zdGFydCA9IDA7Ci0KLSAg ICAgICAgaWYgKGxlX3N0YXJ0ID09IGxlX2VuZCkgewotICAgICAgICAgICAgbGVfZGF0YSA9IDA7 Ci0gICAgICAgIH0KLSAgICAgICAgcmMrKzsKLSAgICB9IGVsc2UgewotICAgICAgICAqcGNoID0g MDsKLSAgICB9Ci0gICAgcmV0dXJuKHJjKTsKLX0KLSNlbmRpZiAvKiBUVExFQlVGICovCi0KLSNp ZmRlZiBDT01NRU5UCi0vKgotICBTb21lIHN5c3RlbXMgbGlrZSBPU0YvMSB1c2UgVElPQ0dTSVpF IGluc3RlYWQgb2YgVElPQ0dXSU5TWi4KLSAgQnV0IGFzIGZhciBhcyBJIGtub3csIHdoZW5ldmVy IFRJT0NHU0laRSBpcyBkZWZpbmVkLCBpdCBpcwotICBlcXVhdGVkIHRvIFRJT0NHV0lOU1ouICBG b3IgY2FzZXMgd2hlcmUgdGhpcyBpcyBub3QgZG9uZSwgdHJ5IHRoaXM6Ci0qLwotI2lmbmRlZiBU SU9DR1dJTlNaCi0jaWZkZWYgVElPQ0dTSVpFCi0jZGVmaW5lIFRJT0NHV0lOU1ogVElPQ0dTSVpF Ci0jZW5kaWYgLyogVElPQ0dTSVpFICovCi0jZW5kaWYgLyogVElPQ0dXSU5TWiAqLwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQotc3RhdGljIGludCB0dF94cGl4ZWwgPSAwLCB0dF95cGl4ZWwgPSAw OwotCi1pbnQKLXR0Z3dzaXooKSB7Ci0gICAgaW50IHggPSAwOwotI2lmbmRlZiBOT05BV1MKLSNp ZmRlZiBRTlgKLS8qCi0gIE5PVEU6IFRJT0NHV1NJWiB3b3JrcyBoZXJlIHRvbywgYnV0IG9ubHkg aW4gdGhlIDMyLWJpdCB2ZXJzaW9uLgotICBUaGlzIGNvZGUgd29ya3MgZm9yIGJvdGggdGhlIDE2 LSBhbmQgMzItYml0IHZlcnNpb25zLgotKi8KLSAgICBleHRlcm4gaW50IGRldl9zaXplKGludCwg aW50LCBpbnQsIGludCAqLCBpbnQgKik7Ci0gICAgaW50IHIsIGM7Ci0KLSAgICBpZiAoZGV2X3Np emUoMCwgLTEsIC0xLCAmciwgJmMpID09IDApIHsKLQlkZWJ1ZyhGMTAxLCJ0dGd3c2l6IFFOWCBy IiwiIixyKTsKLQlkZWJ1ZyhGMTAxLCJ0dGd3c2l6IFFOWCBjIiwiIixjKTsKLQl0dF9yb3dzID0g cjsKLQl0dF9jb2xzID0gYzsKLQlyZXR1cm4gKChyID4gMCAmJiBjID4gMCkgPyAxIDogMCk7Ci0g ICAgfSBlbHNlIHJldHVybih4dHRnd3NpeigpKTsKLSNlbHNlIC8qIFFOWCAqLwotI2lmZGVmIFRJ T0NHV0lOU1oKLQotLyogTm90ZSwgdGhpcyB3YXMgTV9VTklYLCBjaGFuZ2VkIHRvIFhFTklYIHRv IGFsbG93IGNyb3NzIGNvbXBpbGF0aW9uLi4uICovCi0jaWZkZWYgWEVOSVgJCQkJLyogU0NPIFVO SVggMy4ydjQuMCAqLwotI2luY2x1ZGUgPHN5cy9zdHJlYW0uaD4JCQkvKiB0eXBlZGVmIG1ibGtf dCBuZWVkZWQgYnkgcHRlbS5oICovCi0jaW5jbHVkZSA8c3lzL3B0ZW0uaD4JCQkvKiBmb3IgdHRn d3NpeigpICovCi0jZW5kaWYgLyogWEVOSVggKi8KLQotI2lmZGVmIEkzODZJWAkJCQkvKiBEaXR0 byBmb3IgSW50ZXJhY3RpdmUgKi8KLSNpbmNsdWRlIDxzeXMvc3RyZWFtLmg+Ci0jaW5jbHVkZSA8 c3lzL3B0ZW0uaD4KLSNlbmRpZiAvKiBJMzg2SVggKi8KLQotLyogTm90ZSwgdGhlIGFib3ZlIG1p Z2h0IGJlIG5lZWRlZCBmb3Igc29tZSBvdGhlciBvbGRlciBTVlIzIEludGVsIG1ha2VzLi4uICov Ci0KLSAgICBzdHJ1Y3Qgd2luc2l6ZSB3OwotICAgIHR0X3hwaXhlbCA9IDA7Ci0gICAgdHRfeXBp eGVsID0gMDsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICByZXR1cm4o eHR0Z3dzaXooKSk7Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgIHggPSBpb2N0bCgwLCAoaW50KVRJ T0NHV0lOU1osIChjaGFyICopJncpOwotICAgIGRlYnVnKEYxMDEsInR0Z3dzaXogVElPQ0dXSU5T WiIsIiIseCk7Ci0gICAgaWYgKHggPCAwKSB7Ci0JcmV0dXJuKHh0dGd3c2l6KCkpOwotICAgIH0g ZWxzZSBpZiAody53c19yb3cgPiAwICYmIHcud3NfY29sID4gMCkgewotCXR0X3Jvd3MgPSB3Lndz X3JvdzsKLQl0dF9jb2xzID0gdy53c19jb2w7Ci0JdHRfeHBpeGVsID0gdy53c194cGl4ZWw7Ci0J dHRfeXBpeGVsID0gdy53c195cGl4ZWw7Ci0JZGVidWcoRjEwMSwidHRnd3NpeiB0dF9yb3dzIiwi Iix0dF9yb3dzKTsKLQlkZWJ1ZyhGMTAxLCJ0dGd3c2l6IHR0X2NvbHMiLCIiLHR0X2NvbHMpOwot CXJldHVybigxKTsKLSAgICB9IGVsc2UgewotCWRlYnVnKEYxMDAsInR0Z3dzaXogVElPQ0dXSU5T WiAwMCIsIiIsMCk7Ci0JcmV0dXJuKHh0dGd3c2l6KCkpOwotICAgIH0KLSNlbHNlCi0gICAgcmV0 dXJuKHh0dGd3c2l6KCkpOwotI2VuZGlmIC8qIFRJT0NHV0lOU1ogKi8KLSNlbmRpZiAvKiBRTlgg Ki8KLSNlbmRpZiAvKiBOT05BV1MgKi8KLX0KLQotCi0jaWZkZWYgUkxPR0NPREUKLV9QUk9UT1RZ UCggaW50IHJsb2dfbmF3cywgKHZvaWQpICk7Ci0jZW5kaWYJLyogUkxPR0NPREUgKi8KLQotI2lm bmRlZiBOT1NJR1dJTkNICi0jaWZkZWYgU0lHV0lOQ0gKLVNJR1RZUAotd2luY2hoKGZvbykgaW50 IGZvbzsgewkJCS8qIFNJR1dJTkNIIGhhbmRsZXIgKi8KLSAgICBpbnQgeCA9IDA7Ci0jaWZkZWYg Q0tfVFRZRkQKLSNpZm5kZWYgVk1TCi0gICAgZXh0ZXJuIGludCB0dHlmZDsKLSNlbmRpZiAvKiBW TVMgKi8KLSNlbmRpZiAvKiBDS19UVFlGRCAqLwotICAgIGV4dGVybiBpbnQgdHRfcm93cywgdHRf Y29scywgY21kX3Jvd3MsIGNtZF9jb2xzOwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykg ewotCWRlYnVnKEYxMDAsIioqKioqKioqKioqKioqKiIsIiIsMCk7Ci0JZGVidWcoRjEwMCwiU0lH V0lOQ0ggY2F1Z2h0IiwiIiwwKTsKLQlkZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKioiLCIiLDAp OwotI2lmZGVmIE5FVFBUWQotCWRlYnVnKEYxMDEsIlNJR1dJTkNIIHB0eV9mb3JrX3BpZCIsIiIs cHR5X2ZvcmtfcGlkKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLSAgICB9Ci0jZW5kaWYgLyogREVV QiAqLwotICAgIHNpZ25hbChTSUdXSU5DSCx3aW5jaGgpOyAgICAgICAgICAgIC8qIFJlLWFybSB0 aGUgc2lnbmFsICovCi0gICAgeCA9IHR0Z3dzaXooKTsgICAgICAgICAgICAgICAgICAgICAgLyog R2V0IG5ldyB3aW5kb3cgc2l6ZSAqLwotICAgIGNtZF9yb3dzID0gdHRfcm93czsJCQkvKiBBZGp1 c3QgY29tbWFuZCBzY3JlZW4gdG9vICovCi0gICAgY21kX2NvbHMgPSB0dF9jb2xzOwotCi0jaWZk ZWYgQ0tfVFRZRkQKLSAgICBpZgkJCQkJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIGNvbm5lY3Rpb24g Ki8KLSNpZmRlZiBWTVMJCQkJLyogd2UncmUgZG9uZS4gKi8KLSAgICAgICh2bXN0dHlmZCgpID09 IC0xKQotI2Vsc2UKLSAgICAgICh0dHlmZCA9PSAtMSkKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbHNl Ci0gICAgICAoIWxvY2FsKQotI2VuZGlmIC8qIENLX1RUWUZEICovCi0gICAgICAgIHJldHVybjsK LQotI2lmZGVmIE5FVFBUWQotICAgIGlmIChwdHlfZm9ya19waWQgPiAtMSkgewkJLyogInNldCBo b3N0IiB0byBhIFBUWT8gKi8KLQlpbnQgeDsKLQotI2lmZGVmIFRJT0NTV0lOU1oKLQlzdHJ1Y3Qg d2luc2l6ZSB3OwkJLyogUmVzaXplIHRoZSBQVFkgKi8KLQllcnJubyA9IDA7Ci0Jdy53c19jb2wg PSB0dF9jb2xzOwotCXcud3Nfcm93ID0gdHRfcm93czsKLQl3LndzX3hwaXhlbCA9IHR0X3hwaXhl bDsKLQl3LndzX3lwaXhlbCA9IHR0X3lwaXhlbDsKLQl4ID0gaW9jdGwodHR5ZmQsVElPQ1NXSU5T Wiwmdyk7Ci0JZGVidWcoRjEwMSwid2luY2hoIFRJT0NTV0lOU1oiLCIiLHgpOwotCWRlYnVnKEYx MDEsIndpbmNoaCBUSU9DU1dJTlNaIGVycm5vIiwiIixlcnJubyk7Ci0jZW5kaWYgLyogVElPQ1NX SU5TWiAqLwotCi0JZXJybm8gPSAwOwotCXggPSBraWxsKHB0eV9mb3JrX3BpZCxTSUdXSU5DSCk7 Ci0JZGVidWcoRjEwMSwid2luY2hoIGtpbGwiLCIiLHgpOwotCWRlYnVnKEYxMDEsIndpbmNoaCBr aWxsIGVycm5vIiwiIixlcnJubyk7Ci0gICAgfQotI2VuZGlmIC8qIE5FVFBUWSAqLwotCi0vKgot ICBUaGlzIHNob3VsZCBiZSBPSy4gIEl0IG1pZ2h0IHNlZW0gdGhhdCBzZW5kaW5nIHRoaXMgZnJv bQotICBpbnRlcnJ1cHQgbGV2ZWwgY291bGQgaW50ZXJmZXJlIHdpdGggYW5vdGhlciBURUxORVQg SUFDIHN0cmluZwotICB0aGF0IHdhcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzZW50LiAgQnV0 IHdlIGFsd2F5cyBzZW5kCi0gIFRFTE5FVCBzdHJpbmdzIHdpdGggYSBzaW5nbGUgd3JpdGUoKSwg d2hpY2ggc2hvdWxkIHByZXZlbnQgbWl4dXBzLgotICBibGFoX3NuYXdzKCkgc2hvdWxkIHByb3Rl Y3QgdGhlbXNlbHZlcyBmcm9tIGJlaW5nIGNhbGxlZCBvbiB0aGUKLSAgd3Jvbmcga2luZCBvZiBj b25uZWN0aW9uLgotKi8KLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZm5kZWYgTk9UVEdXU0laCi0gICAg aWYgKHggPiAwICYmIHR0X3Jvd3MgPiAwICYmIHR0X2NvbHMgPiAwKSB7Ci0gICAgICAgIHRuX3Nu YXdzKCk7Ci0jaWZkZWYgUkxPR0NPREUKLSAgICAgICAgcmxvZ19uYXdzKCk7Ci0jZW5kaWYgLyog UkxPR0NPREUgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9UVEdXU0laICovCi0jZW5kaWYgLyogVENQ U09DS0VUICovCi0gICAgU0lHUkVUVVJOOwotfQotI2VuZGlmIC8qIFNJR1dJTkNIICovCi0jZW5k aWYgLyogTk9TSUdXSU5DSCAqLwotCi1TSUdUWVAKLXNpZ2h1cChmb28pIGludCBmb287IHsJCQkv KiBTSUdIVVAgaGFuZGxlciAqLwotICAgIGJhY2tncmQgPSAxOwotICAgIGRlYnVnKEYxMDAsIioq KioqKioqKioqKioqKiIsIiIsMCk7Ci0gICAgZGVidWcoRjEwMCwiU0lHSFVQIHJlY2VpdmVkIiwi IiwwKTsKLSAgICBkZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKioiLCIiLDApOwotICAgIGRvZXhp dChCQURfRVhJVCwtMSk7Ci0gICAgLypOT1RSRUFDSEVEKi8KLSAgICBTSUdSRVRVUk47CQkJCS8q IFNodXQgcGlja3kgY29tcGlsZXJzIHVwLi4uICovCi19Ci0KLSNpZmRlZiBDS19TQ08zMlY0Ci0v KiBFeGlzdHMgYnV0IHRoZXJlIGlzIG5vIHByb3RvdHlwZSBpbiB0aGUgaGVhZGVyIGZpbGVzICov Ci1fUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSApOwotI2Vsc2UKLSNpZmRlZiBTVjY4 UjNWNgotX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwgKGludCkgKTsKLSNlbHNlCi0jaWZkZWYg dWx0cml4Ci1fUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSApOwotI2Vsc2UKLSNpZmRl ZiBIUFVYNgotX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwgKGludCkgKTsKLSNlbHNlCi0jaWZk ZWYgSFBVWDUKLV9QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUsIChpbnQpICk7Ci0jZWxzZQotI2lm ZGVmIFBTMkFJWDEwCi1fUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSApOwotI2Vsc2UK LSNpZmRlZiBCU0Q0MgotX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwgKGludCkgKTsKLSNlbmRp ZiAvKiBCU0Q0MiAqLwotI2VuZGlmIC8qIFBTMkFJWDEwICovCi0jZW5kaWYgLyogSFBVWDUgKi8K LSNlbmRpZiAvKiBIUFVYNiAqLwotI2VuZGlmIC8qIHVsdHJpeCAqLwotI2VuZGlmIC8qIFNWNjhS M1Y2ICovCi0jZW5kaWYgLyogQ0tfU0NPMzJWNCAqLwotCi0jaWZuZGVmIFNJR1VTUjEJCQkJLyog VXNlci1kZWZpbmVkIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHVVNSMSAzMAotI2VuZGlmIC8qIFNJ R1VTUjEgKi8KLQotI2lmbmRlZiBTSUdVU1IyCi0jZGVmaW5lIFNJR1VTUjIgMzEKLSNlbmRpZiAv KiBTSUdVU1IyICovCi0KLS8qCi0gIGlnbm9yc2lncygpIHNldHMgY2VydGFpbiBzaWduYWxzIHRv IFNJR19JR04uICBCdXQgd2hlbiBhIHNpZ25hbCBpcwotICBpZ25vcmVkLCBpdCByZW1haW5zIGln bm9yZWQgYWNyb3NzIGV4ZWMoKSwgc28gd2UgaGF2ZSB0byByZXN0b3JlIHRoZXNlCi0gIHNpZ25h bHMgYmVmb3JlIGV4ZWMoKSwgd2hpY2ggaXMgdGhlIHB1cnBvc2Ugb2YgcmVzdG9yc2lncygpLgot Ki8KLXN0YXRpYyBWT0lECi1pZ25vcnNpZ3MoKSB7CQkJCS8qIElnbm9yZSB0aGVzZSBzaWduYWxz ICovCi0gICAgc2F2cXVpdCA9IHNpZ25hbChTSUdRVUlULFNJR19JR04pOwkvKiBJZ25vcmUgUXVp dCBzaWduYWwgKi8KLQotI2lmZGVmIFNJR0RBTkdFUgkJCS8qIElnbm9yZSBkYW5nZXIgc2lnbmFs cyAqLwotLyoKLSAgVGhpcyBzaWduYWwgaXMgc2VudCB3aGVuIHRoZSBzeXN0ZW0gaXMgbG93IG9u IHN3YXAgc3BhY2UuICBQcm9jZXNzZXMKLSAgdGhhdCBkb24ndCBoYW5kbGUgaXQgYXJlIGNhbmRp ZGF0ZXMgZm9yIHRlcm1pbmF0aW9uLiAgSWYgc3dhcCBzcGFjZSBkb2Vzbid0Ci0gIGNsZWFyIG91 dCBlbm91Z2gsIHdlIHN0aWxsIG1pZ2h0IGJlIHRlcm1pbmF0ZWQgdmlhIGtpbGwoKSAtLSBub3Ro aW5nIHdlIGNhbgotICBkbyBhYm91dCB0aGF0ISAgQ29uY2VpdmFibHksIHRoaXMgY291bGQgYmUg aW1wcm92ZWQgYnkgaW5zdGFsbGluZyBhIHJlYWwKLSAgc2lnbmFsIGhhbmRsZXIgdGhhdCB3YXJu cyB0aGUgdXNlciwgYnV0IHRoYXQgd291bGQgYmUgcHJldHR5IGNvbXBsaWNhdGVkLAotICBzaW5j ZSB3ZSBhcmUgbm90IGFsd2F5cyBpbiBjb250cm9sIG9mIHRoZSBzY3JlZW4gLS0gZS5nLiBkdXJp bmcgcmVtb3RlLW1vZGUKLSAgZmlsZSB0cmFuc2Zlci4KLSovCi0gICAgc2F2ZGFuZ2VyID0gc2ln bmFsKFNJR0RBTkdFUixTSUdfSUdOKTsgLyogZS5nLiBpbiBBSVggKi8KLSNlbmRpZiAvKiBTSUdE QU5HRVIgKi8KLSNpZmRlZiBTSUdQSVBFCi0vKgotICBUaGlzIG9uZSBjb21lcyB3aGVuIGEgVENQ L0lQIGNvbm5lY3Rpb24gaXMgYnJva2VuIGJ5IHRoZSByZW1vdGUuCi0gIFdlIHByZWZlciB0byBj YXRjaCB0aGlzIHNpdHVhdGlvbiBieSBleGFtaW5pbmcgZXJyb3IgY29kZXMgZnJvbSB3cml0ZSgp LgotKi8KLSAgICBzYXZwaXBlID0gc2lnbmFsKFNJR1BJUEUsU0lHX0lHTik7Ci0jZW5kaWYgLyog U0lHUElQRSAqLwotICAgIHNhdnVzcjEgPSBzaWduYWwoU0lHVVNSMSxTSUdfSUdOKTsJLyogSWdu b3JlIHVzZXItZGVmaW5lZCBzaWduYWxzICovCi0gICAgc2F2dXNyMiA9IHNpZ25hbChTSUdVU1Iy LFNJR19JR04pOwotfQotCi1WT0lECi1yZXN0b3JzaWdzKCkgewkJCQkvKiBSZXN0b3JlIHRoZXNl IHNpZ25hbHMgKi8KLSAgICAoVk9JRCkgc2lnbmFsKFNJR1FVSVQsc2F2cXVpdCk7CS8qICh1c2Vk IGluIGNrdWZpby5jKSAqLwotI2lmZGVmIFNJR0RBTkdFUgotICAgIChWT0lEKSBzaWduYWwoU0lH REFOR0VSLHNhdmRhbmdlcik7Ci0jZW5kaWYgLyogU0lHREFOR0VSICovCi0jaWZkZWYgU0lHUElQ RQotICAgIChWT0lEKSBzaWduYWwoU0lHUElQRSxzYXZwaXBlKTsKLSNlbmRpZiAvKiBTSUdQSVBF ICovCi0gICAgKFZPSUQpIHNpZ25hbChTSUdVU1IxLHNhdnVzcjEpOwotICAgIChWT0lEKSBzaWdu YWwoU0lHVVNSMixzYXZ1c3IyKTsKLX0KLQotaW50Ci1zeXNpbml0KCkgewotICAgIGludCB4Owot ICAgIGNoYXIgKiBzOwotI2lmZGVmIENLX1VUU05BTUUKLSAgICBzdHJ1Y3QgdXRzbmFtZSBuYW1l OwotI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KLQotICAgIGV4dGVybiBjaGFyIHN0YXJ0dXBkaXJb XTsKLS8qCi0gIEJFRk9SRSBBTllUSElORyBFTFNFOiBJbml0aWFsaXplIHRoZSBzZXR1aWQgcGFj a2FnZS4KLSAgQ2hhbmdlIHRvIHRoZSB1c2VyJ3MgcmVhbCB1c2VyIGFuZCBncm91cCBJRC4KLSAg SWYgdGhpcyBjYW4ndCBiZSBkb25lLCBkb24ndCBydW4gYXQgYWxsLgotKi8KLSAgICB4ID0gcHJp dl9pbmkoKTsKLSNpZmRlZiBTVUlEREVCVUcKLSAgICBmcHJpbnRmKHN0ZGVyciwiUFJJVl9JTkk9 JWRcbiIseCk7Ci0jZW5kaWYgLyogU1VJRERFQlVHICovCi0gICAgaWYgKHgpIHsKLQlpZiAoeCAm IDEpIGZwcmludGYoc3RkZXJyLCJGYXRhbDogc2V0dWlkIGZhaWx1cmUuXG4iKTsKLQlpZiAoeCAm IDIpIGZwcmludGYoc3RkZXJyLCJGYXRhbDogc2V0Z2lkIGZhaWx1cmUuXG4iKTsKLQlpZiAoeCAm IDQpIGZwcmludGYoc3RkZXJyLCJGYXRhbDogQy1LZXJtaXQgc2V0dWlkIHRvIHJvb3QhXG4iKTsK LQlleGl0KDEpOwotICAgIH0KLSAgICBzaWduYWwoU0lHSU5ULFNJR19JR04pOwkJLyogSWdub3Jl IGludGVycnVwdHMgYXQgZmlyc3QgKi8KLSAgICBzaWduYWwoU0lHRlBFLFNJR19JR04pOwkJLyog SWdub3JlIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbnMgKi8KLSAgICBzaWduYWwoU0lHSFVQLHNp Z2h1cCk7CQkvKiBDYXRjaCBTSUdIVVAgKi8KLSNpZm5kZWYgTk9TSUdXSU5DSAotI2lmZGVmIFNJ R1dJTkNICi0gICAgc2lnbmFsKFNJR1dJTkNILHdpbmNoaCk7CQkvKiBDYXRjaCB3aW5kb3ctc2l6 ZSBjaGFuZ2UgKi8KLSNlbmRpZiAvKiBTSUdXSU5DSCAqLwotI2VuZGlmIC8qIE5PU0lHV0lOQ0gg Ki8KLQotI2lmZGVmIFNJR1hGU1oKLSAgICBzaWduYWwoU0lHWEZTWixTSUdfSUdOKTsJCS8qIEln bm9yZSB3cml0aW5nIHBhc3QgZmlsZSBsaW1pdCAqLyAKLSNlbmRpZgkvKiBTSUdYRlNaICovCi0K LSNpZm5kZWYgTk9KQwotLyoKLSAgR2V0IHRoZSBpbml0aWFsIGpvYiBjb250cm9sIHN0YXRlLgot ICBJZiBpdCBpcyBTSUdfSUdOLCB0aGF0IG1lYW5zIHRoZSBzaGVsbCBkb2VzIG5vdCBzdXBwb3J0 IGpvYiBjb250cm9sLAotICBhbmQgc28gd2UnZCBiZXR0ZXIgbm90IHN1c3BlbmQgb3Vyc2VsdmVz LgotKi8KLSNpZmRlZiBTSUdUU1RQCi0gICAgamNoZGxyID0gc2lnbmFsKFNJR1RTVFAsU0lHX0lH Tik7Ci0gICAgaWYgKGpjaGRsciA9PSBTSUdfSUdOKSB7Ci0JamNzaGVsbCA9IDA7Ci0JZGVidWco RjEwMCwic3lzaW5pdCBqY2hkbHI6IFNJR19JR04iLCIiLDApOwotICAgIH0gZWxzZSBpZiAoamNo ZGxyID09IFNJR19ERkwpIHsKLQlkZWJ1ZyhGMTAwLCJzeXNpbml0IGpjaGRscjogU0lHX0RGTCIs IiIsMCk7Ci0JamNzaGVsbCA9IDE7Ci0gICAgfSBlbHNlIHsKLQlkZWJ1ZyhGMTAwLCJzeXNpbml0 IGpjaGRscjogb3RoZXIiLCIiLDApOwotCWpjc2hlbGwgPSAzOwotICAgIH0KLSAgICAoVk9JRCkg c2lnbmFsKFNJR1RTVFAsamNoZGxyKTsJLyogUHV0IGl0IGJhY2suLi4gKi8KLSNlbmRpZiAvKiBT SUdUU1RQICovCi0jZW5kaWYgLyogTk9KQyAqLwotCi0gICAgY29uYmd0KDApOwkJCQkvKiBTZWUg aWYgd2UncmUgaW4gdGhlIGJhY2tncm91bmQgKi8KLSAgICBjb25nbSgpOwkJCQkvKiBHZXQgY29u c29sZSBtb2RlcyAqLwotCi0gICAgKFZPSUQpIHNpZ25hbChTSUdBTFJNLFNJR19JR04pOwkvKiBJ Z25vcmUgYWxhcm1zICovCi0KLSAgICBpZ25vcnNpZ3MoKTsJCQkvKiBJZ25vcmUgc29tZSBvdGhl ciBzaWduYWxzICovCi0KLSNpZmRlZiBGX1NFVEZMCi0gICAgaW5pZmxhZ3MgPSBmY250bCgwLEZf R0VURkwsMCk7CS8qIEdldCBzdGRpbiBmbGFncyAqLwotI2VuZGlmIC8qIEZfU0VURkwgKi8KLQot I2lmZGVmIHVsdHJpeAotICAgIGd0dHkoMCwmdmFuaWxsYSk7CQkJLyogR2V0IHNndHR5IGluZm8g Ki8KLSNlbHNlCi0jaWZkZWYgQVVYCi0gICAgc2V0NDJzaWcoKTsJCQkJLyogRG9uJ3QgYXNrISAo aGFrYW5zb25AY3Mub3JzdC5lZHUpICovCi0jZW5kaWYgLyogQVVYICovCi0jZW5kaWYgLyogdWx0 cml4ICovCi0vKgotICBXYXJuaW5nOiBvbiBzb21lIFVOSVggc3lzdGVtcyAoU1ZSND8pLCB0dHlu YW1lKCkgcmVwb3J0ZWRseSBvcGVucyAvZGV2IGJ1dAotICBuZXZlciBjbG9zZXMgaXQuICBJZiBp dCBpcyBjYWxsZWQgb2Z0ZW4gZW5vdWdoLCB3ZSBydW4gb3V0IG9mIGZpbGUKLSAgZGVzY3JpcHRv cnMgYW5kIHN1YnNlcXVlbnQgb3BlbigpJ3Mgb2Ygb3RoZXIgZGV2aWNlcyBvciBmaWxlcyBjYW4g ZmFpbC4KLSovCi0gICAgcyA9IE5VTEw7Ci0jaWZuZGVmIE1JTklYCi0gICAgaWYgKGlzYXR0eSgw KSkJCQkvKiBOYW1lIG9mIGNvbnRyb2xsaW5nIHRlcm1pbmFsICovCi0gICAgICBzID0gdHR5bmFt ZSgwKTsKLSAgICBlbHNlIGlmIChpc2F0dHkoMSkpCi0gICAgICBzID0gdHR5bmFtZSgxKTsKLSAg ICBlbHNlIGlmIChpc2F0dHkoMikpCi0gICAgICBzID0gdHR5bmFtZSgyKTsKLSAgICBkZWJ1ZyhG MTEwLCJzeXNpbml0IHR0eW5hbWUoMCkiLHMsMCk7Ci0jZW5kaWYgLyogTUlOSVggKi8KLQotI2lm ZGVmIEJFT1MKLSAgICBpZiAoIWRmdHR5KQotICAgICAgbWFrZXN0cigmZGZ0dHkscyk7Ci0jZW5k aWYgLyogQkVPUyAqLwotCi0gICAgaWYgKHMpCi0gICAgICBja3N0cm5jcHkoKGNoYXIgKiljdHRu YW0scyxERVZOQU1MRU4rMSk7Ci0jaWZkZWYgU1ZPUlBPU0lYCi0gICAgaWYgKCFjdHRuYW1bMF0p Ci0gICAgICBjdGVybWlkKGN0dG5hbSk7Ci0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0gICAgaWYg KCFjdHRuYW1bMF0pCi0gICAgICBja3N0cm5jcHkoKGNoYXIgKiljdHRuYW0sZGZ0dHksREVWTkFN TEVOKzEpOwotICAgIGRlYnVnKEYxMTAsInN5c2luaXQgQ1RUTkFNIixDVFROQU0sMCk7Ci0gICAg ZGVidWcoRjExMCwic3lzaW5pdCBjdHRuYW0iLGN0dG5hbSwwKTsKLQotICAgIHR0Z3dzaXooKTsJ CQkJLyogR2V0IHdpbmRvdyAoc2NyZWVuKSBkaW1lbnNpb25zLiAqLwotCi0jaWZuZGVmIE5PU1lT Q09ORgotI2lmZGVmIF9TQ19PUEVOX01BWAotICAgIGNrbWF4ZmlsZXMgPSBzeXNjb25mKF9TQ19P UEVOX01BWCk7Ci0jZW5kaWYgLyogX1NDX09QRU5fTUFYICovCi0jZW5kaWYgLyogTk9TWVNDT05G ICovCi0KLSNpZmRlZiBQbGFuOQotICAgIGlmICghYmFja2dyZCkgewotICAgIAljb25zY3RsZmQg PSBvcGVuKCIvZGV2L2NvbnNjdGwiLCBPX1dST05MWSk7Ci0gICAgCS8qbm9pc2VmZCA9IG9wZW4o Ii9kZXYvbm9pc2UiLCBPX1dST05MWSkqLwotICAgIH0KLSAgICBja3hlY2ggPSAxOwotI2VuZGlm IC8qIFBsYW45ICovCi0KLSNpZmRlZiBDS19VVFNOQU1FCi0gICAgaWYgKHVuYW1lKCZuYW1lKSA+ IC0xKSB7Ci0JY2tzdHJuY3B5KHVubV9tY2gsbmFtZS5tYWNoaW5lLENLX1NZU05NTE4pOwotCWNr c3RybmNweSh1bm1fbmFtLG5hbWUuc3lzbmFtZSxDS19TWVNOTUxOKTsKLQlja3N0cm5jcHkodW5t X3JlbCxuYW1lLnJlbGVhc2UsQ0tfU1lTTk1MTik7Ci0JY2tzdHJuY3B5KHVubV92ZXIsbmFtZS52 ZXJzaW9uLENLX1NZU05NTE4pOwotI2lmZGVmIERFQlVHCi0JaWYgKGRlYmxvZykgewotCSAgICBk ZWJ1ZyhGMTEwLCJzeXNpbml0IHVuYW1lIG1hY2hpbmUiLHVubV9tY2gsMCk7Ci0JICAgIGRlYnVn KEYxMTAsInN5c2luaXQgdW5hbWUgc3lzbmFtZSIsdW5tX25hbSwwKTsKLQkgICAgZGVidWcoRjEx MCwic3lzaW5pdCB1bmFtZSByZWxlYXNlIix1bm1fcmVsLDApOwotCSAgICBkZWJ1ZyhGMTEwLCJz eXNpbml0IHVuYW1lIHZlcnNpb24iLHVubV92ZXIsMCk7Ci0JfQotI2VuZGlmIC8qIERFQlVHICov Ci0KLSNpZmRlZiBIUFVYOVBMVVMKLQlpZiAobmFtZS5tYWNoaW5lWzVdID09ICc4JykKLQkgIGhw aXM4MDAgPSAxOwotCWVsc2UKLQkgIGhwaXM4MDAgPSAwOwotCWRlYnVnKEYxMDEsInN5c2luaXQg aHBpczgwMCIsIiIsaHBpczgwMCk7Ci0jZW5kaWYgLyogSFBVWDlQTFVTICovCi0jaWZkZWYgVFJV NjQKLSAgICAgICAgZ2V0c3lzaW5mbyhHU0lfUExBVEZPUk1fTkFNRSwgdW5tX21vZCwgQ0tfU1lT Tk1MTiwgMCwgMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsInN5c2luaXQgZ2V0c3lzaW5mbyBtb2Rl bCIsdW5tX21vZCwwKTsKLSNlbmRpZiAvKiBUUlU2NCAqLwotI2lmZGVmIFNPTEFSSVMyNQotICAg ICAgICBzeXNpbmZvKFNJX1BMQVRGT1JNLCB1bm1fbW9kLCBDS19TWVNOTUxOKTsKLSAgICAgICAg ZGVidWcoRjExMCwic3lzaW5pdCBzeXNpbmZvIG1vZGVsIix1bm1fbW9kLDApOwotI2VuZGlmIC8q IFNPTEFSSVMyNSAqLwotICAgIH0KLSNlbmRpZiAvKiBDS19VVFNOQU1FICovCi0KLSNpZmRlZiBD S19FTlZJUk9OTUVOVAotICAgIHsKLSNpZmRlZiBUTkNPREUKLQlleHRlcm4gY2hhciB0bl9lbnZf YWNjdFtdLCB0bl9lbnZfZGlzcFtdLCB0bl9lbnZfam9iW10sCi0JdG5fZW52X3BybnRbXSwgdG5f ZW52X3N5c1tdOwotI2VuZGlmIC8qIFROQ09ERSAqLwotCWV4dGVybiBjaGFyIHVpZGJ1ZltdOwot ICAgICAgICBleHRlcm4gY2hhciAqIHdob2FtaSgpOwotCWNoYXIgKnA7Ci0jaWZkZWYgQ0tTRU5E VUlECi0gICAgICAgIHVpZGJ1ZlswXSA9ICdcMCc7Ci0jaWZkZWYgSUtTRAotICAgICAgICBpZiAo IWluc2VydmVyKSB7Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAgICAgcCA9IGdldGVudigi VVNFUiIpOwotICAgICAgICAgICAgZGVidWcoRjExMCwic3lzaW5pdCB1aWRidWYgZnJvbSBVU0VS Iix1aWRidWYsMCk7Ci0JICAgIGlmICghcCkgcCA9ICIiOwotICAgICAgICAgICAgaWYgKCEqcCkg ewotICAgICAgICAgICAgICAgIHAgPSBnZXRlbnYoIkxPR05BTUUiKTsKLSAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHVpZGJ1ZiBmcm9tIExPR05BTUUiLHVpZGJ1ZiwwKTsKLSAg ICAgICAgICAgIH0KLQkgICAgaWYgKCFwKSBwID0gIiI7Ci0gICAgICAgICAgICBpZiAoISpwKSB7 Ci0gICAgICAgICAgICAgICAgcCA9IHdob2FtaSgpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYx MTAsInN5c2luaXQgdWlkYnVmIGZyb20gd2hvYW1pKCkiLHVpZGJ1ZiwwKTsKLSAgICAgICAgICAg IH0KLQkgICAgaWYgKCFwKSBwID0gIiI7Ci0JICAgIGNrc3RybmNweSh1aWRidWYsICpwID8gcCA6 ICJVTktOT1dOIiwgVUlEQlVGTEVOKTsKLSNpZmRlZiBJS1NECi0gICAgICAgIH0KLSNlbmRpZiAv KiBJS1NEICovCi0JZGVidWcoRjExMCwic3lzaW5pdCBmaW5hbCB1aWRidWYiLHVpZGJ1ZiwwKTsK LSNlbmRpZiAvKiBDS1NFTkRVSUQgKi8KLQotI2lmZGVmIFROQ09ERQotCWlmICgocCA9IGdldGVu digiSk9CIikpKSBja3N0cm5jcHkodG5fZW52X2pvYixwLDYzKTsKLQlpZiAoKHAgPSBnZXRlbnYo IkFDQ1QiKSkpIGNrc3RybmNweSh0bl9lbnZfYWNjdCxwLDYzKTsKLQlpZiAoKHAgPSBnZXRlbnYo IlBSSU5URVIiKSkpIGNrc3RybmNweSh0bl9lbnZfcHJudCxwLDYzKTsKLQlpZiAoKHAgPSBnZXRl bnYoIkRJU1BMQVkiKSkpIGNrc3RybmNweSh0bl9lbnZfZGlzcCxwLDYzKTsKLSNpZmRlZiBhZWdp cwotCWNrc3RybmNweSh0bl9lbnZfc3lzLCJBZWdpcyIsNjQpOwotI2Vsc2UKLSNpZmRlZiBQbGFu OQotCWNrc3RybmNweSh0bl9lbnZfc3lzLCJQbGFuOSIsNjQpOwotI2Vsc2UKLQlja3N0cm5jcHko dG5fZW52X3N5cywiVU5JWCIsNjQpOwotI2VuZGlmIC8qIFBsYW45ICovCi0jZW5kaWYgLyogYWVn aXMgKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICB9Ci0jZW5kaWYgLyogQ0tfRU5WSVJPTk1F TlQgKi8KLSNpZmRlZiBDS19TTkRMT0MKLSAgICB7Ci0JZXh0ZXJuIGNoYXIgKiB0bl9sb2M7Ci0J Y2hhciAqcDsKLQlpZiAocCA9IGdldGVudigiTE9DQVRJT04iKSkKLQkgIGlmICh0bl9sb2MgPSAo Y2hhciAqKW1hbGxvYygoaW50KXN0cmxlbihwKSsxKSkKLQkgICAgc3RyY3B5KHRuX2xvYyxwKTsJ CS8qIHNhZmUgKi8KLSAgICB9Ci0jZW5kaWYgLyogQ0tfU05ETE9DICovCi0KLSAgICBja3N0cm5j cHkoc3RhcnR1cGRpciwgemd0ZGlyKCksIENLTUFYUEFUSCk7Ci0gICAgc3RhcnR1cGRpcltDS01B WFBBVEhdID0gJ1wwJzsKLSAgICB4ID0gc3RybGVuKHN0YXJ0dXBkaXIpOwotICAgIGlmICh4IDw9 IDApIHsKLQlzdGFydHVwZGlyWzBdID0gJy8nOwotCXN0YXJ0dXBkaXJbMV0gPSAnXDAnOwotICAg IH0gZWxzZSBpZiAoc3RhcnR1cGRpclt4LTFdICE9ICcvJykgewotCXN0YXJ0dXBkaXJbeF0gPSAn Lyc7Ci0Jc3RhcnR1cGRpclt4KzFdID0gJ1wwJzsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwic3lz aW5pdCBzdGFydHVwZGlyIixzdGFydHVwZGlyLDApOwotI2lmZGVmIFRUTEVCVUYKLSAgICBsZV9p bml0KCk7Ci0jZW5kaWYgLyogVFRMRUJVRiAqLwotI2lmZGVmIEJTRDQ0T1JQT1NJWAotICAgIC8q IFRoaXMgc2hvdWxkIGNhdGNoIHRoZSBuY3Vyc2VzIHBsYXRmb3JtcyAqLwotICAgIC8qIFNvbWUg cGxhdGZvcm1zIGRvbid0IGhhdmUgcHV0ZW52KCksIGxpa2UgTmVYVFNURVAgKi8KLSAgICBwdXRl bnYoIk5DVVJTRVNfTk9fU0VUQlVGPTEiKTsKLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSAg ICByZXR1cm4oMCk7Ci19Ci0KLS8qICBTIFkgUyBDIEwgRSBBIE4gVSBQICAtLSAgU3lzdGVtLWRl cGVuZGVudCBwcm9ncmFtIGNsZWFudXAuICAqLwotCi1pbnQKLXN5c2NsZWFudXAoKSB7Ci0jaWZk ZWYgRl9TRVRGTAotICAgIGlmIChpbmlmbGFncyA+IC0xKQotICAgICAgZmNudGwoMCxGX1NFVEZM LGluaWZsYWdzKTsJLyogUmVzdG9yZSBzdGRpbiBmbGFncyAqLwotI2VuZGlmIC8qIEZfU0VURkwg Ki8KLSNpZmRlZiB1bHRyaXgKLSAgICBzdHR5KDAsJnZhbmlsbGEpOyAgICAgICAgICAgICAgICAg ICAvKiBHZXQgc2d0dHkgaW5mbyAqLwotI2VuZGlmIC8qIHVsdHJpeCAqLwotI2lmZGVmIE5FVENN RAotICAgIGlmICh0dHBpZCkga2lsbCh0dHBpZCw5KTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSAg ICByZXR1cm4oMCk7Ci19Ci0KLS8qICBUIFQgTyBQIEUgTiAgLS0gIE9wZW4gYSB0dHkgZm9yIGV4 Y2x1c2l2ZSBhY2Nlc3MuICAqLwotCi0vKgotICBDYWxsIHdpdGg6Ci0gICAgdHRuYW1lOiBjaGFy YWN0ZXIgc3RyaW5nIC0gZGV2aWNlIG5hbWUgb3IgbmV0d29yayBob3N0IG5hbWUuCi0gICAgbGNs OgotICBJZiBjYWxsZWQgd2l0aCBsY2wgPCAwLCBzZXRzIHZhbHVlIG9mIGxjbCBhcyBmb2xsb3dz OgotICAwOiB0aGUgdGVybWluYWwgbmFtZWQgYnkgdHRuYW1lIGlzIHRoZSBqb2IncyBjb250cm9s bGluZyB0ZXJtaW5hbC4KLSAgMTogdGhlIHRlcm1pbmFsIG5hbWVkIGJ5IHR0bmFtZSBpcyBub3Qg dGhlIGpvYidzIGNvbnRyb2xsaW5nIHRlcm1pbmFsLgotICBCdXQgd2F0Y2ggb3V0OiBpZiBhIGxp bmUgaXMgYWxyZWFkeSBvcGVuLCBvciBpZiByZXF1ZXN0ZWQgbGluZSBjYW4ndAotICBiZSBvcGVu ZWQsIHRoZW4gbGNsIHJlbWFpbnMgKGFuZCBpcyByZXR1cm5lZCBhcykgLTEuCi0gICAgbW9kZW06 Ci0gIExlc3MgdGhhbiB6ZXJvOiB0dG5hbWUgaXMgYSBuZXR3b3JrIGhvc3QgbmFtZS4KLSAgWmVy byBvciBncmVhdGVyOiB0dG5hbWUgaXMgYSB0ZXJtaW5hbCBkZXZpY2UgbmFtZS4KLSAgWmVybyBt ZWFucyBhIGxvY2FsIGNvbm5lY3Rpb24gKGRvbid0IHVzZSBtb2RlbSBzaWduYWxzKS4KLSAgUG9z aXRpdmUgbWVhbnMgdXNlIG1vZGVtIHNpZ25hbHMuCi0gICB0aW1vOgotICAwID0gbm8gdGltZXIu Ci0gIG5vbnplcm8gPSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGZvciBvcGVuKCkgdG8gcmV0 dXJuIGJlZm9yZSB0aW1pbmcgb3V0LgotCi0gIFJldHVybnM6Ci0gICAgMCBvbiBzdWNjZXNzCi0g ICAtNSBpZiBkZXZpY2UgaXMgaW4gdXNlCi0gICAtNCBpZiBhY2Nlc3MgdG8gZGV2aWNlIGlzIGRl bmllZAotICAgLTMgaWYgYWNjZXNzIHRvIGxvY2sgZGlyZWN0b3J5IGRlbmllZAotICAgLTIgdXBv biB0aW1lb3V0IHdhaXRpbmcgZm9yIGRldmljZSB0byBvcGVuCi0gICAtMSBvbiBvdGhlciBlcnJv cgotKi8KLXN0YXRpYyBpbnQgdHRvdG1vID0gMDsJCQkvKiBUaW1lb3V0IGZsYWcgKi8KLS8qIEZs YWcga2VwdCBoZXJlIHRvIGF2b2lkIGJlaW5nIGNsb2JiZXJlZCBieSBsb25nam1wLiAgKi8KLQot aW50Ci10dG9wZW4odHRuYW1lLGxjbCxtb2RlbSx0aW1vKSBjaGFyICp0dG5hbWU7IGludCAqbGNs LCBtb2RlbSwgdGltbzsgewotCi0jaWZkZWYgQlNENDQKLSNkZWZpbmUgY3Rlcm1pZCh4KSBzdHJj cHkoeCwiIikKLSNlbHNlCi0jaWZkZWYgU1ZPUlBPU0lYCi0jaWZuZGVmIENJRQotICAgIGV4dGVy biBjaGFyICpjdGVybWlkKCk7CQkvKiBXaXNoIHRoZXkgYWxsIGhhZCB0aGlzISAqLwotI2Vsc2UJ CQkJCS8qIENJRSBSZWd1bHVzICovCi0jZGVmaW5lIGN0ZXJtaWQoeCkgc3RyY3B5KHgsIiIpCi0j ZW5kaWYgLyogQ0lFICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0jZW5kaWYgLyogQlNENDQg Ki8KLQotI2lmZGVmIHVsdHJpeAotICAgIGludCB0ZW1wID0gMDsKLSNlbmRpZiAvKiB1bHRyaXgg Ki8KLQotI2lmbmRlZiBPUEVORklSU1QKLSAgICBjaGFyIGZ1bGxuYW1lW0RFVk5BTUxFTisxXTsK LSNlbmRpZiAvKiBPUEVORklSU1QgKi8KLQotICAgIGNoYXIgKiBmbmFtOwkJCS8qIEZ1bGwgbmFt ZSBhZnRlciBleHBhbnNpb24gKi8KLQotICAgIGludCB5OwotCi0jaWZuZGVmIHBkcDExCi0jZGVm aW5lIE5BTUVGRAkgLyogRmVhdHVyZSB0byBhbGxvdyBuYW1lIHRvIGJlIGFuIG9wZW4gZmlsZSBk ZXNjcmlwdG9yICovCi0jZW5kaWYgLyogcGRwMTEgKi8KLQotI2lmZGVmIE5BTUVGRAotICAgIGNo YXIgKnA7Ci0gICAgZGVidWcoRjEwMSwidHRvcGVuIHRlbG5ldGZkIiwiIix0ZWxuZXRmZCk7Ci0j ZW5kaWYgLyogTkFNRUZEICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gdHRuYW1lIix0dG5h bWUsMCk7Ci0gICAgZGVidWcoRjExMCwidHRvcGVuIHR0bm1zdiIsdHRubXN2LDApOwotICAgIGRl YnVnKEYxMDEsInR0b3BlbiBtb2RlbSIsIiIsbW9kZW0pOwotICAgIGRlYnVnKEYxMDEsInR0b3Bl biBuZXRjb25uIiwiIixuZXRjb25uKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdHR5ZmQiLCIi LHR0eWZkKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gKmxjbCIsIiIsKmxjbCk7Ci0gICAgZGVi dWcoRjEwMSwidHRvcGVuIHR0bWRtIiwiIix0dG1kbSk7Ci0gICAgZGVidWcoRjEwMSwidHRvcGVu IHR0bmV0IiwiIix0dG5ldCk7Ci0KLSAgICB0dHBtc2sgPSAweGZmOwotICAgIGxvY2twaWRbMF0g PSAnXDAnOwotCi0gICAgaWYgKHR0eWZkID4gLTEpIHsJCQkvKiBJZiBkZXZpY2UgYWxyZWFkeSBv cGVuZWQgKi8KLSAgICAgICAgaWYgKCFzdHJuY21wKHR0bmFtZSx0dG5tc3YsREVWTkFNTEVOKSkg LyogYXJlIG5ldyAmIG9sZCBuYW1lcyBlcXVhbD8gKi8KLQkgIHJldHVybigwKTsJCQkvKiBZZXMs IG5vdGhpbmcgdG8gZG8gLSBqdXN0IHJldHVybiAqLwotCXR0bm1zdlswXSA9ICdcMCc7CQkvKiBO bywgY2xlYXIgb3V0IG9sZCBuYW1lICovCi0JdHRjbG9zKHR0eWZkKTsJCQkvKiBjbG9zZSBvbGQg Y29ubmVjdGlvbi4gICovCi0gICAgfQotICAgIHdhc2Nsb3NlZCA9IDA7CQkJLyogTmV3IGNvbm5l Y3Rpb24sIG5vdCBjbG9zZWQgeWV0LiAqLwotICAgIHR0cGlwZSA9IDA7CQkJCS8qIEFzc3VtZSBp dCdzIG5vdCBhIHBpcGUgKi8KLSAgICB0dHB0eSA9IDA7CQkJCS8qIG9yIGEgcHR5Li4uICovCi0K LSNpZmRlZiBORVRDT05OCi0vKgotICBUaGlzIGlzIGEgYml0IHRyaWNreS4uLiAgU3VwcG9zZSB0 aGF0IHByZXZpb3VzbHkgS2VybWl0IGhhZCBkaWFsZWQgYSB0ZWxuZXQKLSAgbW9kZW0gc2VydmVy ICgic2V0IGhvc3QgeHh4OjIwMDEsIHNldCBtb2RlbSB0eXBlIHVzciwgZGlhbCAuLi4iKS4gIFRo ZW4gdGhlCi0gIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCAodHR5ZmQgPSAtMSksIGFuZCB0aGVuIGEg UkVESUFMIGNvbW1hbmQgd2FzIGdpdmVuLiAgQXQKLSAgdGhpcyBwb2ludCB3ZSd2ZSBvYmxpdGVy YXRlZCB0aGUgbmVnYXRpdmUgbW9kZW0gdHlwZSBoYWNrLCBhbmQgc28gd291bGQKLSAgdHJlYXQg dGhlIElQIGhvc3RuYW1lIGFzIGEgZGV2aWNlIG5hbWUsIGFuZCB3b3VsZCB0aGVuIGZhaWwgYmVj YXVzZSBvZiAiTm8KLSAgc3VjaCBkZXZpY2Ugb3IgZGlyZWN0b3J5Ii4gIEJ1dCB0aGUgcHJldmlv dXMgY29ubmVjdGlvbiBoYXMgbGVmdCBiZWhpbmQgc29tZQotICBjbHVlcywgc28gbGV0J3MgdXNl IHRoZW0uLi4KLSovCi0gICAgaWYgKHR0eWZkIDwgMCkgewkJCS8qIENvbm5lY3Rpb24gaXMgbm90 IG9wZW4gKi8KLQlpZiAoIXN0cmNtcCh0dG5hbWUsdHRubXN2KSkgewkvKiBPbGQgYW5kIG5ldyBu YW1lcyB0aGUgc2FtZT8gKi8KLQkgICAgaWYgKCgobmV0Y29ubiA+IDApICYmICh0dG1kbSA8IDAp KSB8fAotCQkoKHR0bmV0ID4gMCkgJiYKLQkJICghY2tzdHJjaHIodHRuYW1lLCcvJykpICYmIChj a3N0cmNocih0dG5hbWUsJzonKSkpCi0JCSkgewotCQlpbnQgeCwgcmM7Ci0JCXggPSAodHRtZG0g PCAwKSA/IC10dG1kbSA6IHR0bmV0OwotCQlyYyA9IG5ldG9wZW4odHRuYW1lLCBsY2wsIHgpOwot CQlkZWJ1ZyhGMTExLCJ0dG9wZW4gUkVPUEVOIG5ldG9wZW4iLHR0bmFtZSxyYyk7Ci0JCWlmIChy YyA+IC0xKSB7Ci0JCSAgICBuZXRjb25uID0gMTsKLQkJICAgIHhsb2NhbCA9ICpsY2wgPSAxOwot CQl9IGVsc2UgewotCQkgICAgbmV0Y29ubiA9IDA7Ci0JCX0KLQkJZ290c2lncyA9IDA7Ci0JCXJl dHVybihyYyk7Ci0JICAgIH0KLQl9Ci0gICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lm ZGVmIE1BWE5BTUxFTgotICAgIGRlYnVnKEYxMDAsInR0b3BlbiBNQVhOQU1MRU4gZGVmaW5lZCIs IiIsMCk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAsInR0b3BlbiBNQVhOQU1MRU4gKk5PVCogZGVm aW5lZCIsIiIsMCk7Ci0jZW5kaWYKLQotI2lmZGVmIEJTRDQKLSAgICBkZWJ1ZyhGMTAwLCJ0dG9w ZW4gQlNENCBkZWZpbmVkIiwiIiwwKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwidHRvcGVuIEJT RDQgKk5PVCogZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYgLyogQlNENCAqLwotCi0jaWZkZWYgQlNE NDIKLSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gQlNENDIgZGVmaW5lZCIsIiIsMCk7Ci0jZWxzZQot ICAgIGRlYnVnKEYxMDAsInR0b3BlbiBCU0Q0MiAqTk9UKiBkZWZpbmVkIiwiIiwwKTsKLSNlbmRp ZiAvKiBCU0Q0MiAqLwotCi0jaWZkZWYgTVlSRUFECi0gICAgZGVidWcoRjEwMCwidHRvcGVuIE1Z UkVBRCBkZWZpbmVkIiwiIiwwKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwidHRvcGVuIE1ZUkVB RCAqTk9UKiBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZiAvKiBNWVJFQUQgKi8KLQotI2lmZGVmCU5F VENPTk4KLSAgICBpZiAobW9kZW0gPCAwKSB7CQkJLyogbW9kZW0gPCAwID0gY29kZSBmb3IgbmV0 d29yayAqLwotCWludCB4OwotCXR0bWRtID0gbW9kZW07Ci0JbW9kZW0gPSAtbW9kZW07CQkJLyog UG9zaXRpdmUgbmV0d29yayB0eXBlIG51bWJlciAqLwotCWZkZmxhZyA9IDA7CQkJLyogU3RkaW8g bm90IHJlZGlyZWN0ZWQuICovCi0JbmV0Y29ubiA9IDE7CQkJLyogQW5kIGl0J3MgYSBuZXR3b3Jr IGNvbm5lY3Rpb24gKi8KLQlkZWJ1ZyhGMTExLCJ0dG9wZW4gbmV0Iix0dG5hbWUsbW9kZW0pOwot I2lmZGVmIE5BTUVGRAotCWZvciAocCA9IHR0bmFtZTsgaXNkaWdpdCgqcCk7IHArKykgOyAvKiBD aGVjayBmb3IgYWxsIGRpZ2l0cyAqLwotIAlpZiAoKnAgPT0gJ1wwJyAmJiAodGVsbmV0ZmQgfHwg eDI1ZmQpKSB7IC8qIEF2b2lkIFguMTIxIGFkZHJlc3NlcyAqLwotCSAgICB0dHlmZCA9IGF0b2ko dHRuYW1lKTsJLyogSXMgdGhlcmUgYSB3YXkgdG8gdGVzdCBpdCdzIG9wZW4/ICovCi0JICAgIHR0 ZmRmbGcgPSAxOwkJLyogV2UgZ290IGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yICovCi0JICAgIGRl YnVnKEYxMTEsInR0b3BlbiBuZXQgdHRmZGZsZyIsdHRuYW1lLHR0ZmRmbGcpOwotCSAgICBkZWJ1 ZyhGMTAxLCJ0dG9wZW4gbmV0IHR0eWZkIiwiIix0dHlmZCk7Ci0JICAgIGNrc3RybmNweSh0dG5t c3YsdHRuYW1lLERFVk5BTUxFTik7IC8qIFJlbWVtYmVyIHRoZSAibmFtZSIuICovCi0JICAgIHgg PSAxOwkJCS8qIFJldHVybiBjb2RlIGlzICJnb29kIi4gKi8KLQkgICAgaWYgKHRlbG5ldGZkKSB7 Ci0JCXR0bmV0ID0gTkVUX1RDUEI7Ci0JCWlmICh0dG5wcm90byAhPSBOUF9UQ1BSQVcpCi0JCSAg dHRucHJvdG8gPSBOUF9URUxORVQ7Ci0jaWZkZWYgU1VOWDI1Ci0JICAgIH0gZWxzZSBpZiAoeDI1 ZmQpIHsKLQkJdHRuZXQgPSBORVRfU1gyNTsKLQkJdHRucHJvdG8gPSBOUF9OT05FOwotI2VuZGlm IC8qIFNVTlgyNSAqLwotCSAgICB9Ci0JfSBlbHNlIHsJCQkvKiBIb3N0IG5hbWUgb3IgYWRkcmVz cyBnaXZlbiAqLwotI2lmZGVmIE5FVFBUWQotCSAgICBpZiAobW9kZW0gPT0gTkVUX1BUWSkgewot CQlpbnQgeDsKLQkJaWYgKG5vcHVzaCkgewotCQkgICAgZGVidWcoRjEwMCwidHRvcGVuIFBUWTog bm9wdXNoIiwiIiwwKTsKLQkJICAgIHJldHVybigtMSk7Ci0JCX0KLSAgICAgICAgICAgICAgICB0 dG5ldCA9IE5FVF9QVFk7Ci0JCXR0bnByb3RvID0gTlBfTk9ORTsKLSAgICAgICAgICAgICAgICBu ZXRjb25uID0gMTsgICAgICAgICAgICAvKiBidXQgd2UgZG9uJ3QgdXNlIG5ldHdvcmsgaS9vICov Ci0gICAgICAgICAgICAgICAgdHRwdHkgPSAxOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs InR0b3BlbiBQVFkiLHR0bmFtZSwwKTsKLQkJeCA9IGRvX3B0eSgmdHR5ZmQsdHRuYW1lLDApOwot CQlpZiAoeCA+IC0xKSB7Ci0JCSAgICBja3N0cm5jcHkodHRubXN2LHR0bmFtZSxERVZOQU1MRU4p OwotCQkgICAgeGxvY2FsID0gKmxjbCA9IDE7CS8qIEl0J3MgbG9jYWwgKi8KLQkJfSBlbHNlIHsK LQkJICAgIHR0cHR5ID0gMDsKLQkJICAgIG5ldGNvbm4gPSAwOwotCQl9Ci0JCWdvdHNpZ3MgPSAw OwotCQlyZXR1cm4oeCk7Ci0JICAgIH0KLSNlbmRpZiAvKiBORVRQVFkgKi8KLSNpZmRlZiBORVRD TUQKLS8qCi0gIGR1cDIoKSBpcyBub3QgYXZhaWxhYmxlIG9uIG9sZGVyIFN5c3RlbSBWIHBsYXRm b3JtcyBsaWtlIEFUJlQgM0J4LiAgRm9yCi0gIHRob3NlIHN5c3RlbXMgd2UgcHVudCBieSBub3Qg ZGVmaW5pbmcgTkVUQ01ELCBidXQgd2UgbWlnaHQgYmUgYWJsZSB0byBkbwotICBiZXR0ZXIgLS0g c2VlIHdvcmthcm91bmRzIGZvciB0aGlzIHByb2JsZW0gaW4gY2t1ZmlvLmMgKHNlYXJjaCBmb3Ig ZHVwMikuCi0qLwotCSAgICBpZiAobW9kZW0gPT0gTkVUX0NNRCkgewotCQlpZiAobm9wdXNoKSB7 Ci0JCSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gcGlwZTogbm9wdXNoIiwiIiwwKTsKLQkJICAgIHJl dHVybigtMSk7Ci0JCX0KLQkJaWYgKHBpcGUocGlwZTApIHx8IHBpcGUocGlwZTEpKSB7Ci0JCSAg ICBwZXJyb3IoIlBpcGUgZXJyb3IiKTsKLQkJICAgIHJldHVybigtMSk7Ci0JCX0KLQkJdHRwaWQg PSBmb3JrKCk7CQkvKiBNYWtlIGEgZm9yayAqLwotCi0JCXN3aXRjaCAodHRwaWQpIHsKLQkJICBj YXNlIC0xOgkJLyogRXJyb3IgbWFraW5nIGZvcmsgKi8KLQkJICAgIGNsb3NlKHBpcGUwWzBdKTsK LQkJICAgIGNsb3NlKHBpcGUwWzFdKTsKLQkJICAgIGNsb3NlKHBpcGUxWzBdKTsKLQkJICAgIGNs b3NlKHBpcGUxWzFdKTsKLQkJICAgIHBlcnJvcigiRm9yayBlcnJvciIpOwotCQkgICAgcmV0dXJu KC0xKTsKLQkJICBjYXNlIDA6CQkvKiBDaGlsZC4gKi8KLQkJICAgIGNsb3NlKHBpcGUwWzBdKTsK LQkJICAgIGNsb3NlKHBpcGUxWzFdKTsKLQkJICAgIGR1cDIocGlwZTBbMV0sIDEpOwotCQkgICAg Y2xvc2UocGlwZTBbMV0pOwotCQkgICAgZHVwMihwaXBlMVswXSwgMCk7Ci0JCSAgICBjbG9zZShw aXBlMVswXSk7Ci0JCSAgICBzeXN0ZW0odHRuYW1lKTsKLQkJICAgIF9leGl0KDApOwotCQkgIGRl ZmF1bHQ6CQkvKiBQYXJlbnQgKi8KLQkJICAgIGNsb3NlKHBpcGUwWzFdKTsKLQkJICAgIGNsb3Nl KHBpcGUxWzBdKTsKLQkJICAgIGZkaW4gPSBwaXBlMFswXTsJLyogUmVhZCBmcm9tIHBpcGUgKi8K LQkJICAgIGZkb3V0ID0gcGlwZTFbMV07CS8qIFdyaXRlIHRvIHBpcGUgKi8KLQkJICAgIHR0b3V0 ID0gZmRvcGVuKGZkb3V0LCJ3Iik7IC8qIEdldCBzdHJlYW0gc28gd2UgY2FuICovCi0JCSAgICBp ZiAoIXR0b3V0KSB7CS8qIG1ha2UgaXQgdW5idWZmZXJlZC4gKi8KLQkJCXBlcnJvcigiZmRvcGVu IGZhaWx1cmUiKTsKLQkJCXJldHVybigtMSk7Ci0JCSAgICB9Ci0JCSAgICBzZXRidWYodHRvdXQs TlVMTCk7Ci0JCSAgICBja3N0cm5jcHkodHRubXN2LHR0bmFtZSxERVZOQU1MRU4pOwotCQkgICAg eGxvY2FsID0gKmxjbCA9IDE7CS8qIEl0J3MgbG9jYWwgKi8KLQkJICAgIG5ldGNvbm4gPSAxOwkv KiBDYWxsIGl0IGEgbmV0d29yayBjb25uZWN0aW9uICovCi0JCSAgICB0dG1kbSA9IG1vZGVtOwkv KiBSZW1lbWJlciBuZXR3b3JrIHR5cGUgKi8KLQkJICAgIHR0eWZkID0gZmRpbjsKLQkJICAgIHR0 cGlwZSA9IDE7Ci0JCSAgICBnb3RzaWdzID0gMDsKLQkJICAgIHJldHVybigwKTsKLQkJfQotCSAg ICB9Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jZW5kaWYgLyogTkFNRUZEICovCi0JICAgIHggPSBu ZXRvcGVuKHR0bmFtZSwgbGNsLCBtb2RlbSk7IC8qIChzZWUgY2tjbmV0LmgpICovCi0JICAgIGlm ICh4ID4gLTEpIHsKLQkJY2tzdHJuY3B5KHR0bm1zdix0dG5hbWUsREVWTkFNTEVOKTsKLQkgICAg fSBlbHNlIG5ldGNvbm4gPSAwOwotI2lmZGVmIE5BTUVGRAotCX0KLSNlbmRpZiAvKiBOQU1FRkQg Ki8KLQotI2lmZGVmIHNvbnlfbmV3cwkJCS8qIFNvbnkgTkVXUyAqLwotCWlmIChpb2N0bCh0dHlm ZCxUSU9DS0dFVCwma21fZXh0KSA8IDApIHsgLyogR2V0IEthbmppIG1vZGUgKi8KLQkgICAgcGVy cm9yKCJ0dG9wZW4gZXJyb3IgZ2V0dGluZyBLYW5qaSBtb2RlIChuZXR3b3JrKSIpOwotCSAgICBk ZWJ1ZyhGMTExLCJ0dG9wZW4gZXJyb3IgZ2V0dGluZyBLYW5qaSBtb2RlIiwibmV0d29yayIsMCk7 Ci0JICAgIGttX2V4dCA9IC0xOwkJLyogTWFrZSBzdXJlIHRoaXMgc3RheXMgdW5kZWZpbmVkLiAq LwotCX0KLSNlbmRpZiAvKiBzb255X25ld3MgKi8KLQotCXhsb2NhbCA9ICpsY2wgPSAxOwkJLyog TmV0d29yayBjb25uZWN0aW9ucyBhcmUgbG9jYWwuICovCi0JZGVidWcoRjEwMSwidHRvcGVuIG5l dCB4IiwiIix4KTsKLSNpZmRlZiBDT01NRU5UCi0vKiBMZXQgbmV0b3BlbigpIGRvIHRoaXMgKi8K LQlpZiAoeCA+IC0xICYmICF4MjVmZCkKLQkgIHggPSB0bl9pbmkoKTsJCQkvKiBJbml0aWFsaXpl IFRFTE5FVCBwcm90b2NvbCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQlnb3RzaWdzID0gMDsK LQlyZXR1cm4oeCk7Ci0gICAgfSBlbHNlIHsJCQkJLyogVGVybWluYWwgZGV2aWNlICovCi0jZW5k aWYJLyogTkVUQ09OTiAqLwotCi0jaWZkZWYgTkFNRUZECi0vKgotICBUaGlzIGNvZGUgbGV0cyB5 b3UgZ2l2ZSBLZXJtaXQgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgZm9yIGEgc2VyaWFsCi0gIGNv bW11bmljYXRpb24gZGV2aWNlLCByYXRoZXIgdGhhbiBhIGRldmljZSBuYW1lLiAgS2VybWl0IGFz c3VtZXMgdGhhdCB0aGUKLSAgbGluZSBpcyBhbHJlYWR5IG9wZW4sIGxvY2tlZCwgY29uZGl0aW9u ZWQgd2l0aCB0aGUgcmlnaHQgcGFyYW1ldGVycywgZXRjLgotKi8KLQlmb3IgKHAgPSB0dG5hbWU7 IGlzZGlnaXQoKnApOyBwKyspIDsgLyogQ2hlY2sgZm9yIGFsbC1kaWdpdHMgKi8KLQlpZiAoKnAg PT0gJ1wwJykgewotCSAgICB0dHlmZCA9IGF0b2kodHRuYW1lKTsJLyogSXMgdGhlcmUgYSB3YXkg dG8gdGVzdCBpdCdzIG9wZW4/ICovCi0JICAgIGRlYnVnKEYxMTEsInR0b3BlbiBnb3Qgb3BlbiBm ZCIsdHRuYW1lLHR0eWZkKTsKLQkgICAgY2tzdHJuY3B5KHR0bm1zdix0dG5hbWUsREVWTkFNTEVO KTsgLyogUmVtZW1iZXIgdGhlICJuYW1lIi4gKi8KLQkgICAgaWYgKHR0eWZkID49IDAgJiYgdHR5 ZmQgPCAzKSAvKiBJZiBpdCdzIHN0ZGlvLi4uICovCi0JICAgICAgeGxvY2FsID0gKmxjbCA9IDA7 CS8qIHdlJ3JlIGluIHJlbW90ZSBtb2RlICovCi0JICAgIGVsc2UJCQkvKiBvdGhlcndpc2UgKi8K LQkgICAgICB4bG9jYWwgPSAqbGNsID0gMTsJLyogbG9jYWwgbW9kZS4gKi8KLQkgICAgbmV0Y29u biA9IDA7CQkvKiBBc3N1bWUgaXQncyBub3QgYSBuZXR3b3JrLiAqLwotCSAgICB0dnRmbGcgPSAw OwkJCS8qIE1pZ2h0IG5lZWQgdG8gaW5pdGlhbGl6ZSBtb2Rlcy4gKi8KLQkgICAgdHRtZG0gPSBt b2RlbTsJCS8qIFJlbWVtYmVyIG1vZGVtIHR5cGUuICovCi0JICAgIGZkZmxhZyA9IDA7CQkJLyog U3RkaW8gbm90IHJlZGlyZWN0ZWQuICovCi0JICAgIHR0ZmRmbGcgPSAxOwkJLyogRmxhZyB3ZSB3 ZXJlIG9wZW5lZCB0aGlzIHdheS4gKi8KLQkgICAgZGVidWcoRjExMSwidHRvcGVuIG5vbi1uZXQg dHRmZGZsZyIsdHRuYW1lLHR0ZmRmbGcpOwotCSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gbm9uLW5l dCB0dHlmZCIsIiIsdHR5ZmQpOwotCi0jaWZkZWYgc29ueV9uZXdzCQkJLyogU29ueSBORVdTICov Ci0JICAgIC8qIEdldCBkZXZpY2UgS2FuamkgbW9kZSAqLwotCSAgICBpZiAoaW9jdGwodHR5ZmQs VElPQ0tHRVQsJmttX2V4dCkgPCAwKSB7Ci0JCXBlcnJvcigidHRvcGVuIGVycm9yIGdldHRpbmcg S2FuamkgbW9kZSIpOwotCQlkZWJ1ZyhGMTAxLCJ0dG9wZW4gZXJyb3IgZ2V0dGluZyBLYW5qaSBt b2RlIiwiIiwwKTsKLQkJa21fZXh0ID0gLTE7CQkvKiBNYWtlIHN1cmUgdGhpcyBzdGF5cyB1bmRl ZmluZWQuICovCi0JICAgIH0KLSNlbmRpZiAvKiBzb255X25ld3MgKi8KLQkgICAgZ290c2lncyA9 IDA7Ci0JICAgIHJldHVybigwKTsJCQkvKiBSZXR1cm4gc3VjY2VzcyAqLwotCX0KLSNlbmRpZiAv KiBOQU1FRkQgKi8KLSNpZmRlZiBORVRDT05OCi0gICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8K LQotLyogSGVyZSB3ZSBoYXZlIHRvIG9wZW4gYSBzZXJpYWwgZGV2aWNlIG9mIHRoZSBnaXZlbiBu YW1lLiAqLwotCi0gICAgbmV0Y29ubiA9IDA7CQkJLyogU28gaXQncyBub3QgYSBuZXR3b3JrIGNv bm5lY3Rpb24gKi8KLSAgICBvY2N0ID0gc2lnbmFsKFNJR0lOVCwgY2N0cmFwKTsJLyogU2V0IENv bnRyb2wtQyB0cmFwLCBzYXZlIG9sZCBvbmUgKi8KLSAgICBzaWdpbnRfaWduID0gMDsKLQotICAg IHR2dGZsZyA9IDA7CQkJLyogRmxhZyBmb3IgdXNlIGJ5IHR0dnQoKS4gKi8KLQkJCQkvKiAwID0g dHR2dCBub3QgY2FsbGVkIHlldCBmb3IgdGhpcyBkZXZpY2UgKi8KLQotICAgIGZkZmxhZyA9ICgh aXNhdHR5KDApIHx8ICFpc2F0dHkoMSkpOyAvKiBGbGFnIGZvciBzdGRpbyByZWRpcmVjdGVkICov Ci0gICAgZGVidWcoRjEwMSwidHRvcGVuIGZkZmxhZyIsIiIsZmRmbGFnKTsKLQotICAgIHR0bWRt ID0gbW9kZW07ICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgdGhpcyBhdmFpbGFibGUgdG8g b3RoZXIgZm5zICovCi0gICAgeGxvY2FsID0gKmxjbDsgICAgICAgICAgICAgICAgICAgICAgLyog TWFrZSB0aGlzIGF2YWlsYWJsZSB0byBvdGhlciBmbnMgKi8KLQotLyogQ29kZSBmb3IgaGFuZGxp bmcgYmlkaXJlY3Rpb25hbCB0dHkgbGluZXMgZ29lcyBoZXJlLiAqLwotLyogVXNlIHNwZWNpZmll ZCBtZXRob2QgZm9yIHR1cm5pbmcgb2ZmIGxvZ2lucyBhbmQgc3VwcHJlc3NpbmcgZ2V0dHkuICov Ci0KLSNpZmRlZiBBQ1VDTlRSTAotICAgIC8qIFNob3VsZCBwdXQgY2FsbCB0byBwcml2X29uKCkg aGVyZSwgYnV0IHRoYXQgd291bGQgYmUgdmVyeSByaXNreSEgKi8KLSAgICBhY3VjbnRybCgiZGlz YWJsZSIsdHRuYW1lKTsgICAgICAgICAvKiBhY3VjbnRybCgpIHByb2dyYW0uICovCi0gICAgLyog YW5kIHByaXZfb2ZmKCkgaGVyZS4uLiAqLwotI2Vsc2UKLSNpZmRlZiBBVFQ3MzAwCi0gICAgaWYg KChhdHRtb2RlbSAmIERPR0VUWSkgPT0gMCkgICAgICAgLyogb2ZmZ2V0dHkoKSBwcm9ncmFtLiAq LwotICAgICAgYXR0bW9kZW0gfD0gb2ZmZ2V0dHkodHRuYW1lKTsJLyogUmVtZW1iZXIgcmVzcG9u c2UuICAqLwotI2VuZGlmIC8qIEFUVDczMDAgKi8KLSNlbmRpZiAvKiBBQ1VDTlRSTCAqLwotCi0j aWZkZWYgT1BFTkZJUlNUCi0vKgotIDE5ODUtMjAwMTogb3BlbnMgZGV2aWNlIGZpcnN0IHRoZW4g Z2V0cyBsb2NrOyByZWFzb246Ci0gS2VybWl0IHVzdWFsbHkgaGFzIHRvIHJ1biBzZXR1aWQgb3Ig c2V0Z2lkIGluIG9yZGVyIHRvIGNyZWF0ZSBhIGxvY2tmaWxlLgotIElmIHlvdSBnaXZlIGEgU0VU IExJTkUgY29tbWFuZCBmb3IgYSBkZXZpY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHlvdXIgam9iJ3MK LSBjb250cm9sbGluZyB0ZXJtaW5hbCwgS2VybWl0IGRvZXNuJ3QgaGF2ZSB0byBjcmVhdGUgYSBs b2NrZmlsZSwgYW5kIGluIGZhY3QKLSBzaG91bGQgbm90IGNyZWF0ZSBvbmUsIGFuZCB3b3VsZCBm YWlsIGlmIGl0IHRyaWVkIHRvIGlmIGl0IGRpZCBub3QgaGF2ZSB0aGUKLSByZXF1aXJlZCBwcml2 aWxlZ2VzLiAgQnV0IHlvdSBjYW4ndCBmaW5kIG91dCBpZiB0d28gdHR5IGRldmljZSBuYW1lcyBh cmUKLSBlcXVpdmFsZW50IHVudGlsIHlvdSBoYXZlIGEgZmlsZSBkZXNjcmlwdG9yIHRoYXQgeW91 IGNhbiBnaXZlIHRvIHR0eW5hbWUoKS4KLSBCdXQgdGhpcyBjYW4gY2F1c2UgYSByYWNlIGNvbmRp dGlvbiBiZXR3ZWVuIEtlcm1pdCBhbmQgW21dZ2V0dHkuICBTbyBzZWUKLSB0aGUgWyNdZWxzZSBw YXJ0Li4uCi0qLyAKLQotLyoKLSBJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24sIHdlIG9wZW4gdGhl IHR0eSBkZXZpY2UgZm9yIHJlYWQvd3JpdGUuCi0gSWYgYSBtb2RlbSBoYXMgYmVlbiBzcGVjaWZp ZWQgdmlhICJzZXQgbW9kZW0iIHByaW9yIHRvICJzZXQgbGluZSIKLSB0aGVuIHRoZSBPX05ERUxB WSBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgb3BlbiwgcHJvdmlkZWQgdGhpcyBzeW1ib2wKLSBp cyBkZWZpbmVkIChlLmcuIGluIGZjbnRsLmgpLCBzbyB0aGF0IHRoZSBwcm9ncmFtIGRvZXMgbm90 IGhhbmcgd2FpdGluZwotIGZvciBjYXJyaWVyICh3aGljaCBpbiBtb3N0IGNhc2VzIHdvbid0IGJl IHByZXNlbnQgYmVjYXVzZSBhIGNvbm5lY3Rpb24KLSBoYXMgbm90IGJlZW4gZGlhbGVkIHlldCku ICBPX05ERUxBWSBpcyByZW1vdmVkIGxhdGVyIG9uIGluIHR0b3BlbigpLiAgSXQKLSB3b3VsZCBt YWtlIG1vcmUgc2Vuc2UgdG8gZmlyc3QgZGV0ZXJtaW5lIGlmIHRoZSBsaW5lIGlzIGxvY2FsIGJl Zm9yZQotIGRvaW5nIHRoaXMsIGJ1dCBiZWNhdXNlIHR0eW5hbWUoKSByZXF1aXJlcyBhIGZpbGUg ZGVzY3JpcHRvciwgd2UgaGF2ZQotIHRvIG9wZW4gaXQgZmlyc3QuICBTZWUgZG9fb3BlbigpLgot Ci0gTm93IG9wZW4gdGhlIGRldmljZSB1c2luZyB0aGUgZGVzaXJlZCB0cmVhdG1lbnQgb2YgY2Fy cmllci4KLSBJZiBjYXJyaWVyIGlzIFJFUVVJUkVELCB0aGVuIG9wZW4gY291bGQgaGFuZyBmb3Jl dmVyLCBzbyBhbiBvcHRpb25hbAotIHRpbWVyIGlzIHByb3ZpZGVkLiAgSWYgY2FycmllciBpcyBu b3QgcmVxdWlyZWQsIHRoZSB0aW1lciBzaG91bGQgbmV2ZXIKLSBnbyBvZmYsIGFuZCBzaG91bGQg ZG8gbm8gaGFybS4uLgotKi8KLSAgICB0dG90bW8gPSAwOwkJCQkvKiBGbGFnIG5vIHRpbWVvdXQg Ki8KLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdGltbyIsIiIsdGltbyk7Ci0gICAgZGVidWcoRjEw MSwidHRvcGVuIHhsb2NhbCIsIiIseGxvY2FsKTsKLSAgICBpZiAodGltbyA+IDApIHsKLQlpbnQg eHg7Ci0Jc2F2YWwgPSBzaWduYWwoU0lHQUxSTSx0aW1lcmgpOwkvKiBUaW1lZCwgc2V0IHVwIHRp bWVyLiAqLwotCXh4ID0gYWxhcm0odGltbyk7CQkvKiBUaW1lZCBvcGVuKCkgKi8KLQlkZWJ1ZyhG MTAxLCJ0dG9wZW4gYWxhcm0iLCIiLHh4KTsKLQlpZiAoCi0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0J ICAgIHNpZ3NldGptcChzamJ1ZiwxKQotI2Vsc2UKLQkgICAgc2V0am1wKHNqYnVmKQotI2VuZGlm IC8qIENLX1BPU0lYX1NJRyAqLwotCSAgICApIHsKLQkgICAgdHRvdG1vID0gMTsJCQkvKiBGbGFn IHRpbWVvdXQuICovCi0JfSBlbHNlIHR0eWZkID0gZG9fb3Blbih0dG5hbWUpOwotCXR0aW1vZmYo KTsKLQlkZWJ1ZyhGMTExLCJ0dG9wZW4iLCJtb2RlbSIsbW9kZW0pOwotCWRlYnVnKEYxMDEsInR0 b3BlbiB0dHlmZCIsIiIsdHR5ZmQpOwotCWRlYnVnKEYxMDEsInR0b3BlbiBhbGFybSByZXR1cm4i LCIiLHR0b3Rtbyk7Ci0gICAgfSBlbHNlIHsKLQllcnJubyA9IDA7Ci0JdHR5ZmQgPSBkb19vcGVu KHR0bmFtZSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInR0b3BlbiB0dHlmZCIsdHRuYW1lLHR0 eWZkKTsKLSAgICBpZiAodHR5ZmQgPCAwKSB7CQkJLyogSWYgY291bGRuJ3Qgb3BlbiwgZmFpbC4g Ki8KLQlkZWJ1ZyhGMTAxLCJ0dG9wZW4gZXJybm8iLCIiLGVycm5vKTsKLQlpZiAoZXJybm8gPiAw ICYmICFxdWlldCkKLQkgIHBlcnJvcih0dG5hbWUpOwkJLyogUHJpbnQgbWVzc2FnZSAqLwotCi0j aWZkZWYgQVRUNzMwMAotCWlmIChhdHRtb2RlbSAmIERPR0VUWSkJCS8qIHdhcyBnZXR0eSgxbSkg cnVubmluZyBiZWZvcmUgdXM/ICovCi0JICBvbmdldHR5KHR0bm1zdik7CQkvKiB5ZXMsIHJlc3Rh cnQgb24gdHR5IGxpbmUgKi8KLQlhdHRtb2RlbSAmPSB+RE9HRVRZOwkJLyogbm8gcGhvbmUgaW4g dXNlLCBnZXR0eSByZXN0b3JlZCAqLwotI2Vsc2UKLSNpZmRlZiBBQ1VDTlRSTAotICAgICAgICAv KiBTaG91bGQgcHV0IGNhbGwgdG8gcHJpdl9vbigpIGhlcmUsIGJ1dCB0aGF0IHdvdWxkIGJlIHJp c2t5ISAqLwotCWFjdWNudHJsKCJlbmFibGUiLHR0bmFtZSk7CS8qIGFjdWNudHJsKCkgcHJvZ3Jh bS4gKi8KLQkvKiBhbmQgcHJpdl9vZmYoKSBoZXJlLi4uICovCi0jZW5kaWYgLyogQUNVTlRSTCAq LwotI2VuZGlmIC8qIEFUVDczMDAgKi8KLQotCXNpZ25hbChTSUdJTlQsb2NjdCk7CQkvKiBQdXQg b2xkIEN0cmwtQyB0cmFwIGJhY2suICovCi0JaWYgKGVycm5vID09IEVBQ0NFUykgewkJLyogRGV2 aWNlIGlzIHByb3RlY3RlZCBhZ2FpbnN0IHVzZXIgKi8KLQkgICAgZGVidWcoRjExMCwidHRvcGVu IEVBQ0NFU1MiLHR0bmFtZSwwKTsgLyogUmV0dXJuIC00ICovCi0JICAgIHJldHVybigtNCk7Ci0J fSBlbHNlIHJldHVybih0dG90bW8gPyAtMiA6IC0xKTsgLyogT3RoZXJ3aXNlIC0yIGlmIHRpbWVv dXQsIG9yIC0xICovCi0gICAgfQotCi0jaWZkZWYgUU5YCi0gICAgewotCWV4dGVybiBpbnQgcW54 cG9ydGxvY2s7Ci0JeCA9IHFueG9wZW5jb3VudCgpOwotCWRlYnVnKEYxMDEsInR0b3BlbiBxbnhv cGVuY291bnQiLCIiLHgpOwotCWRlYnVnKEYxMDEsInR0b3BlbiBxbnhwb3J0bG9jayIsIiIscW54 cG9ydGxvY2spOwotCWlmICh4IDwgMCAmJiBxbnhwb3J0bG9jaykgewotCSAgICB0dGNsb3MoMCk7 Ci0JICAgIHByaW50ZigiP0Nhbid0IGdldCBwb3J0IG9wZW4gY291bnRcbiIpOwotCSAgICBwcmlu dGYoIihUcnkgYWdhaW4gd2l0aCBTRVQgUU5YLVBPUlQtTE9DSyBPRkYpXG4iKTsKLQkgICAgcmV0 dXJuKC0xKTsJCQkvKiBJbmRpY2F0ZSBkZXZpY2UgaXMgaW4gdXNlICovCi0JfQotCWlmICh4ID4g MSkgewkJCS8qIDEgPT0gbWUgKi8KLQkgICAgaWYgKHFueHBvcnRsb2NrKQotCSAgICAgIHR0Y2xv cygwKTsKLQkgICAgICByZXR1cm4oLTIpOwkJLyogSW5kaWNhdGUgZGV2aWNlIGlzIGluIHVzZSAq LwotCSAgICBlbHNlIGlmICghcXVpZXQpCi0JICAgICAgcHJpbnRmKCJXQVJOSU5HOiBcIiVzXCIg bG9va3MgYnVzeS4uLlxuIix0dGRldik7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBRTlggKi8KLQot I2lmZGVmIFBsYW45Ci0gICAgLyogdGFrZSB0aGlzIG9wcG9ydHVuaXR5IHRvIG9wZW4gdGhlIGNv bnRyb2wgY2hhbm5lbCAqLwotICAgIGlmIChwOW9wZW50dHljdGwodHRuYW1lKSA8IDApCi0jZWxz ZQotICAgIC8qIE1ha2Ugc3VyZSBpdCdzIGEgcmVhbCB0dHkuICovCi0gICAgaWYgKCF0dGZkZmxn ICYmICFpc2F0dHkodHR5ZmQpICYmIHN0cmNtcCh0dG5hbWUsIi9kZXYvbnVsbCIpKQotI2VuZGlm IC8qIFBsYW45ICovCi0gICAgICB7Ci0JZnByaW50ZihzdGRlcnIsIiVzIGlzIG5vdCBhIHRlcm1p bmFsIGRldmljZVxuIix0dG5hbWUpOwotCWRlYnVnKEYxMTEsInR0b3BlbiBub3QgYSB0dHkiLHR0 bmFtZSxlcnJubyk7Ci0JY2xvc2UodHR5ZmQpOwotCXR0eWZkID0gLTE7Ci0Jd2FzY2xvc2VkID0g MTsKLQlzaWduYWwoU0lHSU5ULG9jY3QpOwotCXJldHVybigtMSk7Ci0gICAgfQotCi0jaWZkZWYg YWVnaXMKLQkvKiBBcG9sbG8gQyBydW50aW1lIGNsYWltcyB0aGF0IGNvbnNvbGUgcGFkcyBhcmUg dHR5IGRldmljZXMsIHdoaWNoCi0JICogaXMgcmVhc29uYWJsZSwgYnV0IHRoZXkgYXJlbid0IGFu eSBnb29kIGZvciBwYWNrZXQgdHJhbnNmZXIuICovCi0JaW9zXyRpbnFfdHlwZV91aWQoKHNob3J0 KXR0eWZkLCB0dHl1aWQsIHN0KTsKLQlpZiAoc3QuYWxsICE9IHN0YXR1c18kb2spIHsKLQkgICAg ZnByaW50ZihzdGRlcnIsICJwcm9ibGVtIGdldHRpbmcgdHR5IG9iamVjdCB0eXBlOiAiKTsKLQkg ICAgZXJyb3JfJHByaW50KHN0KTsKLQl9IGVsc2UgaWYgKHR0eXVpZCAhPSBzaW9fJHVpZCkgeyAv KiByZWplY3Qgbm9uLVNJTyBsaW5lcyAqLwotCSAgICBjbG9zZSh0dHlmZCk7IHR0eWZkID0gLTE7 Ci0JICAgIHdhc2Nsb3NlZCA9IDE7Ci0JICAgIGVycm5vID0gRU5PVFRZOyBwZXJyb3IodHRuYW1l KTsKLQkgICAgc2lnbmFsKFNJR0lOVCxvY2N0KTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0jZW5k aWYgLyogYWVnaXMgKi8KLQotICAgIHNpZ2ludF9pZ24gPSAob2NjdCA9PSBTSUdfSUdOKSA/IDEg OiAwOwotCi0gICAgY2tzdHJuY3B5KHR0bm1zdix0dG5hbWUsREVWTkFNTEVOKTsJLyogS2VlcCBj b3B5IG9mIG5hbWUgbG9jYWxseS4gKi8KLQotLyogQ2FsbGVyIHdhbnRzIHVzIHRvIGZpZ3VyZSBv dXQgaWYgbGluZSBpcyBjb250cm9sbGluZyB0dHkgKi8KLQotICAgIGlmICgqbGNsIDwgMCkgewot ICAgICAgICBpZiAoc3RyY21wKHR0bmFtZSxDVFROQU0pID09IDApIHsgLyogIi9kZXYvdHR5IiBh bHdheXMgcmVtb3RlICovCi0gICAgICAgICAgICB4bG9jYWwgPSAwOwotCSAgICBkZWJ1ZyhGMTEx LCJ0dG9wZW4gdHRuYW1lPUNUVE5BTSIsdHRuYW1lLHhsb2NhbCk7Ci0gICAgICAgIH0gZWxzZSBp ZiAoc3RyY21wKHR0bmFtZSxjdHRuYW0pID09IDApIHsKLSAgICAgICAgICAgIHhsb2NhbCA9IDA7 Ci0JICAgIGRlYnVnKEYxMTEsInR0b3BlbiB0dG5hbWU9Y3R0bmFtIix0dG5hbWUseGxvY2FsKTsK LQl9IGVsc2UgaWYgKGN0dG5hbVswXSkgewotI2lmZGVmIEJFQk9YX0RSNwotICAgICAgICAgICAg eCA9IHR0bm1zdjsJCQkvKiB0dHluYW1lKCkgaXMgYnJva2VuICovCi0jZWxzZQotICAgICAgICAg ICAgeCA9IHR0eW5hbWUodHR5ZmQpOyAgICAgICAgIC8qIEdldCByZWFsIG5hbWUgb2YgdHRuYW1l LiAqLwotI2VuZGlmIC8qIEJFQk9YX0RSNyAqLwotCSAgICBpZiAoIXgpIHggPSAiIjsKLQkgICAg aWYgKCp4KQotCSAgICAgIHhsb2NhbCA9ICgoc3RybmNtcCh4LGN0dG5hbSxERVZOQU1MRU4pID09 IDApID8gMCA6IDEpOwotCSAgICBlbHNlCi0JICAgICAgeGxvY2FsID0gMTsKLSAgICAgICAgICAg IGRlYnVnKEYxMTEsInR0b3BlbiB0dHluYW1lKHR0eWZkKSB4bG9jYWwiLHgseGxvY2FsKTsKLSAg ICAgICAgfQotICAgIH0KLQotI2lmbmRlZiBOT0ZEWkVSTwotLyogTm90ZSwgdGhlIGZvbGxvd2lu ZyBjb2RlIHdhcyBhZGRlZCBzbyB0aGF0IFVuaXggImlkbGUtbGluZSIgc25vb3BlcnMgKi8KLS8q IHdvdWxkIG5vdCB0aGluayBLZXJtaXQgd2FzIGlkbGUgd2hlbiBpdCB3YXMgdHJhbnNmZXJyaW5n IGZpbGVzLCBhbmQgKi8KLS8qIG1heWJlIGxvZyBwZW9wbGUgb3V0LiAqLwotICAgIGlmICh4bG9j YWwgPT0gMCkgewkJCS8qIFJlbW90ZSBtb2RlICovCi0JaWYgKGZkZmxhZyA9PSAwKSB7CQkvKiBT dGFuZGFyZCBpL28gaXMgbm90IHJlZGlyZWN0ZWQgKi8KLQkgICAgZGVidWcoRjEwMCwidHRvcGVu IHNldHRpbmcgdHR5ZmQgPSAwIiwiIiwwKTsKLSNpZmRlZiBMWU5YT1MKLQkgICAgLyogT24gTHlu eCBPUywgZmQgMCBpcyBvcGVuIGZvciByZWFkIG9ubHkuICovCi0JICAgIGR1cDIodHR5ZmQsMCk7 Ci0jZW5kaWYgLyogTFlOWE9TICovCi0JICAgIGNsb3NlKHR0eWZkKTsJCS8qIFVzZSBmaWxlIGRl c2NyaXB0b3IgMCAqLwotCSAgICB0dHlmZCA9IDA7Ci0JfSBlbHNlIHsJCQkvKiBTdGFuZGFyZCBp L28gaXMgcmVkaXJlY3RlZCAqLwotCSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gc3RkaW8gcmVkaXJl Y3RlZCIsIiIsdHR5ZmQpOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogTk9GRFpFUk8gKi8KLQotLyog Tm93IGNoZWNrIGlmIGxpbmUgaXMgbG9ja2VkIC0tIGlmIHNvIGZhaWwsIGVsc2UgbG9jayBmb3Ig b3Vyc2VsdmVzICovCi0vKiBOb3RlOiBBZnRlciBoYXZpbmcgZG9uZSB0aGlzLCBkb24ndCBmb3Jn ZXQgdG8gZGVsZXRlIHRoZSBsb2NrIGlmIHlvdSAqLwotLyogbGVhdmUgdHRvcGVuKCkgd2l0aCBh biBlcnJvciBjb25kaXRpb24uICovCi0KLSAgICBsa2YgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDaGVjayBsb2NrICovCi0gICAgaWYgKHhsb2NhbCA+IDApIHsKLQlpbnQgeHg7 IGludCB4cGlkOwotICAgICAgICBpZiAoKHh4ID0gdHRsb2NrKHR0bmFtZSkpIDwgMCkgeyAvKiBD YW4ndCBsb2NrIGl0LiAqLwotICAgICAgICAgICAgZGVidWcoRjExMSwidHRvcGVuIHR0bG9jayBm YWlscyIsdHRuYW1lLHh4KTsKLQkgICAgLyogV0FSTklORyAtIFRoaXMgY2xvc2UoKSBjYW4gaGFu ZyBpZiB0dHkgaXMgYW4gZW1wdHkgc29ja2V0Li4uICovCi0gICAgICAgICAgICBjbG9zZSh0dHlm ZCk7CQkvKiBDbG9zZSB0aGUgZGV2aWNlLiAqLwotCSAgICB0dHlmZCA9IC0xOwkJCS8qIEVyYXNl IGl0cyBmaWxlIGRlc2NyaXB0b3IuICovCi0JICAgIHdhc2Nsb3NlZCA9IDE7Ci0JICAgIHNpZ25h bChTSUdJTlQsb2NjdCk7CS8qIFB1dCBvbGQgU0lHSU5UIGJhY2suICovCi0JICAgIHNpZ2ludF9p Z24gPSAob2NjdCA9PSBTSUdfSUdOKSA/IDEgOiAwOwotCSAgICBpZiAoeHggPT0gLTIpIHsJCS8q IElmIGxvY2tmaWxlIHNheXMgZGV2aWNlIGluIHVzZSwgKi8KLSNpZm5kZWYgTk9VVUNQCi0JCWRl YnVnKEYxMTEsInR0b3BlbiByZWFkaW5nIGxvY2tmaWxlIHBpZCIsZmxmbmFtLHh4KTsKLQkJeHBp ZCA9IHR0cnBpZChmbGZuYW0pOwkvKiBUcnkgdG8gcmVhZCBwaWQgZnJvbSBsb2NrZmlsZSAqLwot CQlpZiAoeHBpZCA+IC0xKSB7CS8qIElmIHdlIGdvdCBhIHBpZCAqLwotICAgICAgICAgICAgICAg ICAgICBpZiAoIXF1aWV0KQotCQkgICAgICBwcmludGYoIkxvY2tlZCBieSBwcm9jZXNzICVkXG4i LHhwaWQpOyAvKiB0ZWxsIHRoZW0uICovCi0JCSAgICBzcHJpbnRmKGxvY2twaWQsIiVkIix4cGlk KTsJLyogUmVjb3JkIGl0IHRvbyAqLwotCQkgICAgZGVidWcoRjExMCwidHRvcGVuIGxvY2twaWQi LGxvY2twaWQsMCk7Ci0JCX0gZWxzZSBpZiAoKmZsZm5hbSkgewotCQkgICAgZXh0ZXJuIGNoYXIg KkRJUkNNRDsKLQkJICAgIGNoYXIgKnAgPSBOVUxMOwotCQkgICAgaW50IHg7Ci0JCSAgICB4ID0g KGludClzdHJsZW4oZmxmbmFtKSArIChpbnQpc3RybGVuKERJUkNNRCkgKyAyOwotCQkgICAgcCA9 IG1hbGxvYyh4KTsJLyogUHJpbnQgYSBkaXJlY3RvcnkgbGlzdGluZy4gKi8KLS8qCi0gIE5vdGU6 IHByaXZfb24oKSB3b24ndCBoZWxwIGhlcmUsIGJlY2F1c2Ugd2UgZG8gbm90IHBhc3MgcHJpdnMg YWxvbmcgdG8KLSAgdG8gaW5mZXJpb3IgcHJvY2Vzc2VzLCBpbiB0aGlzIGNhc2UgbHMuICBTbyBp ZiB0aGUgcmVhbCB1c2VyIGRvZXMgbm90IGhhdmUKLSAgZGlyZWN0b3J5LWxpc3RpbmcgYWNjZXNz IHRvIHRoZSBsb2NrZmlsZSBkaXJlY3RvcnksIHRoaXMgd2lsbCByZXN1bHQgaW4KLSAgc29tZXRo aW5nIGxpa2UgIm5vdCBmb3VuZCIuICBUaGF0J3Mgd2h5IHdlIHRyeSB0aGlzIG9ubHkgYXMgYSBs YXN0IHJlc29ydC4KLSovCi0JCSAgICBpZiAocCkgewkJLyogSWYgd2UgZ290IHRoZSBzcGFjZS4u LiAqLwotCQkJY2ttYWttc2cocCx4LERJUkNNRCwiICIsZmxmbmFtLE5VTEwpOwotCQkJenN5c2Nt ZChwKTsJLyogR2V0IGxpc3RpbmcuICovCi0JCQlpZiAocCkgewkvKiBmcmVlIHRoZSBzcGFjZSAq LwotCQkJICAgIGZyZWUocCk7Ci0JCQkgICAgcCA9IE5VTEw7Ci0JCQl9Ci0JCSAgICB9Ci0JCX0K LSNlbmRpZiAvKiBOT1VVQ1AgKi8KLQkJcmV0dXJuKC01KTsJCS8qIENvZGUgZm9yIGRldmljZSBp biB1c2UgKi8KLQkgICAgfSBlbHNlIHJldHVybigtMyk7CQkvKiBBY2Nlc3MgZGVuaWVkICovCi0g ICAgICAgIH0gZWxzZSBsa2YgPSAxOwotICAgIH0KLSNlbHNlICAvKiBPUEVORklSU1QgKi8KLQot LyoKLSAgMjcgT2N0IDIwMDE6IE5ldyBzaW1wbGVyIGNvZGUgdGhhdCBnZXRzIHRoZSBsb2NrIGZp cnN0IGFuZCB0aGVuIG9wZW5zIHRoZQotICBkZXZpY2UsIHdoaWNoIGVsaW1pbmF0ZXMgdGhlIHJh Y2UgY29uZGl0aW9uLiAgVGhlIGRvd25zaWRlIGlzIHlvdSBjYW4gbm8KLSAgbG9uZ2VyIHNheSAi c2V0IGxpbmUgL2Rldi90dHlwMCIgb3Igd2hhdGV2ZXIsIHdoZXJlIC9kZXYvdHR5cDAgaXMgeW91 ciBsb2dpbgotICB0ZXJtaW5hbCwgd2l0aG91dCB0cnlpbmcgdG8gY3JlYXRlIGEgbG9ja2ZpbGUs IHdoaWNoIGZhaWxzIGlmIEMtS2VybWl0IGxhY2tzCi0gIHByaXZzLCBhbmQgaWYgaXQgc3VjY2Vl ZHMsIGl0IGhhcyBjcmVhdGVkIGEgbG9ja2ZpbGUgd2hlcmUgaXQgZGlkbid0IGNyZWF0ZQotICBv bmUgYmVmb3JlLgotKi8KLSAgICB4bG9jYWwgPSAqbGNsOwkJCS8qIElzIHRoZSBkZXZpY2UgbXkg bG9naW4gdGVybWluYWw/ICovCi0gICAgZGVidWcoRjExMSwidHRvcGVuIHhsb2NhbCIsIkEiLHhs b2NhbCk7Ci0gICAgZm5hbSA9IHR0bmFtZTsKLSAgICBpZiAoc3RyY21wKHR0bmFtZSxDVFROQU0p ICYmIG5ldGNvbm4gPT0gMCkgewotCWlmICh6Zm5xZnAodHRuYW1lLERFVk5BTUxFTisxLGZ1bGxu YW1lKSkgewotCSAgICBpZiAoKGludClzdHJsZW4oZnVsbG5hbWUpID4gMCkKLQkgICAgICBmbmFt ID0gZnVsbG5hbWU7Ci0JfQotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gZm5hbSIsZm5h bSwwKTsKLSAgICBpZiAoeGxvY2FsIDwgMCkgewotCXhsb2NhbCA9IChzdHJjbXAoZm5hbSxDVFRO QU0pICE9IDApOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4geGxvY2FsIiwiQiIseGxv Y2FsKTsKLQotICAgIGxrZiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGxv Y2sgeWV0ICovCi0gICAgaWYgKHhsb2NhbCA+IDApIHsJCQkvKiBJZiBub3QuLi4gKi8KLQlpbnQg eHg7IGludCB4cGlkOwotCXh4ID0gdHRsb2NrKGZuYW0pOwkJLyogVHJ5IHRvIGxvY2sgaXQuICov Ci0JZGVidWcoRjEwMSwidHRvcGVuIHR0bG9jayIsIiIseHgpOwotICAgICAgICBpZiAoeHggPCAw KSB7CQkJLyogQ2FuJ3QgbG9jayBpdC4gKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInR0b3Bl biB0dGxvY2sgZmFpbHMiLGZuYW0seHgpOwotCSAgICBpZiAoeHggPT0gLTIpIHsJCS8qIElmIGxv Y2tmaWxlIHNheXMgZGV2aWNlIGluIHVzZSwgKi8KLSNpZm5kZWYgTk9VVUNQCi0JCWRlYnVnKEYx MTEsInR0b3BlbiByZWFkaW5nIGxvY2tmaWxlIHBpZCIsZmxmbmFtLHh4KTsKLQkJeHBpZCA9IHR0 cnBpZChmbGZuYW0pOwkvKiBUcnkgdG8gcmVhZCBwaWQgZnJvbSBsb2NrZmlsZSAqLwotCQlpZiAo eHBpZCA+IC0xKSB7CS8qIElmIHdlIGdvdCBhIHBpZCAqLwotICAgICAgICAgICAgICAgICAgICBp ZiAoIXF1aWV0KQotCQkgICAgICBwcmludGYoIkxvY2tlZCBieSBwcm9jZXNzICVkXG4iLHhwaWQp OyAvKiB0ZWxsIHRoZW0uICovCi0JCSAgICBja3N0cm5jcHkobG9ja3BpZCxja2l0b2EoeHBpZCks MTYpOwotCQkgICAgZGVidWcoRjExMCwidHRvcGVuIGxvY2twaWQiLGxvY2twaWQsMCk7Ci0jaWZu ZGVmIE5PUFVTSAotCQl9IGVsc2UgaWYgKGZsZm5hbVswXSAmJiAhbm9wdXNoKSB7Ci0JCSAgICBl eHRlcm4gY2hhciAqRElSQ01EOwotCQkgICAgY2hhciAqcCA9IE5VTEw7Ci0JCSAgICBpbnQgeDsK LQkJICAgIHggPSAoaW50KXN0cmxlbihmbGZuYW0pICsgKGludClzdHJsZW4oRElSQ01EKSArIDI7 Ci0JCSAgICBwID0gbWFsbG9jKHgpOwkvKiBQcmludCBhIGRpcmVjdG9yeSBsaXN0aW5nLiAqLwot LyoKLSAgTm90ZTogcHJpdl9vbigpIHdvbid0IGhlbHAgaGVyZSwgYmVjYXVzZSB3ZSBkbyBub3Qg cGFzcyBwcml2cyBhbG9uZyB0bwotICB0byBpbmZlcmlvciBwcm9jZXNzZXMsIGluIHRoaXMgY2Fz ZSBscy4gIFNvIGlmIHRoZSByZWFsIHVzZXIgZG9lcyBub3QgaGF2ZQotICBkaXJlY3RvcnktbGlz dGluZyBhY2Nlc3MgdG8gdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSwgdGhpcyB3aWxsIHJlc3VsdCBp bgotICBzb21ldGhpbmcgbGlrZSAibm90IGZvdW5kIi4gIFRoYXQncyB3aHkgd2UgdHJ5IHRoaXMg b25seSBhcyBhIGxhc3QgcmVzb3J0LgotKi8KLQkJICAgIGlmIChwKSB7CQkvKiBJZiB3ZSBnb3Qg dGhlIHNwYWNlLi4uICovCi0JCQlja21ha21zZyhwLHgsRElSQ01ELCIgIixmbGZuYW0sTlVMTCk7 Ci0JCQl6c3lzY21kKHApOwkvKiBHZXQgbGlzdGluZy4gKi8KLQkJCWlmIChwKSB7CS8qIGZyZWUg dGhlIHNwYWNlICovCi0JCQkgICAgZnJlZShwKTsKLQkJCSAgICBwID0gTlVMTDsKLQkJCX0KLQkJ ICAgIH0KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQkJfQotI2VuZGlmIC8qIE5PVVVDUCAqLwotCQly ZXR1cm4oLTUpOwkJLyogQ29kZSBmb3IgZGV2aWNlIGluIHVzZSAqLwotCSAgICB9IGVsc2UgcmV0 dXJuKC0zKTsJCS8qIEFjY2VzcyBkZW5pZWQgKi8KLSAgICAgICAgfSBlbHNlIGxrZiA9IDE7Ci0g ICAgfQotICAgIC8qIEhhdmUgbG9jayAtLSBub3cgaXQncyBzYWZlIHRvIG9wZW4gdGhlIGRldmlj ZSAqLwotCi0gICAgZGVidWcoRjEwMSwidHRvcGVuIGxrZiIsIiIsbGtmKTsKLSAgICBkZWJ1ZyhG MTAxLCJ0dG9wZW4gdGltbyIsIiIsdGltbyk7Ci0KLSAgICB0dG90bW8gPSAwOwkJCQkvKiBGbGFn IG5vIHRpbWVvdXQgKi8KLSAgICBpZiAodGltbyA+IDApIHsKLQlpbnQgeHg7Ci0Jc2F2YWwgPSBz aWduYWwoU0lHQUxSTSx0aW1lcmgpOwkvKiBUaW1lZCwgc2V0IHVwIHRpbWVyLiAqLwotCXh4ID0g YWxhcm0odGltbyk7CQkvKiBUaW1lZCBvcGVuKCkgKi8KLQlkZWJ1ZyhGMTAxLCJ0dG9wZW4gYWxh cm0iLCIiLHh4KTsKLQlpZiAoCi0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0JICAgIHNpZ3NldGptcChz amJ1ZiwxKQotI2Vsc2UKLQkgICAgc2V0am1wKHNqYnVmKQotI2VuZGlmIC8qIENLX1BPU0lYX1NJ RyAqLwotCSAgICApIHsKLQkgICAgdHRvdG1vID0gMTsJCQkvKiBGbGFnIHRpbWVvdXQuICovCi0J fSBlbHNlIHsKLQkgICAgdHR5ZmQgPSBkb19vcGVuKGZuYW0pOwotCX0KLQl0dGltb2ZmKCk7Ci0J ZGVidWcoRjExMSwidHRvcGVuIHRpbWVkIHR0eWZkIixmbmFtLHR0eWZkKTsKLSAgICB9IGVsc2Ug ewotCWVycm5vID0gMDsKLQl0dHlmZCA9IGRvX29wZW4oZm5hbSk7Ci0JZGVidWcoRjExMSwidHRv cGVuIHVudGltZWQgdHR5ZmQiLGZuYW0sdHR5ZmQpOwotICAgIH0KLSAgICBpZiAodHR5ZmQgPCAw KSB7CQkJLyogSWYgY291bGRuJ3Qgb3BlbiwgZmFpbC4gKi8KLQlkZWJ1ZyhGMTExLCJ0dG9wZW4g ZXJybm8iLGZuYW0sZXJybm8pOwotCWRlYnVnKEYxMTEsInR0b3BlbiB4bG9jYWwiLCJDIix4bG9j YWwpOwotCWlmICh4bG9jYWwgPT0gMCkgewotCSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gc3Vic3Rp dHV0aW5nIDAiLCIiLDApOwotCSAgICB0dHlmZCA9IDA7Ci0JfSBlbHNlIHsKLQkgICAgaWYgKGVy cm5vID4gMCAmJiAhcXVpZXQpIHsKLQkgICAgICAgIGRlYnVnKEYxMTEsInR0b3BlbiBwZXJyb3Ii LGZuYW0sZXJybm8pOwotCQlwZXJyb3IoZm5hbSk7CQkvKiBQcmludCBtZXNzYWdlICovCi0JICAg IH0KLQkgICAgaWYgKHR0dW5sY2soKSkgICAgICAgICAgICAgICAgICAvKiBSZWxlYXNlIHRoZSBs b2NrIGZpbGUgKi8KLQkgICAgICBmcHJpbnRmKHN0ZGVyciwiV2FybmluZywgcHJvYmxlbSByZWxl YXNpbmcgbG9ja1xyXG4iKTsKLQl9Ci0gICAgfQotCi0gICAgaWYgKHR0eWZkIDwgMCkgewkJCS8q IHR0eWZkIGlzIHN0aWxsIDwgMD8gKi8KLSNpZmRlZiBBVFQ3MzAwCi0JaWYgKGF0dG1vZGVtICYg RE9HRVRZKQkJLyogd2FzIGdldHR5KDFtKSBydW5uaW5nIGJlZm9yZSB1cz8gKi8KLQkgIG9uZ2V0 dHkodHRubXN2KTsJCS8qIHllcywgcmVzdGFydCBvbiB0dHkgbGluZSAqLwotCWF0dG1vZGVtICY9 IH5ET0dFVFk7CQkvKiBubyBwaG9uZSBpbiB1c2UsIGdldHR5IHJlc3RvcmVkICovCi0jZWxzZQot I2lmZGVmIEFDVUNOVFJMCi0gICAgICAgIC8qIFNob3VsZCBwdXQgY2FsbCB0byBwcml2X29uKCkg aGVyZSwgYnV0IHRoYXQgd291bGQgYmUgcmlza3khICovCi0JYWN1Y250cmwoImVuYWJsZSIsZm5h bSk7CS8qIGFjdWNudHJsKCkgcHJvZ3JhbS4gKi8KLQkvKiBhbmQgcHJpdl9vZmYoKSBoZXJlLi4u ICovCi0jZW5kaWYgLyogQUNVTlRSTCAqLwotI2VuZGlmIC8qIEFUVDczMDAgKi8KLQotCXNpZ25h bChTSUdJTlQsb2NjdCk7CQkvKiBQdXQgb2xkIEN0cmwtQyB0cmFwIGJhY2suICovCi0JaWYgKGVy cm5vID09IEVBQ0NFUykgewkJLyogRGV2aWNlIGlzIHByb3RlY3RlZCBhZ2FpbnN0IHVzZXIgKi8K LQkgICAgZGVidWcoRjExMCwidHRvcGVuIEVBQ0NFU1MiLGZuYW0sMCk7IC8qIFJldHVybiAtNCAq LwotCSAgICByZXR1cm4oLTQpOwotCX0gZWxzZSByZXR1cm4odHRvdG1vID8gLTIgOiAtMSk7IC8q IE90aGVyd2lzZSAtMiBpZiB0aW1lb3V0LCBvciAtMSAqLwotICAgIH0KLQotLyogTWFrZSBzdXJl IGl0J3MgYSByZWFsIHR0eS4gKi8KLQotI2lmZGVmIFBsYW45Ci0gICAgLyogdGFrZSB0aGlzIG9w cG9ydHVuaXR5IHRvIG9wZW4gdGhlIGNvbnRyb2wgY2hhbm5lbCAqLwotICAgIGlmIChwOW9wZW50 dHljdGwoZm5hbSkgPCAwKSAgICAgICAKLSNlbHNlCi0gICAgICBpZiAoIXR0ZmRmbGcgJiYgIWlz YXR0eSh0dHlmZCkgJiYgc3RyY21wKGZuYW0sIi9kZXYvbnVsbCIpKQotI2VuZGlmIC8qIFBsYW45 ICovCi0JewotCSAgICBmcHJpbnRmKHN0ZGVyciwiJXMgaXMgbm90IGEgdGVybWluYWwgZGV2aWNl XG4iLGZuYW0pOwotCSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gbm90IGEgdHR5IixmbmFtLGVycm5v KTsKLQkgICAgaWYgKHR0dW5sY2soKSkJCS8qIFJlbGVhc2UgdGhlIGxvY2sgZmlsZSAqLwotCSAg ICAgIGZwcmludGYoc3RkZXJyLCJXYXJuaW5nLCBwcm9ibGVtIHJlbGVhc2luZyBsb2NrXHJcbiIp OwotCSAgICBjbG9zZSh0dHlmZCk7Ci0JICAgIHR0eWZkID0gLTE7Ci0JICAgIHdhc2Nsb3NlZCA9 IDE7Ci0JICAgIHNpZ25hbChTSUdJTlQsb2NjdCk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotCi0j aWZkZWYgYWVnaXMKLSAgICAvKgotICAgICAgQXBvbGxvIEMgcnVudGltZSBjbGFpbXMgdGhhdCBj b25zb2xlIHBhZHMgYXJlIHR0eSBkZXZpY2VzLCB3aGljaAotICAgICAgaXMgcmVhc29uYWJsZSwg YnV0IHRoZXkgYXJlbid0IGFueSBnb29kIGZvciBwYWNrZXQgdHJhbnNmZXIuCi0gICAgKi8KLSAg ICBpb3NfJGlucV90eXBlX3VpZCgoc2hvcnQpdHR5ZmQsIHR0eXVpZCwgc3QpOwotICAgIGlmIChz dC5hbGwgIT0gc3RhdHVzXyRvaykgewotCWZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBnZXR0aW5n IHR0eSBvYmplY3QgdHlwZTogIik7Ci0JZXJyb3JfJHByaW50KHN0KTsKLSAgICB9IGVsc2UgaWYg KHR0eXVpZCAhPSBzaW9fJHVpZCkgewkvKiBSZWplY3Qgbm9uLVNJTyBsaW5lcyAqLwotCWNsb3Nl KHR0eWZkKTsgdHR5ZmQgPSAtMTsKLQl3YXNjbG9zZWQgPSAxOwotCWVycm5vID0gRU5PVFRZOyBw ZXJyb3IoZm5hbSk7Ci0Jc2lnbmFsKFNJR0lOVCxvY2N0KTsKLQlyZXR1cm4oLTEpOwotICAgIH0K LSNlbmRpZiAvKiBhZWdpcyAqLwotCi0gICAgc2lnaW50X2lnbiA9IChvY2N0ID09IFNJR19JR04p ID8gMSA6IDA7Ci0KLSAgICBja3N0cm5jcHkodHRubXN2LHR0bmFtZSxERVZOQU1MRU4pOwkvKiBL ZWVwIGNvcHkgb2YgbmFtZSBsb2NhbGx5LiAqLwotCi0vKiBDYWxsZXIgd2FudHMgdXMgdG8gZmln dXJlIG91dCBpZiBsaW5lIGlzIGNvbnRyb2xsaW5nIHR0eSAqLwotCi0gICAgaWYgKCpsY2wgPCAw KSB7Ci0JY2hhciAqIHM7Ci0gICAgICAgIGlmIChzdHJjbXAoZm5hbSxDVFROQU0pID09IDApIHsg LyogIi9kZXYvdHR5IiBhbHdheXMgcmVtb3RlICovCi0gICAgICAgICAgICB4bG9jYWwgPSAwOwot CSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gZm5hbT1DVFROQU0iLGZuYW0seGxvY2FsKTsKLSAgICAg ICAgfSBlbHNlIGlmIChzdHJjbXAoZm5hbSxjdHRuYW0pID09IDApIHsKLSAgICAgICAgICAgIHhs b2NhbCA9IDA7Ci0JICAgIGRlYnVnKEYxMTEsInR0b3BlbiBmbmFtPWN0dG5hbSIsZm5hbSx4bG9j YWwpOwotCX0gZWxzZSBpZiAoY3R0bmFtWzBdKSB7Ci0jaWZkZWYgQkVCT1hfRFI3Ci0gICAgICAg ICAgICBzID0gdHRubXN2OwkJCS8qIHR0eW5hbWUoKSBpcyBicm9rZW4gKi8KLSNlbHNlCi0gICAg ICAgICAgICBzID0gdHR5bmFtZSh0dHlmZCk7ICAgICAgICAgLyogR2V0IHJlYWwgbmFtZSBvZiB0 dG5hbWUuICovCi0jZW5kaWYgLyogQkVCT1hfRFI3ICovCi0JICAgIGlmICghcykgcyA9ICIiOwot CSAgICBpZiAoKnMpCi0JICAgICAgeGxvY2FsID0gKChzdHJuY21wKHMsY3R0bmFtLERFVk5BTUxF TikgPT0gMCkgPyAwIDogMSk7Ci0JICAgIGVsc2UKLQkgICAgICB4bG9jYWwgPSAxOwotICAgICAg ICAgICAgZGVidWcoRjExMSwidHRvcGVuIHR0eW5hbWUodHR5ZmQpIHhsb2NhbCIscyx4bG9jYWwp OwotICAgICAgICB9Ci0gICAgfQotCi0jaWZuZGVmIE5PRkRaRVJPCi0vKiBOb3RlLCB0aGUgZm9s bG93aW5nIGNvZGUgd2FzIGFkZGVkIHNvIHRoYXQgVW5peCAiaWRsZS1saW5lIiBzbm9vcGVycyAq LwotLyogd291bGQgbm90IHRoaW5rIEtlcm1pdCB3YXMgaWRsZSB3aGVuIGl0IHdhcyB0cmFuc2Zl cnJpbmcgZmlsZXMsIGFuZCAqLwotLyogbWF5YmUgbG9nIHBlb3BsZSBvdXQuICovCi0gICAgaWYg KHhsb2NhbCA9PSAwKSB7CQkJLyogUmVtb3RlIG1vZGUgKi8KLQlpZiAoZmRmbGFnID09IDApIHsJ CS8qIFN0YW5kYXJkIGkvbyBpcyBub3QgcmVkaXJlY3RlZCAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0 dG9wZW4gc2V0dGluZyB0dHlmZCA9IDAiLCIiLDApOwotI2lmZGVmIExZTlhPUwotCSAgICAvKiBP biBMeW54IE9TLCBmZCAwIGlzIG9wZW4gZm9yIHJlYWQgb25seS4gKi8KLQkgICAgZHVwMih0dHlm ZCwwKTsKLSNlbmRpZiAvKiBMWU5YT1MgKi8KLQkgICAgY2xvc2UodHR5ZmQpOwkJLyogVXNlIGZp bGUgZGVzY3JpcHRvciAwICovCi0JICAgIHR0eWZkID0gMDsKLQl9IGVsc2UgewkJCS8qIFN0YW5k YXJkIGkvbyBpcyByZWRpcmVjdGVkICovCi0JICAgIGRlYnVnKEYxMDEsInR0b3BlbiBzdGRpbyBy ZWRpcmVjdGVkIiwiIix0dHlmZCk7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBOT0ZEWkVSTyAqLwot I2VuZGlmIC8qIE9QRU5GSVJTVCAqLwotCi0vKiBHb3QgdGhlIGxpbmUsIG5vdyBzZXQgdGhlIGRl c2lyZWQgdmFsdWUgZm9yIGxvY2FsLiAqLwotCi0gICAgaWYgKCpsY2wgIT0gMCkgKmxjbCA9IHhs b2NhbDsKLQotLyogU29tZSBzcGVjaWFsIHN0dWZmIGZvciB2Ny4uLiAqLwotCi0jaWZkZWYgIFY3 Ci0jaWZuZGVmIE1JTklYCi0gICAgaWYgKGttZW1bVFRZXSA8IDApIHsJCS8qICBJZiBvcGVuLCB0 aGVuIHNraXAgdGhpcy4gICovCi0JcWFkZHJbVFRZXSA9IGluaXRyYXdxKHR0eWZkKTsgICAvKiBJ bml0IHRoZSBxdWV1ZS4gKi8KLQlpZiAoKGttZW1bVFRZXSA9IG9wZW4oIi9kZXYva21lbSIsIDAp KSA8IDApIHsKLQkgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCByZWFkIC9kZXYva21lbSBpbiB0 dG9wZW4uXG4iKTsKLQkgICAgcGVycm9yKCIvZGV2L2ttZW0iKTsKLQkgICAgZXhpdCgxKTsKLQl9 Ci0gICAgfQotI2VuZGlmIC8qICFNSU5JWCAqLwotI2VuZGlmIC8qIFY3ICovCi0KLS8qIE5vIGZh aWx1cmUgcmV0dXJucyBhZnRlciB0aGlzIHBvaW50ICovCi0KLSNpZmRlZiB1bHRyaXgKLSAgICBp b2N0bCh0dHlmZCwgVElPQ01PREVNLCAmdGVtcCk7Ci0jaWZkZWYgVElPQ1NJTlVTRQotICAgIGlm ICh4bG9jYWwgJiYgaW9jdGwodHR5ZmQsIFRJT0NTSU5VU0UsIE5VTEwpIDwgMCkgewotCWlmICgh cXVpZXQpCi0JICBwZXJyb3IoZm5hbSk7Ci0gICAgfQotI2VuZGlmIC8qIFRJT0NTSU5VU0UgKi8K LSNlbmRpZiAvKiB1bHRyaXggKi8KLQotLyogR2V0IHR0eSBkZXZpY2Ugc2V0dGluZ3MgICovCi0K LSNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCAqLwotICAgIHRjZ2V0YXR0cih0dHlmZCwm dHRvbGQpOwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0Y2dldGF0dHIgdHRvbGQuY19sZmxhZyIs IiIsdHRvbGQuY19sZmxhZyk7Ci0gICAgdGNnZXRhdHRyKHR0eWZkLCZ0dHJhdyk7Ci0gICAgZGVi dWcoRjEwMSwidHRvcGVuIHRjZ2V0YXR0ciB0dHJhdy5jX2xmbGFnIiwiIix0dHJhdy5jX2xmbGFn KTsKLSAgICB0Y2dldGF0dHIodHR5ZmQsJnR0dHZ0KTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4g dGNnZXRhdHRyIHR0dHZ0LmNfbGZsYWciLCIiLHR0dHZ0LmNfbGZsYWcpOwotI2Vsc2UJCQkJCS8q IEJTRCwgVjcsIGFuZCBhbGwgb3RoZXJzICovCi0jaWZkZWYgQVRUU1YJCQkJLyogQVQmVCBVTklY ICovCi0gICAgaW9jdGwodHR5ZmQsVENHRVRBLCZ0dG9sZCk7Ci0gICAgZGVidWcoRjEwMSwidHRv cGVuIGlvY3RsIFRDR0VUQSB0dG9sZC5jX2xmbGFnIiwiIix0dG9sZC5jX2xmbGFnKTsKLSAgICBp b2N0bCh0dHlmZCxUQ0dFVEEsJnR0cmF3KTsKLSAgICBpb2N0bCh0dHlmZCxUQ0dFVEEsJnR0dHZ0 KTsKLSNlbHNlCi0jaWZkZWYgQkVMTFYxMAotICAgIGlvY3RsKHR0eWZkLFRJT0NHRVRQLCZ0dG9s ZCk7Ci0gICAgZGVidWcoRjEwMSwidHRvcGVuIEJFTExWMTAgdHRvbGQuc2dfZmxhZ3MiLCIiLHR0 b2xkLnNnX2ZsYWdzKTsKLSAgICBpb2N0bCh0dHlmZCxUSU9DR0RFViwmdGRvbGQpOwotICAgIGRl YnVnKEYxMDEsInR0b3BlbiBCRUxMVjEwIHRkb2xkLmZsYWdzIiwiIix0ZG9sZC5mbGFncyk7Ci0j ZWxzZQotICAgIGd0dHkodHR5ZmQsJnR0b2xkKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gZ3R0 eSB0dG9sZC5zZ19mbGFncyIsIiIsdHRvbGQuc2dfZmxhZ3MpOwotI2VuZGlmIC8qIEJFTExWMTAg Ki8KLQotI2lmZGVmIHNvbnlfbmV3cwkJCS8qIFNvbnkgTkVXUyAqLwotICAgIGlmIChpb2N0bCh0 dHlmZCxUSU9DS0dFVCwma21fZXh0KSA8IDApIHsgLyogR2V0IGNvbnNvbGUgS2FuamkgbW9kZSAq LwotCXBlcnJvcigidHRvcGVuIGVycm9yIGdldHRpbmcgS2FuamkgbW9kZSIpOwotCWRlYnVnKEYx MDEsInR0b3BlbiBlcnJvciBnZXR0aW5nIEthbmppIG1vZGUiLCIiLDApOwotCWttX2V4dCA9IC0x OwkJCS8qIE1ha2Ugc3VyZSB0aGlzIHN0YXlzIHVuZGVmaW5lZC4gKi8KLSAgICB9Ci0jZW5kaWYg Lyogc29ueV9uZXdzICovCi0KLSNpZmRlZiBUSU9DR0VUQwotICAgIGRlYnVnKEYxMDAsInR0b3Bl biBUSU9DR0VUQyIsIiIsMCk7Ci0gICAgdGNoYXJmID0gMDsJCQkJLyogSW4gcmVtb3RlIG1vZGUs IGFsc28gZ2V0ICovCi0gICAgaWYgKHhsb2NhbCA9PSAwKSB7CQkJLyogc3BlY2lhbCBjaGFyYWN0 ZXJzICovCi0JaWYgKGlvY3RsKHR0eWZkLFRJT0NHRVRDLCZ0Y2hvbGQpIDwgMCkgewotCSAgICBk ZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0dFVEMgZmFpbGVkIiwiIiwwKTsKLQl9IGVsc2UgewotCSAg ICB0Y2hhcmYgPSAxOwkJCS8qIEl0IHdvcmtlZC4gKi8KLQkgICAgaW9jdGwodHR5ZmQsVElPQ0dF VEMsJnRjaG5vaSk7IC8qIEdldCBhbm90aGVyIGNvcHkgKi8KLQkgICAgZGVidWcoRjEwMCwidHRv cGVuIFRJT0NHRVRDIG9rIiwiIiwwKTsKLQl9Ci0gICAgfQotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAw LCJ0dG9wZW4gVElPQ0dFVEMgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8qIFRJT0NHRVRD ICovCi0KLSNpZmRlZiBUSU9DR0xUQwotICAgIGRlYnVnKEYxMDAsInR0b3BlbiBUSU9DR0xUQyIs IiIsMCk7Ci0gICAgbHRjaGFyZiA9IDA7CQkJLyogSW4gcmVtb3RlIG1vZGUsIGFsc28gZ2V0ICov Ci0gICAgaWYgKHhsb2NhbCA9PSAwKSB7CQkJLyogbG9jYWwgc3BlY2lhbCBjaGFyYWN0ZXJzICov Ci0JaWYgKGlvY3RsKHR0eWZkLFRJT0NHTFRDLCZsdGNob2xkKSA8IDApIHsKLQkgICAgZGVidWco RjEwMCwidHRvcGVuIFRJT0NHTFRDIGZhaWxlZCIsIiIsMCk7Ci0JfSBlbHNlIHsKLQkgICAgbHRj aGFyZiA9IDE7CQkvKiBJdCB3b3JrZWQuICovCi0JICAgIGlvY3RsKHR0eWZkLFRJT0NHTFRDLCZs dGNobm9pKTsgLyogR2V0IGFub3RoZXIgY29weSAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4g VElPQ0dMVEMgb2siLCIiLDApOwotCX0KLSAgICB9Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAsInR0 b3BlbiBUSU9DR0xUQyBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYgLyogVElPQ0dMVEMgKi8K LQotI2lmZGVmIFRJT0NMR0VUCi0gICAgZGVidWcoRjEwMCwidHRvcGVuIFRJT0NMR0VUIiwiIiww KTsKLSAgICBsbW9kZWYgPSAwOwotICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DTEdFVCwmbG1vZGUp IDwgMCkgewotCWRlYnVnKEYxMDAsInR0b3BlbiBUSU9DTEdFVCBmYWlsZWQiLCIiLDApOwotICAg IH0gZWxzZSB7Ci0JbG1vZGVmID0gMTsKLQlkZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0xHRVQgb2si LCIiLDApOwotICAgIH0KLSNlbmRpZiAvKiBUSU9DTEdFVCAqLwotCi0jaWZkZWYgQkVMTFYxMAot ICAgIGlvY3RsKHR0eWZkLFRJT0NHRVRQLCZ0dHJhdyk7Ci0gICAgaW9jdGwodHR5ZmQsVElPQ0dF VFAsJnR0dHZ0KTsKLSNlbHNlCi0gICAgZ3R0eSh0dHlmZCwmdHRyYXcpOyAgICAgICAgICAgICAg ICAgLyogQW5kIGEgY29weSBvZiBpdCBmb3IgcGFja2V0cyovCi0gICAgZ3R0eSh0dHlmZCwmdHR0 dnQpOyAgICAgICAgICAgICAgICAgLyogQW5kIG9uZSBmb3IgdmlydHVhbCB0dHkgc2VydmljZSAq LwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLQotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyog QlNENDRPUlBPU0lYICovCi0KLS8qIFNlY3Rpb24gZm9yIGNoYW5naW5nIGxpbmUgZGlzY2lwbGlu ZS4gIEl0J3MgcmVzdG9yZWQgaW4gdHRyZXMoKS4gKi8KLQotI2lmZGVmIEFJWFJTCi0jaWZuZGVm IEFJWDQxCi0gICAgeyB1bmlvbiB0eG5hbWUgbGRfbmFtZTsgaW50IGxkX2lkeCA9IDA7Ci0gICAg ICB0dGxkID0gMDsKLSAgICAgICAgZG8gewotICAJICBsZF9uYW1lLnR4X3doaWNoID0gbGRfaWR4 Kys7Ci0gIAkgIGlvY3RsKHR0eWZkLCBUWEdFVENELCAmbGRfbmFtZSk7Ci0JICBpZiAoIXN0cm5j bXAobGRfbmFtZS50eF9uYW1lLCAicnRzIiwgMykpCi0gIAkgICAgdHRsZCB8PSAxOwotICAgICAg ICB9IHdoaWxlICgqbGRfbmFtZS50eF9uYW1lKTsKLSAgICAgICAgZGVidWcoRjEwMSwiQUlYIGxp bmUgZGlzY2lwbGluZSIsIiIsdHRsZCk7Ci0gICAgICB9Ci0jZW5kaWYgLyogQUlYNDEgKi8KLSNl bmRpZiAvKiBBSVhSUyAqLwotCi0jaWZkZWYgQlNENDEKLS8qIEZvciA0LjFCU0Qgb25seSwgZm9y Y2UgIm9sZCIgdHR5IGRyaXZlciwgbmV3IG9uZSBib3RjaGVzIFRBTkRFTS4gKi8KLSAgICB7IGlu dCBrOwotICAgICAgaW9jdGwodHR5ZmQsIFRJT0NHRVRELCAmdHRsZCk7CS8qIEdldCBhbmQgc2F2 ZSBsaW5lIGRpc2NpcGxpbmUgKi8KLSAgICAgIGRlYnVnKEYxMDEsIjQuMWJzZCBsaW5lIGRpc2Np cGxpbmUiLCIiLHR0bGQpOwotICAgICAgayA9IE9UVFlESVNDOwkJCS8qIFN3aXRjaCB0byAib2xk IiBkaXNjaXBsaW5lICovCi0gICAgICBrID0gaW9jdGwodHR5ZmQsIFRJT0NTRVRELCAmayk7Ci0g ICAgICBkZWJ1ZyhGMTAxLCI0LjFic2QgdGlvY3NldGQiLCIiLGspOwotICAgIH0KLSNlbmRpZiAv KiBCU0Q0MSAqLwotCi0jaWZkZWYgYWVnaXMKLSAgICAvKiBUaGlzIHdhcyBwcmV2aW91c2x5IGRv bmUgYmVmb3JlIHRoZSBsYXN0IHR3byBUQ0dFVEEgb3IgZ3R0eSBhYm92ZSwKLSAgICAgKiBpbiBi b3RoIHRoZSBBVFRTViBhbmQgbm90LUFUVFNWIGNhc2UuICBJZiBpdCBpcyBub3Qgb2theSB0byBo YXZlIG9ubHkKLSAgICAgKiBvbmUgY29weSBpZiBpdCBoZXJlIGluc3RlYWQsIGdpdmUgdXMgYSBz aG91dCEKLSAgICAgKi8KLSAgICBzaW9fJGNvbnRyb2woKHNob3J0KXR0eWZkLCBzaW9fJHJhd19u bCwgZmFsc2UsIHN0KTsKLSAgICBpZiAoeGxvY2FsKSB7ICAgICAgIC8qIGlnbm9yZSBicmVha3Mg ZnJvbSBsb2NhbCBsaW5lICovCi0gICAgICAgIHNpb18kY29udHJvbCgoc2hvcnQpdHR5ZmQsIHNp b18kaW50X2VuYWJsZSwgZmFsc2UsIHN0KTsKLSAgICAgICAgc2lvXyRjb250cm9sKChzaG9ydCl0 dHlmZCwgc2lvXyRxdWl0X2VuYWJsZSwgZmFsc2UsIHN0KTsKLSAgICB9Ci0jZW5kaWYgLyogYWVn aXMgKi8KLQotI2lmZGVmIFZYVkUKLSAgICB0dHJhdy5jX2xpbmUgPSAwOyAgICAgICAgICAgICAg ICAgICAvKiBTVFRZIGxpbmUgMCBmb3IgVlgvVkUgKi8KLSAgICB0dHR2dC5jX2xpbmUgPSAwOyAg ICAgICAgICAgICAgICAgICAvKiBTVFRZIGxpbmUgMCBmb3IgVlgvVkUgKi8KLSAgICBpb2N0bCh0 dHlmZCxUQ1NFVEEsJnR0cmF3KTsKLSNlbmRpZiAvKiB2eHZlICovCi0KLS8qIElmIE9fTkRFTEFZ IHdhcyB1c2VkIGR1cmluZyBvcGVuKCksIHRoZW4gcmVtb3ZlIGl0IG5vdy4gKi8KLQotI2lmZGVm IE9fTkRFTEFZCi0gICAgZGVidWcoRjEwMCwidHRvcGVuIE9fTkRFTEFZIiwiIiwwKTsKLSAgICBp ZiAoeGxvY2FsID4gMCkgewotICAgICAgaWYgKGZjbnRsKHR0eWZkLCBGX0dFVEZMLCAwKSAmIE9f TkRFTEFZKSB7Ci0JZGVidWcoRjEwMCwidHRvcGVuIGZjbnRsIE9fTkRFTEFZIiwiIiwwKTsKLSNp Zm5kZWYgYWVnaXMKLQlpZiAoZmNudGwodHR5ZmQsRl9TRVRGTCwgZmNudGwodHR5ZmQsIEZfR0VU RkwsIDApICYgfk9fTkRFTEFZKSA8IDApIHsKLQkgICAgZGVidWcoRjEwMCwidHRvcGVuIGZjbnRs IGZhaWx1cmUgdG8gdW5zZXQgT19OREVMQVkiLCIiLDApOwotCSAgICBwZXJyb3IoIkNhbid0IHVu c2V0IE9fTkRFTEFZIik7Ci0JfQotI2VuZGlmIC8qIGFlZ2lzICovCi0JLyogU29tZSBzeXN0ZW1z LCBub3RhYmx5IFhlbml4IChkb24ndCBrbm93IGhvdyBjb21tb24gdGhpcyBpcyBpbgotCSAqIG90 aGVyIHN5c3RlbXMpLCBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IHRvIGdldCByaWQgb2YgdGhlIE9f TkRFTEFZCi0JICogYmVoYXZpb3VyIG9uIHJlYWQoKSB3aXRoIHJlc3BlY3QgdG8gY2FycmllciBw cmVzZW5jZSAoaS5lLiByZWFkKCkKLQkgKiByZXR1cm5pbmcgMCB3aGVuIGNhcnJpZXIgYWJzZW50 KSwgZXZlbiB0aG91Z2ggdGhlIGFib3ZlIGZjbnRsKCkKLQkgKiBpcyBlbm91Z2ggdG8gbWFrZSBy ZWFkKCkgd2FpdCBmb3IgaW5wdXQgd2hlbiBjYXJyaWVyIGlzIHByZXNlbnQuCi0JICogVGhpcyBt YWdpYywgaW4gdHVybiwgcmVxdWlyZXMgQ0xPQ0FMIGZvciB3b3JraW5nIHdoZW4gdGhlIGNhcnJp ZXIKLQkgKiBpcyBhYnNlbnQuIEJ1dCBpZiB4bG9jYWwgPT0gMCwgcHJlc3VtYWJseSB5b3UgYWxy ZWFkeSBoYXZlIENMT0NBTAotCSAqIG9yIHlvdSBoYXZlIGEgY2Fycmllciwgb3RoZXJ3aXNlIHlv dSB3b3VsZG4ndCBiZSBydW5uaW5nIHRoaXMuCi0JICovCi0JZGVidWcoRjEwMSwidHRvcGVuIHhs b2NhbCIsIiIseGxvY2FsKTsKLSNpZmRlZiBBVFRTVgotI2lmZGVmIEJTRDQ0T1JQT1NJWAotI2lm ZGVmIENPTU1FTlQJCQkJLyogMTIgQXVnIDE5OTcgKi8KLSNpZmRlZiBfX2JzZGlfXwotCWlmICh4 bG9jYWwpCi0JICB0dHJhdy5jX2NmbGFnIHw9IENMT0NBTDsKLSNlbHNlCi0jaWZkZWYgX19GcmVl QlNEX18KLQlpZiAoeGxvY2FsKQotCSAgdHRyYXcuY19jZmxhZyB8PSBDTE9DQUw7Ci0jZW5kaWYg LyogX19GcmVlQlNEX18gKi8KLSNlbmRpZiAvKiBfX2JzZGlfXyAqLwotI2Vsc2UgLyogTm90IENP TU1FTlQgKi8KLSNpZmRlZiBDTE9DQUwKLQlpZiAoeGxvY2FsKQkJCS8qIFVuc2V0IHRoaXMgaWYg aXQncyBkZWZpbmVkLiAqLwotCSAgdHRyYXcuY19jZmxhZyB8PSBDTE9DQUw7Ci0jZW5kaWYgLyog Q0xPQ0FMICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCWRlYnVnKEYxMDEsInR0b3BlbiBCU0Q0 NE9SUE9TSVggY2FsbGluZyB0Y3NldGF0dHIiLCIiLFRDU0FEUkFJTik7Ci0JaWYgKHRjc2V0YXR0 cih0dHlmZCwgVENTQURSQUlOLCAmdHRyYXcpIDwgMCkgewotCSAgICBkZWJ1ZyhGMTAwLCJ0dG9w ZW4gUE9TSVggdGNzZWF0dHIgZmFpbHMiLCIiLDApOwotCSAgICBwZXJyb3IoInRjc2V0YXR0ciIp OwotCX0KLSNlbHNlIC8qICFCU0Q0NE9SUE9TSVggKi8KLQlpZiAoeGxvY2FsKSB7Ci0JICAgIHR0 cmF3LmNfY2ZsYWcgfD0gQ0xPQ0FMOwotCSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gY2FsbGluZyBp b2N0bChUQ1NFVEEpIiwiIiwwKTsKLQkgICAgZXJybm8gPSAwOwotCSAgICBpZiAoaW9jdGwodHR5 ZmQsIFRDU0VUQSwgJnR0cmF3KSA8IDApIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0 dG9wZW4gaW9jdGwoVENTRVRBKSBmYWlscyIsIiIsZXJybm8pOwotICAgICAgICAgICAgICAgIHBl cnJvcigiaW9jdGwoVENTRVRBKSIpOwotICAgICAgICAgICAgfQotCX0KLSNlbmRpZiAvKiBCU0Q0 NE9SUE9TSVggKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2lmbmRlZiBOT0NPVEZNQyAvKiA9IE5P IENsb3NlKE9wZW4oKSkgVG8gRm9yY2UgTW9kZSBDaGFuZ2UgKi8KLS8qIFJlcG9ydGVkbHkgbGV0 cyB1dWdldHR5IGdyYWIgdGhlIGRldmljZSBpbiBTQ08gVU5JWCAzLjIgLyBYRU5JWCAyLjMgKi8K LQlkZWJ1ZyhGMTAwLCJ0dG9wZW4gZXhlY3V0aW5nIGNsb3NlL29wZW4iLCIiLDApOwotCWNsb3Nl KCBwcml2X29wbihmbmFtLCBPX1JEV1IpICk7IC8qIE1hZ2ljIHRvIGZvcmNlIGNoYW5nZS4gKi8K LSNlbmRpZiAvKiBOT0NPVEZNQyAqLwotICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBPX05ERUxB WSAqLwotCi0vKiBJbnN0cnVjdCB0aGUgc3lzdGVtIGhvdyB0byB0cmVhdCB0aGUgY2Fycmllciwg YW5kIHNldCBhIGZldyBvdGhlciB0dHkKLSAqIHBhcmFtZXRlcnMuCi0gKgotICogVGhpcyBhbHNv IHVuZG9lcyB0aGUgdGVtcG9yYXJ5IHNldHRpbmcgb2YgQ0xPQ0FMIHRoYXQgbWF5IGhhdmUgYmVl biBkb25lCi0gKiBmb3IgdGhlIGNsb3NlKG9wZW4oKSkgYWJvdmUgKGV4Y2VwdCBpbiBYZW5peCku ICBBbHNvIHRocm93IGluIH5FQ0hPLCB0bwotICogcHJldmVudCB0aGUgb3RoZXIgZW5kIG9mIHRo ZSBsaW5lIGZyb20gc2l0dGluZyB0aGVyZSB0YWxraW5nIHRvIGl0c2VsZiwKLSAqIHByb2R1Y2lu ZyBnYXJiYWdlIHdoZW4gdGhlIHVzZXIgcGVyZm9ybXMgYSBjb25uZWN0LgotICoKLSAqIFNDTyBY ZW5peCB1bmZvcnR1bmF0ZWx5IHNlZW1zIHRvIGlnbm9yZSB0aGUgYWN0dWFsIHN0YXRlIG9mIENM T0NBTC4KLSAqIE5vdyBpdCB0aGlua3MgQ0xPQ0FMIGlzIGFsd2F5cyBvbi4gSXQgc2VlbXMgdGhl IG9ubHkgcmVhbCBzb2x1dGlvbiBmb3IKLSAqIFhlbml4IGlzIHRvIHN3aXRjaCBiZXR3ZWVuIHRo ZSBsb3dlciBhbmQgdXBwZXIgY2FzZSBkZXZpY2UgbmFtZXMuCi0gKgotICogVGhpcyBzZWN0aW9u IG1heSBhdCBzb21lIGZ1dHVyZSB0aW1lIGV4cGFuZCBpbnRvIHNldHRpbmcgYSBjb21wbGV0ZQot ICogY29sbGVjdGlvbiBvZiB0dHkgcGFyYW1ldGVycywgb3IgY2FsbCBhIGZ1bmN0aW9uIHNoYXJl ZCB3aXRoIHR0cGt0KCkvCi0gKiB0dHZ0KCkgdGhhdCBkb2VzIHNvLiAgT24gdGhlIG90aGVyIGhh bmQsIHRoZSBpbml0aWFsIHBhcmFtZXRlcnMgYXJlIG5vdAotICogdGhhdCBpbXBvcnRhbnQsIHNp bmNlIHR0cGt0KCkgb3IgdHR2dCgpIHNob3VsZCBhbHdheXMgZml4IHRoYXQgYmVmb3JlCi0gKiBh bnkgY29tbXVuaWNhdGlvbiBpcyBkb25lLiAgV2VsbCwgd2UnbGwgc2VlLi4uCi0gKi8KLSAgICBp ZiAoeGxvY2FsKSB7Ci0gICAgCWN1cmNhcnIgPSAtMjsKLQlkZWJ1ZyhGMTAwLCJ0dG9wZW4gY2Fs bGluZyBjYXJyY3RsIiwiIiwwKTsKLQljYXJyY3RsKCZ0dHJhdywgdHRjYXJyID09IENBUl9PTik7 Ci0JZGVidWcoRjEwMCwidHRvcGVuIGNhcnJjdGwgb2siLCIiLDApOwotCi0jaWZkZWYgQ09IRVJF TlQKLSNkZWZpbmUgU1ZPUlBPU0lYCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2lmZGVmIFNW T1JQT1NJWAotCXR0cmF3LmNfbGZsYWcgJj0gfkVDSE87Ci0JdHRvbGQuY19sZmxhZyAmPSB+RUNI TzsKLSNpZmRlZiBCU0Q0NE9SUE9TSVgKLQl5ID0gdGNzZXRhdHRyKHR0eWZkLCBUQ1NBRFJBSU4s ICZ0dHJhdyk7Ci0JZGVidWcoRjEwMSwidHRvcGVuIHRjc2V0YXR0ciIsIiIseSk7Ci0jZWxzZQot CXkgPSBpb2N0bCh0dHlmZCwgVENTRVRBLCAmdHRyYXcpOwotCWRlYnVnKEYxMDAsInR0b3BlbiBp b2N0bCIsIiIseSk7Ci0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0KLSNlbHNlIC8qIEJTRCwg ZXRjICovCi0JdHRyYXcuc2dfZmxhZ3MgJj0gfkVDSE87Ci0JdHRvbGQuc2dfZmxhZ3MgJj0gfkVD SE87Ci0jaWZkZWYgQkVMTFYxMAotCXkgPSBpb2N0bCh0dHlmZCxUSU9DU0VUUCwmdHRyYXcpOwot CWRlYnVnKEYxMDAsInR0b3BlbiBpb2N0bCIsIiIseSk7Ci0jZWxzZQotCXkgPSBzdHR5KHR0eWZk LCZ0dHJhdyk7Ci0JZGVidWcoRjEwMCwidHRvcGVuIHN0dHkiLCIiLHkpOwotI2VuZGlmIC8qIEJF TExWMTAgKi8KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLQotI2lmZGVmIENPSEVSRU5UCi0jdW5k ZWYgU1ZPUlBPU0lYCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotCS8qIHR0Zmx1aSgpOyAqLyAg LyogIFRoaXMgZmFpbHMgZm9yIHNvbWUgcmVhc29uLiAgKi8KLSAgICB9Ci0KLSAgICAvKiBHZXQg Y3VycmVudCBzcGVlZCAqLwotCi0jaWZuZGVmIEJFQk9YCi0gICAgdHRzcGVlZCA9IHR0Z3NwZCgp OwotI2Vsc2UKLSAgICB0dHNwZWVkID0gMTkyMDA7Ci0jZW5kaWYgLyogIUJFQk9YICovCi0gICAg ZGVidWcoRjEwMSwidHRvcGVuIHR0c3BlZWQiLCIiLHR0c3BlZWQpOwotCi0gICAgLyogRG9uZSwg bWFrZSBlbnRyaWVzIGluIGRlYnVnIGxvZywgcmVzdG9yZSBDdHJsLUMgdHJhcCwgYW5kIHJldHVy bi4gKi8KLQotICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0dHlmZCIsIiIsdHR5ZmQpOwotICAgIGRl YnVnKEYxMDEsInR0b3BlbiAqbGNsIiwiIiwqbGNsKTsKLSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4g bG9jayBmaWxlIixmbGZuYW0sbGtmKTsKLSAgICBzaWduYWwoU0lHSU5ULG9jY3QpOwotICAgIHNp Z2ludF9pZ24gPSAob2NjdCA9PSBTSUdfSUdOKSA/IDEgOiAwOwotICAgIGdvdHNpZ3MgPSAwOwot ICAgIHJldHVybigwKTsKLX0KLQotCi0vKiAgRCBPIF8gTyBQIEUgTiAgLS0gIERvIHRoZSByaWdo dCBraW5kIG9mIG9wZW4oKSBjYWxsIGZvciB0aGUgdHR5LiAqLwotCi1pbnQKLWRvX29wZW4odHRu YW1lKSBjaGFyICp0dG5hbWU7IHsKLSAgICBpbnQgZmxhZ3M7Ci0KLSNpZmRlZiBRTlg2Ci0gICAg LyogT19OT05CTE9DSyBvbiAvZGV2L3R0eSBtYWtlcyBvcGVuKCkgZmFpbCAqLwotICAgIHJldHVy bihwcml2X29wbih0dG5hbWUsIE9fUkRXUiB8Ci0JCSAgICAoCi0JCSAgICAgKChpbnQpc3RyY21w KHR0bmFtZSwiL2Rldi90dHkiKSA9PSAwKSA/Ci0JCSAgICAgMCA6Ci0JCSAgICAgKHR0Y2FyciAh PSBDQVJfT04pID8gT19OT05CTE9DSyA6IDApCi0JCSAgICApCi0JICAgKTsgCi0jZWxzZSAgLyog IVFOWDYgKi8KLQotI2lmbmRlZglPX05ERUxBWQkJCS8qIE9fTkRFTEFZIG5vdCBkZWZpbmVkICov Ci0gICAgcmV0dXJuKHByaXZfb3BuKHR0bmFtZSwyKSk7Ci0jZWxzZQkJCQkJLyogT19OREVMQVkg ZGVmaW5lZCAqLwotCi0jaWZkZWYgQVRUNzMwMAotLyoKLSBPcGVuIGNvbW1zIGxpbmUgd2l0aG91 dCB3YWl0aW5nIGZvciBjYXJyaWVyIHNvIGluaXRpYWwgY2FsbCBkb2VzIG5vdCBoYW5nCi0gYmVj YXVzZSBzdGF0ZSBvZiAibW9kZW0iIGlzIGxpa2VseSB1bmtub3duIGF0IHRoZSBpbml0aWFsIGNh bGwgIC1qcmQuCi0gSWYgdGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBnZXR0eSBzdHVmZiB0byB3b3Jr LCBhbmQgdGhlIG9wZW4gd291bGQgbm90IHdvcmsKLSB3aXRob3V0IE9fTkRFTEFZIHdoZW4gZ2V0 dHkgaXMgc3RpbGwgb24sIHRoZW4gdGhpcyBzcGVjaWFsIGNhc2UgaXMgb2suCi0gT3RoZXJ3aXNl LCBnZXQgcmlkIG9mIGl0LiAtc2tlCi0qLwotICAgIHJldHVybihwcml2X29wbih0dG5hbWUsIE9f UkRXUiB8IE9fTkRFTEFZKSk7Ci0KLSNlbHNlCS8qICFBVFQ3MzAwICovCi0KLSAgICAvKiBOb3Jt YWwgY2FzZS4gVXNlIE9fTkRFTEFZIGFjY29yZGluZyB0byBTRVQgQ0FSUklFUi4gU2VlIHR0c2Nh cnIoKS4gKi8KLSAgICBmbGFncyA9IE9fUkRXUjsKLSAgICBkZWJ1ZyhGMTAxLCJkb19vcGVuIHhs b2NhbCIsIiIseGxvY2FsKTsKLSAgICBkZWJ1ZyhGMTExLCJkb19vcGVuIGZsYWdzIEEiLHR0bmFt ZSxmbGFncyk7Ci0gICAgaWYgKHhsb2NhbCAmJiAodHRjYXJyICE9IENBUl9PTikpCi0gICAgICBm bGFncyB8PSBPX05ERUxBWTsKLSAgICBkZWJ1ZyhGMTExLCJkb19vcGVuIGZsYWdzIEIiLHR0bmFt ZSxmbGFncyk7Ci0gICAgcmV0dXJuKHByaXZfb3BuKHR0bmFtZSwgZmxhZ3MpKTsKLSNlbmRpZiAv KiAhQVRUNzMwMCAqLwotI2VuZGlmIC8qIE9fTkRFTEFZICovCi0jZW5kaWYgLyogUU5YNiAqLwot fQotCi0vKiAgVCBUIEMgTCBPIFMgIC0tICBDbG9zZSB0aGUgVFRZLCByZWxlYXNpbmcgYW55IGxv Y2suICAqLwotCi1zdGF0aWMgaW50IHR0Y19zdGF0ZSA9IDA7CQkvKiB0dGNsb3NlKCkgc3RhdGUg Ki8KLXN0YXRpYyBjaGFyICogdHRjX25hbVtdID0geyAic2V0dXAiLCAiaGFuZ3VwIiwgInJlc2V0 IiwgImNsb3NlIiB9OwotCi1pbnQKLXR0Y2xvcyhmb28pIGludCBmb287IHsJCQkvKiBBcmcgcmVx J2QgZm9yIHNpZ25hbCgpIHByb3RvdHlwZSAqLwotICAgIGludCB4eCwgeCA9IDA7Ci0gICAgZXh0 ZXJuIGludCBleGl0aGFuZ3VwOwotCi0gICAgZGVidWcoRjEwMSwidHRjbG9zIHR0eWZkIiwiIix0 dHlmZCk7Ci0gICAgZGVidWcoRjEwMSwidHRjbG9zIG5ldGNvbm4iLCIiLG5ldGNvbm4pOwotICAg IGRlYnVnKEYxMDEsInR0Y2xvcyB4bG9jYWwiLCIiLHhsb2NhbCk7Ci0jaWZkZWYgTk9GRFpFUk8K LSAgICBkZWJ1ZyhGMTAwLCJ0dGNsb3MgTk9GRFpFUk8iLCIiLDApOwotI2VuZGlmIC8qIE5PRkRa RVJPICovCi0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgVFRMRUJVRgotICAgIGxlX2luaXQoKTsJ CQkJLyogTm8gbmVlZCBmb3IgYW55IG9mIHRoaXMgKi8KLSNlbmRpZiAvKiBUVExFQlVGICovCi0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgaWYgKHR0eWZkIDwgMCkJCQkvKiBXYXNuJ3Qgb3Bl bi4gKi8KLSAgICAgIHJldHVybigwKTsKLQotICAgIGlmICh0dGZkZmxnKQkJCS8qIElmIHdlIGlu aGVyaXRlZCB0dHlmZCBmcm9tICovCi0gICAgICByZXR1cm4oMCk7CQkJLyogYW5vdGhlciBwcm9j ZXNzLCBkb24ndCBjbG9zZSBpdC4gKi8KLQotICAgIHR2dGZsZyA9IDA7CQkJCS8qIChzb21lIGRh eSBnZXQgcmlkIG9mIHRoaXMuLi4pICovCi0gICAgZ290c2lncyA9IDA7Ci0KLSNpZmRlZiBJS1NE Ci0gICAgaWYgKGluc2VydmVyKSB7Ci0jaWZkZWYgVE5DT0RFCi0gICAgICAgICAgdG5fcHVzaCgp OyAgICAgICAgICAgICAgICAgICAgLyogUGxhY2UgYW55IHdhaXRpbmcgZGF0YSBpbnRvIGlucHV0 Ki8KLSAgICAgICAgICB0bl9zb3B0KERPLFRFTE9QVF9MT0dPVVQpOyAgICAvKiBTZW5kIExPR09V VCBvcHRpb24gYmVmb3JlIGNsb3NlICovCi0gICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8o VEVMT1BUX0xPR09VVCkgPSAxOwotICAgICAgICAgIHRuX3Jlc2V0KCk7ICAgICAgICAgICAgICAg ICAgIC8qIFRoZSBSZXNldCBUZWxuZXQgT3B0aW9uIHRhYmxlLiAgKi8KLSNlbmRpZiAvKiBUTkNP REUgKi8KLSNpZmRlZiBDS19TU0wKLQkgIGlmIChzc2xfYWN0aXZlX2ZsYWcpIHsKLQkgICAgICBp ZiAoc3NsX2RlYnVnX2ZsYWcpCi0JCUJJT19wcmludGYoYmlvX2VyciwiY2FsbGluZyBTU0xfc2h1 dGRvd24oc3NsKVxuIik7Ci0JICAgICAgU1NMX3NodXRkb3duKHNzbF9jb24pOwotCSAgICAgIFNT TF9mcmVlKHNzbF9jb24pOwotCSAgICAgIHNzbF9jb24gPSBOVUxMOwotCSAgICAgIHNzbF9hY3Rp dmVfZmxhZyA9IDA7Ci0JICB9Ci0JICBpZiAodGxzX2FjdGl2ZV9mbGFnKSB7Ci0JICAgICAgaWYg KHNzbF9kZWJ1Z19mbGFnKQotCQlCSU9fcHJpbnRmKGJpb19lcnIsImNhbGxpbmcgU1NMX3NodXRk b3duKHRscylcbiIpOwotCSAgICAgIFNTTF9zaHV0ZG93bih0bHNfY29uKTsKLQkgICAgICBTU0xf ZnJlZSh0bHNfY29uKTsKLQkgICAgICB0bHNfY29uID0gTlVMTDsKLQkgICAgICB0bHNfYWN0aXZl X2ZsYWcgPSAwOwotCSAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgIH0KLSNlbmRpZiAvKiBJ S1NEICovCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgewkJCS8qIFdlJ3ZlIGJlZW4g dXNpbmcgYSBwaXBlICovCi0JLyogdHRwaXBlID0gMDsgKi8KLQlpZiAodHRwaWQgPiAwKSB7Ci0J ICAgIGludCB3c3RhdDsKLQkgICAgaW50IHN0YXR1c3A7Ci0JICAgIGNsb3NlKGZkaW4pOwkJLyog Q2xvc2UgdGhlc2UuICovCi0JICAgIGNsb3NlKGZkb3V0KTsKLQkgICAgZmRpbiA9IGZkb3V0ID0g LTE7Ci0JICAgIGtpbGwodHRwaWQsMSk7CQkvKiBLaWxsIGZvcmsgd2l0aCBTSUdIVVAgKi8KLQkg ICAgd2hpbGUgKDEpIHsKLQkJd3N0YXQgPSB3YWl0KCZzdGF0dXNwKTsKLQkJaWYgKHdzdGF0ID09 IHR0cGlkIHx8IHdzdGF0ID09IC0xKQotCQkgIGJyZWFrOwotCQlwZXhpdHN0YXQgPSAoc3RhdHVz cCAmIDB4ZmYpID8gc3RhdHVzcCA6IHN0YXR1c3AgPj4gODsKLQkgICAgfQotCSAgICB0dHBpZCA9 IDA7Ci0JfQotCW5ldGNvbm4gPSAwOwotCXdhc2Nsb3NlZCA9IDE7Ci0JdHR5ZmQgPSAtMTsKLQly ZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAg IGlmICh0dHB0eSkgewotI2lmbmRlZiBOT0RPUFRZCi0gICAgICAgIGVuZF9wdHkoKTsKLSNlbmRp ZiAvKiBOT0RPUFRZICovCi0gICAgICAgIGNsb3NlKHR0eWZkKTsKLQluZXRjb25uID0gMDsKLQl3 YXNjbG9zZWQgPSAxOwotICAgICAgICB0dHB0eSA9IDA7Ci0gICAgICAgIHR0eWZkID0gLTE7Ci0g ICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogTkVUUFRZICovCi0KLSNpZmRlZglO RVRDT05OCi0gICAgaWYgKG5ldGNvbm4pIHsJCQkvKiBJZiBpdCdzIGEgbmV0d29yayBjb25uZWN0 aW9uLiAqLwotCWRlYnVnKEYxMDAsInR0Y2xvcyBjbG9zaW5nIG5ldCIsIiIsMCk7Ci0JbmV0Y2xv cygpOwkJCS8qIExldCB0aGUgbmV0d29yayBtb2R1bGUgY2xvc2UgaXQuICovCi0JbmV0Y29ubiA9 IDA7CQkJLyogTm8gbW9yZSBuZXR3b3JrIGNvbm5lY3Rpb24uICovCi0JZGVidWcoRjEwMSwidHRj bG9zIHR0eWZkIGFmdGVyIG5ldGNsb3MiLCIiLHR0eWZkKTsgLyogU2hvdWxkIGJlIC0xICovCi0J cmV0dXJuKDApOwotICAgIH0KLSNlbmRpZgkvKiBORVRDT05OICovCi0KLSAgICBpZiAoeGxvY2Fs KSB7CQkJLyogV2UncmUgY2xvc2luZyBhIFNFVCBMSU5FIGRldmljZSAqLwotI2lmZGVmIEZUMjEJ CQkJLyogRm9ydHVuZSAyLjEtc3BlY2lmaWMgaXRlbXMgLi4uICovCi0JaW9jdGwodHR5ZmQsVElP Q0hQQ0wsIE5VTEwpOwotI2VuZGlmIC8qIEZUMjEgKi8KLSNpZmRlZiB1bHRyaXgJCQkJLyogVWx0 cml4LXNwZWNpZmljIGl0ZW1zIC4uLiAqLwotI2lmZGVmIFRJT0NTSU5VU0UKLQkvKiBVbnNldCB0 aGUgSU5VU0UgZmxhZyB0aGF0IHdlIHNldCBpbiB0dG9wZW4oKSAqLwotCWlvY3RsKHR0eWZkLCBU SU9DU0lOVVNFLCBOVUxMKTsKLSNlbmRpZiAvKiBUSU9DU0lOVVNFICovCi0JaW9jdGwodHR5ZmQs IFRJT0NOTU9ERU0sICZ4KTsKLSNpZmRlZiBDT01NRU5UCi0JLyogV2hhdCB3YXMgdGhpcz8gKi8K LQlpb2N0bCh0dHlmZCwgVElPQ05DQVIsIE5VTEwpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNl bmRpZiAvKiB1bHRyaXggKi8KLSAgICB9Ci0KLSAgICAvKiBUaGlzIGlzIHRvIHByZXZlbnQgdXMg ZnJvbSBzdGlja2luZyBpbiB0dGhhbmcoKSBvciBjbG9zZSgpLiAqLwotCi0jaWZkZWYgT19OREVM QVkKLSNpZm5kZWYgYWVnaXMKLSAgICBpZiAodHR5ZmQgPiAwKSB7CQkJLyogQnV0IHNraXAgaXQg b24gc3RkaW4uICovCi0JZGVidWcoRjEwMCwidHRjbG9zIHNldHRpbmcgT19OREVMQVkiLCIiLDAp OwotCXggPSBmY250bCh0dHlmZCxGX1NFVEZMLGZjbnRsKHR0eWZkLEZfR0VURkwsIDApfE9fTkRF TEFZKTsKLSNpZmRlZiBERUJVRwotCWlmIChkZWJsb2cgJiYgeCA9PSAtMSkgewotCSAgICBwZXJy b3IoIldhcm5pbmcgLSBDYW4ndCBzZXQgT19OREVMQVkiKTsKLQkgICAgZGVidWcoRjEwMSwidHRj bG9zIGZjbnRsIGZhaWx1cmUgdG8gc2V0IE9fTkRFTEFZIiwiIix4KTsKLQl9Ci0jZW5kaWYgLyog REVCVUcgKi8KLSAgICB9Ci0jZW5kaWYgLyogYWVnaXMgKi8KLSNlbmRpZiAvKiBPX05ERUxBWSAq LwotCi0gICAgeCA9IDA7Ci0gICAgdHRjX3N0YXRlID0gMDsKLSAgICBpZiAoeGxvY2FsCi0jaWZk ZWYgTk9GRFpFUk8KLQl8fCB0dHlmZCA+IDAKLSNlbmRpZiAvKiBOT0ZEWkVSTyAqLwotCSkgewot CXNhdmFsID0gc2lnbmFsKFNJR0FMUk0seHRpbWVyaCk7IC8qIEVuYWJsZSB0aW1lciBpbnRlcnJ1 cHQuICovCi0JeHggPSBhbGFybSg4KTsJCQkvKiBBbGxvdyA4IHNlY29uZHMuICovCi0JZGVidWco RjEwMSwidHRjbG9zIGFsYXJtIiwiIix4eCk7Ci0JaWYgKAotI2lmZGVmIENLX1BPU0lYX1NJRwot CSAgICBzaWdzZXRqbXAoc2pidWYsMSkKLSNlbHNlCi0JICAgIHNldGptcChzamJ1ZikKLSNlbmRp ZiAvKiBDS19QT1NJWF9TSUcgKi8KLQkgICAgKSB7CQkJCS8qIFRpbWVyIHdlbnQgb2ZmPyAqLwot CSAgICB4ID0gLTE7Ci0jaWZkZWYgREVCVUcKLQkgICAgZGVidWcoRjExMSwidHRjbG9zIEFMQVJN IFRSQVAgZXJybm8iLGNraXRvYSh0dGNfc3RhdGUpLGVycm5vKTsKLQkgICAgcHJpbnRmKCJ0dGNs b3MoKSB0aW1lb3V0OiAlc1xuIiwgdHRjX25hbVt0dGNfc3RhdGVdKTsKLSNlbmRpZiAvKiBERUJV RyAqLwotCX0KLQkvKiBIYW5nIHVwIHRoZSBkZXZpY2UgKGRyb3AgRFRSKSAqLwotCi0JZXJybm8g PSAwOwotCWRlYnVnKEYxMTEsInR0Y2xvcyBBIixja2l0b2EoeCksdHRjX3N0YXRlKTsKLQlpZiAo dHRjX3N0YXRlIDwgMSkgewotCSAgICB0dGNfc3RhdGUgPSAxOwotCSAgICBkZWJ1ZyhGMTAxLCJ0 dGNsb3MgZXhpdGhhbmd1cCIsIiIsZXhpdGhhbmd1cCk7Ci0JICAgIGlmIChleGl0aGFuZ3VwKSB7 Ci0JCWFsYXJtKDgpOwkJLyogUmUtYXJtIHRoZSB0aW1lciAqLwotCQlkZWJ1ZyhGMTAxLCJ0dGNs b3MgY2FsbGluZyB0dGhhbmcoKSIsIiIseCk7Ci0JCXggPSB0dGhhbmcoKTsJCS8qIEhhbmcgdXAg Zmlyc3QsIHRoZW4uLi4gKi8KLQkJZGVidWcoRjEwMSwidHRjbG9zIHR0aGFuZygpIiwiIix4KTsK LQkgICAgfQotI2lmbmRlZiBDS19OT0hVUENMCi0vKgotICBPY3QgMjAwNiAtIExlYXZlIERUUiBv biBpZiBTRVQgRVhJVCBIQU5HVVAgT0ZGLgotICBTdWdnZXN0ZWQgYnkgU29ld29ubyBFZmZlbmRp LgotKi8KLSNpZmRlZiBIVVBDTAotCSAgICBlbHNlIHsKLQkJdHRvbGQuY19jZmxhZyAmPSB+SFVQ Q0w7IC8qIExldCdzIHNlZSBob3cgdGhpcyB0cmF2ZWxzICovCi0jaWZkZWYgQlNENDRPUlBPU0lY Ci0JCXRjc2V0YXR0cih0dHlmZCxUQ1NBTk9XLCZ0dG9sZCk7Ci0jZWxzZSAvKiAhQlNENDRPUlBP U0lYICovCi0jaWZkZWYgQVRUU1YKLQkJaW9jdGwodHR5ZmQsVENTRVRBVywmdHRvbGQpOwkJCi0j ZWxzZSAgLyogIUFUVFNWICovCi0JCXN0dHkodHR5ZmQsJnR0b2xkKTsKLSNlbmRpZgkvKiBBVFRT ViAqLwotI2VuZGlmCS8qIEJTRDQ0T1JQT1NJWCAqLwotCSAgICB9Ci0jZW5kaWYJLyogSFVQQ0wg Ki8KLSNlbmRpZgkvKiBDS19OT0hVUENMICovCi0JfQotCS8qIFB1dCBiYWNrIGRldmljZSBtb2Rl cyBhcyB3ZSBmb3VuZCB0aGVtICovCi0KLQllcnJubyA9IDA7Ci0JZGVidWcoRjExMSwidHRjbG9z IEIiLGNraXRvYSh4KSx0dGNfc3RhdGUpOwotCWlmICh0dGNfc3RhdGUgPCAyKSB7Ci0JICAgIHR0 Y19zdGF0ZSA9IDI7Ci0JICAgIC8qIERvbid0IHRyeSB0byBtZXNzIHdpdGggdHR5IG1vZGVzIGlm IHR0aGFuZyBmYWlsZWQoKSAqLwotCSAgICAvKiBzaW5jZSBpdCBwcm9iYWJseSB3b24ndCB3b3Jr LiAqLwotCSAgICBpZiAoeCA+IC0xKSB7Ci0JCWRlYnVnKEYxMDEsInR0Y2xvcyBjYWxsaW5nIHR0 cmVzKCkiLCIiLHgpOwotCQlzaWduYWwoU0lHQUxSTSx4dGltZXJoKTsgLyogUmUtZW5hYmxlIHRo ZSBhbGFybS4gKi8KLQkJYWxhcm0oOCk7CQkvKiBSZS1hcm0gdGhlIHRpbWVyICovCi0JCXggPSB0 dHJlcygpOwkJLyogUmVzZXQgZGV2aWNlIG1vZGVzLiAqLwotCQlkZWJ1ZyhGMTAxLCJ0dGNsb3Mg dHRyZXMoKSIsIiIseCk7Ci0JCWFsYXJtKDApOwotCSAgICB9Ci0JfQotCS8qIENsb3NlIHRoZSBk ZXZpY2UgKi8KLQotCWVycm5vID0gMDsKLQlkZWJ1ZyhGMTAxLCJ0dGNsb3MgQyIsIiIsdHRjX3N0 YXRlKTsKLQlpZiAodHRjX3N0YXRlIDwgMykgewotCSAgICB0dGNfc3RhdGUgPSAzOwotCSAgICBl cnJubyA9IDA7Ci0JICAgIGRlYnVnKEYxMDEsInR0Y2xvcyBjYWxsaW5nIGNsb3NlIiwiIix4KTsK LQkgICAgc2lnbmFsKFNJR0FMUk0seHRpbWVyaCk7CS8qIFJlLWVuYWJsZSBhbGFybS4gKi8KLQkg ICAgYWxhcm0oOCk7CQkJLyogUmUtYXJtIHRoZSB0aW1lciAqLwotCSAgICB4ID0gY2xvc2UodHR5 ZmQpOwkJLyogQ2xvc2UgdGhlIGRldmljZS4gKi8KLQkgICAgZGVidWcoRjEwMSwidHRjbG9zIGNs b3NlKCkiLCIiLHgpOwotCSAgICBpZiAoeCA+IC0xKQotCSAgICAgIHR0Y19zdGF0ZSA9IDM7Ci0J fQotCWRlYnVnKEYxMDEsInR0Y2xvcyBEIiwiIix0dGNfc3RhdGUpOwotCXR0aW1vZmYoKTsJCQkv KiBUdXJuIG9mZiB0aW1lci4gKi8KLQlpZiAoeCA8IDApIHsKLQkgICAgcHJpbnRmKCI/V0FSTklO RyAtIGNsb3NlIGZhaWxlZDogJXNcbiIsdHRubXN2KTsKLSNpZmRlZiBERUJVRwotCSAgICBpZiAo ZGVibG9nKSB7Ci0JCXByaW50ZigiZXJybm8gPSAlZFxuIiwgZXJybm8pOwotCQlkZWJ1ZyhGMTAx LCJ0dGNsb3MgZmFpbGVkIiwiIixlcnJubyk7Ci0JICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwot CX0KLQkvKiBVbmxvY2sgYWZ0ZXIgY2xvc2luZyBidXQgYmVmb3JlIGFueSBnZXR0eSBtdW1ibyBq dW1ibyAqLwotCi0JZGVidWcoRjEwMCwidHRjbG9zIGFib3V0IHRvIGNhbGwgdHR1bmxjayIsIiIs MCk7Ci0gICAgICAgIGlmICh0dHVubGNrKCkpICAgICAgICAgICAgICAgICAgLyogUmVsZWFzZSB1 dWNwLXN0eWxlIGxvY2sgKi8KLQkgIGZwcmludGYoc3RkZXJyLCJXYXJuaW5nLCBwcm9ibGVtIHJl bGVhc2luZyBsb2NrXHJcbiIpOwotICAgIH0KLQotLyogRm9yIGJpZGlyZWN0aW9uYWwgbGluZXMs IHJlc3RvcmUgZ2V0dHkgaWYgaXQgd2FzIHRoZXJlIGJlZm9yZS4gKi8KLQotI2lmZGVmIEFDVUNO VFJMCQkJCS8qIDQuM0JTRCBhY3VjbnRybCgpIG1ldGhvZC4gKi8KLSAgICBpZiAoeGxvY2FsKSB7 Ci0JZGVidWcoRjEwMCwidHRjbG9zIEFDVUNOVFJMIiwiIiwwKTsKLQlhY3VjbnRybCgiZW5hYmxl Iix0dG5tc3YpOwkvKiBFbmFibGUgZ2V0dHkgb24gdGhlIGRldmljZS4gKi8KLSAgICB9Ci0jZWxz ZQotI2lmZGVmIEFUVDczMDAJCQkJLyogQVRUIFVOSVggUEMgKDNCMSwgNzMwMCkgbWV0aG9kLiAq LwotICAgIGlmICh4bG9jYWwpIHsKLQlkZWJ1ZyhGMTAwLCJ0dGNsb3MgQVRUNzMwMCBvbmdldHR5 IiwiIiwwKTsKLQlpZiAoYXR0bW9kZW0gJiBET0dFVFkpCQkvKiBXYXMgZ2V0dHkoMW0pIHJ1bm5p bmcgYmVmb3JlIHVzPyAqLwotCSAgb25nZXR0eSh0dG5tc3YpOwkJLyogWWVzLCByZXN0YXJ0IGdl dHR5IG9uIHR0eSBsaW5lICovCi0JYXR0bW9kZW0gJj0gfkRPR0VUWTsJCS8qIE5vIHBob25lIGlu IHVzZSwgZ2V0dHkgcmVzdG9yZWQgKi8KLSAgICB9Ci0jZW5kaWYgLyogQVRUNzMwMCAqLwotI2Vu ZGlmIC8qIFN5c3RlbS1kZXBlbmRlbnQgZ2V0dHktcmVzdG9yaW5nIG1ldGhvZHMgKi8KLQotI2lm ZGVmIHNvbnlfbmV3cwotICAgIGttX2V4dCA9IC0xOwkJCS8qIEludmFsaWRhdGUgZGV2aWNlJ3Mg S2FuamktbW9kZSAqLwotI2VuZGlmIC8qIHNvbnlfbmV3cyAqLwotCi0gICAgdHR5ZmQgPSAtMTsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW52YWxpZGF0ZSB0aGUgZmlsZSBkZXNjcmlwdG9y LiAqLwotICAgIHdhc2Nsb3NlZCA9IDE7Ci0gICAgZGVidWcoRjEwMCwidHRjbG9zIGRvbmUiLCIi LDApOwotICAgIHJldHVybigwKTsKLX0KLQotLyogIFQgVCBIIEEgTiBHICAtLSAgSGFuZ3VwIHBo b25lIGxpbmUgb3IgbmV0d29yayBjb25uZWN0aW9uLiAgKi8KLS8qCi0gIFJldHVybnM6Ci0gIDAg aWYgaXQgZG9lcyBub3RoaW5nLgotICAxIGlmIGl0IGJlbGlldmVzIHRoYXQgaXQgaHVuZyB1cCBz dWNjZXNzZnVsbHkuCi0gLTEgaWYgaXQgYmVsaWV2ZXMgdGhhdCB0aGUgaGFuZ3VwIGF0dGVtcHQg ZmFpbGVkLgotKi8KLQotI2RlZmluZSBIVVBUSU1FIDUwMAkJCS8qIE1pbGxpc2Vjb25kcyBmb3Ig aGFuZ3VwICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBUaGUgZm9sbG93aW5nIGRpZG4ndCB3b3Jr IGJ1dCBUSU9DU0RUUiBkb2VzIHdvcmsgKi8KLSNpZmRlZiBVTklYV0FSRQotLyogRGVmaW5lIEhV UF9QT1NJWCB0byBmb3JjZSBub24tUE9TSVggYnVpbGRzIHRvIHVzZSB0aGUgUE9TSVggaGFuZ3Vw IG1ldGhvZCAqLwotI2lmbmRlZiBQT1NJWAkJCQkvKiBTdWNoIGFzIFVuaXh3YXJlIDEueCwgMi54 ICovCi0jaWZuZGVmIEhVUF9QT1NJWAotI2RlZmluZSBIVVBfUE9TSVgKLSNlbmRpZiAvKiBIVVBf UE9TSVggKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwotI2VuZGlmIC8qIFVOSVhXQVJFICovCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotCi0jaWZuZGVmIFVTRV9USU9DU0RUUgotI2lmZGVmIF9fTmV0QlNE X18KLS8qIEJlY2F1c2UgdGhlIFBPU0lYIG1ldGhvZCAoc2V0IG91dHB1dCBzcGVlZCB0byAwKSBk b2Vzbid0IHdvcmsgaW4gTmV0QlNEICovCi0jaWZkZWYgVElPQ1NEVFIKLSNpZmRlZiBUSU9DQ0RU UgotI2RlZmluZSBVU0VfVElPQ1NEVFIKLSNlbmRpZiAvKiBUSU9DQ0RUUiAqLwotI2VuZGlmIC8q IFRJT0NTRFRSICovCi0jZW5kaWYgLyogX19OZXRCU0RfXyAqLwotI2VuZGlmIC8qIFVTRV9USU9D U0RUUiAqLwotCi0jaWZuZGVmIEhVUF9DTE9TRV9QT1NJWAotI2lmZGVmIE9VOAotI2RlZmluZSBI VVBfQ0xPU0VfUE9TSVgKLSNlbHNlCi0jaWZkZWYgQ0tfU0NPVjUKLSNkZWZpbmUgSFVQX0NMT1NF X1BPU0lYCi0jZW5kaWYgLyogQ0tfU0NPVjUgKi8KLSNlbmRpZiAvKiBPVTggKi8KLSNlbmRpZiAv KiBIVVBfQ0xPU0VfUE9TSVggKi8KLQotI2lmZGVmIE5PX0hVUF9DTE9TRV9QT1NJWAotI2lmZGVm IEhVUF9DTE9TRV9QT1NJWAotI3VuZGVmIEhVUF9DTE9TRV9QT1NJWAotI2VuZGlmIC8qIEhVUF9D TE9TRV9QT1NJWCAqLwotI2VuZGlmIC8qIE5PX0hVUF9DTE9TRV9QT1NJWCAqLwotCi1pbnQKLXR0 aGFuZygpIHsKLSNpZmRlZiBOT0xPQ0FMCi0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSAgICBpbnQg eCA9IDA7CQkJCS8qIFNvbWV0aW1lcyB1c2VkIGFzIHJldHVybiBjb2RlLiAqLwotI2lmbmRlZiBQ T1NJWAotICAgIGludCB6OwkJCQkvKiB3b3JrZXIgKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwotCi0j aWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUgU1ZPUlBPU0lYCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8K LQotI2lmZGVmIFNWT1JQT1NJWAkJCS8qIEFUJlQsIFBPU0lYLCBIUFVYIGRlY2xhcmF0aW9ucy4g Ki8KLSAgICBpbnQgc3Bkc2F2OwkJCQkvKiBmb3Igc2F2aW5nIHNwZWVkICovCi0jaWZkZWYgSFVQ X1BPU0lYCi0gICAgaW50IHNwZHNhdmk7Ci0jZWxzZQotI2lmZGVmIEJTRDQ0T1JQT1NJWAotICAg IGludCBzcGRzYXZpOwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotI2VuZGlmIC8qIEhVUF9Q T1NJWCAqLwotI2lmZGVmIEhQVVgKLS8qCi0gIEVhcmx5IHZlcnNpb25zIG9mIEhQLVVYIG9taXR0 ZWQgdGhlIG1mbGFnIHR5cGVkZWYuICBJZiB5b3UgZ2V0IGNvbXBsYWludHMKLSAgYWJvdXQgaXQs IGp1c3QgY2hhbmdlIGl0IHRvIGxvbmcgKG9yIGJldHRlciBzdGlsbCwgdW5zaWduZWQgbG9uZyku Ci0qLwotICAgIG1mbGFnCi0gICAgICBkdHJfZG93biA9IDAwMDAwMDAwMDAwLAotICAgICAgbW9k ZW1fcnRuLAotICAgICAgbW9kZW1fc2F2OwotICAgIGNoYXIgbW9kZW1fc3RhdGVbNjRdOwotI2Vu ZGlmIC8qIEhQVVggKi8KLSAgICBpbnQgZmxhZ3M7CQkJCS8qIGZjbnRsIGZsYWdzICovCi0gICAg dW5zaWduZWQgc2hvcnQgdHRjX3NhdmU7Ci0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0KLSAgICBp ZiAodHR5ZmQgPCAwKSByZXR1cm4oMCk7ICAgICAgICAgICAvKiBEb24ndCBkbyB0aGlzIGlmIG5v dCBvcGVuICAqLwotICAgIGlmICh4bG9jYWwgPCAxKSByZXR1cm4oMCk7CQkvKiBEb24ndCBkbyB0 aGlzIGlmIG5vdCBsb2NhbCAqLwotCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkKLSAg ICAgIHJldHVybigodHRjbG9zKDApIDwgMCkgPyAtMSA6IDEpOwotI2VuZGlmIC8qIE5FVENNRCAq LwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkKLSAgICAgIHJldHVybigodHRjbG9zKDAp IDwgMCkgPyAtMSA6IDEpOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotI2lmZGVmIE5FVENPTk4KLSAg ICBpZiAobmV0Y29ubikgewkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbi4gKi8KLSNpZmRlZiBUTl9D T01QT1JUCi0gICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7Ci0gICAgICAgICAgICBpbnQgcmMg PSB0bmNfc2V0X2R0cl9zdGF0ZSgwKTsKLSAgICAgICAgICAgIGlmIChyYyA+PSAwKSB7Ci0gICAg ICAgICAgICAgICAgbXNsZWVwKEhVUFRJTUUpOwotICAgICAgICAgICAgICAgIHJjID0gdG5jX3Nl dF9kdHJfc3RhdGUoMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4ocmMgPj0g MCA/IDEgOiAtMSk7Ci0gICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQkg IHJldHVybigobmV0Y2xvcygpIDwgMCkgPyAtMSA6IDEpOyAvKiBKdXN0IGNsb3NlIGl0LiAqLwot ICB9Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0vKiBGcm9tIGhlcmUgZG93biwgd2UgaGFuZGxl IHJlYWwgdHR5IGRldmljZXMuICovCi0jaWZkZWYgSFVQX1BPU0lYCi0vKgotICBlLmcuIGZvciBV bml4d2FyZSAyLCB3aGVyZSB3ZSBkb24ndCBoYXZlIGEgZnVsbCBQT1NJWCBidWlsZCwgd2UKLSAg c3RpbGwgaGF2ZSB0byB1c2UgUE9TSVgtc3R5bGUgaGFuZ3VwLiAgVGh1cyB0aGUgZHVwbGljYXRp b24gb2YgdGhpcwotICBhbmQgdGhlIG5leHQgY2FzZSwgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZWlu ZyB3ZSB1c2UgYSBsb2NhbCB0ZXJtaW9zCi0gIHN0cnVjdCBoZXJlLCBzaW5jZSBhIGRpZmZlcmVu dCBtb2RlbCBpcyB1c2VkIGVsc2V3aGVyZS4KLQotICBOTyBMT05HRVIgVVNFRCBhcyBvZiBDLUtl cm1pdCA4LjAgLS0gaXQgdHVybnMgb3V0IHRoYXQgdGhpcyBtZXRob2QsCi0gIGV2ZW4gdGhvdWdo IGl0IGNvbXBpbGVzIGFuZCBleGVjdXRlcyB3aXRob3V0IGVycm9yLCBkb2Vzbid0IGFjdHVhbGx5 Ci0gIHdvcmsgKGkuZS4gRFRSIGRvZXMgbm90IGRyb3ApLCB3aGVyZWFzIHRoZSBUSU9DU0RUUiBt ZXRob2Qgd29ya3MganVzdCBmaW5lLAotKi8KLSAgICB7Ci0Jc3RydWN0IHRlcm1pb3MgdHRjdXI7 Ci0JaW50IHg7Ci0JZGVidWcoRjEwMCwidHRoYW5nIEhVUF9QT1NJWCBzdHlsZSIsIiIsMCk7Ci0J eCA9IHRjZ2V0YXR0cih0dHlmZCwgJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgYXR0cmlidXRlcyAq LwotCWRlYnVnKEYxMTEsInR0aGFuZyB0Y2dldGF0dHIiLGNraXRvYShlcnJubykseCk7Ci0JaWYg KHggPCAwKSByZXR1cm4oLTEpOwotCXNwZHNhdiA9IGNmZ2V0b3NwZWVkKCZ0dGN1cik7CS8qIEdl dCBjdXJyZW50IHNwZWVkICovCi0JZGVidWcoRjExMSwidHRoYW5nIGNmZ2V0b3NwZWVkIixja2l0 b2EoZXJybm8pLHNwZHNhdik7Ci0Jc3Bkc2F2aSA9IGNmZ2V0aXNwZWVkKCZ0dGN1cik7CS8qIEdl dCBjdXJyZW50IHNwZWVkICovCi0JZGVidWcoRjExMSwidHRoYW5nIGNmZ2V0aXNwZWVkIixja2l0 b2EoZXJybm8pLHNwZHNhdmkpOwotCXggPSBjZnNldG9zcGVlZCgmdHRjdXIsQjApOwkvKiBSZXBs YWNlIGJ5IDAgKi8KLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgY2ZzZXRvc3BlZWQiLGNraXRvYShlcnJu bykseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCXggPSBjZnNldGlzcGVlZCgmdHRjdXIs QjApOwotCWRlYnVnKEYxMTEsInR0aGFuZyBjZnNldGlzcGVlZCIsY2tpdG9hKGVycm5vKSx4KTsK LQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4s JnR0Y3VyKTsKLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgdGNzZXRhdHRyIEIwIixja2l0b2EoZXJybm8p LHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQltc2xlZXAoSFVQVElNRSk7CQkvKiBTbGVl cCAwLjUgc2VjICovCi0JeCA9IGNmc2V0b3NwZWVkKCZ0dGN1cixzcGRzYXYpOyAvKiBSZXN0b3Jl IHByZXYgc3BlZWQgKi8KLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JZGVidWcoRjExMSwidHRo YW5nIGNmc2V0b3NwZWVkIHByZXYiLGNraXRvYShlcnJubykseCk7Ci0JeCA9IGNmc2V0aXNwZWVk KCZ0dGN1cixzcGRzYXZpKTsKLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgY2ZzZXRpc3BlZWQgcHJldiIs Y2tpdG9hKGVycm5vKSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JeCA9IHRjc2V0YXR0 cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgdGNzZXRhdHRy IHJlc3RvcmUiLGNraXRvYShlcnJubykseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCXJl dHVybigxKTsKLSAgICB9Ci0jZWxzZQotI2lmZGVmIEJTRDQ0T1JQT1NJWAotI2lmZGVmIFFOWAot ICAgIHsKLQlpbnQgeDsKLQl4ID0gdGNkcm9wbGluZSh0dHlmZCw1MDApOwotCWRlYnVnKEYxMDEs InR0aGFuZyBRTlggdGNkcm9wbGluZSIsIiIseCk7Ci0JdHRjdXIuY19jZmxhZyB8PSBDTE9DQUw7 Ci0JeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKLQlkZWJ1ZyhGMTAxLCJ0 dGhhbmcgUU5YIHRjc2V0YXR0ciByZXN0b3JlIiwiIix4KTsKLQlpZiAoeCA8IDApIHsKLQkgICAg ZGVidWcoRjEwMSwidHRoYW5nIFFOWCB0Y3NldGF0dHIgcmVzdG9yZSBlcnJubyIsIiIsZXJybm8p OwotCSAgICByZXR1cm4oLTEpOwotCX0KLQkvKiBGaXggZmxhZ3MgLSBlbnN1cmUgT19OT05CTE9D SyBpcyBvZmYgKi8KLQotCWVycm5vID0gMDsKLQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgUU5YIGluaWZs YWdzIiwiIixpbmlmbGFncyk7Ci0JaWYgKGZjbnRsKHR0eWZkLCBGX1NFVEZMLCBpbmlmbGFncykg PT0gLTEpIHsKLQkgICAgZGVidWcoRjEwMSwidHRoYW5nIFFOWCBGX1NFVEZMIGVycm5vIiwiIixl cnJubyk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotCXJldHVybih4KTsKLSAgICB9Ci0jZWxzZSAg LyogUU5YICovCi0gICAgewotCWludCB4OwotI2lmZGVmIFVTRV9USU9DU0RUUgotCWRlYnVnKEYx MDAsInR0aGFuZyBCU0Q0NE9SUE9TSVggVVNFX1RJT0NTRFRSIiwiIiwwKTsKLQllcnJubyA9IDA7 Ci0JeCA9IGlvY3RsKHR0eWZkLCBUSU9DQ0RUUiwgTlVMTCk7Ci0JZGVidWcoRjExMSwidHRoYW5n IEJTRDQ0T1JQT1NJWCBpb2N0bCBUSU9DQ0RUUiIsY2tpdG9hKGVycm5vKSx4KTsKLQlpZiAoeCA8 IDApIHJldHVybigtMSk7Ci0JbXNsZWVwKEhVUFRJTUUpOwkJLyogU2xlZXAgMC41IHNlYyAqLwot CWVycm5vID0gMDsKLQl4ID0gaW9jdGwodHR5ZmQsIFRJT0NTRFRSLCBOVUxMKTsKLQlkZWJ1ZyhG MTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGlvY3RsIFRJT0NTRFRSIixja2l0b2EoZXJybm8pLHgp OwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLSNlbHNlICAvKiBVU0VfVElPQ1NEVFIgKi8KLQot I2lmZGVmIEhVUF9DTE9TRV9QT1NJWAotLyoKLSAgSW4gT1NSNSB2ZXJzaW9ucyB3aGVyZSBUSU9D U0RUUiBpcyBub3QgZGVmaW5lZCAodXAgdG8gYW5kIGluY2x1ZGluZyBhdAotICBsZWFzdCA1LjAu NmEpIHRoZSBQT1NJWCBBUElzIGluIHRoZSAiI2Vsc2UiIHBhcnQgYmVsb3cgYXJlIGF2YWlsYWJs ZSBidXQKLSAgZG9uJ3Qgd29yaywgYW5kIG5vIG90aGVyIEFQSXMgYXJlIGF2YWlsYWJsZSB0aGF0 IGRvIHdvcmsuICBJbiB0aGlzIGNhc2UKLSAgd2UgaGF2ZSB0byBkcm9wIERUUiBieSBicnV0ZSBm b3JjZTogY2xvc2UgYW5kIHJlb3BlbiB0aGUgcG9ydC4gIFRoaXMKLSAgY29kZSBhY3R1YWxseSB3 b3JrcywgYnV0IGFsbCB0aGUgc3RlcHMgYXJlIGNydWNpYWw6IHNldHRpbmcgQ0xPQ0FMLCB0aGUK LSAgT19OREVMQVkgbWFuaXB1bGF0aW9ucywgZXRjLgotKi8KLQlkZWJ1ZyhGMTAwLCJ0dGhhbmcg SFVQX0NMT1NFX1BPU0lYIGNsb3NlL29wZW4iLCIiLDApOwotCWRlYnVnKEYxMDEsInR0aGFuZyBI VVBfQ0xPU0VfUE9TSVggT19OT05CTE9DSyIsIiIsT19OT05CTE9DSyk7Ci0JZGVidWcoRjEwMSwi dHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBPX05ERUxBWSIsIiIsT19OREVMQVkpOwotCWVycm5vID0g MDsKLQl4ID0gdGNnZXRhdHRyKHR0eWZkLCAmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBhdHRyaWJ1 dGVzICovCi0JZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCB0Y2dldGF0dHIiLCIi LHgpOwotCWlmICh4IDwgMCkgewotCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BP U0lYIHRjZ2V0YXR0ciBlcnJubyIsIiIsZXJybm8pOwotCSAgICByZXR1cm4oLTEpOwotCX0KLQll cnJubyA9IDA7Ci0KLQl4ID0gY2xvc2UodHR5ZmQpOwkJLyogQ2xvc2Ugd2l0aG91dCByZWxlYXNp bmcgbG9jayAqLwotCWlmICh4IDwgMCkgewotCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NM T1NFX1BPU0lYIGNsb3NlIGVycm5vIiwiIixlcnJubyk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQot CWVycm5vID0gMDsKLQl4ID0gbXNsZWVwKDUwMCk7CQkvKiBQYXVzZSBoYWxmIGEgc2Vjb25kICov Ci0JaWYgKHggPCAwKSB7CQkJLyogT3IgaWYgdGhhdCBkb2Vzbid0IHdvcmssIDEgc2VjICovCi0J ICAgIGRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggbXNsZWVwIGVycm5vIiwiIixl cnJubyk7Ci0JICAgIHNsZWVwKDEpOwotCX0KLQllcnJubyA9IDA7Ci0JdHR5ZmQgPSBwcml2X29w bih0dG5tc3YsIChPX1JEV1J8T19OREVMQVkpKTsgLyogUmVvcGVuIHRoZSBkZXZpY2UgKi8KLQlk ZWJ1ZyhGMTExLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIHJlb3BlbiIsdHRubXN2LHR0eWZkKTsK LQlpZiAodHR5ZmQgPCAwKSB7Ci0JICAgIGRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9T SVggcmVvcGVuIGVycm5vIiwiIixlcnJubyk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotCWRlYnVn KEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggcmUtdHRvcGVuIHR0eWZkIiwiIix0dHlmZCk7 Ci0KLQkvKiBSZXN0b3JlIHByZXZpb3VzIGF0dHJpYnV0ZXMgKi8KLQotCWVycm5vID0gMDsKLQl0 dnRmbGcgPSAwOwotCXR0Y3VyLmNfY2ZsYWcgfD0gQ0xPQ0FMOwotCXggPSB0Y3NldGF0dHIodHR5 ZmQsVENTQURSQUlOLCZ0dGN1cik7Ci0JZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJ WCB0Y3NldGF0dHIgcmVzdG9yZSIsIiIseCk7Ci0JaWYgKHggPCAwKSB7Ci0JICAgIGRlYnVnKEYx MDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggdGNzZXRhdHRyIHJlc3RvcmUgZXJybm8iLAotCQkg ICIiLGVycm5vKTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0JLyogRml4IGZsYWdzIC0gZW5zdXJl IE9fTkRFTEFZIGFuZCBPX05PTkJMT0NLIGFyZSBvZmYgKi8KLQotCWVycm5vID0gMDsKLSAgICAg ICAgaWYgKCh4ID0gZmNudGwodHR5ZmQsIEZfR0VURkwsIDApKSA9PSAtMSkgewotCSAgICBkZWJ1 ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIEZfR0VURkwgZXJybm8iLCIiLGVycm5vKTsK LQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0JZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJ WCBmbGFncyIsIiIseCk7Ci0JZXJybm8gPSAwOwotICAgICAgICB4ICY9IH4oT19OT05CTE9DS3xP X05ERUxBWSk7Ci0JZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBmbGFncyB0byBz ZXQiLCIiLHgpOwotCWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggaW5pZmxhZ3Mi LCIiLGluaWZsYWdzKTsKLQlpZiAoZmNudGwodHR5ZmQsIEZfU0VURkwsIHgpID09IC0xKSB7Ci0J ICAgIGRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggRl9TRVRGTCBlcnJubyIsIiIs ZXJybm8pOwotCSAgICByZXR1cm4oLTEpOwotCX0KLSNpZmRlZiBERUJVRwotCWlmIChkZWJsb2cp IHsKLQkgICAgaWYgKCh4ID0gZmNudGwodHR5ZmQsIEZfR0VURkwsIDApKSA+IC0xKSB7Ci0JCWRl YnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggZmxhZ3MiLCIiLHgpOwotCQlkZWJ1ZyhG MTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIGZsYWdzICYgT19OT05CTE9DSyIsCi0JCSAgICAg ICIiLHgmT19OT05CTE9DSyk7Ci0JCWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVgg ZmxhZ3MgJiBPX05ERUxBWSIsCi0JCSAgICAgICIiLHgmT19OREVMQVkpOwotCSAgICB9Ci0JfQot I2VuZGlmIC8qIERFQlVHICovCi0KLSNlbHNlICAvKiBIVVBfQ0xPU0VfUE9TSVggKi8KLQkKLQkv KiBHZW5lcmFsIEJTRDQ0T1JQT1NJWCBjYXNlIChMaW51eCwgQlNESSwgRnJlZUJTRCwgZXRjKSAq LwotCi0JZGVidWcoRjEwMCwidHRoYW5nIEJTRDQ0T1JQT1NJWCBCMCIsIiIsMCk7Ci0JeCA9IHRj Z2V0YXR0cih0dHlmZCwgJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgYXR0cmlidXRlcyAqLwotCWRl YnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggdGNnZXRhdHRyIixja2l0b2EoZXJybm8pLHgp OwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQlzcGRzYXYgPSBjZmdldG9zcGVlZCgmdHRjdXIp OwkvKiBHZXQgY3VycmVudCBzcGVlZCAqLwotCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9T SVggY2ZnZXRvc3BlZWQiLGNraXRvYShlcnJubyksc3Bkc2F2KTsKLQlzcGRzYXZpID0gY2ZnZXRp c3BlZWQoJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KLQlkZWJ1ZyhGMTExLCJ0dGhh bmcgQlNENDRPUlBPU0lYIGNmZ2V0aXNwZWVkIixja2l0b2EoZXJybm8pLHNwZHNhdmkpOwotCXgg PSBjZnNldG9zcGVlZCgmdHRjdXIsQjApOwkvKiBSZXBsYWNlIGJ5IDAgKi8KLQlkZWJ1ZyhGMTEx LCJ0dGhhbmcgQlNENDRPUlBPU0lYIGNmc2V0b3NwZWVkIixja2l0b2EoZXJybm8pLHgpOwotCWlm ICh4IDwgMCkgcmV0dXJuKC0xKTsKLQl4ID0gY2ZzZXRpc3BlZWQoJnR0Y3VyLEIwKTsKLQlkZWJ1 ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGNmc2V0aXNwZWVkIixja2l0b2EoZXJybm8pLHgp OwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQkvKiBUaGlzIGdldHMgRUlOVkFMIG9uIE5ldEJT RCAxLjQuMSBiZWNhdXNlIG9mIEIwLi4uICovCi0JeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJB SU4sJnR0Y3VyKTsKLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIHRjc2V0YXR0ciBC MCIsY2tpdG9hKGVycm5vKSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JbXNsZWVwKEhV UFRJTUUpOwkJLyogU2xlZXAgMC41IHNlYyAqLwotCWRlYnVnKEYxMDEsInR0aGFuZyBCU0Q0NE9S UE9TSVggcmVzdG9yZSBvdXRwdXQgc3BlZWQiLCIiLHNwZHNhdik7Ci0JeCA9IGNmc2V0b3NwZWVk KCZ0dGN1cixzcGRzYXYpOyAvKiBSZXN0b3JlIHByZXYgc3BlZWQgKi8KLQlkZWJ1ZyhGMTExLCJ0 dGhhbmcgQlNENDRPUlBPU0lYIGNmc2V0b3NwZWVkIHByZXYiLGNraXRvYShlcnJubykseCk7Ci0J aWYgKHggPCAwKSByZXR1cm4oLTEpOwotCWRlYnVnKEYxMDEsInR0aGFuZyBCU0Q0NE9SUE9TSVgg cmVzdG9yZSBpbnB1dCBzcGVlZCIsIiIsc3Bkc2F2aSk7Ci0JeCA9IGNmc2V0aXNwZWVkKCZ0dGN1 cixzcGRzYXZpKTsKLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGNmc2V0aXNwZWVk IHByZXYiLGNraXRvYShlcnJubykseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCXR0Y3Vy LmNfY2ZsYWcgfD0gQ0xPQ0FMOwkvKiBEb24ndCBleHBlY3QgQ0QgYWZ0ZXIgaGFuZ3VwICovCi0J eCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKLQlkZWJ1ZyhGMTExLCJ0dGhh bmcgQlNENDRPUlBPU0lYIHRjc2V0YXR0ciByZXN0b3JlIixja2l0b2EoZXJybm8pLHgpOwotCWlm ICh4IDwgMCkgcmV0dXJuKC0xKTsKLQotI2VuZGlmIC8qIEhVUF9DTE9TRV9QT1NJWCAqLwotI2Vu ZGlmIC8qIFVTRV9USU9DU0RUUiAqLwotCi0JcmV0dXJuKDEpOwotICAgIH0KLQotI2VuZGlmIC8q IFFOWCAqLwotI2Vsc2UgLyogQlNENDRPUlBPU0lYICovCi0KLSNpZmRlZiBhZWdpcwkJCQkvKiBB cG9sbG8gQWVnaXMgKi8KLSAgICBzaW9fJGNvbnRyb2woKHNob3J0KXR0eWZkLCBzaW9fJGR0ciwg ZmFsc2UsIHN0KTsgICAgLyogRFRSIGRvd24gKi8KLSAgICBtc2xlZXAoSFVQVElNRSk7CQkJCQkv KiBwYXVzZSAqLwotICAgIHNpb18kY29udHJvbCgoc2hvcnQpdHR5ZmQsIHNpb18kZHRyLCB0cnVl LCAgc3QpOyAgICAvKiBEVFIgdXAgKi8KLSAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogYWVnaXMg Ki8KLQotI2lmZGVmIEFOWUJTRAkJCQkvKiBBbnkgQlNEIHZlcnNpb24uICovCi0jaWZkZWYgVElP Q0NEVFIJCQkJLyogRXhjZXB0IHRob3NlIHRoYXQgZG9uJ3QgaGF2ZSB0aGlzICovCi0gICAgZGVi dWcoRjEwMCwidHRoYW5nIEJTRCBzdHlsZSIsIiIsMCk7Ci0gICAgaWYgKGlvY3RsKHR0eWZkLFRJ T0NDRFRSLDApIDwgMCkgewkvKiBDbGVhciBEVFIuICovCi0JZGVidWcoRjEwMSwidHRoYW5nIFRJ T0NDRFRSIGZhaWxzIiwiIixlcnJubyk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgbXNsZWVw KEhVUFRJTUUpOwkJCS8qIEZvciBhYm91dCAxLzIgc2VjICovCi0gICAgZXJybm8gPSAwOwotICAg IHggPSBpb2N0bCh0dHlmZCxUSU9DU0RUUiwwKTsJLyogUmVzdG9yZSBEVFIgKi8KLSAgICBpZiAo eCA8IDApIHsKLQkvKgotCSAgRm9yIHNvbWUgcmVhc29uLCB0aGlzIHRlbmRzIHRvIGZhaWwgd2l0 aCAibm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyIKLQkgIGJ1dCB0aGUgb3BlcmF0aW9uIHN0aWxs IHdvcmtzLCBwcm9iYWJseSBiZWNhdXNlIG9mIHRoZSBjbG9zZS9vcGVuCi0JICBsYXRlciBvbi4g IFNvIGxldCdzIG5vdCBzY2FyZSB0aGUgdXNlciB1bm5lY2Vzc2FyaWx5IGhlcmUuCi0JKi8KLQlk ZWJ1ZyhGMTAxLCJ0dGhhbmcgVElPQ1NEVFIgZXJybm8iLCIiLGVycm5vKTsgLyogTG9nIHRoZSBl cnJvciAqLwotCXggPSAxOwkJCQkvKiBQcmV0ZW5kIHdlIHN1Y2NlZWRlZCAqLwotICAgIH0gZWxz ZSBpZiAoeCA9PSAwKSB4ID0gMTsJCS8qIFN1Y2Nlc3MgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZk ZWYgRlQyMQotICAgIGlvY3RsKHR0eWZkLCBUSU9DU0FWRU1PREVTLCAwKTsKLSAgICBpb2N0bCh0 dHlmZCwgVElPQ0hQQ0wsIDApOwotICAgIGNsb3NlKHR0eWZkKTsJCQkvKiBZZXMsIG11c3QgZG8g dGhpcyB0d2ljZSAqLwotICAgIGlmICgodHR5ZmQgPSBvcGVuKHR0bm1zdiwyKSkgPCAwKQkvKiBv biBGb3J0dW5lIGNvbXB1dGVycy4uLiAqLwotICAgICAgcmV0dXJuKC0xKTsJCQkvKiAoYnV0IHdo eT8pICovCi0gICAgZWxzZSB4ID0gMTsKLSNlbmRpZiAvKiBGVDIxICovCi0jZW5kaWYgLyogQ09N TUVOVCAqLwotI2VuZGlmIC8qIFRJT0NDRFRSICovCi0gICAgY2xvc2UoZG9fb3Blbih0dG5tc3Yp KTsJCS8qIENsZWFyIGkvbyBlcnJvciBjb25kaXRpb24gKi8KLSAgICBlcnJubyA9IDA7Ci0jaWZk ZWYgQ09NTUVOVAotLyogVGhpcyBpcyBkZWZpbml0ZWx5IGRhbmdlcm91cy4gIFdoeSB3YXMgaXQg aGVyZT8gKi8KLSAgICB6ID0gdHR2dCh0dHNwZWVkLHR0Zmxvdyk7CQkvKiBSZXN0b3JlIG1vZGVz LiAqLwotICAgIGRlYnVnKEYxMDEsInR0aGFuZyB0dHZ0IHJldHVybnMiLCIiLHopOwotICAgIHJl dHVybih6IDwgMCA/IC0xIDogMSk7Ci0jZWxzZQotICAgIHJldHVybih4KTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0jZW5kaWYgLyogQU5ZQlNEICovCi0KLSNpZmRlZiBBVFRTVgotLyogQVQmVCBV TklYIHNlY3Rpb24sIGluY2x1ZGVzIEhQLVVYIGFuZCBnZW5lcmljIEFUJlQgU3lzdGVtIElJSS9W Li4uICovCi0KLSNpZmRlZiBIUFVYCi0vKiBIZXdsZXR0IFBhY2thcmQgYWxsb3dzIGV4cGxpY2l0 IG1hbmlwdWxhdGlvbiBvZiBtb2RlbSBzaWduYWxzLiAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyog T2xkIHdheS4uLiAqLwotICAgIGRlYnVnKEYxMDAsInR0aGFuZyBIUC1VWCBzdHlsZSIsIiIsMCk7 Ci0gICAgaWYgKGlvY3RsKHR0eWZkLE1DU0VUQUYsJmR0cl9kb3duKSA8IDApICAgICAgICAvKiBs b3dlciBEVFIgKi8KLSAgICAgIHJldHVybigtMSk7CQkgICAgCSAgICAgICAgICAgLyogb29wcywg Y2FuJ3QuICovCi0gICAgbXNsZWVwKEhVUFRJTUUpOwkJCSAgICAgICAgICAgLyogUGF1c2UgaGFs ZiBhIHNlY29uZC4gKi8KLSAgICB4ID0gMTsJCQkJICAgICAgICAgICAvKiBTZXQgcmV0dXJuIGNv ZGUgKi8KLSAgICBpZiAoaW9jdGwodHR5ZmQsTUNHRVRBLCZtb2RlbV9ydG4pID4gLTEpIHsgICAg IC8qIEdldCBsaW5lIHN0YXR1cy4gKi8KLQlpZiAoKG1vZGVtX3J0biAmIE1EQ0QpICE9IDApICAg ICAgCSAgIC8qIENoZWNrIGlmIENEIGlzIGxvdy4gKi8KLQkgIHggPSAtMTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ0QgZGlkbid0IGRyb3AsIGZhaWwuICovCi0gICAgfSBl bHNlIHggPSAtMTsKLQotICAgIC8qIEV2ZW4gaWYgYWJvdmUgY2FsbHMgZmFpbCwgUlRTICYgRFRS IHNob3VsZCBiZSB0dXJuZWQgYmFjayBvbi4gKi8KLSAgICBtb2RlbV9ydG4gPSBNUlRTIHwgTURU UjsKLSAgICBpZiAoaW9jdGwodHR5ZmQsTUNTRVRBRiwmbW9kZW1fcnRuKSA8IDApIHggPSAtMTsK LSAgICByZXR1cm4oeCk7Ci0jZWxzZQotLyogTmV3IHdheSwgZnJvbSBIZWxsbXV0aCBNaWNoYWVs aXMgKi8KLSAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAtVVggc3R5bGUsIEhQVVhERUJVRyIsIiIs MCk7Ci0gICAgaWYgKGlvY3RsKHR0eWZkLE1DR0VUQSwmbW9kZW1fcnRuKSA9PSAtMSkgeyAvKiBH ZXQgY3VycmVudCBzdGF0dXMuICovCi0JZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYOiBjYW4ndCBn ZXQgbW9kZW0gbGluZXMsIE5PIEhBTkdVUCEiLCIiLDApOwotCXJldHVybigtMSk7Ci0gICAgfQot ICAgIHNwcmludGYobW9kZW1fc3RhdGUsIiUjbHgiLG1vZGVtX3J0bik7Ci0gICAgZGVidWcoRjEx MCwidHRoYW5nIEhQLVVYOiBtb2RlbSBsaW5lcyA9ICIsbW9kZW1fc3RhdGUsMCk7Ci0gICAgbW9k ZW1fc2F2ID0gbW9kZW1fcnRuOwkJLyogU2F2ZSBjdXJyZW50IG1vZGVtIHNpZ25hbHMgKi8KLSAg ICBtb2RlbV9ydG4gJj0gfk1EVFI7CQkJLyogVHVybiBEVFIgYml0IG9mZiAqLwotICAgIHNwcmlu dGYobW9kZW1fc3RhdGUsIiUjbHgiLG1vZGVtX3J0bik7Ci0gICAgZGVidWcoRjExMCwidHRoYW5n IEhQLVVYOiBEVFIgZG93biA9ICIsbW9kZW1fc3RhdGUsMCk7Ci0gICAgaWYgKGlvY3RsKHR0eWZk LE1DU0VUQUYsJm1vZGVtX3J0bikgPCAwKSB7IC8qIGxvd2VyIERUUiAqLwotCWRlYnVnKEYxMDAs InR0aGFuZyBIUC1VWDogY2FuJ3QgbG93ZXIgRFRSISIsIiIsMCk7Ci0JcmV0dXJuKC0xKTsJCQkv KiBvb3BzLCBjYW4ndC4gKi8KLSAgICB9Ci0gICAgbXNsZWVwKEhVUFRJTUUpOwkJCS8qIFBhdXNl IGhhbGYgYSBzZWNvbmQuICovCi0gICAgeCA9IDE7CQkJCS8qIFNldCByZXR1cm4gY29kZSAqLwot ICAgIGlmIChpb2N0bCh0dHlmZCxNQ0dFVEEsJm1vZGVtX3J0bikgPiAtMSkgeyAvKiBHZXQgbGlu ZSBzdGF0dXMuICovCi0Jc3ByaW50Zihtb2RlbV9zdGF0ZSwiJSNseCIsbW9kZW1fcnRuKTsKLQlk ZWJ1ZyhGMTEwLCJ0dGhhbmcgSFAtVVg6IG1vZGVtIGxpbmVzIGdvdCA9ICIsbW9kZW1fc3RhdGUs MCk7Ci0JaWYgKChtb2RlbV9ydG4gJiBNRENEKSAhPSAwKSB7CS8qIENoZWNrIGlmIENEIGlzIGxv dy4gKi8KLQkgICAgZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYOiBEQ0Qgbm90IGRvd24iLCIiLDAp OwotCSAgICB4ID0gLTE7CQkJLyogQ0QgZGlkbid0IGRyb3AsIGZhaWwuICovCi0JfSBlbHNlIHsK LQkgICAgZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYOiBEQ0QgZG93biIsIiIsMCk7Ci0JfQotICAg IH0gZWxzZSB7Ci0JeCA9IC0xOwotCWRlYnVnKEYxMDAsInR0aGFuZyBIUC1VWDogY2FuJ3QgZ2V0 IERDRCBzdGF0dXMgISIsIiIsMCk7Ci0gICAgfQotCi0gICAgLyogRXZlbiBpZiBhYm92ZSBjYWxs cyBmYWlsLCBEVFIgc2hvdWxkIGJlIHR1cm5lZCBiYWNrIG9uLiAqLwotCi0gICAgbW9kZW1fc2F2 IHw9IE1EVFI7Ci0gICAgaWYgKGlvY3RsKHR0eWZkLE1DU0VUQUYsJm1vZGVtX3NhdikgPCAwKSB7 Ci0JeCA9IC0xOwotCWRlYnVnKEYxMDAsInR0aGFuZyBIUC1VWDogY2FuJ3Qgc2V0IHNhdmVkIHN0 YXRlIiwiIiwwKTsKLSAgICB9IGVsc2UgewotCXNwcmludGYobW9kZW1fc3RhdGUsIiUjbHgiLG1v ZGVtX3Nhdik7Ci0JZGVidWcoRjExMCwidHRoYW5nIEhQLVVYOiBmaW5hbCBtb2RlbSBsaW5lcyA9 ICIsbW9kZW1fc3RhdGUsMCk7Ci0gICAgfQotICAgIHJldHVybih4KTsKLSNlbmRpZiAvKiBDT01N RU5UICovCi0KLSNlbHNlIC8qIEFUJlQgYnV0IG5vdCBIUC1VWCAqLwotCi0vKiBTVklEIGZvciBB VCZUIFN5c3RlbSBWIFIzIGRlZmluZXMgaW9jdGwncyBmb3IgaGFuZGxpbmcgbW9kZW0gc2lnbmFs cy4gKi8KLS8qIEl0IGlzIG5vdCBrbm93biBob3cgbWFueSwgaWYgYW55LCBzeXN0ZW1zIGFjdHVh bGx5IGltcGxlbWVudCB0aGVtLCAqLwotLyogc28gd2UgaW5jbHVkZSB0aGVtIGhlcmUgaW4gaWZk ZWYncy4gKi8KLQotLyoKLSAgVW5peHdhcmUgaGFzIHRoZSBUSU9DTXh4eCBzeW1ib2xzIGRlZmlu ZWQsIGJ1dCBjYWxsaW5nIGlvY3RsKCkgd2l0aCB0aGVtCi0gIGdpdmVzIGVycm9yIDIyIChpbnZh bGlkIGFyZ3VtZW50KS4KLSovCi0jaWZuZGVmIF9JQk1SMgotLyoKLSAgTm8gbW9kZW0tc2lnbmFs IHR3aWRkbGluZyBmb3IgSUJNIFJUIFBDIG9yIFJTLzYwMDAuCi0gIEluIEFJWCAzLjEgYW5kIGVh cmxpZXIsIHRoZSBpb2N0bCgpIGNhbGwgaXMgYnJva2VuLgotICBUaGlzIGNvZGUgY291bGQgYmUg YWN0aXZhdGVkIGZvciBBSVggMy4xIHdpdGggUFRGIDIwMDYgb3IgbGF0ZXIKLSAgKGUuZy4gQUlY IDMuMiksIGJ1dCBjbG9zZS9vcGVuIGRvZXMgdGhlIGpvYiB0b28sIHNvIHdoeSBib3RoZXIuCi0q LwotI2lmZGVmIFRJT0NNQklTCQkJCS8qIEJpdCBTZXQgKi8KLSNpZmRlZiBUSU9DTUJJQwkJCQkv KiBCaXQgQ2xlYXIgKi8KLSNpZmRlZiBUSU9DTV9EVFIJCQkvKiBEVFIgKi8KLQotLyogQ2xlYXIg RFRSLCBzbGVlcCAzMDAgbXNlYywgdHVybiBpdCBiYWNrIG9uLiAqLwotLyogSWYgYW55IG9mIHRo ZSBpb2N0bCdzIHJldHVybiBmYWlsdXJlLCBnbyBvbiB0byB0aGUgbmV4dCBzZWN0aW9uLiAqLwot Ci0gICAgeiA9IFRJT0NNX0RUUjsJCQkvKiBDb2RlIGZvciBEVFIuICovCi0jaWZkZWYgQ09NTUVO VAotLyoKLSAgVGhpcyB3YXMgdGhlIGNhdXNlIG9mIHRoZSB0cm91YmxlcyB3aXRoIHRoZSBTb2xh cmlzIFBvcnQgTW9uaXRvci4KLSAgVGhlIHByb2JsZW0gaXM6IFJUUyBuZXZlciBjb21lcyBiYWNr IG9uLiAgTW9yYWw6IERvbid0IGRvIGl0IQotICAoQnV0IHdoeSBkb2Vzbid0IGl0IGNvbWUgYmFj ayBvbj8gIFNlZSB0aGUgVElPQ01CSVMgY2FsbC4uLikKLSovCi0jaWZkZWYgVElPQ01fUlRTCQkJ LyogTG93ZXIgUlRTIHRvbyBpZiBzeW1ib2wgaXMga25vd24uICovCi0gICAgeiB8PSBUSU9DTV9S VFM7Ci0jZW5kaWYgLyogVElPQ01fUlRTICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAg ZGVidWcoRjEwMSwidHRoYW5nIFRJT0NNIHNpZ25hbCBtYXNrIiwiIix6KTsKLSAgICBpZiAoaW9j dGwodHR5ZmQsVElPQ01CSUMsJnopID4gLTEpIHsgICAvKiBUcnkgdG8gbG93ZXIgRFRSLiAqLwot CWRlYnVnKEYxMDAsInR0aGFuZyBUSU9DTUJJQyBvayIsIiIsMCk7Ci0JbXNsZWVwKEhVUFRJTUUp OwkJICAgLyogUGF1c2UgaGFsZiBhIHNlY29uZC4gKi8KLQlpZiAoaW9jdGwodHR5ZmQsVElPQ01C SVMsJnopID4gLTEpIHsgLyogVHJ5IHRvIHR1cm4gaXQgYmFjayBvbi4gKi8KLQkgICAgZGVidWco RjEwMCwidHRoYW5nIFRJT0NNQklTIG9rIiwiIiwwKTsKLSNpZm5kZWYgQ0xTT1BOCi0JICAgIHJl dHVybigxKTsJCQkvKiBTdWNjZXNzLCBkb25lLiAqLwotI2VuZGlmIC8qIENMU09QTiAqLwotCX0g ZWxzZSB7CQkJLyogQ291bGRuJ3QgcmFpc2UsIGNvbnRpbnVlLiAqLwotCSAgICBkZWJ1ZyhGMTAx LCJ0dGhhbmcgVElPQ01CSVMgZXJybm8iLCIiLGVycm5vKTsKLQl9Ci0gICAgfSBlbHNlIHsJCQkJ LyogQ291bGRuJ3QgbG93ZXIsIGNvbnRpbnVlLiAqLwotIAlkZWJ1ZyhGMTAxLCJ0dGhhbmcgVElP Q01CSUMgZXJybm8iLCIiLGVycm5vKTsKLSAgICB9Ci0jZW5kaWYgLyogVElPQ01fRFRSICovCi0j ZW5kaWYgLyogVElPQ01CSUMgKi8KLSNlbmRpZiAvKiBUSU9DTUJJUyAqLwotI2VuZGlmIC8qIF9J Qk1SMiAqLwotCi0vKgotICBHZW5lcmFsIEFUJlQgVU5JWCBjYXNlLCBub3QgSFBVWC4gIFRoZSBm b2xsb3dpbmcgY29kZSBpcyBoaWdobHkgc3VzcGVjdC4gIE5vCi0gIHR3byBBVCZULWJhc2VkIHN5 c3RlbXMgc2VlbSB0byBkbyB0aGlzIHRoZSBzYW1lIHdheS4gIFRoZSBvYmplY3QgaXMgc2ltcGx5 Ci0gIHRvIHR1cm4gb2ZmIERUUiBhbmQgdGhlbiB0dXJuIGl0IGJhY2sgb24uICBTVklEIHNheXMg dGhlIHVuaXZlcnNhbCBtZXRob2QKLSAgZm9yIHR1cm5pbmcgb2ZmIERUUiBpcyB0byBzZXQgdGhl IHNwZWVkIHRvIHplcm8sIGFuZCB0aGlzIGRvZXMgc2VlbSB0byBkbwotICB0aGUgdHJpY2sgaW4g YWxsIGNhc2VzLiAgQnV0IG5laXRoZXIgU1ZJRCBub3IgYW55IGtub3duIG1hbiBwYWdlcyBzYXkg aG93IHRvCi0gIHR1cm4gRFRSIGJhY2sgb24gYWdhaW4uICBTb21lIHZhcmlhbnRzLCBsaWtlIG1v c3QgWGVuaXggaW1wbGVtZW50YXRpb25zLAotICByYWlzZSBEVFIgYWdhaW4gd2hlbiB0aGUgc3Bl ZWQgaXMgcmVzdG9yZWQgdG8gYSBub256ZXJvIHZhbHVlLiAgT3RoZXJzCi0gIHJlcXVpcmUgdGhl IGRldmljZSB0byBiZSBjbG9zZWQgYW5kIG9wZW5lZCBhZ2FpbiwgYnV0IHRoaXMgaXMgcmlza3kg YmVjYXVzZQotICBnZXR0eSBjb3VsZCBzZWl6ZSB0aGUgZGV2aWNlIGR1cmluZyB0aGUgaW5zdGFu dCBpdCBpcyBjbG9zZWQuCi0qLwotCi0vKiBSZXR1cm4gY29kZSBmb3IgaW9jdGwgZmFpbHVyZXMu Li4gKi8KLSNpZmRlZiBBVFQ2MzAwCi0gICAgeCA9IDE7CQkJCS8qIEFUVDYzMDAgZG9lc24ndCB3 YW50IHRvIGZhaWwuLi4gKi8KLSNlbHNlCi0gICAgeCA9IC0xOwotI2VuZGlmIC8qIEFUVDYzMDAg Ki8KLQotICAgIGRlYnVnKEYxMDAsInR0aGFuZyBnZXQgc2V0dGluZ3MiLCIiLDApOwotICAgIGlm IChpb2N0bCh0dHlmZCxUQ0dFVEEsJnR0Y3VyKSA8IDApIC8qIEdldCBjdXJyZW50IHNldHRpbmdz LiAqLwotICAgICAgcmV0dXJuKHgpOwkJCS8qIEZhaWwgaWYgdGhpcyBkb2Vzbid0IHdvcmsuICov Ci0gICAgaWYgKChmbGFncyA9IGZjbnRsKHR0eWZkLEZfR0VURkwsMCkpIDwgMCkgLyogR2V0IGRl dmljZSBmbGFncy4gKi8KLSAgICAgIHJldHVybih4KTsKLSAgICB0dGNfc2F2ZSA9IHR0Y3VyLmNf Y2ZsYWc7CQkvKiBSZW1lbWJlciBjdXJyZW50IHNwZWVkLiAqLwotICAgIHNwZHNhdiA9IHR0Y19z YXZlICYgQ0JBVUQ7Ci0gICAgZGVidWcoRjEwMSwidHRoYW5nIHNwZWVkIiwiIixzcGRzYXYpOwot Ci0jaWZkZWYgT19OREVMQVkKLSAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgdHVybmluZyBPX05ERUxB WSBvbiIsIiIsMCk7Ci0gICAgZmNudGwodHR5ZmQsIEZfU0VURkwsIGZsYWdzIHwgT19OREVMQVkp OyAvKiBBY3RpdmF0ZSBPX05ERUxBWSAqLwotI2VuZGlmIC8qIE9fTkRFTEFZICovCi0KLSNpZmRl ZiBBVFQ3MzAwIC8qIFRoaXMgaXMgdGhlIHdheSBpdCBpcyBTVVBQT1NFRCB0byB3b3JrICovCi0g ICAgdHRjdXIuY19jZmxhZyAmPSB+Q0JBVUQ7CQkvKiBDaGFuZ2UgdGhlIHNwZWVkIHRvIHplcm8u ICAqLwotI2Vsc2UKLSNpZmRlZiBSVEFJWAotICAgIHR0Y3VyLmNfY2ZsYWcgJj0gfkNCQVVEOwkJ LyogQ2hhbmdlIHRoZSBzcGVlZCB0byB6ZXJvLiAgKi8KLSNlbHNlICAgICAgICAgIC8qIFRoaXMg d2F5IHJlYWxseSB3b3JrcyBidXQgbWF5IGJlIGRhbmdlcm91cyAqLwotI2lmZGVmIHUzYjIKLSAg ICB0dGN1ci5jX2NmbGFnID0gfihDQkFVRHxDTE9DQUwpOwkvKiBTcGVjaWFsIGZvciBBVCZUIDNC MnMgKi8KLQkJCQkJLyogKENMT0NBTCBtdXN0IGJlIE9GRikgKi8KLSNlbHNlCi0jaWZkZWYgU0NP M1IyCQkJCS8qIFNDTyBVTklYIDMuMiAqLwotLyoKLSAgVGhpcyBpcyBjb21wbGV0ZSBub25zZW5z ZSwgYnV0IGFuIFNDTyB1c2VyIGNsYWltZWQgdGhpcyBjaGFuZ2UgbWFkZQotICBoYW5naW5nIHVw IHdvcmsuICBDb21tZW50cyBmcm9tIG90aGVyIFNDTyBVTklYIDMuMiB1c2VycyB3b3VsZCBiZQot ICBhcHByZWNpYXRlZC4KLSovCi0gICAgdHRjdXIuY19jZmxhZyA9IENCQVVEfEIwOwotI2Vsc2UK LSNpZmRlZiBBSVhSUwkJCQkvKiBBSVggb24gUlMvNjAwMCAqLwotLyoKLSAgQ2FuJ3Qgc2V0IHNw ZWVkIHRvIHplcm8gb24gQUlYIDMuMSBvbiBSUy82MDAwIDY0LXBvcnQgYWRhcHRlciwKLSAgZXZl biB0aG91Z2ggeW91IGNhbiBkbyBpdCBvbiB0aGUgYnVpbHQtaW4gcG9ydCBhbmQgdGhlIDgtIGFu ZCAxNi1wb3J0Ci0gIGFkYXB0ZXJzLiAgKFVudGVzdGVkIG9uIDEyOC1wb3J0IGFkYXB0ZXIuKQot Ki8KLSAgICB0dGN1ci5jX2NmbGFnID0gQ0xPQ0FMfEhVUENMfHNwZHNhdjsgLyogU3BlZWQgMCBj YXVzZXMgRUlOVkFMICovCi0jZWxzZQkJCQkJLyogTm9uZSBvZiB0aGUgYWJvdmUgKi8KLS8qCi0g IFNldCBldmVyeXRoaW5nLCBpbmNsdWRpbmcgdGhlIHNwZWVkLCB0byB6ZXJvLCBleGNlcHQgZm9y IHRoZSBDTE9DQUwKLSAgYW5kIEhVUENMIGJpdHMuCi0qLwotICAgIHR0Y3VyLmNfY2ZsYWcgPSBD TE9DQUx8SFVQQ0w7Ci0jZW5kaWYgLyogQUlYUlMgKi8KLSNlbmRpZiAvKiBTQ08zUjIgKi8KLSNl bmRpZiAvKiB1M2IyICovCi0jZW5kaWYgLyogUlRBSVggKi8KLSNlbmRpZiAvKiBBVFQ3MzAwICov Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogYW5kIGlmIG5vbmUgb2YgdGhvc2Ugd29yaywgdHJ5 IG9uZSBvZiB0aGVzZS4uLiAqLwotICAgIHR0Y3VyLmNfY2ZsYWcgPSAwOwotICAgIHR0Y3VyLmNf Y2ZsYWcgPSBDTE9DQUw7Ci0gICAgdHRjdXIuY19jZmxhZyAmPSB+KENCQVVEfEhVUENMKTsKLSAg ICB0dGN1ci5jX2NmbGFnICY9IH4oQ0JBVUR8Q1JFQUQpOwotICAgIHR0Y3VyLmNfY2ZsYWcgJj0g fihDQkFVRHxDUkVBRHxIVVBDTCk7Ci0gICAgLyogb3Igb3RoZXIgY29tYmluYXRpb25zICovCi0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgVENYT05DCi0gICAgZGVidWcoRjEwMCwidHRo YW5nIFRDWE9OQyIsIiIsMCk7Ci0gICAgaWYgKGlvY3RsKHR0eWZkLCBUQ1hPTkMsIDEpIDwgMCkg ewotCWRlYnVnKEYxMDEsInR0aGFuZyBUQ1hPTkMgZmFpbGVkIiwiIixlcnJubyk7Ci0gICAgfQot I2VuZGlmIC8qIFRDWE9OQyAqLwotCi0jaWZkZWYgVElPQ1NUQVJUCi0gICAgZGVidWcoRjEwMCwi dHRoYW5nIFRJT0NTVEFSVCIsIiIsMCk7Ci0gICAgaWYgKGlvY3RsKHR0eWZkLCBUSU9DU1RBUlQs IDApIDwgMCkgewotCWRlYnVnKEYxMDEsInR0aGFuZyBUSU9DU1RBUlQgZmFpbGVkIiwiIixlcnJu byk7Ci0gICAgfQotI2VuZGlmIC8qIFRJT0NTVEFSVCAqLwotCi0gICAgaWYgKGlvY3RsKHR0eWZk LFRDU0VUQUYsJnR0Y3VyKSA8IDApIHsgLyogRmFpbCBpZiB3ZSBjYW4ndC4gKi8KLQlkZWJ1ZyhG MTAxLCJ0dGhhbmcgVENTRVRBRiBmYWlsZWQiLCIiLGVycm5vKTsKLQlmY250bCh0dHlmZCwgRl9T RVRGTCwgZmxhZ3MpOwkvKiBSZXN0b3JlIGZsYWdzICovCi0JcmV0dXJuKC0xKTsJCQkvKiBiZWZv cmUgcmV0dXJuaW5nLiAqLwotICAgIH0KLSAgICBtc2xlZXAoMzAwKTsJCQkvKiBHaXZlIG1vZGVt IHRpbWUgdG8gbm90aWNlLiAqLwotCi0jaWZuZGVmIE5PQ09URk1DCi0KLS8qIE5vdywgZXZlbiB0 aG91Z2ggaXQgZG9lc24ndCBzYXkgdGhpcyBpbiBTVklEIG9yIGFueSBtYW4gcGFnZSwgd2UgaGF2 ZSAqLwotLyogdG8gY2xvc2UgYW5kIHJlb3BlbiB0aGUgZGV2aWNlLiAgVGhpcyBpcyBub3QgbmVj ZXNzYXJ5IGZvciBhbGwgc3lzdGVtcywgKi8KLS8qIGJ1dCBpdCdzIGltcG9zc2libGUgdG8gcHJl ZGljdCB3aGljaCBvbmVzIG5lZWQgaXQgYW5kIHdoaWNoIG9uZXMgZG9uJ3QuICovCi0KLSNpZmRl ZiBBVFQ3MzAwCi0vKgotICBTcGVjaWFsIGhhbmRsaW5nIGZvciBBVFQgNzMwMCBVTklYIFBDIGFu ZCAzQjEsIHdoaWNoIGhhdmUgInBob25lIgotICByZWxhdGVkIGlvY3RsJ3MgZm9yIHRoZWlyIGlu dGVybmFsIG1vZGVtcy4gIGF0dG1vZGVtIGhhcyBnZXR0eSBzdGF0dXMgYW5kCi0gIG1vZGVtLWlu LXVzZSBiaXQuICBSZXBvcnRlZGx5IHRoZSBBVFQ3MzAwLzNCMSBQSU9DRElTQyBjYWxsIGlzIG5l Y2Vzc2FyeSwKLSAgYnV0IGFsc28gcnVpbnMgdGhlIGZpbGUgZGVzY3JpcHRvciwgYW5kIG5vIG90 aGVyIHBob25lKDcpIGlvY3RsIGNhbGwgY2FuIGZpeAotICBpdC4gIFdoYXRldmVyIGl0IGRvZXMs IGl0IHNlZW1zIHRvIGVzY2FwZSBkZXRlY3Rpb24gd2l0aCBQSU9DR0VUQSBhbmQgVENHRVRBLgot ICBUaGUgb25seSB3YXkgdG8gdW5kbyB0aGUgZGFtYWdlIGlzIHRvIGNsb3NlIHRoZSBmZCBhbmQg dGhlbiByZW9wZW4gaXQuCi0qLwotICAgIGlmIChhdHRtb2RlbSAmIElTTU9ERU0pIHsKLQlkZWJ1 ZyhGMTAwLCJ0dGhhbmcgYXR0bW9kZW0gY2xvc2Uvb3BlbiIsIiIsMCk7Ci0JaW9jdGwodHR5ZmQs UElPQ1VOSE9MRCwmZGlhbGVyKTsgLyogUmV0dXJuIGNhbGwgdG8gaGFuZHNldC4gKi8KLQlpb2N0 bCh0dHlmZCxQSU9DRElTQywmZGlhbGVyKTsJLyogRGlzY29ubmVjdCBwaG9uZS4gKi8KLQljbG9z ZSh0dHlmZCk7CQkJLyogQ2xvc2UgYW5kIHJlb3BlbiB0aGUgZmQuICovCi0JdHR5ZmQgPSBwcml2 X29wbih0dG5tc3YsIE9fUkRXUiB8IE9fTkRFTEFZKTsKLQlhdHRtb2RlbSAmPSB+SVNNT0RFTTsJ CS8qIFBob25lIG5vIGxvbmdlciBpbiB1c2UuICovCi0gICAgfQotI2Vsc2UgLyogIUFUVDczMDAg Ki8KLS8qIEl0IHNlZW1zIHdlIGhhdmUgdG8gY2xvc2UgYW5kIG9wZW4gdGhlIGRldmljZSBmb3Ig b3RoZXIgQVQmVCBzeXN0ZW1zICovCi0vKiB0b28sIGFuZCB0aGlzIGlzIHRoZSBwbGFjZSB0byBk byBpdC4gIFRoZSBmb2xsb3dpbmcgY29kZSBkb2VzIHRoZSAqLwotLyogZmFtb3VzIGNsb3NlKG9w ZW4oLi4uKSkgbWFnaWMgYnkgZGVmYXVsdC4gIElmIHRoYXQgZG9lc24ndCB3b3JrIGZvciB5b3Us ICovCi0vKiB0aGVuIHRyeSB1bmNvbW1lbnRpbmcgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgb3Ig cHV0dGluZyAtRENMU09QTiBpbiAqLwotLyogdGhlIG1ha2VmaWxlIENGTEFHUy4gKi8KLQotLyog I2RlZmluZSBDTFNPUE4gKi8KLQotI2lmbmRlZiBTQ08zMiAvKiBOb3QgbmVlZGVkIGJ5LCBhbmQg aGFybWZ1bCB0bywgU0NPIFVOSVggMy4yIC8gWGVuaXggMi4zICovCi0KLSNpZmRlZiBPX05ERUxB WQotI2RlZmluZSBPUEVORkxHUyBPX1JEV1IgfCBPX05ERUxBWQotI2Vsc2UKLSNkZWZpbmUgT1BF TkZMR1MgT19SRFdSCi0jZW5kaWYKLQotI2lmbmRlZiBDTFNPUE4KLS8qIFRoaXMgbWV0aG9kIGlz IHVzZWQgYnkgZGVmYXVsdCwgaS5lLiB1bmxlc3MgQ0xTT1BOIGlzIGRlZmluZWQuICovCi0vKiBJ dCBpcyB0aG91Z2h0IHRvIGJlIHNhZmVyIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2luZG93IHdoZXJl IGdldHR5ICovCi0vKiBjYW4gc2VpemUgY29udHJvbCBvZiB0aGUgZGV2aWNlLiAgVGhlIGRyYXdi YWNrIGlzIHRoYXQgaXQgbWlnaHQgbm90IHdvcmsuICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0dGhh bmcgY2xvc2Uob3BlbigpKSwgT1BFTkZMR1MiLCIiLE9QRU5GTEdTKTsKLSAgICBjbG9zZShwcml2 X29wbih0dG5tc3YsIE9QRU5GTEdTKSk7Ci0KLSNlbHNlCi0vKiBUaGlzIG1ldGhvZCBpcyB1c2Vk IGlmIHlvdSAjZGVmaW5lIENMU09QTi4gIEl0IGlzIG1vcmUgbGlrZWx5IHRvIHdvcmsgKi8KLS8q IHRoYW4gdGhlIHByZXZpb3VzIG1ldGhvZCwgYnV0IGl0J3MgYWxzbyBtb3JlIGRhbmdlcm91cy4g Ki8KLQotICAgIGRlYnVnKEYxMDEsInR0aGFuZyBjbG9zZS9vcGVuLCBPUEVORkxHUyIsIiIsT1BF TkZMR1MpOwotICAgIGNsb3NlKHR0eWZkKTsKLSAgICBtc2xlZXAoMTApOwotICAgIHR0eWZkID0g cHJpdl9vcG4odHRubXN2LCBPUEVORkxHUyk7CS8qIE9wZW4gaXQgYWdhaW4gKi8KLSNlbmRpZiAv KiBDTFNPUE4gKi8KLSN1bmRlZiBPUEVORkxHUwotCi0jZW5kaWYgLyogU0NPMzIgKi8KLSNlbmRp ZiAvKiBBVFQ3MzAwICovCi0KLSNlbmRpZiAvKiBOT0NPVEZNQyAqLwotCi0vKiBOb3cgcHV0IGFs bCBmbGFncyAmIG1vZGVzIGJhY2sgdGhlIHdheSB3ZSBmb3VuZCB0aGVtLiAqLwotLyogKERvZXMg dGhlIG9yZGVyIG9mIGlvY3RsICYgZmNudGwgbWF0dGVyID8gKSAqLwotCi0gICAgZGVidWcoRjEw MCwidHRoYW5nIHJlc3RvcmUgc2V0dGluZ3MiLCIiLDApOwotICAgIHR0Y3VyLmNfY2ZsYWcgPSB0 dGNfc2F2ZTsJCS8qIEdldCBvbGQgc3BlZWQgYmFjay4gKi8KLSAgICBpZiAoaW9jdGwodHR5ZmQs VENTRVRBRiwmdHRjdXIpIDwgMCkgLyogaW9jdGwgcGFyYW1ldGVycy4gKi8KLSAgICAgIHJldHVy bigtMSk7Ci0jaWZkZWYgT19OREVMQVkKLS8qCi0gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIElCTSBS VCBhbmQgUlMvNjAwMCwgcHJvYmFibHkgaGVscHMgZWxzZXdoZXJlIHRvbyAoPykuCi0gIEFmdGVy IGNsb3NpbmcgYSBtb2RlbSBsaW5lLCB0aGUgbW9kZW0gd2lsbCBwcm9iYWJseSBub3QgYmUgYXNz ZXJ0aW5nCi0gIGNhcnJpZXIgYW55IG1vcmUsIHNvIHdlIHNob3VsZCBub3QgcmVxdWlyZSBjYXJy aWVyIGFueSBtb3JlLiAgSWYgdGhpcwotICBjYXVzZXMgdHJvdWJsZSBvbiBub24tSUJNIFVOSVhl cywgY2hhbmdlIHRoZSAjaWZkZWYgdG8gdXNlIF9JQk1SMiByYXRoZXIKLSAgdGhhbiBPX05ERUxB WS4KLSovCi0gICAgZmxhZ3MgJj0gfk9fTkRFTEFZOwkJCS8qIERvbid0IHJlcXVpcmUgY2Fycmll ciBvbiByZW9wZW4gKi8KLSNlbmRpZiAvKiBPX05ERUxBWSAqLwotICAgIGlmIChmY250bCh0dHlm ZCxGX1NFVEZMLGZsYWdzKSA8IDApCS8qIGZjbnRsIHBhcmFtZXRlcnMgKi8KLSAgICAgIHJldHVy bigtMSk7Ci0KLSAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogbm90IEhQVVggKi8KLSNlbmRpZiAv KiBBVFRTViAqLwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotI2VuZGlmIC8qIEhVUF9QT1NJ WCAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLX0KLQotLyoKLSAgTWFqb3IgY2hhbmdlIGluIDVB KDE3NCkuICBXZSB1c2VkIHRvIHVzZSBMUEFTUzgsIGlmIGl0IHdhcyBkZWZpbmVkLCB0bwotICBh bGxvdyA4LWJpdCBkYXRhIGFuZCBYb24vWG9mZiBmbG93IGNvbnRyb2wgYXQgdGhlIHNhbWUgdGlt ZS4gIEJ1dCB0aGlzCi0gIExQQVNTOCBidXNpbmVzcyBzZWVtcyB0byBoYXZlIGJlZW4gY2F1c2lu ZyB0cm91YmxlIGZvciBldmVyeWJvZHkgYnV0IG1lIQotICBGb3IgZXhhbXBsZSwgQW5uZXggdGVy bWluYWwgc2VydmVycywgY29tbW9ubHkgdXNlZCB3aXRoIEVuY29yZSBjb21wdXRlcnMsCi0gIGRv IG5vdCBzdXBwb3J0IExQQVNTOCBldmVuIHRob3VnaCB0aGUgRW5jb3JlIGl0c2VsZiBkb2VzLiAg RGl0dG8gZm9yIG1hbnkKLSAgb3RoZXIgdGVybWluYWwgc2VydmVycywgVEVMTkVUIGNvbm5lY3Rp b25zLCBybG9naW4gY29ubmVjdGlvbnMsIGV0YyBldGMuCi0gIE5vdywgcmVwb3J0ZWRseSwgZXZl biB2YW5pbGxhIDQuMyBCU0Qgc3lzdGVtcyBjYW4ndCBkbyB0aGlzIHJpZ2h0IG9uIHRoZWlyCi0g IHNlcmlhbCBsaW5lcywgZXZlbiB0aG91Z2ggTFBBU1M4IGlzIGEgZmVhdHVyZSBvZiA0LjNCU0Qu ICBTbyBsZXQncyB0dXJuIGl0Ci0gIG9mZiBmb3IgZXZlcnlib2R5LiAgVGhhdCBtZWFucyB3ZSBn b2VzIGJhY2sgdG8gdXNpbmcgcmF3IG1vZGUsIHdpdGggbm8KLSAgZmxvdyBjb250cm9sLiAgUGhv b2V5LgotCi0gIE5PVEU6IFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgZmlyc3QgcmVmZXJl bmNlIHRvIExQQVNTOCBpbiB0aGlzIGZpbGUsCi0gIGFuZCBhZnRlciB0aGUgbGFzdCAjaW5jbHVk ZSBzdGF0bWVudC4KLSovCi0jaWZkZWYgTFBBU1M4Ci0jdW5kZWYgTFBBU1M4Ci0jZW5kaWYgLyog TFBBU1M4ICovCi0KLS8qICBUIFQgUiBFIFMgIC0tICBSZXN0b3JlIHRlcm1pbmFsIHRvICJub3Jt YWwiIG1vZGUuICAqLwotCi0vKiBza2VAcGttYWIuc2U6IFRoZXJlIGFyZSB0d28gY2hvaWNlcyBm b3Igd2hhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBkby4KLSAqICgxKSBSZXN0b3JlIHRoZSB0dHkg dG8gY3VycmVudCAibm9ybWFsIiBtb2RlLCB3aXRoIGNhcnJpZXIgdHJlYXRtZW50Ci0gKiBhY2Nv cmRpbmcgdG8gdHRjYXJyLCB0byBiZSB1c2VkIGFmdGVyIGV2ZXJ5IGtlcm1pdCBjb21tYW5kLiAo MikgUmVzdG9yZQotICogdGhlIHR0eSB0byB0aGUgc3RhdGUgaXQgd2FzIGluIGJlZm9yZSBrZXJt aXQgb3BlbmVkIGl0LiBUaGVzZSBjaG9pY2VzCi0gKiBjb25mbGljdCwgc2luY2UgdHRvbGQgY2Fu J3QgaG9sZCBib3RoIGNob2ljZXMgb2YgdHR5IHBhcmFtZXRlcnMuICB0dHJlcygpCi0gKiBpcyBj dXJyZW50bHkgYmVpbmcgY2FsbGVkIGFzIGluIGNob2ljZSAoMSksIGJ1dCB0dG9sZCBiYXNpY2Fs bHkgaG9sZHMKLSAqIHRoZSBpbml0aWFsIHBhcmFtZXRlcnMsIGFzIGluICgyKSwgYW5kIHRoZSBk ZXNjcmlwdGlvbiBhdCB0aGUgYmVnaW5uaW5nCi0gKiBvZiB0aGlzIGZpbGUgc2F5cyAoMikuCi0g KgotICogSSBkb24ndCB0aGluayByZXN0b3JpbmcgdHR5IHBhcmFtZXRlcnMgYWZ0ZXIgYWxsIGtl cm1pdCBjb21tYW5kcyBtYWtlcwotICogbXVjaCBvZiBhIGRpZmZlcmVuY2UuICBSZXN0b3Jpbmcg dGhlbSB1cG9uIGV4aXQgZnJvbSBrZXJtaXQgbWF5IGJlIG9mCi0gKiBzb21lIHVzZSBpbiBzb21l IGNhc2VzICh3aGVuIHRoZSBsaW5lIGlzIG5vdCByZXN0b3JlZCBhdXRvbWF0aWNhbGx5IG9uCi0g KiBjbG9zZSwgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0pLgotICoKLSAqIEkgY2FuJ3QgY2hvb3Nl IHdoaWNoIG9uZSBpdCBzaG91bGQgYmUsIHNvIEkgaGF2ZW4ndCBjaGFuZ2VkIGl0LiBJdAotICog cHJvYmFibHkgd29ya3MgYXMgaXQgaXMsIHRvby4gSXQgd291bGQgcHJvYmFibHkgZXZlbiB3b3Jr IGV2ZW4gd2l0aAotICogdHRyZXMoKSBlbnRpcmVseSBkZWxldGVkLi4uCi0gKgotICogKGZyb20g ZmRjOiBBY3R1YWxseSwgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBpbiByZW1vdGUgbW9kZSB0b28s IHNvCi0gKiBpdCByZXN0b3JlcyB0aGUgY29uc29sZSAoY29tbWFuZCkgdGVybWluYWwgdG8gd2hh dGV2ZXIgbW9kZSBpdCB3YXMKLSAqIGluIGJlZm9yZSBwYWNrZXQgb3BlcmF0aW9ucyBiZWdhbiwg c28gdGhhdCBjb21tYW5kcyB3b3JrIHJpZ2h0IGFnYWluLikKLSAqLwotaW50Ci10dHJlcygpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSB0aGUgdHR5IHRvIG5vcm1h bC4gKi8KLSAgICBpbnQgeDsKLQotICAgIGlmICh0dHlmZCA8IDApIHJldHVybigtMSk7ICAgICAg ICAgIC8qIE5vdCBvcGVuLiAqLwotCi0gICAgaWYgKHR0ZmRmbGcpIHJldHVybigwKTsJCS8qIERv bid0IG1lc3Mgd2l0aCB0ZXJtaW5hbCBtb2RlcyBpZiAqLwotCQkJCQkvKiB3ZSBnb3QgdHR5ZmQg ZnJvbSBhbm90aGVyIHByb2Nlc3MgKi8KLSNpZmRlZglORVRDT05OCi0gICAgaWYgKG5ldGNvbm4p IHsJCQkvKiBOZXR3b3JrIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgdHZ0ZmxnID0gMDsKLSNpZmRl ZiBUQ1BTT0NLRVQKLSNpZmRlZiBUQ1BfTk9ERUxBWQotICAgICAgICB7Ci0JICAgIGV4dGVybiBp bnQgdGNwX25vZGVsYXk7CS8qIEp1c3QgcHV0IHRoaXMgYmFjayBpZiBuZWNlc3NhcnkgKi8KLQkg ICAgaWYgKHR0bmV0ID09IE5FVF9UQ1BCKSB7Ci0JCWlmIChub2RlbGF5X3NhdiA+IC0xKSB7Ci0J CSAgICBub19kZWxheSh0dHlmZCxub2RlbGF5X3Nhdik7Ci0JCSAgICBub2RlbGF5X3NhdiA9IC0x OwotCQl9Ci0JICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCi0jaWZk ZWYgVE5fQ09NUE9SVAotICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgewotICAgICAgICAgICAg aW50IHJjID0gLTE7Ci0gICAgICAgICAgICBpZiAoKHJjID0gdG5zZXRmbG93KHR0ZmxvdykpIDwg MCkKLQkgICAgICByZXR1cm4ocmMpOwotICAgICAgICAgICAgaWYgKHR0c3BlZWQgPD0gMCkgCi0J ICAgICAgdHRzcGVlZCA9IHRuY19nZXRfYmF1ZCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoKHJj ID0gdG5jX3NldF9iYXVkKHR0c3BlZWQpKSA8IDApCi0JICAgICAgcmV0dXJuKHJjKTsKLSAgICAg ICAgICAgIHRuY19zZXRfZGF0YXNpemUoOCk7Ci0JICAgIHRuY19zZXRfc3RvcHNpemUoc3RvcGJp dHMpOwotCi0jaWZkZWYgSFdQQVJJVFkKLSAgICAgICAgICAgIGlmIChod3Bhcml0eSkgewotICAg ICAgICAgICAgICAgIHN3aXRjaCAoaHdwYXJpdHkpIHsKLQkJICBjYXNlICdlJzoJCQkvKiBFdmVu ICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyArIGV2ZW4g cGFyaXR5IiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoMyk7Ci0g ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkgIGNhc2UgJ28nOgkJCS8qIE9kZCAqLwotICAg ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBvZGQgcGFyaXR5Iiwi IiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoMik7Ci0gICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotCQkgIGNhc2UgJ20nOgkJCS8qIE1hcmsgKi8KLSAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgaW52YWxpZCBwYXJpdHk6IG1hcmsi LCIiLDApOwotICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSg0KTsKLSAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0JCSAgY2FzZSAncyc6CQkJLyogU3BhY2UgKi8KLSAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgaW52YWxpZCBwYXJpdHk6IHNw YWNlIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoNSk7Ci0gICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g ZWxzZQotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0JICAgIHsKLSAgICAgICAgICAgICAgICB0bmNf c2V0X3Bhcml0eSgxKTsgICAgICAgICAgICAgIC8qIE5vbmUgKi8KLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIHR2dGZsZyA9IDA7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0K LSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0JcmV0dXJu KDApOwotICAgIH0KLSNlbmRpZgkvKiBORVRDT05OICovCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYg KHR0cGlwZSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQot ICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotCi0vKiBSZWFs IHRlcm1pbmFsIGRldmljZSwgc28gcmVzdG9yZSBpdHMgb3JpZ2luYWwgbW9kZXMgKi8KLQotI2lm ZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIEZvciBQT1NJWCBsaWtlIHRoaXMgKi8KLSAgICBkZWJ1ZyhG MTAwLCJ0dHJlcyBCU0Q0NE9SUE9TSVgiLCIiLDApOwotICAgIHggPSB0Y3NldGF0dHIodHR5ZmQs VENTQURSQUlOLCZ0dG9sZCk7Ci0jZWxzZQkJCQkJLyogRm9yIGFsbCBvdGhlcnMuLi4gKi8KLSNp ZmRlZiBBVFRTViAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgQVQmVCB2ZXJzaW9u cy4uLiAqLwotICAgIGRlYnVnKEYxMDAsInR0cmVzIEFUVFNWIiwiIiwwKTsKLSAgICB4ID0gaW9j dGwodHR5ZmQsVENTRVRBVywmdHRvbGQpOwkvKiBSZXN0b3JlIHR0eSBtb2RlcyB0aGlzIHdheS4g Ki8KLSNlbHNlCi0vKiBIZXJlIHdlIHJlc3RvcmUgdGhlIG1vZGVzIGZvciBCU0QgKi8KLQotI2lm ZGVmIExQQVNTOAkJCQkvKiBVbmRvICJwYXNzOCIgaWYgaXQgd2VyZSBkb25lICovCi0gICAgaWYg KGxtb2RlZikgewotCWlmIChpb2N0bCh0dHlmZCxUSU9DTFNFVCwmbG1vZGUpIDwgMCkKLQkgIGRl YnVnKEYxMDAsInR0cmVzIFRJT0NMU0VUIGZhaWxlZCIsIiIsMCk7Ci0JZWxzZQotCSAgZGVidWco RjEwMCwidHRyZXMgVElPQ0xTRVQgb2siLCIiLDApOwotICAgIH0KLSNlbmRpZiAvKiBMUEFTUzgg Ki8KLQotI2lmZGVmIENLX0RUUkNUUwkJICAgLyogVW5kbyBoYXJkd2FyZSBmbG93IGlmIGl0IHdl cmUgZG9uZSAqLwotICAgIGlmIChsbW9kZWYpIHsKLSAJaWYgKGlvY3RsKHR0eWZkLFRJT0NMU0VU LCZsbW9kZSkgPCAwKQotIAkgIGRlYnVnKEYxMDAsInR0cmVzIFRJT0NMU0VUIGZhaWxlZCIsIiIs MCk7Ci0gCWVsc2UKLSAJICBkZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9DTFNFVCBvayIsIiIsMCk7Ci0g ICAgfQotI2VuZGlmIC8qIENLX0RUUkNUUyAqLwotCi0jaWZkZWYgVElPQ0dFVEMJCQkJLyogUHV0 IGJhY2sgc3BlY2lhbCBjaGFyYWN0ZXJzICovCi0gICAgaWYgKHRjaGFyZiAmJiAoeGxvY2FsID09 IDApKSB7Ci0JaWYgKGlvY3RsKHR0eWZkLFRJT0NTRVRDLCZ0Y2hvbGQpIDwgMCkKLQkgIGRlYnVn KEYxMDAsInR0cmVzIFRJT0NTRVRDIGZhaWxlZCIsIiIsMCk7Ci0JZWxzZQotCSAgZGVidWcoRjEw MCwidHRyZXMgVElPQ1NFVEMgb2siLCIiLDApOwotICAgIH0KLSNlbmRpZiAvKiBUSU9DR0VUQyAq LwotCi0jaWZkZWYgVElPQ0dMVEMJCQkJLyogUHV0IGJhY2sgbG9jYWwgc3BlY2lhbCBjaGFyYWN0 ZXJzICovCi0gICAgaWYgKGx0Y2hhcmYgJiYgKHhsb2NhbCA9PSAwKSkgewotCWlmIChpb2N0bCh0 dHlmZCxUSU9DU0xUQywmbHRjaG9sZCkgPCAwKQotCSAgZGVidWcoRjEwMCwidHRyZXMgVElPQ1NM VEMgZmFpbGVkIiwiIiwwKTsKLQllbHNlCi0JICBkZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9DU0xUQyBv ayIsIiIsMCk7Ci0gICAgfQotI2VuZGlmIC8qIFRJT0NHTFRDICovCi0KLSNpZmRlZiBCRUxMVjEw Ci0gICAgZGVidWcoRjEwMCwidHRyZXMgQkVMTFYxMCIsIiIsMCk7Ci0gICAgeCA9IGlvY3RsKHR0 eWZkLFRJT0NTRVRQLCZ0dG9sZCk7CS8qIFJlc3RvcmUgYm90aCBzdHJ1Y3RzICovCi0gICAgeCA9 IGlvY3RsKHR0eWZkLFRJT0NTREVWLCZ0ZG9sZCk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAsInR0 cmVzIHN0dHkiLCIiLDApOwotICAgIHggPSBzdHR5KHR0eWZkLCZ0dG9sZCk7ICAgICAgICAgICAg IC8qIFJlc3RvcmUgdHR5IG1vZGVzIHRoZSBvbGQgd2F5LiAqLwotI2VuZGlmIC8qIEJFTExWMTAg Ki8KLQotICAgIGlmICgheGxvY2FsKQotICAgICAgbXNsZWVwKDEwMCk7CQkJLyogVGhpcyByZXBs YWNlcyBzbGVlcCgxKS4uLiAqLwotCQkJCQkvKiBQdXQgYmFjayBzbGVlcCgxKSBpZiB0dHkgaXMg Ki8KLQkJCQkJLyogbWVzc2VkIHVwIGFmdGVyIGNsb3NlLiAqLwotI2VuZGlmIC8qIEFUVFNWICov Ci0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0dHJlcyByZXN1 bHQiLCIiLHgpOwotI2lmbmRlZiBRTlgKLSAgICBpZiAoeCA8IDApIGRlYnVnKEYxMDEsInR0cmVz IGVycm5vIiwiIixlcnJubyk7Ci0jZW5kaWYgLyogUU5YICovCi0KLSNpZmRlZiBBSVhSUwotI2lm bmRlZiBBSVg0MQotICAgIHggPSBpb2N0bCh0dHlmZCwgdHRsZCAmIDEgPyBUWEFERENEIDogVFhE RUxDRCwgInJ0cyIpOwotICAgIGRlYnVnKEYxMDEsInR0cmVzIEFJWCBsaW5lIGRpc2NpcGxpbmUg cnRzIHJlc3RvcmUiLCIiLHgpOwotI2VuZGlmIC8qIEFJWDQxICovCi0jZW5kaWYgLyogQUlYUlMg Ki8KLQotI2lmZGVmIEJTRDQxCi0gICAgaWYgKHR0bGQgPiAtMSkgewkJCS8qIFB1dCBiYWNrIGxp bmUgZGlzY2lwbGluZSAqLwotCXggPSBpb2N0bCh0dHlmZCwgVElPQ1NFVEQsICZ0dGxkKTsKLQlk ZWJ1ZyhGMTAxLCJ0dHJlcyBCU0Q0MSBsaW5lIGRpc2NpcGxpbmUgcmVzdG9yZSIsIiIseCk7Ci0J aWYgKHggPCAwKSBkZWJ1ZyhGMTAxLCIuLi5pb2N0bCBlcnJubyIsIiIsZXJybm8pOwotCXR0bGQg PSAtMTsKLSAgICB9Ci0jZW5kaWYgLyogQlNENDEgKi8KLQotI2lmZGVmIHNvbnlfbmV3cwotICAg IHggPSB4bG9jYWwgPyBrbV9leHQgOiBrbV9jb247CS8qIFJlc3RvcmUgS2FuamkgbW9kZS4gKi8K LSAgICBpZiAoeCAhPSAtMSkgewkJCS8qIE1ha2Ugc3VyZSB3ZSBrbm93IG9yaWdpbmFsIG1vZGVz LiAqLwotCWlmIChpb2N0bCh0dHlmZCxUSU9DS1NFVCwgJngpIDwgMCkgewotCSAgICBwZXJyb3Io InR0cmVzIGNhbid0IHNldCBLYW5qaSBtb2RlIik7Ci0JICAgIGRlYnVnKEYxMDEsInR0cmVzIGVy cm9yIHNldHRpbmcgS2FuamkgbW9kZSIsIiIseCk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotICAg IH0KLSAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyBzZXQgS2FuamkgbW9kZSBvayIsIiIsMCk7Ci0jZW5k aWYgLyogc29ueV9uZXdzICovCi0KLSAgICB0dnRmbGcgPSAwOwkJCQkvKiBJbnZhbGlkYXRlIHRl cm1pbmFsIG1vZGUgc2V0dGluZ3MgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dHJlcyByZXR1cm4gY29k ZSIsIiIseCk7Ci0gICAgcmV0dXJuKHgpOwotfQotCi0jaWZuZGVmIE5PVVVDUAotCi0vKiAgVCBU IEMgSCBLIFAgSSBEICAtLSAgQ2hlY2sgbG9ja2ZpbGUgcGlkICAqLwotLyoKLSAgUmVhZCBwaWQg ZnJvbSBsb2NrZmlsZSBuYW1lZCBmLCBjaGVjayB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQuCi0gIElm IHNvLCByZXR1cm4gMS4KLSAgT24gZmFpbHVyZSB0byByZWFkIHBpZCwgcmV0dXJuIDEuCi0gIE90 aGVyd2lzZSwgdHJ5IHRvIGRlbGV0ZSBsb2NrZmlsZSBmIGFuZCByZXR1cm4gMCBpZiBzdWNjZXNz ZnVsLCBlbHNlIDEuCi0qLwotc3RhdGljIGludAotdHRjaGtwaWQoZikgY2hhciAqZjsgewotICAg IGludCBwaWQsIG15cGlkLCB4OwotICAgIHBpZCA9IHR0cnBpZChmKTsJCQkvKiBSZWFkIHBpZCBm cm9tIGZpbGUuICovCi0gICAgaWYgKHBpZCA+IC0xKSB7CQkJLyogSWYgd2Ugd2VyZSBhYmxlIHRv IHJlYWQgdGhlIHBpZC4uICovCi0JZGVidWcoRjEwMSwidHRjaGtwaWQgbG9jayBwaWQiLCIiLHBp ZCk7Ci0JZXJybm8gPSAwOwkJCS8qIFNlZSBpZiBwcm9jZXNzIHN0aWxsIGV4aXN0cy4gKi8KLQlt eXBpZCA9IChpbnQpZ2V0cGlkKCk7CQkvKiBHZXQgbXkgb3duIHBpZC4gKi8KLQlkZWJ1ZyhGMTAx LCJ0dGNoa3BpZCBteSBwaWQiLCIiLG15cGlkKTsKLQlpZiAocGlkID09IG15cGlkKSB7CQkvKiBJ dCdzIG1lISAqLwotCSAgICB4ID0gLTE7CQkJLyogU28gSSBjYW4gZGVsZXRlIGl0ICovCi0JICAg IGVycm5vID0gRVNSQ0g7CQkvKiBwcmV0ZW5kIGl0J3MgaW52YWxpZCAqLwotCX0gZWxzZSB7CQkJ LyogSXQncyBub3QgbWUgKi8KLQkgICAgeCA9IGtpbGwoKFBJRF9UKXBpZCwgMCk7CS8qIFNlZSBp ZiBpdCdzIGEgbGl2ZSBwcm9jZXNzICovCi0JICAgIGRlYnVnKEYxMDEsInR0Y2hrcGlkIGtpbGwg ZXJybm8iLCIiLGVycm5vKTsKLQl9Ci0JZGVidWcoRjEwMSwidHRjaGtwaWQgcGlkIHRlc3QiLCIi LHgpOwotCWlmICh4IDwgMCAmJiBlcnJubyA9PSBFU1JDSCkgeyAvKiBwaWQgaXMgaW52YWxpZCAq LwotCSAgICBkZWJ1ZyhGMTExLCJyZW1vdmluZyBzdGFsZSBsb2NrIixmLHBpZCk7Ci0JICAgIGlm ICghYmFja2dyZCkKLQkgICAgICBwcmludGYoIlJlbW92aW5nIHN0YWxlIGxvY2sgJXMgKHBpZCAl ZCB0ZXJtaW5hdGVkKVxuIiwgZiwgcGlkKTsKLQkgICAgcHJpdl9vbigpOwotCSAgICB4ID0gdW5s aW5rKGYpOwkJLyogUmVtb3ZlIHRoZSBsb2NrZmlsZS4gKi8KLQkgICAgcHJpdl9vZmYoKTsKLQkg ICAgZGVidWcoRjExMSwidHRjaGtwaWQgdW5saW5rIixmLHgpOwotCSAgICBpZiAoeCA+IC0xKQot CSAgICAgIHJldHVybigwKTsJCS8qIERldmljZSBpcyBub3QgbG9ja2VkIGFmdGVyIGFsbCAqLwot CSAgICBlbHNlIGlmICghYmFja2dyZCkKLQkgICAgICBwZXJyb3IoZik7Ci0JfQotCXJldHVybigx KTsKLSAgICB9Ci0gICAgcmV0dXJuKDEpOwkJCQkvKiBGYWlsdXJlIHRvIHJlYWQgcGlkICovCi19 Ci0KLSNpZmRlZiBIUFVYCi0KLS8qIEFsaWFzZXMgKGRpZmZlcmVudCBkcml2ZXJzKSBmb3IgSFAt VVggZGlhbG91dCBkZXZpY2VzOiAqLwotCi1zdGF0aWMgY2hhciAqZGV2cHJlZml4W10gPSB7ICJ0 dHkiLCAidHR5ZCIsICJjdWwiLCAiY3VhIiwgImN1YWQiLCAiY3VsZCIsICIiIH07Ci1zdGF0aWMg aW50IHR0eWRleGlzdHMgPSAwOwotCi0jZW5kaWYgLyogSFBVWCAqLwotCi0vKiAgVCBUIFIgUCBJ IEQgIC0tICBSZWFkIHBpZCBmcm9tIGxvY2tmaWxlICJuYW1lIiAqLwotCi1zdGF0aWMgaW50Ci10 dHJwaWQobmFtZSkgY2hhciAqbmFtZTsgewotICAgIGxvbmcgbGVuOwotICAgIGludCB4LCBmZCwg cGlkOwotICAgIHNob3J0IHNwaWQ7Ci0gICAgY2hhciBidWZbMzJdOwotCi0gICAgZGVidWcoRjEx MCwidHRycGlkIixuYW1lLDApOwotICAgIGlmICghbmFtZSkgcmV0dXJuKC0xKTsKLSAgICBpZiAo ISpuYW1lKSByZXR1cm4oLTEpOwotICAgIHByaXZfb24oKTsKLSAgICBsZW4gPSB6Y2hraShuYW1l KTsJCQkvKiBHZXQgZmlsZSBsZW5ndGggKi8KLSAgICBwcml2X29mZigpOwotICAgIGRlYnVnKEYx MDEsInR0cnBpZCB6Y2hraSIsIiIsbGVuKTsKLSAgICBpZiAobGVuIDwgMCkKLSAgICAgIHJldHVy bigtMSk7Ci0gICAgaWYgKGxlbiA+IDMxKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBwcml2X29u KCk7Ci0gICAgZmQgPSBvcGVuKG5hbWUsT19SRE9OTFkpOwkJLyogVHJ5IHRvIG9wZW4gbG9ja2Zp bGUuICovCi0gICAgcHJpdl9vZmYoKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHJwaWQgZmQiLCIiLGZk KTsKLSAgICBpZiAoZmQgPD0gMCkKLSAgICAgIHJldHVybigtMSk7Ci0vKgotICBIZXJlIHdlIHRy eSB0byBiZSBmbGV4aWJsZSBhbmQgYWxsb3cgZm9yIGFsbCBkaWZmZXJlbnQgYmluYXJ5IGFuZCBz dHJpbmcKLSAgZm9ybWF0cyBhdCBydW50aW1lLCByYXRoZXIgdGhhbiBhIHNwZWNpZmljIGZvcm1h dCBmb3IgZWFjaCBjb25maWd1cmF0aW9uCi0gIGhhcmR3aXJlZCBhdCBjb21waWxlIHRpbWUuCi0q LwotICAgIHBpZCA9IC0xOwotI2lmbmRlZiBDT0hFUkVOVAotLyoKLSAgQ09IRVJFTlQgdXNlcyBh IHN0cmluZyBQSUQgYnV0IHdpdGhvdXQgbGVhZGluZyBzcGFjZXMgb3IgMCdzLCBzbyB0aGVyZSBp cwotICBubyB3YXkgdG8gdGVsbCBmcm9tIHRoZSBmaWxlJ3MgbGVuZ3RoIHdoZXRoZXIgaXQgY29u dGFpbnMgYSBzdHJpbmcgb3IgYmluYXJ5Ci0gIHBpZC4gIFNvIGZvciBDT0hFUkVOVCBvbmx5LCB3 ZSBvbmx5IGFsbG93IHN0cmluZyBwaWRzLiAgRm9yIGFsbCBvdGhlcnMsIHdlCi0gIGRlY2lkZSBi YXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgbG9ja2ZpbGUuCi0qLwotICAgIGlmIChsZW4gPiA0KSB7 CQkJLyogSWYgZmlsZSA+IDQgYnl0ZXMgaXQncyBhIHN0cmluZyAqLwotI2VuZGlmIC8qIENPSEVS RU5UICovCi0JeCA9IHJlYWQoZmQsYnVmLChpbnQpbGVuKTsKLQlkZWJ1ZyhGMTExLCJ0dHJwaWQg c3RyaW5nIHJlYWQiLGJ1Zix4KTsKLQlpZiAoeCA8IDApIHsKLQkgICAgcGlkID0gLTE7Ci0JfSBl bHNlIHsKLQkgICAgYnVmWzMxXSA9ICdcMCc7Ci0JICAgIHggPSBzc2NhbmYoYnVmLCIlZCIsJnBp ZCk7CS8qIEdldCB0aGUgaW50ZWdlciBwaWQgZnJvbSBpdC4gKi8KLQl9Ci0jaWZuZGVmIENPSEVS RU5UCi0gICAgfSBlbHNlIGlmIChsZW4gPT0gNCkgewkJLyogNCBieXRlcyBzbyBiaW5hcnkgKi8K LQl4ID0gcmVhZChmZCwgKGNoYXIgKikmcGlkLCA0KTsJLyogUmVhZCB0aGUgYnl0ZXMgaW50byBh biBpbnQgKi8KLQlkZWJ1ZyhGMTAxLCJ0dHJwaWQgaW50ZWdlciByZWFkIiwiIix4KTsKLQlpZiAo eCA8IDQpCi0JICBwaWQgPSAtMTsKLSAgICB9IGVsc2UgaWYgKGxlbiA9PSAyKSB7CQkvKiAyIGJ5 dGVzIGJpbmFyeSAqLwotCXggPSByZWFkKGZkLCAoY2hhciAqKSZzcGlkLCAyKTsJLyogUmVhZCB0 aGUgYnl0ZXMgaW50byBhIHNob3J0ICovCi0JZGVidWcoRjEwMSwidHRycGlkIHNob3J0IHJlYWQi LCIiLHgpOwotCWlmICh4IDwgMikKLQkgIHBpZCA9IC0xOwotCWVsc2UKLQkgIHBpZCA9IHNwaWQ7 Ci0gICAgfSBlbHNlCi0gICAgICBwaWQgPSAtMTsKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotICAg IGNsb3NlKGZkKTsJCQkJLyogQ2xvc2UgdGhlIGxvY2tmaWxlICovCi0gICAgZGVidWcoRjEwMSwi dHRycGlkIHBpZCIsIiIscGlkKTsKLSAgICByZXR1cm4ocGlkKTsKLX0KLSNlbmRpZiAvKiBOT1VV Q1AgKi8KLQotLyogIFQgVCBMIE8gQyBLICAqLwotCi0vKgotICBUaGlzIGZ1bmN0aW9uIGF0dGVt cHRzIHRvIGNvb3JkaW5hdGUgdXNlIG9mIHRoZSBjb21tdW5pY2F0aW9uIGRldmljZSB3aXRoCi0g IG90aGVyIGNvcGllcyBvZiBLZXJtaXQgYW5kIGFueSBvdGhlciBwcm9ncmFtIHRoYXQgZm9sbG93 cyB0aGUgVVVDUAotICBkZXZpY2UtbG9ja2luZyBjb252ZW50aW9ucywgd2hpY2gsIHVuZm9ydHVu YXRlbHksIHZhcnkgYW1vbmcgZGlmZmVyZW50IFVOSVgKLSAgaW1wbGVtZW50YXRpb25zLiAgVGhl IGlkZWEgaXMgdG8gbG9vayBmb3IgYSBmaWxlIG9mIGEgY2VydGFpbiBuYW1lLCB0aGUKLSAgImxv Y2tmaWxlIiwgaW4gYSBjZXJ0YWluIGRpcmVjdG9yeS4gIElmIHN1Y2ggYSBmaWxlIGlzIGZvdW5k LCB0aGVuIHRoZSBsaW5lCi0gIGlzIHByZXN1bWVkIHRvIGJlIGluIHVzZSwgYW5kIEtlcm1pdCBz aG91bGQgbm90IHVzZSBpdC4gIElmIG5vIHN1Y2ggZmlsZSBpcwotICBmb3VuZCwgS2VybWl0IGF0 dGVtcHRzIHRvIGNyZWF0ZSBvbmUgc28gdGhhdCBvdGhlciBwcm9ncmFtcyB3aWxsIG5vdCB1c2Ug dGhlCi0gIHNhbWUgbGluZSBhdCB0aGUgc2FtZSB0aW1lLiAgQmVjYXVzZSB0aGUgbG9ja2ZpbGUg YW5kL29yIHRoZSBkaXJlY3RvcnkgaXQncwotICBpbiBtaWdodCBsYWNrIHdyaXRlIHBlcm1pc3Np b24gZm9yIHRoZSBwZXJzb24gcnVubmluZyBLZXJtaXQsIEtlcm1pdCBjb3VsZAotICBmaW5kIGl0 c2VsZiBydW5uaW5nIHNldHVpZCB0byB1dWNwIG9yIG90aGVyIHVzZXIgdGhhdCBkb2VzIGhhdmUg dGhlCi0gIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucy4gIEF0IHN0YXJ0dXAsIEtlcm1pdCBoYXMgY2hh bmdlZCBpdHMgZWZmZWN0aXZlIHVpZCB0bwotICB0aGUgdXNlcidzIHJlYWwgdWlkLCBhbmQgc28g dHRsb2NrKCkgbXVzdCBzd2l0Y2ggYmFjayB0byB0aGUgb3JpZ2luYWwKLSAgZWZmZWN0aXZlIHVp ZCBpbiBvcmRlciB0byBjcmVhdGUgdGhlIGxvY2tmaWxlLCBhbmQgdGhlbiBiYWNrIGFnYWluIHRv IHRoZQotICByZWFsIHVpZCB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBhY2Nlc3MgdG8gb3RoZXIg ZGlyZWN0b3JpZXMgb3IgZmlsZXMgb3duZWQKLSAgYnkgdGhlIHVzZXIgdGhlIHByb2dyYW0gaXMg c2V0dWlkIHRvLgotCi0gIFRvdGFsbHkgcmV3cml0dGVuIGZvciBDLUtlcm1pdCA1QSB0byBlbGlt aW5hdGUgd2luZG93cyBvZiB2dWxuZXJhYmlsaXR5LAotICBiYXNlZCBvbiBzdWdnZXN0aW9ucyBm cm9tIFdhcnJlbiBUdWNrZXIuICBDYWxsIHdpdGggcG9pbnRlciB0byBuYW1lIG9mCi0gIHR0eSBk ZXZpY2UuICBSZXR1cm5zOgotCi0gICAwIG9uIHN1Y2Nlc3MKLSAgLTEgb24gZmFpbHVyZQotCi0g IE5vdGU6IE9uY2UgcHJpdmlsZWdlcyBhcmUgdHVybmVkIG9uIHVzaW5nIHByaXZfb24oKSwgaXQg aXMgZXNzZW50aWFsIHRoYXQKLSAgdGhleSBhcmUgdHVybmVkIG9mZiBhZ2FpbiBiZWZvcmUgdGhp cyBmdW5jdGlvbiByZXR1cm5zLgotKi8KLSNpZmRlZiBTVlI0CQkJCS8qIExvY2tmaWxlIHVzZXMg ZGV2aWNlIG51bWJlcnMuICovCi0vKgotICBBbHRob3VnaCBJIGNhbid0IGZpbmQgdGhpcyBpbiB3 cml0aW5nIGFueXdoZXJlIChlLmcuIGluIFNWSUQgZm9yIFNWUjQpLAotICBpdCBpcyB0aGUgYmVo YXZpb3Igb2YgdGhlICJyZWZlcmVuY2UgdmVyc2lvbiIgb2YgU1ZSNCwgaS5lLiB0aGUgSW50ZWwK LSAgcG9ydCBmcm9tIFVOSVggU3lzdGVtcyBMYWJvcmF0b3JpZXMsIHRoZW4gY2FsbGVkIFVuaXZl bCBVbml4V2FyZSwKLSAgdGhlbiBjYWxsZWQgTm92ZWxsIFVuaXhXYXJlLCB0aGVuIGNhbGxlZCBT Q08gVW5peHdhcmUsIHRoZW4gY2FsbGVkIENhbGRlcmEKLSAgT3BlbiBVTklYLi4uICBJdCBhbHNv IG1ha2VzIG11Y2ggbW9yZSBzZW5zZSB0aGFuIGRldmljZS1uYW1lLWJhc2VkIGxvY2tmaWxlcwot ICBzaW5jZSB0aGVyZSBjYW4gYmUgbXVsdGlwbGUgbmFtZXMgZm9yIHRoZSBzYW1lIGRldmljZSwg c3ltbGlua3MsIGV0Yy4KLSovCi0jaWZuZGVmIE5PTEZERVZOTwotI2lmbmRlZiBMRkRFVk5PCQkJ CS8qIERlZmluZSB0aGlzIGZvciBTVlI0ICovCi0jaWZuZGVmIEFJWFJTCQkJCS8qIEJ1dCBub3Qg Zm9yIFJTLzYwMDAgQUlYIDMuMiwgZXRjLiAqLwotI2lmbmRlZiBCU0Q0NAkJCQkvKiBJZiBhbnli b2R5IGVsc2UgbmVlZHMgaXQuLi4gKi8KLSNpZm5kZWYgX18zODZCU0RfXwotI2lmbmRlZiBfX0Zy ZWVCU0RfXwotI2lmbmRlZiBIUFVYMTAKLSNpZm5kZWYgSVJJWDUxCQkJCS8qIFNHSSBJUklYIDUu MSBvciBsYXRlciAqLwotI2lmbmRlZiBDS19TQ09WNQkJCS8qIFNDTyBPcGVuIFNlcnZlciA1LjAg Ki8KLSNkZWZpbmUgTEZERVZOTwotI2VuZGlmIC8qIENLX1NDT1Y1ICovCi0jZW5kaWYgLyogSVJJ WDUxICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYgLyogX19GcmVlQlNEX18gKi8KLSNl bmRpZiAvKiBfXzM4NkJTRF9fICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBBSVhS UyAqLwotI2VuZGlmIC8qIExGREVWTk8gKi8JCQkvKiAuLi4gZGVmaW5lIGl0IGhlcmUgb3Igb24g Q0MgKi8KLSNlbmRpZiAvKiBOT0xGREVWTk8gKi8KLSNlbmRpZiAvKiBTVlI0ICovCQkJLyogY29t bWFuZCBsaW5lLiAqLwotCi0jaWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUgTEZERVZOTwotI2VuZGlm IC8qIENPSEVSRU5UICovCi0KLS8qCi0gIEZvciBwbGF0Zm9ybXMgd2hlcmUgdGhlIGxvY2tmaWxl IG5hbWUgaXMgbWFkZSBmcm9tIGRldmljZS9tYWpvci9taW5vcgotICBkZXZpY2UgbnVtYmVyLCBh cyBpbiBTVlI0LiAgV2hpY2gsIGlmIHdlIG11c3QgaGF2ZSBsb2NrZmlsZXMgYXQgYWxsLCBpcwot ICBieSBmYXIgdGhlIGJlc3QgZm9ybWF0LCBzaW5jZSBpdCBlbGltaW5hdGVzIGFsbCB0aGUgY29u ZnVzaW9uIHRoYXQgc3RlbXMKLSAgZnJvbSBtdWx0aXBsZSBuYW1lcyAob3IgZHJpdmVycykgZm9y IHRoZSBzYW1lIHBvcnQsIG5vdCB0byBtZW50aW9uCi0gIHN5bWxpbmtzLiAgSXQgbWlnaHQgZXZl biBiZSBhIGdvb2QgaWRlYSB0byBzdGFydCB1c2luZyB0aGlzIGZvcm0gZXZlbgotICBvbiBwbGF0 Zm9ybXMgd2hlcmUgaXQncyBub3Qgc3VwcG9ydGVkLCBhbG9uZ3NpZGUgdGhlIG5vcm1hbCBmb3Jt cyBmb3IgdGhvc2UKLSAgcGxhdGZvcm1zLCBpbiBvcmRlciB0byBnZXQgcGVvcGxlIHVzZWQgdG8g aXQuLi4KLSovCi0jaWZkZWYgTEZERVZOTwotI2lmbmRlZiBtYWpvcgkJCQkvKiBJZiB3ZSBkaWRu J3QgZmluZCBpdCAqLwotI2lmZGVmIFNWUjQJCQkJLyogdGhlbiBmb3IgU3lzIFYgUjQgKi8KLSNp bmNsdWRlIDxzeXMvbWtkZXYuaD4JCQkvKiBsb29rIGhlcmUgKi8KLSNlbHNlCQkJCQkvKiBvciBm b3IgU3VuT1MgdmVyc2lvbnMgKi8KLSNpZmRlZiBTVU5PUzQJCQkJLyogLi4uICovCi0jaW5jbHVk ZSA8c3lzL3N5c21hY3Jvcy5oPgkJLyogbG9vayBoZXJlICovCi0jZWxzZQkJCQkJLyogT3RoZXJ3 aXNlIHRha2UgYSBjaGFuY2U6ICovCi0jZGVmaW5lCW1ham9yKGRldikgKCAoaW50KSAoICgodW5z aWduZWQpKGRldikgPj4gOCkgJiAweGZmKSkKLSNkZWZpbmUJbWlub3IoZGV2KSAoIChpbnQpICgg KGRldikgJiAweGZmKSkKLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNlbmRpZiAvKiBTVlI0ICovCi0j ZW5kaWYgLyogbWFqb3IgKi8KLSNlbmRpZiAvKiBMRkRFVk5PICovCi0KLS8qIE5vIGFkdmlzb3J5 IGxvY2tzIGlmIEZfVExPQ0sgYW5kIEZfVUxPQ0sgYXJlIG5vdCBkZWZpbmVkIGF0IHRoaXMgcG9p bnQgKi8KLQotI2lmZGVmIExPQ0tGCi0jaWZuZGVmIEZfVExPQ0sKLSN1bmRlZiBMT0NLRgotI2lm bmRlZiBOT0xPQ0tGCi0jZGVmaW5lIE5PTE9DS0YKLSNlbmRpZiAvKiBOT0xPQ0tGICovCi0jZW5k aWYgLyogRl9UTE9DSyAqLwotI2VuZGlmIC8qIExPQ0tGICovCi0KLSNpZmRlZiBMT0NLRgotI2lm bmRlZiBGX1VMT0NLCi0jdW5kZWYgTE9DS0YKLSNpZm5kZWYgTk9MT0NLRgotI2RlZmluZSBOT0xP Q0tGCi0jZW5kaWYgLyogTk9MT0NLRiAqLwotI2VuZGlmIC8qIEZfVUxPQ0sgKi8KLSNlbmRpZiAv KiBMT0NLRiAqLwotCi1zdGF0aWMgY2hhciBsaW5rdG9bREVWTkFNTEVOKzFdOwotc3RhdGljIGNo YXIgKiBsaW5rZGV2ID0gTlVMTDsKLQotI2lmbmRlZiBOT1VVQ1AKLSNpZmRlZiBVU0VUVFlMT0NL Ci0jaWZkZWYgTE9DS19ESVIKLWNoYXIgKiB1dWNwbG9ja2RpciA9IExPQ0tfRElSOwotI2Vsc2UK LWNoYXIgKiB1dWNwbG9ja2RpciA9ICIiOwotI2VuZGlmIC8qIExPQ0tfRElSICovCi0jZWxzZQot I2lmZGVmIExPQ0tfRElSCi1jaGFyICogdXVjcGxvY2tkaXIgPSBMT0NLX0RJUjsKLSNlbHNlCi1j aGFyICogdXVjcGxvY2tkaXIgPSAiIjsKLSNlbmRpZiAvKiBMT0NLX0RJUiAqLwotI2VuZGlmIC8q IFVTRVRUWUxPQ0sgKi8KLSNlbHNlCi1jaGFyICogdXVjcGxvY2tkaXIgPSAiIjsKLSNlbmRpZiAv KiBOT1VVQ1AgKi8KLQotI2lmZGVmIFFOWAkJCQkvKiBPbmx5IGZvciBRTlg0ICovCi1pbnQJCQkJ CS8qIFZpc2libGUgdG8gb3V0c2lkZSB3b3JsZCAqLwotcW54b3BlbmNvdW50KCkgewkJCS8qIEdl dCBRTlggZGV2aWNlIG9wZW4gY291bnQgKi8KLSAgICBzdHJ1Y3QgX2Rldl9pbmZvX2VudHJ5IGlu Zm87Ci0gICAgaW50IHg7Ci0KLSAgICB4ID0gLTE7CQkJCS8qIFVua25vd24gKi8KLSAgICBpZiAo dHR5ZmQgPiAtMSkgewotCWlmICghZGV2X2luZm8odHR5ZmQsICZpbmZvKSkgewotCSAgICBkZWJ1 ZyhGMTAxLCJ0dGxvY2sgUU5YIG9wZW5fY291bnQiLCIiLGluZm8ub3Blbl9jb3VudCk7Ci0JICAg IHggPSBpbmZvLm9wZW5fY291bnQ7Ci0JfQotICAgIH0KLSAgICByZXR1cm4oeCk7Ci19Ci0jZW5k aWYgLyogUU5YICovCi0KLWNoYXIgKgotdHRnbGNrZGlyKCkgewkJCQkvKiBHZXQgTG9ja2ZpbGUg ZGlyZWN0b3J5IG5hbWUgKi8KLSNpZmRlZiBfX09wZW5CU0RfXwotICAgIHJldHVybigiL3Zhci9z cG9vbC9sb2NrIik7Ci0jZWxzZSAvKiBfX09wZW5CU0RfXyAqLwotI2lmZGVmIF9fRnJlZUJTRF9f Ci0gICAgcmV0dXJuKCIvdmFyL3Nwb29sL2xvY2siKTsKLSNlbHNlICAvKiBfX0ZyZWVCU0RfXyAq LwotI2lmZGVmIExPQ0tfRElSCi0gICAgY2hhciAqIHMgPSBMT0NLX0RJUjsKLSNlbmRpZiAvKiBM T0NLX0RJUiAqLwotI2lmZGVmIE5PVVVDUAotICAgIHJldHVybigiIik7Ci0jZWxzZSAgLyogTk9V VUNQICovCi0jaWZkZWYgTE9DS19ESVIKLSAgICByZXR1cm4ocyk7Ci0jZWxzZSAgLyogTE9DS19E SVIgKi8KLSAgICByZXR1cm4oIiIpOwotI2VuZGlmIC8qIExPQ0tfRElSICovCi0jZW5kaWYgLyog Tk9VVUNQICovCi0jZW5kaWYgLyogX19GcmVlQlNEX18gKi8KLSNlbmRpZiAvKiBfX09wZW5CU0Rf XyAqLwotfQotCi1zdGF0aWMgaW50Ci10dGxvY2sodHRkZXYpIGNoYXIgKnR0ZGV2OyB7Ci0KLSAg ICBpbnQgeCwgbjsKLSAgICBpbnQgaXNsaW5rID0gMDsKLSNpZmRlZiBfX0ZyZWVCU0RfXwotICAg IGNoYXIgKmRldm5hbWU7Ci0jZW5kaWYJLyogX19GcmVlQlNEX18gKi8KLQotI2lmZGVmIE5PVVVD UAotICAgIGRlYnVnKEYxMDAsInR0bG9jayBOT1VVQ1AiLCIiLDApOwotICAgIGNrc3RybmNweShm bGZuYW0sIk5PTE9DSyIsRkxGTkFNTCk7Ci0gICAgaGFzbG9jayA9IDE7Ci0gICAgcmV0dXJuKDAp OwotI2Vsc2UgLyogIU5PVVVDUCAqLwotCi0jaWZkZWYgVVNFVFRZTE9DSwotICAgIGhhc2xvY2sg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBsb2NrZWQgeWV0LiAqLwotICAgICpm bGZuYW0gPSAnXDAnOwkJCS8qIExvY2tmaWxlIG5hbWUgaXMgZW1wdHkuICovCi0jaWZkZWYgX19G cmVlQlNEX18KLSAgICBpZiAoKGRldm5hbWUgPSB4eGxhc3QodHRkZXYsJy8nKSkgIT0gTlVMTCkK LSNpZmRlZiBGUkVFQlNEOAotICAgICAgY2tzdHJuY2F0KGxvY2tuYW1lLGRldm5hbWUrMSxERVZO QU1MRU4tY2tzdHJuY3B5KGxvY2tuYW1lLCJwdHMiLDQpKTsKLSNlbHNlCi0gICAgICBja3N0cm5j cHkobG9ja25hbWUsZGV2bmFtZSsxLERFVk5BTUxFTik7Ci0jZW5kaWYJLyogRlJFRUJTRDggKi8K LSNlbHNlCi0gICAgaWYgKCFzdHJuY21wKHR0ZGV2LCIvZGV2LyIsNSkgJiYgdHRkZXZbNV0pCi0g ICAgICBja3N0cm5jcHkobG9ja25hbWUsdHRkZXYrNSxERVZOQU1MRU4pOwotI2VuZGlmCS8qIF9f RnJlZUJTRF9fICovCi0gICAgZWxzZQotICAgICAgY2tzdHJuY3B5KGxvY2tuYW1lLHR0ZGV2LERF Vk5BTUxFTik7Ci0vKgotICBUaGlzIG1pZ2h0IGJlIG92ZXJraWxsLCBidXQgaXQncyBub3QgY2xl YXIgZnJvbSB0aGUgbWFuIHBhZ2VzIHdoZXRoZXIKLSAgdHR5bG9jaygpIGNhbiBiZSBjYWxsZWQg d2l0aG91dCBjYWxsaW5nIHR0eWxvY2tlZCgpIGZpcnN0LCBzaW5jZSB0aGUgZG9jCi0gIHNheXMg dGhhdCB0dHlsb2NrZWQoKSByZW1vdmVzIGFueSBzdGFsZSBsb2NrZmlsZXMsIGJ1dCBpdCBkb2Vz IG5vdCBzYXkgdGhpcwotICBhYm91dCB0dHlsb2NrKCkuICBBbHNvIHRoZSBkb2NzIGRvbid0IHNh eSB3aGF0IHR0eWxvY2tlZCgpIHJldHVybnMgaW4gdGhlCi0gIGNhc2Ugd2hlbiBpdCBmaW5kcyBh bmQgcmVtb3ZlcyBhIHN0YWxlIGxvY2tmaWxlLiAgU28gb25lIG9yIGJvdGggY2FsbHMgdG8KLSAg dG8gdHR5bG9ja2VkKCkgbWlnaHQgYmUgc3VwZXJmbHVvdXMsIGJ1dCB0aGV5IHNob3VsZCBkbyBu byBoYXJtLiAgQWxzbyBJJ20KLSAgYXNzdW1pbmcgdGhhdCB3ZSBoYXZlIHRvIGRvIGFsbCB0aGUg c2FtZSBJRCBzd2FwcGluZywgZXRjLCB3aXRoIHRoZXNlCi0gIHJvdXRpbmVzIGFzIHdlIGRvIHdp dGhvdXQgdGhlbS4gIFRodXMgdGhlIHByaXZfb24vb2ZmKCkgc2FuZHdpY2guCi0qLwotI2lmZGVm IFVTRV9VVV9MT0NLCi0gICAgcHJpdl9vbigpOwkJCQkvKiBUdXJuIG9uIHByaXZzICovCi0gICAg eCA9IHV1X2xvY2sobG9ja25hbWUpOwkJLyogVHJ5IHRvIHNldCB0aGUgbG9jayAqLwotICAgIHBy aXZfb2ZmKCk7CQkJCS8qIFR1cm4gcHJpdnMgb2ZmICovCi0gICAgZGVidWcoRjExMSwidHRsb2Nr IHV1X2xvY2siLGxvY2tuYW1lLHgpOwotICAgIHN3aXRjaCAoeCkgewotICAgICAgY2FzZSBVVV9M T0NLX0lOVVNFOgotCXJldHVybigtMik7Ci0gICAgICBjYXNlIFVVX0xPQ0tfT0s6Ci0jaWZkZWYg QlNENDQKLQlja21ha21zZyhmbGZuYW0sRkxGTkFNTCwiL3Zhci9zcG9vbC9sb2NrL0xDSy4uIixs b2NrbmFtZSxOVUxMLE5VTEwpOwotI2VuZGlmIC8qIEJTRDQ0ICovCi0JaGFzbG9jayA9IDE7Ci0J cmV0dXJuKDApOwotICAgICAgZGVmYXVsdDoKLQlyZXR1cm4oLTEpOwotICAgIH0KLSNlbHNlICAv KiBVU0VfVVVfTE9DSyAqLwotICAgIHByaXZfb24oKTsJCQkJLyogVHVybiBvbiBwcml2cyAqLwot ICAgIGlmICh0dHlsb2NrZWQobG9ja25hbWUpKSB7CQkvKiBUaGlzIHNob3VsZCByZW1vdmUgYW55 IHN0YWxlIGxvY2sgKi8KLQlpZiAodHR5bG9ja2VkKGxvY2tuYW1lKSkgewkvKiBzbyBjaGVjayBh Z2Fpbi4gKi8KLQkgICAgcHJpdl9vZmYoKTsKLQkgICAgcmV0dXJuKC01KTsJCQkvKiBTdGlsbCBs b2NrZWQsIGZhaWwuICovCi0JfQotICAgIH0KLSAgICB4ID0gdHR5bG9jayhsb2NrbmFtZSk7CQkv KiBMb2NrIGl0LiAqLwotICAgIHByaXZfb2ZmKCk7CQkJCS8qIFR1cm4gb2ZmIHByaXZzICovCi0K LSAgICBkZWJ1ZyhGMTExLCJ0dGxvY2sgbG9ja25hbWUiLGxvY2tuYW1lLHgpOwotICAgIGlmICh4 ID4gLTEpIHsKLQkvKgotCSAgV2UgZG9uJ3QgcmVhbGx5IGtub3cgdGhlIG5hbWUgb2YgdGhlIGxv Y2tmaWxlLCBidXQKLQkgIHRoaXMgaXMgd2hhdCB0aGUgbWFuIHBhZ2Ugc2F5cyBpdCBpcy4gIElu IFVTRVRUWUxPQ0sKLSAgICAgICAgICBidWlsZHMsIGl0IGlzIHVzZWQgb25seSBmb3IgZGlzcGxh eSBieSBTSE9XIENPTU0uCi0JKi8KLQlja21ha21zZyhmbGZuYW0sRkxGTkFNTCwiL2V0Yy9sb2Nr cy9MQ0suLiIsbG9ja25hbWUsTlVMTCxOVUxMKTsKLQloYXNsb2NrID0gMTsKLSAgICB9Ci0gICAg cmV0dXJuKHgpOwotI2VuZGlmIC8qIFVTRV9VVV9MT0NLICovCi0jZWxzZSAgLyogU3lzdGVtcyB0 aGF0IGRvbid0IGhhdmUgdHR5bG9jaygpLi4uICovCi0KLSNpZm5kZWYgSFBVWAotCi0gICAgaW50 IGxvY2tmZDsJCQkJLyogRmlsZSBkZXNjcmlwdG9yIGZvciBsb2NrIGZpbGUuICovCi0gICAgUElE X1QgcGlkOwkJCQkvKiBQcm9jZXNzIGlkIG9mIHRoaXMgcHJvY2Vzcy4gKi8KLSAgICBpbnQgdHJp ZXM7CQkJCS8qIEhvdyBtYW55IHRpbWVzIHdlJ3ZlIHRyaWVkLi4uICovCi0gICAgc3RydWN0IHN0 YXQgZGV2YnVmOwkJCS8qIEZvciBkZXZpY2UgbnVtYmVycyAoU1ZSNCkuICovCi0KLSNpZmRlZiBQ SURTVFJJTkcKLSAgICBjaGFyIHBpZF9zdHJbMzJdOwkJCS8qIE15IHBpZCBpbiBzdHJpbmcgZm9y bWF0LiAqLwotI2VuZGlmIC8qIFBJRFNUUklORyAqLwotCi0gICAgY2hhciAqZGV2aWNlLCAqZGV2 bmFtZTsKLQotI2RlZmluZSBMRk5BTUwgMjU2CQkJLyogTWF4IGxlbmd0aCBmb3IgbG9jayBmaWxl IG5hbWUuICovCi0gICAgY2hhciBsb2NrZmlsW0xGTkFNTF07CQkvKiBMb2NrIGZpbGUgbmFtZSAq LwotI2lmZGVmIFJUQUlYCi0gICAgY2hhciBsa2xvY2tmW0xGTkFNTF07CQkvKiBOYW1lIGZvciBs aW5rIHRvIGxvY2sgZmlsZSAgKi8KLSNlbmRpZiAvKiBSVEFJWCAqLwotI2lmZGVmIENLU1lNTElO SwotICAgIGNoYXIgc3ltbG9ja1tMRk5BTUxdOwkJLyogTmFtZSBmb3Igc3ltbGluayBsb2NrZmls ZSBuYW1lICovCi0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0gICAgY2hhciB0bXBuYW1bTEZOQU1M KzMwXTsJCS8qIFRlbXBvcmFyeSBsb2NrZmlsZSBuYW1lLiAqLwotICAgIGNoYXIgKmxvY2tkaXIg PSBMT0NLX0RJUjsJCS8qIERlZmluZWQgbmVhciB0b3Agb2YgdGhpcyBmaWxlLCAqLwotCQkJCQkv KiBvciBvbiBjYyBjb21tYW5kIGxpbmUuICovCi0gICAgaGFzbG9jayA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogTm90IGxvY2tlZCB5ZXQuICovCi0gICAgKmZsZm5hbSA9ICdcMCc7CQkJ LyogTG9ja2ZpbGUgbmFtZSBpcyBlbXB0eS4gKi8KLSAgICBsb2NrMlswXSA9ICdcMCc7CQkJLyog Q2xlYXIgc2Vjb25kYXJ5IGxvY2tmaWxlIG5hbWUuICovCi0gICAgcGlkID0gZ2V0cGlkKCk7CQkJ LyogR2V0IGlkIG9mIHRoaXMgcHJvY2Vzcy4gKi8KLQotLyogIENvbnN0cnVjdCBuYW1lIG9mIGxv Y2tmaWxlIGFuZCB0ZW1wb3JhcnkgZmlsZSAqLwotCi0vKiAgZGV2aWNlICA9IG5hbWUgb2YgdHR5 IGRldmljZSB3aXRob3V0IHRoZSBwYXRoLCBlLmcuICJ0dHloOCIgKi8KLS8qICBsb2NrZmlsID0g bmFtZSBvZiBsb2NrIGZpbGUsIHdpdGhvdXQgcGF0aCwgZS5nLiAiTENLLi50dHloOCIgKi8KLQot ICAgIGRldmljZSA9ICgoZGV2bmFtZSA9IHh4bGFzdCh0dGRldiwnLycpKSAhPSBOVUxMID8gZGV2 bmFtZSsxIDogdHRkZXYpOwotCi0gICAgaWYgKHN0YXQodHRkZXYsJmRldmJ1ZikgPCAwKQotICAg ICAgcmV0dXJuKC0xKTsKLQotI2lmZGVmIENLU1lNTElOSwotICAgIGlzbGluayA9IDE7CQkJCS8q IEFzc3VtZSBpdCdzIGEgc3ltbGluayAqLwotICAgIGxpbmt0b1swXSA9ICdcMCc7CQkJLyogQnV0 IHdlIGRvbid0IGtub3cgdG8gd2hhdCAqLwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFRoaXMgaXMg dW5kZXBlbmRhYmxlLiAgSWYgaXQgd29ya2VkIGl0IHdvdWxkIHNhdmUgdGhlIHJlYWRsaW5rIGNh bGwgaWYKLSAgd2Uga25ldyB0aGUgZGV2aWNlIG5hbWUgd2FzIG5vdCBhIGxpbmsuCi0qLwotI2lm ZGVmIFNfSVNMTksKLSAgICBpc2xpbmsgPSBTX0lTTE5LKGRldmJ1Zi5zdF9tb2RlKTsKLSAgICBk ZWJ1ZyhGMTAxLCJ0dGxvY2sgc3RhdCBTX0lTTE5LIiwiIixpc2xpbmspOwotI2VuZGlmIC8qIFNf SVNMTksgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgaWYgKGlzbGluaykgewotCW4gPSBy ZWFkbGluayh0dGRldixsaW5rdG8sREVWTkFNTEVOKTsgLyogU2VlIGlmIGl0J3MgYSBsaW5rICov Ci0JZGVidWcoRjExMSwidHRsb2NrIHJlYWRsaW5rIix0dGRldixuKTsKLQlpZiAobiA+IC0xKQkJ CS8qIEl0IGlzICovCi0JICBsaW5rdG9bbl0gPSAnXDAnOwotCWVsc2UJCQkJLyogSXQncyBub3Qg Ki8KLQkgIGlzbGluayA9IDA7Ci0JZGVidWcoRjExMSwidHRsb2NrIGxpbmsiLGxpbmt0byxpc2xp bmspOwotICAgIH0KLSAgICBpZiAoaXNsaW5rKSB7Ci0JbGlua2RldiA9IChkZXZuYW1lID0geHhs YXN0KGxpbmt0bywnLycpKSA/IGRldm5hbWUgKyAxIDogbGlua3RvOwotCWRlYnVnKEYxMTAsInR0 bG9jayBsaW5rZGV2IixsaW5rZGV2LDApOwotICAgIH0KLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8K LQotLyoKLSAgT24gU0NPIHBsYXRmb3JtcywgaWYgd2UgZG9uJ3QgaGF2ZSBhIHN5bWxpbmssIHRo ZW4gbGV0J3MgcHJldGVuZCB0aGUKLSAgbmFtZSBnaXZlbiBmb3IgdGhlIGRldmljZSBpcyBhIHN5 bWxpbmssIGJlY2F1c2UgbGF0ZXIgd2Ugd2lsbCBjaGFuZ2UKLSAgdGhlIG5hbWUgaWYgaXQgY29u dGFpbnMgYW55IHVwcGVyY2FzZSBjaGFyYWN0ZXJzLgotKi8KLSNpZmRlZiBDS19TQ09WNQkJCQkv KiBTQ08gT3BlbiBTZXJ2ZXIgNS4wICovCi0gICAgaWYgKCFpc2xpbmspIHsKLQlpc2xpbmsgPSAx OwotCWNrc3RybmNweShsaW5rdG8sdHRkZXYsREVWTkFNTEVOKTsKLQlsaW5rZGV2ID0gKGRldm5h bWUgPSB4eGxhc3QobGlua3RvLCcvJykpID8gZGV2bmFtZSArIDEgOiBsaW5rdG87Ci0JZGVidWco RjExMCwidHRsb2NrIGxpbmtkZXYiLGxpbmtkZXYsMCk7Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBN X1hFTklYCQkJCS8qIFNDTyBYZW5peCBvciBVTklYICovCi0gICAgaWYgKCFpc2xpbmspIHsKLQlp c2xpbmsgPSAxOwotCWNrc3RybmNweShsaW5rdG8sdHRkZXYsREVWTkFNTEVOKTsKLQlsaW5rZGV2 ID0gKGRldm5hbWUgPSB4eGxhc3QobGlua3RvLCcvJykpID8gZGV2bmFtZSArIDEgOiBsaW5rdG87 Ci0JZGVidWcoRjExMCwidHRsb2NrIGxpbmtkZXYiLGxpbmtkZXYsMCk7Ci0gICAgfQotI2VuZGlm IC8qIE1fWEVOSVggKi8KLSNlbmRpZiAvKiBDS19TQ09WNSAqLwotCi0jaWZkZWYgSVNJSUkJCQkJ LyogSW50ZXJhY3RpdmUgU3lzdGVtIElJSSwgUEMvSVggKi8KLSAgICBja3N0cm5jcHkobG9ja2Zp bCwgZGV2aWNlLCBERVZOQU1MRU4pOwotI2Vsc2UgIC8qIG5vdCBJU0lJSSAqLwotI2lmZGVmIExG REVWTk8JCQkJLyogTG9ja2ZpbGVuYW1lIGhhcyBkZXZpY2UgbnVtYmVycy4gKi8KLSNpZmRlZiBD T0hFUkVOVAotICAgIHNwcmludGYobG9ja2ZpbCwiTENLLi4lZC4lZCIsCS8qIFNBRkUgKi8KLQkg ICAgbWFqb3IoZGV2YnVmLnN0X3JkZXYpLAkgICAvKiBtYWpvciBkZXZpY2UgbnVtYmVyICovCi0J ICAgIDB4MWYgJiBtaW5vcihkZXZidWYuc3RfcmRldikpOyAvKiBtaW5vciBkZXZpY2UgbnVtYmVy ICovCi0jZWxzZQotICAgIC8qIE5vdGU6ICVkIGNoYW5nZWQgdG8gJXUgaW4gOC4wIC0tICV1IGlz IHBhcnQgb2YgU1ZJRCBmb3IgU1ZSNCAqLwotICAgIC8qIExvY2tmaWxlIG5hbWUgZm9ybWF0IHZl cmlmaWVkIHRvIGFncmVlIHdpdGggU29sYXJpcyBjdSwgRGVjIDIwMDEgKi8KLSAgICBzcHJpbnRm KGxvY2tmaWwsIkxLLiUwM3UuJTAzdS4lMDN1IiwgLyogU0FGRSAqLwotCSAgICBtYWpvcihkZXZi dWYuc3RfZGV2KSwJLyogZGV2aWNlICovCi0JICAgIG1ham9yKGRldmJ1Zi5zdF9yZGV2KSwJLyog bWFqb3IgZGV2aWNlIG51bWJlciAqLwotCSAgICBtaW5vcihkZXZidWYuc3RfcmRldikpOwkvKiBt aW5vciBkZXZpY2UgbnVtYmVyICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSNlbHNlICAvKiBO b3QgTEZERVZOTyAqLwotI2lmZGVmIFBUWAkJCQkvKiBEeW5peCBQVFggKi8KLSAgICBpZiAoKGRl dmljZSAhPSAmdHRkZXZbNV0pICYmIChzdHJuY21wKHR0ZGV2LCIvZGV2LyIsNSkgPT0gMCkpIHsK LQlpZiAoKGludClzdHJsZW4oZGV2aWNlKSArIDggPCBMRk5BTUwpCi0JICBzcHJpbnRmKGxvY2tm aWwsIkxDSy4uJS4zcyVzIiwgJnR0ZGV2WzVdLCBkZXZpY2UpOwotCWVsc2UKLQkgIGNrc3RybmNw eShsb2NrZmlsLCJMT0NLRklMRV9OQU1FX1RPT19MT05HIixMRk5BTUwpOwotICAgIH0gZWxzZQot I2VuZGlmIC8qIFBUWCAqLwotICAgICAgaWYgKChpbnQpc3RybGVuKGRldmljZSkgKyA1IDwgTEZO QU1MKQotCXNwcmludGYobG9ja2ZpbCwiTENLLi4lcyIsIGRldmljZSk7Ci0gICAgICBlbHNlCi0J Y2tzdHJuY3B5KGxvY2tmaWwsIkxPQ0tGSUxFX05BTUVfVE9PX0xPTkciLExGTkFNTCk7Ci0jaWZk ZWYgUlRBSVgKLSAgICBja3N0cm5jcHkobGtsb2NrZixkZXZpY2UsREVWTkFNTEVOKTsKLSNlbmRp ZiAvKiBSVEFJWCAqLwotI2lmZGVmIENLU1lNTElOSwotICAgIHN5bWxvY2tbMF0gPSAnXDAnOwot ICAgIGlmIChpc2xpbmspCi0gICAgICBja21ha21zZyhzeW1sb2NrLExGTkFNTCwgIkxDSy4uIiwg bGlua2RldiwgTlVMTCwgTlVMTCk7Ci0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0jZW5kaWYgLyog TEZERVZOTyAqLwotI2VuZGlmIC8qIElTSUlJICovCi0KLSNpZmRlZiBDS19TQ09WNQkJCQkvKiBT Q08gT3BlbiBTZXJ2ZXIgNS4wICovCi0gICAgewotCS8qIExvd2VyY2FzZSB0aGUgZW50aXJlIGZp bGVuYW1lLiAqLwotICAgICAgICAvKiBTQ08gc2F5cyB3ZSBtdXN0IGRvIHRoaXMgaW4gVjUuMCBh bmQgbGF0ZXIuICovCi0JLyogQlVULi4uIHdhdGNoIG91dCBmb3IgZGV2aWNlcyAtLSBsaWtlIERp Z2lib2FyZCBQb3J0c2VydmVyICovCi0JLyogVGhhdCBjYW4gaGF2ZSBodW5kcmVkcyBvZiBwb3J0 cy4uLiAqLwotCWNoYXIgKnAgPSAoY2hhciAqKShsb2NrZmlsICsgNSk7Ci0Jd2hpbGUgKCpwKSB7 IGlmIChpc3VwcGVyKCpwKSkgKnAgPSAoY2hhcikgdG9sb3dlcigqcCk7IHArKzsgfQotICAgIH0K LSNpZmRlZiBDS1NZTUxJTksKLSAgICBpZiAoaXNsaW5rKSB7CQkJLyogSWYgbm8gY2hhbmdlICov Ci0JaWYgKCFzdHJjbXAobG9ja2ZpbCxzeW1sb2NrKSkgewkvKiB0aGVuIG5vIHNlY29uZCBsb2Nr ZmlsZSBuZWVkZWQgKi8KLQkgICAgaXNsaW5rID0gMDsKLQkgICAgc3ltbG9ja1swXSA9ICdcMCc7 Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLSNlbHNlCi0jaWZkZWYgTV9YRU5J WAkJCQkvKiBTQ08gWGVuaXggb3IgVU5JWCAqLwotICAgIHsKLQlpbnQgeDsgY2hhciBjOwotCXgg PSAoaW50KXN0cmxlbihsb2NrZmlsKSAtIDE7CS8qIEdldCBsYXN0IGxldHRlciBvZiBkZXZpY2Ug bmFtZS4gKi8KLQlpZiAoeCA+IDApIHsJCQkvKiBJZiBpdCdzIHVwcGVyY2FzZSwgbG93ZXIgaXQu ICovCi0JICAgIGMgPSBsb2NrZmlsW3hdOwotCSAgICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicp IGxvY2tmaWxbeF0gKz0gKCdhJyAtICdBJyk7Ci0JfQotICAgIH0KLSNpZmRlZiBDS1NZTUxJTksK LSAgICBpZiAoaXNsaW5rKSB7Ci0JaWYgKCFzdHJjbXAobG9ja2ZpbCxzeW1sb2NrKSkgewkvKiBO byBjaGFuZ2UgKi8KLQkgICAgaXNsaW5rID0gMDsJCQkvKiBzbyBubyBzZWNvbmQgbG9ja2ZpbGUg Ki8KLQkgICAgc3ltbG9ja1swXSA9ICdcMCc7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBDS1NZTUxJ TksgKi8KLSNlbmRpZiAvKiBNX1hFTklYICovCi0jZW5kaWYgLyogQ0tfU0NPVjUgKi8KLQotLyog IGZsZm5hbSA9IGZ1bGwgbG9ja2ZpbGUgcGF0aG5hbWUsIGUuZy4gIi91c3Ivc3Bvb2wvdXVjcC9M Q0suLnR0eWg4IiAqLwotLyogIHRtcG5hbSA9IHRlbXBvcmFyeSB1bmlxdWUsIGUuZy4gIi91c3Iv c3Bvb2wvdXVjcC9MVE1QLi5waWQiICovCi0KLSAgICBja21ha21zZyhmbGZuYW0sTEZOQU1MLGxv Y2tkaXIsIi8iLGxvY2tmaWwsTlVMTCk7Ci0KLSNpZmRlZiBSVEFJWAotICAgIGNrbWFrbXNnKGxr ZmxmbixGTEZOQU1MLGxvY2tkaXIsIi8iLGxrbG9ja2YsTlVMTCk7Ci0jZW5kaWYgLyogUlRBSVgg Ki8KLQotI2lmbmRlZiBMRkRFVk5PCi0jaWZkZWYgQ0tTWU1MSU5LCi0gICAgLyogSWYgaXQncyBh IGxpbmsgdGhlbiBhbHNvIG1ha2UgYSBsb2NrZmlsZSBmb3IgdGhlIHJlYWwgbmFtZSAqLwotICAg IGRlYnVnKEYxMTEsInR0bG9jayBsaW5rIHN5bWxvY2siLHN5bWxvY2ssaXNsaW5rKTsKLSAgICBp ZiAoaXNsaW5rICYmIHN5bWxvY2tbMF0pIHsKLQkvKiBCdXQgb25seSBpZiB0aGUgbG9ja2ZpbGUg bmFtZXMgd291bGQgYmUgZGlmZmVyZW50LiAqLwotCS8qIFdBUk5JTkc6IFRoZXkgd29uJ3QgYmUs IGUuZy4gZm9yIC9kZXYvdHR5ZDIgPT4gL2h3L3R0eXMvdHR5ZDIgKi8KLQlja21ha21zZyhsb2Nr MixGTEZOQU1MLGxvY2tkaXIsIi8iLHN5bWxvY2ssTlVMTCk7Ci0JZGVidWcoRjExMCwidHRsb2Nr IGxvY2syIixsb2NrMiwwKTsKLQlpZiAoIXN0cmNtcChsb2NrMixmbGZuYW0pKSB7CS8qIEFyZSBs b2NrZmlsZSBuYW1lcyB0aGUgc2FtZT8gKi8KLQkgICAgZGVidWcoRjEwMCwidHRsb2NrIGxvY2sy IGNsZWFyZWQiLCIiLDApOwotCSAgICBsb2NrMlswXSA9ICdcMCc7CQkvKiBDbGVhciBzZWNvbmRh cnkgbG9ja2ZpbGUgbmFtZS4gKi8KLQl9Ci0gICAgfQotI2VuZGlmIC8qIENLU1lNTElOSyAqLwot I2VuZGlmIC8qIExGREVWTk8gKi8KLQotICAgIHNwcmludGYodG1wbmFtLCIlcy9MVE1QLiUwNWQi LGxvY2tkaXIsKGludCkgcGlkKTsgLyogc2FmZSAqLwotICAgIGRlYnVnKEYxMTAsInR0bG9jayBm bGZuYW0iLGZsZm5hbSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJ0dGxvY2sgdG1wbmFtIix0bXBuYW0s MCk7Ci0KLSAgICBwcml2X29uKCk7CQkJCS8qIFR1cm4gb24gcHJpdmlsZWdlcyBpZiBwb3NzaWJs ZS4gKi8KLSAgICBsb2NrZmQgPSBjcmVhdCh0bXBuYW0sIDA0NDQpOwkvKiBUcnkgdG8gY3JlYXRl IHRlbXAgbG9jayBmaWxlLiAqLwotICAgIGlmIChsb2NrZmQgPCAwKSB7CQkJLyogQ3JlYXRlIGZh aWxlZC4gKi8KLQlkZWJ1ZyhGMTExLCJ0dGxvY2sgY3JlYXQgZmFpbGVkIix0bXBuYW0sZXJybm8p OwotCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKLQkgICAgcGVycm9yKGxvY2tkaXIpOwotCSAgICBw cmludGYoIlVVQ1Agbm90IGluc3RhbGxlZCBvciBLZXJtaXQgbWlzY29uZmlndXJlZFxuIik7Ci0J fSBlbHNlIHsKLQkgICAgaWYgKCFxdWlldCkKLQkgICAgICBwZXJyb3IobG9ja2Rpcik7Ci0JICAg IHVubGluayh0bXBuYW0pOwkJLyogR2V0IHJpZCBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUuICovCi0J fQotCXByaXZfb2ZmKCk7CQkJLyogVHVybiBvZmYgcHJpdmlsZWdlcyEhISAqLwotCXJldHVybigt MSk7CQkJLyogUmV0dXJuIGZhaWx1cmUgY29kZS4gKi8KLSAgICB9Ci0vKiBOb3cgd3JpdGUgdGhl IHBpZCBpbnRvIHRoZSB0ZW1wIGxvY2tmaWxlIGluIHRoZSBhcHByb3ByaWF0ZSBmb3JtYXQgKi8K LQotI2lmZGVmIFBJRFNUUklORwkJCS8qIEZvciBIb25leSBEYW5CZXIgVVVDUCwgKi8KLSAgICBz cHJpbnRmKAkJCQkvKiB3cml0ZSBQSUQgYXMgZGVjaW1hbCBzdHJpbmcgKi8KLQkgICAgcGlkX3N0 ciwKLSNpZmRlZiBMSU5VWEZTU1RORAkJCS8qIFRoZSAiTGludXggRmlsZSBTeXN0ZW0gU3RhbmRh cmQiICovCi0jaWZkZWYgRlNTVE5EMTAJCQkJLyogVmVyc2lvbiAxLjAgY2FsbHMgZm9yICovCi0J ICAgICIlMDEwZFxuIiwJCQkvKiBsZWFkaW5nIHplcm9zICovCi0jZWxzZQkJCQkJLyogd2hpbGUg dmVyc2lvbiAxLjIgY2FsbHMgZm9yICovCi0JICAgICIlMTBkXG4iLAkJCS8qIGxlYWRpbmcgc3Bh Y2VzICovCi0jZW5kaWYgLyogRlNTVE5EMTAgKi8KLSNlbHNlCi0jaWZkZWYgQ09IRVJFTlQKLQkg ICAgIiVkXG4iLAkJCS8qIHdpdGggbGVhZGluZyBub3RoaW5nICovCi0jZWxzZQotCSAgICAiJTEw ZFxuIiwJCQkvKiB3aXRoIGxlYWRpbmcgYmxhbmtzICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8K LSNlbmRpZiAvKiBMSU5VWEZTU1RORCAqLwotCSAgICAoaW50KSBwaWQKLQkgICAgKTsJCQkJLyog c2FmZSAqLwotICAgIHdyaXRlKGxvY2tmZCwgcGlkX3N0ciwgMTEpOwotICAgIGRlYnVnKEYxMTEs InR0bG9jayBoZGIgcGlkIHN0cmluZyIscGlkX3N0ciwoaW50KSBwaWQpOwotCi0jZWxzZSAvKiBO b3QgUElEU1RSSU5HLCB1c2UgaW50ZWdlciBQSUQgKi8KLQotICAgIHdyaXRlKGxvY2tmZCwgKGNo YXIgKikmcGlkLCBzaXplb2YocGlkKSApOwotICAgIGRlYnVnKEYxMDEsInR0bG9jayBwaWQiLCIi LChpbnQpIHBpZCk7Ci0KLSNlbmRpZiAvKiBQSURTVFJJTkcgKi8KLQotLyogTm93IHRyeSB0byBy ZW5hbWUgdGhlIHRlbXAgZmlsZSB0byB0aGUgcmVhbCBsb2NrIGZpbGUgbmFtZS4gKi8KLS8qIFRo aXMgd2lsbCBmYWlsIGlmIGEgbG9jayBmaWxlIG9mIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cy4g ICovCi0KLSAgICBjbG9zZShsb2NrZmQpOwkJCS8qIENsb3NlIHRoZSB0ZW1wIGxvY2tmaWxlLiAq LwotICAgIGNobW9kKHRtcG5hbSwwNDQ0KTsJCQkvKiBQZXJtaXNzaW9uIGZvciBhIHZhbGlkIGxv Y2suICovCi0gICAgdHJpZXMgPSAwOwotICAgIHdoaWxlICghaGFzbG9jayAmJiB0cmllcysrIDwg MikgewotCWhhc2xvY2sgPSAobGluayh0bXBuYW0sZmxmbmFtKSA9PSAwKTsgLyogQ3JlYXRlIGEg bGluayB0byBpdC4gKi8KLQlpZiAoaGFzbG9jaykgewkJCSAgICAgIC8qIElmIHdlIGdvdCB0aGUg bG9ja2ZpbGUgKi8KLSNpZmRlZiBSVEFJWAotCSAgICBsaW5rKGZsZm5hbSxsa2ZsZm4pOwotI2Vu ZGlmIC8qIFJUQUlYICovCi0jaWZkZWYgQ0tTWU1MSU5LCi0jaWZuZGVmIExGREVWTk8KLQkgICAg aWYgKGlzbGluayAmJiBsb2NrMlswXSkKLQkgICAgICBsaW5rKGZsZm5hbSxsb2NrMik7Ci0jZW5k aWYgLyogTEZERVZOTyAqLwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotCi0jaWZkZWYgQ09NTUVO VAotLyogQ2FuJ3QgZG8gdGhpcyBhbnkgbW9yZSBiZWNhdXNlIGRldmljZSBpcyBub3Qgb3BlbiB5 ZXQgc28gbm8gdHR5ZmQuICovCi0jaWZkZWYgTE9DS0YKLS8qCi0gIEFkdmlzb3J5IGZpbGUgbG9j a2luZyB3b3JrcyBvbiBTVlI0LCBzbyB3ZSB1c2UgaXQuICBJbiBmYWN0LCBpdCBpcwotICBuZWNl c3NhcnkgaW4gc29tZSBjYXNlcywgZS5nLiB3aGVuIFNMSVAgaXMgaW52b2x2ZWQuICBCdXQgaXQg c3RpbGwgZG9lc24ndAotICBzZWVtIHRvIHByZXZlbnQgbXVsdGlwbGUgdXNlcnMgYWNjZXNzaW5n IHRoZSBzYW1lIGRldmljZSBieSBkaWZmZXJlbnQgbmFtZXMuCi0qLwotICAgICAgICAgICAgd2hp bGUgKGxvY2tmKHR0eWZkLCBGX1RMT0NLLCAwTCkgIT0gMCkgewotICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsICJ0dGxvY2sgbG9ja2YgcmV0dXJucyBlcnJubyIsICIiLCBlcnJubyk7Ci0gICAg ICAgICAgICAgICAgaWYgKCgrK3RyaWVzID49IDMpIHx8IChlcnJubyAhPSBFQUdBSU4pKSB7Ci0g ICAgICAgICAgICAgICAgICAgIHggPSB1bmxpbmsoZmxmbmFtKTsgLyogcmVtb3ZlIHRoZSBsb2Nr ZmlsZSAqLwotI2lmZGVmIFJUQUlYCi0JCSAgICB1bmxpbmsobGtmbGZuKTsJLyogQW5kIGFueSBs aW5rcyB0byBpdC4uLiAqLwotI2VuZGlmIC8qIFJUQUlYICovCi0jaWZkZWYgQ0tTWU1MSU5LCi0j aWZuZGVmIExGREVWTk8KLQkJICAgIGlmIChpc2xpbmsgJiYgbG9jazJbMF0pCi0JCSAgICAgIHVu bGluayhsb2NrMik7CS8qIGRpdHRvLi4uICovCi0jZW5kaWYgLyogTEZERVZOTyAqLwotI2VuZGlm IC8qIENLU1lNTElOSyAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0dGxvY2sg dW5saW5rIixmbGZuYW0seCk7Ci0gICAgICAgICAgICAgICAgICAgIGhhc2xvY2sgPSAwOwotCQkg ICAgYnJlYWs7Ci0JCX0KLSAgICAgICAgICAgICAgICBzbGVlcCgyKTsKLQkgICAgfQotCSAgICBp ZiAoaGFzbG9jaykJCS8qIElmIHdlIGdvdCBhbiBhZHZpc29yeSBsb2NrICovCi0jZW5kaWYgLyog TE9DS0YgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgICAgYnJlYWs7CQkJLyogV2UncmUg ZG9uZS4gKi8KLQotCX0gZWxzZSB7CQkJLyogV2UgZGlkbid0IGNyZWF0ZSBhIG5ldyBsb2NrZmls ZS4gKi8KLQkgICAgcHJpdl9vZmYoKTsKLQkgICAgaWYgKHR0Y2hrcGlkKGZsZm5hbSkpIHsJLyog Q2hlY2sgZXhpc3RpbmcgbG9ja2ZpbGUgKi8KLQkJcHJpdl9vbigpOwkJLyogY2F1c2UgdHRjaGtw aWQgdHVybnMgcHJpdl9vZmYuLi4gKi8KLQkJdW5saW5rKHRtcG5hbSk7CQkvKiBEZWxldGUgdGhl IHRlbXBmaWxlICovCi0JCWRlYnVnKEYxMDAsInR0bG9jayBmb3VuZCB0dHkgbG9ja2VkIiwiIiww KTsKLQkJcHJpdl9vZmYoKTsJCS8qIFR1cm4gb2ZmIHByaXZzICovCi0JCXJldHVybigtMik7CQkv KiBDb2RlIGZvciBkZXZpY2UgaXMgaW4gdXNlLiAqLwotCSAgICB9Ci0JICAgIHByaXZfb24oKTsK LQl9Ci0gICAgfQotICAgIHVubGluayh0bXBuYW0pOwkJCS8qIFVubGluayAocmVtb3ZlKSB0aGUg dGVtcCBmaWxlLiAqLwotICAgIHByaXZfb2ZmKCk7CQkJCS8qIFR1cm4gb2ZmIHByaXZzICovCi0g ICAgcmV0dXJuKGhhc2xvY2sgPyAwIDogLTEpOwkJLyogUmV0dXJuIGxpbmsncyByZXR1cm4gY29k ZS4gKi8KLQotI2Vsc2UgLyogSFBVWCAqLwotCi0vKgotICBIUC1VWCBnZXRzIGl0cyBvd24gY29w eSBvZiB0aGlzIHJvdXRpbmUsIG1vZGVsZWQgYWZ0ZXIgdGhlIG9ic2VydmVkIGJlaGF2aW9yCi0g IG9mIHRoZSBIUC1VWCAnY3UnIHByb2dyYW0uICBIUC1VWCBzZXJpYWwgZGV2aWNlIG5hbWVzIGNv bnNpc3Qgb2YgYSBiYXNlIG5hbWUKLSAgc3VjaCBhcyAidHR5IiwgInR0eWQiLCAiY3VhIiwgImN1 bCIsICJjdWFkIiwgb3IgImN1bGQiLCBmb2xsb3dlZCBieSBhIHVuaXQKLSAgZGVzaWduYXRvciB3 aGljaCBpcyBhIHN0cmluZyBvZiBkaWdpdHMsIHBvc3NpYmx5IGNvbnRhaW5pbmcgYW4gaW1iZWRk ZWQKLSAgbGV0dGVyICJwIi4gIEV4YW1wbGVzIChmb3IgYmFzZSBuYW1lICJ0dHkiKToKLQotICAg ICAvZGV2L3R0eTAsIC9kZXYvdHR5MDAsIGRldi90dHlkMDAsIC9kZXYvdHR5MHAwCi0KLSAgQWNj b3JkaW5nIHRvIHRoZSBIUC1VWCBVVUNQIG1hbnVhbCBvZiAxOTg4LCB0aGUgIjBwMCIgbm90YXRp b24gaGFzIGJlZW4KLSAgdXNlZCBvbiBTZXJpZXMgODAwIHNpbmNlIEhQLVVYIDIuMDAsIGFuZCB0 aGUgIm5vbi1wIiBub3RhdGlvbiB3YXMgdXNlZAotICBvbiBvdGhlciBtb2RlbHMuICBJbiBIUC1V WCAxMC4wMCwgIjBwMCIgbm90YXRpb24gd2FzIGFkb3B0ZWQgZm9yIGFsbCBtb2RlbHMuCi0gIEhv d2V2ZXIsIHdlIG1ha2UgYW5kIGVuZm9yY2Ugbm8gc3VjaCBkaXN0aW5jdGlvbnM7IGVpdGhlciBu b3RhdGlvbiBpcwotICBhY2NlcHRlZCBvbiBhbnkgbW9kZWwgb3IgSFAtVVggdmVyc2lvbiBhcyBh IHZhbGlkIHVuaXQgZGVzaWduYXRvci4KLQotICBJZiBhIHZhbGlkIHVuaXQgaXMgc3BlY2lmaWVk IChhcyBvcHBvc2VkIHRvIGEgZGVzaWduZXIgbmFtZSBvciBzeW1saW5rKSwgd2UKLSAgY2hlY2sg Zm9yIGFsbCBhbGlhc2VzIG9mIHRoZSBnaXZlbiB1bml0IGFjY29yZGluZyB0byB0aGUgZGV2cHJl Zml4W10gYXJyYXkuCi0gIElmIG5vIGxvY2tmaWxlcyBhcmUgZm91bmQgZm9yIHRoZSBnaXZlbiB1 bml0LCB3ZSBjYW4gaGF2ZSB0aGUgZGV2aWNlOyB3ZQotICBjcmVhdGUgYSBsb2NrZmlsZSBMQ0su Lm5hbWUgaW4gdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSBhcHByb3ByaWF0ZSBmb3IgdGhlCi0gIEhQ LVVYIHZlcnNpb24gKC92YXIvc3Bvb2wvbG9ja3MgZm9yIDEwLjAwIGFuZCBsYXRlciwgL3Vzci9z cG9vbC91dWNwIGZvcgotICA5Lnh4IGFuZCBlYXJsaWVyKS4gIElmIGl0IGlzIGEgImN1YSIgb3Ig ImN1bCIgZGV2aWNlLCBhIHNlY29uZCBsb2NrZmlsZSBpcwotICBjcmVhdGVkIHdpdGggdGhlICJ0 dHlkIiBwcmVmaXguICBUaGlzIGlzIGV4YWN0bHkgd2hhdCBjdSBkb2VzLgotCi0gIElmIHRoZSAi c2V0IGxpbmUiIGRldmljZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgdW5pdCBkZXNpZ25hdG9yLCB0 aGVuIGl0IGlzCi0gIHVzZWQgbGl0ZXJhbGx5IGFuZCBubyBzeW5vbXltcyBhcmUgc2VhcmNoZWQg Zm9yIGFuZCBvbmx5IG9uZSBsb2NrZmlsZSBpcwotICBjcmVhdGVkLgotCi0gIC1mZGMsIE1hcmNo IDE5OTguCi0qLwotI2RlZmluZSBMRk5BTUwgODAJCQkvKiBNYXggbGVuZ3RoIGZvciBsb2NrIGZp bGUgbmFtZS4gKi8KLQotICAgIGludCBsb2NrZmQ7CQkJCS8qIEZpbGUgZGVzY3JpcHRvciBmb3Ig bG9jayBmaWxlLiAqLwotICAgIFBJRF9UIHBpZDsJCQkJLyogUHJvY2VzcyBJRCBvZiB0aGlzIHBy b2Nlc3MuICovCi0gICAgaW50IGZwaWQ7CQkJCS8qIHBpZCBmb3VuZCBpbiBleGlzdGluZyBsb2Nr ZmlsZS4gKi8KLSAgICBpbnQgdHJpZXM7CQkJCS8qIEhvdyBtYW55IHRpbWVzIHdlJ3ZlIHRyaWVk Li4uICovCi0gICAgaW50IGksIGs7CQkJCS8qIFdvcmtlcnMgKi8KLQotICAgIGNoYXIgKmRldmlj ZSwgKmRldm5hbWU7CQkvKiAiL2Rldi94eHgiLCAieHh4IiAqLwotICAgIGNoYXIgKnVuaXQsICpw OwkJCS8qIDxpbnN0YW5jZT5wPHBvcnQ+IHBhcnQgb2YgeHh4ICovCi0KLSAgICBjaGFyIGxvY2tm aWxbTEZOQU1MXTsJCS8qIExvY2tmaWxlIG5hbWUgKG5vIHBhdGgpICovCi0gICAgY2hhciB0bXBu YW1bTEZOQU1MXTsJCS8qIFRlbXBvcmFyeSBsb2NrZmlsZSBuYW1lLiAqLwotCi0jaWZkZWYgSFBV WDEwCQkJCS8qIExvY2tmaWxlIGRpcmVjdG9yeSAqLwotICAgIGNoYXIgKmxvY2tkaXIgPSAiL3Zh ci9zcG9vbC9sb2NrcyI7CS8qIEFsd2F5cyB0aGlzIGZvciAxMC4wMCBhbmQgaGlnaGVyICovCi0j ZWxzZSAgLyogSFAtVVggOS54eCBhbmQgYmVsb3cgKi8KLSNpZmRlZiBMT0NLX0RJUgotICAgIGNo YXIgKmxvY2tkaXIgPSBMT0NLX0RJUjsJCS8qIERlZmluZWQgbmVhciB0b3Agb2YgdGhpcyBmaWxl ICovCi0jZWxzZQotICAgIGNoYXIgKmxvY2tkaXIgPSAiL3Vzci9zcG9vbC91dWNwIjsJLyogb3Ig bm90Li4uICovCi0jZW5kaWYgLyogTE9DS19ESVIgKi8KLSNlbmRpZiAvKiBIUFVYMTAgKi8KLQot ICAgIGhhc2xvY2sgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBsb2NrZWQgeWV0 LiAqLwotICAgICpmbGZuYW0gPSAnXDAnOwkJCS8qIExvY2tmaWxlIG5hbWUgaXMgZW1wdHkuICov Ci0gICAgbG9jazJbMF0gPSAnXDAnOwkJCS8qIFNlY29uZCBvbmUgdG9vLiAqLwotICAgIHBpZCA9 IGdldHBpZCgpOwkJCS8qIEdldCBteSBwcm9jZXNzIElEICovCi0vKgotICBDb25zdHJ1Y3QgbmFt ZSBvZiBsb2NrZmlsZSBhbmQgdGVtcG9yYXJ5IGZpbGUuLi4KLSAgZGV2aWNlICA9IG5hbWUgb2Yg dHR5IGRldmljZSB3aXRob3V0IHRoZSBwYXRoLCBlLmcuICJ0dHkwcDAiCi0gIGxvY2tmaWwgPSBu YW1lIG9mIGxvY2sgZmlsZSwgd2l0aG91dCBwYXRoLCBlLmcuICJMQ0suLnR0eTBwMCIKLSovCi0g ICAgZGV2aWNlID0gKChkZXZuYW1lID0geHhsYXN0KHR0ZGV2LCcvJykpICE9IE5VTEwgPyBkZXZu YW1lKzEgOiB0dGRldik7Ci0gICAgZGVidWcoRjExMCwiVFRMT0NLIGRldmljZSIsZGV2aWNlLDAp OwotICAgIGNrbWFrbXNnKGxvY2tmaWwsTEZOQU1MLCJMQ0suLiIsZGV2aWNlLE5VTEwsTlVMTCk7 Ci0KLSAgICBrID0gMDsJCQkJLyogQXNzdW1lIGRldmljZSBpcyBub3QgbG9ja2VkICovCi0gICAg biA9IDA7CQkJCS8qIERpZ2l0IGNvdW50ZXIgKi8KLSAgICB1bml0ID0gZGV2aWNlOwkJCS8qIFVu aXQgPSA8aW5zdGFuY2U+cDxwb3J0PiAqLwotICAgIHdoaWxlICgqdW5pdCAmJiAhaXNkaWdpdCgq dW5pdCkpCS8qIFNlYXJjaCBmb3IgZGlnaXQuLi4gKi8KLSAgICAgIHVuaXQrKzsKLSAgICBwID0g dW5pdDsJCQkJLyogVmVyaWZ5IDxudW0+cDxudW0+IGZvcm1hdC4uLiAqLwotICAgIGRlYnVnKEYx MTAsIlRUTE9DSyB1bml0IDEiLHVuaXQsMCk7Ci0vKgotICBUaGUgdW5pdCBudW1iZXIgaXMgcmVj b2duaXplZCBhczoKLSAgKGEpIGFueSBzZXF1ZW5jZSBvZiBkaWdpdHMgdGhhdCBydW5zIHRvIHRo ZSBlbmQgb2YgdGhlIHN0cmluZy4KLSAgKGIpIGFueSAoYSkgdGhhdCBpbmNsdWRlcyBvbmUgYW5k IG9ubHkgb25lIGxldHRlciAicCIsIHdpdGggYXQgbGVhc3QKLSAgICAgIG9uZSBkaWdpdCBiZWZv cmUgYW5kIGFmdGVyIGl0LgotKi8KLSAgICB3aGlsZSAoaXNkaWdpdCgqcCkpIHArKywgbisrOwkv KiBHZXQgYSBydW4gb2YgZGlnaXRzICovCi0gICAgaWYgKCpwICYmIG4gPiAwKSB7CQkJLyogSGF2 ZSBhICJwIj8gKi8KLQlpZiAoKnAgPT0gJ3AnICYmIGlzZGlnaXQoKihwKzEpKSkgewotCSAgICBw Kys7Ci0JICAgIG4gPSAwOwotCSAgICB3aGlsZSAoaXNkaWdpdCgqcCkpIHArKywgbisrOwotCX0K LSAgICB9Ci0gICAgaWYgKG4gPT0gMCB8fCAqcCkgdW5pdCA9ICIiOwotICAgIGRlYnVnKEYxMTAs IlRUTE9DSyB1bml0IDIiLHVuaXQsMCk7Ci0KLSAgICBpZiAoKnVuaXQpIHsJCQkvKiBEZXZpY2Ug bmFtZSBoYXMgdW5pdCBudW1iZXIuICovCi0JLyogVGhlIGZvbGxvd2luZyBsb29wIG5vdCBvbmx5 IHNlYXJjaGVzIGZvciB0aGUgdmFyaW91cyBsb2NrZmlsZSAgICAqLwotCS8qIHN5bm9ueW1zLCBi dXQgYWxzbyByZW1vdmVzIGFsbCAtLSBub3QganVzdCBvbmUgLS0gc3RhbGUgbG9ja2ZpbGUgKi8K LQkvKiBmb3IgdGhlIGRldmljZSwgc2hvdWxkIHRoZXJlIGJlIG1vcmUgdGhhbiBvbmUuICBTZWUg dHRjaGtwaWQoKS4gICovCi0JdHR5ZGV4aXN0cyA9IDA7Ci0JZm9yIChpID0gMDsgKmRldnByZWZp eFtpXTsgaSsrKSB7IC8qIEZvciBlYWNoIGRyaXZlci4uLiAqLwotCSAgICAvKiBNYWtlIGRldmlj ZSBuYW1lICovCi0JICAgIGNrbWFrbXNnKGxvY2syLEZMRk5BTUwsIi9kZXYvIixkZXZwcmVmaXhb aV0sdW5pdCxOVUxMKTsKLQkgICAgcHJpdl9vbigpOwkJCS8qIFByaXZzIG9uICovCi0JICAgIGsg PSB6Y2hraShsb2NrMikgIT0gLTE7CS8qIFNlZSBpZiBkZXZpY2UgZXhpc3RzICovCi0JICAgIHBy aXZfb2ZmKCk7CQkJLyogUHJpdnMgb2ZmICovCi0JICAgIGRlYnVnKEYxMTEsIlRUTE9DSyBleGlz dCIsbG9jazIsayk7Ci0gICAgICAgICAgICBpZiAoaykgewotCQlpZiAoIXN0cmNtcChkZXZwcmVm aXhbaV0sInR0eWQiKSkgLyogdHR5ZCBkZXZpY2UgZXhpc3RzICovCi0JCSAgdHR5ZGV4aXN0cyA9 IDE7Ci0JCS8qIE1ha2UgbG9ja2ZpbGUgbmFtZSAqLwotCQlja21ha21zZyhsb2NrMixGTEZOQU1M LGxvY2tkaXIsIi9MQ0suLiIsZGV2cHJlZml4W2ldLHVuaXQpOwotCQlkZWJ1ZyhGMTEwLCJUVExP Q0sgY2hlY2tpbmciLGxvY2syLDApOwotCQlwcml2X29uKCk7CQkvKiBQcml2cyBvbiAqLwotCQlr ID0gemNoa2kobG9jazIpICE9IC0xOwkvKiBTZWUgaWYgbG9ja2ZpbGUgZXhpc3RzICovCi0JCXBy aXZfb2ZmKCk7CQkvKiBQcml2cyBvZmYgKi8KLQkJZGVidWcoRjExMSwiVFRMT0NLIGNoZWNrIGZv ciBsb2NrIEEiLGxvY2syLGspOwotCQlpZiAoaykgaWYgKHR0Y2hrcGlkKGxvY2syKSkgeyAvKiBJ ZiBwaWQgc3RpbGwgYWN0aXZlLCBmYWlsLiAqLwotCQkgICAgY2tzdHJuY3B5KGZsZm5hbSxsb2Nr MixGTEZOQU1MKTsKLQkJICAgIHJldHVybigtMik7Ci0JCX0KLQkgICAgfQotCX0KLSAgICB9IGVs c2UgewkJCQkvKiBTb21lIG90aGVyIGRldmljZS1uYW1lIGZvcm1hdCAqLwotCS8qIFRoaXMgdGFr ZXMgY2FyZSBvZiBzeW1ib2xpYyBsaW5rcywgZXRjLi4uICovCi0JLyogQnV0IGRvZXMgbm90IGNo YXNlIHRoZW0gZG93biEgKi8KLQlja21ha21zZyhsb2NrMixGTEZOQU1MLGxvY2tkaXIsIi9MQ0su LiIsZGV2aWNlLE5VTEwpOwotCXByaXZfb24oKTsKLQlrID0gemNoa2kobG9jazIpICE9IC0xOwkJ LyogQ2hlY2sgZm9yIGV4aXN0aW5nIGxvY2tmaWxlICovCi0JcHJpdl9vZmYoKTsKLQlkZWJ1ZyhG MTExLCJUVExPQ0sgY2hlY2sgZm9yIGxvY2sgQiIsbG9jazIsayk7Ci0JaWYgKGspIGlmICh0dGNo a3BpZChsb2NrMikpIHsJLyogQ2hlY2sgcGlkIGZyb20gbG9ja2ZpbGUgKi8KLQkgICAgY2tzdHJu Y3B5KGZsZm5hbSxsb2NrMixGTEZOQU1MKTsKLQkgICAgZGVidWcoRjExMCwiVFRMT0NLIGluIHVz ZSIsZGV2aWNlLDApOwotCSAgICBkZWJ1ZyhGMTAxLCJUVExPQ0sgcmV0dXJucyIsIiIsLTIpOwot CSAgICByZXR1cm4oLTIpOwotCX0KLSAgICB9Ci0vKgotICBHZXQgaGVyZSBvbmx5IGlmIHRoZXJl IGlzIG5vIChtb3JlKSBsb2NrZmlsZSwgc28gbm93IHdlIG1ha2Ugb25lIChvciB0d28pLi4uCi0g IGZsZm5hbSA9IGZ1bGwgbG9ja2ZpbGUgcGF0aG5hbWUsIGUuZy4gIi91c3Ivc3Bvb2wvdXVjcC9M Q0suLmN1bDBwMCIuCi0gIHRtcG5hbSA9IHVuaXF1ZSB0ZW1wb3JhcnkgZmlsbmFtZSwgZS5nLiAi L3Vzci9zcG9vbC91dWNwL0xUTVAuLnBpZCIuCi0qLwotICAgIGNrbWFrbXNnKGZsZm5hbSxGTEZO QU1MLGxvY2tkaXIsIi8iLGxvY2tmaWwsTlVMTCk7IC8qIFNFVCBMSU5FIGRldmljZSAqLwotCi0g ICAgLyogSWYgZGlhbG91dCBkZXZpY2UsIGFsc28gbWFrZSBvbmUgZm9yIGNvcnJlc3BvbmRpbmcg ZGlhbGluIGRldmljZSAqLwotICAgIGxvY2syWzBdID0gJ1wwJzsKLSAgICBpZiAoIXN0cm5jbXAo ZGV2aWNlLCJjdSIsMikgJiYgKnVuaXQgJiYgdHR5ZGV4aXN0cykKLSAgICAgIGNrbWFrbXNnKGxv Y2syLEZMRk5BTUwsbG9ja2RpciwiL0xDSy4udHR5ZCIsdW5pdCxOVUxMKTsKLQotICAgIGlmICgo aW50KXN0cmxlbihsb2NrZGlyKSsxMiA8IExGTkFNTCkKLSAgICAgIHNwcmludGYodG1wbmFtLCIl cy9MVE1QLiUwNWQiLGxvY2tkaXIsKGludCkgcGlkKTsgLyogTWFrZSB0ZW1wIG5hbWUgKi8KLSNp ZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTEwLCJUVExPQ0sgZmxmbmFt IixmbGZuYW0sMCk7Ci0JZGVidWcoRjExMCwiVFRMT0NLIGxvY2syIixsb2NrMiwwKTsKLQlkZWJ1 ZyhGMTEwLCJUVExPQ0sgdG1wbmFtIix0bXBuYW0sMCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVH ICovCi0vKgotICAgTG9ja2ZpbGUgcGVybWlzc2lvbnMuLi4KLSAgIDQ0NCBpcyBzdGFuZGFyZCwg SFAtVVggMTAuMDAgdXNlcyA2NjQuICBJdCBkb2Vzbid0IG1hdHRlci4KLSAgIEtlcm1pdCB1c2Vz IDQ0NDsgdGhlIGRpZmZlcmVuY2UgbGV0cyB1cyB0ZWxsIHdoZXRoZXIgS2VybWl0IGNyZWF0ZWQK LSAgIHRoZSBsb2NrIGZpbGUuCi0qLwotICAgIHByaXZfb24oKTsJCQkJLyogVHVybiBvbiBwcml2 aWxlZ2VzLiAqLwotICAgIGxvY2tmZCA9IGNyZWF0KHRtcG5hbSwgMDQ0NCk7CS8qIFRyeSB0byBj cmVhdGUgdGVtcG9yYXJ5IGZpbGUuICovCi0gICAgaWYgKGxvY2tmZCA8IDApIHsJCQkvKiBDcmVh dGUgZmFpbGVkLiAqLwotCWRlYnVnKEYxMTEsIlRUTE9DSyBjcmVhdCBmYWlsZWQiLHRtcG5hbSxl cnJubyk7Ci0JaWYgKGVycm5vID09IEVOT0VOVCkgewotCSAgICBwZXJyb3IobG9ja2Rpcik7Ci0J ICAgIHByaW50ZigiVVVDUCBub3QgaW5zdGFsbGVkIG9yIEtlcm1pdCBtaXNjb25maWd1cmVkXG4i KTsKLQl9IGVsc2UgewotCSAgICBpZiAoIXF1aWV0KQotCSAgICAgIHBlcnJvcihsb2NrZGlyKTsK LQkgICAgdW5saW5rKHRtcG5hbSk7CQkvKiBHZXQgcmlkIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZS4g Ki8KLQl9Ci0JcHJpdl9vZmYoKTsJCQkvKiBUdXJuIG9mZiBwcml2aWxlZ2VzISEhICovCi0JZGVi dWcoRjEwMSwiVFRMT0NLIHJldHVybnMiLCIiLC0xKTsKLQlyZXR1cm4oLTEpOwkJCS8qIFJldHVy biBmYWlsdXJlIGNvZGUuICovCi0gICAgfQotICAgIGRlYnVnKEYxMTAsIlRUTE9DSyB0ZW1wIG9r Iix0bXBuYW0sMCk7Ci0KLS8qIE5vdyB3cml0ZSBvdXIgcGlkIGludG8gdGhlIHRlbXAgbG9ja2Zp bGUgaW4gaW50ZWdlciBmb3JtYXQuICovCi0KLSAgICBpID0gd3JpdGUobG9ja2ZkLCAoY2hhciAq KSZwaWQsIHNpemVvZihwaWQpKTsKLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewot CWRlYnVnKEYxMDEsIlRUTE9DSyBwaWQiLCIiLHBpZCk7Ci0JZGVidWcoRjEwMSwiVFRMT0NLIHNp emVvZiBwaWQiLCIiLHNpemVvZihwaWQpKTsKLQlkZWJ1ZyhGMTAxLCJUVExPQ0sgd3JpdGUgcGlk IHJldHVybnMiLCIiLGkpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0vKgotICBOb3cg dHJ5IHRvIHJlbmFtZSB0aGUgdGVtcG9yYXJ5IGZpbGUgdG8gdGhlIHJlYWwgbG9ja2ZpbGUgbmFt ZS4KLSAgVGhpcyB3aWxsIGZhaWwgaWYgYSBsb2NrIGZpbGUgb2YgdGhhdCBuYW1lIGFscmVhZHkg ZXhpc3RzLCB3aGljaAotICB3aWxsIGNhdGNoIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIHVz ZXJzLgotKi8KLSAgICBjbG9zZShsb2NrZmQpOwkJCS8qIENsb3NlIHRoZSB0ZW1wIGxvY2tmaWxl LiAqLwotICAgIGNobW9kKHRtcG5hbSwwNDQ0KTsKLQotICAgIHRyaWVzID0gMDsKLSAgICB3aGls ZSAoIWhhc2xvY2sgJiYgdHJpZXMrKyA8IDIpIHsKLQloYXNsb2NrID0gKGxpbmsodG1wbmFtLGZs Zm5hbSkgPT0gMCk7IC8qIENyZWF0ZSBhIGxpbmsgdG8gaXQuICovCi0JZGVidWcoRjEwMSwiVFRM T0NLIGxpbmsiLCIiLGhhc2xvY2spOwotCWlmIChoYXNsb2NrKSB7CQkJLyogSWYgd2UgbWFkZSB0 aGUgbG9ja2ZpbGUuLi4gKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIFdlIGNhbid0IGRvIHRoaXMg YW55IG1vcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgZmlsZSBkZXNjcmlwdG9yIHlldC4gKi8K LSNpZmRlZiBMT0NLRgkJCQkvKiBDYW4gYmUgY2FuY2VsZWQgd2l0aCAtRE5PTE9DS0YgKi8KLS8q Ci0gIENyZWF0ZSBhbiBhZHZpc29yeSBsb2NrIG9uIHRoZSBkZXZpY2UgdGhyb3VnaCBpdHMgZmls ZSBkZXNjcmlwdG9yLgotICBUaGlzIGNvZGUgYWN0dWFsbHkgc2VlbXMgdG8gd29yay4gIElmIGl0 IGlzIGV4ZWN1dGVkLCBhbmQgdGhlbiBhbm90aGVyCi0gIHByb2Nlc3MgdHJpZXMgdG8gb3BlbiB0 aGUgc2FtZSBkZXZpY2UgdW5kZXIgYSBkaWZmZXJlbnQgbmFtZSB0byBjaXJjdW12ZW50Ci0gIHRo ZSBsb2NrZmlsZSwgdGhleSBnZXQgYSAiZGV2aWNlIGJ1c3kiIGVycm9yLgotKi8KLQkgICAgZGVi dWcoRjEwMCwiVFRMT0NLIExPQ0tGIGNvZGUuLi4iLCIiLDApOwotICAgICAgICAgICAgd2hpbGUg KCBsb2NrZih0dHlmZCwgRl9UTE9DSywgMEwpICE9IDAgKSB7Ci0gICAgICAgICAgICAgICAgZGVi dWcoRjExMSwgIlRUTE9DSyBsb2NrZiBlcnJvciIsICIiLCBlcnJubyk7Ci0gICAgICAgICAgICAg ICAgaWYgKCgrK3RyaWVzID49IDMpIHx8IChlcnJubyAhPSBFQUdBSU4pKSB7Ci0gICAgICAgICAg ICAgICAgICAgIHggPSB1bmxpbmsoZmxmbmFtKTsgLyogUmVtb3ZlIHRoZSBsb2NrZmlsZSAqLwot CQkgICAgaWYgKGVycm5vID09IEVBQ0NFUyAmJiAhcXVpZXQpCi0JCSAgICAgIHByaW50ZigiRGV2 aWNlIGFscmVhZHkgbG9ja2VkIGJ5IGFub3RoZXIgcHJvY2Vzc1xuIik7Ci0gICAgICAgICAgICAg ICAgICAgIGhhc2xvY2sgPSAwOwotCQkgICAgYnJlYWs7Ci0JCX0KLSAgICAgICAgICAgICAgICBz bGVlcCgyKTsKLQkgICAgfQotI2VuZGlmIC8qIExPQ0tGICovCi0jZW5kaWYgLyogQ09NTUVOVCAq LwotCi0JICAgIGlmIChoYXNsb2NrKSB7CQkvKiBJZiB3ZSBtYWRlIHRoZSBsb2NrZmlsZSAuLi4g Ki8KLQkJaWYgKGxvY2syWzBdKSB7CQkvKiBpZiB0aGVyZSBpcyB0byBiZSBhIDJuZCBsb2NrZmls ZSAqLwotCQkgICAgbG9ja2ZkID0gY3JlYXQobG9jazIsIDA0NDQpOyAvKiBDcmVhdGUgaXQgKi8K LQkJICAgIGRlYnVnKEYxMTEsIlRUTE9DSyBsb2NrMiBjcmVhdCIsIGxvY2syLCBsb2NrZmQpOwot CQkgICAgaWYgKGxvY2tmZCA+IC0xKSB7CS8qIENyZWF0ZWQgT0ssIHdyaXRlIHBpZC4gKi8KLQkJ CXdyaXRlKGxvY2tmZCwgKGNoYXIgKikmcGlkLCBzaXplb2YocGlkKSApOwotCQkJY2xvc2UobG9j a2ZkKTsJLyogQ2xvc2UgYW5kICovCi0JCQljaG1vZChsb2NrMiwgMDQ0NCk7IC8qIHNldCBwZXJt aXNzaW9ucy4gKi8KLQkJICAgIH0gZWxzZSB7CQkgLyogTm90IE9LLCBidXQgZG9uJ3QgZmFpbC4g Ki8KLQkJCWxvY2syWzBdID0gJ1wwJzsgLyogSnVzdCByZW1lbWJlciBpdCdzIG5vdCB0aGVyZS4g Ki8KLQkJICAgIH0KLQkJfQotCQlicmVhazsJCQkvKiBhbmQgd2UncmUgZG9uZS4gKi8KLQkgICAg fQotCX0KLSAgICB9Ci0gICAgdW5saW5rKHRtcG5hbSk7CQkJLyogVW5saW5rIChyZW1vdmUpIHRo ZSB0ZW1wIGZpbGUuICovCi0gICAgcHJpdl9vZmYoKTsJCQkJLyogVHVybiBvZmYgcHJpdnMgKi8K LSAgICBpID0gaGFzbG9jayA/IDAgOiAtMTsJCS8qIE91ciByZXR1cm4gdmFsdWUgKi8KLSAgICBk ZWJ1ZyhGMTAxLCJUVExPQ0sgcmV0dXJucyIsIiIsaSk7Ci0gICAgcmV0dXJuKGkpOwotI2VuZGlm IC8qIEhQVVggKi8KLSNlbmRpZiAvKiBVU0VUVFlMT0NLICovCi0jZW5kaWYgLyogIU5PVVVDUCAq LwotfQotCi0vKiAgVCBUIFUgTiBMIE8gQyBLICAqLwotCi1zdGF0aWMgaW50Ci10dHVubGNrKCkg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtb3ZlIFVVQ1AgbG9ja2ZpbGUocyku ICovCi0jaWZuZGVmIE5PVVVDUAotICAgIGludCB4OwotCi0gICAgZGVidWcoRjExMSwidHR1bmxj ayIsZmxmbmFtLGhhc2xvY2spOwotCi0jaWZkZWYgVVNFVFRZTE9DSwotCi0gICAgaWYgKGhhc2xv Y2sgJiYgKmZsZm5hbSkgewotCWludCB4OwotCXByaXZfb24oKTsJCQkvKiBUdXJuIG9uIHByaXZz ICovCi0jaWZkZWYgVVNFX1VVX0xPQ0sKLQl4ID0gdXVfdW5sb2NrKGxvY2tuYW1lKTsKLSNlbHNl ICAvKiBVU0VfVVVfTE9DSyAqLwotCXggPSB0dHl1bmxvY2sobG9ja25hbWUpOwkvKiBUcnkgdG8g dW5sb2NrICovCi0jZW5kaWYgLyogVVNFX1VVX0xPQ0sgKi8KLQlwcml2X29mZigpOwkJCS8qIFR1 cm4gb2ZmIHByaXZzICovCi0JaWYgKHggPCAwICYmICFxdWlldCkKLQkgIHByaW50ZigiV2Fybmlu ZyAtIENhbid0IHJlbW92ZSBsb2NrZmlsZTogJXNcbiIsIGZsZm5hbSk7Ci0KLQkqZmxmbmFtID0g J1wwJzsJCQkvKiBFcmFzZSB0aGUgbmFtZS4gKi8KLQloYXNsb2NrID0gMDsKLQlyZXR1cm4oMCk7 Ci0gICAgfQotCi0jZWxzZSAgLyogTm8gdHR5bG9jaygpLi4uICovCi0KLSAgICBpZiAoaGFzbG9j ayAmJiAqZmxmbmFtKSB7Ci0JLyogRG9uJ3QgcmVtb3ZlIGxvY2tmaWxlIGlmIHdlIGRpZG4ndCBt YWtlIGl0IG91cnNlbHZlcyAqLwotCWlmICgoeCA9IHR0cnBpZChmbGZuYW0pKSAhPSAoaW50KWdl dHBpZCgpKSB7Ci0JICAgIGRlYnVnKEYxMTEsInR0dW5sY2sgbG9ja2ZpbGUgc2VpemVkIixmbGZu YW0seCk7Ci0JICAgIHByaW50ZigiV2FybmluZyAtIExvY2tmaWxlICVzIHNlaXplZCBieSBwaWQg JWRcbiIsCi0JCSAgIGZsZm5hbSwKLQkJICAgeAotCQkgICApOwotCSAgICByZXR1cm4oMCk7Ci0J fQotCXByaXZfb24oKTsJCQkvKiBUdXJuIHByaXZpbGVnZXMgb24uICAqLwotCWVycm5vID0gMDsK LQl4ID0gdW5saW5rKGZsZm5hbSk7CQkvKiBSZW1vdmUgdGhlIGxvY2tmaWxlLiAqLwotCWRlYnVn KEYxMTEsInR0dW5sY2sgdW5saW5rIixmbGZuYW0seCk7Ci0JaWYgKHggPCAwKSB7Ci0JICAgIGlm IChlcnJubyAmJiAhcXVpZXQpCi0JICAgICAgcGVycm9yKHR0bm1zdik7Ci0JICAgIHByaW50Zigi V2FybmluZyAtIENhbid0IHJlbW92ZSBsb2NrZmlsZTogJXNcbiIsIGZsZm5hbSk7Ci0JfQotCWhh c2xvY2sgPSAwOwotCSpmbGZuYW0gPSAnXDAnOwkJCS8qIEVyYXNlIHRoZSBuYW1lLiAqLwotCi0j aWZkZWYgUlRBSVgKLQllcnJubyA9IDA7Ci0JeCA9IHVubGluayhsa2ZsZm4pOwkJLyogUmVtb3Zl IGxpbmsgdG8gbG9ja2ZpbGUgKi8KLQlkZWJ1ZyhGMTExLCJ0dHVubGNrIEFJWCBsaW5rIHVubGlu ayIsbGtmbGZuLHgpOwotCWlmICh4IDwgMCkgewotCSAgICBpZiAoZXJybm8gJiYgIXF1aWV0KQot CSAgICAgIHBlcnJvcih0dG5tc3YpOwotCSAgICBwcmludGYoIldhcm5pbmcgLSBDYW4ndCByZW1v dmUgbGluayB0byBsb2NrZmlsZTogJXNcbiIsIGxrZmxmbik7Ci0JfQotCSpsa2ZsZm4gPSAnXDAn OwotI2Vsc2UKLQlpZiAobG9jazJbMF0pIHsJCQkvKiBJZiB0aGVyZSBpcyBhIHNlY29uZCBsb2Nr ZmlsZSwgKi8KLQkgICAgZXJybm8gPSAwOwotCSAgICB4ID0gdW5saW5rKGxvY2syKTsJCS8qICBy ZW1vdmUgaXQgdG9vLiAqLwotCSAgICBkZWJ1ZyhGMTExLCJ0dHVubGNrIGxvY2syIHVubGluayIs bG9jazIseCk7Ci0JICAgIGlmICh4IDwgMCkgewotCQlpZiAoZXJybm8gJiYgIXF1aWV0KQotCQkg IHBlcnJvcih0dG5tc3YpOwotCQlwcmludGYoIldhcm5pbmcgLSBDYW4ndCByZW1vdmUgc2Vjb25k YXJ5IGxvY2tmaWxlOiAlc1xuIiwKLQkJICAgICAgIGxvY2syCi0JCSAgICAgICApOwotCSAgICB9 Ci0JICAgIGxvY2syWzBdID0gJ1wwJzsJCS8qIEZvcmdldCBpdHMgbmFtZS4gKi8KLQl9Ci0jZW5k aWYgLyogUlRBSVggKi8KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBMT0NLRgotICAgICAgICAo Vk9JRCkgbG9ja2YodHR5ZmQsIEZfVUxPQ0ssIDBMKTsgLyogUmVtb3ZlIGFkdmlzb3J5IGxvY2sg Ki8KLSNlbmRpZiAvKiBMT0NLRiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotCXByaXZfb2Zm KCk7CQkJLyogVHVybiBwcml2aWxlZ2VzIG9mZi4gKi8KLSAgICB9Ci0jZW5kaWYgLyogVVNFVFRZ TE9DSyAqLwotI2VuZGlmIC8qICFOT1VVQ1AgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qCi0g IDQuM0JTRC1zdHlsZSBVVUNQIGxpbmUgZGlyZWN0aW9uIGNvbnRyb2wuCi0gIChTdGFuIEJhcmJl ciwgUmljZSBVLCAxOTgwLXNvbWV0aGluZy4uLikKLSovCi0jaWZuZGVmIE5PVVVDUAotI2lmZGVm IEFDVUNOVFJMCi1WT0lECi1hY3VjbnRybChmbGFnLHR0bmFtZSkgY2hhciAqZmxhZywgKnR0bmFt ZTsgewotICAgIGNoYXIgeFtERVZOQU1MRU4rMzJdLCAqZGV2aWNlLCAqZGV2bmFtZTsKLQotICAg IGlmIChzdHJjbXAodHRuYW1lLENUVE5BTSkgPT0gMCB8fCB4bG9jYWwgPT0gMCkgLyogSWYgbm90 IGxvY2FsLCAqLwotICAgICAgcmV0dXJuOwkJCQkvKiBqdXN0IHJldHVybi4gKi8KLSAgICBkZXZp Y2UgPSAoKGRldm5hbWUgPSB4eGxhc3QodHRuYW1lLCcvJykpICE9IE5VTEwgPyBkZXZuYW1lKzEg OiB0dG5hbWUpOwotICAgIGlmIChzdHJuY21wKGRldmljZSwiTENLLi4iLDQpID09IDApIGRldmlj ZSArPSA1OwotICAgIGNrbWFrbXNnKHgsREVWTkFNTEVOKzMyLCIvdXNyL2xpYi91dWNwL2FjdWNu dHJsICIsZmxhZywiICIsZGV2aWNlKTsKLSAgICBkZWJ1ZyhGMTEwLCJjYWxsZWQgIix4LDApOwot ICAgIHpzeXNjbWQoeCk7Ci19Ci0jZW5kaWYgLyogQUNVQ05UUkwgKi8KLSNlbmRpZiAvKiBOT1VV Q1AgKi8KLQotLyoKLSAgVCBUIEggRiBMIE8gVyAgLS0gIFNldCBvciBSZXNldCBoYXJkd2FyZSBm bG93IGNvbnRyb2wuCi0KLSAgVGhpcyBpcyBhbiBhdHRlbXB0IHRvIGNvbGxlY3QgYWxsIGhhcmR3 YXJlLWZsb3ctY29udHJvbCByZWxhdGVkIGNvZGUKLSAgaW50byBhIHNpbmdsZSBtb2R1bGUuICBU aGFua3MgdG8gUmljayBTbGFka2V5IGFuZCBKb2huIEtvaGwgZm9yIGxvdHMgb2YKLSAgaGVscCBo ZXJlLiAgT3ZlcnZpZXc6Ci0KLSAgSGFyZHdhcmUgZmxvdyBjb250cm9sIGlzIG5vdCBzdXBwb3J0 ZWQgaW4gbWFueSBVTklYIGltcGxlbWVudGlvbnMuICBFdmVuCi0gIHdoZW4gaXQgaXMgc3VwcG9y dGVkLCB0aGVyZSBpcyBubyAoaGEgaGEpICJzdGFuZGFyZCIgZm9yIHRoZSBwcm9ncmFtbWluZwot ICBpbnRlcmZhY2UuICBJbiBnZW5lcmFsLCA0LjNCU0QgYW5kIGVhcmxpZXIgKHNvbWV0aW1lcyks IDQuNEJTRCwgU3lzdGVtIFYsCi0gIFN1bk9TLCBBSVgsIGV0YywgaGF2ZSB0b3RhbGx5IGRpZmZl cmVudCBtZXRob2RzLiAgKEFuZCwgbm90IHN0cmljdGx5Ci0gIHJlbGV2YW50IGhlcmUsIHRoZSBw cm9ncmFtbWluZyBpbnRlcmZhY2Ugb2Z0ZW4gYnJpbmdzIG9uZSBvbmx5IHRvIGEgbm8tb3AKLSAg aW4gdGhlIGRldmljZSBkcml2ZXIhKQotCi0gIEFtb25nIGFsbCB0aGVzZSwgd2UgaGF2ZSB0d28g bWFqb3IgdHlwZXMgb2YgQVBJczogdGhvc2UgaW4gd2hpY2ggaGFyZHdhcmUKLSAgZmxvdyBjb250 cm9sIGlzIGRldGVybWluZWQgYnkgYml0cyBpbiB0aGUgc2FtZSB0ZXJtaW8vdGVybWlvcy9zZ3R0 eSBtb2RlCi0gIHdvcmQocykgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJvbGxpbmcgc3VjaCBpdGVt cyBhcyBDQlJFQUsgdnMgUkFXIG1vZGUsIGFuZAotICB3aGljaCBhcmUgYWxzbyB1c2VkIGJ5IHRo ZSB0dHZ0KCksIHR0cGt0KCksIGNvbmJpbigpLCBhbmQgY29uY2IoKSByb3V0aW5lcwotICBmb3Ig Y2hhbmdpbmcgdGVybWluYWwgbW9kZXMuICBBbmQgdGhvc2UgdGhhdCB1c2UgZW50aXJlbHkgZGlm ZmVyZW50Ci0gIG1lY2hhbmlzbXMuCi0KLSAgSW4gdGhlIGZpcnN0IGNhdGVnb3J5LCBpdCBpcyBp bXBvcnRhbnQgdGhhdCBhbnkgY2hhbmdlIGluIHRoZSBtb2RlIGJpdHMgYmUKLSAgcmVmbGVjdGVk IGluIHRoZSByZWxldmFudCB0ZXJtaW8ocykvc2d0dHkgc3RydWN0dXJlLCBzbyB0aGF0IHN1YnNl cXVlbnQKLSAgY2hhbmdlcyB0byB0aGF0IHN0cnVjdHVyZSBkbyBub3Qgd2lwZSBvdXQgdGhlIGVm ZmVjdHMgb2YgdGhpcyByb3V0aW5lLiAgVGhhdAotICBpcyB3aHkgYSBwb2ludGVyLCBhdHRycywg dG8gdGhlIGFwcHJvcHJpYXRlIHN0cnVjdHVyZSBpcyBwYXNzZWQgYXMgYQotICBwYXJhbWV0ZXIg dG8gdGhpcyByb3V0aW5lLgotCi0gIFRoZSBzZWNvbmQgY2F0ZWdvcnkgc2hvdWxkIGdpdmUgdXMg bm8gd29ycmllcywgc2luY2UgYW55IGNoYW5nZXMgdG8gaGFyZHdhcmUKLSAgZmxvdyBjb250cm9s IGFjY29tcGxpc2hlZCBieSB0aGlzIHJvdXRpbmUgc2hvdWxkIG5vdCBhZmZlY3QgdGhlIHRlcm1p byhzKS8KLSAgc2d0dHkgc3RydWN0dXJlcywgYW5kIHRoZXJlZm9yZSB3aWxsIG5vdCBiZSB1bmRv bmUgYnkgbGF0ZXIgY2hhbmdlcyB0byB0aGVtLgotCi0gIFRoZSBzZWNvbmQgYXJndW1lbnQsIHN0 YXR1cywgbWVhbnMgdG8gdHVybiBvbiBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaWYKLSAgbm9uemVy bywgYW5kIHRvIHR1cm4gaXQgb2ZmIGlmIHplcm8uCi0KLSAgUmV0dXJuczogMCBvbiBhcHBhcmVu dCBzdWNjZXNzLCAtMSBvbiBwcm9iYWJsZSBmYWlsdXJlLgotKi8KLQotLyoKLSAgVGhlIGZvbGxv d2luZyBidXNpbmVzcyBpcyBmb3IgQlNESSwgd2hlcmUgaXQgd2FzIGRpc2NvdmVyZWQgdGhhdCB0 d28KLSAgc2VwYXJhdGUgYml0cywgQ0NUU19PRkxPVyBhbmQgQ1JUU19JRkxPVywgYXJlIHVzZWQg aW4gaGFyZHdhcmUgZmxvdyBjb250cm9sLAotICBidXQgQ1RSU0NUUyBpcyBkZWZpbmVkIChpbiA8 dGVybWlvcy5oPikgdG8gYmUganVzdCBDQ1RTX09GTE9XIHJhdGhlciBib3RoCi0gIGJpdHMsIHNv IGh3ZmMgb25seSB3b3JrcyBpbiBvbmUgZGlyZWN0aW9uIGlmIHlvdSB1c2UgQ1JUU0NUUyB0byBj b250cm9sIGl0LgotICBPdGhlciA0LjRCU0QtYmFzZWQgVW5peGVzIHN1Y2ggYXMgRnJlZUJTRCA0 LjEsIHdoaWNoIHVzZSB0aGVzZSB0d28gYml0cywKLSAgZGVmaW5lIENSVFNDVFMgY29ycmVjdGx5 LgotKi8KLSNpZmRlZiBGSVhDUlRTQ1RTCi0jaWZkZWYgQ1JUU0NUUwotI2lmZGVmIENDVFNfT0ZM T1cKLSNpZmRlZiBDUlRTX0lGTE9XCi0jdW5kZWYgQ1JUU0NUUwotI2RlZmluZSBDUlRTQ1RTIChD UlRTX0lGTE9XfENDVFNfT0ZMT1cpCi0jZW5kaWYgLyogQ1JUU19JRkxPVyAqLwotI2VuZGlmIC8q IENDVFNfT0ZMT1cgKi8KLSNlbmRpZiAvKiBDUlRTQ1RTICovCi0jZW5kaWYgLyogRklYQ1JUU0NU UyAqLwotCi1zdGF0aWMgaW50Ci10dGhmbG93KGZsb3csIHN0YXR1cywgYXR0cnMpCi0gICAgaW50 IGZsb3csCQkJCS8qIFR5cGUgb2YgZmxvdyBjb250cm9sIChja2NkZWIuaCkgKi8KLSAgICBzdGF0 dXM7CQkJCS8qIE5vbnplcm8gPSB0dXJuIGl0IG9uICovCi0JCQkJCS8qIFplcm8gPSB0dXJuIGl0 IG9mZiAqLwotI2lmZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIFBPU0lYIG9yIEJTRDQ0ICovCi0gICAg c3RydWN0IHRlcm1pb3MgKmF0dHJzOwotI2Vsc2UJCQkJCS8qIFN5c3RlbSBWICovCi0jaWZkZWYg QVRUU1YKLSNpZmRlZiBBVFQ3MzAwCi0jaWZkZWYgVU5JWDM1MU0KLS8qIEFUJlQgVU5JWCAzLjUx bSBjYW4gc2V0IGJ1dCBub3QgdGVzdCBmb3IgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCi0jZGVm aW5lIFJUU0ZMT1cgQ1RTQ0QKLSNkZWZpbmUgQ1RTRkxPVyBDVFNDRAotI2VuZGlmIC8qIEFUVDcz MDAgKi8KLSNlbmRpZiAvKiBVTklYMzUxTSAqLwotICAgIHN0cnVjdCB0ZXJtaW8gKmF0dHJzOwot I2Vsc2UJCQkJCS8qIEJTRCwgVjcsIGV0YyAqLwotICAgIHN0cnVjdCBzZ3R0eWIgKmF0dHJzOwkJ Lyogc2d0dHkgaW5mby4uLiAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogQlNENDRP UlBPU0lYICovCi0vKiB0dGhmbG93ICovIHsKLQotICAgIGludCB4ID0gMDsJCQkJLyogdHRoZmxv dygpIHJldHVybiBjb2RlICovCi0KLSNpZmRlZiBQbGFuOQotICAgIHJldHVybiBwOXR0aGZsb3co Zmxvdywgc3RhdHVzKTsKLSNlbHNlCi0KLSNpZm5kZWYgT1hPUwkJCQkvKiBOT1QgT2xpdmV0dGkg WC9PUy4uLiAqLwotLyoKLSAgRm9yIFN1bk9TIDQuMCBhbmQgbGF0ZXIgaW4gdGhlIEJTRCBlbnZp cm9ubWVudCAuLi4KLQotICBUaGUgZGVjbGFyYXRpb25zIGFyZSBjb3BpZWQgYW5kIGludGVycHJl dGVkIGZyb20gdGhlIFN5c3RlbSBWIGhlYWRlciBmaWxlcywKLSAgc28gd2UgZG9uJ3QgYWN0dWFs bHkgaGF2ZSB0byBwdWxsIGluIGFsbCB0aGUgU3lzdGVtIFYganVuayB3aGVuIGJ1aWxkaW5nCi0g IEMtS2VybWl0IGZvciBTdW5PUyBpbiB0aGUgQlNEIGVudmlyb25tZW50LCB3aGljaCB3b3VsZCBi ZSBkYW5nZXJvdXMgYmVjYXVzZQotICBoYXZpbmcgdGhvc2Ugc3ltYm9scyBkZWZpbmVkIHdvdWxk IGNhdXNlIHVzIHRvIHRha2UgdGhlIHdyb25nIHBhdGhzIHRocm91Z2gKLSAgdGhlIGNvZGUuICBU aGUgY29kZSBpbiB0aGlzIHNlY3Rpb24gaXMgdXNlZCBpbiBib3RoIHRoZSBCU0QgYW5kIFN5cyBW IFN1bk9TCi0gIHZlcnNpb25zLgotKi8KLSNpZmRlZiBTVU5PUzQxCi0vKgotICBJbiBTdW5PUyA0 LjEgYW5kIGxhdGVyLCB3ZSB1c2UgdGhlIFBPU0lYIGNhbGxzIHJhdGhlciB0aGFuIGlvY3RsIGNh bGxzCi0gIGJlY2F1c2UgR05VIENDIHVzZXMgZGlmZmVyZW50IGZvcm1hdHMgZm9yIHRoZSBfSU94 eHggbWFjcm9zIHRoYW4gcmVndWxhciBDQzsKLSAgdGhlIFBPU0lYIGZvcm1zIHdvcmsgZm9yIGJv dGguICBCdXQgdGhlIFBPU0lYIGNhbGxzIGFyZSBub3QgYXZhaWxhYmxlIGluCi0gIFN1bk9TIDQu MC4KLSovCi0jZGVmaW5lIENSVFNDVFMgMHg4MDAwMDAwMAkJLyogUlRTL0NUUyBmbG93IGNvbnRy b2wgKi8KLSNkZWZpbmUgVENTQU5PVyAwCQkJLyogRG8gaXQgbm93ICovCi0KLSAgICBzdHJ1Y3Qg dGVybWlvcyB7Ci0JdW5zaWduZWQgbG9uZyBjX2lmbGFnOwkJLyogSW5wdXQgbW9kZXMgKi8KLQl1 bnNpZ25lZCBsb25nIGNfb2ZsYWc7CQkvKiBPdXRwdXQgbW9kZXMgKi8KLQl1bnNpZ25lZCBsb25n IGNfY2ZsYWc7CQkvKiBDb250cm9sIG1vZGVzICovCi0JdW5zaWduZWQgbG9uZyBjX2xmbGFnOwkJ LyogTGluZSBkaXNjaXBsaW5lIG1vZGVzICovCi0JY2hhciBjX2xpbmU7Ci0JQ0hBUiBjX2NjWzE3 XTsKLSAgICB9OwotICAgIHN0cnVjdCB0ZXJtaW9zIHRlbXA7Ci0KLV9QUk9UT1RZUCggaW50IHRj Z2V0YXR0ciwgKGludCwgc3RydWN0IHRlcm1pb3MgKikgKTsKLV9QUk9UT1RZUCggaW50IHRjc2V0 YXR0ciwgKGludCwgaW50LCBzdHJ1Y3QgdGVybWlvcyAqKSApOwotLyoKLSAgV2hlbiBDUlRTQ1RT IGlzIHNldCwgU3VuT1Mgd29uJ3QgZG8gb3V0cHV0IHVubGVzcyBib3RoIENUUyBhbmQgQ0QgYXJl Ci0gIGFzc2VydGVkLiAgU28gd2UgZG9uJ3Qgc2V0IENSVFNDVFMgdW5sZXNzIENEIGlzIHVwLiAg VGhpcyBzaG91bGQgYmUgT0ssCi0gIHNpbmNlIHdlIGRvbid0IG5lZWQgUlRTL0NUUyBkdXJpbmcg ZGlhbGluZywgYW5kIGFmdGVyIGRpYWxpbmcgaXMgY29tcGxldGUsCi0gIHdlIHNob3VsZCBoYXZl IENELiAgSWYgbm90LCB3ZSBzdGlsbCBjb21tdW5pY2F0ZSwgYnV0IHdpdGhvdXQgUlRTL0NUUy4K LSovCi0gICAgaW50IG1mbGFnczsJCQkJLyogTW9kZW0gc2lnbmFsIGZsYWdzICovCi0KLSNpZmRl ZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICov Ci0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVU UFRZICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNVTk9TNDEgZW50cnkgc3RhdHVzIiwi IixzdGF0dXMpOwotICAgIGlmICghc3RhdHVzKSB7CQkJLyogVHVybiBoYXJkIGZsb3cgb2ZmICov Ci0JaWYgKHRjZ2V0YXR0cih0dHlmZCwgJnRlbXApID4gLTEgJiYgLyogR2V0IGRldmljZSBhdHRy aWJ1dGVzICovCi0JICAgICh0ZW1wLmNfY2ZsYWcgJiBDUlRTQ1RTKSkgeyAvKiBDaGVjayBmb3Ig UlRTL0NUUyAqLwotCSAgICB0ZW1wLmNfY2ZsYWcgJj0gfkNSVFNDVFM7CS8qIEl0J3MgdGhlcmUs IHJlbW92ZSBpdCAqLwotCSAgICB4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1csJnRlbXApOwot CX0KLSAgICB9IGVsc2UgewkJCQkvKiBUdXJuIGhhcmQgZmxvdyBvbiAqLwotCWlmIChpb2N0bCh0 dHlmZCxUSU9DTUdFVCwmbWZsYWdzKSA+IC0xICYmIC8qIEdldCBtb2RlbSBzaWduYWxzICovCi0J ICAgIChtZmxhZ3MgJiBUSU9DTV9DQVIpKSB7CQkvKiBDaGVjayBmb3IgQ0QgKi8KLQkgICAgZGVi dWcoRjEwMCwidHRoZmxvdyBTdW5PUyBoYXMgQ0QiLCIiLDApOwotCSAgICBpZiAodGNnZXRhdHRy KHR0eWZkLCAmdGVtcCkgPiAtMSAmJiAvKiBHZXQgZGV2aWNlIGF0dHJpYnV0ZXMgKi8KLQkJISh0 ZW1wLmNfY2ZsYWcgJiBDUlRTQ1RTKSkgeyAvKiBDaGVjayBmb3IgUlRTL0NUUyAqLwotCQl0ZW1w LmNfY2ZsYWcgfD0gQ1JUU0NUUzsJLyogTm90IHRoZXJlLCBhZGQgaXQgKi8KLQkJeCA9IHRjc2V0 YXR0cih0dHlmZCxUQ1NBTk9XLCZ0ZW1wKTsKLQkgICAgfQotCX0gZWxzZSB7Ci0JICAgIHggPSAt MTsKLQkgICAgZGVidWcoRjEwMCwidHRoZmxvdyBTdW5PUyBubyBDRCIsIiIsMCk7Ci0JfQotICAg IH0KLSNlbHNlCi0jaWZkZWYgUU5YCi0gICAgc3RydWN0IHRlcm1pb3MgdGVtcDsKLSNpZmRlZiBO RVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0j aWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZ ICovCi0gICAgZGVidWcoRjEwMSwidHRoZmxvdyBRTlggZW50cnkgc3RhdHVzIiwiIixzdGF0dXMp OwotICAgIGlmICh0Y2dldGF0dHIodHR5ZmQsICZ0ZW1wKSA+IC0xKSB7CS8qIEdldCBkZXZpY2Ug YXR0cmlidXRlcyAqLwotCWlmICghc3RhdHVzKSB7CQkJLyogVHVybiBoYXJkIGZsb3cgb2ZmICov Ci0JICAgIGlmICgodGVtcC5jX2NmbGFnICYgKElIRkxPV3xPSEZMT1cpKSA9PSAoSUhGTE9XfE9I RkxPVykpIHsKLQkJdGVtcC5jX2NmbGFnICY9IH4oSUhGTE9XfE9IRkxPVyk7IC8qIEl0J3MgdGhl cmUsIHJlbW92ZSBpdCAqLwotCQlhdHRycy0+Y19jZmxhZyAmPSB+KElIRkxPV3xPSEZMT1cpOwot CQl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1csJnRlbXApOwotCSAgICB9Ci0JfSBlbHNlIHsJ CQkvKiBUdXJuIGhhcmQgZmxvdyBvbiAqLwotCSAgICBpZiAoKHRlbXAuY19jZmxhZyAmIChJSEZM T1d8T0hGTE9XKSkgIT0gKElIRkxPV3xPSEZMT1cpKSB7Ci0JCXRlbXAuY19jZmxhZyB8PSAoSUhG TE9XfE9IRkxPVyk7IC8qIE5vdCB0aGVyZSwgYWRkIGl0ICovCi0JCXRlbXAuY19pZmxhZyAmPSB+ KElYT058SVhPRkYpOyAgIC8qIEJ5ZSB0byBJWE9OL0lYT0ZGICovCi0JCXR0cmF3LmNfbGZsYWcg fD0gSUVYVEVOOyAgICAgICAgIC8qIE11c3QgYmUgb24gKi8KLQkJeCA9IHRjc2V0YXR0cih0dHlm ZCxUQ1NBTk9XLCZ0ZW1wKTsKLQkJYXR0cnMtPmNfY2ZsYWcgfD0gKElIRkxPV3xPSEZMT1cpOwot CQlhdHRycy0+Y19pZmxhZyAmPSB+KElYT058SVhPRkYpOwotCSAgICB9Ci0JfQotICAgIH0gZWxz ZSB7Ci0JeCA9IC0xOwotCWRlYnVnKEYxMDAsICJ0dGhmbG93IFFOWCBnZXRhdHRyIGZhaWxzIiwg IiIsIDApOwotICAgIH0KLSNlbHNlCi0jaWZkZWYgUE9TSVhfQ1JUU0NUUwotLyoKLSAgUE9TSVhf Q1JUU0NUUyBpcyBkZWZpbmVkIGluIGNrY2RlYi5oIG9yIG9uIENDIGNvbW1hbmQgbGluZS4KLSAg Tm90ZTogRG8gbm90IGFzc3VtZSBDUlRTQ1RTIGlzIGEgb25lLWJpdCBmaWVsZCEKLSovCi0gICAg c3RydWN0IHRlcm1pb3MgdGVtcDsKLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1 cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5 KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgZGVidWcoRjEwMSwidHRoZmxv dyBQT1NJWF9DUlRTQ1RTIGVudHJ5IHN0YXR1cyIsIiIsc3RhdHVzKTsKLSAgICBlcnJubyA9IDA7 Ci0gICAgeCA9IHRjZ2V0YXR0cih0dHlmZCwgJnRlbXApOwotICAgIGRlYnVnKEYxMTEsInR0aGZs b3cgUE9TSVhfQ1JUU0NUUyB0Y2dldGF0dHIiLGNraXRvYSh4KSxlcnJubyk7Ci0gICAgZXJybm8g PSAwOwotICAgIGlmICh4IDwgMCkgewotCXggPSAtMTsKLSAgICB9IGVsc2UgewotCWlmICghc3Rh dHVzKSB7CQkJLyogVHVybiBoYXJkIGZsb3cgb2ZmICovCi0JICAgIGlmICgKLSNpZmRlZiBDT01N RU5UCi0JCS8qIFRoaXMgY2FuIGZhaWwgYmVjYXVzZSBvZiBzaWduIGV4dGVuc2lvbiAqLwotCQkv KiBlLmcuIGluIExpbnV4IHdoZXJlIGl0J3MgQml0IDMxICovCi0JCSh0ZW1wLmNfY2ZsYWcgJiBD UlRTQ1RTKSA9PSBDUlRTQ1RTCi0jZWxzZQotCQkodGVtcC5jX2NmbGFnICYgQ1JUU0NUUykgIT0g MAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJKSB7Ci0JCXRlbXAuY19jZmxhZyAmPSB+Q1JUU0NU UzsgLyogSXQncyB0aGVyZSwgcmVtb3ZlIGl0ICovCi0JCWF0dHJzLT5jX2NmbGFnICY9IH5DUlRT Q1RTOwotCQl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1csJnRlbXApOwotCQlkZWJ1ZyhGMTEx LCJ0dGhmbG93IFBPU0lYX0NSVFNDVFMgT0ZGIHRjc2V0YXR0ciIsCi0JCSAgICAgIGNraXRvYSh4 KSxlcnJubyk7Ci0JICAgIH0gZWxzZSB7CQkJLyogSm9obiBEdW5sYXAgMjAxMC0wMS0yNiAqLwot CQlkZWJ1ZyhGMDAxLAotCQkgICAgICAidHRoZmxvdyBiZWZvcmUgZm9yY2luZyBvZmYgYXR0cnMg Q1JUU0NUUyIsCi0JCSAgICAgICIiLAotCQkgICAgICBhdHRycy0+Y19jZmxhZyZDUlRTQ1RTCi0J CSAgICAgICk7Ci0JCWF0dHJzLT5jX2NmbGFnICY9IH5DUlRTQ1RTOyAvKiBmb3JjZSBpdCBvZmYg aWYgIXN0YXR1cyAqLwotCQlkZWJ1ZyhGMDAxLAotCQkgICAgICAidHRoZmxvdyBhZnRlciBmb3Jj aW5nIG9mZiBhdHRycyBDUlRTQ1RTIiwKLQkJICAgICAgIiIsCi0JCSAgICAgIGF0dHJzLT5jX2Nm bGFnJkNSVFNDVFMKLQkJICAgICAgKTsKLQkJfQotCX0gZWxzZSB7CQkJLyogVHVybiBoYXJkIGZs b3cgb24gKi8KLQkgICAgaWYgKAotI2lmZGVmIENPTU1FTlQKLQkJLyogVGhpcyBjYW4gZmFpbCBi ZWNhdXNlIG9mIHNpZ24gZXh0ZW5zaW9uICovCi0JCSh0ZW1wLmNfY2ZsYWcgJiBDUlRTQ1RTKSAh PSBDUlRTQ1RTCi0jZWxzZQotCQkodGVtcC5jX2NmbGFnICYgQ1JUU0NUUykgPT0gMAotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQkJKSB7Ci0JCXRlbXAuY19jZmxhZyB8PSBDUlRTQ1RTOyAvKiBOb3Qg dGhlcmUsIGFkZCBpdCAqLwotCQl0ZW1wLmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGfElYQU5ZKTsg LyogQnllIHRvIElYT04vSVhPRkYgKi8KLQkJeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBTk9XLCZ0 ZW1wKTsKLQkJZGVidWcoRjExMSwidHRoZmxvdyBQT1NJWF9DUlRTQ1RTIE9OIHRjc2V0YXR0ciIs Ci0JCSAgICAgIGNraXRvYSh4KSxlcnJubyk7Ci0JCWF0dHJzLT5jX2NmbGFnIHw9IENSVFNDVFM7 Ci0JCWF0dHJzLT5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRnxJWEFOWSk7Ci0JICAgIH0KLQl9Ci0g ICAgfQotI2Vsc2UKLSNpZmRlZiBTVU5PUzQKLS8qCi0gIFN1bk9TIDQuMCAoYW5kIG1heWJlIGVh cmxpZXI/KS4gIFRoaXMgY29kZSBpcyBkYW5nZXJvdXMgYmVjYXVzZSBpdAotICBwcmV2ZW50cyBj b21waWxhdGlvbiB3aXRoIEdOVSBnY2MsIHdoaWNoIHVzZXMgZGlmZmVyZW50IGZvcm1hdHMgZm9y IHRoZQotICBfSU9SeHh4IG1hY3JvcyB0aGFuIHJlZ3VsYXIgY2MuICBTdW5PUyA0LjEgYW5kIGxh dGVyIGNhbiB1c2UgdGhlIFBPU0lYCi0gIHJvdXRpbmVzIGFib3ZlLCB3aGljaCB3b3JrIGZvciBi b3RoIGNjIGFuZCBnY2MuCi0qLwotI2RlZmluZSBUQ0dFVFMgX0lPUihULCA4LCBzdHJ1Y3QgdGVy bWlvcykgLyogR2V0IG1vZGVzIGludG8gdGVybWlvcyBzdHJ1Y3QgKi8KLSNkZWZpbmUgVENTRVRT IF9JT1coVCwgOSwgc3RydWN0IHRlcm1pb3MpIC8qIFNldCBtb2RlcyBmcm9tIHRlcm1pb3Mgc3Ry dWN0ICovCi0jZGVmaW5lIENSVFNDVFMgMHg4MDAwMDAwMAkJICAvKiBSVFMvQ1RTIGZsb3cgY29u dHJvbCAqLwotCi0gICAgc3RydWN0IHRlcm1pb3MgewotCXVuc2lnbmVkIGxvbmcgY19pZmxhZzsJ CS8qIElucHV0IG1vZGVzICovCi0JdW5zaWduZWQgbG9uZyBjX29mbGFnOwkJLyogT3V0cHV0IG1v ZGVzICovCi0JdW5zaWduZWQgbG9uZyBjX2NmbGFnOwkJLyogQ29udHJvbCBtb2RlcyAqLwotCXVu c2lnbmVkIGxvbmcgY19sZmxhZzsJCS8qIExpbmUgZGlzY2lwbGluZSBtb2RlcyAqLwotCWNoYXIg Y19saW5lOwotCUNIQVIgY19jY1sxN107Ci0gICAgfTsKLSAgICBzdHJ1Y3QgdGVybWlvcyB0ZW1w OwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKLSNlbmRpZiAvKiBO RVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHJldHVybigwKTsKLSNlbmRp ZiAvKiBORVRQVFkgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IGVudHJ5IHN0YXR1cyIsIiIs c3RhdHVzKTsKLSAgICBpZiAoaW9jdGwodHR5ZmQsVENHRVRTLCZ0ZW1wKSA+IC0xKSB7IC8qIEdl dCB0ZXJtaW5hbCBtb2Rlcy4gKi8KLQlpZiAoc3RhdHVzKSB7CQkJLyogVHVybiBoYXJkIGZsb3cg b24gKi8KLQkgICAgdGVtcC5jX2NmbGFnIHw9IENSVFNDVFM7CS8qIEFkZCBSVFMvQ1RTIHRvIHRo ZW0uICovCi0JICAgIHggPSBpb2N0bCh0dHlmZCxUQ1NFVFMsJnRlbXApOyAvKiBTZXQgdGhlbSBh Z2Fpbi4gKi8KLQkgICAgYXR0cnMtPmNfY2ZsYWcgfD0gQ1JUU0NUUzsJLyogQWRkIHRvIGdsb2Jh bCBpbmZvLiAqLwotCX0gZWxzZSB7CQkJLyogVHVybiBoYXJkIGZsb3cgb2ZmICovCi0JICAgIHRl bXAuY19jZmxhZyAmPSB+Q1JUU0NUUzsKLQkgICAgeCA9IGlvY3RsKHR0eWZkLFRDU0VUUywmdGVt cCk7Ci0JICAgIGF0dHJzLT5jX2NmbGFnICY9IH5DUlRTQ1RTOwotCX0KLSAgICB9Ci0jZWxzZQkJ CQkJLyogTm90IFN1bk9TIDQuMCBvciBsYXRlciAqLwotI2lmZGVmIEFJWFJTCQkJCS8qIElCTSBB SVggUlMvNjAwMCAqLwotI2lmbmRlZiBBSVg0MQkJCQkvKiBCdXQgb25seSBwcmUtNC54ID09IFNW UjQgKi8KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7Ci0jZW5kaWYg LyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7Ci0j ZW5kaWYgLyogTkVUUFRZICovCi0gICAgaWYgKHN0YXR1cykgewotCWlmICgoeCA9IGlvY3RsKHR0 eWZkLCBUWEFERENELCAicnRzIikpIDwgMCAmJiBlcnJubyAhPSBFQlVTWSkKLQkgIGRlYnVnKEYx MDAsImhhcmRmbG93IFRYQUREQ0QgKHJ0cykgZXJyb3IiLCAiIiwgMCk7Ci0gICAgfSBlbHNlIHsK LQlpZiAoKHggPSBpb2N0bCh0dHlmZCwgVFhERUxDRCwgInJ0cyIpKSA8IDAgJiYgZXJybm8gIT0g RUlOVkFMKQotCSAgZGVidWcoRjEwMCwiaGFyZGZsb3cgVFhERUxDRCAocnRzKSBlcnJvciIsICIi LCAwKTsKLSAgICB9Ci0jZW5kaWYgLyogQUlYNDEgKi8KLSNlbHNlCQkJCQkvKiBOb3QgQUlYIFJT LzYwMDAgKi8KLQotI2lmZGVmIEFUVFNWCQkJCS8qIFN5c3RlbSBWLi4uICovCi0KLSNpZmRlZiBD S19TQ09WNQkJCQkvKiBTQ08gT3BlbiBTZXJ2ZXIgNS4wICovCi0jZGVmaW5lIENLX1NDT1VOSVgK LSNlbHNlCi0jaWZkZWYgTV9VTklYCQkJCS8qIFNDTyBVTklYIDMuMnY0Lnggb3IgZWFybGllciAq LwotI2RlZmluZSBDS19TQ09VTklYCi0jZW5kaWYgLyogTV9VTklYICovCi0jZW5kaWYgLyogQ0tf U0NPVjUgKi8KLQotI2lmZGVmIFNDT19GT1JDRV9SVFNYT0ZGCi0jaWZkZWYgQ0tfU0NPVU5JWAkJ CS8qIEJ1dCBub3QgU0NPIE9wZW5TZXJ2ZXIgNS4wLjQgKi8KLSNpZmRlZiBTQ09fT1NSNTA0CQkJ Lyogb3IgbGF0ZXIuLi4gKi8KLSN1bmRlZiBDS19TQ09VTklYCi0jZW5kaWYgLyogU0NPX09TUjUw NCAqLwotI2VuZGlmIC8qIENLX1NDT1VOSVggKi8KLSNlbmRpZiAvKiBTQ09fRk9SQ0VfUlRTWE9G RiAqLwotCi0jaWZkZWYgQ0tfU0NPVU5JWAotI2lmZGVmIFBPU0lYCi0gICAgc3RydWN0IHRlcm1p b3MgdGVtcDsKLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7Ci0jZW5k aWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7 Ci0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgZGVidWcoRjEwMSwidHRoZmxvdyBTQ09VTklYIFBP U0lYIGVudHJ5IHN0YXR1cyIsIiIsc3RhdHVzKTsKLSAgICBlcnJubyA9IDA7Ci0gICAgeCA9IHRj Z2V0YXR0cih0dHlmZCwgJnRlbXApOwotICAgIGRlYnVnKEYxMTEsInR0aGZsb3cgU0NPIFVOSVgg UE9TSVggdGNnZXRhdHRyIixja2l0b2EoeCksZXJybm8pOwotI2Vsc2UgLyogUE9TSVggKi8KLSAg ICBzdHJ1Y3QgdGVybWlvIHRlbXA7Ci0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0 dXJuKDApOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0 eSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotICAgIGRlYnVnKEYxMDEsInR0aGZs b3cgU0NPVU5JWCBub24tUE9TSVggZW50cnkgc3RhdHVzIiwiIixzdGF0dXMpOwotICAgIHggPSBp b2N0bCh0dHlmZCwgVENHRVRBLCAmdGVtcCk7Ci0gICAgZGVidWcoRjExMSwidHRoZmxvdyBTQ08g VU5JWCBub24tUE9TSVggVENHRVRBIixja2l0b2EoeCksZXJybm8pOwotI2VuZGlmIC8qIFBPU0lY ICovCi0vKgotICBUaGlzIGlzIG5vdCByZWFsbHkgUE9TSVgsIHNpbmNlIFBPU0lYIGRvZXMgbm90 IGRlYWwgd2l0aCBoYXJkd2FyZSBmbG93Ci0gIGNvbnRyb2wsIGJ1dCB3ZSBhcmUgdXNpbmcgdGhl IFBPU0lYIEFQSXMuICBJbiBmYWN0LCBSVFNGTE9XIGFuZCBDVFNGTE9XCi0gIGFyZSBkZWZpbmVk IGluIHRlcm1pby5oLCBidXQgd2l0aGluICNpZm5kZWYgX1BPU0lYX1NPVVJDRS4uI2VuZGlmLiAg U28KLSAgbGV0J3MgdHJ5IGZvcmNpbmcgdGhlaXIgZGVmaW5pdGlvbnMgaGVyZS4KLSovCi0jaWZu ZGVmIENUU0ZMT1cKLSNkZWZpbmUgQ1RTRkxPVyAwMDIwMDAwCi0gICAgZGVidWcoRjEwMSwidHRo ZmxvdyBTQ08gZGVmaW5pbmcgQ1RTRkxPVyIsIiIsQ1RTRkxPVyk7Ci0jZWxzZQotICAgIGRlYnVn KEYxMDEsInR0aGZsb3cgU0NPIENUU0ZMT1ciLCIiLENUU0ZMT1cpOwotI2VuZGlmIC8qIENUU0ZM T1cgKi8KLSNpZm5kZWYgUlRTRkxPVwotI2RlZmluZSBSVFNGTE9XIDAwNDAwMDAKLSAgICBkZWJ1 ZyhGMTAxLCJ0dGhmbG93IFNDTyBkZWZpbmluZyBSVFNGTE9XIiwiIixSVFNGTE9XKTsKLSNlbHNl Ci0gICAgZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gUlRTRkxPVyIsIiIsUlRTRkxPVyk7Ci0jZW5k aWYgLyogUlRTRkxPVyAqLwotI2lmbmRlZiBPUlRTRkwKLSNkZWZpbmUgT1JUU0ZMIDAxMDAwMDAK LSAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBkZWZpbmluZyBPUlRTRkwiLCIiLE9SVFNGTCk7 Ci0jZWxzZQotICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIE9SVFNGTCIsIiIsT1JUU0ZMKTsK LSNlbmRpZiAvKiBPUlRTRkwgKi8KLQotICAgIGlmICh4ICE9IC0xKSB7Ci0JaWYgKHN0YXR1cykg ewkJCS8qIFR1cm4gaXQgT04gKi8KLQkgICAgdGVtcC5jX2NmbGFnIHw9IFJUU0ZMT1d8Q1RTRkxP VzsKLQkgICAgYXR0cnMtPmNfY2ZsYWcgfD0gUlRTRkxPV3xDVFNGTE9XOwotI2lmZGVmIE9SVFNG TAotCSAgICB0ZW1wLmNfY2ZsYWcgJj0gfk9SVFNGTDsKLQkgICAgYXR0cnMtPmNfY2ZsYWcgJj0g fk9SVFNGTDsKLSNlbmRpZiAvKiBPUlRTRkwgKi8KLQkgICAgdGVtcC5jX2lmbGFnICY9IH4oSVhP TnxJWE9GRnxJWEFOWSk7Ci0JICAgIGF0dHJzLT5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRnxJWEFO WSk7Ci0JfSBlbHNlIHsJCQkvKiBUdXJuIGl0IE9GRiAqLwotI2lmZGVmIE9SVFNGTAotCSAgICB0 ZW1wLmNfY2ZsYWcgJj0gfihSVFNGTE9XfENUU0ZMT1d8T1JUU0ZMKTsKLQkgICAgYXR0cnMtPmNf Y2ZsYWcgJj0gfihSVFNGTE9XfENUU0ZMT1d8T1JUU0ZMKTsKLSNlbHNlICAvKiBPUlRTRkwgKi8K LQkgICAgdGVtcC5jX2NmbGFnICY9IH4oUlRTRkxPV3xDVFNGTE9XKTsKLQkgICAgYXR0cnMtPmNf Y2ZsYWcgJj0gfihSVFNGTE9XfENUU0ZMT1cpOwotI2VuZGlmIC8qIE9SVFNGTCAqLwotCX0KLSNp ZmRlZiBQT1NJWAotCXggPSB0Y3NldGF0dHIodHR5ZmQsIFRDU0FEUkFJTiwgJnRlbXApOwotI2Vs c2UKLQl4ID0gaW9jdGwodHR5ZmQsIFRDU0VUQSwgJnRlbXApOwotI2VuZGlmIC8qIFBPU0lYICov Ci0JZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gc2V0IG1vZGVzIiwiIix4KTsKLSAgICB9Ci0jZWxz ZSAvKiBOb3QgU0NPIFVOSVggKi8KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1 cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5 KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgaWYgKCFzdGF0dXMpIHsJCQkv KiBUdXJuIGl0IE9GRiAqLwotI2lmZGVmIFJUU1hPRkYKLQlkZWJ1ZyhGMTAwLCJ0dGhmbG93IEFU VFNWIFJUUy9DVFMgT0ZGIiwiIiwwKTsKLQlyY3RzeC54X2hmbGFnICY9IH4oUlRTWE9GRnxDVFNY T04pOwotI2lmZGVmIFRDU0VUWAotCXggPSBpb2N0bCh0dHlmZCxUQ1NFVFgsJnJjdHN4KTsKLQlk ZWJ1ZyhGMTAxLCJ0dGhmbG93IEFUVFNWIFRDU0VUWCBPRkYiLCIiLHgpOwotI2Vsc2UKLQl4ID0g LTEKLQlkZWJ1ZyhGMTAwLCJ0dGhmbG93IFRDU0VUWCBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5k aWYgLyogVENTRVRYICovCi0jZWxzZQotCWRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgUlRTWE9G RiBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYgLyogUlRTWE9GRiAqLwotI2lmZGVmIERUUlhP RkYKLQlkZWJ1ZyhGMTAwLCJ0dGhmbG93IEFUVFNWIERUUi9DRCBPRkYiLCIiLDApOwotCXJjdHN4 LnhfaGZsYWcgJj0gfihEVFJYT0ZGfENEWE9OKTsKLQl4ID0gaW9jdGwodHR5ZmQsVENTRVRYLCZy Y3RzeCk7Ci0JZGVidWcoRjEwMSwidHRoZmxvdyBBVFRTViBEVFJYT0ZGIE9GRiIsIiIseCk7Ci0j ZWxzZQotCWRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgRFRSWE9GRiBub3QgZGVmaW5lZCIsIiIs MCk7Ci0jZW5kaWYgLyogRFRSWE9GRiAqLwotICAgIH0gZWxzZSB7CQkJCS8qIFR1cm4gaXQgT04u ICovCi0JaWYgKGZsb3cgPT0gRkxPX1JUU0MpIHsJLyogUlRTL0NUUyBGbG93IGNvbnRyb2wuLi4g Ki8KLQkgICAgZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBSVFMvQ1RTIE9OIiwiIiwwKTsKLSNp ZmRlZiBSVFNYT0ZGCi0JICAgIC8qIFRoaXMgaXMgdGhlIHByZWZlcnJlZCB3YXksIGFjY29yZGlu ZyB0byBTVklEMyAqLwotI2lmZGVmIFRDR0VUWAotCSAgICB4ID0gaW9jdGwodHR5ZmQsVENHRVRY LCZyY3RzeCk7Ci0JICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgVENHRVRYIiwiIix4KTsKLQkgICAg aWYgKHggPiAtMSkgewotCQlyY3RzeC54X2hmbGFnIHw9IFJUU1hPRkYgfCBDVFNYT047Ci0JCXgg PSBpb2N0bCh0dHlmZCxUQ1NFVFgsJnJjdHN4KTsKLQkJZGVidWcoRjEwMCwidHRoZmxvdyBBVFRT ViBpb2N0bCIsIiIseCk7Ci0JICAgIH0KLSNlbHNlCi0JICAgIGRlYnVnKEYxMDAsInR0aGZsb3cg VENHRVRYIG5vdCBkZWZpbmVkIiwiIiwwKTsKLQkgICAgeCA9IC0xCi0jZW5kaWYgLyogVENHRVRY ICovCi0jZWxzZQotCSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IFJUU1hPRkYgbm90IGRlZmluZWQi LCIiLDApOwotCSAgICB4ID0gLTE7Ci0jZW5kaWYgLyogUlRTWE9GRiAqLwotCX0gZWxzZSBpZiAo ZmxvdyA9PSBGTE9fRFRSQykgewkvKiBEVFIvQ0QgRmxvdyBjb250cm9sLi4uICovCi0JICAgIGRl YnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgRFRSL0NEIE9OIiwiIiwwKTsKLSNpZmRlZiBEVFJYT0ZG Ci0JICAgIC8qIFRoaXMgaXMgc3RyYWlnaHQgb3V0IG9mIFNWSUQgUjQgKi8KLQkgICAgaWYgKGlv Y3RsKHR0eWZkLFRDR0VUWCwmcmN0c3gpID4gLTEpIHsKLQkJcmN0c3gueF9oZmxhZyAmPSB+KERU UlhPRkZ8Q0RYT04pOwotCQl4ID0gaW9jdGwodHR5ZmQsVENTRVRYLCZyY3RzeCk7Ci0JICAgIH0K LSNlbHNlCi0JICAgIGRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgRFRSWE9GRiBub3QgZGVmaW5l ZCIsIiIsMCk7Ci0JICAgIHggPSAtMTsKLSNlbmRpZiAvKiBEVFJYT0ZGICovCi0JfQotICAgIH0K LSNlbmRpZiAvKiBDS19TQ09VTklYICovCi0KLSNlbHNlIC8qIG5vdCBTeXN0ZW0gVi4uLiAqLwot Ci0jaWZkZWYgQ0tfRFRSQ1RTCi0jaWZkZWYgTERPRFRSCi0jaWZkZWYgTERPQ1RTCi0jaWZkZWYg TkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVENNRCAqLwot I2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVFBU WSAqLwotICAgIHggPSBMRE9EVFIgfCBMRE9DVFM7CQkvKiBGb3VuZCBvbmx5IG9uIFVURUs/ICov Ci0gICAgaWYgKGZsb3cgPT0gRkxPX0RUUlQgJiYgc3RhdHVzKSB7CS8qIFVzZSBoYXJkd2FyZSBm bG93IGNvbnRyb2wgKi8KLQlpZiAobG1vZGVmKSB7Ci0JICAgIHggPSBpb2N0bCh0dHlmZCxUSU9D TEJJUywmeCk7Ci0JICAgIGlmICh4IDwgMCkgewotCSAgICAgICAgZGVidWcoRjEwMCwiaGFyZGZs b3cgVElPQ0xCSVMgZXJyb3IiLCIiLDApOwotCSAgICB9IGVsc2UgewotCQlsbW9kZWYrKzsKLQkJ ZGVidWcoRjEwMCwiaGFyZGZsb3cgVElPQ0xCSVMgb2siLCIiLDApOwotCSAgICB9Ci0JfQotICAg IH0gZWxzZSB7Ci0JaWYgKGxtb2RlZikgewotCSAgICB4ID0gaW9jdGwodHR5ZmQsVElPQ0xCSUMs JngpOwotCSAgICBpZiAoeCA8IDApIHsKLQkgICAgICAgIGRlYnVnKEYxMDAsImhhcmRmbG93IFRJ T0NMQklDIGVycm9yIiwiIiwwKTsKLQkgICAgfSBlbHNlIHsKLQkJbG1vZGVmKys7Ci0JCWRlYnVn KEYxMDAsImhhcmRmbG93IFRJT0NMQklDIG9rIiwiIiwwKTsKLQkgICAgfQotCX0KLSAgICB9Ci0j ZW5kaWYgLyogTERPRFRSICovCi0jZW5kaWYgLyogTERPQ1RTICovCi0jZW5kaWYgLyogQ0tfRFRS Q1RTICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBBSVhSUyAqLwotI2VuZGlmIC8q IFNVTk9TNCAqLwotI2VuZGlmIC8qIFFOWCAqLwotI2VuZGlmIC8qIFBPU0lYX0NSVFNDVFMgKi8K LSNlbmRpZiAvKiBTVU5PUzQxICovCi0KLSNlbHNlIC8qIE9YT1MgKi8KLQotICAgIHN0cnVjdCB0 ZXJtaW9zIHRlbXA7CQkvKiBPbGl2ZXR0aSBYL09TIC4uLiAqLwotCi0jaWZkZWYgTkVUQ01ECi0g ICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5F VFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotICAg IHggPSBpb2N0bCh0dHlmZCxUQ0dFVFMsJnRlbXApOwotICAgIGlmICh4ID09IDApIHsKLQl0ZW1w LmNfY2ZsYWcgJj0gfihDUlRTQ1RTfENEVFJDVFN8Q0JSS0ZMT1d8Q0RUUkRTUnxDUlRTRFNSKTsK LQlpZiAoc3RhdHVzKSB7Ci0JICAgIHN3aXRjaCAoZmxvdykgewotCSAgICAgIGNhc2UgRkxPX1JU U0M6IHRlbXAuY19jZmxhZyB8PSBDUlRTQ1RTOyAvKiBSVFMvQ1RTIChoYXJkKSAqLwotCQlicmVh azsKLQkgICAgICBjYXNlIEZMT19EVFJUOiB0ZW1wLmNfY2ZsYWcgfD0gQ0RUUkNUUzsgLyogRFRS L0NUUyAoaGFyZCkgKi8KLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0JeCA9IGlvY3RsKHR0eWZkLFRD U0VUUywmdGVtcCk7Ci0gICAgfQotI2VuZGlmIC8qIE9YT1MgKi8KLSAgICByZXR1cm4oeCk7Ci0K LSNlbmRpZiAvKiBQbGFuOSAqLwotfQotCi0vKiAgVCBUIFAgSyBUICAtLSAgQ29uZGl0aW9uIHRo ZSBjb21tdW5pY2F0aW9uIGxpbmUgZm9yIHBhY2tldHMgKi8KLS8qICAgICAgICAgICAgICAgICBv ciBmb3IgbW9kZW0gZGlhbGluZyAqLwotCi0vKgotICBJZiBjYWxsZWQgd2l0aCBzcGVlZCA+IC0x LCBhbHNvIHNldCB0aGUgc3BlZWQuCi0gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWls dXJlLgotCi0gIE5PVEU6IHRoZSAieGZsb3ciIHBhcmFtZXRlciBpcyBzdXBwb3NlZCB0byBiZSB0 aGUgY3VycmVudGx5IHNlbGVjdGVkCi0gIHR5cGUgb2YgZmxvdyBjb250cm9sLCBidXQgZm9yIGhp c3RvcmljYWwgcmVhc29ucywgdGhpcyBwYXJhbWV0ZXIgaXMgYWxzbwotICB1c2VkIHRvIGluZGlj YXRlIHRoYXQgd2UgYXJlIGRpYWxpbmcuICBUaGVyZWZvcmUsIHdoZW4gdGhlIHRydWUgZmxvdwot ICBjb250cm9sIHNldHRpbmcgaXMgbmVlZGVkLCB3ZSBhY2Nlc3MgdGhlIGV4dGVybmFsIHZhcmlh YmxlICJmbG93IiwgcmF0aGVyCi0gIHRoYW4gdHJ1c3Rpbmcgb3VyICJ4ZmxvdyIgYXJndW1lbnQu Ci0qLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXR0cGt0KGxvbmcgc3BlZWQsIGludCB4Zmxvdywg aW50IHBhcml0eSkKLSNlbHNlCi10dHBrdChzcGVlZCx4ZmxvdyxwYXJpdHkpIGxvbmcgc3BlZWQ7 IGludCB4ZmxvdywgcGFyaXR5OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0dHBrdCAqLyB7 Ci0jaWZuZGVmIE5PTE9DQUwKLSAgICBpbnQgczI7Ci0gICAgaW50IHMgPSAtMTsKLSNlbmRpZiAv KiBOT0xPQ0FMICovCi0gICAgaW50IHg7Ci0gICAgZXh0ZXJuIGludCBmbG93OwkJCS8qIFJFQUwg Zmxvdy1jb250cm9sIHNldHRpbmcgKi8KLQotICAgIGlmICh0dHlmZCA8IDApIHJldHVybigtMSk7 ICAgICAgICAgIC8qIE5vdCBvcGVuLiAqLwotCi0gICAgZGVidWcoRjEwMSwidHRwa3QgcGFyaXR5 IiwiIixwYXJpdHkpOwotICAgIGRlYnVnKEYxMDEsInR0cGt0IHhmbG93IiwiIix4Zmxvdyk7Ci0g ICAgZGVidWcoRjEwMSwidHRwa3Qgc3BlZWQiLCIiLChpbnQpIHNwZWVkKTsKLQotICAgIHR0cHJ0 eSA9IHBhcml0eTsgICAgICAgICAgICAgICAgICAgIC8qIExldCBvdGhlciB0dCBmdW5jdGlvbnMg c2VlIHRoZXNlLiAqLwotICAgIHR0c3BlZWQgPSBzcGVlZDsJCQkvKiBNYWtlIGdsb2JhbCBjb3B5 IGZvciB0aGlzIG1vZHVsZSAqLwotICAgIHR0cG1zayA9IHR0cHJ0eSA/IDAxNzcgOiAwMzc3Owkv KiBQYXJpdHkgc3RyaXBwaW5nIG1hc2sgKi8KLSNpZmRlZiBQQVJTRU5TRQotICAgIG5lZWRwY2hr ID0gdHRwcnR5ID8gMCA6IDE7CQkvKiBQYXJpdHkgY2hlY2sgbmVlZGVkPyAqLwotI2Vsc2UKLSAg ICBuZWVkcGNoayA9IDA7Ci0jZW5kaWYgLyogUEFSU0VOU0UgKi8KLQotICAgIGRlYnVnKEYxMDEs InR0cGt0IHR0cG1zayIsIiIsdHRwbXNrKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBuZXRjb25u IiwiIixuZXRjb25uKTsKLQotI2lmZGVmIE5FVENPTk4JCQkJLyogTm8gbW9kZS1jaGFuZ2luZyBm b3IgdGVsbmV0ICovCi0gICAgaWYgKG5ldGNvbm4pIHsKLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZmRl ZiBUQ1BfTk9ERUxBWQotICAgICAgICBpZiAodHRuZXQgPT0gTkVUX1RDUEIpIHsJLyogQnV0IHR1 cm4gb2ZmIE5hZ2xlICovCi0gICAgICAgICAgICBleHRlcm4gaW50IHRjcF9ub2RlbGF5OwotICAg ICAgICAgICAgbm9kZWxheV9zYXYgPSB0Y3Bfbm9kZWxheTsKLSAgICAgICAgICAgIG5vX2RlbGF5 KHR0eWZkLDEpOwotICAgICAgICB9Ci0jZW5kaWYgLyogVENQX05PREVMQVkgKi8KLSNpZmRlZiBU Tl9DT01QT1JUCi0gICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7Ci0gICAgICAgICAgICBpbnQg cmMgPSAtMTsKLSAgICAgICAgICAgIGlmICh0dnRmbGcgPT0gMCAmJiBzcGVlZCA9PSB0dHNwZWVk ICYmIGZsb3cgPT0gdHRmbG93Ci0gICAgICAgICAgICAgICAgIC8qICYmIHR0Y2FyciA9PSBjdXJj YXJyICovICkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cGt0IG1vZGVzIGFscmVh ZHkgc2V0LCBza2lwcGluZy4uLiIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKDApOwkJ LyogQWxyZWFkeSBiZWVuIGNhbGxlZC4gKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm IChmbG93ICE9IHR0ZmxvdykgewotICAgICAgICAgICAgICAgIGlmICgocmMgPSB0bnNldGZsb3co ZmxvdykpIDwgMCkKLQkJICByZXR1cm4ocmMpOwotICAgICAgICAgICAgICAgIHR0ZmxvdyA9IGZs b3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3BlZWQgIT0gdHRzcGVlZCkgewot ICAgICAgICAgICAgICAgIGlmIChzcGVlZCA8PSAwKSAKLQkJICBzcGVlZCA9IHRuY19nZXRfYmF1 ZCgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKChyYyA9IHRuY19zZXRfYmF1ZChzcGVlZCkp IDwgMCkKLQkJICByZXR1cm4ocmMpOwotICAgICAgICAgICAgICAgIHR0c3BlZWQgPSBzcGVlZDsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRuY19zZXRfZGF0YXNpemUoOCk7Ci0JICAgIHRu Y19zZXRfc3RvcHNpemUoc3RvcGJpdHMpOwotCi0jaWZkZWYgSFdQQVJJVFkKLSAgICAgICAgICAg IGlmIChod3Bhcml0eSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoaHdwYXJpdHkpIHsKLQkJ ICBjYXNlICdlJzoJCQkvKiBFdmVuICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAs InR0cmVzIDggYml0cyArIGV2ZW4gcGFyaXR5IiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAg dG5jX3NldF9wYXJpdHkoMyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkgIGNhc2Ug J28nOgkJCS8qIE9kZCAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4 IGJpdHMgKyBvZGQgcGFyaXR5IiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9w YXJpdHkoMik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkgIGNhc2UgJ20nOgkJCS8q IE1hcmsgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsg aW52YWxpZCBwYXJpdHk6IG1hcmsiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB0bmNfc2V0 X3Bhcml0eSg0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCSAgY2FzZSAncyc6CQkJ LyogU3BhY2UgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRz ICsgaW52YWxpZCBwYXJpdHk6IHNwYWNlIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5j X3NldF9wYXJpdHkoNSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSAKLSNlbmRpZiAvKiBIV1BBUklUWSAqLwotCSAgICB7 Ci0gICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoMSk7ICAgICAgICAgICAgICAvKiBOb25l ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0dnRmbGcgPSAwOwotICAgICAgICAgICAg cmV0dXJuKDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLwotICAgICAgICB0dnRmbGcgPSAwOwotICAgICAgICByZXR1cm4oMCk7Ci0g ICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBl KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYg KHR0cHR5KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0KLSNpZm5kZWYgUGxhbjkK LSAgICBpZiAodHRmZGZsZyAmJiAhaXNhdHR5KHR0eWZkKSkgcmV0dXJuKDApOwotI2VuZGlmIC8q IFBsYW45ICovCi0KLSNpZmRlZiBDT0hFUkVOVAotI2RlZmluZSBTVk9SUE9TSVgKLSNlbmRpZiAv KiBDT0hFUkVOVCAqLwotCi0jaWZuZGVmIFNWT1JQT1NJWAkJCS8qIEJlcmtlbGV5LCBWNywgZXRj LiAqLwotI2lmZGVmIExQQVNTOAotLyoKLSBGb3Igc29tZSByZWFzb24sIHdpdGggQlNEIHRlcm1p bmFsIGRyaXZlcnMsIHlvdSBjYW4ndCBzZXQgRkxPVyB0byBYT04vWE9GRgotIGFmdGVyIGhhdmlu ZyBwcmV2aW91c2x5IHNldCBpdCB0byBOT05FIHdpdGhvdXQgY2xvc2luZyBhbmQgcmVvcGVuaW5n IHRoZQotIGRldmljZS4gIFVubGVzcyB0aGVyZSdzIHNvbWV0aGluZyBJIG92ZXJsb29rZWQgYmVs b3cuLi4KLSovCi0gICAgaWYgKHR0ZmxvdyA9PSBGTE9fTk9ORSAmJiBmbG93ID09IEZMT19YT05Y ICYmIHhsb2NhbCA9PSAwKSB7Ci0JZGVidWcoRjEwMSwidHRwa3QgZXhlY3V0aW5nIGhvcnJpYmxl IGZsb3cga2x1ZGdlIiwiIiwwKTsKLQl0dGNsb3MoMCk7CQkJLyogQ2xvc2UgaXQgKi8KLQl4ID0g MDsKLQl0dG9wZW4odHRubXN2LCZ4LHR0bWRtLDApOwkvKiBPcGVuIGl0IGFnYWluICovCi0gICAg fQotI2VuZGlmIC8qIExQQVNTOCAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotCi0jaWZkZWYg Q09IRVJFTlQJCQkJLyogVGhpcyBtdXN0IGJlIHZlc3RpZ2lhbCBzaW5jZSB3ZSAqLwotI3VuZGVm IFNWT1JQT1NJWAkJCS8qIHJldmVyc2UgaXQgYSBmZXcgbGluZXMgYmVsb3cuLi4gKi8KLSNlbmRp ZiAvKiBDT0hFUkVOVCAqLwotCi0gICAgaWYgKHhmbG93ICE9IEZMT19ESUFMICYmIHhmbG93ICE9 IEZMT19ESUFYKQotICAgICAgdHRmbG93ID0geGZsb3c7CQkJLyogTm93IG1ha2UgdGhpcyBhdmFp bGFibGUgdG9vLiAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICBpZiAoeGxvY2FsKSB7Ci0JczIg PSAoaW50KSAoc3BlZWQgLyAxMEwpOwkvKiBDb252ZXJ0IGJwcyB0byBjcHMgKi8KLQlkZWJ1ZyhG MTAxLCJ0dHBrdCBjYWxsaW5nIHR0c3NwZCIsIiIsczIpOwotCXMgPSB0dHNzcGQoczIpOwkJCS8q IENoZWNrIGFuZCBzZXQgdGhlIHNwZWVkICovCi0JZGVidWcoRjEwMSwidHRwa3QgdHRzc3BkIHJl c3VsdCIsIiIscyk7Ci0gCWNhcnJjdGwoJnR0cmF3LCB4ZmxvdyAhPSBGTE9fRElBTCAvKiBDYXJy aWVyIGNvbnRyb2wgKi8KLQkJJiYgKHR0Y2FyciA9PSBDQVJfT04gfHwgKHR0Y2FyciA9PSBDQVJf QVVUICYmIHR0bWRtICE9IDApKSk7Ci0JdHZ0ZmxnID0gMDsJCQkvKiBTbyB0dHZ0KCkgd2lsbCB3 b3JrIG5leHQgdGltZSAqLwotICAgIH0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRlZiBD T0hFUkVOVAotI2RlZmluZSBTVk9SUE9TSVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0jaWZu ZGVmIFNWT1JQT1NJWAkJCS8qIEJTRCBzZWN0aW9uICovCi0gICAgaWYgKGZsb3cgPT0gRkxPX1JU U0MgfHwJCS8qIEhhcmR3YXJlIGZsb3cgY29udHJvbCAqLwotCWZsb3cgPT0gRkxPX0RUUkMgfHwK LQlmbG93ID09IEZMT19EVFJUKSB7Ci0JdHRoZmxvdyhmbG93LCAxLCAmdHRyYXcpOwotCWRlYnVn KEYxMDAsInR0cGt0IGhhcmQgZmxvdywgVEFOREVNIG9mZiwgUkFXIG9uIiwiIiwwKTsKLQl0dHJh dy5zZ19mbGFncyAmPSB+VEFOREVNOwkvKiBUdXJuIG9mZiBzb2Z0d2FyZSBmbG93IGNvbnRyb2wg Ki8KLQl0dHJhdy5zZ19mbGFncyB8PSBSQVc7CQkvKiBFbnRlciByYXcgbW9kZSAqLwotICAgIH0g ZWxzZSBpZiAoZmxvdyA9PSBGTE9fTk9ORSkgewkvKiBObyBmbG93IGNvbnRyb2wgKi8KLQlkZWJ1 ZyhGMTAwLCJ0dHBrdCBubyBmbG93LCBUQU5ERU0gb2ZmLCBSQVcgb24iLCIiLDApOwotCXR0cmF3 LnNnX2ZsYWdzICY9IH5UQU5ERU07CS8qIFR1cm4gb2ZmIHNvZnR3YXJlIGZsb3cgY29udHJvbCAq LwotCXR0aGZsb3coZmxvdywgMCwgJnR0cmF3KTsJLyogVHVybiBvZmYgYW55IGhhcmR3YXJlIGYv YyB0b28gKi8KLQl0dHJhdy5zZ19mbGFncyB8PSBSQVc7CQkvKiBFbnRlciByYXcgbW9kZSAqLwot ICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fS0VFUCkgewkvKiBLZWVwIGRldmljZSdzIG9yaWdp bmFsIHNldHRpbmcgKi8KLQlkZWJ1ZyhGMTAwLCJ0dHBrdCBrZWVwaW5nIG9yaWdpbmFsIFRBTkRF TSIsIiIsMCk7Ci0JdHRyYXcuc2dfZmxhZ3MgJj0gflRBTkRFTTsKLQl0dHJhdy5zZ19mbGFncyB8 PSAodHRvbGQuc2dfZmxhZ3MgJiBUQU5ERU0pOwotCS8qIE5PVEU6IFdlIHNob3VsZCBhbHNvIGhh bmRsZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaGVyZSEgKi8KLSAgICB9Ci0KLS8qIFNFVCBGTE9X IFhPTi9YT0ZGIGlzIGluIGVmZmVjdCwgb3IgU0VUIEZMT1cgS0VFUCByZXN1bHRlZCBpbiBYb24v WG9mZiAqLwotCi0gICAgaWYgKChmbG93ID09IEZMT19YT05YKSB8fCAodHRyYXcuc2dfZmxhZ3Mg JiBUQU5ERU0pKSB7Ci0JZGVidWcoRjEwMCwidHRwa3QgdHVybmluZyBvbiBUQU5ERU0iLCIiLDAp OwotCXR0cmF3LnNnX2ZsYWdzIHw9IFRBTkRFTTsJLyogU28gYXNrIGZvciBpdC4gKi8KLQotI2lm ZGVmIExQQVNTOAkJCQkvKiBDYW4gcGFzcyA4LWJpdCBkYXRhIHRocm91Z2g/ICovCi0vKiBJZiB0 aGUgTFBBU1M4IGxvY2FsIG1vZGUgaXMgYXZhaWxhYmxlLCB0aGVuIGZsb3cgY29udHJvbCBjYW4g YWx3YXlzICAqLwotLyogYmUgdXNlZCwgZXZlbiBpZiBwYXJpdHkgaXMgbm9uZSBhbmQgd2UgYXJl IHRyYW5zZmVycmluZyA4LWJpdCBkYXRhLiAgKi8KLS8qIEJ1dCB3ZSBvbmx5IG5lZWQgdG8gZG8g YWxsIHRoaXMgaWYgWG9uL1hvZmYgaXMgcmVxdWVzdGVkLiAqLwotLyogQlVULi4uIHRoaXMgdGVu ZHMgbm90IHRvIHdvcmsgdGhyb3VnaCBJUCBvciBMQVQgY29ubmVjdGlvbnMsIHRlcm1pbmFsICov Ci0vKiBzZXJ2ZXJzLCB0ZWxuZXQsIHJsb2dpbiwgZXRjLCBzbyBpdCBpcyBjdXJyZW50bHkgZGlz YWJsZWQuICovCi0JeCA9IExQQVNTODsJCQkvKiBJZiBMUEFTUzggZGVmaW5lZCwgdGhlbiAqLwot CWRlYnVnKEYxMDAsInR0cGt0IGV4ZWN1dGluZyBMUEFTUzggY29kZSIsIiIsMCk7Ci0JaWYgKGxt b2RlZikgewkJCS8qIFRJT0NMQklTIG11c3QgYmUgdG9vLiAqLwotCSAgICB4ID0gaW9jdGwodHR5 ZmQsVElPQ0xCSVMsJngpOyAvKiBUcnkgdG8gc2V0IExQQVNTOC4gKi8KLQkgICAgaWYgKHggPCAw KSB7Ci0JCWRlYnVnKEYxMDAsInR0cGt0IFRJT0NMQklTIGVycm9yIiwiIiwwKTsKLQkgICAgfSBl bHNlIHsKLQkJbG1vZGVmKys7Ci0JCWRlYnVnKEYxMDAsInR0cGt0IFRJT0NMQklTIG9rIiwiIiww KTsKLQkgICAgfQotCX0KLS8qCi0gQnV0IGlmIHdlIHVzZSBMUEFTUzggbW9kZSwgd2UgbXVzdCBl eHBsaWNpdGx5IHR1cm4gb2ZmCi0gdGVybWluYWwgaW50ZXJydXB0cyBvZiBhbGwga2luZHMuCi0q LwotI2lmZGVmIFRJT0NHRVRDCQkJCS8qIE5vdCByYXdtb2RlLCAqLwotCWlmICh0Y2hhcmYgJiYg KHhsb2NhbCA9PSAwKSkgewkvKiBtdXN0IHR1cm4gb2ZmICovCi0JICAgIHRjaG5vaS50X2ludHJj ID0gLTE7CS8qIGludGVycnVwdCBjaGFyYWN0ZXIgKi8KLQkgICAgdGNobm9pLnRfcXVpdGMgPSAt MTsJLyogYW5kIHF1aXQgY2hhcmFjdGVyLiAqLwotCSAgICB0Y2hub2kudF9zdGFydGMgPSAxNzsJ LyogTWFrZSBzdXJlIHhvbiAqLwotCSAgICB0Y2hub2kudF9zdG9wYyA9IDE5OwkvKiBhbmQgeG9m ZiBub3QgaWdub3JlZC4gKi8KLSNpZm5kZWYgTk9CUktDCi0JICAgIHRjaG5vaS50X2VvZmMgPSAt MTsJCS8qIGVvZiBjaGFyYWN0ZXIuICovCi0JICAgIHRjaG5vaS50X2Jya2MgPSAtMTsJCS8qIGJy ayBjaGFyYWN0ZXIuICovCi0jZW5kaWYgLyogTk9CUktDICovCi0JICAgIGlmIChpb2N0bCh0dHlm ZCxUSU9DU0VUQywmdGNobm9pKSA8IDApIHsKLQkJZGVidWcoRjEwMCwidHRwa3QgVElPQ1NFVEMg ZmFpbGVkIiwiIiwwKTsKLQkgICAgfSBlbHNlIHsKLQkJdGNoYXJmID0gMTsKLQkJZGVidWcoRjEw MCwidHRwa3QgVElPQ1NFVEMgb2siLCIiLDApOwotCSAgICB9Ci0jaWZkZWYgQ09NTUVOVAotLyog b25seSBmb3IgcGFyYW5vaWQgZGVidWdnaW5nICovCi0JICAgIGlmICh0Y2hhcmYpIHsKLQkJc3Ry dWN0IHRjaGFycyBmb287Ci0JCWNoYXIgdGNoYnVmWzEwMF07Ci0JCWlvY3RsKDAsVElPQ0dFVEMs JmZvbyk7Ci0JCXNwcmludGYodGNoYnVmLAotCQkgICAgImludHI9JWQscXVpdD0lZCwgc3RhcnQ9 JWQsIHN0b3A9JWQsIGVvZj0lZCwgYnJrPSVkIiwKLQkJICAgIGZvby50X2ludHJjLCBmb28udF9x dWl0YywgZm9vLnRfc3RhcnRjLAotCQkgICAgZm9vLnRfc3RvcGMsIGZvby50X2VvZmMsICBmb28u dF9icmtjKTsKLQkJZGVidWcoRjExMCwidHRwa3QgY2hhcnMiLHRjaGJ1ZiwwKTsKLQkgICAgfQot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQl9Ci0JdHRyYXcuc2dfZmxhZ3MgfD0gQ0JSRUFLOwkvKiBO ZWVkZWQgZm9yIHVua25vd24gcmVhc29uICovCi0jZW5kaWYgLyogVElPQ0dFVEMgKi8KLQotLyog UHJldmVudCBzdXNwZW5kIGR1cmluZyBwYWNrZXQgbW9kZSAqLwotI2lmZGVmIFRJT0NHTFRDCQkJ CS8qIE5vdCByYXdtb2RlLCAqLwotCWlmIChsdGNoYXJmICYmICh4bG9jYWwgPT0gMCkpIHsJLyog bXVzdCB0dXJuIG9mZiAqLwotCSAgICBsdGNobm9pLnRfc3VzcGMgPSAtMTsJLyogc3VzcGVuZCBj aGFyYWN0ZXIgKi8KLQkgICAgbHRjaG5vaS50X2RzdXNwYyA9IC0xOwkvKiBhbmQgZGVsYXllZCBz dXNwZW5kIGNoYXJhY3RlciAqLwotCSAgICBpZiAoaW9jdGwodHR5ZmQsVElPQ1NMVEMsJnRjaG5v aSkgPCAwKSB7Ci0JCWRlYnVnKEYxMDAsInR0cGt0IFRJT0NTTFRDIGZhaWxlZCIsIiIsMCk7Ci0J ICAgIH0gZWxzZSB7Ci0JCWx0Y2hhcmYgPSAxOwotCQlkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9DU0xU QyBvayIsIiIsMCk7Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyogVElPQ0dMVEMgKi8KLQotI2Vsc2Ug LyogTFBBU1M4IG5vdCBkZWZpbmVkICovCi0KLS8qIFByZXZpb3VzbHksIEJTRC1iYXNlZCBpbXBs ZW1lbnRhdGlvbnMgYWx3YXlzICovCi0vKiB1c2VkIHJhd21vZGUgZm9yIHBhY2tldHMuICBOb3cs IHdlIHVzZSByYXdtb2RlIG9ubHkgaWYgcGFyaXR5IGlzIE5PTkUuICovCi0vKiBUaGlzIGFsbG93 cyB0aGUgZmxvdyBjb250cm9sIHJlcXVlc3RlZCBhYm92ZSB0byBhY3R1YWxseSB3b3JrLCBidXQg b25seSAqLwotLyogaWYgdGhlIHVzZXIgYXNrcyBmb3IgcGFyaXR5ICh3aGljaCBhbHNvIG1lYW5z IHRoZXkgZ2V0IDh0aC1iaXQgcXVvdGluZykuICovCi0KLQlpZiAocGFyaXR5KSB7CQkJLyogSWYg cGFyaXR5LCAqLwotCSAgICB0dHJhdy5zZ19mbGFncyAmPSB+UkFXOwkvKiB1c2UgY29va2VkIG1v ZGUgKi8KLSNpZmRlZiBDT01NRU5UCi0vKiBXSFk/Pz8gKi8KLQkgICAgaWYgKHhsb2NhbCkKLSNl bmRpZiAvKiBDT01NRU5UICovCi0JICAgICAgdHRyYXcuc2dfZmxhZ3MgfD0gQ0JSRUFLOwotCSAg ICBkZWJ1ZyhGMTAxLCJ0dHBrdCBjb29rZWQsIGNicmVhaywgcGFyaXR5IiwiIixwYXJpdHkpOwot I2lmZGVmIFRJT0NHRVRDCQkJCS8qIE5vdCByYXdtb2RlLCAqLwotCSAgICBpZiAodGNoYXJmICYm ICh4bG9jYWwgPT0gMCkpIHsgLyogbXVzdCB0dXJuIG9mZiAqLwotCQl0Y2hub2kudF9pbnRyYyA9 IC0xOwkvKiBpbnRlcnJ1cHQgY2hhcmFjdGVyICovCi0JCXRjaG5vaS50X3F1aXRjID0gLTE7CS8q IGFuZCBxdWl0IGNoYXJhY3Rlci4gKi8KLQkJdGNobm9pLnRfc3RhcnRjID0gMTc7CS8qIE1ha2Ug c3VyZSB4b24gKi8KLQkJdGNobm9pLnRfc3RvcGMgPSAxOTsJLyogYW5kIHhvZmYgbm90IGlnbm9y ZWQuICovCi0jaWZuZGVmIE5PQlJLQwotCQl0Y2hub2kudF9lb2ZjID0gLTE7CS8qIGVvZiBjaGFy YWN0ZXIuICovCi0JCXRjaG5vaS50X2Jya2MgPSAtMTsJLyogYnJrIGNoYXJhY3Rlci4gKi8KLSNl bmRpZiAvKiBOT0JSS0MgKi8KLQkJaWYgKGlvY3RsKHR0eWZkLFRJT0NTRVRDLCZ0Y2hub2kpIDwg MCkgewotCQkgICAgZGVidWcoRjEwMCwidHRwa3QgVElPQ1NFVEMgZmFpbGVkIiwiIiwwKTsKLQkJ fSBlbHNlIHsKLQkJICAgIHRjaGFyZiA9IDE7Ci0JCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9D U0VUQyBvayIsIiIsMCk7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIFRJT0NHRVRDICovCi0jaWZk ZWYgVElPQ0dMVEMJCQkJLyogTm90IHJhd21vZGUsICovCi0vKiBQcmV2ZW50IHN1c3BlbmQgZHVy aW5nIHBhY2tldCBtb2RlICovCi0JICAgIGlmIChsdGNoYXJmICYmICh4bG9jYWwgPT0gMCkpIHsg LyogbXVzdCB0dXJuIG9mZiAqLwotCQlsdGNobm9pLnRfc3VzcGMgPSAtMTsJLyogc3VzcGVuZCBj aGFyYWN0ZXIgKi8KLQkJbHRjaG5vaS50X2RzdXNwYyA9IC0xOwkvKiBhbmQgZGVsYXllZCBzdXNw ZW5kIGNoYXJhY3RlciAqLwotCQlpZiAoaW9jdGwodHR5ZmQsVElPQ1NMVEMsJnRjaG5vaSkgPCAw KSB7Ci0JCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9DU0xUQyBmYWlsZWQiLCIiLDApOwotCQl9 IGVsc2UgewotCQkgICAgbHRjaGFyZiA9IDE7Ci0JCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9D U0xUQyBvayIsIiIsMCk7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIFRJT0NHTFRDICovCi0JfSBl bHNlIHsJCQkvKiBJZiBubyBwYXJpdHksICovCi0JICAgIHR0cmF3LnNnX2ZsYWdzIHw9IFJBVzsJ LyogbXVzdCB1c2UgOC1iaXQgcmF3IG1vZGUuICovCi0JICAgIGRlYnVnKEYxMDEsInR0cGt0IHNl dHRpbmcgcmF3bW9kZSwgcGFyaXR5IiwiIixwYXJpdHkpOwotCX0KLSNlbmRpZiAvKiBMUEFTUzgg Ki8KLSAgICB9IC8qIEVuZCBvZiBYb24vWG9mZiBzZWN0aW9uICovCi0KLSAgICAvKiBEb24ndCBl Y2hvLCBkb24ndCBtYXAgQ1IgdG8gQ1JMRiBvbiBvdXRwdXQsIGRvbid0IGZvb2wgd2l0aCBjYXNl ICovCi0jaWZkZWYgTENBU0UKLSAgICB0dHJhdy5zZ19mbGFncyAmPSB+KEVDSE98Q1JNT0R8TENB U0UpOwotI2Vsc2UKLSAgICB0dHJhdy5zZ19mbGFncyAmPSB+KEVDSE98Q1JNT0QpOwotI2VuZGlm IC8qIExDQVNFICovCi0KLSNpZmRlZiBUT1dFUjEKLSAgICB0dHJhdy5zZ19mbGFncyAmPSB+QU5Z UDsgICAgICAgICAgICAvKiBNdXN0IHNldCB0aGlzIG9uIG9sZCBUb3dlcnMgKi8KLSNlbmRpZiAv KiBUT1dFUjEgKi8KLQotI2lmZGVmIEJFTExWMTAKLSAgICBpZiAoaW9jdGwodHR5ZmQsVElPQ1NF VFAsJnR0cmF3KSA8IDApIC8qIFNldCB0aGUgbmV3IG1vZGVzLiAqLwotICAgICAgcmV0dXJuKC0x KTsKLSNlbHNlCi0gICAgZXJybm8gPSAwOwotICAgIGlmIChzdHR5KHR0eWZkLCZ0dHJhdykgPCAw KSB7ICAgICAgIC8qIFNldCB0aGUgbmV3IG1vZGVzLiAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJ0 dHBrdCBzdHR5IGZhaWxlZCIsIiIsZXJybm8pOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0K LSNlbmRpZiAvKiBCRUxMVjEwICovCi0gICAgZGVidWcoRjEwMCwidHRwa3Qgc3R0eSBvayIsIiIs MCk7Ci0KLSNpZmRlZiBzb255X25ld3MKLSAgICB4ID0geGxvY2FsID8ga21fZXh0IDoga21fY29u OwkvKiBQdXQgbGluZSBpbiBBU0NJSSBtb2RlLiAqLwotICAgIGlmICh4ICE9IC0xKSB7CQkJLyog TWFrZSBzdXJlIHdlIGtub3cgb3JpZ2luYWwgbW9kZXMuICovCi0JeCAmPSB+S01fVFRZUEU7Ci0J eCB8PSBLTV9BU0NJSTsKLQlpZiAoaW9jdGwodHR5ZmQsVElPQ0tTRVQsICZ4KSA8IDApIHsKLQkg ICAgcGVycm9yKCJ0dHBrdCBjYW4ndCBzZXQgQVNDSUkgbW9kZSIpOwotCSAgICBkZWJ1ZyhGMTAx LCJ0dHBrdCBlcnJvciBzZXR0aW5nIEFTQ0lJIG1vZGUiLCIiLHgpOwotCSAgICByZXR1cm4oLTEp OwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjEwMCwidHRwa3Qgc2V0IEFTQ0lJIG1vZGUgb2siLCIi LDApOwotI2VuZGlmIC8qIHNvbnlfbmV3cyAqLwotCi0gICAgaWYgKHhsb2NhbCA9PSAwKSB7CQkJ LyogVHVybiB0aGlzIG9mZiBzbyB3ZSBjYW4gcmVhZCAqLwotCXNpZ25hbChTSUdJTlQsU0lHX0lH Tik7CQkvKiBDdHJsLUMgY2hhcnMgdHlwZWQgYXQgY29uc29sZSAqLwotCXNpZ2ludF9pZ24gPSAx OwotICAgIH0KLSAgICB0dnRmbGcgPSAwOwkJCQkvKiBTbyB0dHZ0KCkgd2lsbCB3b3JrIG5leHQg dGltZSAqLwotICAgIGRlYnVnKEYxMDAsInR0cGt0IHN1Y2Nlc3MiLCIiLDApOwotICAgIHJldHVy bigwKTsKLQotI2VuZGlmIC8qIE5vdCBBVFRTViBvciBQT1NJWCAqLwotCi0vKiBBVCZUIFVOSVgg YW5kIFBPU0lYICovCi0KLSNpZmRlZiBDT0hFUkVOVAotI2RlZmluZSBTVk9SUE9TSVgKLSNlbmRp ZiAvKiBDT0hFUkVOVCAqLwotCi0jaWZkZWYgU1ZPUlBPU0lYCi0gICAgaWYgKGZsb3cgPT0gRkxP X1hPTlgpIHsJCS8qIFhvbi9Yb2ZmICovCi0JdHRyYXcuY19pZmxhZyB8PSAoSVhPTnxJWE9GRik7 Ci0JdHRoZmxvdyhmbG93LCAwLCAmdHRyYXcpOwotICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9f Tk9ORSkgewkvKiBOb25lICovCi0JLyogTk9URTogV2Ugc2hvdWxkIGFsc28gdHVybiBvZmYgaGFy ZHdhcmUgZmxvdyBjb250cm9sIGhlcmUhICovCi0JdHRyYXcuY19pZmxhZyAmPSB+KElYT058SVhP RkYpOwotCXR0aGZsb3coZmxvdywgMCwgJnR0cmF3KTsKLSAgICB9IGVsc2UgaWYgKGZsb3cgPT0g RkxPX0tFRVApIHsJLyogS2VlcCAqLwotCXR0cmF3LmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGKTsJ LyogVHVybiBvZmYgWG9uL1hvZmYgZmxhZ3MgKi8KLQl0dHJhdy5jX2lmbGFnIHw9ICh0dG9sZC5j X2lmbGFnICYgKElYT058SVhPRkYpKTsgLyogT1IgaW4gb2xkIG9uZXMgKi8KLQkvKiBOT1RFOiBX ZSBzaG91bGQgYWxzbyBoYW5kbGUgaGFyZHdhcmUgZmxvdyBjb250cm9sIGhlcmUhICovCi0jaWZk ZWYgUE9TSVhfQ1JUU0NUUwotLyogSW4gTGludXggY2FzZSwgd2UgZG8gdGhpcywgd2hpY2ggaXMg dW5saWtlbHkgdG8gYmUgcG9ydGFibGUgKi8KLSAgICAgICAgdHRyYXcuY19jZmxhZyAmPSB+Q1JU U0NUUzsJLyogVHVybiBvZmYgUlRTL0NUUyBmbGFnICovCi0gICAgICAgIHR0cmF3LmNfY2ZsYWcg fD0gKHR0b2xkLmNfY2ZsYWcgJiBDUlRTQ1RTKTsgLyogT1IgaW4gb2xkIG9uZSAqLwotI2VuZGlm IC8qIFBPU0lYX0NSVFNDVFMgKi8KLSAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX1JUU0MgfHwJ LyogSGFyZHdhcmUgKi8KLQkgICAgICAgZmxvdyA9PSBGTE9fRFRSQyB8fAotCSAgICAgICBmbG93 ID09IEZMT19EVFJUKSB7Ci0JdHRyYXcuY19pZmxhZyAmPSB+KElYT058SVhPRkYpOwkvKiAoMTkw KSAqLwotCXR0aGZsb3coZmxvdywgMSwgJnR0cmF3KTsKLSAgICB9Ci0gICAgdHRyYXcuY19sZmxh ZyAmPSB+KElDQU5PTnxFQ0hPKTsKLSAgICB0dHJhdy5jX2xmbGFnICY9IH5JU0lHOwkJLyogRG8g Tk9UIGNoZWNrIGZvciBpbnRlcnJ1cHQgY2hhcnMgKi8KLQotI2lmbmRlZiBPWE9TCi0jaWZkZWYg UU5YCi0gICAgaWYgKGZsb3cgIT0gRkxPX1JUU0MgJiYgZmxvdyAhPSBGTE9fRFRSQyAmJiBmbG93 ICE9IEZMT19EVFJUKQotI2VuZGlmIC8qIFFOWCAqLwotI2lmbmRlZiBDT0hFUkVOVAotICAgICAg dHRyYXcuY19sZmxhZyAmPSB+SUVYVEVOOwkJLyogVHVybiBvZmYgXk8vXlYgcHJvY2Vzc2luZyAq LwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0jZWxzZSAvKiBPWE9TICovCi0gICAgdHRyYXcuY19j Y1tWRElTQ0FSRF0gPSB0dHJhdy5jX2NjW1ZMTkVYVF0gPSBDRElTQUJMRTsKLSNlbmRpZiAvKiBP WE9TICovCi0gICAgdHRyYXcuY19sZmxhZyB8PSBOT0ZMU0g7CQkvKiBEb24ndCBmbHVzaCAqLwot ICAgIHR0cmF3LmNfaWZsYWcgfD0gSUdOUEFSOwkJLyogSWdub3JlIHBhcml0eSBlcnJvcnMgKi8K LSNpZmRlZiBBVFRTVgotI2lmZGVmIEJTRDQ0Ci0gICAgdHRyYXcuY19pZmxhZyAmPSB+KElHTkJS S3xJTkxDUnxJR05DUnxJQ1JOTHxJTlBDS3xJU1RSSVB8SVhBTlkpOwotI2Vsc2UKLSAgICB0dHJh dy5jX2lmbGFnICY9IH4oSUdOQlJLfElOTENSfElHTkNSfElDUk5MfElVQ0xDfElOUENLfElTVFJJ UHxJWEFOWSk7Ci0jZW5kaWYgLyogQlNENDQgKi8KLSNlbHNlIC8qIFBPU0lYICovCi0gICAgdHRy YXcuY19pZmxhZyAmPSB+KElHTkJSS3xJTkxDUnxJR05DUnxJQ1JOTHxJTlBDS3xJU1RSSVApOwot I2VuZGlmIC8qIEFUVFNWICovCi0gICAgdHRyYXcuY19vZmxhZyAmPSB+T1BPU1Q7Ci0gICAgdHRy YXcuY19jZmxhZyAmPSB+KENTSVpFKTsKLSAgICB0dHJhdy5jX2NmbGFnIHw9IChDUzh8Q1JFQUR8 SFVQQ0wpOwotCi0jaWZkZWYgQ1NUT1BCCi0gICAgaWYgKHhsb2NhbCkgewotCWlmIChzdG9wYml0 cyA9PSAyKSB7Ci0JICAgIHR0cmF3LmNfY2ZsYWcgfD0gQ1NUT1BCOwkvKiAyIHN0b3AgYml0cyAq LwotCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCAyIHN0b3BiaXRzIiwiIiwwKTsKLQl9IGVsc2UgaWYg KHN0b3BiaXRzID09IDEpIHsKLQkgICAgdHRyYXcuY19jZmxhZyAmPSB+KENTVE9QQik7CS8qIDEg c3RvcCBiaXQgKi8KLQkgICAgZGVidWcoRjEwMCwidHRwa3QgMSBzdG9wYml0IiwiIiwwKTsKLQl9 Ci0gICAgfQotI2VuZGlmIC8qIENTVE9QQiAqLwotCi0jaWZkZWYgSFdQQVJJVFkKLSAgICBpZiAo aHdwYXJpdHkgJiYgeGxvY2FsKSB7CQkvKiBIYXJkd2FyZSBwYXJpdHkgKi8KLQl0dHJhdy5jX2Nm bGFnIHw9IFBBUkVOQjsJLyogRW5hYmxlIHBhcml0eSAqLwotI2lmZGVmIENPTU1FTlQKLS8qIFVu Y29tbWVudCB0aGlzIG9ubHkgaWYgbmVlZGVkIC0tIEkgZG9uJ3QgdGhpbmsgaXQgaXMgKi8KLQl0 dHJhdy5jX2NmbGFnICY9IH4oQ1NJWkUpOwkvKiBDbGVhciBvdXQgY2hhcmFjdGVyLXNpemUgbWFz ayAqLwotCXR0cmF3LmNfY2ZsYWcgfD0gQ1M4OwkJLyogQW5kIHNldCBpdCB0byA4ICovCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotI2lmZGVmIElHTlBBUgotCXR0cmF3LmNfaWZsYWcgfD0gSUdOUEFS OwkvKiBEb24ndCBkaXNjYXJkIGluY29taW5nIGJ5dGVzICovCi0JZGVidWcoRjEwMCwidHRwa3Qg SUdOUEFSIiwiIiwwKTsgLyogdGhhdCBoYXZlIHBhcml0eSBlcnJvcnMgKi8KLSNlbmRpZiAvKiBJ R05QQVIgKi8KLQlzd2l0Y2ggKGh3cGFyaXR5KSB7Ci0JICBjYXNlICdlJzoJCQkvKiBFdmVuICov Ci0JICAgIHR0cmF3LmNfY2ZsYWcgJj0gfihQQVJPREQpOwotCSAgICBkZWJ1ZyhGMTAwLCJ0dHBr dCA4IGJpdHMgKyBldmVuIHBhcml0eSIsIiIsMCk7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAnbyc6 CQkJLyogT2RkICovCi0JICAgIHR0cmF3LmNfY2ZsYWcgfD0gUEFST0REOwotCSAgICBkZWJ1ZyhG MTAwLCJ0dHBrdCA4IGJpdHMgKyBvZGQgcGFyaXR5IiwiIiwwKTsKLQkgICAgYnJlYWs7Ci0JICBj YXNlICdtJzoJCQkvKiBNYXJrICovCi0JICBjYXNlICdzJzoJCQkvKiBTcGFjZSAqLwotCSAgICAv KiBQQVJFWFQgaXMgbWVudGlvbmVkIGluIFNWSUQgYnV0IHRoZSBkZXRhaWxzIGFyZSBub3QgZ2l2 ZW4uICovCi0JICAgIC8qIFBBUkVYVCBpcyBub3QgaW5jbHVkZWQgaW4gUE9TSVggSVNPL0lFQyA5 OTQ1LTEuICovCi0JICAgIGRlYnVnKEYxMDAsInR0cGt0IDggYml0cyArIGludmFsaWQgcGFyaXR5 IiwiIiwwKTsKLQkgICAgYnJlYWs7Ci0JfQotICAgIH0gZWxzZSB7CQkJCS8qIFdlIGhhbmRsZSBw YXJpdHkgb3Vyc2VsdmVzICovCi0jZW5kaWYgLyogSFdQQVJJVFkgKi8KLQl0dHJhdy5jX2NmbGFn ICY9IH4oUEFSRU5CKTsJLyogRG9uJ3QgZW5hYmxlIHBhcml0eSAqLwotI2lmZGVmIEhXUEFSSVRZ Ci0gICAgfQotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0KLSNpZmRlZiBJWDM3MAotICAgIHR0cmF3 LmNfY2NbNF0gPSA0ODsgIC8qIFNvIFNlcmllcy8xIGRvZXNuJ3QgaW50ZXJydXB0IG9uIGV2ZXJ5 IGNoYXIgKi8KLSAgICB0dHJhdy5jX2NjWzVdID0gMTsKLSNlbHNlCi0jaWZuZGVmIFZFT0YJCQkJ LyogZm9yIERHVVggdGhpcyBpcyBWRU9GLCBub3QgVk1JTiAqLwotICAgIHR0cmF3LmNfY2NbNF0g PSAxOyAgIC8qIFtWTUlOXSAgcmV0dXJuIG1heCBvZiB0aGlzIG1hbnkgY2hhcmFjdGVycyBvciAq LwotI2Vsc2UKLSNpZm5kZWYgT1hPUwotI2lmZGVmIFZNSU4KLSAgICB0dHJhdy5jX2NjW1ZNSU5d ID0gMTsKLSNlbmRpZiAvKiBWTUlOICovCi0jZWxzZSAvKiBPWE9TICovCi0gICAgdHRyYXcuY19t aW4gPSAxOwotI2VuZGlmIC8qIE9YT1MgKi8KLSNlbmRpZiAvKiBWRU9GICovCi0jaWZuZGVmIFZF T0wJCQkJLyogZm9yIERHVVggdGhpcyBpcyBWRU9MLCBub3QgVlRJTUUgKi8KLSAgICB0dHJhdy5j X2NjWzVdID0gMDsJIC8qIFtWVElNRV0gd2hlbiB0aGlzIG1hbnkgc2Vjcy8xMCBleHBpcmUgdy9u byBpbnB1dCAqLwotI2Vsc2UKLSNpZm5kZWYgT1hPUwotI2lmZGVmIFZUSU1FCi0gICAgdHRyYXcu Y19jY1tWVElNRV0gPSAwOwotI2VuZGlmIC8qIFZUSU1FICovCi0jZWxzZSAvKiBPWE9TICovCi0g ICAgdHRyYXcuY190aW1lID0gMDsKLSNlbmRpZiAvKiBPWE9TICovCi0jZW5kaWYgLyogVkVPTCAq LwotI2VuZGlmIC8qIElYMzcwICovCi0KLSNpZmRlZiBWSU5UUgkJCQkvKiBUdXJuIG9mZiBpbnRl cnJ1cHQgY2hhcmFjdGVyICovCi0gICAgaWYgKHhsb2NhbCA9PSAwKQkJCS8qIHNvIF5DXkMgY2Fu IGJyZWFrIHVzIG91dCBvZiAqLwotICAgICAgdHRyYXcuY19jY1tWSU5UUl0gPSAwOwkJLyogcGFj a2V0IG1vZGUuICovCi0jZW5kaWYgLyogVklOVFIgKi8KLQotI2lmZGVmIFBsYW45Ci0gICAgaWYg KHA5dHR5cGFyaXR5KCduJykgPCAwKQotCXJldHVybiAtMTsKLSNlbHNlCi0jaWZkZWYgQlNENDRP UlBPU0lYCi0gICAgZXJybm8gPSAwOwotI2lmZGVmIEJFT1NPUkJFQk9YCi0gICAgdHRyYXcuY19j Y1tWTUlOXSA9IDA7CQkvKiBEUjcgY2FuIG9ubHkgcG9sbC4gKi8KLSNlbmRpZiAvKiBCRU9TT1JC RUJPWCAqLwotCi0jZGVmaW5lIFRFU1RJTkcyMzQKLSNpZmRlZiBURVNUSU5HMjM0Ci0gICAgaWYg KDEpIHsKLQlkZWJ1ZyhGMTAwLCJ0dHBrdCBURVNUSU5HMjM0IHJhd21vZGUiLCIiLDApOwotCi0J LyogaWZsYWdzICovCi0JdHRyYXcuY19pZmxhZyAmPSB+KFBBUk1SS3xJU1RSSVB8QlJLSU5UfElO TENSfElHTkNSfElDUk5MKTsKLQl0dHJhdy5jX2lmbGFnICY9IH4oSU5QQ0t8SUdOUEFSfElYT058 SVhPRkYpOwotCXR0cmF3LmNfaWZsYWcgfD0gSUdOQlJLOwotI2lmZGVmIElNQVhCRUwKLQl0dHJh dy5jX2lmbGFnICY9IH5JTUFYQkVMOwotI2VuZGlmCS8qIElNQVhCRUwgKi8KLSNpZmRlZiBJWEFO WQotCXR0cmF3LmNfaWZsYWcgJj0gfklYQU5ZOwotI2VuZGlmCS8qIElYQU5ZICovCi0jaWZkZWYg SVVDTEMKLQl0dHJhdy5jX2lmbGFnICY9IH5JVUNMQzsKLSNlbmRpZiAvKiBJVUNMQyAqLwotCi0J Lyogb2ZsYWdzICovCi0JdHRyYXcuY19vZmxhZyAmPSB+T1BPU1Q7Ci0jaWZkZWYgT1hUQUJTCi0J dHRyYXcuY19vZmxhZyAmPSB+T1hUQUJTOwotI2VuZGlmIC8qIE9YVEFCUyAqLwotI2lmZGVmIE9O T0NSCi0JdHRyYXcuY19vZmxhZyAmPSB+T05PQ1I7Ci0jZW5kaWYgLyogT05PQ1IgKi8KLSNpZmRl ZiBPTkxSRVQKLQl0dHJhdy5jX29mbGFnICY9IH5PTkxSRVQ7Ci0jZW5kaWYgLyogT05MUkVUICov Ci0jaWZkZWYgT05MQ1IKLQl0dHJhdy5jX29mbGFnICY9IH5PTkxDUjsKLSNlbmRpZiAvKiBPTkxD UiAqLwotCi0JLyogbGZsYWdzICovCi0JdHRyYXcuY19sZmxhZyAmPSB+RUNITzsKLSNpZmRlZiBF Q0hPRQotCXR0cmF3LmNfbGZsYWcgJj0gfkVDSE9FOwotI2VuZGlmIC8qIEVDSE9FICovCi0jaWZk ZWYgRUNIT05MCi0JdHRyYXcuY19sZmxhZyAmPSB+RUNIT05MOwotI2VuZGlmIC8qIEVDSE9OTCAq LwotI2lmZGVmIEVDSE9QUlQKLQl0dHJhdy5jX2xmbGFnICY9IH5FQ0hPUFJUOwotI2VuZGlmIC8q IEVDSE9QUlQgKi8KLSNpZmRlZiBFQ0hPS0UKLQl0dHJhdy5jX2xmbGFnICY9IH5FQ0hPS0U7Ci0j ZW5kaWYgLyogRUNIT0tFICovCi0jaWZkZWYgRUNIT0NUTAotCXR0cmF3LmNfbGZsYWcgJj0gfkVD SE9DVEw7Ci0jZW5kaWYgLyogRUNIT0NUTCAqLwotI2lmZGVmIEFMVFdFUkFTRQotCXR0cmF3LmNf bGZsYWcgJj0gfkFMVFdFUkFTRTsKLSNlbmRpZiAvKiBBTFRXRVJBU0UgKi8KLSNpZmRlZiBFWFRQ Uk9DCi0JdHRyYXcuY19sZmxhZyAmPSB+RVhUUFJPQzsKLSNlbmRpZiAvKiBFWFRQUk9DICovCi0J dHRyYXcuY19sZmxhZyAmPSB+KElDQU5PTnxJU0lHfElFWFRFTnxUT1NUT1B8RkxVU0hPfFBFTkRJ Tik7Ci0jaWZkZWYgTk9LRVJOSU5GTwotCXR0cmF3LmNfbGZsYWcgfD0gTk9LRVJOSU5GTzsKLSNl bmRpZgkvKiBOT0tFUk5JTkZPICovCi0JLyogdHRyYXcuY19sZmxhZyB8PSBOT0ZMU0g7ICovCi0J dHRyYXcuY19sZmxhZyAmPSB+Tk9GTFNIOwotCi0JLyogY2ZsYWdzICovCi0JdHRyYXcuY19jZmxh ZyAmPSB+KENTSVpFfFBBUkVOQnxQQVJPREQpOwotCXR0cmF3LmNfY2ZsYWcgfD0gQ1M4fENSRUFE OwotI2lmZGVmIFZNSU4KLQl0dHJhdy5jX2NjW1ZNSU5dID0gMTsJCS8qIFN1cHBvc2VkbHkgbmVl ZGVkIGZvciBBSVggKi8KLSNlbmRpZgkvKiBWTUlOICovCi0KLSAgICB9Ci0jZW5kaWYgLyogVEVT VElORzIzNCAqLwotCi0gICAgZGVidWcoRjEwMCwidHRwa3QgY2FsbGluZyB0Y3NldGF0dHIoVENT RVRBVykiLCIiLDApOwotICAgIHggPSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0dHJhdyk7 Ci0gICAgZGVidWcoRjEwMSwidHRwa3QgQlNENDRPUlBPU0lYIHRjc2V0YXR0ciIsIiIseCk7Ci0g ICAgaWYgKHggPCAwKSB7Ci0JZGVidWcoRjEwMSwidHRwa3QgQlNENDRPUlBPU0lYIHRjc2V0YXR0 ciBlcnJubyIsIiIsZXJybm8pOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSNlbHNlIC8q IEJTRDQ0T1JQT1NJWCAqLwotICAgIHggPSBpb2N0bCh0dHlmZCxUQ1NFVEFXLCZ0dHJhdyk7Ci0g ICAgZGVidWcoRjEwMSwidHRwa3QgQVRUU1YgaW9jdGwgVENTRVRBVyIsIiIseCk7Ci0gICAgaWYg KHggPCAwKSB7ICAvKiBzZXQgbmV3IG1vZGVzIC4gKi8KLQlkZWJ1ZyhGMTAxLCJ0dHBrdCBBVFRT ViBpb2N0bCBUQ1NFVEFXIGVycm5vIiwiIixlcnJubyk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0g ICAgfQotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotI2VuZGlmIC8qIFBsYW45ICovCi0gICAg dHZ0ZmxnID0gMDsKLSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBvayIsIiIsMCk7Ci0gICAgcmV0dXJu KDApOwotI2VuZGlmIC8qIEFUVFNWICovCi0KLSNpZmRlZiBDT0hFUkVOVAotI3VuZGVmIFNWT1JQ T1NJWAotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLX0KLQotLyogIFQgVCBTIEUgVCBGIEwgTyBX ICAtLSAgU2V0IGZsb3cgY29udHJvbCBpbW1lZGlhdGVseS4gICovCi0KLSNpZmRlZiBDT0hFUkVO VAotI2RlZmluZSBTVk9SUE9TSVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi1pbnQKLXR0c2V0 ZmxvdyhmbG93KSBpbnQgZmxvdzsgewotICAgIGlmICh0dHlmZCA8IDApCQkJLyogQSBjaGFubmVs IG11c3QgYmUgb3BlbiAqLwotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGRlYnVnKEYxMDEsInR0 c2V0ZmxvdyBmbG93IiwiIixmbG93KTsKLQotI2lmZGVmIFROX0NPTVBPUlQKLSAgICBpZiAobmV0 Y29ubiAmJiBpc3RuY29tcG9ydCgpKSB7Ci0JZGVidWcoRjEwMSwidHRzZXRmbG93IG5ldCBtb2Rl bSIsIiIsdHRtZG0pOwotCXJldHVybih0bnNldGZsb3coZmxvdykpOwotICAgIH0KLSNlbmRpZiAv KiBUTl9DT01QT1JUICovCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0dXJuKDAp OwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkgcmV0 dXJuKDApOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgIC8qIFRo aXMgc2VlbXMgdG8gaHVydC4uLiAqLwotICAgIGlmIChmbG93ID09IEZMT19LRUVQKQotICAgICAg cmV0dXJuKDApOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIGlmIChmbG93ID09IEZMT19S VFNDIHx8CQkvKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wuLi4gKi8KLQlmbG93ID09IEZMT19EVFJD IHx8Ci0JZmxvdyA9PSBGTE9fRFRSVCkgewotCXR0aGZsb3coZmxvdywgMSwgJnR0cmF3KTsKLSNp Zm5kZWYgU1ZPUlBPU0lYCi0JdHRyYXcuc2dfZmxhZ3MgJj0gflRBTkRFTTsJLyogVHVybiBvZmYg c29mdHdhcmUgZmxvdyBjb250cm9sICovCi0jZWxzZQotCXR0cmF3LmNfaWZsYWcgJj0gfihJWE9O fElYT0ZGKTsKLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLQotICAgIH0gZWxzZSBpZiAoZmxvdyA9 PSBGTE9fWE9OWCkgewkvKiBYb24vWG9mZi4uLiAqLwotCi0jaWZuZGVmIFNWT1JQT1NJWAotCXR0 cmF3LnNnX2ZsYWdzIHw9IFRBTkRFTTsKLSNlbHNlCi0JdHRyYXcuY19pZmxhZyB8PSAoSVhPTnxJ WE9GRik7Ci0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0JdHRoZmxvdyhGTE9fUlRTQywgMCwgJnR0 cmF3KTsJLyogVHVybiBvZmYgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCi0KLSAgICB9IGVsc2Ug aWYgKGZsb3cgPT0gRkxPX05PTkUpIHsJLyogTm8gZmxvdyBjb250cm9sICovCi0KLSNpZm5kZWYg U1ZPUlBPU0lYCi0JdHRyYXcuc2dfZmxhZ3MgJj0gflRBTkRFTTsJLyogVHVybiBvZmYgc29mdHdh cmUgZmxvdyBjb250cm9sICovCi0jZWxzZQotCXR0cmF3LmNfaWZsYWcgJj0gfihJWE9OfElYT0ZG KTsKLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLQl0dGhmbG93KEZMT19SVFNDLCAwLCAmdHRyYXcp OwkvKiBUdXJuIG9mZiBhbnkgaGFyZHdhcmUgZi9jIHRvbyAqLwotICAgIH0KLQotLyogU2V0IHRo ZSBuZXcgbW9kZXMuLi4gKi8KLQotI2lmbmRlZiBTVk9SUE9TSVgJCQkvKiBCU0QgYW5kIGZyaWVu ZHMgKi8KLSNpZmRlZiBCRUxMVjEwCi0gICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NTRVRQLCZ0dHJh dykgPCAwKQotICAgICAgcmV0dXJuKC0xKTsKLSNlbHNlCi0jaWZuZGVmIE1JTklYMgotICAgIGlm IChzdHR5KHR0eWZkLCZ0dHJhdykgPCAwKQotICAgICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBN SU5JWDIgKi8KLSNlbmRpZiAvKiBCRUxMVjEwICovCi0jZWxzZQotI2lmZGVmIEJTRDQ0T1JQT1NJ WAkJCS8qIFBPU0lYICovCi0gICAgaWYgKHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0cmF3 KSA8IDApCi0gICAgICByZXR1cm4oLTEpOwotI2Vsc2UJCQkJCS8qIFN5c3RlbSBWICovCi0gICAg aWYgKGlvY3RsKHR0eWZkLFRDU0VUQVcsJnR0cmF3KSA8IDApCi0gICAgICByZXR1cm4oLTEpOwot I2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotICAgIHJl dHVybigwKTsKLX0KLSNpZmRlZiBDT0hFUkVOVAotI3VuZGVmIFNWT1JQT1NJWAotI2VuZGlmIC8q IENPSEVSRU5UICovCi0KLS8qICBUIFQgViBUIC0tIENvbmRpdGlvbiBjb21tdW5pY2F0aW9uIGRl dmljZSBmb3IgdXNlIGFzIHZpcnR1YWwgdGVybWluYWwuICovCi0KLWludAotI2lmZGVmIENLX0FO U0lDCi10dHZ0KGxvbmcgc3BlZWQsIGludCBmbG93KQotI2Vsc2UKLXR0dnQoc3BlZWQsZmxvdykg bG9uZyBzcGVlZDsgaW50IGZsb3c7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHR0dnQgKi8g ewotICAgIGludCBzLCBzMiwgeDsKLQotICAgIGRlYnVnKEYxMDEsInR0dnQgdHR5ZmQiLCIiLHR0 eWZkKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHZ0IHR2dGZsZyIsIiIsdHZ0ZmxnKTsKLSAgICBkZWJ1 ZyhGMTExLCJ0dHZ0IHNwZWVkIixja2l0b2EodHRzcGVlZCksc3BlZWQpOwotICAgIGRlYnVnKEYx MTEsInR0dnQgZmxvdyIsY2tpdG9hKHR0ZmxvdyksZmxvdyk7Ci0gICAgZGVidWcoRjExMSwidHR2 dCBjdXJjYXJyIixja2l0b2EodHRjYXJyKSxjdXJjYXJyKTsKLQotLyogTm90ZTogTmV0QlNEIGFu ZCBtYXliZSBvdGhlciBCU0Q0NHMgaGF2ZSBjZm1ha2VyYXcoKSAqLwotLyogTWF5YmUgaXQgd291 bGQgYmUgc2ltcGxlciB0byB1c2UgaXQuLi4gKi8KLQotICAgIHR0cG1zayA9IDB4ZmY7Ci0jaWZk ZWYgTk9MT0NBTAotICAgIHJldHVybihjb25iaW4oKGNoYXIpZXNjY2hyKSk7Ci0jZWxzZQotICAg IGlmICh0dHlmZCA8IDApIHsJCQkvKiBOb3Qgb3Blbi4gKi8KLQlpZiAodHRjaGsoKSA8IDApCi0J ICByZXR1cm4oLTEpOwotCWVsc2UJCQkJLyogQnV0IG1heWJlIHNvbWV0aGluZyBidWZmZXJlZC4g Ki8KLQkgIHJldHVybigwKTsKLSAgICB9Ci0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkg cmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0 dHB0eSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotI2lmZGVmIE5FVENPTk4KLSAg ICBpZiAobmV0Y29ubikgewotI2lmZGVmIFRDUFNPQ0tFVAotI2lmZGVmIFRDUF9OT0RFTEFZCi0g ICAgICAgIHsKLQkgICAgZXh0ZXJuIGludCB0Y3Bfbm9kZWxheTsKLQkgICAgaWYgKHR0bmV0ID09 IE5FVF9UQ1BCKSB7Ci0JCWlmIChub2RlbGF5X3NhdiA+IC0xKSB7Ci0JCSAgICBub19kZWxheSh0 dHlmZCxub2RlbGF5X3Nhdik7Ci0JCSAgICBub2RlbGF5X3NhdiA9IC0xOwotCQl9Ci0JICAgIH0K LSAgICAgICAgfQotI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCi0jaWZkZWYgVE5fQ09NUE9SVAot ICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgewotICAgICAgICAgICAgaW50IHJjID0gLTE7Ci0g ICAgICAgICAgICBpZiAodHZ0ZmxnICE9IDAgJiYgc3BlZWQgPT0gdHRzcGVlZCAmJiBmbG93ID09 IHR0ZmxvdwotICAgICAgICAgICAgICAgICAvKiAmJiB0dGNhcnIgPT0gY3VyY2FyciAqLyApIHsK LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHZ0IG1vZGVzIGFscmVhZHkgc2V0LCBza2lw cGluZy4uLiIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKDApOwkJCS8qIEFscmVhZHkg YmVlbiBjYWxsZWQuICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmxvdyAhPSB0 dGZsb3cpIHsKLSAgICAgICAgICAgICAgICBpZiAoKHJjID0gdG5zZXRmbG93KGZsb3cpKSA8IDAp Ci0JCSAgcmV0dXJuKHJjKTsKLSAgICAgICAgICAgICAgICB0dGZsb3cgPSBmbG93OwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgaWYgKHNwZWVkICE9IHR0c3BlZWQpIHsKLSAgICAgICAgICAg ICAgICBpZiAoc3BlZWQgPD0gMCkgCi0JCSAgc3BlZWQgPSB0bmNfZ2V0X2JhdWQoKTsKLSAgICAg ICAgICAgICAgICBlbHNlIGlmICgocmMgPSB0bmNfc2V0X2JhdWQoc3BlZWQpKSA8IDApCi0JCSAg cmV0dXJuKHJjKTsKLSAgICAgICAgICAgICAgICB0dHNwZWVkID0gc3BlZWQ7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICB0bmNfc2V0X2RhdGFzaXplKDgpOwotCSAgICB0bmNfc2V0X3N0b3Bz aXplKHN0b3BiaXRzKTsKLQotI2lmZGVmIEhXUEFSSVRZCi0gICAgICAgICAgICBpZiAoaHdwYXJp dHkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGh3cGFyaXR5KSB7Ci0JCSAgY2FzZSAnZSc6 CQkvKiBFdmVuICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0 cyArIGV2ZW4gcGFyaXR5IiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJp dHkoMyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkgIGNhc2UgJ28nOgkJLyogT2Rk ICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyArIG9kZCBw YXJpdHkiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgyKTsKLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCSAgY2FzZSAnbSc6CQkvKiBNYXJrICovCi0gICAg ICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyArIGludmFsaWQgcGFyaXR5 OiBtYXJrIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoNCk7Ci0g ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkgIGNhc2UgJ3MnOgkJLyogU3BhY2UgKi8KLSAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgaW52YWxpZCBwYXJp dHk6IHNwYWNlIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoNSk7 Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIH0gZWxzZQotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0gICAgICAgICAgICB7Ci0gICAgICAg ICAgICAgICAgdG5jX3NldF9wYXJpdHkoMSk7CS8qIE5vbmUgKi8KLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIHR2dGZsZyA9IDE7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0K LSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0JdHZ0Zmxn ID0gMTsJCQkvKiBOZXR3b3JrIGNvbm5lY3Rpb25zLi4uICovCi0JZGVidWcoRjEwMCwidHR2dCBu ZXR3b3JrIGNvbm5lY3Rpb24sIHNraXBwaW5nLi4uIiwiIiwwKTsKLQlyZXR1cm4oMCk7CQkJLyog Li4uIHJlcXVpcmUgbm8gc3BlY2lhbCBzZXR1cCAqLwotICAgIH0KLSNlbmRpZiAvKiBORVRDT05O ICovCi0KLSAgICBpZiAodHZ0ZmxnICE9IDAgJiYgc3BlZWQgPT0gdHRzcGVlZCAmJiBmbG93ID09 IHR0ZmxvdwotCS8qICYmIHR0Y2FyciA9PSBjdXJjYXJyICovICkKLSAgICAgIHsKLQkgIGRlYnVn KEYxMDAsInR0dnQgbW9kZXMgYWxyZWFkeSBzZXQsIHNraXBwaW5nLi4uIiwiIiwwKTsKLQkgIHJl dHVybigwKTsJCQkvKiBBbHJlYWR5IGJlZW4gY2FsbGVkLiAqLwotICAgICAgfQotCi0gICAgaWYg KHR0ZmRmbGcKLSNpZm5kZWYgUGxhbjkKLQkmJiAhaXNhdHR5KHR0eWZkKQotI2VuZGlmIC8qIFBs YW45ICovCi0JKSB7Ci0JZGVidWcoRjEwMCwidHR2dCB1c2luZyBleHRlcm5hbCBmZCwgc2tpcHBp bmcuLi4iLCIiLDApOwotCXJldHVybigwKTsKLSAgICB9Ci0KLSAgICBkZWJ1ZyhGMTAwLCJ0dHZ0 IHNldHRpbmcgbW9kZXMuLi4iLCIiLDApOwotCi0gICAgaWYgKHhsb2NhbCkgewkJCS8qIEZvciBl eHRlcm5hbCBsaW5lcy4uLiAqLwotCXMyID0gKGludCkgKHNwZWVkIC8gMTBMKTsKLQlzID0gdHRz c3BkKHMyKTsJCQkvKiBDaGVjay9zZXQgdGhlIHNwZWVkICovCi0JY2FycmN0bCgmdHR0dnQsIGZs b3cgIT0gRkxPX0RJQUwgLyogRG8gY2FycmllciBjb250cm9sICovCi0JCSYmICh0dGNhcnIgPT0g Q0FSX09OIHx8ICh0dGNhcnIgPT0gQ0FSX0FVVCAmJiB0dG1kbSAhPSAwKSkpOwotICAgIH0gZWxz ZQotICAgICAgcyA9IHMyID0gLTE7Ci0KLSNpZmRlZiBDT0hFUkVOVAotI2RlZmluZSBTVk9SUE9T SVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0jaWZuZGVmIFNWT1JQT1NJWAotICAgIC8qIEJl cmtlbGV5LCBWNywgZXRjICovCi0gICAgaWYgKGZsb3cgPT0gRkxPX1JUU0MgfHwJCS8qIEhhcmR3 YXJlIGZsb3cgY29udHJvbCAqLwotCWZsb3cgPT0gRkxPX0RUUkMgfHwKLQlmbG93ID09IEZMT19E VFJUKSB7Ci0JdHRoZmxvdyhmbG93LCAxLCAmdHR0dnQpOwotCWRlYnVnKEYxMDAsInR0dnQgaGFy ZCBmbG93LCBUQU5ERU0gb2ZmIiwiIiwwKTsKLQl0dHR2dC5zZ19mbGFncyAmPSB+VEFOREVNOwkv KiBUdXJuIG9mZiBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KLSAgICB9IGVsc2UgaWYgKGZsb3cg PT0gRkxPX1hPTlgpIHsJLyogWG9uL1hvZmYgZmxvdyBjb250cm9sICovCi0JZGVidWcoRjEwMCwi dHR2dCBUQU5ERU0gb24iLCIiLDApOwotCXR0dHZ0LnNnX2ZsYWdzIHw9IFRBTkRFTTsJLyogQXNr IGZvciBpdC4gKi8KLQl0dGhmbG93KGZsb3csIDAsICZ0dHR2dCk7CS8qIFR1cm4gb2ZmIGhhcmR3 YXJlIGYvYyAqLwotICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fTk9ORSkgewotCWRlYnVnKEYx MDAsInR0dnQgbm8gZmxvdywgVEFOREVNIG9mZiwgUkFXIG9uIiwiIiwwKTsKLQl0dHR2dC5zZ19m bGFncyAmPSB+VEFOREVNOwkvKiBUdXJuIG9mZiBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KLQl0 dGhmbG93KGZsb3csIDAsICZ0dHR2dCk7CS8qIFR1cm4gb2ZmIGFueSBoYXJkd2FyZSBmL2MgdG9v ICovCi0JdHR0dnQuc2dfZmxhZ3MgfD0gUkFXOwkJLyogRW50ZXIgcmF3IG1vZGUgKi8KLSAgICB9 IGVsc2UgaWYgKGZsb3cgPT0gRkxPX0tFRVApIHsJLyogS2VlcCBkZXZpY2UncyBvcmlnaW5hbCBz ZXR0aW5nICovCi0JZGVidWcoRjEwMCwidHR2dCBrZWVwaW5nIG9yaWdpbmFsIFRBTkRFTSIsIiIs MCk7Ci0JdHR0dnQuc2dfZmxhZ3MgJj0gflRBTkRFTTsKLQl0dHR2dC5zZ19mbGFncyB8PSAodHRv bGQuc2dfZmxhZ3MgJiBUQU5ERU0pOwotCS8qIE5PVEU6IFdlIHNob3VsZCBhbHNvIGhhbmRsZSBo YXJkd2FyZSBmbG93IGNvbnRyb2wgaGVyZSEgKi8KLSAgICB9Ci0gICAgdHR0dnQuc2dfZmxhZ3Mg fD0gUkFXOyAgICAgICAgICAgICAgLyogUmF3IG1vZGUgaW4gYWxsIGNhc2VzICovCi0jaWZkZWYg VE9XRVIxCi0gICAgdHR0dnQuc2dfZmxhZ3MgJj0gfihFQ0hPfEFOWVApOyAgICAgLyogTm8gZWNo byBvciBwYXJpdHkgKi8KLSNlbHNlCi0gICAgdHR0dnQuc2dfZmxhZ3MgJj0gfkVDSE87ICAgICAg ICAgICAgLyogTm8gZWNobyAqLwotI2VuZGlmIC8qIFRPV0VSMSAqLwotCi0jaWZkZWYgQkVMTFYx MAotICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DU0VUUCwmdHR0dnQpIDwgMCkgLyogU2V0IHRoZSBu ZXcgbW9kZXMgKi8KLSAgICAgIHJldHVybigtMSk7Ci0jZWxzZQotICAgIGlmIChzdHR5KHR0eWZk LCZ0dHR2dCkgPCAwKQkJLyogU2V0IHRoZSBuZXcgbW9kZXMgKi8KLSAgICAgIHJldHVybigtMSk7 Ci0jZW5kaWYgLyogQkVMTFYxMCAqLwotCi0jZWxzZSAvKiBJdCBpcyBBVFRTViBvciBQT1NJWCAq LwotCi0gICAgaWYgKGZsb3cgPT0gRkxPX1hPTlgpIHsJCS8qIFNvZnR3YXJlIGZsb3cgY29udHJv bCAqLwotCXR0dHZ0LmNfaWZsYWcgfD0gKElYT058SVhPRkYpOwkvKiBPbiBpZiByZXF1ZXN0ZWQu ICovCi0JdHRoZmxvdyhmbG93LCAwLCAmdHR0dnQpOwkvKiBUdXJuIG9mZiBoYXJkd2FyZSBmL2Mg Ki8KLQlkZWJ1ZyhGMTAwLCJ0dHZ0IFNWT1JQT1NJWCBmbG93IFhPTi9YT0ZGIiwiIiwwKTsKLSAg ICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX05PTkUpIHsJLyogTk9ORSAqLwotCXR0dHZ0LmNfaWZs YWcgJj0gfihJWE9OfElYT0ZGKTsJLyogVHVybiBvZmYgWG9uL1hvZmYgKi8KLQl0dGhmbG93KGZs b3csIDAsICZ0dHR2dCk7CS8qIFR1cm4gb2ZmIGhhcmR3YXJlIGYvYyAqLwotCWRlYnVnKEYxMDAs InR0dnQgU1ZPUlBPU0lYIGZsb3cgTk9ORSIsIiIsMCk7Ci0gICAgfSBlbHNlIGlmIChmbG93ID09 IEZMT19LRUVQKSB7Ci0JdHR0dnQuY19pZmxhZyAmPSB+KElYT058SVhPRkYpOwkvKiBUdXJuIG9m ZiBYb24vWG9mZiBmbGFncyAqLwotCXR0dHZ0LmNfaWZsYWcgfD0gKHR0b2xkLmNfaWZsYWcgJiAo SVhPTnxJWE9GRikpOyAvKiBPUiBpbiBvbGQgb25lcyAqLwotI2lmZGVmIFBPU0lYX0NSVFNDVFMK LSAgICAgICAgdHR0dnQuY19jZmxhZyAmPSB+Q1JUU0NUUzsJLyogVHVybiBvZmYgUlRTL0NUUyBm bGFnICovCi0gICAgICAgIHR0dHZ0LmNfY2ZsYWcgfD0gKHR0b2xkLmNfY2ZsYWcgJiBDUlRTQ1RT KTsgLyogT1IgaW4gb2xkIG9uZSAqLwotI2VuZGlmIC8qIFBPU0lYX0NSVFNDVFMgKi8KLQlkZWJ1 ZyhGMTAwLCJ0dHZ0IFNWT1JQT1NJWCBmbG93IEtFRVAiLCIiLDApOwotICAgIH0gZWxzZSBpZiAo ZmxvdyA9PSBGTE9fUlRTQyB8fAkvKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KLQkgICAgICAg ZmxvdyA9PSBGTE9fRFRSQyB8fAotCSAgICAgICBmbG93ID09IEZMT19EVFJUKSB7Ci0JdHR0dnQu Y19pZmxhZyAmPSB+KElYT058SVhPRkYpOwkvKiAoMTk2KSAqLwotCXR0aGZsb3coZmxvdywgMSwg JnR0dHZ0KTsKLQlkZWJ1ZyhGMTAwLCJ0dHZ0IFNWT1JQT1NJWCBmbG93IEhBUkQiLCIiLDApOwot ICAgIH0KLSNpZm5kZWYgT1hPUwotI2lmZGVmIENPSEVSRU5UCi0gICAgdHR0dnQuY19sZmxhZyAm PSB+KElTSUd8SUNBTk9OfEVDSE8pOwotI2Vsc2UKLSAgICB0dHR2dC5jX2xmbGFnICY9IH4oSVNJ R3xJQ0FOT058RUNIT3xJRVhURU4pOwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0jaWZkZWYgUU5Y Ci0gICAgLyogTmVlZGVkIGZvciBod2ZjICovCi0gICAgaWYgKGZsb3cgPT0gRkxPX1JUU0MgfHwg ZmxvdyA9PSBGTE9fRFRSQyB8fCBmbG93ID09IEZMT19EVFJUKQotICAgICAgdHR0dnQuY19sZmxh ZyB8PSBJRVhURU47Ci0jZW5kaWYgLyogUU5YICovCi0jZWxzZSAvKiBPWE9TICovCi0gICAgdHR0 dnQuY19sZmxhZyAmPSB+KElTSUd8SUNBTk9OfEVDSE8pOwotICAgIHR0dHZ0LmNfY2NbVkRJU0NB UkRdID0gdHR0dnQuY19jY1tWTE5FWFRdID0gQ0RJU0FCTEU7Ci0jZW5kaWYgLyogT1hPUyAqLwot Ci0gICAgdHR0dnQuY19pZmxhZyB8PSAoSUdOQlJLfElHTlBBUik7Ci0KLS8qIFN0b3AgYml0cyAq LwotCi0jaWZkZWYgQ1NUT1BCCi0gICAgaWYgKHhsb2NhbCkgewotCWlmIChzdG9wYml0cyA9PSAy KSB7Ci0JICAgIHR0dHZ0LmNfY2ZsYWcgfD0gQ1NUT1BCOwkvKiAyIHN0b3AgYml0cyAqLwotCSAg ICBkZWJ1ZyhGMTAwLCJ0dHZ0IDIgc3RvcGJpdHMiLCIiLDApOwotCX0gZWxzZSBpZiAoc3RvcGJp dHMgPT0gMSkgewotCSAgICB0dHR2dC5jX2NmbGFnICY9IH4oQ1NUT1BCKTsJLyogMSBzdG9wIGJp dCAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0dHZ0IDEgc3RvcGJpdCIsIiIsMCk7Ci0JfQotICAgIH0K LSNlbmRpZiAvKiBDU1RPUEIgKi8KLQotLyogUGFyaXR5ICovCi0KLSNpZmRlZiBIV1BBUklUWQot ICAgIGlmIChod3Bhcml0eSAmJiB4bG9jYWwpIHsJCS8qIEhhcmR3YXJlIHBhcml0eSAqLwotI2lm ZGVmIENPTU1FTlQKLS8qIFVuY29tbWVudCB0aGlzIG9ubHkgaWYgbmVlZGVkIC0tIEkgZG9uJ3Qg dGhpbmsgaXQgaXMgKi8KLQl0dHJhdy5jX2NmbGFnICY9IH4oQ1NJWkUpOwkvKiBDbGVhciBvdXQg Y2hhcmFjdGVyLXNpemUgbWFzayAqLwotCXR0cmF3LmNfY2ZsYWcgfD0gQ1M4OwkJLyogQW5kIHNl dCBpdCB0byA4ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmZGVmIElHTlBBUgotCWRlYnVn KEYxMDEsInR0dnQgaHdwYXJpdHkgSUdOUEFSIiwiIixJR05QQVIpOwotCXR0dHZ0LmNfaWZsYWcg fD0gSUdOUEFSOwkvKiBEb24ndCBkaXNjYXJkIGluY29taW5nIGJ5dGVzICovCi0jZW5kaWYgLyog SUdOUEFSICovCi0JdHR0dnQuY19jZmxhZyB8PSBQQVJFTkI7CS8qIEVuYWJsZSBwYXJpdHkgKi8K LQotCXN3aXRjaCAoaHdwYXJpdHkpIHsKLQkgIGNhc2UgJ2UnOgkJCS8qIEV2ZW4gKi8KLQkgICAg dHR0dnQuY19jZmxhZyAmPSB+KFBBUk9ERCk7Ci0JICAgIGRlYnVnKEYxMDAsInR0dnQgOCBiaXRz ICsgZXZlbiBwYXJpdHkiLCIiLDApOwotCSAgICBicmVhazsKLQkgIGNhc2UgJ28nOgkJCS8qIE9k ZCAqLwotCSAgICB0dHR2dC5jX2NmbGFnIHw9IFBBUk9ERDsKLQkgICAgZGVidWcoRjEwMCwidHR2 dCA4IGJpdHMgKyBvZGQgcGFyaXR5IiwiIiwwKTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlICdtJzoJ CQkvKiBNYXJrICovCi0JICBjYXNlICdzJzoJCQkvKiBTcGFjZSAqLwotCSAgICAvKiBQQVJFWFQg aXMgbWVudGlvbmVkIGluIFNWSUQgYnV0IHRoZSBkZXRhaWxzIGFyZSBub3QgZ2l2ZW4uICovCi0J ICAgIC8qIFBBUkVYVCBpcyBub3QgaW5jbHVkZWQgaW4gUE9TSVggSVNPL0lFQyA5OTQ1LTEuICov Ci0JICAgIGRlYnVnKEYxMDAsInR0dnQgOCBiaXRzICsgaW52YWxpZCBwYXJpdHkiLCIiLDApOwot CSAgICBicmVhazsKLQl9Ci0gICAgfSBlbHNlIHsJCQkJLyogV2UgaGFuZGxlIHBhcml0eSBvdXJz ZWx2ZXMgKi8KLSNlbmRpZiAvKiBIV1BBUklUWSAqLwotCXR0dHZ0LmNfY2ZsYWcgJj0gfihQQVJF TkIpOwkvKiBEb24ndCBlbmFibGUgcGFyaXR5ICovCi0jaWZkZWYgSFdQQVJJVFkKLSAgICB9Ci0j ZW5kaWYgLyogSFdQQVJJVFkgKi8KLQotI2lmZGVmIEFUVFNWCi0jaWZkZWYgQlNENDQKLSAgICAv KiBUaGluZ3Mgbm90IHRvIGRvLi4uICovCi0gICAgdHR0dnQuY19pZmxhZyAmPSB+KElOTENSfElH TkNSfElDUk5MfElOUENLfElTVFJJUHxJWEFOWSk7Ci0jZWxzZQotICAgIHR0dHZ0LmNfaWZsYWcg Jj0gfihJTkxDUnxJR05DUnxJQ1JOTHxJVUNMQ3xJTlBDS3xJU1RSSVB8SVhBTlkpOwotI2VuZGlm IC8qIEJTRDQ0ICovCi0jZWxzZSAvKiBQT1NJWCAqLwotICAgIHR0dHZ0LmNfaWZsYWcgJj0gfihJ TkxDUnxJR05DUnxJQ1JOTHxJTlBDS3xJU1RSSVApOwotI2VuZGlmIC8qIEFUVFNWICovCi0gICAg dHR0dnQuY19jZmxhZyAmPSB+KENTSVpFKTsJCS8qIFplcm8gb3V0IHRoZSBjaGFyIHNpemUgZmll bGQgKi8KLSAgICB0dHR2dC5jX2NmbGFnIHw9IChDUzh8Q1JFQUR8SFVQQ0wpOwkvKiBDaGFyIHNp emUgOCwgZW5hYmxlIHJlY2VpdmVyLCBodXAgKi8KLSAgICB0dHR2dC5jX29mbGFnICY9IH5PUE9T VDsJCS8qIERvbid0IHBvc3Rwcm9jZXNzIG91dHB1dCAqLwotI2lmbmRlZiBWRU9GIC8qIERHVVgg dGVybWlvIGhhcyBWRU9GIGF0IGVudHJ5IDQsIHNlZSBjb21tZW50IGFib3ZlICovCi0gICAgdHR0 dnQuY19jY1s0XSA9IDE7Ci0jZWxzZQotI2lmbmRlZiBPWE9TCi0jaWZkZWYgVk1JTgotICAgIHR0 dHZ0LmNfY2NbVk1JTl0gPSAxOwotI2VuZGlmIC8qIFZNSU4gKi8KLSNlbHNlIC8qIE9YT1MgKi8K LSAgICB0dHR2dC5jX21pbiA9IDE7Ci0jZW5kaWYgLyogT1hPUyAqLwotI2VuZGlmIC8qIFZFT0Yg Ki8KLSNpZm5kZWYgVkVPTAkvKiBER1VYIHRlcm1pbyBoYXMgVkVPTCBhdCBlbnRyeSA1LCBzZWUg Y29tbWVudCBhYm92ZSAqLwotICAgIHR0dHZ0LmNfY2NbNV0gPSAwOwotI2Vsc2UKLSNpZm5kZWYg T1hPUwotI2lmZGVmIFZUSU1FCi0gICAgdHR0dnQuY19jY1tWVElNRV0gPSAwOwotI2VuZGlmIC8q IFZUSU1FICovCi0jZWxzZSAvKiBPWE9TICovCi0gICAgdHR0dnQuY190aW1lID0gMDsKLSNlbmRp ZiAvKiBPWE9TICovCi0jZW5kaWYgLyogVkVPTCAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICBpZiAo cDl0dHlwYXJpdHkoJ24nKSA8IDApCi0gICAgICByZXR1cm4gLTE7Ci0jZWxzZQotI2lmZGVmIEJT RDQ0T1JQT1NJWAotICAgIGVycm5vID0gMDsKLSNpZmRlZiBCRU9TT1JCRUJPWAotICAgIHR0dHZ0 LmNfY2NbVk1JTl0gPSAwOwkJLyogRFI3IGNhbiBvbmx5IHBvbGwuICovCi0jZW5kaWYgLyogQkVP U09SQkVCT1ggKi8KLQotICAgIHggPSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0dHR2dCk7 Ci0gICAgZGVidWcoRjEwMSwidHR2dCBCU0Q0NE9SUE9TSVggdGNzZXRhdHRyIiwiIix4KTsKLSAg ICBpZiAoeCA8IDApIHsKLQlkZWJ1ZyhGMTAxLCJ0dHZ0IEJTRDQ0T1JQT1NJWCB0Y3NldGF0dHIg ZXJybm8iLCIiLGVycm5vKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSNlbHNlIC8qIEFUVFNWICov Ci0gICAgeCA9IGlvY3RsKHR0eWZkLFRDU0VUQVcsJnR0dHZ0KTsKLSAgICBkZWJ1ZyhGMTAxLCJ0 dHZ0IEFUVFNWIGlvY3RsIFRDU0VUQVciLCIiLHgpOwotICAgIGlmICh4IDwgMCkgewkJCS8qIHNl dCBuZXcgbW9kZXMgLiAqLwotCWRlYnVnKEYxMDEsInR0dnQgQVRUU1YgaW9jdGwgVENTRVRBVyBl cnJubyIsIiIsZXJybm8pOwotCXJldHVybigtMSk7CQotICAgIH0KLSNlbmRpZiAvKiBCU0Q0NE9S UE9TSVggKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0KLSAgICB0 dHNwZWVkID0gc3BlZWQ7CQkJLyogRG9uZSwgcmVtZW1iZXIgaG93IHdlIHdlcmUgKi8KLSAgICB0 dGZsb3cgPSBmbG93OwkJCS8qIGNhbGxlZCwgc28gd2UgY2FuIGRlY2lkZSBob3cgdG8gKi8KLSAg ICB0dnRmbGcgPSAxOwkJCQkvKiByZXNwb25kIG5leHQgdGltZS4gKi8KLSAgICBkZWJ1ZyhGMTAw LCJ0dHZ0IG9rIiwiIiwwKTsKLSAgICByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDT0hFUkVOVAotI3Vu ZGVmIFNWT1JQT1NJWAotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLSNlbmRpZiAvKiBOT0xPQ0FM ICovCi19Ci0KLSNpZm5kZWYgTk9MT0NBTAotCi0vKiBTZXJpYWwgc3BlZWQgZGVwYXJ0bWVudCAu IC4gLiAqLwotCi0vKgotICBTQ08gT1NSNS4wLnggbWlnaHQgb3IgbWlnaHQgbm90IHN1cHBvcnQg aGlnaCBzcGVlZHMuICBTb21ldGltZXMgdGhleSBhcmUgbm90Ci0gIGRlZmluZWQgaW4gdGhlIGhl YWRlciBmaWxlcyBidXQgdGhleSBhcmUgc3VwcG9ydGVkIChlLmcuIHdoZW4gYnVpbGRpbmcgd2l0 aAotICBVREsgY29tcGlsZXIgcmF0aGVyIHRoYW4gL2Jpbi9jYyksIHNvbWV0aW1lcyB2aWNlIHZl cnNhLiAgRXZlbiB0aG91Z2ggNS4wLjQKLSAgd2FzIHRoZSBmaXJzdCByZWxlYXNlIHRoYXQgY2Ft ZSB3aXRoIGhpZ2ggc2VyaWFsIHNwZWVkcyBzdGFuZGFyZCwgcmVsZWFzZXMKLSAgYmFjayB0byA1 LjAuMCBjb3VsZCB1c2UgdGhlbSBpZiBjZXJ0YWluIHBhdGNoZXMgKG9yICJzdXBwbGVtZW50cyIp IHdlcmUKLSAgYXBwbGllZCB0byB0aGUgU0lPIGRyaXZlci4gIFBsdXMgYSBsb3Qgb2YgU0NPIGlu c3RhbGxhdGlvbnMgcnVuIHRoaXJkLXBhcnR5Ci0gIGRyaXZlcnMuCi0qLwotI2lmZGVmIENLX1ND T1Y1Ci0jaWZuZGVmIEIzODQwMAotI2RlZmluZQlCMzg0MDAJMDAwMDAxNwotI2VuZGlmIC8qIEIz ODQwMCAqLwotI2lmbmRlZiBCNTc2MDAKLSNkZWZpbmUJQjU3NjAwCTAwMDAwMjEKLSNlbmRpZiAv KiBCNTc2MDAgKi8KLSNpZm5kZWYgQjc2ODAwCi0jZGVmaW5lCUI3NjgwMAkwMDAwMDIyCi0jZW5k aWYgLyogQjc2ODAwICovCi0jaWZuZGVmIEIxMTUyMDAKLSNkZWZpbmUJQjExNTIwMAkwMDAwMDIz Ci0jZW5kaWYgLyogQjExNTIwMCAqLwotI2lmbmRlZiBCMjMwNDAwCi0jZGVmaW5lCUIyMzA0MDAJ MDAwMDAyNAotI2VuZGlmIC8qIEIyMzA0MDAgKi8KLSNpZm5kZWYgQjQ2MDgwMAotI2RlZmluZQlC NDYwODAwCTAwMDAwMjUKLSNlbmRpZiAvKiBCNDYwODAwICovCi0jaWZuZGVmIEI5MjE2MDAKLSNk ZWZpbmUJQjkyMTYwMAkwMDAwMDI2Ci0jZW5kaWYgLyogQjkyMTYwMCAqLwotI2VuZGlmIC8qIENL X1NDT1Y1ICovCi0vKgotICBQbGFuIDkncyBuYXRpdmUgc3BlZWQgc2V0dGluZyBpbnRlcmZhY2Ug bGV0cyB5b3Ugc2V0IGFueXRoaW5nIHlvdSBsaWtlLAotICBidXQgd2lsbCBmYWlsIGlmIHRoZSBo YXJkd2FyZSBkb2Vzbid0IGxpa2UgaXQsIHNvIHdlIGFsbG93IGFsbCB0aGUgY29tbW9uCi0gIHNw ZWVkcy4KLSovCi0jaWZkZWYgUGxhbjkKLSNpZm5kZWYgQjUwCi0jZGVmaW5lIEI1MCA1MAotI2Vu ZGlmIC8qIEI1MCAqLwotI2lmbmRlZiBCNzUKLSNkZWZpbmUgQjc1IDc1Ci0jZW5kaWYgLyogQjc1 ICovCi0jaWZuZGVmIEIxMTAKLSNkZWZpbmUgQjExMCAxMTAKLSNlbmRpZiAvKiBCMTEwICovCi0j aWZuZGVmIEIxMzQKLSNkZWZpbmUgQjEzNCAxMzQKLSNlbmRpZiAvKiBCMTM0ICovCi0jaWZuZGVm IEIyMDAKLSNkZWZpbmUgQjIwMCAyMDAKLSNlbmRpZiAvKiBCMjAwICovCi0jaWZuZGVmIEIzMDAK LSNkZWZpbmUgQjMwMCAzMDAKLSNlbmRpZiAvKiBCMzAwICovCi0jaWZuZGVmIEIxMjAwCi0jZGVm aW5lIEIxMjAwIDEyMDAKLSNlbmRpZiAvKiBCMTIwMCAqLwotI2lmbmRlZiBCMTgwMAotI2RlZmlu ZSBCMTgwMCAxODAwCi0jZW5kaWYgLyogQjE4MDAgKi8KLSNpZm5kZWYgQjI0MDAKLSNkZWZpbmUg QjI0MDAgMjQwMAotI2VuZGlmIC8qIEIyNDAwICovCi0jaWZuZGVmIEI0ODAwCi0jZGVmaW5lIEI0 ODAwIDQ4MDAKLSNlbmRpZiAvKiBCNDgwMCAqLwotI2lmbmRlZiBCOTYwMAotI2RlZmluZSBCOTYw MCA5NjAwCi0jZW5kaWYgLyogQjk2MDAgKi8KLSNpZm5kZWYgQjE0NDAwCi0jZGVmaW5lIEIxNDQw MCAxNDQwMAotI2VuZGlmIC8qIEIxNDQwMCAqLwotI2lmbmRlZiBCMTkyMDAKLSNkZWZpbmUgQjE5 MjAwIDE5MjAwCi0jZW5kaWYgLyogQjE5MjAwICovCi0jaWZuZGVmIEIyODgwMAotI2RlZmluZSBC Mjg4MDAgMjg4MDAKLSNlbmRpZiAvKiBCMjg4MDAgKi8KLSNpZm5kZWYgQjM4NDAwCi0jZGVmaW5l IEIzODQwMCAzODQwMAotI2VuZGlmIC8qIEIzODQwMCAqLwotI2lmbmRlZiBCNTc2MDAKLSNkZWZp bmUgQjU3NjAwIDU3NjAwCi0jZW5kaWYgLyogQjU3NjAwICovCi0jaWZuZGVmIEI3NjgwMAotI2Rl ZmluZSBCNzY4MDAgNzY4MDAKLSNlbmRpZiAvKiBCNzY4MDAgKi8KLSNpZm5kZWYgQjExNTIwMAot I2RlZmluZSBCMTE1MjAwIDExNTIwMAotI2VuZGlmIC8qIEIxMTUyMDAgKi8KLSNpZm5kZWYgQjIz MDQwMAotI2RlZmluZSBCMjMwNDAwIDIzMDQwMAotI2VuZGlmIC8qIEIyMzA0MDAgKi8KLSNpZm5k ZWYgQjQ2MDgwMAotI2RlZmluZSBCNDYwODAwIDQ2MDgwMAotI2VuZGlmIC8qIEI0NjA4MDAgKi8K LSNpZm5kZWYgQjkyMTYwMAotI2RlZmluZSBCOTIxNjAwIDkyMTYwMAotI2VuZGlmIC8qIEI5MjE2 MDAgKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotCi0vKiAgVCBUIFMgUyBQIEQgIC0tICBDaGVja3Mg YW5kIHNldHMgdHJhbnNtaXNzaW9uIHJhdGUuICAqLwotCi0vKiAgQ2FsbCB3aXRoIHNwZWVkIGlu IGNoYXJhY3RlcnMgKG5vdCBiaXRzISkgcGVyIHNlY29uZC4gKi8KLS8qICBSZXR1cm5zIC0xIG9u IGZhaWx1cmUsIDAgaWYgaXQgZGlkIG5vdGhpbmcsIDEgaWYgaXQgY2hhbmdlZCB0aGUgc3BlZWQu ICovCi0KLSNpZmRlZiBVU0VUQ1NFVFNQRUVECi0vKgotICBUaGUgdGNzZXRzcGVlZCgpIC8gdGNn ZXRzcGVlZCgpIGludGVyZmFjZSBsZXRzIHlvdSBwYXNzIGFueSBudW1iZXIgYXQgYWxsCi0gIHRv IGJlIHVzZWQgYXMgYSBzcGVlZCB0byBiZSBzZXQsIHJhdGhlciB0aGFuIGZvcmNpbmcgYSBjaG9p Y2UgZnJvbSBhCi0gIHByZWRlZmluZWQgbGlzdC4gIEl0IHNlZW1zIHRvIGJlIHBlY3VsaWFyIHRv IFVuaXhXYXJlIDcuCi0KLSAgVGhlc2UgYXJlIHRoZSBmdW5jdGlvbiBjb2RlcyB0byBiZSBwYXNz ZWQgdG8gdGNbZ3NdZXRzcGVlZCgpLAotICBidXQgZm9yIHNvbWUgcmVhc29uIHRoZXkgZG9uJ3Qg c2VlbSB0byBiZSBwaWNrZWQgdXAgZnJvbSB0ZXJtaW9zLmguCi0qLwotI2lmbmRlZiBUQ1NfQUxM Ci0jZGVmaW5lIFRDU19BTEwgMAotI2VuZGlmIC8qIFRDU19BTEwgKi8KLSNpZm5kZWYgVENTX0lO Ci0jZGVmaW5lIFRDU19JTiAxCi0jZW5kaWYgLyogVENTX0lOICovCi0jaWZuZGVmIFRDU19PVVQK LSNkZWZpbmUgVENTX09VVCAyCi0jZW5kaWYgLyogVENTX09VVCAqLwotI2VuZGlmIC8qIFVTRVRD U0VUU1BFRUQgKi8KLQotaW50Ci10dHNzcGQoY3BzKSBpbnQgY3BzOyB7Ci0gICAgaW50IHg7Ci0j aWZkZWYgUE9TSVgKLS8qIFdhdGNoIG91dCwgc3BlZWRfdCBzaG91bGQgYmUgdW5zaWduZWQsIHNv IGRvbid0IGNvbXBhcmUgd2l0aCAtMSwgZXRjLi4uICovCi0gICAgc3BlZWRfdAotI2Vsc2UKLSAg ICBpbnQKLSNlbmRpZiAvKiBQT1NJWCAqLwotICAgICAgcywgczI7Ci0gICAgaW50IG9rID0gMTsJ CQkJLyogU3BlZWQgY2hlY2sgcmVzdWx0LCBhc3N1bWUgb2sgKi8KLQotI2lmZGVmIE9MSU5VWEhJ U1BFRUQKLSAgICB1bnNpZ25lZCBpbnQgc3BkX2ZsYWdzID0gMDsKLSAgICBzdHJ1Y3Qgc2VyaWFs X3N0cnVjdCBzZXJpbmZvOwotI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KLQotICAgIGRlYnVn KEYxMDEsInR0c3NwZCBjcHMiLCIiLGNwcyk7Ci0gICAgZGVidWcoRjEwMSwidHRzc3BkIHR0eWZk IiwiIix0dHlmZCk7Ci0gICAgZGVidWcoRjEwMSwidHRzc3BkIHhsb2NhbCIsIiIseGxvY2FsKTsK LQotICAgIGlmICh0dHlmZCA8IDAgfHwgeGxvY2FsID09IDApCS8qIERvbid0IHNldCBzcGVlZCBv biBjb25zb2xlICovCi0gICAgICByZXR1cm4oMCk7Ci0KLSNpZmRlZglORVRDT05OCi0gICAgaWYg KG5ldGNvbm4pIHsKLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgIGlmIChpc3RuY29tcG9ydCgp KQotCSAgcmV0dXJuKHRuY19zZXRfYmF1ZChjcHMgKiAxMCkpOwotICAgICAgICBlbHNlCi0jZW5k aWYgLyogVE5fQ09NUE9SVCAqLwotCXJldHVybigwKTsKLSAgfQotI2VuZGlmCS8qIE5FVENPTk4g Ki8KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7Ci0jZW5kaWYgLyog TkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7Ci0jZW5k aWYgLyogTkVUUFRZICovCi0KLSAgICBpZiAoY3BzIDwgMCkgcmV0dXJuKC0xKTsKLSAgICBzID0g czIgPSAwOwkJCQkvKiBOQjogcyBhbmQgczIgbWlnaHQgYmUgdW5zaWduZWQgKi8KLQotI2lmZGVm IFVTRVRDU0VUU1BFRUQKLQotICAgIHMgPSBjcHMgKiAxMEw7Ci0KLSAgICB4ID0gdGNnZXRhdHRy KHR0eWZkLCZ0dGN1cik7CS8qIEdldCBjdXJyZW50IHNwZWVkICovCi0gICAgZGVidWcoRjEwMSwi dHRzc3BkIHRjZ2V0YXR0ciIsIiIseCk7Ci0gICAgaWYgKHggPCAwKQotICAgICAgcmV0dXJuKC0x KTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgVENTRVRTUEVFRCBzcGVlZCIsIiIscyk7Ci0KLSAg ICBlcnJubyA9IDA7Ci0gICAgaWYgKHMgPT0gODg4MEwpIHsJCQkvKiA3NS8xMjAwIHNwbGl0IHNw ZWVkIHJlcXVlc3RlZCAqLwotCXRjc2V0c3BlZWQoVENTX0lOLCAmdHRjdXIsIDEyMDBMKTsKLQl0 Y3NldHNwZWVkKFRDU19PVVQsICZ0dGN1ciwgNzVMKTsKLSAgICB9IGVsc2UKLSAgICAgIHRjc2V0 c3BlZWQoVENTX0FMTCwgJnR0Y3VyLCBzKTsJLyogUHV0IG5ldyBzcGVlZCBpbiBzdHJ1Y3RzICov Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZXJybm8gJiBkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAxLCJ0 dHNzcGQgVENTRVRTUEVFRCBlcnJubyIsIiIsZXJybm8pOwotICAgIH0KLSNlbmRpZiAvKiBERUJV RyAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgIHRjc2V0c3BlZWQoVENTX0FMTCwgJnR0cmF3LCBz KTsKLSAgICB0Y3NldHNwZWVkKFRDU19BTEwsICZ0dHR2dCwgcyk7Ci0gICAgdGNzZXRzcGVlZChU Q1NfQUxMLCAmdHRvbGQsIHMpOwotI2Vsc2UKLSAgICBpZiAocyA9PSA4ODgwTCkgewkJCS8qIDc1 LzEyMDAgc3BsaXQgc3BlZWQgcmVxdWVzdGVkICovCi0JdGNzZXRzcGVlZChUQ1NfSU4sICZ0dHJh dywgMTIwMEwpOwotCXRjc2V0c3BlZWQoVENTX09VVCwgJnR0cmF3LCA3NUwpOwotCXRjc2V0c3Bl ZWQoVENTX0lOLCAmdHR0dnQsIDEyMDBMKTsKLQl0Y3NldHNwZWVkKFRDU19PVVQsICZ0dHR2dCwg NzVMKTsKLQl0Y3NldHNwZWVkKFRDU19JTiwgJnR0b2xkLCAxMjAwTCk7Ci0JdGNzZXRzcGVlZChU Q1NfT1VULCAmdHRvbGQsIDc1TCk7Ci0gICAgfSBlbHNlIHsKLQl0Y3NldHNwZWVkKFRDU19BTEws ICZ0dHJhdywgcyk7Ci0JdGNzZXRzcGVlZChUQ1NfQUxMLCAmdHR0dnQsIHMpOwotCXRjc2V0c3Bl ZWQoVENTX0FMTCwgJnR0b2xkLCBzKTsKLSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0g ICAgeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsgLyogU2V0IHRoZSBzcGVl ZCAqLwotICAgIGRlYnVnKEYxMDEsInR0c3NwZCB0Y3NldGF0dHIiLCIiLHgpOwotICAgIGlmICh4 IDwgMCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSNlbHNlICAvKiBOb3QgVVNFVENTRVRTUEVFRCAq LwotCi0gICAgLyogRmlyc3QgY2hlY2sgdGhhdCB0aGUgZ2l2ZW4gc3BlZWQgaXMgdmFsaWQuICov Ci0KLSAgICBzd2l0Y2ggKGNwcykgewotI2lmbmRlZiBNSU5JWAotICAgICAgY2FzZSAwOiAgIHMg PSBCMDsgICAgYnJlYWs7Ci0gICAgICBjYXNlIDU6ICAgcyA9IEI1MDsgICBicmVhazsKLSAgICAg IGNhc2UgNzogICBzID0gQjc1OyAgIGJyZWFrOwotI2VuZGlmIC8qIE1JTklYICovCi0gICAgICBj YXNlIDExOiAgcyA9IEIxMTA7ICBicmVhazsKLSNpZm5kZWYgTUlOSVgKLSAgICAgIGNhc2UgMTM6 ICBzID0gQjEzNDsgIGJyZWFrOwotICAgICAgY2FzZSAxNTogIHMgPSBCMTUwOyAgYnJlYWs7Ci0g ICAgICBjYXNlIDIwOiAgcyA9IEIyMDA7ICBicmVhazsKLSNlbmRpZiAvKiBNSU5JWCAqLwotICAg ICAgY2FzZSAzMDogIHMgPSBCMzAwOyAgYnJlYWs7Ci0jaWZuZGVmIE1JTklYCi0gICAgICBjYXNl IDYwOiAgcyA9IEI2MDA7ICBicmVhazsKLSNlbmRpZiAvKiBNSU5JWCAqLwotICAgICAgY2FzZSAx MjA6IHMgPSBCMTIwMDsgYnJlYWs7Ci0jaWZuZGVmIE1JTklYCi0gICAgICBjYXNlIDE4MDogcyA9 IEIxODAwOyBicmVhazsKLSNlbmRpZiAvKiBNSU5JWCAqLwotICAgICAgY2FzZSAyNDA6IHMgPSBC MjQwMDsgYnJlYWs7Ci0gICAgICBjYXNlIDQ4MDogcyA9IEI0ODAwOyBicmVhazsKLSNpZm5kZWYg TUlOSVgKLSAgICAgIGNhc2UgODg4OiBzID0gQjc1OyBzMiA9IEIxMjAwOyBicmVhazsgLyogODg4 ID0gNzUvMTIwMCBzcGxpdCBzcGVlZCAqLwotI2VuZGlmIC8qIE1JTklYICovCi0jaWZkZWYgQjcy MDAKLSAgICAgIGNhc2UgNzIwOiBzID0gQjcyMDA7IGJyZWFrOwotI2VuZGlmIC8qIEI3MjAwICov Ci0gICAgICBjYXNlIDk2MDogcyA9IEI5NjAwOyBicmVhazsKLSNpZmRlZiBCMTQ0MDAKLSAgICAg IGNhc2UgMTQ0MDogcyA9IEIxNDQwMDsgYnJlYWs7Ci0jZW5kaWYgLyogQjE0NDAwICovCi0jaWZk ZWYgQjE5MjAwCi0gICAgICBjYXNlIDE5MjA6IHMgPSBCMTkyMDA7IGJyZWFrOwotI2Vsc2UKLSNp ZmRlZiBFWFRBCi0gICAgICBjYXNlIDE5MjA6IHMgPSBFWFRBOyBicmVhazsKLSNlbmRpZiAvKiBF WFRBICovCi0jZW5kaWYgLyogQjE5MjAwICovCi0jaWZkZWYgQjI4ODAwCi0gICAgICBjYXNlIDI4 ODA6IHMgPSBCMjg4MDA7IGJyZWFrOwotI2VuZGlmIC8qIEIyODgwMCAqLwotI2lmZGVmIEIzODQw MAotICAgICAgY2FzZSAzODQwOiBzID0gQjM4NDAwOwotI2lmZGVmIE9MSU5VWEhJU1BFRUQKLSAg ICAgICAgc3BkX2ZsYWdzID0gfkFTWU5DX1NQRF9NQVNLOwkvKiBOb256ZXJvLCBidXQgemVybyBm bGFncyAqLwotI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KLQlicmVhazsKLSNlbHNlIC8qIEIz ODQwMCBub3QgZGVmaW5lZC4uLiAqLwotI2lmZGVmIEVYVEIKLSAgICAgIGNhc2UgMzg0MDogcyA9 IEVYVEI7IGJyZWFrOwotI2VuZGlmIC8qIEVYVEIgKi8KLSNlbmRpZiAvKiBCMzg0MDAgKi8KLQot I2lmZGVmIEhQVVgKLSNpZmRlZiBfQjU3NjAwCi0gICAgICBjYXNlIDU3NjA6IHMgPSBfQjU3NjAw OyBicmVhazsKLSNlbmRpZiAvKiBfQjU3NjAwICovCi0jaWZkZWYgX0IxMTUyMDAKLSAgICAgIGNh c2UgMTE1MjA6IHMgPSBfQjExNTIwMDsgYnJlYWs7Ci0jZW5kaWYgLyogX0IxMTUyMDAgKi8KLSNl bHNlCi0jaWZkZWYgT0xJTlVYSElTUEVFRAotLyoKLSAgVGhpcyBiaXQgZnJvbSA8Y2FybG9Ac2cu dG4udHVkZWxmdC5ubD46Ci0gICJPbmx5IG5vdGUgdG8gbWFrZSBpcyBtYXliZSB0aGlzOiBXaGVu IHRoZSBBU1lOQ19TUERfQ1VTVCBmbGFncyBhcmUgc2V0IHRoZW4KLSAgc2V0dGluZyB0aGUgc3Bl ZWQgdG8gMzg0MDAgd2lsbCBzZXQgdGhlIGN1c3RvbSBzcGVlZCAoYW5kIHR0Z3NwZCByZXR1cm5z Ci0gIDM4NDAwKSwgYnV0IHNwZWVkcyA1NzYwMCBhbmQgMTE1MjAwIHdvbid0IHdvcmsgYW55IG1v cmUgYmVjYXVzZSBJIGRpZG4ndAotICB3YW50IHRvIG1lc3MgdXAgdGhlIHNwZWVkIGZsYWdzIHdo ZW4gc29tZW9uZSBpcyBkb2luZyBzb3BoaXN0aWNhdGVkIHN0dWZmCi0gIGxpa2UgY3VzdG9tIHNw ZWVkcy4uLiIKLSovCi0gICAgICBjYXNlIDU3NjA6IHMgPSBCMzg0MDA7IHNwZF9mbGFncyA9IEFT WU5DX1NQRF9ISTsgYnJlYWs7Ci0gICAgICBjYXNlIDExNTIwOiBzID0gQjM4NDAwOyBzcGRfZmxh Z3MgPSBBU1lOQ19TUERfVkhJOyBicmVhazsKLSNlbHNlCi0jaWZkZWYgQjU3NjAwCi0gICAgICBj YXNlIDU3NjA6IHMgPSBCNTc2MDA7IGJyZWFrOwotI2VuZGlmIC8qIEI1NzYwMCAqLwotI2lmZGVm IEI3NjgwMAotICAgICAgY2FzZSA3NjgwOiBzID0gQjc2ODAwOyBicmVhazsKLSNlbmRpZiAvKiBC NzY4MDAgKi8KLSNpZmRlZiBCMTE1MjAwCi0gICAgICBjYXNlIDExNTIwOiBzID0gQjExNTIwMDsg YnJlYWs7Ci0jZW5kaWYgLyogQjExNTIwMCAqLwotI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8K LSNpZmRlZiBCMTUzNjAwCi0gICAgICBjYXNlIDE1MzYwOiBzID0gQjE1MzYwMDsgYnJlYWs7Ci0j ZW5kaWYgLyogQjE1MzYwMCAqLwotI2lmZGVmIEIyMzA0MDAKLSAgICAgIGNhc2UgMjMwNDA6IHMg PSBCMjMwNDAwOyBicmVhazsKLSNlbmRpZiAvKiBCMjMwNDAwICovCi0jaWZkZWYgQjMwNzIwMAot ICAgICAgY2FzZSAzMDcyMDogcyA9IEIzMDcyMDA7IGJyZWFrOwotI2VuZGlmIC8qIEIzMDcyMDAg Ki8KLSNpZmRlZiBCNDYwODAwCi0gICAgICBjYXNlIDQ2MDgwOiBzID0gQjQ2MDgwMDsgYnJlYWs7 Ci0jZW5kaWYgLyogNDYwODAwICovCi0jaWZkZWYgQjkyMTYwMAotICAgICAgY2FzZSA5MjE2MDog cyA9IEI5MjE2MDA7IGJyZWFrOwotI2VuZGlmIC8qIEI5MjE2MDAgKi8KLSNlbmRpZiAvKiBIUFVY ICovCi0gICAgICBkZWZhdWx0OgotCW9rID0gMDsJCQkJLyogR29vZCBzcGVlZCBub3QgZm91bmQs IHNvIG5vdCBvayAqLwotCWJyZWFrOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgb2si LCIiLG9rKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgcyIsIiIscyk7Ci0KLSAgICBpZiAoIW9r KSB7Ci0JZGVidWcoRjEwMCwidHRzc3BkIGZhaWxzIiwiIiwwKTsKLQlyZXR1cm4oLTEpOwotICAg IH0gZWxzZSB7Ci0JaWYgKCFzMikgczIgPSBzOwkJLyogU2V0IGlucHV0IHNwZWVkICovCi0jaWZk ZWYgUGxhbjkKLQlpZiAocDl0dHNzcGQoY3BzKSA8IDApCi0JICByZXR1cm4oLTEpOwotI2Vsc2UK LSNpZmRlZiBCU0Q0NE9SUE9TSVgKLQl4ID0gdGNnZXRhdHRyKHR0eWZkLCZ0dGN1cik7CS8qIEdl dCBjdXJyZW50IHNwZWVkICovCi0JZGVidWcoRjEwMSwidHRzc3BkIHRjZ2V0YXR0ciIsIiIseCk7 Ci0JaWYgKHggPCAwKQotCSAgcmV0dXJuKC0xKTsKLSNpZmRlZiBPTElOVVhISVNQRUVECi0JZGVi dWcoRjEwMSwidHRzc3BkIHNwZF9mbGFncyIsIiIsc3BkX2ZsYWdzKTsKLQlpZiAoc3BkX2ZsYWdz ICYmIHNwZF9mbGFncyAhPSBBU1lOQ19TUERfQ1VTVCkgewotCSAgICBpZiAoaW9jdGwodHR5ZmQs IFRJT0NHU0VSSUFMLCAmc2VyaW5mbykgPCAwKSB7Ci0JCWRlYnVnKEYxMDAsInR0c3NwZDogVElP Q0dTRVJJQUwgZmFpbGVkIiwiIiwwKTsKLQkJcmV0dXJuKC0xKTsKLQkgICAgfSBlbHNlIGRlYnVn KEYxMDAsInR0c3NwZDogVElPQ0dTRVJJQUwgb2siLCIiLDApOwotCSAgICBzZXJpbmZvLmZsYWdz ICY9IH5BU1lOQ19TUERfTUFTSzsKLQkgICAgc2VyaW5mby5mbGFncyB8PSAoc3BkX2ZsYWdzICYg QVNZTkNfU1BEX01BU0spOwotCSAgICBpZiAoaW9jdGwodHR5ZmQsIFRJT0NTU0VSSUFMLCAmc2Vy aW5mbykgPCAwKQotCSAgICAgIHJldHVybigtMSk7Ci0JfQotI2VuZGlmIC8qIE9MSU5VWEhJU1BF RUQgKi8KLQljZnNldG9zcGVlZCgmdHRjdXIscyk7Ci0JY2ZzZXRpc3BlZWQoJnR0Y3VyLHMyKTsK LQljZnNldG9zcGVlZCgmdHRyYXcscyk7Ci0JY2ZzZXRpc3BlZWQoJnR0cmF3LHMyKTsKLQljZnNl dG9zcGVlZCgmdHR0dnQscyk7Ci0JY2ZzZXRpc3BlZWQoJnR0dHZ0LHMyKTsKLQljZnNldG9zcGVl ZCgmdHRvbGQscyk7Ci0JY2ZzZXRpc3BlZWQoJnR0b2xkLHMyKTsKLQl4ID0gdGNzZXRhdHRyKHR0 eWZkLFRDU0FEUkFJTiwmdHRjdXIpOwotCWRlYnVnKEYxMDEsInR0c3NwZCB0Y3NldGF0dHIiLCIi LHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLSNlbHNlCi0jaWZkZWYgQVRUU1YKLQlpZiAo Y3BzID09IDg4OCkgcmV0dXJuKC0xKTsJLyogTm8gc3BsaXQgc3BlZWRzLCBzb3JyeS4gKi8KLQl4 ID0gaW9jdGwodHR5ZmQsVENHRVRBLCZ0dGN1cik7Ci0JZGVidWcoRjEwMSwidHRzc3BkIFRDR0VU QSBpb2N0bCIsIiIseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCXR0Y3VyLmNfY2ZsYWcg Jj0gfkNCQVVEOwotCXR0Y3VyLmNfY2ZsYWcgfD0gczsKLQl0dHR2dC5jX2NmbGFnICY9IH5DQkFV RDsKLQl0dHR2dC5jX2NmbGFnIHw9IHM7Ci0JdHRyYXcuY19jZmxhZyAmPSB+Q0JBVUQ7Ci0JdHRy YXcuY19jZmxhZyB8PSBzOwotCXR0b2xkLmNfY2ZsYWcgJj0gfkNCQVVEOwotCXR0b2xkLmNfY2Zs YWcgfD0gczsKLQl4ID0gaW9jdGwodHR5ZmQsVENTRVRBVywmdHRjdXIpOwotCWRlYnVnKEYxMDEs InR0c3NwZCBUQ1NFVEFXIGlvY3RsIiwiIix4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0j ZWxzZQotI2lmZGVmIEJFTExWMTAKLQl4ID0gaW9jdGwodHR5ZmQsVElPQ0dERVYsJnRkY3VyKTsK LQlkZWJ1ZyhGMTAxLCJ0dHNzcGQgVElPQ0dERVYgaW9jdGwiLCIiLHgpOwotCWlmICh4IDwgMCkg cmV0dXJuKC0xKTsKLQl0ZGN1ci5pc3BlZWQgPSBzMjsKLQl0ZGN1ci5vc3BlZWQgPSBzOwotCWVy cm5vID0gMDsKLQlvayA9IGlvY3RsKHR0eWZkLFRJT0NTREVWLCZ0ZGN1cik7Ci0JZGVidWcoRjEw MSwidHRzc3BkIEJFTExWMTAgaW9jdGwiLCIiLG9rKTsKLQlpZiAob2sgPCAwKSB7Ci0JICAgIHBl cnJvcih0dG5tc3YpOwotCSAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgQkVMTFYxMCBlcnJubyIsIiIs b2spOwotCSAgICByZXR1cm4oLTEpOwotCX0KLSNlbHNlCi0JeCA9IGd0dHkodHR5ZmQsJnR0Y3Vy KTsKLQlkZWJ1ZyhGMTAxLCJ0dHNzcGQgZ3R0eSIsIiIseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4o LTEpOwotCXR0Y3VyLnNnX29zcGVlZCA9IHM7IHR0Y3VyLnNnX2lzcGVlZCA9IHMyOwotCXR0dHZ0 LnNnX29zcGVlZCA9IHM7IHR0dHZ0LnNnX2lzcGVlZCA9IHMyOwotCXR0cmF3LnNnX29zcGVlZCA9 IHM7IHR0cmF3LnNnX2lzcGVlZCA9IHMyOwotCXR0b2xkLnNnX29zcGVlZCA9IHM7IHR0b2xkLnNn X2lzcGVlZCA9IHMyOwotCXggPSBzdHR5KHR0eWZkLCZ0dGN1cik7Ci0JZGVidWcoRjEwMSwidHRz c3BkIHN0dHkiLCIiLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBCRUxM VjEwICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSNl bmRpZiAvKiBQbGFuOSAqLwotICAgIH0KLSAgICByZXR1cm4oMSk7CQkJCS8qIFJldHVybiAxID0g c3VjY2Vzcy4gKi8KLSNlbmRpZiAvKiBVU0VUQ1NFVFNQRUVEICovCi19Ci0KLSNlbmRpZiAvKiBO T0xPQ0FMICovCi0KLS8qIEMgTyBOIEcgUyBQIEQgIC0gIEdldCBzcGVlZCBvZiBjb25zb2xlIHRl cm1pbmFsICAqLwotCi1sb25nCi1jb25nc3BkKCkgewotLyoKLSAgVGhpcyBpcyBhIGRpc2d1c3Rp bmcgaGFjay4gIFRoZSByaWdodCB3YXkgdG8gZG8gdGhpcyB3b3VsZCBiZSB0byBwYXNzIGFuCi0g IGFyZ3VtZW50IHRvIHR0Z3NwZCgpLCBidXQgdGhlbiB3ZSdkIG5lZWQgdG8gY2hhbmdlIHRoZSBL ZXJtaXQgQVBJIGFuZAotICBhbGwgb2YgdGhlIGNrP3Rpby5jIG1vZHVsZXMuICAoQ3VycmVudGx5 IHVzZWQgb25seSBmb3IgcmxvZ2luLikKLSovCi0gICAgaW50IHQxOwotICAgIGxvbmcgc3BkOwot I2lmZGVmIE5FVENPTk4KLSAgICBpbnQgdDIgPSBuZXRjb25uOwotICAgIG5ldGNvbm4gPSAwOwot I2VuZGlmIC8qIE5FVENPTk4gKi8KLSAgICB0MSA9IHR0eWZkOwotICAgIHR0eWZkID0gLTE7Ci0g ICAgc3BkID0gdHRnc3BkKCk7Ci0gICAgZGVidWcoRjEwMSwiY29uZ3NwZCIsIiIsc3BkKTsKLSNp ZmRlZiBORVRDT05OCi0gICAgbmV0Y29ubiA9IHQyOwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSAg ICB0dHlmZCA9IHQxOwotICAgIHJldHVybihzcGQpOwotfQotCi0vKiAgVCBUIFMgUCBEIEwgSSBT IFQgIC0tIEdldCBsaXN0IG9mIHNlcmlhbCBzcGVlZHMgYWxsb3dlZCBvbiB0aGlzIHBsYXRmb3Jt ICovCi0KLSNkZWZpbmUgTlNQRExJU1QgNjQKLXN0YXRpYyBsb25nIHNwZGxpc3RbTlNQRExJU1Rd OwotLyoKLSAgQXMgd3JpdHRlbiwgdGhpcyBwaWNrcyB1cCB0aGUgc3BlZWRzIGtub3duIGF0IGNv bXBpbGUgdGltZSwgYW5kIHRodXMKLSAgYXBwbHkgdG8gdGhlIHN5c3RlbSB3aGVyZSBDLUtlcm1p dCB3YXMgYnVpbHQsIHJhdGhlciB0aGFuIHRvIHRoZSBvbmUgd2hlcmUKLSAgaXQgaXMgcnVubmlu Zy4gIFN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCBhcmUgYWx3YXlzIHdlbGNvbWUuCi0qLwot bG9uZyAqCi10dHNwZGxpc3QoKSB7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IE5T UERMSVNUOyBpKyspCS8qIEluaXRpYWxpemUgdGhlIGxpc3QgKi8KLSAgICAgIHNwZGxpc3RbaV0g PSAtMUw7Ci0gICAgaSA9IDE7Ci0KLSNpZmRlZiBVU0VUQ1NFVFNQRUVECQkJLyogTm8gd2F5IHRv IGZpbmQgb3V0IHdoYXQncyBsZWdhbCAqLwotICAgIGRlYnVnKEYxMDAsInR0c3BkbGlzdCBVU0VU Q1NFVFNQRUVEIiwiIiwwKTsKLSAgICBzcGRsaXN0W2krK10gPSA1MEw7Ci0jaWZuZGVmIFVXNwot ICAgIHNwZGxpc3RbaSsrXSA9IDc1TDsKLSNlbmRpZiAvKiBVVzcgKi8KLSAgICBzcGRsaXN0W2kr K10gPSAxMTBMOwotI2lmbmRlZiBVVzcKLSAgICBzcGRsaXN0W2krK10gPSAxMzRMOwotI2VuZGlm IC8qIFVXNyAqLwotICAgIHNwZGxpc3RbaSsrXSA9IDE1MEw7Ci0gICAgc3BkbGlzdFtpKytdID0g MjAwTDsKLSAgICBzcGRsaXN0W2krK10gPSAzMDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDYwMEw7 Ci0gICAgc3BkbGlzdFtpKytdID0gMTIwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0gMTgwMEw7Ci0g ICAgc3BkbGlzdFtpKytdID0gMjQwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0gNDgwMEw7Ci0gICAg c3BkbGlzdFtpKytdID0gODg4MEw7Ci0gICAgc3BkbGlzdFtpKytdID0gOTYwMEw7Ci0gICAgc3Bk bGlzdFtpKytdID0gMTQ0MDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDE5MjAwTDsKLSAgICBzcGRs aXN0W2krK10gPSAyODgwMEw7Ci0jaWZuZGVmIFVXNwotICAgIHNwZGxpc3RbaSsrXSA9IDMzNjAw TDsKLSNlbmRpZiAvKiBVVzcgKi8KLSAgICBzcGRsaXN0W2krK10gPSAzODQwMEw7Ci0gICAgc3Bk bGlzdFtpKytdID0gNTc2MDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDc2ODAwTDsKLSAgICBzcGRs aXN0W2krK10gPSAxMTUyMDBMOwotI2lmbmRlZiBVVzcKLSAgICBzcGRsaXN0W2krK10gPSAxNTM2 MDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDIzMDQwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0gMzA3 MjAwTDsKLSAgICBzcGRsaXN0W2krK10gPSA0NjA4MDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDky MTYwMEw7Ci0jZW5kaWYgLyogVVc3ICovCi0KLSNlbHNlICAvKiBVU0VUQ1NFVFNQRUVEICovCi0K LSAgICBkZWJ1ZyhGMTAwLCJ0dHNwZGxpc3Qgbm8gVVNFVENTRVRTUEVFRCIsIiIsMCk7Ci0KLSNp ZmRlZiBCNTAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjUwIiwiIixCNTApOwotICAgIHNw ZGxpc3RbaSsrXSA9IDUwTDsKLSNlbmRpZiAvKiBCNTAgKi8KLSNpZmRlZiBCNzUKLSAgICBkZWJ1 ZyhGMTAxLCJ0dHNwZGxpc3QgQjc1IiwiIixCNzUpOwotICAgIHNwZGxpc3RbaSsrXSA9IDc1TDsK LSNlbmRpZiAvKiBCNzUgKi8KLSNpZmRlZiBCMTEwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0 IEIxMTAiLCIiLEIxMTApOwotICAgIHNwZGxpc3RbaSsrXSA9IDExMEw7Ci0jZW5kaWYgLyogQjEx MCAqLwotI2lmZGVmIEIxMzQKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjEzNCIsIiIsQjEz NCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMTM0TDsKLSNlbmRpZiAvKiBCMTM0ICovCi0jaWZkZWYg QjE1MAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTUwIiwiIixCMTUwKTsKLSAgICBzcGRs aXN0W2krK10gPSAxNTBMOwotI2VuZGlmIC8qIEIxNTAgKi8KLSNpZmRlZiBCMjAwCi0gICAgZGVi dWcoRjEwMSwidHRzcGRsaXN0IEIyMDAiLCIiLEIyMDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDIw MEw7Ci0jZW5kaWYgLyogQjIwMCAqLwotI2lmZGVmIEIzMDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNw ZGxpc3QgQjMwMCIsIiIsQjMwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMzAwTDsKLSNlbmRpZiAv KiBCMzAwICovCi0jaWZkZWYgQjYwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCNjAwIiwi IixCNjAwKTsKLSAgICBzcGRsaXN0W2krK10gPSA2MDBMOwotI2VuZGlmIC8qIEI2MDAgKi8KLSNp ZmRlZiBCMTIwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTIwMCIsIiIsQjEyMDApOwot ICAgIHNwZGxpc3RbaSsrXSA9IDEyMDBMOwotI2VuZGlmIC8qIEIxMjAwICovCi0jaWZkZWYgQjE4 MDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjE4MDAiLCIiLEIxODAwKTsKLSAgICBzcGRs aXN0W2krK10gPSAxODAwTDsKLSNlbmRpZiAvKiBCMTgwMCAqLwotI2lmZGVmIEIyNDAwCi0gICAg ZGVidWcoRjEwMSwidHRzcGRsaXN0IEIyNDAwIiwiIixCMjQwMCk7Ci0gICAgc3BkbGlzdFtpKytd ID0gMjQwMEw7Ci0jZW5kaWYgLyogQjI0MDAgKi8KLSNpZmRlZiBCNDgwMAotICAgIGRlYnVnKEYx MDEsInR0c3BkbGlzdCBCNDgwMCIsIiIsQjQ4MDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDQ4MDBM OwotI2VuZGlmIC8qIEI0ODAwICovCi0jaWZkZWYgQjk2MDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNw ZGxpc3QgQjk2MDAiLCIiLEI5NjAwKTsKLSAgICBzcGRsaXN0W2krK10gPSA5NjAwTDsKLSNlbmRp ZiAvKiBCOTYwMCAqLwotI2lmZGVmIEIxNDQwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBC MTQ0MDAiLCIiLEIxNDQwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMTQ0MDBMOwotI2VuZGlmIC8q IEIxNDQwMCAqLwotI2lmZGVmIEIxOTIwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTky MDAiLCIiLEIxOTIwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMTkyMDBMOwotI2Vsc2UKLSNpZmRl ZiBFWFRBCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEVYVEEiLCIiLEVYVEEpOwotICAgIHNw ZGxpc3RbaSsrXSA9IDE5MjAwTDsKLSNlbmRpZiAvKiBFWFRBICovCi0jZW5kaWYgLyogQjE5MjAw ICovCi0jaWZkZWYgQjI4ODAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIyODgwMCIsIiIs QjI4ODAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAyODgwMEw7Ci0jZW5kaWYgLyogQjI4ODAwICov Ci0jaWZkZWYgQjMzNjAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIzMzYwMCIsIiIsQjMz NjAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAzMzYwMEw7Ci0jZW5kaWYgLyogQjMzNjAwICovCi0j aWZkZWYgQjM4NDAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIzODQwMCIsIiIsQjM4NDAw KTsKLSAgICBzcGRsaXN0W2krK10gPSAzODQwMEw7Ci0jZWxzZQotI2lmZGVmIEVYVEIKLSAgICBk ZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgRVhUQiIsIiIsRVhUQik7Ci0gICAgc3BkbGlzdFtpKytdID0g Mzg0MDBMOwotI2VuZGlmIC8qIEVYVEIgKi8KLSNlbmRpZiAvKiBCMzg0MDAgKi8KLSNpZmRlZiBf QjU3NjAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IF9CNTc2MDAiLCIiLF9CNTc2MDApOwot ICAgIHNwZGxpc3RbaSsrXSA9IDU3NjAwTDsKLSNlbHNlCi0jaWZkZWYgQjU3NjAwCi0gICAgZGVi dWcoRjEwMSwidHRzcGRsaXN0IEI1NzYwMCIsIiIsQjU3NjAwKTsKLSAgICBzcGRsaXN0W2krK10g PSA1NzYwMEw7Ci0jZW5kaWYgLyogQjU3NjAwICovCi0jZW5kaWYgLyogX0I1NzYwMCAqLwotI2lm ZGVmIEI3NjgwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCNzY4MDAiLCIiLEI3NjgwMCk7 Ci0gICAgc3BkbGlzdFtpKytdID0gNzY4MDBMOwotI2VuZGlmIC8qIEI3NjgwMCAqLwotI2lmZGVm IF9CMTE1MjAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IF9CMTE1MjAwIiwiIixfQjExNTIw MCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMTE1MjAwTDsKLSNlbHNlCi0jaWZkZWYgQjExNTIwMAot ICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTE1MjAwIiwiIixCMTE1MjAwKTsKLSAgICBzcGRs aXN0W2krK10gPSAxMTUyMDBMOwotI2VuZGlmIC8qIEIxMTUyMDAgKi8KLSNlbmRpZiAvKiBfQjEx NTIwMCAqLwotI2lmZGVmIEIxNTM2MDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjE1MzYw MCIsIiIsQjE1MzYwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMTUzNjAwTDsKLSNlbmRpZiAvKiBC MTUzNjAwICovCi0jaWZkZWYgQjIzMDQwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMjMw NDAwIiwiIixCMjMwNDAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAyMzA0MDBMOwotI2VuZGlmIC8q IEIyMzA0MDAgKi8KLSNpZmRlZiBCMzA3MjAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIz MDcyMDAiLCIiLEIzMDcyMDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDMwNzIwMEw7Ci0jZW5kaWYg LyogQjMwNzIwMCAqLwotI2lmZGVmIEI0NjA4MDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3Qg QjQ2MDgwMCIsIiIsQjQ2MDgwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gNDYwODAwTDsKLSNlbmRp ZiAvKiBCNDYwODAwICovCi0jaWZkZWYgQjkyMTYwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlz dCBCOTIxNjAwIiwiIixCOTIxNjAwKTsKLSAgICBzcGRsaXN0W2krK10gPSA5MjE2MDBMOwotI2Vu ZGlmIC8qIEI5MjE2MDAgKi8KLSNlbmRpZiAvKiBVU0VUQ1NFVFNQRUVEICovCi0gICAgc3BkbGlz dFswXSA9IGkgLSAxOwkJCS8qIFJldHVybiBjb3VudCBpbiAwdGggZWxlbWVudCAqLwotICAgIGRl YnVnKEYxMTEsInR0c3BkbGlzdCBzcGRsaXN0IiwiMCIsc3BkbGlzdFswXSk7Ci0gICAgcmV0dXJu KChsb25nICopc3BkbGlzdCk7Ci19Ci0KLS8qIFQgVCBHIFMgUCBEICAtICBHZXQgc3BlZWQgb2Yg Y3VycmVudGx5IHNlbGVjdGVkIHR0eSBsaW5lICAqLwotCi0vKgotICBVbnJlbGlhYmxlLiAgQWZ0 ZXIgU0VUIExJTkUsIGl0IHJldHVybnMgYW4gYWN0dWFsIHNwZWVkLCBidXQgbm90IG5lY2Vzc2Fy aWx5Ci0gIHRoZSByZWFsIHNwZWVkLiAgT24gc29tZSBzeXN0ZW1zLCBpdCByZXR1cm5zIHRoZSBs aW5lJ3Mgbm9taW5hbCBzcGVlZCwgZnJvbQotICAvZXRjL3R0eXRhYi4gIEV2ZW4gaWYgeW91IFNF VCBTUEVFRCB0byBzb21ldGhpbmcgZWxzZSwgdGhpcyBmdW5jdGlvbiBtaWdodAotICBub3Qgbm90 aWNlLgotKi8KLWxvbmcKLXR0Z3NwZCgpIHsJCQkJLyogR2V0IGN1cnJlbnQgc2VyaWFsIGRldmlj ZSBzcGVlZCAqLwotI2lmZGVmIE5PTE9DQUwKLSAgICByZXR1cm4oLTFMKTsKLSNlbHNlCi0jaWZk ZWYgUE9TSVgKLSAgICBzcGVlZF90CQkJCS8qIFNob3VsZCBiZSB1bnNpZ25lZCAqLwotI2Vsc2UK LSAgICBpbnQJCQkJCS8qIElzbid0IHVuc2lnbmVkICovCi0jZW5kaWYgLyogUE9TSVggKi8KLSAg ICAgIHM7Ci0gICAgaW50IHg7Ci0gICAgbG9uZyBzczsKLSNpZmRlZiBPTElOVVhISVNQRUVECi0g ICAgdW5zaWduZWQgaW50IHNwZF9mbGFncyA9IDA7Ci0gICAgc3RydWN0IHNlcmlhbF9zdHJ1Y3Qg c2VyaW5mbzsKLSNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCi0KLSNpZmRlZiBORVRDT05OCi0g ICAgaWYgKG5ldGNvbm4pIHsKLSNpZmRlZiBUTl9DT01QT1JUCi0JaWYgKGlzdG5jb21wb3J0KCkp Ci0JICByZXR1cm4odG5jX2dldF9iYXVkKCkpOwotCWVsc2UKLSNlbmRpZiAvKiBUTl9DT01QT1JU ICovCi0JICByZXR1cm4oLTEpOwkJCS8qIC0xIGlmIG5ldHdvcmsgY29ubmVjdGlvbiAqLwotICAg IH0KLSNlbmRpZiAvKiBORVRDT05OICovCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkg cmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAo dHRwdHkpIHJldHVybigtMSk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0KLSAgICBkZWJ1ZyhGMTAx LCJ0dGdzcGQgdHR5ZmQiLCIiLHR0eWZkKTsKLQotI2lmZGVmIFVTRVRDU0VUU1BFRUQKLQotICAg IHggPSB0Y2dldGF0dHIodHR5ZmQsJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KLSAg ICBkZWJ1ZyhGMTAxLCJ0dGdzcGQgdGNnZXRhdHRyIiwiIix4KTsKLSAgICBpZiAoeCA8IDApCi0g ICAgICByZXR1cm4oLTEpOwotICAgIGVycm5vID0gMDsKLSAgICBzID0gdGNnZXRzcGVlZChUQ1Nf QUxMLCAmdHRjdXIpOwotICAgIGRlYnVnKEYxMDEsInR0c3NwZCBUQ0dFVFNQRUVEIHNwZWVkIiwi IixzKTsKLSAgICBpZiAocyA9PSAwKSB7Ci0JbG9uZyBzMSwgczI7Ci0JczEgPSB0Y2dldHNwZWVk KFRDU19JTiwgJnR0Y3VyKTsKLQlzMiA9IHRjZ2V0c3BlZWQoVENTX09VVCwgJnR0Y3VyKTsKLQlp ZiAoczEgPT0gMTIwMEwgJiYgczIgPT0gNzVMKQotCSAgcmV0dXJuKDg4ODBMKTsKLSAgICB9Ci0j aWZkZWYgREVCVUcKLSAgICBpZiAoZXJybm8gJiBkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAxLCJ0dHNz cGQgVENHRVRTUEVFRCBlcnJubyIsIiIsZXJybm8pOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAq LwotICAgIHJldHVybihzKTsKLQotI2Vsc2UgIC8qIE5vdCBVU0VUQ1NFVFNQRUVEICovCi0KLSNp ZmRlZiBQbGFuOQotICAgIGlmICh0dHlmZCA8IDApCi0gICAgICBzcyA9IC0xOwotICAgIGVsc2UK LSAgICAgIHNzID0gdHR5bGFzdHNwZWVkOwotI2Vsc2UKLSNpZmRlZiBPTElOVVhISVNQRUVECi0g ICAgZGVidWcoRjEwMCwidHRnc3BkIExpbnV4IE9MSU5VWEhJU1BFRUQiLCIiLDApOwotI2VuZGlm IC8qIE9MSU5VWEhJU1BFRUQgKi8KLQotICAgIGlmICh0dHlmZCA8IDApIHsKLSNpZmRlZiBCU0Q0 NE9SUE9TSVgKLQlzID0gY2ZnZXRvc3BlZWQoJmNjb2xkKTsKLQlkZWJ1ZyhGMTAxLCJ0dGdzcGQg Y2ZnZXRvc3BlZWQgMSBQT1NJWCIsIiIscyk7Ci0jZWxzZQotI2lmZGVmIEFUVFNWCi0JcyA9IGNj b2xkLmNfY2ZsYWcgJiBDQkFVRDsKLQlkZWJ1ZyhGMTAxLCJ0dGdzcGQgY19jZmxhZyBDQkFVRCAx IEFUVFNWIiwiIixzKTsKLSNlbHNlCi0JcyA9IGNjb2xkLnNnX29zcGVlZDsJCS8qIChvYnRhaW5l ZCBieSBjb25nbSgpKSAqLwotCWRlYnVnKEYxMDEsInR0Z3NwZCBzZ19vc3BlZWQgMSIsIiIscyk7 Ci0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0NFBPU0lYICovCi0KLSAgICB9IGVs c2UgewotI2lmZGVmIEJTRDQ0T1JQT1NJWAotCWlmICh0Y2dldGF0dHIodHR5ZmQsJnR0Y3VyKSA8 IDApIHJldHVybigtMSk7Ci0JcyA9IGNmZ2V0b3NwZWVkKCZ0dGN1cik7Ci0JZGVidWcoRjEwMSwi dHRnc3BkIGNmZ2V0b3NwZWVkIDIgQlNET1JQT1NJWCIsIiIscyk7Ci0jaWZkZWYgT0xJTlVYSElT UEVFRAotCWlmIChpb2N0bCh0dHlmZCxUSU9DR1NFUklBTCwmc2VyaW5mbykgPiAtMSkKLQkgIHNw ZF9mbGFncyA9IHNlcmluZm8uZmxhZ3MgJiBBU1lOQ19TUERfTUFTSzsKLQlkZWJ1ZyhGMTAxLCJ0 dGdzcGQgc3BkX2ZsYWdzIiwiIixzcGRfZmxhZ3MpOwotI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQg Ki8KLSNlbHNlCi0jaWZkZWYgQVRUU1YKLQl4ID0gaW9jdGwodHR5ZmQsVENHRVRBLCZ0dGN1cik7 Ci0JZGVidWcoRjEwMSwidHRnc3BkIGlvY3RsIDIgQVRUU1YgeCIsIiIseCk7Ci0JZGVidWcoRjEw MSwidHRnc3BkIGlvY3RsIDIgQVRUU1YgZXJybm8iLCIiLGVycm5vKTsKLQlpZiAoeCA8IDApIHJl dHVybigtMSk7Ci0JcyA9IHR0Y3VyLmNfY2ZsYWcgJiBDQkFVRDsKLQlkZWJ1ZyhGMTAxLCJ0dGdz cGQgaW9jdGwgMiBBVFRTViBzcGVlZCIsIiIscyk7Ci0jZWxzZQotI2lmZGVmIEJFTExWMTAKLQl4 ID0gaW9jdGwodHR5ZmQsVElPQ0dERVYsJnRkY3VyKTsKLQlkZWJ1ZyhGMTAxLCJ0dGdzcGQgaW9j dGwgMiBCRUxMVjEwIHgiLCIiLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQlzID0gdGRj dXIub3NwZWVkOwotCWRlYnVnKEYxMDEsInR0Z3NwZCBpb2N0bCAyIEJFTExWMTAgc3BlZWQiLCIi LHMpOwotI2Vsc2UKLQl4ID0gZ3R0eSh0dHlmZCwmdHRjdXIpOwotCWRlYnVnKEYxMDEsInR0Z3Nw ZCBndHR5IDIgeCIsIiIseCk7Ci0JZGVidWcoRjEwMSwidHRnc3BkIGd0dHkgMiBlcnJubyIsIiIs ZXJybm8pOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQlzID0gdHRjdXIuc2dfb3NwZWVkOwot CWRlYnVnKEYxMDEsInR0Z3NwZCBndHR5IDIgc3BlZWQiLCIiLHMpOwotI2VuZGlmIC8qIEJFTExW MTAgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotICAg IH0KLSAgICBkZWJ1ZyhGMTAxLCJ0dGdzcGQgY29kZSIsIiIscyk7Ci0jaWZkZWYgT0xJTlVYSElT UEVFRAotICAgIGRlYnVnKEYxMDEsInR0Z3NwZCBzcGRfZmxhZ3MiLCIiLHNwZF9mbGFncyk7Ci0j ZW5kaWYgLyogT0xJTlVYSElTUEVFRCAqLwotICAgIHN3aXRjaCAocykgewotI2lmZGVmIEIwCi0g ICAgICBjYXNlIEIwOiAgICBzcyA9IDBMOyBicmVhazsKLSNlbmRpZiAvKiBCMCAqLwotCi0jaWZu ZGVmIE1JTklYCi0vKgotIE1JTklYIGRlZmluZXMgdGhlIEJ4eCBzeW1ib2xzIHRvIGJlIGJwcy8x MDAsIHNvIEI1MD09Qjc1LCBCMTEwPT1CMTM0PT1CMTUwLAotIGV0YywgbWFraW5nIGZvciBtYW55 ICJkdXBsaWNhdGUgY2FzZSBpbiBzd2l0Y2giIGVycm9ycywgd2hpY2ggYXJlIGZhdGFsLgotKi8K LSNpZmRlZiBCNTAKLSAgICAgIGNhc2UgQjUwOiAgIHNzID0gNTBMOyBicmVhazsKLSNlbmRpZiAv KiBCNTAgKi8KLSNpZmRlZiBCNzUKLSAgICAgIGNhc2UgQjc1OiAgIHNzID0gNzVMOyBicmVhazsK LSNlbmRpZiAvKiBCNzUgKi8KLSNlbmRpZiAvKiBNSU5JWCAqLwotCi0jaWZkZWYgQjExMAotICAg ICAgY2FzZSBCMTEwOiAgc3MgPSAxMTBMOyBicmVhazsKLSNlbmRpZiAvKiBCMTEwICovCi0KLSNp Zm5kZWYgTUlOSVgKLSNpZmRlZiBCMTM0Ci0gICAgICBjYXNlIEIxMzQ6ICBzcyA9IDEzNEw7IGJy ZWFrOwotI2VuZGlmIC8qIEIxMzQgKi8KLSNpZmRlZiBCMTUwCi0gICAgICBjYXNlIEIxNTA6ICBz cyA9IDE1MEw7IGJyZWFrOwotI2VuZGlmIC8qIEIxNTAgKi8KLSNlbmRpZiAvKiBNSU5JWCAqLwot Ci0jaWZkZWYgQjIwMAotICAgICAgY2FzZSBCMjAwOiAgc3MgPSAyMDBMOyBicmVhazsKLSNlbmRp ZiAvKiBCMjAwICovCi0KLSNpZmRlZiBCMzAwCi0gICAgICBjYXNlIEIzMDA6ICBzcyA9IDMwMEw7 IGJyZWFrOwotI2VuZGlmIC8qIEIzMDAgKi8KLQotI2lmZGVmIEI2MDAKLSAgICAgIGNhc2UgQjYw MDogIHNzID0gNjAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogQjYwMCAqLwotCi0jaWZkZWYgQjEyMDAK LSAgICAgIGNhc2UgQjEyMDA6IHNzID0gMTIwMEw7IGJyZWFrOwotI2VuZGlmIC8qIEIxMjAwICov Ci0KLSNpZmRlZiBCMTgwMAotICAgICAgY2FzZSBCMTgwMDogc3MgPSAxODAwTDsgYnJlYWs7Ci0j ZW5kaWYgLyogQjE4MDAgKi8KLQotI2lmZGVmIEIyNDAwCi0gICAgICBjYXNlIEIyNDAwOiBzcyA9 IDI0MDBMOyBicmVhazsKLSNlbmRpZiAvKiBCMjQwMCAqLwotCi0jaWZkZWYgQjQ4MDAKLSAgICAg IGNhc2UgQjQ4MDA6IHNzID0gNDgwMEw7IGJyZWFrOwotI2VuZGlmIC8qIEI0ODAwICovCi0KLSNp ZmRlZiBCNzIwMAotICAgICAgY2FzZSBCNzIwMDogc3MgPSA3MjAwTDsgYnJlYWs7Ci0jZW5kaWYg LyogQjcyMDAgKi8KLQotI2lmZGVmIEI5NjAwCi0gICAgICBjYXNlIEI5NjAwOiBzcyA9IDk2MDBM OyBicmVhazsKLSNlbmRpZiAvKiBCOTYwMCAqLwotCi0jaWZkZWYgQjE5MjAwCi0gICAgICBjYXNl IEIxOTIwMDogc3MgPSAxOTIwMEw7IGJyZWFrOwotI2Vsc2UKLSNpZmRlZiBFWFRBCi0gICAgICBj YXNlIEVYVEE6IHNzID0gMTkyMDBMOyBicmVhazsKLSNlbmRpZiAvKiBFWFRBICovCi0jZW5kaWYg LyogQjE5MjAwICovCi0KLSNpZm5kZWYgTUlOSVgKLSNpZmRlZiBCMzg0MDAKLSAgICAgIGNhc2Ug QjM4NDAwOgotICAgICAgICBzcyA9IDM4NDAwTDsKLSNpZmRlZiBPTElOVVhISVNQRUVECi0gICAg ICAgIHN3aXRjaChzcGRfZmxhZ3MpIHsKLSAgICAgICAgICBjYXNlIEFTWU5DX1NQRF9ISTogIHNz ID0gIDU3NjAwTDsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBBU1lOQ19TUERfVkhJOiBzcyA9IDEx NTIwMEw7IGJyZWFrOwotCX0KLSNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCi0gICAgICAgIGJy ZWFrOwotI2Vsc2UKLSNpZmRlZiBFWFRCCi0gICAgICBjYXNlIEVYVEI6IHNzID0gMzg0MDBMOyBi cmVhazsKLSNlbmRpZiAvKiBFWFRCICovCi0jZW5kaWYgLyogQjM4NDAwICovCi0jZW5kaWYgLyog TUlOSVggKi8KLQotI2lmZGVmIEhQVVgKLSNpZmRlZiBfQjU3NjAwCi0gICAgICBjYXNlIF9CNTc2 MDA6IHNzID0gNTc2MDBMOyBicmVhazsKLSNlbmRpZiAvKiBfQjU3NjAwICovCi0jaWZkZWYgX0Ix MTUyMDAKLSAgICAgIGNhc2UgX0IxMTUyMDA6IHNzID0gMTE1MjAwTDsgYnJlYWs7Ci0jZW5kaWYg LyogX0IxMTUyMDAgKi8KLSNlbHNlCi0jaWZkZWYgQjU3NjAwCi0gICAgICBjYXNlIEI1NzYwMDog c3MgPSA1NzYwMEw7IGJyZWFrOwotI2VuZGlmIC8qIEI1NzYwMCAqLwotI2lmZGVmIEI3NjgwMAot ICAgICAgY2FzZSBCNzY4MDA6IHNzID0gNzY4MDBMOyBicmVhazsKLSNlbmRpZiAvKiBCNzY4MDAg Ki8KLSNpZmRlZiBCMTE1MjAwCi0gICAgICBjYXNlIEIxMTUyMDA6IHNzID0gMTE1MjAwTDsgYnJl YWs7Ci0jZW5kaWYgLyogQjExNTIwMCAqLwotI2lmZGVmIEIxNTM2MDAKLSAgICAgIGNhc2UgQjE1 MzYwMDogc3MgPSAxNTM2MDBMOyBicmVhazsKLSNlbmRpZiAvKiBCMTUzNjAwICovCi0jaWZkZWYg QjIzMDQwMAotICAgICAgY2FzZSBCMjMwNDAwOiBzcyA9IDIzMDQwMEw7IGJyZWFrOwotI2VuZGlm IC8qIEIyMzA0MDAgKi8KLSNpZmRlZiBCMzA3MjAwCi0gICAgICBjYXNlIEIzMDcyMDA6IHNzID0g MzA3MjAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogQjMwNzIwMCAqLwotI2lmZGVmIEI0NjA4MDAKLSAg ICAgIGNhc2UgQjQ2MDgwMDogc3MgPSA0NjA4MDBMOyBicmVhazsKLSNlbmRpZiAvKiBCNDYwODAw ICovCi0jZW5kaWYgLyogSFBVWCAqLwotI2lmZGVmIEI5MjE2MDAKLSAgICAgIGNhc2UgQjkyMTYw MDogc3MgPSA5MjE2MDBMOyBicmVhazsKLSNlbmRpZiAvKiBCOTIxNjAwICovCi0gICAgICBkZWZh dWx0OgotCXNzID0gLTE7IGJyZWFrOwotICAgIH0KLSNlbmRpZiAvKiBQbGFuOSAqLwotICAgIGRl YnVnKEYxMDEsInR0Z3NwZCBzcGVlZCIsIiIsc3MpOwotICAgIHJldHVybihzcyk7Ci0KLSNlbmRp ZiAvKiBVU0VUQ1NFVFNQRUVEICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotfQotI2lmZGVmIE1J TklYMgkJCQkvKiBBbm90aGVyIGhhY2sgYWxlcnQgKi8KLSNkZWZpbmUgTUlOSVgKLSNlbmRpZiAv KiBNSU5JWDIgKi8KLQotLyoKLSAgRklPTlJFQUQgZGF0YSB0eXBlLi4uICBUaGlzIGhhcyBiZWVu IGRlZmluZWQgYXMgImxvbmciIGZvciBtYW55LCBtYW55Ci0gIHllYXJzLCBhbmQgaXQgd29ya2Vk IE9LIHVudGlsIDY0LWJpdCBwbGF0Zm9ybXMgYXBwZWFyZWQuICBUaHVzIHdlIHVzZQotICBpbnQg Zm9yIDY0LWJpdCBwbGF0Zm9ybXMsIGJ1dCBrZWVwIGxvbmcgZm9yIHRoZSBvdGhlcnMuICBJZiB3 ZSBjaGFuZ2VkCi0gIHRoZSBkZWZhdWx0IFBFRUtUWVBFIHRvIGludCwgdGhpcyB3b3VsZCBwcm9i YWJseSBicmVhayAxNi1iaXQgYnVpbGRzCi0gIChub3RlIHRoYXQgc2l6ZW9mKGxvbmcpID09IHNp emVvZihpbnQpIG9uIG1vc3QgMzItYml0IHBsYXRmb3JtcyksIG1hbnkKLSAgb2Ygd2hpY2ggd2Ug aGF2ZSBubyB3YXkgb2YgdGVzdGluZyBhbnkgbW9yZS4gIFRoZXJlZm9yZSwgZG8gbm90IGNoYW5n ZQotICB0aGUgZGVmYXVsdCBkZWZpbml0aW9uIG9mIFBFRUtUWVBFIC0tIG9ubHkgYWRkIGV4Y2Vw dGlvbnMgdG8gaXQgYXMgbmVlZGVkLgotKi8KLSNpZmRlZiBDT0hFUkVOVAotI2lmZGVmIEZJT05S RUFECi0jdW5kZWYgRklPTlJFQUQKLSNlbmRpZiAvKiBGSU9OUkVBRCAqLwotLyogI2RlZmluZSBG SU9OUkVBRCBUSU9DUVVFUlkgKi8KLS8qICNkZWZpbmUgUEVFS1RZUEUgaW50ICovCi0jZWxzZSAg LyogTm90IENPSEVSRU5ULi4uICovCi0KLSNpZmRlZiBPU0YzMgkJCQkvKiBEaWdpdGFsIFVOSVgg My4yIG9yIGhpZ2hlciAqLwotI2RlZmluZSBQRUVLVFlQRSBpbnQKLSNlbHNlCi0jZGVmaW5lIFBF RUtUWVBFIGxvbmcJCQkvKiBFbHNld2hlcmUgKHNlZSBub3RlcyBhYm92ZSkgKi8KLSNlbmRpZiAv KiBPU0YzMiAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLS8qIGNrdW15ci5jIGJ5IEtyaXN0 b2ZmZXIgRXJpa3Nzb24sIHNrZUBwa21hYi5zZSwgMTUgTWFyIDE5OTAuICovCi0KLSNpZmRlZiBN WVJFQUQKLQotLyogUHJpdmF0ZSBidWZmZXIgZm9yIG15cmVhZCgpIGFuZCBpdHMgY29tcGFuaW9u cy4gIE5vdCBmb3IgdXNlIGJ5IGFueXRoaW5nCi0gKiBlbHNlLiAgdHRmbHVpKCkgaXMgYWxsb3dl ZCB0byByZXNldCB0aGVtIHRvIGluaXRpYWwgdmFsdWVzLiAgdHRjaGsoKSBpcwotICogYWxsb3dl ZCB0byByZWFkIG15X2NvdW50LgotICoKLSAqIG15X2l0ZW0gaXMgYW4gaW5kZXggaW50byBteWJ1 ZltdLiAgSW5jcmVtZW50IGl0ICpiZWZvcmUqIHJlYWRpbmcgbXlidWZbXS4KLSAqCi0gKiBBIGds b2JhbCBwYXJpdHkgbWFzayB2YXJpYWJsZSBjb3VsZCBiZSB1c2VmdWwgdG9vLiAgV2UgY291bGQg dXNlIGl0IHRvCi0gKiBsZXQgbXlyZWFkKCkgc3RyaXAgdGhlIHBhcml0eSBvbiBpdHMgb3duLCBp bnN0ZWFkIG9mIHN0cmlwcGluZyBzaWduCi0gKiBiaXRzIGFzIGl0IGRvZXMgbm93LgotICovCi0j aWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgTVlCVUZMRU4gMzI3NjgKLSNlbHNlCi0jaWZkZWYgcGRw MTEKLSNkZWZpbmUgTVlCVUZMRU4gMjU2Ci0jZWxzZQotI2RlZmluZSBNWUJVRkxFTiAxMDI0Ci0j ZW5kaWYgLyogcGRwMTEgKi8KLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotCi0jaWZkZWYgQU5ZWDI1 Ci0jdW5kZWYgTVlCVUZMRU4KLSNkZWZpbmUgTVlCVUZMRU4gMjU2Ci0vKgotICBPbiBYLjI1IGNv bm5lY3Rpb25zLCB0aGVyZSBpcyBhbiBleHRyYSBjb250cm9sIGJ5dGUgYXQgdGhlIGJlZ2lubmlu Zy4KLSovCi1zdGF0aWMgQ0hBUiB4MjVidWZbTVlCVUZMRU4rMV07CQkvKiBDb21tdW5pY2F0aW9u IGRldmljZSBpbnB1dCBidWZmZXIgKi8KLXN0YXRpYyBDSEFSICAqbXlidWYgPSB4MjVidWYrMTsK LSNlbHNlCi1zdGF0aWMgQ0hBUiBteWJ1ZltNWUJVRkxFTl07Ci0jZW5kaWYgLyogQU5ZWDI1ICov Ci0KLXN0YXRpYyBpbnQgbXlfY291bnQgPSAwOwkJLyogTnVtYmVyIG9mIGNoYXJzIHN0aWxsIGlu IG15YnVmICovCi1zdGF0aWMgaW50IG15X2l0ZW0gPSAtMTsJCS8qIExhc3QgaW5kZXggcmVhZCBm cm9tIG15YnVmW10gICAqLwotCi0vKiAgVCBUIFAgRSBFIEsgIC0tICBQZWVrIGludG8gb3VyIGlu dGVybmFsIGNvbW11bmljYXRpb25zIGlucHV0IGJ1ZmZlcnMuICovCi0KLS8qCi0gIE5PVEU6IFRo aXMgcm91dGluZSBpcyBwZWN1bGlhciB0byBVTklYLCBhbmQgaXMgdXNlZCBvbmx5IGJ5IHRoZQot ICBzZWxlY3QoKS1iYXNlZCBDT05ORUNUIG1vZHVsZSwgY2t1Y25zLmMuICBJdCBuZWVkIG5vdCBi ZSByZXBsaWNhdGVkIGluCi0gIHRoZSBjaz90aW8uYyBvZiBvdGhlciBwbGF0Zm9ybXMuCi0qLwot aW50Ci10dHBlZWsoKSB7Ci0jaWZkZWYgVFRMRUJVRgotICAgIGludCByYyA9IDA7Ci0gICAgaWYg KHR0cHVzaCA+PSAwKQotICAgICAgcmMrKzsKLSAgICByYyArPSBsZV9pbmJ1ZigpOwotICAgIGlm IChyYyA+IDApCi0gICAgICByZXR1cm4ocmMpOwotICAgIGVsc2UKLSNlbmRpZiAvKiBUVExFQlVG ICovCi0KLSNpZmRlZiBNWVJFQUQKLSAgICByZXR1cm4obXlfY291bnQpOwotI2Vsc2UKLSAgICBy ZXR1cm4oMCk7Ci0jZW5kaWYgLyogTVlSRUFEICovCi19Ci0KLS8qIG15cmVhZCgpIC0tIEVmZmlj aWVudCByZWFkIG9mIG9uZSBjaGFyYWN0ZXIgZnJvbSBjb21tdW5pY2F0aW9ucyBsaW5lLgotICoK LSAqIE5PVEU6IG15cmVhZCgpIGFuZCBpdHMgaGVscGVycyBteWdldGJ1ZigpIGFuZCBteWZpbGxi dWYoKSByZXR1cm4gcmF3Ci0gKiBieXRlcyBmcm9tIGNvbm5lY3Rpb24sIHNvIHdoZW4gdGhlIGNv bm5lY3Rpb24gaXMgZW5jcnlwdGVkLCB0aGVzZSBieXRlcwotICogbXVzdCBiZSBkZWNyeXB0ZWQu Ci0gKgotICogVXNlcyBhIHByaXZhdGUgYnVmZmVyIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2Yg ZXhwZW5zaXZlIHJlYWQoKSBzeXN0ZW0KLSAqIGNhbGxzLiAgRXNzZW50aWFsbHkgcGVyZm9ybXMg dGhlIGVxdWl2YWxlbnQgb2YgcmVhZCgpIG9mIDEgY2hhcmFjdGVyLCB3aGljaAotICogaXMgdGhl biByZXR1cm5lZC4gIEJ5IHJlYWRpbmcgYWxsIGF2YWlsYWJsZSBpbnB1dCBmcm9tIHRoZSBzeXN0 ZW0gYnVmZmVycwotICogdG8gdGhlIHByaXZhdGUgYnVmZmVyIGluIG9uZSBjaHVuaywgYW5kIHRo ZW4gd29ya2luZyBmcm9tIHRoaXMgYnVmZmVyLCB0aGUKLSAqIG51bWJlciBvZiBzeXN0ZW0gY2Fs bHMgaXMgcmVkdWNlZCBpbiBhbnkgY2FzZSB3aGVyZSBtb3JlIHRoYW4gb25lIGNoYXJhY3Rlcgot ICogYXJyaXZlcyBkdXJpbmcgdGhlIHByb2Nlc3Npbmcgb2YgdGhlIHByZXZpb3VzIGNodW5rLCBm b3IgaW5zdGFuY2UgaGlnaAotICogYmF1ZCByYXRlcyBvciBuZXR3b3JrIHR5cGUgY29ubmVjdGlv bnMgd2hlcmUgaW5wdXQgYXJyaXZlcyBpbiBwYWNrZXRzLgotICogSWYgdGhlIHRpbWUgbmVlZGVk IGZvciBhIHJlYWQoKSBzeXN0ZW0gY2FsbCBhcHByb2FjaGVzIHRoZSB0aW1lIGZvciBtb3JlCi0g KiB0aGFuIG9uZSBjaGFyYWN0ZXIgdG8gYXJyaXZlLCB0aGVuIHRoaXMgbWVjaGFuaXNtIGF1dG9t YXRpY2FsbHkgY29tcGVuc2F0ZXMKLSAqIGZvciB0aGF0IGJ5IHBlcmZvcm1pbmcgYmlnZ2VyIHJl YWQoKXMgbGVzcyBmcmVxdWVudGx5LiAgSWYgdGhlIHN5c3RlbSBsb2FkCi0gKiBpcyBoaWdoLCB0 aGUgc2FtZSBtZWNoYW5pc20gY29tcGVuc2F0ZXMgZm9yIHRoYXQgdG9vLgotICoKLSAqIG15cmVh ZCgpIGlzIGEgbWFjcm8gdGhhdCByZXR1cm5zIHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBi dWZmZXIuICBJZiB0aGUKLSAqIGJ1ZmZlciBpcyBlbXB0eSwgbXlnZXRidWYoKSBpcyBjYWxsZWQu ICBTZWUgbXlnZXRidWYoKSBmb3IgcG9zc2libGUgZXJyb3IKLSAqIHJldHVybnMuCi0gKgotICog VGhpcyBzaG91bGQgYmUgZWZmaWNpZW50IGVub3VnaCBmb3IgYW55IG9uZS1jaGFyYWN0ZXItYXQt YS10aW1lIGxvb3BzLgotICogRm9yIGV2ZW4gYmV0dGVyIGVmZmljaWVuY3kgeW91IG1pZ2h0IHVz ZSBtZW1jcHkoKS9iY29weSgpIG9yIHN1Y2ggYmV0d2VlbgotICogYnVmZmVycyAoc2luY2UgdGhl eSBhcmUgb2Z0ZW4gYmV0dGVyIG9wdGltaXplZCBmb3IgY29weWluZyksIGJ1dCBpdCBtYXkgbm90 Ci0gKiBiZSB3b3J0aCBpdCBpZiB5b3UgaGF2ZSB0byB0YWtlIGFuIGV4dHJhIHBhc3Mgb3ZlciB0 aGUgYnVmZmVyIHRvIHN0cmlwCi0gKiBwYXJpdHkgYW5kIGNoZWNrIGZvciBDVFJMLUMgYW55d2F5 LgotICoKLSAqIE5vdGUgdGhhdCBpZiB5b3UgaGF2ZSBiZWVuIHVzaW5nIG15cmVhZCgpIGZyb20g YW5vdGhlciBwcm9ncmFtIG1vZHVsZSwgeW91Ci0gKiBtYXkgaGF2ZSBzb21lIHRyb3VibGUgYWNj ZXNzaW5nIHRoaXMgbWFjcm8gdmVyc2lvbiBhbmQgdGhlIHByaXZhdGUgdmFyaWFibGVzCi0gKiBp dCB1c2VzLiAgSW4gdGhhdCBjYXNlLCBqdXN0IGFkZCBhIGZ1bmN0aW9uIGluIHRoaXMgbW9kdWxl LCB0aGF0IGludm9rZXMgdGhlCi0gKiBtYWNyby4KLSAqLwotI2RlZmluZSBteXJlYWQoKSAoLS1t eV9jb3VudCA8IDAgPyBteWdldGJ1ZigpIDogMjU1ICYgKGludClteWJ1ZlsrK215X2l0ZW1dKQot Ci0vKiBTcGVjaWZpY2F0aW9uOiBQdXNoIGJhY2sgdXAgdG8gb25lIGNoYXJhY3RlciBvbnRvIG15 cmVhZCgpJ3MgcXVldWUuCi0gKgotICogVGhpcyBpbXBsZW1lbnRhdGlvbjogUHVzaCBiYWNrIGNo YXJhY3RlcnMgaW50byBteWJ1Zi4gQXQgbGVhc3Qgb25lIGNoYXJhY3RlcgotICogbXVzdCBoYXZl IGJlZW4gcmVhZCB0aHJvdWdoIG15cmVhZCgpIGJlZm9yZSBteXVucmQoKSBtYXkgYmUgdXNlZC4g IEFmdGVyCi0gKiBFT0Ygb3IgcmVhZCBlcnJvciwgYWdhaW4sIG15dW5yZCgpIGNhbiBub3QgYmUg dXNlZC4gIFNvbWV0aW1lcyBtb3JlIHRoYW4KLSAqIG9uZSBjaGFyYWN0ZXIgY2FuIGJlIHB1c2hl ZCBiYWNrLCBidXQgb25seSBvbmUgY2hhcmFjdGVyIGlzIGd1YXJhbnRlZWQuCi0gKiBTaW5jZSBh IHByZXZpb3VzIG15cmVhZCgpIG11c3QgaGF2ZSByZWFkIGl0cyBjaGFyYWN0ZXIgb3V0IG9mIG15 YnVmW10sCi0gKiB0aGF0IGd1YXJhbnRlZXMgdGhhdCB0aGVyZSBpcyBzcGFjZSBmb3IgYXQgbGVh c3Qgb25lIGNoYXJhY3Rlci4gIElmIHB1c2gKLSAqIGJhY2sgd2FzIHJlYWxseSBuZWVkZWQgYWZ0 ZXIgRU9GLCBhIHNtYWxsIGFkZGl0aW9uIGNvdWxkIHByb3ZpZGUgdGhhdC4KLSAqCi0gKiBBcyBv ZiAwMi8yMDA3IG15dW5yZCgpIGlzIHVzZWQgYnkgdHRpbmwoKS4KLSAqLwotVk9JRAotI2lmZGVm IENLX0FOU0lDCi1teXVucmQoQ0hBUiBjaCkKLSNlbHNlCi1teXVucmQoY2gpIENIQVIgY2g7Ci0j ZW5kaWYJLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAobXlfaXRlbSA+PSAwKSB7Ci0JbXlidWZb bXlfaXRlbS0tXSA9IGNoOwotCSsrbXlfY291bnQ7Ci0gICAgfQotfQotCi0vKiAgVCBUIFAgVSBT IEggQiBBIEMgSyAgLS0gIFB1dCBuIGJ5dGVzIGJhY2sgaW50byB0aGUgbXlyZWFkIGJ1ZmZlciAq LwotCi1zdGF0aWMgQ0hBUiAqIHB1c2hidWYgPSBOVUxMOwotLyogc3RhdGljIGludCBwdXNoZWQg PSAwOyAqLwotCi1pbnQKLXR0cHVzaGJhY2socyxuKSBDSEFSICogczsgaW50IG47IHsKLSAgICBk ZWJ1ZyhGMTAxLCJ0dHB1c2hiYWNrIG4iLCIiLG4pOwotICAgIGlmIChwdXNoYnVmIHx8IG4gPiBN WUJVRkxFTiB8fCBuIDwgMSkKLSAgICAgIHJldHVybigtMSk7Ci0gICAgZGVidWcoRjEwMSwidHRw dXNoYmFjayBteV9jb3VudCIsIiIsbXlfY291bnQpOwotICAgIGlmIChteV9jb3VudCA+IDApIHsK LQlpZiAoIShwdXNoYnVmID0gKENIQVIgKiltYWxsb2MobisxKSkpCi0JICByZXR1cm4oLTEpOwot CW1lbWNweShwdXNoYnVmLG15YnVmLG15X2NvdW50KTsKLQkvKiBwdXNoZWQgPSBteV9jb3VudDsg Ki8gLyogKHNldCBidXQgbmV2ZXIgdXNlZCkgKi8KLSAgICB9Ci0gICAgbWVtY3B5KG15YnVmLHMs bik7Ci0gICAgbXlfY291bnQgPSBuOwotICAgIG15X2l0ZW0gPSAtMTsKLSAgICByZXR1cm4oMCk7 Ci19Ci0KLS8qIG15Z2V0YnVmKCkgLS0gRmlsbCBidWZmZXIgZm9yIG15cmVhZCgpIGFuZCByZXR1 cm4gZmlyc3QgY2hhcmFjdGVyLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgd2hhdCBteXJlYWQo KSB1c2VzIHdoZW4gaXQgY2FuJ3QgZ2V0IHRoZSBuZXh0IGNoYXJhY3RlcgotICogZGlyZWN0bHkg ZnJvbSBpdHMgYnVmZmVyLiAgRmlyc3QsIGl0IGNhbGxzIGEgc3lzdGVtIGRlcGVuZGVudCBteWZp bGxidWYoKQotICogdG8gcmVhZCBhdCBsZWFzdCBvbmUgbmV3IGNoYXJhY3RlciBpbnRvIHRoZSBi dWZmZXIsIGFuZCB0aGVuIGl0IHJldHVybnMKLSAqIHRoZSBmaXJzdCBjaGFyYWN0ZXIganVzdCBh cyBteXJlYWQoKSB3b3VsZCBoYXZlIGRvbmUuICBUaGlzIGZ1bmN0aW9uIGFsc28KLSAqIGlzIHJl c3BvbnNpYmxlIGZvciBhbGwgZXJyb3IgY29uZGl0aW9ucyB0aGF0IG15cmVhZCgpIGNhbiBpbmRp Y2F0ZS4KLSAqCi0gKiBSZXR1cm5zOiBXaGVuIE9LCT0+IGEgcG9zaXRpdmUgY2hhcmFjdGVyLCAw IG9yIGdyZWF0ZXIuCi0gKgkgICAgV2hlbiBFT0YJPT4gLTIuCi0gKgkgICAgV2hlbiBlcnJvcgk9 PiAtMywgZXJyb3IgY29kZSBpbiBlcnJuby4KLSAqCi0gKiBPbGRlciBteXJlYWQoKXMgYWRkaXRp b25hbGx5IHJldHVybmVkIC0xIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgd2FzIG5vdGhpbmcKLSAq IHRvIHJlYWQsIHVwb24gd2hpY2ggdGhlIGNhbGxlciB3b3VsZCBjYWxsIG15cmVhZCgpIGFnYWlu IHVudGlsIGl0IGdvdAotICogc29tZXRoaW5nLiAgVGhlIG5ldyBteXJlYWQoKS9teWdldGJ1Zigp IGFsd2F5cyBnZXRzIHNvbWV0aGluZy4gIElmIGl0Ci0gKiBkb2Vzbid0LCB0aGVuIG1ha2UgaXQg ZG8gc28hICBBbnkgcHJvZ3JhbSB0aGF0IGFjdHVhbGx5IGRlcGVuZHMgb24gdGhlIG9sZAotICog YmVoYXZpb3VyIHdpbGwgYnJlYWsuCi0gKgotICogVGhlIG9sZGVyIHZlcnNpb24gYWxzbyB1c2Vk IHRvIHJldHVybiAtMiBib3RoIGZvciBFT0YgYW5kIG90aGVyIGVycm9ycywKLSAqIGFuZCB1c2Vk IHRvIHNldCBlcnJubyB0byA5OTk5IG9uIEVPRi4gIFRoZSBlcnJubyBzdHVmZiBpcyBnb25lLCBF T0YgYW5kCi0gKiBvdGhlciBlcnJvcnMgbm93IHJldHVybiBkaWZmZXJlbnQgcmVzdWx0cywgYWx0 aG91Z2ggS2VybWl0IGN1cnJlbnRseSBuZXZlcgotICogY2hlY2tzIHRvIHNlZSB3aGljaCBpdCB3 YXMuICBJdCBqdXN0IGRpc2Nvbm5lY3RzIGluIGJvdGggY2FzZXMuCi0gKgotICogS2VybWl0IGxl dHMgdGhlIHVzZXIgdXNlIHRoZSBxdWl0IGtleSB0byBwZXJmb3JtIHNvbWUgc3BlY2lhbCBjb21t YW5kcwotICogZHVyaW5nIGZpbGUgdHJhbnNmZXIuICBUaGlzIGNhdXNlcyByZWFkKCksIGFuZCB0 aHVzIGFsc28gbXlnZXRidWYoKSwgdG8KLSAqIGZpbmlzaCB3aXRob3V0IHJlYWRpbmcgYW55dGhp bmcgYW5kIHJldHVybiB0aGUgRUlOVFIgZXJyb3IuICBUaGlzIHNob3VsZAotICogYmUgY2hlY2tl ZCBieSB0aGUgY2FsbGVyLiAgTXlnZXRidWYoKSBjb3VsZCByZXRyeSB0aGUgcmVhZCgpIG9uIEVJ TlRSLAotICogYnV0IGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVhZCwgdGhpcyBjb3VsZCBkZWxh eSBLZXJtaXQncyByZWFjdGlvbiB0bwotICogdGhlIGNvbW1hbmQsIGFuZCBtYWtlIEtlcm1pdCBh cHBlYXIgdW5yZXNwb25zaXZlLgotICoKLSAqIFRoZSBkZWJ1ZygpIGNhbGwgc2hvdWxkIGJlIHJl bW92ZWQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuCi0gKi8KLWludAotbXlnZXRidWYoKSB7Ci0g ICAgaW50IHg7Ci0gICAgZXJybm8gPSAwOwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyAm JiBteV9jb3VudCA+IDApCi0gICAgICBkZWJ1ZyhGMTAxLCJteWdldGJ1ZiBJTVBST1BFUkxZIENB TExFRCB3aXRoIG15X2NvdW50IiwiIixteV9jb3VudCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAg ICBpZiAobXlfY291bnQgPD0gMCkKLSAgICAgIG15X2NvdW50ID0gbXlmaWxsYnVmKCk7Ci0KLSNp ZmRlZiBERUJVRwotI2lmZGVmIENPTU1FTlQKLSAgICBpZiAoZGVibG9nKSBkZWJ1ZyhGMTAxLCAi bXlnZXRidWYgcmVhZCIsICIiLCBteV9jb3VudCk7Ci0jZWxzZSAvKiBDT01NRU5UICovCi0gICAg Y2toZXhkdW1wKCJteWdldGJ1ZiByZWFkIiwgbXlidWYsIG15X2NvdW50KTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0jZW5kaWYgLyogREVCVUcgKi8KLSAgICB4ID0gbXlfY291bnQ7Ci0gICAgaWYg KG15X2NvdW50IDw9IDApIHsKLQlteV9jb3VudCA9IDA7Ci0JbXlfaXRlbSA9IC0xOwotCWRlYnVn KEYxMDEsIm15Z2V0YnVmIGVycm5vIiwiIixlcnJubyk7Ci0jaWZkZWYgVENQU09DS0VUCi0JaWYg KG5ldGNvbm4gJiYgdHRuZXQgPT0gTkVUX1RDUEIgJiYgZXJybm8gIT0gMCkgewotCSAgICBpZiAo ZXJybm8gIT0gRUlOVFIpIHsKLQkJZGVidWcoRjEwMSwibXlnZXRidWYgVENQIGVycm9yIiwiIixl cnJubyk7Ci0JCXR0Y2xvcygwKTsJCS8qIENsb3NlIHRoZSBjb25uZWN0aW9uLiAqLwotCSAgICB9 Ci0JICAgIHJldHVybigtMyk7Ci0JfQotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCWlmICghbmV0 Y29ubiAmJiB4bG9jYWwgJiYgZXJybm8pIHsKLQkgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7Ci0J CWRlYnVnKEYxMDEsIm15Z2V0YnVmIFNFUklBTCBlcnJvciIsIiIsZXJybm8pOwotCQl4ID0gLTM7 Ci0JCXR0Y2xvcygwKTsJCS8qIENsb3NlIHRoZSBjb25uZWN0aW9uLiAqLwotCSAgICB9Ci0JfQot CXJldHVybigoeCA8IDApID8gLTMgOiAtMik7Ci0gICAgfQotICAgIC0tbXlfY291bnQ7Ci0gICAg cmV0dXJuKCh1bnNpZ25lZCkoMHhmZiAmIG15YnVmW215X2l0ZW0gPSAwXSkpOwotfQotCi0vKiBt eWZpbGxidWYoKToKLSAqIFN5c3RlbS1kZXBlbmRlbnQgcmVhZCgpIGludG8gbXlidWZbXSwgYXMg bWFueSBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlLgotICoKLSAqIFJldHVybnM6IE9LID0+IG51bWJl ciBvZiBjaGFyYWN0ZXJzIHJlYWQsIGFsd2F5cyBtb3JlIHRoYW4gemVyby4KLSAqICAgICAgICAg IEVPRiA9PiAwCi0gKiAgICAgICAgICBFcnJvciA9PiAtMSwgZXJyb3IgY29kZSBpbiBlcnJuby4K LSAqCi0gKiBJZiB0aGVyZSBpcyBpbnB1dCBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbSdzIGJ1ZmZl cnMsIGFsbCBvZiBpdCBzaG91bGQgYmUKLSAqIHJlYWQgaW50byBteWJ1ZltdIGFuZCB0aGUgZnVu Y3Rpb24gcmV0dXJuIGltbWVkaWF0ZWx5LiAgSWYgbm8gaW5wdXQgaXMKLSAqIGF2YWlsYWJsZSwg aXQgc2hvdWxkIHdhaXQgZm9yIGEgY2hhcmFjdGVyIHRvIGFycml2ZSwgYW5kIHJldHVybiB3aXRo IHRoYXQKLSAqIG9uZSBpbiBteWJ1ZltdIGFzIHNvb24gYXMgcG9zc2libGUuICBJdCBtYXkgd2Fp dCBzb21ld2hhdCBwYXN0IHRoZSBmaXJzdAotICogY2hhcmFjdGVyLCBidXQgYmUgYXdhcmUgdGhh dCBhbnkgc3VjaCBkZWxheSBsZW5ndGhlbnMgdGhlIHBhY2tldCB0dXJuYXJvdW5kCi0gKiB0aW1l IGR1cmluZyBrZXJtaXQgZmlsZSB0cmFuc2ZlcnMuICBTaG91bGQgbmV2ZXIgcmV0dXJuIHdpdGgg emVybyBjaGFyYWN0ZXJzCi0gKiB1bmxlc3MgRU9GIG9yIGlycmVjb3ZlcmFibGUgcmVhZCBlcnJv ci4KLSAqCi0gKiBDb3JyZWN0IGZ1bmN0aW9uaW5nIGRlcGVuZHMgb24gdGhlIGNvcnJlY3QgdHR5 IHBhcmFtZXRlcnMgYmVpbmcgdXNlZC4KLSAqIEJldHRlciBjb250cm9sIG9mIGN1cnJlbnQgcGFy YW1ldGVycyBpcyByZXF1aXJlZCB0aGFuIG1heSBoYXZlIGJlZW4gdGhlCi0gKiBjYXNlIGluIG9s ZGVyIEtlcm1pdCByZWxlYXNlcy4gIEZvciBpbnN0YW5jZSwgT19OREVMQVkgKG9yIGVxdWl2YWxl bnQpIGNhbgotICogbm8gbG9uZ2VyIGJlIHNvbWV0aW1lcyBvZmYgYW5kIHNvbWV0aW1lcyBvbiBs aWtlIGl0IHVzZWQgdG8sIHVubGVzcyBhCi0gKiBzcGVjaWFsIG15ZmlsbGJ1ZigpIGlzIHdyaXR0 ZW4gdG8gaGFuZGxlIHRoYXQuICBPdGhlcndpc2UgdGhlIG9yZGluYXJ5Ci0gKiBteWZpbGxidWYo KXMgbWF5IHRoaW5rIHRoZXkgaGF2ZSBjb21lIHRvIEVPRi4KLSAqCi0gKiBJZiB5b3VyIHN5c3Rl bSBoYXMgYSBmYWNpbGl0eSB0byBkaXJlY3RseSBwZXJmb3JtIHRoZSBmdW5jdGlvbmluZyBvZgot ICogbXlmaWxsYnVmKCksIHRoZW4gdXNlIGl0LiAgSWYgdGhlIHN5c3RlbSBjYW4gdGVsbCB5b3Ug aG93IG1hbnkgY2hhcmFjdGVycwotICogYXJlIGF2YWlsYWJsZSBpbiBpdHMgYnVmZmVycywgdGhl biByZWFkIHRoYXQgYW1vdW50IChidXQgbm90IGxlc3MgdGhhbiAxKS4KLSAqIElmIHRoZSBzeXN0 ZW0gY2FuIHJldHVybiBhIHNwZWNpYWwgaW5kaWNhdGlvbiB3aGVuIHlvdSB0cnkgdG8gcmVhZCB3 aXRob3V0Ci0gKiBhbnl0aGluZyB0byByZWFkLCB3aGlsZSBhbGxvd2luZyB5b3UgdG8gcmVhZCBh bGwgdGhlcmUgaXMgd2hlbiB0aGVyZSBpcwotICogc29tZXRoaW5nLCB5b3UgbWF5IGxvb3AgdW50 aWwgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlYWQsIGJ1dCBwcm9iYWJseSB0aGF0Ci0gKiBpcyBu b3QgZ29vZCBmb3IgdGhlIHN5c3RlbSBsb2FkLgotICovCi0KLSNpZmRlZiBTVk9SUE9TSVgKLQkv KiBUaGlzIGlzIGZvciBTeXN0ZW0gSUlJL1Ygd2l0aCBWTUlOPjAsIFZUSU1FPTAgYW5kIE9fTkRF TEFZIG9mZiwKLQkgKiBhbmQgQ0xPQ0FMIHNldCBhbnkgd2F5IHlvdSBsaWtlLiAgVGhpcyB3YXks IHJlYWQoKSB3aWxsIGRvIGV4YWN0bHkKLQkgKiB3aGF0IGlzIHJlcXVpcmVkIGJ5IG15ZmlsbGJ1 ZigpOiBJZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBidWZmZXJzCi0JICogb2YgdGhlIE8uUy4sIGFs bCBhdmFpbGFibGUgZGF0YSBpcyByZWFkIGludG8gbXlidWYsIHVwIHRvIHRoZSBzaXplCi0JICog b2YgbXlidWYuICBJZiB0aGVyZSBpcyBub25lLCB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIGFycml2 ZSBpcwotCSAqIGF3YWl0ZWQgYW5kIHJldHVybmVkLgotCSAqLwotaW50Ci1teWZpbGxidWYoKSB7 Ci0gICAgaW50IGZkLCBuOwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpCi0gICAgICBm ZCA9IGZkaW47Ci0gICAgZWxzZQotI2VuZGlmIC8qIE5FVENNRCAqLwotICAgICAgZmQgPSB0dHlm ZDsKLQotI2lmZGVmIHN4YUU1MAotICAgIC8qIEZyb20gUy4gRGV6YXdhIGF0IEZ1amlmaWxtIGlu IEphcGFuLiAgSSBkb24ndCBrbm93IHdoeSB0aGlzIGlzICovCi0gICAgLyogbmVjZXNzYXJ5IGZv ciB0aGUgc3hhIEU1MCwgYnV0IGl0IGlzLiAqLwotICAgIHJldHVybiByZWFkKGZkLCBteWJ1Ziwg MjU1KTsKLSNlbHNlCi0jaWZkZWYgQkVPU09SQkVCT1gKLSAgICB3aGlsZSAoMSkgewotI2lmZGVm IE5FVENPTk4KLSAgICAgICAgaWYgKG5ldGNvbm4pIHsKLSAgICAgICAgICAgIG4gPSBuZXR4aW4o c2l6ZW9mKG15YnVmKSwgKGNoYXIgKilteWJ1Zik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJC RUJPWCBTVk9SUE9TSVggbmV0d29yayBteWZpbGxidWYiLCIiLG4pOwotCX0KLSAgICAgICAgZWxz ZQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQkgIG4gPSByZWFkKGZkLCBteWJ1Ziwgc2l6ZW9mKG15 YnVmKSk7Ci0JZGVidWcoRjEwMSwiQkVCT1ggU1ZPUlBPU0lYIG5vdG5ldCBteWZpbGxidWYiLCIi LG4pOwotICAgICAgICBpZiAobiA+IDApCi0JICByZXR1cm4obik7Ci0gICAgICAgIHNub296ZSgx MDAwLjApOwotICAgIH0KLSNlbHNlIC8qIEJFT1NPUkJFQk9YICovCi0gICAgZXJybm8gPSAwOwot ICAgIC8qIGRlYnVnKEYxMDEsIlNWT1JQT1NJWCBteWZpbGxidWYgY2FsbGluZyByZWFkKCkgZmQi LCIiLGZkKTsgKi8KLSNpZmRlZiBJQk1YMjUKLSAgICBpZiAobmV0Y29ubiAmJiAobmV0dHlwZSA9 PSBORVRfSVgyNSkpIHsKLQkvKiBjYW4ndCB1c2Ugc2l6ZW9mIGJlY2F1c2UgbXlidWYgaXMgYSBw b2ludGVyLCBhbmQgbm90IGFuIGFycmF5ISAqLwotCW4gPSB4MjV4aW4oIE1ZQlVGTEVOLCBteWJ1 ZiApOwotICAgIH0gZWxzZQotI2VuZGlmIC8qIElCTVgyNSAqLwotCi0jaWZkZWYgQ0tfU1NMCi0g ICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgewotCSAgaW50IGVy cm9yLCBuID0gMDsKLQkgIGRlYnVnKEYxMDAsIm15ZmlsbGJ1ZiBjYWxsaW5nIFNTTF9yZWFkKCkg ZmQiLCIiLDApOwotCSAgd2hpbGUgKG4gPT0gMCkgewotCSAgICAgIGlmIChzc2xfYWN0aXZlX2Zs YWcpCi0gICAgICAgICAgICAgICAgbiA9IFNTTF9yZWFkKHNzbF9jb24sIChjaGFyICopbXlidWYs IHNpemVvZihteWJ1ZikpOwotCSAgICAgIGVsc2UgaWYgKHRsc19hY3RpdmVfZmxhZykKLSAgICAg ICAgICAgICAgICBuID0gU1NMX3JlYWQodGxzX2NvbiwgKGNoYXIgKilteWJ1Ziwgc2l6ZW9mKG15 YnVmKSk7Ci0gICAgICAgICAgICAgIGVsc2UKLQkJYnJlYWs7Ci0JICAgICAgc3dpdGNoIChTU0xf Z2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24sbikpIHsKLQkJY2FzZSBT U0xfRVJST1JfTk9ORToKLQkJICBpZiAobiA+IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVy bihuKTsKLQkJICBpZiAobiA8IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0J CSAgbXNsZWVwKDUwKTsKLQkJICBicmVhazsKLQkJY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToK LQkJY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotCQkgIHJldHVybigtMSk7Ci0JCWNhc2UgU1NM X0VSUk9SX1NZU0NBTEw6Ci0JCSAgaWYgKG4gIT0gMCkKLQkJICAgIHJldHVybigtMSk7Ci0JCWNh c2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6Ci0JCWNhc2UgU1NMX0VSUk9SX1NTTDoKLQkJ Y2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46Ci0JCWRlZmF1bHQ6Ci0JCSAgdHRjbG9zKDApOwot CQkgIHJldHVybigtMyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYg LyogQ0tfU1NMICovCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBLUkI0Ci0jaWZkZWYgUkxP R0NPREUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pIHsKLQlkZWJ1ZyhGMTAxLCJt eWZpbGxidWYgY2FsbGluZyBrcmI0X2Rlc19yZWFkKCkgZmQiLCIiLHR0eWZkKTsKLSAgICAgICAg aWYgKChuID0ga3JiNF9kZXNfcmVhZCh0dHlmZCwoY2hhciAqKW15YnVmLHNpemVvZihteWJ1Zikp KSA8IDApCi0JICByZXR1cm4oLTMpOwotICAgICAgICBlbHNlCi0JICByZXR1cm4obik7Ci0gICAg fQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5kaWYgLyogS1JCNCAqLwotI2lmZGVmIEtSQjUK LSNpZmRlZiBSTE9HQ09ERQotICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzVMT0dJTikgewotCWRl YnVnKEYxMDEsIm15ZmlsbGJ1ZiBjYWxsaW5nIGtyYjVfZGVzX3JlYWQoKSBmZCIsIiIsdHR5ZmQp OwotICAgICAgICBpZiAoKG4gPSBrcmI1X2Rlc19yZWFkKHR0eWZkLChjaGFyICopbXlidWYsc2l6 ZW9mKG15YnVmKSwwKSkgPCAwKQotCSAgcmV0dXJuKC0zKTsKLSAgICAgICAgZWxzZQotCSAgcmV0 dXJuKG4pOwotICAgIH0KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2lmZGVmIEtSQjVfVTJVCi0g ICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJVKSB7Ci0JZGVidWcoRjEwMSwibXlmaWxsYnVmIGNh bGxpbmcga3JiNV91MnVfcmVhZCgpIGZkIiwiIix0dHlmZCk7Ci0gICAgICAgIGlmICgobiA9IGty YjVfdTJ1X3JlYWQodHR5ZmQsKGNoYXIgKilteWJ1ZixzaXplb2YobXlidWYpKSkgPCAwKQotCSAg cmV0dXJuKC0zKTsKLSAgICAgICAgZWxzZQotCSAgcmV0dXJuKG4pOwotICAgIH0KLSNlbmRpZiAv KiBLUkI1X1UyVSAqLwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAq LwotCi0jaWZkZWYgTkVUUFRZCi0jaWZkZWYgSEFWRV9QVFlUUkFQCi0gICAgLyogU3BlY2lhbCBo YW5kbGluZyBmb3IgSFAtVVggcHR5IGkvbyAqLwotICBwdHlyZWFkOgotICAgIGlmICh0dHB0eSAm JiBwdHlfdHJhcF9wZW5kaW5nKHR0eWZkKSA+IDApIHsKLQlkZWJ1ZyhGMTAxLCJteWZpbGxidWYg Y2FsbGluZyBwdHlfdHJhcF9oYW5kbGVyKCkgZmQiLCIiLHR0eWZkKTsKLSAgICAgICAgaWYgKHB0 eV90cmFwX2hhbmRsZXIodHR5ZmQpID4gMCkgewotICAgICAgICAgICAgdHRjbG9zKDApOwotICAg ICAgICAgICAgcmV0dXJuKC0zKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBIQVZFX1BU WVRSQVAgKi8KLSNlbmRpZiAvKiBORVRQVFkgKi8KLSAgICBkZWJ1ZyhGMTAxLCJteWZpbGxidWYg Y2FsbGluZyByZWFkKCkgZmQiLCIiLHR0eWZkKTsKLSAgICBuID0gcmVhZChmZCwgbXlidWYsIHNp emVvZihteWJ1ZikpOwotICAgIGRlYnVnKEYxMDEsIlNWT1JQT1NJWCBteWZpbGxidWYgcmVhZCIs IiIsbik7Ci0gICAgZGVidWcoRjEwMSwiU1ZPUlBPU0lYIG15ZmlsbGJ1ZiBlcnJubyIsIiIsZXJy bm8pOwotICAgIGRlYnVnKEYxMDEsIlNWT1JQT1NJWCBteWZpbGxidWYgdHRjYXJyIiwiIix0dGNh cnIpOwotICAgIGlmIChuIDwgMSkgewotI2lmZGVmIE5FVFBUWQotI2lmZGVmIEhBVkVfUFRZVFJB UAotICAgICAgICAvKiBXaGVuIHdlIGhhdmUgYSBQVFkgdHJhcCBpbiBwbGFjZSB0aGUgY29ubmVj dGlvbiBjYW5ub3QgKi8KLSAgICAgICAgLyogYmUgY2xvc2VkIHVudGlsIHRoZSB0cmFwIHJlY2Vp dmVzIGEgY2xvc2UgaW5kaWNhdGlvbi4gICovCi0gICAgICAgIGlmIChuID09IDAgJiYgdHRwdHkp Ci0gICAgICAgICAgICBnb3RvIHB0eXJlYWQ7Ci0jZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCi0j ZW5kaWYgLyogTkVUUFRZICovCi0gICAgICAgIHJldHVybigtMyk7Ci0gICAgfQotICAgIHJldHVy bihuKTsKLSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotI2VuZGlmIC8qIHN4YUU1MCAqLwotfQot Ci0jZWxzZSAvKiBub3QgQVQmVCBvciBQT1NJWCAqLwotCi0jaWZkZWYgYWVnaXMKLQkvKiBUaGlz IGlzIHF1b3RlZCBmcm9tIHRoZSBvbGQgbXlyZWFkKCkuICBUaGUgc2VtYW50aWNzIHNlZW0gdG8g YmUKLQkgKiBhbHJpZ2h0LCBidXQgbWF5YmUgZXJybm8gd291bGQgbm90IG5lZWQgdG8gYmUgc2V0 IGV2ZW4gd2hlbgotCSAqIHRoZXJlIGlzIG5vIGVycm9yPyAgSSBkb24ndCBrbm93IGFlZ2lzLgot CSAqLwotaW50Ci1teWZpbGxidWYoKSB7Ci0gICAgaW50IGNvdW50OwotI2lmZGVmIE5FVENNRAot ICAgIGlmICh0dHBpcGUpCi0gICAgICBmZCA9IGZkaW47Ci0gICAgZWxzZQotI2VuZGlmIC8qIE5F VENNRCAqLwotICAgICAgZmQgPSB0dHlmZDsKLQotICAgIGNvdW50ID0gaW9zXyRnZXQoKHNob3J0 KWZkLCBpb3NfJGNvbmRfb3B0LCBteWJ1ZiwgMjU2TCwgc3QpOwotICAgIGVycm5vID0gRUlPOwot ICAgIGlmIChzdC5hbGwgPT0gaW9zXyRnZXRfY29uZGl0aW9uYWxfZmFpbGVkKSAvKiBnZXQgYXQg bGVhc3Qgb25lICovCi0gICAgICBjb3VudCA9IGlvc18kZ2V0KChzaG9ydClmZCwgMCwgbXlidWYs IDFMLCBzdCk7Ci0gICAgaWYgKHN0LmFsbCA9PSBpb3NfJGVuZF9vZl9maWxlKQotICAgICAgcmV0 dXJuKC0zKTsKLSAgICBlbHNlIGlmIChzdC5hbGwgIT0gc3RhdHVzXyRvaykgewotCWVycm5vID0g RUlPOwotCXJldHVybigtMSk7Ci0gICAgfQotICAgIHJldHVybihjb3VudCA+IDAgPyBjb3VudCA6 IC0zKTsKLX0KLSNlbHNlIC8qICFhZWdpcyAqLwotCi0jaWZkZWYgRklPTlJFQUQKLQkvKiBUaGlz IGlzIGZvciBzeXN0ZW1zIHdpdGggRklPTlJFQUQuICBGSU9OUkVBRCByZXR1cm5zIHRoZSBudW1i ZXIKLQkgKiBvZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZSBmb3IgcmVhZGluZy4gSWYgbm9uZSBhcmUg YXZhaWxhYmxlLCB3YWl0Ci0JICogdW50aWwgc29tZXRoaW5nIGFycml2ZXMsIG90aGVyd2lzZSBy ZXR1cm4gYWxsIHRoZXJlIGlzLgotCSAqLwotaW50Ci1teWZpbGxidWYoKSB7Ci0gICAgUEVFS1RZ UEUgYXZhaWwgPSAwOwotICAgIGludCB4LCBmZDsKLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRw aXBlKQotICAgICAgZmQgPSBmZGluOwotICAgIGVsc2UKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSAg ICAgIGZkID0gdHR5ZmQ7Ci0KLSNpZmRlZiBTVU5YMjUKLS8qCi0gIFN1bkxpbmsgWC4yNSBzdXBw b3J0IGluIHRoaXMgcm91dGluZSBmcm9tIFN0ZWZhYW4gQS4gRWVja2VscywgRXVyb3N0YXQgKENF QykuCi0gIERlcGVuZHMgb24gU3VuT1MgaGF2aW5nIEZJT05SRUFELCBub3QgYmVjYXVzZSB3ZSB1 c2UgaXQsIGJ1dCBqdXN0IHNvIHRoaXMKLSAgY29kZSBpcyBncm91cGVkIGNvcnJlY3RseSB3aXRo aW4gdGhlICNpZmRlZnMuICBMZXQncyBob3BlIFNvbGFyaXMga2VlcHMgaXQuCi0KLSAgV2UgY2Fs bCB4MjV4aW4oKSBpbnN0ZWFkIG9mIHJlYWQoKSBzbyB0aGF0IFEtQml0IHBhY2tldHMsIHdoaWNo IGNvbnRhaW4KLSAgWC4yNSBzZXJ2aWNlLWxldmVsIGluZm9ybWF0aW9uIChlLmcuIFBBRCBwYXJh bWV0ZXIgY2hhbmdlcyksIGNhbiBiZSBwcm9jZXNzZWQKLSAgdHJhbnNwYXJlbnRseSB0byB0aGUg dXBwZXItbGV2ZWwgY29kZS4gIFRoaXMgaXMgYSBibG9ja2luZyByZWFkLCBhbmQgc28KLSAgd2Ug ZGVwZW5kIG9uIGhpZ2hlci1sZXZlbCBjb2RlIChzdWNoIGFzIHR0aW5jKCkpIHRvIHNldCBhbnkg bmVjZXNzYXJ5IGFsYXJtcy4KLSovCi0gICAgZXh0ZXJuIGludCBuZXR0eXBlOwotICAgIGlmIChu ZXRjb25uICYmIG5ldHR5cGUgPT0gTkVUX1NYMjUpIHsKLQl3aGlsZSAoKHggPSB4MjV4aW4oc2l6 ZW9mKHgyNWJ1ZiksIHgyNWJ1ZikpIDwgMSkgOwotCXJldHVybih4IC0gMSk7CSAgICAgICAgLyog Ii0xIiBjb21wZW5zYXRlcyBmb3IgZXh0cmEgc3RhdHVzIGJ5dGUgKi8KLSAgICB9Ci0jZW5kaWYg LyogU1VOWDI1ICovCi0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8 IHRsc19hY3RpdmVfZmxhZykgewotICAgICAgICBpbnQgZXJyb3IsIG4gPSAwOwotICAgICAgICB3 aGlsZSAobiA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnKQotCSAgICAg IG4gPSBTU0xfcmVhZChzc2xfY29uLCAoY2hhciAqKW15YnVmLCBzaXplb2YobXlidWYpKTsKLSAg ICAgICAgICAgIGVsc2UKLQkgICAgICBuID0gU1NMX3JlYWQodGxzX2NvbiwgKGNoYXIgKilteWJ1 Ziwgc2l6ZW9mKG15YnVmKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKFNTTF9nZXRfZXJyb3Ioc3Ns X2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbixuKSkgewotCSAgICAgIGNhc2UgU1NMX0VSUk9S X05PTkU6Ci0gICAgICAgICAgICAgICAgaWYgKG4gPiAwKQotCQkgIHJldHVybihuKTsKLSAgICAg ICAgICAgICAgICBpZiAobiA8IDApCi0JCSAgcmV0dXJuKC0yKTsKLSAgICAgICAgICAgICAgICBt c2xlZXAoNTApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICAgIGNhc2UgU1NMX0VSUk9S X1dBTlRfV1JJVEU6Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAgICAgICAg ICAgICAgIHJldHVybigtMSk7Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKLQkJaWYg KG4gIT0gMCkKLQkJICByZXR1cm4oLTEpOwotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUw OV9MT09LVVA6Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgotCSAgICAgIGNhc2UgU1NMX0VS Uk9SX1pFUk9fUkVUVVJOOgotCSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgdHRjbG9z KDApOwotICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRl ZiBLUkI0Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4p IHsKLSAgICAgICAgaWYgKCh4ID0ga3JiNF9kZXNfcmVhZCh0dHlmZCxteWJ1ZixzaXplb2YobXli dWYpKSkgPCAwKQotCSAgcmV0dXJuKC0xKTsKLSAgICAgICAgZWxzZQotCSAgcmV0dXJuKHgpOwot ICAgIH0KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2VuZGlmIC8qIEtSQjQgKi8KLSNpZmRlZiBL UkI1Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsK LSAgICAgICAgaWYgKCh4ID0ga3JiNV9kZXNfcmVhZCh0dHlmZCxteWJ1ZixzaXplb2YobXlidWYp LDApKSA8IDApCi0JICByZXR1cm4oLTEpOwotICAgICAgICBlbHNlCi0JICByZXR1cm4oeCk7Ci0g ICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgS1JCNV9VMlUKLSAgICBpZiAodHRu cHJvdG8gPT0gTlBfSzVVMlUpIHsKLSAgICAgICAgaWYgKCh4ID0ga3JiNV91MnVfcmVhZCh0dHlm ZCxteWJ1ZixzaXplb2YobXlidWYpKSkgPCAwKQotCSAgcmV0dXJuKC0xKTsKLSAgICAgICAgZWxz ZQotCSAgcmV0dXJuKHgpOwotICAgIH0KLSNlbmRpZiAvKiBLUkI1X1UyVSAqLwotI2VuZGlmIC8q IEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0gICAgZXJybm8gPSAwOwotICAg IGRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBjYWxsaW5nIEZJT05SRUFEIGlvY3RsIiwiIix4bG9jYWwp OwotICAgIHggPSBpb2N0bChmZCwgRklPTlJFQUQsICZhdmFpbCk7Ci0jaWZkZWYgREVCVUcKLSAg ICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjEwMSwibXlmaWxsYnVmIEZJT05SRUFEIiwiIix4KTsK LQlkZWJ1ZyhGMTAxLCJteWZpbGxidWYgRklPTlJFQUQgYXZhaWwiLCIiLGF2YWlsKTsKLQlkZWJ1 ZyhGMTAxLCJteWZpbGxidWYgRklPTlJFQUQgZXJybm8iLCIiLGVycm5vKTsKLSAgICB9Ci0jZW5k aWYgLyogREVCVUcgKi8KLSAgICBpZiAoeCA8IDAgfHwgYXZhaWwgPT0gMCkKLSAgICAgIGF2YWls ID0gMTsKLQotICAgIGlmIChhdmFpbCA+IE1ZQlVGTEVOKQotICAgICAgYXZhaWwgPSBNWUJVRkxF TjsKLQotICAgIGVycm5vID0gMDsKLQotICAgIHggPSByZWFkKGZkLCBteWJ1ZiwgKGludCkgYXZh aWwpOwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDEsIm15Zmls bGJ1ZiBhdmFpbCIsIiIsYXZhaWwpOwotCWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiByZWFkIiwiIix4 KTsKLQlkZWJ1ZyhGMTAxLCJteWZpbGxidWYgcmVhZCBlcnJubyIsIiIsZXJybm8pOwotICAgICAg ICBpZiAoeCA+IDApCi0JICBja2hleGR1bXAoIm15ZmlsbGJ1ZiBteWJ1ZiIsbXlidWYseCk7Ci0g ICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgaWYgKHggPCAxKSB4ID0gLTM7CQkJLyogcmVh ZCAwID09IGNvbm5lY3Rpb24gbG9zcyAqLwotICAgIHJldHVybih4KTsKLX0KLQotI2Vsc2UgLyog IUZJT05SRUFEICovCi0vKiBBZGQgb3RoZXIgc3lzdGVtcyBoZXJlLCBiZXR3ZWVuICNpZmRlZiBh bmQgI2Vsc2UsIGUuZy4gTkVUQ09OTi4gKi8KLS8qIFdoZW4gdGhlcmUgaXMgbm8gb3RoZXIgcG9z c2liaWxpdHksIHJlYWQgMSBjaGFyYWN0ZXIgYXQgYSB0aW1lLiAqLwotaW50Ci1teWZpbGxidWYo KSB7Ci0gICAgaW50IHg7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoc3NsX2FjdGl2ZV9mbGFn IHx8IHRsc19hY3RpdmVfZmxhZykgewotICAgICAgICBpbnQgZXJyb3IsIG4gPSAwOwotICAgICAg ICB3aGlsZSAobiA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnKQotCSAg ICAgIG4gPSBTU0xfcmVhZChzc2xfY29uLCAoY2hhciAqKW15YnVmLCBzaXplb2YobXlidWYpKTsK LSAgICAgICAgICAgIGVsc2UKLQkgICAgICBjb3VudCA9IFNTTF9yZWFkKHRsc19jb24sIChjaGFy ICopbXlidWYsIHNpemVvZihteWJ1ZikpOwotICAgICAgICAgICAgc3dpdGNoIChTU0xfZ2V0X2Vy cm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24sbikpIHsKLQkgICAgICBjYXNlIFNT TF9FUlJPUl9OT05FOgotICAgICAgICAgICAgICAgIGlmIChuID4gMCkKLQkJICByZXR1cm4obik7 Ci0gICAgICAgICAgICAgICAgaWYgKG4gPCAwKQotCQkgIHJldHVybigtMik7Ci0gICAgICAgICAg ICAgICAgbXNsZWVwKDUwKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQkgICAgICBjYXNlIFNT TF9FUlJPUl9XQU5UX1dSSVRFOgotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKLSAg ICAgICAgICAgICAgICByZXR1cm4oLTEpOwotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6 Ci0JCWlmIChuICE9IDApCi0JCSAgcmV0dXJuKC0xKTsKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9X QU5UX1g1MDlfTE9PS1VQOgotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKLQkgICAgICBjYXNl IFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKLQkgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg IHR0Y2xvcygwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICAgICAgfQot ICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIENLX0tFUkJFUk9T Ci0jaWZkZWYgS1JCNAotI2lmZGVmIFJMT0dDT0RFCi0gICAgaWYgKHR0bnByb3RvID09IE5QX0VL NExPR0lOKSB7Ci0gICAgICAgIGlmICgobGVuID0ga3JiNF9kZXNfcmVhZCh0dHlmZCxteWJ1Zixz aXplb2YobXlidWYpKSkgPCAwKQotCSAgcmV0dXJuKC0xKTsKLSAgICAgICAgZWxzZQotCSAgcmV0 dXJuKGxlbik7Ci0gICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5kaWYgLyogS1JCNCAq LwotI2lmZGVmIEtSQjUKLSNpZmRlZiBSTE9HQ09ERQotICAgIGlmICh0dG5wcm90byA9PSBOUF9F SzVMT0dJTikgewotICAgICAgICBpZiAoKGxlbiA9IGtyYjVfZGVzX3JlYWQodHR5ZmQsbXlidWYs c2l6ZW9mKG15YnVmKSwwKSkgPCAwKQotCSAgcmV0dXJuKC0xKTsKLSAgICAgICAgZWxzZQotCSAg cmV0dXJuKGxlbik7Ci0gICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgS1JCNV9V MlUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKLSAgICAgICAgaWYgKChsZW4gPSBr cmI1X3UydV9yZWFkKHR0eWZkLG15YnVmLHNpemVvZihteWJ1ZikpKSA8IDApCi0JICByZXR1cm4o LTEpOwotICAgICAgICBlbHNlCi0JICByZXR1cm4obGVuKTsKLSAgICB9Ci0jZW5kaWYgLyogS1JC NV9VMlUgKi8KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQot I2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpCi0gICAgICBmZCA9IGZkaW47Ci0gICAgZWxz ZQotI2VuZGlmIC8qIE5FVENNRCAqLwotICAgICAgZmQgPSB0dHlmZDsKLSAgICB4ID0gcmVhZChm ZCwgbXlidWYsIDEpOwotICAgIHJldHVybih4ID4gMCA/IHggOiAtMyk7Ci19Ci0KLSNlbmRpZiAv KiAhRklPTlJFQUQgKi8KLSNlbmRpZiAvKiAhYWVnaXMgKi8KLSNlbmRpZiAvKiAhQVRUU1YgKi8K LQotI2VuZGlmIC8qIE1ZUkVBRCAqLwotCi0vKiAgVCBUIF8gVCBOIE8gUCBUICAtLSAgSGFuZGxl IFRlbG5ldCBuZWdvdGlvbnMgaW4gaW5jb21pbmcgZGF0YSAqLwotLyoKLSAgQ2FsbCB3aXRoIHRo ZSBJQUMgdGhhdCB3YXMgZW5jb3VudGVyZWQuCi0gIFJldHVybnM6Ci0gICAtMzogSWYgY29ubmVj dGlvbiBoYXMgZHJvcHBlZCBvciBnb25lIGJhZC4KLSAgIC0yOiBPbiBUZWxuZXQgcHJvdG9jb2wg ZXJyb3IgcmVzdWx0aW5nIGluIGluY29uc2lzdGVudCBzdGF0ZXMuCi0gICAgMDogSWYgbmVnb3Rp YXRpb24gT0sgYW5kIGNhbGxlciBoYXMgbm90aGluZyB0byBkby4KLSAgICAxOiBJZiBwYWNrZXQg c3RhcnQgY2hhcmFjdGVyIGhhcyBjaGFuZ2VkIChuZXcgdmFsdWUgaXMgaW4gZ2xvYmFsIHN0Y2hy KS4KLSAgMjU1OiBJZiB0aGVyZSB3YXMgYSBxdW90ZWQgSUFDIGFzIGRhdGEuCi0gICBvcjogTm90 IGF0IGFsbCBpZiB3ZSBnb3QgYSBsZWdpdGltYXRlIFRlbG5ldCBMb2dvdXQgcmVxdWVzdC4KLSov Ci0jaWZkZWYgVENQU09DS0VUCi1zdGF0aWMgaW50Ci10dF90bm9wdChuKSBpbnQgbjsgewkJCS8q IEhhbmRsZSBUZWxuZXQgb3B0aW9ucyAqLwotICAgIC8qIEluIGNhc2UgY2FsbGVyIGRpZCBub3Qg YWxyZWFkeSBjaGVjayB0aGVzZSBjb25kaXRpb25zLi4uICAqLwotICAgIGlmIChuID09IElBQyAm JgotCSgoeGxvY2FsICYmIG5ldGNvbm4gJiYgSVNfVEVMTkVUKCkpIHx8Ci0JICgheGxvY2FsICYm IHNzdGVsbmV0KSkpIHsKLQlleHRlcm4gaW50IHNlcnZlcjsKLQlpbnQgdHggPSAwOwotCWRlYnVn KEYxMDAsInR0aW5sIGNhbGxpbmcgdG5fZG9vcCgpIiwiIiwwKTsKLQl0eCA9IHRuX2Rvb3AoKENI QVIpKG4gJiAweGZmKSxkdXBsZXgsdHRpbmMpOwotCWRlYnVnKEYxMTEsInR0aW5sIHRuX2Rvb3Ao KSByZXR1cm5lZCIsInR4Iix0eCk7Ci0Jc3dpdGNoICh0eCkgewotCSAgY2FzZSAwOgotCSAgICBy ZXR1cm4oMCk7Ci0JICBjYXNlIC0xOgkJCS8qIEkvTyBlcnJvciAqLwotCSAgICB0dGltb2ZmKCk7 CQkJLyogVHVybiBvZmYgdGltZXIgKi8KLQkgICAgcmV0dXJuKC0zKTsKLSAgICAgICAgICBjYXNl IC0yOgkJCS8qIENvbm5lY3Rpb24gZmFpbGVkLiAqLwotICAgICAgICAgIGNhc2UgLTM6Ci0JICAg IHR0aW1vZmYoKTsJCQkvKiBUdXJuIG9mZiB0aW1lciAqLwotCSAgICB0dGNsb3MoMCk7Ci0JICAg IHJldHVybigtMyk7Ci0JICBjYXNlIDE6CQkJLyogRUNITyBjaGFuZ2UgKi8KLQkgICAgZHVwbGV4 ID0gMTsKLQkgICAgcmV0dXJuKDApOwotCSAgY2FzZSAyOgkJCS8qIEVDSE8gY2hhbmdlICovCi0J ICAgIGR1cGxleCA9IDA7Ci0JICAgIHJldHVybigwKTsKLQkgIGNhc2UgMzoJCQkvKiBRdW90ZWQg SUFDICovCi0JICAgIG4gPSAyNTU7Ci0JICAgIHJldHVybigodW5zaWduZWQpMjU1KTsKLSNpZmRl ZiBJS1NfT1BUSU9OCi0JICBjYXNlIDQ6IHsKLQkgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9L RVJNSVQpLmtlcm1pdC51X3N0YXJ0ICYmIHNlcnZlcgotI2lmZGVmIElLU0QKLQkJICAmJiAhaW5z ZXJ2ZXIKLSNlbmRpZiAvKiBJS1NEICovCi0JCSAgKSB7CQkJLyogUmVtb3RlIGluIFNlcnZlciBt b2RlICovCi0JCSAgdHRpbW9mZigpOwkJLyogVHVybiBvZmYgdGltZXIgKi8KLQkJICBkZWJ1ZyhG MTAwLCJ1X3N0YXJ0IGFuZCAhaW5zZXJ2ZXIiLCIiLDApOwotCQkgIHJldHVybigtMik7CQkvKiBF bmQgc2VydmVyIG1vZGUgKi8KLQkgICAgICB9IGVsc2UgaWYgKCFURUxPUFRfU0IoVEVMT1BUX0tF Uk1JVCkua2VybWl0Lm1lX3N0YXJ0ICYmCi0JCQkgc2VydmVyCi0JCQkgKSB7CQkvKiBJJ20gbm8g bG9uZ2VyIGluIFNlcnZlciBNb2RlICovCi0JCSAgZGVidWcoRjEwMCwibWVfc3RhcnQgYW5kIHNl cnZlciIsIiIsMCk7Ci0JCSAgdHRpbW9mZigpOwotCQkgIHJldHVybigtMik7Ci0JICAgICAgfQot CSAgICAgIHJldHVybigwKTsKLQkgIH0KLQkgIGNhc2UgNTogewkJCS8qIFN0YXJ0IGNoYXJhY3Rl ciBjaGFuZ2UgKi8KLQkgICAgICAvKiBleHRlcm4gQ0hBUiBzdGNocjsgKi8KLQkgICAgICAvKiBz dGFydCA9IHN0Y2hyOyAqLwotCSAgICAgIHJldHVybigxKTsKLQkgIH0KLSNlbmRpZiAvKiBJS1Nf T1BUSU9OICovCi0JICBjYXNlIDY6CQkJLyogUmVtb3RlIExvZ291dCAqLwotCSAgICB0dGltb2Zm KCk7Ci0JICAgIHR0Y2xvcygwKTsKLSNpZmRlZiBJS1NECi0JICAgIGlmIChpbnNlcnZlciAmJiAh bG9jYWwpCi0JICAgICAgZG9leGl0KEdPT0RfRVhJVCwwKTsKLQkgICAgZWxzZQotI2VuZGlmIC8q IElLU0QgKi8KLQkgICAgICByZXR1cm4oLTIpOwotCSAgZGVmYXVsdDoKLQkgICAgcmV0dXJuKDAp OwotCX0KLSAgICB9IGVsc2UKLSAgICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KLQotLyogIFQgVCBGIEwgVSBJICAtLSAgRmx1c2ggdHR5IGlucHV0IGJ1ZmZlciAqLwot Ci12b2lkCi10dGZsdXgoKSB7CQkJCS8qIEJ1dCBmaXJzdC4uLiAqLwotI2lmZGVmIE1ZUkVBRAot LyoKLSAgRmx1c2ggaW50ZXJuYWwgTVlSRUFEIGJ1ZmZlci4KLSovCi0jaWZkZWYgVENQU09DS0VU Ci0gICAgaW50IGRvdG5vcHRzLCB4OwotICAgIGRvdG5vcHRzID0gKCgoeGxvY2FsICYmIG5ldGNv bm4gJiYgSVNfVEVMTkVUKCkpIHx8Ci0JCSAoIXhsb2NhbCAmJiBzc3RlbG5ldCkpKTsKLSNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGZsdXggbXlfY291bnQiLCIiLG15 X2NvdW50KTsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBpZiAoZG90bm9wdHMpIHsKLQlDSEFSIGNo ID0gJ1wwJzsKLSAgICAgICAgd2hpbGUgKG15X2NvdW50ID4gMCkgewotCSAgICBjaCA9IG15cmVh ZCgpOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgIGlmIChURUxPUFRfVShURUxP UFRfRU5DUllQVElPTikpCi0JICAgICAgY2tfdG5fZGVjcnlwdCgoY2hhciAqKSZjaCwxKTsKLSNl bmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICBpZiAoY2ggPT0gSUFDKQotCSAg ICAgIHggPSB0dF90bm9wdChjaCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIGlm IChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikgJiYgbXlfY291bnQgPiAwKQotICAgICAgY2tf dG5fZGVjcnlwdCgmbXlidWZbbXlfaXRlbSsxXSxteV9jb3VudCk7Ci0jZW5kaWYgLyogQ0tfRU5D UllQVElPTiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBteV9jb3VudCA9IDA7CQkJLyog UmVzZXQgY291bnQgdG8gemVybyAqLwotICAgIG15X2l0ZW0gPSAtMTsJCQkvKiBBbmQgYnVmZmVy IGluZGV4IHRvIC0xICovCi0jZW5kaWYgLyogTVlSRUFEICovCi19Ci0KLWludAotdHRmbHVpKCkg ewotICAgIGludCBuLCBmZDsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBpbnQgZG90bm9wdHM7Ci0g ICAgZG90bm9wdHMgPSAoKCh4bG9jYWwgJiYgbmV0Y29ubiAmJiBJU19URUxORVQoKSkgfHwKLQkJ ICgheGxvY2FsICYmIHNzdGVsbmV0KSkpOwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0jaWZk ZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkKLSAgICAgIGZkID0gZmRpbjsKLSAgICBlbHNlCi0j ZW5kaWYgLyogTkVUQ01EICovCi0gICAgICBmZCA9IHR0eWZkOwotCi0jaWZkZWYgVFRMRUJVRgot ICAgIHR0cHVzaCA9IC0xOwkJCS8qIENsZWFyIHRoZSBwZWVrLWFoZWFkIGNoYXIgKi8KLSAgICB3 aGlsZSAobGVfZGF0YSAmJiAobGVfaW5idWYoKSA+IDApKSB7Ci0gICAgICAgIENIQVIgY2ggPSAn XDAnOwotICAgICAgICBpZiAobGVfZ2V0Y2hhcigmY2gpID4gMCkgewkvKiBDbGVhciBhbnkgbW9y ZS4uLiAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwidHRmbHVpIGxlX2luYnVmIGNoIiwiIixj aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogVFRMRUJVRiAqLwotICAgIGRlYnVnKEYx MDEsInR0Zmx1aSB0dHBpcGUiLCIiLHR0cGlwZSk7Ci0KLSNpZmRlZiBNWVJFQUQKLS8qCi0gIEZs dXNoIGludGVybmFsIE1ZUkVBRCBidWZmZXIgKk5FWFQqLCBpbiBhbGwgY2FzZXMuCi0qLwotICAg IHR0Zmx1eCgpOwotI2VuZGlmIC8qIE1ZUkVBRCAqLwotCi0jaWZkZWYgTkVUQ09OTgotLyogTmV0 d29yayBmbHVzaCBpcyBkb25lIHNwZWNpYWxseSwgaW4gdGhlIG5ldHdvcmsgc3VwcG9ydCBtb2R1 bGUuICovCi0gICAgaWYgKChuZXRjb25uIHx8IHNzdGVsbmV0KSAmJiAhdHRwaXBlICYmICF0dHB0 eSkgewotCWRlYnVnKEYxMDAsInR0Zmx1aSBuZXRmbHVpIiwiIiwwKTsKLSNpZmRlZiBDT01NRU5U Ci0jaWZkZWYgVE5fQ09NUE9SVAotCWlmIChpc3RuY29tcG9ydCgpKQotICAgICAgICAgICAgdG5j X3NlbmRfcHVyZ2VfZGF0YShUTkNfUFVSR0VfUkVDRUlWRSk7Ci0jZW5kaWYgLyogVE5fQ09NUE9S VCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQlyZXR1cm4obmV0Zmx1aSgpKTsKLSAgICB9Ci0j ZW5kaWYgLyogTkVUQ09OTiAqLwotCi0gICAgZGVidWcoRjEwMSwidHRmbHVpIHR0eWZkIiwiIix0 dHlmZCk7IC8qIE5vdCBuZXR3b3JrICovCi0gICAgaWYgKHR0eWZkIDwgMCkKLSAgICAgIHJldHVy bigtMSk7Ci0KLSNpZmRlZiBhZWdpcwotICAgIHNpb18kY29udHJvbCgoc2hvcnQpeWZkLCBzaW9f JGZsdXNoX2luLCB0cnVlLCBzdCk7Ci0gICAgaWYgKHN0LmFsbCAhPSBzdGF0dXNfJG9rKSB7Ci0J ZnByaW50ZihzdGRlcnIsICJmbHVzaCBmYWlsZWQ6ICIpOyBlcnJvcl8kcHJpbnQoc3QpOwotICAg IH0gZWxzZSB7ICAgICAgLyogc29tZXRpbWVzIHRoZSBmbHVzaCBkb2Vzbid0IHdvcmsgKi8KLSAg ICAgICAgZm9yICg7OykgewotCSAgICBjaGFyIGJ1ZlsyNTZdOwotICAgICAgICAgICAgLyogZWF0 IGFsbCB0aGUgY2hhcmFjdGVycyB0aGF0IHNob3VsZG4ndCBiZSBhdmFpbGFibGUgKi8KLSAgICAg ICAgICAgIGlvc18kZ2V0KChzaG9ydClmZCwgaW9zXyRjb25kX29wdCwgYnVmLCAyNTZMLCBzdCk7 IC8qICh2b2lkKSAqLwotICAgICAgICAgICAgaWYgKHN0LmFsbCA9PSBpb3NfJGdldF9jb25kaXRp b25hbF9mYWlsZWQpIGJyZWFrOwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJmbHVzaCBm YWlsZWQoMik6ICIpOyBlcnJvcl8kcHJpbnQoc3QpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UK LSNpZmRlZiBCU0Q0NAkJCQkvKiA0LjQgQlNEICovCi0gICAgbiA9IEZSRUFEOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU3BlY2lmeSByZWFkIHF1ZXVlICovCi0gICAgZGVidWcoRjEwMCwi dHRmbHVpIEJTRDQ0IiwiIiwwKTsKLSAgICBpb2N0bChmZCxUSU9DRkxVU0gsJm4pOwotI2Vsc2UK LSNpZmRlZiBQbGFuOQotI3VuZGVmIFBPU0lYCQkJCS8qIFVoIG9oLi4uICovCi0jZW5kaWYgLyog UGxhbjkgKi8KLSNpZmRlZiBQT1NJWAkJCQkvKiBQT1NJWCAqLwotICAgIGRlYnVnKEYxMDAsInR0 Zmx1aSBQT1NJWCIsIiIsMCk7Ci0gICAgdGNmbHVzaChmZCxUQ0lGTFVTSCk7Ci0jZWxzZQotI2lm ZGVmIEFUVFNWCQkJCS8qIFN5c3RlbSBWICovCi0jaWZuZGVmIFZYVkUKLSAgICBkZWJ1ZyhGMTAw LCJ0dGZsdWkgQVRUU1YiLCIiLDApOwotICAgIGlvY3RsKGZkLFRDRkxTSCwwKTsKLSNlbmRpZiAv KiBWWFZFICovCi0jZWxzZQkJCQkJLyogTm90IEJTRDQ0LCBQT1NJWCwgb3IgU3lzIFYgKi8KLSNp ZmRlZiBUSU9DRkxVU0gJCQkvKiBUaG9zZSB3aXRoIFRJT0NGTFVTSCBkZWZpbmVkICovCi0jaWZk ZWYgQU5ZQlNECQkJCS8qIEJlcmtlbGV5ICovCi0gICAgbiA9IEZSRUFEOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU3BlY2lmeSByZWFkIHF1ZXVlICovCi0gICAgZGVidWcoRjEwMCwidHRm bHVpIFRJT0NGTFVTSCBBTllCU0QiLCIiLDApOwotICAgIGlvY3RsKGZkLFRJT0NGTFVTSCwmbik7 Ci0jZWxzZQkJCQkJLyogT3RoZXJzIChWNywgZXRjKSAqLwotICAgIGRlYnVnKEYxMDAsInR0Zmx1 aSBUSU9DRkxVU0giLCIiLDApOwotICAgIGlvY3RsKGZkLFRJT0NGTFVTSCwwKTsKLSNlbmRpZiAv KiBBTllCU0QgKi8KLSNlbHNlCQkJCQkvKiBBbGwgb3RoZXJzLi4uICovCi0vKgotICBObyBzeXN0 ZW0gY2FsbCAodGhhdCB3ZSBrbm93IGFib3V0KSBmb3IgaW5wdXQgYnVmZmVyIGZsdXNoaW5nLgot ICBTbyBzZWUgaG93IG1hbnkgdGhlcmUgYXJlIGFuZCByZWFkIHRoZW0gaW4gYSBsb29wLCB1c2lu ZyB0dGluYygpLgotICB0dGluYygpIGlzIGJ1ZmZlcmVkLCBzbyB3ZSdyZSBub3QgZ2V0dGluZyBj aGFyZ2VkIHdpdGggYSBzeXN0ZW0gY2FsbAotICBwZXIgY2hhcmFjdGVyLCBqdXN0IGEgZnVuY3Rp b24gY2FsbC4KLSovCi0gICAgaWYgKChuID0gdHRjaGsoKSkgPiAwKSB7Ci0JZGVidWcoRjEwMSwi dHRmbHVpIHJlYWQgbG9vcCIsIiIsbik7Ci0Jd2hpbGUgKChuLS0pICYmIHR0aW5jKDApID4gMCkg OwotICAgIH0KLSNlbmRpZiAvKiBUSU9DRkxVU0ggKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2Vu ZGlmIC8qIFBPU0lYICovCi0jaWZkZWYgUGxhbjkKLSNkZWZpbmUgUE9TSVgKLSNlbmRpZiAvKiBQ bGFuOSAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogYWVnaXMgKi8KLSAgICByZXR1 cm4oMCk7Ci19Ci0KLWludAotdHRmbHVvKCkgewkJCQkvKiBGbHVzaCBvdXRwdXQgYnVmZmVyICov Ci0gICAgaW50IGZkOwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpCi0gICAgICBmZCA9 IGZkb3V0OwotICAgIGVsc2UKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSAgICAgIGZkID0gdHR5ZmQ7 Ci0KLSNpZmRlZiBQbGFuOQotICAgIHJldHVybiAwOwotI2Vsc2UKLSNpZmRlZiBQT1NJWAotICAg IHJldHVybih0Y2ZsdXNoKGZkLFRDT0ZMVVNIKSk7Ci0jZWxzZQotI2lmZGVmIE9YT1MKLSAgICBy ZXR1cm4oaW9jdGwoZmQsVENGTFNILDEpKTsKLSNlbHNlCi0gICAgcmV0dXJuKDApOwkJCQkvKiBB bGwgb3RoZXJzLCBub3RoaW5nICovCi0jZW5kaWYgLyogT1hPUyAqLwotI2VuZGlmIC8qIFBPU0lY ICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLX0KLQotLyogSW50ZXJydXB0IEZ1bmN0aW9ucyAqLwot Ci0vKiBTZXQgdXAgdGVybWluYWwgaW50ZXJydXB0cyBvbiBjb25zb2xlIHRlcm1pbmFsICovCi0K LSNpZm5kZWYgRklPTlJFQUQJCQkvKiBXZSBkb24ndCBuZWVkIGVzY3RycCgpICovCi0jaWZuZGVm IFNFTEVDVAkJCQkvKiBpZiB3ZSBoYXZlIGFueSBvZiB0aGVzZS4uLiAqLwotI2lmbmRlZiBDS19Q T0xMCi0jaWZuZGVmIFJEQ0hLCi0KLSNpZm5kZWYgT1hPUwotI2lmZGVmIFNWT1JQT1NJWAotU0lH VFlQCi1lc2N0cnAoZm9vKSBpbnQgZm9vOyB7CQkJLyogdHJhcCBjb25zb2xlIGVzY2FwZXMgKF5c KSAqLwotICAgIHNpZ25hbChTSUdRVUlULFNJR19JR04pOyAgICAgICAgICAgIC8qIGlnbm9yZSB1 bnRpbCB0cmFwcGVkICovCi0gICAgY29uZXNjID0gMTsKLSAgICBkZWJ1ZyhGMTAxLCJlc2N0cnAg Y2F1Z2h0IFNJR1FVSVQiLCIiLGNvbmVzYyk7Ci19Ci0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0j ZW5kaWYgLyogT1hPUyAqLwotCi0jaWZkZWYgVjcKLSNpZm5kZWYgTUlOSVgyCi1TSUdUWVAKLWVz Y3RycChmb28pIGludCBmb287IHsJCQkvKiB0cmFwIGNvbnNvbGUgZXNjYXBlcyAoXlwpICovCi0g ICAgc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7ICAgICAgICAgICAgLyogaWdub3JlIHVudGlsIHRy YXBwZWQgKi8KLSAgICBjb25lc2MgPSAxOwotICAgIGRlYnVnKEYxMDEsImVzY3RycCBjYXVnaHQg U0lHUVVJVCIsIiIsY29uZXNjKTsKLX0KLSNlbmRpZiAvKiBNSU5JWDIgKi8KLSNlbmRpZiAvKiBW NyAqLwotCi0jaWZkZWYgQzcwCi1TSUdUWVAKLWVzY3RycChmb28pIGludCBmb287IHsJCQkvKiB0 cmFwIGNvbnNvbGUgZXNjYXBlcyAoXlwpICovCi0gICAgY29uZXNjID0gMTsKLSAgICBzaWduYWwo U0lHUVVJVCxTSUdfSUdOKTsgICAgICAgICAgICAvKiBpZ25vcmUgdW50aWwgdHJhcHBlZCAqLwot fQotI2VuZGlmIC8qIEM3MCAqLwotCi0jZW5kaWYgLyogUkRDSEsgKi8KLSNlbmRpZiAvKiBDS19Q T0xMICovCi0jZW5kaWYgLyogU0VMRUNUICovCi0jZW5kaWYgLyogRklPTlJFQUQgKi8KLQotLyog IEMgTyBOIEIgRyBUICAtLSAgQmFja2dyb3VuZCBUZXN0ICAqLwotCi1zdGF0aWMgaW50IGpjID0g MDsJCQkvKiAwID0gbm8gam9iIGNvbnRyb2wgKi8KLQotLyoKLSAgQ2FsbCB3aXRoIGZsYWcgPT0g MSB0byBwcmV2ZW50IHNpZ25hbCB0ZXN0LCB3aGljaCBjYW4gbm90IGJlIGV4cGVjdGVkCi0gIHRv IHdvcmsgZHVyaW5nIGZpbGUgdHJhbnNmZXIsIHdoZW4gU0lHSU5UIHByb2JhYmx5ICppcyogc2V0 IHRvIFNJR19JR04uCi0KLSAgQ2FsbCB3aXRoIGZsYWcgPT0gMCB0byB1c2UgdGhlIHNpZ25hbCB0 ZXN0LCBidXQgb25seSBpZiB0aGUgcHJvY2Vzcy1ncm91cAotICB0ZXN0IGZhaWxzLCBhcyBpdCBk b2VzIG9uIHNvbWUgVU5JWCBzeXN0ZW1zLCB3aGVyZSBnZXRwZ3JwKCkgaXMgYnVnZ3ksCi0gIHJl cXVpcmVzIGFuIGFyZ3VtZW50IHdoZW4gdGhlIG1hbiBwYWdlIHNheXMgaXQgZG9lc24ndCwgb3Ig dmljZSB2ZXJzYS4KLQotICBJZiBmbGFnID09IDAgYW5kIHRoZSBwcm9jZXNzLWdyb3VwIHRlc3Qg ZmFpbHMsIHRoZW4gd2UgZGV0ZXJtaW5lIGJhY2tncm91bmQKLSAgc3RhdHVzIHNpbXBseSAoYnV0 IG5vdCBuZWNlc3NhcmlseSByZWxpYWJseSkgZnJvbSBpc2F0dHkoKS4KLQotICBjb25iZ3QoKSBz ZXRzIHRoZSBnbG9iYWwgYmFja2dyZCA9IDEgaWYgd2UgYXBwZWFyIHRvIGJlIGluIHRoZSBiYWNr Z3JvdW5kLAotICBhbmQgdG8gMCBpZiB3ZSBzZWVtIHRvIGJlIGluIHRoZSBmb3JlZ3JvdW5kLiAg Y29uYmd0KCkgaXMgaGlnaGx5IHByb25lIHRvCi0gIG1pc2JlaGF2aW9yLgotKi8KLVZPSUQKLWNv bmJndChmbGFnKSBpbnQgZmxhZzsgewotICAgIGludCB4ID0gLTEsCQkJCS8qIHByb2Nlc3MgZ3Jv dXAgb3IgU0lHSU5UIHRlc3QgKi8KLSAgICAgICAgeSA9IDA7CQkJCS8qIGlzYXR0eSgpIHRlc3Qg Ki8KLS8qCi0gIENoZWNrIGZvciBiYWNrZ3JvdW5kIG9wZXJhdGlvbiwgZXZlbiBpZiBub3QgcnVu bmluZyBvbiByZWFsIHR0eSwgc28gdGhhdAotICBiYWNrZ3JvdW5kIGZsYWcgY2FuIGJlIHNldCBj b3JyZWN0bHkuICBJZiBiYWNrZ3JvdW5kIHN0YXR1cyBpcyBkZXRlY3RlZCwKLSAgdGhlbiBLZXJt aXQgd2lsbCBub3QgaXNzdWUgaXRzIGludGVyYWN0aXZlIHByb21wdCBvciBtb3N0IG1lc3NhZ2Vz LgotICBJZiB5b3VyIHByb21wdCBnb2VzIGF3YXksIHlvdSBjYW4gYmxhbWUgKGFuZCBmaXg/KSB0 aGlzIGZ1bmN0aW9uLgotKi8KLQotLyogVXNlIHByb2Nlc3MtZ3JvdXAgdGVzdCBpZiBwb3NzaWJs ZS4gKi8KLQotI2lmZGVmIFBPU0lYCQkJCS8qIFdlIGNhbiBkbyBpdCBpbiBQT1NJWCAqLwotI2Rl ZmluZSBQR1JPVVBfVAotI2Vsc2UKLSNpZmRlZiBCU0Q0CQkJCS8qIGFuZCBpbiBCU0QgNC54LiAq LwotI2RlZmluZSBQR1JPVVBfVAotI2Vsc2UKLSNpZmRlZiBIUFVYSk9CQ1RMCQkJLyogYW5kIGlu IG1vc3QgSFAtVVgncyAqLwotI2RlZmluZSBQR1JPVVBfVAotI2Vsc2UKLSNpZmRlZiBUSU9DR1BH UlAJCQkvKiBhbmQgYW55cGxhY2UgdGhhdCBoYXMgdGhpcyBpb2N0bC4gKi8KLSNkZWZpbmUgUEdS T1VQX1QKLSNlbmRpZiAvKiBUSU9DR1BHUlAgKi8KLSNlbmRpZiAvKiBIUFVYSk9CQ1RMICovCi0j ZW5kaWYgLyogQlNENCAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0KLSNpZmRlZiBNSVBTCQkJCS8q IEV4Y2VwdCBpZiBpdCBkb2Vzbid0IHdvcmsuLi4gKi8KLSN1bmRlZiBQR1JPVVBfVAotI2VuZGlm IC8qIE1JUFMgKi8KLQotI2lmZGVmIE1JTklYCi0jdW5kZWYgUEdST1VQX1QKLSNlbmRpZgkvKiBN SU5JWCAqLwotCi0jaWZkZWYgUEdST1VQX1QKLS8qCi0gIFNlbWktcmVsaWFibGUgcHJvY2Vzcy1n cm91cCB0ZXN0LiAgQ2hlY2sgd2hldGhlciB0aGlzIHByb2Nlc3MncyBncm91cCBpcwotICB0aGUg c2FtZSBhcyB0aGUgY29udHJvbGxpbmcgdGVybWluYWwncyBwcm9jZXNzIGdyb3VwLiAgVGhpcyB3 b3JrcyBpZiB0aGUKLSAgZ2V0cGdycCgpIGNhbGwgZG9lc24ndCBsaWUgKGFzIGl0IGRvZXMgaW4g dGhlIFNVTk9TIFN5c3RlbSBWIGVudmlyb25tZW50KS4KLSovCi0gICAgUElEX1QgbXlwZ3JwID0g KFBJRF9UKTA7CQkvKiBLZXJtaXQncyBwcm9jZXNzIGdyb3VwICovCi0gICAgUElEX1QgY3RwZ3Jw ID0gKFBJRF9UKTA7CQkvKiBUaGUgdGVybWluYWwncyBwcm9jZXNzIGdyb3VwICovCi0jaWZuZGVm IF9QT1NJWF9TT1VSQ0UKLS8qCi0gIFRoZSBnZXRwZ3JwKCkgcHJvdG90eXBlIGlzIG9idGFpbmVk IGZyb20gc3lzdGVtIGhlYWRlciBmaWxlcyBmb3IgUE9TSVgKLSAgYW5kIFN5cyBWIFI0IGNvbXBp bGF0aW9ucy4gIE90aGVyIHN5c3RlbXMsIHdobyBrbm93cy4gIFNvbWUgY29tcGxhaW4gYWJvdXQK LSAgYSBkdXBsaWNhdGUgZGVjbGFyYXRpb24gaGVyZSwgb3RoZXJzIGRvbid0LCBzbyBpdCdzIHNh ZmVyIHRvIGxlYXZlIGl0IGluCi0gIGlmIHdlIGRvbid0IGtub3cgZm9yIGNlcnRhaW4uCi0qLwot I2lmbmRlZiBTVlI0Ci0jaWZuZGVmIFBTMkFJWDEwCi0jaWZuZGVmIEhQVVg5Ci0gICAgZXh0ZXJu IFBJRF9UIGdldHBncnAoKTsKLSNlbmRpZiAvKiBIUFVYOSAqLwotI2VuZGlmIC8qIFBTMkFJWDEw ICovCi0jZW5kaWYgLyogU1ZSNCAqLwotI2VuZGlmIC8qIF9QT1NJWF9TT1VSQ0UgKi8KLQotLyog R2V0IG15IHByb2Nlc3MgZ3JvdXAuICovCi0KLSNpZmRlZiBTVlIzIC8qIE1heWJlIHRoaXMgc2hv dWxkIGJlIEFUVFNWPyAqLwotLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgZGVzY3JpYmVkIGluIFNW SUQgUjIgKi8KLSAgICBteXBncnAgPSBnZXRwZ3JwKCk7Ci0gICAgLyogZGVidWcoRjEwMSwiQVRU U1YgY29uYmd0IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7ICovCi0jZWxzZQotI2lm ZGVmIFBPU0lYCi0gICAgbXlwZ3JwID0gZ2V0cGdycCgpOwotICAgIC8qIGRlYnVnKEYxMDEsIlBP U0lYIGNvbmJndCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50KSBteXBncnApOyAqLwotI2Vsc2UKLSNp ZmRlZiBPU0ZQQwotICAgIG15cGdycCA9IGdldHBncnAoKTsKLSAgICAvKiBkZWJ1ZyhGMTAxLCJP U0YgY29uYmd0IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7ICovCi0jZWxzZQotI2lm ZGVmIFFOWAotICAgIG15cGdycCA9IGdldHBncnAoKTsKLSAgICAvKiBkZWJ1ZyhGMTAxLCJRTlgg Y29uYmd0IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7ICovCi0jZWxzZQotI2lmZGVm IE9TRjMyCQkJCS8qICh3YXMgT1NGNDApICovCi0gICAgbXlwZ3JwID0gZ2V0cGdycCgpOwotICAg IC8qIGRlYnVnKEYxMDEsIkRpZ2l0YWwgVU5JWCBjb25iZ3QgcHJvY2VzcyBncm91cCIsIiIsKGlu dCkgbXlwZ3JwKTsgKi8KLSNlbHNlIC8qIEJTRCwgVjcsIGV0YyAqLwotI2lmZGVmIE1JTklYMgot ICAgIG15cGdycCA9IGdldHBncnAoKTsKLSNlbHNlCi0gICAgbXlwZ3JwID0gZ2V0cGdycCgwKTsK LSNlbmRpZiAvKiBNSU5JWDIgKi8KLSAgICAvKiBkZWJ1ZyhGMTAxLCJCU0QgY29uYmd0IHByb2Nl c3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7ICovCi0jZW5kaWYgLyogT1NGMzIgKi8KLSNlbmRp ZiAvKiBRTlggKi8KLSNlbmRpZiAvKiBPU0ZQQyAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0jZW5k aWYgLyogU1ZSMyAqLwotCi0jaWZkZWYgTUlOSVgKLSAgICAvKiBNSU5JWCBkb2VzIG5vdCBzdXBw b3J0IGpvYiBjb250cm9sIHNvIEtlcm1pdCBpcyBhbHdheXMgaW4gZm9yZWdyb3VuZCAqLwotICAg IHggPSAwOwotCi0jZWxzZSAgLyogTm90IE1JTklYICovCi0KLS8qIE5vdyBnZXQgY29udHJvbGxp bmcgdHR5J3MgcHJvY2VzcyBncm91cCAqLwotI2lmZGVmIEJTRDQ0T1JQT1NJWAotICAgIGN0cGdy cCA9IHRjZ2V0cGdycCgxKTsJCS8qIFRoZSBQT1NJWCB3YXkgKi8KLSAgICAvKiBkZWJ1ZyhGMTAx LCJQT1NJWCBjb25iZ3QgdGVybWluYWwgcHJvY2VzcyBncm91cCIsIiIsKGludCkgY3RwZ3JwKTsg Ki8KLSNlbHNlCi0gICAgaW9jdGwoMSwgVElPQ0dQR1JQLCAmY3RwZ3JwKTsJLyogT3IgdGhlIEJT RCB3YXkgKi8KLSAgIC8qIGRlYnVnKEYxMDEsIm5vbi1QT1NJWCBjb25iZ3QgdGVybWluYWwgcHJv Y2VzcyBncm91cCIsIiIsKGludCkgY3RwZ3JwKTsgKi8KLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVgg Ki8KLQotICAgIGlmICgobXlwZ3JwID4gKFBJRF9UKSAwKSAmJiAoY3RwZ3JwID4gKFBJRF9UKSAw KSkKLSAgICAgIHggPSAobXlwZ3JwID09IGN0cGdycCkgPyAwIDogMTsJLyogSWYgdGhleSBkaWZm ZXIsIHRoZW4gYmFja2dyb3VuZC4gKi8KLSAgICBlbHNlIHggPSAtMTsJCQkvKiBJZiBlcnJvciwg cmVtZW1iZXIuICovCi0gICAgZGVidWcoRjEwMSwiY29uYmd0IHByb2Nlc3MgZ3JvdXAgdGVzdCIs IiIseCk7Ci0jZW5kaWYgLyogUEdST1VQX1QgKi8KLSNlbmRpZgkvKiBNSU5JWCAqLwotCi0vKiBU cnkgdG8gc2VlIGlmIGpvYiBjb250cm9sIGlzIGF2YWlsYWJsZSAqLwotCi0jaWZkZWYgTk9KQwkJ CQkvKiBVc2VyIG92ZXJyaWRlICovCi0gICAgamMgPSAwOwkJCQkvKiBObyBqb2IgY29udHJvbCBh bGxvd2VkICovCi0gICAgZGVidWcoRjExMSwiTk9KQyIsImpjIixqYyk7Ci0jZWxzZQotI2lmZGVm IEJTRDQ0Ci0gICAgamMgPSAxOwotI2Vsc2UKLSNpZmRlZiBTVlI0T1JQT1NJWAkJCS8qIFBPU0lY IGFjdHVhbGx5IHRlbGxzIHVzICovCi0gICAgZGVidWcoRjEwMCwiU1ZSNE9SUE9TSVggamMgdGVz dC4uLiIsIiIsMCk7Ci0jaWZkZWYgX1NDX0pPQl9DT05UUk9MCi0jaWZkZWYgX19ic2RpX18KLSAg ICBqYyA9IDE7Ci0jZWxzZQotI2lmZGVmIF9fMzg2QlNEX18KLSAgICBqYyA9IDE7Ci0jZWxzZQot ICAgIGpjID0gc3lzY29uZihfU0NfSk9CX0NPTlRST0wpOwkvKiBXaGF0ZXZlciBzeXN0ZW0gc2F5 cyAqLwotICAgIGlmIChqYyA8IDApIHsKLQlkZWJ1ZyhGMTAxLCJzeXNjb25mIGZhaWxzLCBqY3No ZWxsIiwiIixqY3NoZWxsKTsKLQlqYyA9IChqY2hkbHIgPT0gU0lHX0RGTCkgPyAxIDogMDsKLSAg ICB9IGVsc2UKLSAgICAgIGRlYnVnKEYxMTEsInN5c2NvbmYoX1NDX0pPQl9DT05UUk9MKSIsImpj IixqYyk7Ci0jZW5kaWYgLyogX18zODZCU0RfXyAqLwotI2VuZGlmIC8qIF9fYnNkaV9fICovCi0j ZWxzZQotI2lmZGVmIF9QT1NJWF9KT0JfQ09OVFJPTAotICAgIGpjID0gMTsJCQkJLyogQnkgZGVm aW5pdGlvbiAqLwotICAgIGRlYnVnKEYxMTEsIl9QT1NJWF9KT0JfQ09OVFJPTCBpcyBkZWZpbmVk IiwiamMiLGpjKTsKLSNlbHNlCi0gICAgamMgPSAwOwkJCQkvKiBBc3N1bWUgam9iIGNvbnRyb2wg bm90IGFsbG93ZWQgKi8KLSAgICBkZWJ1ZyhGMTExLCJTVlI0T1JQT1NJWCBfU0MvUE9TSVhfSk9C X0NPTlRST0wgbm90IGRlZmluZWQiLCJqYyIsamMpOwotI2VuZGlmIC8qIF9QT1NJWF9KT0JfQ09O VFJPTCAqLwotI2VuZGlmIC8qIF9TQ19KT0JfQ09OVFJPTCAqLwotI2Vsc2UKLSNpZmRlZiBCU0Q0 Ci0gICAgamMgPSAxOwkJCQkvKiBKb2IgY29udHJvbCBhbGxvd2VkICovCi0gICAgZGVidWcoRjEx MSwiQlNEIGpvYiBjb250cm9sIiwiamMiLGpjKTsKLSNlbHNlCi0jaWZkZWYgU1ZSM0pDCi0gICAg amMgPSAxOwkJCQkvKiBKQyBhbGxvd2VkICovCi0gICAgZGVidWcoRjExMSwiU1ZSMyBqb2IgY29u dHJvbCIsImpjIixqYyk7Ci0jZWxzZQotI2lmZGVmIE9YT1MKLSAgICBqYyA9IDE7CQkJCS8qIEpD IGFsbG93ZWQgKi8KLSAgICBkZWJ1ZyhGMTExLCJYL09TIGpvYiBjb250cm9sIiwiamMiLGpjKTsK LSNlbHNlCi0jaWZkZWYgSFBVWDkKLSAgICBqYyA9IDE7CQkJCS8qIEpDIGFsbG93ZWQgKi8KLSAg ICBkZWJ1ZyhGMTExLCJIUC1VWCA5LjAgam9iIGNvbnRyb2wiLCJqYyIsamMpOwotI2Vsc2UKLSNp ZmRlZiBIUFVYMTAKLSAgICBqYyA9IDE7CQkJCS8qIEpDIGFsbG93ZWQgKi8KLSAgICBkZWJ1ZyhG MTExLCJIUC1VWCAxMC4wIGpvYiBjb250cm9sIiwiamMiLGpjKTsKLSNlbHNlCi0gICAgamMgPSAw OwkJCQkvKiBKQyBub3QgYWxsb3dlZCAqLwotICAgIGRlYnVnKEYxMTEsImpvYiBjb250cm9sIGNh dGNoLWFsbCIsImpjIixqYyk7Ci0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYgLyogSFBVWDkg Ki8KLSNlbmRpZiAvKiBPWE9TICovCi0jZW5kaWYgLyogU1ZSM0pDICovCi0jZW5kaWYgLyogQlNE NCAqLwotI2VuZGlmIC8qIFNWUjRPUlBPU0lYICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRp ZiAvKiBOT0pDICovCi0gICAgZGVidWcoRjEwMSwiY29uYmd0IGpjIiwiIixqYyk7Ci0jaWZuZGVm IE5PSkMKLSAgICBkZWJ1ZyhGMTAxLCJjb25iZ3QgamNzaGVsbCIsIiIsamNzaGVsbCk7Ci0vKgot ICBBdCB0aGlzIHBvaW50LCBpZiBqYyA9PSAxIGJ1dCBqY3NoZWxsID09IDAsIGl0IG1lYW5zIHRo YXQgdGhlIE9TIHN1cHBvcnRzCi0gIGpvYiBjb250cm9sLCBidXQgdGhlIHNoZWxsIG9yIG90aGVy IHByb2Nlc3Mgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgZG9lcyBub3QKLSAgKGpjc2hlbGwgaXMgc2V0 IGluIHN5c2luaXQoKSkgYW5kIHNvIGlmIHdlIHN1c3BlbmQgb3Vyc2VsdmVzLCBub3RoaW5nIGdv b2QKLSAgd2lsbCBjb21lIG9mIGl0LiAgU28uLi4KLSovCi0gICAgaWYgKGpjIDwgMCkgamMgPSAw OwotICAgIGlmIChqYyA+IDAgJiYgamNzaGVsbCA9PSAwKSBqYyA9IDA7Ci0jZW5kaWYgLyogTk9K QyAqLwotCi0vKgotICBBbm90aGVyIGJhY2tncm91bmQgdGVzdC4KLSAgVGVzdCBpZiBTSUdJTlQg KHRlcm1pbmFsIGludGVycnVwdCkgaXMgc2V0IHRvIFNJR19JR04gKGlnbm9yZSksCi0gIHdoaWNo IGlzIGRvbmUgYnkgdGhlIHNoZWxsIChzaCkgaWYgdGhlIHByb2dyYW0gaXMgc3RhcnRlZCB3aXRo ICcmJy4KLSAgVW5mb3J0dW5hdGVseSwgdGhpcyBpcyBOT1QgZG9uZSBieSBjc2ggb3Iga3NoIHNv IHdhdGNoIG91dCEKLSAgTm90ZSwgaXQncyBzYWZlIHRvIHNldCBTSUdJTlQgdG8gU0lHX0lHTiBo ZXJlLCBiZWNhdXNlIGZ1cnRoZXIgZG93bgotICB3ZSBhbHdheXMgc2V0IGl0IHRvIHNvbWV0aGlu ZyBlbHNlLgotICBOb3RlOiBhcyBvZiAxNiBKdWwgMTk5OSwgd2UgYWxzbyBza2lwIHRoaXMgdGVz dCBpZiB3ZSBzZXQgU0lHSU5UIHRvCi0gIFNJR19JR04gb3Vyc2VsdmVzLgotKi8KLSAgICBpZiAo eCA8IDAgJiYgIWZsYWcgJiYgIXNpZ2ludF9pZ24pIHsgLyogRGlkbid0IGdldCBnb29kIHJlc3Vs dHMgYWJvdmUuLi4gKi8KLQotCVNJR1RZUCAoKm9zaWdpbnQpKCk7Ci0KLQlvc2lnaW50ID0gc2ln bmFsKFNJR0lOVCxTSUdfSUdOKTsJLyogV2hhdCBpcyBTSUdJTlQgc2V0IHRvPyAqLwotCXNpZ2lu dF9pZ24gPSAxOwotCXggPSAob3NpZ2ludCA9PSBTSUdfSUdOKSA/IDEgOiAwOwkvKiBTSUdfSUdO PyAqLwotCS8qIGRlYnVnKEYxMDEsImNvbmJndCBvc2lnaW50IiwiIixvc2lnaW50KTsgKi8KLQkv KiBkZWJ1ZyhGMTAxLCJjb25iZ3Qgc2lnbmFsIHRlc3QiLCIiLHgpOyAqLwotICAgIH0KLQotLyog QWxzbyBjaGVjayB0byBzZWUgaWYgd2UncmUgcnVubmluZyB3aXRoIHJlZGlyZWN0ZWQgc3RkaW8u ICovCi0vKiBUaGlzIGlzIG5vdCByZWFsbHkgYmFja2dyb3VuZCBvcGVyYXRpb24sIGJ1dCB3ZSB3 YW50IHRvIGFjdCBhcyB0aG91Z2ggKi8KLS8qIGl0IHdlcmUuICovCi0KLSNpZmRlZiBJS1NECi0g ICAgaWYgKGluc2VydmVyKSB7CQkJLyogSW50ZXJuZXQgS2VybWl0IFNlcnZlciAqLwotCWJhY2tn cmQgPSAwOwkJCS8qIGlzIG5vdCBpbiB0aGUgYmFja2dyb3VuZCAqLwotCXJldHVybjsKLSAgICB9 Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0gICAgeSA9IChpc2F0dHkoMCkgJiYgaXNhdHR5KDEpKSA/ IDEgOiAwOwotICAgIGRlYnVnKEYxMDEsImNvbmJndCBpc2F0dHkgdGVzdCIsIiIseSk7Ci0KLSNp ZmRlZiBCU0QyOQotLyogVGhlIHByb2Nlc3MgZ3JvdXAgYW5kL29yIHNpZ25hbCB0ZXN0IGRvZXNu J3Qgd29yayB1bmRlciB0aGVzZS4uLiAqLwotICAgIGJhY2tncmQgPSAheTsKLSNlbHNlCi0jaWZk ZWYgc3hhRTUwCi0gICAgYmFja2dyZCA9ICF5OwotI2Vsc2UKLSNpZmRlZiBNSU5JWAotICAgIGJh Y2tncmQgPSAheTsKLSNlbHNlCi0jaWZkZWYgTUlOSVgyCi0gICAgYmFja2dyZCA9ICF5OwotI2Vs c2UKLSAgICBpZiAoeCA+IC0xKQotICAgICAgYmFja2dyZCA9ICh4IHx8ICF5KSA/IDEgOiAwOwot ICAgIGVsc2UgYmFja2dyZCA9ICF5OwotI2VuZGlmIC8qIEJTRDI5ICovCi0jZW5kaWYgLyogc3hh RTUwICovCi0jZW5kaWYgLyogTUlOSVggKi8KLSNlbmRpZiAvKiBNSU5JWDIgKi8KLSAgICBkZWJ1 ZyhGMTAxLCJjb25iZ3QgYmFja2dyZCIsIiIsYmFja2dyZCk7Ci19Ci0KLS8qICBDIE8gTiBJIE4g VCAgLS0gIENvbnNvbGUgSW50ZXJydXB0IHNldHRlciAgKi8KLQotLyoKLSAgRmlyc3QgYXJnIGlz IHBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gaGFuZGxlIFNJR1RFUk0gJiBTSUdJTlQgKGxpa2UgQ3Ry bC1DKS4KLSAgU2Vjb25kIGFyZyBpcyBwb2ludGVyIHRvIGZ1bmN0aW9uIHRvIGhhbmRsZSBTSUdU U1RQIChzdXNwZW5kKS4KLSovCi0KLVZPSUQJCQkJCS8qIFNldCB0ZXJtaW5hbCBpbnRlcnJ1cHQg dHJhcHMuICovCi0jaWZkZWYgQ0tfQU5TSUMKLSNpZmRlZiBhcG9sbG8KLWNvbmludChmLHMpIFNJ R1RZUCAoKmYpKCksICgqcykoKTsKLSNlbHNlCi1jb25pbnQoU0lHVFlQICgqZikoaW50KSwgU0lH VFlQICgqcykoaW50KSkKLSNlbmRpZiAvKiBhcG9sbG8gKi8KLSNlbHNlCi1jb25pbnQoZixzKSBT SUdUWVAgKCpmKSgpLCAoKnMpKCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGNvbmludCAq LyB7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJjb25pbnQgY29uaXN0YXRlIiwiIixjb25pc3RhdGUpOwot Ci0gICAgY29uYmd0KDApOwkJCQkvKiBEbyBiYWNrZ3JvdW5kIHRlc3QuICovCi0KLS8qIFNldCB0 aGUgZGVzaXJlZCBoYW5kbGVycyBmb3IgaGFuZ3VwIGFuZCBzb2Z0d2FyZSB0ZXJtaW5hdGlvbi4g Ki8KLQotI2lmZGVmIFNJR1RFUk0KLSAgICBzaWduYWwoU0lHVEVSTSxmKTsgICAgICAgICAgICAg ICAgICAvKiBTb2Z0d2FyZSB0ZXJtaW5hdGlvbiAqLwotI2VuZGlmIC8qIFNJR1RFUk0gKi8KLQot LyoKLSAgUHJpb3IgdG8gSnVseSAxOTk5IHdlIHVzZWQgdG8gY2FsbCBzaWdodXAoKSBoZXJlIGJ1 dCBub3cgaXQncyBjYWxsZWQgaW4KLSAgc3lzaW5pdCgpIHNvIFNJR0hVUCBjYW4gYmUgY2F1Z2h0 IGR1cmluZyBleGVjdXRpb24gb2YgdGhlIGluaXQgZmlsZSBvcgotICBhIGtlcmJhbmcgc2NyaXB0 LgotKi8KLQotLyogTm93IGhhbmRsZSBrZXlib2FyZCBzdG9wLCBxdWl0LCBhbmQgaW50ZXJydXB0 IHNpZ25hbHMuICovCi0vKiBDaGVjayBpZiBpbnZva2VkIGluIGJhY2tncm91bmQgLS0gaWYgc28g c2lnbmFscyBzZXQgdG8gYmUgaWdub3JlZC4gKi8KLS8qIEhvd2V2ZXIsIGlmIHJ1bm5pbmcgdW5k ZXIgYSBqb2IgY29udHJvbCBzaGVsbCwgZG9uJ3QgaWdub3JlIHRoZW0uICovCi0vKiBXZSB3b24n dCBiZSBnZXR0aW5nIGFueSwgYXMgd2UgYXJlbid0IGluIHRoZSB0ZXJtaW5hbCdzIHByb2Nlc3Mg Z3JvdXAuICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJjb25pbnQgYmFja2dyZCIsIiIsYmFja2dyZCk7 Ci0gICAgZGVidWcoRjEwMSwiY29uaW50IGpjIiwiIixqYyk7Ci0KLSAgICBpZiAoYmFja2dyZCAm JiAhamMpIHsJCS8qIEluIGJhY2tncm91bmQsIGlnbm9yZSBzaWduYWxzICovCi0JZGVidWcoRjEw MSwiY29uaW50IGJhY2tncm91bmQgaWdub3Jpbmcgc2lnbmFscywgamMiLCIiLGpjKTsKLSNpZmRl ZiBTSUdUU1RQCi0gICAgICAgIHNpZ25hbChTSUdUU1RQLFNJR19JR04pOyAgICAgICAgLyogS2V5 Ym9hcmQgc3RvcCAqLwotI2VuZGlmIC8qIFNJR1RTVFAgKi8KLSAgICAgICAgc2lnbmFsKFNJR1FV SVQsU0lHX0lHTik7ICAgICAgICAvKiBLZXlib2FyZCBxdWl0ICovCi0gICAgICAgIHNpZ25hbChT SUdJTlQsU0lHX0lHTik7ICAgICAgICAgLyogS2V5Ym9hcmQgaW50ZXJydXB0ICovCi0Jc2lnaW50 X2lnbiA9IDE7Ci0JY29uaXN0YXRlID0gQ09OSV9OT0k7Ci0gICAgfSBlbHNlIHsJCQkJLyogRWxz ZSBpbiBmb3JlZ3JvdW5kIG9yIHN1c3BlbmRlZCAqLwotCWRlYnVnKEYxMDEsImNvbmludCBmb3Jl Z3JvdW5kIGNhdGNoaW5nIHNpZ25hbHMsIGpjIiwiIixqYyk7Ci0gICAgICAgIHNpZ25hbChTSUdJ TlQsZik7ICAgICAgICAgICAgICAgLyogQ2F0Y2ggdGVybWluYWwgaW50ZXJydXB0ICovCi0Jc2ln aW50X2lnbiA9IChmID09IFNJR19JR04pID8gMSA6IDA7Ci0KLSNpZmRlZiBTSUdUU1RQCQkJCS8q IEtleWJvYXJkIHN0b3AgKHN1c3BlbmQpICovCi0JLyogZGVidWcoRjEwMSwiY29uaW50IFNJR1NU U1RQIiwiIixzKTsgKi8KLQlpZiAocyA9PSBOVUxMKSBzID0gU0lHX0RGTDsKLSNpZmRlZiBOT0pD CQkJCS8qIE5vIGpvYiBjb250cm9sIGFsbG93ZWQuICovCi0Jc2lnbmFsKFNJR1RTVFAsU0lHX0lH Tik7Ci0jZWxzZQkJCQkJLyogSm9iIGNvbnRyb2wgYWxsb3dlZCAqLwotCWlmIChqYykJCQkJLyog aWYgYXZhaWxhYmxlLiAqLwotCSAgc2lnbmFsKFNJR1RTVFAscyk7Ci0JZWxzZQotCSAgc2lnbmFs KFNJR1RTVFAsU0lHX0lHTik7Ci0jZW5kaWYgLyogTk9KQyAqLwotI2VuZGlmIC8qIFNJR1RTVFAg Ki8KLQotI2lmbmRlZiBPWE9TCi0jaWZkZWYgU1ZPUlBPU0lYCi0jaWZuZGVmIEZJT05SRUFECQkJ LyogV2F0Y2ggb3V0LCB3ZSBkb24ndCBrbm93IHRoaXMuLi4gKi8KLSNpZm5kZWYgU0VMRUNUCi0j aWZuZGVmIENLX1BPTEwKLSNpZm5kZWYgUkRDSEsKLSAgICAgICAgc2lnbmFsKFNJR1FVSVQsZXNj dHJwKTsgICAgICAgICAvKiBRdWl0IHNpZ25hbCwgU3lzIElJSS9WLiAqLwotI2VuZGlmIC8qIFJE Q0hLICovCi0jZW5kaWYgLyogQ0tfUE9MTCAqLwotI2VuZGlmIC8qIFNFTEVDVCAqLwotI2VuZGlm IC8qIEZJT05SRUFEICovCi0gICAgICAgIGlmIChjb25lc2MpIGNvbmVzYyA9IDA7ICAgICAgICAg LyogQ2xlYXIgb3V0IHBlbmRpbmcgZXNjYXBlcyAqLwotI2Vsc2UKLSNpZmRlZiBWNwotICAgICAg ICBzaWduYWwoU0lHUVVJVCxlc2N0cnApOyAgICAgICAgIC8qIFY3IGxpa2UgU3lzIElJSS9WICov Ci0gICAgICAgIGlmIChjb25lc2MpIGNvbmVzYyA9IDA7Ci0jZWxzZQotI2lmZGVmIGFlZ2lzCi0g ICAgICAgIHNpZ25hbChTSUdRVUlULGYpOyAgICAgICAgICAgICAgLyogQXBvbGxvLCBjYXRjaCBp dCBsaWtlIG90aGVycy4gKi8KLSNlbHNlCi0gICAgICAgIHNpZ25hbChTSUdRVUlULFNJR19JR04p OyAgICAgICAgLyogT3RoZXJzLCBpZ25vcmUgbGlrZSA0RCAmIGVhcmxpZXIuICovCi0jZW5kaWYg LyogYWVnaXMgKi8KLSNlbmRpZiAvKiBWNyAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2Vu ZGlmIC8qIE9YT1MgKi8KLQljb25pc3RhdGUgPSBDT05JX0lOVDsKLSAgICB9Ci19Ci0KLQotLyog IEMgTyBOIE4gTyBJICAtLSAgUmVzZXQgY29uc29sZSB0ZXJtaW5hbCBpbnRlcnJ1cHRzICovCi0K LVZPSUQKLWNvbm5vaSgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb25zb2xl LW5vLWludGVycnVwdHMgKi8KLQotICAgIGRlYnVnKEYxMDEsImNvbm5vaSBjb25pc3RhdGUiLCIi LGNvbmlzdGF0ZSk7Ci0jaWZkZWYgU0lHVFNUUAotICAgIHNpZ25hbChTSUdUU1RQLFNJR19JR04p OwkJLyogU3VzcGVuZCAqLwotI2VuZGlmIC8qIFNJR1RTVFAgKi8KLSAgICBjb25pbnQoU0lHX0lH TixTSUdfSUdOKTsJCS8qIEludGVycnVwdCAqLwotICAgIHNpZ2ludF9pZ24gPSAxOwkJCS8qIFJl bWVtYmVyIHdlIGRpZCB0aGlzIG91cnNlbHZlcyAqLwotI2lmZGVmIFNJR1FVSVQKLSAgICBzaWdu YWwoU0lHUVVJVCxTSUdfSUdOKTsJCS8qIFF1aXQgKi8KLSNlbmRpZiAvKiBTSUdRVUlUICovCi0j aWZkZWYgU0lHVEVSTQotICAgIHNpZ25hbChTSUdURVJNLFNJR19JR04pOwkJLyogVGVybSAqLwot I2VuZGlmIC8qIFNJR1RFUk0gKi8KLSAgICBjb25pc3RhdGUgPSBDT05JX05PSTsKLX0KLQotLyog IEkgTiBJIFQgUiBBIFcgUSAgLS0gIFNldCB1cCB0byByZWFkIC9kZXYva21lbSBmb3IgY2hhcmFj dGVyIGNvdW50LiAgKi8KLQotI2lmZGVmICBWNwotLyoKLSBVc2VkIGluIFZlcnNpb24gNyB0byBz aW11bGF0ZSBCZXJrZWxleSdzIEZJT05SRUFEIGlvY3RsIGNhbGwuICBUaGlzCi0gZWxpbWluYXRl cyBibG9ja2luZyBvbiBhIHJlYWQsIGJlY2F1c2Ugd2UgY2FuIHJlYWQgL2Rldi9rbWVtIHRvIGdl dCB0aGUKLSBudW1iZXIgb2YgY2hhcmFjdGVycyBhdmFpbGFibGUgZm9yIHJhdyBpbnB1dC4gIElm IHlvdXIgc3lzdGVtIGNhbid0Ci0gb3IgeW91IHdvbid0IGxldCB0aGUgd29ybGQgcmVhZCAvZGV2 L2ttZW0gdGhlbiB5b3UgbXVzdCBmaWd1cmUgb3V0IGEKLSBkaWZmZXJlbnQgd2F5IHRvIGRvIHRo ZSBjb3VudGluZyBvZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZSwgb3IgZWxzZSByZXBsYWNlCi0gdGhp cyBieSBhIGR1bW15IGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMgMC4KLSovCi0vKgotICog Q2FsbCB0aGlzIHJvdXRpbmUgYXM6IGluaXRyYXdxKHR0eSkKLSAqIHdoZXJlIHR0eSBpcyB0aGUg ZmlsZSBkZXNjcmlwdG9yIG9mIGEgdGVybWluYWwuICBJdCB3aWxsIHJldHVybgotICogKGFzIGEg Y2hhciAqKSB0aGUga2VybmVsLW1vZGUgbWVtb3J5IGFkZHJlc3Mgb2YgdGhlIHJhd3EgY2hhcmFj dGVyCi0gKiBjb3VudCwgd2hpY2ggbWF5IHRoZW4gYmUgcmVhZC4gIEl0IGhhcyB0aGUgc2lkZS1l ZmZlY3Qgb2YgZmx1c2hpbmcKLSAqIGlucHV0IG9uIHRoZSB0ZXJtaW5hbC4KLSAqLwotLyoKLSAq IEpvaG4gTWFja2luLCBQaHlzaW9sb2d5IERlcHQuLCBVbml2ZXJzaXR5IG9mIFN5ZG5leSAoQXVz dHJhbGlhKQotICogLi4uIWRlY3ZheCFtdWxnYSFwaHlzaW9sLnN1Lm96IWpvaG4KLSAqCi0gKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhpcyBjb2Rl LCBhcwotICogbG9uZyBhcyB0aGlzIGNvbW1lbnQgaXMgcmV0YWluZWQgdW5tb2RpZmllZCBhbmQg bm8gY29tbWVyY2lhbAotICogYWR2YW50YWdlIGlzIGdhaW5lZC4KLSAqLwotI2lmbmRlZiBNSU5J WAotI2lmbmRlZiBNSU5JWDIKLSNpZm5kZWYgQ09IRVJFTlQKLSNpbmNsdWRlIDxhLm91dC5oPgot I2luY2x1ZGUgPHN5cy9wcm9jLmg+Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSNlbmRpZiAvKiBN SU5JWDIgKi8KLSNlbmRpZiAvKiBNSU5JWCAqLwotCi0jaWZkZWYgQ09IRVJFTlQKLSNpbmNsdWRl IDxsLm91dC5oPgotI2luY2x1ZGUgPHN5cy9wcm9jLmg+Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8K LQotY2hhciAqCi1pbml0cmF3cSh0dHkpIGludCB0dHk7IHsKLSNpZmRlZiBNSU5JWAotICAgIHJl dHVybigwKTsKLSNlbHNlCi0jaWZkZWYgTUlOSVgyCi0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSNp ZmRlZiBVVFMyNAotICAgIHJldHVybigwKTsKLSNlbHNlCi0jaWZkZWYgQlNEMjkKLSAgICByZXR1 cm4oMCk7Ci0jZWxzZQotICAgIGxvbmcgbHNlZWsoKTsKLSAgICBzdGF0aWMgc3RydWN0IG5saXN0 IG5sW10gPSB7Ci0gICAgICAgIHtQUk9DTkFNRX0sCi0gICAgICAgIHtOUFJPQ05BTUV9LAotICAg ICAgICB7IiJ9Ci0gICAgfTsKLSAgICBzdGF0aWMgc3RydWN0IHByb2MgKnBwOwotICAgIGNoYXIg KnFhZGRyLCAqcCwgYzsKLSAgICBpbnQgbTsKLSAgICBQSURfVCBwaWQsIG1lOwotICAgIE5QVFlQ RSB4cHJvYzsgICAgICAgICAgICAgICAgICAgICAgIC8qIEl0cyB0eXBlIGlzIGRlZmluZWQgaW4g bWFrZWZpbGUuICovCi0gICAgaW50IGNhdGNoKCk7Ci0KLSAgICBtZSA9IGdldHBpZCgpOwotICAg IGlmICgobSA9IG9wZW4oIi9kZXYva21lbSIsIDApKSA8IDApIGVycigia21lbSIpOwotICAgIG5s aXN0KEJPT1ROQU1FLCBubCk7Ci0gICAgaWYgKG5sWzBdLm5fdHlwZSA9PSAwKSBlcnIoInByb2Mg YXJyYXkiKTsKLQotICAgIGlmIChubFsxXS5uX3R5cGUgPT0gMCkgZXJyKCJucHJvYyIpOwotCi0g ICAgbHNlZWsobSwgKGxvbmcpKG5sWzFdLm5fdmFsdWUpLCAwKTsKLSAgICByZWFkIChtLCAmeHBy b2MsIHNpemVvZih4cHJvYykpOwotICAgIHNhdmFsID0gc2lnbmFsKFNJR0FMUk0sIGNhdGNoKTsK LSAgICBpZiAoKHBpZCA9IGZvcmsoKSkgPT0gMCkgewotICAgICAgICB3aGlsZSgxKQotICAgICAg ICAgICAgcmVhZCh0dHksICZjLCAxKTsKLSAgICB9Ci0gICAgYWxhcm0oMik7Ci0KLSAgICBpZihz ZXRqbXAoampidWYpID09IDApIHsKLSAgICAgICAgd2hpbGUoMSkKLQkgIHJlYWQodHR5LCAmYywg MSk7Ci0gICAgfQotICAgIHNpZ25hbChTSUdBTFJNLCBTSUdfREZMKTsKLQotI2lmZGVmIERJUkVD VAotICAgIHBwID0gKHN0cnVjdCBwcm9jICopIG5sWzBdLm5fdmFsdWU7Ci0jZWxzZQotICAgIGlm IChsc2VlayhtLCAobG9uZykobmxbMF0ubl92YWx1ZSksIDApIDwgMEwpIGVycigic2VlayIpOwot ICAgIGlmIChyZWFkKG0sICZwcCwgc2l6ZW9mKHBwKSkgIT0gc2l6ZW9mKHBwKSkgIGVycigibm8g cmVhZCBvZiBwcm9jIHB0ciIpOwotI2VuZGlmCi0gICAgbHNlZWsobSwgKGxvbmcpKG5sWzFdLm5f dmFsdWUpLCAwKTsKLSAgICByZWFkKG0sICZ4cHJvYywgc2l6ZW9mKHhwcm9jKSk7Ci0KLSAgICBp ZiAobHNlZWsobSwgKGxvbmcpcHAsIDApIDwgMEwpIGVycigiQ2FuJ3Qgc2VlayB0byBwcm9jIik7 Ci0gICAgaWYgKChwID0gbWFsbG9jKHhwcm9jICogc2l6ZW9mKHN0cnVjdCBwcm9jKSkpID09IE5V TEwpIGVycigibWFsbG9jIik7Ci0gICAgaWYgKHJlYWQobSxwLHhwcm9jICogc2l6ZW9mKHN0cnVj dCBwcm9jKSkgIT0geHByb2Mqc2l6ZW9mKHN0cnVjdCBwcm9jKSkKLSAgICAgICAgZXJyKCJyZWFk IHByb2MgdGFibGUiKTsKLSAgICBmb3IgKHBwID0gKHN0cnVjdCBwcm9jICopcDsgeHByb2MgPiAw OyAtLXhwcm9jLCArK3BwKSB7Ci0gICAgICAgIGlmIChwcCAtPiBwX3BpZCA9PSAoc2hvcnQpIHBp ZCkgZ290byBpb3V0OwotICAgIH0KLSAgICBlcnIoIm5vIHN1Y2ggcHJvYyIpOwotCi1pb3V0Ogot ICAgIGNsb3NlKG0pOwotICAgIHFhZGRyID0gKGNoYXIgKikocHAgLT4gcF93Y2hhbik7Ci0gICAg ZnJlZSAocCk7Ci0gICAga2lsbChwaWQsIFNJR0tJTEwpOwotICAgIHdhaXQoKFdBSVRfVCAqKTAp OwotICAgIHJldHVybiAocWFkZHIpOwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi19 Ci0KLS8qICBNb3JlIFY3LXN1cHBvcnQgZnVuY3Rpb25zLi4uICAqLwotCi1zdGF0aWMgVk9JRAot ZXJyKHMpIGNoYXIgKnM7IHsKLSAgICBjaGFyIGJ1ZlsyMDBdOwotCi0gICAgY2ttYWttc2coYnVm LDIwMCwiZmF0YWwgZXJyb3IgaW4gaW5pdHJhd3E6ICIsIHMsIE5VTEwsIE5VTEwpOwotICAgIHBl cnJvcihidWYpOwotICAgIGRvZXhpdCgxLC0xKTsKLX0KLQotc3RhdGljIFZPSUQKLWNhdGNoKGZv bykgaW50IGZvbzsgewotICAgIGxvbmdqbXAoampidWYsIC0xKTsKLX0KLQotCi0vKiAgRyBFIE4g QiBSIEsgIC0tICBTaW11bGF0ZSBhIG1vZGVtIGJyZWFrLiAgKi8KLQotI2lmZGVmIE1JTklYCi0j ZGVmaW5lIEJTUEVFRCBCMTEwCi0jZWxzZQotI2lmZGVmIE1JTklYMgotI2RlZmluZSBCU1BFRUQg QjExMAotI2Vsc2UKLSNkZWZpbmUgQlNQRUVEIEIxNTAKLSNlbmRpZiAvKiBNSU5JWDIgKi8KLSNl bmRpZiAvKiBNSU5JWCAqLwotCi0jaWZuZGVmIE1JTklYMgotVk9JRAotZ2VuYnJrKGZuLG1zZWMp IGludCBmbiwgbXNlYzsgewotICAgIHN0cnVjdCBzZ3R0eWIgdHRidWY7Ci0gICAgaW50IHJldCwg c29zcGVlZCwgeCwgeTsKLQotICAgIHJldCA9IGlvY3RsKGZuLCBUSU9DR0VUUCwgJnR0YnVmKTsK LSAgICBzb3NwZWVkID0gdHRidWYuc2dfb3NwZWVkOwotICAgIHR0YnVmLnNnX29zcGVlZCA9IEJT UEVFRDsKLSAgICByZXQgPSBpb2N0bChmbiwgVElPQ1NFVFAsICZ0dGJ1Zik7Ci0gICAgeSA9IChp bnQpc3RybGVuKGJybnVscyk7Ci0gICAgeCA9ICggQlNQRUVEICogMTAwICkgLyBtc2VjOwotICAg IGlmICh4ID4geSkgeCA9IHk7Ci0gICAgcmV0ID0gd3JpdGUoZm4sIGJybnVscywgKCggQlNQRUVE ICogMTAwICkgLyBtc2VjICkpOwotICAgIHR0YnVmLnNnX29zcGVlZCA9IHNvc3BlZWQ7Ci0gICAg cmV0ID0gaW9jdGwoZm4sIFRJT0NTRVRQLCAmdHRidWYpOwotICAgIHJldCA9IHdyaXRlKGZuLCAi QCIsIDEpOwotICAgIHJldHVybjsKLX0KLSNlbmRpZiAvKiBNSU5JWDIgKi8KLQotI2lmZGVmIE1J TklYMgotaW50Ci1nZW5icmsoZm4sbXNlYykgaW50IGZuLCBtc2VjOyB7Ci0gICAgc3RydWN0IHRl cm1pb3MgdHRidWY7Ci0gICAgaW50IHJldCwgeCwgeTsKLSAgICBzcGVlZF90IHNvc3BlZWQ7Ci0K LSAgICByZXQgPSB0Y2dldGF0dHIoZm4sICZ0dGJ1Zik7Ci0gICAgc29zcGVlZCA9IHR0YnVmLmNf b3NwZWVkOwotICAgIHR0YnVmLmNfb3NwZWVkID0gQlNQRUVEOwotICAgIHJldCA9IHRjc2V0YXR0 cihmbixUQ1NBRFJBSU4sICZ0dGJ1Zik7Ci0gICAgeSA9IChpbnQpc3RybGVuKGJybnVscyk7Ci0g ICAgeCA9ICggQlNQRUVEICogMTAwICkgLyBtc2VjOwotICAgIGlmICh4ID4geSkgeCA9IHk7Ci0g ICAgcmV0ID0gd3JpdGUoZm4sIGJybnVscywgKCggQlNQRUVEICogMTAwICkgLyBtc2VjICkpOwot ICAgIHR0YnVmLmNfb3NwZWVkID0gc29zcGVlZDsKLSAgICByZXQgPSB0Y3NldGF0dHIoZm4sIFRD U0FEUkFJTiwgJnR0YnVmKTsKLSAgICByZXQgPSB3cml0ZShmbiwgIkAiLCAxKTsKLSAgICByZXR1 cm4gcmV0OwotfQotI2VuZGlmIC8qIE1JTklYMiAqLwotI2VuZGlmIC8qIFY3ICovCi0KLS8qCi0g IEkgTiBDIEggSyAgLS0gIENoZWNrIGlmIGNoYXJzIHdhaXRpbmcgdG8gYmUgcmVhZCBvbiBnaXZl biBmaWxlIGRlc2NyaXB0b3IuCi0KLSAgVGhpcyByb3V0aW5lIGlzIGEgbWVyZ2VyIG9mIHR0Y2hr KCkgYW5kIGNvbmNoaygpLgotICBDYWxsIHdpdGg6Ci0gICAgY2hhbm5lbCA9PSAwIHRvIGNoZWNr IGNvbnNvbGUuCi0gICAgY2hhbm5lbCA9PSAxIHRvIGNoZWNrIGNvbW11bmljYXRpb25zIGNvbm5l Y3Rpb24uCi0gIGFuZDoKLSAgICBmZCA9IGZpbGUgZGVzY3JpcHRvci4KLSAgUmV0dXJuczoKLSAg ID49IDA6IG51bWJlciBvZiBjaGFyYWN0ZXJzIHdhaXRpbmcsIDAgb3IgZ3JlYXRlciwKLSAgICAg LTE6IG9uIGFueSBraW5kIG9mIGVycm9yLAotICAgICAtMjogaWYgdGhlcmUgaXMgKGRlZmluaXRl bHkpIG5vIGNvbm5lY3Rpb24uCi0gIE5vdGU6IEluIFVOSVggd2UgZG9uJ3QgaGF2ZSB0byBjYWxs IG5ldHRjaGsoKSBiZWNhdXNlIGEgc29ja2V0Ci0gIGZpbGUgZGVzY3JpcHRvciB3b3JrcyBqdXN0 IGxpa2UgaW4gc2VyaWFsIGkvbywgaW9jdGxzIGFuZCBhbGwuCi0gIChCdXQgdGhpcyB3aWxsIGNo YW5nZSBpZiB3ZSBhZGQgbm9uLWZpbGUtZGVzY3JpcHRvciBjaGFubmVscywKLSAgc3VjaCBhcyBJ Qk0gWC4yNSBmb3IgQUlYLi4uKQotKi8KLXN0YXRpYyBpbnQKLWluX2NoayhjaGFubmVsLCBmZCkg aW50IGNoYW5uZWwsIGZkOyB7Ci0gICAgaW50IHgsIG4gPSAwOwkJCS8qIFdvcmtlcnMsIG4gPSBy ZXR1cm4gdmFsdWUgKi8KLSAgICBleHRlcm4gaW50IGNsc29uZGlzYzsJCS8qIENsb3NlIG9uIGRp c2Nvbm5lY3QgKi8KLS8qCi0gIFRoZSBmaXJzdCBzZWN0aW9uIGNoZWNrcyB0byBtYWtlIHN1cmUg d2UgaGF2ZSBhIGNvbm5lY3Rpb24sCi0gIGJ1dCBvbmx5IGlmIHdlJ3JlIGluIGxvY2FsIG1vZGUu Ci0qLwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMTEsImluX2No ayBlbnRyeSIsY2tpdG9hKGZkKSxjaGFubmVsKTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgdHR5ZmQi LCIiLHR0eWZkKTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgdHRwdHkiLCIiLHR0cHR5KTsKLSAgICB9 Ci0jZW5kaWYgLyogREVCVUcgKi8KLS8qCi0gIEJ1dCBkb24ndCBzYXkgY29ubmVjdGlvbiBpcyBn b25lIGlmIHdlIGhhdmUgYW55IGJ1ZmZlcmVkLXN0dWZmLgotKi8KLSNpZmRlZiBUVExFQlVGCi0g ICAgZGVidWcoRjEwMSwiaW5fY2hrIHR0cHVzaCIsIiIsdHRwdXNoKTsKLSAgICBpZiAoY2hhbm5l bCA9PSAxKSB7Ci0JaWYgKHR0cHVzaCA+PSAwKQotCSAgbisrOwotCW4gKz0gbGVfaW5idWYoKTsK LQlpZiAobiA+IDApCi0JICByZXR1cm4obik7Ci0gICAgfQotI2VuZGlmIC8qIFRUTEVCVUYgKi8K LQotI2lmZGVmIE5FVFBUWQotI2lmZGVmIEhBVkVfUFRZVFJBUAotICAgIC8qIFNwZWNpYWwgaGFu ZGxpbmcgZm9yIEhQLVVYIHB0eSBpL28gKi8KLSAgICBpZiAodHRwdHkgJiYgcHR5X3RyYXBfcGVu ZGluZyh0dHlmZCkgPiAwKSB7Ci0gICAgICAgIGlmIChwdHlfdHJhcF9oYW5kbGVyKHR0eWZkKSA+ IDApIHsKLSAgICAgICAgICAgIHR0Y2xvcygwKTsKLSAgICAgICAgICAgIHJldHVybigtMik7Ci0g ICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCi0jZW5kaWYgLyogTkVU UFRZICovCi0KLSAgICBpZiAoY2hhbm5lbCkgewkJCS8qIENoZWNraW5nIGNvbW11bmljYXRpb25z IGNoYW5uZWwgKi8KLQlpZiAodHR5ZmQgPCAwKSB7CQkvKiBObyBjb25uZWN0aW9uICovCi0JICBy ZXR1cm4oLTIpOwkJCS8qIFRoYXQncyB3aGF0IHRoaXMgbWVhbnMgKi8KLQl9IGVsc2UgaWYgKHhs b2NhbCAmJgkJLyogSW4gbG9jYWwgbW9kZSAqLwotCQkgICAoIW5ldGNvbm4JCS8qIFNlcmlhbCBj b25uZWN0aW9uIG9yICovCi0jaWZkZWYgVE5fQ09NUE9SVAotCQkgICAgfHwgaXN0bmNvbXBvcnQo KSAgICAvKiBUZWxuZXQgQ29tIFBvcnQgKi8KLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0JCSAg ICkgJiYgdHRjYXJyICE9IENBUl9PRkYgLyogd2l0aCBDQVJSSUVSIFdBVENIIE9OIChvciBBVVRP KSAqLwotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBNWVJFQUQKLS8qCi0gIFNlZW1zIGxpa2UgdGhp cyB3b3VsZCBiZSBhIGdvb2QgaWRlYSBidXQgaXQgcHJldmVudHMgQy1LZXJtaXQgZnJvbQotICBw b3BwaW5nIGJhY2sgdG8gdGhlIHByb21wdCBhdXRvbWF0aWNhbGx5IHdoZW4gY2FycmllciBkcm9w cy4gIEhvd2V2ZXIsCi0gIGNvbW1lbnRpbmcgdGhpcyBvdXQgcHJldmVudHMgdXMgZnJvbSBzZWVp bmcgdGhlIE5PIENBUlJJRVIgbWVzc2FnZS4KLSAgTmVlZHMgbW9yZSB3b3JrLi4uCi0qLwotCQkg ICAmJiBteV9jb3VudCA8IDEJLyogTm90aGluZyBpbiBvdXIgaW50ZXJuYWwgYnVmZmVyICovCi0j ZW5kaWYgLyogTVlSRUFEICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQkgICApIHsKLQkgICAg aW50IHg7Ci0JICAgIHggPSB0dGdtZG0oKTsJCS8qIFNvIGdldCBtb2RlbSBzaWduYWxzICovCi0J ICAgIGRlYnVnKEYxMDEsImluX2NoayBjbG9zZS1vbi1kaXNjb25uZWN0IiwiIixjbHNvbmRpc2Mp OwotCSAgICBpZiAoeCA+IC0xKSB7CQkvKiBDaGVjayBmb3IgY2FycmllciAqLwotCQlpZiAoISh4 ICYgQk1fRENEKSkgewkvKiBObyBjYXJyaWVyICovCi0JCSAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsg Y2FycmllciBsb3N0IiwiIix4KTsKLQkJICAgIGlmIChjbHNvbmRpc2MpCS8qIElmICJjbG9zZS1v bi1kaXNjb25uZWN0IiAqLwotCQkgICAgICB0dGNsb3MoMCk7CS8qIGNsb3NlIGRldmljZSAmIHJl bGVhc2UgbG9jay4gKi8KLQkJICAgIHJldHVybigtMik7CQkvKiBUaGlzIG1lYW5zICJkaXNjb25u ZWN0ZWQiICovCi0JCX0KLQkgICAgLyogSW4gY2FzZSBJL08gdG8gZGV2aWNlIGFmdGVyIENEIGRy b3BwZWQgYWx3YXlzIGZhaWxzICovCi0JICAgIC8qIGFzIGluIERlYmlhbiBMaW51eCAyLjEgYW5k IFVuaXh3YXJlIDIuMS4uLiAqLwotCSAgICB9IGVsc2UgewotCSAgICAgICAgZGVidWcoRjEwMSwi aW5fY2hrIHR0Z21kbSBJL08gZXJyb3IiLCIiLGVycm5vKTsKLQkgICAgICAgIGRlYnVnKEYxMDEs ImluX2NoayB0dGdtZG0gZ290c2lncyIsIiIsZ290c2lncyk7Ci0JICAgICAgICBpZiAoZ290c2ln cykgewkJLyogSWYgd2UgZ290IHNpZ25hbHMgYmVmb3JlLi4uICovCi0JCSAgICBpZiAoZXJybm8g PT0gNSB8fCBlcnJubyA9PSA2KSB7IC8qIEkvTyBlcnJvciBldGMgKi8KLQkJICAgICAgICBpZiAo Y2xzb25kaXNjKQkvKiBsaWtlIHdoZW4gbW9kZW0gaGFuZ3MgdXAgKi8KLQkJCSAgdHRjbG9zKDAp OwotCQkJcmV0dXJuKC0yKTsKLQkJICAgIH0KLQkJfQotCQkvKiBJZiB3ZSBuZXZlciBnb3QgbW9k ZW0gc2lnbmFscyBzdWNjZXNzZnVsbHkgb24gdGhpcyAqLwotCQkvKiBjb25uZWN0aW9uIGJlZm9y ZSwgd2UgY2FuJ3QgY29uY2x1ZGUgdGhhdCBUSElTIGZhaWx1cmUgKi8KLQkJLyogbWVhbnMgdGhl IGNvbm5lY3Rpb24gd2FzIGxvc3QuICovCi0JCXJldHVybigwKTsKLQkgICAgfQotCX0KLSAgICB9 Ci0KLS8qIFdlIHNlZW0gdG8gaGF2ZSBhIGNvbm5lY3Rpb24gc28gbm93IHNlZSBpZiBhbnkgYnl0 ZXMgYXJlIHdhaXRpbmcgb24gaXQgKi8KLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChzc2xfYWN0 aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7Ci0gICAgICAgIG4gKz0gU1NMX3BlbmRpbmco c3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2Nvbik7Ci0gICAgICAgIGRlYnVnKEYxMDEsImlu X2NoayBTU0xfcGVuZGluZyIsIiIsbik7Ci0gICAgICAgIGlmIChuIDwgMCkgewotICAgICAgICAg ICAgdHRjbG9zKDApOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfSBlbHNlIGlm IChuID4gMCkgewotICAgICAgICAgICAgcmV0dXJuKG4pOwotICAgICAgICB9Ci0gICAgfQotI2Vu ZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIFJMT0dDT0RFCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAg ICAvKiBJdCBpcyBub3Qgc2FmZSB0byByZWFkIGFueSBkYXRhIHdoZW4gdXNpbmcgZW5jcnlwdGVk IEtsb2dpbiAqLwotICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTiB8fCB0dG5wcm90byA9 PSBOUF9FSzVMT0dJTikgewotI2lmZGVmIEtSQjQKLSAgICAgICAgaWYgKHR0bnByb3RvID09IE5Q X0VLNExPR0lOKSB7Ci0gICAgICAgICAgICBuICs9IGtyYjRfZGVzX2F2YWlsKHR0eWZkKTsKLSAg ICAgICAgICAgIGRlYnVnKEYxMDEsImluX2NoayBrcmI0X2Rlc19hdmFpbCIsIiIsbik7Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBLUkI0ICovCi0jaWZkZWYgS1JCNQotICAgICAgICBpZiAodHRucHJv dG8gPT0gTlBfRUs1TE9HSU4pIHsKLSAgICAgICAgICAgIG4gKz0ga3JiNV9kZXNfYXZhaWwodHR5 ZmQpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiaW5fY2hrIGtyYjVfZGVzX2F2YWlsIiwiIixu KTsKLSAgICAgICAgfQotI2lmZGVmIEtSQjVfVTJVCi0gICAgICAgIGlmICh0dG5wcm90byA9PSBO UF9LNVUyVSkgewotICAgICAgICAgICAgbiArPSBrcmI1X3UydV9hdmFpbCh0dHlmZCk7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsga3JiNV9kZXNfYXZhaWwiLCIiLG4pOwotICAgICAg ICB9Ci0jZW5kaWYgLyogS1JCNV9VMlUgKi8KLSNlbmRpZiAvKiBLUkI1ICovCi0gICAgICAgIGlm IChuIDwgMCkJCQkvKiBJcyB0aGlzIHJpZ2h0PyAqLwotCSAgcmV0dXJuKC0xKTsKLSAgICAgICAg ZWxzZQotCSAgcmV0dXJuKG4pOwotICAgIH0KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2Vu ZGlmIC8qIFJMT0dDT0RFICovCi0KLSAgICBlcnJubyA9IDA7CQkJCS8qIFJlc2V0IHRoaXMgc28g d2UgbG9nIGdvb2QgaW5mbyAqLwotI2lmZGVmIEZJT05SRUFECi0gICAgeCA9IGlvY3RsKGZkLCBG SU9OUkVBRCwgJm4pOwkvKiBCU0QgYW5kIGxvdHMgb2Ygb3RoZXJzICovCi0jaWZkZWYgREVCVUcJ CQkJLyogKHRoZSBtb3JlIHRoZSBiZXR0ZXIpICovCi0gICAgaWYgKGRlYmxvZykgewotCWRlYnVn KEYxMDEsImluX2NoayBGSU9OUkVBRCByZXR1cm4gY29kZSIsIiIseCk7Ci0JZGVidWcoRjEwMSwi aW5fY2hrIEZJT05SRUFEIGNvdW50IiwiIixuKTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgRklPTlJF QUQgZXJybm8iLCIiLGVycm5vKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNlbHNlIC8q IEZJT05SRUFEIG5vdCBkZWZpbmVkICovCi0vKgotICBIZXJlLCBpZiAobmV0Y29ubiAmJiB0dG5l dCA9PSBORVRfVENQQiksIHdlIG1pZ2h0IHRyeSBjYWxsaW5nIHJlY3Ztc2coKQotICB3aXRoIGZs YWdzIE1TR19QRUVLfE1TR19ET05UV0FJVCBvbiB0aGUgc29ja2V0ICh0dHlmZCksIGV4Y2VwdCB0 aGlzIGlzIG5vdAotICBwb3J0YWJsZSAoTVNHX0RPTlRXQUlUIGlzbid0IGRlZmluZWQgaW4gYW55 IG9mIHRoZSA8c3lzL3NvY2tldC5oPiBmaWxlcwotICB0aGF0IEkgbG9va2VkIGF0LCBidXQgaXQg aXMgbmVlZGVkIHRvIHByZXZlbnQgdGhlIGNhbGwgZnJvbSBibG9ja2luZyksIGFuZAotICB0aGUg bXNnaGRyIHN0cnVjdCBkaWZmZXJzIGZyb20gcGxhY2UgdG8gcGxhY2UsIHNvIHdlIHdvdWxkIG5l ZWQgYW5vdGhlcgotICBhdmFsYW5jaGUgb2YgaWZkZWZzLiAgU3RpbGwsIHdoZW4gRklPTlJFQUQg aXMgbm90IGF2YWlsYWJsZSwgdGhpcyBpcyB0aGUKLSAgb25seSBvdGhlciBrbm93biBtZXRob2Qg b2YgYXNraW5nIHRoZSBPUyBmb3IgdGhlICpudW1iZXIqIG9mIGNoYXJhY3RlcnMKLSAgYXZhaWxh YmxlIGZvciByZWFkaW5nLgotKi8KLSNpZmRlZiBWNwkJCQkvKiBVTklYIFY3OiBsb29rIGluIGtl cm5lbCBtZW1vcnkgKi8KLSNpZmRlZiBNSU5JWAotICAgIG4gPSAwOwkJCQkvKiBCdXQgbm90IGlu IE1JTklYICovCi0jZWxzZQotI2lmZGVmIE1JTklYMgotICAgIG4gPSAwOwotI2Vsc2UKLSAgICBs c2VlayhrbWVtW1RUWV0sIChsb25nKSBxYWRkcltUVFldLCAwKTsgLyogN3RoIEVkaXRpb24gVW5p eCAqLwotICAgIHggPSByZWFkKGttZW1bVFRZXSwgJm4sIHNpemVvZihpbnQpKTsKLSAgICBpZiAo eCAhPSBzaXplb2YoaW50KSkKLSAgICAgIG4gPSAwOwotI2VuZGlmIC8qIE1JTklYMiAqLwotI2Vu ZGlmIC8qIE1JTklYICovCi0jZWxzZSAvKiBOb3QgVjcgKi8KLSNpZmRlZiBQUk9WWDEKLSAgICB4 ID0gaW9jdGwoZmQsIFRJT0NRQ05ULCAmdHRidWYpOwkvKiBERUMgUHJvLzN4eCBWZW5peCBWLjEg Ki8KLSAgICBuID0gdHRidWYuc2dfaXNwZWVkICYgMDM3NzsJCS8qIENpcmNhIDE5ODQgKi8KLSAg ICBpZiAoeCA8IDApIG4gPSAwOwotI2Vsc2UKLSNpZmRlZiBNWVJFQUQKLS8qCi0gIEhlcmUgd2Ug c2tpcCBhbGwgdGhlIHVuZGVwZW5kYWJsZSBhbmQgZXhwZW5zaXZlIGNhbGxzIGJlbG93IGlmIHdl Ci0gIGFscmVhZHkgaGF2ZSBzb21ldGhpbmcgaW4gb3VyIGludGVybmFsIGJ1ZmZlci4gIFRoaXMg dGVuZHMgdG8gd29yayBxdWl0ZQotICBuaWNlbHksIHNvIHRoZSBvbmx5IHJlYWxseSBiYWQgY2Fz ZSByZW1haW5pbmcgaXMgdGhlIG9uZSBpbiB3aGljaCBuZWl0aGVyCi0gIEZJT05SRUFEIG9yIE1Z UkVBRCBhcmUgZGVmaW5lZCwgd2hpY2ggaXMgaW5jcmVhc2luZ2x5IHJhcmUgdGhlc2UgZGF5cy4K LSovCi0gICAgaWYgKGNoYW5uZWwgIT0gMCAmJiBteV9jb3VudCA+IDApIHsKLQlkZWJ1ZyhGMTAx LCJpbl9jaGsgYnVmIG15X2NvdW50IiwiIixteV9jb3VudCk7Ci0JbiA9IG15X2NvdW50OwkJCS8q IG4gd2FzIDAgYmVmb3JlIHdlIGdvdCBoZXJlICovCi0JcmV0dXJuKG4pOwotICAgIH0KLSNlbmRp ZiAvKiBNWVJFQUQgKi8KLS8qCi0gIHJkY2hrKCksIHNlbGVjdCgpLCBhbmQgcG9sbCgpIHRlbGwg dXMgKmlmKiBkYXRhIGlzIGF2YWlsYWJsZSB0byBiZSByZWFkLCBidXQKLSAgbm90IGhvdyBtdWNo LCBzbyB0aGVzZSBzaG91bGQgYmUgdXNlZCBvbmx5IGFzIGEgZmluYWwgcmVzb3J0LiAgRXNwZWNp YWxseQotICBzaW5jZSB0aGVzZSBjYWxscyB0ZW5kIHRvIGFkZCBhIGxvdCBvdmVyaGVhZC4KLSov Ci0jaWZkZWYgUkRDSEsJCQkJLyogVGhpcyBtb3N0bHkgU0NPLXNwZWNpZmljICovCi0gICAgbiA9 IHJkY2hrKGZkKTsKLSAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgcmRjaGsiLCIiLG4pOwotI2Vsc2Ug LyogTm8gUkRDSEsgKi8KLSNpZmRlZiBTRUxFQ1QKLSNpZmRlZiBQbGFuOQotICAgIC8qIE9ubHkg YWxsb3dzIHNlbGVjdCBvbiB0aGUgY29uc29sZSAuLi4gZG9uJ3QgYXNrICovCi0gICAgaWYgKGNo YW5uZWwgPT0gMCkKLSNlbmRpZiAvKiBQbGFuOSAqLwotICAgICAgewotCWZkX3NldCByZmRzOwkJ CS8qIFJlYWQgZmlsZSBkZXNjcmlwdG9ycyAqLwotI2lmZGVmIEJFTExWMTAKLQlGRF9aRVJPKHJm ZHMpOwkJCS8qIEluaXRpYWxpemUgdGhlbSAqLwotCUZEX1NFVChmZCxyZmRzKTsJCS8qIFdlIHdh bnQgdG8gbG9vayBhdCB0aGlzIGZkICovCi0jZWxzZQotCUZEX1pFUk8oJnJmZHMpOwkJCS8qIElu aXRpYWxpemUgdGhlbSAqLwotCUZEX1NFVChmZCwmcmZkcyk7CQkvKiBXZSB3YW50IHRvIGxvb2sg YXQgdGhpcyBmZCAqLwotCXR2LnR2X3NlYyA9IHR2LnR2X3VzZWMgPSAwTDsJLyogQSAwLXZhbHVl ZCB0aW1ldmFsIHN0cnVjdHVyZSAqLwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLSNpZmRlZiBQbGFu OQotCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAq KTAsICZ0diApOwotCWRlYnVnKEYxMDEsImluX2NoayBQbGFuIDkgc2VsZWN0IiwiIixuKTsKLSNl bHNlCi0jaWZkZWYgQkVMTFYxMAotCW4gPSBzZWxlY3QoIDEyOCwgcmZkcywgKGZkX3NldCAqKTAs IChmZF9zZXQgKikwLCAwICk7Ci0JZGVidWcoRjEwMSwiaW5fY2hrIEJFTExWMTAgc2VsZWN0Iiwi IixuKTsKLSNlbHNlCi0jaWZkZWYgQlNENDQKLQluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZk cywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsg QlNENDQgc2VsZWN0IiwiIixuKTsKLSNlbHNlCi0jaWZkZWYgQlNENDMKLQluID0gc2VsZWN0KCBG RF9TRVRTSVpFLCAmcmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLQlkZWJ1 ZyhGMTAxLCJpbl9jaGsgQlNENDMgc2VsZWN0IiwiIixuKTsKLSNlbHNlCi0jaWZkZWYgU09MQVJJ UwotCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAq KTAsICZ0diApOwotCWRlYnVnKEYxMDEsImluX2NoayBTT0xBUklTIHNlbGVjdCIsIiIsbik7Ci0j ZWxzZQotI2lmZGVmIFFOWDYKLQluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZkcywgKGZkX3Nl dCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgUU5YNiBzZWxl Y3QiLCIiLG4pOwotI2Vsc2UKLSNpZmRlZiBRTlgKLQluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAm cmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLQlkZWJ1ZyhGMTAxLCJpbl9j aGsgUU5YIHNlbGVjdCIsIiIsbik7Ci0jZWxzZQotI2lmZGVmIENPSEVSRU5UCi0JbiA9IHNlbGVj dCggRkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0J ZGVidWcoRjEwMSwiaW5fY2hrIENPSEVSRU5UIHNlbGVjdCIsIiIsbik7Ci0jZWxzZQotI2lmZGVm IFNWUjQKLQluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZkcywgKGZkX3NldCAqKTAsIChmZF9z ZXQgKikwLCAmdHYgKTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgU1ZSNCBzZWxlY3QiLCIiLG4pOwot I2Vsc2UKLSNpZmRlZiBfX2xpbnV4X18KLQluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZkcywg KGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgTElO VVggc2VsZWN0IiwiIixuKTsKLSNpZmRlZiBPU0YKLQluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAm cmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLQlkZWJ1ZyhGMTAxLCJpbl9j aGsgT1NGIHNlbGVjdCIsIiIsbik7Ci0jZWxzZQotCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZy ZmRzLCAoaW50ICopMCwgKGludCAqKTAsICZ0diApOwotCWRlYnVnKEYxMDEsImluX2NoayBjYXRj aGFsbCBzZWxlY3QiLCIiLG4pOwotI2VuZGlmIC8qIE9TRiAqLwotI2VuZGlmIC8qIF9fbGludXhf XyAqLwotI2VuZGlmIC8qIFNWUjQgKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlmIC8q IFFOWCAqLwotI2VuZGlmIC8qIFFOWDYgKi8KLSNlbmRpZiAvKiBTT0xBUklTICovCi0jZW5kaWYg LyogQlNENDMgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLSNl bmRpZiAvKiBQbGFuOSAqLwotICAgIH0KLSNlbHNlICAvKiBOb3QgU0VMRUNUICovCi0jaWZkZWYg Q0tfUE9MTAotICAgIHsKLSAgICAgIHN0cnVjdCBwb2xsZmQgcGZkOwotCi0gICAgICBwZmQuZmQg PSBmZDsKLSAgICAgIHBmZC5ldmVudHMgPSBQT0xMSU47Ci0gICAgICBwZmQucmV2ZW50cyA9IDA7 Ci0gICAgICBuID0gcG9sbCgmcGZkLCAxLCAwKTsKLSAgICAgIGRlYnVnKEYxMDEsImluX2NoayBw b2xsIiwiIixuKTsKLSAgICAgIGlmICgobiA+IDApICYmIChwZmQucmV2ZW50cyAmIFBPTExJTikp Ci0JbiA9IDE7Ci0gICAgfQotI2VuZGlmIC8qIENLX1BPTEwgKi8KLSNlbmRpZiAvKiBTRUxFQ1Qg Ki8KLSNlbmRpZiAvKiBSRENISyAqLwotI2VuZGlmIC8qIFBST1ZYMSAqLwotI2VuZGlmIC8qIFY3 ICovCi0jZW5kaWYgLyogRklPTlJFQUQgKi8KLQotLyogRnJvbSBoZXJlIGRvd24sIHRyZWF0IGNv bnNvbGUgYW5kIGNvbW11bmljYXRpb24gZGV2aWNlIGRpZmZlcmVudGx5Li4uICovCi0KLSAgICBp ZiAoY2hhbm5lbCA9PSAwKSB7CQkJLyogQ29uc29sZSAqLwotCi0jaWZkZWYgU1ZPUlBPU0lYCi0j aWZuZGVmIEZJT05SRUFECi0jaWZuZGVmIFNFTEVDVAotI2lmbmRlZiBDS19QT0xMCi0jaWZuZGVm IFJEQ0hLCi0vKgotICBUaGlzIGlzIHRoZSBoaWRlb3VzIGhhY2sgdXNlZCBpbiBTeXN0ZW0gViBh bmQgUE9TSVggc3lzdGVtcyB0aGF0IGRvbid0Ci0gIHN1cHBvcnQgRklPTlJFQUQsIHJkY2hrKCks IHNlbGVjdCgpLCBwb2xsKCksIGV0YywgaW4gd2hpY2ggdGhlIHVzZXIncwotICBDT05ORUNULW1v ZGUgZXNjYXBlIGNoYXJhY3RlciBpcyBhdHRhY2hlZCB0byBTSUdRVUlULiAgVXNlZCwgb2J2aW91 c2x5LAotICBvbmx5IG9uIHRoZSBjb25zb2xlLgotKi8KLQlpZiAoY29uZXNjKSB7CQkJLyogRXNj YXBlIGNoYXJhY3RlciB0eXBlZCA9PSBTSUdRVUlUICovCi0JICAgIGRlYnVnKEYxMDAsImluX2No ayBjb25lc2MiLCIiLGNvbmVzYyk7Ci0JICAgIGNvbmVzYyA9IDA7Ci0JICAgIHNpZ25hbChTSUdR VUlULGVzY3RycCk7CS8qIFJlc3RvcmUgc2lnbmFsICovCi0JICAgIG4gKz0gMTsKLQl9Ci0jZW5k aWYgLyogUkRDSEsgKi8KLSNlbmRpZiAvKiBDS19QT0xMICovCi0jZW5kaWYgLyogU0VMRUNUICov Ci0jZW5kaWYgLyogRklPTlJFQUQgKi8KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLQotCXJldHVy bihuKTsJCQkvKiBEb25lIHdpdGggY29uc29sZSAqLwotICAgIH0KLQotICAgIGlmIChjaGFubmVs ICE9IDApIHsJCQkvKiBDb21tdW5pY2F0aW9ucyBjb25uZWN0aW9uICovCi0KLSNpZmRlZiBNWVJF QUQKLSNpZm5kZWYgRklPTlJFQUQKLS8qCi0gIHNlbGVjdCgpIG9yIHJkY2hrKCksIGV0YywgaGFz IHRvbGQgdXMgdGhhdCBzb21ldGhpbmcgaXMgd2FpdGluZywgYnV0IHdlCi0gIGRvbid0IGtub3cg aG93IG11Y2guICBTbyB3ZSBkbyBhIHJlYWQgdG8gZ2V0IGl0IGFuZCB0aGVuIHdlIGtub3cuICBO b3RlOgotICBUaGlzIHJlYWQgaXMgTk9UIG5vbmJsb2NraW5nIGlmIG5vdGhpbmcgaXMgdGhlcmUg KGJlY2F1c2Ugb2YgVk1JTj0xKSwgYnV0Ci0gIGl0IHNob3VsZCBiZSBzYWZlIGluIHRoaXMgY2Fz ZSBzaW5jZSB0aGUgT1MgdGVsbHMgdXMgYXQgbGVhc3Qgb25lIGJ5dGUgaXMKLSAgd2FpdGluZyB0 byBiZSByZWFkLCBhbmQgTVlSRUFEIHJlYWRzIHJldHVybiBhcyBtdWNoIGFzIGlzIHRoZXJlIHdp dGhvdXQKLSAgd2FpdGluZyBmb3IgYW55IG1vcmUuICBDb250cm9sbGVkIHRlc3RzIG9uIFNvbGFy aXMgYW5kIFVuaXh3YXJlICh3aXRoCi0gIEZJT05SRUFEIGRlbGliZXJhdGVseSB1bmRlZmluZWQp IHNob3cgdGhpcyB0byBiZSB0cnVlLgotKi8KLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgcmVhZCBteV9j b3VudCIsIiIsbXlfY291bnQpOwotCWRlYnVnKEYxMDEsImluX2NoayByZWFkIG4iLCIiLG4pOwot CWlmIChuID4gMCAmJiBteV9jb3VudCA9PSAwKSB7Ci0JICAgIC8qIFRoaXMgYWxzbyBjYXRjaGVz IGRpc2Nvbm5lY3RzIGV0YyAqLwotCSAgICAvKiBEbyB3aGF0IG15Z2V0YnVmIGRvZXMgZXhjZXB0 IGRvbid0IGdyYWIgYSBjaGFyYWN0ZXIgKi8KLQkgICAgbXlfY291bnQgPSBteWZpbGxidWYoKTsK LQkgICAgbXlfaXRlbSA9IC0xOwkJLyogXl5eICovCi0JICAgIGRlYnVnKEYxMDEsImluX2NoayBt eWZpbGxidWYgbXlfY291bnQiLCIiLG15X2NvdW50KTsKLQkgICAgaWYgKG15X2NvdW50IDwgMCkK LQkgICAgICByZXR1cm4oLTEpOwotCSAgICBlbHNlCi0JICAgICAgbiA9IDA7CQkJLyogTkI6IG4g aXMgcmVwbGFjZWQgYnkgbXlfY291bnQgKi8KLQl9Ci0jZW5kaWYgLyogRklPTlJFQUQgKi8KLS8q Ci0gIEhlcmUgd2UgYWRkIHdoYXRldmVyIHdlIHRoaW5rIGlzIHVucmVhZCB0byB3aGF0IGlzIHN0 aWxsIGluIG91cgotICBvdXIgaW50ZXJuYWwgYnVmZmVyLiAgVGh1cyB0aGUgaW1wb3J0YW5jZSBv ZiBzZXR0aW5nIG4gdG8gMCBqdXN0IGFib3ZlLgotKi8KLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgbXlf Y291bnQiLCIiLG15X2NvdW50KTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgbiIsIiIsbik7Ci0JaWYg KG15X2NvdW50ID4gMCkKLQkgIG4gKz0gbXlfY291bnQ7Ci0jZW5kaWYgLyogTVlSRUFEICovCi0g ICAgfQotICAgIGRlYnVnKEYxMDEsImluX2NoayByZXN1bHQiLCIiLG4pOwotCi0gICAgLyogRXJy b3JzIGhlcmUgZG9uJ3QgcHJvdmUgdGhlIGNvbm5lY3Rpb24gaGFzIGRyb3BwZWQgc28ganVzdCBz YXkgMCAqLwotCi0gICAgcmV0dXJuKG4gPCAwID8gMCA6IG4pOwotfQotCi0KLS8qICBUIFQgQyBI IEsgIC0tICBUZWxsIGhvdyBtYW55IGNoYXJhY3RlcnMgYXJlIHdhaXRpbmcgaW4gdHR5IGlucHV0 IGJ1ZmZlciAgKi8KLQotaW50Ci10dGNoaygpIHsKLSAgICBpbnQgZmQ7Ci0jaWZkZWYgTkVUQ01E Ci0gICAgaWYgKHR0cGlwZSkKLSAgICAgIGZkID0gZmRpbjsKLSAgICBlbHNlCi0jZW5kaWYgLyog TkVUQ01EICovCi0gICAgICBmZCA9IHR0eWZkOwotICAgIHJldHVybihpbl9jaGsoMSxmZCkpOwot fQotCi0vKiAgVCBUIFggSSBOICAtLSAgR2V0IG4gY2hhcmFjdGVycyBmcm9tIHR0eSBpbnB1dCBi dWZmZXIgICovCi0KLS8qICBSZXR1cm5zIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjdHVhbGx5IGdv dHRlbiwgb3IgLTEgb24gZmFpbHVyZSAgKi8KLQotLyogIEludGVuZGVkIGZvciB1c2Ugb25seSB3 aGVuIGl0IGlzIGtub3duIHRoYXQgbiBjaGFyYWN0ZXJzIGFyZSBhY3R1YWxseSAqLwotLyogIEF2 YWlsYWJsZSBpbiB0aGUgaW5wdXQgYnVmZmVyLiAgKi8KLQotaW50Ci10dHhpbihuLGJ1ZikgaW50 IG47IENIQVIgKmJ1ZjsgewotICAgIHJlZ2lzdGVyIGludCB4ID0gMCwgYyA9IC0yOwotI2lmZGVm IFRUTEVCVUYKLSAgICByZWdpc3RlciBpbnQgaSA9IDA7Ci0jZW5kaWYgLyogVFRMRUJVRiAqLwot ICAgIGludCBmZDsKLQotICAgIGlmIChuIDwgMSkJCQkJLyogTm90aGluZyB0byBkbyAqLwotICAg ICAgcmV0dXJuKDApOwotCi0jaWZkZWYgVFRMRUJVRgotICAgIGlmICh0dHB1c2ggPj0gMCkgewot ICAgICAgICBidWZbMF0gPSB0dHB1c2g7CQkvKiBQdXQgcHVzaGVkIGNoYXIgaW4gYnVmZmVyKi8K LSAgICAgICAgdHRwdXNoID0gLTE7CQkJLyogQ2xlYXIgdGhlIHB1c2ggYnVmZmVyICovCi0gICAg ICAgIGlmICh0dGNoaygpID4gMCkKLQkgIHJldHVybih0dHhpbihuLTEsICZidWZbMV0pICsgMSk7 Ci0gICAgICAgIGVsc2UKLQkgIHJldHVybigxKTsKLSAgICB9Ci0gICAgaWYgKGxlX2RhdGEpIHsK LSAgICAgICAgd2hpbGUgKGxlX2luYnVmKCkgPiAwKSB7Ci0JICAgIGlmIChsZV9nZXRjaGFyKCZi dWZbaV0pKSB7Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAgIG4tLTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAodHRjaGsoKSA+IDApCi0JICByZXR1 cm4odHR4aW4obiwmYnVmW2ldKStpKTsKLSAgICAgICAgZWxzZQotCSAgcmV0dXJuKGkpOwotICAg IH0KLSNlbmRpZiAvKiBUVExFQlVGICovCi0KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBl KQotICAgICAgZmQgPSBmZGluOwotICAgIGVsc2UKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSAgICAg IGZkID0gdHR5ZmQ7Ci0KLSNpZmRlZiBTVU5YMjUKLSAgICBpZiAobmV0Y29ubiAmJiAodHRuZXQg PT0gTkVUX1NYMjUpKQkvKiBYLjI1IGNvbm5lY3Rpb24gKi8KLSAgICAgIHJldHVybih4MjV4aW4o bixidWYpKTsKLSNlbmRpZiAvKiBTVU5YMjUgKi8KLQotI2lmZGVmIElCTVgyNQotICAgIC8qIHJp ZWhtOiBwb3NzaWJseSBub3QgbmVlZGVkLiBUZXN0IHdvcmtlZCB3aXRoIG5vcm1hbCByZWFkcyBh bmQgd3JpdGVzICovCi0gICAgaWYgKG5ldGNvbm4gJiYgKHR0bmV0ID09IE5FVF9JWDI1KSkJeyAv KiBYLjI1IGNvbm5lY3Rpb24gKi8KLQl4ID0geDI1eGluKG4sYnVmKTsKLQlpZiAoeCA+IDApIGJ1 Zlt4XSA9ICdcMCc7Ci0JcmV0dXJuKHgpOwotICAgIH0KLSNlbmRpZiAvKiBJQk1YMjUgKi8KLQot I2lmZGVmIE1ZUkVBRAotICAgIGRlYnVnKEYxMDEsInR0eGluIE1ZUkVBRCIsIiIsbik7Ci0gICAg d2hpbGUgKHggPCBuKSB7Ci0JYyA9IG15cmVhZCgpOwotCWlmIChjIDwgMCkgewotCSAgICBkZWJ1 ZyhGMTAxLCJ0dHhpbiBteXJlYWQgcmV0dXJucyIsIiIsYyk7Ci0JICAgIGlmIChjID09IC0zKSB4 ID0gLTE7Ci0JICAgIGJyZWFrOwotICAgICAgICB9Ci0JYnVmW3grK10gPSBjICYgdHRwbXNrOwot I2lmZGVmIFJMT0dDT0RFCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAgICAgLyogSXQgaXMgaW1w b3NzaWJsZSB0byBrbm93IGhvdyBtYW55IGNoYXJhY3RlcnMgYXJlIHdhaXRpbmcgKi8KLSAgICAg ICAgLyogdG8gYmUgcmVhZCB3aGVuIHlvdSBhcmUgdXNpbmcgRW5jcnlwdGVkIFJsb2dpbiBvciBT U0wgICAgKi8KLSAgICAgICAgLyogYXMgdGhlIHRyYW5zcG9ydCBzaW5jZSB0aGUgbnVtYmVyIG9m IHJlYWwgZGF0YSBieXRlcyAgICAgKi8KLSAgICAgICAgLyogY2FuIGJlIGdyZWF0ZXIgb3IgbGVz cyB0aGFuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb24gdGhlICAgKi8KLSAgICAgICAgLyogd2lyZSB3 aGljaCBpcyB3aGF0IHR0Y2hrKCkgcmV0dXJucy4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAg ICAgICAgaWYgKG5ldGNvbm4gJiYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8IHR0bnByb3Rv ID09IE5QX0VLNUxPR0lOKSkKLQkgIGlmICh0dGNoaygpIDw9IDApCi0JICAgIGJyZWFrOwotI2Vu ZGlmIC8qIENLX0tFUkJFUk9TICovCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBDS19T U0wKLSAgICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpCi0JICBp ZiAodHRjaGsoKSA8PSAwKQotCSAgICBicmVhazsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICB9 Ci0jZWxzZQotICAgIGRlYnVnKEYxMDEsInR0eGluIFJFQUQiLCIiLG4pOwotICAgIHggPSByZWFk KGZkLGJ1ZixuKTsKLSAgICBmb3IgKGMgPSAwOyBjIDwgbjsgYysrKQkJLyogU3RyaXAgYW55IHBh cml0eSAqLwotICAgICAgYnVmW2NdICY9IHR0cG1zazsKLSNlbmRpZiAvKiBNWVJFQUQgKi8KLQot ICAgIGRlYnVnKEYxMDEsInR0eGluIHgiLCIiLHgpOwkJLyogRG9uZSAqLwotICAgIGlmICh4ID4g MCkgYnVmW3hdID0gJ1wwJzsKLSAgICBpZiAoeCA8IDApIHggPSAtMTsKLSAgICByZXR1cm4oeCk7 Ci19Ci0KLS8qICBUIFQgTyBMICAtLSAgV3JpdGUgc3RyaW5nIHMsIGxlbmd0aCBuLCB0byBjb21t dW5pY2F0aW9uIGRldmljZS4gICovCi0vKgotICBSZXR1cm5zOgotICAgPj0gMCBvbiBzdWNjZXNz LCBudW1iZXIgb2YgY2hhcmFjdGVycyBhY3R1YWxseSB3cml0dGVuLgotICAgLTEgb24gZmFpbHVy ZS4KLSovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotQ0hBUiAqIHhwYWNrZXQgPSBOVUxMOwotaW50 IG54cGFja2V0ID0gMDsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0KLSNkZWZpbmUgVFRP TE1BWFQgNQotaW50Ci10dG9sKHMsbikgaW50IG47IENIQVIgKnM7IHsKLSAgICBpbnQgeCwgbGVu LCB0cmllcywgZmQ7Ci0jaWZkZWYgQ0tYWENIQVIKLSAgICBleHRlcm4gaW50IGRibGZsYWc7CQkJ LyogRm9yIFNFVCBTRU5EIERPVUJMRS1DSEFSQUNURVIgKi8KLSAgICBleHRlcm4gc2hvcnQgZGJs dFtdOwotICAgIENIQVIgKnAgPSBOVUxMLCAqcDIsICpzMiwgYzsKLSAgICBpbnQgbjIgPSAwOwot I2VuZGlmIC8qIENLWFhDSEFSICovCi0KLSAgICBpZiAodHR5ZmQgPCAwKQkJCS8qIE5vdCBvcGVu PyAqLwotICAgICAgcmV0dXJuKC0zKTsKLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsK LQkvKiBkZWJ1ZyhGMTAxLCJ0dG9sIHR0eWZkIiwiIix0dHlmZCk7ICovCi0JY2toZXhkdW1wKCJ0 dG9sIHMiLHMsbik7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiBORVRDTUQK LSAgICBpZiAodHRwaXBlKQotICAgICAgZmQgPSBmZG91dDsKLSAgICBlbHNlCi0jZW5kaWYgLyog TkVUQ01EICovCi0gICAgICBmZCA9IHR0eWZkOwotCi0jaWZkZWYgQ0tYWENIQVIKLS8qICBEb3Vi bGUgYW55IGNoYXJhY3RlcnMgdGhhdCBtdXN0IGJlIGRvdWJsZWQuICAqLwotICAgIGRlYnVnKEYx MDEsInR0b2wgZGJsZmxhZyIsIiIsZGJsZmxhZyk7Ci0gICAgaWYgKGRibGZsYWcpIHsKLQlwID0g KENIQVIgKikgbWFsbG9jKG4gKyBuICsgMSk7Ci0JaWYgKHApIHsKLQkgICAgczIgPSBzOwotCSAg ICBwMiA9IHA7Ci0JICAgIG4yID0gMDsKLQkgICAgd2hpbGUgKCpzMikgewotCQljID0gKnMyKys7 Ci0JCSpwMisrID0gYzsKLQkJbjIrKzsKLQkJaWYgKGRibHRbKHVuc2lnbmVkKSBjXSAmIDIpIHsK LQkJICAgICpwMisrID0gYzsKLQkJICAgIG4yKys7Ci0JCX0KLQkgICAgfQotCSAgICBzID0gcDsK LQkgICAgbiA9IG4yOwotCSAgICBzW25dID0gJ1wwJzsKLQl9Ci0jaWZkZWYgREVCVUcKLSAgICAg ICAgY2toZXhkdW1wKCJ0dG9sIGRvdWJsZWQgcyIscyxuKTsKLSNlbmRpZiAvKiBERUJVRyAqLwot ICAgIH0KLSNlbmRpZiAvKiBDS1hYQ0hBUiAqLwotCi0gICAgdHJpZXMgPSBUVE9MTUFYVDsJCQkv KiBBbGxvdyB1cCB0byB0aGlzIG1hbnkgdHJpZXMgKi8KLSAgICBsZW4gPSBuOwkJCQkvKiBSZW1l bWJlciBvcmlnaW5hbCBsZW5ndGggKi8KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLS8qCi0gIFRo aXMgaXMgdG8gYXZvaWQgZW5jcnlwdGluZyBhIHBhY2tldCB0aGF0IGlzIGFscmVhZHkgZW5jcnlw dGVkLCBlLmcuCi0gIHdoZW4gd2UgcmVzZW5kIGEgcGFja2V0IGRpcmVjdGx5IG91dCBvZiB0aGUg cGFja2V0IGJ1ZmZlciwgYW5kIGFsc28gdG8KLSAgYXZvaWQgZW5jcnlwdGluZyBhIGNvbnN0YW50 IChsaXRlcmFsKSBzdHJpbmcsIHdoaWNoIGNhbiBjYXVzZSBhIG1lbW9yeQotICBmYXVsdC4KLSov Ci0gICAgaWYgKFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpIHsKLQlpbnQgeDsKLQlpZiAo bnhwYWNrZXQgPCBuKSB7Ci0JICAgIGlmICh4cGFja2V0KSB7Ci0JCWZyZWUoeHBhY2tldCk7Ci0J CXhwYWNrZXQgPSBOVUxMOwotCQlueHBhY2tldCA9IDA7Ci0JICAgIH0KLQkgICAgeCA9IG4gPiAx MDI0MCA/IG4gOiAxMDI0MDsKLQkgICAgeHBhY2tldCA9IChDSEFSICopbWFsbG9jKHgpOwotCSAg ICBpZiAoIXhwYWNrZXQpIHsKLQkJZnByaW50ZihzdGRlcnIsInR0b2wgbWFsbG9jIGZhaWx1cmVc biIpOwotCQlyZXR1cm4oLTEpOwotCSAgICB9IGVsc2UKLQkgICAgICBueHBhY2tldCA9IHg7Ci0J fQotCW1lbWNweSgoY2hhciAqKXhwYWNrZXQsKGNoYXIgKilzLG4pOwotCXMgPSB4cGFja2V0Owot CWNrX3RuX2VuY3J5cHQoKGNoYXIgKilzLG4pOwotICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBU SU9OICovCi0KLSAgICB3aGlsZSAobiA+IDAgJiYKLQkgICAodHJpZXMtLSA+IDAKLSNpZmRlZiBD S19FTkNSWVBUSU9OCi0JICAgIC8qIGtlZXAgdHJ5aW5nIGlmIHdlIGFyZSBlbmNyeXB0aW5nICov Ci0JICAgIHx8IFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikKLSNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCi0gICAgICAgICAgICApKSB7CQkJLyogQmUgcGVyc2lzdGVudCAqLwotCWRlYnVn KEYxMDEsInR0b2wgdHJ5IiwiIixUVE9MTUFYVCAtIHRyaWVzKTsKLSNpZmRlZiBCRU9TT1JCRUJP WAotICAgICAgICBpZiAobmV0Y29ubiAmJiAhdHRwaXBlICYmICF0dHB0eSkKLQkgIHggPSBuZXR0 b2woKGNoYXIgKilzLG4pOwkvKiBXcml0ZSBzdHJpbmcgdG8gZGV2aWNlICovCi0gICAgICAgIGVs c2UKLSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotI2lmZGVmIElCTVgyNQotCSAgaWYgKHR0bmV0 ID09IE5FVF9JWDI1KQotCSAgICAvKgotCSAgICAgKiB0aGlzIGlzIGEgbW9yZSBjb250cm9sbGVk IHdheSBvZiB3cml0aW5nIHRvIFgyNQotCSAgICAgKiBTVFJFQU1TLCBob3dldmVyIHdyaXRlIHNo b3VsZCBhbHNvIHdvcmshCi0JICAgICAqLwotCSAgICB4ID0geDI1d3JpdGUodHR5ZmQsIHMsIG4p OwotCSAgZWxzZQotI2VuZGlmIC8qIElCTVgyNSAqLwotI2lmZGVmIENLX1NTTAotCSAgICBpZiAo c3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgewotCQlpbnQgZXJyb3I7Ci0JCS8q IFdyaXRlIHVzaW5nIFNTTCAqLwotICAgICAgICAgICAgICAgIHNzbF9yZXRyeToKLQkJaWYgKHNz bF9hY3RpdmVfZmxhZykKLSAgICAgICAgICAgICAgICAgIHggPSBTU0xfd3JpdGUoc3NsX2Nvbiwg cywgbik7Ci0JCWVsc2UKLSAgICAgICAgICAgICAgICAgIHggPSBTU0xfd3JpdGUodGxzX2Nvbiwg cywgbik7Ci0JCXN3aXRjaCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0 bHNfY29uLHgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKLSAgICAg ICAgICAgICAgICAgICAgaWYgKHggPT0gbikKLQkJICAgICAgcmV0dXJuKGxlbik7Ci0gICAgICAg ICAgICAgICAgICAgIHMgKz0geDsKLSAgICAgICAgICAgICAgICAgICAgbiAtPSB4OwotICAgICAg ICAgICAgICAgICAgICBnb3RvIHNzbF9yZXRyeTsKLQkJICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dS SVRFOgotCQkgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKLQkJICAgIHggPSAwOwotCQkgICAg YnJlYWs7Ci0JCSAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKLSAgICAgICAgICAgICAgICAgICAg aWYgKHggIT0gMCkKLQkJICAgICAgcmV0dXJuKC0xKTsKLQkJICBjYXNlIFNTTF9FUlJPUl9XQU5U X1g1MDlfTE9PS1VQOgotCQkgIGNhc2UgU1NMX0VSUk9SX1NTTDoKLQkJICBjYXNlIFNTTF9FUlJP Ul9aRVJPX1JFVFVSTjoKLQkJICBkZWZhdWx0OgotCQkgICAgdHRjbG9zKDApOwotCQkgICAgcmV0 dXJuKC0zKTsKLQkJfQotCSAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBD S19LRVJCRVJPUwotI2lmZGVmIEtSQjQKLSNpZmRlZiBSTE9HQ09ERQotCSAgICBpZiAodHRucHJv dG8gPT0gTlBfRUs0TE9HSU4pIHsKLQkJcmV0dXJuKGtyYjRfZGVzX3dyaXRlKHR0eWZkLHMsbikp OwotCSAgICB9IGVsc2UKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2VuZGlmIC8qIEtSQjQgKi8K LSNpZmRlZiBLUkI1Ci0jaWZkZWYgUkxPR0NPREUKLSAgICAgICAgICAgIGlmICh0dG5wcm90byA9 PSBOUF9FSzVMT0dJTikgewotICAgICAgICAgICAgICAgIHJldHVybihrcmI1X2Rlc193cml0ZSh0 dHlmZCwoY2hhciAqKXMsbiwwKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBSTE9H Q09ERSAqLwotI2lmZGVmIEtSQjVfVTJVCi0gICAgICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBf SzVVMlUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4oa3JiNV91MnVfd3JpdGUodHR5ZmQsKGNo YXIgKilzLG4pKTsKLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIEtSQjVfVTJVICovCi0j ZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0JICAgICAgeCA9IHdy aXRlKGZkLHMsbik7CS8qIFdyaXRlIHN0cmluZyB0byBkZXZpY2UgKi8KLQotCWlmICh4ID09IG4p IHsJCQkvKiBXb3JrZWQ/ICovCi0JICAgIGRlYnVnKEYxMDEsInR0b2wgb2siLCIiLHgpOwkvKiBP SyAqLwotI2lmZGVmIENLWFhDSEFSCi0JICAgIGlmIChwKSBmcmVlKHApOwotI2VuZGlmIC8qIENL WFhDSEFSICovCi0JICAgIHJldHVybihsZW4pOwkJLyogRG9uZSAqLwotCX0gZWxzZSBpZiAoeCA8 IDApIHsJCS8qIE5vLCBnb3QgZXJyb3I/ICovCi0JICAgIGRlYnVnKEYxMDEsInR0b2wgd3JpdGUg ZXJyb3IiLCIiLGVycm5vKTsKLSNpZmRlZiBFV09VTERCTE9DSwotCSAgICBpZiAoZXJybm8gPT0g RVdPVUxEQkxPQ0spIHsKLQkJbXNsZWVwKDEwKTsKLQkJY29udGludWU7Ci0JICAgIH0gZWxzZQot I2VuZGlmIC8qIEVXT1VMREJMT0NLICovCi0jaWZkZWYgVENQU09DS0VUCi0JICAgIGlmIChuZXRj b25uICYmIHR0bmV0ID09IE5FVF9UQ1BCKSB7Ci0JCWRlYnVnKEYxMDEsInR0b2wgVENQIGVycm9y IiwiIixlcnJubyk7Ci0JCXR0Y2xvcygwKTsJCS8qIENsb3NlIHRoZSBjb25uZWN0aW9uLiAqLwot CQl4ID0gLTM7Ci0JICAgIH0KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNpZmRlZiBDS1hYQ0hB UgotCSAgICBpZiAocCkgZnJlZShwKTsKLSNlbmRpZiAvKiBDS1hYQ0hBUiAqLwotCSAgICByZXR1 cm4oeCk7Ci0JfSBlbHNlIHsJCQkvKiBObyBlcnJvciwgc28gcGFydGlhbCBzdWNjZXNzICovCi0J ICAgIGRlYnVnKEYxMDEsInR0b2wgcGFydGlhbCIsIiIseCk7IC8qIFRoaXMgbmV2ZXIgaGFwcGVu cyAqLwotCSAgICBzICs9IHg7CQkJLyogUG9pbnQgdG8gcGFydCBub3Qgd3JpdHRlbiB5ZXQgKi8K LQkgICAgbiAtPSB4OwkJCS8qIEFkanVzdCBsZW5ndGggKi8KLQkgICAgaWYgKHggPiAwKSBtc2xl ZXAoMTApOwkvKiBXYWl0IDEwIG1zZWMgKi8KLQl9CQkJCS8qIEdvIGJhY2sgYW5kIHRyeSBhZ2Fp biAqLwotICAgIH0KLSNpZmRlZiBDS1hYQ0hBUgotICAgIGlmIChwKSBmcmVlKHApOwotI2VuZGlm IC8qIENLWFhDSEFSICovCi0gICAgcmV0dXJuKG4gPCAxID8gbGVuIDogLTEpOwkJLyogUmV0dXJu IHRoZSByZXN1bHRzICovCi19Ci0KLS8qICBUIFQgTyBDICAtLSAgT3V0cHV0IGEgY2hhcmFjdGVy IHRvIHRoZSBjb21tdW5pY2F0aW9uIGxpbmUgICovCi0KLS8qCi0gVGhpcyBmdW5jdGlvbiBzaG91 bGQgb25seSBiZSB1c2VkIGZvciBpbnRlcmFjdGl2ZSwgY2hhcmFjdGVyLW1vZGUgb3BlcmF0aW9u cywKLSBsaWtlIHRlcm1pbmFsIGNvbm5lY3Rpb24sIHNjcmlwdCBleGVjdXRpb24sIGRpYWxlciBp L28sIHdoZXJlIHRoZSBvdmVyaGVhZAotIG9mIHRoZSBzaWduYWxzIGFuZCBhbGFybXMgZG9lcyBu b3QgY3JlYXRlIGEgYm90dGxlbmVjay4KLSovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdHRvYyhj aGFyIGMpCi0jZWxzZQotdHRvYyhjKSBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8q IHR0b2MgKi8gewotI2RlZmluZSBUVE9DX1RNTyAxNQkJCS8qIFRpbWVvdXQgaW4gY2FzZSB3ZSBn ZXQgc3R1Y2sgKi8KLSAgICBpbnQgeHgsIGZkOwotCi0gICAgaWYgKHR0eWZkIDwgMCkJCQkvKiBD aGVjayBmb3Igbm90IG9wZW4uICovCi0gICAgICByZXR1cm4oLTEpOwotCi0jaWZkZWYgTkVUQ01E Ci0gICAgaWYgKHR0cGlwZSkKLSAgICAgIGZkID0gZmRvdXQ7Ci0gICAgZWxzZQotI2VuZGlmIC8q IE5FVENNRCAqLwotICAgICAgZmQgPSB0dHlmZDsKLQotICAgIGMgJj0gMHhmZjsKLSAgICAvKiBk ZWJ1ZyhGMTAxLCJ0dG9jIiwiIiwoQ0hBUikgYyk7ICovCi0gICAgc2F2YWwgPSBzaWduYWwoU0lH QUxSTSx0aW1lcmgpOwkvKiBFbmFibGUgdGltZXIgaW50ZXJydXB0ICovCi0gICAgeHggPSBhbGFy bShUVE9DX1RNTyk7CQkvKiBmb3IgdGhpcyBtYW55IHNlY29uZHMuICovCi0gICAgaWYgKHh4IDwg MCkgeHggPSAwOwkJCS8qIFNhdmUgb2xkIGFsYXJtIHZhbHVlLiAqLwotICAgIC8qIGRlYnVnKEYx MDEsInR0b2MgYWxhcm0iLCIiLHh4KTsgKi8KLSAgICBpZiAoCi0jaWZkZWYgQ0tfUE9TSVhfU0lH Ci0Jc2lnc2V0am1wKHNqYnVmLDEpCi0jZWxzZQotCXNldGptcChzamJ1ZikKLSNlbmRpZiAvKiBD S19QT1NJWF9TSUcgKi8KLQkpIHsJCS8qIFRpbWVyIHdlbnQgb2ZmPyAqLwotCXR0aW1vZmYoKTsJ CQkvKiBZZXMsIGNhbmNlbCB0aGlzIGFsYXJtLiAqLwotCWlmICh4eCAtIFRUT0NfVE1PID4gMCkg YWxhcm0oeHggLSBUVE9DX1RNTyk7IC8qIFJlc3RvcmUgcHJldmlvdXMgb25lICovCi0gICAgICAg IC8qIGRlYnVnKEYxMDAsInR0b2MgdGltZW91dCIsIiIsMCk7ICovCi0jaWZkZWYgTkVUQ09OTgot CWlmICghbmV0Y29ubikgewotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQkgICAgZGVidWcoRjEwMSwi dHRvYyB0aW1lb3V0IiwiIixjKTsKLQkgICAgaWYgKHR0ZmxvdyA9PSBGTE9fWE9OWCkgewotCQlk ZWJ1ZyhGMTAxLCJ0dG9jIGZsb3ciLCIiLHR0Zmxvdyk7IC8qIE1heWJlIHdlJ3JlIHhvZmYnZCAq LwotI2lmbmRlZiBQbGFuOQotI2lmZGVmIFBPU0lYCi0JCS8qIFBPU0lYIHdheSB0byB1bnN0aWNr LiAqLwotCQlkZWJ1ZyhGMTAwLCJ0dG9jIHRjZmxvdyIsIiIsdGNmbG93KHR0eWZkLFRDT09OKSk7 Ci0jZWxzZQotI2lmZGVmIEJTRDQJCQkJLyogQmVya2VsZXkgd2F5IHRvIGRvIGl0LiAqLwotI2lm ZGVmIFRJT0NTVEFSVAotLyogLi4uLiBVc2VkIHRvIGJlICJpb2N0bCh0dHlmZCwgVElPQ1NUQVJU LCAwKTsiLiAgV2hvIGtub3dzPyAqLwotCQl7Ci0JCSAgaW50IHggPSAwOwotCQkgIGRlYnVnKEYx MDEsInR0b2MgVElPQ1NUQVJUIiwiIixpb2N0bCh0dHlmZCwgVElPQ1NUQVJULCAmeCkpOwotCQl9 Ci0jZW5kaWYgLyogVElPQ1NUQVJUICovCi0jZW5kaWYgLyogQlNENCAqLwotCQkJCQkvKiBJcyB0 aGVyZSBhIFN5cyBWIHdheSB0byBkbyB0aGlzPyAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0jZW5k aWYgLyogUGxhbjkgKi8KLQkgICAgfQotI2lmZGVmIE5FVENPTk4KLSAgICAgICAgfQotI2VuZGlm IC8qIE5FVENPTk4gKi8KLQlyZXR1cm4oLTEpOwkJCS8qIFJldHVybiBmYWlsdXJlIGNvZGUuICov Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IHJjOwotI2lmZGVmIEJFT1NPUkJFQk9YCi0jaWZk ZWYgTkVUQ09OTgotICAgICAgICBpZiAobmV0Y29ubiAmJiAhdHRwaXBlICYmICF0dHB0eSkKLQkg IHJjID0gbmV0dG9jKGMpOwotICAgICAgICBlbHNlCi0jZW5kaWYgLyogIEJFT1NPUkJFQk9YICov Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLQkgIGlmIChURUxP UFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pKQotCSAgICBja190bl9lbmNyeXB0KCZjLDEpOwotI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBJQk1YMjUKLQkvKiByaWVobTogbWF5YmUg dGhpcyBpc24ndCBuZWNlc3NhcnkgYWZ0ZXIgYWxsLiBUZXN0IHByb2dyYW0KLQkgKiB3b3JrZWQg ZmluZSB3aXRoIGRhdGEgYmVpbmcgc2VudCBhbmQgcmV0cmlldmVkIHdpdGggbm9ybWFsCi0JICog cmVhZCdzIGFuZCB3cml0ZXMhCi0JICovCi0JaWYgKHR0bmV0ID09IE5FVF9JWDI1KQotCSAgcmMg PSB4MjV3cml0ZSh0dHlmZCwmYywxKTsgLyogYXMgYWJvdmUgZm9yIFgyNSBzdHJlYW1zICovCi0J ZWxzZQotI2VuZGlmIC8qIElCTVgyNSAqLwotI2lmZGVmIENLX1NTTAotCSAgaWYgKHNzbF9hY3Rp dmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKLQkgICAgICBpbnQgZXJyb3I7Ci0JICAgICAg LyogV3JpdGUgdXNpbmcgU1NMICovCi0JICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZykKLSAgICAg ICAgICAgICAgICByYyA9IFNTTF93cml0ZShzc2xfY29uLCAmYywgMSk7Ci0JICAgICAgZWxzZQot ICAgICAgICAgICAgICAgIHJjID0gU1NMX3dyaXRlKHRsc19jb24sICZjLCAxKTsKLQkgICAgICBz d2l0Y2ggKFNTTF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbixyYykp ewotCQljYXNlIFNTTF9FUlJPUl9OT05FOgotCQkgIGJyZWFrOwotCQljYXNlIFNTTF9FUlJPUl9X QU5UX1dSSVRFOgotCQljYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0JCSAgcmMgPSAwOwotCQkg IGJyZWFrOwotCQljYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgotCQkgIGlmIChyYyAhPSAwKQotCQkg ICAgcmV0dXJuKC0xKTsKLQkJY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKLQkJY2Fz ZSBTU0xfRVJST1JfU1NMOgotCQljYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKLQkJZGVmYXVs dDoKLQkJICB0dGNsb3MoMCk7Ci0JCSAgcmV0dXJuKC0xKTsKLQkgICAgICB9Ci0JICB9IGVsc2UK LSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIEtSQjQKLSNp ZmRlZiBSTE9HQ09ERQotCSAgaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOKSB7Ci0JICAgICAg cmMgPSAoa3JiNF9kZXNfd3JpdGUodHR5ZmQsKGNoYXIgKikmYywxKSA9PSAxKTsKLQkgIH0gZWxz ZQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5kaWYgLyogS1JCNCAqLwotI2lmZGVmIEtSQjUK LSNpZmRlZiBSTE9HQ09ERQotICAgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzVMT0dJTikg ewotICAgICAgICAgICAgICByYyA9IChrcmI1X2Rlc193cml0ZSh0dHlmZCwmYywxLDApID09IDEp OwotICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgS1JCNV9V MlUKLSAgICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKLSAgICAgICAgICAgICAg cmMgPSAoa3JiNV91MnVfd3JpdGUodHR5ZmQsJmMsMSkgPT0gMSk7Ci0gICAgICAgICAgfSBlbHNl Ci0jZW5kaWYgLyogS1JCNV9VMlUgKi8KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tf S0VSQkVST1MgKi8KLQkgICAgcmMgPSB3cml0ZShmZCwmYywxKTsJLyogVHJ5IHRvIHdyaXRlIHRo ZSBjaGFyYWN0ZXIuICovCi0JaWYgKHJjIDwgMSkgewkJCS8qIEZhaWxlZCAqLwotCSAgICB0dGlt b2ZmKCk7CQkJLyogVHVybiBvZmYgdGhlIGFsYXJtLiAqLwotCSAgICBhbGFybSh4eCk7CQkJLyog UmVzdG9yZSBwcmV2aW91cyBhbGFybS4gKi8KLQkgICAgZGVidWcoRjEwMSwidHRvYyBlcnJubyIs IiIsZXJybm8pOyAvKiBMb2cgdGhlIGVycm9yLCAqLwotCSAgICByZXR1cm4oLTEpOwkJCS8qIGFu ZCByZXR1cm4gdGhlIGVycm9yIGNvZGUuICovCi0JfQotICAgIH0KLSAgICB0dGltb2ZmKCk7CQkJ CS8qIFN1Y2Nlc3MsIHR1cm4gb2ZmIHRoZSBhbGFybS4gKi8KLSAgICBhbGFybSh4eCk7CQkJCS8q IFJlc3RvcmUgcHJldmlvdXMgYWxhcm0uICovCi0gICAgcmV0dXJuKDApOwkJCQkvKiBSZXR1cm4g Z29vZCBjb2RlLiAqLwotfQotCi0vKiAgVCBUIEkgTiBMICAtLSAgUmVhZCBhIHJlY29yZCAodXAg dG8gYnJlYWsgY2hhcmFjdGVyKSBmcm9tIGNvbW0gbGluZS4gICovCi0vKgotICBSZWFkcyB1cCB0 byAibWF4IiBjaGFyYWN0ZXJzIGZyb20gdGhlIGNvbm5lY3Rpb24sIHRlcm1pbmF0aW5nIG9uOgot ICAgIChhKSB0aGUgcGFja2V0IGxlbmd0aCBmaWVsZCBpZiB0aGUgInR1cm4iIGFyZ3VtZW50IGlz IHplcm8sIG9yCi0gICAgKGIpIG9uIHRoZSBwYWNrZXQtZW5kIGNoYXJhY3RlciAoZW9sKSBpZiB0 aGUgInR1cm4iIGFyZ3VtZW50IGlzIG5vbnplcm8KLSAgICAoYykgYSBjZXJ0YWluIG51bWJlciBv ZiBDdHJsLUMncyBpbiBhIHJvdwotCi0gIFJldHVybnM6Ci0gICAgPj0gMCwgdGhlIG51bWJlciBv ZiBjaGFyYWN0ZXJzIHJlYWQgdXBvbiBzdWNjZXNzOwotICAgIC0xIGlmICJtYXgiIGV4Y2VlZGVk LCB0aW1lb3V0LCBvciBvdGhlciBjb3JyZWN0YWJsZSBlcnJvcjsKLSAgICAtMiBvbiB1c2VyIGlu dGVycnVwdGlvbiAoYyk7Ci0gICAgLTMgb24gZmF0YWwgZXJyb3IgbGlrZSBjb25uZWN0aW9uIGxv c3QuCi0KLSAgVGhlIG5hbWUgb2YgdGhpcyByb3V0aW5lIGRhdGVzIGZyb20gdGhlIGVhcmx5IGRh eXMgd2hlbiBLZXJtaXQgcGFja2V0cwotICB3ZXJlLCBpbmRlZWQsIGFsd2F5cyBsaW5lcyBvZiB0 ZXh0LiAgVGhhdCB3YXMgYmVmb3JlIGNvbnRyb2wtY2hhcmFjdGVyCi0gIHVucHJlZml4aW5nIGFu ZCBsZW5ndGgtZHJpdmVuIHBhY2tldCBmcmFtaW5nIHdlcmUgaW50cm9kdWNlZCwgd2hpY2ggdGhp cwotICB2ZXJzaW9uIGhhbmRsZS4gIE5COiB0aGlzIHJvdXRpbmUgaXMgT05MWSBmb3IgcmVhZGlu ZyBpbmNvbWluZyBLZXJtaXQKLSAgcGFja2V0cywgbm90aGluZyBlbHNlLiAgVG8gcmVhZCBvdGhl ciBraW5kcyBvZiBpbmNvbWluZyBtYXRlcmlhbCwgdXNlCi0gIHR0aW5jKCkgb3IgdHR4aW4oKS4K LQotICBUaGUgYnl0ZXMgdGhhdCB3ZXJlIGlucHV0IGFyZSBjb3BpZWQgaW50byAiZGVzdCIgd2l0 aCB0aGVpciBwYXJpdHkgYml0cwotICBzdHJpcHBlZCBpZiBwYXJpdHkgd2FzIHNlbGVjdGVkLiAg UmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCi0gIEJ5dGVzIGFmdGVyIHRoZSBlb2wg YXJlIGF2YWlsYWJsZSB1cG9uIHRoZSBuZXh0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KLQotICBU aGUgaWRlYSBpcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHN5c3RlbSBjYWxscyBwZXIgcGFj a2V0LCBhbmQgYWxzbyB0bwotICBtaW5pbWl6ZSB0aW1lb3V0cy4gIFRoaXMgZnVuY3Rpb24gaXMg dGhlIGlubmVyIGxvb3Agb2YgdGhlIHByb3RvY29sIGFuZCBtdXN0Ci0gIGJlIGFzIGVmZmljaWVu dCBhcyBwb3NzaWJsZS4gIFRoZSBjdXJyZW50IHN0cmF0ZWd5IGlzIHRvIHVzZSBteXJlYWQoKSwg YQotICBtYWNybyB0byBtYW5hZ2UgYnVmZmVyZWQgKGFuZCBnZW5lcmFsbHkgbm9uYmxvY2tpbmcp IHJlYWRzLgotCi0gIFdBUk5JTkc6IFRoaXMgZnVuY3Rpb24gY2FsbHMgcGFyY2hrKCksIHdoaWNo IGlzIGRlZmluZWQgaW4gYW5vdGhlciBtb2R1bGUuCi0gIE5vcm1hbGx5LCBja3V0aW8uYyBkb2Vz IG5vdCBkZXBlbmQgb24gY29kZSBmcm9tIGFueSBvdGhlciBtb2R1bGUsIGJ1dCB0aGVyZQotICBp cyBhbiBleGNlcHRpb24gaW4gdGhpcyBjYXNlIGJlY2F1c2UgYWxsIHRoZSBvdGhlciBjaz90aW8u YyBtb2R1bGVzIGFsc28KLSAgbmVlZCB0byBjYWxsIHBhcmNoaygpLCBzbyBpdCdzIGJldHRlciB0 byBoYXZlIGl0IGRlZmluZWQgaW4gYSBjb21tb24gcGxhY2UuCi0qLwotI2lmZGVmIENUUkxDCi0j dW5kZWYgQ1RSTEMKLSNlbmRpZiAvKiBDVFJMQyAqLwotI2RlZmluZSBDVFJMQyAnXDAzJwotLyoK LSAgV2UgaGF2ZSBmb3VyIGRpZmZlcmVudCBkZWNsYXJhdGlvbnMgaGVyZSBiZWNhdXNlOgotICAo YSkgdG8gYWxsb3cgS2VybWl0IHRvIGJlIGJ1aWx0IHdpdGhvdXQgdGhlIGF1dG9tYXRpYyBwYXJp dHkgc2Vuc2luZyBmZWF0dXJlCi0gIChiKSBvbmUgb2YgZWFjaCB0eXBlIGZvciBBTlNJIEMsIG9u ZSBmb3Igbm9uLUFOU0kuCi0qLwotI2lmbmRlZiBOT1hGRVIKLQotc3RhdGljIGludCBwdXNoZWRi YWNrID0gMDsKLQotaW50Ci0jaWZkZWYgUEFSU0VOU0UKLSNpZmRlZiBDS19BTlNJQwotdHRpbmwo Q0hBUiAqZGVzdCwgaW50IG1heCxpbnQgdGltbywgQ0hBUiBlb2wsIENIQVIgc3RhcnQsIGludCB0 dXJuKQotI2Vsc2UKLXR0aW5sKGRlc3QsbWF4LHRpbW8sZW9sLHN0YXJ0LHR1cm4pIGludCBtYXgs dGltbyx0dXJuOyBDSEFSICpkZXN0LCBlb2wsIHN0YXJ0OwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0jZWxzZSAvKiBub3QgUEFSU0VOU0UgKi8KLSNpZmRlZiBDS19BTlNJQwotdHRpbmwoQ0hBUiAq ZGVzdCwgaW50IG1heCxpbnQgdGltbywgQ0hBUiBlb2wpCi0jZWxzZQotdHRpbmwoZGVzdCxtYXgs dGltbyxlb2wpIGludCBtYXgsdGltbzsgQ0hBUiAqZGVzdCwgZW9sOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi0jZW5kaWYgLyogUEFSU0VOU0UgKi8KLS8qIHR0aW5sICovIHsKLQotI2lmbmRlZiBN WVJFQUQKLSAgICBDSEFSIGNoLCBkdW07Ci0jZW5kaWYgLyogTVlSRUFEICovCi0jaWZkZWYgUEFS U0VOU0UKLSAgICBpbnQgcGt0bGVuID0gLTE7Ci0gICAgaW50IGxwbGVuID0gMDsKLSAgICBpbnQg aGF2ZWxlbiA9IDA7Ci0jZW5kaWYgLyogUEFSU0VOU0UgKi8KLSAgICBpbnQgZmQ7Ci0gICAgaW50 IHNvcG1hc2sgPSAweGZmOwkJCS8qIFN0YXJ0LU9mLVBhY2tldCBtYXNrICovCi0jaWZkZWYgQ0tY WENIQVIKLSAgICBleHRlcm4gc2hvcnQgZGJsdFtdOwkJLyogSWdub3JlLWNoYXJhY3RlciB0YWJs ZSAqLwotICAgIGV4dGVybiBpbnQgaWduZmxhZzsKLSNlbmRpZiAvKiBDS1hYQ0hBUiAqLwotI2lm ZGVmIFRDUFNPQ0tFVAotICAgIGV4dGVybiBDSEFSIHN0Y2hyOwotI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLwotICAgIGludCB4OwotI2lmZGVmIFNUUkVBTUlORwotICAgIGV4dGVybiBpbnQgc3RyZWFt aW5nOwotICAgIGV4dGVybiBpbnQgc25kdHlwOwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCi0g ICAgaWYgKHR0eWZkIDwgMCkgcmV0dXJuKC0zKTsgICAgICAgICAgLyogTm90IG9wZW4uICovCi0v KgotICBJbiBGZWJydWFyeSAyMDA3IEkgZml4ZWQgdHRpbmwoKSB0byB3b3JrIGJldHRlciB1bmRl ciB0aGUgdHJ1bHkgYXdmdWwKLSAgY29uZGl0aW9ucyBlbmNvdW50ZXJlZCBieSB0aGUgQU0tQVBF WCBvY2Vhbm9ncmFwaGljIGZsb2F0cyB0aGF0IGdhdGhlcgotICBodXJyaWNhbmUgZGF0YSBhbmQg cGhvbmUgaG9tZSB1c2luZyBJcmlkaXVtIHNhdGVsbGl0ZSBtb2RlbXMsIHdoaWNoIHVuZGVyCi0g IGNlcnRhaW4gY29uZGl0aW9ucywgY2FuIHNlbmQgdHdvIHBhY2tldHMgYmFjayB0byBiYWNrIGFm dGVyIGEgbG9uZyBwYXVzZS4KLSAgSW4gdGhpcyBjYXNlIHRoZSBzZWNvbmQgcGFja2V0IHdvdWxk IGJlIGlnbm9yZWQgYmVjYXVzZSB0aGUgU09IIHdhcyBza2lwcGVkCi0gIGR1ZSB0byB0aGUgdHRm bHVpKCkgY2FsbC4gIEJ1dCB0aGUgcmV3b3JrZWQgbG9va2FoZWFkL3B1c2hiYWNrIGxvZ2ljIGJy b2tlCi0gIEtlcm1pdCB0cmFuc2ZlcnMgb24gZW5jcnlwdGVkIGNvbm5lY3Rpb25zLiAgVGhpcyB3 YXMgZml4ZWQgMTItMTMgQXVndXN0Ci0gIDIwMDcuICBBbGwgb2YgdGhpcyBoYXBwZW5lZCBhZnRl ciA4LjAuMjEyIERldi4yNyB3YXMgcmVsZWFzZWQgYW5kIGJlZm9yZQotICBEZXYuMjgsIHNvIG5v IGhhcm0gZG9uZSBvdGhlciB0aGFuIHRoZSBkZWxheS4KLSovCi0gICAgZGVidWcoRjEwMSwidHRp bmwgbWF4IiwiIixtYXgpOwotICAgIGRlYnVnKEYxMDEsInR0aW5sIHRpbW8iLCIiLHRpbW8pOwot Ci0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkKLSAgICAgIGZkID0gZmRpbjsKLSAgICBl bHNlCi0jZW5kaWYgLyogTkVUQ01EICovCi0gICAgICBmZCA9IHR0eWZkOwotCi0jaWZkZWYgQ09N TUVOVAotICAgIGlmICh4bG9jYWwgJiYgY29uY2hrKCkgPiAwKQkJLyogQWxsb3cgZm9yIGNvbnNv bGUgaW50ZXJydXB0aW9ucyAqLwotICAgICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0KLSAgICAqZGVzdCA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBk ZXN0aW5hdGlvbiBidWZmZXIgKi8KLSAgICBpZiAodGltbyA8IDApIHRpbW8gPSAwOwkJLyogU2Fm ZXR5ICovCi0gICAgaWYgKHRpbW8pIHsJCQkJLyogRG9uJ3QgdGltZSBvdXQgaWYgdGltbyA9PSAw ICovCi0JaW50IHh4OwotCXNhdmFsID0gc2lnbmFsKFNJR0FMUk0sdGltZXJoKTsJLyogRW5hYmxl IHRpbWVyIGludGVycnVwdCAqLwotCXh4ID0gYWxhcm0odGltbyk7CQkvKiBTZXQgaXQuICovCi0J ZGVidWcoRjEwMSwidHRpbmwgYWxhcm0iLCIiLHh4KTsKLSAgICB9Ci0gICAgaWYgKAotI2lmZGVm IENLX1BPU0lYX1NJRwotCXNpZ3NldGptcChzamJ1ZiwxKQotI2Vsc2UKLQlzZXRqbXAoc2pidWYp Ci0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0JKSB7CQkJCS8qIFRpbWVyIHdlbnQgb2ZmPyAq LwotCWRlYnVnKEYxMDAsInR0aW5sIHRpbW91dCIsIiIsMCk7IC8qIEdldCBoZXJlIG9uIHRpbWVv dXQuICovCi0JLyogZGVidWcoRjExMCwiIHdpdGgiLChjaGFyICopIGRlc3QsMCk7ICovCi0JdHRp bW9mZigpOwkJCS8qIFR1cm4gb2ZmIHRpbWVyICovCi0JcmV0dXJuKC0xKTsJCQkvKiBhbmQgcmV0 dXJuIGVycm9yIGNvZGUuICovCi0gICAgfSBlbHNlIHsKLQlyZWdpc3RlciBpbnQgaSwgbiA9IC0x OwkJLyogbG9jYWwgdmFyaWFibGVzICovCi0JaW50IGNjbiA9IDA7Ci0jaWZkZWYgUEFSU0VOU0UK LQlyZWdpc3RlciBpbnQgZmxhZyA9IDA7Ci0JZGVidWcoRjAwMCwidHRpbmwgc3RhcnQiLCIiLHN0 YXJ0KTsKLSNlbmRpZiAvKiBQQVJTRU5TRSAqLwotCi0JdHRwbXNrID0gdHRwcnR5ID8gMDE3NyA6 IDAzNzc7CS8qIFNldCBwYXJpdHkgc3RyaXBwaW5nIG1hc2suICovCi0Jc29wbWFzayA9IG5lZWRw Y2hrID8gMDE3NyA6IHR0cG1zazsgLyogQW5kIFNPUCBtYXRjaGluZyBtYXNrLiAqLwotCi0vKiBO b3cgcmVhZCBpbnRvIGRlc3RpbmF0aW9uLCBzdHJpcHBpbmcgcGFyaXR5IGFuZCBsb29raW5nIGZv ciB0aGUgKi8KLS8qIHRoZSBwYWNrZXQgdGVybWluYXRvciwgYW5kIGFsc28gZm9yIHNldmVyYWwg Q3RybC1DJ3MgdHlwZWQgaW4gYSByb3cuICovCi0KLQlpID0gMDsJCQkJLyogRGVzdGluYXRpb24g aW5kZXggKi8KLQlkZWJ1ZyhGMTAxLCJ0dGlubCBlb2wiLCIiLGVvbCk7Ci0KLQl3aGlsZSAoaSA8 IG1heC0xKSB7Ci0jaWZkZWYgTVlSRUFECi0JICAgIGVycm5vID0gMDsKLQkgICAgLyogT24gZW5j cnlwdGVkIGNvbm5lY3Rpb25zIG15cmVhZCByZXR1cm5zIGVuY3J5cHRlZCBieXRlcyAqLwotCSAg ICBuID0gbXlyZWFkKCk7Ci0JICAgIGRlYnVnKEYwMDAsIlRUSU5MIG15cmVhZCBjaGFyIiwiIixu KTsKLQkgICAgaWYgKG4gPCAwKSB7CS8qIFRpbWVvdXQgb3IgaS9vIGVycm9yPyAqLwotI2lmZGVm IERFQlVHCi0JCWlmIChkZWJsb2cpIHsKLQkJICAgIGRlYnVnKEYxMDEsInR0aW5sIG15cmVhZCBm YWlsdXJlLCBuIiwiIixuKTsKLQkJICAgIGRlYnVnKEYxMDEsInR0aW5sIG15cmVhZCBlcnJubyIs IiIsZXJybm8pOwotCQl9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkJLyogRG9uJ3QgbGV0IEVJTlRS IGJyZWFrIHBhY2tldHMuICovCi0JCWlmIChuID09IC0zKSB7Ci0JCSAgICBpZiAoZXJybm8gPT0g RUlOVFIgJiYgaSA+IDApIHsKLQkJCWRlYnVnKEYxMTEsInR0aW5sIEVJTlRSIG15cmVhZCBpIiwi Y29udGludWluZyIsaSk7Ci0JCQljb250aW51ZTsKLQkJICAgIH0gZWxzZSB7Ci0JCQlkZWJ1ZyhG MTEwLCJ0dGlubCBub24tRUlOVFIgLTMiLCJjbG9zaW5nIiwwKTsKLQkJCXdhc2Nsb3NlZCA9IDE7 Ci0JCQl0dGltb2ZmKCk7CS8qIFR1cm4gb2ZmIHRpbWVyICovCi0JCQl0dGNsb3MoMCk7Ci0JCQly ZXR1cm4obik7Ci0JCSAgICB9Ci0JCX0gZWxzZSBpZiAobiA9PSAtMiAmJiBuZXRjb25uIC8qICYm IHRpbW8gPT0gMCAqLyApIHsKLQkJICAgIC8qIEhlcmUgd2UgdHJ5IHRvIGNhdGNoIGJyb2tlbiBu ZXR3b3JrIGNvbm5lY3Rpb25zICovCi0JCSAgICAvKiBldmVuIHdoZW4gaW9jdGwoKSBhbmQgcmVh ZCgpIGRvIG5vdCBjYXRjaCB0aGVtICovCi0JCSAgICBkZWJ1ZyhGMTExLCJ0dGlubCBuZXR3b3Jr IG15cmVhZCBmYWlsdXJlIiwiY2xvc2luZyIsbik7Ci0JCSAgICB3YXNjbG9zZWQgPSAxOwotCQkg ICAgdHRpbW9mZigpOwotCQkgICAgdHRjbG9zKDApOwotCQkgICAgcmV0dXJuKC0zKTsKLQkJfQot I2lmZGVmIFNUUkVBTUlORwotCQkvKiBTdHJlYW1pbmcgYW5kIG5vIGRhdGEgdG8gcmVhZCAqLwot CQllbHNlIGlmIChuID09IDAgJiYgc3RyZWFtaW5nICYmIHNuZHR5cCA9PSAnRCcpCi0JCSAgcmV0 dXJuKDApOwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCQlicmVhazsJCQkvKiBCcmVhayBvdXQg b2Ygd2hpbGUgbG9vcCAqLwotCSAgICB9Ci0KLSNlbHNlIC8qIG5vdCBNWVJFQUQgKGlzIHRoaXMg Y29kZSB1c2VkIGFueXdoZXJlIGFueSBtb3JlPykgKi8KLS8qCi0gIFRoZSBub24tTVlSRUFEIGNv ZGUgZGF0ZXMgZnJvbSB0aGUgMTk4MHMgYW5kIHdhcyBuZWVkZWQgb24gY2VydGFpbiBwbGF0Zm9y bXMKLSAgd2hlcmUgdGhlcmUgd2VyZSBubyBub25ibG9ja2luZyByZWFkcy4gIC1mZGMsIDIwMDcv MDIvMjIuCi0qLwotCSAgICBpZiAoKG4gPSByZWFkKGZkLCAmbiwgMSkpIDwgMSkKLQkgICAgICBi cmVhazsJCQkvKiBFcnJvciAtIGJyZWFrIG91dCBvZiB3aGlsZSBsb29wICovCi0KLSNlbmRpZiAv KiBNWVJFQUQgKi8KLQotCSAgICAvKiBHZXQgaGVyZSB3aXRoIGNoYXIgaW4gbiAqLwotCi0jaWZk ZWYgQ0tfRU5DUllQVElPTgotCSAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pICYm ICFwdXNoZWRiYWNrKSB7Ci0JCUNIQVIgY2ggPSBuOwotCQlja190bl9kZWNyeXB0KChjaGFyICop JmNoLDEpOwotCQluID0gY2g7Ci0JCWRlYnVnKEYwMDAsIlRUSU5MIGRlY3J5cCBjaGFyIiwiIixu KTsKLQkgICAgfQotCSAgICBwdXNoZWRiYWNrID0gMDsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQKLQkgICAgaWYgKG4gPT0gSUFDICYmCQkvKiBIYW5kbGUg VGVsbmV0IG9wdGlvbnMgKi8KLQkJKCh4bG9jYWwgJiYgbmV0Y29ubiAmJiBJU19URUxORVQoKSkg fHwKLQkJKCF4bG9jYWwgJiYgc3N0ZWxuZXQpKSkgewotCQluID0gdHRfdG5vcHQobik7Ci0JCWlm IChuIDwgMCkKLQkJICByZXR1cm4obik7Ci0jaWZuZGVmIE5PUEFSU0VOCi0JCWVsc2UgaWYgKG4g PT0gMSkKLQkJICBzdGFydCA9IHN0Y2hyOwotI2VuZGlmIC8qIE5PUEFSU0VOICovCi0JCWlmIChu ICE9IDI1NSkJCS8qIE5vIGRhdGEgLSBnbyBiYWNrIGZvciBuZXh0IGNoYXIgKi8KLQkJICBjb250 aW51ZTsKLQkgICAgfQkJCQkvKiBRdW90ZWQgSUFDIC0ga2VlcCBnb2luZyAqLwotI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLwotCi0jaWZkZWYgQ0tYWENIQVIKLQkgICAgaWYgKGlnbmZsYWcpCi0JICAg ICAgaWYgKGRibHRbKHVuc2lnbmVkKSBuXSAmIDEpIC8qIENoYXJhY3RlciB0byBpZ25vcmU/ICov Ci0JCWNvbnRpbnVlOwotI2VuZGlmIC8qIENLWFhDSEFSICovCi0vKgotICBVc2UgcGFyaXR5IG1h c2ssIHJhdGhlciB0aGFuIGFsd2F5cyBzdHJpcHBpbmcgcGFyaXR5LCB0byBjaGVjayBmb3IKLSAg Y2FuY2VsbGF0aW9uLiAgT3RoZXJ3aXNlLCBydW5zIGxpa2UgXHgwM1x4ODNceDAzIGluIGEgcGFj a2V0IGNvdWxkIGNhbmNlbAotICB0aGUgdHJhbnNmZXIgd2hlbiBwYXJpdHkgaXMgTk9ORS4gIChO b3RlIHRoYXQgXHgwM1x4MDNceDAzIGlzIGV4dHJlbWVseQotICB1bmxpa2VseSBkdWUgdG8gcnVu LWxlbmd0aCBlbmNvZGluZy4pCi0qLwotCSAgICAvKiBDaGVjayBjYW5jZWxsYXRpb24gKi8KLQkg ICAgaWYgKCF4bG9jYWwgJiYgeGZyY2FuICYmICgobiAmIHR0cG1zaykgPT0geGZyY2hyKSkgewot CQlpZiAoKytjY24gPj0geGZybnVtKSB7CS8qIElmIHhmcm51bSBpbiBhIHJvdywgYmFpbCBvdXQu ICovCi0JCSAgICBpZiAodGltbykgewkJLyogQ2xlYXIgdGltZXIuICovCi0JCQl0dGltb2ZmKCk7 Ci0JCSAgICB9Ci0JCSAgICBpZiAoeGZyY2hyIDwgMzIpCi0JCSAgICAgIHByaW50ZigiXiVjLi4u XHJcbiIsKGNoYXIpKHhmcmNocis2NCkpOwotCQkgICAgZWxzZQotCQkgICAgICBwcmludGYoIkNh bmNlbGVkLi4uXHJcbiIpOwotCQkgICAgcmV0dXJuKC0yKTsKLQkJfQotCSAgICB9IGVsc2UgY2Nu ID0gMDsJCS8qIE5vIGNhbmNlbGxhdGlvbiwgcmVzZXQgY291bnRlciwgKi8KLQotI2lmZGVmIFBB UlNFTlNFCi0vKgotICBSZXN0cnVjdHVyZWQgY29kZSBhbGxvd3MgZm9yIGEgbmV3IHBhY2tldCB0 byBhcHBlYXIgc29tZXdoZXJlIGluIHRoZQotICBtaWRkbGUgb2YgYSBwcmV2aW91cyBvbmUuICAt ZmRjLCAyNCBGZWIgMjAwNy4KLSovCi0JICAgIGlmICgobiAmIHNvcG1hc2spID09IHN0YXJ0KSB7 IC8qIFN0YXJ0IG9mIFBhY2tldCAqLwotCQlkZWJ1ZyhGMTAxLCJ0dGlubCBTT1AgaSIsIiIsaSk7 Ci0JCWZsYWcgPSAxOwkJLyogRmxhZyB0aGF0IHdlIGFyZSBpbiBhIHBhY2tldCAqLwotCQloYXZl bGVuID0gMDsJCS8qIEludmFsaWRhdGUgcHJldmlvdXMgbGVuZ3RoICovCi0JCXBrdGxlbiA9IC0x OwkJLyogKGlmIGFueSkgaW4gY2FzZSB3ZSB3ZXJlICovCi0JCWxwbGVuID0gMDsJCS8qIGFscmVh ZCBwcm9jZXNzYW5kIGEgcGFja2V0ICovCi0JCWkgPSAwOwkJCS8qIGFuZCByZXNldCB0aGUgZGVz dCBidWZmZXIgcG9pbnRlciAqLwotCSAgICB9Ci0JICAgIGlmIChmbGFnID09IDApIHsJCS8qIE5v IFNPUCB5ZXQuLi4gKi8KLQkJZGVidWcoRjAwMCwidHRpbmwgc2tpcHBpbmciLCIiLG4pOwotCQlj b250aW51ZTsKLQkgICAgfQotCSAgICBkZXN0W2krK10gPSBuICYgdHRwbXNrOwotLyoKLSAgSWYg d2UgaGF2ZSBub3QgYmVlbiBpbnN0cnVjdGVkIHRvIHdhaXQgZm9yIGEgdHVybmFyb3VuZCBjaGFy YWN0ZXIsIHdlIGNhbiBnbwotICBieSB0aGUgcGFja2V0IGxlbmd0aCBmaWVsZC4gIElmIHR1cm4g IT0gMCwgd2UgbXVzdCB3YWl0IGZvciB0aGUgZW5kIG9mIGxpbmUKLSAgKGVvbCkgY2hhcmFjdGVy IGJlZm9yZSByZXR1cm5pbmcuICBUaGlzIGlzIGFuIGVncmVnaW91cyB2aW9sYXRpb24gb2YgYWxs Ci0gIHByaW5jaXBsZXMgb2YgbGF5ZXJpbmcuLi4gIChMZXNzIGVncmVnaW91cyBpbiBDLUtlcm1p dCA5LjAsIGluIHdoaWNoIHdlIGdvCi0gIGJ5IHRoZSBsZW5ndGggZmllbGQgYnV0IGFsc28gbG9v ayBmb3IgdGhlIGVvbCBpbiBjYXNlIGl0IGFycml2ZXMgZWFybHksCi0gIGUuZy4gaWYgdGhlIGxl bmd0aCBmaWVsZCB3YXMgY29ycnVwdGVkIHVwd2FyZHMuKQotKi8KLQkgICAgaWYgKCFoYXZlbGVu KSB7Ci0JCWlmIChpID09IDIpIHsKLQkJICAgIGlmICgoZGVzdFsxXSAmIDB4N2YpIDwgMzIpIC8q IEdhcmJhZ2UgaW4gbGVuZ3RoIGZpZWxkICovCi0JCSAgICAgIHJldHVybigtMSk7CS8qIGZkYyAt IDEzIEFwciAyMDEwICovCi0JCSAgICBwa3RsZW4gPSB4dW5jaGFyKGRlc3RbMV0gJiAweDdmKTsK LSAgICAgICAgICAgICAgICAgICAgaWYgKHBrdGxlbiA+IDk0KQkvKiBSdWJvdXQgaW4gbGVuZ3Ro IGZpZWxkICovCi0JCSAgICAgIHJldHVybigtMSk7CS8qIGZkYyAtIDEzIEFwciAyMDEwICovCi0J CSAgICBpZiAocGt0bGVuID4gMSkgewotCQkJaGF2ZWxlbiA9IDE7Ci0JCQlkZWJ1ZyhGMTAxLCJ0 dGlubCBwa3RsZW4gdmFsdWUiLCIiLHBrdGxlbik7Ci0JCSAgICB9Ci0JCX0gZWxzZSBpZiAoaSA9 PSA1ICYmIHBrdGxlbiA9PSAwKSB7Ci0JCSAgICBscGxlbiA9IHh1bmNoYXIoZGVzdFs0XSAmIDB4 N2YpOwotCQl9IGVsc2UgaWYgKGkgPT0gNiAmJiBwa3RsZW4gPT0gMCkgewotCQkgICAgcGt0bGVu ID0gbHBsZW4gKiA5NSArIHh1bmNoYXIoZGVzdFs1XSAmIDB4N2YpICsgNTsKLQkJICAgIGhhdmVs ZW4gPSAxOwotCQkgICAgZGVidWcoRjEwMSwidHRpbmwgZXh0ZW5kZWQgbGVuZ3RoIiwiIixwa3Rs ZW4pOwotCQl9Ci0JICAgIH0KLQotLyoKLSAgU3VwcG9zZSB3ZSBsb29rZWQgYXQgdGhlIHNlcXVl bmNlIG51bWJlciBoZXJlIGFuZCBmb3VuZCBpdCB3YXMgb3V0IG9mCi0gIHJhbmdlPyAgVGhpcyB3 b3VsZCBtZWFuIGVpdGhlciAoYSkgaW5jb21pbmcgcGFja2V0cyBoYWQgU09QIHVucHJlZml4ZWQK LSAgYW5kIHdlIGFyZSBvdXQgb2Ygc3luYywgb3IgKGIpIHRoZSBwYWNrZXQgaXMgZGFtYWdlZC4g IFNpbmNlIChhKSBpcyBiYWQKLSAgcHJhY3RpY2UsIGxldCdzIGlnbm9yZSBpdC4gIFNvIHdoYXQg c2hvdWxkIHdlIGRvIGhlcmUgaWYgd2Uga25vdyB0aGUKLSAgcGFja2V0IGlzIGRhbWFnZWQ/Ci0K LSAgIDEuIE5vdGhpbmcgLS0ga2VlcCB0cnlpbmcgdG8gcmVhZCB0aGUgcGFja2V0IHRpbGwgd2Ug ZmluZCB3aGF0IHdlIHRoaW5rCi0gICAgICBpcyB0aGUgZW5kLCBvciB3ZSB0aW1lIG91dCwgYW5k IGxldCB0aGUgdXBwZXIgbGF5ZXIgZGVjaWRlIHdoYXQgdG8KLSAgICAgIGRvLiAgQnV0IHNpbmNl IGVpdGhlciB0aGUgcGFja2V0IGlzIGNvcnJ1cHQgb3Igd2UgYXJlIG91dCBvZiBzeW5jLAotICAg ICAgb3VyIGNyaXRlcmlvbiBmb3IgZmluZGluZyB0aGUgZW5kIGRvZXMgbm90IGFwcGx5IGFuZCB3 ZSBhcmUgbGlrZWx5Ci0gICAgICB0byB0aW1lIG91dCAob3Igc3dhbGxvdyBhIHBpZWNlIG9mIHRo ZSBuZXh0IHBhY2tldCkgaWYgb3VyIGFzc3VtZWQKLSAgICAgIGxlbmd0aCBpcyB0b28gbG9uZy4g IChUaGlzIHdhcyB0aGUgYmVoYXZpb3IgcHJpb3IgdG8gdmVyc2lvbiA3LjAuKQotCi0gICAyLiBz ZXQgZmxhZyA9IDAgYW5kIGNvbnRpbnVlPyAgVGhpcyB3b3VsZCBmb3JjZSB1cyB0byB3YWl0IGZv ciB0aGUKLSAgICAgIG5leHQgcGFja2V0IHRvIGNvbWUgaW4sIGFuZCB0aGVyZWZvcmUgKGluIHRo ZSBub253aW5kb3dpbmcgY2FzZSksCi0gICAgICB3b3VsZCBmb3JjZSBhIHRpbWVvdXQgaW4gdGhl IG90aGVyIEtlcm1pdC4KLQotICAgMy4gc2V0IGZsYWcgPSAwIGFuZCBjb250aW51ZSwgYnV0IG9u bHkgaWYgdGhlIHdpbmRvdyBzaXplIGlzID4gMSBhbmQKLSAgICAgIHRoZSB3aW5kb3cgaXMgbm90 IGJsb2NrZWQ/ICBUYWxrIGFib3V0IGNoZWF0aW5nIQotCi0gICA0LiBSZXR1cm4gYSBmYWlsdXJl IGNvZGUgYW5kIGxldCB0aGUgdXBwZXIgbGF5ZXIgZGVjaWRlIHdoYXQgdG8gZG8uCi0gICAgICBU aGlzIHNob3VsZCBiZSBlcXVpdmFsZW50IHRvIDMsIGJ1dCB3aXRob3V0IHRoZSBjaGVhdGluZy4g IFNvIGxldCdzCi0gICAgICBkbyBpdCB0aGF0IHdheS4uLiAgQnV0IG5vdGUgdGhhdCB3ZSBtdXN0 IGlnbm9yZSB0aGUgcGFyaXR5IGJpdAotICAgICAgaW4gY2FzZSB0aGlzIGlzIHRoZSBmaXJzdCBw YWNrZXQgYW5kIHdlIGhhdmUgbm90IHlldCBydW4gcGFyY2hrKCkuCi0qLwotCSAgICBpZiAoaSA9 PSAzKSB7CQkvKiBQZWVrIGF0IHNlcXVlbmNlIG51bWJlciAqLwotCQl4ID0geHVuY2hhcigoZGVz dFtpLTFdICYgMHg3ZikpOyAvKiBJZiBpdCdzIG5vdCBpbiByYW5nZS4uLiAqLwotCQlpZiAoeCA8 IDAgfHwgeCA+IDYzKSB7Ci0JCSAgICBkZWJ1ZyhGMTExLCJ0dGlubCBiYWQgc2VxIixkZXN0LHgp OwotCQkgICAgaWYgKHRpbW8pIHR0aW1vZmYoKTsKLQkJICAgIHJldHVybigtMSk7CQkvKiByZXR1 cm4gYSBub25mYXRhbCBlcnJvciAqLwotCQl9Ci0JICAgIH0KLQotI2Vsc2UgLyogUEFSU0VOU0Ug Ki8KLQkgICAgZGVzdFtpKytdID0gbiAmIHR0cG1zazsKLSNlbmRpZiAvKiBQQVJTRU5TRSAqLwot Ci0gICAgLyogQ2hlY2sgZm9yIGVuZCBvZiBwYWNrZXQgKi8KLQotCSAgICBpZiAoCi0JCSgobiAm IHR0cG1zaykgPT0gZW9sKQkvKiBBbHdheXMgYnJlYWsgb24gdGhlIGVvbCBjaGFyICovCi0jaWZk ZWYgUEFSU0VOU0UKLQkJIHx8CQkJLyogZmRjIC0gc2VlIG5vdGVzIG9mIDEzIEFwciAyMDEwICov Ci0vKgotICBQdXJlbHkgbGVuZ3RoLWRyaXZlbiBpZiBTRVQgSEFORFNIQUtFIE5PTkUgKGkuZS4g dHVybiA9PSAwKS4KLSAgVGhpcyBhbGxvd3MgcGFja2V0IHRlcm1pbmF0b3JzIGFuZCBoYW5kc2hh a2UgY2hhcmFjdGVycyB0byBhcHBlYXIKLSAgbGl0ZXJhbGx5IGluc2lkZSBhIHBhY2tldCBkYXRh IGZpZWxkLgotKi8KLQkJKGhhdmVsZW4gJiYgKGkgPiBwa3RsZW4rMSkgJiYKLQkJICghdHVybiB8 fCAodHVybiAmJiAobiAmIDB4N2YpID09IHR1cm4pKSkgLyogKHR1cm4sIG5vdCBlb2wpICovCi0K LSNlbmRpZiAvKiBQQVJTRU5TRSAqLwotCQkpIHsKLS8qCi0gIEhlcmUgd2UgaGF2ZSBlaXRoZXIg cmVhZCB0aGUgbGFzdCBieXRlIG9mIHRoZSBwYWNrZXQgYmFzZWQgb24gaXRzIGxlbmd0aAotICBm aWVsZCwgb3IgZWxzZSB3ZSBoYXZlIHJlYWQgdGhlIHBhY2tldCB0ZXJtaW5hdG9yIChlb2wpIG9y IHRoZSBoYWxmLWR1cGxleAotICBsaW5lLXR1cm5hcm91bmQgY2hhciAodHVybikuCi0qLwotI2lm bmRlZiBQQVJTRU5TRQotCQlkZWJ1ZyhGMTAxLCJ0dGlubCBnb3QgZW9sIiwiIixlb2wpOyAvKiAo b3IgdHVybikgKi8KLQkJZGVzdFtpXSA9ICdcMCc7CQkvKiBZZXMsIHRlcm1pbmF0ZSB0aGUgc3Ry aW5nLCAqLwotCQkvKiBkZWJ1ZyhGMTAxLCJ0dGlubCBpIiwiIixpKTsgKi8KLQotI2Vsc2UgIC8q IFBBUlNFTlNFICovCi0KLSNpZmRlZiBERUJVRwotCQlpZiAoZGVibG9nKSB7Ci0JCSAgICBpZiAo KG4gJiB0dHBtc2spICE9IGVvbCkgewotCQkJZGVidWcoRjEwMSwidHRpbmwgRU9QIGxlbmd0aCIs IiIscGt0bGVuKTsKLQkJCWRlYnVnKEYwMDAsInR0aW5sIEVPUCBjdXJyZW50IGNoYXIiLCIiLG4p OwotCQkJZGVidWcoRjEwMSwidHRpbmwgRU9QIHBhY2tldCBidWYgaW5kZXgiLCIiLGkpOwotCQkg ICAgfSBlbHNlIGRlYnVnKEYxMDEsInR0aW5sIGdvdCBlb2wiLCIiLGVvbCk7Ci0JCX0KLSNlbmRp ZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgTVlSRUFECi0vKgotICBUaGUgcGFja2V0IHdhcyByZWFk IGJhc2VkIG9uIGl0cyBsZW5ndGguICBUaGlzIGxlYXZlcyB0aGUgcGFja2V0IHRlcm1pbmF0b3IK LSAgdW5yZWFkLCBhbmQgc28gdHRjaGsoKSB3aWxsIGFsd2F5cyByZXR1cm4gYXQgbGVhc3QgMSBi ZWNhdXNlIG9mIHRoaXMsCi0gIHBvc3NpYmx5IGdpdmluZyBhIGZhbHNlIHBvc2l0aXZlIHRvIHRo ZSAiaXMgdGhlcmUgYW5vdGhlciBwYWNrZXQgd2FpdGluZz8iCi0gIHRlc3QuICBCdXQgaWYgd2Ug a25vdyB0aGUgdGVybWluYXRvciAob3IgYW55IG90aGVyIGludGVycGFja2V0IGp1bmspIGlzCi0g IHRoZXJlLCB3ZSBjYW4gc2FmZWx5IGdldCByaWQgb2YgaXQuCi0KLSAgTk9URTogVGhpcyBjb2Rl IHJld29ya2VkIHRvIChhKSBleGVjdXRlIGV2ZW4gaWYgdGhlIGRlYnVnIGxvZyBpc24ndCBhY3Rp dmU7Ci0gIGFuZCAoYikgYWN0dWFsbHkgd29yay4gIC1mZGMsIDIwMDcvMDIvMjIuICBBbmQgYWdh aW4gMjAwNy8wOC8xMi0xMyB0byBhbHNvCi0gIHdvcmsgb24gZW5jcnlwdGVkIGNvbm5lY3Rpb25z LgotKi8JCi0JCWRlYnVnKEYxMDEsIlRUSU5MIG15X2NvdW50IiwiIixteV9jb3VudCk7Ci0JCWlm ICgobiAmIHR0cG1zaykgIT0gZW9sKSB7IC8qIE5vdCB0aGUgcGFja2V0IHRlcm1pbmF0b3IgKi8K LQkJICAgIGludCB4OwotCQkgICAgd2hpbGUgKG15X2NvdW50ID4gMCkgewotCQkJeCA9IG15cmVh ZCgpOwkgICAvKiAod2FzIHR0aW5jKDApICovCi0JCQlkZWJ1ZyhGMDAwLCJUVElOTCBsa3JlYWQg Y2hhciIsIiIseCk7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotCQkJaWYgKFRFTE9QVF9VKFRFTE9Q VF9FTkNSWVBUSU9OKSkgewotCQkJICAgIENIQVIgY2ggPSB4OwotCQkJICAgIGNrX3RuX2RlY3J5 cHQoKGNoYXIgKikmY2gsMSk7Ci0JCQkgICAgeCA9IGNoOwotCQkJICAgIGRlYnVnKEYwMDAsIlRU SU5MIGxrZGVjciBjaGFyIiwiIix4KTsgCi0JCQl9Ci0jZW5kaWYJLyogQ0tfRU5DUllQVElPTiAq LwotCQkJLyoKLQkJCSAgTm90ZTogd2hpbGUgaXQgbWlnaHQgc2VlbSBtb3JlIGVsZWdhbnQgdG8g c2ltcGx5Ci0JCQkgIHB1c2ggYmFjayB0aGUgZW5jcnlwdGVkIGJ5dGUsIHRoYXQgZGVzeW5jaHJv bml6ZXMKLQkJCSAgdGhlIGRlY3J5cHRpb24gc3RyZWFtOyB0aGUgZmxhZyBpcyBuZWNlc3Nhcnkg c28gd2UKLQkJCSAgZG9uJ3QgdHJ5IHRvIGRlY3J5cHQgdGhlIHNhbWUgYnl0ZSB0d2ljZS4KLQkJ CSovCi0JCQlpZiAoKHggJiB0dHBtc2spID09IHN0YXJ0KSB7IC8qIFN0YXJ0IG9mIG5leHQgcGFj a2V0ICovCi0JCQkgICAgbXl1bnJkKHgpOwkvKiBQdXNoIGJhY2sgdGhlIGRlY3J5cHRlZCBieXRl ICovCi0JCQkgICAgcHVzaGVkYmFjayA9IDE7IC8qIEFuZCBzZXQgZmxhZyAqLwotCQkJICAgIGRl YnVnKEYwMDAsIlRUSU5MIGxrcHVzaCBjaGFyIiwiIix4KTsKLQkJCSAgICBicmVhazsKLQkJCX0K LQkJICAgIH0KLQkJfQotI2VuZGlmIC8qIE1ZUkVBRCAqLwotCi0JCWRlc3RbaV0gPSAnXDAnOwkJ LyogVGVybWluYXRlIHRoZSBzdHJpbmcsICovCi0JICAgICAgICBpZiAobmVlZHBjaGspIHsJCS8q IFBhcml0eSBjaGVja2VkIHlldD8gKi8KLQkJICAgIGlmICh0dHBydHkgPT0gMCkgewkvKiBObywg Y2hlY2suICovCi0JCQlpZiAoKHR0cHJ0eSA9IHBhcmNoayhkZXN0LHN0YXJ0LGkpKSA+IDApIHsK LQkJCSAgICBpbnQgajsKLQkJCSAgICBkZWJ1ZyhGMTAxLCJ0dGlubCBzZW5zZXMgcGFyaXR5Iiwi Iix0dHBydHkpOwotCQkJICAgIGRlYnVnKEYxMTAsInR0aW5sIHBhY2tldCBiZWZvcmUiLGRlc3Qs MCk7Ci0JCQkgICAgdHRwbXNrID0gMHg3ZjsKLQkJCSAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisr KQotCQkJICAgICAgZGVzdFtqXSAmPSAweDdmOwkvKiBTdHJpcCBwYXJpdHkgZnJvbSBwYWNrZXQg Ki8KLQkJCSAgICBkZWJ1ZyhGMTEwLCJ0dGlubCBwYWNrZXQgYWZ0ZXIgIixkZXN0LDApOwotCQkJ fSBlbHNlIHR0cHJ0eSA9IDA7IC8qIFJlc3RvcmUgaWYgcGFyY2hrIGVycm9yICovCi0JCSAgICB9 Ci0JCSAgICBzb3BtYXNrID0gdHRwbXNrOwotCQkgICAgbmVlZHBjaGsgPSAwOwotCQl9Ci0jZW5k aWYgLyogUEFSU0VOU0UgKi8KLQotCQlpZiAodGltbykJCS8qIFR1cm4gb2ZmIHRpbWVyIGlmIGl0 IHdhcyBvbiAqLwotCQkgIHR0aW1vZmYoKTsKLSAgICAgICAgICAgICAgICBja2hleGR1bXAoInR0 aW5sIGdvdCIsZGVzdCxpKTsKLQotI2lmZGVmIFNUUkVBTUlORwotCQkvKiB0dGlubCgpIHdhcyBj YWxsZWQgYmVjYXVzZSB0aGVyZSB3YXMgbm9uLXBhY2tldCAqLwotCQkvKiBkYXRhIHNpdHRpbmcg aW4gdGhlIGJhY2sgY2hhbm5lbC4gIElnbm9yZSBpdC4gICAqLwotCQlpZiAoc3RyZWFtaW5nICYm IHNuZHR5cCA9PSAnRCcpCi0JCSAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8K LQkJcmV0dXJuKGkpOwotCSAgICB9Ci0JfSAvKiBFbmQgb2Ygd2hpbGUoKSAqLwotCXR0aW1vZmYo KTsKLQlyZXR1cm4obik7Ci0gICAgfQotfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0vKiAgVCBU IEkgTiBDIC0tICBSZWFkIGEgY2hhcmFjdGVyIGZyb20gdGhlIGNvbW11bmljYXRpb24gbGluZSAg Ki8KLS8qCi0gT24gc3VjY2VzcywgcmV0dXJucyB0aGUgY2hhcmFjdGVyIHRoYXQgd2FzIHJlYWQs ID49IDAuCi0gT24gZmFpbHVyZSwgcmV0dXJucyAtMSBvciBvdGhlciBuZWdhdGl2ZSBteXJlYWQg ZXJyb3IgY29kZSwKLSAgIG9yIC0yIGlmIGNvbm5lY3Rpb24gaXMgYnJva2VuIG9yIHR0eWZkIDwg MC4KLSAgIG9yIC0zIGlmIHNlc3Npb24gbGltaXQgaGFzIGV4cGlyZWQsCi0gICBvciAtNCBpZiBz b21ldGhpbmcgb3Igb3RoZXIuLi4KLSBOT1RFOiBUaGUgQVBJIGRvZXMgbm90IHByb3ZpZGUgZm9y IHR0aW5jKCkgcmV0dXJuaW5nIGEgc3BlY2lhbCBjb2RlCi0gdXBvbiB0aW1lb3V0LCBidXQgd2Ug bmVlZCBpdC4gIFNvIGZvciB0aGlzIHdlIGhhdmUgYSBnbG9iYWwgdmFyaWFibGUsCi0gdHRpbmN0 aW1vLgotKi8KLXN0YXRpYyBpbnQgdHRpbmN0aW1vID0gMDsJCS8qIFl1ayAqLwotCi1pbnQKLXR0 aW5jKHRpbW8pIGludCB0aW1vOyB7Ci0KLSAgICBpbnQgbiA9IDAsIGZkOwotICAgIGludCBpc190 biA9IDA7Ci0gICAgQ0hBUiBjaCA9IDA7Ci0KLSAgICB0dGluY3RpbW8gPSAwOwotCi0gICAgaWYg KHR0eWZkIDwgMCkgcmV0dXJuKC0yKTsgICAgICAgICAgLyogTm90IG9wZW4uICovCi0KLSAgICBp c190biA9ICh4bG9jYWwgJiYgbmV0Y29ubiAmJiBJU19URUxORVQoKSkgfHwKLQkgICAgKCF4bG9j YWwgJiYgc3N0ZWxuZXQpOwotCi0jaWZkZWYgVFRMRUJVRgotICAgIGlmICh0dHB1c2ggPj0gMCkg ewotICAgICAgICBkZWJ1ZyhGMTExLCJ0dGluYyIsInR0cHVzaCIsdHRwdXNoKTsKLSAgICAgICAg Y2ggPSB0dHB1c2g7Ci0gICAgICAgIHR0cHVzaCA9IC0xOwotICAgICAgICByZXR1cm4oY2gpOwot ICAgIH0KLSAgICBpZiAobGVfZGF0YSkgewotICAgICAgICBpZiAobGVfZ2V0Y2hhcigmY2gpID4g MCkgewotICAgICAgICAgICAgZGVidWcoRjExMSwidHRpbmMgbGVfZ2V0Y2hhciIsImNoIixjaCk7 Ci0gICAgICAgICAgICByZXR1cm4oY2gpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIFRU TEVCVUYgKi8KLQotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpCi0gICAgICBmZCA9IGZk aW47Ci0gICAgZWxzZQotI2VuZGlmIC8qIE5FVENNRCAqLwotICAgICAgZmQgPSB0dHlmZDsKLQot ICAgIGlmICgodGltbyA8PSAwKQkJCS8qIFVudGltZWQuICovCi0jaWZkZWYgTVlSRUFECi0JfHwg KG15X2NvdW50ID4gMCkJCS8qIEJ1ZmZlcmVkIGNoYXIgYWxyZWFkeSB3YWl0aW5nLiAqLwotI2Vu ZGlmIC8qIE1ZUkVBRCAqLwotCSkgewotI2lmZGVmIE1ZUkVBRAotICAgICAgICAvKiBDb21tIGxp bmUgZmFpbHVyZSByZXR1cm5zIC0xIHRocnUgbXlyZWFkLCBzbyBubyAmPSAwMzc3ICovCi0JbiA9 IG15cmVhZCgpOwkJCS8qIFdhaXQgZm9yIGEgY2hhcmFjdGVyLi4uICovCi0JLyogZGVidWcoRjAw MCwidHRpbmMgTVlSRUFEIG4iLCIiLG4pOyAqLwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLQkvKiBk ZWJ1ZyhGMTAxLCJ0dGluYyB1X2VuY3J5cHQiLCIiLFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9O KSk7ICovCi0JaWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSAmJiBuID49IDApIHsKLQkg ICAgY2ggPSBuOwotCSAgICBja190bl9kZWNyeXB0KChjaGFyICopJmNoLDEpOwotCSAgICBuID0g Y2g7Ci0JfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQotI2lmZGVmIE5FVFBUWQotCWlm ICh0dHB0eSAmJiBuIDwgMCkgewotCSAgICBkZWJ1ZyhGMTAxLCJ0dGluYyBlcnJvciBvbiBwdHki LCIiLG4pOwotCSAgICB0dGNsb3MoMCk7Ci0JICAgIHJldHVybihuKTsKLQl9Ci0jZW5kaWYgLyog TkVUUFRZICovCi0KLSNpZmRlZiBUTkNPREUKLQlpZiAoKG4gPiAtMSkgJiYgaXNfdG4pCi0JICBy ZXR1cm4oKHVuc2lnbmVkKShuICYgMHhmZikpOwotCWVsc2UKLSNlbmRpZiAvKiBUTkNPREUgKi8K LQkgIHJldHVybihuIDwgMCA/IG4gOiAodW5zaWduZWQpKG4gJiB0dHBtc2spKTsKLQotI2Vsc2Ug IC8qIE1ZUkVBRCAqLwotCi0gICAgICAgIHdoaWxlICgobiA9IHJlYWQoZmQsJmNoLDEpKSA9PSAw KSAvKiBXYWl0IGZvciBhIGNoYXJhY3Rlci4gKi8KLSAgICAgICAgLyogU2hvdWxkbid0IGhhdmUg dG8gbG9vcCBpbiB2ZXIgNUEuICovCi0jaWZkZWYgTkVUQ09OTgotCSAgaWYgKG5ldGNvbm4pIHsJ CS8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIG5ldCAqLwotCSAgICAgIG5ldGNsb3MoKTsJCS8qIElm IHJlYWQoKSByZXR1cm5zIDAgaXQgbWVhbnMgKi8KLQkgICAgICBuZXRjb25uID0gMDsJCS8qIHRo ZSBjb25uZWN0aW9uIGhhcyBkcm9wcGVkLiAqLwotCSAgICAgIGVycm5vID0gRU5PVENPTk47Ci0J ICAgICAgcmV0dXJuKC0yKTsKLQkgIH0KLSNlbmRpZiAvKiBORVRDT05OICovCi0JICA7Ci0JLyog ZGVidWcoRjEwMSwidHRpbmMiLCIiLGNoKTsgKi8KLSNpZmRlZiBUTkNPREUKLQlpZiAoKG4gPiAw KSAmJiBpc190bikgewotI2lmZGVmIENLX0VOQ1JZUFRJT04KLQkgICAgaWYgKFRFTE9QVF9VKFRF TE9QVF9FTkNSWVBUSU9OKSkgewotCQlja190bl9kZWNyeXB0KCZjaCwxKTsKLQkJbiA9IGNoOwot CSAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotCSAgICByZXR1cm4oKHVuc2lnbmVk KShjaCAmIDB4ZmYpKTsKLQl9IGVsc2UKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICAgICAgcmV0 dXJuKChuIDwgMCkgPyAtNCA6ICgobiA9PSAwKSA/IC0xIDogKHVuc2lnbmVkKShjaCAmIHR0cG1z aykpKTsKLSNlbmRpZiAvKiBNWVJFQUQgKi8KLQotICAgIH0gZWxzZSB7CQkJCS8qIFRpbWVkIHJl YWQgKi8KLQotCWludCBvbGRhbGFybTsKLQlzYXZhbCA9IHNpZ25hbChTSUdBTFJNLHRpbWVyaCk7 CS8qIFNldCB1cCBoYW5kbGVyLCBzYXZlIG9sZCBvbmUuICovCi0Jb2xkYWxhcm0gPSBhbGFybSh0 aW1vKTsJCS8qIFNldCBhbGFybSwgc2F2ZSBvbGQgb25lLiAqLwotCWlmICgKLSNpZmRlZiBDS19Q T1NJWF9TSUcKLQkgICAgc2lnc2V0am1wKHNqYnVmLDEpCi0jZWxzZQotCSAgICBzZXRqbXAoc2pi dWYpCi0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0JICAgICkgewkJCQkvKiBUaW1lciBleHBp cmVkICovCi0JICAgIHR0aW5jdGltbyA9IDE7Ci0JICAgIG4gPSAtMTsJCQkvKiBzZXQgZmxhZyAq LwotCX0gZWxzZSB7Ci0jaWZkZWYgTVlSRUFECi0JICAgIG4gPSBteXJlYWQoKTsJCS8qIElmIG1h bmFnaW5nIG93biBidWZmZXIuLi4gKi8KLQkgICAgZGVidWcoRjEwMSwidHRpbmMgbXlyZWFkIiwi IixuKTsKLQkgICAgY2ggPSBuOwotI2Vsc2UKLQkgICAgbiA9IHJlYWQoZmQsJmNoLDEpOwkJLyog T3RoZXJ3aXNlIGNhbGwgdGhlIHN5c3RlbS4gKi8KLQkgICAgaWYgKG4gPT0gMCkgbiA9IC0xOwot CSAgICBkZWJ1ZyhGMTAxLCJ0dGluYyByZWFkIiwiIixuKTsKLSNlbmRpZiAvKiBNWVJFQUQgKi8K LQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLQkgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBU SU9OKSAmJiBuID49IDApIHsKLQkJY2tfdG5fZGVjcnlwdCgoY2hhciAqKSZjaCwxKTsKLQkgICAg fQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQkgICAgaWYgKG4gPj0gMCkKLQkgICAgICBu ID0gKHVuc2lnbmVkKSAoY2ggJiAweGZmKTsKLQkgICAgZWxzZQotCSAgICAgIG4gPSAobiA8IDAp ID8gLTQgOiAtMjsJLyogU3BlY2lhbCByZXR1cm4gY29kZXMuICovCi0JfQotCXR0aW1vZmYoKTsJ CQkvKiBUdXJuIG9mZiB0aGUgdGltZXIgKi8KLQlpZiAob2xkYWxhcm0gPiAwKSB7Ci0JICAgIGlm IChuID09IC0xKQkJLyogYW5kIHJlc3RvcmUgYW55IHByZXZpb3VzIGFsYXJtICovCi0JICAgICAg b2xkYWxhcm0gLT0gdGltbzsKLQkgICAgaWYgKG9sZGFsYXJtIDwgMCkJCS8qIGFkanVzdGVkIGJ5 IG91ciB0aW1lb3V0IGludGVydmFsICovCi0JICAgICAgb2xkYWxhcm0gPSAwOwotCSAgICBpZiAo b2xkYWxhcm0pIHsKLQkgICAgICAgIGRlYnVnKEYxMDEsInR0aW5jIHJlc3RvcmluZyBvbGRhbGFy bSIsIiIsb2xkYWxhcm0pOwotCQlhbGFybShvbGRhbGFybSk7Ci0JICAgIH0KLQl9Ci0jaWZkZWYg TkVUQ09OTgotCWlmIChuZXRjb25uKSB7Ci0JICAgIGlmIChuID09IC0yKSB7CQkvKiByZWFkKCkg cmV0dXJucyAwICovCi0JCW5ldGNsb3MoKTsJCS8qIG9uIG5ldHdvcmsgcmVhZCBmYWlsdXJlICov Ci0JCW5ldGNvbm4gPSAwOwotCQllcnJubyA9IEVOT1RDT05OOwotCSAgICB9Ci0JfQotI2VuZGlm CS8qIE5FVENPTk4gKi8KLSNpZmRlZiBUTkNPREUKLQlpZiAoKG4gPiAtMSkgJiYgaXNfdG4pCi0J ICByZXR1cm4oKHVuc2lnbmVkKShuICYgMHhmZikpOwotCWVsc2UKLSNlbmRpZiAvKiBUTkNPREUg Ki8KLQkgIC8qIFJldHVybiBtYXNrZWQgY2hhciBvciBuZWcuICovCi0JICByZXR1cm4oIChuIDwg MCkgPyBuIDogKHVuc2lnbmVkKShuICYgdHRwbXNrKSApOwotICAgIH0KLX0KLQotLyogIFMgTiBE IEIgUiBLICAtLSAgU2VuZCBhIEJSRUFLIHNpZ25hbCBvZiB0aGUgZ2l2ZW4gZHVyYXRpb24gICov Ci0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotc25kYnJrKGludCBtc2VjKSB7CQkJLyog QXJndW1lbnQgaXMgbWlsbGlzZWNvbmRzICovCi0jZWxzZQotc25kYnJrKG1zZWMpIGludCBtc2Vj OyB7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNpZm5kZWYgUE9TSVgKLSAgICBpbnQgeCwgbjsK LSNlbmRpZiAvKiBQT1NJWCAqLwotCi0jaWZkZWYgT1hPUwotI2RlZmluZSBCU0RCUkVBSwotI2Vu ZGlmIC8qIE9YT1MgKi8KLQotI2lmZGVmIEFOWUJTRAotI2RlZmluZSBCU0RCUkVBSwotI2VuZGlm IC8qIEFOWUJTRCAqLwotCi0jaWZkZWYgQlNENDQKLSNkZWZpbmUgQlNEQlJFQUsKLSNlbmRpZiAv KiBCU0Q0NCAqLwotCi0jaWZkZWYgQ09IRVJFTlQKLSNpZmRlZiBCU0RCUkVBSwotI3VuZGVmIEJT REJSRUFLCi0jZW5kaWYgLyogQlNEQlJFQUsgKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0j aWZkZWYgQkVMTFYxMAotI2lmZGVmIEJTREJSRUFLCi0jdW5kZWYgQlNEQlJFQUsKLSNlbmRpZiAv KiBCU0RCUkVBSyAqLwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLQotI2lmZGVmIFBST1ZYMQotICAg IGNoYXIgc3BkOwotI2VuZGlmIC8qIFBST1ZYMSAqLwotCi0gICAgZGVidWcoRjEwMSwidHRzbmRi IHR0eWZkIiwiIix0dHlmZCk7Ci0gICAgaWYgKHR0eWZkIDwgMCkgcmV0dXJuKC0xKTsgICAgICAg ICAgLyogTm90IG9wZW4uICovCi0KLSNpZmRlZiBQbGFuOQotICAgIHJldHVybiBwOXNuZGJyayht c2VjKTsKLSNlbHNlCi0jaWZkZWYgTkVUQ09OTgotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBp cGUpCQkJCS8qIFBpcGUgKi8KLSAgICAgIHJldHVybih0dG9jKCdcMCcpKTsKLSNlbmRpZiAvKiBO RVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpCi0gICAgICByZXR1cm4odHRv YygnXDAnKSk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgaWYgKG5ldGNvbm4pIAkJCS8qIFNl bmQgbmV0d29yayBCUkVBSyAqLwotICAgICAgcmV0dXJuKG5ldGJyZWFrKCkpOwotI2VuZGlmIC8q IE5FVENPTk4gKi8KLQotICAgIGlmIChtc2VjIDwgMSB8fCBtc2VjID4gNTAwMCkgcmV0dXJuKC0x KTsgLyogQmFkIGFyZ3VtZW50ICovCi0KLSNpZmRlZiBQT1NJWAkJCQkvKiBFYXN5IGluIFBPU0lY ICovCi0gICAgewotCWludCB4OwotCWRlYnVnKEYxMTEsInNuZGJyayBQT1NJWCIsY2tpdG9hKG1z ZWMpLChtc2VjLzM3NSkpOwotCWVycm5vID0gMDsKLQl4ID0gdGNzZW5kYnJlYWsodHR5ZmQsbXNl YyAvIDM3NSk7Ci0JZGVidWcoRjExMSwic25kYnJrIHRjc2VuZGJyZWFrIixja2l0b2EoZXJybm8p LHgpOwotCXJldHVybih4KTsKLSAgICB9Ci0jZWxzZQotI2lmZGVmIFBST1ZYMQotICAgIGd0dHko dHR5ZmQsJnR0YnVmKTsgICAgICAgICAgICAgICAgIC8qIEdldCBjdXJyZW50IHR0eSBmbGFncyAq LwotICAgIHNwZCA9IHR0YnVmLnNnX29zcGVlZDsgICAgICAgICAgICAgIC8qIFNhdmUgc3BlZWQg Ki8KLSAgICB0dGJ1Zi5zZ19vc3BlZWQgPSBCNTA7ICAgICAgICAgICAgICAvKiBDaGFuZ2UgdG8g NTAgYmF1ZCAqLwotICAgIHN0dHkodHR5ZmQsJnR0YnVmKTsgICAgICAgICAgICAgICAgIC8qICAu Li4gKi8KLSAgICBuID0gKGludClzdHJsZW4oYnJudWxzKTsJCS8qIFNlbmQgdGhlIHJpZ2h0IG51 bWJlciBvZiBudWxscyAqLwotICAgIHggPSBtc2VjIC8gOTE7Ci0gICAgaWYgKHggPiBuKSB4ID0g bjsKLSAgICB3cml0ZSh0dHlmZCxicm51bHMsbik7Ci0gICAgdHRidWYuc2dfb3NwZWVkID0gc3Bk OyAgICAgICAgICAgICAgLyogUmVzdG9yZSBzcGVlZCAqLwotICAgIHN0dHkodHR5ZmQsJnR0YnVm KTsgICAgICAgICAgICAgICAgIC8qICAuLi4gKi8KLSAgICByZXR1cm4oMCk7Ci0jZWxzZQotI2lm ZGVmIGFlZ2lzCi0gICAgc2lvXyRjb250cm9sKChzaG9ydCl0dHlmZCwgc2lvXyRzZW5kX2JyZWFr LCBtc2VjLCBzdCk7Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSNpZmRlZiBCU0RCUkVBSwotICAg IG4gPSBGV1JJVEU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsdXNoIG91dHB1dCBxdWV1 ZS4gKi8KLS8qIFdhdGNoIG91dCBmb3IgaW50IHZzIGxvbmcgcHJvYmxlbXMgaW4gJm4gYXJnISAq LwotICAgIGRlYnVnKEYxMDEsInNuZGJyayBCU0RCUkVBSyIsIiIsbXNlYyk7Ci0gICAgaW9jdGwo dHR5ZmQsVElPQ0ZMVVNILCZuKTsgICAgICAgICAgLyogSWdub3JlIGFueSBlcnJvcnMuLiAqLwot ICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DU0JSSywoY2hhciAqKTApIDwgMCkgeyAgLyogVHVybiBv biBCUkVBSyAqLwotICAgICAgICBwZXJyb3IoIkNhbid0IHNlbmQgQlJFQUsiKTsKLSAgICAgICAg cmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgeCA9IG1zbGVlcChtc2VjKTsgICAgICAgICAgICAgICAg ICAgIC8qIFNsZWVwIGZvciBzbyBtYW55IG1pbGxpc2Vjb25kcyAqLwotICAgIGlmIChpb2N0bCh0 dHlmZCxUSU9DQ0JSSywoY2hhciAqKTApIDwgMCkgeyAgLyogVHVybiBvZmYgQlJFQUsgKi8KLSAg ICAgICAgcGVycm9yKCJCUkVBSyBzdHVjayEhISIpOwotICAgICAgICBkb2V4aXQoQkFEX0VYSVQs LTEpOwkJLyogR2V0IG91dCwgY2xvc2luZyB0aGUgbGluZS4gKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAgIHdpdGggYmFkIGV4aXQgc3RhdHVzICovCi0gICAg fQotICAgIHJldHVybih4KTsKLSNlbHNlCi0jaWZkZWYgQVRUU1YKLS8qCi0gIE5vIHdheSB0byBz ZW5kIGEgbG9uZyBCUkVBSyBpbiBTeXMgViwgc28gc2VuZCBhIGJ1bmNoIG9mIHJlZ3VsYXIgb25l cy4KLSAgKEFjdHVhbGx5LCBTeXMgViBSNCBpcyAqc3VwcG9zZWQqIHRvIGhhdmUgdGhlIFBPU0lY IHRjc2VuZGJyZWFrKCkgZnVuY3Rpb24sCi0gIGJ1dCB0aGVyZSdzIG5vIHdheSBmb3IgdGhpcyBj b2RlIHRvIGtub3cgZm9yIHN1cmUuKQotKi8KLSAgICBkZWJ1ZyhGMTAxLCJzbmRicmsgQVRUU1Yi LCIiLG1zZWMpOwotICAgIHggPSBtc2VjIC8gMjc1OwotICAgIGZvciAobiA9IDA7IG4gPCB4OyBu KyspIHsKLQkvKiBSZXBvcnRlZGx5IHRoZSBjYXN0IGJyZWFrcyB0aGlzIGZ1bmN0aW9uIG9uIHNv bWUgc3lzdGVtcyAqLwotCS8qIEJ1dCB0aGVuIHdoeSB3YXMgaXQgaGVyZSBpbiB0aGUgZmlyc3Qg cGxhY2U/ICovCi0JaWYgKGlvY3RsKHR0eWZkLFRDU0JSSywgLyogKGNoYXIgKikgKi8gMCkgPCAw KSB7Ci0JICAgIHBlcnJvcigiQ2FuJ3Qgc2VuZCBCUkVBSyIpOwotCSAgICByZXR1cm4oLTEpOwot CX0KLSAgICB9Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSNpZmRlZiAgVjcKLSAgICBkZWJ1ZyhG MTAxLCJzbmRicmsgVjciLCIiLG1zZWMpOwotICAgIHJldHVybihnZW5icmsodHR5ZmQsMjUwKSk7 CQkvKiBTaW11bGF0ZSBhIEJSRUFLICovCi0jZWxzZQotICAgIGRlYnVnKEYxMDEsInNuZGJyayBj YXRjaGFsbCIsIiIsbXNlYyk7Ci0gICAgdHRvYygwKTt0dG9jKDApO3R0b2MoMCk7dHRvYygwKTsK LSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogVjcgKi8KLSNlbmRpZiAvKiBCU0RCUkVBSyAqLwot I2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogYWVnaXMgKi8KLSNlbmRpZiAvKiBQUk9WWDEg Ki8KLSNlbmRpZiAvKiBQT1NJWCAqLwotI2VuZGlmIC8qIFBsYW45ICovCi19Ci0KLS8qICBUIFQg UyBOIEQgQiAgLS0gIFNlbmQgYSBCUkVBSyBzaWduYWwgICovCi0KLWludAotdHRzbmRiKCkgewot I2lmZGVmIFROX0NPTVBPUlQKLSAgICBpZiAobmV0Y29ubiAmJiBpc3RuY29tcG9ydCgpKQotICAg ICAgcmV0dXJuKCh0bnNuZGIoMjc1TCkgPj0gMCkgPyAwIDogLTEpOwotICAgIGVsc2UKLSNlbmRp ZiAvKiBUTl9DT01QT1JUICovCi0gICAgICByZXR1cm4oc25kYnJrKDI3NSkpOwotfQotCi0vKiAg VCBUIFMgTiBEIEwgQiAgLS0gIFNlbmQgYSBMb25nIEJSRUFLIHNpZ25hbCAgKi8KLQotaW50Ci10 dHNuZGxiKCkgewotI2lmZGVmIFROX0NPTVBPUlQKLSAgICBpZiAobmV0Y29ubiAmJiBpc3RuY29t cG9ydCgpKQotICAgICAgcmV0dXJuKCh0bnNuZGIoMTgwMEwpID49IDApID8gMCA6IC0xKTsKLSAg ICBlbHNlCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotICAgIHJldHVybihzbmRicmsoMTUwMCkp OwotfQotCi0vKiAgTSBTIEwgRSBFIFAgIC0tICBNaWxsaXNlY29uZCB2ZXJzaW9uIG9mIHNsZWVw KCkuICAqLwotCi0vKgotICBDYWxsIHdpdGggbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyAodGhvdXNh bmR0aHMgb2Ygc2Vjb25kcykgdG8gc2xlZXAuCi0gIEludGVuZGVkIG9ubHkgZm9yIHNtYWxsIGlu dGVydmFscy4gIEZvciBiaWcgb25lcywganVzdCB1c2Ugc2xlZXAoKS4KLSAgSGlnaGx5IHN5c3Rl bS1kZXBlbmRlbnQuCi0gIFJldHVybnMgMCBhbHdheXMsIGV2ZW4gaWYgaXQgZGlkbid0IHdvcmsu Ci0qLwotCi0vKiBEZWZpbmUgTVNMRlRJTUUgZm9yIHN5c3RlbXMgdGhhdCBtdXN0IHVzZSBhbiBm dGltZSgpIGxvb3AuICovCi0jaWZkZWYgQU5ZQlNECQkJCS8qIEZvciBwcmUtNC4yIEJTRCB2ZXJz aW9ucyAqLwotI2lmbmRlZiBCU0Q0Ci0jZGVmaW5lIE1TTEZUSU1FCi0jZW5kaWYgLyogQlNENCAq LwotI2VuZGlmIC8qIEFOWUJTRCAqLwotCi0jaWZkZWYgVE9XRVIxCQkJCS8qIE5DUiBUb3dlciBP UyAxLjAgKi8KLSNkZWZpbmUgTVNMRlRJTUUKLSNlbmRpZiAvKiBUT1dFUjEgKi8KLQotI2lmZGVm IENPSEVSRU5UICAgICAgICAgLyogQ29oZXJlbnQuLi4gKi8KLSNpZm5kZWYgX0kzODYgICAgICAg ICAgIC8qIE1heWJlIENvaGVyZW50LzM4NiBzaG91bGQgZ2V0IHRoaXMsIHRvbyAqLwotI2RlZmlu ZSBNU0xGVElNRSAgICAgICAgLyogT3BpbmlvbnMgYXJlIGRpdmlkZWQgKi8KLSNlbmRpZiAvKiBf STM4NiAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYg R0VUTVNFQwotCi0vKiBNaWxsaXNlY29uZCB0aW1lciAqLwotCi1zdGF0aWMgbG9uZyBtc2VjYmFz ZSA9IDBMOwkJLyogVW5zaWduZWQgbG9uZyBub3QgcG9ydGFibGUgKi8KLQotbG9uZwotZ2V0bXNl YygpIHsJCQkJLyogTWlsbGlzZWNvbmRzIHNpbmNlIGJhc2UgdGltZSAqLwotICAgIHN0cnVjdCB0 aW1ldmFsIHh2OwotICAgIHN0cnVjdCB0aW1lem9uZSB4ejsKLSAgICBsb25nIHNlY3MsIG1zZWNz OwotICAgIGlmICgKLSNpZmRlZiBHVE9ET05FQVJHCi0JZ2V0dGltZW9mZGF5KCZ0dikKLSNlbHNl Ci0jaWZkZWYgUFRYCi0JZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCkKLSNlbHNlCi0JZ2V0dGltZW9m ZGF5KCZ0diwgJnR6KQotI2VuZGlmIC8qIFBUWCAqLwotI2VuZGlmIC8qIEdUT0RPTkVBUkcgKi8K LQk8IDApCi0gICAgICByZXR1cm4oLTEpOwotICAgIGlmIChtc2VjYmFzZSA9PSAwTCkgewkJLyog Rmlyc3QgY2FsbCwgc2V0IGJhc2UgdGltZS4gKi8KLQltc2VjYmFzZSA9IHR2LnR2X3NlYzsKLQlk ZWJ1ZyhGMTAxLCJnZXRtc2VjIGJhc2UiLCIiLG1zZWNiYXNlKTsKLSAgICB9Ci0gICAgcmV0dXJu KCgodHYudHZfc2VjIC0gbXNlY2Jhc2UpICogMTAwMEwpICsgKHR2LnR2X3VzZWMgLyAxMDAwTCkp OwotfQotI2VuZGlmIC8qIEdFVE1TRUMgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRl ZiBTRUxFQ1QKLWludAotdHR3YWl0KGZkLCBzZWNzKSBpbnQgZmQsIHNlY3M7IHsKLSAgICBpbnQg eDsKLSAgICBmZF9zZXQgcmZkczsKLSAgICBGRF9aRVJPKCZyZmRzKTsKLSAgICBGRF9TRVQoZmQs JnJmZHMpOwotICAgIHR2LnR2X3NlYyA9IHNlY3M7Ci0gICAgdHYudHZfdXNlYyA9IDBMOwotICAg IGVycm5vID0gMDsKLSAgICBpZiAoKHggPSBzZWxlY3QoRkRfU0VUU0laRSwKLSNpZmRlZiBIUFVY OQotCQkgICAgKGludCAqKQotI2Vsc2UKLSNpZmRlZiBIUFVYMTAwMAotCQkgICAgKGludCAqKQot I2VuZGlmIC8qIEhQVVgxMDAwICovCi0jZW5kaWYgLyogSFBVWDkgKi8KLQkJICAgICZyZmRzLAot CQkgICAgMCwgMCwgJnR2KSkgPCAwKSB7Ci0JZGVidWcoRjEwMSwidHR3YWl0IHNlbGVjdCBlcnJu byIsIiIsZXJybm8pOwotCXJldHVybigwKTsKLSAgICB9IGVsc2UgewotCWRlYnVnKEYxMDEsInR0 d2FpdCBPSyIsIiIsZXJybm8pOwotCXggPSBGRF9JU1NFVChmZCwgJnJmZHMpOwotCWRlYnVnKEYx MDEsInR0d2FpdCBzZWxlY3QgeCIsIiIseCk7Ci0JcmV0dXJuKHggPyAxIDogMCk7Ci0gICAgfQot fQotI2VuZGlmIC8qIFNFTEVDVCAqLwotCi1pbnQKLW1zbGVlcChtKSBpbnQgbTsgewotLyoKLSAg T3RoZXIgcG9zc2liaWxpdGllcyBoZXJlIGFyZToKLSAgIG5hbm9zbGVlcCgpLCByZXBvcnRlZGx5 IGRlZmluZWQgaW4gUE9TSVguNC4KLSAgIHNnaW5hcCgpLCBJUklYIG9ubHkgKGJhY2sgdG8gd2hh dCBJUklYIHZlcnNpb24gSSBkb24ndCBrbm93KS4KLSovCi0jaWZkZWYgUGxhbjkKLSAgICByZXR1 cm4gX1NMRUVQKG0pOwotI2Vsc2UKLSNpZmRlZiBCRU9TT1JCRUJPWAotICAgIHNub296ZShtKjEw MDApOwotI2Vsc2UgLyogQkVPU09SQkVCT1ggKi8KLSNpZmRlZiBTRUxFQ1QKLSAgICBpbnQgdDEs IHg7Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIFNFTEVDVCAxIiwiIixtKTsKLSAgICBpZiAobSA8 PSAwKSByZXR1cm4oMCk7Ci0gICAgaWYgKG0gPj0gMTAwMCkgewkJCS8qIENhdGNoIGJpZyBhcmd1 bWVudHMuICovCi0Jc2xlZXAobS8xMDAwKTsKLQltID0gbSAlIDEwMDA7Ci0JaWYgKG0gPCAxMCkg cmV0dXJuKDApOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgU0VMRUNUIDIiLCIiLG0p OwotI2lmZGVmIEJFTExWMTAKLSAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3Nl dCAqKTAsIChmZF9zZXQgKikwLCBtICk7Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIEJFTExWMTAg c2VsZWN0IiwiIix4KTsKLSNlbHNlIC8qIEJFTExWMTAgKi8KLSNpZmRlZiBIUFVYOQotICAgIGdl dHRpbWVvZmRheSgmdHYsICZ0eik7Ci0jZWxzZQotCi0jaWZuZGVmIENPSEVSRU5UCi0jaWZkZWYg R1RPRE9ORUFSRwotICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2KSA8IDApCi0jZWxzZQotI2lmZGVm IFBUWAotICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2LE5VTEwpIDwgMCkKLSNlbHNlCi0jaWZkZWYg Tk9USU1FWk9ORQotICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKSA8IDApCS8qIHdvbmRl ciB3aGF0IHRoaXMgZG9lcy4uLiAqLwotI2Vsc2UKLSAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0diwg JnR6KSA8IDApCi0jZW5kaWYgLyogTk9USU1FWk9ORSAqLwotI2VuZGlmIC8qIFBUWCAqLwotI2Vu ZGlmIC8qIEdUT0RPTkVBUkcgKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAgdDEgPSB0di50dl9z ZWM7ICAgICAgICAgICAgICAgICAgICAgLyogU2Vjb25kcyAqLwotI2VuZGlmIC8qIENPSEVSRU5U ICovCi0jZW5kaWYgLyogSFBVWDkgKi8KLSAgICB0di50dl9zZWMgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAvKiBVc2Ugc2VsZWN0KCkgKi8KLSAgICB0di50dl91c2VjID0gbSAqIDEwMDBMOwot I2lmZGVmIEJTRDQ0Ci0gICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikw LCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIEJTRDQ0IHNlbGVj dCIsIiIseCk7Ci0jZWxzZSAvKiBCU0Q0NCAqLwotI2lmZGVmIF9fbGludXhfXwotICAgIHggPSBz ZWxlY3QoIDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwot ICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBfX2xpbnV4X18gc2VsZWN0IiwiIix4KTsKLSNlbHNlIC8q IF9fbGludXhfXyAqLwotI2lmZGVmIEJTRDQzCi0gICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAq KTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0gICAgZGVidWcoRjEwMSwibXNs ZWVwIEJTRDQzIHNlbGVjdCIsIiIseCk7Ci0jZWxzZSAvKiBCU0Q0MyAqLwotI2lmZGVmIFFOWDYK LSAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikw LCAmdHYgKTsKLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgUU5YNiBzZWxlY3QiLCIiLHgpOwotI2Vs c2UgLyogUU5YNiAqLwotI2lmZGVmIFFOWAotICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikw LCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwotICAgIGRlYnVnKEYxMDEsIm1zbGVl cCBRTlggc2VsZWN0IiwiIix4KTsKLSNlbHNlIC8qIFFOWCAqLwotI2lmZGVmIENPSEVSRU5UCi0g ICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwg JnR2ICk7Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIENPSEVSRU5UIHNlbGVjdCIsIiIseCk7Ci0j ZWxzZSAvKiBDT0hFUkVOVCAqLwotI2lmZGVmIEhQVVgxMDAwCQkJCS8qIDEwLjAwIG9ubHksIG5v dCAxMC4xMCBvciBsYXRlciAqLwotICAgIHggPSBzZWxlY3QoIDAsIChpbnQgKikwLCAoaW50ICop MCwgKGludCAqKTAsICZ0diApOwotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBIUC1VWCAxMC4wMCBz ZWxlY3QiLCIiLHgpOwotI2Vsc2UgLyogSFBVWDEwMDAgKi8KLSNpZmRlZiBTVlI0Ci0gICAgeCA9 IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7 Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIFNWUjQgc2VsZWN0IiwiIix4KTsKLSNlbHNlIC8qIFNW UjQgKi8KLSNpZmRlZiBPU0Y0MAotICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAoZmRf c2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBPU0Y0 MCBzZWxlY3QiLCIiLHgpOwotI2Vsc2UgLyogT1NGNDAgKi8KLSNpZmRlZiBQVFgKLSAgICB4ID0g c2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsK LSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgT1NGNDAgc2VsZWN0IiwiIix4KTsKLSNlbHNlCi0gICAg eCA9IHNlbGVjdCggMCwgKGludCAqKTAsIChpbnQgKikwLCAoaW50ICopMCwgJnR2ICk7Ci0gICAg ZGVidWcoRjEwMSwibXNsZWVwIGNhdGNoLWFsbCBzZWxlY3QiLCIiLHgpOwotI2VuZGlmIC8qIFBU WCAqLwotI2VuZGlmIC8qIE9TRjQwICovCi0jZW5kaWYgLyogSFAxMDAwICovCi0jZW5kaWYgLyog U1ZSNCAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0jZW5kaWYgLyogUU5YICovCi0jZW5kaWYg LyogUU5YNiAqLwotI2VuZGlmIC8qIEJTRDQzICovCi0jZW5kaWYgLyogX19saW51eF9fICovCi0j ZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBCRUxMVjEwICovCi0gICAgcmV0dXJuKDApOwot Ci0jZWxzZQkJCQkJLyogTm90IFNFTEVDVCAqLwotI2lmZGVmIENLX1BPTEwJCQkJLyogV2UgaGF2 ZSBwb2xsKCkgKi8KLSAgICBzdHJ1Y3QgcG9sbGZkIHBmZDsJCQkvKiBTdXBwbHkgYSB2YWxpZCBh ZGRyZXNzIGZvciBwb2xsKCkgKi8KLQotI2lmZGVmIE9EVDMwCQkJCS8qIEJ1dCBpbiBTQ08gT0RU IDMuMCAqLwotI2lmZGVmIE5BUAkJCQkvKiB3ZSBzaG91bGQgdXNlIG5hcCgpIGluc3RlYWQgKi8K LSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgT0RUIDMuMCBOQVAiLCIiLG0pOyAvKiBiZWNhdXNlIHVz aW5nIHBvbGwoKSBoZXJlICovCi0gICAgbmFwKChsb25nKW0pOwkJCSAgIC8qIHNlZW1zIHRvIGJy ZWFrIGRpYWxpbmcuICovCi0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAxLCJt c2xlZXAgT0RUIDMuMCBQT0xMIiwiIixtKTsKLSAgICBwb2xsKCZwZmQsIDAsIG0pOwotICAgIHJl dHVybigwKTsKLSNlbmRpZiAvKiBOQVAgKi8KLSNlbHNlCi0gICAgZGVidWcoRjEwMSwibXNsZWVw IFBPTEwiLCIiLG0pOwotICAgIHBvbGwoJnBmZCwgMCwgbSk7Ci0gICAgcmV0dXJuKDApOwotI2Vu ZGlmIC8qIE9EVDMwICovCi0KLS8qCi0gIFdlIGNvdWxkIGhhbmRsZSB0aGUgYWJvdmUgbW9yZSBj bGVhbmx5IGJ5IGp1c3QgbGV0dGluZyBuYXAoKSBhbHdheXMKLSAgdGFrZSBwcmVjZWRlbmNlIG92 ZXIgcG9sbCgpIGluIHRoaXMgcm91dGluZSwgYnV0IHRoZXJlIGlzIG5vIHdheSB0byBrbm93Ci0g IHdoZXRoZXIgdGhhdCB3b3VsZCBicmVhayBzb21ldGhpbmcgZWxzZS4KLSovCi0KLSNlbHNlCQkJ CQkvKiBOb3QgUE9MTCAqLwotI2lmZGVmIFVTTEVFUAotLyoKLSAgIlRoaXMgcm91dGluZSBpcyBp bXBsZW1lbnRlZCB1c2luZyBzZXRpdGltZXIoMik7IGl0IHJlcXVpcmVzIGVpZ2h0Ci0gIHN5c3Rl bSBjYWxscy4uLiIuICBJbiBvdGhlciB3b3JkcywgaXQgbWlnaHQgdGFrZSA1IG1pbnV0ZXMgdG8g c2xlZXAKLSAgMTAgbWlsbGlzZWNvbmRzLi4uCi0qLwotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBV U0xFRVAiLCIiLG0pOwotICAgIGlmIChtID49IDEwMDApIHsJCQkvKiBDYXRjaCBiaWcgYXJndW1l bnRzLiAqLwotCXNsZWVwKG0vMTAwMCk7Ci0JbSA9IG0gJSAxMDAwOwotCWlmIChtIDwgMTApIHJl dHVybigwKTsKLSAgICB9Ci0gICAgdXNsZWVwKCh1bnNpZ25lZCBpbnQpKG0gKiAxMDAwKSk7Ci0g ICAgcmV0dXJuKDApOwotI2Vsc2UKLSNpZmRlZiBhZWdpcwotICAgIHRpbWVfJGNsb2NrX3QgZHVy OwotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBhZWdpcyIsIiIsbSk7Ci0gICAgZHVyLmMyLmhpZ2gx NiA9IDA7Ci0gICAgZHVyLmMyLmxvdzMyICA9IDI1MCAqIG07IC8qIG9uZSBtaWxsaXNlY29uZCA9 IDI1MCBmb3VyIG1pY3Jvc2Vjb25kIHRpY2tzICovCi0gICAgdGltZV8kd2FpdCh0aW1lXyRyZWxh dGl2ZSwgZHVyLCBzdCk7Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSNpZmRlZiBQUk9WWDEKLSAg ICBkZWJ1ZyhGMTAxLCJtc2xlZXAgVmVuaXgiLCIiLG0pOwotICAgIGlmIChtIDw9IDApIHJldHVy bigwKTsKLSAgICBzbGVlcCgtKChtICogNjAgKyA1MDApIC8gMTAwMCkpOwotICAgIHJldHVybigw KTsKLSNlbHNlCi0jaWZkZWYgTkFQCi0gICAgZGVidWcoRjEwMSwibXNsZWVwIE5BUCIsIiIsbSk7 Ci0gICAgbmFwKChsb25nKW0pOwotICAgIHJldHVybigwKTsKLSNlbHNlCi0jaWZkZWYgQVRUU1YK LSNpZm5kZWYgQlNENDQKLSAgICBleHRlcm4gbG9uZyB0aW1lcygpOwkJLyogT3IgI2luY2x1ZGUg PHRpbWVzLmg+ID8gKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotICAgIGxvbmcgdDEsIHQyLCB0YXJy YXlbNF07Ci0gICAgaW50IHQzOwotICAgIGNoYXIgKmNwID0gZ2V0ZW52KCJIWiIpOwotICAgIGlu dCBDTE9DS19USUNLOwotICAgIGludCBoZXJ0ejsKLQotICAgIGlmIChjcCAmJiAoaGVydHogPSBh dG9pKGNwKSkpIHsKLSAgICAgICAgQ0xPQ0tfVElDSyAgPSAxMDAwIC8gaGVydHo7Ci0gICAgfSBl bHNlIHsJCQkJLyogcHJvYmFibHkgc2luZ2xlIHVzZXIgbW9kZSAqLwotI2lmZGVmIEhaCi0gICAg ICAgIENMT0NLX1RJQ0sgID0gMTAwMCAvIEhaOwotI2Vsc2UKLQlzdGF0aWMgd2FybmVkID0gMDsK LQkvKiBIWiBhbHdheXMgZXhpc3RzIGluLCBmb3IgaW5zdGFuY2UsIFNDTyBYZW5peCwgc28geW91 IGRvbid0IGhhdmUgdG8KLQkgKiBtYWtlIHNwZWNpYWwgI2lmZGVmcyBmb3IgWEVOSVggaGVyZSwg bGlrZSBpbiB2ZXIgNEYuIEFsc28sIGlmIHlvdQotCSAqIGhhdmUgWGVuaXgsIHlvdSBoYXZlIHNo b3VsZCBoYXZlIG5hcCgpLCBzbyB0aGUgYmVzdCBpcyB0byB1c2UgLUROQVAKLQkgKiBpbiB0aGUg bWFrZWZpbGUuIE1vc3Qgc3lzdGVtcyBoYXZlIEhaLgotCSAqLwotCUNMT0NLX1RJQ0sgPSAxNzsJ CS8qIDEvNjAgc2VjICovCi0JaWYgKCF3YXJuZWQpIHsKLSAgICAgICAgICBwcmludGYoIndhcm5p bmc6IGVudmlyb25tZW50IHZhcmlhYmxlIEhaIGJhZC4uLiB1c2luZyBIWj0lZFxyXG4iLAotCQkg MTAwMCAvIENMT0NLX1RJQ0spOwotICAgICAgICAgIHdhcm5lZCA9IDE7Ci0JfQotI2VuZGlmIC8q ICFIWiAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgQVRUU1YiLCIiLG0pOwotICAg IGlmIChtIDw9IDApIHJldHVybigwKTsKLSAgICBpZiAobSA+PSAxMDAwKSB7CQkJLyogQ2F0Y2gg YmlnIGFyZ3VtZW50cy4gKi8KLQlzbGVlcChtLzEwMDApOwotCW0gPSBtICUgMTAwMDsKLQlpZiAo bSA8IDEwKSByZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmICgodDEgPSB0aW1lcyh0YXJyYXkpKSA8 IDApIHJldHVybigtMSk7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaWYgKCh0MiA9IHRpbWVz KHRhcnJheSkpIDwgMCkgcmV0dXJuKC0xKTsKLSAgICAgICAgdDMgPSAoKGludCkodDIgLSB0MSkp ICogQ0xPQ0tfVElDSzsKLSAgICAgICAgaWYgKHQzID4gbSkgcmV0dXJuKHQzKTsKLSAgICB9Ci0j ZWxzZSAvKiBOb3QgQVRUU1YgKi8KLSNpZmRlZiBNU0xGVElNRQkJCQkvKiBVc2UgZnRpbWUoKSBs b29wLi4uICovCi0gICAgaW50IHQxLCB0MyA9IDA7Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIE1T TEZUSU1FIiwiIixtKTsKLSAgICBpZiAobSA8PSAwKSByZXR1cm4oMCk7Ci0gICAgaWYgKG0gPj0g MTAwMCkgewkJCS8qIENhdGNoIGJpZyBhcmd1bWVudHMuICovCi0Jc2xlZXAobS8xMDAwKTsKLQlt ID0gbSAlIDEwMDA7Ci0JaWYgKG0gPCAxMCkgcmV0dXJuKDApOwotICAgIH0KLSNpZmRlZiBRTlgK LSAgICBmdGltZSgmZnRwKTsJCQkvKiB2b2lkIGZ0aW1lKCkgaW4gUU5YICovCi0jZWxzZQotICAg IGlmIChmdGltZSgmZnRwKSA8IDApIHJldHVybigtMSk7CS8qIEdldCBiYXNlIHRpbWUuICovCi0j ZW5kaWYgLyogUU5YICovCi0gICAgdDEgPSAoKGZ0cC50aW1lICYgMHhmZikgKiAxMDAwKSArIGZ0 cC5taWxsaXRtOwotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGZ0aW1lKCZmdHApOwkJCS8qIEdl dCBjdXJyZW50IHRpbWUgYW5kIGNvbXBhcmUuICovCi0gICAgICAgIHQzID0gKCgoZnRwLnRpbWUg JiAweGZmKSAqIDEwMDApICsgZnRwLm1pbGxpdG0pIC0gdDE7Ci0gICAgICAgIGlmICh0MyA+IG0p IHJldHVybigwKTsKLSAgICB9Ci0jZWxzZQotLyogVGhpcyBpbmNsdWRlcyB0cnVlIFBPU0lYLCB3 aGljaCBoYXMgbm8gd2F5IHRvIGRvIHRoaXMuICovCi0gICAgZGVidWcoRjEwMSwibXNsZWVwIGJ1 c3kgbG9vcCIsIiIsbSk7Ci0gICAgaWYgKG0gPj0gMTAwMCkgewkJCS8qIENhdGNoIGJpZyBhcmd1 bWVudHMuICovCi0Jc2xlZXAobS8xMDAwKTsKLQltID0gbSAlIDEwMDA7Ci0JaWYgKG0gPCAxMCkg cmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAobSA+IDApIHdoaWxlIChtID4gMCkgbS0tOwkvKiBK dXN0IGEgZHVtYiBidXN5IGxvb3AgKi8KLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTVNMRlRJ TUUgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIE5BUCAqLwotI2VuZGlmIC8qIFBS T1ZYMSAqLwotI2VuZGlmIC8qIGFlZ2lzICovCi0jZW5kaWYgLyogQ0tfUE9MTCAqLwotI2VuZGlm IC8qIFNFTEVDVCAqLwotI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCi0jZW5kaWYgLyogVVNMRUVQ ICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLX0KLQotLyogIFIgVCBJIE0gRSBSIC0tICBSZXNldCBl bGFwc2VkIHRpbWUgY291bnRlciAgKi8KLQotVk9JRAotcnRpbWVyKCkgewotICAgIHRjb3VudCA9 IHRpbWUoICh0aW1lX3QgKikgMCApOwotfQotCi0KLS8qICBHIFQgSSBNIEUgUiAtLSAgR2V0IGN1 cnJlbnQgdmFsdWUgb2YgZWxhcHNlZCB0aW1lIGNvdW50ZXIgaW4gc2Vjb25kcyAgKi8KLQotaW50 Ci1ndGltZXIoKSB7Ci0gICAgaW50IHg7Ci0gICAgeCA9IChpbnQpICh0aW1lKCAodGltZV90ICop IDAgKSAtIHRjb3VudCk7Ci0gICAgZGVidWcoRjEwMSwiZ3RpbWVyIiwiIix4KTsKLSAgICByZXR1 cm4oICh4IDwgMCkgPyAwIDogeCApOwotfQotCi0jaWZkZWYgR0ZUSU1FUgotLyoKLSAgRmxvYXRp bmctcG9pbnQgdGltZXJzLiAgUmVxdWlyZSBub3Qgb25seSBmbG9hdGluZyBwb2ludCBzdXBwb3J0 LCBidXQKLSAgYWxzbyBnZXR0aW1lb2ZkYXkoKS4KLSovCi1zdGF0aWMgc3RydWN0IHRpbWV2YWwg dHplcm87Ci0KLVZPSUQKLXJmdGltZXIoKSB7Ci0jaWZkZWYgR1RPRE9ORUFSRwkJCS8qIEFjY291 bnQgZm9yIE1vdCdzIGRlZmluaXRpb24gKi8KLSAgICAoVk9JRCkgZ2V0dGltZW9mZGF5KCZ0emVy byk7Ci0jZWxzZQotICAgIChWT0lEKSBnZXR0aW1lb2ZkYXkoJnR6ZXJvLCAoc3RydWN0IHRpbWV6 b25lICopMCk7Ci0jZW5kaWYgLyogR1RPRE9ORUFSRyAqLwotfQotCi1DS0ZMT0FUCi1nZnRpbWVy KCkgewotICAgIHN0cnVjdCB0aW1ldmFsIHRub3csIHRkZWx0YTsKLSAgICBDS0ZMT0FUIHM7Ci0j aWZkZWYgREVCVUcKLSAgICBjaGFyIGZwYnVmWzY0XTsKLSNlbmRpZiAvKiBERUJVRyAqLwotI2lm ZGVmIEdUT0RPTkVBUkcJCQkvKiBBY2NvdW50IGZvciBNb3QncyBkZWZpbml0aW9uICovCi0gICAg KFZPSUQpIGdldHRpbWVvZmRheSgmdG5vdyk7Ci0jZWxzZQotICAgIChWT0lEKSBnZXR0aW1lb2Zk YXkoJnRub3csIChzdHJ1Y3QgdGltZXpvbmUgKikwKTsKLSNlbmRpZiAvKiBHVE9ET05FQVJHICov Ci0KLSAgICB0ZGVsdGEudHZfc2VjID0gdG5vdy50dl9zZWMgLSB0emVyby50dl9zZWM7Ci0gICAg dGRlbHRhLnR2X3VzZWMgPSB0bm93LnR2X3VzZWMgLSB0emVyby50dl91c2VjOwotCi0gICAgaWYg KHRkZWx0YS50dl91c2VjIDwgMCkgewotCXRkZWx0YS50dl9zZWMtLTsKLQl0ZGVsdGEudHZfdXNl YyArPSAxMDAwMDAwOwotICAgIH0KLSAgICBzID0gKENLRkxPQVQpIHRkZWx0YS50dl9zZWMgKyAo KENLRkxPQVQpIHRkZWx0YS50dl91c2VjIC8gMTAwMDAwMC4wKTsKLSAgICBpZiAocyA8IEdGTUlO VElNRSkKLSAgICAgIHMgPSBHRk1JTlRJTUU7Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9n KSB7Ci0Jc3ByaW50ZihmcGJ1ZiwiJWYiLHMpOwotCWRlYnVnKEYxMTAsImdmdGltZXIiLGZwYnVm LDApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJldHVybihzKTsKLX0KLSNlbmRp ZiAvKiBHRlRJTUVSICovCi0KLS8qICBaIFQgSSBNIEUgIC0tICBSZXR1cm4gYXNjdGltZSgpLWZv cm1hdCBkYXRlL3RpbWUgc3RyaW5nICAqLwotLyoKLSAgTk9URTogYXMgYSBzaWRlIGVmZmVjdCBv ZiBjYWxsaW5nIHRoaXMgcm91dGluZSwgd2UgY2FuIGFsc28gc2V0IHRoZQotICBmb2xsb3dpbmcg dHdvIHZhcmlhYmxlcywgZ2l2aW5nIHRoZSBtaWNyby0gYW5kIG1pbGxpc2Vjb25kcyAoZnJhY3Rp b25zIG9mCi0gIHNlY29uZHMpIG9mIHRoZSBjbG9jayB0aW1lLiAgQ3VycmVudGx5IHRoaXMgaXMg ZG9uZSBvbmx5IGluIEJTRC1iYXNlZCBidWlsZHMKLSAgdGhhdCB1c2UgZ2V0dGltZW9mZGF5KCku ICBXaGVuIHRoZXNlIHZhcmlhYmxlcyBhcmUgbm90IGZpbGxlZCBpbiwgdGhleSBhcmUKLSAgbGVm dCB3aXRoIGEgdmFsdWUgb2YgLTFMLgotKi8KLXN0YXRpYyBjaGFyIGFzY3RtYnVmWzY0XTsKLQot Vk9JRAotenRpbWUocykgY2hhciAqKnM7IHsKLQotI2lmZGVmIEdGVElNRVIKLS8qCi0gIFRoZSBn ZXR0aW1lb2ZkYXkoKSBtZXRob2QsIHdoaWNoIGFsc28gc2V0cyB6dG1zZWMgYW5kIHp0dXNlYywg d29ya3MgZm9yCi0gIGFsbCBHRlRJTUVSIGJ1aWxkcy4gIE5PVEU6IHp0bXNlYyBhbmQgenR1c2Vj IGFyZSBkZWZpbmVkIGluIGNrY21haS5jLAotICBhbmQgZXh0ZXJuIGRlY2xhcmF0aW9ucyBmb3Ig dGhlbSBhcmUgaW4gY2tjZGViLmg7IHRodXMgdGhleSBhcmUKLSAgZGVjbGFyZWQgaW4gdGhpcyBm aWxlIGJ5IGluY2x1c2lvbiBvZiBja2NkZWIuaC4KLSovCi0gICAgY2hhciAqYXNjdGltZSgpOwot ICAgIHN0cnVjdCB0bSAqbG9jYWx0aW1lKCk7Ci0gICAgc3RydWN0IHRtICp0cDsKLSAgICB6dG1z ZWMgPSAtMUw7Ci0gICAgenR1c2VjID0gLTFMOwotCi0gICAgaWYgKCFzKQotICAgICAgZGVidWco RjEwMCwienRpbWUgcz09TlVMTCIsIiIsMCk7Ci0KLSNpZmRlZiBHVE9ET05FQVJHCi0gICAgLyog Tm8gMm5kIGFyZyBpbiBNb3Rvcm9sYSBTVjg4IGFuZCBzb21lIG90aGVycyAqLwotICAgIGlmIChn ZXR0aW1lb2ZkYXkoJnR2KSA+IC0xKQotI2Vsc2UKLSNpZm5kZWYgQ09IRVJFTlQKLSNpZmRlZiBQ VFgKLSAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0dixOVUxMKSA+IC0xKQotI2Vsc2UKLSNpZmRlZiBO T1RJTUVaT05FCi0gICAgaWYgKGdldHRpbWVvZmRheSgmdHYsIE5VTEwpID4gLTEpCS8qIHdvbmRl ciB3aGF0IHRoaXMgZG9lcy4uLiAqLwotI2Vsc2UKLSAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0diwg JnR6KSA+IC0xKQotI2VuZGlmIC8qIE5PVElNRVpPTkUgKi8KLSNlbmRpZiAvKiBQVFggKi8KLSNl bmRpZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlmIC8qIEdUT0RPTkVBUkcgKi8KLSAgICAgIHsJCQkJ CS8qIEZpbGwgaW4gdG0gc3RydWN0ICovCi0JenR1c2VjID0gdHYudHZfdXNlYzsJCS8qIE1pY3Jv c2Vjb25kcyAqLwotCXp0bXNlYyA9IHp0dXNlYyAvIDEwMDBMOwkvKiBNaWxsaXNlY29uZHMgKi8K LSNpZmRlZiBIUFVYOQotCXsKLQkgICAgdGltZV90IHp6OwotCSAgICB6eiA9IHR2LnR2X3NlYzsK LQkgICAgdHAgPSBsb2NhbHRpbWUoJnp6KTsJLyogQ29udmVydCB0byBsb2NhbCB0aW1lICovCi0J fQotI2Vsc2UKLSNpZmRlZiBIUFVYMTAwMAotCXsKLQkgICAgdGltZV90IHp6OwotCSAgICB6eiA9 IHR2LnR2X3NlYzsKLQkgICAgdHAgPSBsb2NhbHRpbWUoJnp6KTsKLQl9Ci0jZWxzZQotI2lmZGVm IExJTlVYCi0JeyAgIC8qIGF2b2lkIHVuYWxpZ25lZCBhY2Nlc3MgdHJhcCBvbiA2NC1iaXQgcGxh dGZvcm1zICovCi0JICAgIHRpbWVfdCB6ejsKLQkgICAgenogPSB0di50dl9zZWM7Ci0JICAgIHRw ID0gbG9jYWx0aW1lKCZ6eik7Ci0JfQotI2Vsc2UKLSNpZmRlZiBNQUNPU1gKLQl0cCA9IGxvY2Fs dGltZSgodGltZV90ICopJnR2LnR2X3NlYyk7IC8qIENvbnZlcnQgdG8gbG9jYWwgdGltZSAqLwot I2Vsc2UKLQl0cCA9IGxvY2FsdGltZSgmdHYudHZfc2VjKTsKLSNlbmRpZiAvKiBNQUNPU1ggKi8K LSNlbmRpZiAvKiBMSU5VWCAqLwotI2VuZGlmIC8qIEhQVVgxMDAwICovCi0jZW5kaWYgLyogSFBV WDkgKi8KLQlpZiAocykgewotCSAgICBjaGFyICogczI7Ci0JICAgIHMyID0gYXNjdGltZSh0cCk7 CQkvKiBDb252ZXJ0IHJlc3VsdCB0byBBU0NJSSBzdHJpbmcgKi8KLQkgICAgYXNjdG1idWZbMF0g PSAnXDAnOwotCSAgICBpZiAoczIpIGNrc3RybmNweShhc2N0bWJ1ZixzMiw2NCk7Ci0JICAgICpz ID0gYXNjdG1idWY7Ci0JICAgIGRlYnVnKEYxMTEsInp0aW1lIEdGVElNRVIgZ2V0dGltZW9mZGF5 Iiwqcyx6dHVzZWMpOwotCX0KLSAgICB9Ci0jZWxzZSAgLyogTm90IEdGVElNRVIgKi8KLQotI3Vu ZGVmIFpUSU1FVjcJCQkJLyogV2hpY2ggc3lzdGVtcyBuZWVkIHRvIHVzZSAqLwotI2lmZGVmIENP SEVSRU5UCQkJCS8qIG9sZCBVTklYIFZlcnNpb24gNyB3YXkuLi4gKi8KLSNkZWZpbmUgWlRJTUVW NwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0jaWZkZWYgVE9XRVIxCi0jZGVmaW5lIFpUSU1FVjcK LSNlbmRpZiAvKiBUT1dFUjEgKi8KLSNpZmRlZiBBTllCU0QKLSNpZm5kZWYgQlNENDIKLSNkZWZp bmUgWlRJTUVWNwotI2VuZGlmIC8qIEJTRDQyICovCi0jZW5kaWYgLyogQU5ZQlNEICovCi0jaWZk ZWYgVjcKLSNpZm5kZWYgTUlOSVgKLSNkZWZpbmUgWlRJTUVWNwotI2VuZGlmIC8qIE1JTklYICov Ci0jZW5kaWYgLyogVjcgKi8KLSNpZmRlZiBQT1NJWAotI2RlZmluZSBaVElNRVY3Ci0jZW5kaWYg LyogUE9TSVggKi8KLQotI2lmZGVmIEhQVVgxMDIwCi0vKgotICBQcm90b3R5cGVzIGFyZSBpbiA8 dGltZS5oPiwgaW5jbHVkZWQgYWJvdmUuCi0qLwotICAgIHRpbWVfdCBjbG9ja19zdG9yYWdlOwot ICAgIGNsb2NrX3N0b3JhZ2UgPSB0aW1lKCh2b2lkICopIDApOwotICAgIGlmIChzKSB7Ci0JKnMg PSBjdGltZSgmY2xvY2tfc3RvcmFnZSk7Ci0JZGVidWcoRjExMCwienRpbWU6IEhQVVggMTAuMjAi LCpzLDApOwotICAgIH0KLSNlbHNlCi0jaWZkZWYgQVRUU1YJCQkJLyogQVQmVCB3YXkgKi8KLS8q ICBleHRlcm4gbG9uZyB0aW1lKCk7ICovCQkvKiBUaGVvcmV0aWNhbGx5IHRoZXNlIHNob3VsZCAq LwotICAgIGNoYXIgKmN0aW1lKCk7CQkJLyogYWxyZWFkeSBiZWVuIGRjbCdkIGluIDx0aW1lLmg+ ICovCi0gICAgdGltZV90IGNsb2NrX3N0b3JhZ2U7Ci0gICAgY2xvY2tfc3RvcmFnZSA9IHRpbWUo Ci0jaWZkZWYgSVJJWDYwCi0JCQkgKHRpbWVfdCAqKQotI2Vsc2UKLSNpZmRlZiBCU0Q0NAotCQkJ ICh0aW1lX3QgKikKLSNlbHNlCi0JCQkgKGxvbmcgKikKLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2Vu ZGlmIC8qIElSSVg2MCAqLwotCQkJIDAgKTsKLSAgICBpZiAocykgewotCSpzID0gY3RpbWUoICZj bG9ja19zdG9yYWdlICk7Ci0JZGVidWcoRjExMCwienRpbWU6IEFUVFNWIiwqcywwKTsKLSAgICB9 Ci0jZWxzZQotI2lmZGVmIFBST1ZYMQkJCQkvKiBWZW5peCAxLjAgd2F5ICovCi0gICAgaW50IHV0 aW1lWzJdOwotICAgIHRpbWUodXRpbWUpOwotICAgIGlmIChzKSB7Ci0JKnMgPSBjdGltZSh1dGlt ZSk7Ci0JZGVidWcoRjExMCwienRpbWU6IFBST1ZYMSIsKnMsMCk7Ci0gICAgfQotI2Vsc2UKLSNp ZmRlZiBCU0Q0MgkJCQkvKiA0LjJCU0Qgd2F5ICovCi0gICAgY2hhciAqYXNjdGltZSgpOwotICAg IHN0cnVjdCB0bSAqbG9jYWx0aW1lKCk7Ci0gICAgc3RydWN0IHRtICp0cDsKLSAgICBnZXR0aW1l b2ZkYXkoJnR2LCAmdHopOwotICAgIHp0dXNlYyA9IHR2LnR2X3VzZWM7Ci0gICAgenRtc2VjID0g dHYudHZfdXNlYyAvIDEwMDBMOwotICAgIHRwID0gbG9jYWx0aW1lKCZ0di50dl9zZWMpOwotICAg IGlmIChzKSB7Ci0JKnMgPSBhc2N0aW1lKHRwKTsKLQlkZWJ1ZyhGMTExLCJ6dGltZTogQlNENDIi LCpzLHp0dXNlYyk7Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBNSU5JWAkJCQkvKiBNSU5JWCB3YXkg Ki8KLSNpZmRlZiBDT01NRU5UCi0gICAgZXh0ZXJuIGxvbmcgdGltZSgpOwkJCS8qIEFscmVhZHkg Z290IHRoZXNlIGZyb20gPHRpbWUuaD4gKi8KLSAgICBleHRlcm4gY2hhciAqY3RpbWUoKTsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0gICAgdGltZV90IHV0aW1lWzJdOwotICAgIHRpbWUodXRpbWUp OwotICAgIGlmIChzKSB7Ci0JKnMgPSBjdGltZSh1dGltZSk7Ci0JZGVidWcoRjExMCwienRpbWU6 IE1JTklYIiwqcywwKTsKLSAgICB9Ci0jZWxzZQotI2lmZGVmIFpUSU1FVjcJCQkJLyogVGhlIHJl Z3VsYXIgd2F5ICovCi0gICAgY2hhciAqYXNjdGltZSgpOwotICAgIHN0cnVjdCB0bSAqbG9jYWx0 aW1lKCk7Ci0gICAgc3RydWN0IHRtICp0cDsKLSAgICBsb25nIHhjbG9jazsJCQkvKiBvciB1bnNp Z25lZCBsb25nIGZvciBCZUJveD8gKi8KLSAgICB0aW1lKCZ4Y2xvY2spOwotICAgIHRwID0gbG9j YWx0aW1lKCZ4Y2xvY2spOwotICAgIGlmIChzKSB7Ci0JKnMgPSBhc2N0aW1lKHRwKTsKLQlkZWJ1 ZyhGMTEwLCJ6dGltZTogWlRJTUVWNyIsKnMsMCk7Ci0gICAgfQotI2Vsc2UJCQkJCS8qIENhdGNo LWFsbCBmb3Igb3RoZXJzLi4uICovCi0gICAgaWYgKHMpIHsKLQkqcyA9ICJEYXkgTW9uIDAwIDAw OjAwOjAwIDAwMDBcbiI7IC8qIER1bW15IGluIGFzY3RpbWUoKSBmb3JtYXQgKi8KLQlkZWJ1ZyhG MTEwLCJ6dGltZTogY2F0Y2gtYWxsIiwqcywwKTsKLSAgICB9Ci0jZW5kaWYgLyogWlRJTUVWNyAq LwotI2VuZGlmIC8qIE1JTklYICovCi0jZW5kaWYgLyogQlNENDIgKi8KLSNlbmRpZiAvKiBQUk9W WDEgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEhQVVgxMDIwICovCi0jZW5kaWYg LyogR0ZUSU1FUiAqLwotfQotCi0vKiAgQyBPIE4gRyBNICAtLSAgR2V0IGNvbnNvbGUgdGVybWlu YWwgbW9kZXMuICAqLwotCi0vKgotICBTYXZlcyBpbml0aWFsIGNvbnNvbGUgbW9kZSwgYW5kIGVz dGFibGlzaGVzIHZhcmlhYmxlcyBmb3Igc3dpdGNoaW5nCi0gIGJldHdlZW4gY3VycmVudCAocHJl c3VtYWJseSBub3JtYWwpIG1vZGUgYW5kIG90aGVyIG1vZGVzLgotICBTaG91bGQgYmUgY2FsbGVk IHdoZW4gcHJvZ3JhbSBzdGFydHMsIGJ1dCBvbmx5IGFmdGVyIGVzdGFibGlzaGluZwotICB3aGV0 aGVyIHByb2dyYW0gaXMgaW4gdGhlIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZC4KLSAgUmV0dXJu cyAxIGlmIGl0IGdvdCB0aGUgbW9kZXMgT0ssIDAgaWYgaXQgZGlkIG5vdGhpbmcsIC0xIG9uIGVy cm9yLgotKi8KLWludAotY29uZ20oKSB7Ci0gICAgaW50IGZkOwotICAgIGlmIChiYWNrZ3JkIHx8 ICFpc2F0dHkoMCkpIHsJLyogSWYgaW4gYmFja2dyb3VuZC4gKi8KLQljZ21mID0gLTE7CQkJLyog RG9uJ3QgYm90aGVyLCBtb2RlcyBhcmUgZ2FyYmFnZS4gKi8KLQlyZXR1cm4oLTEpOwotICAgIH0K LSAgICBpZiAoY2dtZiA+IDApIHJldHVybigwKTsJCS8qIEFscmVhZHkgZGlkIHRoaXMuICovCi0g ICAgZGVidWcoRjEwMCwiY29uZ20gZ2V0dGluZyBtb2RlcyIsIiIsMCk7IC8qIE5lZWQgdG8gZG8g aXQuICovCi0jaWZkZWYgYWVnaXMKLSAgICBpb3NfJGlucV90eXBlX3VpZChpb3NfJHN0ZGluLCBj b251aWQsIHN0KTsKLSAgICBpZiAoc3QuYWxsICE9IHN0YXR1c18kb2spIHsKLQlmcHJpbnRmKHN0 ZGVyciwgInByb2JsZW0gZ2V0dGluZyBzdGRpbiBvYmp0eXBlOiAiKTsKLQllcnJvcl8kcHJpbnQo c3QpOwotICAgIH0KLSAgICBjb25jcnAgPSAoY29udWlkID09IG1ieF8kdWlkKTsKLSAgICBjb25i dWZuID0gMDsKLSNlbmRpZiAvKiBhZWdpcyAqLwotCi0jaWZuZGVmIEJFQk9YCi0gICAgaWYgKChm ZCA9IG9wZW4oQ1RUTkFNLDIpKSA8IDApIHsJLyogT3BlbiBjb250cm9sbGluZyB0ZXJtaW5hbCAq LwotI2lmZGVmIENPTU1FTlQKLQlmcHJpbnRmKHN0ZGVyciwiRXJyb3Igb3BlbmluZyAlc1xuIiwg Q1RUTkFNKTsKLQlwZXJyb3IoImNvbmdtIik7Ci0JcmV0dXJuKC0xKTsKLSNlbHNlCi0JZmQgPSAw OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9Ci0jZWxzZQotICAgIGZkID0gMDsKLSNlbmRp ZiAvKiAhQkVCT1ggKi8KLSNpZmRlZiBCU0Q0NE9SUE9TSVgKLSAgICBpZiAodGNnZXRhdHRyKGZk LCZjY29sZCkgPCAwKSByZXR1cm4oLTEpOwotICAgIGlmICh0Y2dldGF0dHIoZmQsJmNjY2Jyaykg PCAwKSByZXR1cm4oLTEpOwotICAgIGlmICh0Y2dldGF0dHIoZmQsJmNjcmF3KSA8IDApIHJldHVy bigtMSk7Ci0jZWxzZQotI2lmZGVmIEFUVFNWCi0gICAgaWYgKGlvY3RsKGZkLFRDR0VUQSwmY2Nv bGQpICA8IDApIHJldHVybigtMSk7Ci0gICAgaWYgKGlvY3RsKGZkLFRDR0VUQSwmY2NjYnJrKSA8 IDApIHJldHVybigtMSk7Ci0gICAgaWYgKGlvY3RsKGZkLFRDR0VUQSwmY2NyYXcpICA8IDApIHJl dHVybigtMSk7Ci0jaWZkZWYgVlhWRQotICAgIGNjY2Jyay5jX2xpbmUgPSAwOwkJCS8qIFNUVFkg bGluZSAwIGZvciBDREMgVlgvVkUgKi8KLSAgICBpZiAoaW9jdGwoZmQsVENTRVRBLCZjY2Nicmsp IDwgMCkgcmV0dXJuKC0xKTsKLSAgICBjY3Jhdy5jX2xpbmUgPSAwOwkJCS8qIFNUVFkgbGluZSAw IGZvciBDREMgVlgvVkUgKi8KLSAgICBpZiAoaW9jdGwoZmQsVENTRVRBLCZjY3JhdykgPCAwKSBy ZXR1cm4oLTEpOwotI2VuZGlmIC8qIFZYVkUgKi8KLSNlbHNlCi0jaWZkZWYgQkVMTFYxMAotICAg IGlmIChpb2N0bChmZCxUSU9DR0VUUCwmY2NvbGQpIDwgMCkgcmV0dXJuKC0xKTsKLSAgICBpZiAo aW9jdGwoZmQsVElPQ0dFVFAsJmNjY2JyaykgPCAwKSByZXR1cm4oLTEpOwotICAgIGlmIChpb2N0 bChmZCxUSU9DR0VUUCwmY2NyYXcpIDwgMCkgcmV0dXJuKC0xKTsKLSAgICBkZWJ1ZyhGMTAxLCJj Y2Nicmsuc2dfZmxhZ3Mgb3JpZyIsIiIsIGNjY2Jyay5zZ19mbGFncyk7Ci0jZWxzZQotICAgIGlm IChndHR5KGZkLCZjY29sZCkgPCAwKSByZXR1cm4oLTEpOwotICAgIGlmIChndHR5KGZkLCZjY2Ni cmspIDwgMCkgcmV0dXJuKC0xKTsKLSAgICBpZiAoZ3R0eShmZCwmY2NyYXcpIDwgMCkgcmV0dXJu KC0xKTsKLSNlbmRpZiAvKiBCRUxMVjEwICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAv KiBCU0Q0NE9SUE9TSVggKi8KLSNpZmRlZiBzb255X25ld3MJCQkvKiBTb255IE5FV1MgKi8KLSAg ICBpZiAoaW9jdGwoZmQsVElPQ0tHRVQsJmttX2NvbikgPCAwKSB7IC8qIEdldCBjb25zb2xlIEth bmppIG1vZGUgKi8KLQlwZXJyb3IoImNvbmdtIGVycm9yIGdldHRpbmcgS2FuamkgbW9kZSIpOwot CWRlYnVnKEYxMDEsImNvbmdtIGVycm9yIGdldHRpbmcgS2FuamkgbW9kZSIsIiIsMCk7Ci0Ja21f Y29uID0gLTE7CQkJLyogTWFrZSBzdXJlIHRoaXMgc3RheXMgdW5kZWZpbmVkLiAqLwotCXJldHVy bigtMSk7Ci0gICAgfQotI2VuZGlmIC8qIHNvbnlfbmV3cyAqLwotICAgIGlmIChmZCA+IDApCi0g ICAgICBjbG9zZShmZCk7Ci0gICAgY2dtZiA9IDE7CQkJCS8qIEZsYWcgdGhhdCB3ZSBnb3QgdGhl bS4gKi8KLSAgICByZXR1cm4oMSk7Ci19Ci0KLQotc3RhdGljIFZPSUQKLWNvbmdldGJ1Zih4KSBp bnQgeDsgewotICAgIGludCBuOwotICAgIG4gPSBDT05CVUZTSVogLSAoY29uYnVmcCAtIGNvbmJ1 Zik7CS8qIEhvdyBtdWNoIHJvb20gbGVmdCBpbiBidWZmZXI/ICovCi0gICAgaWYgKHggPiBuKSB7 Ci0JZGVidWcoRjEwMSwiY29uZ2V0YnVmIGNoYXIgbG9zcyIsIiIseC1uKTsKLQl4ID0gbjsKLSAg ICB9Ci0gICAgeCA9IHJlYWQoMCxjb25idWZwLHgpOwotICAgIGNvbmJ1Zm4gKz0geDsKLSAgICBk ZWJ1ZyhGMTExLCJjb25nZXRidWYgcmVhZGFoZWFkIixjb25idWYseCk7Ci19Ci0KLQotLyogIEMg TyBOIEMgQiAtLSAgUHV0IGNvbnNvbGUgaW4gY2JyZWFrIG1vZGUuICAqLwotCi0vKiAgUmV0dXJu cyAwIGlmIG9rLCAtMSBpZiBub3QgICovCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi1jb25jYihj aGFyIGVzYykKLSNlbHNlCi1jb25jYihlc2MpIGNoYXIgZXNjOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi0vKiBjb25jYiAqLyB7Ci0gICAgaW50IHgsIHkgPSAwOwotICAgIGRlYnVnKEYxMDEsImNv bmNiIGNvbnN0YXRlIiwiIixjb25zdGF0ZSk7Ci0gICAgZGVidWcoRjEwMSwiY29uY2IgY2dtZiIs IiIsY2dtZik7Ci0gICAgZGVidWcoRjEwMSwiY29uY2IgYmFja2dyZCIsIiIsYmFja2dyZCk7Ci0K LSAgICBpZiAoY29uc3RhdGUgPT0gQ09OX0NCKQotICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYg KGNnbWYgPCAxKQkJCS8qIERpZCB3ZSBnZXQgY29uc29sZSBtb2RlcyB5ZXQ/ICovCi0gICAgICBp ZiAoIWJhY2tncmQpCQkJLyogTm8sIGluIGJhY2tncm91bmQ/ICovCi0JY29uZ20oKTsJCQkvKiBO bywgdHJ5IHRvIGdldCB0aGVtIG5vdy4gKi8KLSAgICBpZiAoY2dtZiA8IDEpCQkJLyogU3RpbGwg ZG9uJ3QgaGF2ZSB0aGVtPyAqLwotICAgICAgcmV0dXJuKDApOwkJCS8qIEdpdmUgdXAuICovCi0g ICAgZGVidWcoRjEwMSwiY29uY2IgdHR5ZmQiLCIiLHR0eWZkKTsKLSAgICBkZWJ1ZyhGMTAxLCJj b25jYiB0dGZkZmxnIiwiIix0dGZkZmxnKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgLyogVGhpcyBi cmVha3MgcmV0dXJuaW5nIHRvIHByb21wdCBhZnRlciBwcm90b2NvbCB3aXRoICItbCAwIiAqLwot ICAgIC8qIENvbW1lbnRlZCBvdXQgSnVseSAxOTk4ICovCi0gICAgaWYgKHR0ZmRmbGcgJiYgdHR5 ZmQgPj0gMCAmJiB0dHlmZCA8IDMpCi0gICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotICAgIHggPSBpc2F0dHkoMCk7Ci0gICAgZGVidWcoRjEwMSwiY29uY2IgaXNhdHR5Iiwi Iix4KTsKLSAgICBpZiAoIXgpIHJldHVybigwKTsJCQkvKiBPbmx5IHdoZW4gcnVubmluZyBvbiBy ZWFsIHR0eXMgKi8KLSAgICBkZWJ1ZyhGMTAxLCJjb25jYiB4c3VzcGVuZCIsIiIseHN1c3BlbmQp OwotICAgIGlmIChiYWNrZ3JkKQkJCS8qIERvIG5vdGhpbmcgaWYgaW4gYmFja2dyb3VuZC4gKi8K LSAgICAgIHJldHVybigwKTsKLSAgICBlc2NjaHIgPSBlc2M7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBNYWtlIHRoaXMgYXZhaWxhYmxlIHRvIG90aGVyIGZucyAqLwotICAgIGNreGVjaCA9IDE7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb2dyYW0gY2FuIGVjaG8gY2hhcmFjdGVycyAq LwotI2lmZGVmIGFlZ2lzCi0gICAgY29uYnVmbiA9IDA7Ci0gICAgaWYgKGNvbmNycCkgcmV0dXJu KHdyaXRlKDEsICJcMDM1XDAwMiIsIDIpKTsKLSAgICBpZiAoY29udWlkID09IGlucHV0X3BhZF8k dWlkKSB7cGFkXyRyYXcoaW9zXyRzdGRpbiwgc3QpOyByZXR1cm4oMCk7fQotI2VuZGlmIC8qIGFl Z2lzICovCi0KLSNpZmRlZiBDT0hFUkVOVAotI2RlZmluZSBTVk9SUE9TSVgKLSNlbmRpZiAvKiBD T0hFUkVOVCAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICB4ID0gcDljb25jYigpOwotI2Vsc2UKLSNp Zm5kZWYgU1ZPUlBPU0lYCQkJLyogQlNELCBWNywgZXRjICovCi0gICAgZGVidWcoRjEwMSwiY2Nj YnJrLnNnX2ZsYWdzIGNvbmNiIDEiLCIiLCBjY2Nicmsuc2dfZmxhZ3MpOwotICAgIGRlYnVnKEYx MDEsImNvbmNiIHN0dHkgQ0JSRUFLIiwiIiwwKTsKLSAgICBjY2Nicmsuc2dfZmxhZ3MgfD0gKENC UkVBS3xDUk1PRCk7CS8qIFNldCB0byBjaGFyYWN0ZXIgd2FrZXVwLCAqLwotICAgIGNjY2Jyay5z Z19mbGFncyAmPSB+RUNITzsgICAgICAgICAgIC8qIG5vIGVjaG8uICovCi0gICAgZGVidWcoRjEw MSwiY2NjYnJrLnNnX2ZsYWdzIGNvbmNiIDIiLCIiLCBjY2Nicmsuc2dfZmxhZ3MpOwotICAgIGVy cm5vID0gMDsKLS8qCi0gIEJTRCBzdHR5KCkgY2xlYXJzIHRoZSBjb25zb2xlIGJ1ZmZlci4gIFNv IGlmIGFueXRoaW5nIGlzIHdhaXRpbmcgaW4gaXQsCi0gIHdlIGhhdmUgdG8gcmVhZCBpdCBub3cg dG8gYXZvaWQgbG9zaW5nIGl0LgotKi8KLSAgICB4ID0gY29uY2hrKCk7Ci0gICAgaWYgKHggPiAw KQotICAgICAgY29uZ2V0YnVmKHgpOwotCi0jaWZkZWYgQkVMTFYxMAotICAgIHggPSBpb2N0bCgw LFRJT0NTRVRQLCZjY2NicmspOwotI2Vsc2UKLSAgICB4ID0gc3R0eSgwLCZjY2NicmspOwotICAg IGRlYnVnKEYxMDEsImNjY2Jyay5zZ19mbGFncyBjb25jYiB4IiwiIiwgeCk7Ci0jZW5kaWYgLyog QkVMTFYxMCAqLwotI2Vsc2UJCQkJCS8qIFN5cyBWIGFuZCBQT1NJWCAqLwotI2lmbmRlZiBPWE9T Ci0gICAgZGVidWcoRjEwMSwiY29uY2IgY2NjYnJrLmNfZmxhZyIsIiIsY2NjYnJrLmNfbGZsYWcp OwotI2lmZGVmIFFOWAotICAgIC8qIERvbid0IG1lc3Mgd2l0aCBJRVhURU4gKi8KLSAgICBjY2Ni cmsuY19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPKTsKLSNlbHNlCi0jaWZkZWYgQ09IRVJFTlQKLSAg ICBjY2NicmsuY19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPKTsKLSNlbHNlCi0gICAgY2NjYnJrLmNf bGZsYWcgJj0gfihJQ0FOT058RUNIT3xJRVhURU4pOwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0j ZW5kaWYgLyogUU5YICovCi0gICAgY2NjYnJrLmNfbGZsYWcgfD0gSVNJRzsJCS8qIEFsbG93IHNp Z25hbHMgaW4gY29tbWFuZCBtb2RlLiAqLwotICAgIGNjY2Jyay5jX2lmbGFnIHw9IElHTkJSSzsJ CS8qIEJ1dCBpZ25vcmUgQlJFQUsgc2lnbmFsICovCi0gICAgY2NjYnJrLmNfaWZsYWcgJj0gfkJS S0lOVDsKLQotI2Vsc2UgLyogT1hPUyAqLwotICAgIGRlYnVnKEYxMDAsImNvbmNiIE9YT1MgaXMg ZGVmaW5lZCIsIiIsMCk7Ci0gICAgY2NjYnJrLmNfbGZsYWcgJj0gfihJQ0FOT058RUNITyk7Ci0g ICAgY2NjYnJrLmNfY2NbVkRJU0NBUkRdID0gY2NjYnJrLmNfY2NbVkxORVhUXSA9IENESVNBQkxF OwotI2VuZGlmIC8qIE9YT1MgKi8KLSNpZmRlZiBDT01NRU5UCi0vKgotICBCZWxpZXZlIGl0IG9y IG5vdCwgaW4gU0NPIFVOSVgsIFZTVVNQIGlzIGdyZWF0ZXIgdGhhbiBOQ0MsIGFuZCBzbyB0aGlz Ci0gIGFycmF5IHJlZmVyZW5jZSBpcyBvdXQgb2YgYm91bmRzLiAgSXQncyBvbmx5IGEgZGVidWco KSBjYWxsIHNvIHdobyBuZWVkcyBpdC4KLSovCi0jaWZkZWYgVlNVU1AKLSAgICBkZWJ1ZyhGMTAx LCJjb25jYiBjX2NjW1ZTVVNQXSIsIiIsY2NjYnJrLmNfY2NbVlNVU1BdKTsKLSNlbmRpZiAvKiBW U1VTUCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZm5kZWYgVklOVFIKLSAgICBkZWJ1ZyhG MTAxLCJjb25jYiBjX2NjWzBdIiwiIixjY2NicmsuY19jY1swXSk7Ci0gICAgY2NjYnJrLmNfY2Nb MF0gPSAwMDM7ICAgICAgICAgICAgICAgLyogSW50ZXJydXB0IGNoYXIgaXMgQ29udHJvbC1DICov Ci0jZWxzZQotICAgIGRlYnVnKEYxMDEsImNvbmNiIGNfY2NbVklOVFJdIiwiIixjY2NicmsuY19j Y1swXSk7Ci0gICAgY2NjYnJrLmNfY2NbVklOVFJdID0gMDAzOwotI2VuZGlmIC8qIFZJTlRSICov Ci0jaWZuZGVmIFZRVUlUCi0gICAgY2NjYnJrLmNfY2NbMV0gPSBlc2NjaHI7ICAgICAgICAgICAg LyogZXNjYXBlIGR1cmluZyBwYWNrZXQgbW9kZXMgKi8KLSNlbHNlCi0gICAgY2NjYnJrLmNfY2Nb VlFVSVRdID0gZXNjY2hyOwotI2VuZGlmIC8qIFZRVUlUICovCi0jaWZuZGVmIFZFT0YKLSAgICBj Y2NicmsuY19jY1s0XSA9IDE7Ci0jZWxzZQotI2lmbmRlZiBPWE9TCi0jaWZkZWYgVk1JTgotICAg IGNjY2Jyay5jX2NjW1ZNSU5dID0gMTsKLSNlbmRpZiAvKiBWTUlOICovCi0jZWxzZSAvKiBPWE9T ICovCi0gICAgY2NjYnJrLmNfbWluID0gMTsKLSNlbmRpZiAvKiBPWE9TICovCi0jZW5kaWYgLyog VkVPRiAqLwotI2lmZGVmIFpJTE9HCi0gICAgY2NjYnJrLmNfY2NbNV0gPSAwOwotI2Vsc2UKLSNp Zm5kZWYgVkVPTAotICAgIGNjY2Jyay5jX2NjWzVdID0gMTsKLSNlbHNlCi0jaWZuZGVmIE9YT1MK LSNpZmRlZiBWVElNRQotICAgIGNjY2Jyay5jX2NjW1ZUSU1FXSA9IDE7Ci0jZW5kaWYgLyogVlRJ TUUgKi8KLSNlbHNlIC8qIE9YT1MgKi8KLSAgICBjY2NicmsuY190aW1lID0gMTsKLSNlbmRpZiAv KiBPWE9TICovCi0jZW5kaWYgLyogVkVPTCAqLwotI2VuZGlmIC8qIFpJTE9HICovCi0gICAgZXJy bm8gPSAwOwotI2lmZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIFNldCBuZXcgbW9kZXMgKi8KLSAgICB4 ID0gdGNzZXRhdHRyKDAsVENTQURSQUlOLCZjY2NicmspOwotI2Vsc2UgLyogQVRUU1YgKi8gICAg ICAJCQkvKiBvciB0aGUgUE9TSVggd2F5ICovCi0gICAgeCA9IGlvY3RsKDAsVENTRVRBVywmY2Nj YnJrKTsJLyogdGhlIFN5cyBWIHdheSAqLwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotI2Vu ZGlmIC8qIFNWT1JQT1NJWCAqLwotCi0jaWZkZWYgQ09IRVJFTlQKLSN1bmRlZiBTVk9SUE9TSVgK LSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0gICAgZGVidWcoRjEwMSwiY29uY2IgeCIsIiIseCk7 Ci0gICAgZGVidWcoRjEwMSwiY29uY2IgZXJybm8iLCIiLGVycm5vKTsKLQotI2lmZGVmICBWNwot I2lmbmRlZiBNSU5JWAotICAgIGlmIChrbWVtW0NPTl0gPCAwKSB7Ci0gICAgICAgIHFhZGRyW0NP Tl0gPSBpbml0cmF3cSgwKTsKLSAgICAgICAgaWYoKGttZW1bQ09OXSA9IG9wZW4oIi9kZXYva21l bSIsIDApKSA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgcmVhZCAv ZGV2L2ttZW0gaW4gY29uY2IuXG4iKTsKLSAgICAgICAgICAgIHBlcnJvcigiL2Rldi9rbWVtIik7 Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE1JTklY ICovCi0jZW5kaWYgLyogVjcgKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotCi0gICAgaWYgKHggPiAt MSkKLSAgICAgIGNvbnN0YXRlID0gQ09OX0NCOwotCi0gICAgZGVidWcoRjEwMSwiY29uY2IgcmV0 dXJucyIsIiIseCk7Ci0gICAgcmV0dXJuKHgpOwotfQotCi0vKiAgQyBPIE4gQiBJIE4gIC0tICBQ dXQgY29uc29sZSBpbiBiaW5hcnkgbW9kZSAgKi8KLQotLyogIFJldHVybnMgMCBpZiBvaywgLTEg aWYgbm90ICAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY29uYmluKGNoYXIgZXNjKQotI2Vs c2UKLWNvbmJpbihlc2MpIGNoYXIgZXNjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBjb25i aW4gKi8gIHsKLQotICAgIGludCB4OwotCi0gICAgZGVidWcoRjEwMSwiY29uYmluIGNvbnN0YXRl IiwiIixjb25zdGF0ZSk7Ci0KLSAgICBpZiAoY29uc3RhdGUgPT0gQ09OX0JJTikKLSAgICAgIHJl dHVybigwKTsKLQotICAgIGlmICghaXNhdHR5KDApKSByZXR1cm4oMCk7ICAgICAgICAgIC8qIG9u bHkgZm9yIHJlYWwgdHR5cyAqLwotICAgIGNvbmdtKCk7CQkJCS8qIEdldCBtb2RlcyBpZiBuZWNl c3NhcnkuICovCi0gICAgZGVidWcoRjEwMCwiY29uYmluIiwiIiwwKTsKLSAgICBlc2NjaHIgPSBl c2M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHRoaXMgYXZhaWxhYmxlIHRvIG90aGVy IGZucyAqLwotICAgIGNreGVjaCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb2dy YW0gY2FuIGVjaG8gY2hhcmFjdGVycyAqLwotI2lmZGVmIGFlZ2lzCi0gICAgY29uYnVmbiA9IDA7 Ci0gICAgaWYgKGNvbmNycCkgcmV0dXJuKHdyaXRlKDEsICJcMDM1XDAwMiIsIDIpKTsKLSAgICBp ZiAoY29udWlkID09IGlucHV0X3BhZF8kdWlkKSB7Ci0JcGFkXyRyYXcoaW9zXyRzdGRpbiwgc3Qp OwotCXJldHVybigwKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBhZWdpcyAqLwotCi0jaWZkZWYgQ09I RVJFTlQKLSNkZWZpbmUgU1ZPUlBPU0lYCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2lmZGVm IFBsYW45Ci0gICAgcmV0dXJuIHA5Y29uYmluKCk7Ci0jZWxzZQotI2lmZGVmIFNWT1JQT1NJWAot I2lmbmRlZiBPWE9TCi0jaWZkZWYgUU5YCi0gICAgY2NyYXcuY19sZmxhZyAmPSB+KElTSUd8SUNB Tk9OfEVDSE8pOwotI2Vsc2UKLSNpZmRlZiBDT0hFUkVOVAotICAgIGNjcmF3LmNfbGZsYWcgJj0g fihJU0lHfElDQU5PTnxFQ0hPKTsKLSNlbHNlCi0gICAgY2NyYXcuY19sZmxhZyAmPSB+KElTSUd8 SUNBTk9OfEVDSE98SUVYVEVOKTsKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlmIC8qIFFO WCAqLwotI2Vsc2UgLyogT1hPUyAqLwotICAgIGNjcmF3LmNfbGZsYWcgJj0gfihJU0lHfElDQU5P TnxFQ0hPKTsKLSAgICBjY3Jhdy5jX2NjW1ZESVNDQVJEXSA9IGNjcmF3LmNfY2NbVkxORVhUXSA9 IENESVNBQkxFOwotI2VuZGlmIC8qIE9YT1MgKi8KLSAgICBjY3Jhdy5jX2lmbGFnIHw9IElHTlBB UjsKLS8qCi0gIE5vdGUgdGhhdCBmb3IgdGVybWluYWwgc2Vzc2lvbnMgd2UgZGlzYWJsZSBYb24v WG9mZiBmbG93IGNvbnRyb2wgdG8gYWxsb3cKLSAgdGhlIHBhc3NhZ2UgXlEgYW5kIF5TIGFzIGRh dGEgY2hhcmFjdGVycyBmb3IgRU1BQ1MsIGFuZCB0byBhbGxvdyBYTU9ERU0KLSAgdHJhbnNmZXJz IHRvIHdvcmsgd2hlbiBDLUtlcm1pdCBpcyBpbiB0aGUgbWlkZGxlLCBldGMuICBIYXJkd2FyZSBm bG93Ci0gIGNvbnRyb2wsIGlmIGluIHVzZSwgaXMgbm90IGFmZmVjdGVkLgotKi8KLSNpZmRlZiBB VFRTVgotI2lmZGVmIEJTRDQ0Ci0gICAgY2NyYXcuY19pZmxhZyAmPSB+KElHTkJSS3xJTkxDUnxJ R05DUnxJQ1JOTHxJWE9OfElYQU5ZfElYT0ZGCi0gICAgICAgICAgICAgICAgICAgICAgICB8SU5Q Q0t8SVNUUklQKTsKLSNlbHNlCi0gICAgY2NyYXcuY19pZmxhZyAmPSB+KElHTkJSS3xJTkxDUnxJ R05DUnxJQ1JOTHxJVUNMQ3xJWE9OfElYQU5ZfElYT0ZGCi0gICAgICAgICAgICAgICAgICAgICAg ICB8SU5QQ0t8SVNUUklQKTsKLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2Vsc2UgLyogUE9TSVggKi8K LSAgICBjY3Jhdy5jX2lmbGFnICY9IH4oSUdOQlJLfElOTENSfElHTkNSfElDUk5MfElYT058SVhP RkZ8SU5QQ0t8SVNUUklQKTsKLSNlbmRpZiAvKiBBVFRTViAqLwotICAgIGNjcmF3LmNfb2ZsYWcg Jj0gfk9QT1NUOwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFdIQVQgVEhFIEhFQ0sgV0FTIFRISVMg Rk9SPwotICBUaGUgQjk2MDAgc2V0dGluZyAob2J2aW91c2x5KSBwcmV2ZW50cyBDT05ORUNUIGZy b20gd29ya2luZyBhdCBhbnkKLSAgc3BlZWQgb3RoZXIgdGhhbiA5NjAwIHdoZW4geW91IGFyZSBs b2dnZWQgaW4gdG8gdGhlIDczMDAgb24gYSBzZXJpYWwKLSAgbGluZS4gIE1heWJlIHNvbWUgb2Yg dGhlIG90aGVyIGZsYWdzIGFyZSBuZWNlc3NhcnkgLS0gaWYgc28sIHB1dCBiYWNrCi0gIHRoZSBv bmVzIHRoYXQgYXJlIG5lZWRlZC4gIFRoaXMgY29kZSBpcyBzdXBwb3NlZCB0byB3b3JrIHRoZSBz YW1lLCBubwotICBtYXR0ZXIgd2hldGhlciB5b3UgYXJlIGxvZ2dlZCBpbiB0byB0aGUgNzMwMCBv biB0aGUgcmVhbCBjb25zb2xlIGRldmljZSwKLSAgb3IgdGhyb3VnaCBhIHNlcmlhbCBwb3J0Lgot Ki8KLSNpZmRlZiBBVFQ3MzAwCi0gICAgY2NyYXcuY19jZmxhZyA9IENMT0NBTCB8IEI5NjAwIHwg Q1M4IHwgQ1JFQUQgfCBIVVBDTDsKLSNlbmRpZiAvKiBBVFQ3MzAwICovCi0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0vKioqIEtlcm1pdCB1c2VkIHRvIHB1dCB0aGUgY29uc29sZSBpbiA4LWJpdCBy YXcgbW9kZSwgYnV0IHNvbWUgdXNlcnMgaGF2ZQotICoqKiBwb2ludGVkIG91dCB0aGF0IHRoaXMg c2hvdWxkIG5vdCBiZSBkb25lLCBzaW5jZSBzb21lIHNpdGVzIGFjdHVhbGx5Ci0gKioqIHVzZSB0 ZXJtaW5hbHMgd2l0aCBwYXJpdHkgc2V0dGluZ3Mgb24gdGhlaXIgVW5peCBzeXN0ZW1zLCBhbmQg aWYgd2UKLSAqKiogb3ZlcnJpZGUgdGhlIGN1cnJlbnQgc2V0dGluZ3MgYW5kIHN0b3AgZG9pbmcg cGFyaXR5LCB0aGVuIHRoZWlyIHRlcm1pbmFscwotICoqKiB3aWxsIGRpc3BsYXkgYmxvdGNoZXMg Zm9yIGNoYXJhY3RlcnMgd2hvc2UgcGFyaXR5IGlzIHdyb25nLiAgVGhlcmVmb3JlLAotICoqKiB0 aGUgZm9sbG93aW5nIHR3byBsaW5lcyBhcmUgY29tbWVudGVkIG91dCAoTGFycnkgQWZyaW4sIENs ZW1zb24gVSk6Ci0gKioqCi0gKioqICAgY2NyYXcuY19jZmxhZyAmPSB+KFBBUkVOQnxDU0laRSk7 Ci0gKioqICAgY2NyYXcuY19jZmxhZyB8PSAoQ1M4fENSRUFEKTsKLSAqKioKLSAqKiogU3lzIElJ SS9WIHNpdGVzIHRoYXQgaGF2ZSB0cm91YmxlIHdpdGggdGhpcyBjYW4gcmVzdG9yZSB0aGVzZSBs aW5lcy4KLSAqKiovCi0jaWZuZGVmIFZJTlRSCi0gICAgY2NyYXcuY19jY1swXSA9IDAwMzsJCS8q IEludGVycnVwdCBjaGFyIGlzIEN0cmwtQyAqLwotI2Vsc2UKLSAgICBjY3Jhdy5jX2NjW1ZJTlRS XSA9IDAwMzsKLSNlbmRpZiAvKiBWSU5UUiAqLwotI2lmbmRlZiBWUVVJVAotICAgIGNjcmF3LmNf Y2NbMV0gPSBlc2NjaHI7CQkvKiBFc2NhcGUgZHVyaW5nIHBhY2tldCBtb2RlICovCi0jZWxzZQot ICAgIGNjcmF3LmNfY2NbVlFVSVRdID0gZXNjY2hyOwotI2VuZGlmIC8qIFZRVUlUICovCi0jaWZu ZGVmIFZFT0YKLSAgICBjY3Jhdy5jX2NjWzRdID0gMTsKLSNlbHNlCi0jaWZuZGVmIE9YT1MKLSNp ZmRlZiBWTUlOCi0gICAgY2NyYXcuY19jY1tWTUlOXSA9IDE7Ci0jZW5kaWYgLyogVk1JTiAqLwot I2Vsc2UgLyogT1hPUyAqLwotICAgIGNjcmF3LmNfbWluID0gMTsKLSNlbmRpZiAvKiBPWE9TICov Ci0jZW5kaWYgLyogVkVPRiAqLwotCi0jaWZkZWYgWklMT0cKLSAgICBjY3Jhdy5jX2NjWzVdID0g MDsKLSNlbHNlCi0jaWZuZGVmIFZFT0wKLSAgICBjY3Jhdy5jX2NjWzVdID0gMTsKLSNlbHNlCi0j aWZuZGVmIE9YT1MKLSNpZmRlZiBWVElNRQotICAgIGNjcmF3LmNfY2NbVlRJTUVdID0gMTsKLSNl bmRpZiAvKiBWVElNRSAqLwotI2Vsc2UgLyogT1hPUyAqLwotICAgIGNjcmF3LmNfdGltZSA9IDE7 Ci0jZW5kaWYgLyogT1hPUyAqLwotI2VuZGlmIC8qIFZFT0wgKi8KLSNlbmRpZiAvKiBaSUxPRyAq LwotCi0jaWZkZWYgQlNENDRPUlBPU0lYCi0gICAgeCA9IHRjc2V0YXR0cigwLFRDU0FEUkFJTiwm Y2NyYXcpOwkvKiBTZXQgbmV3IG1vZGVzLiAqLwotI2Vsc2UKLSAgICB4ID0gaW9jdGwoMCxUQ1NF VEFXLCZjY3Jhdyk7Ci0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0jZWxzZSAvKiBCZXJrZWxl eSwgZXRjLiAqLwotICAgIHggPSBjb25jaGsoKTsJCQkvKiBCZWNhdXNlIHN0dHkoKSBpcyBkZXN0 cnVjdGl2ZSAqLwotICAgIGlmICh4ID4gMCkKLSAgICAgIGNvbmdldGJ1Zih4KTsKLSAgICBjY3Jh dy5zZ19mbGFncyB8PSAoUkFXfFRBTkRFTSk7ICAgICAvKiBTZXQgcmF3bW9kZSwgWE9OL1hPRkYg KGhhKSAqLwotICAgIGNjcmF3LnNnX2ZsYWdzICY9IH4oRUNIT3xDUk1PRCk7ICAgIC8qIFNldCBj aGFyIHdha2V1cCwgbm8gZWNobyAqLwotI2lmZGVmIEJFTExWMTAKLSAgICB4ID0gaW9jdGwoMCxU SU9DU0VUUCwmY2NyYXcpOwotI2Vsc2UKLSAgICB4ID0gc3R0eSgwLCZjY3Jhdyk7Ci0jZW5kaWYg LyogQkVMTFYxMCAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2VuZGlmIC8qIFBsYW45ICov Ci0KLSAgICBpZiAoeCA+IC0xKQotICAgICAgY29uc3RhdGUgPSBDT05fQklOOwotCi0gICAgZGVi dWcoRjEwMSwiY29uYmluIHJldHVybnMiLCIiLHgpOwotICAgIHJldHVybih4KTsKLQotI2lmZGVm IENPSEVSRU5UCi0jdW5kZWYgU1ZPUlBPU0lYCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotfQot Ci0KLS8qICBDIE8gTiBSIEUgUyAgLS0gIFJlc3RvcmUgdGhlIGNvbnNvbGUgdGVybWluYWwgICov Ci0KLWludAotY29ucmVzKCkgewotICAgIGludCB4OwotICAgIGRlYnVnKEYxMDEsImNvbnJlcyBj Z21mIiwiIixjZ21mKTsKLSAgICBkZWJ1ZyhGMTAxLCJjb25yZXMgY29uc3RhdGUiLCIiLGNvbnN0 YXRlKTsKLQotICAgIGlmIChjZ21mIDwgMSkJCQkvKiBEbyBub3RoaW5nIGlmIG1vZGVzIHVuY2hh bmdlZCAqLwotICAgICAgcmV0dXJuKDApOwotICAgIGlmIChjb25zdGF0ZSA9PSBDT05fUkVTKQot ICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKCFpc2F0dHkoMCkpIHJldHVybigwKTsgICAgICAg ICAgLyogb25seSBmb3IgcmVhbCB0dHlzICovCi0gICAgZGVidWcoRjEwMCwiY29ucmVzIGlzYXR0 eSBvayIsIiIsMCk7Ci0gICAgY2t4ZWNoID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyog U3lzdGVtIHNob3VsZCBlY2hvIGNoYXJzICovCi0KLSNpZmRlZiBhZWdpcwotICAgIGNvbmJ1Zm4g PSAwOwotICAgIGlmIChjb25jcnApIHJldHVybih3cml0ZSgxLCAiXDAzNVwwMDEiLCAyKSk7Ci0g ICAgaWYgKGNvbnVpZCA9PSBpbnB1dF9wYWRfJHVpZCkgewotCXBhZF8kY29va2VkKGlvc18kc3Rk aW4sIHN0KTsKLQljb25zdGF0ZSA9IENPTl9SRVM7Ci0JcmV0dXJuKDApOwotICAgIH0KLSNlbmRp ZiAvKiBhZWdpcyAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICBwOWNvbnJlcygpOwotI2Vsc2UKLSNp ZmRlZiBCU0Q0NE9SUE9TSVgKLSAgICBkZWJ1ZyhGMTAwLCJjb25yZXMgcmVzdG9yaW5nIHRjc2V0 YXR0ciIsIiIsMCk7Ci0gICAgeCA9IHRjc2V0YXR0cigwLFRDU0FEUkFJTiwmY2NvbGQpOwotI2Vs c2UKLSNpZmRlZiBBVFRTVgotICAgIGRlYnVnKEYxMDAsImNvbnJlcyByZXN0b3JpbmcgaW9jdGwi LCIiLDApOwotICAgIHggPSBpb2N0bCgwLFRDU0VUQVcsJmNjb2xkKTsKLSNlbHNlIC8qIEJTRCwg VjcsIGFuZCBmcmllbmRzICovCi0jaWZkZWYgc29ueV9uZXdzCQkJLyogU29ueSBORVdTICovCi0g ICAgaWYgKGttX2NvbiAhPSAtMSkKLSAgICAgIGlvY3RsKDAsVElPQ0tTRVQsJmttX2Nvbik7CS8q IFJlc3RvcmUgY29uc29sZSBLYW5qaSBtb2RlICovCi0jZW5kaWYgLyogc29ueV9uZXdzICovCi0g ICAgbXNsZWVwKDEwMCk7Ci0gICAgZGVidWcoRjEwMCwiY29ucmVzIHJlc3RvcmluZyBzdHR5Iiwi IiwwKTsKLSAgICB4ID0gY29uY2hrKCk7CQkJLyogQmVjYXVzZSBzdHR5KCkgaXMgZGVzdHJ1Y3Rp dmUgKi8KLSAgICBpZiAoeCA+IDApCi0gICAgICBjb25nZXRidWYoeCk7Ci0jaWZkZWYgQkVMTFYx MAotICAgIHggPSBpb2N0bCgwLFRJT0NTRVRQLCZjY29sZCk7Ci0jZWxzZQotICAgIHggPSBzdHR5 KDAsJmNjb2xkKTsKLSNlbmRpZiAvKiBCRUxMVjEwICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNl bmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotICAgIGlmICh4ID4g LTEpCi0gICAgICBjb25zdGF0ZSA9IENPTl9SRVM7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJjb25yZXMg cmV0dXJucyIsIiIseCk7Ci0gICAgcmV0dXJuKHgpOwotfQotCi0vKiAgQyBPIE4gTyBDICAtLSAg T3V0cHV0IGEgY2hhcmFjdGVyIHRvIHRoZSBjb25zb2xlIHRlcm1pbmFsICAqLwotCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotY29ub2MoY2hhciBjKQotI2Vsc2UKLWNvbm9jKGMpIGNoYXIgYzsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogY29ub2MgKi8gewotCi0jaWZkZWYgSUtTRAotICAgIGlm IChpbnNlcnZlciAmJiAhbG9jYWwpCi0gICAgICByZXR1cm4odHRvYyhjKSk7Ci0KLSNpZmRlZiBD S19FTkNSWVBUSU9OCi0gICAgaWYgKGluc2VydmVyICYmIFRFTE9QVF9NRShURUxPUFRfRU5DUllQ VElPTikpCi0gICAgICAgIGNrX3RuX2VuY3J5cHQoJmMsMSk7Ci0jZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQotI2lmZGVmIFBsYW45Ci0gICAgcmV0dXJuIGNv bndyaXRlKCZjLDEpOwotI2Vsc2UKLSAgICByZXR1cm4od3JpdGUoMSwmYywxKSk7Ci0jZW5kaWYg LyogUGxhbjkgKi8KLX0KLQotLyogIEMgTyBOIFggTyAgLS0gIFdyaXRlIHggY2hhcmFjdGVycyB0 byB0aGUgY29uc29sZSB0ZXJtaW5hbCAgKi8KLQotaW50Ci1jb254byh4LHMpIGludCB4OyBjaGFy ICpzOyB7Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkKLSAgICAg IHJldHVybih0dG9sKChDSEFSICopcyx4KSk7Ci0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAg aWYgKGluc2VydmVyICYmIFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpCi0gICAgICAgIGNr X3RuX2VuY3J5cHQocyx4KTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jZW5kaWYgLyog SUtTRCAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICByZXR1cm4oY29ud3JpdGUocyx4KSk7Ci0jZWxz ZQotICAgIHJldHVybih3cml0ZSgxLHMseCkpOwotI2VuZGlmIC8qIFBsYW45ICovCi19Ci0KLS8q ICBDIE8gTiBPIEwgIC0tICBXcml0ZSBhIGxpbmUgdG8gdGhlIGNvbnNvbGUgdGVybWluYWwgICov Ci0KLWludAotY29ub2wocykgY2hhciAqczsgewotICAgIGludCBsZW47Ci0gICAgaWYgKCFzKSBz ID0gIiI7CQkJLyogQWx3YXlzIGRvIHRoaXMhICovCi0gICAgbGVuID0gc3RybGVuKHMpOwotICAg IGlmIChsZW4gPT0gMCkKLSAgICAgIHJldHVybigwKTsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAo aW5zZXJ2ZXIgJiYgIWxvY2FsKQotICAgICAgcmV0dXJuKHR0b2woKENIQVIgKilzLGxlbikpOwot Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIGlmIChpbnNlcnZlciAmJiBURUxPUFRfTUUoVEVM T1BUX0VOQ1JZUFRJT04pKSB7Ci0JaWYgKG54cGFja2V0IDwgbGVuKSB7Ci0JICAgIGlmICh4cGFj a2V0KSB7Ci0JCWZyZWUoeHBhY2tldCk7Ci0JCXhwYWNrZXQgPSBOVUxMOwotCQlueHBhY2tldCA9 IDA7Ci0JICAgIH0KLQkgICAgbGVuID0gbGVuID4gMTAyNDAgPyBsZW4gOiAxMDI0MDsKLQkgICAg eHBhY2tldCA9IChDSEFSICopbWFsbG9jKGxlbik7Ci0JICAgIGlmICgheHBhY2tldCkgewotCQlm cHJpbnRmKHN0ZGVyciwidHRvbCBtYWxsb2MgZmFpbHVyZVxuIik7Ci0JCXJldHVybigtMSk7Ci0J ICAgIH0gZWxzZQotCSAgICAgIG54cGFja2V0ID0gbGVuOwotCX0KLQltZW1jcHkoeHBhY2tldCxz LGxlbik7Ci0JcyA9IChjaGFyICopeHBhY2tldDsKLQlja190bl9lbmNyeXB0KHMsbGVuKTsKLSAg ICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQotI2lm ZGVmIFBsYW45Ci0gICAgcmV0dXJuKGNvbndyaXRlKHMsbGVuKSk7Ci0jZWxzZQotICAgIHJldHVy bih3cml0ZSgxLHMsbGVuKSk7Ci0jZW5kaWYgLyogUGxhbjkgKi8KLX0KLQotLyogIEMgTyBOIE8g TCBBICAtLSAgV3JpdGUgYW4gYXJyYXkgb2YgbGluZXMgdG8gdGhlIGNvbnNvbGUgdGVybWluYWwg Ki8KLQotaW50Ci1jb25vbGEocykgY2hhciAqc1tdOyB7Ci0gICAgY2hhciAqIHA7Ci0gICAgaW50 IGksIHg7Ci0KLQotICAgIGlmICghcykgcmV0dXJuKDApOwotICAgIGZvciAoaSA9IDA7IDsgaSsr KSB7Ci0JcCA9IHNbaV07Ci0JaWYgKCFwKSBwID0gIiI7CQkJLyogTGV0J3Mgbm90IGR1bXAgY29y ZSBzaGFsbCB3ZT8gKi8KLQlpZiAoISpwKQotCSAgYnJlYWs7Ci0jaWZkZWYgSUtTRAotCWlmIChp bnNlcnZlciAmJiAhbG9jYWwpCi0JICB4ID0gdHRvbCgoQ0hBUiAqKXAsKGludClzdHJsZW4ocCkp OwotCWVsc2UKLSNlbmRpZiAvKiBJS1NEICovCi0JICB4ID0gY29ub2wocCk7Ci0JaWYgKHggPCAw KQotCSAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKiAgQyBPIE4g TyBMIEwgIC0tICBPdXRwdXQgYSBzdHJpbmcgZm9sbG93ZWQgYnkgQ1JMRiAgKi8KLQotaW50Ci1j b25vbGwocykgY2hhciAqczsgewotICAgIENIQVIgYnVmWzNdOwotICAgIGJ1ZlswXSA9ICdccic7 Ci0gICAgYnVmWzFdID0gJ1xuJzsKLSAgICBidWZbMl0gPSAnXDAnOwotICAgIGlmICghcykgcyA9 ICIiOwotCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwpIHsKLQlpZiAo KnMpIHR0b2woKENIQVIgKilzLChpbnQpc3RybGVuKHMpKTsKLQlyZXR1cm4odHRvbChidWYsMikp OwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICBpZiAoKnMpIGNvbm9sKHMpOwotI2lm ZGVmIElLU0QKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgaWYgKGluc2VydmVyICYmIFRFTE9Q VF9NRShURUxPUFRfRU5DUllQVElPTikpCi0gICAgICBja190bl9lbmNyeXB0KChjaGFyICopYnVm LDIpOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0KLSNp ZmRlZiBQbGFuOQotICAgIHJldHVybihjb253cml0ZShidWYsIDIpKTsKLSNlbHNlCi0gICAgcmV0 dXJuKHdyaXRlKDEsYnVmLDIpKTsKLSNlbmRpZiAvKiBQbGFuOSAqLwotfQotCi0vKiAgQyBPIE4g QyBIIEsgIC0tICBSZXR1cm4gaG93IG1hbnkgY2hhcmFjdGVycyBhdmFpbGFibGUgYXQgY29uc29s ZSAgKi8KLS8qCi0gIFdlIGNvdWxkIGFsc28gdXNlIHNlbGVjdCgpIGhlcmUgdG8gY292ZXIgYSBm ZXcgbW9yZSBzeXN0ZW1zIHRoYXQgYXJlIG5vdAotICBjb3ZlcmVkIGJ5IGFueSBvZiB0aGUgZm9s bG93aW5nLCBlLmcuIEhQLVVYIDkuMHggb24gdGhlIG1vZGVsIDgwMC4KLSovCi1pbnQKLWNvbmNo aygpIHsKLSAgICBzdGF0aWMgaW50IGNvbnR5cCA9IDA7CQkvKiArMSBmb3IgaXNhdHR5LCAtMSBv dGhlcndpc2UgKi8KLQotICAgIGlmIChjb250eXAgPT0gMCkJCQkvKiBUaGlzIHByZXZlbnRzIHVu bmVjZXNzYXJ5ICovCi0gICAgICBjb250eXAgPSAoaXNhdHR5KDApID8gMSA6IC0xKTsJLyogZHVw bGljYXRlZCBjYWxscyB0byBpc2F0dHkoKSAqLwotICAgIGRlYnVnKEYxMDEsImNvbmNoayBjb250 eXAiLCIiLGNvbnR5cCk7Ci0gICAgaWYgKGJhY2tncmQgfHwgKGNvbnR5cCA8IDApKQotICAgICAg cmV0dXJuKDApOwotCi0jaWZkZWYgYWVnaXMKLSAgICBpZiAoY29uYnVmbiA+IDApIHJldHVybihj b25idWZuKTsgICAvKiB1c2Ugb2xkIGNvdW50IGlmIG5vbnplcm8gKi8KLQotICAgIC8qIHJlYWQg aW4gbW9yZSBjaGFyYWN0ZXJzICovCi0gICAgY29uYnVmbiA9IGlvc18kZ2V0KGlvc18kc3RkaW4s Ci0gICAgICAgICAgICAgIGlvc18kY29uZF9vcHQsIGNvbmJ1ZiwgKGxvbmcpc2l6ZW9mKGNvbmJ1 ZiksIHN0KTsKLSAgICBpZiAoc3QuYWxsICE9IHN0YXR1c18kb2spIGNvbmJ1Zm4gPSAwOwotICAg IGNvbmJ1ZnAgPSBjb25idWY7Ci0gICAgcmV0dXJuKGNvbmJ1Zm4pOwotI2Vsc2UKLSNpZmRlZiBJ S1NECi0gICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkKLSAgICAgIHJldHVybihpbl9jaGsoMSx0 dHlmZCkpOwotICAgIGVsc2UKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICByZXR1cm4oaW5fY2hr KDAsMCkpOwotI2VuZGlmIC8qIGFlZ2lzICovCi19Ci0KLS8qICBDIE8gTiBJIE4gQyAgLS0gIEdl dCBhIGNoYXJhY3RlciBmcm9tIHRoZSBjb25zb2xlICAqLwotLyoKLSAgQ2FsbCB3aXRoIHRpbW8g PiAwIHRvIGRvIGEgdGltZWQgcmVhZCwgdGltbyA9PSAwIHRvIGRvIGFuIHVudGltZWQgYmxvY2tp bmcKLSAgcmVhZC4gIFVwb24gc3VjY2VzcywgcmV0dXJucyB0aGUgY2hhcmFjdGVyLiAgVXBvbiBm YWlsdXJlLCByZXR1cm5zIC0xLgotICBBIHRpbWVkIHJlYWQgdGhhdCBkb2VzIG5vdCBjb21wbGV0 ZSB3aXRoaW4gdGhlIHRpbWVvdXQgcGVyaW9kIHJldHVybnMgLTIuCi0qLwotaW50Ci1jb25pbmMo dGltbykgaW50IHRpbW87IHsKLSAgICBpbnQgbiA9IDA7IENIQVIgY2g7Ci0gICAgaW50IHh4Owot Ci0gICAgaWYgKGNvbmJ1Zm4gPiAwKSB7CQkJLyogSWYgc29tZXRoaW5nIGFscmVhZHkgYnVmZmVy ZWQgKi8KLQktLWNvbmJ1Zm47Ci0JcmV0dXJuKCh1bnNpZ25lZCkoKmNvbmJ1ZnArKyAmIDB4ZmYp KTsKLSAgICB9Ci0KLSAgICBlcnJubyA9IDA7CQkJCS8qIENsZWFyIHRoaXMgKi8KLSNpZmRlZiBJ S1NECi0gICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkgewotCXh4ID0gdHRpbmModGltbyk7Ci0J aWYgKHh4IDwgMCkKLQkgIHJldHVybih0dGluY3RpbW8gPyAtMiA6IC0xKTsKLQllbHNlCi0JICBy ZXR1cm4oeHgpOwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0KLSNpZmRlZiBhZWdpcwkJCQkv KiBBcG9sbG8gQWVnaXMgb25seS4uLiAqLwotICAgIGRlYnVnKEYxMDEsImNvbmluYyB0aW1vIiwi Iix0aW1vKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICBpZiAoY29uY2hrKCkgPiAwKSB7Ci0J LS1jb25idWZuOwotCXJldHVybigodW5zaWduZWQpKCpjb25idWZwKysgJiAweGZmKSk7Ci0gICAg fQotI2VuZGlmIC8qIGFlZ2lzICovCi0KLSNpZmRlZiBUVExFQlVGCi0gICAgaWYgKAotI2lmZGVm IElLU0QKLQlpbnNlcnZlciAmJgotI2VuZGlmIC8qIElLU0QgKi8KLQkheGxvY2FsCi0JKSB7Ci0J aWYgKHR0cHVzaCA+PSAwKSB7Ci0JICAgIGRlYnVnKEYxMTEsInR0aW5jIiwidHRwdXNoIix0dHB1 c2gpOwotCSAgICBjaCA9IHR0cHVzaDsKLQkgICAgdHRwdXNoID0gLTE7Ci0JICAgIHJldHVybihj aCk7Ci0JfQotCWlmIChsZV9kYXRhKSB7Ci0JICAgIGlmIChsZV9nZXRjaGFyKCZjaCkgPiAwKSB7 Ci0JCWRlYnVnKEYxMTEsInR0aW5jIExvY2FsRWNob0luQnVmIiwiY2giLGNoKTsKLQkJcmV0dXJu KGNoKTsKLQkgICAgfQotCX0KLSAgICB9Ci0jZW5kaWYgLyogVFRMRUJVRiAqLwotCi0gICAgaWYg KHRpbW8gPD0gMCkgewkJCS8qIFVudGltZWQsIGJsb2NraW5nIHJlYWQuICovCi0Jd2hpbGUgKDEp IHsJCQkvKiBLZWVwIHRyeWluZyB0aWxsIHdlIGdldCBvbmUuICovCi0JICAgIG4gPSByZWFkKDAs ICZjaCwgMSk7CS8qIFJlYWQgYSBjaGFyYWN0ZXIuICovCi0JICAgIGlmIChuID09IDApIGNvbnRp bnVlOwkvKiBTaG91bGRuJ3QgaGFwcGVuLiAqLwotCSAgICBpZiAobiA+IDApIHsJCS8qIElmIHJl YWQgd2FzIHN1Y2Nlc3NmdWwsICovCi0jaWZkZWYgSUtTRAotI2lmZGVmIENLX0VOQ1JZUFRJT04K LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJjb25pbmMgZGVjcnlwdCAxIiwiIiwwKTsKLSAg ICAgICAgICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsICYmIFRFTE9QVF9VKFRFTE9QVF9F TkNSWVBUSU9OKSkKLQkJICBja190bl9kZWNyeXB0KChjaGFyICopJmNoLDEpOwotI2VuZGlmIC8q IENLX0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0JCXJldHVybigodW5zaWduZWQp KGNoICYgMHhmZikpOyAvKiByZXR1cm4gdGhlIGNoYXJhY3Rlci4gKi8KLSAgICAgICAgICAgIH0K LQotLyogQ29tZSBoZXJlIGlmIHJlYWQoKSByZXR1cm5lZCBhbiBlcnJvci4gKi8KLQotCSAgICBk ZWJ1ZyhGMTAxLCAiY29uaW5jKDApIGVycm5vIiwiIixlcnJubyk7IC8qIExvZyB0aGUgZXJyb3Iu ICovCi0jaWZuZGVmIE9YT1MKLSNpZmRlZiBTVk9SUE9TSVgKLSNpZmRlZiBDSUUgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENJRSBSZWd1bHVzIGhhcyBubyBFSU5UUiBzeW1ib2w/ICov Ci0jaWZuZGVmIEVJTlRSCi0jZGVmaW5lIEVJTlRSIDQKLSNlbmRpZiAvKiBFSU5UUiAqLwotI2Vu ZGlmIC8qIENJRSAqLwotLyoKLSAgVGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIHNldmVyYWwgZGlm ZmVyZW50IHB1cnBvc2VzLiAgSW4gQ09OTkVDVCBtb2RlLCBpdCBpcwotICB1c2VkIHRvIGRvIGFu IHVudGltZWQsIGJsb2NraW5nIHJlYWQgZnJvbSB0aGUga2V5Ym9hcmQgaW4gdGhlIGxvd2VyIENP Tk5FQ1QKLSAgZm9yay4gIER1cmluZyBsb2NhbC1tb2RlIGZpbGUgdHJhbnNmZXIsIGl0IHJlYWRz IGEgY2hhcmFjdGVyIGZyb20gdGhlCi0gIGNvbnNvbGUgdG8gaW50ZXJydXB0IHRoZSBmaWxlIHRy YW5zZmVyIChsaWtlIEEgZm9yIGEgc3RhdHVzIHJlcG9ydCwgWCB0bwotICBjYW5jZWwgYSBmaWxl LCBldGMpLiAgT2J2aW91c2x5LCB3ZSBkb24ndCB3YW50IHRoZSByZWFkcyBpbiB0aGUgbGF0dGVy IGNhc2UKLSAgdG8gYmUgYmxvY2tpbmcsIG9yIHRoZSBmaWxlIHRyYW5zZmVyIHdvdWxkIHN0b3Ag dW50aWwgdGhlIHVzZXIgdHlwZWQKLSAgc29tZXRoaW5nLiAgVW5mb3J0dW5hdGVseSwgU3lzdGVt IFYgZG9lcyBub3QgYWxsb3cgdGhlIGNvbnNvbGUgZGV2aWNlIGlucHV0Ci0gIGJ1ZmZlciB0byBi ZSBzYW1wbGVkIG5vbmRlc3RydWN0aXZlbHkgKGUuZy4gYnkgY29uY2hrKCkpLCBzbyBhIGtsdWRn ZSBpcwotICB1c2VkIGluc3RlYWQuICBEdXJpbmcgbG9jYWwtbW9kZSBmaWxlIHRyYW5zZmVyLCB0 aGUgU0lHUVVJVCBzaWduYWwgaXMgYXJtZWQKLSAgYW5kIHRyYXBwZWQgYnkgZXNjdHJwKCksIGFu ZCB0aGlzIHJvdXRpbmUgcHJldGVuZHMgdG8gaGF2ZSByZWFkIHRoZSBxdWl0Ci0gIGNoYXJhY3Rl ciBmcm9tIHRoZSBrZXlib2FyZCBub3JtYWxseS4gIEJ1dCwga2x1ZGdlIG9yIG5vIGtsdWRnZSwg dGhlIHJlYWQoKQotICBpc3N1ZWQgYnkgdGhpcyBjb21tYW5kLCB1bmRlciBTeXN0ZW0gViBvbmx5 LCBjYW4gZmFpbCBpZiBhIHNpZ25hbCAtLSBBTlkKLSAgc2lnbmFsIC0tIGlzIGNhdWdodCB3aGls ZSB0aGUgcmVhZCBpcyBwZW5kaW5nLiAgVGhpcyBjYW4gb2NjdXIgbm90IG9ubHkgd2hlbgotICB0 aGUgdXNlciB0eXBlcyB0aGUgcXVpdCBjaGFyYWN0ZXIsIGJ1dCBhbHNvIGR1cmluZyB0ZWxuZXQg bmVnb3RpYXRpb25zLCB3aGVuCi0gIHRoZSBsb3dlciBDT05ORUNUIGZvcmsgc2lnbmFscyB0aGUg dXBwZXIgb25lIGFib3V0IGFuIGVjaG9pbmcgbW9kZSBjaGFuZ2UuCi0gIFdoZW4gdGhpcyBoYXBw ZW5zLCB3ZSBoYXZlIHRvIHBvc3QgdGhlIHJlYWQoKSBhZ2Fpbi4gIFRoaXMgaXMgYXBwYXJlbnRs eSBub3QKLSAgYSBwcm9ibGVtIGluIEJTRC1iYXNlZCBVTklYIHZlcnNpb25zLgotKi8KLQkgICAg aWYgKGVycm5vID09IEVJTlRSKQkJLyogUmVhZCBpbnRlcnJ1cHRlZC4gKi8KLQkgICAgICBpZiAo Y29uZXNjKSAgewkJLyogSWYgYnkgU0lHUVVJVCwgKi8KLSAJCSBjb25lc2MgPSAwOwkJLyogdGhl IGNvbmVzYyB2YXJpYWJsZSBpcyBzZXQsICovCi0gCQkgcmV0dXJuKGVzY2Nocik7CS8qIHNvIHJl dHVybiB0aGUgZXNjYXBlIGNoYXJhY3Rlci4gKi8KLQkgICAgIH0gZWxzZSBjb250aW51ZTsJCS8q IEJ5IG90aGVyIHNpZ25hbCwgdHJ5IGFnYWluLiAqLwotI2Vsc2UKLS8qCi0gIFRoaXMgbWlnaHQg YmUgZGFuZ2Vyb3VzLCBidXQgbGV0J3MgZG8gdGhpcyBvbiBub24tU3lzdGVtIFYgdmVyc2lvbnMg dG9vLAotICBzaW5jZSBhdCBsZWFzdCBvbmUgU3VuT1MgNC4xLjIgdXNlciBjb21wbGFpbnMgb2Yg aW1tZWRpYXRlIGRpc2Nvbm5lY3Rpb25zCi0gIHVwb24gZmlyc3QgbWFraW5nIGEgVEVMTkVUIGNv bm5lY3Rpb24uCi0qLwotCSAgICBpZiAoZXJybm8gPT0gRUlOVFIpCQkvKiBSZWFkIGludGVycnVw dGVkLiAqLwotCSAgICAgIGNvbnRpbnVlOwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2Vsc2Ug LyogT1hPUyAqLwotCSAgICBpZiAoZXJybm8gPT0gRUlOVFIpCQkvKiBSZWFkIGludGVycnVwdGVk LiAqLwotCSAgICAgIGNvbnRpbnVlOwotI2VuZGlmIC8qIE9YT1MgKi8KLQkgICAgcmV0dXJuKC0x KTsJCQkvKiBFcnJvciAqLwotCX0KLSAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9n ICYmIHRpbW8gPD0gMCkgewotCWRlYnVnKEYxMDAsImNvbmluYyB0aW1lb3V0IGxvZ2ljIGVycm9y IiwiIiwwKTsKLQl0aW1vID0gMTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotLyogVGlt ZWQgcmVhZC4uLiAqLwotCi0gICAgc2F2YWwgPSBzaWduYWwoU0lHQUxSTSx0aW1lcmgpOwkvKiBT ZXQgdXAgdGltZW91dCBoYW5kbGVyLiAqLwotICAgIHh4ID0gYWxhcm0odGltbyk7CQkJLyogU2V0 IHRoZSBhbGFybS4gKi8KLSAgICBkZWJ1ZyhGMTAxLCJjb25pbmMgYWxhcm0gc2V0IiwiIix0aW1v KTsKLSAgICBpZiAoCi0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0Jc2lnc2V0am1wKHNqYnVmLDEpCi0j ZWxzZQotCXNldGptcChzamJ1ZikKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLQkpCQkJCS8q IFRoZSByZWFkKCkgdGltZWQgb3V0LiAqLwotICAgICAgbiA9IC0yOwkJCQkvKiBDb2RlIGZvciB0 aW1lb3V0LiAqLwotICAgIGVsc2UKLSAgICAgIG4gPSByZWFkKDAsICZjaCwgMSk7Ci0gICAgdHRp bW9mZigpOwkJCQkvKiBUdXJuIG9mZiB0aW1lciAqLwotICAgIGlmIChuID4gMCkgewkJCS8qIEdv dCBjaGFyYWN0ZXIgT0suICovCi0jaWZkZWYgSUtTRAotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAg ICAgICAgZGVidWcoRjEwMCwiY29uaW5jIGRlY3J5cHQgMiIsIiIsMCk7Ci0gICAgICAgIGlmIChp bnNlcnZlciAmJiAhbG9jYWwgJiYgVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKQotCSAgY2tf dG5fZGVjcnlwdCgoY2hhciAqKSZjaCwxKTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0j ZW5kaWYgLyogSUtTRCAqLwotCXJldHVybigodW5zaWduZWQpKGNoICYgMHhmZikpOwkvKiBSZXR1 cm4gaXQuICovCi0gICAgfQotLyoKLSAgcmVhZCgpIHJldHVybmVkIGFuIGVycm9yLiAgU2FtZSBk ZWFsIGFzIGFib3ZlLCBidXQgd2l0aG91dCB0aGUgbG9vcC4KLSovCi0gICAgZGVidWcoRjEwMSwg ImNvbmluYyh0aW1vKSBuIiwiIixuKTsKLSAgICBkZWJ1ZyhGMTAxLCAiY29uaW5jKHRpbW8pIGVy cm5vIiwiIixlcnJubyk7Ci0jaWZuZGVmIE9YT1MKLSNpZmRlZiBTVk9SUE9TSVgKLSAgICBpZiAo biA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUiAmJiBjb25lc2MgIT0gMCkgewotCWNvbmVzYyA9IDA7 Ci0JcmV0dXJuKGVzY2Nocik7CQkJLyogVXNlciBlbnRlcmVkIGVzY2FwZSBjaGFyYWN0ZXIuICov Ci0gICAgfQotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotICAgIGlmIChuID09IDAgJiYgZXJybm8g PiAwKSB7CQkvKiBJdCdzIGFuIGVycm9yICovCi0JcmV0dXJuKC0xKTsKLSAgICB9Ci0jZW5kaWYg LyogISBPWE9TICovCi0gICAgcmV0dXJuKG4pOwotfQotCi0vKiAgQyBPIE4gRyBLIFMgIC0tICBD b25zb2xlIEdldCBLZXlib2FyZCBTY2FuY29kZSAgKi8KLQotI2lmbmRlZiBjb25na3MKLS8qCi0g IFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgZmlsbGVkIGluIHdpdGggdGhlIHZhcmlvdXMgc3lz dGVtLWRlcGVuZGVudAotICBzeXN0ZW0gY2FsbHMgdXNlZCBieSBTVU5PUywgTmVYVCBPUywgWGVu aXgsIEF2aWlvbiwgZXRjLCB0byByZWFkIGEgZnVsbAotICBrZXlib2FyZCBzY2FuIGNvZGUuICBV bmZvcnR1bmF0ZWx5IHRoZXJlIGFyZW4ndCBhbnkuCi0qLwotaW50Ci1jb25na3ModGltbykgaW50 IHRpbW87IHsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKQotICAg ICAgcmV0dXJuKHR0aW5jKHRpbW8pKTsKLSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICByZXR1cm4o Y29uaW5jKHRpbW8pKTsKLX0KLSNlbmRpZiAvKiBjb25na3MgKi8KLQotI2lmZGVmIEFUVDczMDAK LQotLyogIEEgVCBUIEQgSSBBIEwgIC0tICBEaWFsIHVwIHRoZSByZW1vdGUgc3lzdGVtIHVzaW5n IGludGVybmFsIG1vZGVtCi0gKiBQdXJwb3NlOiB0byBvcGVuIGFuZCBkaWFsIGEgbnVtYmVyIG9u IHRoZSBpbnRlcm5hbCBtb2RlbSBhdmFpbGFibGUgb24gdGhlCi0gKiBBVFQ3MzAwIFVOSVggUEMu ICBXcml0dGVuIGJ5IEpvZSBEb3VwbmlrLiBTdXBlcmNlZWRzIHZlcnNpb24gd3JpdHRlbiBieQot ICogUmljaGFyZCBFLiBIaWxsLCBEaWNraW5zb24sIFRYLiB3aGljaCBlbXBsb3llZCBkaWFsKDNj KS4KLSAqIFVzZXMgaW5mb3JtYXRpb24gaW4gPHN5cy9waG9uZS5oPiBhbmQgb3VyIHN0YXR1cyBp bnQgYXR0bW9kZW0uCi0gKi8KLWF0dGRpYWwodHRuYW1lLHNwZWVkLHRlbG5icikgY2hhciAqdHRu YW1lLCp0ZWxuYnI7IGxvbmcgc3BlZWQ7IHsKLSAgICBjaGFyICp0ZWxudW07Ci0KLSAgICBhdHRt b2RlbSAmPSB+SVNNT0RFTTsgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZGVtIG5vdCBpbiB1 c2UgeWV0ICovCi0gICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBPX05ERUxBWSBpcyBzZXQs IGVsc2UgaS9vIHRyYWZmaWMgaGFuZ3MgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogV2UgdHVy biB0aGlzIGZsYWcgb2ZmIG9uY2UgdGhlIGRpYWwgaXMgY29tcGxldGUgKi8KLSAgICBmY250bCh0 dHlmZCwgRl9TRVRGTCwgZmNudGwodHR5ZmQsIEZfR0VURkwsIDApIHwgT19OREVMQVkpOwotCi0g ICAgLyogQ29uZGl0aW9uIGxpbmUsIGNoZWNrIGF2YWlsYWJpbGl0eSAmIERBVEEgbW9kZSwgdHVy biBvbiBzcGVha2VyICovCi0gICAgaWYgKGlvY3RsKHR0eWZkLFBJT0NPRkZIT09LLCAmZGlhbGVy KSA9PSAtMSkgewotICAgICAgICBwcmludGYoImNhbm5vdCBhY2Nlc3MgcGhvbmVcbiIpOwotICAg ICAgICB0dGNsb3MoMCk7Ci0gICAgICAgIHJldHVybiAoLTIpOwotICAgIH0KLSAgICBpb2N0bCh0 dHlmZCxQSU9DR0VUUCwmZGlhbGVyKTsgICAgICAvKiBnZXQgcGhvbmUgZGlhbGVyIHBhcmFtZXRl cnMgKi8KLQotICAgIGlmIChkaWFsZXIuY19saW5lcGFyYW0gJiBWT0lDRSkgewkvKiBwaG9uZSBt dXN0IGJlIGluIERBVEEgbW9kZSAqLwotICAgICAgICBwcmludGYoIiBTaG91bGQgbm90IGRpYWwg d2l0aCBtb2RlbSBpbiBWT0lDRSBtb2RlLlxuIik7Ci0gICAgICAgIHByaW50ZigiIEV4aXQgS2Vy bWl0LCBzd2l0Y2ggdG8gREFUQSBhbmQgcmV0cnkgY2FsbC5cbiIpOwotICAgICAgICB0dGNsb3Mo MCk7Ci0gICAgICAgIHJldHVybiAoLTIpOwotICAgIH0KLSNpZmRlZiBBVFRUT05FRAkJCQkvKiBP bGQgd2F5LCB0b25lIGRpYWxpbmcgb25seS4gKi8KLSAgICBkaWFsZXIuY19saW5lcGFyYW0gPSBE QVRBIHwgRFRNRjsJLyogRGlhbCB3aXRoIHRvbmVzLCAqLwotICAgIGRpYWxlci5jX2xpbmVwYXJh bSAmPSB+UFVMU0U7CS8qIG5vdCB3aXRoIHB1bHNlcy4gKi8KLSNlbHNlCi0gICAgLyogTGVhdmUg Y3VycmVudCBwdWxzZS90b25lIHN0YXRlIGFsb25lLiAqLwotICAgIC8qIEJ1dCB3aGF0IGFib3V0 IERBVEE/ICBBZGQgaXQgYmFjayBpZiB5b3UgaGF2ZSB0cm91YmxlLiAqLwotICAgIC8qIHN5cy9w aG9uZSBzYXlzIHlvdSBnZXQgREFUQSBhdXRvbWF0aWNhbGx5IGJ5IG9wZW5pbmcgZGV2aWNlIFJE V1IgKi8KLSNlbmRpZgotICAgIGRpYWxlci5jX3dhaXRkaWFsdG9uZSA9IDU7ICAgICAgICAgICAg ICAgICAgLyogd2FpdCA1IHNlYyBmb3IgZGlhbHRvbmUgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAg ZGlhbGVyLmNfZmVlZGJhY2sgPSBTUEVBS0VST058Tk9STVNQS3xSSU5HT047ICAvKiBjb250cm9s IHNwZWFrZXIgKi8KLSNlbHNlCi0gICAgLyogc3lzL3Bob25lIHNheXMgUklOR09OIHVzZWQgb25s eSBmb3IgaW5jb21pbmcgdm9pY2UgY2FsbHMgKi8KLSAgICBkaWFsZXIuY19mZWVkYmFjayAmPSB+ KFNPRlRTUEt8TE9VRFNQSyk7Ci0gICAgZGlhbGVyLmNfZmVlZGJhY2sgfD0gU1BFQUtFUk9OfE5P Uk1TUEs7Ci0jZW5kaWYKLSAgICBkaWFsZXIuY193YWl0Zmxhc2ggPSA1MDA7ICAgICAgICAgICAg ICAgICAgIC8qIDAuNSBzZWMgZmxhc2ggaG9vayAqLwotICAgIGlmKGlvY3RsKHR0eWZkLFBJT0NT RVRQLCZkaWFsZXIpID09IC0xKSB7ICAgLyogc2V0IHBob25lIHBhcmFtZXRlcnMgKi8KLSAgICAg ICAgcHJpbnRmKCJDYW5ub3Qgc2V0IG1vZGVtIGNoYXJhY3RlcmlzdGljc1xuIik7Ci0gICAgICAg IHR0Y2xvcygwKTsKLSAgICAgICAgcmV0dXJuICgtMik7Ci0gICAgfQotICAgIGlvY3RsKHR0eWZk LFBJT0NSRUNPTk4sMCk7CQkvKiBUdXJucyBvbiBzcGVha2VyIGZvciBwdWxzZSAqLwotCi0jaWZk ZWYgQ09NTUVOVAotICAgIGZwcmludGYoc3RkZXJyLCJQaG9uZSBsaW5lIHN0YXR1cy4gbGluZV9w YXI6JW8gZGlhbHRvbmVfd2FpdDolbyBcCi1saW5lX3N0YXR1czolbyBmZWVkYmFjazolb1xuIiwK LSAgICBkaWFsZXIuY19saW5lcGFyYW0sIGRpYWxlci5jX3dhaXRkaWFsdG9uZSwKLSAgICBkaWFs ZXIuY19saW5lc3RhdHVzLCBkaWFsZXIuY19mZWVkYmFjayk7Ci0jZW5kaWYKLQotICAgIGF0dG1v ZGVtIHw9IElTTU9ERU07ICAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kZW0gaXMgbm93IGlu LXVzZSAqLwotICAgIHNsZWVwKDEpOwotICAgIGZvciAodGVsbnVtID0gdGVsbmJyOyAqdGVsbnVt ICE9ICdcMCc7IHRlbG51bSsrKSAgICAvKiBkaWFsIG51bWJlciAqLwotI2lmZGVmIEFUVFRPTkVE Ci0gICAgICAvKiBUb25lIGRpYWxpbmcgb25seSAqLwotICAgICAgaWYgKGlvY3RsKHR0eWZkLFBJ T0NESUFMLHRlbG51bSkgIT0gMCkgewotCSAgcGVycm9yKCJFcnJvciBpbiBkaWFsaW5nIik7Ci0J ICB0dGNsb3MoMCk7Ci0JICByZXR1cm4oLTIpOwotICAgICAgfQotI2Vsc2UgLyogQWxsb3cgUHVs c2Ugb3IgVG9uZSBkaWFsaW5nICovCi0gICAgc3dpdGNoICgqdGVsbnVtKSB7Ci0gICAgICBjYXNl ICd0JzogY2FzZSAnVCc6IGNhc2UgJyUnOgkvKiBUb25lIGRpYWxpbmcgcmVxdWVzdGVkICovCi0J ZGlhbGVyLmNfbGluZXBhcmFtIHw9IERUTUY7Ci0JZGlhbGVyLmNfbGluZXBhcmFtICY9IH5QVUxT RTsKLQlpZiAoaW9jdGwodHR5ZmQsUElPQ1NFVFAsJmRpYWxlcikgPT0gLTEpIHsKLQkgICAgcHJp bnRmKCJDYW5ub3Qgc2V0IG1vZGVtIHRvIHRvbmUgZGlhbGluZ1xuIik7Ci0JICAgIHR0Y2xvcygw KTsKLQkgICAgcmV0dXJuKC0yKTsKLQl9Ci0JYnJlYWs7Ci0gICAgICBjYXNlICdkJzogY2FzZSAn RCc6IGNhc2UgJ3AnOiBjYXNlICdQJzogY2FzZSAnXic6Ci0JZGlhbGVyLmNfbGluZXBhcmFtIHw9 IFBVTFNFOwotCWRpYWxlci5jX2xpbmVwYXJhbSAmPSB+RFRNRjsKLQlpZiAoaW9jdGwodHR5ZmQs UElPQ1NFVFAsJmRpYWxlcikgPT0gLTEpIHsKLQkgICAgcHJpbnRmKCJDYW5ub3Qgc2V0IG1vZGVt IHRvIHB1bHNlIGRpYWxpbmdcbiIpOwotCSAgICB0dGNsb3MoMCk7Ci0JICAgIHJldHVybigtMik7 Ci0JfQotCWJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFBJ T0NESUFMLHRlbG51bSkgIT0gMCkgewotCSAgICBwZXJyb3IoIkRpYWxpbmcgZXJyb3IiKTsKLQkg ICAgdHRjbG9zKDApOwotCSAgICByZXR1cm4oLTIpOwotCX0KLQlicmVhazsKLSAgICB9Ci0jZW5k aWYKLQotICAgIGlvY3RsKHR0eWZkLFBJT0NESUFMLCJAIik7CQkvKiB0ZXJtaW5hdG9yIGZvciBk YXRhIGNhbGwgKi8KLSAgICBkbyB7CQkJCS8qIHdhaXQgZm9yIG1vZGVtcyB0byBDb25uZWN0ICov Ci0gICAgICAgIGlmIChpb2N0bCh0dHlmZCxQSU9DR0VUUCwmZGlhbGVyKSAhPSAwKQl7IC8qIGdl dCBwYXJhbXMgKi8KLQkgICAgcGVycm9yKCJDYW5ub3QgZ2V0IG1vZGVtcyB0byBjb25uZWN0Iik7 Ci0JICAgIHR0Y2xvcygwKTsKLQkgICAgcmV0dXJuKC0yKTsKLQl9Ci0gICAgfSB3aGlsZSAoKGRp YWxlci5jX2xpbmVzdGF0dXMgJiBNT0RFTUNPTk5FQ1RFRCkgPT0gMCk7Ci0gICAgLyogVHVybiBv ZmYgT19OREVMQVkgZmxhZyBub3cuICovCi0gICAgZmNudGwodHR5ZmQsIEZfU0VURkwsIGZjbnRs KHR0eWZkLCBGX0dFVEZMLCAwKSAmIH5PX05ERUxBWSk7Ci0gICAgc2lnbmFsKFNJR0hVUCwgc2ln aHVwKTsgICAgICAgICAgICAgLyogaGFuZ3VwIG9uIGxvc3Mgb2YgY2FycmllciAqLwotICAgIHJl dHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBzdWNjZXNzICovCi19 Ci0KLS8qCi0gIE9mZmdldHR5LCBvbmdldHR5IGZ1bmN0aW9ucy4gVGhlc2UgZnVuY3Rpb24gZ2V0 IHRoZSAnZ2V0dHkoMW0pJyBvZmYKLSAgYW5kIHJlc3RvcmUgaXQgdG8gdGhlIGluZGljYXRlZCBs aW5lLiAgU2hlbGwncyByZXR1cm4gY29kZXMgYXJlOgotICAgIDA6IENhbid0IGRvIGl0LiAgUHJv YmFibHkgYSB1c2VyIGxvZ2dlZCBvbi4KLSAgICAxOiBObyBuZWVkLiAgTm8gZ2V0dHkgb24gdGhh dCBsaW5lLgotICAgIDI6IERvbmUsIHlvdSBzaG91bGQgcmVzdG9yZSB0aGUgZ2V0dHkgd2hlbiB5 b3UncmUgZG9uZS4KLSAgRE9HRVRZIFN5c3RlbSgzKSwgaG93ZXZlciwgcmV0dXJucyB0aGVtIGFz IDAsIDI1NiwgNTEyLCByZXNwZWN0aXZlbHkuCi0gIFRoYW5rcyB0byBLZXZpbiBPJ0dvcm1hbiwg QW5hcm0gU29mdHdhcmUgU3lzdGVtcy4KLQotICAgZ2V0b2ZmLnNoIGxvb2tzIGxpa2U6ICAgZ2V0 b24uc2ggbG9va3MgbGlrZToKLSAgICAgc2V0Z2V0dHkgJDEgMCAgICAgICAgICAgc2V0Z2V0dHkg JDEgMQotICAgICBlcnI9JD8gICAgICAgICAgICAgICAgICBleGl0ICQ/Ci0gICAgIHNsZWVwIDIK LSAgICAgZXhpdCAkZXJyCi0qLwotCi0vKiAgTyBGIEYgRyBFIFQgVCBZICAtLSAgVHVybiBvZmYg Z2V0dHkoMW0pIGZvciB0aGUgY29tbXVuaWNhdGlvbnMgdHR5IGxpbmUKLSAqIGFuZCBnZXQgc3Rh dHVzIHNvIGl0IGNhbiBiZSByZXN0YXJ0ZWQgYWZ0ZXIgdGhlIGxpbmUgaXMgaHVuZyB1cC4KLSAq LwotaW50Ci1vZmZnZXR0eSh0dG5hbWUpIGNoYXIgKnR0bmFtZTsgewotICAgIGNoYXIgdGVtcFsz MF07Ci0gICAgd2hpbGUgKCp0dG5hbWUgIT0gJ1wwJykgdHRuYW1lKys7ICAgICAgIC8qIHNlZWsg dGVybWluYXRvciBvZiBwYXRoICovCi0gICAgdHRuYW1lIC09IDM7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGdldCBsYXN0IDMgY2hhcnMgb2YgbmFtZSAqLwotICAgIHNwcmludGYodGVt cCwiL3Vzci9iaW4vZ2V0b2ZmLnNoICVzIix0dG5hbWUpOwotICAgIHJldHVybih6c3lzY21kKHRl bXApKTsKLX0KLQotLyogIE8gTiBHIEUgVCBUIFkgIC0tICBUdXJuIG9uIGdldHR5KDFtKSBmb3Ig dGhlIGNvbW11bmljYXRpb25zIHR0eSBsaW5lICovCi0KLWludAotb25nZXR0eSh0dG5hbWUpIGNo YXIgKnR0bmFtZTsgewotICAgIGNoYXIgdGVtcFszMF07Ci0gICAgd2hpbGUgKCp0dG5hbWUgIT0g J1wwJykgdHRuYW1lKys7ICAgICAgIC8qIGNvbW1zIHR0eSBwYXRoIG5hbWUgKi8KLSAgICB0dG5h bWUgLT0gMzsKLSAgICBzcHJpbnRmKHRlbXAsIi91c3IvYmluL2dldG9uLnNoICVzIix0dG5hbWUp OwotICAgIHJldHVybih6c3lzY21kKHRlbXApKTsKLX0KLSNlbmRpZiAvKiBBVFQ3MzAwICovCi0K LS8qICBUIFQgUyBDIEEgUiBSICAtLSAgU2V0IHR0Y2FyciB2YXJpYWJsZSwgY29udHJvbGxpbmcg Y2FycmllciBoYW5kbGluZy4KLSAqCi0gKiAgMCA9IE9mZjogQWx3YXlzIGlnbm9yZSBjYXJyaWVy LiBFLmcuIHlvdSBjYW4gY29ubmVjdCB3aXRob3V0IGNhcnJpZXIuCi0gKiAgMSA9IE9uOiBIZWVk IGNhcnJpZXIsIGV4Y2VwdCBkdXJpbmcgZGlhbGluZy4gQ2FycmllciBsb3NzIGdpdmVzIGRpc2Nv bm5lY3QuCi0gKiAgMiA9IEF1dG86IEZvciAibW9kZW0gZGlyZWN0IjogVGhlIHNhbWUgYXMgIk9m ZiIuCi0gKiAgICAgICAgICAgIEZvciByZWFsIG1vZGVtIHR5cGVzOiBIZWVkIGNhcnJpZXIgZHVy aW5nIGNvbm5lY3QsIGJ1dCBpZ25vcmUKLSAqICAgICAgICAgICAgICAgIGl0IGFueXRpbWUgZWxz ZS4gIENvbXBhdGlibGUgd2l0aCBwcmUtNUEgQy1LZXJtaXQgdmVyc2lvbnMuCi0gKgotICogQXMg eW91IGNhbiBzZWUsIHRoaXMgc2V0dGluZyBkb2VzIG5vdCBhZmZlY3QgZGlhbGluZywgd2hpY2gg YWx3YXlzIGlnbm9yZXMKLSAqIGNhcnJpZXIgKHVubGVzcyB0aGVyZSBpcyBzb21lIHNwZWNpYWwg ZXhjZXB0aW9uIGZvciBzb21lIG1vZGVtIHR5cGUpLiAgSXQKLSAqIGRvZXMgYWZmZWN0IHR0b3Bl bigpIGlmIGl0IGlzIHNldCBiZWZvcmUgdHRvcGVuKCkgaXMgdXNlZC4gIFRoaXMgc2V0dGluZwot ICogdGFrZXMgZWZmZWN0IG9uIHRoZSBuZXh0IGNhbGwgdG8gdHRvcGVuKCkvdHRwa3QoKS90dHZ0 KCkuICBBbmQgdGhleSBhcmUKLSAqIChvciBzaG91bGQgYmUpIGFsd2F5cyBjYWxsZWQgYmVmb3Jl IGFueSBjb21tdW5pY2F0aW9ucyBpcyB0cmllZCwgd2hpY2gKLSAqIG1lYW5zIHRoYXQsIHByYWN0 aWNhbGx5IHNwZWFraW5nLCB0aGUgZWZmZWN0IGlzIGltbWVkaWF0ZS4KLSAqCi0gKiBPZiBjb3Vy c2UsIG5vdGhpbmcgb2YgdGhpcyBhcHBsaWVzIHRvIHJlbW90ZSBtb2RlICh4bG9jYWwgPSAwKS4K LSAqCi0gKiBTb21lb25lIGhhcyB5ZXQgdG8gdW5jb3ZlciBob3cgdG8gbWFuaXB1bGF0ZSB0aGUg Y2FycmllciBpbiB0aGUgQlNECi0gKiBlbnZpcm9ubWVudCAob3IgYW55IG5vbi10ZXJtaW8gdXNp bmcgZW52aXJvbm1lbnQpLiAgVW50aWwgdGhhdCB0aW1lLCB0aGlzCi0gKiB3aWxsIHNpbXBseSBi ZSBhIG5vLW9wIGZvciBCU0QuCi0gKgotICogTm90ZSB0aGF0IGluIHByZXZpb3VzIHZlcnNpb25z LCB0aGUgY2FycmllciB3YXMgbW9zdCBvZnRlbiBsZWZ0IHVuY2hhbmdlZAotICogaW4gdHRwa3Qo KS90dHZ0KCkgdW5sZXNzIHRoZXkgd2VyZSBjYWxsZWQgd2l0aCBGTE9fRElBTCBvciBGTE9fRElB WC4gIFRoaXMKLSAqIGhhcyBjaGFuZ2VkLiAgTm93IGl0IGlzIGNvbnRyb2xsZWQgYnkgdHRjYXJy IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlc2UKLSAqIG1vZGVzLgotICovCi1pbnQKLXR0c2NhcnIo Y2FycmllcikgaW50IGNhcnJpZXI7IHsKLSAgICB0dGNhcnIgPSBjYXJyaWVyOwotICAgIGRlYnVn KEYxMDEsICJ0dHNjYXJyIiwiIix0dGNhcnIpOwotICAgIHJldHVybih0dGNhcnIpOwotfQotCi0v KiBDIEEgUiBSIEMgVCBMICAtLSAgU2V0IHR0eSBtb2RlcyBmb3IgY2FycmllciB0cmVhdG1lbnQu Ci0gKgotICogU2V0cyB0aGUgYXBwcm9wcmlhdGUgYml0cyBpbiBhIHRlcm1pbyBvciBzZ3R0eWIg c3RydWN0IGZvciBjYXJyaWVyIGNvbnRyb2wKLSAqIChhY3R1YWxseSwgdGhlcmUgYXJlIG5vIGJp dHMgaW4gc2d0dHliIGZvciB0aGF0KSwgb3IgcGVyZm9ybXMgYW55IG90aGVyCi0gKiBvcGVyYXRp b25zIG5lZWRlZCB0byBjb250cm9sIHRoaXMgb24gdGhlIGN1cnJlbnQgc3lzdGVtLiAgVGhlIGZ1 bmN0aW9uIGRvZXMKLSAqIG5vdCBkbyB0aGUgYWN0dWFsIFRDU0VUQSBvciBzdHR5LCBzaW5jZSBv ZnRlbiB3ZSB3YW50IHRvIHNldCBvdGhlciBiaXRzIHRvbwotICogZmlyc3QuICBEb24ndCBjYWxs IHRoaXMgZnVuY3Rpb24gd2hlbiB4bG9jYWwgaXMgMCwgb3IgdGhlIHR0eSBpcyBub3Qgb3BlbmVk LgotICoKLSAqIFdlIGRvbid0IGtub3cgaG93IHRvIGRvIGFueXRoaW5nIGxpa2UgY2FycmllciBj b250cm9sIG9uIG5vbi1BVFRTViBzeXN0ZW1zLAotICogZXhjZXB0LCBhcHBhcmVudGx5LCB1bHRy aXguICBTZWUgYWJvdmUuICBJdCBpcyBhbHNvIGtub3duIHRoYXQgdGhpcyBkb2Vzbid0Ci0gKiBo YXZlIG11Y2ggZWZmZWN0IG9uIGEgWGVuaXggc3lzdGVtLiAgRm9yIFhlbml4LCBvbmUgc2hvdWxk IHN3aXRjaCBiYWNrIGFuZAotICogZm9ydGggYmV0d2VlbiB0aGUgdXBwZXIgYW5kIGxvd2VyIGNh c2UgZGV2aWNlIGZpbGVzLiAgTWF5YmUgbGF0ZXIuCi0gKiBQcmVzZW50bHksIFhlbml4IHdpbGwg c3RpY2sgdG8gdGhlIG1vZGUgaXQgd2FzIG9wZW5lZCB3aXRoLgotICoKLSAqIGNhcnJpZXI6IDAg PSBpZ25vcmUgY2FycmllciwgMSA9IHJlcXVpcmUgY2Fycmllci4KLSAqIFRoZSBjdXJyZW50IHN0 YXRlIGlzIHNhdmVkIGluIGN1cmNhcnIsIGFuZCBjaGVja2VkIHRvIHNhdmUgbGFib3VyLgotICov Ci0jaWZkZWYgU1ZPUlBPU0lYCi1pbnQKLSNpZmRlZiBCU0Q0NE9SUE9TSVgKLWNhcnJjdGwodHRw YXIsIGNhcnJpZXIpCXN0cnVjdCB0ZXJtaW9zICp0dHBhcjsgaW50IGNhcnJpZXI7Ci0jZWxzZSAv KiBBVFRTViAqLwotY2FycmN0bCh0dHBhciwgY2FycmllcikJc3RydWN0IHRlcm1pbyAqdHRwYXI7 IGludCBjYXJyaWVyOwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotLyogY2FycmN0bCAqLyB7 Ci0gICAgZGVidWcoRjEwMSwgImNhcnJjdGwiLCIiLGNhcnJpZXIpOwotICAgIGlmIChjYXJyaWVy KQotICAgICAgdHRwYXItPmNfY2ZsYWcgJj0gfkNMT0NBTDsKLSAgICBlbHNlCi0gICAgICB0dHBh ci0+Y19jZmxhZyB8PSBDTE9DQUw7Ci0gICAgcmV0dXJuKDApOwotfQotI2Vsc2UgLyogQmVya2Vs ZXksIFY3LCBldCBhbC4uLiAqLwotaW50Ci1jYXJyY3RsKHR0cGFyLCBjYXJyaWVyKSBzdHJ1Y3Qg c2d0dHliICp0dHBhcjsgaW50IGNhcnJpZXI7IHsKLSAgICBkZWJ1ZyhGMTAxLCAiY2FycmN0bCIs IiIsY2Fycmllcik7Ci0gICAgaWYgKGNhcnJpZXIgPT0gY3VyY2FycikKLSAgICAgIHJldHVybigw KTsKLSAgICBjdXJjYXJyID0gY2FycmllcjsKLSNpZmRlZiB1bHRyaXgKLSNpZmRlZiBDT01NRU5U Ci0vKgotICBPbGQgY29kZSBmcm9tIHNvbWVib2R5IGF0IERFQyB0aGF0IHRlbmRzIHRvIGdldCBz dHVjaywgdGltZSBvdXQsIGV0Yy4KLSovCi0gICAgaWYgKGNhcnJpZXIpIHsKLQlpb2N0bCh0dHlm ZCwgVElPQ01PREVNLCAmdGVtcCk7Ci0JaW9jdGwodHR5ZmQsIFRJT0NIUENMLCAwKTsKLSAgICB9 IGVsc2UgewotCS8qIChBY2NvcmRpbmcgdG8gdGhlIG1hbnVhbHMsIFRJT0NOQ0FSIHNob3VsZCBi ZSBwcmVmZXJyZWQgKi8KLQkvKiBvdmVyIFRJT0NOTU9ERU0uLi4pICovCi0JaW9jdGwodHR5ZmQs IFRJT0NOTU9ERU0sICZ0ZW1wKTsKLSAgICB9Ci0jZWxzZQotLyoKLSAgTmV3IGNvZGUgZnJvbSBK YW1pZSBXYXRzb24gdGhhdCwgaGUgc2F5cywgZWxpbWluYXRlcyB0aGUgcHJvYmxlbXMuCi0qLwot ICAgIGlmIChjYXJyaWVyKSB7Ci0JaW9jdGwodHR5ZmQsIFRJT0NDQVIpOwotCWlvY3RsKHR0eWZk LCBUSU9DSFBDTCk7Ci0gICAgfSBlbHNlIHsKLQlpb2N0bCh0dHlmZCwgVElPQ05DQVIpOwotICAg IH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogdWx0cml4ICovCi0gICAgcmV0dXJu KDApOwotfQotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotCi0KLS8qICBUIFQgRyBNIEQgTSAgLS0g IEdldCBtb2RlbSBzaWduYWxzICAqLwotLyoKLSBMb29rcyBmb3IgUlMtMjMyIG1vZGVtIHNpZ25h bHMsIGFuZCByZXR1cm5zIHRob3NlIHRoYXQgYXJlIG9uIGluIGFzIGl0cwotIHJldHVybiB2YWx1 ZSwgaW4gYSBiaXQgbWFzayBjb21wb3NlZCBvZiB0aGUgQk1feHh4IHZhbHVlcyBkZWZpbmVkIGlu IGNrY2RlYi5oLgotIFJldHVybnM6Ci0gLTMgTm90IGltcGxlbWVudGVkCi0gLTIgaWYgdGhlIGNv bW11bmljYXRpb24gZGV2aWNlIGRvZXMgbm90IGhhdmUgbW9kZW0gY29udHJvbCAoZS5nLiB0ZWxu ZXQpCi0gLTEgb24gZXJyb3IuCi0gPj0gMCBvbiBzdWNjZXNzLCB3aXRoIGEgYml0IG1hc2sgY29u dGFpbmluZyB0aGUgbW9kZW0gc2lnbmFscyB0aGF0IGFyZSBvbi4KLSovCi0KLS8qCi0gIERlZmlu ZSB0aGUgc3ltYm9sIEtfTURNQ1RMIGlmIHdlIGhhdmUgU3lzIFYgUjMgLyA0LjMgQlNEIHN0eWxl Ci0gIG1vZGVtIGNvbnRyb2wsIG5hbWVseSB0aGUgVElPQ01HRVQgaW9jdGwuCi0qLwotCi0jaWZk ZWYgQlNENDMKLSNkZWZpbmUgS19NRE1DVEwKLSNlbmRpZiAvKiBCU0Q0MyAqLwotCi0jaWZkZWYg U1VOT1M0Ci0jZGVmaW5lIEtfTURNQ1RMCi0jZW5kaWYgLyogU1VOT1M0ICovCi0KLS8qCi0gIFND TyBPcGVuU2VydmVyIFI1LjAuNC4gIFRoZSBUSU9DTUdFVCBkZWZpbml0aW9uIGlzIGhhcmR3aXJl ZCBpbiBiZWNhdXNlIGl0Ci0gIGlzIHNraXBwZWQgaW4gdGVybWlvLmggd2hlbiBfUE9TSVhfU09V UkNFIGlzIGRlZmluZWQuICBCdXQgX1BPU0lYX1NPVVJDRQotICBtdXN0IGJlIGRlZmluZWQgaW4g b3JkZXIgdG8gZ2V0IHRoZSBoaWdoIHNlcmlhbCBzcGVlZHMgdGhhdCBhcmUgbmV3IHRvCi0gIDUu MC40LiAgSG93ZXZlciwgdGhlIHJlZ3VsYXIgU0NPIGRyaXZlcnMgZG8gbm90IGltcGxlbWVudCBU SU9DTUdFVCwgc28gdGhlCi0gIGlvY3RsKCkgcmV0dXJucyAtMSB3aXRoIGVycm5vIDIyIChpbnZh bGlkIGZ1bmN0aW9uKS4gIEJ1dCB0aGlyZC1wYXJ0eQotICBkcml2ZXJzLCBlLmcuIGZvciBEaWdp Ym9hcmQsIGRvIGltcGxlbWVudCBpdCwgYW5kIHNvIGl0IHNob3VsZCB3b3JrIG9uIHBvcnRzCi0g IGRyaXZlbiBieSB0aG9zZSBkcml2ZXJzLgotKi8KLSNpZmRlZiBTQ09fT1NSNTA0Ci0jaWZuZGVm IFRJT0NNR0VUCi0jZGVmaW5lIFRJT0NNR0VUICgoJ3QnPDw4KXwyOSkKLSNlbmRpZiAvKiBUSU9D TUdFVCAqLwotI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8KLQotI2lmZGVmIENLX1NDT1Y1Ci0vKiBC ZWNhdXNlIFBPU0lYIHN0cmljdG5lc3MgaW4gPHN5cy90ZXJtaW8uaD4gd29uJ3QgbGV0IHVzIHNl ZSB0aGVzZS4gKi8KLSNpZm5kZWYgVElPQ01fRFRSCi0jZGVmaW5lIFRJT0NNX0RUUgkweDAwMDIJ CS8qIGRhdGEgdGVybWluYWwgcmVhZHkgKi8KLSNkZWZpbmUgVElPQ01fUlRTCTB4MDAwNAkJLyog cmVxdWVzdCB0byBzZW5kICovCi0jZGVmaW5lIFRJT0NNX0NUUwkweDAwMjAJCS8qIGNsZWFyIHRv IHNlbmQgKi8KLSNkZWZpbmUgVElPQ01fQ0FSCTB4MDA0MAkJLyogY2FycmllciBkZXRlY3QgKi8K LSNkZWZpbmUgVElPQ01fUk5HCTB4MDA4MAkJLyogcmluZyAqLwotI2RlZmluZSBUSU9DTV9EU1IJ MHgwMTAwCQkvKiBkYXRhIHNldCByZWFkeSAqLwotI2RlZmluZSBUSU9DTV9DRAlUSU9DTV9DQVIK LSNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCi0jZW5kaWYgLyogVElPQ01fRFRSICovCi0jZW5k aWYgLyogQ0tfU0NPVjUgKi8KLQotI2lmZGVmIFFOWAotI2RlZmluZSBLX01ETUNUTAotI2Vsc2UK LSNpZmRlZiBUSU9DTUdFVAotI2RlZmluZSBLX01ETUNUTAotI2VuZGlmIC8qIFRJT0NNR0VUICov Ci0jZW5kaWYgLyogUU5YICovCi0vKgotICAiQSBzZXJpYWwgY29tbXVuaWNhdGlvbiBwcm9ncmFt IHRoYXQgY2FuJ3QgcmVhZCBtb2RlbSBzaWduYWxzCi0gICBpcyBsaWtlIGEgY2FyIHdpdGhvdXQg d2luZG93cy4iCi0qLwotaW50Ci10dGdtZG0oKSB7Ci0KLSNpZmRlZiBRTlgKLSNpbmNsdWRlIDxz eXMvcWlvY3RsLmg+Ci0KLSAgICB1bnNpZ25lZCBsb25nIHksIG1kbWJpdHNbMl07Ci0gICAgaW50 IHgsIHogPSAwOwotCi0gICAgaWYgKHhsb2NhbCAmJiB0dHlmZCA8IDApCi0gICAgICByZXR1cm4o LTEpOwotCi0jaWZkZWYgTkVUQ09OTgotICAgIGlmIChuZXRjb25uKSB7CQkJLyogTmV0d29yayBj b25uZWN0aW9uICovCi0jaWZkZWYgVE5fQ09NUE9SVAotICAgICAgICBpZiAoaXN0bmNvbXBvcnQo KSkgewotCSAgICBnb3RzaWdzID0gMTsKLQkgICAgcmV0dXJuKHRuZ21kbSgpKTsKLQl9IGVsc2UK LSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0JICByZXR1cm4oLTIpOwkJCS8qIE5vIG1vZGVtIHNp Z25hbHMgKi8KLSAgICB9Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0jaWZkZWYgTkVUQ01ECi0g ICAgaWYgKHR0cGlwZSkgcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBO RVRQVFkKLSAgICBpZiAodHRwdHkpIHJldHVybigtMik7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0K LSAgICBtZG1iaXRzWzBdID0gMEw7Ci0gICAgbWRtYml0c1sxXSA9IDBMOwotLyoKLSAqIEZyb20g PHN5cy9xaW9jdGwuaD46Ci0gKgotICogU0VSSUFMIGRldmljZXMgICAoYWxsIERldi5zZXIgdmVy c2lvbnMpCi0gKiAwIDogRFRSICAgICAgICAgICA4ID0gRGF0YSBCaXRzIDAgIDE2IC0gcmVzZXJ2 ZWQgICAgIDI0IC0gcmVzZXJ2ZWQKLSAqIDEgOiBSVFMgICAgICAgICAgIDkgPSBEYXRhIEJpdHMg MSAgMTcgLSByZXNlcnZlZCAgICAgMjUgLSByZXNlcnZlZAotICogMiA9IE91dCAxICAgICAgICAx MCA9IFN0b3AgQml0cyAgICAxOCAtIHJlc2VydmVkICAgICAyNiAtIHJlc2VydmVkCi0gKiAzID0g SW50IEVuYWJsZSAgIDExID0gUGFyIEVuYWJsZSAgIDE5IC0gcmVzZXJ2ZWQgICAgIDI3IC0gcmVz ZXJ2ZWQKLSAqIDQgPSBMb29wICAgICAgICAgMTIgPSBQYXIgRXZlbiAgICAgMjAgPSBDVFMgICAg ICAgICAgMjggLSByZXNlcnZlZAotICogNSAtIHJlc2VydmVkICAgICAxMyA9IFBhciBTdGljayAg ICAyMSA9IERTUiAgICAgICAgICAyOSAtIHJlc2VydmVkCi0gKiA2IC0gcmVzZXJ2ZWQgICAgIDE0 IDogQnJlYWsgICAgICAgIDIyID0gUkkgICAgICAgICAgIDMwIC0gcmVzZXJ2ZWQKLSAqIDcgLSBy ZXNlcnZlZCAgICAgMTUgPSAwICAgICAgICAgICAgMjMgPSBDRCAgICAgICAgICAgMzEgLSByZXNl cnZlZAotICovCi0gICAgZXJybm8gPSAwOwotICAgIHggPSBxbnhfaW9jdGwodHR5ZmQsIFFDVExf REVWX0NUTCwgJm1kbWJpdHNbMF0sIDgsICZtZG1iaXRzWzBdLCA0KTsKLSAgICBkZWJ1ZyhGMTAx LCJ0dGdtZG0gcW54X2lvY3RsIiwiIix4KTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gcW54X2lv Y3RsIGVycm5vIiwiIixlcnJubyk7Ci0gICAgaWYgKCF4KSB7Ci0JZGVidWcoRjEwMSwidHRnbWRt IHFueF9pb2N0bCBtZG1iaXRzWzBdIiwiIixtZG1iaXRzWzBdKTsKLQlkZWJ1ZyhGMTAxLCJ0dGdt ZG0gcW54X2lvY3RsIG1kbWJpdHNbMV0iLCIiLG1kbWJpdHNbMV0pOwotCXkgPSBtZG1iaXRzWzBd OwotCWlmICh5ICYgMHgwMDAwMDFMKSB6IHw9IEJNX0RUUjsJLyogQml0ICAwICovCi0JaWYgKHkg JiAweDAwMDAwMkwpIHogfD0gQk1fUlRTOwkvKiBCaXQgIDEgKi8KLQlpZiAoeSAmIDB4MTAwMDAw TCkgeiB8PSBCTV9DVFM7CS8qIEJpdCAyMCAqLwotCWlmICh5ICYgMHgyMDAwMDBMKSB6IHw9IEJN X0RTUjsJLyogQml0IDIxICovCi0JaWYgKHkgJiAweDQwMDAwMEwpIHogfD0gQk1fUk5HOwkvKiBC aXQgMjIgKi8KLQlpZiAoeSAmIDB4ODAwMDAwTCkgeiB8PSBCTV9EQ0Q7CS8qIEJpdCAyMyAqLwot CWRlYnVnKEYxMDEsInR0Z21kbSBxbnggcmVzdWx0IiwiIix6KTsKLQlkZWJ1ZyhGMTEwLCJ0dGdt ZG0gcW54IENEID0gIiwoeiAmIEJNX0RDRCkgPyAiT24iIDogIk9mZiIsIDApOwotCWdvdHNpZ3Mg PSAxOwotCXJldHVybih6KTsKLSAgICB9IGVsc2UgcmV0dXJuKC0xKTsKLSNlbHNlIC8qIFFOWCAq LwotI2lmZGVmIEhQVVgJCQkJLyogSFBVWCBoYXMgaXRzIG93biB3YXkgKi8KLSAgICBpbnQgeCwg ejsKLQotI2lmZGVmIEhQVVgxMAkJCQkvKiBNb2RlbSBmbGFnIHdvcmQgKi8KLSAgICBtZmxhZyB5 OwkJCQkvKiBtZmxhZyB0eXBlZGVmJ2QgaW4gPHN5cy9tb2RlbS5oPiAqLwotI2Vsc2UKLSNpZmRl ZiBIUFVYOQotICAgIG1mbGFnIHk7Ci0jZWxzZQotI2lmZGVmIEhQVVg4Ci0gICAgbWZsYWcgeTsK LSNlbHNlCi0gICAgdW5zaWduZWQgbG9uZyB5OwkJCS8qIE5vdCBzdXJlIGFib3V0IHByZS04LjAu Li4gKi8KLSNlbmRpZiAvKiBIUFVYOCAqLwotI2VuZGlmIC8qIEhQVVg5ICovCi0jZW5kaWYgLyog SFBVWDEwICovCi0KLSAgICBpZiAoeGxvY2FsICYmIHR0eWZkIDwgMCkKLSAgICAgIHJldHVybigt MSk7Ci0KLSNpZmRlZiBORVRDT05OCi0gICAgaWYgKG5ldGNvbm4pIHsJCQkvKiBOZXR3b3JrIGNv bm5lY3Rpb24gKi8KLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgIGlmIChpc3RuY29tcG9ydCgp KSB7Ci0JICAgIGdvdHNpZ3MgPSAxOwotCSAgICByZXR1cm4odG5nbWRtKCkpOwotCX0gZWxzZQot I2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQkgIHJldHVybigtMik7CQkJLyogTm8gbW9kZW0gc2ln bmFscyAqLwotICAgIH0KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNpZmRlZiBORVRDTUQKLSAg ICBpZiAodHRwaXBlKSByZXR1cm4oLTIpOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5F VFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLQot ICAgIGlmICh4bG9jYWwpCQkJCS8qIEdldCBtb2RlbSBzaWduYWxzICovCi0gICAgICB4ID0gaW9j dGwodHR5ZmQsTUNHRVRBLCZ5KTsKLSAgICBlbHNlCi0gICAgICB4ID0gaW9jdGwoMCxNQ0dFVEEs JnkpOwotICAgIGlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0i LCIiLHkpOwotCi0gICAgeiA9IDA7CQkJCS8qIEluaXRpYWxpemUgcmV0dXJuIHZhbHVlICovCi0K LS8qIE5vdyBzZXQgYml0cyBmb3IgZWFjaCBtb2RlbSBzaWduYWwgdGhhdCBpcyByZXBvcnRlZCB0 byBiZSBvbi4gKi8KLQotI2lmZGVmIE1DVFMKLSAgICAvKiBDbGVhciBUbyBTZW5kICovCi0gICAg ZGVidWcoRjEwMSwidHRnbWRtIEhQVVggQ1RTIiwiIix5ICYgTUNUUyk7Ci0gICAgaWYgKHkgJiBN Q1RTKSB6IHw9IEJNX0NUUzsKLSNlbmRpZgotI2lmZGVmIE1EU1IKLSAgICAvKiBEYXRhIFNldCBS ZWFkeSAqLwotICAgIGRlYnVnKEYxMDEsInR0Z21kbSBIUFVYIERTUiIsIiIseSAmIE1EU1IpOwot ICAgIGlmICh5ICYgTURTUikgeiB8PSBCTV9EU1I7Ci0jZW5kaWYKLSNpZmRlZiBNRENECi0gICAg LyogQ2FycmllciAqLwotICAgIGRlYnVnKEYxMDEsInR0Z21kbSBIUFVYIERDRCIsIiIseSAmIE1E Q0QpOwotICAgIGlmICh5ICYgTURDRCkgeiB8PSBCTV9EQ0Q7Ci0jZW5kaWYKLSNpZmRlZiBNUkkK LSAgICAvKiBSaW5nIEluZGljYXRlICovCi0gICAgZGVidWcoRjEwMSwidHRnbWRtIEhQVVggUkki LCIiLHkgJiBNUkkpOwotICAgIGlmICh5ICYgTVJJKSB6IHw9IEJNX1JORzsKLSNlbmRpZgotI2lm ZGVmIE1EVFIKLSAgICAvKiBEYXRhIFRlcm1pbmFsIFJlYWR5ICovCi0gICAgZGVidWcoRjEwMSwi dHRnbWRtIEhQVVggRFRSIiwiIix5ICYgTURUUik7Ci0gICAgaWYgKHkgJiBNRFRSKSB6IHw9IEJN X0RUUjsKLSNlbmRpZgotI2lmZGVmIE1SVFMKLSAgICAvKiBSZXF1ZXN0IFRvIFNlbmQgKi8KLSAg ICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gSFBVWCBSVFMiLCIiLHkgJiBNUlRTKTsKLSAgICBpZiAoeSAm IE1SVFMpIHogfD0gQk1fUlRTOwotI2VuZGlmCi0gICAgZ290c2lncyA9IDE7Ci0gICAgcmV0dXJu KHopOwotCi0jZWxzZSAvKiAhIEhQVVggKi8KLQotI2lmZGVmIEtfTURNQ1RMCi0vKgotICBOb3Rl LCBUSU9DTUdFVCBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBkZWZpbmVkIGluIDxzeXMvaW9jdGwu aD4gb3IgZWxzZXdoZXJlLgotICBJZiBub3QsIHdlIHRyeSBpbmNsdWRpbmcgPHN5cy90dHljb20u aD4gLS0gaWYgdGhpcyBibG93cyB1cCB0aGVuIG1vcmUgaWZkZWZzCi0gIGFyZSBuZWVkZWQuCi0q LwotI2lmbmRlZiBUSU9DTUdFVAotI2luY2x1ZGUgPHN5cy90dHljb20uaD4KLSNlbmRpZiAvKiBU SU9DTUdFVCAqLwotCi0gICAgaW50IHgsIHksIHo7Ci0KLSAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0g S19NRE1DVEwgZGVmaW5lZCIsIiIsMCk7Ci0KLSNpZmRlZiBORVRDT05OCi0gICAgaWYgKG5ldGNv bm4pIHsJCQkvKiBOZXR3b3JrIGNvbm5lY3Rpb24gKi8KLSNpZmRlZiBUTl9DT01QT1JUCi0gICAg ICAgIGlmIChpc3RuY29tcG9ydCgpKSB7Ci0JICAgIGdvdHNpZ3MgPSAxOwotCSAgICByZXR1cm4o dG5nbWRtKCkpOwotCX0gZWxzZQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQkgIHJldHVybigt Mik7CQkJLyogTm8gbW9kZW0gc2lnbmFscyAqLwotICAgIH0KLSNlbmRpZiAvKiBORVRDT05OICov Ci0KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4oLTIpOwotI2VuZGlmIC8q IE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKC0yKTsKLSNl bmRpZiAvKiBORVRQVFkgKi8KLQotICAgIGlmICh4bG9jYWwgJiYgdHR5ZmQgPCAwKQotICAgICAg cmV0dXJuKC0xKTsKLQotICAgIGlmICh4bG9jYWwpCi0gICAgICB4ID0gaW9jdGwodHR5ZmQsVElP Q01HRVQsJnkpOwkvKiBHZXQgbW9kZW0gc2lnbmFscy4gKi8KLSAgICBlbHNlCi0gICAgICB4ID0g aW9jdGwoMCxUSU9DTUdFVCwmeSk7Ci0gICAgZGVidWcoRjEwMSwidHRnbWRtIFRJT0NNR0VUIGlv Y3RsIiwiIix4KTsKLSAgICBpZiAoeCA8IDApIHsKLQlkZWJ1ZyhGMTAxLCJ0dGdtZG0gZXJybm8i LCIiLGVycm5vKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0g Yml0cyIsIiIseSk7Ci0KLSAgICB6ID0gMDsJCQkJLyogSW5pdGlhbGl6ZSByZXR1cm4gdmFsdWUu ICovCi0jaWZkZWYgVElPQ01fQ1RTCi0gICAgLyogQ2xlYXIgVG8gU2VuZCAqLwotICAgIGlmICh5 ICYgVElPQ01fQ1RTKSB6IHw9IEJNX0NUUzsKLSAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gVElPQ01f Q1RTIGRlZmluZWQiLCIiLFRJT0NNX0NUUyk7IAotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJ0dGdt ZG0gVElPQ01fQ1RTIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZgotI2lmZGVmIFRJT0NNX0RT UgotICAgIC8qIERhdGEgU2V0IFJlYWR5ICovCi0gICAgaWYgKHkgJiBUSU9DTV9EU1IpIHogfD0g Qk1fRFNSOwotICAgIGRlYnVnKEYxMDEsInR0Z21kbSBUSU9DTV9EU1IgZGVmaW5lZCIsIiIsVElP Q01fRFNSKTsgCi0jZWxzZQotICAgIGRlYnVnKEYxMDAsInR0Z21kbSBUSU9DTV9EU1Igbm90IGRl ZmluZWQiLCIiLDApOwotI2VuZGlmCi0jaWZkZWYgVElPQ01fQ0FSCi0gICAgLyogQ2FycmllciAq LwotICAgIGlmICh5ICYgVElPQ01fQ0FSKSB6IHw9IEJNX0RDRDsKLSAgICBkZWJ1ZyhGMTAxLCJ0 dGdtZG0gVElPQ01fQ0FSIGRlZmluZWQiLCIiLFRJT0NNX0NBUik7IAotI2Vsc2UKLSAgICBkZWJ1 ZyhGMTAwLCJ0dGdtZG0gVElPQ01fQ0FSIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZgotI2lm ZGVmIFRJT0NNX1JORwotICAgIC8qIFJpbmcgSW5kaWNhdGUgKi8KLSAgICBpZiAoeSAmIFRJT0NN X1JORykgeiB8PSBCTV9STkc7Ci0gICAgZGVidWcoRjEwMSwidHRnbWRtIFRJT0NNX1JORyBkZWZp bmVkIiwiIixUSU9DTV9STkcpOyAKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwidHRnbWRtIFRJT0NN X1JORyBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYKLSNpZmRlZiBUSU9DTV9EVFIKLSAgICAv KiBEYXRhIFRlcm1pbmFsIFJlYWR5ICovCi0gICAgaWYgKHkgJiBUSU9DTV9EVFIpIHogfD0gQk1f RFRSOwotICAgIGRlYnVnKEYxMDEsInR0Z21kbSBUSU9DTV9EVFIgZGVmaW5lZCIsIiIsVElPQ01f RFRSKTsgCi0jZWxzZQotICAgIGRlYnVnKEYxMDAsInR0Z21kbSBUSU9DTV9EVFIgbm90IGRlZmlu ZWQiLCIiLDApOwotI2VuZGlmCi0jaWZkZWYgVElPQ01fUlRTCi0gICAgLyogUmVxdWVzdCBUbyBT ZW5kICovCi0gICAgaWYgKHkgJiBUSU9DTV9SVFMpIHogfD0gQk1fUlRTOwotICAgIGRlYnVnKEYx MDEsInR0Z21kbSBUSU9DTV9SVFMgZGVmaW5lZCIsIiIsVElPQ01fUlRTKTsgCi0jZWxzZQotICAg IGRlYnVnKEYxMDAsInR0Z21kbSBUSU9DTV9SVFMgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlm Ci0gICAgZ290c2lncyA9IDE7Ci0gICAgcmV0dXJuKHopOwotCi0jZWxzZSAvKiAhS19NRE1DVEwg Y2F0Y2gtQWxsICovCi0KLSAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gS19NRE1DVEwgbm90IGRlZmlu ZWQiLCIiLDApOwotI2lmZGVmIFRJT0NNR0VUCi0gICAgZGVidWcoRjEwMCwidHRnbWRtIFRJT0NN R0VUIGRlZmluZWQiLCIiLDApOwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gVElPQ01H RVQgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8qIFRJT0NNR0VUICovCi0jaWZkZWYgX1NW SUQzCi0gICAgZGVidWcoRjEwMCwidHRnbWRtIF9TVklEMyBkZWZpbmVkIiwiIiwwKTsKLSNlbHNl Ci0gICAgZGVidWcoRjEwMCwidHRnbWRtIF9TVklEMyBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5k aWYgLyogX1NWSUQzICovCi0KLSNpZmRlZiBORVRDT05OCi0gICAgaWYgKG5ldGNvbm4pIHsJCQkv KiBOZXR3b3JrIGNvbm5lY3Rpb24gKi8KLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgIGlmIChp c3RuY29tcG9ydCgpKSB7Ci0JICAgIGdvdHNpZ3MgPSAxOwotCSAgICByZXR1cm4odG5nbWRtKCkp OwotCX0gZWxzZQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQkgIHJldHVybigtMik7CQkJLyog Tm8gbW9kZW0gc2lnbmFscyAqLwotICAgIH0KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNpZmRl ZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4oLTIpOwotI2VuZGlmIC8qIE5FVENNRCAq LwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBO RVRQVFkgKi8KLQotICAgIHJldHVybigtMyk7CQkJCS8qIFNvcnJ5LCBJIGRvbid0IGtub3cgaG93 Li4uICovCi0KLSNlbmRpZiAvKiBLX01ETUNUTCAqLwotI2VuZGlmIC8qIEhQVVggKi8KLSNlbmRp ZiAvKiBRTlggKi8KLX0KLQotLyogIFAgUyBVIFMgUCBFIE4gRCAgLS0gIFB1dCB0aGlzIHByb2Nl c3MgaW4gdGhlIGJhY2tncm91bmQuICAqLwotCi0vKgotICBDYWxsIHdpdGggZmxhZyBub256ZXJv IGlmIHN1c3BlbmRpbmcgaXMgYWxsb3dlZCwgemVybyBpZiBub3QgYWxsb3dlZC4KLSAgUmV0dXJu cyAwIG9uIGFwcGFyZW50IHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUgKGZsYWcgd2FzIHplcm8sIG9y Ci0gIGtpbGwoKSByZXR1cm5lZCBhbiBlcnJvciBjb2RlLgotKi8KLWludAotcHN1c3BlbmQoZmxh ZykgaW50IGZsYWc7IHsKLQotI2lmZGVmIFJUVQotICAgIGV4dGVybiBpbnQgcnR1X2J1ZzsKLSNl bmRpZiAvKiBSVFUgKi8KLQotICAgIGlmIChmbGFnID09IDApIHJldHVybigtMSk7Ci0KLSNpZmRl ZiBOT0pDCi0gICAgcmV0dXJuKC0xKTsKLSNlbHNlCi0jaWZkZWYgU0lHVFNUUAotLyoKLSAgVGhl IGJpZyBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgam9iIGNvbnRyb2wgaXMgKnJlYWxseSogc3Vw cG9ydGVkLgotICBUaGVyZSdzIG5vIHdheSBLZXJtaXQgY2FuIGtub3cgZm9yIHN1cmUuICBUaGUg ZmFjdCB0aGF0IFNJR1RTVFAgaXMKLSAgZGVmaW5lZCBkb2VzIG5vdCBndWFyYW50ZWUgdGhlIFVu aXgga2VybmVsIHN1cHBvcnRzIGl0LCBhbmQgdGhlIGZhY3QKLSAgdGhhdCB0aGUgVW5peCBrZXJu ZWwgc3VwcG9ydHMgaXQgZG9lc24ndCBndWFyYW50ZWUgdGhhdCB0aGUgdXNlcidzCi0gIHNoZWxs IChvciBvdGhlciBwcm9jZXNzIHRoYXQgaW52b2tlZCBLZXJtaXQpIHN1cHBvcnRzIGl0LgotKi8K LSNpZmRlZiBSVFUKLSAgICBydHVfYnVnID0gMTsKLSNlbmRpZiAvKiBSVFUgKi8KLSAgICBpZiAo a2lsbCgwLFNJR1NUT1ApIDwgMAotI2lmZGVmIE1JUFMKLS8qIExldCdzIHRyeSB0aGlzIGZvciBN SVBTIHRvby4gKi8KLQkmJiBraWxsKGdldHBpZCgpLFNJR1NUT1ApIDwgMAotI2VuZGlmIC8qIE1J UFMgKi8KLQkpIHsJCQkJLyogSWYgam9iIGNvbnRyb2wsIHN1c3BlbmQgdGhlIGpvYiAqLwotCXBl cnJvcigic3VzcGVuZCIpOwotCWRlYnVnKEYxMDEsInBzdXNwZW5kIGVycm9yIiwiIixlcnJubyk7 Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMCwicHN1c3BlbmQgb2siLCIiLDAp OwotICAgIHJldHVybigwKTsKLSNlbHNlCi0gICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBTSUdU U1RQICovCi0jZW5kaWYgLyogTk9KQyAqLwotfQotCi0vKgotICBzZXR1aWQgcGFja2FnZSwgYnkg S3Jpc3RvZmZlciBFcmlrc3Nvbiwgd2l0aCBjb250cmlidXRpb25zIGZyb20gRGVhbgotICBMb25n IGFuZCBmZGMuCi0qLwotCi0vKiBUaGUgZm9sbG93aW5nIGlzIGZvciBTQ08gd2hlbiBDS19BTlNJ TElCUyBpcyBkZWZpbmVkLi4uICovCi0jaWZkZWYgTV9VTklYCi0jaWZkZWYgQ0tfQU5TSUxJQlMK LSNpZm5kZWYgTk9HRVRJRF9QUk9UT1MKLSNkZWZpbmUgTk9HRVRJRF9QUk9UT1MKLSNlbmRpZiAv KiBOT0dFVElEX1BST1RPUyAqLwotI2VuZGlmIC8qIENLX0FOU0lMSUJTICovCi0jZW5kaWYgLyog TV9VTklYICovCi0KLSNpZm5kZWYgX1BPU0lYX1NPVVJDRQotI2lmbmRlZiBTVU5PUzQKLSNpZm5k ZWYgTkVYVAotI2lmbmRlZiBQUzJBSVgxMAotI2lmbmRlZiBzZXF1ZW50Ci0jaWZuZGVmIEhQVVg5 Ci0jaWZuZGVmIEhQVVgxMAotI2lmbmRlZiBDT0hFUkVOVAotI2lmbmRlZiBOT0dFVElEX1BST1RP UwotX1BST1RPVFlQKCBVSURfVCBnZXR1aWQsICh2b2lkKSApOwotX1BST1RPVFlQKCBVSURfVCBn ZXRldWlkLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVUlEX1QgZ2V0cmV1aWQsICh2b2lkKSApOwot X1BST1RPVFlQKCBVSURfVCBnZXRnaWQsICh2b2lkKSApOwotX1BST1RPVFlQKCBVSURfVCBnZXRl Z2lkLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVUlEX1QgZ2V0cmVnaWQsICh2b2lkKSApOwotI2Vu ZGlmIC8qIE5PR0VUSURfUFJPVE9TICovCi0jZWxzZQotX1BST1RPVFlQKCBVSURfVCBnZXRyZXVp ZCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFVJRF9UIGdldHJlZ2lkLCAodm9pZCkgKTsKLSNlbmRp ZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlmIC8qIEhQVVg5ICov Ci0jZW5kaWYgLyogc2VxdWVudCAqLwotI2VuZGlmIC8qIFBTMkFJWDEwICovCi0jZW5kaWYgLyog TkVYVCAqLwotI2VuZGlmIC8qIFNVTk9TNCAqLwotI2VuZGlmIC8qIF9QT1NJWF9TT1VSQ0UgKi8K LQotLyoKLVN1YmplY3Q6IFNldC11c2VyLWlkCi1UbzogZmRjQHdhdHN1bi5jYy5jb2x1bWJpYS5l ZHUgKEZyYW5rIGRhIENydXopCi1EYXRlOiBTYXQsIDIxIEFwciA5MCA0OjQ4OjI1IE1FUwotRnJv bTogS3Jpc3RvZmZlciBFcmlrc3NvbiA8c2tlQHBrbWFiLnNlPgotCi1UaGlzIGlzIGEgc2V0IG9m IGZ1bmN0aW9ucyB0byBiZSB1c2VkIGluIHByb2dyYW1zIHRoYXQgbWF5IGJlIHJ1biBzZXQtdXNl ci1pZAotYW5kL29yIHNldC1ncm91cC1pZC4gVGhleSBoYW5kbGUgYm90aCB0aGUgY2FzZSB3aGVy ZSB0aGUgcHJvZ3JhbSBpcyBub3QgcnVuCi13aXRoIHN1Y2ggcHJpdmlsZWdlcyAobm90aGluZyBz cGVjaWFsIGhhcHBlbnMgdGhlbiksIGFuZCB0aGUgY2FzZSB3aGVyZSBvbmUKLW9yIGJvdGggb2Yg dGhlc2Ugc2V0LWlkIG1vZGVzIGFyZSB1c2VkLiAgVGhlIHByb2dyYW0gaXMgbWFkZSB0byBydW4g d2l0aCB0aGUKLXVzZXIncyByZWFsIHVzZXIgYW5kIGdyb3VwIGlkcyBtb3N0IG9mIHRoZSB0aW1l LCBleGNlcHQgZm9yIHdoZW4gbW9yZQotcHJpdmlsZWdlcyBhcmUgbmVlZGVkLiAgRG9uJ3Qgc2V0 LXVzZXItaWQgdG8gInJvb3QiLgotCi1UaGlzIHdvcmtzIG9uIFN5c3RlbSBWIGFuZCBQT1NJWC4g IEluIEJTRCwgaXQgZGVwZW5kcyBvbiB0aGUKLSJzYXZlZC1zZXQtdXNlci1pZCIgZmVhdHVyZS4K LSovCi0KLSNkZWZpbmUgVUlEX1JPT1QgMAkJCS8qIFJvb3QgdXNlciBhbmQgZ3JvdXAgaWRzICov Ci0jZGVmaW5lIEdJRF9ST09UIDAKLQotLyoKLSAgVGhlIGZvbGxvd2luZyBjb2RlIGRlZmluZXMg dGhlIHN5bWJvbCBTRVRFVUlEIGZvciBVTklYIHN5c3RlbXMgYmFzZWQKLSAgb24gQlNENC40IChl aXRoZXIgLUVuY3VtYmVyZWQgb3IgLUxpdGUpLiAgVGhpcyBwcm9ncmFtIHdpbGwgdGhlbiB1c2UK LSAgc2V0ZXVpZCgpIGFuZCBzZXRlZ2lkKCkgaW5zdGVhZCBvZiBzZXR1aWQoKSBhbmQgc2V0Z2lk KCksIHdoaWNoIHN0aWxsCi0gIGRvbid0IGFsbG93IGFyYml0cmFyeSBzd2l0Y2hpbmcuICBJdCBh bHNvIGF2b2lkcyBzZXRyZXVpZCgpIGFuZAotICBzZXRyZWdpZCgpLCB3aGljaCBhcmUgaW5jbHVk ZWQgaW4gQlNENC40IGZvciBjb21wYXRpYmlsaXR5IG9ubHksIGFyZQotICBpbnNlY3VyZSwgYW5k IHByaW50IHdhcm5pbmdzIHRvIHN0ZGVyciB1bmRlciBhdCBsZWFzdCBvbmUgc3lzdGVtIChOZXRC U0QKLSAgMS4wKS4gIE5vdGUgdGhhdCBQT1NJWCBzeXN0ZW1zIHNob3VsZCBzdGlsbCB1c2Ugc2V0 dWlkKCkgYW5kIHNldGdpZCgpOwotICB0aGUgc2V0ZXVpZCgpIGFuZCBzZXRlZ2lkKCkgZnVuY3Rp b25zIGFyZSBCU0Q0LjQgZXh0ZW5zaW9ucyB0byB0aGUKLSAgUE9TSVggbW9kZWwuICBNaWtlIExv bmcgPG1pa2UubG9uZ0BhbmFsb2cuY29tPiwgOC85NC4KLSovCi0jaWZkZWYgQlNENDQKLSNkZWZp bmUgU0VURVVJRAotI2VuZGlmIC8qIEJTRDQ0ICovCi0KLS8qCi0gIFRoZSBmb2xsb3dpbmcgY29u c3RydWN0aW9uIGF1dG9tYXRpY2FsbHkgZGVmaW5lcyB0aGUgc3ltYm9sIFNFVFJFVUlEIGZvcgot ICBVTklYIHZlcnNpb25zIGJhc2VkIG9uIEJlcmtlbGV5IFVuaXggNC4yIGFuZCA0LjMuICBJZiB0 aGlzIHN5bWJvbCBpcwotICBkZWZpbmVkLCB0aGVuIHRoaXMgcHJvZ3JhbSB3aWxsIHVzZSBnZXRy ZXVpZCgpIGFuZCBnZXRyZWdpZCgpIGNhbGxzIGluCi0gIHByZWZlcmVuY2UgdG8gZ2V0dWlkKCkg YW5kIGdldGdpZCgpLCB3aGljaCBpbiBCZXJrZWxleS1iYXNlZCBVbml4ZXMgZG8KLSAgbm90IGFs bG93IGFyYml0cmFyeSBzd2l0Y2hpbmcgYmFjayBhbmQgZm9ydGggb2YgcmVhbCAmIGVmZmVjdGl2 ZSB1aWQuCi0gIFRoaXMgY29uc3RydWN0aW9uIGFsc28gYWxsb3dzIC1EU0VUUkVVSUQgdG8gYmUg cHV0IG9uIHRoZSBjYyBjb21tYW5kIGxpbmUKLSAgZm9yIGFueSBzeXN0ZW0gdGhhdCBoYXMgYW5k IHdhbnRzIHRvIHVzZSBzZXRyZVt1Z11pZCgpLiAgSXQgYWxzbyBwcmV2ZW50cwotICBhdXRvbWF0 aWMgZGVmaW5pdGlvbiBvZiBTRVRSRVVJRCBpZiAtRE5PU0VUUkVVIGlzIGluY2x1ZGVkIG9uIHRo ZSBjYwotICBjb21tYW5kIGxpbmUgKG9yIG90aGVyd2lzZSBkZWZpbmVkKS4KLSovCi0jaWZkZWYg RlQxOAkJCQkvKiBOb25lIG9mIHRoaXMgZm9yIEZvcnR1bmUuICovCi0jZGVmaW5lIE5PU0VUUkVV Ci0jZW5kaWYgLyogRlQxOCAqLwotCi0jaWZkZWYgQU5ZQlNECi0jaWZuZGVmIEJTRDI5Ci0jaWZu ZGVmIEJTRDQxCi0jaWZuZGVmIFNFVFJFVUlECi0jaWZuZGVmIE5PU0VUUkVVCi0jaWZuZGVmIFNF VEVVSUQKLSNkZWZpbmUgU0VUUkVVSUQKLSNlbmRpZiAvKiBTRVRFVUlEICovCi0jZW5kaWYgLyog Tk9TRVRSRVUgKi8KLSNlbmRpZiAvKiBTRVRSRVVJRCAqLwotI2VuZGlmIC8qICFCU0Q0MSAqLwot I2VuZGlmIC8qICFCU0QyOSAqLwotI2VuZGlmIC8qIEFOWUJTRCAqLwotCi0vKiBWYXJpYWJsZXMg Zm9yIHVzZXIgYW5kIGdyb3VwIElEcy4gKi8KLQotc3RhdGljIFVJRF9UIHJlYWx1aWQgPSAoVUlE X1QpIC0xLCBwcml2dWlkID0gKFVJRF9UKSAtMTsKLXN0YXRpYyBHSURfVCByZWFsZ2lkID0gKEdJ RF9UKSAtMSwgcHJpdmdpZCA9IChHSURfVCkgLTE7Ci0KLQotLyogUCBSIEkgViBfIEkgTiBJICAt LSAgSW5pdGlhbGl6ZSBwcml2aWxlZ2VzIHBhY2thZ2UgICovCi0KLS8qIENhbGxlZCBhcyBlYXJs eSBhcyBwb3NzaWJsZSBpbiBhIHNldC11aWQgb3Igc2V0LWdpZCBwcm9ncmFtIHRvIHN0b3JlIHRo ZQotICogc2V0LXRvIHVpZCBhbmQvb3IgZ2lkIGFuZCBzdGVwIGRvd24gdG8gdGhlIHVzZXJzIHJl YWwgdWlkIGFuZCBnaWQuIFRoZQotICogc3RvcmVkIGlkJ3MgY2FuIGJlIHRlbXBvcmFyaWx5IHJl c3RvcmVkIChhbGxvd2VkIGluIFN5c3RlbSBWKSBkdXJpbmcKLSAqIG9wZXJhdGlvbnMgdGhhdCBy ZXF1aXJlIHRoZSBwcml2aWxlZ2UuICBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgcHJvZ3JhbQotICog c2hvdWxkIGV4ZWN1dGUgaW4gdW5wcml2aWxpZ2VkIHN0YXRlLCB0byBub3QgaW1wb3NlIGFueSBz ZWN1cml0eSB0aHJlYXQuCi0gKgotICogTm90ZTogRG9uJ3QgZm9yZ2V0IHRoYXQgYWNjZXNzKCkg YWx3YXlzIHVzZXMgdGhlIHJlYWwgaWQ6cyB0byBkZXRlcm1pbmUKLSAqIGZpbGUgYWNjZXNzLCBl dmVuIHdpdGggcHJpdmlsZWdlcyByZXN0b3JlZC4KLSAqCi0gKiBSZXR1cm5zIGFuIGVycm9yIG1h c2ssIHdpdGggZXJyb3IgdmFsdWVzIG9yOmVkIHRvZ2V0aGVyOgotICogICAxIGlmIHNldHVpZCgp IGZhaWxzLAotICogICAyIGlmIHNldGdpZCgpIGZhaWxzLCBhbmQKLSAqICAgNCBpZiB0aGUgcHJv Z3JhbSBpcyBzZXQtdXNlci1pZCB0byAicm9vdCIsIHdoaWNoIGNhbid0IGJlIGhhbmRsZWQuCi0g KgotICogT25seSB0aGUgcmV0dXJuIHZhbHVlIDAgaW5kaWNhdGVzIHJlYWwgc3VjY2Vzcy4gSW4g Y2FzZSBvZiBmYWlsdXJlLAotICogdGhvc2UgcHJpdmlsZWdlcyB0aGF0IGNvdWxkIGJlIHJlZHVj ZWQgaGF2ZSBiZWVuLCBhdCBsZWFzdCwgYnV0IHRoZQotICogcHJvZ3JhbSBzaG91bGQgYmUgYWJv cnRlZCBub25lLXRoZS1sZXNzLgotICoKLSAqIEFsc28gbm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9u cyBkbyBub3QgZXhwZWN0IHRoZSB1aWQgb3IgZ2lkIHRvIGNoYW5nZQotICogd2l0aG91dCB0aGVp ciBrbm93aW5nLiBJdCBtYXkgd29yayBpZiBpdCBpcyBvbmx5IGRvbmUgdGVtcG9yYXJpbHksIGJ1 dAotICogeW91J3JlIG9uIHlvdXIgb3duLgotICovCi1pbnQKLXByaXZfaW5pKCkgewotICAgIGlu dCBlcnIgPSAwOwotCi0jaWZuZGVmIEhBVkVfTE9DS0RFVgotCi0gICAgLyogU2F2ZSByZWFsIElE OnMuICovCi0gICAgcmVhbHVpZCA9IGdldHVpZCgpOwotICAgIHJlYWxnaWQgPSBnZXRnaWQoKTsK LQotICAgIC8qIFNhdmUgY3VycmVudCBlZmZlY3RpdmUgSUQ6cywgdGhvc2Ugc2V0IHRvIGF0IHBy b2dyYW0gZXhlYy4gKi8KLSAgICBwcml2dWlkID0gZ2V0ZXVpZCgpOwotICAgIHByaXZnaWQgPSBn ZXRlZ2lkKCk7Ci0KLSAgICAvKiBJZiBydW5uaW5nIHNldC11aWQsIGdvIGRvd24gdG8gcmVhbCB1 aWQsIG90aGVyd2lzZSByZW1lbWJlciB0aGF0Ci0gICAgICogbm8gcHJpdmlsZWdlZCB1aWQgaXMg YXZhaWxhYmxlLgotICAgICAqCi0gICAgICogRXhjZXB0aW9uczoKLSAgICAgKgotICAgICAqIDEp IElmIHRoZSByZWFsIHVpZCBpcyBhbHJlYWR5ICJyb290IiBhbmQgdGhlIHNldC11aWQgdWlkICh0 aGUKLSAgICAgKiBpbml0aWFsIGVmZmVjdGl2ZSB1aWQpIGlzIG5vdCAicm9vdCIsIHRoZW4gd2Ug d291bGQgaGF2ZSB0cm91YmxlCi0gICAgICogaWYgd2Ugd2VudCAiZG93biIgdG8gInJvb3QiIGhl cmUsIGFuZCB0aGVuIHRlbXBvcmFyaWx5IGJhY2sgdG8gdGhlCi0gICAgICogc2V0LXVpZCB1aWQg KG5vdCAicm9vdCIpIGFuZCB0aGVuIGFnYWluIHRyaWVkIHRvIGJlY29tZSAicm9vdCIuIEkKLSAg ICAgKiB0aGluayB0aGUgInNhdmVkIHNldC11aWQiIGlzIGxvc3Qgd2hlbiBjaGFuZ2luZyB1aWQg ZnJvbSBlZmZlY3RpdmUKLSAgICAgKiB1aWQgInJvb3QiLCB3aGljaCBjaGFuZ2VzIGFsbCB1aWQs IG5vdCBvbmx5IHRoZSBlZmZlY3RpdmUgdWlkLiBCdXQKLSAgICAgKiBpbiB0aGlzIHNpdHVhdGlv biwgd2UgY2FuIHNpbXBseSBnbyB0byAicm9vdCIgYW5kIHN0YXkgdGhlcmUgYWxsCi0gICAgICog dGhlIHRpbWUuIFRoYXQgc2hvdWxkIGdpdmUgc3VmZmljaWVudCBwcml2aWxlZ2UgKHVuZGVyc3Rh dGVtZW50ISksCi0gICAgICogYW5kIGdpdmUgdGhlIHJpZ2h0IHVpZHMgZm9yIHN1YnByb2Nlc3Nl cy4KLSAgICAgKgotICAgICAqIDIpIElmIHRoZSBzZXQtdWlkICh0aGUgaW5pdGlhbCBlZmZlY3Rp dmUgdWlkKSBpcyAicm9vdCIsIGFuZCB3ZQotICAgICAqIGNoYW5nZSB1aWQgdG8gdGhlIHJlYWwg dWlkLCB3ZSBjYW4ndCBjaGFuZ2UgaXQgYmFjayB0byAicm9vdCIgd2hlbgotICAgICAqIHdlIG5l ZWQgdGhlIHByaXZpbGVnZSwgZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBpbiAxKS4gVGh1cywgd2Ug Y2FuJ3QKLSAgICAgKiBoYW5kbGUgcHJvZ3JhbXMgdGhhdCBhcmUgc2V0LXVzZXItaWQgdG8gInJv b3QiIGF0IGFsbC4gVGhlIHByb2dyYW0KLSAgICAgKiBzaG91bGQgYmUgc3RvcHBlZC4gIFVzZSBz b21lIG90aGVyIHVpZC4gICJyb290IiBpcyBwcm9iYWJseSB0b28KLSAgICAgKiBwcml2aWxlZ2Vk IGZvciBzdWNoIHRoaW5ncywgYW55d2F5LiAoVGhlIHVpZCBpcyByZXZlcnRlZCB0byB0aGUKLSAg ICAgKiByZWFsIHVpZCB1bnRpbCB0ZXJtaW5hdGlvbi4pCi0gICAgICoKLSAgICAgKiBUaGVzZSB0 d28gZXhjZXB0aW9ucyBoYXZlIHRoZSBlZmZlY3QgdGhhdCB0aGUgInJvb3QiIHVpZCB3aWxsIG5l dmVyCi0gICAgICogYmUgb25lIG9mIHRoZSB0d28gdWlkcyB0aGF0IGFyZSBiZWluZyBzd2l0Y2hl ZCBiZXR3ZWVuLCB3aGljaCBhbHNvCi0gICAgICogbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byBjaGVj ayBmb3Igc3VjaCBjYXNlcyBpbiB0aGUgc3dpdGNoaW5nCi0gICAgICogZnVuY3Rpb25zLgotICAg ICAqCi0gICAgICogTm90ZSB0aGF0IGV4Y2VwdGlvbiAxKSBpcyBoYW5kbGVkIGJ5IHRoZXNlIHJv dXRpbmVzIChieSBjb25zdGFudGx5Ci0gICAgICogcnVubmluZyB3aXRoIHVpZCAicm9vdCIsIHdo aWxlIGV4Y2VwdGlvbiAyKSBpcyBhIHNlcmlvdXMgZXJyb3IsIGFuZAotICAgICAqIGlzIG5vdCBw cm92aWRlZCBmb3IgYXQgYWxsIGluIHRoZSBzd2l0Y2hpbmcgZnVuY3Rpb25zLgotICAgICAqLwot ICAgIGlmIChyZWFsdWlkID09IHByaXZ1aWQpCi0JcHJpdnVpZCA9IChVSURfVCkgLTE7CQkvKiBO b3QgcnVubmluZyBzZXQtdXNlci1pZC4gKi8KLQotICAgIC8qIElmIHJ1bm5pbmcgc2V0LWdpZCwg Z28gZG93biB0byByZWFsIGdpZCwgb3RoZXJ3aXNlIHJlbWVtYmVyIHRoYXQKLSAgICAgKiBubyBw cml2aWxlZ2VkIGdpZCBpcyBhdmFpbGFibGUuCi0gICAgICoKLSAgICAgKiBUaGVyZSBhcmUgbm8g ZXhjZXB0aW9uIGxpa2UgdGhlcmUgaXMgZm9yIHRoZSB1c2VyIGlkLCBzaW5jZSB0aGVyZQotICAg ICAqIGlzIG5vIGdyb3VwIGlkIHRoYXQgaXMgcHJpdmlsZWdlZCBpbiB0aGUgbWFubmVyIG9mIHVp ZCAicm9vdCIuCi0gICAgICogVGhlcmUgY291bGQgYmUgZXF1aXZhbGVudCBwcm9ibGVtcyBmb3Ig Z3JvdXAgY2hhbmdpbmcgaWYgdGhlCi0gICAgICogcHJvZ3JhbSBzb21ldGltZXMgcmFuIHdpdGgg dWlkICJyb290IiBhbmQgc29tZXRpbWVzIG5vdCwgYnV0Ci0gICAgICogdGhhdCBpcyBhbHJlYWR5 IGF2b2lkZWQgYXMgZXhwbGFpbmVkIGFib3ZlLgotICAgICAqCi0gICAgICogVGh1cyB3ZSBjYW4g ZXhwZWN0IGFsd2F5cyB0byBiZSBhYmxlIHRvIHN3aXRjaCB0byB0aGUgInNhdmVkIHNldC0KLSAg ICAgKiBnaWQiIHdoZW4gd2Ugd2FudCwgYW5kIGJhY2sgdG8gdGhlIHJlYWwgZ2lkIGFnYWluLiBZ b3UgbWF5IGFsc28KLSAgICAgKiBkcmF3IHRoZSBjb25jbHVzaW9uIHRoYXQgc2V0LWdpZCBwcm92 aWRlcyBmb3IgZmV3ZXIgaGFzc2xlcyB0aGFuCi0gICAgICogc2V0LXVpZC4KLSAgICAgKi8KLQot I2lmZGVmIFNVSURERUJVRwotICAgIGZwcmludGYoc3RkZXJyLCJVSURfUk9PVD0lZFxuIixVSURf Uk9PVCk7Ci0gICAgZnByaW50ZihzdGRlcnIsInJlYWx1aWQ9JWRcbiIscmVhbHVpZCk7Ci0gICAg ZnByaW50ZihzdGRlcnIsInByaXZ1aWQ9JWRcbiIscHJpdnVpZCk7Ci0jZW5kaWYgLyogU1VJRERF QlVHICovCi0KLSAgICBpZiAocmVhbGdpZCA9PSBwcml2Z2lkKQkJLyogSWYgbm90IHJ1bm5pbmcg c2V0LXVzZXItaWQsICovCi0gICAgICBwcml2Z2lkID0gKEdJRF9UKSAtMTsJCS8qICByZW1lbWJl ciBpdCB0aGlzIHdheS4gKi8KLQotICAgIGVyciA9IHByaXZfb2ZmKCk7CQkJLyogVHVybiBvZmYg c2V0dWlkIHByaXZpbGVnZS4gKi8KLQotICAgIGlmIChwcml2dWlkID09IFVJRF9ST09UKQkJLyog SWYgc2V0dWlkIHRvIHJvb3QsICovCi0gICAgICBlcnIgfD0gNDsJCQkJLyogcmV0dXJuIHRoaXMg ZXJyb3IuICovCi0KLSAgICBpZiAocmVhbHVpZCA9PSBVSURfUk9PVCkgewkJLyogSWYgcmVhbCBp ZCBpcyByb290LCAqLwotCXByaXZ1aWQgPSAoVUlEX1QpIC0xOwkJLyogc3RheSByb290IGF0IGFs bCB0aW1lcy4gKi8KLSNpZmRlZiBBVFQ3MzAwCi0JLyogSWYgS2VybWl0IGluc3RhbGxlZCBTVUlE IHV1Y3AgYW5kIHVzZXIgaXMgcnVubmluZyBhcyByb290ICovCi0JZXJyICY9IH4xOwkJCS8qIFN5 c3RlbSBWIFIwIGRvZXMgbm90IHNhdmUgVUlEICovCi0jZW5kaWYgLyogQVRUNzMwMCAqLwotICAg IH0KLSNlbmRpZiAvKiBIQVZFX0xPQ0tERVYgKi8KLSAgICByZXR1cm4oZXJyKTsKLX0KLQotCi0v KiBNYWNyb3MgZm9yIGhpZGluZyB0aGUgZGlmZmVyZW5jZXMgaW4gVUlEL0dJRCBzZXR0aW5nIGJl dHdlZW4gdmFyaW91cyBVbml4Ci0gKiBzeXN0ZW1zLiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGFsd2F5 cyBiZSBjYWxsZWQgd2l0aCBib3RoIHRoZSBwcml2aWxlZ2VkIElECi0gKiBhbmQgdGhlIG5vbi1w cml2aWxlZ2VkIElELiBUaGUgb25lIGluIHRoZSBzZWNvbmQgYXJndW1lbnQsIHdpbGwgYmVjb21l IHRoZQotICogZWZmZWN0aXZlIElELiBUaGUgb25lIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxs IGJlIHJldGFpbmVkIGZvciBsYXRlcgotICogcmV0cmlldmFsLgotICovCi0jaWZkZWYgU0VUUkVV SUQKLSNpZmRlZiBTQVZFRFVJRAotLyogT24gQlNEIHN5c3RlbXMgd2l0aCB0aGUgc2F2ZWQtVUlE IGZlYXR1cmUsIHdlIGp1c3QganVnZ2xlIHRoZSBlZmZlY3RpdmUKLSAqIFVJRCBiYWNrIGFuZCBm b3J0aCwgYW5kIGxlYXZlIHRoZSByZWFsIFVJRCBhdCBpdHMgdHJ1ZSB2YWx1ZS4gIFRoZSBrZXJu ZWwKLSAqIGFsbG93cyBzd2l0Y2hpbmcgdG8gYm90aCB0aGUgY3VycmVudCByZWFsIFVJRCwgdGhl IGVmZmVjdGl2ZSBVSUQsIGFuZCB0aGUKLSAqIFVJRCB3aGljaCB0aGUgcHJvZ3JhbSBpcyBzZXQt VUlEIHRvLiAgVGhlIHNhdmVkIHNldC1VSUQgYWx3YXlzIGhvbGRzIHRoZQotICogcHJpdmlsZWdl ZCBVSUQgZm9yIHVzLCBhbmQgdGhlIHJlYWwgVUlEIHdpbGwgYWx3YXlzIGJlIHRoZSBub24tcHJp dmlsZWdlZCwKLSAqIGFuZCB3ZSBjYW4gZnJlZWx5IGNob29zZSBvbmUgb2YgdGhlbSBmb3IgdGhl IGVmZmVjdGl2ZSBVSUQgYXQgYW55IHRpbWUuCi0gKi8KLSNkZWZpbmUgc3dpdGNodWlkKGhpZGRl bixhY3RpdmUpIHNldHJldWlkKCAoVUlEX1QpIC0xLCBhY3RpdmUpCi0jZGVmaW5lIHN3aXRjaGdp ZChoaWRkZW4sYWN0aXZlKSBzZXRyZWdpZCggKEdJRF9UKSAtMSwgYWN0aXZlKQotCi0jZWxzZSAg IC8qIFNFVFJFVUlELCFTQVZFRFVJRCAqLwotCi0vKiBPbiBzeXN0ZW1zIHdpdGggc2V0cmVYaWQo KSBidXQgd2l0aG91dCB0aGUgc2F2ZWQtVUlEIGZlYXR1cmUsIG5vdGFibHkKLSAqIEJTRCA0LjIs IHdlIHN3YXAgdGhlIHJlYWwgYW5kIGVmZmVjdGl2ZSBVSURzIGVhY2ggdGltZS4gIEl0J3MKLSAq IHRoZSBlZmZlY3RpdmUgVUlEIHRoYXQgd2UgYXJlIGludGVyZXN0ZWQgaW4sIGJ1dCB3ZSBoYXZl IHRvIHJldGFpbiB0aGUKLSAqIHVudXNlZCBVSUQgc29tZXdoZXJlIHRvIGVuYWJsZSB1cyB0byBy ZXN0b3JlIGl0IGxhdGVyLCBhbmQgd2UgZG8gdGhpcwotICogaW4gdGhlIHJlYWwgVUlELiAgVGhl IGtlcm5lbCBvbmx5IGFsbG93cyBzd2l0Y2hpbmcgdG8gZWl0aGVyIHRoZSBjdXJyZW50Ci0gKiBy ZWFsIG9yIHRoZSBlZmZlY3RpdmUgVUlELCB1bmxlc3MgeW91J3JlICJyb290Ii4KLSAqLwotI2Rl ZmluZSBzd2l0Y2h1aWQoaGlkZGVuLGFjdGl2ZSkJc2V0cmV1aWQoaGlkZGVuLGFjdGl2ZSkKLSNk ZWZpbmUgc3dpdGNoZ2lkKGhpZGRlbixhY3RpdmUpCXNldHJlZ2lkKGhpZGRlbixhY3RpdmUpCi0j ZW5kaWYKLQotI2Vsc2UgLyogIVNFVFJFVUlELCAhU0FWRURVSUQgKi8KLQotI2lmZGVmIFNFVEVV SUQKLS8qCi0gIEJTRCA0LjQgd29ya3Mgc2ltaWxhcmx5IHRvIFN5c3RlbSBWIGFuZCBQT1NJWCAo c2VlIGJlbG93KSwgYnV0IHVzZXMKLSAgc2V0ZVhpZCgpIGluc3RlYWQgb2Ygc2V0WGlkKCkgdG8g Y2hhbmdlIGVmZmVjdGl2ZSBJRHMuICBJbiBhZGRpdGlvbiwgdGhlCi0gIHNldGVYaWQoKSBmdW5j dGlvbnMgd29yayB0aGUgc2FtZSBmb3IgInJvb3QiIGFzIGZvciBvdGhlciB1c2Vycy4KLSovCi0j ZGVmaW5lIHN3aXRjaHVpZChoaWRkZW4sYWN0aXZlKQlzZXRldWlkKGFjdGl2ZSkKLSNkZWZpbmUg c3dpdGNoZ2lkKGhpZGRlbixhY3RpdmUpCXNldGVnaWQoYWN0aXZlKQotCi0jZWxzZSAvKiAhU0VU RVVJRCAqLwotCi0vKiBPbiBTeXN0ZW0gViBhbmQgUE9TSVgsIHRoZSBvbmx5IHRoaW5nIHdlIGNh biBjaGFuZ2UgaXMgdGhlIGVmZmVjdGl2ZSBVSUQKLSAqICh1bmxlc3MgdGhlIGN1cnJlbnQgZWZm ZWN0aXZlIFVJRCBpcyAicm9vdCIsIGJ1dCBpbml0c3VpZCgpIGF2b2lkcyB0aGF0IGZvcgotICog dXMpLiAgVGhlIGtlcm5lbCBhbGxvd3Mgc3dpdGNoaW5nIHRvIHRoZSBjdXJyZW50IHJlYWwgVUlE IG9yIHRvIHRoZSBzYXZlZAotICogc2V0LVVJRC4gIFRoZXNlIGFyZSBhbHdheXMgc2V0IHRvIHRo ZSBub24tcHJpdmlsZWdlZCBVSUQgYW5kIHRoZSBwcml2aWxlZ2VkCi0gKiBVSUQsIHJlc3BlY3Rp dmVseSwgYW5kIHdlIG9ubHkgY2hhbmdlIHRoZSBlZmZlY3RpdmUgVUlELiAgVGhpcyBicmVha3Mg aWYKLSAqIHRoZSBjdXJyZW50IGVmZmVjdGl2ZSBVSUQgaXMgInJvb3QiLCB0aG91Z2gsIGJlY2F1 c2UgZm9yICJyb290IiBzZXR1aWQvZ2lkCi0gKiBiZWNvbWVzIG1vcmUgcG93ZXJmdWwsIHdoaWNo IGlzIHdoeSBpbml0c3VpZCgpIHRyZWF0cyAicm9vdCIgc3BlY2lhbGx5LgotICogTm90ZTogVGhh dCBzcGVjaWFsIHRyZWF0bWVudCBtYXliZSBjb3VsZCBiZSBpZ25vcmVkIGZvciBCU0Q/ICBOb3Rl OiBGb3IKLSAqIHN5c3RlbXMgdGhhdCBkb24ndCBmaXQgYW55IG9mIHRoZXNlIGZvdXIgY2FzZXMs IHdlIHNpbXBseSBjYW4ndCBzdXBwb3J0Ci0gKiBzZXQtVUlELgotICovCi0jZGVmaW5lIHN3aXRj aHVpZChoaWRkZW4sYWN0aXZlKQlzZXR1aWQoYWN0aXZlKQotI2RlZmluZSBzd2l0Y2hnaWQoaGlk ZGVuLGFjdGl2ZSkJc2V0Z2lkKGFjdGl2ZSkKLQotI2VuZGlmIC8qIFNFVEVVSUQgKi8KLSNlbmRp ZiAvKiBTRVRSRVVJRCAqLwotCi0KLS8qIFAgUiBJIFYgXyBPIE4gIC0tICBUdXJuIG9uIHRoZSBz ZXR1aWQgYW5kL29yIHNldGdpZCAqLwotCi0vKiBHbyB0byB0aGUgcHJpdmlsZWdlZCB1aWQgKGdp ZCkgdGhhdCB0aGUgcHJvZ3JhbSBpcyBzZXQtdXNlci1pZAotICogKHNldC1ncm91cC1pZCkgdG8s IHVubGVzcyB0aGUgcHJvZ3JhbSBpcyBydW5uaW5nIHVucHJpdmlsZWdlZC4KLSAqIElmIHNldHVp ZCgpIGZhaWxzLCByZXR1cm4gdmFsdWUgd2lsbCBiZSAxLiBJZiBnZXR1aWQoKSBmYWlscyBpdAot ICogd2lsbCBiZSAyLiAgUmV0dXJuIGltbWVkaWF0ZWx5IGFmdGVyIGZpcnN0IGZhaWx1cmUsIGFu ZCB0aGUgZnVuY3Rpb24KLSAqIHRyaWVzIHRvIHJlc3RvcmUgYW55IHBhcnRpYWwgd29yayBkb25l LiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCi0gKiBHcm91cCBpZCBpcyBjaGFuZ2VkIGZpcnN0LCBz aW5jZSBpdCBpcyBsZXNzIHNlcmlvdXMgdGhhbiB1c2VyIGlkLgotICovCi1pbnQKLXByaXZfb24o KSB7Ci0jaWZuZGVmIEhBVkVfTE9DS0RFVgotICAgIGlmIChwcml2Z2lkICE9IChHSURfVCkgLTEp Ci0gICAgICBpZiAoc3dpdGNoZ2lkKHJlYWxnaWQscHJpdmdpZCkpCi0gICAgICAgIHJldHVybigy KTsKLQotICAgIGlmIChwcml2dWlkICE9IChVSURfVCkgLTEpCi0gICAgICBpZiAoc3dpdGNodWlk KHJlYWx1aWQscHJpdnVpZCkpIHsKLQkgIGlmIChwcml2Z2lkICE9IChHSURfVCkgLTEpCi0JICAg IHN3aXRjaGdpZChwcml2Z2lkLHJlYWxnaWQpOwotCSAgcmV0dXJuKDEpOwotICAgICAgfQotI2Vu ZGlmIC8qIEhBVkVfTE9DS0RFViAqLwotICAgIHJldHVybigwKTsKLX0KLQotLyogUCBSIEkgViBf IE8gRiBGICAtLSAgVHVybiBvbiB0aGUgcmVhbCB1aWQgYW5kIGdpZCAqLwotCi0vKiBSZXR1cm4g dG8gdGhlIHVucHJpdmlsZWdlZCB1aWQgKGdpZCkgYWZ0ZXIgYW4gdGVtcG9yYXJ5IHZpc2l0IHRv Ci0gKiBwcml2aWxlZ2VkIHN0YXR1cywgdW5sZXNzIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcgd2l0 aG91dCBzZXQtdXNlci1pZAotICogKHNldC1ncm91cC1pZCkuIFJldHVybnMgMSBmb3IgZmFpbHVy ZSBpbiBzZXR1aWQoKSBhbmQgMiBmb3IgZmFpbHVyZQotICogaW4gc2V0Z2lkKCkgb3I6ZWQgdG9n ZXRoZXIuIFRoZSBmdW5jdGlvbnMgdHJpZXMgdG8gcmV0dXJuIGJvdGggdWlkCi0gKiBhbmQgZ2lk IHRvIHVucHJpdmlsZWdlZCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiBlcnJvcnMuIFJldHVybnMgMCBv bgotICogc3VjY2Vzcy4KLSAqLwotaW50Ci1wcml2X29mZigpIHsKLSAgICBpbnQgZXJyID0gMDsK LSNpZm5kZWYgSEFWRV9MT0NLREVWCi0gICAgaWYgKHByaXZ1aWQgIT0gKFVJRF9UKSAtMSkKLSAg ICAgICBpZiAoc3dpdGNodWlkKHByaXZ1aWQscmVhbHVpZCkpCi0JICBlcnIgfD0gMTsKLQotICAg IGlmIChwcml2Z2lkICE9IChHSURfVCkgLTEpCi0gICAgICAgaWYgKHN3aXRjaGdpZChwcml2Z2lk LHJlYWxnaWQpKQotCWVyciB8PSAyOwotI2VuZGlmIC8qIEhBVkVfTE9DS0RFViAqLwotICAgIHJl dHVybihlcnIpOwotfQotCi0vKiBUdXJuIG9mZiBwcml2aWxlZ2UgcGVybWFuZW50bHkuICBObyBn b2luZyBiYWNrLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVmb3JlCi0gKiBhIGZvcmsoKSBvbiBCU0Q0 MyBtYWNoaW5lcyB0aGF0IGRvbid0IHNhdmUgdGhlIHNldFVJRCBvciBzZXRHSUQsIGJlY2F1c2UK LSAqIHdlIHN3YXAgdGhlIHJlYWwgYW5kIGVmZmVjdGl2ZSBpZHMsIGFuZCB3ZSBkb24ndCB3YW50 IHRvIGxldCB0aGUgZm9ya2VkCi0gKiBwcm9jZXNzIHN3YXAgdGhlbSBhZ2FpbiBhbmQgZ2V0IHRo ZSBwcml2aWxlZ2UgYmFjay4gSXQgd2lsbCB3b3JrIG9uIG90aGVyCi0gKiBtYWNoaW5lcyB0b28s IHN1Y2ggdGhhdCB5b3UgY2FuIHJlbHkgb24gaXRzIGVmZmVjdCBhbHdheXMgYmVpbmcgdGhlIHNh bWUsCi0gKiBmb3IgaW5zdGFuY2UsIGV2ZW4gd2hlbiB5b3UncmUgaW4gcHJpdl9vbigpIHN0YXRl IHdoZW4gdGhpcyBpcyBjYWxsZWQuCi0gKiAoV2VsbCwgdGhhdCBwYXJ0IGFib3V0ICJwZXJtYW5l bnQiIGlzIG9uIFN5c3RlbSBWIG9ubHkgdHJ1ZSBpZiB5b3UgZm9sbG93Ci0gKiB0aGlzIHdpdGgg YSBjYWxsIHRvIGV4ZWMoKSwgYnV0IHRoYXQncyB3aGF0IHdlIHdhbnQgaXQgZm9yIGFueXdheS4p Ci0gKiBBZGRlZCBieSBEZWFuIExvbmcgLS0gZGxvbmdAbWlkZ2FyZC51Y3NjLmVkdQotICovCi1p bnQKLXByaXZfY2FuKCkgewotI2lmbmRlZiBIQVZFX0xPQ0tERVYKLSNpZmRlZiBTRVRSRVVJRAot ICAgIGludCBlcnIgPSAwOwotICAgIGlmIChwcml2dWlkICE9IChVSURfVCkgLTEpCi0gICAgICAg aWYgKHNldHJldWlkKHJlYWx1aWQscmVhbHVpZCkpCi0JICBlcnIgfD0gMTsKLQotICAgIGlmIChw cml2Z2lkICE9IChHSURfVCkgLTEpCi0gICAgICAgIGlmIChzZXRyZWdpZChyZWFsZ2lkLHJlYWxn aWQpKQotIAkgIGVyciB8PSAyOwotCi0gICAgcmV0dXJuKGVycik7Ci0KLSNlbHNlCi0jaWZkZWYg U0VURVVJRAotICAgIGludCBlcnIgPSAwOwotICAgIGlmIChwcml2dWlkICE9IChVSURfVCkgLTEp Ci0JaWYgKHNldHVpZChyZWFsdWlkKSkgewotCSAgICBkZWJ1ZyhGMTAxLCJzZXR1aWQgZmFpbGVk IiwiIixlcnJubyk7Ci0JICAgIGVyciB8PSAxOwotCSAgICBkZWJ1ZyhGMTAxLCJydWlkIiwiIixn ZXR1aWQoKSk7Ci0JICAgIGRlYnVnKEYxMDEsImV1aWQiLCIiLGdldGV1aWQoKSk7Ci0JfQotICAg IGRlYnVnKEYxMDEsInNldHVpZCIsIiIscmVhbHVpZCk7Ci0gICAgaWYgKHByaXZnaWQgIT0gKEdJ RF9UKSAtMSkKLSAgICAgICAgaWYgKHNldGdpZChyZWFsZ2lkKSkgewotCSAgICBkZWJ1ZyhGMTAx LCJzZXRnaWQgZmFpbGVkIiwiIixlcnJubyk7Ci0JICAgIGVyciB8PSAyOwotCSAgICBkZWJ1ZyhG MTAxLCJyZ2lkIiwiIixnZXRnaWQoKSk7Ci0JICAgIGRlYnVnKEYxMDEsImVnaWQiLCIiLGdldGVn aWQoKSk7Ci0JfQotICAgIGRlYnVnKEYxMDEsInNldGdpZCIsIiIscmVhbGdpZCk7Ci0gICAgcmV0 dXJuKGVycik7Ci0jZWxzZQotICAgIC8qIEVhc3kgd2F5IG9mIHVzaW5nIHNldHVpZCgpL3NldGdp ZCgpIGluc3RlYWQgb2Ygc2V0cmV1aWQoKS9zZXRyZWdpZCgpLiovCi0gICAgcmV0dXJuKHByaXZf b2ZmKCkpOwotI2VuZGlmIC8qIFNFVEVVSUQgKi8KLSNlbmRpZiAvKiBTRVRSRVVJRCAqLwotI2Vs c2UKLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogSEFWRV9MT0NLREVWICovCi19Ci0KLS8qIFAg UiBJIFYgXyBPIFAgTiAgLS0gIEZvciBvcGVuaW5nIHByb3RlY3RlZCBmaWxlcyBvciBkZXZpY2Vz LiAqLwotCi1pbnQKLXByaXZfb3BuKG5hbWUsIG1vZGVzKSBjaGFyICpuYW1lOyBpbnQgbW9kZXM7 IHsKLSAgICBpbnQgeDsKLSAgICBwcml2X29uKCk7CQkJCS8qIFR1cm4gcHJpdmlsZWdlcyBvbiAq LwotICAgIGRlYnVnKEYxMTEsInByaXZfb3BuIixuYW1lLG1vZGVzKTsKLSAgICBlcnJubyA9IDA7 Ci0gICAgeCA9IG9wZW4obmFtZSwgbW9kZXMpOwkJLyogVHJ5IHRvIG9wZW4gdGhlIGRldmljZSAq LwotICAgIGRlYnVnKEYxMDEsInByaXZfb3BuIHJlc3VsdCIsIiIseCk7Ci0gICAgZGVidWcoRjEw MSwicHJpdl9vcG4gZXJybm8iLCIiLGVycm5vKTsKLSAgICBwcml2X29mZigpOwkJCQkvKiBUdXJu IHByaXZpbGVnZXMgb2ZmICovCi0gICAgcmV0dXJuKHgpOwkJCQkvKiBSZXR1cm4gb3BlbidzIHJl dHVybiBjb2RlICovCi19Ci0KLS8qICBQIFIgSSBWIF8gQyBIIEsgIC0tICBDaGVjayBwcml2aWxl Z2VzLiAgKi8KLQotLyogIFRyeSB0byB0dXJuIHRoZW0gb2ZmLiAgSWYgdHVybmluZyB0aGVtIG9m ZiBkaWQgbm90IHN1Y2NlZWQsIGNhbmNlbCB0aGVtICovCi0KLWludAotcHJpdl9jaGsoKSB7Ci0g ICAgaW50IHgsIHkgPSAwOwotICAgIHggPSBwcml2X29mZigpOwkJCS8qIFR1cm4gb2ZmIHByaXZz LiAqLwotICAgIGlmICh4ICE9IDAgfHwgZ2V0dWlkKCkgPT0gcHJpdnVpZCB8fCBnZXRldWlkKCkg PT0gcHJpdnVpZCkKLSAgICAgIHkgPSBwcml2X2NhbigpOwotICAgIGlmICh4ICE9IDAgfHwgZ2V0 Z2lkKCkgPT0gcHJpdmdpZCB8fCBnZXRlZ2lkKCkgPT0gcHJpdmdpZCkKLSAgICAgIHkgPSB5IHwg cHJpdl9jYW4oKTsKLSAgICByZXR1cm4oeSk7Ci19Ci0KLVVJRF9UCi1yZWFsX3VpZCgpIHsKLSAg ICByZXR1cm4ocmVhbHVpZCk7Ci19Ci0KLVZPSUQKLXR0aW1vZmYoKSB7CQkJCS8qIFR1cm4gb2Zm IGFueSB0aW1lciBpbnRlcnJ1cHRzICovCi0gICAgLyogaW50IHh4OyAqLwotLyoKLSAgQXMgb2Yg NUEoMTgzKSwgd2Ugc2V0IFNJR0FMUk0gdG8gU0lHX0lHTiAodG8gaWdub3JlIGFsYXJtcykgcmF0 aGVyIHRoYW4gdG8KLSAgU0lHX0RGTCAodG8gY2F0Y2ggYWxhcm1zLCBvciBpZiB0aGVyZSBpcyBu byBoYW5kbGVyLCB0byBleGl0KS4gIFRoaXMgaXMgdG8KLSAgY3VyZSAobWFzaywgcmVhbGx5KSBh IGRlZXBlciBwcm9ibGVtIHdpdGggc3RyYXkgYWxhcm1zIHRoYXQgb2NjdXJzIG9uIHNvbWUKLSAg c3lzdGVtcywgcG9zc2libHkgaGF2aW5nIHRvIGRvIHdpdGggc2xlZXAoKSwgdGhhdCBjYXVzZWQg Y29yZSBkdW1wcy4gIEl0Ci0gIHNob3VsZCBiZSBPSyB0byBkbyB0aGlzLCBiZWNhdXNlIG5vIGNv ZGUgaW4gdGhpcyBtb2R1bGUgdXNlcyBuZXN0ZWQgYWxhcm1zLgotICAoQnV0IHdlIHN0aWxsIGhh dmUgdG8gd2F0Y2ggb3V0IGZvciBTQ1JJUFQgYW5kIERJQUwuLi4pCi0qLwotICAgIC8qIHh4ID0g Ki8gYWxhcm0oMCk7Ci0gICAgLyogZGVidWcoRjEwMSwidHRpbW9mZiBhbGFybSIsIiIseHgpOyAq LwotICAgIGlmIChzYXZhbCkgewkJCS8qIFJlc3RvcmUgYW55IHByZXZpb3VzICovCi0Jc2lnbmFs KFNJR0FMUk0sc2F2YWwpOwkJLyogYWxhcm0gaGFuZGxlci4gKi8KLQkvKiBkZWJ1ZyhGMTAxLCJ0 dGltb2ZmIGFsYXJtIHJlc3RvcmluZyBzYXZhbCIsIiIsc2F2YWwpOyAqLwotCXNhdmFsID0gTlVM TDsKLSAgICB9IGVsc2UgewotCXNpZ25hbChTSUdBTFJNLFNJR19JR04pOwkvKiBVc2VkIHRvIGJl IFNJR19ERkwgKi8KLQkvKiBkZWJ1ZyhGMTAwLCJ0dGltb2ZmIGFsYXJtIFNJR19JR04iLCIiLDAp OyAqLwotICAgIH0KLX0KLQotCi1pbnQKLXR0X2lzX3NlY3VyZSgpIHsJICAvKiBUZWxscyB3aGV0 aGVyIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gaXMgc2VjdXJlICovCi0KLSAgICBpZiAodHR5ZmQg PT0gLTEpCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoMAotI2lmZGVmIFNTSEJVSUxUSU4K LQl8fCBJU19TU0goKQotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNpZmRlZiBDS19FTkNSWVBU SU9OCi0JfHwgY2tfdG5fZW5jcnlwdGluZygpICYmIGNrX3RuX2RlY3J5cHRpbmcoKQotI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wKLQl8fCB0bHNfYWN0aXZlX2ZsYWcg fHwgc3NsX2FjdGl2ZV9mbGFnCi0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgUkxPR0NPREUK LSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLQl8fCB0dG5wcm90byA9 PSBOUF9FSzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTgotI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2VuZGlmIC8qIFJMT0dDT0RF ICovCi0JKQotICAgICAgcmV0dXJuKDEpOwotICAgIHJldHVybigwKTsKLX0KLQotI2lmZGVmIENL X1JFRElSCi0gIAotLyogRXh0ZXJuYWwgcHJvdG9jb2wgaGFuZGxlciBwYXJhbWV0ZXJzIGZyb20g Y2t1dXMzLmMgKi8KLWV4dGVybiBpbnQgZXhwX2hhbmRsZXIsIGV4cF9zdGRlcnIsIGV4cF90aW1v OwotCi0jaWZkZWYgU0VMRUNUCi0jaWZkZWYgTkVUUFRZCi0KLS8qIFRoZSByaWdodCBzaXplIGlz IDI0NTc2ICovCi0KLSNpZm5kZWYgUFRZX1BCVUZfU0laRQkJCS8qIFNpemUgb2YgYnVmZmVyIHRv IHJlYWQgZnJvbSBwdHkgKi8KLSNkZWZpbmUgUFRZX1BCVUZfU0laRSAyNDU3NgkJLyogYW5kIHdy aXRlIHRvIG5ldC4gKi8KLSNlbmRpZgkvKiBQVFlfUEJVRl9TSVpFICovCi0KLSNpZm5kZWYgUFRZ X1RCVUZfU0laRQkJCS8qIFNpemUgb2YgYnVmZmVyIHRvIHJlYWQgZnJvbSBuZXQgKi8KLSNkZWZp bmUgUFRZX1RCVUZfU0laRSAyNDU3NgkJLyogYW5kIHdyaXRlIHRvIHB0eS4gKi8KLSNlbmRpZgkv KiBQVFlfVEJVRl9TSVpFICovCi0KLSNpZmRlZiBPX05ERUxBWQkJCQkvKiBXaGV0aGVyIHRvIHVz ZSBub25ibG9ja2luZyAqLwotI2lmbmRlZiBQVFlfTk9fTkRFTEFZCQkJLyogcmVhZHMgb24gdGhl IHBzZXVkb3Rlcm1pbmFsICovCi0jaWZuZGVmIFBUWV9VU0VfTkRFTEFZCi0jZGVmaW5lIFBUWV9V U0VfTkRFTEFZCi0jZW5kaWYJLyogUFRZX1VTRV9OREVMQVkgKi8KLSNlbmRpZgkvKiBQVFlfTk9f TkRFTEFZICovCi0jZW5kaWYJLyogT19OREVMQVkgKi8KLQotI2lmbmRlZiBIQVZFX09QRU5QVFkK LSNpZm5kZWYgVVNFX0NLVVBUWV9DCi0jZGVmaW5lIFVTRV9DS1VQVFlfQwotI2VuZGlmIC8qIFVT RV9DS1VQVFlfQyAqLwotI2VuZGlmIC8qIEhBVkVfT1BFTlBUWSAqLwotCi1WT0lECi1wdHlfbWFr ZV9yYXcoZmQpIGludCBmZDsgewotICAgIGludCB4ID0gLTIzLCBpOwotCi0jaWZkZWYgQlNENDRP UlBPU0lYCQkJLyogUE9TSVggKi8KLSAgICBzdHJ1Y3QgdGVybWlvcyB0cDsKLSNlbHNlCi0jaWZk ZWYgQVRUU1YJCQkJLyogQVQmVCBVTklYICovCi0jaWZkZWYgQ0tfQU5TSUMKLSAgICBzdHJ1Y3Qg dGVybWlvIHRwID0gezB9OwotI2Vsc2UKLSAgICBzdHJ1Y3QgdGVybWlvIHRwOwotI2VuZGlmCS8q IENLX0FOU0lDICovCi0jZWxzZQotICAgIHN0cnVjdCBzZ3R0eWIgdHA7CQkJLyogVHJhZGl0aW9u YWwgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotCi0g ICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IGZkIiwiIixmZCk7Ci0gICAgZXJybm8gPSAwOwot Ci0jaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogUE9TSVggKi8KLSAgICB4ID0gdGNnZXRhdHRyKGZk LCZ0cCk7Ci0gICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IHRjZ2V0YXR0ciIsIiIseCk7Ci0j ZWxzZQotI2lmZGVmIEFUVFNWCQkJCS8qIEFUJlQgVU5JWCAqLwotICAgIHggPSBpb2N0bChmZCxU Q0dFVEEsJnRwKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgVENHRVRBIGlvY3RsIiwi Iix4KTsKLSNlbHNlCi0gICAgeCA9IGd0dHkoZmQsJnRwKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlf bWFrZV9yYXcgdHR0eSIsIiIseCk7Ci0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0 NE9SUE9TSVggKi8KLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgR0VUIGVycm5vIiwiIixl cnJubyk7Ci0KLSNpZmRlZiBVU0VfQ0ZNQUtFUkFXCi0gICAgZXJybm8gPSAwOwotICAgIGNmbWFr ZXJhdygmdHApOwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBjZm1ha2VyYXcgZXJybm8i LCIiLGVycm5vKTsKLSNlbHNlICAvKiBVU0VfQ0ZNQUtFUkFXICovCi0KLSNpZmRlZiBDT01NRU5U Ci0KLS8qIFRoaXMgdmVyeSBzaW1wbGUgdmVyc2lvbiByZWNvbW1lbmRlZCBieSBTZXJnIElha29s ZXYgZG9lc24ndCB3b3JrICovCi0KLSAgICB0cC5jX2xmbGFnICY9IH4oRUNIT3xJQ0FOT058SUVY VEVOfElTSUcpOwotICAgIHRwLmNfaWZsYWcgJj0gfihCUktJTlR8SUNSTkx8SU5QQ0t8SVNUUklQ fElYT04pOwotICAgIHRwLmNfY2ZsYWcgJj0gfihDU0laRXxQQVJFTkIpOwotICAgIHRwLmNfY2Zs YWcgfD0gQ1M4OwotICAgIHRwLmNfb2ZsYWcgJj0gfihPUE9TVCk7Ci0gICAgdHAuY19jY1tWTUlO XSA9IDE7Ci0gICAgdHAuY19jY1tWVElNRV0gPSAwOwotCi0gICAgZGVidWcoRjEwMSwicHR5X21h a2VfcmF3IDEgY19jY1tdIE5DQ1MiLCIiLE5DQ1MpOwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtl X3JhdyAxIGlmbGFncyIsIiIsdHAuY19pZmxhZyk7Ci0gICAgZGVidWcoRjEwMSwicHR5X21ha2Vf cmF3IDEgb2ZsYWdzIiwiIix0cC5jX29mbGFnKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9y YXcgMSBsZmxhZ3MiLCIiLHRwLmNfbGZsYWcpOwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3Jh dyAxIGNmbGFncyIsIiIsdHAuY19jZmxhZyk7Ci0KLSNlbHNlCi0jaWZkZWYgQ09NTUVOVAotLyoK LSAgSW4gdGhpcyB2ZXJzaW9uIHdlIHVuc2V0IGV2ZXJ5dGhpbmcgYW5kIHRoZW4gc2V0IG9ubHkg dGhlCi0gIGJpdHMgd2Uga25vdyB3ZSBuZWVkLgotKi8KLSAgICAvKiBpZmxhZ3MgKi8KLSAgICB0 cC5jX2lmbGFnID0gMEw7Ci0gICAgdHAuY19pZmxhZyB8PSBJR05CUks7Ci0jaWZkZWYgSU1BWEJF TAotICAgIHRwLmNfaWZsYWcgfD0gSU1BWEJFTDsKLSNlbmRpZiAvKiBJTUFYQkVMICovCi0KLSAg ICAvKiBvZmxhZ3MgKi8KLSAgICB0cC5jX29mbGFnID0gMEw7Ci0KLSAgICAvKiBsZmxhZ3MgKi8K LSAgICB0cC5jX2xmbGFnID0gMEw7Ci0jaWZkZWYgTk9LRVJOSU5GTwotICAgIHRwLmNfbGZsYWcg fD0gTk9LRVJOSU5GTzsKLSNlbmRpZgkvKiBOT0tFUk5JTkZPICovCi0KLSAgICAvKiBjZmxhZ3Mg Ki8KLSAgICB0cC5jX2NmbGFnID0gMEw7Ci0gICAgdHAuY19jZmxhZyB8PSBDUzh8Q1JFQUQ7Ci0K LSAgICBmb3IgKGkgPSAwOyBpIDwgTkNDUzsgaSsrKSB7CS8qIE5vIHNwZWNpYWwgY2hhcmFjdGVy cyAqLwotCXRwLmNfY2NbaV0gPSAwOwotICAgIH0KLSNpZmRlZiBWTUlOCi0gICAgdHAuY19jY1tW TUlOXSA9IDE7CQkJLyogQnV0IGFsd2F5cyB3YWl0IGZvciBpbnB1dCAqLwotI2VuZGlmCS8qIFZN SU4gKi8KLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBjX2NjW10gTkNDUyIsIiIsTkND Uyk7Ci0gICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDIgaWZsYWdzIiwiIix0cC5jX2lmbGFn KTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBvZmxhZ3MiLCIiLHRwLmNfb2ZsYWcp OwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAyIGxmbGFncyIsIiIsdHAuY19sZmxhZyk7 Ci0gICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDIgY2ZsYWdzIiwiIix0cC5jX2NmbGFnKTsK LQotI2Vsc2UgIC8qIENPTU1FTlQgKi8KLS8qCi0gIEluIHRoaXMgdmVyc2lvbiB3ZSBzZXQgb3Ig dW5zZXQgZXZlcnkgc2luZ2xlIGZsYWcgZXhwbGljaXRseS4gIEl0IHdvcmtzIGEKLSAgYml0IGJl dHRlciB0aGFuIHRoZSBzaW1wbGUgdmVyc2lvbiBqdXN0IGFib3ZlLCBidXQgaXQncyBzdGlsbCBm YXIgZnJvbQotICBhZGVxdWF0ZS4KLSovCi0gICAgLyogaWZsYWdzICovCi0gICAgdHAuY19pZmxh ZyAmPSB+KFBBUk1SS3xJU1RSSVB8QlJLSU5UfElOTENSfElHTkNSfElDUk5MKTsKLSAgICB0cC5j X2lmbGFnICY9IH4oSU5QQ0t8SUdOUEFSfElYQU5ZfElYT058SVhPRkYpOwotICAgIHRwLmNfaWZs YWcgfD0gSUdOQlJLOwotI2lmZGVmIElNQVhCRUwKLSNpZmRlZiBDT01NRU5UCi0gICAgdHAuY19p ZmxhZyB8PSBJTUFYQkVMOwotI2Vsc2UKLSAgICB0cC5jX2lmbGFnICY9IH5JTUFYQkVMOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBJTUFYQkVMICovCi0jaWZkZWYgSVVDTEMKLSAg ICB0cC5jX2lmbGFnICY9IH5JVUNMQzsKLSNlbmRpZiAvKiBJVUNMQyAqLwotCi0gICAgLyogb2Zs YWdzICovCi0jaWZkZWYgQlNETFkKLSAgICB0cC5jX29mbGFnICY9IH5CU0RMWTsKLSNlbmRpZiAv KiBCU0RMWSAqLwotI2lmZGVmIENSRExZCi0gICAgdHAuY19vZmxhZyAmPSB+Q1JETFk7Ci0jZW5k aWYgLyogQ1JETFkgKi8KLSNpZmRlZiBGRkRMWQotICAgIHRwLmNfb2ZsYWcgJj0gfkZGRExZOwot I2VuZGlmIC8qIEZGRExZICovCi0jaWZkZWYgTkxETFkKLSAgICB0cC5jX29mbGFnICY9IH5OTERM WTsKLSNlbmRpZiAvKiBOTERMWSAqLwotI2lmZGVmIFRBQkRMWQotICAgIHRwLmNfb2ZsYWcgJj0g flRBQkRMWTsKLSNlbmRpZiAvKiBUQUJETFkgKi8KLSNpZmRlZiBWVERMWQotICAgIHRwLmNfb2Zs YWcgJj0gflZURExZOwotI2VuZGlmIC8qIFZURExZICovCi0jaWZkZWYgT0ZERUwKLSAgICB0cC5j X29mbGFnICY9IH5PRkRFTDsKLSNlbmRpZiAvKiBPRkRFTCAqLwotI2lmZGVmIE9GSUxMCi0gICAg dHAuY19vZmxhZyAmPSB+T0ZJTEw7Ci0jZW5kaWYgLyogT0ZJTEwgKi8KLSNpZmRlZiBPTENVQwot ICAgIHRwLmNfb2ZsYWcgJj0gfk9MQ1VDOwotI2VuZGlmIC8qIE9MQ1VDICovCi0jaWZkZWYgQ01T UEFSCi0gICAgdHAuY19vZmxhZyAmPSB+Q01TUEFSOwotI2VuZGlmIC8qIENNU1BBUiAqLwotICAg IHRwLmNfb2ZsYWcgJj0gfk9QT1NUOwotI2lmZGVmIE9YVEFCUwotICAgIHRwLmNfb2ZsYWcgJj0g fk9YVEFCUzsKLSNlbmRpZiAvKiBPWFRBQlMgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgT05P Q1IKLSAgICB0cC5jX29mbGFnICY9IH5PTk9DUjsJCS8qIE1heWJlIHNob3VsZCBiZSB8PT8gKi8K LSAgICB0cC5jX29mbGFnIHw9IE9OT0NSOwkJLyogbWFrZXMgbm8gZGlmZmVyZW5jZSBlaXRoZXIg d2F5ICovCi0jZW5kaWYgLyogT05PQ1IgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYg T05PRU9UCi0gICAgdHAuY19vZmxhZyAmPSB+T05PRU9UOwotI2VuZGlmIC8qIE9OT0VPVCAqLwot I2lmZGVmIE9OTFJFVAotICAgIHRwLmNfb2ZsYWcgJj0gfk9OTFJFVDsKLSNlbmRpZiAvKiBPTkxS RVQgKi8KLSNpZmRlZiBPTkxDUgotICAgIHRwLmNfb2ZsYWcgJj0gfk9OTENSOwotI2VuZGlmIC8q IE9OTENSICovCi0jaWZkZWYgT0NSTkwKLSAgICB0cC5jX29mbGFnICY9IH5PQ1JOTDsKLSNlbmRp ZiAvKiBPQ1JOTCAqLwotCi0gICAgLyogbGZsYWdzICovCi0gICAgdHAuY19sZmxhZyAmPSB+RUNI TzsKLSNpZmRlZiBFQ0hPRQotICAgIHRwLmNfbGZsYWcgJj0gfkVDSE9FOwotI2VuZGlmIC8qIEVD SE9FICovCi0jaWZkZWYgRUNIT05MCi0gICAgdHAuY19sZmxhZyAmPSB+RUNIT05MOwotI2VuZGlm IC8qIEVDSE9OTCAqLwotI2lmZGVmIEVDSE9QUlQKLSAgICB0cC5jX2xmbGFnICY9IH5FQ0hPUFJU OwotI2VuZGlmIC8qIEVDSE9QUlQgKi8KLSNpZmRlZiBFQ0hPS0UKLSAgICB0cC5jX2xmbGFnICY9 IH5FQ0hPS0U7Ci0jZW5kaWYgLyogRUNIT0tFICovCi0jaWZkZWYgRUNIT0NUTAotICAgIHRwLmNf bGZsYWcgJj0gfkVDSE9DVEw7Ci0jZW5kaWYgLyogRUNIT0NUTCAqLwotI2lmZGVmIFhDQVNFCi0g ICAgdHAuY19sZmxhZyAmPSB+WENBU0U7Ci0jZW5kaWYgLyogWENBU0UgKi8KLSNpZmRlZiBBTFRX RVJBU0UKLSAgICB0cC5jX2xmbGFnICY9IH5BTFRXRVJBU0U7Ci0jZW5kaWYgLyogQUxUV0VSQVNF ICovCi0jaWZkZWYgRVhUUFJPQwotICAgIHRwLmNfbGZsYWcgJj0gfihJQ0FOT058SVNJR3xJRVhU RU58VE9TVE9QfEZMVVNIT3xQRU5ESU58RVhUUFJPQyk7Ci0jZWxzZQotICAgIHRwLmNfbGZsYWcg Jj0gfihJQ0FOT058SVNJR3xJRVhURU58VE9TVE9QfEZMVVNIT3xQRU5ESU4pOwotI2VuZGlmCS8q IEVYVFBST0MgKi8KLSNpZmRlZiBOT0tFUk5JTkZPCi0gICAgdHAuY19sZmxhZyB8PSBOT0tFUk5J TkZPOwotI2VuZGlmCS8qIE5PS0VSTklORk8gKi8KLSNpZm5kZWYgQ09NTUVOVAotICAgIHRwLmNf bGZsYWcgJj0gfk5PRkxTSDsJCS8qIFRSWSBJVCBUSEUgT1RIRVIgV0FZPyAqLwotI2Vsc2UKLSAg ICB0cC5jX2xmbGFnIHw9IE5PRkxTSDsJCS8qIE5vLCB0aGlzIHdheSBpcyB3b3JzZSAqLwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIC8qIGNmbGFncyAqLwotICAgIHRwLmNfY2ZsYWcgJj0g fihDU0laRXxQQVJFTkJ8UEFST0REKTsKLSAgICB0cC5jX2NmbGFnIHw9IENTOHxDUkVBRDsKLQot I2lmZGVmIE1ETUJVRgotICAgIHRwLmNfY2ZsYWcgJj0gfihNRE1CVUYpOwotI2Vsc2UKLSNpZmRl ZiBDQ0FSX09GTE9XCi0gICAgdHAuY19jZmxhZyAmPSB+KENDQVJfT0ZMT1cpOwkvKiB0d28gbmFt ZXMgZm9yIHRoZSBzYW1lIHRoaW5nICovCi0jZW5kaWYgLyogQ0NBUl9PRkxPVyAqLwotI2VuZGlm IC8qIE1ETUJVRiAqLwotCi0jaWZkZWYgQ0NUU19PRkxPVwotICAgIHRwLmNfY2ZsYWcgJj0gfihD Q1RTX09GTE9XKTsKLSNlbmRpZiAvKiBDQ1RTX09GTE9XICovCi0jaWZkZWYgQ0RTUl9PRkxPVwot ICAgIHRwLmNfY2ZsYWcgJj0gfihDRFNSX09GTE9XKTsKLSNlbmRpZiAvKiBDRFNSX09GTE9XICov Ci0jaWZkZWYgQ0RUUl9JRkxPVwotICAgIHRwLmNfY2ZsYWcgJj0gfihDRFRSX0lGTE9XKTsKLSNl bmRpZiAvKiBDRFRSX0lGTE9XICovCi0jaWZkZWYgQ1JUU19JRkxPVwotICAgIHRwLmNfY2ZsYWcg Jj0gfihDUlRTX0lGTE9XKTsKLSNlbmRpZiAvKiBDUlRTX0lGTE9XICovCi0jaWZkZWYgQ1JUU1hP RkYKLSAgICB0cC5jX2NmbGFnICY9IH4oQ1JUU1hPRkYpOwotI2VuZGlmIC8qIENSVFNYT0ZGICov Ci0jaWZkZWYgQ1JUU0NUUwotICAgIHRwLmNfY2ZsYWcgJj0gfihDUlRTQ1RTKTsKLSNlbmRpZiAv KiBDUlRTQ1RTICovCi0jaWZkZWYgQ0xPQ0FMCi0gICAgdHAuY19jZmxhZyAmPSB+KENMT0NBTCk7 Ci0jZW5kaWYgLyogQ0xPQ0FMICovCi0jaWZkZWYgQ1NUT1BCCi0gICAgdHAuY19jZmxhZyAmPSB+ KENTVE9QQik7Ci0jZW5kaWYgLyogQ1NUT1BCICovCi0jaWZkZWYgSFVQQ0wKLSAgICB0cC5jX2Nm bGFnICY9IH4oSFVQQ0wpOwotI2VuZGlmIC8qIEhVUENMICovCi0KLSAgICBmb3IgKGkgPSAwOyBp IDwgTkNDUzsgaSsrKSB7CS8qIE5vIHNwZWNpYWwgY2hhcmFjdGVycyAqLwotCXRwLmNfY2NbaV0g PSAwOwotICAgIH0KLSNpZmRlZiBWTUlOCi0gICAgdHAuY19jY1tWTUlOXSA9IDE7CQkJLyogQnV0 IGFsd2F5cyB3YWl0IGZvciBpbnB1dCAqLwotI2VuZGlmCS8qIFZNSU4gKi8KLSAgICBkZWJ1ZyhG MTAxLCJwdHlfbWFrZV9yYXcgMyBjX2NjW10gTkNDUyIsIiIsTkNDUyk7Ci0gICAgZGVidWcoRjEw MSwicHR5X21ha2VfcmF3IDMgaWZsYWdzIiwiIix0cC5jX2lmbGFnKTsKLSAgICBkZWJ1ZyhGMTAx LCJwdHlfbWFrZV9yYXcgMyBvZmxhZ3MiLCIiLHRwLmNfb2ZsYWcpOwotICAgIGRlYnVnKEYxMDEs InB0eV9tYWtlX3JhdyAzIGxmbGFncyIsIiIsdHAuY19sZmxhZyk7Ci0gICAgZGVidWcoRjEwMSwi cHR5X21ha2VfcmF3IDMgY2ZsYWdzIiwiIix0cC5jX2NmbGFnKTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgZXJybm8gPSAwOwotI2lmZGVmIEJTRDQ0 T1JQT1NJWAkJCS8qIFBPU0lYICovCi0gICAgeCA9IHRjc2V0YXR0cihmZCxUQ1NBTk9XLCZ0cCk7 Ci0gICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IHRjc2V0YXR0ciIsIiIseCk7Ci0jZWxzZQot I2lmZGVmIEFUVFNWCQkJCS8qIEFUJlQgVU5JWCAqLwotICAgIHggPSBpb2N0bChmZCxUQ1NFVEEs JnRwKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgaW9jdGwiLCIiLHgpOwotI2Vsc2UK LSAgICB4ID0gc3R0eShmZCwmdHApOwkJCS8qIFRyYWRpdGlvbmFsICovCi0gICAgZGVidWcoRjEw MSwicHR5X21ha2VfcmF3IHN0dHkiLCIiLHgpOwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYg LyogQlNENDRPUlBPU0lYICovCi0gICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IGVycm5vIiwi IixlcnJubyk7Ci0KLSNlbmRpZiAvKiBfX05ldEJTRF9fICovCi19Ci0KLXN0YXRpYyBpbnQKLXB0 eV9jaGsoZmQpIGludCBmZDsgewotICAgIGludCB4LCBuID0gMDsKLSAgICBlcnJubyA9IDA7Ci0j aWZkZWYgRklPTlJFQUQKLSAgICB4ID0gaW9jdGwoZmQsIEZJT05SRUFELCAmbik7CS8qIEJTRCBh bmQgbW9zdCBvdGhlcnMgKi8KLSAgICBja21ha21zZyhtc2didWYsNTAwLAotCSAgICAgInB0eV9j aGsgaW9jdGwgRklPTlJFQUQgZXJybm89IiwKLQkgICAgIGNraXRvYShlcnJubyksCi0JICAgICAi IGNvdW50PSIsCi0JICAgICBja2l0b2EobikpOwotICAgIGRlYnVnKEYxMDAsbXNnYnVmLCIiLDAp OwotI2Vsc2UKLSNpZmRlZiBSRENISwotICAgIG4gPSByZGNoayhmZCk7Ci0gICAgZGVidWcoRjEw MSwicHR5X2NoayByZGNoayIsIiIsbik7Ci0jZWxzZQotICAgIG4gPSAxOwotI2VuZGlmCS8qIFJE Q0hLICovCi0jZW5kaWYJLyogRklPTlJFQUQgKi8KLSAgICByZXR1cm4oKG4gPiAtMSkgPyBuIDog MCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXB0eV9nZXRfc3RhdHVzKGZkLHBpZCkgaW50IGZkOyBQSURf VCBwaWQ7IHsKLSAgICBpbnQgeCwgc3RhdHVzID0gLTE7Ci0gICAgUElEX1QgdzsKLQotICAgIGRl YnVnKEYxMDEsInB0eV9nZXRfc3RhdHVzIGZkIiwiIixmZCk7Ci0gICAgZGVidWcoRjEwMSwicHR5 X2dldF9zdGF0dXMgcGlkIiwiIixwaWQpOwotCi0gICAgaWYgKHBleGl0c3RhdCA+IC0xKQotICAg ICAgcmV0dXJuKHBleGl0c3RhdCk7Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogTm90IG9ubHkg dW5uZWNlc3NhcnkgYnV0IGhhcm1mdWwgKi8KLSAgICBlcnJubyA9IDA7Ci0gICAgeCA9IGtpbGwo cHR5X2ZvcmtfcGlkLDApOwotICAgIGRlYnVnKEYxMDEsInB0eV9nZXRfc3RhdHVzIGtpbGwgdmFs dWUiLCIiLHgpOwotICAgIGRlYnVnKEYxMDEsInB0eV9nZXRfc3RhdHVzIGtpbGwgZXJybm8iLCIi LGVycm5vKTsKLSAgICBpZiAoeCA+IC0xICYmIGVycm5vICE9IEVTUkNIKQotICAgICAgcmV0dXJu KC0xKTsJCQkvKiBGb3JrIHN0aWxsIHRoZXJlICovCi0gICAgLyogRm9yayBzZWVtcyB0byBiZSBn b25lICovCi0jZW5kaWYJLyogQ09NTUVOVCAqLwotCi0gICAgZXJybm8gPSAwOwotICAgIHggPSB3 YWl0cGlkKHB0eV9mb3JrX3BpZCwmc3RhdHVzLFdOT0hBTkcpOwotICAgIGRlYnVnKEYxMTEsInB0 eV9nZXRfc3RhdHVzIHdhaXRwaWQiLGNraXRvYShlcnJubykseCk7Ci0gICAgaWYgKHggPD0gMCAm JiBlcnJubyA9PSAwKSB7Ci0JZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMgd2FpdHBpZCByZXR1 cm4iLCIiLC0xKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAoeCA+IDApIHsKLQlpZiAo eCAhPSBwdHlfZm9ya19waWQpCi0JICBkZWJ1ZyhGMTAxLAotCQkicHR5X2dldF9zdGF0dXMgd2Fp dHBpZCBwaWQgZG9lc24ndCBtYXRjaCIsIiIscHR5X2ZvcmtfcGlkKTsgCi0JZGVidWcoRjEwMSwi cHR5X2dldF9zdGF0dXMgd2FpdHBpZCBzdGF0dXMiLCIiLHN0YXR1cyk7Ci0JZGVidWcoRjEwMSwi cHR5X2dldF9zdGF0dXMgd2FpdHBpZCBlcnJubyIsIiIsZXJybm8pOwotCWlmIChXSUZFWElURUQo c3RhdHVzKSkgewotCSAgICBkZWJ1ZyhGMTAwLCJwdHlfZ2V0X3N0YXR1cyBXSUZFWElURUQiLCIi LDApOwotCSAgICBzdGF0dXMgPSBXRVhJVFNUQVRVUyhzdGF0dXMpOwotCSAgICBkZWJ1ZyhGMTAx LCJwdHlfZ2V0X3N0YXR1cyBmb3JrIGV4aXQgc3RhdHVzIiwiIixzdGF0dXMpOwotI2lmZGVmIENP TU1FTlQKLQkgICAgZW5kX3B0eSgpOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQkgICAgY2xvc2Uo ZmQpOwotCSAgICBwZXhpdHN0YXQgPSBzdGF0dXM7Ci0JfSBlbHNlIHsKLQkgICAgZGVidWcoRjEw MCwicHR5X2dldF9zdGF0dXMgd2FpdHBpZCB1bmV4cGVjdGVkIHN0YXR1cyIsIiIsMCk7Ci0JfQot ICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyByZXR1cm4gc3RhdHVzIiwiIixz dGF0dXMpOwotICAgIHJldHVybihzdGF0dXMpOwotfQotCi0vKiB0IHQgcCB0IHkgYyBtIGQgIC0t ICBSdW4gY29tbWFuZCBvbiBwdHkgYW5kIGZvcndhcmQgdG8gbmV0ICovCi0KLS8qCi0gIE5lZWRl ZCBmb3IgcnVubmluZyBleHRlcm5hbCBwcm90b2NvbHMgb24gc2VjdXJlIGNvbm5lY3Rpb25zLgot ICBGb3IgZXhhbXBsZSwgaWYgQy1LZXJtaXQgaGFzIG1hZGUgYW4gU1NML1RMUyBvciBLZXJiZXJv cyBUZWxuZXQKLSAgY29ubmVjdGlvbiwgYW5kIHRoZW4gbmVlZHMgdG8gdHJhbnNmZXIgYSBmaWxl IHdpdGggWm1vZGVtLCB3aGljaCBpcwotICBhbiBleHRlcm5hbCBwcm9ncmFtLCB0aGlzIHJvdXRp bmUgcmVhZHMgWm1vZGVtJ3Mgb3V0cHV0LCBlbmNyeXB0cyBpdCwKLSAgYW5kIHRoZW4gZm9yd2Fy ZHMgaXQgb3V0IHRoZSBjb25uZWN0aW9uLCBhbmQgcmVhZHMgdGhlIGVuY3J5cHRlZCBkYXRhCi0g IHN0cmVhbSBjb21pbmcgaW4gZnJvbSB0aGUgY29ubmVjdGlvbiwgZGVjcnlwdHMgaXQsIGFuZCBm b3J3YXJkcyBpdCB0bwotICBabW9kZW0uCi0KLSAgV29ya3MgbGlrZSBhIFRDUC9JUCBwb3J0IGZv cndhcmRlciBleGNlcHQgb25lIGVuZCBpcyBhIHB0eSByYXRoZXIKLSAgdGhhbiBhIHNvY2tldCwg d2hpY2ggaW50cm9kdWNlcyBzb21lIGNvbXBsaWNhdGlvbnM6Ci0KLSAgIC4gT24gbW9zdCBwbGF0 Zm9ybXMsIHNlbGVjdCgpIGFsd2F5cyBpbmRpY2F0ZXMgdGhlIG91dHB1dCBzaWRlIG9mCi0gICAg IHRoZSBwdHkgaGFzIGNoYXJhY3RlcnMgd2FpdGluZyB0byBiZSByZWFkLCBldmVuIHdoZW4gaXQg ZG9lc24ndCwKLSAgICAgZXZlbiB3aGVuIHRoZSBwdHkgcHJvY2VzcyBoYXMgYWxyZWFkeSBleGl0 ZWQuCi0KLSAgIC4gTm9uYmxvY2tpbmcgcmVhZHMgbXVzdCBiZSB1c2VkIG9uIHRoZSBwdHksIGJl Y2F1c2UgdGhlcmUgaXMgbm8KLSAgICAgd2F5IG9uIGNlcnRhaW4gcGxhdGZvcm1zIChlLmcuIE5l dEJTRCkgdG8gZmluZCBvdXQgaG93IG1hbnkgY2hhcmFjdGVycwotICAgICBhcmUgYXZhaWxhYmxl IHRvIGJlIHJlYWQgKHRoZSBGSU9OUkVBRCBpb2N0bCBhbHdheXMgc2F5cyAwKS4gIFRoZSBjb2Rl Ci0gICAgIGFsc28gYWxsb3dzIGZvciBibG9ja2luZyByZWFkcyAoaWYgT19OREVMQVkgYW5kIE9f Tk9OQkxPQ0sgYXJlIG5vdAotICAgICBkZWZpbmVkLCBvciBpZiBQVFlfTk9fTkRFTEFZIGlzIGRl ZmluZWQpLCBidXQgb24gc29tZSBwbGF0Zm9ybXMgdGhpcyBjYW4KLSAgICAgcmVzdWx0IGluIHNp bmdsZS1ieXRlIHJlYWRzIGFuZCB3cml0ZXMgKE5ldEJTRCBhZ2FpbikuCi0KLSAgIC4gVGVzdGlu ZyBmb3IgIkVPRiIgb24gdGhlIHB0eSBpcyBwcm9ibGVtYXRpYy4gIHNlbGVjdCgpIG5ldmVyIGdp dmVzCi0gICAgIGFueSBpbmRpY2F0aW9uLiAgQWZ0ZXIgdGhlIHB0eSBwcm9jZXNzIGhhcyBleGl0 ZWQgYW5kIHRoZSBmb3JrIGhhcwotICAgICBkaXNhcHBlYXJlZCwgcmVhZCgpIGNhbiBzdGlsbCBy ZXR1cm4gd2l0aCAwIGJ5dGVzIHJlYWQgYnV0IHdpdGhvdXQgYW4KLSAgICAgZXJyb3IgKE5ldEJT RCk7IG5vIGtub3duIHRlc3Qgb24gdGhlIHB0eSBmaWxlIGRlc2NyaXB0b3Igd2lsbCBpbmRpY2F0 ZQotICAgICB0aGF0IGl0IGlzIG5vIGxvbmdlciB2YWxpZC4gIFRoZSBwcm9jZXNzIElEIG9mIHRo ZSBwdHkgZm9yayBjYW4gYmUKLSAgICAgdGVzdGVkIG9uIHNvbWUgcGxhdGZvcm1zIChOZXRCU0Qs IGx1Y2tpbHkpIGJ1dCBub3Qgb3RoZXJzIChTb2xhcmlzLAotICAgICBMaW51eCkuCi0KLSAgT24g dGhlIG5ldHdvcmsgc2lkZSwgd2UgdXNlIHR0aW5jKCkgYW5kIHR0b2MoKSwgd2hpY2gsIGZvciBu ZXR3b3JrIAotICBjb25uZWN0aW9ucywgaGFuZGxlIGFueSBhY3RpdmUgc2VjdXJpdHkgbWV0aG9k cy4KLQotICBDYWxsIHdpdGggcyA9IGNvbW1hbmQuCi0gIFJldHVybnMgMCBvbiBmYWlsdXJlLCAx IG9uIHN1Y2Nlc3MuCi0gIGZkYyAtIERlY2VtYmVyIDIwMDYgLSBBdWd1c3QgMjAwNy4KLQotICBO T1RFOiBUaGlzIGNvZGUgZGVmYXVsdHMgdG8gbm9uYmxvY2tpbmcgcmVhZHMgaWYgT19OREVMQVkg b3IgT19OT05CTE9DSyBhcmUKLSAgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGVzLCB3aGljaCBz aG91bGQgYmUgdHJ1ZSBvZiBldmVyeSByZWNlbnQgVW5peAotICBwbGF0Zm9ybS4gIElmIHRoaXMg Y2F1c2VzIHRyb3VibGUgc29tZXdoZXJlLCBkZWZpbmUgUFRZX05PX05ERUxBWSwgZS5nLiB3aGVu Ci0gIGJ1aWxkaW5nIEMtS2VybWl0OgotCi0gICAgdG91Y2ggY2t1dGlvLmMKLSAgICBtYWtlIHBs YXRmb3JtbmFtZSBLRkxBR1M9LURQVFlfTk9fTk9ERUxBWQotKi8KLXN0YXRpYyBpbnQgaGF2ZV9w dHkgPSAwOwkJLyogRG8gd2UgaGF2ZSBhIHB0eT8gKi8KLQotc3RhdGljIFNJR1RZUCAoKnNhdmVf c2lnY2hsZCkoKSA9IE5VTEw7CS8qIEZvciBjYXRjaGluZyBTSUdDSExEICovCi0KLXN0YXRpYyBW T0lECi1zaWdjaGxkX2hhbmRsZXIoc2lnKSBpbnQgc2lnOyB7Ci0gICAgaGF2ZV9wdHkgPSAwOwkJ CS8qIFdlIGRvbid0IGhhdmUgYSBwdHkgKi8KLSNpZmRlZiBERUJVRwotICAgIGlmIChzYXZlX3Np Z2NobGQpIHsKLQkoVk9JRCkgc2lnbmFsKFNJR0NITEQsc2F2ZV9zaWdjaGxkKTsKLQlzYXZlX3Np Z2NobGQgPSBOVUxMOwotICAgIH0KLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjEwMCwiKioq KioqKioqKioqKioiLCIiLDApOwotCWRlYnVnKEYxMDAsIlNJR0NITEQgY2F1Z2h0IiwiIiwwKTsK LQlkZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKiIsIiIsMCk7Ci0gICAgfQotI2VuZGlmCS8qIERF QlVHICovCi19Ci0jZGVmaW5lIEhBVkVfSUFDIDEKLSNkZWZpbmUgSEFWRV9DUiAgMgotCi1pbnQK LXR0cHR5Y21kKHMpIGNoYXIgKnM7IHsKLSAgICBDSEFSIHRidWZbUFRZX1RCVUZfU0laRV07CQkv KiBSZWFkIGZyb20gbmV0LCB3cml0ZSB0byBwdHkgKi8KLSAgICBpbnQgdGJ1Zl9hdmFpbCA9IDA7 CQkJLyogUG9pbnRlcnMgZm9yIHRidWYgKi8KLSAgICBpbnQgdGJ1Zl93cml0dGVuID0gMDsKLSAg ICBzdGF0aWMgaW50IGluX3N0YXRlID0gMDsJCS8qIEZvciBURUxORVQgSUFDIGFuZCBOVlQgaW4g Ki8KLSAgICBzdGF0aWMgaW50IG91dF9wcmV2ID0gMDsJCS8qIFNpbXBsZXIgc2NoZW1lIGZvciBv dXQgKi8KLQotICAgIENIQVIgcGJ1ZltQVFlfUEJVRl9TSVpFXTsJCS8qIFJlYWQgZnJvbSBwdHks IHdyaXRlIHRvIG5ldCAqLwotICAgIENIQVIgZGJ1ZltQVFlfUEJVRl9TSVpFICsgUFRZX1BCVUZf U0laRSArIDFdOyAvKiBEb3VibGUtc2l6ZSBidWZmZXIgKi8KLSAgICBpbnQgcGJ1Zl9hdmFpbCA9 IDA7CQkJLyogUG9pbnRlcnMgZm9yIHBidWYgKi8KLSAgICBpbnQgcGJ1Zl93cml0dGVuID0gMDsK LQotICAgIGludCBwdHlmZCA9IC0xOwkJCS8qIFB0eSBmaWxlIGRlc2NyaXB0b3IgKi8KLSAgICBp bnQgaGF2ZV9uZXQgPSAwOwkJCS8qIFdlIGhhdmUgYSBuZXR3b3JrIGNvbm5lY3Rpb24gKi8KLSAg ICBpbnQgcHR5X2VyciA9IDA7CQkJLyogR290IGVycm9yIG9uIHB0eSAqLwotICAgIGludCBuZXRf ZXJyID0gMDsJCQkvKiBHb3QgZXJyb3Igb24gbmV0ICovCi0gICAgaW50IHN0YXR1cyA9IC0xOwkJ CS8qIFB0eSBwcm9jZXNzIGV4aXQgc3RhdHVzICovCi0gICAgaW50IHJjID0gMDsJCQkJLyogT3Vy IHJldHVybiBjb2RlICovCi0KLSAgICBpbnQgeDEgPSAwLCB4MiA9IDA7CQkJLyogV29ya2Vycy4u LiAqLwotICAgIGludCBjLCBuLCBtLCB0LCB4OwkJCS8qIFdvcmtlcnMgKi8KLQotICAgIGxvbmcg c2Vjb25kc190b193YWl0ID0gMEw7CQkvKiBzZWxlY3QoKSB0aW1lb3V0ICovCi0gICAgc3RydWN0 IHRpbWV2YWwgdHYsICp0djI7CQkvKiBGb3Igc2VsZWN0KCkgKi8KLSNpZmRlZiBJTlRTRUxFQ1QK LSAgICBpbnQgaW4sIG91dCwgZXJyOwkJCS8qIEZvciBzZWxlY3QoKSAqLwotI2Vsc2UKLSAgICBm ZF9zZXQgaW4sIG91dCwgZXJyOwotI2VuZGlmIC8qIElOVFNFTEVDVCAqLwotICAgIGludCBuZmRz ID0gMDsJCQkvKiBGb3Igc2VsZWN0KCkgKi8KLQotICAgIGludCBwc2V0ID0gMCwgdHNldCA9IDAs IHBub3RzZXQgPSAwLCB0bm90c2V0ID0gMDsgLyogc3RhdHMvZGVidWdnaW4gb25seSAqLwotICAg IGludCByZWFkX25ldF9ieXRlcyA9IDA7CQkvKiBTdGF0cyAqLwotICAgIGludCB3cml0ZV9uZXRf Ynl0ZXMgPSAwOwkJLyogU3RhdHMgKi8KLSAgICBpbnQgcmVhZF9wdHlfYnl0ZXMgPSAwOwkJLyog U3RhdHMgKi8KLSAgICBpbnQgd3JpdGVfcHR5X2J5dGVzID0gMDsJCS8qIFN0YXRzICovCi0gICAg aW50IGlzX3RuID0gMDsJCQkvKiBURUxORVQgcHJvdG9jb2wgaXMgYWN0aXZlICovCi0KLSAgICBp bnQgbWFzdGVyZmQgPSAtMTsKLSAgICBpbnQgc2xhdmVmZCA9IC0xOwotI2lmbmRlZiBVU0VfQ0tV UFRZX0MKLSAgICBzdHJ1Y3QgdGVybWlvcyB0ZXJtOwotICAgIHN0cnVjdCB3aW5zaXplIHR3aW47 Ci0gICAgc3RydWN0IHN0cmluZ2FycmF5ICogcTsKLSAgICBjaGFyICoqIGFyZ3MgPSBOVUxMOwot I2VuZGlmIC8qIFVTRV9DS1VQVFlfQyAqLwotCi0gICAgaW5fc3RhdGUgPSAwOwkJCS8qIE5vIHBy ZXZpb3VzIGNoYXJhY3RlciB5ZXQgKi8KLQotICAgIGlmICh0dHlmZCA9PSAtMSkgewotCXByaW50 ZigiP1NvcnJ5LCBjb21tdW5pY2F0aW9uIGNoYW5uZWwgaXMgbm90IG9wZW5cbiIpOwotCXJldHVy bigwKTsKLSAgICB9IGVsc2UgewotCWhhdmVfbmV0ID0gMTsKLSAgICB9Ci0gICAgaWYgKG5vcHVz aCkgewotCWRlYnVnKEYxMDAsInR0cHR5Y21kIGZhaWw6IG5vcHVzaCIsIiIsMCk7Ci0JcmV0dXJu KDApOwotICAgIH0KLSAgICBpZiAoIXMpIHMgPSAiIjsJCQkvKiBEZWZlbnNlIGRlIGJvZ3VzIGFy Z3VtZW50cyAqLwotICAgIGlmICghKnMpIHJldHVybigwKTsKLSAgICBwZXhpdHN0YXQgPSAtMTsJ CQkvKiBGb3JrIHByb2Nlc3MgZXhpdCBzdGF0dXMgKi8KLQotI2lmZGVmIFROQ09ERQotICAgIGlz X3RuID0gKHhsb2NhbCAmJiBuZXRjb25uICYmIElTX1RFTE5FVCgpKSB8fCAvKiBUZWxuZXQgcHJv dG9jb2wgYWN0aXZlICovCi0JICAgICgheGxvY2FsICYmIHNzdGVsbmV0KTsKLSNlbmRpZiAvKiBU TkNPREUgKi8KLQotICAgIGRlYnVnKEYxMTAsInR0cHR5Y21kIGNvbW1hbmQiLHMsMCk7Ci0gICAg ZGVidWcoRjEwMSwidHRwdHljbWQgdHR5ZmQiLCIiLHR0eWZkKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0 dHB0eWNtZCBpc190biIsIiIsaXNfdG4pOwotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIGNrZXJt aXQgcGlkIiwiIixnZXRwaWQoKSk7Ci0KLSNpZmRlZiBVU0VfQ0tVUFRZX0MKLSAgICAvKiBDYWxs IGNrdXB0eS5jIG1vZHVsZSB0byBnZXQgYW5kIHNldCB1cCB0aGUgcHR5IGZvcmsgKi8KLSAgICAv KiBmYyAxID09ICJydW4gYW4gZXh0ZXJuYWwgcHJvdG9jb2wiICovCi0gICAgZGVidWcoRjEwMCwi dHRwdHljbWQgdXNpbmcgY2t1cHR5LmMiLCIiLDApOwotICAgIGlmIChkb19wdHkoJnB0eWZkLHMs MSkgPCAwKSB7CS8qIFN0YXJ0IHRoZSBjb21tYW5kIG9uIGEgcHR5ICovCi0JZGVidWcoRjEwMCwi dHRwdHljbWQgZG9fcHR5IGZhaWxzIiwiIiwwKTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotICAgIG1h c3RlcmZkID0gcHR5ZmQ7Ci0gICAgcHR5X21hc3Rlcl9mZCA9IHB0eWZkOwotI2lmZGVmIENPTU1F TlQKLSAgICBzbGF2ZWZkID0gcHR5X3NsYXZlX2ZkOwkJLyogVGhpcyBpcyBub3QgdmlzaWJsZSB0 byB1cyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBkZWJ1ZyhGMTExLCJ0dHB0eWNtZCBw dHlmZCIsIlVTRV9DS1VQVFlfQyIscHR5ZmQpOwotICAgIGRlYnVnKEYxMTEsInR0cHR5Y21kIG1h c3RlcmZkIiwiVVNFX0NLVVBUWV9DIixtYXN0ZXJmZCk7Ci0gICAgZGVidWcoRjExMSwidHRwdHlj bWQgZm9yayBwaWQiLCJVU0VfQ0tVUFRZX0MiLHB0eV9mb3JrX3BpZCk7Ci0jaWZuZGVmIFNPTEFS SVMKLSAgICAvKiAiaW9jdGwgaW5hcHByb3ByaWF0ZSBvbiBkZXZpY2UiIGZvciBwdHkgbWFzdGVy ICovCi0gICAgcHR5X21ha2VfcmF3KG1hc3RlcmZkKTsKLSNlbmRpZiAvKiBTT0xBUklTICovCi0K LSNlbHNlIC8qIFVTRV9DS1VQVFlfQyAqLwotCi0gICAgZGVidWcoRjEwMCwidHRwdHljbWQgT1BF TlBUWSIsIiIsMCk7Ci0gICAgaWYgKHRjZ2V0YXR0cigwLCAmdGVybSkgPT0gLTEpIHsJLyogR2V0 IGNvbnRyb2xsaW5nIHRlcm1pbmFsJ3MgbW9kZXMgKi8KLQlwZXJyb3IoInRjZ2V0YXR0ciIpOwot CXJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKGlvY3RsKDAsIFRJT0NHV0lOU1osIChjaGFyICop ICZ0d2luKSA9PSAtMSkgeyAvKiBhbmQgd2luZG93IHNpemUgKi8KLQlwZXJyb3IoImlvY3RsIFRJ T0NHV0lOU1oiKTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmIChvcGVucHR5KCZtYXN0ZXJm ZCwgJnNsYXZlZmQsIE5VTEwsIE5VTEwsIE5VTEwpID09IC0xKSB7Ci0JZGVidWcoRjEwMSwidHRw dHljbWQgb3BlbnB0eSBmYWlsZWQgZXJybm8iLCIiLGVycm5vKTsKLQlwZXJyb3IoIm9wZW50cHki KTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIG9wZW5wdHkg bWFzdGVyZmQiLCIiLG1hc3RlcmZkKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBvcGVucHR5 IHNsYXZlZmQiLCIiLHNsYXZlZmQpOwotICAgIHB0eV9tYXN0ZXJfZmQgPSBtYXN0ZXJmZDsKLSAg ICBwdHlfc2xhdmVfZmQgPSBzbGF2ZWZkOwotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIG9wZW5w dHkgcHR5X21hc3Rlcl9mZCIsIiIscHR5X21hc3Rlcl9mZCk7Ci0KLSAgICAvKiBQdXQgcHR5IG1h c3RlciBpbiByYXcgbW9kZSBidXQgbGV0IGZvcmtlZCBhcHAgY29udHJvbCB0aGUgc2xhdmUgKi8K LSAgICBwdHlfbWFrZV9yYXcobWFzdGVyZmQpOwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIFRJ T0NSRU1PVEUKLSAgICAvKiBUSU9DUkVNT1RFLDAgPSBkaXNhYmxlIGFsbCB0ZXJtaW8gcHJvY2Vz c2luZyAqLwotICAgIHggPSBpb2N0bChtYXN0ZXJmZCwgVElPQ1JFTU9URSwgMSk7Ci0gICAgZGVi dWcoRjExMSwidHRwdHljbWQgaW9jdGwgVElPQ1JFTU9URSIsY2tpdG9hKHgpLGVycm5vKTsKLSNl bmRpZgkvKiBUSU9DUkVNT1RFICovCi0jaWZkZWYgVElPQ1RUWQotICAgIC8qIFRJT0NUVFksMCA9 IGRpc2FibGUgYWxsIHRlcm1pbyBwcm9jZXNzaW5nICovCi0gICAgeCA9IGlvY3RsKG1hc3RlcmZk LCBUSU9DVFRZLCAwKTsKLSAgICBkZWJ1ZyhGMTExLCJ0dHB0eWNtZCBpb2N0bCBUSU9DVFRZIixj a2l0b2EoeCksZXJybm8pOwotI2VuZGlmCS8qIFRJT0NUVFkgKi8KLSNlbmRpZiAvKiBDT01NRU5U ICovCi0KLSAgICBoYXZlX3B0eSA9IDE7CQkJLyogV2UgaGF2ZSBhbiBvcGVuIHB0eSAqLwotICAg IHNhdmVfc2lnY2hsZCA9IHNpZ25hbChTSUdDSExELCBzaWdjaGxkX2hhbmRsZXIpOyAvKiBDYXRj aCBmb3JrIHF1aXQgKi8KLQotICAgIHB0eV9mb3JrX3BpZCA9IGZvcmsoKTsJCS8qIE1ha2UgZm9y ayBmb3IgZXh0ZXJuYWwgcHJvdG9jb2wgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlf Zm9ya19waWQiLCIiLHB0eV9mb3JrX3BpZCk7Ci0gICAgaWYgKHB0eV9mb3JrX3BpZCA9PSAtMSkg ewotCXBlcnJvcigiZm9yayIpOwotCXJldHVybigwKTsKLSAgICB9IGVsc2UgaWYgKHB0eV9mb3Jr X3BpZCA9PSAwKSB7CS8qIEluIG5ldyBmb3JrICovCi0JaW50IHg7Ci0JZGVidWcoRjEwMSwidHRw dHljbWQgbmV3IGZvcmsgcGlkIiwiIixnZXRwaWQoKSk7Ci0JY2xvc2UobWFzdGVyZmQpOwkJLyog U2xhdmUgcXVhcnRlcnMgbm8gbWFzdGVycyBhbGxvd2VkICovCi0JeCA9IHNldHNpZCgpOwotCWRl YnVnKEYxMDEsInR0cHR5Y21kIG5ldyBmb3JrIHNldHNpZCIsIiIseCk7Ci0JaWYgKHggPT0gLTEp IHsKLQkgICAgcGVycm9yKCJ0dHB0eWNtZCBzZXRzaWQiKTsKLQkgICAgZXhpdCgxKTsKLQl9Ci0J c2lnbmFsKFNJR0lOVCxTSUdfSUdOKTsJCS8qIExldCB1cHBlciBmb3JrIGNhdGNoIHRoaXMgKi8K LQkKLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgVElPQ1NDVFRZCi0JLyogTWFrZSBwdHkgdGhlIGNv bnRyb2xsaW5nIHRlcm1pbmFsIGZvciB0aGUgcHJvY2VzcyAqLwotCS8qIFRISVMgQ0FVU0VTIEFO IElORklOSVRFIFNJR1dJTkNIIElOVEVSUlVQVCBMT09QICovCi0JeCA9IGlvY3RsKHNsYXZlZmQs IFRJT0NTQ1RUWSwgTlVMTCk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgVElPQ1NDVFRZIiwiIix4 KTsKLSNlbmRpZgkvKiBUSU9DU0NUVFkgKi8KLSNlbmRpZgkvKiBDT01NRU5UICovCi0KLQkvKiBJ bml0aWFsaXplIHNsYXZlIHB0eSBtb2RlcyBhbmQgc2l6ZSB0byB0aG9zZSBvZiBvdXIgdGVybWlu YWwgKi8KLQlpZiAodGNzZXRhdHRyKHNsYXZlZmQsIFRDU0FOT1csICZ0ZXJtKSA9PSAtMSkgewot CSAgICBwZXJyb3IoInR0cHR5Y21kIHRjc2V0YXR0ciIpOwotCSAgICBleGl0KDEpOwotCX0KLQlp ZiAoaW9jdGwoc2xhdmVmZCwgVElPQ1NXSU5TWiwgJnR3aW4pID09IC0xKSB7Ci0JICAgIHBlcnJv cigidHRwdHljbWQgaW9jdGwiKTsKLQkgICAgZXhpdCgxKTsKLQl9Ci0jaWZkZWYgQ09NTUVOVAot I2lmZGVmIFRJT0NOT1RUWQotCS8qIERpc2Fzc29jaWF0ZSB0aGlzIHByb2Nlc3MgZnJvbSBpdHMg dGVybWluYWwgKi8KLQkvKiBUSElTIEhBUyBOTyBFRkZFQ1QgKi8KLQl4ID0gaW9jdGwoc2xhdmVm ZCwgVElPQ05PVFRZLCBOVUxMKTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBUSU9DTk9UVFkiLCIi LHgpOwotI2VuZGlmCS8qIFRJT0NOT1RUWSAqLwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQotI2lm ZGVmIENPTU1FTlQKLSNpZmRlZiBTSUdUVE9VCQotCS8qIElnbm9yZSB0ZXJtaW5hbCBvdXRwdXQg aW50ZXJydXB0cyAqLwotCS8qIFRISVMgSEFTIE5PIEVGRkVDVCAqLwotCWRlYnVnKEYxMDAsInR0 cHR5Y21kIGlnbm9yaW5nIFNJR1RUT1UiLCIiLDApOwotCXNpZ25hbChTSUdUVE9VLCBTSUdfSUdO KTsKLSNlbmRpZgkvKiBTSUdUVE9VICovCi0jaWZkZWYgU0lHVFNUUAkKLQkvKiBJZ25vcmUgdGVy bWluYWwgb3V0cHV0IGludGVycnVwdHMgKi8KLQkvKiBUSElTIEhBUyBOTyBFRkZFQ1QgKi8KLQlk ZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBpZ25vcmluZyBTSUdUU1RQIiwiIiwwKTsKLQlzaWduYWwoU0lH VFNUUCwgU0lHX0lHTik7Ci0jZW5kaWYJLyogU0lHVFNUUCAqLwotI2VuZGlmCS8qIENPTU1FTlQg Ki8KLQotCXB0eV9tYWtlX3JhdyhzbGF2ZWZkKTsJCS8qIFB1dCBpdCBpbiByYXdtb2RlICovCi0K LQllcnJubyA9IDA7Ci0JaWYgKGR1cDIoc2xhdmVmZCwgU1RESU5fRklMRU5PKSAhPSBTVERJTl9G SUxFTk8gfHwKLQkgICAgZHVwMihzbGF2ZWZkLCBTVERPVVRfRklMRU5PKSAhPSBTVERPVVRfRklM RU5PKSB7Ci0JICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIG5ldyBmb3JrIGR1cDIgZXJyb3IiLCIi LGVycm5vKTsKLQkgICAgcGVycm9yKCJ0dHB0eWNtZCBkdXAyIik7Ci0JICAgIGV4aXQoMSk7Ci0J fQotCWRlYnVnKEYxMDAsInR0cHR5Y21kIG5ldyBmb3JrIGR1cDIgb2siLCIiLDApOwotCi0JLyog UGFyc2UgZXh0ZXJuYWwgcHJvdG9jb2wgY29tbWFuZCBsaW5lICovCi0JcSA9IGNrc3BsaXQoMSww LHMsTlVMTCwiXFwlW10mJCstLz0qXl9AIXt9Lzw+fC4jfidgOjs/Iiw3LDAsMCk7Ci0JaWYgKCFx KSB7Ci0JICAgIGRlYnVnKEYxMDAsInR0cHR5Y21kIGNrc3BsaXQgZmFpbGVkIiwiIiwwKTsKLQkg ICAgZXhpdCgxKTsKLQl9IGVsc2UgewotCSAgICBpbnQgaSwgbjsKLQkgICAgZGVidWcoRjEwMCwi dHRwdHljbWQgY2tzcGxpdCBvayIsIiIsMCk7Ci0JICAgIG4gPSBxLT5hX3NpemU7Ci0JICAgIGFy Z3MgPSBxLT5hX2hlYWQgKyAxOwotCSAgICBmb3IgKGkgPSAwOyBpIDw9IG47IGkrKykgewotCQlp ZiAoIWFyZ3NbaV0pIHsKLQkJICAgIGJyZWFrOwotCQl9IGVsc2UgewotCQkgICAgLyogc29tZXRp bWVzIGNrc3BsaXQoKSBkb2Vzbid0IHRlcm1pbmF0ZSB0aGUgbGlzdCAqLwotCQkgICAgaWYgKChp ID09IG4pICYmIGFyZ3NbaV0pIHsKLQkJCWlmICgoaW50KXN0cmxlbihhcmdzW2ldKSA9PSAwKQot CQkJICBtYWtlc3RyKCYoYXJnc1tpXSksTlVMTCk7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQkgICAg Ci0JfQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFB1dHRpbmcgdGhlIHNsYXZlIHB0eSBpbiByYXdt b2RlIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlCi0gIGV4dGVybmFsIHByb3Rv Y29sIHByb2dyYW0gaXMgc3VwcG9zZWQgdG8gZG8gdGhhdCBpdHNlbGYuICBZZXQgZG9pbmcgdGhp cwotICBoZXJlIGN1dHMgZG93biBvbiBabW9kZW0gYmluYXJ5LWZpbGUgdHJhbnNtaXNzaW9uIGVy cm9ycyBieSAzMC01MCUgYnV0Ci0gIHN0aWxsIGRvZXNuJ3QgZWxpbWluYXRlIHRoZW0uCi0qLwot CXB0eV9tYWtlX3JhdyhTVERJTl9GSUxFTk8pOwotCXB0eV9tYWtlX3JhdyhTVERPVVRfRklMRU5P KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLQlkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBleGVjdnAn aW5nIGV4dGVybmFsIHByb3RvY29sIiwiIiwwKTsKLQlleGVjdnAoYXJnc1swXSxhcmdzKTsKLQlw ZXJyb3IoImV4ZWN2cCBmYWlsZWQiKTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBleGVjdnAgZmFp bGVkIiwiIixlcnJubyk7Ci0JY2xvc2Uoc2xhdmVmZCk7Ci0JZXhpdCgxKTsKLSAgICB9IAotICAg IC8qICh0aGVyZSBhcmUgYmV0dGVyIHdheXMgdG8gZG8gdGhpcy4uLikgKi8KLSAgICBtc2xlZXAo MTAwMCk7CQkgIC8qIE1ha2UgcGFyZW50IHdhaXQgZm9yIGNoaWxkIHRvIGJlIHJlYWR5ICovCi0g ICAgcHR5ZmQgPSBtYXN0ZXJmZDsJCQkvKiBXZSB0YWxrIHRvIHRoZSBtYXN0ZXIgKi8KLQotI2Vu ZGlmIC8qIFVTRV9DS1VQVFlfQyAqLwotCi0gICAgZGVidWcoRjEwMSwidHRwdHljbWQgcHR5ZmQi LCIiLHB0eWZkKTsKLSAgICBpZiAocHR5ZmQgPCAwKSB7Ci0JcHJpbnRmKCI/RmFpbHVyZSB0byBn ZXQgcHR5XG4iKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICBoYXZlX3B0eSA9IDE7CSAgICAg IC8qIFdlIGhhdmUgYW4gb3BlbiBwdHkgb3Igd2Ugd291bGRuJ3QgaGUgaGVyZSAqLwotCi0gICAg ZGVidWcoRjEwMSwidHRwdHljbWQgUFRZX1BCVUZfU0laRSIsIiIsUFRZX1BCVUZfU0laRSk7Ci0g ICAgZGVidWcoRjEwMSwidHRwdHljbWQgUFRZX1RCVUZfU0laRSIsIiIsUFRZX1RCVUZfU0laRSk7 Ci0KLSNpZmRlZiBQVFlfVVNFX05ERUxBWQotICAgIC8qIAotICAgICAgIE5PVEU6IElmIHNlbGVj dCgpIGFuZCBpb2N0bChwdHlmZCxGSU9OUkVBRCwmbikgcmV0dXJuIHRydWUgaW5kaWNhdGlvbnMK LSAgICAgICBvbiB0aGUgcHR5LCB3ZSBkb24ndCBuZWVkIG5vbmJsb2NraW5nIHJlYWRzLiAgUGVy Zm9ybWFuY2Ugb2YgZWl0aGVyCi0gICAgICAgbWV0aG9kIHNlZW1zIHRvIGJlIGFib3V0IHRoZSBz YW1lLCBzbyB1c2Ugd2hhdGV2ZXIgd29ya3MuCi0gICAgKi8KLSAgICBlcnJubyA9IDA7Ci0gICAg eCA9IGZjbnRsKHB0eWZkLEZfU0VURkwsZmNudGwocHR5ZmQsRl9HRVRGTCwgMCl8T19OREVMQVkp OwotICAgIGNrbWFrbXNnKG1zZ2J1Ziw1MDAsCi0JICAgICAidHRwdHljbWQgc2V0IE9fTkRFTEFZ IGVycm5vPSIsCi0JICAgICBja2l0b2EoZXJybm8pLAotCSAgICAgIiBmY250bD0iLAotCSAgICAg Y2tpdG9hKHgpKTsKLSAgICBkZWJ1ZyhGMTAwLG1zZ2J1ZiwiIiwwKTsKLSNlbmRpZiAvKiBQVFlf VVNFX05ERUxBWSAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyogTm90IG5lY2Vzc2FyeSwgdGhlIHBy b3RvY29sIG1vZHVsZSBhbHJlYWR5IGRpZCB0aGlzICovCi0KLSNpZmRlZiBVU0VfQ0ZNQUtFUkFX Ci0gICAgaWYgKHRjZ2V0YXR0cih0dHlmZCwgJnRlcm0pID4gLTEpIHsKLQljZm1ha2VyYXcoJnRl cm0pOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kIG5ldCBjZm1ha2VyYXcgZXJybm8iLCIiLGVycm5v KTsKLQl4IHRjc2V0YXR0cih0dHlmZCwgVENTQU5PVywgJnRlcm0pOwotCWRlYnVnKEYxMDEsInR0 cHR5Y21kIG5ldCB0Y3NldGF0dHIiLCIiLHgpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kIG5ldCB0 Y3NldGF0dHIiLCIiLGVycm5vKTsKLSAgICB9Ci0jZWxzZQotICAgIGlmIChsb2NhbCkJCQkJLyog UHV0IG5ldHdvcmsgY29ubmVjdGlvbiBpbiAqLwotICAgICAgdHRwa3QodHRzcGVlZCx0dGZsb3cs dHRwcnR5KTsJLyogInBhY2tldCBtb2RlIi4gKi8KLSAgICBlbHNlCi0gICAgICBjb25iaW4oKGNo YXIpZXNjY2hyKTsJCS8qIE9SLi4uIHB0eV9tYWtlX3JhdygwKSAqLwotI2VuZGlmIC8qIFVTRV9D Rk1BS0VSQVcgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBUTkNPREUKLSAgICBp ZiAoaXNfdG4pIHsKLSAgICAgIGRlYnVnKEYxMDEsIjw8PCB0dHB0eWNtZCBURUxPUFRfTUVfQklO QVJZIiwiIixURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpOwotICAgICAgZGVidWcoRjEwMSwiPDw8 IHR0cHR5Y21kIFRFTE9QVF9VX0JJTkFSWSIsIiIsVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkpOwot ICAgIH0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIGVu dGVyaW5nIGxvb3AgLSBzZWNvbmRzX3RvX3dhaXQiLCIiLHNlY29uZHNfdG9fd2FpdCk7Ci0KLSAg ICB3aGlsZSAoaGF2ZV9wdHkgfHwgaGF2ZV9uZXQpIHsKLQlGRF9aRVJPKCZpbik7CQkJLyogSW5p dGlhbGl6ZSBzZWxlY3QoKSBzdHJ1Y3RzICovCi0JRkRfWkVSTygmb3V0KTsKLQlGRF9aRVJPKCZl cnIpOwkJCS8qIChub3QgdXNlZCBiZWNhdXNlIHVzZWxlc3MpICovCi0JbmZkcyA9IC0xOwotCi0J ZGVidWcoRjEwMSwidHRwdHljbWQgbG9vcCB0b3AgaGF2ZV9wdHkiLCIiLGhhdmVfcHR5KTsKLQlk ZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBsb29wIHRvcCBoYXZlX25ldCIsIiIsaGF2ZV9uZXQpOwotCi0J LyogUHR5IGlzIG9wZW4gYW5kIHdlIGhhdmUgcm9vbSB0byByZWFkIGZyb20gaXQ/ICovCi0JaWYg KGhhdmVfcHR5ICYmIHBidWZfYXZhaWwgPCBQVFlfUEJVRl9TSVpFKSB7Ci0JICAgIGRlYnVnKEYx MDAsInR0cHR5Y21kIEZEX1NFVCBwdHlmZCBpbiIsIiIsMCk7Ci0gICAgICAgICAgICBGRF9TRVQo cHR5ZmQsICZpbik7Ci0JICAgIG5mZHMgPSBwdHlmZDsKLSAgICAgICAgfQotCS8qIE5ldHdvcmsg aXMgb3BlbiBhbmQgd2UgaGF2ZSByb29tIHRvIHJlYWQgZnJvbSBpdD8gKi8KLSAgICAgICAgaWYg KGhhdmVfbmV0ICYmIGhhdmVfcHR5ICYmIHRidWZfYXZhaWwgPCBQVFlfVEJVRl9TSVpFKSB7Ci0J ICAgIGRlYnVnKEYxMDAsInR0cHR5Y21kIEZEX1NFVCB0dHlmZCBpbiIsIiIsMCk7Ci0gICAgICAg ICAgICBGRF9TRVQodHR5ZmQsICZpbik7Ci0JICAgIGlmICh0dHlmZCA+IG5mZHMpIG5mZHMgPSB0 dHlmZDsKLSAgICAgICAgfQotCS8qIFB0eSBpcyBvcGVuIGFuZCB3ZSBoYXZlIHN0dWZmIHRvIHdy aXRlIHRvIGl0PyAqLwotICAgICAgICBpZiAoaGF2ZV9wdHkgJiYgdGJ1Zl9hdmFpbCAtIHRidWZf d3JpdHRlbiA+IDApIHsKLQkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgRkRfU0VUIHB0eWZkIG91 dCIsIiIsMCk7Ci0gICAgICAgICAgICBGRF9TRVQgKHB0eWZkLCAmb3V0KTsKLQkgICAgaWYgKHB0 eWZkID4gbmZkcykgbmZkcyA9IHB0eWZkOwotICAgICAgICB9Ci0JLyogTmV0IGlzIG9wZW4gYW5k IHdlIGhhdmUgc3R1ZmYgdG8gd3JpdGUgdG8gaXQ/ICovCi0JZGVidWcoRjEwMSwidHRwdHljbWQg cGJ1Zl9hdmFpbC1wYnVmX3dyaXR0ZW4iLCIiLAotCSAgICAgIHBidWZfYXZhaWwgLSBwYnVmX3dy aXR0ZW4pOwotICAgICAgICBpZiAoaGF2ZV9uZXQgJiYgcGJ1Zl9hdmFpbCAtIHBidWZfd3JpdHRl biA+IDApIHsKLQkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgRkRfU0VUIHR0eWZkIG91dCIsIiIs MCk7Ci0gICAgICAgICAgICBGRF9TRVQgKHR0eWZkLCAmb3V0KTsKLQkgICAgaWYgKHR0eWZkID4g bmZkcykgbmZkcyA9IHR0eWZkOwotICAgICAgICB9Ci0JLyogV2UgZG9uJ3QgdXNlIGVyciBiZWNh dXNlIGl0J3Mgbm90IHJlYWxseSBmb3IgZXJyb3JzLCAqLwotCS8qIGJ1dCBmb3Igb3V0IG9mIGJh bmQgZGF0YSBvbiB0aGUgVENQIHNvY2tldCwgd2hpY2gsIGlmIGl0IGlzICovCi0JLyogdG8gYmUg aGFuZGxlZCBhdCBhbGwsIGlzIGhhbmRsZWQgaW4gdGhlIHR0KigpIHJvdXRpbmVzICovCi0KLQlu ZmRzKys7CQkJCS8qIDAtYmFzZWQgdG8gMS1iYXNlZCAqLwotCWRlYnVnKEYxMDEsInR0cHR5Y21k IG5mZHMiLCIiLG5mZHMpOwotCWlmICghbmZkcykgewotCSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNt ZCBOTyBGRHMgc2V0IGZvciBzZWxlY3QiLCIiLDApOwotCSAgICBpZiAoaGF2ZV9wdHkpIHsKLQkJ LyogVGhpcyBpcyBub3QgcmlnaHQgLS0gc2xlZXBpbmcgd29uJ3QgYWNjb21wbGlzaCBhbnl0aGlu ZyAqLwotCQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBtc2xlZXAiLCIiLDEwMCk7Ci0JCW1zbGVlcCgx MDApOwkgICAgCi0JICAgIH0gZWxzZSB7Ci0JCWRlYnVnKEYxMDAsInR0cHR5Y21kIG5vIHB0eSAt IHF1aXR0aW5nIGxvb3AiLCIiLDApOwotCQlicmVhazsKLQkgICAgfQotCX0KLQllcnJubyA9IDA7 Ci0KLQlpZiAoc2Vjb25kc190b193YWl0ID4gMEwpIHsJLyogVGltZW91dCBpbiBjYXNlIG5vdGhp bmcgaGFwcGVucyAqLwotCSAgICB0di50dl9zZWMgPSBzZWNvbmRzX3RvX3dhaXQ7IC8qIGZvciBh IGxvbmcgdGltZSAqLwotCSAgICB0di50dl91c2VjID0gMEw7CQkKLQkgICAgdHYyID0gJnR2Owot ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdHYyID0gTlVMTDsKLQl9Ci0JeCA9IHNlbGVj dChuZmRzLCAmaW4sICZvdXQsIE5VTEwsIHR2Mik7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgc2Vs ZWN0IiwiIix4KTsKLQlpZiAoeCA8IDApIHsKLQkgICAgaWYgKGVycm5vID09IEVJTlRSKQotCSAg ICAgIGNvbnRpbnVlOwotCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBzZWxlY3QgZXJyb3IiLCIi LGVycm5vKTsKLQkgICAgYnJlYWs7Ci0JfQotCWlmICh4ID09IDApIHsKLQkgICAgZGVidWcoRjEw MSwidHRwdHljbWQgKysrIHNlbGVjdCB0aW1lb3V0IiwiIixzZWNvbmRzX3RvX3dhaXQpOyAKLQkg ICAgaWYgKGhhdmVfcHR5KSB7Ci0JCXN0YXR1cyA9IHB0eV9nZXRfc3RhdHVzKHB0eWZkLHB0eV9m b3JrX3BpZCk7Ci0JCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9nZXRfc3RhdHVzIEEiLCIiLHN0 YXR1cyk7Ci0JCWlmIChzdGF0dXMgPiAtMSkgcGV4aXRzdGF0ID0gc3RhdHVzOwotCQloYXZlX3B0 eSA9IDA7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JfQotCS8qIFdlIHdhbnQgdG8gaGFuZGxlIGFu eSBwZW5kaW5nIHdyaXRlcyBmaXJzdCB0byBtYWtlIHJvb20gKi8KLQkvKiBmb3IgbmV3IGluY29t aW5nLiAqLwotCi0JaWYgKEZEX0lTU0VUKHR0eWZkLCAmb3V0KSkgewkvKiBDYW4gd3JpdGUgdG8g bmV0PyAqLwotCSAgICBDSEFSICogczsKLQkgICAgcyA9IHBidWYgKyBwYnVmX3dyaXR0ZW47CS8q IEN1cnJlbnQgc3BvdCBmb3Igc2VuZGluZyAqLwotI2lmZGVmIFROQ09ERQotCSAgICBpZiAoaXNf dG4pIHsJCS8qIHR0b2woKSBkb2Vzbid0IGRvdWJsZSBJQUNzICovCi0JCUNIQVIgYzsJCQkvKiBS ZXdyaXRlIHN0cmluZyB3aXRoIElBQ3MgZG91YmxlZCAqLwotCQlpbnQgaTsKLQkJcyA9IHBidWYg KyBwYnVmX3dyaXR0ZW47IC8qIFNvdXJjZSAqLwotCQl4ID0gMDsJCSAJIC8qIENvdW50ICovCi0J CWZvciAoaSA9IDA7IGkgPCBwYnVmX2F2YWlsIC0gcGJ1Zl93cml0dGVuOyBpKyspIHsKLQkJICAg IGMgPSBzW2ldOwkJLyogTmV4dCBjaGFyYWN0ZXIgKi8KLQkJICAgIGlmIChjID09IElBQykgewkv KiBJZiBpdCdzIElBQyAqLwotCQkJZGJ1Zlt4KytdID0gYzsJLyogcHV0IGFub3RoZXIgb25lICov Ci0JCQlkZWJ1ZyhGMDAwLCI+Pj4gUVVPVEVEIElBQyIsIiIsYyk7Ci0JCSAgICB9IGVsc2UgaWYg KGMgIT0gMHgwYSAmJiBvdXRfcHJldiA9PSAweDBkKSB7CS8qIEJhcmUgQ1IgKi8KLQkJCWlmICgh VEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpKSB7IC8qIE5WVCBydWxlICovCi0JCQkgICAgYyA9IDB4 MDA7Ci0JCQkgICAgZGJ1Zlt4KytdID0gYzsKLQkJCSAgICBkZWJ1ZyhGMDAwLCI+Pj4gQ1ItTlVM IiwiIixjKTsKLQkJCX0JCQkKLQkJICAgIH0KLQkJICAgIGRidWZbeCsrXSA9IGM7CS8qIENvcHkg YW5kIGNvdW50IGl0ICovCi0JCSAgICBkZWJ1ZyhGMDAwLCI+Pj4gY2hhciIsY2tpdG9hKGluX3N0 YXRlKSxjKTsKLQkJICAgIG91dF9wcmV2ID0gYzsKLQkJfQotCQlzID0gZGJ1ZjsJCS8qIE5ldyBz b3VyY2UgKi8KLQkgICAgfSBlbHNlCi0jZW5kaWYgLyogVE5DT0RFICovCi0JICAgICAgeCA9IHBi dWZfYXZhaWwgLSBwYnVmX3dyaXR0ZW47IC8qIEhvdyBtdWNoIHRvIHNlbmQgKi8KLQotCSAgICBk ZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBieXRlcyB0byBzZW5kIiwiIix4KTsKLQkgICAgeCA9IHR0b2wo cywgeCk7Ci0JICAgIGRlYnVnKEYxMDEsIj4+PiB0dG9sIiwiIix4KTsKLQkgICAgaWYgKHggPCAw KSB7Ci0JCW5ldF9lcnIrKzsKLQkJZGVidWcoRjExMSwidHRwdHljbWQgdHRvbCBlcnJvciIsY2tp dG9hKHgpLGVycm5vKTsKLQkJeCA9IDA7Ci0JICAgIH0KLQkgICAgd3JpdGVfbmV0X2J5dGVzICs9 IHg7Ci0JICAgIHBidWZfd3JpdHRlbiArPSB4OwotCX0KLQlpZiAoRkRfSVNTRVQocHR5ZmQsICZv dXQpKSB7CS8qIENhbiB3cml0ZSB0byBwdHk/ICovCi0JICAgIGRlYnVnKEYxMDAsInR0cHR5Y21k IEZEX0lTU0VUIHB0eWZkIG91dCIsIiIsMCk7Ci0JICAgIGVycm5vID0gMDsKLSNpZm5kZWYgQ09N TUVOVAotCSAgICB4ID0gd3JpdGUocHR5ZmQsdGJ1ZiArIHRidWZfd3JpdHRlbix0YnVmX2F2YWls IC0gdGJ1Zl93cml0dGVuKTsKLSNlbHNlCi0JICAgIC8qIEJ5dGUgbG9vcCB0byBydWxlIG91dCBk YXRhIG92ZXJydW5zIGluIHRoZSBwdHkgKi8KLQkgICAgLyogKGl0IG1ha2VzIG5vIGRpZmZlcmVu Y2UpICovCi0JICAgIHsKLQkJY2hhciAqcCA9IHRidWYrdGJ1Zl93cml0dGVuOwotCQlpbnQgbiA9 IHRidWZfYXZhaWwgLSB0YnVmX3dyaXR0ZW47Ci0JCWZvciAoeCA9IDA7IHggPCBuOyB4KyspIHsK LQkJICAgIG1zbGVlcCgxMCk7Ci0JCSAgICBpZiAod3JpdGUocHR5ZmQsJihwW3hdKSwxKSA8IDAp Ci0JCSAgICAgIGJyZWFrOwotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAg IGRlYnVnKEYxMTEsInR0cHR5Y21kIHB0eWZkIHdyaXRlIixja2l0b2EoZXJybm8pLHgpOwotCSAg ICBpZiAoeCA+IDApIHsKLQkJdGJ1Zl93cml0dGVuICs9IHg7Ci0JCXdyaXRlX3B0eV9ieXRlcyAr PSB4OwotCSAgICB9IGVsc2UgewotCQl4ID0gMDsKLQkJcHR5X2VycisrOwotCQlpZiAocGV4aXRz dGF0IDwgMCkgewotCQkgICAgc3RhdHVzID0gcHR5X2dldF9zdGF0dXMocHR5ZmQscHR5X2Zvcmtf cGlkKTsKLQkJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9nZXRfc3RhdHVzIEIiLCIiLHN0 YXR1cyk7Ci0JCSAgICBpZiAoc3RhdHVzID4gLTEpIHBleGl0c3RhdCA9IHN0YXR1czsKLQkJICAg IGhhdmVfcHR5ID0gMDsKLQkJfQotCQlkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCArKysgcHR5ZmQgd3Jp dGUgZXJyb3IiLCIiLDApOwotCSAgICB9Ci0JfQotCWlmIChGRF9JU1NFVCh0dHlmZCwgJmluKSkg ewkvKiBDYW4gcmVhZCBmcm9tIG5ldD8gKi8KLQkgICAgdHNldCsrOwotCSAgICBkZWJ1ZyhGMTAw LCJ0dHB0eWNtZCBGRF9JU1NFVCB0dHlmZCBpbiIsIiIsMCk7Ci0JICAgIG4gPSBpbl9jaGsoMSx0 dHlmZCk7Ci0JICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIGluX2Noayh0dHlmZCkiLCIiLG4pOyAK LQkgICAgaWYgKG4gPCAwIHx8IHR0eWZkID09IC0xKSB7Ci0JCWRlYnVnKEYxMDEsInR0cHR5Y21k ICsrKyB0dHlmZCBlcnJubyIsIiIsZXJybm8pOwotCQluZXRfZXJyKys7Ci0JICAgIH0gZWxzZSBp ZiAobiA+IDApIHsKLQkJaWYgKG4gPiBQVFlfVEJVRl9TSVpFIC0gdGJ1Zl9hdmFpbCkKLQkJICBu ID0gUFRZX1RCVUZfU0laRSAtIHRidWZfYXZhaWw7Ci0JCWRlYnVnKEYxMDEsInR0cHR5Y21kIG5l dCByZWFkIHNpemUgYWRqdXN0ZWQiLCIiLG4pOyAKLQkJaWYgKHhsb2NhbCAmJiBuZXRjb25uKSB7 Ci0JCSAgICAvKgotCQkgICAgICBXZSBoYXZlIHRvIHVzZSBhIGJ5dGUgbG9vcCBoZXJlIGJlY2F1 c2UgdHR4aW4oKQotCQkgICAgICBkb2VzIG5vdCBkZWNyeXB0IG9yLCBmb3IgdGhhdCBtYXR0ZXIs IGhhbmRsZSBUZWxuZXQuCi0JCSAgICAqLwotCQkgICAgaW50IGM7Ci0JCSAgICBDSEFSICogcDsK LQkJICAgIHAgPSB0YnVmICsgdGJ1Zl9hdmFpbDsKLQkJICAgIGZvciAoeCA9IDA7IHggPCBuOyB4 KyspIHsKLQkJCWlmICgoYyA9IHR0aW5jKDApKSA8IDApCi0JCQkgIGJyZWFrOwotCQkJaWYgKCFp c190bikgewkvKiBOb3QgVGVsbmV0IC0ga2VlcCBhbGwgYnl0ZXMgKi8KLQkJCSAgICAqcCsrID0g KENIQVIpYzsKLQkJCSAgICBkZWJ1ZyhGMDAwLCI8PDwgY2hhciIsIiIsYyk7Ci0jaWZkZWYgVE5D T0RFCi0JCQl9IGVsc2UgewkvKiBUZWxuZXQgLSBtdXN0IGhhbmRsZSBJQUMgYW5kIE5WVCAqLwot CQkJICAgIGRlYnVnKEYwMDAsIjw8PCBjaGFyIixja2l0b2EoaW5fc3RhdGUpLGMpOwotCQkJICAg IHN3aXRjaCAoYykgewotCQkJICAgICAgY2FzZSAweDAwOiAvKiBOVUwgKi8KLQkJCQlpZiAoaW5f c3RhdGUgPT0gSEFWRV9DUikgewotCQkJCSAgICBkZWJ1ZyhGMDAwLCI8PDwgU0tJUCIsIiIsYyk7 Ci0JCQkJfSBlbHNlIHsKLQkJCQkgICAgKnArKyA9IGM7Ci0JCQkJICAgIGRlYnVnKEYwMDAsIjw8 PCBLZWVwIiwiIixjKTsKLQkJCQl9Ci0JCQkJaW5fc3RhdGUgPSAwOwotCQkJCWJyZWFrOwotCQkJ ICAgICAgY2FzZSAweDBkOiAvKiBDUiAqLwotCQkJCWlmICghVEVMT1BUX1UoVEVMT1BUX0JJTkFS WSkpCi0JCQkJICBpbl9zdGF0ZSA9IEhBVkVfQ1I7Ci0JCQkJKnArKyA9IGM7Ci0JCQkJZGVidWco RjAwMCwiPDw8IEtlZXAiLCIiLGMpOwotCQkJCWJyZWFrOwotI2lmZGVmIENPTU1FTlQKLQkJCSAg ICAgIGNhc2UgMHgwZjogLyogQ3RybC1PICovCi0JCQkgICAgICBjYXNlIDB4MTY6IC8qIEN0cmwt ViAqLwotCQkJCSpwKysgPSAweDE2OwotCQkJCSpwKysgPSBjOwotCQkJCWRlYnVnKEYwMDAsIjw8 PCBRVU9UIiwiIixjKTsKLQkJCQlicmVhazsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JCQkgICAg ICBjYXNlIDB4ZmY6IC8qIElBQyAqLwotCQkJCWlmIChpbl9zdGF0ZSA9PSBIQVZFX0lBQykgewot CQkJCSAgICBkZWJ1ZyhGMDAwLCI8PDwgS0VFUCIsIiIsYyk7Ci0JCQkJICAgICpwKysgPSBjOwot CQkJCSAgICBpbl9zdGF0ZSA9IDA7Ci0JCQkJfSBlbHNlIHsKLQkJCQkgICAgZGVidWcoRjAwMCwi PDw8IFNLSVAiLCIiLGMpOwotCQkJCSAgICBpbl9zdGF0ZSA9IEhBVkVfSUFDOwotCQkJCX0KLQkJ CQlicmVhazsKLQkJCSAgICAgIGRlZmF1bHQ6CS8qIEFsbCBvdGhlcnMgKi8KLQkJCQlpZiAoaW5f c3RhdGUgPT0gSEFWRV9JQUMpIHsKLSNpZmRlZiBDT01NRU5UCi0vKgotICB0bl9kb29wKCkgd2ls bCBjb25zdW1lIGFuIHVua25vd24gbnVtYmVyIG9mIGJ5dGVzIGFuZCB3ZSdsbCBvdmVyc2hvb3QK LSAgdGhlIGZvci1sb29wLiAgVGhlIG9ubHkgVGVsbmV0IGNvbW1hbmQgSSd2ZSBldmVyIHNlZW4g YXJyaXZlIGhlcmUgaXMKLSAgYSBEYXRhIE1hcmssIHdoaWNoIGNvbWVzIHdoZW4gdGhlIHJlbW90 ZSBwcm90b2NvbCBleGl0cyBhbmQgdGhlIHJlbW90ZQotICBqb2IgcmV0dXJucyB0byBpdHMgc2hl bGwgcHJvbXB0LiAgT24gdGhlIGFzc3VtcHRpb24gaXQncyBhIDEtYnl0ZSBjb21tYW5kLAotICB3 ZSBkb24ndCB3cml0ZSBvdXQgdGhlIElBQyBvciB0aGUgY29tbWFuZCwgYW5kIHdlIGNsZWFyIHRo ZSBzdGF0ZS4gIElmCi0gIHdlIGNhbGxlZCB0bl9kb29wKCkgd2UnZCBoYXZlIG5vIHdheSBvZiBr bm93aW5nIGhvdyBtYW55IGJ5dGVzIGl0IHRvb2sKLSAgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLgot Ki8KLQkJCQkgICAgaW50IHh4OwotCQkJCSAgICB4eCA9IHRuX2Rvb3AoKENIQVIpYyxkdXBsZXgs dHRpbmMpOwotCQkJCSAgICBkZWJ1ZyhGMTExLCI8PDwgRE9PUCIsY2tjdG9hKGMpLHh4KTsKLSNl bHNlCi0JCQkJICAgIGRlYnVnKEYxMDEsIjw8PCBET09QIiwiIixjKTsKLSNlbmRpZgkvKiBDT01N RU5UICovCi0JCQkJICAgIGluX3N0YXRlID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCSAgICAqcCsr ID0gYzsKLQkJCQkgICAgZGVidWcoRjAwMCwiPDw8IGtlZXAiLCIiLGMpOwotCQkJCSAgICBpbl9z dGF0ZSA9IDA7Ci0JCQkJfQotCQkJICAgIH0KLSNlbmRpZgkvKiBUTkNPREUgKi8KLQkJCX0KLQkJ ICAgIH0KLQkJICAgIGNrbWFrbXNnKG1zZ2J1Ziw1MDAsCi0JCQkgICAgICJ0dHB0eWNtZCByZWFk IG5ldCBbdHRpbmMgbG9vcF0gZXJybm89IiwKLQkJCSAgICAgY2tpdG9hKGVycm5vKSwKLQkJCSAg ICAgIiBjb3VudD0iLAotCQkJICAgICBja2l0b2EoeCkpOwotCQkgICAgZGVidWcoRjEwMCxtc2di dWYsIiIsMCk7Ci0JCX0gZWxzZSB7Ci0JCSAgICB4ID0gdHR4aW4obix0YnVmK3RidWZfYXZhaWwp OwotCQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgdHR4aW4geCIsIiIseCk7IAotCQl9Ci0KLQkJ aWYgKHggPCAwKSB7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCByZWFkIG5ldCBlcnJvciIs IiIseCk7Ci0JCSAgICBuZXRfZXJyKys7Ci0JCX0KLQkJdGJ1Zl9hdmFpbCArPSB4OwotCQlyZWFk X25ldF9ieXRlcyArPSB4OwotCSAgICB9Ci0KLQl9IGVsc2UKLQkgIHRub3RzZXQrKzsKLQotCWlm IChGRF9JU1NFVChwdHlmZCwgJmluKSkgewkvKiBSZWFkIGZyb20gcHR5PyAqLwotCSAgICBwc2V0 Kys7Ci0JICAgIGRlYnVnKEYxMDAsInR0cHR5Y21kIEZEX0lTU0VUIHB0eWZkIGluIiwiIiwwKTsK LSNpZmRlZiBQVFlfVVNFX05ERUxBWQotCSAgICBuID0gUFRZX1BCVUZfU0laRTsKLSNlbHNlCi0J ICAgIC8qCi0JICAgICAgVGhpcyBkb2VzIG5vdCB3b3JrIG9uIG5vbmJsb2NraW5nIGNoYW5uZWxz Ci0JICAgICAgb24gY2VydGFpbiBwbGF0Zm9ybXMgc3VjaCBhcyBOZXRCU0QuCi0JICAgICovCi0J ICAgIG4gPSBwdHlfY2hrKHB0eWZkKTsKLSNlbmRpZiAvKiBQVFlfVVNFX05ERUxBWSAqLwotCSAg ICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfY2hrKCkgbiIsIiIsbik7IAotCi0JICAgIGlmIChu IDwgMCkKLQkgICAgICBuID0gMDsKLQkgICAgaWYgKG4gPiAwKSB7Ci0JCWlmIChuID4gUFRZX1BC VUZfU0laRSAtIHBidWZfYXZhaWwpCi0JCSAgbiA9IFBUWV9QQlVGX1NJWkUgLSBwYnVmX2F2YWls OwotCQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHkgcmVhZCBzaXplIGFkanVzdGVkIiwiIixuKTsg Ci0JCWVycm5vID0gMDsKLQkJeCA9IHJlYWQocHR5ZmQscGJ1ZitwYnVmX2F2YWlsLG4pOwotI2lm ZGVmIERFQlVHCi0JCWlmIChkZWJsb2cpIHsKLQkJICAgIGNrbWFrbXNnKG1zZ2J1Ziw1MDAsCi0J CQkgICAgICJ0dHB0eWNtZCByZWFkIHB0eSBlcnJubz0iLAotCQkJICAgICBja2l0b2EoZXJybm8p LAotCQkJICAgICAiIGNvdW50PSIsCi0JCQkgICAgIGNraXRvYSh4KSk7Ci0JCSAgICBkZWJ1ZyhG MTAwLG1zZ2J1ZiwiIiwwKTsKLQkJfQotI2VuZGlmCS8qIERFQlVHICovCi0KLQkJaWYgKHggPCAw ICYmIGVycm5vID09IEVBR0FJTikKLQkJICB4ID0gMDsKLQotCQlpZiAoeCA8IDApIHsJCS8qIFRo aXMgd29ya3Mgb24gU29sYXJpcyBhbmQgTGludXggKi8KLQkJICAgIHB0eV9lcnIrKzsJCS8qIGJ1 dCBub3QgTmV0QlNEICovCi0JCSAgICBkZWJ1ZyhGMTAwLCJURVJNSU5BVElPTiBURVNUIEEiLCIi LDApOwotI2lmZGVmIENPTU1FTlQKLQkJICAgIGlmIChlcnJubyA9PSBFSU8pCi0JCSAgICAgIHJj ID0gMTsKLSNlbmRpZgkvKiBDT01NRU5UICovCi0JCSAgICBpZiAocGV4aXRzdGF0IDwgMCkgewot CQkJc3RhdHVzID0gcHR5X2dldF9zdGF0dXMocHR5ZmQscHR5X2ZvcmtfcGlkKTsKLQkJCWRlYnVn KEYxMDEsInR0cHR5Y21kIHB0eV9nZXRfc3RhdHVzIEMiLCIiLHN0YXR1cyk7Ci0JCQlpZiAoc3Rh dHVzID4gLTEpIHBleGl0c3RhdCA9IHN0YXR1czsKLQkJICAgIH0KLQkJICAgIGhhdmVfcHR5ID0g MDsKLQkJICAgIHggPSAwOwotCQl9Ci0JCWlmICh4ID09IDAgJiYgIXB0eV9lcnIpIHsgLyogVGhp cyB3b3JrcyBvbiBOZXRCU0QgYnV0ICovCi0JCSAgICBkZWJ1ZyhGMTAwLCJURVJNSU5BVElPTiBU RVNUIEIiLCIiLDApOwotCQkgICAgc3RhdHVzID0gcGV4aXRzdGF0ID4gLTEgPyBwZXhpdHN0YXQg OgotCQkJcHR5X2dldF9zdGF0dXMocHR5ZmQscHR5X2ZvcmtfcGlkKTsKLQkJICAgIGRlYnVnKEYx MDEsInR0cHR5Y21kIHB0eV9nZXRfc3RhdHVzIEQiLCIiLHN0YXR1cyk7Ci0JCSAgICBpZiAoc3Rh dHVzID4gLTEpIHsKLQkJCXBleGl0c3RhdCA9IHN0YXR1czsKLQkJCXB0eV9lcnIrKzsKLQkJCWhh dmVfcHR5ID0gMDsKLQkJICAgIH0gZWxzZSB7CQkvKiBTZWxlY3QoKSBsaWVkICovCi0JCQlwdHlf ZXJyID0gMDsJLyogcHR5IHN0aWxsIHRoZXJlIGJ1dCBoYXMgbm90aGluZyAqLwotCQkJbXNsZWVw KDEwMCk7CS8qIHNsZWVwIGEgYml0ICovCi0JCSAgICB9Ci0JCSAgICB4ID0gMDsKLQkJfSAKLQkJ LyogSG9wZWZ1bGx5IHRoZSBuZXh0IHR3byBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4uLiAqLwotCQlp ZiAoIXB0eV9lcnIgJiYgKAotI2lmbmRlZiBQVFlfVVNFX05ERUxBWQotCQkgICAgeCA8IDEgfHwg ZXJybm8KLSNlbHNlCi0JCSAgICBlcnJubyAhPSAwICYmIGVycm5vICE9IEVBR0FJTgotI2VuZGlm IC8qIFBUWV9VU0VfTkRFTEFZICovCi0JCSAgICApKSB7Ci0JCSAgICBkZWJ1ZyhGMTAwLCJURVJN SU5BVElPTiBURVNUIEMiLCIiLDApOwotCQkgICAgcHR5X2VycisrOwotCQkgICAgZGVidWcoRjEw MSwidHRwdHljbWQgU0VUIHB0eV9lcnIiLCIiLHB0eV9lcnIpOwotCQkgICAgaWYgKGVycm5vID09 IEVJTykJLyogZXJybm8gPT0gRUlPIGlzIGxpa2UgRU9GICovCi0JCSAgICAgIHJjID0gMTsKLQkJ ICAgIGlmICh4IDwgMCkKLQkJICAgICAgeCA9IDA7Ci0JCX0KLSNpZmRlZiBDT01NRU5UCi0jaWZk ZWYgREVCVUcKLQkJaWYgKGRlYmxvZykgewotCQkgICAgcGJ1ZltwYnVmX2F2YWlsICsgeF0gPSAn XDAnOwotCQkgICAgZGVidWcoRjExMSwidHRwdHljbWQgYWRkZWQgdG8gcHR5IGJ1ZmZlciIsCi0J CQkgIHBidWYrcGJ1Zl9hdmFpbCx4KTsKLQkJfQotI2VuZGlmCS8qIERFQlVHICovCi0jZW5kaWYJ LyogQ09NTUVOVCAqLwotCQlwYnVmX2F2YWlsICs9IHg7Ci0JCXJlYWRfcHR5X2J5dGVzICs9IHg7 Ci0JICAgIH0gZWxzZSB7CQkJLyogbiA9PSAwIHdpdGggYmxvY2tpbmcgcmVhZHMgKi8KLQkJZGVi dWcoRjEwMCwKLQkJICAgICAgIlBUWSBSRUFEIFJFVFVSTkVEIFpFUk8gQllURVMgLSBTSE9VTEQg Tk9UIEhBUFBFTiIsCi0JCSAgICAgICIiLDApOwotCSAgICB9Ci0JfSBlbHNlCi0JICBwbm90c2V0 Kys7Ci0KLQkvKiBJZiB3cml0ZXMgaGF2ZSBjYXVnaHQgdXAgdG8gcmVhZHMsIHJlc2V0IHRoZSBi dWZmZXJzICovCi0KLQlpZiAocGJ1Zl93cml0dGVuID09IHBidWZfYXZhaWwpCi0JICBwYnVmX3dy aXR0ZW4gPSBwYnVmX2F2YWlsID0gMDsKLQlpZiAodGJ1Zl93cml0dGVuID09IHRidWZfYXZhaWwp Ci0JICB0YnVmX3dyaXR0ZW4gPSB0YnVmX2F2YWlsID0gMDsKLQotCS8qIFNlZSBpZiB3ZSBjYW4g ZXhpdCAqLwotCi0JeDEgPSBwYnVmX2F2YWlsIC0gcGJ1Zl93cml0dGVuOyAKLQl4MiA9IHRidWZf YXZhaWwgLSB0YnVmX3dyaXR0ZW47Ci0KLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZXJyIExP T1AgRVhJVCBURVNUIHB0eV9lcnIiLCIiLHB0eV9lcnIpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21k IHB0eV9lcnIgTE9PUCBFWElUIFRFU1QgeDEgW3dyaXRlIHRvIG5ldF0iLCIiLHgxKTsKLQlkZWJ1 ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZXJyIExPT1AgRVhJVCBURVNUIHgyIFt3cml0ZSB0byBwdHld IiwiIix4Mik7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2VyciBMT09QIEVYSVQgVEVTVCBy YyIsIiIscmMpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9lcnIgTE9PUCBFWElUIFRFU1Qg c3RhdHVzIiwiIixzdGF0dXMpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9lcnIgTE9PUCBF WElUIFRFU1QgcGV4aXRzdGF0IiwiIixwZXhpdHN0YXQpOwotCi0JaWYgKG5ldF9lcnIpIHsJCQkv KiBOZXQgZXJyb3I/ICovCi0JICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIG5ldF9lcnIgTE9PUCBF WElUIFRFU1QgbmV0X2VyciIsIiIsbmV0X2Vycik7Ci0JICAgIGlmIChoYXZlX25ldCkgewotCQlp ZiAobG9jYWwpIHsKLQkJICAgIHR0Y2xvcygwKTsKLQkJICAgIHByaW50ZigiP0Nvbm5lY3Rpb24g Y2xvc2VkXG4iKTsKLQkJfQotCQloYXZlX25ldCA9IDA7Ci0JICAgIH0KLQkgICAgZGVidWcoRjEw MSwidHRwdHljbWQgbmV0X2VyciBMT09QIEVYSVQgVEVTVCB4MSIsIiIseDEpOwotCSAgICBpZiAo eDEgPT0gMCkKLQkgICAgICBicmVhazsKLQl9Ci0JaWYgKHB0eV9lcnIpIHsJCQkvKiBQdHkgZXJy b3I/ICovCi0JICAgIGlmIChoYXZlX3B0eSkgewotCQlpZiAocGV4aXRzdGF0IDwgMCkgewkJCi0J CSAgICBzdGF0dXMgPSBwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9ya19waWQpOwotCQkgICAg ZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgRSIsIiIsc3RhdHVzKTsKLQkJICAg IGlmIChzdGF0dXMgPiAtMSkgcGV4aXRzdGF0ID0gc3RhdHVzOwotCQl9Ci0JCWhhdmVfcHR5ID0g MDsKLQkgICAgfQotCSAgICBpZiAoeDEgPT0gMCAmJiB4MiA9PSAwKSB7CS8qIElmIGJ1ZmZlcnMg YXJlIGNhdWdodCB1cCAqLwotCQlyYyA9IDE7CQkJLyogc2V0IHByZWxpbWluYXJ5IHJldHVybiB0 byBzdWNjZXNzICovCi0JCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9lcnIgTE9PUCBFWElUIFRF U1QgcmMgMiIsIiIscmMpOwotCQlicmVhazsJCQkvKiBhbmQgZXhpdCB0aGUgbG9vcCAqLwotCSAg ICB9Ci0JfQotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgaGF2ZV9wdHkiLCIi LGhhdmVfcHR5KTsKLSAgICBpZiAoaGF2ZV9wdHkpIHsJCQkvKiBJbiBjYXNlIHNlbGVjdCgpIGZh aWxlZCAqLwotI2lmZGVmIFVTRV9DS1VQVFlfQwotCWVuZF9wdHkoKTsKLQljbG9zZShwdHlmZCk7 Ci0jZWxzZQotCWNsb3NlKHNsYXZlZmQpOwotCWNsb3NlKG1hc3RlcmZkKTsKLSNlbmRpZiAvKiBV U0VfQ0tVUFRZX0MgKi8KLSAgICB9Ci0gICAgcHR5X21hc3Rlcl9mZCA9IC0xOwotICAgIGRlYnVn KEYxMDEsInR0cHR5Y21kICsrKyBwZXhpdHN0YXQiLCIiLHBleGl0c3RhdCk7Ci0gICAgaWYgKHBl eGl0c3RhdCA8IDApIHsJCS8qIFRyeSBvbmUgbGFzdCB0aW1lIHRvIGdldCBzdGF0dXMgKi8KLQlz dGF0dXMgPSBwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9ya19waWQpOwotCWRlYnVnKEYxMDEs InR0cHR5Y21kIHB0eV9nZXRfc3RhdHVzIEYiLCIiLHN0YXR1cyk7Ci0JaWYgKHN0YXR1cyA+IC0x KSBwZXhpdHN0YXQgPSBzdGF0dXM7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kICsr KyBmaW5hbCBwZXhpdHN0YXQiLCIiLHBleGl0c3RhdCk7Ci0gICAgaWYgKGRlYmxvZykgewkJCS8q IFN0YXRzIGZvciBkZWJ1ZyBsb2cgKi8KLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgcHNldAki LCIiLHBzZXQpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyBwbm90c2V0IiwiIixwbm90c2V0 KTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgdHNldAkiLCIiLHRzZXQpOwotCWRlYnVnKEYx MDEsInR0cHR5Y21kICsrKyB0bm90c2V0IiwiIix0bm90c2V0KTsKLQotCWRlYnVnKEYxMDEsInR0 cHR5Y21kICsrKyAgcmVhZF9wdHlfYnl0ZXMiLCIiLHJlYWRfcHR5X2J5dGVzKTsKLQlkZWJ1ZyhG MTAxLCJ0dHB0eWNtZCArKysgd3JpdGVfbmV0X2J5dGVzIiwiIix3cml0ZV9uZXRfYnl0ZXMpOwot CWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyAgcmVhZF9uZXRfYnl0ZXMiLCIiLHJlYWRfbmV0X2J5 dGVzKTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgd3JpdGVfcHR5X2J5dGVzIiwiIix3cml0 ZV9wdHlfYnl0ZXMpOwotICAgIH0KLS8qCi0gIElmIHdlIGdvdCB0aGUgZXh0ZXJuYWwgcHJvdG9j b2wncyBleGl0IHN0YXR1cyBmcm9tIHdhaXRwaWQoKSwgd2UgdXNlIHRoYXQKLSAgdG8gc2V0IG91 ciByZXR1cm4gY29kZS4gIElmIG5vdCwgd2UgZmFsbCBiYWNrIG9uIHdoYXRldmVyIHJjIHdhcyBw cmV2aW91c2x5Ci0gIHNldCB0bywgbmFtZWx5IDEgKHN1Y2Nlc3MpIGlmIHRoZSBwdHkgZm9yayBz ZWVtZWQgdG8gdGVybWluYXRlLCAwIG90aGVyd2lzZS4KLSovCi0gICAgaWYgKHNhdmVfc2lnY2hs ZCkgewkJCS8qIFJlc3RvcmUgdGhpcyBpZiB3ZSBjaGFuZ2VkIGl0ICovCi0JKFZPSUQpIHNpZ25h bChTSUdDSExELHNhdmVfc2lnY2hsZCk7Ci0Jc2F2ZV9zaWdjaGxkID0gTlVMTDsKLSAgICB9Ci0g ICAgbXNsZWVwKDUwMCk7Ci0gICAgeCA9IGtpbGwocHR5X2ZvcmtfcGlkLFNJR0hVUCk7CS8qIElu IGNhc2UgaXQncyBzdGlsbCB0aGVyZSAqLwotICAgIHB0eV9mb3JrX3BpZCA9IC0xOwotICAgIGRl YnVnKEYxMDEsInR0cHR5Y21kIGZvcmsga2lsbCBTSUdIVVAiLCIiLHgpOwotICAgIGlmIChwZXhp dHN0YXQgPiAtMSkKLSAgICAgIHJjID0gKHBleGl0c3RhdCA9PSAwID8gMSA6IDApOwotICAgIGRl YnVnKEYxMDEsInR0cHR5Y21kICsrKyByYyIsIiIscmMpOwotICAgIGlmICghbG9jYWwpIHsJCQkv KiBJZiBpbiByZW1vdGUgbW9kZSAqLwotCWNvbnJlcygpOwkJCS8qIHJlc3RvcmUgY29uc29sZSB0 byBDQlJFQUsgbW9kZSAqLwotCWNvbmNiKChjaGFyKWVzY2Nocik7Ci0gICAgfQotICAgIHJldHVy bihyYyk7Ci19Ci0jZW5kaWYJLyogTkVUUFRZICovCi0jZW5kaWYJLyogU0VMRUNUICovCi0KLS8q IFQgVCBSIFUgTiBDIE0gRCAgLS0gIFJlZGlyZWN0IGFuIGV4dGVybmFsIGNvbW1hbmQgb3ZlciB0 aGUgY29ubmVjdGlvbi4gKi8KLQotLyoKLSAgVFRSVU5DTUQgaXMgdGhlIHJvdXRpbmUgdGhhdCB3 YXMgb3JpZ2luYWxseSB1c2VkIGZvciBydW5uaW5nIGV4dGVybmFsCi0gIHByb3RvY29scy4gIEl0 IGlzIHZlcnkgc2ltcGxlIGFuZCB3b3JrcyBmaW5lIHByb3ZpZGVkIChhKSB0aGUgY29ubmVjdGlv bgotICBpcyBub3QgZW5jcnlwdGVkLCBhbmQgKGIpIHRoZSBleHRlcm5hbCBwcm90b2NvbCB1c2Vz IHN0YW5kYXJkIGkvbwotICAoZmlsZSBkZXNjcmlwdG9ycyAwIGFuZCAxKSBmb3IgZmlsZSB0cmFu c2Zlci4KLSovCi0KLWludAotdHRydW5jbWQocykgY2hhciAqczsgewotICAgIFBJRF9UIHBpZDsJ CQkJLyogcGlkIG9mIGxvd2VyIGZvcmsgKi8KLSAgICBpbnQgd3N0YXQ7CQkJCS8qIGZvciB3YWl0 KCkgKi8KLSAgICBpbnQgeDsKLSAgICBpbnQgc3RhdHVzcDsKLQotICAgIGlmICh0dHlmZCA9PSAt MSkgewotCXByaW50ZigiP1NvcnJ5LCBkZXZpY2UgaXMgbm90IG9wZW5cbiIpOwotCXJldHVybigw KTsKLSAgICB9Ci0gICAgaWYgKG5vcHVzaCkgewotCWRlYnVnKEYxMDAsInR0cnVuY21kIGZhaWw6 IG5vcHVzaCIsIiIsMCk7Ci0JcmV0dXJuKDApOwotICAgIH0KLQotI2lmZGVmIE5FVFBUWQotLyoq KioqKioqKioqKioqKgotICBJdCBtaWdodCBhbHNvIGJlIG5lY2Vzc2FyeSB0byB1c2UgdGhlIHB0 eSByb3V0aW5lIGZvciBvdGhlciByZWFzb25zLAotICBlLmcuIGJlY2F1c2UgdGhlIGV4dGVybmFs IHByb2dyYW0gZG9lcyBub3QgdXNlIHN0ZGlvLgotKi8KLSNpZmRlZiBORVRDT05OCi0vKgotICBJ ZiB3ZSBoYXZlIGEgbmV0d29yayBjb25uZWN0aW9uIHdlIHVzZSBhIGRpZmZlcmVudCByb3V0aW5l IGJlY2F1c2UKLSAgKGEpIGlmIHRoZSBjb25uZWN0aW9uIGlzIGVuY3J5cHRlZCwgdGhlIG1lY2hh bmlzbSB1c2VkIGhlcmUgY2FuJ3QgZGVhbAotICB3aXRoIGl0OyBhbmQgKGIpIGl0IHdvbid0IGhh bmRsZSBhbnkgbmV0d29yayBwcm90b2NvbHMgZWl0aGVyLCBlLmcuCi0gIFRlbG5ldCwgUmxvZ2lu LCBLNSBVLXRvLVUsIGV0Yy4gIEhvd2V2ZXIsIHRoaXMgcm91dGluZSB3b3JrcyBtdWNoCi0gIGJl dHRlciAoZmFzdGVyLCBtb3JlIHRyYW5zcGFyZW50KSBvbiBzZXJpYWwgY29ubmVjdGlvbnMgYW5k IHdoZW4KLSAgQy1LZXJtaXQgaXMgaW4gcmVtb3RlIG1vZGUgKGkuZS4gaXMgb24gdGhlIGZhciBl bmQpLgotKi8KLSAgICAvKiBGb3IgdGVzdGluZyBhbHdheXMgdXNlIHRoaXMgKi8KLSAgICBpZiAo bmV0Y29ubikKLSAgICAgIHJldHVybih0dHB0eWNtZChzKSk7Ci0jZW5kaWYgLyogTkVUQ09OTiAq LwotCi0vKioqKioqKioqKioqKioqLwotI2Vsc2UgIC8qIE5FVFBUWSAqLwotICAgIGlmICh0dF9p c19zZWN1cmUoKSkgewotCXByaW50ZigiP1NvcnJ5LCBcCi1leHRlcm5hbCBwcm90b2NvbHMgb3Zl ciBzZWN1cmUgY29ubmVjdGlvbnMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIE9TLlxuIgotICAgICAg ICAgICAgICApOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmCS8qIE5FVFBUWSAq LwotCi0gICAgY29ucmVzKCk7CQkJCS8qIE1ha2UgY29uc29sZSBub3JtYWwgICovCi0gICAgcGV4 aXRzdGF0ID0gLTQ7Ci0gICAgaWYgKChwaWQgPSBmb3JrKCkpID09IDApIHsJCS8qIE1ha2UgYSBj aGlsZCBmb3JrICovCi0JaWYgKHByaXZfY2FuKCkpCQkJLyogQ2hpbGQ6IHR1cm4gb2ZmIHByaXZz LiAqLwotCSAgZXhpdCgxKTsKLQlkdXAyKHR0eWZkLCAwKTsJCQkvKiBHaXZlIHN0ZGluL291dCB0 byB0aGUgbGluZSAqLwotCWR1cDIodHR5ZmQsIDEpOwotCXggPSBzeXN0ZW0ocyk7Ci0JZGVidWco RjEwMSwidHRydW5jbWQgc3lzdGVtIixzLHgpOwotCV9leGl0KHggPyBCQURfRVhJVCA6IDApOwot ICAgIH0gZWxzZSB7Ci0JU0lHVFlQICgqaXN0YXQpKCksICgqcXN0YXQpKCk7Ci0JaWYgKHBpZCA9 PSAoUElEX1QpIC0xKQkJLyogZm9yaygpIGZhaWxlZD8gKi8KLQkgIHJldHVybigwKTsKLQlpc3Rh dCA9IHNpZ25hbChTSUdJTlQsU0lHX0lHTik7IC8qIExldCB0aGUgZm9yayBoYW5kbGUga2V5Ym9h cmQgKi8KLQlxc3RhdCA9IHNpZ25hbChTSUdRVUlULFNJR19JR04pOyAvKiBpbnRlcnJ1cHRzIGl0 c2VsZi4uLiAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgIAl3aGlsZSAoKCh3c3RhdCA9IHdhaXQo JnN0YXR1c3ApKSAhPSBwaWQpICYmICh3c3RhdCAhPSAtMSkpIDsKLSNlbHNlICAvKiBOb3QgQ09N TUVOVCAqLwotICAgIAl3aGlsZSAoMSkgewotCSAgICB3c3RhdCA9IHdhaXQoJnN0YXR1c3ApOwot CSAgICBkZWJ1ZyhGMTAxLCJ0dHJ1bmNtZCB3YWl0IiwiIix3c3RhdCk7Ci0JICAgIGlmICh3c3Rh dCA9PSBwaWQgfHwgd3N0YXQgPT0gLTEpCi0JICAgICAgYnJlYWs7Ci0JfQotI2VuZGlmIC8qIENP TU1FTlQgKi8KLQotCXBleGl0c3RhdCA9IChzdGF0dXNwICYgMHhmZikgPyBzdGF0dXNwIDogc3Rh dHVzcCA+PiA4OwotCWRlYnVnKEYxMDEsInR0cnVuY21kIHdhaXQgc3RhdHVzcCIsIiIsc3RhdHVz cCk7Ci0JZGVidWcoRjEwMSwidHRydW5jbWQgd2FpdCBwZXhpdHN0YXQiLCIiLHBleGl0c3RhdCk7 Ci0Jc2lnbmFsKFNJR0lOVCxpc3RhdCk7CQkvKiBSZXN0b3JlIGludGVycnVwdHMgKi8KLQlzaWdu YWwoU0lHUVVJVCxxc3RhdCk7Ci0gICAgfQotICAgIGNvbmNiKChjaGFyKWVzY2Nocik7CQkvKiBS ZXN0b3JlIGNvbnNvbGUgdG8gQ0JSRUFLIG1vZGUgKi8KLSAgICByZXR1cm4oc3RhdHVzcCA9PSAw ID8gMSA6IDApOwotfQotI2VuZGlmCS8qIENLX1JFRElSICovCi0KLXN0cnVjdCB0bSAqCi0jaWZk ZWYgQ0tfQU5TSUMKLWNtZGF0ZTJ0bShjaGFyICogZGF0ZSwgaW50IGdtdCkgICAgICAgICAvKiBk YXRlIGFzICJ5eXl5bW1kZCBoaDptbTpzcyIgKi8KLSNlbHNlCi1jbWRhdGUydG0oZGF0ZSxnbXQp IGNoYXIgKiBkYXRlOyBpbnQgZ210OwotI2VuZGlmCi17Ci0gICAgLyogZGF0ZSBhcyAieXl5eW1t ZGQgaGg6bW06c3MiICovCi0gICAgc3RhdGljIHN0cnVjdCB0bSBfdG07Ci0gICAgdGltZV90IG5v dzsKLQotICAgIGlmIChzdHJsZW4oZGF0ZSkgIT0gMTcgfHwKLQlkYXRlWzhdICE9ICcgJyB8fAot CWRhdGVbMTFdICE9ICc6JyB8fAotCWRhdGVbMTRdICE9ICc6JykKLSAgICAgIHJldHVybihOVUxM KTsKLQotICAgIHRpbWUoJm5vdyk7Ci0gICAgaWYgKGdtdCkKLSAgICAgIF90bSA9ICpnbXRpbWUo Jm5vdyk7Ci0gICAgZWxzZQotICAgICAgX3RtID0gKmxvY2FsdGltZSgmbm93KTsKLSAgICBfdG0u dG1feWVhciA9IChkYXRlWzBdLScwJykqMTAwMCArIChkYXRlWzFdLScwJykqMTAwICsKLSAgICAg ICAgICAgICAgICAgIChkYXRlWzJdLScwJykqMTAgICArIChkYXRlWzNdLScwJyktMTkwMDsKLSAg ICBfdG0udG1fbW9uICA9IChkYXRlWzRdLScwJykqMTAgICArIChkYXRlWzVdLScwJyktMTsKLSAg ICBfdG0udG1fbWRheSA9IChkYXRlWzZdLScwJykqMTAgICArIChkYXRlWzddLScwJyk7Ci0gICAg X3RtLnRtX2hvdXIgPSAoZGF0ZVs5XS0nMCcpKjEwICAgKyAoZGF0ZVsxMF0tJzAnKTsKLSAgICBf dG0udG1fbWluICA9IChkYXRlWzEyXS0nMCcpKjEwICArIChkYXRlWzEzXS0nMCcpOwotICAgIF90 bS50bV9zZWMgID0gKGRhdGVbMTVdLScwJykqMTAgICsgKGRhdGVbMTZdLScwJyk7Ci0KLSAgICAv KiBTaG91bGQgd2Ugc2V0IF90bS50bV9pc2RzdCB0byAtMSBoZXJlPyAqLwotCi0gICAgX3RtLnRt X3dkYXkgPSAwOwotICAgIF90bS50bV95ZGF5ID0gMDsKLQotICAgIHJldHVybigmX3RtKTsKLX0K LQotI2lmZGVmIE9YT1MKLSN1bmRlZiBraWxsCi0jZW5kaWYgLyogT1hPUyAqLwotCi0jaWZkZWYg T1hPUwotaW50Ci1wcml2X2tpbGwocGlkLCBzaWcpIGludCBwaWQsIHNpZzsgewotICAgIGludAlp OwotCi0gICAgaWYgKHByaXZfb24oKSkKLQlkZWJ1ZyhGMTAwLCJwcml2X2tpbGwgcHJpdl9vbiBm YWlsZWQiLCIiLDApOwotICAgIGkgPSBraWxsKHBpZCwgc2lnKTsKLSAgICBpZiAocHJpdl9vZmYo KSkKLQlkZWJ1ZyhGMTAwLCJwcml2X2tpbGwgcHJpdl9vZmYgZmFpbGVkIiwiIiwwKTsKLSAgICBy ZXR1cm4oaSk7Ci19Ci0jZW5kaWYgLyogT1hPUyAqLwotCi0jaWZkZWYgQkVPU09SQkVCT1gKLS8q ICNpZmRlZiBCRV9EUl83ICovCi0vKgotICBhbGFybSgpIGZ1bmN0aW9uIG5vdCBzdXBwbGllZCB3 aXRoIEJlIE9TIERSNyAtIHRoaXMgb25lIGNvbnRyaWJ1dGVkIGJ5Ci0gIE5lYWwgUC4gTXVycGh5 LgotKi8KLQotLyoKLSAgVGhpcyBzaG91bGQgbWltaWMgdGhlIFVOSVgvUE9TSVggYWxhcm0oKSBm dW5jdGlvbiB3ZWxsIGVub3VnaCwgd2l0aCB0aGUKLSAgY2F2ZWF0IHRoYXQgb25lJ3MgU0lHQUxS TSBoYW5kbGVyIG11c3QgY2FsbCBhbGFybV9leHBpcmVkKCkgdG8gY2xlYW4gdXAgdmFycwotICBh bmQgd2FpdCBmb3IgdGhlIGFsYXJtIHRocmVhZCB0byBmaW5pc2guCi0qLwotdW5zaWduZWQgaW50 Ci1hbGFybSh1bnNpZ25lZCBpbnQgc2Vjb25kcykgewotICAgIGxvbmcgdGltZV9sZWZ0ID0gMDsK LQotLyogSWYgYW4gYWxhcm0gaXMgYWN0aXZlLCB0dXJuIGl0IG9mZiwgc2F2aW5nIHRoZSB1bnVz ZWQgdGltZSAqLwotICAgIGlmIChhbGFybV90aHJlYWQgIT0gLTEpIHsKLSAgICAgICAgLyogV2Un bGwgYmUgZ2VuZXJvdXMgYW5kIGNvdW50IHBhcnRpYWwgc2Vjb25kcyBhcyB3aG9sZSBzZWNvbmRz LiAqLwotICAgICAgICB0aW1lX2xlZnQgPSBhbGFybV9zdHJ1Y3QudGltZSAtCi0JICAoKHN5c3Rl bV90aW1lKCkgLSB0aW1lX3N0YXJ0ZWQpIC8gMTAwMDAwMC4wKTsKLQotICAgICAgICAvKiBLaWxs IHRoZSBhbGFybSB0aHJlYWQgKi8KLSAgICAgICAga2lsbF90aHJlYWQgKGFsYXJtX3RocmVhZCk7 Ci0KLSAgICAgICAgLyogV2UgbmVlZCB0byBjbGVhbiB1cCBhcyB0aG91Z2ggdGhlIGFsYXJtIG9j Y3VyZWQuICovCi0gICAgICAgIHRpbWVfc3RhcnRlZCA9IDA7Ci0gICAgICAgIGFsYXJtX3N0cnVj dC50aHJlYWQgPSAtMTsKLSAgICAgICAgYWxhcm1fc3RydWN0LnRpbWUgPSAwOwotICAgICAgICBh bGFybV9leHBpcmVkKCk7Ci0gICAgfQotCi0vKiBTZXQgYSBuZXcgYWxhcm0gY2xvY2ssIGlmIHJl cXVlc3RlZC4gKi8KLSAgICBpZiAoc2Vjb25kcyA+IDApIHsKLSAgICAgICAgYWxhcm1fc3RydWN0 LnRocmVhZCA9IGZpbmRfdGhyZWFkKE5VTEwpOwotICAgICAgICBhbGFybV9zdHJ1Y3QudGltZSA9 IHNlY29uZHM7Ci0gICAgICAgIHRpbWVfc3RhcnRlZCA9IHN5c3RlbV90aW1lKCk7Ci0gICAgICAg IGFsYXJtX3RocmVhZCA9IHNwYXduX3RocmVhZCAoZG9fYWxhcm0sCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImFsYXJtX3RocmVhZCIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQl9OT1JNQUxfUFJJT1JJVFksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHZvaWQgKikgJmFsYXJtX3N0cnVjdAotCQkJCSAgICAgKTsKLSAg ICAgICAgcmVzdW1lX3RocmVhZCAoYWxhcm1fdGhyZWFkKTsKLSAgICB9Ci0KLS8qIE5vdyByZXR1 cm4gW3VudXNlZCB0aW1lIHwgMF0gKi8KLSAgICByZXR1cm4gKCh1bnNpZ25lZCBpbnQpIHRpbWVf bGVmdCk7Ci19Ci0KLS8qCi0gIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGRlcGFydHVyZSBmcm9tIFVO SVgvUE9TSVggYWxhcm0gaGFuZGxpbmcuIEluIHRoZSBjYXNlCi0gIG9mIEJlJ3MgbWlzc2luZyBh bGFybSgpIGZ1bmN0aW9uLCB0aGlzIHN0dWZmIG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhlIFNJR0FM Uk0KLSAgaGFuZGxlci4gV2hlbiBCZSBpbXBsZW1lbnRzIGFsYXJtKCksIHRoaXMgZnVuY3Rpb24g Y2FsbCBjYW4gYmUgZWxpbWluYXRlZAotICBmcm9tIHVzZXIncyBTSUdBTFJNIHNpZ25hbCBoYW5k bGVycy4KLSovCi0KLXZvaWQKLWFsYXJtX2V4cGlyZWQodm9pZCkgewotICAgIGxvbmcgcmV0X3Zh bDsKLQotICAgIGlmIChhbGFybV90aHJlYWQgIT0gLTEpIHsKLSAgICAgICAgd2FpdF9mb3JfdGhy ZWFkIChhbGFybV90aHJlYWQsICZyZXRfdmFsKTsKLSAgICAgICAgYWxhcm1fdGhyZWFkID0gLTE7 Ci0gICAgfQotfQotCi0vKgotICBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHNub296ZXMgdGhl IHJlcXVpc2l0ZSBudW1iZXIgb2Ygc2Vjb25kcyBhbmQgdGhlbgotICBTSUdBTFJNcyB0aGUgY2Fs bGluZyB0aHJlYWQuIE5vdGUgdGhhdCBraWxsKCkgd2FudHMgYSBwaWRfdCBhcmcsIHdoaWxzdCBC ZQotICB1c2VzIHRocmVhZF9pZDsgY3VycmVudGx5IHRoZXkgYXJlIGJvdGggdHlwZGVmJ2VkIGFz IGxvbmcsIGJ1dCBJJ2xsIGRvIHRoZQotICBjYXN0IGFueXdheS4gVGhpcyBmdW5jdGlvbiBpcyBy dW4gaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCi0qLwotCi1sb25nCi1kb19hbGFybSAodm9pZCAqYWxh cm1fc3RydWN0KSB7Ci0gICAgc25vb3plICgoZG91YmxlKSAoKHN0cnVjdCBBTEFSTV9TVFJVQ1Qg KikgYWxhcm1fc3RydWN0KS0+dGltZSAqIDEwMDAwMDAuMCk7Ci0gICAga2lsbCAoKHBpZF90KSgo c3RydWN0IEFMQVJNX1NUUlVDVCAqKSBhbGFybV9zdHJ1Y3QpLT50aHJlYWQsIFNJR0FMUk0pOwot ICAgIHRpbWVfc3RhcnRlZCA9IDA7Ci0gICAgKChzdHJ1Y3QgQUxBUk1fU1RSVUNUICopIGFsYXJt X3N0cnVjdCktPnRocmVhZCA9IC0xOwotICAgICgoc3RydWN0IEFMQVJNX1NUUlVDVCAqKSBhbGFy bV9zdHJ1Y3QpLT50aW1lID0gMDsKLX0KLS8qICNlbmRpZiAqLyAvKiBCRV9EUl83ICovCi0jZW5k aWYgLyogQkVPU09SQkVCT1ggKi8KLQotI2lmZGVmIFBsYW45Ci0KLWludAotcDl0dHljdGwoY2hh ciBsZXR0ZXIsIGludCBudW0sIGludCBwYXJhbSkgewotICAgIGNoYXIgY21kWzIwXTsKLSAgICBp bnQgbGVuOwotCi0gICAgaWYgKHR0eWN0bGZkIDwgMCkKLSAgICAgIHJldHVybiAtMTsKLQotICAg IGNtZFswXSA9IGxldHRlcjsKLSAgICBpZiAobnVtKQotICAgICAgbGVuID0gc3ByaW50ZihjbWQg KyAxLCAiJWQiLCBwYXJhbSkgKyAxOwotICAgIGVsc2UgewotCWNtZFsxXSA9IHBhcmFtOwotCWxl biA9IDI7Ci0gICAgfQotICAgIGlmICh3cml0ZSh0dHljdGxmZCwgY21kLCBsZW4pID09IGxlbikg ewotCWNtZFtsZW5dID0gMDsKLQkvKiBmcHJpbnRmKHN0ZG91dCwgIndyb3RlICclcydcbiIsIGNt ZCk7ICovCi0JcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotaW50Ci1wOXR0 eXBhcml0eShjaGFyIGwpIHsKLSAgICByZXR1cm4gcDl0dHljdGwoJ3AnLCAwLCBsKTsKLX0KLQot aW50Ci1wOXR0aGZsb3coaW50IGZsb3csIGludCBzdGF0dXMpIHsKLSAgICByZXR1cm4gcDl0dHlj dGwoJ20nLCAxLCBzdGF0dXMpOwotfQotCi1pbnQKLXA5dHRzc3BkKGludCBjcHMpIHsKLSAgICBp ZiAocDl0dHljdGwoJ2InLCAxLCBjcHMgKiAxMCkgPCAwKQotICAgICAgcmV0dXJuIC0xOwotICAg IHR0eWxhc3RzcGVlZCA9IGNwcyAqIDEwOwotICAgIHJldHVybiAwOwotfQotCi1pbnQKLXA5b3Bl bnR0eWN0bChjaGFyICp0dG5hbWUpIHsKLSAgICBjaGFyIG5hbWVbMTAwXTsKLQotICAgIGlmICh0 dHljdGxmZCA+PSAwKSB7Ci0JY2xvc2UodHR5Y3RsZmQpOwotCXR0eWN0bGZkID0gLTE7Ci0JdHR5 bGFzdHNwZWVkID0gLTE7Ci0gICAgfQotICAgIHNwcmludGYobmFtZSwgIiVzY3RsIiwgdHRuYW1l KTsKLSAgICB0dHljdGxmZCA9IG9wZW4obmFtZSwgMSk7Ci0gICAgcmV0dXJuIHR0eWN0bGZkOwot fQotCi1pbnQKLXA5Y29uY2IoKSB7Ci0gICAgaWYgKGNvbnNjdGxmZCA+PSAwKSB7Ci0JaWYgKHdy aXRlKGNvbnNjdGxmZCwgInJhd29uIiwgNSkgPT0gNSkKLQkgIHJldHVybiAwOwotICAgIH0KLSAg ICByZXR1cm4gLTE7Ci19Ci0KLWludAotcDljb25iaW4oKSB7Ci0gICAgcmV0dXJuIHA5Y29uY2Io KTsKLX0KLQotaW50Ci1wOWNvbnJlcygpIHsKLSAgICBpZiAoY29uc2N0bGZkID49IDApIHsKLQlp ZiAod3JpdGUoY29uc2N0bGZkLCAicmF3b2ZmIiwgNikgPT0gNikKLQkgIHJldHVybiAwOwotICAg IH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWludAotcDlzbmRicmsoaW50IG1zZWMpIHsKLSAgICBp ZiAodHR5Y3RsZmQgPj0gMCkgewotCWNoYXIgY21kWzIwXTsKLQlpbnQgaSA9IHNwcmludGYoY21k LCAiayVkIiwgbXNlYyk7Ci0JaWYgKHdyaXRlKHR0eWN0bGZkLCBjbWQsIGkpID09IGkpCi0JICBy ZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQKLWNvbndyaXRlKGNoYXIg KmJ1ZiwgaW50IG4pIHsKLSAgICBpbnQgeDsKLSAgICBzdGF0aWMgaW50IGxlbmd0aCA9IDA7Ci0g ICAgc3RhdGljIGludCBob2xkaW5nY3IgPSAwOwotICAgIGludCBub3JtYWwgPSAwOwotICAgIGZv ciAoeCA9IDA7IHggPCBuOyB4KyspIHsKLQljaGFyIGMgPSBidWZbeF07Ci0JaWYgKGMgPT0gMDA3 KSB7Ci0JICAgIGlmIChub3JtYWwpIHsKLQkJd3JpdGUoMSwgYnVmICsgKHggLSBub3JtYWwpLCBu b3JtYWwpOwotCQlsZW5ndGggKz0gbm9ybWFsOwotCQlub3JtYWwgPSAwOwotCSAgICB9Ci0JICAg IC8qIHdyaXRlKG5vaXNlZmQsICIxMDAwIDMwMCIsIDgpOyAqLwotCSAgICBob2xkaW5nY3IgPSAw OwotCX0gZWxzZSBpZiAoYyA9PSAnXHInKSB7Ci0JICAgIGlmIChub3JtYWwpIHsKLQkJd3JpdGUo MSwgYnVmICsgKHggLSBub3JtYWwpLCBub3JtYWwpOwotCQlsZW5ndGggKz0gbm9ybWFsOwotCQlu b3JtYWwgPSAwOwotCSAgICB9Ci0JICAgIGhvbGRpbmdjciA9IDE7Ci0JfSBlbHNlIGlmIChjID09 ICdcbicpIHsKLQkgICAgd3JpdGUoMSwgYnVmICsgKHggLSBub3JtYWwpLCBub3JtYWwgKyAxKTsK LQkgICAgbm9ybWFsID0gMDsKLQkgICAgbGVuZ3RoID0gMDsKLQkgICAgaG9sZGluZ2NyID0gMDsK LQl9IGVsc2UgaWYgKGMgPT0gJ1xiJykgewotCSAgICBpZiAobm9ybWFsKSB7Ci0JCXdyaXRlKDEs IGJ1ZiArICh4IC0gbm9ybWFsKSwgbm9ybWFsKTsKLQkJbGVuZ3RoICs9IG5vcm1hbDsKLQkJbm9y bWFsID0gMDsKLQkgICAgfQotCSAgICBpZiAobGVuZ3RoKSB7Ci0JCXdyaXRlKDEsICZjLCAxKTsK LQkJbGVuZ3RoLS07Ci0JICAgIH0KLQkgICAgaG9sZGluZ2NyID0gMDsKLQl9IGVsc2UgewotCSAg ICBpZiAoaG9sZGluZ2NyKSB7Ci0JCWNoYXIgYiA9ICdcYic7Ci0JCXdoaWxlIChsZW5ndGgtLSA+ IDApCi0JCSAgd3JpdGUoMSwgJmIsIDEpOwotCQlsZW5ndGggPSAwOwkvKiBjb21waWxlciBidWcg Ki8KLQkgICAgfQotCSAgICBob2xkaW5nY3IgPSAwOwotCSAgICBub3JtYWwrKzsKLQl9Ci0gICAg fQotICAgIGlmIChub3JtYWwpIHsKLQl3cml0ZSgxLCBidWYgKyAoeCAtIG5vcm1hbCksIG5vcm1h bCk7Ci0JbGVuZ3RoICs9IG5vcm1hbDsKLSAgICB9Ci0gICAgcmV0dXJuIG47Ci19Ci0KLXZvaWQK LWNvbnByaW50KGNoYXIgKmZtdCwgLi4uKSB7Ci0gICAgc3RhdGljIGNoYXIgYnVmWzEwMDBdOwkJ Lyogbm90IHNhZmUgaWYgb24gdGhlIHN0YWNrICovCi0KLSAgICB2YV9saXN0IGFwOwotICAgIGlu dCBpOwotCi0gICAgdmFfc3RhcnQoYXAsIGZtdCk7Ci0gICAgaSA9IHZzcHJpbnRmKGJ1ZiwgZm10 LCBhcCk7Ci0gICAgY29ud3JpdGUoYnVmLCBpKTsKLX0KLSNlbmRpZiAvKiBQbGFuOSAqLwotCi0v KiBmcHJpbnRmLCBwcmludGYsIHBlcnJvciByZXBsYWNlbWVudHMuLi4gKi8KLQotLyogZiBwIHIg aSBuIHQgZiAqLwotCi0jaWZkZWYgVU5JWAotI2lmZGVmIENLX0FOU0lDCi0jaW5jbHVkZSA8c3Rk YXJnLmg+Ci0jZWxzZSAvKiBDS19BTlNJQyAqLwotI2lmZGVmIF9fR05VQ19fCi0jaW5jbHVkZSA8 c3RkYXJnLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHZhcmFyZ3MuaD4KLSNlbmRpZgkvKiBfX0dOVUNf XyAqLwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0jaWZkZWYgZnByaW50ZgotI3VuZGVmIGZwcmlu dGYKLXN0YXRpYyBjaGFyIHN0cjFbNDA5Nl07Ci1zdGF0aWMgY2hhciBzdHIyWzQwOTZdOwotaW50 Ci0jaWZkZWYgQ0tfQU5TSUMKLWNreGZwcmludGYoRklMRSAqIGZpbGUsIGNvbnN0IGNoYXIgKiBm b3JtYXQsIC4uLikKLSNlbHNlIC8qIENLX0FOU0lDICovCi1ja3hmcHJpbnRmKHZhX2FsaXN0KSB2 YV9kY2wKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogY2t4ZnByaW50ZiAqLyB7Ci0gICAgaW50 IGksIGosIGxlbiwgZ290X2NyOwotICAgIHZhX2xpc3QgYXJnczsKLSAgICBpbnQgcmMgPSAwOwot Ci0jaWZkZWYgQ0tfQU5TSUMKLSAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotI2Vsc2UgLyog Q0tfQU5TSUMgKi8KLSAgICBjaGFyICogZm9ybWF0OwotICAgIEZJTEUgKiBmaWxlOwotICAgIHZh X3N0YXJ0KGFyZ3MpOwotICAgIGZpbGUgPSB2YV9hcmcoYXJncyxGSUxFICopOwotICAgIGZvcm1h dCA9IHZhX2FyZyhhcmdzLGNoYXIgKik7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLQotICAgIGlm ICghaW5zZXJ2ZXIgfHwgKGZpbGUgIT0gc3Rkb3V0ICYmIGZpbGUgIT0gc3RkZXJyICYmIGZpbGUg IT0gc3RkaW4pKSB7Ci0JcmMgPSB2ZnByaW50ZihmaWxlLGZvcm1hdCxhcmdzKTsKLSAgICB9IGVs c2UgewotCXVuc2lnbmVkIGludCBjOwotICAgICAgICByYyA9IHZzcHJpbnRmKHN0cjEsIGZvcm1h dCwgYXJncyk7Ci0gICAgICAgIGxlbiA9IHN0cmxlbihzdHIxKTsKLSAgICAgICAgaWYgKGxlbiA+ PSBzaXplb2Yoc3RyMSkpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImNreGZwcmludGYoKSBi dWZmZXIgb3ZlcmZsb3ciLCIiLGxlbik7Ci0gICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMSk7 Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpID0gMCwgaiA9IDAsIGdvdF9jciA9IDA7Ci0JICAg ICBpIDwgbGVuICYmIGogPCBzaXplb2Yoc3RyMSktMjsKLQkgICAgIGkrKywgaisrICkgewotCSAg ICAvKiBXZSBjYW4ndCB1c2UgMjU1IGFzIGEgY2FzZSBsYWJlbCBiZWNhdXNlIG9mIHNpZ25lZCBj aGFycyAqLwotCSAgICBjID0gKHVuc2lnbmVkKShzdHIxW2ldICYgMHhmZik7Ci0jaWZkZWYgVE5D T0RFCi0JICAgIGlmIChjID09IDI1NSkgewotCQlpZiAoZ290X2NyICYmICFURUxPUFRfTUUoVEVM T1BUX0JJTkFSWSkpCi0JCSAgc3RyMltqKytdID0gJ1wwJzsKLQkJc3RyMltqKytdID0gSUFDOwot CQlzdHIyW2pdID0gSUFDOwotCQlnb3RfY3IgPSAwOwotCSAgICB9IGVsc2UKLSNlbmRpZiAvKiBU TkNPREUgKi8KLQkgICAgc3dpdGNoIChjKSB7Ci0JICAgICAgY2FzZSAnXHInOgotICAgICAgICAg ICAgICAgIGlmIChnb3RfY3IKLSNpZmRlZiBUTkNPREUKLQkJICAgICYmICFURUxPUFRfTUUoVEVM T1BUX0JJTkFSWSkKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQkJICAgICkKLQkJICBzdHIyW2orK10g PSAnXDAnOwotICAgICAgICAgICAgICAgIHN0cjJbal0gPSBzdHIxW2ldOwotICAgICAgICAgICAg ICAgIGdvdF9jciA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0JICAgICAgY2FzZSAnXG4n OgotICAgICAgICAgICAgICAgIGlmICghZ290X2NyKQotCQkgIHN0cjJbaisrXSA9ICdccic7Ci0g ICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0cjFbaV07Ci0gICAgICAgICAgICAgICAgZ290X2Ny ID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQkgICAgICBkZWZhdWx0OgotICAgICAgICAg ICAgICAgIGlmIChnb3RfY3IKLSNpZmRlZiBUTkNPREUKLQkJICAgICYmICFURUxPUFRfTUUoVEVM T1BUX0JJTkFSWSkKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQkJICAgICkKLQkJICBzdHIyW2orK10g PSAnXDAnOwotICAgICAgICAgICAgICAgIHN0cjJbal0gPSBzdHIxW2ldOwotICAgICAgICAgICAg ICAgIGdvdF9jciA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGdv dF9jcgotI2lmZGVmIFROQ09ERQotICAgICAgICAgICAgICYmICFURUxPUFRfTUUoVEVMT1BUX0JJ TkFSWSkKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICAgICAgICAgICApCi0gICAgICAgICAgICBz dHIyW2orK10gPSAnXDAnOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSNpZmRlZiBUTkNPREUKLSAg ICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpCi0JICBja190bl9lbmNyeXB0 KHN0cjIsaik7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LwotI2lmZGVmIENLX1NTTAotCWlmIChpbnNlcnZlciAmJiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRs c19hY3RpdmVfZmxhZykpIHsKLQkgICAgLyogV3JpdGUgdXNpbmcgU1NMICovCi0gICAgICAgICAg ICBjaGFyICogcCA9IHN0cjI7Ci0gICAgICAgICAgc3NsX3JldHJ5OgotICAgICAgICAgICAgaWYg KHNzbF9hY3RpdmVfZmxhZykKLQkgICAgICByYyA9IFNTTF93cml0ZShzc2xfY29uLCBwLCBqKTsK LSAgICAgICAgICAgIGVsc2UKLQkgICAgICByYyA9IFNTTF93cml0ZSh0bHNfY29uLCBwLCBqKTsK LQkgICAgZGVidWcoRjExMSwiY2t4ZnByaW50ZiIsIlNTTF93cml0ZSIscmMpOwotICAgICAgICAg ICAgc3dpdGNoIChTU0xfZ2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24s cmMpKSB7Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKLSAgICAgICAgICAgICAgICBpZiAo cmMgPT0gaikKLQkJICBicmVhazsKLSAgICAgICAgICAgICAgICBwICs9IHJjOwotICAgICAgICAg ICAgICAgIGogLT0gcmM7Ci0gICAgICAgICAgICAgICAgZ290byBzc2xfcmV0cnk7Ci0JICAgICAg Y2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JF QUQ6Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKLSAgICAgICAgICAgICAgICBpZiAo cmMgIT0gMCkKLQkJICByZXR1cm4oLTEpOwotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUw OV9MT09LVVA6Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgotCSAgICAgIGNhc2UgU1NMX0VS Uk9SX1pFUk9fUkVUVVJOOgotCSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmMgPSAw OwotICAgICAgICAgICAgfQotCX0gZWxzZQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICBm d3JpdGUoc3RyMixzaXplb2YoY2hhciksaixzdGRvdXQpOwotICAgIH0KLSAgICB2YV9lbmQoYXJn cyk7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLSNlbmRpZiAvKiBmcHJpbnRmICovCi0KLS8qIHAgciBp IG4gdCBmICovCi0KLSNpZmRlZiBwcmludGYKLSN1bmRlZiBwcmludGYKLWludAotI2lmZGVmIENL X0FOU0lDCi1ja3hwcmludGYoY29uc3QgY2hhciAqIGZvcm1hdCwgLi4uKQotI2Vsc2UgLyogQ0tf QU5TSUMgKi8KLWNreHByaW50Zih2YV9hbGlzdCkgdmFfZGNsCi0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLS8qIGNreHByaW50ZiAqLyB7Ci0gICAgaW50IGksIGosIGxlbiwgZ290X2NyOwotICAgIHZh X2xpc3QgYXJnczsKLSAgICBpbnQgcmMgPSAwOwotCi0jaWZkZWYgQ0tfQU5TSUMKLSAgICB2YV9z dGFydChhcmdzLCBmb3JtYXQpOwotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLSAgICBjaGFyICogZm9y bWF0OwotICAgIHZhX3N0YXJ0KGFyZ3MpOwotICAgIGZvcm1hdCA9IHZhX2FyZyhhcmdzLGNoYXIg Kik7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLQotICAgIGlmICghaW5zZXJ2ZXIpIHsKLQlyYyA9 IHZwcmludGYoZm9ybWF0LCBhcmdzKTsKLSAgICB9IGVsc2UgewotCXVuc2lnbmVkIGludCBjOwot ICAgICAgICByYyA9IHZzcHJpbnRmKHN0cjEsIGZvcm1hdCwgYXJncyk7Ci0gICAgICAgIGxlbiA9 IHN0cmxlbihzdHIxKTsKLSAgICAgICAgaWYgKGxlbiA+PSBzaXplb2Yoc3RyMSkpIHsKLSAgICAg ICAgICAgIGRlYnVnKEYxMDEsImNreHByaW50ZigpIGJ1ZmZlciBvdmVyZmxvdyIsIiIsbGVuKTsK LSAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwxKTsKLSAgICAgICAgfQotICAgICAgICBmb3Ig KGkgPSAwLCBqID0gMCwgZ290X2NyPTA7Ci0JICAgICBpIDwgbGVuICYmIGogPCBzaXplb2Yoc3Ry MSktMjsKLQkgICAgIGkrKywgaisrICkgewotCSAgICBjID0gKHVuc2lnbmVkKShzdHIxW2ldICYg MHhmZik7Ci0jaWZkZWYgVE5DT0RFCi0JICAgIGlmIChjID09IDI1NSkgewotCQlpZiAoZ290X2Ny ICYmICFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpCi0JCSAgc3RyMltqKytdID0gJ1wwJzsKLQkJ c3RyMltqKytdID0gSUFDOwotCQlzdHIyW2pdID0gSUFDOwotCQlnb3RfY3IgPSAwOwotCSAgICB9 IGVsc2UKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQkgICAgc3dpdGNoIChjKSB7Ci0JICAgICAgY2Fz ZSAnXHInOgotICAgICAgICAgICAgICAgIGlmIChnb3RfY3IKLSNpZmRlZiBUTkNPREUKLQkJICAg ICYmICFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQkJICAg ICkKLQkJICBzdHIyW2orK10gPSAnXDAnOwotICAgICAgICAgICAgICAgIHN0cjJbal0gPSBzdHIx W2ldOwotICAgICAgICAgICAgICAgIGdvdF9jciA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0JICAgICAgY2FzZSAnXG4nOgotICAgICAgICAgICAgICAgIGlmICghZ290X2NyKQotCQkgIHN0 cjJbaisrXSA9ICdccic7Ci0gICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0cjFbaV07Ci0gICAg ICAgICAgICAgICAgZ290X2NyID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQkgICAgICBk ZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChnb3RfY3IKLSNpZmRlZiBUTkNPREUKLQkJICAg ICYmICFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQkJICAg ICkKLQkJICBzdHIyW2orK10gPSAnXDAnOwotICAgICAgICAgICAgICAgIHN0cjJbal0gPSBzdHIx W2ldOwotICAgICAgICAgICAgICAgIGdvdF9jciA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0JICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZ290X2NyCi0jaWZkZWYgVE5DT0RFCi0g ICAgICAgICAgICAgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKQotI2VuZGlmIC8qIFROQ09E RSAqLwotICAgICAgICAgICAgICkKLSAgICAgICAgICAgIHN0cjJbaisrXSA9ICdcMCc7Ci0jaWZk ZWYgQ0tfRU5DUllQVElPTgotI2lmZGVmIFROQ09ERQotICAgICAgICBpZiAoVEVMT1BUX01FKFRF TE9QVF9FTkNSWVBUSU9OKSkKLQkgIGNrX3RuX2VuY3J5cHQoc3RyMixqKTsKLSNlbmRpZiAvKiBU TkNPREUgKi8KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi0JaWYg KGluc2VydmVyICYmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSkgewotICAg ICAgICAgICAgY2hhciAqIHAgPSBzdHIyOwotCSAgICAvKiBXcml0ZSB1c2luZyBTU0wgKi8KLSAg ICAgICAgICBzc2xfcmV0cnk6Ci0gICAgICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnKQotCSAg ICAgIHJjID0gU1NMX3dyaXRlKHNzbF9jb24sIHAsIGopOwotICAgICAgICAgICAgZWxzZQotCSAg ICAgIHJjID0gU1NMX3dyaXRlKHRsc19jb24sIHAsIGopOwotCSAgICBkZWJ1ZyhGMTExLCJja3hw cmludGYiLCJTU0xfd3JpdGUiLHJjKTsKLSAgICAgICAgICAgIHN3aXRjaCAoU1NMX2dldF9lcnJv cihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLHJjKSkgewotCSAgICAgIGNhc2UgU1NM X0VSUk9SX05PTkU6Ci0gICAgICAgICAgICAgICAgaWYgKHJjID09IGopCi0JCSAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgcCArPSByYzsKLSAgICAgICAgICAgICAgICBqIC09IHJjOwotICAgICAg ICAgICAgICAgIGdvdG8gc3NsX3JldHJ5OwotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJ VEU6Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotCSAgICAgIGNhc2UgU1NMX0VS Uk9SX1NZU0NBTEw6Ci0gICAgICAgICAgICAgICAgaWYgKHJjICE9IDApCi0JCSAgcmV0dXJuKC0x KTsKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgotCSAgICAgIGNhc2Ug U1NMX0VSUk9SX1NTTDoKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKLQkgICAg ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgIH0KLQl9IGVs c2UKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQkgIHJjID0gZndyaXRlKHN0cjIsc2l6ZW9mKGNoYXIp LGosc3Rkb3V0KTsKLSAgICB9Ci0gICAgdmFfZW5kKGFyZ3MpOwotICAgIHJldHVybihyYyk7Ci19 Ci0jZW5kaWYgLyogcHJpbnRmICovCi0KLS8qICBwIGUgciByIG8gciAgKi8KLQotI2lmZGVmIHBl cnJvcgotI3VuZGVmIHBlcnJvcgotX1BST1RPVFlQKGNoYXIgKiBja19lcnJzdHIsKFZPSUQpKTsK LSNpZmRlZiBORVhUCi12b2lkCi0jZWxzZQotI2lmZGVmIENLX1NDT1Y1Ci12b2lkCi0jZWxzZQot aW50Ci0jZW5kaWYgLyogQ0tfU0NPVjUgKi8KLSNlbmRpZiAvKiBORVhUICovCi0jaWZkZWYgQ0tf QU5TSUMKLWNreHBlcnJvcihjb25zdCBjaGFyICogc3RyKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8K LWNreHBlcnJvcihzdHIpIGNoYXIgKiBzdHI7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGNr eHBlcnJvciAqLyB7Ci0gICAgY2hhciAqIGVycnN0ciA9IGNrX2VycnN0cigpOwotI2lmbmRlZiBO RVhUCi0jaWZuZGVmIENLX1NDT1Y1Ci0gICAgcmV0dXJuCi0jZW5kaWYgLyogQ0tfU0NPVjUgKi8K LSNlbmRpZiAvKiBORVhUICovCi0gICAgICBja3hwcmludGYoIiVzJXMgJXNcbiIsc3RyLCplcnJz dHI/IjoiOiIiLGVycnN0cik7Ci19Ci0jZW5kaWYgLyogcGVycm9yICovCi0jZW5kaWYgLyogVU5J WCAqLwotCi0jaWZkZWYgTUlOSVgyCi0KLS8qIE1pbml4IGRvZXNuJ3QgaGF2ZSBhIGdldHRpbWVv ZmRheSBjYWxsIChidXQgTUlOSVgzIGRvZXMpLgotICogV2UgZmFrZSBvbmUgaGVyZSB1c2luZyB0 aW1lKDIpCi0gKi8KLQotI2lmbmRlZiBNSU5JWDMKLWludAotZ2V0dGltZW9mZGF5KHN0cnVjdCB0 aW1ldmFsICp0cCwgc3RydWN0IHRpbWV6b25lICp0enApIHsKLSAgICB0cC0+dHZfdXNlYyA9IDBM OwkJCS8qIENsb3NlIGVub3VnaCBmb3IgaG9yc2VzaG9lcyAqLwotICAgIGlmKHRpbWUoJih0cC0+ dHZfc2VjKSk9PS0xKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5k aWYJLyogTUlOSVgzICovCi0KLSNpZm5kZWYgTUlOSVgzCi1pbnQKLXJlYWRsaW5rKGNvbnN0IGNo YXIgKnBhdGgsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnNpeikgewotICAgIGVycm5vID0gRU5PU1lT OwotICAgIHJldHVybigtMSk7Ci19Ci0jZW5kaWYJLyogTUlOSVgzICovCi0KLSNlbmRpZiAvKiBN SU5JWDIgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrdXR1dG9yLnR4dCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIv Y2t1dHV0b3IudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhZWJlLi4wMDAw MDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dHV0b3Iu dHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTk0OCArMCwwIEBACi0KLSAgIFsxXVRoZSBDb2x1bWJp YSBDcm93biBUaGUgS2VybWl0IFByb2plY3QgfCBDb2x1bWJpYSBVbml2ZXJzaXR5Ci0gICA2MTIg V2VzdCAxMTV0aCBTdHJlZXQsIE5ldyBZb3JrIE5ZIDEwMDI1IFVTQSBvIFsyXWtlcm1pdEBjb2x1 bWJpYS5lZHUKLSAgIC4uLnNpbmNlIDE5ODEKLSAgIFszXUhvbWUgWzRdS2VybWl0IDk1IFs1XUMt S2VybWl0IFs2XVNjcmlwdHMgWzddQ3VycmVudCBbOF1OZXcgWzldRkFRCi0gICBbMTBdU3VwcG9y dAotCi0gICBDLUtFUk1JVCA5LjAgVU5JWCBNQU5VQUwgUEFHRSBBTkQgVFVUT1JJQUwKLQotICAg ICBGcmFuayBkYSBDcnV6Ci0gICAgIFsxMV1UaGUgS2VybWl0IFByb2plY3QsIFsxMl1Db2x1bWJp YSBVbml2ZXJzaXR5Ci0KLSAgIFsgWzEzXVBERiB2ZXJzaW9uIF0gWyBbMTRdTnJvZmYgdmVyc2lv biBdCi0KLSAgICAgVGhpcyBkb2N1bWVudCBpcyBpbnRlbmRlZCB0byBnaXZlIHRoZSBiZWdpbm5l ciBzdWZmaWNpZW50Ci0gICAgIGluZm9ybWF0aW9uIHRvIG1ha2UgYmFzaWMgKGlmIG5vdCBhZHZh bmNlZCkgdXNlIG9mIEMtS2VybWl0IDkuMC4KLSAgICAgQWx0aG91Z2ggaXQgbWlnaHQgYmUgcmF0 aGVyIGxvbmcgZm9yIGEgVW5peCBtYW51YWwgcGFnZSAoYWJvdXQgMTYwMAotICAgICBsaW5lcyks IGl0J3Mgc3RpbGwgZmFyIHNob3J0ZXIgdGhhbiB0aGUgWzE1XUMtS2VybWl0IG1hbnVhbCwgd2hp Y2gKLSAgICAgc2hvdWxkIGJlIGNvbnN1bHRlZCBmb3IgYWR2YW5jZWQgdG9waWNzIHN1Y2ggYXMg Y3VzdG9taXphdGlvbiwKLSAgICAgY2hhcmFjdGVyLXNldHMsIHNjcmlwdGluZywgZXRjLiBXZSBh bHNvIGF0dGVtcHQgdG8gcHJvdmlkZSBhIGNsZWFyCi0gICAgIHN0cnVjdHVyYWwgb3ZlcnZpZXcg b2YgQy1LZXJtaXQncyBtYW55IGNhcGFiaWxpdGllcywgZnVuY3Rpb25hbAotICAgICBhcmVhcywg c3RhdGVzLCBhbmQgbW9kZXMgYW5kIHRoZWlyIGludGVycmVsYXRpb24sIHRoYXQgc2hvdWxkIGJl Ci0gICAgIGhlbHBmdWwgdG8gYmVnaW5uZXJzIGFuZCB2ZXRlcmFucyBhbGlrZSwgYXMgd2VsbCBh cyB0byB0aG9zZQotICAgICB1cGdyYWRpbmcgdG8gdGhlIG5ldyByZWxlYXNlLiBUaGFua3MgdG8g Q2hyaXN0aW5lIEdpYW5vbmUgZm9yIGhlcgotICAgICB3b3JrIG9uIHRoaXMgZG9jdW1lbnQgYmVm b3JlIHNoZSB3YXMgbGFpZCBvZmYgaW4gMjAwNS4KLQotICAgTW9zdCByZWNlbnQgdXBkYXRlOiBG cmkgSnVsIDEgMTQ6MTI6MzEgMjAxMQotCi1DT05URU5UUwotCi0gICAgICogWzE2XURFU0NSSVBU SU9OCi0gICAgICogWzE3XVNZTk9QU0lTCi0gICAgICogWzE4XU9QVElPTlMKLSAgICAgKiBbMTld Q09NTUFORCBMQU5HVUFHRQotICAgICAqIFsyMF1JTklUSUFMSVpBVElPTiBGSUxFCi0gICAgICog WzIxXU1PREVTIE9GIE9QRVJBVElPTgotICAgICAqIFsyMl1NQUtJTkcgQ09OTkVDVElPTlMKLSAg ICAgKiBbMjNdVFJBTlNGRVJSSU5HIEZJTEVTIFdJVEggS0VSTUlUCi0gICAgICogWzI0XUtFUk1J VCBDTElFTlQvU0VSVkVSIENPTk5FQ1RJT05TCi0KLSAgICAgKiBbMjVdS0VSTUlUJ1MgQlVJTFQt SU4gRlRQIEFORCBIVFRQIENMSUVOVFMKLSAgICAgKiBbMjZdSU5URVJORVQgS0VSTUlUIFNFUlZJ Q0UKLSAgICAgKiBbMjddU0VDVVJJVFkKLSAgICAgKiBbMjhdQUxURVJOQVRJVkUgQ09NTUFORC1M SU5FIFBFUlNPTkFMSVRJRVMKLSAgICAgKiBbMjldTElDRU5TRQotICAgICAqIFszMF1PVEhFUiBU T1BJQ1MKLSAgICAgKiBbMzFdRE9DVU1FTlRBVElPTiBBTkQgVVBEQVRFUwotICAgICAqIFszMl1G SUxFUwotICAgICAqIFszM11BVVRIT1JTCi0KLURFU0NSSVBUSU9OCi0KLSAgIFszNF1Ub3AgICBb MzVdQ29udGVudHMgICBbMzZdTmV4dAotCi0gICBbMzddQy1LZXJtaXQgaXMgYW4gYWxsLXB1cnBv c2UgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUgcGFja2FnZSBmcm9tIHRoZQotICAgWzM4XUtlcm1p dCBQcm9qZWN0IGF0IFszOV1Db2x1bWJpYSBVbml2ZXJzaXR5IHRoYXQ6Ci0KLSAgICAgKiBJcyBw b3J0YWJsZSB0byBtYW55IHBsYXRmb3JtcywgVW5peCBhbmQgbm9uLVVuaXggYWxpa2UuCi0gICAg ICogQ2FuIG1ha2UgYm90aCBzZXJpYWwgYW5kIG5ldHdvcmsgY29ubmVjdGlvbnMuCi0gICAgICog Q2FuIGNvbmR1Y3QgaW50ZXJhY3RpdmUgdGVybWluYWwgc2Vzc2lvbnMgb3ZlciBpdHMgY29ubmVj dGlvbi4KLSAgICAgKiBDYW4gdHJhbnNmZXIgdGV4dCBvciBiaW5hcnkgZmlsZXMgb3ZlciB0aGUg c2FtZSBjb25uZWN0aW9uLgotICAgICAqIENhbiBjb252ZXJ0IHRleHQtZmlsZSBjaGFyYWN0ZXIg c2V0cyBpbiB0ZXJtaW5hbCBtb2RlIG9yIGZpbGUKLSAgICAgICB0cmFuc2Zlci4KLSAgICAgKiBJ cyBjdXN0b21pemFibGUgaW4gZXZlcnkgYXNwZWN0IG9mIGl0cyBvcGVyYXRpb24uCi0KLSAgIEMt S2VybWl0IGlzIGEgbW9kZW0gcHJvZ3JhbSwgYSBUZWxuZXQgY2xpZW50LCBhbiBSbG9naW4gY2xp ZW50LCBhbiBGVFAKLSAgIGNsaWVudCwgYW4gSFRUUCBjbGllbnQsIGFuZCBvbiBzZWxlY3RlZCBw bGF0Zm9ybXMsIGFsc28gYW4gWC4yNSBjbGllbnQuCi0gICBJdCBjYW4gbWFrZSBpdHMgb3duIHNl Y3VyZSBJbnRlcm5ldCBjb25uZWN0aW9ucyB1c2luZyBJRVRGLWFwcHJvdmVkCi0gICBzZWN1cml0 eSBtZXRob2RzIGluY2x1ZGluZyBLZXJiZXJvcyBJViwgS2VyYmVyb3MgViwgU1NML1RMUywgYW5k IFNSUAotICAgYW5kIGl0IGNhbiBhbHNvIG1ha2UgU1NIIChTZWN1cmUgU2hlbGwpIGNvbm5lY3Rp b25zIHRocm91Z2ggeW91cgotICAgZXh0ZXJuYWwgU1NIIGNsaWVudCBhcHBsaWNhdGlvbi4gSXQg Y2FuIGJlIHRoZSBmYXItZW5kIGZpbGUtdHJhbnNmZXIgb3IKLSAgIGNsaWVudC9zZXJ2ZXIgcGFy dG5lciBvZiB5b3VyIGRlc2t0b3AgS2VybWl0IGNsaWVudC4gSXQgY2FuIGFsc28gYWNjZXB0Ci0g ICBpbmNvbWluZyBkaWFsZWQgYW5kIG5ldHdvcmsgY29ubmVjdGlvbnMuIEl0IGNhbiBldmVuIGJl IGluc3RhbGxlZCBhcyBhbgotICAgSW50ZXJuZXQgc2VydmljZSBvbiBpdHMgb3duIHN0YW5kYXJk IFRDUCBzb2NrZXQsIDE2NDkgW1s0MF1SRkMyODM5LAotICAgWzQxXVJGQzI4NDBdLgotCi0gICBB bmQgcGVyaGFwcyBtb3N0IGltcG9ydGFudCwgZXZlcnl0aGluZyB5b3UgY2FuIGRvICJieSBoYW5k IgotICAgKGludGVyYWN0aXZlbHkpIHdpdGggQy1LZXJtaXQsIGNhbiBiZSAic2NyaXB0ZWQiIChh dXRvbWF0ZWQpIHVzaW5nIGl0cwotICAgYnVpbHQtaW4gY3Jvc3MtcGxhdGZvcm0gdHJhbnNwb3J0 LWluZGVwZW5kZW50IHNjcmlwdCBwcm9ncmFtbWluZwotICAgbGFuZ3VhZ2UsIHdoaWNoIGhhcHBl bnMgdG8gYmUgaWRlbnRpY2FsIHRvIGl0cyBpbnRlcmFjdGl2ZSBjb21tYW5kCi0gICBsYW5ndWFn ZS4KLQotICAgVGhpcyBtYW51YWwgcGFnZSBvZmZlcnMgYW4gb3ZlcnZpZXcgb2YgQy1LZXJtaXQg OS4wIGZvciBVbml4ICgiVW5peCIgaXMKLSAgIGFuIG9wZXJhdGluZyBzeXN0ZW0gZmFtaWx5IHRo YXQgaW5jbHVkZXMgQUlYLCBERy9VWCwgRnJlZUJTRCwgSFAtVVgsCi0gICBJUklYLCBMaW51eCwg TWFjIE9TIFgsIE5ldEJTRCwgT3BlbkJTRCwgT3BlbiBTZXJ2ZXIsIE9wZW4gVW5peCwgUU5YLAot ICAgU29sYXJpcywgU3VuT1MsIFN5c3RlbSBWIFIzLCBTeXN0ZW0gViBSNCwgVHJ1NjQgVW5peCwg VW5peHdhcmUsIFhlbml4LAotICAgYW5kIG1hbnkgb3RoZXJzKS4gRm9yIHRob3JvdWdoIGNvdmVy YWdlLCBwbGVhc2UgY29uc3VsdCB0aGUgcHVibGlzaGVkCi0gICBDLUtlcm1pdCBtYW51YWwgYW5k IHN1cHBsZW1lbnRzIChzZWUgWzQyXURPQ1VNRU5UQVRJT04gYmVsb3cpLiBGb3IKLSAgIGZ1cnRo ZXIgaW5mb3JtYXRpb24gYWJvdXQgQy1LZXJtaXQsIEtlcm1pdCBzb2Z0d2FyZSBmb3Igb3RoZXIK LSAgIHBsYXRmb3JtcywgYW5kIEtlcm1pdCBtYW51YWxzLCB2aXNpdCB0aGUgS2VybWl0IFByb2pl Y3Qgd2Vic2l0ZToKLQotICBbNDNdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LwotCi0g ICBUaGlzIGlzIGEgbG9uZ2VyLXRoYW4tYXZlcmFnZSBtYW51YWwgcGFnZSwgYW5kIHlldCBpdCBi YXJlbHkgc2NyYXRjaGVzCi0gICB0aGUgc3VyZmFjZS4gRG9uJ3QgYmUgZGF1bnRlZC4gQy1LZXJt aXQgaXMgYSBsYXJnZSBhbmQgY29tcGxleCBwYWNrYWdlLAotICAgZXZvbHZpbmcgb3ZlciBkZWNh ZGVzIG9mIHByYWN0aWNlIGFuZCBleHBlcmllbmNlLCBidXQgdGhhdCBkb2Vzbid0IG1lYW4KLSAg IGl0J3MgaGFyZCB0byBsZWFybiBvciB1c2UuIEl0cyBtb3N0IGNvbW1vbmx5IHVzZWQgZnVuY3Rp b25zIGFyZQotICAgZXhwbGFpbmVkIGhlcmUgd2l0aCBwb2ludGVycyB0byBhZGRpdGlvbmFsIGlu Zm9ybWF0aW9uIGVsc2V3aGVyZS4KLQotICAgWzQ0XUtlcm1pdCBIb21lIFs0NV1DLUtlcm1pdCBI b21lIFs0Nl1DLUtlcm1pdCBGQVEKLQotU1lOT1BTSVMKLQotICAgWzQ3XVRvcCBbNDhdQ29udGVu dHMgWzQ5XU5leHQgWzUwXVByZXZpb3VzCi0KLSAgIFVzYWdlOiAga2VybWl0IFtmaWxlbmFtZV0g Wy14IGFyZyBbLXggYXJnXS4uLlsteXl5XS4uXSBbIHs9LC0tLCt9IHRleHQKLSAgIF0gXQotICAg T3I6ICAgIGtlcm1pdCBVUkwKLQotICAgICAqIC14IGlzIGFuIG9wdGlvbiByZXF1aXJpbmcgYW4g YXJndW1lbnQ7Ci0gICAgICogLXkgaXMgYW4gb3B0aW9uIHdpdGggbm8gYXJndW1lbnQuCi0KLSAg IElmIHRoZSBmaXJzdCBjb21tYW5kLWxpbmUgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgYSBmaWxl LAotICAgaW50ZXJhY3RpdmUtbW9kZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgZnJvbSB0aGUgZmls ZS4gVGhlICc9JyAob3IgIi0tIikKLSAgIGFyZ3VtZW50IHRlbGxzIEtlcm1pdCBub3QgdG8gcGFy c2UgdGhlIHJlbWFpbmRlciBvZiB0aGUgY29tbWFuZCBsaW5lLAotICAgYnV0IHRvIG1ha2UgdGhl IHdvcmRzIGZvbGxvd2luZyAnPScgYXZhaWxhYmxlIGFzIFwlMSwgXCUyLCAuLi4gXCU5LiBUaGUK LSAgICIrIiBhcmd1bWVudCBpcyBsaWtlICI9IiBidXQgZm9yIHVzZSBpbiAia2VyYmFuZyBzY3Jp cHRzIiAoZXhwbGFpbmVkCi0gICBbNTFdYmVsb3cpLiBBIHNlY29uZCBjb21tYW5kLWxpbmUgZm9y bWF0IGFsbG93cyB0aGUgb25lIGFuZCBvbmx5Ci0gICBhcmd1bWVudCB0byBiZSBhIFs1Ml1UZWxu ZXQsIEZUUCwgSFRUUCwgb3IgSUtTRCBVUkwuCi0KLSAgIE9yZGVyIG9mIGV4ZWN1dGlvbjoKLQot ICAgIDEuIFs1M11UaGUgY29tbWFuZCBmaWxlIChpZiBhbnkpLgotICAgIDIuIFs1NF1UaGUgaW5p dGlhbGl6YXRpb24gZmlsZSwgaWYgYW55LCB1bmxlc3Mgc3VwcHJlc3NlZCB3aXRoIC1ZLgotICAg IDMuIFs1NV1UaGUgY3VzdG9taXphdGlvbiBmaWxlIChpZiBpdCBpcyBleGVjdXRlZCBieSB0aGUg aW5pdGlhbGl6YXRpb24KLSAgICAgICBmaWxlKS4KLSAgICA0LiBbNTZdVGhlIGNvbW1hbmQtbGlu ZSBVUkwgKGlmIGFueSwgYW5kIGlmIHNvLCBleGVjdXRpb24gc3RvcHMgaGVyZSkuCi0gICAgNS4g WzU3XUNvbW1hbmQtbGluZSBvcHRpb25zIChpZiBhbnkpLgotICAgIDYuIFs1OF1JbnRlcmFjdGl2 ZSBjb21tYW5kcy4KLQotICAgU29tZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBjYW4gY2F1c2UgYWN0 aW9ucyAoc3VjaCBhcyAtcyB0byBzZW5kIGEKLSAgIGZpbGUpOyBvdGhlcnMganVzdCBzZXQgcGFy YW1ldGVycy4gSWYgYW55IGFjdGlvbiBvcHRpb25zIGFyZSBpbmNsdWRlZAotICAgb24gdGhlIGNv bW1hbmQgbGluZSwgS2VybWl0IGV4aXRzIHdoZW4gZmluaXNoZWQgdW5sZXNzIGFsc28gZ2l2ZW4g dGhlCi0gICAtUyAoInN0YXkiKSBvcHRpb24uIElmIG5vIGFjdGlvbiBvcHRpb25zIGFyZSBnaXZl biwgbm8gaW5pdGlhbGl6YXRpb24KLSAgIG9yIGNvbW1hbmQgZmlsZXMgY29udGFpbmVkIGFuIEVY SVQgb3IgUVVJVCBjb21tYW5kLCBhbmQgbm8gZmF0YWwgZXJyb3JzCi0gICBvY2N1cnJlZCwgS2Vy bWl0IGlzc3VlcyBpdHMgcHJvbXB0IGFuZCB3YWl0cyBmb3IgeW91IHRvIHR5cGUgY29tbWFuZHMu Ci0KLSAgICAgQmVhciBpbiBtaW5kIHRoYXQgQy1LZXJtaXQgY2FuIGJlIGJ1aWx0IHdpdGggc2Vs ZWN0ZWQgZmVhdHVyZXMKLSAgICAgZGlzYWJsZWQsIGFuZCBhbHNvIHRoYXQgY2VydGFpbiBmZWF0 dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwKLSAgICAgcGxhdGZvcm1zLiBGb3IgZXhhbXBs ZSwgQy1LZXJtaXQgY2FuJ3QgYmUgYnVpbHQgd2l0aCBUQ1AvSVAgc3VwcG9ydAotICAgICBvbiBh IHBsYXRmb3JtIHRoYXQgZG9lcyBub3QgaGF2ZSBUQ1AvSVAgaGVhZGVyIGZpbGVzIGFuZCBsaWJy YXJpZXMKLSAgICAgKGFuZCBldmVuIGlmIEtlcm1pdCBkb2VzIGluY2x1ZGUgVENQL0lQIHN1cHBv cnQsIGl0IGNhbid0IGJlIHVzZWQgdG8KLSAgICAgbWFrZSBUQ1AvSVAgY29ubmVjdGlvbnMgb24g YSBjb21wdXRlciB0aGF0IGRvZXMgbm90IGhhdmUgYSBUQ1AvSVAKLSAgICAgc3RhY2sgaW5zdGFs bGVkKS4gSWYgeW91ciB2ZXJzaW9uIG9mIEMtS2VybWl0IGxhY2tzIGEgZmVhdHVyZQotICAgICBt ZW50aW9uZWQgaGVyZSwgdXNlIGl0cyBTSE9XIEZFQVRVUkVTIGNvbW1hbmQgdG8gc2VlIHdoYXQg bWlnaHQgaGF2ZQotICAgICBiZWVuIGV4Y2x1ZGVkLgotCi0gICBDLUtlcm1pdCBoYXMgdGhyZWUg a2luZHMgb2YgY29tbWFuZHM6IHJlZ3VsYXIgc2luZ2xlLWxldHRlcgotICAgY29tbWFuZC1saW5l IG9wdGlvbnMsIGV4dGVuZGVkLWZvcm1hdCBjb21tYW5kLWxpbmUgb3B0aW9ucywgYW5kCi0gICBp bnRlcmFjdGl2ZSBjb21tYW5kcy4KLQotICAgWzU5XUtlcm1pdCBIb21lIFs2MF1DLUtlcm1pdCBI b21lIFs2MV1DLUtlcm1pdCBGQVEKLQotT1BUSU9OUwotCi0gICBbNjJdVG9wIFs2M11Db250ZW50 cyBbNjRdTmV4dCBbNjVdUHJldmlvdXMgIDwtIChNb3N0IHBlb3BsZSBzaG91bGQKLSAgIGNsaWNr IE5leHQgdG8gc2tpcCBhcm91bmQgdGhpcyBzZWN0aW9uLi4uKQotCi0gICBMaWtlIG1vc3QgVW5p eCBjb21tYW5kcywgQy1LZXJtaXQgY2FuIGJlIGJlIGdpdmVuIG9wdGlvbnMgb24gdGhlCi0gICBj b21tYW5kIGxpbmUuIEJ1dCBDLUtlcm1pdCBhbHNvIGNhbiBiZSB1c2VkIGludGVyYWN0aXZlbHkg YnkgZ2l2aW5nIGl0Ci0gICBbNjZdY29tbWFuZHMgY29tcG9zZWQgb2Ygd29yZHMsIHdoaWNoIGFy ZSBtb3JlIGludHVpdGl2ZSB0aGFuIGNyeXB0aWMKLSAgIGNvbW1hbmQtbGluZSBvcHRpb25zLCBh bmQgbW9yZSBmbGV4aWJsZSB0b28uIEluIG90aGVyIHdvcmRzLCB5b3UgZG9uJ3QKLSAgIGhhdmUg dG8gdXNlIEMtS2VybWl0J3MgY29tbWFuZC1saW5lIG9wdGlvbnMsIGJ1dCB0aGV5IGFyZSBhdmFp bGFibGUgaWYKLSAgIHlvdSB3YW50IHRvLiAoQnkgdGhlIHNhbWUgdG9rZW4sIHlvdSBkb24ndCBo YXZlIHRvIHVzZSBpdHMgaW50ZXJhY3RpdmUKLSAgIGNvbW1hbmRzIGVpdGhlciAtLSB5b3UgY2Fu IHVzZSBlaXRoZXIgb3IgYm90aCBpbiBhbnkgY29tYmluYXRpb24uKQotCi0gICBDLUtlcm1pdCBp cyBnZW5lcmFsbHkgaW5zdGFsbGVkIGluIHRoZSBQQVRIIGFzICJrZXJtaXQiLCBhbmQgdGhlcmVm b3JlCi0gICBpcyBpbnZva2VkIGJ5IHR5cGluZyB0aGUgd29yZCAia2VybWl0IiAobG93ZXJjYXNl KSBhdCB0aGUgc2hlbGwgcHJvbXB0LAotICAgYW5kIHRoZW4gcHJlc3NpbmcgdGhlIFJldHVybiBv ciBFbnRlciBrZXkuIElmIHlvdSB3aXNoIHRvIGluY2x1ZGUKLSAgIGNvbW1hbmQtbGluZSBvcHRp b25zLCBwdXQgdGhlbSBhZnRlciB0aGUgd29yZCAia2VybWl0IiBidXQgYmVmb3JlCi0gICBwcmVz c2luZyBSZXR1cm4gb3IgRW50ZXIsIHNlcGFyYXRlZCBieSBzcGFjZXMsIGZvciBleGFtcGxlOgot Ci0gICQga2VybWl0IC1zIGNrZXJtaXQudGFyLmd6Ci0KLSAgICgnJCcgaXMgdGhlIHNoZWxsIHBy b21wdDsgImtlcm1pdCAtcyBja2VybWl0LnRhci5neiIgaXMgd2hhdCB5b3UgdHlwZSwKLSAgIGZv bGxvd2VkIGJ5IFJldHVybiBvciBFbnRlci4pCi0KLSAgIEhlcmUgaXMgYSBsaXN0IG9mIEMtS2Vy bWl0J3Mgc2luZ2xlLWxldHRlciBjb21tYW5kLWxpbmUgb3B0aW9ucywgd2hpY2gKLSAgIHN0YXJ0 IHdpdGggYSBzaW5nbGUgZGFzaCAoLSksIGluIEFTQ0lJICgiYWxwaGFiZXRpY2FsIikgb3JkZXIu Ci0gICBBbHBoYWJldGljIGNhc2UgaXMgc2lnbmlmaWNhbnQgKC1BIGlzIG5vdCB0aGUgc2FtZSBh cyAtYSkuIFRoZSBBY3Rpb24/Ci0gICBjb2x1bW4gY29udGFpbnMgWSBmb3IgYWN0aW9uIG9wdGlv bnMgYW5kIE4gZm9yIG5vbi1hY3Rpb24gb3B0aW9ucy4KLQotICAgT3B0aW9uIEFjdGlvbj8gRGVz Y3JpcHRpb24KLSAgIC0wIE4gKGRpZ2l0IHplcm8pIDEwMCUgdHJhbnNwYXJlbnQgQ29ubmVjdCBz dGF0ZSBmb3IgImluLXRoZS1taWRkbGUiCi0gICBvcGVyYXRpb246IDggYml0cywgbm8gcGFyaXR5 LCBubyBlc2NhcGUgY2hhcmFjdGVyLCBldmVyeXRoaW5nIHBhc3NlcwotICAgdGhyb3VnaC4KLSAg IC04IE4gKGRpZ2l0IGVpZ2h0KSBDb25uZWN0aW9uIGlzIDgtYml0IGNsZWFuICh0aGlzIGlzIHRo ZSBkZWZhdWx0IGluCi0gICBDLUtlcm1pdCA5LjApLiBFcXVpdmFsZW50IHRvIHRoZSBFSUdIVEJJ VCBjb21tYW5kLCB3aGljaCBpbiB0dXJuIGlzIGEKLSAgIHNob3J0Y3V0IGZvciBTRVQgVEVSTUlO QUwgQllURVNJWkUgOCwgU0VUIENPTU1BTkQgQllURVNJWkUgOCwgU0VUCi0gICBQQVJJVFkgTk9O RS4KLSAgIC05IGFyZyBOIChkaWdpdCBuaW5lKSBNYWtlIGEgY29ubmVjdGlvbiB0byBhbiBGVFAg c2VydmVyLiBFcXVpdmFsZW50IHRvCi0gICB0aGUgRlRQIE9QRU4gY29tbWFuZC4KLSAgIEFyZ3Vt ZW50OiBJUC1hZGRyZXNzLW9yLWhvc3RuYW1lWzpvcHRpb25hbC1UQ1AtcG9ydF0uCi0gICBOT1RF OiBDLUtlcm1pdCBhbHNvIGhhcyBhIHNlcGFyYXRlIEZUUCBjb21tYW5kLWxpbmUgcGVyc29uYWxp dHksIHdpdGgKLSAgIHJlZ3VsYXIgRlRQLWxpa2UgY29tbWFuZC1saW5lIHN5bnRheC4gWzY3XU1v cmUgYWJvdXQgdGhpcyBiZWxvdy4KLSAgIC1BIE4gS2VybWl0IGlzIHRvIGJlIHN0YXJ0ZWQgYXMg YW4gSW50ZXJuZXQgc2VydmljZSAoSUtTRCkgKG9ubHkgZnJvbQotICAgaW5ldGQuY29uZikuCi0g ICAtQiBOIEtlcm1pdCBpcyBydW5uaW5nIGluIEJhdGNoIG9yIEJhY2tncm91bmQgKG5vIGNvbnRy b2xsaW5nCi0gICB0ZXJtaW5hbCkuIFRvIGJlIHVzZWQgaW4gY2FzZSBLZXJtaXQgZG9lc24ndCBh dXRvbWF0aWNhbGx5IHNlbnNlIGl0cwotICAgYmFja2dyb3VuZCBzdGF0dXMuIEVxdWl2YWxlbnQg dG8gdGhlIFNFVCBCQUNLR1JPVU5EIE9OIGNvbW1hbmQuCi0gICAtQyBhcmcgTiBJbnRlcmFjdGl2 ZS1tb2RlIENvbW1hbmRzIHRvIGJlIGV4ZWN1dGVkLgotICAgQXJndW1lbnQ6IENvbW1hbmRzIHNl cGFyYXRlZCBieSBjb21tYXMsIGxpc3QgaW4gZG91YmxlcXVvdGVzLgotICAgLUQgYXJnIE4gRGVs YXkgYmVmb3JlIHN0YXJ0aW5nIHRvIHNlbmQgaW4gUmVtb3RlIG1vZGUuIEVxdWl2YWxlbnQgdG8K LSAgIHRoZSBTRVQgREVMQVkgY29tbWFuZC4KLSAgIEFyZ3VtZW50OiBOdW1iZXIgb2Ygc2Vjb25k cy4KLSAgIC1FIE4gRXhpdCBhdXRvbWF0aWNhbGx5IHdoZW4gY29ubmVjdGlvbiBjbG9zZXMuIEVx dWl2YWxlbnQgdG8gU0VUIEVYSVQKLSAgIE9OLURJU0NPTk5FQ1QgT04uCi0gICAtRiBhcmcgTiBV c2UgYW4gb3BlbiBUQ1AgY29ubmVjdGlvbi4KLSAgIEFyZ3VtZW50OiBOdW1lcmljIGZpbGUgZGVz Y3JpcHRvciBvZiBvcGVuIFRDUCBjb25uZWN0aW9uLgotICAgQWxzbyBzZWU6IC1qLCAtSi4KLSAg IC1HIGFyZyBZIEdldCBmaWxlKHMpIGZyb20gc2VydmVyLCBzZW5kIGNvbnRlbnRzIHRvIHN0YW5k YXJkIG91dHB1dCwKLSAgIHdoaWNoIG5vcm1hbGx5IHdvdWxkIGJlIHBpcGVkIHRvIGFub3RoZXIg cHJvY2Vzcy4KLSAgIEFyZ3VtZW50OiBSZW1vdGUgZmlsZSBzcGVjaWZpY2F0aW9uLCBpbiBxdW90 ZXMgaWYgaXQgY29udGFpbnMKLSAgIG1ldGFjaGFyYWN0ZXJzLgotICAgQWxzbyBzZWU6IC1nLCAt ay4KLSAgIC1IIE4gU3VwcHJlc3MgcHJvZ3JhbSBzdGFydHVwIEhlcmFsZCBhbmQgZ3JlZXRpbmcu Ci0gICAtSSBOIFRlbGwgS2VybWl0IGl0IGhhcyBhIHJlbGlhYmxlIGNvbm5lY3Rpb24sIHRvIGZv cmNlIHN0cmVhbWluZyB0byBiZQotICAgdXNlZCB3aGVyZSBpdCBub3JtYWxseSB3b3VsZCBub3Qg YmUuIEVxdWl2YWxlbnQgdG8gdGhlIFNFVCBSRUxJQUJMRSBPTgotICAgY29tbWFuZC4KLSAgIC1K IGFyZyBOICJCZSBsaWtlIFRlbG5ldC4iIExpa2UgLWogYnV0IGltcGxpZXMgLUUuCi0gICBBcmd1 bWVudDogSVAgaG9zdG5hbWUvYWRkcmVzcyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IHNlcnZpY2Uu Ci0gICBOT1RFOiBDLUtlcm1pdCBhbHNvIGhhcyBhIHNlcGFyYXRlIFRlbG5ldCBjb21tYW5kLWxp bmUgcGVyc29uYWxpdHksCi0gICB3aXRoIHJlZ3VsYXIgVGVsbmV0LWxpa2UgY29tbWFuZC1saW5l IHN5bnRheC4gWzY4XU1vcmUgYWJvdXQgdGhpcwotICAgYmVsb3cuCi0gICAtTCBOIFJlY3Vyc2l2 ZSBkaXJlY3RvcnkgZGVzY2VudCBmb3IgZmlsZXMgaW4gLXMgb3B0aW9uLgotICAgLU0gYXJnIE4g TXkgdXNlciBuYW1lIChmb3IgdXNlIHdpdGggVGVsbmV0LCBSbG9naW4sIEZUUCwgZXRjKS4KLSAg IEVxdWl2YWxlbnQgdG8gdGhlIFNFVCBMT0dJTiBVU0VSIGNvbW1hbmQuCi0gICBBcmd1bWVudDog VXNlcm5hbWUgc3RyaW5nLgotICAgLU8gWSAoVXBwZXJjYXNlIGxldHRlciBPKSBCZSBhIHNlcnZl ciBmb3IgT25lIGNvbW1hbmQgb25seS4gQWxzbyBzZWU6Ci0gICAteC4KLSAgIC1QIE4gRG9uJ3Qg Y29udmVydCBmaWxlIChQYXRoKSBuYW1lcyBvZiB0cmFuc2ZlcnJlZCBmaWxlcy4gRXF1aXZhbGVu dAotICAgdG8gU0VUIEZJTEUgTkFNRVMgTElURVJBTC4KLSAgIC1RIE4gUXVpY2sgS2VybWl0IHBy b3RvY29sIHNldHRpbmdzLiBFcXVpdmFsZW50IHRvIHRoZSBGQVNUIGNvbW1hbmQuCi0gICBUaGlz IGlzIHRoZSBkZWZhdWx0IGluIEMtS2VybWl0IDcuMCBhbmQgbGF0ZXIuCi0gICAtUiBOIFJlbW90 ZS1vbmx5ICh0aGlzIGp1c3QgbWFrZXMgSUYgUkVNT1RFIHRydWUpLgotICAgLVMgTiBTdGF5IChl bnRlciBjb21tYW5kIHBhcnNlciBhZnRlciBhY3Rpb24gb3B0aW9ucykuCi0gICAtVCBOIEZvcmNl IFRleHQgbW9kZSBmb3IgZmlsZSB0cmFuc2ZlcjsgaW1wbGllcyAtVi4gRXF1aXZhbGVudCB0byBT RVQKLSAgIFRSQU5TRkVSIE1PREUgTUFOVUFMLCBTRVQgRklMRSBUWVBFIFRFWFQuCi0gICAtViBO IERpc2FibGUgYXV0b21hdGljIHBlci1maWxlIHRleHQvYmluYXJ5IHN3aXRjaGluZy4gRXF1aXZh bGVudCB0bwotICAgU0VUIFRSQU5TRkVSIE1PREUgTUFOVUFMLgotICAgLVkgTiBTa2lwIChkb24n dCBleGVjdXRlKSB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZS4KLSAgIC1hIGFyZyBOIEFzLW5hbWUg Zm9yIGZpbGUocykgaW4gLXMsIC1yLCBvciAtZy4KLSAgIEFyZ3VtZW50OiBBcy1uYW1lIHN0cmlu ZyAoYWx0ZXJuYXRpdmUgZmlsZW5hbWUpLiBXaGVuIHJlY2VpdmluZyBmaWxlcywKLSAgIHRoaXMg Y2FuIGJlIGEgZGlyZWN0b3J5IG5hbWUuCi0gICAtYiBhcmcgTiBTcGVlZCBmb3Igc2VyaWFsIGRl dmljZS4gRXF1aXZhbGVudCB0byBTRVQgU1BFRUQuCi0gICBBcmd1bWVudDogTnVtZXJpYyBCaXRz IHBlciBzZWNvbmQgZm9yIHNlcmlhbCBjb25uZWN0aW9ucy4KLSAgIC1jIFkgRW50ZXIgQ29ubmVj dCBzdGF0ZSBiZWZvcmUgdHJhbnNmZXJyaW5nIGZpbGVzLgotICAgLWQgTiBDcmVhdGUgYSBkZWJ1 Zy5sb2cgZmlsZSB3aXRoIGRldGFpbGVkIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiAoYQotICAgc2Vj b25kIC1kIGFkZHMgdGltZXN0YW1wcykuIEVxdWl2YWxlbnQgdG8gTE9HIERFQlVHIGJ1dCB0YWtl cyBlZmZlY3QKLSAgIHNvb25lci4KLSAgIC1lIGFyZyBOIE1heGltdW0gbGVuZ3RoIGZvciBpbmNv bWluZyBLZXJtaXQgZmlsZS10cmFuc2ZlciBwYWNrZXRzLgotICAgRXF1aXZhbGVudCB0byBTRVQg UkVDRUlWRSBQQUNLRVQtTEVOR1RILgotICAgQXJndW1lbnQ6IExlbmd0aCBpbiBieXRlcy4KLSAg IC1mIFkgU2VuZCBhIEZJTklTSCBjb21tYW5kIHRvIGEgS2VybWl0IHNlcnZlci4KLSAgIC1nIGFy ZyBOIEdldCBmaWxlKHMpIGZyb20gYSBLZXJtaXQgc2VydmVyLgotICAgQXJndW1lbnQ6IEZpbGUg c3BlY2lmaWNhdGlvbiBvbiBvdGhlciBjb21wdXRlciwgaW4gcXVvdGVzIGlmIGl0Ci0gICBjb250 YWlucyBtZXRhY2hhcmFjdGVycy4gRXF1aXZhbGVudCB0byBHRVQuCi0gICBBbHNvIHNlZTogLWEs IC1HLCAtci4KLSAgIC1oIFkgUHJpbnQgSGVscCB0ZXh0IGZvciBzaW5nbGUtbGV0dGVyIGNvbW1h bmQtbGluZSBvcHRpb25zIChwaXBlIHRocnUKLSAgICdtb3JlJyB0byBwcmV2ZW50IHNjcm9sbGlu ZykuCi0gICAtaSBOIEZvcmNlIGJpbmFyeSAoSW1hZ2UpIG1vZGUgZm9yIGZpbGUgdHJhbnNmZXI7 IGltcGxpZXMgLVYuCi0gICBFcXVpdmFsZW50IHRvIFNFVCBUUkFOU0ZFUiBNT0RFIE1BTlVBTCwg U0VUIEZJTEUgVFlQRSBCSU5BUlkuCi0gICAtaiBhcmcgTiBNYWtlIGEgVENQL0lQIGNvbm5lY3Rp b24uCi0gICBBcmd1bWVudDogSVAgaG9zdCBuYW1lL2FkZHJlc3MgYW5kIG9wdGlvbmFsIHNlcnZp Y2UgbmFtZSBvciBudW1iZXIuCi0gICBFcXVpdmFsZW50IHRvIHRoZSBURUxORVQgY29tbWFuZC4K LSAgIEFsc28gc2VlOiAtSiwgLUYuCi0gICAtayBZIFJlY2VpdmUgZmlsZShzKSB0byBzdGFuZGFy ZCBvdXRwdXQsIHdoaWNoIG5vcm1hbGx5IHdvdWxkIGJlIHBpcGVkCi0gICB0byBhbm90aGVyIHBy b2Nlc3MuCi0gICBBbHNvIHNlZTogLXIsIC1HLgotICAgLWwgYXJnIE4gKExvd2VyY2FzZSBsZXR0 ZXIgTCkgTWFrZSBhIGNvbm5lY3Rpb24gb24gdGhlIGdpdmVuIHNlcmlhbAotICAgY29tbXVuaWNh dGlvbnMgZGV2aWNlLiBFcXVpdmFsZW50IHRvIHRoZSBTRVQgTElORSAoU0VUIFBPUlQpIGNvbW1h bmQuCi0gICBBcmd1bWVudDogU2VyaWFsIGRldmljZSBuYW1lLCBlLmcuIC9kZXYvdHR5UzAuCi0g ICAtbSBhcmcgTiBNb2RlbSB0eXBlIGZvciB1c2Ugd2l0aCB0aGUgLWwgZGV2aWNlLiBFcXVpdmFs ZW50IHRvIHRoZSBTRVQKLSAgIE1PREVNIFRZUEUgY29tbWFuZC4KLSAgIEFyZ3VtZW50OiBNb2Rl bSBuYW1lIGFzIGluIFNFVCBNT0RFTSBUWVBFIGNvbW1hbmQsIGUuZy4gInVzcm9ib3RpY3MiLgot ICAgLW4gWSBFbnRlciBDb25uZWN0IHN0YXRlIGFmdGVyIHRyYW5zZmVycmluZyBmaWxlcyAoaGlz dG9yaWNhbCkuCi0gICAtcCBhcmcgTiBQYXJpdHkuIEVxdWl2YWxlbnQgdG8gdGhlIFNFVCBQQVJJ VFkgY29tbWFuZC4KLSAgIEFyZ3VtZW50OiBPbmUgb2YgdGhlIGZvbGxvd2luZzogZSh2ZW4pLCBv KGRkKSwgbShhcmspLCBuKG9uZSksIHMocGFjZSkuCi0gICAtcSBOIFF1aWV0IChzdXBwcmVzcyBt b3N0IG1lc3NhZ2VzKS4gRXF1aXZhbGVudCB0byBTRVQgUVVJRVQgT04uCi0gICAtciBZIFJlY2Vp dmUgZmlsZShzKS4gRXF1aXZhbGVudCB0byB0aGUgUkVDRUlWRSBjb21tYW5kLgotICAgQXJndW1l bnQ6IChub25lLCBidXQgc2VlIC1hKQotICAgLXMgYXJnIE4gU2VuZCBmaWxlKHMpLgotICAgQXJn dW1lbnQ6IE9uZSBvciBtb3JlIGxvY2FsIGZpbGUgc3BlY2lmaWNhdGlvbnMuIEVxdWl2YWxlbnQg dG8gdGhlIFNFTkQKLSAgIGNvbW1hbmQuCi0gICBBbHNvIHNlZTogLWEuCi0gICAtdCBOIChIaXN0 b3JpY2FsKSBYb24gKEN0cmwtUSkgVHVybmFyb3VuZCBjaGFyYWN0ZXIgZm9yIGhhbGYtZHVwbGV4 Ci0gICBjb25uZWN0aW9ucyAodXNlZCBvbiBzZXJpYWwgbGluZW1vZGUgY29ubmVjdGlvbnMgdG8g b2xkIG1haW5mcmFtZXMpLgotICAgRXF1aXZhbGVudCB0byBTRVQgRFVQTEVYIEhBTEYsIFNFVCBI QU5EU0hBS0UgWE9OLgotICAgLXYgYXJnIE4gV2luZG93IHNpemUgZm9yIEtlcm1pdCBwcm90b2Nv bCAoaWdub3JlZCB3aGVuIHN0cmVhbWluZykuCi0gICBFcXVpdmFsZW50IHRvIFNFVCBXSU5ET1ct U0laRS4KLSAgIEFyZ3VtZW50OiBOdW1iZXIsIDEgdG8gMzIuCi0gICAtdyBOIEluY29taW5nIGZp bGVzIFdyaXRlIG92ZXIgZXhpc3RpbmcgZmlsZXMuIEVxdWl2YWxlbnQgdG8gU0VUIEZJTEUKLSAg IENPTExJU0lPTiBPVkVSV1JJVEUuCi0gICAteCBZIEVudGVyIHNlcnZlciBtb2RlLiBFcXVpdmFs ZW50IHRvIHRoZSBTRVJWRVIgY29tbWFuZC4gQWxzbyBzZWU6IC1PLgotICAgLXkgYXJnIE4gQWx0 ZXJuYXRpdmUgaW5pdGlhbGl6YXRpb24gZmlsZS4KLSAgIEFyZ3VtZW50OiBGaWxlbmFtZS4KLSAg IC16IE4gRm9yY2UgZm9yZWdyb3VuZCBiZWhhdmlvci4gVG8gYmUgdXNlZCBpbiBjYXNlIEtlcm1p dCBkb2Vzbid0Ci0gICBhdXRvbWF0aWNhbGx5IHNlbnNlIGl0cyBmb3JlZ3JvdW5kIHN0YXR1cy4g RXF1aXZhbGVudCB0byB0aGUgU0VUCi0gICBCQUNLR1JPVU5EIE9GRiBjb21tYW5kLgotCi0gICBF eHRlbmRlZCBjb21tYW5kLWxpbmUgb3B0aW9ucyAobmVjZXNzYXJ5IGJlY2F1c2Ugc2luZ2xlLWxl dHRlciBvbmVzIGFyZQotICAgYWJvdXQgdXNlZCB1cCkgc3RhcnQgd2l0aCB0d28gZGFzaGVzICgt LSksIHdpdGggd29yZHMgcmF0aGVyIHRoYW4KLSAgIHNpbmdsZSBsZXR0ZXJzIGFzIG9wdGlvbiBu YW1lcy4gSWYgYW4gZXh0ZW5kZWQgb3B0aW9uIHRha2VzIGFuCi0gICBhcmd1bWVudCwgaXQgaXMg c2VwYXJhdGVkIGZyb20gdGhlIG9wdGlvbiB3b3JkIGJ5IGEgY29sb24gKDopLiBFeHRlbmRlZAot ICAgb3B0aW9ucyBpbmNsdWRlOgotCi0gICBPcHRpb24gRGVzY3JpcHRpb24KLSAgIC0tYmFubmVy ZmlsZTpmaWxlbmFtZSBGaWxlIHRvIGRpc3BsYXkgdXBvbiBzdGFydHVwIG9yIElLU0QgbG9naW4u Ci0gICAtLWNkZmlsZTpmaWxlbmFtZSBGaWxlIHRvIGJlIHNlbnQgZm9yIGRpc3BsYXkgdG8gdGhl IGNsaWVudCB3aGVuIHNlcnZlcgotICAgY2hhbmdlcyBkaXJlY3RvcnkgKGZpbGVuYW1lIGlzIHJl bGF0aXZlIHRvIHRoZSBjaGFuZ2VkLXRvIGRpcmVjdG9yeSkuCi0gICAtLWNkbWVzc2FnZTp7b24s b2ZmfSBFbmFibGUvZGlzYWJsZSB0aGUgc2VydmVyIENEIG1lc3NhZ2UgZmVhdHVyZS4KLSAgIC0t aGVscCBQcmludHMgdXNhZ2UgbWVzc2FnZSBmb3IgZXh0ZW5kZWQgb3B0aW9ucy4KLSAgIC0taGVs cGZpbGU6ZmlsZW5hbWUgRGVzaWduYXRlcyBhIGZpbGUgY29udGFpbmluZyBjdXN0b20gdGV4dCB0 byByZXBsYWNlCi0gICB0aGUgdG9wLWxldmVsIEhFTFAgY29tbWFuZC4KLSAgIC0tbm9pbnRlcnJ1 cHRzIERpc2FibGVzIGtleWJvYXJkIGludGVycnVwdHMuCi0gICAtLW5vcGVybXMgRGlzYWJsZXMg dGhlIEtlcm1pdCBwcm90b2NvbCBmaWxlIFBlcm1pc3Npb25zIGF0dHJpYnV0ZSwgdG8KLSAgIHBy ZXZlbnQgdHJhbnNtaXNzaW9uIG9mIGZpbGUgcGVybWlzc2lvbnMgKHByb3RlY3Rpb24pIGZyb20g c2VuZGVyIHRvCi0gICByZWNlaXZlci4KLQotICAgUGx1cyBzZXZlcmFsIG90aGVyIFs2OV1JS1NE LU9ubHkgb3B0aW9ucy4KLQotICAgU2VlIHRoZSBbNzBdZmlsZS10cmFuc2ZlciBzZWN0aW9uIGZv ciBleGFtcGxlcyBvZiBjb21tYW5kLWxpbmUKLSAgIGludm9jYXRpb24uCi0KLUNPTU1BTkQgTEFO R1VBR0UKLQotICAgWzcxXVRvcCBbNzJdQ29udGVudHMgWzczXU5leHQgWzc0XVByZXZpb3VzCi0K LSAgICAgKiBbNzVdQ29tbWFuZCBGaWxlcywgTWFjcm9zLCBhbmQgU2NyaXB0cwotICAgICAqIFs3 Nl1Db21tYW5kIExpc3QKLQotICAgQy1LZXJtaXQncyBpbnRlcmFjdGl2ZSBjb21tYW5kIGxhbmd1 YWdlIGlzIHRoZSBzdWJqZWN0IG9mIGEKLSAgIFs3N102MjItcGFnZSBib29rIGFuZCBhbm90aGVy IHNldmVyYWwgaHVuZHJlZCBwYWdlcyBvZiB1cGRhdGVzLCBmYXIgdG9vCi0gICBtdWNoIGZvciBh IG1hbnVhbCBwYWdlLiBCdXQgaXQncyBub3QgaGFyZCB0byBnZXQgc3RhcnRlZC4gQXQgdGhlIHNo ZWxsCi0gICBwcm9tcHQsIGp1c3QgdHlwZSAia2VybWl0IiB0byBnZXQgQy1LZXJtaXQncyBpbnRl cmFjdGl2ZSBjb21tYW5kCi0gICBwcm9tcHQ6Ci0KLSAgJCBrZXJtaXQKLSAgKC9jdXJyZW50L2Rp cmVjdG9yeSkgQy1LZXJtaXQ+Ci0KLSAgIEJlZ2luIGJ5IHR5cGluZyAiaGVscCIgKGFuZCB0aGVu IHByZXNzIHRoZSBSZXR1cm4gb3IgRW50ZXIga2V5KSBmb3IgYQotICAgdG9wLWxldmVsIG92ZXJ2 aWV3LCByZWFkIGl0LCBhbmQgZ28gZnJvbSB0aGVyZS4gWW91ciBzZWNvbmQgY29tbWFuZAotICAg c2hvdWxkIHByb2JhYmx5IGJlICJpbnRybyIgKGludHJvZHVjdGlvbikuIE5vdGUgdGhlIHByb21w dCBzaG93cyB5b3VyCi0gICBjdXJyZW50IGRpcmVjdG9yeSAodW5sZXNzIHlvdSB0ZWxsIEtlcm1p dCB0byBwcm9tcHQgeW91IHdpdGggc29tZXRoaW5nCi0gICBlbHNlKS4KLQotICAgSW50ZXJhY3Rp dmUgY29tbWFuZHMgYXJlIGNvbXBvc2VkIG1haW5seSBvZiByZWd1bGFyIEVuZ2xpc2ggd29yZHMs Ci0gICB1c3VhbGx5IGluIHRoZSBmb3JtIG9mIGltcGVyYXRpdmUgc2VudGVuY2VzLCBzdWNoIGFz OgotCi0gIHNlbmQgb29mYS50eHQKLQotICAgd2hpY2ggdGVsbHMgS2VybWl0IHRvIHNlbmQgKHRy YW5zZmVyKSB0aGUgZmlsZSB3aG9zZSBuYW1lIGlzIG9vZmEudHh0LAotICAgb3I6Ci0KLSAgc2V0 IHRyYW5zZmVyIG1vZGUgYXV0b21hdGljCi0KLSAgIHdoaWNoIHNldHMgS2VybWl0J3MgInRyYW5z ZmVyIG1vZGUiIHRvICJhdXRvbWF0aWMiICh3aGF0ZXZlciB0aGF0Ci0gICBtZWFucykuCi0KLSAg IFdoaWxlIHR5cGluZyBjb21tYW5kcywgeW91IGNhbiBhYmJyZXZpYXRlLCBhc2sgZm9yIGhlbHAg KGJ5IHByZXNzaW5nCi0gICB0aGUgIj8iIGtleSBhbnl3aGVyZSBpbiBhIGNvbW1hbmQpLCBjb21w bGV0ZSBrZXl3b3JkcyBvciBmaWxlbmFtZXMKLSAgICh3aXRoIHRoZSBUYWIgb3IgRXNjIGtleSks IGFuZCBlZGl0IHlvdXIgdHlwaW5nIHdpdGggQmFja3NwYWNlIG9yCi0gICBEZWxldGUsIEN0cmwt VywgQ3RybC1VLCBldGMuIFlvdSBjYW4gYWxzbyByZWNhbGwgcHJldmlvdXMgY29tbWFuZHMsCi0g ICBzYXZlIHlvdXIgY29tbWFuZCBoaXN0b3J5LCBhbmQgd2hvIGtub3dzIHdoYXQgZWxzZS4gR2l2 ZSB0aGUgSU5UUk8KLSAgIGNvbW1hbmQgZm9yIGRldGFpbHMuCi0KLSAgIEMtS2VybWl0IGhhcyBo dW5kcmVkcyBvZiBjb21tYW5kcywgYW5kIHRoZXkgY2FuIGJlIGlzc3VlZCBpbiBpbmZpbml0ZQot ICAgdmFyaWV0eSBhbmQgY29tYmluYXRpb25zLCBpbmNsdWRpbmcgY29tbWFuZHMgZm9yOgotCi0g ICAgICogTWFraW5nIGNvbm5lY3Rpb25zIChTRVQgTElORSwgRElBTCwgVEVMTkVULCBTU0gsIEZU UCwgQ09OTkVDVCwgLi4uKQotICAgICAqIEJyZWFraW5nIGNvbm5lY3Rpb25zIChIQU5HVVAsIENM T1NFKQotICAgICAqIFRyYW5zZmVycmluZyBmaWxlcyAoU0VORCwgR0VULCBSRUNFSVZFLCBNT1ZF LCBSRVNFTkQsIC4uLikKLSAgICAgKiBFc3RhYmxpc2hpbmcgcHJlZmVyZW5jZXMgKFNFVCkKLSAg ICAgKiBEaXNwbGF5aW5nIHByZWZlcmVuY2VzIChTSE9XKQotICAgICAqIE1hbmFnaW5nIGxvY2Fs IGZpbGVzIChDRCwgREVMRVRFLCBNS0RJUiwgRElSRUNUT1JZLCBSRU5BTUUsIFRZUEUsCi0gICAg ICAgLi4uKQotICAgICAqIE1hbmFnaW5nIHJlbW90ZSBmaWxlcyAoUkNELCBSREVMLCBSTUtESVIs IFJESVIsIC4uLikKLSAgICAgKiBVc2luZyBsb2NhbCBmaWxlcyAoRk9QRU4sIEZDTE9TRSwgRlJF QUQsIEZXUklURSkKLSAgICAgKiBQcm9ncmFtbWluZyAoVEFLRSwgREVGSU5FLCBJRiwgRk9SLCBX SElMRSwgU1dJVENILCBERUNMQVJFLCAuLi4pCi0gICAgICogSW50ZXJhY3Rpbmcgd2l0aCB0aGUg dXNlciAoRUNITywgQVNLLCAuLi4pCi0gICAgICogSW50ZXJhY3Rpbmcgd2l0aCBhIHJlbW90ZSBj b21wdXRlciAoSU5QVVQsIE9VVFBVVCwgLi4uKQotICAgICAqIEludGVyYWN0aW5nIHdpdGggbG9j YWwgcHJvZ3JhbXMgKFJVTiwgRVhFQywgUFRZLCAuLi4pCi0gICAgICogTG9nZ2luZyB0aGluZ3Mg KExPRyBTRVNTSU9OLCBMT0cgUEFDS0VUUywgTE9HIERFQlVHLCAuLi4pCi0KLSAgIEFuZCBvZiBj b3Vyc2UgUVVJVCBvciBFWElUIHRvIGdldCBvdXQgYW5kIEhFTFAgdG8gZ2V0IGhlbHAsIGFuZCBm b3IKLSAgIHByb2dyYW1tZXJzOiBsb29wcywgZGVjaXNpb24gbWFraW5nLCB2YXJpYWJsZXMsIGFy cmF5cywgYXNzb2NpYXRpdmUKLSAgIGFycmF5cywgaW50ZWdlciBhbmQgZmxvYXRpbmcgcG9pbnQg YXJpdGhtZXRpYywgbWFjcm9zLCBidWlsdC1pbiBhbmQKLSAgIHVzZXItZGVmaW5lZCBmdW5jdGlv bnMsIHN0cmluZyBtYW5pcHVsYXRpb24sIHBhdHRlcm4gbWF0Y2hpbmcsIGJsb2NrCi0gICBzdHJ1 Y3R1cmUsIHNjb3BpbmcsIHJlY3Vyc2lvbiwgYW5kIGFsbCB0aGUgcmVzdC4gVG8gZ2V0IGEgbGlz dCBvZiBhbGwKLSAgIEMtS2VybWl0J3MgY29tbWFuZHMsIHR5cGUgYSBxdWVzdGlvbiBtYXJrICg/ KSBhdCB0aGUgcHJvbXB0LiBUbyBnZXQgYQotICAgZGVzY3JpcHRpb24gb2YgYW55IGNvbW1hbmQs IHR5cGUgSEVMUCBmb2xsb3dlZCBieSB0aGUgbmFtZSBvZiB0aGUKLSAgIGNvbW1hbmQsIGZvciBl eGFtcGxlOgotCi0gIGhlbHAgc2VuZAotCi0gICBUaGUgY29tbWFuZCBpbnRlcnJ1cHRpb24gY2hh cmFjdGVyIGlzIEN0cmwtQyAoaG9sZCBkb3duIHRoZSBDdHJsIGtleQotICAgYW5kIHByZXNzIHRo ZSBDIGtleSkuCi0KLSAgIFRoZSBjb21tYW5kIGxhbmd1YWdlICJlc2NhcGUgY2hhcmFjdGVyIiwg dXNlZCB0byBpbnRyb2R1Y2UgdmFyaWFibGUKLSAgIG5hbWVzLCBmdW5jdGlvbiBpbnZvY2F0aW9u cywgYW5kIHNvIG9uLCBpcyBiYWNrc2xhc2ggKFwpLiBJZiB5b3UgbmVlZAotICAgdG8gaW5jbHVk ZSBhIGxpdGVyYWwgYmFja3NsYXNoIGluIGEgY29tbWFuZCwgdHlwZSB0d28gb2YgdGhlbSwgZS5n LjoKLQotICBnZXQgYzpcXGs5NVxcazk1Y3VzdG9tLmluaQotCi1Db21tYW5kIEZpbGVzLCBNYWNy b3MsIGFuZCBTY3JpcHRzCi0KLSAgIEEgZmlsZSBjb250YWluaW5nIEtlcm1pdCBjb21tYW5kcyBp cyBjYWxsZWQgYSBLZXJtaXQgY29tbWFuZCBmaWxlIG9yCi0gICBLZXJtaXQgc2NyaXB0LiBJdCBj YW4gYmUgZXhlY3V0ZWQgd2l0aCBLZXJtaXQncyBUQUtFIGNvbW1hbmQ6Ci0KLSAgKC9jdXJyZW50 L2RpcikgQy1LZXJtaXQ+IHRha2UgY29tbWFuZGZpbGUKLQotICAgKHdoZXJlICJjb21tYW5kZmls ZSIgaXMgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgZmlsZSkuIFBsZWFzZSBkb24ndAotICAgcGlw ZSBhIGNvbW1hbmQgZmlsZSBpbnRvIEtlcm1pdCdzIHN0YW5kYXJkIGlucHV0ICh3aGljaCBtaWdo dCBvciBtaWdodAotICAgbm90IHdvcmspOyBpZiB5b3UgaGF2ZSBLZXJtaXQgY29tbWFuZHMgaW4g YSBmaWxlLCB0ZWxsIEtlcm1pdCB0byBUQUtFCi0gICB0aGUgZmlsZS4KLQotICAgSW4gVW5peCBv bmx5LCBhIEtlcm1pdCBjb21tYW5kIGZpbGUgY2FuIGFsc28gYmUgZXhlY3V0ZWQgZGlyZWN0bHkg YnkKLSAgIGluY2x1ZGluZyBhICJrZXJiYW5nIiBsaW5lIGFzIHRoZSBmaXJzdCBsaW5lIG9mIHRo ZSBmaWxlOgotCi0gICMhL3Vzci9sb2NhbC9iaW4va2VybWl0ICsKLQotICAgVGhhdCBpcywgYSB0 b3AgbGluZSB0aGF0IHN0YXJ0cyB3aXRoICIjISIsIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IHRo ZQotICAgZnVsbCBwYXRoIG9mIHRoZSBLZXJtaXQgZXhlY3V0YWJsZSwgYW5kIHRoZW4sIGlmIHRo ZSBLZXJtaXQgc2NyaXB0IGlzCi0gICB0byBiZSBnaXZlbiBhcmd1bWVudHMgb24gdGhlIGNvbW1h bmQgbGluZSwgYSBzcGFjZSBhbmQgYSBwbHVzIHNpZ24uIFRoZQotICAgc2NyaXB0IGZpbGUgbXVz dCBhbHNvIGhhdmUgZXhlY3V0ZSBwZXJtaXNzaW9uOgotCi0gIGNobW9kICt4IGNvbW1hbmRmaWxl Ci0KLSAgIEV4Y2VwdCBmb3IgdGhlICIgKyIgcGFydCwgdGhpcyBpcyBleGFjdGx5IHRoZSBzYW1l IGFzIHlvdSB3b3VsZCBkbyBmb3IKLSAgIGEgc2hlbGwgc2NyaXB0LCBhIFBlcmwgc2NyaXB0LCBl dGMuIEhlcmUncyBhIHNpbXBsZSBidXQgdXNlbGVzcyBleGFtcGxlCi0gICBzY3JpcHQgdGhhdCBy ZWd1cmdpdGF0ZXMgaXRzIGFyZ3VtZW50cyAodXAgdG8gdGhyZWUgb2YgdGhlbSk6Ci0KLSAgIyEv dXNyL2xvY2FsL2Jpbi9rZXJtaXQgKwotICBpZiBkZWZpbmVkIFwlMSBlY2hvICJBcmd1bWVudCAx OiBcJTEiCi0gIGlmIGRlZmluZWQgXCUyIGVjaG8gIkFyZ3VtZW50IDI6IFwlMiIKLSAgaWYgZGVm aW5lZCBcJTMgZWNobyAiQXJndW1lbnQgMzogXCUzIgotICBpZiBkZWZpbmVkIFwlNCBlY2hvICJl dGMuLi4iCi0gIGV4aXQKLQotICAgSWYgdGhpcyBmaWxlIGlzIHN0b3JlZCBpbiB5b3VyIGN1cnJl bnQgZGlyZWN0b3J5IGFzICJjb21tYW5kZmlsZSIsCi0gICB0aGVuOgotCi0gIC4vY29tbWFuZGZp bGUgb25lIHR3byB0aHJlZSBmb3VyIGZpdmUKLQotICAgcHJpbnRzOgotCi0gIEFyZ3VtZW50IDE6 IG9uZQotICBBcmd1bWVudCAyOiB0d28KLSAgQXJndW1lbnQgMzogdGhyZWUKLSAgZXRjLi4uCi0K LSAgIFRoaXMgaWxsdXN0cmF0ZXMgdGhlIGJhc2ljIHN0cnVjdHVyZSBvZiBhIHN0YW5kYWxvbmUg S2VybWl0IHNjcmlwdDogdGhlCi0gICAia2VyYmFuZyBsaW5lIiwgdGhlbiBzb21lIGNvbW1hbmRz LiBJdCBzaG91bGQgZW5kIHdpdGggImV4aXQiIHVubGVzcwotICAgeW91IHdhbnQgdGhlIEtlcm1p dCBwcm9tcHQgdG8gYXBwZWFyIHdoZW4gaXQgaXMgZmluaXNoZWQuIFwlMSBpcyB0aGUKLSAgIGZp cnN0IGFyZ3VtZW50LCBcJTIgdGhlIHNlY29uZCwgYW5kIHNvIG9uLgotCi0gICBZb3UgY2FuIGFs c28gY3JlYXRlIHlvdXIgb3duIGNvbW1hbmRzIGJ5IGRlZmluaW5nIG5hbWVkIG1hY3JvcyBjb21w b3NlZAotICAgb2Ygb3RoZXIgS2VybWl0IGNvbW1hbmRzIChvciBtYWNyb3MpLiBIZXJlJ3MgYSBz aW1wbGUgZXhhbXBsZToKLQotICBkZWZpbmUgbXlkaWFsIHsKLSAgICAgIHNldCBtb2RlbSB0eXBl IHVzcm9ib3RpY3MKLSAgICAgIHNldCBwb3J0IC9kZXYvdHR5UzAKLSAgICAgIGlmIGZhaWwgZW5k IDEKLSAgICAgIHNldCBzcGVlZCA1NzYwMAotICAgICAgZGlhbCBcJTEKLSAgICAgIGlmIHN1Y2Nl c3MgY29ubmVjdAotICB9Ci0KLSAgIFRoaXMgc2hvd3MgaG93IHlvdSBjYW4gY29tYmluZSBtYW55 IGNvbW1hbmRzIGludG8gb25lIGNvbW1hbmQsICJteWRpYWwiCi0gICBpbiB0aGlzIGNhc2UgKHlv dSBjYW4gdXNlIGFueSBuYW1lIHlvdSBsaWtlLCBwcm92aWRlZCBpdCBkb2VzIG5vdCBjbGFzaAot ICAgd2l0aCB0aGUgbmFtZSBvZiBhIGJ1aWx0LWluIGNvbW1hbmQpLiBXaGVuIHRoaXMgbWFjcm8g ZGVmaW5pdGlvbiBpcyBpbgotICAgZWZmZWN0LCB5b3UgY2FuIHR5cGUgY29tbWFuZHMgbGlrZToK LQotICBteWRpYWwgNzY1NDMyMQotCi0gICBhbmQgaXQgZXhlY3V0ZXMgYWxsIHRoZSBjb21tYW5k cyBpbiBtYWNybyBkZWZpbml0aW9uLCBzdWJzdGl0dXRpbmcgdGhlCi0gICBmaXJzdCBvcGVyYW5k ICgiNzY1NDMyMSIpIGZvciB0aGUgZm9ybWFsIHBhcmFtZXRlciAoIlwlMSIpIGluIHRoZQotICAg ZGVmaW5pdGlvbi4gVGhpcyBzYXZlcyB5b3UgZnJvbSBoYXZpbmcgdG8gdHlwZSBsb3RzIG9mIGNv bW1hbmRzIGV2ZXJ5Ci0gICB0aW1lIHlvdSB3YW50IHRvIG1ha2UgYSBtb2RlbSBjYWxsLgotCi0g ICBPbmUgd2F5IHRvIGhhdmUgdGhlIG1hY3JvIGRlZmluaXRpb24gaW4gZWZmZWN0IGlzIHRvIHR5 cGUgdGhlCi0gICBkZWZpbml0aW9uIGF0IHRoZSBLZXJtaXQgcHJvbXB0LiBBbm90aGVyIHdheSBp cyB0byBzdG9yZSB0aGUgZGVmaW5pdGlvbgotICAgaW4gYSBmaWxlIGFuZCBUQUtFIHRoZSBmaWxl LiBJZiB5b3Ugd2FudCB0aGUgZGVmaW5pdGlvbiB0byBiZSBpbiBlZmZlY3QKLSAgIGF1dG9tYXRp Y2FsbHkgZXZlcnkgdGltZSB5b3Ugc3RhcnQgS2VybWl0LCBwdXQgdGhlIGRlZmluaXRpb24gaW4g eW91cgotICAgaW5pdGlhbGl6YXRpb24gb3IgY3VzdG9taXphdGlvbiBmaWxlIChleHBsYWluZWQg Wzc4XWJlbG93KS4KLQotICAgSGVyZSdzIGEgc29tZXdoYXQgbW9yZSBhbWJpdGlvdXMgZXhhbXBs ZToKLQotICBkZWZpbmUgbXlkZWxldGUgewotICAgICAgbG9jYWwgdHJhc2gKLSAgICAgIGFzc2ln biB0cmFzaCBcdihob21lKXRyYXNoY2FuLwotICAgICAgaWYgbm90IGRlZmluZWQgXCUxIGVuZCAx ICJEZWxldGUgd2hhdD8iCi0gICAgICBpZiB3aWxkIFwlMSBlbmQgMSAiRGVsZXRpbmcgbXVsdGlw bGUgZmlsZXMgaXMgdG9vIHNjYXJ5IgotICAgICAgaWYgbm90IGV4aXN0IFwlMSBlbmQgMSAiSSBj YW4ndCBmaW5kIFwlMSIKLSAgICAgIGlmIG5vdCBkaXJlY3RvcnkgXG0odHJhc2gpIHsKLSAgICAg ICAgICBta2RpciBcbSh0cmFzaCkKLSAgICAgICAgICBpZiBmYWlsIGVuZCAxICJObyB0cmFzaCBj YW4iCi0gICAgICB9Ci0gICAgICByZW5hbWUgL2xpc3QgXCUxIFxtKHRyYXNoKQotICB9Ci0gIGRl ZmluZSBteXVuZGVsZXRlIHsKLSAgICAgIGxvY2FsIHRyYXNoCi0gICAgICBhc3NpZ24gdHJhc2gg XHYoaG9tZSl0cmFzaGNhbi8KLSAgICAgIGlmIG5vdCBkZWZpbmVkIFwlMSBlbmQgMSAiVW5kZWxl dGUgd2hhdD8iCi0gICAgICBpZiB3aWxkIFwlMSBlbmQgMSAiVW5kZWxldGluZyBtdWx0aXBsZSBm aWxlcyBpcyB0b28gaGFyZCIKLSAgICAgIGlmIG5vdCBkaXJlY3RvcnkgXG0odHJhc2gpIGVuZCAx ICJObyB0cmFzaCBjYW4iCi0gICAgICBpZiBub3QgZXhpc3QgXG0odHJhc2gpXCUxIGVuZCAxICJJ IGNhbid0IGZpbmQgXCUxIGluIHRyYXNoIGNhbiIKLSAgICAgIHJlbmFtZSAvbGlzdCBcbSh0cmFz aClcJTEgLgotICB9Ci0KLSAgIFRoZXNlIG1hY3JvcyBhcmUgbm90IGV4YWN0bHkgcHJvZHVjdGlv biBxdWFsaXR5ICh0aGV5IGRvbid0IGhhbmRsZQotICAgZmlsZW5hbWVzIHRoYXQgaW5jbHVkZSBw YXRoIHNlZ21lbnRzLCB0aGV5IGRvbid0IGhhbmRsZSBtdWx0aXBsZSBmaWxlcywKLSAgIGV0Yyks IGJ1dCB5b3UgZ2V0IHRoZSBpZGVhOiB5b3UgY2FuIHBhc3MgYXJndW1lbnRzIHRvIG1hY3Jvcywg dGhleSBjYW4KLSAgIGNoZWNrIHRoZW0gYW5kIG1ha2Ugb3RoZXIga2luZHMgb2YgZGVjaXNpb25z LCBhbmQgdGhlIGNvbW1hbmRzCi0gICB0aGVtc2VsdmVzIGFyZSByZWxhdGl2ZWx5IGludHVpdGl2 ZSBhbmQgaW50ZWxsaWdpYmxlLgotCi0gICBJZiB5b3UgcHV0IHRoZSBhYm92ZSBsaW5lcyBpbnRv IHlvdXIgaW5pdGlhbGl6YXRpb24gb3IgY3VzdG9taXphdGlvbgotICAgZmlsZSwgeW91J2xsIGhh dmUgTVlERUxFVEUgYW5kIE1ZVU5ERUxFVEUgY29tbWFuZHMgYXZhaWxhYmxlIGV2ZXJ5IHRpbWUK LSAgIHlvdSBzdGFydCBLZXJtaXQsIGF0IGxlYXN0IGFzIGxvbmcgYXMgeW91IGRvbid0IHN1cHBy ZXNzIGV4ZWN1dGlvbiBvZgotICAgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUuIChFeGVyY2lzZSBm b3IgdGhlIHJlYWRlcjogTWFrZSB0aGVzZSBtYWNyb3MKLSAgIGdlbmVyYWxseSB1c2VmdWw6IHJl bW92ZSBsaW1pdGF0aW9ucywgYWRkIHRyYXNoY2FuIGRpc3BsYXksIGJyb3dzaW5nLAotICAgZW1w dHlpbmcsIGV0Yy4pCi0KLSAgIEtlcmJhbmcgc2NyaXB0cyBleGVjdXRlIHdpdGhvdXQgdGhlIGlu aXRpYWxpemF0aW9uIGZpbGUuIFRoaXMgdG8ga2VlcAotICAgdGhlbSBwb3J0YWJsZSBhbmQgYWxz byB0byBtYWtlIHRoZW0gc3RhcnQgZmFzdGVyLiBJZiB5b3Ugd2FudCB0byB3cml0ZQotICAgS2Vy YmFuZyBzY3JpcHRzIHRoYXQgZGVwZW5kIG9uIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlLCBpbmNs dWRlIHRoZQotICAgY29tbWFuZAotCi0gIHRha2UgXHYoaG9tZSkua2VybXJjCi0KLSAgIGF0IHRo ZSBkZXNpcmVkIHNwb3QgaW4gdGhlIHNjcmlwdC4gQnkgdGhlIHdheSwgXHYoeHh4KSBpcyBhIGJ1 aWx0LWluCi0gICB2YXJpYWJsZSAoeHh4IGlzIHRoZSB2YXJpYWJsZSBuYW1lLCAiaG9tZSIgaW4g dGhpcyBjYXNlKS4gVG8gc2VlIHdoYXQKLSAgIGJ1aWx0LWluIHZhcmlhYmxlcyBhcmUgYXZhaWxh YmxlLCB0eXBlICJzaG93IHZhcmlhYmxlcyIgYXQgdGhlIEMtS2VybWl0Ci0gICBwcm9tcHQuIFRv IHNlZSB3aGF0IGVsc2UgeW91IGNhbiBzaG93LCB0eXBlICJzaG93ID8iLiBcbSh4eHgpIGlzIGEg dXNlcgotICAgZGVmaW5lZCB2YXJpYWJsZSAoc3RyaWN0bHkgc3BlYWtpbmcsIGl0IGlzIGEgbWFj cm8gdXNlZCBhcyBhIHZhcmlhYmxlKS4KLQotQ29tbWFuZCBMaXN0Ci0KLSAgIEMtS2VybWl0IGhh cyBtb3JlIHRoYW4gMjAwIHRvcC1sZXZlbCBjb21tYW5kcywgYW5kIHNvbWUgb2YgdGhlc2UsIHN1 Y2gKLSAgIGFzIFNFVCwgYnJhbmNoIG9mZiBpbnRvIGh1bmRyZWRzIG9mIHN1YmNvbW1hbmRzIG9m IHRoZWlyIG93biwgc28gaXQncwotICAgbm90IHByYWN0aWNhbCB0byBkZXNjcmliZSB0aGVtIGFs bCBoZXJlLiBJbnN0ZWFkLCBoZXJlJ3MgYSBjb25jaXNlIGxpc3QKLSAgIG9mIHRoZSBtb3N0IGNv bW1vbmx5IHVzZWQgdG9wLWxldmVsIGNvbW1hbmRzLCBncm91cGVkIGJ5IGNhdGVnb3J5LiBUbwot ICAgbGVhcm4gYWJvdXQgZWFjaCBjb21tYW5kLCB0eXBlICJoZWxwIiBmb2xsb3dlZCBieSB0aGUg Y29tbWFuZCBuYW1lLAotICAgZS5nLiAiaGVscCBzZXQiLiBUZXJtcyBzdWNoIGFzIENvbW1hbmQg c3RhdGUgYW5kIENvbm5lY3Qgc3RhdGUgYXJlCi0gICBleHBsYWluZWQgaW4gc3Vic2VxdWVudCBz ZWN0aW9ucy4KLQotICAgT3B0aW9uYWwgZmllbGRzIGFyZSBzaG93biBpbiBbIGl0YWxpY2l6ZWQg YnJhY2tldHMgXS4gZmlsZW5hbWUgbWVhbnMKLSAgIHRoZSBuYW1lIG9mIGEgc2luZ2xlIGZpbGUu IGZpbGVzcGVjIG1lYW5zIGEgZmlsZSBzcGVjaWZpY2F0aW9uIHRoYXQgaXMKLSAgIGFsbG93ZWQg dG8gY29udGFpbiB3aWxkY2FyZCBjaGFyYWN0ZXJzIGxpa2UgJyonIHRvIG1hdGNoIGdyb3VwcyBv ZgotICAgZmlsZXMuIG9wdGlvbnMgYXJlIChvcHRpb25hbCkgc3dpdGNoZXMgbGlrZSAvUEFHRSwg L05PUEFHRSwgL1FVSUVULAotICAgZXRjLCBsaXN0ZWQgaW4gdGhlIEhFTFAgdGV4dCBmb3IgZWFj aCBjb21tYW5kLiBFeGFtcGxlOgotCi0gIHNlbmQgL3JlY3Vyc2l2ZSAvbGFyZ2VyOjEwMDAwIC9h ZnRlcjotMXdlZWsgL2V4Y2VwdDoqLnR4dCAqCi0KLSAgIHdoaWNoIGNhbiBiZSByZWFkIGFzICJz ZW5kIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgYW5kIGFsbCB0aGUKLSAgIG9uZXMg dW5kZXJuZWF0aCBpdCB0aGF0IGFyZSBsYXJnZXIgdGhhbiAxMDAwMCBieXRlcywgbm8gbW9yZSB0 aGFuIG9uZQotICAgd2VlayBvbGQsIGFuZCB3aG9zZSBuYW1lcyBkb24ndCBlbmQgd2l0aCAiLnR4 dCIuCi0KLSAgIEJhc2ljIENvbW1hbmRzCi0KLSAgIEhFTFAgUmVxdWVzdHMgdG9wLWxldmVsIGhl bHAuCi0gICBIRUxQIGNvbW1hbmQgUmVxdWVzdHMgaGVscCBhYm91dCB0aGUgZ2l2ZW4gY29tbWFu ZC4KLSAgIElOVFJPRFVDVElPTiBSZXF1ZXN0cyBhIGJyaWVmIGludHJvZHVjdGlvbiB0byBDLUtl cm1pdC4KLSAgIExJQ0VOU0UgRGlzcGxheXMgdGhlIEMtS2VybWl0IHNvZnR3YXJlIGNvcHlyaWdo dCBhbmQgbGljZW5zZS4KLSAgIFZFUlNJT04gRGlzcGxheXMgQy1LZXJtaXQncyB2ZXJzaW9uIG51 bWJlci4KLSAgIEVYSVQgWyBudW1iZXIgXSBFeGl0cyBmcm9tIEtlcm1pdCB3aXRoIHRoZSBnaXZl biBzdGF0dXMgY29kZS4gU3lub255bXM6Ci0gICBRVUlULCBFLCBRLgotICAgVEFLRSBmaWxlbmFt ZSBbIHBhcmFtZXRlcnMuLi4gXSBFeGVjdXRlcyBjb21tYW5kcyBmcm9tIHRoZSBnaXZlbiBmaWxl LgotICAgTE9HIGl0ZW0gWyBmaWxlbmFtZSBdIEtlZXBzIGEgbG9nIG9mIHRoZSBnaXZlbiBpdGVt IGluIHRoZSBnaXZlbiBmaWxlLgotICAgWyBETyBdIG1hY3JvIFsgcGFyYW1ldGVycy4uLiBdICAg IEV4ZWN1dGVzIGNvbW1hbmRzIGZyb20gdGhlIGdpdmVuCi0gICBtYWNyby4KLSAgIFNFVCBwYXJh bWV0ZXIgdmFsdWUgU2V0cyB0aGUgZ2l2ZW4gcGFyYW1ldGVyIHRvIHRoZSBnaXZlbiB2YWx1ZS4K LSAgIFNIT1cgY2F0ZWdvcnkgU2hvd3Mgc2V0dGluZ3MgaW4gYSBnaXZlbiBjYXRlZ29yeS4KLSAg IFNUQVRVUyBUZWxscyB3aGV0aGVyIHByZXZpb3VzIGNvbW1hbmQgc3VjY2VlZGVkIG9yIGZhaWxl ZC4KLSAgIERBVEUgWyBkYXRlLWFuZC9vci10aW1lIF0gU2hvd3MgY3VycmVudCBkYXRlLXRpbWUg b3IgaW50ZXJwcmV0cyBnaXZlbgotICAgZGF0ZS10aW1lLgotICAgUlVOIFsgZXh0ZXJuLWNvbW1h bmQgWyBwYXJhbWV0ZXJzLi4uIF0gUnVucyB0aGUgZ2l2ZW4gZXh0ZXJuYWwgY29tbWFuZC4KLSAg IFN5bm9ueW06ICEuCi0gICBFWEVDIFsgZXh0ZXJuLWNvbW1hbmQgWyBwYXJhbXMuLi4gXSBLZXJt aXQgb3ZlcmxheXMgaXRzZWxmIHdpdGggdGhlCi0gICBnaXZlbiBjb21tYW5kLgotICAgU1VTUEVO RCBTdG9wcyBLZXJtaXQgYW5kIHB1dHMgaXQgaW4gdGhlIGJhY2tncm91bmQuIFN5bm9ueW06IFou Ci0KLSAgIExvY2FsIEZpbGUgTWFuYWdlbWVudAotCi0gICBUWVBFIFsgb3B0aW9ucyBdIGZpbGVu YW1lIERpc3BsYXlzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gZmlsZS4KLSAgIE1PUkUgWyBv cHRpb25zIF0gZmlsZW5hbWUgRXF1aXZhbGVudCB0byBUWVBFIC9QQUdFIChwYXVzZSBhZnRlciBl YWNoCi0gICBzY3JlZW5mdWwpLgotICAgQ0FUIFsgb3B0aW9ucyBdIGZpbGVuYW1lIEVxdWl2YWxl bnQgdG8gVFlQRSAvTk9QQUdFLgotICAgSEVBRCBbIG9wdGlvbnMgXSBmaWxlbmFtZSBEaXNwbGF5 cyB0aGUgZmlyc3QgZmV3IGxpbmVzIG9mIGEgZ2l2ZW4gZmlsZS4KLSAgIFRBSUwgWyBvcHRpb25z IF0gZmlsZW5hbWUgRGlzcGxheXMgdGhlIGxhc3QgZmV3IGxpbmVzIG9mIGEgZ2l2ZW4gZmlsZS4K LSAgIEdSRVAgWyBvcHRpb25zIF0gcGF0dGVybiBmaWxlc3BlYyBEaXNwbGF5cyBsaW5lcyBmcm9t IGZpbGVzIHRoYXQgbWF0Y2gKLSAgIHRoZSBwYXR0ZXJuLiBTeW5vbnltOiBGSU5ELgotICAgRElS RUNUT1JZIFsgb3B0aW9ucyBdIFsgZmlsZXNwZWMgXSBMaXN0cyBmaWxlcyAoYnVpbHQtaW4sIG1h bnkKLSAgIG9wdGlvbnMpLgotICAgTFMgWyBvcHRpb25zIF0gWyBmaWxlc3BlYyBdIExpc3RzIGZp bGVzIChydW5zIGV4dGVybmFsICJscyIgY29tbWFuZCkuCi0gICBERUxFVEUgWyBvcHRpb25zIF0g WyBmaWxlc3BlYyBdIERlbGV0ZXMgZmlsZXMuIFN5bm9ueW06IFJNLgotICAgUFVSR0UgWyBvcHRp b25zIF0gWyBmaWxlc3BlYyBdIFJlbW92ZXMgYmFja3VwICgqLn5ufikgZmlsZXMuCi0gICBDT1BZ IFsgb3B0aW9ucyBdIFsgZmlsZXNwZWNzLi4uIF0gQ29waWVzIGZpbGVzLiBTeW5vbnltOiBDUC4K LSAgIFJFTkFNRSBbIG9wdGlvbnMgXSBbIGZpbGVzcGVjcy4uLiBdIFJlbmFtZXMgZmlsZXMuIFN5 bm9ueW06IE1WLgotICAgQ0hNT0QgWyBvcHRpb25zIF0gWyBmaWxlc3BlY3MuLi4gXSBDaGFuZ2Vz IHBlcm1pc3Npb25zIG9mIGZpbGVzLgotICAgVFJBTlNMQVRFIGZpbGVuYW1lIGNoYXJzZXRzIGZp bGVuYW1lIF0gQ29udmVydHMgZmlsZSdzIGNoYXJhY3RlciBzZXQuCi0gICBTeW5vbnltOiBYTEFU RS4KLSAgIENEIENoYW5nZXMgeW91ciB3b3JraW5nIGRpcmVjdG9yeSB0byB5b3VyIGhvbWUgZGly ZWN0b3J5LgotICAgQ0QgZGlyZWN0b3J5IENoYW5nZXMgeW91ciB3b3JraW5nIGRpcmVjdG9yeSB0 byB0aGUgb25lIGdpdmVuLgotICAgQ0RVUCBDaGFuZ2VzIHlvdXIgd29ya2luZyBkaXJlY3Rvcnkg b25lIGxldmVsIHVwLgotICAgUFdEIERpc3BsYXlzIHlvdXIgd29ya2luZyBkaXJlY3RvcnkuCi0g ICBCQUNLIFJldHVybnMgdG8geW91ciBwcmV2aW91cyB3b3JraW5nIGRpcmVjdG9yeS4KLSAgIE1L RElSIFsgZGlyZWN0b3J5IF0gQ3JlYXRlcyBhIGRpcmVjdG9yeS4KLSAgIFJNRElSIFsgZGlyZWN0 b3J5IF0gUmVtb3ZlcyBhIGRpcmVjdG9yeS4KLQotICAgTWFraW5nIENvbm5lY3Rpb25zCi0KLSAg IFNFVCBMSU5FIFsgb3B0aW9ucyBdIGRldmljZW5hbWUgICAgICAgIE9wZW5zIHRoZSBuYW1lZCBz ZXJpYWwgcG9ydC4KLSAgIFN5bm9ueW06IFNFVCBQT1JULgotICAgT1BFTiBMSU5FIFsgb3B0aW9u cyBdIGRldmljZW5hbWUgU2FtZSBhcyBTRVQgTElORS4gU3lub255bTogT1BFTiBQT1JULgotICAg U0VUIE1PREVNIFRZUEUgWyBuYW1lIF0gVGVsbHMgS2VybWl0IHdoYXQga2luZCBvZiBtb2RlbSBp cyBvbiB0aGUgcG9ydC4KLSAgIERJQUwgWyBudW1iZXIgXSBUZWxscyBLZXJtaXQgdG8gZGlhbCB0 aGUgZ2l2ZW4gcGhvbmUgbnVtYmVyIHdpdGggdGhlCi0gICBtb2RlbS4KLSAgIFJFRElBTCBSZWRp YWxzIHRoZSBtb3N0IHJlY2VudGx5IGRpYWxlZCBwaG9uZSBudW1iZXIuCi0gICBBTlNXRVIgV2Fp dHMgZm9yIGFuZCBhbnN3ZXJzIGFuIGluY29taW5nIGNhbGwgb24gdGhlIG1vZGVtLgotICAgQVVU SEVOVElDQVRFIFsgcGFyYW1ldGVycy4uLiBdIFBlcmZvcm1zIHNlY3VyZSBhdXRoZW50aWNhdGlv biBvbiBhCi0gICBUQ1AvSVAgY29ubmVjdGlvbi4KLSAgIFNFVCBORVRXT1JLIFRZUEUgeyBUQ1Av SVAsIFguMjUsIC4uLiB9IFNlbGVjdHMgbmV0d29yayB0eXBlIGZvcgotICAgc3Vic2VxdWVudCBT RVQgSE9TVCBjb21tYW5kcy4KLSAgIFNFVCBIT1NUIFsgb3B0aW9ucyBdIGhvc3QgWyBwb3J0IF0g T3BlbnMgYSBuZXR3b3JrIGNvbm5lY3Rpb24gdG8gdGhlCi0gICBnaXZlbiBob3N0IGFuZCBwb3J0 LgotICAgU0VUIEhPU1QgWyBvcHRpb25zIF0gKiBwb3J0IFdhaXRzIGZvciBhbiBpbmNvbWluZyBU Q1AvSVAgY29ubmVjdGlvbiBvbgotICAgdGhlIGdpdmVuIHBvcnQuCi0gICBURUxORVQgWyBvcHRp b25zIF0gaG9zdCBPcGVucyBhIFRlbG5ldCBjb25uZWN0aW9uIHRvIHRoZSBob3N0IGFuZAotICAg ZW50ZXJzIENvbm5lY3Qgc3RhdGUuCi0gICBSTE9HSU4gWyBvcHRpb25zIF0gaG9zdCBPcGVucyBh biBSbG9naW4gY29ubmVjdGlvbiB0byB0aGUgaG9zdCBhbmQKLSAgIGVudGVycyBDb25uZWN0IHN0 YXRlLgotICAgSUtTRCBbIG9wdGlvbnMgXSBob3N0IE9wZW5zIGEgY29ubmVjdGlvbiB0byBhbiBJ bnRlcm5ldCBLZXJtaXQgU2VydmljZS4KLSAgIFNTSCBbIG9wdGlvbnMgXSBob3N0IE9wZW5zIGFu IFNTSCBjb25uZWN0aW9uIHRvIHRoZSBob3N0IGFuZCBlbnRlcnMKLSAgIENvbm5lY3Qgc3RhdGUu Ci0gICBGVFAgT1BFTiBob3N0IFsgb3B0aW9ucyBdIE9wZW5zIGFuIEZUUCBjb25uZWN0aW9uIHRv IHRoZSBob3N0LgotICAgSFRUUCBbIG9wdGlvbnMgXSBPUEVOIGhvc3QgT3BlbnMgYW4gSFRUUCBj b25uZWN0aW9uIHRvIHRoZSBob3N0LgotICAgUFRZIGV4dGVybmFsLWNvbW1hbmQgUnVucyB0aGUg Y29tbWFuZCBvbiBhIHBzZXVkb3Rlcm1pbmFsIGFzIGlmIGl0IHdlcmUKLSAgIGEgY29ubmVjdGlv bi4KLSAgIFBJUEUgZXh0ZXJuYWwtY29tbWFuZCBSdW5zIHRoZSBjb21tYW5kIHRocm91Z2ggYSBw aXBlIGFzIGlmIGl0IHdlcmUgYQotICAgY29ubmVjdGlvbi4KLQotICAgVXNpbmcgQ29ubmVjdGlv bnMKLQotICAgQ09OTkVDVCBbIG9wdGlvbnMgXSAgICAgICAgICAgICAgICAgICAgRW50ZXJzIENv bm5lY3QgKHRlcm1pbmFsKSBzdGF0ZS4KLSAgIFN5bm9ueW06IEMuCi0gICBSRURJUkVDVCBjb21t YW5kIFJlZGlyZWN0cyB0aGUgZ2l2ZW4gZXh0ZXJuYWwgY29tbWFuZCBvdmVyIHRoZQotICAgY29u bmVjdGlvbi4KLSAgIFRFTE9QVCBjb21tYW5kIFNlbmRzIGEgVGVsbmV0IHByb3RvY29sIGNvbW1h bmQgKFRlbG5ldCBjb25uZWN0aW9ucwotICAgb25seSkuCi0gICBDdHJsLVxDICJFc2NhcGVzIGJh Y2siIGZyb20gQ29ubmVjdCBzdGF0ZSB0byBDb21tYW5kIHN0YXRlLgotICAgQ3RybC1cQiAoSW4g Q29ubmVjdCBzdGF0ZSkgU2VuZHMgYSBCUkVBSyBzaWduYWwgKHNlcmlhbCBvciBUZWxuZXQpLgot ICAgQ3RybC1cISAoSW4gQ29ubmVjdCBzdGF0ZSkgRW50ZXJzIGluZmVyaW9yIHNoZWxsOyAiZXhp dCIgdG8gcmV0dXJuLgotICAgQ3RybC1cPyAoSW4gQ29ubmVjdCBzdGF0ZSkgU2hvd3MgYSBtZW51 IG9mIG90aGVyIGVzY2FwZS1sZXZlbCBvcHRpb25zLgotICAgQ3RybC1cQ3RybC1cIChJbiBDb25u ZWN0IHN0YXRlKSBUeXBlIHR3byBDdHJsLUJhY2tzbGFzaGVzIHRvIHNlbmQgb25lCi0gICBvZiB0 aGVtLgotICAgU0VUIEVTQ0FQRSBbIGNoYXJhY3RlciBdIENoYW5nZXMgS2VybWl0J3MgQ29ubmVj dC1zdGF0ZSBlc2NhcGUKLSAgIGNoYXJhY3Rlci4KLQotICAgQ2xvc2luZyBDb25uZWN0aW9ucwot Ci0gICBIQU5HVVAgSGFuZ3MgdXAgdGhlIGN1cnJlbnRseSBvcGVuIHNlcmlhbC1wb3J0IG9yIG5l dHdvcmsgY29ubmVjdGlvbi4KLSAgIENMT1NFIENsb3NlcyB0aGUgY3VycmVudGx5IG9wZW4gc2Vy aWFsLXBvcnQgb3IgbmV0d29yayBjb25uZWN0aW9uLgotICAgU0VUIExJTkUgKHdpdGggbm8gZGV2 aWNlbmFtZSkgICAgICAgICAgQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3BlbgotICAgc2VyaWFsLXBv cnQgb3IgbmV0d29yayBjb25uZWN0aW9uLgotICAgU0VUIEhPU1QgKHdpdGggbm8gaG9zdG5hbWUp IENsb3NlcyB0aGUgY3VycmVudGx5IG9wZW4gc2VyaWFsLXBvcnQgb3IKLSAgIG5ldHdvcmsgY29u bmVjdGlvbi4KLSAgIEZUUCBDTE9TRSBDbG9zZXMgdGhlIGN1cnJlbnRseSBvcGVuIEZUUCBjb25u ZWN0aW9uLgotICAgSFRUUCBDTE9TRSBDbG9zZXMgdGhlIGN1cnJlbnRseSBvcGVuIEhUVFAgY29u bmVjdGlvbi4KLSAgIEVYSVQgQWxzbyBjbG9zZXMgYWxsIGNvbm5lY3Rpb25zLiBTeW5vbnltOiBR VUlULgotICAgU0VUIEVYSVQgV0FSTklORyBPRkYgU3VwcHJlc3NlcyB3YXJuaW5nIGFib3V0IG9w ZW4gY29ubmVjdGlvbnMgb24gZXhpdAotICAgb3IgY2xvc2UuCi0KLSAgIEZpbGUgVHJhbnNmZXIK LQotICAgU0VORCBbIG9wdGlvbnMgXSBmaWxlbmFtZSBbIGFzLW5hbWUgXSAgU2VuZHMgdGhlIGdp dmVuIGZpbGUuIFN5bm9ueW06Ci0gICBTLgotICAgU0VORCBbIG9wdGlvbnMgXSBmaWxlc3BlYyBT ZW5kcyBhbGwgZmlsZXMgdGhhdCBtYXRjaC4KLSAgIFJFU0VORCBbIG9wdGlvbnMgXSBmaWxlc3Bl YyBSZXN1bWVzIGFuIGludGVycnVwdGVkIFNFTkQgZnJvbSB0aGUgcG9pbnQKLSAgIG9mIGZhaWx1 cmUuCi0gICBSRUNFSVZFIFsgb3B0aW9ucyBdIFsgYXMtbmFtZSBdIFdhaXRzIHBhc3NpdmVseSBm b3IgZmlsZXMgdG8gYXJyaXZlLgotICAgU3lub255bTogUi4KLSAgIExPRyBUUkFOU0FDVElPTlMg WyBmaWxlbmFtZSBdIEtlZXBzIGEgcmVjb3JkIG9mIGZpbGUgdHJhbnNmZXJzLgotICAgRkFTVCBV c2UgZmFzdCBmaWxlLXRyYW5zZmVyIHNldHRpbmdzIChkZWZhdWx0KS4KLSAgIENBVVRJT1VTIFVz ZSBjYXV0aW91cyBhbmQgbGVzcyBmYXN0IGZpbGUtdHJhbnNmZXIgc2V0dGluZ3MuCi0gICBST0JV U1QgVXNlIHVsdHJhLWNvbnNlcnZhdGl2ZSBhbmQgc2xvdyBmaWxlLXRyYW5zZmVyIHNldHRpbmdz LgotICAgU1RBVElTVElDUyBbIG9wdGlvbnMgXSBHaXZlcyBzdGF0aXN0aWNzIGFib3V0IHRoZSBt b3N0IHJlY2VudCBmaWxlCi0gICB0cmFuc2Zlci4KLSAgIFdIRVJFIEFmdGVyIHRyYW5zZmVyOiAi V2hlcmUgZGlkIG15IGZpbGVzIGdvPyIuCi0gICBUUkFOU01JVCBbIG9wdGlvbnMgXSBbIGZpbGVu YW1lIF0gU2VuZHMgZmlsZSB3aXRob3V0IHByb3RvY29sLiBTeW5vbnltOgotICAgWE1JVC4KLSAg IExPRyBTRVNTSU9OIFsgZmlsZW5hbWUgXSBDYXB0dXJlcyByZW1vdGUgdGV4dCBvciBmaWxlcyB3 aXRob3V0Ci0gICBwcm90b2NvbC4KLSAgIFNFVCBQUk9UT0NPTCBbIG5hbWUuLi4gXSBUZWxscyBL ZXJtaXQgdG8gdXNlIGFuIGV4dGVybmFsIGZpbGUtdHJhbnNmZXIKLSAgIHByb3RvY29sLgotICAg RlRQIHsgUFVULCBNUFVULCBHRVQsIE1HRVQsIC4uLiB9IEZUUCBjbGllbnQgY29tbWFuZHMuCi0g ICBIVFRQIHsgUFVULCBHRVQsIEhFQUQsIFBPU1QsIC4uLiB9IEhUVFAgY2xpZW50IGNvbW1hbmRz LgotCi0gICBLZXJtaXQgU2VydmVyCi0KLSAgIEVOQUJMRSwgRElTQUJMRSAgICAgICAgICAgICAg ICAgICAgICAgIENvbnRyb2xzIHdoaWNoIGZlYXR1cmVzIGNhbiBiZQotICAgdXNlZCBieSBjbGll bnRzLgotICAgU0VUIFNFUlZFUiBTZXRzIHBhcmFtZXRlcnMgcHJpb3IgdG8gZW50ZXJpbmcgU2Vy dmVyIHN0YXRlLgotICAgU0VSVkVSIEVudGVycyBTZXJ2ZXIgc3RhdGUuCi0KLSAgIENsaWVudCBv ZiBLZXJtaXQgb3IgRlRQIFNlcnZlcgotCi0gICBbIFJFTU9URSBdIExPR0lOIFsgdXNlciBwYXNz d29yZCBdIExvZ3MgaW4gdG8gYSBLZXJtaXQgc2VydmVyIG9yIElLU0QKLSAgIHRoYXQgcmVxdWly ZXMgaXQuCi0gICBbIFJFTU9URSBdIExPR09VVCBMb2dzIG91dCBmcm9tIGEgS2VybWl0IHNlcnZl ciBvciBJS1NELgotICAgU0VORCBbIG9wdGlvbnMgXSBmaWxlbmFtZSBbIGFzLW5hbWUgXSAgU2Vu ZHMgdGhlIGdpdmVuIGZpbGUgdG8gdGhlCi0gICBzZXJ2ZXIuIFN5bm9ueW1zOiBTLCBQVVQuCi0g ICBTRU5EIFsgb3B0aW9ucyBdIGZpbGVzcGVjIFNlbmRzIGFsbCBmaWxlcyB0aGF0IG1hdGNoLgot ICAgUkVTRU5EIFsgb3B0aW9ucyBdIGZpbGVzcGVjIFJlc3VtZXMgYW4gaW50ZXJydXB0ZWQgU0VO RCBmcm9tIHRoZSBwb2ludAotICAgb2YgZmFpbHVyZS4KLSAgIEdFVCBbIG9wdGlvbnMgXSByZW1v dGUtZmlsZXNwZWMgQXNrcyB0aGUgc2VydmVyIHRvIHNlbmQgdGhlIGdpdmVuCi0gICBmaWxlcy4g U3lub255bTogRy4KLSAgIFJFR0VUIFsgb3B0aW9ucyBdIHJlbW90ZS1maWxlc3BlYyBSZXN1bWVz IGFuIGludGVycnVwdGVkIEdFVCBmcm9tIHRoZQotICAgcG9pbnQgb2YgZmFpbHVyZS4KLSAgIFJF TU9URSBDRCBbIGRpcmVjdG9yeSBdIEFza3Mgc2VydmVyIHRvIGNoYW5nZSBpdHMgd29ya2luZyBk aXJlY3RvcnkuCi0gICBTeW5vbnltOiBSQ0QuCi0gICBSRU1PVEUgUFdEIFsgZGlyZWN0b3J5IF0g QXNrcyBzZXJ2ZXIgdG8gZGlzcGxheSBpdHMgd29ya2luZyBkaXJlY3RvcnkuCi0gICBTeW5vbnlt OiBSUFdELgotICAgUkVNT1RFIERJUkVDVE9SWSBbIGZpbGVzcGVjLi4uIF0gQXNrcyBzZXJ2ZXIg dG8gc2VuZCBhIGRpcmVjdG9yeQotICAgbGlzdGluZy4gU3lub255bTogUkRJUi4KLSAgIFJFTU9U RSBERUxFVEUgWyBmaWxlc3BlYy4uLiBdIEFza3Mgc2VydmVyIHRvIGRlbGV0ZSBmaWxlcy4gU3lu b255bToKLSAgIFJERUwuCi0gICBSRU1PVEUgWyBjb21tYW5kLi4uIF0gKE1hbnkgb3RoZXIgY29t bWFuZHM6ICJyZW1vdGUgPyIgZm9yIGEgbGlzdCkuCi0gICBNQUlMIFsgb3B0aW9ucyBdIGZpbGVz cGVjIFNlbmRzIGZpbGUocykgdG8gYmUgZGVsaXZlcmVkIGFzIGUtbWFpbAotICAgKEtlcm1pdCBv bmx5KS4KLSAgIEZJTklTSCBBc2tzIHRoZSBzZXJ2ZXIgdG8gZXhpdCBzZXJ2ZXIgc3RhdGUgKEtl cm1pdCBvbmx5KS4KLSAgIEJZRSBBc2tzIHRoZSBzZXJ2ZXIgdG8gbG9nIG91dCBhbmQgY2xvc2Ug dGhlIGNvbm5lY3Rpb24uCi0KLSAgIFNjcmlwdCBQcm9ncmFtbWluZwotICAgICAgICAgIERFRklO RSwgREVDTEFSRSwgVU5ERUZJTkUsIFVOREVDTEFSRSwgQVNTSUdOLCBFVkFMVUFURSwKLSAgICAg ICAgICBTRVhQUkVTU0lPTiwgQVJSQVksIFNPUlQsIElOUFVULCBPVVRQVVQsIElGLCBGT1IsIFdI SUxFLCBTV0lUQ0gsCi0gICAgICAgICAgR09UTywgRUNITywgQVNLLCBHRVRDLCBHRVRPSywgQVNT RVJULCBXQUlULCBTTEVFUCwgRk9QRU4sIEZSRUFELAotICAgICAgICAgIEZXUklURSwgRkNMT1NF LCBTVE9QLCBFTkQsIFJFVFVSTiwgTEVBUk4sIFNISUZULCBUUkFDRSwgVk9JRCwKLSAgICAgICAg ICBJTkNSRU1FTlQsIERFQ1JFTUVOVCwgLi4uIEZvciB0aGVzZSBhbmQgbWFueSBtb3JlIHlvdSds bCBuZWVkIHRvCi0gICAgICAgICAgY29uc3VsdCB0aGUgWzc5XW1hbnVhbCBhbmQgc3VwcGxlbWVu dHMsIGFuZC9vciB2aXNpdCB0aGUKLSAgICAgICAgICBbODBdS2VybWl0IFNjcmlwdCBMaWJyYXJ5 LCB3aGljaCBhbHNvIGluY2x1ZGVzIGEgYnJpZWYgdHV0b3JpYWwuCi0gICAgICAgICAgSGludDog SEVMUCBMRUFSTiB0byBmaW5kIG91dCBob3cgdG8gZ2V0IEtlcm1pdCB0byB3cml0ZSBzaW1wbGUK LSAgICAgICAgICBzY3JpcHRzIGZvciB5b3UuCi0KLSAgIE1hbnkgb2YgS2VybWl0J3MgY29tbWFu ZHMgaGF2ZSBzeW5vbnltcywgdmFyaWFudHMsIHJlbGF0aXZlcywgYW5kIHNvCi0gICBvbi4gRm9y IGV4YW1wbGUsIE1TRU5EIGlzIGEgdmVyc2lvbiBvZiBTRU5EIHRoYXQgYWNjZXB0cyBhIGxpc3Qg b2YgZmlsZQotICAgc3BlY2lmaWNhdGlvbnMgdG8gYmUgc2VudCwgcmF0aGVyIHRoYW4ganVzdCBv bmUgZmlsZSBzcGVjaWZpY2F0aW9uLCBhbmQKLSAgIE1QVVQgaXMgYSBzeW5vbnltIG9mIE1TRU5E LiBNT1ZFIG1lYW5zIHRvIFNFTkQgYW5kIHRoZW4gREVMRVRFIHRoZQotICAgc291cmNlIGZpbGUg aWYgc3VjY2Vzc2Z1bC4gTU1PVkUgaXMgbGlrZSBNT1ZFLCBidXQgYWNjZXB0cyBhIGxpc3Qgb2YK LSAgIGZpbGVzcGVjcywgYW5kIHNvIG9uLiBUaGVzZSBhcmUgZGVzY3JpYmVkIGluIHRoZSBbODFd ZnVsbAotICAgZG9jdW1lbnRhdGlvbi4KLQotICAgVXNlIHF1ZXN0aW9uIG1hcmsgdG8gZmVlbCB5 b3VyIHdheSB0aHJvdWdoIGFuIHVuZmFtaWxpYXIgY29tbWFuZCwgYXMgaW4KLSAgIHRoaXMgZXhh bXBsZSAodGhlIHBhcnQgeW91IHR5cGUgaXMgdW5kZXJsaW5lZCk6Ci0KLSAgQy1LZXJtaXQ+IHJl bW90ZSA/IE9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgYXNzaWduICAgICBkZWxldGUgICAgIGhl bHAgICAgICAgbG9naW4gICAgICBwcmludCAgICAgIHJlbmFtZSAgICAgc3BhY2UKLSAgIGNkICAg ICAgICAgZGlyZWN0b3J5ICBob3N0ICAgICAgIGxvZ291dCAgICAgcHdkICAgICAgICBybWRpciAg ICAgIHR5cGUKLSAgIGNvcHkgICAgICAgZXhpdCAgICAgICBrZXJtaXQgICAgIG1rZGlyICAgICAg cXVlcnkgICAgICBzZXQgICAgICAgIHdobwotICBDLUtlcm1pdD4gcmVtb3RlIHNldCA/IE9uZSBv ZiB0aGUgZm9sbG93aW5nOgotICAgYXR0cmlidXRlcyAgIGZpbGUgICAgICAgICByZXRyeSAgICAg ICAgdHJhbnNmZXIKLSAgIGJsb2NrLWNoZWNrICByZWNlaXZlICAgICAgc2VydmVyICAgICAgIHdp bmRvdwotICBDLUtlcm1pdD4gcmVtb3RlIHNldCBmaWxlID8gT25lIG9mIHRoZSBmb2xsb3dpbmc6 Ci0gICBjaGFyYWN0ZXItc2V0ICBpbmNvbXBsZXRlICAgICByZWNvcmQtbGVuZ3RoCi0gICBjb2xs aXNpb24gICAgICBuYW1lcyAgICAgICAgICB0eXBlCi0gIEMtS2VybWl0PiByZW1vdGUgc2V0IGZp bGUgbmFtZXMgPyBPbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAgIGNvbnZlcnRlZCAgbGl0ZXJhbAot ICBDLUtlcm1pdD4gcmVtb3RlIHNldCBmaWxlIG5hbWVzIGxpdGVyYWwKLSAgQy1LZXJtaXQ+Ci0K LSAgIFRoaXMgaXMgY2FsbGVkIG1lbnUgb24gZGVtYW5kOiB5b3UgZ2V0IGEgbWVudSB3aGVuIHlv dSB3YW50IG9uZSwgYnV0Ci0gICBtZW51cyBhcmUgbm90IGZvcmNlZCBvbiB5b3UgZXZlbiB3aGVu IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuIE5vdGUgdGhhdAotICAgeW91IGNhbiBhbHNvIGFiYnJl dmlhdGUgbW9zdCBrZXl3b3JkcywgYW5kIHlvdSBjYW4gY29tcGxldGUgdGhlbSB3aXRoCi0gICB0 aGUgVGFiIG9yIEVzYyBrZXkuIEFsc28gbm90ZSB0aGF0ID8gd29ya3MgZm9yIGZpbGVuYW1lcyB0 b28sIGFuZCB0aGF0Ci0gICB5b3UgY2FuIHVzZSBpdCBpbiB0aGUgbWlkZGxlIG9mIGEga2V5d29y ZCBvciBmaWxlbmFtZSwgbm90IGp1c3QgYXQgdGhlCi0gICBiZWdpbm5pbmcuIEZvciBleGFtcGxl LCAic2VuZCB4PyIgbGlzdHMgYWxsIHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudAotICAgZGlyZWN0 b3J5IHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggJ3gnLgotCi0gICBbODJdS2VybWl0IEhvbWUgWzgz XUMtS2VybWl0IEhvbWUgWzg0XUMtS2VybWl0IEZBUQotCi1JTklUSUFMSVpBVElPTiBGSUxFCi0K LSAgIFs4NV1Ub3AgWzg2XUNvbnRlbnRzIFs4N11OZXh0IFs4OF1QcmV2aW91cwotCi0gICBJbiBp dHMgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBDLUtlcm1pdCBleGVjdXRlcyBjb21tYW5kcyBmcm9t IGEgZmlsZQotICAgY2FsbGVkIC5rZXJtcmMgaW4geW91ciBob21lIGRpcmVjdG9yeSB3aGVuIGl0 IHN0YXJ0cywgdW5sZXNzIGl0IGlzCi0gICBnaXZlbiB0aGUgLVkgb3IgLXkgY29tbWFuZC1saW5l IG9wdGlvbi4gQ3VzdG9tIGNvbmZpZ3VyYXRpb25zIG1pZ2h0Ci0gICBzdWJzdGl0dXRlIGEgc2hh cmVkIHN5c3RlbS13aWRlIGluaXRpYWxpemF0aW9uIGZpbGUuIFRoZSBTSE9XIEZJTEUKLSAgIGNv bW1hbmQgdGVsbHMgd2hhdCBpbml0aWFsaXphdGlvbiBmaWxlLCBpZiBhbnksIHdhcyB1c2VkLiBU aGUgc3RhbmRhcmQKLSAgIGluaXRpYWxpemF0aW9uIGZpbGUgImNoYWlucyIgdG8gYW4gaW5kaXZp ZHVhbCBjdXN0b21pemF0aW9uIGZpbGUsCi0gICAubXlrZXJtYywgaW4gdGhlIGhvbWUgZGlyZWN0 b3J5LCBpbiB3aGljaCBlYWNoIHVzZXIgY2FuIGVzdGFibGlzaAotICAgaGVyL2hpcyBvd24gcHJl ZmVyZW5jZXMsIGRlZmluZSBtYWNyb3MsIGFuZCBzbyBvbi4KLQotICAgU2luY2UgZXhlY3V0aW9u IG9mIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlIChhdCBsZWFzdCB0aGUgc3RhbmRhcmQgb25lKQot ICAgbWFrZXMgQy1LZXJtaXQgdGFrZSBsb25nZXIgdG8gc3RhcnQsIGl0IG1pZ2h0IGJlIGJldHRl ciBub3QgdG8gaGF2ZSBhbgotICAgaW5pdGlhbGl6YXRpb24gZmlsZSwgZXNwZWNpYWxseSBub3cg dGhhdCBLZXJtaXQncyBkZWZhdWx0IHN0YXJ0dXAKLSAgIGNvbmZpZ3VyYXRpb24gaXMgd2VsbCBh dHR1bmVkIHRvIG1vZGVybiBjb21wdXRpbmcgYW5kIG5ldHdvcmtpbmcgLS0gaW4KLSAgIG90aGVy IHdvcmRzLCB5b3Ugbm8gbG9uZ2VyIGhhdmUgZG8gYW55dGhpbmcgc3BlY2lhbCB0byBtYWtlIEtl cm1pdAotICAgdHJhbnNmZXJzIGdvIGZhc3QuIFNvIGluc3RlYWQgb2YgaGF2aW5nIGFuIGluaXRp YWxpemF0aW9uIGZpbGUgdGhhdCBpcwotICAgZXhlY3V0ZWQgZXZlcnkgdGltZSBLZXJtaXQgc3Rh cnRzLCB5b3UgbWlnaHQgY29uc2lkZXIgbWFraW5nIG9uZSBvcgotICAgbW9yZSBrZXJiYW5nIHNj cmlwdHMgKHdpdGggbmFtZXMgb3RoZXIgdGhhdCAua2VybXJjKSB0aGF0IGRvIE5PVAotICAgaW5j bHVkZSBhbiAiZXhpdCIgY29tbWFuZCwgYW5kIGludm9rZSB0aG9zZSB3aGVuIHlvdSBuZWVkIHRo ZSBzZXR0aW5ncywKLSAgIG1hY3JvIGRlZmluaXRpb25zLCBhbmQvb3Igc2NyaXB0ZWQgYWN0aW9u cyB0aGV5IGNvbnRhaW4sIGFuZCBpbnZva2UKLSAgIEMtS2VybWl0IGRpcmVjdGx5IHdoZW4geW91 IGRvbid0LgotCi0gICBUbyBwdXQgaXQgYW5vdGhlciB3YXkuLi4gV2Ugc3RpbGwgZGlzdHJpYnV0 ZSB0aGUgc3RhbmRhcmQKLSAgIGluaXRpYWxpemF0aW9uIGZpbGUgc2luY2UgaXQncyBmZWF0dXJl ZCBpbiB0aGUgbWFudWFsIGFuZCBiYWNrd2FyZHMKLSAgIGNvbXBhdGliaWxpdHkgaXMgaW1wb3J0 YW50IHRvIHVzLiBCdXQgdGhlcmUncyBubyBoYXJtIGluIG5vdCB1c2luZyBpdAotICAgaWYgeW91 IGRvbid0IG5lZWQgdGhlIHN0dWZmIHRoYXQncyBpbiBpdCAoc2VydmljZXMgZGlyZWN0b3J5LCBk aWFsaW5nCi0gICBkaXJlY3RvcnksIG5ldHdvcmsgZGlyZWN0b3J5LCBhbmQgYXNzb2NpYXRlZCBt YWNybyBkZWZpbml0aW9ucykuIE9uIHRoZQotICAgb3RoZXIgaGFuZCwgaWYgdGhlcmUgYXJlIHNl dHRpbmdzIG9yIG1hY3JvcyB5b3Ugd2FudCBpbiBlZmZlY3QgRVZFUlkKLSAgIHRpbWUgeW91IHVz ZSBLZXJtaXQsIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlIChvciB0aGUgY3VzdG9taXphdGlvbiBm aWxlCi0gICBpdCBjaGFpbnMgdG8pIGlzIHRoZSBwbGFjZSB0byBwdXQgdGhlbSwgYmVjYXVzZSB0 aGF0J3MgdGhlIG9ubHkgcGxhY2UKLSAgIEtlcm1pdCBsb29rcyBmb3IgdGhlbSBhdXRvbWF0aWNh bGx5IGVhY2ggdGltZSB5b3Ugc3RhcnQgaXQuCi0KLSAgIFs4OV1LZXJtaXQgSG9tZSBbOTBdQy1L ZXJtaXQgSG9tZSBbOTFdQy1LZXJtaXQgRkFRCi0KLU1PREVTIE9GIE9QRVJBVElPTgotCi0gICBb OTJdVG9wIFs5M11Db250ZW50cyBbOTRdTmV4dCBbOTVdUHJldmlvdXMKLQotICAgS2VybWl0IGlz IHNhaWQgdG8gYmUgaW4gTG9jYWwgbW9kZSBpZiBpdCBoYXMgbWFkZSBhIGNvbm5lY3Rpb24gdG8K LSAgIGFub3RoZXIgY29tcHV0ZXIsIGUuZy4gYnkgZGlhbGluZyBpdCBvciBlc3RhYmxpc2hpbmcg YSBUZWxuZXQKLSAgIGNvbm5lY3Rpb24gdG8gaXQuIFRoZSBvdGhlciBjb21wdXRlciBpcyByZW1v dGUsIHNvIGlmIHlvdSBzdGFydCBhbm90aGVyCi0gICBjb3B5IG9mIEtlcm1pdCBvbiB0aGUgcmVt b3RlIGNvbXB1dGVyLCBpdCBpcyBzYWlkIHRvIGJlIGluIFJlbW90ZSBtb2RlCi0gICAoYXMgbG9u ZyBhcyBpdCBoYXMgbm90IG1hZGUgYW55IGNvbm5lY3Rpb25zIG9mIGl0cyBvd24pLiBUaGUgbG9j YWwKLSAgIEtlcm1pdCBjb21tdW5pY2F0ZXMgb3ZlciB0aGUgY29tbXVuaWNhdGlvbnMgZGV2aWNl IG9yIG5ldHdvcmsKLSAgIGNvbm5lY3Rpb24sIGFjdGluZyBhcyBhIGNvbmR1aXQgYmV0d2VlbiB0 aGUgdGhlIHJlbW90ZSBjb21wdXRlciBhbmQKLSAgIHlvdXIga2V5Ym9hcmQgYW5kIHNjcmVlbi4g VGhlIHJlbW90ZSBLZXJtaXQgaXMgdGhlIGZpbGUtdHJhbnNmZXIKLSAgIHBhcnRuZXIgdG8gdGhl IGxvY2FsIEtlcm1pdCBhbmQgY29tbXVuaWNhdGVzIG9ubHkgdGhyb3VnaCBpdHMgc3RhbmRhcmQK LSAgIGlucHV0IGFuZCBvdXRwdXQuCi0KLSAgIEF0IGFueSBtb21lbnQsIGEgS2VybWl0IHByb2dy YW0gY2FuIGJlIGluIGFueSBvZiB0aGUgZm9sbG93aW5nIHN0YXRlcy4KLSAgIEl0J3MgaW1wb3J0 YW50IHRvIGtub3cgd2hhdCB0aGV5IGFyZSBhbmQgaG93IHRvIGNoYW5nZSBmcm9tIG9uZSB0byB0 aGUKLSAgIG90aGVyLgotCi0gICBDb21tYW5kIHN0YXRlCi0gICAgICAgICAgSW4gdGhpcyBzdGF0 ZSwgS2VybWl0IHJlYWRzIGNvbW1hbmRzIGZyb206Ci0KLSAgICAgICAgICArIFlvdXIga2V5Ym9h cmQ7IG9yOgotICAgICAgICAgICsgQSBmaWxlLCBvcjoKLSAgICAgICAgICArIEEgbWFjcm8gZGVm aW5pdGlvbi4KLQotICAgICAgICAgIFlvdSBjYW4gZXhpdCBmcm9tIENvbW1hbmQgc3RhdGUgYmFj ayB0byBVbml4IHdpdGggdGhlIEVYSVQgb3IKLSAgICAgICAgICBRVUlUIGNvbW1hbmQgKHNhbWUg dGhpbmcpLiBZb3UgY2FuIGVudGVyIENvbm5lY3Qgc3RhdGUgd2l0aCBhbnkKLSAgICAgICAgICBv ZiB2YXJpb3VzIGNvbW1hbmRzIChDT05ORUNULCBESUFMLCBURUxORVQsIGV0YykuIFlvdSBjYW4g ZW50ZXIKLSAgICAgICAgICBmaWxlIHRyYW5zZmVyIHN0YXRlIHdpdGggY29tbWFuZHMgbGlrZSBT RU5ELCBSRUNFSVZFLCBhbmQgR0VULgotICAgICAgICAgIFlvdSBjYW4gZW50ZXIgU2VydmVyIHN0 YXRlIHdpdGggdGhlIFNFUlZFUiBjb21tYW5kLiBUaGUgVEFLRQotICAgICAgICAgIGNvbW1hbmQg dGVsbHMgS2VybWl0IHRvIHJlYWQgYW5kIGV4ZWN1dGUgY29tbWFuZHMgZnJvbSBhIGZpbGUuCi0g ICAgICAgICAgVGhlIChwZXJoYXBzIGltcGxpZWQpIERPIGNvbW1hbmQgdGVsbHMgS2VybWl0IHRv IHJlYWQgYW5kCi0gICAgICAgICAgZXhlY3V0ZSBjb21tYW5kcyBmcm9tIGEgbWFjcm8gZGVmaW5p dGlvbi4gV2hpbGUgaW4gQ29tbWFuZAotICAgICAgICAgIHN0YXRlLCB5b3UgY2FuIGludGVycnVw dCBhbnkgY29tbWFuZCwgbWFjcm8sIG9yIGNvbW1hbmQgZmlsZSBieQotICAgICAgICAgIHR5cGlu ZyBDdHJsLUMgKGhvbGQgZG93biB0aGUgQ3RybCBrZXkgYW5kIHByZXNzIHRoZSBDIGtleSk7IHRo aXMKLSAgICAgICAgICBub3JtYWxseSBicmluZ3MgeW91IGJhY2sgdG8gdGhlIHByb21wdC4KLQot ICAgU2hlbGwgc3RhdGUKLSAgICAgICAgICBZb3UgY2FuIGludm9rZSBhbiBpbmZlcmlvciBzaGVs bCBvciBleHRlcm5hbCBjb21tYW5kIGZyb20gdGhlCi0gICAgICAgICAgS2VybWl0IGNvbW1hbmQg cHJvbXB0IGJ5IHVzaW5nIHRoZSBQVVNILCBSVU4gKCEpLCBFRElULCBvcgotICAgICAgICAgIEJS T1dTRSBjb21tYW5kLiBXaGlsZSB0aGUgaW5mZXJpb3Igc2hlbGwgb3IgY29tbWFuZCBpcyBhY3Rp dmUsCi0gICAgICAgICAgS2VybWl0IGlzIHN1c3BlbmRlZCBhbmQgZG9lcyBub3RoaW5nLiBSZXR1 cm4gdG8gS2VybWl0IENvbW1hbmQKLSAgICAgICAgICBzdGF0ZSBieSBleGl0aW5nIGZyb20gdGhl IGluZmVyaW9yIHNoZWxsIG9yIGFwcGxpY2F0aW9uLgotCi0gICBDb25uZWN0IHN0YXRlCi0gICAg ICAgICAgSW4gdGhpcyBzdGF0ZSwgd2hpY2ggY2FuIGJlIGVudGVyZWQgb25seSB3aGVuIGluIExv Y2FsIG1vZGUKLSAgICAgICAgICAoaS5lLiB3aGVuIEtlcm1pdCBoYXMgbWFkZSBhIGNvbm5lY3Rp b24gdG8gYW5vdGhlciBjb21wdXRlciksCi0gICAgICAgICAgS2VybWl0IGlzIGFjdGluZyBhcyBh IHRlcm1pbmFsIHRvIHRoZSByZW1vdGUgY29tcHV0ZXIuIFlvdXIKLSAgICAgICAgICBrZXlzdHJv a2VzIGFyZSBzZW50IHRvIHRoZSByZW1vdGUgY29tcHV0ZXIgYW5kIGNoYXJhY3RlcnMgdGhhdAot ICAgICAgICAgIGFycml2ZSBvdmVyIHRoZSBjb21tdW5pY2F0aW9uIGNvbm5lY3Rpb24gYXJlIGRp c3BsYXllZCBvbiB5b3VyCi0gICAgICAgICAgc2NyZWVuLiBUaGlzIHN0YXRlIGlzIGVudGVyZWQg d2hlbiB5b3UgZ2l2ZSBhIENPTk5FQ1QsIERJQUwsCi0gICAgICAgICAgVEVMTkVULCBSTE9HSU4s IG9yIElLU0QgY29tbWFuZC4gWW91IGNhbiByZXR1cm4gdG8gY29tbWFuZCBzdGF0ZQotICAgICAg ICAgIGJ5IGxvZ2dpbmcgb3V0IG9mIHRoZSByZW1vdGUgY29tcHV0ZXIsIG9yIGJ5IHR5cGluZzoK LQotICBDdHJsLVxjCi0KLSAgICAgICAgICBUaGF0IGlzOiBIb2xkIGRvd24gdGhlIEN0cmwga2V5 IGFuZCBwcmVzcyB0aGUgYmFja3NsYXNoIGtleSwKLSAgICAgICAgICB0aGVuIGxldCBnbyBvZiB0 aGUgQ3RybCBrZXkgYW5kIHByZXNzIHRoZSBDIGtleS4gVGhpcyBpcyBjYWxsZWQKLSAgICAgICAg ICBlc2NhcGluZyBiYWNrLiBDZXJ0YWluIG90aGVyIGVzY2FwZS1sZXZlbCBjb21tYW5kcyBhcmUg YWxzbwotICAgICAgICAgIHByb3ZpZGVkOyB0eXBlIEN0cmwtXD8gZm9yIGEgbGlzdC4gRm9yIGV4 YW1wbGUsIHlvdSBjYW4gZW50ZXIKLSAgICAgICAgICBTaGVsbCBzdGF0ZSB3aXRoOgotCi0gIEN0 cmwtXCEKLQotICAgICAgICAgIFRvIHNlbmQgYSBDdHJsLVwgdG8gdGhlIGhvc3Qgd2hpbGUgaW4g Q29ubmVjdCBzdGF0ZSwgdHlwZSB0d28gb2YKLSAgICAgICAgICB0aGVtIGluIGEgcm93LiBTZWUg SEVMUCBDT05ORUNUIGFuZCBIRUxQIFNFVCBFU0NBUEUgZm9yIG1vcmUKLSAgICAgICAgICBpbmZv LgotCi0gICBMb2NhbCBmaWxlLXRyYW5zZmVyIHN0YXRlCi0gICAgICAgICAgSW4gdGhpcyBzdGF0 ZSwgS2VybWl0IGlzIHNlbmRpbmcgcGFja2V0cyBiYWNrIGFuZCBmb3J0aCB3aXRoIHRoZQotICAg ICAgICAgIG90aGVyIGNvbXB1dGVyIGluIG9yZGVyIHRvIHRyYW5zZmVyIGEgZmlsZSBvciBhY2Nv bXBsaXNoIHNvbWUKLSAgICAgICAgICBvdGhlciBmaWxlLXJlbGF0ZWQgdGFzay4gQW5kIGF0IHRo ZSBzYW1lIHRpbWUsIGl0IGlzIGRpc3BsYXlpbmcKLSAgICAgICAgICBpdHMgcHJvZ3Jlc3Mgb24g eW91ciBzY3JlZW4gYW5kIHdhdGNoaW5nIHlvdXIga2V5Ym9hcmQgZm9yCi0gICAgICAgICAgaW50 ZXJydXB0aW9ucy4gSW4gdGhpcyBzdGF0ZSwgdGhlIGZvbGxvd2luZyBzaW5nbGUta2V5c3Ryb2tl Ci0gICAgICAgICAgY29tbWFuZHMgYXJlIGFjY2VwdGVkOgotCi0gICAgICBYICAgICAgICBJbnRl cnJ1cHQgdGhlIGN1cnJlbnQgZmlsZSBhbmQgZ28gb24gdG8gdGhlIG5leHQgKGlmIGFueSkuCi0g ICAgICBaICAgICAgICBJbnRlcnJ1cHQgdGhlIGN1cnJlbnQgZmlsZSBhbmQgc2tpcCBhbGwgdGhl IHJlc3QuCi0gICAgICBFICAgICAgICBMaWtlIFogYnV0IHVzZXMgYSAic3Ryb25nZXIiIHByb3Rv Y29sICh1c2UgaWYgWCBvciBaIGRvbid0IHdvcmspLgotICAgICAgQ3RybC1DICAgSW50ZXJydXB0 IGZpbGUtdHJhbnNmZXIgbW9kZSAodXNlIGlmIFogb3IgRSBkb24ndCB3b3JrKS4KLQotICAgICAg ICAgIEtlcm1pdCByZXR1cm5zIHRvIGl0cyBwcmV2aW91cyBzdGF0ZSAoQ29tbWFuZCBvciBDb25u ZWN0KSB3aGVuCi0gICAgICAgICAgdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlIG9yIHdoZW4gaW50 ZXJydXB0ZWQgc3VjY2Vzc2Z1bGx5IGJ5IFgsCi0gICAgICAgICAgWiwgRSwgb3IgQ3RybC1DICho b2xkIGRvd24gdGhlIEN0cmwga2V5IGFuZCBwcmVzcyB0aGUgQyBrZXkpLgotCi0gICBSZW1vdGUg ZmlsZS10cmFuc2ZlciBzdGF0ZQotICAgICAgICAgIEluIHRoaXMgc3RhdGUsIEtlcm1pdCBpcyBl eGNoYW5naW5nIGZpbGUtdHJhbnNmZXIgcGFja2V0cyB3aXRoCi0gICAgICAgICAgaXRzIGxvY2Fs IHBhcnRuZXIgb3ZlciBpdHMgc3RhbmRhcmQgaS9vLiBJdCBsZWF2ZXMgdGhpcyBzdGF0ZQotICAg ICAgICAgIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuIEluIGNh c2UgeW91IGZpbmQKLSAgICAgICAgICB5b3VyIGxvY2FsIEtlcm1pdCBpbiBDb25uZWN0IHN0YXRl IGFuZCB0aGUgcmVtb3RlIG9uZSBpbgotICAgICAgICAgIEZpbGUtdHJhbnNmZXIgc3RhdGUgKGlu IHdoaWNoIGl0IHNlZW1zIHRvIGlnbm9yZSB5b3VyCi0gICAgICAgICAga2V5c3Ryb2tlcyksIHlv dSBjYW4gdXN1YWxseSByZXR1cm4gaXQgdG8gY29tbWFuZCBzdGF0ZSBieQotICAgICAgICAgIHR5 cGluZyB0aHJlZSBDdHJsLUMncyBpbiBhIHJvdy4gSWYgdGhhdCBkb2Vzbid0IHdvcmssIHJldHVy bgotICAgICAgICAgIHlvdXIgbG9jYWwgS2VybWl0IHRvIENvbW1hbmQgc3RhdGUgKEN0cmwtXCBD KSBhbmQgdHlwZQotICAgICAgICAgICJlLXBhY2tldCIgYW5kIHRoZW4gcHJlc3MgdGhlIFJldHVy biBvciBFbnRlciBrZXk7IHRoaXMgZm9yY2VzIGEKLSAgICAgICAgICBmYXRhbCBLZXJtaXQgcHJv dG9jb2wgZXJyb3IuCi0KLSAgIFJlbW90ZSBTZXJ2ZXIgc3RhdGUKLSAgICAgICAgICBUaGlzIGlz IGxpa2UgUmVtb3RlIEZpbGUtdHJhbnNmZXIgc3RhdGUsIGV4Y2VwdCBpdCBuZXZlciByZXR1cm5z Ci0gICAgICAgICAgYXV0b21hdGljYWxseSB0byBDb21tYW5kIHN0YXRlLiBSYXRoZXIsIGl0IGF3 YWl0cyBmdXJ0aGVyCi0gICAgICAgICAgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIGNsaWVudCBwcm9n cmFtOyB0aGF0IGlzLCBmcm9tIHlvdXIgTG9jYWwKLSAgICAgICAgICBLZXJtaXQgcHJvZ3JhbS4g WW91IGNhbiByZXR1cm4gdGhlIFJlbW90ZSBTZXJ2ZXIgdG8gaXRzIHByZXZpb3VzCi0gICAgICAg ICAgc3RhdGUgYnkgaXNzdWluZyBhICJmaW5pc2giIGNvbW1hbmQgdG8gdGhlIGNsaWVudCwgb3Ig aWYgeW91IGFyZQotICAgICAgICAgIGluIENvbm5lY3Qgc3RhdGUsIGJ5IHR5cGluZyB0aHJlZSBD dHJsLUMncyBpbiBhIHJvdy4gWW91IGNhbgotICAgICAgICAgIHRlbGwgdGhlIHNlcnZlciBqb2Ig dG8gbG9nIG91dCBhbmQgYnJlYWsgdGhlIGNvbm5lY3Rpb24gYnkKLSAgICAgICAgICBpc3N1aW5n IGEgImJ5ZSIgY29tbWFuZCB0byB0aGUgY2xpZW50LgotCi0gICBMb2NhbCBTZXJ2ZXIgc3RhdGUK LSAgICAgICAgICBMaWtlIFJlbW90ZS1TZXJ2ZXIgc3RhdGUsIGJ1dCBpbiBsb2NhbCBtb2RlLCBh bmQgdGhlcmVmb3JlIHdpdGgKLSAgICAgICAgICBpdHMgZmlsZS10cmFuc2ZlciBkaXNwbGF5IHNo b3dpbmcsIGFuZCBsaXN0ZW5pbmcgZm9yIHNpbmdsZS1rZXkKLSAgICAgICAgICBjb21tYW5kcywg YXMgaW4gTG9jYWwgRmlsZS10cmFuc2ZlciBzdGF0ZS4gVXN1YWxseSB0aGlzIHN0YXRlIGlzCi0g ICAgICAgICAgZW50ZXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYSByZW1vdGUgS2VybWl0IHByb2dy YW0gZ2l2ZXMgYSBHRVQKLSAgICAgICAgICBjb21tYW5kLgotCi0gICBDLUtlcm1pdCwgS2VybWl0 IDk1LCBhbmQgTVMtRE9TIEtlcm1pdCBhbGwgY2FuIHN3aXRjaCBhdXRvbWF0aWNhbGx5Ci0gICBm cm9tIENvbm5lY3Qgc3RhdGUgdG8gTG9jYWwgRmlsZS10cmFuc2ZlciBzdGF0ZSB3aGVuIHlvdSBp bml0aWF0ZSBhCi0gICBmaWxlIHRyYW5zZmVyIGZyb20gdGhlIHJlbW90ZSBjb21wdXRlciBieSBz dGFydGluZyBLZXJtaXQgYW5kIHRlbGxpbmcKLSAgIGl0IHRvIHNlbmQgb3IgZ2V0IGEgZmlsZSwg aW4gd2hpY2ggY2FzZSwgQ29ubmVjdCBzdGF0ZSBpcyBhdXRvbWF0aWNhbGx5Ci0gICByZXN1bWVk IGFmdGVyIHRoZSBmaWxlIHRyYW5zZmVyIGlzIGZpbmlzaGVkLgotCi0gICBOb3RlIHRoYXQgQy1L ZXJtaXQgaXMgbm90IGEgdGVybWluYWwgZW11bGF0b3IuIEl0IGlzIGEgY29tbXVuaWNhdGlvbnMK LSAgIGFwcGxpY2F0aW9uIHRoYXQgeW91IHJ1biBpbiBhIHRlcm1pbmFsIHdpbmRvdyAoZS5nLiBj b25zb2xlIG9yIFh0ZXJtKS4KLSAgIFRoZSBzcGVjaWZpYyBlbXVsYXRpb24sIHN1Y2ggYXMgVlQx MDAsIFZUMjIwLCBMaW51eCBDb25zb2xlLCBvciBYdGVybSwKLSAgIGlzIHByb3ZpZGVkIGJ5IHRo ZSB0ZXJtaW5hbCB3aW5kb3cgaW4gd2hpY2ggeW91IGFyZSBydW5uaW5nIEMtS2VybWl0LgotICAg S2VybWl0IDk1IGFuZCBNUy1ET1MgS2VybWl0LCBvbiB0aGUgb3RoZXIgaGFuZCwgYXJlIHRydWUg dGVybWluYWwKLSAgIGVtdWxhdG9ycy4gV2h5IGlzIEMtS2VybWl0IG5vdCBhIHRlcm1pbmFsIGVt dWxhdG9yPyBbOTZdQ0xJQ0sgSEVSRSB0bwotICAgcmVhZCBhYm91dCBpdC4KLQotICAgWzk3XUtl cm1pdCBIb21lIFs5OF1DLUtlcm1pdCBIb21lIFs5OV1DLUtlcm1pdCBGQVEKLQotTUFLSU5HIENP Tk5FQ1RJT05TCi0KLSAgIFsxMDBdVG9wIFsxMDFdQ29udGVudHMgWzEwMl1OZXh0IFsxMDNdUHJl dmlvdXMKLQotICAgSGVyZSBpcyBob3cgdG8gbWFrZSBkaWZmZXJlbnQga2luZHMgb2YgY29ubmVj dGlvbnMgdXNpbmcgaW50ZXJhY3RpdmUKLSAgIEtlcm1pdCBjb21tYW5kcyAoYXMgbm90ZWQgYWJv dmUsIHlvdSBjYW4gYWxzbyBtYWtlIGNvbm5lY3Rpb25zIHdpdGgKLSAgIGNvbW1hbmQtbGluZSBv cHRpb25zKS4gTm90ZSB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIG1ha2UgY29ubmVjdGlvbnMKLSAg IHdpdGggS2VybWl0LiBJdCBjYW4gYWxzbyBiZSB1c2VkIG9uIHRoZSBmYXIgZW5kIG9mIGEgY29u bmVjdGlvbiBhcyB0aGUKLSAgIHJlbW90ZSBmaWxlIHRyYW5zZmVyIGFuZCBtYW5hZ2VtZW50IHBh cnRuZXIgb2YgeW91ciBsb2NhbAotICAgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUuCi0KLSAgIE1h a2luZyBhIFRlbG5ldCBDb25uZWN0aW9uCi0gICAgICAgICAgQXQgdGhlIEMtS2VybWl0IGNvbW1h bmQgcHJvbXB0LCBzaW1wbHkgdHlwZToKLQotICB0ZWxuZXQgZm9vLmJhci5jb20gICAgICAgICA7 IFN1YnN0aXR1dGUgZGVzaXJlZCBob3N0IG5hbWUgb3IgYWRkcmVzcy4KLSAgdGVsbmV0IHh5emNv cnAuY29tIDMwMDAgICAgOyBZb3UgY2FuIGFsc28gaW5jbHVkZSBhIHBvcnQgbnVtYmVyLgotCi0g ICAgICAgICAgSWYgdGhlIGNvbm5lY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgS2VybWl0IGF1dG9tYXRp Y2FsbHkgZW50ZXJzCi0gICAgICAgICAgQ29ubmVjdCBzdGF0ZS4gV2hlbiB5b3UgbG9nb3V0IGZy b20gdGhlIHJlbW90ZSBob3N0LCBLZXJtaXQKLSAgICAgICAgICBhdXRvbWF0aWNhbGx5IHJldHVy bnMgdG8gaXRzIHByb21wdC4gTW9yZSBpbmZvOiBIRUxQIFRFTE5FVCwKLSAgICAgICAgICBIRUxQ IFNFVCBURUxORVQsIEhFTFAgU0VUIFRFTE9QVC4gQWxzbyBzZWUgdGhlIFsxMDRdSUtTRCBzZWN0 aW9uCi0gICAgICAgICAgYmVsb3cuCi0KLSAgIE1ha2luZyBhbiBSbG9naW4gY29ubmVjdGlvbgot ICAgICAgICAgIFRoaXMgaXMganVzdCBsaWtlIFRlbG5ldCwgZXhjZXB0IHlvdSBoYXZlIHRvIGJl IHJvb3QgdG8gZG8gaXQKLSAgICAgICAgICBiZWNhdXNlIFJsb2dpbiB1c2VzIGEgcHJpdmlsZWdl ZCBUQ1AgcG9ydDoKLQotICBybG9naW4gZm9vLmJhci5jb20gICAgICAgICA7IFN1YnN0aXR1dGUg ZGVzaXJlZCBob3N0IG5hbWUgb3IgYWRkcmVzcy4KLQotICAgICAgICAgIE1vcmUgaW5mbzogSEVM UCBSTE9HSU4uCi0KLSAgIE1ha2luZyBhbiBTU0ggQ29ubmVjdGlvbgotICAgICAgICAgIFVubGlr ZSBUZWxuZXQgYW5kIFJsb2dpbiwgU1NIIGNvbm5lY3Rpb25zIGFyZSBub3QgYnVpbHQtaW4sIGJ1 dAotICAgICAgICAgIGhhbmRsZWQgYnkgcnVubmluZyB5b3VyIGV4dGVybmFsIFNTSCBjbGllbnQg dGhyb3VnaCBhCi0gICAgICAgICAgcHNldWRvdGVybWluYWwuIFVzaW5nIEMtS2VybWl0IHRvIGNv bnRyb2wgdGhlIFNTSCBjbGllbnQgZ2l2ZXMKLSAgICAgICAgICB5b3UgYWxsIG9mIEtlcm1pdCdz IGZlYXR1cmVzIChmaWxlIHRyYW5zZmVyLCBjaGFyYWN0ZXItc2V0Ci0gICAgICAgICAgY29udmVy c2lvbiwgc2NyaXB0aW5nLCBldGMpIG92ZXIgU1NILgotCi0gIHNzaCBmb28uYmFyLmNvbSAgICAg ICAgICAgIDsgU3Vic3RpdHV0ZSBkZXNpcmVkIGhvc3QgbmFtZSBvciBhZGRyZXNzLgotCi0gICAg ICAgICAgTW9yZSBpbmZvOiBIRUxQIFNTSCwgSEVMUCBTRVQgU1NILgotCi0gICBEaWFsaW5nIHdp dGggYSBNb2RlbQotICAgICAgICAgIElmIGl0J3MgYW4gZXh0ZXJuYWwgbW9kZW0sIG1ha2Ugc3Vy ZSBpdCBpcyBjb25uZWN0ZWQgdG8gYSB1c2FibGUKLSAgICAgICAgICBzZXJpYWwgcG9ydCBvbiB5 b3VyIGNvbXB1dGVyIHdpdGggYSByZWd1bGFyIChzdHJhaWdodC10aHJvdWdoKQotICAgICAgICAg IFsxMDVdbW9kZW0gY2FibGUsIGFuZCB0byB0aGUgdGVsZXBob25lIGphY2sgd2l0aCBhIHRlbGVw aG9uZQotICAgICAgICAgIGNhYmxlLCBhbmQgdGhhdCBpdCdzIHR1cm5lZCBvbi4gVGhlbiB1c2Ug dGhlc2UgY29tbWFuZHM6Ci0KLSAgc2V0IG1vZGVtIHR5cGUgdXNyb2JvdGljcyAgOyBPciBvdGhl ciBzdXBwb3J0ZWQgdHlwZQotICBzZXQgbGluZSAvZGV2L3R0eVMwICAgICAgICA7IFNwZWNpZnkg ZGV2aWNlIG5hbWUKLSAgc2V0IHNwZWVkIDU3NjAwICAgICAgICAgICAgOyBPciBvdGhlciBkZXNp cmVkIHNwZWVkCi0gIHNldCBmbG93IHJ0cy9jdHMgICAgICAgICAgIDsgTW9zdCBtb2Rlcm4gbW9k ZW1zIHN1cHBvcnQgdGhpcwotICBzZXQgZGlhbCBtZXRob2QgdG9uZSAgICAgICA7IChvciBwdWxz ZSkKLSAgZGlhbCA3NjU0MzIxICAgICAgICAgICAgICAgOyBEaWFsIHRoZSBkZXNpcmVkIG51bWJl cgotCi0gICAgICAgICAgVHlwZSAic2V0IG1vZGVtIHR5cGUgPyIgZm9yIGEgbGlzdCBvZiBzdXBw b3J0ZWQgbW9kZW0gdHlwZXMuIElmCi0gICAgICAgICAgeW91IG9taXQgdGhlIFNFVCBNT0RFTSBU WVBFIGNvbW1hbmQsIHRoZSBkZWZhdWx0IHR5cGUgaXMKLSAgICAgICAgICAiZ2VuZXJpYy1oaWdo LXNwZWVkIiwgd2hpY2ggc2hvdWxkIHdvcmsgZm9yIG1vc3QgbW9kZXJuCi0gICAgICAgICAgQVQt Y29tbWFuZC1zZXQgbW9kZW1zLiBJZiB0aGUgbGluZSBpcyBidXN5LCBLZXJtaXQgcmVkaWFscwot ICAgICAgICAgIGF1dG9tYXRpY2FsbHkuIElmIHRoZSBjYWxsIGRvZXMgbm90IHN1Y2NlZWQsIHVz ZSAic2V0IGRpYWwKLSAgICAgICAgICBkaXNwbGF5IG9uIiBhbmQgdHJ5IGl0IGFnYWluIHRvIHdh dGNoIHdoYXQgaGFwcGVucy4gSWYgdGhlIGNhbGwKLSAgICAgICAgICBzdWNjZWVkcywgS2VybWl0 IGVudGVycyBDb25uZWN0IHN0YXRlIGF1dG9tYXRpY2FsbHkgYW5kIHJldHVybnMKLSAgICAgICAg ICB0byBpdHMgcHJvbXB0IGF1dG9tYXRpY2FsbHkgd2hlbiB5b3UgbG9nIG91dCBmcm9tIHRoZSBy ZW1vdGUKLSAgICAgICAgICBjb21wdXRlciBvciB0aGUgY29ubmVjdGlvbiBpcyBvdGhlcndpc2Ug bG9zdC4KLQotICAgICAgICAgIFlvdSBjYW4gYWxzbyBkaWFsIGZyb20gYSBtb2RlbSB0aGF0IGlz IGFjY2Vzc2libGUgYnkgVGVsbmV0LAotICAgICAgICAgIGUuZy4gdG8gYSByZXZlcnNlIHRlcm1p bmFsIHNlcnZlci4gSW4gdGhpcyBjYXNlIHRoZSBjb21tYW5kCi0gICAgICAgICAgc2VxdWVuY2Ug aXM6Ci0KLSAgc2V0IGhvc3QgdHMueHh4LmNvbSAyMDAwICAgOyBUZXJtaW5hbC1zZXJ2ZXIgYW5k IHBvcnQKLSAgc2V0IG1vZGVtIHR5cGUgdXNyb2JvdGljcyAgOyBPciBvdGhlciBzdXBwb3J0ZWQg dHlwZQotICBzZXQgZGlhbCBtZXRob2QgdG9uZSAgICAgICA7IChvciBwdWxzZSkKLSAgZGlhbCA3 NjU0MzIxICAgICAgICAgICAgICAgOyBEaWFsIHRoZSBkZXNpcmVkIG51bWJlcgotCi0gICAgICAg ICAgSWYgdGhlIHRlcm1pbmFsIHNlcnZlciBzdXBwb3J0cyB0aGUgVGVsbmV0IENvbSBQb3J0IE9w dGlvbiwKLSAgICAgICAgICBbMTA2XVJGQyAyMjE3LCB5b3UgY2FuIGFsc28gZ2l2ZSBzZXJpYWwt cG9ydCByZWxhdGVkIGNvbW1hbmRzCi0gICAgICAgICAgc3VjaCBhcyBTRVQgU1BFRUQsIFNFVCBQ QVJJVFksIGFuZCBzbyBvbiwgYW5kIEtlcm1pdCByZWxheXMgdGhlbQotICAgICAgICAgIHRvIHRo ZSB0ZXJtaW5hbCBzZXJ2ZXIgdXNpbmcgdGhlIHByb3RvY29sIHNwZWNpZmllZCBpbiB0aGUgUkZD LgotCi0gICAgICAgICAgTW9yZSBpbmZvOiBIRUxQIFNFVCBNT0RFTSwgSEVMUCBTRVQgTElORSwg SEVMUCBTRVQgU1BFRUQsIEhFTFAKLSAgICAgICAgICBTRVQgRkxPVywgSEVMUCBESUFMLCBIRUxQ IFNFVCBESUFMLCBIRUxQIFNFVCBNT0RFTSwgSEVMUCBTRVQKLSAgICAgICAgICBDQVJSSUVSLVdB VENILCBTSE9XIENPTU1VTklDQVRJT05TLCBTSE9XIE1PREVNLCBTSE9XIERJQUwuCi0KLSAgIERp cmVjdCBTZXJpYWwgUG9ydAotICAgICAgICAgIENvbm5lY3QgdGhlIHR3byBjb21wdXRlcnMsIEEg YW5kIEIsIHdpdGggYSBbMTA3XW51bGwgbW9kZW0gY2FibGUKLSAgICAgICAgICAob3IgdHdvIG1v ZGVtIGNhYmxlcyBpbnRlcmNvbm5lY3RlZCB3aXRoIGEgbnVsbC1tb2RlbSBhZGFwdGVyIG9yCi0g ICAgICAgICAgbW9kZW0gZWxpbWluYXRvcikuIEZyb20gQ29tcHV0ZXIgQToKLQotICBzZXQgbW9k ZW0gdHlwZSBub25lICAgICAgICA7IFRoZXJlIGlzIG5vIG1vZGVtCi0gIHNldCBsaW5lIC9kZXYv dHR5UzAgICAgICAgIDsgU3BlY2lmeSBkZXZpY2UgbmFtZQotICBzZXQgY2Fycmllci13YXRjaCBv ZmYgICAgICA7IElmIERUUiBhbmQgQ0QgYXJlIG5vdCBjcm9zcy1jb25uZWN0ZWQKLSAgc2V0IHNw ZWVkIDU3NjAwICAgICAgICAgICAgOyBPciBvdGhlciBkZXNpcmVkIHNwZWVkCi0gIHNldCBmbG93 IHJ0cy9jdHMgICAgICAgICAgIDsgSWYgUlRTIGFuZCBDVFMgYXJlIGNyb3NzLWNvbm5lY3RlZAot ICBzZXQgZmxvdyB4b24veG9mZiAgICAgICAgICA7IElmIHlvdSBjYW4ndCB1c2UgUlRTL0NUUwot ICBzZXQgcGFyaXR5IGV2ZW4gICAgICAgICAgICA7IChvciAibWFyayIgb3IgInNwYWNlIiwgaWYg bmVjZXNzYXJ5KQotICBzZXQgc3RvcC1iaXRzIDIgICAgICAgICAgICA7IChyYXJlbHkgbmVjZXNz YXJ5KQotICBjb25uZWN0ICAgICAgICAgICAgICAgICAgICA7IEVudGVyIENvbm5lY3QgKHRlcm1p bmFsKSBzdGF0ZQotCi0gICAgICAgICAgVGhpcyBhc3N1bWVzIENvbXB1dGVyIEIgaXMgc2V0IHVw IHRvIGxldCB5b3UgbG9nIGluLiBJZiBpdAotICAgICAgICAgIGlzbid0LCB5b3UgY2FuIHJ1biBh IGNvcHkgb2YgS2VybWl0IG9uIENvbXB1dGVyIEIgYW5kIGZvbGxvdwotICAgICAgICAgIGFwcHJv eGltYXRlbHkgdGhlIHNhbWUgZGlyZWN0aW9ucy4gTW9yZSBpbmZvOiBBcyBhYm92ZSBwbHVzIEhF TFAKLSAgICAgICAgICBDT05ORUNULgotCi0gICBXaXRoIG1vZGVtcyBvciBkaXJlY3Qgc2VyaWFs IGNvbm5lY3Rpb25zLCB5b3UgbWlnaHQgYWxzbyBoYXZlIHRvICJzZXQKLSAgIHBhcml0eSBldmVu IiAob3IgIm1hcmsiIG9yICJzcGFjZSIpIGlmIGl0J3MgYSA3LWJpdCBjb25uZWN0aW9uLgotCi0g ICBPZiB0aGUgY29ubmVjdGlvbiB0eXBlcyBsaXN0ZWQgYWJvdmUsIG9ubHkgb25lIGNhbiBiZSBv cGVuIGF0IGEgdGltZS4KLSAgIEhvd2V2ZXIsIGFueSBvbmUgb2YgdGhlc2UgY2FuIGJlIG9wZW4g Y29uY3VycmVudGx5IHdpdGggYW4gWzEwOF1GVFAgb3IKLSAgIEhUVFAgc2Vzc2lvbi4gRWFjaCBj b25uZWN0aW9uIHR5cGUgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gYW55IGRlc2lyZWQKLSAgIGRlZ3Jl ZSwgc2NyaXB0ZWQsIGxvZ2dlZCwgeW91IG5hbWUgaXQuIFNlZSB0aGUgbWFudWFsLgotCi0gICBO T1RFOiBPbiBzZWxlY3RlZCBwbGF0Zm9ybXMsIEMtS2VybWl0IGFsc28gY2FuIG1ha2UgWC4yNSBj b25uZWN0aW9ucy4KLSAgIFNlZSB0aGUgbWFudWFsIGZvciBkZXRhaWxzLgotCi0gICBbMTA5XUtl cm1pdCBIb21lIFsxMTBdQy1LZXJtaXQgSG9tZSBbMTExXUMtS2VybWl0IEZBUQotCi1UUkFOU0ZF UlJJTkcgRklMRVMgV0lUSCBLRVJNSVQKLQotICAgWzExMl1Ub3AgWzExM11Db250ZW50cyBbMTE0 XU5leHQgWzExNV1QcmV2aW91cwotCi0gICAgICogWzExNl1Eb3dubG9hZGluZyBGaWxlcwotICAg ICAqIFsxMTddVXBsb2FkaW5nIEZpbGVzCi0gICAgICogWzExOF1LZXJtaXQgVHJhbnNmZXJzIHRo ZSBPbGQtRmFzaGlvbmVkIFdheQotICAgICAqIFsxMTldSWYgRmlsZSBUcmFuc2ZlciBGYWlscwot ICAgICAqIFsxMjBdQWR2YW5jZWQgS2VybWl0IEZpbGUgVHJhbnNmZXIgRmVhdHVyZXMKLSAgICAg KiBbMTIxXU5vbi1LZXJtaXQgRmlsZSBUcmFuc2ZlcgotCi0gICBUaGVyZSBpcyBhIFsxMjJdd2lk ZXNwcmVhZCBhbmQgcGVyc2lzdGVudCBiZWxpZWYgdGhhdCBLZXJtaXQgaXMgYSBzbG93Ci0gICBw cm90b2NvbC4gVGhpcyBpcyBiZWNhdXNlLCB1bnRpbCByZWNlbnRseSwgaXQgdXNlZCBjb25zZXJ2 YXRpdmUgdHVuaW5nCi0gICBieSBkZWZhdWx0IHRvIG1ha2Ugc3VyZSBmaWxlIHRyYW5zZmVycyBz dWNjZWVkZWQsIHJhdGhlciB0aGFuIGZhaWxpbmcKLSAgIGJlY2F1c2UgdGhleSBvdmVybG9hZGVk IHRoZSBjb25uZWN0aW9uLiBTb21lIGV4dHJhIGNvbW1hbmRzIChvcgotICAgY29tbWFuZC1saW5l IG9wdGlvbnMsIGxpa2UgLVEpIHdlcmUgbmVlZGVkIHRvIG1ha2UgaXQgZ28gZmFzdCwgYnV0Ci0g ICBub2JvZHkgYm90aGVyZWQgdG8gZmluZCBvdXQgYWJvdXQgdGhlbS4gQWxzbywgaXQgdGFrZXMg dHdvIHRvIHRhbmdvOgotICAgbW9zdCBub24tS2VybWl0LVByb2plY3QgS2VybWl0IHByb3RvY29s IGltcGxlbWVudGF0aW9ucyByZWFsbHkgQVJFCi0gICBzbG93LiBUaGUgYmVzdCBmaWxlLXRyYW5z ZmVyIHBhcnRuZXJzIGZvciBDLUtlcm1pdCBhcmU6IGFub3RoZXIgY29weSBvZgotICAgWzEyM11D LUtlcm1pdCAoNy4wIG9yIGxhdGVyKSBhbmQgWzEyNF1LZXJtaXQgOTUuIFRoZXNlIGNvbWJpbmF0 aW9ucwotICAgd29yayB3ZWxsIGFuZCB0aGV5IHdvcmsgZmFzdCBieSBkZWZhdWx0LiBNUy1ET1Mg S2VybWl0IGlzIGdvb2QgdG9vLCBidXQKLSAgIHlvdSBoYXZlIHRvIHRlbGwgaXQgdG8gZ28gZmFz dCAoYnkgZ2l2aW5nIGl0IHRoZSBGQVNUIGNvbW1hbmQpLgotCi0gICBGdXJ0aGVybW9yZSwgYWxs IHRocmVlIG9mIHRoZXNlIEtlcm1pdCBwcm9ncmFtcyBzdXBwb3J0ICJhdXRvZG93bmxvYWQiCi0g ICBhbmQgImF1dG91cGxvYWQiLCBtZWFuaW5nIHRoYXQgd2hlbiB0aGV5IGFyZSBpbiBDb25uZWN0 IHN0YXRlIGFuZCBhCi0gICBLZXJtaXQgcGFja2V0IGNvbWVzIGluIGZyb20gdGhlIHJlbW90ZSwg dGhleSBhdXRvbWF0aWNhbGx5IHN3aXRjaCBpbnRvCi0gICBmaWxlIHRyYW5zZmVyIG1vZGUuCi0K LSAgIEFuZCBwbHVzLCBDLUtlcm1pdCBhbmQgSzk1IGFsc28gc3dpdGNoIGF1dG9tYXRpY2FsbHkg YmV0d2VlbiB0ZXh0IGFuZAotICAgYmluYXJ5IG1vZGUgZm9yIGVhY2ggZmlsZSwgc28gdGhlcmUg aXMgbm8gbmVlZCB0byAic2V0IGZpbGUgdHlwZQotICAgYmluYXJ5IiBvciAic2V0IGZpbGUgdHlw ZSB0ZXh0Iiwgb3IgdG8gd29ycnkgYWJvdXQgZmlsZXMgYmVpbmcKLSAgIGNvcnJ1cHRlZCBiZWNh dXNlIHRoZXkgd2VyZSB0cmFuc2ZlcnJlZCBpbiB0aGUgd3JvbmcgbW9kZS4KLQotICAgV2hhdCBh bGwgb2YgdGhlc2Ugd29yZHMgYWRkIHVwIHRvIGlzIHRoYXQgbm93LCB3aGVuIHlvdSB1c2UgdXAt dG8tZGF0ZQotICAgS2VybWl0IHNvZnR3YXJlIGZyb20gdGhlIEtlcm1pdCBQcm9qZWN0LCBmaWxl IHRyYW5zZmVyIGlzIG5vdCBvbmx5Ci0gICBmYXN0LCBpdCdzIHJpZGljdWxvdXNseSBlYXN5LiBZ b3UgYmFyZWx5IGhhdmUgdG8gZ2l2ZSBhbnkgY29tbWFuZHMgYXQKLSAgIGFsbC4KLQotICAgRG93 bmxvYWRpbmcgRmlsZXMKLSAgICAgICAgICBMZXQncyBzYXkgeW91IGhhdmUgWzEyNV1LZXJtaXQg OTUsIFsxMjZdQy1LZXJtaXQsIG9yIFsxMjddTVMtRE9TCi0gICAgICAgICAgS2VybWl0IG9uIHlv dXIgZGVza3RvcCBjb21wdXRlciwgd2l0aCBhIGNvbm5lY3Rpb24gdG8gYSBVbml4Ci0gICAgICAg ICAgY29tcHV0ZXIgdGhhdCBoYXMgQy1LZXJtaXQgaW5zdGFsbGVkIGFzICJrZXJtaXQiLiBUbyBk b3dubG9hZCBhCi0gICAgICAgICAgZmlsZSAoc2VuZCBpdCBmcm9tIFVuaXggdG8geW91ciBkZXNr dG9wIGNvbXB1dGVyKSwganVzdCB0eXBlIHRoZQotICAgICAgICAgIGZvbGxvd2luZyBjb21tYW5k IGF0IHlvdXIgVW5peCBzaGVsbCBwcm9tcHQ6Ci0KLSAga2VybWl0IC1zIG9vZmEudHh0Ci0KLSAg ICAgICAgICAod2hlcmUgb29mYS50eHQgaXMgdGhlIGZpbGVuYW1lKS4gSWYgeW91IHdhbnQgdG8g c2VuZCBtb3JlIHRoYW4KLSAgICAgICAgICBvbmUgZmlsZSwgeW91IGNhbiBwdXQgYXMgbWFueSBm aWxlbmFtZXMgYXMgeW91IHdhbnQgb24gdGhlCi0gICAgICAgICAgY29tbWFuZCBsaW5lLCBhbmQg dGhleSBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRleHQgYW5kCi0gICAgICAgICAgYmluYXJ5 OgotCi0gIGtlcm1pdCAtcyBvb2ZhLnR4dCBvb2ZhLnppcCBvb2ZhLmh0bWwgb29mYS50YXIuZ3oK LQotICAgICAgICAgIGFuZC9vciB5b3UgY2FuIHVzZSB3aWxkY2FyZHMgdG8gc2VuZCBncm91cHMg b2YgZmlsZXM6Ci0KLSAga2VybWl0IC1zIG9vZmEuKgotCi0gICAgICAgICAgSWYgeW91IHdhbnQg dG8gc2VuZCBhIGZpbGUgdW5kZXIgYW4gYXNzdW1lZCBuYW1lLCB1c2U6Ci0KLSAga2VybWl0IC1z IGZyaWRheS50eHQgLWEgdG9kYXkudHh0Ci0KLSAgICAgICAgICBUaGlzIHNlbmRzIHRoZSBmaWxl IGZyaWRheS50eHQgYnV0IHRlbGxzIHRoZSByZWNlaXZpbmcgS2VybWl0Ci0gICAgICAgICAgdGhh dCBpdHMgbmFtZSBpcyB0b2RheS50eHQuIEluIGFsbCBjYXNlcywgYXMgbm90ZWQsIHdoZW4gdGhl Ci0gICAgICAgICAgZmlsZSB0cmFuc2ZlciBpcyBmaW5pc2hlZCwgeW91ciBkZXNrdG9wIEtlcm1p dCByZXR1cm5zCi0gICAgICAgICAgYXV0b21hdGljYWxseSB0byBDb25uZWN0IHN0YXRlLiBObyB3 b3JyaWVzIGFib3V0IGVzY2FwaW5nIGJhY2ssCi0gICAgICAgICAgcmUtY29ubmVjdGluZywgdGV4 dC9iaW5hcnkgbW9kZSBzd2l0Y2hpbmcuIEFsbW9zdCB0b28gZWFzeSwKLSAgICAgICAgICByaWdo dD8KLQotICAgVXBsb2FkaW5nIEZpbGVzCi0gICAgICAgICAgVG8gdXBsb2FkIGZpbGVzIChzZW5k IHRoZW0gZnJvbSB5b3VyIGRlc2t0b3AgY29tcHV0ZXIgdG8gdGhlCi0gICAgICAgICAgcmVtb3Rl IFVuaXggY29tcHV0ZXIpIGRvIHRoZSBzYW1lIHRoaW5nLCBidXQgdXNlIHRoZSAtZyAoR0VUKQot ICAgICAgICAgIG9wdGlvbiBpbnN0ZWFkIG9mIC1zOgotCi0gIGtlcm1pdCAtZyBvb2ZhLnR4dAot Ci0gICAgICAgICAgVGhpcyBjYXVzZXMgeW91ciBsb2NhbCBLZXJtaXQgdG8gZW50ZXIgc2VydmVy IG1vZGU7IHRoZW4gdGhlCi0gICAgICAgICAgcmVtb3RlIEtlcm1pdCBwcm9ncmFtIHJlcXVlc3Rz IHRoZSBuYW1lZCBmaWxlIGFuZCB0aGUgbG9jYWwKLSAgICAgICAgICBLZXJtaXQgc2VuZHMgaXQg YW5kIHJldHVybnMgYXV0b21hdGljYWxseSB0byBDb25uZWN0IHN0YXRlIHdoZW4KLSAgICAgICAg ICBkb25lLgotCi0gICAgICAgICAgSWYgeW91IHdhbnQgdG8gdXBsb2FkIG11bHRpcGxlIGZpbGVz LCB5b3UgaGF2ZSBoYXZlIHVzZSBzaGVsbAotICAgICAgICAgIHF1b3RpbmcgcnVsZXMsIHNpbmNl IHRoZXNlIGFyZW4ndCBsb2NhbCBmaWxlczoKLQotICBrZXJtaXQgLWcgIm9vZmEudHh0IG9vZmEu emlwIG9vZmEuaHRtbCBvb2ZhLnRhci5neiIKLSAga2VybWl0IC1nICJvb2ZhLioiCi0KLSAgICAg ICAgICBJZiB5b3Ugd2FudCB0byB1cGxvYWQgYSBmaWxlIGJ1dCBzdG9yZSBpdCB1bmRlciBhIGRp ZmZlcmVudAotICAgICAgICAgIG5hbWUsIHVzZToKLQotICBrZXJtaXQgLWcgZnJpZGF5LnR4dCAt YSB0b2RheS50eHQKLQotICAgS2VybWl0IFRyYW5zZmVycyB0aGUgT2xkLUZhc2hpb25lZCBXYXkK LSAgICAgICAgICBJZiB5b3VyIGRlc2t0b3AgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUgZG9lcyBu b3Qgc3VwcG9ydAotICAgICAgICAgIGF1dG91cGxvYWQgb3IgYXV0b2Rvd25sb2FkLCBvciBpdCBk b2VzIG5vdCBpbmNsdWRlIEtlcm1pdCBzZXJ2ZXIKLSAgICAgICAgICBtb2RlLCB0aGUgcHJvY2Vk dXJlIHJlcXVpcmVzIG1vcmUgc3RlcHMuCi0KLSAgICAgICAgICBUbyBkb3dubG9hZCBhIGZpbGUs IHR5cGU6Ci0KLSAga2VybWl0IC1zIGZpbGVuYW1lCi0KLSAgICAgICAgICBvbiB0aGUgaG9zdCBh cyBiZWZvcmUsIGJ1dCBpZiBub3RoaW5nIGhhcHBlbnMgYXV0b21hdGljYWxseSBpbgotICAgICAg ICAgIHJlc3BvbnNlIHRvIHRoaXMgY29tbWFuZCwgeW91IGhhdmUgdG8gc3dpdGNoIHlvdXIgZGVz a3RvcAotICAgICAgICAgIGNvbW11bmljYXRpb25zIHNvZnR3YXJlIGludG8gS2VybWl0IFJlY2Vp dmUgc3RhdGUuIFRoaXMgbWlnaHQgYmUKLSAgICAgICAgICBkb25lIGJ5IGVzY2FwaW5nIGJhY2sg dXNpbmcga2V5Ym9hcmQgY2hhcmFjdGVycyBvciBob3Qga2V5cwotICAgICAgICAgIChBbHQteCBp cyB0eXBpY2FsKSBhbmQvb3Igd2l0aCBhIGNvbW1hbmQgKGxpa2UgUkVDRUlWRSkgb3IgYQotICAg ICAgICAgIG1lbnUuIFdoZW4gdGhlIGZpbGUgdHJhbnNmZXIgaXMgY29tcGxldGUsIHlvdSBoYXZl IHRvIGdvIGJhY2sgdG8KLSAgICAgICAgICBDb25uZWN0IHN0YXRlLCBUZXJtaW5hbCBlbXVsYXRp b24sIG9yIHdoYXRldmVyIHRlcm1pbm9sb2d5Ci0gICAgICAgICAgYXBwbGllcyB0byB5b3VyIGRl c2t0b3AgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUuCi0KLSAgICAgICAgICBUbyB1cGxvYWQgYSBm aWxlLCB0eXBlOgotCi0gIGtlcm1pdCAtcgotCi0gICAgICAgICAgb24gdGhlIGhvc3QgKHJhdGhl ciB0aGFuICJrZXJtaXQgLWciKS4gVGhpcyB0ZWxscyBDLUtlcm1pdCB0bwotICAgICAgICAgIHdh aXQgcGFzc2l2ZWx5IGZvciBhIGZpbGUgdG8gc3RhcnQgYXJyaXZpbmcuIFRoZW4gcmVnYWluIHRo ZQotICAgICAgICAgIGF0dGVudGlvbiBvZiB5b3VyIGRlc2t0b3Agc29mdHdhcmUgKEFsdC14IG9y IHdoYXRldmVyKSBhbmQKLSAgICAgICAgICBpbnN0cnVjdCBpdCB0byBzZW5kIHRoZSBkZXNpcmVk IGZpbGUocykgd2l0aCBLZXJtaXQgcHJvdG9jb2wuCi0gICAgICAgICAgV2hlbiB0aGUgdHJhbnNm ZXIgaXMgZmluaXNoZWQsIHJldHVybiB0byB0aGUgQ29ubmVjdCBvciBUZXJtaW5hbAotICAgICAg ICAgIHNjcmVlbi4KLQotICAgSWYgRmlsZSBUcmFuc2ZlciBGYWlscwotICAgICAgICAgIEFsdGhv dWdoIGV2ZXJ5IGFzcGVjdCBvZiBLZXJtaXQncyBvcGVyYXRpb24gY2FuIGJlIGZpbmVseSB0dW5l ZCwKLSAgICAgICAgICB0aGVyZSBhcmUgYWxzbyB0aHJlZSBzaG9ydCBhbmQgc2ltcGxlICJvbW5p YnVzIHR1bmluZyIgY29tbWFuZHMKLSAgICAgICAgICB5b3UgY2FuIHVzZSBmb3IgdHJvdWJsZXNo b290aW5nOgotCi0gICAgICAgIEZBU1QKLSAgICAgICAgICAgICAgICBVc2UgZmFzdCBmaWxlLXRy YW5zZmVyIHNldHRpbmdzLiBUaGlzIGhhcyBiZWVuIHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAg ICAgc2luY2UgQy1LZXJtaXQgNy4wIG5vdyB0aGF0IG1vc3QgbW9kZXJuIGNvbXB1dGVycyBhbmQK LSAgICAgICAgICAgICAgICBjb25uZWN0aW9ucyBzdXBwb3J0IGl0LiBJZiB0cmFuc2ZlcnMgZmFp bCB3aXRoIGZhc3QKLSAgICAgICAgICAgICAgICBzZXR0aW5ncywgdHJ5IC4gLiAuCi0KLSAgICAg ICAgQ0FVVElPVVMKLSAgICAgICAgICAgICAgICBVc2UgY2F1dGlvdXMgYnV0IG5vdCBwYXJhbm9p ZCBzZXR0aW5ncy4gRmlsZSB0cmFuc2ZlcnMsIGlmCi0gICAgICAgICAgICAgICAgdGhleSB3b3Jr LCB3aWxsIGdvIGF0IG1lZGl1bSBzcGVlZC4gSWYgbm90LCB0cnkgLiAuIC4KLQotICAgICAgICBS T0JVU1QKLSAgICAgICAgICAgICAgICBVc2UgdGhlIG1vc3Qgcm9idXN0LCByZXNpbGllbnQsIGNv bnNlcnZhdGl2ZSwgc2FmZSwgYW5kCi0gICAgICAgICAgICAgICAgcmVsaWFibGUgc2V0dGluZ3Mu IEZpbGUgdHJhbnNmZXJzIHdpbGwgYWxtb3N0IGNlcnRhaW5seQotICAgICAgICAgICAgICAgIHdv cmssIGJ1dCB0aGV5IHdpbGwgYmUgcXVpdGUgc2xvdyAob2YgY291cnNlIHRoaXMgaXMgYQotICAg ICAgICAgICAgICAgIGNsYXNzaWMgdHJhZGVvZmY7IFJPQlVTVCB3YXMgQy1LZXJtaXQncyBkZWZh dWx0IHR1bmluZyBpbgotICAgICAgICAgICAgICAgIHZlcnNpb25zIDYuMCBhbmQgZWFybGllciwg d2hpY2ggbWFkZSBldmVyeWJvZHkgdGhpbmsKLSAgICAgICAgICAgICAgICBLZXJtaXQgcHJvdG9j b2wgd2FzIHNsb3cpLiBJZiBST0JVU1QgZG9lc24ndCBkbyB0aGUgdHJpY2ssCi0gICAgICAgICAg ICAgICAgdHJ5IGFnYWluIHdpdGggU0VUIFBBUklUWSBTUEFDRSBmaXJzdCBpbiBjYXNlIGl0J3Mg bm90IGFuCi0gICAgICAgICAgICAgICAgOC1iaXQgY29ubmVjdGlvbi4KLQotICAgICAgICAgIE9i dmlvdXNseSB0aGUgc3VjY2VzcyBhbmQgcGVyZm9ybWFuY2Ugb2YgYSBmaWxlIHRyYW5zZmVyIGFs c28KLSAgICAgICAgICBkZXBlbmRzIG9uIEMtS2VybWl0J3MgZmlsZSB0cmFuc2ZlciBwYXJ0bmVy LiBVcC10by1kYXRlLCByZWFsCi0gICAgICAgICAgWzEyOF1LZXJtaXQgUHJvamVjdCBwYXJ0bmVy cyBhcmUgcmVjb21tZW5kZWQgYmVjYXVzZSB0aGV5Ci0gICAgICAgICAgY29udGFpbiB0aGUgYmVz dCBLZXJtaXQgcHJvdG9jb2wgaW1wbGVtZW50YXRpb25zIGFuZCBiZWNhdXNlCi0gICAgICAgICAg WzEyOV13ZSBjYW4gc3VwcG9ydCB0aGVtIGluIGNhc2Ugb2YgdHJvdWJsZS4KLQotICAgICAgICAg IElmIHlvdSBzdGlsbCBoYXZlIHRyb3VibGUsIGNvbnN1bHQgQ2hhcHRlciAxMCBvZiBbMTMwXVVz aW5nCi0gICAgICAgICAgQy1LZXJtaXQsIG9yIHNlbmQgZW1haWwgdG8gWzEzMV1rZXJtaXQtc3Vw cG9ydEBjb2x1bWJpYS5lZHUuCi0KLSAgIEFkdmFuY2VkIEtlcm1pdCBGaWxlLVRyYW5zZmVyIEZl YXR1cmVzCi0gICAgICAgICAgT2J2aW91c2x5IHRoZXJlIGlzIGEgbG90IG1vcmUgdG8gS2VybWl0 IGZpbGUgdHJhbnNmZXIsIGluY2x1ZGluZwotICAgICAgICAgIGFsbCBzb3J0cyBvZiBpbnRlcmFj dGl2ZSBjb21tYW5kcywgcHJlZmVyZW5jZXMsIG9wdGlvbnMsCi0gICAgICAgICAgbG9nZ2luZywg ZGVidWdnaW5nLCB0cm91Ymxlc2hvb3RpbmcsIGFuZCBhbnl0aGluZyBlbHNlIHlvdSBjYW4KLSAg ICAgICAgICBpbWFnaW5lIGJ1dCB0aGF0J3Mgd2hhdCB0aGUgWzEzMl1tYW51YWwgYW5kIHVwZGF0 ZXMgYXJlIGZvci4KLSAgICAgICAgICBIZXJlIGFyZSBhIGZldyB0b3BpY3MgeW91IGNhbiBleHBs b3JlIGlmIHlvdSdyZSBpbnRlcmVzdGVkIGJ5Ci0gICAgICAgICAgVHlwaW5nIEhFTFAgZm9yIHRo ZSBsaXN0ZWQgY29tbWFuZHM6Ci0KLSAgICAgICAgTG9nZ2luZyB0cmFuc2ZlcnM6Ci0gICAgICAg ICAgICAgICAgTE9HIFRSQU5TQUNUSU9OUyAoSEVMUCBMT0cpCi0KLSAgICAgICAgQXV0b21hdGlj IHBlci1maWxlIHRleHQvYmluYXJ5IG1vZGUgc3dpdGNoaW5nOgotICAgICAgICAgICAgICAgIFNF VCBUUkFOU0ZFUiBNT0RFIHsgQVVUT01BVElDLCBNQU5VQUwgfSAoSEVMUCBTRVQKLSAgICAgICAg ICAgICAgICBUUkFOU0ZFUikuCi0KLSAgICAgICAgQ3Jvc3MtcGxhdGZvcm0gcmVjdXJzaXZlIGRp cmVjdG9yeSB0cmVlIHRyYW5zZmVyOgotICAgICAgICAgICAgICAgIFNFTkQgL1JFQ1VSU0lWRSwg R0VUIC9SRUNVUlNJVkUgKEhFTFAgU0VORCwgSEVMUCBHRVQpLgotCi0gICAgICAgIEZpbGUgY29s bGlzaW9uIG9wdGlvbnM6Ci0gICAgICAgICAgICAgICAgU0VUIEZJTEUgQ09MTElTSU9OIHsgT1ZF UldSSVRFLCBCQUNLVVAsIERJU0NBUkQsIC4uLiB9Ci0gICAgICAgICAgICAgICAgKEhFTFAgU0VU IEZJTEUpLgotCi0gICAgICAgIFVwZGF0ZSBtb2RlIChvbmx5IHRyYW5zZmVyIGZpbGVzIHRoYXQg Y2hhbmdlZCBzaW5jZSBsYXN0IHRpbWUpOgotICAgICAgICAgICAgICAgIFNFVCBGSUxFIENPTExJ U0lPTiBVUERBVEUgKEhFTFAgU0VUIEZJTEUpLgotCi0gICAgICAgIEZpbGVuYW1lIHNlbGVjdGlv biBwYXR0ZXJuczoKLSAgICAgICAgICAgICAgICAoSEVMUCBXSUxEQ0FSRCkuCi0KLSAgICAgICAg RmxleGlibGUgZmlsZSBzZWxlY3Rpb246Ci0gICAgICAgICAgICAgICAgU0VORCAob3IgR0VUKSAv QkVGT1JFIC9BRlRFUiAvTEFSR0VSIC9TTUFMTEVSIC9UWVBFCi0gICAgICAgICAgICAgICAgL0VY Q0VQVCwgLi4uCi0KLSAgICAgICAgQ2hhcmFjdGVyLXNldCBjb252ZXJzaW9uOgotICAgICAgICAg ICAgICAgIFNFVCB7IEZJTEUsIFRSQU5TRkVSIH0gQ0hBUkFDVEVSLVNFVCwgQVNTT0NJQVRFLCAu Li4KLQotICAgICAgICBGaWxlL1BhdGhuYW1lIGNvbnRyb2w6Ci0gICAgICAgICAgICAgICAgU0VU IHsgU0VORCwgUkVDRUlWRSB9IFBBVEhOQU1FUywgU0VUIEZJTEUgTkFNRVMuCi0KLSAgICAgICAg QXRvbWljIGZpbGUgbW92ZW1lbnQ6Ci0gICAgICAgICAgICAgICAgU0VORCAob3IgR0VUKSAvREVM RVRFIC9SRU5BTUUgL01PVkUtVE8KLQotICAgICAgICBUcmFuc2ZlcnJpbmcgdG8vZnJvbSBzdGFu ZGFyZCBpL28gb2Ygb3RoZXIgY29tbWFuZHM6Ci0gICAgICAgICAgICAgICAgU0VORCAob3IgR0VU KSAvQ09NTUFORAotCi0gICAgICAgIFJlY292ZXJ5IG9mIGludGVycnVwdGVkIHRyYW5zZmVyIGZy b20gcG9pbnQgb2YgZmFpbHVyZToKLSAgICAgICAgICAgICAgICBSRVNFTkQsIFJFR0VUIChIRUxQ IFJFU0VORCwgSEVMUCBSRUdFVCkuCi0KLSAgIE5vbi1LZXJtaXQgRmlsZSBUcmFuc2ZlcgotICAg ICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgQy1LZXJtaXQgdG8gdHJhbnNmZXIgZmlsZXMgd2l0aCBG VFAgb3IgSFRUUAotICAgICAgICAgIEludGVybmV0IHByb3RvY29sczsgWzEzM11zZWUgYmVsb3cu Ci0KLSAgICAgICAgICBPbiBhIHJlZ3VsYXIgc2VyaWFsIG9yIFRlbG5ldCBjb25uZWN0aW9uIHdo ZXJlIHRoZSBvdGhlcgotICAgICAgICAgIGNvbXB1dGVyIGRvZXNuJ3Qgc3VwcG9ydCBLZXJtaXQg cHJvdG9jb2wgYXQgYWxsLCB5b3UgaGF2ZQotICAgICAgICAgIHNldmVyYWwgb3B0aW9ucy4gRm9y IGV4YW1wbGUsIGlmIHlvdXIgZGVza3RvcCBjb21tdW5pY2F0aW9ucwotICAgICAgICAgIHNvZnR3 YXJlIHN1cHBvcnRzIFptb2RlbSwgdXNlICJyeiIgYW5kICJzeiIgb24gdGhlIGhvc3QgcmF0aGVy Ci0gICAgICAgICAgdGhhbiBLZXJtaXQuIEJ1dCBpZiBLZXJtaXQgaXMgeW91ciBkZXNrdG9wIHNv ZnR3YXJlLCBhbmQgeW91IGFyZQotICAgICAgICAgIHVzaW5nIGl0IHRvIG1ha2UgY2FsbHMgb3Ig bmV0d29yayBjb25uZWN0aW9ucyB0byBvdGhlciBjb21wdXRlcnMKLSAgICAgICAgICB0aGF0IGRv bid0IHN1cHBvcnQgS2VybWl0IHByb3RvY29sIChvciB0aGF0IGRvbid0IGhhdmUgYSBnb29kCi0g ICAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgaXQpLCB0aGVuIGlmIHlvdXIgY29tcHV0ZXIgYWxz byBoYXMgZXh0ZXJuYWwKLSAgICAgICAgICBYLCBZLCBvciBabW9kZW0gcHJvZ3JhbXMgdGhhdCBh cmUgcmVkaXJlY3RhYmxlLCBLZXJtaXQgY2FuIHVzZQotICAgICAgICAgIHRoZW0gYXMgZXh0ZXJu YWwgcHJvdG9jb2xzLiBIRUxQIFNFVCBQUk9UT0NPTCBmb3IgZGV0YWlscy4KLQotICAgICAgICAg IFlvdSBjYW4gYWxzbyBjYXB0dXJlICJyYXciIGRhdGEgc3RyZWFtcyBmcm9tIHRoZSBvdGhlciBj b21wdXRlcgotICAgICAgICAgIHdpdGggTE9HIFNFU1NJT04gKEhFTFAgTE9HIGFuZCBIRUxQIFNF VCBTRVNTSU9OLUxPRyBmb3IKLSAgICAgICAgICBkZXRhaWxzKSwgYW5kIHlvdSBjYW4gdXBsb2Fk IGZpbGVzIHdpdGhvdXQgYW55IHByb3RvY29sIGF0IGFsbAotICAgICAgICAgIHdpdGggVFJBTlNN SVQgKEhFTFAgVFJBTlNNSVQsIEhFTFAgU0VUIFRSQU5TTUlUKS4KLQotICAgWzEzNF1LZXJtaXQg SG9tZSBbMTM1XUMtS2VybWl0IEhvbWUgWzEzNl1DLUtlcm1pdCBGQVEKLQotS0VSTUlUIENMSUVO VC9TRVJWRVIgQ09OTkVDVElPTlMKLQotICAgWzEzN11Ub3AgWzEzOF1Db250ZW50cyBbMTM5XU5l eHQgWzE0MF1QcmV2aW91cwotCi0gICBPbiBhbnkga2luZCBvZiBjb25uZWN0aW9uIHlvdSBjYW4g bWFrZSB3aXRoIEtlcm1pdCAtLSBzZXJpYWwsIFRDUC9JUCwKLSAgIFguMjUsIGV0YyAtLSB5b3Ug Y2FuIHNldCB1cCBhIGNvbnZlbmllbnQgY2xpZW50L3NlcnZlciByZWxhdGlvbnNoaXAKLSAgIGJl dHdlZW4geW91ciBLZXJtaXQgY2xpZW50ICh0aGUgb25lIHRoYXQgbWFkZSB0aGUgY29ubmVjdGlv bikgYW5kIHRoZQotICAgS2VybWl0IHByb2dyYW0gb24gdGhlIGZhciBlbmQgb2YgdGhlIGNvbm5l Y3Rpb24gKHRoZSByZW1vdGUgS2VybWl0KSBieQotICAgcHV0dGluZyB0aGUgcmVtb3RlIEtlcm1p dCBpbiBzZXJ2ZXIgbW9kZS4gVGhpcyBpcyBub3JtYWxseSBkb25lIGJ5Ci0gICBnaXZpbmcgaXQg YSBTRVJWRVIgY29tbWFuZCwgb3IgYnkgc3RhcnRpbmcgaXQgd2l0aCB0aGUgLXggY29tbWFuZC1s aW5lCi0gICBvcHRpb24uIEluIHNvbWUgY2FzZXMgKFsxNDFdSW50ZXJuZXQgS2VybWl0IFNlcnZp Y2UsIFNTSCBjb25uZWN0aW9ucyB0bwotICAgYSBLZXJtaXQgc3Vic3lzdGVtLCBvciBzcGVjaWFs bHkgY29uZmlndXJlZCBob3N0cyksIHRoZXJlIGlzIGFscmVhZHkgYQotICAgS2VybWl0IHNlcnZl ciB3YWl0aW5nIG9uIHRoZSBmYXIgZW5kLiBIZXJlIGlzIGEgcXVpY2sgc3lub3BzaXMgb2YgdGhl Ci0gICBjb21tYW5kcyB5b3UgY2FuIGdpdmUgdG8gdGhlIGNsaWVudCBmb3IgaW50ZXJhY3Rpbmcg d2l0aCB0aGUgc2VydmVyOgotCi0gICBTRU5EIFsgc3dpdGNoZXMgXSBmaWxlbmFtZQotICAgICAg ICAgIFNlbmRzIHRoZSBuYW1lZCBmaWxlIHRvIHRoZSBzZXJ2ZXIuIFRoZSBmaWxlbmFtZSBjYW4g aW5jbHVkZQotICAgICAgICAgIHdpbGRjYXJkcy4gTG90cyBvZiBzd2l0Y2hlcyBhcmUgYXZhaWxh YmxlIGZvciBmaWxlIHNlbGVjdGlvbiwKLSAgICAgICAgICBldGMuIFR5cGUgSEVMUCBTRU5EIGF0 IHRoZSBjbGllbnQgcHJvbXB0IGZvciBkZXRhaWxzLgotCi0gICBHRVQgWyBzd2l0Y2hlcyBdIGZp bGVuYW1lCi0gICAgICAgICAgQXNrcyB0aGUgc2VydmVyIHRvIHNlbmQgdGhlIG5hbWVkIGZpbGUu IFRoZSBmaWxlbmFtZSBjYW4gaW5jbHVkZQotICAgICAgICAgIHdpbGRjYXJkcy4gVHlwZSBIRUxQ IEdFVCBhdCB0aGUgY2xpZW50IHByb21wdCBmb3IgZGV0YWlscy4KLQotICAgQllFCi0gICAgICAg ICAgVGVybWluYXRlcyB0aGUgc2VydmVyIGFuZCBjbG9zZXMgeW91ciBjb25uZWN0aW9uIHRvIGl0 LgotCi0gICBGSU5JU0gKLSAgICAgICAgICBUZXJtaW5hdGVzIHRoZSBzZXJ2ZXIuIElmIHlvdSBz dGFydGVkIHRoZSBzZXJ2ZXIgeW91cnNlbGYsIHRoaXMKLSAgICAgICAgICBsZWF2ZXMgdGhlIHJl bW90ZSBob3N0IGF0IGl0cyBzaGVsbCBwcm9tcHQuIElmIGl0IHdhcyBhCi0gICAgICAgICAgZGVk aWNhdGVkIHNlcnZlciAoc3VjaCBhcyBJS1NEIG9yIGFuIFNTSCBzdWJzeXN0ZW0pLCBGSU5JU0gg aXMKLSAgICAgICAgICBlcXVpdmFsZW50IHRvIEJZRS4KLQotICAgU0VUIExPQ1VTIHsgTE9DQUws IFJFTU9URSwgQVVUTyB9Ci0gICAgICAgICAgKEMtS2VybWl0IDguMC4yMDEgYW5kIGxhdGVyLCBL OTUgMS4xLjIxIGFuZCBsYXRlcikgVGhpcyB0ZWxscwotICAgICAgICAgIHRoZSBjbGllbnQgd2hl dGhlciBmaWxlLW1hbmFnZW1lbnQgY29tbWFuZHMgbGlrZSBDRCwgUFdELAotICAgICAgICAgIERJ UkVDVE9SWSwgREVMRVRFLCBNS0RJUiwgZXRjLCBzaG91bGQgYmUgZXhlY3V0ZWQgbG9jYWxseSBv ciBieQotICAgICAgICAgIHRoZSBzZXJ2ZXIuIEluIHRoaXMgdHlwZSBvZiBjb25uZWN0aW9uLCB0 aGUgZGVmYXVsdCBpcyBMT0NBTC4KLSAgICAgICAgICBVc2UgU0VUIExPQ1VTIFJFTU9URSBpZiB5 b3Ugd2FudCBLZXJtaXQgdG8gYmVoYXZlIGxpa2UgYW4gRlRQCi0gICAgICAgICAgY2xpZW50LCBp biB3aGljaCBjYXNlIHRoZXNlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCByZW1vdGVseSwgYW5kCi0g ICAgICAgICAgdGhlaXIgbG9jYWwgdmVyc2lvbnMgbXVzdCBoYXZlIGFuIEwgcHJlZml4OiBMQ0Qs IExQV0QsCi0gICAgICAgICAgTERJUkVDVE9SWSwgZXRjLiBXaGVuIExPQ1VTIGlzIExPQ0FMLCB0 aGVuIHRoZSByZW1vdGUgdmVyc2lvbnMKLSAgICAgICAgICBtdXN0IGhhdmUgYW4gUiBwcmVmaXg6 IFJDRCwgUlBXRCwgUkRJUkVDVE9SWSwgZXRjLiBIRUxQIFNFVAotICAgICAgICAgIExPQ1VTIGZv ciBkZXRhaWxzLiBTSE9XIENPTU1BTkQgdG8gc2VlIGN1cnJlbnQgbG9jdXMuCi0KLSAgIFRoZSBm b2xsb3dpbmcgY29tbWFuZHMgYXJlIGFmZmVjdGVkIGJ5IFNFVCBMT0NVUzoKLQotICAgQ0QsIExD RCwgUkNECi0gICAgICAgICAgQ2hhbmdlICh3b3JraW5nLCBjdXJyZW50KSBkaXJlY3RvcnkuIEhF TFAgQ0QgZm9yIGRldGFpbHMuCi0KLSAgIENEVVAsIExDRFVQLCBSQ0RVUAotICAgICAgICAgIENE IG9uZSBsZXZlbCB1cC4KLQotICAgRElSRUNUT1JZLCBMRElSRUNUT1JZLCBSRElSRUNUT1JZCi0g ICAgICAgICAgUHJvZHVjZSBhIGRpcmVjdG9yeSBsaXN0aW5nLiBNYW55IG9wdGlvbnMgYXJlIGF2 YWlsYWJsZSBmb3IKLSAgICAgICAgICBsb2NhbCBsaXN0aW5ncy4gSEVMUCBESVJFQ1RPUlkgZm9y IGRldGFpbHMuCi0KLSAgIERFTEVURSwgTERFTEVURSwgUkRFTEVURQotICAgICAgICAgIERlbGV0 ZXMgZmlsZXMgb3IgZGlyZWN0b3JpZXMuIE1hbnkgb3B0aW9ucyBhdmFpbGFibGUsIEhFTFAKLSAg ICAgICAgICBERUxFVEUuCi0KLSAgIFJFTkFNRSwgTFJFTkFNRSwgUlJFTkFNRQotICAgICAgICAg IFJlbmFtZXMgZmlsZXMgb3IgZGlyZWN0b3JpZXMuIE1hbnkgb3B0aW9ucyBhdmFpbGFibGUsIEhF TFAKLSAgICAgICAgICBSRU5BTUUuCi0KLSAgIE1LRElSLCBMTUtESVIsIFJNS0RJUgotICAgICAg ICAgIENyZWF0ZXMgYSBkaXJlY3RvcnkuIEhFTFAgTUtESVIuCi0KLSAgIFJNRElSLCBMUk1ESVIs IFJSTURJUgotICAgICAgICAgIFJlbW92ZXMgYSBkaXJlY3RvcnkuIEhFTFAgUk1ESVIuCi0KLSAg IFRoZXJlIGFyZSBkb3plbnMgLS0gbWF5YmUgaHVuZHJlZHMgLS0gb2Ygb3RoZXIgY29tbWFuZHMs IGRlc2NyaWJlZCBpbgotICAgdGhlIGJ1aWx0LWluIGhlbHAsIG9uIHRoZSB3ZWJzaXRlLCBhbmQv b3IgaW4gdGhlIHB1Ymxpc2hlZCBvciBvbmxpbmUKLSAgIG1hbnVhbHMuIEJ1dCBldmVuIGlmIHlv dSBkb24ndCBoYXZlIGFjY2VzcyB0byBkb2N1bWVudGF0aW9uLCB5b3UgY2FuCi0gICAic2V0IGxv Y3VzIHJlbW90ZSIgYW5kIHRoZW4gdXNlIHByZXR0eSBtdWNoIHRoZSBzYW1lIGNvbW1hbmRzIHlv dSB3b3VsZAotICAgdXNlIHdpdGggYW55IEZUUCBjbGllbnQuCi0KLSAgIFsxNDJdS2VybWl0IEhv bWUgWzE0M11DLUtlcm1pdCBIb21lIFsxNDRdQy1LZXJtaXQgRkFRCi0KLUtFUk1JVCdTIEJVSUxU LUlOIEZUUCBBTkQgSFRUUCBDTElFTlRTCi0KLSAgIFsxNDVdVG9wIFsxNDZdQ29udGVudHMgWzE0 N11OZXh0IFsxNDhdUHJldmlvdXMKLQotICAgS2VybWl0J3MgRlRQIGNsaWVudCBpcyBsaWtlIHRo ZSByZWd1bGFyIFVuaXggRlRQIGNsaWVudCB0aGF0IHlvdSdyZQotICAgdXNlZCB0bywgYnV0IHdp dGggc29tZSBkaWZmZXJlbmNlczoKLQotICAgICAqIEl0IGhhcyBsb3RzIG1vcmUgY29tbWFuZHMg YW5kIGZlYXR1cmVzLgotICAgICAqIFlvdSBjYW4gaGF2ZSBhbiBGVFAgc2Vzc2lvbiBhbmQgYSBy ZWd1bGFyIEtlcm1pdCBzZXJpYWwgb3IgVGVsbmV0Ci0gICAgICAgc2Vzc2lvbiBvcGVuIGF0IHRo ZSBzYW1lIHRpbWUuCi0gICAgICogRlRQIHNlc3Npb25zIGNhbiBiZSBmdWxseSBhdXRvbWF0ZWQu Ci0KLSAgIEJ5IGRlZmF1bHQgS2VybWl0J3MgRlRQIGNsaWVudCB0cmllcyBpdHMgYmVzdCB0byBw cmVzZW50IHRoZSBzYW1lIHVzZXIKLSAgIGludGVyZmFjZSBhcyBhIHJlZ3VsYXIgRlRQIGNsaWVu dDogUFVULCBHRVQsIERJUiwgQ0QsIEJZRSwgZXRjLCBzaG91bGQKLSAgIHdvcmsgdGhlIHNhbWUs IGV2ZW4gdGhvdWdoIHNvbWUgb2YgdGhlc2UgY29tbWFuZHMgaGF2ZSBkaWZmZXJlbnQKLSAgIG1l YW5pbmcgaW4gS2VybWl0LXRvLUtlcm1pdCBjb25uZWN0aW9uczsgZm9yIGV4YW1wbGUsIENELCBE SVIsIFJFTkFNRSwKLSAgIGV0YywgaW4gS2VybWl0IGFjdCBsb2NhbGx5LCB3aGVyZWFzIGluIEZU UCB0aGV5IGFyZSBjb21tYW5kcyBmb3IgdGhlCi0gICBzZXJ2ZXIuIFRoaXMgbWlnaHQgY2F1c2Ug c29tZSBjb25mdXNpb24sIGJ1dCBhcyBpbiBhbGwgdGhpbmdzIEtlcm1pdCwKLSAgIHlvdSBoYXZl IHRvdGFsIGNvbnRyb2w6Ci0KLSAgICAgKiBUaGUgWzE0OV1TRVQgTE9DVVMgY29tbWFuZCBsZXRz IHlvdSBzcGVjaWZ5IHdoZXJlIGZpbGUgbWFuYWdlbWVudAotICAgICAgIGNvbW1hbmRzIHNob3Vs ZCBiZSBleGVjdXRlZCAtLSBsb2NhbGx5IG9yIHJlbW90ZWx5IC0tIGZvciBhbnkga2luZAotICAg ICAgIG9mIGNvbm5lY3Rpb24uCi0gICAgICogQW55IEZUUCBjb21tYW5kIGNhbiBiZSBwcmVmaXhl ZCB3aXRoIHRoZSB3b3JkICJGVFAiIHRvIHJlbW92ZSBhbnkKLSAgICAgICBhbWJpZ3VpdHkuCi0K LSAgIFBlbmRpbmcgcHVibGljYXRpb24gb2YgdGhlIG5leHQgZWRpdGlvbiBvZiB0aGUgbWFudWFs LCB0aGUgS2VybWl0IEZUUAotICAgY2xpZW50IGlzIHRob3JvdWdobHkgZG9jdW1lbnRlZCBhdCB0 aGUgS2VybWl0IFByb2plY3Qgd2Vic2l0ZToKLQotICBbMTUwXWh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9mdHBjbGllbnQuaHRtbAotCi0gICBZb3UgYWxzbyBjYW4gdXNlIEhFTFAgRlRQ IGFuZCBIRUxQIFNFVCBGVFAgdG8gZ2V0IGRlc2NyaXB0aW9ucyBvZgotICAgS2VybWl0J3MgRlRQ LXJlbGF0ZWQgY29tbWFuZHMuCi0KLSAgIFRoZSBIVFRQIGNsaWVudCBpcyBzaW1pbGFyIHRvIHRo ZSBGVFAgb25lLCBleGNlcHQgeW91IHByZWZpeCBlYWNoCi0gICBjb21tYW5kIHdpdGggSFRUUCBp bnN0ZWFkIG9mIEZUUDogSFRUUCBPUEVOLCBIVFRQIEdFVCwgSFRUUCBQVVQsIEhUVFAKLSAgIENM T1NFLCBldGMuIFR5cGUgSEVMUCBIVFRQIGZvciBkZXRhaWxzLCBvciB2aXNpdCB0aGUgdG8gdmll dyB0aGUKLSAgIFsxNTFdbWFudWFsIHN1cHBsZW1lbnRzLiBIVFRQIGNvbm5lY3Rpb25zIGNhbiBi ZSBvcGVuIGF0IHRoZSBzYW1lIHRpbWUKLSAgIGFzIHJlZ3VsYXIgc2VyaWFsIG9yIFRlbG5ldCBj b25uZWN0aW9ucyBhbmQgRlRQIGNvbm5lY3Rpb25zLiBTbyBLZXJtaXQKLSAgIGNhbiBtYW5hZ2Ug dXAgdG8gdGhyZWUgdHlwZXMgY29ubmVjdGlvbnMgc2ltdWx0YW5lb3VzbHkuCi0KLSAgIFsxNTJd S2VybWl0IEhvbWUgWzE1M11DLUtlcm1pdCBIb21lIFsxNTRdQy1LZXJtaXQgRkFRIFsxNTVdRlRQ IENsaWVudAotICAgWzE1Nl1IVFRQIENsaWVudAotCi1JTlRFUk5FVCBLRVJNSVQgU0VSVklDRQot Ci0gICBbMTU3XVRvcCBbMTU4XUNvbnRlbnRzIFsxNTldTmV4dCBbMTYwXVByZXZpb3VzCi0KLSAg IEMtS2VybWl0IGNhbiBiZSBjb25maWd1cmVkIGFuZCBydW4gYXMgYW4gSW50ZXJuZXQgc2Vydmlj ZSAoY2FsbGVkCi0gICBJS1NEKSwgc2ltaWxhciB0byBhbiBGVFAgc2VydmVyIChGVFBEKSBleGNl cHQgeW91IGNhbiAoYnV0IG5lZWQgbm90KQotICAgaW50ZXJhY3Qgd2l0aCBpdCBkaXJlY3RseSwg cGx1cyBpdCBkb2VzIGEgbG90IG1vcmUgdGhhbiBhbiBGVFAgc2VydmVyCi0gICBjYW4gZG8uIFRo ZSBUQ1AgcG9ydCBmb3IgSUtTRCBpcyAxNjQ5LiBJdCB1c2VzIFRlbG5ldCBwcm90b2NvbC4KLSAg IEMtS2VybWl0IGNhbiBiZSBhbiBJbnRlcm5ldCBLZXJtaXQgU2VydmVyLCBvciBpdCBjYW4gYmUg YSBjbGllbnQgb2YgYW4KLSAgIElLU0QuIFlvdSBjYW4gbWFrZSBjb25uZWN0aW9ucyBmcm9tIEMt S2VybWl0IHRvIGFuIElLU0Qgd2l0aCBhbnkgb2YgdGhlCi0gICBmb2xsb3dpbmcgY29tbWFuZHM6 Ci0KLSAgdGVsbmV0IGZvby5iYXIuZWR1IDE2NDkKLSAgdGVsbmV0IGZvby5iYXIuZWR1IGtlcm1p dCAgIDsgaWYgImtlcm1pdCIgaXMgbGlzdGVkIGluIC9ldGMvc2VydmljZXMKLSAgaWtzZCBmb28u YmFyLmVkdQotCi0gICBUaGUgSUtTRCBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8gYSBURUxORVQg Y29tbWFuZCBzcGVjaWZ5aW5nIHBvcnQKLSAgIDE2NDkuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFi b3V0IG1ha2luZyBhbmQgdXNpbmcgY29ubmVjdGlvbnMgdG8gYW4KLSAgIElLU0QsIHNlZToKLQot ICBbMTYxXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdWlrc2QuaHRtbAotCi0gICBZ b3UgY2FuIHJ1biBhbiBJbnRlcm5ldCBLZXJtaXQgU2VydmljZSBvbiB5b3VyIG93biBjb21wdXRl ciB0b28gKGlmIHlvdQotICAgYXJlIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvcikuIEZvciBpbnN0 cnVjdGlvbnMsIHNlZToKLQotICBbMTYyXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9p a3NkLmh0bWwKLQotICAgWzE2M11LZXJtaXQgSG9tZSBbMTY0XUMtS2VybWl0IEhvbWUgWzE2NV1D LUtlcm1pdCBGQVEKLQotU0VDVVJJVFkKLQotICAgWzE2Nl1Ub3AgWzE2N11Db250ZW50cyBbMTY4 XU5leHQgWzE2OV1QcmV2aW91cwotCi0gICBBbGwgb2YgQy1LZXJtaXQncyBidWlsdC1pbiBUQ1Av SVAgbmV0d29ya2luZyBtZXRob2RzIChUZWxuZXQsIFJsb2dpbiwKLSAgIElLU0QsIEZUUCwgYW5k IEhUVFApIGNhbiBiZSBzZWN1cmVkIGJ5IG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcKLSAg IElFVEYtYXBwcm92ZWQgbWV0aG9kczoKLQotICAgICAqIE1JVCBLZXJiZXJvcyBJVgotICAgICAq IE1JVCBLZXJiZXJvcyBWCi0gICAgICogU1NML1RMUwotICAgICAqIFN0YW5mb3JkIFNSUAotCi0g ICBGb3IgY29tcGxldGUgaW5zdHJ1Y3Rpb25zIHNlZToKLQotICBbMTcwXWh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5odG1sCi0KLSAgIEFuZCBhcyBub3RlZCBwcmV2aW91 c2x5LCB5b3UgY2FuIGFsc28gbWFrZSBTU0ggY29ubmVjdGlvbnMgd2l0aAotICAgQy1LZXJtaXQg aWYgeW91IGFscmVhZHkgaGF2ZSBhbiBTU0ggY2xpZW50IGluc3RhbGxlZC4KLQotICAgWzE3MV1L ZXJtaXQgSG9tZSBbMTcyXUMtS2VybWl0IEhvbWUgWzE3M11DLUtlcm1pdCBGQVEKLQotQUxURVJO QVRJVkUgQ09NTUFORC1MSU5FIFBFUlNPTkFMSVRJRVMKLQotICAgWzE3NF1Ub3AgWzE3NV1Db250 ZW50cyBbMTc2XU5leHQgWzE3N11QcmV2aW91cwotCi0gICBXaGVuIGludm9rZWQgYXMgImtlcm1p dCIgb3IgYW55IG90aGVyIG5hbWUgYmVzaWRlcyBhbnkgb2YgdGhlIHNwZWNpYWwKLSAgIG9uZXMs IEMtS2VybWl0IGhhcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgZGVzY3JpYmVkIGFib3ZlIGlu IHRoZQotICAgWzE3OF1PUFRJT05TIHNlY3Rpb24uIEhvd2V2ZXIsIGlmIHlvdSBpbnZva2UgQy1L ZXJtaXQgdXNpbmcgYW55IG9mIHRoZQotICAgZm9sbG93aW5nIG5hbWVzOgotCi0gICAgIHRlbG5l dCAgVGVsbmV0IGNsaWVudAotICAgICBmdHAgICAgIEZUUCBjbGllbnQKLSAgICAgaHR0cCAgICBI VFRQIGNsaWVudAotICAgICBodHRwcyAgIFNlY3VyZSBIVFRQIGNsaWVudAotCi0gICBLZXJtaXQn cyBjb21tYW5kLWxpbmUgcGVyc29uYWxpdHkgY2hhbmdlcyB0byBtYXRjaC4gVGhpcyBjYW4gYmUg ZG9uZQotICAgKGFtb25nIG90aGVyIHdheXMpIHdpdGggc3ltYm9saWMgbGlua3MgKHN5bWxpbmtz KS4gRm9yIGV4YW1wbGUsIGlmIHlvdQotICAgd2FudCBDLUtlcm1pdCB0byBiZSB5b3VyIHJlZ3Vs YXIgVGVsbmV0IGNsaWVudCwgb3IgdGhlIFRlbG5ldCBoZWxwZXIgb2YKLSAgIHlvdXIgV2ViIGJy b3dzZXIsIHlvdSBjYW4gY3JlYXRlIGEgbGluayBsaWtlIHRoZSBmb2xsb3dpbmcgaW4gYQotICAg ZGlyZWN0b3J5IHRoYXQgbGllcyBpbiB5b3VyIFBBVEggYWhlYWQgb2YgdGhlIHJlZ3VsYXIgdGVs bmV0IHByb2dyYW06Ci0KLSAgbG4gLXMgL3Vzci9sb2NhbC9iaW4va2VybWl0IHRlbG5ldAotCi0g ICBOb3cgd2hlbiB5b3UgZ2l2ZSBhICJ0ZWxuZXQiIGNvbW1hbmQsIHlvdSBhcmUgaW52b2tpbmcg S2VybWl0IGluc3RlYWQsCi0gICBidXQgd2l0aCBpdHMgVGVsbmV0IGNvbW1hbmQtbGluZSBwZXJz b25hbGl0eSBzbywgZm9yIGV4YW1wbGU6Ci0KLSAgdGVsbmV0IHh5emNvcnAuY29tCi0KLSAgIE1h a2VzIGEgVGVsbmV0IGNvbm5lY3Rpb24gdG8geHl6Y29ycC5jb20sIGFuZCBLZXJtaXQgZXhpdHMK LSAgIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgKGp1c3QgbGlr ZSB0aGUgcmVndWxhcgotICAgVGVsbmV0IGNsaWVudCkuIFR5cGUgInRlbG5ldCAtaCIgdG8gZ2V0 IGEgbGlzdCBvZiBLZXJtaXQncwotICAgVGVsbmV0LXBlcnNvbmFsaXR5IGNvbW1hbmQtbGluZSBv cHRpb25zLCB3aGljaCBhcmUgaW50ZW5kZWQgdG8gYmUgYXMKLSAgIGNvbXBhdGlibGUgYXMgcG9z c2libGUgd2l0aCB0aGUgcmVndWxhciBUZWxuZXQgY2xpZW50LgotCi0gICBTaW1pbGFybHkgZm9y IEZUUDoKLQotICBsbiAtcyAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgZnRwCi0KLSAgIEFuZCBub3cg dHlwZSAiZnRwIC1oIiB0byBzZWUgaXRzIGNvbW1hbmQtbGluZSBvcHRpb25zLCBhbmQgdXNlIGNv bW1hbmQKLSAgIGxpbmVzIGp1c3QgbGlrZSB5b3Ugd291bGQgZ2l2ZSB5b3VyIHJlZ3VsYXIgRlRQ IGNsaWVudDoKLQotICBmdHAgLW4geHl6Y29ycC5jb20KLQotICAgYnV0IHdpdGggYWRkaXRpb25h bCBvcHRpb25zIGFsbG93aW5nIGFuIGVudGlyZSBzZXNzaW9uIHRvIGJlIHNwZWNpZmllZAotICAg b24gdGhlIGNvbW1hbmQgbGluZSwgYXMgZXhwbGFpbmVkIGluIHRoZSBDLUtlcm1pdCBbMTc5XUZU UCBjbGllbnQKLSAgIGRvY3VtZW50YXRpb24uCi0KLSAgIEFuZCBzaW1pbGFybHkgZm9yIEhUVFA6 Ci0KLSAgbG4gLXMgL3Vzci9sb2NhbC9iaW4va2VybWl0IGh0dHAKLSAgLi9odHRwIC1oCi0gIC4v aHR0cCB3d3cuY29sdW1iaWEuZWR1IC1nIGtlcm1pdC9pbmRleC5odG1sCi0KLSAgIEZpbmFsbHks IGlmIEtlcm1pdCdzIGZpcnN0IGNvbW1hbmQtbGluZSBvcHRpb24gaXMgYSBUZWxuZXQsIEZUUCwg SUtTRCwKLSAgIG9yIEhUVFAgVVJMLCBLZXJtaXQgYXV0b21hdGljYWxseSBtYWtlcyB0aGUgYXBw cm9wcmlhdGUga2luZCBvZgotICAgY29ubmVjdGlvbiBhbmQsIGlmIGluZGljYXRlZCBieSB0aGUg VVJMLCB0YWtlcyB0aGUgZGVzaXJlZCBhY3Rpb246Ci0KLSAga2VybWl0IHRlbG5ldDp4eXpjb3Jw LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE9wZW5zIGEgVGVsbmV0IHNlc3Npb24K LSAga2VybWl0IHRlbG5ldDovL29sZ2FAeHl6Y29ycC5jb20gICAgICAgICAgICAgICAgICAgICA7 IERpdHRvIGZvciB1c2VyIG9sZ2EKLSAga2VybWl0IGZ0cDovL29sZ2FAeHl6Y29ycC5jb20vcHVi bGljL29vZmEuemlwICAgICAgICA7IERvd25sb2FkcyBhIGZpbGUKLSAga2VybWl0IGtlcm1pdDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvUkVBRC5NRSA7IERpdHRvIGZvciBJS1NECi0g IGtlcm1pdCBpa3NkOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9SRUFELk1FICAgOyAo VGhpcyB3b3JrcyB0b28pCi0gIGtlcm1pdCBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv aW5kZXguaHRtbCAgICAgOyBHcmFicyBhIHdlYiBwYWdlCi0gIGtlcm1pdCBodHRwczovL3d3d3Mu eHl6Y29ycC5jb20vc2VjcmV0L3BsYW4uaHRtbCAgICAgOyBHcmFicyBhIHNlY3VyZSB3ZWIgcGFn ZQotCi0gICBbMTgwXUtlcm1pdCBIb21lIFsxODFdQy1LZXJtaXQgSG9tZSBbMTgyXUMtS2VybWl0 IEZBUQotCi1MSUNFTlNFCi0KLSAgIFsxODNdVG9wIFsxODRdQ29udGVudHMgWzE4NV1OZXh0IFsx ODZdUHJldmlvdXMKLQotICAgT24gb3IgYmVmb3JlIDMwIEp1bmUgMjAxMSwgYmFycmluZyB1bmZv cmVzZWVuIGNpcmN1bXN0YW5jZXMsCi0gICBbMTg3XUMtS2VybWl0IDkuMCB3aWxsIGJlIHJlbGVh c2VkIHdpdGggdGhlIFsxODhdUmV2aXNlZCAzLUNsYXVzZSBCU0QKLSAgIExpY2Vuc2UuIFRoaXMg aXMgYSBjZXJ0aWZpZWQgWzE4OV1PcGVuIFNvdXJjZSBsaWNlbnNlLCBhbmQgaXQgbWVhbnMKLSAg IHRoYXQgQy1LZXJtaXQgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIGxpY2Vuc2VkIGZvciBjb21tZXJj aWFsCi0gICByZWRpc3RyaWJ1dGlvbi4gVGVjaG5pY2FsIHN1cHBvcnQgZm9yIEtlcm1pdCBzb2Z0 d2FyZSB3aWxsIG5vdCBiZQotICAgYXZhaWxhYmxlIGZyb20gQ29sdW1iaWEgVW5pdmVyc2l0eSBh ZnRlciBKdW5lIDMwdGguCi0KLSAgIFsxOTBdS2VybWl0IEhvbWUgWzE5MV1DLUtlcm1pdCBIb21l IFsxOTJdQy1LZXJtaXQgRkFRCi0KLU9USEVSIFRPUElDUwotCi0gICBbMTkzXVRvcCBbMTk0XUNv bnRlbnRzIFsxOTVdTmV4dCBbMTk2XVByZXZpb3VzCi0KLSAgIFRoZXJlJ3Mgd2F5IG1vcmUgdG8g Qy1LZXJtaXQgdGhhbiB3ZSd2ZSB0b3VjaGVkIG9uIGhlcmUgLS0KLSAgIHRyb3VibGVzaG9vdGlu ZywgY3VzdG9taXphdGlvbiwgY2hhcmFjdGVyIHNldHMsIGRpYWxpbmcgZGlyZWN0b3JpZXMsCi0g ICBzZW5kaW5nIHBhZ2VzLCBzY3JpcHQgd3JpdGluZywgYW5kIG9uIGFuZCBvbiwgYWxsIG9mIHdo aWNoIGFyZSBjb3ZlcmVkCi0gICBpbiB0aGUgbWFudWFsIGFuZCB1cGRhdGVzIGFuZCBzdXBwbGVt ZW50cy4gRm9yIHRoZSBtb3N0IHVwLXRvLWRhdGUKLSAgIGluZm9ybWF0aW9uIG9uIGRvY3VtZW50 YXRpb24gKG9yIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbiBpdHNlbGYpIHZpc2l0Ci0gICB0aGUgS2Vy bWl0IFByb2plY3Qgd2Vic2l0ZToKLQotICBbMTk3XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC8KLQotICAgVGhlcmUgeW91IHdpbGwgYWxzbyBmaW5kIFsxOThdS2VybWl0IHNvZnR3YXJl IHBhY2thZ2VzIGZvciBvdGhlcgotICAgcGxhdGZvcm1zOiBkaWZmZXJlbnQgVW5peCB2YXJpZXRp ZXMsIFdpbmRvd3MsIERPUywgVk1TLCBJQk0gbWFpbmZyYW1lcywKLSAgIGFuZCBtYW55IG90aGVy czogMjArIHllYXJzJyB3b3J0aC4KLQotICAgWzE5OV1LZXJtaXQgSG9tZSBbMjAwXUMtS2VybWl0 IEhvbWUgWzIwMV1DLUtlcm1pdCBGQVEKLQotRE9DVU1FTlRBVElPTiBBTkQgVVBEQVRFUwotCi0g ICBbMjAyXVRvcCBbMjAzXUNvbnRlbnRzIFsyMDRdTmV4dCBbMjA1XVByZXZpb3VzCi0KLSAgIFRo ZSBtYW51YWwgZm9yIEMtS2VybWl0IGlzOgotCi0gICAgMS4gRnJhbmsgZGEgQ3J1eiBhbmQgQ2hy aXN0aW5lIE0uIEdpYW5vbmUsIFsyMDZdVXNpbmcgQy1LZXJtaXQsIFNlY29uZAotICAgICAgIEVk aXRpb24sIERpZ2l0YWwgUHJlc3MgLyBCdXR0ZXJ3b3J0aC1IZWluZW1hbm4sIFdvYnVybiwgTUEs IDE5OTcsCi0gICAgICAgNjIyIHBhZ2VzLCBJU0JOIDEtNTU1NTgtMTY0LTEuIFRoaXMgaXMgYSBw cmludGVkIGJvb2ssIG5vdyBhbHNvCi0gICAgICAgYXZhaWxhYmxlIGFzIGEgWzIwN11LaW5kbGUg RS1Cb29rLiBJdCBjb3ZlcnMgQy1LZXJtaXQgNi4wLgotICAgIDIuIFRoZSBDLUtlcm1pdCA3LjAg U3VwcGxlbWVudDoKLSAgICAgICBbMjA4XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbAotICAgIDMuIFRoZSBDLUtlcm1pdCA4LjAgU3VwcGxlbWVudDoKLSAgICAg ICBbMjA5XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbAotICAg IDQuIFRoZSBDLUtlcm1pdCA5LjAgU3VwcGxlbWVudDoKLSAgICAgICBbMjEwXWh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbAotCi0gICBUaGUgQy1LZXJtaXQgaG9t ZSBwYWdlIGlzIGhlcmU6Ci0KLSAgWzIxMV1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdC5odG1sCi0KLSAgIFZpc2l0IHRoaXMgcGFnZSB0byBsZWFybiBhYm91dCBuZXcgdmVy c2lvbnMsIEJldGEgdGVzdHMsIGFuZCBvdGhlcgotICAgbmV3czsgdG8gcmVhZCBjYXNlIHN0dWRp ZXMgYW5kIHR1dG9yaWFsczsgdG8gZG93bmxvYWQgc291cmNlIGNvZGUsCi0gICBpbnN0YWxsIHBh Y2thZ2VzLCBhbmQgWzIxMl1wcmVidWlsdCBiaW5hcmllcyBmb3IgbWFueSBwbGF0Zm9ybXMuIEFs c28KLSAgIHZpc2l0OgotCi0gICBbMjEzXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9z Y3JpcHRsaWIuaHRtbAotICAgICAgICAgIFRoZSBLZXJtaXQgc2NyaXB0IGxpYnJhcnkgYW5kIHR1 dG9yaWFsCi0KLSAgIFsyMTRdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L25ld2ZhcS5o dG1sCi0gICAgICAgICAgVGhlIEtlcm1pdCBGQVEgKEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25z IGFib3V0IEtlcm1pdCkKLQotICAgWzIxNV1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tmYXEuaHRtbAotICAgICAgICAgIFRoZSBDLUtlcm1pdCBGQVEgKEZyZXF1ZW50bHkgQXNrZWQg UXVlc3Rpb25zIGFib3V0IEMtS2VybWl0KQotCi0gICBbMjE2XWh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9zZWN1cml0eS5odG1sCi0gICAgICAgICAgVGhlIEtlcm1pdCBzZWN1cml0eSBy ZWZlcmVuY2UuCi0KLSAgIFsyMTddaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3RlbG5l dC5odG1sCi0gICAgICAgICAgQy1LZXJtaXQgVGVsbmV0IGNsaWVudCBkb2N1bWVudGF0aW9uLgot Ci0gICBbMjE4XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zdHVkaWVzLmh0bWwKLSAg ICAgICAgICBDYXNlIHN0dWRpZXMuCi0KLSAgIFsyMTldaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY2J3ci5odG1sCi0gICAgICAgICAgR2VuZXJhbCBDLUtlcm1pdCBIaW50cyBhbmQg VGlwcy4KLQotICAgWzIyMF1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwKLSAgICAgICAgICBVbml4IEMtS2VybWl0IEhpbnRzIGFuZCBUaXBzLgotCi0gICBbMjIxXWh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Zid3IuaHRtbAotICAgICAgICAgIFZNUyBD LUtlcm1pdCBIaW50cyBhbmQgVGlwcy4KLQotICAgWzIyMl1odHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwKLSAgICAgICAgICBVbml4IEMtS2VybWl0IEluc3RhbGxhdGlv biBJbnN0cnVjdGlvbnMKLQotICAgWzIyM11odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t2aW5zLmh0bWwKLSAgICAgICAgICBWTVMgQy1LZXJtaXQgSW5zdGFsbGF0aW9uIEluc3RydWN0 aW9ucwotCi0gICBbMjI0XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0 bWwKLSAgICAgICAgICBUZWNobmljYWwgc3VwcG9ydC4KLQotICAgWzIyNV1odHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvazk1dHV0b3JpYWwuaHRtbAotICAgICAgICAgIEtlcm1pdCA5NSB0 dXRvcmlhbCAodGhpcyBkb2N1bWVudCkuCi0KLSAgIFsyMjZdY29tcC5wcm90b2NvbHMua2VybWl0 Lm1pc2MKLSAgICAgICAgICBUaGUgS2VybWl0IG5ld3Nncm91cCAodW5tb2RlcmF0ZWQpLgotCi0g ICBbMjI3XUtlcm1pdCBIb21lIFsyMjhdQy1LZXJtaXQgSG9tZSBbMjI5XUMtS2VybWl0IEZBUQot Ci1GSUxFUwotCi0gICBbMjMwXVRvcCBbMjMxXUNvbnRlbnRzIFsyMzJdTmV4dCBbMjMzXVByZXZp b3VzCi0KLSAgICAgICAgICBbMjM0XVRoZSBSZXZpc2VkIDMtQ2xhdXNlIExpY2Vuc2UKLSAgICAg ICAgICBDLUtlcm1pdCBsaWNlbnNlLgotCi0gICBbMjM1XX4vLmtlcm1yYwotICAgICAgICAgIElu aXRpYWxpemF0aW9uIGZpbGUuCi0KLSAgIFsyMzZdfi8ubXlrZXJtcmMKLSAgICAgICAgICBDdXN0 b21pemF0aW9uIGZpbGUuCi0KLSAgIH4vLmtkZAotICAgICAgICAgIEtlcm1pdCBkaWFsaW5nIGRp cmVjdG9yeSAoc2VlIG1hbnVhbCkuCi0KLSAgIH4vLmtuZAotICAgICAgICAgIEtlcm1pdCBuZXR3 b3JrIGRpcmVjdG9yeSAoc2VlIG1hbnVhbCkuCi0KLSAgIH4vLmtzZAotICAgICAgICAgIEtlcm1p dCBzZXJ2aWNlcyBkaXJlY3RvcnkgKHNlZSBtYW51YWwpLgotCi0gICBbMjM3XWNrdWlucy5odG1s Ci0gICAgICAgICAgSW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBmb3IgVW5peC4KLQotICAgWzIz OF1ja2Nid3IuaHRtbAotICAgICAgICAgIEdlbmVyYWwgQy1LZXJtaXQgYnVncywgaGludHMsIHRp cHMuCi0KLSAgIFsyMzldY2t1YndyLmh0bWwKLSAgICAgICAgICBVbml4LXNwZWNpZmljIEMtS2Vy bWl0IGJ1Z3MsIGhpbnRzLCB0aXBzLgotCi0gICBbMjQwXWNrY3BsbS5odG1sCi0gICAgICAgICAg Qy1LZXJtaXQgcHJvZ3JhbSBsb2dpYyBtYW51YWwuCi0KLSAgIFsyNDFdY2tjY2ZnLmh0bWwKLSAg ICAgICAgICBDLUtlcm1pdCBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLgotCi0g ICBzc2gKLSAgICAgICAgICAoaW4geW91ciBQQVRIKSBTU0ggY29ubmVjdGlvbiBoZWxwZXIuCi0K LSAgIHJ6LCBzeiwgZXRjLgotICAgICAgICAgIChpbiB5b3VyIFBBVEgpIGV4dGVybmFsIHByb3Rv Y29scyBmb3IgWFlabW9kZW0uCi0KLSAgIC92YXIvc3Bvb2wvbG9ja3MgKG9yIHdoYXRldmVyKQot ICAgICAgICAgIFVVQ1AgbG9ja2ZpbGUgZm9yIGRpYWxpbmcgb3V0IChzZWUgWzI0Ml1pbnN0YWxs YXRpb24KLSAgICAgICAgICBpbnN0cnVjdGlvbnMpLgotCi0gICBbMjQzXUtlcm1pdCBIb21lIFsy NDRdQy1LZXJtaXQgSG9tZSBbMjQ1XUMtS2VybWl0IEZBUQotCi1BVVRIT1JTCi0KLSAgIFsyNDZd VG9wIFsyNDddQ29udGVudHMgWzI0OF1QcmV2aW91cwotCi0gICAgIEZyYW5rIGRhIENydXogYW5k IEplZmZyZXkgRSBBbHRtYW4KLSAgICAgVGhlIEtlcm1pdCBQcm9qZWN0IC0gQ29sdW1iaWEgVW5p dmVyaXR5Ci0gICAgIDYxMiBXZXN0IDExNXRoIFN0cmVldAotICAgICBOZXcgWW9yayBOWSAxMDAy NS03Nzk5Ci0gICAgIFVTQQotCi0gICAxOTg1LXByZXNlbnQsIHdpdGggY29udHJpYnV0aW9ucyBm cm9tIGh1bmRyZWRzIG9mIG90aGVycyBhbGwgb3ZlciB0aGUKLSAgIHdvcmxkLgotICAgICBfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KLQotCi0gICAgQy1LZXJtaXQgOS4wIFVuaXggTWFudWFsIFBhZ2UgYW5kIFR1dG9yaWFs IC8gWzI0OV1rZXJtaXRAY29sdW1iaWEuZWR1Ci0gICAgLyAxIEp1bHkgMjAxMQotCi1SZWZlcmVu Y2VzCi0KLSAgIDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1LwotICAgMi4gbWFpbHRvOmtlcm1p dEBjb2x1bWJpYS5lZHUKLSAgIDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRl eC5odG1sCi0gICA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1Lmh0bWwKLSAg IDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgIDYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3NjcmlwdHMuaHRtbAotICAgNy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1cnJlbnQuaHRtbAotICAgOC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L3doYXRzbmV3Lmh0bWwKLSAgIDkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sCi0gIDEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvc3VwcG9ydC5odG1sCi0gIDExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Ci0gIDEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS8KLSAgMTMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3V0dXRvci5wZGYKLSAgMTQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5l ZHUva2VybWl0L3Rlc3QvdGV4dC9ja3VrZXIubnIKLSAgMTUuIGh0dHA6Ly93d3cuYW1hem9uLmNv bS9ncC9wcm9kdWN0LzE1NTU1ODE2NDE/aWU9VVRGOCZ0YWc9YWxlaWRtb3JlbGRvbS0yMCZsaW5r Q29kZT1hczImY2FtcD0xNzg5JmNyZWF0aXZlPTkzMjUmY3JlYXRpdmVBU0lOPTE1NTU1ODE2NDEK LSAgMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2Rlc2Ny aXB0aW9uCi0gIDE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRt bCNzeW5vcHNpcwotICAxOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9y Lmh0bWwjb3B0aW9ucwotICAxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1 dG9yLmh0bWwjY29tbWFuZHMKLSAgMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3V0dXRvci5odG1sI2luaXRmaWxlCi0gIDIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1dHV0b3IuaHRtbCNtb2RlcwotICAyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdXR1dG9yLmh0bWwjY29ubmVjdGlvbnMKLSAgMjMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3RyYW5zZmVyCi0gIDI0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNzZXJ2ZXIKLSAgMjUuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2Z0cAotICAyNi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjaWtzZAotICAyNy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjc2VjdXJpdHkKLSAgMjguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3BlcnNvbmFlCi0gIDI5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNsaWNlbnNlCi0gIDMwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNvdGhlcgotICAzMS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZG9jdW1lbnRhdGlvbgot ICAzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZmlsZXMK LSAgMzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2F1dGhv cnMKLSAgMzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3Rv cAotICAzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29u dGVudHMKLSAgMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1s I3N5bm9wc2lzCi0gIDM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5o dG1sCi0gIDM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0gIDM5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS8KLSAgNDAuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzI4 MzkudHh0Ci0gIDQxLiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMyODQwLnR4dAotICA0 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZG9jdW1lbnRh dGlvbgotICA0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LwotICA0NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LwotICA0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQuaHRtbAotICA0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZmFxLmh0bWwKLSAgNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRv ci5odG1sI3RvcAotICA0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9y Lmh0bWwjY29udGVudHMKLSAgNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0 dXRvci5odG1sI29wdGlvbnMKLSAgNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3V0dXRvci5odG1sI3N5bm9wc2lzCi0gIDUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1dHV0b3IuaHRtbCNrZXJiYW5nCi0gIDUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1dHV0b3IuaHRtbCNwZXJzb25hZQotICA1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdXR1dG9yLmh0bWwja2VyYmFuZwotICA1NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjaW5pdGZpbGUKLSAgNTUuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2luaXRmaWxlCi0gIDU2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNwZXJzb25hZQotICA1Ny4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjb3B0aW9ucwotICA1OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29tbWFuZHMKLSAgNTku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KLSAgNjAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2ZhcS5odG1sCi0gIDYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1dHV0b3IuaHRtbCN0b3AKLSAgNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3V0dXRvci5odG1sI2NvbnRlbnRzCi0gIDY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1dHV0b3IuaHRtbCNjb21tYW5kcwotICA2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdXR1dG9yLmh0bWwjZGVzY3JpcHRpb24KLSAgNjYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2NvbW1hbmRzCi0gIDY3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNwZXJzb25hZQotICA2OC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjcGVyc29uYWUKLSAgNjkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2lrc2QKLSAgNzAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3RyYW5zZmVyCi0gIDcxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCN0b3AKLSAgNzIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2NvbnRlbnRzCi0gIDcz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNpbml0ZmlsZQot ICA3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjb3B0aW9u cwotICA3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwja2Vy YmFuZwotICA3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwj Y21kbGlzdAotICA3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0 bWwjZG9jdW1lbnRhdGlvbgotICA3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dXR1dG9yLmh0bWwjaW5pdGZpbGUKLSAgNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3V0dXRvci5odG1sI2RvY3VtZW50YXRpb24KLSAgODAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3NjcmlwdHMuaHRtbAotICA4MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdXR1dG9yLmh0bWwjZG9jdW1lbnRhdGlvbgotICA4Mi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0LwotICA4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQuaHRtbAotICA4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0 bWwKLSAgODUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3Rv cAotICA4Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29u dGVudHMKLSAgODcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1s I21vZGVzCi0gIDg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRt bCNjb21tYW5kcwotICA4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LwotICA5MC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICA5MS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0bWwKLSAgOTIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3RvcAotICA5My4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29udGVudHMKLSAgOTQuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2Nvbm5lY3Rpb25zCi0gIDk1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNpbml0ZmlsZQotICA5Ni4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0bWwjdGVybQotICA5Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LwotICA5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICA5OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZmFxLmh0bWwKLSAxMDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0 dXRvci5odG1sI3RvcAotIDEwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1 dG9yLmh0bWwjY29udGVudHMKLSAxMDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3V0dXRvci5odG1sI3RyYW5zZmVyCi0gMTAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1dHV0b3IuaHRtbCNtb2RlcwotIDEwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdXR1dG9yLmh0bWwjaWtzZAotIDEwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NhYmxlLmh0bWwKLSAxMDYuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzIyMTcu dHh0Ci0gMTA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2FibGUuaHRtbAotIDEw OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZnRwCi0gMTA5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0gMTEwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMTExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tmYXEuaHRtbAotIDExMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdXR1dG9yLmh0bWwjdG9wCi0gMTEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1dHV0b3IuaHRtbCNjb250ZW50cwotIDExNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdXR1dG9yLmh0bWwjc2VydmVyCi0gMTE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1dHV0b3IuaHRtbCNjb25uZWN0aW9ucwotIDExNi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZG93bmxvYWQKLSAxMTcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3VwbG9hZAotIDExOC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjb2xkZmFzaGlvbmVkCi0gMTE5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCN0cm91YmxlCi0gMTIwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNhZHZhbmNlZAotIDEy MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjbm9ua2VybWl0 Ci0gMTIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQva2VybWl0Lmh0bWwjbm90c2xv dwotIDEyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDEy NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2s5NS5odG1sCi0gMTI1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1Lmh0bWwKLSAxMjYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAxMjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9tc2tlcm1pdC5odG1sCi0gMTI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvCi0gMTI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCi0g MTMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2ttYW51YWwuaHRtbAotIDEzMS4g bWFpbHRvOmtlcm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdQotIDEzMi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZG9jdW1lbnRhdGlvbgotIDEzMy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZnRwCi0gMTM0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0gMTM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdC5odG1sCi0gMTM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tmYXEuaHRtbAotIDEzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9y Lmh0bWwjdG9wCi0gMTM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3Iu aHRtbCNjb250ZW50cwotIDEzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1 dG9yLmh0bWwjZnRwCi0gMTQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0 b3IuaHRtbCN0cmFuc2ZlcgotIDE0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dXR1dG9yLmh0bWwjaWtzZAotIDE0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0Lwot IDE0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDE0NC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0bWwKLSAxNDUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3RvcAotIDE0Ni4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29udGVudHMKLSAxNDcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2lrc2QKLSAxNDguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3RyYW5zZmVyCi0gMTQ5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNzZXJ2ZXIKLSAxNTAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHBjbGllbnQuaHRtbAotIDE1MS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZG9jdW1lbnRhdGlvbgot IDE1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LwotIDE1My4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDE1NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZmFxLmh0bWwKLSAxNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0My5odG1sI3gzCi0gMTU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDMuaHRtbCN4Mi4yCi0gMTU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1dHV0b3IuaHRtbCN0b3AKLSAxNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3V0dXRvci5odG1sI2NvbnRlbnRzCi0gMTU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1dHV0b3IuaHRtbCNzZWN1cml0eQotIDE2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZnRwCi0gMTYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY3Vpa3NkLmh0bWwKLSAxNjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9pa3NkLmh0bWwKLSAxNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KLSAxNjQu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAxNjUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sCi0gMTY2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCN0b3AKLSAxNjcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2NvbnRlbnRzCi0gMTY4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNwZXJzb25hZQotIDE2OS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjaWtzZAotIDE3MC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKLSAxNzEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC8KLSAxNzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0Lmh0bWwKLSAxNzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Zh cS5odG1sCi0gMTc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRt bCN0b3AKLSAxNzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1s I2NvbnRlbnRzCi0gMTc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3Iu aHRtbCNsaWNlbnNlCi0gMTc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0 b3IuaHRtbCNpa3NkCi0gMTc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0 b3IuaHRtbCNvcHRpb25zCi0gMTc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDMuaHRtbCN4My4xLjIKLSAxODAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8K LSAxODEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAxODIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sCi0gMTgzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCN0b3AKLSAxODQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2NvbnRlbnRzCi0gMTg1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNvdGhlcgotIDE4Ni4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjcGVyc29uYWUKLSAxODcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazkwLmh0bWwKLSAxODguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdS1ic2QtbGljZW5zZS5odG1sCi0gMTg5LiBodHRwOi8v d3d3Lm9wZW5zb3VyY2Uub3JnLwotIDE5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 LwotIDE5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDE5 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0bWwKLSAxOTMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3RvcAotIDE5NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29udGVudHMKLSAxOTUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2RvY3VtZW50YXRpb24K LSAxOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2xpY2Vu c2UKLSAxOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KLSAxOTguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ob3d0b2dldC5odG1sCi0gMTk5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvCi0gMjAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdC5odG1sCi0gMjAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEu aHRtbAotIDIwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwj dG9wCi0gMjAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNj b250ZW50cwotIDIwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0 bWwjZmlsZXMKLSAyMDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5o dG1sI290aGVyCi0gMjA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2ttYW51YWwu aHRtbAotIDIwNy4gaHR0cDovL3d3dy5hbWF6b24uY29tL2dwL3Byb2R1Y3QvQjAwMkFDUEY5TT9p ZT1VVEY4JnRhZz1hbGVpZG1vcmVsZG9tLTIwJmxpbmtDb2RlPWFzMiZjYW1wPTE3ODkmY3JlYXRp dmU9MzkwOTU3JmNyZWF0aXZlQVNJTj1CMDAyQUNQRjlNCi0gMjA4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwKLSAyMDkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbAotIDIxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ5MC5odG1sCi0gMjExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdC5odG1sCi0gMjEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s4 MGJpbmFyaWVzLmh0bWwKLSAyMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zY3Jp cHRsaWIuaHRtbAotIDIxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L25ld2ZhcS5o dG1sCi0gMjE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAotIDIx Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKLSAyMTcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC90ZWxuZXQuaHRtbAotIDIxOC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L3N0dWRpZXMuaHRtbAotIDIxOS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sCi0gMjIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwKLSAyMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Zid3IuaHRtbAotIDIyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sCi0gMjIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t2aW5zLmh0bWwK LSAyMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0bWwKLSAyMjUu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTV0dXRvcmlhbC5odG1sCi0gMjI2LiBu ZXdzOmNvbXAucHJvdG9jb2xzLmtlcm1pdC5taXNjCi0gMjI3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvCi0gMjI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dC5odG1sCi0gMjI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAot IDIzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdG9wCi0g MjMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNjb250ZW50 cwotIDIzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjYXV0 aG9ycwotIDIzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwj ZG9jdW1lbnRhdGlvbgotIDIzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1LWJz ZC1saWNlbnNlLmh0bWwKLSAyMzUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrZXJtaXQuaW5pCi0gMjM2LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9ja2VybW9kLmluaQotIDIzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sCi0gMjM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj YndyLmh0bWwKLSAyMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bAotIDI0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sCi0gMjQx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwKLSAyNDIuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAotIDI0My4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0LwotIDI0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQuaHRtbAotIDI0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZmFx Lmh0bWwKLSAyNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1s I3RvcAotIDI0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwj Y29udGVudHMKLSAyNDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5o dG1sI2ZpbGVzCi0gMjQ5LiBtYWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQoKZGlmZiAtLWdpdCBh L2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXMyLmMgYi9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzMi5jCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBkYjBkZmU5Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2t1dXMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQ5MSArMCww IEBACi0jaWZkZWYgU1NIVEVTVAotI2RlZmluZSBTU0hCVUlMVElOCi0jZW5kaWYgLyogU1NIVEVT VCAqLwotCi0vKiAgQyBLIFUgVSBTIDIgIC0tICBVc2VyIGludGVyZmFjZSBzdHJpbmdzICYgaGVs cCB0ZXh0IG1vZHVsZSBmb3IgQy1LZXJtaXQgICovCi0KLS8qCi0gIEF1dGhvcnM6Ci0gICAgRnJh bmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCi0gICAgICBUaGUgS2VybWl0IFByb2plY3Qs IENvbHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkKLSAgICBKZWZmcmV5IEUgQWx0bWFu IDxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgotICAgICAgU2VjdXJlIEVuZHBvaW50cyBJ bmMuLCBOZXcgWW9yayBDaXR5Ci0KLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDExLAotICAgIFRy dXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCi0g ICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmls ZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBk aXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLQotICBUaGlzIG1vZHVsZSBjb250YWlucyBIRUxQ IGNvbW1hbmQgYW5kIG90aGVyIGxvbmcgdGV4dCBzdHJpbmdzLgotCi0gIElNUE9SVEFOVDogQ2hh cmFjdGVyIHN0cmluZyBjb25zdGFudHMgbG9uZ2VyIHRoYW4gYWJvdXQgMjUwIGFyZSBub3QgcG9y dGFibGUuCi0gIExvbmdlciBzdHJpbmdzIHNob3VsZCBiZSBicm9rZW4gdXAgaW50byBhcnJheXMg b2Ygc3RyaW5ncyBhbmQgYWNjZXNzZWQgd2l0aAotICBobXNnYSgpIHJhdGhlciB0aGFuIGhtc2co KS4gIChUaGlzIHN0YXRlbWVudCB3YXMgdHJ1ZSBpbiB0aGUgMTk4MHMgYW5kCi0gIHByb2JhYmx5 IGlzIG5vdCBhIGJpZyBjb25jZXJuIGluIHRoZSAyMXN0IENlbnR1cnksIGJ1dCB5b3UgbmV2ZXIg a25vdzsKLSAgdGhlcmUgc3RpbGwgbWlnaHQgZXhpc3Qgc29tZSAxNi1iaXQgcGxhdGZvcm1zIGFu ZCBDIGNvbXBpbGVycyB0aGF0IGhhdmUKLSAgcmVzdHJpY3Rpb25zIGxpa2UgdGhpcy4KLSovCi0j aW5jbHVkZSAiY2tjc3ltLmgiCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0jaW5jbHVkZSAiY2tjbmV0 LmgiCi0jaW5jbHVkZSAiY2tjYXNjLmgiCi0jaW5jbHVkZSAiY2tja2VyLmgiCi0jaW5jbHVkZSAi Y2t1dXNyLmgiCi0jaW5jbHVkZSAiY2tjeGxhLmgiCi0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSNp bmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxzZSAvKiBub3QgTlQgKi8KLSNkZWZpbmUgSU5DTF9LQkQK LSNpZmRlZiBPUzJNT1VTRQotI2RlZmluZSBJTkNMX01PVQotI2VuZGlmIC8qIE9TMk1PVVNFICov Ci0jZGVmaW5lIElOQ0xfRE9TTUlTQwotI2RlZmluZSBJTkNMX0RPU0RFVklDRVMKLSNpbmNsdWRl IDxvczIuaD4gICAgICAgICAgICAgICAgLyogVGhpcyBwdWxscyBpbiBhIHdob2xlIGxvYWQgb2Yg c3R1ZmYgKi8KLSN1bmRlZiBDT01NRU5UCi0jZW5kaWYgLyogTlQgKi8KLSNpbmNsdWRlICJja29j b24uaCIKLSNpbmNsdWRlICJja29rdmIuaCIKLSNpbmNsdWRlICJja29rZXkuaCIKLSNlbmRpZiAv KiBPUzIgKi8KLQotZXh0ZXJuIGNoYXIgKiBja19jcnllYXI7CQkvKiBGb3IgY29weXJpZ2h0IG5v dGljZSAqLwotCi1leHRlcm4geHhfc3RycCB4eHN0cmluZzsKLWV4dGVybiBjaGFyICogY2NudGFi W107Ci0vKgotICBobHB0b2sgY29udGFpbnMgdGhlIHN0cmluZyBmb3Igd2hpY2ggdGhlIHVzZXIg cmVxdWVzdGVkIGhlbHAuICBUaGlzIGlzCi0gIHVzZWZ1bCBmb3IgZGlzdGluZ3Vpc2hpbmcgc3lu b255bXMsIGluIGNhc2UgZGlmZmVyZW50IGhlbHAgdGV4dCBpcyBuZWVkZWQKLSAgZGVwZW5kaW5n IG9uIHdoaWNoIHN5bm9ueW0gd2FzIGdpdmVuLgotKi8KLWV4dGVybiBjaGFyICogaGxwdG9rOwot Ci0jaWZuZGVmIE5PSUtTRAotICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7Ci0jZW5kaWYgLyogSUtT RCAqLwotCi0jaWZuZGVmIE5PSUNQCi1leHRlcm4gaW50IGNtZmxnczsKLQotI2lmZGVmIERDTURC VUYKLWV4dGVybiBjaGFyICpjbWRidWYsICphdG1idWY7Ci0jZWxzZQotZXh0ZXJuIGNoYXIgY21k YnVmW10sIGF0bWJ1ZltdOwotI2VuZGlmIC8qIERDTURCVUYgKi8KLSNlbmRpZiAvKiBOT0lDUCAq LwotCi1leHRlcm4gY2hhciAqeGFyZzA7Ci1leHRlcm4gaW50IG5ybXQsIG5wcm0sIGRmbG9jLCBs b2NhbCwgcGFyaXR5LCBlc2NhcGU7Ci1leHRlcm4gaW50IHR1cm4sIGZsb3c7Ci1leHRlcm4gaW50 IGJpbmFyeSwgcXVpZXQsIGtlZXA7Ci1leHRlcm4gaW50IHN1Y2Nlc3MsIHhhc2ttb3JlOwotI2lm ZGVmIE9TMgotZXh0ZXJuIGludCB0dF9yb3dzW10sIHR0X2NvbHNbXTsKLSNlbHNlIC8qIE9TMiAq LwotZXh0ZXJuIGludCB0dF9yb3dzLCB0dF9jb2xzOwotI2VuZGlmIC8qIE9TMiAqLwotZXh0ZXJu IGludCBjbWRfcm93cywgY21kX2NvbHM7Ci0KLWV4dGVybiBsb25nIHNwZWVkOwotZXh0ZXJuIGNo YXIgKmRmdHR5LCAqdmVyc2lvLCAqY2t4c3lzOwotI2lmbmRlZiBOT0hFTFAKLWV4dGVybiBjaGFy ICpoZWxwZmlsZTsKLSNlbmRpZiAvKiBOT0hFTFAgKi8KLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIHBy bXRhYltdOwotI2lmbmRlZiBOT1hGRVIKLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIHJlbWNtZFtdOwot I2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PSUNQCi0KLS8qICBJbnRlcmFjdGl2ZSBo ZWxwIHN0cmluZ3MgICovCi0KLS8qIFRvcC1sZXZlbCBIRUxQIHRleHQuICBJTVBPUlRBTlQ6IEFs c28gc2VlIHRvcGhscGlbXSBmb3IgSUtTRC4gKi8KLQotc3RhdGljIGNoYXIgKnRvcGhscFtdID0g ewotIlRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlv cmsuXG4iLAotCi0jaWZuZGVmIE5PSEVMUAotIiAgVHlwZSBFWElUICAgIHRvIGV4aXQuIiwKLSNp ZmRlZiBPUzIKLSIgIFR5cGUgSU5UUk8gICBmb3IgYSBicmllZiBpbnRyb2R1Y3Rpb24gdG8gdGhl IEtlcm1pdCBDb21tYW5kIHNjcmVlbi4iLAotIiAgVHlwZSBMSUNFTlNFIHRvIHNlZSB0aGUgS2Vy bWl0IDk1IGxpY2Vuc2UuIiwKLSNlbHNlCi0iICBUeXBlIElOVFJPICAgZm9yIGEgYnJpZWYgaW50 cm9kdWN0aW9uIHRvIEMtS2VybWl0LiIsCi0iICBUeXBlIExJQ0VOU0UgdG8gc2VlIHRoZSBDLUtl cm1pdCBsaWNlbnNlLiIsCi0jZW5kaWYgLyogT1MyICovCi0iICBUeXBlIEhFTFAgICAgZm9sbG93 ZWQgYnkgYSBjb21tYW5kIG5hbWUgZm9yIGhlbHAgYWJvdXQgYSBzcGVjaWZpYyBjb21tYW5kLiIs Ci0jaWZuZGVmIE5PUFVTSAotI2lmZGVmIFVOSVgKLSIgIFR5cGUgTUFOVUFMICB0byBhY2Nlc3Mg dGhlIEMtS2VybWl0IG1hbnVhbCBwYWdlLiIsCi0jZWxzZQotI2lmZGVmIFZNUwotIiAgVHlwZSBN QU5VQUwgIHRvIGFjY2VzcyB0aGUgQy1LZXJtaXQgaGVscCB0b3BpYy4iLAotI2Vsc2UKLSNpZmRl ZiBPUzIKLSIgIFR5cGUgTUFOVUFMICB0byBhY2Nlc3MgdGhlIEs5NSBtYW51YWwuIiwKLSNlbHNl Ci0iICBUeXBlIE1BTlVBTCAgdG8gYWNjZXNzIHRoZSBDLUtlcm1pdCBtYW51YWwuIiwKLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYg LyogTk9QVVNIICovCi0iICBUeXBlIE5FV1MgICAgZm9yIG5ld3MgYWJvdXQgbmV3IGZlYXR1cmVz LiIsCi0iICBUeXBlIFNVUFBPUlQgdG8gbGVhcm4gaG93IHRvIGdldCB0ZWNobmljYWwgc3VwcG9y dC4iLAotIiAgUHJlc3MgPyAgICAgIChxdWVzdGlvbiBtYXJrKSBhdCB0aGUgcHJvbXB0LCBvciBh bnl3aGVyZSB3aXRoaW4gYSBjb21tYW5kLCIsCi0iICAgICAgICAgICAgICAgZm9yIGEgbWVudSAo Y29udGV4dC1zZW5zaXRpdmUgaGVscCwgbWVudSBvbiBkZW1hbmQpLiIsCi0jZWxzZQotIlByZXNz ID8gZm9yIGEgbGlzdCBvZiBjb21tYW5kczsgc2VlIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbGVk IGRlc2NyaXB0aW9ucy4iLAotI2VuZGlmIC8qIE5PSEVMUCAqLwotCi0jaWZuZGVmIE5PQ01ETAot I2lmbmRlZiBOT0hFTFAKLSIgIiwKLSIgIFR5cGUgSEVMUCBPUFRJT05TIGZvciBoZWxwIHdpdGgg Y29tbWFuZC1saW5lIG9wdGlvbnMuIiwKLSNlbmRpZiAvKiBOT0hFTFAgKi8KLSNlbmRpZiAvKiBO T0NNREwgKi8KLSIgIiwKLSNpZm5kZWYgT1MyCi0jaWZkZWYgTUFDCi0iRG9jdW1lbnRhdGlvbiBm b3IgQ29tbWFuZCBXaW5kb3c6IFwiVXNpbmcgQy1LZXJtaXRcIiBieSBGcmFuayBkYSBDcnV6IGFu ZCIsCi0iQ2hyaXN0aW5lIE0uIEdpYW5vbmUsIERpZ2l0YWwgUHJlc3MsIDE5OTcsIElTQk46IDEt NTU1NTgtMTY0LTEiLAotI2Vsc2UKLSJET0NVTUVOVEFUSU9OOiBcIlVzaW5nIEMtS2VybWl0XCIg YnkgRnJhbmsgZGEgQ3J1eiBhbmQgQ2hyaXN0aW5lIE0uIEdpYW5vbmUsIiwKLSIybmQgRWRpdGlv biwgRGlnaXRhbCBQcmVzcyAvIEJ1dHRlcndvcnRoLUhlaW5lbWFubiAxOTk3LCBJU0JOIDEtNTU1 NTgtMTY0LTEsIiwKLSJwbHVzIHN1cHBsZW1lbnRzIGF0IGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2NrZXJtaXQuaHRtbCNkb2MuIiwKLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSNpZmRlZiBNQUMKLSIgIiwKLSJBbHNvIHNlZSB0aGUgTWFjIEtlcm1pdCBEb2MgYW5kIEJ3 ciBmaWxlcyBvbiB0aGUgTWFjIEtlcm1pdCBkaXNrZXR0ZS5cbiIsCi0jZWxzZQotI2lmZGVmIEhQ VVgxMAotIiAiLAotIlNlZSB0aGUgZmlsZXMgaW4gL3Vzci9zaGFyZS9saWIva2VybWl0LyBmb3Ig YWRkaXRpb25hbCBpbmZvcm1hdGlvbi4iLAotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlmIC8q IE1BQyAqLwotIiIKLX07Ci0KLSNpZm5kZWYgTk9JS1NECi1zdGF0aWMgY2hhciAqdG9waGxwaVtd ID0geyAgICAgICAgICAgICAgLyogVG9wLWxldmVsIGhlbHAgZm9yIElLU0QgKi8KLQotIlRydXN0 ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuXG4iLAot Ci0jaWZuZGVmIE5PSEVMUAotIiAgVHlwZSBJTlRSTyAgIGZvciBhIGJyaWVmIGludHJvZHVjdGlv biB0byBLZXJtaXQgY29tbWFuZHMuIiwKLSIgIFR5cGUgVkVSU0lPTiBmb3IgdmVyc2lvbiBhbmQg Y29weXJpZ2h0IGluZm9ybWF0aW9uLiIsCi0iICBUeXBlIEhFTFAgICAgZm9sbG93ZWQgYnkgYSBj b21tYW5kIG5hbWUgZm9yIGhlbHAgYWJvdXQgYSBzcGVjaWZpYyBjb21tYW5kLiIsCi0iICBUeXBl IFNVUFBPUlQgdG8gbGVhcm4gaG93IHRvIGdldCB0ZWNobmljYWwgc3VwcG9ydC4iLAotIiAgVHlw ZSBMT0dPVVQgIChvciBFWElUKSB0byBsb2cgb3V0LiIsCi0iICBQcmVzcyA/ICAgICAgKHF1ZXN0 aW9uIG1hcmspIGF0IHRoZSBwcm9tcHQsIG9yIGFueXdoZXJlIHdpdGhpbiBhIGNvbW1hbmQsIiwK LSIgICAgICAgICAgICAgICBmb3IgYSBtZW51IChjb250ZXh0LXNlbnNpdGl2ZSBoZWxwLCBtZW51 IG9uIGRlbWFuZCkuIiwKLSNlbHNlCi0iUHJlc3MgPyBmb3IgYSBsaXN0IG9mIGNvbW1hbmRzOyBz ZWUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsZWQgZGVzY3JpcHRpb25zLiIsCi0jZW5kaWYgLyog Tk9IRUxQICovCi0iICIsCi0iRE9DVU1FTlRBVElPTjogXCJVc2luZyBDLUtlcm1pdFwiIGJ5IEZy YW5rIGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lLCIsCi0iMm5kIEVkaXRpb24sIERp Z2l0YWwgUHJlc3MgKDE5OTcpLCBJU0JOIDEtNTU1NTgtMTY0LTEuICBNb3JlIGluZm8gYXQgdGhl IiwKLSJLZXJtaXQgUHJvamVjdCB3ZWJzaXRlLCBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS8u IiwKLSIiCi19OwotI2VuZGlmIC8qIE5PSUtTRCAqLwotCi0jaWZuZGVmIE5PSEVMUAotY2hhciAq bmV3c3R4dFtdID0gewotI2lmZGVmIE9TMgotIldlbGNvbWUgdG8gS2VybWl0IDk1IDMueC54LiAg TWFqb3IgbmV3IGZlYXR1cmVzIHNpbmNlIDIuMS4zIGluY2x1ZGU6IiwKLSNlbHNlCi0iV2VsY29t ZSB0byBDLUtlcm1pdCA5LjAuMzAwLiAgTmV3IGZlYXR1cmVzIHNpbmNlIDguMC4yMTEgaW5jbHVk ZToiLAotI2VuZGlmIC8qIE9TMiAqLwotIiAuIE9wZW4gU291cmNlIFNpbXBsaWZpZWQgMy1DbGF1 c2UgQlNEIExpY2Vuc2UiLAotIiAuIEZ1bGwgNjQtYml0IG1lbW9yeSBtb2RlbCBvbiBwbGF0Zm9y bXMgdGhhdCBzdXBwb3J0IGl0IiwKLSIgLiBMYXJnZSBmaWxlIHN1cHBvcnQgKDY0LWJpdCBmaWxl IHNpemUpIG9uIG1vc3QgcGxhdGZvcm1zIiwKLSIgLiBMb25nIGludGVnZXIgdmFyaWFibGVzIGFu ZCBjb25zdGFudHMgaW4gY29tbWFuZHMgYW5kIHNjcmlwdHMiLAotIiAuIEJpZ2dlciBtYXhpbXVt IGNvbW1hbmQgYW5kIG1hY3JvIGxlbmd0aHMiLAotIiAuIEJpZ2dlciBmaWxlbmFtZSBleHBhbnNp b24gc3BhY2UiLAotIiAuIE5ldyBzdXBlci1mbGV4aWJsZSBSRU5BTUUgY29tbWFuZCIsCi0iIC4g TmV3IENPUFkgYW5kIERJUkVDVE9SWSBjb21tYW5kIG9wdGlvbnMiLAotIiAuIE5ldyBUT1VDSCBj b21tYW5kIiwKLSIgLiBSYXcgU1NML1RMUyBjb25uZWN0aW9ucyBmb3IgY29ubmVjdGluZyB0byBQ T1AzIGFuZCBzaW1pbGFyIHNlcnZpY2VzIiwKLSIgLiBBdCBwcm9tcHQsIEN0cmwtSyByZWNhbGxz IG1vc3QgcmVjZW50IGZpbGVuYW1lIiwKLSIgLiBTY3JpcHRpbmcgYW5kIHBlcmZvcm1hbmNlIGlt cHJvdmVtZW50cyBhbmQgYnVnIGZpeGVzIiwKLSIgIiwKLSJEb2N1bWVudGF0aW9uOiIsCi0iIDEu IGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L3VzaW5nY2tlcm1pdC5odG1sIiwKLSIgICAgXCJV c2luZyBDLUtlcm1pdFwiLCBzZWNvbmQgZWRpdGlvbiAoMTk5NyksIGN1cnJlbnQgd2l0aCBDLUtl cm1pdCA2LjAuIiwKLSIgIiwKLSIgMi4gaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvY2tlcm1p dDcwLmh0bWwiLAotIiAgICB3aGljaCBkb2N1bWVudHMgdGhlIG5ldyBmZWF0dXJlcyBvZiBDLUtl cm1pdCA3LjAuIiwKLSIgIiwKLSIgMy4gaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvY2tlcm1p dDgwLmh0bWwiLAotIiAgICB3aGljaCBkb2N1bWVudHMgdGhlIG5ldyBmZWF0dXJlcyBvZiBDLUtl cm1pdCA4LjAuIiwKLSIgIiwKLSIgNC4gaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvY2tlcm1p dDkwLmh0bWwiLAotIiAgICB3aGljaCBkb2N1bWVudHMgdGhlIG5ldyBmZWF0dXJlcyBvZiBDLUtl cm1pdCA5LjAuIiwKLSIgIiwKLSJJZiB0aGUgcmVsZWFzZSBkYXRlIHNob3duIGJ5IHRoZSBWRVJT SU9OIGNvbW1hbmQgaXMgbG9uZyBwYXN0LCBiZSBzdXJlIHRvIiwKLSJjaGVjayB3aXRoIHRoZSBL ZXJtaXQgd2Vic2l0ZSB0byBzZWUgaWYgdGhlcmUgaGF2ZSBiZWVuIHVwZGF0ZXM6IiwKLSIgIiwK LSNpZmRlZiBPUzIKLSIgIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2s5NS5odG1sICAgICAo S2VybWl0IDk1IGhvbWUgcGFnZSkiLAotI2Vsc2UKLSIgIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2NrZXJtaXQuaHRtbCAoQy1LZXJtaXQgaG9tZSBwYWdlKSIsCi0jZW5kaWYJLyogT1MyICov Ci0iICBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS8gICAgICAgICAgICAgKEtlcm1pdCBQcm9q ZWN0IGhvbWUgcGFnZSkiLAotIiIKLX07Ci0jZW5kaWYgLyogTk9IRUxQICovCi0KLSNpZm5kZWYg Tk9IRUxQCi1jaGFyICppbnRyb3R4dFtdID0gewotI2lmZGVmIE9TMgotIldlbGNvbWUgdG8gSy05 NSwgS2VybWl0IGNvbW11bmljYXRpb25zIHNvZnR3YXJlIGZvcjoiLAotI2Vsc2UKLSNpZmRlZiBV TklYCi0jaWZkZWYgSFBVWAotIldlbGNvbWUgdG8gSFAtVVggQy1LZXJtaXQgY29tbXVuaWNhdGlv bnMgc29mdHdhcmUgZm9yOiIsCi0jZWxzZQotIldlbGNvbWUgdG8gVU5JWCBDLUtlcm1pdCBjb21t dW5pY2F0aW9ucyBzb2Z0d2FyZSBmb3I6IiwKLSNlbmRpZiAvKiBIUFVYICovCi0jZWxzZQotI2lm ZGVmIFZNUwotIldlbGNvbWUgdG8gVk1TIEMtS2VybWl0IGNvbW11bmljYXRpb25zIHNvZnR3YXJl IGZvcjoiLAotI2Vsc2UKLSNpZmRlZiBWT1MKLSJXZWxjb21lIHRvIFZPUyBDLUtlcm1pdCBjb21t dW5pY2F0aW9ucyBzb2Z0d2FyZSBmb3I6IiwKLSNlbHNlCi0jaWZkZWYgTUFDCi0iV2VsY29tZSB0 byBNYWMgS2VybWl0IGNvbW11bmljYXRpb25zIHNvZnR3YXJlIGZvcjoiLAotI2Vsc2UKLSJXZWxj b21lIHRvIEMtS2VybWl0IGNvbW11bmljYXRpb25zIHNvZnR3YXJlIGZvcjoiLAotI2VuZGlmIC8q IE1BQyAqLwotI2VuZGlmIC8qIFZPUyAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVO SVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNpZm5kZWYgTk9YRkVSCi0iIC4gRXJyb3ItZnJlZSBh bmQgZWZmaWNpZW50IGZpbGUgdHJhbnNmZXIiLAotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2lmbmRl ZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0iIC4gVlQzMjAvMjIwLzEwMi8xMDAvNTIsIEFOU0ksIFd5 c2UsIExpbnV4LCBUZWxldmlkZW8sIGFuZCBvdGhlciBlbXVsYXRpb25zIiwKLSNlbHNlCi0jaWZk ZWYgTUFDCi0iIC4gVlQyMjAgdGVybWluYWwgZW11bGF0aW9uIiwKLSNlbHNlCi0iIC4gVGVybWlu YWwgY29ubmVjdGlvbiIsCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5k aWYgLyogTk9MT0NBTCAqLwotI2lmbmRlZiBOT1NQTAotIiAuIFNjcmlwdCBwcm9ncmFtbWluZyIs Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9JQ1MKLSIgLiBJbnRlcm5hdGlvbmFsIGNo YXJhY3RlciBzZXQgY29udmVyc2lvbiIsCi0jZW5kaWYgLyogTk9JQ1MgKi8KLSNpZm5kZWYgTk9E SUFMCi0jaWZuZGVmIE5PU1BMCi0iIC4gTnVtZXJpYyBhbmQgYWxwaGFudW1lcmljIHBhZ2luZyIs Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQotI2lmbmRlZiBOT0xP Q0FMCi0iICIsCi0iU3VwcG9ydGluZzoiLAotIiAuIFNlcmlhbCBjb25uZWN0aW9ucywgZGlyZWN0 IG9yIGRpYWxlZC4iLAotI2lmbmRlZiBOT0RJQUwKLSIgLiBBdXRvbWF0aWMgbW9kZW0gZGlhbGlu ZyIsCi0jZW5kaWYgLyogTk9ESUFMICovCi0jaWZkZWYgVENQU09DS0VUCi0iIC4gVENQL0lQIG5l dHdvcmsgY29ubmVjdGlvbnM6IiwKLSNpZmRlZiBUTkNPREUKLSIgICAtIFRlbG5ldCBzZXNzaW9u cyIsCi0jZW5kaWYgLyogVE5DT0RFICovCi0jaWZkZWYgU1NIQlVJTFRJTgotIiAgIC0gU1NIIHYx IGFuZCB2MiBjb25uZWN0aW9ucyIsCi0jZWxzZQotI2lmZGVmIEFOWVNTSAotIiAgIC0gU1NIIGNv bm5lY3Rpb25zIHZpYSBleHRlcm5hbCBhZ2VudCIsCi0jZW5kaWYgLyogQU5ZU1NIICovCi0jZW5k aWYgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVmIFJMT0dDT0RFCi0iICAgLSBSbG9naW4gc2Vzc2lv bnMiLAotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgTkVXRlRQCi0iICAgLSBGVFAgc2Vz c2lvbnMiLAotI2VuZGlmIC8qIE5FV0ZUUCAqLwotI2lmZGVmIENLSFRUUAotIiAgIC0gSFRUUCAx LjEgc2Vzc2lvbnMiLAotI2VuZGlmIC8qIENLSFRUUCAqLwotI2lmZGVmIElLU0QKLSIgICAtIElu dGVybmV0IEtlcm1pdCBTZXJ2aWNlIiwKLSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogVENQ U09DS0VUICovCi0jaWZkZWYgQU5ZWDI1Ci0iIC4gWC4yNSBuZXR3b3JrIGNvbm5lY3Rpb25zIiwK LSNlbmRpZiAvKiBBTllYMjUgKi8KLSNpZmRlZiBPUzIKLSNpZmRlZiBERUNORVQKLSIgLiBERUNu ZXQvUEFUSFdPUktTIExBVCBFdGhlcm5ldCBjb25uZWN0aW9ucyIsCi0jZW5kaWYgLyogREVDTkVU ICovCi0jaWZkZWYgU1VQRVJMQVQKLSIgLiBNZXJpZGlhbiBUZWNobm9sb2dpZXMnIFN1cGVyTEFU IGNvbm5lY3Rpb25zIiwKLSNlbmRpZiAvKiBTVVBFUkxBVCAqLwotI2lmZGVmIE5QSVBFCi0iIC4g TmFtZWQtcGlwZSBjb25uZWN0aW9ucyIsCi0jZW5kaWYgLyogTlBJUEUgKi8KLSNpZmRlZiBDS19O RVRCSU9TCi0iIC4gTkVUQklPUyBjb25uZWN0aW9ucyIsCi0jZW5kaWYgLyogQ0tfTkVUQklPUyAq LwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotIiAiLAotIldoaWxl IHR5cGluZyBjb21tYW5kcywgeW91IG1heSB1c2UgdGhlIGZvbGxvd2luZyBzcGVjaWFsIGNoYXJh Y3RlcnM6IiwKLSIgLiBERUwsIFJVQk9VVCwgQkFDS1NQQUNFLCBDVFJMLUg6IERlbGV0ZSB0aGUg bW9zdCByZWNlbnQgY2hhcmFjdGVyIHR5cGVkLiIsCi0iIC4gQ1RSTC1XOiAgICAgIERlbGV0ZSB0 aGUgbW9zdCByZWNlbnQgd29yZCB0eXBlZC4iLAotIiAuIENUUkwtVTogICAgICBEZWxldGUgdGhl IGN1cnJlbnQgbGluZS4iLAotIiAuIENUUkwtUjogICAgICBSZWRpc3BsYXkgdGhlIGN1cnJlbnQg bGluZS4iLAotCi0jaWZkZWYgQ0tfUkVDQUxMCi0jaWZkZWYgT1MyCi0iIC4gVXBhcnJvdzogICAg IENvbW1hbmQgcmVjYWxsIC0gZ28gYmFja3dhcmRzIGluIGNvbW1hbmQgcmVjYWxsIGJ1ZmZlci4i LAotIiAuIERvd25hcnJvdzogICBDb21tYW5kIHJlY2FsbCAtIGdvIGZvcndhcmQgaW4gY29tbWFu ZCByZWNhbGwgYnVmZmVyLiIsCi0jaWZuZGVmIE5PSUtTRAotIiAgIChOb3RlOiBBcnJvdyBrZXlz IGNhbiBiZSB1c2VkIG9ubHkgb24gdGhlIFBDJ3MgcGh5c2ljYWwga2V5Ym9hcmQuKSIsCi0jZW5k aWYgLyogTk9JS1NEICovCi0jZW5kaWYgLyogT1MyICovCi0iIC4gQ1RSTC1QOiAgICAgIENvbW1h bmQgcmVjYWxsIC0gZ28gYmFja3dhcmRzIGluIGNvbW1hbmQgcmVjYWxsIGJ1ZmZlci4iLAotIiAu IENUUkwtQjogICAgICBDb21tYW5kIHJlY2FsbCAtIHNhbWUgYXMgQ3RybC1QLiIsCi0iIC4gQ1RS TC1OOiAgICAgIENvbW1hbmQgcmVjYWxsIC0gZ28gZm9yd2FyZCBpbiBjb21tYW5kIHJlY2FsbCBi dWZmZXIuIiwKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSNpZm5kZWYgTk9MQVNURklMRQotIiAu IENUUkwtSzogICAgICBJbnNlcnQgdGhlIG1vc3QgcmVjZW50bHkgZW50ZXJlZCBsb2NhbCBmaWxl IHNwZWNpZmljdGlvbi4iLAotI2VuZGlmCS8qIE5PTEFTVEZJTEUgKi8KLQotIiAuID8gICAgICAg ICAgICAocXVlc3Rpb24gbWFyaykgRGlzcGxheSBhIG1lbnUgZm9yIHRoZSBjdXJyZW50IGNvbW1h bmQgZmllbGQuIgotLAotIiAuIEVTQyAgICAgICAgICAob3IgVEFCIG9yIEN0cmwtSSkgQXR0ZW1w dCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCBmaWVsZC4iLAotIiAuIFxcICAgICAgICAgICAgKGJh Y2tzbGFzaCkgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBsaXRlcmFsbHkiLAotI2lm bmRlZiBOT1NQTAotIiAgICAgICAgICAgICAgICBvciBpbnRyb2R1Y2UgYSBiYWNrc2xhc2ggY29k ZSwgdmFyaWFibGUsIG9yIGZ1bmN0aW9uLiIsCi0jZWxzZQotIiAgICAgICAgICAgICAgICBvciBp bnRyb2R1Y2UgYSBudW1lcmljIGJhY2tzbGFzaCBjb2RlLiIsCi0jZW5kaWYgLyogTk9TUEwgKi8K LSIgIiwKLQotIklNUE9SVEFOVDogU2luY2UgYmFja3NsYXNoIChcXCkgaXMgS2VybWl0J3MgY29t bWFuZC1saW5lIGVzY2FwZSBjaGFyYWN0ZXIsIiwKLSJ5b3UgbXVzdCBlbnRlciBET1MsIFdpbmRv d3MsIG9yIE9TLzIgcGF0aG5hbWVzIHVzaW5nIGVpdGhlciBmb3J3YXJkIHNsYXNoICgvKSIKLSwK LSJvciBkb3VibGUgYmFja3NsYXNoIChcXFxcKSBhcyB0aGUgZGlyZWN0b3J5IHNlcGFyYXRvciBp biBtb3N0IGNvbnRleHRzLiIsCi0iRXhhbXBsZXM6IEM6L1RNUC9SRUFETUUuVFhULCBDOlxcXFxU TVBcXFxcUkVBRE1FLlRYVC4iLAotIiAiLAotCi0iQ29tbWFuZCB3b3JkcyBvdGhlciB0aGFuIGZp bGVuYW1lcyBjYW4gYmUgYWJicmV2aWF0ZWQgaW4gbW9zdCBjb250ZXh0cy4iLAotIiAiLAotCi0i QmFzaWMgY29tbWFuZHM6IiwKLSIgIEVYSVQgICAgICAgICAgRXhpdCBmcm9tIEtlcm1pdCIsCi0i ICBIRUxQICAgICAgICAgIFJlcXVlc3QgZ2VuZXJhbCBoZWxwIiwKLSIgIEhFTFAgY29tbWFuZCAg UmVxdWVzdCBoZWxwIGFib3V0IHRoZSBnaXZlbiBjb21tYW5kIiwKLSIgIFRBS0UgICAgICAgICAg RXhlY3V0ZSBjb21tYW5kcyBmcm9tIGEgZmlsZSIsCi0iICBUWVBFICAgICAgICAgIERpc3BsYXkg YSBmaWxlIG9uIHlvdXIgc2NyZWVuIiwKLSIgIE9SSUVOVEFUSU9OICAgRXhwbGFpbnMgZGlyZWN0 b3J5IHN0cnVjdHVyZSIsCi0iICIsCi0KLSNpZm5kZWYgTk9YRkVSCi0iQ29tbWFuZHMgZm9yIGZp bGUgdHJhbnNmZXI6IiwKLSIgIFNFTkQgICAgICAgICAgU2VuZCBmaWxlcyIsCi0iICBSRUNFSVZF ICAgICAgIFJlY2VpdmUgZmlsZXMiLAotIiAgR0VUICAgICAgICAgICBHZXQgZmlsZXMgZnJvbSBh IEtlcm1pdCBzZXJ2ZXIiLAotI2lmZGVmIENLX1JFU0VORAotIiAgUkVTRU5EICAgICAgICBSZWNv dmVyIGFuIGludGVycnVwdGVkIHNlbmQiLAotIiAgUkVHRVQgICAgICAgICBSZWNvdmVyIGFuIGlu dGVycnVwdGVkIGdldCBmcm9tIGEgc2VydmVyIiwKLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8KLSNp Zm5kZWYgTk9TRVJWRVIKLSIgIFNFUlZFUiAgICAgICAgQmUgYSBLZXJtaXQgc2VydmVyIiwKLSNl bmRpZiAvKiBOT1NFUlZFUiAqLwotIiAiLAotIkZpbGUtdHJhbnNmZXIgc3BlZWQgc2VsZWN0aW9u OiIsCi0iICBGQVNUICAgICAgICAgIFVzZSBmYXN0IHNldHRpbmdzIC0tIFRISVMgSVMgVEhFIERF RkFVTFQiLAotIiAgQ0FVVElPVVMgICAgICBVc2Ugc2xvd2VyLCBtb3JlIGNhdXRpb3VzIHNldHRp bmdzIiwKLSIgIFJPQlVTVCAgICAgICAgVXNlIGV4dHJlbWVseSBzbG93IGFuZCBjYXV0aW91cyBz ZXR0aW5ncyIsCi0iICIsCi0iRmlsZS10cmFuc2ZlciBwZXJmb3JtYW5jZSBmaW5lIHR1bmluZzoi LAotIiAgU0VUIFJFQ0VJVkUgUEFDS0VULUxFTkdUSCAgS2VybWl0IHBhY2tldCBzaXplIiwKLSIg IFNFVCBXSU5ET1cgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzbGlkaW5nIHdpbmRvdyBzbG90 cyIsCi0iICBTRVQgUFJFRklYSU5HICAgICAgICAgICAgICBBbW91bnQgb2YgY29udHJvbC1jaGFy YWN0ZXIgcHJlZml4aW5nIiwKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0xPQ0FM Ci0iICIsCi0iVG8gbWFrZSBhIGRpcmVjdCBzZXJpYWwgY29ubmVjdGlvbjoiLAotI2lmZGVmIE9T MgotI2lmZGVmIE5UCi0jaWZkZWYgQ0tfVEFQSQotIiAgU0VUIFBPUlQgVEFQSSBTZWxlY3QgVEFQ SSBjb21tdW5pY2F0aW9uIGRldmljZSIsCi0jZW5kaWYgLyogQ0tfVEFQSSAqLwotIiAgU0VUIFBP UlQgICAgICBTZWxlY3Qgc2VyaWFsIGNvbW11bmljYXRpb24gZGV2aWNlIiwKLSNlbHNlCi0iICBT RVQgUE9SVCAgICAgIFNlbGVjdCBzZXJpYWwgY29tbXVuaWNhdGlvbiBwb3J0IG9yIHNlcnZlciIs Ci0jZW5kaWYgLyogTlQgKi8KLSNlbHNlCi0iICBTRVQgTElORSAgICAgIFNlbGVjdCBzZXJpYWwg Y29tbXVuaWNhdGlvbiBkZXZpY2UiLAotI2VuZGlmIC8qIE9TMiAqLwotIiAgU0VUIFNQRUVEICAg ICBTZWxlY3QgY29tbXVuaWNhdGlvbiBzcGVlZCIsCi0iICBTRVQgUEFSSVRZICAgIENvbW11bmlj YXRpb25zIHBhcml0eSAoaWYgbmVjZXNzYXJ5KSIsCi0jaWZkZWYgQ0tfUlRTQ1RTCi0iICBTRVQg RkxPVyAgICAgIENvbW11bmljYXRpb25zIGZsb3cgY29udHJvbCwgc3VjaCBhcyBSVFMvQ1RTIiwK LSNlbHNlCi0iICBTRVQgRkxPVyAgICAgIENvbW11bmljYXRpb25zIGZsb3cgY29udHJvbCwgc3Vj aCBhcyBYT04vWE9GRiIsCi0jZW5kaWYgLyogQ0tfUlRTQ1RTICovCi0iICBDT05ORUNUICAgICAg IEJlZ2luIHRlcm1pbmFsIGNvbm5lY3Rpb24iLAotCi0jaWZuZGVmIE5PRElBTAotIiAiLAotIlRv IGRpYWwgb3V0IHdpdGggYSBtb2RlbToiLAotIiAgU0VUIERJQUwgRElSRUNUT1JZICAgICBTcGVj aWZ5IGRpYWxpbmcgZGlyZWN0b3J5IGZpbGUgKG9wdGlvbmFsKSIsCi0iICBTRVQgRElBTCBDT1VO VFJZLUNPREUgIENvdW50cnkgeW91IGFyZSBkaWFsaW5nIGZyb20gKCopIiwKLSIgIFNFVCBESUFM IEFSRUEtQ09ERSAgICAgQXJlYS1jb2RlIHlvdSBhcmUgZGlhbGluZyBmcm9tICgqKSIsCi0iICBM T09LVVAgICAgICAgICAgICAgICAgIExvb2t1cCBlbnRyaWVzIGluIHlvdXIgZGlhbGluZyBkaXJl Y3RvcnkgKCopIiwKLSIgIFNFVCBNT0RFTSBUWVBFICAgICAgICAgU2VsZWN0IG1vZGVtIHR5cGUi LAotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0jaWZkZWYgQ0tfVEFQSQotIiAgU0VUIFBPUlQgVEFQ SSAgICAgICAgICBTZWxlY3QgVEFQSSBjb21tdW5pY2F0aW9uIGRldmljZSIsCi0jZW5kaWYgLyog Q0tfVEFQSSAqLwotIiAgU0VUIFBPUlQgICAgICAgICAgICAgICBTZWxlY3Qgc2VyaWFsIGNvbW11 bmljYXRpb24gZGV2aWNlIiwKLSNlbHNlCi0iICBTRVQgUE9SVCAgICAgICAgICAgICAgIFNlbGVj dCBzZXJpYWwgY29tbXVuaWNhdGlvbiBwb3J0IG9yIHNlcnZlciIsCi0jZW5kaWYgLyogTlQgKi8K LSNlbHNlCi0iICBTRVQgTElORSAgICAgICAgICAgICAgIFNlbGVjdCBzZXJpYWwgY29tbXVuaWNh dGlvbiBkZXZpY2UiLAotI2VuZGlmIC8qIE9TMiAqLwotIiAgU0VUIFNQRUVEICAgICAgICAgICAg ICBTZWxlY3QgY29tbXVuaWNhdGlvbiBzcGVlZCIsCi0iICBTRVQgUEFSSVRZICAgICAgICAgICAg IENvbW11bmljYXRpb25zIHBhcml0eSAoaWYgbmVjZXNzYXJ5KSIsCi0iICBESUFMICAgICAgICAg ICAgICAgICAgIERpYWwgdGhlIHBob25lIG51bWJlciIsCi0iICBDT05ORUNUICAgICAgICAgICAg ICAgIEJlZ2luIHRlcm1pbmFsIGNvbm5lY3Rpb24iLAotIiAiLAotI2lmZGVmIE9TMgotIkZ1cnRo ZXIgaW5mbzogICBIRUxQIERJQUwsIEhFTFAgU0VUIE1PREVNLCBIRUxQIFNFVCBQT1JULCBIRUxQ IFNFVCBESUFMIiwKLSNlbHNlCi0iRnVydGhlciBpbmZvOiAgIEhFTFAgRElBTCwgSEVMUCBTRVQg TU9ERU0sIEhFTFAgU0VUIExJTkUsIEhFTFAgU0VUIERJQUwiLAotI2VuZGlmIC8qIE9TMiAqLwot IigqKSAoRm9yIHVzZSB3aXRoIG9wdGlvbmFsIGRpYWxpbmcgZGlyZWN0b3J5KSIsCi0jZW5kaWYg LyogTk9ESUFMICovCi0KLSNpZmRlZiBORVRDT05OCi0iICIsCi0iVG8gbWFrZSBhIG5ldHdvcmsg Y29ubmVjdGlvbjoiLAotI2lmbmRlZiBOT0RJQUwKLSIgIFNFVCBORVRXT1JLIERJUkVDVE9SWSAg U3BlY2lmeSBhIG5ldHdvcmsgc2VydmljZXMgZGlyZWN0b3J5IChvcHRpb25hbCkiLAotIiAgTE9P S1VQICAgICAgICAgICAgICAgICBMb29rdXAgZW50cmllcyBpbiB5b3VyIG5ldHdvcmsgZGlyZWN0 b3J5IiwKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSIgIFNFVCBORVRXT1JLIFRZUEUgICAgICAgU2Vs ZWN0IG5ldHdvcmsgdHlwZSAoaWYgbW9yZSB0aGFuIG9uZSBhdmFpbGFibGUpIiwKLSIgIFNFVCBI T1NUICAgICAgICAgICAgICAgTWFrZSBhIG5ldHdvcmsgY29ubmVjdGlvbiBidXQgc3RheSBpbiBj b21tYW5kIG1vZGUiLAotIiAgQ09OTkVDVCAgICAgICAgICAgICAgICBCZWdpbiB0ZXJtaW5hbCBj b25uZWN0aW9uIiwKLSNpZmRlZiBUTkNPREUKLSIgIFRFTE5FVCAgICAgICAgICAgICAgICAgU2Vs ZWN0IGEgVGVsbmV0IGhvc3QgYW5kIENPTk5FQ1QgdG8gaXQiLAotI2VuZGlmIC8qIFROQ09ERSAq LwotI2lmZGVmIFJMT0dDT0RFCi0iICBSTE9HSU4gICAgICAgICAgICAgICAgIFNlbGVjdCBhbiBS bG9naW4gaG9zdCBhbmQgQ09OTkVDVCB0byBpdCIsCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNp ZmRlZiBBTllTU0gKLSIgIFNTSCBbIE9QRU4gXSAgICAgICAgICAgU2VsZWN0IGFuIFNTSCBob3N0 IGFuZCBDT05ORUNUIHRvIGl0IiwKLSNlbmRpZiAvKiBBTllTU0ggKi8KLSNpZmRlZiBORVdGVFAK LSIgIEZUUCBbIE9QRU4gXSAgICAgICAgICAgTWFrZSBhbiBGVFAgY29ubmVjdGlvbiIsCi0jZW5k aWYgLyogTkVXRlRQICovCi0jaWZkZWYgQ0tIVFRQCi0iICBIVFRQIE9QRU4gICAgICAgICAgICAg IE1ha2UgYW4gSFRUUCBjb25uZWN0aW9uIiwKLSNlbmRpZiAvKiBDS0hUVFAgKi8KLSNlbmRpZiAv KiBORVRDT05OICovCi0KLSNpZmRlZiBOVAotIiAiLAotIlRvIHJldHVybiBmcm9tIHRoZSB0ZXJt aW5hbCB3aW5kb3cgdG8gdGhlIEstOTU+IHByb21wdDoiLAotI2Vsc2UKLSNpZmRlZiBPUzIKLSIg IiwKLSJUbyByZXR1cm4gZnJvbSB0aGUgdGVybWluYWwgd2luZG93IHRvIHRoZSBLLzI+IHByb21w dDoiLAotI2Vsc2UKLSIgIiwKLSJUbyByZXR1cm4gZnJvbSBhIHRlcm1pbmFsIGNvbm5lY3Rpb24g dG8gdGhlIEMtS2VybWl0IHByb21wdDoiLAotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5U ICovCi0jaWZkZWYgT1MyCi0iICBcCi1QcmVzcyB0aGUga2V5IG9yIGtleS1jb21iaW5hdGlvbiBz aG93biBhZnRlciBcIkNvbW1hbmQ6XCIgaW4gdGhlIHN0YXR1cyBsaW5lIiwKLSIgIChzdWNoIGFz IEFsdC14KSBvciB0eXBlIHlvdXIgZXNjYXBlIGNoYXJhY3RlciBmb2xsb3dlZCBieSB0aGUgbGV0 dGVyIEMuIiwKLSNlbHNlCi0iICBUeXBlIHlvdXIgZXNjYXBlIGNoYXJhY3RlciBmb2xsb3dlZCBi eSB0aGUgbGV0dGVyIEMuIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIgIiwKLSJUbyBkaXNwbGF5IHlv dXIgZXNjYXBlIGNoYXJhY3RlcjoiLAotIiAgU0hPVyBFU0NBUEUiLAotIiAiLAotIlRvIGRpc3Bs YXkgb3RoZXIgc2V0dGluZ3M6IiwKLSIgIFNIT1cgQ09NTVVOSUNBVElPTlMsIFNIT1cgVEVSTUlO QUwsIFNIT1cgRklMRSwgU0hPVyBQUk9UT0NPTCwgZXRjLiIsCi0jZWxzZSAgLyogIU5PTE9DQUwg Ki8KLSIgIiwKLSJUbyBkaXNwbGF5IHNldHRpbmdzOiIsCi0iICBTSE9XIENPTU1VTklDQVRJT05T LCBTSE9XIEZJTEUsIFNIT1cgUFJPVE9DT0wsIGV0Yy4iLAotI2VuZGlmIC8qIE5PTE9DQUwgKi8K LSIgIiwKLSJUaGUgbWFudWFsIGZvciBDLUtlcm1pdCBpcyB0aGUgYm9vayBcIlVzaW5nIEMtS2Vy bWl0XCIuICBGb3IgaW5mb3JtYXRpb24iLAotImFib3V0IHRoZSBtYW51YWwsIHZpc2l0OiIsCi0i ICBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS91c2luZ2NrZXJtaXQuaHRtbCIsCi0iICIsCi0j aWZkZWYgT1MyCi0iRm9yIGEgS2VybWl0IDk1IHR1dG9yaWFsLCB2aXNpdDoiLAotIiAgaHR0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUvazk1dHV0b3IuaHRtbCIsCi0iICIsCi0jZW5kaWYgLyogT1My ICovCi0iRm9yIGFuIG9ubGluZSBDLUtlcm1pdCB0dXRvcmlhbCwgdmlzaXQ6IiwKLSIgIGh0dHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2NrdXR1dG9yLmh0bWwiLAotIiAiLAotIlRvIGxlYXJuIGFi b3V0IHNjcmlwdCBwcm9ncmFtbWluZyBhbmQgYXV0b21hdGlvbjoiLAotIiAgaHR0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUvY2tzY3JpcHRzLmh0bWwiLAotIiAiLAotIkZvciBmdXJ0aGVyIGluZm9y bWF0aW9uIGFib3V0IGEgcGFydGljdWxhciBjb21tYW5kLCB0eXBlIEhFTFAgeHh4LCIsCi0id2hl cmUgeHh4IGlzIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kLiAgRm9yIGRvY3VtZW50YXRpb24sIG5l d3Mgb2YgbmV3IiwKLSJyZWxlYXNlcywgYW5kIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIEtlcm1p dCBzb2Z0d2FyZSwgdmlzaXQgdGhlIiwKLSJLZXJtaXQgUHJvamVjdCB3ZWJzaXRlOiIsCi0iICIs Ci0iICBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS8iLAotIiAiLAotIkZvciBpbmZvcm1hdGlv biBhYm91dCB0ZWNobmljYWwgc3VwcG9ydCBwbGVhc2UgdmlzaXQgdGhpcyBwYWdlOiIsCi0iICIs Ci0iICBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9zdXBwb3J0Lmh0bWwiLAotIiIKLX07Ci0K LXN0YXRpYyBjaGFyICogaG14eW1hdGNoW10gPSB7Ci0iU0VUIE1BVENIIHsgRE9URklMRSwgRklG TyB9IHsgT04sIE9GRiB9IiwKLSIgIFRlbGxzIHdoZXRoZXIgd2lsZGNhcmRzIHNob3VsZCBtYXRj aCBkb3RmaWxlcyAoZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4iLAotIiAgd2l0aCBwZXJpb2QpIG9y IFVOSVggRklGTyBzcGVjaWFsIGZpbGVzLiAgTUFUQ0ggRklGTyBkZWZhdWx0IGlzIE9GRi4iLAot IiAgTUFUQ0ggRE9URklMRSBkZWZhdWx0IGlzIE9GRiBpbiBVTklYLCBPTiBlbHNld2hlcmUuIiwK LSIiCi19OwotCi0jaWZuZGVmIE5PU0VYUAotc3RhdGljIGNoYXIgKiBobXh5c2V4cFtdID0gewot IlNFVCBTRVhQUkVTU0lPTiB7IERFUFRILUxJTUlULCBFQ0hPLVJFU1VMVCwgVFJVTkNBVEUtQUxM LVJFU1VMVFMgfSIsCi0iICBERVBUSC1MSU1JVCBzZXRzIGEgbGltaXQgb24gdGhlIGRlcHRoIG9m IG5lc3Rpbmcgb3IgcmVjdXJzaW9uIGluIiwKLSIgIFMtRXhwcmVzc2lvbnMgdG8gcHJldmVudCB0 aGUgcHJvZ3JhbSBmcm9tIGNyYXNoaW5nIGZyb20gbWVtb3J5IGV4aGF1c3Rpb24uIiwKLSIgIEVD SE8tUkVTVUxUIHRlbGxzIHdoZXRoZXIgUy1FeHByZXNzaW9uIHJlc3VsdHMgc2hvdWxkIGJlIGRp c3BsYXllZCBhcyIsCi0iICBhIHJlc3VsdCBvZiBldmFsdWF0aW5nIGFuIGV4cHJlc3Npb247IHRo ZSBkZWZhdWx0IGlzIHRvIGRpc3BsYXkgb25seSBhdCIsCi0iICB0b3AgKGludGVyYWN0aXZlKSBs ZXZlbDsgT0ZGIG1lYW5zIG5ldmVyIGRpc3BsYXk7IE9OIG1lYW5zIGFsd2F5cyBkaXNwbGF5LiIs Ci0iICBUUlVOQ0FURS1BTEwtUkVTVUxUUyBPTiBtZWFucyB0aGUgcmVzdWx0cyBvZiBhbGwgYXJp dGhtZXRpYyBvcGVyYXRpb25zIiwKLSIgIHNob3VsZCBiZSBmb3JjZWQgdG8gaW50ZWdlcnMgKHdo b2xlIG51bWJlcnMpIGJ5IGRpc2NhcmRpbmcgYW55IGZyYWN0aW9uYWwiLAotIiAgcGFydC4gIFRo ZSBkZWZhdWx0IGlzIE9GRi4gIFNIT1cgU0VYUFJFU1NJT04gZGlzcGxheXMgdGhlIGN1cnJlbnQg c2V0dGluZ3MuIgotLCIiCi19OwotI2VuZGlmCS8qIE5PU0VYUCAqLwotCi0jaWZkZWYgT1MyCi0j aWZkZWYgS1VJCi1zdGF0aWMgY2hhciAqIGhteHlndWlbXSA9IHsKLSJTRVQgR1VJIENMT1NFIE9G RiIsCi0iICBEaXNhYmxlcyB0aGUgU3lzdGVtIE1lbnUgQ2xvc2UgYW5kIEZpbGUtPkV4aXQgZnVu Y3Rpb25zIHdoaWNoIGNvdWxkIGJlIiwKLSIgIHVzZWQgdG8gZXhpdCBLZXJtaXQuICBPbmNlIGRp c2FibGVkIHRoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgYmUgcmUtZW5hYmxlZCIsCi0iICBhbmQgdGhl IG9ubHkgd2F5IHRvIGV4aXQgS2VybWl0IGlzIHZpYSB0aGUgS2VybWl0IFNjcmlwdCBFWElUIGNv bW1hbmQuIiwKLSIgIiwKLSJTRVQgR1VJIERJQUxPR1MgeyBPTiwgT0ZGIH0iLAotIiAgT04gbWVh bnMgdGhhdCBwb3B1cHMsIGFsZXJ0cywgdXNlIEdVSSBkaWFsb2dzOyBPRkYgbWVhbnMgdG8gdXNl IiwKLSIgIHRleHQtbW9kZSBwb3B1cHMgb3IgcHJvbXB0cy4gIE9OIGJ5IGRlZmF1bHQuIiwKLSIg IiwKLSJTRVQgR1VJIEZPTlQgbmFtZSBzaXplIiwKLSIgIENob29zZXMgdGhlIGZvbnQgYW5kIHNp emUuICBUeXBlIFwic2V0IGd1aSBmb250ID9cIiB0byBzZWUgdGhlIGxpc3Qgb2YiLAotIiAgY2hv aWNlcy4gIFRoZSBzaXplIGNhbiBiZSBhIHdob2xlIG51bWJlciBvciBjYW4gY29udGFpbiBhIGRl Y2ltYWwgcG9pbnQiLAotIiAgYW5kIGEgZnJhY3Rpb24gKHdoaWNoIGlzIHJvdW5kZWQgdG8gdGhl IG5lYXJlc3QgaGFsZiBwb2ludCkuIiwKLSIgIiwKLSJTRVQgR1VJIE1FTlVCQVIgT0ZGIiwKLSIg IERpc2FibGVzIG1lbnViYXIgZnVuY3Rpb25zIHdoaWNoIGNvdWxkIGJlIHVzZWQgdG8gbW9kaWZ5 IHRoZSBLZXJtaXQiLAotIiAgc2Vzc2lvbiBjb25maWd1cmF0aW9uLiAgT25jZSBkaXNhYmxlZCB0 aGUgbWVudWJhciBmdW5jdGlvbnMgY2Fubm90IGJlIiwKLSIgIHJlLWVuYWJsZWQuIiwgCi0iICIs Ci0iU0VUIEdVSSBSR0JDT0xPUiBjb2xvcm5hbWUgcmVkdmFsdWUgZ3JlZW52YWx1ZSBibHVldmFs dWUiLAotIiAgU3BlY2lmaWVzIHRoZSByZWQtZ3JlZW4tYmx1ZSBtaXh0dXJlIHRvIGJlIHVzZWQg dG8gcmVuZGVyIHRoZSBnaXZlbiIsCi0iICBjb2xvciBuYW1lLiAgVHlwZSBcInNldCBndWkgcmdi Y29sb3JcIiB0byBzZWUgYSBsaXN0IG9mIGNvbG9ybmFtZXMuIiwKLSIgIHRoZSBSR0IgdmFsdWVz IGFyZSB3aG9sZSBudW1iZXJzIGZyb20gMCB0byAyNTUuIiwKLSIgIiwKLSJTRVQgR1VJIFRPT0xC QVIgT0ZGIiwgCi0iICBEaXNhYmxlcyB0b29sYmFyIGZ1bmN0aW9ucyB3aGljaCBjb3VsZCBiZSB1 c2VkIHRvIG1vZGlmeSB0aGUgS2VybWl0IiwKLSIgIHNlc3Npb24gY29uZmlndXJhdGlvbi4gIE9u Y2UgZGlzYWJsZWQgdGhlIHRvb2xiYXIgZnVuY3Rpb25zIGNhbm5vdCBiZSIsCi0iICByZS1lbmFi bGVkLiIsIAotIiAiLAotIlNFVCBHVUkgV0lORE9XIFBPU0lUSU9OIHggeSIsCi0iICBNb3ZlcyB0 aGUgSzk1IHdpbmRvdyB0byB0aGUgZ2l2ZW4gWCxZIGNvb3JkaW5hdGVzLCBwaXhlbHMgZnJvbSB0 b3AgbGVmdC4iLAotIiAgKE5vdCB5ZXQgaW1wbGVtZW50ZWQgLS0gdXNlIGNvbW1hbmQtbGluZSBv cHRpb25zIHRvIGRvIHRoaXMuKSIsCi0iICIsCi0iU0VUIEdVSSBXSU5ET1cgUkVTSVpFLU1PREUg eyBDSEFOR0UtRElNRU5TSU9OUywgU0NBTEUtRk9OVCB9IiwKLSIgIERlZmF1bHQgaXMgQ0hBTkdF LURJTUVOU0lPTlMuIiwKLSIiLAotIlNFVCBHVUkgV0lORE9XIFJVTi1NT0RFIHsgTUFYSU1JWkUs IE1JTklNSVpFLCBSRVNUT1JFIH0iLAotIiAgQ2hhbmdlcyB0aGUgcnVuIG1vZGUgc3RhdGUgb2Yg dGhlIEdVSSB3aW5kb3cuIiwKLSIiCi19OwotI2VuZGlmIC8qIEtVSSAqLwotI2VuZGlmIC8qIE9T MiAqLwotCi0jaWZkZWYgQU5ZU1NICi1zdGF0aWMgY2hhciAqIGhteHhzc2hbXSA9IHsKLSNpZmRl ZiBTU0hCVUlMVElOCi0iU3ludGF4OiBTU0ggeyBBREQsIEFHRU5ULCBDTEVBUiwgS0VZLCBbIE9Q RU4gXSwgVjIgfSBvcGVyYW5kcy4uLiIsCi0iICBQZXJmb3JtcyBhbiBTU0gtcmVsYXRlZCBhY3Rp b24sIGRlcGVuZGluZyBvbiB0aGUga2V5d29yZCB0aGF0IGZvbGxvd3M6IiwKLSIgIiwKLSJTU0gg QUREIExPQ0FMLVBPUlQtRk9SV0FSRCBsb2NhbC1wb3J0IGhvc3QgcG9ydCIsCi0iICBBZGRzIGEg cG9ydCBmb3J3YXJkaW5nIHRyaXBsZXQgdG8gdGhlIGxvY2FsIHBvcnQgZm9yd2FyZGluZyBsaXN0 LiIsCi0iICBUaGUgdHJpcGxldCBzcGVjaWZpZXMgYSBsb2NhbCBwb3J0IHRvIGJlIGZvcndhcmRl ZCBhbmQgdGhlIGhvc3RuYW1lIC8iLAotIiAgaXAtYWRkcmVzcyBhbmQgcG9ydCBudW1iZXIgdG8g d2hpY2ggdGhlIHBvcnQgc2hvdWxkIGJlIGZvcndhcmRlZCBmcm9tIiwKLSIgIHRoZSByZW1vdGUg aG9zdC4gIFBvcnQgZm9yd2FyZGluZyBpcyBhY3RpdmF0ZWQgYXQgY29ubmVjdGlvbiIsCi0iICBl c3RhYmxpc2htZW50IGFuZCBjb250aW51ZXMgdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgdGVybWlu YXRlZC4iLAotIiAiLAotIlNTSCBBREQgUkVNT1RFLVBPUlQtRk9SV0FSRCByZW1vdGUtcG9ydCBo b3N0IHBvcnQiLAotIiAgQWRkcyBhIHBvcnQgZm9yd2FyZGluZyB0cmlwbGV0IHRvIHRoZSByZW1v dGUgcG9ydCBmb3J3YXJkaW5nIGxpc3QuIiwKLSIgIFRoZSB0cmlwbGV0IHNwZWNpZmllcyBhIHJl bW90ZSBwb3J0IHRvIGJlIGZvcndhcmRlZCBhbmQgdGhlIiwKLSIgIGhvc3RuYW1lL2lwLWFkZHJl c3MgYW5kIHBvcnQgbnVtYmVyIHRvIHdoaWNoIHRoZSBwb3J0IHNob3VsZCBiZSIsCi0iICBmb3J3 YXJkZWQgZnJvbSB0aGUgbG9jYWwgbWFjaGluZS4gIFBvcnQgZm9yd2FyZGluZyBpcyBhY3RpdmF0 ZWQgYXQiLAotIiAgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBjb250aW51ZXMgdW50aWwg dGhlIGNvbm5lY3Rpb24gaXMiLAotIiAgdGVybWluYXRlZC4iLAotIiAiLAotIlNTSCBBR0VOVCBB REQgWyBpZGVudGl0eS1maWxlIF0iLAotIiAgQWRkcyB0aGUgY29udGVudHMgb2YgdGhlIGlkZW50 aXR5LWZpbGUgKGlmIGFueSkgdG8gdGhlIFNTSCBBR0VOVCIsCi0iICBwcml2YXRlIGtleSBjYWNo ZS4gIElmIG5vIGlkZW50aXR5LWZpbGUgaXMgc3BlY2lmaWVkLCBhbGwgZmlsZXMiLAotIiAgc3Bl Y2lmaWVkIHdpdGggU0VUIFNTSCBJREVOVElUWS1GSUxFIGFyZSBhZGRlZCB0byB0aGUgY2FjaGUu IiwKLSIgIiwKLSJTU0ggQUdFTlQgREVMRVRFIFsgaWRlbnRpdHktZmlsZSBdIiwKLSIgIERlbGV0 ZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBpZGVudGl0eS1maWxlIChpZiBhbnkpIGZyb20gdGhlIFNT SCBBR0VOVCIsCi0iICBwcml2YXRlIGtleSBjYWNoZS4gIElmIG5vIGlkZW50aXR5LWZpbGUgaXMg c3BlY2lmaWVkLCBhbGwgZmlsZXMiLAotIiAgc3BlY2lmaWVkIHdpdGggU0VUIFNTSCBJREVOVElU WS1GSUxFIGFyZSBkZWxldGVkIGZyb20gdGhlIGNhY2hlLiIsCi0iICIsCi0iU1NIIEFHRU5UIExJ U1QgWyAvRklOR0VSUFJJTlQgXSIsCi0iICBMaXN0cyB0aGUgY29udGVudHMgb2YgdGhlIFNTSCBB R0VOVCBwcml2YXRlIGtleSBjYWNoZS4gIElmIC9GSU5HRVJQUklOVCIsCi0iICBpcyBzcGVjaWZp ZWQsIHRoZSBmaW5nZXJwcmludCBvZiB0aGUgcHJpdmF0ZSBrZXlzIGFyZSBkaXNwbGF5ZWQgaW5z dGVhZCIsCi0iICBvZiB0aGUga2V5cy4iLAotIiAiLAotIlNTSCBDTEVBUiBMT0NBTC1QT1JULUZP UldBUkQiLAotIiAgQ2xlYXJzIHRoZSBsb2NhbCBwb3J0IGZvcndhcmRpbmcgbGlzdC4iLAotIiAi LAotIlNTSCBDTEVBUiBSRU1PVEUtUE9SVC1GT1JXQVJEIiwKLSIgIENsZWFycyB0aGUgcmVtb3Rl IHBvcnQgZm9yd2FyZGluZyBsaXN0LiIsCi0iICIsCi0iU1NIIEtFWSBjb21tYW5kczoiLAotIiAg VGhlIFNTSCBLRVkgY29tbWFuZHMgY3JlYXRlIGFuZCBtYW5hZ2UgcHVibGljIGFuZCBwcml2YXRl IGtleSBwYWlycyIsCi0iICAoaWRlbnRpdGllcykuICBUaGVyZSBhcmUgdGhyZWUgZm9ybXMgb2Yg U1NIIGtleXMuICBFYWNoIGtleSBwYWlyIGlzIiwKLSIgIHN0b3JlZCBpbiBpdHMgb3duIHNldCBv ZiBmaWxlczoiLAotIiAiLAotIiAgIEtleSBUeXBlICAgICAgUHJpdmF0ZSBLZXkgRmlsZSAgICAg ICAgICAgUHVibGljIEtleSBGaWxlIiwKLSIgICAgdjEgUlNBIGtleXMgICBcXHYoYXBwZGF0YSlz c2gvaWRlbnRpdHkgICBcXHYoYXBwZGF0YSlzc2gvaWRlbnRpdHkucHViIiwKLSIgICAgdjIgUlNB IGtleXMgICBcXHYoYXBwZGF0YSlzc2gvaWRfcnNhICAgICBcXHYoYXBwZGF0YSlzc2gvaWRfcnNh LnB1YiIsCi0iICAgIHYyIERTQSBrZXlzICAgXFx2KGFwcGRhdGEpc3NoL2lkX2RzYSAgICAgXFx2 KGFwcGRhdGEpc3NoL2lkX2RzYS5wdWIiLAotIiAiLAotIiAgS2V5cyBhcmUgc3RvcmVkIHVzaW5n IHRoZSBPcGVuU1NIIGtleWZpbGUgZm9ybWF0LiAgVGhlIHByaXZhdGUga2V5IiwKLSIgIGZpbGVz IGNhbiBiZSAob3B0aW9uYWxseSkgcHJvdGVjdGVkIGJ5IHNwZWNpZnlpbmcgYSBwYXNzcGhyYXNl LiAgQSIsCi0iICBwYXNzcGhyYXNlIGlzIGEgbG9uZ2VyIHZlcnNpb24gb2YgYSBwYXNzd29yZC4g IEVuZ2xpc2ggdGV4dCBwcm92aWRlcyIsCi0iICBubyBtb3JlIHRoYW4gMiBiaXRzIG9mIGtleSBk YXRhIHBlciBjaGFyYWN0ZXIuICA1Ni1iaXQga2V5cyBjYW4gYmUiLAotIiAgYnJva2VuIGJ5IGEg YnJ1dGUgZm9yY2UgYXR0YWNrIGluIGFwcHJveGltYXRlbHkgMjQgaG91cnMuICBXaGVuIHVzZWQs IiwKLSIgIHByaXZhdGUga2V5IGZpbGVzIHNob3VsZCB0aGVyZWZvcmUgYmUgcHJvdGVjdGVkIGJ5 IGEgcGFzc3BocmFzZSBvZiBhdCIsCi0iICBsZWFzdCA0MCBjaGFyYWN0ZXJzIChhYm91dCA4MCBi aXRzKS4iLAotIiAiLAotIiAgVG8gaW5zdGFsbCBhIHB1YmxpYyBrZXkgZmlsZSBvbiB0aGUgaG9z dCwgeW91IG11c3QgdHJhbnNmZXIgdGhlIGZpbGUiLAotIiAgdG8gdGhlIGhvc3QgYW5kIGFwcGVu ZCBpdCB0byB5b3VyIFwiYXV0aG9yaXplZF9rZXlzXCIgZmlsZS4gIFRoZSBmaWxlIiwKLSIgIHBl cm1pc3Npb25zIG11c3QgYmUgNjAwIChvciBlcXVpdmFsZW50KS4iLAotIiAiLAotIlNTSCBLRVkg Q0hBTkdFLVBBU1NQSFJBU0UgWyAvTkVXLVBBU1NQSFJBU0U6cGFzc3BocmFzZSIsCi0iICAgICAg L09MRC1QQVNTUEhSQVNFOnBhc3NwaHJhc2UgXSBmaWxlbmFtZSIsCi0iICBUaGlzIHJlLWVuY3J5 cHRzIHRoZSBzcGVjaWZpZWQgcHJpdmF0ZSBrZXkgZmlsZSB3aXRoIGEgbmV3IHBhc3NwaHJhc2Uu IiwKLSIgIFRoZSBvbGQgcGFzc3BocmFzZSBpcyByZXF1aXJlZC4gIElmIHRoZSBwYXNzcGhyYXNl cyAoYW5kIGZpbGVuYW1lKSBhcmUiLAotIiAgbm90IHByb3ZpZGVkIEtlcm1pdCBwcm9tcHRzIHlv dXIgZm9yIHRoZW0uIiwKLSIgIiwKLSJTU0ggS0VZIENSRUFURSBbIC9CSVRTOmJpdHMgL1BBU1NQ SFJBU0U6cGFzc3BocmFzZSIsCi0iICAgIC9UWVBFOnsgVjEtUlNBLCBWMi1EU0EsIFYyLVJTQSB9 IC9WMS1SU0EtQ09NTUVOVDpjb21tZW50IF0gZmlsZW5hbWUiLAotIiAgVGhpcyBjb21tYW5kIGNy ZWF0ZXMgYSBuZXcgcHJpdmF0ZS9wdWJsaWMga2V5IHBhaXIuICBUaGUgZGVmYXVsdHMgYXJlOiIs Ci0iICBCSVRTOjEwMjQgYW5kIFRZUEU6VjItUlNBLiAgVGhlIGZpbGVuYW1lIGlzIHRoZSBuYW1l IG9mIHRoZSBwcml2YXRlIiwKLSIgIGtleSBmaWxlLiAgVGhlIHB1YmxpYyBrZXkgaXMgY3JlYXRl ZCB3aXRoIHRoZSBzYW1lIG5hbWUgd2l0aCAucHViIiwKLSIgIGFwcGVuZGVkIHRvIGl0LiAgSWYg YSBmaWxlbmFtZSBpcyBub3Qgc3BlY2lmaWVkIEtlcm1pdCBwcm9tcHRzIHlvdSBmb3IiLAotIiAg aXQuICBWMSBSU0Ega2V5IGZpbGVzIG1heSBoYXZlIGFuIG9wdGlvbmFsIGNvbW1lbnQsIHdoaWNo IGlzIGlnbm9yZWQiLAotIiAgZm9yIG90aGVyIGtleSB0eXBlcy4iLAotIiAiLAotIlNTSCBLRVkg RElTUExBWSBbIC9GT1JNQVQ6e0ZJTkdFUlBSSU5ULElFVEYsT1BFTlNTSCxTU0guQ09NfSBdIGZp bGVuYW1lIiwKLSIgIFRoaXMgY29tbWFuZCBkaXNwbGF5cyB0aGUgY29udGVudHMgb2YgYSBwdWJs aWMgb3IgcHJpdmF0ZSBrZXkgZmlsZS4iLAotIiAgVGhlIGRlZmF1bHQgZm9ybWF0IGlzIE9QRU5T U0guIiwKLSIgIiwKLSJTU0ggS0VZIFYxIFNFVC1DT01NRU5UIGZpbGVuYW1lIGNvbW1lbnQiLAot IiAgVGhpcyBjb21tYW5kIHJlcGxhY2VzIHRoZSBjb21tZW50IGFzc29jaWF0ZWQgd2l0aCBhIFYx IFJTQSBrZXkgZmlsZS4iLAotIiAiLAotIlNTSCBbIE9QRU4gXSBob3N0IFsgcG9ydCBdIFsgL0NP TU1BTkQ6Y29tbWFuZCAvVVNFUjp1c2VybmFtZSIsCi0iICAgICAgL1BBU1NXT1JEOnB3ZCAvVkVS U0lPTjp7IDEsIDIgfSAvWDExLUZPUldBUkRJTkc6eyBPTiwgT0ZGIH0gXSIsCi0iICBUaGlzIGNv bW1hbmQgZXN0YWJsaXNoZXMgYSBuZXcgY29ubmVjdGlvbiB1c2luZyBTU0ggdmVyc2lvbiAxIG9y IiwKLSIgIHZlcnNpb24gMiBwcm90b2NvbC4gIFRoZSBjb25uZWN0aW9uIGlzIG1hZGUgdG8gdGhl IHNwZWNpZmllZCBob3N0IG9uIiwKLSIgIHRoZSBTU0ggcG9ydCAoeW91IGNhbiBvdmVycmlkZSB0 aGUgcG9ydCBieSBpbmNsdWRpbmcgYSBwb3J0IG5hbWUgb3IiLAotIiAgbnVtYmVyIGFmdGVyIHRo ZSBob3N0IG5hbWUpLiAgT25jZSB0aGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCB0aGUiLAot IiAgYXV0aGVudGljYXRpb24gbmVnb3RpYXRpb25zIGJlZ2luLiAgSWYgdGhlIGF1dGhlbnRpY2F0 aW9uIGlzIGFjY2VwdGVkLCIsCi0iICB0aGUgbG9jYWwgYW5kIHJlbW90ZSBwb3J0IGZvcndhcmRp bmcgbGlzdHMgYXJlIHVzZWQgdG8gZXN0YWJsaXNoIHRoZSIsCi0iICBkZXNpcmVkIGNvbm5lY3Rp b25zLiAgSWYgWDExIEZvcndhcmRpbmcgaXMgYWN0aXZlLCB0aGlzIHJlc3VsdHMgaW4gYSIsCi0i ICByZW1vdGUgcG9ydCBmb3J3YXJkaW5nIGJldHdlZW4gdGhlIFgxMSBjbGllbnRzIG9uIHRoZSBy ZW1vdGUgaG9zdCBhbmQiLAotIiAgWDExIFNlcnZlciBvbiB0aGUgbG9jYWwgbWFjaGluZS4gIElm IGEgL0NPTU1BTkQgaXMgcHJvdmlkZWQsIHRoZSIsCi0iICBjb21tYW5kIGlzIGV4ZWN1dGVkIG9u IHRoZSByZW1vdGUgaG9zdCBpbiBwbGFjZSBvZiB5b3VyIGRlZmF1bHQgc2hlbGwuIiwKLSIgIiwK LSIgIEFuIGV4YW1wbGUgb2YgYSAvQ09NTUFORCB0byBleGVjdXRlIEMtS2VybWl0IGluIFNFUlZF UiBtb2RlIGlzOiIsCi0iICAgICBTU0ggT1BFTiBob3N0bmFtZSAvQ09NTUFORDp7a2VybWl0IC14 IC1sIDB9IiwKLSIgIiwKLSJTU0ggVjIgUkVLRVkiLAotIiAgUmVxdWVzdHMgdGhhdCBhbiBleGlz dGluZyBTU0ggVjIgY29ubmVjdGlvbiBnZW5lcmF0ZSBuZXcgc2Vzc2lvbiBrZXlzLiIsCi0jZWxz ZSAgLyogU1NIQlVJTFRJTiAqLwotIlN5bnRheDogU1NIIFsgb3B0aW9ucyBdIDxob3N0bmFtZT4g WyBjb21tYW5kIF0iLAotIiAgTWFrZXMgYW4gU1NIIGNvbm5lY3Rpb24gdXNpbmcgdGhlIGV4dGVy bmFsIHNzaCBwcm9ncmFtIHZpYSB0aGUgU0VUIFNTSCIsCi0iICBDT01NQU5EIHN0cmluZywgd2hp Y2ggaXMgXCJzc2ggLWUgbm9uZVwiIGJ5IGRlZmF1bHQuICBPcHRpb25zIGZvciB0aGUiLAotIiAg ZXh0ZXJuYWwgc3NoIHByb2dyYW0gbWF5IGJlIGluY2x1ZGVkLiAgSWYgdGhlIGhvc3RuYW1lIGlz IGZvbGxvd2VkIGJ5IGEiLAotIiAgY29tbWFuZCwgdGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQgb24g dGhlIGhvc3QgaW5zdGVhZCBvZiBhbiBpbnRlcmFjdGl2ZSIsCi0iICBzaGVsbC4iLAotI2VuZGlm IC8qIFNTSEJVSUxUSU4gKi8KLSIiCi19OwotCi1zdGF0aWMgY2hhciAqaG14eXNzaFtdID0gewot I2lmZGVmIFNTSEJVSUxUSU4KLSJTRVQgU1NIIEFHRU5ULUZPUldBUkRJTkcgeyBPTiwgT0ZGIH0i LAotIiAgSWYgYW4gYXV0aGVudGljYXRpb24gYWdlbnQgaXMgaW4gdXNlLCBzZXR0aW5nIHRoaXMg dmFsdWUgdG8gT04iLAotIiAgcmVzdWx0cyBpbiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYWdlbnQg YmVpbmcgZm9yd2FyZGVkIHRvIHRoZSByZW1vdGUiLAotIiAgY29tcHV0ZXIuICBUaGUgZGVmYXVs dCBpcyBPRkYuIiwKLSIgIiwKLSJTRVQgU1NIIENIRUNLLUhPU1QtSVAgeyBPTiwgT0ZGIH0iLAot IiAgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHJlbW90ZSBob3N0J3MgaXAtYWRkcmVzcyBzaG91bGQg YmUgY2hlY2tlZCIsCi0iICBhZ2FpbnN0IHRoZSBtYXRjaGluZyBob3N0IGtleSBpbiB0aGUga25v d25faG9zdHMgZmlsZS4gIFRoaXMgY2FuIGJlIiwKLSIgIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRo ZSBob3N0IGtleSBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIEROUyBzcG9vZmluZy4iLAotIiAgVGhl IGRlZmF1bHQgaXMgT04uIiwKLSIgIiwKLSJTRVQgU1NIIENPTVBSRVNTSU9OIHsgT04sIE9GRiB9 IiwKLSIgIFNwZWNpZmllcyB3aGV0aGVyIGNvbXByZXNzaW9uIHdpbGwgYmUgdXNlZC4gIFRoZSBk ZWZhdWx0IGlzIE9OLiIsCi0iICIsCi0iU0VUIFNTSCBEWU5BTUlDLUZPUldBUkRJTkcgeyBPTiwg T0ZGIH0iLAotIiAgU3BlY2lmaWVzIHdoZXRoZXIgS2VybWl0IGlzIHRvIGFjdCBhcyBhIFNPQ0tT NCBzZXJ2aWNlIG9uIHBvcnQgMTA4MCIsCi0iICB3aGVuIGNvbm5lY3RlZCB0byBhIHJlbW90ZSBo b3N0IHZpYSBTU0guICBXaGVuIEtlcm1pdCBhY3RzIGFzIGEgU09DS1M0IiwKLSIgIHNlcnZpY2Us IGl0IGFjY2VwdHMgY29ubmVjdGlvbiByZXF1ZXN0cyBhbmQgZm9yd2FyZHMgdGhlIGNvbm5lY3Rp b25zIiwKLSIgIHRocm91Z2ggdGhlIHJlbW90ZSBob3N0LiAgVGhlIGRlZmF1bHQgaXMgT0ZGLiIs Ci0iICIsCi0iU0VUIFNTSCBHQVRFV0FZLVBPUlRTIHsgT04sIE9GRiB9IiwKLSIgIFNwZWNpZmll cyB3aGV0aGVyIEtlcm1pdCBzaG91bGQgYWN0IGFzIGEgZ2F0ZXdheSBmb3IgZm9yd2FyZGVkIiwK LSIgIGNvbm5lY3Rpb25zIHJlY2VpdmVkIGZyb20gdGhlIHJlbW90ZSBob3N0LiAgVGhlIGRlZmF1 bHQgaXMgT0ZGLiIsCi0iICIsCi0iU0VUIFNTSCBHU1NBUEkgREVMRUdBVEUtQ1JFREVOVElBTFMg eyBPTiwgT0ZGIH0iLAotIiAgU3BlY2lmaWVzIHdoZXRoZXIgS2VybWl0IHNob3VsZCBkZWxlZ2F0 ZSBHU1NBUEkgY3JlZGVudGlhbHMgdG8gIiwKLSIgIHRoZSByZW1vdGUgaG9zdCBhZnRlciBhdXRo ZW50aWNhdGlvbi4gIERlbGVnYXRpbmcgY3JlZGVudGlhbHMgYWxsb3dzIiwKLSIgIHRoZSBjcmVk ZW50aWFscyB0byBiZSB1c2VkIGZyb20gdGhlIHJlbW90ZSBob3N0LiAgVGhlIGRlZmF1bHQgaXMg T0ZGLiIsCi0iICIsCi0iU0VUIFNTSCBIRUFSVEJFQVQtSU5URVJWQUwgPHNlY29uZHM+IiwKLSIg IFNwZWNpZmllcyBhIG51bWJlciBvZiBzZWNvbmRzIG9mIGlkbGUgdGltZSBhZnRlciB3aGljaCBh biBJR05PUkUiLAotIiAgbWVzc2FnZSB3aWxsIGJlIHNlbnQgdG8gdGhlIHNlcnZlci4gIFRoaXMg cHVsc2UgaXMgdXNlZnVsIGZvciIsCi0iICBtYWludGFpbmluZyBjb25uZWN0aW9ucyB0aHJvdWdo IEhUVFAgUHJveHkgc2VydmVycyBhbmQgTmV0d29yayIsCi0iICBBZGRyZXNzIFRyYW5zbGF0b3Jz LiAgVGhlIGRlZmF1bHQgaXMgT0ZGICgwIHNlY29uZHMpLiIsCi0iICIsCi0iU0VUIFNTSCBJREVO VElUWS1GSUxFIGZpbGVuYW1lIFsgZmlsZW5hbWUgWyAuLi4gXSBdIiwKLSIgIFNwZWNpZmllcyBv bmUgb3IgbW9yZSBmaWxlcyBmcm9tIHdoaWNoIHRoZSB1c2VyJ3MgYXV0aG9yaXphdGlvbiIsCi0i ICBpZGVudGl0aWVzIChwcml2YXRlIGtleXMpIGFyZSB0byBiZSByZWFkIHdoZW4gdXNpbmcgcHVi bGljIGtleSIsCi0iICBhdXRob3JpemF0aW9uLiAgVGhlc2UgYXJlIGZpbGVzIHVzZWQgaW4gYWRk aXRpb24gdG8gdGhlIGRlZmF1bHQgZmlsZXM6IiwKLSIgIiwKLSIgICAgXFx2KGFwcGRhdGEpc3No L2lkZW50aXR5ICAgICAgVjEgUlNBIiwKLSIgICAgXFx2KGFwcGRhdGEpc3NoL2lkX3JzYSAgICAg ICAgVjIgUlNBIiwKLSIgICAgXFx2KGFwcGRhdGEpc3NoL2lkX2RzYSAgICAgICAgVjIgRFNBIiwK LSIgIiwKLSJTRVQgU1NIIEtFUkJFUk9TNCBUR1QtUEFTU0lORyB7IE9OLCBPRkYgfSIsCi0iICBT cGVjaWZpZXMgd2hldGhlciBLZXJtaXQgc2hvdWxkIGZvcndhcmQgS2VyYmVyb3MgNCBUR1RzIHRv IHRoZSBob3N0LiIsCi0iICBUaGUgZGVmYXVsdCBpcyBPRkYuIiwKLSIgIiwKLSJTRVQgU1NIIEtF UkJFUk9TNSBUR1QtUEFTU0lORyB7IE9OLCBPRkYgfSIsCi0iICBTcGVjaWZpZXMgd2hldGhlciBL ZXJtaXQgc2hvdWxkIGZvcndhcmQgS2VyYmVyb3MgNSBUR1RzIHRvIHRvIHRoZSIsCi0iICBob3N0 LiAgVGhlIGRlZmF1bHQgaXMgT0ZGLiIsCi0iICIsCi0iU0VUIFNTSCBQUklWSUxFR0VELVBPUlQg eyBPTiwgT0ZGIH0iLAotIiAgU3BlY2lmaWVzIHdoZXRoZXIgYSBwcml2aWxlZ2VkIHBvcnQgKGxl c3MgdGhhbiAxMDI0KSBzaG91bGQgYmUgdXNlZCIsCi0iICB3aGVuIGNvbm5lY3RpbmcgdG8gdGhl IGhvc3QuICBQcml2aWxlZ2VkIHBvcnRzIGFyZSBub3QgcmVxdWlyZWQgZXhjZXB0IiwKLSIgIHdo ZW4gdXNpbmcgU1NIIFYxIHdpdGggUmhvc3RzIG9yIFJob3N0c1JTQSBhdXRob3JpemF0aW9uLiAg VGhlIGRlZmF1bHQiLAotIiAgaXMgT0ZGLiIsCi0iICIsCi0iU0VUIFNTSCBRVUlFVCB7IE9OLCBP RkYgfSIsCi0iICBTcGVjaWZpZXMgd2hldGhlciBhbGwgbWVzc2FnZXMgZ2VuZXJhdGVkIGluIGNv bmp1bmN0aW9uIHdpdGggU1NIIiwKLSIgIHByb3RvY29scyBzaG91bGQgYmUgc3VwcHJlc3NlZC4g IFRoZSBkZWZhdWx0IGlzIE9GRi4iLAotIiAiLAotIlNFVCBTU0ggU1RSSUNULUhPU1QtS0VZLUNI RUNLIHsgQVNLLCBPTiwgT0ZGIH0iLAotIiAgU3BlY2lmaWVzIGhvdyBLZXJtaXQgc2hvdWxkIGJl aGF2ZSBpZiB0aGUgdGhlIGhvc3Qga2V5IGNoZWNrIGZhaWxzLiIsCi0iICBXaGVuIHN0cmljdCBo b3N0IGtleSBjaGVja2luZyBpcyBPRkYsIHRoZSBuZXcgaG9zdCBrZXkgaXMgYWRkZWQgdG8gdGhl IiwKLSIgIHByb3RvY29sLXZlcnNpb24tc3BlY2lmaWMgdXNlci1rbm93bi1ob3N0cy1maWxlLiAg V2hlbiBzdHJpY3QgaG9zdCBrZXkiLAotIiAgY2hlY2tpbmcgaXMgT04sIHRoZSBuZXcgaG9zdCBr ZXkgaXMgcmVmdXNlZCBhbmQgdGhlIGNvbm5lY3Rpb24gaXMiLAotIiAgZHJvcHBlZC4gIFdoZW4g c2V0IHRvIEFTSywgS2VybWl0IHByb21wdCB5b3UgdG8gc2F5IHdoZXRoZXIgdGhlIG5ldyIsCi0i ICBob3N0IGtleSBzaG91bGQgYmUgYWNjZXB0ZWQuICBUaGUgZGVmYXVsdCBpcyBBU0suIiwKLSIg IiwKLSIgIFN0cmljdCBob3N0IGtleSBjaGVja2luZyBwcm90ZWN0cyB5b3UgYWdhaW5zdCBUcm9q YW4gaG9yc2UgYXR0YWNrcy4iLAotIiAgSXQgZGVwZW5kcyBvbiB5b3UgdG8gbWFpbnRhaW4gdGhl IGNvbnRlbnRzIG9mIHRoZSBrbm93bi1ob3N0cy1maWxlIiwKLSIgIHdpdGggY3VycmVudCBhbmQg dHJ1c3RlZCBob3N0IGtleXMuIiwKLSIgIiwKLSJTRVQgU1NIIFVTRS1PUEVOU1NILUNPTkZJRyB7 IE9OLCBPRkYgfSIsCi0iICBTcGVjaWZpZXMgd2hldGhlciBLZXJtaXQgc2hvdWxkIHBhcnNlIGFu IE9wZW5TU0ggY29uZmlndXJhdGlvbiBmaWxlIiwKLSIgIGFmdGVyIGFwcGx5aW5nIEtlcm1pdCdz IFNFVCBTU0ggY29tbWFuZHMuICBUaGUgY29uZmlndXJhdGlvbiBmaWxlIiwKLSIgIHdvdWxkIGJl IGxvY2F0ZWQgYXQgXFx2KGhvbWUpc3NoL3NzaF9jb25maWcuICBUaGUgZGVmYXVsdCBpcyBPRkYu IiwKLSIgIiwKLSJTRVQgU1NIIFYxIENJUEhFUiB7IDNERVMsIEJMT1dGSVNILCBERVMgfSIsCi0i ICBTcGVjaWZpZXMgd2hpY2ggY2lwaGVyIHNob3VsZCBiZSB1c2VkIHRvIHByb3RlY3QgU1NIIHZl cnNpb24gMSIsCi0iICBjb25uZWN0aW9ucy4gIFRoZSBkZWZhdWx0IGlzIDNERVMuIiwKLSIgIiwK LSJTRVQgU1NIIFYxIEdMT0JBTC1LTk9XTi1IT1NUUy1GSUxFIGZpbGVuYW1lIiwKLSIgIFNwZWNp ZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHN5c3RlbS13aWRlIGtub3duLWhvc3RzIGZpbGUuICBU aGUiLAotIiAgZGVmYXVsdCBpczoiLAotIiAiLAotIiAgICBcdihjb21tb24pc3NoX2tub3duX2hv c3RzIiwKLSIgIiwKLSJTRVQgU1NIIFYxIFVTRVItS05PV04tSE9TVFMtRklMRSBmaWxlbmFtZSIs Ci0iICBTcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSB1c2VyLWtub3duLWhvc3RzLWZpbGUu ICBUaGUgZGVmYXVsdCIsCi0iICBsb2NhdGlvbiBpczoiLAotIiAiLAotIiAgICBcXHYoYXBwZGF0 YSlzc2gva25vd25faG9zdHMiLAotIiAiLAotIlNFVCBTU0ggVjIgQVVUSEVOVElDQVRJT04geyBF WFRFUk5BTC1LRVlYLCBHU1NBUEksIEhPU1RCQVNFRCwgIiwKLSIgICAgS0VZQk9BUkQtSU5URVJB Q1RJVkUsIFBBU1NXT1JELCBQVUJLRVksIFNSUC1HRVgtU0hBMSB9IFsgLi4uIF0iLAotIiAgU3Bl Y2lmaWVzIGFuIG9yZGVyZWQgbGlzdCBvZiBTU0ggdmVyc2lvbiAyIGF1dGhlbnRpY2F0aW9uIG1l dGhvZHMgdG8iLAotIiAgYmUgdXNlZCB3aGVuIGNvbm5lY3RpbmcgdG8gdGhlIHJlbW90ZSBob3N0 LiAgVGhlIGRlZmF1bHQgbGlzdCBpczoiLAotIiAiLAotIiAgICBleHRlcm5hbC1rZXl4IGdzc2Fw aSBob3N0YmFzZWQgcHVibGlja2V5IHNycC1nZXgtc2hhMSBwdWJsaWNrZXkiLAotIiAgICBrZXli b2FyZC1pbnRlcmFjdGl2ZSBwYXNzd29yZCBub25lIiwKLSIgIiwKLSJTRVQgU1NIIFYyIEFVVE8t UkVLRVkgeyBPTiwgT0ZGIH0iLAotIiAgU3BlY2lmaWVzIHdoZXRoZXIgS2VybWl0IGF1dG9tYXRp Y2FsbHkgaXNzdWVzIHJla2V5aW5nIHJlcXVlc3RzIiwKLSIgIG9uY2UgYW4gaG91ciB3aGVuIFNT SCB2ZXJzaW9uIDIgaW4gaW4gdXNlLiAgVGhlIGRlZmF1bHQgaXMgT04uIiwKLSIgIiwKLSJTRVQg U1NIIFYyIENJUEhFUlMgeyAzREVTLUNCQywgQUVTMTI4LUNCQyBBRVMxOTItQ0JDIEFFUzI1Ni1D QkMiLAotIiAgICAgQVJDRk9VUiBCTE9XRklTSC1DQkMgQ0FTVDEyOC1DQkMgUklKTkRBRUwxMjgt Q0JDIFJJSk5EQUVMMTkyLUNCQyIsCi0iICAgICBSSUpOREFFTDI1Ni1DQkMgfSIsCi0iICBTcGVj aWZpZXMgYW4gb3JkZXJlZCBsaXN0IG9mIFNTSCB2ZXJzaW9uIGNpcGhlcnMgdG8gYmUgdXNlZCB0 byBlbmNyeXB0IiwKLSIgIHRoZSBlc3RhYmxpc2hlZCBjb25uZWN0aW9uLiAgVGhlIGRlZmF1bHQg bGlzdCBpczoiLAotIiAiLAotIiAgICBhZXMxMjgtY2JjIDNkZXMtY2JjIGJsb3dmaXNoLWNiYyBj YXN0MTI4LWNiYyBhcmNmb3VyIGFlczE5Mi1jYmMiLAotIiAgICBhZXMyNTYtY2JjIiwKLSIgIiwK LSIgIFwicmlqbmRhZWxcIiBpcyBhbiBhbGlhcyBmb3IgXCJhZXNcIi4iLAotIiAiLAotIlNFVCBT U0ggVjIgR0xPQkFMLUtOT1dOLUhPU1RTLUZJTEUgZmlsZW5hbWUiLAotIiAgU3BlY2lmaWVzIHRo ZSBsb2NhdGlvbiBvZiB0aGUgc3lzdGVtLXdpZGUga25vd24taG9zdHMgZmlsZS4gIFRoZSBkZWZh dWx0IiwKLSIgIGxvY2F0aW9uIGlzOiIsCi0iICIsCi0iICAgIFxcdihjb21tb24pc3NoL2tub3du X2hvc3RzMiIsCi0iICIsCi0iU0VUIFNTSCBWMiBIT1NUS0VZLUFMR09SSVRITVMgeyBTU0gtRFNT LCBTU0gtUlNBIH0iLAotIiAgU3BlY2lmaWVzIGFuIG9yZGVyZWQgbGlzdCBvZiBob3N0a2V5IGFs Z29yaXRobXMgdG8gYmUgdXNlZCB0byB2ZXJpZnkiLAotIiAgdGhlIGlkZW50aXR5IG9mIHRoZSBo b3N0LiAgVGhlIGRlZmF1bHQgbGlzdCBpcyIsCi0iICIsCi0iICAgIHNzaC1yc2Egc3NoLWRzcyIs Ci0iICIsCi0iU0VUIFNTSCBWMiBNQUNTIHsgSE1BQy1NRDUgSE1BQy1NRDUtOTYgSE1BQy1SSVBF TUQxNjAgSE1BQy1TSEExIiwKLSIgICAgIEhNQUMtU0hBMS05NiB9IiwKLSIgIFNwZWNpZmllcyBh biBvcmRlcmVkIGxpc3Qgb2YgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlIGFsZ29yaXRobXMg dG8iLAotIiAgYmUgdXNlZCBmb3IgaW50ZWdyaXR5ICBwcm90ZWN0aW9uIG9mIHRoZSBlc3RhYmxp c2hlZCBjb25uZWN0aW9uLiAgVGhlIiwKLSIgIGRlZmF1bHQgbGlzdCBpczoiLAotIiAiLAotIiAg ICBobWFjLW1kNSBobWFjLXNoYTEgaG1hYy1yaXBlbWQxNjAgaG1hYy1zaGExLTk2IGhtYWMtbWQ1 LTk2IiwKLSIgIiwKLSJTRVQgU1NIIFYyIFVTRVItS05PV04tSE9TVFMtRklMRSBmaWxlbmFtZSIs Ci0iICBTcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSB1c2VyLWtub3duLWhvc3RzIGZpbGUu ICBUaGUgZGVmYXVsdCIsCi0iICBsb2NhdGlvbiBpczoiLAotIiAiLAotIiAgICBcXHYoYXBwZGF0 YSlzc2gva25vd25faG9zdHMyIiwKLSIgIiwKLSJTRVQgU1NIIFZFUkJPU0UgbGV2ZWwiLAotIiAg U3BlY2lmaWVzIGhvdyBtYW55IG1lc3NhZ2VzIHNob3VsZCBiZSBnZW5lcmF0ZWQgYnkgdGhlIE9w ZW5TU0ggZW5naW5lLiIsCi0iICBUaGUgbGV2ZWwgY2FuIHJhbmdlIGZyb20gMCB0byA3LiAgVGhl IGRlZmF1bHQgdmFsdWUgaXMgMi4iLAotIiAiLAotIlNFVCBTU0ggVkVSU0lPTiB7IDEsIDIsIEFV VE9NQVRJQyB9IiwKLSIgIFNwZWNpZmllcyB3aGljaCBTU0ggdmVyc2lvbiBzaG91bGQgYmUgbmVn b3RpYXRlZC4gIFRoZSBkZWZhdWx0IGlzIiwKLSIgIEFVVE9NQVRJQyB3aGljaCBtZWFucyB1c2Ug dmVyc2lvbiAyIGlmIHN1cHBvcnRlZDsgb3RoZXJ3aXNlIHRvIGZhbGwiLAotIiAgYmFjayB0byB2 ZXJzaW9uIDEuIiwKLSIgIiwKLSJTRVQgU1NIIFgxMS1GT1JXQVJESU5HIHsgT04sIE9GRiB9IiwK LSIgIFNwZWNpZmllcyB3aGV0aGVyIFggV2luZG93cyBTeXN0ZW0gRGF0YSBpcyB0byBiZSBmb3J3 YXJkZWQgYWNyb3NzIHRoZSIsCi0iICBlc3RhYmxpc2hlZCBTU0ggY29ubmVjdGlvbi4gIFRoZSBk ZWZhdWx0IGlzIE9GRi4gIFdoZW4gT04sIHRoZSBESVNQTEFZIiwKLSIgIHZhbHVlIGlzIGVpdGhl ciBzZXQgdXNpbmcgdGhlIFNFVCBURUxORVQgRU5WIERJU1BMQVkgY29tbWFuZCBvciByZWFkIiwK LSIgIGZyb20gdGhlIERJU1BMQVkgZW52aXJvbm1lbnQgdmFyaWFibGUuIiwKLSIgIiwKLSJTRVQg U1NIIFhBVVRILUxPQ0FUSU9OIGZpbGVuYW1lIiwKLSIgIFNwZWNpZmllcyB0aGUgbG9jYXRpb24g b2YgdGhlIHhhdXRoIGV4ZWN1dGFibGUgKGlmIHByb3ZpZGVkIHdpdGggdGhlIiwKLSIgIFgxMSBT ZXJ2ZXIgc29mdHdhcmUuKSIsCi0jZWxzZSAgLyogU1NIQlVJTFRJTiAqLwotIlN5bnRheDogU0VU IFNTSCBDT01NQU5EIGNvbW1hbmQiLAotIiAgU3BlY2lmaWVzIHRoZSBleHRlcm5hbCBjb21tYW5k IHRvIGJlIHVzZWQgdG8gbWFrZSBhbiBTU0ggY29ubmVjdGlvbi4iLAotIiAgQnkgZGVmYXVsdCBp dCBpcyBcInNzaCAtZSBub25lXCIgKHNzaCB3aXRoIG5vIGVzY2FwZSBjaGFyYWN0ZXIpLiIsCi0j ZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotIiIKLX07Ci0jZW5kaWYgLyogQU5ZU1NIICovCi0KLSNp ZmRlZiBORVdGVFAKLXN0YXRpYyBjaGFyICpobXh5Z3ByW10gPSB7Ci0iU3ludGF4OiBTRVQgR0VU LVBVVC1SRU1PVEUgeyBBVVRPLCBGVFAsIEtFUk1JVH0iLAotIiAgVGVsbHMgS2VybWl0IHdoZXRo ZXIgR0VULCBQVVQsIGFuZCBSRU1PVEUgY29tbWFuZHMgc2hvdWxkIGJlIGRpcmVjdGVkIiwKLSIg IGF0IGEgS2VybWl0IHNlcnZlciBvciBhbiBGVFAgc2VydmVyLiAgVGhlIGRlZmF1bHQgaXMgQVVU TywgbWVhbmluZyB0aGF0IiwKLSIgIGlmIHlvdSBoYXZlIG9ubHkgb25lIGFjdGl2ZSBjb25uZWN0 aW9uLCB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uIGlzIHRha2VuIiwKLSIgIHdoZW4geW91IGdpdmUg YSBHRVQsIFBVVCwgb3IgUkVNT1RFIGNvbW1hbmQuICBTRVQgR0VULVBVVC1SRU1PVEUgRlRQIGZv cmNlcyIKLSwKLSIgIEtlcm1pdCB0byB0cmVhdCBHRVQsIFBVVCwgYW5kIFJFTU9URSBhcyBGVFAg Y2xpZW50IGNvbW1hbmRzOyBzZXR0aW5nIHRoaXMiLAotIiAgdG8gS0VSTUlUIGZvcmNlcyB0aGVz ZSBjb21tYW5kcyB0byBiZSB0cmVhdGVkIGFzIEtlcm1pdCBjbGllbnQgY29tbWFuZHMuIiwKLSIg IE5PVEU6IFBVVCBpbmNsdWRlcyBTRU5ELCBNUFVULCBNU0VORCwgYW5kIGFsbCBvdGhlciBzaW1p bGFyIGNvbW1hbmRzLiIsCi0iICBBbHNvIHNlZSBIRUxQIFJFTU9URSwgSEVMUCBTRVQgTE9DVVMs IEhFTFAgRlRQLiIsCi0iIgotfTsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotI2lmZGVmIExPQ1VT Ci1zdGF0aWMgY2hhciAqaG14eWxvY3VzW10gPSB7Ci0jaWZkZWYgS1VJCi0iU3ludGF4OiBTRVQg TE9DVVMgeyBBU0ssIEFVVE8sIExPQ0FMLCBSRU1PVEUgfSIsCi0jZWxzZQotIlN5bnRheDogU0VU IExPQ1VTIHsgQVVUTywgTE9DQUwsIFJFTU9URSB9IiwKLSNlbmRpZiAvKiBLVUkgKi8KLSIgIFNw ZWNpZmllcyB3aGV0aGVyIHVucHJlZml4ZWQgZmlsZSBtYW5hZ2VtZW50IGNvbW1hbmRzIHNob3Vs ZCBvcGVyYXRlIiwKLSIgIGxvY2FsbHkgb3IgKHdoZW4gdGhlcmUgaXMgYSBjb25uZWN0aW9uIHRv IGEgcmVtb3RlIEZUUCBvciBLZXJtaXQiLAotIiAgc2VydmVyKSBzZW50IHRvIHRoZSBzZXJ2ZXIu ICBUaGUgYWZmZWN0ZWQgY29tbWFuZHMgYXJlOiBDRCAoQ1dEKSwgUFdELCIsCi0iICBDRFVQLCBE SVJFQ1RPUlksIERFTEVURSwgUkVOQU1FLCBNS0RJUiwgYW5kIFJNRElSLiAgVG8gZm9yY2UgYW55 IG9mIiwKLSIgIHRoZXNlIGNvbW1hbmRzIHRvIGJlIGV4ZWN1dGVkIGxvY2FsbHksIGdpdmUgaXQg YW4gTC1wcmVmaXg6IExDRCwgTERJUiwiLAotIiAgZXRjLiAgVG8gZm9yY2UgcmVtb3RlIGV4ZWN1 dGlvbiwgdXNlIHRoZSBSLXByZWZpeDogUkNELCBSRElSLCBhbmQgc28iLAotIiAgb24uICBTSE9X IENPTU1BTkQgc2hvd3MgdGhlIGN1cnJlbnQgTG9jdXMuIiwKLSIgIiwKLSIgIEJ5IGRlZmF1bHQs IHRoZSBMb2N1cyBmb3IgZmlsZSBtYW5hZ2VtZW50IGNvbW1hbmRzIGlzIHN3aXRjaGVkIiwKLSIg IGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgeW91IG1ha2Ugb3IgY2xvc2UgYSBjb25uZWN0aW9uOiBp ZiB5b3UgbWFrZSBhbiIsCi0iICBGVFAgY29ubmVjdGlvbiwgdGhlIExvY3VzIGJlY29tZXMgUkVN T1RFOyBpZiB5b3UgY2xvc2UgYW4gRlRQIGNvbm5lY3Rpb24iLAotIiAgb3IgbWFrZSBhbnkgb3Ro ZXIga2luZCBvZiBjb25uZWN0aW9uLCB0aGUgTG9jdXMgYmVjb21lcyBMT0NBTC4iLAotI2lmZGVm IEtVSQotIiAiLAotIiAgVGhlcmUgYXJlIHR3byBraW5kcyBvZiBhdXRvbWF0aWMgc3dpdGNoaW5n OiBBU0sgKHRoZSBkZWZhdWx0KSB3aGljaCIsCi0iICBhc2tzIHlvdSBpZiBpdCdzIE9LIHRvIHN3 aXRjaCwgYW5kIEFVVE8sIHdoaWNoIHN3aXRjaGVzIHdpdGhvdXQgYXNraW5nLiIsCi0jZW5kaWYg LyogS1VJICovCi0iICIsCi0iICBJZiB5b3UgZ2l2ZSBhIFNFVCBMT0NVUyBMT0NBTCBvciBTRVQg TE9DVVMgUkVNT1RFIGNvbW1hbmQsIHRoaXMgc2V0cyIsCi0iICB0aGUgbG9jdXMgYXMgaW5kaWNh dGVkIGFuZCBkaXNhYmxlcyBhdXRvbWF0aWMgc3dpdGNoaW5nLiIsCi0jaWZkZWYgS1VJCi0iICBT RVQgTE9DVVMgQVVUTyBvciBTRVQgTE9DVVMgQVNLIHJlc3RvcmVzIGF1dG9tYXRpYyBzd2l0Y2hp bmcuIiwKLSIgIFlvdSBjYW4gYWxzbyBjaGFuZ2UgTG9jdXMgc3dpdGNoaW5nIGFuZCBiZWhhdmlv ciBpbiB0aGUgQWN0aW9ucyBtZW51LiIsCi0jZWxzZQotIiAgU0VUIExPQ1VTIEFVVE8gcmVzdG9y ZXMgYXV0b21hdGljIHN3aXRjaGluZy4iLAotI2VuZGlmIC8qIEtVSSAqLwotIiIsCi19OwotI2Vu ZGlmIC8qIExPQ1VTICovCi0KLSNpZmRlZiBVTklYCi0jaWZuZGVmIE5PUFVURU5WCi1zdGF0aWMg Y2hhciAqaG14eHB1dGVudltdID0gewotIlN5bnRheDogUFVURU5WIG5hbWUgdmFsdWUiLAotIiAg Q3JlYXRlcyBvciBtb2RpZmllcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCB0aGUgZ2l2 ZW4gbmFtZSB0byBoYXZlIiwKLSIgIHRoZSBnaXZlbiB2YWx1ZS4gIFB1cnBvc2U6IHRvIHBhc3Mg cGFyYW1ldGVycyB0byBzdWJwcm9jZXNzZXMgd2l0aG91dCIsCi0iICBoYXZpbmcgdGhlbSBhcHBl YXIgb24gdGhlIGNvbW1hbmQgbGluZS4gIElmIHRoZSB2YWx1ZSBpcyBibGFuayAoZW1wdHkpLCIs Ci0iICB0aGUgdmFyaWFibGUgaXMgZGVsZXRlZC4gIFRoZSByZXN1bHQgaXMgdmlzaWJsZSB0byB0 aGlzIGluc3RhbnRpYXRpb24gb2YiLAotIiAgQy1LZXJtaXQgdmlhIFxcJChuYW1lKSBhbmQgdG8g YW55IGluZmVyaW9yIHByb2Nlc3NlcyBieSB3aGF0ZXZlciBtZXRob2QiLAotIiAgdGhleSB1c2Ug dG8gYWNjZXNzIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIFRoZSB2YWx1ZSBtYXkgYmUgZW5jbG9z ZWQgaW4iLAotIiAgZG91YmxlcXVvdGVzIG9yIGJyYWNlcywgYnV0IGl0IG5lZWQgbm90IGJlOyBp ZiBpdCBpcyB0aGUgb3V0ZXJtb3N0IiwKLSIgIGRvdWJsZXF1b3RlcyBvciBicmFjZXMgYXJlIHJl bW92ZWQuIiwKLSIgIiwKLSIgIE5vdGUgdGhlIHN5bnRheDoiLAotIiAgICBQVVRFTlYgbmFtZSB2 YWx1ZSIsCi0iICBub3Q6IiwKLSIgICAgUFVURU5WIG5hbWU9dmFsdWUiLAotIiAiLAotIiAgVGhl cmUgaXMgbm8gZXF1YWwgc2lnbiBiZXR3ZWVuIG5hbWUgYW5kIHZhbHVlLCBhbmQgdGhlIG5hbWUg aXRzZWxmIG1heSIsCi0iICBub3QgaW5jbHVkZSBhbiBlcXVhbCBzaWduLiIsCi0iIiwKLX07Ci0j ZW5kaWYJLyogTk9QVVRFTlYgKi8KLSNlbmRpZgkvKiBVTklYICovCi0KLXN0YXRpYyBjaGFyICpo bXh4dGFrW10gPSB7Ci0iU3ludGF4OiBUQUtFIGZpbGVuYW1lIFsgYXJndW1lbnRzIF0iLAotIiAg VGVsbHMgS2VybWl0IHRvIGV4ZWN1dGUgY29tbWFuZHMgZnJvbSB0aGUgbmFtZWQgZmlsZS4gIE9w dGlvbmFsIGFyZ3VtZW50IiwKLSIgIHdvcmRzLCBhcmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0 byB0aGUgbWFjcm8gYXJndW1lbnQgdmFyaWFibGVzIFxcJTEiLAotIiAgdGhyb3VnaCBcXCU5LiAg S2VybWl0IGNvbW1hbmQgZmlsZXMgbWF5IHRoZW1zZWx2ZXMgY29udGFpbiBUQUtFIGNvbW1hbmRz LCIsCi0iICB1cCB0byBhbnkgcmVhc29uYWJsZSBkZXB0aCBvZiBuZXN0aW5nLiIsCi0iIgotfTsK LQotI2lmZGVmIFRDUFNPQ0tFVAotc3RhdGljIGNoYXIgKmhteHhmaXJld1tdID0gewotI2lmZGVm IE9TMgotIkZpcmV3YWxsIFRyYXZlcnNhbCBpbiBLZXJtaXQgOTUiLAotI2Vsc2UKLSJGaXJld2Fs bCBUcmF2ZXJzYWwgaW4gQy1LZXJtaXQiLAotI2VuZGlmCi0iICIsCi0jaWZuZGVmIE5FV0ZUUAot I2lmbmRlZiBDS0hUVFAKLSNpZm5kZWYgQ0tfU09DS1MKLSNkZWZpbmUgTk9GSVJFV0FMTAotI2Vu ZGlmCi0jZW5kaWYKLSNlbmRpZgotI2lmZGVmIE5PRklSRVdBTEwKLSJUaGlzIHZlcnNpb24gb2Yg S2VybWl0IHdhcyBidWlsdCB3aXRoIG5vIHN1cHBvcnQgZm9yIGZpcmV3YWxsIHRyYXZlcnNhbCIs Ci0icHJvdG9jb2xzLiAgS2VybWl0IGNhbiBiZSBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIEhUVFAg UHJveHkgU2VydmVycywiLAotIlNPQ0tTIGF1dGhvcml6ZWQgZmlyZXdhbGwgdHJhdmVyc2FsLCBh bmQgRlRQIFBhc3NpdmUgY29ubmVjdGlvbiBtb2Rlcy4iLAotIiAiLAotI2Vsc2UgLyogTk9GSVJF V0FMTCAqLwotI2lmZGVmIENLSFRUUAotIlRoZSBzaW1wbGlzdCBmb3JtIG9mIGZpcmV3YWxsIHRy YXZlcnNhbCBpcyB0aGUgSFRUUCBDT05ORUNUIGNvbW1hbmQuIFRoZSIsCi0iQ09OTkVDVCBjb21t YW5kIHdhcyBpbXBsZW1lbnRlZCB0byBhbGxvdyBhIHB1YmxpYyB3ZWIgc2VydmVyIHdoaWNoIHVz dWFsbHkiLAotInJlc2lkZXMgb24gdGhlIGJvdW5kYXJ5IGJldHdlZW4gdGhlIHB1YmxpYyBhbmQg cHJpdmF0ZSBuZXR3b3JrcyB0byBmb3J3YXJkIiwKLSJIVFRQIHJlcXVlc3RzIGZyb20gY2xpZW50 cyBvbiB0aGUgcHJpdmF0ZSBuZXR3b3JrIHRvIHB1YmxpYyB3ZWIgc2l0ZXMuICBUbyIsCi0iYWxs b3cgc2VjdXJlIHdlYiBjb25uZWN0aW9ucywgdGhlIEhUVFAgQ09OTkVDVCBjb21tYW5kIGF1dGhl bnRpY2F0ZXMgdGhlIiwKLSJjbGllbnQgd2l0aCBhIHVzZXJuYW1lL3Bhc3N3b3JkIGFuZCB0aGVu IGVzdGFibGlzaGVzIGEgdHVubmVsIHRvIHRoZSIsCi0iZGVzaXJlZCBob3N0LiIsCi0KLSIgIiwK LQotIldlYiBzZXJ2ZXJzIHRoYXQgc3VwcG9ydCB0aGUgQ09OTkVDVCBjb21tYW5kIGNhbiBiZSBj b25maWd1cmVkIHRvIGFsbG93IiwKLSJvdXRib3VuZCBjb25uZWN0aW9ucyBmb3IgYXV0aGVudGlj YXRlZCB1c2VycyB0byBhbnkgVENQL0lQIGhvc3RuYW1lLXBvcnQiLAotImNvbWJpbmF0aW9uIGFj Y2Vzc2libGUgdG8gdGhlIFdlYiBzZXJ2ZXIuICBIVFRQIENPTk5FQ1QgY2FuIGJlIHVzZWQgb25s eSIsCi0id2l0aCBUQ1AtYmFzZWQgcHJvdG9jb2xzLiAgUHJvdG9jb2xzIHN1Y2ggYXMgS2VyYmVy b3MgYXV0aGVudGljYXRpb24gdGhhdCIsCi0idXNlIFVEUC9JUCBjYW5ub3QgYmUgdHVubmVsZWQg dXNpbmcgSFRUUCBDT05ORUNULiIsCi0KLSIgIiwKLQotIlNFVCBUQ1AgSFRUUC1QUk9YWSBbc3dp dGNoZXNdIFs8aG9zdG5hbWUgb3IgaXAtYWRkcmVzcz5bOjxwb3J0Pl1dIiwKLSIgIElmIGEgaG9z dG5hbWUgb3IgaXAtYWRkcmVzcyBpcyBzcGVjaWZpZWQsIEtlcm1pdCB1c2VzIHRoZSBnaXZlbiIs Ci0iICBwcm94eSBzZXJ2ZXIgd2hlbiBhdHRlbXB0aW5nIG91dGdvaW5nIFRDUCBjb25uZWN0aW9u cy4gIElmIG5vIGhvc3RuYW1lciIsCi0iICBvciBpcC1hZGRyZXNzIGlzIHNwZWNpZmllZCwgYW55 IHByZXZpb3VzbHkgc3BlY2lmaWVkIFByb3h5IHNlcnZlciBpcyIsCi0iICByZW1vdmVkLiAgSWYg bm8gcG9ydCBudW1iZXIgaXMgc3BlY2lmaWVkLCB0aGUgXCJodHRwXCIgc2VydmljZSBpcyB1c2Vk LiIsCi0iICBbc3dpdGNoZXNdIGNhbiBiZSBvbmUgb3IgbW9yZSBvZjoiLAotIiAgICAgL0FHRU5U OjxhZ2VudD4gL1VTRVI6PHVzZXI+IC9QQVNTV09SRDo8cGFzc3dvcmQ+IiwKLSIgIFN3aXRjaCBw YXJhbWV0ZXJzIGFyZSB1c2VkIHdoZW4gY29ubmVjdGluZyB0byB0aGUgcHJveHkgc2VydmVyIGFu ZCIsCi0iICBvdmVycmlkZSBhbnkgb3RoZXIgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29u bmVjdGlvbi4iLAotIiAiLAotCi0jZW5kaWYgLyogQ0tIVFRQICovCi0jaWZkZWYgQ0tfU09DS1MK LQotIkluIHRoZSBlYXJseSAxOTkwcyBhcyBmaXJld2FsbHMgd2VyZSBiZWNvbWluZyBwcmV2YWxl bnQsIERhdmlkIEtvYmxhcyIsCi0iZGV2ZWxvcGVkIHRoZSBTT0NLUyBwcm90b2NvbCBmb3IgVENQ L0lQIGZpcmV3YWxsIHRyYXZlcnNhbC4gIFR3byB2ZXJzaW9ucyIsCi0ib2YgU09DS1MgYXJlIGN1 cnJlbnRseSBpbiB1c2U6IFZlcnNpb24gNC4yIGxldHMgVENQL0lQIGNsaWVudCBhcHBsaWNhdGlv bnMiLAotInRyYXZlcnNlIGZpcmV3YWxscywgc2ltaWxhciB0byBIVFRQIENPTk5FQ1QsIGV4Y2Vw dCB0aGF0IHRoZSBTT0NLUyBjbGllbnQiLAotImlzIGF3YXJlIG9mIHRoZSBwdWJsaWMgc291cmNl IElQIGFkZHJlc3MgYW5kIHBvcnQsIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGhpbiIsCi0idGhlIGFw cGxpY2F0aW9uIHByb3RvY29sIHRvIGFzc2lzdCBpbiBzZWN1cmluZyB0aGUgY29ubmVjdGlvbiAo ZS5nLiBGVFAiLAotInNlc3Npb25zIHNlY3VyZWQgd2l0aCBHU1NBUEkgS2VyYmVyb3MgNSkuIiwK LQotIiAiLAotCi0iSW4gMTk5NSB0aGUgSUVURiBpc3N1ZWQgU09DS1MgUHJvdG9jb2wgVmVyc2lv biA1IChSRkMgMTkyOCksIHdoaWNoIGlzIiwKLSJzaWduaWZpY2FudGx5IG1vcmUgZ2VuZXJhbCB0 aGFuIHZlcnNpb24gNC4gIEJlc2lkZXMgc3VwcG9ydGluZyBjbGllbnQtIiwKLSJ0by1zZXJ2ZXIg VENQL0lQIGNvbm5lY3Rpb25zLCBpdCBhbHNvIGluY2x1ZGVzOiIsCi0KLSIgIiwKLSIgLiBBdXRo ZW50aWNhdGVkIGZpcmV3YWxsIHRyYXZlcnNhbCBvZiBVRFAvSVAgcGFja2V0cy4iLAotIiAuIEF1 dGhlbnRpY2F0ZWQgYmluZGluZyBvZiBpbmNvbWluZyBwdWJsaWMgcG9ydHMgb24gdGhlIGZpcmV3 YWxsLiIsCi0iICIsCi0KLSJUaGlzIGxldHMgYSBzZXJ2aWNlIG9uIHRoZSBwcml2YXRlIG5ldHdv cmsgb2ZmZXIgcHVibGljIHNlcnZpY2VzLiAgSXQgYWxzbyIsCi0ibGV0cyBjbGllbnQgYXBwbGlj YXRpb25zIGxpa2UgRlRQIGVzdGFibGlzaCBhIHRlbXBvcmFyeSBwdWJsaWMgcHJlc2VuY2UiLAot InRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIEZUUCBzZXJ2ZXIgdG8gY3JlYXRlIGEgZGF0YSBjaGFu bmVsLiAgQnkgYWxsb3dpbmciLAotInRoZSBjbGllbnQgdG8gYmluZCB0byBhIHB1YmxpYyBwb3J0 IG9uIHRoZSBmaXJld2FsbCBhbmQgYmUgYXdhcmUgb2YgdGhlIiwKLSJwdWJsaWMgYWRkcmVzcywg U09DS1MgNSBsZXRzIHRoZSBhcHBsaWNhdGlvbiBwcm90b2NvbCBjb21tdW5pY2F0ZSB0aGlzIiwK LSJpbmZvcm1hdGlvbiB0byB0aGUgc2VydmVyLiIsCi0KLSIgIiwKLQotI2lmZGVmIE9TMgotI2lm ZGVmIE5UCi0iS2VybWl0IDk1IHN1cHBvcnRzIFNPQ0tTIDQuMi4gIFRoZSBTT0NLUyBTZXJ2ZXIg aXMgc3BlY2lmaWVkIHdpdGg6IiwKLSIgIiwKLSIgIFNFVCBUQ1AgU09DS1MtU0VSVkVSIGhvc3Ru YW1lL2lwLWFkZHJlc3MiLAotIiAiLAotIlRoZSBTT0NLUy5DT05GIGZpbGUgaXMgZm91bmQgYnkg ZXhhbWluaW5nIHRoZSBFVEMgZW52aXJvbm1lbnQgdmFyaWFibGU7IiwKLSJzZWFyY2hpbmcgaW4g XFxXSU5ET1dTIG9uIFdpbmRvd3MgOTUvOTgvTUU7IG9yIHRoZSIsCi0iXFxXSU5ET1dTXFxTWVNU RU1cXERSSVZFUlNcXEVUQyBkaXJlY3Rvcnkgb24gTlRcXDIwMDBcXFhQIHN5c3RlbXMuIiwKLQot I2Vsc2UgLyogTlQgKi8KLQotIktlcm1pdC8yIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFNPQ0tTIDQu MiBzZXJ2ZXJzIHdoZW4gdXNpbmcgSUJNIFRDUC9JUCAyLjAsIiwKLSJJQk0gT1MvMiBXQVJQLCBv ciBhIGNvbXBhdGlibGUgcHJvdG9jb2wgc3RhY2suIFNPQ0tTIGlzIG9uZSBwb3B1bGFyIG1lYW5z IiwKLSJvZiBpbXBsZW1lbnRpbmcgYSBmaXJld2FsbCBiZXR3ZWVuIGEgcHJpdmF0ZSBuZXR3b3Jr IGFuZCB0aGUgSW50ZXJuZXQuIiwKLSIgIiwKLSJLZXJtaXQvMiBzaGFyZXMgdGhlIHNhbWUgU09D S1MgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFzIElCTSBHb3BoZXIuIEl0IGFsc28iLAotInN1cHBv cnRzIHRoZSB1c2Ugb2YgbG9jYWwgU09DS1MgY29uZmlndXJhdGlvbiBmaWxlcy4iLAotIiAiLAot IlRvIHNwZWNpZnkgdGhlIGRlZmF1bHQgU09DS1MgU2VydmVyLCBhZGQgU0VUIFNPQ0tTX1NFUlZF Uj0gdG8geW91ciIsCi0iQ09ORklHLlNZUyBmaWxlLiIsCi0iICIsCi0iSWYgeW91IG11c3QgdXNl IGEgU09DS1MgRGlzdHJpYnV0ZWQgTmFtZSBTZXJ2ZXIsIGFkZCBTRVQgU09DS1NfTlM9IHRvIHlv dXIiLAotIkNPTkZJRy5TWVMgZmlsZS4iLAotIiAiLAotCi0iSWYgeW91IG11c3QgdXNlIGEgc3Bl Y2lmaWMgd2l0aCB5b3VyIFNPQ0tTIHNlcnZlciwgYmUgc3VyZSB0byBhZGQgU0VUIFVTRVI9IiwK LSJ0byB5b3VyIENPTkZJRy5TWVMgZmlsZS4gT3RoZXJ3aXNlLCBcIm9zMnVzZXJcIiBpcyB1c2Vk IGJ5IGRlZmF1bHQuIiwKLQotIiAiLAotCi0iVGhlIFNPQ0tTIGNvbmZpZ3VyYXRpb24gZmlsZSBt dXN0IGJlIHBsYWNlZCBpbiB0aGUgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkiLAotInRoZSBFVEMg ZW52aXJvbm1lbnQgdmFyaWFibGUgYXMgZGVjbGFyZWQgaW4geW91ciBDT05GSUcuU1lTIGZpbGUu IFRoZSBuYW1lIiwKLSJzaG91bGQgYmUgU09DS1MuQ09ORi4gT24gYSBGQVQgZmlsZSBzeXN0ZW0s IHVzZSBTT0NLUy5DTkYuIiwKLQotIiAiLAotIlRoZSBmb3JtYXQgb2YgdGhlIGxpbmVzIGluIHRo ZSBTT0NLUyBjb25maWd1cmF0aW9uIGZpbGUgYXJlIGFzIGZvbGxvd3M6IiwKLSIgIiwKLSIgLiAj IGNvbW1lbnRzIiwKLSIgLiBkZW55IFsqPXVzZXJsaXN0XSBkc3RfYWRkciBkc3RfbWFzayBbb3Ag cG9ydF0iLAotIiAuIGRpcmVjdCBbKj11c2VybGlzdF0gZHN0X2FkZHIgZHN0X21hc2sgW29wIHBv cnRdIiwKLSIgLiBzb2NrZCBbQD1zZXJ2ZXJsaXN0XSBbKj11c2VybGlzdF0gZHN0X2FkZHIgZHN0 X21hc2sgW29wIHBvcnRdIiwKLSIgIiwKLQotIm9wIG11c3QgYmUgb25lIG9mICdlcScsICduZXEn LCAnbHQnLCAnZ3QnLCAnbGUnLCBvciAnZ2UnLiBkc3RfYWRkciwiLAotImRzdF9tYXNrLCBhbmQg cG9ydCBtYXkgYmUgZWl0aGVyIG51bWVyaWMgb3IgbmFtZSBlcXVpdmFsZW50cy4iLAotCi0iICIs Ci0KLSJLZXJtaXQvMiBpZ25vcmVzIHRoZSBbKj11c2VybGlzdF0gYW5kIFtAPXNlcnZlcmxpc3Rd IGZpZWxkcy4gTWF0Y2hlcyBhcmUiLAotImRldGVybWluZWQgb24gYSBmaXJzdCBtYXRjaCBub3Qg YSBiZXN0IG1hdGNoIGJhc2lzLiBBZGRyZXNzZXMgZm9yIHdoaWNoIG5vIiwKLSJtYXRjaCBpcyBm b3VuZCBkZWZhdWx0IHRvIFwic29ja2RcIi4iLAotCi0iICIsCi0KLSJGb3IgY29tcGxldGVuZXNz OiBGaWVsZHMgaW4gc3F1YXJlIGJyYWNrZXRzIGFyZSBvcHRpb25hbC4gVGhlIG9wdGlvbmFsIiwK LSJAPXNlcnZlcmxpc3QgZmllbGQgd2l0aCBhICdzb2NrZCcgbGluZSBzcGVjaWZpZXMgdGhlIGxp c3Qgb2YgU09DS1Mgc2VydmVycyIsCi0idGhlIGNsaWVudCBzaG91bGQgdHJ5IChpbiB0aGUgZ2l2 ZW4gb3JkZXIpIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgU09DS1MiLAotInNlcnZlci4gSWYgdGhl IEA9c2VydmVybGlzdCBwYXJ0IGlzIG9taXR0ZWQsIHRoZW4gdGhlIGRlZmF1bHQgU09DS1Mgc2Vy dmVyIiwKLSJpcyB1c2VkLiAgQ29tbWFzIGFyZSB1c2VkIGluIHRoZSB1c2VybGlzdCBhbmQgc2Vy dmVybGlzdCBhcyBzZXBhcmF0b3JzLCBubyIsCi0id2hpdGUgc3BhY2VzIGFyZSBhbGxvd2VkLiIs Ci0KLSNlbmRpZiAvKiBOVCAqLwotCi0iICIsCi0KLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVmIENL X1NPQ0tTNQotIlRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdCBzdXBwb3J0cyBTT0NLUyB2ZXJzaW9u IDUuIiwKLSNlbHNlIC8qIENLX1NPQ0tTNSAqLwotIlRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdCBz dXBwb3J0cyBTT0NLUyB2ZXJzaW9uIDQuIiwKLSNlbmRpZiAvKiBDS19TT0NLUzUgKi8KLQotIlNl ZSB0aGUgbWFuIHBhZ2UgKG9yIG90aGVyIHN5c3RlbSBkb2N1bWVudGF0aW9uKSBmb3IgaW5mb3Jt YXRpb24gb24iLAotImNvbmZpZ3VyaW5nIHRoZSBTT0NLUyBsaWJyYXJ5IHZpYSB0aGUgL2V0Yy9z b2Nrcy5jb25mIGZpbGUuIiwKLQotI2VuZGlmIC8qIE9TMiAqLwotIiAiLAotI2VuZGlmIC8qIENL X1NPQ0tTICovCi0KLSNpZmRlZiBORVdGVFAKLQotIkZUUCBpcyBvbmUgb2YgdGhlIGZldyB3ZWxs LWtub3duIEludGVybmV0IHNlcnZpY2VzIHRoYXQgcmVxdWlyZXMiLAotIm11bHRpcGxlIGNvbm5l Y3Rpb25zLiAgQXMgZGVzY3JpYmVkIGFib3ZlLCBGVFAgb3JpZ2luYWxseSByZXF1aXJlZCB0aGUi LAotInNlcnZlciB0byBlc3RhYmxpc2ggdGhlIGRhdGEgY29ubmVjdGlvbiB0byB0aGUgY2xpZW50 IHVzaW5nIGEgZGVzdGluYXRpb24iLAotImFkZHJlc3MgYW5kIHBvcnQgcHJvdmlkZWQgYnkgdGhl IGNsaWVudC4gIFRoaXMgZG9lc24ndCB3b3JrIHdpdGggcG9ydCIsCi0iZmlsdGVyaW5nIGZpcmV3 YWxscy4iLAotCi0iICIsCi0KLSJMYXRlciwgRlRQIHByb3RvY29sIGFkZGVkIGEgXCJwYXNzaXZl XCIgbW9kZSwgaW4gd2hpY2ggY29ubmVjdGlvbnMgZm9yIiwKLSJ0aGUgZGF0YSBjaGFubmVscyBh cmUgY3JlYXRlZCBpbiB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24uICBJbnN0ZWFkIG9mIHRoZSIsCi0i c2VydmVyIGVzdGFibGlzaGluZyBhIGNvbm5lY3Rpb24gdG8gdGhlIGNsaWVudCwgdGhlIGNsaWVu dCBtYWtlcyBhIHNlY29uZCIsCi0iY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgYXMgdGhlIGRl c3RpbmF0aW9uLiAgVGhpcyB3b3JrcyBqdXN0IGZpbmUgYXMiLAotImxvbmcgYXMgdGhlIGNsaWVu dCBpcyBiZWhpbmQgdGhlIGZpcmV3YWxsIGFuZCB0aGUgc2VydmVyIGlzIGluIHB1YmxpYyIsCi0i YWRkcmVzcyBzcGFjZS4gIElmIHRoZSBzZXJ2ZXIgaXMgYmVoaW5kIGEgZmlyZXdhbGwgdGhlbiB0 aGUgdHJhZGl0aW9uYWwiLAotImFjdGl2ZSBtb2RlIG11c3QgYmUgdXNlZC4gIElmIGJvdGggdGhl IGNsaWVudCBhbmQgc2VydmVyIGFyZSBiZWhpbmQgdGhlaXIiLAotIm93biBwb3J0IGZpbHRlcmlu ZyBmaXJld2FsbHMgdGhlbiBkYXRhIGNoYW5uZWxzIGNhbm5vdCBiZSBlc3RhYmxpc2hlZC4iLAot Ci0iICIsCi0KLSJJbiBLZXJtaXQncyBGVFAgY2xpZW50LCBwYXNzaXZlIG1vZGUgaXMgY29udHJv bGxlZCB3aXRoIHRoZSBjb21tYW5kOiIsCi0KLSIgIiwKLSIgIFNFVCBGVFAgUEFTU0lWRS1NT0RF IHsgT04sIE9GRiB9IiwKLSIgIiwKLQotIlRoZSBkZWZhdWx0IGlzIE9OLCBtZWFuaW5nIHRvIHVz ZSBwYXNzaXZlIG1vZGUuIiwKLQotI2VuZGlmIC8qIE5FV0ZUUCAqLwotI2VuZGlmIC8qIE5PRklS RVdBTEwgKi8KLQotIiIKLX07Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLXN0YXRpYyBjaGFy ICpobXh4c2F2ZVtdID0gewotIlN5bnRheDogU0FWRSBpdGVtIGZpbGVuYW1lIHsgTkVXLCBBUFBF TkQgfSIsCi0iICBTYXZlcyB0aGUgcmVxdWVzdGVkIG1hdGVyaWFsIGluIHRoZSBnaXZlbiBmaWxl LiAgQSBuZXcgZmlsZSBpcyBjcmVhdGVkIiwKLSIgIGJ5IGRlZmF1bHQ7IGluY2x1ZGUgQVBQRU5E IGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQgdG8gYXBwZW5kIHRvIGFuIiwKLSIgIGV4aXN0aW5n IGZpbGUuICBJdGVtczoiLAotI2lmbmRlZiBOT1NFVEtFWQotIiAgICBLRVlNQVAgICAgICAgICAg ICAgICBTYXZlcyB0aGUgY3VycmVudCBrZXkgc2V0dGluZ3MuIiwKLSNlbmRpZiAvKiBOT1NFVEtF WSAqLwotI2lmZGVmIENLX1JFQ0FMTAotIiAgICBDT01NQU5EIEhJU1RPUlkgICAgICBTYXZlcyB0 aGUgY3VycmVudCBjb21tYW5kIHJlY2FsbCAoaGlzdG9yeSkgYnVmZmVyIiwKLSNlbmRpZiAvKiBD S19SRUNBTEwgKi8KLSNpZmRlZiBPUzIKLSIgICAgQ09NTUFORCBTQ1JPTExCQUNLICAgU2F2ZXMg dGhlIGN1cnJlbnQgY29tbWFuZC1zY3JlZW4gc2Nyb2xsYmFjayBidWZmZXIiLAotIiAgICBURVJN SU5BTCBTQ1JPTExCQUNLICBTYXZlcyB0aGUgY3VycmVudCB0ZXJtaW5hbC1zY3JlZW4gc2Nyb2xs YmFjayBidWZmZXIiLAotI2VuZGlmIC8qIE9TMiAqLwotIiIKLX07Ci0KLSNpZmRlZiBDS1JPT1QK LXN0YXRpYyBjaGFyICpobXh4Y2hyb290W10gPSB7Ci0iU3ludGF4OiBTRVQgUk9PVCBkaXJlY3Rv cnluYW1lIiwKLSIgIFNldHMgdGhlIHJvb3QgZm9yIGZpbGUgYWNjZXNzIHRvIHRoZSBnaXZlbiBk aXJlY3RvcnkgYW5kIGRpc2FibGVzIGFjY2VzcyIsCi0iICB0byBzeXN0ZW0gYW5kIHNoZWxsIGNv bW1hbmRzIGFuZCBleHRlcm5hbCBwcm9ncmFtcy4gIE9uY2UgdGhpcyBjb21tYW5kIiwKLSIgIGlz IGdpdmVuLCBubyBmaWxlcyBvciBkaXJlY3RvcmllcyBvdXRzaWRlIHRoZSB0cmVlIHJvb3RlZCBi eSB0aGUgZ2l2ZW4iLAotIiAgZGlyZWN0b3J5IGNhbiBiZSBvcGVuZWQsIHJlYWQsIGxpc3RlZCwg ZGVsZXRlZCwgcmVuYW1lZCwgb3IgYWNjZXNzZWQgaW4iLAotIiAgYW55IG90aGVyIHdheS4gIFRo aXMgY29tbWFuZCBjYW4gbm90IGJlIHVuZG9uZSBieSBhIHN1YnNlcXVlbnQgU0VUIFJPT1QiLAot IiAgY29tbWFuZC4gIFByaW1hcmlseSBmb3IgdXNlIHdpdGggc2VydmVyIG1vZGUsIHRvIHJlc3Ry aWN0IGFjY2VzcyBvZiIsCi0iICBjbGllbnRzIHRvIGEgcGFydGljdWxhciBkaXJlY3RvcnkgdHJl ZS4gIFN5bm9ueW06IENIUk9PVC4iLAotIiIKLX07Ci0jZW5kaWYgLyogQ0tST09UICovCi0KLXN0 YXRpYyBjaGFyICpobXh4c2NybltdID0gewotIlN5bnRheDogU0NSRUVOIHsgQ0xFQVIsIENMRU9M LCBNT1ZFIHJvdyBjb2x1bW4gfSIsCi0jaWZkZWYgT1MyCi0iICBQZXJmb3JtcyBzY3JlZW4tZm9y bWF0dGluZyBhY3Rpb25zLiIsCi0jZWxzZQotIiAgUGVyZm9ybXMgc2NyZWVuLWZvcm1hdHRpbmcg YWN0aW9ucy4gIENvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZXNlIGNvbW1hbmRzIiwKLSIgIGRlcGVu ZHMgb24gcHJvcGVyIHRlcm1pbmFsIHNldHVwIG9uIGJvdGggZW5kcyBvZiB0aGUgY29ubmVjdGlv biAtLSBtYWlubHkiLAotIiAgdGhhdCB0aGUgaG9zdCB0ZXJtaW5hbCB0eXBlIGlzIHNldCB0byBh Z3JlZSB3aXRoIHRoZSBraW5kIG9mIHRlcm1pbmFsIG9yIiwKLSIgIHRoZSBlbXVsYXRpb24geW91 IGFyZSB2aWV3aW5nIEMtS2VybWl0IHRocm91Z2guIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIgIiwK LSJTQ1JFRU4gQ0xFQVIiLAotIiAgTW92ZXMgdGhlIGN1cnNvciB0byBob21lIHBvc2l0aW9uIGFu ZCBjbGVhcnMgdGhlIGVudGlyZSBzY3JlZW4uIiwKLSNpZmRlZiBPUzIKLSIgIFN5bm9ueW1zOiBD TFMsIENMRUFSIFNDUkVFTiwgQ0xFQVIgQ09NTUFORC1TQ1JFRU4gQUxMIiwKLSNlbHNlCi0iICBT eW5vbnltczogQ0xTLCBDTEVBUiBTQ1JFRU4uIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIgIiwKLSJT Q1JFRU4gQ0xFT0wiLAotIiAgQ2xlYXJzIGZyb20gdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9u IHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIiwKLSNpZmRlZiBPUzIKLSIgIFN5bm9ueW06IENMRUFS IENPTU1BTkQtU0NSRUVOIEVPTCIsCi0jZW5kaWYgLyogT1MyICovCi0iICIsCi0iU0NSRUVOIE1P VkUgcm93IGNvbHVtbiIsCi0iICBNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBpbmRpY2F0ZWQgcm93 IGFuZCBjb2x1bW4uICBUaGUgcm93IGFuZCBjb2x1bW4iLAotIiAgbnVtYmVycyBhcmUgMS1iYXNl ZCBzbyBvbiBhIDI0eDgwIHNjcmVlbiwgdGhlIGhvbWUgcG9zaXRpb24gaXMgMSAxIGFuZCIsCi0i ICB0aGUgbG93ZXIgcmlnaHQgY29ybmVyIGlzIDI0IDgwLiAgSWYgYSByb3cgb3IgY29sdW1uIG51 bWJlciBpcyBnaXZlbiB0aGF0IiwKLSIgIHRvbyBsYXJnZSBmb3Igd2hhdCBLZXJtaXQgb3IgdGhl IG9wZXJhdGluZyBzeXN0ZW0gdGhpbmtzIGlzIHlvdXIgc2NyZWVuIiwKLSIgIHNpemUsIHRoZSBh cHByb3ByaWF0ZSBudW1iZXIgaXMgc3Vic3RpdHV0ZWQuIiwKLSIgIiwKLSJBbHNvIHNlZToiLAot I2lmZGVmIE9TMgotIiAgSEVMUCBGVU5DVElPTiBTQ1JOQ1VSWCwgSEVMUCBGVU5DVElPTiBTQ1JO Q1VSWSwgSEVMUCBGVU5DVElPTiBTQ1JTVFIsIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIgIFNIT1cg VkFSSUFCTEUgVEVSTUlOQUwsIFNIT1cgVkFSSUFCTEUgQ09MUywgU0hPVyBWQVIgUk9XUywgU0hP VyBDT01NQU5ELiIsCi0iIgotfTsKLQotI2lmbmRlZiBOT1NQTAotc3RhdGljIGNoYXIgKmhtZndv cmRbXSA9IHsKLSJGdW5jdGlvbiBcXGZ3b3JkKHMxLG4xLHMyLHMzLG4yLG4zKSAtIEV4dHJhY3Rz IGEgd29yZCBmcm9tIGEgc3RyaW5nLiIsCi0iICAgIHMxID0gc291cmNlIHN0cmluZy4iLAotIiAg ICBuMSA9IHdvcmQgbnVtYmVyICgxLWJhc2VkKSBjb3VudGluZyBmcm9tIGxlZnQ7IGlmIG5lZ2F0 aXZlLCBmcm9tIHJpZ2h0LiIsCi0iICAgIHMyID0gb3B0aW9uYWwgYnJlYWsgc2V0LiIsCi0iICAg IHMzID0gb3B0aW9uYWwgaW5jbHVkZSBzZXQgKG9yIEFMTCwgQ1NWLCBvciBUU1YpLiIsCi0iICAg IG4yID0gb3B0aW9uYWwgZ3JvdXBpbmcgbWFzay4iLAotIiAgICBuMyA9IG9wdGlvbmFsIHNlcGFy YXRvciBmbGFnOiIsCi0iICAgICAgIDAgPSBjb2xsYXBzZSBhZGphY2VudCBzZXBhcmF0b3JzOyIs Ci0iICAgICAgIDEgPSBkb24ndCBjb2xsYXBzZSBhZGphY2VudCBzZXBhcmF0b3JzLiIsCi0iICIs Ci0iICBcXGZ3b3JkKCkgcmV0dXJucyB0aGUgbjF0aCBcIndvcmRcIiBvZiB0aGUgc3RyaW5nIHMx LCBhY2NvcmRpbmcgdG8gdGhlIiwKLSIgIGNyaXRlcmlhIHNwZWNpZmllZCBieSB0aGUgb3RoZXIg cGFyYW1ldGVycy4iLAotIiAiLAotIiAgVGhlIEJSRUFLIFNFVCBpcyB0aGUgc2V0IG9mIGFsbCBj aGFyYWN0ZXJzIHRoYXQgc2VwYXJhdGUgd29yZHMuIFRoZSIsCi0iICBkZWZhdWx0IGJyZWFrIHNl dCBpcyBhbGwgY2hhcmFjdGVycyBleGNlcHQgQVNDSUkgbGV0dGVycyBhbmQgZGlnaXRzLiIsCi0i ICBBU0NJSSAoQzApIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgdHJlYXRlZCBhcyBicmVhayBjaGFy YWN0ZXJzIGJ5IGRlZmF1bHQsIiwKLSIgIGFzIGFyZSBzcGFjaW5nIGFuZCBwdW5jdHVhdGlvbiBj aGFyYWN0ZXJzLCBicmFja2V0cywgYW5kIHNvIG9uLCBhbmQiLAotIiAgYWxsIDgtYml0IGNoYXJh Y3RlcnMuIiwKLSIgIiwKLSIgIFRoZSBJTkNMVURFIFNFVCBpcyB0aGUgc2V0IG9mIGNoYXJhY3Rl cnMgdGhhdCBhcmUgdG8gYmUgdHJlYXRlZCBhcyAiLAotIiAgcGFydHMgb2Ygd29yZHMgZXZlbiB0 aG91Z2ggdGhleSBub3JtYWxseSB3b3VsZCBiZSBzZXBhcmF0b3JzLiAgVGhlIiwKLSIgIGRlZmF1 bHQgaW5jbHVkZSBzZXQgaXMgZW1wdHkuICBUaHJlZSBzcGVjaWFsIHN5bWJvbGljIGluY2x1ZGUg c2V0cyBhcmUiLAotIiAgYWxzbyBhbGxvd2VkOiIsCi0iICAgIiwKLSIgICAgQUxMIChtZWFuaW5n IGluY2x1ZGUgYWxsIGJ5dGVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgYnJlYWsgc2V0KSIsCi0iICAg IENTViAoc3BlY2lhbCB0cmVhdG1lbnQgZm9yIENvbW1hLVNlcGFyYXRlZC1WYWx1ZSByZWNvcmRz KSIsCi0iICAgIFRTViAoc3BlY2lhbCB0cmVhdG1lbnQgZm9yIFRhYi1TZXBhcmF0ZWQtVmFsdWUg cmVjb3JkcykiLAotIiAiLAotIiAgRm9yIG9wZXJhdGluZyBvbiA4LWJpdCBjaGFyYWN0ZXIgc2V0 cywgdGhlIGluY2x1ZGUgc2V0IHNob3VsZCBiZSBBTEwuIiwKLSIgIiwKLSIgIElmIHRoZSBHUk9V UElORyBNQVNLIGlzIGdpdmVuIGFuZCBpcyBub256ZXJvLCB3b3JkcyBjYW4gYmUgZ3JvdXBlZCBi eSIsCi0iICBxdW90ZXMgb3IgYnJhY2tldHMgc2VsZWN0ZWQgYnkgdGhlIHN1bSBvZiB0aGUgZm9s bG93aW5nOiIsCi0iICIsCi0iICAgICAxID0gZG91YmxlcXVvdGVzOiAgICBcImEgYiBjXCIiLAot IiAgICAgMiA9IGJyYWNlczogICAgICAgICAge2EgYiBjfSIsCi0iICAgICA0ID0gYXBvc3Ryb3Bo ZXM6ICAgICAnYSBiIGMnIiwKLSIgICAgIDggPSBwYXJlbnRoZXNlczogICAgIChhIGIgYykiLAot IiAgICAxNiA9IHNxdWFyZSBicmFja2V0czogW2EgYiBjXSIsCi0iICAgIDMyID0gYW5nbGUgYnJh Y2tldHM6ICA8YSBiIGM+IiwKLSIgIiwKLSIgIE5lc3RpbmcgaXMgcG9zc2libGUgd2l0aCB7fSgp W108PiBidXQgbm90IHdpdGggcXVvdGVzIG9yIGFwb3N0cm9waGVzLiIsCi0iICIsCi0iUmV0dXJu cyBzdHJpbmc6IiwKLSIgIFdvcmQgbnVtYmVyIG4xLCBpZiB0aGVyZSBpcyBvbmUsIG90aGVyd2lz ZSBhbiBlbXB0eSBzdHJpbmcuIiwKLSIgIiwKLSJBbHNvIHNlZToiLAotIiAgSEVMUCBGVU5DVElP TiBTUExJVCIsCi0iIgotfTsKLQotc3RhdGljIGNoYXIgKmhteHhwcm9tcHRbXSA9IHsKLSJTeW50 YXg6IFBST01QVCBbIHRleHQgXSIsCi0iICBFbnRlcnMgaW50ZXJhY3RpdmUgY29tbWFuZCBsZXZl bCBmcm9tIHdpdGhpbiBhIHNjcmlwdCBpbiBzdWNoIGEgd2F5IHRoYXQiLAotIiAgdGhlIHNjcmlw dCBjYW4gYmUgY29udGludWVkIHdpdGggYW4gRU5EIG9yIFJFVFVSTiBjb21tYW5kLiAgU1RPUCwg RVhJVCwiLAotIiAgU0hPVyBTVEFDSywgVFJBQ0UsIGFuZCBDdHJsLUMgYWxsIGhhdmUgdGhlaXIg bm9ybWFsIGVmZmVjdHMuICBUaGUgUFJPTVBUIiwKLSIgIGNvbW1hbmQgYWxsb3dzIHZhcmlhYmxl cyB0byBiZSBleGFtaW5lZCBvciBjaGFuZ2VkLCBvciBhbnkgb3RoZXIgY29tbWFuZHMiLAotIiAg dG8gYmUgZ2l2ZW4sIGluIGFueSBudW1iZXIsIHByaW9yIHRvIHJldHVybmluZyB0byB0aGUgc2Ny aXB0LCBhbGxvd2luZyIsCi0iICBLZXJtaXQgdG8gc2VydmUgYXMgaXRzIG93biBkZWJ1Z2dlcjsg YWRkaW5nIHRoZSBQUk9NUFQgY29tbWFuZCB0byBhIHNjcmlwdCIsCi0iICBpcyBsaWtlIHNldHRp bmcgYSBicmVha3BvaW50LiAgSWYgdGhlIG9wdGlvbmFsIHRleHQgaXMgaW5jbHVkZWQsIGl0IGlz IiwKLSIgIHVzZWQgYXMgdGhlIG5ldyBwcm9tcHQgZm9yIHRoaXMgbGV2ZWwsIGUuZy4gXCJwcm9t cHQgQnJlYWtwb2ludF8xPlwiLiIsCi0iIgotfTsKLQotc3RhdGljIGNoYXIgKmh4eGlucFtdID0g ewotIlN5bnRheDogIElOUFVUIFsgL0NPVU5UOm4gL0NMRUFSIC9OT01BVENIIC9OT1dSQVAgXSBc Ci17IG51bWJlci1vZi1zZWNvbmRzLCB0aW1lLW9mLWRheSB9IFsgdGV4dCBdIiwKLSIgIiwKLSJF eGFtcGxlczoiLAotIiAgSU5QVVQgNSBMb2dpbjoiLAotIiAgSU5QVVQgMjM6NTk6NTkgUklORyIs Ci0iICBJTlBVVCAvTk9NQVRDSCAxMCIsCi0iICBJTlBVVCAvQ0xFQVIgMTAgXFwxM1xcMTAiLAot IiAgSU5QVVQgL0NMRUFSIDEwIFxcMTNcXDEwJFwzMiIsCi0iICBJTlBVVCAvQ09VTlQ6MjU2IDEw IiwKLSIgIElOUFVUIDEwIFxcZnBhdHRlcm4oPCpAKi4qPikiLAotIiAiLAotIiAgV2FpdHMgdXAg dG8gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzLCBvciB1bnRpbCB0aGUgZ2l2ZW4gdGltZSBv ZiBkYXksIiwKLSIgIGZvciB0aGUgZ2l2ZW4gdGV4dCB0byBhcnJpdmUgb24gdGhlIGNvbm5lY3Rp b24uIEZvciB1c2UgaW4gc2NyaXB0IHByb2dyYW1zIiwKLSIgIHdpdGggSUYgRkFJTFVSRSBvciBJ RiBTVUNDRVNTLCB3aGljaCB0ZWxsIHdoZXRoZXIgdGhlIGRlc2lyZWQgdGV4dCBhcnJpdmVkIiwK LSIgIHdpdGhpbiB0aGUgZ2l2ZW4gYW1vdW50IG9mIHRpbWUuIiwKLSIgIiwKLSIgIFRoZSB0ZXh0 LCBpZiBnaXZlbiwgY2FuIGJlIGEgcmVndWxhciB0ZXh0IG9yIGl0IGNhbiBiZSBhIFxccGF0dGVy bigpIiwKLSIgIGludm9jYXRpb24sIGluIHdoaWNoIGNhc2UgaXQgaXMgdHJlYXRlZCBhcyBhIHBh dHRlcm4gcmF0aGVyIHRoYW4gYSBsaXRlcmFsIiwKLSIgIHN0cmluZyAoSEVMUCBQQVRURVJOUyBm b3IgZGV0YWlscykuIiwKLSIgIiwKLSIgIElmIHRoZSAvQ09VTlQ6IHN3aXRjaCBpcyBpbmNsdWRl ZCwgSU5QVVQgd2FpdHMgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YiLAotIiAgY2hhcmFjdGVycyB0 byBhcnJpdmUuIiwKLSIgIiwKLSIgIElmIG5vIHRleHQgaXMgc3BlY2lmaWVkLCBJTlBVVCB3YWl0 cyBmb3IgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0IGFycml2ZXMiLAotIiAgYW5kIG1ha2VzIGl0 IGF2YWlsYWJsZSBpbiB0aGUgXFx2KGluY2hhcikgdmFyaWFibGUuICBUaGlzIGlzIGVxdWl2YWxl bnQgdG8iLAotIiAgaW5jbHVkaW5nIGEgL0NPVU5UOiBzd2l0Y2ggd2l0aCBhbiBhcmd1bWVudCBv ZiAxLiIsCi0iICIsCi0iICBJZiB0aGUgL05PTUFUQ0ggc3dpdGNoIGlzIGluY2x1ZGVkLCBJTlBV VCBkb2VzIG5vdCBhdHRlbXB0IHRvIG1hdGNoIGFueSIsCi0iICBjaGFyYWN0ZXJzLCBidXQgY29u dGludWVzIHJlYWRpbmcgZnJvbSB0aGUgY29tbXVuaWNhdGlvbiBjb25uZWN0aW9uIHVudGlsIiwK LSIgIHRoZSB0aW1lb3V0IGludGVydmFsIGV4cGlyZXMuICBJZiB0aGUgdGltZW91dCBpbnRlcnZh bCBpcyAwLCB0aGUgSU5QVVQiLAotIiAgY29tbWFuZCBkb2VzIG5vdCB3YWl0OyBpLmUuIHRoZSBn aXZlbiB0ZXh0IG11c3QgYWxyZWFkeSBiZSBhdmFpbGFibGUgZm9yIiwKLSIgIHJlYWRpbmcgZm9y IHRoZSBJTlBVVCBjb21tYW5kIHRvIHN1Y2NlZWQuICBJZiB0aGUgaW50ZXJ2YWwgaXMgbmVnYXRp dmUsIiwKLSIgIHRoZSBJTlBVVCBjb21tYW5kIHdhaXRzIGZvcmV2ZXIuIiwKLSIgIiwKLSIgIFRo ZSBJTlBVVCBidWZmZXIsIFxcdihpbnB1dCksIGlzIG5vcm1hbGx5IGNpcmN1bGFyLiAgSW5jb21p bmcgbWF0ZXJpYWwgaXMiLAotIiAgYXBwZW5kZWQgdG8gaXQgdW50aWwgaXQgcmVhY2hlcyB0aGUg ZW5kLCBhbmQgdGhlbiBpdCB3cmFwcyBhcm91bmQgdG8gdGhlIiwKLSIgIGJlZ2lubmluZy4gIElm IHRoZSAvQ0xFQVIgc3dpdGNoIGlzIGdpdmVuLCBJTlBVVCBjbGVhcnMgaXRzIGJ1ZmZlciBiZWZv cmUiLAotIiAgcmVhZGluZyBmcm9tIHRoZSBjb25uZWN0aW9uLiIsCi0iICIsCi0iICBUeXBpY2Fs IGV4YW1wbGUgb2YgdXNlOiIsCi0iICIsCi0iICAgIElOUFVUIDEwIGxvZ2luOiIsCi0iICAgIElG IEZBSUwgRVhJVCAxIFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGxvZ2luIHByb21wdFwiIiwKLSIg ICAgTElORU9VVCBteXVzZXJpZCIsCi0iICAgIElOUFVUIDEwIFBhc3N3b3JkOiIsCi0iICAgIElG IEZBSUwgRVhJVCAxIFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFBhc3N3b3JkIHByb21wdFwiIiwK LSIgICAgTElORU9VVCB4eHh4eHh4IiwKLSIgIiwKLSIgIFRoZSAvTk9XUkFQIHN3aXRjaCBtZWFu cyB0aGF0IElOUFVUIHNob3VsZCByZXR1cm4gd2l0aCBmYWlsdXJlIHN0YXR1cyIsCi0iICBhbmQg d2l0aCBcXHYoaW5zdGF0dXMpIHNldCB0byA2IGlmIGl0cyBpbnRlcm5hbCBidWZmZXIgZmlsbHMg dXAgYmVmb3JlIiwKLSIgIGFueSBvZiB0aGUgb3RoZXIgY29tcGxldGlvbiBjcml0ZXJpYSBhcmUg bWV0LiAgVGhpcyBhbGxvd3MgZm9yIGNhcHR1cmUiLAotIiAgb2YgdGhlIGNvbXBsZXRlIGluY29t aW5nIGRhdGEgc3RyZWFtIChleGNlcHQgTlVMIGJ5dGVzLCB3aGljaCBhcmUiLAotIiAgZGlzY2Fy ZGVkKS4gIENBVVRJT046IGlmIHRoZSBzZWFyY2ggdGFyZ2V0IChpZiBhbnkpIHNwYW5zIHRoZSBJ TlBVVCBidWZmZXIiLAotIiAgYm91bmRhcnksIElOUFVUIHdpbGwgbm90IHN1Y2NlZWQuIiwKLSIg IiwKLSIgIFwKLVxcdihpbnN0YXR1cykgdmFsdWVzIGFyZTogMCAoc3VjY2VzcyksIDEgKHRpbWVk IG91dCksIDIgKGtleWJvYXJkIGludGVycnVwdCksIiwKLSIgIDMgKGludGVybmFsIGVycm9yKSwg NCAoSS9PIGVycm9yIG9yIGNvbm5lY3Rpb24gbG9zdCksIDUgKElOUFVUIGRpc2FibGVkKSwiLAot IiAgYW5kIDYgKGJ1ZmZlciBmaWxsZWQgYW5kIC9OT1dSQVAgc2V0KTsgdGhlc2UgYXJlIHNob3du IGJ5IFxcdihpbm1lc3NhZ2UpLiIsCi0iICIsCi0iICBBbHNvIHNlZSBPVVRQVVQsIE1JTlBVVCwg UkVJTlBVVCwgU0VUIElOUFVUIGFuZCBDTEVBUi4gIFNlZSBIRUxQIFBBVVNFIGZvciIsCi0iICBk ZXRhaWxzIG9uIHRpbWUtb2YtZGF5IGZvcm1hdCBhbmQgSEVMUCBQQVRURVJOUyBmb3IgcGF0dGVy biBzeW50YXguIiwKLSIifTsKLQotc3RhdGljIGNoYXIgKmh4eG91dFtdID0gewotIlN5bnRheDog T1VUUFVUIHRleHQiLAotIiAgU2VuZHMgdGhlIHRleHQgb3V0IHRoZSBjb21tdW5pY2F0aW9ucyBj b25uZWN0aW9uLCBhcyBpZiB5b3UgaGFkIHR5cGVkIGl0IiwKLSIgIGR1cmluZyBDT05ORUNUIG1v ZGUuICBUaGUgdGV4dCBtYXkgY29udGFpbiBiYWNrc2xhc2ggY29kZXMsIHZhcmlhYmxlcywiLAot IiAgZXRjLCBwbHVzIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBjb2RlczoiLAotIiAiLAotIiAgICBc XE4gLSBTZW5kIGEgTlVMIChBU0NJSSAwKSBjaGFyYWN0ZXIgKHlvdSBjYW4ndCB1c2UgXFwwIGZv ciB0aGlzKS4iLAotIiAgICBcXEIgLSBTZW5kIGEgQlJFQUsgc2lnbmFsLiIsCi0iICAgIFxcTCAt IFNlbmQgYSBMb25nIEJSRUFLIHNpZ25hbC4iLAotIiAiLAotIkFsc28gc2VlIFNFVCBPVVRQVVQu IiwKLSIiIH07Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotc3RhdGljIGNoYXIgKmh4eXBhcmlbXSA9 IHsKLSJTRVQgUEFSSVRZIE5PTkUiLAotIiAgQ2hvb3NlcyA4IGRhdGEgYml0cyBhbmQgbm8gcGFy aXR5LiIsCi0iICIsCi0iU0VUIFBBUklUWSB7IEVWRU4sIE9ERCwgTUFSSywgU1BBQ0UgfSIsCi0i ICBDaG9vc2VzIDcgZGF0YSBiaXRzIHBsdXMgdGhlIGluZGljYXRlZCBraW5kIG9mIHBhcml0eS4i LAotIiAgRm9yY2VzIDh0aC1iaXQgcHJlZml4aW5nIGR1cmluZyBmaWxlIHRyYW5zZmVyLiIsCi0i ICIsCi0jaWZkZWYgSFdQQVJJVFkKLSJTRVQgUEFSSVRZIEhBUkRXQVJFIHsgRVZFTiwgT0REIH0i LAotIiAgQ2hvb3NlcyA4IGRhdGEgYml0cyBwbHVzIHRoZSBpbmRpY2F0ZWQga2luZCBvZiBwYXJp dHkuIiwKLSIgIiwKLSJBbHNvIHNlZSBTRVQgVEVSTUlOQUwgQllURVNJWkUsIFNFVCBTRVJJQUws IGFuZCBTRVQgU1RPUC1CSVRTLiIsCi0jZWxzZQotIkFsc28gc2VlIFNFVCBURVJNSU5BTCBCWVRF U0laRSBhbmQgU0VUIFNFUklBTC4iLAotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0iIn07Ci0KLSNp Zm5kZWYgTk9MT0NBTAotc3RhdGljIGNoYXIgKmh4eWVzY1tdID0gewotI2lmZGVmIE9TMgotIlN5 bnRheDogU0VUIEVTQ0FQRSBudW1iZXIiLAotIiAgRGVjaW1hbCBBU0NJSSB2YWx1ZSBmb3IgZXNj YXBlIGNoYXJhY3RlciBkdXJpbmcgQ09OTkVDVCwgbm9ybWFsbHkgMjkiLAotIiAgKENvbnRyb2wt XSkuICBUeXBlIHRoZSBlc2NhcGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IEMgdG8gZ2V0IGJhY2sg dG8gdGhlIiwKLSIgIEMtS2VybWl0IHByb21wdCBvciBmb2xsb3dlZCBieSA/IHRvIHNlZSBvdGhl ciBvcHRpb25zLCBvciB1c2UgdGhlIFxcS2V4aXQiLAotIiAga2V5Ym9hcmQgdmVyYiwgbm9ybWFs bHkgYXNzaWduZWQgdG8gQWx0LXguIiwKLSNlbHNlCi0jaWZkZWYgTkVYVAotIlN5bnRheDogU0VU IEVTQ0FQRSBudW1iZXIiLAotIiAgRGVjaW1hbCBBU0NJSSB2YWx1ZSBmb3IgZXNjYXBlIGNoYXJh Y3RlciBkdXJpbmcgQ09OTkVDVCwgbm9ybWFsbHkgMjkiLAotIiAgKENvbnRyb2wtXSkuICBUeXBl IHRoZSBlc2NhcGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IEMgdG8gZ2V0IGJhY2sgdG8gdGhlIiwK LSIgIEMtS2VybWl0IHByb21wdCBvciBmb2xsb3dlZCBieSA/IHRvIHNlZSBvdGhlciBvcHRpb25z LiIsCi0jZWxzZQotIlN5bnRheDogU0VUIEVTQ0FQRSBudW1iZXIiLAotIiAgRGVjaW1hbCBBU0NJ SSB2YWx1ZSBmb3IgZXNjYXBlIGNoYXJhY3RlciBkdXJpbmcgQ09OTkVDVCwgbm9ybWFsbHkgMjgi LAotIiAgKENvbnRyb2wtXFwpLiAgVHlwZSB0aGUgZXNjYXBlIGNoYXJhY3RlciBmb2xsb3dlZCBi eSBDIHRvIGdldCBiYWNrIHRvIHRoZSIsCi0iICBDLUtlcm1pdCBwcm9tcHQgb3IgZm9sbG93ZWQg YnkgPyB0byBzZWUgb3RoZXIgb3B0aW9ucy4iLAotI2VuZGlmIC8qIE5FWFQgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSIgIiwKLSJZb3UgbWF5IGFsc28gZW50ZXIgdGhlIGVzY2FwZSBjaGFyYWN0ZXIg YXMgXlggKGNpcmN1bWZsZXggZm9sbG93ZWQgYnkgYSIsCi0ibGV0dGVyIG9yIG9uZSBvZjogQCwg XiwgXywgWywgXFwsIG9yIF0sIHRvIGluZGljYXRlIGEgY29udHJvbCBjaGFyYWN0ZXI7IiwKLSJm b3IgZXhhbXBsZSwgU0VUIEVTQyBeXyBzZXRzIHlvdXIgZXNjYXBlIGNoYXJhY3RlciB0byBDdHJs LVVuZGVyc2NvcmUuIiwKLSIgIiwKLSJZb3UgY2FuIGFsc28gc3BlY2lmeSBhbiA4LWJpdCBjaGFy YWN0ZXIgKDEyOC0yNTUpIGFzIHlvdXIgZXNjYXBlIGNoYXJhY3RlciwiLAotImVpdGhlciBieSB0 eXBpbmcgaXQgbGl0ZXJhbGx5IG9yIGJ5IGVudGVyaW5nIGl0cyBudW1lcmljIGNvZGUuIiwKLSIi IH07Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PU1BMCi1zdGF0aWMgY2hhciAq aHh5b3V0W10gPSB7Ci0iU0VUIE9VVFBVVCBQQUNJTkcgPG51bWJlcj4iLAotIiAgSG93IG1hbnkg bWlsbGlzZWNvbmRzIHRvIHBhdXNlIGFmdGVyIHNlbmRpbmcgZWFjaCBPVVRQVVQgY2hhcmFjdGVy LCIsCi0iICBub3JtYWxseSAwLiIsCi0iICIsCi0iU0VUIE9VVFBVVCBTUEVDSUFMLUVTQ0FQRVMg eyBPTiwgT0ZGIH0iLAotIiAgV2hldGhlciB0byBwcm9jZXNzIHRoZSBzcGVjaWFsIE9VVFBVVC1v bmx5IGVzY2FwZXMgXFxCLCBcXEwsIGFuZCBcXE4uIiwKLSIgIE5vcm1hbGx5IE9OICh0aGV5IGFy ZSBwcm9jZXNzZWQpLiIsCi0iIiB9OwotCi1zdGF0aWMgY2hhciAqaHh5aW5wW10gPSB7Ci0iU3lu dGF4OiBTRVQgSU5QVVQgcGFyYW1ldGVyIHZhbHVlIiwKLSIgIiwKLSNpZmRlZiBDS19BVVRPREwK LSJTRVQgSU5QVVQgQVVUT0RPV05MT0FEIHsgT04sIE9GRiB9IiwKLSIgIENvbnRyb2xzIHdoZXRo ZXIgYXV0b2Rvd25sb2FkcyBhcmUgYWxsb3dlZCBkdXJpbmcgSU5QVVQgY29tbWFuZCBleGVjdXRp b24uIiwKLSIgIiwKLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSJTRVQgSU5QVVQgQlVGRkVSLUxF TkdUSCBudW1iZXItb2YtYnl0ZXMiLAotIiAgUmVtb3ZlcyB0aGUgb2xkIElOUFVUIGJ1ZmZlciBh bmQgY3JlYXRlcyBhIG5ldyBvbmUgd2l0aCB0aGUgZ2l2ZW4gbGVuZ3RoLiIsCi0iICIsCi0iU0VU IElOUFVUIENBTkNFTExBVElPTiB7IE9OLCBPRkYgfSIsCi0iICBXaGV0aGVyIGFuIElOUFVUIGlu IHByb2dyZXNzIGNhbiBiZSBjYW4gaW50ZXJydXB0ZWQgZnJvbSB0aGUga2V5Ym9hcmQuIiwKLSIg IiwKLSJTRVQgSU5QVVQgQ0FTRSB7IElHTk9SRSwgT0JTRVJWRSB9IiwKLSIgIFRlbGxzIHdoZXRo ZXIgYWxwaGFiZXRpYyBjYXNlIGlzIHRvIGJlIHNpZ25pZmljYW50IGluIHN0cmluZyBjb21wYXJp c29ucy4iLAotIiAgVGhpcyBzZXR0aW5nIGlzIGxvY2FsIHRvIHRoZSBjdXJyZW50IG1hY3JvIG9y IGNvbW1hbmQgZmlsZSwgYW5kIGlzIiwKLSIgIGluaGVyaXRlZCBieSBzdWJvcmRpbmF0ZSBtYWNy b3MgYW5kIHRha2UgZmlsZXMuIiwKLSIgIiwKLSJTRVQgSU5QVVQgRUNITyB7IE9OLCBPRkYgfSIs Ci0iICBUZWxscyB3aGV0aGVyIHRvIGRpc3BsYXkgYXJyaXZpbmcgY2hhcmFjdGVycyByZWFkIGJ5 IElOUFVUIG9uIHRoZSBzY3JlZW4uIiwKLSIgIiwKLSNpZmRlZiBDS0ZMT0FUCi0iU0VUIElOUFVU IFNDQUxFLUZBQ1RPUiA8bnVtYmVyPiIsCi0iICBBIG51bWJlciB0byBtdWx0aXBseSBhbGwgSU5Q VVQgdGltZW91dHMgYnksIHdoaWNoIG1heSBpbmNsdWRlIGEgZnJhY3Rpb25hbCIsCi0iICBwYXJ0 LCBlLmcuIDIuNS4gIEFsbCBJTlBVVCBjb21tYW5kcyB0aGF0IHNwZWNpZnkgYSB0aW1lb3V0IGlu IHNlY29uZHMiLAotIiAgKGFzIG9wcG9zZWQgdG8gYSBzcGVjaWZpYyB0aW1lIG9mIGRheSkgaGF2 ZSB0aGVpciB0aW1lIGxpbWl0IGFkanVzdGVkIiwKLSIgIGF1dG9tYXRpY2FsbHkgYnkgdGhpcyBm YWN0b3IsIHdoaWNoIGlzIGFsc28gYXZhaWxhYmxlIGluIHRoZSBidWlsdC1pbiIsCi0iICByZWFk LW9ubHkgdmFyaWFibGUgXFx2KGluc2NhbGUpLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMS4wLiIs Ci0iICIsCi0KLSNlbmRpZgkvKiBDS0ZMT0FUICovCi0KLSJTRVQgSU5QVVQgU0lMRU5DRSA8bnVt YmVyPiIsCi0iICBUaGUgbWF4aW11bSBudW1iZXIgdG8gc2Vjb25kcyBvZiBzaWxlbmNlIChubyBp bnB1dCBhdCBhbGwpIGJlZm9yZSB0aGUiLAotIiAgSU5QVVQgY29tbWFuZCB0aW1lcyBvdXQsIDAg Zm9yIG5vIG1heGltdW0uIiwKLSIgIiwKLSNpZmRlZiBPUzIKLSJTRVQgSU5QVVQgVEVSTUlOQUwg eyBPTiwgT0ZGIH0iLAotIiAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBkYXRhIHJlY2VpdmVkIGR1 cmluZyBhbiBJTlBVVCBjb21tYW5kIGlzIGRpc3BsYXllZCIsCi0iICBpbiB0aGUgdGVybWluYWwg d2luZG93LiAgRGVmYXVsdCBpcyBPTi4iLAotIiAiLAotI2VuZGlmIC8qIE9TMiAqLwotIlNFVCBJ TlBVVCBUSU1FT1VULUFDVElPTiB7IFBST0NFRUQsIFFVSVQgfSIsCi0iICBUZWxscyB3aGV0aGVy IHRvIHByb2NlZWQgb3IgcXVpdCBmcm9tIGEgc2NyaXB0IHByb2dyYW0gaWYgYW4gSU5QVVQgY29t bWFuZCIsCi0iICBmYWlscy4gIFBST0NFRUQgKGRlZmF1bHQpIGFsbG93cyB1c2Ugb2YgSUYgU1VD Q0VTUyAvIElGIEZBSUxVUkUgY29tbWFuZHMuIiwKLSIgIFRoaXMgc2V0dGluZyBpcyBsb2NhbCB0 byB0aGUgY3VycmVudCBtYWNybyBvciBjb21tYW5kIGZpbGUsIGFuZCBpcyIsCi0iICBpbmhlcml0 ZWQgYnkgc3Vib3JkaW5hdGUgbWFjcm9zIGFuZCB0YWtlIGZpbGVzLiIsCi0iIiB9OwotCi1zdGF0 aWMgY2hhciAqaHh5ZnVuY1tdID0gewotIlNFVCBGVU5DVElPTiBESUFHTk9TVElDUyB7IE9OLCBP RkYgfSIsCi0iICBXaGV0aGVyIHRvIGlzc3VlIGRpYWdub3N0aWMgbWVzc2FnZXMgZm9yIGlsbGVn YWwgZnVuY3Rpb24gY2FsbHMgYW5kIiwKLSIgIHJlZmVyZW5jZXMgdG8gbm9uZXhpc3RlbnQgYnVp bHQtaW4gdmFyaWFibGVzLiAgT04gYnkgZGVmYXVsdC4iLAotIiAiLAotIlNFVCBGVU5DVElPTiBF UlJPUiB7IE9OLCBPRkYgfSIsCi0iICBXaGV0aGVyIGFuIGlsbGVnYWwgZnVuY3Rpb24gY2FsbCBv ciByZWZlcmVuY2UgdG8gYSBub25leGlzdGVudCBidWlsdC1pbiIsCi0iICB2YXJpYWJsZSBzaG91 bGQgY2F1c2UgYSBjb21tYW5kIHRvIGZhaWwuICBPRkYgYnkgZGVmYXVsdC4iLAotIiIgfTsKLSNl bmRpZiAvKiBOT1NQTCAqLwotCi1zdGF0aWMgY2hhciAqaHh5eHl6W10gPSB7Ci0jaWZkZWYgQ0tf WFlaCi0jaWZkZWYgWFlaX0lOVEVSTkFMCi0KLS8qIFRoaXMgaXMgZm9yIGJ1aWx0LWluIHByb3Rv Y29scyAqLwotCi0iU3ludGF4OiBTRVQgUFJPVE9DT0wgeyBLRVJNSVQsIFhNT0RFTSwgWU1PREVN LCBaTU9ERU0gfSBbIHMxIHMyIFsgczMgXSBdIiwKLSIgIFNlbGVjdHMgcHJvdG9jb2wgdG8gdXNl IGZvciB0cmFuc2ZlcnJpbmcgZmlsZXMuICBTdHJpbmcgczEgaXMgYSBjb21tYW5kIHRvIiwKLSIg IHNlbmQgdG8gdGhlIHJlbW90ZSBob3N0IHByaW9yIHRvIFNFTkRpbmcgZmlsZXMgd2l0aCB0aGlz IHByb3RvY29sIGluIiwKLSIgIGJpbmFyeSBtb2RlOyBzdHJpbmcgczIgaXMgdGhlIHNhbWUgdGhp bmcgYnV0IGZvciB0ZXh0IG1vZGUuICBVc2UgXCIlc1wiIGluIiwKLSIgIGFueSBvZiB0aGVzZSBz dHJpbmdzIHRvIHJlcHJlc2VudCB0aGUgZmlsZW5hbWUocykuICBJZiB0aGUgcHJvdG9jb2wgaXMi LAotIiAgS0VSTUlULCB5b3UgbWF5IGFsc28gc3BlY2lmeSBhIHN0cmluZyBzMywgdGhlIGNvbW1h bmQgdG8gc3RhcnQgYSBLZXJtaXQiLAotIiAgc2VydmVyIG9uIHRoZSByZW1vdGUgaG9zdCB3aGVu IHlvdSBnaXZlIGEgR0VULCBSRUdFVCwgUkVNT1RFLCBvciBvdGhlciIsCi0iICBjbGllbnQgY29t bWFuZC4gIFVzZSB7IGJyYWNlcyB9IGlmIGFueSBjb21tYW5kIGNvbnRhaW5zIHNwYWNlcy4gIEV4 YW1wbGVzOiIsCi0iICIsCi0iICAgIHNldCBwcm90byB4bW9kZW0ge3J4ICVzfSB7cnggLWEgJXN9 IiwKLSIgICAgc2V0IHByb3RvIGtlcm1pdCB7a2VybWl0IC1ZUWlyfSB7a2VybWl0IC1ZUVRyfSB7 a2VybWl0IC1ZUXh9IiwKLQotI2Vsc2UgLyogVGhpcyBpcyBmb3Igd2hlbiBub24tS2VybWl0IHBy b3RvY29scyBhcmUgZXh0ZXJuYWwgKi8KLQotIlN5bnRheDogXAotU0VUIFBST1RPQ09MIHsgS0VS TUlULCBYTU9ERU0sIFlNT0RFTSwgWk1PREVNIH0gWyBzMSBzMiBzMyBzNCBzNSBzNiBdIiwKLSIg IFNlbGVjdHMgcHJvdG9jb2wgdG8gdXNlIGZvciB0cmFuc2ZlcnJpbmcgZmlsZXMuICBzMSBhbmQg czIgYXJlIGNvbW1hbmRzIHRvIiwKLSIgIG91dHB1dCBwcmlvciB0byBTRU5EaW5nIHdpdGggdGhp cyBwcm90b2NvbCwgdG8gYXV0b21hdGljYWxseSBzdGFydCB0aGUiLAotIiAgUkVDRUlWRSBwcm9j ZXNzIG9uIHRoZSBvdGhlciBlbmQgaW4gYmluYXJ5IG9yIHRleHQgbW9kZSwgcmVzcGVjdGl2ZWx5 LiIsCi0iICBJZiB0aGUgcHJvdG9jb2wgaXMgS0VSTUlULCBzMyBpcyB0aGUgY29tbWFuZCB0byBz dGFydCBhIEtlcm1pdCBzZXJ2ZXIgb24iLAotIiAgdGhlIHJlbW90ZSBjb21wdXRlciwgYW5kIHRo ZXJlIGFyZSBubyBzNC1zNiBjb21tYW5kcy4gIE90aGVyd2lzZSwgczMgYW5kIiwKLSIgIHM0IGFy ZSBjb21tYW5kcyB1c2VkIG9uIHRoaXMgY29tcHV0ZXIgZm9yIHNlbmRpbmcgZmlsZXMgd2l0aCB0 aGlzIHByb3RvY29sIiwKLSIgIGluIGJpbmFyeSBvciB0ZXh0IG1vZGUsIHJlc3BlY3RpdmVseTsg czUgYW5kIHM2IGFyZSB0aGUgY29tbWFuZHMgZm9yIiwKLSIgIHJlY2VpdmluZyBmaWxlcyB3aXRo IHRoaXMgcHJvdG9jb2wuICBVc2UgXCIlc1wiIGluIGFueSBvZiB0aGVzZSBzdHJpbmdzIiwKLSIg IHRvIHJlcHJlc2VudCB0aGUgZmlsZW5hbWUocykuICBVc2UgeyBicmFjZXMgfSBpZiBhbnkgY29t bWFuZCBjb250YWlucyIsCi0iICBzcGFjZXMuICBFeGFtcGxlczoiLAotIiAiLAotIiAgICBzZXQg cHJvdG8ga2VybWl0IHtrZXJtaXQgLVlRaXJ9IHtrZXJtaXQgLVlRVHJ9IHtrZXJtaXQgLVlReH0i LAotIiAgICBzZXQgcHJvdG8geW1vZGVtIHJiIHtyYiAtYX0ge3NiICVzfSB7c2IgLWEgJXN9IHJi IHJiIiwKLSIgIiwKLSJFeHRlcm5hbCBwcm90b2NvbHMgcmVxdWlyZSBSRURJUkVDVCBhbmQgZXh0 ZXJuYWwgZmlsZSB0cmFuc2ZlciBwcm9ncmFtcyB0aGF0IiwKLSJ1c2UgcmVkaXJlY3RhYmxlIHN0 YW5kYXJkIGlucHV0L291dHB1dC4iLAotI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLwotI2Vsc2UK LSJTeW50YXg6IFwKLVNFVCBQUk9UT0NPTCBLRVJNSVQgWyBzMSBbIHMyIFsgczMgXSBdIF0iLAot IiAgTGV0cyB5b3Ugc3BlY2lmeSB0aGUgYXV0b3VwbG9hZCBiaW5hcnksIGF1dG91cGxvYWQgdGV4 dCwgYW5kIGF1dG9zZXJ2ZXIiLAotIiAgY29tbWFuZCBzdHJpbmdzIHRvIGJlIHNlbnQgdG8gdGhl IHJlbW90ZSBzeXN0ZW0gaW4gYWR2YW5jZSBvZiBhbnkgU0VORCIsCi0iICBvciBHRVQgY29tbWFu ZHMuICBCeSBkZWZhdWx0IHRoZXNlIGFyZSBcImtlcm1pdCAtaXJcIiwgXCJrZXJtaXQgLXJcIiwg YW5kIiwKLSIgIFwia2VybWl0IC14XCIuICBVc2UgeyBicmFjZXMgfSBhcm91bmQgYW55IGNvbW1h bmQgdGhhdCBjb250YWlucyBzcGFjZXMuIiwKLSIgIEV4YW1wbGU6IiwKLSIgIiwKLSIgICAgc2V0 IHByb3RvIGtlcm1pdCB7a2VybWl0IC1ZaXJ9IHtrZXJtaXQgLVlUcn0ge2tlcm1pdCAtWXh9IiwK LSNlbmRpZiAvKiBDS19YWVogKi8KLSIgIiwKLSIgIFNIT1cgUFJPVE9DT0wgZGlzcGxheXMgdGhl IGN1cnJlbnQgc2V0dGluZ3MuIiwKLSIifTsKLQotc3RhdGljIGNoYXIgKmhteHhieWUgPSAiU3lu dGF4OiBCWUVcblwKLSAgU2h1dCBkb3duIGFuZCBsb2cgb3V0IGEgcmVtb3RlIEtlcm1pdCBzZXJ2 ZXIiOwotCi0jaWZkZWYgQ0tfUEVSTVMKLSNpZmRlZiBVTklYCi1zdGF0aWMgY2hhciAqaG14eGNo bW9kW10gPSB7Ci0iU3ludGF4OiBDSE1PRCBbIHN3aXRjaGVzIF0gY29kZSBmaWxlc3BlYyIsCi0i ICBVTklYIG9ubHkuICBDaGFuZ2VzIHBlcm1pc3Npb25zIG9mIHRoZSBnaXZlbiBmaWxlKHMpIHRv IHRoZSBnaXZlbiBjb2RlLCIsCi0iICB3aGljaCBtdXN0IGJlIGFuIG9jdGFsIG51bWJlciBzdWNo IGFzIDY2NCBvciA3NzUuICBPcHRpb25hbCBzd2l0Y2hlczoiLAotIiAiLAotIiAgIC9GSUxFUyAg ICAgICAgT25seSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgcmVndWxhciBmaWxlcy4iLAotIiAgIC9E SVJFQ1RPUklFUyAgT25seSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgZGlyZWN0b3J5IGZpbGVzLiIs Ci0iICAgL1RZUEU6QklOQVJZICBPbmx5IGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBiaW5hcnkgZmls ZXMuIiwKLSIgICAvVFlQRTpURVhUICAgIE9ubHkgY2hhbmdlIHBlcm1pc3Npb25zIG9mIHRleHQg ZmlsZXMuIiwKLSIgICAvRE9URklMRVMgICAgIEluY2x1ZGUgZmlsZXMgd2hvc2UgbmFtZXMgYmVn aW4gd2l0aCBkb3QgKC4pLiIsCi0iICAgL1JFQ1VSU0lWRSAgICBDaGFuZ2UgcGVybWlzc2lvbnMg aW4gc3ViZGlyZWN0b3JpZXMgdG9vLiIsCi0iICAgL0xJU1QgICAgICAgICBMaXN0IGVhY2ggZmls ZSAoc3lub255bTogL1ZFUkJPU0UpLiIsCi0iICAgL05PTElTVCAgICAgICBPcGVyYXRlIHNpbGVu dGx5IChzeW5vbnltOiAvUVVJRVQpLiIsCi0iICAgL1BBR0UgICAgICAgICBXaGVuIGxpc3Rpbmcs IHBhdXNlIGF0IGVuZCBvZiBlYWNoIHNjcmVlbiAoaW1wbGllcyAvTElTVCkuIiwKLSIgICAvTk9Q QUdFICAgICAgIFdoZW4gbGlzdGluZywgZG9uJ3QgcGF1c2UgYXQgZW5kIG9mIGVhY2ggc2NyZWVu LiIsCi0iICAgL1NJTVVMQVRFICAgICBTaG93IHdoYXQgd291bGQgYmUgZG9uZSBidXQgZG9uJ3Qg YWN0dWFsbHkgZG8gaXQuIiwKLSIiCi19OwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBD S19QRVJNUyAqLwotCi0jaWZuZGVmIE5PU1BMCi0jaWZuZGVmIE5PU0VYUAotc3RhdGljIGNoYXIg KmhteHhzZXhwW10gPSB7Ci0iU3ludGF4OiAob3BlcmF0aW9uIG9wZXJhbmQgWyBvcGVyYW5kIFsg Li4uIF0gXSkiLAotIiAiLAotIiAgQy1LZXJtaXQgaW5jbHVkZXMgYSBzaW1wbGUgTElTUC1saWtl IFMtRXhwcmVzc2lvbiBwYXJzZXIgb3BlcmF0aW5nIG9uIiwKLSIgIG51bWJlcnMgb25seS4gIEFu IFMtRXhwcmVzc2lvbiBpcyBhbHdheXMgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMuICBUaGUiLAot IiAgcGFyZW50aGVzZXMgY2FuIGNvbnRhaW4gKGEpIGEgbnVtYmVyLCAoYikgYSB2YXJpYWJsZSwg KGMpIGEgZnVuY3Rpb24gdGhhdCIsCi0iICByZXR1cm5zIGEgbnVtYmVyLCBvciAoZCkgYW4gb3Bl cmF0b3IgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgb3BlcmFuZHMuIiwKLSIgIE9wZXJhbmRzIGNh biBiZSBhbnkgb2YgKGEpIHRocm91Z2ggKGMpIG9yIGFuIFMtRXhwcmVzc2lvbi4gIE51bWJlcnMg Y2FuIGJlIiwKLSIgIGludGVnZXJzIG9yIGZsb2F0aW5nLXBvaW50LiAgQW55IG9wZXJhbmQgdGhh dCBpcyBub3QgYSBudW1iZXIgYW5kIGRvZXMgbm90IiwKLSIgIHN0YXJ0IHdpdGggYmFja3NsYXNo IChcXCkgaXMgdHJlYXRlZCBhcyBhIEtlcm1pdCBtYWNybyBuYW1lLiAgT3BlcmF0b3JzOiIsCi0i ICIsCi0iIE9wZXJhdG9yICBBY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF eGFtcGxlICAgICAgICAgICBWYWx1ZSIsCi0iICBFVkFMICguKSAgUmV0dXJucyB0aGUgY29udGFp bmVkIHZhbHVlICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgNiIsCi0iICBRVU9URSAoJykg SW5oaWJpdHMgZXZhbHVhdGlvbiBvZiBmb2xsb3dpbmcgdmFsdWUgKHF1b3RlIGEpICAgICAgICAg YSIsCi0iICBTRVRRICAgICAgQXNzaWducyBhIHZhbHVlIHRvIGEgZ2xvYmFsIHZhcmlhYmxlICAg KHNldHEgYSAyKSAgICAgICAgMiIsCi0iICBMRVQgICAgICAgQXNzaWducyBhIHZhbHVlIHRvIGEg bG9jYWwgdmFyaWFibGUgICAgKGxldCBiIC0xLjMpICAgICAtMS4zIiwKLSIgICsgICAgICAgICBB ZGRzIGFsbCBvcGVyYW5kcyAoMSBvciBtb3JlKSAgICAgICAgICAoKyBhIGIpICAgICAgICAgICAw LjciLAotIiAgLSAgICAgICAgIFN1YnRyYWN0cyBhbGwgb3BlcmFuZHMgKDEgb3IgbW9yZSkgICAg ICgtIDkgNSAyIDEpICAgICAgIDEiLAotIiAgKiAgICAgICAgIE11bHRpcGxpZXMgYWxsIG9wZXJh bmRzICgxIG9yIG1vcmUpICAgICgqIGEgKCsgYiAxKSAzKSAgLTEuOCIsCi0iICAvICAgICAgICAg RGl2aWRlcyBhbGwgb3BlcmFuZHMgKDEgb3IgbW9yZSkgICAgICAgKC8gYiBhIDIpICAgICAgICAt MC4zMjUiLAotIiAgXiAgICAgICAgIFJhaXNlIGdpdmVuIG51bWJlciB0byBnaXZlbiBwb3dlciAg ICAgICheIDMgMikgICAgICAgICAgIDkiLAotIiAgKysgICAgICAgIEluY3JlbWVudHMgYSB2YXJp YWJsZSAgICAgICAgICAgICAgICAgICgrKyBhIDEuMikgICAgICAgIDMuMiIsCi0iICAtLSAgICAg ICAgRGVjcmVtZW50cyBhIHZhcmlhYmxlICAgICAgICAgICAgICAgICAgKC0tIGEpICAgICAgICAg ICAgMSIsCi0iICBBQlMgICAgICAgQWJzb2x1dGUgdmFsdWUgb2YgMSBvcGVyYW5kICAgICAgICAg ICAgKGFicyAoKiBhIGIgMykpICAgNy44IiwKLSIgIE1BWCAgICAgICBNYXhpbXVtIG9mIGFsbCBv cGVyYW5kcyAoMSBvciBtb3JlKSAgICAobWF4IDEgMiAzIDQpICAgICA0IiwKLSIgIE1JTiAgICAg ICBNaW5pbXVtIG9mIGFsbCBvcGVyYW5kcyAoMSBvciBtb3JlKSAgICAobWluIDEgMiAzIDQpICAg ICAxIiwKLSIgIE1PRCAgICAgICBNb2R1bHVzIG9mIGFsbCBvcGVyYW5kcyAoMSBvciBtb3JlKSAg ICAobW9kIDcgNCAyKSAgICAgICAxIiwKLSIgIFRSVU5DQVRFICBJbnRlZ2VyIHBhcnQgb2YgZmxv YXRpbmctcG9pbnQgb3BlcmFuZCAodHJ1bmNhdGUgMS4zMzMpICAxIiwKLSIgIENFSUxJTkcgICBD ZWlsaW5nIG9mIGZsb2F0aW5nLXBvaW50IG9wZXJhbmQgICAgICAoY2VpbGluZyAxLjI1KSAgICAy IiwKLSIgIEZMT09SICAgICBGbG9vciBvZiBmbG9hdGluZy1wb2ludCBvcGVyYW5kICAgICAgICAo Zmxvb3IgMS4yNSkgICAgICAxIiwKLSIgIFJPVU5EICAgICBPcGVyYW5kIHJvdW5kZWQgdG8gbmVh cmVzdCBpbnRlZ2VyICAgICAocm91bmQgMS43NSkgICAgICAyIiwKLSIgIFNRUlQgICAgICBTcXVh cmUgcm9vdCBvZiAxIG9wZXJhbmQgICAgICAgICAgICAgICAoc3FydCAyKSAgICAgICAgICAxLjQx NC4uIiwKLSIgIEVYUCAgICAgICBlICgyLjcxODI4Li4pIHRvIHRoZSBnaXZlbiBwb3dlciAgICAg ICAoZXhwIC0xKSAgICAgICAgICAwLjM2Ny4uIiwKLSIgIFNJTiAgICAgICBTaW5lIG9mIGFuZ2xl IGV4cHJlc3NlZCBpbiByYWRpYW5zICAgICAoc2luICgvIHBpIDIpKSAgICAxLjAiLAotIiAgQ09T ICAgICAgIENvc2luZSBvZiBnaXZlbiBudW1iZXIgICAgICAgICAgICAgICAgIChjb3MgcGkpICAg ICAgICAgLTEuMCIsCi0iICBUQU4gICAgICAgVGFuZ2VudCBvZiBnaXZlbiBudW1iZXIgICAgICAg ICAgICAgICAgKHRhbiBwaSkgICAgICAgICAgMC4wIiwKLSIgIExPRyAgICAgICBOYXR1cmFsIGxv ZyAoYmFzZSBlKSBvZiBnaXZlbiBudW1iZXIgICAobG9nIDIuNzE4MykgICAgICAxLjAwMC4uIiwK LSIgIExPRzEwICAgICBMb2cgYmFzZSAxMCBvZiBnaXZlbiBudW1iZXIgICAgICAgICAgICAobG9n MTAgMTAwMCkgICAgICAzLjAiLAotIiAiLAotIlByZWRpY2F0ZSBvcGVyYXRvcnMgcmV0dXJuIDAg aWYgZmFsc2UsIDEgaWYgdHJ1ZSwgYW5kIGlmIGl0IGlzIHRoZSBvdXRlcm1vc3QiLAotIm9wZXJh dG9yLCBzZXRzIFNVQ0NFU1Mgb3IgRkFJTFVSRSBhY2NvcmRpbmdseToiLAotIiAiLAotIiAgPCAg ICAgICAgIE9wZXJhbmRzIGluIHN0cmljdGx5IGRlc2NlbmRpbmcgb3JkZXIgICg8IDYgNSA0IDMg MiAxKSAgIDEiLAotIiAgPD0gICAgICAgIE9wZXJhbmRzIGluIGRlc2NlbmRpbmcgb3JkZXIgICAg ICAgICAgICg8PSA2IDYgNSA0IDMgMikgIDEiLAotIiAgIT0gICAgICAgIE9wZXJhbmRzIGFyZSBu b3QgZXF1YWwgICAgICAgICAgICAgICAgICghPSAxIDEgMS4wKSAgICAgIDAiLAotIiAgPSAgICg9 PSkgIEFsbCBvcGVyYW5kcyBhcmUgZXF1YWwgICAgICAgICAgICAgICAgICg9IDMgMyAzIDMpICAg ICAgIDEiLAotIiAgPiAgICAgICAgIE9wZXJhbmRzIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRl ciAgICg+IDEgMiAzIDQgNSA2KSAgIDEiLAotIiAgPj0gICAgICAgIE9wZXJhbmRzIGluIGFzY2Vu ZGluZyBvcmRlciAgICAgICAgICAgICg+IDEgMSAyIDMgNCA1KSAgIDEiLAotIiAgQU5EICgmJikg IE9wZXJhbmRzIGFyZSBhbGwgdHJ1ZSAgICAgICAgICAgICAgICAgIChhbmQgMSAxIDEgMSAwKSAg IDAiLAotIiAgT1IgICh8fCkgIEF0IGxlYXN0IG9uZSBvcGVyYW5kIGlzIHRydWUgICAgICAgICAg IChvciAxIDEgMSAxIDApICAgIDEiLAotIiAgWE9SICAgICAgIExvZ2ljYWwgRXhjbHVzaXZlIE9S ICAgICAgICAgICAgICAgICAgICh4b3IgMyAxKSAgICAgICAgIDAiLAotIiAgTk9UICghKSAgIFJl dmVyc2VzIHRydXRoIHZhbHVlIG9mIG9wZXJhbmQgICAgICAgIChub3QgMykgICAgICAgICAgIDAi LAotIiAiLAotIkJpdC1vcmllbnRlZCBvcGVyYXRvcnM6IiwKLSIgIiwKLSIgICYgICAgICAgICBC aXR3aXNlIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJiA3IDIpICAgICAgICAgICAy IiwKLSIgIHwgICAgICAgICBCaXR3aXNlIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo fCAxIDIgMyA0KSAgICAgICA3IiwKLSIgICMgICAgICAgICBCaXR3aXNlIEV4Y2x1c2l2ZSBPUiAg ICAgICAgICAgICAgICAgICAoIyAzIDEpICAgICAgICAgICAyIiwKLSIgIH4gICAgICAgICBSZXZl cnNlcyBhbGwgYml0cyAgICAgICAgICAgICAgICAgICAgICAofiAzKSAgICAgICAgICAgIC00IiwK LSIgIiwKLSJPcGVyYXRvcnMgdGhhdCB3b3JrIG9uIHRydXRoIHZhbHVlczoiLAotIiAiLAotIiAg SUYgICAgICAgIENvbmRpdGlvbmFsIGV2YWx1YXRpb24gICAgICAgICAgICAgICAgIChpZiAoMSkg MiAzKSAgICAgIDIiLAotIiAiLAotIk9wZXJhdG9ycyBjYW4gYWxzbyBiZSBuYW1lcyBvZiBLZXJt aXQgbWFjcm9zIHRoYXQgcmV0dXJuIGVpdGhlciBudW1lcmljIiwKLSJ2YWx1ZXMgb3Igbm8gdmFs dWUgYXQgYWxsLiIsCi0iICIsCi0iQnVpbHQtaW4gY29uc3RhbnRzIGFyZToiLAotIiAiLAotIiAg dCAgICAgICAgIFRydWUgKDEpIiwKLSIgIG5pbCAgICAgICBGYWxzZSAoZW1wdHkpIiwKLSIgIHBp ICAgICAgICBUaGUgdmFsdWUgb2YgUGkgKDMuMTQxNTkyNi4uLikiLAotIiAiLAotIklmIFNFVCBT RVhQUkVTU0lPTiBUUlVOQ0FURS1BTEwtUkVTVUxUUyBpcyBPTiwgYWxsIHJlc3VsdHMgYXJlIHRy dW5jdGF0ZWQiLAotInRvIGludGVnZXIgdmFsdWVzIGJ5IGRpc2NhcmRpbmcgYW55IGZyYWN0aW9u YWwgcGFydC4gIE90aGVyd2lzZSByZXN1bHRzIiwKLSJhcmUgZmxvYXRpbmctcG9pbnQgaWYgdGhl cmUgZnJhY3Rpb25hbCBwYXJ0IGFuZCBpbnRlZ2VyIG90aGVyd2lzZS4iLAotIklmIFNFVCBTRVhQ UkVTU0lPTiBFQ0hPLVJFU1VMVCBpcyBBVVRPICh0aGUgZGVmYXVsdCksIHRoZSB2YWx1ZSBvZiB0 aGUiLAotIlMtRXhwcmVzc2lvbiBpcyBwcmludGVkIGlmIHRoZSBTLUV4cHJlc3Npb24gaXMgZ2l2 ZW4gYXQgdG9wIGxldmVsOyBpZiBPTiwiLAotIml0IGlzIHByaW50ZWQgYXQgYW55IGxldmVsOyBp ZiBPRkYgaXQgaXMgbm90IHByaW50ZWQuICBBdCBhbGwgbGV2ZWxzLCB0aGUiLAotInZhcmlhYmxl IFxcdihzZXhwcmVzc2lvbikgaXMgc2V0IHRvIHRoZSBtb3N0IHJlY2VudCBTLUV4cHJlc3Npb24s IGFuZCIsCi0iXFx2KHN2YWx1ZSkgaXMgc2V0IHRvIGl0cyB2YWx1ZS4gIFlvdSBjYW4gdXNlIHRo ZSBcXGZzZXhwcmVzc3Npb24oKSBmdW5jdGlvbiIsCi0idG8gZXZhbHVhdGUgYW4gUy1FeHByZXNz aW9uIGFueXdoZXJlIGluIGEgS2VybWl0IGNvbW1hbmQuIiwKLSIiCi19OwotI2VuZGlmIC8qIE5P U0VYUCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLXN0YXRpYyBjaGFyICpobXh4Z3JlcFtdID0g ewotI2lmZGVmIFVOSVhPUk9TSwotIlN5bnRheDogR1JFUCBbIG9wdGlvbnMgXSBwYXR0ZXJuIGZp bGVzcGVjIiwKLSNlbHNlCi0iU3ludGF4OiBGSU5EIFsgb3B0aW9ucyBdIHBhdHRlcm4gZmlsZXNw ZWMiLAotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotIiAgU2VhcmNoZXMgdGhyb3VnaCB0aGUgZ2l2 ZW4gZmlsZSBvciBmaWxlcyBmb3IgdGhlIGdpdmVuIGNoYXJhY3RlciBzdHJpbmciLAotIiAgb3Ig cGF0dGVybi4gIEluIHRoZSBub3JtYWwgY2FzZSwgYWxsIGxpbmVzIGNvbnRhaW5pbmcgYW55IHRl eHQgdGhhdCBtYXRjaGVzIgotLAotIiAgdGhlIHBhdHRlcm4gYXJlIHByaW50ZWQuICBQYXR0ZXJu IHN5bnRheCBpcyBhcyBkZXNjcmliZWQgaW4gSEVMUCBQQVRURVJOUyIsCi0iICBleGNlcHQgdGhh dCAnKicgaXMgaW1wbGllZCBhdCB0aGUgYmVnaW5uaW5nIHVubGVzcyB0aGUgcGF0dGVybiBzdGFy dHMgd2l0aCIsCi0iICAnXicgYW5kIGFsc28gYXQgdGhlIGVuZCB1bmxlc3MgdGhlIHBhdHRlcm4g ZW5kcyB3aXRoICckJy4gIFRoZXJlZm9yZSwiLAotIiAgXCJncmVwIHNvbWV0aGluZyAqLnR4dFwi IGxpc3RzIGFsbCBsaW5lcyBpbiBhbGwgKi50eHQgZmlsZXMgdGhhdCBjb250YWluIiwKLSIgIHRo ZSB3b3JkIFwic29tZXRoaW5nXCIsIGJ1dCBcImdyZXAgXnNvbWV0aGluZyAqLnR4dFwiIGxpc3Rz IG9ubHkgdGhlIGxpbmVzIiwKLSIgIHRoYXQgU1RBUlQgd2l0aCBcInNvbWV0aGluZ1wiLiAgVGhl IGNvbW1hbmQgc3VjY2VlZHMgaWYgYW55IG9mIHRoZSBnaXZlbiIsCi0iICBmaWxlcyBjb250YWlu ZWQgYW55IGxpbmVzIHRoYXQgbWF0Y2ggdGhlIHBhdHRlcm4sIG90aGVyd2lzZSBpdCBmYWlscy4i LAotI2lmZGVmIFVOSVhPUk9TSwotIiAgU3lub255bTogRklORC4iLAotI2Vsc2UKLSIgIFN5bm9u eW06IEdSRVAuIiwKLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSIgIiwKLSJGaWxlIHNlbGVjdGlv biBvcHRpb25zOiIsCi0iICAvTk9CQUNLVVBGSUxFUyIsCi0iICAgIEV4Y2x1ZGVzIGJhY2t1cCBm aWxlcyAobGlrZSBvb2ZhLnR4dC5+M34pIGZyb20gdGhlIHNlYXJjaC4iLAotIiAgL0RPVEZJTEVT IiwKLSIgICAgSW5jbHVkZXMgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCBkb3QgKC4pIGlu IHRoZSBzZWFyY2guIiwKLSIgIC9OT0RPVEZJTEVTIiwKLSIgICAgRXhjbHVkZXMgZmlsZXMgd2hv c2UgbmFtZXMgc3RhcnQgd2l0aCBkb3QgKC4pIGZyb20gdGhlIHNlYXJjaC4iLAotI2lmZGVmIFJF Q1VSU0lWRQotIiAgL1JFQ1VSU0lWRSIsCi0iICAgIFNlYXJjaGVzIHRocm91Z2ggZmlsZXMgaW4g c3ViZGlyZWN0b3JpZXMgdG9vLiIsCi0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0iICAvVFlQRTpU RVhUIiwKLSIgICAgU2VhcmNoIG9ubHkgdGV4dCBmaWxlcyAocmVxdWlyZXMgRklMRSBTQ0FOIE9O KS4iLAotIiAgL1RZUEU6QklOQVJZIiwKLSIgICAgU2VhcmNoIG9ubHkgYmluYXJ5IGZpbGVzIChy ZXF1aXJlcyBGSUxFIFNDQU4gT04pLiIsCi0iICIsCi0iUGF0dGVybi1tYXRjaGluZyBvcHRpb25z OiIsCi0iICAvTk9DQVNFIiwKLSIgICAgSWdub3JlcyBjYXNlIG9mIGxldHRlcnMgKEFTQ0lJIG9u bHkpIHdoZW4gY29tcGFyaW5nLiIsCi0iICAvTk9NQVRDSCIsCi0iICAgIFNlYXJjaGVzIGZvciBs aW5lcyB0aGF0IGRvIE5PVCBtYXRjaCB0aGUgcGF0dGVybi4iLAotIiAgL0VYQ0VQVDpwYXR0ZXJu IiwKLSIgICAgRXhjbHVkZSBsaW5lcyB0aGF0IG1hdGNoIHRoZSBtYWluIHBhdHRlcm4gdGhhdCBh bHNvIG1hdGNoIHRoaXMgcGF0dGVybi4iLAotIiAiLAotIkRpc3BsYXkgb3B0aW9uczoiLAotIiAg L0NPVU5UOnZhcmlhYmxlLW5hbWUiLAotIiAgICBGb3IgZWFjaCBmaWxlLCBwcmludHMgb25seSB0 aGUgZmlsZW5hbWUgYW5kIGEgY291bnQgb2YgbWF0Y2hpbmcgbGluZXMiLAotIiAgICBhbmQgYXNz aWducyB0aGUgdG90YWwgbWF0Y2ggY291bnQgdG8gdGhlIHZhcmlhYmxlLCBpZiBvbmUgaXMgZ2l2 ZW4uIiwKLSIgIC9OQU1FT05MWSIsCi0iICAgIFByaW50cyB0aGUgbmFtZSBvZiBlYWNoIGZpbGUg dGhhdCBjb250YWlucyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgbGluZSwiLAotIiAgICBvbmUgbmFt ZSBwZXIgbGluZSwgcmF0aGVyIHRoYW4gc2hvd2luZyBlYWNoIG1hdGNoaW5nIGxpbmUuIiwKLSIg IC9OT0xJU1QiLAotIiAgICBEb2Vzbid0IHByaW50IGFueXRoaW5nIChidXQgc2V0cyBTVUNDRVNT IG9yIEZBSUxVUkUgYXBwcm9wcmlhdGVseSkuIiwKLSIgIC9MSU5FTlVNQkVSUyIsCi0iICAgIFBy ZWNlZGVzIGVhY2ggZmlsZSBsaW5lIGJ5IGl0cyBsaW5lIG51bWJlciB3aXRoaW4gdGhlIGZpbGUu IiwKLSIgIC9QQUdFIiwKLSIgICAgUGF1c2VzIGFmdGVyIGVhY2ggc2NyZWVuZnVsLiIsCi0iICAv Tk9QQUdFIiwKLSIgICAgRG9lc24ndCBwYXVzZSBhZnRlciBlYWNoIHNjcmVlbmZ1bC4iLAotIiAg L09VVFBVVDpuYW1lIiwKLSIgICAgU2VuZHMgcmVzdWx0cyB0byB0aGUgZ2l2ZW4gZmlsZS4gIElm IHRoaXMgc3dpdGNoIGlzIG9taXR0ZWQsIHRoZSIsCi0iICAgIHJlc3VsdHMgYXBwZWFyIG9uIHlv dXIgc2NyZWVuLiAgVGhpcyBzd2l0Y2ggb3ZlcnJpZGVzIGFueSBleHByZXNzIG9yIiwKLSIgICAg aW1wbGllZCAvUEFHRSBzd2l0Y2guIiwKLSIifTsKLQotc3RhdGljIGNoYXIgKmhteHhkaXJbXSA9 IHsKLSNpZmRlZiBET01ZRElSCi0iU3ludGF4OiBESVJFQ1RPUlkgWyBzd2l0Y2hlcyBdIFsgZmls ZXNwZWMgWyBmaWxlc3BlYyBbIC4uLiBdIF0gXSIsCi0jaWZkZWYgTE9DVVMKLSIgIElmIExPQ1VT IGlzIFJFTU9URSBvciBMT0NVUyBpcyBBVVRPIGFuZCB5b3UgaGF2ZSBhbiBGVFAgY29ubmVjdGlv biwiLAotIiAgdGhpcyBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8gUkVNT1RFIERJUkVDVE9SWSAo UkRJUikuICBPdGhlcndpc2U6IiwKLSIgIiwKLSNlbmRpZiAvKiBMT0NVUyAqLwotIiAgTGlzdHMg bG9jYWwgZmlsZXMuICBUaGUgZmlsZXNwZWMgbWF5IGJlIGEgZmlsZW5hbWUsIHBvc3NpYmx5IGNv bnRhaW5pbmciLAotIiAgd2lsZGNhcmQgY2hhcmFjdGVycywgb3IgYSBkaXJlY3RvcnkgbmFtZS4g IElmIG5vIGZpbGVzcGVjIGlzIGdpdmVuLCBhbGwiLAotIiAgZmlsZXMgaW4gdGhlIGN1cnJlbnQg ZGlyZWN0b3J5IGFyZSBsaXN0ZWQuICBJZiBhIGRpcmVjdG9yeSBuYW1lIGlzIGdpdmVuLCIsCi0i ICBhbGwgdGhlICBmaWxlcyBpbiBpdCBhcmUgbGlzdGVkLiAgTXVsdGlwbGUgZmlsZXNwZWNzIGNh biBiZSBnaXZlbi4iLAotIiAgT3B0aW9uYWwgc3dpdGNoZXM6IiwKLSIgIiwKLSIgICAvQlJJRUYg ICAgICAgICAgIExpc3QgZmlsZW5hbWVzIG9ubHkuIiwKLSNpZmRlZiBDS19QRVJNUwotIiAgIC9W RVJCT1NFICAgICAgICsgQWxzbyBsaXN0IHBlcm1pc3Npb25zLCBzaXplLCBhbmQgZGF0ZS4iLAot I2Vsc2UKLSIgICAvVkVSQk9TRSAgICAgICArIEFsc28gbGlzdCBkYXRlIGFuZCBzaXplLiIsCi0j ZW5kaWYgLyogQ0tfUEVSTVMgKi8KLSIgICAvRklMRVMgICAgICAgICAgIFNob3cgZmlsZXMgYnV0 IG5vdCBkaXJlY3Rvcmllcy4iLAotIiAgIC9ESVJFQ1RPUklFUyAgICAgU2hvdyBkaXJlY3Rvcmll cyBidXQgbm90IGZpbGVzLiIsCi0iICAgL0FMTCAgICAgICAgICAgKyBTaG93IGJvdGggZmlsZXMg YW5kIGRpcmVjdG9yaWVzLiIsCi0iICAgL0FSUkFZOiZhICAgICAgICBTdG9yZSBmaWxlIGxpc3Qg aW4gc3BlY2lmaWVkIGFycmF5IChlLmcuIFxcJWFbXSkuIiwKLSIgICAvUEFHRSAgICAgICAgICAg IFBhdXNlIGFmdGVyIGVhY2ggc2NyZWVuZnVsLiIsCi0iICAgL05PUEFHRSAgICAgICAgICBEb24n dCBwYXVzZSBhZnRlciBlYWNoIHNjcmVlbmZ1bC4iLAotIiAgIC9UT1A6biAgICAgICAgICAgT25s eSBzaG93IHRoZSB0b3AgbiBsaW5lcyBvZiB0aGUgZGlyZWN0b3J5IGxpc3RpbmcuIiwKLSNpZmRl ZiBVTklYT1JPU0sKLSIgICAvRE9URklMRVMgICAgICAgIEluY2x1ZGUgZmlsZXMgd2hvc2UgbmFt ZXMgc3RhcnQgd2l0aCBkb3QgKHBlcmlvZCkuIiwKLSIgICAvTk9ET1RGSUxFUyAgICArIERvbid0 IGluY2x1ZGUgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCBkb3QuIiwKLSIgICAvRk9MTE9X TElOS1MgICAgIEZvbGxvdyBzeW1ib2xpYyBsaW5rcy4iLAotIiAgIC9OT0ZPTExPV0xJTktTICsg RG9uJ3QgZm9sbG93IHN5bWJvbGljIGxpbmtzLiIsCi0iICAgL05PTElOS1MgICAgICAgICBEb24n dCBsaXN0IHN5bWJvbGljIGxpbmtzIGF0IGFsbC4iLAotIiAgIC9CQUNLVVAgICAgICAgICsgSW5j bHVkZSBiYWNrdXAgZmlsZXMgKG5hbWVzIGVuZCB3aXRoIC5+bn4pLiIsCi0iICAgL05PQkFDS1VQ RklMRVMgICBEb24ndCBpbmNsdWRlIGJhY2t1cCBmaWxlcy4iLAotI2VuZGlmIC8qIFVOSVhPUk9T SyAqLwotIiAgIC9PVVRQVVQ6ZmlsZSAgICAgU3RvcmUgZGlyZWN0b3J5IGxpc3RpbmcgaW4gdGhl IGdpdmVuIGZpbGUuIiwKLSIgICAvSEVBRElORyAgICAgICAgIEluY2x1ZGUgaGVhZGluZyBhbmQg c3VtbWFyeS4iLAotIiAgIC9OT0hFQURJTkcgICAgICsgRG9uJ3QgaW5jbHVkZSBoZWFkaW5nIG9y IHN1bW1hcnkuIiwKLSIgICAvQ09VTlQ6dmFyICAgICAgIFB1dCB0aGUgbnVtYmVyIG9mIG1hdGNo aW5nIGZpbGVzIGluIHRoZSBnaXZlbiB2YXJpYWJsZS4iLAotIiAgIC9TVU1NQVJZICAgICAgICAg UHJpbnQgb25seSBjb3VudCBhbmQgdG90YWwgc2l6ZSBvZiBtYXRjaGluZyBmaWxlcy4iLAotIiAg IC9YRkVSTU9ERSAgICAgICAgU2hvdyBwYXR0ZXJuLWJhc2VkIHRyYW5zZmVyIG1vZGUgKFQ9VGV4 dCwgQj1CaW5hcnkpLiIsCi0iICAgL1RZUEU6ICAgICAgICAgICBTaG93IG9ubHkgZmlsZXMgb2Yg dGhlIHNwZWNpZmllZCB0eXBlICh0ZXh0IG9yIGJpbmFyeSkuIiwKLSIgICAvTUVTU0FHRTp0ZXh0 ICAgIEFkZCBicmllZiBtZXNzYWdlIHRvIGVhY2ggbGlzdGluZyBsaW5lLiIsCi0iICAgL05PTUVT U0FHRSAgICAgKyBEb24ndCBhZGQgbWVzc2FnZSB0byBlYWNoIGxpc3RpbmcgbGluZS4iLAotIiAg IC9OT1hGRVJNT0RFICAgICsgRG9uJ3Qgc2hvdyBwYXR0ZXJuLWJhc2VkIHRyYW5zZmVyIG1vZGUi LAotIiAgIC9JU09EQVRFICAgICAgICsgSW4gdmVyYm9zZSBsaXN0aW5ncywgc2hvdyBkYXRlIGlu IElTTyA4MDYxIGZvcm1hdC4iLAotIiAgIC9FTkdMSVNIREFURSAgICAgSW4gdmVyYm9zZSBsaXN0 aW5ncywgc2hvdyBkYXRlIGluIFwiRW5nbGlzaFwiIGZvcm1hdC4iLAotI2lmZGVmIFJFQ1VSU0lW RQotIiAgIC9SRUNVUlNJVkUgICAgICAgRGVzY2VuZCB0aHJvdWdoIHN1YmRpcmVjdG9yaWVzLiIs Ci0iICAgL05PUkVDVVJTSVZFICAgKyBEb24ndCBkZXNjZW5kIHRocm91Z2ggc3ViZGlyZWN0b3Jp ZXMuIiwKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSIgICAvU09SVDprZXkgICAgICAgIFNvcnQg Ynkga2V5LCBOQU1FLCBEQVRFLCBvciBTSVpFOyBkZWZhdWx0IGtleSBpcyBOQU1FLiIsCi0iICAg L05PU09SVCAgICAgICAgKyBEb24ndCBzb3J0LiIsCi0iICAgL0FTQ0VORElORyAgICAgKyBJZiBz b3J0aW5nLCBzb3J0IGluIGFzY2VuZGluZyBvcmRlci4iLAotIiAgIC9SRVZFUlNFICAgICAgICAg SWYgc29ydGluZywgc29ydCBpbiByZXZlcnNlIG9yZGVyLiIsCi0iICIsCi0iRmFjdG9yeSBkZWZh dWx0cyBhcmUgbWFya2VkIHdpdGggKy4gIERlZmF1bHQgZm9yIHBhZ2luZyBkZXBlbmRzIG9uIFNF VCIsCi0iQ09NTUFORCBNT1JFLVBST01QVElORy4gIFVzZSBTRVQgT1BUSU9OUyBESVJFQ1RPUlkg WyBzd2l0Y2hlcyBdIHRvIGNoYW5nZSIsCi0iZGVmYXVsdHM7IHVzZSBTSE9XIE9QVElPTlMgdG8g ZGlzcGxheSBjdXN0b21pemVkIGRlZmF1bHRzLiAgQWxzbyBzZWUiLAotIldESVJFQ1RPUlkuIiwK LSNlbHNlCi0iU3ludGF4OiBESVJFQ1RPUlkgWyBmaWxlc3BlYyBdIiwKLSIgIExpc3RzIHRoZSBz cGVjaWZpZWQgZmlsZSBvciBmaWxlcy4gIElmIG5vIGZpbGVzcGVjIGlzIGdpdmVuLCBhbGwgZmls ZXMiLAotIiAgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFyZSBsaXN0ZWQuIiwKLSNlbmRpZiAv KiBET01ZRElSICovCi0iIn07Ci0KLXN0YXRpYyBjaGFyICpobXh4dG91Y1tdID0gewotIlN5bnRh eDogVE9VQ0ggWyBzd2l0Y2hlcyBdIGZpbGVzcGVjIiwKLSIgIFVwZGF0ZXMgdGhlIG1vZGlmaWNh dGlvbiB0aW1lIG9mIHRoZSBnaXZlbiBmaWxlIG9yIGZpbGVzIHRvIHRoZSBjdXJyZW50IiwKLSIg IGRhdGUgYW5kIHRpbWUuICBJZiB0aGUgZmlsZXNwZWMgaXMgdGhlIG5hbWUgb2YgYSBzaW5nbGUg ZmlsZSB0aGF0IGRvZXMgbm90IiwKLSIgIGV4aXN0LCB0aGUgZmlsZSBpcyBjcmVhdGVkLiAgVGhl IG9wdGlvbmFsIHN3aXRjaGVzIGFyZSB0aGUgc2FtZSBhcyBmb3IiLAotIiAgdGhlIERJUkVDVE9S WSBjb21tYW5kLiAgVE9VQ0ggb3BlcmF0ZXMgc2lsZW50bHkgdW5sZXNzIHRoZSAvVkVSQk9TRSIs Ci0iICBzd2l0Y2ggaXMgZ2l2ZW4sIGluIHdoaWNoIGNhc2UgaXQgbGlzdHMgZWFjaCBmaWxlIGl0 IGFmZmVjdHMuIiwKLSIifTsKLQotI2lmbmRlZiBOT1NQTAotc3RhdGljIGNoYXIgKmhteHhrY2Rb XSA9IHsKLSJTeW50YXg6IEtDRCBzeW1ib2xpYy1kaXJlY3RvcnktbmFtZSIsCi0iICBLZXJtaXQg Q2hhbmdlIERpcmVjdG9yeTogTGlrZSBDRCAocS52LikgYnV0IChhKSBhbHdheXMgYWN0cyBsb2Nh bGx5LCBhbmQiLAotIiAgKGIpIHRha2VzIGEgc3ltYm9saWMgZGlyZWN0b3J5IG5hbWUgcmF0aGVy IHRoYW4gYW4gYWN0dWFsIGRpcmVjdG9yeSBuYW1lLiIsCi0iICBUaGUgc3ltYm9saWMgbmFtZXMg Y29ycmVzcG9uZCB0byBLZXJtaXQncyBkaXJlY3RvcnktdmFsdWVkIGJ1aWx0LWluIiwKLSIgIHZh cmlhYmxlcywgc3VjaCBhcyBcXHYoZG93bmxvYWQpLCBcXHYoZXhlZGlyKSwgYW5kIHNvIG9uLiAg SGVyZSdzIHRoZSBsaXN0OiIKLSwKLSIgIiwKLSNpZmRlZiBOVAotIiAgICBhcHBkYXRhICAgICAg IFlvdXIgcGVyc29uYWwgS2VybWl0IDk1IGFwcGxpY2F0aW9uIGRhdGEgZGlyZWN0b3J5IiwKLSIg ICAgY29tbW9uICAgICAgICBLZXJtaXQgOTUncyBhcHBsaWNhdGlvbiBkYXRhIGRpcmVjdG9yeSBm b3IgYWxsIHVzZXJzIiwKLSIgICAgZGVza3RvcCAgICAgICBZb3VyIFdpbmRvd3MgZGVza3RvcCIs Ci0jZW5kaWYgLyogTlQgKi8KLSIgICAgZG93bmxvYWQgICAgICBZb3VyIGRvd25sb2FkIGRpcmVj dG9yeSAoaWYgYW55KSIsCi0jaWZkZWYgT1MyT1JVTklYCi0iICAgIGV4ZWRpciAgICAgICAgVGhl IGRpcmVjdG9yeSB3aGVyZSB0aGUgS2VybWl0IGV4ZWN1dGFibGUgcmVzaWRlcyIsCi0jZW5kaWYg LyogT1MyT1JVTklYICovCi0iICAgIGhvbWUgICAgICAgICAgWW91ciBob21lLCBsb2dpbiwgb3Ig ZGVmYXVsdCBkaXJlY3RvcnkiLAotIiAgICBpbmlkaXIgICAgICAgIFRoZSBkaXJlY3Rvcnkgd2hl cmUgS2VybWl0J3MgaW5pdGlhbGl6YXRpb24gd2FzIGZvdW5kIiwKLSNpZmRlZiBVTklYCi0iICAg IGxvY2tkaXIgICAgICAgVGhlIFVOSVggVVVDUCBsb2NrZmlsZSBkaXJlY3Rvcnkgb24gdGhpcyBj b21wdXRlciIsCi0jZW5kaWYgLyogVU5JWCAqLwotI2lmZGVmIE5UCi0iICAgIHBlcnNvbmFsICAg ICAgWW91ciBcIk15IERvY3VtZW50c1wiIGRpcmVjdG9yeSIsCi0jZW5kaWYgLyogTlQgKi8KLSIg ICAgc3RhcnR1cCAgICAgICBZb3VyIGN1cnJlbnQgZGlyZWN0b3J5IGF0IHRoZSB0aW1lIEtlcm1p dCBzdGFydGVkIiwKLSIgICAgdGV4dGRpciAgICAgICBUaGUgZGlyZWN0b3J5IHdoZXJlIEtlcm1p dCB0ZXh0IGZpbGVzIHJlc2lkZSwgaWYgYW55IiwKLSIgICAgdG1wZGlyICAgICAgICBZb3VyIHRl bXBvcmFyeSBkaXJlY3RvcnkiLAotIiAiLAotIiAgQWxzbyBzZWUgQ0QsIFNFVCBGSUxFIERPV05M T0FELCBTRVQgVEVNUC1ESVJFQ1RPUlkuIiwKLSIiCi19OwotI2VuZGlmIC8qIE5PU1BMICovCi0K LXN0YXRpYyBjaGFyICpobXh4Y3dkW10gPSB7Ci0jaWZkZWYgTE9DVVMKLSIgIElmIExPQ1VTIGlz IFJFTU9URSBvciBMT0NVUyBpcyBBVVRPIGFuZCB5b3UgaGF2ZSBhbiBGVFAgY29ubmVjdGlvbiwi LAotIiAgdGhpcyBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8gUkVNT1RFIENEIChSQ0QpLiAgT3Ro ZXJ3aXNlOiIsCi0iICIsCi0jZW5kaWYgLyogTE9DVVMgKi8KLSNpZmRlZiB2bXMKLSJTeW50YXg6 IENEIFsgZGlyZWN0b3J5IG9yIGRldmljZTpkaXJlY3RvcnkgXSIsCi0iICBDaGFuZ2UgV29ya2lu ZyBEaXJlY3RvcnkuICBFcXVpdmFsZW50IHRvIFZNUyBTRVQgREVGQVVMVCBjb21tYW5kLiIsCi0j ZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0iQ2hhbmdlIFdvcmtpbmcgRGlyZWN0b3J5LCBlcXVp dmFsZW50IHRvIEFPUy9WUyAnZGlyJyBjb21tYW5kLiIsCi0jZWxzZQotI2lmZGVmIE9TMgotIlN5 bnRheDogQ0QgWyBkaXNrIG9yIGRpcmVjdG9yeSBuYW1lIF0iLAotIiAgQ2hhbmdlIERpc2sgb3Ig RGlyZWN0b3J5LiAgSWYgYSBkaXNrIG9yIGRpcmVjdG9yeSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQs IiwKLSIgIHlvdXIgY3VycmVudCBkaXJlY3RvcnkgYmVjb21lcyB0aGUgb25lIHNwZWNpZmllZCBi eSBIT01FIGVudmlyb25tZW50IiwKLSIgIHZhcmlhYmxlLCBpZiBhbnkuICBBIGRpc2sgbGV0dGVy IG11c3QgYmUgZm9sbG93ZWQgYnkgYSBjb2xvbi4iLAotI2Vsc2UKLSJTeW50YXg6IENEIFsgZGly ZWN0b3J5IG5hbWUgXSIsCi0iICBDaGFuZ2UgRGlyZWN0b3J5LiAgQ2hhbmdlcyB5b3VyIGN1cnJl bnQsIHdvcmtpbmcsIGRlZmF1bHQgZGlyZWN0b3J5IHRvIHRoZSIsCi0iICBvbmUgZ2l2ZW4sIHNv IHRoYXQgZnV0dXJlIG5vbi1hYnNvbHV0ZSBmaWxlbmFtZSByZWZlcmVuY2VzIGFyZSByZWxhdGl2 ZSB0byIsCi0iICB0aGlzIGRpcmVjdG9yeS4gIElmIHRoZSBkaXJlY3RvcnkgbmFtZSBpcyBvbWl0 dGVkLCB5b3VyIGhvbWUgKGxvZ2luKSIsCi0iICBkaXJlY3RvcnkgaXMgc3VwcGxpZWQuIiwKLSNl bmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIHZtcyAq LwotIiAgQy1LZXJtaXQncyBkZWZhdWx0IHByb21wdCBzaG93cyB5b3VyIGN1cnJlbnQgZGlyZWN0 b3J5LiIsCi0iICBTeW5vbnltczogTENELCBDV0QuIiwKLSNpZmRlZiBMT0NVUwotIiAgQWxzbyBz ZWU6IFNFVCBMT0NVUywgUFdELCBDRFVQLCBCQUNLLCBSRU1PVEUgQ0QgKFJDRCksIFNFVCBDRCwg U0VUIFBST01QVC4iLAotI2Vsc2UKLSIgIEFsc28gc2VlOiBQV0QsIENEVVAsIEJBQ0ssIFJFTU9U RSBDRCAoUkNEKSwgU0VUIENELCBTRVQgUFJPTVBULiIsCi0jZW5kaWYgLyogTE9DVVMgKi8KLSNp Zm5kZWYgTk9TUEwKLSIgIEFuZCBzZWU6IEhFTFAgS0NELiIsCi0jZW5kaWYgLyogTk9TUEwgKi8K LSIgIFJlbGV2YW50IGVudmlyb25tZW50IHZhcmlhYmxlczogQ0RQQVRILCBIT01FLiIsCi0iIn07 Ci0KLXN0YXRpYyBjaGFyICpobXh4ZGVsW10gPSB7Ci0iU3ludGF4OiBERUxFVEUgWyBzd2l0Y2hl cy4uLiBdIGZpbGVzcGVjIiwKLSNpZmRlZiBMT0NVUwotIiAgSWYgTE9DVVMgaXMgUkVNT1RFIG9y IExPQ1VTIGlzIEFVVE8gYW5kIHlvdSBoYXZlIGFuIEZUUCBjb25uZWN0aW9uLCIsCi0iICB0aGlz IGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0byBSRU1PVEUgREVMRVRFIChSREVMRVRFKS4gIE90aGVy d2lzZToiLAotIiAiLAotI2VuZGlmIC8qIExPQ1VTICovCi0iICBEZWxldGVzIGEgZmlsZSBvciBm aWxlcyBvbiB0aGUgY29tcHV0ZXIgd2hlcmUgQy1LZXJtaXQgaXMgcnVubmluZy4iLAotIiAgVGhl IGZpbGVzcGVjIG1heSBkZW5vdGUgYSBzaW5nbGUgZmlsZSBvciBjYW4gaW5jbHVkZSB3aWxkY2Fy ZCBjaGFyYWN0ZXJzIiwKLSIgIHRvIG1hdGNoIG11bHRpcGxlIGZpbGVzLiAgUk0gaXMgYSBzeW5v bnltIGZvciBERUxFVEUuICBTd2l0Y2hlcyBpbmNsdWRlOiIsCi0iICIsCi0iL0FGVEVSOmRhdGUt dGltZSIsCi0jaWZkZWYgVk1TCi0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIGNy ZWF0ZWQgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGltZSBhcmUiLAotI2Vsc2UKLSIgIFNwZWNpZmll cyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGlt ZSBhcmUiLAotI2VuZGlmIC8qIFZNUyAqLwotIiAgdG8gYmUgZGVsZXRlZC4gIEhFTFAgREFURSBm b3IgaW5mbyBhYm91dCBkYXRlLXRpbWUgZm9ybWF0cy4iLAotIiAiLAotIi9CRUZPUkU6ZGF0ZS10 aW1lIiwKLSNpZmRlZiBWTVMKLSIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9k aWZpZWQgYmVmb3JlIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAotI2Vsc2UKLSIgIFNwZWNpZmllcyB0 aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYmVmb3JlIHRoZSBnaXZlbiBkYXRlLXRpbWUi LAotI2VuZGlmIC8qIFZNUyAqLwotIiAgYXJlIHRvIGJlIGRlbGV0ZWQuIiwKLSIgIiwKLSIvTk9U LUFGVEVSOmRhdGUtdGltZSIsCi0jaWZkZWYgVk1TCi0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRo b3NlIGZpbGVzIG1vZGlmaWVkIGF0IG9yIGJlZm9yZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKLSNl bHNlCi0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGF0IG9yIGJl Zm9yZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKLSNlbmRpZiAvKiBWTVMgKi8KLSIgIGFyZSB0byBi ZSBkZWxldGVkLiIsCi0iICIsCi0iL05PVC1CRUZPUkU6ZGF0ZS10aW1lIiwKLSNpZmRlZiBWTVMK LSIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYXQgb3IgYWZ0ZXIg dGhlIGdpdmVuIGRhdGUtdGltZSIsCi0jZWxzZQotIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9z ZSBmaWxlcyBtb2RpZmllZCBhdCBvciBhZnRlciB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKLSNlbmRp ZiAvKiBWTVMgKi8KLSIgIGFyZSB0byBiZSBkZWxldGVkLiIsCi0iICIsCi0iL0xBUkdFUi1USEFO Om51bWJlciIsCi0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIGxvbmdlciB0aGFu IHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMgYXJlIiwKLSIgIHRvIGJlIGRlbGV0ZWQuIiwKLSIg IiwKLSIvU01BTExFUi1USEFOOm51bWJlciIsCi0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3Nl IGZpbGVzIHNtYWxsZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIGFyZSIsCi0iICB0 byBiZSBzZW50LiIsCi0iICIsCi0iL0VYQ0VQVDpwYXR0ZXJuIiwKLSIgIFNwZWNpZmllcyB0aGF0 IGFueSBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgcGF0dGVybiwgd2hpY2ggY2FuIGJlIGEi LAotIiAgcmVndWxhciBmaWxlbmFtZSBvciBtYXkgY29udGFpbiB3aWxkY2FyZHMsIGFyZSBub3Qg dG8gYmUgZGVsZXRlZC4gIFRvIiwKLSIgIHNwZWNpZnkgbXVsdGlwbGUgcGF0dGVybnMgKHVwIHRv IDgpLCB1c2Ugb3V0ZXIgYnJhY2VzIGFyb3VuZCB0aGUgZ3JvdXAiLAotIiAgYW5kIGlubmVyIGJy YWNlcyBhcm91bmQgZWFjaCBwYXR0ZXJuOiIsCi0iICIsCi0iICAgIC9FWENFUFQ6e3twYXR0ZXJu MX17cGF0dGVybjJ9Li4ufSIsCi0iICIsCi0jaWZkZWYgVU5JWE9ST1NLCi0iL0RPVEZJTEVTIiwK LSIgIEluY2x1ZGUgKGRlbGV0ZSkgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBcIi5cIi4i LAotIiAiLAotIi9OT0RPVEZJTEVTIiwKLSIgIFNraXAgKGRvbid0IGRlbGV0ZSkgZmlsZXMgd2hv c2UgbmFtZXMgYmVnaW4gd2l0aCBcIi5cIi4iLAotIiAiLAotI2VuZGlmIC8qIFVOSVhPUk9TSyAq LwotIi9UWVBFOlRFWFQiLAotIiAgRGVsZXRlIG9ubHkgcmVndWxhciB0ZXh0IGZpbGVzIChyZXF1 aXJlcyBGSUxFIFNDQU4gT04pIiwKLSIgIiwKLSIvVFlQRTpCSU5BUlkiLAotIiAgRGVsZXRlIG9u bHkgcmVndWxhciBiaW5hcnkgZmlsZXMgKHJlcXVpcmVzIEZJTEUgU0NBTiBPTikiLAotIiAiLAot Ii9ESVJFQ1RPUklFUyIsCi0iICBJbmNsdWRlIGRpcmVjdG9yaWVzLiAgSWYgdGhpcyBzd2l0Y2gg aXMgbm90IGdpdmVuLCBvbmx5IHJlZ3VsYXIgZmlsZXMiLAotIiAgYXJlIGRlbGV0ZWQuICBJZiBp dCBpcyBnaXZlbiwgS2VybWl0IGF0dGVtcHRzIHRvIGRlbGV0ZSBhbnkgZGlyZWN0b3JpZXMiLAot IiAgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gZmlsZSBzcGVjaWZpY2F0aW9uLCB3aGljaCBzdWNjZWVk cyBvbmx5IGlmIHRoZSIsCi0iICBkaXJlY3RvcnkgaXMgZW1wdHkuIiwKLSIgIiwKLSNpZmRlZiBS RUNVUlNJVkUKLSIvUkVDVVJTSVZFIiwKLSIgIFRoZSBERUxFVEUgY29tbWFuZCBhcHBsaWVzIHRv IHRoZSBlbnRpcmUgZGlyZWN0b3J5IHRyZWUgcm9vdGVkIGluIHRoZSIsCi0iICBjdXJyZW50IG9y IHNwZWNpZmllZCBkaXJlY3RvcnkuICBXaGVuIHRoZSAvRElSRUNUT1JJRVMgc3dpdGNoIGlzIGFs c28iLAotIiAgZ2l2ZW4sIEtlcm1pdCBkZWxldGVzIGFsbCB0aGUgKG1hdGNoaW5nKSBmaWxlcyBp biBlYWNoIGRpcmVjdG9yeSBiZWZvcmUiLAotIiAgYXR0ZW1wdGluZyB0byBkZWxldGUgdGhlIGRp cmVjdG9yeSBpdHNlbGYuIiwKLSIgIiwKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSNpZmRlZiBV TklYCi0jaWZkZWYgUkVDVVJTSVZFCi0iL0FMTCIsCi0iICBUaGlzIGlzIGEgc2hvcnRjdXQgZm9y IC9SRUNVUlNJVkUgL0RJUkVDVE9SSUVTIC9ET1RGSUxFUy4iLAotI2Vsc2UKLSIvQUxMIiwKLSIg IFRoaXMgaXMgYSBzaG9ydGN1dCBmb3IgL0RJUkVDVE9SSUVTIC9ET1RGSUxFUy4iLAotI2VuZGlm IC8qIFJFQ1VSU0lWRSAqLwotI2Vsc2UgIC8qICFVTklYICovCi0jaWZkZWYgUkVDVVJTSVZFCi0i L0FMTCIsCi0iICBUaGlzIGlzIGEgc2hvcnRjdXQgZm9yIC9SRUNVUlNJVkUgL0RJUkVDVE9SSUVT LiIsCi0jZWxzZQotIi9BTEwiLAotIiAgVGhpcyBpcyBhIHN5bm9ueW0gZm9yIC9ESVJFQ1RPUklF Uy4iLAotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSIgIiwKLSIv TElTVCIsCi0iICBMaXN0IGVhY2ggZmlsZSBhbmQgdGVsbCB3aGV0aGVyIGl0IHdhcyBkZWxldGVk LiAgU3lub255bXM6IC9MT0csIC9WRVJCT1NFLiIsCi0iICIsCi0iL05PTElTVCIsCi0iICBEb24n dCBsaXN0IGZpbGVzIHdoaWxlIGRlbGV0aW5nLiAgU3lub255bXM6IC9OT0xPRywgL1FVSUVULiIs Ci0iICIsCi0iL0hFQURJTkciLAotIiAgUHJpbnQgaGVhZGluZyBhbmQgc3VtbWFyeSBpbmZvcm1h dGlvbi4iLAotIiAiLAotIi9OT0hFQURJTkciLAotIiAgRG9uJ3QgcHJpbnQgaGVhZGluZyBhbmQg c3VtbWFyeSBpbmZvcm1hdGlvbi4iLAotIiAiLAotIi9TVU1NQVJZIiwKLSIgIExpa2UgL0hFQURJ TkcgL05PTElTVCwgYnV0IG9ubHkgcHJpbnRzIHRoZSBzdW1tYXJ5IGxpbmUuIiwKLSIgIiwKLSIv UEFHRSIsCi0iICBJZiBsaXN0aW5nLCBwYXVzZSBhZnRlciBlYWNoIHNjcmVlbmZ1bC4iLAotIiAi LAotIi9OT1BBR0UiLAotIiAgRG9uJ3QgcGF1c2UgYWZ0ZXIgZWFjaCBzY3JlZW5mdWwuIiwKLSIg IiwKLSIvQVNLIiwKLSIgIEludGVyYWN0aXZlbHkgYXNrIHBlcm1pc3Npb24gdG8gZGVsZXRlIGVh Y2ggZmlsZS4gIFJlcGx5IFllcyBvciBPSyB0byIsCi0iICBkZWxldGUgaXQsIE5vIG5vdCB0byBk ZWxldGUgaXQsIFF1aXQgdG8gY2FuY2VsIHRoZSBERUxFVEUgY29tbWFuZCwgYW5kIiwKLSIgIEdv IHRvIGdvIGFoZWFkIGFuZCBkZWxldGUgYWxsIHRoZSByZXN0IG9mIHRoZSBmaWxlcyB3aXRob3V0 IGFza2luZy4iLAotIiAiLAotIi9OT0FTSyIsCi0iICBEZWxldGUgZmlsZXMgd2l0aG91dCBhc2tp bmcgcGVybWlzc2lvbi4iLAotIiAiLAotIi9TSU1VTEFURSIsCi0iICBQcmV2aWV3IGZpbGVzIHNl bGVjdGVkIGZvciBkZWxldGlvbiB3aXRob3V0IGFjdHVhbGx5IGRlbGV0aW5nIHRoZW0uIiwKLSIg IEltcGxpZXMgL0xJU1QuIiwKLSIgIiwKLSJVc2UgU0VUIE9QVElPTlMgREVMRVRFIHRvIG1ha2Ug c2VsZWN0ZWQgc3dpdGNoZXMgZWZmZWN0aXZlIGZvciBldmVyeSBERUxFVEUiLAotImNvbW1hbmQg XAotdW5sZXNzIHlvdSBvdmVycmlkZSB0aGVtOyB1c2UgU0hPVyBPUFRJT05TIHRvIHNlZSBzZWxl Y3Rpb25zIGN1cnJlbnRseSIsCi0jaWZkZWYgTE9DVVMKLSJpbiBlZmZlY3QuICBBbHNvIHNlZSBI RUxQIFNFVCBMT0NVUywgSEVMUCBQVVJHRSwgSEVMUCBXSUxEQ0FSRC4iLAotI2Vsc2UKLSJpbiBl ZmZlY3QuICBBbHNvIHNlZSBIRUxQIFBVUkdFLCBIRUxQIFdJTERDQVJELiIsCi0jZW5kaWYgLyog TE9DVVMgKi8KLSIifTsKLQotI2lmbmRlZiBOT0hUVFAKLXN0YXRpYyBjaGFyICpobXh4aHR0cFtd ID0gewotIlN5bnRheDoiLAotI2lmZGVmIENLX1NTTAotIkhUVFAgWyA8c3dpdGNoZXM+IF0gT1BF TiBbeyAvU1NMLCAvVExTIH1dIDxob3N0bmFtZT4gPHNlcnZpY2UvcG9ydD4iLAotI2Vsc2UKLSJI VFRQIFsgPHN3aXRjaGVzPiBdIE9QRU4gPGhvc3RuYW1lPiA8c2VydmljZS9wb3J0PiIsCi0jZW5k aWYgLypDS19TU0wgKi8KLSIgIEluc3RydWN0cyBLZXJtaXQgdG8gb3BlbiBhIG5ldyBjb25uZWN0 aW9uIGZvciBIVFRQIGNvbW11bmljYXRpb24gd2l0aCIsCi0iICB0aGUgc3BlY2lmaWVkIGhvc3Qg b24gdGhlIHNwZWNpZmllZCBwb3J0LiAgVGhlIGRlZmF1bHQgcG9ydCBpcyBcImh0dHBcIi4iLAot I2lmZGVmIENLX1NTTAotIiAgSWYgL1NTTCBvciAvVExTIGFyZSBzcGVjaWZpZWQgb3IgaWYgdGhl IHNlcnZpY2UgaXMgXCJodHRwc1wiIG9yIHBvcnQgNDQzLCIsCi0iICBhIHNlY3VyZSBjb25uZWN0 aW9uIHdpbGwgYmUgZXN0YWJsaXNoZWQgdXNpbmcgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRpb24i LAotIiAgc2V0dGluZ3MuICBTZWUgSEVMUCBTRVQgQVVUSCBmb3IgZGV0YWlscy4iLAotI2VuZGlm IC8qIENLX1NTTCAqLwotIiAgSWYgPHN3aXRjaGVzPiBhcmUgc3BlY2lmaWVkLCB0aGV5IGFyZSBh cHBsaWVkIHRvIGFsbCBzdWJzZXF1ZW50IEhUVFAiLAotIiAgYWN0aW9ucyAoR0VULCBQVVQsIC4u LikgdW50aWwgYW4gSFRUUCBDTE9TRSBjb21tYW5kIGlzIGV4ZWN1dGVkLiIsCi0iICBBIFVSTCBj YW4gYmUgaW5jbHVkZWQgaW4gcGxhY2Ugb2YgdGhlIGhvc3RuYW1lIGFuZCBzZXJ2aWNlIG9yIHBv cnQuIiwKLSIgIiwKLSJIVFRQIENMT1NFIiwKLSIgIEluc3RydWN0cyBLZXJtaXQgdG8gY2xvc2Ug YW55IG9wZW4gSFRUUCBjb25uZWN0aW9uIGFuZCBjbGVhciBhbnkgc2F2ZWQiLAotIiAgc3dpdGNo IHZhbHVlcy4iLAotIiAiLAotIkhUVFAgWyA8c3dpdGNoZXM+IF0gQ09OTkVDVCA8aG9zdD5bOjxw b3J0Pl0iLAotIiAgSW5zdHJ1Y3RzIHRoZSBzZXJ2ZXIgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlv biB3aXRoIHRoZSBzcGVjaWZpZWQgaG9zdCIsCi0iICBhbmQgdG8gcmVkaXJlY3QgYWxsIGRhdGEg dHJhbnNtaXR0ZWQgYmV0d2VlbiBLZXJtaXQgYW5kIHRoZSBob3N0IGZvciB0aGUiLAotIiAgbGlm ZSBvZiB0aGUgY29ubmVjdGlvbi4iLAotIiAiLAotIkhUVFAgWyA8c3dpdGNoZXM+IF0gR0VUIDxy ZW1vdGUtZmlsZW5hbWU+IFsgPGxvY2FsLWZpbGVuYW1lPiBdIiwKLSIgIFJldHJpZXZlcyB0aGUg bmFtZWQgZmlsZSBvbiB0aGUgY3VycmVudGx5IG9wZW4gSFRUUCBjb25uZWN0aW9uLiAgVGhlIiwK LSIgIGRlZmF1bHQgbG9jYWwgZmlsZW5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlIHJlbW90ZSBmaWxl bmFtZSwgYnV0IHdpdGggYW55IiwKLSIgIHBhdGggc3RyaXBwZWQuICBJZiB5b3Ugd2FudCB0aGUg ZmlsZSB0byBiZSBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbiBpbnN0ZWFkIiwKLSIgIG9mIHN0b3Jl ZCBvbiBkaXNrLCBpbmNsdWRlIHRoZSAvVE9TQ1JFRU4gc3dpdGNoIGFuZCBvbWl0IHRoZSBsb2Nh bCIsCi0iICBmaWxlbmFtZS4gIElmIHlvdSBnaXZlIGEgVVJMIGluc3RlYWQgb2YgYSByZW1vdGUg ZmlsZW5hbWUsIHRoaXMgY29tbWFuZHMiLAotIiAgb3BlbnMgdGhlIGNvbm5lY3Rpb24sIEdFVHMg dGhlIGZpbGUsIGFuZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb247IHRoZSBzYW1lIiwKLSIgIGlzIHRy dWUgZm9yIHRoZSByZW1haW5pbmcgSFRUUCBjb21tYW5kcyBmb3Igd2hpY2ggeW91IGNhbiBzcGVj aWZ5IGEiLAotIiAgcmVtb3RlIGZpbGVuYW1lLCBkaXJlY3RvcnkgbmFtZSwgb3IgcGF0aC4iLAot IiAiLAotIkhUVFAgWyA8c3dpdGNoZXM+IF0gSEVBRCA8cmVtb3RlLWZpbGVuYW1lPiBbIDxsb2Nh bC1maWxlbmFtZT4gXSIsCi0iICBMaWtlIEdFVCBleGNlcHQgd2l0aG91dCBhY3R1YWxseSBnZXR0 aW5nIHRoZSBmaWxlOyBpbnN0ZWFkIGl0IGdldHMgb25seSIsCi0iICB0aGUgaGVhZGVycywgc3Rv cmluZyB0aGVtIGludG8gdGhlIGdpdmVuIGZpbGUgKGlmIGEgbG9jYWwgZmlsZW5hbWUgaXMiLAot IiAgc3BlY2lmaWVkKSwgb25lIGxpbmUgcGVyIGhlYWRlciBpdGVtIGFzIHNob3duIGluIHRoZSAv QVJSQVk6IHN3aXRjaCIsCi0iICBkZXNjcmlwdGlvbi4iLAotIiAiLAotIkhUVFAgWyA8c3dpdGNo ZXM+IF0gSU5ERVggPHJlbW90ZS1kaXJlY3Rvcnk+IFsgPGxvY2FsLWZpbGVuYW1lPiBdIiwKLSIg IFJldHJpZXZlcyB0aGUgZmlsZSBsaXN0aW5nIGZvciB0aGUgZ2l2ZW4gc2VydmVyIGRpcmVjdG9y eS4iLAotIiAgTk9URTogVGhpcyBjb21tYW5kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgbW9zdCBXZWIg c2VydmVycywgYW5kIGV2ZW4gd2hlbiIsCi0iICB0aGUgc2VydmVyIHVuZGVyc3RhbmQgaXQsIHRo ZXJlIGlzIG5vIHN0YXJkYXJkIHJlc3BvbnNlIGZvcm1hdC4iLAotIiAiLAotIkhUVFAgWyA8c3dp dGNoZXM+IF0gUE9TVCBbIC9NSU1FLVRZUEU6PHR5cGU+IF0gPGxvY2FsLWZpbGU+IDxyZW1vdGUt cGF0aD4iLAotIiAgICAgWyA8ZGVzdC1maWxlPiBdIiwKLSIgIFVzZWQgdG8gc2VuZCBhIHJlc3Bv bnNlIGFzIGlmIGl0IHdlcmUgc2VudCBmcm9tIGEgZm9ybS4gIFRoZSBkYXRhIHRvIGJlIiwKLSIg IHBvc3RlZCBtdXN0IGJlIHJlYWQgZnJvbSBhIGZpbGUuIiwKLSIgIiwKLSJIVFRQIFsgPHN3aXRj aGVzPiBdIFBVVCBbIC9NSU1FLVRZUEU6PHR5cGU+IF0gPGxvY2FsLWZpbGU+IDxyZW1vdGUtZmls ZT4iLAotIiAgICAgWyA8ZGVzdC1maWxlPiBdIiwKLSIgIFVwbG9hZHMgdGhlIGdpdmVuIGxvY2Fs IGZpbGUgdG8gc2VydmVyIGZpbGUuICBJZiB0aGUgcmVtb3RlIGZpbGVuYW1lIGlzIiwKLSIgIG9t aXR0ZWQsIHRoZSBsb2NhbCBuYW1lIGlzIHVzZWQsIGJ1dCB3aXRoIGFueSBwYXRoIHN0cmlwcGVk LiIsCi0iICIsCi0iSFRUUCBbIDxzd2l0Y2hlcz4gXSBERUxFVEUgPHJlbW90ZS1maWxlbmFtZT4i LAotIiAgSW5zdHJ1Y3RzIHRoZSBzZXJ2ZXIgdG8gZGVsZXRlIHRoZSBzcGVjaWZpZWQgZmlsZW5h bWUuIiwKLSIgIiwKLSJ3aGVyZSA8c3dpdGNoZXM+IGFyZToiLAotIi9BR0VOVDo8dXNlci1hZ2Vu dD4iLAotIiAgSWRlbnRpZmllcyB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXI7IFwiQy1LZXJtaXRc IiBvciBcIktlcm1pdC05NVwiIiwKLSIgIGJ5IGRlZmF1bHQuIiwKLSIgIiwKLSIvSEVBREVSOjxo ZWFkZXItbGluZT4iLAotIiAgVXNlZCBmb3Igc3BlY2lmeWluZyBhbnkgb3B0aW9uYWwgaGVhZGVy cy4gIEEgbGlzdCBvZiBoZWFkZXJzIGlzIHByb3ZpZGVkIiwKLSIgIHVzaW5nIGJyYWNlcyBmb3Ig Z3JvdXBpbmc6IiwKLSIgIiwKLSIgICAgL0hFQURFUjp7ezx0YWc+Ojx2YWx1ZT59ezx0YWc+Ojx2 YWx1ZT59Li4ufSIsCi0iICIsCi0iICBGb3IgYSBsaXN0aW5nIG9mIHZhbGlkIDx0YWc+IHZhbHVl IGFuZCA8dmFsdWU+IGZvcm1hdHMgc2VlIFJGQyAxOTQ1OiIsCi0iICBcIkh5cGVydGV4dCBUcmFu c2ZlciBQcm90b2NvbCAtLSBIVFRQLzEuMFwiLiAgQSBtYXhpbXVtIG9mIGVpZ2h0IGhlYWRlcnMi LAotIiAgbWF5IGJlIHNwZWNpZmllZC4iLAotIiAiLAotIi9UT1NDUkVFTiIsCi0iICBEaXNwbGF5 IHNlcnZlciByZXNwb25zZXMgb24gdGhlIHNjcmVlbi4iLAotIiAiLAotIi9VU0VSOjxuYW1lPiIs Ci0iICBJbiBjYXNlIGEgcGFnZSByZXF1aXJlcyBhIHVzZXJuYW1lIGZvciBhY2Nlc3MuIiwKLSIg IiwKLSIvUEFTU1dPUkQ6PHBhc3N3b3JkPiIsCi0iICBJbiBjYXNlIGEgcGFnZSByZXF1aXJlcyBh IHBhc3N3b3JkIGZvciBhY2Nlc3MuIiwKLSIgIiwKLSIvQVJSQVk6PGFycmF5bmFtZT4iLAotIiAg VGVsbHMgS2VybWl0IHRvIHN0b3JlIHRoZSByZXNwb25zZSBoZWFkZXJzIGluIHRoZSBnaXZlbiBh cnJheSwgb25lIGxpbmUiLAotIiAgcGVyIGVsZW1lbnQuICBUaGUgYXJyYXkgbmVlZCBub3QgYmUg ZGVjbGFyZWQgaW4gYWR2YW5jZS4gIEV4YW1wbGU6IiwKLSIgIiwKLSIgICAgaHR0cCAvYXJyYXk6 YyBnZXQga2VybWl0L2luZGV4Lmh0bWwiLAotIiAgICBzaG93IGFycmF5IGMiLAotIiAgICBEaW1l bnNpb24gPSA5IiwKLSIgICAgMS4gRGF0ZTogRnJpLCAyNiBOb3YgMTk5OSAyMzoxMjoyMiBHTVQi LAotIiAgICAyLiBTZXJ2ZXI6IEFwYWNoZS8xLjMuNCAoVW5peCkiLAotIiAgICAzLiBMYXN0LU1v ZGlmaWVkOiBNb24sIDA2IFNlcCAxOTk5IDIyOjM1OjU4IEdNVCIsCi0iICAgIDQuIEVUYWc6IFwi YmMwNDktZjcyLTM3ZDQ0MWNlXCIiLAotIiAgICA1LiBBY2NlcHQtUmFuZ2VzOiBieXRlcyIsCi0i ICAgIDYuIENvbnRlbnQtTGVuZ3RoOiAzOTU0IiwKLSIgICAgNy4gQ29ubmVjdGlvbjogY2xvc2Ug ICAgICIsCi0iICAgIDguIENvbnRlbnQtVHlwZTogdGV4dC9odG1sIiwKLSIgIiwKLSJBcyB5b3Ug Y2FuIHNlZSwgdGhlIGhlYWRlciBsaW5lcyBhcmUgbGlrZSBNSU1FIGUtbWFpbCBoZWFkZXIgbGlu ZXM6IiwKLSJpZGVudGlmaWVyLCBjb2xvbiwgdmFsdWUuICBUaGUgL0FSUkFZIHN3aXRjaCBpcyB0 aGUgb25seSBtZXRob2QgYXZhaWxhYmxlIiwKLSJ0byBhIHNjcmlwdCB0byBwcm9jZXNzIHRoZSBz ZXJ2ZXIgcmVzcG9uc2VzIGZvciBhIFBPU1Qgb3IgUFVUIGNvbW1hbmQuIiwKLSIgIiwKLSIiCi19 OwotI2VuZGlmIC8qIE5PSFRUUCAqLwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLXN0YXRpYyBjaGFy ICpobXh4YXV0aFtdID0gewotIlN5bnRheDoiLAotIkFVVEhFTlRJQ0FURSB7IEtFUkJFUk9TNCwg S0VSQkVST1M1IFsgc3dpdGNoZXMgXSB9IDxhY3Rpb24+IFsgc3dpdGNoZXMgXSIsCi0iICBPYnRh aW5zIG9yIGRlc3Ryb3lzIEtlcmJlcm9zIHRpY2tldHMgYW5kIGxpc3RzIGluZm9ybWF0aW9uIGFi b3V0IHRoZW0uIiwKLSIgIEFjdGlvbnMgYXJlIElOSVRJQUxJWkUsIERFU1RST1ksIGFuZCBMSVNU LUNSRURFTlRJQUxTLiAgS0VSQkVST1M0IGNhbiBiZSIsCi0iICBhYmJyZXZpYXRlZCBLNCBvciBL UkI0OyBLRVJCRVJPUzUgY2FuIGJlIGFiYnJldmlhdGVkIEs1IG9yIEtSQjUuICBVc2UgPyB0byIs Ci0iICBzZWUgd2hpY2gga2V5d29yZHMsIHN3aXRjaGVzLCBvciBvdGhlciBxdWFudGl0aWVzIGFy ZSB2YWxpZCBhdCBlYWNoIHBvaW50IiwKLSIgIGluIHRoZSBjb21tYW5kLiIsCi0iICIsCi0iICBU aGUgYWN0aW9ucyBhcmUgSU5JVElBTElaRSwgREVTVFJPWSwgYW5kIExJU1QtQ1JFREVOVElBTFM6 IiwKLSIgIiwKLSIgICAgQVVUSCB7IEs0LCBLNSB9IHsgSU5JVElBTElaRSBbc3dpdGNoZXNdLCBE RVNUUk9ZLCIsCi0iICAgICAgTElTVC1DUkVERU5USUFMUyBbc3dpdGNoZXNdIH0iLAotIiAiLAot IiAgVGhlIElOSVRJQUxJWkUgYWN0aW9uIGlzIHRoZSBtb3N0IGNvbXBsZXgsIGFuZCBpdHMgZm9y bWF0IGlzIGRpZmZlcmVudCIsCi0iICBmb3IgS2VyYmVyb3MgNCBhbmQgS2VyYmVyb3MgNS4gIFRo ZSBmb3JtYXQgZm9yIEtlcmJlcm9zIDQgaXM6IiwKLSIgIiwKLSIgIEFVVEggSzQgSU5JVElBTEla RSBbIC9JTlNUQU5DRTo8bmFtZT4gL0xJRkVUSU1FOjxtaW51dGVzPiAtIiwKLSIgICAgL1BBU1NX T1JEOjxwYXNzd29yZD4gL1BSRUFVVEggL1JFQUxNOjxuYW1lPiA8cHJpbmNpcGFsPiBdIiwKLSIg IiwKLSIgIEFsbCBzd2l0Y2hlcyBhcmUgb3B0aW9uYWwuICBLZXJiZXJvcyA0IElOSVRJQUxJWkUg c3dpdGNoZXMgYXJlOiIsCi0iICIsCi0iICAvSU5TVEFOQ0U6PG5hbWU+IiwKLSIgICAgQWxsb3dz IGFuIEluc3RhbmNlIChzdWNoIGFzIGEgaG9zdG5hbWUpIHRvIGJlIHNwZWNpZmllZC4iLAotIiAi LAotIiAgL0xJRkVUSU1FOjxudW1iZXI+IiwKLSIgICAgU3BlY2lmaWVzIHRoZSByZXF1ZXN0ZWQg bGlmZXRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHRpY2tldC4gIElmIG5vIiwKLSIgICAgbGlmZXRp bWUgaXMgc3BlY2lmaWVkLCA2MDAgbWludXRlcyBpcyB1c2VkLiAgSWYgdGhlIGxpZmV0aW1lIGlz IGdyZWF0ZXIiLAotIiAgICB0aGFuIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgdGlja2V0 IGdyYW50aW5nIHNlcnZpY2UsIHRoZSByZXN1bHRpbmciLAotIiAgICBsaWZldGltZSBpcyBzaG9y dGVuZWQgYWNjb3JkaW5nbHkuIiwKLSIgIiwKLSIgIC9OT1QtUFJFQVVUSCIsCi0iICAgIEluc3Ry dWN0cyBLZXJtaXQgdG8gc2VuZCBhIHRpY2tldCBnZXR0aW5nIHRpY2tldCAoVEdUKSByZXF1ZXN0 IHRvIHRoZSIsCi0iICAgIEtEQyB3aXRob3V0IGFueSBwcmVhdXRoZW50aWNhdGlvbiBkYXRhLiIs Ci0iICIsCi0iICAvUEFTU1dPUkQ6PHN0cmluZz4iLAotIiAgICBBbGxvd3MgYSBwYXNzd29yZCB0 byBiZSBpbmNsdWRlZCBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGluIGEgc2NyaXB0IiwKLSIgICAg ZmlsZS4gIElmIG5vIC9QQVNTV09SRCBzd2l0Y2ggaXMgaW5jbHVkZWQsIHlvdSBhcmUgcHJvbXB0 ZWQgb24gYSBzZXBhcmF0ZSIKLSwKLSIgICAgbGluZS4gIFRoZSBwYXNzd29yZCBzd2l0Y2ggaXMg cHJvdmlkZWQgb24gYSB1c2UtYXQteW91ci1vd24tcmlzayBiYXNpcyIsCi0iICAgIGZvciB1c2Ug aW4gYXV0b21hdGVkIHNjcmlwdHMuICBXQVJOSU5HOiBQYXNzd29yZHMgc2hvdWxkIG5vdCBiZSBz dG9yZWQgaW4iCi0sCi0iICAgIGZpbGVzLiIsCi0iICIsCi0iICAvUFJFQVVUSCIsCi0iICAgIElu c3RydWN0cyBLZXJtaXQgdG8gc2VuZCBhIHByZWF1dGhlbnRpY2F0ZWQgVGlja2V0LUdldHRpbmcg VGlja2V0IChUR1QpIiwKLSIgICAgcmVxdWVzdCB0byB0aGUgS0RDIGluc3RlYWQgb2YgYSBwbGFp bnRleHQgcmVxdWVzdC4gIFRoZSBkZWZhdWx0IHdoZW4iLAotIiAgICBzdXBwb3J0ZWQgYnkgdGhl IEtlcmJlcm9zIGxpYnJhcmllcy4iLAotIiAiLAotIiAgL1JFQUxNOjxuYW1lPiIsCi0iICAgIEFs bG93cyBhIHJlYWxtIHRvIGJlIHNwZWNpZmllZCAob3ZlcnJpZGluZyB0aGUgZGVmYXVsdCByZWFs bSkuIiwKLSIgIiwKLSIgIDxwcmluY2lwYWw+IiwKLSIgICAgWW91ciBpZGVudGl0eSBpbiB0aGUg Z2l2ZW4gb3IgZGVmYXVsdCBLZXJiZXJvcyByZWFsbSwgb2YgdGhlIGZvcm06IiwKLSIgICAgdXNl cmlkWy5pbnN0YW5jZVsuaW5zdGFuY2VdXUBbcmVhbG1dICAiLAotIiAgICBDYW4gYmUgb21pdHRl ZCBpZiBpdCBpcyB0aGUgc2FtZSBhcyB5b3VyIHVzZXJuYW1lIG9yIFNFVCBMT0dJTiBVU0VSSUQi LAotIiAgICB2YWx1ZSBvbiB0aGUgY2xpZW50IHN5c3RlbS4iLAotIiAiLAotIiAgVGhlIGZvcm1h dCBmb3IgS2VyYmVyb3MgNSBpcyBhcyBmb2xsb3dzOiIsCi0iICIsCi0iICBBVVRIIEs1IFsgL0NB Q0hFOjxmaWxlbmFtZT4gXSB7IElOSVRJQUxJWkUgWyBzd2l0Y2hlcyBdLCBERVNUUk9ZLCIsCi0i ICAgIExJU1QtQ1JFREVOVElBTFMgLi4ufSIsCi0iICIsCi0iVGhlIElOSVRJQUxJWkUgY29tbWFu ZCBmb3IgS2VyYmVyb3MgNSBjYW4gaW5jbHVkZSBhIG51bWJlciBvZiBzd2l0Y2hlczsiLAotImFs bCBhcmUgb3B0aW9uYWw6IiwKLSIgIiwKLSJBVVRIIEs1IFsgL0NBQ0hFOjxmaWxlbmFtZT4gXSBJ TklUSVRJQUxJWkUgWyAvQUREUkVTU0VTOjxhZGRyLWxpc3Q+IiwKLSIgIC9GT1JXQVJEQUJMRSAv S0VSQkVST1M0IC9MSUZFVElNRTo8bWludXRlcz4gL1BBU1NXT1JEOjxwYXNzd29yZD4iLAotIiAg L1BPU1REQVRFOjxkYXRlLXRpbWU+IC9QUk9YSUFCTEUgL1JFQUxNOjxuYW1lPiAvUkVORVcgL1JF TkVXQUJMRTo8bWludXRlcz4iLAotIiAgL1NFUlZJQ0U6PG5hbWU+IC9WQUxJREFURSA8cHJpbmNp cGFsPiBdIiwKLSIgIiwKLSIgIEFsbCBLZXJiZXJvcyA1IElOSVRJQUxJWkUgc3dpdGNoZXMgYXJl IG9wdGlvbmFsOiIsCi0iICIsCi0iICAvQUREUkVTU0VTOntsaXN0IG9mIGlwLWFkZHJlc3Nlc30i LAotIiAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIElQIGFkZHJlc3NlcyB0aGF0IHNob3VsZCBiZSBw bGFjZWQgaW4gdGhlIFRpY2tldCIsCi0iICAgIEdldHRpbmcgVGlja2V0IGluIGFkZGl0aW9uIHRv IHRoZSBsb2NhbCBtYWNoaW5lIGFkZHJlc3Nlcy4iLAotIiAiLAotIiAgL0ZPUldBUkRBQkxFIiwK LSIgICAgUmVxdWVzdHMgZm9yd2FyZGFibGUgdGlja2V0cy4iLAotIiAiLAotIiAgL0lOU1RBTkNF OjxuYW1lPiIsCi0iICAgIEFsbG93cyBhbiBJbnN0YW5jZSAoc3VjaCBhcyBhIGhvc3RuYW1lKSB0 byBiZSBzcGVjaWZpZWQuIiwKLSIgIiwKLSIgIC9LRVJCRVJPUzQiLAotIiAgICBJbnN0cnVjdHMg S2VybWl0IHRvIGdldCBLZXJiZXJvcyA0IHRpY2tldHMgaW4gYWRkaXRpb24gdG8gS2VyYmVyb3Mg NSIsCi0iICAgIHRpY2tldHMuICBJZiBLZXJiZXJvcyA1IHRpY2tldHMgYXJlIG5vdCBzdXBwb3J0 ZWQgYnkgdGhlIHNlcnZlciwgYSIsCi0iICAgIG1pbGQgd2FybmluZyBpcyBwcmludGVkIGFuZCBL ZXJiZXJvcyA0IHRpY2tldHMgYXJlIHJlcXVlc3RlZC4iLAotIiAiLAotIiAgL0xJRkVUSU1FOjxu dW1iZXI+IiwKLSIgICAgU3BlY2lmaWVzIHRoZSByZXF1ZXN0ZWQgbGlmZXRpbWUgaW4gbWludXRl cyBmb3IgdGhlIHRpY2tldC4gIElmIG5vIiwKLSIgICAgbGlmZXRpbWUgaXMgc3BlY2lmaWVkLCA2 MDAgbWludXRlcyBpcyB1c2VkLiAgSWYgdGhlIGxpZmV0aW1lIGlzIGdyZWF0ZXIiLAotIiAgICB0 aGFuIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgdGlja2V0IGdyYW50aW5nIHNlcnZpY2Us IHRoZSByZXN1bHRpbmciLAotIiAgICBsaWZldGltZSBpcyBzaG9ydGVuZWQuIiwKLSIgIiwKLSIg IC9OTy1LRVJCRVJPUzQiLAotIiAgICBJbnN0cnVjdHMgS2VybWl0IHRvIG5vdCBhdHRlbXB0IHRv IHJldHJpZXZlIEtlcmJlcm9zIDQgY3JlZGVudGlhbHMuIiwKLSIgIiwKLSIgIC9OT1QtRk9SV0FS REFCTEUiLAotIiAgICBSZXF1ZXN0cyBub24tZm9yd2FyZGFibGUgdGlja2V0cy4iLAotIiAiLAot IiAgL05PVC1QUk9YSUFCTEUiLAotIiAgICBSZXF1ZXN0cyBub24tcHJveGlhYmxlIHRpY2tldHMu IiwKLSIgIiwKLSIgIC9QQVNTV09SRDo8c3RyaW5nPiIsCi0iICAgIEFsbG93cyBhIHBhc3N3b3Jk IHRvIGJlIGluY2x1ZGVkIG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgaW4gYSBzY3JpcHQiLAotIiAg ICBmaWxlLiAgSWYgbm8gL1BBU1NXT1JEIHN3aXRjaCBpcyBpbmNsdWRlZCwgeW91IGFyZSBwcm9t cHRlZCBvbiBhIHNlcGFyYXRlIgotLAotIiAgICBsaW5lLiAgVGhlIHBhc3N3b3JkIHN3aXRjaCBp cyBwcm92aWRlZCBvbiBhIHVzZS1hdC15b3VyLW93bi1yaXNrIGJhc2lzIiwKLSIgICAgZm9yIHVz ZSBpbiBhdXRvbWF0ZWQgc2NyaXB0cy4gIFdBUk5JTkc6IFBhc3N3b3JkcyBzaG91bGQgbm90IGJl IHN0b3JlZCBpbiIKLSwKLSIgICAgZmlsZXMuIiwKLSIgIiwKLSIgIC9QT1NUREFURTo8ZGF0ZS10 aW1lPiIsCi0iICAgIFJlcXVlc3RzIGEgcG9zdGRhdGVkIHRpY2tldCwgdmFsaWQgc3RhcnRpbmcg YXQgPGRhdGUtdGltZT4uICBQb3N0ZGF0ZWQiLAotIiAgICB0aWNrZXRzIGFyZSBpc3N1ZWQgd2l0 aCB0aGUgaW52YWxpZCBmbGFnIHNldCwgYW5kIG5lZWQgdG8gYmUgZmVkIGJhY2sgdG8iLAotIiAg ICB0aGUgS0RDIGJlZm9yZSB1c2Ugd2l0aCB0aGUgL1ZBTElEQVRFIHN3aXRjaC4gIFR5cGUgSEVM UCBEQVRFIGZvciBpbmZvIiwKLSIgICAgb24gZGF0ZS10aW1lIGZvcm1hdHMuIiwKLSIgIiwKLSIg IC9QUk9YSUFCTEUiLAotIiAgICBSZXF1ZXN0cyBwcm94aWFibGUgdGlja2V0cy4iLAotIiAiLAot IiAgL1JFQUxNOjxzdHJpbmc+IiwKLSIgICAgQWxsb3dzIGFuIGFsdGVybmF0aXZlIHJlYWxtIHRv IGJlIHNwZWNpZmllZC4iLAotIiAiLAotIiAgL1JFTkVXIiwKLSIgICAgUmVxdWVzdHMgcmVuZXdh bCBvZiBhIHJlbmV3YWJsZSBUaWNrZXQtR3JhbnRpbmcgVGlja2V0LiAgTm90ZSB0aGF0ICIsCi0i ICAgIGFuIGV4cGlyZWQgdGlja2V0IGNhbm5vdCBiZSByZW5ld2VkIGV2ZW4gaWYgaXQgaXMgd2l0 aGluIGl0cyByZW5ld2FibGUgIiwKLSIgICAgbGlmZXRpbWUuIiwKLSIgIiwKLSIgIC9SRU5FV0FC TEU6PG51bWJlcj4iLAotIiAgICBSZXF1ZXN0cyByZW5ld2FibGUgdGlja2V0cywgd2l0aCBhIHRv dGFsIGxpZmV0aW1lIG9mIDxudW1iZXI+IG1pbnV0ZXMuIiwKLSIgIiwKLSIgIC9TRVJWSUNFOjxz dHJpbmc+IiwKLSIgICAgQWxsb3dzIGEgc2VydmljZSBvdGhlciB0aGFuIHRoZSB0aWNrZXQgZ3Jh bnRpbmcgc2VydmljZSB0byBiZSBzcGVjaWZpZWQuIiwKLSIgIiwKLSIgIC9WQUxJREFURSIsCi0i ICAgIFJlcXVlc3RzIHRoYXQgdGhlIFRpY2tldCBHcmFudGluZyBUaWNrZXQgaW4gdGhlIGNhY2hl ICh3aXRoIHRoZSBpbnZhbGlkIiwKLSIgICAgZmxhZyBzZXQpIGJlIHBhc3NlZCB0byB0aGUgS0RD IGZvciB2YWxpZGF0aW9uLiAgSWYgdGhlIHRpY2tldCBpcyB3aXRoaW4iLAotIiAgICBpdHMgcmVx dWVzdGVkIHRpbWUgcmFuZ2UsIHRoZSBjYWNoZSBpcyByZXBsYWNlZCB3aXRoIHRoZSB2YWxpZGF0 ZWQiLAotIiAgICB0aWNrZXQuIiwKLSIgIiwKLSIgIDxwcmluY2lwYWw+IiwKLSIgICAgWW91ciBp ZGVudGl0eSBpbiB0aGUgZ2l2ZW4gb3IgZGVmYXVsdCBLZXJiZXJvcyByZWFsbSwgb2YgdGhlIGZv cm06IiwKLSIgICAgdXNlcmlkWy9pbnN0YW5jZV1bQHJlYWxtXSAgIiwKLSIgICAgQ2FuIGJlIG9t aXR0ZWQgaWYgaXQgaXMgdGhlIHNhbWUgYXMgeW91ciB1c2VybmFtZSBvciBTRVQgTE9HSU4gVVNF UklEIiwKLSIgICAgdmFsdWUgb24gdGhlIGNsaWVudCBzeXN0ZW0uIiwKLSIgIiwKLSIgIE5vdGU6 IEtlcmJlcm9zIDUgYWx3YXlzIGF0dGVtcHRzIHRvIHJldHJpZXZlIGEgVGlja2V0LUdldHRpbmcg VGlja2V0IChUR1QpIiwKLSIgIHVzaW5nIHRoZSBwcmVhdXRoZW50aWNhdGVkIFRHVCByZXF1ZXN0 LiIsCi0iICIsCi0iICBBVVRIT1JJWkUgSzUgTElTVC1DUkVERU5USUFMUyBbIC9BRERSRVNTRVMg L0ZMQUdTIC9FTkNSWVBUSU9OIF0iLAotIiAiLAotIiAgU2hvd3Mgc3RhcnQgdGltZSwgZXhwaXJh dGlvbiB0aW1lLCBzZXJ2aWNlIG9yIHByaW5jaXBhbCBuYW1lLCBwbHVzIiwKLSIgIHRoZSBmb2xs b3dpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBkZXBlbmRpbmcgdGhlIHN3aXRjaGVzOiIsCi0i ICIsCi0iICAvQUREUkVTU0VTIGRpc3BsYXlzIHRoZSBob3N0bmFtZXMgYW5kL29yIElQIGFkZHJl c3NlcyBlbWJlZGRlZCB3aXRoaW4iLAotIiAgICB0aGUgdGlja2V0cy4iLAotIiAiLAotIiAgL0ZM QUdTIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gKGlmIGFwcGxpY2FibGUpIGZv ciBlYWNoIHRpY2tldDoiLAotIiAgICBGIC0gVGlja2V0IGlzIEZvcndhcmRhYmxlIiwKLSIgICAg ZiAtIFRpY2tldCB3YXMgRm9yd2FyZGVkIiwKLSIgICAgUCAtIFRpY2tldCBpcyBQcm94aWFibGUi LAotIiAgICBwIC0gVGlja2V0IGlzIGEgUHJveHkiLAotIiAgICBEIC0gVGlja2V0IG1heSBiZSBQ b3N0ZGF0ZWQiLAotIiAgICBkIC0gVGlja2V0IGhhcyBiZWVuIFBvc3RkYXRlZCIsCi0iICAgIGkg LSBUaWNrZXQgaXMgSW52YWxpZCIsCi0iICAgIFIgLSBUaWNrZXQgaXMgUmVuZXdhYmxlIiwKLSIg ICAgSSAtIFRpY2tldCBpcyB0aGUgSW5pdGlhbCBUaWNrZXQiLAotIiAgICBIIC0gVGlja2V0IGhh cyBiZWVuIGF1dGhlbnRpY2F0ZWQgYnkgSGFyZHdhcmUiLAotIiAgICBBIC0gVGlja2V0IGhhcyBi ZWVuIFByZS1hdXRoZW50aWNhdGVkIiwKLSIgIiwKLSIgIC9FTkNSWVBUSU9OIGRpc3BsYXlzIHRo ZSBlbmNyeXB0aW9uIHVzZWQgYnkgZWFjaCB0aWNrZXQgKGlmIGFwcGxpY2FibGUpOiIsCi0iICAg IERFUy1DQkMtQ1JDIiwKLSIgICAgREVTLUNCQy1NRDQiLAotIiAgICBERVMtQ0JDLU1ENSIsCi0i ICAgIERFUzMtQ0JDLVNIQSIsCi0iIgotfTsKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0j aWZuZGVmIE5PQ1NFVFMKLXN0YXRpYyBjaGFyICpobXh4YXNzb2NbXSA9IHsKLSJBU1NPQ0lBVEUg RklMRS1DSEFSQUNURVItU0VUIDxmaWxlLWNoYXJhY3Rlci1zZXQ+IDx0cmFuc2Zlci1jaGFyYWN0 ZXItc2V0PiIsCi0iICBUZWxscyBDLUtlcm1pdCB0aGF0IHdoZW5ldmVyIHRoZSBnaXZlbiBmaWxl LWNoYXJhY3RlciBzZXQgaXMgc2VsZWN0ZWQsIGFuZCIsCi0iICBTRU5EIENIQVJBQ1RFUi1TRVQg KHEudi4pIGlzIEFVVE9NQVRJQywgdGhlIGdpdmVuIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQiLAot IiAgaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseS4iLAotIiAiLAotIkFTU09DSUFURSBYRkVSLUNI QVJBQ1RFUi1TRVQgPHhmZXItY2hhcmFjdGVyLXNldD4gPGZpbGUtY2hhcmFjdGVyLXNldD4iLAot IiAgVGVsbHMgQy1LZXJtaXQgdGhhdCB3aGVuZXZlciB0aGUgZ2l2ZW4gdHJhbnNmZXItY2hhcmFj dGVyIHNldCBpcyBzZWxlY3RlZCwiLAotIiAgZWl0aGVyIGJ5IGNvbW1hbmQgb3IgYnkgYW4gYW5u b3VuY2VyIGF0dGFjaGVkIHRvIGFuIGluY29taW5nIHRleHQgZmlsZSwiLAotIiAgYW5kIFNFTkQg Q0hBUkFDVEVSLVNFVCBpcyBBVVRPTUFUSUMsIHRoZSBzcGVjaWZpZWQgZmlsZSBjaGFyYWN0ZXIt c2V0IGlzIiwKLSIgIHRvIGJlIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkuICBTeW5vbnltOiBBU1NP Q0lBVEUgVFJBTlNGRVItQ0hBUkFDVEVSLVNFVC4iLAotIiAiLAotIlVzZSBTSE9XIEFTU09DSUFU SU9OUyB0byBsaXN0IHRoZSBjdXJyZW50IGNoYXJhY3Rlci1zZXQgYXNzb2NpYXRpb25zLCBhbmQi LAotIlNIT1cgQ0hBUkFDVEVSLVNFVFMgdG8gbGlzdCB0aGUgY3VycmVudCBzZXR0aW5ncy4iLAot IiIKLX07Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi1zdGF0aWMgY2hhciAqaG14eHBhdFtdID0g ewotIkEgXCJwYXR0ZXJuXCIgaXMgbm90YXRpb24gdXNlZCBpbiBhIHNlYXJjaCBzdHJpbmcgd2hl biBzZWFyY2hpbmcgdGhyb3VnaCIsCi0idGV4dC4gIEMtS2VybWl0IHVzZXMgdGhyZWUga2luZHMg b2YgcGF0dGVybnM6IGZsb2F0aW5nIHBhdHRlcm5zLCBhbmNob3JlZCIsCi0icGF0dGVybnMsIGFu ZCB3aWxkY2FyZHMuICBXaWxkY2FyZHMgYXJlIGFuY2hvcmVkIHBhdHRlcm5zIHRoYXQgYXJlIHVz ZWQgdG8iLAotIm1hdGNoIGZpbGUgbmFtZXM7IHR5cGUgSEVMUCBXSUxEQ0FSRCB0byBsZWFybiBh Ym91dCB0aGVtLiIsCi0iICIsCi0iSW4gYSBwYXR0ZXJuLCBjZXJ0YWluIGNoYXJhY3RlcnMgYXJl IHNwZWNpYWw6IiwKLSIgIiwKLSIqIE1hdGNoZXMgYW55IHNlcXVlbmNlIG9mIHplcm8gb3IgbW9y ZSBjaGFyYWN0ZXJzLiAgRm9yIGV4YW1wbGUsIFwiayp0XCIiLAotIiAgbWF0Y2hlcyBhbGwgc3Ry aW5ncyB0aGF0IHN0YXJ0IHdpdGggXCJrXCIgYW5kIGVuZCB3aXRoIFwidFwiIGluY2x1ZGluZyIs Ci0iICBcImt0XCIsIFwia2l0XCIsIFwia25pZ2h0XCIsIG9yIFwia2VybWl0XCIuIiwKLSIgIiwK LSNpZmRlZiBWTVMKLSIlIE1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIuICBGb3IgZXhhbXBs ZSwgXCJrJSUlJXRcIiBtYXRjaGVzIGFsbCBzdHJpbmdzIiwKLSNlbHNlCi0iPyBNYXRjaGVzIGFu eSBzaW5nbGUgY2hhcmFjdGVyLiAgRm9yIGV4YW1wbGUsIFwiaz8/Pz90XCIgbWF0Y2hlcyBhbGwg c3RyaW5ncyIsCi0jZW5kaWYgLyogVk1TICovCi0iICB0aGF0IGFyZSBleGFjdGx5IDYgY2hhcmFj dGVycyBsb25nIGFuZCBzdGFydCB3aXRoIFwia1wiIGFuZCBlbmQgd2l0aCIsCi0jaWZkZWYgVk1T Ci0iICB3aXRoIFwidFwiLiIsCi0jZWxzZQotIiAgd2l0aCBcInRcIi4gIFdoZW4gdHlwaW5nIGNv bW1hbmRzIGF0IHRoZSBwcm9tcHQsIHlvdSBtdXN0IHByZWNlZGUgYW55IiwKLSIgIHF1ZXN0aW9u IG1hcmsgdG8gYmUgdXNlZCBmb3IgbWF0Y2hpbmcgYnkgYSBiYWNrc2xhc2ggKFxcKSB0byBvdmVy cmlkZSB0aGUiLAotIiAgbm9ybWFsIGZ1bmN0aW9uIG9mIHF1ZXN0aW9uIG1hcmsgaW4gaW50ZXJh Y3RpdmUgY29tbWFuZHMsIHdoaWNoIGlzIHRvIiwKLSIgIHByb3ZpZGUgbWVudXMgYW5kIGZpbGUg bGlzdHMuIiwKLSNlbmRpZiAvKiBWTVMgKi8KLSIgIiwKLSNpZmRlZiBPUzJPUlVOSVgKLSNpZmRl ZiBDS1JFR0VYCi0iW2FiY10iLAotIiAgU3F1YXJlIGJyYWNrZXRzIGVuY2xvc2luZyBhIGxpc3Qg b2YgY2hhcmFjdGVycyBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgaW4iLAotIiAgdGhlIGxpc3QuICBF eGFtcGxlOiBoW2FvdV10IG1hdGNoZXMgaGF0LCBob3QsIGFuZCBodXQuIiwKLSIgIiwKLSJbYS16 XSIsCi0iICBTcXVhcmUgYnJhY2tldHMgZW5jbG9zaW5nIGEgcmFuZ2Ugb2YgY2hhcmFjdGVycyBt YXRjaGVzIGFueSBjaGFyYWN0ZXIgaW4iLAotIiAgdGhlIHJhbmdlOyBhIGh5cGhlbiAoLSkgc2Vw YXJhdGVzIHRoZSBsb3cgYW5kIGhpZ2ggZWxlbWVudHMgb2YgdGhlIHJhbmdlLiIsCi0iICBGb3Ig ZXhhbXBsZSwgW2Etel0gbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGZyb20gYSB0byB6LiIsCi0iICIs Ci0iW2FjZG0tel0iLAotIiAgTGlzdHMgYW5kIHJhbmdlcyBtYXkgYmUgY29tYmluZWQuICBUaGlz IGV4YW1wbGUgbWF0Y2hlcyBhLCBjLCBkLCBvciBhbnkiLAotIiAgbGV0dGVyIGZyb20gbSB0aHJv dWdoIHouIiwKLSIgIiwKLSJ7c3RyaW5nMSxzdHJpbmcyLC4uLn0iLAotIiAgQnJhY2VzIGVuY2xv c2UgYSBsaXN0IG9mIHN0cmluZ3MgdG8gYmUgbWF0Y2hlZC4gIEZvciBleGFtcGxlOiIsCi0iICBr ZXJ7bWl0LG5lbCxiZXJvc30gbWF0Y2hlcyBrZXJtaXQsIGtlcm5lbCwgYW5kIGtlcmJlcm9zLiAg VGhlIHN0cmluZ3MiLAotIiAgbWF5IHRoZW1zZWx2ZXMgY29udGFpbiAqLCA/LCBbYWJjXSwgW2Et el0sIG9yIG90aGVyIGxpc3RzIG9mIHN0cmluZ3MuIiwKLSNlbmRpZiAvKiBDS1JFR0VYICovCi0j ZW5kaWYgLyogT1MyT1JVTklYICovCi0jaWZuZGVmIE5PU1BMCi0iICIsCi0iVG8gZm9yY2UgYSBz cGVjaWFsIHBhdHRlcm4gY2hhcmFjdGVyIHRvIGJlIHRha2VuIGxpdGVyYWxseSwgcHJlY2VkZSBp dCB3aXRoIiwKLSJhIGJhY2tzbGFzaCwgZS5nLiBbYVxcLXpdIG1hdGNoZXMgYSwgaHlwaGVuLCBv ciB6IHJhdGhlciB0aGFuIGEgdGhyb3VnaCB6LiIsCi0iICIsCi0iQSBmbG9hdGluZyAgcGF0dGVy biBjYW4gYWxzbyBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzOiIsCi0i ICIsCi0iXiAoRmlyc3QgY2hhcmFjdGVyIG9mIHBhdHRlcm4pIEFuY2hvcnMgdGhlIHBhdHRlcm4g YXQgdGhlIGJlZ2lubmluZy4iLAotIiQgKExhc3QgY2hhcmFjdGVyIG9mIHBhdHRlcm4pIEFuY2hv cnMgdGhlIHBhdHRlcm4gYXQgdGhlIGVuZC4iLAotIiAiLAotIklmIGEgZmxvYXRpbmcgcGF0dGVy biBkb2VzIG5vdCBzdGFydCB3aXRoIFwiXlwiLCB0aGUgcGF0dGVybiBjYW4gbWF0Y2giLAotImFu eXdoZXJlIGluIHRoZSBzdHJpbmcgaW5zdGVhZCBvZiBvbmx5IGF0IHRoZSBiZWdpbm5pbmc7IGlu IG90aGVyIHdvcmRzLCBhIiwKLSJsZWFkaW5nIFwiKlwiIGlzIGFzc3VtZWQuICBTaW1pbGFybHks IGlmIHRoZSBwYXR0ZXJuIGRvZXNuJ3QgZW5kIHdpdGggXCIkXCIsIiwKLSJhIHRyYWlsaW5nIFwi KlwiIGlzIGFzc3VtZWQuIiwKLSIgIiwKLSJUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFuZCBmdW5j dGlvbnMgdXNlIGZsb2F0aW5nIHBhdHRlcm5zOiIsCi0iICBHUkVQIFsgPHN3aXRjaGVzPiBdIDxw YXR0ZXJuPiA8ZmlsZXNwZWM+IiwKLSIgIFRZUEUgL01BVENIOjxwYXR0ZXJuPiA8ZmlsZT4iLAot IiAgXFxmYXJyYXlsb29rKDxwYXR0ZXJuPiw8YXJyYXluYW1lPikiLAotIiAgXFxmc2VhcmNoKDxw YXR0ZXJuPiw8c3RyaW5nPlssPG9mZnNldD5dKSIsCi0iICBcXGZyc2VhcmNoKDxwYXR0ZXJuPiw8 c3RyaW5nPlssPG9mZnNldD5dKSIsCi0iICBUaGUgL0VYQ0VQVDogY2xhdXNlIGluIFNFTkQsIEdF VCwgREVMRVRFLCBldGMuIiwKLSIgIiwKLSJFeGFtcGxlOiIsCi0iICBcXGZzZWFyY2goYWJjLHh4 YWJjeHh4KSBzdWNjZWVkcyBiZWNhdXNlIHh4YWJjeHggY29udGFpbnMgYWJjLiIsCi0iICBcXGZz ZWFyY2goXmFiYyx4eGFiY3h4KSBmYWlscyBiZWNhdXNlIHh4YWJjeHggZG9lcyBub3Qgc3RhcnQg d2l0aCBhYmMuIiwKLSIgIiwKLQotIkFsbCBvdGhlciBjb21tYW5kcyBhbmQgZnVuY3Rpb25zIHVz ZSBhbmNob3JlZCBwYXR0ZXJucywgbWVhbmluZyB0aGF0IF4gYW5kICQiLAotImFyZSBub3QgdHJl YXRlZCBzcGVjaWFsbHksIGFuZCAqIGlzIG5vdCBhc3N1bWVkIGF0IHRoZSBiZWdpbm5pbmcgb3Ig ZW5kIG9mIiwKLSJ0aGUgcGF0dGVybi4gIFRoaXMgaXMgdHJ1ZSBtYWlubHkgb2YgZmlsZW5hbWUg cGF0dGVybnMgKHdpbGRjYXJkcyksIHNpbmNlIiwKLSJ5b3Ugd291bGQgbm90IHdhbnQgYSBjb21t YW5kIGxpa2UgXCJkZWxldGUgeFwiIHRvIGRlbGV0ZSBhbGwgZmlsZXMgd2hvc2UiLCAKLSJuYW1l cyBjb250YWluZWQgXCJ4XCIhIiwKLQotIiAiLAotIllvdSBjYW4gdXNlIGFuY2hvcmVkIHBhdHRl cm5zIG5vdCBvbmx5IGluIGZpbGVuYW1lcywgYnV0IGFsc28gaW4gU1dJVENIIiwKLSJjYXNlIGxh YmVscywgaW4gdGhlIElOUFVUIGFuZCBNSU5QVVQgY29tbWFuZHMsIGFuZCBpbiBmaWxlIGJpbmFy eS0gYW5kIiwKLSJ0ZXh0LXBhdHRlcm5zIGZvciBmaWxlbmFtZXMuICBUaGUgSUYgTUFUQ0ggcGF0 dGVybiBpcyBhbHNvIGFuY2hvcmVkLiIsCi0jZW5kaWYgLyogTk9TUEwgKi8KLSIiIH07Ci0KLXN0 YXRpYyBjaGFyICpobXh4d2lsZFtdID0gewotCi0iQSBcIndpbGRjYXJkXCIgaXMgYSBub3RhdGlv biB1c2VkIGluIGEgZmlsZW5hbWUgdG8gbWF0Y2ggbXVsdGlwbGUgZmlsZXMuIiwKLSJGb3IgZXhh bXBsZSwgaW4gXCJzZW5kICoudHh0XCIgdGhlIGFzdGVyaXNrIGlzIGEgd2lsZGNhcmQuICBLZXJt aXQgY29tbWFuZHMiLAotInRoYXQgYWNjZXB0IGZpbGVuYW1lcyBhbHNvIGFjY2VwdHMgd2lsZGNh cmRzLCBleGNlcHQgY29tbWFuZHMgdGhhdCBhcmUiLAotImFsbG93ZWQgdG8gb3BlcmF0ZSBvbiBv bmx5IG9uZSBmaWxlLCBzdWNoIGFzIFRSQU5TTUlULiIsCi0iVGhpcyB2ZXJzaW9uIG9mIEtlcm1p dCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgd2lsZGNhcmRzOiIsCi0iICIsCi0iKiBNYXRjaGVzIGFu eSBzZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycy4gIEZvciBleGFtcGxlLCBcImNr Ki5jXCIiLAotIiAgbWF0Y2hlcyBhbGwgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCBcImNr XCIgYW5kIGVuZCB3aXRoIFwiLmNcIiIsCi0iICBpbmNsdWRpbmcgXCJjay5jXCIuIiwKLSIgIiwK LSNpZmRlZiBWTVMKLSIlIE1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIuICBGb3IgZXhhbXBs ZSwgXCJjayUuY1wiIG1hdGNoZXMgYWxsIGZpbGVzIiwKLSNlbHNlCi0iPyBNYXRjaGVzIGFueSBz aW5nbGUgY2hhcmFjdGVyLiAgRm9yIGV4YW1wbGUsIFwiY2s/LmNcIiBtYXRjaGVzIGFsbCBmaWxl cyIsCi0jZW5kaWYgLyogVk1TICovCi0iICB3aG9zZSBuYW1lcyBhcmUgZXhhY3RseSA1IGNoYXJh Y3RlcnMgbG9uZyBhbmQgc3RhcnQgd2l0aCBcImNrXCIgYW5kIGVuZCIsCi0jaWZkZWYgVk1TCi0i ICB3aXRoIFwiLmNcIi4iLAotI2Vsc2UKLSIgIHdpdGggXCIuY1wiLiAgV2hlbiB0eXBpbmcgY29t bWFuZHMgYXQgdGhlIHByb21wdCwgeW91IG11c3QgcHJlY2VkZSBhbnkiLAotIiAgcXVlc3Rpb24g bWFyayB0byBiZSB1c2VkIGZvciBtYXRjaGluZyBieSBhIGJhY2tzbGFzaCAoXFwpIHRvIG92ZXJy aWRlIHRoZSIsCi0iICBub3JtYWwgZnVuY3Rpb24gb2YgcXVlc3Rpb24gbWFyayBpbiBpbnRlcmFj dGl2ZSBjb21tYW5kcywgd2hpY2ggaXMgdG8iLAotIiAgcHJvdmlkZSBtZW51cyBhbmQgZmlsZSBs aXN0cy4gIFlvdSBkb24ndCwgaG93ZXZlciwgbmVlZCB0byBxdW90ZSBmaWxlbmFtZSIsCi0iICBx dWVzdGlvbiBtYXJrcyBpbiBjb21tYW5kIGZpbGVzIChzY3JpcHQgcHJvZ3JhbXMpLiIsCi0jZW5k aWYgLyogVk1TICovCi0iICIsCi0jaWZkZWYgT1MyT1JVTklYCi0jaWZkZWYgQ0tSRUdFWAotIlth YmNdIiwKLSIgIFNxdWFyZSBicmFja2V0cyBlbmNsb3NpbmcgYSBsaXN0IG9mIGNoYXJhY3RlcnMg bWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGluIiwKLSIgIHRoZSBsaXN0LiAgRXhhbXBsZTogY2t1dXNy LltjaF0gbWF0Y2hlcyBja3V1c3IuYyBhbmQgY2t1dXNyLmguIiwKLSIgIiwKLSJbYS16XSIsCi0i ICBTcXVhcmUgYnJhY2tldHMgZW5jbG9zaW5nIGEgcmFuZ2Ugb2YgY2hhcmFjdGVycyBtYXRjaGVz IGFueSBjaGFyYWN0ZXIgaW4iLAotIiAgdGhlIHJhbmdlOyBhIGh5cGhlbiAoLSkgc2VwYXJhdGVz IHRoZSBsb3cgYW5kIGhpZ2ggZWxlbWVudHMgb2YgdGhlIHJhbmdlLiIsCi0iICBGb3IgZXhhbXBs ZSwgW2Etel0gbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGZyb20gYSB0byB6LiIsCi0iICIsCi0iW2Fj ZG0tel0iLAotIiAgTGlzdHMgYW5kIHJhbmdlcyBtYXkgYmUgY29tYmluZWQuICBUaGlzIGV4YW1w bGUgbWF0Y2hlcyBhLCBjLCBkLCBvciBhbnkiLAotIiAgbGV0dGVyIGZyb20gbSB0aHJvdWdoIHou IiwKLSIgIiwKLSJ7c3RyaW5nMSxzdHJpbmcyLC4uLn0iLAotIiAgQnJhY2VzIGVuY2xvc2UgYSBs aXN0IG9mIHN0cmluZ3MgdG8gYmUgbWF0Y2hlZC4gIEZvciBleGFtcGxlOiIsCi0iICBja3t1Zmlv LHZjb24sY21haX0uYyBtYXRjaGVzIGNrdWZpby5jLCBja3Zjb24uYywgb3IgY2tjbWFpLmMuICBU aGUgc3RyaW5ncyIsCi0iICBtYXkgdGhlbXNlbHZlcyBjb250YWluICosID8sIFthYmNdLCBbYS16 XSwgb3Igb3RoZXIgbGlzdHMgb2Ygc3RyaW5ncy4iLAotI2VuZGlmIC8qIENLUkVHRVggKi8KLSNl bmRpZiAvKiBPUzJPUlVOSVggKi8KLSIgIiwKLSJUbyBmb3JjZSBhIHNwZWNpYWwgcGF0dGVybiBj aGFyYWN0ZXIgdG8gYmUgdGFrZW4gbGl0ZXJhbGx5LCBwcmVjZWRlIGl0IHdpdGgiLAotImEgYmFj a3NsYXNoLCBlLmcuIFthXFwtel0gbWF0Y2hlcyBhLCBoeXBoZW4sIG9yIHogcmF0aGVyIHRoYW4g YSB0aHJvdWdoIHouIiwKLSJPciB0ZWxsIEtlcm1pdCB0byBTRVQgV0lMRENBUkQtRVhQQU5TSU9O IE9GRiBiZWZvcmUgZW50ZXJpbmcgb3IgcmVmZXJyaW5nIiwKLSJ0byB0aGUgZmlsZW5hbWUuIiwK LSIgIiwKLSNpZm5kZWYgTk9TUEwKLSJTaW1pbGFyIG5vdGF0aW9uIGNhbiBiZSB1c2VkIGluIGdl bmVyYWwtcHVycG9zZSBzdHJpbmcgbWF0Y2hpbmcuICBUeXBlIEhFTFAiLAotIlBBVFRFUk5TIGZv ciBkZXRhaWxzLiAgQWxzbyBzZWUgSEVMUCBTRVQgTUFUQ0guIiwKLSNlbmRpZiAvKiBOT1NQTCAq LwotIiIgfTsKLQotI2lmbmRlZiBOT1hGRVIKLXN0YXRpYyBjaGFyICpobXh4ZmFzdFtdID0gewot IkZBU1QsIENBVVRJT1VTLCBhbmQgUk9CVVNUIGFyZSBwcmVkZWZpbmVkIG1hY3JvcyB0aGF0IHNl dCBzZXZlcmFsIiwKLSJmaWxlLXRyYW5zZmVyIHBhcmFtZXRlcnMgYXQgb25jZSB0byBhY2hpZXZl IHRoZSBkZXNpcmVkIGZpbGUtdHJhbnNmZXIgZ29hbC4iLAotIkZBU1QgY2hvb3NlcyBhIGxhcmdl IHBhY2tldCBzaXplLCBhIGxhcmdlIHdpbmRvdyBzaXplLCBhbmQgYSBmYWlyIGFtb3VudCBvZiIs Ci0iY29udHJvbC1jaGFyYWN0ZXIgdW5wcmVmaXhpbmcgYXQgdGhlIHJpc2sgb2YgcG9zc2libGUg ZmFpbHVyZSBvbiBzb21lIiwKLSJjb25uZWN0aW9ucy4gIEZBU1QgaXMgdGhlIGRlZmF1bHQgdHVu aW5nIGluIEMtS2VybWl0IDcuMCBhbmQgbGF0ZXIuICBJbiBjYXNlIiwKLSJGQVNUIGZpbGUgdHJh bnNmZXJzIGZhaWwgZm9yIHlvdSBvbiBhIHBhcnRpY3VsYXIgY29ubmVjdGlvbiwgdHJ5IENBVVRJ T1VTLiIsCi0iSWYgdGhhdCBmYWlscyB0b28sIHRyeSBST0JVU1QuICBZb3UgY2FuIGFsc28gY2hh bmdlIHRoZSBkZWZpbml0aW9ucyBvZiBlYWNoIiwKLSJtYWNybyB3aXRoIHRoZSBERUZJTkUgY29t bWFuZC4gIFRvIHNlZSB0aGUgY3VycmVudCBkZWZpbml0aW9ucywgdHlwZSIsCi0iXCJzaG93IG1h Y3JvIGZhc3RcIiwgXCJzaG93IG1hY3JvIGNhdXRpb3VzXCIsIG9yIFwic2hvdyBtYWNybyByb2J1 c3RcIi4iLAotIiIKLX07Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBWTVMKLXN0YXRp YyBjaGFyICogaG14eHB1cmdlW10gPSB7Ci0iU3ludGF4OiBQVVJHRSBbIHN3aXRjaGVzIF0gWyBm aWxlc3BlYyBdIiwKLSIgIFJ1bnMgdGhlIERDTCBQVVJHRSBjb21tYW5kLiAgU3dpdGNoZXMgYW5k IGZpbGVzcGVjIGFyZSBub3QgcGFyc2VkIG9yIiwKLSIgIHZlcmlmaWVkIGJ5IEtlcm1pdCwgYnV0 IHBhc3NlZCBkaXJlY3RseSB0byBEQ0wuIiwKLSIiCi19OwotI2Vsc2UKLSNpZmRlZiBDS1BVUkdF Ci1zdGF0aWMgY2hhciAqIGhteHhwdXJnZVtdID0gewotIlN5bnRheDogUFVSR0UgWyBzd2l0Y2hl cyBdIFsgZmlsZXNwZWMgXSIsCi0iICBEZWxldGVzIGJhY2t1cCBmaWxlczsgdGhhdCBpcywgZmls ZXMgd2hvc2UgbmFtZXMgZW5kIGluIFwiLn5uflwiLCB3aGVyZSIsCi0iICBuIGlzIGEgbnVtYmVy LiAgUFVSR0UgYnkgaXRzZWxmIGRlbGV0ZXMgYWxsIGJhY2t1cCBmaWxlcyBpbiB0aGUgY3VycmVu dCIsCi0iICBkaXJlY3RvcnkuICBTd2l0Y2hlczoiLAotCi0iICIsCi0iL0FGVEVSOmRhdGUtdGlt ZSIsCi0jaWZkZWYgVk1TCi0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIGNyZWF0 ZWQgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGltZSBhcmUiLAotI2Vsc2UKLSIgIFNwZWNpZmllcyB0 aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGltZSBh cmUiLAotI2VuZGlmIC8qIFZNUyAqLwotIiAgdG8gYmUgcHVyZ2VkLiAgSEVMUCBEQVRFIGZvciBp bmZvIGFib3V0IGRhdGUtdGltZSBmb3JtYXRzLiIsCi0iICIsCi0iL0JFRk9SRTpkYXRlLXRpbWUi LAotI2lmZGVmIFZNUwotIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmll ZCBiZWZvcmUgdGhlIGdpdmVuIGRhdGUtdGltZSIsCi0jZWxzZQotIiAgU3BlY2lmaWVzIHRoYXQg b25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBiZWZvcmUgdGhlIGdpdmVuIGRhdGUtdGltZSIsCi0j ZW5kaWYgLyogVk1TICovCi0iICBhcmUgdG8gYmUgcHVyZ2VkLiIsCi0iICIsCi0iL05PVC1BRlRF UjpkYXRlLXRpbWUiLAotI2lmZGVmIFZNUwotIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBm aWxlcyBtb2RpZmllZCBhdCBvciBiZWZvcmUgdGhlIGdpdmVuIGRhdGUtdGltZSIsCi0jZWxzZQot IiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBhdCBvciBiZWZvcmUg dGhlIGdpdmVuIGRhdGUtdGltZSIsCi0jZW5kaWYgLyogVk1TICovCi0iICBhcmUgdG8gYmUgcHVy Z2VkLiIsCi0iICIsCi0iL05PVC1CRUZPUkU6ZGF0ZS10aW1lIiwKLSNpZmRlZiBWTVMKLSIgIFNw ZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYXQgb3IgYWZ0ZXIgdGhlIGdp dmVuIGRhdGUtdGltZSIsCi0jZWxzZQotIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxl cyBtb2RpZmllZCBhdCBvciBhZnRlciB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKLSNlbmRpZiAvKiBW TVMgKi8KLSIgIGFyZSB0byBiZSBwdXJnZWQuIiwKLSIgIiwKLSIvTEFSR0VSLVRIQU46bnVtYmVy IiwKLSIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbG9uZ2VyIHRoYW4gdGhlIGdp dmVuIG51bWJlciBvZiBieXRlcyBhcmUiLAotIiAgdG8gYmUgcHVyZ2VkLiIsCi0iICIsCi0iL1NN QUxMRVItVEhBTjpudW1iZXIiLAotIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBz bWFsbGVyIHRoYW4gdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcyBhcmUiLAotIiAgdG8gYmUgcHVy Z2VkLiIsCi0iICIsCi0iL0VYQ0VQVDpwYXR0ZXJuIiwKLSIgIFNwZWNpZmllcyB0aGF0IGFueSBm aWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgcGF0dGVybiwgd2hpY2ggY2FuIGJlIGEiLAotIiAg cmVndWxhciBmaWxlbmFtZSBvciBtYXkgY29udGFpbiB3aWxkY2FyZHMsIGFyZSBub3QgdG8gYmUg cHVyZ2VkLiAgVG8iLAotIiAgc3BlY2lmeSBtdWx0aXBsZSBwYXR0ZXJucyAodXAgdG8gOCksIHVz ZSBvdXRlciBicmFjZXMgYXJvdW5kIHRoZSBncm91cCIsCi0iICBhbmQgaW5uZXIgYnJhY2VzIGFy b3VuZCBlYWNoIHBhdHRlcm46IiwKLSIgIiwKLSIgICAgL0VYQ0VQVDp7e3BhdHRlcm4xfXtwYXR0 ZXJuMn0uLi59IiwKLSIgIiwKLSNpZmRlZiBVTklYT1JPU0sKLSIvRE9URklMRVMiLAotIiAgSW5j bHVkZSAocHVyZ2UpIGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggXCIuXCIuIiwKLSIgIiwK LSIvTk9ET1RGSUxFUyIsCi0iICBTa2lwIChkb24ndCBwdXJnZSkgZmlsZXMgd2hvc2UgbmFtZXMg YmVnaW4gd2l0aCBcIi5cIi4iLAotIiAiLAotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotI2lmZGVm IFJFQ1VSU0lWRQotIi9SRUNVUlNJVkUiLAotIiAgRGVzY2VuZHMgdGhyb3VnaCB0aGUgY3VycmVu dCBvciBzcGVjaWZpZWQgZGlyZWN0b3J5IHRyZWUuIiwKLSIgIiwKLSNlbmRpZiAvKiBSRUNVUlNJ VkUgKi8KLSIvS0VFUDpuIiwKLSIgIFJldGFpbiB0aGUgJ24nIG1vc3QgcmVjZW50IChoaWdoZXN0 LW51bWJlcmVkKSBiYWNrdXAgZmlsZXMgZm9yIGVhY2ggZmlsZS4iLAotIiAgQnkgZGVmYXVsdCwg bm9uZSBhcmUga2VwdC4gIElmIC9LRUVQIGlzIGdpdmVuIHdpdGhvdXQgYSBudW1iZXIsIDEgaXMg dXNlZC4iLAotIiAiLAotIi9MSVNUIiwKLSIgIERpc3BsYXkgZWFjaCBmaWxlIGFzIGl0IGlzIHBy b2Nlc3NlZCBhbmQgc2F5IHdoZXRoZXIgaXQgaXMgcHVyZ2VkIG9yIGtlcHQuIiwKLSIgIFN5bm9u eW1zOiAvTE9HLCAvVkVSQk9TRS4iLAotIiAiLAotIi9OT0xJU1QiLAotIiAgVGhlIFBVUkdFIGNv bW1hbmQgc2hvdWxkIG9wZXJhdGUgc2lsZW50bHkgKGRlZmF1bHQpLiIsCi0iICBTeW5vbnltczog L05PTE9HLCAvUVVJRVQuIiwKLSIgIiwKLSIvSEVBRElORyIsCi0iICBQcmludCBoZWFkaW5nIGFu ZCBzdW1tYXJ5IGluZm9ybWF0aW9uLiIsCi0iICIsCi0iL05PSEVBRElORyIsCi0iICBEb24ndCBw cmludCBoZWFkaW5nIGFuZCBzdW1tYXJ5IGluZm9ybWF0aW9uLiIsCi0iICIsCi0iL1BBR0UiLAot IiAgV2hlbiAvTElTVCBpcyBpbiBlZmZlY3QsIHBhdXNlIGF0IHRoZSBlbmQgb2YgZWFjaCBzY3Jl ZW5mdWwsIGV2ZW4gaWYiLAotIiAgQ09NTUFORCBNT1JFLVBST01QVElORyBpcyBPRkYuIiwKLSIg IiwKLSIvTk9QQUdFIiwKLSIgIERvbid0IHBhdXNlLCBldmVuIGlmIENPTU1BTkQgTU9SRS1QUk9N UFRJTkcgaXMgT04uIiwKLSIgIiwKLSIvQVNLIiwKLSIgIEludGVyYWN0aXZlbHkgYXNrIHBlcm1p c3Npb24gdG8gZGVsZXRlIGVhY2ggYmFja3VwIGZpbGUuIiwKLSIgIiwKLSIvTk9BU0siLAotIiAg UHVyZ2UgYmFja3VwIGZpbGVzIHdpdGhvdXQgYXNraW5nIHBlcm1pc3Npb24uIiwKLSIgIiwKLSIv U0lNVUxBVEUiLAotIiAgSW5oaWJpdHMgdGhlIGFjdHVhbCBkZWxldGlvbiBvZiBmaWxlczsgdXNl IHRvIHByZXZpZXcgd2hpY2ggZmlsZXMgd291bGQiLAotIiAgYWN0dWFsbHkgYmUgZGVsZXRlZC4g IEltcGxpZXMgL0xJU1QuIiwKLSIgIiwKLSJVc2UgU0VUIE9QVElPTlMgUFVSR0UgWyBzd2l0Y2hl cyBdIHRvIGNoYW5nZSBkZWZhdWx0czsgdXNlIFNIT1cgT1BUSU9OUyB0byIsCi0iZGlzcGxheSBj dXN0b21pemVkIGRlZmF1bHRzLiAgQWxzbyBzZWUgSEVMUCBERUxFVEUsIEhFTFAgV0lMRENBUkQu IiwKLSIiCi19OwotI2VuZGlmIC8qIENLUFVSR0UgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotc3Rh dGljIGNoYXIgKmhteHhjbG9bXSA9IHsKLSJTeW50YXg6ICBDTE9TRSBbIGl0ZW0gXSIsCi0iICBD bG9zZSB0aGUgaW5kaWNhdGVkIGl0ZW0uICBUaGUgZGVmYXVsdCBpdGVtIGlzIENPTk5FQ1RJT04s IHdoaWNoIGlzIHRoZSIsCi0iICBjdXJyZW50IFNFVCBMSU5FIG9yIFNFVCBIT1NUIGNvbm5lY3Rp b24uICBUaGUgb3RoZXIgaXRlbXMgYXJlOiIsCi0iICIsCi0jaWZkZWYgQ0tMT0dESUFMCi0iICAg IENYLUxPRyAgICAgICAgICAoY29ubmVjdGlvbiBsb2csIG9wZW5lZCB3aXRoIExPRyBDWCkiLAot I2VuZGlmIC8qIENLTE9HRElBTCAqLwotI2lmbmRlZiBOT0xPQ0FMCi0iICAgIFNFU1NJT04tTE9H ICAgICAob3BlbmVkIHdpdGggTE9HIFNFU1NJT04pIiwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0j aWZkZWYgVExPRwotIiAgICBUUkFOU0FDVElPTi1MT0cgKG9wZW5lZCB3aXRoIExPRyBUUkFOU0FD VElPTlMpIiwKLSNlbmRpZiAvKiBUTE9HICovCi0iICAgIFBBQ0tFVC1MT0cgICAgICAob3BlbmVk IHdpdGggTE9HIFBBQ0tFVFMpIiwKLSNpZmRlZiBERUJVRwotIiAgICBERUJVRy1MT0cgICAgICAg KG9wZW5lZCB3aXRoIExPRyBERUJVRykiLAotI2VuZGlmIC8qIERFQlVHICovCi0jaWZuZGVmIE5P U1BMCi0iICAgIFJFQUQtRklMRSAgICAgICAob3BlbmVkIHdpdGggT1BFTiBSRUFEKSIsCi0iICAg IFdSSVRFLUZJTEUgICAgICAob3BlbmVkIHdpdGggT1BFTiBXUklURSBvciBPUEVOIEFQUEVORCki LAotI2VuZGlmIC8qIE5PU1BMICovCi0iICIsCi0iVHlwZSBIRUxQIExPRyBhbmQgSEVMUCBPUEVO IGZvciBmdXJ0aGVyIGluZm8uIiwKLSIiCi19OwotCi0jaWZkZWYgQ0tMRUFSTgotc3RhdGljIGNo YXIgKiBobXh4bGVhcm5bXSA9IHsKLSJTeW50YXg6IExFQVJOIFsgL09OIC9PRkYgL0NMT1NFIF0g WyBmaWxlbmFtZSBdIiwKLSIgIFJlY29yZHMgYSBsb2dpbiBzY3JpcHQuICBJZiB5b3UgZ2l2ZSBh IGZpbGVuYW1lLCB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIiwKLSIgIHN1YnNlcXVlbnQgcmVjb3Jk aW5nLiAgSWYgeW91IGRvbid0IGdpdmUgYW55IHN3aXRjaGVzLCAvT04gaXMgYXNzdW1lZC4iLAot IiAgL09OIGVuYWJsZXMgcmVjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGZpbGUgKGlmIGFueSk7IC9P RkYgZGlzYWJsZXMiLAotIiAgcmVjb3JkaW5nLiAgL0NMT1NFIGNsb3NlcyB0aGUgY3VycmVudCBm aWxlIChpZiBhbnkpLiAgQWZ0ZXIgTEVBUk4gL0NMT1NFIiwKLSIgIG9yIGV4aXQgZnJvbSBLZXJt aXQsIHlvdXIgc2NyaXB0IGlzIGF2YWlsYWJsZSBmb3IgZXhlY3V0aW9uIGJ5IHRoZSBUQUtFIiwK LSIgIGNvbW1hbmQuIiwKLSIiCi19OwotI2VuZGlmIC8qIENLTEVBUk4gKi8KLQotI2lmZGVmIENL X01JTlBVVAotc3RhdGljIGNoYXIgKmhteHhtaW5wW10gPSB7Ci0iU3ludGF4OiAgTUlOUFVUIFsg c3dpdGNoZXMgXSBuIFsgc3RyaW5nMSBbIHN0cmluZzIgWyAuLi4gXSBdIF0iLAotIkV4YW1wbGU6 IE1JTlBVVCA1IExvZ2luOiB7VXNlcm5hbWU6IH0ge05PIENBUlJJRVJ9IEJVU1kgUklORyIsCi0i ICBGb3IgdXNlIGluIHNjcmlwdCBwcm9ncmFtcy4gIFdhaXRzIHVwIHRvIG4gc2Vjb25kcyBmb3Ig YW55IG9uZSBvZiB0aGUiLAotIiAgc3RyaW5ncyB0byBhcnJpdmUgb24gdGhlIGNvbW11bmljYXRp b24gZGV2aWNlLiAgSWYgbm8gc3RyaW5ncyBhcmUgZ2l2ZW4sIiwKLSIgIHRoZSBjb21tYW5kIHdh aXRzIGZvciBhbnkgY2hhcmFjdGVyIGF0IGFsbCB0byBhcnJpdmUuICBTdHJpbmdzIGFyZSIsCi0i ICBzZXBhcmF0ZWQgYnkgc3BhY2VzOyB1c2Uge2JyYWNlc30gb3IgXCJkb3VibGVxdW90ZXNcIiBm b3IgZ3JvdXBpbmcuICBJZiIsCi0iICBhbnkgb2YgdGhlIHN0cmluZ3MgaXMgZW5jb3VudGVyZWQg d2l0aGluIHRoZSB0aW1lb3V0IGludGVydmFsLCB0aGUgY29tbWFuZCIsCi0iICBzdWNjZWVkcyBh bmQgdGhlIFxcdihtaW5wdXQpIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHRoZSBz dHJpbmciLAotIiAgdGhhdCB3YXMgbWF0Y2hlZDogMSwgMiwgMywgZXRjLiAgSWYgbm9uZSBvZiB0 aGUgc3RyaW5ncyBhcnJpdmVzLCB0aGUiLAotIiAgY29tbWFuZCB0aW1lcyBvdXQsIGZhaWxzLCBh bmQgXFx2KG1pbnB1dCkgaXMgc2V0IHRvIDAuICBJbiBhbGwgb3RoZXIiLAotIiAgcmVzcGVjdHMs IE1JTlBVVCBpcyBsaWtlIElOUFVULiAgU2VlIEhFTFAgSU5QVVQgZm9yIHRoZSBhdmFpbGFibGUg c3dpdGNoZXMiLAotIiAgYW5kIG90aGVyIGRldGFpbHMgb2Ygb3BlcmF0aW9uLiIsCi0iIiB9Owot I2VuZGlmIC8qIENLX01JTlBVVCAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLXN0YXRpYyBjaGFyICpo bXh4Y29uW10gPSB7Ci0iU3ludGF4OiBDT05ORUNUIChvciBDLCBvciBDUSkgWyBzd2l0Y2hlcyBd IiwKLSIgIENvbm5lY3QgdG8gYSByZW1vdGUgY29tcHV0ZXIgdmlhIHRoZSBzZXJpYWwgY29tbXVu aWNhdGlvbnMgZGV2aWNlIGdpdmVuIGluIiwKLSNpZmRlZiBPUzIKLSIgIHRoZSBtb3N0IHJlY2Vu dCBTRVQgUE9SVCBjb21tYW5kLCBvciB0byB0aGUgbmV0d29yayBob3N0IG5hbWVkIGluIHRoZSBt b3N0IiwKLSNlbHNlCi0iICB0aGUgbW9zdCByZWNlbnQgU0VUIExJTkUgY29tbWFuZCwgb3IgdG8g dGhlIG5ldHdvcmsgaG9zdCBuYW1lZCBpbiB0aGUgbW9zdCIsCi0jZW5kaWYgLyogT1MyICovCi0i ICByZWNlbnQgU0VUIEhPU1QgY29tbWFuZC4gIFR5cGUgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgZm9s bG93ZWQgYnkgQyB0byBnZXQiLAotIiAgYmFjayB0byB0aGUgQy1LZXJtaXQgcHJvbXB0LCBvciBm b2xsb3dlZCBieSA/IGZvciBhIGxpc3Qgb2YgQ09OTkVDVC1tb2RlIiwKLSNpZmRlZiBPUzIKLSIg IGVzY2FwZSBjb21tYW5kcy4gIFlvdSBjYW4gYWxzbyBhc3NpZ24gdGhlIFxcS2V4aXQgdmVyYiB0 byB0aGUga2V5IG9yIiwKLSIgIGtleS1jb21iaW5hdGlvbiBvZiB5b3VyIGNob2ljZTsgYnkgZGVm YXVsdCBpdCBpcyBhc3NpZ25lZCB0byBBbHQteC4iLAotI2Vsc2UKLSIgIGVzY2FwZSBjb21tYW5k cy4iLAotIiAiLAotIkluY2x1ZGUgdGhlIC9RVUlFVExZIHN3aXRjaCB0byBzdXBwcmVzcyB0aGUg aW5mb3JtYXRpb25hbCBtZXNzYWdlIHRoYXQiLAotInRlbGxzIHlvdSBob3cgdG8gZXNjYXBlIGJh Y2ssIGV0Yy4gIENRIGlzIGEgc3lub255bSBmb3IgQ09OTkVDVCAvUVVJRVRMWS4iLAotI2VuZGlm IC8qIE9TMiAqLwotIiAiLAotIk90aGVyIHN3aXRjaGVzIGluY2x1ZGU6IiwKLSNpZmRlZiBDS19U UklHR0VSCi0iICIsCi0iL1RSSUdHRVI6c3RyaW5nIiwKLSIgIE9uZSBvciBtb3JlIHN0cmluZ3Mg dG8gbG9vayBmb3IgdGhhdCB3aWxsIGNhdXNlIGF1dG9tYXRpYyByZXR1cm4gdG8iLAotIiAgY29t bWFuZCBtb2RlLiAgVG8gc3BlY2lmeSBvbmUgc3RyaW5nLCBqdXN0IHB1dCBpdCByaWdodCBhZnRl ciB0aGUiLAotIiAgY29sb24sIGUuZy4gXCIvVFJJR0dFUjpHb29kYnllXCIuICBJZiB0aGUgc3Ry aW5nIGNvbnRhaW5zIGFueSBzcGFjZXMsIHlvdSIsCi0iICBtdXN0IGVuY2xvc2UgaXQgaW4gYnJh Y2VzLCBlLmcuIFwiL1RSSUdHRVI6e1JFQURZIFRPIFNFTkQuLi59XCIuICBUbyIsCi0iICBzcGVj aWZ5IG1vcmUgdGhhbiBvbmUgdHJpZ2dlciwgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiIsCi0i ICIsCi0iICAgIC9UUklHR0VSOnt7c3RyaW5nMX17c3RyaW5nMn0uLi57c3RyaW5nbn19IiwKLSIg IiwKLSIgIFVwb24gcmV0dXJuIGZyb20gQ09OTkVDVCBtb2RlLCB0aGUgdmFyaWFibGUgXFx2KHRy aWdnZXIpIGlzIHNldCB0byB0aGUiLAotIiAgdHJpZ2dlciBzdHJpbmcsIGlmIGFueSwgdGhhdCB3 YXMgYWN0dWFsbHkgZW5jb3VudGVyZWQuICBUaGlzIHZhbHVlLCBsaWtlIiwKLSIgIGFsbCBvdGhl ciBDT05ORUNUIHN3aXRjaGVzIGFwcGxpZXMgb25seSB0byB0aGUgQ09OTkVDVCBjb21tYW5kIHdp dGggd2hpY2giLAotIiAgaXQgaXMgZ2l2ZW4sIGFuZCBvdmVycmlkZXMgKHRlbXBvcmFyaWx5KSBh bnkgZ2xvYmFsIFNFVCBURVJNSU5BTCBUUklHR0VSIiwKLSIgIHN0cmluZyB0aGF0IG1pZ2h0IGJl IGluIGVmZmVjdC4iLAotI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KLSNpZmRlZiBPUzIKLSIgIiwK LSIvSURMRS1MSU1JVDpudW1iZXIiLAotIiAgVGhlIG51bWJlciBvZiBzZWNvbmRzIG9mIGlkbGUg dGltZSwgYWZ0ZXIgd2hpY2ggS2VybWl0IHJldHVybnMiLAotIiAgYXV0b21hdGljYWxseSB0byBj b21tYW5kIG1vZGU7IGRlZmF1bHQgMCAobm8gbGltaXQpLiIsCi0iICIsCi0iL0lETEUtSU5URVJW QUw6bnVtYmVyIiwKLSIgIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBvZiBpZGxlIHRpbWUsIGFmdGVy IHdoaWNoIEtlcm1pdCBhdXRvbWF0aWNhbGx5IiwKLSIgIHRyYW5zbWl0cyB0aGUgaWRsZSBzdHJp bmcuIiwKLSIgIiwKLSIvSURMRS1TVFJJTkc6c3RyaW5nIiwKLSIgIFRoZSBzdHJpbmcgdG8gdHJh bnNtaXQgd2hlbmV2ZXIgdGhlIGlkbGUgaW50ZXJ2YWwgaGFzIHBhc3NlZC4iLAotIiAiLAotIi9U SU1FLUxJTUlUOm51bWJlciIsCi0iICBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyBmb3Ig d2hpY2ggdGhlIENPTk5FQ1Qgc2Vzc2lvbiBtYXkgbGFzdC4iLAotIiAgVGhlIGRlZmF1bHQgaXMg MCAobm8gbGltaXQpLiAgSWYgYSBub256ZXJvIG51bWJlciBpcyBnaXZlbiwgS2VybWl0IHJldHVy bnMiLAotIiAgYXV0b21hdGljYWxseSB0byBjb21tYW5kIG1vZGUgYWZ0ZXIgdGhpcyBtYW55IHNl Y29uZHMuIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIiIH07Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwot Ci1zdGF0aWMgY2hhciAqaG14eG1nZXRbXSA9IHsKLSJTeW50YXg6IE1HRVQgWyBzd2l0Y2hlcy4u LiBdIHJlbW90ZS1maWxlc3BlYyBbIHJlbW90ZS1maWxlc3BlYyAuLi4gXSIsCi0iICIsCi0iSnVz dCBsaWtlIEdFVCAocS52LikgZXhjZXB0IGFsbG93cyBhIGxpc3Qgb2YgcmVtb3RlIGZpbGUgc3Bl Y2lmaWNhdGlvbnMsIiwKLSJzZXBhcmF0ZWQgYnkgc3BhY2VzLiIsCi0iIgotfTsKLQotc3RhdGlj IGNoYXIgKmhteHhnZXRbXSA9IHsKLSJTeW50YXg6IEdFVCBbIHN3aXRjaGVzLi4uIF0gcmVtb3Rl LWZpbGVzcGVjIFsgYXMtbmFtZSBdIiwKLSIgIFRlbGxzIHRoZSBvdGhlciBLZXJtaXQsIHdoaWNo IG11c3QgYmUgaW4gKG9yIHN1cHBvcnQgYXV0b3N3aXRjaGluZyBpbnRvKSIsCi0iICBzZXJ2ZXIg bW9kZSwgdG8gc2VuZCB0aGUgbmFtZWQgZmlsZSBvciBmaWxlcy4gIElmIHRoZSByZW1vdGUtZmls ZXNwZWMgb3IiLAotIiAgdGhlIGFzLW5hbWUgY29udGFpbiBzcGFjZXMsIHRoZXkgbXVzdCBiZSBl bmNsb3NlZCBpbiBicmFjZXMuICBJZiBhcy1uYW1lIiwKLSIgIGlzIHRoZSBuYW1lIG9mIGFuIGV4 aXN0aW5nIGxvY2FsIGRpcmVjdG9yeSwgaW5jb21pbmcgZmlsZXMgYXJlIHBsYWNlZCBpbiIsCi0i ICB0aGF0IGRpcmVjdG9yeTsgaWYgaXQgaXMgdGhlIG5hbWUgb2YgZGlyZWN0b3J5IHRoYXQgZG9l cyBub3QgZXhpc3QsIEtlcm1pdCIsCi0iICB0cmllcyB0byBjcmVhdGUgaXQuICBPcHRpb25hbCBz d2l0Y2hlcyBpbmNsdWRlOiIsCi0iICIsCi0iL0FTLU5BTUU6dGV4dCIsCi0iICBTcGVjaWZpZXMg XCJ0ZXh0XCIgYXMgdGhlIG5hbWUgdG8gc3RvcmUgdGhlIGluY29taW5nIGZpbGUgdW5kZXIsIG9y IiwKLSIgIGRpcmVjdG9yeSB0byBzdG9yZSBpdCBpbi4gIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRo ZSBhcy1uYW1lIGFzIHRoZSBzZWNvbmQiLAotIiAgZmlsZW5hbWUgb24gdGhlIEdFVCBjb21tYW5k IGxpbmUuIiwKLSIgIiwKLSIvQklOQVJZIiwKLSIgIFBlcmZvcm1zIHRoaXMgdHJhbnNmZXIgaW4g YmluYXJ5IG1vZGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGdsb2JhbCIsCi0iICB0cmFuc2ZlciBt b2RlLiIsCi0iICIsCi0iL0NPTU1BTkQiLAotIiAgUmVjZWl2ZXMgdGhlIGZpbGUgaW50byB0aGUg c3RhbmRhcmQgaW5wdXQgb2YgYSBjb21tYW5kLCByYXRoZXIgdGhhbiBzYXZpbmciLAotIiAgaXQg b24gIGRpc2suICBUaGUgL0FTLU5BTUUgb3IgdGhlIHNlY29uZCBcImZpbGVuYW1lXCIgb24gdGhl IEdFVCBjb21tYW5kIiwKLSIgIGxpbmUgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIG5hbWUgb2YgYSBj b21tYW5kLiIsCi0iICIsCi0iL0RFTEVURSIsCi0iICBBc2tzIHRoZSBvdGhlciBLZXJtaXQgdG8g ZGVsZXRlIHRoZSBmaWxlIChvciBlYWNoIGZpbGUgaW4gdGhlIGdyb3VwKSIsCi0iICBhZnRlciBp dCBoYXMgYmVlbiB0cmFuc2ZlcnJlZCBzdWNjZXNzZnVsbHkuIiwKLSIgIiwKLSIvRVhDRVBUOnBh dHRlcm4iLAotIiAgU3BlY2lmaWVzIHRoYXQgYW55IGZpbGVzIHdob3NlIG5hbWVzIG1hdGNoIHRo ZSBwYXR0ZXJuLCB3aGljaCBjYW4gYmUgYSIsCi0iICByZWd1bGFyIGZpbGVuYW1lLCBvciBtYXkg Y29udGFpbiBcIipcIiBhbmQvb3IgXCI/XCIgbWV0YWNoYXJhY3RlcnMsIiwKLSIgIGFyZSB0byBi ZSByZWZ1c2VkLiAgVG8gc3BlY2lmeSBtdWx0aXBsZSBwYXR0ZXJucyAodXAgdG8gOCksIHVzZSBv dXRlciIsCi0iICBicmFjZXMgYXJvdW5kIHRoZSBncm91cCwgYW5kIGlubmVyIGJyYWNlcyBhcm91 bmQgZWFjaCBwYXR0ZXJuOiIsCi0iICIsCi0iICAgIC9FWENFUFQ6e3twYXR0ZXJuMX17cGF0dGVy bjJ9Li4ufSIsCi0iICIsCi0iL0ZJTEVOQU1FUzp7Q09OVkVSVEVELExJVEVSQUx9IiwKLSIgIE92 ZXJyaWRlcyB0aGUgZ2xvYmFsIFNFVCBGSUxFIE5BTUVTIHNldHRpbmcgZm9yIHRoaXMgdHJhbnNm ZXIgb25seS4iLAotIiAiLAotIi9GSUxURVI6Y29tbWFuZCIsCi0iICBDYXVzZXMgdGhlIGluY29t aW5nIGZpbGUgdG8gcGFzc2VkIHRocm91Z2ggdGhlIGdpdmVuIGNvbW1hbmQgKHN0YW5kYXJkIiwK LSIgIGlucHV0L291dHB1dCBmaWx0ZXIpIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIGRpc2suIiwK LSIgIiwKLSNpZmRlZiBWTVMKLSIvSU1BR0UiLAotIiAgVHJhbnNmZXIgaW4gaW1hZ2UgbW9kZS4i LAotIiAiLAotI2VuZGlmIC8qIFZNUyAqLwotI2lmZGVmIENLX0xBQkVMRUQKLSIvTEFCRUxFRCIs Ci0iICBWTVMgYW5kIE9TLzIgb25seTogU3BlY2lmaWVzIGxhYmVsZWQgdHJhbnNmZXIgbW9kZS4i LAotIiAiLAotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLQotIi9NT1ZFLVRPOmRpcmVjdG9yeS1u YW1lIiwKLSIgIFNwZWNpZmllcyB0aGF0IGVhY2ggZmlsZSB0aGF0IGFycml2ZXMgc2hvdWxkIGJl IG1vdmVkIHRvIHRoZSBzcGVjaWZpZWQiLAotIiAgZGlyZWN0b3J5IGFmdGVyLCBhbmQgb25seSBp ZiwgaXQgaGFzIGJlZW4gcmVjZWl2ZWQgc3VjY2Vzc2Z1bGx5LiIsCi0iICIsCi0iL1BBVEhOQU1F Uzp7T0ZGLEFCU09MVVRFLFJFTEFUSVZFLEFVVE99IiwKLSIgIE92ZXJyaWRlcyB0aGUgZ2xvYmFs IFNFVCBSRUNFSVZFIFBBVEhOQU1FUyBzZXR0aW5nIGZvciB0aGlzIHRyYW5zZmVyLiIsCi0iICIs Ci0iL1BJUEVTOntPTixPRkZ9IiwKLSIgIE92ZXJyaWRlcyB0aGUgVFJBTlNGRVIgUElQRVMgc2V0 dGluZyBmb3IgdGhpcyBjb21tYW5kIG9ubHkuICBPTiBhbGxvd3MiLAotIiAgcmVjZXB0aW9uIG9m IGZpbGVzIHdpdGggbmFtZXMgbGlrZSBcIiF0YXIgeGYgLVwiIHRvIGJlIGF1dG9tYXRpY2FsbHki LAotIiAgZGlyZWN0ZWQgdG8gYSBwaXBlbGluZS4iLAotIiAiLAotIi9RVUlFVCIsCi0iICBXaGVu IHNlbmRpbmcgaW4gbG9jYWwgbW9kZSwgdGhpcyBzdXBwcmVzc2VzIHRoZSBmaWxlLXRyYW5zZmVy IGRpc3BsYXkuIiwKLSIgIiwKLSIvUkVDT1ZFUiIsCi0iICBVc2VkIHRvIHJlY292ZXIgZnJvbSBh IHByZXZpb3VzbHkgaW50ZXJydXB0ZWQgdHJhbnNmZXI7IEdFVCAvUkVDT1ZFUiIsCi0iICBpcyBl cXVpdmFsZW50IFJFR0VULiAgV29ya3Mgb25seSBpbiBiaW5hcnkgbW9kZS4iLAotIiAiLAotIi9S RUNVUlNJVkUiLAotIiAgVGVsbHMgdGhlIHNlcnZlciB0byBkZXNjZW5kIHRocm91Z2ggdGhlIGRp cmVjdG9yeSB0cmVlIHdoZW4gbG9jYXRpbmciLAotIiAgdGhlIGZpbGVzIHRvIGJlIHNlbnQuIiwK LSIgIiwKLSIvUkVOQU1FLVRPOnN0cmluZyIsCi0iICBTcGVjaWZpZXMgdGhhdCBlYWNoIGZpbGUg dGhhdCBhcnJpdmVzIHNob3VsZCBiZSByZW5hbWVkIGFzIHNwZWNpZmllZCIsCi0iICBhZnRlciwg YW5kIG9ubHkgaWYsIGl0IGhhcyBiZWVuIHJlY2VpdmVkIHN1Y2Nlc3NmdWxseS4gIFRoZSBzdHJp bmcgc2hvdWxkIiwKLSIgIG5vcm1hbGx5IGNvbnRhaW4gdmFyaWFibGVzIGxpa2UgXFx2KGZpbGVu YW1lKSBvciBcXHYoZmlsZW51bSkuIiwKLSIgIiwKLSIvVEVYVCIsCi0iICBQZXJmb3JtcyB0aGlz IHRyYW5zZmVyIGluIHRleHQgbW9kZSB3aXRob3V0IGFmZmVjdGluZyB0aGUgZ2xvYmFsIiwKLSIg IHRyYW5zZmVyIG1vZGUuIiwKLSIgIiwKLSIvVFJBTlNQQVJFTlQiLAotIiAgSW5oaWJpdHMgY2hh cmFjdGVyLXNldCB0cmFuc2xhdGlvbiBvZiBpbmNvbWluZyB0ZXh0IGZpbGVzIGZvciB0aGUgZHVy YXRpb24iLAotIiAgb2YgdGhlIEdFVCBjb21tYW5kIHdpdGhvdXQgYWZmZWN0aW5nIHN1YnNlcXVl bnQgY29tbWFuZHMuIiwKLSIgIiwKLSJBbHNvIHNlZSBIRUxQIE1HRVQsIEhFTFAgU0VORCwgSEVM UCBSRUNFSVZFLCBIRUxQIFNFUlZFUiwgSEVMUCBSRU1PVEUuIiwKLSIifTsKLQotc3RhdGljIGNo YXIgKmhteHhsZ1tdID0gewotIlN5bnRheDogTE9HIChvciBMKSBsb2ctdHlwZSBbIGZpbGVuYW1l IFsgeyBORVcsIEFQUEVORCB9IF0gXSIsCi0iICIsCi0iUmVjb3JkIGluZm9ybWF0aW9uIGluIGEg bG9nIGZpbGU6IiwKLSIgIiwKLSNpZmRlZiBDS0xPR0RJQUwKLSJDWCIsCi0iICBDb25uZWN0aW9u cyBtYWRlIHdpdGggU0VUIExJTkUsIFNFVCBQT1JULCBTRVQgSE9TVCwgRElBTCwgVEVMTkVULCBl dGMuIiwKLSIgIFRoZSBkZWZhdWx0IGZpbGVuYW1lIGlzIENYLkxPRyBpbiB5b3VyIGhvbWUgZGly ZWN0b3J5IGFuZCBBUFBFTkQgaXMgdGhlIiwKLSIgIGRlZmF1bHQgbW9kZSBmb3Igb3BlbmluZy4i LAotIiAiLAotI2VuZGlmIC8qIENLTE9HRElBTCAqLwotI2lmZGVmIERFQlVHCi0iREVCVUciLAot IiAgRGVidWdnaW5nIGluZm9ybWF0aW9uLCB0byBoZWxwIHRyYWNrIGRvd24gYnVncyBpbiB0aGUg Qy1LZXJtaXQgcHJvZ3JhbS4iLAotIiAgVGhlIGRlZmF1bHQgbG9nIG5hbWUgaXMgZGVidWcubG9n IGluIGN1cnJlbnQgZGlyZWN0b3J5LiIsCi0iICIsCi0jZW5kaWYgLyogREVCVUcgKi8KLSJQQUNL RVRTIiwKLSIgIEtlcm1pdCBwYWNrZXRzLCB0byBoZWxwIHdpdGggcHJvdG9jb2wgcHJvYmxlbXMu ICBUaGUgZGVmYXVsdCBmaWxlbmFtZSBpcyIsCi0iICBwYWNrZXQubG9nIGluIGN1cnJlbnQgZGly ZWN0b3J5LiIsCi0iICIsCi0jaWZuZGVmIE5PTE9DQUwKLSJTRVNTSU9OIiwKLSIgIFJlY29yZHMg eW91ciBDT05ORUNUIHNlc3Npb24gKGRlZmF1bHQ6IHNlc3Npb24ubG9nIGluIGN1cnJlbnQgZGly ZWN0b3J5KS4iLAotIiAiLAotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZmRlZiBUTE9HCi0iVFJB TlNBQ1RJT05TIiwKLSIgIE5hbWVzIGFuZCBzdGF0aXN0aWNzIGFib3V0IGZpbGVzIHRyYW5zZmVy cmVkIChkZWZhdWx0OiB0cmFuc2FjdC5sb2cgaW4iLAotIiAgY3VycmVudCBkaXJlY3Rvcnk7IHNl ZSBIRUxQIFNFVCBUUkFOU0FDVElPTi1MT0cgZm9yIHRyYW5zYWN0aW9uLWxvZyBmb3JtYXQiLAot IiAgb3B0aW9ucy4pIiwKLSIgIiwKLSNlbmRpZiAvKiBUTE9HICovCi0iSWYgeW91IGluY2x1ZGUg dGhlIEFQUEVORCBrZXl3b3JkIGFmdGVyIHRoZSBmaWxlbmFtZSwgdGhlIGV4aXN0aW5nIGxvZyBm aWxlLCIsCi0iaWYgYW55LCBpcyBhcHBlbmRlZCB0bzsgb3RoZXJ3aXNlIGEgbmV3IGZpbGUgaXMg Y3JlYXRlZCAoZXhjZXB0IEFQUEVORCBpcyIsCi0idGhlIGRlZmF1bHQgZm9yIHRoZSBjb25uZWN0 aW9uIGxvZykuICBVc2UgQ0xPU0UgPGtleXdvcmQ+IHRvIHN0b3AgbG9nZ2luZy4iLAotI2lmZGVm IE9TMk9SVU5JWAotIiAiLAotIk5vdGU6IFRoZSBmaWxlbmFtZSBjYW4gYWxzbyBiZSBhIHBpcGUs IGUuZy46IiwKLSIgIiwKLSIgIGxvZyB0cmFuc2FjdGlvbnMgfGxwciIsCi0iICBsb2cgZGVidWcg e3wgZ3JlcCBcIl5URUxORVRcIiA+IGRlYnVnLmxvZ30iLAotIiAiLAotIkJyYWNlcyBhcmUgcmVx dWlyZWQgaWYgdGhlIHBpcGVsaW5lIG9yIGZpbGVuYW1lIGNvbnRhaW5zIHNwYWNlcy4iLAotI2Vu ZGlmIC8qIE9TMk9SVU5JWCAqLwotIiIgfTsKLQotI2lmbmRlZiBOT1NDUklQVAotc3RhdGljIGNo YXIgKmhteHhsb2dpW10gPSB7ICJcCi1TeW50YXg6IFNDUklQVCB0ZXh0IiwKLSIgIEEgbGltaXRl ZCBhbmQgY3J5cHRpYyBcImxvZ2luIGFzc2lzdGFudFwiLCBjYXJyaWVkIG92ZXIgZnJvbSBvbGQg Qy1LZXJtaXQiLAotIiAgcmVsZWFzZXMgZm9yIGNvbXB0YWJpbGl0eSwgYnV0IG5vdCByZWNvbW1l bmRlZCBmb3IgdXNlLiAgSW5zdGVhZCwgcGxlYXNlIiwKLSIgIHVzZSB0aGUgZnVsbCBzY3JpcHQg cHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZGVzY3JpYmVkIGluIGNoYXB0ZXJzIDE3LTE5IG9mIiwKLSIg IFwiVXNpbmcgQy1LZXJtaXRcIi4iLAotIiAiLAotIiAgTG9naW4gdG8gYSByZW1vdGUgc3lzdGVt IHVzaW5nIHRoZSB0ZXh0IHByb3ZpZGVkLiAgVGhlIGxvZ2luIHNjcmlwdCIsCi0iICBpcyBpbnRl bmRlZCB0byBvcGVyYXRlIHNpbWlsYXJseSB0byBVTklYIHV1Y3AgXCJMLnN5c1wiIGVudHJpZXMu IiwKLSIgIEEgbG9naW4gc2NyaXB0IGlzIGEgc2VxdWVuY2Ugb2YgdGhlIGZvcm06IiwKLSIgIiwK LSIgICAgZXhwZWN0IHNlbmQgW2V4cGVjdCBzZW5kXSAuIC4gLiIsCi0iICIsCi0iICB3aGVyZSAn ZXhwZWN0JyBpcyBhIHByb21wdCBvciBtZXNzYWdlIHRvIGJlIGlzc3VlZCBieSB0aGUgcmVtb3Rl IHNpdGUsIGFuZCIsCi0iICAnc2VuZCcgaXMgdGhlIG5hbWVzLCBudW1iZXJzLCBldGMsIHRvIHJl dHVybi4gIFRoZSBzZW5kIG1heSBhbHNvIGJlIHRoZSIsCi0iICBrZXl3b3JkIEVPVCB0byBzZW5k IENvbnRyb2wtRCwgb3IgQlJFQUsgKG9yIFxcXFxiKSB0byBzZW5kIGEgYnJlYWsgc2lnbmFsLiIs Ci0iICBMZXR0ZXJzIGluIHNlbmQgbWF5IGJlIHByZWZpeGVkIGJ5IH4gdG8gc2VuZCBzcGVjaWFs IGNoYXJhY3RlcnM6IiwKLSIgIiwKLSIgIH5iIGJhY2tzcGFjZSwgfnMgc3BhY2UsIH5xICc/Jywg fm4gbGluZWZlZWQsIH5yIHJldHVybiwgfmMgZG9uXCd0IiwKLSIgIGFwcGVuZCBhIHJldHVybiwg YW5kIH5vW29bb11dIGZvciBvY3RhbCBvZiBhIGNoYXJhY3Rlci4gIEFzIHdpdGggc29tZSIsCi0i ICBVVUNQIHN5c3RlbXMsIHNlbnQgc3RyaW5ncyBhcmUgZm9sbG93ZWQgYnkgfnIgdW5sZXNzIHRo ZXkgZW5kIHdpdGggfmMuIiwKLSIgIiwKLSIgIE9ubHkgdGhlIGxhc3QgNyBjaGFyYWN0ZXJzIGlu IGVhY2ggZXhwZWN0IGFyZSBtYXRjaGVkLiAgQSBudWxsIGV4cGVjdCwiLAotIiAgZS5nLiB+MCBv ciB0d28gYWRqYWNlbnQgZGFzaGVzLCBjYXVzZXMgYSBzaG9ydCBkZWxheS4gIElmIHlvdSBleHBl Y3QiLAotIiAgdGhhdCBhIHNlcXVlbmNlIG1pZ2h0IG5vdCBhcnJpdmUsIGFzIHdpdGggdXVjcCwg Y29uZGl0aW9uYWwgc2VxdWVuY2VzIiwKLSIgIG1heSBiZSBleHByZXNzZWQgaW4gdGhlIGZvcm06 IiwKLSIgIiwKLSIgICAgLXNlbmQtZXhwZWN0Wy1zZW5kLWV4cGVjdFsuLi5dXSIsCi0iICIsCi0i ICB3aGVyZSBkYXNoZWQgc2VxdWVuY2VzIGFyZSBmb2xsb3dlZCBhcyBsb25nIGFzIHByZXZpb3Vz IGV4cGVjdHMgZmFpbC4iLAotIiIgfTsKLSNlbmRpZiAvKiBOT1NDUklQVCAqLwotCi0jaWZuZGVm IE5PRlJJTExTCi1zdGF0aWMgY2hhciAqIGhteHh0eXBbXSA9IHsKLSJTeW50YXg6IFRZUEUgWyBz d2l0Y2hlcy4uLiBdIGZpbGUiLAotIiAgRGlzcGxheXMgYSBmaWxlIG9uIHRoZSBzY3JlZW4uICBQ YXVzZXMgYXV0b21hdGljYWxseSBhdCBlbmQgb2YgZWFjaCIsCi0iICBzY3JlZW5mdWwgaWYgQ09N TUFORCBNT1JFLVBST01QVElORyBpcyBPTi4gIE9wdGlvbmFsIHN3aXRjaGVzOiIsCi0iICIsCi0i ICAvUEFHRSIsCi0iICAgICBQYXVzZSBhdCB0aGUgZW5kIG9mIGVhY2ggc2NyZWVuZnVsIGV2ZW4g aWYgQ09NTUFORCBNT1JFLVBST01QVElORyBPRkYuIiwKLSIgICAgIFN5bm9ueW06IC9NT1JFIiwK LSIgIC9OT1BBR0UiLAotIiAgICAgRG9uJ3QgcGF1c2UgYXQgdGhlIGVuZCBvZiBlYWNoIHNjcmVl biBldmVuIGlmIENPTU1BTkQgTU9SRS1QUk9NUFRJTkcgT04uIgotLAotIiAgL0hFQUQ6biIsCi0i ICAgICBPbmx5IHR5cGUgdGhlIGZpcnN0ICduJyBsaW5lcyBvZiB0aGUgZmlsZS4iLAotIiAgL1RB SUw6biIsCi0iICAgICBPbmx5IHR5cGUgdGhlIGxhc3QgJ24nIGxpbmVzIG9mIHRoZSBmaWxlLiIs Ci0iICAvTUFUQ0g6cGF0dGVybiIsCi0iICAgICBPbmx5IHR5cGUgbGluZXMgdGhhdCBtYXRjaCB0 aGUgZ2l2ZW4gcGF0dGVybi4gIEhFTFAgV0lMRENBUkRTIGZvciBpbmZvIiwKLSIgICAgIGluZm8g YWJvdXQgcGF0dGVybnMuICAvSEVBRCBhbmQgL1RBSUwgYXBwbHkgYWZ0ZXIgL01BVENILiIsCi0i ICAvUFJFRklYOnN0cmluZyIsCi0iICAgICBQcmludCB0aGUgZ2l2ZW4gc3RyaW5nIGF0IHRoZSBi ZWdpbm5pbmcgb2YgZWFjaCBsaW5lLiIsCi0iICAvTlVNQkVSIiwKLSIgICAgIEFkZCBsaW5lIG51 bWJlcnMgKGNvbmZsaWN0cyB3aXRoIC9QUkVGSVgpIiwKLSIgIC9XSURUSDpudW1iZXIiLAotIiAg ICAgVHJ1bmNhdGUgZWFjaCBsaW5lIGF0IHRoZSBnaXZlbiBjb2x1bW4gbnVtYmVyIGJlZm9yZSBw cmludGluZy4iLAotI2lmZGVmIEtVSQotIiAgICAgT3Igd2hlbiBjb21iaW5lZCB3aXRoIC9HVUkg c3BlY2lmaWVzIHRoZSB3aWR0aCBvZiB0aGUgZGlhbG9nIGJveC4iLAotIiAgL0hFSUdIVDpudW1i ZXIiLAotIiAgICAgV2hlbiBjb21iaW5lZCB3aXRoIC9HVUkgc3BlY2lmaWVzIHRoZSBoZWlnaHQg b2YgdGhlIGRpYWxvZyBib3guIiwKLSIgIC9HVUk6c3RyaW5nIiwKLSIgICAgIFNwZWNpZmllcyB0 aGUgdGl0bGUgdG8gdXNlIGZvciB0aGUgZGlhbG9nIGJveC4iLAotI2VuZGlmIC8qIEtVSSAqLwot IiAgL0NPVU5UIiwKLSIgICAgIENvdW50IGxpbmVzIChhbmQgbWF0Y2hlcykgYW5kIHByaW50IHRo ZSBjb3VudChzKSBidXQgbm90IHRoZSBsaW5lcy4iLAotI2lmZGVmIFVOSUNPREUKLSIgIC9DSEFS QUNURVItU0VUOm5hbWUiLAotIiAgICAgVHJhbnNsYXRlcyBmcm9tIHRoZSBuYW1lZCBjaGFyYWN0 ZXIgc2V0LiIsCi0jaWZuZGVmIE9TMgotIiAgL1RSQU5TTEFURS1UTzpuYW1lIiwKLSIgICAgIFRy YW5zbGF0ZXMgdG8gdGhlIG5hbWVkIGNoYXJhY3RlciBzZXQgKGRlZmF1bHQgPSBjdXJyZW50IGZp bGUgY2hhcnNldCkuIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIgIC9UUkFOU1BBUkVOVCIsCi0iICAg ICBJbmhpYml0cyBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uLiIsCi0jZW5kaWYgLyogVU5JQ09E RSAqLwotIiAgL09VVFBVVDpuYW1lIiwKLSIgICAgIFNlbmRzIHJlc3VsdHMgdG8gdGhlIGdpdmVu IGZpbGUuICBJZiB0aGlzIHN3aXRjaCBpcyBvbWl0dGVkLCB0aGUiLAotIiAgICAgcmVzdWx0cyBh cHBlYXIgb24geW91ciBzY3JlZW4uICBUaGlzIHN3aXRjaCBvdmVycmlkZXMgYW55IGV4cHJlc3Mg b3IiLAotIiAgICAgaW1wbGllZCAvUEFHRSBzd2l0Y2guIiwKLSIgIiwKLSJZb3UgY2FuIHVzZSBT RVQgT1BUSU9OUyBUWVBFIHRvIHNldCB0aGUgZGVmYXVsdHMgZm9yIC9QQUdFIG9yIC9OT1BBR0Ug YW5kIiwKLSIvV0lEVEguICBVc2UgU0hPVyBPUFRJT05TIHRvIHNlZSBjdXJyZW50IFRZUEUgb3B0 aW9ucy4iLAotIiIKLX07Ci0KLXN0YXRpYyBjaGFyICogaG14eGNsZVtdID0gewotIlN5bnRheDog Q0xFQVIgWyBpdGVtLW5hbWUgXSIsCi0iICIsCi0iQ2xlYXJzIHRoZSBuYW1lZCBpdGVtLiAgSWYg bm8gaXRlbSBpcyBuYW1lZCwgREVWSUNFLUFORC1JTlBVVCBpcyBhc3N1bWVkLiIsCi0iICIsCi0i ICBBTEFSTSAgICAgICAgICAgIENsZWFycyBhbnkgcGVuZGluZyBhbGFybSAoc2VlIFNFVCBBTEFS TSkuIiwKLSNpZmRlZiBDS19BUEMKLSIgIEFQQy1TVEFUVVMgICAgICAgQ2xlYXJzIEFwcGxpY2F0 aW9uIFByb2dyYW0gQ29tbWFuZCBzdGF0dXMuIiwKLSNlbmRpZiAvKiBDS19BUEMgKi8KLSNpZmRl ZiBQQVRURVJOUwotIiAgQklOQVJZLVBBVFRFUk5TICBDbGVhcnMgdGhlIGZpbGUgYmluYXJ5LXBh dHRlcm5zIGxpc3QuIiwKLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotI2lmZGVmIE9TMgotIiAgQ09N TUFORC1TQ1JFRU4gICBDbGVhcnMgdGhlIGN1cnJlbnQgY29tbWFuZCBzY3JlZW4uIiwKLSNlbmRp ZiAvKiBPUzIgKi8KLSIgIERFVklDRSAgICAgICAgICAgQ2xlYXJzIHRoZSBjdXJyZW50IHBvcnQg b3IgbmV0d29yayBpbnB1dCBidWZmZXIuIiwKLSIgIERFVklDRS1BTkQtSU5QVVQgQ2xlYXJzIGJv dGggdGhlIGRldmljZSBhbmQgdGhlIElOUFVUIGJ1ZmZlci4iLAotIiAgRElBTC1TVEFUVVMgICAg ICBDbGVhcnMgdGhlIFxcdihkaWFsc3RhdHVzKSB2YXJpYWJsZS4iLAotIiAgXAotSU5QVVQgICAg ICAgICAgICBDbGVhcnMgdGhlIElOUFVULWNvbW1hbmQgYnVmZmVyIGFuZCB0aGUgXFx2KGlucHV0 KSB2YXJpYWJsZS4iLAotIiAgS0VZQk9BUkQtQlVGRkVSICBDbGVhcnMgdGhlIGNvbW1hbmQgdGVy bWluYWwga2V5Ym9hcmQgaW5wdXQgYnVmZmVyLiIsCi0jaWZkZWYgT1MyCi0iICBcCi1TQ1JPTExC QUNLICAgICAgIGVtcHRpZXMgdGhlIHNjcm9sbGJhY2sgYnVmZmVyIGluY2x1ZGluZyB0aGUgY3Vy cmVudCBzY3JlZW4uIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIgIFNFTkQtTElTVCAgICAgICAgQ2xl YXJzIHRoZSBjdXJyZW50IFNFTkQgbGlzdCAoc2VlIEFERCkuIiwKLSNpZmRlZiBPUzIKLSIgIFwK LVRFUk1JTkFMLVNDUkVFTiAgQ2xlYXJzIHRoZSBjdXJyZW50IHNjcmVlbiBhIHBsYWNlcyBpdCBp bnRvIHRoZSBzY3JvbGxiYWNrLiIsCi0iICAgIGJ1ZmZlci4iLAotI2VuZGlmIC8qIE9TMiAqLwot I2lmZGVmIFBBVFRFUk5TCi0iICBURVhULVBBVFRFUk5TICAgIENsZWFycyB0aGUgZmlsZSB0ZXh0 LXBhdHRlcm5zIGxpc3QuIiwKLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotIiJ9OwotI2VuZGlmIC8q IE5PRlJJTExTICovCi0KLXN0YXRpYyBjaGFyICogaG14eGRhdGVbXSA9IHsKLSJTeW50YXg6IERB VEUgWyBkYXRlLXRpbWUgWyB0aW1lem9uZSBdIF0gWyBkZWx0YS10aW1lIF0iLAotIiAgUHJpbnRz IGEgZGF0ZS10aW1lIGluIHN0YW5kYXJkIGZvcm1hdDogeXl5eW1tZGRfaGg6bW06c3MuIiwKLSIg IFZhcmlvdXMgZGF0ZS10aW1lIGZvcm1hdHMgYXJlIGFjY2VwdGVkOiIsCi0iICIsCi0iICAuIFRo ZSBkYXRlLCBpZiBnaXZlbiwgbXVzdCBwcmVjZWRlIHRoZSB0aW1lLiIsCi0iICAuIFRoZSB5ZWFy IG11c3QgYmUgZm91ciBkaWdpdHMgb3IgZWxzZSBhIDItZGlnaXQgZm9ybWF0IGRkIG1tbSB5eSwi LAotIiAgICBpbiB3aGljaCBjYXNlIGlmICh5eSA8IDUwKSB5eXl5ID0geXkgKyAyMDAwOyBlbHNl IHl5eXkgPSB5eSArIDE5MDAuIiwKLSIgIC4gSWYgdGhlIHllYXIgY29tZXMgZmlyc3QsIHRoZSBz ZWNvbmQgZmllbGQgaXMgdGhlIG1vbnRoLiIsCi0iICAuIFRoZSBkYXksIG1vbnRoLCBhbmQgeWVh ciBtYXkgYmUgc2VwYXJhdGVkIGJ5IHNwYWNlcywgLywgLSwgb3IgdW5kZXJzY29yZS4iCi0sIiAg LiBUaGUgZGF0ZSBhbmQgdGltZSBtYXkgYmUgc2VwYXJhdGVkIGJ5IHNwYWNlcyBvciB1bmRlcnNj b3JlLiIsCi0iICAuIFRoZSBtb250aCBtYXkgYmUgbnVtZXJpYyAoMSA9IEphbnVhcnkpIG9yIHNw ZWxsZWQgb3V0IG9yIGFiYnJldmlhdGVkIGluIiwKLSIgICAgRW5nbGlzaC4iLAotIiAgLiBUaGUg dGltZSBtYXkgYmUgaW4gMjQtaG91ciBmb3JtYXQgb3IgMTItaG91ciBmb3JtYXQuIiwKLSIgIC4g SWYgdGhlIGhvdXIgaXMgMTIgb3IgbGVzcywgQU0gaXMgYXNzdW1lZCB1bmxlc3MgQU0gb3IgUE0g aXMgaW5jbHVkZWQuIiwKLSIgIC4gSWYgdGhlIGRhdGUgaXMgb21pdHRlZCBidXQgYSB0aW1lIGlz IGdpdmVuLCB0aGUgY3VycmVudCBkYXRlIGlzIHN1cHBsaWVkLiIKLSwKLSIgIC4gSWYgdGhlIHRp bWUgaXMgZ2l2ZW4gYnV0IGRhdGUgb21pdHRlZCwgMDA6MDA6MDAgaXMgc3VwcGxpZWQuIiwKLSIg IC4gSWYgYm90aCB0aGUgZGF0ZSBhbmQgdGltZSBhcmUgb21pdHRlZCwgdGhlIGN1cnJlbnQgZGF0 ZSBhbmQgdGltZSBhcmUiLAotIiAgICBzdXBwbGllZC4iLAotIiAiLAotIiAgVGhlIGZvbGxvd2lu ZyBzaG9ydGN1dHMgY2FuIGFsc28gYmUgdXNlZCBpbiBwbGFjZSBvZiBkYXRlczoiLAotIiAiLAot IiAgTk9XIiwKLSIgICAgU3RhbmRzIGZvciB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lLiIsCi0i ICIsCi0iICBUT0RBWSIsCi0iICAgIFRvZGF5J3MgZGF0ZSwgb3B0aW9uYWxseSBmb2xsb3dlZCBi eSBhIHRpbWU7IDAwOjAwOjAwIGlmIG5vIHRpbWUgZ2l2ZW4uIiwKLSIgIiwKLSIgIFlFU1RFUkRB WSIsCi0iICAgIFllc3RlcmRheSdzIGRhdGUsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSB0aW1l IChkZWZhdWx0IDAwOjAwOjAwKS4iLAotIiAiLAotIiAgVE9NT1JST1ciLAotIiAgICBUb21vcnJv d3MncyBkYXRlLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgdGltZSAoZGVmYXVsdCAwMDowMDow MCkuIiwKLSIgIiwKLSIgIFRpbWV6b25lIHNwZWNpZmljYXRpb25zIGFyZSBzaW1pbGFyIHRvIHRo b3NlIHVzZWQgaW4gZS1tYWlsIGFuZCBIVFRQIiwKLSIgICAgaGVhZGVycywgZWl0aGVyIGEgVVNB IHRpbWV6b25lIG5hbWUsIGUuZy4gRVNULCBvciBhIHNpZ25lZCBmb3VyLWRpZ2l0IiwKLSIgICAg dGltZXpvbmUgb2Zmc2V0LCB7KywtfWhobW0sIGUuZy4sIC0wNTAwOyBpdCBpcyB1c2VkIHRvIGNv bnZlcnQgZGF0ZS10aW1lLCIKLSwKLSIgICAgYSBsb2NhbCB0aW1lIGluIHRoYXQgdGltZXpvbmUs IHRvIEdNVCB3aGljaCBpcyB0aGVuIGNvbnZlcnRlZCB0byB0aGUiLAotIiAgICBsb2NhbCB0aW1l IGF0IHRoZSBob3N0LiAgSWYgbm8gdGltZXpvbmUgaXMgZ2l2ZW4sIHRoZSBkYXRlLXRpbWUgaXMg bG9jYWwuIgotLCIgICAgVG8gY29udmVydCBsb2NhbCB0aW1lIChvciBhIHRpbWUgaW4gYSBzcGVj aWZpZWQgdGltZXpvbmUpIHRvIFVUQyAoR01UKSwiLAotIiAgICB1c2UgdGhlIGZ1bmN0aW9uIFxm dXRjZGF0ZSgpLiIsCi0iICIsCi0iICBEZWx0YSB0aW1lcyBhcmUgZ2l2ZW4gYXMgeyssLX1bbnVt YmVyIGRhdGUtdW5pdHNdW2hoWzptbVs6c3NdXV0iLAotIiAgICBBIGRhdGUgaW4gdGhlIGZ1dHVy ZS9wYXN0IHJlbGF0aXZlIHRvIHRoZSBkYXRlLXRpbWU7IGRhdGUtdW5pdHMgbWF5IGJlIiwKLSIg ICAgREFZUywgV0VFS1MsIE1PTlRIUywgWUVBUlM6ICszZGF5cywgLTd3ZWVrcywgKzM6MDAsICsx bW9udGggODowMC4iLAotIiAiLAotIkFsbCB0aGUgZm9ybWF0cyBzaG93biBhYm92ZSBhcmUgYWNj ZXB0YWJsZSBhcyBhcmd1bWVudHMgdG8gZGF0ZS10aW1lIHN3aXRjaGVzIgotLAotInN1Y2ggYXMg L0FGVEVSOiBvciAvQkVGT1JFOiwgYW5kIHRvIGZ1bmN0aW9ucyBzdWNoIGFzIFxcZmN2dGRhdGUo KSwiLAotIlxcZmRpZmZkYXRlKCksIGFuZCBcXGZ1dGNkYXRlKCksIHRoYXQgdGFrZSBkYXRlLXRp bWUgc3RyaW5ncyBhcyBhcmd1bWVudHMuIiwKLSIiCi19OwotCi0KLSNpZm5kZWYgTk9YRkVSCi1z dGF0aWMgY2hhciAqIGhteHhzZW5bXSA9IHsKLSJTeW50YXg6IFNFTkQgKG9yIFMpIFsgc3dpdGNo ZXMuLi5dIFsgZmlsZXNwZWMgWyBhcy1uYW1lIF0gXSIsCi0iICBTZW5kcyB0aGUgZmlsZSBvciBm aWxlcyBzcGVjaWZpZWQgYnkgZmlsZXNwZWMuICBJZiB0aGUgZmlsZXNwZWMgaXMgb21pdHRlZCIs Ci0iICB0aGUgU0VORC1MSVNUIGlzIHVzZWQgKEhFTFAgQUREIGZvciBtb3JlIGluZm8pLiAgVGhl IGZpbGVzcGVjIG1heSBjb250YWluIiwKLSIgIHdpbGRjYXJkIGNoYXJhY3RlcnMuICBBbiAnYXMt bmFtZScgbWF5IGJlIGdpdmVuIHRvIHNwZWNpZnkgdGhlIG5hbWUocykiLAotIiAgdGhlIGZpbGVz KHMpIGFyZSBzZW50IHVuZGVyOyBpZiB0aGUgYXMtbmFtZSBpcyBvbWl0dGVkLCBlYWNoIGZpbGUg aXMiLAotIiAgc2VudCB1bmRlciBpdHMgb3duIG5hbWUuICBBbHNvIHNlZSBIRUxQIE1TRU5ELCBI RUxQIFdJTERDQVJELiIsCi0iICBPcHRpb25hbCBzd2l0Y2hlcyBpbmNsdWRlOiIsCi0iICIsCi0j aWZuZGVmIE5PU1BMCi0iL0FSUkFZOjxhcnJheW5hbWU+IiwKLSIgIFNwZWNpZmllcyB0aGF0IHRo ZSBkYXRhIHRvIGJlIHNlbnQgY29tZXMgZnJvbSB0aGUgZ2l2ZW4gYXJyYXksIHN1Y2ggYXMiLAot IiAgXFwmYVtdLiAgQSByYW5nZSBtYXkgYmUgc3BlY2lmaWVkLCBlLmcuIFNFTkQgL0FSUkFZOiZh WzEwMDoxOTldLiAgTGVhdmUiLAotIiAgdGhlIGJyYWNrZXRzIGVtcHR5IG9yIG9taXQgdGhlbSBh bHRvZ2V0aGVyIHRvIHNlbmQgdGhlIHdob2xlIDEtYmFzZWQgYXJyYXkuIgotLAotIiAgSW5jbHVk ZSAvVEVYVCB0byBoYXZlIEtlcm1pdCBzdXBwbHkgYSBsaW5lIHRlcm1pbmF0b3IgYXQgdGhlIGVu ZCBvZiBlYWNoIiwKLSIgIGFycmF5IGVsZW1lbnQgKGFuZCB0cmFuc2xhdGUgY2hhcmFjdGVyIHNl dHMgaWYgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbnMiLAotIiAgYXJlIHNldCB1cCksIG9yIC9C SU5BUlkgdG8gdHJlYXQgdGhlIGFycmF5IGFzIG9uZSBsb25nIHN0cmluZyBvZiBjaGFyYWN0ZXJz IgotLAotIiAgdG8gYmUgc2VudCBhcy1pcy4gIElmIGFuIGFzLW5hbWUgaXMgbm90IHNwZWNpZmll ZCwgdGhlIGFycmF5IGlzIHNlbnQgd2l0aCIsCi0iICB0aGUgbmFtZSBfQVJSQVlfWF8sIHdoZXJl IFwiWFwiIGlzIHJlcGxhY2VkIGJ5IGFjdHVhbCBhcnJheSBsZXR0ZXIuIiwKLSIgIiwKLSNlbmRp ZiAvKiBOT1NQTCAqLwotCi0iL0FTLU5BTUU6PHRleHQ+IiwKLSIgIFNwZWNpZmllcyA8dGV4dD4g YXMgdGhlIG5hbWUgdG8gc2VuZCB0aGUgZmlsZSB1bmRlciBpbnN0ZWFkIG9mIGl0cyByZWFsIiwK LSIgIG5hbWUuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gZ2l2aW5nIGFuIGFzLW5hbWUgYWZ0ZXIg dGhlIGZpbGVzcGVjLiIsCi0iICIsCi0iL0JJTkFSWSIsCi0iICBQZXJmb3JtcyB0aGlzIHRyYW5z ZmVyIGluIGJpbmFyeSBtb2RlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBnbG9iYWwiLAotIiAgdHJh bnNmZXIgbW9kZS4iLAotIiAiLAotIi9URVhUIiwKLSIgIFBlcmZvcm1zIHRoaXMgdHJhbnNmZXIg aW4gdGV4dCBtb2RlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBnbG9iYWwiLAotIiAgdHJhbnNmZXIg bW9kZS4iLAotIiAiLAotIi9UUkFOU1BBUkVOVCIsCi0iICBJbmhpYml0cyBjaGFyYWN0ZXItc2V0 IHRyYW5zbGF0aW9uIGZvciB0ZXh0IGZpbGVzIGZvciB0aGUgZHVyYXRpb24gb2YiLAotIiAgdGhl IFNFTkQgY29tbWFuZCB3aXRob3V0IGFmZmVjdGluZyBzdWJzZXF1ZW50IGNvbW1hbmRzLiIsCi0i ICIsCi0iL05PQkFDS1VQRklMRVMiLAotIiAgU2tpcCAoZG9uJ3Qgc2VuZCkgS2VybWl0IG9yIEVN QUNTIGJhY2t1cCBmaWxlcyAoZmlsZXMgd2l0aCBuYW1lcyB0aGF0IiwKLSIgIGVuZCB3aXRoIC5+ bn4sIHdoZXJlIG4gaXMgYSBudW1iZXIpLiIsCi0iICIsCi0jaWZkZWYgVU5JWE9ST1NLCi0iL0RP VEZJTEVTIiwKLSIgIEluY2x1ZGUgKHNlbmQpIGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGgg XCIuXCIuIiwKLSIgIiwKLSIvTk9ET1RGSUxFUyIsCi0iICBEb24ndCBzZW5kIGZpbGVzIHdob3Nl IG5hbWVzIGJlZ2luIHdpdGggXCIuXCIuIiwKLSIgIiwKLSIvRk9MTE9XTElOS1MiLAotIiAgU2Vu ZCBmaWxlcyB0aGF0IGFyZSBwb2ludGVkIHRvIGJ5IHN5bWJvbGljIGxpbmtzLiIsCi0iICIsCi0i L05PRk9MTE9XTElOS1MiLAotIiAgU2tpcCBvdmVyIHN5bWJvbGljIGxpbmtzIChkZWZhdWx0KS4i LAotIiAiLAotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotCi0jaWZkZWYgVk1TCi0iL0lNQUdFIiwK LSIgIFBlcmZvcm1zIHRoaXMgdHJhbnNmZXIgaW4gaW1hZ2UgbW9kZSB3aXRob3V0IGFmZmVjdGlu ZyB0aGUgZ2xvYmFsIiwKLSIgIHRyYW5zZmVyIG1vZGUuIiwKLSIgIiwKLSNlbmRpZiAvKiBWTVMg Ki8KLSNpZmRlZiBDS19MQUJFTEVECi0iL0xBQkVMRUQiLAotIiAgUGVyZm9ybXMgdGhpcyB0cmFu c2ZlciBpbiBsYWJlbGVkIG1vZGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGdsb2JhbCIsCi0iICB0 cmFuc2ZlciBtb2RlLiIsCi0iICIsCi0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotIi9DT01NQU5E IiwKLSIgIFNlbmRzIHRoZSBvdXRwdXQgZnJvbSBhIGNvbW1hbmQsIHJhdGhlciB0aGFuIHRoZSBj b250ZW50cyBvZiBhIGZpbGUuIiwKLSIgIFRoZSBmaXJzdCBcImZpbGVuYW1lXCIgb24gdGhlIFNF TkQgY29tbWFuZCBsaW5lIGlzIGludGVycHJldGVkIGFzIHRoZSBuYW1lIiwKLSIgIG9mIGEgY29t bWFuZDsgdGhlIHNlY29uZCAoaWYgYW55KSBpcyB0aGUgYXMtbmFtZS4iLAotIiAiLAotIi9GSUxF TkFNRVM6e0NPTlZFUlRFRCxMSVRFUkFMfSIsCi0iICBPdmVycmlkZXMgdGhlIGdsb2JhbCBTRVQg RklMRSBOQU1FUyBzZXR0aW5nIGZvciB0aGlzIHRyYW5zZmVyIG9ubHkuIiwKLSIgIiwKLSIvUEFU SE5BTUVTOntPRkYsQUJTT0xVVEUsUkVMQVRJVkV9IiwKLSIgIE92ZXJyaWRlcyB0aGUgZ2xvYmFs IFNFVCBTRU5EIFBBVEhOQU1FUyBzZXR0aW5nIGZvciB0aGlzIHRyYW5zZmVyLiIsCi0iICIsCi0i L0ZJTFRFUjpjb21tYW5kIiwKLSIgIFNwZWNpZmllcyBhIGNvbW1hbmQgXAotKHN0YW5kYXJkIGlu cHV0L291dHB1dCBmaWx0ZXIpIHRvIHBhc3MgdGhlIGZpbGUgdGhyb3VnaCIsCi0iICBiZWZvcmUg c2VuZGluZyBpdC4iLAotIiAiLAotIi9ERUxFVEUiLAotIiAgRGVsZXRlcyB0aGUgZmlsZSAob3Ig ZWFjaCBmaWxlIGluIHRoZSBncm91cCkgYWZ0ZXIgaXQgaGFzIGJlZW4gc2VudCIsCi0iICBzdWNj ZXNzZnVsbHkgKGFwcGxpZXMgb25seSB0byByZWFsIGZpbGVzKS4iLAotIiAiLAotIi9RVUlFVCIs Ci0iICBXaGVuIHNlbmRpbmcgaW4gbG9jYWwgbW9kZSwgdGhpcyBzdXBwcmVzc2VzIHRoZSBmaWxl LXRyYW5zZmVyIGRpc3BsYXkuIiwKLSIgIiwKLSIvUkVDT1ZFUiIsCi0iICBVc2VkIHRvIHJlY292 ZXIgZnJvbSBhIHByZXZpb3VzbHkgaW50ZXJydXB0ZWQgdHJhbnNmZXI7IFNFTkQgL1JFQ09WRVIi LAotIiAgaXMgZXF1aXZhbGVudCBSRVNFTkQgKHVzZSBpbiBiaW5hcnkgbW9kZSBvbmx5KS4iLAot IiAiLAotIi9SRUNVUlNJVkUiLAotIiAgVGVsbHMgQy1LZXJtaXQgdG8gbG9vayBub3Qgb25seSBp biB0aGUgZ2l2ZW4gb3IgY3VycmVudCBkaXJlY3RvcnkgZm9yIiwKLSIgIGZpbGVzIHRoYXQgbWF0 Y2ggdGhlIGZpbGVzcGVjLCBidXQgYWxzbyBpbiBhbGwgaXRzIHN1YmRpcmVjdG9yaWVzLCBhbmQi LAotIiAgYWxsIHRoZWlyIHN1YmRpcmVjdG9yaWVzLCBldGMuIiwKLSIgIiwKLSIvUkVOQU1FLVRP Om5hbWUiLAotIiAgVGVsbHMgQy1LZXJtaXQgdG8gcmVuYW1lIGVhY2ggc291cmNlIGZpbGUgdGhh dCBpcyBzZW50IHN1Y2Nlc3NmdWxseSB0byIsCi0iICB0aGUgZ2l2ZW4gbmFtZSAodXN1YWxseSB5 b3Ugc2hvdWxkIGluY2x1ZGUgXFx2KGZpbGVuYW1lKSBpbiB0aGUgbmV3IG5hbWUsIiwKLSIgIHdo aWNoIGlzIHJlcGxhY2VkIGJ5IHRoZSBvcmlnaW5hbCBmaWxlbmFtZS4iLAotIiAiLAotIi9NT1ZF LVRPOmRpcmVjdG9yeSIsCi0iICBUZWxscyBDLUtlcm1pdCB0byBtb3ZlIGVhY2ggc291cmNlIGZp bGUgdGhhdCBpcyBzZW50IHN1Y2Nlc3NmdWxseSB0byIsCi0iICB0aGUgZ2l2ZW4gZGlyZWN0b3J5 LiIsCi0iICIsCi0iL1NUQVJUSU5HOm51bWJlciIsCi0iICBTdGFydHMgc2VuZGluZyB0aGUgZmls ZSBmcm9tIHRoZSBnaXZlbiBieXRlIHBvc2l0aW9uLiIsCi0iICBTRU5EIC9TVEFSVElORzpuIGZp bGVuYW1lIGlzIGVxdWl2YWxlbnQgdG8gUFNFTkQgZmlsZW5hbWUgbi4iLAotIiAiLAotIi9TVUJK RUNUOnRleHQiLAotIiAgU3BlY2lmaWVzIHRoZSBzdWJqZWN0IG9mIGFuIGVtYWlsIG1lc3NhZ2Us IHRvIGJlIHVzZWQgd2l0aCAvTUFJTC4gIElmIHRoZSIsCi0iICB0ZXh0IGNvbnRhaW5zIHNwYWNl cywgaXQgbXVzdCBiZSBlbmNsb3NlZCBpbiBicmFjZXMuIiwKLSIgIiwKLSIvTUFJTDphZGRyZXNz IiwKLSIgIFNlbmRzIHRoZSBmaWxlIGFzIGUtbWFpbCB0byB0aGUgZ2l2ZW4gYWRkcmVzczsgdXNl IHdpdGggL1NVQkpFQ1Q6LiIsCi0iICIsCi0iL1BSSU5UOm9wdGlvbnMiLAotIiAgU2VuZHMgdGhl IGZpbGUgdG8gYmUgcHJpbnRlZCwgd2l0aCBvcHRpb25hbCBvcHRpb25zIGZvciB0aGUgcHJpbnRl ci4iLAotIiAiLAotI2lmZGVmIENLX1hZWgotIi9QUk9UT0NPTDpuYW1lIiwKLSIgIFVzZXMgdGhl IGdpdmVuIHByb3RvY29sIHRvIHNlbmQgdGhlIGZpbGUgKEtlcm1pdCwgWm1vZGVtLCBldGMpIGZv ciB0aGlzIiwKLSIgIHRyYW5zZmVyIHdpdGhvdXQgY2hhbmdpbmcgZ2xvYmFsIHByb3RvY29sLiIs Ci0iICIsCi0jZW5kaWYgLyogQ0tfWFlaICovCi0iL0FGVEVSOmRhdGUtdGltZSIsCi0jaWZkZWYg Vk1TCi0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIGNyZWF0ZWQgYWZ0ZXIgdGhl IGdpdmVuIGRhdGUtdGltZSBhcmUiLAotI2Vsc2UKLSIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhv c2UgZmlsZXMgbW9kaWZpZWQgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGltZSBhcmUiLAotI2VuZGlm IC8qIFZNUyAqLwotIiAgdG8gYmUgc2VudC4gIEhFTFAgREFURSBmb3IgaW5mbyBhYm91dCBkYXRl LXRpbWUgZm9ybWF0cy4iLAotIiAiLAotIi9CRUZPUkU6ZGF0ZS10aW1lIiwKLSNpZmRlZiBWTVMK LSIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYmVmb3JlIHRoZSBn aXZlbiBkYXRlLXRpbWUiLAotI2Vsc2UKLSIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmls ZXMgbW9kaWZpZWQgYmVmb3JlIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAotI2VuZGlmIC8qIFZNUyAq LwotIiAgYXJlIHRvIGJlIHNlbnQuIiwKLSIgIiwKLSIvTk9ULUFGVEVSOmRhdGUtdGltZSIsCi0j aWZkZWYgVk1TCi0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGF0 IG9yIGJlZm9yZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKLSNlbHNlCi0iICBTcGVjaWZpZXMgdGhh dCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGF0IG9yIGJlZm9yZSB0aGUgZ2l2ZW4gZGF0ZS10 aW1lIiwKLSNlbmRpZiAvKiBWTVMgKi8KLSIgIGFyZSB0byBiZSBzZW50LiIsCi0iICIsCi0iL05P VC1CRUZPUkU6ZGF0ZS10aW1lIiwKLSNpZmRlZiBWTVMKLSIgIFNwZWNpZmllcyB0aGF0IG9ubHkg dGhvc2UgZmlsZXMgbW9kaWZpZWQgYXQgb3IgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGltZSIsCi0j ZWxzZQotIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBhdCBvciBh ZnRlciB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKLSNlbmRpZiAvKiBWTVMgKi8KLSIgIGFyZSB0byBi ZSBzZW50LiIsCi0iICIsCi0iL0xBUkdFUi1USEFOOm51bWJlciIsCi0iICBTcGVjaWZpZXMgdGhh dCBvbmx5IHRob3NlIGZpbGVzIGxvbmdlciB0aGFuIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMg YXJlIiwKLSIgIHRvIGJlIHNlbnQuIiwKLSIgIiwKLSIvU01BTExFUi1USEFOOm51bWJlciIsCi0i ICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIHNtYWxsZXIgdGhhbiB0aGUgZ2l2ZW4g bnVtYmVyIG9mIGJ5dGVzIGFyZSIsCi0iICB0byBiZSBzZW50LiIsCi0iICIsCi0iL0VYQ0VQVDpw YXR0ZXJuIiwKLSIgIFNwZWNpZmllcyB0aGF0IGFueSBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0 aGUgcGF0dGVybiwgd2hpY2ggY2FuIGJlIGEiLAotIiAgcmVndWxhciBmaWxlbmFtZSwgb3IgbWF5 IGNvbnRhaW4gXCIqXCIgYW5kL29yIFwiP1wiIG1ldGFjaGFyYWN0ZXJzLCIsCi0iICBhcmUgbm90 IHRvIGJlIHNlbnQuICBUbyBzcGVjaWZ5IG11bHRpcGxlIHBhdHRlcm5zICh1cCB0byA4KSwgdXNl IG91dGVyIiwKLSIgIGJyYWNlcyBhcm91bmQgdGhlIGdyb3VwLCBhbmQgaW5uZXIgYnJhY2VzIGFy b3VuZCBlYWNoIHBhdHRlcm46IiwKLSIgIiwKLSIgICAgL0VYQ0VQVDp7e3BhdHRlcm4xfXtwYXR0 ZXJuMn0uLi59IiwKLSIgIiwKLSIvVFlQRTp7QUxMLFRFWFQsQklOQVJZfSIsCi0iICBTZW5kIG9u bHkgZmlsZXMgb2YgdGhlIGdpdmVuIHR5cGUgKHNlZSBTRVQgRklMRSBTQ0FOKS4iLAotIiAiLAot Ii9MSVNURklMRTpmaWxlbmFtZSIsCi0iICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBmaWxlIHRo YXQgY29udGFpbnMgdGhlIGxpc3Qgb2YgbmFtZXMgb2YgZmlsZXMiLAotIiAgdGhhdCBhcmUgdG8g YmUgc2VudC4gIFRoZSBmaWxlbmFtZXMgc2hvdWxkIGJlIGxpc3RlZCBvbmUgbmFtZSBwZXIgbGlu ZSIsCi0iICBpbiB0aGlzIGZpbGUgKGJ1dCBhIG5hbWUgY2FuIGNvbnRhaW4gd2lsZGNhcmRzKS4i LAotIiAiLAotIkFsc28gc2VlIEhFTFAgUkVDRUlWRSwgSEVMUCBHRVQsIEhFTFAgU0VSVkVSLCBI RUxQIFJFTU9URS4iLAotIiJ9OwotCi1zdGF0aWMgY2hhciAqaG14eHJjW10gPSB7Ci0iU3ludGF4 OiBSRUNFSVZFIChvciBSKSBbIHN3aXRjaGVzLi4uIF0gWyBhcy1uYW1lIF0iLAotIiAgV2FpdCBm b3IgYSBmaWxlIHRvIGFycml2ZSBmcm9tIHRoZSBvdGhlciBLZXJtaXQsIHdoaWNoIG11c3QgYmUg Z2l2ZW4gYSIsCi0iICBTRU5EIGNvbW1hbmQuICBJZiB0aGUgb3B0aW9uYWwgYXMtbmFtZSBpcyBn aXZlbiwgdGhlIGluY29taW5nIGZpbGUgb3IiLAotIiAgZmlsZXMgYXJlIHN0b3JlZCB1bmRlciB0 aGF0IG5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGJlIHN0b3JlZCB1bmRlciIsCi0jaWZuZGVmIENL X1RNUERJUgotIiAgdGhlIG5hbWUgaXQgYXJyaXZlcyB3aXRoLiIsCi0jZWxzZQotI2lmZGVmIE9T MgotIiAgdGhlIG5hbWUgaXQgYXJyaXZlcyB3aXRoLiAgSWYgdGhlIGZpbGVzcGVjIGRlbm90ZXMg YSBkaXNrIGFuZC9vciIsCi0iICBkaXJlY3RvcnksIHRoZSBpbmNvbWluZyBmaWxlIG9yIGZpbGVz IHdpbGwgYmUgc3RvcmVkIHRoZXJlLiIsCi0jZWxzZQotIiAgdGhlIG5hbWUgaXQgYXJyaXZlcyB3 aXRoLiAgSWYgdGhlIGZpbGVzcGVjIGRlbm90ZXMgYSBkaXJlY3RvcnksIHRoZSIsCi0iICBpbmNv bWluZyBmaWxlIG9yIGZpbGVzIHdpbGwgYmUgcGxhY2VkIGluIHRoYXQgZGlyZWN0b3J5LiIsCi0j ZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0iICIsCi0iT3B0aW9uYWwg c3dpdGNoZXMgaW5jbHVkZToiLAotIiAiLAotIi9BUy1OQU1FOnRleHQiLAotIiAgU3BlY2lmaWVz IFwidGV4dFwiIGFzIHRoZSBuYW1lIHRvIHN0b3JlIHRoZSBpbmNvbWluZyBmaWxlIHVuZGVyLiIs Ci0iICBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgYXMtbmFtZSBhcyBhIGZpbGVuYW1lIG9uIHRo ZSBjb21tYW5kIGxpbmUuIiwKLSIgIiwKLSIvQklOQVJZIiwKLSIgIFNraXBzIHRleHQtbW9kZSBj b252ZXJzaW9ucyB1bmxlc3MgdGhlIGluY29taW5nIGZpbGUgYXJyaXZlcyB3aXRoIGJpbmFyeSIs Ci0iICBhdHRyaWJ1dGUiLAotIiAiLAotIi9DT01NQU5EIiwKLSIgIFJlY2VpdmVzIHRoZSBmaWxl IGludG8gdGhlIHN0YW5kYXJkIGlucHV0IG9mIGEgY29tbWFuZCwgcmF0aGVyIHRoYW4gc2F2aW5n IiwKLSIgIGl0IG9uIGRpc2suICBUaGUgL0FTLU5BTUUgb3IgdGhlIFwiZmlsZW5hbWVcIiBvbiB0 aGUgUkVDRUlWRSBjb21tYW5kIGxpbmUiLAotIiAgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIG5hbWUg b2YgYSBjb21tYW5kLiIsCi0iICIsCi0iL0VYQ0VQVDpwYXR0ZXJuIiwKLSIgIFNwZWNpZmllcyB0 aGF0IGFueSBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgcGF0dGVybiwgd2hpY2ggY2FuIGJl IGEiLAotIiAgcmVndWxhciBmaWxlbmFtZSwgb3IgbWF5IGNvbnRhaW4gXCIqXCIgYW5kL29yIFwi P1wiIG1ldGFjaGFyYWN0ZXJzLCIsCi0iICBhcmUgdG8gYmUgcmVmdXNlZC4gIFRvIHNwZWNpZnkg bXVsdGlwbGUgcGF0dGVybnMgKHVwIHRvIDgpLCB1c2Ugb3V0ZXIiLAotIiAgYnJhY2VzIGFyb3Vu ZCB0aGUgZ3JvdXAsIGFuZCBpbm5lciBicmFjZXMgYXJvdW5kIGVhY2ggcGF0dGVybjoiLAotIiAi LAotIiAgICAvRVhDRVBUOnt7cGF0dGVybjF9e3BhdHRlcm4yfS4uLn0iLAotIiAiLAotIi9GSUxF TkFNRVM6e0NPTlZFUlRFRCxMSVRFUkFMfSIsCi0iICBPdmVycmlkZXMgdGhlIGdsb2JhbCBTRVQg RklMRSBOQU1FUyBzZXR0aW5nIGZvciB0aGlzIHRyYW5zZmVyIG9ubHkuIiwKLSIgIiwKLSIvRklM VEVSOmNvbW1hbmQiLAotIiAgQ2F1c2VzIHRoZSBpbmNvbWluZyBmaWxlIHRvIHBhc3NlZCB0aHJv dWdoIHRoZSBnaXZlbiBjb21tYW5kIChzdGFuZGFyZCIsCi0iICBpbnB1dC9vdXRwdXQgZmlsdGVy KSBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0byBkaXNrLiIsCi0iICIsCi0jaWZkZWYgVk1TCi0iL0lN QUdFIiwKLSIgIFJlY2VpdmVzIHRoZSBmaWxlIGluIGltYWdlIG1vZGUuIiwKLSIgIiwKLSNlbmRp ZiAvKiBWTVMgKi8KLSNpZmRlZiBDS19MQUJFTEVECi0iL0xBQkVMRUQiLAotIiAgU3BlY2lmaWVz IGxhYmVsZWQgdHJhbnNmZXIgbW9kZS4iLAotIiAiLAotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8K LQotIi9NT1ZFLVRPOmRpcmVjdG9yeS1uYW1lIiwKLSIgIFNwZWNpZmllcyB0aGF0IGVhY2ggZmls ZSB0aGF0IGFycml2ZXMgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBzcGVjaWZpZWQiLAotIiAgZGly ZWN0b3J5IGFmdGVyLCBhbmQgb25seSBpZiwgaXQgaGFzIGJlZW4gcmVjZWl2ZWQgc3VjY2Vzc2Z1 bGx5LiIsCi0iICIsCi0iL1BBVEhOQU1FUzp7T0ZGLEFCU09MVVRFLFJFTEFUSVZFLEFVVE99IiwK LSIgIE92ZXJyaWRlcyB0aGUgZ2xvYmFsIFNFVCBSRUNFSVZFIFBBVEhOQU1FUyBzZXR0aW5nIGZv ciB0aGlzIHRyYW5zZmVyLiIsCi0iICIsCi0iL1BJUEVTOntPTixPRkZ9IiwKLSIgIE92ZXJyaWRl cyB0aGUgVFJBTlNGRVIgUElQRVMgc2V0dGluZyBmb3IgdGhpcyBjb21tYW5kIG9ubHkuICBPTiBh bGxvd3MiLAotIiAgcmVjZXB0aW9uIG9mIGZpbGVzIHdpdGggbmFtZXMgbGlrZSBcIiF0YXIgeGYg LVwiIHRvIGJlIGF1dG9tYXRpY2FsbHkiLAotIiAgZGlyZWN0ZWQgdG8gYSBwaXBlbGluZS4iLAot IiAiLAotIi9QUk9UT0NPTDpuYW1lIiwKLSIgIFVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2wgdG8gcmVj ZWl2ZSB0aGUgaW5jb21pbmcgZmlsZShzKS4iLAotIiAiLAotIi9RVUlFVCIsCi0iICBXaGVuIHNl bmRpbmcgaW4gbG9jYWwgbW9kZSwgdGhpcyBzdXBwcmVzc2VzIHRoZSBmaWxlLXRyYW5zZmVyIGRp c3BsYXkuIiwKLSIgIiwKLSIvUkVDVVJTSVZFIiwKLSIgIEVxdWl2YWxlbnQgdG8gL1BBVEhOQU1F UzpSRUxBVElWRS4iLAotIiAiLAotIi9SRU5BTUUtVE86c3RyaW5nIiwKLSIgIFNwZWNpZmllcyB0 aGF0IGVhY2ggZmlsZSB0aGF0IGFycml2ZXMgc2hvdWxkIGJlIHJlbmFtZWQgYXMgc3BlY2lmaWVk IiwKLSIgIGFmdGVyLCBhbmQgb25seSBpZiwgaXQgaGFzIGJlZW4gcmVjZWl2ZWQgc3VjY2Vzc2Z1 bGx5LiAgVGhlIHN0cmluZyBzaG91bGQiLAotIiAgbm9ybWFsbHkgY29udGFpbiB2YXJpYWJsZXMg bGlrZSBcXHYoZmlsZW5hbWUpIG9yIFxcdihmaWxlbnVtKS4iLAotIiAiLAotIi9URVhUIiwKLSIg IEZvcmNlcyB0ZXh0LW1vZGUgY29udmVyc2lvbnMgdW5sZXNzIHRoZSBpbmNvbWluZyBmaWxlIGhh cyB0aGUgYmluYXJ5IiwKLSIgIGF0dHJpYnV0ZSIsCi0iICIsCi0iL1RSQU5TUEFSRU5UIiwKLSIg IEluaGliaXRzIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gb2YgaW5jb21pbmcgdGV4dCBmaWxl cyBmb3IgdGhlIGR1cmF0aW9uIiwKLSIgIG9mIHRoZSBSRUNFSVZFIGNvbW1hbmQgd2l0aG91dCBh ZmZlY3Rpbmcgc3Vic2VxdWVudCBjb21tYW5kcy4iLAotIiAiLAotIkFsc28gc2VlIEhFTFAgU0VO RCwgSEVMUCBHRVQsIEhFTFAgU0VSVkVSLCBIRUxQIFJFTU9URS4iLAotIiIgfTsKLQotI2lmbmRl ZiBOT1JFU0VORAotc3RhdGljIGNoYXIgKmhteHhyc2VuID0gIlwKLVN5bnRheDogUkVTRU5EIGZp bGVzcGVjIFtuYW1lXVxuXG5cCi0gIFJlc2VuZHMgdGhlIGZpbGUgb3IgZmlsZXMsIHdob3NlIHBy ZXZpb3VzIHRyYW5zZmVyIHdhcyBpbnRlcnJ1cHRlZC5cblwKLSAgUGlja3MgdXAgZnJvbSB3aGVy ZSBwcmV2aW91cyB0cmFuc2ZlciBsZWZ0IG9mZiwgSUYgdGhlIHJlY2VpdmVyIGtlcHQgdGhlXG5c Ci0gIHBhcnRpYWxseSByZWNlaXZlZCBmaWxlLiAgV29ya3Mgb25seSBmb3IgYmluYXJ5LW1vZGUg dHJhbnNmZXJzLlxuXAotICBSZXF1aXJlcyBmaWxlLXRyYW5zZmVyIHBhcnRuZXIgdG8gc3VwcG9y dCByZWNvdmVyeS4gIFN5bm9ueW06IFJFUFVULiI7Ci0KLXN0YXRpYyBjaGFyICpobXh4cmdldCA9 ICJcCi1TeW50YXg6IFJFR0VUIGZpbGVzcGVjXG5cblwKLSAgQXNrIGEgc2VydmVyIHRvIFJFU0VO RCBhIGZpbGUgdG8gQy1LZXJtaXQuIjsKLQotc3RhdGljIGNoYXIgKmhteHhwc2VuID0gIlwKLVN5 bnRheDogUFNFTkQgZmlsZXNwZWMgcG9zaXRpb24gW25hbWVdXG5cblwKLSAgSnVzdCBsaWtlIFNF TkQsIGV4Y2VwdCBzZW5kcyB0aGUgZmlsZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYnl0ZSBwb3Np dGlvbi4iOwotI2VuZGlmIC8qIE5PUkVTRU5EICovCi0KLSNpZm5kZWYgTk9NU0VORAotc3RhdGlj IGNoYXIgKmhteHhtc2VbXSA9IHsKLSJTeW50YXg6IE1TRU5EIFsgc3dpdGNoZXMuLi4gXSBmaWxl c3BlYyBbIGZpbGVzcGVjIFsgLi4uIF0gXSIsCi0iICBTZW5kcyB0aGUgZmlsZXMgc3BlY2lmaWVk IGJ5IHRoZSBmaWxlc3BlY3MuICBPbmUgb3IgbW9yZSBmaWxlc3BlY3MgbWF5IGJlIiwKLSIgIGxp c3RlZCwgc2VwYXJhdGVkIGJ5IHNwYWNlcy4gIEFueSBvciBhbGwgZmlsZXNwZWNzIG1heSBjb250 YWluIHdpbGRjYXJkcyIsCi0iICBhbmQgdGhleSBtYXkgYmUgaW4gZGlmZmVyZW50IGRpcmVjdG9y aWVzLiAgQWx0ZXJuYXRpdmUgbmFtZXMgY2Fubm90IGJlIiwKLSIgIGdpdmVuLiAgU3dpdGNoZXMg aW5jbHVkZSAvQklOQVJZIC9ERUxFVEUgL01BSUwgL1BST1RPQ09MIC9RVUlFVCAvUkVDT1ZFUiIs Ci0iICAvVEVYVCAvVFlQRTsgc2VlIEhFTFAgU0VORCBmb3IgZGVzY3JpcHRpb25zLiIsCi0iIgot fTsKLSNlbmRpZiAvKiBOT01TRU5EICovCi0KLXN0YXRpYyBjaGFyICpobXh4YWRkW10gPSB7Ci0j aWZuZGVmIE5PTVNFTkQKLSJBREQgU0VORC1MSVNUIGZpbGVzcGVjIFsgPG1vZGU+IFsgPGFzLW5h bWU+IF0gXSIsCi0iICBBZGRzIHRoZSBzcGVjaWZpZWQgZmlsZSBvciBmaWxlcyB0byB0aGUgY3Vy cmVudCBTRU5EIGxpc3QuICBVc2UgU0hPVyIsCi0iICBTRU5ELUxJU1QgYW5kIENMRUFSIFNFTkQt TElTVCB0byBkaXNwbGF5IGFuZCBjbGVhciB0aGUgbGlzdDsgdXNlIFNFTkQiLAotIiAgYnkgaXRz ZWxmIHRvIHNlbmQgdGhlIGZpbGVzIGZyb20gaXQuIiwKLSIgIiwKLSNlbmRpZiAvKiBOT01TRU5E ICovCi0jaWZkZWYgUEFUVEVSTlMKLSJBREQgQklOQVJZLVBBVFRFUk5TIFsgPHBhdHRlcm4+IFsg PHBhdHRlcm4+IC4uLiBdIF0iLAotIiAgQWRkcyB0aGUgcGF0dGVybihzKSwgaWYgYW55LCB0byB0 aGUgU0VUIEZJTEUgQklOQVJZLVBBVFRFUk5TIGxpc3QuIiwKLSIgIiwKLSJBREQgVEVYVC1QQVRU RVJOUyBbIDxwYXR0ZXJuPiBbIDxwYXR0ZXJuPiAuLi4gXSBdIiwKLSIgIEFkZHMgdGhlIHBhdHRl cm4ocyksIGlmIGFueSwgdG8gdGhlIFNFVCBGSUxFIFRFWFQtUEFUVEVSTlMgbGlzdC4iLAotIiAg VXNlIFNIT1cgUEFUVEVSTlMgdG8gc2VlIHRoZSBsaXN0cy4gIFNlZSBIRUxQIFNFVCBGSUxFIGZv ciBmdXJ0aGVyIGluZm8uIiwKLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotIiJ9OwotCi1zdGF0aWMg Y2hhciAqaG14eHJlbXZbXSA9IHsKLSNpZmRlZiBQQVRURVJOUwotIlJFTU9WRSBCSU5BUlktUEFU VEVSTlMgWyA8cGF0dGVybj4gWyA8cGF0dGVybj4gLi4uIF0gXSIsCi0iICBSZW1vdmVzIHRoZSBw YXR0ZXJuKHMpLCBpZiBhbnksIGZyb20gdGhlIFNFVCBGSUxFIEJJTkFSWS1QQVRURVJOUyBsaXN0 IiwKLSIgIiwKLSJSRU1PVkUgVEVYVC1QQVRURVJOUyBbIDxwYXR0ZXJuPiBbIDxwYXR0ZXJuPiAu Li4gXSBdIiwKLSIgIFJlbW92ZXMgdGhlIGdpdmVuIHBhdHRlcm5zIGZyb20gdGhlIFNFVCBGSUxF IFRFWFQtUEFUVEVSTlMgbGlzdC4iLAotIiAgVXNlIFNIT1cgUEFUVEVSTlMgdG8gc2VlIHRoZSBs aXN0cy4gIFNlZSBIRUxQIFNFVCBGSUxFIGZvciBmdXJ0aGVyIGluZm8uIiwKLSNlbmRpZiAvKiBQ QVRURVJOUyAqLwotIiJ9OwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PU0VSVkVS Ci1zdGF0aWMgY2hhciAqaG14eHNlciA9ICJTeW50YXg6IFNFUlZFUlxuXAotICBFbnRlciBzZXJ2 ZXIgbW9kZSBvbiB0aGUgY3VycmVudCBjb25uZWN0aW9uLiAgQWxsIGZ1cnRoZXIgY29tbWFuZHNc blwKLSAgYXJlIHRha2VuIGluIHBhY2tldCBmb3JtIGZyb20gdGhlIG90aGVyIEtlcm1pdCBwcm9n cmFtLiAgVXNlIEZJTklTSCxcblwKLSAgQllFLCBvciBSRU1PVEUgRVhJVCB0byBnZXQgQy1LZXJt aXQgb3V0IG9mIHNlcnZlciBtb2RlLiI7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQotc3RhdGlj IGNoYXIgKmhtaHNldFtdID0gewotIiAgVGhlIFNFVCBjb21tYW5kIGVzdGFibGlzaGVzIGNvbW11 bmljYXRpb24sIGZpbGUsIHNjcmlwdGluZywgb3Igb3RoZXIiLAotIiAgcGFyYW1ldGVycy4gIFRo ZSBTSE9XIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgdmFsdWVzIG9mIiwKLSIg IFNFVCBwYXJhbWV0ZXJzLiAgSGVscCBpcyBhdmFpbGFibGUgZm9yIGVhY2ggaW5kaXZpZHVhbCBw YXJhbWV0ZXI7IiwKLSIgIHR5cGUgSEVMUCBTRVQgPyB0byBzZWUgd2hhdCdzIGF2YWlsYWJsZS4i LAotIiIgfTsKLQotI2lmbmRlZiBOT1NFVEtFWQotc3RhdGljIGNoYXIgKmhtaHNrZXlbXSA9IHsK LSJTeW50YXg6IFNFVCBLRVkgayB0ZXh0IiwKLSJPcjogICAgIFNFVCBLRVkgQ0xFQVIiLAotIiAg Q29uZmlndXJlIHRoZSBrZXkgd2hvc2UgXCJzY2FuIGNvZGVcIiBpcyBrIHRvIHNlbmQgdGhlIGdp dmVuIHRleHQgd2hlbiIsCi0iICBwcmVzc2VkIGR1cmluZyBDT05ORUNUIG1vZGUuICBTRVQgS0VZ IENMRUFSIHJlc3RvcmVzIGFsbCB0aGUgZGVmYXVsdCIsCi0iICBrZXkgbWFwcGluZ3MuICBJZiB0 aGVyZSBpcyBubyB0ZXh0LCB0aGUgZGVmYXVsdCBrZXkgYmluZGluZyBpcyByZXN0b3JlZCIsCi0j aWZuZGVmIE5PQ1NFVFMKLSIgIGZvciB0aGUga2V5IGsuICBTRVQgS0VZIG1hcHBpbmdzIHRha2Ug cGxhY2UgYmVmb3JlIHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQiLAotIiAgdHJhbnNsYXRpb24uIiwK LSNlbHNlCi0iICB0aGUga2V5IGsuIiwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jaWZkZWYgT1My Ci0iICIsCi0iICBUaGUgdGV4dCBtYXkgY29udGFpbiBcIlxcS3ZlcmJzXCIgdG8gZGVub3RlIGFj dGlvbnMsIHRvIHN0YW5kIGZvciBERUMiLAotIiAga2V5cGFkLCBmdW5jdGlvbiwgb3IgZWRpdGlu ZyBrZXlzLCBldGMuICBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBrZXlib2FyZCIsCi0iICB2ZXJi cywgdHlwZSBTSE9XIEtWRVJCUy4iLAotI2VuZGlmIC8qIE9TMiAqLwotIiAiLAotIiAgVG8gZmlu ZCBvdXQgdGhlIHNjYW4gY29kZSBhbmQgbWFwcGluZyBmb3IgYSBwYXJ0aWN1bGFyIGtleSwgdXNl IHRoZSIsCi0iICBTSE9XIEtFWSBjb21tYW5kLiIsCi0iIn07Ci0jZW5kaWYgLyogTk9TRVRLRVkg Ki8KLQotc3RhdGljIGNoYXIgKmhteHljaGt0W10gPSB7ICJTeW50YXg6IFNFVCBCTE9DSy1DSEVD SyBudW1iZXIiLAotIiAiLAotIlR5cGUgb2YgYmxvY2sgY2hlY2sgdG8gYmUgdXNlZCBmb3IgZXJy b3IgZGV0ZWN0aW9uIG9uIGZpbGUtdHJhbnNmZXIiLAotInBhY2tldHM6IDEsIDIsIDMsIDQsIG9y IDUuICBUaGlzIGNvbW1hbmQgbXVzdCBiZSBnaXZlbiB0byB0aGUgZmlsZSIsCi0ic2VuZGVyIHBy aW9yIHRvIHRoZSB0cmFuc2Zlci4iLAotIiAiLAotIlR5cGUgMSBpcyBzdGFuZGFyZCBhbmQgc3Vw cG9ydGVkIGJ5IGFsbCBLZXJtaXQgcHJvdG9jb2wgaW1wbGVtZW50YXRpb25zLCIsCi0iICBidXQg aXQncyBvbmx5IGEgNi1iaXQgY2hlY2tzdW0sIHJlcHJlc2VudGVkIGluIGEgc2luZ2xlIHByaW50 YWJsZSBBU0NJSSIsCi0iICBjaGFyYWN0ZXIuICBJdCdzIGZpbmUgZm9yIHJlbGlhYmxlIGNvbm5l Y3Rpb25zIChlcnJvci1jb3JyZWN0aW5nIG1vZGVtcywiLAotIiAgVENQL0lQLCBldGMpIGJ1dCB0 eXBlIDMgaXMgcmVjb21tZW5kZWQgZm9yIGNvbm5lY3Rpb25zIHdoZXJlIGVycm9ycyBjYW4iLAot IiAgb2NjdXIuIiwKLSIgIiwKLSJUeXBlIDIgaXMgYSAxMi1iaXQgY2hlY2tzdW0gcmVwcmVzZW50 ZWQgaW4gdHdvIHByaW50YWJsZSBjaGFyYWN0ZXJzLiIsCi0iICIsCi0iVHlwZSAzIGlzIGEgMTYt Yml0IGN5Y2xpYyByZWR1bmRhbmN5IGNoZWNrLCB0aGUgc3Ryb25nZXN0IGVycm9yIiwKLSIgIGRl dGVjdGlvbiBtZXRob2Qgc3VwcG9ydGVkIGJ5IEtlcm1pdCBwcm90b2NvbCwgcmVwcmVzZW50ZWQg aW4gdGhyZWUiLAotIiAgcHJpbnRhYmxlIGNoYXJhY3RlcnMuIiwKLSIgIiwKLSJUeXBlIDQgKGFs aWFzIFwiQkxBTkstRlJFRS0yXCIpIGlzIGEgMTItYml0IGNoZWNrc3VtIGd1YXJhbnRlZWQgdG8i LAotIiAgY29udGFpbiBubyBibGFua3MgaW4gaXRzIHJlcHJlc2VudGF0aW9uOyB0aGlzIGlzIG5l ZWRlZCBmb3IgY29ubmVjdGlvbnMiLAotIiAgd2hlcmUgdHJhaWxpbmcgYmxhbmtzIGFyZSBzdHJp cHBlZCBmcm9tIGluY29taW5nIGxpbmVzIG9mIHRleHQuIiwKLSIgIiwKLSJUeXBlIDUgKGFsaWFz IFwiRk9SQ0UtM1wiKSBtZWFucyB0byBmb3JjZSBhIFR5cGUgMyBibG9jayBjaGVjayBvbiIsCi0i ICBldmVyeSBwYWNrZXQsIGluY2x1ZGluZyB0aGUgZmlyc3QgcGFja2V0LCB3aGljaCBub3JtYWxs eSBoYXMgYSB0eXBlIDEiLAotIiAgYmxvY2sgY2hlY2suICBUaGlzIGlzIGZvciB1c2UgaW4gY3Jp dGljYWwgYXBwbGljYXRpb25zIG9uIG5vaXN5IiwKLSIgIGNvbm5lY3Rpb25zLiAgQXMgd2l0aCB0 eXBlcyAyLCAzLCBhbmQgNCwgaWYgdGhlIEtlcm1pdCBmaWxlIiwKLSIgIHRyYW5zZmVyIHBhcnRu ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIHR5cGUsIHRoZSB0cmFuc2ZlciBmYWlscyIsCi0iICBp bW1lZGlhdGVseSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmFuc2Zlci4iLAotIiIgfTsKLQot c3RhdGljIGNoYXIgKiBobXh5ZGViW10gPSB7Ci0iU3ludGF4OiBTRVQgREVCVUcgeyBTRVNTSU9O LCBPTiwgT0ZGLCBUSU1FU1RBTVAsIE1FU1NBR0VTIH0iLAotIiAiLAotIlNFVCBERUJVRyBPTiIs Ci0jaWZkZWYgREVCVUcKLSIgIE9wZW5zIGEgZGVidWcgbG9nIGZpbGUgbmFtZWQgZGVidWcubG9n IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4iLAotIiAgVXNlIExPRyBERUJVRyBpZiB5b3Ugd2Fu dCBzcGVjaWZ5IGEgZGlmZmVyZW50IGxvZyBmaWxlIG5hbWUgb3IgcGF0aC4iLAotI2Vsc2UKLSIg IChIYXMgbm8gZWZmZWN0IGluIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXQuKSIsCi0jZW5kaWYgLyog REVCVUcgKi8KLSIgIiwKLSJTRVQgREVCVUcgT0ZGIiwKLSIgIFN0b3BzIGRlYnVnIGxvZ2dpbmcg YW5kIHNlc3Npb24gZGVidWdnaW5nLiIsCi0iICIsCi0iU0VUIERFQlVHIFNFU1NJT04iLAotI2lm bmRlZiBOT0xPQ0FMCi0iICBEaXNwbGF5cyBjb250cm9sIGFuZCA4LWJpdCBjaGFyYWN0ZXJzIHN5 bWJvbGljYWxseSBkdXJpbmcgQ09OTkVDVCBtb2RlLiIsCi0iICBFcXVpdmFsZW50IHRvIFNFVCBU RVJNSU5BTCBERUJVRyBPTi4iLAotI2Vsc2UKLSIgIChIYXMgbm8gZWZmZWN0IGluIHRoaXMgdmVy c2lvbiBvZiBLZXJtaXQuKSIsCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotIiAiLAotIlNFVCBERUJV RyBUSU1FU1RBTVAgeyBPTiwgT0ZGIH0iLAotIiAgRW5hYmxlcy9EaXNhYmxlcyB0aW1lc3RhbXBz IG9uIGRlYnVnIGxvZyBlbnRyaWVzLiIsCi0iICIsCi0iU0VUIERFQlVHIE1FU1NBR0VTIHsgT04s IE9GRiwgU1RERVJSIH0gW0MtS2VybWl0IDkuMF0iLAotIiAgRW5hYmxlcy9EaXNhYmxlcyBtZXNz YWdlcyBwcmludGVkIGJ5IHRoZSBERUJVRyBjb21tYW5kLiIsCi0iICBTRVQgREVCVUcgT0ZGIGNh dXNlcyBERUJVRyBtZXNzYWdlcyBub3QgdG8gYmUgcHJpbnRlZC4iLAotIiAgU0VUIERFQlVHIE9O IHNlbmRzIERFQlVHIG1lc3NhZ2VzIHRvIHN0YW5kYXJkIG91dHB1dCAoc3Rkb3V0KTsiLAotIiAg U0VUIERFQlVHIFNUREVSUiBzZW5kcyBERUJVRyBtZXNzYWdlcyB0byBzdGFuZGFyZCBlcnJvciAo c3RkZXJyKTsiLAotIiIgfTsKLQotI2lmZGVmIENLX1NQRUVECi1zdGF0aWMgY2hhciAqaG14eXFj dGxbXSA9IHsKLSJTeW50YXg6IFNFVCBDT05UUk9MLUNIQVJBQ1RFUiB7IFBSRUZJWEVELCBVTlBS RUZJWEVEIH0geyA8Y29kZT4uLi4sIEFMTCB9IiwKLSIgIiwKLSIgIDxjb2RlPiBpcyB0aGUgbnVt ZXJpYyBBU0NJSSBjb2RlIGZvciBhIGNvbnRyb2wgY2hhcmFjdGVyIDEtMzEsMTI3LTE1OSwyNTUu IgotLAotIiAgVGhlIHdvcmQgXCJBTExcIiBtZWFucyBhbGwgY2hhcmFjdGVycyBpbiB0aGlzIHJh bmdlLiIsCi0iICIsCi0iICBQUkVGSVhFRCA8Y29kZT4gbWVhbnMgdGhlIGdpdmVuIGNvbnRyb2wg Y2hhcmFjdGVyIG11c3QgYmUgY29udmVydGVkIHRvIGEiLAotIiAgcHJpbnRhYmxlIGNoYXJhY3Rl ciBhbmQgcHJlZml4ZWQsIHRoZSBkZWZhdWx0IGZvciBhbGwgY29udHJvbCBjaGFyYWN0ZXJzLiIs Ci0iICIsCi0iICBVTlBSRUZJWEVEIDxjb2RlPiBtZWFucyB5b3UgdGhpbmsgaXQgaXMgc2FmZSB0 byBzZW5kIHRoZSBnaXZlbiBjb250cm9sIiwKLSIgIGNoYXJhY3RlciBhcy1pcywgd2l0aG91dCBh IHByZWZpeC4gIFVTRSBUSElTIE9QVElPTiBBVCBZT1VSIE9XTiBSSVNLISIsCi0iICIsCi0iICBT SE9XIENPTlRST0wgdG8gc2VlIGN1cnJlbnQgc2V0dGluZ3MuICBTRVQgQ09OVFJPTCBQUkVGSVhF RCBBTEwgaXMiLAotIiAgcmVjb21tZW5kZWQgZm9yIHNhZmV0eS4gIFlvdSBjYW4gaW5jbHVkZSBt dWx0aXBsZSA8Y29kZT4gdmFsdWVzIGluIG9uZSIsCi0iICBjb21tYW5kLCBzZXBhcmF0ZWQgYnkg c3BhY2VzLiIsCi0iIiB9OwotI2VuZGlmIC8qIENLX1NQRUVEICovCi0KLSNpZm5kZWYgTk9ESUFM Ci1zdGF0aWMgY2hhciAqaHh5bW9kbVtdID0gewotIlN5bnRheDogU0VUIE1PREVNIDxwYXJhbWV0 ZXI+IDx2YWx1ZT4gLi4uIiwKLSIgIiwKLSJOb3RlOiBNYW55IG9mIHRoZSBTRVQgTU9ERU0gcGFy YW1ldGVycyBhcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4iLAotInlvdSBTRVQgTU9E RU0gVFlQRSwgYWNjb3JkaW5nIHRvIHRoZSBtb2RlbSdzIGNhcGFiaWxpdGllcy4gIFNIT1cgTU9E RU0gdG8iLAotInNlZSB0aGVtLiAgQWxzbyBzZWUgSEVMUCBESUFMIGFuZCBIRUxQIFNFVCBESUFM LiIsCi0iICIsCi0iU0VUIE1PREVNIFRZUEUgPG5hbWU+IiwKLQotIiBUZWxscyBLZXJtaXQgd2hp Y2gga2luZCBvZiBtb2RlbSB5b3UgaGF2ZSwgc28gaXQgY2FuIGlzc3VlIHRoZSIsCi0iIGFwcHJv cHJpYXRlIG1vZGVtLXNwZWNpZmljIGNvbW1hbmRzIGZvciBjb25maWd1cmF0aW9uLCBkaWFsaW5n LCBhbmQiLAotIiBoYW5naW5nIHVwLiAgRm9yIGEgbGlzdCBvZiB0aGUgbW9kZW0gdHlwZXMga25v d24gdG8gS2VybWl0LCB0eXBlIFwic2V0IiwKLSIgbW9kZW0gdHlwZSA/XCIuICBUaGUgZGVmYXVs dCBtb2RlbSB0eXBlIGlzIEdFTkVSSUMsIHdoaWNoIHNob3VsZCB3b3JrIiwKLSIgd2l0aCBhbnkg QVQgY29tbWFuZC1zZXQgbW9kZW0gdGhhdCBpcyBjb25maWd1cmVkIGZvciBlcnJvciBjb3JyZWN0 aW9uLCIsCi0iIGRhdGEgY29tcHJlc3Npb24sIGFuZCBoYXJkd2FyZSBmbG93IGNvbnRyb2wuICBV c2UgU0VUIE1PREVNIFRZUEUgTk9ORSIsCi0iIGZvciBkaXJlY3Qgc2VyaWFsLCBjb25uZWN0aW9u cy4gIFVzZSBTRVQgTU9ERU0gVFlQRSBVU0VSLURFRklORUQgdG8gdXNlIiwKLSIgYSB0eXBlIG9m IG1vZGVtIHRoYXQgaXMgbm90IGJ1aWx0IGluIHRvIEtlcm1pdCwgYW5kIHRoZW4gdXNlIFNFVCBN T0RFTSIsCi0iIENBUEFCSUxJVElFUywgU0VUIE1PREVNLCBESUFMLUNPTU1BTkQsIGFuZCBTRVQg TU9ERU0gQ09NTUFORCB0byB0ZWxsIiwKLSIgS2VybWl0IGhvdyB0byBjb25maWd1cmUgYW5kIGNv bnRyb2wgaXQuIiwKLQotIiAiLAotCi0iU0VUIE1PREVNIENBUEFCSUxJVElFUyA8bGlzdD4iLAot IiAgVXNlIHRoaXMgY29tbWFuZCBmb3IgY2hhbmdpbmcgS2VybWl0J3MgaWRlYSBvZiB5b3VyIG1v ZGVtJ3MgY2FwYWJpbGl0aWVzLCIsCi0iICBmb3IgZXhhbXBsZSwgaWYgeW91ciBtb2RlbSBpcyBz dXBwb3NlZCB0byBoYXZlIGJ1aWx0LWluIGVycm9yIGNvcnJlY3Rpb24iLAotIiAgYnV0IGluIGZh Y3QgZG9lcyBub3QuICBBbHNvIHVzZSB0aGlzIGNvbW1hbmQgdG8gZGVmaW5lIHRoZSBjYXBhYmls aXRpZXMiLAotIiAgb2YgYSBVU0VSLURFRklORUQgbW9kZW0uICBDYXBhYmlsaXRpZXMgYXJlOiIs Ci0iICIsCi0iICAgIEFUICAgICAgQVQtY29tbWFuZHMiLAotIiAgICBEQyAgICAgIGRhdGEtY29t cHJlc3Npb24iLAotIiAgICBFQyAgICAgIGVycm9yLWNvcnJlY3Rpb24iLAotIiAgICBIV0ZDICAg IGhhcmR3YXJlLWZsb3ciLAotIiAgICBJVFUgICAgIHYyNWJpcy1jb21tYW5kcyIsCi0iICAgIFNX RkMgICAgc29mdHdhcmUtZmxvdyIsCi0iICAgIEtTICAgICAga2VybWl0LXNwb29mIiwKLSIgICAg U0IgICAgICBzcGVlZC1idWZmZXJpbmciLAotIiAgICBUQiAgICAgIFRlbGViaXQiLAotIiAiLAot IlNFVCBNT0RFTSBDQVJSSUVSLVdBVENIIHsgQVVUTywgT04sIE9GRiB9IiwKLSIgIFN5bm9ueW0g Zm9yIFNFVCBDQVJSSUVSLVdBVENIIChxLnYuKSIsCi0iICIsCi0iU0VUIE1PREVNIENPTVBSRVNT SU9OIHsgT04sIE9GRiB9IiwKLSIgIEVuYWJsZXMvZGlzYWJsZXMgdGhlIG1vZGVtJ3MgZGF0YSBj b21wcmVzc2lvbiBmZWF0dXJlLCBpZiBhbnkuIiwKLSIgIiwKLSJTRVQgTU9ERU0gRElBTC1DT01N QU5EIDx0ZXh0PiIsCi0iICBUaGUgdGV4dCByZXBsYWNlcyBLZXJtaXQncyBidWlsdC1pbiBtb2Rl bSBkaWFsaW5nIGNvbW1hbmQuICBJdCBtdXN0IiwKLSIgIGluY2x1ZGUgJyVzJyAocGVyY2VudCBz KSBhcyBhIHBsYWNlLWhvbGRlciBmb3IgdGhlIHRlbGVwaG9uZSBudW1iZXJzIiwKLSIgIGdpdmVu IGluIHlvdXIgRElBTCBjb21tYW5kcy4iLAotIiAiLAotIlNFVCBNT0RFTSBFUlJPUi1DT1JSRUNU SU9OIHsgT04sIE9GRiB9IiwKLSIgIEVuYWJsZXMvZGlzYWJsZXMgdGhlIG1vZGVtJ3MgZXJyb3It Y29ycmVjdGlvbiBmZWF0dXJlLCBpZiBhbnkuIiwKLSIgIiwKLSJTRVQgTU9ERU0gRVNDQVBFLUNI QVJBQ1RFUiBudW1iZXIiLAotIiAgTnVtZXJpYyBBU0NJSSB2YWx1ZSBvZiBtb2RlbSdzIGVzY2Fw ZSBjaGFyYWN0ZXIsIGUuZy4gNDMgZm9yICcrJy4iLAotIiAgRm9yIEhheWVzLWNvbXBhdGlibGUg bW9kZW1zLCBLZXJtaXQgdXNlcyB0aHJlZSBjb3BpZXMsIGUuZy4gXCIrKytcIi4iLAotIiAiLAot IlNFVCBNT0RFTSBGTE9XLUNPTlRST0wge0FVVE8sIE5PTkUsIFJUUy9DVFMsIFhPTi9YT0ZGfSIs Ci0iICBTZWxlY3RzIHRoZSB0eXBlIG9mIGxvY2FsIGZsb3cgY29udHJvbCB0byBiZSB1c2VkIGJ5 IHRoZSBtb2RlbS4iLAotIiAiLAotIlNFVCBNT0RFTSBIQU5HVVAtTUVUSE9EIHsgTU9ERU0tQ09N TUFORCwgUlMyMzItU0lHTkFMLCBEVFIgfSIsCi0iICBIb3cgaGFuZ3VwIG9wZXJhdGlvbnMgc2hv dWxkIGJlIGRvbmUuICBNT0RFTS1DT01NQU5EIG1lYW5zIHRyeSB0byIsCi0iICBlc2NhcGUgYmFj ayB0byB0aGUgbW9kZW0ncyBjb21tYW5kIHByb2Nlc3NvciBhbmQgZ2l2ZSBhIG1vZGVtLXNwZWNp ZmljIiwKLSIgIGhhbmd1cCBjb21tYW5kLiAgUlMyMzItU0lHTkFMIG1lYW5zIHR1cm4gb2ZmIHRo ZSBEVFIgc2lnbmFsLiAgRFRSIGlzIGEiLAotIiAgc3lub255bSBmb3IgUlMyMzItU0lHTkFMLiIs Ci0iICIsCi0iU0VUIE1PREVNIEtFUk1JVC1TUE9PRiB7T04sIE9GRn0iLAotIiAgSWYgdGhlIHNl bGVjdGVkIG1vZGVtIHR5cGUgc3VwcG9ydHMgdGhlIEtlcm1pdCBwcm90b2NvbCBkaXJlY3RseSwi LAotIiAgdXNlIHRoaXMgY29tbWFuZCB0byB0dXJuIGl0cyBLZXJtaXQgcHJvdG9jb2wgZnVuY3Rp b24gb24gb3Igb2ZmLiIsCi0iICIsCi0iU0VUIE1PREVNIE1BWElNVU0tU1BFRUQgPG51bWJlcj4i LAotIiAgU3BlY2lmeSB0aGUgbWF4aW11bSBpbnRlcmZhY2Ugc3BlZWQgZm9yIHRoZSBtb2RlbS4i LAotIiAiLAotIlNFVCBNT0RFTSBOQU1FIDx0ZXh0PiIsCi0iICBEZXNjcmlwdGl2ZSBuYW1lIGZv ciBhIFVTRVItREVGSU5FRCBtb2RlbS4iLAotIiAiLAotIlNFVCBNT0RFTSBTUEVBS0VSIHtPTiwg T0ZGfSIsCi0iICBUdXJucyB0aGUgbW9kZW0ncyBzcGVha2VyIG9uIG9yIG9mZiBkdXJpbmcgZGlh bGluZy4iLAotIiAiLAotIlNFVCBNT0RFTSBTUEVFRC1NQVRDSElORyB7T04sIE9GRn0iLAotIiAg T04gbWVhbnMgdGhhdCBDLUtlcm1pdCBjaGFuZ2VzIGl0cyBzZXJpYWwgaW50ZXJmYWNlIHNwZWVk IHRvIGFncmVlIHdpdGgiLAotIiAgdGhlIHNwZWVkIHJlcG9ydGVkIGJ5IHRoZSBtb2RlbSdzIENP Tk5FQ1QgbWVzc2FnZSwgaWYgYW55LiAgT0ZGIG1lYW5zIiwKLSIgIEtlcm1pdCBzaG91bGQgbm90 IGNoYW5nZSBpdHMgaW50ZXJmYWNlIHNwZWVkLiIsCi0iICIsCi0iU0VUIE1PREVNIFZPTFVNRSB7 TE9XLCBNRURJVU0sIEhJR0h9IiwKLSIgIFNlbGVjdHMgdGhlIGRlc2lyZWQgbW9kZW0gc3BlYWtl ciB2b2x1bWUgZm9yIHdoZW4gdGhlIHNwZWFrZXIgaXMgT04uIiwKLSIgIiwKLSJTRVQgTU9ERU0g Q09NTUFORCBjb21tYW5kcyBhcmUgdXNlZCB0byBvdmVycmlkZSBidWlsdC1pbiBtb2RlbSBjb21t YW5kcyBmb3IiLAotImVhY2ggbW9kZW0gdHlwZSwgb3IgdG8gZmlsbCBpbiBjb21tYW5kcyBmb3Ig dGhlIFVTRVItREVGSU5FRCBtb2RlbSB0eXBlLiIsCi0iT21pdHRpbmcgdGhlIG9wdGlvbmFsIFsg dGV4dCBdIHJlc3RvcmVzIHRoZSBidWlsdC1pbiBtb2RlbS1zcGVjaWZpYyBjb21tYW5kLCIsCi0i aWYgYW55OiIsCi0iICIsCi0iU0VUIE1PREVNIENPTU1BTkQgQVVUT0FOU1dFUiB7T04sIE9GRn0g WyB0ZXh0IF0iLAotIiAgTW9kZW0gY29tbWFuZHMgdG8gdHVybiBhdXRvYW5zd2VyIG9uIGFuZCBv ZmYuIiwKLSIgIiwKLSJTRVQgTU9ERU0gQ09NTUFORCBDT01QUkVTU0lPTiB7T04sIE9GRn0gWyB0 ZXh0IF0iLAotIiAgTW9kZW0gY29tbWFuZHMgdG8gdHVybiBkYXRhIGNvbXByZXNzaW9uIG9uIGFu ZCBvZmYuIiwKLSIgIiwKLSJTRVQgTU9ERU0gQ09NTUFORCBFUlJPUi1DT1JSRUNUSU9OIHtPTiwg T0ZGfSBbIHRleHQgXSIsCi0iICBNb2RlbSBjb21tYW5kcyB0byB0dXJuIGVycm9yIGNvcnJlY3Rp b24gb24gYW5kIG9mZi4iLAotIiAiLAotIlNFVCBNT0RFTSBDT01NQU5EIEhBTkdVUCBbIHRleHQg XSIsCi0iICBDb21tYW5kIHRoYXQgdGVsbHMgdGhlIG1vZGVtIHRvIGhhbmcgdXAgdGhlIGNvbm5l Y3Rpb24uIiwKLSIgIiwKLSJTRVQgTU9ERU0gQ09NTUFORCBJR05PUkUtRElBTFRPTkUgWyB0ZXh0 IF0iLAotIiAgQ29tbWFuZCB0aGF0IHRlbGxzIHRoZSBtb2RlbSBub3QgdG8gd2FpdCBmb3IgZGlh bHRvbmUgYmVmb3JlIGRpYWxpbmcuIiwKLSIgIiwKLSJTRVQgTU9ERU0gQ09NTUFORCBJTklULVNU UklORyBbIHRleHQgXSIsCi0iICBUaGUgJ3RleHQnIGlzIGEgcmVwbGFjZW1lbnQgZm9yIEMtS2Vy bWl0J3MgYnVpbHQtaW4gaW5pdGlhbGl6YXRpb24gY29tbWFuZCIsCi0iICBmb3IgdGhlIG1vZGVt LiIsCi0iICIsCi0iU0VUIE1PREVNIENPTU1BTkQgUFJFRElBTC1JTklUIFsgdGV4dCBdIiwKLSIg IEEgc2Vjb25kIElOSVQtU1RSSU5HIHRoYXQgaXMgdG8gYmUgc2VudCB0byB0aGUgbW9kZW0ganVz dCBwcmlvciB0byBcCi1kaWFsaW5nLiIsCi0iICIsCi0iU0VUIE1PREVNIENPTU1BTkQgSEFSRFdB UkUtRkxPVyBbIHRleHQgXSIsCi0iICBNb2RlbSBjb21tYW5kIHRvIGVuYWJsZSBoYXJkd2FyZSBm bG93IGNvbnRyb2wgKFJUUy9DVFMpIGluIHRoZSBtb2RlbS4iLAotIiAiLAotIlNFVCBNT0RFTSBD T01NQU5EIFNPRlRXQVJFLUZMT1cgWyB0ZXh0IF0iLAotIiAgTW9kZW0gY29tbWFuZCB0byBlbmFi bGUgbG9jYWwgc29mdHdhcmUgZmxvdyBjb250cm9sIChYb24vWG9mZikgaW4gbW9kZW0uIiwKLSIg IiwKLSJTRVQgTU9ERU0gQ09NTUFORCBTUEVBS0VSIHsgT04sIE9GRiB9IFsgdGV4dCBdIiwKLSIg IE1vZGVtIGNvbW1hbmQgdG8gdHVybiB0aGUgbW9kZW0ncyBzcGVha2VyIG9uIG9yIG9mZi4iLAot IiAiLAotIlNFVCBNT0RFTSBDT01NQU5EIE5PLUZMT1ctQ09OVFJPTCBbIHRleHQgXSIsCi0iICBN b2RlbSBjb21tYW5kIHRvIGRpc2FibGUgbG9jYWwgZmxvdyBjb250cm9sIGluIHRoZSBtb2RlbS4i LAotIiAiLAotIlNFVCBNT0RFTSBDT01NQU5EIFBVTFNFIFsgdGV4dCBdIiwKLSIgIE1vZGVtIGNv bW1hbmQgdG8gc2VsZWN0IHB1bHNlIGRpYWxpbmcuIiwKLSIgIiwKLSJTRVQgTU9ERU0gQ09NTUFO RCBUT05FIFsgdGV4dCBdIiwKLSIgIE1vZGVtIGNvbW1hbmQgdG8gc2VsZWN0IHRvbmUgZGlhbGlu Zy4iLAotIiAiLAotIlNFVCBNT0RFTSBDT01NQU5EIFZPTFVNRSB7IExPVywgTUVESVVNLCBISUdI IH0gWyB0ZXh0IF0iLAotIiAgTW9kZW0gY29tbWFuZCB0byBzZXQgdGhlIG1vZGVtJ3Mgc3BlYWtl ciB2b2x1bWUuIiwKLSIifTsKLQotc3RhdGljIGNoYXIgKmhteHlkaWFsW10gPSB7Ci0iVGhlIFNF VCBESUFMIGNvbW1hbmQgZXN0YWJsaXNoZXMgb3IgY2hhbmdlcyBhbGwgcGFyYW1ldGVycyByZWxh dGVkIHRvIiwKLSJkaWFsaW5nIHRoZSB0ZWxlcGhvbmUuICBBbHNvIHNlZSBIRUxQIERJQUwgYW5k IEhFTFAgU0VUIE1PREVNLiAgVXNlIFNIT1ciLAotIkRJQUwgdG8gZGlzcGxheSBhbGwgb2YgdGhl IFNFVCBESUFMIHZhbHVlcy4iLAotIiAiLAotIlNFVCBESUFMIENPVU5UUlktQ09ERSA8bnVtYmVy PiIsCi0iICBUZWxscyBLZXJtaXQgdGhlIHRlbGVwaG9uaWMgY291bnRyeS1jb2RlIG9mIHRoZSBj b3VudHJ5IHlvdSBhcmUgZGlhbGluZyIsCi0iICBmcm9tLCBzbyBpdCBjYW4gdGVsbCB3aGV0aGVy IGEgcG9ydGFibGUtZm9ybWF0IHBob25lIG51bWJlciBmcm9tIHlvdXIiLAotIiAgZGlhbGluZyBk aXJlY3Rvcnkgd2lsbCByZXN1bHQgaW4gYSBuYXRpb25hbCBvciBhbiBpbnRlcm5hdGlvbmFsIGNh bGwuIiwKLSIgIEV4YW1wbGVzOiAxIGZvciBVU0EsIENhbmFkYSwgUHVlcnRvIFJpY28sIGV0Yzsg NyBmb3IgUnVzc2lhLCAzOSBmb3IgSXRhbHksIiwKLSIgIDM1MSBmb3IgUG9ydHVnYWwsIDQ3IGZv ciBOb3J3YXksIDQ0IGZvciB0aGUgVUssIDk3MiBmb3IgSXNyYWVsLCA4MSBmb3IiLAotIiAgSmFw YW4sIC4uLiIsCi0iICIsCi0iICBJZiB5b3UgaGF2ZSBub3QgYWxyZWFkeSBzZXQgeW91ciBESUFM IElOVEwtUFJFRklYIGFuZCBMRC1QUkVGSVgsIHRoZW4gdGhpcyIsCi0iICBjb21tYW5kIHNldHMg ZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZW06IDAxMSBhbmQgMSwgcmVzcGVjdGl2ZWx5LCBmb3IgY291 bnRyeSIsCi0iICBjb2RlIDE7IDAwIGFuZCAwLCByZXNwZWN0aXZlbHksIGZvciBhbGwgb3RoZXIg Y291bnRyeSBjb2Rlcy4gIElmIHRoZXNlIGFyZSIsCi0iICBub3QgeW91ciB0cnVlIGludGVybmF0 aW9uYWwgYW5kIGxvbmctZGlzdGFuY2UgZGlhbGluZyBwcmVmaXhlcywgdGhlbiB5b3UiLAotIiAg c2hvdWxkIGZvbGxvdyB0aGlzIGNvbW1hbmQgYnkgRElBTCBJTlRMLVBSRUZJWCBhbmQgTEQtUFJF RklYIHRvIGxldCBLZXJtaXQiLAotIiAga25vdyB3aGF0IHRoZXkgcmVhbGx5IGFyZS4iLAotIiAi LAotIlNFVCBESUFMIEFSRUEtQ09ERSBbIDxudW1iZXI+IF0iLAotIiAgVGVsbHMgS2VybWl0IHRo ZSBhcmVhIG9yIGNpdHkgY29kZSB0aGF0IHlvdSBhcmUgZGlhbGluZyBmcm9tLCBzbyBpdCBjYW4i LAotIiAgdGVsbCB3aGV0aGVyIGEgcG9ydGFibGUtZm9ybWF0IHBob25lIG51bWJlciBmcm9tIHRo ZSBkaWFsaW5nIGRpcmVjdG9yeSBpcyIsCi0iICBsb2NhbCBvciBsb25nIGRpc3RhbmNlLiAgQmUg Y2FyZWZ1bCBub3QgdG8gaW5jbHVkZSB5b3VyIGxvbmctZGlzdGFuY2UiLAotIiAgZGlhbGluZyBw cmVmaXggYXMgcGFydCBvZiB5b3VyIGFyZWEgY29kZTsgZm9yIGV4YW1wbGUsIHRoZSBhcmVhIGNv ZGUgZm9yIiwKLSIgIGNlbnRyYWwgTG9uZG9uIGlzIDE3MSwgbm90IDAxNzEuIiwKLSIgIiwKLSJT RVQgRElBTCBDT05GSVJNQVRJT04ge09OLCBPRkZ9IiwKLSIgIEtlcm1pdCBkb2VzIHZhcmlvdXMg dHJhbnNmb3JtYXRpb25zIG9uIGEgdGVsZXBob25lIG51bWJlciByZXRyaWV2ZWQgZnJvbSIsCi0i ICB0aGUgZGlhbGluZyBkaXJlY3RvcnkgcHJpb3IgdG8gZGlhbGluZyAodXNlIExPT0tVUCA8bmFt ZT4gdG8gc2VlIHRoZW0pLiIsCi0iICBJbiBjYXNlIHRoZSByZXN1bHQgbWlnaHQgYmUgd3Jvbmcs IHlvdSBjYW4gdXNlIFNFVCBESUFMIENPTkZJUk0gT04gdG8gaGF2ZSIsCi0iICBLZXJtaXQgYXNr IHlvdSBpZiBpdCBpcyBPSyB0byBkaWFsIHRoZSBudW1iZXIsIGFuZCBpZiBub3QsIHRvIGxldCB5 b3UgdHlwZSIsCi0iICBpbiBhIHJlcGxhY2VtZW50LiIsCi0iICIsCi0iU0VUIERJQUwgQ09OTkVD VCB7IEFVVE8sIE9OLCBPRkYgfSIsCi0iICBXaGV0aGVyIHRvIENPTk5FQ1QgKGVudGVyIHRlcm1p bmFsIG1vZGUpIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IiwKLSIgIGRpYWxpbmcu ICBPTiBtZWFucyB0byBkbyB0aGlzOyBPRkYgbWVhbnMgbm90IHRvLiAgQVVUTyAodGhlIGRlZmF1 bHQpIG1lYW5zIiwKLSIgIGRvIGl0IGlmIHRoZSBESUFMIGNvbW1hbmQgd2FzIGdpdmVuIGludGVy YWN0aXZlbHksIGJ1dCBkb24ndCBkbyBpdCBpZiB0aGUiLAotIiAgRElBTCBjb21tYW5kIHdhcyBp c3N1ZWQgZnJvbSBhIG1hY3JvIG9yIGNvbW1hbmQgZmlsZS4gIElmIHlvdSBzcGVjaWZ5IE9OIiwK LSIgIG9yIEFVVE8sIHlvdSBtYXkgZm9sbG93IHRoaXMgYnkgb25lIG9mIHRoZSBrZXl3b3JkcyBW RVJCT1NFIG9yIFFVSUVULCB0byIsCi0iICBpbmRpY2F0ZSB3aGV0aGVyIHRoZSB2ZXJib3NlIDQt bGluZSAnQ29ubmVjdGluZy4uLicgbWVzc2FnZSBpcyB0byBiZSIsCi0iICBkaXNwbGF5ZWQgaWYg RElBTCBzdWNjZWVkcyBhbmQgS2VybWl0IGdvZXMgaW50byBDT05ORUNUIG1vZGUuIiwKLSIgIiwK LSJTRVQgRElBTCBDT05WRVJULURJUkVDVE9SWSB7QVNLLCBPTiwgT0ZGfSIsCi0iICBUaGUgZm9y bWF0IG9mIEtlcm1pdCdzIGRpYWxpbmcgZGlyZWN0b3J5IGNoYW5nZWQgaW4gdmVyc2lvbiA1QSgx OTIpLiAgVGhpcyIsCi0iICBjb21tYW5kIHRlbGxzIEtlcm1pdCB3aGF0IHRvIGRvIHdoZW4gaXQg ZW5jb3VudGVycyBhbiBvbGQtc3R5bGUgZGlyZWN0b3J5OiIsCi0iICBBU0sgeW91IHdoZXRoZXIg dG8gY29udmVydCBpdCwgb3IgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IChPTiksIG9yIGxlYXZl IiwKLSIgIGl0IGFsb25lIChPRkYpLiAgT2xkLXN0eWxlIGRpcmVjdG9yaWVzIGNhbiBzdGlsbCBi ZSB1c2VkIHdpdGhvdXQiLAotIiAgY29udmVyc2lvbiwgYnV0IHRoZSBwYXJpdHkgYW5kIHNwZWVk IGZpZWxkcyBhcmUgaWdub3JlZC4iLAotIiAiLAotIlNFVCBESUFMIERJUkVDVE9SWSBbIGZpbGVu YW1lIFsgZmlsZW5hbWUgWyBmaWxlbmFtZSBbIC4uLiBdIF0gXSBdIiwKLSIgIFRoZSBuYW1lKHMp IG9mIHlvdXIgZGlhbGluZyBkaXJlY3RvcnkgZmlsZShzKS4gIElmIHlvdSBkbyBub3Qgc3VwcGx5 IGFueSIsCi0iICBmaWxlbmFtZXMsIHRoZSAgZGlhbGluZyBkaXJlY3RvcnkgZmVhdHVyZSBpcyBk aXNhYmxlZCBhbmQgYWxsIG51bWJlcnMgYXJlIiwKLSIgIGRpYWxlZCBsaXRlcmFsbHkgYXMgZ2l2 ZW4gaW4gdGhlIERJQUwgY29tbWFuZC4gIElmIHlvdSBzdXBwbHkgbW9yZSB0aGFuIiwKLSIgIG9u ZSBkaXJlY3RvcnksIGFsbCBvZiB0aGVtIGFyZSBzZWFyY2hlZC4iLAotIiAiLAotIlNFVCBESUFM IFNPUlQge09OLCBPRkZ9IiwKLSIgIFdoZW4gbXVsdGlwbGUgZW50cmllcyBhcmUgb2J0YWluZWQg ZnJvbSB5b3VyIGRpYWxpbmcgZGlyZWN0b3J5LCB0aGV5IGFyZSIsCi0iICBzb3J0ZWQgaW4gXCJj aGVhcGVzdC1maXJzdFwiIG9yZGVyLiAgSWYgdGhpcyBkb2VzIG5vdCBwcm9kdWNlIHRoZSBkZXNp cmVkIiwKLSIgIGVmZmVjdCwgU0VUIERJQUwgU09SVCBPRkYgdG8gZGlzYWJsZSBzb3J0aW5nLCBh bmQgdGhlIG51bWJlcnMgd2lsbCBiZSIsCi0iICBkaWFsZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNo IHRoZXkgd2VyZSBmb3VuZC4iLAotIiAiLAotIlNFVCBESUFMIERJU1BMQVkge09OLCBPRkZ9IiwK LSIgIFdoZXRoZXIgdG8gZGlzcGxheSBkaWFsaW5nIHByb2dyZXNzIG9uIHRoZSBzY3JlZW47IGRl ZmF1bHQgaXMgT0ZGLiIsCi0iICIsCi0iU0VUIERJQUwgSEFOR1VQIHtPTiwgT0ZGfSIsCi0iICBX aGV0aGVyIHRvIGhhbmcgdXAgdGhlIHBob25lIHByaW9yIHRvIGRpYWxpbmc7IGRlZmF1bHQgaXMg T04uIiwKLSIgIiwKLSJTRVQgRElBTCBJR05PUkUtRElBTFRPTkUge09OLCBPRkZ9IiwKLSIgIFdo ZXRoZXIgdG8gaWdub3JlIGRpYWx0b25lIHdoZW4gZGlhbGluZzsgZGVmYXVsdCBpcyBPRkYuIiwK LSIgIiwKLSNpZm5kZWYgTk9TUEwKLSJTRVQgRElBTCBNQUNSTyBbIG5hbWUgXSIsCi0iICBTcGVj aWZ5IHRoZSBuYW1lIG9mIGEgbWFjcm8gdG8gZXhlY3V0ZSBvbiBldmVyeSBwaG9uZSBudW1iZXIg ZGlhbGVkLCBqdXN0IiwKLSIgIHByaW9yIHRvIGRpYWxpbmcgaXQsIGluIG9yZGVyIHRvIHBlcmZv cm0gYW55IGxhc3QtbWludXRlIGFsdGVyYXRpb25zLiIsCi0iICIsCi0jZW5kaWYgLyogTk9TUEwg Ki8KLSJTRVQgRElBTCBNRVRIT0Qge0FVVE8sIERFRkFVTFQsIFRPTkUsIFBVTFNFfSIsCi0iICBX aGV0aGVyIHRvIHVzZSB0aGUgbW9kZW0ncyBERUZBVUxUIGRpYWxpbmcgbWV0aG9kLCBvciB0byBm b3JjZSBUT05FIG9yIiwKLSIgIFBVTFNFIGRpYWxpbmcuICBBVVRPICh0aGUgZGVmYXVsdCkgbWVh bnMgdG8gY2hvb3NlIHRvbmUgb3IgcHVsc2UgZGlhbGluZyIsCi0iICBiYXNlZCBvbiB0aGUgY291 bnRyeSBjb2RlLiAgKEFsc28gc2VlIFNFVCBESUFMIFRPTkUtQ09VTlRSSUVTIGFuZCBTRVQgRElB TCIsCi0iICBQVUxTRS1DT1VOVFJJRVMuKSIsCi0iICIsCi0iU0VUIERJQUwgUEFDSU5HIG51bWJl ciIsCi0iICBIb3cgbWFueSBtaWxsaXNlY29uZHMgdG8gcGF1c2UgYmV0d2VlbiBzZW5kaW5nIGVh Y2ggY2hhcmFjdGVyIHRvIHRoZSBtb2RlbSIsCi0iICBkaWFsZXIuICBUaGUgZGVmYXVsdCBpcyAt MSwgbWVhbmluZyB0byB1c2UgdGhlIG51bWJlciBmcm9tIHRoZSBidWlsdC1pbiIsCi0iIG1vZGVt IGRhdGFiYXNlLiIsCi0iICAiLAotIlNFVCBESUFMIFBVTFNFLUNPVU5UUklFUyBbIGNjIFsgY2Mg WyAuLi4gXSBdIF0iLAotIiAgU2V0cyB0aGUgbGlzdCBvZiBjb3VudHJpZXMgaW4gd2hpY2ggcHVs c2UgZGlhbGluZyBpcyByZXF1aXJlZC4gIEVhY2ggY2MiLAotIiAgaXMgYSBjb3VudHJ5IGNvZGUu IiwKLSIgIiwKLSJTRVQgRElBTCBURVNUIHsgT04sIE9GRiB9IiwKLSIgIE9GRiBmb3Igbm9ybWFs IGRpYWxpbmcuICBTZXQgdG8gT04gdG8gdGVzdCBkaWFsaW5nIHByb2NlZHVyZXMgd2l0aG91dCIs Ci0iICBhY3R1YWxseSBkaWFsaW5nLiIsCi0iICIsCi0iU0VUIERJQUwgVE9ORS1DT1VOVFJJRVMg WyBjYyBbIGNjIFsgLi4uIF0gXSBdIiwKLSIgIFNldHMgdGhlIGxpc3Qgb2YgY291bnRyaWVzIGlu IHdoaWNoIHRvbmUgZGlhbGluZyBpcyBhdmFpbGFibGUuICBFYWNoIGNjIiwKLSIgIGlzIGEgY291 bnRyeSBjb2RlLiIsCi0iICIsCi0iU0VUIERJQUwgVElNRU9VVCBudW1iZXIiLAotIiAgSG93IG1h bnkgc2Vjb25kcyB0byB3YWl0IGZvciBhIGRpYWxlZCBjYWxsIHRvIGNvbXBsZXRlLiAgVXNlIHRo aXMgY29tbWFuZCIsCi0iICB0byBvdmVycmlkZSB0aGUgRElBTCBjb21tYW5kJ3MgYXV0b21hdGlj IHRpbWVvdXQgY2FsY3VsYXRpb24uICBBIHZhbHVlIiwKLSIgIG9mIDAgdHVybnMgb2ZmIHRoaXMg ZmVhdHVyZSBhbmQgcmV0dXJucyB0byBLZXJtaXQncyBhdXRvbWF0aWMgZGlhbCIsCi0iICB0aW1l b3V0IGNhbGN1bGF0aW9uLiIsCi0iICIsCi0iU0VUIERJQUwgUkVTVFJJQ1QgeyBJTlRFUk5BVElP TkFMLCBMT0NBTCwgTE9ORy1ESVNUQU5DRSwgTk9ORSB9IiwKLSIgIFByZXZlbnRzIHBsYWNpbmcg Y2FsbHMgb2YgdGhlIHR5cGUgaW5kaWNhdGVkLCBvciBncmVhdGVyLiAgRm9yIGV4YW1wbGUiLAot IiAgU0VUIERJQUwgUkVTVFJJQ1QgTE9ORyBwcmV2ZW50cyBwbGFjaW5nIG9mIGxvbmctZGlzdGFu Y2UgYW5kIGludGVybmF0aW9uYWwiLAotIiAgY2FsbHMuICBJZiB0aGlzIGNvbW1hbmQgaXMgbm90 IGdpdmVuLCB0aGVyZSBhcmUgbm8gcmVzdHJpY3Rpb25zLiAgVXNlZnVsIiwKLSIgIHdoZW4gZGlh bGluZyBhIGxpc3Qgb2YgbnVtYmVycyBmZXRjaGVkIGZyb20gYSBkaWFsaW5nIGRpcmVjdG9yeS4i LAotIiAiLAotIlNFVCBESUFMIFJFVFJJRVMgPG51bWJlcj4iLAotIiAgSG93IG1hbnkgdGltZXMg dG8gcmVkaWFsIGVhY2ggbnVtYmVyIGlmIHRoZSBkaWFsaW5nIHJlc3VsdCBpcyBidXN5IG9yIG5v IiwKLSIgIG5vIGFuc3dlciwgdW50aWwgdGhlIGNhbGwgaXMgc3VjY2Vzc2Z1bGx5IGFuc3dlcmVk LiAgVGhlIGRlZmF1bHQgaXMgMCIsCi0iICBiZWNhdXNlIGF1dG9tYXRpYyByZWRpYWxpbmcgaXMg aWxsZWdhbCBpbiBzb21lIGNvdW50cmllcy4iLAotIiAiLAotIlNFVCBESUFMIElOVEVSVkFMIDxu dW1iZXI+IiwKLSIgIEhvdyBtYW55IHNlY29uZHMgdG8gcGF1c2UgYmV0d2VlbiBhdXRvbWF0aWMg cmVkaWFsIGF0dGVtcHRzOyBkZWZhdWx0IDEwLiIsCi0iICIsCi0iVGhlIGZvbGxvd2luZyBjb21t YW5kcyBhcHBseSB0byBhbGwgcGhvbmUgbnVtYmVycywgd2hldGhlciBnaXZlbiBsaXRlcmFsbHki LAotIm9yIGZvdW5kIGluIHRoZSBkaWFsaW5nIGRpcmVjdG9yeToiLAotIiAiLAotIlNFVCBESUFM IFBSRUZJWCBbIHRleHQgXSIsCi0iICBFc3RhYmxpc2ggYSBwcmVmaXggdG8gYmUgYXBwbGllZCB0 byBhbGwgcGhvbmUgbnVtYmVycyB0aGF0IGFyZSBkaWFsZWQsIiwKLSIgIGZvciBleGFtcGxlIHRv IGRpc2FibGUgY2FsbCB3YWl0aW5nLiIsCi0iICIsCi0iU0VUIERJQUwgU1VGRklYIFsgdGV4dCBd IiwKLSIgIEVzdGFibGlzaCBhIHN1ZmZpeCB0byBiZSBhZGRlZCBhZnRlciBhbGwgcGhvbmUgbnVt YmVycyB0aGF0IGFyZSBkaWFsZWQuIiwKLSIgIiwKLSJUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFw cGx5IG9ubHkgdG8gcG9ydGFibGUtZm9ybWF0IG51bWJlcnMgb2J0YWluZWQgZnJvbSIsCi0idGhl IGRpYWxpbmcgZGlyZWN0b3J5OyBpLmUuIG51bWJlcnMgdGhhdCBzdGFydCB3aXRoIGEgXCIrXCIg c2lnbiBhbmQiLAotImNvdW50cnkgY29kZSwgZm9sbG93ZWQgYnkgYXJlYSBjb2RlIGluIHBhcmVu dGhlc2VzLCBmb2xsb3dlZCBieSB0aGUgcGhvbmUiLAotIm51bWJlci4iLAotIiAiLAotIlNFVCBE SUFMIExDLUFSRUEtQ09ERVMgWyA8bGlzdD4gXSIsCi0iICBTcGVjaWVzIGEgbGlzdCBvZiBhcmVh IGNvZGVzIHRvIHdoaWNoIGRpYWxpbmcgaXMgbG9jYWwsIGkuZS4gZG9lcyBub3QiLAotIiAgcmVx dWlyZSB0aGUgTEQtUFJFRklYLiAgVXAgdG8gMzIgYXJlYSBjb2RlcyBtYXkgYmUgbGlzdGVkLCBz ZXBhcmF0ZWQgYnkiLAotIiAgc3BhY2VzLiAgQW55IGFyZWEgY29kZXMgaW4gdGhpcyBsaXN0IHdp bGwgYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGRpYWwiLAotIiAgc3RyaW5nIHNvIGRvIG5vdCBp bmNsdWRlIHlvdXIgb3duIGFyZWEgY29kZSBpZiBpdCBzaG91bGQgbm90IGJlIGRpYWxlZC4iLAot IiAiLAotIlNFVCBESUFMIExDLVBSRUZJWCBbIDx0ZXh0PiBdIiwKLSIgIFNwZWNpZmllcyBhIHBy ZWZpeCB0byBiZSBhcHBsaWVkIHRvIGxvY2FsIGNhbGxzIG1hZGUgZnJvbSBwb3J0YWJsZSBkaWFs aW5nIiwKLSIgIGRpcmVjdG9yeSBlbnRyaWVzLiAgTm9ybWFsbHkgbm8gcHJlZml4IGlzIHVzZWQg Zm9yIGxvY2FsIGNhbGxzLiIsCi0iICIsCi0iU0VUIERJQUwgTEMtU1VGRklYIFsgPHRleHQ+IF0i LAotIiAgU3BlY2lmaWVzIGEgc3VmZml4IHRvIGJlIGFwcGxpZWQgdG8gbG9jYWwgY2FsbHMgbWFk ZSBmcm9tIHBvcnRhYmxlIGRpYWxpbmciLAotIiAgZGlyZWN0b3J5IGVudHJpZXMuICBOb3JtYWxs eSBubyBzdWZmaXggaXMgdXNlZCBmb3IgbG9jYWwgY2FsbHMuIiwKLSIgIiwKLSJTRVQgRElBTCBM RC1QUkVGSVggWyA8dGV4dD4gXSIsCi0iICBZb3VyIGxvbmctZGlzdGFuY2UgZGlhbGluZyBwcmVm aXgsIHRvIGJlIHVzZWQgd2l0aCBwb3J0YWJsZSBkaWFsaW5nIiwKLSIgIGRpcmVjdG9yeSBlbnRy aWVzIHRoYXQgcmVzdWx0IGluIGxvbmctZGlzdGFuY2UgY2FsbHMuIiwKLSIgIiwKLSJTRVQgRElB TCBMRC1TVUZGSVggWyA8dGV4dD4gXSIsCi0iICBMb25nLWRpc3RhbmNlIGRpYWxpbmcgc3VmZml4 LCBpZiBhbnksIHRvIGJlIHVzZWQgd2l0aCBwb3J0YWJsZSBkaWFsaW5nIiwKLSIgIGRpcmVjdG9y eSBlbnRyaWVzIHRoYXQgcmVzdWx0IGluIGxvbmctZGlzdGFuY2UgY2FsbHMuICBUaGlzIHdvdWxk IG5vcm1hbGx5IiwKLSIgIGJlIHVzZWQgZm9yIGFwcGVuZGluZyBhIGNhbGxpbmctY2FyZCBudW1i ZXIgdG8gdGhlIHBob25lIG51bWJlci4iLAotIiAiLAotIlNFVCBESUFMIEZPUkNFLUxPTkctRElT VEFOQ0UgeyBPTiwgT0ZGIH0iLAotIiAgV2hldGhlciB0byBmb3JjZSBsb25nLWRpc3RhbmNlIGRp YWxpbmcgZm9yIGNhbGxzIHRoYXQgbm9ybWFsbHkgd291bGQgYmUiLAotIiAgbG9jYWwuICBGb3Ig dXNlIChlLmcuKSBpbiBGcmFuY2UuIiwKLSIgIiwKLSJTRVQgRElBTCBUT0xMLUZSRUUtQVJFQS1D T0RFIFsgPG51bWJlcj4gWyA8bnVtYmVyPiBbIC4uLiBdIF0gXSIsCi0iICBUZWxscyBLZXJtaXQg dGhlIHRvbGwtZnJlZSBhcmVhIGNvZGUocykgaW4geW91ciBjb3VudHJ5LiIsCi0iICIsCi0iU0VU IERJQUwgVE9MTC1GUkVFLVBSRUZJWCBbIDx0ZXh0PiBdIiwKLSIgIFlvdSB0b2xsLWZyZWUgZGlh bGluZyBwcmVmaXgsIGluIGNhc2UgaXQgaXMgZGlmZmVyZW50IGZyb20geW91ciBsb25nLSIsCi0i ICBkaXN0YW5jZSBkaWFsaW5nIHByZWZpeC4iLAotIiAiLAotIlNFVCBESUFMIElOVEwtUFJFRklY IDx0ZXh0PiIsCi0iICBZb3VyIGludGVybmF0aW9uYWwgZGlhbGluZyBwcmVmaXgsIHRvIGJlIHVz ZWQgd2l0aCBwb3J0YWJsZSBkaWFsaW5nIiwKLSIgIGRpcmVjdG9yeSBlbnRyaWVzIHRoYXQgcmVz dWx0IGluIGludGVybmF0aW9uYWwgY2FsbHMuIiwKLSIgIiwKLSJTRVQgRElBTCBJTlRMLVNVRkZJ WCA8dGV4dD4iLAotIiAgSW50ZXJuYXRpb25hbCBkaWFsaW5nIHN1ZmZpeCwgaWYgYW55LCB0byBi ZSB1c2VkIHdpdGggcG9ydGFibGUgZGlhbGluZyIsCi0iICBkaXJlY3RvcnkgZW50cmllcyB0aGF0 IHJlc3VsdCBpbiBpbnRlcm5hdGlvbmFsIGNhbGxzLiIsCi0iICIsCi0iU0VUIERJQUwgUEJYLU9V VFNJREUtUFJFRklYIDx0ZXh0PiIsCi0iICBVc2UgdGhpcyB0byB0ZWxsIEtlcm1pdCBob3cgdG8g Z2V0IGFuIG91dHNpZGUgbGluZSB3aGVuIGRpYWxpbmcgZnJvbSBhIiwKLSIgIFByaXZhdGUgQnJh bmNoIEV4Y2hhbmdlIChQQlgpLiIsCi0iICIsCi0iU0VUIERJQUwgUEJYLUVYQ0hBTkdFIDx0ZXh0 PiBbIDx0ZXh0PiBbIC4uLiBdIF0iLAotIiAgSWYgUEJYLU9VVFNJREUtUFJFRklYIGlzIHNldCwg dGhlbiB5b3UgY2FuIHVzZSB0aGlzIGNvbW1hbmQgdG8gdGVsbCBLZXJtaXQiLAotIiAgdGhlIGxl YWRpbmcgZGlnaXRzIG9mIG9uZSBvciBtb3JlIGxvY2FsIHBob25lIG51bWJlcnMgdGhhdCBpZGVu dGlmeSBpdCBhcyIsCi0iICBiZWluZyBvbiB5b3VyIFBCWCwgc28gaXQgY2FuIG1ha2UgYW4gaW50 ZXJuYWwgY2FsbCBieSBkZWxldGluZyB0aG9zZSBkaWdpdHMiCi0sCi0iICBmcm9tIHRoZSBwaG9u ZSBudW1iZXIuIiwKLSIgIiwKLSJTRVQgRElBTCBQQlgtSU5URVJOQUwtUFJFRklYIDx0ZXh0PiIs Ci0iICBJZiBQQlgtRVhDSEFOR0UgaXMgc2V0LCBhbmQgS2VybWl0IGRldGVybWluZXMgZnJvbSBp dCB0aGF0IGEgY2FsbCBpcyIsCi0iICBpbnRlcm5hbCwgdGhlbiB0aGlzIHByZWZpeCwgaWYgYW55 LCBpcyBhZGRlZCB0byB0aGUgbnVtYmVyIHByaW9yIHRvIiwKLSIgIFwKLWRpYWxpbmcuICBVc2Ug dGhpcyBpZiBpbnRlcm5hbCBjYWxscyBmcm9tIHlvdXIgUEJYIHJlcXVpcmUgYSBzcGVjaWFsIHBy ZWZpeC4iLAotIiIgfTsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQotc3RhdGljIGNoYXIgKmhteHlm bG9bXSA9IHsgIlN5bnRheDogU0VUIEZMT1cgWyBzd2l0Y2ggXSB2YWx1ZSIsCi0iICIsCi0jaWZu ZGVmIE5PTE9DQUwKLSIgIFNlbGVjdHMgdGhlIHR5cGUgb2YgZmxvdyBjb250cm9sIHRvIHVzZSBk dXJpbmcgZmlsZSB0cmFuc2ZlciwgdGVybWluYWwiLAotIiAgY29ubmVjdGlvbiwgYW5kIHNjcmlw dCBleGVjdXRpb24uIiwKLSNlbHNlCi0iICBTZWxlY3RzIHRoZSB0eXBlIG9mIGZsb3cgY29udHJv bCB0byB1c2UgZHVyaW5nIGZpbGUgdHJhbnNmZXIuIiwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0i ICIsCi0iICBTd2l0Y2hlcyBsZXQgeW91IGFzc29jaWF0ZSBhIHBhcnRpY3VsYXIga2luZCBvZiBm bG93IGNvbnRyb2wgd2l0aCBlYWNoIiwKLSIgIGtpbmQgb2YgY29ubmVjdGlvbjogL1JFTU9URSwg L01PREVNLCAvRElSRUNULVNFUklBTCwgL1RDUElQLCBldGM7IHR5cGUiLAotIiAgXCJzZXQgZmxv dyA/XCIgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgc3dpdGNoZXMuICBUaGVuIHdoZW5ldmVyIHlv dSBtYWtlIiwKLSIgIGEgY29ubmVjdGlvbiwgdGhlIGFzc29jaWF0ZWQgZmxvdy1jb250cm9sIGlz IGNob3NlbiBhdXRvbWF0aWNhbGx5LiIsCi0iICBUaGUgZmxvdy1jb250cm9sIHZhbHVlcyBhcmUg Tk9ORSwgS0VFUCwgWE9OL1hPRkYsIGFuZCBwb3NzaWJseSBSVFMvQ1RTIiwKLSIgIGFuZCBzb21l IG90aGVyczsgYWdhaW4sIHR5cGUgXCJzZXQgZmxvdyA/XCIgZm9yIGEgbGlzdC4gIEtFRVAgdGVs bHMgS2VybWl0IiwKLSIgIG5vdCB0byB0cnkgdG8gY2hhbmdlIHRoZSBjdXJyZW50IGZsb3ctY29u dHJvbCBtZXRob2QgZm9yIHRoZSBjb25uZWN0aW9uLiIsCi0iICIsCi0iICBJZiB5b3Ugb21pdCB0 aGUgc3dpdGNoIGFuZCBzaW1wbHkgc3VwcGx5IGEgdmFsdWUsIHRoaXMgdmFsdWUgYmVjb21lcyB0 aGUiLAotIiAgY3VycmVudCBmbG93IGNvbnRyb2wgdHlwZSwgb3ZlcnJpZGluZyBhbnkgZGVmYXVs dCB2YWx1ZSB0aGF0IG1pZ2h0IGhhdmUiLAotIiAgYmVlbiBjaG9zZW4gaW4geW91ciBtb3N0IHJl Y2VudCBTRVQgTElORSwgU0VUIFBPUlQsIG9yIFNFVCBIT1NULCBvciBvdGhlciIsCi0iICBjb25u ZWN0aW9uLWVzdGFibGlzaG1lbnQgY29tbWFuZC4iLAotIiAiLAotIiAgVHlwZSBTSE9XIEZMT1ct Q09OVFJPTCB0byBzZWUgdGhlIGN1cnJlbnQgZGVmYXVsdHMgZm9yIGVhY2ggY29ubmVjdGlvbiB0 eXBlIgotLAotIiAgYXMgd2VsbCBhcyB0aGUgY3VycmVudCBjb25uZWN0aW9uIHR5cGUgYW5kIGZs b3ctY29udHJvbCBzZXR0aW5nLiAgU0hPVyIsCi0iICBDT01NVU5JQ0FUSU9OUyBhbHNvIHNob3dz IHRoZSBjdXJyZW50IGZsb3ctY29udHJvbCBzZXR0aW5nLiIsCi0iIn07Ci0KLXN0YXRpYyBjaGFy ICpobXh5ZltdID0gewotIlN5bnRheDogU0VUIEZJTEUgcGFyYW1ldGVyIHZhbHVlIiwKLSIgIiwK LSJTZXRzIGZpbGUtcmVsYXRlZCBwYXJhbWV0ZXJzLiAgVXNlIFNIT1cgRklMRSB0byB2aWV3IHRo ZW0uICBBbHNvIHNlZSBTRVQiLAotIihhbmQgU0hPVykgVFJBTlNGRVIgYW5kIFBST1RPQ09MLiIs Ci0iICIsCi0jaWZkZWYgVk1TCi0iU0VUIEZJTEUgVFlQRSB7IFRFWFQsIEJJTkFSWSwgSU1BR0Us IExBQkVMRUQgfSIsCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLSJTRVQgRklMRSBUWVBFIHsgVEVY VCwgQklOQVJZLCBMQUJFTEVEIH0iLAotI2Vsc2UKLSNpZmRlZiBNQUMKLSJTRVQgRklMRSBUWVBF IHsgVEVYVCwgQklOQVJZLCBNQUNCSU5BUlkgfSIsCi0jZWxzZQotIlNFVCBGSUxFIFRZUEUgeyBU RVhULCBCSU5BUlkgfSIsCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIE1BQyAqLwot I2VuZGlmIC8qIFZNUyAqLwotIiAgSG93IGZpbGUgY29udGVudHMgYXJlIHRvIGJlIHRyZWF0ZWQg ZHVyaW5nIGZpbGUgdHJhbnNmZXIgaW4gdGhlIGFic2VuY2UiLAotIiAgb2YgYW55IG90aGVyIGlu ZGljYXRpb24uICBUWVBFIGNhbiBiZSBURVhUIGZvciBjb252ZXJzaW9uIG9mIHJlY29yZCBmb3Jt YXQiLAotIiAgYW5kIGNoYXJhY3RlciBzZXQsIHdoaWNoIGlzIHVzdWFsbHkgbmVlZGVkIHdoZW4g dHJhbnNmZXJyaW5nIHRleHQgZmlsZXMiLAotIiAgYmV0d2VlbiB1bmxpa2UgcGxhdGZvcm1zIChz dWNoIGFzIFVOSVggYW5kIFdpbmRvd3MpLCBvciBCSU5BUlkgZm9yIG5vIiwKLSIgIGNvbnZlcnNp b24gaWYgVFJBTlNGRVIgTU9ERSBpcyBNQU5VQUwsIHdoaWNoIGlzIG5vdCB0aGUgZGVmYXVsdC4g IFVzZSIsCi0iICBCSU5BUlkgd2l0aCBUUkFOU0ZFUiBNT0RFIE1BTlVBTCBmb3IgZXhlY3V0YWJs ZSBwcm9ncmFtcyBvciBiaW5hcnkgZGF0YSBvciIsCi0iICB3aGVuZXZlciB5b3Ugd2lzaCB0byBk dXBsaWNhdGUgdGhlIG9yaWdpbmFsIGNvbnRlbnRzIG9mIHRoZSBmaWxlLCBieXRlIGZvciIKLSwK LSIgIGJ5dGUuICBJbiBtb3N0IG1vZGVybiBLZXJtaXQgcHJvZ3JhbXMsIHRoZSBmaWxlIHNlbmRl ciBpbmZvcm1zIHRoZSByZWNlaXZlciIKLSwKLSIgIG9mIHRoZSBmaWxlIHR5cGUgYXV0b21hdGlj YWxseS4gIEhvd2V2ZXIsIHdoZW4gc2VuZGluZyBmaWxlcyBmcm9tIEMtS2VybWl0IiwKLSIgIHRv IGFuIGFuY2llbnQgb3Igbm9uLUNvbHVtYmlhIEtlcm1pdCBpbXBsZW1lbnRhdGlvbiwgeW91IG1p Z2h0IG5lZWQgdG8gc2V0IiwKLSIgIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgdHlwZSBhdCB0aGUg cmVjZWl2ZXIgYXMgd2VsbC4iLAotIiAiLAotI2lmZGVmIFZNUwotIiAgRklMRSBUWVBFIHNldHRp bmdzIG9mIFRFWFQgYW5kIEJJTkFSWSBoYXZlIG5vIGVmZmVjdCB3aGVuIHNlbmRpbmcgZmlsZXMs IiwKLSIgIHNpbmNlIFZNUyBDLUtlcm1pdCBkZXRlcm1pbmVzIGVhY2ggZmlsZSdzIHR5cGUgYXV0 b21hdGljYWxseSBmcm9tIGl0cyIsCi0iICByZWNvcmQgZm9ybWF0OiBiaW5hcnkgZm9yIGZpeGVk LCB0ZXh0IGZvciBvdGhlcnMuICBGb3IgaW5jb21pbmcgZmlsZXMsIiwKLSIgIHRoZXNlIHNldHRp bmdzIGFyZSBlZmZlY3RpdmUgb25seSBpbiB0aGUgYWJzZW5jZSBvZiBhIGZpbGUtdHlwZSBpbmRp Y2F0aW9uIiwKLSIgIGZyb20gdGhlIHNlbmRlci4iLAotIiAiLAotIiAgWW91IG1heSBpbmNsdWRl IGFuIG9wdGlvbmFsIHJlY29yZC1mb3JtYXQgYWZ0ZXIgdGhlIHdvcmQgQklOQVJZLiAgVGhpcyBt YXkiLAotIiAgYmUgRklYRUQgKHRoZSBkZWZhdWx0KSBvciBVTkRFRklORUQuICBVTkRFRklORUQg aXMgdXNlZCB3aGVuIHlvdSBuZWVkIHRvIiwKLSIgIHJlY2VpdmUgYmluYXJ5IGZpbGVzIGluIGJp bmFyeSBtb2RlIGFuZCBoYXZlIHRoZW0gc3RvcmVkIHdpdGggVU5ERUZJTkVEIiwKLSIgIHJlY29y ZCBmb3JtYXQsIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGNlcnRhaW4gVk1TIGFwcGxpY2F0aW9ucy4i LAotIiAiLAotIiAgVHdvIGFkZGl0aW9uYWwgVk1TIGZpbGUgdHlwZXMgYXJlIGFsc28gc3VwcG9y dGVkOiBJTUFHRSBhbmQgTEFCRUxFRC4iLAotIiAgSU1BR0UgbWVhbnMgcmF3IGJsb2NrIGkvbywg bm8gaW50ZXJmZXJlbmNlIGZyb20gUk1TLCBhcHBsaWVzIHRvIGZpbGUiLAotIiAgdHJhbnNtaXNz aW9uIG9ubHksIGFuZCBvdmVycmlkZXMgdGhlIG5vcm1hbCBhdXRvbWF0aWNhIGZpbGUgdHlwZSIs Ci0iICBkZXRlcm1pbmF0aW9uLiAgIExBQkVMRUQgbWVhbnMgdG8gc2VuZCBvciBpbnRlcnByZXQg Uk1TIGF0dHJpYnV0ZXMiLAotIiAgd2l0aCB0aGUgZmlsZS4iLAotIiAiLAotI2Vsc2UKLSIgIFdo ZW4gVFJBTlNGRVIgTU9ERSBpcyBBVVRPTUFUSUMgKGFzIGl0IGlzIGJ5IGRlZmF1bHQpLCB2YXJp b3VzIGF1dG9tYXRpYyIsCi0iICBtZXRob2RzIChkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtKSBh cmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGZpbGUiLAotIiAgaXMgdHJhbnNmZXJyZWQg aW4gdGV4dCBvciBiaW5hcnkgbW9kZTsgdGhlc2UgbWV0aG9kcyAod2hpY2ggbWlnaHQgaW5jbHVk ZSIsCi0iICBjb250ZW50IHNjYW4gKHNlZSBTRVQgRklMRSBTQ0FOIGJlbG93KSwgZmlsZW5hbWUg cGF0dGVybiBtYXRjaGluZyAoU0VUIEZJTEUiCi0sCi0iICBQQVRURVJOUyksIGNsaWVudC9zZXJ2 ZXIgXCJraW5kcmVkLXNwaXJpdFwiIHJlY29nbml0aW9uLCBvciBzb3VyY2UgZmlsZSIsCi0iICBy ZWNvcmQgZm9ybWF0KSBzdXBlcnNlZGUgdGhlIEZJTEUgVFlQRSBzZXR0aW5nIGJ1dCBjYW4sIHRo ZW1zZWx2ZXMsIGJlIiwKLSIgIHN1cGVyc2VkZWQgYnkgaW5jbHVkaW5nIGEgL0JJTkFSWSBvciAv VEVYVCBzd2l0Y2ggaW4gdGhlIFNFTkQsIEdFVCwgb3IiLAotIiAgUkVDRUlWRSBjb21tYW5kLiIs Ci0iICIsCi0iICBXaGVuIFRSQU5TRkVSIE1PREUgaXMgTUFOVUFMLCB0aGUgYXV0b21hdGljIG1l dGhvZHMgYXJlIHNraXBwZWQgZm9yIHNlbmRpbmciCi0sCi0iICBmaWxlczsgdGhlIEZJTEUgVFlQ RSBzZXR0aW5nIGlzIHVzZWQgaW5zdGVhZCwgd2hpY2ggY2FuIGJlIHN1cGVyc2VkZWQgb24iLAot IiAgYSBwZXItY29tbWFuZCBiYXNpcyB3aXRoIGEgL1RFWFQgb3IgL0JJTkFSWSBzd2l0Y2guIiwK LSNlbmRpZiAvKiBWTVMgKi8KLSIgIiwKLQotI2lmbmRlZiBOT1hGRVIKLQotIlNFVCBGSUxFIEJZ VEVTSVpFIHsgNywgOCB9IiwKLSIgIE5vcm1hbGx5IDguICBJZiA3LCBLZXJtaXQgdHJ1bmNhdGVz IHRoZSA4dGggYml0IG9mIGFsbCBmaWxlIGJ5dGVzLiIsCi0iICIsCi0jaWZuZGVmIE5PQ1NFVFMK LSJTRVQgRklMRSBDSEFSQUNURVItU0VUIG5hbWUiLAotIiAgVGVsbHMgdGhlIGVuY29kaW5nIG9m IHRoZSBsb2NhbCBmaWxlLCBBU0NJSSBieSBkZWZhdWx0LiIsCi0iICBUaGUgbmFtZXMgSVRBTElB TiwgUE9SVFVHVUVTRSwgTk9SV0VHSUFOLCBldGMsIHJlZmVyIHRvIDctYml0IElTTy02NDYiLAot IiAgbmF0aW9uYWwgY2hhcmFjdGVyIHNldHMuICBMQVRJTjEgaXMgdGhlIDgtYml0IElTTyA4ODU5 LTEgTGF0aW4gQWxwaGFiZXQgMSIsCi0iICBmb3IgV2VzdGVybiBFdXJvcGVhbiBsYW5ndWFnZXMu IiwKLSIgIE5FWFQgaXMgdGhlIDgtYml0IGNoYXJhY3RlciBzZXQgb2YgdGhlIE5lWFQgd29ya3N0 YXRpb24uIiwKLSIgIFRoZSBDUG5ubiBzZXRzIGFyZSBmb3IgUENzLiAgTUFDSU5UT1NILUxBVElO IGlzIGZvciB0aGUgTWFjaW50b3NoLiIsCi0jaWZuZGVmIE5PTEFUSU4yCi0iICBMQVRJTjIgaXMg SVNPIDg4NTktMiBmb3IgRWFzdGVybiBFdXJvcGVhbiBsYW5ndWFnZXMgdGhhdCBhcmUgd3JpdHRl biB3aXRoIiwKLSIgIFJvbWFuIGxldHRlcnMuICBNYXpvdmlhIGlzIGEgUEMgY29kZSBwYWdlIHVz ZWQgaW4gUG9sYW5kLiIsCi0jZW5kaWYgLyogTk9MQVRJTjIgKi8KLSNpZmRlZiBDWVJJTExJQwot IiAgS09JLUNZUklMTElDLCBDWVJJTExJQy1JU08sIGFuZCBDUDg2NiBhcmUgOC1iaXQgQ3lyaWxs aWMgY2hhcmFjdGVyIHNldHMuIiwKLSIgIFNIT1JULUtPSSBpcyBhIDctYml0IEFTQ0lJIGNvZGlu ZyBmb3IgQ3lyaWxsaWMuICBCVUxHQVJJQS1QQyBpcyBhIFBDIGNvZGUiLAotIiAgcGFnZSB1c2Vk IGluIEJ1bGdhcmlhIiwKLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotI2lmZGVmIEhFQlJFVwotIiAg SEVCUkVXLUlTTyBpcyBJU08gODg1OS04IExhdGluL0hlYnJldy4gIENQODYyIGlzIHRoZSBIZWJy ZXcgUEMgY29kZSBwYWdlLiIsCi0iICBIRUJSRVctNyBpcyBsaWtlIEFTQ0lJIHdpdGggdGhlIGxv d2VyY2FzZSBsZXR0ZXJzIHJlcGxhY2VkIGJ5IEhlYnJldy4iLAotI2VuZGlmIC8qIEhFQlJFVyAq LwotI2lmZGVmIEdSRUVLCi0iICBHUkVFSy1JU08gaXMgSVNPIDg4NTktNyBMYXRpbi9HcmVlay4g IENQODY5IGlzIHRoZSBHcmVlayBQQyBjb2RlIHBhZ2UuIiwKLSIgIEVMT1QtOTI3IGlzIGxpa2Ug QVNDSUkgd2l0aCB0aGUgbG93ZXJjYXNlIGxldHRlcnMgcmVwbGFjZWQgYnkgR3JlZWsuIiwKLSNl bmRpZiAvKiBHUkVFSyAqLwotI2lmZGVmIEtBTkpJCi0iICBKQVBBTkVTRS1FVUMsIEpJUzctS0FO SkksIERFQy1LQU5KSSwgYW5kIFNISUZULUpJUy1LQU5KSSBhcmUgSmFwYW5lc2UiLAotIiAgS2Fu amkgY2hhcmFjdGVyIHNldHMuIiwKLSNlbmRpZiAvKiBLQU5KSSAqLwotI2lmZGVmIFVOSUNPREUK LSIgIFVDUy0yIGlzIHRoZSAyLWJ5dGUgZm9ybSBvZiB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBT ZXQuIiwKLSIgIFVURi04IGlzIHRoZSBzZXJpYWxpemVkIGZvcm0gb2YgdGhlIFVuaXZlcnNhbCBD aGFyYWN0ZXIgU2V0LiIsCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotIiAgVHlwZSBTRVQgRklMRSBD SEFSID8gZm9yIGEgY29tcGxldGUgbGlzdCBvZiBmaWxlIGNoYXJhY3RlciBzZXRzLiIsCi0iICIs Ci0iU0VUIEZJTEUgREVGQVVMVCA3QklULUNIQVJBQ1RFUi1TRVQiLAotIiAgV2hlbiBhdXRvbWF0 aWNhbGx5IHN3aXRjaGluZyBhbW9uZyBkaWZmZXJlbnQga2luZHMgb2YgZmlsZXMgd2hpbGUgc2Vu ZGluZyIsCi0iICB0aGlzIHRlbGxzIHRoZSBjaGFyYWN0ZXIgc2V0IHRvIGJlIHVzZWQgZm9yIDct Yml0IHRleHQgZmlsZXMuIiwKLSIgIiwKLSJTRVQgRklMRSBERUZBVUxUIDhCSVQtQ0hBUkFDVEVS LVNFVCIsCi0iICBUaGlzIHRlbGxzIHRoZSBjaGFyYWN0ZXIgc2V0IHRvIGJlIHVzZWQgZm9yIDgt Yml0IHRleHQgZmlsZXMgd2hlbiIsCi0iICBzd2l0Y2hpbmcgYXV0b21hdGljYWxseSBhbW9uZyBk aWZmZXJlbnQga2luZHMgb2YgZmlsZXMuIiwKLSIgIiwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0K LSJTRVQgRklMRSBDT0xMSVNJT04gb3B0aW9uIiwKLSIgIFRlbGxzIHdoYXQgdG8gZG8gd2hlbiBh IGZpbGUgYXJyaXZlcyB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIiwKLSIgIGFuIGV4aXN0aW5n IGZpbGUuICBUaGUgb3B0aW9ucyBhcmU6IiwKLSIgICBCQUNLVVAgKGRlZmF1bHQpIC0gUmVuYW1l IHRoZSBvbGQgZmlsZSB0byBhIG5ldywgdW5pcXVlIG5hbWUgYW5kIHN0b3JlIiwKLSIgICAgIHRo ZSBpbmNvbWluZyBmaWxlIHVuZGVyIHRoZSBuYW1lIGl0IHdhcyBzZW50IHdpdGguIiwKLSIgICBP VkVSV1JJVEUgLSBPdmVyd3JpdGUgKHJlcGxhY2UpIHRoZSBleGlzdGluZyBmaWxlLiIsCi0iICAg QVBQRU5EIC0gQXBwZW5kIHRoZSBpbmNvbWluZyBmaWxlIHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0 aW5nIGZpbGUuIiwKLSIgICBSRUpFQ1QgLSBSZWZ1c2UgYW5kL29yIGRpc2NhcmQgdGhlIGluY29t aW5nIGZpbGUgKD0gRElTQ0FSRCkuIiwKLSIgICBSRU5BTUUgLSBHaXZlIHRoZSBpbmNvbWluZyBm aWxlIGEgdW5pcXVlIG5hbWUuIiwKLSIgICBVUERBVEUgLSBBY2NlcHQgdGhlIGluY29taW5nIGZp bGUgb25seSBpZiBuZXdlciB0aGFuIHRoZSBleGlzdGluZyBmaWxlLiIsCi0iICIsCi0KLSJTRVQg RklMRSBERVNUSU5BVElPTiB7IERJU0ssIFBSSU5URVIsIFNDUkVFTiwgTk9XSEVSRSB9IiwKLSIg IERJU0sgKGRlZmF1bHQpOiBTdG9yZSBpbmNvbWluZyBmaWxlcyBvbiBkaXNrLiIsCi0iICBQUklO VEVSOiAgICAgICAgU2VuZCBpbmNvbWluZyBmaWxlcyB0byBTRVQgUFJJTlRFUiBkZXZpY2UuIiwK LSIgIFNDUkVFTjogICAgICAgICBEaXNwbGF5IGluY29taW5nIGZpbGVzIG9uIHNjcmVlbiAobG9j YWwgbW9kZSBvbmx5KS4iLAotIiAgTk9XSEVSRTogICAgICAgIERvIG5vdCBwdXQgaW5jb21pbmcg ZmlsZXMgYW55d2hlcmUgKHVzZSBmb3IgY2FsaWJyYXRpb24pLiIsCi0iICIsCi0iU0VUIEZJTEUg RElTUExBWSBvcHRpb24iLAotIiAgU2VsZWN0cyB0aGUgZm9ybWF0IG9mIHRoZSBmaWxlIHRyYW5z ZmVyIGRpc3BsYXkgZm9yIGxvY2FsLW1vZGUgZmlsZSIsCi0iICB0cmFuc2Zlci4gIFRoZSBjaG9p Y2VzIGFyZToiLAotIiAiLAotIiAgQlJJRUYgICAgICBBIGxpbmUgcGVyIGZpbGUsIHNob3dpbmcg c2l6ZSwgbW9kZSwgc3RhdHVzLCBhbmQgdGhyb3VnaHB1dC4iLAotIiAgU0VSSUFMICAgICBPbmUg ZG90IGlzIHByaW50ZWQgZm9yIGV2ZXJ5IEsgYnl0ZXMgdHJhbnNmZXJyZWQuIiwKLSIgIENSVCAg ICAgICAgTnVtYmVycyBhcmUgY29udGludW91c2x5IHVwZGF0ZWQgb24gYSBzaW5nbGUgc2NyZWVu IGxpbmUuIiwKLSIgICAgICAgICAgICAgVGhpcyBmb3JtYXQgY2FuIGJlIHVzZWQgb24gYW55IHZp ZGVvIGRpc3BsYXkgdGVybWluYWwuIiwKLSNpZmRlZiBDS19DVVJTRVMKLSIgIEZVTExTQ1JFRU4g QSBmdWxseSBmb3JtYXR0ZWQgMjR4ODAgc2NyZWVuIHNob3dpbmcgbG90cyBvZiBpbmZvcm1hdGlv bi4iLAotIiAgICAgICAgICAgICBUaGlzIHJlcXVpcmVzIGEgdGVybWluYWwgb3IgdGVybWluYWwg ZW11bGF0b3IuIiwKLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLSIgIE5PTkUgICAgICAgTm8gZmls ZSB0cmFuc2ZlciBkaXNwbGF5IGF0IGFsbC4iLAotIiAiLAotCi0iU0VUIEZJTEUgRE9XTkxPQUQt RElSRUNUT1JZIFsgPGRpcmVjdG9yeS1uYW1lPiBdIiwKLSIgIFRoZSBkaXJlY3RvcnkgaW50byB3 aGljaCBhbGwgcmVjZWl2ZWQgZmlsZXMgc2hvdWxkIGJlIHBsYWNlZC4gIEJ5IGRlZmF1bHQsIiwK LSIgIHJlY2VpdmVkIGZpbGVzIGdvIGludG8geW91ciBjdXJyZW50IGRpcmVjdG9yeS4iLAotIiAi LAotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgQ0tfQ1RSTFoKLSJTRVQgRklMRSBFT0Yg eyBDVFJMLVosIExFTkdUSCB9IiwKLSIgIEVuZC1PZi1GaWxlIGRldGVjdGlvbiBtZXRob2QsIG5v cm1hbGx5IExFTkdUSC4gIEFwcGxpZXMgb25seSB0byB0ZXh0LW1vZGUiLAotIiAgdHJhbnNmZXJz LiAgV2hlbiBzZXQgdG8gQ1RSTC1aLCB0aGlzIG1ha2VzIHRoZSBmaWxlIHNlbmRlciB0cmVhdCB0 aGUgZmlyc3QiLAotIiAgQ3RybC1aIGluIHRoZSBpbnB1dCBmaWxlIGFzIHRoZSBlbmQgb2YgZmls ZSAoRU9GKSwgYW5kIGl0IG1ha2VzIHRoZSBmaWxlIiwKLSIgIHJlY2VpdmVyIHRhY2sgYSBDdHJs LVogb250byB0aGUgZW5kIG9mIHRoZSBvdXRwdXQgZmlsZSBpZiBpdCBkb2VzIG5vdCIsCi0iICBh bHJlYWR5IGVuZCB3aXRoIEN0cmwtWi4iLAotIiAiLAotI2VuZGlmIC8qIENLX0NUUkxaICovCi0K LSJTRVQgRklMRSBFTkQtT0YtTElORSB7IENSLCBDUkxGLCBMRiB9IiwKLSIgIFVzZSB0aGlzIGNv bW1hbmQgdG8gc3BlY2lmeSBub25zdGFuZGFyZCBsaW5lIHRlcm1pbmF0b3JzIGZvciB0ZXh0IGZp bGVzLiIsCi0iICIsCi0KLSNpZm5kZWYgTk9YRkVSCi0iU0VUIEZJTEUgSU5DT01QTEVURSB7IEFV VE8sIEtFRVAsIERJU0NBUkQgfSIsCi0iICBXaGF0IHRvIGRvIHdpdGggYW4gaW5jb21wbGV0ZWx5 IHJlY2VpdmVkIGZpbGU6IEtFRVAsIERJU0NBUkQsIG9yIEFVVE8uIiwKLSIgIEFVVE8gKHRoZSBk ZWZhdWx0KSBtZWFucyBESVNDQVJEIGlmIHRyYW5zZmVyIGlzIGluIHRleHQgbW9kZSwgS0VFUCBp ZiBpdCIsCi0iICBpcyBpbiBiaW5hcnkgbW9kZS4iLAotIiAiLAotI2lmZGVmIFZNUwotIlNFVCBG SUxFIExBQkVMIHsgQUNMLCBCQUNLVVAtREFURSwgTkFNRSwgT1dORVIsIFBBVEggfSB7IE9OLCBP RkYgfSIsCi0iICBUZWxscyB3aGljaCBpdGVtcyB0byBpbmNsdWRlIChPTikgb3IgZXhjbHVkZSAo T0ZGKSBpbiBsYWJlbGVkIGZpbGUiLAotIiAgdHJhbnNmZXJzIiwKLSIgIiwKLSNlbHNlCi0jaWZk ZWYgT1MyCi0iU0VUIEZJTEUgTEFCRUwgeyBBUkNISVZFLCBSRUFELU9OTFksIEhJRERFTiwgU1lT VEVNLCBFWFRFTkRFRCB9IHsgT04sIE9GRiB9IiwKLSIgIFRlbGxzIHdoaWNoIGl0ZW1zIHRvIGlu Y2x1ZGUgKE9OKSBvciBleGNsdWRlIChPRkYpIGluIGxhYmVsZWQgZmlsZSIsCi0iICB0cmFuc2Zl cnMuIiwKLSIgIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVm IFVOSVgKLSNpZmRlZiBEWU5BTUlDCi0iU0VUIEZJTEUgTElTVFNJWkUgbnVtYmVyIiwKLSIgIENo YW5nZXMgdGhlIHNpemUgb2YgdGhlIGludGVybmFsIHdpbGRjYXJkIGV4cGFuc2lvbiBsaXN0LiAg VXNlIFNIT1cgRklMRSIsCi0iICB0byBzZWUgdGhlIGN1cnJlbnQgc2l6ZS4gIFVzZSB0aGlzIGNv bW1hbmQgdG8gaW5jcmVhc2UgdGhlIHNpemUgaWYgeW91IGdldCIsCi0iICBhIFwiP1RvbyBtYW55 IGZpbGVzXCIgZXJyb3IuICBBbHNvIHNlZSBTRVQgRklMRSBTVFJJTkdTUEFDRS4iLAotIiAiLAot I2VuZGlmIC8qIERZTkFNSUMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSJTRVQgRklMRSBOQU1F UyB7IENPTlZFUlRFRCwgTElURVJBTCB9IiwKLSIgIEZpbGUgbmFtZXMgYXJlIG5vcm1hbGx5IENP TlZFUlRFRCB0byBcImNvbW1vbiBmb3JtXCIgZHVyaW5nIHRyYW5zbWlzc2lvbiIsCi0iICAoZS5n LiBsb3dlcmNhc2UgdG8gdXBwZXJjYXNlLCBleHRyYSBwZXJpb2RzIGNoYW5nZWQgdG8gdW5kZXJz Y29yZSwgZXRjKS4iLAotIiAgTElURVJBTCBtZWFucyB1c2UgZmlsZW5hbWVzIGxpdGVyYWxseSAo dXNlZnVsIGJldHdlZW4gbGlrZSBzeXN0ZW1zKS4gIEFsc28iLAotIiAgc2VlIFNFVCBTRU5EIFBB VEhOQU1FUyBhbmQgU0VUIFJFQ0VJVkUgUEFUSE5BTUVTLiIsCi0iICIsCi0KLSNpZmRlZiBVTklY Ci0iU0VUIEZJTEUgT1VUUFVUIHsgeyBCVUZGRVJFRCwgVU5CVUZGRVJFRCB9IFsgc2l6ZSBdLCBC TE9DS0lORywgTk9OQkxPQ0tJTkcgfSIsCi0iICBMZXRzIHlvdSBjb250cm9sIHRoZSBkaXNrIG91 dHB1dCBidWZmZXIgZm9yIGluY29taW5nIGZpbGVzLiAgQnVmZmVyZWQiLAotIiAgYmxvY2tpbmcg d3JpdGVzIGFyZSBub3JtYWwuICBOb25ibG9ja2luZyB3cml0ZXMgbWlnaHQgYmUgZmFzdGVyIG9u IHNvbWUiLAotIiAgc3lzdGVtcyBidXQgbWlnaHQgYWxzbyBiZSByaXNreSwgZGVwZW5kaW5nIG9u IHRoZSB1bmRlcmx5aW5nIGZpbGUgc2VydmljZS4iLAotIiAgVW5idWZmZXJlZCB3cml0ZXMgbWln aHQgYmUgdXNlZnVsIGluIGNyaXRpY2FsIGFwcGxpY2F0aW9ucyB0byBlbnN1cmUgdGhhdCIsCi0i ICBjYWNoZWQgZGlzayB3cml0ZXMgYXJlIG5vdCBsb3N0IGluIGEgY3Jhc2gsIGJ1dCB3aWxsIHBy b2JhYmx5IGFsc28gYmUiLAotIiAgc2xvd2VyLiAgVGhlIG9wdGlvbmFsIHNpemUgcGFyYW1ldGVy IGFmdGVyIEJVRkZFUkVEIG9yIFVOQlVGRkVSRUQgbGV0cyB5b3UiLAotIiAgY2hhbmdlIHRoZSBk aXNrIG91dHB1dCBidWZmZXIgc2l6ZTsgdGhpcyBtaWdodCBtYWtlIGEgZGlmZmVyZW5jZSBpbiIs Ci0iICBwZXJmb3JtYW5jZS4iLAotIiAiLAotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmZGVmIFBB VFRFUk5TCi0iU0VUIEZJTEUgUEFUVEVSTlMgeyBPTiwgT0ZGLCBBVVRPIH0iLAotIiAgT04gbWVh bnMgdG8gdXNlIGZpbGVuYW1lIHBhdHRlcm4gbGlzdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8g c2VuZCBhIGZpbGUiLAotIiAgaW4gdGV4dCBvciBiaW5hcnkgbW9kZS4gIE9GRiBtZWFucyB0byBz ZW5kIGFsbCBmaWxlcyBpbiB0aGUgcHJldmFpbGluZyIsCi0iICBtb2RlLiAgQVVUTyAodGhlIGRl ZmF1bHQpIGlzIGxpa2UgT04gaWYgdGhlIG90aGVyIEtlcm1pdCBhY2NlcHRzIEF0dHJpYnV0ZSIs Ci0iICBwYWNrZXRzIGFuZCBsaWtlIE9GRiBvdGhlcndpc2UuICBGSUxFIFBBVFRFUk5TIGFyZSB1 c2VkIG9ubHkgaWYgRklMRSBTQ0FOIiwKLSIgIGlzIE9GRiAoc2VlIFNFVCBGSUxFIFNDQU4pLiIs Ci0iICIsCi0iU0VUIEZJTEUgQklOQVJZLVBBVFRFUk5TIFsgPHBhdHRlcm4+IFsgPHBhdHRlcm4+ IC4uLiBdIF0iLAotIiAgWmVybyBvciBtb3JlIGZpbGVuYW1lIHBhdHRlcm5zIHdoaWNoLCBpZiBt YXRjaGVkLCBjYXVzZSBhIGZpbGUgdG8gYmUgc2VudCIsCi0iICBpbiBiaW5hcnkgbW9kZSB3aGVu IEZJTEUgUEFUVEVSTlMgYXJlIE9OLiAgSEVMUCBXSUxEQ0FSRFMgZm9yIGEgZGVzY3JpcHRpb24i Ci0sCi0iICBvZiBwYXR0ZXJuIHN5bnRheC4gIFNIT1cgUEFUVEVSTlMgdG8gc2VlIHRoZSBjdXJy ZW50IGZpbGUgcGF0dGVybiBsaXN0cy4iLAotIiAiLAotIlNFVCBGSUxFIFRFWFQtUEFUVEVSTlMg WyA8cGF0dGVybj4gWyA8cGF0dGVybj4gLi4uIF0gXSIsCi0iICBaZXJvIG9yIG1vcmUgZmlsZW5h bWUgcGF0dGVybnMgd2hpY2gsIGlmIG1hdGNoZWQsIGNhdXNlIGEgZmlsZSB0byBiZSBzZW50IiwK LSIgIGluIHRleHQgbW9kZSB3aGVuIEZJTEUgUEFUVEVSTlMgaXMgT047IGlmIGEgZmlsZSBkb2Vz IG5vdCBtYXRjaCBhIHRleHQgb3IiLAotIiAgYmluYXJ5IHBhdHRlcm4sIHRoZSBwcmV2YWlsaW5n IFNFVCBGSUxFIFRZUEUgaXMgdXNlZC4iLAotIiAiLAotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0K LSNpZmRlZiBWTVMKLSJTRVQgRklMRSBSRUNPUkQtTEVOR1RIIG51bWJlciIsCi0iICBTZXRzIHRo ZSByZWNvcmQgbGVuZ3RoIGZvciByZWNlaXZlZCBmaWxlcyBvZiB0eXBlIEJJTkFSWS4gIFVzZSB0 aGlzIHRvIiwKLSIgIHJlY2VpdmUgVk1TIEJBQ0tVUCBzYXZlc2V0cyBvciBvdGhlciBmaXhlZC1m b3JtYXQgZmlsZXMgdGhhdCBkbyBub3QgdXNlIiwKLSIgIHRoZSBkZWZhdWx0IHJlY29yZCBsZW5n dGggb2YgNTEyLiIsCi0iICIsCi0jZW5kaWYgLyogVk1TICovCi0KLSJTRVQgRklMRSBTQ0FOIHsg T04gWyBzaXplIF0sIE9GRiB9IiwKLSIgIElmIFRSQU5TRkVSIE1PREUgaXMgQVVUT01BVElDIGFu ZCBGSUxFIFNDQU4gaXMgT04gKGFzIGl0IGlzIGJ5IGRlZmF1bHQpIiwKLSIgIEtlcm1pdCBwZWVr cyBhdCB0aGUgZmlsZSdzIGNvbnRlbnRzIHRvIHNlZSBpZiBpdCdzIHRleHQgb3IgYmluYXJ5LiAg VXNlIiwKLSIgIFNFVCBGSUxFIFNDQU4gT0ZGIHRvIGRpc2FibGUgZmlsZSBwZWVraW5nLCB3aGls ZSBzdGlsbCBrZWVwaW5nIFRSQU5TRkVSIiwKLSIgIE1PREUgYXV0b21hdGljIHRvIGFsbG93IG5h bWUgcGF0dGVybnMgYW5kIG90aGVyIG1ldGhvZHMuICBUaGUgb3B0aW9uYWwiLAotIiAgc2l6ZSBp cyB0aGUgbnVtYmVyIG9mIGZpbGUgYnl0ZXMgdG8gc2NhbiwgNDkxNTIgYnkgZGVmYXVsdC4gIC0x IG1lYW5zIHRvIiwKLSIgIHNjYW4gdGhlIHdob2xlIGZpbGUuICBBbHNvIHNlZSBTRVQgRklMRSBQ QVRURVJOUy4iLAotIiAiLAotCi0jaWZkZWYgVU5JWAotI2lmZGVmIERZTkFNSUMKLSJTRVQgRklM RSBTVFJJTkdTUEFDRSBudW1iZXIiLAotIiAgQ2hhbmdlcyB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9m IHRoZSBpbnRlcm5hbCBidWZmZXIgdGhhdCBob2xkcyBsaXN0cyBvZiIsCi0iICBmaWxlbmFtZXMg c3VjaCBhcyB3aWxkY2FyZCBleHBhbnNpb24gbGlzdHMuICBVc2UgU0hPVyBGSUxFIHRvIHNlZSB0 aGUiLAotIiAgY3VycmVudCBzaXplLiAgVXNlIHRoaXMgY29tbWFuZCB0byBpbmNyZWFzZSB0aGUg c2l6ZSBpZiB5b3UgZ2V0IGEiLAotIiAgXCI/U3RyaW5nIHNwYWNlIGV4aGF1c3RlZFwiIGVycm9y LiAgQWxzbyBzZWUgU0VUIEZJTEUgTElTVFNJWkUuIiwKLSIgIiwKLSNlbmRpZiAvKiBEWU5BTUlD ICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZkZWYgVU5JQ09ERQotIlNFVCBGSUxFIFVDUyBC T00geyBPTiwgT0ZGIH0iLAotIiAgV2hldGhlciB0byB3cml0ZSBhIEJ5dGUgT3JkZXIgTWFyayB3 aGVuIGNyZWF0aW5nIGEgVUNTLTIgZmlsZS4iLAotIiAiLAotIlNFVCBGSUxFIFVDUyBCWVRFLU9S REVSIHsgQklHLUVORElBTiwgTElUVExFLUVORElBTiB9IiwKLSIgIEJ5dGUgb3JkZXIgdG8gdXNl IHdoZW4gY3JlYXRpbmcgVUNTLTIgZmlsZXMsIGFuZCB0byB1c2Ugd2hlbiByZWFkaW5nIFVDUy0y IiwKLSIgIGZpbGVzIHRoYXQgZG8gbm90IHN0YXJ0IHdpdGggYSBCeXRlIE9yZGVyIE1hcmsuIiwK LSIgIiwKLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSJTRVQgRklMRSBXQVJOSU5HIHsgT04sIE9G RiB9IiwKLSIgIFNFVCBGSUxFIFdBUk5JTkcgaXMgc3VwZXJzZWRlZCBieSB0aGUgbmV3ZXIgY29t bWFuZCwgU0VUIEZJTEUiLAotIiAgQ09MTElTSU9OLiAgU0VUIEZJTEUgV0FSTklORyBPTiBpcyBl cXVpdmFsZW50IHRvIFNFVCBGSUxFIENPTExJU0lPTiBSRU5BTUUiLAotIiAgYW5kIFNFVCBGSUxF IFdBUk5JTkcgT0ZGIGlzIGVxdWl2YWxlbnQgdG8gU0VUIEZJTEUgQ09MTElTSU9OIE9WRVJXUklU RS4iLAotI2VuZGlmIC8qIE5PWEZFUiAqLwotIiIgfTsKLQotc3RhdGljIGNoYXIgKmhteHloc2hb XSA9IHsKLSJTeW50YXg6IFNFVCBIQU5EU0hBS0UgeyBOT05FLCBYT04sIExGLCBCRUxMLCBFU0Ms IENPREUgbnVtYmVyIH0iLAotIiAgQ2hhcmFjdGVyIHRvIHVzZSBmb3IgaGFsZiBkdXBsZXggbGlu ZSB0dXJuYXJvdW5kIGhhbmRzaGFrZSBkdXJpbmcgZmlsZSIsCi0iICB0cmFuc2Zlci4gIEMtS2Vy bWl0IHdhaXRzIGZvciB0aGlzIGNoYXJhY3RlciBmcm9tIHRoZSBvdGhlciBjb21wdXRlciIsCi0i ICBiZWZvcmUgc2VuZGluZyBpdHMgbmV4dCBwYWNrZXQuICBEZWZhdWx0IGlzIE5PTkU7IHlvdSBj YW4gZ2l2ZSBvbmUgb2YgdGhlIiwKLSIgIG90aGVyIG5hbWVzIGxpa2UgQkVMTCBvciBFU0MsIG9y IHVzZSBTRVQgSEFORFNIQUtFIENPREUgdG8gc3BlY2lmeSB0aGUiLAotIiAgbnVtZXJpYyBjb2Rl IHZhbHVlIG9mIHRoZSBoYW5kc2hha2UgY2hhcmFjdGVyLiAgVHlwZSBTRVQgSEFORFNIID8gZm9y IGEiLAotIiAgY29tcGxldGUgbGlzdCBvZiBwb3NzaWJpbGl0aWVzLiIsCi0iIiB9OwotCi0jaWZu ZGVmIE5PU0VSVkVSCi1zdGF0aWMgY2hhciAqaHNldHNydltdID0gewotIlNFVCBTRVJWRVIgQ0Qt TUVTU0FHRSB7T04sT0ZGfSIsCi0iICBUZWxscyB3aGV0aGVyIHRoZSBzZXJ2ZXIsIGFmdGVyIHN1 Y2Nlc3NmdWxseSBleGVjdXRpbmcgYSBSRU1PVEUgQ0QiLAotIiAgY29tbWFuZCwgc2hvdWxkIHNl bmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXcgZGlyZWN0b3J5J3MgUkVBRC5NRSIsCi0iICAob3Ig c2ltaWxhcikgZmlsZSB0byB5b3VyIHNjcmVlbi4iLAotIiAiLAotIlNFVCBTRVJWRVIgQ0QtTUVT U0FHRSBGSUxFIG5hbWUiLAotIiAgVGVsbHMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgZGlz cGxheWVkIGFzIGEgQ0QtTUVTU0FHRSwgc3VjaCBhcyIsCi0iICBSRUFELk1FIChTSE9XIFNFUlZF UiB0ZWxscyB0aGUgY3VycmVudCBDRC1NRVNTQUdFIEZJTEUgbmFtZSkuIiwKLSIgIFRvIHNwZWNp ZnkgbW9yZSB0aGFuIG9uZSBmaWxlbmFtZSB0byBsb29rIGZvciwgdXNlIHt7bmFtZTF9e25hbWUy fS4ufS4iLAotIiAgU3lub255bTogU0VUIENEIE1FU1NBR0UgRklMRSA8bGlzdD4uIiwKLSIgIiwK LSJTRVQgU0VSVkVSIERJU1BMQVkge09OLE9GRn0iLAotIiAgVGVsbHMgd2hldGhlciBsb2NhbC1t b2RlIEMtS2VybWl0IGR1cmluZyBzZXJ2ZXIgb3BlcmF0aW9uIHNob3VsZCBwdXQgYSIsCi0iICBm aWxlIHRyYW5zZmVyIGRpc3BsYXkgb24gdGhlIHNjcmVlbi4gIERlZmF1bHQgaXMgT0ZGLiIsCi0i ICIsCi0iU0VUIFNFUlZFUiBHRVQtUEFUSCBbIGRpcmVjdG9yeSBbIGRpcmVjdG9yeSBbIC4uLiBd IF0gXSIsCi0iICBUZWxscyB0aGUgQy1LZXJtaXQgc2VydmVyIHdoZXJlIHRvIGxvb2sgZm9yIGZp bGVzIHdob3NlIG5hbWVzIGl0IHJlY2VpdmVzIiwKLSIgIGZyb20gY2xpZW50IEdFVCBjb21tYW5k cyB3aGVuIHRoZSBuYW1lcyBhcmUgbm90IGZ1bGx5IHNwZWNpZmllZCBwYXRobmFtZXMuIiwKLSIg IERlZmF1bHQgaXMgbm8gR0VULVBBVEgsIHNvIEMtS2VybWl0IGxvb2tzIG9ubHkgaW4gaXRzIGN1 cnJlbnQgZGlyZWN0b3J5LiIsCi0iICIsCi0iU0VUIFNFUlZFUiBJRExFLVRJTUVPVVQgc2Vjb25k cyIsCi0iICBJZGxlIHRpbWUgbGltaXQgd2hpbGUgaW4gc2VydmVyIG1vZGUsIDAgZm9yIG5vIGxp bWl0LiIsCi0jaWZuZGVmIE9TMgotIiAgTk9URTogU0VSVkVSIElETEUtVElNRU9VVCBhbmQgU0VS VkVSIFRJTUVPVVQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iLAotI2VuZGlmIC8qIE9TMiAqLwot IiAiLAotIlNFVCBTRVJWRVIgS0VFUEFMSVZFIHtPTixPRkZ9IiwKLSIgIFRlbGxzIHdoZXRoZXIg Qy1LZXJtaXQgc2hvdWxkIHNlbmQgXCJrZWVwYWxpdmVcIiBwYWNrZXRzIHdoaWxlIGV4ZWN1dGlu ZyIsCi0iICBSRU1PVEUgSE9TVCBjb21tYW5kcywgd2hpY2ggaXMgdXNlZnVsIGluIGNhc2UgdGhl IGNvbW1hbmQgdGFrZXMgYSBsb25nIiwKLSIgIHRpbWUgdG8gcHJvZHVjZSBhbnkgb3V0cHV0IGFu ZCB0aGVyZWZvcmUgbWlnaHQgY2F1c2UgdGhlIG9wZXJhdGlvbiB0byB0aW1lIiwKLSIgIG91dC4g IE9OIGJ5IGRlZmF1bHQ7IHR1cm4gaXQgT0ZGIGlmIGl0IGNhdXNlcyB0cm91YmxlIHdpdGggdGhl IGNsaWVudCBvciIsCi0iICBzbG93cyBkb3duIHRoZSBzZXJ2ZXIgdG9vIG11Y2guIiwKLSIgIiwK LSJTRVQgU0VSVkVSIExPR0lOIFsgdXNlcm5hbWUgWyBwYXNzd29yZCBbIGFjY291bnQgXSBdIF0i LAotIiAgU2V0cyB1cCBhIHVzZXJuYW1lIGFuZCBvcHRpb25hbCBwYXNzd29yZCB3aGljaCBtdXN0 IGJlIHN1cHBsaWVkIGJlZm9yZSIsCi0iICB0aGUgc2VydmVyIHdpbGwgcmVzcG9uZCB0byBhbnkg Y29tbWFuZHMgb3RoZXIgdGhhbiBSRU1PVEUgTE9HSU4uICBUaGUiLAotIiAgYWNjb3VudCBpcyBp Z25vcmVkLiAgSWYgeW91IGVudGVyIFNFVCBTRVJWRVIgTE9HSU4gYnkgaXRzZWxmLCB0aGVuIGxv Z2luIiwKLSIgIGlzIG5vIGxvbmdlciByZXF1aXJlZC4gIE9ubHkgb25lIFNFVCBTRVJWRVIgTE9H SU4gY29tbWFuZCBjYW4gYmUgaW4gZWZmZWN0IiwKLSIgIGF0IGEgdGltZTsgQy1LZXJtaXQgZG9l cyBub3Qgc3VwcG9ydCBtdWx0aXBsZSB1c2VyL3Bhc3N3b3JkIHBhaXJzLiIsCi0iICIsCi0iU0VU IFNFUlZFUiBUSU1FT1VUIG4iLAotIiAgU2VydmVyIGNvbW1hbmQgd2FpdCB0aW1lb3V0IGludGVy dmFsLCBob3cgb2Z0ZW4gdGhlIEMtS2VybWl0IHNlcnZlciBpc3N1ZXMiLAotIiAgYSBOQUsgd2hp bGUgd2FpdGluZyBmb3IgYSBjb21tYW5kIHBhY2tldC4gIFNwZWNpZnkgMCBmb3Igbm8gTkFLcyBh dCBhbGwuIiwKLSIgIERlZmF1bHQgaXMgMC4iLAotIiIKLX07Ci0jZW5kaWYgLyogTk9TRVJWRVIg Ki8KLQotc3RhdGljIGNoYXIgKmhtaHJtdFtdID0gewotI2lmZGVmIE5FV0ZUUAotIlRoZSBSRU1P VEUgY29tbWFuZCBzZW5kcyBmaWxlIG1hbmFnZW1lbnQgaW5zdHJ1Y3Rpb25zIG9yIG90aGVyIGNv bW1hbmRzIiwKLSJ0byBhIEtlcm1pdCBvciBGVFAgc2VydmVyLiAgSWYgeW91IGhhdmUgYSBzaW5n bGUgY29ubmVjdGlvbiwgdGhlIGNvbW1hbmQgaXMiLAotImRpcmVjdGVkIHRvIHRoZSBzZXJ2ZXIg eW91IGFyZSBjb25uZWN0ZWQgdG87IGlmIHlvdSBoYXZlIG11bHRpcGxlIGNvbm5lY3Rpb25zIgot LAotInRoZSBjb21tYW5kIGlzIGRpcmVjdGVkIGFjY29yZGluZyB0byB5b3VyIEdFVC1QVVQtUkVN T1RFIHNldHRpbmcuIiwKLSNlbHNlCi0iVGhlIFJFTU9URSBjb21tYW5kIHNlbmRzIGZpbGUgbWFu YWdlbWVudCBpbnN0cnVjdGlvbnMgb3Igb3RoZXIgY29tbWFuZHMiLAotInRvIGEgS2VybWl0IHNl cnZlci4gIFRoZXJlIHNob3VsZCBhbHJlYWR5IGJlIGEgS2VybWl0IHJ1bm5pbmcgaW4gc2VydmVy IiwKLSJtb2RlIG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24uIiwKLSNlbmRpZiAv KiBORVdGVFAgKi8KLSJUeXBlIFJFTU9URSA/IHRvIHNlZSBhIGxpc3Qgb2YgYXZhaWxhYmxlIHJl bW90ZSBjb21tYW5kcy4gIFR5cGUgSEVMUCBSRU1PVEUiLAotInh4eCB0byBnZXQgZnVydGhlciBp bmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgcmVtb3RlIGNvbW1hbmQgeHh4LiIsCi0iICIs Ci0iQWxsIFJFTU9URSBjb21tYW5kcyBleGNlcHQgTE9HSU4gYW5kIExPR09VVCBoYXZlIFItY29t bWFuZCBzaG9ydGN1dHM7IiwKLSJmb3IgZXhhbXBsZSwgUkRJUiBmb3IgUkVNT1RFIERJUiwgUkNE IGZvciBSRU1PVEUgQ0QsIGV0Yy4iLAotIiAiLAotI2lmZGVmIE5FV0ZUUAotI2lmZGVmIExPQ1VT Ci0iQWxzbyBzZWU6IEhFTFAgU0VUIExPQ1VTLCBIRUxQIEZUUCwgSEVMUCBTRVQgR0VULVBVVC1S RU1PVEUuIiwKLSNlbHNlCi0iQWxzbyBzZWU6IEhFTFAgRlRQLCBIRUxQIFNFVCBHRVQtUFVULVJF TU9URS4iLAotI2VuZGlmIC8qIExPQ1VTICovCi0jZWxzZQotI2lmZGVmIExPQ1VTCi0iQWxzbyBz ZWU6IEhFTFAgU0VUIExPQ1VTLiIsCi0jZW5kaWYgLyogTE9DVVMgKi8KLSNlbmRpZiAvKiBORVdG VFAgKi8KLSIiIH07Ci0KLSNpZm5kZWYgTk9TUEwKLXN0YXRpYyBjaGFyICppZmhscFtdID0geyAi U3ludGF4OiBJRiBbTk9UXSBjb25kaXRpb24gY29tbWFuZGxpc3QiLAotIiAiLAotIklmIHRoZSBj b25kaXRpb24gaXMgKGlzIG5vdCkgdHJ1ZSwgZG8gdGhlIGNvbW1hbmRsaXN0LiAgVGhlIGNvbW1h bmRsaXN0IiwKLSJjYW4gYmUgYSBzaW5nbGUgY29tbWFuZCwgb3IgYSBsaXN0IG9mIGNvbW1hbmRz IHNlcGFyYXRlZCBieSBjb21tYXMgYW5kIiwKLSJlbmNsb3NlZCBpbiBicmFjZXMuICBUaGUgY29u ZGl0aW9uIGNhbiBiZSBhIHNpbmdsZSBjb25kaXRpb24gb3IgYSBncm91cCBvZiIsCi0iY29uZGl0 aW9ucyBzZXBhcmF0ZWQgYnkgQU5EICgmJikgb3IgT1IgKHx8KSBhbmQgZW5jbG9zZWQgaW4gcGFy ZW50aGVzZXMuIiwKLSJJZiBwYXJlbnRoZXNlcyBhcmUgdXNlZCB0aGV5IG11c3QgYmUgc3Vycm91 bmRlZCBieSBzcGFjZXMuICBFeGFtcGxlczoiLAotIiAiLAotIiAgSUYgRVhJU1Qgb29mYS50eHQg PGNvbW1hbmQ+IiwKLSIgIElGICggRVhJU1Qgb29mYS50eHQgfHwgPSBcXHYobmRheSkgMyApIDxj b21tYW5kPiIsCi0iICBJRiAoIEVYSVNUIG9vZmEudHh0IHx8ID0gXFx2KG5kYXkpIDMgKSB7IDxj b21tYW5kPiwgPGNvbW1hbmQ+LCAuLi4gfSIsCi0iICIsCi0iVGhlIGNvbmRpdGlvbnMgYXJlOiIs Ci0iICIsCi0iICBTVUNDRVNTICAgICAtIFRoZSBwcmV2aW91cyBjb21tYW5kIHN1Y2NlZWRlZCIs Ci0iICBPSyAgICAgICAgICAtIFN5bm9ueW0gZm9yIFNVQ0NFU1MiLAotIiAgRkFJTFVSRSAgICAg LSBUaGUgcHJldmlvdXMgY29tbWFuZCBmYWlsZWQiLAotIiAgRVJST1IgICAgICAgLSBTeW5vbnlt IGZvciBGQUlMVVJFIiwKLSIgIEZMQUcgICAgICAgIC0gU3VjY2VlZHMgaWYgU0VUIEZMQUcgT04s IGZhaWxzIGlmIFNFVCBGTEFHIE9GRiIsCi0iICBCQUNLR1JPVU5EICAtIEMtS2VybWl0IGlzIHJ1 bm5pbmcgaW4gdGhlIGJhY2tncm91bmQiLAotI2lmZGVmIENLX0lGUk8KLSIgIEZPUkVHUk9VTkQg IC0gQy1LZXJtaXQgaXMgcnVubmluZyBpbiB0aGUgZm9yZWdyb3VuZCIsCi0iICBSRU1PVEUtT05M WSAtIEMtS2VybWl0IHdhcyBzdGFydGVkIHdpdGggdGhlIC1SIGNvbW1hbmQtbGluZSBvcHRpb24i LAotI2Vsc2UKLSIgIEZPUkVHUk9VTkQgIC0gQy1LZXJtaXQgaXMgcnVubmluZyBpbiB0aGUgZm9y ZWdyb3VuZCIsCi0jZW5kaWYgLyogQ0tfSUZSTyAqLwotIiAgS0VSQkFORyAgICAgLSBBIEtlcmJh bmcgc2NyaXB0IGlzIHJ1bm5pbmciLAotIiAgQUxBUk0gICAgICAgLSBTRVQgQUxBUk0gdGltZSBo YXMgcGFzc2VkIiwKLSIgIEFTS1RJTUVPVVQgIC0gVGhlIG1vc3QgcmVjZW50IEFTSywgQVNLUSwg R0VUQywgb3IgR0VUT0sgdGltZWQgb3V0IiwKLSIgIEVNVUxBVElPTiAgIC0gU3VjY2VlZHMgaWYg ZXhlY3V0ZWQgd2hpbGUgaW4gQ09OTkVDVCBtb2RlIiwKLSNpZmRlZiBPUzIKLSIgIFRBUEkgICAg ICAgIC0gQ3VycmVudCBjb25uZWN0aW9uIGlzIHZpYSBhIE1pY3Jvc29mdCBUQVBJIGRldmljZSIs Ci0jZW5kaWYgLyogT1MyICovCi0iICIsCi0iICBNUy1LRVJNSVQgICAtIFByb2dyYW0gaXMgTVMt RE9TIEtlcm1pdCIsCi0iICBDLUtFUk1JVCAgICAtIFByb2dyYW0gaXMgQy1LZXJtaXQiLAotIiAg Sy05NSAgICAgICAgLSBQcm9ncmFtIGlzIEtlcm1pdCA5NSIsCi0iICBHVUkgICAgICAgICAtIFBy b2dyYW0gcnVucyBpbiBhIEdVSSB3aW5kb3ciLAotIiAiLAotIiAgQVZBSUxBQkxFIENSWVBUTyAg ICAgICAgICAgICAgICAgIC0gRW5jcnlwdGlvbiBpcyBhdmFpbGFibGUiLAotIiAgQVZBSUxBQkxF IEtFUkJFUk9TNCAgICAgICAgICAgICAgIC0gS2VyYmVyb3MgNCBhdXRoZW50aWNhdGlvbiBpcyBh dmFpbGFibGUiLAotIiAgQVZBSUxBQkxFIEtFUkJFUk9TNSAgICAgICAgICAgICAgIC0gS2VyYmVy b3MgNSBhdXRoZW50aWNhdGlvbiBpcyBhdmFpbGFibGUiLAotIiAgQVZBSUxBQkxFIE5UTE0gICAg ICAgICAgICAgICAgICAgIC0gTlRMTSBhdXRoZW50aWNhdGlvbiBpcyBhdmFpbGFibGUiLAotIiAg QVZBSUxBQkxFIFNSUCAgICAgICAgICAgICAgICAgICAgIC0gU1JQIGF1dGhlbnRpY2F0aW9uIGlz IGF2YWlsYWJsZSIsCi0iICBBVkFJTEFCTEUgU1NMICAgICAgICAgICAgICAgICAgICAgLSBTU0wv VExTIGF1dGhlbnRpY2F0aW9uIGlzIGF2YWlsYWJsZSIsCi0iICBNQVRDSCBzdHJpbmcgcGF0dGVy biAgICAgICAgICAgICAgLSBTdWNjZWVkcyBpZiBzdHJpbmcgbWF0Y2hlcyBwYXR0ZXJuIiwKLSNp ZmRlZiBDS0ZMT0FUCi0iICBGTE9BVCBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgLSBTdWNj ZWVkcyBpZiBmbG9hdGluZy1wb2ludCBudW1iZXIiLAotI2VuZGlmIC8qIENLRkxPQVQgKi8KLSIg IENPTU1BTkQgd29yZCAgICAgICAgICAgICAgICAgICAgICAtIFN1Y2NlZWRzIGlmIHdvcmQgaXMg YnVpbHQtaW4gY29tbWFuZCIsCi0iICBERUZJTkVEIHZhcmlhYmxlbmFtZSBvciBtYWNyb25hbWUg LSBUaGUgbmFtZWQgdmFyaWFibGUgb3IgbWFjcm8gaXMgZGVmaW5lZCIsCi0iICBERUNMQVJFRCBh cnJheW5hbWUgICAgICAgICAgICAgICAgLSBUaGUgbmFtZWQgYXJyYXkgaXMgZGVjbGFyZWQiLAot IiAgTlVNRVJJQyB2YXJpYWJsZSBvciBjb25zdGFudCAgICAgIC0gVGhlIHZhcmlhYmxlIG9yIGNv bnN0YW50IGlzIG51bWVyaWMiLAotIiAgRVhJU1QgZmlsZW5hbWUgICAgICAgICAgICAgICAgICAg IC0gVGhlIG5hbWVkIGZpbGUgZXhpc3RzIiwKLSIgIEFCU09MVVRFIGZpbGVuYW1lICAgICAgICAg ICAgICAgICAtIFRoZSBmaWxlbmFtZSBpcyBhYnNvbHV0ZSwgbm90IHJlbGF0aXZlIiwKLSNpZmRl ZiBDS19UTVBESVIKLSIgIERJUkVDVE9SWSBzdHJpbmcgICAgICAgICAgICAgICAgICAtIFRoZSBz dHJpbmcgaXMgdGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkiLAotI2VuZGlmIC8qIENLX1RNUERJUiAq LwotI2lmZGVmIFVOSVgKLSIgIExJTksgc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAtIFRo ZSBzdHJpbmcgaXMgYSBzeW1ib2xpYyBsaW5rIiwKLSNlbmRpZgkvKiBVTklYICovCi0iICBSRUFE QUJMRSBmaWxlbmFtZSAgICAgICAgICAgICAgICAgLSBTdWNjZWVkcyBpZiB0aGUgZmlsZSBpcyBy ZWFkYWJsZSIsCi0iICBXUklURUFCTEUgZmlsZW5hbWUgICAgICAgICAgICAgICAgLSBTdWNjZWVk cyBpZiB0aGUgZmlsZSBpcyB3cml0ZWFibGUiLAotI2lmZGVmIFpGQ0RBVAotIiAgTkVXRVIgZmls ZTEgZmlsZTIgICAgICAgICAgICAgICAgIC0gVGhlIDFzdCBmaWxlIGlzIG5ld2VyIHRoYW4gdGhl IDJuZCBvbmUiLAotI2VuZGlmIC8qIFpGQ0RBVCAqLwotIiAgT1BFTiB7IFJFQUQtRklMRSxTRVNT SU9OLUxPRywuLi59IC0gVGhlIGdpdmVuIGZpbGUgb3IgbG9nIGlzIG9wZW4iLAotI2lmbmRlZiBO T0xPQ0FMCi0iICBPUEVOIENPTk5FQ1RJT04gICAgICAgICAgICAgICAgICAgLSBBIGNvbm5lY3Rp b24gaXMgb3BlbiIsCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotIiAgS0JISVQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0gQSBrZXkgaGFzIGJlZW4gcHJlc3NlZCIsCi0iICIsCi0iICBWRVJT SU9OIC0gZXF1aXZhbGVudCB0byBcImlmID49IFxcdih2ZXJzaW9uKSAuLi5cIiIsCi0iICBDT1VO VCAgIC0gc3VidHJhY3Qgb25lIGZyb20gQ09VTlQsIGV4ZWN1dGUgdGhlIGNvbW1hbmQgaWYgdGhl IHJlc3VsdCBpcyIsCi0iICAgICAgICAgICAgZ3JlYXRlciB0aGFuIHplcm8gKHNlZSBTRVQgQ09V TlQpIiwKLSIgIiwKLSIgIEVRVUFMIHMxIHMyIC0gczEgYW5kIHMyIChjaGFyYWN0ZXIgc3RyaW5n cyBvciB2YXJpYWJsZXMpIGFyZSBlcXVhbCIsCi0iICBMTFQgczEgczIgICAtIHMxIGlzIGxleGlj YWxseSAoYWxwaGFiZXRpY2FsbHkpIGxlc3MgdGhhbiBzMiIsCi0iICBMR1QgczEgczEgICAtIHMx IGlzIGxleGljYWxseSAoYWxwaGFiZXRpY2FsbHkpIGdyZWF0ZXIgdGhhbiBzMiIsCi0iICIsCi0i ICA9ICBuMSBuMiAtIG4xIGFuZCBuMiAobnVtYmVycyBvciB2YXJpYWJsZXMgY29udGFpbmluZyBu dW1iZXJzKSBhcmUgZXF1YWwiLAotIiAgPCAgbjEgbjIgLSBuMSBpcyBhcml0aG1ldGljYWxseSBs ZXNzIHRoYW4gbjIiLAotIiAgPD0gbjEgbjIgLSBuMSBpcyBhcml0aG1ldGljYWxseSBsZXNzIHRo YW4gb3IgZXF1YWwgdG8gbjIiLAotIiAgPiAgbjEgbjIgLSBuMSBpcyBhcml0aG1ldGljYWxseSBn cmVhdGVyIHRoYW4gbjIiLAotIiAgPj0gbjEgbjIgLSBuMSBpcyBhcml0aG1ldGljYWxseSBncmVh dGVyIHRoYW4gb3IgZXF1YWwgdG8gbjIiLAotIiAiLAotIiAgKG51bWJlciBieSBpdHNlbGYpIC0g ZmFpbHMgaWYgdGhlIG51bWJlciBpcyAwLCBzdWNjZWVkcyBvdGhlcndpc2UiLAotIiAiLAotIiAg VFJVRSAgICAgLSBhbHdheXMgc3VjY2VlZHMiLAotIiAgRkFMU0UgICAgLSBhbHdheXMgZmFpbHMi LAotIiAiLAotIlRoZSBJRiBjb21tYW5kIG1heSBiZSBmb2xsb3dlZCBvbiB0aGUgbmV4dCBsaW5l IGJ5IGFuIEVMU0UgY29tbWFuZC4gRXhhbXBsZToiLAotIiAiLAotIiAgSUYgPCBcXCV4IDEwIEVD SE8gSXQncyBsZXNzIiwKLSIgIEVMU0UgZWNobyBJdCdzIG5vdCBsZXNzIiwKLSIgIiwKLSJJdCBj YW4gYWxzbyBpbmNsdWRlIGFuIEVMU0UgcGFydCBvbiB0aGUgc2FtZSBsaW5lIGlmIGJyYWNlcyBh cmUgdXNlZDoiLAotIiAiLAotIiAgSUYgPCBcXCV4IDEwIHsgRUNITyBJdCdzIGxlc3MgfSBFTFNF IHsgRUNITyBJdCdzIG5vdCBsZXNzIH0iLAotIiAiLAotIkFsc28gc2VlIEhFTFAgV0lMRENBUkQg KGZvciBJRiBNQVRDSCBwYXR0ZXJuIHN5bnRheCkuIiwKLSIiIH07Ci0KLXN0YXRpYyBjaGFyICpo bXh4ZXZhbFtdID0geyAiU3ludGF4OiBFVkFMVUFURSB2YXJpYWJsZSBleHByZXNzaW9uIiwKLSIg IEV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBhbmQgYXNzaWducyBpdHMgdmFsdWUgdG8gdGhlIGdp dmVuIHZhcmlhYmxlLiIsCi0iICBUaGUgZXhwcmVzc2lvbiBjYW4gY29udGFpbiBudW1iZXJzIGFu ZC9vciBudW1lcmljLXZhbHVlZCB2YXJpYWJsZXMgb3IiLAotIiAgZnVuY3Rpb25zLCBjb21iaW5l ZCB3aXRoIG1hdGhlbWF0aWNhbCBvcGVyYXRvcnMgYW5kIHBhcmVudGhlc2VzIGluIiwKLSIgIHRy YWRpdGlvbmFsIG5vdGF0aW9uLiAgT3BlcmF0b3JzIGluY2x1ZGUgKy0vKigpLCBldGMuICBFeGFt cGxlOiIsCi0iICBFVkFMVUFURSBcXCVuICgxKzEpICogKFxcJWEgLyAzKS4iLAotIiAiLAotIiAg Tk9URTogUHJpb3IgdG8gQy1LZXJtaXQgNy4wLCB0aGUgc3ludGF4IHdhcyBcIkVWQUxVQVRFIGV4 cHJlc3Npb25cIiIsCi0iICAobm8gdmFyaWFibGUpLCBhbmQgdGhlIHJlc3VsdCB3YXMgcHJpbnRl ZC4gIFVzZSBTRVQgRVZBTCB7IE9MRCwgTkVXIH0iLAotIiAgdG8gY2hvb3NlIHRoZSBvbGQgb3Ig bmV3IGJlaGF2aW9yLCB3aGljaCBpcyBORVcgYnkgZGVmYXVsdC4iLAotIiAiLAotIkFsc2Ugc2Vl OiBIRUxQIEZVTkNUSU9OIEVWQUwuIiwKLSIiIH07Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotc3Rh dGljIGNoYXIgKmhteHhleGl0W10gPSB7Ci0iU3ludGF4OiBFWElUIChvciBRVUlUKSBbIG51bWJl ciBbIHRleHQgXSBdIiwKLSIgIEV4aXRzIGZyb20gdGhlIEtlcm1pdCBwcm9ncmFtLCBjbG9zaW5n IGFsbCBvcGVuIGZpbGVzIGFuZCBkZXZpY2VzLiIsCi0iICBJZiBhIG51bWJlciBpcyBnaXZlbiBp dCBiZWNvbWVzIEtlcm1pdCdzIGV4aXQgc3RhdHVzIGNvZGUuICBJZiB0ZXh0IGlzIiwKLSIgIGlu Y2x1ZGVkLCBpdCBpcyBwcmludGVkLiAgQWxzbyBzZWUgU0VUIEVYSVQuIiwKLSIiIH07Ci0KLSNp Zm5kZWYgTk9TUEwKLXN0YXRpYyBjaGFyICppZnhobHBbXSA9IHsgIlwKLVN5bnRheDogWElGIGNv bmRpdGlvbiB7IGNvbW1hbmRsaXN0IH0gWyBFTFNFIHsgY29tbWFuZGxpc3QgfSBdIiwKLSIgIE9i c29sZXRlLiAgU2FtZSBhcyBJRiAoc2VlIEhFTFAgSUYpLiIsCi0iIiB9OwotCi1zdGF0aWMgY2hh ciAqZm9yaGxwW10gPSB7ICJcCi1TeW50YXg6IEZPUiB2YXJpYWJsZW5hbWUgaW5pdGlhbC12YWx1 ZSBmaW5hbC12YWx1ZSBpbmNyZW1lbnQgeyBjb21tYW5kbGlzdCB9IiwKLSIgIEZPUiBsb29wLiAg RXhlY3V0ZSB0aGUgY29tbWEtc2VwYXJhdGVkIGNvbW1hbmRzIGluIHRoZSBjb21tYW5kbGlzdCB0 aGUiLAotIiAgbnVtYmVyIG9mIHRpbWVzIGdpdmVuIGJ5IHRoZSBpbml0aWFsIHZhbHVlLCBmaW5h bCB2YWx1ZSBhbmQgaW5jcmVtZW50LiIsCi0iICBFeGFtcGxlOiAgRk9SIFxcJWkgMTAgMSAtMSB7 IHBhdXNlIDEsIGVjaG8gXFwlaSB9IiwgIiIgfTsKLQotc3RhdGljIGNoYXIgKndoaWhscFtdID0g eyAiXAotU3ludGF4OiBXSElMRSBjb25kaXRpb24geyBjb21tYW5kbGlzdCB9IiwKLSIgIFdISUxF IGxvb3AuICBFeGVjdXRlIHRoZSBjb21tYS1zZXBhcmF0ZWQgY29tbWFuZHMgaW4gdGhlIGJyYWNr ZXRlZCIsCi0iICBjb21tYW5kbGlzdCB3aGlsZSB0aGUgY29uZGl0aW9uIGlzIHRydWUuICBDb25k aXRpb25zIGFyZSB0aGUgc2FtZSBhcyBmb3IiLAotIiAgSUYgY29tbWFuZHMuIiwKLSIiIH07Ci0K LXN0YXRpYyBjaGFyICpzd2lobHBbXSA9IHsKLSJTeW50YXg6IFNXSVRDSCA8dmFyaWFibGU+IHsg Y2FzZS1saXN0IH0iLAotIiAgU2VsZWN0cyBmcm9tIGEgZ3JvdXAgb2YgY29tbWFuZHMgYmFzZWQg b24gdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuIiwKLSIgIFRoZSBjYXNlLWxpc3QgaXMgYSBzZXJp ZXMgb2YgbGluZXMgbGlrZSB0aGVzZToiLAotIiAiLAotIiAgICA6eCwgY29tbWFuZCwgY29tbWFu ZCwgLi4uLCBicmVhayIsCi0iICIsCi0iICB3aGVyZSBcInhcIiBpcyBhIHBvc3NpYmxlIHZhbHVl IGZvciB0aGUgdmFyaWFibGUuICBBdCB0aGUgZW5kIG9mIHRoZSIsCi0iICBjYXNlLWxpc3QsIHlv dSBjYW4gcHV0IGEgXCJkZWZhdWx0XCIgbGFiZWwgdG8gY2F0Y2ggd2hlbiB0aGUgdmFyaWFibGUg ZG9lcyIsCi0iICBub3QgbWF0Y2ggYW55IG9mIHRoZSBsYWJlbHM6IiwKLSIgIiwKLSIgICAgOmRl ZmF1bHQsIGNvbW1hbmQsIGNvbW1hbmQsIC4uLiIsCi0iICIsCi0iVGhlIGNhc2UgbGFiZWwgXCJ4 XCIgY2FuIGJlIGEgY2hhcmFjdGVyLCBhIHN0cmluZywgYSB2YXJpYWJsZSwgYSBmdW5jdGlvbiIs Ci0iaW52b2NhdGlvbiwgYSBwYXR0ZXJuLCBvciBhbnkgY29tYmluYXRpb24gb2YgdGhlc2UuICBT ZWUgSEVMUCBXSUxEQ0FSRFMiLAotImZvciBpbmZvcm1hdGlvbiBhYm91dCBwYXR0ZXJucy4iLAot IiJ9OwotCi1zdGF0aWMgY2hhciAqb3BlbmhscFtdID0gewotIlN5bnRheDogIE9QRU4gbW9kZSBm aWxlbmFtZSIsCi0iICBGb3IgdXNlIHdpdGggUkVBRCBhbmQgV1JJVEUgY29tbWFuZHMuICBPcGVu IHRoZSBsb2NhbCBmaWxlIGluIHRoZSIsCi0iICBzcGVjaWZpZWQgbW9kZTogUkVBRCwgV1JJVEUs IG9yIEFQUEVORC4gICFSRUFEIGFuZCAhV1JJVEUgbWVhbiB0byByZWFkIiwKLSIgIGZyb20gb3Ig d3JpdGUgdG8gYSBzeXN0ZW0gY29tbWFuZCByYXRoZXIgdGhhbiBhIGZpbGUuICBFeGFtcGxlczoi LAotIiAiLAotIiAgICBPUEVOIFJFQUQgb29mYS50eHQiLAotIiAgICBPUEVOICFSRUFEIHNvcnQg Zm9vLmJhciIsCi0iIiB9OwotCi1zdGF0aWMgY2hhciAqaHh4YXNrW10gPSB7Ci0iU3ludGF4OiAg QVNLIFsgc3dpdGNoZXMgXSB2YXJpYWJsZW5hbWUgWyBwcm9tcHQgXSIsCi0iRXhhbXBsZTogQVNL IFxcJW4geyBXaGF0IGlzIHlvdXIgbmFtZVxcPyB9IiwKLSIgIElzc3VlcyB0aGUgcHJvbXB0IGFu ZCBkZWZpbmVzIHRoZSB2YXJpYWJsZSB0byBiZSB3aGF0ZXZlciBpcyB0eXBlZCBpbiIsCi0iICBy ZXNwb25zZSwgdXAgdG8gdGhlIHRlcm1pbmF0aW5nIGNhcnJpYWdlIHJldHVybi4gIFVzZSBicmFj ZXMgdG8gcHJlc2VydmUiLAotIiAgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgc3BhY2VzIGluIHRo ZSBwcm9tcHQuIiwKLSIgIiwKLSJTeW50YXg6ICBBU0tRIFsgc3dpdGNoZXMgXSB2YXJpYWJsZW5h bWUgWyBwcm9tcHQgXSIsCi0iRXhhbXBsZTogQVNLUSBcXCVwIHsgUGFzc3dvcmQ6fSIsCi0iICBM aWtlIEFTSyBleGNlcHQgdGhlIHJlc3BvbnNlIGRvZXMgbm90IGVjaG8gb24gdGhlIHNjcmVlbiBv ciwgaWYgc3BlY2lmaWVkIiwKLSIgIGl0IGVjaG9lcyBhcyBhc3Rlcmlza3Mgb3Igb3RoZXIgc3Bl Y2lmaWVkIGNoYXJhY3Rlci4iLAotIiAiLAotIlN3aXRjaGVzOiIsCi0iIC9ERUZBVUxUOnRleHQi LAotIiAgVGV4dCB0byBzdXBwbHkgaWYgdGhlIHVzZXIgZW50ZXJzIGEgYmxhbmsgcmVzcG9uc2Ug b3IgdGhlIC9USU1FT1VUIiwKLSIgIGxpbWl0IGV4cGlyZWQgd2l0aCBubyByZXNwb25zZS4iLAot IiAiLAotIiAvRUNITzpjaGFyIiwKLSIgIChBU0tRIG9ubHkpIENoYXJhY3RlciB0byBiZSBlY2hv ZWQgZWFjaCB0aW1lIHRoZSB1c2VyIHByZXNzZXMgYSBrZXkiLAotIiAgY29ycmVzcG9uZGluZyB0 byBhIHByaW50YWJsZSBjaGFyYWN0ZXIuICBUaGlzIGxldHMgdXNlcnMgc2VlIHdoYXQgdGhleSBh cmUiLAotIiAgZG9pbmcgd2hlbiB0aGV5IGFyZSB0eXBpbmcgKGUuZy4pIHBhc3N3b3JkcywgYW5k IG1ha2VzIGVkaXRpbmcgZWFzaWVyLiIsCi0iICIsCi0jaWZkZWYgT1MyCi0iIC9QT1BVUCIsCi0i ICBUaGUgcHJvbXB0IGFuZCByZXNwb25zZSBkaWFsb2cgdGFrZXMgcGxhY2UgaW4gYSB0ZXh0LW1v ZGUgcG9wdXAuIiwKLSIgIEs5NSBvbmx5OyBpbiBDLUtlcm1pdCB0aGlzIHN3aXRjaCBpcyBpZ25v cmVkLiIsCi0iICIsCi0jaWZkZWYgS1VJCi0iIC9HVUkiLAotIiAgVGhlIHByb21wdCBhbmQgcmVz cG9uc2UgZGlhbG9nIHRha2VzIHBsYWNlIGluIGEgR1VJIHBvcHVwLiIsCi0iICBLOTUgR1VJIHZl cnNpb24gb25seTsgaW4gQy1LZXJtaXQgYW5kIHRoZSBLOTUgY29uc29sZSB2ZXJzaW9uLCIsIAot IiAgdGhpcyBzd2l0Y2ggaXMgaWdub3JlZC4iLAotIiAiLAotI2VuZGlmIC8qIEtVSSAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotIiAvVElNRU9VVDpudW1iZXIiLAotIiAgSWYgdGhlIHJlc3BvbnNlIGlz IG5vdCBlbnRlcmVkIHdpdGhpbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMsIHRoZSIsCi0i ICBjb21tYW5kIGZhaWxzLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgQVNLLVRJTUVS IHRvIGEgcG9zaXRpdmUiLAotIiAgbnVtYmVyLCBleGNlcHQgaXQgYXBwbGllcyBvbmx5IHRvIHRo aXMgY29tbWFuZC4gIEFsc28gc2VlIFNFVCBBU0stVElNRVIuIiwKLSIgIE5PVEU6IElmIGEgL0RF RkFVTFQ6IHZhbHVlIHdhcyBhbHNvIGdpdmVuLCBpdCBpcyBzdXBwbGllZCBhdXRvbWF0aWNhbGx5 IiwKLSIgIHVwb24gdGltZW91dCBhbmQgdGhlIGNvbW1hbmQgZG9lcyBOT1QgZmFpbC4iLAotCi0i ICIsCi0iIC9RVUlFVCIsCi0iICBTdXBwcmVzc2VzIFwiP1RpbWVkIG91dFwiIG1lc3NhZ2Ugd2hl biAvVElNRU9VVCBpcyBnaXZlbiBhbmQgdXNlciBkb2Vzbid0IiwKLSIgIHJlc3BvbmQgd2l0aGlu IHRoZSB0aW1lIGxpbWl0LiIsCi0iIn07Ci1zdGF0aWMgY2hhciAqaHh4Z2V0Y1tdID0gewotIlN5 bnRheDogIEdFVEMgdmFyaWFibGVuYW1lIFsgcHJvbXB0IF0iLAotIkV4YW1wbGU6IEdFVEMgXFwl YyB7IFR5cGUgYW55IGNoYXJhY3RlciB0byBjb250aW51ZS4uLn0iLAotIiAgSXNzdWVzIHRoZSBw cm9tcHQgYW5kIHNldHMgdGhlIHZhcmlhYmxlIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgeW91IHR5 cGUuIiwKLSIgIFVzZSBicmFjZXMgdG8gcHJlc2VydmUgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcg c3BhY2VzIGluIHRoZSBwcm9tcHQuIiwKLSIgIiwKLSJBbHNvIHNlZSBTRVQgQVNLLVRJTUVSLiIs Ci0iIn07Ci0KLXN0YXRpYyBjaGFyICpobXh5dGltZXJbXSA9IHsKLSJTeW50YXg6IFNFVCBBU0st VElNRVIgbnVtYmVyIiwKLSIgIEZvciB1c2Ugd2l0aCBBU0ssIEFTS1EsIEdFVE9LLCBhbmQgR0VU Qy4gIElmIEFTSy1USU1FUiBpcyBzZXQgdG8gYSBudW1iZXIiLAotIiAgZ3JlYXRlciB0aGFuIDAs IHRoZXNlIGNvbW1hbmRzIHdpbGwgdGltZSBvdXQgYWZ0ZXIgdGhlIGdpdmVuIG51bWJlciBvZiIs Ci0iICBzZWNvbmRzIHdpdGggbm8gcmVzcG9uc2UuICBUaGlzIGNvbW1hbmQgaXMgXCJzdGlja3lc Iiwgc28gdG8gcmV2ZXJ0IHRvIiwKLSIgXAotdW50aW1lZCBBU0tzIGFmdGVyIGEgdGltZWQgb25l LCB1c2UgU0VUIEFTSy1USU1FUiAwLiAgQWxzbyBzZWUgSUYgQVNLVElNRU9VVC4iLAotIiJ9Owot Ci1zdGF0aWMgY2hhciAqaHh4ZG90W10gPSB7Ci0iU3ludGF4OiAuPHZhcmlhYmxlLW5hbWU+IDxh c3NpZ25tZW50LW9wZXJhdG9yPiA8dmFsdWU+IiwKLSIgIEFzc2lnbnMgdGhlIHZhbHVlIHRvIHRo ZSB2YXJpYWJsZSBpbiB0aGUgbWFubmVyIGluZGljYXRlZCBieSB0aGUiLAotIiAgYXNzaWdubWVu dCBvcGVyYXRvcjoiLAotIiAgPSAgIENvcGllcyB3aXRob3V0IGV2YWx1YXRpb24gKGxpa2UgREVG SU5FKS4iLAotIiAgOj0gIENvcGllcyB3aXRoIGV2YWx1YXRpb24gKGxpa2UgQVNTSUdOKS4iLAot IiAgOjo9IENvcGllcyB3aXRoIGFyaXRobWV0aWMgZXZhbHVhdGlvbiAobGlrZSBFVkFMVUFURSku IiwKLSIifTsKLQotc3RhdGljIGNoYXIgKmh4eGRlZltdID0gewotIlN5bnRheDogREVGSU5FIG5h bWUgWyBkZWZpbml0aW9uIF0iLAotIiAgRGVmaW5lcyBhIG1hY3JvIG9yIHZhcmlhYmxlLiAgSXRz IHZhbHVlIGlzIHRoZSBkZWZpbml0aW9uLCB0YWtlbiIsCi0iICBsaXRlcmFsbHkuICBObyBleHBh bnNpb24gb3IgZXZhbHVhdGlvbiBvZiB0aGUgZGVmaW5pdGlvbiBpcyBkb25lLiAgVGh1cyIsCi0i ICBpZiB0aGUgZGVmaW5pdGlvbiBpbmNsdWRlcyBhbnkgdmFyaWFibGUgb3IgZnVuY3Rpb24gcmVm ZXJlbmNlcywgdGhlaXIiLAotIiAgbmFtZXMgYXJlIGluY2x1ZGVkLCByYXRoZXIgdGhhbiB0aGVp ciB2YWx1ZXMgKGNvbXBhcmUgd2l0aCBBU1NJR04pLiAgSWYiLAotIiAgdGhlIGRlZmluaXRpb24g aXMgb21pdHRlZCwgdGhlbiB0aGUgbmFtZWQgdmFyaWFibGUgb3IgbWFjcm8gaXMgdW5kZWZpbmVk LiIsCi0iICIsCi0iQSB0eXBpY2FsIG1hY3JvIGRlZmluaXRpb24gbG9va3MgbGlrZSB0aGlzOiIs Ci0iICIsCi0iICBERUZJTkUgbmFtZSBjb21tYW5kLCBjb21tYW5kLCBjb21tYW5kLCAuLi4iLAot IiAiLAotImZvciBleGFtcGxlOiIsCi0iICIsCi0iICBERUZJTkUgdmF4IHNldCBwYXJpdHkgZXZl biwgc2V0IGR1cGxleCBmdWxsLCBzZXQgZmxvdyB4b24veG9mZiIsCi0iICIsCi0id2hpY2ggZGVm aW5lcyBhIEtlcm1pdCBjb21tYW5kIG1hY3JvIGNhbGxlZCAndmF4Jy4gIFRoZSBkZWZpbml0aW9u IGlzIGEiLAotImNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIEtlcm1pdCBjb21tYW5kcy4gIFVzZSB0 aGUgRE8gY29tbWFuZCB0byBleGVjdXRlIiwKLSJ0aGUgbWFjcm8sIG9yIGp1c3QgdHlwZSBpdHMg bmFtZSwgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBhcmd1bWVudHMuIiwKLSIgIiwKLSJUaGUgZGVm aW5pdGlvbiBvZiBhIHZhcmlhYmxlIGNhbiBiZSBhbnl0aGluZyBhdCBhbGwsIGZvciBleGFtcGxl OiIsCi0iICIsCi0iICBERUZJTkUgXFwlYSBNb25kYXkiLAotIiAgREVGSU5FIFxcJWIgMyIsCi0i ICIsCi0iVGhlc2UgdmFyaWFibGVzIGNhbiBiZSB1c2VkIGFsbW9zdCBhbnl3aGVyZSwgZm9yIGV4 YW1wbGU6IiwKLSIgIiwKLSIgIEVDSE8gVG9kYXkgaXMgXFwlYSIsCi0iICBTRVQgQkxPQ0stQ0hF Q0sgXFwlYiIsCi0iIiB9OwotCi1zdGF0aWMgY2hhciAqaHh4YXNzW10gPSB7Ci0iU3ludGF4OiAg QVNTSUdOIHZhcmlhYmxlbmFtZSBzdHJpbmcuIiwKLSJFeGFtcGxlOiBBU1NJR04gXFwlYSBNeSBu YW1lIGlzIFxcJWIuIiwKLSIgIEFzc2lnbnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHN0cmlu ZyB0byB0aGUgdmFyaWFibGUgKG9yIG1hY3JvKS4iLAotIiAgVGhlIGRlZmluaXRpb24gc3RyaW5n IGlzIGZ1bGx5IGV2YWx1YXRlZCBiZWZvcmUgaXQgaXMgYXNzaWduZWQsIHNvIHRoYXQiLAotIiAg dGhlIHZhbHVlcyBvZiBhbnkgdmFyaWFibGVzIHRoYXQgYXJlIGNvbnRhaW5lZCBhcmUgdXNlZCwg cmF0aGVyIHRoYW4gdGhlaXIiLAotIiAgbmFtZXMuICBDb21wYXJlIHdpdGggREVGSU5FLiAgVG8g aWxsdXN0cmF0ZSB0aGUgZGlmZmVyZW5jZSwgdHJ5IHRoaXM6IiwKLSIgIiwKLSIgICAgREVGSU5F IFxcJWEgaGVsbG8iLAotIiAgICBERUZJTkUgXFwleCBcXCVhIiwKLSIgICAgQVNTSUdOIFxcJXkg XFwlYSIsCi0iICAgIERFRklORSBcXCVhIGdvb2RieWUiLAotIiAgICBFQ0hPIFxcJXggXFwleSIs Ci0iICIsCi0iICBUaGlzIHByaW50cyAnZ29vZGJ5ZSBoZWxsbycuIiwgIiIgfTsKLQotc3RhdGlj IGNoYXIgKmh4eGRlY1tdID0gewotIlN5bnRheDogREVDUkVNRU5UIHZhcmlhYmxlbmFtZSBbIG51 bWJlciBdIiwKLSIgIERlY3JlbWVudCAoc3VidHJhY3Qgb25lIGZyb20pIHRoZSB2YWx1ZSBvZiBh IHZhcmlhYmxlIGlmIHRoZSBjdXJyZW50IHZhbHVlIiwKLSIgIGlzIG51bWVyaWMuICBJZiB0aGUg bnVtYmVyIGFyZ3VtZW50IGlzIGdpdmVuLCBzdWJ0cmFjdCB0aGF0IG51bWJlciIsCi0iICBpbnN0 ZWFkLiIsCi0iICIsCi0iRXhhbXBsZXM6IERFQ1IgXFwlYSwgREVDUiBcXCVhIDcsIERFQ1IgXFwl YSBcXCVuIiwgIiIgfTsKLQotc3RhdGljIGNoYXIgKmh4eGluY1tdID0gewotIlN5bnRheDogSU5D UkVNRU5UIHZhcmlhYmxlbmFtZSBbIG51bWJlciBdIiwKLSIgIEluY3JlbWVudCAoYWRkIG9uZSB0 bykgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUgaWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMiLAotIiAg bnVtZXJpYy4gIElmIHRoZSBudW1iZXIgYXJndW1lbnQgaXMgZ2l2ZW4sIGFkZCB0aGF0IG51bWJl ciBpbnN0ZWFkLiIsCi0iICIsCi0iRXhhbXBsZXM6IElOQ1IgXFwlYSwgSU5DUiBcXCVhIDcsIElO Q1IgXFwlYSBcXCVuIiwgIiIgfTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgQU5ZWDI1 Ci0jaWZuZGVmIElCTVgyNQotc3RhdGljIGNoYXIgKmh4eHBhZFtdID0gewotIlN5bnRheDogUEFE IGNvbW1hbmQiLAotIlguMjUgUEFEIGNvbW1hbmRzOiIsCi0iICIsCi0iICAgIFBBRCBDTEVBUiAg ICAgLSBDbGVhciB0aGUgdmlydHVhbCBjYWxsIiwKLSIgICAgUEFEIFNUQVRVUyAgICAtIFJldHVy biB0aGUgc3RhdHVzIG9mIHZpcnR1YWwgY2FsbCIsCi0iICAgIFBBRCBSRVNFVCAgICAgLSBTZW5k IGEgcmVzZXQgcGFja2V0IiwKLSIgICAgUEFEIElOVEVSUlVQVCAtIFNlbmQgYW4gaW50ZXJydXB0 IHBhY2tldCIsCi0iIn07Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0KLXN0YXRpYyBjaGFyICpoeHl4 MjVbXSA9IHsKLSJTeW50YXg6IFNFVCBYLjI1IG9wdGlvbiB7IE9OIFsgZGF0YSBdLCBPRkYgfSIs Ci0iICIsCi0iWC4yNSBjYWxsIG9wdGlvbnM6IiwKLSIgIENMT1NFRC1VU0VSLUdST1VQIHsgT04g aW5kZXgsIE9GRiB9IiwKLSIgICAgRW5hYmxlIG9yIGRpc2FibGUgY2xvc2VkIHVzZXIgZ3JvdXAg Y2FsbCwgd2hlcmUgaW5kZXggaXMgdGhlIGdyb3VwIiwKLSIgICAgaW5kZXgsIDAgdG8gOTkuIiwK LSIgIFJFVkVSU0UtQ0hBUkdFIHsgT04sIE9GRiB9IiwKLSIgICAgVGVsbCB3aGV0aGVyIHlvdSB3 YW50IHRvIHJldmVyc2UgdGhlIGNoYXJnZXMgZm9yIHRoZSBjYWxsLiIsCi0iICBDQUxMLVVTRVIt REFUQSB7IE9OIHN0cmluZywgT0ZGIH0iLAotIiAgICBTcGVjaWZ5IGNhbGwgdXNlci1kYXRhIGZv ciB0aGUgWC4yNSBjYWxsLiIsCi0iIn07Ci0jZW5kaWYgLyogQU5ZWDI1ICovCi0KLXN0YXRpYyBj aGFyICpoeHlwcnRyW10gPSB7Ci0jaWZkZWYgUFJJTlRTV0kKLSJTeW50YXg6IFNFVCBQUklOVEVS IFsgc3dpdGNoZXMgXSBbIG5hbWUgXSIsCi0iICIsCi0iICBTcGVjaWZpZXMgdGhlIHByaW50ZXIg dG8gYmUgdXNlZCBmb3IgdHJhbnNwYXJlbnQtcHJpbnQsIGF1dG9wcmludCwgYW5kIiwKLSIgIHNj cmVlbi1kdW1wIG1hdGVyaWFsIGR1cmluZyB0ZXJtaW5hbCBlbXVsYXRpb24sIGFzIHdlbGwgYXMg Zm9yIHRoZSBQUklOVCIsCi0iICBjb21tYW5kLCBwbHVzIHZhcmlvdXMgb3B0aW9ucyBnb3Zlcm5p bmcgcHJpbnQgYmVoYXZpb3IuIiwKLSIgIiwKLSJTd2l0Y2hlcyBmb3Igc3BlY2lmeWluZyB0aGUg cHJpbnRlciBieSB0eXBlOiIsCi0iICIsCi0iL05PTkUiLAotIiAgSW5jbHVkZSB0aGlzIHN3aXRj aCB0byBzcGVjaWZ5IHRoYXQgYWxsIHByaW50ZXIgYWN0aW9ucyBzaG91bGQgc2ltcGx5IGJlIiwK LSIgIHNraXBwZWQuICBVc2UgdGhpcywgZm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIG5vIHByaW50 ZXIuIiwKLSIgIiwKLSIvRE9TLURFVklDRVs6bmFtZV0iLAotIiAgSW5jbHVkZSB0aGlzIHRvIGRl Y2xhcmUgYSBET1MgcHJpbnRlciBhbmQgdG8gc3BlY2lmeSBpdHMgbmFtZSwgc3VjaCBhcyIsCi0i ICBQUk4sIExQVDEsIGV0Yy4iLAotIiAiLAotI2lmZGVmIE5UCi0iL1dJTkRPV1MtUVVFVUVbOltx dWV1ZS1uYW1lXV0iLAotIiAgSW5jbHVkZSB0aGlzIHRvIGRlY2xhcmUgYSBXaW5kb3dzIHByaW50 ZXIgYW5kIHNwZWNpZnkgaXRzIHF1ZXVlIG5hbWUuIiwKLSIgIFR5cGUgcXVlc3Rpb24gbWFyayAo PykgYWZ0ZXIgdGhlIGNvbG9uICg6KSB0byBzZWUgYSBsaXN0IG9mIGtub3duIHF1ZXVlIiwKLSIg IG5hbWVzLiAgSWYgdGhlIGNvbG9uIGlzIGFic2VudCwgdGhlIHN3aXRjaCBpbmRpY2F0ZXMgdGhl IGN1cnJlbnRseSIsCi0iICBzZWxlY3RlZCBwcmludGVyIGlzIGEgV2luZG93cyBQcmludCBRdWV1 ZS4gIElmIHRoZSBjb2xvbiBpcyBwcm92aWRlZCIsCi0iICBhbmQgdGhlIG5hbWUgaXMgYWJzZW50 LCB0aGUgV2luZG93cyBQcmludCBRdWV1ZSBjaG9zZW4gYXMgdGhlIERlZmF1bHQiLAotIiAgUHJp bnRlciBpcyBzZWxlY3RlZC4iLAotIiAiLAotI2VuZGlmIC8qIE5UICovCi0iL0ZJTEVbOm5hbWVd IiwKLSIgIFNwZWNpZmllcyB0aGF0IGFsbCBwcmludGVyIG1hdGVyaWFsIGlzIHRvIGJlIGFwcGVu ZGVkIHRvIHRoZSBuYW1lZCBmaWxlLCIsCi0iICByYXRoZXIgdGhhbiBiZWluZyBzZW50IHRvIGEg cHJpbnRlci4gIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBpdCBpcyIsCi0iICBjcmVhdGVk IHRoZSBmaXJzdCB0aW1lIGFueSBtYXRlcmlhbCBpcyB0byBiZSBwcmludGVkLiIsCi0iICIsCi0i L1BJUEVbOm5hbWVdIiwKLSIgIFNwZWNpZmllcyB0aGF0IGFsbCBwcmludGVyIG1hdGVyaWFsIGlz IHRvIGJlIHNlbnQgYXMgc3RhbmRhcmQgaW5wdXQgdG8iLAotIiAgdGhlIHByb2dyYW0gb3IgY29t bWFuZCB3aG9zZSBuYW1lIGlzIGdpdmVuLiAgRXhhbXBsZToiLAotIiAiLAotIiAgICBTRVQgUFJJ TlRFUiAvUElQRTp7dGV4dHBzID4gbHB0MX0iLAotIiAiLAotIklmIHlvdSBnaXZlIGEgcHJpbnRl ciBuYW1lIHdpdGhvdXQgc3BlY2lmeWluZyBhbnkgb2YgdGhlc2Ugc3dpdGNoZXMsIHRoZW4gaXQi LAotImlzIGFzc3VtZWQgdG8gYmUgYSBET1MgcHJpbnRlciBkZXZpY2Ugb3IgZmlsZW5hbWUgdW5s ZXNzIHRoZSBuYW1lIGdpdmVuIiwKLSIoYWZ0ZXIgcmVtb3ZpbmcgZW5jbG9zaW5nIGJyYWNlcywg aWYgYW55KSBzdGFydHMgd2l0aCBcInxcIiwgXAotaW4gd2hpY2ggY2FzZSBpdCIsCi0iaXMgYSBw aXBlLiAgRXhhbXBsZXM6IiwKLSIgIiwKLSIgIFNFVCBQUklOVEVSIExQVDEgICAgICAgICAgICAg ICA8LS0gRE9TIGRldmljZSIsCi0iICBTRVQgUFJJTlRFUiB7fCB0ZXh0cHMgPiBscHQxfSAgPC0t IFBpcGUiLAotIiAiLAotIlRoZSBuZXh0IGdyb3VwIG9mIHN3aXRjaGVzIHRlbGxzIHdoZXRoZXIg dGhlIHByaW50ZXIgaXMgb25lLXdheSBvciIsCi0iYmlkaXJlY3Rpb25hbCAodHdvLXdheSk6IiwK LSIgIiwKLSIvT1VUUFVULU9OTFkiLAotIiAgSW5jbHVkZSB0aGlzIHRvIGRlY2xhcmUgdGhlIHBy aW50ZXIgY2FwYWJsZSBvbmx5IG9mIHJlY2VpdmluZyBtYXRlcmlhbCB0byIsCi0iICBiZSBwcmlu dGVkLCBidXQgbm90IHNlbmRpbmcgYW55dGhpbmcgYmFjay4gIFRoaXMgaXMgdGhlIG5vcm1hbCBr aW5kIG9mIiwKLSIgIHByaW50ZXIsIEtlcm1pdCdzIGRlZmF1bHQga2luZCwgYW5kIHRoZSBvcHBv c2l0ZSBvZiAvQklESVJFQ1RJT05BTC4iLAotIiAiLAotIi9CSURJUkVDVElPTkFMIiwKLSIgIElu Y2x1ZGUgdGhpcyB0byBkZWNsYXJlIHRoZSBwcmludGVyIGJpZGlyZWN0aW9uYWwuICBUaGlzIGlz IHRoZSBvcHBvc2l0ZSAiLAotIiAgb2YgL09VVFBVVC1PTkxZLiAgWW91IGNhbiBhbHNvIHVzZSB0 aGlzIG9wdGlvbiB3aXRoIHNlcmlhbCBwcmludGVycywgZXZlbiIsCi0iICBpZiB0aGV5IGFyZW4n dCBiaWRpcmVjdGlvbmFsLCBpbiBjYXNlIHlvdSBuZWVkIHRvIHNwZWNpZnkgc3BlZWQsIGZsb3ci LAotIiAgY29udHJvbCwgb3IgcGFyaXR5LiIsCi0iICIsCi0iVGhlIG5leHQgZ3JvdXAgYXBwbGll cyBvbmx5IHRvIGJpZGlyZWN0aW9uYWwgYW5kL29yIHNlcmlhbCBwcmludGVyczoiLAotIiAiLAot Ii9GTE9XLUNPTlRST0w6e05PTkUsWE9OL1hPRkYsUlRTL0NUUyxLRUVQfSIsCi0iICBGbG93IGNv bnRyb2wgdG8gdXNlIHdpdGggYSBzZXJpYWwgYmlkaXJlY3Rpb25hbCBwcmludGVyLCBkZWZhdWx0 IEtFRVA7IiwKLSNpZmRlZiBOVAotIiAgaS5lLiB1c2Ugd2hhdGV2ZXIgdGhlIFdpbmRvd3MgZHJp dmVyIGZvciB0aGUgcG9ydCBub3JtYWxseSB1c2VzLiIsCi0jZWxzZQotIiAgaS5lLiB1c2Ugd2hh dGV2ZXIgdGhlIE9TLzIgZHJpdmVyIGZvciB0aGUgcG9ydCBub3JtYWxseSB1c2VzLiIsCi0jZW5k aWYgLyogTlQgKi8KLSIgIiwKLSIvUEFSSVRZOntOT05FLEVWRU4sT0RELFNQQUNFLE1BUkt9IiwK LSIgIFBhcml0eSB0byB1c2Ugd2l0aCBhIHNlcmlhbCBwcmludGVyLCBkZWZhdWx0IE5PTkU7IGku ZS4gdXNlIDggZGF0YSBiaXRzIiwKLSIgIGFuZCBubyBwYXJpdHkuICBJZiB5b3Ugb21pdCB0aGUg Y29sb24gYW5kIHRoZSBrZXl3b3JkLCBOT05FIGlzIHNlbGVjdGVkLiIsCi0iICIsCi0iL1NQRUVE Om51bWJlciIsCi0iICBJbnRlcmZhY2Ugc3BlZWQsIGluIGJpdHMgcGVyIHNlY29uZCwgdG8gdXNl IHdpdGggYSBzZXJpYWwgcHJpbnRlciwgc3VjaCBhcyIsCi0iICAyNDAwLCA5NjAwLCAxOTIwMCwg ZXRjLiAgVHlwZSBTRVQgUFJJTlRFUiAvU1BFRUQ6PyBmb3IgYSBsaXN0IG9mIHBvc3NpYmxlIiwK LSIgIHNwZWVkcy4iLAotIiAiLAotIlRoZSBuZXh0IGdyb3VwIGRlYWxzIHdpdGggcHJpbnQgam9i cyAtLSBob3cgdG8gaWRlbnRpZnkgdGhlbSwgaG93IHRvIHN0YXJ0IiwKLSJ0aGVtLCBob3cgdG8g dGVybWluYXRlIHRoZW06IiwKLSIgIiwKLSIvVElNRU9VVFs6bnVtYmVyXSIsCi0iICBVc2VkIHdp dGggaG9zdC1kaXJlY3RlZCB0cmFuc3BhcmVudCBvciBhdXRvIHByaW50aW5nLCB0aGlzIGlzIHRo ZSBudW1iZXIiLAotIiAgb2Ygc2Vjb25kcyB0byB3YWl0IGFmdGVyIHRoZSBob3N0IGNsb3NlcyB0 aGUgcHJpbnRlciBiZWZvcmUgdGVybWluYXRpbmciLAotIiAgdGhlIHByaW50IGpvYiBpZiB0aGUg cHJpbnRlciBpcyBub3Qgb3BlbmVkIGFnYWluIGR1cmluZyB0aGUgc3BlY2lmaWVkIiwKLSIgIGFt b3VudCBvZiB0aW1lLiIsCi0iICIsCi0iL0pPQi1IRUFERVItRklMRVs6ZmlsZW5hbWVdIiwKLSIg IFRoZSBuYW1lIG9mIGEgZmlsZSB0byBiZSBzZW50IHRvIHRoZSBwcmludGVyIGF0IHRoZSBiZWdp bm5pbmcgb2YgZWFjaCIsCi0iICBwcmludCBqb2IsIGFzIGEgYnVyc3QgcGFnZSwgb3IgdG8gY29u ZmlndXJlIHRoZSBwcmludGVyLiAgTm9ybWFsbHkgbm8gZmlsZSIsCi0iICBpcyBpcyBzZW50LiIs Ci0iICIsCi0iL0VORC1PRi1KT0ItU1RSSU5HWzpzdHJpbmddIiwKLSIgIFN0cmluZyBvZiBjaGFy YWN0ZXJzIHRvIGJlIHNlbnQgdG8gdGhlIHByaW50ZXIgYXQgdGhlIGVuZCBvZiB0aGUgcHJpbnQi LAotIiAgam9iLCB1c3VhbGx5IHVzZWQgdG8gZm9yY2UgdGhlIGxhc3Qgb3Igb25seSBwYWdlIG91 dCBvZiB0aGUgcHJpbnRlci4gIFdoZW4iLAotIiAgc3VjaCBhIHN0cmluZyBpcyBuZWVkZWQsIGl0 IHVzdWFsbHkgY29uc2lzdHMgb2YgYSBzaW5nbGUgZm9ybWZlZWQ6IFwic2V0IiwKLSIgIHByaW50 ZXIgL2VuZC1vZi1qb2I6e1xcMTJ9XCIuICBObyBlbmQtb2Ytam9iIHN0cmluZyBpcyBzZW50IHVu bGVzcyB5b3UiLAotIiAgc3BlY2lmeSBvbmUgd2l0aCB0aGlzIG9wdGlvbi4gIElmIHRoZSBzdHJp bmcgY29udGFpbnMgYW55IHNwYWNlcyBvciIsCi0iICBjb250cm9sIGNoYXJhY3RlcnMgKGV2ZW4g aW4gYmFja3NsYXNoIG5vdGF0aW9uLCBhcyBhYm92ZSksIGVuY2xvc2UgaXQgaW4iLAotIiAgYnJh Y2VzLiIsCi0iICIsCi0iVGhlIG5leHQgZ3JvdXAgaXMgZm9yIHVzZSB3aXRoIHByaW50ZXJzIHRo YXQgcHJpbnQgb25seSBQb3N0U2NyaXB0OiIsCi0iICIsCi0iL1BPU1RTQ1JJUFQgb3IgL1BTIiwK LSIgIEluZGljYXRlcyB0aGF0IEs5NSBzaG91bGQgY29udmVydCBhbGwgdGV4dCB0byBQb3N0U2Ny aXB0IGJlZm9yZSBzZW5kaW5nIiwKLSIgIGl0IHRvIHRoZSBwcmludGVyLiAgVGhlIGZpeGVkLXBp dGNoIENvdXJpZXItMTEgZm9udCBpcyB1c2VkLiIsCi0iICIsCi0iL1dJRFRIOm51bWJlciIsCi0i ICBTcGVjaWZpZXMgdGhlIHdpZHRoIG9mIHRoZSBwYWdlIGluIGNoYXJhY3RlcnMuICBJZiB0aGlz IHN3aXRjaCBpcyBub3QiLAotIiAgZ2l2ZW4sIDgwIGlzIHVzZWQuIiwKLSIgIiwKLSIvSEVJR0hU Om51bWJlciIsCi0iICBTcGVjaWZpZXMgdGhlIGhlaWdodCBvZiB0aGUgcGFnZSBpbiBsaW5lcy4g IElmIHRoaXMgc3dpdGNoIGlzIG5vdCBnaXZlbiIsCi0iICA2NiBpcyB1c2VkLiIsCi0iICIsCi0i L05PUE9TVFNDUklQVCBvciAvTk9QUyIsCi0iICBJbmRpY2F0ZXMgdGhhdCBLOTUgc2hvdWxkIG5v dCBjb252ZXJ0IGFsbCB0ZXh0IHRvIFBvc3RTY3JpcHQgYmVmb3JlIiwKLSIgIHNlbmRpbmcgaXQg dG8gdGhlIHByaW50ZXIuIiwKLSIgIiwKLSJUaGUgZmluYWwgc3dpdGNoIGlzIGZvciB1c2Ugd2l0 aCBBdXRvUHJpbnQgbW9kZSBhbmQgU2NyZWVuIER1bXBzIiwKLSIgIiwKLSIvQ0hBUkFDVEVSLVNF VDo8Y2hhcmFjdGVyLXNldD4iLAotIiAgU3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXIgc2V0IHVzZWQg YnkgdGhlIHByaW50ZXIgd2hpY2ggbWF5IGJlIGRpZmZlcmVudCIsCi0iICBmcm9tIGJvdGggdGhl IGNoYXJhY3RlciBzZXQgdXNlZCBieSB0aGUgaG9zdCBhbmQgYnkgdGhlIGxvY2FsIGNvbXB1dGVy LiIsCi0iICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBDUDQzNy4iLAotIiAiLAotIlNIT1cgUFJJTlRF UiBkaXNwbGF5cyB5b3VyIGN1cnJlbnQgcHJpbnRlciBzZXR0aW5ncy4iLAotI2Vsc2UKLSNpZmRl ZiBVTklYCi0iU3ludGF4OiBTRVQgUFJJTlRFUiBbIHsgfGNvbW1hbmQsIGZpbGVuYW1lIH0gXSIs Ci0iICBTcGVjaWZpZXMgdGhlIGNvbW1hbmQgKHN1Y2ggYXMgXCJ8bHByXCIpIG9yIGZpbGVuYW1l IHRvIGJlIHVzZWQgYnkgdGhlIiwKLSIgIFBSSU5UIGNvbW1hbmQuICBJZiBhIGZpbGVuYW1lIGlz IGdpdmVuLCBlYWNoIFBSSU5UIGNvbW1hbmQgYXBwZW5kcyB0byB0aGUiLAotIiAgZ2l2ZW4gZmls ZS4gIElmIHRoZSBTRVQgUFJJTlRFUiBhcmd1bWVudCBjb250YWlucyBzcGFjZXMsIGl0IG11c3Qg YmUiLAotIiAgZW5jbG9zZWQgaW4gYnJhY2VzLCBlLmcuIFwic2V0IHByaW50ZXIge3wgbHByIC1Q bGFzZXJ9XCIuIElmIHRoZSBhcmd1bWVudCIsCi0iICBpcyBvbWl0dGVkIHRoZSBkZWZhdWx0IHZh bHVlIGlzIHJlc3RvcmVkLiAgU0hPVyBQUklOVEVSIGxpc3RzIHRoZSBjdXJyZW50IiwKLSIgIHBy aW50ZXIuICBTZWUgSEVMUCBQUklOVCBmb3IgZnVydGhlciBpbmZvLiIsCi0jZWxzZQotIlNvcnJ5 LCBTRVQgUFJJTlRFUiBub3QgYXZhaWxhYmxlIHlldC4iLAotI2VuZGlmIC8qIFVOSVggKi8KLSNl bmRpZiAvKiBQUklOVFNXSSAqLwotIiJ9OwotCi0jaWZkZWYgT1MyCi0jaWZkZWYgQlBSSU5UCi1z dGF0aWMgY2hhciAqaHh5YnBydHJbXSA9IHsKLSJTeW50YXg6IFNFVCBCUFJJTlRFUiBbIHBvcnRu YW1lIHNwZWVkIFsgcGFyaXR5IFsgZmxvdy1jb250cm9sIF0gXSBdIiwKLSIgIChPYnNvbGV0ZSwg cmVwbGFjZWQgYnkgU0VUIFBSSU5URVIgL0JJRElSRUNUSU9OQUwuKSIsCi0iIn07Ci0jZW5kaWYg LyogQlBSSU5UICovCi0jZW5kaWYgLyogT1MyICovCi0KLXN0YXRpYyBjaGFyICpoeHlleGl0W10g PSB7Ci0iU3ludGF4OiBTRVQgRVhJVCBIQU5HVVAgeyBPTiwgT0ZGIH0iLAotIiAgV2hlbiBPTiAo d2hpY2ggaXMgdGhlIGRlZmF1bHQpLCBDLUtlcm1pdCBleGVjdXRlcyBhbiBpbXBsaWNpdCBIQU5H VVAgYW5kIiwKLSIgIENMT1NFIGNvbW1hbmQgb24gdGhlIGNvbW11bmljYXRpb25zIGRldmljZSBv ciBjb25uZWN0aW9uIHdoZW4gaXQgZXhpdHMuIiwKLSIgIFdoZW4gT0ZGLCBLZXJtaXQgc2tpcHMg dGhpcyBzZXF1ZW5jZS4iLAotIiAiLAotIlN5bnRheDogU0VUIEVYSVQgT04tRElTQ09OTkVDVCB7 IE9OLCBPRkYgfSIsCi0iICBXaGVuIE9OLCBDLUtlcm1pdCBFWElUcyBhdXRvbWF0aWNhbGx5IHdo ZW4gYSBuZXR3b3JrIGNvbm5lY3Rpb24iLAotIiAgaXMgdGVybWluYXRlZCBlaXRoZXIgYnkgdGhl IGhvc3Qgb3IgYnkgaXNzdWluZyBhIEhBTkdVUCBjb21tYW5kLiIsCi0iICIsCi0iU3ludGF4OiBT RVQgRVhJVCBTVEFUVVMgbnVtYmVyIiwKLSNpZmRlZiBOT1NQTAotIiAgU2V0IEMtS2VybWl0J3Mg cHJvZ3JhbSByZXR1cm4gY29kZSB0byB0aGUgZ2l2ZW4gbnVtYmVyLiIsCi0jZWxzZQotIiAgU2V0 IEMtS2VybWl0J3MgcHJvZ3JhbSByZXR1cm4gY29kZSB0byB0aGUgZ2l2ZW4gbnVtYmVyLCB3aGlj aCBjYW4gYmUgYSIsCi0iICBjb25zdGFudCwgdmFyaWFibGUsIGZ1bmN0aW9uIHJlc3VsdCwgb3Ig YXJpdGhtZXRpYyBleHByZXNzaW9uLiIsCi0jZW5kaWYgLyogTk9TUEwgKi8KLSIgIiwKLSJTeW50 YXg6IFNFVCBFWElUIFdBUk5JTkcgeyBPTiwgT0ZGLCBBTFdBWVMgfSIsCi0iICBXaGVuIEVYSVQg V0FSTklORyBpcyBPTiwgaXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2UgYW5kIGFzayBmb3IgY29uZmly bWF0aW9uIiwKLSIgIGJlZm9yZSBFWElUaW5nIGlmIGEgY29ubmVjdGlvbiB0byBhbm90aGVyIGNv bXB1dGVyIG1pZ2h0IHN0aWxsIGJlIG9wZW4uIiwKLSIgIFdoZW4gRVhJVCBXQVJOSU5HIGlzIEFM V0FZUywgY29uZmlybWF0aW9uIGlzIGFsd2F5cyByZXF1ZXN0ZWQuICBXaGVuIE9GRiIsCi0iICBp dCBpcyBuZXZlciByZXF1ZXN0ZWQuICBUaGUgZGVmYXVsdCBpcyBPTi4iLAotIiIgfTsKLQotI2lm bmRlZiBOT1NQTAotc3RhdGljIGNoYXIgKmh4eHBhdVtdID0gewotIlN5bnRheDogIFBBVVNFIFsg eyBudW1iZXItb2Ytc2Vjb25kcywgaGg6bW06c3MgfSBdIiwKLSJFeGFtcGxlOiBQQVVTRSAzICBv ciAgUEFVU0UgMTQ6NTI6MzAiLAotIiAgRG8gbm90aGluZyBmb3IgdGhlIHNwZWNpZmllZCBudW1i ZXIgb2Ygc2Vjb25kcyBvciB1bnRpbCB0aGUgZ2l2ZW4gdGltZSBvZiIsCi0iICBkYXkgaW4gMjQt aG91ciBoaDptbTpzcyBub3RhdGlvbi4gIElmIHRoZSB0aW1lIG9mIGRheSBpcyBlYXJsaWVyIHRo YW4gdGhlIiwKLSIgIGN1cnJlbnQgdGltZSwgaXQgaXMgYXNzdW1lZCB0byBiZSB0b21vcnJvdy4g IElmIG5vIGFyZ3VtZW50IGdpdmVuLCBvbmUiLAotIiAgc2Vjb25kIGlzIHVzZWQuICBUaGUgcGF1 c2UgY2FuIGJlIGludGVycnVwdGVkIGJ5IHR5cGluZyBhbnkgY2hhcmFjdGVyIG9uIiwKLSIgIHRo ZSBrZXlib2FyZCB1bmxlc3MgU0xFRVAgQ0FOQ0VMTEFUSU9OIGlzIE9GRi4gIElmIGludGVycnVw dGVkLCBQQVVTRSIsCi0iICBmYWlscywgb3RoZXJ3aXNlIGl0IHN1Y2NlZWRzLiAgU3lub255bTog U0xFRVAuIiwKLSIiIH07Ci0KLXN0YXRpYyBjaGFyICpoeHhtc2xbXSA9IHsKLSJTeW50YXg6ICBN U0xFRVAgWyBudW1iZXIgXSIsCi0iRXhhbXBsZTogTVNMRUVQIDUwMCIsCi0iICBEbyBub3RoaW5n IGZvciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHM7IGlmIG5vIG51bWJlciBn aXZlbiwiLAotIiAgMTAwIG1pbGxpc2Vjb25kcy4iLCIiIH07Ci0jZW5kaWYgLyogTk9TUEwgKi8K LQotI2lmbmRlZiBOT1BVU0gKLWV4dGVybiBpbnQgbm9wdXNoOwotc3RhdGljIGNoYXIgKmh4eHNo ZVtdID0gewotIlN5bnRheDogISwgQCwgUlVOLCBQVVNILCBvciBTUEFXTiwgb3B0aW9uYWxseSBm b2xsb3dlZCBieSBhIGNvbW1hbmQuIiwKLSIgIEdpdmVzIHRoZSBjb21tYW5kIHRvIHRoZSBsb2Nh bCBvcGVyYXRpbmcgc3lzdGVtJ3MgY29tbWFuZCBwcm9jZXNzb3IsIGFuZCIsCi0iICBkaXNwbGF5 cyB0aGUgcmVzdWx0cyBvbiB0aGUgc2NyZWVuLiAgSWYgdGhlIGNvbW1hbmQgaXMgb21pdHRlZCwg ZW50ZXJzIHRoZSIsCi0iICBzeXN0ZW0ncyBjb21tYW5kIGxpbmUgaW50ZXJwcmV0ZXIgb3Igc2hl bGw7IGV4aXQgZnJvbSBpdCAodGhlIGNvbW1hbmQgZm9yIiwKLSIgIHRoaXMgaXMgdXN1YWxseSBF WElUIG9yIFFVSVQgb3IgTE9HT1VUKSB0byByZXR1cm4gdG8gS2VybWl0LiIsCi0iIgotfTsKLSNl bmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmbmRlZiBOT1hNSVQKLXN0YXRpYyBjaGFyICpoeHh4bWl0 W10gPSB7Ci0iU3ludGF4OiBUUkFOU01JVCBbIHN3aXRjaGVzIF0gZmlsZW5hbWUiLAotIiAgU2Vu ZHMgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSwgd2l0aG91dCBhbnkgZXJyb3IgY2hlY2tpbmcgb3Ig Y29ycmVjdGlvbiwiLAotIiAgdG8gdGhlIGNvbXB1dGVyIG9uIHRoZSBvdGhlciBlbmQgb2YgeW91 ciBTRVQgTElORSBvciBTRVQgSE9TVCBjb25uZWN0aW9uIiwKLSIgIChvciBpZiBDLUtlcm1pdCBp cyBpbiByZW1vdGUgbW9kZSwgZGlzcGxheXMgaXQgb24gdGhlIHNjcmVlbikuICBUaGUiLAotIiAg ZmlsZW5hbWUgaXMgdGhlIG5hbWUgb2YgYSBzaW5nbGUgZmlsZSAobm8gd2lsZGNhcmRzKSB0byBi ZSBzZW50IG9yLCBpZiIsCi0iICB0aGUgL1BJUEUgc3dpdGNoIGlzIGluY2x1ZGVkLCB0aGUgbmFt ZSBvZiBhIGNvbW1hbmQgd2hvc2Ugb3V0cHV0IGlzIHRvIGJlIiwKLSIgIHNlbnQuIiwKLSIgIiwK LSIgIFRoZSBmaWxlIGlzIHNlbnQgYWNjb3JkaW5nIHRvIHlvdXIgY3VycmVudCBGSUxFIFRZUEUg c2V0dGluZyAoQklOQVJZIG9yIiwKLSIgIFRFWFQpLCB3aGljaCB5b3UgY2FuIG92ZXJyaWRlIHdp dGggYSAvQklOQVJZIG9yIC9URVhUIHN3aXRjaCB3aXRob3V0IiwKLSIgIGNoYW5naW5nIHRoZSBn bG9iYWwgc2V0dGluZy4gIEluIHRleHQgbW9kZSwgaXQgaXMgc2VudCBhIGxpbmUgYXQgYSB0aW1l LCIsCi0iICB3aXRoIGNhcnJpYWdlIHJldHVybiBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZSAoYXMg aWYgeW91IHdlcmUgdHlwaW5nIGl0IGF0IiwKLSIgIHlvdXIga2V5Ym9hcmQpLCBhbmQgQy1LZXJt aXQgd2FpdHMgZm9yIGEgbGluZWZlZWQgdG8gZWNobyBiZWZvcmUgc2VuZGluZyIsCi0iICB0aGUg bmV4dCBsaW5lOyB1c2UgL05PV0FJVCB0byBlbGltaW5hdGUgdGhlIGZlZWRiYWNrIHJlcXVpcmVt ZW50LiAgSW4iLAotIiAgYmluYXJ5IG1vZGUsIGl0IGlzIHNlbnQgYSBjaGFyYWN0ZXIgYXQgYSB0 aW1lLCB3aXRoIG5vIGZlZWRiYWNrIHJlcXVpcmVkLiIsCi0iICIsCi0iICBOb3JtYWxseSB0aGUg dHJhbnNtaXR0ZWQgbWF0ZXJpYWwgaXMgZWNob2VkIHRvIHlvdXIgc2NyZWVuLiAgVXNlIFNFVCIs Ci0iICBUUkFOU01JVCBFQ0hPIE9GRiBvciB0aGUgL05PRUNITyBzd2l0Y2ggdG8gc3VwcHJlc3Mg ZWNob2luZy4gIE5vdGUgdGhhdCIsCi0iICBUUkFOU01JVCAvTk9FQ0hPIC9OT1dBSVQgL0JJTkFS WSBpcyBhIHNwZWNpYWwgY2FzZSwgdGhhdCBtb3JlIG9yIGxlc3MiLAotIiAgYmxhc3RzIHRoZSBm aWxlIG91dCBhdCBmdWxsIHNwZWVkLiIsCi0iICIsCi0jaWZuZGVmIE5PQ1NFVFMKLSIgIENoYXJh Y3RlciBzZXRzIGFyZSB0cmFuc2xhdGVkIGFjY29yZGluZyB0byB5b3VyIGN1cnJlbnQgRklMRSBh bmQgVEVSTUlOQUwiLAotIiAgQ0hBUkFDVEVSLVNFVCBzZXR0aW5ncyB3aGVuIFRSQU5TTUlUIGlz IGluIHRleHQgbW9kZS4gIEluY2x1ZGUgL1RSQU5TUEFSRU5UIgotLAotIiAgdG8gZGlzYWJsZSBj aGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIGluIHRleHQgbW9kZSAoL1RSQU5TUEFSRU5UIGltcGxp ZXMiLAotIiAgL1RFWFQpLiIsCi0iICIsCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotIiAgVGhlcmUg Y2FuIGJlIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBvdGhlciBjb21wdXRlciB3aWxsIHJlY2VpdmUg dGhlIGZpbGUiLAotIiAgY29ycmVjdGx5IGFuZCBjb21wbGV0ZWx5LiAgQmVmb3JlIHlvdSBzdGFy dCB0aGUgVFJBTlNNSVQgY29tbWFuZCwgeW91IiwKLSIgIG11c3QgcHV0IHRoZSBvdGhlciBjb21w dXRlciBpbiBkYXRhIGNvbGxlY3Rpb24gbW9kZSwgZm9yIGV4YW1wbGUgYnkiLAotIiAgc3RhcnRp bmcgYSB0ZXh0IGVkaXRvci4gIFRSQU5TTUlUIG1heSBiZSBpbnRlcnJ1cHRlZCBieSBDdHJsLUMu ICBTeW5vbnltOiIsCi0iICBYTUlULiAgU2VlIEhFTFAgU0VUIFRSQU5TTUlUIGZvciBmdXJ0aGVy IGluZm9ybWF0aW9uLiIsCi0iIiB9OwotI2VuZGlmIC8qIE5PWE1JVCAqLwotCi0jaWZuZGVmIE5P Q1NFVFMKLXN0YXRpYyBjaGFyICpoeHh4bGFbXSA9IHsKLSJTeW50YXg6IFRSQU5TTEFURSBmaWxl MSBjczEgY3MyIFsgZmlsZTIgXSIsCi0iICBUcmFuc2xhdGVzIGZpbGUxIGZyb20gdGhlIGNoYXJh Y3RlciBzZXQgY3MxIGludG8gdGhlIGNoYXJhY3RlciBzZXQgY3MyIiwKLSIgIGFuZCBzdG9yZXMg dGhlIHJlc3VsdCBpbiBmaWxlMi4gIFRoZSBjaGFyYWN0ZXIgc2V0cyBjYW4gYmUgYW55IG9mIiwK LSIgIEMtS2VybWl0J3MgZmlsZSBjaGFyYWN0ZXIgc2V0cy4gIElmIGZpbGUyIGlzIG9taXR0ZWQs IHRoZSB0cmFuc2xhdGlvbiIsCi0iICBpcyBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbi4gIEFuIGFw cHJvcHJpYXRlIGludGVybWVkaWF0ZSBjaGFyYWN0ZXItc2V0IiwKLSIgIGlzIGNob3NlbiBhdXRv bWF0aWNhbGx5LCBpZiBuZWNlc3NhcnkuICBTeW5vbnltOiBYTEFURS4gIEV4YW1wbGU6IiwKLSIg IiwKLSIgICAgVFJBTlNMQVRFIGxhc2FnbmEubGF0IGxhdGluMSBpdGFsaWFuIGxhc2FnbmEubnJj IiwKLSIgIiwKLSIgIE11bHRpcGxlIGZpbGVzIGNhbiBiZSB0cmFuc2xhdGVkIGlmIGZpbGUyIGlz IGEgZGlyZWN0b3J5IG9yIGRldmljZSBuYW1lLCIsCi0iICByYXRoZXIgdGhhbiBhIGZpbGVuYW1l LCBvciBpZiBmaWxlMiBpcyBvbWl0dGVkLiIsCi0iIiB9OwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8K LQotI2lmbmRlZiBOT1NQTAotc3RhdGljIGNoYXIgKmh4eHdhaVtdID0gewotIlN5bnRheDogV0FJ VCB7IG51bWJlci1vZi1zZWNvbmRzLCBoaDptbTpzcyB9IFsgPHdoYXQ+IF0iLAotIiAiLAotIkV4 YW1wbGVzOiIsCi0iICB3YWl0IDUgY2QgY3RzIiwKLSIgIHdhaXQgMjM6NTk6NTkgY2QiLAotIiAi LAotIiAgV2FpdHMgdXAgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzIG9yIHRoZSBnaXZl biB0aW1lIG9mIGRheSBmb3IgdGhlIiwKLSIgIHNwZWNpZmllZCBpdGVtIG9yIGV2ZW50LCB3aGlj aCBjYW4gYmUgRklMRSwgdGhlIG5hbWUocykgb2Ygb25lIG9yIG1vcmUiLAotIiAgbW9kZW0gc2ln bmFscywgb3Igbm90aGluZy4gIElmIG5vdGhpbmcgaXMgc3BlY2lmaWVkLCBXQUlUIGFjdHMgbGlr ZSBTTEVFUC4iLAotIiAgSWYgb25lIG9yIG1vcmUgbW9kZW0gc2lnbmFsIG5hbWVzIGFyZSBnaXZl biwgS2VybWl0IHdhaXRzIGZvciB0aGUgc3BlY2lmaWVkIgotLAotIiAgbW9kZW0gc2lnbmFscyB0 byBhcHBlYXIgb24gdGhlIHNlcmlhbCBjb21tdW5pY2F0aW9uIGRldmljZS4iLAotIiAgU2V0cyBG QUlMVVJFIGlmIHRoZSBzaWduYWxzIGRvIG5vdCBhcHBlYXIgaW4gdGhlIGdpdmVuIHRpbWUgb3Ig aW50ZXJydXB0ZWQiLAotIiAgZnJvbSB0aGUga2V5Ym9hcmQgZHVyaW5nIHRoZSB3YWl0aW5nIHBl cmlvZC4iLAotIiAiLAotIlNpZ25hbHM6IiwKLSIgIGNkICA9IENhcnJpZXIgRGV0ZWN0OyIsCi0i ICBkc3IgPSBEYXRhc2V0IFJlYWR5OyIsCi0iICBjdHMgPSBDbGVhciBUbyBTZW5kOyIsCi0iICBy aSAgPSBSaW5nIEluZGljYXRlLiIsCi0iICIsCi0iSWYgeW91IHdhbnQgS2VybWl0IHRvIHdhaXQg Zm9yIGEgZmlsZSBldmVudCwgdGhlbiB0aGUgc3ludGF4IGlzOiIsCi0iICIsCi0iICBXQUlUIDx0 aW1lPiBGSUxFIHsgQ1JFQVRJT04sIERFTEVUSU9OLCBNT0RJRklDQVRJT04gfSA8ZmlsZW5hbWU+ IiwKLSIgIiwKLSJ3aGVyZSA8dGltZT4gaXMgYXMgYWJvdmUsIGFuZCA8ZmlsZW5hbWU+IGlzIHRo ZSBuYW1lIG9mIGEgc2luZ2xlIGZpbGUuIiwKLSJLZXJtaXQgd2FpdHMgdXAgdG8gdGhlIGdpdmVu IGFtb3VudCBvZiB0aW1lIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50IHRvIG9jY3VyIiwKLSJ3aXRo IHRoZSBzcGVjaWZpZWQgZmlsZSwgc3VjY2VlZHMgaWYgaXQgZG9lcywgZmFpbHMgaWYgaXQgZG9l c24ndC4iLAotIiIgfTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1zdGF0aWMgY2hhciAqaHh4d3Jp W10gPSB7Ci0iU3ludGF4OiBXUklURSBuYW1lIHRleHQiLAotIiAgV3JpdGVzIHRoZSBnaXZlbiB0 ZXh0IHRvIHRoZSBuYW1lZCBsb2cgb3IgZmlsZS4gIFRoZSB0ZXh0IHRleHQgbWF5IGluY2x1ZGUi LAotIiAgYmFja3NsYXNoIGNvZGVzLCBhbmQgaXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5l IHVubGVzcyB5b3UgaW5jbHVkZSB0aGUiLAotIiAgYXBwcm9wcmlhdGUgY29kZS4gIFRoZSBuYW1l IHBhcmFtZXRlciBjYW4gYmUgYW55IG9mIHRoZSBmb2xsb3dpbmc6IiwKLSIgIiwKLSIgICBERUJV Ry1MT0ciLAotIiAgIEVSUk9SIChzdGFuZGFyZCBlcnJvcikiLAotI2lmbmRlZiBOT1NQTAotIiAg IEZJTEUgKHRoZSBPUEVOIFdSSVRFLCBPUEVOICFXUklURSwgb3IgT1BFTiBBUFBFTkQgZmlsZSwg c2VlIEhFTFAgT1BFTikiLAotI2VuZGlmIC8qIE5PU1BMICovCi0iICAgUEFDS0VULUxPRyIsCi0i ICAgU0NSRUVOIChjb21wYXJlIHdpdGggRUNITykiLAotI2lmbmRlZiBOT0xPQ0FMCi0iICAgU0VT U0lPTi1MT0ciLAotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSIgICBUUkFOU0FDVElPTi1MT0ciLCAi IiB9OwotCi0jaWZuZGVmIE5PRElBTAotc3RhdGljIGNoYXIgKmh4eGxvb2tbXSA9IHsgIlN5bnRh eDogTE9PS1VQIG5hbWUiLAotIiAgTG9va3MgdXAgdGhlIGdpdmVuIG5hbWUgaW4gdGhlIGRpYWxp bmcgZGlyZWN0b3J5IG9yIGRpcmVjdG9yaWVzLCBpZiBhbnksIiwKLSIgIHNwZWNpZmllZCBpbiB0 aGUgbW9zdCByZWNlbnQgU0VUIERJQUwgRElSRUNUT1JZIGNvbW1hbmQuICBFYWNoIG1hdGNoaW5n IiwKLSIgIGVudHJ5IGlzIHNob3duLCBhbG9uZyB3aXRoIGFueSB0cmFuc2Zvcm1hdGlvbnMgdGhh dCB3b3VsZCBiZSBhcHBsaWVkIHRvIiwKLSIgIHBvcnRhYmxlLWZvcm1hdCBlbnRyaWVzIGJhc2Vk IG9uIHlvdXIgbG9jYWxlLiAgSEVMUCBESUFMLCBIRUxQIFNFVCBESUFMIiwKLSIgIGZvciBmdXJ0 aGVyIGluZm8uIiwKLSIiCi19OwotCi1zdGF0aWMgY2hhciAqaHh4YW5zd1tdID0geyAiU3ludGF4 OiAgQU5TV0VSIFsgPHNlY29uZHM+IF0iLAotI2lmZGVmIE9TMgotIiAgV2FpdHMgZm9yIGEgbW9k ZW0gY2FsbCB0byBjb21lIGluLiAgUHJpb3IgU0VUIE1PREVNIFRZUEUgYW5kIFNFVCBQT1JUIiwK LSNlbHNlCi0iICBXYWl0cyBmb3IgYSBtb2RlbSBjYWxsIHRvIGNvbWUgaW4uICBQcmlvciBTRVQg TU9ERU0gVFlQRSBhbmQgU0VUIExJTkUiLAotI2VuZGlmIC8qIE9TMiAqLwotIiAgcmVxdWlyZWQu ICBJZiA8c2Vjb25kcz4gaXMgMCBvciBub3Qgc3BlY2lmaWVkLCBLZXJtaXQgd2FpdHMgZm9yZXZl ciBvciIsCi0iICB1bnRpbCBpbnRlcnJ1cHRlZCwgb3RoZXJ3aXNlIEtlcm1pdCB3YWl0cyB0aGUg Z2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMuIiwKLSIgIFRoZSBBTlNXRVIgY29tbWFuZCBwdXRzIHRo ZSBtb2RlbSBpbiBhdXRvYW5zd2VyIG1vZGUuICBTdWJzZXF1ZW50IERJQUwiLAotIiAgY29tbWFu ZHMgd2lsbCBhdXRvbWF0aWNhbGx5IHB1dCBpdCAoYmFjaykgaW4gb3JpZ2luYXRlIG1vZGUuICBT SE9XIE1PREVNLCIsCi0iICBIRUxQIFNFVCBNT0RFTSBmb3IgbW9yZSBpbmZvLiIsCi0iIgotfTsK LQotc3RhdGljIGNoYXIgKmh4eGRpYWxbXSA9IHsgIlN5bnRheDogIERJQUwgcGhvbmVudW1iZXIi LAotIkV4YW1wbGU6IERJQUwgNzY1NDMyMSIsCi0iICBcCi1EaWFscyBhIG51bWJlciB1c2luZyBh biBhdXRvZGlhbCBtb2RlbS4gIEZpcnN0IHlvdSBtdXN0IFNFVCBNT0RFTSBUWVBFLCB0aGVuIiwK LSNpZmRlZiBPUzIKLSIgIFNFVCBQT1JUIChvciBpbiBXaW5kb3dzIG9ubHksIFNFVCBQT1JUIFRB UEkgaW5zdGVhZCBvZiBTRVQgTU9ERU0gVFlQRSBhbmQiLAotIiAgU0VUIExJTkUpLCB0aGVuIFNF VCBTUEVFRC4gVGhlbiBnaXZlIHRoZSBESUFMIGNvbW1hbmQsIGluY2x1ZGluZyB0aGUgcGhvbmUi LAotI2Vsc2UKLSIgIFNFVCBMSU5FLCB0aGVuIFNFVCBTUEVFRC4gIFRoZW4gZ2l2ZSB0aGUgRElB TCBjb21tYW5kLCBpbmNsdWRpbmcgdGhlIHBob25lIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIgIG51 bWJlciwgZm9yIGV4YW1wbGU6IiwKLSIgIiwKLSIgICBESUFMIDc2NTQzMjEiLAotI2lmZGVmIE5F VENPTk4KLSIgIiwKLSIgIElmIHRoZSBtb2RlbSBpcyBvbiBhIG5ldHdvcmsgbW9kZW0gc2VydmVy LCBTRVQgSE9TVCBmaXJzdCwgdGhlbiBTRVQgTU9ERU0iLAotIiAgVFlQRSwgdGhlbiBESUFMLiIs Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotIiAiLAotIklmIHlvdSBnaXZlIHRoZSBESUFMIGNvbW1h bmQgaW50ZXJhY3RpdmVseSBhdCB0aGUgS2VybWl0IHByb21wdCwgYW5kIHRoZSIsCi0iY2FsbCBp cyBwbGFjZWQgc3VjY2Vzc2Z1bGx5LCBLZXJtaXQgYXV0b21hdGljYWxseSBlbnRlcnMgQ09OTkVD VCBtb2RlLiIsCi0iSWYgdGhlIERJQUwgY29tbWFuZCBpcyBnaXZlbiBmcm9tIGEgbWFjcm8gb3Ig Y29tbWFuZCBmaWxlLCBLZXJtaXQgcmVtYWlucyIsCi0iaW4gY29tbWFuZCBtb2RlIGFmdGVyIHRo ZSBjYWxsIGlzIHBsYWNlZCwgc3VjY2Vzc2Z1bGx5IG9yIG5vdC4gIFlvdSBjYW4iLAotImNoYW5n ZSB0aGlzIGJlaGF2aW9yIHdpdGggdGhlIFNFVCBESUFMIENPTk5FQ1QgY29tbWFuZC4iLAotIiAi LAotIklmIHRoZSBwaG9uZW51bWJlciBzdGFydHMgd2l0aCBhIGxldHRlciwgYW5kIGlmIHlvdSBo YXZlIHVzZWQgdGhlIFNFVCBESUFMIiwKLSJESVJFQ1RPUlkgY29tbWFuZCB0byBzcGVjaWZ5IG9u ZSBvciBtb3JlIGRpYWxpbmctZGlyZWN0b3J5IGZpbGVzLCBLZXJtaXQiLAotImxvb2tzIGl0IHVw IGluIHRoZSBnaXZlbiBmaWxlKHMpOyBpZiBpdCBpcyBmb3VuZCwgdGhlIG5hbWUgaXMgcmVwbGFj ZWQgYnkiLAotInRoZSBudW1iZXIgb3IgbnVtYmVycyBhc3NvY2lhdGVkIHdpdGggdGhlIG5hbWUu ICBJZiBpdCBpcyBub3QgZm91bmQsIHRoZSIsCi0ibmFtZSBpcyBzZW50IHRvIHRoZSBtb2RlbSBs aXRlcmFsbHkuIiwKLSIgIiwKLSJJZiB0aGUgcGhvbmVudW1iZXIgc3RhcnRzIHdpdGggYW4gZXF1 YWxzIHNpZ24gKFwiPVwiKSwgdGhpcyBmb3JjZXMgdGhlIHBhcnQiLAotImFmdGVyIHRoZSA9IHRv IGJlIHNlbnQgbGl0ZXJhbGx5IHRvIHRoZSBtb2RlbSwgZXZlbiBpZiBpdCBzdGFydHMgd2l0aCBh IiwKLSJsZXR0ZXIsIHdpdGhvdXQgYW55IGRpcmVjdG9yeSBsb29rdXAuIiwKLSIgIiwKLSJZb3Ug Y2FuIGFsc28gZ2l2ZSBhIGxpc3Qgb2YgcGhvbmUgbnVtYmVycyBlbmNsb3NlZCBpbiBicmFjZXMs IGUuZzoiLAotIiAiLAotIiAgZGlhbCB7ezc2NTQzMjF9ezg3NjU0MzJ9eysxICgyMTIgNTU1LTEy MTJ9fSIsCi0iICIsCi0iKEVhY2ggbnVtYmVyIGlzIGVuY2xvc2VkIGluIGJyYWNlcyBhbmQgdGhl IGVudGlyZSBsaXN0IGlzIGFsc28gZW5jbG9zZWQgaW4iLAotImJyYWNlcy4pICBJbiB0aGlzIGNh c2UsIGVhY2ggbnVtYmVyIGlzIHRyaWVkIHVudGlsIHRoZXJlIGlzIGFuIGFuc3dlci4gIFRoZSIs Ci0icGhvbmUgbnVtYmVycyBpbiB0aGlzIGtpbmQgb2YgbGlzdCBjYW4gbm90IGJlIG5hbWVzIG9m IGRpYWxpbmcgZGlyZWN0b3J5IiwKLSJlbnRyaWVzLiIsCi0iICIsCi0iQSBkaWFsaW5nIGRpcmVj dG9yeSBpcyBhIHBsYWluIHRleHQgZmlsZSwgb25lIGVudHJ5IHBlciBsaW5lOiIsCi0iICIsCi0i ICBuYW1lICBwaG9uZW51bWJlciAgOyAgY29tbWVudHMiLAotIiAiLAotImZvciBleGFtcGxlOiIs Ci0iICIsCi0iICB3b3JrICAgIDk4NzY1NDMgICAgICAgICAgICAgIDsgVGhpcyBpcyBhIGNvbW1l bnQiLAotIiAgZS1tYWlsICArMSAgKDIxMikgNTU1IDQzMjEgICA7IE15IGVsZWN0cm9uaWMgbWFp bGJveCIsCi0iICBnZXJtYW55ICs0OSAoNTExKSA1NTUgMTIzNCAgIDsgT3VyIGJyYW5jaCBpbiBI YW5vdmVyIiwKLSIgIiwKLSJJZiBhIHBob25lIG51bWJlciBzdGFydHMgd2l0aCArLCB0aGVuIGl0 IG11c3QgaW5jbHVkZSBjb3VudHJ5IGNvZGUgYW5kIiwKLSJhcmVhIGNvZGUsIGFuZCBDLUtlcm1p dCB3aWxsIHRyeSB0byBoYW5kbGUgdGhlc2UgYXBwcm9wcmlhdGVseSBiYXNlZCBvbiIsCi0idGhl IGN1cnJlbnQgbG9jYWxlIChIRUxQIFNFVCBESUFMIGZvciBmdXJ0aGVyIGluZm8pOyB0aGVzZSBh cmUgY2FsbGVkIiwKLSJQT1JUQUJMRSBlbnRyaWVzLiAgSWYgaXQgZG9lcyBub3Qgc3RhcnQgd2l0 aCArLCBpdCBpcyBkaWFsZWQgbGl0ZXJhbGx5LiIsCi0iICIsCi0iSWYgbW9yZSB0aGFuIG9uZSBl bnRyeSBpcyBmb3VuZCB3aXRoIHRoZSBzYW1lIG5hbWUsIEtlcm1pdCBkaWFscyBhbGwgb2YiLAot InRoZW0gdW50aWwgdGhlIGNhbGwgaXMgY29tcGxldGVkOyBpZiB0aGUgZW50cmllcyBhcmUgaW4g cG9ydGFibGUgZm9ybWF0LCIsCi0iS2VybWl0IGRpYWxzIHRoZW0gaW4gY2hlYXAtdG8tZXhwZW5z aXZlIG9yZGVyOiBpbnRlcm5hbCwgdGhlbiBsb2NhbCwgdGhlbiIsCi0ibG9uZy1kaXN0YW5jZSwg dGhlbiBpbnRlcm5hdGlvbmFsLCBiYXNlZCBvbiBpdHMga25vd2xlZGdlIG9mIHlvdXIgbG9jYWwi LAotImNvdW50cnkgY29kZSBhbmQgYXJlYSBjb2RlIChzZWUgSEVMUCBTRVQgRElBTCkuIiwKLSIg IiwKLSJTcGVjaWZ5IHlvdXIgZGlhbGluZyBkaXJlY3RvcnkgZmlsZShzKSB3aXRoIHRoZSBTRVQg RElBTCBESVJFQ1RPUlkgY29tbWFuZC4iLAotIiAiLAotI2lmZGVmIE5FVENPTk4KLSJTZWUgYWxz byBTRVQgRElBTCwgU0VUIE1PREVNLCBTRVQgTElORSwgU0VUIEhPU1QsIFNFVCBTUEVFRCwgUkVE SUFMLCBhbmQiLAotIlBESUFMLiIsCi0jZWxzZQotIlNlZSBhbHNvIFNFVCBESUFMLCBTRVQgTU9E RU0sIFNFVCBMSU5FLCBTRVQgU1BFRUQsIFBESUFMLCBhbmQgUkVESUFMLiIsCi0jZW5kaWYgLyog TkVUQ09OTiAqLwotIiIgfTsKLQotI2lmZGVmIENLX1RBUEkKLXN0YXRpYyBjaGFyICpoeHh0YXBp W10gPSB7Ci0iVEFQSSBDT05GSUdVUkUtTElORSA8dGFwaS1saW5lPiIsCi0iICBEaXNwbGF5cyB0 aGUgVEFQSSBDb25maWd1cmUgTGluZSBEaWFsb2cgYm94IGFuZCBhbGxvd3MgeW91IHRvIiwKLSIg IGFsdGVyIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgPHRhcGkt bGluZT4uIiwKLSIgIiwKLSJUQVBJIERJQUxJTkctUFJPUEVSVElFUyIsCi0iICBEaXNwbGF5cyB0 aGUgVEFQSSBEaWFsaW5nIFByb3BlcnRpZXMgKGxvY2F0aW9ucykgRGlhbG9nIGJveC4gIFRoZSIs Ci0iICBEaWFsaW5nIHJ1bGVzIG1heSBiZSBjaGFuZ2VkIGFuZCBsb2NhdGlvbnMgY3JlYXRlZCBh bmQgZGVsZXRlZC4iLAotIiAgV2hlbiB0aGUgZGlhbG9nIGJveCBpcyBjbG9zZWQsIEstOTUgaW1w b3J0cyB0aGUgY3VycmVudCBEaWFsaW5nIiwKLSIgIFByb3BlcnRpZXMnIExvY2F0aW9uIGludG8g dGhlIEtlcm1pdCBESUFMIGNvbW1hbmQgc2V0dGluZ3MuIiwKLSIifTsKLQotc3RhdGljIGNoYXIg Kmh4eXRhcGlbXSA9IHsKLSJTRVQgVEFQSSBMSU5FIDx0YXBpLWxpbmU+IiwKLSIgIE9wZW5zIGEg VEFQSSBkZXZpY2UgZm9yIHVzZSBieSBLZXJtaXQuIiwKLSIgIiwKLSJTRVQgVEFQSSBNT0RFTS1E SUFMSU5HIHtPTiwgW09GRl19IiwKLSIgIElmIFRBUEkgTU9ERU0tRElBTElORyBpcyBPRkYgd2hl biBTRVQgVEFQSSBMSU5FIGlzIGlzc3VlZCwgS2VybWl0IG9wZW5zIiwKLSIgIHRoZSBUQVBJIGRl dmljZSBkaXJlY3RseSBhcyBhIFwicmF3IHBvcnRcIi4gIFRoZSBkZXZpY2UgaXMgdW5hdmFpbGFi bGUgdG8iLAotIiAgb3RoZXIgYXBwbGljYXRpb25zIGFuZCBLZXJtaXQgcGVyZm9ybXMgZGlhbGlu ZyBmdW5jdGlvbnMgdXNpbmcgaXRzIiwKLSIgIGJ1aWx0LWluIGRpYWxpbmcgYW5kIG1vZGVtIGRh dGFiYXNlcy4gIElmIFRBUEkgTU9ERU0tRElBTElORyBpcyBPTiwgVEFQSSIsCi0iICBoYW5kbGVz IGFsbCBkaWFsaW5nIGZ1bmN0aW9ucyBhbmQgdGhlIHBvcnQgbWF5IGJlIHNoYXJlZCB3aXRoIG90 aGVyIiwKLSIgIGFwcGxpY2F0aW9ucyB3aGVuIGEgY2FsbCBpcyBub3QgYWN0aXZlLiAgV2hlbiBU QVBJIE1PREVNLURJQUxJTkcgaXMgT0ZGLCIsCi0iICBTRVQgTU9ERU0gVFlQRSBUQVBJIEtlcm1p dCB1c2VzIHRoZSBUQVBJIG1vZGVtIGNvbW1hbmRzIGltcG9ydGVkIGZyb20gdGhlIiwKLSIgIFdp bmRvd3MgUmVnaXN0cnkgZHVyaW5nIHRoZSBwcmV2aW91cyBTRVQgVEFQSSBMSU5FIGNhbGwuIiwK LSIgIiwKLSJTRVQgVEFQSSBMT0NBVElPTiA8dGFwaS1sb2NhdGlvbj4iLAotIiAgU3BlY2lmaWVz IHRoZSBUQVBJIGxvY2F0aW9uIHRvIG1ha2UgY3VycmVudCBmb3IgdGhlIGVudGlyZSBzeXN0ZW0u ICBUaGUiLAotIiAgPHRhcGktbG9jYXRpb24+J3MgZGlhbGluZyBwcm9wZXJ0aWVzIGFyZSBpbXBv cnRlZCBpbnRvIEtlcm1pdCdzIFNFVCBESUFMIiwKLSIgIGNvbW1hbmQgZGF0YWJhc2UuIiwKLSIg IiwKLSJTRVQgVEFQSSBQSE9ORS1OVU1CRVItQ09OVkVSU0lPTlMge09OLCBPRkYsIFtBVVRPXX0i LAotIiAgQ29udHJvbHMgd2hldGhlciB0aGUgcGhvbmUgbnVtYmVyIGNvbnZlcnNpb25zIGFyZSBw ZXJmb3JtZWQgYnkgVEFQSSAoT04pIiwKLSIgIG9yIGJ5IEtlcm1pdCAoT0ZGKSwgb3IgYWNjb3Jk aW5nIHRoZSB0eXBlIG9mIHBvcnQgdGhhdCB3YXMgc2VsZWN0ZWQiLAotIiAgKEFVVE8pOyBBVVRP IGlzIHRoZSBkZWZhdWx0LCBhbmQgaXMgZXF1aXZhbGVudCB0byBPTiBpZiB0aGUgY3VycmVudCIs Ci0iICBMSU5FL1BPUlQgaXMgYSBUQVBJIGRldmljZSBhbmQgVEFQSSBNT0RFTS1ESUFMSU5HIGlz IE9OLCBPRkYgb3RoZXJ3aXNlLiIsCi0iICIsCi0iU0VUIFRBUEkgTU9ERU0tTElHSFRTIHtbT05d LCBPRkZ9IiwKLSIgIERpc3BsYXlzIGEgbW9kZW0gbGlnaHRzIGluZGljYXRvciBvbiB0aGUgV2lu ZG93cyA5NSBUYXNrYmFyLiAgRG9lcyBub3RoaW5nIiwKLSIgIGluIFdpbmRvd3MgTlQgNC4wLiIs Ci0iICIsCi0iU0VUIFRBUEkgTUFOVUFMLURJQUxJTkcge09OLCBbT0ZGXX0iLAotIiAgRGlzcGxh eXMgYSBkaWFsb2cgYm94IGR1cmluZyBkaWFsaW5nIHJlcXVlc3RpbmcgdGhhdCB5b3UgbWFudWFs bHkgZGlhbCB0aGUiLAotIiAgcGhvbmUgYmVmb3JlIGNvbnRpbnVpbmcuICBBcHBsaWVzIG9ubHkg d2hlbiBUQVBJIE1PREVNLURJQUxJTkcgaXMgT04uIiwKLSIgIiwKLSJTRVQgVEFQSSBXQUlULUZP Ui1DUkVESVQtQ0FSRC1UT05FIDxzZWNvbmRzPiIsCi0iICBTb21lIG1vZGVtcyBkb24ndCBzdXBw b3J0IHRoZSAnJCcgKEJPTkcpIHN5bWJvbCBkdXJpbmcgZGlhbGluZywgd2hpY2giLAotIiAgbWVh bnMgXCJ3YWl0IGZvciBjcmVkaXQgY2FyZCB0b25lIGJlZm9yZSBjb250aW51aW5nLlwiICBJZiBU QVBJIHJlY29nbml6ZXMiLAotIiAgdGhlIG1vZGVtIGFzIG9uZSB0aGF0IGRvZXMgbm90IHN1cHBv cnQgQk9ORywgaXQgcmVwbGFjZXMgdGhlICckJyB3aXRoIiwKLSIgIDxzZWNvbmRzPiB3b3J0aCBv ZiBwYXVzZXMuICBUaGUgZGVmYXVsdCBpcyA4IHNlY29uZHMuICBUaGlzIGNvbW1hbmQiLAotIiAg YXBwbGllcyBvbmx5IHdoZW4gVEFQSSBNT0RFTS1ESUFMSU5HIGlzIE9OIiwKLSIgIiwKLSJTRVQg VEFQSSBQUkUtRElBTC1URVJNSU5BTCB7T04sIFtPRkZdfSIsCi0iU0VUIFRBUEkgUE9TVC1ESUFM LVRFUk1JTkFMIHtPTiwgW09GRl19IiwKLSIgIERpc3BsYXlzIGEgc21hbGwgdGVybWluYWwgd2lu ZG93IHRoYXQgbWF5IGJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUiLAotIiAgbW9kZW0g b3IgdGhlIGhvc3QgcHJpb3IgdG8gb3IgaW1tZWRpYXRlbHkgYWZ0ZXIgZGlhbGluZzsgYXBwbGll cyBvbmx5IHdoZW4iLAotIiAgVEFQSSBNT0RFTS1ESUFMSU5HIGlzIE9OIiwKLSIgIiwKLSJTRVQg VEFQSSBJTkFDVElWSVRZLVRJTUVPVVQgPG1pbnV0ZXM+IiwKLSIgIFNwZWNpZmllcyB0aGUgbnVt YmVyIG9mIG1pbnV0ZXMgb2YgaW5hY3Rpdml0eSB0aGF0IG1heSBnbyBieSBiZWZvcmUgVEFQSSIs Ci0iICBkaXNjb25uZWN0cyB0aGUgbGluZS4gIFRoZSBkZWZhdWx0IGlzIDAgd2hpY2ggbWVhbnMg ZGlzYWJsZSB0aGlzIGZ1bmN0aW9uLiIsCi0iICBBcHBsaWVzIG9ubHkgd2hlbiBUQVBJIE1PREVN LURJQUxJTkcgaXMgT04uIiwKLSIgIiwKLSJTRVQgVEFQSSBVU0UtV0lORE9XUy1DT05GSUdVUkFU SU9OIHtPTiwgW09GRl19IiwKLSIgIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBUQVBJIG1vZGVtIHZh bHVlcyBmb3Igc3BlZWQsIHBhcml0eSwgc3RvcCBiaXRzLCBmbG93IiwKLSIgIGNvbnRyb2wsIGV0 Yy4gYXJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCB2YWx1ZXMgc3BlY2lmaWVk IiwKLSIgIHdpdGhpbiBLZXJtaXQtOTUuIiwKLSIgIiwKLSIifTsKLSNlbmRpZiAvKiBDS19UQVBJ ICovCi0KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQotI2lmZGVmIFROQ09ERQotc3RhdGljIGNoYXIg KmhteHhpa3NbXSA9IHsKLSJTeW50YXg6IElLUyBbIHN3aXRjaGVzIF0gWyBob3N0IFsgc2Vydmlj ZSBdIF0iLAotIiAgRXN0YWJsaXNoZXMgYSBuZXcgY29ubmVjdGlvbiB0byBhbiBJbnRlcm5ldCBL ZXJtaXQgU2VydmljZSBkYWVtb24uIiwKLSIgIEVxdWl2YWxlbnQgdG8gU0VUIE5FVFdPUksgVFlQ RSBUQ1AvSVAsIFNFVCBIT1NUIGhvc3QgS0VSTUlUIC9URUxORVQsIiwKLSIgIElGIFNVQ0NFU1Mg Q09OTkVDVC4gIElmIGhvc3QgaXMgb21pdHRlZCwgdGhlIHByZXZpb3VzIGNvbm5lY3Rpb24gKGlm IGFueSkiLAotIiAgaXMgcmVzdW1lZC4gIERlcGVuZGluZyBvbiBob3cgS2VybWl0IGhhcyBiZWVu IGJ1aWx0IHN3aXRjaGVzIG1heSBiZSIsCi0iICBhdmFpbGFibGUgdG8gcmVxdWlyZSBhIHNlY3Vy ZSBhdXRoZW50aWNhdGlvbiBtZXRob2QgYW5kIGJpZGlyZWN0aW9uYWwiLAotIiAgZW5jcnlwdGlv bi4gIFNlZSBIRUxQIFNFVCBURUxORVQgZm9yIG1vcmUgaW5mby4iLAotIiAiLAotI2lmZGVmIENL X0FVVEhFTlRJQ0FUSU9OCi0iIC9BVVRIOjx0eXBlPiBpcyBlcXVpdmFsZW50IHRvIFNFVCBURUxO RVQgQVVUSCBUWVBFIDx0eXBlPiBhbmQiLAotIiAgIFNFVCBURUxPUFQgQVVUSCBSRVFVSVJFRCB3 aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucy4gIElmIHRoZSB0eXBlIiwKLSIgICBpcyBBVVRP LCB0aGVuIFNFVCBURUxPUFQgQVVUSCBSRVFVRVNURUQgaXMgZXhlY3V0ZWQgYW5kIGlmIHRoZSB0 eXBlIiwKLSIgICBpcyBOT05FLCB0aGVuIFNFVCBURUxPUFQgQVVUSCBSRUZVU0VEIGlzIGV4ZWN1 dGVkLiIsCi0iICIsCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNpZmRlZiBDS19F TkNSWVBUSU9OCi0iIC9FTkNSWVBUOjx0eXBlPiBpcyBlcXVpdmFsZW50IHRvIFNFVCBURUxORVQg RU5DUllQVCBUWVBFIDx0eXBlPiIsCi0iICAgYW5kIFNFVCBURUxPUFQgRU5DUllQVCBSRVFVSVJF RCBSRVFVSVJFRCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucy4iLAotIiAgIElmIHRoZSB0 eXBlIGlzIEFVVE8gdGhlbiBTRVQgVEVMT1BUIEFVVEggUkVRVUVTVEVEIFJFUVVFU1RFRCBpcyBl eGVjdXRlZCIsCi0iICAgYW5kIGlmIHRoZSB0eXBlIGlzIE5PTkUgdGhlbiBTRVQgVEVMT1BUIEVO Q1JZUFQgUkVGVVNFRCBSRUZVU0VEIGlzIiwKLSIgICBleGVjdXRlZC4iLAotIiAiLAotI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KLSIgL1VTRVJJRDpbPG5hbWU+XSIsCi0iICAgVGhpcyBzd2l0 Y2ggaXMgZXF1aXZhbGVudCB0byBTRVQgTE9HSU4gVVNFUklEIDxuYW1lPiBvciBTRVQgVEVMTkVU IiwKLSIgICBFTlZJUk9OTUVOVCBVU0VSIDxuYW1lPi4gIElmIGEgc3RyaW5nIGlzIGdpdmVuLCBp dCBzZW50IHRvIGhvc3QgZHVyaW5nIiwKLSIgICBUZWxuZXQgbmVnb3RpYXRpb25zOyBpZiB0aGlz IHN3aXRjaCBpcyBnaXZlbiBidXQgdGhlIHN0cmluZyBpcyBvbWl0dGVkLCIsCi0iICAgbm8gdXNl ciBJRCBpcyBzZW50IHRvIHRoZSBob3N0LiAgSWYgdGhpcyBzd2l0Y2ggaXMgbm90IGdpdmVuLCB5 b3VyIiwKLSIgICBjdXJyZW50IFVTRVJJRCB2YWx1ZSwgXFx2KHVzZXJpZCksIGlzIHNlbnQuICBX aGVuIGEgdXNlcmlkIGlzIHNlbnQgdG8gdGhlIiwKLSIgICBob3N0IGl0IGlzIGEgcmVxdWVzdCB0 byBsb2dpbiBhcyB0aGUgc3BlY2lmaWVkIHVzZXIuIiwKLSIgIiwKLSNpZmRlZiBDS19BVVRIRU5U SUNBVElPTgotIiAvUEFTU1dPUkQ6WzxzdHJpbmc+XSIsCi0iICAgVGhpcyBzd2l0Y2ggaXMgZXF1 aXZhbGVudCB0byBTRVQgTE9HSU4gUEFTU1dPUkQuICBJZiBhIHN0cmluZyBpcyBnaXZlbiwiLAot IiAgIGl0IGlzIHRyZWF0ZWQgYXMgdGhlIHBhc3N3b3JkIHRvIGJlIHVzZWQgKGlmIHJlcXVpcmVk KSBieSBhbnkgVGVsbmV0IiwKLSIgICBBdXRoZW50aWNhdGlvbiBwcm90b2NvbCAoS2VyYmVyb3Mg VGlja2V0IHJldHJpZXZhbCwgU2VjdXJlIFJlbW90ZSIsCi0iICAgUGFzc3dvcmQsIG9yIFguNTA5 IGNlcnRpZmljYXRlIHByaXZhdGUga2V5IGRlY3J5cHRpb24uKSAgSWYgbm8gcGFzc3dvcmQiLAot IiAgIHN3aXRjaCBpcyBzcGVjaWZpZWQgYSBwcm9tcHQgaXMgaXNzdWVkIHRvIHJlcXVlc3QgdGhl IHBhc3N3b3JkIGlmIG9uZSIsCi0iICAgaXMgcmVxdWlyZWQgZm9yIHRoZSBuZWdvdGlhdGVkIGF1 dGhlbnRpY2F0aW9uIG1ldGhvZC4iLAotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0i In07Ci0KLXN0YXRpYyBjaGFyICpobXh4dGVsW10gPSB7Ci0iU3ludGF4OiBURUxORVQgWyBzd2l0 Y2hlcyBdIFsgaG9zdCBbIHNlcnZpY2UgXSBdIiwKLSIgIEVxdWl2YWxlbnQgdG8gU0VUIE5FVFdP UksgVFlQRSBUQ1AvSVAsIFNFVCBIT1NUIGhvc3QgWyBzZXJ2aWNlIF0gL1RFTE5FVCwiLAotIiAg SUYgU1VDQ0VTUyBDT05ORUNULiAgSWYgaG9zdCBpcyBvbWl0dGVkLCB0aGUgcHJldmlvdXMgY29u bmVjdGlvbiAoaWYgYW55KSIsCi0iICBpcyByZXN1bWVkLiAgRGVwZW5kaW5nIG9uIGhvdyBLZXJt aXQgaGFzIGJlZW4gYnVpbHQgc3dpdGNoZXMgbWF5IGJlIiwKLSIgIGF2YWlsYWJsZSB0byByZXF1 aXJlIGEgc2VjdXJlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBhbmQgYmlkaXJlY3Rpb25hbCIsCi0i ICBlbmNyeXB0aW9uLiAgU2VlIEhFTFAgU0VUIFRFTE5FVCBmb3IgbW9yZSBpbmZvLiIsCi0iICIs Ci0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSIgL0FVVEg6PHR5cGU+IGlzIGVxdWl2YWxlbnQg dG8gU0VUIFRFTE5FVCBBVVRIIFRZUEUgPHR5cGU+IGFuZCIsCi0iICAgU0VUIFRFTE9QVCBBVVRI IFJFUVVJUkVEIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zLiAgSWYgdGhlIHR5cGUiLAot IiAgIGlzIEFVVE8sIHRoZW4gU0VUIFRFTE9QVCBBVVRIIFJFUVVFU1RFRCBpcyBleGVjdXRlZCBh bmQgaWYgdGhlIHR5cGUiLAotIiAgIGlzIE5PTkUsIHRoZW4gU0VUIFRFTE9QVCBBVVRIIFJFRlVT RUQgaXMgZXhlY3V0ZWQuIiwKLSIgIiwKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwot I2lmZGVmIENLX0VOQ1JZUFRJT04KLSIgL0VOQ1JZUFQ6PHR5cGU+IGlzIGVxdWl2YWxlbnQgdG8g U0VUIFRFTE5FVCBFTkNSWVBUIFRZUEUgPHR5cGU+IiwKLSIgICBhbmQgU0VUIFRFTE9QVCBFTkNS WVBUIFJFUVVJUkVEIFJFUVVJUkVEIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zLiIsCi0i ICAgSWYgdGhlIHR5cGUgaXMgQVVUTyB0aGVuIFNFVCBURUxPUFQgQVVUSCBSRVFVRVNURUQgUkVR VUVTVEVEIGlzIGV4ZWN1dGVkIiwKLSIgICBhbmQgaWYgdGhlIHR5cGUgaXMgTk9ORSB0aGVuIFNF VCBURUxPUFQgRU5DUllQVCBSRUZVU0VEIFJFRlVTRUQgaXMiLAotIiAgIGV4ZWN1dGVkLiIsCi0i ICIsCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotIiAvVVNFUklEOls8bmFtZT5dIiwKLSIg ICBUaGlzIHN3aXRjaCBpcyBlcXVpdmFsZW50IHRvIFNFVCBMT0dJTiBVU0VSSUQgPG5hbWU+IG9y IFNFVCBURUxORVQiLAotIiAgIEVOVklST05NRU5UIFVTRVIgPG5hbWU+LiAgSWYgYSBzdHJpbmcg aXMgZ2l2ZW4sIGl0IHNlbnQgdG8gaG9zdCBkdXJpbmciLAotIiAgIFRlbG5ldCBuZWdvdGlhdGlv bnM7IGlmIHRoaXMgc3dpdGNoIGlzIGdpdmVuIGJ1dCB0aGUgc3RyaW5nIGlzIG9taXR0ZWQsIiwK LSIgICBubyB1c2VyIElEIGlzIHNlbnQgdG8gdGhlIGhvc3QuICBJZiB0aGlzIHN3aXRjaCBpcyBu b3QgZ2l2ZW4sIHlvdXIiLAotIiAgIGN1cnJlbnQgVVNFUklEIHZhbHVlLCBcXHYodXNlcmlkKSwg aXMgc2VudC4gIFdoZW4gYSB1c2VyaWQgaXMgc2VudCB0byB0aGUiLAotIiAgIGhvc3QgaXQgaXMg YSByZXF1ZXN0IHRvIGxvZ2luIGFzIHRoZSBzcGVjaWZpZWQgdXNlci4iLAotIiAiLAotI2lmZGVm IENLX0FVVEhFTlRJQ0FUSU9OCi0iIC9QQVNTV09SRDpbPHN0cmluZz5dIiwKLSIgICBUaGlzIHN3 aXRjaCBpcyBlcXVpdmFsZW50IHRvIFNFVCBMT0dJTiBQQVNTV09SRC4gIElmIGEgc3RyaW5nIGlz IGdpdmVuLCIsCi0iICAgaXQgaXMgdHJlYXRlZCBhcyB0aGUgcGFzc3dvcmQgdG8gYmUgdXNlZCAo aWYgcmVxdWlyZWQpIGJ5IGFueSBUZWxuZXQiLAotIiAgIEF1dGhlbnRpY2F0aW9uIHByb3RvY29s IChLZXJiZXJvcyBUaWNrZXQgcmV0cmlldmFsLCBTZWN1cmUgUmVtb3RlIiwKLSIgICBQYXNzd29y ZCwgb3IgWC41MDkgY2VydGlmaWNhdGUgcHJpdmF0ZSBrZXkgZGVjcnlwdGlvbi4pICBJZiBubyBw YXNzd29yZCIsCi0iICAgc3dpdGNoIGlzIHNwZWNpZmllZCBhIHByb21wdCBpcyBpc3N1ZWQgdG8g cmVxdWVzdCB0aGUgcGFzc3dvcmQgaWYgb25lIiwKLSIgICBpcyByZXF1aXJlZCBmb3IgdGhlIG5l Z290aWF0ZWQgYXV0aGVudGljYXRpb24gbWV0aG9kLiIsCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElD QVRJT04gKi8KLSIifTsKLQotc3RhdGljIGNoYXIgKmh4dG9wdFtdID0gewotIlRFTE9QVCB7IEFP LCBBWVQsIEJSRUFLLCBDQU5DRUwsIEVDLCBFTCwgRU9GLCBFT1IsIEdBLCBJUCwgRE1BUkssIE5P UCwgU0UsIiwKLSIgICAgICAgICBTVVNQLCBTQiBbIG9wdGlvbiBdLCBETyBbIG9wdGlvbiBdLCBE T05UIFsgb3B0aW9uIF0sIiwKLSIgICAgICAgICBXSUxMIFsgb3B0aW9uIF0sIFdPTlQgW29wdGlv bl0gfSIsCi0iICBUaGlzIGNvbW1hbmQgbGV0cyB5b3Ugc2VuZCBhbGwgdGhlIFRlbG5ldCBwcm90 b2NvbCBjb21tYW5kcy4gIE5vdGUgdGhhdCIsCi0iICBjZXJ0YWluIGNvbW1hbmRzIGRvIG5vdCBy ZXF1aXJlIGEgcmVzcG9uc2UsIGFuZCB0aGVyZWZvcmUgY2FuIGJlIHVzZWQgYXMiLAotIiAgbm9u ZGVzdHJ1Y3RpdmUgXCJwcm9iZXNcIiB0byBzZWUgaWYgdGhlIFRlbG5ldCBzZXNzaW9uIGlzIHN0 aWxsIG9wZW47IiwKLSIgIGUuZy46IiwKLSIgIiwKLSIgICAgc2V0IGhvc3QgeHl6Y29ycC5jb20i LAotIiAgICAuLi4iLAotIiAgICB0ZWxvcHQgbm9wIiwKLSIgICAgdGVsb3B0IG5vcCIsCi0iICAg IGlmIGZhaWwgc3RvcCAxIENvbm5lY3Rpb24gbG9zdCIsCi0iICIsCi0iICBURUxPUFQgTk9QIGlz IHNlbnQgdHdpY2UgYmVjYXVzZSB0aGUgZmFpbHVyZSBvZiB0aGUgY29ubmVjdGlvbiB3aWxsIG5v dCIsCi0iICBiZSBkZXRlY3RlZCB1bnRpbCB0aGUgc2Vjb25kIHNlbmQgaXMgYXR0ZW1wdGVkLiAg VGhpcyBjb21tYW5kIGlzIG1lYW50IiwKLSIgIHByaW1hcmlseSBhcyBhIGRlYnVnZ2luZyB0b29s IGZvciB0aGUgZXhwZXJ0IHVzZXIuIiwKLSIifTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotI2Vu ZGlmIC8qIE5PSEVMUCAqLwotCi0vKiAgRCBPIEggTCBQICAtLSAgR2l2ZSBhIGhlbHAgbWVzc2Fn ZSAgKi8KLQotX1BST1RPVFlQKCBpbnQgZG9oc2V0LCAoaW50KSApOwotI2lmbmRlZiBOT0NNREwK LV9QUk9UT1RZUCggaW50IGRvaG9wdHMsICh2b2lkKSApOwotI2VuZGlmIC8qIE5PQ01ETCAqLwot I2lmbmRlZiBOT1NQTAotX1BST1RPVFlQKCBpbnQgZG9oZnVuYywgKGludCkgKTsKLWV4dGVybiBz dHJ1Y3Qga2V5dGFiIGZuY3RhYltdOwotZXh0ZXJuIGludCBuZnVuY3M7Ci0jZW5kaWYgLyogTk9T UEwgKi8KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9LVkVSQlMKLV9QUk9UT1RZUCggaW50IGRvaGt2 ZXJiLCAoaW50KSApOwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIga3ZlcmJzW107Ci1leHRlcm4gaW50 IG5rdmVyYnM7Ci0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lm bmRlZiBOT1NQTAotc3RhdGljIGNoYXIgKiBoeHhkY2xbXSA9IHsKLSJTeW50YXg6IEFSUkFZIHZl cmIgb3BlcmFuZHMuLi4iLAotIiAiLAotIkRlY2xhcmVzIGFycmF5cyBhbmQgcGVyZm9ybXMgdmFy aW91cyBvcGVyYXRpb25zIG9uIHRoZW0uICBBcnJheXMgaGF2ZSIsCi0idGhlIGZvbGxvd2luZyBz eW50YXg6IiwKLSIgIiwKLSIgIFxcJmFbbl0iLAotIiAiLAotIndoZXJlIFwiYVwiIGlzIGEgbGV0 dGVyIGFuZCBuIGlzIGEgbnVtYmVyIG9yIGEgdmFyaWFibGUgd2l0aCBhIG51bWVyaWMgdmFsdWUi LAotIm9yIGFuIGFyaXRobWV0aWMgZXhwcmVzc2lvbi4gIFRoZSB2YWx1ZSBvZiBhbiBhcnJheSBl bGVtZW50IGNhbiBiZSBhbnl0aGluZyIsCi0iYXQgYWxsIC0tIGEgbnVtYmVyLCBhIGNoYXJhY3Rl ciwgYSBzdHJpbmcsIGEgZmlsZW5hbWUsIGV0Yy4iLAotIiAiLAotIlRoZSBmb2xsb3dpbmcgQVJS QVkgdmVyYnMgYXJlIGF2YWlsYWJsZToiLAotIiAiLAotIlsgQVJSQVkgXSBERUNMQVJFIGFycmF5 bmFtZVtuXSBbID0gaW5pdGlhbGl6ZXJzLi4uIF0iLAotIiAgRGVjbGFyZXMgYW4gYXJyYXkgb2Yg dGhlIGdpdmVuIHNpemUsIG4uICBUaGUgcmVzdWx0aW5nIGFycmF5IGhhcyBuKzEiLAotIiAgZWxl bWVudHMsIDAgdGhyb3VnaCBuLiAgQXJyYXkgZWxlbWVudHMgY2FuIGJlIHVzZWQganVzdCBsaWtl IGFueSBvdGhlciIsCi0iICB2YXJpYWJsZXMuICBJbml0aWFsIHZhbHVlcyBjYW4gYmUgZ2l2ZW4g Zm9yIGVsZW1lbnRzIDEsIDIsIC4uLiBieSIsCi0iICBpbmNsdWRpbmcgPSBmb2xsb3dlZCBieSBv bmUgb3IgbW9yZSB2YWx1ZXMgc2VwYXJhdGVkIGJ5IHNwYWNlcy4gIElmIHlvdSIsCi0iICBvbWl0 IHRoZSBzaXplLCB0aGUgYXJyYXkgaXMgc2l6ZWQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2Yg aW5pdGlhbGl6ZXJzOyIsCi0iICBpZiBub25lIGFyZSBnaXZlbiB0aGUgYXJyYXkgaXMgZGVzdHJv eWVkIGFuZCB1bmRlY2xhcmVkIGlmIGl0IGFscmVhZHkiLAotIiAgZXhpc3RlZC4gIFRoZSBBUlJB WSBrZXl3b3JkIGlzIG9wdGlvbmFsLiAgU3lub255bTogWyBBUlJBWSBdIERDTC4iLAotIiAiLAot IlsgQVJSQVkgXSBVTkRFQ0xBUkUgYXJyYXluYW1lIiwKLSIgIERlc3Ryb3lzIGFuZCB1bmRlY2xh cmVzIHRoZSBnaXZlbiBhcnJheS4gIFN5bm9ueW06IEFSUkFZIERFU1RST1kuIiwKLSIgIiwKLSJB UlJBWSBTSE9XIFsgYXJyYXluYW1lIF0iLAotIiAgRGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRo ZSBnaXZlbiBhcnJheS4gIEEgcmFuZ2Ugc3BlY2lmaWVyIGNhbiBiZSIsCi0iICBpbmNsdWRlZCB0 byBkaXNwbGF5IGEgc2VnbWVudCBvZiB0aGUgYXJyYXksIGUuZy4gXCJhcnJheSBzaG93IFxcJmFb MToyNF0uXCIiCi0sCi0iICBJZiB0aGUgYXJyYXluYW1lIGlzIG9taXR0ZWQsIGFsbCBkZWNsYXJl ZCBhcnJheXMgYXJlIGxpc3RlZCwgYnV0IHRoZWlyIiwKLSIgIGNvbnRlbnRzIGlzIG5vdCBzaG93 bi4gIFN5bm9ueW06IFNIT1cgQVJSQVkuIiwKLSIgIiwKLSJBUlJBWSBDTEVBUiBhcnJheW5hbWUi LAotIiAgQ2xlYXJzIGFsbCBlbGVtZW50cyBvZiB0aGUgYXJyYXksIGkuZS4gc2V0cyB0aGVtIHRv IGVtcHR5IHZhbHVlcy4iLAotIiAgWW91IG1heSBpbmNsdWRlIGEgcmFuZ2Ugc3BlY2lmaWVyIHRv IGNsZWFyIGEgc2VnbWVudCBvZiB0aGUgYXJyYXkgcmF0aGVyIiwKLSIgIHRoYW4gdGhlIHdob2xl IGFycmF5LCBlLmcuIFwiYXJyYXkgY2xlYXIgXFwlYVsyMjozOF1cIiIsCi0iICIsCi0iQVJSQVkg U0VUIGFycmF5bmFtZSB2YWx1ZSIsCi0iICBTZXRzIGFsbCBlbGVtZW50cyBvZiB0aGUgYXJyYXkg dG8gdGhlIGdpdmVuIHZhbHVlLiAgWW91IG1heSBzcGVjaWZ5IGEiLAotIiAgcmFuZ2UgdG8gc2V0 IGEgc2VnbWVudCBvZiB0aGUgYXJyYXksIGUuZy4gXCJhcnJheSBzZXQgXFwlYVsyOjldIDBcIiIs Ci0iICIsCi0iQVJSQVkgUkVTSVpFIGFycmF5bmFtZSBudW1iZXIiLAotIiAgQ2hhbmdlcyB0aGUg c2l6ZSBvZiB0aGUgZ2l2ZW4gYXJyYXksIHdoaWNoIG11c3QgYWxyZWFkeSBleGlzdCwgdG8gdGhl IiwKLSIgIG51bWJlciBnaXZlbi4gIElmIHRoZSBudW1iZXIgaXMgc21hbGxlciB0aGFuIHRoZSBj dXJyZW50IHNpemUsIHRoZSBleHRyYSIsCi0iICBlbGVtZW50cyBhcmUgZGlzY2FyZGVkOyBpZiBp dCBpcyBsYXJnZXIsIG5ldyBlbXB0eSBlbGVtZW50cyBhcmUgYWRkZWQuIiwKLSIgIiwKLSJBUlJB WSBDT1BZIGFycmF5MSBhcnJheTIiLAotIiAgQ29waWVzIGFycmF5MSB0byBhcnJheTIuICBJZiBh cnJheTIgaGFzIG5vdCBiZWVuIGRlY2xhcmVkLCBpdCBpcyBjcmVhdGVkIiwKLSIgIGF1dG9tYXRp Y2FsbHkuICBSYW5nZSBzcGVjaWZpZXJzIG1heSBiZSBnaXZlbiBvbiBvbmUgb3IgYm90aCBhcnJh eXMuIiwKLSIgIiwKLSJBUlJBWSBMSU5LIGFycmF5MSBhcnJhMiIsCi0iICBNYWtlcyBhcnJheTEg YSBsaW5rIHRvIGFycmF5Mi4iLAotIiAiLAotIlsgQVJSQVkgXSBTT1JUIFsgc3dpdGNoZXMgXSBh cnJheS1uYW1lIFsgYXJyYXkyIF0iLAotIiAgU29ydHMgdGhlIGdpdmVuIGFycmF5IGxleGljYWxs eSBhY2NvcmRpbmcgdG8gdGhlIHN3aXRjaGVzLiAgRWxlbWVudCAwIG9mIiwKLSIgIHRoZSBhcnJh eSBpcyBleGNsdWRlZCBmcm9tIHNvcnRpbmcgYnkgZGVmYXVsdC4gIFRoZSBBUlJBWSBrZXl3b3Jk IGlzIiwKLSIgIG9wdGlvbmFsLiAgSWYgYSBzZWNvbmQgYXJyYXkgbmFtZSBpcyBnaXZlbiwgdGhh dCBhcnJheSBpcyBzb3J0ZWQgYWNjb3JkaW5nIiwKLSIgIHRvIHRoZSBmaXJzdCBvbmUuICBTd2l0 Y2hlczoiLAotIiAiLAotIiAgL0NBU0U6e09OLE9GRn0iLAotIiAgICBJZiBPTiwgYWxwaGFiZXRp YyBjYXNlIG1hdHRlcnM7IGlmIE9GRiBpdCBpcyBpZ25vcmVkLiAgSWYgdGhpcyBzd2l0Y2ggaXMi LAotIiAgICBvbWl0dGVkLCB0aGUgY3VycmVudCBTRVQgQ0FTRSBzZXR0aW5nIGFwcGxpZXMuIiwK LSIgIiwKLSIgIC9LRVk6bnVtYmVyIiwKLSIgICAgXAotUG9zaXRpb24gKDEtYmFzZWQgY29sdW1u IG51bWJlcikgYXQgd2hpY2ggY29tcGFyaXNvbnMgYmVnaW4sIDEgYnkgZGVmYXVsdC4iLAotIiAi LAotIiAgL05VTUVSSUMiLAotIiAgICBTcGVjaWZpZXMgYSBudW1lcmljIHJhdGhlciB0aGFuIGxl eGljYWwgc29ydC4iLAotIiAiLAotIiAgL1JBTkdFOmxvd1s6aGlnaF0iLAotIiAgICBUaGUgcmFu Z2Ugb2YgZWxlbWVudHMsIGxvdyB0aHJvdWdoIGhpZ2gsIHRvIGJlIHNvcnRlZC4gIElmIHRoaXMg c3dpdGNoIiwKLSIgICAgaXMgbm90IGdpdmVuLCBlbGVtZW50cyAxIHRocm91Z2ggdGhlIGRpbWVu c2lvbmVkIHNpemUgYXJlIHNvcnRlZC4gIElmIiwKLSIgICAgOmhpZ2ggaXMgb21pdHRlZCwgdGhl IGRpbWVuc2lvbmVkIHNpemUgaXMgdXNlZC4gIFRvIGluY2x1ZGUgZWxlbWVudCAwIGluIiwKLSIg ICAgYSBzb3J0LCB1c2UgL1JBTkdFOjAgKHRvIHNvcnQgdGhlIHdob2xlIGFycmF5KSBvciAvUkFO R0U6MDpuICh0byBzb3J0IiwKLSIgICAgZWxlbWVudHMgMCB0aHJvdWdoIG4pLiAgWW91IGNhbiB1 c2UgYSByYW5nZSBzcGVjaWZpZXIgaW4gdGhlIGFycmF5IG5hbWUiLAotIiAgICBpbnN0ZWFkIG9m IHRoZSAvUkFOR0Ugc3dpdGNoLiIsCi0iICIsCi0iICAvUkVWRVJTRSIsCi0iICAgIFNvcnQgaW4g cmV2ZXJzZSBvcmRlci4gIElmIHRoaXMgc3dpdGNoIGlzIG5vdCBnaXZlbiwgdGhlIGFycmF5IGlz IHNvcnRlZCIsCi0iICAgIGluIGFzY2VuZGluZyBvcmRlci4iLAotIiAiLAotIlZhcmlvdXMgZnVu Y3Rpb25zIGFyZSBhdmFpbGFibGUgZm9yIGFycmF5IG9wZXJhdGlvbnM7IHNlZSBIRUxQIEZVTkNU SU9OIGZvciIsCi0iZGV0YWlscy4gIFRoZXNlIGluY2x1ZGUgXFxmZGltZW5zaW9uKCksIFxcZmFy cmF5bG9vaygpLCBcXGZmaWxlcygpLCBcCi1cXGZzcGxpdCgpLCIsCi0iYW5kIG1hbnkgbW9yZS4i LAotIiJ9OwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBaQ09QWQotc3RhdGljIGNoYXIg KiBobXh4Y3B5W10gPSB7Ci0iU3ludGF4OiBDT1BZIFsgc3dpdGNoZXMgXSBmaWxlMSBmaWxlMiIs Ci0iICBDb3BpZXMgdGhlIHNvdXJjZSBmaWxlIChmaWxlMSkgdG8gdGhlIGRlc3RpbmF0aW9uIGZp bGUgKGZpbGUyKS4gIElmIGZpbGUyIiwKLSIgIGlzIGEgZGlyZWN0b3J5LCBmaWxlMSBjYW4gY29u dGFpbiB3aWxkY2FyZHMgdG8gZGVub3RlIGEgZ3JvdXAgb2YgZmlsZXMgdG8iLAotIiAgYmUgY29w aWVkIHRvIHRoZSBnaXZlbiBkaXJlY3RvcnkuICBTd2l0Y2hlczoiLAotIiAiLAotIiAgL0xJU1Qi LAotIiAgICBQcmludCB0aGUgZmlsZW5hbWVzIGFuZCBzdGF0dXMgd2hpbGUgY29weWluZy4gIFN5 bm9ueW1zOiAvTE9HLCAvVkVSQk9TRS4iLAotIiAiLAotIiAgL05PTElTVCIsCi0iICAgIENvcHkg c2lsZW50bHkgKGRlZmF1bHQpLiBTeW5vbnltczogL05PTE9HLCAvUVVJRVQuIiwKLSIgIiwKLSIg IC9QUkVTRVJWRSIsCi0iICAgIENvcHkgdGltZXN0YW1wIGFuZCBwZXJtaXNzaW9ucyBmcm9tIHNv dXJjZSBmaWxlIHRvIGRlc3RpbmF0aW9uIGZpbGUuIiwKLSIgIiwKLSIgIC9PVkVSV1JJVEU6e0FM V0FZUyxORVZFUixORVdFUixPTERFUn0iLAotIiAgICBXaGVuIGNvcHlpbmcgZnJvbSBvbmUgZGly ZWN0b3J5IHRvIGFub3RoZXIsIHRoaXMgdGVsbHMgd2hhdCB0byBkbyB3aGVuIiwKLSIgICAgdGhl IGRlc3RpbmF0aW9uIGZpbGUgYWxyZWFkeSBleGlzdHM6IG92ZXJ3cml0ZSBpdCBhbHdheXM7IG5l dmVyOyBvbmx5IGlmIiwKLSIgICAgdGhlIHNvdXJjZSBmaWxlIGlzIG5ld2VyOyBvciBvbmx5IGlm IHRoZSBzb3VyY2UgZmlsZSBpcyBvbGRlci4iLAotIiAiLAotIiAgL0FQUEVORCIsCi0iICAgIEFw cGVuZCB0aGUgc291cmNlIGZpbGUgdG8gdGhlIGRlc3RpbmF0aW9uIGZpbGUuICBJbiB0aGlzIGNh c2UgdGhlIHNvdXJjZSIsCi0iICAgIGZpbGUgc3BlY2lmaWNhdGlvbiBjYW4gY29udGFpbiB3aWxk Y2FyZHMsIGFuZCBhbGwgdGhlIG1hdGNoaW5nIHNvdXJjZSIsCi0iICAgIGZpbGVzIGFyZSBhcHBl bmRlZCwgb25lIGFmdGVyIHRoZSBvdGhlciBpbiBhbHBoYWJldGljYWwgb3JkZXIgYnkgbmFtZSwi LAotIiAgICB0byB0aGUgZGVzdGluYXRpb24gZmlsZS4iLAotIiAiLAotIiAgL1NXQVAtQllURVMi LAotIiAgICBTd2FwIGJ5dGVzIHdoaWxlIGNvcHlpbmcgKGUuZy4gZm9yIGNvbnZlcnRpbmcgYmV0 d2VlbiBCaWctRW5kaWFuIGFuZCIsCi0iICAgIExpdHRsZS1FbmRpYW4gYmluYXJ5IGRhdGEgZm9y bWF0cykuIiwKLSNpZm5kZWYgTk9TUEwKLSIgIiwKLSIgIC9GUk9NQjY0IiwKLSIgICAgQ29udmVy dCBmcm9tIEJhc2U2NCBlbmNvZGluZyB3aGlsZSBjb3B5aW5nLiIsCi0iICIsCi0iICAvVE9CNjQi LAotIiAgICBDb252ZXJ0IHRvIEJhc2U2NCBlbmNvZGluZyB3aGlsZSBjb3B5aW5nLiIsCi0jZW5k aWYgLyogTk9TUEwgKi8KLSIiCi19OwotI2VuZGlmIC8qIFpDT1BZICovCi0KLSNpZm5kZWYgTk9G UklMTFMKLXN0YXRpYyBjaGFyICogaG14eHJlbltdID0gewotI2lmZGVmIExPQ1VTCi0iICBJZiBM T0NVUyBpcyBSRU1PVEUgb3IgTE9DVVMgaXMgQVVUTyBhbmQgeW91IGhhdmUgYW4gRlRQIGNvbm5l Y3Rpb24sIiwKLSIgIHRoaXMgY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvIFJFTU9URSBSRU5BTUUg KFJSRU4pLiAgT3RoZXJ3aXNlOiIsCi0iICIsCi0jZW5kaWYgLyogTE9DVVMgKi8KLSJTeW50YXg6 IFJFTkFNRSBbIHN3aXRjaGVzIF0gbmFtZTEgWyBuYW1lMiBdIiwKLSIgIFJlbmFtZXMgdGhlIHNv dXJjZSBmaWxlIChuYW1lMSkgdG8gdGhlIHRhcmdldCBuYW1lMi4gIElmIG5hbWUyIGlzIGEiLAot IiAgZGlyZWN0b3J5LCBuYW1lMSBpcyBhbGxvd2VkIHRvIGNvbnRhaW4gd2lsZGNhcmRzLCBhbmQg dGhlIGZpbGUocykgbWF0Y2hpbmciLAotIiAgbmFtZTEgYXJlIG1vdmVkIHRvIGRpcmVjdG9yeSBu YW1lMiwgc3ViamVjdCB0byBydWxlcyBvZiB0aGUgdW5kZXJseWluZyIsCi0iICBvcGVyYXRpbmcg c3lzdGVtIHJlZ2FyZGluZyByZW5hbWluZyBhY3Jvc3MgZGlzayBib3VuZGFyaWVzLCBldGMuIFN3 aXRjaGVzOiIsCi0iICIsCi0iICAvTElTVCIsCi0iICAgIFByaW50IHRoZSBmaWxlbmFtZXMgYW5k IHN0YXR1cyB3aGlsZSByZW5hbWluZy4gIFN5bm9ueW1zOiAvTE9HLCAvVkVSQk9TRSIsCi0iICIs Ci0iICAvTk9MSVNUIiwKLSIgICAgUmVuYW1lIHNpbGVudGx5IChkZWZhdWx0KS4gU3lub255bXM6 IC9OT0xPRywgL1FVSUVUIiwKLSIgIiwKLSIgIC9DT0xMSVNJT046e0ZBSUwsU0tJUCxPVkVSV1JJ VEV9IiwKLSIgICAgVGVsbHMgd2hhdCB0byBkbyBpZiBhIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gKG9y IGRlcml2ZWQpIG5ldyBuYW1lIGFscmVhZHkiLAotIiAgICBleGlzdHM6IGZhaWwgKGFuZCBzdG9w IHdpdGhvdXQgcmVuYW1pbmcgYW55IGZpbGVzKTsgc2tpcCB0aGlzIGZpbGUiLAotIiAgICB3aXRo b3V0IHJlbmFtaW5nIGl0IGFuZCBnbyBvbiB0byB0aGUgbmV4dCBvbmUsIGlmIGFueTsgb3Igb3Zl cndyaXRlICh0aGUiLAotIiAgICBleGlzdGluZyBmaWxlKS4gIFBST0NFRUQgaXMgYSBzeW5vbnlt IGZvciBTS0lQLiIsCi0iICIsCi0iICAvU0lNVUxBVEUiLAotIiAgICBTaG93IHdoYXQgdGhlIGVm ZmVjdHMgb2YgdGhlIFJFTkFNRSBjb21tYW5kIHdvdWxkIGJlIHdpdGhvdXQgYWN0dWFsbHkiLAot IiAgICByZW5hbWluZyBhbnkgZmlsZXMuIiwKLSIgIiwKLSIgIFdoZW4gYW55IG9mIHRoZSBmb2xs b3dpbmcgc3dpdGNoZXMgaXMgZ2l2ZW4sIG5hbWUyIG11c3QgZWl0aGVyIGJlIHRoZSIsCi0iICB0 aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSwgb3IgZWxzZSBvbWl0dGVkLCBhbmQgbmFtZTEgaXMgYWxs b3dlZCB0byBjb250YWluIiwKLSIgIGNvbnRhaW4gd2lsZGNhcmRzLCBhbGxvd2luZyBtdWx0aXBs ZSBmaWxlcyB0byBiZSByZW5hbWVkIGF0IG9uY2UuIElmIG5hbWUyIiwKLSIgIGlzIGdpdmVuLCB0 aGVuIGFsbCBmaWxlcyBtYXRjaGluZyBuYW1lMSBhcmUgbW92ZWQgdG8gdGhlIG5hbWUyIGRpcmVj dG9yeSIsCi0iICBhZnRlciBiZWluZyByZW5hbWVkLiIsCi0iICIsCi0iICAvTE9XRVI6e0FMTCxV UFBFUn0iLAotIiAgICBDb252ZXJ0cyBsZXR0ZXJzIGluIHRoZSBmaWxlbmFtZSB0byBsb3dlcmNh c2UuICBBTEwgbWVhbnMgdG8gY29udmVydCIsCi0iICAgIGFsbCBtYXRjaGluZyBmaWxlbmFtZXMs IFVQUEVSIG1lYW5zIHRvIGNvbnZlcnQgb25seSB0aG9zZSBmaWxlbmFtZXMiLAotIiAgICB0aGF0 IGNvbnRhaW4gbm8gbG93ZXJjYXNlIGxldHRlcnMuICBUaGUgc3dpdGNoIGFyZ3VtZW50IGNhbiBi ZSBvbWl0dGVkLCIsCi0iICAgIGluIHdoaWNoIGNhc2UgQUxMIGZpbGVuYW1lcyBhcmUgY29udmVy dGVkLiIsCi0iICIsCi0iICAvVVBQRVI6e0FMTCxMT1dFUn0iLAotIiAgICBDb252ZXJ0cyBsZXR0 ZXJzIGluIHRoZSBmaWxlbmFtZSB0byB1cHBlcmNhc2UuICBBTEwgbWVhbnMgdG8gY29udmVydCIs Ci0iICAgIGFsbCBtYXRjaGluZyBmaWxlbmFtZXMsIExPV0VSIG1lYW5zIHRvIGNvbnZlcnQgb25s eSB0aG9zZSBmaWxlbmFtZXMiLAotIiAgICB0aGF0IGNvbnRhaW4gbm8gdXBwZXJjYXNlIGxldHRl cnMuICBBcyB3aXRoIC9MT1dFUiwgQUxMIGlzIHRoZSBkZWZhdWx0IiwKLSIgICAgc3dpdGNoIGFy Z3VtZW50LiIsCi0iICIsCi0iICAvRklYU1BBQ0VTOnMiLAotIiAgICBSZXBsYWNlcyBhbGwgc3Bh Y2VzIGluIGVhY2ggbWF0Y2hpbmcgZmlsZW5hbWUgYnkgdGhlIHN0cmluZyBzLCB3aGljaCBtYXki LAotIiAgICBiZSBlbXB0eSwgYSBzaW5nbGUgY2hhcmFjdGVyLCBvciBhIHN0cmluZyBvZiBjaGFy YWN0ZXJzLiAgVGhlIGRlZmF1bHQiLAotIiAgICByZXBsYWNlbWVudCAoaWYgbm8gYXJndW1lbnQg aXMgZ2l2ZW4pIGlzIHVuZGVyc2NvcmUgKF8pLiIsCi0iICIsCi0iICAvUkVQTEFDRTp7e3N0cmlu ZzF9e3N0cmluZzJ9e29wdGlvbnN9fSIsCi0iICAgIFJlcGxhY2VzIGFsbCBvciBzZWxlY3RlZCBv Y2N1cnJlbmNlcyBvZiBzdHJpbmcxIHdpdGggc3RyaW5nMiBpbiB0aGUiLAotIiAgICBtYXRjaGlu ZyBmaWxlbmFtZXMuICBUaGUgYnJhY2VzIGFyZSBwYXJ0IG9mIHRoZSBjb21tYW5kLiAgVGhlIG9w dGlvbnMiLAotIiAgICBzdHJpbmcgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJz OiIsCi0iICAgICBBOiBTdHJpbmcgbWF0Y2hpbmcgaXMgY2FzZS1zZW5zaXRpdmUuIiwKLSIgICAg IGE6IFN0cmluZyBtYXRjaGluZyBpcyBjYXNlLWluc2Vuc2l0aXZlLiIsCi0iICAgICBeOiBTdHJp bmcgbWF0Y2hpbmcgaXMgYW5jaG9yZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZW5hbWUu IiwKLSIgICAgICQ6IFN0cmluZyBtYXRjaGluZyBpcyBhbmNob3JlZCB0byB0aGUgZW5kIG9mIHRo ZSBmaWxlbmFtZS4iLAotIiAgICAgMTogT25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUg c3RyaW5nIChpZiBhbnkpIHdpbGwgYmUgY2hhbmdlZC4iLAotIiAgICAgMjogT25seSB0aGUgc2Vj b25kIG9jY3VycmVuY2UsIGFuZCBzbyBvbiBmb3IgYWxsIGRpZ2l0cyB1cCB0byA5LiIsCi0iICAg ICAtOiAoYmVmb3JlIGEgZGlnaXQpIE9jY3VycmVuY2VzIGFyZSBjb3VudGVkIGZyb20gdGhlIHJp Z2h0LiIsCi0iICAgICB+OiAoYmVmb3JlIG9jY3VycmVuY2UpIEFsbCBvY2N1cmVuY2VzIEJVVCB0 aGUgb25lIGdpdmVuIGFyZSBjaGFuZ2VkLiIsCi0iICIsCi0iICAvQ09OVkVSVDpjc2V0MTpjc2V0 MSIsCi0iICAgIENvbnZlcnRzIGVhY2ggbWF0Y2hpbmcgZmlsZW5hbWUgZnJvbSBjaGFyYWN0ZXIt c2V0IDEgdG8gY2hhcmFjdGVyLXNldCAyLiIsCi0iICAgIENoYXJhY3RlciBzZXRzIGFyZSB0aGUg c2FtZSBhcyBmb3IgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVC4iLAotIiAiLAotIiAgR2xvYmFsIHZh bHVlcyBmb3IgL0xJU1QgYW5kIENPTExJU0lPTiBjYW4gYmUgc2V0IHdpdGggU0VUIFJFTkFNRSBh bmQiLAotIiAgZGlzcGxheWVkIHdpdGggU0hPVyBSRU5BTUUuIiwKLSIiCi19OwotI2VuZGlmIC8q IE5PRlJJTExTICovCi0KLXN0YXRpYyBjaGFyICoKLWNtZGxobHBbXSA9IHsKLSJDb21tYW5kLWxp bmUgb3B0aW9ucyBhcmUgZ2l2ZW4gYWZ0ZXIgdGhlIHByb2dyYW0gbmFtZSBpbiB0aGUgc3lzdGVt IiwKLSJjb21tYW5kIHRoYXQgeW91IHVzZSB0byBzdGFydCBLZXJtaXQuICBFeGFtcGxlOiIsCi0i ICIsCi0iIGtlcm1pdCAtaSAtcyBvb2ZhLmV4ZSIsCi0iICIsCi0idGVsbHMgS2VybWl0IHRvIHNl bmQgKC1zKSB0aGUgZmlsZSBvb2ZhLmV4ZSBpbiBiaW5hcnkgKC1pKSBtb2RlLiIsCi0iICIsCi0i Q29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIGNhc2Utc2Vuc2l0aXZlOyBcIi1zXCIgaXMgZGlmZmVy ZW50IGZyb20gXCItU1wiLiIsCi0jaWZkZWYgVk1TCi0iSW4gVk1TLCB1cHBlcmNhc2Ugb3B0aW9u cyBtdXN0IGJlIGVuY2xvc2VkIGluIGRvdWJsZXF1b3RlczogIiwKLSIgIiwKLSIgJCBrZXJtaXQg XCItWVwiIFwiLVNcIiAtcyBvb2ZhLnR4dCAiLAotI2VuZGlmIC8qIFZNUyAqLwotIiAiLAotIklm IGFueSBcImFjdGlvbiBvcHRpb25zXCIgYXJlIGluY2x1ZGVkIG9uIHRoZSBjb21tYW5kIGxpbmUs IEtlcm1pdCBleGl0cyIsCi0iYWZ0ZXIgZXhlY3V0aW5nIGl0cyBjb21tYW5kLWxpbmUgb3B0aW9u cy4gIElmIC1TIGlzIGluY2x1ZGVkLCBvciBubyBhY3Rpb24iLAotIm9wdGlvbnMgd2VyZSBnaXZl biwgS2VybWl0IGVudGVycyBpdHMgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXIgYW5kIiwKLSJp c3N1ZXMgaXRzIHByb21wdC4iLAotIiAiLAotIkNvbW1hbmQtbGluZSBvcHRpb25zIGFyZSBzaW5n bGUgY2hhcmFjdGVycyBwcmVjZWRlZCBieSBkYXNoICgtKS4gIFNvbWUiLAotInJlcXVpcmUgYW4g XCJhcmd1bWVudCxcIiBvdGhlcnMgZG8gbm90LiAgSWYgYW4gYXJndW1lbnQgY29udGFpbnMgc3Bh Y2VzLCBpdCIsCi0ibXVzdCBiZSBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXM6IiwKLSIgIiwKLSIg a2VybWl0IC1zIFwiZmlsZW5hbWUgd2l0aCBzcGFjZXNcIiIsCi0iICIsCi0iXAotQW4gb3B0aW9u IHRoYXQgZG9lcyBub3QgcmVxdWlyZSBhbiBhcmd1bWVudCBjYW4gYmUgYnVuZGxlZCB3aXRoIG90 aGVyIG9wdGlvbnM6IgotLAotIiAiLAotIiBrZXJtaXQgLVFpcyBvb2ZhLmV4ZSIsCi0iICIsCi0i RXhjZXB0aW9ucyB0byB0aGUgcnVsZXM6IiwKLSIgIiwKLSIgLiBJZiB0aGUgZmlyc3QgY29tbWFu ZC1saW5lIG9wdGlvbiBpcyBhIGZpbGVuYW1lLCBLZXJtaXQgZXhlY3V0ZXMgY29tbWFuZHMiLAot IiAgIGZyb20gdGhlIGZpbGUuICBBZGRpdGlvbmFsIGNvbW1hbmQtbGluZSBvcHRpb25zIGNhbiBm b2xsb3cgdGhlIGZpbGVuYW1lLiIsCi0iICIsCi0iIC4gVGhlIHNwZWNpYWwgb3B0aW9uIFwiPVwi IChlcXVhbCBzaWduKSBvciBcIi0tXCIgKGRvdWJsZSBoeXBoZW4pIG1lYW5zIHRvIiwKLSIgICB0 cmVhdCB0aGUgcmVzdCBvZiB0aGUgY29tbWFuZCBsaW5lIGFzIGRhdGEsIHJhdGhlciB0aGFuIGNv bW1hbmRzOyB0aGlzIiwKLSIgICBkYXRhIGlzIHBsYWNlZCBpbiB0aGUgYXJndW1lbnQgdmVjdG9y IGFycmF5LCBcXCZAW10sIGFsb25nIHdpdGggdGhlIG90aGVyIiwKLSIgICBpdGVtcyBvbiB0aGUg Y29tbWFuZCBsaW5lLCBhbmQgYWxzbyBpbiB0aGUgdG9wLWxldmVsIFxcJTEuLlxcJTkgdmFyaWFi bGVzLiIKLSwKLSIgIiwKLSNpZmRlZiBLRVJCQU5HCi0iIC4gQSBzaW1pbGFyIG9wdGlvbiBcIitc IiAocGx1cyBzaWduKSBtZWFuczogdGhlIG5hbWUgb2YgYSBLZXJtaXQgc2NyaXB0IiwKLSIgICBm aWxlIGZvbGxvd3MuICBUaGlzIGZpbGUgaXMgdG8gYmUgZXhlY3V0ZWQsIGFuZCBpdHMgbmFtZSBh c3NpZ25lZCB0byBcXCUwIiwKLSIgICBhbmQgXFwmX1swXS4gIEFsbCBzdWJzZXF1ZW50IGNvbW1h bmQtbGluZSBhcmd1bWVudHMgYXJlIHRvIGJlIGlnbm9yZWQgYnkiLAotIiAgIEtlcm1pdCBidXQg bWFkZSBhdmFpbGFibGUgdG8gdGhlIHNjcmlwdCBhcyBcXCUxLCBcXCUyLCAuLi4sIGFzIHdlbGwg YXMiLAotIiAgIGluIHRoZSBhcmd1bWVudC12ZWN0b3IgYXJyYXlzLiAgVGhlIGluaXRpYWxpemF0 aW9uIGZpbGUgaXMgbm90IGV4ZWN1dGVkIiwKLSIgICBhdXRvbWF0aWNhbGx5IGluIHRoaXMgY2Fz ZS4iLAotIiAiLAotI2VuZGlmIC8qIEtFUkJBTkcgKi8KLSIgLiBUaGUgLXMgb3B0aW9uIGNhbiBh Y2NlcHQgbXVsdGlwbGUgZmlsZW5hbWVzLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLiIsCi0iICIsCi0i IC4gdGhlIC1qIGFuZCAtSiBvcHRpb25zIGFsbG93IGFuIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVu dCwgdGhlIFRDUCBwb3J0IiwKLSIgICBuYW1lIG9yIG51bWJlci4iLAotIiAiLAotIlR5cGUgXCJo ZWxwIG9wdGlvbnMgYWxsXCIgdG8gbGlzdCBhbGwgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zLiIs Ci0iVHlwZSBcImhlbHAgb3B0aW9uIHhcIiB0byBzZWUgdGhlIGhlbHAgbWVzc2FnZSBmb3Igb3B0 aW9uIHguIiwKLSIgIiwKLSJLZXJtaXQgYWxzbyBvZmZlcnMgYSBzZWxlY3Rpb24gb2YgXCJleHRl bmRlZCBjb21tYW5kLWxpbmVcIiBvcHRpb25zLiIsCi0iVGhlc2UgYmVnaW4gd2l0aCB0d28gZGFz aGVzLCBmb2xsb3dlZCBieSBhIGtleXdvcmQsIGFuZCB0aGVuLCBpZiB0aGUgb3B0aW9uIiwKLSJo YXMgYXJndW1lbnRzLCBhIGNvbG9uICg6KSBvciBlcXVhbCBzaWduICg9KSBmb2xsb3dlZCBieSB0 aGUgYXJndW1lbnQuIiwKLSJVbmxpa2Ugc2luZ2xlLWxldHRlciBvcHRpb25zLCBleHRlbmRlZCBv cHRpb24ga2V5d29yZHMgYXJlbid0IGNhc2Ugc2Vuc2l0aXZlIiwKLSJhbmQgdGhleSBjYW4gYmUg YWJicmV2aWF0ZWQgdG8gYW55IGxlbmd0aCB0aGF0IHN0aWxsIGRpc3Rpbmd1aXNoZXMgdGhlbSBm cm9tIiwKLSJvdGhlciBleHRlbmRlZC1vcHRpb24ga2V5d29yZHMuICBFeGFtcGxlOiIsCi0iICIs Ci0iICBrZXJtaXQgLS1iYW5uZXI6b29mYS50eHQiLAotIiAiLAotIndoaWNoIGRlc2lnbmF0ZXMg dGhlIGZpbGUgb29mYS50eHQgdG8gYmUgcHJpbnRlZCB1cG9uIHN0YXJ0dXAsIHJhdGhlciB0aGFu IiwKLSJ0aGUgYnVpbHQtaW4gYmFubmVyIChncmVldGluZykgdGV4dC4gIFRvIG9idGFpbiBhIGxp c3Qgb2YgYXZhaWxhYmxlIiwKLSJleHRlbmRlZCBvcHRpb25zLCB0eXBlIFwiaGVscCBleHRlbmRl ZC1vcHRpb25zID9cIi4gIFRvIGdldCBoZWxwIGFib3V0IGFsbCIsCi0iZXh0ZW5kZWQgb3B0aW9u cywgdHlwZSBcImhlbHAgZXh0ZW5kZWQtb3B0aW9uc1wiLiAgVG8gZ2V0IGhlbHAgYWJvdXQgYSIs Ci0icGFydGljdWxhciBleHRlbmRlZCBvcHRpb24sIHR5cGUgXCJoZWxwIGV4dGVuZGVkLW9wdGlv biB4eHhcIiwgd2hlcmUgXCJ4eHhcIiIsCi0iaXMgdGhlIG9wdGlvbiBrZXl3b3JkLiIsCi0jaWZk ZWYgQ09NTUVOVAotI2lmbmRlZiBOT0lLU0QKLSIgIiwKLSJBdCBwcmVzZW50LCBtb3N0IG9mIHRo ZSBleHRlbmRlZCBvcHRpb25zIGFwcGx5IG9ubHkgdG8gdGhlIEludGVybmV0IEtlcm1pdCIsCi0i U2VydmljZSBEYWVtb24gKElLU0QpLiAgVHlwZSBcImhlbHAgaWtzZFwiIGZvciBkZXRhaWxzLiIs Ci0jZW5kaWYgLyogTk9JS1NEICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotIiIKLX07Ci0KLQot I2lmbmRlZiBOT0hFTFAKLSNpZm5kZWYgTk9DTURMCi1pbnQKLWRveG9wdHMoKSB7Ci0gICAgZXh0 ZXJuIGNoYXIgKiB4b3B0aGxwW10sICogeGFyZ2hscFtdOwotICAgIGV4dGVybiBzdHJ1Y3Qga2V5 dGFiIHhhcmd0YWJbXTsKLSAgICBleHRlcm4gaW50IG54YXJnczsKLSAgICBpbnQgaSwgeCwgeSwg biA9IDA7Ci0jaWZkZWYgQ0tfVFRHV1NJWgotI2lmZGVmIE9TMgotICAgIHR0Z2N3c3ooKTsKLSNl bHNlIC8qIE9TMiAqLwotICAgIC8qIENoZWNrIHdoZXRoZXIgd2luZG93IHNpemUgY2hhbmdlZCAq LwotICAgIGlmICh0dGd3c2l6KCkgPiAwKSB7Ci0gICAgICAgIGlmICh0dF9yb3dzID4gMCAmJiB0 dF9jb2xzID4gMCkgewotICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOwotICAgICAgICAg ICAgY21kX2NvbHMgPSB0dF9jb2xzOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICB5ID0gY21rZXkoeGFyZ3RhYiwKLSAgICAg ICAgICAgICAgbnhhcmdzLAotICAgICAgICAgICAgICAiRXh0ZW5kZWQgYXJndW1lbnQgd2l0aG91 dCB0aGUgXCItLVwiIHByZWZpeCIsCi0gICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICB4 eHN0cmluZwotICAgICAgICAgICAgICApOwotICAgIGlmICh5ID09IC0zKSB7Ci0JcHJpbnRmKCJc biIpOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0gICAg ICAgIGZvciAoaSA9IDA7IGkgPD0gWEFfTUFYOyBpKyspIHsKLSAgICAgICAgICAgIGlmICh4b3B0 aGxwW2ldKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xuIix4b3B0aGxwW2ldKTsKLSAg ICAgICAgICAgICAgICBwcmludGYoIiAgICVzXG4iLHhhcmdobHBbaV0pOwotICAgICAgICAgICAg ICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgICAgICBuICs9IDM7Ci0gICAgICAgICAgICAg ICAgaWYgKG4gPiAoY21kX3Jvd3MgLSA2KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWFz a21vcmUoKSkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBuID0gMDsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0g ZWxzZSBpZiAoeSA8IDApCi0gICAgICByZXR1cm4oeSk7Ci0gICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKQotICAgICAgcmV0dXJuKHgpOwotICAgIHByaW50ZigiXG4lc1xuIix4b3B0aGxwW3ldKTsK LSAgICBwcmludGYoIiAgICVzXG5cbiIseGFyZ2hscFt5XSk7Ci0gICAgcmV0dXJuKDEpOwotfQot Ci1pbnQKLWRvaG9wdHMoKSB7Ci0gICAgaW50IGksIG4sIHgsIHksIHosIGFsbCA9IDAsIG1zZyA9 IDA7Ci0gICAgY2hhciAqczsKLSAgICBleHRlcm4gY2hhciAqb3B0aGxwW10sICphcmdobHBbXTsK LSAgICBleHRlcm4gY2hhciAqIHhvcHRobHBbXSwgKiB4YXJnaGxwW107Ci0gICAgZXh0ZXJuIGlu dCBvcHRhY3RbXTsKLSAgICBpZiAoKHggPSBjbXR4dCgiQSBjb21tYW5kLWxpbmUgb3B0aW9uIGNo YXJhY3RlcixcblwKLW9yIHRoZSB3b3JkIEFMTCwgb3IgY2FycmlhZ2UgcmV0dXJuIGZvciBhbiBv dmVydmlldyIsCi0gICAgICAgICAgICAgICAgICAgIiIsICZzLCB4eHN0cmluZykpIDwgMCkKLSAg ICAgIHJldHVybih4KTsKLSAgICBpZiAoISpzKQotICAgICAgbXNnID0gMTsKLSAgICBlbHNlIGlm ICghc3RyY21wKHMsImFsbCIpIHx8ICghc3RyY21wKHMsIkFMTCIpKSkKLSAgICAgIGFsbCA9IDE7 Ci0gICAgZWxzZSBpZiAoKnMgPT0gJy0nKSAgICAgICAgICAgICAgICAgLyogQmUgdG9sZXJhbnQg b2YgbGVhZGluZyBoeXBoZW4gKi8KLSAgICAgIHMrKzsKLSAgICBpZiAoIWFsbCAmJiAoaW50KXN0 cmxlbihzKSA+IDEpIHsKLSAgICAgICAgcHJpbnRmKCI/QSBzaW5nbGUgY2hhcmFjdGVyLCBwbGVh c2UsIG9yIGNhcnJpYWdlIHRvIGxpc3QgdGhlbSBhbGwuXG4iKTsKLSAgICAgICAgcmV0dXJuKC05 KTsKLSAgICB9Ci0gICAgaWYgKGFsbCkgewotICAgICAgICB5ID0gMzM7Ci0gICAgICAgIHogPSAx Mjc7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgeSA9ICpzOwotICAgICAgICB6ID0gKHkgPT0gMCkg PyAxMjcgOiB5OwotICAgICAgICBpZiAoeSA9PSAwKSB5ID0gMzM7Ci0gICAgfQotI2lmZGVmIENL X1RUR1dTSVoKLSNpZmRlZiBPUzIKLSAgICB0dGdjd3N6KCk7Ci0jZWxzZSAvKiBPUzIgKi8KLSAg ICAvKiBDaGVjayB3aGV0aGVyIHdpbmRvdyBzaXplIGNoYW5nZWQgKi8KLSAgICBpZiAodHRnd3Np eigpID4gMCkgewotICAgICAgICBpZiAodHRfcm93cyA+IDAgJiYgdHRfY29scyA+IDApIHsKLSAg ICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93czsKLSAgICAgICAgICAgIGNtZF9jb2xzID0gdHRf Y29sczsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDS19U VEdXU0laICovCi0gICAgcHJpbnRmKCJcbiIpOwotICAgIGZvciAoaSA9IDAsIG4gPSAxOyBtc2cg IT0gMCAmJiAqY21kbGhscFtpXTsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigiJXNcbiIsY21kbGhs cFtpXSk7Ci0gICAgICAgIGlmICgrK24gPiAoY21kX3Jvd3MgLSAzKSkgewotICAgICAgICAgICBp ZiAoIWFza21vcmUoKSkKLSAgICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgIGVsc2UK LSAgICAgICAgICAgICBuID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYWxsKSB7Ci0g ICAgICAgIHByaW50ZigiVGhlIGZvbGxvd2luZyBjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgYXZh aWxhYmxlOlxuXG4iKTsKLSAgICAgICAgbiArPSAyOwotICAgIH0KLSAgICBmb3IgKGkgPSB5OyBt c2cgPT0gMCAmJiBpIDw9IHo7IGkrKykgewotICAgICAgICBpZiAoIW9wdGhscFtpXSkKLSAgICAg ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGFyZ2hscFtpXSkgeyAgICAgICAgICAgICAgICAv KiBPcHRpb24gd2l0aCBhcmcgKi8KLSAgICAgICAgICAgIHByaW50ZigiIC0lYyA8YXJnPiVzXG4i LChjaGFyKWksKG9wdGFjdFtpXT8iIChhY3Rpb24gb3B0aW9uKSI6IiIpKTsKLQotICAgICAgICAg ICAgcHJpbnRmKCIgICAgICVzXG4iLG9wdGhscFtpXSk7Ci0gICAgICAgICAgICBwcmludGYoIiAg ICAgQXJndW1lbnQ6ICVzXG5cbiIsYXJnaGxwW2ldKTsKLSAgICAgICAgICAgIHggPSA0OwotICAg ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9wdGlvbiB3aXRob3V0IGFy ZyAqLwotICAgICAgICAgICAgcHJpbnRmKCIgLSVjICAlcyVzXG4iLAotICAgICAgICAgICAgICAg ICAgIChjaGFyKWksIG9wdGhscFtpXSwKLSAgICAgICAgICAgICAgICAgICAob3B0YWN0W2ldPyIg KGFjdGlvbiBvcHRpb24pIjoiIikKLSAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBw cmludGYoIiAgICAgQXJndW1lbnQ6IChub25lKVxuXG4iKTsKLSAgICAgICAgICAgIHggPSAzOwot ICAgICAgICB9Ci0gICAgICAgIG4gKz0geDsKLSAgICAgICAgaWYgKG4gPiAoY21kX3Jvd3MgLSB4 IC0gMSkpIHsKLSAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKQotICAgICAgICAgICAgICByZXR1 cm4oMCk7Ci0gICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgbiA9IDA7Ci0gICAgICAgIH0K LSAgICB9Ci0gICAgaWYgKGFsbCkgewkJCQkvKiBKZWZmLCBKYW4gMjAwMyAqLwotICAgICAgICBw cmludGYoIlxuIik7Ci0gICAgICAgIGlmICgrK24gPj0gY21kX3Jvd3MpIHsKLSAgICAgICAgICAg IGlmICghYXNrbW9yZSgpKQotICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0JICAgIGVsc2UKLSAg ICAgICAgICAgICAgbiA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCJUaGUgZm9sbG93 aW5nIGV4dGVuZGVkIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiIpOwotICAgICAgICBpZiAoKytu ID49IGNtZF9yb3dzKSB7Ci0gICAgICAgICAgICBpZiAoIWFza21vcmUoKSkKLSAgICAgICAgICAg ICAgcmV0dXJuKDApOwotCSAgICBlbHNlCi0gICAgICAgICAgICAgIG4gPSAwOwotICAgICAgICB9 Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgaWYgKCsrbiA+PSBjbWRfcm93cykgewot ICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCi0gICAgICAgICAgICAgIHJldHVybigwKTsKLQkg ICAgZWxzZQotICAgICAgICAgICAgICBuID0gMDsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGkg PSAwOyBpIDw9IFhBX01BWDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoeG9wdGhscFtpXSkgewot ICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIseG9wdGhscFtpXSk7Ci0gICAgICAgICAgICAg ICAgcHJpbnRmKCIgICAlc1xuIix4YXJnaGxwW2ldKTsKLSAgICAgICAgICAgICAgICBwcmludGYo IlxuIik7Ci0gICAgICAgICAgICAgICAgbiArPSAzOwotICAgICAgICAgICAgICAgIGlmIChuID4g KGNtZF9yb3dzIC0gNCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCi0J CSAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotCQkgICAgICBuID0g MDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g ICAgcmV0dXJuKDEpOwotfQotI2VuZGlmIC8qIE5PQ01ETCAqLwotI2VuZGlmIC8qIE5PSEVMUCAq LwotCi0jaWZkZWYgQ0tDSEFOTkVMSU8KLXN0YXRpYyBjaGFyICogaHh4ZmlsZVtdID0gewotIlN5 bnRheDogRklMRSA8c3ViY29tbWFuZD4gWyBzd2l0Y2hlcyBdIDxjaGFubmVsPiBbIDxkYXRhPiBd IiwKLSIgIE9wZW5zLCBjbG9zZXMsIHJlYWRzLCB3cml0ZXMsIGFuZCBtYW5hZ2VzIGxvY2FsIGZp bGVzLiIsCi0iICIsCi0iVGhlIEZJTEUgY29tbWFuZHMgYXJlOiIsCi0iICIsCi0iICBGSUxFIE9Q RU4gICAob3IgRk9QRU4pICAgLS0gT3BlbiBhIGxvY2FsIGZpbGUuIiwKLSIgIEZJTEUgQ0xPU0Ug IChvciBGQ0xPU0UpICAtLSBDbG9zZSBhbiBvcGVuIGZpbGUuIiwKLSIgIEZJTEUgUkVBRCAgIChv ciBGUkVBRCkgICAtLSBSZWFkIGRhdGEgZnJvbSBhbiBvcGVuIGZpbGUuIiwKLSIgIEZJTEUgV1JJ VEUgIChvciBGV1JJVEUpICAtLSBXcml0ZSBkYXRhIHRvIGFuIG9wZW4gZmlsZS4iLAotIiAgRklM RSBMSVNUICAgKG9yIEZMSVNUKSAgIC0tIExpc3Qgb3BlbiBmaWxlcy4iLAotIiAgRklMRSBTVEFU VVMgKG9yIEZTVEFUVVMpIC0tIFNob3cgc3RhdHVzIG9mIGEgY2hhbm5lbC4iLAotIiAgRklMRSBS RVdJTkQgKG9yIEZSRVdJTkQpIC0tIFJld2luZCBhbiBvcGVuIGZpbGUiLAotIiAgRklMRSBDT1VO VCAgKG9yIEZDT1VOVCkgIC0tIENvdW50IGxpbmVzIG9yIGJ5dGVzIGluIGFuIG9wZW4gZmlsZSIs Ci0iICBGSUxFIFNFRUsgICAob3IgRlNFRUspICAgLS0gU2VlayB0byBzcGVjaWZpZWQgc3BvdCBp biBhbiBvcGVuIGZpbGUuIiwKLSIgIEZJTEUgRkxVU0ggIChvciBGRkxVU0gpICAtLSBGbHVzaCBv dXRwdXQgYnVmZmVycyBmb3IgYW4gb3BlbiBmaWxlLiIsCi0iICIsCi0iVHlwZSBIRUxQIEZJTEUg T1BFTiBvciBIRUxQIEZPUEVOIGZvciBkZXRhaWxzIGFib3V0IEZJTEUgT1BFTjsiLAotInR5cGUg SEVMUCBGSUxFIENMT1NFIG9yIEhFTFAgRkNMT1NFIGZvciBkZXRhaWxzIGFib3V0IEZJTEUgQ0xP U0UsIGFuZCBzbyBvbi4iLAotIiAiLAotIlRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSByZWxh dGVkIHRvIHRoZSBGSUxFIGNvbW1hbmQ6IiwKLSIgIiwKLSIgIFxcdihmX21heCkgICAgIC0tIE1h eGltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgY2FuIGJlIG9wZW4gYXQgb25jZSIsCi0iICBcXHYo Zl9lcnJvcikgICAtLSBDb21wbGV0aW9uIGNvZGUgb2YgbW9zdCByZWNlbnQgRklMRSBjb21tYW5k IG9yIGZ1bmN0aW9uIiwKLSIgIFxcdihmX2NvdW50KSAgIC0tIFJlc3VsdCBvZiBtb3N0IHJlY2Vu dCBGSUxFIENPVU5UIGNvbW1hbmQiLAotIiAiLAotIlRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFy ZSByZWxhdGVkIHRvIHRoZSBGSUxFIGNvbW1hbmQ6IiwKLSIgIiwKLSIgIFxcRl9lb2YoKSAgICAg IC0tIENoZWNrIGlmIGNoYW5uZWwgaXMgYXQgRU9GIiwKLSIgIFxcRl9wb3MoKSAgICAgIC0tIEdl dCBjaGFubmVsIHJlYWQvd3JpdGUgcG9zaXRpb24gKGJ5dGUgbnVtYmVyKSIsCi0iICBcXEZfbGlu ZSgpICAgICAtLSBHZXQgY2hhbm5lbCByZWFkL3dyaXRlIHBvc2l0aW9uIChsaW5lIG51bWJlciki LAotIiAgXFxGX2hhbmRsZSgpICAgLS0gR2V0IGZpbGUgaGFuZGxlIiwKLSIgIFxcRl9zdGF0dXMo KSAgIC0tIEdldCBjaGFubmVsIHN0YXR1cyIsCi0iICBcXEZfZ2V0Y2hhcigpICAtLSBSZWFkIGNo YXJhY3RlciIsCi0iICBcXEZfZ2V0bGluZSgpICAtLSBSZWFkIGxpbmUiLAotIiAgXFxGX2dldGJs b2NrKCkgLS0gUmVhZCBibG9jayIsCi0iICBcXEZfcHV0Y2hhcigpICAtLSBXcml0ZSBjaGFyYWN0 ZXIiLAotIiAgXFxGX3B1dGxpbmUoKSAgLS0gV3JpdGUgbGluZSIsCi0iICBcXEZfcHV0YmxvY2so KSAtLSBXcml0ZSBibG9jayIsCi0iICBcXEZfZXJybXNnKCkgICAtLSBFcnJvciBtZXNzYWdlIGZy b20gbW9zdCByZWNlbnQgRklMRSBjb21tYW5kIG9yIGZ1bmN0aW9uIiwKLSIgIiwKLSJUeXBlIEhF TFAgPGZ1bmN0aW9uLW5hbWU+IGZvciBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9uZS4iLAotIiIK LX07Ci0KLXN0YXRpYyBjaGFyICogaHh4Zl9vcFtdID0gewotIlN5bnRheDogRklMRSBPUEVOIFsg c3dpdGNoZXMgXSA8dmFyaWFibGU+IDxmaWxlbmFtZT4iLAotIiAgT3BlbnMgdGhlIGZpbGUgaW5k aWNhdGVkIGJ5IDxmaWxlbmFtZT4gaW4gdGhlIG1vZGUgaW5kaWNhdGVkIGJ5IHRoZSIsCi0iICBz d2l0Y2hlcywgaWYgYW55LCBvciBpZiBubyBzd2l0Y2hlcyBhcmUgaW5jbHVkZWQsIGluIHJlYWQt b25seSBtb2RlLCBhbmQiLAotIiAgYXNzaWducyBhIGNoYW5uZWwgbnVtYmVyIGZvciB0aGUgZmls ZSB0byB0aGUgZ2l2ZW4gdmFyaWFibGUuIiwKLSIgIFN5bm9ueW06IEZPUEVOLiAgU3dpdGNoZXM6 IiwKLSIgIiwKLSIvUkVBRCIsCi0iICBPcGVuIHRoZSBmaWxlIGZvciByZWFkaW5nLiIsCi0iICIs Ci0iL1dSSVRFIiwKLSIgIE9wZW4gdGhlIGZpbGUgZm9yIHdyaXRpbmcuICBJZiAvUkVBRCB3YXMg bm90IGFsc28gc3BlY2lmaWVkLCB0aGlzIGNyZWF0ZXMiLAotIiAgYSBuZXcgZmlsZS4gIElmIC9S RUFEIHdhcyBzcGVjaWZpZWQsIHRoZSBleGlzdGluZyBmaWxlIGlzIHByZXNlcnZlZCwgYnV0IiwK LSIgIHdyaXRpbmcgaXMgYWxsb3dlZC4gIEluIGJvdGggY2FzZXMsIHRoZSByZWFkL3dyaXRlIHBv aW50ZXIgaXMgaW5pdGlhbGx5IiwKLSIgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuIiwK LSIgIiwKLSIvQVBQRU5EIiwKLSIgIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUg YSBuZXcgZmlsZSBhbmQgb3BlbiBpdCBmb3Igd3JpdGluZy4iLAotIiAgSWYgdGhlIGZpbGUgZXhp c3RzLCBvcGVuIGl0IGZvciB3cml0aW5nLCBidXQgd2l0aCB0aGUgd3JpdGUgcG9pbnRlciIsCi0i ICBwb3NpdGlvbmVkIGF0IHRoZSBlbmQuIiwKLSIgIiwKLSIvQklOQVJZIiwKLSNpZmRlZiBWTVMK LSIgIE9wZW5zIHRoZSBmaWxlIGluIGJpbmFyeSBtb2RlIHRvIGluaGliaXQgZW5kLW9mLWxpbmUg Y29udmVyc2lvbnMuIiwKLSNlbHNlCi0jaWZkZWYgT1MyCi0iICBPcGVucyB0aGUgZmlsZSBpbiBi aW5hcnkgbW9kZSB0byBpbmhpYml0IGVuZC1vZi1saW5lIGNvbnZlcnNpb25zLiIsCi0jZWxzZQot I2lmZGVmIFVOSVgKLSIgIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaW4gVU5JWC4iLAotI2Vsc2UK LSIgIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgb24gdGhpcyBwbGF0Zm9ybS4iLAotI2VuZGlmIC8q IFVOSVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSIgIiwKLSJTd2l0 Y2hlcyBjYW4gYmUgY29tYmluZWQgaW4gYW4gd2F5IHRoYXQgbWFrZXMgc2Vuc2UgYW5kIGlzIHN1 cHBvcnRlZCBieSB0aGUiLAotInVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbS4iLAotIiIKLX07 Ci0KLXN0YXRpYyBjaGFyICogaHh4Zl9jbFtdID0gewotIlN5bnRheDogRklMRSBDTE9TRSA8Y2hh bm5lbD4iLAotIiAgQ2xvc2VzIHRoZSBmaWxlIG9uIHRoZSBnaXZlbiBjaGFubmVsIGlmIGl0IHdh cyBvcGVuLiIsCi0iICBBbHNvIHNlZSBIRUxQIEZJTEUgT1BFTi4gIFN5bm9ueW06IEZDTE9TRS4i LAotIiIKLX07Ci0KLXN0YXRpYyBjaGFyICogaHh4Zl9mbFtdID0gewotIlN5bnRheDogRklMRSBG TFVTSCA8Y2hhbm5lbD4iLAotIiAgRmx1c2hlcyBvdXRwdXQgYnVmZmVycyBvbiB0aGUgZ2l2ZW4g Y2hhbm5lbCBpZiBpdCB3YXMgb3BlbiwgZm9yY2luZyIsCi0iICBhbGwgbWF0ZXJpYWwgcHJldmlv dXNseSB3cml0dGVuIHRvIGJlIGNvbW1pdHRlZCB0byBkaXNrLiAgU3lub255bTogRkZMVVNILiIs Ci0iICBBbHNvIGF2YWlsYWJsZSBhcyBcXEZfZmx1c2goKS4iLAotIiIKLX07Ci0KLXN0YXRpYyBj aGFyICogaHh4Zl9saVtdID0gewotIlN5bnRheDogRklMRSBMSVNUIiwKLSIgIExpc3RzIHRoZSBj aGFubmVsIG51bWJlciwgbmFtZSwgbW9kZXMsIGFuZCBwb3NpdGlvbiBvZiBlYWNoIGZpbGUgb3Bl bmVkIiwKLSIgIHdpdGggRklMRSBPUEVOLiAgU3lub255bTogRkxJU1QuIiwKLSIiCi19OwotCi1z dGF0aWMgY2hhciAqIGh4eGZfcmVbXSA9IHsKLSJTeW50YXg6IEZJTEUgUkVBRCBbIHN3aXRjaGVz IF0gPGNoYW5uZWw+IFsgPHZhcmlhYmxlPiBdIiwKLSIgIFJlYWRzIGRhdGEgZnJvbSB0aGUgZmls ZSBvbiB0aGUgZ2l2ZW4gY2hhbm5lbCBudW1iZXIgaW50byB0aGUgPHZhcmlhYmxlPiwiLAotIiAg aWYgb25lIHdhcyBnaXZlbjsgaWYgbm8gdmFyaWFibGUgd2FzIGdpdmVuLCB0aGUgcmVzdWx0IGlz IHByaW50ZWQgb24iLAotIiAgdGhlIHNjcmVlbi4gIFRoZSB2YXJpYWJsZSBzaG91bGQgYmUgYSBt YWNybyBuYW1lIHJhdGhlciB0aGFuIGEgXFwleCIsCi0iICB2YXJpYWJsZSBvciBhcnJheSBlbGVt ZW50IGlmIHlvdSB3YW50IGJhY2tzbGFzaCBjaGFyYWN0ZXJzIGluIHRoZSBmaWxlIHRvIiwKLSIg IGJlIHRha2VuIGxpdGVyYWxseS4gIFN5bm9ueW06IEZSRUFELiAgU3dpdGNoZXM6IiwKLSIgIiwK LSIvTElORSIsCi0iICBTcGVjaWZpZXMgdGhhdCBhIGxpbmUgb2YgdGV4dCBpcyB0byBiZSByZWFk LiAgQSBsaW5lIGlzIGRlZmluZWQgYWNjb3JkaW5nIiwKLSIgIHRvIHRoZSB1bmRlcmx5aW5nIG9w ZXJhdGluZyBzeXN0ZW0ncyB0ZXh0LWZpbGUgZm9ybWF0LiAgRm9yIGV4YW1wbGUsIGluIiwKLSIg IFVOSVggYSBsaW5lIGlzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB1cCB0byBhbmQgaW5jbHVk aW5nIGEgbGluZWZlZWQuIiwKLSIgIFRoZSBsaW5lIHRlcm1pbmF0b3IgKGlmIGFueSkgaXMgcmVt b3ZlZCBiZWZvcmUgYXNzaWduaW5nIHRoZSB0ZXh0IHRvIHRoZSIsCi0iICB2YXJpYWJsZS4gIElm IG5vIHN3aXRjaGVzIGFyZSBpbmNsdWRlZCB3aXRoIHRoZSBGSUxFIFJFQUQgY29tbWFuZCwgL0xJ TkUiLAotIiAgaXMgYXNzdW1lZC4iLAotIiAiLAotIi9TSVpFOm51bWJlciIsCi0iICBTcGVjaWZp ZXMgdGhhdCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIChjaGFyYWN0ZXJzKSBpcyB0byBiZSBy ZWFkLiIsCi0iICBUaGlzIGdpdmVzIGEgc2VtYmxhbmNlIG9mIFwicmVjb3JkIGkvb1wiIGZvciBm aWxlcyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSIsCi0iICBjb250YWluIGxpbmVzLiAgVGhlIHJl c3VsdGluZyBibG9jayBvZiBjaGFyYWN0ZXJzIGlzIGFzc2lnbmVkIHRvIHRoZSIsCi0iICB2YXJp YWJsZSB3aXRob3V0IGFueSBlZGl0aW5nLiIsCi0iICIsCi0iL0NIQVJBQ1RFUiIsCi0iICBFcXVp dmFsZW50IHRvIC9TSVpFOjEuICBJZiBGSUxFIFJFQUQgL0NIQVIgc3VjY2VlZHMgYnV0IHRoZSA8 dmFyaWFibGU+IGlzIiwKLSIgIGVtcHR5LCB0aGlzIGluZGljYXRlcyBhIE5VTCBieXRlIHdhcyBy ZWFkLiIsCi0iICIsCi0iL1RSSU0iLAotIiAgVGVsbHMgS2VybWl0IHRvIHRyaW0gdHJhaWxpbmcg d2hpdGVzcGFjZSB3aGVuIHVzZWQgd2l0aCAvTElORS4gIElnbm9yZWQiLAotIiAgaWYgdXNlZCB3 aXRoIC9DSEFSIG9yIC9TSVpFLiIsCi0iICIsCi0iL1VOVEFCSUZZIiwKLSIgIFRlbGxzIEtlcm1p dCB0byBjb252ZXJ0IHRhYnMgdG8gc3BhY2VzIChhc3N1bWluZyB0YWJzIHNldCBldmVyeSA4IHNw YWNlcykiLAotIiAgd2hlbiB1c2VkIHdpdGggL0xJTkUuICBJZ25vcmVkIGlmIHVzZWQgd2l0aCAv Q0hBUiBvciAvU0laRS4iLAotIiAiLAotIlN5bm9ueW06IEZSRUFELiIsCi0iQWxzbyBhdmFpbGFi bGUgYXMgXFxGX2dldGNoYXIoKSwgXFxGX2dldGxpbmUoKSwgXFxGX2dldGJsb2NrKCkuIiwKLSIi Ci19OwotCi1zdGF0aWMgY2hhciAqIGh4eGZfcndbXSA9IHsKLSJTeW50YXg6IEZJTEUgUkVXSU5E IDxjaGFubmVsPiIsCi0iICBJZiB0aGUgY2hhbm5lbCBpcyBvcGVuLCBtb3ZlcyB0aGUgcmVhZC93 cml0ZSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YiLAotIiAgdGhlIGZpbGUuICBFcXVpdmFs ZW50IHRvIEZJTEUgU0VFSyA8Y2hhbm5lbD4gMC4gIFN5bm9ueW06IEZSRVdJTkQuIiwKLSIgIEFs c28gYXZhaWxhYmxlIGFzIFxcRl9yZXdpbmQoKS4iLAotIiIKLX07Ci0KLXN0YXRpYyBjaGFyICog aHh4Zl9zZVtdID0gewotIlN5bnRheDogRklMRSBTRUVLIFsgc3dpdGNoZXMgXSA8Y2hhbm5lbD4g eyBbeyssLX1dPG51bWJlcj4sIEVPRiB9IiwKLSIgIFN3aXRjaGVzIGFyZSAvQllURSwgL0xJTkUs IC9SRUxBVElWRSwgL0FCU09MVVRFLCBhbmQgL0ZJTkQ6cGF0dGVybi4iLAotIiAgTW92ZXMgdGhl IGZpbGUgcG9pbnRlciBmb3IgdGhpcyBmaWxlIHRvIHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGUi LAotIiAgZmlsZS4gIFN1YnNlcXVlbnQgRklMRSBSRUFEcyBvciBXUklURXMgd2lsbCB0YWtlIHBs YWNlIGF0IHRoYXQgcG9zaXRpb24uIiwKLSIgIElmIG5laXRoZXIgdGhlIC9SRUxBVElWRSBub3Ig L0FCU09MVVRFIHN3aXRjaCBpcyBnaXZlbiwgYW4gdW5zaWduZWQiLAotIiAgPG51bWJlcj4gaXMg YWJzb2x1dGU7IGEgc2lnbmVkIG51bWJlciBpcyByZWxhdGl2ZS4gIEVPRiBtZWFucyB0byBtb3Zl IHRvIiwKLSIgIHRoZSBlbmQgb2YgdGhlIGZpbGUuICBJZiBhIC9GSU5EOiBzd2l0Y2ggaXMgaW5j bHVkZWQsIEtlcm1pdCBzZWVrcyB0byB0aGUiLAotIiAgc3BlY2lmaWVkIHNwb3QgKGUuZy4gMCBm b3IgdGhlIGJlZ2lubmluZykgYW5kIHRoZW4gYmVnaW5zIHNlYXJjaGluZyBsaW5lIiwKLSIgIGJ5 IGxpbmUgZm9yIHRoZSBmaXJzdCBsaW5lIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4g IFRvIHN0YXJ0IiwKLSIgIHNlYXJjaGluZyBmcm9tIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24g c3BlY2lmeSBhIGxpbmUgbnVtYmVyIG9mICswLiIsCi0iICBUbyBzdGFydCBzZWFyY2hpbmcgZnJv bSB0aGUgbGluZSBhZnRlciB0aGUgY3VycmVudCBvbmUsIHVzZSArMSAoZXRjKS4iLAotIiAgU3lu b255bTogRlNFRUsuIiwKLSIiCi19OwotCi1zdGF0aWMgY2hhciAqIGh4eGZfc3RbXSA9IHsKLSJT eW50YXg6IEZJTEUgU1RBVFVTIDxjaGFubmVsPiIsCi0iICBJZiB0aGUgY2hhbm5lbCBpcyBvcGVu LCB0aGlzIGNvbW1hbmQgc2hvd3MgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIHRoZSIsCi0iICBzd2l0 Y2hlcyBpdCB3YXMgb3BlbmVkIHdpdGgsIGFuZCB0aGUgY3VycmVudCByZWFkL3dyaXRlIHBvc2l0 aW9uLiIsCi0iICBTeW5vbnltOiBGU1RBVFVTIiwKLSIiCi19OwotCi1zdGF0aWMgY2hhciAqIGh4 eGZfY29bXSA9IHsKLSJTeW50YXg6IEZJTEUgQ09VTlQgWyB7IC9CWVRFUywgL0xJTkVTLCAvTElT VCwgL05PTElTVCB9IF0gPGNoYW5uZWw+IiwKLSIgIElmIHRoZSBjaGFubmVsIGlzIG9wZW4sIHRo aXMgY29tbWFuZCBwcmludHMgdGhlIG51Ym1lciBvZiBieXRlcyAoZGVmYXVsdCkiLAotIiAgb3Ig bGluZXMgaW4gdGhlIGZpbGUgaWYgYXQgdG9wIGxldmVsIG9yIGlmIC9MSVNUIGlzIGluY2x1ZGVk OyBpZiAvTk9MSVNUIiwKLSIgIGlzIGdpdmVuLCB0aGUgcmVzdWx0IGlzIG5vdCBwcmludGVkLiAg SW4gYWxsIGNhc2VzIHRoZSByZXN1bHQgaXMgYXNzaWduZWQiLAotIiAgdG8gXFx2KGZfY291bnQp LiAgU3lub255bTogRkNPVU5UIiwKLSIiCi19OwotCi1zdGF0aWMgY2hhciAqIGh4eGZfd3JbXSA9 IHsKLSJGSUxFIFdSSVRFIFsgc3dpdGNoZXMgXSA8Y2hhbm5lbD4gPHRleHQ+IiwKLSIgIFdyaXRl cyB0aGUgZ2l2ZW4gdGV4dCB0byB0aGUgZmlsZSBvbiB0aGUgZ2l2ZW4gY2hhbm5lbCBudW1iZXIu ICBUaGUgPHRleHQ+IiwKLSIgIGNhbiBiZSBsaXRlcmFsIHRleHQgb3IgYSB2YXJpYWJsZSwgb3Ig YW55IGNvbWJpbmF0aW9uLiAgSWYgdGhlIHRleHQgbWlnaHQiLAotIiAgY29udGFpbiBsZWFkaW5n IG9yIHRyYWlsaW5nIHNwYWNlcywgaXQgbXVzdCBiZSBlbmNsb3NlZCBpbiBicmFjZXMgaWYgeW91 IiwKLSIgIHdhbnQgdG8gcHJlc2VydmUgdGhlbS4gIFN5bm9ueW06IEZXUklURS4gIFN3aXRjaGVz OiIsCi0iICIsCi0iL0xJTkUiLAotIiAgU3BlY2lmaWVzIHRoYXQgYW4gYXBwcm9wcmlhdGUgbGlu ZSB0ZXJtaW5hdG9yIGlzIHRvIGJlIGFkZGVkIHRvIHRoZSIsCi0iICBlbmQgb2YgdGhlIDx0ZXh0 Pi4gIElmIG5vIHN3aXRjaGVzIGFyZSBpbmNsdWRlZCwgL0xJTkUgaXMgYXNzdW1lZC4iLAotIiAi LAotIi9TSVpFOm51bWJlciIsCi0iICBTcGVjaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gbnVtYmVyIG9m IGJ5dGVzIChjaGFyYWN0ZXJzKSBpcyB0byBiZSB3cml0dGVuLiIsCi0iICBJZiB0aGUgZ2l2ZW4g PHRleHQ+IGlzIGxvbmdlciB0aGFuIHRoZSByZXF1ZXN0ZWQgc2l6ZSwgaXQgaXMgdHJ1bmNhdGVk OyIsCi0iICBpZiBpcyBzaG9ydGVyLCBpdCBpcyBwYWRkZWQgYWNjb3JkaW5nIC9MUEFEIGFuZCAv UlBBRCBzd2l0Y2hlcy4gIFN5bm9ueW06IiwKLSIgIC9CTE9DSy4iLAotIiAiLAotIi9MUEFEWzp2 YWx1ZV0iLAotIiAgSWYgL1NJWkUgd2FzIGdpdmVuLCBidXQgdGhlIDx0ZXh0PiBpcyBzaG9ydGVy IHRoYW4gdGhlIHJlcXVlc3RlZCBzaXplLCIsCi0iICB0aGUgdGV4dCBpcyBwYWRkZWQgb24gdGhl IGxlZnQgd2l0aCBzdWZmaWNpZW50IGNvcGllcyBvZiB0aGUgY2hhcmFjdGVyIiwKLSIgIHdob3Nl IEFTQ0lJIHZhbHVlIGlzIGdpdmVuIHRvIHdyaXRlIHRoZSBnaXZlbiBsZW5ndGguICBJZiBubyB2 YWx1ZSBpcyIsCi0iICBzcGVjaWZpZWQsIDMyICh0aGUgY29kZSBmb3IgU3BhY2UpIGlzIHVzZWQu ICBUaGUgdmFsdWUgY2FuIGFsc28gYmUgMCB0byIsCi0iICB3cml0ZSB0aGUgaW5kaWNhdGVkIG51 bWJlciBvZiBOVUwgYnl0ZXMuICBJZiAvU0laRSB3YXMgbm90IGdpdmVuLCB0aGlzIiwKLSIgIHN3 aXRjaCBpcyBpZ25vcmVkLiIsCi0iICIsCi0iL1JQQURbOnZhbHVlXSIsCi0iICBMaWtlIExQQUQs IGJ1dCBwYWRzIG9uIHRoZSByaWdodC4iLAotIiAiLAotIi9TVFJJTkciLAotIiAgU3BlY2lmaWVz IHRoYXQgdGhlIDx0ZXh0PiBpcyB0byBiZSB3cml0dGVuIGFzLWlzLCB3aXRoIG5vIHRlcm1pbmF0 b3IgYWRkZWQuIgotLAotIiAiLAotIi9DSEFSQUNURVIiLAotIiAgU3BlY2lmaWVzIHRoYXQgb25l IGNoYXJhY3RlciBzaG91bGQgYmUgd3JpdHRlbi4gIElmIHRoZSA8dGV4dD4gaXMgZW1wdHkgb3Ii LAotIiAgbm90IGdpdmVuLCBhIE5VTCBjaGFyYWN0ZXIgaXMgd3JpdHRlbjsgb3RoZXJ3aXNlIHRo ZSBmaXJzdCBjaGFyYWN0ZXIgb2YiLAotIiAgPHRleHQ+IGlzIGdpdmVuLiIsCi0iICIsCi0iU3lu b255bSBGV1JJVEUuIiwKLSJBbHNvIGF2YWlsYWJsZSBhcyBcXEZfcHV0Y2hhcigpLCBcXEZfcHV0 bGluZSgpLCBcXEZfcHV0YmxvY2soKS4iLAotIiIKLX07Ci0KLXN0YXRpYyBpbnQKLWRvaGZpbGUo Y3gpIGludCBjeDsgewotICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIGZjdGFiW107Ci0gICAgZXh0 ZXJuIGludCBuZmN0YWI7Ci0gICAgaW50IHg7Ci0gICAgaWYgKGN4ID09IFhYRklMRSkgeyAgICAg ICAgICAgICAgICAgLyogRklMRSBjb21tYW5kIHdhcyBnaXZlbiAqLwotICAgICAgICAvKiBHZXQg c3ViY29tbWFuZCAqLwotICAgICAgICBpZiAoKGN4ID0gY21rZXkoZmN0YWIsbmZjdGFiLCJPcGVy YXRpb24iLCIiLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoY3ggPT0gLTMpIHsK LSAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgICAg ICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgY3ggPSBYWEZJTEU7Ci0gICAgICAgICAgICB9 IGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJuKGN4KTsKLSAgICAgICAgfQotICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBzd2l0Y2gg KGN4KSB7Ci0gICAgICAgICAgY2FzZSBGSUxfQ0xTOiBjeCA9IFhYRl9DTDsgYnJlYWs7Ci0gICAg ICAgICAgY2FzZSBGSUxfRkxVOiBjeCA9IFhYRl9GTDsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBG SUxfTElTOiBjeCA9IFhYRl9MSTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGSUxfT1BOOiBjeCA9 IFhYRl9PUDsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGSUxfUkVBOiBjeCA9IFhYRl9SRTsgYnJl YWs7Ci0gICAgICAgICAgY2FzZSBGSUxfUkVXOiBjeCA9IFhYRl9SVzsgYnJlYWs7Ci0gICAgICAg ICAgY2FzZSBGSUxfU0VFOiBjeCA9IFhYRl9TRTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGSUxf U1RBOiBjeCA9IFhYRl9TVDsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGSUxfV1JJOiBjeCA9IFhY Rl9XUjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGSUxfQ09VOiBjeCA9IFhYRl9DTzsgYnJlYWs7 Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3dpdGNoIChjeCkgewotICAgICAgY2FzZSBYWEZJTEU6 IHJldHVybihobXNnYShoeHhmaWxlKSk7Ci0gICAgICBjYXNlIFhYRl9DTDogcmV0dXJuKGhtc2dh KGh4eGZfY2wpKTsKLSAgICAgIGNhc2UgWFhGX0ZMOiByZXR1cm4oaG1zZ2EoaHh4Zl9mbCkpOwot ICAgICAgY2FzZSBYWEZfTEk6IHJldHVybihobXNnYShoeHhmX2xpKSk7Ci0gICAgICBjYXNlIFhY Rl9PUDogcmV0dXJuKGhtc2dhKGh4eGZfb3ApKTsKLSAgICAgIGNhc2UgWFhGX1JFOiByZXR1cm4o aG1zZ2EoaHh4Zl9yZSkpOwotICAgICAgY2FzZSBYWEZfUlc6IHJldHVybihobXNnYShoeHhmX3J3 KSk7Ci0gICAgICBjYXNlIFhYRl9TRTogcmV0dXJuKGhtc2dhKGh4eGZfc2UpKTsKLSAgICAgIGNh c2UgWFhGX1NUOiByZXR1cm4oaG1zZ2EoaHh4Zl9zdCkpOwotICAgICAgY2FzZSBYWEZfV1I6IHJl dHVybihobXNnYShoeHhmX3dyKSk7Ci0gICAgICBjYXNlIFhYRl9DTzogcmV0dXJuKGhtc2dhKGh4 eGZfY28pKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotfQot I2VuZGlmIC8qIENLQ0hBTk5FTElPICovCi0KLWludAotZG9obHAoeHgpIGludCB4eDsgewotICAg IGludCB4LHk7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJET0hFTFAgeHgiLCIiLHh4KTsKLSAgICBpZiAo eHggPCAwKSByZXR1cm4oeHgpOwotCi0jaWZkZWYgTk9IRUxQCi0gICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotICAgIHByaW50ZigiXG4lcywgQ29weXJpZ2h0IChD KSAxOTg1LCAlcywiLHZlcnNpbywgY2tfY3J5ZWFyKTsKLSNpZm5kZWYgTk9JS1NECi0gICAgaWYg KGluc2VydmVyKQotICAgICAgcmV0dXJuKGhtc2dhKHRvcGhscGkpKTsKLSAgICBlbHNlCi0jZW5k aWYgLyogSUtTRCAqLwotICAgICAgcmV0dXJuKGhtc2dhKHRvcGhscCkpOwotCi0jZWxzZSAvKiBo ZWxwIGlzIGF2YWlsYWJsZSAqLwotCi0gICAgaWYgKGhlbHBmaWxlKQotICAgICAgcmV0dXJuKGRv dHlwZShoZWxwZmlsZSx4YXNrbW9yZSwwLDAsTlVMTCwwLE5VTEwsMCwwLE5VTEwsMCkpOwotCi0j aWZkZWYgQ0tDSEFOTkVMSU8KLSAgICBpZiAoeHggPT0gWFhGSUxFKQotICAgICAgcmV0dXJuKGRv aGZpbGUoeHgpKTsKLSAgICBlbHNlIGlmICh4eCA9PSBYWEZfUkUgfHwgeHggPT0gWFhGX1dSIHx8 IHh4ID09IFhYRl9PUCB8fAotICAgICAgICAgICAgIHh4ID09IFhYRl9DTCB8fCB4eCA9PSBYWEZf U0UgfHwgeHggPT0gWFhGX1JXIHx8Ci0gICAgICAgICAgICAgeHggPT0gWFhGX0ZMIHx8IHh4ID09 IFhYRl9MSSB8fCB4eCA9PSBYWEZfU1QgfHwgeHggPT0gWFhGX0NPKQotICAgICAgcmV0dXJuKGRv aGZpbGUoeHgpKTsKLSNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLwotCi0gICAgc3dpdGNoICh4eCkg ewotCi0jaWZuZGVmIE5PU1BMCi1jYXNlIFhYQVNTOiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQVNTSUdOICovCi0gICAgcmV0dXJuKGhtc2dhKGh4eGFzcykpOwotCi1jYXNlIFhYQVNL OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQVNLICovCi1jYXNlIFhYQVNLUTogICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQVNLUSAqLwotICAgIHJldHVybihobXNnYShoeHhh c2spKTsKLQotY2FzZSBYWEFQQzoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBBUEMgdGV4dFxu XAotICBFY2hvZXMgdGhlIHRleHQgd2l0aGluIGEgVlQyMjAvMzIwLzQyMCBBcHBsaWNhdGlvbiBQ cm9ncmFtIENvbW1hbmQuIikpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9GUklM TFMKLWNhc2UgWFhCVUc6Ci0gICAgcmV0dXJuKGhtc2coIkRlc2NyaWJlcyBob3cgdG8gZ2V0IHRl Y2huaWNhbCBzdXBwb3J0LiIpKTsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZuZGVmIE5P U1BMCi1jYXNlIFhYQkVFUDoKLSNpZmRlZiBPUzIKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBC RUVQIFsgeyBFUlJPUiwgSU5GT1JNQVRJT04sIFdBUk5JTkcgfSBdXG5cCi0gIEdlbmVyYXRlcyBh IGJlbGwgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHNldHRpbmdzLiAgSWYgU0VUIEJFTEwgaXMg c2V0IHRvXG5cCi0gIFwic3lzdGVtLXNvdW5kc1wiIHRoZW4gdGhlIGFwcHJvcHJpYXRlIFN5c3Rl bSBTb3VuZCB3aWxsIGJlIGdlbmVyYXRlZC5cblwKLSAgRGVmYXVsdCBpcyBJTkZPUk1BVElPTi4i KSk7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBCRUVQXG5cCi1T ZW5kcyBhIEJFTCBjaGFyYWN0ZXIgdG8geW91ciB0ZXJtaW5hbC4iKSk7Ci0jZW5kaWYgLyogT1My ICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotY2FzZSBYWEJZRTogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEJZRSAqLwotICAgIHJldHVybihobXNnKGhteHhieWUpKTsKLQotY2FzZSBY WENISzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNoZWNrICovCi0gICAgcmV0dXJu KGhtc2coIlwKLVN5bnRheDogQ0hFQ0sgbmFtZVxuXAotICBDaGVja3NcCi0gIHRvIHNlZSBpZiB0 aGUgbmFtZWQgZmVhdHVyZSBpcyBpbmNsdWRlZCBpbiB0aGlzIHZlcnNpb24gb2YgS2VybWl0Llxu XAotICBUbyBsaXN0IHRoZSBmZWF0dXJlcyB5b3UgY2FuIGNoZWNrLCB0eXBlIFwiY2hlY2sgP1wi LiIpKTsKLQotI2lmbmRlZiBOT0ZSSUxMUwotY2FzZSBYWENMRTogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGNsZWFyICovCi0gICAgcmV0dXJuKGhtc2dhKGhteHhjbGUpKTsKLSNlbmRp ZiAvKiBOT0ZSSUxMUyAqLwotCi1jYXNlIFhYQ0xPOiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogY2xvc2UgKi8KLSAgICByZXR1cm4oaG1zZ2EoaG14eGNsbykpOwotCi1jYXNlIFhYQ09N OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29tbWVudCAqLwotI2lmbmRlZiBTVFJB VFVTIC8qIENhbid0IHVzZSAjIGZvciBjb21tZW50cyBpbiBTdHJhdHVzIFZPUyAqLwotICAgIHJl dHVybihobXNnKCJcCi1TeW50YXg6IENPTU1FTlQgdGV4dFxuXAotRXhhbXBsZTogQ09NTUVOVCAt IHRoaXMgaXMgYSBjb21tZW50LlxuXAotICBJbnRyb2R1Y2VzIGEgY29tbWVudC4gIEJlZ2lubmlu ZyBvZiBjb21tYW5kIGxpbmUgb25seS4gIENvbW1hbmRzIG1heSBhbHNvXG5cCi0gIGhhdmUgdHJh aWxpbmcgY29tbWVudHMsIGludHJvZHVjZWQgYnkgOyBvciAjLiIpKTsKLSNlbHNlCi0gICAgcmV0 dXJuKGhtc2coIlwKLVN5bnRheDogQ09NTUVOVCB0ZXh0XG5cCi1FeGFtcGxlOiBDT01NRU5UIC0g dGhpcyBpcyBhIGNvbW1lbnQuXG5cCi0gIEludHJvZHVjZXMgYSBjb21tZW50LiAgQmVnaW5uaW5n IG9mIGNvbW1hbmQgbGluZSBvbmx5LiAgQ29tbWFuZHMgbWF5IGFsc29cblwKLSAgaGF2ZSB0cmFp bGluZyBjb21tZW50cywgaW50cm9kdWNlZCBieSA7IChzZW1pY29sb24pLiIpKTsKLSNlbmRpZiAv KiBTVFJBVFVTICovCi0KLSNpZm5kZWYgTk9MT0NBTAotY2FzZSBYWENPTjogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENPTk5FQ1QgKi8KLWNhc2UgWFhDUTogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDUSA9PSBDT05ORUNUIC9RVUlFVExZICovCi0gICAgaG1zZ2EoaG14 eGNvbik7Ci0gICAgcHJpbnRmKCJZb3VyIGVzY2FwZSBjaGFyYWN0ZXIgaXMgQ3RybC0lYyAoQVND SUkgJWQsICVzKVxyXG4iLAotICAgICAgICAgICBjdGwoZXNjYXBlKSwgZXNjYXBlLCAoZXNjYXBl ID09IDEyNyA/ICJERUwiIDogY2NudGFiW2VzY2FwZV0pKTsKLSAgICByZXR1cm4oMCk7Ci0jZW5k aWYgLyogTk9MT0NBTCAqLwotCi0jaWZkZWYgWkNPUFkKLWNhc2UgWFhDUFk6Ci0gICAgcmV0dXJu KGhtc2dhKGhteHhjcHkpKTsKLSNlbmRpZiAvKiBaQ09QWSAqLwotCi0jaWZkZWYgTlQKLWNhc2Ug WFhMSU5LOgotcmV0dXJuKGhtc2coCi0iICBMSU5LIHNvdXJjZSBkZXN0aW5hdGlvblxuXAotICAg Y3JlYXRlcyBhIGhhcmQgbGluayB0byB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgc291cmNlIHRvIHRo ZSBmaWxlbmFtZVxuXAotICAgc3BlY2lmaWVkIGJ5IGRlc3RpbmF0aW9uLiAgSGFyZCBsaW5rcyBh cmUgb25seSBzdXBwb3J0ZWQgb24gTlRGUy5cblwKLSAgIGRlc3RpbmF0aW9uIGNhbiBlaXRoZXIg YmUgYSBmaWxlbmFtZSBvciBhIGRpcmVjdG9yeS4gIHNvdXJjZSBtYXlcblwKLSAgIGNvbnRhaW4g d2lsZGNhcmRzIGlmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LiIpKTsKLSNlbmRpZiAvKiBO VCAqLwotCi0jaWZuZGVmIE5PRlJJTExTCi1jYXNlIFhYTFJFTjogICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTFJFTkFNRSAqLwotICAgIHJldHVybihobXNnKAotIiAgTFJFTkFNRSBpcyBh biBhbGlhcyBmb3IgdGhlIFJFTkFNRSBjb21tYW5kIGZvcmNpbmcgaXQgdG8gZXhlY3V0ZVxuXAot ICBvbiB0aGUgbG9jYWwgY29tcHV0ZXIuICBBbHNvIHNlZTogUkVOQU1FLCBSUkVOQU1FLCBTRVQg TE9DVVMuIikpOwotCi1jYXNlIFhYUkVOOgotICAgIHJldHVybihobXNnYShobXh4cmVuKSk7Ci0j ZW5kaWYgLyogTk9GUklMTFMgKi8KLQotY2FzZSBYWENEVVA6ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDRFVQICovCi1jYXNlIFhYTENEVToKLSAgICByZXR1cm4oaG1zZygKLSJDaGFu Z2Ugd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIG9uZSBqdXN0IGFib3ZlIHRoZSBjdXJyZW50IG9u ZS4iKSk7Ci0KLWNhc2UgWFhMQ1dEOgotICAgIHJldHVybihobXNnKAotIiAgTENEIChMQ1dEKSBp cyBhbiBhbGlhcyBmb3IgdGhlIENEIChDV0QpIGNvbW1hbmQgZm9yY2luZyBpdCB0byBleGVjdXRl XG5cCi0gIG9uIHRoZSBsb2NhbCBjb21wdXRlci4gIEFsc28gc2VlOiBDRCwgQ0RVUCwgUkNELCBT RVQgTE9DVVMuIikpOwotCi1jYXNlIFhYQ1dEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQ0QgLyBDV0QgKi8KLSAgICByZXR1cm4oaG1zZ2EoaG14eGN3ZCkpOwotCi0jaWZuZGVmIE5P U1BMCi1jYXNlIFhYS0NEOgotICAgIHJldHVybihobXNnYShobXh4a2NkKSk7Ci0KLWNhc2UgWFhB UlJBWToKLWNhc2UgWFhEQ0w6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUNMQVJF ICovCi1jYXNlIFhYU09SVDoKLSAgICByZXR1cm4oaG1zZ2EoaHh4ZGNsKSk7Ci0KLWNhc2UgWFhE RUY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUZJTkUgKi8KLSNpZm5kZWYgTk9T UEwKLSAgICBpZiAoaGxwdG9rKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaGF0IHRoZXkg YWN0dWFsbHkgdHlwZWQuLi4gKi8KLSAgICAgIGlmIChobHB0b2tbMF0gPT0gJy4nKQotICAgICAg ICByZXR1cm4oaG1zZ2EoaHh4ZG90KSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICByZXR1cm4o aG1zZ2EoaHh4ZGVmKSk7Ci0KLWNhc2UgWFhVTkRFRjogICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBVTkRFRklORSAqLwotICAgIHJldHVybihobXNnKCJTeW50YXg6ICBVTkRFRklORSB2YXJp YWJsZS1uYW1lXG5cCi0gIFVuZGVmaW5lcyBhIG1hY3JvIG9yIHZhcmlhYmxlLiIpKTsKLSNlbmRp ZiAvKiBOT1NQTCAqLwotCi1jYXNlIFhYTVNHOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IE1F U1NBR0UgdGV4dC10by1wcmludC1pZi1kZWJ1Z2dpbmdcblwKLSAgUHJpbnRzIHRoZSBnaXZlbiB0 ZXh0IHRvIHN0ZG91dCBpZiBTRVQgREVCVUcgTUVTU0FHRSBpcyBPTjsgcHJpbnRzIGl0XG5cCi0g IHRvIHN0ZGVyciBpZiBTRVQgREVCVUcgTUVTU0FHRSBpcyBTVERFUlI7IGRvZXNuJ3QgcHJpbnQg aXQgYXQgYWxsIGlmIFNFVFxuXAotICBERUJVRyBNRVNTQUdFIGlzIE9GRi4gIFN5bm9ueW06IE1T Ry4iKSk7Ci0KLSNpZm5kZWYgTk9GUklMTFMKLWNhc2UgWFhMREVMOgotICAgIHJldHVybihobXNn KAotIiAgTERFTEVURSBpcyBhbiBhbGlhcyBmb3IgdGhlIERFTEVURSBjb21tYW5kIGZvcmNpbmcg aXQgdG8gZXhlY3V0ZVxuXAotICBvbiB0aGUgbG9jYWwgY29tcHV0ZXIuICBBbHNvIHNlZTogREVM RVRFLCBSREVMRVRFLCBTRVQgTE9DVVMuIikpOwotCi1jYXNlIFhYREVMOiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogZGVsZXRlICovCi0gICAgcmV0dXJuKGhtc2dhKGhteHhkZWwpKTsK LSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZuZGVmIE5PRElBTAotY2FzZSBYWERJQUw6ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwsIGV0Yy4uLiAqLwotICAgIHJldHVybiho bXNnYShoeHhkaWFsKSk7Ci0KLWNhc2UgWFhQRElBOiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQRElBTCAqLwotICAgIHJldHVybihobXNnKCJTeW50YXg6IFBESUFMIHBob25lbnVtYmVy XG5cCi0gIFBhcnRpYWxseSBkaWFscyBhIHBob25lIG51bWJlci4gIExpa2UgRElBTCBidXQgZG9l cyBub3Qgd2FpdCBmb3IgY2FycmllclxuXAotICBvciBDT05ORUNUIG1lc3NhZ2UuIikpOwotCi1j YXNlIFhYUkVEOgotICAgIHJldHVybihobXNnKCJSZWRpYWwgdGhlIG51bWJlciBnaXZlbiBpbiB0 aGUgbW9zdCByZWNlbnQgRElBTCBjb21tbmQuIikpOwotCi1jYXNlIFhYQU5TVzogICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQU5TV0VSICovCi0gICAgcmV0dXJuKGhtc2dhKGh4eGFuc3cp KTsKLQotY2FzZSBYWExPT0s6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExPT0tVUCBu dW1iZXIgaW4gZGlyZWN0b3J5ICovCi0gICAgcmV0dXJuKGhtc2dhKGh4eGxvb2spKTsKLSNlbmRp ZiAvKiBOT0RJQUwgKi8KLQotY2FzZSBYWExESVI6ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIExESVJFQ1RPUlkgKi8KLSAgICByZXR1cm4oaG1zZygKLSIgIExESVJJUkVDVE9SWSBpcyBh biBhbGlhcyBmb3IgdGhlIERJUkVDVE9SWSBjb21tYW5kIGZvcmNpbmcgaXQgdG8gZXhlY3V0ZVxu XAotICBvbiB0aGUgbG9jYWwgY29tcHV0ZXIuICBBbHNvIHNlZTogRElSRUNUT1JZLCBTRVQgTE9D VVMsIFJESVJFQ1RPUlkuIikpOwotCi1jYXNlIFhYRElSOiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRElSRUNUT1JZICovCi0gICAgcmV0dXJuKGhtc2dhKGhteHhkaXIpKTsKLQotY2Fz ZSBYWFRPVUM6CQkJCS8qIFRPVUNIICovCi0gICAgcmV0dXJuKGhtc2dhKGhteHh0b3VjKSk7Ci0K LWNhc2UgWFhXRElSOgkJCQkvKiBXRElSRUNUT1JZICovCi0gIHJldHVybihobXNnKCIgIFdESVJF Q1RPUlkgaXMgc2hvcnRoYW5kIGZvciBESVJFQ1RPUlkgL1NPUlQ6REFURSAvUkVWRVJTRTtcblwK LSAgaXQgcHJvZHVjZXMgYSBsaXN0aW5nIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlci4g IFNlZSB0aGUgRElSRUNUT1JZXG5cCi0gIGNvbW1hbmQgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24u IikpOwotCi1jYXNlIFhYSERJUjoJCQkJLyogSERJUkVDVE9SWSAqLwotICByZXR1cm4oaG1zZygi ICBIRElSRUNUT1JZIGlzIHNob3J0aGFuZCBmb3IgRElSRUNUT1JZIC9TT1JUOlNJWkUgL1JFVkVS U0U7XG5cCi0gIGl0IHByb2R1Y2VzIGEgbGlzdGluZyBzaG93aW5nIHRoZSBiaWdnZXN0IGZpbGVz IGZpcnN0LiAgU2VlIHRoZSBESVJFQ1RPUllcblwKLSAgY29tbWFuZCBmb3IgZnVydGhlciBpbmZv cm1hdGlvbi4iKSk7Ci0KLWNhc2UgWFhMTUtEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBMTUtESVIgKi8KLSAgICByZXR1cm4oaG1zZygKLSIgIExNS0RJUiBpcyBhbiBhbGlhcyBmb3Ig dGhlIE1LRElSIGNvbW1hbmQgZm9yY2luZyBpdCB0byBleGVjdXRlXG5cCi0gIG9uIHRoZSBsb2Nh bCBjb21wdXRlci4gIEFsc28gc2VlOiBNS0RJUiwgUk1LRElSLCBTRVQgTE9DVVMuIikpOwotCi1j YXNlIFhYTUtESVI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTUtESVIgKi8KLSAgICBy ZXR1cm4oaG1zZygiQ3JlYXRlcyBhIGRpcmVjdG9yeS4gIEFsc28gc2VlIExSTURJUiwgUlJNRElS LCBTRVQgTE9DVVMuIikpOwotCi1jYXNlIFhYTFJNRDogICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTFJNRElSICovCi0gICAgcmV0dXJuKGhtc2coCi0iICBMUk1ESVIgaXMgYW4gYWxpYXMg Zm9yIHRoZSBSTURJUiBjb21tYW5kIGZvcmNpbmcgaXQgdG8gZXhlY3V0ZVxuXAotICBvbiB0aGUg bG9jYWwgY29tcHV0ZXIuICBBbHNvIHNlZTogUk1ESVIsIFJSTURJUiwgU0VUIExPQ1VTLiIpKTsK LQotY2FzZSBYWFJNRElSOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJNRElSICovCi0g ICAgcmV0dXJuKGhtc2coIlJlbW92ZXMgYSBkaXJlY3RvcnkuICBBbHNvIHNlZSBMUk1ESVIsIFJS TURJUiwgU0VUIExPQ1VTLiIpKTsKLQotY2FzZSBYWExTOgotI2lmZGVmIFVOSVhPUk9TSwotICAg IHJldHVybihobXNnKCJTeW50YXg6IExTIFsgYXJncyBdXG5cCi0gIFJ1bnMgXCJsc1wiIHdpdGgg dGhlIGdpdmVuIGFyZ3VtZW50cy4iKSk7Ci0jZWxzZQotICAgIHJldHVybihobXNnYShobXh4ZGly KSk7Ci0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0KLSNpZm5kZWYgTk9TRVJWRVIKLSNpZm5kZWYg Tk9GUklMTFMKLWNhc2UgWFhESVM6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogRElTQUJMRSBj b21tYW5kXG5cCi0gIFNlY3VyaXR5IGZvciB0aGUgS2VybWl0IHNlcnZlci4gIFByZXZlbnRzIHRo ZSBjbGllbnQgS2VybWl0IHByb2dyYW0gZnJvbVxuXAotICBleGVjdXRpbmcgdGhlIG5hbWVkIFJF TU9URSBjb21tYW5kLCBzdWNoIGFzIENELCBERUxFVEUsIFJFQ0VJVkUsIGV0Yy4iKSk7Ci0jZW5k aWYgLyogTk9GUklMTFMgKi8KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0jaWZuZGVmIE5PU1BM Ci1jYXNlIFhYRE86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG8gKi8KLSAgICBy ZXR1cm4oaG1zZygiU3ludGF4OiBbIERPIF0gbWFjcm9uYW1lIFsgYXJndW1lbnRzIF1cblwKLSAg RXhlY3V0ZXMgYSBtYWNybyB0aGF0IHdhcyBkZWZpbmVkIHdpdGggdGhlIERFRklORSBjb21tYW5k LiAgVGhlIHdvcmQgRE9cblwKLSAgY2FuIGJlIG9taXR0ZWQuICBUcmFpbGluZyBhcmd1bWVudCB3 b3JkcywgaWYgYW55LCBhcmUgYXV0b21hdGljYWxseVxuXAotICBhc3NpZ25lZCB0byB0aGUgbWFj cm8gYXJndW1lbnQgdmFyaWFibGVzIFxcJTEgdGhyb3VnaCBcXCU5LiIpKTsKLSNlbmRpZiAvKiBO T1NQTCAqLwotCi0jaWZuZGVmIE5PU1BMCi1jYXNlIFhYREVDOgotICAgIHJldHVybihobXNnYSho eHhkZWMpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1jYXNlIFhYRUNIOiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogZWNobyAqLwotICAgIHJldHVybihobXNnKCJTeW50YXg6IEVDSE8g dGV4dFxuXAotICBEaXNwbGF5cyB0aGUgdGV4dCBvbiB0aGUgc2NyZWVuLCBmb2xsb3dlZCBieSBh IGxpbmUgdGVybWluYXRvci4gIFRoZSBFQ0hPXG5cCi0gIHRleHQgbWF5IGNvbnRhaW4gYmFja3Ns YXNoIGNvZGVzLiAgRXhhbXBsZTogRUNITyBcXDdXYWtlIHVwIVxcNy4gIEFsc28gc2VlXG5cCi0g IFhFQ0hPIGFuZCBXUklURSBTQ1JFRU4uIikpOwotCi1jYXNlIFhYWEVDSDogICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogeGVjaG8gKi8KLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBYRUNI TyB0ZXh0XG5cCi0gIEp1c3QgbGlrZSBFQ0hPIGJ1dCBkb2VzIG5vdCBhZGQgYSBsaW5lIHRlcm1p bmF0b3IgdG8gdGhlIHRleHQuICBTZWUgRUNITy4iKSk7Ci0KLWNhc2UgWFhWT0lEOgotICAgIHJl dHVybihobXNnKCJTeW50YXg6IFZPSUQgdGV4dFxuXAotICBMaWtlIEVDSE8gYnV0IGRvZXNuJ3Qg cHJpbnQgYW55dGhpbmc7IGNhbiBiZSB1c2VkIHRvIGludm9rZSBmdW5jdGlvbnNcblwKLSAgd2hl biB5b3UgZG9uJ3QgbmVlZCB0byBkaXNwbGF5IG9yIHVzZSB0aGVpciByZXN1bHRzLiIpKTsKLQot I2lmbmRlZiBOT1NFUlZFUgotI2lmbmRlZiBOT0ZSSUxMUwotY2FzZSBYWEVOQToKLSAgICByZXR1 cm4oaG1zZygiU3ludGF4OiBFTkFCTEUgY2FwYWJpbGl0eVxuXAotICBGb3IgdXNlIHdpdGggc2Vy dmVyIG1vZGUuICBBbGxvd3MgdGhlIGNsaWVudCBLZXJtaXQgcHJvZ3JhbSBhY2Nlc3MgdG8gdGhl XG5cCi0gIG5hbWVkIGNhcGFiaWxpdHksIHN1Y2ggYXMgQ0QsIERFTEVURSwgUkVDRUlWRSwgZXRj LiAgT3Bwb3NpdGUgb2YgRElTQUJMRS4iKSk7Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSNlbmRp ZiAvKiBOT1NFUlZFUiAqLwotCi0jaWZuZGVmIE5PU1BMCi1jYXNlIFhYRU5EOiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogZW5kICovCi0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogRU5E IFsgbnVtYmVyIFsgbWVzc2FnZSBdIF1cblwKLSAgRXhpdHMgZnJvbSB0aGUgY3VycmVudCBtYWNy byBvciBUQUtFIGZpbGUsIGJhY2sgdG8gd2hlcmV2ZXIgaW52b2tlZCBmcm9tLlxuXAotICBOdW1i ZXIgaXMgcmV0dXJuIGNvZGUuICBNZXNzYWdlLCBpZiBnaXZlbiwgaXMgcHJpbnRlZC4iKSk7Ci0K LWNhc2UgWFhFVkFMOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldmFsdWF0ZSAqLwot ICAgIHJldHVybihobXNnYShobXh4ZXZhbCkpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5k ZWYgTk9GUklMTFMKLWNhc2UgWFhFUlI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBl LXBhY2tldCAqLwotICAgIHJldHVybihobXNnKCJTeW50YXg6IEUtUEFDS0VUXG5cCi0gIFNlbmRz IGFuIEVycm9yIHBhY2tldCB0byB0aGUgb3RoZXIgS2VybWl0LiIpKTsKLSNlbmRpZiAvKiBOT0ZS SUxMUyAqLwotCi1jYXNlIFhYRVhJOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhp dCAqLwotY2FzZSBYWFFVSToKLSAgICByZXR1cm4oaG1zZ2EoaG14eGV4aXQpKTsKLQotY2FzZSBY WEZJTjoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBGSU5JU0hcblwKLSAgVGVsbHMgdGhlIHJl bW90ZSBLZXJtaXQgc2VydmVyIHRvIHNodXQgZG93biB3aXRob3V0IGxvZ2dpbmcgb3V0LiIpKTsK LQotI2lmbmRlZiBOT1NQTAotICBjYXNlIFhYRk9SOgotICAgIHJldHVybihobXNnYShmb3JobHAp KTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gIGNhc2UgWFhHRVQ6Ci0gICAgcmV0dXJuKGhtc2dh KGhteHhnZXQpKTsKLSAgY2FzZSBYWE1HRVQ6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhtZ2V0KSk7 Ci0KLSNpZm5kZWYgTk9TUEwKLSNpZm5kZWYgTk9GUklMTFMKLSAgY2FzZSBYWEdPSzoKLSAgICBy ZXR1cm4oaG1zZygiU3ludGF4OiBHRVRPSyBbIHN3aXRjaGVzIF0gcHJvbXB0XG5cCi0gIFByaW50 cyB0aGUgcHJvbXB0LCBtYWtlcyB1c2VyIHR5cGUgJ3llcycsICdubycsIG9yICdvaycsIGFuZCBz ZXRzIFNVQ0NFU1NcblwKLSAgb3IgRkFJTFVSRSBhY2NvcmRpbmdseS4gIFRoZSBvcHRpb25hbCBz d2l0Y2hlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIEFTSy4iKSk7Ci0jZW5kaWYgLyogTk9GUklMTFMg Ki8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gIGNhc2UgWFhHT1RPOgot ICAgIHJldHVybihobXNnKCJTeW50YXg6IEdPVE8gbGFiZWxcblwKLSAgSW4gYSBUQUtFIGZpbGUg b3IgbWFjcm8sIGdvIHRvIHRoZSBnaXZlbiBsYWJlbC4gIEEgbGFiZWwgaXMgYSB3b3JkIG9uIHRo ZVxuXAotICBsZWZ0IG1hcmdpbiB0aGF0IHN0YXJ0cyB3aXRoIGEgY29sb24gKDopLiAgRXhhbXBs ZTpcblxuXAotICA6b29mYVxuXAotICBlY2hvIEhlbGxvIVxuXAotICBnb3RvIG9vZmEiKSk7Ci0j ZW5kaWYgLyogTk9TUEwgKi8KLQotICBjYXNlIFhYSEFOOgotICAgIHJldHVybihobXNnKCJTeW50 YXg6IEhBTkdVUFxuXAotSGFuZyB1cCB0aGUgcGhvbmUgb3IgbmV0d29yayBjb25uZWN0aW9uLiIp KTsKLQotICBjYXNlIFhYSExQOgotLyoKLSAgV2UgZ2V0IGNvbmZpcm1hdGlvbiBoZXJlLCBldmVu IHRob3VnaCB3ZSBkbyBpdCBhZ2FpbiBpbiBobXNnYSgpLCB0byBwcmV2ZW50Ci0gIHRoZSBDb3B5 cmlnaHQgbWVzc2FnZSBmcm9tIGJlaW5nIHByaW50ZWQgcHJlbWF0dXJlbHkuICBUaGlzIGRvZXNu J3QgZG8gYW55Ci0gIGhhcm0sIGJlY2F1c2UgdGhlIGZpcnN0IGNhbGwgdG8gY21jZm0oKSBzZXRz IGNtZmxncyB0byAxLCBtYWtpbmcgdGhlIHNlY29uZAotICBjYWxsIHJldHVybiBpbW1lZGlhdGVs eS4KLSovCi0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotCi0g ICAgaWYgKGhlbHBmaWxlKSB7Ci0gICAgICAgIHByaW50ZigiXG4lcywgQ29weXJpZ2h0IChDKSAx OTg1LCAlcyxcblwKLVRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkg b2YgTmV3IFlvcmsuXG5cbiIsCi0JICAgICAgIHZlcnNpbywKLQkgICAgICAgY2tfY3J5ZWFyCi0J ICAgICAgICk7Ci0gICAgICAgIHJldHVybihkb3R5cGUoaGVscGZpbGUseGFza21vcmUsMywwLE5V TEwsMCxOVUxMLDAsMCxOVUxMLDApKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmludGYoIlxu JXMsIENvcHlyaWdodCAoQykgMTk4NSwgJXMsIix2ZXJzaW8sY2tfY3J5ZWFyKTsKLSAgICAgICAg cmV0dXJuKGhtc2dhKHRvcGhscCkpOwotICAgIH0KLQotY2FzZSBYWElOVDoKLSNpZmRlZiBPUzIK LSAgICByZXR1cm4oaG1zZygiVGhlIElOVFJPIGNvbW1hbmQgZ2l2ZXMgYSBicmllZiBpbnRyb2R1 Y3Rpb24gdG8gS2VybWl0IDk1LiIpKTsKLSNlbHNlCi0gICAgcmV0dXJuKGhtc2coIlRoZSBJTlRS TyBjb21tYW5kIGdpdmVzIGEgYnJpZWYgaW50cm9kdWN0aW9uIHRvIEMtS2VybWl0LiIpKTsKLSNl bmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBOT1NQTAotY2FzZSBYWElGOgotICAgIHJldHVybiho bXNnYShpZmhscCkpOwotCi1jYXNlIFhYSU5DOgotICAgIHJldHVybihobXNnYShoeHhpbmMpKTsK LQotY2FzZSBYWElOUDoKLSAgIHJldHVybihobXNnYShoeHhpbnApKTsKLSNlbmRpZiAvKiBOT1NQ TCAqLwotCi0jaWZkZWYgQ0tfTUlOUFVUCi1jYXNlIFhYTUlOUDoKLSAgICByZXR1cm4oaG1zZ2Eo aG14eG1pbnApKTsKLSNlbmRpZiAvKiBDS19NSU5QVVQgKi8KLQotI2lmbmRlZiBOT1NQTAotY2Fz ZSBYWFJFSToKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRUlOUFVUIG4gc3RyaW5nXG5cCi0g IExvb2tzIGZvciB0aGUgc3RyaW5nIGluIHRoZSB0ZXh0IHRoYXQgaGFzIHJlY2VudGx5IGJlZW4g SU5QVVQsIHNldCBTVUNDRVNTXG5cCi0gIG9yIEZBSUxVUkUgYWNjb3JkaW5nbHkuICBUaW1lb3V0 LCBuLCBtdXN0IGJlIHNwZWNpZmllZCBidXQgaXMgaWdub3JlZC4iKSk7Ci0jZW5kaWYgLyogTk9T UEwgKi8KLQotI2lmbmRlZiBOT1NQTAotY2FzZSBYWExCTDoKLSAgICByZXR1cm4oaG1zZygiXAot ICBJbnRyb2R1Y2VzIGEgbGFiZWwsIGxpa2UgOmxvb3AsIGZvciB1c2Ugd2l0aCBHT1RPIGluIFRB S0UgZmlsZXMgb3IgbWFjcm9zLlxuXAotU2VlIEdPVE8uIikpOwotI2VuZGlmIC8qIE5PU1BMICov Ci0KLWNhc2UgWFhMT0c6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhsZykpOwotCi0jaWZuZGVmIE5P U0NSSVBUCi1jYXNlIFhYTE9HSToKLSAgICByZXR1cm4oaG1zZ2EoaG14eGxvZ2kpKTsKLSNlbmRp ZgotCi0jaWZuZGVmIE5PRlJJTExTCi1jYXNlIFhYTUFJOgotICAgIHJldHVybihobXNnKCJTeW50 YXg6IE1BSUwgZmlsZW5hbWUgYWRkcmVzc1xuXAotICBFcXVpdmFsZW50IHRvIFNFTkQgL01BSUw6 YWRkcmVzcyBmaWxlbmFtZS4iKSk7Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lmbmRlZiBO T01TRU5ECi1jYXNlIFhYTVNFOgotICAgIHJldHVybihobXNnYShobXh4bXNlKSk7Ci0KLWNhc2Ug WFhBREQ6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhhZGQpKTsKLQotY2FzZSBYWE1NT1ZFOgotICAg IHJldHVybihobXNnKCJNTU9WRSBpcyBleGFjdGx5IGxpa2UgTVNFTkQsIGV4Y2VwdCBlYWNoIGZp bGUgdGhhdCBpc1xuXAotc2VudCBzdWNjZXNzZnVsbHkgaXMgZGVsZXRlZCBhZnRlciBpdCBpcyBz ZW50LiIpKTsKLSNlbmRpZiAvKiBOT01TRU5EICovCi0KLSNpZm5kZWYgTk9TUEwKLWNhc2UgWFhP UEU6Ci0gICAgcmV0dXJuKGhtc2dhKG9wZW5obHApKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1j YXNlIFhYTkVXOgotICAgIHJldHVybihobXNnKAotIiAgUHJpbnRzIG5ld3Mgb2YgbmV3IGZlYXR1 cmVzIHNpbmNlIHB1YmxpY2F0aW9uIG9mIFwiVXNpbmcgQy1LZXJtaXRcIi4iKSk7Ci0KLWNhc2Ug WFhVUEQ6Ci0gICAgcmV0dXJuKGhtc2coCi0iICBOZXcgZmVhdHVyZXMgYXJlIGRlc2NyaWJlZCBp biB0aGUgb25saW5lIEtlcm1pdCA5NSBtYW51YWwsXG5cCi0gICBhY2Nlc3NpYmxlIHZpYSB0aGUg TUFOVUFMIGNvbW1hbmQuIikpOwotCi0jaWZuZGVmIE5PU1BMCi1jYXNlIFhYT1VUOgotICAgIHJl dHVybihobXNnYShoeHhvdXQpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgQU5ZWDI1 Ci0jaWZuZGVmIElCTVgyNQotY2FzZSBYWFBBRDoKLSAgICByZXR1cm4oaG1zZ2EoaHh4cGFkKSk7 Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0jZW5kaWYgLyogQU5ZWDI1ICovCi0KLSNpZm5kZWYgTk9T UEwKLWNhc2UgWFhQQVU6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eHBhdSkpOwotCi1jYXNlIFhYTVNM OgotICAgIHJldHVybihobXNnYShoeHhtc2wpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZk ZWYgVENQU09DS0VUCi1jYXNlIFhYUE5HOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFBJTkcg WyBJUC1ob3N0bmFtZS1vci1udW1iZXIgXVxuXAotICBDaGVja3MgaWYgdGhlIGdpdmVuIElQIG5l dHdvcmsgaG9zdCBpcyByZWFjaGFibGUuICBEZWZhdWx0IGhvc3QgaXMgZnJvbVxuXAotICBtb3N0 IHJlY2VudCBTRVQgSE9TVCBvciBURUxORVQgY29tbWFuZC4gIFJ1bnMgc3lzdGVtIFBJTkcgcHJv Z3JhbSwgaWYgYW55LiIpCi0gICAgICAgICAgICk7Ci0KLWNhc2UgWFhGVFA6Ci0jaWZkZWYgU1lT RlRQCi0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogRlRQIFsgSVAtaG9zdG5hbWUtb3ItbnVtYmVy IF1cblwKLSAgTWFrZXMgYW4gRlRQIGNvbm5lY3Rpb24gdG8gdGhlIGdpdmVuIElQIGhvc3Qgb3Is IGlmIG5vIGhvc3Qgc3BlY2lmaWVkLCB0b1xuXAotICB0aGUgY3VycmVudCBob3N0LiAgVXNlcyB0 aGUgc3lzdGVtJ3MgRlRQIHByb2dyYW0sIGlmIGFueS4iKSk7Ci0jZWxzZQotI2lmbmRlZiBOT0ZU UAotICAgIHJldHVybihkb2Z0cGhscCgpKTsKLSNlbmRpZiAvKiBOT0ZUUCAqLwotI2VuZGlmIC8q IFNZU0ZUUCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0jaWZuZGVmIE5PRlJJTExTCi1j YXNlIFhYUFJJOgotI2lmZGVmIFVOSVgKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBQUklOVCBm aWxlIFsgb3B0aW9ucyBdXG5cCi0gIFByaW50cyB0aGUgbG9jYWwgZmlsZSBvbiBhIGxvY2FsIHBy aW50ZXIgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy4gIEFsc28gc2VlXG5cCi0gIEhFTFAgU0VUIFBS SU5URVIuIikpOwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBQ UklOVCBmaWxlIFsgb3B0aW9ucyBdXG5cCi0gIFByaW50cyB0aGUgbG9jYWwgZmlsZSBvbiBhIGxv Y2FsIHByaW50ZXIgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy4gIEFsc28gc2VlXG5cCi0gIEhFTFAg U0VUIFBSSU5URVIuIikpOwotI2Vsc2UKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBQUklOVCBm aWxlXG5cCi0gIFByaW50cyB0aGUgbG9jYWwgZmlsZSBvbiBhIGxvY2FsIHByaW50ZXIuICBBbHNv IHNlZSBIRUxQIFNFVCBQUklOVEVSLiIpKTsKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyog Vk1TICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotY2FzZSBYWFBXRDoKLWNhc2UgWFhMUFdE OgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFBXRFxuXAotUHJpbnQgdGhlIG5hbWUgb2YgdGhl IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIikpOwotCi0jaWZuZGVmIE5PU1BMCi1jYXNlIFhY UkVBOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFQUQgdmFyaWFibGVuYW1lXG5cCi0gIFJl YWRzIGEgbGluZSBmcm9tIHRoZSBjdXJyZW50bHkgb3BlbiBSRUFEIG9yICFSRUFEIGZpbGUgaW50 byB0aGUgdmFyaWFibGVcblwKLSAgKHNlZSBPUEVOKS4iKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8K LQotI2lmbmRlZiBOT1hGRVIKLWNhc2UgWFhSRUM6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhyYykp OwotCi1jYXNlIFhYUkVNOgotICAgIHkgPSBjbWtleShyZW1jbWQsbnJtdCwiUmVtb3RlIGNvbW1h bmQiLCIiLHh4c3RyaW5nKTsKLSAgICByZXR1cm4oZG9ocm10KHkpKTsKLSNlbmRpZiAvKiBOT1hG RVIgKi8KLQotI2lmbmRlZiBOT1NQTAotY2FzZSBYWFJFVDoKLSAgICByZXR1cm4oaG1zZygiU3lu dGF4OiBSRVRVUk4gWyB2YWx1ZSBdXG5cCi0gIFJldHVybiBmcm9tIGEgbWFjcm8uICBBbiBvcHRp b25hbCByZXR1cm4gdmFsdWUgY2FuIGJlIGdpdmVuIGZvciB1c2Ugd2l0aFxuXAotICBcXGZleGVj dXRlKG1hY3JvKSwgd2hpY2ggYWxsb3dzIG1hY3JvcyB0byBiZSB1c2VkIGxpa2UgZnVuY3Rpb25z LiIpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PWEZFUgotY2FzZSBYWFNFTjoK LSAgICByZXR1cm4oaG1zZ2EoaG14eHNlbikpOwotY2FzZSBYWE1PVkU6Ci0gICAgcmV0dXJuKGht c2coIk1PVkUgaXMgZXhhY3RseSBsaWtlIFNFTkQsIGV4Y2VwdCBlYWNoIGZpbGUgdGhhdCBpc1xu XAotc2VudCBzdWNjZXNzZnVsbHkgaXMgZGVsZXRlZCBhZnRlciBpdCBpcyBzZW50LiIpKTsKLSNp Zm5kZWYgTk9SRVNFTkQKLWNhc2UgWFhSU0VOOgotICAgIHJldHVybihobXNnKGhteHhyc2VuKSk7 Ci1jYXNlIFhYUkVHRVQ6Ci0gICAgcmV0dXJuKGhtc2coaG14eHJnZXQpKTsKLWNhc2UgWFhQU0VO OgotICAgIHJldHVybihobXNnKGhteHhwc2VuKSk7Ci0jZW5kaWYgLyogTk9SRVNFTkQgKi8KLQot I2lmbmRlZiBOT1NFUlZFUgotY2FzZSBYWFNFUjoKLSAgICByZXR1cm4oaG1zZyhobXh4c2VyKSk7 Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBO T0pDCi1jYXNlIFhYU1VTOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFNVU1BFTkQgb3IgWlxu XAotICBTdXNwZW5kcyBLZXJtaXQuICBDb250aW51ZSBLZXJtaXQgd2l0aCB0aGUgYXBwcm9wcmlh dGUgc3lzdGVtIGNvbW1hbmQsXG5cCi0gIHN1Y2ggYXMgZmcuIikpOwotI2VuZGlmIC8qIE5PSkMg Ki8KLQotY2FzZSBYWFNFVDoKLSAgICB5ID0gY21rZXkocHJtdGFiLG5wcm0sIlBhcmFtZXRlciIs IiIseHhzdHJpbmcpOwotICAgIGRlYnVnKEYxMDEsIkhFTFAgU0VUIHkiLCIiLHkpOwotICAgIHJl dHVybihkb2hzZXQoeSkpOwotCi0jaWZuZGVmIE5PUFVTSAotY2FzZSBYWFNIRToKLSAgICBpZiAo bm9wdXNoKSB7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAg ICAgICBwcmludGYoIlNvcnJ5LCBoZWxwIG5vdCBhdmFpbGFibGUgZm9yIFwiJXNcIlxuIixjbWRi dWYpOwotICAgICAgICBicmVhazsKLSAgICB9IGVsc2UKLSAgICAgICByZXR1cm4oaG1zZ2EoaHh4 c2hlKSk7Ci0jaWZkZWYgQ0tfUkVESVIKLWNhc2UgWFhGVU46Ci0gICAgcmV0dXJuKGhtc2coIlN5 bnRheDogUkVESVJFQ1QgY29tbWFuZFxuXAotICBSdW5zIHRoZSBnaXZlbiBsb2NhbCBjb21tYW5k IHdpdGggaXRzIHN0YW5kYXJkIGlucHV0IGFuZCBvdXRwdXQgcmVkaXJlY3RlZFxuXAotICB0byB0 aGUgY3VycmVudCBTRVQgTElORSBvciBTRVQgSE9TVCBjb21tdW5pY2F0aW9ucyBwYXRoLlxuXAot ICBTeW5vbnltOiA8IChMZWZ0IGFuZ2xlIGJyYWNrZXQpLiIpKTsKLSNlbmRpZiAvKiBDS19SRURJ UiAqLwotCi0jaWZkZWYgQ0tfUkVYWAotY2FzZSBYWFJFWFg6Ci0gICAgcmV0dXJuKGhtc2coIlN5 bnRheDogUkVYWCB0ZXh0XG5cCi0gIFRoZSB0ZXh0IGlzIGEgUmV4eCBjb21tYW5kIHRvIGJlIGV4 ZWN1dGVkLiBUaGUgXFx2KHJleHgpIHZhcmlhYmxlIGlzIHNldFxuXAotICB0byB0aGUgUmV4eCBj b21tYW5kJ3MgcmV0dXJuIHZhbHVlLlxuXAotICBUbyBleGVjdXRlIGEgcmV4eCBwcm9ncmFtIGZp bGUsIHVzZTogIFJFWFggY2FsbCA8ZmlsZW5hbWU+XG5cCi0gIFJleHggcHJvZ3JhbXMgbWF5IGNh bGwgS2VybWl0IGZ1bmN0aW9ucyBieSBwbGFjaW5nIHRoZSBLZXJtaXQgY29tbWFuZFxuXAotICBp biBzaW5nbGUgcXVvdGVzLiAgRm9yIGluc3RhbmNlOiAgJ3NldCBwYXJpdHkgbm9uZScuIikpOwot I2VuZGlmIC8qIENLX1JFWFggKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmbmRlZiBOT1NI T1cKLWNhc2UgWFhTSE86Ci0gICAgcmV0dXJuKGhtc2coIlwKLSAgRGlzcGxheSBjdXJyZW50IHZh bHVlcyBvZiB2YXJpb3VzIGl0ZW1zIChTRVQgcGFyYW1ldGVycywgdmFyaWFibGVzLCBldGMpLlxu XAotICBUeXBlIFNIT1cgPyBmb3IgYSBsaXN0IG9mIGNhdGVnb3JpZXMuIikpOwotI2VuZGlmIC8q IE5PU0hPVyAqLwotCi1jYXNlIFhYU1BBOgotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgcmV0dXJu KGhtc2coIlwKLSAgRGlzcGxheSBkaXNrIHVzYWdlIGluIGN1cnJlbnQgZGV2aWNlLCBkaXJlY3Rv cnksXG5cCi0gIG9yIHJldHVybiBzcGFjZSBmb3IgYSBzcGVjaWZpZWQgZGV2aWNlLCBkaXJlY3Rv cnkuIikpOwotI2Vsc2UKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTUEFDRVxuXAotICBEaXNw bGF5IGRpc2sgdXNhZ2UgaW4gY3VycmVudCBkZXZpY2UgYW5kL29yIGRpcmVjdG9yeSIpKTsKLSNl bmRpZgotCi1jYXNlIFhYU1RBOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFNUQVRJU1RJQ1Mg Wy9CUklFRl1cblwKLSAgRGlzcGxheSBzdGF0aXN0aWNzIGFib3V0IG1vc3QgcmVjZW50IGZpbGUg dHJhbnNmZXIiKSk7Ci0KLSNpZm5kZWYgTk9TUEwKLWNhc2UgWFhTVE86Ci0gICAgcmV0dXJuKGht c2coIlN5bnRheDogU1RPUCBbIG51bWJlciBbIG1lc3NhZ2UgXSBdXG5cCi0gIFN0b3AgZXhlY3V0 aW5nIHRoZSBjdXJyZW50IG1hY3JvIG9yIFRBS0UgZmlsZSBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5 IHRvXG5cCi0gIHRoZSBLZXJtaXQgcHJvbXB0LiAgTnVtYmVyIGlzIGEgcmV0dXJuIGNvZGUuICBN ZXNzYWdlIHByaW50ZWQgaWYgZ2l2ZW4uIikpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLWNhc2Ug WFhUQUs6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHh0YWspKTsKLQotI2lmZGVmIFRDUFNPQ0tFVAot I2lmZGVmIFROQ09ERQotY2FzZSBYWElLU0Q6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhpa3MpKTsK LQotY2FzZSBYWFRFTDoKLSAgICByZXR1cm4oaG1zZ2EoaG14eHRlbCkpOwotCi1jYXNlIFhYVEVM T1A6Ci0gICAgcmV0dXJuKGhtc2dhKGh4dG9wdCkpOwotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0j aWZkZWYgUkxPR0NPREUKLWNhc2UgWFhSTE9HOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFJM T0dJTiBbIHN3aXRjaGVzIF0gWyBob3N0IFsgdXNlcm5hbWUgXSBdXG5cCi0gIEVxdWl2YWxlbnQg dG8gU0VUIE5FVFdPUksgVFlQRSBUQ1AvSVAsIFNFVCBIT1NUIGhvc3QgWyBzZXJ2aWNlIF0gL1JM T0dJTixcblwKLSAgSUYgU1VDQ0VTUyBDT05ORUNULiAgSWYgaG9zdCBpcyBvbWl0dGVkLCB0aGUg cHJldmlvdXMgY29ubmVjdGlvbiAoaWYgYW55KVxuXAotICBpcyByZXN1bWVkLiAgRGVwZW5kaW5n IG9uIGhvdyBLZXJtaXQgaGFzIGJlZW4gYnVpbHQgc3dpdGNoZXMgbWF5IGJlXG5cCi0gIGF2YWls YWJsZSB0byByZXF1aXJlIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGFuZCBERVMgZW5jcnlwdGlv bi4iKSk7Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQot I2lmbmRlZiBOT1hNSVQKLWNhc2UgWFhUUkE6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eHhtaXQpKTsK LSNlbmRpZiAvKiBOT1hNSVQgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotY2FzZSBYWFRZUDoKLSAg ICByZXR1cm4oaG1zZ2EoaG14eHR5cCkpOwotY2FzZSBYWE1PUkU6Ci0gICAgcmV0dXJuKGhtc2co IlN5bnRheDogTU9SRSBbIHN3aXRjaGVzIF0gZmlsZW5hbWVcblwKLSAgRXF1aXZhbGVudCB0byBU WVBFIC9QQUdFIGZpbGVuYW1lOyBzZWUgSEVMUCBUWVBFLiIpKTsKLWNhc2UgWFhDQVQ6Ci0gICAg cmV0dXJuKGhtc2coIlN5bnRheDogTU9SRSBbIHN3aXRjaGVzIF0gZmlsZW5hbWVcblwKLSAgRXF1 aXZhbGVudCB0byBUWVBFIC9OT1BBR0UgZmlsZW5hbWU7IHNlZSBIRUxQIFRZUEUuIikpOwotY2Fz ZSBYWEhFQUQ6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogSEVBRCBbIHN3aXRjaGVzIF0gZmls ZW5hbWVcblwKLSAgRXF1aXZhbGVudCB0byBUWVBFIC9IRUFEIGZpbGVuYW1lOyBzZWUgSEVMUCBU WVBFLiIpKTsKLWNhc2UgWFhUQUlMOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFRBSUwgWyBz d2l0Y2hlcyBdIGZpbGVuYW1lXG5cCi0gIEVxdWl2YWxlbnQgdG8gVFlQRSAvVEFJTCBmaWxlbmFt ZTsgc2VlIEhFTFAgVFlQRS4iKSk7Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lmbmRlZiBO T1NQTAotY2FzZSBYWFdISToKLSAgICByZXR1cm4oaG1zZ2Eod2hpaGxwKSk7Ci0KLWNhc2UgWFhT V0lUOgotICAgIHJldHVybihobXNnYShzd2lobHApKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0j aWZuZGVmIE5PQ1NFVFMKLWNhc2UgWFhYTEE6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eHhsYSkpOwot I2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotY2FzZSBYWFZFUjoKLSAgICByZXR1cm4oaG1zZygiU3lu dGF4OiBWRVJTSU9OXG5EaXNwbGF5cyB0aGUgcHJvZ3JhbSB2ZXJzaW9uIG51bWJlci4iKSk7Ci0K LSNpZm5kZWYgTk9TUEwKLWNhc2UgWFhXQUk6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eHdhaSkpOwot I2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9GUklMTFMKLWNhc2UgWFhXSE86Ci0gICAg cmV0dXJuKGhtc2coIlN5bnRheDogV0hPIFsgdXNlciBdXG5EaXNwbGF5cyBpbmZvIGFib3V0IHRo ZSB1c2VyLiIpKTsKLQotY2FzZSBYWFdSSToKLSAgICByZXR1cm4oaG1zZ2EoaHh4d3JpKSk7Ci0K LWNhc2UgWFhXUkw6Ci0gICAgcmV0dXJuKGhtc2coCi0iV1JJVEUtTElORSAoV1JJVEVMTikgaXMg anVzdCBsaWtlIFdSSVRFLCBidXQgaW5jbHVkZXMgYSBsaW5lIHRlcm1pbmF0b3JcblwKLWF0IHRo ZSBlbmQgb2YgdGV4dC4gIFNlZSBXUklURS4iKSk7Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQot I2lmbmRlZiBOT1NQTAotY2FzZSBYWElGWDoKLSAgICByZXR1cm4oaG1zZ2EoaWZ4aGxwKSk7Ci0K LWNhc2UgWFhHRVRDOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHRVRDICovCi0gICAg cmV0dXJuKGhtc2dhKGh4eGdldGMpKTsKLQotY2FzZSBYWEZXRDogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEZPUldBUkQgKi8KLSAgICByZXR1cm4oaG1zZygKLSJMaWtlIEdPVE8sIGJ1 dCBzZWFyY2hlcyBvbmx5IGZvcndhcmQgZm9yIHRoZSBsYWJlbC4gIFNlZSBHT1RPLiIpKTsKLQot Y2FzZSBYWExPQ0FMOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExPQ0FMICovCi0gICAg cmV0dXJuKGhtc2coCi0iRGVjbGFyZXMgYSB2YXJpYWJsZSB0byBiZSBsb2NhbCB0byB0aGUgY3Vy cmVudCBtYWNybyBvciBjb21tYW5kIGZpbGUuIikpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLWNh c2UgWFhWSUVXOgotICAgIHJldHVybihobXNnKAotIlZpZXcgdGhlIHRlcm1pbmFsIGVtdWxhdGlv biBzY3JlZW4gZXZlbiB3aGVuIHRoZXJlIGlzIG5vIGNvbm5lY3Rpb24uIikpOwotCi0jaWZkZWYg TkVXRlRQCi1jYXNlIFhYQVNDOgotICAgIHJldHVybihobXNnKAotIkluaGliaXRzIGF1dG9tYXRp YyB0cmFuc2Zlci1tb2RlIHN3aXRjaGluZyBhbmQgZm9yY2VzIFRFWFQgKEFTQ0lJKSB0cmFuc2Zl clxuXAotbW9kZSBmb3IgYWxsIGZpbGVzIGluIGJvdGggS2VybWl0IGFuZCBGVFAgcHJvdG9jb2xz LiIpKTsKLWNhc2UgWFhCSU46Ci0gICAgcmV0dXJuKGhtc2coCi0iSW5oaWJpdHMgYXV0b21hdGlj IHRyYW5zZmVyLW1vZGUgc3dpdGNoaW5nIGFuZCBmb3JjZXMgQklOQVJZIHRyYW5zZmVyIG1vZGVc blwKLWZvciBhbGwgZmlsZXMgaW4gYm90aCBLZXJtaXQgYW5kIEZUUCBwcm90b2NvbHMuIikpOwot I2Vsc2UKLWNhc2UgWFhBU0M6Ci0gICAgcmV0dXJuKGhtc2coCi0iSW5oaWJpdHMgYXV0b21hdGlj IHRyYW5zZmVyLW1vZGUgc3dpdGNoaW5nIGFuZCBmb3JjZXMgVEVYVCAoQVNDSUkpIHRyYW5zZmVy XG5cCi1tb2RlIGZvciBhbGwgZmlsZXMuIikpOwotY2FzZSBYWEJJTjoKLSAgICByZXR1cm4oaG1z ZygKLSJJbmhpYml0cyBhdXRvbWF0aWMgdHJhbnNmZXItbW9kZSBzd2l0Y2hpbmcgYW5kIGZvcmNl cyBCSU5BUlkgdHJhbnNmZXIgbW9kZVxuXAotZm9yIGFsbCBmaWxlcy4iKSk7Ci0jZW5kaWYJLyog TkVXRlRQICovCi0KLWNhc2UgWFhEQVRFOgotICAgIHJldHVybihobXNnYShobXh4ZGF0ZSkpOwot Ci1jYXNlIFhYUkVUUjoKLSAgICByZXR1cm4oaG1zZygKLSJKdXN0IGxpa2UgR0VUIGJ1dCBhc2tz IHRoZSBzZXJ2ZXIgdG8gZGVsZXRlIGVhY2ggZmlsZSB0aGF0IGhhcyBiZWVuXG5cCi1zZW50IHN1 Y2Nlc3NmdWxseS4iKSk7Ci0KLWNhc2UgWFhFSUdIVDoKLSAgICByZXR1cm4oaG1zZygKLSJFcXVp dmFsZW50IHRvIFNFVCBQQVJJVFkgTk9ORSwgU0VUIENPTU1BTkQgQllURSA4LCBTRVQgVEVSTUlO QUwgQllURSA4LiIpKTsKLQotY2FzZSBYWFNBVkU6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhzYXZl KSk7Ci0KLSNpZm5kZWYgTk9GUklMTFMKLSNpZm5kZWYgTk9QVVNICi1jYXNlIFhYRURJVDoKLSAg ICByZXR1cm4oaG1zZygiU3ludGF4OiBFRElUIFsgPGZpbGU+IF1cblwKLVN0YXJ0cyB5b3VyIHBy ZWZlcnJlZCBlZGl0b3Igb24gdGhlIGdpdmVuIGZpbGUsIG9yIGlmIG5vbmUgZ2l2ZW4sIHRoZSBt b3N0XG5cCi1yZWNlbnRseSBlZGl0ZWQgZmlsZSwgaWYgYW55LiAgQWxzbyBzZWUgU0VUIEVESVRP Ui4iKSk7Ci0jZW5kaWYgLyogTk9QVVNIICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lm ZGVmIEJST1dTRVIKLWNhc2UgWFhCUk9XUzoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBCUk9X U0UgWyA8dXJsPiBdXG5cCi1TdGFydHMgeW91ciBwcmVmZXJyZWQgV2ViIGJyb3dzZXIgb24gdGhl IGdpdmVuIFVSTCwgb3IgaWYgbm9uZSBnaXZlbiwgdGhlXG5cCi1tb3N0IHJlY2VudGx5IHZpc2l0 ZWQgVVJMLCBpZiBhbnkuICBBbHNvIHNlZSBTRVQgQlJPV1NFUi4iKSk7Ci0jZW5kaWYgLyogQlJP V1NFUiAqLwotCi0jaWZkZWYgQ0tfVEFQSQotY2FzZSBYWFRBUEk6Ci0gICAgcmV0dXJuKGhtc2dh KGh4eHRhcGkpKTsKLSNlbmRpZiAvKiBDS19UQVBJICovCi0KLSNpZmRlZiBQSVBFU0VORAotY2Fz ZSBYWENTRU46Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogQ1NFTkQgWyBzd2l0Y2hlcyBdIDxj b21tYW5kPiBbIDxhcy1uYW1lPiBdXG5cCi1TZW5kcyBmcm9tIHRoZSBnaXZlbiA8Y29tbWFuZD4g cmF0aGVyIHRoYW4gZnJvbSBhIGZpbGUuICBFcXVpdmFsZW50IHRvXG5cCi1TRU5EIC9DT01NQU5E OyBzZWUgSEVMUCBTRU5EIGZvciBkZXRhaWxzLiIpKTsKLQotY2FzZSBYWENSRUM6Ci0gICAgcmV0 dXJuKGhtc2coIlN5bnRheDogQ1JFQ0VJVkUgWyBzd2l0Y2hlcyBdIDxjb21tYW5kPlxuXAotUmVj ZWl2ZXMgdG8gdGhlIGdpdmVuIDxjb21tYW5kPiByYXRoZXIgdGhhbiB0byBhIGZpbGUuICBFcXVp dmFsZW50IHRvXG5cCi1SRUNFSVZFIC9DT01NQU5EOyBzZWUgSEVMUCBSRUNFSVZFIGZvciBkZXRh aWxzLiIpKTsKLQotY2FzZSBYWENHRVQ6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogQ0dFVCA8 cmVtb3RlLWZpbGUtb3ItY29tbWFuZD4gPGxvY2FsLWNvbW1hbmQ+XG5cCi1FcXVpdmFsZW50IHRv IEdFVCAvQ09NTUFORDsgc2VlIEhFTFAgR0VUIGZvciBkZXRhaWxzLiIpKTsKLSNlbmRpZiAvKiBQ SVBFU0VORCAqLwotCi0jaWZuZGVmIE5PU1BMCi1jYXNlIFhYRlVOQzoKLS8qCi0gIFRyaWNreSBw YXJzaW5nLiAgV2Ugd2FudCB0byBsZXQgdGhlbSB0eXBlIHRoZSBmdW5jdGlvbiBuYW1lIGluIGFu eSBmb3JtYXQKLSAgYXQgYWxsOiBcZmJsYWgoKSwgXGZibGFoLCBcXGZibGFoKCksIGZibGFoLCBi bGFoLCBibGFoKCksIGV0YywgYnV0IG9mIGNvdXJzZQotICBvbmx5IG9uZSBvZiB0aGVzZSBpcyBy ZWNvZ25pemVkIGJ5IGNta2V5KCkuICBTbyB3ZSBjYWxsIGNta2V5eCgpICh0aGUgIm5vCi0gIGNv bXBsYWludHMiIHZlcnNpb24gb2YgY21rZXkoKSksIGFuZCBpZiBpdCBmYWlscywgd2UgdHJ5IHRo ZSBvdGhlciBmb3JtYXRzCi0gIHNpbGVudGx5LCBhbmQgc3RpbGwgYWxsb3cgZm9yIDxuby1uYW1l LWdpdmVuPiwgZWRpdGluZyBhbmQgcmVwYXJzZSwgZXRjLgotKi8KLSAgICB5ID0gY21rZXl4KGZu Y3RhYixuZnVuY3MsIk5hbWUgb2YgZnVuY3Rpb24iLCIiLE5VTEwpOwotICAgIGlmICh5ID09IC0x KSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGFyc2UgbmVlZGVkICovCi0gICAgICAgIHJl dHVybih5KTsKLSAgICB9IGVsc2UgaWYgKHkgPT0gLTMpIHsKLSAgICAgICAgaWYgKCh4ID0gY21j Zm0oKSkgPCAwKSAgICAgICAgICAvKiBGb3IgcmVjYWxsIGJ1ZmZlci4uLiAqLwotICAgICAgICAg IHJldHVybih4KTsKLSAgICAgICAgcmV0dXJuKGRvaGZ1bmMoeSkpOyAgICAgICAgICAgICAvKiAt MyBnaXZlcyBnZW5lcmFsIG1lc3NhZ2UgKi8KLSAgICB9Ci0gICAgaWYgKHkgPCAwKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogU29tZXRoaW5nIGdpdmVuIGJ1dCBkaWRuJ3QgbWF0Y2ggKi8K LSAgICAgICAgaW50IGR1bW15OwotICAgICAgICBjaGFyICogcDsKLSAgICAgICAgZm9yIChwID0g YXRtYnVmOyAqcDsgcCsrKSB7ICAgICAvKiBDaG9wIG9mZiB0cmFpbGluZyBwYXJlbnMgaWYgYW55 ICovCi0gICAgICAgICAgICBpZiAoKnAgPT0gJygnKSB7Ci0gICAgICAgICAgICAgICAgKnAgPSBO VUw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICAgICAgLyogQ2hvcCBvZmYgbGVhZGluZyAiXFxmIiBvciAiXGYiIG9yICJmIiAqLwotICAgICAg ICBwID0gYXRtYnVmOwotICAgICAgICBpZiAoKnAgPT0gQ01EUSkgICAgICAgICAgICAgICAgIC8q IEFsbG93IGZvciBcXGYuLi4gKi8KLSAgICAgICAgICBwKys7Ci0gICAgICAgIGlmICgqcCA9PSBD TURRICYmICgqKHArMSkgPT0gJ2YnIHx8ICoocCsxKSA9PSAnRicpKSB7IC8qIG9yIFxmICovCi0g ICAgICAgICAgICBwICs9IDI7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ2YnIHx8ICpwID09 ICdGJykgeyAvKiBvciBqdXN0IGYgKi8KLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgfQotICAg ICAgICB5ID0gbG9va3VwKGZuY3RhYixwLG5mdW5jcywmZHVtbXkpOyAvKiBMb29rIHVwIHRoZSBy ZXN1bHQgKi8KLSAgICB9Ci0gICAgaWYgKHkgPCAwKSB7Ci0gICAgICAgIHByaW50ZigiP05vIHN1 Y2ggZnVuY3Rpb24gLSBcIiVzXCJcbiIsYXRtYnVmKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAg ICB9Ci0gICAgeCA9IGNtZ2JyaygpOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmluZCBvdXQg aG93IHVzZXIgdGVybWluYXRlZCAqLwotICAgIGlmICh4ID09IExGIHx8IHggPT0gQ1IpICAgICAg ICAgICAgIC8qIGlmIHdpdGggQ1Igb3IgTEYgKi8KLSAgICAgIGNtZmxncyA9IDE7ICAgICAgICAg ICAgICAgICAgICAgICAvKiByZXN0b3JlIGNtZmxncyB0byBzYXkgc28gKi8KLSAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApICAgICAgICAgICAgICAvKiBBbmQgVEhFTiBjb25maXJtIHNvIGNvbW1h bmQgd2lsbCAqLwotICAgICAgcmV0dXJuKHgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdl dCBpbnRvIHJlY2FsbCBidWZmZXIuICovCi0gICAgcmV0dXJuKGRvaGZ1bmMoeSkpOwotI2VuZGlm IC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9DTURMCi1jYXNlIFhYT1BUUzogICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ29tbWFuZC1saW5lIG9wdGlvbnMgKi8KLSAgICByZXR1cm4oZG9o b3B0cygpKTsKLQotY2FzZSBYWFhPUFRTOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4 dGVuZGVkIGNvbW1hbmQtbGluZSBvcHRpb25zICovCi0gICAgcmV0dXJuKGRveG9wdHMoKSk7Ci0j ZW5kaWYgLyogTk9DTURMICovCi0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9LVkVSQlMKLWNhc2Ug WFhLVlJCOiB7Ci0gICAgeSA9IGNta2V5eChrdmVyYnMsbmt2ZXJicywiTmFtZSBvZiBrZXlib2Fy ZCB2ZXJiIHdpdGhvdXQgXFxrIiwiIixOVUxMKTsKLSAgICBpZiAoeSA9PSAtMSkgeyAgICAgICAg ICAgICAgICAgICAgICAvKiBSZXBhcnNlIG5lZWRlZCAqLwotICAgICAgICByZXR1cm4oeSk7Ci0g ICAgfSBlbHNlIGlmICh5ID09IC0zKSB7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkg ICAgICAgICAgLyogRm9yIHJlY2FsbCBidWZmZXIuLi4gKi8KLSAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgIHJldHVybihkb2hrdmVyYih5KSk7ICAgICAgICAgICAgLyogLTMgZ2l2ZXMgZ2Vu ZXJhbCBtZXNzYWdlICovCi0gICAgfQotICAgIGlmICh5IDwgMCkgeyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNvbWV0aGluZyBnaXZlbiBidXQgZGlkbid0IG1hdGNoICovCi0gICAgICAgIGlu dCBkdW1teTsKLSAgICAgICAgY2hhciAqIHA7Ci0gICAgICAgIGZvciAocCA9IGF0bWJ1ZjsgKnA7 IHArKykgeyAgICAgLyogQ2hvcCBvZmYgdHJhaWxpbmcgcGFyZW5zIGlmIGFueSAqLwotICAgICAg ICAgICAgaWYgKCpwID09ICcoJykgewotICAgICAgICAgICAgICAgICpwID0gTlVMOwotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIENo b3Agb2ZmIGxlYWRpbmcgIlxcayIgb3IgIlxrIiBvciAiayIgKi8KLSAgICAgICAgcCA9IGF0bWJ1 ZjsKLSAgICAgICAgaWYgKCpwID09IENNRFEpICAgICAgICAgICAgICAgICAvKiBBbGxvdyBmb3Ig XFxrLi4uICovCi0gICAgICAgICAgcCsrOwotICAgICAgICBpZiAoKnAgPT0gQ01EUSAmJiAoKihw KzEpID09ICdrJyB8fCAqKHArMSkgPT0gJ0snKSkgeyAvKiBvciBcayAqLwotICAgICAgICAgICAg cCArPSAyOwotICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdrJyB8fCAqcCA9PSAnSycpIHsgLyog b3IganVzdCBrICovCi0gICAgICAgICAgICBwKys7Ci0gICAgICAgIH0KLSAgICAgICAgeSA9IGxv b2t1cChrdmVyYnMscCxua3ZlcmJzLCZkdW1teSk7IC8qIExvb2sgdXAgdGhlIHJlc3VsdCAqLwot ICAgIH0KLSAgICBpZiAoeSA8IDApIHsKLSAgICAgICAgcHJpbnRmKCI/Tm8gc3VjaCBmdW5jdGlv biAtIFwiJXNcIlxuIixhdG1idWYpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICB4 ID0gY21nYnJrKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaW5kIG91dCBob3cgdXNlciB0 ZXJtaW5hdGVkICovCi0gICAgaWYgKHggPT0gTEYgfHwgeCA9PSBDUikgICAgICAgICAgICAgLyog aWYgd2l0aCBDUiBvciBMRiAqLwotICAgICAgY21mbGdzID0gMTsgICAgICAgICAgICAgICAgICAg ICAgIC8qIHJlc3RvcmUgY21mbGdzIHRvIHNheSBzbyAqLwotICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkgICAgICAgICAgICAgIC8qIEFuZCBUSEVOIGNvbmZpcm0gc28gY29tbWFuZCB3aWxsICov Ci0gICAgICByZXR1cm4oeCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0IGludG8gcmVj YWxsIGJ1ZmZlci4gKi8KLSAgICByZXR1cm4oZG9oa3ZlcmIoeSkpOwotfQotI2VuZGlmIC8qIE5P S1ZFUkJTICovCi0jZW5kaWYgLyogT1MyICovCi0KLWNhc2UgWFhLRVJNSToKLSAgICByZXR1cm4o aG1zZygiU3ludGF4OiBLRVJNSVQgW2NvbW1hbmQtbGluZS1vcHRpb25zXVxuXAotICBMZXRzIHlv dSBnaXZlIGNvbW1hbmQtbGluZSBvcHRpb25zIGF0IHRoZSBwcm9tcHQgb3IgaW4gYSBzY3JpcHQu XG5cCi0gIEhFTFAgT1BUSU9OUyBmb3IgbW9yZSBpbmZvLiIpKTsKLQotY2FzZSBYWEJBQ0s6Ci0g ICAgcmV0dXJuKGhtc2coIlN5bnRheDogQkFDS1xuICBSZXR1cm5zIHRvIHlvdXIgcHJldmlvdXMg ZGlyZWN0b3J5LiIpKTsKLQotY2FzZSBYWFdIRVJFOgotICAgIHJldHVybihobXNnKCJTeW50YXg6 IFdIRVJFXG4gIFRlbGxzIHdoZXJlIHlvdXIgdHJhbnNmZXJyZWQgZmlsZXMgd2VudC4iKSk7Ci0K LSNpZm5kZWYgTk9YRkVSCi1jYXNlIFhYUkVNVjoKLSAgICByZXR1cm4oaG1zZ2EoaG14eHJlbXYp KTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIENLX0tFUkJFUk9TCi1jYXNlIFhYQVVU SDoKLSAgICByZXR1cm4oaG1zZ2EoaG14eGF1dGgpKTsKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAq LwotCi0jaWZuZGVmIE5PSFRUUAotY2FzZSBYWEhUVFA6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHho dHRwKSk7Ci0jZW5kaWYgLyogTk9IVFRQICovCi0KLSNpZmRlZiBORVRDTUQKLWNhc2UgWFhQSVBF OgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFBJUEUgWyBjb21tYW5kIF1cblwKLU1ha2VzIGEg Y29ubmVjdGlvbiB0aHJvdWdoIHRoZSBwcm9ncmFtIHdob3NlIGNvbW1hbmQgbGluZSBpcyBnaXZl bi4gRXhhbXBsZTpcblwKLVxuIHBpcGUgcmxvZ2luIHh5emNvcnAuY29tIikpOwotI2VuZGlmIC8q IE5FVENNRCAqLwotCi1jYXNlIFhYU1RBVFVTOgotICAgIHJldHVybihobXNnKAotIlNUQVRVUyBp cyB0aGUgc2FtZSBhcyBTSE9XIFNUQVRVUzsgcHJpbnRzIFNVQ0NFU1Mgb3IgRkFJTFVSRSBmb3Ig dGhlXG5cCi1wcmV2aW91cyBjb21tYW5kLiIpKTsKLQotI2lmbmRlZiBOT1NQTAotY2FzZSBYWEFT U0VSOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IEFTU0VSVCA8Y29uZGl0aW9uPlxuXAotU3Vj Y2VlZHMgb3IgZmFpbHMgZGVwZW5kaW5nIG9uIDxjb25kaXRpb24+OyBzZWUgSEVMUCBJRiBmb3Ig PGNvbmRpdGlvbj5zLiIpKTsKLQotY2FzZSBYWEZBSUw6Ci0gICAgcmV0dXJuKGhtc2coIkFsd2F5 cyBmYWlscy4iKSk7Ci0KLWNhc2UgWFhTVUNDOgotICAgIHJldHVybihobXNnKCJBbHdheXMgc3Vj Y2VlZHMuIikpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBDS19MT0dJTgotY2FzZSBY WExPR09VVDoKLSAgICByZXR1cm4oaG1zZygKLSJJZiB5b3UgaGF2ZWQgbG9nZ2VkIGluIHRvIEtl cm1pdCBhcyBhbiBJbnRlcm5ldCBLZXJtaXQgc2VydmVyLCB0aGUgTE9HT1VUXG5cCi1jb21tYW5k LCBnaXZlbiBhdCB0aGUgcHJvbXB0LCBsb2dzIHlvdSBvdXQgYW5kIGNsb3NlcyB5b3VyIHNlc3Np b24uIikpOwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0KLWNhc2UgWFhSRVNFVDoKLSAgICByZXR1 cm4oaG1zZygiQ2xvc2VzIGFsbCBvcGVuIGZpbGVzIGFuZCBsb2dzLiIpKTsKLQotI2lmbmRlZiBO T0NTRVRTCi1jYXNlIFhYQVNTT0M6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhhc3NvYykpOwotI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lmbmRlZiBOT1NQTAotY2FzZSBYWFNISUZUOgotICAgIHJl dHVybihobXNnKCJTeW50YXg6IFNISUZUIFsgbiBdXG5cCi0gIFNoaWZ0cyBcXCUxLi45IHZhcmlh YmxlcyBuIHBsYWNlcyB0byB0aGUgbGVmdDsgZGVmYXVsdCBuID0gMS4iKSk7Ci0jZW5kaWYgLyog Tk9TUEwgKi8KLQotI2lmbmRlZiBOT1BVU0gKLWNhc2UgWFhNQU46Ci0jaWZkZWYgVU5JWAotICAg IHJldHVybihobXNnKCJTeW50YXg6IE1BTlVBTCBbIHRvcGljIF1cblwKLSAgUnVucyB0aGUgXCJt YW5cIiBjb21tYW5kIG9uIHRoZSBnaXZlbiB0b3BpYyAoZGVmYXVsdCBcImtlcm1pdFwiKS4iKSk7 Ci0jZWxzZQotI2lmZGVmIE9TMgotICAgIHJldHVybihobXNnKCJTeW50YXg6IE1BTlVBTFxuXAot ICBBY2Nlc3NlcyB0aGUgS2VybWl0IDk1IEhUTUwgbWFudWFsIHVzaW5nIHRoZSBjdXJyZW50IGJy b3dzZXIuIikpOwotI2Vsc2UKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBNQU5VQUwgWyB0b3Bp YyBdXG5cCi0gIFJ1bnMgdGhlIFwiaGVscFwiIGNvbW1hbmQgb24gdGhlIGdpdmVuIHRvcGljIChk ZWZhdWx0IFwia2VybWl0XCIpLiIpKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBVTklY ICovCi0jZW5kaWYgLyogTk9QVVNIICovCi0KLWNhc2UgWFhXSUxEOgotICAgIHJldHVybihobXNn YShobXh4d2lsZCkpOwotCi0jaWZkZWYgTE9DVVMKLWNhc2UgWFhMT0NVOgotICAgIHJldHVybiho bXNnYShobXh5bG9jdXMpKTsKLSNlbmRpZgkvKiBMT0NVUyAqLwotCi1jYXNlIFhYUEFUOgotICAg IHJldHVybihobXNnYShobXh4cGF0KSk7Ci0KLSNpZm5kZWYgTk9YRkVSCi1jYXNlIFhYRkFTVDoK LWNhc2UgWFhDQVU6Ci1jYXNlIFhYUk9COgotICAgIHJldHVybihobXNnYShobXh4ZmFzdCkpOwot I2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgQ0tQVVJHRQotY2FzZSBYWFBVUkdFOgotICAg IHJldHVybihobXNnYShobXh4cHVyZ2UpKTsKLSNlbHNlCi0jaWZkZWYgVk1TCi1jYXNlIFhYUFVS R0U6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhwdXJnZSkpOwotI2VuZGlmIC8qIFZNUyAqLwotI2Vu ZGlmIC8qIENLUFVSR0UgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgY2FzZSBYWFJBU0c6Ci0gICAg cmV0dXJuKGhtc2coIiAgUkFTRyBhbmQgUkFTU0lHTiBhcmUgc2hvcnQgZm9ybXMgb2YgUkVNT1RF IEFTU0lHTi4iKSk7Ci0gIGNhc2UgWFhSQ1dEOgotICAgIHJldHVybihobXNnKCIgIFJDRCBhbmQg UkNXRCBhcmUgc2hvcnQgZm9ybXMgb2YgUkVNT1RFIENELiIpKTsKLSAgY2FzZSBYWFJDUFk6Ci0g ICAgcmV0dXJuKGhtc2coIiAgUkNPUFkgaXMgYSBzaG9ydCBmb3JtIG9mIFJFTU9URSBDT1BZLiIp KTsKLSAgY2FzZSBYWFJERUw6Ci0gICAgcmV0dXJuKGhtc2coIiAgUkRFTEVURSBpcyBhIHNob3J0 IGZvcm0gb2YgUkVNT1RFIFJFTEVURS4iKSk7Ci0gIGNhc2UgWFhSRElSOgotICAgIHJldHVybiho bXNnKCIgIFJESVJFQ1RPUlkgaXMgYSBzaG9ydCBmb3JtIG9mIFJFTU9URSBESVJFQ1RPUlkuIikp OwotICBjYXNlIFhYUlhJVDoKLSAgICByZXR1cm4oaG1zZygiICBSRVhJVCBpcyBhIHNob3J0IGZv cm0gb2YgUkVNT1RFIEVYSVQuIikpOwotICBjYXNlIFhYUkhMUDoKLSAgICByZXR1cm4oaG1zZygi ICBSSEVMUCBpcyBhIHNob3J0IGZvcm0gb2YgUkVNT1RFIEhFTFAuIikpOwotICBjYXNlIFhYUkhP UzoKLSAgICByZXR1cm4oaG1zZygiICBSSE9TVCBpcyBhIHNob3J0IGZvcm0gb2YgUkVNT1RFIEhP U1QuIikpOwotICBjYXNlIFhYUktFUjoKLSAgICByZXR1cm4oaG1zZygiICBSS0VSTUlUIGlzIGEg c2hvcnQgZm9ybSBvZiBSRU1PVEUgS0VSTUlULiIpKTsKLSAgY2FzZSBYWFJNS0Q6Ci0gICAgcmV0 dXJuKGhtc2coIiAgUk1LRElSIGlzIGEgc2hvcnQgZm9ybSBvZiBSRU1PVEUgTUtESVIuIikpOwot ICBjYXNlIFhYUk1TRzoKLSAgICByZXR1cm4oaG1zZygiICBSTUVTU0FHRSBhbmQgUk1TRyBhcmUg c2hvcnQgZm9ybXMgb2YgUkVNT1RFIE1FU1NBR0UuIikpOwotICBjYXNlIFhYUlBSSToKLSAgICBy ZXR1cm4oaG1zZygiICBSUFJJTlQgaXMgYSBzaG9ydCBmb3JtIG9mIFJFTU9URSBQUklOVC4iKSk7 Ci0gIGNhc2UgWFhSUFdEOgotICAgIHJldHVybihobXNnKCIgIFJQV0QgaXMgYSBzaG9ydCBmb3Jt IG9mIFJFTU9URSBQV0QuIikpOwotICBjYXNlIFhYUlFVRToKLSAgICByZXR1cm4oaG1zZygiICBR VUVSWSBhbmQgUlFVRVJZIGFyZSBzaG9ydCBmb3JtcyBvZiBSRU1PVEUgUVVFUlkuIikpOwotICBj YXNlIFhYUlJFTjoKLSAgICByZXR1cm4oaG1zZygiICBSUkVOQU1FIGlzIGEgc2hvcnQgZm9ybSBv ZiBSRU1PVEUgUkVOQU1FLiIpKTsKLSAgY2FzZSBYWFJSTUQ6Ci0gICAgcmV0dXJuKGhtc2coIiAg UlJNRElSIGlzIGEgc2hvcnQgZm9ybSBvZiBSRU1PVEUgUk1ESVIuIikpOwotICBjYXNlIFhYUlNF VDoKLSAgICByZXR1cm4oaG1zZygiICBSU0VUIGlzIGEgc2hvcnQgZm9ybSBvZiBSRU1PVEUgU0VU LiIpKTsKLSAgY2FzZSBYWFJTUEE6Ci0gICAgcmV0dXJuKGhtc2coIiAgUlNQQUNFIGlzIGEgc2hv cnQgZm9ybSBvZiBSRU1PVEUgU1BBQ0UuIikpOwotICBjYXNlIFhYUlRZUDoKLSAgICByZXR1cm4o aG1zZygiICBSVFlQRSBpcyBhIHNob3J0IGZvcm0gb2YgUkVNT1RFIFRZUEUuIikpOwotICBjYXNl IFhYUldITzoKLSAgICByZXR1cm4oaG1zZygiICBSV0hPIGlzIGEgc2hvcnQgZm9ybSBvZiBSRU1P VEUgV0hPLiIpKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotICBjYXNlIFhYU0NSTjoKLSAgICBy ZXR1cm4oaG1zZ2EoaG14eHNjcm4pKTsKLQotI2lmZGVmIENLRVhFQwotICBjYXNlIFhYRVhFQzoK LSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBFWEVDIDxjb21tYW5kPiBbIDxhcmcxPiBbIDxhcmcy PiBbIC4uLiBdIF1cblwKLSAgQy1LZXJtaXQgb3ZlcmxheXMgaXRzZWxmIHdpdGggdGhlIGdpdmVu IHN5c3RlbSBjb21tYW5kIGFuZCBzdGFydHMgaXQgd2l0aFxuXAotICB0aGUgZ2l2ZW4gYXJndW1l bnRzLiAgVXBvbiBhbnkgZXJyb3IsIGNvbnRyb2wgcmV0dXJucyB0byBDLUtlcm1pdC4iKSk7Ci0j ZW5kaWYgLyogQ0tFWEVDICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgY2FzZSBYWFRSQUNFOgotICAg IHJldHVybihobXNnKAotIlN5bnRheDogVFJBQ0UgeyAvT04sIC9PRkYgfSB7IEFTU0lHTk1FTlRT LCBDT01NQU5ELUxFVkVMLCBBTEwgfVxuXAotICBUdXJucyB0cmFjaW5nIG9mIHRoZSBnaXZlbiBv YmplY3Qgb24gb3Igb2ZmLiIpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgQ0tfUEVS TVMKLSNpZmRlZiBVTklYCi0gIGNhc2UgWFhDSE1PRDoKLSAgICByZXR1cm4oaG1zZ2EoaG14eGNo bW9kKSk7Ci0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0KLSNpZmRl ZiBDS1JPT1QKLSAgY2FzZSBYWENIUlQ6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhjaHJvb3QpKTsK LSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotI2lmbmRlZiBOT1NQTAotICBjYXNlIFhYUFJPTVA6Ci0g ICAgcmV0dXJuKGhtc2dhKGhteHhwcm9tcHQpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gIGNh c2UgWFhHUkVQOgotICAgIHJldHVybihobXNnYShobXh4Z3JlcCkpOwotCi0jaWZuZGVmIE5PU0VY UAotI2lmbmRlZiBOT1NQTAotICBjYXNlIFhYU0VYUDoKLSAgICByZXR1cm4oaG1zZ2EoaG14eHNl eHApKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2VuZGlmIC8qIE5PU0VYUCAqLwotCi0jaWZkZWYg Q0tMRUFSTgotICBjYXNlIFhYTEVBUk46Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhsZWFybikpOwot I2VuZGlmIC8qIENLTEVBUk4gKi8KLQotI2lmZGVmIEFOWVNTSAotICBjYXNlIFhYU1NIOgotICAg IHJldHVybihobXNnYShobXh4c3NoKSk7Ci0jZW5kaWYgLyogQU5ZU1NIICovCi0KLSNpZmRlZiBU Q1BTT0NLRVQKLSAgY2FzZSBYWEZJUkVXOgotICAgIHJldHVybihobXNnYShobXh4ZmlyZXcpKTsK LSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotI2lmZGVmIE5FV0ZUUAotICBjYXNlIFhYVVNFUjoK LSAgICByZXR1cm4oaG1zZygiIEVxdWl2YWxlbnQgdG8gRlRQIFVTRVIuIikpOwotICBjYXNlIFhY QUNDVDoKLSAgICByZXR1cm4oaG1zZygiIEVxdWl2YWxlbnQgdG8gRlRQIEFDQ09VTlQuIikpOwot I2VuZGlmIC8qIE5FV0ZUUCAqLwotCi0gIGNhc2UgWFhPUklFOgotICAgIHJldHVybihobXNnKCIg U2hvd3MgdGhlIGRpcmVjdG9yaWVzIGltcG9ydGFudCB0byBLZXJtaXQuIikpOwotCi0gIGNhc2Ug WFhDT05UOgotICAgIHJldHVybihobXNnKCIgSW4gYSBGT1Igb3IgV0hJTEUgbG9vcDogY29udGlu dWUgdGhlIGxvb3AuXG5cCi0gQXQgdGhlIHByb21wdDogY29udGludWUgYSBzY3JpcHQgdGhhdCBo YXMgXCJzaGVsbGVkIG91dFwiIHRvIHRoZSBwcm9tcHQuIikpOwotCi0gIGNhc2UgWFhSRURPOgot ICAgIHJldHVybihobXNnKCIgU3ludGF4OiBSRURPIHh4eCAob3IpIF54eHhcblwKLSBSZS1leGVj dXRlcyB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCBzdGFydGluZyB3aXRoIHh4eC4iKSk7Ci0KLSNp ZmRlZiBVTklYCi0jaWZuZGVmIE5PUFVURU5WCi0gIGNhc2UgWFhQVVRFOgotICAgIHJldHVybiho bXNnYShobXh4cHV0ZW52KSk7Ci0jZW5kaWYJLyogTk9QVVRFTlYgKi8KLSNlbmRpZgkvKiBVTklY ICovCi0KLSAgY2FzZSBYWE5PVEFWOgotICAgIHJldHVybihobXNnKCIgVGhpcyBjb21tYW5kIGlz IG5vdCBjb25maWd1cmVkIGluIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXQuIikpOwotCi1kZWZhdWx0 OiB7Ci0gICAgICAgIGNoYXIgKnM7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHgpOwotICAgICAgICBzID0gY21kYnVmICsgKGludClzdHJsZW4oY21kYnVmKSAtMTsKLSAg ICAgICAgd2hpbGUgKHMgPj0gY21kYnVmICYmICpzID09IFNQKQotICAgICAgICAgICpzLS0gPSBO VUw7Ci0gICAgICAgIHdoaWxlIChzID49IGNtZGJ1ZiAmJiAqcyAhPSBTUCkKLSAgICAgICAgICBz LS07Ci0gICAgICAgIHdoaWxlICgqcyA9PSBTUCkgcysrOwotICAgICAgICBwcmludGYoIlNvcnJ5 LCBoZWxwIG5vdCBhdmFpbGFibGUgZm9yIFwiJXNcIlxuIixzKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgICB9Ci0gICAgfSAvKiBzd2l0Y2ggKi8KLSNlbmRpZiAvKiBOT0hFTFAgKi8KLQotICAgIHJl dHVybihzdWNjZXNzID0gMCk7Ci19Ci0KLS8qICBIIE0gUyBHICAtLSAgR2V0IGNvbmZpcm1hdGlv biwgdGhlbiBwcmludCB0aGUgZ2l2ZW4gbWVzc2FnZSAgKi8KLQotaW50Ci1obXNnKHMpIGNoYXIg KnM7IHsKLSAgICBpbnQgeDsKLSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsK LSAgICBwcmludGYoIlxuJXNcblxuIixzKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZmRlZiBO T0hFTFAKLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50 IGFuIGFycmF5IG9mIGxpbmVzLCAqLwotaG1zZ2EocykgY2hhciAqc1tdOyB7ICAgICAgICAgICAg ICAgICAgIC8qIGNoZWFwIHZlcnNpb24uICovCi0gICAgaW50IGk7Ci0gICAgaWYgKChpID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oaSk7Ci0gICAgcHJpbnRmKCJcbiIpOyAgICAgICAgICAgICAgICAg ICAgICAgLyogU3RhcnQgb2ZmIHdpdGggYSBibGFuayBsaW5lICovCi0gICAgZm9yIChpID0gMDsg KnNbaV07IGkrKykgeyAgICAgICAgICAgLyogUHJpbnQgZWFjaCBsaW5lLiAqLwotICAgICAgICBw cmludGYoIiVzXG4iLHNbaV0pOwotICAgIH0KLSAgICBwcmludGYoIlxuIik7Ci0gICAgcmV0dXJu KDApOwotfQotCi0jZWxzZSAvKiBOT0hFTFAgbm90IGRlZmluZWQuLi4gKi8KLQotaW50ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50IGFuIGFycmF5IG9mIGxpbmVz LCAqLwotaG1zZ2EocykgY2hhciAqc1tdOyB7ICAgICAgICAgICAgICAgICAgIC8qIHBhdXNpbmcg YXQgZW5kIG9mIGVhY2ggc2NyZWVuLiAqLwotICAgIGV4dGVybiBpbnQgaG10b3BsaW5lOyAgICAg ICAgICAgICAgIC8qIChUaGlzIHNob3VsZCBiZSBhIHBhcmFtZXRlci4uLikgKi8KLSAgICBpbnQg eCwgeSwgaSwgaiwgaywgbjsKLSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsK LQotI2lmZGVmIENLX1RUR1dTSVoKLSNpZmRlZiBPUzIKLSAgICB0dGdjd3N6KCk7Ci0jZWxzZSAv KiBPUzIgKi8KLSAgICAvKiBDaGVjayB3aGV0aGVyIHdpbmRvdyBzaXplIGNoYW5nZWQgKi8KLSAg ICBpZiAodHRnd3NpeigpID4gMCkgewotICAgICAgICBpZiAodHRfcm93cyA+IDAgJiYgdHRfY29s cyA+IDApIHsKLSAgICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93czsKLSAgICAgICAgICAgIGNt ZF9jb2xzID0gdHRfY29sczsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSNl bmRpZiAvKiBDS19UVEdXU0laICovCi0KLSAgICBwcmludGYoIlxuIik7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBTdGFydCBvZmYgd2l0aCBhIGJsYW5rIGxpbmUgKi8KLSAgICBuID0gKGhtdG9w bGluZSA+IDApID8gaG10b3BsaW5lIDogMTsgLyogTGluZSBjb3VudGVyICovCi0gICAgZm9yIChp ID0gMDsgKnNbaV07IGkrKykgewotICAgICAgICBwcmludGYoIiVzXG4iLHNbaV0pOyAgICAgICAg ICAgIC8qIFByaW50IGEgbGluZS4gKi8KLSAgICAgICAgeSA9IChpbnQpc3RybGVuKHNbaV0pOwot ICAgICAgICBrID0gMTsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IHk7IGorKykgICAgICAgICAv KiBTZWUgaG93IG1hbnkgbmV3bGluZXMgd2VyZSAqLwotICAgICAgICAgIGlmIChzW2ldW2pdID09 ICdcbicpIGsrKzsgICAgIC8qIGluIHRoZSBzdHJpbmcuLi4gKi8KLSAgICAgICAgbiArPSBrOwot ICAgICAgICBpZiAobiA+IChjbWRfcm93cyAtIDMpICYmICpzW2krMV0pIC8qIEFmdGVyIGEgc2Ny ZWVuZnVsLCBnaXZlIHRoZW0gKi8KLSAgICAgICAgICBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDAp OyAgICAvKiBhICJtb3JlPyIgcHJvbXB0LiAqLwotICAgICAgICAgIGVsc2UgbiA9IDA7Ci0gICAg fQotICAgIHByaW50ZigiXG4iKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZm5kZWYgTk9GUklM TFMKLXN0YXRpYyBjaGFyICogc3VwcG9ydHRleHRbXSA9IHsKLQotIkxpdmUgdGVjaG5pY2FsIHN1 cHBvcnQgZm9yIEtlcm1pdCBzb2Z0d2FyZSBpcyBubyBsb25nZXIgYXZhaWxhYmxlIiwKLSJmcm9t IENvbHVtYmlhIFVuaXZlcnNpdHksIGFzIGl0IHdhcyBmcm9tIG1pZC0xOTgxIHVudGlsIG1pZC0y MDExIHdoZW4iLAotCi0jaWZkZWYgT1MyCi0KLSJ0aGUgS2VybWl0IFByb2plY3Qgd2FzIGNhbmNl bGxlZC4gIEJlZ2lubmluZyB3aXRoIHZlcnNpb24gMy4wLCBLZXJtaXQgOTUiLAotCi0jZWxzZQot Ci0idGhlIEtlcm1pdCBQcm9qZWN0IHdhcyBjYW5jZWxsZWQuICBCZWdpbm5pbmcgd2l0aCB2ZXJz aW9uIDkuMCwgQy1LZXJtaXQiLAotCi0jZW5kaWYJLyogT1MyICovCi0KLSJpcyBPcGVuIFNvdXJj ZSBzb2Z0d2FyZS4gIFRoZSBLZXJtaXQgd2Vic2l0ZSBpcyBzdXBwb3NlZCByZW1haW4gb3BlbiIs Ci0iaW5kZWZpbml0ZWx5IGF0OiIsCi0iICIsCi0iICBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS8iLAotIiAiLAotCi0jaWZkZWYgT1MyCi0KLSJUaGUgS2VybWl0IDk1IHBhZ2UgaXMgaGVyZToi LAotIiAiLAotIiAgaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvazk1Lmh0bWwiLAotIiAiLAot IlRoZSBLZXJtaXQgOTUgbWFudWFsIGlzIGhlcmU6IiwKLSIgIiwKLSIgIGh0dHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2s5NW1hbnVhbC8iLAotIiAiLAotIlRoZSBLZXJtaXQgOTUgRnJlcXVlbnRs eSBBc2tlZCBRdWVzdGlvbnMgcGFnZSBpcyBoZXJlOiIsCi0iICIsCi0iICBodHRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rOTVmYXEuaHRtbCIsCi0iICIsCi0iYW5kIG1hbnkgb3RoZXIgcmVzb3Vy Y2VzIGFyZSBsaXN0ZWQgb24gdGhlIEtlcm1pdCA5NSBob21lIHBhZ2UuIiwKLSIgIiwKLQotI2Vs c2UKLQotIlRoZSBDLUtlcm1pdCBob21lIHBhZ2UgaXMgaGVyZToiLAotIiAiLAotIiAgaHR0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUvY2tlcm1pdC5odG1sIiwKLSIgIiwKLSJUaGUgZG9jdW1lbnRh dGlvbiBmb3IgQy1LZXJtaXQgaXMgbGlzdGVkIGhlcmU6IiwKLSIgIiwKLSIgIGh0dHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2NrZXJtaXQuaHRtbCNkb2MiLAotIiAiLAotIlRoZSBDLUtlcm1pdCBG cmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucyBwYWdlIGlzIGhlcmU6IiwKLSIgIiwKLSIgIGh0dHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2NrZmFxLmh0bWwiLAotIiAiLAotImFuZCBtYW55IG90aGVy IHJlc291cmNlcyBhcmUgbGlzdGVkIG9uIHRoZSBDLUtlcm1pdCBob21lIHBhZ2UuIiwKLSIgIiwK LQotI2VuZGlmCS8qIE9TMiAqLwotCi0iVGltZSB3aWxsIHRlbGwgd2hhdCBzb3J0IG9mIGRldmVs b3BtZW50IGFuZCBzdXBwb3J0IHN0cnVjdHVyZXMgYXJpc2UiLAotImluIHRoZSBPcGVuIFNvdXJj ZSBjb21tdW5pdHkuIiwKLSIiCi19OwotCi0vKiBEbyB0aGUgQlVHIGNvbW1hbmQgKi8KLWludAot ZG9idWcoKSB7Ci0gICAgcmV0dXJuKGhtc2dhKHN1cHBvcnR0ZXh0KSk7Ci19Ci0jZW5kaWYgLyog Tk9GUklMTFMgKi8KLQotI2lmbmRlZiBOT1hNSVQKLXN0YXRpYyBjaGFyICpoc2V0eG1pdFtdID0g ewotIlN5bnRheDogU0VUIFRSQU5TTUlUIHBhcmFtZXRlciB2YWx1ZSIsCi0iICIsCi0iQ29udHJv bHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBUUkFOU01JVCBjb21tYW5kIChzZWUgSEVMUCBUUkFOU01J VCk6IiwKLSIgIiwKLSJTRVQgVFJBTlNNSVQgRUNITyB7IE9OLCBPRkYgfSIsCi0iICBXaGV0aGVy IHRvIGVjaG8gdGV4dCB0byB5b3VyIHNjcmVlbiBhcyBpdCBpcyBiZWluZyB0cmFuc21pdHRlZC4i LAotIiAiLAotIlNFVCBUUkFOU01JVCBFT0YgdGV4dCIsCi0iICBUZXh0IHRvIHNlbmQgYWZ0ZXIg ZW5kIG9mIGZpbGUgaXMgcmVhY2hlZCwgZS5nLiBcXDQgZm9yIEN0cmwtRCIsCi0iICIsCi0iU0VU IFRSQU5TTUlUIEZJTEwgbnVtYmVyIiwKLSIgIEFTQ0lJIHZhbHVlIG9mIGEgY2hhcmFjdGVyIHRv IGluc2VydCBpbnRvIGJsYW5rIGxpbmVzLCAwIGZvciBub25lLiIsCi0iICBBcHBsaWVzIG9ubHkg dG8gdGV4dCBtb2RlLiAgMCBieSBkZWZhdWx0LiIsCi0iICIsCi0iU0VUIFRSQU5TTUlUIExJTkVG RUVEIHsgT04sIE9GRiB9IiwKLSIgIFRyYW5zbWl0IExpbmVmZWVkIGFzIHdlbGwgYXMgQ2Fycmlh Z2UgUmV0dXJuIChDUikgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUuIiwKLSIgIE5vcm1hbGx5LCBv bmx5IENSICBpcyBzZW50LiIsCi0iICIsCi0iU0VUIFRSQU5TTUlUIExPQ0tJTkctU0hJRlQgeyBP TiwgT0ZGIH0iLAotIiAgV2hldGhlciB0byB1c2UgU08vU0kgZm9yIHRyYW5zbWl0dGluZyA4LWJp dCBkYXRhIHdoZW4gUEFSSVRZIGlzIG5vdCBOT05FLiIsCi0iICIsCi0iU0VUIFRSQU5TTUlUIFBB VVNFIG51bWJlciIsCi0iICBIb3cgbWFueSBtaWxsaXNlY29uZHMgdG8gcGF1c2UgYWZ0ZXIgdHJh bnNtaXR0aW5nIGVhY2ggbGluZSAodGV4dCBtb2RlKSwiLAotIiAgb3IgZWFjaCBjaGFyYWN0ZXIg KGJpbmFyeSBtb2RlKS4iLAotIiAiLAotIlNFVCBUUkFOU01JVCBQUk9NUFQgbnVtYmVyIiwKLSIg IEFTQ0lJIHZhbHVlIG9mIGNoYXJhY3RlciB0byBsb29rIGZvciBmcm9tIGhvc3QgYmVmb3JlIHNl bmRpbmcgbmV4dCBsaW5lIiwKLSIgIHdoZW4gVFJBTlNNSVR0aW5nIGluIHRleHQgbW9kZTsgbm9y bWFsbHkgMTAgKExpbmVmZWVkKS4gIDAgbWVhbnMgbm9uZTsiLAotIiAgZG9uJ3Qgd2FpdCBmb3Ig YSBwcm9tcHQuIiwKLSIgIiwKLSJTRVQgVFJBTlNNSVQgVElNRU9VVCBudW1iZXIiLAotIiAgTnVt YmVyIG9mIHNlY29uZHMgdG8gd2FpdCBmb3IgZWFjaCBjaGFyYWN0ZXIgdG8gZWNobyB3aGVuIFRS QU5TTUlUIEVDSE8iLAotIiAgaXMgT04gb3IgVFJBTlNNSVQgUFJPTVBUIGlzIG5vdCAwLiAgSWYg MCBpcyBzcGVjaWZpZWQsIHRoaXMgbWVhbnMgd2FpdCIsCi0iICBpbmRlZmluaXRlbHkgZm9yIGVh Y2ggZWNoby4iLAotIiAiLAotIlN5bm9ueW06IFNFVCBYTUlULiAgU0hPVyBUUkFOU01JVCBkaXNw bGF5cyBjdXJyZW50IHNldHRpbmdzLiIsCi0iIiB9OwotI2VuZGlmIC8qIE5PWE1JVCAqLwotCi1z dGF0aWMgY2hhciAqaHNldGJrZ1tdID0gewotIlN5bnRheDogU0VUIEJBQ0tHUk9VTkQgeyBPRkYs IE9OIH0iLAotIiAiLAotIiAgU0VUIEJBQ0tHUk9VTkQgT0ZGIGZvcmNlcyBwcm9tcHRzIGFuZCBt ZXNzYWdlcyB0byBhcHBlYXIgb24geW91ciBzY3JlZW4iLAotIiAgZXZlbiB0aG91Z2ggS2VybWl0 IHRoaW5rcyBpdCBpcyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kLiIsCi0iIiB9OwotCi0jaWZk ZWYgRFlOQU1JQwotc3RhdGljIGNoYXIgKmhzZXRidWZbXSA9IHsKLSJTeW50YXg6IFNFVCBCVUZG RVJTIG4xIFsgbjIgXSIsCi0iICIsCi0iICBDaGFuZ2VzIHRoZSBvdmVyYWxsIGFtb3VudCBvZiBt ZW1vcnkgYWxsb2NhdGVkIGZvciBTRU5EIGFuZCBSRUNFSVZFIHBhY2tldCIsCi0iICBidWZmZXJz LCByZXNwZWN0aXZlbHkuICBCaWdnZXIgbnVtYmVycyBsZXQgeW91IGhhdmUgbG9uZ2VyIHBhY2tl dHMgYW5kIiwKLSIgIG1vcmUgd2luZG93IHNsb3RzLiAgSWYgbjIgaXMgb21pdHRlZCwgdGhlIHNh bWUgdmFsdWUgYXMgbjEgaXMgdXNlZC4iLAotI2lmZGVmIEJJR0JVRk9LCi0iICIsCi0iICBOT1RF OiBUaGlzIGNvbW1hbmQgaXMgbm90IG5lZWRlZCBpbiB0aGlzIHZlcnNpb24gb2YgS2VybWl0LCB3 aGljaCBpcyIsCi0iICBhbHJlYWR5IGNvbmZpZ3VyZWQgZm9yIG1heGltdW0tc2l6ZSBwYWNrZXQg YnVmZmVycy4iLAotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0iIiB9OwotI2VuZGlmIC8qIERZTkFN SUMgKi8KLQotc3RhdGljIGNoYXIgKmhzZXRjbWRbXSA9IHsKLSJTeW50YXg6IFNFVCBDT01NQU5E IHBhcmFtZXRlciB2YWx1ZSIsCi0iICIsCi0KLSNpZmRlZiBDS19BVVRPREwKLSJTRVQgQ09NTUFO RCBBVVRPRE9XTkxPQUQgeyBPTiwgT0ZGIH0iLAotIiAgRW5hYmxlcy9EaXNhYmxlcyBhdXRvbWF0 aWMgcmVjb2duaXRpb24gb2YgS2VybWl0IHBhY2tldHMgd2hpbGUgaW4iLAotIiAgY29tbWFuZCBt b2RlLiAgT04gYnkgZGVmYXVsdC4iLAotIiAiLAotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotCi0i U0VUIENPTU1BTkQgQllURVNJWkUgeyA3LCA4IH0iLAotIiAgSW5mb3JtcyBLZXJtaXQgb2YgdGhl IGJ5dGVzaXplIG9mIHRoZSBjb21tdW5pY2F0aW9uIHBhdGggYmV0d2VlbiBpdHNlbGYiLAotIiAg YW5kIHlvdXIga2V5Ym9hcmQgYW5kIHNjcmVlbi4gIDggaXMgYXNzdW1lZC4gIFNFVCBDT01NQU5E IEJZVEUgNyBvbmx5IGlmIiwKLSIgIDgtYml0IGNoYXJhY3RlcnMgY2Fubm90IHBhc3MuIiwKLSIg IiwKLQotI2lmZGVmIE9TMgotIlNFVCBDT01NQU5EIENPTE9SIDxmb3JlZ3JvdW5kLWNvbG9yPiA8 YmFja2dyb3VuZC1jb2xvcj4iLAotIiAgTGV0cyB5b3UgY2hvb3NlIGNvbG9ycyBmb3IgQ29tbWFu ZCBzY3JlZW4uICBVc2UgPyBpbiB0aGUgY29sb3IgZmllbGRzIHRvIiwKLSIgIHRvIGdldCBsaXN0 cyBvZiBhdmFpbGFibGUgY29sb3JzLiIsCi0iICIsCi0iU0VUIENPTU1BTkQgQ1VSU09SLVBPU0lU SU9OIDxyb3c+IDxjb2x1bW4+IiwKLSIgIE1vdmVzIHRoZSBjb21tYW5kLXNjcmVlbiBjdXJzb3Ig dG8gdGhlIGdpdmVuIHBvc2l0aW9uICgxLWJhc2VkKS4gIFRoaXMiLAotIiAgY29tbWFuZCBzaG91 bGQgYmUgdXNlZCBpbiBzY3JpcHRzIGluc3RlYWQgb2YgcmVseWluZyBvbiBBTlNJLlNZUyBlc2Nh cGUiLAotIiAgc2VxdWVuY2VzLiIsCi0iICIsCi0jZW5kaWYgLyogT1MyICovCi0KLSJTRVQgQ09N TUFORCBFUlJPUiB7IDAsMSwyLDMgfSIsCi0iICBTZXRzIHRoZSB2ZXJib3NpdHkgbGV2ZWwgb2Yg Y29tbWFuZCBlcnJvciBtZXNzYWdlczsgdGhlIGhpZ2hlciB0aGUgbnVtYmVyLCIsCi0iICB0aGUg bW9yZSB2ZXJib3NlIHRoZSBtZXNzYWdlLiAgVGhlIGRlZmF1bHQgaXMgMS4gIEhpZ2hlciB2YWx1 ZXMgYXJlIiwKLSIgIHVzZWZ1bCBvbmx5IGZvciBkZWJ1Z2dpbmcgc2NyaXB0cy4iLAotIiAiLAot Ci0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSJTRVQgQ09NTUFORCBIRUlHSFQgPG51bWJlcj4iLAot IiAgQ2hhbmdlcyB0aGUgbnVtYmVyIG9mIHJvd3MgKGxpbmVzKSBpbiB5b3VyIGNvbW1hbmQgc2Ny ZWVuLCBub3QiLAotIiAgY291bnRpbmcgdGhlIHN0YXR1cyBsaW5lLiAgUmVjb21tZW5kZWQgdmFs dWVzIGFyZSAyNCwgNDIsIGFuZCA0OSAob3IgMjUsIiwKLSIgIDQzLCBhbmQgNTAgaWYgU0VUIENP TU1BTkQgU1RBVFVTTElORSBpcyBPRkYuKSIsCi0jZWxzZQotIlNFVCBDT01NQU5EIEhFSUdIVCA8 bnVtYmVyPiIKLSIgIENoYW5nZXMgdGhlIG51bWJlciBvZiByb3dzIChsaW5lcykgaW4geW91ciBj b21tYW5kIHNjcmVlbiwgbm90IiwKLSIgIGNvdW50aW5nIHRoZSBzdGF0dXMgbGluZS4gIFdpbmRv d2VkIHNlc3Npb25zIGNhbiB1c2UgYW55IHZhbHVlIGZyb20gOCB0byIsCi0iICAxMDEuICBGdWxs c2NyZWVuIHNlc3Npb25zIGFyZSBsaW1pdGVkIHRvIDI0LCA0MiwgNDksIG9yIDU5LiAgTm90IGFs bCIKLSIgIGhlaWdodHMgYXJlIHN1cHBvcnRlZCBieSBhbGwgdmlkZW8gYWRhcHRlcnMuIiwKLSNl bmRpZiAvKiBOVCAqLwotI2Vsc2UgIC8qIE9TMiAqLwotIlNFVCBDT01NQU5EIEhFSUdIVCA8bnVt YmVyPiIsCi0iICBJbmZvcm1zIEtlcm1pdCBvZiB0aGUgbnVtYmVyIG9mIHJvd3MgaW4geW91ciBj b21tYW5kIHNjcmVlbiBmb3IgdGhlIiwKLSIgIHB1cnBvc2VzIG9mIE1vcmU/LXByb21wdGluZy4i LAotI2VuZGlmIC8qIE9TMiAqLwotIiAiLAotIlNFVCBDT01NQU5EIFdJRFRIIDxudW1iZXI+IiwK LSIgIEluZm9ybXMgS2VybWl0IG9mIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY3Jvc3MgeW91 ciBzY3JlZW4gZm9yIiwKLSIgIHB1cnBvc2VzIG9mIHNjcmVlbiBmb3JtYXR0aW5nLiIsCi0iICIs Ci0iU0VUIENPTU1BTkQgTU9SRS1QUk9NUFRJTkcgeyBPTiwgT0ZGIH0iLAotIiAgT04gKHRoZSBk ZWZhdWx0KSBlbmFibGVzIE1vcmU/LXByb21wdGluZyB3aGVuIEtlcm1pdCBuZWVkcyB0byBkaXNw bGF5IiwKLSIgIHRleHQgdGhhdCBkb2VzIG5vdCBmaXQgdmVydGljYWxseSBvbiB5b3VyIHNjcmVl bi4gIE9GRiBhbGxvd3MgdGhlIHRleHQgdG8iLAotIiAgc2Nyb2xsIGJ5IHdpdGhvdXQgaW50ZXJ2 ZW50aW9uLiAgSWYgeW91ciBjb21tYW5kIHdpbmRvdyBoYXMgc2Nyb2xsIGJhcnMsIiwKLSIgIHlv dSBtaWdodCBwcmVmZXIgT0ZGLiIsCi0iICIsCi0KLSNpZmRlZiBDS19SRUNBTEwKLSJTRVQgQ09N TUFORCBSRUNBTEwtQlVGRkVSLVNJWkUgbnVtYmVyIiwKLSIgIEhvdyBiaWcgeW91IHdhbnQgS2Vy bWl0J3MgY29tbWFuZCByZWNhbGwgYnVmZmVyIHRvIGJlLiAgQnkgZGVmYXVsdCwgaXQiLAotIiAg aG9sZHMgMTAgY29tbWFuZHMuICBZb3UgY2FuIG1ha2UgaXQgYW55IHNpemUgeW91IGxpa2UsIHN1 YmplY3QgdG8gbWVtb3J5IiwKLSIgIGNvbnN0cmFpbnRzIG9mIHRoZSBjb21wdXRlci4gIEEgc2l6 ZSBvZiAwIGRpc2FibGVzIGNvbW1hbmQgcmVjYWxsLiIsCi0iICBXaGVuZXZlciB5b3UgZ2l2ZSB0 aGlzIGNvbW1hbmQsIHByZXZpb3VzIGNvbW1hbmQgaGlzdG9yeSBpcyBsb3N0LiIsCi0iICIsCi0j ZW5kaWYgLyogQ0tfUkVDQUxMICovCi0KLSJTRVQgQ09NTUFORCBRVU9USU5HIHsgT04sIE9GRiB9 IiwKLSIgIFdoZXRoZXIgdG8gdHJlYXQgYmFja3NsYXNoIGFuZCBxdWVzdGlvbiBtYXJrIGFzIHNw ZWNpYWwgY2hhcmFjdGVycyAoT04pLCIsCi0iICBvciBhcyBvcmRpbmFyeSBkYXRhIGNoYXJhY3Rl cnMgKE9GRikgaW4gY29tbWFuZHMuICBPTiBieSBkZWZhdWx0LiIsCi0iICIsCi0jaWZkZWYgRE9V QkxFUVVPVElORwotIlNFVCBDT01NQU5EIERPVUJMRVFVT1RJTkcgeyBPTiwgT0ZGIH0iLAotIiAg V2hldGhlciB0byBhbGxvdyBkb3VibGVxdW90ZXMgKFwiKSB0byBiZSB1c2VkIHRvIGVuY2xvc2Ug ZmllbGRzLCIsCi0iICBmaWxlbmFtZXMsIGRpcmVjdG9yeSBuYW1lcywgYW5kIG1hY3JvIGFyZ3Vt ZW50cyB0aGF0IG1pZ2h0IGNvbnRhaW4iLAotIiAgc3BhY2VzLiAgT04gYnkgZGVmYXVsdDsgdXNl IE9GRiB0byBmb3JjZSBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIiLAotIiAgdmVyc2lvbnMuIiwK LSIgIiwKLSNlbmRpZiAvKiBET1VCTEVRVU9USU5HICovCi0KLSNpZmRlZiBDS19SRUNBTEwKLSJT RVQgQ09NTUFORCBSRVRSWSB7IE9OLCBPRkYgfSIsCi0iICBXaGV0aGVyIHRvIHJlcHJvbXB0IHlv dSB3aXRoIHRoZSBjb3JyZWN0IGJ1dCBpbmNvbXBsZXRlIHBvcnRpb24gb2YgYSIsCi0iICBzeW50 YWN0aWNhbGx5IGluY29ycmVjdCBjb21tYW5kLiAgT04gYnkgZGVmYXVsdC4iLAotIiAiLAotI2Vu ZGlmIC8qIENLX1JFQ0FMTCAqLwotCi0jaWZkZWYgT1MyCi0iU0VUIENPTU1BTkQgU0NST0xMQkFD SyA8bGluZXM+IiwKLSIgIFNldHMgc2l6ZSBvZiB2aXJ0dWFsIENvbW1hbmQgc2NyZWVuIGJ1ZmZl ciB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGxpbmVzLCIsCi0iICB3aGljaCBpbmNsdWRlcyB0aGUg YWN0aXZlIENvbW1hbmQgc2NyZWVuLiAgVGhlIG1pbmltdW0gaXMgMjU2LiAgVGhlIG1heCIsCi0i ICBpcyAyIG1pbGxpb24uICBUaGUgZGVmYXVsdCBpcyA1MTIuIiwKLSIgIiwKLSJTRVQgQ09NTUFO RCBTVEFUVVNMSU5FIHsgT04sIE9GRiB9IiwKLSIgIE9OIChkZWZhdWx0KSBlbmFibGVzIHRoZSBL ZXJtaXQgc3RhdHVzIGxpbmUgaW4gdGhlIGNvbW1hbmQgc2NyZWVuLiIsCi0iICBPRkYgcmVtb3Zl cyBpdCwgbWFraW5nIHRoZSBsaW5lIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHRoZSBob3N0LiIsCi0i ICIsCi0jZW5kaWYgLyogT1MyICovCi0KLSJVc2UgU0hPVyBDT01NQU5EIHRvIGRpc3BsYXkgdGhl c2Ugc2V0dGluZ3MuIiwKLSIiIH07Ci0KLSNpZm5kZWYgTk9MT0NBTAotc3RhdGljIGNoYXIgKmhz ZXRjYXJbXSA9IHsKLSJTeW50YXg6IFNFVCBDQVJSSUVSLVdBVENIIHsgQVVUTywgT0ZGLCBPTiB9 IiwKLSIgIiwKLSIgIEF0dGVtcHRzIHRvIGNvbnRyb2wgdHJlYXRtZW50IG9mIGNhcnJpZXIgKHRo ZSBEYXRhIENhcnJpZXIgRGV0ZWN0IHNpZ25hbCkiLAotIiAgb24gc2VyaWFsIGNvbW11bmljYXRp b24gKFNFVCBMSU5FIG9yIFNFVCBQT1JUKSBkZXZpY2VzLiAgT04gbWVhbnMgdGhhdCIsCi0iICBj YXJyaWVyIGlzIHJlcXVpcmVkIGF0IGFsbCB0aW1lcy4gIE9GRiBtZWFucyBjYXJyaWVyIGlzIG5l dmVyIHJlcXVpcmVkLiIsCi0iICBBVVRPICh0aGUgZGVmYXVsdCkgbWVhbnMgY2FycmllciBpcyBy ZXF1aXJlZCBhdCBhbGwgdGltZXMgZXhjZXB0IGR1cmluZyIsCi0iICB0aGUgRElBTCBjb21tYW5k LiAgQ29ycmVjdCBvcGVyYXRpb24gb2YgY2Fycmllci13YXRjaCBkZXBlbmRzIG9uIHRoZSIsCi0i ICBjYXBhYmlsaXRpZXMgb2YgdGhlIHVuZGVybHlpbmcgT1MsIGRyaXZlcnMsIGRldmljZXMsIGFu ZCBjYWJsZXMuICBJZiB5b3UiLAotIiAgbmVlZCB0byBDT05ORUNUIHRvIGEgc2VyaWFsIGRldmlj ZSB0aGF0IGlzIG5vdCBhc3NlcnRpbmcgY2FycmllciwgYW5kIiwKLSIgIEtlcm1pdCB3b24ndCBs ZXQgeW91LCB1c2UgU0VUIENBUlJJRVItV0FUQ0ggT0ZGLiAgVXNlIFNIT1cgQ09NTVVOSUNBVElP TlMiLAotIiAgdG8gZGlzcGxheSB0aGUgQ0FSUklFUi1XQVRDSCBzZXR0aW5nLiIsCi0iIiB9Owot I2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotc3RhdGljIGNoYXIgKmhzZXRhdFtdID0gewotIlN5bnRh eDogU0VUIEFUVFJJQlVURVMgbmFtZSBPTiBvciBPRkYiLAotIiAiLAotIiAgVXNlIHRoaXMgY29t bWFuZCB0byBlbmFibGUgKE9OKSBvciBkaXNhYmxlIChPRkYpIHRoZSB0cmFuc21pc3Npb24gb2Yi LAotIiAgc2VsZWN0ZWQgZmlsZSBhdHRyaWJ1dGVzIGFsb25nIHdpdGggZWFjaCBmaWxlLCBhbmQg dG8gaGFuZGxlIG9yIGlnbm9yZSIsCi0iICBzZWxlY3RlZCBpbmNvbWluZyBmaWxlIGF0dHJpYnV0 ZXMsIGluY2x1ZGluZzoiLAotIiAiLAotI2lmbmRlZiBOT0NTRVRTCi0iICAgQ0hBUkFDVEVSLVNF VDogIFRoZSB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0IGZvciB0ZXh0IGZpbGVzIiwKLSNlbmRpZiAv KiBOT0NTRVRTICovCi0iICAgREFURTogICAgICAgICAgIFRoZSBmaWxlJ3MgY3JlYXRpb24gZGF0 ZSIsCi0iICAgRElTUE9TSVRJT046ICAgIFVudXN1YWwgdGhpbmdzIHRvIGRvIHdpdGggdGhlIGZp bGUsIGxpa2UgTUFJTCBvciBQUklOVCIsCi0iICAgTEVOR1RIOiAgICAgICAgIFRoZSBmaWxlJ3Mg bGVuZ3RoIiwKLSIgICBQUk9URUNUSU9OOiAgICAgVGhlIGZpbGUncyBwcm90ZWN0aW9uIChwZXJt aXNzaW9ucykiLAotIiAgIFNZU1RFTS1JRDogICAgICBNYWNoaW5lL09wZXJhdGluZyBzeXN0ZW0g b2Ygb3JpZ2luIiwKLSIgICBUWVBFOiAgICAgICAgICAgVGhlIGZpbGUncyB0eXBlICh0ZXh0IG9y IGJpbmFyeSkiLAotIiAiLAotIllvdSBjYW4gYWxzbyBzcGVjaWZ5IEFMTCB0byBzZWxlY3QgYWxs IG9mIHRoZW0uICBFeGFtcGxlczoiLAotIiAiLAotIiAgIFNFVCBBVFRSIERBVEUgT0ZGIiwKLSIg ICBTRVQgQVRUUiBMRU5HVEggT04iLAotIiAgIFNFVCBBVFRSIEFMTCBPRkYiLAotIiAiLAotIkFs c28gc2VlIEhFTFAgU0VUIFNFTkQgYW5kIEhFTFAgU0VUIFJFQ0VJVkUuIiwKLSIiCi19OwotCi1z dGF0aWMgY2hhciAqaHh5dGFrW10gPSB7Ci0iU3ludGF4OiBTRVQgVEFLRSBwYXJhbWV0ZXIgdmFs dWUiLAotIiAiLAotIiAgQ29udHJvbHMgYmVoYXZpb3Igb2YgVEFLRSBjb21tYW5kOiIsCi0iICIs Ci0iU0VUIFRBS0UgRUNITyB7IE9OLCBPRkYgfSIsCi0iICBUZWxscyB3aGV0aGVyIGNvbW1hbmRz IHJlYWQgZnJvbSBhIFRBS0UgZmlsZSBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSIsCi0iICBz Y3JlZW4gKGlmIHNvLCBlYWNoIGNvbW1hbmQgaXMgc2hvd24gYXQgdGhlIHRpbWUgaXQgaXMgcmVh ZCwgYW5kIGxhYmVsZWQiLAotIiAgd2l0aCBhIGxpbmUgbnVtYmVyKS4iLAotIiAiLAotIlNFVCBU QUtFIEVSUk9SIHsgT04sIE9GRiB9IiwKLSIgIFRlbGxzIHdoZXRoZXIgYSBUQUtFIGNvbW1hbmQg ZmlsZSBzaG91bGQgYmUgYXV0b21hdGljYWxseSB0ZXJtaW5hdGVkIHdoZW4iLAotIiAgYSBjb21t YW5kIGZhaWxzLiAgVGhpcyBzZXR0aW5nIGlzIGxvY2FsIHRvIHRoZSBjdXJyZW50IGNvbW1hbmQg ZmlsZSwgYW5kIiwKLSIgIGluaGVyaXRlZCBieSBzdWJvcmRpbmF0ZSBjb21tYW5kIGZpbGVzLiIs Ci0iIiB9OwotCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzJNT1VTRQotc3RhdGljIGNoYXIg Kmh4eW1vdXNlW10gPSB7Ci0iU3ludGF4OiBTRVQgTU9VU0UgQUNUSVZBVEUgeyBPTiwgT0ZGIH0i LAotIiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgbW91c2UgaW4gQ29ubmVjdCBtb2RlLiAgRGVm YXVsdCBpcyBPTiIsCi0iICIsCi0iU3ludGF4OiBTRVQgTU9VU0UgQlVUVE9OIDxudW1iZXI+IDxr ZXktbW9kaWZpZXI+IDxhY3Rpb24+IFsgPHRleHQ+IF0iLAotIiB3aGVyZToiLAotIiAgPG51bWJl cj4gaXMgdGhlIG1vdXNlIGJ1dHRvbiBudW1iZXIsIDEsIDIsIG9yIDM7IiwKLSIgIDxrZXktbW9k aWZpZXI+IGRlbm90ZXMgbW9kaWZpZXIga2V5cyBoZWxkIGRvd24gZHVyaW5nIHRoZSBtb3VzZSBl dmVudDoiLAotIiAgIEFMVCwgQUxULVNISUZULCBDVFJMLCBDVFJMLUFMVCBDVFJMLUFMVC1TSElG VCwgQ1RSTC1TSElGVCwgU0hJRlQsIE5PTkU7IiwKLSIgIDxhY3Rpb24+IGlzIHRoZSBtb3VzZSBh Y3Rpb24sIENMSUNLLCBEUkFHLCBvciBET1VCTEUtQ0xJQ0suIiwKLSIgIiwKLSIgVGhlIDx0ZXh0 PiBoYXMgZXhhY3RseSB0aGUgc2FtZSBwcm9wZXJ0aWVzIGFzIHRoZSA8dGV4dD4gZnJvbSB0aGUg U0VUIEtFWSIsCi0iIGNvbW1hbmQgLS0gaXQgY2FuIGJlIGEgY2hhcmFjdGVyLCBhIHN0cmluZywg b25lIG9yIG1vcmUgS3ZlcmJzLCBhIG1hY3JvIiwKLSIgaW52b2tlZCBhcyBhIEt2ZXJiLCBvciBh bnkgY29tYmluYXRpb24gb2YgdGhlc2UuICBUaHVzLCBhbnl0aGluZyB0aGF0IGNhbiIsCi0iIGJl IGFzc2lnbmVkIHRvIGEga2V5IGNhbiBhbHNvIGJlIGFzc2lnbmVkIHRvIHRoZSBtb3VzZSAtLSBh bmQgdmljZSB2ZXJzYS4iLAotIiBJZiB0aGUgPHRleHQ+IGlzIG9taXR0ZWQsIHRoZSBhY3Rpb24g d2lsbCBiZSBpZ25vcmVkLiAgRXhhbXBsZXM6IiwKLSIgIiwKLSIgU0VUIE1PVVNFIEJVVFRPTiAx IE5PTkUgRE9VQkxFIFxcS21vdXNlQ3VyUG9zIiwKLSIgU0VUIE1PVSBCIDIgU0hJRlQgQ0xJQ0sg aGVscFxcMTMiLAotIiAiLAotIiBEUkFHIG9wZXJhdGlvbnMgcGVyZm9ybSBhIFwibWFyayBtb2Rl XCIgc2VsZWN0aW9uIG9mIFRleHQuIFlvdSBzaG91bGQiLAotIiBhc3NpZ24gb25seSB0aGUgZm9s bG93aW5nIGFjdGlvbnMgdG8gZHJhZyBvcGVyYXRpb25zOiIsCi0iICIsCi0iICBcXEtkdW1wICAg ICAgICAgLSBjb3B5IG1hcmtlZCB0ZXh0IHRvIHByaW50ZXIgKG9yIGZpbGUpIiwKLSIgIFxcS21h cmtjb3B5Y2xpcCAtIGNvcHkgbWFya2VkIHRleHQgdG8gUE0gQ2xpcGJvYXJkIiwKLSIgIFxcS21h cmtjb3B5aG9zdCAtIGNvcHkgbWFya2VkIHRleHQgZGlyZWN0IHRvIEhvc3QiLAotIiAgXFxLbW91 c2VtYXJrICAgIC0gbWFyayB0ZXh0LCBubyBjb3B5IG9wZXJhdGlvbiBwZXJmb3JtZWQiLAotIiAi LAotIiBUaGUgZm9sbG93aW5nIEt2ZXJiIGlzIG9ubHkgZm9yIHVzZSB3aXRoIHRoZSBtb3VzZToi LAotIiAiLAotIiAgXFxLbW91c2VDdXJQb3MiLAotIiAiLAotIiB3aGljaCByZXByZXNlbnRzIHRo ZSBtb3VzZS1kaXJlY3RlZCB0ZXJtaW5hbCBjdXJzb3IgZmVhdHVyZS4iLAotIiAiLAotIlN5bnRh eDogU0VUIE1PVVNFIENMRUFSIiwKLSIgUmVzdG9yZXMgYWxsIG1vdXNlIGV2ZW50cyB0byB0aGVp ciBkZWZhdWx0IGRlZmluaXRpb25zIiwKLSIgICBCdXR0b24gMSBDdHJsLUNsaWNrID0gS3ZlcmI6 IFxcS21vdXNldXJsIiwKLSIgICBCdXR0b24gMSBEb3VibGUtQ2xpY2sgPSBLdmVyYjogXFxLbW91 c2VjdXJwb3MiLAotIiAgIEJ1dHRvbiAxIERyYWcgPSBLdmVyYjogXFxLbWFya2NvcHljbGlwIiwK LSIgICBCdXR0b24gMSBBbHQtRHJhZyA9IEt2ZXJiOiBcXEttYXJrY29weWNsaXBfbm9lb2wiLAot IiAgIEJ1dHRvbiAxIEN0cmwtRHJhZyA9IEt2ZXJiOiBcXEttYXJrY29weWhvc3QiLAotIiAgIEJ1 dHRvbiAxIEN0cmwtQWx0LURyYWcgPSBLdmVyYjogXFxLbWFya2NvcHlob3N0X25vZW9sIiwKLSIg ICBCdXR0b24gMSBDdHJsLVNoaWZ0LURyYWcgPSBLdmVyYjogXFxLZHVtcCIsCi0iICAgQnV0dG9u IDIgRG91YmxlLUNsaWNrID0gS3ZlcmI6IFxcS3Bhc3RlIiwKLSIgICBCdXR0b24gMiBEcmFnID0g S3ZlcmI6IFxcS21hcmtjb3B5aG9zdCIsCi0iICAgQnV0dG9uIDIgQWx0LURyYWcgPSBLdmVyYjog XFxLbWFya2NvcHlob3N0X25vZW9sICAgICAiLCAgICAKLSIgICBCdXR0b24gMyBEb3VibGUtQ2xp Y2sgPSBLdmVyYjogXFxLcGFzdGUiLAotIiJ9OwotI2VuZGlmIC8qIE9TMk1PVVNFICovCi0KLXN0 YXRpYyBjaGFyICpoeHl0ZXJtW10gPSB7Ci0iU3ludGF4OiBTRVQgVEVSTUlOQUwgcGFyYW1ldGVy IHZhbHVlIiwKLSIgIiwKLSNpZmRlZiBPUzIKLSJTRVQgVEVSTUlOQUwgVFlQRSB7IEFOU0ksIFZU NTIsIFZUMTAwLCBWVDEwMiwgVlQyMjAsIFZUMzIwLCAuLi4gfSIsCi0iICBTZWxlY3RzIHR5cGUg dHlwZSBvZiB0ZXJtaW5hbCB0byBlbXVsYXRlLiAgVHlwZSBTRVQgVEVSTUlOQUwgVFlQRSA/IHRv IiwKLSIgIHNlZSBhIGNvbXBsZXRlIGxpc3QuIiwKLSIgIiwKLSJTRVQgVEVSTUlOQUwgQU5TV0VS QkFDSyB7IE9GRiwgT04gfSIsCi0iICBEaXNhYmxlcy9lbmFibGVzIHRoZSBFTlEvQW5zd2VyYmFj ayBzZXF1ZW5jZSAoXCJLLTk1IHZlcnNpb24gdGVybS10eXBlXCIpLiIsCi0iICIsCi0iU0VUIFRF Uk1JTkFMIEFOU1dFUkJBQ0sgTUVTU0FHRSA8ZXh0ZW5zaW9uPiIsCi0iICBBbGxvd3MgeW91IHRv IHNwZWNpZnkgYW4gZXh0ZW5zaW9uIHRvIHRoZSBkZWZhdWx0IGFuc3dlcmJhY2sgbWVzc2FnZS4i LAotIiAiLAotI2Vsc2UKLSJTRVQgVEVSTUlOQUwgVFlQRSAuLi4iLAotIiAgVGhpcyBjb21tYW5k IGlzIG5vdCBhdmFpbGFibGUgYmVjYXVzZSB0aGlzIHZlcnNpb24gb2YgS2VybWl0IGRvZXMgbm90 IiwKLSIgIGluY2x1ZGUgYSB0ZXJtaW5hbCBlbXVsYXRvci4gIEluc3RlYWQsIGl0IGlzIGEgXCJz ZW1pdHJhbnNwYXJlbnQgcGlwZVwiIiwKLSIgIChvciBhIHRvdGFsbHkgdHJhbnNwYXJlbnQgb25l LCBpZiB5b3UgY29uZmlndXJlIGl0IHRoYXQgd2F5KSB0byB0aGUiLAotIiAgY29tcHV0ZXIgb3Ig c2VydmljZSB5b3UgaGF2ZSBtYWRlIGEgY29ubmVjdGlvbiB0by4gIFlvdXIgY29uc29sZSwiLAot IiAgd29ya3N0YXRpb24gd2luZG93LCBvciB0aGUgdGVybWluYWwgZW11bGF0b3Igb3IgdGVybWlu YWwgZnJvbSB3aGljaCB5b3UiLAotIiAgYXJlIHJ1bm5pbmcgS2VybWl0IHByb3ZpZGVzIHRoZSBl bXVsYXRpb24uIiwKLSIgIiwKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENLX0FQQwotIlNF VCBURVJNSU5BTCBBUEMgeyBPTiwgT0ZGLCBOTy1JTlBVVCwgTk8tSU5QVVQtVU5DSEVDS0VELCBV TkNIRUNLRUQgfSIsCi0jaWZkZWYgT1MyCi0iICBDb250cm9scyBleGVjdXRpb24gb2YgQXBwbGlj YXRpb24gUHJvZ3JhbSBDb21tYW5kcyBzZW50IGJ5IHRoZSBob3N0IHdoaWxlIiwKLSIgIEstOTUg aXMgZWl0aGVyIGluIENPTk5FQ1QgbW9kZSBvciBwcm9jZXNzaW5nIElOUFVUIGNvbW1hbmRzLiAg T04gYWxsb3dzIiwKLSIgIGV4ZWN1dGlvbiBvZiBcInNhZmVcIiBjb21tYW5kcyBhbmQgZGlzYWxs b3dzIHBvdGVudGlhbGx5IGRhbmdlcm91cyBvbmVzIiwKLSIgIHN1Y2ggYXMgREVMRVRFLCBSRU5B TUUsIE9VVFBVVCwgYW5kIFJVTi4gIE9GRiBwcmV2ZW50cyBleGVjdXRpb24gb2YgQVBDcy4iLAot IiAgVU5DSEVDS0VEIGFsbG93cyBleGVjdXRpb24gb2YgYWxsIEFQQ3MuICBPRkYgaXMgdGhlIGRl ZmF1bHQuIiwKLSNlbHNlIC8qIE9TMiAqLwotIiAgQ29udHJvbHMgZXhlY3V0aW9uIG9mIEFwcGxp Y2F0aW9uIFByb2dyYW0gQ29tbWFuZHMgc2VudCBieSB0aGUgaG9zdCB3aGlsZSIsCi0iICBDLUtl cm1pdCBpcyBpbiBDT05ORUNUIG1vZGUuICBPTiBhbGxvd3MgZXhlY3V0aW9uIG9mIFwic2FmZVwi IGNvbW1hbmRzIGFuZCIsCi0iICBkaXNhbGxvd3MgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGNvbW1h bmRzIHN1Y2ggYXMgREVMRVRFLCBSRU5BTUUsIE9VVFBVVCwiLAotIiAgYW5kIFJVTi4gIE9GRiBw cmV2ZW50cyBleGVjdXRpb24gb2YgQVBDcy4gIFVOQ0hFQ0tFRCBhbGxvd3MgZXhlY3V0aW9uIG9m IiwKLSIgIGFsbCBBUENzLiAgT0ZGIGlzIHRoZSBkZWZhdWx0LiIsCi0jZW5kaWYgLyogT1MyICov Ci0iICIsCi0jZW5kaWYgLyogQ0tfQVBDICovCi0KLSNpZmRlZiBPUzIKLSJTRVQgVEVSTUlOQUwg QVJST1ctS0VZUyB7IEFQUExJQ0FUSU9OLCBDVVJTT1IgfSIsCi0iICBTZXRzIHRoZSBtb2RlIGZv ciB0aGUgYXJyb3cga2V5cyBkdXJpbmcgVlQgdGVybWluYWwgZW11bGF0aW9uLiIsCi0iICIsCi0i U0VUIFRFUk1JTkFMIEFUVFJJQlVURSB7IEJMSU5LLCBESU0sIFBST1RFQ1RFRCwgUkVWRVJTRSwg VU5ERVJMSU5FIH0iLAotIiAgRGV0ZXJtaW5lcyBob3cgYXR0cmlidXRlcyBhcmUgZGlzcGxheWVk IGJ5IEtlcm1pdC05NS4iLAotIiAiLAotIlNFVCBURVJNSU5BTCBBVFRSSUJVVEUgeyBCTElOSywg RElNLCBSRVZFUlNFLCBVTkRFUkxJTkUgfSB7IE9OLCBPRkYgfSIsCi0iICBEZXRlcm1pbmVzIHdo ZXRoZXIgcmVhbCBCbGlua2luZywgRGltLCBSZXZlcnNlLCBhbmQgVW5kZXJsaW5lIGFyZSB1c2Vk IGluIiwKLSIgIHRoZSB0ZXJtaW5hbCBkaXNwbGF5LiAgV2hlbiBCTElOSyBpcyB0dXJuZWQgT0ZG LCByZXZlcnNlIGJhY2tncm91bmQiLAotIiAgaW50ZW5zaXR5IGlzIHVzZWQuICBXaGVuIERJTSBp cyB0dXJuZWQgT0ZGLCBkaW0gY2hhcmFjdGVycyBhcHBlYXIgQk9MRC4iLAotIiAgV2hlbiBSRVZF UlNFIGFuZCBVTkRFUkxJTkUgYXJlIE9GRiwgdGhlIGNvbG9ycyBzZWxlY3RlZCB3aXRoIFNFVCIs Ci0iICBURVJNSU5BTCBDT0xPUiB7IFJFVkVSU0UsVU5ERVJMSU5FIH0gYXJlIHVzZWQgaW5zdGVh ZC4gIFRoaXMgY29tbWFuZCIsCi0iICBhZmZlY3RzIHRoZSBlbnRpcmUgY3VycmVudCBzY3JlZW4g YW5kIHRlcm1pbmFsIHNjcm9sbGJhY2sgYnVmZmVyLiIsCi0iICIsCi0iU0VUIFRFUk1JTkFMIEFU VFJJQlVURSBQUk9URUNURUQgWyAtIiwKLSIgICB7IEJPTEQsIERJTSwgSU5WSVNJQkxFLCBOT1JN QUwsIFJFVkVSU0UsIFVOREVSTElORUQgfSBdIiwKLSIgIFNldHMgdGhlIGF0dHJpYnV0ZXMgdXNl ZCB0byByZXByZXNlbnQgUHJvdGVjdGVkIHRleHQgaW4gV3lzZSBhbmQgVGVsZXZpZGVvIiwKLSIg IHRlcm1pbmFsIGVtdWxhdGlvbnMuICBBbnkgY29tYmluYXRpb24gb2YgYXR0cmlidXRlcyBtYXkg YmUgdXNlZC4gIFRoZSIsCi0iICBkZWZhdWx0IGlzIERJTS4pIiwKLSIgIiwKLSNlbmRpZiAvKiBP UzIgKi8KLQotI2lmZGVmIE9TMgotI2lmZGVmIENLX1hZWgotIlNFVCBURVJNSU5BTCBBVVRPRE9X TkxPQUQgeyBPTiwgT0ZGLCBFUlJPUiB7IFNUT1AsIENPTlRJTlVFIH0gfSIsCi0iICBlbmFibGVz L2Rpc2FibGVzIGF1dG9tYXRpYyBzd2l0Y2hpbmcgaW50byBmaWxlLXRyYW5zZmVyIG1vZGUgd2hl biBhIEtlcm1pdCIsCi0iICBvciBaTU9ERU0gZmlsZSB0cmFuc2ZlciBoYXMgYmVlbiBkZXRlY3Rl ZCBkdXJpbmcgQ09OTkVDVCBtb2RlIG9yIHdoaWxlIiwKLSIgIGFuIElOUFVUIGNvbW1hbmQgaXMg YWN0aXZlLiAgRGVmYXVsdCBpcyBPRkYuIiwKLSNlbHNlCi0iU0VUIFRFUk1JTkFMIEFVVE9ET1dO TE9BRCB7IE9OLCBPRkYsIEVSUk9SIHsgU1RPUCwgQ09OVElOVUUgfSB9IiwKLSIgIGVuYWJsZXMv ZGlzYWJsZXMgYXV0b21hdGljIHN3aXRjaGluZyBpbnRvIGZpbGUtdHJhbnNmZXIgbW9kZSB3aGVu IGEgS2VybWl0IiwKLSIgIGZpbGUgdHJhbnNmZXIgaGFzIGJlZW4gZGV0ZWN0ZWQgZHVyaW5nIENP Tk5FQ1QgbW9kZSBvciB3aGlsZSBhbiBJTlBVVCIsCi0iICBjb21tYW5kIGlzIGFjdGl2ZS4gIERl ZmF1bHQgaXMgT0ZGLiIsCi0jZW5kaWYgLyogQ0tfWFlaICovCi0KLSIgIiwKLSIgIFdoZW4gVEVS TUlOQUwgQVVUT0RPV05MT0FEIGlzIE9OLCB0aGUgVEVSTUlOQUwgQVVUT0RPV05MT0FEIEVSUk9S IHNldHRpbmciLAotIiAgdGVsbHMgd2hhdCB0byBkbyBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5n IGEgZmlsZSB0cmFuc2ZlciBvciBvdGhlciIsCi0iICBwcm90b2NvbCBvcGVyYXRpb24gaW5pdGlh dGVkIGJ5IHRoZSB0ZXJtaW5hbCBlbXVsYXRvcjogU1RPUCAodGhlIGRlZmF1bHQpIiwKLSIgIG1l YW5zIHRvIHJlbWFpbiBpbiBjb21tYW5kIG1vZGUgc28geW91IGNhbiBzZWUgd2hhdCBoYXBwZW5l ZDsgQ09OVElOVUUiLAotIiAgbWVhbnMgdG8gcmVzdW1lIHRoZSBDT05ORUNUIHNlc3Npb24gKGUu Zy4gc28gYSBmYXItZW5kIHNjcmlwdCBjYW4gY29udGludWUiLAotIiAgaXRzIHdvcmspLiIsCi0i ICIsCi0KLSNpZmRlZiBDS19YWVoKLSJTRVQgVEVSTS4uLiBBVVRPLi4uIHsgS0VSTUlULCBaTU9E RU0gfSBDMC1DT05GTElDVFMgeyBJR05PUkVELCBQUk9DRVNTRUQgfSIsCi0iICBEZXRlcm1pbmVz IHdoZXRoZXIgdGhlIGFjdGl2ZSB0ZXJtaW5hbCBlbXVsYXRvciBzaG91bGQgcHJvY2VzcyBvciBp Z25vcmUiLAotIiAgQzAgY29udHJvbCBjaGFyYWN0ZXJzIHdoaWNoIGFyZSBhbHNvIHVzZWQgZm9y IHRoZSBzcGVjaWZpZWQgZmlsZSB0cmFuc2ZlciIsCi0iICBwcm90b2NvbC4gIEtlcm1pdCBieSBk ZWZhdWx0IHVzZXMgXkEgKFNPSCkgYW5kIFptb2RlbSB1c2VzIF5YIChDQU4pLiIsCi0iICBEZWZh dWx0IGlzIFBST0NFU1NFRC4iLAotIiAiLAotIlNFVCBURVJNLi4uIEFVVE8uLi4geyBLRVJNSVQs IFpNT0RFTSB9IERFVEVDVElPTi1NRVRIT0QgeyBQQUNLRVQsIFNUUklORyB9IiwKLSIgIERldGVy bWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIGZpbGUgdHJhbnNmZXIgcHJvdG9jb2wgc2hvdWxk IGJlIGRldGVjdGVkIiwKLSIgIGJ5IGxvb2tpbmcgZm9yIHZhbGlkIHBhY2tldHMgb3IgYnkgaWRl bnRpZnlpbmcgYSBzcGVjaWZpZWQgdGV4dCBzdHJpbmcuIiwKLSIgIERlZmF1bHQgaXMgUEFDS0VU LiIsCi0iICIsCi0iU0VUIFRFUk0uLi4gQVVUTy4uLiB7IEtFUk1JVCwgWk1PREVNIH0gU1RSSU5H IDx0ZXh0PiIsCi0iICBMZXRzIHlvdSBhc3NpZ24gYW4gYXV0b2Rvd25sb2FkIGRldGVjdGlvbiBz dHJpbmcgZm9yIHVzZSB3aXRoIHRoZSIsCi0iICBzcGVjaWZpZWQgZmlsZSB0cmFuc2ZlciBwcm90 b2NvbC4iLAotIiAgRGVmYXVsdCBmb3IgS2VybWl0IGlzIFwiUkVBRFkgVE8gU0VORC4uLlwiLCBm b3IgWm1vZGVtIGlzIFwicnpcXHsxM31cIi4iLAotIiAiLAotI2Vsc2UgLyogQ0tfWFlaICovCi0i U0VUIFRFUk0uLi4gQVVUTy4uLiBLRVJNSVQgQzAtQ09ORkxJQ1RTIHsgSUdOT1JFRCwgUFJPQ0VT U0VEIH0iLAotIiAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3RpdmUgdGVybWluYWwgZW11bGF0 b3Igc2hvdWxkIHByb2Nlc3Mgb3IgaWdub3JlIiwKLSIgIEMwIGNvbnRyb2wgY2hhcmFjdGVycyB3 aGljaCBhcmUgYWxzbyB1c2VkIGZvciB0aGUgc3BlY2lmaWVkIGZpbGUgdHJhbnNmZXIiLAotIiAg cHJvdG9jb2wuICBLZXJtaXQgYnkgZGVmYXVsdCB1c2VzIF5BIDxTT0g+LiAgRGVmYXVsdCBpcyBQ Uk9DRVNTRUQuIiwKLSIgIiwKLSJTRVQgVEVSTS4uLiBBVVRPLi4uIEtFUk1JVCBERVRFQ1RJT04t TUVUSE9EIHsgUEFDS0VULCBTVFJJTkcgfSIsCi0iICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNw ZWNpZmllZCBmaWxlIHRyYW5zZmVyIHByb3RvY29sIHNob3VsZCBiZSBkZXRlY3RlZCIsCi0iICBi eSBsb29raW5nIGZvciB2YWxpZCBwYWNrZXRzIG9yIGJ5IGlkZW50aWZ5aW5nIGEgc3BlY2lmaWVk IHRleHQgc3RyaW5nLiIsCi0iICBEZWZhdWx0IGlzIFBBQ0tFVC4iLAotIiAiLAotIlNFVCBURVJN Li4uIEFVVE8uLi4gS0VSTUlUIFNUUklORyA8dGV4dD4iLAotIiAgTGV0cyB5b3UgYXNzaWduIGFu IGF1dG9kb3dubG9hZCBkZXRlY3Rpb24gc3RyaW5nIGZvciB1c2Ugd2l0aCB0aGUiLAotIiAgc3Bl Y2lmaWVkIGZpbGUgdHJhbnNmZXIgcHJvdG9jb2wuICBEZWZhdWx0IGlzIFwiUkVBRFkgVE8gU0VO RC4uLlwiLiIsCi0iICIsCi0jZW5kaWYgLyogQ0tfWFlaICovCi0iU0VUIFRFUk1JTkFMIEFVVE9Q QUdFIHsgT04sIE9GRiB9IiwKLSIgIiwKLSJTRVQgVEVSTUlOQUwgQVVUT1NDUk9MTCB7IE9OLCBP RkYgfSIsCi0iICIsCi0jZWxzZSAvKiBPUzIgKi8KLSJTRVQgVEVSTUlOQUwgQVVUT0RPV05MT0FE IHsgT04sIE9GRiwgRVJST1IgeyBTVE9QLCBDT05USU5VRSB9IH0iLAotIiAgRW5hYmxlcy9kaXNh YmxlcyBhdXRvbWF0aWMgc3dpdGNoaW5nIGludG8gZmlsZS10cmFuc2ZlciBtb2RlIHdoZW4gYSB2 YWxpZCIsCi0jaWZkZWYgQ0tfWFlaCi0iICBLZXJtaXQgb3IgWk1PREVNIHBhY2tldCBvZiB0aGUg YXBwcm9wcmlhdGUgdHlwZSBpcyByZWNlaXZlZCBkdXJpbmcgQ09OTkVDVCIsCi0iICBtb2RlLiAg RGVmYXVsdCBpcyBPRkYuIiwKLSNlbHNlCi0iICBLZXJtaXQgcGFja2V0IG9mIHRoZSBhcHByb3By aWF0ZSB0eXBlIGlzIHJlY2VpdmVkIGR1cmluZyBDT05ORUNUIG1vZGUuIiwKLSIgIERlZmF1bHQg aXMgT0ZGLiIsCi0jZW5kaWYgLyogQ0tfWFlaICovCi0KLSIgIiwKLSIgIFdoZW4gVEVSTUlOQUwg QVVUT0RPV05MT0FEIGlzIE9OLCB0aGUgVEVSTUlOQUwgQVVUT0RPV05MT0FEIEVSUk9SIHNldHRp bmciLAotIiAgdGVsbHMgd2hhdCB0byBkbyBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIGEgZmls ZSB0cmFuc2ZlciBvciBvdGhlciIsCi0iICBwcm90b2NvbCBvcGVyYXRpb24gaW5pdGlhdGVkIGJ5 IHRoZSB0ZXJtaW5hbCBlbXVsYXRvcjogU1RPUCAodGhlIGRlZmF1bHQpIiwKLSIgIG1lYW5zIHRv IHJlbWFpbiBpbiBjb21tYW5kIG1vZGUgc28geW91IGNhbiBzZWUgd2hhdCBoYXBwZW5lZDsgQ09O VElOVUUiLAotIiAgbWVhbnMgdG8gcmVzdW1lIHRoZSBDT05ORUNUIHNlc3Npb24gKGUuZy4gc28g YSBmYXItZW5kIHNjcmlwdCBjYW4gY29udGludWUiLAotIiAgaXRzIHdvcmspLiIsCi0iICIsCi0K LSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE9TMgotIlNFVCBURVJNSU5BTCBCRUxMIHsgQVVE SUJMRSwgVklTSUJMRSwgTk9ORSB9IiwKLSIgIFNwZWNpZmllcyBob3cgQ29udHJvbC1HIChiZWxs KSBjaGFyYWN0ZXJzIGFyZSBoYW5kbGVkLiAgQVVESUJMRSBtZWFucyIsCi0iICBhIGJlZXAgaXMg c291bmRlZDsgVklTSUJMRSBtZWFucyB0aGUgc2NyZWVuIGlzIGZsYXNoZWQgbW9tZW50YXJpbHku IiwKLSIgIiwKLSIgIChUaGlzIGNvbW1hbmQgaGFzIGJlZW4gc3VwZXJzZWRlZCBieSBTRVQgQkVM TC4pIiwKLSIgIiwKLSNlbmRpZiAvKiBPUzIgKi8KLQotIlNFVCBURVJNSU5BTCBCWVRFU0laRSB7 IDcsIDggfSIsCi0iICBVc2UgNy0gb3IgOC1iaXQgY2hhcmFjdGVycyBiZXR3ZWVuIEtlcm1pdCBh bmQgdGhlIHJlbW90ZSBjb21wdXRlciBkdXJpbmciLAotIiAgdGVybWluYWwgc2Vzc2lvbnMuICBU aGUgZGVmYXVsdCBpcyA4LiIsCi0iICIsCi0KLSNpZm5kZWYgTk9DU0VUUwotI2lmZGVmIE9TMgot IlNFVCBURVJNSU5BTCBDSEFSQUNURVItU0VUIDxyZW1vdGUtY3M+IiwKLSIgIFNwZWNpZmllcyB0 aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IHRoZSByZW1vdGUgaG9zdCwgPHJlbW90ZS1jcz4uIiwK LSIgIEVxdWl2YWxlbnQgdG8gU0VUIFRFUk0gUkVNT1RFLUNIQVJBQ1RFUi1TRVQgPHJlbW90ZS1j cz4gQUxMLiAgRm9yIG1vcmUiLAotIiAgY29udHJvbCBvdmVyIHRoZSBkZXRhaWxzLCB1c2UgU0VU IFRFUk0gUkVNT1RFLUNIQVJBQ1RFUi1TRVQgYW5kIChpbiIsCi0iICBub24tR1VJIEs5NSB2ZXJz aW9ucykgU0VUIFRFUk0gTE9DQUwtQ0hBUkFDVEVSLVNFVDsgdGhlc2UgYXJlIGV4cGxhaW5lZCIs Ci0iICBiZWxvdy4gIFRoZSBkZWZhdWx0IFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgaXMgTEFUSU4x IChJU08gODg1OS0xKS4iLAotI2Vsc2UgIC8qIG5vdCBPUzIgKi8KLSJTRVQgVEVSTUlOQUwgQ0hB UkFDVEVSLVNFVCA8cmVtb3RlLWNzPiBbIDxsb2NhbC1jcz4gXSIsCi0iICBTcGVjaWZpZXMgdGhl IGNoYXJhY3RlciBzZXQgdXNlZCBieSB0aGUgcmVtb3RlIGhvc3QsIDxyZW1vdGUtY3M+LCBhbmQg dGhlIiwKLSIgIGNoYXJhY3RlciBzZXQgdXNlZCBieSBDLUtlcm1pdCBsb2NhbGx5LCA8bG9jYWwt Y3M+LiAgSWYgeW91IGRvbid0IHNwZWNpZnkiLAotIiAgdGhlIGxvY2FsIGNoYXJhY3RlciBzZXQs IHRoZSBjdXJyZW50IEZJTEUgQ0hBUkFDVEVSLVNFVCBpcyB1c2VkLiAgV2hlbiIsCi0iICB5b3Ug c3BlY2lmeSB0d28gZGlmZmVyZW50IGNoYXJhY3RlciBzZXRzLCBDLUtlcm1pdCB0cmFuc2xhdGVz IGJldHdlZW4gdGhlbSIsCi0iICBkdXJpbmcgQ09OTkVDVC4gIEJ5IGRlZmF1bHQsIGJvdGggY2hh cmFjdGVyIHNldHMgYXJlIFRSQU5TUEFSRU5ULCBhbmQiLAotIiAgbm8gdHJhbnNsYXRpb24gaXMg ZG9uZS4iLAotI2VuZGlmIC8qIE9TMiAqLwotIiAiLAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQot I2lmZGVmIE9TMgotCi0iU0VUIFRFUk1JTkFMIENPREUtUEFHRSA8bnVtYmVyPiIsCi0iICBMZXRz IHlvdSBjaGFuZ2UgdGhlIFBDIGNvZGUgcGFnZS4gIE9ubHkgd29ya3MgZm9yIGNvZGUgcGFnZXMg dGhhdCBhcmUiLAotIiAgc3VjY2Vzc2Z1bGx5IHByZXBhcmVkIGluIENPTkZJRy5TWVMuICBVc2Ug U0hPVyBURVJNSU5BTCB0byBsaXN0IHRoZSIsCi0iICBjdXJyZW50IGNvZGUgcGFnZSBhbmQgdGhl IGF2YWlsYWJsZSBjb2RlIHBhZ2VzLiIsCi0jaWZkZWYgT1MyT05MWQotIiAiLAotIiAgQWxzbyBz ZWUgU0VUIFRFUk1JTkFMIEZPTlQgaWYgdGhlIGRlc2lyZWQgY29kZSBwYWdlIGluIG5vdCBhdmFp bGFibGUgaW4iLAotIiAgeW91ciB2ZXJzaW9uIG9mIE9TLzIuIiwKLSNlbmRpZiAvKiBPUzJPTkxZ ICovCi0iICIsCi0KLSNpZm5kZWYgTlQKLSJTRVQgVEVSTUlOQUwgQ09MT1IgQk9SREVSIDxmb3Jl Z3JvdW5kPiIsCi0jZW5kaWYgLyogTlQgKi8KLSJTRVQgVEVSTUlOQUwgQ09MT1IgPHNjcmVlbnBh cnQ+IDxmb3JlZ3JvdW5kPiA8YmFja2dyb3VuZD4iLAotIiBTZXRzIHRoZSBjb2xvcnMgb2YgdGhl IHRlcm1pbmFsIGVtdWxhdGlvbiBzY3JlZW4uIiwKLSIgPHNjcmVlbnBhcnQ+IG1heSBiZSBhbnkg b2YgdGhlIGZvbGxvd2luZzoiLAotIiAgREVCVUcsIEhFTFAtVEVYVCwgUkVWRVJTRSwgU0VMRUNU SU9OLCBTVEFUVVMtTElORSwgVEVSTUlOQUwtU0NSRUVOLCBvciIsCi0iICBVTkRFUkxJTkVELVRF WFQuIiwKLSIgPGZvcmVncm91bmQ+IGFuZCA8YmFja2dyb3VuZD4gbWF5IGJlIGFueSBvZjoiLAot IiAgQkxBQ0ssIEJMVUUsIEdSRUVOLCBDWUFOLCBSRUQsIE1BR0VOVEEsIEJST1dOLCBMR1JBWSwg REdSQVksIExCTFVFLCIsCi0iICBMR1JFRU4sIExDWUFOLCBMUkVELCBMTUFHRU5UQSwgWUVMTE9X IG9yIFdISVRFLiIsCi0iIFRoZSBMIHByZWZpeCBmb3IgdGhlIGNvbG9yIG5hbWVzIG1lYW5zIExp Z2h0LiIsCi0iICIsCi0KLSJTRVQgVEVSTUlOQUwgQ09MT1IgRVJBU0UgeyBDVVJSRU5ULUNPTE9S LCBERUZBVUxULUNPTE9SIH0iLAotIiAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjdXJyZW50IGNv bG9yIGFzIHNldCBieSB0aGUgaG9zdCBvciB0aGUgZGVmYXVsdCIsCi0iICBjb2xvciBhcyBzZXQg YnkgdGhlIHVzZXIgKFNFVCBURVJNSU5BTCBDT0xPUiBURVJNSU5BTCkgaXMgdXNlZCB0byBjbGVh ciIsCi0iICB0aGUgc2NyZWVuIHdoZW4gZXJhc2UgY29tbWFuZHMgYXJlIHJlY2VpdmVkIGZyb20g dGhlIGhvc3QuIiwKLSIgIiwKLQotIlNFVCBURVJNSU5BTCBDT0xPUiBSRVNFVC1PTi1FU0NbMG0g eyBDVVJSRU5ULUNPTE9SLCBERUZBVUxULUNPTE9SIH0iLAotIiAgRGV0ZXJtaW5lcyB3aGV0aGVy IHRoZSBjdXJyZW50IGNvbG9yIG9yIHRoZSBkZWZhdWx0IGNvbG9yIGlzIHVzZWQgYWZ0ZXIiLAot IiAgPEVTQz5bMG0gKFwicmVzZXQgYXR0cmlidXRlc1wiKSBjb21tYW5kIHNlcXVlbmNlIGlzIHJl Y2VpdmVkIGZyb20gdGhlIiwKLSIgIGhvc3QuIiwKLSIgIiwKLQotIlNFVCBURVJNSU5BTCBDT05U Uk9MUyB7IDcsIDggfSIsCi0iICBEZXRlcm1pbmVzIHdoZXRoZXIgVlQyMjAvMzIwIG9yIFd5c2Ug MzcwIGZ1bmN0aW9uIGtleXMsIGFycm93IGtleXMsIGV0YywiLAotIiAgdGhhdCBnZW5lcmF0ZSBB TlNJLWZvcm1hdCBlc2NhcGUgc2VxdWVuY2VzIHNob3VsZCBzZW5kIDgtYml0IGNvbnRyb2wiLAot IiAgY2hhcmFjdGVycyBvciA3LWJpdCBlc2NhcGUgc2VxdWVuY2VzLiIsCi0iICIsCi0jZW5kaWYg LyogT1MyICovCi0KLSJTRVQgVEVSTUlOQUwgQ1ItRElTUExBWSB7IENSTEYsIE5PUk1BTCB9IiwK LSIgIFNwZWNpZmllcyBob3cgaW5jb21pbmcgY2FycmlhZ2UgcmV0dXJuIGNoYXJhY3RlcnMgYXJl IHRvIGJlIGRpc3BsYXllZCIsCi0iICBvbiB5b3VyIHNjcmVlbi4iLAotIiAiLAotCi0jaWZkZWYg T1MyCi0jaWZkZWYgS1VJCi0iU0VUIFRFUk1JTkFMIENVUlNPUiB7IEZVTEwsIEhBTEYsIFVOREVS TElORSB9IHtPTiwgT0ZGLCBOT0JMSU5LfSIsCi0iICBTZWxlY3RzIHRoZSBjdXJzb3Igc3R5bGUg YW5kIHZpc2liaWxpdHkgZm9yIHRoZSB0ZXJtaW5hbCBzY3JlZW4uIiwKLSNlbHNlCi0iU0VUIFRF Uk1JTkFMIENVUlNPUiB7IEZVTEwsIEhBTEYsIFVOREVSTElORSB9IHtPTiwgT0ZGfSIsCi0iICBT ZWxlY3RzIHRoZSBjdXJzb3Igc3R5bGUgYW5kIHZpc2liaWxpdHkgZm9yIHRoZSB0ZXJtaW5hbCBz Y3JlZW4uIiwKLSNlbmRpZiAvKiBLVUkgKi8KLSIgIiwKLSNlbmRpZiAvKiBPUzIgKi8KLQotIlNF VCBURVJNSU5BTCBERUJVRyB7IE9OLCBPRkYgfSIsCi0iICBUdXJucyB0ZXJtaW5hbCBzZXNzaW9u IGRlYnVnZ2luZyBvbiBhbmQgb2ZmLiAgV2hlbiBPTiwgaW5jb21pbmcgY29udHJvbCIsCi0iICBj aGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgc3ltYm9saWNhbGx5LCByYXRoZXIgdGhhbiBiZSB0YWtl biBhcyBmb3JtYXR0aW5nIiwKLSIgIGNvbW1hbmRzLiAgU0VUIFRFUk1JTkFMIERFQlVHIE9OIGlt cGxpZXMgU0VUIFRFTE5FVCBERUJVRyBPTi4iLAotIiAiLAotI2lmZGVmIE9TMgotIlNFVCBURVJN SU5BTCBERy1VTklYLU1PREUgeyBPTiwgT0ZGIH0iLAotIiAgU3BlY2lmaWVzIHdoZXRoZXIgdGhl IERhdGEgR2VuZXJhbCBlbXVsYXRpb25zIHNob3VsZCBhY2NlcHQgY29udHJvbCIsCi0iICBzZXF1 ZW5jZXMgaW4gVW5peCBjb21wYXRpYmxlIGZvcm1hdCBvciBpbiBuYXRpdmUgREcgZm9ybWF0LiAg VGhlIiwKLSIgIGRlZmF1bHQgaXMgT0ZGLCBERyBmb3JtYXQuIiwKLSIgIiwKLSNlbmRpZiAvKiBP UzIgKi8KLQotIlNFVCBURVJNSU5BTCBFQ0hPIHsgTE9DQUwsIFJFTU9URSB9IiwKLSIgIFNwZWNp ZmllcyB3aGljaCBzaWRlIGRvZXMgdGhlIGVjaG9pbmcgZHVyaW5nIHRlcm1pbmFsIGNvbm5lY3Rp b24uIiwKLSIgIiwKLQotIlNFVCBURVJNSU5BTCBFU0NBUEUtQ0hBUkFDVEVSIHsgRU5BQkxFRCwg RElTQUJMRUQgfSIsCi0iICBUdXJucyBvbi9vZmYgdGhlIGFiaWxpdHkgdG8gZXNjYXBlIGJhY2sg ZnJvbSBDT05ORUNUIG1vZGUgdXNpbmcgdGhlIFNFVCIsCi0jaWZkZWYgT1MyCi0iICBFU0NBUEUg Y2hhcmFjdGVyLiAgSWYgeW91IGRpc2FibGUgaXQgeW91IGNhbiBzdGlsbCBnZXQgYmFjayB1c2lu ZyBBbHQta2V5IiwKLSIgIGNvbWJpbmF0aW9ucyBhcyBzaG93biBpbiB0aGUgc3RhdHVzIGxpbmUu ICBBbHNvIHNlZSBIRUxQIFNFVCBFU0NBUEUuIiwKLSNlbHNlCi0iICBFU0NBUEUgY2hhcmFjdGVy LiAgSWYgeW91IGRpc2FibGUgaXQsIEtlcm1pdCByZXR1cm5zIHRvIGl0cyBwcm9tcHQgb25seSIs Ci0iICB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCBieSB0aGUgb3RoZXIgZW5kLiAgVVNF IFdJVEggRVhUUkVNRSBDQVVUSU9OLiIsCi0iICBBbHNvIHNlZSBIRUxQIFNFVCBFU0NBUEUuIiwK LSNlbmRpZiAvKiBPUzIgKi8KLSIgIiwKLQotI2lmZGVmIE9TMgotI2lmZGVmIEtVSQotIlNFVCBU RVJNSU5BTCBGT05UIDxmYWNlbmFtZT4gPGhlaWdodD4iLAotIiAgU3BlY2lmaWVzIHRoZSBmb250 IHRvIGJlIHVzZWQgaW4gdGhlIEtlcm1pdCA5NSB3aW5kb3cuICBUaGUgZm9udCBpcyIsCi0iICBk ZXRlcm1pbmVkIGJ5IHRoZSBjaG9pY2Ugb2YgYSBmYWNlbmFtZSBhbmQgYSBoZWlnaHQgbWVhc3Vy ZWQgaW4gUG9pbnRzLiIsCi0iICBUaGUgYXZhaWxhYmxlIGZhY2VuYW1lcyBhcmUgdGhvc2UgaW5z dGFsbGVkIGluIHRoZSBGb250IENvbnRyb2wgUGFuZWwuIiwKLSIgIiwKLSNlbHNlIC8qIEtVSSAq LwotI2lmZGVmIE9TMk9OTFkKLSJTRVQgVEVSTUlOQUwgRk9OVCB7IENQNDM3LCBDUDg1MCwgQ1A4 NTIsIENQODYyLCBDUDg2NiwgREVGQVVMVCB9IiwKLSIgIENQNDM3IC0gT3JpZ2luYWwgUEMgY29k ZSBwYWdlIiwKLSIgIENQODUwIC0gXCJNdWx0aWxpbmd1YWxcIiAoV2VzdCBFdXJvcGUpIGNvZGUg cGFnZSIsCi0iICBDUDg1MiAtIEVhc3QgRXVyb3BlIFJvbWFuIEFscGhhYmV0IGNvZGUgcGFnZSAo Zm9yIEN6ZWNoLCBQb2xpc2gsIGV0YykiLAotIiAgQ1A4NjIgLSBIZWJyZXcgY29kZSBwYWdlIiwK LSIgIENQODY2IC0gQ3lyaWxsaWMgKFJ1c3NpYW4sIEJlbG9ydXNzaWFuLCBhbmQgVWtyYWluaWFu KSBjb2RlIHBhZ2UiLAotIiAiLAotIiAgTG9hZHMgYSBzb2Z0IGludG8gdGhlIHZpZGVvIGFkYXB0 ZXIgZm9yIHVzZSBkdXJpbmcgdGVybWluYWwgZW11bGF0aW9uLiIsCi0iICBVc2UgdGhpcyBjb21t YW5kIHdoZW4geW91ciBPUy8yIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHRoZSBkZXNpcmVkIGNvZGUu IiwKLSIgIHBhZ2UuICBDYW4gYmUgdXNlZCBvbmx5IGluIGZ1bGwtc2NyZWVuIHNlc3Npb25zLiAg QWxzbyBzZWUgU0VUIFRFUk1JTkFMIiwKLSIgIENPREUtUEFHRSBhbmQgU0VUIFRFUk1JTkFMIFJF TU9URS1DSEFSQUNURVItU0VULiIsCi0iICIsCi0jZW5kaWYgLyogT1MyT05MWSAqLwotI2VuZGlm IC8qIEtVSSAqLwotCi0jaWZkZWYgTlQKLSJTRVQgVEVSTUlOQUwgSEVJR0hUIDxudW1iZXI+IiwK LSIgIENoYW5nZXMgdGhlIG51bWJlciBvZiByb3dzIChsaW5lcykgdG8gdXNlIGR1cmluZyB0ZXJt aW5hbCBlbXVsYXRpb24sIG5vdCIsCi0iICBjb3VudGluZyB0aGUgc3RhdHVzIGxpbmUuICBSZWNv bW1lbmRlZCB2YWx1ZXMgYXJlIDI0LCA0MiwgYW5kIDQ5IChvciAyNSwiLAotIiAgNDMsIGFuZCA1 MCBpZiBTRVQgVEVSTUlOQUwgU1RBVFVTTElORSBpcyBPRkYuKSIsCi0jZWxzZQotIlNFVCBURVJN SU5BTCBIRUlHSFQgPG51bWJlcj4iCi0iICBDaGFuZ2VzIHRoZSBudW1iZXIgb2Ygcm93cyAobGlu ZXMpIHRvIHVzZSBkdXJpbmcgdGVybWluYWwgZW11bGF0aW9uLCBub3QiLAotIiAgY291bnRpbmcg dGhlIHN0YXR1cyBsaW5lLiAgV2luZG93ZWQgc2Vzc2lvbnMgY2FuIHVzZSBhbnkgdmFsdWUgZnJv bSA4IHRvIiwKLSIgIDEwMS4gIEZ1bGxzY3JlZW4gc2Vzc2lvbnMgYXJlIGxpbWl0ZWQgdG8gMjQs IDQyLCA0OSwgb3IgNTkuICBOb3QgYWxsIgotIiAgaGVpZ2h0cyBhcmUgc3VwcG9ydGVkIGJ5IGFs bCB2aWRlbyBhZGFwdGVycy4iLAotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAgLyogT1MyICovCi0i U0VUIFRFUk1JTkFMIEhFSUdIVCA8bnVtYmVyPiIsCi0iICBUZWxscyBDLUtlcm1pdCBob3cgbWFu eSByb3dzIChsaW5lcykgYXJlIG9uIHlvdXIgQ09OTkVDVC1tb2RlIHNjcmVlbi4iLAotI2VuZGlm IC8qIE9TMiAqLwotIiAiLAotCi0jaWZkZWYgQ0tUSURMRQotIlNFVCBURVJNSU5BTCBJRExFLVRJ TUVPVVQgPG51bWJlcj4iLAotIiAgU2V0cyB0aGUgbGltaXQgb24gaWRsZSB0aW1lIGluIENPTk5F Q1QgbW9kZSB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIiwKLSIgIHNlY29uZHMuICAwICh0aGUgZGVm YXVsdCkgbWVhbnMgbm8gbGltaXQuIiwKLSIgIiwKLSJTRVQgVEVSTUlOQUwgSURMRS1BQ1RJT04g eyBFWElULCBIQU5HVVAsIE9VVFBVVCBbIHRleHQgXSwgUkVUVVJOIH0iLAotIiAgU3BlY2lmaWVz IHRoZSBhY3Rpb24gdG8gYmUgdGFrZW4gd2hlbiBhIENPTk5FQ1Qgc2Vzc2lvbiBpcyBpZGxlIGZv ciB0aGUiLAotIiAgbnVtYmVyIG9mIHNlY29uZHMgZ2l2ZW4gYnkgU0VUIFRFUk1JTkFMIElETEUt VElNRU9VVC4gIFRoZSBkZWZhdWx0IGFjdGlvbiIsCi0iICBpcyB0byBSRVRVUk4gdG8gY29tbWFu ZCBtb2RlLiAgRVhJVCBleGl0cyBmcm9tIEtlcm1pdDsgSEFOR1VQIGhhbmdzIHVwIHRoZSIsCi0i ICBjb25uZWN0aW9uLCBhbmQgT1VUUFVUIHNlbmRzIHRoZSBnaXZlbiB0ZXh0IHRvIHRoZSBob3N0 IHdpdGhvdXQgbGVhdmluZyIsCi0iICBDT05ORUNUIG1vZGU7IGlmIG5vIHRleHQgaXMgZ2l2ZW4g YSBOVUwgKDApIGNoYXJhY3RlciBpcyBzZW50LiIsCi0jaWZkZWYgVE5DT0RFCi0iICIsCi0iU0VU IFRFUk1JTkFMIElETEUtQUNUSU9OIHsgVEVMTkVULU5PUCwgVEVMTkVULUFZVCB9IiwKLSIgIEZv ciBURUxORVQgY29ubmVjdGlvbnMgb25seTogU2VuZHMgdGhlIGluZGljYXRlZCBUZWxuZXQgcHJv dG9jb2wgbWVzc2FnZToiLAotIiAgTm8gT3BlcmF0aW9uIChOT1ApIG9yIFwiQXJlIFlvdSBUaGVy ZT9cIiAoQVlUKS4iLAotI2VuZGlmIC8qIFROQ09ERSAqLwotIiAiLAotI2VuZGlmIC8qIENLVElE TEUgKi8KLQotI2lmZGVmIE9TMgotCi0iU0VUIFRFUk1JTkFMIEtEQi1GT0xMT1dTLUdML0dSIHsg T04sIE9GRiB9IiwKLSIgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBrZXlib2FyZCBjaGFy YWN0ZXIgc2V0IHNob3VsZCBmb2xsb3cgdGhlIiwKLSIgIGFjdGl2ZSBHTCBhbmQgR1IgY2hhcmFj dGVyIHNldHMuICBUaGlzIGZlYXR1cmUgaXMgT0ZGIGJ5IGRlZmF1bHQgYW5kIiwKLSIgIHNob3Vs ZCBub3QgYmUgdXNlZCB1bmxlc3MgaXQgaXMgc3BlY2lmaWNseSByZXF1aXJlZCBieSB0aGUgaG9z dCIsCi0iICBhcHBsaWNhdGlvbi4iLAotIiAiLAotCi0iU0VUIFRFUk1JTkFMIEtFWSA8bW9kZT4g L0xJVEVSQUwgPGtleWNvZGU+IDx0ZXh0PiIsCi0iU0VUIFRFUk1JTkFMIEtFWSA8bW9kZT4gREVG QVVMVCIsCi0iU0VUIFRFUk1JTkFMIEtFWSA8bW9kZT4gQ0xFQVIiLAotIiAgQ29uZmlndXJlcyB0 aGUga2V5IHdob3NlIDxrZXljb2RlPiBpcyBnaXZlbiB0byBzZW5kIHRoZSBnaXZlbiB0ZXh0IHdo ZW4iLAotIiAgcHJlc3NlZCB3aGlsZSA8bW9kZT4gaXMgYWN0aXZlLiAgPG1vZGU+IG1heSBiZSBh bnkgb2YgdGhlIHZhbGlkIHRlcm1pbmFsIiwKLSIgIHR5cGVzIG9yIHRoZSBzcGVjaWFsIG1vZGVz IFwiRU1BQ1NcIiwgXCJIRUJSRVdcIiBvciBcIlJVU1NJQU5cIi4gIERFRkFVTFQiLAotIiAgcmVz dG9yZXMgYWxsIGRlZmF1bHQga2V5IG1hcHBpbmdzIGZvciB0aGUgc3BlY2lmaWVkIG1vZGUuICBD TEVBUiBlcmFzZXMiLAotIiAgYWxsIHRoZSBrZXkgbWFwcGluZ3MuICBJZiB0aGVyZSBpcyBubyB0 ZXh0LCB0aGUgZGVmYXVsdCBrZXkgYmluZGluZyBpcyIsCi0jaWZuZGVmIE5PQ1NFVFMKLSIgIHJl c3RvcmVkIGZvciB0aGUga2V5IGsuICBTRVQgVEVSTUlOQUwgS0VZIG1hcHBpbmdzIHRha2UgcGxh Y2UgYmVmb3JlIiwKLSIgIHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24uICBTRVQg S0VZIG1hcHBpbmdzIHRha2UgcHJlY2VkZW5jZSBvdmVyIiwKLSIgIFNFVCBURVJNSU5BTCBLRVkg PHRlcm1pbmFsIHR5cGU+IHNldHRpbmdzLiIsCi0jZWxzZQotIiAgcmVzdG9yZWQgZm9yIHRoZSBr ZXkuICBTRVQgS0VZIG1hcHBpbmdzIHRha2UgcHJlY2VkZW5jZSBvdmVyIFNFVCBURVJNSU5BTCIs Ci0iICBLRVkgPHRlcm1pbmFsIHR5cGU+IHNldHRpbmdzLiIsCi0jZW5kaWYgLyogTk9DU0VUUyAq LwotIiAgVGhlIC9MSVRFUkFMIHN3aXRjaCBtYXkgYmUgdXNlZCB0byBpbnN0cnVjdCBLZXJtaXQg dG8gaWdub3JlIGNoYXJhY3Rlci1zZXQiLAotIiAgdHJhbnNsYXRpb25zIHdoZW4gc2VuZGluZyB0 aGlzIGRlZmluaXRpb24gdG8gdGhlIGhvc3QuIiwKLSIgIiwKLSIgIFRoZSB0ZXh0IG1heSBjb250 YWluIFwiXFxLdmVyYnNcIiB0byBkZW5vdGUgYWN0aW9ucywgdG8gc3RhbmQgZm9yIERFQyIsCi0i ICBrZXlwYWQsIGZ1bmN0aW9uLCBvciBlZGl0aW5nIGtleXMsIGV0Yy4gIEZvciBhIGxpc3Qgb2Yg YXZhaWxhYmxlIGtleWJvYXJkIiwKLSIgIHZlcmJzLCB0eXBlIFNIT1cgS1ZFUkJTLiIsCi0iICIs Ci0iICBUbyBmaW5kIG91dCB0aGUga2V5Y29kZSBhbmQgbWFwcGluZyBmb3IgYSBwYXJ0aWN1bGFy IGtleSwgdXNlIHRoZSBTSE9XIiwKLSIgIEtFWSBjb21tYW5kLiAgVXNlIHRoZSBTQVZFIEtFWVMg Y29tbWFuZCB0byBzYXZlIGFsbCBzZXR0aW5ncyB0byBhIGZpbGUuIiwKLSIgIiwKLSJTRVQgVEVS TUlOQUwgS0VZQk9BUkQtTU9ERSB7IE5PUk1BTCwgRU1BQ1MsIFJVU1NJQU4sIEhFQlJFVyB9IiwK LSIgIFNlbGVjdCBhIHNwZWNpYWwga2V5Ym9hcmQgbW9kZSBmb3IgdXNlIGluIHRoZSB0ZXJtaW5h bCBzY3JlZW4uIiwKLSIgIiwKLQotIlNFVCBURVJNSU5BTCBLRVlQQUQtTU9ERSB7IEFQUExJQ0FU SU9OLCBOVU1FUklDIH0iLAotIiAgU3BlY2lmaWVzIHRoZSBcIm1vZGVcIiBvZiB0aGUgbnVtZXJp YyBrZXlwYWQgZm9yIFZUIHRlcm1pbmFsIGVtdWxhdGlvbi4iLAotIiAgVXNlIHRoaXMgY29tbWFu ZCBpbiBjYXNlIHRoZSBob3N0IG9yIGFwcGxpY2F0aW9uIHdhbnRzIHRoZSBrZXlwYWQgdG8gYmUi LAotIiAgaW4gYSBkaWZmZXJlbnQgbW9kZSB0aGFuIGl0J3MgaW4sIGJ1dCBkaWQgbm90IHNlbmQg dGhlIGVzY2FwZSBzZXF1ZW5jZSIsCi0iICB0byBwdXQgaXQgaW4gdGhlIG5lZWRlZCBtb2RlLiIs Ci0iICIsCi0KLSNlbmRpZgkvKiBPUzIgKi8KLQotIlNFVCBURVJNSU5BTCBMRi1ESVNQTEFZIHsg Q1JMRiwgTk9STUFMIH0iLAotIiAgU3BlY2lmaWVzIGhvdyBpbmNvbWluZyBsaW5lZmVlZCBjaGFy YWN0ZXJzIGFyZSB0byBiZSBkaXNwbGF5ZWQiLAotIiAgb24geW91ciBzY3JlZW4uIiwKLSIgIiwK LQotI2lmZGVmIE9TMgotCi0jaWZkZWYgS1VJCi0iU0VUIFRFUk1JTkFMIExJTkUtU1BBQ0lORyA8 ZmxvYXQ+IiwKLSIgIFNwZWNpZmllcyB0aGUgbGluZSBzcGFjaW5nIHVzZWQgd2hlbiBkaXNwbGF5 aW5nIHRleHQuICBUaGUgZGVmYXVsdCBpcyAxLjAuIiwKLSIgIFZhbGlkIHZhbHVlcyByYW5nZSBm cm9tIDEuMCB0byAzLjAgaW5jbHVzaXZlLiIsCi0iICIsCi0jZW5kaWYgLyogS1VJICovCi0jZW5k aWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9DU0VUUwotI2lmZGVmIE9TMgotIlNFVCBURVJNSU5B TCBMT0NBTC1DSEFSQUNURVItU0VUIDxsb2NhbC1jcz4iLAotIiAgU3BlY2lmaWVzIHRoZSBjaGFy YWN0ZXIgc2V0IHVzZWQgYnkgSy05NSBsb2NhbGx5LiAgSWYgeW91IGRvbid0IHNwZWNpZnkiLAot I2lmZGVmIE9TMk9OTFkKLSIgIHRoZSBsb2NhbCBjaGFyYWN0ZXItc2V0LCB0aGUgY3VycmVudCBU RVJNSU5BTCBGT05UIGlzIHVzZWQgaWYgeW91IGhhdmUiLAotIiAgZ2l2ZW4gYSBTRVQgVEVSTUlO QUwgRk9OVCBjb21tYW5kOyBvdGhlcndpc2UgdGhlIGN1cnJlbnQgY29kZXBhZ2UgaXMgdXNlZC4i LAotI2Vsc2UKLSIgIHRoZSBsb2NhbCBjaGFyYWN0ZXItc2V0LCB0aGUgY3VycmVudCBjb2RlIHBh Z2UgaXMgdXNlZC4iLAotI2VuZGlmIC8qIE9TMk9OTFkgKi8KLSIgIiwKLSIgIFdoZW4gdGhlIGxv Y2FsIGFuZCByZW1vdGUgY2hhcmFjdGVyIHNldHMgZGlmZmVyLCBLZXJtaXQgdHJhbnNsYXRlcyBi ZXR3ZWVuIiwKLSIgIHRoZW0gZHVyaW5nIENPTk5FQ1QuICBCeSBkZWZhdWx0LCB0aGUgcmVtb3Rl IGNoYXJhY3RlciBzZXQgaXMgTGF0aW4xIGFuZCIsCi0iICB0aGUgbG9jYWwgb25lIGlzIHlvdXIg Y3VycmVudCBjb2RlIHBhZ2UuIiwKLSNpZmRlZiBOVAotIiAiLAotIiAgSW4gV2luZG93cyBOVCwg VW5pY29kZSBpcyB1c2VkIGFzIHRoZSBsb2NhbCBjaGFyYWN0ZXItc2V0IHJlZ2FyZGxlc3Mgb2Yi LAotIiAgdGhpcyBzZXR0aW5nLiIsCi0jZW5kaWYgLyogTlQgKi8KLSIgIiwKLSJTZWUgYWxzbyBT RVQgVEVSTUlOQUwgUkVNT1RFLUNIQVJBQ1RFUi1TRVQiLAotIiAiLAotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lmZGVmIE9TMgotIlNFVCBURVJNSU5BTCBMT0NL SU5HLVNISUZUIHsgT0ZGLCBPTiB9IiwKLSIgIFRlbGxzIHdoZXRoZXIgdG8gc2VuZCBTaGlmdC1J bi9TaGlmdC1PdXQgKEN0cmwtTyBhbmQgQ3RybC1OKSB0byBzd2l0Y2giLAotIiAgYmV0d2VlbiA3 LWJpdCBhbmQgOC1iaXQgY2hhcmFjdGVycyBzZW50IGR1cmluZyB0ZXJtaW5hbCBlbXVsYXRpb24g b3ZlciIsCi0iICA3LWJpdCBjb25uZWN0aW9ucy4gIE9GRiBieSBkZWZhdWx0LiIsCi0jZWxzZQot IlNFVCBURVJNSU5BTCBMT0NLSU5HLVNISUZUIHsgT0ZGLCBPTiB9IiwKLSIgIFRlbGxzIEtlcm1p dCB3aGV0aGVyIHRvIHVzZSBTaGlmdC1Jbi9TaGlmdC1PdXQgKEN0cmwtTyBhbmQgQ3RybC1OKSB0 byIsCi0iICBzd2l0Y2ggYmV0d2VlbiA3LWJpdCBhbmQgOC1iaXQgY2hhcmFjdGVycyBkdXJpbmcg Q09OTkVDVC4gIE9GRiBieSBkZWZhdWx0LiIsCi0jZW5kaWYgLyogT1MyICovCi0iICIsCi0KLSNp ZmRlZiBPUzIKLSJTRVQgVEVSTUlOQUwgTUFSR0lOLUJFTEwgeyBPTiBbY29sdW1uXSwgT0ZGIH0i LAotIiAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBtYXJnaW4tYmVsbCBpcyBhY3RpdmF0ZWQgYW5k IHdoYXQgY29sdW1uIGl0IHNob3VsZCIsCi0iICByaW5nIGF0LiAgT0ZGIGJ5IGRlZmF1bHQuIiwK LSIgIiwKLSNlbmRpZiAvKiBPUzIgKi8KLQotIlNFVCBURVJNSU5BTCBORVdMSU5FLU1PREUgeyBP RkYsIE9OIH0iLAotIiAgVGVsbHMgd2hldGhlciB0byBzZW5kIENSTEYgKENhcnJpYWdlIFJldHVy biBhbmQgTGluZSBGZWVkKSB3aGVuIHlvdSB0eXBlIiwKLSIgIENSIChwcmVzcyB0aGUgUmV0dXJu IG9yIEVudGVyIGtleSkgaW4gQ09OTkVDVCBtb2RlLiIsCi0iICIsCi0KLSNpZmRlZiBPUzIKLSJT RVQgVEVSTUlOQUwgT1VUUFVULVBBQ0lORyA8bWlsbGlzZWNvbmRzPiIsCi0iICBUZWxscyBob3cg bG9uZyB0byBwYXVzZSBiZXR3ZWVuIHNlbmRpbmcgZWFjaCBjaGFyYWN0ZXIgdG8gdGhlIGhvc3Qg ZHVyaW5nIiwKLSIgIENPTk5FQ1QgbW9kZS4gIE5vcm1hbGx5IG5vdCBuZWVkZWQgYnV0IHNvbWV0 aW1lcyByZXF1aXJlZCB0byB3b3JrIGFyb3VuZCIsCi0iICBUUkFOU01JU1NJT04gQkxPQ0tFRCBj b25kaXRpb25zIHdoZW4gcGFzdGluZyBpbnRvIHRoZSB0ZXJtaW5hbCB3aW5kb3cuIiwKLSIgIiwK LQotI2lmZGVmIFBDVEVSTQotIlNFVCBURVJNSU5BTCBQQ1RFUk0geyBPTiwgT0ZGIH0iLAotIiAg QWN0aXZhdGVzIG9yIGRlYWN0aXZhdGVzIHRoZSBQQ1RFUk0gdGVybWluYWwgZW11bGF0aW9uIGtl eWJvYXJkIG1vZGUuIiwKLSIgIFdoZW4gUENURVJNIGlzIE9OIGFsbCBrZXlzdHJva2VzIGluIHRo ZSB0ZXJtaW5hbCBzY3JlZW4gYXJlIHNlbnQgdG8gdGhlIiwKLSIgIGhvc3QgYXMgbWFrZS9icmVh ayAoZG93bi91cCkgY29kZXMgaW5zdGVhZCBvZiBhcyBjaGFyYWN0ZXJzIGZyb20gdGhlIiwKLSIg IFJFTU9URS1DSEFSQUNURVItU0VULCBhbmQgYWxsIGtleWJvYXJkIG1hcHBpbmdzLCBpbmNsdWRp bmcgS3ZlcmJzIGFuZCB0aGUiLAotIiAgZXNjYXBlIGNoYXJhY3RlciBhcmUgZGlzYWJsZWQuICBU byB0dXJuIG9mZiBQQ1RFUk0ga2V5Ym9hcmQgbW9kZSB3aGlsZSBpbiIsCi0iICBDT05ORUNUIG1v ZGUgcHJlc3MgQ29udHJvbC1DYXBzTG9jay4gIFBDVEVSTSBpcyBPRkYgYnkgZGVmYXVsdC4iLAot IiAiLAotI2VuZGlmIC8qIFBDVEVSTSAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgT1My Ci0iU0VUIFRFUk1JTkFMIFBSSU5UIHsgQVVUTywgQ09QWSwgT0ZGLCBVU0VSIH0iLAotIiAgQWxs b3dzIHNlbGVjdGl2ZSBjb250cm9sIG9mIHZhcmlvdXMgdHlwZXMgb2YgcHJpbnRpbmcgZnJvbSB0 aGUgVGVybWluYWwiLAotIiAgc2Vzc2lvbi4gIEFVVE8gcHJpbnRzIGEgbGluZSBvZiB0ZXh0IGZy b20gdGhlIHRlcm1pbmFsIHNjcmVlbiB3aGVuZXZlciIsCi0iICB0aGUgY3Vyc29yIGlzIG1vdmVk IG9mZiB0aGUgbGluZS4gIENPUFkgcHJpbnRzIGV2ZXJ5IGJ5dGUgcmVjZWl2ZWQgYXMiLAotIiAg aXQgaXMgcmVjZWl2ZWQgd2l0aG91dCBpbnRlcnByZXRhdGlvbi4gIFVTRVIgcHJpbnRzIGV2ZXJ5 IGJ5dGUgYWZ0ZXIiLAotIiAgaW50ZXJwcmV0YXRpb24gYnkgdGhlIHRlcm1pbmFsIGVtdWxhdG9y IHRyYW5zbGF0ZXMgY2hhcmFjdGVyLXNldHMgYW5kIiwKLSIgIGNvbnN0cnVjdCBlc2NhcGUgc2Vx dWVuY2VzLCAuLi4gIFRoZSBkZWZhdWx0IGlzIE9GRi4iLAotIiAiLAotI2Vsc2UKLSNpZmRlZiBY UFJJTlQKLSJTRVQgVEVSTUlOQUwgUFJJTlQgeyBPTiwgT0ZGIH0iLAotIiAgRW5hYmxlcyBhbmQg ZGlzYWJsZXMgaG9zdC1pbml0aWF0ZWQgdHJhbnNwYXJlbnQgcHJpbnRpbmcgaW4gQ09OTkVDVCBt b2RlLiIsCi0iICIsCi0jZW5kaWYgLyogWFBSSU5UICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNp ZmRlZiBPUzIKLSNpZm5kZWYgTk9DU0VUUwotIlNFVCBURVJNSU5BTCBSRU1PVEUtQ0hBUkFDVEVS LVNFVCA8cmVtb3RlLWNzPiBbIHsgRzAsRzEsRzIsRzMgfS4uLiBdIiwKLSIgIFNwZWNpZmllcyB0 aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IHRoZSByZW1vdGUgaG9zdCwgPHJlbW90ZS1jcz4uIiwK LSIgIFdoZW4gdGhlIGxvY2FsIGFuZCByZW1vdGUgY2hhcmFjdGVyIHNldHMgZGlmZmVyLCBLZXJt aXQgdHJhbnNsYXRlcyIsCi0iICBiZXR3ZWVuIHRoZW0gZHVyaW5nIENPTk5FQ1QuICBCeSBkZWZh dWx0LCB0aGUgcmVtb3RlIGNoYXJhY3RlciBzZXQgaXMiLAotIiAgTGF0aW4xIGFuZCB0aGUgbG9j YWwgb25lIGlzIHlvdXIgY3VycmVudCBjb2RlIHBhZ2UuICBPcHRpb25hbGx5LCB5b3UgY2FuIiwK LSIgIGFsc28gZGVzaWduYXRlIHRoZSBjaGFyYWN0ZXIgc2V0IHRvIHRoZSBHMC4uRzMgZ3JhcGhp YyB0YWJsZXMuIiwKLSIgIiwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jZW5kaWYgLyogT1MyICov Ci0KLSNpZmRlZiBPUzIKLSJTRVQgVEVSTUlOQUwgUk9MTC1NT0RFIHsgSU5TRVJULCBPVkVSV1JJ VEUsIEtFWVNUUk9LRVMgWyBvcHRpb24gXSB9IiwKLSIgIFRlbGxzIHdoZXRoZXIgbmV3IGRhdGEg d2hlbiByZWNlaXZlZCBmcm9tIHRoZSBob3N0IGlzIGVudGVyZWQgaW50byB0aGUiLAotIiAgc2Ny b2xsYmFjayBidWZmZXIgYXQgdGhlIGN1cnJlbnQgcm9sbGJhY2sgcG9zaXRpb24gKE9WRVJXUklU RSkgb3IgYXQgdGhlIiwKLSIgIGVuZCBvZiB0aGUgYnVmZmVyIChJTlNFUlQpLiAgVGhlIGRlZmF1 bHQgaXMgSU5TRVJULiAgVHlwaW5nIGlzIGFsbG93ZWQiLAotIiAgZHVyaW5nIHJvbGxiYWNrcyBp biBlaXRoZXIgbW9kZSwgYWNjb3JkaW5nIHRvIFNFVCBURVJNIFJPTEwgS0VZU1RST0tFUzoiLAot IiAgU0VORCAodGhlIGRlZmF1bHQpIG1lYW5zIHRvIHByb2Nlc3Mga2V5c3Ryb2tlcyBub3JtYWxs eTsgSUdOT1JFIG1lYW5zIHRvIiwKLSIgIGlnbm9yZSB0aGVtIHdoZW4gdGhlIHNjcmVlbiBpcyBz Y3JvbGxlZCBiYWNrOyBSRVNUT1JFLUFORC1TRU5EIGlzIGxpa2UiLAotIiAgU0VORCBidXQgcmVz dG9yZXMgdGhlIHNjcmVlbiB0byBpdHMgYWN0aXZlIHBvc2l0aW9uIGZpcnN0LiIsCi0iICIsCi0K LSJTRVQgVEVSTUlOQUwgU0NSRUVOLU1PREUgeyBOT1JNQUwsIFJFVkVSU0UgfSIsCi0iICBXaGVu IHNldCB0byBSRVZFUlNFIHRoZSBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycyBhcmUg c3dhcHBlZCBhcyIsCi0iICB3ZWxsIGFzIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgZm9yZWdyb3Vu ZCBhbmQgYmFja2dyb3VuZCBpbnRlbnNpdHkgYml0cy4iLAotIiAgVGhlIGRlZmF1bHQgaXMgTk9S TUFMLiIsCi0iICIsCi0KLSJTRVQgVEVSTUlOQUwgU0NSRUVOLU9QVElNSVpFIHsgT04sIE9GRiB9 IiwKLSIgIFdoZW4gc2V0IHRvIE9OLCB0aGUgZGVmYXVsdCwgS2VybWl0IG9ubHkgcGFpbnRzIHRo ZSBzY3JlZW4gd2l0aCBjaGFyYWN0ZXJzIiwKLSIgIHRoYXQgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRo ZSBsYXN0IHNjcmVlbiBwYWludC4gIFdoZW4gT0ZGLCB0aGUgc2NyZWVuIGlzIiwKLSIgIGNvbXBs ZXRlbHkgcmVwYWludGVkIGVhY2ggdGltZSB0aGVyZSBpcyBhIGNoYW5nZS4iLAotIiAiLAotCi0i U0VUIFRFUk1JTkFMIFNDUkVFTi1VUERBVEUgeyBGQVNULCBTTU9PVEggfSBbIDxtaWxsaXNlY29u ZHM+IF0iLAotIiAgQ2hvb3NlcyB0aGUgbWVjaGFuaXNtIHVzZWQgZm9yIHNjcmVlbiB1cGRhdGlu ZyBhbmQgdGhlIHVwZGF0ZSBmcmVxdWVuY3kuIiwKLSIgIERlZmF1bHRzIGFyZSBGQVNUIHNjcm9s bGluZyB3aXRoIHVwZGF0ZXMgZXZlcnkgMTAwIG1pbGxpc2Vjb25kcy4iLAotIiAiLAotCi0iU0VU IFRFUk1JTkFMIFNDUk9MTEJBQ0sgPGxpbmVzPiIsCi0iICBTZXRzIHNpemUgb2YgQ09OTkVDVCB2 aXJ0dWFsIHNjcmVlbiBidWZmZXIuICA8bGluZXM+IGluY2x1ZGVzIHRoZSBhY3RpdmUiLAotIiAg dGVybWluYWwgc2NyZWVuLiAgVGhlIG1pbmltdW0gaXMgMjU2LiAgVGhlIG1heGltdW0gaXMgMiBt aWxsaW9uLiAgVGhlIiwKLSIgIGRlZmF1bHQgaXMgMjAwMC4iLAotIiAiLAotCi0iU0VUIFRFUk1J TkFMIFNFTkQtREFUQSB7IE9OLCBPRkYgfSIsCi0iICBEZXRlcm1pbmVzIHdoZXRoZXIgQVNDSUkg ZW11bGF0aW9ucyBzdWNoIGFzIFdZU0UgMzAsNTAsNjAgb3IgVFZJIDkxMCssOTI1LCIsCi0iICA5 NTAgbWF5IHNlbmQgdGhlaXIgc2NyZWVuIGNvbnRlbnRzIHRvIHRoZSBob3N0IHVwb24gcmVxdWVz dC4gIEFsbG93aW5nIHRoZSIsCi0iICBzY3JlZW4gdG8gYmUgcmVhZCBieSB0aGUgaG9zdCBpcyBh IHNpZ25pZmljYW50IHNlY3VyaXR5IHJpc2suICBUaGUgZGVmYXVsdCIsCi0iICBpcyBPRkYgYW5k IHNob3VsZCBvbmx5IGJlIGNoYW5nZWQgYWZ0ZXIgYSBzZWN1cml0eSBldmFsdWF0aW9uIG9mIGhv c3QiLAotIiAgZW52aXJvbm1lbnQuIiwKLSIgIiwKLQotIlNFVCBURVJNSU5BTCBTRU5ELUVORC1P Ri1CTE9DSyB7IENSTEZfRVRYLCBVU19DUiB9IiwKLSIgIERldGVybWluZXMgd2hpY2ggc2V0IG9m IGNoYXJhY3RlcnMgc2hvdWxkIGJlIHVzZWQgYXMgZW5kIG9mIGxpbmUgYW5kIGVuZCIsCi0iICBv ZiB0cmFuc21pc3Npb24gaW5kaWNhdG9ycyB3aGVuIHNlbmRpbmcgc2NyZWVuIGRhdGEgdG8gdGhl IGhvc3QiLAotIiAiLAotCi0iU0VUIFRFUk1JTkFMIFNHUi1DT0xPUlMgeyBPTiwgT0ZGIH0iLAot IiAgT04gKGRlZmF1bHQpIG1lYW5zIGFsbG93IGhvc3QgY29udHJvbCBvZiBjb2xvcnM7IE9GRiBt ZWFucyBpZ25vcmUgaG9zdCIsCi0iICBlc2NhcGUgc2VxdWVuY2VzIHRvIHNldCBjb2xvci4iLAot IiAiLAotCi0iU0VUIFRFUk1JTkFMIFNOSS1DSC5DT0RFIHsgT04sIE9GRiB9IiwKLSIgIFRoaXMg Y29tbWFuZCBjb250cm9scyB0aGUgc3RhdGUgb2YgdGhlIENILkNPREUga2V5LiAgSXQgaXMgdGhl IGVxdWl2YWxlbnQiLAotIiAgdG8gdGhlIFNOSV9DSF9DT0RFIEtleWJvYXJkIHZlcmIuICBUaGUg U05JIHRlcm1pbmFsIHVzZXMgQ0guQ09ERSB0byIsCi0iICBlYXNpbHkgc3dpdGNoIGJldHdlZW4g dGhlIE5hdGlvbmFsIExhbmd1YWdlIGNoYXJhY3RlciBzZXQgYW5kIFUuUy4gQVNDSUkuIiwKLSIg IFRoZSBkZWZhdWx0IGlzIE9OIHdoaWNoIG1lYW5zIHRvIGRpc3BsYXkgY2hhcmFjdGVycyBhcyBV LlMuIEFTQ0lJLiAgV2hlbiIsCi0iICBPRkYgdGhlIGxhbnVhZ2Ugc3BlY2lmaWVkIGJ5IFNFVCBU RVJNSU5BTCBTTkktTEFOVUFHRSBpcyB1c2VkIHRvIGRpc3BsYXkiLAotIiAgY2hhcmFjdGVycyB3 aGVuIDctYml0IGNoYXJhY3RlciBzZXRzIGFyZSBpbiB1c2UuIiwKLSIgIiwKLSJTRVQgVEVSTUlO QUwgU05JLUZJUk1XQVJFLVZFUlNJT05TIDxrYmQtdmVyc2lvbj4gPHRlcm1pbmFsLXZlcnNpb24+ IiwKLSIgIFNwZWNpZmllcyB0aGUgRmlybXdhcmUgVmVyc2lvbiBudW1iZXIgdGhhdCBzaG91bGQg YmUgcmVwb3J0ZWQgdG8gdGhlIGhvc3QiLAotIiAgd2hlbiB0aGUgdGVybWluYWwgaXMgcXVlcmll ZC4gIFRoZSBkZWZhdWx0IGlzIDkyMDAzMSBmb3IgdGhlIGtleWJvYXJkIiwKLSIgIGFuZCA4MzA4 NTEgZm9yIHRoZSB0ZXJtaW5hbC4iLAotIiAiLAotIlNFVCBURVJNSU5BTCBTTkktTEFOR1VBR0Ug PG5hdGlvbmFsLWxhbmd1YWdlPiIsCi0iICBBbiBhbGlhcyBmb3IgU0VUIFRFUk1JTkFMIFZULUxB TlVBR0UsIHRoaXMgY29tbWFuZCBzcGVjaWZpZXMgdGhlIG5hdGlvbmFsIiwKLSIgIGxhbmd1YWdl IGNoYXJhY3Rlci1zZXQgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBOUkMgbW9kZSBpcyBh Y3RpdmF0ZWQiLAotIiAgZm9yIFZUIGVtdWxhdGlvbnMgb3Igd2hlbiBDSC5DT0RFIGlzIE9GRiBm b3IgU05JIGVtdWxhdGlvbnMuICBUaGUgZGVmYXVsdCIsCi0iICBsYW5ndWFnZSBmb3IgU0VUIFRF Uk1JTkFMIFRZUEUgU05JLTk3ODAxIGlzIFwiR2VybWFuXCIuIiwKLSIgIiwKLSJTRVQgVEVSTUlO QUwgU05JLVBBR0VNT0RFIHsgT04sIE9GRiB9IiwKLSIgIERldGVybWluZXMgd2hldGhlciBvciBu b3QgcGFnZSBtb2RlIGlzIGFjdGl2ZS4gIE9GRiBieSBkZWZhdWx0LiIsCi0iICIsCi0iU0VUIFRF Uk1JTkFMIFNOSS1TQ1JPTExNT0RFIHsgT04sIE9GRiB9IiwKLSIgIERldGVybWluZXMgd2hldGhl ciBvciBub3Qgc2Nyb2xsIG1vZGUgaXMgYWN0aXZlLiAgT0ZGIGJ5IGRlZmF1bHQuIiwKLSIgIiwK LSJTRVQgVEVSTUlOQUwgU1RBVFVTTElORSB7IE9OLCBPRkYgfSIsCi0iICBPTiAoZGVmYXVsdCkg ZW5hYmxlcyB0aGUgS2VybWl0IHN0YXR1cyBsaW5lIGluIHRoZSB0ZXJtaW5hbCBzY3JlZW4uIiwK LSIgIE9GRiByZW1vdmVzIGl0LCBtYWtpbmcgdGhlIGxpbmUgYXZhaWxhYmxlIGZvciB1c2UgYnkg dGhlIGhvc3QuIiwKLSIgIiwKLQotIlNFVCBURVJNSU5BTCBUUkFOU01JVC1USU1FT1VUIDxzZWNv bmRzPiIsCi0iICBTcGVjaWZpZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgSy05NSB3YWl0 cyBiZWZvcmUgcmV0dXJuaW5nIHRvIHRoZSIsCi0iICBwcm9tcHQgaWYgeW91ciBrZXlzdHJva2Vz IGNhbid0IGJlIHRyYW5zbWl0dGVkIGZvciBzb21lIHJlYXNvbiwgc3VjaCBhcyBhIiwKLSIgIGZs b3ctY29udHJvbCBkZWFkbG9jay4iLAotIiAiLAotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYg Q0tfVFJJR0dFUgotIlNFVCBURVJNSU5BTCBUUklHR0VSIDxzdHJpbmc+IiwKLSIgIFNwZWNpZmll cyBhIHN0cmluZyB0aGF0LCB3aGVuIGRldGVjdGVkIGR1cmluZyBhbnkgc3Vic2VxdWVudCBDT05O RUNUIiwKLSIgIHNlc3Npb24sIGlzIHRvIGNhdXNlIGF1dG9tYXRpYyByZXR1cm4gdG8gY29tbWFu ZCBtb2RlLiAgR2l2ZSB0aGlzIGNvbW1hbmQiLAotIiAgd2l0aG91dCBhIHN0cmluZyB0byBjYW5j ZWwgdGhlIGN1cnJlbnQgdHJpZ2dlci4gIFNlZSBIRUxQIENPTk5FQ1QgZm9yIiwKLSIgIGFkZGl0 aW9uYWwgaW5mb3JtYXRpb24uIiwKLSIgIiwKLSNlbmRpZiAvKiBDS19UUklHR0VSICovCi0KLSNp ZmRlZiBPUzIKLSJTRVQgVEVSTUlOQUwgVVJMLUhJR0hMSUdIVCB7IE9OIDxhdHRyaWJ1dGU+LCBP RkYgfSIsCi0iICBTcGVjaWZpZXMgd2hldGhlciBLLTk1IHNob3VsZCBoaWdobGlnaHQgVVJMcyBh bmQgd2hpY2ggc2NyZWVuIGF0dHJpYnV0ZSIsCi0iICBzaG91bGQgYmUgdXNlZC4gIFRoZSBzY3Jl ZW4gYXR0cmlidXRlcyBjYW4gYmUgb25lIG9mIE5PUk1BTCwgQkxJTkssIEJPTEQsIiwKLSIgIERJ TSwgSU5WSVNJQkxFLCBSRVZFUlNFLCBvciBVTkRFUkxJTkUuICBUaGUgZGVmYXVsdCBpcyBPTiB1 c2luZyB0aGUiLAotIiAgQk9MRCBzY3JlZW4gYXR0cmlidXRlLiIsCi0iICIsCi0iU0VUIFRFUk1J TkFMIFZJREVPLUNIQU5HRSB7IERJU0FCTEVELCBFTkFCTEVEIH0iLAotIiAgU3BlY2lmaWVzIHdo ZXRoZXIgSy05NSBzaG91bGQgY2hhbmdlIHZpZGVvIG1vZGVzIGF1dG9tYXRpY2FsbHkgaW4gcmVz cG9uc2UiLAotI2lmZGVmIE5UCi0iICB0byBlc2NhcGUgc2VxdWVuY2VzIGZyb20gdGhlIG90aGVy IGNvbXB1dGVyLiAgRU5BQkxFRCBieSBkZWZhdWx0IChleGNlcHQiLAotIiAgb24gV2luZG93cyA5 NSkuIiwKLSNlbHNlIC8qIE5UICovCi0iICB0byBlc2NhcGUgc2VxdWVuY2VzIGZyb20gdGhlIG90 aGVyIGNvbXB1dGVyLiAgRU5BQkxFRCBieSBkZWZhdWx0LiIsCi0jZW5kaWYgLyogTlQgKi8KLSIg IiwKLQotIlNFVCBURVJNSU5BTCBWVC1MQU5HVUFHRSA8bGFuZ3VhZ2U+IiwKLSIgIFNwZWNpZmll cyB0aGUgTmF0aW9uYWwgUmVwbGFjZW1lbnQgQ2hhcmFjdGVyIFNldCAoTlJDKSB0byBiZSB1c2Vk IHdoZW4iLAotIiAgTlJDIG1vZGUgaXMgYWN0aXZhdGVkLiAgVGhlIGRlZmF1bHQgaXMgXCJOb3J0 aCBBbWVyaWNhblwiLiIsCi0iICIsCi0iU0VUIFRFUk1JTkFMIFZULU5SQy1NT0RFIHsgT04sIE9G RiB9IiwKLSIgIE9GRiAoZGVmYXVsdCkgY2hvb3NlcyBWVCBtdWx0aW5hdGlvbmFsIENoYXJhY3Rl ciBTZXQgbW9kZS4gIE9GRiBjaG9vc2VzIiwKLSIgIFZUIE5hdGlvbmFsIFJlcGxhY2VtZW50IENo YXJhY3Rlci1zZXQgbW9kZS4gIFRoZSBOUkMgaXMgc2VsZWN0ZWQgd2l0aCIsCi0iICBTRVQgVEVS TUlOQUwgVlQtTEFOR1VBR0UiLAotIiAiLAotCi0jaWZkZWYgTlQKLSJTRVQgVEVSTUlOQUwgV0lE VEggPGNvbHM+IiwKLSIgIFRlbGxzIHRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgdGVybWlu YWwgc2NyZWVuLiIsCi0iICIsCi0iICBUaGUgZGVmYXVsdCBpcyA4MC4gIFlvdSBjYW4gYWxzbyB1 c2UgMTMyLiAgT3RoZXIgd2lkdGhzIGNhbiBiZSBjaG9zZW4gYnV0IiwKLSIgIGFyZSB1c3VhbGx5 IG5vdCBzdXBwb3J0ZWQgYnkgaG9zdCBzb2Z0d2FyZS4iLAotIiAiLAotI2Vsc2UKLSJTRVQgVEVS TUlOQUwgV0lEVEggPGNvbHM+IiwKLSIgIFRlbGxzIGhvdyBtYW55IGNvbHVtbnMgZGVmaW5lIHRo ZSB0ZXJtaW5hbCBzaXplLiIsCi0iICIsCi0iRGVmYXVsdCBpcyA4MC4gIEluIFdpbmRvd2VkIE9T LzIgMi54IHNlc3Npb25zLCB0aGlzIHZhbHVlIG1heSBub3QgYmUgY2hhbmdlZCIsCi0iSW4gV2lu ZG93ZWQgT1MvMiBXQVJQIDMueCBzZXNzaW9ucywgdGhpcyB2YWx1ZSBtYXkgcmFuZ2UgZnJvbSAy MCB0byAyNTUuIiwKLSJJbiBGdWxsIHNjcmVlbiBzZXNzaW9ucywgdmFsdWVzIG9mIDQwLCA4MCwg YW5kIDEzMiBhcmUgdmFsaWQuICBOb3QgYWxsIiwKLSJjb21iaW5hdGlvbnMgb2YgaGVpZ2h0IGFu ZCB3aWR0aCBhcmUgc3VwcG9ydGVkIG9uIGFsbCBhZGFwdGVycy4iLAotIiAiLAotI2VuZGlmIC8q IE5UICovCi0iU0VUIFRFUk1JTkFMIFdSQVAgeyBPRkYsIE9OIH0iLAotIiAgVGVsbHMgd2hldGhl ciB0aGUgdGVybWluYWwgZW11bGF0b3Igc2hvdWxkIGF1dG9tYXRpY2FsbHkgd3JhcCBsb25nIGxp bmVzIiwKLSIgIG9uIHlvdXIgc2NyZWVuLiIsCi0iICIsCi0jZWxzZQotCi0iU0VUIFRFUk1JTkFM IFdJRFRIIDxudW1iZXI+IiwKLSIgXAotVGVsbHMgS2VybWl0IGhvdyBtYW55IGNvbHVtbnMgKGNo YXJhY3RlcnMpIGFyZSBvbiB5b3VyIENPTk5FQ1QtbW9kZSBzY3JlZW4uIiwKLSIgIiwKLSNlbmRp ZiAvKiBPUzIgKi8KLSJUeXBlIFNIT1cgVEVSTUlOQUwgdG8gc2VlIGN1cnJlbnQgdGVybWluYWwg c2V0dGluZ3MuIiwKLSIiIH07Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZkZWYgTkVUQ09O Tgotc3RhdGljIGNoYXIgKmh4eWhvc3RbXSA9IHsKLSJTRVQgSE9TVCBbIHN3aXRjaGVzIF0gaG9z dG5hbWUtb3ItYWRkcmVzcyBbIHNlcnZpY2UgXSBbIHByb3RvY29sLXN3aXRjaCBdIiwKLSIgIEVz dGFibGlzaGVzIGEgY29ubmVjdGlvbiB0byB0aGUgc3BlY2lmaWVkIG5ldHdvcmsgaG9zdCBvbiB0 aGUgY3VycmVudGx5IiwKLSIgIHNlbGVjdGVkIG5ldHdvcmsgdHlwZS4gIEZvciBUQ1AvSVAgY29u bmVjdGlvbnMsIHRoZSBkZWZhdWx0IHNlcnZpY2UgaXMiLAotIiAgVEVMTkVUOyBzcGVjaWZ5IGEg ZGlmZmVyZW50IFRDUCBwb3J0IG51bWJlciBvciBzZXJ2aWNlIG5hbWUgdG8gY2hvb3NlIGEiLAot IiAgZGlmZmVyZW50IHNlcnZpY2UuICBUaGUgZmlyc3Qgc2V0IG9mIHN3aXRjaGVzIGNhbiBiZToi LAotIiAiLAotIiAvTkVUV09SSy1UWVBFOm5hbWUiLAotIiAgIE1ha2VzIHRoZSBjb25uZWN0aW9u IG9uIHRoZSBnaXZlbiB0eXBlIG9mIG5ldHdvcmsuICBFcXVpdmFsZW50IHRvIFNFVCIsCi0iICAg TkVUV09SSyBUWVBFIG5hbWUgcHJpb3IgdG8gU0VUIEhPU1QsIGV4Y2VwdCB0aGF0IHRoZSBzZWxl Y3RlZCBuZXR3b3JrIiwKLSIgICB0eXBlIGlzIHVzZWQgb25seSBmb3IgdGhpcyBjb25uZWN0aW9u LiAgVHlwZSBcInNldCBob3N0IC9uZXQ6P1wiIHRvIHNlZSIsCi0jaWZkZWYgTkVUQ01ECi0iICAg YSBsaXN0LiAgL05FVFdPUkstVFlQRTpDT01NQU5EIG1lYW5zIHRvIG1ha2UgdGhlIGNvbm5lY3Rp b24gdGhyb3VnaCB0aGUiLAotIiAgIGdpdmVuIHN5c3RlbSBjb21tYW5kLCBzdWNoIGFzIFwicmxv Z2luXCIgb3IgXCJjdVwiLiIsCi0jZWxzZQotIiAgIGEgbGlzdC4iLAotI2VuZGlmIC8qIE5FVENN RCAqLwotIiAiLAotIiAvQ09OTkVDVCIsCi0iICAgXAotRW50ZXIgQ09OTkVDVCAodGVybWluYWwp IG1vZGUgYXV0b21hdGljYWxseSBpZiB0aGUgY29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsLiIsCi0i ICIsCi0iIC9TRVJWRVIiLAotIiAgIEVudGVyIHNlcnZlciBtb2RlIGF1dG9tYXRpY2FsbHkgaWYg dGhlIGNvbm5lY3Rpb24gaXMgc3VjY2Vzc2Z1bC4iLAotIiAiLAotIiAvVVNFUklEOls8bmFtZT5d IiwKLSIgICBUaGlzIHN3aXRjaCBpcyBlcXVpdmFsZW50IHRvIFNFVCBMT0dJTiBVU0VSSUQgPG5h bWU+IG9yIFNFVCBURUxORVQiLAotIiAgIEVOVklST05NRU5UIFVTRVIgPG5hbWU+LiAgSWYgYSBz dHJpbmcgaXMgZ2l2ZW4sIGl0IHNlbnQgdG8gaG9zdCBkdXJpbmciLAotIiAgIFRlbG5ldCBuZWdv dGlhdGlvbnM7IGlmIHRoaXMgc3dpdGNoIGlzIGdpdmVuIGJ1dCB0aGUgc3RyaW5nIGlzIG9taXR0 ZWQsIiwKLSIgICBubyB1c2VyIElEIGlzIHNlbnQgdG8gdGhlIGhvc3QuICBJZiB0aGlzIHN3aXRj aCBpcyBub3QgZ2l2ZW4sIHlvdXIiLAotIiAgIGN1cnJlbnQgVVNFUklEIHZhbHVlLCBcXHYodXNl cmlkKSwgaXMgc2VudC4gIFdoZW4gYSB1c2VyaWQgaXMgc2VudCB0byB0aGUiLAotIiAgIGhvc3Qg aXQgaXMgYSByZXF1ZXN0IHRvIGxvZ2luIGFzIHRoZSBzcGVjaWZpZWQgdXNlci4iLAotIiAiLAot I2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0iIC9QQVNTV09SRDpbPHN0cmluZz5dIiwKLSIgICBU aGlzIHN3aXRjaCBpcyBlcXVpdmFsZW50IHRvIFNFVCBMT0dJTiBQQVNTV09SRC4gIElmIGEgc3Ry aW5nIGlzIGdpdmVuLCIsCi0iICAgaXQgaXMgdHJlYXRlZCBhcyB0aGUgcGFzc3dvcmQgdG8gYmUg dXNlZCAoaWYgcmVxdWlyZWQpIGJ5IGFueSBUZWxuZXQiLAotIiAgIEF1dGhlbnRpY2F0aW9uIHBy b3RvY29sIChLZXJiZXJvcyBUaWNrZXQgcmV0cmlldmFsLCBTZWN1cmUgUmVtb3RlIiwKLSIgICBQ YXNzd29yZCwgb3IgWC41MDkgY2VydGlmaWNhdGUgcHJpdmF0ZSBrZXkgZGVjcnlwdGlvbi4pICBJ ZiBubyBwYXNzd29yZCIsCi0iICAgc3dpdGNoIGlzIHNwZWNpZmllZCBhIHByb21wdCBpcyBpc3N1 ZWQgdG8gcmVxdWVzdCB0aGUgcGFzc3dvcmQgaWYgb25lIiwKLSIgICBpcyByZXF1aXJlZCBmb3Ig dGhlIG5lZ290aWF0ZWQgYXV0aGVudGljYXRpb24gbWV0aG9kLiIsCi0iICIsCi0jZW5kaWYgLyog Q0tfQVVUSEVOVElDQVRJT04gKi8KLSJUaGUgcHJvdG9jb2wtc3dpdGNoZXMgY2FuIGJlOiIsCi0i ICIsCi0iIC9OTy1URUxORVQtSU5JVCIsCi0iICAgRG8gbm90IHNlbmQgaW5pdGlhbCBUZWxuZXQg bmVnb3RpYXRpb25zIGV2ZW4gaWYgdGhpcyBpcyBhIFRlbG5ldCBwb3J0LiIsCi0iICIsCi0iIC9S QVctU09DS0VUIiwKLSIgICBUaGlzIGlzIGEgY29ubmVjdGlvbiB0byBhIHJhdyBUQ1Agc29ja2V0 LiIsCi0iICIsCi0jaWZkZWYgUkxPR0NPREUKLSIgL1JMT0dJTiIsCi0iICAgVXNlIFJsb2dpbiBw cm90b2NvbCBldmVuIGlmIHRoaXMgaXMgbm90IGFuIFJsb2dpbiBwb3J0LiIsCi0iICIsCi0jZW5k aWYgLyogUkxPR0NPREUgKi8KLSIgL1RFTE5FVCIsCi0iICAgU2VuZCBpbml0aWFsIFRlbG5ldCBu ZWdvdGlhdGlvbnMgZXZlbiBpZiB0aGlzIGlzIG5vdCBhIFRlbG5ldCBwb3J0LiIsCi0iICIsCi0j aWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBSTE9HQ09ERQotI2lmZGVmIEtSQjQKLSIgL0s0TE9H SU4iLAotIiAgIFVzZSBLZXJiZXJvcyBJViBrbG9naW4gcHJvdG9jb2wgZXZlbiBpZiB0aGlzIGlz IG5vdCBhIGtsb2dpbiBwb3J0LiIsCi0iICIsCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotIiAvRUs0 TE9HSU4iLAotIiAgIFVzZSBLZXJiZXJvcyBJViBFbmNyeXB0ZWQgbG9naW4gcHJvdG9jb2wgZXZl biBpZiB0aGlzIGlzIG5vdCBhbiBla2xvZ2luIiwKLSIgICBwb3J0LiIsCi0iICIsCi0jZW5kaWYg LyogQ0tfRU5DUllQVElPTiAqLwotI2VuZGlmIC8qIEtSQjQgKi8KLSNpZmRlZiBLUkI1Ci0iIC9L NUxPR0lOIiwKLSIgICBVc2UgS2VyYmVyb3MgViBrbG9naW4gcHJvdG9jb2wgZXZlbiBpZiB0aGlz IGlzIG5vdCBhIGtsb2dpbiBwb3J0LiIsCi0iICIsCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotIiAv RUs1TE9HSU4iLAotIiAgIFVzZSBLZXJiZXJvcyBWIEVuY3J5cHRlZCBsb2dpbiBwcm90b2NvbCBl dmVuIGlmIHRoaXMgaXMgbm90IGFuIGVrbG9naW4iLAotIiAgIHBvcnQuIiwKLSIgIiwKLSNlbmRp ZiAvKiBDS19FTkNSWVBUSU9OICovCi0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIFJMT0dD T0RFICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNpZmRlZiBDS19TU0wKLSIgL1NTTCIs Ci0iICAgUGVyZm9ybSBTU0wgbmVnb3RpYXRpb25zLiIsCi0iICIsCi0iIC9TU0wtVEVMTkVUIiwK LSIgICBQZXJmb3JtIFNTTCBuZWdvdGlhdGlvbnMgYW5kIGlmIHN1Y2Nlc3NmdWwgc3RhcnQgVGVs bmV0IG5lZ290aWF0aW9ucy4iLAotIiAiLAotIiAvVExTIiwKLSIgICBQZXJmb3JtIFRMUyBuZWdv dGlhdGlvbnMuIiwKLSIgIiwKLSIgL1RMUy1URUxORVQiLAotIiAgIFBlcmZvcm0gVExTIG5lZ290 aWF0aW9ucyBhbmQgaWYgc3VjY2Vzc2Z1bCBzdGFydCBUZWxuZXQgbmVnb3RpYXRpb25zLiIsCi0i ICIsCi0jZW5kaWYgLyogQ0tfU1NMICovCi0iRXhhbXBsZXM6IiwKLSIgIFNFVCBIT1NUIGtlcm1p dC5jb2x1bWJpYS5lZHUiLAotIiAgU0VUIEhPU1QgL0NPTk5FQ1Qga2VybWl0LmNvbHVtYmlhLmVk dSIsCi0iICBTRVQgSE9TVCAqIDE2NDkiLAotIiAgU0VUIEhPU1QgL1NFUlZFUiAqIDE2NDkiLAot IiAgU0VUIEhPU1QgMTI4LjU5LjM5LjIiLAotIiAgU0VUIEhPU1QgbWFkbGFiLnNwcmwudW1pY2gu ZWR1IDMwMDAiLAotIiAgU0VUIEhPU1QgeHl6Y29ycC5jb20gMjAwMCAvUkFXLVNPQ0tFVCIsCi0j aWZkZWYgU1NIQlVJTFRJTgotIiAgU0VUIEhPU1QgL05FVDpTU0gga2VybWl0LmNvbHVtYmlhLmVk dSAveDExLWZvcndhcmRpbmc6b24iLCAKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZkZWYg TkVUQ01ECi0iICBTRVQgSE9TVCAvQ09OTkVDVCAvQ09NTUFORCBybG9naW4geHl6Y29ycC5jb20i LAotI2VuZGlmIC8qIE5FVENNRCAqLwotIiAiLAotI2lmZGVmIFNVUEVSTEFUCi0iTm90ZXM6IiwK LSIgIiwKLSIgLiBUaGUgVEVMTkVUIGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0byBTRVQgTkVUV09S SyBUWVBFIFRDUC9JUCwiLAotIiAgIFNFVCBIT1NUIG5hbWUgWyBwb3J0IF0gL1RFTE5FVCwgSUYg U1VDQ0VTUyBDT05ORUNUIiwKLSIgIiwKLSIgLiBGb3IgU1VQRVJMQVQgY29ubmVjdGlvbnMsIHRo ZSBob3N0bmFtZS1vci1hZGRyZXNzIG1heSBiZSBlaXRoZXIgYSBzZXJ2aWNlIiwKLSIgICBuYW1l LCBvciBhIG5vZGUvcG9ydCBjb21iaW5hdGlvbiwgYXMgcmVxdWlyZWQgYnkgeW91ciBMQVQgaG9z dC4iLAotI2Vsc2UKLSJUaGUgVEVMTkVUIGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0byBTRVQgTkVU V09SSyBUWVBFIFRDUC9JUCwiLAotIlNFVCBIT1NUIG5hbWUgWyBwb3J0IF0gL1RFTE5FVCwgSUYg U1VDQ0VTUyBDT05ORUNUIiwKLSNlbmRpZiAvKiBTVVBFUkxBVCAqLwotIiAiLAotIkFsc28gc2Vl IFNFVCBORVRXT1JLLCBURUxORVQsIFNFVCBURUxORVQuIiwKLSIiIH07Ci0KLXN0YXRpYyBjaGFy ICpobXh5YXV0aFtdID0gewotIlN5bmF0eDogU0VUIEFVVEhFTlRJQ0FUSU9OIDxhdXRoX3R5cGU+ IDxwYXJhbWV0ZXI+IDx2YWx1ZT4iLAotIiAgU2V0cyBkZWZhdWx0cyBmb3IgdGhlIEFVVEhFTlRJ Q0FURSBjb21tYW5kOiIsCi0iICIsCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSJTRVQgQVVUSEVOVElD QVRJT04gS0VSQkVST1M1IEFERFJFU1NFUyB7bGlzdCBvZiBpcC1hZGRyZXNzZXN9IiwKLSIgIFNw ZWNpZmllcyBhIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIHRoYXQgc2hvdWxkIGJlIHBsYWNlZCBpbiB0 aGUgVGlja2V0IiwKLSIgIEdldHRpbmcgVGlja2V0IGluIGFkZGl0aW9uIHRvIHRoZSBsb2NhbCBt YWNoaW5lIGFkZHJlc3Nlcy4iLAotIiAiLAotIlNFVCBBVVRIRU5USUNBVElPTiB7IEtFUkJFUk9T NCwgS0VSQkVST1M1IH0gQVVUT0RFU1RST1kiLAotIiAgeyBPTi1DTE9TRSwgT04tRVhJVCwgTkVW RVIgfSIsCi0iICBXaGVuIE9OLCBLZXJtaXQgd2lsbCBkZXN0cm95IGFsbCBjcmVkZW50aWFscyBp biB0aGUgZGVmYXVsdCIsCi0iICBjcmVkZW50aWFscyBjYWNoZSB1cG9uIEtlcm1pdCB0ZXJtaW5h dGlvbi4gIERlZmF1bHQgaXMgTkVWRVIuIiwKLSIgIiwKLSJTRVQgQVVUSEVOVElDQVRJT04geyBL RVJCRVJPUzQsIEtFUkJFUk9TNSB9IEFVVE9HRVQgeyBPTiwgT0ZGIH0iLAotIiAgV2hlbiBPTiwg aWYgdGhlIGhvc3Qgb2ZmZXJzIEtlcmJlcm9zIDQgb3IgS2VyYmVyb3MgNSBhdXRoZW50aWNhdGlv biIsCi0iICBhbmQgS2VybWl0IGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoYXQgYXV0aGVudGljYXRp b24gbWV0aG9kIGFuZCB0aGVyZSIsCi0iICBpcyBubyBUR1QsIEtlcm1pdCB3aWxsIGF1dG9tYXRp Y2FsbHkgYXR0ZW1wdCB0byByZXRyaWV2ZSBvbmUgYnkiLAotIiAgcHJvbXB0aW5nIGZvciB0aGUg cGFzc3dvcmQgKGFuZCBwcmluY2lwYWwgaWYgbmVlZGVkLikgIERlZmF1bHQgaXMgT04uIiwKLSIg IiwKLSJTRVQgQVVUSEVOVElDQVRJT04gS0VSQkVST1M1IENSRURFTlRJQUxTLUNBQ0hFIDxmaWxl bmFtZT4iLAotIiAgQWxsb3dzIGFuIGFsdGVybmF0aXZlIGNyZWRlbnRpYWxzIGNhY2hlIHRvIGJl IHNwZWNpZmllZC4gIFRoaXMgaXMgdXNlZnVsIiwKLSIgIHdoZW4geW91IG5lZWQgdG8gbWFpbnRh aW4gdHdvIG9yIG1vcmUgc2V0cyBvZiBjcmVkZW50aWFscyBmb3IgZGlmZmVyZW50IiwKLSIgIHJl YWxtcyBvciByb2xlcy4gIFRoZSBkZWZhdWx0IGlzIHNwZWNpZmllZCBieSB0aGUgZW52aXJvbm1l bnQgdmFyaWFibGUiLAotIiAgS1JCNUNDTkFNRSBvciBhcyByZXBvcnRlZCBieSB0aGUgS2VyYmVy b3MgNSBsaWJyYXJ5LiIsCi0iICIsCi0iU0VUIEFVVEhFTlRJQ0FUSU9OIEtFUkJFUk9TNSBGT1JX QVJEQUJMRSB7IE9OLCBPRkYgfSIsCi0iICBXaGVuIE9OLCBzcGVjaWZpZXMgdGhhdCBLZXJiZXJv cyA1IGNyZWRlbnRpYWxzIHNob3VsZCBiZSBmb3J3YXJkYWJsZSB0byIsCi0iICB0aGUgaG9zdC4g IElmIFNFVCBURUxORVQgQVVUSEVOVElDQVRJT04gRk9SV0FSRElORyBpcyBPTiwgZm9yd2FyZGFi bGUiLAotIiAgY3JlZGVudGlhbHMgYXJlIHNlbnQgdG8gdGhlIGhvc3QuICBUaGUgZGVmYXVsdCBp cyBPRkYuIiwKLSIgIiwKLSJTRVQgQVVUSEVOVElDQVRJT04gS0VSQkVST1M1IEdFVC1LNC1UR1Qg eyBPTiwgT0ZGIH0iLAotIiAgV2hlbiBPTiwgc3BlY2lmaWVzIHRoYXQgS2VyYmVyb3MgNCBjcmVk ZW50aWFscyBzaG91bGQgYmUgcmVxdWVzdGVkIGVhY2giLAotIiAgdGltZSBLZXJiZXJvcyA1IGNy ZWRlbnRpYWxzIGFyZSByZXF1ZXN0ZWQgd2l0aCBBVVRIIEtFUkJFUk9TNSBJTklULiIsCi0iICBE ZWZhdWx0IGlzIE9GRi4iLAotIiAiLAotIlNFVCBBVVRIRU5USUNBVElPTiBLRVJCRVJPUzQgSU5T VEFOQ0UgPGluc3RhbmNlPiIsCi0iICBBbGxvd3MgYSBLZXJiZXJvcyA0IGluc3RhbmNlIHRvIGJl IHNwZWNpZmllZCBhcyBhIGRlZmF1bHQgKGlmIG5lZWRlZCkuIiwKLSIgIiwKLSJTRVQgQVVUSEVO VElDQVRJT04geyBLRVJCRVJPUzQsIEtFUkJFUk9TNSB9IEtFWVRBQiA8ZmlsZW5hbWU+IiwKLSIg IFNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIGtleXRhYiBmaWxlIHVzZWQgdG8gYXV0aGVu dGljYXRlIGluY29taW5nIiwKLSIgIGNvbm5lY3Rpb25zLiAgVGhlIGRlZmF1bHQgaXMgbm9uZSwg d2hpY2ggbWVhbnMgdG8gdXNlIHRoZSBkZWZhdWx0IHZhbHVlIiwKLSIgIGNvbmZpZ3VyZWQgaW4g dGhlIEtlcmJlcm9zIGluc3RhbGxhdGlvbi4iLAotIiAiLAotIlNFVCBBVVRIRU5USUNBVElPTiB7 IEtFUkJFUk9TNCwgS0VSQkVST1M1IH0gTElGRVRJTUUgPG1pbnV0ZXM+IiwKLSIgIFNwZWNpZmll cyB0aGUgbGlmZXRpbWUgb2YgdGhlIFRHVHMgcmVxdWVzdGVkIGZyb20gdGhlIEtEQy4gIFRoZSBk ZWZhdWx0IiwKLSIgIGlzIDYwMCBtaW51dGVzICgxMCBob3VycykuIiwKLSIgIiwKLSJTRVQgQVVU SEVOVElDQVRJT04gS0VSQkVST1M1IE5PLUFERFJFU1NFUyB7IE9OLCBPRkYgfSIsCi0iICBTcGVj aWZpZXMgd2hldGhlciBvciBub3QgSVAgYWRkcmVzc2VzIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0 aGUgVEdULiIKLSIgIERlZmF1bHQgaXMgT0ZGLiIsCi0iICIsCi0iU0VUIEFVVEhFTlRJQ0FUSU9O IEtFUkJFUk9TNCBQUkVBVVRIIHsgT04sIE9GRiB9IiwKLSIgIEFsbG93cyBLZXJiZXJvcyA0IHBy ZWF1dGhlbnRpY2F0ZWQgVEdUIHJlcXVlc3RzIHRvIGJlIHR1cm5lZCBvZmYuICBUaGUiLAotIiAg ZGVmYXVsdCBpcyBPTi4gIE9ubHkgdXNlIGlmIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgV2UgcmVj b21tZW5kIHRoYXQiLAotIiAgcHJlYXV0aGVudGljYXRlZCByZXF1ZXN0cyBiZSByZXF1aXJlZCBm b3IgYWxsIHRpY2tldHMgcmV0dXJuZWQgYnkgYSBLREMiLAotIiAgdG8gYSByZXF1ZXN0b3IuIiwK LSIgIiwKLSJTRVQgQVVUSEVOVElDQVRJT04geyBLRVJCRVJPUzQsIEtFUkJFUk9TNSB9IFBSSU5D SVBBTCA8bmFtZT4iLAotIiAgV2hlbiBLZXJtaXQgc3RhcnRzLCBpdCBhdHRlbXB0cyB0byBzZXQg dGhlIHByaW5jaXBhbCBuYW1lIHRvIHRoYXQgc3RvcmVkIiwKLSIgIGluIHRoZSBjdXJyZW50IGNy ZWRlbnRpYWxzIGNhY2hlLiAgSWYgbm8gY3JlZGVudGlhbCBjYWNoZSBleGlzdHMsIHRoZSIsCi0i ICBjdXJyZW50IFNFVCBMT0dJTiBVU0VSSUQgdmFsdWUgaXMgdXNlZC4gIFNFVCBMT0dJTiBVU0VS SUQgaXMgc2V0IHRvIHRoZSIsCi0iICBvcGVyYXRpbmcgc3lzdGVtJ3MgY3VycmVudCB1c2VybmFt ZSB3aGVuIEtlcm1pdCBpcyBzdGFydGVkLiAgVG8gZm9yY2UiLAotIiAgS2VybWl0IHRvIHByb21w dCB0aGUgdXNlciBmb3IgdGhlIHByaW5jaXBhbCBuYW1lIHdoZW4gcmVxdWVzdGluZyBUR1RzLCIs Ci0iICBwbGFjZToiLAotIiAiLAotIiAgICBTRVQgQVVUSCBLNCBQUklOQ0lQQUwge30iLAotIiAg ICBTRVQgQVVUSCBLNSBQUklOQ0lQQUwge30iLAotIiAiLAotIiAgaW4gdGhlIEtlcm1pdCBpbml0 aWFsaXphdGlvbiBmaWxlIG9yIGNvbm5lY3Rpb24gc2NyaXB0LiIsCi0iICIsCi0iU0VUIEFVVEhF TlRJQ0FUSU9OIHsgS0VSQkVST1M0LCBLRVJCRVJPUzUgfSBQUk9NUFQgUEFTU1dPUkQgPHByb21w dD4iLAotIiAgU3BlY2lmaWVzIGEgY3VzdG9tIHByb21wdCB0byBiZSB1c2VkIHdoZW4gcHJvbXB0 aW5nIGZvciBhIHBhc3N3b3JkLiIsCi0iICBUaGUgS2VyYmVyb3MgcHJvbXB0IHN0cmluZ3MgbWF5 IGNvbnRhaW4gdHdvICVzIHJlcGxhY2VtZW50IGZpZWxkcy4iLAotIiAgVGhlIGZpcnN0ICVzIGlz IHJlcGxhY2VkIGJ5IHRoZSBwcmluY2lwYWwgbmFtZTsgdGhlIHNlY29uZCBieSB0aGUgcmVhbG0u IiwKLSIgIiwKLSJTRVQgQVVUSEVOVElDQVRJT04geyBLRVJCRVJPUzQsIEtFUkJFUk9TNSB9IFBS T01QVCBQUklOQ0lQQUwgPHByb21wdD4iLAotIiAgU3BlY2lmaWVzIGEgY3VzdG9tIHByb21wdCB0 byBiZSB1c2VkIHdoZW4gcHJvbXB0aW5nIGZvciB0aGUgS2VyYmVyb3MiLAotIiAgcHJpbmNpcGFs IG5hbWUuICBObyAlcyByZXBsYWNlbWVudCBmaWVsZHMgbWF5IGJlIHVzZWQuICBLZXJtaXQgcHJv bXB0cyIsCi0iICBmb3IgYSBwcmluY2lwYWwgbmFtZSB3aGVuIHJldHJpZXZpbmcgYSBUR1QgaWYg dGhlIGNvbW1hbmQ6IiwKLSIgIiwKLSIgICAgU0VUIEFVVEhFTlRJQ0FUSU9OIHsgS0VSQkVST1M0 LCBLRVJCRVJPUzUgfSBQUklOQ0lQQUwge30iLAotIiAiLAotIiAgaGFzIGJlZW4gaXNzdWVkLiIs Ci0iICIsCi0iU0VUIEFVVEhFTlRJQ0FUSU9OIEtFUkJFUk9TNSBQUk9YSUFCTEUgeyBPTiwgT0ZG IH0iLAotIiAgV2hlbiBPTiwgc3BlY2lmaWVzIHRoYXQgS2VyYmVyb3MgNSBjcmVkZW50aWFscyBz aG91bGQgYmUgcHJveGlhYmxlLiIsCi0iICBEZWZhdWx0IGlzIE9GRi4iLAotIiAiLAotIlNFVCBB VVRIRU5USUNBVElPTiBLRVJCRVJPUzUgUkVORVdBQkxFIDxtaW51dGVzPiIsCi0iICBXaGVuIDxt aW51dGVzPiBpcyBncmVhdGVyIHRoYW4gdGhlIHRpY2tldCBsaWZldGltZSBhIFRHVCBtYXkgYmUg cmVuZXdlZCIsCi0iICB3aXRoIEFVVEggSzUgSU5JVCAvUkVORVcgaW5zdGVhZCBvZiBnZXR0aW5n IGEgbmV3IHRpY2tldCBhcyBsb25nIGFzIHRoZSIsCi0iICB0aWNrZXQgaXMgbm90IGV4cGlyZWQg YW5kIGl0cyB3aXRoaW4gdGhlIHJlbmV3YWJsZSBsaWZldGltZS4gIERlZmF1bHQgaXMiLAotIiAg MCAoemVybykgbWludXRlcy4iLAotIiAiLAotIlNFVCBBVVRIRU5USUNBVElPTiB7IEtFUkJFUk9T NCwgS0VSQkVST1M1IH0gUkVBTE0gPG5hbWU+IiwKLSIgIElmIG5vIGRlZmF1bHQgaXMgc2V0LCB0 aGUgZGVmYXVsdCByZWFsbSBjb25maWd1cmVkIGZvciB0aGUgS2VyYmVyb3MiLAotIiAgbGlicmFy aWVzIGlzIHVzZWQuICBBYmJyZXZpYXRpb25zIGFjY2VwdGVkLiIsCi0iICIsCi0iU0VUIEFVVEhF TlRJQ0FUSU9OIHsgS0VSQkVST1M0LCBLRVJCRVJPUzUgfSBTRVJWSUNFLU5BTUUgPG5hbWU+IiwK LSIgIFRoaXMgY29tbWFuZCBzcGVjaWZpZXMgdGhlIHNlcnZpY2UgdGlja2V0IG5hbWUgdXNlZCB0 byBhdXRoZW50aWNhdGUiLAotIiAgdG8gdGhlIGhvc3Qgd2hlbiBLZXJtaXQgaXMgdXNlZCBhcyBh IGNsaWVudDsgb3IgdGhlIHNlcnZpY2UgdGlja2V0IiwKLSIgIG5hbWUgYWNjZXB0ZWQgYnkgS2Vy bWl0IHdoZW4gaXQgaXMgYWN0aW5nIGFzIHRoZSBob3N0LiIsCi0iICBJZiBubyBkZWZhdWx0IGlz IHNldCwgdGhlIGRlZmF1bHQgc2VydmljZSBuYW1lIGZvciBLZXJiZXJvcyA0IGlzIiwKLSIgIFwi cmNtZFwiIGFuZCBmb3IgS2VyYmVyb3MgNSBpcyBcImhvc3RcIi4iLAotIiAiLAotI2VuZGlmIC8q IENLX0tFUkJFUk9TICovCi0jaWZkZWYgQ0tfU1JQCi0iU0VUIEFVVEhFTlRJQ0FUSU9OIFNSUCBQ Uk9NUFQgUEFTU1dPUkQgPHByb21wdD4iLAotIiAgU3BlY2lmaWVzIGEgY3VzdG9tIHByb21wdCB0 byBiZSB1c2VkIHdoZW4gcHJvbXB0aW5nIGZvciBhIHBhc3N3b3JkLiIsCi0iICBUaGUgU1JQIHBy b21wdCBzdHJpbmcgbWF5IGNvbnRhaW4gb25lICVzIHJlcGxhY2VtZW50IGZpZWxkcyB3aGljaCBp cyIsCi0iICByZXBsYWNlZCBieSB0aGUgbG9naW4gdXNlcmlkLiIsCi0iICIsCi0jZW5kaWYgLyog Q0tfU1JQICovCi0jaWZkZWYgQ0tfU1NMCi0iSW4gYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFu ZHMgXCJTU0xcIiBhbmQgXCJUTFNcIiBhcmUgYWxpYXNlcy4iLAotIiAiLAotIlNFVCBBVVRIRU5U SUNBVElPTiB7IFNTTCwgVExTIH0gQ0lQSEVSLUxJU1QgPGxpc3Qgb2YgY2lwaGVycz4iLAotIkFw cGxpZXMgdG8gYm90aCBTU0wgYW5kIFRMUy4gIEEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgYW55 IG9mIHRoZSBmb2xsb3dpbmciLAotIihjYXNlIHNlbnNpdGl2ZSkgb3B0aW9ucyBkZXBlbmRpbmcg b24gdGhlIG9wdGlvbnMgY2hvc2VuIHdoZW4gT3BlblNTTCB3YXMgIiwKLSJjb21waWxlZDogIiwK LSIgIiwKLSIgIEtleSBFeGNoYW5nZSBBbGdvcml0aG1zOiIsCi0iICAgIFwia1JTQVwiICAgICAg UlNBIGtleSBleGNoYW5nZSIsCi0iICAgIFwia0RIclwiICAgICAgRGlmZmllLUhlbGxtYW4ga2V5 IGV4Y2hhbmdlIChrZXkgZnJvbSBSU0EgY2VydCkiLAotIiAgICBcImtESGRcIiAgICAgIERpZmZp ZS1IZWxsbWFuIGtleSBleGNoYW5nZSAoa2V5IGZyb20gRFNBIGNlcnQpIiwKLSIgICAgXCJrRURI XCIgICAgICBFcGhlbWVyYWwgRGlmZmllLUhlbGxtYW4ga2V5IGV4Y2hhbmdlICh0ZW1wb3Jhcnkg a2V5KSIsCi0iICAgIFwia0tSQjVcIiAgICAgS2VyYmVyb3MgNSIsCi0iICIsCi0iICBBdXRoZW50 aWNhdGlvbiBBbGdvcml0aG06IiwKLSIgICAgXCJhTlVMTFwiICAgICBObyBhdXRoZW50aWNhdGlv biIsCi0iICAgIFwiYVJTQVwiICAgICAgUlNBIGF1dGhlbnRpY2F0aW9uIiwKLSIgICAgXCJhRFNT XCIgICAgICBEU1MgYXV0aGVudGljYXRpb24iLAotIiAgICBcImFESFwiICAgICAgIERpZmZpZS1I ZWxsbWFuIGF1dGhlbnRpY2F0aW9uIiwKLSIgICAgXCJhS1JCNVwiICAgICBLZXJiZXJvcyA1IiwK LSIgIiwKLSIgIENpcGhlciBFbmNvZGluZyBBbGdvcml0aG06IiwKLSIgICAgXCJlTlVMTFwiICAg ICBObyBlbmNvZGlpbmciLAotIiAgICBcIkRFU1wiICAgICAgIERFUyBlbmNvZGluZyIsCi0iICAg IFwiM0RFU1wiICAgICAgVHJpcGxlIERFUyBlbmNvZGluZyIsCi0iICAgIFwiUkM0XCIgICAgICAg UkM0IGVuY29kaW5nIiwKLSIgICAgXCJSQzJcIiAgICAgICBSQzIgZW5jb2RpbmciLAotIiAgICBc IklERUFcIiAgICAgIElERUEgZW5jb2RpbmciLAotIiAiLAotIiAgTUFDIERpZ2VzdCBBbGdvcml0 aG06IiwKLSIgICAgXCJNRDVcIiAgICAgICBNRDUgaGFzaCBmdW5jdGlvbiIsCi0iICAgIFwiU0hB MVwiICAgICAgU0hBMSBoYXNoIGZ1bmN0aW9uIiwKLSIgICAgXCJTSEFcIiAgICAgICBTSEEgaGFz aCBmdW5jdGlvbiAoc2hvdWxkIG5vdCBiZSB1c2VkKSIsCi0iICIsCi0iICBBbGlhc2VzOiIsCi0i ICAgIFwiU1NMdjJcIiAgICAgYWxsIFNTTCB2ZXJzaW9uIDIuMCBjaXBoZXJzIChzaG91bGQgbm90 IGJlIHVzZWQpIiwKLSIgICAgXCJTU0x2M1wiICAgICBhbGwgU1NMIHZlcnNpb24gMy4wIGNpcGhl cnMiLAotIiAgICBcIkVYUFwiICAgICAgIGFsbCBleHBvcnQgY2lwaGVycyAoNDAtYml0KSIsCi0i ICAgIFwiRVhQT1JUNTZcIiAgYWxsIGV4cG9ydCBjaXBoZXJzICg1Ni1iaXQpIiwKLSIgICAgXCJM T1dcIiAgICAgICBhbGwgbG93IHN0cmVuZ3RoIGNpcGhlcnMgKG5vIGV4cG9ydCkiLAotIiAgICBc Ik1FRElVTVwiICAgIGFsbCBjaXBoZXJzIHdpdGggMTI4LWJpdCBlbmNyeXB0aW9uIiwKLSIgICAg XCJISUdIXCIgICAgICBhbGwgY2lwaGVycyB1c2luZyBncmVhdGVyIHRoYW4gMTI4LWJpdCBlbmNy eXB0aW9uIiwKLSIgICAgXCJSU0FcIiAgICAgICBhbGwgY2lwaGVycyB1c2luZyBSU0Ega2V5IGV4 Y2hhbmdlIiwKLSIgICAgXCJESFwiICAgICAgICBhbGwgY2lwaGVycyB1c2luZyBEaWZmaWUtSGVs bG1hbiBrZXkgZXhjaGFuZ2UiLAotIiAgICBcIkVESFwiICAgICAgIGFsbCBjaXBoZXJzIHVzaW5n IEVwaGVtZXJhbCBEaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFuZ2UiLAotIiAgICBcIkFESFwiICAg ICAgIGFsbCBjaXBoZXJzIHVzaW5nIEFub255bW91cyBEaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFu Z2UiLAotIiAgICBcIkRTU1wiICAgICAgIGFsbCBjaXBoZXJzIHVzaW5nIERTUyBhdXRoZW50aWNh dGlvbiIsCi0iICAgIFwiS1JCNVwiICAgICAgYWxsIGNpcGhlcnMgdXNpbmcgS2VyYmVyb3MgNSBh dXRoZW50aWNhdGlvbiIsCi0iICAgIFwiTlVMTFwiICAgICAgYWxsIGNpcGhlcnMgdXNpbmcgbm8g ZW5jcnlwdGlvbiIsCi0iICIsCi0iRWFjaCBpdGVtIGluIHRoZSBsaXN0IG1heSBpbmNsdWRlIGEg cHJlZml4IG1vZGlmaWVyOiIsCi0iICIsCi0iICAgIFwiK1wiICAgICAgICAgbW92ZSBjaXBoZXIo cykgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gaW4gdGhlIGxpc3QiLAotIiAgICBcIi1cIiAgICAg ICAgIHJlbW92ZSBjaXBoZXIocykgZnJvbSB0aGUgbGlzdCAobWF5IGJlIGFkZGVkIGFnYWluIGJ5 IiwKLSIgICAgICAgICAgICAgICAgYSBzdWJzZXF1ZW50IGxpc3QgZW50cnkpIiwKLSIgICAgXCIh XCIgICAgICAgICBraWxsIGNpcGhlciBmcm9tIHRoZSBsaXN0IChpdCBtYXkgbm90IGJlIGFkZGVk IGFnYWluIiwKLSIgICAgICAgICAgICAgICAgYnkgYSBzdWJzZXF1ZW50IGxpc3QgZW50cnkpIiwK LSIgIiwKLSJJZiBubyBtb2RpZmllciBpcyBzcGVjaWZpZWQgdGhlIGVudHJ5IGlzIGFkZGVkIHRv IHRoZSBsaXN0IGF0IHRoZSBjdXJyZW50ICIsCi0icG9zaXRpb24uICBcIitcIiBtYXkgYWxzbyBi ZSB1c2VkIHRvIGNvbWJpbmUgdGFncyB0byBzcGVjaWZ5IGVudHJpZXMgc3VjaCBhcyAiCi0sCi0i XCJSU0ErUkM0XCIgZGVzY3JpYmVzIGFsbCBjaXBoZXJzIHRoYXQgdXNlIGJvdGggUlNBIGFuZCBS QzQuIiwKLSIgIiwKLSJGb3IgZXhhbXBsZSwgYWxsIGF2YWlsYWJsZSBjaXBoZXJzIG5vdCBpbmNs dWRpbmcgQURIIGtleSBleGNoYW5nZToiLAotIiAiLAotIiAgQUxMOiFBREg6UkM0K1JTQTorSElH SDorTUVESVVNOitMT1c6K1NTTHYyOitFWFAiLAotIiAiLAotIkFsbCBhbGdvcml0aG1zIGluY2x1 ZGluZyBBREggYW5kIGV4cG9ydCBidXQgZXhjbHVkaW5nIHBhdGVudGVkIGFsZ29yaXRobXM6ICIs Ci0iICIsCi0iICBISUdIOk1FRElVTTpMT1c6RVhQT1JUNTY6RVhQOkFESDoha1JTQTohYVJTQToh UkM0OiFSQzI6IUlERUEiLAotIiAiLAotIlRoZSBPcGVuU1NMIGNvbW1hbmQgIiwKLSIgIiwKLSIg IG9wZW5zc2wuZXhlIGNpcGhlcnMgLXYgPGxpc3Qgb2YgY2lwaGVycz4gIiwKLSIgIiwKLSJtYXkg YmUgdXNlZCB0byBsaXN0IGFsbCBvZiB0aGUgY2lwaGVycyBhbmQgdGhlIG9yZGVyIGRlc2NyaWJl ZCBieSBhIHNwZWNpZmljIiwKLSI8bGlzdCBvZiBjaXBoZXJzPi4iLAotIiAiLAotIlNFVCBBVVRI RU5USUNBVElPTiB7IFNTTCwgVExTIH0gQ1JMLURJUiA8ZGlyZWN0b3J5PiIsCi0ic3BlY2lmaWVz IGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBmaWxlcyB3 aGVyZSBlYWNoIiwKLSJmaWxlIGlzIG5hbWVkIGJ5IHRoZSBoYXNoIG9mIHRoZSBjZXJ0aWZpY2F0 ZSB0aGF0IGhhcyBiZWVuIHJldm9rZWQuIiwKLSIgIiwKLSIgIE9wZW5TU0wgZXhwZWN0cyB0aGUg aGFzaCBzeW1saW5rcyB0byBiZSBtYWRlIGxpa2UgdGhpczoiLAotIiAiLAotIiAgICBsbiAtcyBj cmwucGVtIGBvcGVuc3NsIGNybCAtaGFzaCAtbm9vdXQgLWluIGNybC5wZW1gLnIwIiwKLSIgIiwK LSIgIFNpbmNlIG5vdCBhbGwgZmlsZSBzeXN0ZW1zIGhhdmUgc3ltbGlua3MgeW91IGNhbiB1c2Ug dGhlIGZvbGxvd2luZyBjb21tYW5kIiwKLSIgIGluIEtlcm1pdCB0byBjb3B5IHRoZSBjcmwucGVt IGZpbGUgdG8gdGhlIGhhc2ggZmlsZSBuYW1lLiIsCi0iICIsCi0iICAgICBjb3B5IGNybC5wZW0g e1xcZmNvbW1hbmQob3BlbnNzbC5leGUgY3JsIC1oYXNoIC1ub291dCAtaW4gY3JsLnBlbSkucjB9 IiwKLSIgIiwKLSIgIFRoaXMgcHJvZHVjZXMgYSBoYXNoIGJhc2VkIG9uIHRoZSBpc3N1ZXIgZmll bGQgaW4gdGhlIENSTCBzdWNoICIsCi0iICB0aGF0IHRoZSBpc3N1ZXIgZmllbGQgb2YgYSBDZXJ0 IG1heSBiZSBxdWlja2x5IG1hcHBlZCB0byB0aGUgIiwKLSIgIGNvcnJlY3QgQ1JMLiIsCi0iICIs Ci0iU0VUIEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBDUkwtRklMRSA8ZmlsZW5hbWU+IiwK LSJzcGVjaWZpZXMgYSBmaWxlIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIGNlcnRpZmljYXRlIHJl dm9jYXRpb25zLiIsCi0iICIsCi0iU0VUIEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBERUJV RyB7IE9OLCBPRkYgfSIsCi0ic3BlY2lmaWVzIHdoZXRoZXIgZGVidWcgaW5mb3JtYXRpb24gc2hv dWxkIGJlIGRpc3BsYXllZCBhYm91dCB0aGUgU1NML1RMUyIsCi0iY29ubmVjdGlvbi4gIFdoZW4g REVCVUcgaXMgT04sIHRoZSBWRVJJRlkgY29tbWFuZCBkb2VzIG5vdCB0ZXJtaW5hdGUiLAotImNv bm5lY3Rpb25zIHdoZW4gc2V0IHRvIEZBSUwtSUYtTk8tUEVFUi1DRVJUIHdoZW4gYSBjZXJ0aWZp Y2F0ZSBpcyIsCi0icHJlc2VudGVkIHRoYXQgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSB2ZXJpZmll ZC4gIEluc3RlYWQgZWFjaCBlcnJvciIsCi0iaXMgZGlzcGxheWVkIGJ1dCB0aGUgY29ubmVjdGlv biBhdXRvbWF0aWNhbGx5IGNvbnRpbnVlcy4iLAotIiAiLAotIlNFVCBBVVRIRU5USUNBVElPTiB7 IFNTTCwgVExTIH0gREgtUEFSQU0tRklMRSA8ZmlsZW5hbWU+IiwKLSIgIFNwZWNpZmllcyBhIGZp bGUgY29udGFpbmluZyBESCBwYXJhbWV0ZXJzIHdoaWNoIGFyZSB1c2VkIHRvIGdlbmVyYXRlIiwK LSIgIHRlbXBvcmFyeSBESCBrZXlzLiAgSWYgYSBESCBwYXJhbWV0ZXIgZmlsZSBpcyBub3QgcHJv dmlkZWQgS2VybWl0IHVzZXMgYSIsCi0iICBmaXhlZCBzZXQgb2YgcGFyYW1ldGVycyBkZXBlbmRp bmcgb24gdGhlIG5lZ290aWF0ZWQga2V5IGxlbmd0aC4gIEtlcm1pdCIsCi0iICBwcm92aWRlcyBE SCBwYXJhbWV0ZXJzIGZvciBrZXkgbGVuZ3RocyBvZiA1MTIsIDc2OCwgMTAyNCwgMTUzNiwgYW5k IDIwNDgiLAotIiAgYml0cy4iLAotIiAiLAotIlNFVCBBVVRIRU5USUNBVElPTiB7IFNTTCwgVExT IH0gRFNBLUNFUlQtQ0hBSU4tRklMRSA8ZmlsZW5hbWU+IiwKLSIgIFNwZWNpZmllcyBhIGZpbGUg Y29udGFpbmluZyBhIERTQSBjZXJ0aWZpY2F0ZSBjaGFpbiB0byBiZSBzZW50IGFsb25nIHdpdGgi LAotIiAgdGhlIERTQS1DRVJUIHRvIHRoZSBwZWVyLiAgVGhpcyBmaWxlIG11c3Qgb25seSBiZSBz cGVjaWZpZWQgaWYgS2VybWl0IGlzIiwKLSIgIGJlaW5nIHVzZWQgYXMgYSBzZXJ2ZXIgYW5kIHRo ZSBEU0EgY2VydGlmaWNhdGUgd2FzIHNpZ25lZCBieSBhbiIsCi0iICBpbnRlcm1lZGlhcnkgY2Vy dGlmaWNhdGUgYXV0aG9yaXR5LiIsCi0iICIsCi0iU0VUIEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBU TFMgfSBEU0EtQ0VSVC1GSUxFIDxmaWxlbmFtZT4iLAotIiAgU3BlY2lmaWVzIGEgZmlsZSBjb250 YWluaW5nIGEgRFNBIGNlcnRpZmljYXRlIHRvIGJlIHNlbnQgdG8gdGhlIHBlZXIgdG8gIiwKLSIg IGF1dGhlbnRpY2F0ZSB0aGUgaG9zdCBvciBlbmQgdXNlci4gIFRoZSBmaWxlIG1heSBjb250YWlu IHRoZSBtYXRjaGluZyBESCAiLAotIiAgcHJpdmF0ZSBrZXkgaW5zdGVhZCBvZiB1c2luZyB0aGUg RFNBLUtFWS1GSUxFIGNvbW1hbmQuIiwKLSIgIiwKLSJTRVQgQVVUSEVOVElDQVRJT04geyBTU0ws IFRMUyB9IERTQS1LRVktRklMRSA8ZmlsZW5hbWU+IiwKLSJTcGVjaWZpZXMgYSBmaWxlIGNvbnRh aW5pbmcgdGhlIHByaXZhdGUgREgga2V5IHRoYXQgbWF0Y2hlcyB0aGUgRFNBICIsCi0iY2VydGlm aWNhdGUgc3BlY2lmaWVkIHdpdGggRFNBLUNFUlQtRklMRS4gIFRoaXMgY29tbWFuZCBpcyBvbmx5 IG5lY2Vzc2FyeSBpZiIsCi0idGhlIHByaXZhdGUga2V5IGlzIG5vdCBhcHBlbmRlZCB0byB0aGUg Y2VydGlmaWNhdGUgaW4gdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IiwKLSJEU0EtQ0VSVC1GSUxFLiIs Ci0iICIsCi0iICBOb3RlOiBXaGVuIGV4ZWN1dGluZyBhIHNjcmlwdCBpbiB0aGUgYmFja2dyb3Vu ZCBvciB3aGVuIGl0IGlzIiwKLSIgIHJ1bm5pbmcgYXMgYW4gSW50ZXJuZXQgS2VybWl0IFNlcnZp Y2UgRGFlbW9uLCBLZXJtaXQgY2Fubm90IHN1cHBvcnQgIiwKLSIgIGVuY3J5cHRlZCBwcml2YXRl IGtleXMuICBXaGVuIGF0dGVtcHRpbmcgdG8gbG9hZCBhIHByaXZhdGUga2V5IHRoYXQgaXMiLAot IiAgZW5jcnlwdGVkLCBhIHByb21wdCB3aWxsIGJlIGdlbmVyYXRlZCByZXF1ZXN0aW5nIHRoZSBw YXNzcGhyYXNlIG5lY2Vzc2FyeSIsCi0iICB0byBkZWNyeXB0IHRoZSBrZXlmaWxlLiAgVG8gYXV0 b21hdGUgYWNjZXNzIHRvIHRoZSBwcml2YXRlIGtleSB5b3UgbXVzdCIsCi0iICBkZWNyeXB0IHRo ZSBlbmNyeXB0ZWQga2V5ZmlsZSBhbmQgY3JlYXRlIGFuIHVuZW5jcnlwdGVkIGtleWZpbGUgZm9y IHVzZSIsCi0iICBieSBLZXJtaXQuICBUaGlzIGNhbiBiZSBhY2NvbXBsaXNoZWQgYnkgdXNpbmcg dGhlIGZvbGxvd2luZyBjb21tYW5kIGFuZCIsCi0iICB0aGUgcGFzc3BocmFzZToiLAotIiAiLAot IiAgb3BlbnNzbCBkc2EgLWluIDxlbmNyeXB0ZWQta2V5LWZpbGU+IC1vdXQgPHVuZW5jcnlwdGVk LWtleS1maWxlPiIsCi0iICIsCi0iU0VUIEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBSQU5E T00tRklMRSA8ZmlsZW5hbWU+IiwKLSIgIFNwZWNpZmllcyBhIGZpbGUgY29udGFpbmluZyByYW5k b20gZGF0YSB0byBiZSB1c2VkIGFzIHNlZWQgZm9yIHRoZSIsCi0iICBQc2V1ZG8gUmFuZG9tIE51 bWJlciBHZW5lcmF0b3IuICBUaGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXJlIiwKLSIgIG92ZXJ3 cml0dGVuIHdpdGggbmV3IHJhbmRvbSBkYXRhIG9uIGVhY2ggdXNlLiIsCi0iICIsCi0iU0VUIEFV VEhFTlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBSU0EtQ0VSVC1DSEFJTi1GSUxFIDxmaWxlbmFtZT4i LAotIiAgU3BlY2lmaWVzIGEgZmlsZSBjb250YWluaW5nIGEgUlNBIGNlcnRpZmljYXRlIGNoYWlu IHRvIGJlIHNlbnQgYWxvbmcgd2l0aCIsCi0iICB0aGUgUlNBLUNFUlQgdG8gdGhlIHBlZXIuICBU aGlzIGZpbGUgbXVzdCBvbmx5IGJlIHNwZWNpZmllZCBpZiBLZXJtaXQgaXMiLAotIiAgYmVpbmcg dXNlZCBhcyBhIHNlcnZlciBhbmQgdGhlIFJTQSBjZXJ0aWZpY2F0ZSB3YXMgc2lnbmVkIGJ5IGFu IiwKLSIgIGludGVybWVkaWFyeSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkuIiwKLSIgIiwKLSJTRVQg QVVUSEVOVElDQVRJT04geyBTU0wsIFRMUyB9IFJTQS1DRVJULUZJTEUgPGZpbGVuYW1lPiIsCi0i ICBTcGVjaWZpZXMgYSBmaWxlIGNvbnRhaW5pbmcgYSBSU0EgY2VydGlmaWNhdGUgdG8gYmUgc2Vu dCB0byB0aGUgcGVlciB0byAiLAotIiAgYXV0aGVudGljYXRlIHRoZSBob3N0IG9yIGVuZCB1c2Vy LiAgVGhlIGZpbGUgbWF5IGNvbnRhaW4gdGhlIG1hdGNoaW5nIFJTQSAiLAotIiAgcHJpdmF0ZSBr ZXkgaW5zdGVhZCBvZiB1c2luZyB0aGUgUlNBLUtFWS1GSUxFIGNvbW1hbmQuIiwKLSIgIiwKLSJT RVQgQVVUSEVOVElDQVRJT04geyBTU0wsIFRMUyB9IFJTQS1LRVktRklMRSA8ZmlsZW5hbWU+IiwK LSIgIFNwZWNpZmllcyBhIGZpbGUgY29udGFpbmluZyB0aGUgcHJpdmF0ZSBSU0Ega2V5IHRoYXQg bWF0Y2hlcyB0aGUgUlNBIiwKLSIgIGNlcnRpZmljYXRlIHNwZWNpZmllZCB3aXRoIFJTQS1DRVJU LUZJTEUuICBUaGlzIGNvbW1hbmQgaXMgb25seSBuZWNlc3NhcnkiLAotIiAgaWYgdGhlIHByaXZh dGUga2V5IGlzIG5vdCBhcHBlbmRlZCB0byB0aGUgY2VydGlmaWNhdGUgaW4gdGhlIGZpbGUgc3Bl Y2lmaWVkIgotLAotIiAgYnkgUlNBLUNFUlQtRklMRS4gICIsCi0iICIsCi0iICBOb3RlOiBXaGVu IGV4ZWN1dGluZyBhIHNjcmlwdCBpbiB0aGUgYmFja2dyb3VuZCBvciB3aGVuIGl0IGlzIiwKLSIg IHJ1bm5pbmcgYXMgYW4gSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgRGFlbW9uLCBLZXJtaXQgY2Fu bm90IHN1cHBvcnQgIiwKLSIgIGVuY3J5cHRlZCBwcml2YXRlIGtleXMuICBXaGVuIGF0dGVtcHRp bmcgdG8gbG9hZCBhIHByaXZhdGUga2V5IHRoYXQgaXMiLAotIiAgZW5jcnlwdGVkLCBhIHByb21w dCB3aWxsIGJlIGdlbmVyYXRlZCByZXF1ZXN0aW5nIHRoZSBwYXNzcGhyYXNlIG5lY2Vzc2FyeSIs Ci0iICB0byBkZWNyeXB0IHRoZSBrZXlmaWxlLiAgVG8gYXV0b21hdGUgYWNjZXNzIHRvIHRoZSBw cml2YXRlIGtleSB5b3UgbXVzdCIsCi0iICBkZWNyeXB0IHRoZSBlbmNyeXB0ZWQga2V5ZmlsZSBh bmQgY3JlYXRlIGFuIHVuZW5jcnlwdGVkIGtleWZpbGUgZm9yIHVzZSIsCi0iICBieSBLZXJtaXQu ICBUaGlzIGNhbiBiZSBhY2NvbXBsaXNoZWQgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5k IGFuZCIsCi0iICB0aGUgcGFzc3BocmFzZToiLAotIiAiLAotIiAgb3BlbnNzbCByc2EgLWluIDxl bmNyeXB0ZWQta2V5LWZpbGU+IC1vdXQgPHVuZW5jcnlwdGVkLWtleS1maWxlPiIsCi0iICIsCi0i U0VUIEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBWRVJCT1NFIHsgT04sIE9GRiB9IiwKLSIg IFNwZWNpZmllcyB3aGV0aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhdXRoZW50aWNhdGlvbiAo aWUsIHRoZSIsCi0iICBjZXJ0aWZpY2F0ZSBjaGFpbikgc2hvdWxkIGJlIGRpc3BsYXllZCB1cG9u IG1ha2luZyBhIGNvbm5lY3Rpb24uIiwKLSIgIiwKLSJTRVQgQVVUSEVOVElDQVRJT04geyBTU0ws IFRMUyB9IFZFUklGWSB7IE5PLFBFRVItQ0VSVCxGQUlMLUlGLU5PLVBFRVItQ0VSVCB9IiwKLSIg IFNwZWNpZmllcyB3aGV0aGVyIGNlcnRpZmljYXRlcyBzaG91bGQgYmUgcmVxdWVzdGVkIGZyb20g dGhlIHBlZXIgdmVyaWZpZWQ7IiwKLSIgIHdoZXRoZXIgdGhleSBzaG91bGQgYmUgdmVyaWZpZWQg d2hlbiB0aGV5IGFyZSBwcmVzZW50ZWQ7IGFuZCB3aGV0aGVyIHRoZXkiLAotIiAgc2hvdWxkIGJl IHJlcXVpcmVkLiAgV2hlbiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0IGZvciBJS1NEKSwgS2VybWl0 IGRvZXMiLAotIiAgbm90IHJlcXVlc3QgdGhhdCB0aGUgcGVlciBzZW5kIGEgY2VydGlmaWNhdGU7 IGlmIG9uZSBpcyBwcmVzZW50ZWQgaXQgaXMiLAotIiAgaWdub3JlZC4gIFdoZW4gc2V0IHRvIFBF RVItQ0VSVCAodGhlIGRlZmF1bHQgd2hlbiBub3QgSUtTRCksIEtlcm1pdCIsCi0iICByZXF1ZXN0 cyBhIGNlcnRpZmljYXRlIGJlIHNlbnQgYnkgdGhlIHBlZXIuICBJZiBwcmVzZW50ZWQsIHRoZSBj ZXJ0aWZpY2F0ZSIsCi0iICBpcyB2ZXJpZmllZC4gIEFueSBlcnJvcnMgZHVyaW5nIHRoZSB2ZXJp ZmljYXRpb24gcHJvY2VzcyByZXN1bHQgaW4iLAotIiAgcXVlcmllcyB0byB0aGUgZW5kIHVzZXIu ICBXaGVuIHNldCB0byBGQUlMLUlGLU5PLVBFRVItQ0VSVCwgS2VybWl0IiwKLSIgIHJlcXVlc3Rz IGEgY2VydGlmaWNhdGUgYmUgc2VudCBieSB0aGUgcGVlci4gIElmIHRoZSBjZXJ0aWZpY2F0ZSBp cyBub3QiLAotIiAgcHJlc2VudGVkIG9yIGZhaWxzIHRvIHZlcmlmeSwgdGhlIGNvbm5lY3Rpb24g aXMgdGVybWluYXRlZCB3aXRob3V0IiwKLSIgIHF1ZXJ5aW5nIHRoZSB1c2VyLiIsCi0iICIsCi0i ICBJZiBhbiBhbm9ueW1vdXMgY2lwaGVyIChpLmUuLCBBREgpIGlzIGRlc2lyZWQsIHRoZSBOTyBz ZXR0aW5nIG11c3QgYmUiLAotIiAgdXNlZC4gIE90aGVyd2lzZSwgdGhlIHJlY2VpcHQgb2YgdGhl IHBlZXIgY2VydGlmaWNhdGUgcmVxdWVzdCBpcyIsCi0iICBpbnRlcnByZXRlZCBhcyBhIHByb3Rv Y29sIGVycm9yIGFuZCB0aGUgbmVnb3RpYXRpb24gZmFpbHMuIiwKLSIgIiwKLSIgIElmIHlvdSB3 aXNoIHRvIGFsbG93IHRoZSBwZWVyIHRvIGF1dGhlbnRpY2F0ZSB1c2luZyBlaXRoZXIgYW4gWDUw OSIsCi0iICBjZXJ0aWZpY2F0ZSB0byB1c2VyaWQgbWFwcGluZyBmdW5jdGlvbiBvciB2aWEgdXNl IG9mIGEgfi8udGxzbG9naW4gZmlsZSIsCi0iICB5b3UgbXVzdCB1c2UgZWl0aGVyIFBFRVItQ0VS VCBvciBGQUlMLUlGLU5PLVBFRVItQ0VSVC4gIE90aGVyd2lzZSwgYW55IiwKLSIgIGNlcnRpZmlj YXRlcyB0aGF0IGFyZSBwcmVzZW50ZWQgaXMgaWdub3JlZC4gIEluIG90aGVyIHdvcmRzLCB1c2Ug Tk8gaWYgeW91IiwKLSIgIHdhbnQgdG8gZGlzYWJsZSB0aGUgYWJpbGl0eSB0byB1c2UgY2VydGlm aWNhdGVzIHRvIGF1dGhlbnRpY2F0ZSBhIHBlZXIuIiwKLSIgIiwKLSJTRVQgQVVUSEVOVElDQVRJ T04geyBTU0wsIFRMUyB9IFZFUklGWS1ESVIgPGRpcmVjdG9yeT4iLAotIiAgU3BlY2lmaWVzIGEg ZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgcm9vdCBDQSBjZXJ0aWZpY2F0ZSBmaWxlcyB1c2VkIHRv IiwKLSIgIHZlcmlmeSB0aGUgY2VydGlmaWNhdGUgY2hhaW5zIHByZXNlbnRlZCBieSB0aGUgcGVl ci4gIEVhY2ggZmlsZSBpcyBuYW1lZCIsCi0iICBieSBhIGhhc2ggb2YgdGhlIGNlcnRpZmljYXRl LiIsCi0iICIsCi0iICBPcGVuU1NMIGV4cGVjdHMgdGhlIGhhc2ggc3ltbGlua3MgdG8gYmUgbWFk ZSBsaWtlIHRoaXM6IiwKLSIgIiwKLSIgICAgbG4gLXMgY2VydC5wZW0gYG9wZW5zc2wgeDUwOSAt aGFzaCAtbm9vdXQgLWluIGNlcnQucGVtYC4wIiwKLSIgIiwKLSIgIFNpbmNlIG5vdCBhbGwgZmls ZSBzeXN0ZW1zIGhhdmUgc3ltbGlua3MgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5k IiwKLSIgIGluIEtlcm1pdCB0byBjb3B5IHRoZSBjZXJ0LnBlbSBmaWxlIHRvIHRoZSBoYXNoIGZp bGUgbmFtZS4iLAotIiAiLAotIiAgICBjb3B5IGNlcnQucGVtIHtcXGZjb21tYW5kKG9wZW5zc2wu ZXhlIHg1MDkgLWhhc2ggLW5vb3V0IC1pbiBjZXJ0LnBlbSkuMH0iLAotIiAiLAotIiAgVGhpcyBw cm9kdWNlcyBhIGhhc2ggYmFzZWQgb24gdGhlIHN1YmplY3QgZmllbGQgaW4gdGhlIGNlcnQgc3Vj aCB0aGF0IHRoZSIsCi0iICBjZXJ0aWZpY2F0ZSBtYXkgYmUgcXVpY2tseSBmb3VuZC4iLAotIiAi LAotIlNFVCBBVVRIRU5USUNBVElPTiB7IFNTTCwgVExTIH0gVkVSSUZZLUZJTEUgPGZpbGU+IiwK LSIgIFNwZWNpZmllcyBhIGZpbGUgdGhhdCBjb250YWlucyByb290IENBIGNlcnRpZmljYXRlcyB0 byBiZSB1c2VkIGZvciIsCi0iICB2ZXJpZnlpbmcgY2VydGlmaWNhdGUgY2hhaW5zLiIsCi0iICIs Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0iIgotfTsKLQotc3RhdGljIGNoYXIgKmh4eW5ldFtdID0g ewotIlN5bnRheDogU0VUIE5FVFdPUksgeyBUWVBFIG5ldHdvcmstdHlwZSwgRElSRUNUT1JZIFsg ZmlsZShzKS4uLiBdIH0iLAotIiAiLAotIlNlbGVjdCB0aGUgdHlwZSBvZiBuZXR3b3JrIHRvIGJl IHVzZWQgd2l0aCBTRVQgSE9TVCBjb25uZWN0aW9uczoiLAotIiAiLAotI2lmZGVmIE5FVENNRAot IiAgU0VUIE5FVFdPUksgVFlQRSBDT01NQU5EICAgOyBNYWtlIGEgY29ubmVjdGlvbiB0aHJvdWdo IGFuIGV4dGVybmFsIGNvbW1hbmQiLAotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIFRDUFNP Q0tFVAotIiAgU0VUIE5FVFdPUksgVFlQRSBUQ1AvSVAgICAgOyBJbnRlcm5ldDogVGVsbmV0LCBS bG9naW4sIGV0Yy4iLAotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2lmZGVmIEFOWVgyNQotIiAg U0VUIE5FVFdPUksgVFlQRSBYLjI1ICAgICAgOyBYLjI1IHBlZXItdG8tcGVlciBjb25uZWN0aW9u cy4iLAotI2VuZGlmIC8qIEFOWVgyNSAqLwotI2lmZGVmIERFQ05FVAotIiAgU0VUIE5FVFdPUksg VFlQRSBQQVRIV09SS1MgeyBMQVQsIENURVJNIH0gOyBERUMgTEFUIG9yIENURVJNIGNvbm5lY3Rp b25zLiIsCi0jZW5kaWYgLyogREVDTkVUICovCi0jaWZkZWYgTlBJUEUKLSIgIFNFVCBORVRXT1JL IFRZUEUgTkFNRUQtUElQRSA8cGlwZW5hbWU+ICA7IE9TLzIgTmFtZWQgUGlwZSBjb25uZWN0aW9u cy4iLAotI2VuZGlmIC8qIE5QSVBFICovCi0jaWZkZWYgQ0tfTkVUQklPUwotIiAgU0VUIE5FVFdP UksgVFlQRSBORVRCSU9TICAgICAgICAgICAgICAgIDsgTkVUQklPUyBwZWVyLXRvLXBlZXIgY29u bmVjdGlvbnMiLAotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KLSNpZmRlZiBTVVBFUkxBVAotIiAg U0VUIE5FVFdPUksgVFlQRSBTVVBFUkxBVCA7IExBVCBjb25uZWN0aW9ucyAoTWVyaWRpYW4gVGVj aG5vbG9neSBTdXBlckxBVCkiLAotI2VuZGlmIC8qIFNVUEVSTEFUICovCi0iICIsCi0iSWYgb25s eSBvbmUgbmV0d29yayB0eXBlIGlzIGxpc3RlZCBhYm92ZSwgdGhhdCBpcyB0aGUgZGVmYXVsdCBu ZXR3b3JrIGZvciIsCi0jaWZkZWYgUkxPR0NPREUKLSJTRVQgSE9TVCBjb21tYW5kcy4gIEFsc28g c2VlIFNFVCBIT1NULCBURUxORVQsIFJMT0dJTi4iLAotI2Vsc2UKLSNpZmRlZiBUTkNPREUKLSJT RVQgSE9TVCBjb21tYW5kcy4gIEFsc28gc2VlIFNFVCBIT1NULCBURUxORVQuIiwKLSNlbHNlCi0i U0VUIEhPU1QgY29tbWFuZHMuICBBbHNvIHNlZSBTRVQgSE9TVC4iLAotI2VuZGlmIC8qIFROQ09E RSAqLwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0iICIsCi0iU0VUIE5FVFdPUksgRElSRUNUT1JZ IFsgZmlsZSBbIGZpbGUgWyAuLi4gXSBdIF0iLAotIiAgU3BlY2lmaWVzIHRoZSBuYW1lKHMpIG9m IHplcm8gb3IgbW9yZSBuZXR3b3JrIGRpcmVjdG9yeSBmaWxlcywgc2ltaWxhciB0byIsCi0iICBk aWFsaW5nIGRpcmVjdG9yaWVzIChIRUxQIERJQUwgZm9yIGRldGFpbHMpLiAgVGhlIGdlbmVyYWwg Zm9ybWF0IG9mIGEiLAotIiAgbmV0d29yayBkaXJlY3RvcnkgZW50cnkgaXM6IiwKLSIgIiwKLSIg ICAgbmFtZSBuZXR3b3JrLXR5cGUgYWRkcmVzcyBbIG5ldHdvcmstc3BlY2lmaWMtaW5mbyBdIFsg OyBjb21tZW50IF0iLAotIiAiLAotIiAgRm9yIFRDUC9JUCwgdGhlIGZvcm1hdCBpczoiLAotIiAi LAotIiAgICBuYW1lIHRjcC9pcCBpcC1ob3N0bmFtZS1vci1hZGRyZXNzIFsgc29ja2V0IF0gWyA7 IGNvbW1lbnQgXSIsCi0iICIsCi0iWW91IGNhbiBoYXZlIG11bHRpcGxlIG5ldHdvcmsgZGlyZWN0 b3JpZXMgYW5kIHlvdSBjYW4gaGF2ZSBtdWx0aXBsZSBlbnRyaWVzIiwKLSJ3aXRoIHRoZSBzYW1l IG5hbWUuICBTRVQgSE9TVCA8bmFtZT4gYW5kIFRFTE5FVCA8bmFtZT4gY29tbWFuZHMgbG9vayB1 cCB0aGUiLAotImdpdmVuIDxuYW1lPiBpbiB0aGUgZGlyZWN0b3J5IGFuZCwgaWYgZm91bmQsIGZp bGwgaW4gdGhlIGFkZGl0aW9uYWwgaXRlbXMiLAotImZyb20gdGhlIGVudHJ5LCBhbmQgdGhlbiB0 cnkgYWxsIG1hdGNoaW5nIGVudHJpZXMgdW50aWwgb25lIHN1Y2NlZWRzLiIsCi0iIn07Ci0KLSNp Zm5kZWYgTk9UQ1BPUFRTCi1zdGF0aWMgY2hhciAqaHh5dGNwW10gPSB7Ci0jaWZkZWYgU09MX1NP Q0tFVAotIlNFVCBUQ1AgQUREUkVTUyA8aXAtYWRkcmVzcz4iLAotIiAgVGhpcyBhbGxvd3MgYSBz cGVjaWZpYyBJUCBBZGRyZXNzIG9uIGEgbXVsdGlob21lZCBob3N0IHRvIGJlIHVzZWQiLAotIiAg aW5zdGVhZCBvZiBhbGxvd2luZyB0aGUgVENQL0lQIHN0YWNrIHRvIGNob29zZS4gIFRoaXMgbWF5 IGJlIG5lY2Vzc2FyeSIsCi0iICB3aGVuIHVzaW5nIGF1dGhlbnRpY2F0aW9uIG9yIGxpc3Rlbmlu ZyBmb3IgYW4gaW5jb21pbmcgY29ubmVjdGlvbi4iLAotIiAgU3BlY2lmeSBubyA8aXAtYWRkcmVz cz4gdG8gcmVtb3ZlIHRoZSBwcmVmZXJlbmNlLiIsCi0iICIsCi0iU0VUIFRDUCBLRUVQQUxJVkUg eyBPTiwgT0ZGIH0iLAotIiAgU2V0dGluZyB0aGlzIE9OIG1pZ2h0IGhlbHAgdG8gZGV0ZWN0IGJy b2tlbiBjb25uZWN0aW9ucyBtb3JlIHF1aWNrbHkuIiwKLSIgIChkZWZhdWx0IGlzIE9OLikiLAot IiAiLAotIlNFVCBUQ1AgTElOR0VSIHsgT04gW3RpbWVvdXRdLCBPRkYgfSIsCi0iICBTZXR0aW5n IHRoaXMgT04gZW5zdXJlcyB0aGF0IGEgY29ubmVjdGlvbiBkb2Vzbid0IGNsb3NlIGJlZm9yZSBh bGwiLAotIiAgb3V0c3RhbmRpbmcgZGF0YSBoYXMgYmVlbiB0cmFuc2ZlcnJlZCBhbmQgYWNrbm93 bGVkZ2VkLiAgVGhlIHRpbWVvdXQgaXMiLAotIiAgbWVhc3VyZWQgaW4gMTB0aHMgb2YgbWlsbGlz ZWNvbmRzLiAgVGhlIGRlZmF1bHQgaXMgT04gd2l0aCBhIHRpbWVvdXQgb2YgMC4iLAotIiAiLAot IlNFVCBUQ1AgTk9ERUxBWSB7IE9OLCBPRkYgfSIsCi0iICBPTiBtZWFucyBzZW5kIHNob3J0IFRD UCBwYWNrZXRzIGltbWVkaWF0ZWx5IHJhdGhlciB0aGFuIHdhaXRpbmciLAotIiAgdG8gYWNjdW11 bGF0ZSBhIGJ1bmNoIG9mIHRoZW0gYmVmb3JlIHRyYW5zbWl0dGluZyAoTmFnbGUgQWxnb3JpdGht KS4iLAotIiAgKGRlZmF1bHQgaXMgT0ZGLikiLAotIiAiLAotIlNFVCBUQ1AgUkVDVkJVRiA8bnVt YmVyPiIsCi0iU0VUIFRDUCBTRU5EQlVGIDxudW1iZXI+IiwKLSIgICBUQ1AgcmVjZWl2ZSBhbmQg c2VuZCBidWZmZXIgc2l6ZXMuICAoZGVmYXVsdCBpcyAtMSwgdXNlIHN5c3RlbSBkZWZhdWx0cy4p IiwKLSIgIiwKLSJUaGVzZSBpdGVtcyBsZXQgeW91IHR1bmUgVENQIG5ldHdvcmtpbmcgcGVyZm9y bWFuY2Ugb24gYSBwZXItY29ubmVjdGlvbiIsCi0iYmFzaXMgYnkgYWRqdXN0aW5nIHBhcmFtZXRl cnMgeW91IG5vcm1hbGx5IHdvdWxkIG5vdCBoYXZlIGFjY2VzcyB0by4gIFlvdSIsCi0ic2hvdWxk IHVzZSB0aGVzZSBjb21tYW5kcyBvbmx5IGlmIHlvdSBmZWVsIHRoYXQgdGhlIFRDUC9JUCBwcm90 b2NvbCBzdGFjayIsCi0idGhhdCBLZXJtaXQgaXMgdXNpbmcgaXMgZ2l2aW5nIHlvdSBpbmFkZXF1 YXRlIHBlcmZvcm1hbmNlLCBhbmQgdGhlbiBvbmx5IGlmIiwKLSJ5b3UgdW5kZXJzdGFuZCB0aGUg Y29uY2VwdHMgKHNlZSwgZm9yIGV4YW1wbGUsIHRoZSBDb21lciBUQ1AvSVAgYm9va3MpLCBhbmQi LAotInRoZW4gYXQgeW91ciBvd24gcmlzay4gIFRoZXNlIHNldHRpbmdzIGFyZSBkaXNwbGF5ZWQg YnkgU0hPVyBORVRXT1JLLiAgTm90IiwKLSJhbGwgb3B0aW9ucyBhcmUgbmVjZXNzYXJpbHkgYXZh aWxhYmxlIGluIGFsbCBLZXJtaXQgdmVyc2lvbnM7IGl0IGRlcGVuZHMgb24iLAotInRoZSB1bmRl cmx5aW5nIFRDUC9JUCBzZXJ2aWNlcy4iLAotIiAiLAotIlRoZSBmb2xsb3dpbmcgVENQIGFuZC9v ciBJUCBwYXJhbWV0ZXIocykgbWF5IGFsc28gYmUgY2hhbmdlZDoiLAotIiAiLAotI2VuZGlmIC8q IFNPTF9TT0NLRVQgKi8KLSJTRVQgVENQIFJFVkVSU0UtRE5TLUxPT0tVUCB7IEFVVE8sIE9OLCBP RkYgfSIsCi0iICBUZWxscyBLZXJtaXQgd2hldGhlciB0byBwZXJmb3JtIHJldmVyc2UgRE5TIGxv b2t1cCBvbiBUQ1AvSVAgY29ubmVjdGlvbnMiLAotIiAgc28gS2VybWl0IGNhbiBkZXRlcm1pbmUg dGhlIGFjdHVhbCBob3N0bmFtZSBvZiB0aGUgaG9zdCBpdCBpcyBjb25uZWN0ZWQiLAotIiAgdG8s IHdoaWNoIGlzIHVzZWZ1bCBmb3IgY29ubmVjdGlvbnMgdG8gaG9zdCBwb29scywgYW5kIGlzIHJl cXVpcmVkIGZvciIsCi0iICBLZXJiZXJvcyBjb25uZWN0aW9ucyB0byBob3N0IHBvb2xzIGFuZCBm b3IgaW5jb21pbmcgY29ubmVjdGlvbnMuICBJZiB0aGUiLAotIiAgb3RoZXIgaG9zdCBkb2VzIG5v dCBoYXZlIGEgRE5TIGVudHJ5LCB0aGUgcmV2ZXJzZSBsb29rdXAgY291bGQgdGFrZSBhIGxvbmci LAotIiAgdGltZSAobWludXRlcykgdG8gZmFpbCwgYnV0IHRoZSBjb25uZWN0aW9uIHdpbGwgc3Rp bGwgYmUgbWFkZS4gIFR1cm4gdGhpcyIsCi0iICBvcHRpb24gT0ZGIGZvciBzcGVlZGllciBjb25u ZWN0aW9ucyBpZiB5b3UgZG8gbm90IG5lZWQgdG8ga25vdyBleGFjdGx5IiwKLSIgIHdoaWNoIGhv c3QgeW91IGFyZSBjb25uZWN0ZWQgdG8gYW5kIHlvdSBhcmUgbm90IHVzaW5nIEtlcmJlcm9zLiAg QVVUTywgdGhlIiwKLSIgIGRlZmF1bHQsIG1lYW5zIHRoZSBsb29rdXAgaXMgZG9uZSBvbiBob3N0 bmFtZXMsIGJ1dCBub3Qgb24gbnVtZXJpYyBJUCIsCi0iICBhZGRyZXNzZXMgdW5sZXNzIEtlcmJl cm9zIHN1cHBvcnQgaXMgaW5zdGFsbGVkLiIsCi0jaWZkZWYgQ0tfRE5TX1NSVgotIiAiLAotIlNF VCBUQ1AgRE5TLVNFUlZJQ0UtUkVDT1JEUyB7T04sIE9GRn0iLAotIiAgVGVsbHMgS2VybWl0IHdo ZXRoZXIgdG8gdHJ5IHRvIHVzZSBETlMgU1JWIHJlY29yZHMgdG8gZGV0ZXJtaW5lIHRoZSIsCi0i ICBob3N0IGFuZCBwb3J0IG51bWJlciB1cG9uIHdoaWNoIHRvIGZpbmQgYW4gYWR2ZXJ0aXNlZCBz ZXJ2aWNlLiAgRm9yIiwKLSIgIGV4YW1wbGUsIGlmIGEgaG9zdCB3YW50cyByZWd1bGFyIFRlbG5l dCBjb25uZWN0aW9ucyByZWRpcmVjdGVkIHRvIHNvbWUiLAotIiAgcG9ydCBvdGhlciB0aGFuIDIz LCB0aGlzIGZlYXR1cmUgYWxsb3dzIEtlcm1pdCB0byBhc2sgdGhlIGhvc3Qgd2hpY2giLAotIiAg cG9ydCBpdCBzaG91bGQgdXNlLiAgU2luY2Ugbm90IGFsbCBkb21haW4gc2VydmVycyBhcmUgc2V0 IHVwIHRvIGFuc3dlciIsCi0iICBzdWNoIHJlcXVlc3RzLCB0aGlzIGZlYXR1cmUgaXMgT0ZGIGJ5 IGRlZmF1bHQuIiwKLSNlbmRpZiAvKiBDS19ETlNfU1JWICovCi0jaWZkZWYgTlQKLSNpZmRlZiBD S19TT0NLUwotIiAiLAotIlNFVCBUQ1AgU09DS1MtU0VSVkVSIFs8aG9zdG5hbWUgb3IgaXAtYWRk cmVzcz5dIiwKLSIgIElmIGEgaG9zdG5hbWUgb3IgaXAtYWRkcmVzcyBpcyBzcGVjaWZpZWQsIEtl cm1pdCB3aWxsIHVzZSB0aGUgU09DS1MiLAotIiAgc2VydmVyIHdoZW4gYXR0ZW1wdGluZyBvdXRn b2luZyBjb25uZWN0aW9ucy4gIElmIG5vIGhvc3RuYW1lIG9yIiwKLSIgIGlwLWFkZHJlc3MgaXMg c3BlY2lmaWVkLCBhbnkgcHJldmlvdXNseSBzcGVjaWZpZWQgU09DS1Mgc2VydmVyIHdpbGwiLAot IiAgYmUgcmVtb3ZlZC4iLAotI2VuZGlmIC8qIENLX1NPQ0tTICovCi0jZW5kaWYgLyogTlQgKi8K LSNpZm5kZWYgTk9IVFRQCi0iICIsCi0iU0VUIFRDUCBIVFRQLVBST1hZIFs8aG9zdG5hbWUgb3Ig aXAtYWRkcmVzcz5bOjxwb3J0Pl1dIiwKLSIgIElmIGEgaG9zdG5hbWUgb3IgaXAtYWRkcmVzcyBp cyBzcGVjaWZpZWQsIEtlcm1pdCB3aWxsIHVzZSB0aGUgUHJveHkiLAotIiAgc2VydmVyIHdoZW4g YXR0ZW1wdGluZyBvdXRnb2luZyBjb25uZWN0aW9ucy4gIElmIG5vIGhvc3RuYW1lIG9yIiwKLSIg IGlwLWFkZHJlc3MgaXMgc3BlY2lmaWVkLCBhbnkgcHJldmlvdXNseSBzcGVjaWZpZWQgUHJveHkg c2VydmVyIHdpbGwiLAotIiAgYmUgcmVtb3ZlZC4gIElmIG5vIHBvcnQgbnVtYmVyIGlzIHNwZWNp ZmllZCwgdGhlIFwiaHR0cFwiIHNlcnZpY2UiLAotIiAgd2lsbCBiZSB1c2VkLiIsCi0jZW5kaWYg LyogTk9IVFRQICovCi0iIn07Ci0jZW5kaWYgLyogTk9UQ1BPUFRTICovCi0jZW5kaWYgLyogTkVU Q09OTiAqLwotCi0jaWZkZWYgVE5DT0RFCi1zdGF0aWMgY2hhciAqaHh5dG9wdFtdID0gewotIlNF VCBURUxPUFQgWyB7IC9DTElFTlQsIC9TRVJWRVIgfSBdIDxvcHRpb24+IC0iLAotIiAgICB7IEFD Q0VQVEVELCBSRUZVU0VELCBSRVFVRVNURUQsIFJFUVVJUkVEIH0gLSIsCi0iICAgIFsgeyBBQ0NF UFRFRCwgUkVGVVNFRCwgUkVRVUVTVEVELCBSRVFVSVJFRCB9IF0iLAotIiAgU0VUIFRFTE9QVCBs ZXRzIHlvdSBzcGVjaWZ5IHBvbGljeSByZXF1aXJlbWVudHMgZm9yIEtlcm1pdCdzIGhhbmRsaW5n IG9mIiwKLSIgIFRlbG5ldCBvcHRpb24gbmVnb3RpYXRpb25zLiAgU2V0dGluZyBhbiBvcHRpb24g UkVRVUlSRUQgY2F1c2VzIEtlcm1pdCIsCi0iICB0byBvZmZlciB0aGUgb3B0aW9uIHRvIHRoZSBw ZWVyIGFuZCBkaXNjb25uZWN0IGlmIHRoZSBvcHRpb24gaXMgcmVmdXNlZC4iLAotIiAgUkVRVUVT VEVEIGNhdXNlcyBLZXJtaXQgdG8gb2ZmZXIgYW4gb3B0aW9uIHRvIHRoZSBwZWVyLiAgQUNDRVBU RUQgcmVzdWx0cyIsCi0iICBpbiBubyBvZmZlciBidXQgS2VybWl0IHdpbGwgYXR0ZW1wdCB0byBu ZWdvdGlhdGUgdGhlIG9wdGlvbiBpZiBpdCBpcyIsCi0iICByZXF1ZXN0ZWQuICBSRUZVU0VEIGlu c3RydWN0cyBLZXJtaXQgdG8gcmVmdXNlIHRoZSBvcHRpb24gaWYgaXQgaXMiLAotIiAgcmVxdWVz dGVkIGJ5IHRoZSBwZWVyLiIsCi0iICIsCi0iICBTb21lIG9wdGlvbnMgYXJlIG5lZ290aWF0ZWQg aW4gdHdvIGRpcmVjdGlvbnMgYW5kIGFjY2VwdCBzZXBhcmF0ZSBwb2xpY2llcyIsCi0iICBmb3Ig ZWFjaCBkaXJlY3Rpb247IHRoZSBmaXJzdCBrZXl3b3JkIGFwcGxpZXMgdG8gS2VybWl0IGl0c2Vs ZiwgdGhlIHNlY29uZCIsCi0iICBhcHBsaWVzIHRvIEtlcm1pdCdzIFRlbG5ldCBwYXJ0bmVyOyBp ZiB0aGUgc2Vjb25kIGtleXdvcmQgaXMgb21pdHRlZCwgYW4iLAotIiAgYXBwcm9wcmlhdGUgKG9w dGlvbi1zcGVjaWZpYykgZGVmYXVsdCBpcyBhcHBsaWVkLiAgWW91IGNhbiBhbHNvIGluY2x1ZGUg YSIsCi0iICAvQ0xJRU5UIG9yIC9TRVJWRVIgc3dpdGNoIHRvIGluZGljYXRlIHdoZXRoZXIgdGhl IGdpdmVuIHBvbGljaWVzIGFwcGx5IiwKLSIgIHdoZW4gS2VybWl0IGlzIHRoZSBUZWxuZXQgY2xp ZW50IG9yIHRoZSBUZWxuZXQgc2VydmVyOyBpZiBubyBzd2l0Y2ggaXMiLAotIiAgZ2l2ZW4sIHRo ZSBjb21tYW5kIGFwcGxpZXMgdG8gdGhlIGNsaWVudC4iLAotIiAiLAotIiAgTm90ZSB0aGF0IHNv bWUgb2YgS2VybWl0J3MgVGVsbmV0IHBhcnRuZXJzIGZhaWwgdG8gcmVmdXNlIG9wdGlvbnMgdGhh dCIsCi0iICB0aGV5IGRvIG5vdCByZWNvZ25pemUgYW5kIGluc3RlYWQgZG8gbm90IHJlc3BvbmQg YXQgYWxsLiAgSW4gdGhpcyBjYXNlIGl0IiwKLSIgIGlzIHBvc3NpYmxlIHRvIHVzZSBTRVQgVEVM T1BUIHRvIGluc3RydWN0IEtlcm1pdCB0byBSRUZVU0UgdGhlIG9wdGlvbiIsCi0iICBiZWZvcmUg Y29ubmVjdGluZyB0byB0aGUgcHJvYmxlbSBob3N0LCB0aHVzIHNraXBwaW5nIHRoZSBwcm9ibGVt YXRpYyIsCi0iICBuZWdvdGlhdGlvbi4iLAotIiAiLAotIiAgVXNlIFNIT1cgVEVMT1BUIHRvIHZp ZXcgY3VycmVudCBUZWxuZXQgT3B0aW9uIG5lZ290aWF0aW9uIHNldHRpbmdzLiIsCi0iICBTSE9X IFRFTE5FVCBkaXNwbGF5cyBjdXJyZW50IFRlbG5ldCBzZXR0aW5ncy4iLAotIiJ9OwotCi1zdGF0 aWMgY2hhciAqaHh5dGVsW10gPSB7Ci0iU3ludGF4OiBTRVQgVEVMTkVUIHBhcmFtZXRlciB2YWx1 ZSIsCi0iICIsCi0iRm9yIFRDUC9JUCBURUxORVQgY29ubmVjdGlvbnMsIHdoaWNoIGFyZSBpbiBO VlQgKEFTQ0lJKSBtb2RlIGJ5IGRlZmF1bHQ6IiwKLSIgIiwKLSNpZmRlZiBDS19BVVRIRU5USUNB VElPTgotI2lmZGVmIENPTU1FTlQKLSJTRVQgVEVMTkVUIEFVVEhFTklDQVRJT04geyBBQ0NFUFRF RCwgUkVGVVNFRCwgUkVRVUVTVEVELCBSRVFVSVJFRCB9IiwKLSIgIEFDQ0VQVCBvciBSRUZVU0Ug YXV0aGVudGljYXRpb24gYmlkcywgb3IgYWN0aXZlbHkgUkVRVUVTVCBhdXRoZW50aWNhdGlvbi4i LAotIiAgUkVRVUlSRUQgcmVmdXNlcyB0aGUgY29ubmVjdGlvbiBpZiBhdXRoZW50aWNhdGlvbiBp cyBub3Qgc3VjY2Vzc2Z1bGx5IiwKLSIgIG5lZ290aWF0ZWQuICBBQ0NFUFRFRCBieSBkZWZhdWx0 LiIsCi0iICIsCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotIlNFVCBURUxORVQgQVVUSEVOVElDQVRJ T04gVFlQRSB7IEFVVE9NQVRJQywgS0VSQkVST1NfSVYsIEtFUkJFUk9TX1YsIC4uLiIsCi0jaWZk ZWYgTlQKLSIgIC4uLiwgTlRMTSwgU1NMLCBTUlAsIE5PTkUgfSBbLi4uXSIsCi0jZWxzZSAvKiBO VCAqLwotIiAgLi4uLCBTU0wsIFNSUCwgTk9ORSB9IFsuLi5dIiwKLSNlbmRpZiAvKiBOVCAqLwot IiAgQVVUT01BVElDIGlzIHRoZSBkZWZhdWx0LiAgQXZhaWxhYmxlIG9wdGlvbnMgY2FuIHZhcnkg ZGVwZW5kaW5nIG9uIHRoZSIsCi0iICBmZWF0dXJlcyBLZXJtaXQgd2FzIGJ1aWx0IHRvIHN1cHBv cnQgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtIiwKLSIgIGNvbmZpZ3VyYXRpb247IHR5cGUgU0VU IFRFTE5FVCBBVVRIRU5USUNBVElPTiBUWVBFID8gZm9yIGEgbGlzdC4iLAotIiAiLAotIiAgV2hl biBLZXJtaXQgaXMgdGhlIFRlbG5ldCBjbGllbnQ6IiwKLSIgICAgQVVUT01BVElDIGFsbG93cyB0 aGUgaG9zdCB0byBjaG9vc2UgdGhlIHByZWZlcnJlZCB0eXBlIG9mIGF1dGhlbnRpY2F0aW9uLiIK LSwKLSIgICAgTk9ORSBpbnN0cnVjdHMgS2VybWl0IHRvIHJlZnVzZSBhbGwgYXV0aGVudGljYXRp b24gbWV0aG9kcyB3aGVuIHRoZSIsCi0iICAgIGF1dGhlbnRpY2F0aW9uIG9wdGlvbiBpcyBuZWdv dGlhdGVkLiAgQSBsaXN0IG9mIG9uZSBvciBtb3JlIG90aGVyIHZhbHVlcyIsCi0iICAgIGFsbG93 IGEgc3BlY2lmaWMgc3Vic2V0IG9mIHRoZSBzdXBwb3J0ZWQgYXV0aGVudGljYXRpb24gbWV0aG9k cyB0byBiZSIsCi0iICAgIHVzZWQuIiwKLSIgIiwKLSIgIFdoZW4gS2VybWl0IGlzIHRoZSBUZWxu ZXQgc2VydmVyOiIsCi0iICAgIEFVVE9NQVRJQyByZXN1bHRzIGluIGF2YWlsYWJsZSBhdXRoZW50 aWNhdGlvbiBtZXRob2RzIGJlaW5nIG9mZmVyZWQiLAotIiAgICB0byB0aGUgdGVsbmV0IGNsaWVu dCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOiIsCi0iICIsCi0jaWZkZWYgTlQKLSIgICAgICBLRVJC RVJPU19WLCBLRVJCRVJPU19JViwgU1JQLCBTU0wsIE5UTE0iLAotI2Vsc2UgLyogTlQgKi8KLSIg ICAgICBLRVJCRVJPU19WLCBLRVJCRVJPU19JViwgU1JQLCBTU0wsIE5UTE0iLAotI2VuZGlmIC8q IE5UICovCi0iICIsCi0iICBOT05FIHJlc3VsdHMgaW4gbm8gYXV0aGVudGljYXRpb24gbWV0aG9k cyBiZWluZyBvZmZlcmVkIHRvIHRoZSBUZWxuZXQiLAotIiAgc2VydmVyIHdoZW4gdGhlIGF1dGhl bnRpY2F0aW9uIG9wdGlvbiBpcyBuZWdvdGlhdGVkLiAgVGhlIHByZWZlcnJlZCIsCi0iICBtZXRo b2Qgb2YgZGlzYWJsaW5nIGF1dGhlbnRpY2F0aW9uIGlzOiIsCi0iICIsCi0iICAgIFNFVCBURUxP UFQgL1NFUlZFUiBBVVRIRU5USUNBVElPTiBSRUZVU0UiLAotIiAiLAotIiAgQSBsaXN0IG9mIG9u ZSBvciBtb3JlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgc3BlY2lmaWVzIHRoZSBvcmRlciB0aG9z ZSIsCi0iICBtZXRob2RzIGFyZSB0byBiZSBvZmZlcmVkIHRvIHRoZSB0ZWxuZXQgY2xpZW50LiIs Ci0jaWZkZWYgTlQKLSIgIiwKLSIgIElmIHlvdSB3aXNoIHRvIGFsbG93IE5UTE0gYXV0aGVudGlj YXRpb24gdG8gYmUgdXNlZCB3aXRoIHRoZSBNaWNyb3NvZnQiLAotIiAgV2luZG93cyAyMDAwIG9y IFNlcnZpY2VzIGZvciBVbml4IFRlbG5ldCBjbGllbnQgeW91IG11c3Qgc3BlY2lmeSBhIGxpc3Qi LAotIiAgd2l0aCBOVExNIGFzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiAgQnkgZGVmYXVs dCwgTlRMTSBpcyB0aGUgbGFzdCIsCi0iICBpdGVtIGluIHRoZSBsaXN0IGJlY2F1c2UgaXQgZG9l cyBub3QgcHJvdmlkZSBhbnkgZm9ybSBvZiBkYXRhIGVuY3J5cHRpb24uIiwKLSNlbmRpZiAvKiBO VCAqLwotIiAiLAotI2lmZGVmIENLX0tFUkJFUk9TCi0iU0VUIFRFTE5FVCBBVVRIRU5USUNBVElP TiBGT1JXQVJESU5HIHsgT04sIE9GRiB9IiwKLSIgIFNldCB0aGlzIHRvIE9OIHRvIGZvcndhcmQg S2VyYmVyb3MgViB0aWNrZXQtZ3JhbnRpbmctdGlja2V0cyB0byB0aGUgaG9zdCIsCi0iICBhZnRl ciBhdXRoZW50aWNhdGlvbiBpcyBjb21wbGV0ZS4gIE9GRiBieSBkZWZhdWx0LiIsCi0iICIsCi0j ZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSJTRVQgVEVMTkVUIEFVVEhFTlRJQ0FUSU9OIEVOQ1JZ UFQtRkxBRyB7IEFOWSwgTk9ORSwgVEVMT1BUIH0iLAotIiAgVXNlIHRoaXMgY29tbWFuZCB0byBz cGVjaWZ5IHdoaWNoIEFVVEggdGVsb3B0IGVuY3J5cHRpb24gZmxhZ3MgbWF5IGJlIiwKLSIgIGFj Y2VwdGVkIGluIGNsaWVudCBtb2RlIG9yIG9mZmVyZWQgaW4gc2VydmVyIG1vZGUuICBUaGUgZGVm YXVsdCBpcyBBTlkuIiwKLSIgIiwKLSJTRVQgVEVMTkVUIEFVVEhFTlRJQ0FUSU9OIEhPVy1GTEFH IHsgQU5ZLCBPTkUtV0FZLCBNVVRVQUwgfSIsCi0iICBVc2UgdGhpcyBjb21tYW5kIHRvIHNwZWNp Znkgd2hpY2ggQVVUSCB0ZWxvcHQgaG93IGZsYWdzIG1heSBiZSIsCi0iICBhY2NlcHRlZCBpbiBj bGllbnQgbW9kZSBvciBvZmZlcmVkIGluIHNlcnZlciBtb2RlLiAgVGhlIGRlZmF1bHQgaXMgQU5Z LiIsCi0iICIsCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNpZmRlZiBDT01NRU5U Ci0iU0VUIFRFTE5FVCBCSU5BUlktTU9ERSB7IEFDQ0VQVEVELCBSRUZVU0VELCBSRVFVRVNURUQs IFJFUVVJUkVEIH0iLAotIiAgQUNDRVBUIG9yIFJFRlVTRSBiaW5hcnktbW9kZSBiaWRzLCBvciBh Y3RpdmVseSBSRVFVRVNUIGJpbmFyeSBtb2RlLiIsCi0iICBSRVFVSVJFRCByZWZ1c2VzIHRoZSBj b25uZWN0aW9uIGlmIGJpbmFyeSBtb2RlIGlzIG5vdCBzdWNjZXNzZnVsbHkiLAotIiAgbmVnb3Rp YXRlZCBpbiBib3RoIGRpcmVjdGlvbnMuICBBQ0NFUFRFRCBieSBkZWZhdWx0LiIsCi0iICIsCi0j ZW5kaWYgLyogQ09NTUVOVCAqLwotIlNFVCBURUxORVQgQklOQVJZLVRSQU5TRkVSLU1PREUgeyBP TiwgT0ZGIH0iLAotIiAgV2hlbiBPTiAoT0ZGIGJ5IGRlZmF1bHQpIGFuZCBCSU5BUlkgbmVnb3Rp YXRpb25zIGFyZSBub3QgUkVGVVNFRCBLZXJtaXQiLAotIiAgd2lsbCBhdHRlbXB0IHRvIG5lZ290 aWF0ZSBCSU5BUlkgbW9kZSBpbiBlYWNoIGRpcmVjdGlvbiBiZWZvcmUgdGhlIHN0YXJ0IiwKLSIg IG9mIGVhY2ggZmlsZSB0cmFuc2Zlci4gIEFmdGVyIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZSBC SU5BUlkgbW9kZSB3aWxsIiwKLSIgIGJlIHJlc3RvcmVkIHRvIHRoZSBwcmUtdHJhbnNmZXIgc3Rh dGUuIiwKLSIgIiwKLSJTRVQgVEVMTkVUIEJJTkFSWS1UUkFOU0ZFUi1NT0RFIHsgT04sIE9GRiB9 IiwKLSIgIFNldCB0aGlzIGNvbW1hbmQgdG8gT04gaWYgeW91IHdhbnQgdG8gZm9yY2UgS2VybWl0 IHRvIG5lZ290aWF0ZSIsCi0iICBUZWxuZXQgQmluYXJ5IGluIGJvdGggZGlyZWN0aW9ucyB3aGVu IHBlcmZvcm1pbmcgZmlsZSB0cmFuc2ZlcnMuIiwKLSIgIERlZmF1bHQgaXMgT0ZGLiAgQWxpYXMg U0VUIFRFTE5FVCBCSU5BUlktWEZFUi1NT0RFLiIsCi0iICIsCi0iU0VUIFRFTE5FVCBCVUcgQVVU SC1LUkI1LURFUyB7IE9OLCBPRkYgfSIsCi0iICBEZWZhdWx0IGlzIE9OLiAgRGlzYWJsZSB0aGlz IGJ1ZyB0byBlbmFibGUgdGhlIHVzZSBvZiBlbmNyeXB0aW9uIHR5cGVzIiwKLSIgIG90aGVyIHRo YW4gREVTIHN1Y2ggYXMgM0RFUyBvciBDQVNULTEyOCB3aGVuIHRoZSBLZXJiZXJvcyA1IHNlc3Np b24ga2V5IiwKLSIgIGlzIGxvbmdlciB0aGFuIDggYnl0ZXMuIiwKLSIgIiwKLSJTRVQgVEVMTkVU IEJVRyBCSU5BUlktTUUtTUVBTlMtVS1UT08geyBPTiwgT0ZGIH0iLAotIiAgU2V0IHRoaXMgdG8g T04gdG8gdHJ5IHRvIG92ZXJjb21lIFRFTE5FVCBiaW5hcnktbW9kZSBtaXNuZWdvdGlhdGlvbnMg YnkiLAotIiAgS2VybWl0J3MgVEVMTkVUIHBhcnRuZXIuIiwKLSIgIiwKLSJTRVQgVEVMTkVUIEJV RyBCSU5BUlktVS1NRUFOUy1NRS1UT08geyBPTiwgT0ZGIH0iLAotIiAgU2V0IHRoaXMgdG8gT04g dG8gdHJ5IHRvIG92ZXJjb21lIFRFTE5FVCBiaW5hcnktbW9kZSBtaXNuZWdvdGlhdGlvbnMgYnki LAotIiAgS2VybWl0J3MgVEVMTkVUIHBhcnRuZXIuIiwKLSIgIiwKLSJTRVQgVEVMTkVUIEJVRyBJ TkZJTklURS1MT09QLUNIRUNLIHsgT04sIE9GRiB9IiwKLSIgIFNldCB0aGlzIHRvIE9OIHRvIHBy ZXZlbnQgS2VybWl0IGZyb20gcmVzcG9uZGluZyB0byBhIHRlbG5ldCBuZWdvdGlhdGlvbiIsCi0i ICBzZXF1ZW5jZSB0aGF0IGVudGVycyBhbiBpbmZpbml0ZSBsb29wLiAgVGhlIGRlZmF1bHQgaXMg T0ZGIGJlY2F1c2UgdGhpcyIsCi0iICBzaG91bGQgbmV2ZXIgb2NjdXIuIiwKLSIgIiwKLSJTRVQg VEVMTkVUIEJVRyBTQi1JTVBMSUVTLVdJTEwtRE8geyBPTiwgT0ZGIH0iLAotIiAgU2V0IHRoaXMg dG8gT04gdG8gYWxsb3cgS2VybWl0IHRvIHJlc3BvbmQgdG8gdGVsbmV0IHN1Yi1uZWdvdGlhdGlv bnMgaWYiLAotIiAgdGhlIHBlZXIgZm9yZ2V0cyB0byByZXNwb25kIHRvIFdJTEwgd2l0aCBETyBv ciB0byBETyB3aXRoIFdJTEwuIiwKLSIgIiwKLSJTRVQgVEVMTkVUIERFQlVHIHsgT04sIE9GRiB9 IiwKLSIgIFNldCB0aGlzIHRvIE9OIHRvIGRpc3BsYXkgdGVsbmV0IG5lZ290aWF0aW9ucyBhcyB0 aGV5IGFyZSBzZW50IGFuZCIsCi0iICByZWNlaXZlZC4iLAotIiAiLAotIlNFVCBURUxORVQgREVM QVktU0IgeyBPTiwgT0ZGIH0iLAotIiAgV2hlbiBPTiwgdGVsbmV0IHN1Ym5lZ290aWF0aW9uIHJl c3BvbnNlcyBhcmUgZGVsYXllZCB1bnRpbCBhZnRlciBhbGwiLAotIiAgYXV0aGVudGljYXRpb24g YW5kIGVuY3J5cHRpb24gb3B0aW9ucyBhcmUgZWl0aGVyIHN1Y2Nlc3NmdWxseSBuZWdvdGlhdGVk IiwKLSIgIG9yIHJlZnVzZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHByaXZhdGUgZGF0YSBpcyBwcm90 ZWN0ZWQuICBXaGVuIE9GRiwgdGVsbmV0IiwKLSIgIHN1Ym5lZ290aWF0aW9uIHJlc3BvbnNlcyBh cmUgc2VudCBpbW1lZGlhdGVseS4gIFRoZSBkZWZhdWx0IGlzIE9OLiIsCi0iICIsCi0iU0VUIFRF TE5FVCBFQ0hPIHsgTE9DQUwsIFJFTU9URSB9IiwKLSIgIEtlcm1pdCdzIGluaXRpYWwgZWNob2lu ZyBzdGF0ZSBmb3IgVEVMTkVUIGNvbm5lY3Rpb25zLCBMT0NBTCBieSBkZWZhdWx0LiIsCi0iICBB ZnRlciB0aGUgY29ubmVjdGlvbiBpcyBtYWRlLCBURUxORVQgbmVnb3RpYXRpb25zIGRldGVybWlu ZSB0aGUgZWNob2luZy4iLAotIiAiLAotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSNpZmRlZiBDT01N RU5UCi0iU0VUIFRFTE5FVCBFTkNSWVBUSU9OIHsgQUNDRVBURUQsIFJFRlVTRUQsIFJFUVVFU1RF RCwgUkVRVUlSRUQgfSIsCi0iICBBQ0NFUFQgb3IgUkVGVVNFIGVuY3J5cHRpb24gYmlkcywgb3Ig YWN0aXZlbHkgUkVRVUVTVCBlbmNyeXB0aW9uIGluIGJvdGguIiwKLSIgIGRpcmVjdGlvbnMuICBS RVFVSVJFRCByZWZ1c2VzIHRoZSBjb25uZWN0aW9uIGlmIGVuY3J5cHRpb24gaXMgbm90IiwKLSIg IHN1Y2Nlc3NmdWxseSBuZWdvdGlhdGVkIGluIGJvdGggZGlyZWN0aW9ucy4gIEFDQ0VQVEVEIGJ5 IGRlZmF1bHQuIiwKLSIgIiwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0iU0VUIFRFTE5FVCBFTkNS WVBUSU9OIFRZUEUgeyBBVVRPTUFUSUMsIENBU1QxMjhfQ0ZCNjQsIENBU1QxMjhfT0ZCNjQsICIs Ci0iICBDQVNUNV80MF9DRkI2NCwgQ0FTVDVfNDBfT0ZCNjQsIERFU19DRkI2NCwgREVTX09GQjY0 LCBOT05FIH0iLAotIiAgQVVUT01BVElDIGFsbG93cyB0aGUgaG9zdCB0byBjaG9vc2UgdGhlIHBy ZWZlcnJlZCB0eXBlIG9mIGVuY3J5cHRpb24uIiwKLSIgIE90aGVyIHZhbHVlcyBhbGxvdyBhIHNw ZWNpZmljIGVuY3J5cHRpb24gbWV0aG9kIHRvIGJlIHNwZWNpZmllZC4iLAotIiAgQVVUT01BVElD IGlzIHRoZSBkZWZhdWx0LiAgVGhlIGxpc3Qgb2Ygb3B0aW9ucyB3aWxsIHZhcnkgZGVwZW5kaW5n IiwKLSIgIG9uIHRoZSBlbmNyeXB0aW9uIHR5cGVzIHNlbGVjdGVkIGF0IGNvbXBpbGF0aW9uIHRp bWUuIiwKLSIgIiwKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tfRU5WSVJP Tk1FTlQKLSNpZmRlZiBDT01NRU5UCi0iU0VUIFRFTE5FVCBFTlZJUk9OTUVOVCB7IE9OLCBPRkYs IHZhcmlhYmxlLW5hbWUgWyB2YWx1ZSBdIH0iLAotIiAgVGhpcyBmZWF0dXJlIGxldHMgS2VybWl0 IHNlbmQgdGhlIHZhbHVlcyBvZiBjZXJ0YWluIGVudmlyb25tZW50IHZhcmlhYmxlcyIsCi0iICB0 byB0aGUgb3RoZXIgY29tcHV0ZXIgaWYgaXQgYXNrcyBmb3IgdGhlbS4gIFRoZSB2YXJpYWJsZS1u YW1lIGNhbiBiZSBhbnkiLAotIiAgb2YgdGhlIFwid2VsbC1rbm93blwiIHZhcmlhYmxlcyBcIlVT RVJcIiwgXCJKT0JcIiwgXCJBQ0NUXCIsIFwiUFJJTlRFUlwiLCIsCi0iICBcIlNZU1RFTVRZUEVc Iiwgb3IgXCJESVNQTEFZXCIuICBTb21lIFRlbG5ldCBzZXJ2ZXJzLCBpZiBnaXZlbiBhIFVTRVIi LAotIiAgdmFsdWUgaW4gdGhpcyB3YXksIHdpbGwgYWNjZXB0IGl0IGFuZCB0aGVyZWZvcmUgbm90 IHByb21wdCB5b3UgZm9yIHVzZXIiLAotIiAgbmFtZSB3aGVuIHlvdSBsb2cgaW4uICBUaGUgZGVm YXVsdCB2YWx1ZXMgYXJlIHRha2VuIGZyb20geW91ciBlbnZpcm9ubWVudDsiLAotIiAgdXNlIHRo aXMgY29tbWFuZCB0byBjaGFuZ2Ugb3IgcmVtb3ZlIHRoZW0uICBTZWUgUkZDMTU3MiBmb3IgZGV0 YWlscy4gIFlvdSIsCi0iICBtYXkgYWxzbyBzcGVjaWZ5IE9GRiB0byBkaXNhYmxlIHRoaXMgZmVh dHVyZSwgYW5kIE9OIHRvIHJlLWVuYWJsZSBpdC4iLAotIiAiLAotI2Vsc2UKLSJTRVQgVEVMTkVU IEVOVklST05NRU5UIHsgdmFyaWFibGUtbmFtZSBbIHZhbHVlIF0gfSIsCi0iICBUaGlzIGZlYXR1 cmUgbGV0cyBLZXJtaXQgc2VuZCB0aGUgdmFsdWVzIG9mIGNlcnRhaW4gZW52aXJvbm1lbnQgdmFy aWFibGVzIiwKLSIgIHRvIHRoZSBvdGhlciBjb21wdXRlciBpZiBpdCBhc2tzIGZvciB0aGVtLiAg VGhlIHZhcmlhYmxlLW5hbWUgY2FuIGJlIGFueSIsCi0iICBvZiB0aGUgXCJ3ZWxsLWtub3duXCIg dmFyaWFibGVzIFwiVVNFUlwiLCBcIkpPQlwiLCBcIkFDQ1RcIiwgXCJQUklOVEVSXCIsIiwKLSIg IFwiU1lTVEVNVFlQRVwiLCBvciBcIkRJU1BMQVlcIi4gIFNvbWUgVGVsbmV0IHNlcnZlcnMsIGlm IGdpdmVuIGEgVVNFUiIsCi0iICB2YWx1ZSBpbiB0aGlzIHdheSwgd2lsbCBhY2NlcHQgaXQgYW5k IHRoZXJlZm9yZSBub3QgcHJvbXB0IHlvdSBmb3IgdXNlciIsCi0iICBuYW1lIHdoZW4geW91IGxv ZyBpbi4gIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgdGFrZW4gZnJvbSB5b3VyIGVudmlyb25tZW50 OyIsCi0iICB1c2UgdGhpcyBjb21tYW5kIHRvIGNoYW5nZSBvciByZW1vdmUgdGhlbS4gIFNlZSBS RkMxNTcyIGZvciBkZXRhaWxzLiIsCi0iICIsCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlm IC8qIENLX0VOVklST05NRU5UICovCi0jaWZkZWYgQ0tfRk9SV0FSRF9YCi0iU0VUIFRFTE5FVCBG T1JXQVJELVggWEFVVEhPUklUWS1GSUxFIDxmaWxlPiIsCi0iICBJZiB5b3VyIFggU2VydmVyIHJl cXVpcmVzIFggYXV0aGVudGljYXRpb24gYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUiLAotIiAgLlhh dXRob3JpdHkgZmlsZSBpcyBub3QgZGVmaW5lZCBieSB0aGUgWEFVVEhPUklUWSBlbnZpcm9ubWVu dCB2YXJpYWJsZSwiLAotIiAgdXNlIHRoaXMgY29tbWFuZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlv biBvZiB0aGUgLlhhdXRob3JpdHkgZmlsZS4iCi0iICAiLAotI2VuZGlmIC8qIENLX0ZPUldBUkRf WCAqLwotI2lmZGVmIENLX1NORExPQwotIlNFVCBURUxORVQgTE9DQVRJT04gWyB0ZXh0IF0iLAot IiAgTG9jYXRpb24gc3RyaW5nIHRvIHNlbmQgdG8gdGhlIFRlbG5ldCBzZXJ2ZXIgaWYgaXQgYXNr cy4gIEJ5IGRlZmF1bHQgdGhpcyIsCi0iICBpcyBwaWNrZWQgdXAgZnJvbSB0aGUgTE9DQVRJT04g ZW52aXJvbm1lbnQgdmFyaWFibGUuICBHaXZlIHRoaXMgY29tbWFuZCIsCi0iICB3aXRoIG5vIHRl eHQgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuIiwKLSIgIiwKLSNlbmRpZiAvKiBDS19TTkRMT0Mg Ki8KLSJTRVQgVEVMTkVUIE5FV0xJTkUtTU9ERSB7IE5WVCwgQklOQVJZLU1PREUgfSB7IE9GRiwg T04sIFJBVyB9IiwKLQotIiAgRGV0ZXJtaW5lcyBob3cgY2FycmlhZ2UgcmV0dXJucyBhcmUgaGFu ZGxlZCBvbiBURUxORVQgY29ubmVjdGlvbnMuICBUaGVyZSIsCi0iICBhcmUgc2VwYXJhdGUgc2V0 dGluZ3MgZm9yIE5WVCAoQVNDSUkpIG1vZGUgYW5kIGJpbmFyeSBtb2RlLiAgT04gKGRlZmF1bHQi LAotIiAgZm9yIE5WVCBtb2RlKSBtZWFucyBDUkxGIHJlcHJlc2VudHMgQ1IuICBPRkYgbWVhbnMg Q1IgZm9sbG93ZWQgYnkgTlVMIiwKLSIgIHJlcHJlc2VudHMgQ1IuICBSQVcgKGRlZmF1bHQgZm9y IEJJTkFSWSBtb2RlKSBtZWFucyBDUiBzdGFuZHMgZm9yIGl0c2VsZi4iLAotIiAiLAotI2lmZGVm IFRDUFNPQ0tFVAotIlNFVCBURUxORVQgUFJPTVBULUZPUi1VU0VSSUQgPHByb21wdD4iLAotIiAg U3BlY2lmaWVzIGEgY3VzdG9tIHByb21wdCB0byBiZSB1c2VkIHdoZW4gcHJvbXB0aW5nIGZvciBh IHVzZXJpZC4gIEtlcm1pdCIsCi0iICBwcm9tcHRzIGZvciBhIHVzZXJpZCBpZiB0aGUgY29tbWFu ZDoiLAotIiAiLAotIiAgICBTRVQgTE9HSU4gVVNFUklEIHt9IiwKLSIgIiwKLSIgIGhhcyBiZWVu IGlzc3VlZCBwcmlvciB0byBhIFRlbG5ldCBhdXRoZW50aWNhdGlvbiBuZWdvdGlhdGlvbiBmb3Ig YW4iLAotIiAgYXV0aGVudGljYXRpb24gdHlwZSB0aGF0IHJlcXVpcmVzIHRoZSB0cmFuc21pc3Np b24gb2YgYSBuYW1lLCBzdWNoIGFzIiwKLSIgIFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQuIiwKLSIg IiwKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSJTRVQgVEVMTkVUIFJFTU9URS1FQ0hPIHsgT04s IE9GRiB9IiwKLSIgIEFwcGxpZXMgb25seSB0byBpbmNvbWluZyBjb25uZWN0aW9ucyBjcmVhdGVk IHdpdGg6IiwKLSIgICAgU0VUIEhPU1QgKiA8cG9ydD4gL1RFTE5FVCIsCi0iICBUaGlzIGNvbW1h bmQgZGV0ZXJtaW5lcyB3aGV0aGVyIEtlcm1pdCB3aWxsIGFjdHVhbGx5IGVjaG8gY2hhcmFjdGVy cyIsCi0iICByZWNlaXZlZCBmcm9tIHRoZSByZW1vdGUgd2hlbiBpdCBoYXMgbmVnb3RpYXRlZCB0 byBkbyBzby4gIFRoZSBkZWZhdWx0IiwKLSIgIGlzIE9OLiAgUmVtb3RlIGVjaG9pbmcgbWF5IGJl IHR1cm5lZCBvZmYgd2hlbiBpdCBpcyBuZWNlc3NhcnkgdG8gcmVhZCIsCi0iICBhIHBhc3N3b3Jk IHdpdGggdGhlIElOUFVUIGNvbW1hbmQuIiwKLSIgIiwKLSJTRVQgVEVMTkVUIFRFUk1JTkFMLVRZ UEUgbmFtZSIsCi0iICBUaGUgdGVybWluYWwgdHlwZSB0byBzZW5kIHRvIHRoZSByZW1vdGUgVEVM TkVUIGhvc3QuICBJZiBub25lIGlzIGdpdmVuLCIsCi0jaWZkZWYgT1MyCi0iICB5b3VyIGN1cnJl bnQgU0VUIFRFUk1JTkFMIFRZUEUgdmFsdWUgaXMgc2VudCwgZS5nLiBWVDIyMC4iLAotIiAiLAot I2Vsc2UKLSIgIHlvdXIgbG9jYWwgdGVybWluYWwgdHlwZSBpcyBzZW50LiIsCi0iICIsCi0jZW5k aWYgLyogT1MyICovCi0iU0VUIFRFTE5FVCBXQUlULUZPUi1ORUdPVElBVElPTlMgeyBPTiwgT0ZG IH0iLAotIiAgRWFjaCBUZWxuZXQgb3B0aW9uIG11c3QgYmUgZnVsbHkgbmVnb3RpYXRlZCBlaXRo ZXIgT24gb3IgT2ZmIGJlZm9yZSB0aGUiLAotIiAgc2Vzc2lvbiBjYW4gY29udGludWUuICBUaGlz IGlzIGVzcGVjaWFsbHkgdHJ1ZSB3aXRoIG9wdGlvbnMgdGhhdCByZXF1aXJlIiwKLSIgIHN1Ym5l Z290aWF0aW9ucyBzdWNoIGFzIEF1dGhlbnRpY2F0aW9uLCBFbmNyeXB0aW9uLCBhbmQgS2VybWl0 OyBmb3IiLAotIiAgcHJvcGVyIHN1cHBvcnQgb2YgdGhlc2Ugb3B0aW9ucyBLZXJtaXQgbXVzdCB3 YWl0IGZvciB0aGUgbmVnb3RpYXRpb25zIHRvIiwKLSIgIGNvbXBsZXRlLiAgT2YgY291cnNlLCBL ZXJtaXQgaGFzIG5vIHdheSBvZiBrbm93aW5nIHdoZXRoZXIgYSByZXBseSBpcyIsCi0iICBkZWxh eWVkIG9yIG5vdCBjb21pbmcgYXQgYWxsLCBhbmQgc28gd2lsbCB3YWl0IGEgbWludXRlIG9yIG1v cmUgZm9yIiwKLSIgIHJlcXVpcmVkIHJlcGxpZXMgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIHNlc3Np b24uICBJZiB5b3Uga25vdyB0aGF0IEtlcm1pdCdzIiwKLSIgIFRlbG5ldCBwYXJ0bmVyIHdpbGwg bm90IGJlIHNlbmRpbmcgdGhlIHJlcXVpcmVkIHJlcGxpZXMsIHlvdSBjYW4gc2V0IHRoaXMiLAot IiAgb3B0aW9uIG9mIE9GRiB0byBhdm9pZCB0aGUgbG9uZyB0aW1lb3V0cy4gIE9yIHlvdSBjYW4g aW5zdHJ1Y3QgS2VybWl0IHRvIiwKLSIgIFJFRlVTRSBzcGVjaWZpYyBvcHRpb25zIHdpdGggdGhl IFNFVCBURUxPUFQgY29tbWFuZC4iLAotIiIsCi0iVHlwZSBTSE9XIFRFTE5FVCB0byBzZWUgdGhl IGN1cnJlbnQgdmFsdWVzIG9mIHRoZXNlIHBhcmFtZXRlcnMuIiwKLSIiIH07Ci0jZW5kaWYgLyog VE5DT0RFICovCi0KLSNpZm5kZWYgTk9TUEwKLXN0YXRpYyBjaGFyICpoeHltYWNyW10gPSB7Ci0i U3ludGF4OiBTRVQgTUFDUk8gcGFyYW1ldGVyIHZhbHVlIiwKLSIgIENvbnRyb2xzIHRoZSBiZWhh dmlvciBvZiBtYWNyb3MuIiwKLSIgIiwKLSJTRVQgTUFDUk8gRUNITyB7IE9OLCBPRkYgfSIsCi0i ICBUZWxscyB3aGV0aGVyIGNvbW1hbmRzIGV4ZWN1dGVkIGZyb20gYSBtYWNybyBkZWZpbml0aW9u IHNob3VsZCBiZSIsCi0iICBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbi4gIE9GRiBieSBkZWZhdWx0 OyB1c2UgT04gZm9yIGRlYnVnZ2luZy4iLAotIiAiLAotIlNFVCBNQUNSTyBFUlJPUiB7IE9OLCBP RkYgfSIsCi0iICBUZWxscyB3aGV0aGVyIGEgbWFjcm8gc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkg dGVybWluYXRlZCB1cG9uIGEgY29tbWFuZCIsCi0iICBlcnJvci4gIFRoaXMgc2V0dGluZyBpcyBs b2NhbCB0byB0aGUgY3VycmVudCBtYWNybywgYW5kIGluaGVyaXRlZCBieSIsCi0iICBzdWJvcmRp bmF0ZSBtYWNyb3MuIiwKLSIiIH07Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotc3RhdGljIGNoYXIg KmhteHlwcm1bXSA9IHsKLSJTeW50YXg6IFNFVCBQUk9NUFQgWyB0ZXh0IF0iLAotIiAiLAotI2lm ZGVmIE9TMgotIlByb21wdCB0ZXh0IGZvciB0aGlzIHByb2dyYW0sIG5vcm1hbGx5ICdLLTk1Picu ICBNYXkgY29udGFpbiBiYWNrc2xhc2giLAotI2Vsc2UKLSNpZmRlZiBNQUMKLSJQcm9tcHQgdGV4 dCBmb3IgdGhpcyBwcm9ncmFtLCBub3JtYWxseSAnTWFjLUtlcm1pdD4nLiAgTWF5IGNvbnRhaW4g YmFja3NsYXNoIiwKLSNlbHNlCi0iUHJvbXB0IHRleHQgZm9yIHRoaXMgcHJvZ3JhbSwgbm9ybWFs bHkgJ0MtS2VybWl0PicuICBNYXkgY29udGFpbiBiYWNrc2xhc2giLAotI2VuZGlmIC8qIE1BQyAq LwotI2VuZGlmIC8qIE9TMiAqLwotImNvZGVzIGZvciBzcGVjaWFsIGVmZmVjdHMuICBTdXJyb3Vu ZCBieSB7IH0gdG8gcHJlc2VydmUgbGVhZGluZyBvciB0cmFpbGluZyIsCi0jaWZkZWYgT1MyCi0i c3BhY2VzLiAgSWYgdGV4dCBvbWl0dGVkLCBwcm9tcHQgcmV2ZXJ0cyB0byBLLTk1Pi4gIFByb21w dCBjYW4gaW5jbHVkZSIsCi0jZWxzZQotI2lmZGVmIE1BQwotInNwYWNlcy4gIElmIHRleHQgb21p dHRlZCwgcHJvbXB0IHJldmVydHMgdG8gTWFjLUtlcm1pdD4uICBQcm9tcHQgY2FuIGluY2x1ZGUi LAotI2Vsc2UKLSJzcGFjZXMuICBJZiB0ZXh0IG9taXR0ZWQsIHByb21wdCByZXZlcnRzIHRvIEMt S2VybWl0Pi4gIFByb21wdCBjYW4gaW5jbHVkZSIsCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYg LyogTUFDICovCi0idmFyaWFibGVzIGxpa2UgXFx2KGRpcikgb3IgXFx2KHRpbWUpIHRvIHNob3cg Y3VycmVudCBkaXJlY3Rvcnkgb3IgdGltZS4iLAotIiIgfTsKLQotI2lmZGVmIFVOSVgKLXN0YXRp YyBjaGFyICpoeHl3aWxkW10gPSB7Ci0iU3ludGF4OiBTRVQgV0lMRENBUkQtRVhQQU5TSU9OIHsg S0VSTUlUIFsgc3dpdGNoIF0sIFNIRUxMLCBPTiwgT0ZGIH0iLAotIiAgS0VSTUlUICh0aGUgZGVm YXVsdCkgbWVhbnMgQy1LZXJtaXQgZXhwYW5kcyBmaWxlbmFtZSB3aWxkY2FyZHMgaW4gU0VORCBh bmQiLAotIiAgc2ltaWxhciBjb21tYW5kcyBpdHNlbGYsIGFuZCBpbiBpbmNvbWluZyBHRVQgY29t bWFuZHMuICBPcHRpb25hbCBzd2l0Y2hlcyIsCi0iICBhcmUgL05PLU1BVENILURPVC1GSUxFUyAo XCIqXCIgYW5kIFwiP1wiIHNob3VsZCBub3QgbWF0Y2ggYW4gaW5pdGlhbCIsCi0iICBwZXJpb2Qg aW4gYSBmaWxlbmFtZTsgdGhpcyBpcyB0aGUgZGVmYXVsdCkgYW5kIC9NQVRDSC1ET1QtRklMRVMg aWYgeW91IiwKLSIgIHdhbnQgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBcIi5cIiBpbmNs dWRlZC4gIFNFVCBXSUxEQ0FSRCBTSEVMTCIsCi0iICBtZWFucyB0aGF0IEtlcm1pdCBhc2tzIHlv dXIgcHJlZmVycmVkIHNoZWxsIHRvIGV4cGFuZCB3aWxkY2FyZHMgKHRoaXMiLAotIiAgc2hvdWxk IG5vdCBiZSBuZWNlc3NhcnkgaW4gQy1LZXJtaXQgNy4wIGFuZCBsYXRlcikuICBIRUxQIFdJTERD QVJEIGZvciIsCi0iICBmdXJ0aGVyIGluZm9ybWF0aW9uLiIsCi0iICIsCi0iICBUaGUgT04gYW5k IE9GRiBjaG9pY2VzIGFsbG93IHlvdSB0byBkaXNhYmxlIGFuZCByZW5hYmxlIHdpbGRjYXJkIiwK LSIgIHByb2Nlc3NpbmcgaW5kZXBlbmRlbnQgb2YgdGhlIEtFUk1JVCAvIFNIRUxMIGNob2ljZS4g IERpc2FibGluZyB3aWxkY2FyZHMiLAotIiAgYWxsb3dzIHlvdSB0byBwcm9jZXNzIGFuIGFycmF5 IG9yIGxpc3Qgb2YgZmlsZW5hbWVzIHdpdGhvdXQgaGF2aW5nIHRvIiwKLSIgIGNvbnNpZGVyIHdo ZXRoZXIgdGhlIG5hbWVzIG1pZ2h0IGNvbnRhaW4gbGl0ZXJhbCB3aWxkY2FyZCBjaGFyYWN0ZXJz LiIsCi0iICBXQVJOSU5HOiBTRVQgV0lMRCBPRkYgYWxzbyBkaXNhYmxlcyBpbnRlcm5hbCBmaWxl bmFtZSBwYXR0ZXJuLW1hdGNoaW5nLCIsCi0iICB1c2VkIChmb3IgZXhhbXBsZSkgaW4gY3JlYXRp bmcgYmFja3VwIGZpbGVzLiIsCi0iIiB9OwotI2Vsc2UKLXN0YXRpYyBjaGFyICpoeHl3aWxkW10g PSB7Ci0iU3ludGF4OiBTRVQgV0lMRENBUkQtRVhQQU5TSU9OIHsgT04sIE9GRiB9IiwKLSIgIE9O ICh0aGUgZGVmYXVsdCkgbWVhbnMgdGhhdCBmaWxlbmFtZXMgZ2l2ZW4gdG8gS2VybWl0IGNvbW1h bmRzIHN1Y2ggYXMiLAotIiAgU0VORCBhbmQgRElSRUNUT1JZIGFyZSBhdXRvbWF0aWNhbGx5IGV4 cGFuZGVkIGludG8gbGlzdHMgb2YgZmlsZW5hbWVzIGlmIiwKLSIgIHRoZXkgY29udGFpbiBzcGVj aWFsICd3aWxkY2FyZCBjaGFyYWN0ZXJzJyBzdWNoIGFzICcqJy4gIFlvdSBjYW4gcmVmZXJlbmNl IiwKLSIgIGZpbGVzIHdob3NlIG5hbWVzIGNvbnRhaW5zIHN1Y2ggY2hhcmFjdGVycyBsaXRlcmFs bHkgYnkgcHJlY2VkaW5nIGVhY2giLAotIiAgc3VjaCBjaGFyYWN0ZXIgd2l0aCBhIGJhY2tzbGFz aCAnXFwnLiAgV2hlbiBkZWFsaW5nIHByb2dyYW1tYXRpY2FsbHkgd2l0aCIsCi0iICBhIGZpbGUg bGlzdCwgaG93ZXZlciwgeW91IHNob3VsZCBTRVQgV0lMRENBUkQtRVhQQU5TSU9OIE9GRiB0byBm b3JjZSIsCi0iICB0cmVhdCBlYWNoIG5hbWUgaW4gdGhlIGxpc3QgYXMgYSBsaXRlcmFsIG5hbWUu ICBTZWUgSEVMUCBXSUxEQ0FSRFMgZm9yIiwKLSIgIGRldGFpbHMgYWJvdXQgd2lsZGNhcmQgc3lu dGF4LiIsCi0iIiB9OwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmbmRlZiBOT1hGRVIKLXN0YXRp YyBjaGFyICpoeHl3aW5kW10gPSB7Ci0iU3ludGF4OiBTRVQgV0lORE9XLVNJWkUgbnVtYmVyIiwK LSIgIFNwZWNpZmllcyBudW1iZXIgb2Ygc2xvdHMgZm9yIHNsaWRpbmcgd2luZG93cywgaS5lLiB0 aGUgbnVtYmVyIG9mIHBhY2tldHMiLAotIiAgdGhhdCBjYW4gYmUgdHJhbnNtaXR0ZWQgYmVmb3Jl IHdhaXRpbmcgZm9yIGFja25vd2xlZGdlbWVudC4gIFRoZSBkZWZhdWx0IiwKLSNpZmRlZiBYWVpf SU5URVJOQUwKLSIgIGZvciBLZXJtaXQgcHJvdG9jb2wgaXMgb25lLCB0aGUgbWF4aW11bSBpcyAz MjsgZm9yIFpNT0RFTSwgdGhlIGRlZmF1bHQiLAotIiAgaXMgbm8gd2luZG93aW5nICgwKS4gIEZv ciBaTU9ERU0sIHRoZSB3aW5kb3cgc2l6ZSBpcyByZWFsbHkgdGhlIHBhY2tldCIsCi0iICBsZW5n dGgsIGFuZCBpcyB1c2VkIG9ubHkgd2hlbiBub24td2luZG93ZWQgKHN0cmVhbWluZykgdHJhbnNm ZXJzIGZhaWw7IHRoZSIsCi0iICBaTU9ERU0gd2luZG93IHNpemUgc2hvdWxkIGJlIGEgbGFyZ2lz aCBudW1iZXIsIGxpa2UgMTAyNCwgYW5kIGl0IHNob3VsZCBiZSIsCi0iICBhIG11bHRpcGxlIG9m IDY0LiIsCi0jZWxzZQotIiAgaXMgb25lLCB0aGUgbWF4aW11bSBpcyAzMi4gIEluY3JlYXNlZCB3 aW5kb3cgc2l6ZSBtaWdodCByZXN1bHQgaW4gcmVkdWNlZCIsCi0iICBtYXhpbXVtIHBhY2tldCBs ZW5ndGguICBVc2Ugc2xpZGluZyB3aW5kb3dzIGZvciBpbXByb3ZlZCBlZmZpY2llbmN5IG9uIiwK LSIgIGNvbm5lY3Rpb25zIHdpdGggbG9uZyBkZWxheXMuICBBIGZ1bGwgZHVwbGV4IGNvbm5lY3Rp b24gaXMgcmVxdWlyZWQsIGFzIiwKLSIgIHdlbGwgYXMgYSBjb29wZXJhdGluZyBLZXJtaXQgb24g dGhlIG90aGVyIGVuZC4iLAotI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLwotIiIgfTsKLQotc3Rh dGljIGNoYXIgKmh4eXJwdFtdID0gewotIlN5bnRheDogU0VUIFJFUEVBVCB7IENPVU5UUyB7IE9O LCBPRkYgfSwgUFJFRklYIDxjb2RlPiB9IiwKLSIgIFNFVCBSRVBFQVQgQ09VTlRTIHR1cm5zIHRo ZSByZXBlYXQtY291bnQgY29tcHJlc3Npb24gbWVjaGFuaXNtIE9OIGFuZCBPRkYuIiwKLSIgIFRo ZSBkZWZhdWx0IGlzIE9OLiAgU0VUIFJFUEVBVCBQUkVGSVggPGNvZGU+IHNldHMgdGhlIHJlcGVh dC1jb3VudCBwcmVmaXgiLAotIiAgY2hhcmFjdGVyIHRvIHRoZSBnaXZlbiBjb2RlLiAgVGhlIGRl ZmF1bHQgaXMgMTI2ICh0aWxkZSkuIiwKLSIiIH07Ci0KLXN0YXRpYyBjaGFyICpoeHlyY3ZbXSA9 IHsKLSJTeW50YXg6IFNFVCBSRUNFSVZFIHBhcmFtZXRlciB2YWx1ZSIsCi0iICBTcGVjaWZpZXMg cGFyYW1ldGVycyBmb3IgaW5ib3VuZCBwYWNrZXRzOiIsCi0iICIsCi0jaWZuZGVmIE5PQ1NFVFMK LSJTRVQgUkVDRUlWRSBDSEFSQUNURVItU0VUIHsgQVVUT01BVElDLCBNQU5VQUwgfSIsCi0iICBX aGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvIGFuIGFwcHJvcHJpYXRlIGZpbGUtY2hh cmFjdGVyIHNldCBiYXNlZCIsCi0iICBvbiB0aGUgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBhbm5v dW5jZXIsIGlmIGFueSwgb2YgYW4gaW5jb21pbmcgdGV4dCBmaWxlLiIsCi0iICBBVVRPTUFUSUMg YnkgZGVmYXVsdC4gIEFsc28gc2VlIEhFTFAgQVNTT0NJQVRFLiIsCi0iICIsCi0jZW5kaWYgLyog Tk9DU0VUUyAqLwotIlNFVCBSRUNFSVZFIENPTlRST0wtUFJFRklYIG51bWJlciIsCi0iICBBU0NJ SSB2YWx1ZSBvZiBwcmVmaXggY2hhcmFjdGVyIHVzZWQgZm9yIHF1b3RpbmcgY29udHJvbCBjaGFy YWN0ZXJzIGluIiwKLSIgIHBhY2tldHMgdGhhdCBLZXJtaXQgcmVjZWl2ZXMsIG5vcm1hbGx5IDM1 IChudW1iZXIgc2lnbikuICBEb24ndCBjaGFuZ2UiLAotIiAgdGhpcyB1bmxlc3Mgc29tZXRoaW5n IGlzIHdyb25nIHdpdGggdGhlIG90aGVyIEtlcm1pdCBwcm9ncmFtLiIsCi0iICIsCi0iU0VUIFJF Q0VJVkUgRU5ELU9GLVBBQ0tFVCBudW1iZXIiLAotIiAgQVNDSUkgdmFsdWUgb2YgY29udHJvbCBj aGFyYWN0ZXIgdGhhdCB0ZXJtaW5hdGVzIGluY29taW5nIHBhY2tldHMsIiwKLSIgIG5vcm1hbGx5 IDEzIChjYXJyaWFnZSByZXR1cm4pLiIsCi0iICIsCi0jaWZkZWYgQ0tYWENIQVIKLSJTRVQgUkVD RUlWRSBJR05PUkUtQ0hBUkFDVEVSIG51bWJlciIsCi0iICBBU0NJSSB2YWx1ZSBvZiBjaGFyYWN0 ZXIgdG8gYmUgZGlzY2FyZGVkIHdoZW4gcmVjZWl2aW5nIHBhY2tldHMsIHN1Y2ggYXMiLAotIiAg bGluZSBmb2xkaW5nIGNoYXJhY3RlcnMuIiwKLSIgIiwKLSNlbmRpZiAvKiBDS1hYQ0hBUiAqLwot IlNFVCBSRUNFSVZFIE1PVkUtVE8gWyBkaXJlY3RvcnkgXSIsCi0iICBJZiBhIGRpcmVjdG9yeSBu YW1lIGlzIHNwZWNpZmllZCwgdGhlbiBldmVyeSBmaWxlIHRoYXQgaXMgcmVjZWl2ZWQiLAotIiAg c3VjY2Vzc2Z1bGx5IGlzIG1vdmVkIHRvIHRoZSBnaXZlbiBkaXJlY3RvcnkgaW1tZWRpYXRlbHkg YWZ0ZXIgcmVjZXB0aW9uIiwKLSIgIGlzIGNvbXBsZXRlLiAgT21pdCB0aGUgZGlyZWN0b3J5IG5h bWUgdG8gcmVtb3ZlIGFueSBwcmV2aW91c2x5IHNldCBtb3ZlLXRvIiwKLSIgIGRpcmVjdG9yeS4i LAotIiAiLAotIlNFVCBSRUNFSVZFIFBBQ0tFVC1MRU5HVEggbnVtYmVyIiwKLSIgIE1heGltdW0g bGVuZ3RoIHBhY2tldCB0aGUgb3RoZXIgS2VybWl0IHNob3VsZCBzZW5kLiIsCi0iICIsCi0iU0VU IFJFQ0VJVkUgUEFERElORyBudW1iZXIiLAotIiAgTnVtYmVyIG9mIHByZXBhY2tldCBwYWRkaW5n IGNoYXJhY3RlcnMgdG8gYXNrIGZvciAobm9ybWFsbHkgMCkuIiwKLSIgIiwKLSJTRVQgUkVDRUlW RSBQQUQtQ0hBUkFDVEVSIG51bWJlciIsCi0iICBBU0NJSSB2YWx1ZSBvZiBjb250cm9sIGNoYXJh Y3RlciB0byB1c2UgZm9yIHBhZGRpbmcgKG5vcm1hbGx5IDApLiIsCi0iICIsCi0iU0VUIFJFQ0VJ VkUgUEFUSE5BTUVTIHtPRkYsIEFCU09MVVRFLCBSRUxBVElWRSwgQVVUT30iLAotIiAgSWYgYSBy ZWNvZ25pemFibGUgcGF0aCAoZGlyZWN0b3J5LCBkZXZpY2UpIHNwZWNpZmljYXRpb24gYXBwZWFy cyBpbiBhbiIsCi0iICBpbmNvbWluZyBmaWxlbmFtZSwgc3RyaXAgaXQgT0ZGIGJlZm9yZSB0cnlp bmcgdG8gY3JlYXRlIHRoZSBvdXRwdXQgZmlsZS4iLAotI2lmZGVmIENLX01LRElSCi0iICBPdGhl cndpc2UsIHRoZW4gaWYgYW55IG9mIHRoZSBkaXJlY3RvcmllcyBpbiB0aGUgcGF0aCBkb24ndCBl eGlzdCwgS2VybWl0IiwKLSIgIHRyaWVzIHRvIGNyZWF0ZSB0aGVtLCByZWxhdGl2ZSB0byB5b3Vy IGN1cnJlbnQgb3IgZG93bmxvYWQgZGlyZWN0b3J5LCBvciIsCi0iICBhYnNvbHV0ZWx5LCBhcyBz cGVjaWZpZWQuICBSRUxBVElWRSBtZWFucyBmb3JjZSBhbGwgaW5jb21pbmcgbmFtZXMsIGV2ZW4i LAotIiAgaWYgdGhleSBhcmUgYWJzb2x1dGUsIHRvIGJlIHJlbGF0aXZlIHRvIHlvdXIgY3VycmVu dCBvciBkb3dubG9hZCBkaXJlY3RvcnkuIgotLAotIiAgQVVUTywgd2hpY2ggaXMgdGhlIGRlZmF1 bHQsIG1lYW5zIFJFTEFUSVZFIGlmIHRoZSBmaWxlIHNlbmRlciBpbmRpY2F0ZXMgaW4iLAotIiAg YWR2YW5jZSB0aGF0IHRoaXMgaXMgYSByZWN1cnNpdmUgdHJhbnNmZXIsIG90aGVyd2lzZSBPRkYu IiwKLSNlbmRpZiAvKiBDS19NS0RJUiAqLwotIiAiLAotIlNFVCBSRUNFSVZFIFBBVVNFIG51bWJl ciIsCi0iICBNaWxsaXNlY29uZHMgdG8gcGF1c2UgYmV0d2VlbiBwYWNrZXRzLCBub3JtYWxseSAw LiIsCi0iICIsCi0KLSNpZmRlZiBDS19QRVJNUwotIlNFVCBSRUNFSVZFIFBFUk1JU1NJT05TIHsg T04sIE9GRiB9IiwKLSIgIFdoZXRoZXIgdG8gY29weSBmaWxlIHBlcm1pc3Npb25zIGZyb20gaW5i b3VuZCBBdHRyaWJ1dGUgcGFja2V0cy4iLAotIiAiLAotI2VuZGlmIC8qIENLX1BFUk1TICovCi0K LSJTRVQgUkVDRUlWRSBSRU5BTUUtVE8gWyB0ZW1wbGF0ZSBdIiwKLSIgIElmIGEgdGVtcGxhdGUg aXMgc3BlY2lmaWVkLCB0aGVuIGV2ZXJ5IGZpbGUgdGhhdCBpcyByZWNlaXZlZCBzdWNjZXNzZnVs bHkiLAotIiAgXAotaXMgcmVuYW1lZCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHRlbXBsYXRlIGlt bWVkaWF0ZWx5IGFmdGVyIGl0IGlzIHJlY2VpdmVkLiIsCi0iICBcCi1UaGUgdGVtcGxhdGUgc2hv dWxkIGluY2x1ZGUgdmFyaWFibGVzIGxpa2UgXFx2KGZpbGVuYW1lKSBvciBcXHYoZmlsZW51bWJl cikuIiwKLSIgIE9taXQgdGhlIHRlbXBsYXRlIHRvIHJlbW92ZSBhbnkgdGVtcGxhdGUgcHJldmlv dXNseSBzZXQuIiwKLSIgIiwKLSJTRVQgUkVDRUlWRSBTVEFSVC1PRi1QQUNLRVQgbnVtYmVyIiwK LSIgIEFTQ0lJIHZhbHVlIG9mIGNoYXJhY3RlciB0aGF0IG1hcmtzIHN0YXJ0IG9mIGluYm91bmQg cGFja2V0LiIsCi0iICIsCi0iU0VUIFJFQ0VJVkUgVElNRU9VVCBudW1iZXIiLAotIiAgTnVtYmVy IG9mIHNlY29uZHMgdGhlIG90aGVyIEtlcm1pdCBzaG91bGQgd2FpdCBmb3IgYSBwYWNrZXQgYmVm b3JlIHNlbmRpbmciLAotIiAgYSBOQUsgb3IgcmV0cmFuc21pdHRpbmcuIiwKLSNpZmRlZiBWTVMK LSIgIiwKLSJTRVQgUkVDRUlWRSBWRVJTSU9OLU5VTUJFUlMgeyBPTiwgT0ZGIH0iLAotIiAgSWYg T04sIGFuZCBpbiBpbmNvbWluZyBmaWxlbmFtZSBpbmNsdWRlcyBhIFZNUyB2ZXJzaW9uIG51bWJl ciwgdXNlIGl0IHdoZW4iLAotIiAgY3JlYXRpbmcgdGhlIGZpbGUuICBJZiBPRkYgKHdoaWNoIGlz IHRoZSBkZWZhdWx0KSwgc3RyaXAgYW55IFZNUyB2ZXJzaW9uIiwKLSIgIG51bWJlciBmcm9tIGlu Y29taW5nIGZpbGVuYW1lcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBjcmVhdGUgdGhlIGZpbGUsIFwK LWNhdXNpbmciLAotIiAgdGhlIG5ldyBmaWxlIHRvIHJlY2VpdmUgdGhlIG5leHQgaGlnaGVzdCB2 ZXJzaW9uIG51bWJlci4iLAotI2VuZGlmIC8qIFZNUyAqLwotIiIgfTsKLQotc3RhdGljIGNoYXIg Kmh4eXNuZFtdID0gewotIlN5bnRheDogU0VUIFNFTkQgcGFyYW1ldGVyIHZhbHVlIiwKLSIgIFNw ZWNpZmllcyBwYXJhbWV0ZXJzIGZvciBvdXRib3VuZCBmaWxlcyBvciBwYWNrZXRzLiIsCi0iICIs Ci0iU0VUIFNFTkQgQkFDS1VQIHsgT04sIE9GRiB9IiwKLSIgIFRlbGxzIHdoZXRoZXIgdG8gaW5j bHVkZSBiYWNrdXAgZmlsZXMgd2hlbiBzZW5kaW5nIGZpbGUgZ3JvdXBzLiAgQmFja3VwIiwKLSIg IGZpbGVzIGFyZSB0aG9zZSBjcmVhdGVkIGJ5IEtlcm1pdCwgRU1BQ1MsIGV0Yywgd2hlbiBjcmVh dGluZyBhIG5ldyBmaWxlIiwKLSIgIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3Rp bmcgZmlsZS4gIEEgYmFja3VwIGZpbGUgaGFzIGEgdmVyc2lvbiIsCi0iICBhcHBlbmRlZCB0byBp dHMgbmFtZSwgZS5nLiBvb2ZhLnR4dC5+MjN+LiAgT04gaXMgdGhlIGRlZmF1bHQsIG1lYW5pbmci LAotIiAgZG9uJ3QgZXhjbHVkZSBiYWNrdXAgZmlsZXMuICBVc2UgT0ZGIHRvIGV4Y2x1ZGUgYmFj a3VwIGZpbGVzIGZyb20gZ3JvdXAiLAotIiAgdHJhbnNmZXJzLiIsCi0iICIsCi0jaWZuZGVmIE5P Q1NFVFMKLSJTRVQgU0VORCBDSEFSQUNURVItU0VUIHsgQVVUT01BVElDLCBNQU5VQUwgfSIsCi0i ICBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvIGFuIGFwcHJvcHJpYXRlIGZpbGUt Y2hhcmFjdGVyIHdoZW4gYSIsCi0iICBTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCBjb21tYW5k IGlzIGdpdmVuLCBvciB2aWNlIHZlcnNhLiAgQVVUT01BVElDIGJ5IiwKLSIgIGRlZmF1bHQuICBB bHNvIHNlZSBIRUxQIEFTU09DSUFURS4iLAotIiAiLAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQot IlNFVCBTRU5EIENPTlRST0wtUFJFRklYIG51bWJlciIsCi0iICBBU0NJSSB2YWx1ZSBvZiBwcmVm aXggY2hhcmFjdGVyIHVzZWQgZm9yIHF1b3RpbmcgY29udHJvbCBjaGFyYWN0ZXJzIGluIiwKLSIg IHBhY2tldHMgdGhhdCBLZXJtaXQgc2VuZHMsIG5vcm1hbGx5IDM1IChudW1iZXIgc2lnbikuIiwK LSIgIiwKLSNpZmRlZiBDS1hYQ0hBUgotIlNFVCBTRU5EIERPVUJMRS1DSEFSQUNURVIgbnVtYmVy IiwKLSIgIEFTQ0lJIHZhbHVlIG9mIGNoYXJhY3RlciB0byBiZSBkb3VibGVkIHdoZW4gc2VuZGlu ZyBwYWNrZXRzLCBzdWNoIGFzIGFuIiwKLSIgIFguMjUgUEFEIGVzY2FwZSBjaGFyYWN0ZXIuIiwK LSIgIiwKLSNlbmRpZiAvKiBDS1hYQ0hBUiAqLwotIlNFVCBTRU5EIEVORC1PRi1QQUNLRVQgbnVt YmVyIiwKLSIgIEFTQ0lJIHZhbHVlIG9mIGNvbnRyb2wgY2hhcmFjdGVyIHRvIHRlcm1pbmF0ZSBh biBvdXRib3VuZCBwYWNrZXQsIiwKLSIgIG5vcm1hbGx5IDEzIChjYXJyaWFnZSByZXR1cm4pLiIs Ci0iICIsCi0iU0VUIFNFTkQgTU9WRS1UTyBbIGRpcmVjdG9yeSBdIiwKLSIgIFwKLUlmIGEgZGly ZWN0b3J5IG5hbWUgaXMgc3BlY2lmaWVkLCB0aGVuIGV2ZXJ5IGZpbGUgdGhhdCBpcyBzZW50IHN1 Y2Nlc3NmdWxseSIsCi0iICBpcyBtb3ZlZCB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGltbWVkaWF0 ZWx5IGFmdGVyIGl0IGlzIHNlbnQuIiwKLSIgIE9taXQgdGhlIGRpcmVjdG9yeSBuYW1lIHRvIHJl bW92ZSBhbnkgcHJldmlvdXNseSBzZXQgbW92ZS10byBkaXJlY3RvcnkuIiwKLSIgIiwKLSJTRVQg U0VORCBQQUNLRVQtTEVOR1RIIG51bWJlciIsCi0iICBNYXhpbXVtIGxlbmd0aCBwYWNrZXQgdG8g c2VuZCwgZXZlbiBpZiBvdGhlciBLZXJtaXQgYXNrcyBmb3IgbG9uZ2VyIG9uZXMuIiwKLSIgIFRo aXMgY29tbWFuZCBjYW4gbm90IGJlIHVzZWQgdG8gZm9yY2UgcGFja2V0cyB0byBiZSBzZW50IHRo YXQgYXJlIGxvbmdlciIsCi0iICB0aGFuIHRoZSBsZW5ndGggcmVxdWVzdGVkIGJ5IHRoZSByZWNl aXZlci4gIFVzZSB0aGlzIGNvbW1hbmQgb25seSB0byIsCi0iICBmb3JjZSBzaG9ydGVyIG9uZXMu IiwKLSIgIiwKLSJTRVQgU0VORCBQQURESU5HIG51bWJlciIsCi0iICBOdW1iZXIgb2YgcHJlcGFj a2V0IHBhZGRpbmcgY2hhcmFjdGVycyB0byBzZW5kLiIsCi0iICIsCi0iU0VUIFNFTkQgUEFELUNI QVJBQ1RFUiBudW1iZXIiLAotIiAgQVNDSUkgdmFsdWUgb2YgY29udHJvbCBjaGFyYWN0ZXIgdG8g dXNlIGZvciBwYWRkaW5nLiIsCi0iICIsCi0iU0VUIFNFTkQgUEFUSE5BTUVTIHtPRkYsIEFCU09M VVRFLCBSRUxBVElWRX0iLAotIiAgSW5jbHVkZSB0aGUgcGF0aCAoZGV2aWNlLCBkaXJlY3Rvcnkp IHBvcnRpb24gd2l0aCB0aGUgZmlsZSBuYW1lIHdoZW4iLAotIiAgc2VuZGluZyBpdCBhcyBzcGVj aWZpZWQ7IEFCU09MVVRFIG1lYW5zIHRvIHNlbmQgdGhlIHdob2xlIHBhdGhuYW1lLCIsCi0iICBS RUxBVElWRSBtZWFucyB0byBpbmNsdWRlIHRoZSBwYXRobmFtZSByZWxhdGl2ZSB0byB0aGUgY3Vy cmVudCBkaXJlY3RvcnkuIiwKLSIgIEFwcGxpZXMgdG8gdGhlIGFjdHVhbCBmaWxlbmFtZSwgbm90 IHRvIHRoZSBcImFzLW5hbWVcIi4gIFRoZSBkZWZhdWx0IGlzIiwKLSIgIE9GRi4iLAotIiAiLAot IlNFVCBTRU5EIFBBVVNFIG51bWJlciIsCi0iICBNaWxsaXNlY29uZHMgdG8gcGF1c2UgYmV0d2Vl biBwYWNrZXRzLCBub3JtYWxseSAwLiIsCi0iICIsCi0KLSNpZmRlZiBDS19QRVJNUwotIlNFVCBT RU5EIFBFUk1JU1NJT05TIHsgT04sIE9GRiB9IiwKLSIgIFdoZXRoZXIgdG8gaW5jbHVkZSBmaWxl IHBlcm1pc3Npb25zIGluIG91dGJvdW5kIEF0dHJpYnV0ZSBwYWNrZXRzLiIsCi0iICIsCi0jZW5k aWYgLyogQ0tfUEVSTVMgKi8KLQotIlNFVCBTRU5EIFJFTkFNRS1UTyBbIHRlbXBsYXRlIF0iLAot IiAgSWYgYSB0ZW1wbGF0ZSBpcyBzcGVjaWZpZWQsIHRoZW4gZXZlcnkgZmlsZSB0aGF0IGlzIHNl bnQgc3VjY2Vzc2Z1bGx5IiwKLSIgIGlzIHJlbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiB0 ZW1wbGF0ZSBpbW1lZGlhdGVseSBhZnRlciBpdCBpcyBzZW50LiIsCi0iICBcCi1UaGUgdGVtcGxh dGUgc2hvdWxkIGluY2x1ZGUgdmFyaWFibGVzIGxpa2UgXFx2KGZpbGVuYW1lKSBvciBcXHYoZmls ZW51bWJlcikuIiwKLSIgIE9taXQgdGhlIHRlbXBsYXRlIHRvIHJlbW92ZSBhbnkgdGVtcGxhdGUg cHJldmlvdXNseSBzZXQuIiwKLSIgIiwKLSJTRVQgU0VORCBTVEFSVC1PRi1QQUNLRVQgbnVtYmVy IiwKLSIgIEFTQ0lJIHZhbHVlIG9mIGNoYXJhY3RlciB0byBtYXJrIHN0YXJ0IG9mIG91dGJvdW5k IHBhY2tldC4iLAotIiAiLAotI2lmZGVmIENLX1RJTUVSUwotIlNFVCBTRU5EIFRJTUVPVVQgbnVt YmVyIFsgeyBEWU5BTUlDIFsgbWluIG1heCBdIF0sIEZJWEVEIH0gXSIsCi0jZWxzZQotIlNFVCBT RU5EIFRJTUVPVVQgbnVtYmVyIiwKLSNlbmRpZiAvKiBDS19USU1FUlMgKi8KLQotIiAgTnVtYmVy IG9mIHNlY29uZHMgdG8gd2FpdCBmb3IgYSBwYWNrZXQgYmVmb3JlIHNlbmRpbmcgTkFLIG9yIiwK LSNpZmRlZiBDS19USU1FUlMKLSIgIHJldHJhbnNtaXR0aW5nLiAgSW5jbHVkZSB0aGUgd29yZCBE WU5BTUlDIGFmdGVyIHRoZSBudW1iZXIgaW4gdGhlIiwKLSIgIFNFVCBTRU5EIFRJTUVPVVQgY29t bWFuZCB0byBoYXZlIEtlcm1pdCBjb21wdXRlIHRoZSB0aW1lb3V0cyBkeW5hbWljYWxseSIsCi0i ICB0aHJvdWdob3V0IHRoZSB0cmFuc2ZlciBiYXNlZCBvbiB0aGUgcGFja2V0IHJhdGUuICBJbmNs dWRlIHRoZSB3b3JkIEZJWEVEIiwKLSIgIHRvIHVzZSB0aGUgXCJudW1iZXJcIiBnaXZlbiB0aHJv dWdob3V0IHRoZSB0cmFuc2Zlci4gIERZTkFNSUMgaXMgdGhlIiwKLSIgIGRlZmF1bHQuICBBZnRl ciBEWU5BTUlDIHlvdSBtYXkgaW5jbHVkZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcy4iLAot IiAgU0VUIFNFTkQgVElNRU9VVCAtMSBGSVhFRCBtZWFucyBubyB0aW1lb3V0cy4iLAotI2Vsc2UK LSIgIHJldHJhbnNtaXR0aW5nLiIsCi0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0jaWZkZWYgVk1T Ci0iICIsCi0iU0VUIFNFTkQgVkVSU0lPTi1OVU1CRVJTIHsgT04sIE9GRiB9IiwKLSIgIElmIE9O LCBpbmNsdWRlIFZNUyB2ZXJzaW9uIG51bWJlcnMgaW4gb3V0Ym91bmQgZmlsZW5hbWVzLiAgSWYg T0ZGICh3aGljaCIsCi0iICBpcyB0aGUgZGVmYXVsdCksIHN0cmlwIHZlcnNpb24gbnVtYmVycy4i LAotI2VuZGlmIC8qIFZNUyAqLwotIiIgfTsKLQotc3RhdGljIGNoYXIgKmh4eXhmZXJbXSA9IHsK LSJTeW50YXg6IFNFVCBUUkFOU0ZFUiAob3IgWEZFUikgcGFyYW1ldGVyIHZhbHVlIiwKLSIgIiwK LSJDaG9pY2VzOiIsCi0iICIsCi0iU0VUIFRSQU5TRkVSIEJFTEwgeyBPRkYsIE9OIH0iLAotIiAg V2hldGhlciB0byByaW5nIHRoZSB0ZXJtaW5hbCBiZWxsIGF0IHRoZSBlbmQgb2YgYSBmaWxlIHRy YW5zZmVyLiIsCi0iICIsCi0jaWZkZWYgWEZSQ0FOCi0iU0VUIFRSQU5TRkVSIENBTkNFTExBVElP TiB7IE9GRiwgT04gWyA8Y29kZT4gWyA8bnVtYmVyPiBdIF0gfSIsCi0iICBPRkYgZGlzYWJsZXMg cmVtb3RlLW1vZGUgcGFja2V0LW1vZGUgY2FuY2VsbGF0aW9uIGZyb20gdGhlIGtleWJvYXJkLiIs Ci0iICBPTiBlbmFibGVzIGl0LiAgVGhlIG9wdGlvbmFsIDxjb2RlPiBpcyB0aGUgY29udHJvbCBj aGFyYWN0ZXIgdG8gdXNlIGZvciIsCi0iICBjYW5jZWxsYXRpb247IHRoZSBvcHRpb25hbCA8bnVt YmVyPiBpcyBob3cgbWFueSBjb25zZWN1dGl2ZSBvY2N1cnJlbmNlcyIsCi0iICBvZiB0aGUgZ2l2 ZW4gY29udHJvbCBjaGFyYWN0ZXIgYXJlIHJlcXVpcmVkIGZvciBjYW5jZWxsYXRpb24uIiwKLSIg IiwKLSNlbmRpZiAvKiBYRlJDQU4gKi8KLSJTRVQgVFJBTlNGRVIgSU5URVJSVVBUSU9OIHsgT04s IE9GRiB9IiwKLSIgIFRSQU5TRkVSIElOVEVSUlVQVElPTiBpcyBub3JtYWxseSBPTiwgYWxsb3dp bmcgZm9yIGludGVycnVwdGlvbiBvZiBhIGZpbGUiLAotIiAgdHJhbnNmZXIgaW4gcHJvZ3Jlc3Mg YnkgdHlwaW5nIGNlcnRhaW4gY2hhcmFjdGVycyB3aGlsZSB0aGUgZmlsZS10cmFuc2ZlciIsCi0i ICBkaXNwbGF5IGlzIGFjdGl2ZS4gIFNFVCBUUkFOU0ZFUiBJTlRFUlJVUFRJT04gT0ZGIGRpc2Fi bGVzIGludGVycnVwdGlvbiIsCi0iICBvZiBmaWxlIHRyYW5zZmVyIGZyb20gdGhlIGtleWJvYXJk IGluIGxvY2FsIG1vZGUuIiwKLSIgIiwKLSNpZm5kZWYgTk9TUEwKLSJTRVQgVFJBTlNGRVIgQ1JD LUNBTENVTEFUSU9OIHsgT0ZGLCBPTiB9IiwKLSIgIFRlbGxzIHdoZXRoZXIgS2VybWl0IHNob3Vs ZCBhY2N1bXVsYXRlIGEgQ3ljbGljIFJlZHVuZGFuY3kgQ2hlY2sgZm9yICIsCi0iICBlYWNoIGZp bGUgdHJhbnNmZXIuICBOb3JtYWxseSBPTiwgaW4gd2hpY2ggY2FzZSB0aGUgQ1JDIHZhbHVlIGlz IGF2YWlsYWJsZSIsCi0iICBpbiB0aGUgXFx2KGNyYzE2KSB2YXJpYWJsZSBhZnRlciB0aGUgdHJh bnNmZXIuICBBZGRzIHNvbWUgb3ZlcmhlYWQuICBVc2UiLAotIiAgU0VUIFRSQU5TRkVSIENSQyBP RkYgdG8gZGlzYWJsZS4iLAotIiAiLAotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIE5PQ1NF VFMKLSJTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCBuYW1lIiwKLSIgIFNlbGVjdHMgdGhlIGNo YXJhY3RlciBzZXQgdXNlZCB0byByZXByZXNlbnQgdGV4dHVhbCBkYXRhIGluIEtlcm1pdCIsCi0i ICBwYWNrZXRzLiAgVGV4dCBjaGFyYWN0ZXJzIGFyZSB0cmFuc2xhdGVkIHRvL2Zyb20gdGhlIEZJ TEUgQ0hBUkFDVEVSLVNFVC4iLAotIiAgQ2hvaWNlczoiLAotIiAiLAotIiAgVFJBTlNQQVJFTlQg KG5vIHRyYW5zbGF0aW9uLCB0aGUgZGVmYXVsdCkiLAotIiAgQVNDSUkiLAotIiAgTEFUSU4xIChJ U08gODg1OS0xIExhdGluIEFscGhhYmV0IDEpIiwKLSNpZm5kZWYgTk9MQVRJTjIKLSIgIExBVElO MiAoSVNPIDg4NTktMiBMYXRpbiBBbHBoYWJldCAyKSIsCi0jZW5kaWYgLyogTk9MQVRJTjIgKi8K LSIgIExBVElOOSAoSVNPIDg4NTktMTUgTGF0aW4gQWxwaGFiZXQgOSkiLAotI2lmZGVmIENZUklM TElDCi0iICBDWVJJTExJQy1JU08gKElTTyA4ODU5LTUgTGF0aW4vQ3lyaWxsaWMpIiwKLSNlbmRp ZiAvKiBDWVJJTExJQyAqLwotI2lmZGVmIEdSRUVLCi0iICBHUkVFSy1JU08gKElTTyA4ODU5LTcg TGF0aW4vR3JlZWspIiwKLSNlbmRpZiAvKiBHUkVFSyAqLwotI2lmZGVmIEhFQlJFVwotIiAgSEVC UkVXLUlTTyAoSVNPIDg4NTktOCBMYXRpbi9IZWJyZXcpIiwKLSNlbmRpZiAvKiBIRUJSRVcgKi8K LSNpZmRlZiBLQU5KSQotIiAgSkFQQU5FU0UtRVVDIChKSVMgWCAwMjA4IEthbmppICsgUm9tYW4g YW5kIEthdGFrYW5hKSIsCi0jZW5kaWYgLyogS0FOSkkgKi8KLSNpZmRlZiBVTklDT0RFCi0iICBV Q1MtMiAoSVNPIDEwNjQ2IC8gVW5pY29kZSAyLWJ5dGUgZm9ybSkiLAotIiAgVVRGLTggKElTTyAx MDY0NiAvIFVuaWNvZGUgOC1iaXQgc2VyaWFsaXplZCB0cmFuc2Zvcm1hdGlvbiBmb3JtYXQpIiwK LSNlbmRpZiAvKiBVTklDT0RFICovCi0iICIsCi0iU0VUIFRSQU5TRkVSIFRSQU5TTEFUSU9OIHsg T04sIE9GRiB9IiwKLSIgIEVuYWJsZXMgYW5kIGRpc2FibGVzIGZpbGUtdHJhbnNmZXIgY2hhcmFj dGVyLXNldCB0cmFuc2xhdGlvbi4gIEl0J3MiLAotIiAgZW5hYmxlZCBieSBkZWZhdWx0LiIsCi0j ZW5kaWYgLyogTk9DU0VUUyAqLwotIiAiLAotI2lmZGVmIENLX0NVUlNFUwotIlNFVCBUUkFOU0ZF UiBESVNQTEFZIHsgQlJJRUYsIENSVCwgRlVMTFNDUkVFTiwgTk9ORSwgU0VSSUFMIH0iLAotI2Vs c2UKLSJTRVQgVFJBTlNGRVIgRElTUExBWSB7IEJSSUVGLCBDUlQsIE5PTkUsIFNFUklBTCB9IiwK LSNlbmRpZiAgLyogQ0tfQ1VSU0VTICovCi0iICBDaG9vc2UgdGhlIGRlc2lyZWQgZm9ybWF0IGZv ciB0aGUgcHJvZ3Jlc3MgcmVwb3J0IHRvIGJlIGRpc3BsYXllZCBvbiIsCi0iICB5b3VyIHNjcmVl biBkdXJpbmcgZmlsZSB0cmFuc2ZlcnMgd2hlbiBLZXJtaXQgaXMgaW4gbG9jYWwgbW9kZS4iLAot I2lmZGVmIENLX0NVUlNFUwotIiAgRlVMTFNDUkVFTiByZXF1aXJlcyB5b3VyIHRlcm1pbmFsIHR5 cGUgYmUgc2V0IGNvcnJlY3RseTsgdGhlIG90aGVycyIsCi0iICBhcmUgaW5kZXBlbmRlbnQgb2Yg dGVybWluYWwgdHlwZS4iLAotI2Vsc2UKLSIgIGZpbGUgdHJhbnNmZXIuIiwKLSNlbmRpZiAgLyog Q0tfQ1VSU0VTICovCi0iICIsCi0iU0VUIFRSQU5TRkVSIExPQ0tJTkctU0hJRlQgeyBPRkYsIE9O LCBGT1JDRUQgfSIsCi0iICBUZWxsIHdoZXRoZXIgbG9ja2luZy1zaGlmdCBwcm90b2NvbCBzaG91 bGQgYmUgdXNlZCBkdXJpbmcgZmlsZSB0cmFuc2ZlciIsCi0iICB0byBhY2hpZXZlIDgtYml0IHRy YW5zcGFyZW5jeSBvbiBhIDctYml0IGNvbm5lY3Rpb24uICBPTiBtZWFucyB0byByZXF1ZXN0IiwK LSIgIGl0cyB1c2UgaWYgUEFSSVRZIGlzIG5vdCBOT05FIGFuZCB0byB1c2UgaXQgaWYgdGhlIG90 aGVyIEtlcm1pdCBhZ3JlZXMsIiwKLSIgIE9GRiBtZWFucyBub3QgdG8gdXNlIGl0LCBGT1JDRUQg bWVhbnMgdG8gdXNlIGl0IGV2ZW4gaWYgdGhlIG90aGVyIEtlcm1pdCIsCi0iICBkb2VzIG5vdCBh Z3JlZS4iLAotIiAiLAotIlNFVCBUUkFOU0ZFUiBNT0RFIHsgQVVUT01BVElDLCBNQU5VQUwgfSIs Ci0iICBBdXRvbWF0aWMgKHRoZSBkZWZhdWx0KSBtZWFucyBLZXJtaXQgc2hvdWxkIGF1dG9tYXRp Y2FsbHkgZ28gaW50byBiaW5hcnkiLAotIiAgZmlsZS10cmFuc2ZlciBtb2RlIGFuZCB1c2UgbGl0 ZXJhbCBmaWxlbmFtZXMgaWYgdGhlIG90aGVyIEtlcm1pdCBzYXlzIGl0IiwKLSIgIGhhcyBhIGNv bXBhdGlibGUgZmlsZSBzeXN0ZW0sIGUuZy4gVU5JWC10by1VTklYLCBidXQgbm90IFVOSVgtdG8t RE9TLiIsCi0jaWZkZWYgUEFUVEVSTlMKLSIgIEFsc28sIHdoZW4gc2VuZGluZyBmaWxlcywgS2Vy bWl0IHNob3VsZCBzd2l0Y2ggYmV0d2VlbiBiaW5hcnkgYW5kIHRleHQiLAotIiAgbW9kZSBhdXRv bWF0aWNhbGx5IHBlciBmaWxlIGJhc2VkIG9uIHRoZSBTRVQgRklMRSBCSU5BUlktUEFUVEVSTlMg YW5kIFNFVCIsCi0iICBGSUxFIFRFWFQtUEFUVEVSTlMuIiwKLSNlbmRpZiAvKiBQQVRURVJOUyAq LwotIiAiLAotI2lmZGVmIFBJUEVTRU5ECi0iU0VUIFRSQU5TRkVSIFBJUEVTIHsgT04sIE9GRiB9 IiwKLSIgIEVuYWJsZXMvRGlzYWJsZXMgYXV0b21hdGljIHNlbmRpbmcgZnJvbSAvIHJlY2VwdGlv biB0byBjb21tYW5kIHBpcGVzIHdoZW4iLAotIiAgdGhlIGluY29taW5nIGZpbGVuYW1lIHN0YXJ0 cyB3aXRoICchJy4gIEFsc28gc2VlIENTRU5ELCBDUkVDRUlWRS4iLAotIiAiLAotI2VuZGlmIC8q IFBJUEVTRU5EICovCi0jaWZkZWYgQ0tfWFlaCi0iU0VUIFRSQU5TRkVSIFBST1RPQ09MIHsgS0VS TUlULCBYTU9ERU0sIC4uLiB9IiwKLSIgIFN5bm9ueW0gZm9yIFNFVCBQUk9UT0NPTCAocS52Liku IiwKLSIgIiwKLSNlbmRpZiAvKiBDS19YWVogKi8KLSJTRVQgVFJBTlNGRVIgUkVQT1JUIHsgT04s IE9GRiB9IiwKLSIgIEVuYWJsZXMvRGlzYWJsZXMgdGhlIGF1dG9tYXRpYyBwb3N0LXRyYW5zZmVy IG1lc3NhZ2UgdGVsbGluZyB3aGF0IGZpbGVzIiwKLSIgIHdlbnQgd2hlcmUgZnJvbSBDLUtlcm1p dCB3aGVuIGl0IGlzIGluIHJlbW90ZSBtb2RlLiAgT04gYnkgZGVmYXVsdC4iLAotIiAiLAotIlNF VCBUUkFOU0ZFUiBTTE9XLVNUQVJUIHsgT0ZGLCBPTiB9IiwKLSIgIE9OICh0aGUgZGVmYXVsdCkg dGVsbHMgS2VybWl0LCB3aGVuIHNlbmRpbmcgZmlsZXMsIHRvIGdyYWR1YWxseSBidWlsZCB1cCIs Ci0iICB0aGUgcGFja2V0IGxlbmd0aCB0byB0aGUgbWF4aW11bSBuZWdvdGlhdGVkIGxlbmd0aC4g IE9GRiBtZWFucyBzdGFydCIsCi0iICBzZW5kaW5nIHRoZSBtYXhpbXVtIGxlbmd0aCByaWdodCBh d2F5LiIsCi0iICIsCi0iU3lub255bTogU0VUIFhGRVIuICBVc2UgU0hPVyBUUkFOU0ZFUiAoWEZF UikgdG8gc2VlIFNFVCBUUkFOU0ZFUiB2YWx1ZXMuIiwKLSIiIH07Ci0jZW5kaWYgLyogTk9YRkVS ICovCi0KLSNpZmRlZiBOVAotc3RhdGljIGNoYXIgKmh4eXdpbjk1W10gPSB7Ci0iU0VUIFdJTjk1 IDguMy1GSUxFTkFNRVMgeyBPTiwgT0ZGIH0iLAotIiAgSW5zdHJ1Y3RzIEstOTUgdG8gcmVwb3J0 IGFsbCBmaWxlbmFtZXMgdXNpbmcgOC4zIG5vdGF0aW9uIGluc3RlYWQgb2YgdGhlIiwKLSIgIG5v cm1hbCBsb25nIGZpbGVuYW1lcy4gIERlZmF1bHQgaXMgT0ZGIiwKLSIgIiwKLSJTRVQgV0lOOTUg QUxULUdSIHsgT04sIE9GRiB9IiwKLSIgIEluc3RydWN0cyBLLTk1LCB3aGVuIHVzZWQgb24gTVMg V2luZG93cyA5NSwgdG8gaW50ZXJwcmV0IHRoZSBSaWdodCBBbHQga2V5IiwKLSIgIGFzIHRoZSBB bHQtR3Iga2V5LiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gd29yayBhcm91bmQgdGhlIGZhaWx1cmUg b2YiLAotIiAgV2luZG93cyA5NSB0byBwcm9wZXJseSB0cmFuc2xhdGUgbm9uLVVTIGtleWJvYXJk cy4gIERlZmF1bHQgaXMgT0ZGLiIsCi0iICIsCi0iU0VUIFdJTjk1IEtFWUJPQVJELVRSQU5TTEFU SU9OIDxjaGFyYWN0ZXItc2V0PiIsCi0iICBTcGVjaWZpZXMgdGhlIGNoYXJhY3Rlci1zZXQgdGhh dCBXaW5kb3dzIDk1IGlzIHVzaW5nIHRvIHNlbmQga2V5c3Ryb2tlcyIsCi0iICB0byBLZXJtaXQt OTUgdmlhIHRoZSBrZXlib2FyZCBpbnB1dCBmdW5jdGlvbnMuICBEZWZhdWx0IGlzIExhdGluMS1J U08uIiwKLSIgIiwKLSJTRVQgV0lOOTUgT1ZFUkxBUFBFRC1JTyB7IE9OIDxyZXF1ZXN0cz4sIE9G RiB9IiwKLSIgIERldGVybWluZXMgd2hldGhlciBvciBub3QgSy05NSB1c2VzIE92ZXJsYXBwZWQt SS9PIG1ldGhvZHMgZm9yIHJlYWRpbmciLAotIiAgZnJvbSBhbmQgd3JpdGluZyB0byBzZXJpYWwg YW5kIFRBUEkgY29tbXVuaWNhdGlvbiBkZXZpY2VzLiAgPHJlcXVlc3RzPiIsCi0iICBzcGVjaWZp ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuZW91cyB3cml0ZSByZXF1ZXN0cyB0aGF0 IG1heSBiZSIsCi0iICBvdmVybGFwcGVkLCBmcm9tIDEgdG8gMzAuICBEZWZhdWx0IGlzIE9OLiIs Ci0iICIsCi0iU0VUIFdJTjk1IFBPUFVQUyB7IE9OLCBPRkYgfSIsCi0iICBEZXRlcm1pbmVzIHdo ZXRoZXIgb3Igbm90IEtlcm1pdCA5NSB1c2VzIFBvcHVwcyB0byBxdWVyeSB0aGUgdXNlciBmb3Ii LAotIiAgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHN1Y2ggYXMgdXNlciBJRHMgb3IgcGFzc3dvcmRz LiAgRGVmYXVsdCBpcyBPTi4iLAotIiAiLAotIlNFVCBXSU45NSBTRUxFQ1QtQlVHIHsgT04sIE9G RiB9IgotIiAgU29tZSBUQ1AvSVAgKFdpbnNvY2spIGltcGxlbWVudGF0aW9ucyBmb3IgV2luZG93 cyBoYXZlIGEgZGVmZWN0aXZlIiwKLSIgIHNlbGVjdCgpIGZ1bmN0aW9uLiAgVXNlIHRoaXMgY29t bWFuZCB0byBhdm9pZCB0aGUgdXNlIG9mIHNlbGVjdCgpIGlmIiwKLSIgIEs5NSBhcHBlYXJzIHRv IGJlIHVuYWJsZSB0byBzZW5kIGRhdGEgb3ZlciBUQ1AvSVAuICBEZWZhdWx0IGlzIE9GRi4iLAot IiJ9OwotI2VuZGlmIC8qIE5UICovCi0KLXN0YXRpYyBjaGFyICpobXh5YmVsW10gPSB7Ci0jaWZk ZWYgT1MyCi0iU3ludGF4OiBTRVQgQkVMTCB7IEFVRElCTEUgWyB7IEJFRVAsIFNZU1RFTS1TT1VO RFMgfSBdLCBWSVNJQkxFLCBOT05FIH0iLAotIiAgU3BlY2lmaWVzIGhvdyBpbmNvbWluZyBDdHJs LUcgKGJlbGwpIGNoYXJhY3RlcnMgYXJlIGhhbmRsZWQgaW4gQ09OTkVDVCIsCi0iICBtb2RlIGFu ZCBob3cgY29tbWFuZCB3YXJuaW5ncyBhcmUgcHJlc2VudGVkIGluIGNvbW1hbmQgbW9kZS4gIEFV RElCTEUiLAotIiAgbWVhbnMgZWl0aGVyIGEgYmVlcCBvciBhIHN5c3RlbS1zb3VuZCBpcyBnZW5l cmF0ZWQ7IFZJU0lCTEUgbWVhbnMgdGhlIiwKLSIgIHNjcmVlbiBpcyBmbGFzaGVkIG1vbWVudGFy aWx5LiIsCi0jZWxzZQotIlN5bnRheDogU0VUIEJFTEwgeyBPRkYsIE9OIH0iLAotIiAgT04gKHRo ZSBkZWZhdWx0KSBlbmFibGVzIHJpbmdpbmcgb2YgdGhlIHRlcm1pbmFsIGJlbGwgKGJlZXApIGV4 Y2VwdCB3aGVyZSIsCi0iICBpdCBpcyBkaXNhYmxlZCBpbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMs IGUuZy4gYnkgU0VUIFRSQU5TRkVSIEJFTEwuICBPRkYiLAotIiAgZGlzYWJsZXMgcmluZ2luZyBv ZiB0aGUgYmVsbCBpbiBhbGwgY2lyY3Vtc3RhbmNlcywgb3ZlcnJpZGluZyBhbnkgc3BlY2lmaWMi LAotIiAgU0VUIHh4eCBCRUxMIHNlbGVjdGlvbnMuIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIifTsK LQotI2lmZGVmIE9TMgotc3RhdGljIGNoYXIgKmhteHltc2tbXSA9IHsKLSJTRVQgTVNLRVJNSVQg RklMRS1SRU5BTUlORyB7IE9OLCBPRkYgfSIsCi0iICBPTiBlbmFibGVzIHRoZSB1c2Ugb2YgTVMt RE9TIEtlcm1pdCBmaWxlIHJlbmFtaW5nIGNvbnZlbnRpb25zIGluc3RlYWQgb2YiLAotIiAgQy1L ZXJtaXQgY29udmVudGlvbnMuICBGaWxlIHJlbmFtaW5nIG9jY3VycyBkdXJpbmcgZmlsZSB0cmFu c2ZlcnMgd2hlbiIsCi0iICB0aGVyZSBpcyBhIGZpbGUgbmFtZSBjb2xsaXNpb24gYW5kIGVpdGhl ciBCQUNLVVAgb3IgUkVOQU1FIGNvbGxpc2lvbiIsCi0iICBvcHRpb25zIGFyZSBhY3RpdmUuICBD LUtlcm1pdCBjb252ZW50aW9ucyBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lIiwKLSIg IHdoaWxlIGFwcGVuZGluZyAufm51bX4gdG8gdGhlIGVuZC4gIE1TLURPUyBLZXJtaXQgY29udmVu dGlvbnMgcmVzdHJpY3QiLAotIiAgZmlsZW5hbWVzIHRvIDguMyBub3RhdGlvbiBhbmQgcHJlc2Vy dmUgdGhlIGV4dGVuc2lvbi4gIFVuaXF1ZSBudW1lcmljIiwKLSIgIHZhbHVlcyBvdmVyd3JpdGUg dGhlIHJpZ2h0IG1vc3QgcG9ydGlvbiBvZiB0aGUgZmlsZSBuYW1lJ3MgbGVmdCBoYW5kIHNpZGUu IiwKLSIgIiwKLSJTRVQgTVNLRVJNSVQgS0VZQ09ERVMgeyBPTiwgT0ZGIH0iLAotIiAgT04gZW5h YmxlcyB0aGUgdXNlIG9mIE1TLURPUyBLZXJtaXQgY29tcGF0aWJsZSBrZXljb2RlcyB0byBwcm92 aWRlIHNjcmlwdCIsCi0iICBwb3J0YWJpbGl0eS4iLAotIiJ9OwotI2VuZGlmIC8qIE9TMiAqLwot Ci1zdGF0aWMgY2hhciAqaG14eWNkW10gPSB7Ci0iU3ludGF4OiBTRVQgQ0QgeyBIT01FIDxwYXRo PiwgUEFUSCA8cGF0aD4sIE1FU1NBR0UgeyBPTiwgT0ZGLCBGSUxFIDxsaXN0PiB9IH0iCi0sCi0i ICIsCi0iU0VUIENEIEhPTUUgPHBhdGg+IiwKLSIgIFNwZWNpZmllZCB3aGljaCBkaXJlY3Rvcnkg dG8gY2hhbmdlIHRvIGlmIENEIG9yIEtDRCBpcyBnaXZlbiB3aXRob3V0IGEiLAotIiAgcGF0aG5h bWUuICBJZiB0aGlzIGNvbW1hbmQgaXMgbm90IGdpdmVuLCB5b3VyIGxvZ2luIG9yIEhPTUUgZGly ZWN0b3J5IGlzIiwKLSIgIHVzZWQuIiwKLSIgIiwKLSJTRVQgQ0QgUEFUSCA8cGF0aD4iLAotIiAg T3ZlcnJpZGVzIG5vcm1hbCBDRFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIHdoaWNoIHRlbGxz IHRoZSBDRCBjb21tYW5kIiwKLSIgIHdoZXJlIHRvIGxvb2sgZm9yIGRpcmVjdG9yaWVzIHRvIENE IHRvIGlmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZW0gZnVsbHkuIiwKLSIgIFRoZSBmb3JtYXQgaXM6 IiwKLSIgIiwKLSNpZmRlZiBVTklYT1JPU0sKLSIgICAgc2V0IGNkIHBhdGggOmRpcmVjdG9yeTpk aXJlY3Rvcnk6Li4uIiwKLSIgIiwKLSIgIGluIG90aGVyIHdvcmRzLCBhIGxpc3Qgb2YgZGlyZWN0 b3JpZXMgc2VwYXJhdGVkIGJ5IGNvbG9ucywgd2l0aCBhIGNvbG9uIiwKLSIgIGF0IHRoZSBiZWdp bm5pbmcsIGUuZy46IiwKLSIgIiwKLSIgICAgc2V0IGNkIHBhdGggOi91c3Ivb2xnYTovdXNyL2l2 YW4vcHVibGljOi90bXAiLAotI2Vsc2UKLSNpZmRlZiBPUzIKLSIgICAgc2V0IGNkIHBhdGggZGlz azpkaXJlY3Rvcnk7ZGlzazpkaXJlY3Rvcnk7Li4uIiwKLSIgIiwKLSIgIGp1c3QgbGlrZSB0aGUg RE9TIFBBVEg7IGluIG90aGVyIHdvcmRzLCBhIGxpc3Qgb2YgZGlzazpkaXJlY3RvcnkgbmFtZXMi LAotIiAgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMsIGUuZy46IiwKLSIgIiwKLSIgICAgU0VUIENE IFBBVEggQzpcXEs5NTtDOlxcSE9NRTtDOlxcTE9DQUw7QzpcXCIsCi0jZWxzZQotI2lmZGVmIFZN UwotIiAgICBzZXQgY2QgcGF0aCBkaXJlY3RvcnksZGlyZWN0b3J5LC4uLiIsCi0iICIsCi0iICBp biBvdGhlciB3b3JkcywgYSBsaXN0IG9mIGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9ucyBvciBsb2dp Y2FsIG5hbWVzIHRoYXQiLAotIiAgcmVwcmVzZW50IHRoZW0sIGUuZy46IiwKLSIgIiwKLSIgICAg U0VUIENEIFBBVEggU1lTJExPR0lOOiwkRElTSzE6W09MR0FdLCRESVNLMltTQ1JBVENILklWQU5d LiIsCi0jZWxzZQotIiAgKHVua25vd24gZm9yIHRoaXMgcGxhdGZvcm0pIiwKLSNlbmRpZiAvKiBW TVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSIgIiwKLSJT RVQgQ0QgTUVTU0FHRSB7IE9OLCBPRkYgfSIsCi0iICBEZWZhdWx0IGlzIE9GRi4gIFdoZW4gT04s IHRoaXMgdGVsbHMgS2VybWl0IHRvIGxvb2sgZm9yIGEgZmlsZSB3aXRoIGEiLAotIiAgY2VydGFp biBuYW1lIGluIGFueSBkaXJlY3RvcnkgdGhhdCB5b3UgQ0QgdG8sIGFuZCBpZiBpdCBmaW5kcyBv bmUsIHRvIiwKLSIgIGRpc3BsYXkgaXQgb24geW91ciBzY3JlZW4gd2hlbiB5b3UgZ2l2ZSB0aGUg Q0QgY29tbWFuZC4gIFRoZSBmaWxlbmFtZSwiLAotIiAgb3IgbGlzdCBvZiBuYW1lcywgaXMgZ2l2 ZW4gaW4gdGhlIFNFVCBDRCBNRVNTQUdFIEZJTEUgY29tbWFuZC4iLAotIiAiLAotIlNFVCBDRCBN RVNTQUdFIEZJTEUgbmFtZSIsCi0iICBvcjoiLAotIlNFVCBDRCBNRVNTQUdFIEZJTEUge3tuYW1l MX17bmFtZTJ9Li4ue25hbWU4fX0iLAotIiAgU3BlY2lmeSB1cCB0byA4IGZpbGVuYW1lcyB0byBs b29rIGZvciB3aGVuIHdoZW4gQ0RpbmcgdG8gYSBuZXcgZGlyZWN0b3J5IiwKLSIgIGFuZCBDRCBN RVNTQUdFIGlzIE9OLiAgVGhlIGZpcnN0IG9uZSBmb3VuZCwgaWYgYW55LCBpbiB0aGUgbmV3IGRp cmVjdG9yeSIsCi0jaWZuZGVmIERGQ0RNU0cKLSIgIGlzIGRpc3BsYXllZC4iLAotI2Vsc2UKLSIg IGlzIGRpc3BsYXllZC4gIFRoZSBkZWZhdWx0IGxpc3QgaXM6IiwKLSIgIiwKLSNpZmRlZiBVTklY T1JPU0sKLSIgICB7ey4vLnJlYWRtZX17UkVBRE1FLlRYVH17UkVBRC5NRX19IiwKLSNlbHNlCi0i ICAge3tSRUFETUUuVFhUfXtSRUFELk1FfX0iLAotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotIiAi LAotI2VuZGlmIC8qIERGQ0RNU0cgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSJTeW5vbnltOiBTRVQg U0VSVkVSIENELU1FU1NBR0UgRklMRS4iLAotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0iICIsCi0i VHlwZSBTSE9XIENEIHRvIHZpZXcgY3VycmVudCBDRCBzZXR0aW5ncy4gIEFsc28gc2VlIEhFTFAg U0VUIFNFUlZFUi4iLAotIiIKLX07Ci0KLSNpZm5kZWYgTk9JS1NECi1zdGF0aWMgY2hhciAqIGhz ZXRpa3NbXSA9IHsKLSNpZmRlZiBPUzIKLSJTRVQgSUtTIEFOT05ZTU9VUyBBQ0NPVU5UIDx1c2Vy bmFtZT4iLAotIiAgT24gV2luZG93cyBOVC8yMDAwIHRoaXMgaXMgdGhlIGFjY291bnQgdGhhdCB3 aWxsIGJlIHVzZWQgdG8gYWxsb3ciLAotIiAgYW5vbnltb3VzIGFjY2VzcyB0byB0aGUgc3lzdGVt LiAgVGhpcyBhY2NvdW50IE1VU1QgaGF2ZSBubyBwYXNzd29yZCIsCi0iICBhbmQgaXRzIHByaXZp bGVnZXMgc2hvdWxkIGJlIHJlc3RyaWN0ZWQgdG8gb25seSBhbGxvdyB0aG9zZSBvcGVyYXRpb25z IiwKLSIgIHdoaWNoIHNob3VsZCBiZSBwZXJtaXR0ZWQgdG8gdW5rbm93biB1c2Vycy4gIEluIHBy YWN0aWNlIHRoaXMgbWVhbnMiLAotIiAgTGlzdCBEaXJlY3RvcmllcyBhbmQgUmVhZC1FeGVjdXRl IHByaXZpbGVnZXMgb25seS4gIElmIGEgZGlyZWN0b3J5IiwKLSIgIGlzIGNvbmZpZ3VyZWQgZm9y IFdyaXRlIHByaXZpbGVnZXMgdGhlbiBSZWFkIHByaXZpbGVnZXMgc2hvdWxkIGJlIiwKLSIgIGRl bmllZCBmb3IgdGhhdCBkaXJlY3RvcnkuICBPdGhlcndpc2UsIHlvdXIgc3lzdGVtIHdpbGwgYmVj b21lIHVzZWQiLAotIiAgYnkgc29mdHdhcmUgcGlyYXRlcy4gIElmIHRoaXMgY29tbWFuZCBpcyBu b3Qgc3BlY2lmaWVkIGluIHRoZSBJS1NELktTQyIsCi0iICBmaWxlIHRoZSB1c2VybmFtZSBcIkdV RVNUXCIgaXMgdXNlZCBieSBkZWZhdWx0LiAgVGhpcyBjb21tYW5kIGhhcyBubyIsCi0iICBlZmZl Y3Qgb24gV2luZG93cyA5NS85OC4iLAotIiAiLAotI2VuZGlmIC8qIE9TMiAqLwotIlNFVCBJS1Mg QU5PTllNT1VTIElOSVRGSUxFIGZpbGVuYW1lIiwKLSNpZmRlZiBPUzIKLSIgIFRoZSBpbml0aWFs aXphdGlvbiBmaWxlIHRvIGJlIGV4ZWN1dGVkIGZvciBhbm9ueW1vdXMgbG9naW5zLiAgQnkgZGVm YXVsdCIsCi0iICBpdCBpcyBLOTUuSU5JIGluIHRoZSBob21lIGRpcmVjdG9yeSBhc3NvY2lhdGVk IHdpdGggdGhlIEFOTk9OWU1PVVMgYWNjb3VudC4iCi0sCi0iICBBbnkgZmlsZW5hbWUgdGhhdCB5 b3Ugc3BlY2lmeSBoZXJlIG11c3QgYmUgcmVhZGFibGUgYnkgdGhlIEFOT05ZTU9VUyIsCi0iICBh Y2NvdW50IGFuZCBpZiBhIFNFVCBJS1MgQU5PTllNT1VTIFJPT1QgY29tbWFuZCB3YXMgZ2l2ZW4s IGV4aXN0IHdpdGhpbiIsCi0iICB0aGUgcmVzdHJpY3RlZCBkaXJlY3RvcnkgdHJlZS4gIFRoaXMg b3B0aW9uIGlzIGluZGVwZW5kZW50IG9mIHRoZSBTRVQgSUtTIiwKLSIgIElOSVRGSUxFIGNvbW1h bmQgd2hpY2ggYXBwbGllcyBvbmx5IHRvIHJlYWwgdXNlcnMuIiwKLSNlbHNlCi0iICBUaGUgaW5p dGlhbGl6YXRpb24gZmlsZSB0byBiZSBleGVjdXRlZCBmb3IgYW5vbnltb3VzIGxvZ2lucy4gIEJ5 IGRlZmF1bHQiLAotIiAgaXQgaXMgLmtlcm1yYyBpbiB0aGUgYW5vbnltb3VzIHJvb3QgZGlyZWN0 b3J5LiAgVGhpcyBvcHRpb24gaXMgaW5kZXBlbmRlbnQiLAotIiAgb2YgdGhlIFNFVCBJS1MgSU5J VEZJTEUgY29tbWFuZCB3aGljaCBhcHBsaWVzIG9ubHkgdG8gcmVhbCB1c2Vycy4iLAotI2VuZGlm IC8qIE9TMiAqLwotIiAiLAotIlNFVCBJS1MgQU5PTllNT1VTIExPR0lOIHsgT04sIE9GRiB9IiwK LSNpZmRlZiBPUzIKLSIgIFdoZXRoZXIgYW5vbnltb3VzIGxvZ2lucyBhcmUgYWxsb3dlZC4gIEJ5 IGRlZmF1bHQgdGhleSBhcmUgTk9UIGFsbG93ZWQsIiwKLSIgIHNvIHRoaXMgb3B0aW9uIG5lZWQg YmUgaW5jbHVkZWQgb25seSB0byBhbGxvdyB0aGVtIChvciBmb3IgY2xhcml0eSwgdG8iLAotIiAg ZW1waGFzaXplIHRoYXQgdGhleSBhcmUgbm90IGFsbG93ZWQpLiAgQW5vbnltb3VzIGxvZ2luIG9j Y3VycyB3aGVuIHRoZSIsCi0iICB1c2VybmFtZSBcImFub255bW91c1wiIGlzIHNwZWNpZmllZCB3 aXRoIGFueSBwYXNzd29yZCAoYXMgd2l0aCBmdHBkKS4iLAotIiAgSW4gb3JkZXIgZm9yIGFub255 bW91cyBsb2dpbnMgdG8gc3VjY2VlZCBvbiBXaW5kb3dzIE5ULzIwMDAsIHRoZSIsCi0iICBBTk9O WU1PVVMgYWNjb3VudCBtdXN0IGJlIGVuYWJsZWQuIiwKLSIgIiwKLSIgIE9uIFdpbmRvd3MgTlQg YW5kIDIwMDAsIGFub255bW91cyB1c2VycyBoYXZlIHRoZSBzYW1lIGFjY2VzcyByaWdodHMgYXMi LAotIiAgdGhlIEFOT05ZTU9VUyBhY2NvdW50LiAgSW4gV2luZG93cyA5NS85OCwgYW5vbnltb3Vz IHVzZXJzLCBqdXN0IGxpa2UgYW55IiwKLSIgIG90aGVyIHVzZXJzLCBoYXZlIGZ1bGwgYWNjZXNz IHJpZ2h0cyB0byB5b3VyIGVudGlyZSBQQywgc2luY2UgV2luZG93cyA5NSIsCi0iICBhbmQgOTgg aW5jbHVkZSBubyBzZWN1cml0eSBmZWF0dXJlcy4gIEZvciB0aGlzIHJlYXNvbiwgaWYgeW91IGFy ZSBhbGxvd2luZyIsCi0iICBhbm9ueW1vdXMgbG9naW5zLCBiZSBzdXJlIHRvIGFsc28gU0VUIGFu IElLUyBBTk9OWU1PVVMgUk9PVCBkaXJlY3RvcnkgdG8iLAotIiAgcmVzdHJpY3QgYW5vbnltb3Vz IHVzZXJzJyBmaWxlIGFjY2Vzcy4iLAotIiAiLAotIiAgQW5vbnltb3VzIHVzZXIgcGVybWlzc2lv bnMgbWF5IGJlIHJlc3RyaWN0ZWQgdmlhIHRoZSBzcGVjaWZpY2F0aW9uIG9mICIsCi0iICBESVNB QkxFIGNvbW1hbmRzIGluIHRoZSBBTk9OWU1PVVMgaW5pdGZpbGUuICBBbm9ueW1vdXMgdXNlcnMg YXJlIG5vdCAiLAotIiAgcGVybWl0dGVkIHRvIGV4ZWN1dGUgYW4gRU5BQkxFIGNvbW1hbmQuICBB bm9ueW1vdXMgdXNlcnMgYXJlIGFsc28gcHJldmVudGVkIgotLAotIiAgZnJvbSBTSE9XaW5nIHNl bnNpdGl2ZSBkYXRhIGFib3V0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9yIHRoZSBJS1MiLAotIiAg Y29uZmlndXJhdGlvbi4iLAotI2Vsc2UKLSIgIFdoZXRoZXIgYW5vbnltb3VzIGxvZ2lucyBhcmUg YWxsb3dlZC4gQnkgZGVmYXVsdCB0aGV5IGFyZSBhbGxvd2VkLCBzbyB0aGlzIiwKLSIgIG9wdGlv biBuZWVkIGJlIGluY2x1ZGVkIG9ubHkgdG8gZGlzYWxsb3cgdGhlbSAob3IgZm9yIGNsYXJpdHks IHRvIGVtcGhhc2l6ZSIKLSwKLSIgIHRoZXkgYXJlIGFsbG93ZWQpLiBBbm9ueW1vdXMgbG9naW4g b2NjdXJzIHdoZW4gdGhlIHVzZXJuYW1lIFwiYW5vbnltb3VzXCIiLAotIiAgb3IgXCJmdHBcIiBp cyBnaXZlbiwgd2l0aCBhbnkgcGFzc3dvcmQgKGFzIHdpdGggZnRwZCkuIiwKLSNlbmRpZiAvKiBP UzIgKi8KLSIgIiwKLSJTRVQgSUtTIEFOT05ZTU9VUyBST09UIDxkaXJlY3Rvcnk+IiwKLSIgIFNw ZWNpZmllcyBhIGRpcmVjdG9yeSB0cmVlIHRvIHdoaWNoIGFub255bW91cyB1c2VycyBhcmUgcmVz dHJpY3RlZCBhZnRlciIsCi0iICBsb2dpbi4iLAotIiAiLAotIlNFVCBJS1MgQkFOTkVSRklMRSA8 ZmlsZW5hbWU+IiwKLSIgIFRoZSBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgbWVzc2FnZSB0 byBiZSBwcmludGVkIGFmdGVyIHRoZSB1c2VyIGxvZ3MiLAotIiAgaW4sIGluIHBsYWNlIG9mIHRo ZSBub3JtYWwgbWVzc2FnZSAoY29weXJpZ2h0IG5vdGljZSwgXCJUeXBlIEhFTFAgb3IgPyBmb3Ii LAotIiAgaGVscFwiLCBldGMpLiIsCi0iICIsCi0iU0VUIElLUyBDREZJTEUgPGZpbGVsaXN0PiIs Ci0iICBXaGVuIGNkbWVzc2FnZSBpcyBvbiwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgXCJyZWFk IG1lXCIgZmlsZSB0byBiZSBzaG93bi4iCi0sCi0iICBOb3JtYWxseSB5b3Ugd291bGQgc3BlY2lm eSBhIHJlbGF0aXZlIChub3QgYWJzb2x1dGUpIG5hbWUsIHNpbmNlIHRoZSBmaWxlIiwKLSIgIGlz IG9wZW5lZCB1c2luZyB0aGUgbGl0ZXJhbCBuYW1lIHlvdSBzcGVjaWZpZWQsIGFmdGVyIGNoYW5n aW5nIHRvIHRoZSBuZXciLAotIiAgZGlyZWN0b3J5LiAgRXhhbXBsZToiLAotIiAiLAotIiAgICBT RVQgSUtTIENERklMRSBSRUFELk1FIiwKLSIgIiwKLSIgIFlvdSBjYW4gYWxzbyBnaXZlIGEgbGlz dCBvZiB1cCB0byA4IGZpbGVuYW1lcyBieSAoYSkgZW5jbG9zaW5nIGVhY2giLAotIiAgZmlsZW5h bWUgaW4gYnJhY2VzLCBhbmQgKGIpIGVuY2xvc2luZyB0aGUgZW50aXJlIGxpc3QgaW4gYnJhY2Vz LiAgRXhhbXBsZToiLAotIiAiLAotIiAgICBTRVQgSUtTIENERklMRSB7e1JFQUQuTUV9e2FhcmVh ZG1lLnR4dH17UkVBRE1FfXtyZWFkLXRoaXMtZmlyc3R9fSIsCi0iICIsCi0iICBXaGVuIGEgbGlz dCBpcyBnaXZlbiwgaXQgaXMgc2VhcmNoZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IGFuZCB0aGUgZmly c3QiLAotIiAgZmlsZSBmb3VuZCBpcyBkaXNwbGF5ZWQuIiwKLSIgIiwKLSJTRVQgSUtTIENETUVT U0FHRSB7T04sIE9GRiwgMCwgMSwgMn0iLAotIiAgRm9yIHVzZSBpbiB0aGUgU2VydmVyLVNpZGUg U2VydmVyIGNvbmZpZ3VyYXRpb247IHdoZW5ldmVyIHRoZSBjbGllbnQiLAotIiAgdGVsbHMgdGhl IHNlcnZlciB0byBjaGFuZ2UgZGlyZWN0b3J5LCB0aGUgc2VydmVyIHNlbmRzIHRoZSBjb250ZW50 cyBvZiBhIiwKLSIgIFwicmVhZCBtZVwiIGZpbGUgdG8gdGhlIGNsaWVudCdzIHNjcmVlbi4gIFRo aXMgZmVhdHVyZSBpcyBPTiBieSBkZWZhdWx0LCIsCi0iICBhbmQgb3BlcmF0ZXMgaW4gY2xpZW50 L3NlcnZlciBtb2RlIG9ubHkgd2hlbiBPTiBvciAxLiAgSWYgc2V0IHRvIDIgb3IiLAotIiAgaGln aGVyLCBpdCBhbHNvIG9wZXJhdGVzIHdoZW4gdGhlIENEIGNvbW1hbmQgaXMgZ2l2ZW4gYXQgdGhl IElLU0Q+IHByb21wdC4iLAotIiAgU3lub255bTogU0VUIElLUyBDRE1TRy4iLAotIiAiLAotIlNF VCBJS1MgREFUQUJBU0UgeyBPTiwgT0ZGIH0iLAotIiAgVGhpcyBjb21tYW5kIGRldGVybWluZXMg d2hldGhlciBlbnRyaWVzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBTRVQgSUtTIiwKLSIgIERCRklM RSAoSUtTRCBhY3RpdmUgc2Vzc2lvbnMgZGF0YWJhc2UpLiIsCi0iICIsCi0iU0VUIElLUyBEQkZJ TEUgPGZpbGVuYW1lPiIsCi0iICBTcGVjaWZpZXMgdGhlIGZpbGUgd2hpY2ggc2hvdWxkIGJlIHVz ZWQgZm9yIHN0b3JpbmcgcnVudGltZSBzdGF0dXMiLAotI2lmZGVmIE9TMgotIiAgaW5mb3JtYXRp b24gYWJvdXQgYWN0aXZlIGNvbm5lY3Rpb25zLiAgVGhlIGRlZmF1bHQgaXMgYSBmaWxlIGNhbGxl ZCIsCi0iICBcImlrc2QuZGJcIiBpbiB0aGUgV0lORE9XUyBkaXJlY3RvcnkuIiwKLSNlbHNlCi0j aWZkZWYgVU5JWAotIiAgaW5mb3JtYXRpb24gYWJvdXQgYWN0aXZlIGNvbm5lY3Rpb25zLiAgVGhl IGRlZmF1bHQgaXMgYSBmaWxlIGNhbGxlZCIsCi0iICBcImlrc2QuZGJcIiBpbiB0aGUgL3Zhci9s b2cgZGlyZWN0b3J5LiIsCi0jZWxzZQotIiAgaW5mb3JtYXRpb24gYWJvdXQgYWN0aXZlIGNvbm5l Y3Rpb25zLiIsCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotIiAiLAotI2lm ZGVmIE9TMgotIlNFVCBJS1MgREVGQVVMVC1ET01BSU4gPGRvbWFpbi1uYW1lPiIsCi0iICBBIHVz ZXJpZCBvbiBXaW5kb3dzIGlzIG9mIHRoZSBmb3JtIERPTUFJTlxcXFx1c2VyaWQuICBUaGlzIGNv bW1hbmQiLAotIiAgZGV0ZXJtaW5lcyB3aGljaCBkb21haW4gd2lsbCBiZSBzZWFyY2hlZCBmb3Ig dGhlIHVzZXJpZCBpZiBhIGRvbWFpbiIsCi0iICBpcyBub3Qgc3BlY2lmaWVkIGJ5IHRoZSB1c2Vy LiAgT24gV2luZG93cyA5NS85OCB3aGVuIFVzZXItbGV2ZWwiLAotIiAgYWNjZXNzIGlzIGFjdGl2 YXRlZCBpbiB0aGUgTmV0d29yayBDb250cm9sIFBhbmVsLCB0aGUgZGVmYXVsdCAiLAotIiAgZG9t YWluIHdpbGwgYmUgYXV0b21hdGljYWxseSBzZXQuICBJZiB0aGUgZGVmYXVsdCBkb21haW4gaXMg bm90IiwKLSIgIHNwZWNpZmllZCwgYWNjb3VudHMgb24gdGhlIGxvY2FsIG1hY2hpbmUgd2lsbCB0 YWtlIHByZWNlZGVuY2Ugb3ZlciIsCi0iICBhY2NvdW50cyBpbiBEb21haW5zIHRvIHdoaWNoIHRo ZSBsb2NhbCBtYWNoaW5lIGJlbG9uZ3MuIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIgIiwKLSJTRVQg SUtTIEhFTFBGSUxFIDxmaWxlbmFtZT4iLAotIiAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgZmls ZSB0byBiZSBkaXNwbGF5ZWQgaWYgdGhlIHVzZXIgdHlwZXMgSEVMUCIsCi0iICAobm90IGZvbGxv d2VkIGJ5IGEgc3BlY2lmaWMgY29tbWFuZCBvciB0b3BpYyksIGluIHBsYWNlIG9mIHRoZSBidWls dC1pbiIsCi0iICB0b3AtbGV2ZWwgaGVscCB0ZXh0LiAgVGhlIGZpbGUgbmVlZCBub3QgZml0IG9u IG9uZSBzY3JlZW47IG1vcmUtcHJvbXB0aW5nIiwKLSIgIGlzIHVzZWQgaWYgdGhlIGZpbGUgaXMg bW9yZSB0aGFuIG9uZSBzY3JlZW4gbG9uZyBpZiBDT01NQU5EIE1PUkUtUFJPTVBUSU5HIiwKLSIg IGlzIE9OLCBhcyBpdCBpcyBieSBkZWZhdWx0LiIsCi0iICIsCi0iU0VUIElLUyBJTklURklMRSA8 ZmlsZW5hbWU+IiwKLSIgIEV4ZWN1dGUgPGZpbGVuYW1lPiByYXRoZXIgdGhhbiB0aGUgbm9ybWFs IGluaXRpYWxpemF0aW9uIGZpbGUgZm9yIHJlYWwiLAotIiAgdXNlcnM7IHRoaXMgb3B0aW9uIGRv ZXMgbm90IGFwcGx5IHRvIGFub255bW91cyB1c2Vycy4iLAotIiAiLAotIlNFVCBJS1MgTk8tSU5J VEZJTEUgeyBPTiwgT0ZGIH0iLAotIiAgRG8gbm90IGV4ZWN1dGUgYW4gaW5pdGlhbGl6YXRpb24g ZmlsZSwgZXZlbiBpZiBhIHJlYWwgdXNlciBpcyBsb2dnaW5nIGluLiIsCi0iICIsCi0iU0VUIElL UyBTRVJWRVItT05MWSB7IE9OLCBPRkYgfSIsCi0iICBJZiB0aGlzIG9wdGlvbiBpcyBpbmNsdWRl ZCBvbiB0aGUgSUtTRCBjb21tYW5kIGxpbmUsIHRoZSBDbGllbnQgU2lkZSBTZXJ2ZXIiCi0sCi0i ICBjb25maWd1cmF0aW9uIGlzIGRpc2FibGVkLCBhbmQgdGhlIHVzZXIgd2lsbCBub3QgZ2V0IGEg VXNlcm5hbWU6IG9yIiwKLSIgIFBhc3N3b3JkOiBwcm9tcHQsIGFuZCB3aWxsIG5vdCBiZSBhYmxl IHRvIGFjY2VzcyB0aGUgSUtTRCBjb21tYW5kIHByb21wdC4iLAotIiAgQSBGSU5JU0ggY29tbWFu ZCBzZW50IHRvIHRoZSBJS1NEIHdpbGwgbG9nIGl0IG91dCBhbmQgY2xvc2UgdGhlIiwKLSIgIGNv bm5lY3Rpb24sIHJhdGhlciB0aGFuIHJldHVybmluZyBpdCB0byBpdHMgcHJvbXB0LiIsCi0iICIs Ci0iU0VUIElLUyBUSU1FT1VUIDxudW1iZXI+IiwKLSIgIFRoaXMgc2V0cyBhIGxpbWl0IChpbiBz ZWNvbmRzKSBvbiB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIGNsaWVudCBoYXMgdG8gbG9nIiwKLSIg IGluIG9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgbWFkZS4gIElmIHN1Y2Nlc3NmdWwgbG9naW4gZG9l cyBub3Qgb2NjdXIgd2l0aGluIiwKLSIgIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcywgdGhl IGNvbm5lY3Rpb24gaXMgY2xvc2VkLiAgVGhlIGRlZmF1bHQgdGltZW91dCIKLSwKLSIgIGlzIDMw MCBzZWNvbmRzICg1IG1pbnV0ZXMpLiAgQSB2YWx1ZSBvZiAwIG9yIGxlc3MgaW5kaWNhdGVzIHRo ZXJlIGlzIHRvIGJlIiwKLSIgIG5vIGxpbWl0LiIsCi0iICIsCi0iU0VUIElLUyBVU0VSRklMRSA8 ZmlsZW5hbWU+IiwKLSNpZmRlZiBVTklYCi0iICBUaGlzIGZpbGUgY29udGFpbnMgYSBsaXN0IG9m IGxvY2FsIHVzZXJuYW1lcyB0aGF0IGFyZSB0byBiZSBkZW5pZWQgYWNjZXNzIiwKLSIgIHRvIElu dGVybmV0IEtlcm1pdCBTZXJ2aWNlLiAgVGhlIGRlZmF1bHQgaXMgL2V0Yy9mdHB1c2Vycy4gIFRo aXMgY2FuIGJlIHRoZSIKLSwKLSIgIHNhbWUgZmlsZSB0aGF0IGlzIHVzZWQgYnkgd3VmdHBkLCBh bmQgdGhlIHN5bnRheCBpcyB0aGUgc2FtZTogb25lIHVzZXJuYW1lIiwKLSIgIHBlciBsaW5lOyBs aW5lcyBzdGFydGluZyB3aXRoIFwiI1wiIGFyZSBpZ25vcmVkLiAgVXNlIHRoaXMgb3B0aW9uIHRv IiwKLSIgIHNwZWNpZnkgdGhlIG5hbWUgb2YgYSBkaWZmZXJlbnQgZm9yYmlkZGVuLXVzZXIgZmls ZSwgb3IgdXNlIiwKLSIgIFwic2V0IGlrcyB1c2VyZmlsZSAvZGV2L251bGxcIiB0byBkaXNhYmxl IHRoaXMgZmVhdHVyZSBpbiBjYXNlIHRoZXJlIGlzIGEiLAotIiAgIC9ldGMvZnRwdXNlcnMgZmls ZSBidXQgeW91IGRvbid0IHdhbnQgdG8gdXNlIGl0LiIsCi0jZWxzZQotIiAgVGhpcyBmaWxlIGNv bnRhaW5zIGEgbGlzdCBvZiBsb2NhbCB1c2VybmFtZXMgdGhhdCBhcmUgdG8gYmUgZGVuaWVkIGFj Y2VzcyIsCi0iICB0byBJbnRlcm5ldCBLZXJtaXQgU2VydmljZS4gIFRoZSBzeW50YXggaXM6IG9u ZSB1c2VybmFtZSBwZXIgbGluZTsgbGluZXMiLAotIiAgc3RhcnRpbmcgd2l0aCBcIiNcIiBhcmUg aWdub3JlZC4iLAotI2VuZGlmIC8qIFVOSVggKi8KLSIgIiwKLSJTRVQgSUtTIFhGRVJMT0cgeyBP TiwgT0ZGIH0iLAotI2lmZGVmIFVOSVgKLSIgIFdoZXRoZXIgYSBmaWxlLXRyYW5zZmVyIGxvZyBz aG91bGQgYmUga2VwdC4gIE9mZiBieSBkZWZhdWx0LiAgSWYgXCJvblwiLCIsCi0iICBidXQgbm8g U0VUIElLU0QgWEZFUkZJTEUgY29tbWFuZCBpcyBnaXZlbiwgL3Zhci9sb2cvaWtzZC5sb2cgaXMg dXNlZC4iLAotI2Vsc2UKLSIgIFdoZXRoZXIgYSBmaWxlLXRyYW5zZmVyIGxvZyBzaG91bGQgYmUg a2VwdC4gIE9mZiBieSBkZWZhdWx0LiIsCi0jZW5kaWYgLyogVU5JWCAqLwotIiAiLAotIlNFVCBJ S1MgWEZFUkZJTEUgPGZpbGVuYW1lPiIsCi0iICBVc2UgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSBh biBpa3NkIGxvZyBmaWxlIG5hbWUuICBJZiB5b3UgaW5jbHVkZSB0aGlzIiwKLSIgIG9wdGlvbiwg aXQgaW1wbGllcyBTRVQgSUtTIFhGRVJGSUxFIE9OLiIsCi0iIgotfTsKLSNlbmRpZiAvKiBOT0lL U0QgKi8KLQotLyogIEQgTyBIIFMgRSBUICAtLSAgR2l2ZSBoZWxwIGZvciBTRVQgY29tbWFuZCAg Ki8KLQotaW50Ci1kb2hzZXQoeHgpIGludCB4eDsgewotICAgIGludCB4OwotCi0gICAgaWYgKHh4 ID09IC0zKSByZXR1cm4oaG1zZ2EoaG1oc2V0KSk7Ci0gICAgaWYgKHh4IDwgMCkgcmV0dXJuKHh4 KTsKLQotI2lmZGVmIE5FV0ZUUAotICAgIGlmICh4eCA9PSBYWUZUUFgpCi0gICAgICByZXR1cm4o ZG9zZXRmdHBobHAoKSk7Ci0gICAgaWYgKHh4ID09IFhZR1BSKQotICAgICAgcmV0dXJuKGhtc2dh KGhteHlncHIpKTsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHgpOwotICAgIHN3aXRjaCAoeHgpIHsKLSNpZm5kZWYgTk9JS1NECi0gICAg ICBjYXNlIFhZSUtTOgotICAgICAgICByZXR1cm4oaG1zZ2EoaHNldGlrcykpOwotI2VuZGlmIC8q IE5PSUtTRCAqLwotCi1jYXNlIFhZX1JFTjoKLSAgcmV0dXJuKGhtc2coIlNFVCBSRU5BTUUgTElT VCB7IE9OLCBPRkYgfVxuXAotICBUZWxscyB3aGV0aGVyIHRoZSBSRU5BTUUgY29tbWFuZCBzaG91 bGQgbGlzdCBpdHMgcmVzdWx0cyBieSBkZWZhdWx0LlxuXG5cCi1TRVQgUkVOQU1FIENPTExJU0lP TiB7IEZBSUwsIFBST0NFRUQsIE9WRVJXUklURSB9XG5cCi0gIEVzdGFibGlzaGVzIHRoZSBkZWZh dWx0IGFjdGlvbiB3aGVuIHJlbmFtaW5nIGEgZmlsZSB3b3VsZCBkZXN0cm95IGFuXG5cCi0gIGV4 aXN0aW5nIGZpbGUuICBTZWUgSEVMUCBSRU5BTUUuIikpOwotCi1jYXNlIFhZQVRUUjoKLSAgICBy ZXR1cm4oaG1zZ2EoaHNldGF0KSk7Ci0KLWNhc2UgWFlCQUNLOgotICAgIHJldHVybihobXNnYSho c2V0YmtnKSk7Ci0KLWNhc2UgWFlCRUxMOgotICAgIHJldHVybihobXNnYShobXh5YmVsKSk7Ci0K LSNpZmRlZiBPUzIKLWNhc2UgWFlQUlRZOgotICAgIHJldHVybihobXNnKCJTRVQgUFJJT1JJVFkg eyBSRUdVTEFSLCBGT1JFR1JPVU5ELVNFUlZFUiwgVElNRS1DUklUSUNBTCB9XG5cCi0gIFNwZWNp ZmllcyBhdCB3aGljaCBwcmlvcml0eSBsZXZlbCB0aGUgY29tbXVuaWNhdGlvbiBhbmQgc2NyZWVu IHVwZGF0ZVxuXAotICB0aHJlYWRzIHNob3VsZCBvcGVyYXRlLiAgVGhlIGRlZmF1bHQgdmFsdWUg aXMgRk9SRUdST1VORC1TRVJWRVIuIikpOwotCi1jYXNlIFhZTVNLOgotICAgIHJldHVybihobXNn YShobXh5bXNrKSk7Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBEWU5BTUlDCi1jYXNlIFhZ QlVGOgotICAgIHJldHVybihobXNnYShoc2V0YnVmKSk7Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwot Ci0jaWZuZGVmIE5PTE9DQUwKLWNhc2UgWFlDQVJSOgotICAgIHJldHVybihobXNnYShoc2V0Y2Fy KSk7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PU1BMCi1jYXNlIFhZQ0FTRToK LSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgQ0FTRSB7IE9OLCBPRkYgfVxuXAotICBUZWxs cyB3aGV0aGVyIGFscGhhYmV0aWMgY2FzZSBpcyBzaWduaWZpY2FudCBpbiBzdHJpbmcgY29tcGFy aXNvbnNcblwKLSAgZG9uZSBieSBJTlBVVCwgSUYsIGFuZCBvdGhlciBjb21tYW5kcy4gIFRoaXMg c2V0dGluZyBpcyBsb2NhbCB0byB0aGVcblwKLSAgY3VycmVudCBtYWNybyBvciBjb21tYW5kIGZp bGUsIGFuZCBpbmhlcml0ZWQgYnkgc3Vib3JkaW5hdGVzLiIpKTsKLQotI2VuZGlmIC8qIE5PU1BM ICovCi0KLWNhc2UgWFlDTUQ6Ci0gICAgcmV0dXJuKGhtc2dhKGhzZXRjbWQpKTsKLQotY2FzZSBY WUlGRDoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgSU5DT01QTEVURSB7IERJU0NBUkQs IEtFRVAgfVxuXAotICBXaGV0aGVyIHRvIGRpc2NhcmQgb3Iga2VlcCBpbmNvbXBsZXRlbHkgcmVj ZWl2ZWQgZmlsZXMsIGRlZmF1bHQgaXMgS0VFUC4iKSk7Ci0KLSNpZm5kZWYgTk9TUEwKLWNhc2Ug WFlJTlBVOgotICAgIHJldHVybihobXNnYShoeHlpbnApKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwot Ci1jYXNlIFhZQ0hLVDoKLSAgICByZXR1cm4oaG1zZ2EoaG14eWNoa3QpKTsKLQotI2lmbmRlZiBO T1NQTAotY2FzZSBYWUNPVU46Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogIFNFVCBDT1VOVCBu dW1iZXJcblwKLSBFeGFtcGxlOiBTRVQgQ09VTlQgNVxuXAotICBTZXQgdXAgYSBsb29wIGNvdW50 ZXIsIGZvciB1c2Ugd2l0aCBJRiBDT1VOVC4gIExvY2FsIHRvIGN1cnJlbnQgbWFjcm9cblwKLSAg b3IgY29tbWFuZCBmaWxlLCBpbmhlcml0ZWQgYnkgc3Vib3JkaW5hdGUgbWFjcm9zIGFuZCBjb21t YW5kIGZpbGVzLiIpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1jYXNlIFhZREVCVToKLSAgICBy ZXR1cm4oaG1zZ2EoaG14eWRlYikpOwotCi1jYXNlIFhZREZMVDoKLSAgICByZXR1cm4oaG1zZygi U3ludGF4OiBTRVQgREVGQVVMVCBkaXJlY3RvcnlcblwKLSAgQ2hhbmdlIGRpcmVjdG9yeS4gIEVx dWl2YWxlbnQgdG8gQ0QgY29tbWFuZC4iKSk7Ci0KLWNhc2UgWFlERUxBOgotICAgIHJldHVybiho bXNnKCJTeW50YXg6IFNFVCBERUxBWSBudW1iZXJcblwKLSAgTnVtYmVyIG9mIHNlY29uZHMgdG8g d2FpdCBiZWZvcmUgc2VuZGluZyBmaXJzdCBwYWNrZXQgYWZ0ZXIgU0VORCBjb21tYW5kLiIpKTsK LQotI2lmbmRlZiBOT0RJQUwKLWNhc2UgWFlESUFMOgotICAgIHJldHVybihobXNnYShobXh5ZGlh bCkpOwotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0jaWZkZWYgVU5JWAotY2FzZSBYWVNVU1A6Ci0g ICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIFNVU1BFTkQgeyBPRkYsIE9OIH1cblwKLSAgRGlz YWJsZXMgU1VTUEVORCBjb21tYW5kLCBzdXNwZW5kIHNpZ25hbHMsIGFuZCA8ZXNjLWNoYXI+WiBk dXJpbmcgQ09OTkVDVC4iKQotICAgICAgICAgICApOwotI2VuZGlmCi0KLSNpZm5kZWYgTk9TQ1JJ UFQKLWNhc2UgWFlTQ1JJOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBTQ1JJUFQgRUNI TyB7IE9GRiwgT04gfVxuXAotICBEaXNhYmxlcy9FbmFibGVzIGVjaG9pbmcgb2YgU0NSSVBUIGNv bW1hbmQgb3BlcmF0aW9uLiIpKTsKLSNlbmRpZiAvKiBOT1NDUklQVCAqLwotCi1jYXNlIFhZVEFL RToKLSAgICByZXR1cm4oaG1zZ2EoaHh5dGFrKSk7Ci0KLSNpZm5kZWYgTk9MT0NBTAotY2FzZSBY WVRFUk06Ci0gICAgcmV0dXJuKGhtc2dhKGh4eXRlcm0pKTsKLQotY2FzZSBYWURVUEw6Ci0gICAg cmV0dXJuKGhtc2coIlN5bnRheDogU0VUIERVUExFWCB7IEZVTEwsIEhBTEYgfVxuXAotICBEdXJp bmcgQ09OTkVDVDogRlVMTCBtZWFucyByZW1vdGUgaG9zdCBlY2hvZXMsIEhBTEYgbWVhbnMgS2Vy bWl0XG5cCi0gIGRvZXMgaXRzIG93biBlY2hvaW5nLiIpKTsKLQotY2FzZSBYWUxDTEU6Ci0gICAg cmV0dXJuKGhtc2coIlN5bnRheDogU0VUIExPQ0FMLUVDSE8geyBPRkYsIE9OIH1cblwKLSAgRHVy aW5nIENPTk5FQ1Q6IE9GRiBtZWFucyByZW1vdGUgaG9zdCBlY2hvZXMsIE9OIG1lYW5zIEtlcm1p dFxuXAotICBkb2VzIGl0cyBvd24gZWNob2luZy4gIFN5bm9ueW0gZm9yIFNFVCBEVVBMRVggeyBG VUxMLCBIQUxGIH0uIikpOwotCi1jYXNlIFhZRVNDOgotICAgIHJldHVybihobXNnYShoeHllc2Mp KTsgICAgICAgICAgICAgIC8qIFNFVCBFU0NBUEUgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0K LWNhc2UgWFlQUlRSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgUFJJTlRFUiAq LwotICAgIHJldHVybihobXNnYShoeHlwcnRyKSk7Ci0KLSNpZmRlZiBPUzIKLSNpZmRlZiBCUFJJ TlQKLWNhc2UgWFlCRENQOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgQlBSSU5U RVIgKi8KLSAgICByZXR1cm4oaG1zZ2EoaHh5YnBydHIpKTsKLSNlbmRpZiAvKiBCUFJJTlQgKi8K LSNlbmRpZiAvKiBPUzIgKi8KLQotY2FzZSBYWUVYSVQ6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eWV4 aXQpKTsKLQotY2FzZSBYWUZJTEU6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHlmKSk7Ci0KLWNhc2Ug WFlGTE9XOgotICAgIHJldHVybihobXNnYShobXh5ZmxvKSk7Ci0KLWNhc2UgWFlIQU5EOgotICAg cmV0dXJuKGhtc2dhKGhteHloc2gpKTsKLQotI2lmZGVmIE5FVENPTk4KLQotY2FzZSBYWUhPU1Q6 Ci0gICAgcmV0dXJuKGhtc2dhKGh4eWhvc3QpKTsKLQotY2FzZSBYWU5FVDoKLSAgICByZXR1cm4o aG1zZ2EoaHh5bmV0KSk7Ci0KLSNpZm5kZWYgTk9UQ1BPUFRTCi0jaWZkZWYgU09MX1NPQ0tFVAot Y2FzZSBYWVRDUDoKLSAgICByZXR1cm4oaG1zZ2EoaHh5dGNwKSk7Ci0jZW5kaWYgLyogU09MX1NP Q0tFVCAqLwotI2VuZGlmIC8qIE5PVENQT1BUUyAqLwotCi0jaWZkZWYgQU5ZWDI1Ci1jYXNlIFhZ WDI1OgotICAgIHJldHVybihobXNnYShoeHl4MjUpKTsKLQotI2lmbmRlZiBJQk1YMjUKLWNhc2Ug WFlQQUQ6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIFBBRCBuYW1lIHZhbHVlXG5cCi1T ZXQgYSBQQUQgWC4zIHBhcmFtZXRlciB3aXRoIGEgZGVzaXJlZCB2YWx1ZS4iKSk7Ci0jZW5kaWYg LyogSUJNWDI1ICovCi0jZW5kaWYgLyogQU5ZWDI1ICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwot Ci0jaWZuZGVmIE5PU1BMCi1jYXNlIFhZT1VUUDoKLSAgICByZXR1cm4oaG1zZ2EoaHh5b3V0KSk7 Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1NFVEtFWQotY2FzZSBYWUtFWTogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBLRVkgKi8KLSAgICByZXR1cm4oaG1zZ2Eo aG1oc2tleSkpOwotI2VuZGlmIC8qIE5PU0VUS0VZICovCi0KLSNpZm5kZWYgTk9DU0VUUwotY2Fz ZSBYWUxBTkc6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIExBTkdVQUdFIG5hbWVcblwK LSAgU2VsZWN0cyBsYW5ndWFnZS1zcGVjaWZpYyB0cmFuc2xhdGlvbiBydWxlcyBmb3IgdGV4dC1t b2RlIGZpbGUgdHJhbnNmZXJzLlxuXAotICBVc2VkIHdpdGggU0VUIEZJTEUgQ0hBUkFDVEVSLVNF VCBhbmQgU0VUIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgd2hlbiBvbmVcblwKLSAgb2YgdGhlc2Ug aXMgQVNDSUkuIikpOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotY2FzZSBYWUxJTkU6Ci0gICAg cHJpbnRmKCJcblN5bnRheDogU0VUIExJTkUgKG9yIFNFVCBQT1JUKSBbIHN3aXRjaGVzIF0gWyBk ZXZpY2VuYW1lIF1cblwKLSAgU2VsZWN0cyBhIHNlcmlhbC1wb3J0IGRldmljZSB0byB1c2UgZm9y IG1ha2luZyBjb25uZWN0aW9ucy5cbiIpOwotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0gICAgcHJp bnRmKCJcbiIpOwotICAgIHByaW50ZigKLSIgIFlvdSBtYXkgYWNjZXNzIGNvbW11bmljYXRpb24g cG9ydHMgYnkgdGhlIHRyYWRpdGlvbmFsIFwiRE9TXCIgcG9ydCBuYW1lXG4iKTsKLSAgICBwcmlu dGYoCi0iICAoZS5nLiBTRVQgUE9SVCBDT00xKSBvciBieSB0aGUgTWljcm9zb2Z0IFRlbGVwaG9u eSBtb2RlbSBuYW1lIGZyb20gdGhlXG4iKTsKLSAgICBwcmludGYoCi0iICBNb2RlbXMgZm9sZGVy IG9mIHRoZSBDb250cm9sIFBhbmVsIChlLmcuIFNFVCBQT1JUIFRBUEkpLiBJZiBvbmUgbWV0aG9k XG4iKTsKLSAgICBwcmludGYoIiAgZG9lc24ndCB3b3JrLCB0cnkgdGhlIG90aGVyLlxuXG4iKTsK LSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UgIC8qIE9TMiAqLwotICAgIHByaW50ZigiICBUeXBpY2Fs IGRldmljZSBuYW1lIGZvciB0aGlzIHBsYXRmb3JtOiAlcy5cbiIsdHRndHBuKCkpOwotICAgIHBy aW50ZigiICBUaGUgZGVmYXVsdCBkZXZpY2UgbmFtZSBpcyAlcyAoaS5lLiBub25lKS5cbiIsZGZ0 dHkpOwotICAgIGlmICghZGZsb2MpIHsKLSAgICAgICAgcHJpbnRmKAotIiAgSWYgeW91IGRvIG5v dCBnaXZlIGEgU0VUIExJTkUgY29tbWFuZCBvciBpZiB5b3UgZ2l2ZSBhIFNFVCBMSU5FIGNvbW1h bmRcbiIpOwotICAgICAgICBwcmludGYoCi0iICB3aXRoIG5vIGRldmljZSBuYW1lLCBvciBpZiB5 b3Ugc3BlY2lmeSAlcyBhcyB0aGUgZGV2aWNlIG5hbWUsXG4iLGRmdHR5KTsKLSAgICAgICAgcHJp bnRmKAotIiAgS2VybWl0IHdpbGwgYmUgaW4gXCJyZW1vdGUgbW9kZVwiLCBzdWl0YWJsZSBmb3Ig dXNlIG9uIHRoZSBmYXIgZW5kIG9mIGFcbiIpOwotICAgICAgICBwcmludGYoCi0iICBjb25uZWN0 aW9uLCBlLmcuIGFzIHRoZSBmaWxlLXRyYW5zZmVyIHBhcnRuZXIgb2YgeW91ciBkZXNrdG9wIGNv bW11bmljYXRpb25cCi1cbiIpOwotICAgICAgICBwcmludGYoCi0iICBzb2Z0d2FyZS4gIElmIHlv dSBTRVQgTElORSB0byBhIHNwZWNpZmljIGRldmljZSBvdGhlciB0aGFuICVzLFxuIiwgZGZ0dHkp OwotICAgICAgICBwcmludGYoCi0iICBLZXJtaXQgaXMgaW4gXCJsb2NhbCBtb2RlXCIsIHN1aXRh YmxlIGZvciBtYWtpbmcgYSBjb25uZWN0aW9uIHRvIGFub3RoZXJcbiIKLSAgICAgICAgICAgICAg KTsKLSAgICAgICAgcHJpbnRmKAotIiAgY29tcHV0ZXIuICBTRVQgTElORSBhbG9uZSByZXNldHMg S2VybWl0IHRvIHJlbW90ZSBtb2RlLlxuIik7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAg ICAgICBwcmludGYoCi0iICBUbyB1c2UgYSBtb2RlbSB0byBkaWFsIG91dCwgZmlyc3QgU0VUIE1P REVNIFRZUEUgKGUuZy4sIHRvIFVTUiksIHRoZW5cbiIpOwotICAgIHByaW50ZigKLSNpZmRlZiBP UzIKLSIgIFNFVCBQT1JUIENPTXggKG9yIFNFVCBQT1JUIFRBUEkpLCBTRVQgU1BFRUQsIHRoZW4g Z2l2ZSBhIERJQUwgY29tbWFuZC5cbiIpOwotI2Vsc2UKLSIgIFNFVCBMSU5FIHh4eCwgdGhlbiBT RVQgU1BFRUQsIHRoZW4gZ2l2ZSBhIERJQUwgY29tbWFuZC5cbiIpOwotI2VuZGlmIC8qIE9TMiAq LwotICAgIHByaW50ZigKLSNpZmRlZiBPUzIKLSIgIEZvciBkaXJlY3QgbnVsbC1tb2RlbSBjb25u ZWN0aW9ucyB1c2UgU0VUIE1PREVNIFRZUEUgTk9ORSwgU0VUIFBPUlQgQ09NeCxcbiIKLSNlbHNl Ci0iICBGb3IgZGlyZWN0IG51bGwtbW9kZW0gY29ubmVjdGlvbnMsIHVzZSBTRVQgTU9ERU0gVFlQ RSBOT05FLCBTRVQgTElORSB4eHgsXG4iCi0jZW5kaWYgLyogT1MyICovCi0gICAgKTsKLSAgICBw cmludGYoCi0iICB0aGVuIFNFVCBGTE9XLCBTRVQgU1BFRUQsIGFuZCBDT05ORUNULlxuIik7Ci0g ICAgcHJpbnRmKAotIlxuT3B0aW9uYWwgc3dpdGNoZXM6XG5cCi0gIC9DT05ORUNUIC0gRW50ZXIg Q09OTkVDVCBtb2RlIGF1dG9tYXRpY2FsbHkgaWYgU0VUIExJTkUgc3VjY2VlZHMuXG4iKTsKLSAg ICBwcmludGYoCi0iICAvU0VSVkVSICAtIEVudGVyIHNlcnZlciBtb2RlIGF1dG9tYXRpY2FsbHkg aWYgU0VUIExJTkUgc3VjY2VlZHMuXG4iKTsKLSNpZmRlZiBWTVMKLSAgICBwcmludGYoCi0iICAv U0hBUkUgICAtIE9wZW4gdGhlIGRldmljZSBpbiBzaGFyZWQgbW9kZS5cbiIpOwotICAgIHByaW50 ZigKLSIgIC9OT1NIQVJFIC0gT3BlbiB0aGUgZGV2aWNlIGluIGV4Y2x1c2l2ZSBtb2RlLlxuIik7 Ci0jZW5kaWYgLyogVk1TICovCi0gICAgcHJpbnRmKCJcbiIpOwotICAgIHByaW50ZigKLSJBbHNv IHNlZSBIRUxQIFNFVCBNT0RFTSwgSEVMUCBTRVQgRElBTCwgSEVMUCBTRVQgU1BFRUQsIEhFTFAg U0VUIEZMT1cuXG4iKTsKLSAgICByZXR1cm4oMCk7Ci0KLSNpZm5kZWYgTk9TUEwKLWNhc2UgWFlN QUNSOgotICAgIHJldHVybihobXNnYShoeHltYWNyKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQot I2lmbmRlZiBOT0RJQUwKLWNhc2UgWFlNT0RNOgotICAgIHJldHVybihobXNnYShoeHltb2RtKSk7 Ci0jZW5kaWYgLyogTk9ESUFMICovCi0KLWNhc2UgWFlQQVJJOgotICAgIHJldHVybihobXNnYSho eHlwYXJpKSk7Ci0KLWNhc2UgWFlQUk9NOgotICAgIHJldHVybihobXNnYShobXh5cHJtKSk7Ci0K LWNhc2UgWFlRVUlFOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBRVUlFVCB7T04sIE9G Rn1cblwKLSAgTm9ybWFsbHkgT0ZGLiAgT04gZGlzYWJsZXMgbW9zdCBpbmZvcm1hdGlvbiBtZXNz YWdlcyBkdXJpbmcgaW50ZXJhY3RpdmVcblwKLSAgb3BlcmF0aW9uLiIpKTsKLQotI2lmZGVmIENL X1NQRUVECi1jYXNlIFhZUUNUTDoKLSAgICByZXR1cm4oaG1zZ2EoaG14eXFjdGwpKTsKLSNlbmRp ZiAvKiBDS19TUEVFRCAqLwotCi1jYXNlIFhZUkVUUjoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4 OiBTRVQgUkVUUlkgbnVtYmVyXG5cCi0gIEluIEtlcm1pdCBwcm90b2NvbCBmaWxlIHRyYW5zZmVy czogSG93IG1hbnkgdGltZXMgdG8gcmV0cmFuc21pdCBhXG5cCi0gIHBhcnRpY3VsYXIgcGFja2V0 IGJlZm9yZSBnaXZpbmcgdXA7IDAgPSBubyBsaW1pdC4iKSk7Ci0KLSNpZm5kZWYgTk9MT0NBTAot Y2FzZSBYWVNFU1M6Ci0jaWZkZWYgVU5JWAotICAgIHJldHVybihobXNnKAotIlN5bnRheDpcblwK LSBTRVQgU0VTU0lPTi1MT0cgeyBCSU5BUlksIERFQlVHLCBOVUxMLVBBRERFRCwgVEVYVCwgVElN RVNUQU1QRUQtVEVYVCB9XG5cCi0gIElmIEJJTkFSWSwgcmVjb3JkIGFsbCBDT05ORUNUIGNoYXJh Y3RlcnMgaW4gc2Vzc2lvbiBsb2cuICBJZiBURVhULCBzdHJpcFxuXAotICBvdXQgQ1IsIE5VTCwg YW5kIFhPTi9YT0ZGIGNoYXJhY3RlcnMuICBERUJVRyBpcyB0aGUgc2FtZSBhcyBCSU5BUlkgYnV0 XG5cCi0gIGFsc28gaW5jbHVkZXMgVGVsbmV0IG5lZ290aWF0aW9ucyBvbiBUQ1AvSVAgY29ubmVj dGlvbnMuIikpOwotI2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIHJldHVybihobXNnKAot IlN5bnRheDogU0VUIFNFU1NJT04tTE9HIHsgQklOQVJZLCBERUJVRywgVEVYVCwgVElNRVNUQU1Q RUQtVEVYVCB9XG5cCi0gIElmIEJJTkFSWSwgcmVjb3JkIGFsbCBDT05ORUNUIGNoYXJhY3RlcnMg aW4gc2Vzc2lvbiBsb2cuICBJZiBURVhULCBzdHJpcFxuXAotICBvdXQgQ1IsIE5VTCwgYW5kIFhP Ti9YT0ZGIGNoYXJhY3RlcnMuICBERUJVRyBpcyB0aGUgc2FtZSBhcyBCSU5BUlkgYnV0XG5cCi0g IGFsc28gaW5jbHVkZXMgVGVsbmV0IG5lZ290aWF0aW9ucyBvbiBUQ1AvSVAgY29ubmVjdGlvbnMu IikpOwotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0gICAgcmV0dXJuKGhtc2coCi0iU3ludGF4OiBT RVQgU0VTU0lPTi1MT0cgeyBCSU5BUlksIERFQlVHLCBURVhULCBUSU1FU1RBTVBFRC1URVhUIH1c blwKLSAgSWYgQklOQVJZLCByZWNvcmQgYWxsIENPTk5FQ1QgY2hhcmFjdGVycyBpbiBzZXNzaW9u IGxvZy4gIElmIFRFWFQsIHN0cmlwXG5cCi0gIG91dCBDUiwgTlVMLCBhbmQgWE9OL1hPRkYgY2hh cmFjdGVycy4gIERFQlVHIGlzIHRoZSBzYW1lIGFzIEJJTkFSWSBidXRcblwKLSAgYWxzbyBpbmNs dWRlcyBUZWxuZXQgbmVnb3RpYXRpb25zIG9uIFRDUC9JUCBjb25uZWN0aW9ucy4iKSk7Ci0jZWxz ZQotI2lmZGVmIEFNSUdBCi0gICAgcmV0dXJuKGhtc2coCi0iU3ludGF4OiBTRVQgU0VTU0lPTi1M T0cgeyBCSU5BUlksIERFQlVHLCBURVhULCBUSU1FU1RBTVBFRC1URVhUIH1cblwKLSAgSWYgQklO QVJZLCByZWNvcmQgYWxsIENPTk5FQ1QgY2hhcmFjdGVycyBpbiBzZXNzaW9uIGxvZy4gIElmIFRF WFQsIHN0cmlwXG5cCi0gIG91dCBDUiwgTlVMLCBhbmQgWE9OL1hPRkYgY2hhcmFjdGVycy4gIERF QlVHIGlzIHRoZSBzYW1lIGFzIEJJTkFSWSBidXRcblwKLSAgYWxzbyBpbmNsdWRlcyBUZWxuZXQg bmVnb3RpYXRpb25zIG9uIFRDUC9JUCBjb25uZWN0aW9ucy4iKSk7Ci0jZWxzZQotI2lmZGVmIEdF TURPUwotICAgIHJldHVybihobXNnKAotIlN5bnRheDogU0VUIFNFU1NJT04tTE9HIHsgQklOQVJZ LCBERUJVRywgVEVYVCwgVElNRVNUQU1QRUQtVEVYVCB9XG5cCi0gIElmIEJJTkFSWSwgcmVjb3Jk IGFsbCBDT05ORUNUIGNoYXJhY3RlcnMgaW4gc2Vzc2lvbiBsb2cuICBJZiBURVhULCBzdHJpcFxu XAotICBvdXQgQ1IsIE5VTCwgYW5kIFhPTi9YT0ZGIGNoYXJhY3RlcnMuICBERUJVRyBpcyB0aGUg c2FtZSBhcyBCSU5BUlkgYnV0XG5cCi0gIGFsc28gaW5jbHVkZXMgVGVsbmV0IG5lZ290aWF0aW9u cyBvbiBUQ1AvSVAgY29ubmVjdGlvbnMuIikpOwotI2Vsc2UKLSNpZmRlZiBPUzIKLSAgICByZXR1 cm4oaG1zZygKLSJTeW50YXg6IFNFVCBTRVNTSU9OLUxPRyB7IEJJTkFSWSwgREVCVUcsIFRFWFQs IFRJTUVTVEFNUEVELVRFWFQgfVxuXAotICBJZiBCSU5BUlksIHJlY29yZCBhbGwgQ09OTkVDVCBj aGFyYWN0ZXJzIGluIHNlc3Npb24gbG9nLiAgSWYgVEVYVCwgc3RyaXBcblwKLSAgb3V0IE5VTCBh bmQgWE9OL1hPRkYgY2hhcmFjdGVycy4gIERFQlVHIGlzIHRoZSBzYW1lIGFzIEJJTkFSWSBidXRc blwKLSAgYWxzbyBpbmNsdWRlcyBUZWxuZXQgbmVnb3RpYXRpb25zIG9uIFRDUC9JUCBjb25uZWN0 aW9ucy4iKSk7Ci0jZWxzZQotI2lmZGVmIFZNUwotICAgIHJldHVybihobXNnKAotIlN5bnRheDog U0VUIFNFU1NJT04tTE9HIHsgQklOQVJZLCBERUJVRywgVEVYVCwgVElNRVNUQU1QRUQtVEVYVCB9 XG5cCi0gIElmIEJJTkFSWSwgcmVjb3JkIGFsbCBDT05ORUNUIGNoYXJhY3RlcnMgaW4gc2Vzc2lv biBsb2cuICBJZiBURVhULCBzdHJpcFxuXAotICBvdXQgQ1IsIE5VTCwgYW5kIFhPTi9YT0ZGIGNo YXJhY3RlcnMuICBERUJVRyBpcyB0aGUgc2FtZSBhcyBCSU5BUlkgYnV0XG5cCi0gIGFsc28gaW5j bHVkZXMgVGVsbmV0IG5lZ290aWF0aW9ucyBvbiBUQ1AvSVAgY29ubmVjdGlvbnMuIikpOwotI2Vs c2UKLSNpZmRlZiBPU0sKLSAgICByZXR1cm4oaG1zZygKLSJTeW50YXg6IFNFVCBTRVNTSU9OLUxP RyB7IEJJTkFSWSwgREVCVUcsIFRFWFQsIFRJTUVTVEFNUEVELVRFWFQgfVxuXAotICBJZiBCSU5B UlksIHJlY29yZCBhbGwgQ09OTkVDVCBjaGFyYWN0ZXJzIGluIHNlc3Npb24gbG9nLiAgSWYgVEVY VCwgc3RyaXBcblwKLSAgb3V0IExGLCBOVUwgYW5kIFhPTi9YT0ZGIGNoYXJhY3RlcnMuIikpOwot I2Vsc2UKLSNpZmRlZiBNQUMKLSAgICByZXR1cm4oaG1zZygKLSJTeW50YXg6IFNFVCBTRVNTSU9O LUxPRyB7IEJJTkFSWSwgREVCVUcsIFRFWFQsIFRJTUVTVEFNUEVELVRFWFQgfVxuXAotICBJZiBC SU5BUlksIHJlY29yZCBhbGwgQ09OTkVDVCBjaGFyYWN0ZXJzIGluIHNlc3Npb24gbG9nLiAgSWYg VEVYVCwgc3RyaXBcblwKLSAgb3V0IExGLCBOVUwgYW5kIFhPTi9YT0ZGIGNoYXJhY3RlcnMuIikp OwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIE9TMiAqLwot I2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIEdFTURPUyAqLwotI2VuZGlmIC8qIEFNSUdBICov Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYg LyogT1MyT1JVTklYICovCi0KLWNhc2UgWFlTUEVFOgotI2lmZGVmIE9TMgotCi0gICAgcmV0dXJu KGhtc2coIlN5bnRheDogU0VUIFNQRUVEIG51bWJlclxuXAotICBTcGVlZCBmb3Igc2VyaWFsLXBv cnQgY29tbXVuaWNhdGlvbiBkZXZpY2Ugc3BlY2lmaWVkIGluIG1vc3QgcmVjZW50XG5cCi0gIFNF VCBQT1JUIGNvbW1hbmQsIGluIGJpdHMgcGVyIHNlY29uZC4gIFR5cGUgU0VUIFNQRUVEID8gZm9y IGEgbGlzdCBvZlxuXAotICBwb3NzaWJsZSBzcGVlZHMuIikpOwotI2Vsc2UKLSAgICByZXR1cm4o aG1zZygiU3ludGF4OiBTRVQgU1BFRUQgbnVtYmVyXG5cCi0gIFNwZWVkIGZvciBzZXJpYWwtcG9y dCBjb21tdW5pY2F0aW9uIGRldmljZSBzcGVjaWZpZWQgaW4gbW9zdCByZWNlbnRcblwKLSAgU0VU IExJTkUgY29tbWFuZCwgaW4gYml0cyBwZXIgc2Vjb25kLiAgVHlwZSBTRVQgU1BFRUQgPyBmb3Ig YSBsaXN0IG9mXG5cCi0gIHBvc3NpYmxlIHNwZWVkcy4gIEhhcyBubyBlZmZlY3Qgb24gam9iJ3Mg Y29udHJvbGxpbmcgdGVybWluYWwuIikpOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5P TE9DQUwgKi8KLQotI2lmbmRlZiBOT1hGRVIKLWNhc2UgWFlSRUNWOgotICAgIHJldHVybihobXNn YShoeHlyY3YpKTsKLWNhc2UgWFlTRU5EOgotICAgIHJldHVybihobXNnYShoeHlzbmQpKTsKLWNh c2UgWFlSRVBUOgotICAgIHJldHVybihobXNnYShoeHlycHQpKTsKLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotI2lmbmRlZiBOT1NFUlZFUgotY2FzZSBYWVNFUlY6Ci0gICAgcmV0dXJuKGhtc2dhKGhz ZXRzcnYpKTsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0jaWZkZWYgVE5DT0RFCi1jYXNlIFhZ VEVMOgotICAgIHJldHVybihobXNnYShoeHl0ZWwpKTsKLQotY2FzZSBYWVRFTE9QOgotICAgIHJl dHVybihobXNnYShoeHl0b3B0KSk7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNpZm5kZWYgTk9Y TUlUCi1jYXNlIFhZWE1JVDoKLSAgICByZXR1cm4oaG1zZ2EoaHNldHhtaXQpKTsKLSNlbmRpZiAv KiBOT1hNSVQgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi1jYXNlIFhZVU5DUzoKLSAgICByZXR1cm4o aG1zZygiU3ludGF4OiBTRVQgVU5LTk9XTi1DSEFSLVNFVCBhY3Rpb25cblwKLSAgRElTQ0FSRCAo ZGVmYXVsdCkgbWVhbnMgcmVqZWN0IGFueSBhcnJpdmluZyBmaWxlcyBlbmNvZGVkIGluIHVua25v d25cblwKLSAgY2hhcmFjdGVyIHNldHMuICBLRUVQIG1lYW5zIHRvIGFjY2VwdCB0aGVtIGFueXdh eS4iKSk7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZkZWYgVU5JWAotY2FzZSBYWVdJTEQ6 Ci0gICAgcmV0dXJuKGhtc2dhKGh4eXdpbGQpKTsKLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZm5k ZWYgTk9YRkVSCi1jYXNlIFhZV0lORDoKLSAgICByZXR1cm4oaG1zZ2EoaHh5d2luZCkpOwotY2Fz ZSBYWVhGRVI6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eXhmZXIpKTsKLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyTU9VU0UKLWNhc2UgWFlNT1VTRToKLSAg ICByZXR1cm4oaG1zZ2EoaHh5bW91c2UpKTsKLSNlbmRpZiAvKiBPUzJNT1VTRSAqLwotI2VuZGlm IC8qIE5PTE9DQUwgKi8KLQotY2FzZSBYWUFMUk06Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDog U0VUIEFMQVJNIFsgeyBzZWNvbmRzLCBoaDptbTpzcyB9IF1cblwKLSAgTnVtYmVyIG9mIHNlY29u ZHMgZnJvbSBub3csIG9yIHRpbWUgb2YgZGF5LCBhZnRlciB3aGljaCBJRiBBTEFSTVxuXAotICB3 aWxsIHN1Y2NlZWQuICAwLCBvciBubyB0aW1lIGF0IGFsbCwgbWVhbnMgbm8gYWxhcm0uIikpOwot Ci1jYXNlIFhZUFJPVE86Ci0gICAgcmV0dXJuKGhtc2dhKGh4eXh5eikpOwotCi0jaWZkZWYgQ0tf U1BFRUQKLWNhc2UgWFlQUkVGSVg6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIFBSRUZJ WElORyB7IEFMTCwgQ0FVVElPVVMsIE1JTklNQUwgfVxuXAotICBcCi1TZWxlY3RzIHRoZSBkZWdy ZWUgb2YgY29udHJvbC1jaGFyYWN0ZXIgcHJlZml4aW5nLiAgQWxzbyBzZWUgSEVMUCBTRVQgQ09O VFJPTC4iCi0pKTsKLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotCi0jaWZkZWYgT1MyCi1jYXNlIFhZ TE9HSU46Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIExPR0lOIHsgVVNFUklELCBQQVNT V09SRCwgUFJPTVBUIH0gPHRleHQ+XG5cCi0gIFByb3ZpZGVzIGFjY2VzcyBpbmZvcm1hdGlvbiBm b3IgdXNlIGJ5IGxvZ2luIHNjcmlwdHMuIikpOwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVm IE5PU1BMCi1jYXNlIFhZVE1QRElSOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBURU1Q LURJUkVDVE9SWSBbIDxkaXJlY3RvcnktbmFtZT4gXVxuXAotICBPdmVycmlkZXMgYXV0b21hdGlj IGFzc2lnbm1lbnQgb2YgXFx2KHRtcGRpcikgdmFyaWFibGUuIikpOwotI2VuZGlmIC8qIE5PU1BM ICovCi0KLSNpZmRlZiBPUzIKLWNhc2UgWFlUSVRMRToKLSAgICByZXR1cm4oaG1zZygiU3ludGF4 OiBTRVQgVElUTEUgPHRleHQ+XG5cCi0gIFNldHMgd2luZG93IHRpdGxlIHRvIHRleHQgaW5zdGVh ZCBvZiB1c2luZyBjdXJyZW50IGhvc3QvcG9ydCBuYW1lLiIpKTsKLSNlbmRpZiAvKiBPUzIgKi8K LQotI2lmbmRlZiBOT1BVU0gKLSNpZm5kZWYgTk9GUklMTFMKLWNhc2UgWFlFRElUOgotICAgIHJl dHVybihobXNnKCJTeW50YXg6IFNFVCBFRElUT1IgcGF0aG5hbWUgWyBvcHRpb25zIF1cblwKLSAg U3BlY2lmaWVzIHRoZSBuYW1lIG9mIHlvdXIgcHJlZmVycmVkIGVkaXRvciwgcGx1cyBhbnkgY29t bWFuZC1saW5lXG5cCi0gIG9wdGlvbnMuICBTSE9XIEVESVRPUiBkaXNwbGF5cyBpdC4iKSk7Ci0j ZW5kaWYgLyogTk9GUklMTFMgKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmZGVmIEJST1dT RVIKLWNhc2UgWFlCUk9XU0U6Ci0jaWZkZWYgTlQKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBT RVQgQlJPV1NFUiBbIHBhdGhuYW1lIFsgb3B0aW9ucyBdIF1cblwKLSAgU3BlY2lmaWVzIHRoZSBu YW1lIG9mIHlvdXIgcHJlZmVycmVkIGJyb3dzZXIgcGx1cyBhbnkgY29tbWFuZC1saW5lXG5cCi0g IG9wdGlvbnMuICBTSE9XIEJST1dTRVIgZGlzcGxheXMgaXQuICBPbWl0IHBhdGhuYW1lIGFuZCBv cHRpb25zIHRvIHVzZVxuXAotICBTaGVsbEV4ZWN1dGUuIikpOwotI2Vsc2UKLSAgICByZXR1cm4o aG1zZygiU3ludGF4OiBTRVQgQlJPV1NFUiBbIHBhdGhuYW1lIFsgb3B0aW9ucyBdIF1cblwKLSAg U3BlY2lmaWVzIHRoZSBuYW1lIG9mIHlvdXIgcHJlZmVycmVkIGJyb3dzZXIgcGx1cyBhbnkgY29t bWFuZC1saW5lXG5cCi0gIG9wdGlvbnMuICBTSE9XIEJST1dTRVIgZGlzcGxheXMgaXQuIikpOwot I2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogQlJPV1NFUiAqLwotCi0jaWZkZWYgQ0tfVEFQSQot Y2FzZSBYWVRBUEk6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eXRhcGkpKTsKLSNlbmRpZiAvKiBDS19U QVBJICovCi0KLSNpZmRlZiBOVAotY2FzZSBYWVdJTjk1OgotICAgIHJldHVybihobXNnYShoeHl3 aW45NSkpOwotI2VuZGlmIC8qIE5UICovCi0KLSNpZm5kZWYgTk9TUEwKLWNhc2UgWFlGVU5DOgot ICAgIHJldHVybihobXNnYShoeHlmdW5jKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVm IENLX0FVVEhFTlRJQ0FUSU9OCi1jYXNlIFhZQVVUSDoKLSAgICByZXR1cm4oaG1zZ2EoaG14eWF1 dGgpKTsKLSNlbHNlIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi1jYXNl IFhZQVVUSDoKLSAgICByZXR1cm4oaG1zZ2EoaG14eWF1dGgpKTsKLSNlbmRpZiAvKiBDS19TU0wg Ki8KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotCi0jaWZkZWYgQlJPV1NFUgotY2Fz ZSBYWUZUUDoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgRlRQIFsgcGF0aG5hbWUgWyBv cHRpb25zIF0gXVxuXAotICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgeW91ciBmdHAgY2xpZW50LCBw bHVzIGFueSBjb21tYW5kLWxpbmUgb3B0aW9ucy5cblwKLSAgU0hPVyBGVFAgZGlzcGxheXMgaXQu IikpOwotI2VuZGlmIC8qIEJST1dTRVIgKi8KLQotY2FzZSBYWVNMRUVQOgotICAgIHJldHVybiho bXNnKCJTeW50YXg6IFNFVCBTTEVFUCBDQU5DRUxMQVRJT04geyBPTiwgT0ZGIH1cblwKLSAgVGVs bHMgd2hldGhlciBTTEVFUCAoUEFVU0UpIG9yIFdBSVQgY29tbWFuZHMgY2FuIGJlIGludGVycnVw dGVkIGZyb20gdGhlXG5cCi0gIGtleWJvYXJkOyBPTiBieSBkZWZhdWx0LiIpKTsKLQotY2FzZSBY WUNEOgotICAgIHJldHVybihobXNnYShobXh5Y2QpKTsKLQotY2FzZSBYWVNFUklBTDoKLSAgICBy ZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgU0VSSUFMIGRwc1xuXAotICBkIGlzIGRhdGEgbGVuZ3Ro IGluIGJpdHMsIDcgb3IgODsgcCBpcyBmaXJzdCBsZXR0ZXIgb2YgcGFyaXR5OyBzIGlzIHN0b3Bc blwKLSAgYml0cywgMSBvciAyLiAgRXhhbXBsZXM6IFwic2V0IHNlcmlhbCA3ZTFcIiwgXCJzZXQg c2VyaWFsIDhuMVwiLiIpKTsKLQotI2lmZGVmIEhXUEFSSVRZCi1jYXNlIFhZU1RPUDoKLSAgICBy ZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgU1RPUC1CSVRTIHsgMSwgMiB9XG5cCi0gIE51bWJlciBv ZiBzdG9wIGJpdHMgdG8gdXNlIG9uIFNFVCBMSU5FIGNvbm5lY3Rpb25zLCBub3JtYWxseSAxLiIp KTsKLSNlbmRpZiAvKiBIV1BBUklUWSAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLWNhc2UgWFlESVND OgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBESVNDT05ORUNUIHsgT04sIE9GRiB9XG5c Ci0gIFdoZXRoZXIgdG8gY2xvc2UgYW5kIHJlbGVhc2UgYSBTRVQgTElORSBkZXZpY2UgYXV0b21h dGljYWxseSB1cG9uXG5cCi0gIGRpc2Nvbm5lY3Rpb247IE9GRiA9IGtlZXAgZGV2aWNlIG9wZW4g KGRlZmF1bHQpOyBPTiA9IGNsb3NlIGFuZCByZWxlYXNlLiIpKTsKLSNlbmRpZiAvKiBOT0xPQ0FM ICovCi0KLSNpZmRlZiBTVFJFQU1JTkcKLWNhc2UgWFlTVFJFQU06Ci0gICAgcmV0dXJuKGhtc2co IlN5bnRheDogU0VUIFNUUkVBTUlORyB7IE9OLCBPRkYsIEFVVE8gfVxuXAotICBUZWxscyBLZXJt aXQgd2hldGhlciBzdHJlYW1pbmcgcHJvdG9jb2wgY2FuIGJlIHVzZWQgZHVyaW5nIEtlcm1pdCBm aWxlXG5cCi0gIHRyYW5zZmVycy4gIERlZmF1bHQgaXMgQVVUTywgbWVhbmluZyB1c2UgaXQgaWYg Y29ubmVjdGlvbiBpcyByZWxpYWJsZS4iKSk7Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0KLWNh c2UgWFlSRUxZOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBSRUxJQUJMRSB7IE9OLCBP RkYsIEFVVE8gfVxuXAotICBUZWxscyBLZXJtaXQgd2hldGhlciBpdHMgY29ubmVjdGlvbiBpcyBy ZWxpYWJsZS4gIERlZmF1bHQgaXMgQVVUTyxcblwKLSAgbWVhbmluZyBLZXJtaXQgc2hvdWxkIGZp Z3VyZSBpdCBvdXQgZm9yIGl0c2VsZi4iKSk7Ci0KLWNhc2UgWFlDTEVBUjoKLSAgICByZXR1cm4o aG1zZygiU3ludGF4OiBTRVQgQ0xFQVItQ0hBTk5FTCB7IE9OLCBPRkYsIEFVVE8gfVxuXAotICBU ZWxscyBLZXJtaXQgd2hldGhlciBpdHMgY29ubmVjdGlvbiBpcyB0cmFuc3BhcmVudCB0byBhbGwg OC1iaXQgYnl0ZXMuXG5cCi0gIERlZmF1bHQgaXMgQVVUTywgbWVhbmluZyBLZXJtaXQgZmlndXJl cyBpdCBvdXQgZnJvbSB0aGUgY29ubmVjdGlvbiB0eXBlLlxuXAotICBXaGVuIGJvdGggc2VuZGVy IGFuZCByZWNlaXZlciBhZ3JlZSBjaGFubmVsIGlzIGNsZWFyLCBTRVQgUFJFRklYSU5HIE5PTkVc blwKLSAgaXMgdXNlZCBhdXRvbWF0aWNhbGx5LiIpKTsKLQotI2lmZGVmIFRMT0cKLWNhc2UgWFlU TE9HOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBUUkFOU0FDVElPTi1MT0cgeyBCUklF RiwgRlRQLCBWRVJCT1NFIH1cblwKLSAgU2VsZWN0cyB0aGUgdHJhbnNhY3Rpb24tbG9nIGZvcm1h dDsgQlJJRUYgYW5kIEZUUCBoYXZlIG9uZSBsaW5lIHBlciBmaWxlO1xuXAotICBGVFAgaXMgY29t cGF0aWJsZSB3aXRoIEZUUCBsb2cuICBWRVJCT1NFICh0aGUgZGVmYXVsdCkgaGFzIG1vcmUgaW5m by4iKSk7Ci0jZW5kaWYgLyogVExPRyAqLwotCi1jYXNlIFhZT1BUUzoKLSAgICByZXR1cm4oaG1z ZygiU3ludGF4OiBTRVQgT1BUSU9OUyBjb21tYW5kIFsgc3dpdGNoZXMuLi4gXVxuXAotICBGb3Ig dXNlIHdpdGggY29tbWFuZHMgdGhhdCBoYXZlIHN3aXRjaGVzOyBzZXRzIHRoZSBkZWZhdWx0IHN3 aXRjaGVzIGZvclxuXAotICB0aGUgZ2l2ZW4gY29tbWFuZC4gIFR5cGUgU0VUIE9QVElPTlMgPyBm b3IgYSBsaXN0IG9mIGFtZW5hYmxlIGNvbW1hbmRzLiIpKTsKLQotI2lmbmRlZiBOT1NQTAotY2Fz ZSBYWVRJTUVSOgotICAgIHJldHVybihobXNnYShobXh5dGltZXIpKTsKLSNlbmRpZiAvKiBOT1NQ TCAqLwotCi0jaWZkZWYgQ0tST09UCi0gIGNhc2UgWFlST09UOgotICAgIHJldHVybihobXNnYSho bXh4Y2hyb290KSk7Ci0jZW5kaWYgLyogWFlST09UICovCi0KLSNpZmRlZiBBTllTU0gKLSAgY2Fz ZSBYWVNTSDoKLSAgICByZXR1cm4oaG1zZ2EoaG14eXNzaCkpOwotI2VuZGlmIC8qIEFOWUNNRCAq LwotCi0jaWZkZWYgTE9DVVMKLSAgY2FzZSBYWUxPQ1VTOgotICAgIHJldHVybihobXNnYShobXh5 bG9jdXMpKTsKLSNlbmRpZiAvKiBMT0NVUyAqLwotCi0jaWZkZWYgT1MyCi0jaWZkZWYgS1VJCi0g IGNhc2UgWFlHVUk6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHlndWkpKTsKLSNlbmRpZiAvKiBLVUkg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLQotICBjYXNlIFhZTUFUQ0g6Ci0gICAgcmV0dXJuKGhtc2dh KGhteHltYXRjaCkpOwotCi0jaWZuZGVmIE5PU0VYUAotICBjYXNlIFhZU0VYUDoKLSAgICByZXR1 cm4oaG1zZ2EoaG14eXNleHApKTsKLSNlbmRpZgkvKiBOT1NFWFAgKi8KLQotI2lmbmRlZiBOT1NQ TAotICBjYXNlIFhZVkFSRVY6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIFZBUklBQkxF LUVWQUxVQVRJT04geyBSRUNVUlNJVkUsIFNJTVBMRSB9XG5cCi0gIFRlbGxzIEtlcm1pdCB3ZWF0 aGVyIHRvIGV2YWx1YXRlIFxcJXggYW5kIFxcJnhbXSB2YXJpYWJsZXMgcmVjdXJzaXZlbHlcblwK LSAgKHdoaWNoIGlzIHRoZSBkZWZhdWx0IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMpIG9yIGJ5IHNp bXBsZSBzdHJpbmdcblwKLSAgcmVwbGFjZW1lbnQsIHdoaWNoIGxldHMgeW91IHVzZSB0aGVzZSB2 YXJpYWJsZXMgc2FmZWx5IHRvIHN0b3JlIHN0cmluZ3NcblwKLSAgKHN1Y2ggYXMgV2luZG93cyBw YXRobmFtZXMpIHRoYXQgbWlnaHQgY29udGFpbiBiYWNrc2xhc2hlcy4iKSk7Ci0jZW5kaWYJLyog Tk9TUEwgKi8KLQotZGVmYXVsdDoKLSAgICBwcmludGYoIk5vdCBhdmFpbGFibGUgLSBcIiVzXCJc biIsY21kYnVmKTsKLSAgICByZXR1cm4oMCk7Ci0gICAgfQotfQotCi0jaWZuZGVmIE5PU1BMCi1z dGF0aWMgY2hhciAqIGhmc3BsaXRbXSA9IHsKLSJGdW5jdGlvbiBcXGZzcGxpdChzMSwmYSxzMixz MyxuMixuMykgLSBBc3NpZ25zIHN0cmluZyB3b3JkcyB0byBhbiBhcnJheS4iLAotIiAgczEgPSBz b3VyY2Ugc3RyaW5nLiIsCi0iICAmYSA9IGFycmF5IGRlc2lnbmF0b3IuIiwKLSIgIHMyID0gb3B0 aW9uYWwgYnJlYWsgc2V0LiIsCi0iICBzMyA9IG9wdGlvbmFsIGluY2x1ZGUgc2V0IChvciBBTEws IENTViwgb3IgVFNWKS4iLAotIiAgbjIgPSBvcHRpb25hbCBncm91cGluZyBtYXNrLiIsCi0iICBu MyA9IG9wdGlvbmFsIHNlcGFyYXRvciBmbGFnOiIsCi0iICAgMCA9IGNvbGxhcHNlIGFkamFjZW50 IHNlcGFyYXRvcnM7IiwKLSIgICAxID0gZG9uJ3QgY29sbGFwc2UgYWRqYWNlbnQgc2VwYXJhdG9y cy4iLAotIiAiLAotIiAgXFxmc3BsaXQoKSBicmVha3MgdGhlIHN0cmluZyBzMSBpbnRvIFwid29y ZHNcIiBhcyBpbmRpY2F0ZWQgYnkgdGhlIG90aGVyIiwKLSIgIHBhcmFtZXRlcnMsIGFzc2lnbmlu ZyB0aGVtIHRvIGdpdmVuIGFycmF5LCBpZiBhbnkuICBJZiB0aGUgc3BlY2lmaWVkIiwKLSIgIGFs cmVhZHkgZXhpc3RzLCBpdCBpcyByZWN5Y2xlZDsgaWYgbm8gYXJyYXkgaXMgc3BlY2lmaWVkLCB0 aGUgY291bnQgaXMiLAotIiAgcmV0dXJuZWQgYnV0IG5vIGFycmF5IGlzIGNyZWF0ZWQuICBBbGwg YXJndW1lbnRzIGFyZSBvcHRpb25hbCIsCi0iICAoXFxmc3BsaXQoKSB3aXRoIG5vIGFyZ3VtZW50 cyByZXR1cm5zIDApLiIsCi0iICIsCi0iICBUaGUgQlJFQUsgU0VUIGlzIHRoZSBzZXQgb2YgYWxs IGNoYXJhY3RlcnMgdGhhdCBzZXBhcmF0ZSB3b3Jkcy4gVGhlIiwKLSIgIGRlZmF1bHQgYnJlYWsg c2V0IGlzIGFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCBBU0NJSSBsZXR0ZXJzIGFuZCBkaWdpdHMuIiwK LSIgIEFTQ0lJIChDMCkgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzIGJyZWFrIGNo YXJhY3RlcnMgYnkgZGVmYXVsdCwiLAotIiAgYXMgYXJlIHNwYWNpbmcgYW5kIHB1bmN0dWF0aW9u IGNoYXJhY3RlcnMsIGJyYWNrZXRzLCBhbmQgc28gb24sIGFuZCIsCi0iICBhbGwgOC1iaXQgY2hh cmFjdGVycy4iLAotIiAiLAotIiAgVGhlIElOQ0xVREUgU0VUIGlzIHRoZSBzZXQgb2YgY2hhcmFj dGVycyB0aGF0IGFyZSB0byBiZSB0cmVhdGVkIGFzICIsCi0iICBwYXJ0cyBvZiB3b3JkcyBldmVu IHRob3VnaCB0aGV5IG5vcm1hbGx5IHdvdWxkIGJlIHNlcGFyYXRvcnMuICBUaGUiLAotIiAgZGVm YXVsdCBpbmNsdWRlIHNldCBpcyBlbXB0eS4gIFRocmVlIHNwZWNpYWwgc3ltYm9saWMgaW5jbHVk ZSBzZXRzIGFyZSIsCi0iICBhbHNvIGFsbG93ZWQ6IiwKLSIgIiwKLSIgICAgQUxMIChtZWFuaW5n IGluY2x1ZGUgYWxsIGJ5dGVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgYnJlYWsgc2V0KSIsCi0iICAg IENTViAoc3BlY2lhbCB0cmVhdG1lbnQgZm9yIENvbW1hLVNlcGFyYXRlZC1WYWx1ZSByZWNvcmRz KSIsCi0iICAgIFRTViAoc3BlY2lhbCB0cmVhdG1lbnQgZm9yIFRhYi1TZXBhcmF0ZWQtVmFsdWUg cmVjb3JkcykiLAotIiAiLAotIiAgRm9yIG9wZXJhdGluZyBvbiA4LWJpdCBjaGFyYWN0ZXIgc2V0 cywgdGhlIGluY2x1ZGUgc2V0IHNob3VsZCBiZSBBTEwuIiwKLSIgIiwKLSIgIElmIHRoZSBncm91 cGluZyBtYXNrIGlzIGdpdmVuIGFuZCBpcyBub256ZXJvLCB3b3JkcyBjYW4gYmUgZ3JvdXBlZCBi eSIsCi0iICBxdW90ZXMgb3IgYnJhY2tldHMgc2VsZWN0ZWQgYnkgdGhlIHN1bSBvZiB0aGUgZm9s bG93aW5nOiIsCi0iICIsCi0iICAgICAxID0gZG91YmxlcXVvdGVzOiAgICBcImEgYiBjXCIiLAot IiAgICAgMiA9IGJyYWNlczogICAgICAgICAge2EgYiBjfSIsCi0iICAgICA0ID0gYXBvc3Ryb3Bo ZXM6ICAgICAnYSBiIGMnIiwKLSIgICAgIDggPSBwYXJlbnRoZXNlczogICAgIChhIGIgYykiLAot IiAgICAxNiA9IHNxdWFyZSBicmFja2V0czogW2EgYiBjXSIsCi0iICAgIDMyID0gYW5nbGUgYnJh Y2tldHM6ICA8YSBiIGM+IiwKLSIgIiwKLSIgIE5lc3RpbmcgaXMgcG9zc2libGUgd2l0aCB7fSgp W108PiBidXQgbm90IHdpdGggcXVvdGVzIG9yIGFwb3N0cm9waGVzLiIsCi0iICIsCi0iUmV0dXJu cyBpbnRlZ2VyOiIsCi0iICBOdW1iZXIgb2Ygd29yZHMgaW4gc291cmNlIHN0cmluZy4iLAotIiAi LAotIkFsc28gc2VlOiIsCi0iICBIRUxQIEZVTkNUSU9OIFdPUkQiLAotIiIKLX07Ci0KLS8qICBE IE8gSCBGIFUgTiBDICAtLSAgR2l2ZSBoZWxwIGZvciBhIGZ1bmN0aW9uICAqLwotCi1pbnQKLWRv aGZ1bmMoeHgpIGludCB4eDsgewotICAgIC8qIGludCB4OyAqLwotICAgIGlmICh4eCA9PSAtMykg ewotICAgICAgICBwcmludGYoIlxuIFR5cGUgU0hPVyBGVU5DVElPTlMgdG8gc2VlIGEgbGlzdCBv ZiBhdmFpbGFibGUgZnVuY3Rpb25zLlxuIgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcHJp bnRmKAotICAgICAgICAiIFR5cGUgSEVMUCBGVU5DVElPTiA8bmFtZT4gZm9yIGhlbHAgb24gYSBw YXJ0aWN1bGFyIGZ1bmN0aW9uLlxuIik7Ci0gICAgICAgIHByaW50ZigKLSAgICAgICAgIiBGb3Ig ZnVuY3Rpb24gc2V0dGluZ3MgdXNlIEhFTFAgU0VUIEZVTkNUSU9OIGFuZCBTSE9XIFNDUklQVFMu XG5cbiIpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmICh4eCA9PSBGTl9XT1JE KSAgICAgICAgICAgICAgICAgIC8qIExvbmcgaGVscCBtZXNzYWdlICovCi0gICAgICAgIHJldHVy bihobXNnYShobWZ3b3JkKSk7Ci0KLSAgICBwcmludGYoIlxuIik7Ci0gICAgc3dpdGNoICh4eCkg ewotICAgICAgY2FzZSBGTl9JTkQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEluZGV4IChvZiBz dHJpbmcgMSBpbiBzdHJpbmcgMikgKi8KLSAgICAgIGNhc2UgRk5fUklYOiAgICAgICAgICAgICAg ICAgICAgICAvKiBSaW5kZXggKGluZGV4IGZyb20gcmlnaHQpICovCi0gICAgICAgIHByaW50Zigi XFxmJXNpbmRleChzMSxzMixuMSxuMilcblwKLSAgczEgPSBzdHJpbmcgdG8gbG9vayBmb3IuXG5c Ci0gIHMyID0gc3RyaW5nIHRvIGxvb2sgaW4uXG5cCi0gIG4xID0gb3B0aW9uYWwgMS1iYXNlZCBz dGFydGluZyBwb3NpdGlvbiwgZGVmYXVsdCA9IDEuXG5cCi0gIG4yID0gb3B0aW9uYWwgZGVzaXJl ZCBvY2N1cnJlbmNlIG51bWJlciwgZGVmYXVsdCA9IDEuXG4iLAotICAgICAgICAgICAgICAgeHgg PT0gRk5fUklYID8gInIiIDogIiIKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHByaW50Zigi UmV0dXJucyBpbnRlZ2VyOlxuXAotICAxLWJhc2VkIHBvc2l0aW9uIG9mICVzbW9zdCBvY2N1cnJl bmNlIG9mIHMxIGluIHMyLCBpZ25vcmluZyB0aGUgJXNtb3N0XG5cCi0gIChuMS0xKSBjaGFyYWN0 ZXJzIGluIHMyOyByZXR1cm5zIDAgaWYgczEgbm90IGZvdW5kIGluIHMyLlxuIiwKLSAgICAgICAg ICAgICAgIHh4ID09IEZOX0lORCA/ICJsZWZ0IiA6ICJyaWdodCIsCi0gICAgICAgICAgICAgICB4 eCA9PSBGTl9JTkQgPyAibGVmdCIgOiAicmlnaHQiCi0gICAgICAgICk7Ci0gICAgICAgIGJyZWFr OwotICAgICAgY2FzZSBGTl9DT1VOVDoJCQkvKiBDb3VudCBvY2N1cnJlbmNlcyBvZiBzMSBpbiBz MiAqLwotCXByaW50ZigiXFxmY291bnQoczEsczIsbjEpXG5cCi0gIHMxID0gc3RyaW5nIG9yIGNo YXJhY3RlciB0byBsb29rIGZvci5cblwKLSAgczIgPSBzdHJpbmcgdG8gbG9vayBpbi5cblwKLSAg bjEgPSBvcHRpb25hbCAxLWJhc2VkIHN0YXJ0aW5nIHBvc2l0aW9uLCBkZWZhdWx0ID0gMS5cbiIp OwotCXByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAotICBOdW1iZXIgb2Ygb2NjdXJyZW5jZXMg b2YgczEgaW4gczIsIDAgb3IgbW9yZS5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2Fz ZSBGTl9TRUFSQ0g6ICAgICAgICAgICAgICAgICAgIC8qIFNlYXJjaCBmb3IgcGF0dGVybiAqLwot ICAgICAgY2FzZSBGTl9SU0VBUkNIOiAgICAgICAgICAgICAgICAgIC8qIFNlYXJjaCBmb3IgcGF0 dGVybiBmcm9tIHJpZ2h0ICovCi0gICAgICAgIHByaW50ZigiXFxmJXNzZWFyY2goczEsczIsbjEs bjIpXG5cCi0gIHMxID0gcGF0dGVybiB0byBsb29rIGZvci5cblwKLSAgczIgPSBzdHJpbmcgdG8g bG9vayBpbi5cblwKLSAgbjEgPSBvcHRpb25hbCAxLWJhc2VkIG9mZnNldCwgZGVmYXVsdCA9IDEu XG5cCi0gIG4yID0gb3B0aW9uYWwgZGVzaXJlZCBvY2N1cnJlbmNlIG9mIG1hdGNoLCBkZWZhdWx0 ID0gMS5cbiIsCi0gICAgICAgICAgICAgICB4eCA9PSBGTl9SU0VBUkNIID8gInIiIDogIiIKLSAg ICAgICAgICAgICAgICk7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAotICAx LWJhc2VkIHBvc2l0aW9uIG9mICVzbW9zdCBtYXRjaCBmb3IgczEgaW4gczIsIGlnbm9yaW5nIHRo ZSAlc21vc3RcblwKLSAgKG4xLTEpIGNoYXJhY3RlcnMgaW4gczI7IHJldHVybnMgMCBpZiBubyBt YXRjaC5cbiIsCi0gICAgICAgICAgICAgICB4eCA9PSBGTl9TRUFSQ0ggPyAibGVmdCIgOiAicmln aHQiLAotICAgICAgICAgICAgICAgeHggPT0gRk5fU0VBUkNIID8gImxlZnQiIDogInJpZ2h0Igot ICAgICAgICApOwotICAgICAgICBwcmludGYoIiAgU2VlIEhFTFAgV0lMRENBUkRTIGZvciBpbmZv IGFib3V0IHBhdHRlcm5zLlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9MRU46 ICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCAob2Ygc3RyaW5nKSAqLwotICAgICAgICBw cmludGYoIlxcZmxlbmd0aChzMSlcblwKLSAgczEgPSBzdHJpbmcuXG4iKTsKLSAgICAgICAgcHJp bnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCi0gIExlbmd0aCBvZiBzdHJpbmcgczEuXG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX0xJVDogICAgICAgICAgICAgICAgICAgICAgLyog TGl0ZXJhbCAoZG9uJ3QgZXhwYW5kIHRoZSBzdHJpbmcpICovCi0gICAgICAgIHByaW50ZigiXFxm bGl0ZXJhbChzMSlcblwKLSAgczEgPSBzdHJpbmcuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIHN0cmluZzpcblwKLSAgczEgbGl0ZXJhbGx5IHdpdGhvdXQgZXZhbHVhdGlvbi5cbiIpOwot ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fTE9XOiAgICAgICAgICAgICAgICAgICAgICAv KiBMb3dlciAoY29udmVydCB0byBsb3dlcmNhc2UpICovCi0gICAgICAgIHByaW50ZigiXFxmbG93 ZXIoczEpXG5cCi0gIHMxID0gc3RyaW5nLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBz dHJpbmc6XG5cCi0gIHMxIHdpdGggdXBwZXJjYXNlIGxldHRlcnMgY29udmVydGVkIHRvIGxvd2Vy Y2FzZS5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fTUFYOiAgICAgICAgICAg ICAgICAgICAgICAvKiBNYXggKG1heGltdW0pICovCi0gICAgICAgIHByaW50ZigiXFxmbWF4aW11 bShuMSxuMilcblwKLSAgbjEgPSBpbnRlZ2VyLlxuXAotICBuMiA9IGludGVnZXIuXG4iKTsKLSAg ICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCi0gIFRoZSBncmVhdGVyIG9mIG4xIGFu ZCBuMi5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fTUlOOiAgICAgICAgICAg ICAgICAgICAgICAvKiBNaW4gKG1pbmltdW0pICovCi0gICAgICAgIHByaW50ZigiXFxmbWluaW11 bShuMSxuMilcblwKLSAgbjEgPSBpbnRlZ2VyLlxuXAotICBuMiA9IGludGVnZXIuXG4iKTsKLSAg ICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCi0gIFRoZSBsZXNzZXIgb2YgbjEgYW5k IG4yLlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9NT0Q6ICAgICAgICAgICAg ICAgICAgICAgIC8qIE1vZCAobW9kdWx1cykgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZtb2R1bHVz KG4xLG4yKVxuXAotICBuMSA9IGludGVnZXIuXG5cCi0gIG4yID0gaW50ZWdlci5cbiIpOwotICAg ICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKLSAgVGhlIHJlbWFpbmRlciBhZnRlciBk aXZpZGluZyBuMSBieSBuMi5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fRVZB OiAgICAgICAgICAgICAgICAgICAgICAvKiBFdmFsIChldmFsdWF0ZSBhcml0aCBleHByZXNzaW9u KSAqLwotICAgICAgICBwcmludGYoIlxcZmV2YWx1YXRlKGUpXG5cCi0gIGUgPSBhcml0aG1ldGlj IGV4cHJlc3Npb24uXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCi0g IFRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbi5cbiIpOwotICAgICAgICBi cmVhazsKLSAgICAgIGNhc2UgRk5fU1VCOiAgICAgICAgICAgICAgICAgICAgICAvKiBTdWJzdHIg KHN1YnN0cmluZykgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZzdWJzdHJpbmcoczEsbjEsbjIpXG5c Ci0gIHMxID0gc3RyaW5nLlxuXAotICBuMSA9IGludGVnZXIsIDEtYmFzZWQgc3RhcnRpbmcgcG9z aXRpb24sIGRlZmF1bHQgPSAxLlxuXAotICBuMiA9IGludGVnZXIsIGxlbmd0aCwgZGVmYXVsdCA9 IGxlbmd0aChzMSkgLSBuMSArIDEuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmlu ZzpcblwKLSAgU3Vic3RyaW5nIG9mIHMxIHN0YXJ0aW5nIGF0IG4xLCBsZW5ndGggbjIuXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX1VQUDogICAgICAgICAgICAgICAgICAgICAg LyogVXBwZXIgKGNvbnZlcnQgdG8gdXBwZXJjYXNlKSAqLwotICAgICAgICBwcmludGYoIlxcZnVw cGVyKHMxKVxuXAotICBzMSA9IHN0cmluZy5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMg c3RyaW5nOlxuXAotICBzMSB3aXRoIGxvd2VyY2FzZSBsZXR0ZXJzIGNvbnZlcnRlZCB0byB1cHBl cmNhc2UuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX1JFVjogICAgICAgICAg ICAgICAgICAgICAgLyogUmV2ZXJzZSAoYSBzdHJpbmcpICovCi0gICAgICAgIHByaW50ZigiXFxm cmV2ZXJzZShzMSlcblwKLSAgczEgPSBzdHJpbmcuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIHN0cmluZzpcblwKLSAgczEgd2l0aCBpdHMgY2hhcmFjdGVycyBpbiByZXZlcnNlIG9yZGVy LlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9SRVA6ICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlcGVhdCAoYSBzdHJpbmcpICovCi0gICAgICAgIHByaW50ZigiXFxmcmVwZWF0 KHMxLG4xKVxuXAotICBzMSA9IHN0cmluZy5cblwKLSAgbjEgPSBpbnRlZ2VyLlxuIik7Ci0gICAg ICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCi0gIHMxIHJlcGVhdGVkIG4xIHRpbWVzLlxu Iik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9FWEU6ICAgICAgICAgICAgICAgICAg ICAgIC8qIEV4ZWN1dGUgKGEgbWFjcm8pICovCi0gICAgICAgIHByaW50ZigiXFxmZXhlY3V0ZSht MSxhMSxhMixhMywuLi4pXG5cCi0gIG0xID0gbWFjcm8gbmFtZS5cblwKLSAgYTEgPSBhcmd1bWVu dCAxLlxuXAotICBhMiA9IGFyZ3VtZW50IDIsIGV0Y1xuIik7Ci0gICAgICAgIHByaW50ZigiUmV0 dXJucyBzdHJpbmc6XG5cCi0gIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG1hY3JvIChIRUxQIFJF VFVSTiBmb3IgZnVydGhlciBpbmZvKS5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug Rk5fTFBBOiAgICAgICAgICAgICAgICAgICAgICAvKiBMUEFEIChsZWZ0IHBhZCkgKi8KLSAgICAg IGNhc2UgRk5fUlBBOiAgICAgICAgICAgICAgICAgICAgICAvKiBSUEFEIChyaWdodCBwYWQpICov Ci0gICAgICAgIHByaW50ZigiXFxmJWNwYWQoczEsbjEsYzEpXG5cCi0gIHMxID0gc3RyaW5nLlxu XAotICBuMSA9IGludGVnZXIuXG5cCi0gIGMxID0gY2hhcmFjdGVyLCBkZWZhdWx0ID0gc3BhY2Uu XG4iLAotICAgICAgICAgICAgICAgIHh4ID09IEZOX0xQQSA/ICdsJyA6ICdyJyk7Ci0gICAgICAg IHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCi0gIHMxICVzLXBhZGRlZCB3aXRoIGNoYXJhY3Rl ciBjMSB0byBsZW5ndGggbjEuXG4iLAotICAgICAgICAgICAgICAgeHggPT0gRk5fTFBBID8gImxl ZnQiIDogInJpZ2h0Iik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9ERUY6ICAgICAg ICAgICAgICAgICAgICAgIC8qIERlZmluaXRpb24gb2YgYSBtYWNybywgdW5leHBhbmRlZCAqLwot ICAgICAgICBwcmludGYoIlxcZmRlZmluaXRpb24obTEpXG5cCi0gIG0xID0gbWFjcm8gbmFtZS5c biIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAotICBMaXRlcmFsIGRlZmlu aXRpb24gb2YgbWFjcm8gbTEuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX0NP TjogICAgICAgICAgICAgICAgICAgICAgLyogQ29udGVudHMgb2YgYSB2YXJpYWJsZSwgZGl0dG8g Ki8KLSAgICAgICAgcHJpbnRmKCJcXGZjb250ZW50cyh2MSlcblwKLSAgdjEgPSB2YXJpYWJsZSBu YW1lIHN1Y2ggYXMgXFwlJWEuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpc blwKLSAgTGl0ZXJhbCBkZWZpbml0aW9uIG9mIHZhcmlhYmxlIHYxLCBldmFsdWF0ZWQgb25lIGxl dmVsIG9ubHkuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX0ZJTDogICAgICAg ICAgICAgICAgICAgICAgLyogTmV4dCBmaWxlICovCi0gICAgICAgIHByaW50ZigiXFxmbmV4dGZp bGUoKVxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCi0gIE5hbWUgb2Yg bmV4dCBmaWxlIGZyb20gbGlzdCBjcmVhdGVkIGJ5IG1vc3QgcmVjZW50IFxcZltyXWZpbGVzKCkg b3JcblwKLSAgXFxmW3JdZGlyKClpbnZvY2F0aW9uLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhl cmUgYXJlIG5vIG1vcmUgZmlsZXMgaW5cblwKLSAgdGhlIGxpc3QuXG4iKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgICBjYXNlIEZOX0ZDOiAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBjb3Vu dCAqLwotICAgICAgICBwcmludGYoIlxcZmZpbGVzKGYxWywmYV0pIC0gRmlsZSBsaXN0LlxuXAot ICBmMSA9IGZpbGUgc3BlY2lmaWNhdGlvbiwgcG9zc2libHkgY29udGFpbmluZyB3aWxkY2FyZHMu XG5cCi0gICZhID0gb3B0aW9uYWwgbmFtZSBvZiBhcnJheSB0byBhc3NpZ24gZmlsZSBsaXN0IHRv LlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAotICBUaGUgbnVtYmVy IG9mIHJlZ3VsYXIgZmlsZXMgdGhhdCBtYXRjaCBmMS4gIFVzZSB3aXRoIFxcZm5leHRmaWxlKCku XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX0NIUjogICAgICAgICAgICAgICAg ICAgICAgLyogQ2hhcmFjdGVyIChsaWtlIEJBU0lDIENIUiQoKSkgKi8KLSAgICAgICAgcHJpbnRm KCJcXGZjaGFyYWN0ZXIobjEpXG5cCi0gIG4xID0gaW50ZWdlci5cbiIpOwotICAgICAgICBwcmlu dGYoIlJldHVybnMgY2hhcmFjdGVyOlxuXAotICBUaGUgY2hhcmFjdGVyIHdob3NlIG51bWVyaWMg Y29kZSBpcyBuMS5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fUklHOiAgICAg ICAgICAgICAgICAgICAgICAvKiBSaWdodCAobGlrZSBCQVNJQyBSSUdIVCQoKSkgKi8KLSAgICAg ICAgcHJpbnRmKCJcXGZyaWdodChzMSxuMSlcblwKLSAgczEgPSBzdHJpbmcuXG5cCi0gIG4xID0g aW50ZWdlciwgZGVmYXVsdCA9IGxlbmd0aChzMSkuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIHN0cmluZzpcblwKLSAgVGhlIHJpZ2h0bW9zdCBuMSBjaGFyYWN0ZXJzIG9mIHN0cmluZyBz MS5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fTEVGOiAgICAgICAgICAgICAg ICAgICAgICAvKiBMZWZ0IChsaWtlIEJBU0lDIExFRlQkKCkpICovCi0gICAgICAgIHByaW50Zigi XFxmbGVmdChzMSxuMSlcblwKLSAgczEgPSBzdHJpbmcuXG5cCi0gIG4xID0gaW50ZWdlciwgZGVm YXVsdCA9IGxlbmd0aChzMSkuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpc blwKLSAgVGhlIGxlZnRtb3N0IG4xIGNoYXJhY3RlcnMgb2Ygc3RyaW5nIHMxLlxuIik7Ci0gICAg ICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9DT0Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIENv ZGUgdmFsdWUgb2YgY2hhcmFjdGVyICovCi0gICAgICAgIHByaW50ZigiXFxmY29kZShzMSlcblwK LSAgYzEgPSBjaGFyYWN0ZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6 XG5cCi0gIFRoZSBudW1lcmljIGNvZGUgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBzdHJpbmcg czEsIG9yIDAgaWYgczEgZW1wdHkuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZO X1JQTDogICAgICAgICAgICAgICAgICAgICAgLyogUmVwbGFjZSAqLwotICAgICAgICBwcmludGYo IlxcZnJlcGxhY2UoczEsczIsczNbLG4xXSlcblwKLSAgczEgPSBvcmlnaW5hbCBzdHJpbmcuXG5c Ci0gIHMyID0gbWF0Y2ggc3RyaW5nLlxuXAotICBzMyA9IHJlcGxhY2VtZW50IHN0cmluZy5cblwK LSAgbjEgPSBvY2N1cnJlbmNlLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6 XG5cCi0gIHMxIHdpdGggb2NjdXJyZW5jZSBudW1iZXIgbjEgb2YgczIgcmVwbGFjZWQgYnkgczMu XG5cCi0gIElmIG4xID0gMCBvciBvbWl0dGVkLCBhbGwgb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2Vk LlxuXAotICBJZiBuMSA8IDAsIG9jY3VycmVuY2VzIGFyZSBjb3VudGVkIGZyb20gdGhlIHJpZ2h0 LlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX0ZEOiAgICAgICAgICAgICAg ICAgICAgICAgLyogRmlsZSBkYXRlICovCi0gICAgICAgIHByaW50ZigiXFxmZGF0ZShmMSlcblwK LSAgZjEgPSBmaWxlbmFtZS5cbiIpOwotI2lmZGVmIFZNUwotICAgICAgICBwcmludGYoIlJldHVy bnMgc3RyaW5nOlxuXAotICBDcmVhdGlvbiBkYXRlIG9mIGZpbGUgZjEsIGZvcm1hdDogeXl5eW1t ZGQgaGg6bW06c3MuXG4iKTsKLSNlbHNlCi0gICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6 XG5cCi0gIE1vZGlmaWNhdGlvbiBkYXRlIG9mIGZpbGUgZjEsIGZvcm1hdDogeXl5eW1tZGQgaGg6 bW06c3MuXG4iKTsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl IEZOX0ZTOiAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBzaXplICovCi0gICAgICAgIHBy aW50ZigiXFxmc2l6ZShmMSlcblwKLSAgZjEgPSBmaWxlbmFtZS5cbiIpOwotICAgICAgICBwcmlu dGYoIlJldHVybnMgaW50ZWdlcjpcblwKLSAgU2l6ZSBvZiBmaWxlIGYxLlxuIik7Ci0gICAgICAg IGJyZWFrOwotICAgICAgY2FzZSBGTl9WRVI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFZlcmlm eSAqLwotICAgICAgICBwcmludGYoIlxcZnZlcmlmeShzMSxzMixuMSlcblwKLSAgczEgPSBzdHJp bmcgb2YgY2hhcmFjdGVycyB0byBsb29rIGZvci5cblwKLSAgczIgPSBzdHJpbmcgdG8gbG9vayBp bi5cblwKLSAgbjEgPSBzdGFydGluZyBwb3NpdGlvbiBpbiBzMi5cbiIpOwotICAgICAgICBwcmlu dGYoIlJldHVybnMgaW50ZWdlcjpcblwKLSAgMS1iYXNlZCBwb3NpdGlvbiBvZiBmaXJzdCBjaGFy YWN0ZXIgaW4gczIgdGhhdCBpcyBub3QgYWxzbyBpbiBzMSxcblwKLSAgb3IgLTEgaWYgczEgaXMg ZW1wdHksIG9yIDAgaWYgYWxsIGNoYXJhY3RlcnMgaW4gczIgYXJlIGFsc28gaW4gczEuXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX0lQQTogICAgICAgICAgICAgICAgICAgICAg LyogRmluZCBhbmQgcmV0dXJuIElQIGFkZHJlc3MgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZpcGFk ZHJlc3MoczEsbjEpXG5cCi0gIHMxID0gc3RyaW5nLlxuXAotICBuMSA9IDEtYmFzZWQgaW50ZWdl ciBzdGFydGluZyBwb3NpdGlvbiwgZGVmYXVsdCA9IDEuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJS ZXR1cm5zIHN0cmluZzpcblwKLSAgRmlyc3QgSVAgYWRkcmVzcyBpbiBzMSwgc2Nhbm5pbmcgZnJv bSBsZWZ0IHN0YXJ0aW5nIGF0IHBvc2l0aW9uIG4xLlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAg ICAgY2FzZSBGTl9IRVg6ICAgICAgICAgICAgICAgICAgICAgIC8qIEhleGlmeSAqLwotICAgICAg ICBwcmludGYoIlxcZmhleGlmeShzMSlcblwKLSAgczEgPSBzdHJpbmcuXG4iKTsKLSAgICAgICAg cHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKLSAgVGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0 aW9uIG9mIHMxLiAgQWxzbyBzZWUgXFxmbjJoZXgoKS5cbiIpOwotICAgICAgICBicmVhazsKLSAg ICAgIGNhc2UgRk5fVU5IOiAgICAgICAgICAgICAgICAgICAgICAvKiBVbmhleGlmeSAqLwotICAg ICAgICBwcmludGYoIlxcZnVuaGV4aWZ5KGgxKVxuXAotICBoMSA9IEhleGFkZWNpbWFsIHN0cmlu Zy5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAotICBUaGUgcmVzdWx0 IG9mIHVuaGV4aWZ5aW5nIHMxLCBvciBub3RoaW5nIGlmIHMxIGlzIG5vdCBhIGhleCBzdHJpbmcu XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX1VOVEFCOgkJCS8qIFVudGFiaWZ5 ICovCi0gICAgICAgIHByaW50ZigiXFxmdW50YWJpZnkoczEpXG5cCi0gIHMxID0gc3RyaW5nLlxu Iik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCi0gIFRoZSByZXN1bHQgb2Yg Y29udmVydGluZyB0YWJzIGluIHMxIHRvIHNwYWNlcyBhc3N1bWluZyB0YWIgc3RvcHMgZXZlcnlc blwKLSAgOCBzcGFjZXMuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX0JSSzog ICAgICAgICAgICAgICAgICAgICAgLyogQnJlYWsgKi8KLSAgICAgIGNhc2UgRk5fU1BOOiAgICAg ICAgICAgICAgICAgICAgICAvKiBTcGFuICovCi0gICAgICAgIHByaW50ZigiXFxmJXMoczEsczIs bjEpXG5cCi0gIHMxID0gc3RyaW5nIHRvIGxvb2sgaW4uXG5cCi0gIHMyID0gc3RyaW5nIG9mIGNo YXJhY3RlcnMgdG8gbG9vayBmb3IuXG5cCi0gIG4xID0gMS1iYXNlZCBpbnRlZ2VyIHN0YXJ0aW5n IHBvc2l0aW9uLCBkZWZhdWx0ID0gMS5cbiIsCi0gICAgICAgICAgICAgIHh4ID09IEZOX0JSSyA/ ICJicmVhayIgOiAic3BhbiIKLSAgICAgICAgICAgICAgKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIHN0cmluZzpcblwKLSAgczEgdXAgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW55IGNo YXJhY3RlciVzYWxzbyBpbiBzMixcblwKLSAgc2Nhbm5pbmcgZnJvbSB0aGUgbGVmdCBzdGFydGlu ZyBhdCBwb3NpdGlvbiBuMS5cbiIsCi0gICAgICAgICAgICAgICB4eCA9PSBGTl9TUE4gPyAiIG5v dCAiIDogIiAiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX1RSTTogICAgICAgICAg ICAgICAgICAgICAgLyogVHJpbSAqLwotICAgICAgY2FzZSBGTl9MVFI6ICAgICAgICAgICAgICAg ICAgICAgIC8qIExlZnQtVHJpbSAqLwotICAgICAgICBwcmludGYoIlxcZiVzKHMxLHMyKVxuXAot ICBzMSA9IHN0cmluZyB0byBsb29rIGluLlxuXAotICBzMiA9IHN0cmluZyBvZiBjaGFyYWN0ZXJz IHRvIGxvb2sgZm9yLCBkZWZhdWx0ID0gYmxhbmtzIGFuZCB0YWJzLlxuIiwKLSAgICAgICAgICAg ICAgIHh4ID09IEZOX1RSTSA/ICJ0cmltIiA6ICJsdHJpbSIpOwotICAgICAgICBwcmludGYoIlJl dHVybnMgc3RyaW5nOlxuXAotICBzMSB3aXRoIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIGFsc28g aW4gczIgdHJpbW1lZCBmcm9tIHRoZSAlcy5cbi4iLAotICAgICAgICAgICAgICAgeHggPT0gRk5f VFJNID8gInJpZ2h0IiA6ICJsZWZ0Iik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9D QVA6ICAgICAgICAgICAgICAgICAgICAgIC8qIENhcGl0YWxpemUgKi8KLSAgICAgICAgcHJpbnRm KCJcXGZjYXBpdGFsaXplKHMxKVxuXAotICBzMSA9IHN0cmluZy5cbiIpOwotICAgICAgICBwcmlu dGYoIlJldHVybnMgc3RyaW5nOlxuXAotICBzMSB3aXRoIGl0cyBmaXJzdCBsZXR0ZXIgY29udmVy dGVkIHRvIHVwcGVyY2FzZSBhbmQgdGhlIHJlbWFpbmluZ1xuXAotICBsZXR0ZXJzIHRvIGxvd2Vy Y2FzZS5cbiIpOwotICAgICAgICBwcmludGYoIlN5bm9ueW06IFxcZmNhcHMoczEpXG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX1RPRDogICAgICAgICAgICAgICAgICAgICAgLyog VGltZS1vZi1kYXktdG8tc2Vjcy1zaW5jZS1taWRuaXRlICovCi0gICAgICAgIHByaW50ZigiXFxm dG9kMnNlY3MoczEpXG5cCi0gIHMxID0gdGltZS1vZi1kYXkgc3RyaW5nLCBoaDptbTpzcywgMjQt aG91ciBmb3JtYXQuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIG51bWJlcjpcblwKLSAg U2Vjb25kcyBzaW5jZSBtaWRuaWdodC5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug Rk5fRkZOOiAgICAgICAgICAgICAgICAgICAgICAvKiBGdWxsIGZpbGUgbmFtZSAqLwotICAgICAg ICBwcmludGYoIlxcZnBhdGhuYW1lKGYxKVxuXAotICBmMSA9IGZpbGVuYW1lLCBwb3NzaWJseSB3 aWxkLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCi0gIEZ1bGwgcGF0 aG5hbWUgb2YgZjEuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX0NISzogICAg ICAgICAgICAgICAgICAgICAgLyogQ2hlY2tzdW0gb2YgdGV4dCAqLwotICAgICAgICBwcmludGYo IlxcZmNoZWNrc3VtKHMxKVxuXAotICBzMSA9IHN0cmluZy5cbiIpOwotICAgICAgICBwcmludGYo IlJldHVybnMgaW50ZWdlcjpcblwKLSAgMTYtYml0IGNoZWNrc3VtIG9mIHN0cmluZyBzMS5cbiIp OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fQ1JDOiAgICAgICAgICAgICAgICAgICAg ICAvKiBDUkMtMTYgb2YgdGV4dCAqLwotICAgICAgICBwcmludGYoIlxcZmNyYzE2KHMxKVxuXAot ICBzMSA9IHN0cmluZy5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwK LSAgMTYtYml0IGN5Y2xpYyByZWR1bmRhbmN5IGNoZWNrIG9mIHN0cmluZyBzMS5cbiIpOwotICAg ICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fQlNOOiAgICAgICAgICAgICAgICAgICAgICAvKiBC YXNlbmFtZSBvZiBmaWxlICovCi0gICAgICAgIHByaW50ZigiXFxmYmFzZW5hbWUoZjEpXG5cCi0g IGYxID0gZmlsZW5hbWUsIHBvc3NpYmx5IHdpbGQuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIHN0cmluZzpcblwKLSAgRmlsZW5hbWUgZjEgc3RyaXBwZWQgb2YgYWxsIGRldmljZSBhbmQg ZGlyZWN0b3J5IGluZm9ybWF0aW9uLlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBG Tl9DTUQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBvZiBhIGNvbW1hbmQgKGNvb2tl ZCkgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZjb21tYW5kKHMxKVxuXAotICBzMSA9IHN0cmluZ1xu Iik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCi0gIE91dHB1dCBvZiBzeXN0 ZW0gY29tbWFuZCBzMSwgaWYgYW55LCB3aXRoIGZpbmFsIGxpbmUgdGVybWluYXRvciBzdHJpcHBl ZC5cbiIKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9S QVc6ICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBvZiBhIGNvbW1hbmQgKHJhdykgKi8K LSAgICAgICAgcHJpbnRmKCJcXGZyYXdjb21tYW5kKHMxKVxuXAotICBzMSA9IHN0cmluZ1xuIik7 Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCi0gIE91dHB1dCBvZiBzeXN0ZW0g Y29tbWFuZCBzMSwgaWYgYW55LlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9T VFg6ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmlwIGZyb20gcmlnaHQgKi8KLSAgICAgICAg cHJpbnRmKCJcXGZzdHJpcHgoczEsYzEpXG5cCi0gIHMxID0gc3RyaW5nIHRvIGxvb2sgaW4uXG5c Ci0gIGMxID0gY2hhcmFjdGVyIHRvIGxvb2sgZm9yLCBkZWZhdWx0ID0gXCIuXCIuXG4iKTsKLSAg ICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKLSAgczEgdXAgdG8gdGhlIHJpZ2h0bW9z dCBvY2N1cnJlbmNlIG9mIGNoYXJhY3RlciBjMS5cbiIKLSAgICAgICAgKTsKLSAgICAgICAgYnJl YWs7Ci0KLSAgICAgIGNhc2UgRk5fU1RMOiAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJpcCBm cm9tIGxlZnQgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZsb3AoczFbLGMxWyxuMV1dKVxuXAotICBz MSA9IHN0cmluZyB0byBsb29rIGluLlxuXAotICBjMSA9IGNoYXJhY3RlciB0byBsb29rIGZvciwg ZGVmYXVsdCA9IFwiLlwiLlxuXAotICBuMSA9IG9jY3VycmVuY2Ugb2YgYzEsIGRlZmF1bHQgPSAx LlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCi0gIFRoZSBwYXJ0IG9m IHMxIGFmdGVyIHRoZSBuMXRoIGxlZnRtb3N0IG9jY3VycmVuY2Ugb2YgY2hhcmFjdGVyIGMxLlxu IgotICAgICAgICApOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9MT1BYOiAgICAg ICAgICAgICAgICAgICAgICAvKiBTdHJpcCBmcm9tIHJpZ2h0ICovCi0gICAgICAgIHByaW50Zigi XFxmbG9weChzMSxjMSlcblwKLSAgczEgPSBzdHJpbmcgdG8gbG9vayBpbi5cblwKLSAgYzEgPSBj aGFyYWN0ZXIgdG8gbG9vayBmb3IsIGRlZmF1bHQgPSBcIi5cIi5cblwKLSAgbjEgPSBvY2N1cnJl bmNlIG9mIGMxLCBkZWZhdWx0ID0gMS5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgc3Ry aW5nOlxuXAotICBUaGUgcGFydCBvZiBzMSBhZnRlciB0aGUgbjF0aCByaWdodG1vc3Qgb2NjdXJy ZW5jZSBvZiBjaGFyYWN0ZXIgYzEuXG4iCi0gICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotCi0g ICAgICBjYXNlIEZOX1NUTjogICAgICAgICAgICAgICAgICAgICAgLyogU3RyaXAgbiBjaGFycyAq LwotICAgICAgICBwcmludGYoIlxcZnN0cmlwbihzMSxuMSlcblwKLSAgczEgPSBzdHJpbmcgdG8g bG9vayBpbi5cblwKLSAgbjEgPSBpbnRlZ2VyLCBkZWZhdWx0ID0gMC5cbiIpOwotICAgICAgICBw cmludGYoIlJldHVybnMgc3RyaW5nOlxuXAotICBzMSB3aXRoIG4xIGNoYXJhY3RlcnMgcmVtb3Zl ZCBmcm9tIHRoZSByaWdodC5cbiIKLSAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg IGNhc2UgRk5fU1RCOiAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJpcCBlbmNsb3NpbmcgYnJh Y2tldHMgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZzdHJpcGIoczFbLGMxWyxjMl1dKVxuXAotICBz MSA9IG9yaWdpbmFsIHN0cmluZy5cblwKLSAgYzEgPSBvcHRpb25hbCBmaXJzdCBjaGFyYWN0ZXJc biIpOwotICAgICAgICBwcmludGYoIlwKLSAgYzIgPSBvcHRpb25hbCBmaW5hbCBjaGFyYWN0ZXIu XG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKLSAgczEgd2l0aCB0aGUg aW5kaWNhdGVkIGVuY2xvc2luZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBJZiBjMSBhbmQgYzIgbm90 XG5cCi0gICAgIHNwZWNpZmllZCwgYW55IG1hdGNoaW5nIGJyYWNrZXRzLCBicmFjZXMsIHBhcmVu dGhlc2VzLCBvciBxdW90ZXMgYXJlXG4iKTsKLSAgICAgICAgcHJpbnRmKCJcCi0gICAgIGFzc3Vt ZWQuICBJZiBjMSBpcyBnaXZlbiBidXQgbm90IGMyLCB0aGUgYXBwcm9wcmlhdGUgYzIgaXMgYXNz dW1lZC5cblwKLSAgICAgaWYgYm90aCBjMSBhbmQgYzIgYXJlIGdpdmVuLCB0aGV5IGFyZSB1c2Vk IGFzLWlzLlxuIgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcHJpbnRmKAotIkFsdGVybmF0 aXZlIGZvcm1hdDpcblwKLSAgSW5jbHVkZSBhIGdyb3VwaW5nIG1hc2sgbnVtYmVyIGluIHBsYWNl IG9mIGMxIGFuZCBvbWl0IGMyIHRvIHNwZWNpZnkgbW9yZVxuXAotICB0aGFuIG9uZSBwb3NzaWJp bGl0eSBhdCBvbmNlOyBzZWUgXFxmd29yZCgpIGZvciBkZXRhaWxzLlxuIgotICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBPUzIKLSAgICAgIGNhc2UgRk5fU0NSTl9D WDogICAgICAgICAgICAgICAgICAvKiBTY3JlZW4gQ3Vyc29yIFggUG9zICovCi0gICAgICAgIHBy aW50ZigiXFxmc2NybmN1cngoKVxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2Vy OlxuXAotICBUaGUgMC1iYXNlZCBYIGNvb3JkaW5hdGUgKGNvbHVtbikgb2YgdGhlIFRlcm1pbmFs IHNjcmVlbiBjdXJzb3IuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX1NDUk5f Q1k6ICAgICAgICAgICAgICAgICAgLyogU2NyZWVuIEN1cnNvciBZIFBvcyAqLwotICAgICAgICBw cmludGYoIlxcZnNjcm5jdXJ5KClcbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdl cjpcblwKLSAgVGhlIDAtYmFzZWQgWSBjb29yZGluYXRlIChyb3cpIG9mIHRoZSBUZXJtaW5hbCBz Y3JlZW4gY3Vyc29yLlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9TQ1JOX1NU UjogICAgICAgICAgICAgICAgIC8qIFNjcmVlbiBTdHJpbmcgKi8KLSAgICAgICAgcHJpbnRmKCJc XGZzY3Juc3RyKG55LG54LG4xKVxuXAotICBueSA9IGludGVnZXIuXG5cCi0gIG54ID0gaW50ZWdl ci5cblwKLSAgbjEgPSBpbnRlZ2VyLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJp bmc6XG5cCi0gIFRoZSBzdHJpbmcgYXQgVGVybWluYWwtc2NyZWVuIGNvb3JkaW5hdGVzIChueCxu eSksIGxlbmd0aCBuMSxcblwKLSAgYmxhbmtzIGluY2x1ZGVkLiAgQ29vcmRpbmF0ZXMgc3RhcnQg YXQgMC4gIERlZmF1bHQgdmFsdWVzIGFyZVxuXAotICAwIGZvciBueSBhbmQgbngsIGFuZCBsaW5l IHdpZHRoIGZvciBuMS5cbiIpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBPUzIgKi8KLQot ICAgICAgY2FzZSBGTl8ySEVYOiAgICAgICAgICAgICAgICAgICAgIC8qIE51bSB0byBoZXggKi8K LSAgICAgICAgcHJpbnRmKCJcXGZuMmhleChuMSkgLSBOdW1iZXIgdG8gaGV4XG4gIG4xID0gaW50 ZWdlci5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuICBUaGUgaGV4YWRl Y2ltYWwgcmVwcmVzZW50YXRpb24gb2YgbjEuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg IGNhc2UgRk5fMk9DVDogICAgICAgICAgICAgICAgICAgICAvKiBOdW0gdG8gaGV4ICovCi0gICAg ICAgIHByaW50ZigiXFxmbjJvY3RhbChuMSkgLSBOdW1iZXIgdG8gb2N0YWxcbiAgbjEgPSBpbnRl Z2VyLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG4gIFRoZSBvY3RhbCBy ZXByZXNlbnRhdGlvbiBvZiBuMS5cbiIpOwotICAgICAgICBicmVhazsKLQotI2lmZGVmIFJFQ1VS U0lWRQotICAgICAgY2FzZSBGTl9ESVI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY3Vyc2l2 ZSBkaXJlY3RvcnkgY291bnQgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZkaXJlY3RvcmllcyhmMSkg LSBEaXJlY3RvcnkgbGlzdC5cblwKLSAgZjEgPSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbiwgcG9z c2libHkgY29udGFpbmluZyB3aWxkY2FyZHMuXG5cCi0gICZhID0gb3B0aW9uYWwgbmFtZSBvZiBh cnJheSB0byBhc3NpZ24gZGlyZWN0b3J5IGxpc3QgdG8uXG4iKTsKLSAgICAgICAgcHJpbnRmKCJS ZXR1cm5zIGludGVnZXI6XG5cCi0gIFRoZSBudW1iZXIgb2YgZGlyZWN0b3JpZXMgdGhhdCBtYXRj aCBmMTsgdXNlIHdpdGggXFxmbmV4dGZpbGUoKS5cbiIpOwotICAgICAgICBicmVhazsKLQotICAg ICAgY2FzZSBGTl9SRklMOiAgICAgICAgICAgICAgICAgICAgIC8qIFJlY3Vyc2l2ZSBmaWxlIGNv dW50ICovCi0gICAgICAgIHByaW50ZigiXFxmcmZpbGVzKGYxWywmYV0pIC0gUmVjdXJzaXZlIGZp bGUgbGlzdC5cblwKLSAgZjEgPSBmaWxlIHNwZWNpZmljYXRpb24sIHBvc3NpYmx5IGNvbnRhaW5p bmcgd2lsZGNhcmRzLlxuXAotICAmYSA9IG9wdGlvbmFsIG5hbWUgb2YgYXJyYXkgdG8gYXNzaWdu IGZpbGUgbGlzdCB0by5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwK LSAgVGhlIG51bWJlciBvZiBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCBmMSBpbiB0aGUgY3VycmVu dCBvciBnaXZlblxuXAotICBkaXJlY3RvcnkgdHJlZTsgdXNlIHdpdGggXFxmbmV4dGZpbGUoKS5c biIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9SRElSOiAgICAgICAgICAgICAg ICAgICAgIC8qIFJlY3Vyc2l2ZSBkaXJlY3RvcnkgY291bnQgKi8KLSAgICAgICAgcHJpbnRmKCJc XGZyZGlyZWN0b3JpZXMoZjEpIC0gUmVjdXJzaXZlIGRpcmVjdG9yeSBsaXN0LlxuXAotICBmMSA9 IGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9uLCBwb3NzaWJseSBjb250YWluaW5nIHdpbGRjYXJkcy5c blwKLSAgJmEgPSBvcHRpb25hbCBuYW1lIG9mIGFycmF5IHRvIGFzc2lnbiBkaXJlY3RvcnkgbGlz dCB0by5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKLSAgVGhlIG51 bWJlciBvZiBkaXJlY3RvcmllcyB0aGF0IG1hdGNoIGYxIGluIHRoZSBjdXJyZW50IG9yIGdpdmVu IGRpcmVjdG9yeVxuXAotICB0cmVlLiAgVXNlIHdpdGggXFxmbmV4dGZpbGUoKS5cbiIpOwotICAg ICAgICBicmVhazsKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLQotICAgICAgY2FzZSBGTl9ETkFN OiAgICAgICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSBwYXJ0IG9mIGEgZmlsZW5hbWUgKi8K LSAgICAgICAgcHJpbnRmKCJcXGZkaXJuYW1lKGYpIC0gRGlyZWN0b3J5IHBhcnQgb2YgYSBmaWxl bmFtZS5cblwKLSAgZiA9IGEgZmlsZSBzcGVjaWZpY2F0aW9uLlxuIik7Ci0gICAgICAgIHByaW50 ZigiUmV0dXJucyBkaXJlY3RvcnkgbmFtZTpcblwKLSAgVGhlIGZ1bGwgbmFtZSBvZiB0aGUgZGly ZWN0b3J5IHRoYXQgdGhlIGZpbGUgaXMgaW4sIG9yIGlmIHRoZSBmaWxlIGlzIGFcblwKLSAgZGly ZWN0b3J5LCBpdHMgZnVsbCBuYW1lLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0jaWZuZGVmIE5P UkFORE9NCi0gICAgICBjYXNlIEZOX1JBTkQ6ICAgICAgICAgICAgICAgICAgICAgLyogUmFuZG9t IG51bWJlciAqLwotICAgICAgICBwcmludGYoIlxcZnJhbmRvbShuKSAtIFJhbmRvbSBudW1iZXIu XG5cCi0gIG4gPSBhIHBvc2l0aXZlIGludGVnZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIGludGVnZXI6XG5cCi0gIEEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIDAgYW5kIG4tMS5cbiIp OwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBOT1JBTkRPTSAqLwotCi0gICAgICBjYXNlIEZO X1NQTElUOiAgICAgICAgICAgICAgICAgICAgLyogU3BsaXQgKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgIHByaW50ZigiXFxmc3BsaXQoczEsJmEsczIsczMsbjIsbjMpIC0gXAotQXNzaWduIHN0 cmluZyB3b3JkcyB0byBhbiBhcnJheS5cblwKLSAgczEgPSBzb3VyY2Ugc3RyaW5nXG4gICZhID0g YXJyYXkgZGVzaWduYXRvclxuICBzMiA9IG9wdGlvbmFsIGJyZWFrIHNldC5cbiIpOwotICAgICAg ICBwcmludGYoIiAgczMgPSBvcHRpb25hbCBpbmNsdWRlIHNldC5cbiIpOwotICAgICAgICBwcmlu dGYoIiAgbjIgPSBvcHRpb25hbCBncm91cGluZyBtYXNrLlxuIik7Ci0gICAgICAgIHByaW50Zigi ICBuMyA9IG9wdGlvbmFsIHNlcGFyYXRvciBmbGFnLlxuIik7Ci0gICAgICAgIHByaW50ZigiICBz MiwgczMsIG4yLCBuMyBhcmUgYXMgaW4gXFxmd29yZCgpLlxuIik7Ci0gICAgICAgIHByaW50ZigK LSIgIEFsbCBhcmd1bWVudHMgYXJlIG9wdGlvbmFsOyBpZiBcXCZhW10gYWxyZWFkeSBleGlzdHMs IGl0IGlzIHJlY3ljbGVkO1xuXAotICBpZiBhcnJheSBub3Qgc3BlY2lmaWVkLCB0aGUgY291bnQg aXMgcmV0dXJuZWQgYnV0IG5vIGFycmF5IGlzIGNyZWF0ZWQuXG4iKTsKLSAgICAgICAgcHJpbnRm KCJSZXR1cm5zIGludGVnZXI6XG5cCi0gIE51bWJlciBvZiB3b3JkcyBpbiBzb3VyY2Ugc3RyaW5n LlxuIik7Ci0jZWxzZQotICAgICAgICBobXNnYShoZnNwbGl0KTsKLSNlbmRpZgkvKiBDT01NRU5U ICovCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX0RUSU06ICAgICAgICAgICAgICAg ICAgICAgLyogQ1ZUREFURSAqLwotICAgICAgICBwcmludGYoIlxcZmN2dGRhdGUoW2RhdGUtdGlt ZV1bLG4xXSkgLSBEYXRlL3RpbWUgY29udmVyc2lvbi5cbiIpOwotICAgICAgICBwcmludGYoIiAg Q29udmVydHMgZGF0ZSBhbmQvb3IgdGltZSB0byBzdGFuZGFyZCBmb3JtYXQuXG4iKTsKLSAgICAg ICAgcHJpbnRmKCIgIElmIG5vIGRhdGUvdGltZSBnaXZlbiwgcmV0dXJucyBjdXJyZW50IGRhdGUv dGltZS5cbiIpOwotICAgICAgICBwcmludGYoIiAgW2RhdGUtdGltZV0sIGlmIGdpdmVuLCBpcyBm cmVlLWZvcm1hdCBkYXRlIGFuZC9vciB0aW1lLlxuIik7Ci0gICAgICAgIHByaW50ZigiICBIRUxQ IERBVEUgZm9yIGluZm8gYWJvdXQgZGF0ZS10aW1lIGZvcm1hdHMuXG4iKTsKLSAgICAgICAgcHJp bnRmKCJSZXR1cm5zIHN0cmluZzpcblwKLSAgU3RhbmRhcmQtZm9ybWF0IGRhdGUgYW5kIHRpbWU6 IHl5eXltbWRkIGhoOm1tOnNzIChudW1lcmljKVxuIik7Ci0gICAgICAgIHByaW50ZigiICBJZiBu MSBpcyBnaXZlbjpcblwKLSAgbjEgPSAxOiB5eXl5LW1tbS1kZCBoaDptbTpzcyAobW1tID0gRW5n bGlzaCAzLWxldHRlciBtb250aCBhYmJyZXZpYXRpb24pXG5cCi0gIG4xID0gMjogZGQtbW1tLXl5 eXkgaGg6bW06c3MgKGRpdHRvKVxuXAotICBuMSA9IDM6IHl5eXltbWRkaGhtbXNzIChhbGwgbnVt ZXJpYylcblwKLSAgbjEgPSA0OiBEYXkgTW9uIGRkIGhoOm1tOnNzIHl5eXkgKGFzY3RpbWUpXG5c Ci0gIE90aGVyOiAgeXl5eW1tZGQgaGg6bW06ZGQiKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg IGNhc2UgRk5fSkRBVEU6ICAgICAgICAgICAgICAgICAgICAvKiBET1kgKi8KLSAgICAgICAgcHJp bnRmKCJcXGZkb3koW2RhdGUtdGltZV0pIC0gRGF5IG9mIFllYXIuXG4iKTsKLSAgICAgICAgcHJp bnRmKCIgIENvbnZlcnRzIGRhdGUgYW5kL29yIHRpbWUgdG8gZGF5LW9mLXllYXIgKERPWSkgZm9y bWF0LlxuIik7Ci0gICAgICAgIHByaW50ZigiICBJZiBubyBkYXRlL3RpbWUgZ2l2ZW4sIHJldHVy bnMgY3VycmVudCBkYXRlLlxuIik7Ci0gICAgICAgIHByaW50ZigiICBbZGF0ZS10aW1lXSwgaWYg Z2l2ZW4sIGlzIGZyZWUtZm9ybWF0IGRhdGUgYW5kL29yIHRpbWUuXG4iKTsKLSAgICAgICAgcHJp bnRmKCIgIEhFTFAgREFURSBmb3IgaW5mbyBhYm91dCBkYXRlLXRpbWUgZm9ybWF0cy5cbiIpOwot ICAgICAgICBwcmludGYoIlJldHVybnMgbnVtZXJpYyBzdHJpbmc6XG5cCi0gIERPWTogeXl5eWRk ZCwgd2hlcmUgZGRkIGlzIDEtYmFzZWQgZGF5IG51bWJlciBpbiB5ZWFyLlxuIik7Ci0gICAgICAg IGJyZWFrOwotCi0gICAgICBjYXNlIEZOX1BOQ1ZUOgotICAgICAgICBwcmludGYoIlxcZmRpYWxj b252ZXJ0KHBob25lLW51bWJlcikgLSBDb252ZXJ0IHBob25lIG51bWJlci5cbiIpOwotICAgICAg ICBwcmludGYoIiAgQ29udmVydHMgdGhlIGdpdmVuIHBob25lIG51bWJlciBmb3IgZGlhbGluZyBh Y2NvcmRpbmdcbiIpOwotICAgICAgICBwcmludGYoCi0iICB0byB0aGUgcHJldmFpbGluZyBkaWFs aW5nIHJ1bGVzIC0tIGNvdW50cnkgY29kZSwgYXJlYSBjb2RlLCBldGMuXG4iKTsKLSAgICAgICAg cHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKLSAgVGhlIGRpYWwgc3RyaW5nIHRoYXQgd291bGQg YmUgdXNlZCBpZiB0aGUgc2FtZSBwaG9uZSBudW1iZXIgaGFkIGJlZW5cblwKLSAgZ2l2ZW4gdG8g dGhlIERJQUwgY29tbWFuZC5cbiIKLSAgICAgICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0K LSAgICAgIGNhc2UgRk5fREFURUo6ICAgICAgICAgICAgICAgICAgICAvKiBET1kyREFURSAqLwot ICAgICAgICBwcmludGYoIlxcZmRveTJkYXRlKFtkb3lbIHRpbWVdXSkgLSBEYXkgb2YgWWVhciB0 byBEYXRlLlxuIik7Ci0gICAgICAgIHByaW50ZigiICBDb252ZXJ0cyB5eXl5bW1tIHRvIHl5eXlt bWRkXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIElmIHRpbWUgaW5jbHVkZWQsIGl0IGlzIGNvbnZl cnRlZCB0byAyNC1ob3VyIGZvcm1hdC4iKTsKLSAgICAgICAgcHJpbnRmKAotICAgICAgICAgICAg IlJldHVybnMgc3RhbmRhcmQgZGF0ZSBvciBkYXRlLXRpbWUgc3RyaW5nIHl5eXltbWRkIGhoOm1t OnNzXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fTUpEOgotICAgICAgICBw cmludGYoIlxcZm1qZChbW2RhdGVdWyB0aW1lXV0pIC0gTW9kaWZpZWQgSnVsaWFuIERhdGUgKE1K RCkuXG4iKTsKLSAgICAgICAgcHJpbnRmKAotIiAgQ29udmVydHMgZGF0ZSBhbmQvb3IgdGltZSB0 byBNSkQsIHRoZSBudW1iZXIgb2YgZGF5cyBzaW5jZSAxNyBOb3YgMTg1OC5cbiIpOwotICAgICAg ICBwcmludGYoIiAgSEVMUCBEQVRFIGZvciBpbmZvIGFib3V0IGRhdGUtdGltZSBmb3JtYXRzLlxu Iik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJuczogaW50ZWdlci5cbiIpOwotICAgICAgICBicmVh azsKLQotICAgICAgY2FzZSBGTl9NSkQyOgotICAgICAgICBwcmludGYoIlxcZm1qZDJkYXRlKG1q ZCkgLSBNb2RpZmllZCBKdWxpYW4gRGF0ZSAoTUpEKSB0byBEYXRlLlxuIik7Ci0gICAgICAgIHBy aW50ZigiICBDb252ZXJ0cyBNSkQgdG8gc3RhbmRhcmQtZm9ybWF0IGRhdGUuXG4iKTsKLSAgICAg ICAgcHJpbnRmKCJSZXR1cm5zOiB5eXl5bW1kZC5cbiIpOwotICAgICAgICBicmVhazsKLQotICAg ICAgY2FzZSBGTl9EQVk6Ci0gICAgICAgIHByaW50ZigiXFxmZGF5KFtbZGF0ZV1bIHRpbWVdXSkg LSBEYXkgb2YgV2Vlay5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgZGF5IG9mIHdlZWsg b2YgZ2l2ZW4gZGF0ZSBhcyBNb24sIFR1ZSwgZXRjLlxuIik7Ci0gICAgICAgIHByaW50ZigiSEVM UCBEQVRFIGZvciBpbmZvIGFib3V0IGRhdGUtdGltZSBmb3JtYXRzLlxuIik7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgICBjYXNlIEZOX05EQVk6Ci0gICAgICAgIHByaW50ZigiXFxmbmRheShbW2Rh dGVdWyB0aW1lXV0pIC0gTnVtZXJpYyBEYXkgb2YgV2Vlay5cbiIpOwotICAgICAgICBwcmludGYo Ci0gICAgIlJldHVybnMgbnVtZXJpYyBkYXkgb2Ygd2VlayBvZiBnaXZlbiBkYXRlLCAwPVN1biwg MT1Nb24sIC4uLiwgNj1TYXQuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJIRUxQIERBVEUgZm9yIGlu Zm8gYWJvdXQgZGF0ZS10aW1lIGZvcm1hdHMuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg IGNhc2UgRk5fVElNRToKLSAgICAgICAgcHJpbnRmKCJcXGZ0aW1lKFtbZGF0ZV1bIHRpbWVdXSkg LSBUaW1lLlxuIik7Ci0gICAgICAgIHByaW50ZigKLSJSZXR1cm5zIHRpbWUgcG9ydGlvbiBvZiBn aXZlbiBkYXRlIGFuZC9vciB0aW1lIGluIGhoOm1tOnNzIGZvcm1hdC5cbiIpOwotICAgICAgICBw cmludGYoIklmIG5vIGFyZ3VtZW50IGdpdmVuLCByZXR1cm5zIGN1cnJlbnQgdGltZS5cbiIpOwot ICAgICAgICBwcmludGYoIkhFTFAgREFURSBmb3IgaW5mbyBhYm91dCBkYXRlLXRpbWUgZm9ybWF0 cy5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9OVElNOgotICAgICAgICBw cmludGYoIlxcZm50aW1lKFtbZGF0ZV1bIHRpbWVdXSkgLSBOdW1lcmljIFRpbWUuXG4iKTsKLSAg ICAgICAgcHJpbnRmKAotIlJldHVybnMgdGltZSBwb3J0aW9uIG9mIGdpdmVuIGRhdGUgYW5kL29y IHRpbWUgYXMgc2Vjb25kcyBzaW5jZSBtaWRuaWdodC5cbiIpOwotICAgICAgICBwcmludGYoIklm IG5vIGFyZ3VtZW50IGdpdmVuLCByZXR1cm5zIGN1cnJlbnQgdGltZS5cbiIpOwotICAgICAgICBw cmludGYoIkhFTFAgREFURSBmb3IgaW5mbyBhYm91dCBkYXRlLXRpbWUgZm9ybWF0cy5cbiIpOwot ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9OMlRJTToKLSAgICAgICAgcHJpbnRmKCJc XGZuMnRpbWUoc2Vjb25kcykgLSBOdW1lcmljIFRpbWUgdG8gVGltZS5cbiIpOwotICAgICAgICBw cmludGYoCi0iUmV0dXJucyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMgaW4gaGg6bW06c3Mg Zm9ybWF0LlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX1BFUk06Ci0gICAg ICAgIHByaW50ZigiXFxmcGVybWlzc2lvbnMoZmlsZSkgLSBQZXJtaXNzaW9ucyBvZiBGaWxlLlxu Iik7Ci0gICAgICAgIHByaW50ZigKLSNpZmRlZiBVTklYCi0iUmV0dXJucyBwZXJtaXNzaW9ucyBv ZiBnaXZlbiBmaWxlIGFzIHRoZXkgd291bGQgYmUgc2hvd24gYnkgXCJscyAtbFwiLlxuIgotI2Vs c2UKLSNpZmRlZiBWTVMKLSJSZXR1cm5zIHBlcm1pc3Npb25zIG9mIGdpdmVuIGZpbGUgYXMgdGhl eSB3b3VsZCBiZSBzaG93biBieSBcImRpciAvcHJvdFwiLlxuIgotI2Vsc2UKLSJSZXR1cm5zIHRo ZSBwZXJtaXNzaW9ucyBvZiB0aGUgZ2l2ZW4gZmlsZS5cbiIKLSNlbmRpZiAvKiBWTVMgKi8KLSNl bmRpZiAvKiBVTklYICovCi0gICAgICAgICAgICAgICApOwotICAgICAgICBicmVhazsKLQotICAg ICAgY2FzZSBGTl9BTE9PSzoKLSAgICAgICAgcHJpbnRmKCJcXGZhcnJheWxvb2socGF0dGVybiwm YSkgLSBMb29rdXAgcGF0dGVybiBpbiBhcnJheS5cblwKLSAgcGF0dGVybiA9IFN0cmluZyBvciBw YXR0ZXJuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICZhID0gYXJyYXkgZGVzaWduYXRvciwgY2Fu IGluY2x1ZGUgcmFuZ2Ugc3BlY2lmaWVyLlxuIik7Ci0gICAgICAgIHByaW50ZigKLSJSZXR1cm5z IG51bWJlcjpcblwKLSAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBtYXRjaGluZyBhcnJheSBlbGVt ZW50IG9yIC0xIGlmIG5vbmUuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJNb3JlIGluZm86XG5cCi0g IEhFTFAgUEFUVEVSTiBmb3IgcGF0dGVybiBzeW50YXguXG4gIEhFTFAgQVJSQVkgZm9yIGFycmF5 cy5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9UTE9PSzoKLSAgICAgICAg cHJpbnRmKAotIlxcZnRhYmxlbG9vayhrZXl3b3JkLCZhLFtjXSkgLSBMb29rdXAga2V5d29yZCBp biBrZXl3b3JkIHRhYmxlLlxuXAotICBwYXR0ZXJuID0gU3RyaW5nXG4iKTsKLSAgICAgICAgcHJp bnRmKCIgIGtleXdvcmQgPSBrZXl3b3JkIHRvIGxvb2sgdXAgKGNhbiBiZSBhYmJyZXZpYXRlZCku XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICZhICAgICAgPSBhcnJheSBkZXNpZ25hdG9yLCBjYW4g aW5jbHVkZSByYW5nZSBzcGVjaWZpZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICAgICAgICAg ICBUaGlzIGFycmF5IG11c3QgYmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLlxuIik7Ci0gICAgICAg IHByaW50ZigiICBjICAgICAgID0gT3B0aW9uYWwgZmllbGQgZGVsaW1pdGVyLCBjb2xvbig6KSBi eSBkZWZhdWx0LlxuIik7Ci0gICAgICAgIHByaW50ZigKLSJSZXR1cm5zIG51bWJlcjpcblwKLSAg MSBvciBncmVhdGVyLCBpbmRleCBvZiBhcnJheSBlbGVtZW50IHRoYXQgdW5pcXVlbHkgbWF0Y2hl cyBnaXZlbiBrZXl3b3JkO1xuIgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcHJpbnRmKAot Im9yIC0yIGlmIGtleXdvcmQgd2FzIGFtYmlndW91cywgb3IgLTEgaWYga2V5d29yZCBlbXB0eSBv ciBub3QgZm91bmQuXG4iCi0gICAgICAgICAgICAgICApOwotICAgICAgICBwcmludGYoIkFsc28g c2VlOlxuXAotICBIRUxQIEZVTkMgQVJSQVlMT09LIGZvciBhIHNpbWlsYXIgZnVuY3Rpb24uXG4g IEhFTFAgQVJSQVkgZm9yIGFycmF5cy5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2Fz ZSBGTl9BQlM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEFic29sdXRlICovCi0gICAgICAgIHBy aW50ZigiXFxmYWJzb2x1dGUobjEpXG5cCi0gIG4xID0gaW50ZWdlci5cbiIpOwotICAgICAgICBw cmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKLSAgVGhlIGFic29sdXRlICh1bnNpZ25lZCkgdmFs dWUgb2YgbjEuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBGTkZMT0FUCi0gICAgICBj YXNlIEZOX0ZQQUJTOgotICAgICAgICBwcmludGYoIlxcZmZwYWJzb2x1dGUoZjEsZClcblwKLSAg ZjEgPSBmbG9hdGluZy1wb2ludCBudW1iZXIgb3IgaW50ZWdlci5cblwKLSAgIGQgPSBpbnRlZ2Vy LlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5c Ci0gIFRoZSBhYnNvbHV0ZSAodW5zaWduZWQpIHZhbHVlIG9mIGYxIHRvIGQgZGVjaW1hbCBwbGFj ZXMuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fRlBBREQ6Ci0gICAgICAg IHByaW50ZigiXFxmZnBhZGQoZjEsZjIsZClcblwKLSAgZjEsZjIgPSBmbG9hdGluZy1wb2ludCBu dW1iZXJzIG9yIGludGVnZXJzLlxuXAotICAgICAgZCA9IGludGVnZXIuXG4iKTsKLSAgICAgICAg cHJpbnRmKCJSZXR1cm5zIGZsb2F0aW5nLXBvaW50IG51bWJlcjpcblwKLSAgVGhlIHN1bSBvZiBm MSBhbmQgZjIgdG8gZCBkZWNpbWFsIHBsYWNlcy5cbiIpOwotICAgICAgICBicmVhazsKLQotICAg ICAgY2FzZSBGTl9GUFNVQjoKLSAgICAgICAgcHJpbnRmKCJcXGZmcHN1YnRyYWN0KGYxLGYyLGQp XG5cCi0gIGYxLGYyID0gZmxvYXRpbmctcG9pbnQgbnVtYmVycyBvciBpbnRlZ2Vycy5cblwKLSAg ICAgIGQgPSBpbnRlZ2VyLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGluZy1w b2ludCBudW1iZXI6XG5cCi0gIGYxIG1pbnVzIGYyIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fRlBNVUw6Ci0gICAgICAgIHByaW50Zigi XFxmZnBtdWx0aXBseShmMSxmMixkKVxuXAotICBmMSxmMiA9IGZsb2F0aW5nLXBvaW50IG51bWJl cnMgb3IgaW50ZWdlcnMuXG5cCi0gICAgICBkID0gaW50ZWdlci5cbiIpOwotICAgICAgICBwcmlu dGYoIlJldHVybnMgZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAotICBUaGUgcHJvZHVjdCBvZiBm MSBhbmQgZjIgdG8gZCBkZWNpbWFsIHBsYWNlcy5cbiIpOwotICAgICAgICBicmVhazsKLQotICAg ICAgY2FzZSBGTl9GUERJVjoKLSAgICAgICAgcHJpbnRmKCJcXGZmcGRpdmlkZShmMSxmMixkKVxu XAotICBmMSxmMiA9IGZsb2F0aW5nLXBvaW50IG51bWJlcnMgb3IgaW50ZWdlcnMuXG5cCi0gICAg ICBkID0gaW50ZWdlci5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgZmxvYXRpbmctcG9p bnQgbnVtYmVyOlxuXAotICBmMSBkaXZpZGVkIGJ5IGYyIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4i KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fRlBNQVg6Ci0gICAgICAgIHByaW50 ZigiXFxmZnBtYXhpbXVtKGYxLGYyLGQpXG5cCi0gIGYxLGYyID0gZmxvYXRpbmctcG9pbnQgbnVt YmVycyBvciBpbnRlZ2Vycy5cblwKLSAgICAgIGQgPSBpbnRlZ2VyLlxuIik7Ci0gICAgICAgIHBy aW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5cCi0gIFRoZSBtYXhpbXVtIG9m IGYxIGFuZCBmMiB0byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0g ICAgICBjYXNlIEZOX0ZQTUlOOgotICAgICAgICBwcmludGYoIlxcZmZwbWluaW11bShmMSxmMixk KVxuXAotICBmMSxmMiA9IGZsb2F0aW5nLXBvaW50IG51bWJlcnMgb3IgaW50ZWdlcnMuXG5cCi0g ICAgICBkID0gaW50ZWdlci5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgZmxvYXRpbmct cG9pbnQgbnVtYmVyOlxuXAotICBUaGUgbWluaW11bSBvZiBmMSBhbmQgZjIgdG8gZCBkZWNpbWFs IHBsYWNlcy5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9GUE1PRDoKLSAg ICAgICAgcHJpbnRmKCJcXGZmcG1vZHVsdXMoZjEsZjIsZClcblwKLSAgZjEsZjIgPSBmbG9hdGlu Zy1wb2ludCBudW1iZXJzIG9yIGludGVnZXJzLlxuXAotICAgICAgZCA9IGludGVnZXIuXG4iKTsK LSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGZsb2F0aW5nLXBvaW50IG51bWJlcjpcblwKLSAgVGhl IG1vZHVsdXMgb2YgZjEgYW5kIGYyIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fRlBQT1c6Ci0gICAgICAgIHByaW50ZigiXFxmZnByYWlz ZShmMSxmMixkKVxuXAotICBmMSxmMiA9IGZsb2F0aW5nLXBvaW50IG51bWJlcnMgb3IgaW50ZWdl cnMuXG5cCi0gICAgICBkID0gaW50ZWdlci5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMg ZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAotICBmMSByYWlzZWQgdG8gdGhlIHBvd2VyIGYyLCB0 byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZO X0ZQQ09TOgotICAgICAgICBwcmludGYoIlxcZmZwY29zaW5lKGYxLGQpXG5cCi0gIGYxID0gZmxv YXRpbmctcG9pbnQgbnVtYmVyIG9yIGludGVnZXIuXG5cCi0gICBkID0gaW50ZWdlci5cbiIpOwot ICAgICAgICBwcmludGYoIlJldHVybnMgZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAotICBUaGUg Y29zaW5lIG9mIGFuZ2xlIGYxIChpbiByYWRpYW5zKSB0byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7 Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX0ZQU0lOOgotICAgICAgICBwcmludGYo IlxcZmZwc2luZShmMSxkKVxuXAotICBmMSA9IGZsb2F0aW5nLXBvaW50IG51bWJlciBvciBpbnRl Z2VyLlxuXAotICAgZCA9IGludGVnZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGZs b2F0aW5nLXBvaW50IG51bWJlcjpcblwKLSAgVGhlIHNpbmUgb2YgYW5nbGUgZjEgKGluIHJhZGlh bnMpIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh c2UgRk5fRlBUQU46Ci0gICAgICAgIHByaW50ZigiXFxmZnB0YW5nZW50KGYxLGQpXG5cCi0gIGYx ID0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIG9yIGludGVnZXIuXG5cCi0gICBkID0gaW50ZWdlci5c biIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAot ICBUaGUgdGFuZ2VudCBvZiBhbmdsZSBmMSAoaW4gcmFkaWFucykgdG8gZCBkZWNpbWFsIHBsYWNl cy5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9GUEVYUDoKLSAgICAgICAg cHJpbnRmKCJcXGZmcGV4cChmMSxkKVxuXAotICBmMSA9IGZsb2F0aW5nLXBvaW50IG51bWJlciBv ciBpbnRlZ2VyLlxuXAotICAgZCA9IGludGVnZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIGZsb2F0aW5nLXBvaW50IG51bWJlcjpcblwKLSAgZSAodGhlIGJhc2Ugb2YgbmF0dXJhbCBs b2dhcml0aG1zKSByYWlzZWQgdG8gdGhlIGYxIHBvd2VyLFxuXAotICB0byBkIGRlY2ltYWwgcGxh Y2VzLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX0ZQSU5UOgotICAgICAg ICBwcmludGYoIlxcZmZwaW50KGYxKVxuXAotICBmMSA9IGZsb2F0aW5nLXBvaW50IG51bWJlciBv ciBpbnRlZ2VyLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAotICBU aGUgaW50ZWdlciBwYXJ0IG9mIGYxLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNl IEZOX0ZQTE9HOgotICAgICAgICBwcmludGYoIlxcZmZwbG9nMTAoZjEsZClcblwKLSAgZjEgPSBm bG9hdGluZy1wb2ludCBudW1iZXIgb3IgaW50ZWdlci5cblwKLSAgIGQgPSBpbnRlZ2VyLlxuIik7 Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5cCi0gIFRo ZSBsb2dhcml0aG0sIGJhc2UgMTAsIG9mIGYxIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fRlBMTjoKLSAgICAgICAgcHJpbnRmKCJcXGZm cGxvZ24oZjEsZClcblwKLSAgZjEgPSBmbG9hdGluZy1wb2ludCBudW1iZXIgb3IgaW50ZWdlci5c blwKLSAgIGQgPSBpbnRlZ2VyLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGlu Zy1wb2ludCBudW1iZXI6XG5cCi0gIFRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBmMSB0byBkIGRl Y2ltYWwgcGxhY2VzLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX0ZQUk9V OgotICAgICAgICBwcmludGYoIlxcZmZwcm91bmQoZjEsZClcblwKLSAgZjEgPSBmbG9hdGluZy1w b2ludCBudW1iZXIgb3IgaW50ZWdlci5cblwKLSAgIGQgPSBpbnRlZ2VyLlxuIik7Ci0gICAgICAg IHByaW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5cCi0gIGYxIHJvdW5kZWQg dG8gZCBkZWNpbWFsIHBsYWNlcy5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBG Tl9GUFNRUjoKLSAgICAgICAgcHJpbnRmKCJcXGZmcHNxcnQoZjEsZClcblwKLSAgZjEgPSBmbG9h dGluZy1wb2ludCBudW1iZXIgb3IgaW50ZWdlci5cblwKLSAgIGQgPSBpbnRlZ2VyLlxuIik7Ci0g ICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5cCi0gIFRoZSBz cXVhcmUgcm9vdCBvZiBmMSB0byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7Ci0gICAgICAgIGJyZWFr OwotI2VuZGlmIC8qIEZORkxPQVQgKi8KLQotI2lmZGVmIENLQ0hBTk5FTElPCi0gICAgICBjYXNl IEZOX0ZFT0Y6Ci0gICAgICAgIHByaW50ZigiXFxmX2VvZihuMSlcblwKLSAgbjEgPSBjaGFubmVs IG51bWJlci5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgbnVtYmVyOlxuXAotICAxIGlm IGNoYW5uZWwgbjEgYXQgZW5kIG9mIGZpbGUsIDAgb3RoZXJ3aXNlLlxuIik7Ci0gICAgICAgIGJy ZWFrOwotICAgICAgY2FzZSBGTl9GUE9TOgotICAgICAgICBwcmludGYoIlxcZl9wb3MobjEpXG5c Ci0gIG4xID0gY2hhbm5lbCBudW1iZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIG51 bWJlcjpcblwKLSAgUmVhZC93cml0ZSBwb2ludGVyIG9mIGNoYW5uZWwgbjEgYXMgYnl0ZSBudW1i ZXIuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX05MSU5FOgotICAgICAgICBw cmludGYoIlxcZl9saW5lKG4xKVxuXAotICBuMSA9IGNoYW5uZWwgbnVtYmVyLlxuIik7Ci0gICAg ICAgIHByaW50ZigiUmV0dXJucyBudW1iZXI6XG5cCi0gIFJlYWQvd3JpdGUgcG9pbnRlciBvZiBj aGFubmVsIG4xIGFzIGxpbmUgbnVtYmVyLlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz ZSBGTl9GSUxOTzoKLSAgICAgICAgcHJpbnRmKCJcXGZfaGFuZGxlKG4xKVxuXAotICBuMSA9IGNo YW5uZWwgbnVtYmVyLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBudW1iZXI6XG5cCi0g IEZpbGUgJXMgb2Ygb3BlbiBmaWxlIG9uIGNoYW5uZWwgbjEuXG4iLAotI2lmZGVmIE9TMgotICAg ICAgICAgICAgICAgImhhbmRsZSIKLSNlbHNlCi0gICAgICAgICAgICAgICAiZGVzY3JpcHRvciIK LSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAg ICAgY2FzZSBGTl9GU1RBVDoKLSAgICAgICAgcHJpbnRmKCJcXGZfc3RhdHVzKG4xKVxuXAotICBu MSA9IGNoYW5uZWwgbnVtYmVyLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBudW1iZXI6 XG5cCi0gIFN1bSBvZiBvcGVuIG1vZGVzIG9mIGNoYW5uZWwgbjE6IDEgPSByZWFkOyAyID0gd3Jp dGU7IDQgPSBhcHBlbmQsIG9yOlxuXAotICAwIGlmIG5vdCBvcGVuLlxuIik7Ci0gICAgICAgIGJy ZWFrOwotICAgICAgY2FzZSBGTl9GR0NIQVI6Ci0gICAgICAgIHByaW50ZigiXFxmX2dldGNoYXIo bjEpXG5cCi0gIG4xID0gY2hhbm5lbCBudW1iZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIFJl YWRzIGEgY2hhcmFjdGVyIGZyb20gY2hhbm5lbCBuMSBhbmQgcmV0dXJucyBpdC5cbiIpOwotICAg ICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fRkdMSU5FOgotICAgICAgICBwcmludGYoIlxcZl9n ZXRsaW5lKG4xKVxuXAotICBuMSA9IGNoYW5uZWwgbnVtYmVyLlxuIik7Ci0gICAgICAgIHByaW50 ZigiICBSZWFkcyBhIGxpbmUgZnJvbSBjaGFubmVsIG4xIGFuZCByZXR1cm5zIGl0LlxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9GR0JMSzoKLSAgICAgICAgcHJpbnRmKCJcXGZf Z2V0YmxvY2sobjEsbjIpXG5cCi0gIG4xID0gY2hhbm5lbCBudW1iZXIsIG4yID0gc2l6ZVxuIik7 Ci0gICAgICAgIHByaW50ZigKLSIgIFJlYWRzIGEgYmxvY2sgb2YgbjIgY2hhcmFjdGVycyBmcm9t IGNoYW5uZWwgbjEgYW5kIHJldHVybnMgaXQuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj YXNlIEZOX0ZQQ0hBUjoKLSAgICAgICAgcHJpbnRmKCJcXGZfcHV0Y2hhcihuMSxjKVxuXAotICBu MSA9IGNoYW5uZWwgbnVtYmVyLCBjID0gY2hhcmFjdGVyXG4iKTsKLSAgICAgICAgcHJpbnRmKCIg IFdyaXRlcyBhIGNoYXJhY3RlciB0byBjaGFubmVsIG4xLlxuXAotUmV0dXJucyBudW1iZXI6XG5c Ci0gIDEgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZS5cbiIp OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fRlBMSU5FOgotICAgICAgICBwcmludGYo IlxcZl9wdXRsaW5lKG4xLHMxKVxuXAotICBuMSA9IGNoYW5uZWwgbnVtYmVyLCBzMSA9IHN0cmlu Z1xuIik7Ci0gICAgICAgIHByaW50ZigKLSIgIFdyaXRlcyB0aGUgc3RyaW5nIHMxIHRvIGNoYW5u ZWwgbjEgYW5kIGFkZHMgYSBsaW5lIHRlcm1pbmF0b3IuXG5cCi1SZXR1cm5zIG51bWJlcjpcbiIp OwotICAgICAgICBwcmludGYoIiAgSG93IG1hbnkgY2hhcmFjdGVycyB3cml0dGVuIGlmIHN1Y2Nl c3NmdWw7XG5cCi0gIE90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuXG4iCi0gICAgICAg ICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fRlBCTEs6Ci0gICAgICAg IHByaW50ZigiXFxmX3B1dGJsb2NrKG4xLHMxKVxuXAotICBuMSA9IGNoYW5uZWwgbnVtYmVyLCBz MSA9IHN0cmluZ1xuIik7Ci0gICAgICAgIHByaW50ZigKLSIgIFdyaXRlcyB0aGUgc3RyaW5nIHMx IHRvIGNoYW5uZWwgbjEuXG5cCi0gIFJldHVybnMgbnVtYmVyOlxuIik7Ci0gICAgICAgIHByaW50 ZigiICBIb3cgbWFueSBjaGFyYWN0ZXJzIHdyaXR0ZW4gaWYgc3VjY2Vzc2Z1bDtcblwKLSAgT3Ro ZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZS5cbiIKLSAgICAgICAgICAgICAgICk7Ci0gICAg ICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9GRVJNU0c6Ci0gICAgICAgIHByaW50ZigiXFxmX2Vy cm1zZyhbbjFdKVxuXAotICBuMSA9IG51bWVyaWMgZXJyb3IgY29kZSwgXFx2KGZfZXJyb3IpIGJ5 IGRlZmF1bHQuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIFJldHVybnMgdGhlIGFzc29jaWF0ZWQg ZXJyb3IgbWVzc2FnZSBzdHJpbmcuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tD SEFOTkVMSU8gKi8KLQotICAgICAgY2FzZSBGTl9BQURVTVA6Ci0gICAgICAgIHByaW50ZigiXFxm YWFjb252ZXJ0KG5hbWUsJmFbLCZiXSlcblwKLSAgbmFtZSA9IG5hbWUgb2YgYXNzb2NpYXRpdmUg YXJyYXksICZhIGFuZCAmYiA9IG5hbWVzIG9mIHJlZ3VsYXIgYXJyYXlzLlxuIik7Ci0gICAgICAg IHByaW50ZigKLSIgIENvbnZlcnRzIHRoZSBnaXZlbiBhc3NvY2lhdGl2ZSBhcnJheSBpbnRvIHR3 byByZWd1bGFyIGFycmF5cywgJmEgYW5kICZiLFxuXAotICBjb250YWluaW5nIHRoZSBpbmRpY2Vz IGFuZCB2YWx1ZXMsIHJlc3BlY3RpdmVseTpcbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMg bnVtYmVyOlxuXAotICBIb3cgbWFueSBlbGVtZW50cyB3ZXJlIGNvbnZlcnRlZC5cbiIpOwotICAg ICAgICBicmVhazsKLQotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgICBjYXNlIEZOX0tSQl9USzoK LSAgICAgICAgcHJpbnRmKCJcXGZrcmJ0aWNrZXRzKG4pXG5cCi0gIG4gPSBLZXJiZXJvcyB2ZXJz aW9uIG51bWJlciAoNCBvciA1KS5cblwKLSAgUmV0dXJucyBzdHJpbmc6XG5cCi0gIFRoZSBudW1i ZXIgb2YgYWN0aXZlIEtlcmJlcm9zIDQgb3IgNSB0aWNrZXRzLlxuXAotICBSZXNldHMgdGhlIHRp Y2tldCBsaXN0IHVzZWQgYnkgXFxma3JibmV4dHRpY2tldChuKS5cbiIpOwotICAgICAgICBicmVh azsKLQotICAgICAgY2FzZSBGTl9LUkJfTlg6Ci0gICAgICAgIHByaW50ZigiXFxma3JibmV4dHRp Y2tldChuKVxuXAotICBuID0gS2VyYmVyb3MgdmVyc2lvbiBudW1iZXIgKDQgb3IgNSkuXG5cCi0g IFJldHVybnMgc3RyaW5nOlxuXAotICAgIFRoZSBuZXh0IHRpY2tldCBpbiB0aGUgS2VyYmVyb3Mg NCBvciA1IHRpY2tldCBsaXN0IHRoYXQgd2FzIHNldCB1cCBieVxuXAotICAgIHRoZSBtb3N0IHJl Y2VudCBpbnZvY2F0aW9uIG9mIFxcZmtyYnRpY2tldHMobikuXG4iKTsKLSAgICAgICAgYnJlYWs7 Ci0KLSAgICAgIGNhc2UgRk5fS1JCX0lWOgotICAgICAgICBwcmludGYoIlxcZmtyYmlzdmFsaWQo bixuYW1lKVxuXAotICBuICAgID0gS2VyYmVyb3MgdmVyc2lvbiBudW1iZXIgKDQgb3IgNSkuXG5c Ci0gIG5hbWUgPSBhIHRpY2tldCBuYW1lIGFzIHJldHVybmVkIGJ5IFxcZmtyYm5leHR0aWNrZXQo bikuXG5cCi0gIFJldHVybnMgbnVtYmVyOlxuXAotICAgIDEgaWYgdGhlIHRpY2tldCBpcyB2YWxp ZCwgMCBpZiBub3QgdmFsaWQuXG5cCi0gICAgQSB0aWNrZXQgaXMgdmFsaWQgaWYgYWxsIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcblxuIik7Ci0gICAgICAgIHByaW50ZigiXG5c Ci0gICAgKGkpICAgaXQgZXhpc3RzIGluIHRoZSBjdXJyZW50IGNhY2hlIGZpbGU7XG5cCi0gICAg KGlpKSAgaXQgaXMgbm90IGV4cGlyZWQ7XG5cCi0gICAgKGlpaSkgaXQgaXMgbm90IG1hcmtlZCBp bnZhbGlkIChLNSBvbmx5KTtcblwKLSAgICAoaXYpICBpdCB3YXMgaXNzdWVkIGZyb20gdGhlIGN1 cnJlbnQgSVAgYWRkcmVzc1xuIik7Ci0gICAgICAgIHByaW50ZigiXG4gIFRoaXMgdmFsdWUgY2Fu IGJlIHVzZWQgaW4gYW4gSUYgc3RhdGVtZW50LCBlLmcuOlxuXG4iKTsKLSAgICAgICAgcHJpbnRm KCIgICAgaWYgXFxma3JiaXN2YWxpZCg0LGtyYnRndC5GT08uQkFSLkVEVUBGT08uQkFSLkVEVSkg Li4uXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fS1JCX1RUOgotICAgICAg ICBwcmludGYoIlxcZmtyYnRpbWVsZWZ0KG4sbmFtZSlcblwKLSAgbiAgICA9IEtlcmJlcm9zIHZl cnNpb24gbnVtYmVyICg0IG9yIDUpLlxuXAotICBuYW1lID0gYSB0aWNrZXQgbmFtZSBhcyByZXR1 cm5lZCBieSBcXGZrcmJuZXh0dGlja2V0KG4pLlxuXAotICBSZXR1cm5zIHN0cmluZzpcblwKLSAg ICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgcmVtYWluaW5nIGluIHRoZSB0aWNrZXQncyBsaWZldGlt ZS5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9LUkJfRkc6Ci0gICAgICAg IHByaW50ZigiXFxma3JiZmxhZ3MobixuYW1lKVxuXAotICBuICAgID0gS2VyYmVyb3MgdmVyc2lv biBudW1iZXIgKDQgb3IgNSkuXG5cCi0gIG5hbWUgPSBhIHRpY2tldCBuYW1lIGFzIHJldHVybmVk IGJ5IFxcZmtyYm5leHR0aWNrZXQobikuXG5cCi0gIFJldHVybnMgc3RyaW5nOlxuIik7Ci0gICAg ICAgIHByaW50ZigKLSIgICAgVGhlIGZsYWdzIHN0cmluZyBhcyByZXBvcnRlZCB3aXRoIEFVVEgg SzUgTElTVCAvRkxBR1MuICBUaGlzIHN0cmluZyBjYW5cblwKLSAgICBiZSBzZWFyY2hlZCBmb3Ig YSBwYXJ0aWN1bGFyIGZsYWcgdXNpbmcgdGhlIFxcZmluZGV4KCkgZnVuY3Rpb24gd2hlblxuXAot ICAgIFNFVCBDQVNFIGlzIE9OIChmb3IgY2FzZSBzZW5zaXRpdmUgc2VhcmNoZXMpLiAgRmxhZyBz dHJpbmdzIGFyZSBvbmx5XG5cCi0gICAgYXZhaWxhYmxlIGZvciBLNSB0aWNrZXRzLlxuIik7Ci0g ICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0KLSAgICAgIGNhc2UgRk5f UEFUVEVSTjoKLSAgICAgICAgcHJpbnRmKCJcXGZwYXR0ZXJuKHMpXG5cCi0gIHMgPSBzdHJpbmdc blwKLSAgUmV0dXJucyBzdHJpbmc6IHMgd2l0aCBhbnkgdmFyaWFibGVzLCBldGMsIGV2YWx1YXRl ZCBpbiB0aGUgbm9ybWFsIG1hbm5lci5cbiIKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHBy aW50ZigiXAotICBGb3IgdXNlIHdpdGggSU5QVVQsIE1JTlBVVCwgYW5kIFJFSU5QVVQgdG8gZGVj bGFyZSB0aGF0IGEgc2VhcmNoIHRhcmdldCBpc1xuXAotICBhIHBhdHRlcm4gcmF0aGVyIHRoYW4g YSBsaXRlcmFsIHN0cmluZy5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9I RVgyTjoKLSAgICAgICAgcHJpbnRmKCJcXGZoZXgybihzKVxuXAotICBzID0gaGV4YWRlY2ltYWwg bnVtYmVyXG5cCi0gIFJldHVybnMgZGVjaW1hbCBlcXVpdmFsZW50LlxuIik7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgICBjYXNlIEZOX0hFWDJJUDoKLSAgICAgICAgcHJpbnRmKCJcXGZoZXgyaXAo cylcblwKLSAgcyA9IDgtZGlnaXQgaGV4YWRlY2ltYWwgbnVtYmVyXG5cCi0gIFJldHVybnMgdGhl IGVxdWl2YWxlbnQgZGVjaW1hbCBkb3R0ZWQgSVAgYWRkcmVzcy5cbiIpOwotICAgICAgICBicmVh azsKLQotICAgICAgY2FzZSBGTl9JUDJIRVg6Ci0gICAgICAgIHByaW50ZigiXFxmaXAyaGV4KHMp XG5cCi0gIHMgPSBkZWNpbWFsIGRvdHRlZCBJUCBhZGRyZXNzXG5cCi0gIFJldHVybnMgdGhlIGVx dWl2YWxlbnQgOC1kaWdpdCBoZXhhZGVjaW1hbCBudW1iZXIuXG4iKTsKLSAgICAgICAgYnJlYWs7 Ci0KLSAgICAgIGNhc2UgRk5fT0NUMk46Ci0gICAgICAgIHByaW50ZigiXFxmb2N0Mm4ocylcblwK LSAgcyA9IG9jdGFsIG51bWJlclxuXAotICBSZXR1cm5zIGRlY2ltYWwgZXF1aXZhbGVudC5cbiIp OwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9UT0I2NDoKLSAgICAgICAgcHJpbnRm KCJcXGI2NGVuY29kZShzKVxuXAotICBzID0gc3RyaW5nIGNvbnRhaW5pbmcgbm8gTlVMIGJ5dGVz XG5cCi0gIFJldHVybnMgQmFzZS02NCBlbmNvZGluZyBvZiBzdHJpbmcuXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fRk1CNjQ6Ci0gICAgICAgIHByaW50ZigiXFxiNjRkZWNv ZGUocylcblwKLSAgcyA9IHN0cmluZyBpbiBCYXNlLTY0IG5vdGF0aW9uXG5cCi0gIFJldHVybnMg dGhlIGRlY29kZWQgc3RyaW5nIG9yIGFuIGVycm9yIGNvZGUgaWYgcyBub3QgdmFsaWQuXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fUkFESVg6Ci0gICAgICAgIHByaW50Zigi XFxmcmFkaXgocyxuMSxuMilcblwKLSAgcyA9IG51bWJlciBpbiByYWRpeCBuMVxuXAotICBSZXR1 cm5zIHRoZSBudW1iZXIncyByZXByZXNlbnRhdGlvbiBpbiByYWRpeCBuMi5cbiIpOwotICAgICAg ICBicmVhazsKLQotICAgICAgY2FzZSBGTl9KT0lOOgotICAgICAgICBwcmludGYoIlxcZmpvaW4o JmFbLHNbLG4xWyxuMl1dXSlcblwKLSAgJmEgPSBhcnJheSBkZXNpZ25hdG9yLCBjYW4gaW5jbHVk ZSByYW5nZSBzcGVjaWZpZXIuXG5cCi0gIHMgID0gb3B0aW9uYWwgc2VwYXJhdG9yLlxuIik7Ci0g ICAgICAgIHByaW50ZigiXAotICBuMSA9IG5vbnplcm8gdG8gcHV0IGdyb3VwaW5nIGFyb3VuZCBl bGVtZW50cyB0aGF0IGNvbnRhaW4gc3BhY2VzO1xuXAotICAgICAgIHNlZSBcXGZ3b3JkKCkgZ3Jv dXBpbmcgbWFzayBmb3IgdmFsdWVzIG9mIG4uXG4iKTsKLSAgICAgICAgcHJpbnRmKCJcCi0gIG4y ID0gMCBvciBvbWl0dGVkIHRvIHB1dCBzcGFjZXMgYmV0d2VlbiBlbGVtZW50czsgbm9uemVybyB0 byBvbWl0IHRoZW0uXG4iKTsKLSAgICAgICAgcHJpbnRmKCJcCi0gIFJldHVybnMgdGhlIChzZWxl Y3RlZCkgZWxlbWVudHMgb2YgdGhlIGFycmF5IGpvaW5lZCB0byB0b2dldGhlcixcblwKLSAgc2Vw YXJhdGVkIGJ5IHRoZSBzZXBhcmF0b3IuXG4iKTsKLQlwcmludGYoIlxuXAotICBJZiBzIGlzIENT ViAobGl0ZXJhbGx5KSwgdGhhdCBtZWFucyB0aGUgYXJyYXkgaXMgdG8gYmUgdHJhbnNmb3JtZWQg aW50byBhXG5cCi0gIGNvbW1hLXNlcGFyYXRlZCBsaXN0LiAgTm8gb3RoZXIgYXJndW1lbnRzIGFy ZSBuZWVkZWQuICBJZiBzIGlzIFRTViwgdGhlblxuXAotICBhIHRhYi1zZXBhcmF0ZWQgbGlzdCBp cyBjcmVhdGVkLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX1NVQlNUOgot ICAgICAgICBwcmludGYoIlxcZnN1YnN0aXR1dGUoczEsczIsczMpXG5cCi0gIHMxID0gU291cmNl IHN0cmluZy5cblwKLSAgczIgPSBMaXN0IG9mIGNoYXJhY3RlcnMgdG8gYmUgdHJhbnNsYXRlZC5c blwKLSAgczMgPSBMaXN0IG9mIGNoYXJhY3RlcnMgdG8gdHJhbnNsYXRlIHRoZW0gdG8uXG4iKTsK LSAgICAgICAgcHJpbnRmKAotIiAgUmV0dXJuczogczEsIHdpdGggZWFjaCBjaGFyYWN0ZXIgdGhh dCBpcyBpbiBzMiByZXBsYWNlZCBieSB0aGVcblwKLSAgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIg aW4gczMuICBzMiBhbmQgczMgY2FuIGNvbnRhaW4gQVNDSUkgcmFuZ2VzLFxuXAotICBsaWtlIFth LXpdLiAgQW55IGNoYXJhY3RlcnMgaW4gczIgdGhhdCBkb24ndCBoYXZlIGNvcnJlc3BvbmRpbmdc blwKLSAgY2hhcmFjdGVycyBpbiBzMyAoYWZ0ZXIgcmFuZ2UgZXhwYW5zaW9uKSBhcmUgcmVtb3Zl ZCBmcm9tIHRoZSByZXN1bHQuXG5cCi0gIFRoaXMgZnVuY3Rpb24gd29ya3Mgb25seSB3aXRoIHNp bmdsZS1ieXRlIGNoYXJhY3Rlci1zZXRzXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZm5kZWYg Tk9TRVhQCi0gICAgICBjYXNlIEZOX1NFWFA6Ci0gICAgICAgIHByaW50ZigiXFxmc2V4cHJlc3Np b24oczEpXG5cCi0gIHMxID0gUy1FeHByZXNzaW9uLlxuIik7Ci0gICAgICAgIHByaW50ZigiICBS ZXR1cm5zOiBUaGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgczEuXG4iKTsKLSAgICAgICAgYnJlYWs7 Ci0KLSNlbmRpZiAvKiBOT1NFWFAgKi8KLQotICAgICAgY2FzZSBGTl9DTURTVEs6Ci0gICAgICAg IHByaW50ZigiXFxmY21kc3RhY2sobjEsbjIpXG5cCi0gIG4xID0gQ29tbWFuZC1zdGFjayBsZXZl bCwgMCB0byBcXHYoY21kbGV2ZWwpLCBkZWZhdWx0IFxcdihjbWRsZXZlbCkuXG5cCi0gIG4yID0g RnVuY3Rpb24gY29kZSwgMCBvciAxLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJuczpcbiIp OwotICAgICAgICBwcmludGYoIiAgbjIgPSAwOiBuYW1lIG9mIG9iamVjdCBhdCBzdGFjayBsZXZl bCBuMVxuXAotICBuMiA9IDE6IHR5cGUgb2Ygb2JqZWN0IGF0IHN0YWNrIGxldmVsIG4xOlxuXAot ICAgICAwID0gaW50ZXJhY3RpdmUgcHJvbXB0XG5cCi0gICAgIDEgPSBjb21tYW5kIGZpbGVcblwK LSAgICAgMiA9IG1hY3JvXG4iCi0gICAgICAgICAgICAgICApOwotICAgICAgICAgIGJyZWFrOwot Ci0jaWZkZWYgQ0tGTE9BVAotICAgICAgY2FzZSBGTl9ESUZEQVRFOgotICAgICAgICBwcmludGYo IlxcZmRpZmZkYXRlcyhkMSxkMilcblwKLSAgZDEgPSBmcmVlLWZvcm1hdCBkYXRlIGFuZC9vciB0 aW1lIChkZWZhdWx0ID0gTk9XKS5cblwKLSAgZDIgPSBkaXR0by5cbiIpOwotICAgICAgICBwcmlu dGYoIlJldHVybnM6XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIERpZmZlcmVuY2UgZXhwcmVzc2Vk IGFzIGRlbHRhIHRpbWU6XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIE5lZ2F0aXZlIGlmIGQyIGlz IGxhdGVyIHRoYW4gZDEsIG90aGVyd2lzZSBwb3NpdGl2ZS5cbiIpOwotICAgICAgICBicmVhazsK LSNlbmRpZiAvKiBDS0ZMT0FUICovCi0KLSAgICAgIGNhc2UgRk5fQ01QREFURToKLSAgICAgICAg cHJpbnRmKCJcXGZjbXBkYXRlcyhkMSxkMilcblwKLSAgZDEgPSBmcmVlLWZvcm1hdCBkYXRlIGFu ZC9vciB0aW1lIChkZWZhdWx0ID0gTk9XKS5cblwKLSAgZDIgPSBkaXR0by5cbiIpOwotICAgICAg ICBwcmludGYoIlJldHVybnM6XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIDAgaWYgZDEgaXMgZXF1 YWwgdG8gZDI7XG5cCi0gIDEgaWYgZDEgaXMgbGF0ZXIgdGhhbiBkMjtcblwKLSAtMSBpZiBkMSBp cyBlYXJsaWVyIHRoYW4gZDIuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5f VE9HTVQ6Ci0gICAgICAgIHByaW50ZigiXFxmdXRjZGF0ZShkMSlcblwKLSAgZDEgPSBmcmVlLWZv cm1hdCBkYXRlIGFuZC9vciB0aW1lIChkZWZhdWx0ID0gTk9XKS5cbiIpOwotICAgICAgICBwcmlu dGYoIlJldHVybnM6XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIERhdGUtdGltZSBjb252ZXJ0ZWQg dG8gVVRDIChHTVQpIHl5eXltbWRkIGhoOm1tOnNzLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0j aWZkZWYgVENQU09DS0VUCi0gICAgICBjYXNlIEZOX0hTVEFERDoKLSAgICAgICAgcHJpbnRmKCJc XGZhZGRyMm5hbWUocylcblwKLSAgcyA9IG51bWVyaWMgSVAgYWRkcmVzcy5cbiIpOwotICAgICAg ICBwcmludGYoIlJldHVybnM6XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIENvcnJlc3BvbmRpbmcg SVAgaG9zdG5hbWUgaWYgZm91bmQsIG90aGVyd2lzZSBudWxsLlxuIik7Ci0gICAgICAgIGJyZWFr OwotICAgICAgY2FzZSBGTl9IU1ROQU06Ci0gICAgICAgIHByaW50ZigiXFxmbmFtZTJhZGRyKHMp XG5cCi0gIHMgPSBJUCBob3N0IG5hbWUuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zOlxu Iik7Ci0gICAgICAgIHByaW50ZigiICBDb3JyZXNwb25kaW5nIG51bWVyaWMgSVAgYWRkcmVzcyBp ZiBmb3VuZCwgZWxzZSBudWxsLlxuIik7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLwotCi0gICAgICBjYXNlIEZOX0RFTFNFQzoKLSAgICAgICAgcHJpbnRmKCJcXGZkZWx0 YTJzZWNzKGR0KVxuXAotICBkdCA9IERlbHRhIHRpbWUsIGUuZy4gKzNkMTQ6Mjc6NTIuXG4iKTsK LSAgICAgICAgcHJpbnRmKCJSZXR1cm5zOlxuIik7Ci0gICAgICAgIHByaW50ZigiICBUaGUgY29y cmVzcG9uZGluZyBudW1iZXIgb2Ygc2Vjb25kcy5cbiIpOwotICAgICAgICBicmVhazsKLQotICAg ICAgY2FzZSBGTl9QQ19EVToKLSAgICAgICAgcHJpbnRmKCJcXGZkb3MydW5peHBhdGgocClcblwK LSAgcCA9IHN0cmluZywgRE9TIHBhdGhuYW1lLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJu czpcbiIpOwotICAgICAgICBwcmludGYoIiAgVGhlIGFyZ3VtZW50IGNvbnZlcnRlZCB0byBhIFVu aXggcGF0aG5hbWUuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fUENfVUQ6 Ci0gICAgICAgIHByaW50ZigiXFxmdW5peDJkb3NwYXRoKHApXG5cCi0gIHAgPSBzdHJpbmcsIFVu aXggcGF0aG5hbWUuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zOlxuIik7Ci0gICAgICAg IHByaW50ZigiICBUaGUgYXJndW1lbnQgY29udmVydGVkIHRvIGEgRE9TIHBhdGhuYW1lLlxuIik7 Ci0gICAgICAgIGJyZWFrOwotCi0jaWZkZWYgRk5fRVJSTVNHCi0gICAgICBjYXNlIEZOX0VSUk1T RzoKLSAgICAgICAgcHJpbnRmKCJcXGZlcnJzdHJpbmcobilcblwKLSAgbiA9IHBsYXRmb3JtLWRl cGVuZGVudCBudW1lcmljIGVycm9yIGNvZGUuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5z OlxuIik7Ci0gICAgICAgIHByaW50ZigiICBUaGUgY29ycmVzcG9uZGluZyBlcnJvciBzdHJpbmcu XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogRk5fRVJSTVNHICovCi0KLSAgICAgIGNh c2UgRk5fS1dWQUw6Ci0gICAgICAgIHByaW50ZigiXFxma2V5d29yZHZhbHVlKHMxWyxzMl0pXG5c Ci0gIHMxID0gc3RyaW5nIG9mIHRoZSBmb3JtIFwibmFtZT12YWx1ZVwiXG5cCi0gIHMyID0gb25l IG1vcmUgc2VwYXJhdG9yIGNoYXJhY3RlcnMgKGRlZmF1bHQgc2VwYXJhdG9yIGlzIFwiPVwiKVxu Iik7Ci0gICAgICAgIHByaW50ZigiICAgIEFzc2lnbnMgdGhlIHZhbHVlLCBpZiBhbnksIHRvIHRo ZSBuYW1lZCBtYWNybyBhbmQgc2V0c1xuIik7Ci0gICAgICAgIHByaW50ZigiICAgIHRoZSBcXHYo bGFzdGtleXdvcmR2YWx1ZSkgdG8gdGhlIG1hY3JvIG5hbWUuXG4iKTsKLSAgICAgICAgcHJpbnRm KCIgICAgSWYgbm8gdmFsdWUgaXMgZ2l2ZW4sIHRoZSBtYWNybyBpcyB1bmRlZmluZWQuXG4iKTsK LSAgICAgICAgcHJpbnRmKCJSZXR1cm5zOlxuIik7Ci0gICAgICAgIHByaW50ZigiIC0xIG9uIGVy cm9yXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIDAgaWYgbm8ga2V5d29yZCBvciB2YWx1ZSB3ZXJl IGZvdW5kXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIDEgaWYgYSBrZXl3b3JkIHdhcyBmb3VuZCBi dXQgbm8gdmFsdWVcbiIpOwotICAgICAgICBwcmludGYoIiAgMiBpZiBhIGtleXdvcmQgYW5kIGEg dmFsdWUgd2VyZSBmb3VuZFxuIik7Ci0gICAgICAgIHByaW50ZigiU3lub255bTogXFxrd3ZhbHVl KHMxWyxzMl0pXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgICBj YXNlIEZOX1NMRUVQOgotICAgICAgICBwcmludGYoIlxcZnNsZWVwKG4pXG5cCi0gIG4gPSBudW1i ZXIgb2Ygc2Vjb25kc1xuIik7Ci0gICAgICAgIHByaW50ZigiICAgIFBhdXNlcyBmb3IgdGhlIGdp dmVuIG51bWJlciBvZiBzZWNvbmRzLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJuczogdGhl IGVtcHR5IHN0cmluZy5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9NU0xF RVA6Ci0gICAgICAgIHByaW50ZigiXFxmbXNsZWVwKG4pXG5cCi0gIG4gPSBudW1iZXIgb2YgbWls bGlzZWNvbmRzXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICAgUGF1c2VzIGZvciB0aGUgZ2l2ZW4g bnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnM6IHRo ZSBlbXB0eSBzdHJpbmcuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotCi0jaWZkZWYgTlQKLSAgICAgIGNhc2UgRk5fU05BTUU6Ci0gICAgICAgIHByaW50ZigiXFxm c2hvcnRwYXRobmFtZShzKVxuXAotICBzID0gZmlsZSBvciBkaXJlY3RvcnkgbmFtZSBzdHJpbmdc biIpOwotICAgICAgICBwcmludGYoIiAgICBSZXR1cm5zIHRoZSBzaG9ydCBwYXRoIGZvcm0gb2Yg dGhlIGdpdmVuIGlucHV0LlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX0xO QU1FOgotICAgICAgICBwcmludGYoIlxcZmxvbmdwYXRobmFtZShzKVxuXAotICBzID0gZmlsZSBv ciBkaXJlY3RvcnkgbmFtZSBzdHJpbmdcbiIpOwotICAgICAgICBwcmludGYoIiAgICBSZXR1cm5z IHRoZSBsb25nIHBhdGggZm9ybSBvZiB0aGUgZ2l2ZW4gaW5wdXQuXG4iKTsKLSAgICAgICAgYnJl YWs7Ci0jZWxzZQotICAgICAgY2FzZSBGTl9TTkFNRToKLSAgICAgICAgcHJpbnRmKCJcXGZzaG9y dHBhdGhuYW1lKHMpXG5cCi0gICAgU3lub255bSBmb3IgXGZwYXRobmFtZSgpXG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fTE5BTUU6Ci0gICAgICAgIHByaW50ZigiXFxmbG9u Z3BhdGhuYW1lKHMpXG5cCi0gICAgU3lub255bSBmb3IgXGZwYXRobmFtZSgpXG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0jZW5kaWYgLyogTlQgKi8KLQotICAgICAgY2FzZSBGTl9FTUFJTDoKLSAgICAg ICAgcHJpbnRmKCJcXGZlbWFpbGFkZHJlc3MocylcblwKLSAgcyA9IEZyb206IG9yIFNlbmRlcjog aGVhZGVyIGZyb20gYW4gUkZDMjgyMi1mb3JtYXQgZW1haWwgbWVzc2FnZVxuIik7Ci0gICAgICAg IHByaW50ZigiICAgIEV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBlbWFpbCBhZGRyZXNzLlxuIik7 Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX1BJQ1RVUkU6Ci0gICAgICAgIHByaW50 ZigiXFxmcGljdHVyZWluZm8oc1ssJmFdKVxuXAotICBzICA9IEZpbGUgc3BlY2lmaWNhdGlvbiBv ZiBhIEpQRyBvciBHSUYgcGljdHVyZSBmaWxlLlxuXAotICAmYSA9IE9wdGlvbmFsIGFycmF5IG5h bWUuXG5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKLSAgMCBpZiBm aWxlIG5vdCBmb3VuZCBvciBub3QgcmVjb2duaXplZDtcblwKLSAgMSBpZiBvcmllbnRhdGlvbiBp cyBsYW5kc2NhcGU7XG5cCi0gIDIgaWYgb3JpZW50YXRpb24gaXMgcG9ydHJhaXQuXG5cbiIpOyAK LQlwcmludGYoIiAgSWYgYW4gYXJyYXkgbmFtZSBpcyBpbmNsdWRlZCwgZWxlbWVudCAxIGlzIGZp bGxlZCBcCi1pbiB3aXRoIHRoZSBpbWFnZSB3aWR0aFxuXAotICBpbiBwaXhlbHMsIGFuZCBlbGVt ZW50IDIgdGhlIGltYWdlIGhlaWdodC5cbiIpOwotCWJyZWFrOwotCi0gICAgICBjYXNlIEZOX1BJ RDoKLSAgICAgICAgcHJpbnRmKCJcXGZnZXRwaWRpbmZvKG4xKVxuXAotIG4xID0gTnVtZXJpYyBw cm9jZXNzIElEXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCi0gLTEg b24gZmFpbHVyZSB0byBnZXQgaW5mb3JtYXRpb247XG5cCi0gIDEgaWYgbjEgaXMgdGhlIElEIG9m IGFuIGFjdGl2ZSBwcm9jZXNzO1xuXAotICAwIGlmIHRoZSBwcm9jZXNzIGRvZXMgbm90IGV4aXN0 LlxuIik7IAotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9GVU5DOgotCXByaW50Zigi XFxmZnVuY3Rpb24oczEpXG5cCi0gczEgPSBuYW1lIG9mIGZ1bmN0aW9uLlxuIik7Ci0gICAgICAg IHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAotICAxIGlmIHMxIGlzIHRoZSBuYW1lIG9mIGFu IGF2YWlsYWJsZSBidWlsdC1pbiBmdW5jdGlvbjtcblwKLSAgMCBvdGhlcndpc2UuXG4iKTsgCi0g ICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX1JFQ1VSU0U6Ci0JcHJpbnRmKCJcXGZyZWN1 cnNlKHMxKVxuXAotIHMxID0gbmFtZSBvZiBcXCZ4IG9yIFxcJnhbXSB0eXBlIHZhcmlhYmxlXG4i KTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyB0aGUg dmFyaWFibGUgcmVjdXJzaXZlbHkuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2Ug Rk5fU1FVRUVaRToKLSAgICAgICAgcHJpbnRmKCJcXGZzcXVlZXplKHMpXG5cCi0gIHMgPSBzdHJp bmdcblwKLSAgICBSZXR1cm5zIHN0cmluZyB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRl c3BhY2UgcmVtb3ZlZCwgVGFic1xuXAotICAgIGNvbnZlcnRlZCB0byBTcGFjZXMsIGFuZCBtdWx0 aXBsZSBzcGFjZXMgY29udmVydGVkIHRvIHNpbmdsZSBzcGFjZXMuXG4iKTsKLSAgICAgICAgYnJl YWs7Ci0KLSNpZm5kZWYgTk9DU0VUUwotICAgICAgY2FzZSBGTl9YTEFURToKLSAgICAgICAgcHJp bnRmKCJcXGZjdnRjc2V0KHMsY3NldDEsY3NldDIpXG5cCi0gIHMgPSBzdHJpbmdcblwKLSAgICBS ZXR1cm5zIHN0cmluZyBjb252ZXJ0ZWQgZnJvbSBjaGFyYWN0ZXIgc2V0IGNzZXQxIHRvIGNzZXQy LCB3aGVyZSBjc2V0MVxuXAotICAgIGFuZCBjc2V0MiBhcmUgbmFtZXMgb2YgRmlsZSBDaGFyYWN0 ZXItU2V0cyBcCi0oJ3NldCBmaWxlIGNoYXIgPycgZm9yIGEgbGlzdCkuXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0jZW5kaWYJLyogTk9DU0VUUyAqLwotCi0gICAgICBjYXNlIEZOX1VOUENUOgotICAg ICAgICBwcmludGYoIlxcZmRlY29kZWhleChzMVssczJdKVxuXAotICBzMSwgczIgPSBzdHJpbmdz XG5cCi0gICAgRGVjb2RlcyBhIHN0cmluZyBzMSB0aGF0IGNvbnRhaW5zIHByZWZpeGVkIGhleCBi eXRlcy4gIHMyIGlzIHRoZSBwcmVmaXg7XG5cCi0gICAgdGhlIGRlZmF1bHQgaXMgJSUlJS4gIFlv dSBjYW4gc3BlY2lmeSBhbnkgb3RoZXIgcHJlZml4IG9uZSBvciB0d28gYnl0ZXNcblwKLSAgICBs b25nLiAgSWYgdGhlIHByZWZpeCBjb250YWlucyBsZXR0ZXJzIChzdWNoIGFzIDB4KSwgY2FzZSBp cyBpbmdvcmVkLlxuXAotICAgIFJldHVybnMgc3RyaW5nIHMxIHdpdGggaGV4IGVzY2FwZXMgcmVw bGFjZWQgYnkgdGhlIGJ5dGVzIHRoZXkgXAotcmVwcmVzZW50LlxuIik7Ci0gICAgICAgIGJyZWFr OwotCi0gICAgICBjYXNlIEZOX1NUUklOR1Q6Ci0gICAgICAgIHByaW50ZigiXFxmc3RyaW5ndHlw ZShzKVxuXAotICBzID0gc3RyaW5nXG5cCi0gICAgUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRp bmcgdGhlIHR5cGUgb2YgaXRzIHN0cmluZyBhcmd1bWVudCBzMTpcblwKLSAgICA3QklULCA4QklU LCBVVEY4LCBURVhULCBvciBCSU5BUlkuICBURVhUIG1lYW5zIHNvbWUga2luZCBvZiB0ZXh0XG5c Ci0gICAgb3RoZXIgdGhhbiA3QklULCA4QklULCBvciBVVEY4ICh0aGlzIHByb2JhYmx5IHdpbGwg bmV2ZXIgYXBwZWFyKS5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9TVFJD TVA6Ci0gICAgICAgIHByaW50ZigiXFxmc3RyY21wKHMxLHMyWyxjYXNlWyxzdGFydFssbGVuZ3Ro XV1dKVxuXAotICBzMSwgczIgPSBzdHJpbmdzXG5cCi0gIGNhc2UsIHN0YXJ0LCBsZW5ndGggPSBu dW1iZXJzIG9yIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMuXG5cCi0gICAgY2FzZSA9IDAgW2RlZmF1 bHRdIG1lYW5zIHRvIGRvIGEgY2FzZS1pbmRlcGVuZGVudCBjb21wYXJpc29uO1xuXAotICAgIG5v bnplcm8gY2FzZSByZXF1ZXN0cyBhIGNhc2Utc2Vuc2l0aXZlIGNvbXBhcmlzb24uXG5cCi0gICAg VGhlIG9wdGlvbmFsIHN0YXJ0IGFuZCBsZW5ndGggYXJndW1lbnRzIGFwcGx5IHRvIGJvdGggczEg YW5kIHMyXG5cCi0gICAgYW5kIGFsbG93IHNwZWNpZmljYXRpb24gb2Ygc3Vic3RyaW5ncyBpZiBp dCBpcyBub3QgZGVzaXJlZCB0byBjb21wYXJlXG5cCi0gICAgdGhlIHdob2xlIHN0cmluZ3MuICBS ZXN1bHRzIGZvciBub24tQVNDSUkgc3RyaW5ncyBhcmUgaW1wbGVudGF0aW9uLVxuXAotICAgIGFu ZCBsb2NhbGUtZGVwZW5kZW50LlxuXAotICBSZXR1cm5zIGEgbnVtYmVyOlxuXAotICAgIC0xOiBz MSBpcyBsZXhpY2FsbHkgbGVzcyB0aGFuIHMyO1xuXAotICAgICAwOiBzMSBhbmQgczIgYXJlIGxl eGljYWxseSBlcXVhbDtcblwKLSAgICAgMjogczEgaXMgbGV4aWNhbGx5IGdyZWF0ZXIgdGhhbiBz Mi5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRm KCJTb3JyeSwgaGVscCBub3QgYXZhaWxhYmxlIGZvciBcIiVzXCJcbiIsY21kYnVmKTsKLSAgICB9 Ci0gICBwcmludGYoIlxuIik7Ci0gICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogTk9TUEwgKi8K LQotI2lmZGVmIE9TMgotI2lmbmRlZiBOT0tWRVJCUwotCi0vKiAgRCBPIEggSyBWIEUgUiBCICAt LSAgR2l2ZSBoZWxwIGZvciBhIEt2ZXJiICAqLwotCi1pbnQKLWRvaGt2ZXJiKHh4KSBpbnQgeHg7 IHsKLSAgICBpbnQgeCxpLGZvdW5kLGJ1dHRvbixldmVudDsKLQotICAgIGlmICh4eCA9PSAtMykg ewotICAgICAgICBwcmludGYoIlxuIFR5cGUgU0hPVyBLVkVSQlMgdG8gc2VlIGEgbGlzdCBvZiBh dmFpbGFibGUgS3ZlcmJzLlxuIgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcHJpbnRmKAot IiBUeXBlIEhFTFAgS1ZFUkIgPG5hbWU+IHRvIHNlZSB0aGUgY3VycmVudCBkZWZpbml0aW9uIG9m IGEgZ2l2ZW4gS3ZlcmIuXG5cbiIKLSAgICAgICAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuKC05 KTsKLSAgICB9Ci0gICAgaWYgKHh4IDwgMCkgcmV0dXJuKHh4KTsKLSAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKLSAgICBzd2l0Y2ggKCB4eCApIHsKLSAgICAgICAgLyogREVD IFZUIGtleWJvYXJkIGtleSBkZWZpbml0aW9ucyAqLwotCi0gICAgY2FzZSAgS19DT01QT1NFIDog ICAgICAgICAgICAgICAgICAgLyogQ29tcG9zZSBrZXkgKi8KLSAgICAgICAgcHJpbnRmKCJcXEtj b21wb3NlICAgICAgICAgICBDb21wb3NlIGFuIGFjY2VudGVkIGNoYXJhY3RlclxuIik7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQ19VTkkxNiA6ICAgICAgICAgICAgICAgICAgIC8qIFVD UzIga2V5ICovCi0gICAgICAgIHByaW50ZigiXFxLdWNzMiAgICAgICAgICAgICAgRW50ZXIgYSBV bmljb2RlIGNoYXJhY3RlclxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0vKiBERUMgYXJyb3cga2V5 cyAqLwotCi0gICAgY2FzZSAgS19VUEFSUiAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIFVw IEFycm93IGtleSAqLwotICAgICAgICBwcmludGYoIlxcS3VwYXJyICAgICAgICAgVHJhbnNtaXQg VGVybWluYWwgVXAgQXJyb3cgc2VxdWVuY2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl ICBLX0ROQVJSICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMgRG93biBBcnJvdyBrZXkgKi8K LSAgICAgICAgcHJpbnRmKCJcXEtkbmFyciAgICAgICAgIFRyYW5zbWl0IFRlcm1pbmFsIERvd24g QXJyb3cgc2VxdWVuY2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICBLX1JUQVJSICAg ICA6ICAgICAgICAgICAgICAgICAvKiBERUMgUmlnaHQgQXJyb3cga2V5ICovCi0gICAgICAgIHBy aW50ZigiXFxLcnRhcnIgICAgICAgICBUcmFuc21pdCBUZXJtaW5hbCBSaWdodCBBcnJvdyBzZXF1 ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfTEZBUlIgICAgIDogICAgICAg ICAgICAgICAgIC8qIERFQyBMZWZ0IEFycm93IGtleSAqLwotICAgICAgICBwcmludGYoIlxcS2xm YXJyICAgICAgICAgVHJhbnNtaXQgVGVybWluYWwgTGVmdCBBcnJvdyBzZXF1ZW5jZVxuIik7Ci0g ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSAgS19QRjEgICAgICAgOiAgICAgICAgICAgICAgICAg LyogREVDIFBGMSBrZXkgKi8KLSAgICAgICAgcHJpbnRmKCJcXEtwZjEsXFxLZ29sZCAgICBUcmFu c21pdCBERUMgUEYxIHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19Q RjIgICAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIFBGMiBrZXkgKi8KLSAgICAgICAgcHJp bnRmKCJcXEtwZjIgICAgICAgICAgIFRyYW5zbWl0IERFQyBQRjIgc2VxdWVuY2VcbiIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlICBLX1BGMyAgICAgICA6ICAgICAgICAgICAgICAgICAvKiBE RUMgUEYzIGtleSAqLwotICAgICAgICBwcmludGYoIlxcS3BmMyAgICAgICAgICAgVHJhbnNtaXQg REVDIFBGMyBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfUEY0ICAg ICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBQRjQga2V5ICovCi0gICAgICAgIHByaW50Zigi XFxLcGY0ICAgICAgICAgICBUcmFuc21pdCBERUMgUEY0IHNlcXVlbmNlXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0KLSAgICBjYXNlICBLX0tQMCAgICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMg S2V5cGFkIDAgKi8KLSAgICAgICAgcHJpbnRmKCJcXEtrcDAgICAgICAgICAgIFRyYW5zbWl0IERF QyBLZXlwYWQtMCBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfS1Ax ICAgICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBLZXlwYWQgMSAqLwotICAgICAgICBwcmlu dGYoIlxcS2twMSAgICAgICAgICAgVHJhbnNtaXQgREVDIEtleXBhZC0xIHNlcXVlbmNlXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19LUDIgICAgICAgOiAgICAgICAgICAgICAgICAg LyogZXRjIC4uLiB0aHJvdWdoIDkgKi8KLSAgICAgICAgcHJpbnRmKCJcXEtrcDIgICAgICAgICAg IFRyYW5zbWl0IERFQyBLZXlwYWQtMiBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAg IGNhc2UgIEtfS1AzICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtrcDMgICAgICAgICAgIFRy YW5zbWl0IERFQyBLZXlwYWQtMyBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfS1A0ICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtrcDQgICAgICAgICAgIFRyYW5z bWl0IERFQyBLZXlwYWQtNCBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug IEtfS1A1ICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtrcDUgICAgICAgICAgIFRyYW5zbWl0 IERFQyBLZXlwYWQtNSBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtf S1A2ICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtrcDYgICAgICAgICAgIFRyYW5zbWl0IERF QyBLZXlwYWQtNiBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfS1A3 ICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtrcDcgICAgICAgICAgIFRyYW5zbWl0IERFQyBL ZXlwYWQtNyBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfS1A4ICAg ICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtrcDggICAgICAgICAgIFRyYW5zbWl0IERFQyBLZXlw YWQtOCBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfS1A5ICAgICAg IDoKLSAgICAgICAgcHJpbnRmKCJcXEtrcDkgICAgICAgICAgIFRyYW5zbWl0IERFQyBLZXlwYWQt OSBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfS1BDT01BICAgIDog ICAgICAgICAgICAgICAgIC8qIERFQyBrZXlwYWQgY29tbWEgKi8KLSAgICAgICAgcHJpbnRmKCJc XEtrcGNvbWEgICAgICAgIFRyYW5zbWl0IERFQyBLZXlwYWQtQ29tbWEgc2VxdWVuY2VcbiIpOwot ICAgICAgICBicmVhazsKLSAgICBjYXNlICBLX0tQTUlOVVMgICA6ICAgICAgICAgICAgICAgICAv KiBERUMga2V5cGFkIG1pbnVzICovCi0gICAgICAgIHByaW50ZigiXFxLa3BtaW51cyAgICAgICBU cmFuc21pdCBERUMgS2V5cGFkLU1pbnVzIHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19LUERPVCAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIGtleXBhZCBwZXJp b2QgKi8KLSAgICAgICAgcHJpbnRmKCJcXEtrcGRvdCAgICAgICAgIFRyYW5zbWl0IERFQyBLZXlw YWQtUGVyaW9kIHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19LUEVO VEVSICAgOiAgICAgICAgICAgICAgICAgLyogREVDIGtleXBhZCBlbnRlciAqLwotICAgICAgICBw cmludGYoIlxcS2twZW50ZXIgICAgICAgVHJhbnNtaXQgREVDIEtleXBhZC1FbnRlciBzZXF1ZW5j ZVxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0vKiBERUMgVG9wLVJhbmsgRiBrZXlzICovCi0KLSAg ICBjYXNlICBLX0RFQ0YxICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMgRjEga2V5ICovCi0g ICAgICAgIHByaW50ZigiXFxLZGVjZjEgICAgICAgICBUcmFuc21pdCBERUMgRjEgc2VxdWVuY2Ug Zm9yIFBDIGtleWJvYXJkXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ERUNGMiAg ICAgOiAgICAgICAgICAgICAgICAgLyogREVDIEYyIGtleSAqLwotICAgICAgICBwcmludGYoIlxc S2RlY2YyICAgICAgICAgVHJhbnNtaXQgREVDIEYyIHNlcXVlbmNlIGZvciBQQyBrZXlib2FyZFxu Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREVDRjMgICAgIDogICAgICAgICAgICAg ICAgIC8qIERFQyBGMyBrZXkgKi8KLSAgICAgICAgcHJpbnRmKCJcXEtkZWNmMyAgICAgICAgIFRy YW5zbWl0IERFQyBGMyBzZXF1ZW5jZSBmb3IgUEMga2V5Ym9hcmRcbiIpOwotICAgICAgICBicmVh azsKLSAgICBjYXNlICBLX0RFQ0Y0ICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMgRjQga2V5 ICovCi0gICAgICAgIHByaW50ZigiXFxLZGVjZjQgICAgICAgICBUcmFuc21pdCBERUMgRjQgc2Vx dWVuY2UgZm9yIFBDIGtleWJvYXJkXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19E RUNGNSAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIEY1IGtleSAqLwotICAgICAgICBwcmlu dGYoIlxcS2RlY2Y1ICAgICAgICAgVHJhbnNtaXQgREVDIEY1IHNlcXVlbmNlIGZvciBQQyBrZXli b2FyZFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREVDSE9NRTogICAgICAgICAg ICAgICAgICAgIC8qIERFQyBIT01FIGtleSAqLwotICAgICAgIHByaW50ZigiXFxLZGVjaG9tZSAg ICAgICBUcmFuc21pdCBERUMgSE9NRSBzZXF1ZW5jZSBmb3IgUEMga2V5Ym9hcmRcbiIpOwotICAg ICAgIGJyZWFrOwotCi0gICAgY2FzZSAgS19ERUNGNiAgICAgOiAgICAgICAgICAgICAgICAgLyog REVDIEY2IGtleSAqLwotICAgICAgICBwcmludGYoIlxcS2RlY2Y2ICAgICAgICAgVHJhbnNtaXQg REVDIEY2IHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ERUNGNyAg ICAgOiAgICAgICAgICAgICAgICAgLyogZXRjLCB0aHJvdWdoIEYyMCAqLwotICAgICAgICBwcmlu dGYoIlxcS2RlY2Y3ICAgICAgICAgVHJhbnNtaXQgREVDIEY3IHNlcXVlbmNlXG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ERUNGOCAgICAgOgotICAgICAgICBwcmludGYoIlxcS2Rl Y2Y4ICAgICAgICAgVHJhbnNtaXQgREVDIEY4IHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19ERUNGOSAgICAgOgotICAgICAgICBwcmludGYoIlxcS2RlY2Y5ICAgICAg ICAgVHJhbnNtaXQgREVDIEY5IHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAgS19ERUNGMTAgICAgOgotICAgICAgICBwcmludGYoIlxcS2RlY2YxMCAgICAgICAgVHJhbnNt aXQgREVDIEYxMCBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREVD RjExICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtkZWNmMTEgICAgICAgIFRyYW5zbWl0IERFQyBG MTEgc2VxdWVuY2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICBLX0RFQ0YxMiAgICA6 Ci0gICAgICAgIHByaW50ZigiXFxLZGVjZjEyICAgICAgICBUcmFuc21pdCBERUMgRjEyIHNlcXVl bmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ERUNGMTMgICAgOgotICAgICAg ICBwcmludGYoIlxcS2RlY2YxMyAgICAgICAgVHJhbnNtaXQgREVDIEYxMyBzZXF1ZW5jZVxuIik7 Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREVDRjE0ICAgIDoKLSAgICAgICAgcHJpbnRm KCJcXEtkZWNmMTQgICAgICAgIFRyYW5zbWl0IERFQyBGMTQgc2VxdWVuY2VcbiIpOwotICAgICAg ICBicmVhazsKLSAgICBjYXNlICBLX0RFQ0hFTFAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMg SGVscCBrZXkgKi8KLSAgICAgICAgcHJpbnRmKCJcXEtkZWNmMTUsXFxLZGVjaGVscCAgVHJhbnNt aXQgREVDIEhFTFAgc2VxdWVuY2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICBLX0RF Q0RPICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMgRG8ga2V5ICovCi0gICAgICAgIHByaW50 ZigiXFxLZGVjZjE2LFxcS2RlY2RvICAgIFRyYW5zbWl0IERFQyBETyBzZXF1ZW5jZVxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREVDRjE3ICAgIDoKLSAgICAgICAgcHJpbnRmKCJc XEtkZWNmMTcgICAgICAgIFRyYW5zbWl0IERFQyBGMTcgc2VxdWVuY2VcbiIpOwotICAgICAgICBi cmVhazsKLSAgICBjYXNlICBLX0RFQ0YxOCAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLZGVjZjE4 ICAgICAgICBUcmFuc21pdCBERUMgRjE4IHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19ERUNGMTkgICAgOgotICAgICAgICBwcmludGYoIlxcS2RlY2YxOSAgICAgICAg VHJhbnNtaXQgREVDIEYxOSBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug IEtfREVDRjIwICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtkZWNmMjAgICAgICAgIFRyYW5zbWl0 IERFQyBGMjAgc2VxdWVuY2VcbiIpOwotICAgICAgICBicmVhazsKLQotLyogREVDIGVkaXRpbmcg a2V5cyAqLwotCi0gICAgY2FzZSAgS19ERUNGSU5EICAgOiAgICAgICAgICAgICAgICAgLyogREVD IEZpbmQga2V5ICovCi0gICAgICAgIHByaW50ZigiXFxLZGVjZmluZCAgICAgICBUcmFuc21pdCBE RUMgRklORCBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREVDSU5T RVJUIDogICAgICAgICAgICAgICAgIC8qIERFQyBJbnNlcnQga2V5ICovCi0gICAgICAgIHByaW50 ZigiXFxLZGVjaW5zZXJ0ICAgICBUcmFuc21pdCBERUMgSU5TRVJUIEhFUkUgc2VxdWVuY2VcbiIp OwotICAgICAgICBicmVhazsKLSAgICBjYXNlICBLX0RFQ1JFTU9WRSA6ICAgICAgICAgICAgICAg ICAvKiBERUMgUmVtb3ZlIGtleSAqLwotICAgICAgICBwcmludGYoIlxcS2RlY3JlbW92ZSAgICAg VHJhbnNtaXQgREVDIFJFTU9WRSBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfREVDU0VMRUNUIDogICAgICAgICAgICAgICAgIC8qIERFQyBTZWxlY3Qga2V5ICovCi0g ICAgICAgIHByaW50ZigiXFxLZGVjZnNlbGVjdCAgICBUcmFuc21pdCBERUMgU0VMRUNUIHNlcXVl bmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ERUNQUkVWICAgOiAgICAgICAg ICAgICAgICAgLyogREVDIFByZXZpb3VzIFNjcmVlbiBrZXkgKi8KLSAgICAgICAgcHJpbnRmKCJc XEtkZWNwcmV2ICAgICAgIFRyYW5zbWl0IERFQyBQUkVWIFNDUkVFTiBzZXF1ZW5jZVxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREVDTkVYVCAgIDogICAgICAgICAgICAgICAgIC8q IERFQyBOZXh0IFNjcmVlbiBrZXkgKi8KLSAgICAgICAgcHJpbnRmKCJcXEtkZWNuZXh0ICAgICAg IFRyYW5zbWl0IERFQyBORVhUIFNDUkVFTiBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwot Ci0vKiBERUMgVXNlci1EZWZpbmVkIEtleXMgKi8KLQotICAgIGNhc2UgIEtfVURLRjEgICAgIDog ICAgICAgICAgICAgICAgIC8qIEYxIC0gRjUgYXJlIFhURVJNIGV4dGVuc2lvbnMgKi8KLSAgICAg IHByaW50ZigiXFxLdWRrZjEgICAgICAgICBUcmFuc21pdCBYVEVSTSBGMSBVc2VyIERlZmluZWQg S2V5IHNlcXVlbmNlXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVURLRjIgICAgIDoK LSAgICAgIHByaW50ZigiXFxLdWRrZjIgICAgICAgICBUcmFuc21pdCBYVEVSTSBGMiBVc2VyIERl ZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVURLRjMg ICAgIDoKLSAgICAgIHByaW50ZigiXFxLdWRrZjMgICAgICAgICBUcmFuc21pdCBYVEVSTSBGMyBV c2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtf VURLRjQgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdWRrZjQgICAgICAgICBUcmFuc21pdCBYVEVS TSBGNCBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfVURLRjUgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdWRrZjUgICAgICAgICBUcmFuc21p dCBYVEVSTSBGNSBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKLSAgICAgIGJyZWFrOwot ICAgIGNhc2UgIEtfVURLRjYgICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBVc2VyIERlZmlu ZWQgS2V5IEY2ICovCi0gICAgICBwcmludGYoIlxcS3Vka2Y2ICAgICAgICAgVHJhbnNtaXQgREVD IEY2IFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAgS19VREtGNyAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIFVzZXIgRGVmaW5lZCBLZXkg RjcgKi8KLSAgICAgIHByaW50ZigiXFxLdWRrZjcgICAgICAgICBUcmFuc21pdCBERUMgRjcgVXNl ciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1VE S0Y4ICAgICA6ICAgICAgICAgICAgICAgICAvKiBldGMgLi4uIHRocm91Z2ggRjIwICovCi0gICAg ICBwcmludGYoIlxcS3Vka2Y4ICAgICAgICAgVHJhbnNtaXQgREVDIEY4IFVzZXIgRGVmaW5lZCBL ZXkgc2VxdWVuY2VcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19VREtGOSAgICAgOgot ICAgICAgcHJpbnRmKCJcXEt1ZGtmOSAgICAgICAgIFRyYW5zbWl0IERFQyBGOSBVc2VyIERlZmlu ZWQgS2V5IHNlcXVlbmNlXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVURLRjEwICAg IDoKLSAgICAgIHByaW50ZigiXFxLdWRrZjEwICAgICAgICBUcmFuc21pdCBERUMgRjEwIFVzZXIg RGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19VREtG MTEgICAgOgotICAgICAgcHJpbnRmKCJcXEt1ZGtmMTEgICAgICAgIFRyYW5zbWl0IERFQyBGMTEg VXNlciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBL X1VES0YxMiAgICA6Ci0gICAgICBwcmludGYoIlxcS3Vka2YxMiAgICAgICAgVHJhbnNtaXQgREVD IEYxMiBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfVURLRjEzICAgIDoKLSAgICAgIHByaW50ZigiXFxLdWRrZjEzICAgICAgICBUcmFuc21p dCBERUMgRjEzIFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19VREtGMTQgICAgOgotICAgICAgcHJpbnRmKCJcXEt1ZGtmMTQgICAgICAgIFRy YW5zbWl0IERFQyBGMTQgVXNlciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX1VES0hFTFAgICA6Ci0gICAgICBwcmludGYoCi0gICAgICAiXFxLdWRr aGVscCxcXEt1ZGtmMTUgIFRyYW5zbWl0IERFQyBIRUxQIFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVu Y2VcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19VREtETyAgICAgOgotICAgICAgcHJp bnRmKAotICAgICAgIlxcS3Vka2RvLFxcS3Vka2YxNiAgICBUcmFuc21pdCBERUMgRE8gVXNlciBE ZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1VES0Yx NyAgICA6Ci0gICAgICBwcmludGYoIlxcS3Vka2YxNyAgICAgICAgVHJhbnNtaXQgREVDIEYxNyBV c2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtf VURLRjE4ICAgIDoKLSAgICAgIHByaW50ZigiXFxLdWRrZjE4ICAgICAgICBUcmFuc21pdCBERUMg RjE4IFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAgS19VREtGMTkgICAgOgotICAgICAgcHJpbnRmKCJcXEt1ZGtmMTkgICAgICAgIFRyYW5zbWl0 IERFQyBGMTkgVXNlciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7Ci0gICAgICBicmVhazsKLSAg ICBjYXNlICBLX1VES0YyMCAgICA6Ci0gICAgICBwcmludGYoIlxcS3Vka2YyMCAgICAgICAgVHJh bnNtaXQgREVDIEYyMCBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKLSAgICAgIGJyZWFr OwotCi0vKiBFbWFjcyBLZXlzICovCi0gICAgY2FzZSAgS19FTUFDU19PVkVSOgotICAgICAgcHJp bnRmKAotICAgICAiXFxLZW1hY3Nfb3ZlcndyaXRlICBUcmFuc21pdCBFTUFDUyBPdmVyd3JpdGUg dG9nZ2xlIGNvbW1hbmQgc2VxdWVuY2VcbiIpOwotICAgICAgYnJlYWs7Ci0KLS8qIEtlcm1pdCBz Y3JlZW4tc2Nyb2xsaW5nIGtleXMgKi8KLQotICAgIGNhc2UgIEtfRE5PTkUgICAgIDogICAgICAg ICAgICAgICAgIC8qIFNjcmVlbiByb2xsYmFjazogZG93biBvbmUgbGluZSAqLwotICAgICAgcHJp bnRmKCJcXEtkbm9uZSAgICAgICAgIFNjcmVlbiByb2xsYmFjazogZG93biBvbmUgbGluZVxuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0ROU0NOICAgICA6ICAgICAgICAgICAgICAgICAv KiBTY3JlZW4gcm9sbGJhY2s6IGRvd24gb25lIHNjcmVlbiAqLwotICAgICAgcHJpbnRmKCJcXEtk bnNjbiAgICAgICAgIFNjcmVlbiByb2xsYmFjazogZG93biBvbmUgc2NyZWVuXG4iKTsKLSAgICAg IGJyZWFrOwotICAgIGNhc2UgIEtfVVBPTkUgICAgIDogICAgICAgICAgICAgICAgIC8qIFNjcmVl biByb2xsYmFjazogVXAgb25lIGxpbmUgKi8KLSAgICAgIHByaW50ZigiXFxLdXBvbmUgICAgICAg ICBTY3JlZW4gcm9sbGJhY2s6IHVwIG9uZSBsaW5lXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfVVBTQ04gICAgIDogICAgICAgICAgICAgICAgIC8qIFNjcmVlbiByb2xsYmFjazogVXAg b25lIHNjcmVlbiAqLwotICAgICAgcHJpbnRmKCJcXEt1cHNjbiAgICAgICAgIFNjcmVlbiByb2xs YmFjazogdXAgb25lIHNjcmVlblxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0VORFND TiAgICA6ICAgICAgICAgICAgICAgICAvKiBTY3JlZW4gcm9sbGJhY2s6IGxhdGVzdCBzY3JlZW4g Ki8KLSAgICAgIHByaW50ZigiXFxLZW5kc2NuICAgICAgICBTY3JlZW4gcm9sbGJhY2s6IGxhdGVz dCBzY3JlZW5cbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19IT01TQ04gICAgOiAgICAg ICAgICAgICAgICAgLyogU2NyZWVuIHJvbGxiYWNrOiBvbGRlc3Qgc2NyZWVuICovCi0gICAgICBw cmludGYoIlxcS2hvbXNjbiAgICAgICAgU2NyZWVuIHJvbGxiYWNrOiBvbGRlc3Qgc2NyZWVuXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfR09fQk9PSyAgIDogICAgICAgICAvKiBTY3Jv bGwgdG8gYm9va21hcmsgKi8KLSAgICAgIHByaW50ZigiXFxLZ29ib29rICAgICAgICBTY3JlZW4g cm9sbGJhY2s6IGdvIHRvIGJvb2ttYXJrXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtf R09UTyAgICAgIDogICAgICAgICAvKiBTY3JvbGwgdG8gbGluZSBudW1iZXIgKi8KLSAgICAgIHBy aW50ZigiXFxLZ290byAgICAgICAgICBTY3JlZW4gcm9sbGJhY2s6IGdvIHRvIGxpbmUgbnVtYmVy XG4iKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSAgS19MRk9ORSAgICAgOiAgICAgICAgICAg ICAgICAgLyogSG9yaXpvbnRhbCBTY3JvbGw6IExlZnQgb25lIGNlbGwgKi8KLSAgICAgIHByaW50 ZigiXFxLbGZvbmUgICAgICAgICBIb3Jpem9udGFsIFNjcm9sbDogTGVmdCBvbmUgY29sdW1uXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfTEZQQUdFICAgIDogICAgICAgICAgICAgICAg IC8qIEhvcml6b250YWwgU2Nyb2xsOiBMZWZ0IG9uZSBwYWdlICovCi0gICAgICBwcmludGYoIlxc S2xmcGFnZSAgICAgICAgSG9yaXpvbnRhbCBTY3JvbGw6IExlZnQgZWlnaHQgY29sdW1uc1xuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0xGQUxMICAgICA6Ci0gICAgICBwcmludGYoIlxc S2xmYWxsICAgICAgICAgSG9yaXpvbnRhbCBTY3JvbGw6IExlZnQgdG8gbWFyZ2luXG4iKTsKLSAg ICAgIGJyZWFrOwotICAgIGNhc2UgIEtfUlRPTkUgICAgIDogICAgICAgICAgICAgICAgIC8qIEhv cml6b250YWwgU2Nyb2xsOiBSaWdodCBvbmUgY2VsbCAqLwotICAgICAgcHJpbnRmKCJcXEtydG9u ZSAgICAgICAgIEhvcml6b250YWwgU2Nyb2xsOiBSaWdodCBvbmUgY29sdW1uXG4iKTsKLSAgICAg IGJyZWFrOwotICAgIGNhc2UgIEtfUlRQQUdFICAgIDogICAgICAgICAgICAgICAgIC8qIEhvcml6 b250YWwgU2Nyb2xsOiBSaWdodCBvbmUgcGFnZSAqLwotICAgICAgcHJpbnRmKCJcXEtydHBhZ2Ug ICAgICAgIEhvcml6b250YWwgU2Nyb2xsOiBSaWdodCBlaWdodCBjb2x1bW5zXG4iKTsKLSAgICAg IGJyZWFrOwotICAgIGNhc2UgIEtfUlRBTEwgICAgIDoKLSAgICAgIHByaW50ZigiXFxLcnRhbGwg ICAgICAgICBIb3Jpem9udGFsIFNjcm9sbDogUmlnaHQgdG8gbWFyZ2luXG4iKTsKLSAgICAgIGJy ZWFrOwotCi0vKiBLZXlib2FyZCBsYW5ndWFnZSBzd2l0Y2hpbmcgdmVyYnMgKi8KLQotICAgIGNh c2UgIEtfS0JfRU5HICAgIDogICAgICAgICAgICAgICAgIC8qIEVuZ2xpc2gga2V5Ym9hcmQgbW9k ZSAqLwotICAgICAgcHJpbnRmKCJcXEtrYmVuZ2xpc2ggICAgIFN3aXRjaCB0byBOb3JtYWwgKEVu Z2xpc2gpIGtleWJvYXJkIG1vZGVcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19LQl9I RUIgICAgOiAgICAgICAgICAgICAgICAgLyogSGVicmV3IGtleWJvYXJkIG1vZGUgKi8KLSAgICAg IHByaW50ZigiXFxLa2JoZWJyZXcgICAgICBTd2l0Y2ggdG8gSGVicmV3IGtleWJvYXJkIG1vZGVc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19LQl9SVVMgICAgOiAgICAgICAgICAgICAg ICAgLyogUnVzc2lhbiBrZXlib2FyZCBtb2RlICovCi0gICAgICBwcmludGYoIlxcS2ticnVzc2lh biAgICAgU3dpdGNoIHRvIFJ1c3NpYW4ga2V5Ym9hcmQgbW9kZVxuIik7Ci0gICAgICBicmVhazsK LSAgICBjYXNlICBLX0tCX0VNQSAgICA6ICAgICAgICAgICAgICAgICAvKiBFbWFjcyBrZXlib2Fy ZCBtb2RlICovCi0gICAgICBwcmludGYoIlxcS2tiZW1hY3MgICAgICAgU3dpdGNoIHRvIEVNQUNT IGtleWJvYXJkIG1vZGVcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19LQl9XUCAgICAg OiAgICAgICAgICAgICAgICAgLyogV29yZCBQZXJmZWN0IDUuMSBtb2RlICovCi0gICAgICBwcmlu dGYoIlxcS2tid3AgICAgICAgICAgU3dpdGNoIHRvIFdvcmQgUGVyZmVjdCA1LjEga2V5Ym9hcmQg bW9kZVxuIik7Ci0gICAgICBicmVhazsKLQotLyogTWFyayBNb2RlIGFjdGlvbnMgKi8KLQotICAg IGNhc2UgIEtfTUFSS19TVEFSVCAgOiAgICAgICAvKiBFbnRlciBNYXJrIE1vZGUvU3RhcnQgbWFy a2luZyAqLwotICAgICAgcHJpbnRmKCJcXEttYXJrc3RhcnQgICAgIE1hcmsgTW9kZTogRW50ZXIg bW9kZSBvciBTdGFydCBtYXJraW5nXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfTUFS S19DQU5DRUwgOiAgICAgICAvKiBFeGl0IE1hcmsgTW9kZSAtIERvIE5vdGhpbmcgKi8KLSAgICAg IHByaW50ZigiXFxLbWFya2NhbmNlbCAgICBNYXJrIE1vZGU6IENhbmNlbCBtb2RlXG4iKTsKLSAg ICAgIGJyZWFrOwotICAgIGNhc2UgIEtfTUFSS19DT1BZQ0xJUDogICAgICAvKiBFeGl0IE1hcmsg TW9kZSAtIENvcHkgZGF0YSB0byBjbGlwYm9hcmQgKi8KLSAgICAgIHByaW50ZigiXFxLbWFya2Nv cHljbGlwICBNYXJrIE1vZGU6IENvcHkgbWFya2VkIHRleHQgdG8gY2xpcGJvYXJkXG4iKTsKLSAg ICAgIGJyZWFrOwotICAgIGNhc2UgIEtfTUFSS19DT1BZSE9TVDogICAgICAvKiBFeGl0IE1hcmsg TW9kZSAtIENvcHkgZGF0YSB0byBob3N0ICAgKi8KLSAgICAgIHByaW50ZigiXFxLbWFya2NvcHlo b3N0ICBNYXJrIE1vZGU6IENvcHkgbWFya2VkIHRleHQgdG8gaG9zdFxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX01BUktfU0VMRUNUIDogICAgICAgLyogRXhpdCBNYXJrIE1vZGUgLSBT ZWxlY3QgKi8KLSAgICAgIHByaW50ZigKLSAgICAgICJcXEttYXJrc2VsZWN0ICAgIE1hcmsgTW9k ZTogUGxhY2UgbWFya2VkIHRleHQgaW50byBcXHYoc2VsZWN0KVxuIik7Ci0gICAgICBicmVhazsK LSAgICBjYXNlICBLX0JBQ0tTUkNIICAgIDogICAgICAgICAgICAvKiBTZWFyY2ggQmFja3dhcmRz IGZvciB0ZXh0ICovCi0gICAgICBwcmludGYoIlxcS2JhY2tzZWFyY2ggICAgU2VhcmNoOiBCZWdp biBiYWNrd2FyZCBzZWFyY2ggZm9yIHRleHRcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19GV0RTUkNIICAgICA6ICAgICAgICAgICAgLyogU2VhcmNoIEZvcndhcmRzIGZvciB0ZXh0ICov Ci0gICAgICBwcmludGYoIlxcS2Z3ZHNlYXJjaCAgICAgU2VhcmNoOiBCZWdpbiBmb3J3YXJkIHNl YXJjaCBmb3IgdGV4dFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0JBQ0tORVhUICAg IDogICAgIC8qIFNlYXJjaCBCYWNrd2FyZHMgZm9yIG5leHQgaW5zdGFuY2Ugb2YgdGV4dCAqLwot ICAgICAgcHJpbnRmKAotICAgICAgIlxcS2JhY2tuZXh0ICAgICAgU2VhcmNoOiBGaW5kIG5leHQg aW5zdGFuY2Ugb2YgdGV4dCBiYWNrd2FyZHNcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19GV0RORVhUICAgICA6ICAgICAgLyogU2VhcmNoIEZvcndhcmRzIGZvciBuZXh0IGluc3RhbmNl IG9mIHRleHQgKi8KLSAgICAgIHByaW50ZigiXFxLZndkbmV4dCAgICAgICBTZWFyY2g6IEZpbmQg bmV4dCBpbnN0YW5jZSBvZiB0ZXh0IGZvcndhcmRzXG4iKTsKLSAgICAgIGJyZWFrOwotCi0vKiBN aXNjZWxsYW5lb3VzIEtlcm1pdCBhY3Rpb25zICovCi0KLSAgICBjYXNlICBLX0VYSVQgICAgICAg IDogICAgICAgICAgICAgICAvKiBSZXR1cm4gdG8gY29tbWFuZCBwYXJzZXIgKi8KLSAgICAgIHBy aW50ZigiXFxLZXhpdCAgICAgICAgICBUb2dnbGUgYmV0d2VlbiBDT01NQU5EIGFuZCBDT05ORUNU IG1vZGVzXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQlJFQUsgICAgICAgOiAgICAg ICAgICAgICAgIC8qIFNlbmQgYSBCUkVBSyAqLwotICAgICAgcHJpbnRmKCJcXEticmVhayAgICAg ICAgIFRyYW5zbWl0IEJSRUFLIHNpZ25hbCB0byBob3N0XG4iKTsKLSAgICAgIGJyZWFrOwotICAg IGNhc2UgIEtfUkVTRVQgICAgICAgOiAgICAgICAgICAgICAgIC8qIFJlc2V0IGVtdWxhdG9yICov Ci0gICAgICBwcmludGYoIlxcS3Jlc2V0ICAgICAgICAgUmVzZXQgVGVybWluYWwgRW11bGF0b3Ig dG8gdXNlciBkZWZhdWx0c1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RPUyAgICAg ICAgIDogICAgICAgICAgICAgICAvKiBQdXNoIHRvIERPUyAoaS5lLiBPUy8yKSAqLwotICAgICAg cHJpbnRmKCJcXEtkb3MsXFxLb3MyICAgICBQdXNoIHRvIENvbW1hbmQgU2hlbGxcbiIpOwotICAg ICAgYnJlYWs7Ci0gICAgY2FzZSAgS19IQU5HVVAgICAgICA6ICAgICAgICAgICAgICAgLyogSGFu ZyB1cCB0aGUgY29ubmVjdGlvbiAqLwotICAgICAgcHJpbnRmKCJcXEtoYW5ndXAgICAgICAgIEhh bmd1cCB0aGUgYWN0aXZlIGNvbm5lY3Rpb25cbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19EVU1QICAgICAgICA6ICAgICAgICAgICAgICAgLyogRHVtcC9QcmludCBjdXJyZW50IHNjcmVl biAqLwotICAgICAgcHJpbnRmKAotICAgICAiXFxLZHVtcCAgICAgICAgICBEdW1wL2NvcHkgY3Vy cmVudCBzY3JlZW4gdG8gU0VUIFBSSU5URVIgZGV2aWNlL2ZpbGVcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19MQlJFQUsgICAgICA6ICAgICAgICAgICAgICAgLyogU2VuZCBhIExvbmcg QlJFQUsgKi8KLSAgICAgIHByaW50ZigiXFxLbGJyZWFrICAgICAgICBUcmFuc21pdCBMT05HIEJS RUFLIHNpZ25hbCB0byBob3N0XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfTlVMTCAg ICAgICAgOiAgICAgICAgICAgICAgIC8qIFNlbmQgYSBOVUwgKi8KLSAgICAgIHByaW50ZigiXFxL bnVsbCAgICAgICAgICBUcmFuc21pdCBOVUxMICgnXDAnKSBjaGFyYWN0ZXIgdG8gaG9zdFxuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0hFTFAgICAgICAgIDogICAgICAgICAgICAgICAv KiBQb3AtdXAgaGVscCAqLwotICAgICAgcHJpbnRmKCJcXEtoZWxwICAgICAgICAgIFJhaXNlIFBv cC1VcCBoZWxwIGRpc3BsYXlcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19IT0xEU0NS TiAgICA6ICAgICAgICAgICAgICAgLyogSG9sZCBzY3JlZW4gKi8KLSAgICAgIHByaW50ZigiXFxL aG9sZHNjcm4gICAgICBQYXVzZSBkYXRhIGlucHV0IGR1cmluZyBDT05ORUNUIG1vZGVcbiIpOwot ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19JR05PUkUgICAgICA6ICAgICAgICAgICAgICAgLyog SWdub3JlIHRoaXMga2V5LCBkb24ndCBldmVuIGJlZXAgKi8KLSAgICAgIHByaW50ZigiXFxLaWdu b3JlICAgICAgICBJZ25vcmUga2V5XG4iKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSAgS19M T0dPRkYgICAgICA6ICAgICAgICAgICAgICAgLyogVHVybiBvZmYgc2Vzc2lvbiBsb2dnaW5nICov Ci0gICAgICBwcmludGYoIlxcS2xvZ29mZiAgICAgICAgVHVybiBvZmYgc2Vzc2lvbiBsb2dnaW5n IChzZWUgXFxLc2Vzc2lvbilcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19MT0dPTiAg ICAgICA6ICAgICAgICAgICAgICAgLyogVHVybiBvbiBzZXNzaW9uIGxvZ2dpbmcgKi8KLSAgICAg IHByaW50ZigiXFxLbG9nb24gICAgICAgICBUdXJuIG9uIHNlc3Npb24gbG9nZ2luZyAoc2VlIFxc S3Nlc3Npb24pXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TRVNTSU9OOgotICAgICAg cHJpbnRmKAotICAgICAgICAgIlxcS3Nlc3Npb24gICAgICAgVG9nZ2xlIG9uL29mZiBzZXNzaW9u IGxvZ2dpbmcgdG8gJ3Nlc3Npb24ubG9nJ1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEtf QVVUT0RPV046Ci0gICAgICBwcmludGYoIlxcS2F1dG9kb3duICAgICAgVG9nZ2xlIG9uL29mZiB0 ZXJtaW5hbCBhdXRvZG93bmxvYWQuXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CWVRF U0laRToKLSAgICAgIHByaW50ZigKLSAgICAgICAgIlxcS2J5dGVzaXplICAgICAgVG9nZ2xlIHRl cm1pbmFsIGJ5dGVzaXplIGJldHdlZW4gNyBhbmQgOCBiaXRzLlxuIik7Ci0gICAgICBicmVhazsK LQotI2lmZGVmIENPTU1FTlQKLSAgICBjYXNlIE1PREVMSU5FOgotICAgIGNhc2UgIEtfTkVUSE9M RCAgICAgOiAgICAgICAgICAgICAgIC8qIFB1dCBuZXR3b3JrIGNvbm5lY3Rpb24gb24gaG9sZCAq LwotICAgIGNhc2UgIEtfTkVYVFNFU1MgICAgOiAgICAgICAgICAgICAgIC8qIFRvZ2dsZSB0byBu ZXh0IG5ldHdvcmsgc2Vzc2lvbiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIGNhc2Ug S19DVVJTT1JfVVJMOgotICAgICAgICBwcmludGYoCi0gICAgICJcXEt1cmwgICAgICAgICAgIFRy ZWF0IHRleHQgdW5kZXIgY3Vyc29yIHBvc2l0aW9uIGFzIGEgVVJMXG4iKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSAgS19TVEFUVVMgICAgICA6ICAgICAgICAgICAgICAgLyogU2hvdyBzdGF0 dXMgKi8KLSAgICAgIHByaW50ZigKLSAgICAgIlxcS3N0YXR1cyAgICAgICAgVG9nZ2xlIHN0YXR1 c2xpbmUgKE5vbmUsIEluZGljYXRvciwgSG9zdCBXcml0ZWFibGUpXG4iKTsKLSAgICAgIGJyZWFr OwotICAgIGNhc2UgIEtfVEVSTVRZUEUgICAgOiAgICAgICAgICAgICAgIC8qIFRvZ2dsZSB0ZXJt IHR5cGU6IHRleHQvZ3JhcGhpY3MgKi8KLSAgICAgIHByaW50ZigiXFxLdGVybXR5cGUgICAgICBU b2dnbGUgVGVybWluYWwgVHlwZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1BSVENU UkwgICAgIDogICAgICAgICAgICAgICAvKiBQcmludCBDb250cm9sbGVyIG1vZGUgKi8KLSAgICAg IHByaW50ZigiXFxLcHJ0Y3RybCAgICAgICBUb2dnbGUgQ3RybC1QcmludCAodHJhbnNwYXJlbnQp IG1vZGVcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19QUklOVEZGICAgICA6ICAgICAg ICAgICAgICAgLyogUHJpbnQgZm9ybWZlZWQgKi8KLSAgICAgIHByaW50ZigiXFxLcHJpbnRmZiAg ICAgICBPdXRwdXQgRm9ybSBGZWVkIHRvIFNFVCBQUklOVEVSIGRldmljZVxuIik7Ci0gICAgICBi cmVhazsKLSAgICBjYXNlICBLX0ZMSVBTQ04gICAgIDogICAgICAgICAgICAgICAvKiBGbGlwIHNj cmVlbiAqLwotICAgICAgcHJpbnRmKCJcXEtmbGlwc2NuICAgICAgIFJldmVyc2UgZm9yZWdyb3Vu ZCBhbmQgYmFja2dyb3VuZCBjb2xvcnNcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19E RUJVRyAgICAgICA6ICAgICAgICAgICAgICAgLyogVG9nZ2xlIGRlYnVnZ2luZyAqLwotICAgICAg cHJpbnRmKCJcXEtkZWJ1ZyAgICAgICAgIFRvZ2dsZSBUZXJtaW5hbCBEZWJ1ZyBtb2RlXG4iKTsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVE5fU0FLICAgICAgOiAgICAgICAgICAgICAgIC8q IFRFTE5FVCBTZWN1cmUgQWNjZXNzIEtleSAqLwotICAgICAgcHJpbnRmKCJcXEt0bl9zYWsgICAg ICAgIFRFTE5FVDogSUJNIFNlY3VyZSBBY2Nlc3MgS2V5XG4iKTsKLSAgICAgIHByaW50ZigiICAg ICAgICAgICAgICAgIFVzZWQgdG8gcmVxdWVzdCBhIFRydXN0ZWQgU2hlbGwgd2l0aCBBSVhcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UTl9BTyAgICAgICA6ICAgICAgICAgICAgICAg LyogVEVMTkVUIENhbmNlbCBPdXRwdXQgKi8KLSAgICAgIHByaW50ZigiXFxLdG5fYW8gICAgICAg ICBURUxORVQ6IFRyYW5zbWl0IENhbmNlbC1PdXRwdXQgcmVxdWVzdFxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX1ROX0FZVCAgICAgIDogICAgICAgICAgICAgICAvKiBURUxORVQgQXJl IFlvdSBUaGVyZSAqLwotICAgICAgcHJpbnRmKCJcXEt0bmF5dCAgICAgICAgIFRFTE5FVDogVHJh bnNtaXQgQXJlIFlvdSBUaGVyZT8gcmVxdWVzdFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX1ROX0VDICAgICAgIDogICAgICAgICAgICAgICAvKiBURUxORVQgRXJhc2UgQ2hhcmFjdGVy ICovCi0gICAgICBwcmludGYoIlxcS3RuX2VjICAgICAgICAgVEVMTkVUOiBUcmFuc21pdCBFcmFz ZSBDaGFyYWN0ZXIgcmVxdWVzdFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1ROX0VM ICAgICAgIDogICAgICAgICAgICAgICAvKiBURUxORVQgRXJhc2UgTGluZSAqLwotICAgICAgcHJp bnRmKCJcXEt0bl9lbCAgICAgICAgIFRFTE5FVDogVHJhbnNtaXQgRXJhc2UgTGluZSByZXF1ZXN0 XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVE5fR0EgICAgICAgOiAgICAgICAgICAg ICAgIC8qIFRFTE5FVCBHbyBBaGVhZCAqLwotICAgICAgcHJpbnRmKCJcXEt0bl9nYSAgICAgICAg IFRFTE5FVDogVHJhbnNtaXQgR28gQWhlYWQgcmVxdWVzdFxuIik7Ci0gICAgICBicmVhazsKLSAg ICBjYXNlICBLX1ROX0lQICAgICAgIDogICAgICAgICAgICAgICAvKiBURUxORVQgSW50ZXJydXB0 IFByb2Nlc3MgKi8KLSAgICAgIHByaW50ZigiXFxLdG5faXAgICAgICAgICBURUxORVQ6IFRyYW5z bWl0IEludGVycnVwdCBQcm9jZXNzIHJlcXVlc3RcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAgS19UTl9MT0dPVVQgICA6ICAgICAgICAgICAgICAgLyogVEVMTkVUIExvZ291dCAqLwotICAg ICAgcHJpbnRmKCJcXEt0bl9sb2dvdXQgICAgIFRFTE5FVDogVHJhbnNtaXQgRG8gTG9nb3V0IE9w dGlvblxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1ROX05BV1MgICA6ICAgICAgICAg ICAgICAgICAvKiBURUxORVQgTkFXUyAqLwotICAgICAgcHJpbnRmKAotICAgICAgICAiXFxLdG5f bmF3cyAgICAgICBURUxORVQ6IFRyYW5zbWl0IFdpbmRvdyBTaXplIGlmIE5BV1MgaXMgYWN0aXZl XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfUEFTVEUgICAgICAgOiAgICAgICAgICAg ICAgIC8qIFBhc3RlIGRhdGEgZnJvbSBjbGlwYm9hcmQgKi8KLSAgICAgIHByaW50ZigiXFxLcGFz dGUgICAgICAgICBQYXN0ZSBkYXRhIGZyb20gY2xpcGJvYXJkIHRvIGhvc3RcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19DTFJTQ1JOICAgICA6ICAgICAgICAgICAgICAgLyogQ2xlYXIg VGVybWluYWwgU2NyZWVuICovCi0gICAgICBwcmludGYoIlxcS2NsZWFyc2NyZWVuICAgQ2xlYXIg dGhlIFRlcm1pbmFsIHNjcmVlblxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1BSVEFV VE8gICAgIDogICAgICAgICAgICAgICAvKiBQcmludCBBdXRvIG1vZGUgKi8KLSAgICAgIHByaW50 ZigiXFxLcHJ0YXV0byAgICAgICBUb2dnbGUgQXV0by1QcmludCBtb2RlXG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfUFJUQ09QWSAgICAgOiAgICAgICAgICAgICAgIC8qIFByaW50IENv cHkgbW9kZSAqLwotICAgICAgcHJpbnRmKCJcXEtwcnRjb3B5ICAgICAgIFRvZ2dsZSBDb3B5LVBy aW50IG1vZGVcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNXRVJCQUNLICA6ICAg ICAgICAgICAgICAgLyogVHJhbnNtaXQgQW5zd2VyYmFjayBTdHJpbmcgKi8KLSAgICAgIHByaW50 ZigiXFxLYW5zd2VyYmFjayAgICBUcmFuc21pdCBhbnN3ZXJiYWNrIHN0cmluZyB0byBob3N0XG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfU0VUX0JPT0sgICAgOiAgICAgICAgICAgICAg IC8qIFNldCBCb29rbWFyayAqLwotICAgICAgcHJpbnRmKCJcXEtzZXRib29rICAgICAgIFNldCBi b29rbWFya1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1FVSVQgICAgICAgIDogICAg ICAgICAgICAgICAvKiBRdWl0IEtlcm1pdCAqLwotICAgICAgcHJpbnRmKCJcXEtxdWl0ICAgICAg ICAgIEhhbmd1cCBjb25uZWN0aW9uIGFuZCBxdWl0IGtlcm1pdFxuIik7Ci0gICAgICBicmVhazsK LSAgICBjYXNlICBLX0tFWUNMSUNLICAgIDogICAgICAgICAgICAgICAvKiBUb2dnbGUgS2V5Y2xp Y2sgKi8KLSAgICAgIHByaW50ZigiXFxLa2V5Y2xpY2sgICAgICBUb2dnbGUgS2V5Y2xpY2sgbW9k ZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0xPR0RFQlVHICAgIDogICAgICAgICAg ICAgICAvKiBUb2dnbGUgRGVidWcgTG9nIEZpbGUgKi8KLSAgICAgIHByaW50ZigiXFxLbG9nZGVi dWcgICAgICBUb2dnbGUgRGVidWcgTG9nZ2luZyB0byBGaWxlXG4iKTsKLSAgICAgIGJyZWFrOwot ICAgIGNhc2UgIEtfRk5LRVlTICAgICAgOiAgICAgICAgICAgICAgIC8qIFNob3cgRnVuY3Rpb24g S2V5IExhYmVscyAqLwotICAgICAgcHJpbnRmKCJcXEtmbmtleXMgICAgICAgIERpc3BsYXkgRnVu Y3Rpb24gS2V5IExhYmVsc1xuIik7Ci0gICAgICBicmVhazsKLQotI2lmZGVmIE9TMk1PVVNFCi0v KiBNb3VzZSBvbmx5IEt2ZXJicyAqLwotCi0gICAgY2FzZSAgS19NT1VTRV9DVVJQT1MgOgotICAg ICAgcHJpbnRmKCJcXEttb3VzZWN1cnBvcyAgIE1vdXNlOiBNb3ZlIGhvc3QgY3Vyc29yIHRvIHBv c2l0aW9uXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfTU9VU0VfTUFSSyAgIDoKLSAg ICAgIHByaW50ZigKLSAgICAgIlxcS21vdXNlbWFyayAgICAgTW91c2U6IE1hcmsgdGV4dCBmb3Ig c2VsZWN0aW9uIChkcmFnIGV2ZW50IG9ubHkpXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug IEtfTU9VU0VfVVJMICAgIDoKLSAgICAgIHByaW50ZigiXFxLbW91c2V1cmwgICAgICBNb3VzZTog U3RhcnQgYnJvd3NlciB3aXRoIHNlbGVjdGVkIFVSTFxuIik7Ci0gICAgICBicmVhazsKLSNlbmRp ZiAvKiBPUzJNT1VTRSAqLwotCi0vKiBBTlNJIEZ1bmN0aW9uIEtleSBkZWZpbml0aW9ucyAqLwot ICAgIGNhc2UgIEtfQU5TSUYwMSAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMDEg ICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogRjEgXG4iKTsKLSAgICAgIGJyZWFrOwotICAg IGNhc2UgIEtfQU5TSUYwMiAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMDIgICAg ICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogRjIgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfQU5TSUYwMyAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMDMgICAgICAg VHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogRjMgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug IEtfQU5TSUYwNCAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMDQgICAgICAgVHJh bnNtaXQgU0NPQU5TSS9BVDM4NjogRjQgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtf QU5TSUYwNSAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMDUgICAgICAgVHJhbnNt aXQgU0NPQU5TSS9BVDM4NjogRjUgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5T SUYwNiAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMDYgICAgICAgVHJhbnNtaXQg U0NPQU5TSS9BVDM4NjogRjYgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYw NyAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMDcgICAgICAgVHJhbnNtaXQgU0NP QU5TSS9BVDM4NjogRjcgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYwOCAg ICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMDggICAgICAgVHJhbnNtaXQgU0NPQU5T SS9BVDM4NjogRjggXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYwOSAgICAg ICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMDkgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9B VDM4NjogRjkgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYxMCAgICAgICAg ICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMTAgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4 NjogRjEwXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYxMSAgICAgICAgICA6 Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMTEgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4Njog RjExXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYxMiAgICAgICAgICA6Ci0g ICAgICBwcmludGYoIlxcS2Fuc2lmMTIgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogRjEy XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYxMyAgICAgICAgICA6Ci0gICAg ICBwcmludGYoIlxcS2Fuc2lmMTMgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogU2hpZnQt RjEgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYxNCAgICAgICAgICA6Ci0g ICAgICBwcmludGYoIlxcS2Fuc2lmMTQgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogU2hp ZnQtRjIgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYxNSAgICAgICAgICA6 Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMTUgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4Njog U2hpZnQtRjMgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYxNiAgICAgICAg ICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMTYgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4 NjogU2hpZnQtRjQgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYxNyAgICAg ICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMTcgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9B VDM4NjogU2hpZnQtRjUgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYxOCAg ICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMTggICAgICAgVHJhbnNtaXQgU0NPQU5T SS9BVDM4NjogU2hpZnQtRjYgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYx OSAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMTkgICAgICAgVHJhbnNtaXQgU0NP QU5TSS9BVDM4NjogU2hpZnQtRjcgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5T SUYyMCAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMjAgICAgICAgVHJhbnNtaXQg U0NPQU5TSS9BVDM4NjogU2hpZnQtRjggXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtf QU5TSUYyMSAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMjEgICAgICAgVHJhbnNt aXQgU0NPQU5TSS9BVDM4NjogU2hpZnQtRjkgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug IEtfQU5TSUYyMiAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMjIgICAgICAgVHJh bnNtaXQgU0NPQU5TSS9BVDM4NjogU2hpZnQtRjEwXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfQU5TSUYyMyAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMjMgICAgICAg VHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogU2hpZnQtRjExXG4iKTsKLSAgICAgIGJyZWFrOwotICAg IGNhc2UgIEtfQU5TSUYyNCAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMjQgICAg ICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogU2hpZnQtRjEyXG4iKTsKLSAgICAgIGJyZWFrOwot ICAgIGNhc2UgIEtfQU5TSUYyNSAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMjUg ICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GMSBcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19BTlNJRjI2ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYy NiAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUYyIFxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX0FOU0lGMjcgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEthbnNp ZjI3ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtRjMgXG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfQU5TSUYyOCAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fu c2lmMjggICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GNCBcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjI5ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxL YW5zaWYyOSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUY1IFxuIik7Ci0gICAg ICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGMzAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJc XEthbnNpZjMwICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtRjYgXG4iKTsKLSAg ICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYzMSAgICAgICAgICA6Ci0gICAgICBwcmludGYo IlxcS2Fuc2lmMzEgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GNyBcbiIpOwot ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjMyICAgICAgICAgIDoKLSAgICAgIHByaW50 ZigiXFxLYW5zaWYzMiAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUY4IFxuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGMzMgICAgICAgICAgOgotICAgICAgcHJp bnRmKCJcXEthbnNpZjMzICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtRjkgXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYzNCAgICAgICAgICA6Ci0gICAgICBw cmludGYoIlxcS2Fuc2lmMzQgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GMTBc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjM1ICAgICAgICAgIDoKLSAgICAg IHByaW50ZigiXFxLYW5zaWYzNSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUYx MVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGMzYgICAgICAgICAgOgotICAg ICAgcHJpbnRmKCJcXEthbnNpZjM2ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwt RjEyXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYzNyAgICAgICAgICA6Ci0g ICAgICBwcmludGYoIlxcS2Fuc2lmMzcgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3Ry bC1TaGlmdC1GMSBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjM4ICAgICAg ICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYzOCAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FU Mzg2OiBDdHJsLVNoaWZ0LUYyIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lG MzkgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEthbnNpZjM5ICAgICAgIFRyYW5zbWl0IFND T0FOU0kvQVQzODY6IEN0cmwtU2hpZnQtRjMgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug IEtfQU5TSUY0MCAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmNDAgICAgICAgVHJh bnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1TaGlmdC1GNCBcbiIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19BTlNJRjQxICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWY0MSAg ICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLVNoaWZ0LUY1IFxuIik7Ci0gICAgICBi cmVhazsKLSAgICBjYXNlICBLX0FOU0lGNDIgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEth bnNpZjQyICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtU2hpZnQtRjYgXG4iKTsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUY0MyAgICAgICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS2Fuc2lmNDMgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1TaGlmdC1G NyBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjQ0ICAgICAgICAgIDoKLSAg ICAgIHByaW50ZigiXFxLYW5zaWY0NCAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJs LVNoaWZ0LUY4IFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGNDUgICAgICAg ICAgOgotICAgICAgcHJpbnRmKCJcXEthbnNpZjQ1ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQz ODY6IEN0cmwtU2hpZnQtRjkgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUY0 NiAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmNDYgICAgICAgVHJhbnNtaXQgU0NP QU5TSS9BVDM4NjogQ3RybC1TaGlmdC1GMTBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19BTlNJRjQ3ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWY0NyAgICAgICBUcmFu c21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLVNoaWZ0LUYxMVxuIik7Ci0gICAgICBicmVhazsKLSAg ICBjYXNlICBLX0FOU0lGNDggICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEthbnNpZjQ4ICAg ICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtU2hpZnQtRjEyXG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfQU5TSUY0OSAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fu c2lmNDkgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogSG9tZVxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX0FOU0lGNTAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEthbnNp ZjUwICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IFVwIEFycm93XG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfQU5TSUY1MSAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fu c2lmNTEgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogUGdVcFxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX0FOU0lGNTIgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEthbnNp ZjUyICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtU2hpZnQtU3VidHJhY3RcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjUzICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLYW5zaWY1MyAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBMZWZ0IEFycm93 XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUY1NCAgICAgICAgICA6Ci0gICAg ICBwcmludGYoIlxcS2Fuc2lmNTQgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ2xlYXJc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjU1ICAgICAgICAgIDoKLSAgICAg IHByaW50ZigiXFxLYW5zaWY1NSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBSaWdodCBB cnJvd1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGNTYgICAgICAgICAgOgot ICAgICAgcHJpbnRmKCJcXEthbnNpZjU2ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IFNo aWZ0LUFkZFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGNTcgICAgICAgICAg OgotICAgICAgcHJpbnRmKCJcXEthbnNpZjU3ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6 IEVuZFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGNTggICAgICAgICAgOgot ICAgICAgcHJpbnRmKCJcXEthbnNpZjU4ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IERv d24gQXJyb3dcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjU5ICAgICAgICAg IDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWY1OSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2 OiBQZ0RuXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUY2MCAgICAgICAgICA6 Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmNjAgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4Njog SW5zZXJ0XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUY2MSAgICAgICAgICA6 Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmNjEgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4Njog KG5vdCBuYW1lZClcbiIpOwotICAgICAgYnJlYWs7Ci0KLS8qIFdZU0UgRnVuY3Rpb24gS2V5cyAo dW5zaGlmdGVkKSAqLwotICAgIGNhc2UgIEtfV1lGMDEgICAgICAgICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS3d5ZjAxICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYxXG4iKTsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMDIgICAgICAgICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS3d5ZjAyICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYyXG4iKTsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMDMgICAgICAgICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS3d5ZjAzICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYzXG4iKTsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMDQgICAgICAgICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS3d5ZjA0ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEY0XG4iKTsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMDUgICAgICAgICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS3d5ZjA1ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEY1XG4iKTsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMDYgICAgICAgICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS3d5ZjA2ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEY2XG4iKTsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMDcgICAgICAgICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS3d5ZjA3ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEY3XG4iKTsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMDggICAgICAgICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS3d5ZjA4ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEY4XG4iKTsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMDkgICAgICAgICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS3d5ZjA5ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEY5XG4iKTsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMTAgICAgICAgICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS3d5ZjEwICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYxMFxuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZRjExICAgICAgICAgICAgOgotICAgICAgcHJp bnRmKCJcXEt3eWYxMSAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGMTFcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYxMiAgICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLd3lmMTIgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjEyXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMTMgICAgICAgICAgICA6Ci0gICAgICBw cmludGYoIlxcS3d5ZjEzICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYxM1xu Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZRjE0ICAgICAgICAgICAgOgotICAgICAg cHJpbnRmKCJcXEt3eWYxNCAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGMTRc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYxNSAgICAgICAgICAgIDoKLSAgICAg IHByaW50ZigiXFxLd3lmMTUgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjE1 XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMTYgICAgICAgICAgICA6Ci0gICAg ICBwcmludGYoIlxcS3d5ZjE2ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYx NlxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZRjE3ICAgICAgICAgICAgOgotICAg ICAgcHJpbnRmKCJcXEt3eWYxNyAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBG MTdcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYxOCAgICAgICAgICAgIDoKLSAg ICAgIHByaW50ZigiXFxLd3lmMTggICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDog RjE4XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMTkgICAgICAgICAgICA6Ci0g ICAgICBwcmludGYoIlxcS3d5ZjE5ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6 IEYxOVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZRjIwICAgICAgICAgICAgOgot ICAgICAgcHJpbnRmKCJcXEt3eWYyMCAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYw OiBGMjBcbiIpOwotICAgICAgYnJlYWs7Ci0KLS8qIFdZU0UgRnVuY3Rpb24gS2V5cyAoc2hpZnRl ZCkgKi8KLSAgICBjYXNlICBLX1dZU0YwMSAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt3 eXNmMDEgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GMVxuIik7Ci0g ICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZU0YwMiAgICAgICAgICAgOgotICAgICAgcHJpbnRm KCJcXEt3eXNmMDIgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GMlxu Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZU0YwMyAgICAgICAgICAgIDoKLSAgICAg IHByaW50ZigiXFxLd3lzZjAzICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hp ZnQtRjNcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWVNGMDQgICAgICAgICAgICA6 Ci0gICAgICBwcmludGYoIlxcS3d5c2YwNCAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8x NjA6IFNoaWZ0LUY0XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lTRjA1ICAgICAg ICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt3eXNmMDUgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAv NTAvNjAvMTYwOiBTaGlmdC1GNVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZU0Yw NiAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3lzZjA2ICAgICAgICBUcmFuc21pdCBX WVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtRjZcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19XWVNGMDcgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5c2YwNyAgICAgICAgVHJh bnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUY3XG4iKTsKLSAgICAgIGJyZWFrOwotICAg IGNhc2UgIEtfV1lTRjA4ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt3eXNmMDggICAg ICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GOFxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX1dZU0YwOSAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3lz ZjA5ICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtRjlcbiIpOwotICAg ICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWVNGMTAgICAgICAgICAgICA6Ci0gICAgICBwcmludGYo IlxcS3d5c2YxMCAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUYxMFxu Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZU0YxMSAgICAgICAgICAgIDoKLSAgICAg IHByaW50ZigiXFxLd3lzZjExICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hp ZnQtRjExXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lTRjEyICAgICAgICAgICAg OgotICAgICAgcHJpbnRmKCJcXEt3eXNmMTIgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAv MTYwOiBTaGlmdC1GMTJcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWVNGMTMgICAg ICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5c2YxMyAgICAgICAgVHJhbnNtaXQgV1lTRSAz MC81MC82MC8xNjA6IFNoaWZ0LUYxM1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZ U0YxNCAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3lzZjE0ICAgICAgICBUcmFuc21p dCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtRjE0XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfV1lTRjE1ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt3eXNmMTUgICAgICAg IFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GMTVcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19XWVNGMTYgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5c2Yx NiAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUYxNlxuIik7Ci0gICAg ICBicmVhazsKLSAgICBjYXNlICBLX1dZU0YxNyAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJc XEt3eXNmMTcgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GMTdcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWVNGMTggICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLd3lzZjE4ICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQt RjE4XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lTRjE5ICAgICAgICAgICA6Ci0g ICAgICBwcmludGYoIlxcS3d5c2YxOSAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6 IFNoaWZ0LUYxOVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZU0YyMCAgICAgICAg ICAgOgotICAgICAgcHJpbnRmKCJcXEt3eXNmMjAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAv NjAvMTYwOiBTaGlmdC1GMjBcbiIpOwotICAgICAgYnJlYWs7Ci0KLS8qIFdZU0UgRWRpdCBhbmQg U3BlY2lhbCBLZXlzICovCi0gICAgY2FzZSAgS19XWUJTICAgICAgICAgOgotICAgICAgcHJpbnRm KCJcXEt3eWJzICAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBCYWNrc3BhY2Vc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUNMUkxOICAgICAgICAgIDoKLSAgICAg IHByaW50ZigiXFxLd3ljbHJsbiAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogQ2xl YXIgTGluZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZU0NMUkxOICAgICA6Ci0g ICAgIHByaW50ZigiXFxLd3lzY2xybG4gICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDog U2hpZnQtQ2xlYXIgTGluZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZQ0xSUEcg ICAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5Y2xycGcgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81 MC82MC8xNjA6IENsZWFyIFBhZ2VcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWVND TFJQRyAgICAgOgotICAgIHByaW50ZigiXFxLd3lzY2xycGcgICAgICBUcmFuc21pdCBXWVNFIDMw LzUwLzYwLzE2MDogU2hpZnQtQ2xlYXIgUGFnZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX1dZREVMQ0hBUiAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5ZGVsY2hhciAgICAgVHJhbnNt aXQgV1lTRSAzMC81MC82MC8xNjA6IERlbGV0ZSBDaGFyXG4iKTsKLSAgICAgIGJyZWFrOwotICAg IGNhc2UgIEtfV1lERUxMTiAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3lkZWxsbiAgICAgICBU cmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRGVsZXRlIExpbmVcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19XWUVOVEVSICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3llbnRl ciAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRW50ZXJcbiIpOwotICAgICAgYnJl YWs7Ci0gICAgY2FzZSAgS19XWUVTQyAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3ll c2MgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRXNjXG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfV1lIT01FICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5 aG9tZSAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEhvbWVcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19XWVNIT01FICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxL d3lzaG9tZSAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtSG9tZVxuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZSU5TRVJUICAgICA6Ci0gICAgICBwcmludGYo IlxcS3d5aW5zZXJ0ICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEluc2VydFxuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZSU5TQ0hBUiAgICA6Ci0gICAgICBwcmludGYo IlxcS3d5aW5zY2hhciAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEluc2VydCBDaGFy XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lJTlNMTiAgICAgICAgICA6Ci0gICAg ICBwcmludGYoIlxcS3d5aW5zbG4gICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IElu c2VydCBMaW5lXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lQR05FWFQgICAgIDoK LSAgICAgIHByaW50ZigiXFxLd3lwZ25leHQgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2 MDogUGFnZSBOZXh0XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lQR1BSRVYgICAg IDoKLSAgICAgIHByaW50ZigiXFxLd3lwZ3ByZXYgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYw LzE2MDogUGFnZSBQcmV2aW91c1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZUkVQ TEFDRSAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5cmVwbGFjZSAgICAgVHJhbnNtaXQgV1lTRSAz MC81MC82MC8xNjA6IFJlcGxhY2UgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19XWVJFVFVSTiAgICAgOgotICAgICAgcHJpbnRmKCJcXEt3eXJldHVybiAgICAgIFRyYW5zbWl0 IFdZU0UgMzAvNTAvNjAvMTYwOiBSZXR1cm4gICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAg IGNhc2UgIEtfV1lUQUIgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5dGFiICAgICAg ICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFRhYiAgICAgICAgICBcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19XWVNUQUIgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxL d3lzdGFiICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtVGFiICAgIFxu Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZUFJUU0NOICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS3d5cHJ0c2NuICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFByaW50IFNj cmVlbiBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWVNFU0MgICAgICAgOgotICAg ICAgcHJpbnRmKCJcXEt3eXNlc2MgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBT aGlmdC1Fc2MgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lTQlMgICAgICAg IDoKLSAgICBwcmludGYoIlxcS3d5c2JzICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8x NjA6IFNoaWZ0LUJhY2tzcGFjZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZU0VO VEVSICAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5c2VudGVyICAgICAgVHJhbnNtaXQgV1lTRSAz MC81MC82MC8xNjA6IFNoaWZ0LUVudGVyXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtf V1lTUkVUVVJOICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3lzcmV0dXJuICAgICBUcmFuc21pdCBX WVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtUmV0dXJuXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfV1lVUEFSUiAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5dXBhcnIgICAgICAg VHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFVwIEFycm93XG4iKTsKLSAgICAgIGJyZWFrOwot ICAgIGNhc2UgIEtfV1lETkFSUiAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5ZG5hcnIg ICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IERvd24gQXJyb3dcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19XWUxGQVJSICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxL d3lsZmFyciAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogTGVmdCBBcnJvd1xuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZUlRBUlIgICAgICAgICAgOgotICAgICAgcHJp bnRmKCJcXEt3eXJ0YXJyICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBSaWdodCBB cnJvd1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZU1VQQVJSICAgICA6Ci0gICAg ICBwcmludGYoIlxcS3d5c3VwYXJyICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNo aWZ0LVVwIEFycm93XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lTRE5BUlIgICAg IDoKLSAgICBwcmludGYoIlxcS3d5c2RuYXJyICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8x NjA6IFNoaWZ0LURvd24gQXJyb3dcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWVNM RkFSUiAgICAgOgotICAgIHByaW50ZigiXFxLd3lzbGZhcnIgICAgICBUcmFuc21pdCBXWVNFIDMw LzUwLzYwLzE2MDogU2hpZnQtTGVmdCBBcnJvd1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX1dZU1JUQVJSICAgICA6Ci0gICAgcHJpbnRmKCJcXEt3eXNydGFyciAgICAgIFRyYW5zbWl0 IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1SaWdodCBBcnJvd1xuIik7Ci0gICAgICBicmVhazsK LSAgICBjYXNlICBLX1dZU0VORDoKLSAgICAgIHByaW50ZigiXFxLd3lzZW5kICAgICAgICBUcmFu c21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2VuZFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX1dZU1NFTkQ6Ci0gICAgICBwcmludGYoIlxcS3d5c3NlbmQgICAgICAgVHJhbnNtaXQgV1lT RSAzMC81MC82MC8xNjA6IFNoaWZ0LVNlbmRcbiIpOwotICAgICAgYnJlYWs7Ci0KLS8qIERhdGEg R2VuZXJhbCBGdW5jdGlvbiBLZXlzICh1bnNoaWZ0ZWQpICovCi0gICAgY2FzZSAgS19ER0YwMSAg ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRh IEdlbmVyYWw6IEYxICAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAgS19ER0YwMiAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBU cmFuc21pdCBEYXRhIEdlbmVyYWw6IEYyICAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJl YWs7Ci0gICAgY2FzZSAgS19ER0YwMyAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdm MDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEYzICAgICAgICAgICAgICAgICBcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0YwNCAgICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEY0ICAgICAgICAg ICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0YwNSAgICAgICAgICAg IDoKLSAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6 IEY1ICAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0Yw NiAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBE YXRhIEdlbmVyYWw6IEY2ICAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19ER0YwNyAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAg ICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEY3ICAgICAgICAgICAgICAgICBcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19ER0YwOCAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxL ZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEY4ICAgICAgICAgICAgICAgICBc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0YwOSAgICAgICAgICAgIDoKLSAgICAg IHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEY5ICAgICAg ICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0YxMCAgICAgICAg ICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVy YWw6IEYxMCAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19E R0YxMSAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21p dCBEYXRhIEdlbmVyYWw6IEYxMSAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19ER0YxMiAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdmMDEgICAg ICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEYxMiAgICAgICAgICAgICAgICBcbiIpOwotICAg ICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0YxMyAgICAgICAgICAgIDoKLSAgICAgIHByaW50Zigi XFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEYxMyAgICAgICAgICAgICAg ICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0YxNCAgICAgICAgICAgIDoKLSAg ICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEYxNCAg ICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0YxNSAgICAg ICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdl bmVyYWw6IEYxNSAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0KLS8qIERhdGEg R2VuZXJhbCBGdW5jdGlvbiBLZXlzIChzaGlmdGVkKSAqLwotICAgIGNhc2UgIEtfREdTRjAxICAg ICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgICAiXFxLZGdzZjAxICAgICAgICBUcmFuc21p dCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUYxICAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJl YWs7Ci0gICAgY2FzZSAgS19ER1NGMDIgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAg ICJcXEtkZ3NmMDIgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtRjIgICAgICAg ICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHU0YwMyAgICAgICAg ICAgOgotICAgICAgcHJpbnRmKAotICAgICAgIlxcS2Rnc2YwMyAgICAgICAgVHJhbnNtaXQgRGF0 YSBHZW5lcmFsOiBTaGlmdC1GMyAgICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwot ICAgIGNhc2UgIEtfREdTRjA0ICAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgICAiXFxL ZGdzZjA0ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUY0ICAgICAgICAgICAg ICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER1NGMDUgICAgICAgICAgIDoK LSAgICAgIHByaW50ZigKLSAgICAgICJcXEtkZ3NmMDUgICAgICAgIFRyYW5zbWl0IERhdGEgR2Vu ZXJhbDogU2hpZnQtRjUgICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBj YXNlICBLX0RHU0YwNiAgICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICAgIlxcS2Rnc2Yw NiAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1GNiAgICAgICAgICAgICAgICAg XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdTRjA3ICAgICAgICAgICA6Ci0gICAg ICBwcmludGYoCi0gICAgICAiXFxLZGdzZjA3ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6 IFNoaWZ0LUY3ICAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19ER1NGMDggICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAgICJcXEtkZ3NmMDggICAg ICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtRjggICAgICAgICAgICAgICAgIFxuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHU0YwOSAgICAgICAgICAgOgotICAgICAgcHJp bnRmKAotICAgICAgIlxcS2Rnc2YwOSAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlm dC1GOSAgICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdT RjEwICAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgICAiXFxLZGdzZjEwICAgICAgICBU cmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUYxMCAgICAgICAgICAgICAgICBcbiIpOwotICAg ICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER1NGMTEgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigK LSAgICAgICJcXEtkZ3NmMTEgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtRjEx ICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHU0YxMiAg ICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICAgIlxcS2Rnc2YxMiAgICAgICAgVHJhbnNt aXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1GMTIgICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfREdTRjEzICAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAg ICAiXFxLZGdzZjEzICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUYxMyAgICAg ICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER1NGMTQgICAgICAg ICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAgICJcXEtkZ3NmMTQgICAgICAgIFRyYW5zbWl0IERh dGEgR2VuZXJhbDogU2hpZnQtRjE0ICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsK LSAgICBjYXNlICBLX0RHU0YxNSAgICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICAgIlxc S2Rnc2YxNSAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1GMTUgICAgICAgICAg ICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotCi0vKiBEYXRhIEdlbmVyYWwgRnVuY3Rpb24gS2V5 cyAoY29udHJvbCkgKi8KLSAgICBjYXNlICBLX0RHQ0YwMSAgICAgICAgICAgOgotICAgICAgcHJp bnRmKAotICAgICAgIlxcS2RnY2YwMSAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJs LUYxICAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0NG MDIgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgICAiXFxLZGdjZjAyICAgICAgICBU cmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtRjIgICAgICAgICAgICAgICAgIFxuIik7Ci0gICAg ICBicmVhazsKLSAgICBjYXNlICBLX0RHQ0YwMyAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigK LSAgICAgICJcXEtkZ2NmMDMgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1GMyAg ICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdDRjA0ICAg ICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICAgIlxcS2RnY2YwNCAgICAgICAgVHJhbnNt aXQgRGF0YSBHZW5lcmFsOiBDdHJsLUY0ICAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJl YWs7Ci0gICAgY2FzZSAgS19ER0NGMDUgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAg ICAiXFxLZGdjZjA1ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtRjUgICAgICAg ICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHQ0YwNiAgICAgICAg ICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAgICJcXEtkZ2NmMDYgICAgICAgIFRyYW5zbWl0IERh dGEgR2VuZXJhbDogQ3RybC1GNiAgICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwot ICAgIGNhc2UgIEtfREdDRjA3ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICAgIlxc S2RnY2YwNyAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLUY3ICAgICAgICAgICAg ICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0NGMDggICAgICAgICAgICA6 Ci0gICAgICBwcmludGYoCi0gICAgICAiXFxLZGdjZjA4ICAgICAgICBUcmFuc21pdCBEYXRhIEdl bmVyYWw6IEN0cmwtRjggICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBj YXNlICBLX0RHQ0YwOSAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAgICJcXEtkZ2Nm MDkgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1GOSAgICAgICAgICAgICAgICAg XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdDRjEwICAgICAgICAgICAgOgotICAg ICAgcHJpbnRmKAotICAgICAgIlxcS2RnY2YxMCAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFs OiBDdHJsLUYxMCAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19ER0NGMTEgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgICAiXFxLZGdjZjExICAg ICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtRjExICAgICAgICAgICAgICAgIFxuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHQ0YxMiAgICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigKLSAgICAgICJcXEtkZ2NmMTIgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3Ry bC1GMTIgICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdD RjEzICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICAgIlxcS2RnY2YxMyAgICAgICAg VHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLUYxMyAgICAgICAgICAgICAgICBcbiIpOwotICAg ICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0NGMTQgICAgICAgICAgICA6Ci0gICAgICBwcmludGYo Ci0gICAgICAiXFxLZGdjZjE0ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtRjE0 ICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHQ0YxNSAg ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAgICJcXEtkZ2NmMTUgICAgICAgIFRyYW5z bWl0IERhdGEgR2VuZXJhbDogQ3RybC1GMTUgICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJy ZWFrOwotCi0vKiBEYXRhIEdlbmVyYWwgRnVuY3Rpb24gS2V5cyAoY29udHJvbCBzaGlmdGVkKSAq LwotICAgIGNhc2UgIEtfREdDU0YwMSAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgIlxc S2RnY3NmMDEgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLVNoaWZ0LUYxICAgICAg ICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHQ1NGMDIgICAgICAg ICAgOgotICAgICAgcHJpbnRmKAotICAgICJcXEtkZ2NzZjAyICAgICAgIFRyYW5zbWl0IERhdGEg R2VuZXJhbDogQ3RybC1TaGlmdC1GMiAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19ER0NTRjAzICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAiXFxL ZGdjc2YwMyAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtU2hpZnQtRjMgICAgICAg ICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdDU0YwNCAgICAgICAg ICA6Ci0gICAgICBwcmludGYoCi0gICAgIlxcS2RnY3NmMDQgICAgICAgVHJhbnNtaXQgRGF0YSBH ZW5lcmFsOiBDdHJsLVNoaWZ0LUY0ICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsK LSAgICBjYXNlICBLX0RHQ1NGMDUgICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICJcXEtk Z2NzZjA1ICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1TaGlmdC1GNSAgICAgICAg ICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0NTRjA2ICAgICAgICAg IDoKLSAgICAgIHByaW50ZigKLSAgICAiXFxLZGdjc2YwNiAgICAgICBUcmFuc21pdCBEYXRhIEdl bmVyYWw6IEN0cmwtU2hpZnQtRjYgICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwot ICAgIGNhc2UgIEtfREdDU0YwNyAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgIlxcS2Rn Y3NmMDcgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLVNoaWZ0LUY3ICAgICAgICAg ICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHQ1NGMDggICAgICAgICAg OgotICAgICAgcHJpbnRmKAotICAgICJcXEtkZ2NzZjA4ICAgICAgIFRyYW5zbWl0IERhdGEgR2Vu ZXJhbDogQ3RybC1TaGlmdC1GOCAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19ER0NTRjA5ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAiXFxLZGdj c2YwOSAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtU2hpZnQtRjkgICAgICAgICAg ICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdDU0YxMCAgICAgICAgICA6 Ci0gICAgICBwcmludGYoCi0gICAgIlxcS2RnY3NmMTAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5l cmFsOiBDdHJsLVNoaWZ0LUYxMCAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAg ICBjYXNlICBLX0RHQ1NGMTEgICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICJcXEtkZ2Nz ZjExICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1TaGlmdC1GMTEgICAgICAgICAg ICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0NTRjEyICAgICAgICAgIDoK LSAgICAgIHByaW50ZigKLSAgICAiXFxLZGdjc2YxMiAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVy YWw6IEN0cmwtU2hpZnQtRjEyICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAg IGNhc2UgIEtfREdDU0YxMyAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgIlxcS2RnY3Nm MTMgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLVNoaWZ0LUYxMyAgICAgICAgICAg ICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHQ1NGMTQgICAgICAgICAgOgot ICAgICAgcHJpbnRmKAotICAgICJcXEtkZ2NzZjE0ICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJh bDogQ3RybC1TaGlmdC1GMTQgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19ER0NTRjE1ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAiXFxLZGdjc2Yx NSAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtU2hpZnQtRjE1ICAgICAgICAgICAg ICAgXG4iKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSAgS19ER1VQQVJSICAgICAgICAgIDoK LSAgICAgIHByaW50ZigiXFxLZGd1cGFyciAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFVw IEFycm93ICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHRE5BUlIg ICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ2RuYXJyICAgICAgIFRyYW5zbWl0IERhdGEg R2VuZXJhbDogRG93biBBcnJvdyAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug IEtfREdMRkFSUiAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2RnbGZhcnIgICAgICAgVHJh bnNtaXQgRGF0YSBHZW5lcmFsOiBMZWZ0IEFycm93ICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19ER1JUQVJSICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdydGFy ciAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFJpZ2h0IEFycm93ICAgICAgIFxuIik7Ci0g ICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHU1VQQVJSICAgICA6Ci0gICAgICBwcmludGYoIlxc S2Rnc3VwYXJyICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1VcCBBcnJvdyAgICBc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER1NETkFSUiAgICAgOgotICAgICAgcHJp bnRmKCJcXEtkZ3NkbmFyciAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtRG93biBB cnJvdyAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdTTEZBUlIgICAgIDoKLSAg ICAgIHByaW50ZigiXFxLZGdzbGZhcnIgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0 LUxlZnQgQXJyb3cgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHU1JUQVJSICAg ICA6Ci0gICAgICBwcmludGYoIlxcS2Rnc3J0YXJyICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFs OiBTaGlmdC1SaWdodCBBcnJvdyBcbiIpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlICBLX0RH RVJBU0VQQUdFICA6Ci0gICAgICBwcmludGYoIlxcS2RnZXJhc2VwYWdlICAgVHJhbnNtaXQgRGF0 YSBHZW5lcmFsOiBFcmFzZSBQYWdlICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAgS19ER0MxICAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdjMSAgICAgICAgICBU cmFuc21pdCBEYXRhIEdlbmVyYWw6IEMxICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX0RHQzIgICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ2My ICAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQzIgICAgICAgICAgICAgICAgXG4iKTsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdFUkFTRUVPTCAgIDoKLSAgICAgIHByaW50Zigi XFxLZGdlcmFzZWVvbCAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEVyYXNlIEVPTCAgICAgICAg IFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHQzMgICAgICAgICAgICAgOgotICAg ICAgcHJpbnRmKCJcXEtkZ2MzICAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQzMgICAg ICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdDNCAgICAgICAg ICAgICA6Ci0gICAgICBwcmludGYoIlxcS2RnYzQgICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5l cmFsOiBDNCAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19E R0NNRFBSSU5UICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ2NtZHByaW50ICAgIFRyYW5zbWl0IERh dGEgR2VuZXJhbDogQ29tbWFuZCBQcmludCAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfREdIT01FICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdob21lICAgICAgICBUcmFu c21pdCBEYXRhIEdlbmVyYWw6IEhvbWUgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsK LSAgICBjYXNlICBLX0RHU0VSQVNFUEFHRSA6Ci0gICAgICBwcmludGYoIlxcS2Rnc2VyYXNlcGFn ZSAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBFcmFzZSBQYWdlICAgICAgICBcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19ER1NDMSAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxL ZGdzYzEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUMxICAgICAgICAgIFxu Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHU0MyICAgICAgICAgICAgOgotICAgICAg cHJpbnRmKCJcXEtkZ3NjMiAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtQzIg ICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdTRVJBU0VFT0wgIDoK LSAgICAgIHByaW50ZigiXFxLZGdzZXJhc2Vlb2wgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNo aWZ0LUVyYXNlIEVPTCAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdTQzMgICAg ICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Rnc2MzICAgICAgICAgVHJhbnNtaXQgRGF0YSBH ZW5lcmFsOiBTaGlmdC1DMyAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19ER1NDNCAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdzYzQgICAgICAgICBUcmFu c21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUM0ICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsK LSAgICBjYXNlICBLX0RHU0NNRFBSSU5UICA6Ci0gICAgICBwcmludGYoIlxcS2Rnc2NtZHByaW50 ICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1Db21tYW5kIFByaW50XG4iKTsKLSAgICAg IGJyZWFrOwotICAgIGNhc2UgIEtfREdCUyAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdi cyAgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEJhY2tzcGFjZSAgICAgICAgIFxuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHU0hPTUUgICAgICA6Ci0gICAgICBwcmludGYo IlxcS2RzaG9tZSAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1Ib21lICAgICAg ICBcbiIpOwotICAgICAgYnJlYWs7Ci0KLQotLyogVGVsZXZpZGVvIEZ1bmN0aW9uIEtleXMgKHVu c2hpZnRlZCkgKi8KLSAgICBjYXNlICBLX1RWSUYwMSAgICAgICAgICAgOgotICAgICAgcHJpbnRm KCJcXEt0dmlmMDEgICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogRjEgICAgICAgXG4iKTsKLSAg ICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVFZJRjAyICAgICAgICAgICA6Ci0gICAgICBwcmludGYo IlxcS3R2aWYwMiAgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBGMiAgICAgICAgICAgICAgXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVFZJRjAzICAgICAgICAgICA6Ci0gICAgICBw cmludGYoIlxcS3R2aWYwMyAgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBGMyAgICAgICAgICAg ICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklGMDQgICAgICAgICAgIDoKLSAg ICAgIHByaW50ZigiXFxLdHZpZjA0ICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEY0ICAgICAg ICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklGMDUgICAgICAgICAg IDoKLSAgICAgIHByaW50ZigiXFxLdHZpZjA1ICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEY1 ICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklGMDYgICAg ICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpZjA2ICAgICAgICBUcmFuc21pdCBUZWxldmlk ZW86IEY2ICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklG MDcgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpZjA3ICAgICAgICBUcmFuc21pdCBU ZWxldmlkZW86IEY3ICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19UVklGMDggICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpZjA4ICAgICAgICBUcmFu c21pdCBUZWxldmlkZW86IEY4ICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19UVklGMDkgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpZjA5ICAgICAg ICBUcmFuc21pdCBUZWxldmlkZW86IEY5ICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19UVklGMTAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpZjEw ICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEYxMCAgICAgICAgICAgICBcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19UVklGMTEgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxL dHZpZjExICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEYxMSAgICAgICAgICAgICBcbiIpOwot ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklGMTIgICAgICAgICAgIDoKLSAgICAgIHByaW50 ZigiXFxLdHZpZjEyICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEYxMiAgICAgICAgICAgICBc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklGMTMgICAgICAgICAgIDoKLSAgICAg IHByaW50ZigiXFxLdHZpZjEzICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEYxMyAgICAgICAg ICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklGMTQgICAgICAgICAgIDoK LSAgICAgIHByaW50ZigiXFxLdHZpZjE0ICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEYxNCAg ICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklGMTUgICAgICAg ICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpZjE1ICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86 IEYxNSAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklGMTYg ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpZjE2ICAgICAgICBUcmFuc21pdCBUZWxl dmlkZW86IEYxNiAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0KLS8qIFRlbGV2aWRl byBGdW5jdGlvbiBLZXlzIChzaGlmdGVkKSAqLwotICAgIGNhc2UgIEtfVFZJU0YwMSAgICAgICAg ICA6Ci0gICAgICBwcmludGYoIlxcS3R2aXNmMDEgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBT aGlmdC1GMSBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklTRjAyICAgICAgICAg IDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2YwMiAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IFNo aWZ0LUYyIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNGMDMgICAgICAgICAg ICA6Ci0gICAgICBwcmludGYoIlxcS3R2aXNmMDMgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBT aGlmdC1GMyBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklTRjA0ICAgICAgICAg ICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzZjA0ICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzog U2hpZnQtRjQgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVFZJU0YwNSAgICAgICAg ICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2YwNSAgICAgICBUcmFuc21pdCBUZWxldmlkZW86 IFNoaWZ0LUY1IFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNGMDYgICAgICAg ICAgICA6Ci0gICAgICBwcmludGYoIlxcS3R2aXNmMDYgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVv OiBTaGlmdC1GNiBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklTRjA3ICAgICAg ICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzZjA3ICAgICAgIFRyYW5zbWl0IFRlbGV2aWRl bzogU2hpZnQtRjcgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVFZJU0YwOCAgICAg ICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2YwOCAgICAgICBUcmFuc21pdCBUZWxldmlk ZW86IFNoaWZ0LUY4IFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNGMDkgICAg ICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3R2aXNmMDkgICAgICAgVHJhbnNtaXQgVGVsZXZp ZGVvOiBTaGlmdC1GOSBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklTRjEwICAg ICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzZjEwICAgICAgIFRyYW5zbWl0IFRlbGV2 aWRlbzogU2hpZnQtRjEwXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVFZJU0YxMSAg ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2YxMSAgICAgICBUcmFuc21pdCBUZWxl dmlkZW86IFNoaWZ0LUYxMVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNGMTIg ICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3R2aXNmMTIgICAgICAgVHJhbnNtaXQgVGVs ZXZpZGVvOiBTaGlmdC1GMTJcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklTRjEz ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzZjEzICAgICAgIFRyYW5zbWl0IFRl bGV2aWRlbzogU2hpZnQtRjEzXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVFZJU0Yx NCAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2YxNCAgICAgICBUcmFuc21pdCBU ZWxldmlkZW86IFNoaWZ0LUYxNFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNG MTUgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3R2aXNmMTUgICAgICAgVHJhbnNtaXQg VGVsZXZpZGVvOiBTaGlmdC1GMTVcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklT RjE2ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzZjE2ICAgICAgIFRyYW5zbWl0 IFRlbGV2aWRlbzogU2hpZnQtRjE2XG4iKTsKLSAgICAgIGJyZWFrOwotCi0vKiBUZWxldmlkZW8g RWRpdCBhbmQgU3BlY2lhbCBLZXlzICovCi0gICAgY2FzZSAgS19UVklCUyAgICAgICAgIDoKLSAg ICAgIHByaW50ZigiXFxLdHZpYnMgICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEJhY2tzcGFj ZSAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklDTFJMTiAgICAgICAg IDoKLSAgICAgIHByaW50ZigiXFxLdHZpY2xybG4gICAgICBUcmFuc21pdCBUZWxldmlkZW86IENs ZWFyIExpbmUgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklTQ0xSTE4g ICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2NscmxuICAgICBUcmFuc21pdCBUZWxldmlkZW86 IFNoaWZ0LUNsZWFyIExpbmVcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklDTFJQ RyAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpY2xycGcgICAgICBUcmFuc21pdCBUZWxldmlk ZW86IENsZWFyIFBhZ2UgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklT Q0xSUEcgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2NscnBnICAgICBUcmFuc21pdCBUZWxl dmlkZW86IFNoaWZ0LUNsZWFyIFBhZ2VcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19U VklERUxDSEFSICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpZGVsY2hhciAgICBUcmFuc21pdCBU ZWxldmlkZW86IERlbGV0ZSBDaGFyICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19UVklERUxMTiAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpZGVsbG4gICAgICBUcmFuc21p dCBUZWxldmlkZW86IERlbGV0ZSBMaW5lICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAgS19UVklFTlRFUiAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpZW50ZXIgICAgICBU cmFuc21pdCBUZWxldmlkZW86IEVudGVyICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19UVklFU0MgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpZXNjICAg ICAgICBUcmFuc21pdCBUZWxldmlkZW86IEVzYyAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJl YWs7Ci0gICAgY2FzZSAgS19UVklIT01FICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZp aG9tZSAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEhvbWUgICAgICAgICAgICBcbiIpOwotICAg ICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklTSE9NRSAgICAgICAgIDoKLSAgICAgIHByaW50Zigi XFxLdHZpc2hvbWUgICAgICBUcmFuc21pdCBUZWxldmlkZW86IFNoaWZ0LUhvbWUgICAgICBcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklJTlNFUlQgICAgIDoKLSAgICAgIHByaW50 ZigiXFxLdHZpaW5zZXJ0ICAgICBUcmFuc21pdCBUZWxldmlkZW86IEluc2VydCAgICAgICAgICBc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklJTlNDSEFSICAgIDoKLSAgICAgIHBy aW50ZigiXFxLdHZpaW5zY2hhciAgICBUcmFuc21pdCBUZWxldmlkZW86IEluc2VydCBDaGFyICAg ICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklJTlNMTiAgICAgICAgIDoKLSAg ICAgIHByaW50ZigiXFxLdHZpaW5zbG4gICAgICBUcmFuc21pdCBUZWxldmlkZW86IEluc2VydCBM aW5lICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklQR05FWFQgICAgIDoK LSAgICAgIHByaW50ZigiXFxLdHZpcGduZXh0ICAgICBUcmFuc21pdCBUZWxldmlkZW86IFBhZ2Ug TmV4dCAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklQR1BSRVYgICAg IDoKLSAgICAgIHByaW50ZigiXFxLdHZpcGdwcmV2ICAgICBUcmFuc21pdCBUZWxldmlkZW86IFBh Z2UgUHJldmlvdXMgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklSRVBMQUNF ICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpcmVwbGFjZSAgICBUcmFuc21pdCBUZWxldmlkZW86 IFJlcGxhY2UgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklSRVRV Uk4gICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpcmV0dXJuICAgICBUcmFuc21pdCBUZWxldmlk ZW86IFJldHVybiAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklU QUIgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpdGFiICAgICAgICBUcmFuc21pdCBU ZWxldmlkZW86IFRhYiAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19UVklTVEFCICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc3RhYiAgICAgICBUcmFu c21pdCBUZWxldmlkZW86IFNoaWZ0LVRhYiAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19UVklQUlRTQ04gICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpcHJ0c2NuICAgICBU cmFuc21pdCBUZWxldmlkZW86IFByaW50IFNjcmVlbiAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19UVklTRVNDICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2VzYyAgICAg ICBUcmFuc21pdCBUZWxldmlkZW86IFNoaWZ0LUVzYyAgICAgICBcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19UVklTQlMgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2JzICAg ICAgICBUcmFuc21pdCBUZWxldmlkZW86IFNoaWZ0LUJhY2tzcGFjZSBcbiIpOwotICAgICAgYnJl YWs7Ci0gICAgY2FzZSAgS19UVklTRU5URVIgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2Vu dGVyICAgICBUcmFuc21pdCBUZWxldmlkZW86IFNoaWZ0LUVudGVyICAgICBcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19UVklTUkVUVVJOICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZp c3JldHVybiAgICBUcmFuc21pdCBUZWxldmlkZW86IFNoaWZ0LVJldHVybiAgICBcbiIpOwotICAg ICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklVUEFSUiAgICAgICAgIDoKLSAgICAgIHByaW50Zigi XFxLdHZpdXBhcnIgICAgICBUcmFuc21pdCBUZWxldmlkZW86IFVwIEFycm93ICAgICAgICBcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklETkFSUiAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLdHZpZG5hcnIgICAgICBUcmFuc21pdCBUZWxldmlkZW86IERvd24gQXJyb3cgICAg ICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklMRkFSUiAgICAgICAgIDoKLSAg ICAgIHByaW50ZigiXFxLdHZpbGZhcnIgICAgICBUcmFuc21pdCBUZWxldmlkZW86IExlZnQgQXJy b3cgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklSVEFSUiAgICAgICAg IDoKLSAgICAgIHByaW50ZigiXFxLdHZpcnRhcnIgICAgICBUcmFuc21pdCBUZWxldmlkZW86IFJp Z2h0IEFycm93ICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklTVVBBUlIg ICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc3VwYXJyICAgICBUcmFuc21pdCBUZWxldmlkZW86 IFNoaWZ0LVVwIEFycm93ICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklTRE5B UlIgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2RuYXJyICAgICBUcmFuc21pdCBUZWxldmlk ZW86IFNoaWZ0LURvd24gQXJyb3dcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklT TEZBUlIgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2xmYXJyICAgICBUcmFuc21pdCBUZWxl dmlkZW86IFNoaWZ0LUxlZnQgQXJyb3dcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19U VklTUlRBUlIgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc3J0YXJyICAgICBUcmFuc21pdCBU ZWxldmlkZW86IFNoaWZ0LVJpZ2h0IEFycm93XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug S19UVklTRU5EOgotICAgICAgcHJpbnRmKCJcXEt0dmlzZW5kICAgICAgIFRyYW5zbWl0IFRlbGV2 aWRlbzogU2VuZFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEtfVFZJU1NFTkQ6Ci0gICAg ICBwcmludGYoIlxcS3R2aXNzZW5kICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBTaGlmdC1TZW5k XG4iKTsKLSAgICAgIGJyZWFrOwotCi0vKiBIUCBGdW5jdGlvbiBhbmQgRWRpdCBrZXlzICovCi0g ICAgY2FzZSAgS19IUEYwMSAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLaHBmMDEgICAg ICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IEYxICAgICAgIFxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX0hQRjAyICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtocGYw MiAgICAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogRjIgICAgICAgICAgICAgIFxuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0hQRjAzICAgICAgICAgICAgOgotICAgICAgcHJp bnRmKCJcXEtocGYwMyAgICAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogRjMgICAgICAg ICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfSFBGMDQgICAgICAgICAgICA6 Ci0gICAgICBwcmludGYoIlxcS2hwZjA0ICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJk OiBGNCAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfSFBGMDUg ICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2hwZjA1ICAgICAgICAgVHJhbnNtaXQgSGV3 bGV0dC1QYWNrYXJkOiBGNSAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfSFBGMDYgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2hwZjA2ICAgICAgICAg VHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGNiAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfSFBGMDcgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2hw ZjA3ICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGNyAgICAgICAgICAgICAgXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfSFBGMDggICAgICAgICAgICA6Ci0gICAgICBw cmludGYoIlxcS2hwZjA4ICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGOCAgICAg ICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfSFBGMDkgICAgICAgICAg ICA6Ci0gICAgICBwcmludGYoIlxcS2hwZjA5ICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNr YXJkOiBGOSAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfSFBG MTAgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2hwZjEwICAgICAgICAgVHJhbnNtaXQg SGV3bGV0dC1QYWNrYXJkOiBGMTAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAg IGNhc2UgIEtfSFBGMTEgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2hwZjExICAgICAg ICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGMTEgICAgICAgICAgICAgXG4iKTsKLSAgICAg IGJyZWFrOwotICAgIGNhc2UgIEtfSFBGMTIgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxc S2hwZjEyICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGMTIgICAgICAgICAgICAg XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfSFBGMTMgICAgICAgICAgICA6Ci0gICAg ICBwcmludGYoIlxcS2hwZjEzICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGMTMg ICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfSFBGMTQgICAgICAg ICAgICA6Ci0gICAgICBwcmludGYoIlxcS2hwZjE0ICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1Q YWNrYXJkOiBGMTQgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtf SFBGMTUgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2hwZjE1ICAgICAgICAgVHJhbnNt aXQgSGV3bGV0dC1QYWNrYXJkOiBGMTUgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwot ICAgIGNhc2UgIEtfSFBGMTYgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2hwZjE2ICAg ICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGMTYgICAgICAgICAgICAgXG4iKTsKLSAg ICAgIGJyZWFrOwotICAgIGNhc2UgIEtfSFBSRVRVUk4gICAgIDoKLSAgICAgIHByaW50ZigiXFxL aHByZXR1cm4gICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IFJldHVyblxuIik7Ci0gICAg ICBicmVhazsKLSAgICBjYXNlICBLX0hQRU5URVIgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJc XEtocGVudGVyICAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogRW50ZXIgKGtleXBhZClc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19IUEJBQ0tUQUIgICAgICAgIDoKLSAgICAg IHByaW50ZigiXFxLaHBiYWNrdGFiICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IEJhY2sg VGFiXG4iKTsKLSAgICAgIGJyZWFrOwotICAgICAgICAvKiBTaWVtZW5zIE5peGRvcmYgSW50ZXJu YXRpb25hbCA5NzgwMS01eHgga3ZlcmJzICovCi0gICAgY2FzZSBLX1NOSV9ET1VCTEVfMCAgICAg IDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfMDAgICAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAx LTV4eDogRG91YmxlLVplcm9cbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0Nf RE9VQkxFXzAgICAgOgotICAgICAgICBwcmludGYoCi0iXFxLc25pX2NfMDAgICAgICAgIFRyYW5z bWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRG91YmxlLVplcm9cbiIpOwotICAgICAgICBicmVhazsK LSAgICBjYXNlIEtfU05JX0NfQ0UgICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9j X2NlICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUNFXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0NPTVBPU0UgICAgIDoKLSAgICAgICAgcHJpbnRmKCJc XEtzbmlfY19jb21wb3NlICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1Db21wb3NlXG4i KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0RFTEVURV9DSEFSIDoKLSAgICAg ICAgcHJpbnRmKAotIlxcS3NuaV9jX2RlbF9jaGFyICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBD dHJsLURlbGV0ZSBDaGFyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0RF TEVURV9MSU5FIDoKLSAgICAgICAgcHJpbnRmKAotIlxcS3NuaV9jX2RlbF9saW5lICBUcmFuc21p dCBTTkktOTc4MDEtNXh4OiBDdHJsLURlbGV0ZSBMaW5lXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSBLX1NOSV9DX0RFTEVURV9XT1JEIDoKLSAgICAgICAgcHJpbnRmKAotIlxcS3NuaV9j X2RlbF93b3JkICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLURlbGV0ZSBXb3JkXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0NVUlNPUl9ET1dOIDoKLSAgICAgICAg cHJpbnRmKAotIlxcS3NuaV9jX2RuYXJyICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJs LUN1cnNvciBEb3duXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0VORE1B UktFICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19lbmRtYXJrZSAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogQ3RybC1FbmQgTWFya2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl IEtfU05JX0NfRjAxICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YwMSAgICAg ICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYxXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSBLX1NOSV9DX0YwMiAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19m MDIgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GMlxuIik7Ci0gICAgICAgIGJy ZWFrOwotICAgIGNhc2UgS19TTklfQ19GMDMgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxL c25pX2NfZjAzICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjNcbiIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfRjA0ICAgICAgICAgOgotICAgICAgICBwcmlu dGYoIlxcS3NuaV9jX2YwNCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUY0XG4i KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0YwNSAgICAgICAgIDoKLSAgICAg ICAgcHJpbnRmKCJcXEtzbmlfY19mMDUgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3Ry bC1GNVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ19GMDYgICAgICAgICA6 Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2NfZjA2ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01 eHg6IEN0cmwtRjZcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfRjA3ICAg ICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YwNyAgICAgICBUcmFuc21pdCBTTkkt OTc4MDEtNXh4OiBDdHJsLUY3XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9D X0YwOCAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19mMDggICAgICAgVHJhbnNt aXQgU05JLTk3ODAxLTV4eDogQ3RybC1GOFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug S19TTklfQ19GMDkgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2NfZjA5ICAgICAg IFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjlcbiIpOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIEtfU05JX0NfRjEwICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9jX2Yx MCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYxMFxuIik7Ci0gICAgICAgIGJy ZWFrOwotICAgIGNhc2UgS19TTklfQ19GMTEgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxL c25pX2NfZjExICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjExXG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0YxMiAgICAgICAgIDoKLSAgICAgICAgcHJp bnRmKCJcXEtzbmlfY19mMTIgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GMTJc biIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfRjEzICAgICAgICAgOgotICAg ICAgICBwcmludGYoIlxcS3NuaV9jX2YxMyAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBD dHJsLUYxM1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ19GMTQgICAgICAg ICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2NfZjE0ICAgICAgIFRyYW5zbWl0IFNOSS05Nzgw MS01eHg6IEN0cmwtRjE0XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0Yx NSAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19mMTUgICAgICAgVHJhbnNtaXQg U05JLTk3ODAxLTV4eDogQ3RybC1GMTVcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtf U05JX0NfRjE2ICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YxNiAgICAgICBU cmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYxNlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAg IGNhc2UgS19TTklfQ19GMTcgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2NfZjE3 ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjE3XG4iKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSBLX1NOSV9DX0YxOCAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtz bmlfY19mMTggICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GMThcbiIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfVVNFUjEgICAgICAgIDoKLSAgICAgICAgcHJp bnRmKAotIlxcS3NuaV9jX3VzZXIxICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUtl eSBiZWxvdyBGMThcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfRjE5ICAg ICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YxOSAgICAgICBUcmFuc21pdCBTTkkt OTc4MDEtNXh4OiBDdHJsLUYxOVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklf Q19VU0VSMiAgICAgICA6Ci0gICAgICAgIHByaW50ZigKLSJcXEtzbmlfY191c2VyMiAgICAgVHJh bnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1LZXkgYmVsb3cgRjE5XG4iKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSBLX1NOSV9DX0YyMCAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtz bmlfY19mMjAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GMjBcbiIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfVVNFUjMgICAgICAgOgotICAgICAgICBwcmlu dGYoCi0iXFxLc25pX2NfdXNlcjMgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtS2V5 IGJlbG93IEYyMFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ19GMjEgICAg ICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2NfZjIxICAgICAgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IEN0cmwtRjIxXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9D X1VTRVI0ICAgICAgIDoKLSAgICAgICAgcHJpbnRmKAotIlxcS3NuaV9jX3VzZXI0ICAgICBUcmFu c21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUtleSBiZWxvdyBGMjFcbiIpOwotICAgICAgICBicmVh azsKLSAgICBjYXNlIEtfU05JX0NfRjIyICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3Nu aV9jX2YyMiAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYyMlxuIik7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ19VU0VSNSAgICAgICA6Ci0gICAgICAgIHByaW50 ZigKLSJcXEtzbmlfY191c2VyNSAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1LZXkg YmVsb3cgRjIyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0hFTFAgICAg ICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19oZWxwICAgICAgVHJhbnNtaXQgU05JLTk3 ODAxLTV4eDogQ3RybC1IZWxwXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9D X0hPTUUgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19ob21lICAgICAgVHJhbnNt aXQgU05JLTk3ODAxLTV4eDogQ3RybC1Ib21lXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSBLX1NOSV9DX0lOU0VSVF9DSEFSIDoKLSAgICAgICAgcHJpbnRmKAotIlxcS3NuaV9jX2luc19j aGFyICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUluc2VydCBDaGFyXG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0lOU0VSVF9MSU5FIDoKLSAgICAgICAgcHJpbnRm KAotIlxcS3NuaV9jX2luc19saW5lICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUluc2Vy dCBMaW5lXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0lOU0VSVF9XT1JE IDoKLSAgICAgICAgcHJpbnRmKAotIlxcS3NuaV9jX2luc193b3JkICBUcmFuc21pdCBTTkktOTc4 MDEtNXh4OiBDdHJsLUluc2VydCBXb3JkXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBL X1NOSV9DX0xFRlRfVEFCICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19sZWZ0X3RhYiAg VHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1MZWZ0IFRhYlxuIik7Ci0gICAgICAgIGJyZWFr OwotICAgIGNhc2UgS19TTklfQ19DVVJTT1JfTEVGVCA6Ci0gICAgICAgIHByaW50ZigKLSJcXEtz bmlfY19sZmFyciAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1DdXJzb3IgTGVmdFxu Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ19NT0RFICAgICAgICA6Ci0gICAg ICAgIHByaW50ZigiXFxLc25pX2NfbW9kZSAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0 cmwtTW9kZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ19QQUdFICAgICAg ICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2NfcGFnZSAgICAgIFRyYW5zbWl0IFNOSS05Nzgw MS01eHg6IEN0cmwtUGFnZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ19Q UklOVCAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2NfcHJpbnQgICAgIFRyYW5zbWl0 IFNOSS05NzgwMS01eHg6IEN0cmwtUHJpbnRcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl IEtfU05JX0NfQ1VSU09SX1JJR0hUOgotICAgICAgICBwcmludGYoCi0iXFxLc25pX2NfcnRhcnIg ICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtQ3Vyc29yIFJpZ2h0XG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX1NDUk9MTF9ET1dOIDoKLSAgICAgICAgcHJpbnRm KAotIlxcS3NuaV9jX3Njcm9sbF9kbiBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLVNjcm9s bCBEb3duXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX1NDUk9MTF9VUCAg IDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19zY3JvbGxfdXAgVHJhbnNtaXQgU05JLTk3ODAx LTV4eDogQ3RybC1TY3JvbGwgVXBcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05J X0NfU1RBUlQgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9jX3N0YXJ0ICAgICBUcmFu c21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLVN0YXJ0XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg Y2FzZSBLX1NOSV9DX0NVUlNPUl9VUCAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY191cGFy ciAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1DdXJzb3IgVXBcbiIpOwotICAgICAg ICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfVEFCICAgICAgICAgOgotICAgICAgICBwcmludGYo IlxcS3NuaV9jX3RhYiAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLVRhYlxuIik7 Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ0UgICAgICAgICAgICA6Ci0gICAgICAg IHByaW50ZigiXFxLc25pX2NlICAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IENFXG4i KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DSF9DT0RFOgotICAgICAgICBwcmlu dGYoIlxcS3NuaV9jaF9jb2RlICAgICBUb2dnbGUgU05JLTk3ODAxLTV4eDogQ0guQ09ERSBmdW5j dGlvbi5cbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NPTVBPU0UgICAgICAg OgotICAgICAgICBwcmludGYoIlxcS3NuaV9jb21wb3NlICAgICBUcmFuc21pdCBTTkktOTc4MDEt NXh4OiBDb21wb3NlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9ERUxFVEVf Q0hBUiAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfZGVsX2NoYXIgICAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogRGVsZXRlIENoYXJcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtf U05JX0RFTEVURV9MSU5FICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9kZWxfbGluZSAgICBU cmFuc21pdCBTTkktOTc4MDEtNXh4OiBEZWxldGUgTGluZVxuIik7Ci0gICAgICAgIGJyZWFrOwot ICAgIGNhc2UgS19TTklfREVMRVRFX1dPUkQgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2Rl bF93b3JkICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IERlbGV0ZSBXb3JkXG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DVVJTT1JfRE9XTiAgIDoKLSAgICAgICAgcHJpbnRm KCJcXEtzbmlfZG5hcnIgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3Vyc29yIERvd25c biIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0VORE1BUktFICAgICAgOgotICAg ICAgICBwcmludGYoIlxcS3NuaV9lbmRtYXJrZSAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBF bmQgTWFya2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0YwMSAgICAgICAg ICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9mMDEgICAgICAgICBUcmFuc21pdCBTTkktOTc4 MDEtNXh4OiBGMVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfRjAyICAgICAg ICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2YwMiAgICAgICAgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IEYyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9GMDMgICAg ICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjAzICAgICAgICAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogRjNcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0YwNCAg ICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9mMDQgICAgICAgICBUcmFuc21pdCBT TkktOTc4MDEtNXh4OiBGNFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfRjA1 ICAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2YwNSAgICAgICAgIFRyYW5zbWl0 IFNOSS05NzgwMS01eHg6IEY1XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9G MDYgICAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjA2ICAgICAgICAgVHJhbnNt aXQgU05JLTk3ODAxLTV4eDogRjZcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05J X0YwNyAgICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9mMDcgICAgICAgICBUcmFu c21pdCBTTkktOTc4MDEtNXh4OiBGN1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19T TklfRjA4ICAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2YwOCAgICAgICAgIFRy YW5zbWl0IFNOSS05NzgwMS01eHg6IEY4XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBL X1NOSV9GMDkgICAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjA5ICAgICAgICAg VHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjlcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl IEtfU05JX0YxMCAgICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9mMTAgICAgICAg ICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTBcbiIpOwotICAgICAgICBicmVhazsKLSAgICBj YXNlIEtfU05JX0YxMSAgICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9mMTEgICAg ICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTFcbiIpOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIEtfU05JX0YxMiAgICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9mMTIg ICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTJcbiIpOwotICAgICAgICBicmVhazsK LSAgICBjYXNlIEtfU05JX0YxMyAgICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9m MTMgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTNcbiIpOwotICAgICAgICBicmVh azsKLSAgICBjYXNlIEtfU05JX0YxNCAgICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3Nu aV9mMTQgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTRcbiIpOwotICAgICAgICBi cmVhazsKLSAgICBjYXNlIEtfU05JX0YxNSAgICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxc S3NuaV9mMTUgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTVcbiIpOwotICAgICAg ICBicmVhazsKLSAgICBjYXNlIEtfU05JX0YxNiAgICAgICAgICAgOgotICAgICAgICBwcmludGYo IlxcS3NuaV9mMTYgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTZcbiIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0YxNyAgICAgICAgICAgOgotICAgICAgICBwcmlu dGYoIlxcS3NuaV9mMTcgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTdcbiIpOwot ICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0YxOCAgICAgICAgICAgOgotICAgICAgICBw cmludGYoIlxcS3NuaV9mMTggICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMThcbiIp OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1VTRVIxICAgICAgICAgIDoKLSAgICAg ICAgcHJpbnRmKCJcXEtzbmlfdXNlcjEgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogS2V5 IGJlbG93IEYxOFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfRjE5ICAgICAg ICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2YxOSAgICAgICAgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IEYxOVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfVVNFUjIg ICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV91c2VyMiAgICAgICBUcmFuc21pdCBT TkktOTc4MDEtNXh4OiBLZXkgYmVsb3cgRjE5XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSBLX1NOSV9GMjAgICAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjIwICAgICAg ICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjIwXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg Y2FzZSBLX1NOSV9VU0VSMyAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3VzZXIz ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEtleSBiZWxvdyBGMjBcbiIpOwotICAgICAg ICBicmVhazsKLSAgICBjYXNlIEtfU05JX0YyMSAgICAgICAgICAgOgotICAgICAgICBwcmludGYo IlxcS3NuaV9mMjEgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMjFcbiIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1VTRVI0ICAgICAgICAgIDoKLSAgICAgICAgcHJp bnRmKCJcXEtzbmlfdXNlcjQgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogS2V5IGJlbG93 IEYyMVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfRjIyICAgICAgICAgICA6 Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2YyMiAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01 eHg6IEYyMlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfVVNFUjUgICAgICAg ICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV91c2VyNSAgICAgICBUcmFuc21pdCBTTkktOTc4 MDEtNXh4OiBLZXkgYmVsb3cgRjIyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NO SV9IRUxQICAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfaGVscCAgICAgICAgVHJh bnNtaXQgU05JLTk3ODAxLTV4eDogSGVscFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug S19TTklfSE9NRSAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2hvbWUgICAgICAg IFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEhvbWVcbiIpOwotICAgICAgICBicmVhazsKLSAgICBj YXNlIEtfU05JX0lOU0VSVF9DSEFSICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9pbnNfY2hh ciAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBJbnNlcnQgQ2hhclxuIik7Ci0gICAgICAgIGJy ZWFrOwotICAgIGNhc2UgS19TTklfSU5TRVJUX0xJTkUgICA6Ci0gICAgICAgIHByaW50ZigiXFxL c25pX2luc19saW5lICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEluc2VydCBMaW5lXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9JTlNFUlRfV09SRCAgIDoKLSAgICAgICAg cHJpbnRmKCJcXEtzbmlfaW5zX3dvcmQgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogSW5zZXJ0 IFdvcmRcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0xFRlRfVEFCICAgICAg OgotICAgICAgICBwcmludGYoIlxcS3NuaV9sZWZ0X3RhYiAgICBUcmFuc21pdCBTTkktOTc4MDEt NXh4OiBMZWZ0IFRhYlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ1VSU09S X0xFRlQgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2xmYXJyICAgICAgIFRyYW5zbWl0IFNO SS05NzgwMS01eHg6IEN1cnNvciBMZWZ0XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBL X1NOSV9NT0RFICAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfbW9kZSAgICAgICAg VHJhbnNtaXQgU05JLTk3ODAxLTV4eDogTW9kZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh c2UgS19TTklfUEFHRSAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3BhZ2UgICAg ICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFBhZ2VcbiIpOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIEtfU05JX1BSSU5UICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9wcmlu dCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBQcmludFxuIik7Ci0gICAgICAgIGJyZWFr OwotICAgIGNhc2UgS19TTklfQ1VSU09SX1JJR0hUICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25p X3J0YXJyICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN1cnNvciBSaWdodFxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfU19ET1VCTEVfMCAgICA6Ci0gICAgICAgIHBy aW50ZigKLSJcXEtzbmlfc18wMCAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQt RG91YmxlLVplcm9cbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfQ0UgICAg ICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9zX2NlICAgICAgICBUcmFuc21pdCBTTkkt OTc4MDEtNXh4OiBTaGlmdC1DRVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklf U19DT01QT1NFICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3NfY29tcG9zZSAgIFRyYW5z bWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUNvbXBvc2VcbiIpOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIEtfU05JX1NfREVMRVRFX0NIQVIgOgotICAgICAgICBwcmludGYoCi0iXFxLc25pX3Nf ZGVsX2NoYXIgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LURlbGV0ZSBDaGFyXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0RFTEVURV9MSU5FIDoKLSAgICAgICAg cHJpbnRmKAotIlxcS3NuaV9zX2RlbF9saW5lICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlm dC1EZWxldGUgTGluZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfU19ERUxF VEVfV09SRCA6Ci0gICAgICAgIHByaW50ZigKLSJcXEtzbmlfc19kZWxfd29yZCAgVHJhbnNtaXQg U05JLTk3ODAxLTV4eDogU2hpZnQtRGVsZXRlIFdvcmRcbiIpOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIEtfU05JX1NfQ1VSU09SX0RPV04gOgotICAgICAgICBwcmludGYoCi0iXFxLc25pX3Nf ZG5hcnIgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUN1cnNvciBEb3duXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0VORE1BUktFICAgIDoKLSAgICAgICAg cHJpbnRmKCJcXEtzbmlfc19lbmRtYXJrZSAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQt RW5kIE1hcmtlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0YwMSAgICAg ICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMDEgICAgICAgVHJhbnNtaXQgU05JLTk3 ODAxLTV4eDogU2hpZnQtRjFcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1Nf RjAyICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9zX2YwMiAgICAgICBUcmFuc21p dCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GMlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug S19TTklfU19GMDMgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3NfZjAzICAgICAg IFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYzXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSBLX1NOSV9TX0YwNCAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19m MDQgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjRcbiIpOwotICAgICAgICBi cmVhazsKLSAgICBjYXNlIEtfU05JX1NfRjA1ICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxc S3NuaV9zX2YwNSAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GNVxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfU19GMDYgICAgICAgICA6Ci0gICAgICAgIHBy aW50ZigiXFxLc25pX3NfZjA2ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUY2 XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0YwNyAgICAgICAgIDoKLSAg ICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMDcgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDog U2hpZnQtRjdcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfRjA4ICAgICAg ICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9zX2YwOCAgICAgICBUcmFuc21pdCBTTkktOTc4 MDEtNXh4OiBTaGlmdC1GOFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfU19G MDkgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3NfZjA5ICAgICAgIFRyYW5zbWl0 IFNOSS05NzgwMS01eHg6IFNoaWZ0LUY5XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBL X1NOSV9TX0YxMCAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMTAgICAgICAg VHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjEwXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSBLX1NOSV9TX0YxMSAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19m MTEgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjExXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0YxMiAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJc XEtzbmlfc19mMTIgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjEyXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0YxMyAgICAgICAgIDoKLSAgICAgICAg cHJpbnRmKCJcXEtzbmlfc19mMTMgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQt RjEzXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0YxNCAgICAgICAgIDoK LSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMTQgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4 eDogU2hpZnQtRjE0XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0YxNSAg ICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMTUgICAgICAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogU2hpZnQtRjE1XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NO SV9TX0YxNiAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMTYgICAgICAgVHJh bnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjE2XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg Y2FzZSBLX1NOSV9TX0YxNyAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMTcg ICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjE3XG4iKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSBLX1NOSV9TX0YxOCAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtz bmlfc19mMTggICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjE4XG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX1VTRVIxICAgICAgICA6Ci0gICAgICAgIHBy aW50ZigKLSJcXEtzbmlfc191c2VyMSAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQt S2V5IGJlbG93IEYxOFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfU19GMTkg ICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3NfZjE5ICAgICAgIFRyYW5zbWl0IFNO SS05NzgwMS01eHg6IFNoaWZ0LUYxOVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19T TklfU19VU0VSMiAgICAgICA6Ci0gICAgICAgIHByaW50ZigKLSJcXEtzbmlfc191c2VyMiAgICAg VHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtS2V5IGJlbG93IEYxOVxuIik7Ci0gICAgICAg IGJyZWFrOwotICAgIGNhc2UgS19TTklfU19GMjAgICAgICAgICA6Ci0gICAgICAgIHByaW50Zigi XFxLc25pX3NfZjIwICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYyMFxuIik7 Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfU19VU0VSMyAgICAgICA6Ci0gICAgICAg IHByaW50ZigKLSJcXEtzbmlfc191c2VyMyAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hp ZnQtS2V5IGJlbG93IEYyMFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfU19G MjEgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3NfZjIxICAgICAgIFRyYW5zbWl0 IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYyMVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug S19TTklfU19VU0VSNCAgICAgICA6Ci0gICAgICAgIHByaW50ZigKLSJcXEtzbmlfc191c2VyNCAg ICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtS2V5IGJlbG93IEYyMVxuIik7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfU19GMjIgICAgICAgICA6Ci0gICAgICAgIHByaW50 ZigiXFxLc25pX3NfZjIyICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYyMlxu Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfU19VU0VSNSAgICAgICA6Ci0gICAg ICAgIHByaW50ZigKLSJcXEtzbmlfc191c2VyNSAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDog U2hpZnQtS2V5IGJlbG93IEYyMlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklf U19IRUxQICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3NfaGVscCAgICAgIFRyYW5z bWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUhlbHBcbiIpOwotICAgICAgICBicmVhazsKLSAgICBj YXNlIEtfU05JX1NfSE9NRSAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9zX2hvbWUg ICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1Ib21lXG4iKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSBLX1NOSV9TX0lOU0VSVF9DSEFSIDoKLSAgICAgICAgcHJpbnRmKAotIlxc S3NuaV9zX2luc19jaGFyICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1JbnNlcnQgQ2hh clxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfU19JTlNFUlRfTElORSA6Ci0g ICAgICAgIHByaW50ZigKLSJcXEtzbmlfc19pbnNfbGluZSAgVHJhbnNtaXQgU05JLTk3ODAxLTV4 eDogU2hpZnQtSW5zZXJ0IExpbmVcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05J X1NfSU5TRVJUX1dPUkQgOgotICAgICAgICBwcmludGYoCi0iXFxLc25pX3NfaW5zX3dvcmQgIFRy YW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUluc2VydCBXb3JkXG4iKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSBLX1NOSV9TX0xFRlRfVEFCICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtz bmlfc19sZWZ0X3RhYiAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtTGVmdCBUYWJcbiIp OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfQ1VSU09SX0xFRlQgOgotICAgICAg ICBwcmludGYoCi0iXFxLc25pX3NfbGZhcnIgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNo aWZ0LUN1cnNvciBMZWZ0XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX01P REUgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19tb2RlICAgICAgVHJhbnNtaXQg U05JLTk3ODAxLTV4eDogU2hpZnQtTW9kZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug S19TTklfU19QQUdFICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3NfcGFnZSAgICAg IFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LVBhZ2VcbiIpOwotICAgICAgICBicmVhazsK LSAgICBjYXNlIEtfU05JX1NfUFJJTlQgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9z X3ByaW50ICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1QcmludFxuIik7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfU19DVVJTT1JfUklHSFQ6Ci0gICAgICAgIHByaW50 ZigKLSJcXEtzbmlfc19ydGFyciAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtQ3Vy c29yIFJpZ2h0XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX1NDUk9MTF9E T1dOIDoKLSAgICAgICAgcHJpbnRmKAotIlxcS3NuaV9zX3Njcm9sbF9kbiBUcmFuc21pdCBTTkkt OTc4MDEtNXh4OiBTaGlmdC1TY3JvbGwgRG93blxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh c2UgS19TTklfU19TQ1JPTExfVVAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3Nfc2Nyb2xs X3VwIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LVNjcm9sbCBVcFxuIik7Ci0gICAgICAg IGJyZWFrOwotICAgIGNhc2UgS19TTklfU19TVEFSVCAgICAgICA6Ci0gICAgICAgIHByaW50Zigi XFxLc25pX3Nfc3RhcnQgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LVN0YXJ0XG4i KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0NVUlNPUl9VUCAgIDoKLSAgICAg ICAgcHJpbnRmKCJcXEtzbmlfc191cGFyciAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hp ZnQtQ3Vyc29yIFVwXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX1RBQiAg ICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc190YWIgICAgICAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogU2hpZnQtVGFiXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NO SV9TQ1JPTExfRE9XTiAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc2Nyb2xsX2RuICAgVHJh bnNtaXQgU05JLTk3ODAxLTV4eDogU2Nyb2xsIERvd25cbiIpOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIEtfU05JX1NDUk9MTF9VUCAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9zY3Jv bGxfdXAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTY3JvbGwgVXBcbiIpOwotICAgICAgICBi cmVhazsKLSAgICBjYXNlIEtfU05JX1NUQVJUICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxc S3NuaV9zdGFydCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTdGFydFxuIik7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfVEFCICAgICAgICAgICA6Ci0gICAgICAgIHByaW50 ZigiXFxLc25pX3RhYiAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFRhYlxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ1VSU09SX1VQICAgICA6Ci0gICAgICAgIHBy aW50ZigiXFxLc25pX3VwYXJyICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN1cnNvciBV cFxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBLX0JBODBfQVRUUjoKLSAgICAgICAg cHJpbnRmKCJcXEtiYTgwX2F0dHIgICAgICAgVHJhbnNtaXQgQkE4MDogQXR0clxuIik7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX0NfS0VZOgotICAgICAgICBwcmludGYoIlxcS2Jh ODBfY19rZXkgICAgICBUcmFuc21pdCBCQTgwOiBDXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg Y2FzZSBLX0JBODBfQ0xFQVI6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9jbGVhciAgICAgIFRy YW5zbWl0IEJBODA6IENsZWFyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBf Q01EOgotICAgICAgICBwcmludGYoIlxcS2JhODBfY21kICAgICAgICBUcmFuc21pdCBCQTgwOiBD bWRcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9DT1BZOgotICAgICAgICBw cmludGYoIlxcS2JhODBfY29weSAgICAgICBUcmFuc21pdCBCQTgwOiBDb3B5XG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfREVMOgotICAgICAgICBwcmludGYoIlxcS2JhODBf ZGVsICAgICAgICBUcmFuc21pdCBCQTgwOiBEZWxldGVcbiIpOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIEtfQkE4MF9ERUxfQjoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX2RlbF9iICAgICAg VHJhbnNtaXQgQkE4MDogRGVsZXRlIEJcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtf QkE4MF9ETzoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX2RvICAgICAgICAgVHJhbnNtaXQgQkE4 MDogRG9cbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9FTkQ6Ci0gICAgICAg IHByaW50ZigiXFxLYmE4MF9lbmQgICAgICAgIFRyYW5zbWl0IEJBODA6IEVuZFxuIik7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX0VOVjoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgw X2VudiAgICAgICAgVHJhbnNtaXQgQkE4MDogRW52XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg Y2FzZSBLX0JBODBfRU9QOgotICAgICAgICBwcmludGYoIlxcS2JhODBfZW9wICAgICAgICBUcmFu c21pdCBCQTgwOiBFT1BcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9FUkFT RToKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX2VyYXNlICAgICAgVHJhbnNtaXQgQkE4MDogRXJh c2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9GTVQ6Ci0gICAgICAgIHBy aW50ZigiXFxLYmE4MF9mbXQgICAgICAgIFRyYW5zbWl0IEJBODA6IEZvcm1hdFxuIik7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX0hFTFA6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4 MF9oZWxwICAgICAgIFRyYW5zbWl0IEJBODA6IEhlbHBcbiIpOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIEtfQkE4MF9IT01FOgotICAgICAgICBwcmludGYoIlxcS2JhODBfaG9tZSAgICAgICBU cmFuc21pdCBCQTgwOiBIb21lXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBf SU5TOgotICAgICAgICBwcmludGYoIlxcS2JhODBfaW5zICAgICAgICBUcmFuc21pdCBCQTgwOiBJ bnNlcnRcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9JTlNfQjoKLSAgICAg ICAgcHJpbnRmKCJcXEtiYTgwX2luc19iICAgICAgVHJhbnNtaXQgQkE4MDogSW5zZXJ0IEJcbiIp OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9NQVJLOgotICAgICAgICBwcmludGYo IlxcS2JhODBfbWFyayAgICAgICBUcmFuc21pdCBCQTgwOiBNYXJrXG4iKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSBLX0JBODBfTU9WRToKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX21vdmUg ICAgICAgVHJhbnNtaXQgQkE4MDogTW92ZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug S19CQTgwX1BBMDE6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTAxICAgICAgIFRyYW5zbWl0 IEJBODA6IFBBMVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1BBMDI6Ci0g ICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTAyICAgICAgIFRyYW5zbWl0IEJBODA6IFBBMlxuIik7 Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1BBMDM6Ci0gICAgICAgIHByaW50Zigi XFxLYmE4MF9wYTAzICAgICAgIFRyYW5zbWl0IEJBODA6IFBBM1xuIik7Ci0gICAgICAgIGJyZWFr OwotICAgIGNhc2UgS19CQTgwX1BBMDQ6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTA0ICAg ICAgIFRyYW5zbWl0IEJBODA6IFBBNFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19C QTgwX1BBMDU6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTA1ICAgICAgIFRyYW5zbWl0IEJB ODA6IFBBNVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1BBMDY6Ci0gICAg ICAgIHByaW50ZigiXFxLYmE4MF9wYTA2ICAgICAgIFRyYW5zbWl0IEJBODA6IFBBNlxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1BBMDc6Ci0gICAgICAgIHByaW50ZigiXFxL YmE4MF9wYTA3ICAgICAgIFRyYW5zbWl0IEJBODA6IFBBN1xuIik7Ci0gICAgICAgIGJyZWFrOwot ICAgIGNhc2UgS19CQTgwX1BBMDg6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTA4ICAgICAg IFRyYW5zbWl0IEJBODA6IFBBOFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgw X1BBMDk6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTA5ICAgICAgIFRyYW5zbWl0IEJBODA6 IFBBOVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1BBMTA6Ci0gICAgICAg IHByaW50ZigiXFxLYmE4MF9wYTEwICAgICAgIFRyYW5zbWl0IEJBODA6IFBBMTBcbiIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9QQTExOgotICAgICAgICBwcmludGYoIlxcS2Jh ODBfcGExMSAgICAgICBUcmFuc21pdCBCQTgwOiBQQTExXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSBLX0JBODBfUEExMjoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMTIgICAgICAg VHJhbnNtaXQgQkE4MDogUEExMlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgw X1BBMTM6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTEzICAgICAgIFRyYW5zbWl0IEJBODA6 IFBBMTNcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9QQTE0OgotICAgICAg ICBwcmludGYoIlxcS2JhODBfcGExNCAgICAgICBUcmFuc21pdCBCQTgwOiBQQTE0XG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfUEExNToKLSAgICAgICAgcHJpbnRmKCJcXEti YTgwX3BhMTUgICAgICAgVHJhbnNtaXQgQkE4MDogUEExNVxuIik7Ci0gICAgICAgIGJyZWFrOwot ICAgIGNhc2UgS19CQTgwX1BBMTY6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTE2ICAgICAg IFRyYW5zbWl0IEJBODA6IFBBMTZcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4 MF9QQTE3OgotICAgICAgICBwcmludGYoIlxcS2JhODBfcGExNyAgICAgICBUcmFuc21pdCBCQTgw OiBQQTE3XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfUEExODoKLSAgICAg ICAgcHJpbnRmKCJcXEtiYTgwX3BhMTggICAgICAgVHJhbnNtaXQgQkE4MDogUEExOFxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1BBMTk6Ci0gICAgICAgIHByaW50ZigiXFxL YmE4MF9wYTE5ICAgICAgIFRyYW5zbWl0IEJBODA6IFBBMTlcbiIpOwotICAgICAgICBicmVhazsK LSAgICBjYXNlIEtfQkE4MF9QQTIwOgotICAgICAgICBwcmludGYoIlxcS2JhODBfcGEyMCAgICAg ICBUcmFuc21pdCBCQTgwOiBQQTIwXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JB ODBfUEEyMToKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMjEgICAgICAgVHJhbnNtaXQgQkE4 MDogUEEyMVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1BBMjI6Ci0gICAg ICAgIHByaW50ZigiXFxLYmE4MF9wYTIyICAgICAgIFRyYW5zbWl0IEJBODA6IFBBMjJcbiIpOwot ICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9QQTIzOgotICAgICAgICBwcmludGYoIlxc S2JhODBfcGEyMyAgICAgICBUcmFuc21pdCBCQTgwOiBQQTIzXG4iKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgY2FzZSBLX0JBODBfUEEyNDoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMjQgICAg ICAgVHJhbnNtaXQgQkE4MDogUEEyNFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19C QTgwX1BHRE46Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9wZ2RuICAgICAgIFRyYW5zbWl0IEJB ODA6IFBhZ2UgRG93blxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1BHVVA6 Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9wZ3VwICAgICAgIFRyYW5zbWl0IEJBODA6IFBhZ2Ug VXBcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9QSUNLOgotICAgICAgICBw cmludGYoIlxcS2JhODBfcGljayAgICAgICBUcmFuc21pdCBCQTgwOiBQaWNrXG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfUFJJTlQ6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4 MF9wcmludCAgICAgIFRyYW5zbWl0IEJBODA6IFByaW50XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSBLX0JBODBfUFVUOgotICAgICAgICBwcmludGYoIlxcS2JhODBfcHV0ICAgICAgICBU cmFuc21pdCBCQTgwOiBQdXRcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9S RUZSRVNIOgotICAgICAgICBwcmludGYoIlxcS2JhODBfcmVmcmVzaCAgICBUcmFuc21pdCBCQTgw OiBSZWZyZXNoIFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1JFU0VUOgot ICAgICAgICBwcmludGYoIlxcS2JhODBfcmVzZXQgICAgICBUcmFuc21pdCBCQTgwOiBSZXNldFxu Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1JVQk9VVDoKLSAgICAgICAgcHJp bnRmKCJcXEtiYTgwX3J1Ym91dCAgICAgVHJhbnNtaXQgQkE4MDogUnVib3V0XG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfU0FWRToKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgw X3NhdmUgICAgICAgVHJhbnNtaXQgQkE4MDogU2F2ZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAg IGNhc2UgS19CQTgwX1NPRlRLRVkxOgotICAgICAgICBwcmludGYoIlxcS2JhODBfc29mdGtleTEg ICBUcmFuc21pdCBCQTgwOiBTb2Z0a2V5IDFcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl IEtfQkE4MF9TT0ZUS0VZMjoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3NvZnRrZXkyICAgVHJh bnNtaXQgQkE4MDogU29mdGtleSAyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JB ODBfU09GVEtFWTM6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9zb2Z0a2V5MyAgIFRyYW5zbWl0 IEJBODA6IFNvZnRrZXkgM1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1NP RlRLRVk0OgotICAgICAgICBwcmludGYoIlxcS2JhODBfc29mdGtleTQgICBUcmFuc21pdCBCQTgw OiBTb2Z0a2V5IDRcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9TT0ZUS0VZ NToKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3NvZnRrZXk1ICAgVHJhbnNtaXQgQkE4MDogU29m dGtleSA1XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfU09GVEtFWTY6Ci0g ICAgICAgIHByaW50ZigiXFxLYmE4MF9zb2Z0a2V5NiAgIFRyYW5zbWl0IEJBODA6IFNvZnRrZXkg NlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1NPRlRLRVk3OgotICAgICAg ICBwcmludGYoIlxcS2JhODBfc29mdGtleTcgICBUcmFuc21pdCBCQTgwOiBTb2Z0a2V5IDdcbiIp OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9TT0ZUS0VZODoKLSAgICAgICAgcHJp bnRmKCJcXEtiYTgwX3NvZnRrZXk4ICAgVHJhbnNtaXQgQkE4MDogU29mdGtleSA4XG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfU09GVEtFWTk6Ci0gICAgICAgIHByaW50Zigi XFxLYmE4MF9zb2Z0a2V5OSAgIFRyYW5zbWl0IEJBODA6IFNvZnRrZXkgOVxuIik7Ci0gICAgICAg IGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1VORE86Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF91 bmRvICAgICAgIFRyYW5zbWl0IEJBODA6IFVuZG9cbiIpOwotICAgICAgICBicmVhazsKLQotICAg ICAgICBjYXNlICBLX0kzMV9GMDE6Ci0gICAgICAgIHByaW50ZigiXFxLaTMxX2YwMSAgICAgICAg IFRyYW5zbWl0IElCTSAzMXh4OiBGMVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2Ug IEtfSTMxX0YwMjogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjAyICAgICAgICAg VHJhbnNtaXQgSUJNIDMxeHg6IEYyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAg S19JMzFfRjAzOiAgICAgICAgIAotICAgICAgICBwcmludGYoIlxcS2kzMV9mMDMgICAgICAgICBU cmFuc21pdCBJQk0gMzF4eDogRjNcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBL X0kzMV9GMDQ6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YwNCAgICAgICAgIFRy YW5zbWl0IElCTSAzMXh4OiBGNFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtf STMxX0YwNTogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjA1ICAgICAgICAgVHJh bnNtaXQgSUJNIDMxeHg6IEY1XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19J MzFfRjA2OiAgICAgICAgIAotICAgICAgICBwcmludGYoIlxcS2kzMV9mMDYgICAgICAgICBUcmFu c21pdCBJQk0gMzF4eDogRjZcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kz MV9GMDc6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YwNyAgICAgICAgIFRyYW5z bWl0IElCTSAzMXh4OiBGN1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YwODogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjA4ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEY4XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19JMzFf RjA5OiAgICAgICAgIAotICAgICAgICBwcmludGYoIlxcS2kzMV9mMDkgICAgICAgICBUcmFuc21p dCBJQk0gMzF4eDogRjlcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MTA6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YxMCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTBcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MTE6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YxMSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTFcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MTI6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YxMiAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTJcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MTM6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YxMyAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTNcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MTQ6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YxNCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTRcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MTU6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YxNSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTVcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MTY6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YxNiAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTZcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MTc6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YxNyAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTdcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MTg6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YxOCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMThcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MTk6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YxOSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTlcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MjA6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YyMCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjBcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MjE6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YyMSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjFcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MjI6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YyMiAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjJcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MjM6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YyMyAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjNcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MjQ6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YyNCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjRcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MjU6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YyNSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjVcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MjY6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YyNiAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjZcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G Mjc6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YyNyAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjdcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G Mjg6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YyOCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjhcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G Mjk6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YyOSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjlcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MzA6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YzMCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMzBcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MzE6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YzMSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMzFcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MzI6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YzMiAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMzJcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MzM6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YzMyAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMzNcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MzQ6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YzNCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMzRcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MzU6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YzNSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMzVcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9G MzY6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YzNiAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMzZcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9Q QTE6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX3BhMSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBQQTFcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9Q QTI6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX3BhMiAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBQQTJcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9Q QTM6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX3BhMyAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBQQTNcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9S RVNFVDoKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfcmVzZXQgICAgICAgVHJhbnNtaXQgSUJNIDMx eHg6IFJlc2V0XG4iKTsKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgY2FzZSAg S19JMzFfSlVNUDogICAgICAgIAotICAgICAgICBwcmludGYoIlxcS2kzMV9qdW1wICAgICAgICBU cmFuc21pdCBJQk0gMzF4eDogSnVtcFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2Ug IEtfSTMxX0NMRUFSOiAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfY2xlYXIgICAgICAg VHJhbnNtaXQgSUJNIDMxeHg6IENsZWFyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2Fz ZSAgS19JMzFfRVJBU0VfRU9GOiAgIAotICAgICAgICBwcmludGYoIlxcS2kzMV9lcmFzZV9lb2Yg ICBUcmFuc21pdCBJQk0gMzF4eDogRXJhc2UgdG8gRW5kIG9mIEZpZWxkXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgICAgY2FzZSAgS19JMzFfRVJBU0VfRU9QOiAgIAotICAgICAgICBwcmludGYo IlxcS2kzMV9lb3AgICAgICAgICBUcmFuc21pdCBJQk0gMzF4eDogRXJhc2UgdG8gRW5kIG9mIFBh Z2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9FUkFTRV9JTlA6ICAg Ci0gICAgICAgIHByaW50ZigiXFxLaTMxX2lucCAgICAgICAgIFRyYW5zbWl0IElCTSAzMXh4OiBF cmFzZSBJbnB1dCBPcGVyYXRpb25cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBL X0kzMV9JTlNFUlRfQ0hBUjogCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2luc19jaGFyICAgIFRy YW5zbWl0IElCTSAzMXh4OiBJbnNlcnQgQ2hhcmFjdGVyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgICAgY2FzZSAgS19JMzFfSU5TRVJUX1NQQUNFOgotICAgICAgICBwcmludGYoIlxcS2kzMV9p bnNfc3BhY2UgICBUcmFuc21pdCBJQk0gMzF4eDogSW5zZXJ0IFNwYWNlXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgICAgY2FzZSAgS19JMzFfREVMRVRFOiAgICAgIAotICAgICAgICBwcmludGYo IlxcS2kzMV9kZWxldGUgICAgICBUcmFuc21pdCBJQk0gMzF4eDogRGVsZXRlIENoYXJhY3Rlclxu Iik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMxX0lOU19MTjogICAgICAKLSAg ICAgICAgcHJpbnRmKCJcXEtpMzFfaW5zX2xpbmUgICAgVHJhbnNtaXQgSUJNIDMxeHg6IEluc2Vy dCBMaW5lXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19JMzFfREVMX0xOOiAg ICAgIAotICAgICAgICBwcmludGYoIlxcS2kzMV9kZWxfbG4gICAgICBUcmFuc21pdCBJQk0gMzF4 eDogRGVsZXRlIExpbmVcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9Q UklOVF9MSU5FOiAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX3BydF9saW5lICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBQcmludCBMaW5lXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAg S19JMzFfUFJJTlRfTVNHOiAgIAotICAgICAgICBwcmludGYoIlxcS2kzMV9wcnRfbXNnICAgICBU cmFuc21pdCBJQk0gMzF4eDogUHJpbnQgTWVzc2FnZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAg ICAgIGNhc2UgIEtfSTMxX1BSSU5UX1NISUZUOiAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfcHJ0 X3NoaWZ0ICAgVHJhbnNtaXQgSUJNIDMxeHg6IFByaW50IFNoaWZ0XG4iKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgICAgY2FzZSAgS19JMzFfQ0FOQ0VMOiAgICAgIAotICAgICAgICBwcmludGYoIlxc S2kzMV9jYW5jZWwgICAgICBUcmFuc21pdCBJQk0gMzF4eDogQ2FuY2VsXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgICAgY2FzZSAgS19JMzFfU0VORF9MSU5FOiAgIAotICAgICAgICBwcmludGYo IlxcS2kzMV9zZW5kX2xpbmUgICBUcmFuc21pdCBJQk0gMzF4eDogU2VuZCBMaW5lXG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19JMzFfU0VORF9NU0c6ICAgIAotICAgICAgICBw cmludGYoIlxcS2kzMV9zZW5kX21zZyAgICBUcmFuc21pdCBJQk0gMzF4eDogU2VuZCBNZXNzYWdl XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19JMzFfU0VORF9QQUdFOiAgIAot ICAgICAgICBwcmludGYoIlxcS2kzMV9zZW5kX3BhZ2UgICBUcmFuc21pdCBJQk0gMzF4eDogU2Vu ZCBQYWdlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19JMzFfSE9NRTogICAg ICAgIAotICAgICAgICBwcmludGYoIlxcS2kzMV9ob21lICAgICAgICBUcmFuc21pdCBJQk0gMzF4 eDogSG9tZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMxX0JBQ0tfVEFC OiAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfYmFja190YWIgICAgVHJhbnNtaXQgSUJNIDMx eHg6IEJhY2sgVGFiXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19TVU5fU1RP UDogCi0gICAgICAgIHByaW50ZigiXFxLc3Vuc3RvcCAgICAgICAgIFRyYW5zbWl0IFNVTiBDb25z b2xlOiBTdG9wXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19TVU5fQUdBSU46 Ci0gICAgICAgIHByaW50ZigiXFxLc3VuYWdhaW4gICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xl OiBBZ2FpblxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfU1VOX1BST1BTOgot ICAgICAgICBwcmludGYoIlxcS3N1bnByb3BzICAgICAgICBUcmFuc21pdCBTVU4gQ29uc29sZTog UHJvcHNcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX1NVTl9VTkRPOiAKLSAg ICAgICAgcHJpbnRmKCJcXEtzdW51bmRvICAgICAgICAgVHJhbnNtaXQgU1VOIENvbnNvbGU6IFVu ZG9cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX1NVTl9GUk9OVDoKLSAgICAg ICAgcHJpbnRmKCJcXEtzdW5mcm9udCAgICAgICAgVHJhbnNtaXQgU1VOIENvbnNvbGU6IEZyb250 XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19TVU5fQ09QWTogCi0gICAgICAg IHByaW50ZigiXFxLc3VuY29weSAgICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xlOiBDb3B5XG4i KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19TVU5fT1BFTjogCi0gICAgICAgIHBy aW50ZigiXFxLc3Vub3BlbiAgICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xlOiBPcGVuXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19TVU5fUEFTVEU6Ci0gICAgICAgIHByaW50 ZigiXFxLc3VucGFzdGUgICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xlOiBQYXN0ZVxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfU1VOX0ZJTkQ6IAotICAgICAgICBwcmludGYo IlxcS3N1bmZpbmQgICAgICAgICBUcmFuc21pdCBTVU4gQ29uc29sZTogRmluZFxuIik7Ci0gICAg ICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfU1VOX0NVVDogIAotICAgICAgICBwcmludGYoIlxc S3N1bmN1dCAgICAgICAgICBUcmFuc21pdCBTVU4gQ29uc29sZTogQ3V0XG4iKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgICAgY2FzZSAgS19TVU5fSEVMUDogCi0gICAgICAgIHByaW50ZigiXFxLc3Vu aGVscCAgICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xlOiBIZWxwXG4iKTsKLSAgICAgICAgYnJl YWs7Ci0KLSAgICAgICBkZWZhdWx0OgotICAgICAgICBwcmludGYoIk5vIGFkZGl0aW9uYWwgaGVs cCBhdmFpbGFibGUgZm9yIHRoaXMga3ZlcmJcbiIpOwotICB9Ci0gICAgcHJpbnRmKCJcbiIpOwot Ci0gICAgLyogVGhpcyBpcyBub3QgdGhlIHByb3BlciB3YXkgdG8gZG8gaXQgc2luY2UgaXQgZG9l c24ndCBzaG93ICAqLwotICAgIC8qIGFsbCBlbXVsYXRpb25zLCBub3IgZG9lcyBpdCBzaG93IHRo ZSBzcGVjaWFsIG1vZGVzLCBidXQgaXQgKi8KLSAgICAvKiBpcyBiZXR0ZXIgdGhhbiBub3RoaW5n LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgICBwcmludGYoIkN1 cnJlbnQgYmluZGluZ3M6XG4iKTsKLSAgICBmb3VuZCA9IDA7Ci0gICAgZm9yIChpID0gMjU2OyBp IDwgS01TSVpFIDsgaSsrKSB7Ci0gICAgICAgIGNvbl9ldmVudCBldnQgPSBtYXBrZXkoaSk7Ci0g ICAgICAgIGlmIChldnQudHlwZSAhPSBrdmVyYikKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAg ICAgaWYgKChldnQua3ZlcmIuaWQgJiB+Rl9LVkVSQikgPT0geHgpIHsKLSAgICAgICAgICAgIGZv dW5kID0gMTsKLSAgICAgICAgICAgIHByaW50ZigiICBcXCUtNGQgLSAlc1xuIixpLGtleW5hbWUo aSkpOwotICAgICAgICB9Ci0gICAgfQotI2lmZGVmIE9TMk1PVVNFCi0gICAgZm9yICggYnV0dG9u ID0gMCA7IGJ1dHRvbiA8IE1NQlVUVE9OTUFYIDsgYnV0dG9uKysgKQotICAgICAgZm9yICggZXZl bnQgPSAwIDsgZXZlbnQgPCBNTUVWRU5UU0laRSA7IGV2ZW50KysgKQotICAgICAgICBpZiAoIG1v dXNlbWFwW2J1dHRvbl1bZXZlbnRdLnR5cGUgPT0ga3ZlcmIgKSB7Ci0gICAgICAgICAgICBpZiAo IChtb3VzZW1hcFtidXR0b25dW2V2ZW50XS5rdmVyYi5pZCAmIH5GX0tWRVJCKSA9PSB4eCApIHsK LSAgICAgICAgICAgICAgICBmb3VuZCA9IDE7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgIE1v dXNlIC0gJXNcbiIsbW91c2VuYW1lKGJ1dHRvbixldmVudCkpOwotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0jZW5kaWYgLyogT1MyTU9VU0UgKi8KLQotICAgIGlmICggIWZvdW5kICkgewotICAg ICAgICBwcmludGYoIiAgKG5vbmUpXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotI2Vu ZGlmIC8qIE5PS1ZFUkJTICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9YRkVSCi0v KiAgRCBPIEggUiBNIFQgIC0tICBHaXZlIGhlbHAgYWJvdXQgUkVNT1RFIGNvbW1hbmQgICovCi0K LXN0YXRpYyBjaGFyICpocnNldFtdID0gewotIlN5bnRheDogIFJFTU9URSBTRVQgcGFyYW1ldGVy IHZhbHVlIiwKLSJFeGFtcGxlOiBSRU1PVEUgU0VUIEZJTEUgVFlQRSBCSU5BUlkiLAotIiAgQXNr cyB0aGUgS2VybWl0IHNlcnZlciB0byBzZXQgdGhlIG5hbWVkIHBhcmFtZXRlciB0byB0aGUgZ2l2 ZW4gdmFsdWUuIiwKLSIgIEVxdWl2YWxlbnQgdG8gdHlwaW5nIHRoZSBjb3JyZXNwb25kaW5nIFNF VCBjb21tYW5kIGRpcmVjdGx5IHRvIHRoZSBvdGhlciIsCi0iICBLZXJtaXQgaWYgaXQgd2VyZSBp biBpbnRlcmFjdGl2ZSBtb2RlLiIsICIiIH07Ci0KLWludAotZG9ocm10KHh4KSBpbnQgeHg7IHsK LSAgICBpbnQgeDsKLSAgICBpZiAoeHggPT0gLTMpIHJldHVybihobXNnYShobWhybXQpKTsKLSAg ICBpZiAoeHggPCAwKSByZXR1cm4oeHgpOwotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHgpOwotICAgIHN3aXRjaCAoeHgpIHsKLQotY2FzZSBYWkNQWToKLSAgICByZXR1cm4oaG1z ZygiU3ludGF4OiBSRU1PVEUgQ09QWSBzb3VyY2UgZGVzdGluYXRpb25cblwKLSAgQXNrcyB0aGUg S2VybWl0IHNlcnZlciB0byBjb3B5IHRoZSBzb3VyY2UgZmlsZSB0byBkZXN0aW5hdGlvbi5cblwK LSAgU3lub255bTogUkNPUFkuIikpOwotCi1jYXNlIFhaQ1dEOgotI2lmZGVmIE5FV0ZUUAotICAg IHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBDRCBbIG5hbWUgXVxuXAotICBBc2tzIHRoZSBL ZXJtaXQgb3IgRlRQIHNlcnZlciB0byBjaGFuZ2UgaXRzIHdvcmtpbmcgZGlyZWN0b3J5IG9yIGRl dmljZS5cblwKLSAgSWYgdGhlIGRldmljZSBvciBkaXJlY3RvcnkgbmFtZSBpcyBvbWl0dGVkLCBy ZXN0b3JlIHRoZSBkZWZhdWx0LlxuXAotICBTeW5vbnltOiBSQ0QuIikpOwotI2Vsc2UKLSAgICBy ZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgQ0QgWyBuYW1lIF1cblwKLSAgQXNrcyB0aGUgS2Vy bWl0IHNlcnZlciB0byBjaGFuZ2UgaXRzIHdvcmtpbmcgZGlyZWN0b3J5IG9yIGRldmljZS5cblwK LSAgSWYgdGhlIGRldmljZSBvciBkaXJlY3RvcnkgbmFtZSBpcyBvbWl0dGVkLCByZXN0b3JlIHRo ZSBkZWZhdWx0LlxuXAotICBTeW5vbnltOiBSQ0QuIikpOwotI2VuZGlmIC8qIE5FV0ZUUCAqLwot Ci1jYXNlIFhaREVMOgotI2lmZGVmIE5FV0ZUUAotICAgIHJldHVybihobXNnKCJTeW50YXg6IFJF TU9URSBERUxFVEUgZmlsZXNwZWNcblwKLSAgQXNrcyB0aGUgS2VybWl0IG9yIEZUUCBzZXJ2ZXIg dG8gZGVsZXRlIHRoZSBuYW1lZCBmaWxlKHMpLlxuXAotICBTeW5vbnltOiBSREVMLiIpKTsKLSNl bHNlCi0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIERFTEVURSBmaWxlc3BlY1xuXAot ICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIGRlbGV0ZSB0aGUgbmFtZWQgZmlsZShzKS5cblwK LSAgU3lub255bTogUkRFTC4iKSk7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0KLWNhc2UgWFpNS0Q6 Ci0jaWZkZWYgTkVXRlRQCi0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIE1LRElSIGRp cmVjdG9yeS1uYW1lXG5cCi0gIEFza3MgdGhlIEtlcm1pdCBvciBGVFAgc2VydmVyIHRvIGNyZWF0 ZSB0aGUgbmFtZWQgZGlyZWN0b3J5LlxuXAotICBTeW5vbnltOiBSTUtESVIuIikpOwotI2Vsc2UK LSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgTUtESVIgZGlyZWN0b3J5LW5hbWVcblwK LSAgQXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byBjcmVhdGUgdGhlIG5hbWVkIGRpcmVjdG9yeS5c blwKLSAgU3lub255bTogUk1LRElSLiIpKTsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotY2FzZSBY WlJNRDoKLSNpZmRlZiBORVdGVFAKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgUk1E SVIgZGlyZWN0b3J5LW5hbWVcblwKLSAgQXNrcyB0aGUgS2VybWl0IG9yIEZUUCBzZXJ2ZXIgdG8g cmVtb3ZlIHRoZSBuYW1lZCBkaXJlY3RvcnkuXG5cCi0gIFN5bm9ueW06IFJSTURJUi4iKSk7Ci0j ZWxzZQotICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBSTURJUiBkaXJlY3RvcnktbmFt ZVxuXAotICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIHJlbW92ZSB0aGUgbmFtZWQgZGlyZWN0 b3J5LlxuXAotICBTeW5vbnltOiBSUk1ESVIuIikpOwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCi1j YXNlIFhaRElSOgotI2lmZGVmIE5FV0ZUUAotICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9U RSBESVJFQ1RPUlkgWyBmaWxlc3BlYyBdXG5cCi0gIEFza3MgdGhlIEtlcm1pdCBvciBGVFAgc2Vy dmVyIHRvIHByb3ZpZGUgYSBkaXJlY3RvcnkgbGlzdGluZyBvZiB0aGUgbmFtZWRcblwKLSAgZmls ZShzKSBvciBpZiBubyBmaWxlIHNwZWNpZmljYXRpb24gaXMgZ2l2ZW4sIG9mIGFsbCBmaWxlcyBp biBpdHMgY3VycmVudFxuXAotICBkaXJlY3RvcnkuICBTeW5vbnltOiBSRElSLiIpKTsKLSNlbHNl Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIERJUkVDVE9SWSBbIGZpbGVzcGVjIF1c blwKLSAgQXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byBwcm92aWRlIGEgZGlyZWN0b3J5IGxpc3Rp bmcgb2YgdGhlIG5hbWVkXG5cCi0gIGZpbGUocykgb3IgaWYgbm8gZmlsZSBzcGVjaWZpY2F0aW9u IGlzIGdpdmVuLCBvZiBhbGwgZmlsZXMgaW4gaXRzIGN1cnJlbnRcblwKLSAgZGlyZWN0b3J5LiAg U3lub255bTogUkRJUi4iKSk7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0KLWNhc2UgWFpITFA6Ci0j aWZkZWYgTkVXRlRQCi0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIEhFTFBcblwKLSAg QXNrcyB0aGUgS2VybWl0IG9yIEZUUCBzZXJ2ZXIgdG8gbGlzdCB0aGUgc2VydmljZXMgaXQgcHJv dmlkZXMuXG5cCi0gIFN5bm9ueW06IFJIRUxQLiIpKTsKLSNlbHNlCi0gICAgcmV0dXJuKGhtc2co IlN5bnRheDogUkVNT1RFIEhFTFBcblwKLSAgQXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byBsaXN0 IHRoZSBzZXJ2aWNlcyBpdCBwcm92aWRlcy5cblwKLSAgU3lub255bTogUkhFTFAuIikpOwotI2Vu ZGlmIC8qIE5FV0ZUUCAqLwotCi1jYXNlIFhaSE9TOgotICAgIHJldHVybihobXNnKCJTeW50YXg6 IFJFTU9URSBIT1NUIGNvbW1hbmRcblwKLSAgU2VuZHMgYSBjb21tYW5kIHRvIHRoZSBvdGhlciBj b21wdXRlciBpbiBpdHMgb3duIGNvbW1hbmQgbGFuZ3VhZ2VcblwKLSAgdGhyb3VnaCB0aGUgS2Vy bWl0IHNlcnZlciB0aGF0IGlzIHJ1bm5pbmcgb24gdGhhdCBob3N0LiAgU3lub255bTogUkhPU1Qu IikpOwotCi0jaWZuZGVmIE5PRlJJTExTCi1jYXNlIFhaS0VSOgotICAgIHJldHVybihobXNnKCJT eW50YXg6IFJFTU9URSBLRVJNSVQgY29tbWFuZFxuXAotICBTZW5kcyBhIGNvbW1hbmQgdG8gdGhl IHJlbW90ZSBLZXJtaXQgc2VydmVyIGluIGl0cyBvd24gY29tbWFuZCBsYW5ndWFnZS5cblwKLSAg U3lub255bTogUktFUk1JVC4iKSk7Ci0KLWNhc2UgWFpMR0k6Ci0gICAgcmV0dXJuKGhtc2coIlN5 bnRheDogUkVNT1RFIExPR0lOIHVzZXIgcGFzc3dvcmQgWyBhY2NvdW50IF1cblwKLSAgTG9ncyBp biB0byBhIHJlbW90ZSBLZXJtaXQgc2VydmVyIHRoYXQgcmVxdWlyZXMgeW91IGxvZ2luLiAgTm90 ZTogUkxPR0lOXG5cCi0gIGlzIE5PVCBhIHN5bm9ueW0gZm9yIFJFTU9URSBMT0dJTi4iKSk7Ci0K LWNhc2UgWFpMR086Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIExPR09VVFxuXAot ICBMb2dzIG91dCBmcm9tIGEgcmVtb3RlIEtlcm1pdCBzZXJ2ZXIgdG8gd2hpY2ggeW91IGhhdmUg cHJldmlvdXNseSBsb2dnZWQgaW4uIgotKSk7Ci0KLWNhc2UgWFpNU0c6Ci0gICAgcmV0dXJuKGht c2coIlN5bnRheDogUkVNT1RFIE1FU1NBR0UgdGV4dFxuXAotICBTZW5kcyBhIHNob3J0IHRleHQg bWVzc2FnZSB0byB0aGUgcmVtb3RlIEtlcm1pdCBzZXJ2ZXIuIikpOwotCi1jYXNlIFhaUFJJOgot ICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBQUklOVCBmaWxlc3BlYyBbIG9wdGlvbnMg XVxuXAotICBTZW5kcyB0aGUgc3BlY2lmaWVkIGZpbGUocykgdG8gdGhlIHJlbW90ZSBLZXJtaXQg YW5kIGFzayBpdCB0byBoYXZlIHRoZVxuXAotICBmaWxlIHByaW50ZWQgb24gdGhlIHJlbW90ZSBz eXN0ZW0ncyBwcmludGVyLCB1c2luZyBhbnkgc3BlY2lmaWVkIG9wdGlvbnMuXG5cCi0gIFN5bm9u eW06IFJQUklOVC4iKSk7Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotY2FzZSBYWlJFTjoKLSNp ZmRlZiBORVdGVFAKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgUkVOQU1FIGZpbGVz cGVjIG5ld25hbWVcblwKLSAgQXNrcyB0aGUgS2VybWl0IG9yIEZUUCBzZXJ2ZXIgdG8gcmVuYW1l IHRoZSBmaWxlLiAgU3lub255bTogUlJFTkFNRS4iKSk7Ci0jZWxzZQotICAgIHJldHVybihobXNn KCJTeW50YXg6IFJFTU9URSBSRU5BTUUgZmlsZXNwZWMgbmV3bmFtZVxuXAotICBBc2tzIHRoZSBL ZXJtaXQgc2VydmVyIHRvIHJlbmFtZSB0aGUgZmlsZS4gIFN5bm9ueW06IFJSRU5BTUUuIikpOwot I2VuZGlmIC8qIE5FV0ZUUCAqLwotCi1jYXNlIFhaU0VUOgotICAgIHJldHVybihobXNnYShocnNl dCkpOwotCi1jYXNlIFhaU1BBOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBTUEFD RSBbIG5hbWUgXVxuXAotICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIHRlbGwgeW91IGFib3V0 IGl0cyBkaXNrIHNwYWNlIG9uIHRoZSBjdXJyZW50XG5cCi0gIGRpc2sgb3IgZGlyZWN0b3J5LCBv ciBpbiB0aGUgb25lIHRoYXQgeW91IG5hbWUuICBTeW5vbnltOiBSU1BBQ0UuIikpOwotCi0jaWZu ZGVmIE5PRlJJTExTCi1jYXNlIFhaVFlQOgotI2lmZGVmIE5FV0ZUUAotICAgIHJldHVybihobXNn KCJTeW50YXg6IFJFTU9URSBUWVBFIGZpbGVcblwKLSAgQXNrcyB0aGUgS2VybWl0IG9yIEZUUCBz ZXJ2ZXIgdG8gc2VuZCB0aGUgbmFtZWQgZmlsZSB0byB5b3VyIHNjcmVlbi5cblwKLSAgU3lub255 bTogUlRZUEUuIikpOwotI2Vsc2UKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgVFlQ RSBmaWxlXG5cCi0gIEFza3MgdGhlIEtlcm1pdCBzZXJ2ZXIgdG8gc2VuZCB0aGUgbmFtZWQgZmls ZShzKSB0byB5b3VyIHNjcmVlbi5cblwKLSAgU3lub255bTogUlRZUEUuIikpOwotI2VuZGlmIC8q IE5FV0ZUUCAqLwotCi0KLWNhc2UgWFpXSE86Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVN T1RFIFdITyBbIG5hbWUgXVxuXAotICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIGxpc3Qgd2hv J3MgbG9nZ2VkIGluLCBvciB0byBnaXZlIGluZm9ybWF0aW9uXG5cCi0gIGFib3V0IHRoZSBuYW1l ZCB1c2VyLiAgU3lub255bTogUldITy4iKSk7Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lm bmRlZiBOT1NQTAotY2FzZSBYWlFVRToKLSAgICByZXR1cm4oaG1zZygKLSJTeW50YXg6IFsgUkVN T1RFIF0gUVVFUlkgeyBLRVJNSVQsIFNZU1RFTSwgVVNFUiB9IHZhcmlhYmxlLW5hbWVcblwKLSAg QXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byBzZW5kIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgdmFy aWFibGUgb2YgdGhlXG5cCi0gIGdpdmVuIHR5cGUsIGFuZCBtYWtlIGl0IGF2YWlsYWJsZSBpbiB0 aGUgXFx2KHF1ZXJ5KSB2YXJpYWJsZS4gIFdoZW4gdGhlXG5cCi0gIHR5cGUgaXMgS0VSTUlUIGZ1 bmN0aW9ucyBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYXMgaWYgdGhleSB3ZXJlIHZhcmlhYmxlcy4i KSk7Ci0KLWNhc2UgWFpBU0c6Ci0gICAgcmV0dXJuKGhtc2coCi0iU3ludGF4OiBSRU1PVEUgQVNT SUdOIHZhcmlhYmxlLW5hbWUgWyB2YWx1ZSBdXG5cCi0gIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVl IHRvIHRoZSBuYW1lZCBnbG9iYWwgdmFyaWFibGUgb24gdGhlIHNlcnZlci5cblwKLSAgU3lub255 bXM6IFJBU0csIFJBU1NJR04uIikpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLWNhc2UgWFpQV0Q6 Ci0gICAgcmV0dXJuKGhtc2coCi0jaWZkZWYgTkVXRlRQCi0iU3ludGF4OiBSRU1PVEUgUFdEXG5c Ci0gIEFza3MgdGhlIEtlcm1pdCBzZXJ2ZXIgdG8gZGlzcGxheSBpdHMgY3VycmVudCB3b3JraW5n IGRpcmVjdG9yeS5cblwKLSAgU3lub255bTogUlBXRC4iKSk7Ci0jZWxzZQotIlN5bnRheDogUkVN T1RFIFBXRFxuXAotICBBc2tzIHRoZSBLZXJtaXQgb3IgRlRQIHNlcnZlciB0byBkaXNwbGF5IGl0 cyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuXAotICBTeW5vbnltOiBSUFdELiIpKTsKLSNl bmRpZiAvKiBORVdGVFAgKi8KLQotY2FzZSBYWlhJVDoKLSNpZmRlZiBORVdGVFAKLSAgICByZXR1 cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgRVhJVFxuXAotICAgQXNrcyB0aGUgS2VybWl0IHNlcnZl ciB0byBleGl0ICh3aXRob3V0IGRpc2Nvbm5lY3RpbmcpLCBvciBjbG9zZXMgYW4gRlRQXG5cCi0g ICBjb25uZWN0aW9uLiAgU3lub255bTogUkVYSVQsIGFuZCAoZm9yIEZUUCBvbmx5KSBCWUUsIEZU UCBCWUUuIikpOwotI2Vsc2UKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgRVhJVFxu XAotICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIGV4aXQuICBTeW5vbnltOiBSRVhJVC4iKSk7 Ci0jZW5kaWYgLyogTkVXRlRQICovCi0KLWRlZmF1bHQ6Ci0gICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeCk7Ci0gICAgcHJpbnRmKCI/U29ycnksIG5vIGhlbHAgYXZhaWxhYmxlIC0g XCIlc1wiXG4iLGNtZGJ1Zik7Ci0gICAgcmV0dXJuKC05KTsKLSAgICB9Ci19Ci0jZW5kaWYgLyog Tk9YRkVSICovCi0jZW5kaWYgLyogTk9IRUxQICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KCmRpZmYg LS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzMy5jIGIv Y2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czMuYwpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggNTg4N2IzNC4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzMy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM2 MjkgKzAsMCBAQAotI2lmZGVmIFNTSFRFU1QKLSNkZWZpbmUgU1NIQlVJTFRJTgotI2VuZGlmIC8q IFNTSFRFU1QgKi8KLQotI2luY2x1ZGUgImNrY3N5bS5oIiAgICAgICAgICAgICAgICAgICAgIC8q IFN5bWJvbCBkZWZpbml0aW9ucyAqLwotCi0vKiAgQyBLIFUgVSBTIDMgLS0gICJVc2VyIEludGVy ZmFjZSIgZm9yIEMtS2VybWl0LCBwYXJ0IDMgICovCi0KLS8qCi0gIEF1dGhvcnM6Ci0gICAgRnJh bmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCi0gICAgICBUaGUgS2VybWl0IFByb2plY3Qs IENvbHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkKLSAgICBKZWZmcmV5IEUgQWx0bWFu IDxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgotICAgICAgU2VjdXJlIEVuZHBvaW50cyBJ bmMuLCBOZXcgWW9yayBDaXR5Ci0KLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDExLAotICAgIFRy dXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCi0g ICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmls ZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBk aXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLSovCi0KLS8qICBTRVQgY29tbWFuZCAoYnV0IG11 Y2ggbWF0ZXJpYWwgaGFzIGJlZW4gc3BsaXQgb2ZmIGludG8gY2t1dXM3LmMpLiAqLwotCi0vKgot ICBLZXJtaXQtc3BlY2lmaWMgaW5jbHVkZXMuCi0gIERlZmluaXRpb25zIGhlcmUgc3VwZXJzZWRl IHRob3NlIGZyb20gc3lzdGVtIGluY2x1ZGUgZmlsZXMuCi0qLwotI2luY2x1ZGUgImNrY2RlYi5o IiAgICAgICAgICAgICAgICAgICAgIC8qIERlYnVnZ2luZyAmIGNvbXBpbGVyIHRoaW5ncyAqLwot I2luY2x1ZGUgImNrY2FzYy5oIiAgICAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGNoYXJhY3Rl ciBzeW1ib2xzICovCi0jaW5jbHVkZSAiY2tja2VyLmgiICAgICAgICAgICAgICAgICAgICAgLyog S2VybWl0IGFwcGxpY2F0aW9uIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSAiY2tjeGxhLmgiICAg ICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHNldCB0cmFuc2xhdGlvbiAqLwotI2luY2x1 ZGUgImNrY25ldC5oIiAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgc3ltYm9scyAqLwot Ci1jaGFyIHB3YnVmW1BXQlVGTCsxXSAgPSB7IE5VTCwgTlVMIH07Ci1pbnQgcHdmbGcgPSAwOwot aW50IHB3Y3J5cHQgPSAwOwotCi0jaWZuZGVmIE5PSUNQCi0KLSNpZmRlZiBDS19BVVRIRU5USUNB VElPTgotI2luY2x1ZGUgImNrdWF0aC5oIgotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICov Ci0jaWZkZWYgQ0tfU1NMCi0jaW5jbHVkZSAiY2tfc3NsLmgiCi0jZW5kaWYgLyogQ0tfU1NMICov Ci0jaW5jbHVkZSAiY2t1dXNyLmgiICAgICAgICAgICAgICAgICAgICAgLyogVXNlciBpbnRlcmZh Y2Ugc3ltYm9scyAqLwotI2lmZGVmIE9TMgotI2luY2x1ZGUgImNrY3VuaS5oIgotI2lmZGVmIFNT SEJVSUxUSU4KLSNpbmNsdWRlICJja29zc2guaCIKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0j aWZkZWYgQ0tfTkVUQklPUwotI2luY2x1ZGUgPG9zMi5oPgotI2lmZGVmIENPTU1FTlQgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFdvdWxkIHlvdSBiZWxpZXZlICovCi0jdW5kZWYgQ09NTUVO VCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogPG9zMi5oPiBkZWZpbmVzIHRoaXMgPyAqLwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpbmNsdWRlICJja29uYmkuaCIKLWV4dGVybiBVQ0hBUiBO ZXRCaW9zQWRhcHRlcjsKLSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0jaW5jbHVkZSAiY2tvY29u LmgiCi0jaW5jbHVkZSAiY2tva2V5LmgiCi0jaWZuZGVmIE5PVEVSTQotZXh0ZXJuIHVuc2lnbmVk IGNoYXIgY29sb3JjbWQ7ICAvKiBDb21tYW5kLXNjcmVlbiBjb2xvcnMgKi8KLWV4dGVybiBzdHJ1 Y3Qga2V5dGFiIHR0eWNscnRhYltdOwotZXh0ZXJuIGludCBuY2xyczsKLWV4dGVybiBpbnQgdHRf Y29sc1tdLCB0dF9yb3dzW10sIHR0X3N6Y2huZ1tdLCB0dF9zdGF0dXNbXTsKLSNlbmRpZiAvKiBO T1RFUk0gKi8KLV9QUk9UT1RZUChpbnQgc2V0cHJ0eSwgKHZvaWQpKTsKLWV4dGVybiBjaGFyIHN0 YXJ0dXBkaXJbXSwgZXhlZGlyW107Ci1leHRlcm4gaW50IHR0X21vZGVjaGc7Ci0jaWZkZWYgTlQK LSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8dGFwaS5oPgotI2luY2x1ZGUgImNrbnRh cC5oIiAgICAgICAgICAgICAgICAgICAgIC8qIE1pY3Jvc29mdCBUQVBJICovCi0jZW5kaWYgLyog TlQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBPUzIKLWV4dGVybiBjaGFyICogZXhl ZGlyOwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgQ0tfUkVDQUxMCi1leHRlcm4gaW50IGNt X3JldHJ5OwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotCi0jaWZkZWYgTkVXRlRQCi1leHRlcm4g aW50IGZ0cGlzb3BlbigpOwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCi1leHRlcm4gaW50IGNtZGlu dDsKLWV4dGVybiBpbnQgc3J2aWRsOwotCi0jaWZkZWYgQ0tGTE9BVAotZXh0ZXJuIENLRkxPQVQg ZmxvYXR2YWw7CQkvKiAoc2VlIGlzZmxvYXQoKSkgKi8KLSNlbmRpZiAvKiBDS0ZMT0FUICovCi0K LSNpZm5kZWYgTk9QVVNICi0jaWZuZGVmIE5PRlJJTExTCi0jaWZkZWYgVk1TCi1jaGFyIGVkaXRv cltDS01BWFBBVEggKyAxXSA9ICJlZGl0IjsKLSNlbHNlCi1jaGFyIGVkaXRvcltDS01BWFBBVEgg KyAxXSA9IHsgTlVMLCBOVUwgfTsKLSNlbmRpZiAvKiBWTVMgKi8KLWNoYXIgZWRpdG9wdHNbMTI4 XSA9IHsgTlVMLCBOVUwgfTsKLWNoYXIgZWRpdGZpbGVbQ0tNQVhQQVRIICsgMV0gPSB7IE5VTCwg TlVMIH07Ci0jaWZkZWYgQlJPV1NFUgotY2hhciBicm93c2VyW0NLTUFYUEFUSCArIDFdID0geyBO VUwsIE5VTCB9OwotY2hhciBicm93c29wdHNbMTI4XSA9IHsgTlVMLCBOVUwgfTsKLWNoYXIgYnJv d3N1cmxbNDA5Nl0gPSB7IE5VTCwgTlVMIH07Ci0jZW5kaWYgLyogQlJPV1NFUiAqLwotI2VuZGlm IC8qICBOT0ZSSUxMUyAqLwotI2VuZGlmIC8qIE5PUFVTSCAqLwotCi0jaWZuZGVmIE5PRlJJTExT Ci0jaWZuZGVmIE5PUkVOQU1FCi1fUFJPVE9UWVAoaW50IHNldHJlbmFtZSwgKHZvaWQpKTsKLSNl bmRpZgkvKiBOT1JFTkFNRSAqLwotI2VuZGlmCS8qIE5PRlJJTExTICovCi0KLS8qIFZhcmlhYmxl cyAqLwotCi1pbnQgY21kX3F1b3RpbmcgPSAxOwotaW50IGNtZF9lcnIgPSAxOwotZXh0ZXJuIGlu dCBoaW50cywgeGNtZHNyYzsKLQotI2lmZGVmIENLX0tFUkJFUk9TCi1jaGFyICogazRwd3Byb21w dCA9IE5VTEw7ICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNCBwYXNzd29yZCBwcm9tcHQgKi8K LWNoYXIgKiBrNHBycHJvbXB0ID0gTlVMTDsgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA0IHBy aW5jaXBhbCBwcm9tcHQgKi8KLWNoYXIgKiBrNXB3cHJvbXB0ID0gTlVMTDsgICAgICAgICAgICAg ICAvKiBLZXJiZXJvcyA1IHBhc3N3b3JkIHByb21wdCAqLwotY2hhciAqIGs1cHJwcm9tcHQgPSBO VUxMOyAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIDUgcHJpbmNpcGFsIHByb21wdCAqLwotI2Vu ZGlmIC8qIENLX0tFUkJFUk9TICovCi0jaWZkZWYgQ0tfU1JQCi1jaGFyICogc3JwcHdwcm9tcHQg PSBOVUxMOwotI2VuZGlmIC8qIENLX1NSUCAqLwotCi1leHRlcm4gY2hhciAqIGNrcHJvbXB0LCAq IGlrcHJvbXB0OyAgICAgLyogRGVmYXVsdCBwcm9tcHQgKi8KLWV4dGVybiB4eF9zdHJwIHh4c3Ry aW5nOwotCi1leHRlcm4gY2hhciAqIGNkbXNnZmlsZVtdLCAqIGNkbXNnc3RyOwotCi1leHRlcm4g aW50Ci0gIGxvY2FsLCBzZXJ2ZXIsIHN1Y2Nlc3MsIGRlc3QsIHNsZWVwY2FuLCBpbnNlcnZlciwg ZmxvdywgYXV0b2Zsb3csIGJpbmFyeSwKLSAgcGFyaXR5LCBlc2NhcGUsIHdoYXQsIHR1cm4sIGR1 cGxleCwgYmFja2dyZCwgaHdwYXJpdHksIHN0b3BiaXRzLCB0dXJuY2gsCi0gIG1kbXR5cCwgbmV0 d29yaywgcXVpZXQsIG5ldHR5cGUsIGNhcnJpZXIsIGRlYnNlcywgZGVidGltLCBjZHRpbW8sIG5s YW5ncywKLSAgYmdzZXQsIHBmbGFnLCBtc2dmbGcsIGNtZG1zaywgeHN1c3BlbmQsIHRlY2hvLCBw YWNpbmcsIHhpdHdhcm4sIHhpdHN0YSwKLSAgb3V0ZXNjLCBjbWRfY29scywgY21kX3Jvd3MsIGNr eGVjaCwgeGFza21vcmUsIGhhdmVsaW5lLCBkaWRzZXRsaW4sIGlzZ3Vlc3QsCi0gIG1kbXNhdiwg Y2xlYXJycSwgc2F2ZWFzaywgZGVibXNnOwotCi1leHRlcm4gaW50IHJlbGlhYmxlLCBzZXRyZWxp YWJsZSwgbWF0Y2hkb3QsIG1hdGNoZmlmbywgZGlyX2RvdHM7Ci0KLSNpZm5kZWYgTk9TRVJWRVIK LSAgZXh0ZXJuIGludCBlbl9wcmk7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQotI2lmZGVmIElL U0RDT05GCi1leHRlcm4gaW50IGlrc2RjZjsKLSNlbmRpZiAvKiBJS1NEQ09ORiAqLwotI2lmZGVm IFRDUFNPQ0tFVAotICBleHRlcm4gaW50IHRuX2V4aXQ7Ci0jZW5kaWYgLyogVENQU09DS0VUICov Ci0jaWZkZWYgVE5DT0RFCi0gIGNoYXIgKiB0bl9wcl91aWQgPSBOVUxMOwotI2VuZGlmIC8qIFRO Q09ERSAqLwotICBleHRlcm4gaW50IGV4aXRvbmNsb3NlOwotCi0jaWZuZGVmIE5PS1ZFUkJTCi1l eHRlcm4gaW50IG5rdmVyYnM7Ci1leHRlcm4gc3RydWN0IGtleXRhYiBrdmVyYnNbXTsKLSNlbmRp ZiAvKiBOT0tWRVJCUyAqLwotCi1leHRlcm4gaW50IHR0bnByb3RvOyAgICAgICAgICAgICAgICAg ICAgLyogTmV0d29yayBwcm90b2NvbCAqLwotCi1leHRlcm4gY2hhciAqY2NudGFiW107ICAgICAg ICAgICAgICAgICAgLyogTmFtZXMgb2YgY29udHJvbCBjaGFycyAqLwotCi0jaWZkZWYgQ0tfQVBD Ci1leHRlcm4gaW50IGFwY2FjdGl2ZSwgYXBjc3RhdHVzOwotI2VuZGlmIC8qIENLX0FQQyAqLwot Ci0jaWZuZGVmIE5PU0NSSVBUCi1leHRlcm4gaW50IHNlY2hvOyAgICAgICAgICAgICAgICAgICAg ICAgLyogV2hldGhlciBTQ1JJUFQgY21kIHNob3VsZCBlY2hvICovCi0jZW5kaWYgLyogTk9TQ1JJ UFQgKi8KLQotI2lmZGVmIERDTURCVUYKLWV4dGVybiBjaGFyICphdG1idWYsICphdHhidWY7Ci0j ZWxzZQotZXh0ZXJuIGNoYXIgYXRtYnVmW10sIGF0eGJ1ZltdOwotI2VuZGlmIC8qIERDTURCVUYg Ki8KLWV4dGVybiBpbnQgY21mbGdzOwotCi1leHRlcm4gY2hhciBwc2F2ZVtdOwotZXh0ZXJuIGNo YXIgdWlkYnVmW107Ci1leHRlcm4gaW50ICBzbF91aWRfc2F2ZWQ7Ci1pbnQgRGVsZXRlU3RhcnR1 cEZpbGUgPSAwOwotCi1leHRlcm4gaW50IGNtZGx2bDsgICAgICAgICAgICAgICAgICAgICAgLyog T3ZlcmFsbCBjb21tYW5kIGxldmVsICovCi0KLSNpZm5kZWYgTk9TUEwKLV9QUk9UT1RZUCggc3Rh dGljIGludCBwYXJzZGlyLCAoaW50KSApOwotY2hhciBwcm1idWZbUFdCVUZMKzFdID0geyBOVUws IE5VTCB9OwotaW50IGZuZGlhZ3MgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZ1bmN0 aW9uIGRpYWdub3N0aWNzIG9uL29mZiAqLwotaW50IGZuZXJyb3IgPSAxOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEZ1bmN0aW9uIGVycm9yIHRyZWF0bWVudCAqLwotCi0jaWZkZWYgRENNREJV RgotZXh0ZXJuIGludCAqY291bnQsICp0YWtlcnIsICptZXJyb3IsICppbnBjYXM7Ci0jZWxzZQot ZXh0ZXJuIGludCBjb3VudFtdLCB0YWtlcnJbXSwgbWVycm9yW10sIGlucGNhc1tdOwotI2VuZGlm IC8qIERDTURCVUYgKi8KLWV4dGVybiBpbnQgbWVjaG87ICAgICAgICAgICAgICAgICAgICAgICAv KiBNYWNybyBlY2hvICovCi1leHRlcm4gbG9uZyBja19hbGFybTsKLWV4dGVybiBjaGFyIGFscm1f ZGF0ZVtdLCBhbHJtX3RpbWVbXTsKLSNlbHNlCi1leHRlcm4gaW50IHRha2VycltdOwotI2VuZGlm IC8qIE5PU1BMICovCi0KLWV4dGVybiBpbnQgeF9pZm51bTsKLWV4dGVybiBpbnQgYmlnc2JzaXos IGJpZ3Jic2l6OyAgICAgICAgICAvKiBQYWNrZXQgYnVmZmVycyAqLwotCi1leHRlcm4gbG9uZyBz cGVlZDsgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYWwgc3BlZWQgKi8KLQotZXh0ZXJu IGNoYXIgdHRuYW1lW107ICAgICAgICAgICAgICAgICAgIC8qIENvbW11bmljYXRpb24gZGV2aWNl IG5hbWUgKi8KLWV4dGVybiBjaGFyIG15aG9zdFtdIDsKLWV4dGVybiBjaGFyIGluaWRpcltdOyAg ICAgICAgICAgICAgICAgICAvKiBJbmkgRmlsZSBkaXJlY3RvcnkgKi8KLQotI2lmbmRlZiBOT1NF VEtFWQotZXh0ZXJuIEtFWSAqa2V5bWFwOyAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3Rl ciBtYXAgZm9yIFNFVCBLRVkgKDE6MSkgICovCi1leHRlcm4gTUFDUk8gKm1hY3JvdGFiOyAgICAg ICAgICAgICAgICAgLyogTWFjcm8gbWFwIGZvciBTRVQgS0VZICgxOnN0cmluZykgKi8KLSNlbmRp ZiAvKiBOT1NFVEtFWSAqLwotI2lmZGVmIE9TMgotaW50IHdpZGVyZXN1bHQ7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEZvciB3aWRlIE9TLzIgc2NhbiBjb2Rlcy9jbW51bSgpICovCi0jZW5k aWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotZXh0ZXJuIGludCB0 dF9zY3JzaXplW107ICAgICAgICAgICAgICAgIC8qIFNjcm9sbGJhY2sgYnVmZmVyIFNpemVzICov Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0vKiBQcmludGVyIHNl dHRpbmdzICovCi0KLWV4dGVybiBjaGFyICogcHJpbnRlcm5hbWU7ICAgICAgICAgICAgICAvKiBO VUxMIGlmIHByaW50ZXIgbm90IHJlZGlyZWN0ZWQgKi8KLWV4dGVybiBpbnQgcHJpbnRwaXBlOwot ZXh0ZXJuIGludCBub3ByaW50ZXI7Ci0jaWZkZWYgUFJJTlRTV0kKLWludCBwcmludHRpbW8gPSAw OwotY2hhciAqIHByaW50dGVybSA9IE5VTEw7Ci1jaGFyICogcHJpbnRzZXAgPSBOVUxMOwotaW50 IHByaW50ZXJ0eXBlID0gMDsKLSNpZmRlZiBCUFJJTlQKLWludCBwcmludGJpZGkgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAvKiBTRVQgQlBSSU5URVIgKGJpZGlyZWN0aW9uYWwpICovCi1sb25n IHBwb3J0c3BlZWQgPSAwTDsgICAgICAgICAgICAgICAgICAgLyogQmlkaXJlY3Rpb24gcHJpbnRl ciBwb3J0IHNwZWVkLCAqLwotaW50IHBwb3J0cGFyaXR5ID0gMDsgICAgICAgICAgICAgICAgICAg IC8qICBwYXJpdHksICovCi1pbnQgcHBvcnRmbG93ID0gRkxPX0tFRVA7ICAgICAgICAgICAgICAg LyogIGFuZCBmbG93IGNvbnRyb2wgKi8KLSNlbmRpZiAvKiBCUFJJTlQgKi8KLSNpZmRlZiBPUzIK LWV4dGVybiBpbnQgdHh0MnBzOyAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0MlBTIGNvbnZl cnNpb24/ICovCi1leHRlcm4gaW50IHBzX3dpZHRoLCBwc19sZW5ndGg7ICAgICAgICAgLyogVGV4 dDJQUyBkaW1lbnNpb25zICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogUFJJTlRTV0kg Ki8KLQotI2lmZGVmIE9TMgotZXh0ZXJuIGludCB0Y3BfYXZhaWw7ICAgICAgICAgICAgICAgICAg IC8qIE5vbnplcm8gaWYgVENQL0lQIGlzIGF2YWlsYWJsZSAqLwotI2lmZGVmIERFQ05FVAotZXh0 ZXJuIGludCBkbmV0X2F2YWlsOyAgICAgICAgICAgICAgICAgIC8qIERpdHRvIGZvciBERUNuZXQg Ki8KLSNlbmRpZiAvKiBERUNORVQgKi8KLSNpZmRlZiBTVVBFUkxBVAotZXh0ZXJuIGludCBzbGF0 X2F2YWlsOwotI2VuZGlmIC8qIFNVUEVSTEFUICovCi0jZW5kaWYgLyogT1MyICovCi0KLXN0YXRp YyBzdHJ1Y3Qga2V5dGFiIGxvZ2ludGFiW10gPSB7Ci0gICAgeyAicGFzc3dvcmQiLCBMT0dJX1BT VywgQ01fSU5WIH0sCi0gICAgeyAicHJvbXB0IiwgICBMT0dJX1BSTSwgQ01fSU5WIH0sCi0gICAg eyAidXNlcmlkIiwgICBMT0dJX1VJRCwgMCB9Ci19OwotCi0jaWZuZGVmIE5PQ1NFVFMKLS8qIHN5 c3RlbS1pbmRlcGVuZGVudCBjaGFyYWN0ZXIgc2V0cywgZGVmaW5lZCBpbiBja2N4bGEuW2NoXSAq LwotZXh0ZXJuIHN0cnVjdCBjc2luZm8gdGNzaW5mb1tdOwotZXh0ZXJuIHN0cnVjdCBsYW5naW5m byBsYW5nc1tdOwotCi0vKiBPdGhlciBjaGFyYWN0ZXItc2V0IHJlbGF0ZWQgdmFyaWFibGVzICov Ci1leHRlcm4gaW50IHRjaGFyc2V0LCB0c2xldmVsLCBsYW5ndWFnZTsKLSNlbmRpZiAvKiBOT0NT RVRTICovCi0KLS8qIEZpbGUtdHJhbnNmZXIgdmFyaWFibGUgZGVjbGFyYXRpb25zICovCi0KLSNp Zm5kZWYgTk9YRkVSCi0jaWZkZWYgQ0tfQVVUT0RMCi1leHRlcm4gaW50IGNtZGFkbDsKLSNlbmRp ZiAvKiBDS19BVVRPREwgKi8KLQotI2lmbmRlZiBOT1NFUlZFUgotZXh0ZXJuIGludCBuZ2V0cGF0 aDsKLWV4dGVybiBjaGFyICogZ2V0cGF0aFtdOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0KLWV4 dGVybiBzdHJ1Y3QgY2tfcCBwdGFiW107Ci0KLWV4dGVybiBDSEFSIHNzdGF0ZTsgICAgICAgICAg ICAgICAgICAgICAvKiBQcm90b2NvbCBzdGFydCBzdGF0ZSAqLwotZXh0ZXJuIENIQVIgbXljdGxx OyAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wtY2hhcmFjdGVyIHByZWZpeCAqLwotZXh0 ZXJuIENIQVIgbXlycHRxOyAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGVhdC1jb3VudCBwcmVm aXggKi8KLQotZXh0ZXJuIGludCBwcm90b2NvbCwgc2l6ZSwgc3BzaXosIHNwbWF4LCB1cnBzaXos IHNydnRpbSwgc3J2Y2Rtc2csIHNsb3N0YXJ0LAotICBzcnZkaXMsIHhmZXJtb2RlLCBja2RlbGF5 LCBrZWVwLCBtYXh0cnksIHVua2NzLCBiY3RyLCBiY3RmLCBlYnFmbGcsIHN3Y2FwciwKLSAgd3Ns b3RyLCBsc2NhcHIsIGxzY2FwdSwgc3BzaXpyLCBycHRlbmEsIHJwdG1pbiwgZG9jcmMsIHhmcmNh biwgeGZyY2hyLAotICB4ZnJudW0sIHhmcmJlbCwgeGZyaW50LCBzcnZwaW5nLCBnX3hmZXJtb2Rl LCB4ZnJ4bGE7Ci0KLSNpZmRlZiBQSVBFU0VORAotZXh0ZXJuIGludCB1c2VwaXBlczsKLSNlbmRp ZiAvKiBQSVBFU0VORCAqLwotCi0jaWZkZWYgQ0tYWENIQVIgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRE9VQkxFIC8gSUdOT1JFIGNoYXIgdGFibGUgKi8KLWV4dGVybiBpbnQgZGJsZmxhZywg aWduZmxhZywgZGJsY2hhcjsKLWV4dGVybiBzaG9ydCBkYmx0W107Ci0jZW5kaWYgLyogQ0tYWENI QVIgKi8KLQotI2lmZGVmIENLX1NQRUVECi1leHRlcm4gc2hvcnQgY3RscFtdOyAgICAgICAgICAg ICAgICAgICAgLyogQ29udHJvbC1wcmVmaXggdGFibGUgKi8KLWV4dGVybiBpbnQgcHJlZml4aW5n Owotc3RhdGljIHN0cnVjdCBrZXl0YWIgcGZ4dGFiW10gPSB7Ci0gICAgImFsbCIsICAgICAgICAg UFhfQUxMLCAwLAotICAgICJjYXV0aW91cyIsICAgIFBYX0NBVSwgMCwKLSAgICAibWluaW1hbCIs ICAgICBQWF9XSUwsIDAsCi0gICAgIm5vbmUiLCAgICAgICAgUFhfTk9OLCAwCi19OwotI2VuZGlm IC8qIENLX1NQRUVEICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLS8qIERlY2xhcmF0aW9ucyBm cm9tIGNtZCBwYWNrYWdlICovCi0KLSNpZmRlZiBEQ01EQlVGCi1leHRlcm4gY2hhciAqY21kYnVm OyAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXIgKi8KLWV4dGVybiBjaGFyICps aW5lOwotZXh0ZXJuIGNoYXIgKnRtcGJ1ZjsKLSNlbHNlCi1leHRlcm4gY2hhciBjbWRidWZbXTsg ICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXIgKi8KLWV4dGVybiBjaGFyIGxpbmVb XTsgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgYnVmZmVyIGZvciBhbnl0aGluZyAq LwotZXh0ZXJuIGNoYXIgdG1wYnVmW107Ci0jZW5kaWYgLyogRENNREJVRiAqLwotCi0vKiBGcm9t IG1haW4gY2t1c2VyIG1vZHVsZS4uLiAqLwotCi1leHRlcm4gY2hhciAqdHAsICpscDsgICAgICAg ICAgICAgICAgICAgLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLwotCi1leHRlcm4gaW50IHRsZXZlbDsg ICAgICAgICAgICAgICAgICAgICAgLyogVGFrZSBDb21tYW5kIGZpbGUgbGV2ZWwgKi8KLQotI2lm bmRlZiBOT0xPQ0FMCi1leHRlcm4gaW50IHNlc3NmdDsgICAgICAgICAgICAgICAgICAgICAgLyog U2Vzc2lvbi1sb2cgZmlsZSB0eXBlICovCi1leHRlcm4gaW50IHNsb2d0czsgICAgICAgICAgICAg ICAgICAgICAgLyogU2Vzc2lvbi1sb2cgdGltZXN0YW1wcyBvbi9vZmYgKi8KLWV4dGVybiBpbnQg c2xvZ251bDsJCQkvKiBMaW5lcyBudWxsLXRlcm1pbmF0ZWQgKi8KLSNlbmRpZiAvKiBOT0xPQ0FM ICovCi0KLWNoYXIgKiB0ZW1wZGlyID0gTlVMTDsKLQotI2lmZGVmIFZNUwotaW50IHZtc19tc2dz ID0gMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBNRVNTQUdFUyAqLwotZXh0ZXJuIGlu dCBiYXRjaDsKLSNlbmRpZiAvKiBWTVMgKi8KLQotLyogS2V5d29yZCB0YWJsZXMgZm9yIFNFVCBj b21tYW5kcyAqLwotCi0jaWZkZWYgQ0tfU1BFRUQKLXN0cnVjdCBrZXl0YWIgY3RsdGFiW10gPSB7 Ci0gICAgInByZWZpeGVkIiwgICAxLCAwLCAgICAgICAgICAgICAgICAgLyogTm90ZSwgdGhlIHZh bHVlcyBhcmUgaW1wb3J0YW50LiAqLwotICAgICJ1bnByZWZpeGVkIiwgMCwgMAotfTsKLSNlbmRp ZiAvKiBDS19TUEVFRCAqLwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBvbGRuZXdbXSA9IHsKLSAg ICAibmV3IiwgMCwgMCwKLSAgICAib2xkIiwgMSwgMAotfTsKLQotI2RlZmluZSBNQ0hfRklGTyAx Ci0jZGVmaW5lIE1DSF9ET1RGIDIKLXN0cnVjdCBrZXl0YWIgbWF0Y2h0YWJbXSA9IHsKLSAgICB7 ICJkb3RmaWxlIiwgTUNIX0RPVEYsIDAgfSwKLSAgICB7ICJmaWZvIiwgICAgTUNIX0ZJRk8sIDAg fQotfTsKLWludCBubWF0Y2h0YWIgPSAoc2l6ZW9mKG1hdGNodGFiKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSk7Ci0KLSNpZm5kZWYgTk9TUEwKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZ1bmN0YWJb XSA9IHsKLSAgICAiZGlhZ25vc3RpY3MiLCBGVU5DX0RJLCAwLAotICAgICJlcnJvciIsICAgICAg IEZVTkNfRVIsIDAKLX07Ci1zdGF0aWMgaW50IG5mdW5jdGFiID0gKHNpemVvZihmdW5jdGFiKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0cnVjdCBrZXl0YWIgb3V0cHRhYltdID0geyAg ICAgICAgICAgICAvKiBTRVQgT1VUUFVUIHBhcmFtZXRlcnMgKi8KLSAgICAicGFjaW5nIiwgMCwg MCwgICAgICAgICAgICAgICAgICAgICAvKiBvbmx5IG9uZSBzbyBmYXIuLi4gKi8KLSAgICAic3Bl Y2lhbC1lc2NhcGVzIiwgMSwgMAotfTsKLWludCBub3V0cHRhYiA9IChzaXplb2Yob3V0cHRhYikg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpOyAvKiBIb3cgbWFueSAqLwotI2VuZGlmIC8qIE5PU1BM ICovCi0KLXN0cnVjdCBrZXl0YWIgY2hrdGFiW10gPSB7ICAgICAgICAgICAgICAvKiBCbG9jayBj aGVjayB0eXBlcyAqLwotICAgICIxIiwgMSwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDEgPSAgNi1iaXQgY2hlY2tzdW0gKi8KLSAgICAiMiIsIDIsIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAyID0gMTItYml0IGNoZWNrc3VtICovCi0gICAgIjMiLCAzLCAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMyA9IDE2LWJpdCBDUkMgKi8KLSAgICAiNCIsIDQsIDAsCQkJ CS8qIFNhbWUgYXMgQiAqLwotICAgICI1IiwgNSwgMCwJCQkJLyogU2FtZSBhcyBGICovCi0gICAg ImJsYW5rLWZyZWUtMiIsIDQsIENNX0lOViwJCS8qIEIgPSAxMi1iaXQgY2hlY2tzdW0sIG5vIGJs YW5rcyAqLwotICAgICJmb3JjZS0zIiwgNSwgQ01fSU5WCQkvKiBGID0gRm9yY2UgQ1JDIG9uIEFM TCBwYWNrZXRzICovCi19Owotc3RhdGljIGludCBuY2hrdCA9IChzaXplb2YoY2hrdGFiKSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0cnVjdCBrZXl0YWIgcnB0dGFiW10gPSB7ICAgICAg ICAgICAgICAvKiBTRVQgUkVQRUFUICovCi0gICAgImNvdW50cyIsICAgIDAsIDAsICAgICAgICAg ICAgICAgICAgLyogT24gb3IgT2ZmICovCi0jaWZkZWYgQ09NTUVOVAotICAgICJtaW5pbXVtIiwg ICAxLCAwLCAgICAgICAgICAgICAgICAgIC8qIFRocmVzaGhvbGQgKi8KLSNlbmRpZiAvKiBDT01N RU5UICovCi0gICAgInByZWZpeCIsICAgIDIsIDAgICAgICAgICAgICAgICAgICAgLyogUmVwZWF0 LXByZWZpeCBjaGFyYWN0ZXIgdmFsdWUgKi8KLX07Ci0KLSNpZm5kZWYgTk9MT0NBTAotLyogRm9y IFNFVCBbIE1PREVNIF0gQ0FSUklFUiwgYW5kIGFsc28gZm9yIFNFVCBESUFMIENPTk5FQ1QgKi8K LQotc3RydWN0IGtleXRhYiBjcnJ0YWJbXSA9IHsKLSAgICAiYXV0b21hdGljIiwgQ0FSX0FVVCwg MCwgICAgICAgICAgICAvKiAyICovCi0gICAgIm9mZiIsICAgICAgIENBUl9PRkYsIDAsICAgICAg ICAgICAgLyogMCAqLwotICAgICJvbiIsICAgICAgICBDQVJfT04sICAwICAgICAgICAgICAgIC8q IDEgKi8KLX07Ci1pbnQgbmNyciA9IDM7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi1zdHJ1Y3Qg a2V5dGFiIG9vYXRhYltdID0geyAgICAgICAgICAgICAgLyogT24vT2ZmL0F1dG8gdGFibGUgKi8K LSAgICAiYXV0b21hdGljIiwgU0VUX0FVVE8sIDAsICAgICAgICAgICAvKiAyICovCi0gICAgIm9m ZiIsICAgICAgIFNFVF9PRkYsICAwLCAgICAgICAgICAgLyogMCAqLwotICAgICJvbiIsICAgICAg ICBTRVRfT04sICAgMCAgICAgICAgICAgIC8qIDEgKi8KLX07Ci0KLXN0cnVjdCBrZXl0YWIgb29l dGFiW10gPSB7ICAgICAgICAgICAgICAvKiBPbi9PZmYvU3RkZXJyIHRhYmxlIDIwMTAvMDMvMTIg Ki8KLSAgICAib2ZmIiwgICAgICAgU0VUX09GRiwgMCwJCS8qIGZvciBTRVQgREVCVUcgTUVTU0FH RVMgKi8KLSAgICAib24iLCAgICAgICAgU0VUX09OLCAgMCwKLSAgICAicyIsICAgICAgICAgMiwg ICAgICAgQ01fQUJSfENNX0lOViwKLSAgICAic3QiLCAgICAgICAgMiwgICAgICAgQ01fQUJSfENN X0lOViwKLSAgICAic3RkIiwgICAgICAgMiwgICAgICAgQ01fQUJSfENNX0lOViwKLSAgICAic3Rk ZXJyIiwgICAgMiwgICAgICAgMCwKLSAgICAic3Rkb3V0IiwgICAgU0VUX09OLCAgQ01fSU5WCi19 Owotc3RhdGljIGludCBub29ldGFiID0gKHNpemVvZihvb2V0YWIpIC8gc2l6ZW9mKHN0cnVjdCBr ZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiBvb2t0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIE9u L09mZi9Bc2sgdGFibGUgKi8KLSAgICAiYXNrIiwgICAgICAgMiwgICAgICAgIDAsICAgICAgICAg ICAvKiAyICovCi0gICAgIm9mZiIsICAgICAgIFNFVF9PRkYsICAwLCAgICAgICAgICAgLyogMCAq LwotICAgICJvbiIsICAgICAgICBTRVRfT04sICAgMCAgICAgICAgICAgIC8qIDEgKi8KLX07Ci0K LXN0cnVjdCBrZXl0YWIgcXZ0YWJbXSA9IHsgICAgICAgICAgICAgICAvKiBRdWlldC9WZXJib3Nl IHRhYmxlICovCi0gICAgInF1aWV0IiwgMSwgMCwKLSAgICAidmVyYm9zZSIsIDAsIDAKLX07Ci1p bnQgbnF2dCA9IDI7Ci0KLS8qIEZvciBTRVQgREVCVUcgKi8KLQotI2RlZmluZSBERUJfT0ZGICAw Ci0jZGVmaW5lIERFQl9PTiAgIDEKLSNkZWZpbmUgREVCX1NFUyAgMgotI2RlZmluZSBERUJfVElN ICAzCi0jZGVmaW5lIERFQl9MRU4gIDQKLSNkZWZpbmUgREVCX01TRyAgNQotCi1zdHJ1Y3Qga2V5 dGFiIGRiZ3RhYltdID0gewotICAgICJsaW5lbGVuZ3RoIiwgREVCX0xFTiwgQ01fSU5WLAotICAg ICJtIiwgICAgICAgICAgREVCX01TRywgQ01fQUJSfENNX0lOViwKLSAgICAibWVzc2FnZSIsICAg IERFQl9NU0csIDAsCi0gICAgIm1zZyIsICAgICAgICBERUJfTVNHLCBDTV9JTlYsCi0gICAgIm9m ZiIsICAgICAgICBERUJfT0ZGLCAwLAotICAgICJvbiIsICAgICAgICAgREVCX09OLCAgMCwKLSAg ICAic2Vzc2lvbiIsICAgIERFQl9TRVMsIDAsCi0gICAgInRpbWVzdGFtcHMiLCBERUJfVElNLCAw Ci19OwotaW50IG5kYmcgPSAoc2l6ZW9mKGRiZ3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikp OwotCi0jaWZuZGVmIE5PTE9DQUwKLS8qIFRyYW5zbWlzc2lvbiBzcGVlZHMgKi8KLQotI2lmZGVm IFRUU1BETElTVCAvKiBTcGVlZCB0YWJsZSBjb25zdHJ1Y3RlZCBhdCBydW50aW1lIC4gLiAuICov Ci0KLXN0cnVjdCBrZXl0YWIgKiBzcGR0YWIgPSBOVUxMOwotaW50IG5zcGQgPSAwOwotCi0jZWxz ZQotLyoKLSAgTm90ZSwgdGhlIHZhbHVlcyBhcmUgZW5jb2RlZCBpbiBjcHMgcmF0aGVyIHRoYW4g YnBzIGJlY2F1c2UgMTkyMDAgYW5kIGhpZ2hlcgotICBhcmUgdG9vIGJpZyBmb3Igc29tZSBpbnRz LiAgQWxsIGJ1dCA3NWJwcyBhcmUgbXVsdGlwbGVzIG9mIHRlbi4gIFJlc3VsdCBvZgotICBsb29r dXAgaW4gdGhpcyB0YWJsZSBtdXN0IGJlIG11bHRpcGxpZWQgYnkgMTAgdG8gZ2V0IGFjdHVhbCBz cGVlZCBpbiBicHMuCi0gIElmIHRoaXMgbnVtYmVyIGlzIDcwLCBpdCBtdXN0IGJlIGNoYW5nZWQg dG8gNzUuICBJZiBpdCBpcyA4ODgsIHRoaXMgbWVhbnMKLSAgNzUvMTIwMCBzcGxpdCBzcGVlZC4K LQotICBUaGUgdmFsdWVzIGFyZSBnZW5lcmljLCByYXRoZXIgdGhhbiBzcGVjaWZpYyB0byBVTklY LiAgV2UgY2FuJ3QgdXNlIEI3NSwKLSAgQjEyMDAsIEI5NjAwLCBldGMsIGJlY2F1c2Ugbm9uLVVO SVggdmVyc2lvbnMgb2YgQy1LZXJtaXQgd2lsbCBub3QKLSAgbmVjZXNzYXJpbHkgaGF2ZSB0aGVz ZSBzeW1ib2xzIGRlZmluZWQuICBUaGUgQlBTX3h4eCBzeW1ib2xzIGFyZQotICBLZXJtaXQtc3Bl Y2lmaWMsIGFuZCBhcmUgZGVmaW5lZCBpbiBja2NkZWIuaCBvciBvbiB0aGUgQ0MgY29tbWFuZCBs aW5lLgotCi0gIExpa2UgYWxsIG90aGVyIGtleXRhYnMsIHRoaXMgb25lIG11c3QgYmUgaW4gImFs cGhhYmV0aWNhbCIgb3JkZXIsCi0gIHJhdGhlciB0aGFuIG51bWVyaWMgb3JkZXIuCi0qLwotc3Ry dWN0IGtleXRhYiBzcGR0YWJbXSA9IHsKLSAgICAiMCIsICAgICAgMCwgIENNX0lOViwKLSAgICAi MTEwIiwgICAxMSwgIDAsCi0jaWZkZWYgQlBTXzExNUsKLSAiMTE1MjAwIiwxMTUyMCwgIDAsCi0j ZW5kaWYgLyogQlBTXzExNUsgKi8KLSAgIjEyMDAiLCAgIDEyMCwgIDAsCi0jaWZkZWYgQlBTXzEz NAotICAiMTM0LjUiLCAgMTM0LCAgMCwKLSNlbmRpZiAvKiBCUFNfMTM0ICovCi0jaWZkZWYgQlBT XzE0SwotICAiMTQ0MDAiLCAxNDQwLCAgMCwKLSNlbmRpZiAvKiBCUFNfMTRLICovCi0jaWZkZWYg QlBTXzE1MAotICAiMTUwIiwgICAgIDE1LCAgMCwKLSNlbmRpZiAvKiBCUFNfMTUwICovCi0jaWZk ZWYgQlBTXzE4MDAKLSAgIjE4MDAiLCAgICAgMTgwLCAgMCwKLSNlbmRpZiAvKiBCUFNfMTUwICov Ci0jaWZkZWYgQlBTXzE5SwotICAiMTkyMDAiLCAxOTIwLCAgMCwKLSNlbmRpZiAvKiBCUFNfMTlL ICovCi0jaWZkZWYgQlBTXzIwMAotICAiMjAwIiwgICAgIDIwLCAgMCwKLSNlbmRpZiAvKiBCUFNf MjAwICovCi0jaWZkZWYgQlBTXzIzMEsKLSAgIjIzMDQwMCIsIDIzMDQwLCAwLAotI2VuZGlmIC8q IEJQU18yMzBLICovCi0gICIyNDAwIiwgICAyNDAsICAwLAotI2lmZGVmIEJQU18yOEsKLSAgIjI4 ODAwIiwgMjg4MCwgIDAsCi0jZW5kaWYgLyogQlBTXzI4SyAqLwotICAiMzAwIiwgICAgIDMwLCAg MCwKLSNpZmRlZiBCUFNfMzYwMAotICAiMzYwMCIsICAgMzYwLCAgMCwKLSNlbmRpZiAvKiBCUFNf MzYwMCAqLwotI2lmZGVmIEJQU18zOEsKLSAgIjM4NDAwIiwgMzg0MCwgIDAsCi0jZW5kaWYgLyog QlBTXzM4SyAqLwotI2lmZGVmIEJQU180NjBLCi0gICI0NjA4MDAiLCA0NjA4MCwgIDAsICAgICAg ICAgICAgICAgICAgLyogTmVlZCAzMiBiaXRzIGZvciB0aGlzLi4uICovCi0jZW5kaWYgLyogQlBT XzQ2MEsgKi8KLSAgIjQ4MDAiLCAgIDQ4MCwgIDAsCi0jaWZkZWYgQlBTXzUwCi0gICI1MCIsICAg ICAgIDUsICAwLAotI2VuZGlmIC8qIEJQU181MCAqLwotI2lmZGVmIEJQU181N0sKLSAgIjU3NjAw IiwgNTc2MCwgIDAsCi0jZW5kaWYgLyogQlBTXzU3SyAqLwotICAiNjAwIiwgICAgIDYwLCAgMCwK LSNpZmRlZiBCUFNfNzIwMAotICAiNzIwMCIsICAgNzIwLCAgMCwKLSNlbmRpZiAvKiBCUFNfNzIw MCAqLwotI2lmZGVmIEJQU183NQotICAiNzUiLCAgICAgICA3LCAgMCwKLSNlbmRpZiAvKiBCUFNf NzUgKi8KLSNpZmRlZiBCUFNfNzUxMgotICAiNzUvMTIwMCIsODg4LCAgMCwgICAgICAgICAgICAg ICAgICAgIC8qIENvZGUgIjg4OCIgZm9yIHNwbGl0IHNwZWVkICovCi0jZW5kaWYgLyogQlBTXzc1 MTIgKi8KLSNpZmRlZiBCUFNfNzZLCi0gICI3NjgwMCIsIDc2ODAsICAwLAotI2VuZGlmIC8qIEJQ U183NksgKi8KLSNpZmRlZiBCUFNfOTIxSwotICAiOTIxNjAwIiwgOTIxNjAsMCwgICAgICAgICAg ICAgICAgICAgIC8qIE5lZWQgMzIgYml0cyBmb3IgdGhpcy4uLiAqLwotI2VuZGlmIC8qIEJQU185 MjFLICovCi0gICI5NjAwIiwgICA5NjAsICAwCi19OwotaW50IG5zcGQgPSAoc2l6ZW9mKHNwZHRh YikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOyAvKiBIb3cgbWFueSBzcGVlZHMgKi8KLSNlbmRp ZiAvKiBUVFNQRExJU1QgKi8KLQotI2lmZGVmIFROX0NPTVBPUlQKLXN0cnVjdCBrZXl0YWIgdG5z cGR0YWJbXSA9IHsgICAgICAgICAgICAvKiBSRkMgMjIxNyBURUxORVQgQ09NUE9SVCBPcHRpb24g Ki8KLSAgICAiMTE1MjAwIiwgMTE1MjAsICAwLCAgICAgICAgICAgICAgICAvKiAoYWRkIGFueSBv dGhlciBkZWZpbmVkIHNwZWVkcykgKi8KLSAgICAiMTIwMCIsICAgICAxMjAsICAwLAotICAgICIx NDQwMCIsICAgMTQ0MCwgIDAsCi0gICAgIjE5MjAwIiwgICAxOTIwLCAgMCwKLSAgICAiMjMwNDAw IiwgMjMwNDAsICAwLAotICAgICIyNDAwIiwgICAgIDI0MCwgIDAsCi0gICAgIjI4ODAwIiwgICAy ODgwLCAgMCwKLSAgICAiMzAwIiwgICAgICAgMzAsICAwLAotICAgICIzODQwMCIsICAgMzg0MCwg IDAsCi0gICAgIjQ2MDgwMCIsIDQ2MDgwLCAgMCwKLSAgICAiNDgwMCIsICAgICA0ODAsICAwLAot ICAgICI1NzYwMCIsICAgNTc2MCwgIDAsCi0gICAgIjYwMCIsICAgICAgIDYwLCAgMCwKLSAgICAi OTYwMCIsICAgICA5NjAsICAwCi19OwotaW50IG50bnNwZCA9IChzaXplb2YodG5zcGR0YWIpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsgLyogSG93IG1hbnkgc3BlZWRzICovCi0jZW5kaWYgLyog VE5fQ09NUE9SVCAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi1l eHRlcm4gc3RydWN0IGtleXRhYiBsbmd0YWJbXTsgICAgICAgICAgLyogTGFuZ3VhZ2VzIGZvciBT RVQgTEFOR1VBR0UgKi8KLWV4dGVybiBpbnQgbmxuZzsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0K LSNpZm5kZWYgTk9MT0NBTAotLyogRHVwbGV4IGtleXdvcmQgdGFibGUgKi8KLQotc3RydWN0IGtl eXRhYiBkcHh0YWJbXSA9IHsKLSAgICAiZnVsbCIsICAgICAgMCwgMCwKLSAgICAiaGFsZiIsICAg ICAgMSwgMAotfTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLS8qIEZsb3cgQ29udHJvbCAqLwot Ci1zdHJ1Y3Qga2V5dGFiIGN4dHlwZXN3W10gPSB7Ci0jaWZkZWYgREVDTkVUCi0gICAgIi9kZWNu ZXQiLCAgICAgICAgIENYVF9ERUNORVQsICAwLAotI2VuZGlmIC8qIERFQ05FVCAqLwotICAgICIv ZGlyZWN0LXNlcmlhbCIsICBDWFRfRElSRUNULCAgMCwKLSNpZmRlZiBERUNORVQKLSAgICAiL2xh dCIsICAgICAgICAgICAgQ1hUX0xBVCwgICAgIDAsCi0jZWxzZQotI2lmZGVmIFNVUEVSTEFUCi0g ICAgIi9sYXQiLCAgICAgICAgICAgIENYVF9MQVQsICAgICAwLAotI2VuZGlmIC8qIFNVUEVSTEFU ICovCi0jZW5kaWYgLyogREVDTkVUICovCi0gICAgIi9tb2RlbSIsICAgICAgICAgIENYVF9NT0RF TSwgICAwLAotI2lmZGVmIE5QSVBFCi0gICAgIi9uYW1lZC1waXBlIiwgICAgIENYVF9OUElQRSwg ICAwLAotI2VuZGlmIC8qIE5QSVBFICovCi0jaWZkZWYgTkVUQklPUwotICAgICIvbmV0YmlvcyIs ICAgICAgICBDWFRfTkVUQklPUywgMCwKLSNlbmRpZiAvKiBORVRCSU9TICovCi0gICAgIi9yZW1v dGUiLCAgICAgICAgIENYVF9SRU1PVEUsICAwLAotI2lmZGVmIFRDUFNPQ0tFVAotICAgICIvdGNw aXAiLCAgICAgICAgICBDWFRfVENQSVAsICAgMCwKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNp ZmRlZiBBTllYMjUKLSAgICAiL3guMjUiLCAgICAgICAgICAgQ1hUX1gyNSwgICAgIDAsCi0jZW5k aWYgLyogQU5ZWDI1ICovCi0gICAgIiIsIDAsIDAKLX07Ci1pbnQgbmN4dHlwZXN3ID0gKHNpemVv ZihjeHR5cGVzdykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0jaWZkZWYgVE5fQ09NUE9S VAotc3RydWN0IGtleXRhYiB0bmZsb3RhYltdID0geyAgICAgICAgICAgIC8qIFNFVCBGTE9XLUNP TlRST0wga2V5d29yZCB0YWJsZSAqLwotICAgICJkdHIvY2QiLCAgICBGTE9fRFRSQywgMCwgICAg ICAgICAgIC8qIGZvciBSRkMgMjIxNyBUZWxuZXQgQ09NUE9SVCAqLwotICAgICJkdHIvY3RzIiwg ICBGTE9fRFRSVCwgMCwKLSAgICAia2VlcCIsICAgICAgRkxPX0tFRVAsIDAsCi0gICAgIm5vbmUi LCAgICAgIEZMT19OT05FLCAwLAotICAgICJydHMvY3RzIiwgICBGTE9fUlRTQywgMCwKLSAgICAi eG9uL3hvZmYiLCAgRkxPX1hPTlgsIDAKLX07Ci1pbnQgbnRuZmxvID0gKHNpemVvZih0bmZsb3Rh YikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQot c3RydWN0IGtleXRhYiBmbG90YWJbXSA9IHsgICAgICAgICAgICAgIC8qIFNFVCBGTE9XLUNPTlRS T0wga2V5d29yZCB0YWJsZSAqLwotICAgICJhdXRvbWF0aWMiLCBGTE9fQVVUTywgQ01fSU5WLCAg ICAgIC8qIE5vdCBuZWVkZWQgYW55IG1vcmUgKi8KLSNpZmRlZiBDS19EVFJDRAotICAgICJkdHIv Y2QiLCAgICBGTE9fRFRSQywgMCwKLSNlbmRpZiAvKiBDS19EVFJDRCAqLwotI2lmZGVmIENLX0RU UkNUUwotICAgICJkdHIvY3RzIiwgICBGTE9fRFRSVCwgMCwKLSNlbmRpZiAvKiBDS19EVFJDVFMg Ki8KLSAgICAia2VlcCIsICAgICAgRkxPX0tFRVAsIDAsCi0gICAgIm5vbmUiLCAgICAgIEZMT19O T05FLCAwLAotI2lmZGVmIENLX1JUU0NUUwotICAgICJydHMvY3RzIiwgICBGTE9fUlRTQywgMCwK LSNlbmRpZiAvKiBDS19SVFNDVFMgKi8KLSNpZm5kZWYgUGxhbjkKLSAgICAieG9uL3hvZmYiLCAg RkxPX1hPTlgsIDAsCi0jZW5kaWYgLyogUGxhbjkgKi8KLSAgICAiIiwgMCwgMAotfTsKLWludCBu ZmxvID0gKHNpemVvZihmbG90YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLS8q ICBIYW5kc2hha2UgY2hhcmFjdGVycyAgKi8KLQotc3RydWN0IGtleXRhYiBoc2h0YWJbXSA9IHsK LSAgICAiYmVsbCIsIDAwNywgMCwKLSAgICAiY29kZSIsIDk5OCwgMCwKLSAgICAiY3IiLCAgIDAx NSwgMCwKLSAgICAiZXNjIiwgIDAzMywgMCwKLSAgICAibGYiLCAgIDAxMiwgMCwKLSAgICAibm9u ZSIsIDk5OSwgMCwgICAgICAgICAgICAgICAgICAgICAvKiAoY2FuJ3QgdXNlIG5lZ2F0aXZlIG51 bWJlcnMpICovCi0gICAgInhvZmYiLCAwMjMsIDAsCi0gICAgInhvbiIsICAwMjEsIDAKLX07Ci1p bnQgbmhzaCA9IChzaXplb2YoaHNodGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNp Zm5kZWYgTk9MT0NBTAotc3RhdGljIHN0cnVjdCBrZXl0YWIgc2Z0dGFiW10gPSB7ICAgICAgIC8q IEZpbGUgdHlwZXMgZm9yIFNFVCBTRVNTSU9OLUxPRyAqLwotICAgICJhc2NpaSIsICAgICBYWUZU X1QsIENNX0lOViwKLSAgICAiYmluYXJ5IiwgICAgWFlGVF9CLCAwLAotICAgICJkZWJ1ZyIsICAg ICBYWUZUX0QsIDAsCi0gICAgIm51bGwtcGFkZGVkLWxpbmVzIiwgOTk4LCAwLAotICAgICJ0ZXh0 IiwgICAgICBYWUZUX1QsIDAsCi0gICAgInRpbWVzdGFtcGVkLXRleHQiLCA5OTksIDAKLX07Ci1z dGF0aWMgaW50IG5zZnR0YWIgPSAoc2l6ZW9mKHNmdHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRh YikpOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRlZiBOT0RJQUwKLQotI2lmZGVmIE5F VENPTk4gICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmtzIGRpcmVjdG9yeSBkZXBl bmRzICovCi1pbnQgbm5ldGRpciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogb24gRElB TCBjb2RlIC0tIGZpeCBsYXRlci4uLiAqLwotY2hhciAqbmV0ZGlyW01BWERESVIrMl07Ci0jZW5k aWYgLyogTkVUQ09OTiAqLwotCi1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgc2V0ZGlhbCwgKGludCkg KTsKLV9QUk9UT1RZUCggc3RhdGljIGludCBzZXRkY2QsICh2b2lkKSApOwotX1BST1RPVFlQKCBz dGF0aWMgaW50IGNrbG9naW4sICh2b2lkKSApOwotCi0jaWZuZGVmIE1JTklESUFMCi0jaWZkZWYg T0xEVEJDT0RFCi1leHRlcm4gaW50IHRibW9kZWw7ICAgICAgICAgICAgICAgICAgICAgLyogVGVs ZWJpdCBtb2RlbCBJRCAqLwotI2VuZGlmIC8qIE9MRFRCQ09ERSAqLwotI2VuZGlmIC8qIE1JTklE SUFMICovCi0KLWV4dGVybiBNRE1JTkYgKm1vZGVtcFtdOyAgICAgICAgICAgICAgICAvKiBQb2lu dGVycyB0byBtb2RlbSBpbmZvIHN0cnVjdHMgKi8KLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIG1kbXRh YltdOyAgICAgICAgICAvKiBNb2RlbSB0eXBlcyAoaW4gbW9kdWxlIGNrdWRpYS5jKSAqLwotZXh0 ZXJuIGludCBubWRtOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiB0aGVtICov Ci0KLV9QUk9UT1RZUChzdGF0aWMgaW50IGRpYWxzdHIsKGNoYXIgKiosIGNoYXIgKikpOwotCi1l eHRlcm4gaW50IGRpYWxobmcsIGRpYWx0bW8sIGRpYWxrc3AsIGRpYWxkcHksIGRpYWxtaHUsIGRp YWxlYywgZGlhbGRjOwotZXh0ZXJuIGludCBkaWFscnRyLCBkaWFsaW50LCBkaWFsdWR0LCBkaWFs c3J0LCBkaWFscnN0ciwgbWRtd2FpdGQ7Ci1leHRlcm4gaW50IG1kbXNwZCwgZGlhbGZjLCBkaWFs bXRoLCBkaWFsZXNjLCBkaWFsZmxkLCBkaWFsaWR0LCBkaWFscGFjZTsKLWV4dGVybiBpbnQgbWRt c3BrLCBtZG12b2wsIGRpYWx0ZXN0OwotCi1pbnQgZGlhbGN2dCA9IDI7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogRElBTCBDT05WRVJULURJUkVDVE9SWSAqLwotaW50IGRpYWxjbmYgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgQ09ORklSTUFUSU9OICovCi1pbnQgZGlhbGNv biA9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBDT05ORUNUICovCi1pbnQgZGlh bGNxICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBDT05ORUNUIEFVVE8gcXVp ZXQvdmVyYm9zZSAqLwotZXh0ZXJuIGxvbmcgZGlhbG1heCwgZGlhbGNhcGFzOwotaW50IHVzZXJt ZG0gPSAwOwotZXh0ZXJuIGludCBuZGlhbGRpcjsKLWV4dGVybiBjaGFyICpkaWFsaW5pLCAgICpk aWFsbXN0ciwgKmRpYWxtcHJtdCwgKmRpYWxkaXJbXSwgKmRpYWxjbWQsICAqZGlhbG5wciwKLSAq ZGlhbGRjb24sICpkaWFsZGNvZmYsICpkaWFsZWNvbiwgKmRpYWxlY29mZiwgKmRpYWxoY21kLCAg KmRpYWx4MywKLSAqZGlhbGh3ZmMsICpkaWFsc3dmYywgICpkaWFsbm9mYywgKmRpYWx0b25lLCAg KmRpYWxwdWxzZSwgKmRpYWxuYW1lLCAqZGlhbGxhYzsKLWV4dGVybiBjaGFyICpkaWFsbGNjLCAg ICpkaWFsaXhwLCAgKmRpYWxpeHMsICAgKmRpYWxsZHAsICAgKmRpYWxsZHMsICAqZGlhbHRmcCwK LSAqZGlhbHB4aSwgICpkaWFscHhvLCAgICpkaWFsc2Z4LCAgKmRpYWxhYW9uLCAgKmRpYWxhYW9m ZjsKLWV4dGVybiBjaGFyICpkaWFsbGNwLCAgICpkaWFsbGNzLCAgKmRpYWxpbmkyLCAgKmRpYWxt YWM7Ci1leHRlcm4gY2hhciAqZGlhbHNwb2ZmLCAqZGlhbHNwb24sICpkaWFsdm9sMSwgICpkaWFs dm9sMiwgICpkaWFsdm9sMzsKLQotY2hhciAqZGlhbHRvY2NbTUFYVFBDQ10gPSB7IE5VTEwsIE5V TEwgfTsKLWludCBuZGlhbHRvY2MgPSAwOwotY2hhciAqZGlhbHB1Y2NbTUFYVFBDQ10gPSB7IE5V TEwsIE5VTEwgfTsKLWludCBuZGlhbHB1Y2MgPSAwOwotCi1jaGFyICpkaWFsdGZjW01BWFRPTExG UkVFXSA9IHsKLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMCi19OwotaW50IG50b2xsZnJlZSA9IDA7Ci0KLWNoYXIgKmRpYWxweHhbTUFYUEJYRVhDSF0g PSB7Ci0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAot fTsKLWludCBuZGlhbHB4eCA9IDA7Ci0KLWNoYXIgKmRpYWxsY2FjW01BWExPQ0FMQUNdID0gewot ICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKLX07Ci1pbnQgbmxvY2FsYWMg PSAwOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBkcnN0cnRhYltdID0gewotICAgICJpbnRlcm5h dGlvbmFsIiwgNSwgMCwKLSAgICAibG9jYWwiLCAgICAgICAgIDIsIDAsCi0gICAgImxvbmctZGlz dGFuY2UiLCA0LCAwLAotICAgICJub25lIiwgICAgICAgICAgNiwgMAotfTsKLQotc3RhdGljIHN0 cnVjdCBrZXl0YWIgZGNudnRhYltdID0gewotICAgICJhc2siLCAgMiwgMCwKLSAgICAib2ZmIiwg IDAsIDAsCi0gICAgIm9uIiwgICAxLCAwCi19OwotCi1zdHJ1Y3Qga2V5dGFiIHNldG1kbVtdID0g ewotICAgICJjYXBhYmlsaXRpZXMiLCAgICAgWFlEQ0FQLCAgMCwKLSAgICAiY2Fycmllci13YXRj aCIsICAgIFhZRE1DRCwgIDAsCi0gICAgImNvbW1hbmQiLCAgICAgICAgICBYWURTVFIsICAwLAot ICAgICJjb21wcmVzc2lvbiIsICAgICAgWFlEREMsICAgQ01fSU5WLAotICAgICJkYXRhLWNvbXBy ZXNzaW9uIiwgWFlEREMsICAgMCwKLSAgICAiZGlhbC1jb21tYW5kIiwgICAgIFhZRERJQSwgIDAs Ci0gICAgImVycm9yLWNvcnJlY3Rpb24iLCBYWURFQywgICAwLAotICAgICJlc2NhcGUtY2hhcmFj dGVyIiwgWFlERVNDLCAgMCwKLSAgICAiZmxvdy1jb250cm9sIiwgICAgIFhZREZDLCAgIDAsCi0g ICAgImhhbmd1cC1tZXRob2QiLCAgICBYWURNSFUsICAwLAotI2lmbmRlZiBOT1hGRVIKLSAgICAi a2VybWl0LXNwb29mIiwgICAgIFhZREtTUCwgIDAsCi0jZW5kaWYgLyogTk9YRkVSICovCi0gICAg Im1heGltdW0tc3BlZWQiLCAgICBYWURNQVgsICAwLAotICAgICJuYW1lIiwgICAgICAgICAgICAg WFlETkFNLCAgMCwKLSAgICAic3BlYWtlciIsICAgICAgICAgIFhZRFNQSywgIDAsCi0gICAgInNw ZWVkLW1hdGNoaW5nIiwgICBYWURTUEQsICAwLAotICAgICJ0eXBlIiwgICAgICAgICAgICAgWFlE VFlQLCAgMCwKLSAgICAidm9sdW1lIiwgICAgICAgICAgIFhZRFZPTCwgIDAKLX07Ci1pbnQgbnNl dG1kbSA9IChzaXplb2Yoc2V0bWRtKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0cnVj dCBrZXl0YWIgdm9sdGFiW10gPSB7Ci0gICAgImhpZ2giLCAgIDMsICAwLAotICAgICJsb3ciLCAg ICAxLCAgMCwKLSAgICAibWVkaXVtIiwgMiwgIDAKLX07Ci0KLXN0cnVjdCBrZXl0YWIgbWRtY2Fw W10gPSB7Ci0gICAgImF0LWNvbW1hbmRzIiwgICAgICBDS0RfQVQsICAwLAotICAgICJjb21wcmVz c2lvbiIsICAgICAgQ0tEX0RDLCAgMCwKLSAgICAiZGMiLCAgICAgICAgICAgICAgIENLRF9EQywg IENNX0lOViwKLSAgICAiZWMiLCAgICAgICAgICAgICAgIENLRF9FQywgIENNX0lOViwKLSAgICAi ZXJyb3ItY29ycmVjdGlvbiIsIENLRF9FQywgIDAsCi0gICAgImhhcmR3YXJlLWZsb3ciLCAgICBD S0RfSFcsICAwLAotICAgICJod2ZjIiwgICAgICAgICAgICAgQ0tEX0hXLCAgQ01fSU5WLAotICAg ICJpdHUiLCAgICAgICAgICAgICAgQ0tEX1YyNSwgQ01fSU5WLAotICAgICJrZXJtaXQtc3Bvb2Yi LCAgICAgQ0tEX0tTLCAgMCwKLSAgICAia3MiLCAgICAgICAgICAgICAgIENLRF9LUywgIENNX0lO ViwKLSAgICAic2IiLCAgICAgICAgICAgICAgIENLRF9TQiwgIENNX0lOViwKLSAgICAic29mdHdh cmUtZmxvdyIsICAgIENLRF9TVywgIDAsCi0gICAgInNwZWVkLWJ1ZmZlcmluZyIsICBDS0RfU0Is ICAwLAotICAgICJzd2ZjIiwgICAgICAgICAgICAgQ0tEX1NXLCAgQ01fSU5WLAotICAgICJ0YiIs ICAgICAgICAgICAgICAgQ0tEX1RCLCAgQ01fSU5WLAotICAgICJ0ZWxlYml0IiwgICAgICAgICAg Q0tEX1RCLCAgMCwKLSAgICAidjI1YmlzLWNvbW1hbmRzIiwgIENLRF9WMjUsIDAKLX07Ci1pbnQg bm1kbWNhcCA9IChzaXplb2YobWRtY2FwKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNp ZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgQU5TV0VSIG5vdCBp bXBsZW1lbnRlZCB5ZXQgKi8KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGFuc3dlcnRhYltdID0gewot ICAgIHsgImNhbGxlci1pZCIsICBYWUFfQ0lELCAgMCB9OwotICAgIHsgInJpbmdzIiwgICAgICBY WUFfUk5HLCAgMCB9OwotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmFuc3dlcnRh YiA9ICAoc2l6ZW9mKGFuc3dlcnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0KLXN0cnVjdCBrZXl0YWIgZGlhbHRhYltdID0geyAgICAgICAg ICAgICAvKiBTRVQgRElBTCB0YWJsZSAqLwotICAgICJhcmVhLWNvZGUiLCAgICAgICAgWFlETEFD LCAwLCAgICAgIC8qIEFsc28gc3RpbGwgaW5jbHVkZXMgaXRlbXMgICAgICovCi0gICAgImNvbXBy ZXNzaW9uIiwgICAgICBYWUREQywgIENNX0lOViwgLyogdGhhdCB3ZXJlIG1vdmVkIHRvIFNFVCBN T0RFTSwgKi8KLSAgICAiY29uZmlybWF0aW9uIiwgICAgIFhZRENORiwgMCwgICAgICAvKiBidXQg dGhleSBhcmUgQ01fSU5WaXNpYmxlLi4uICAqLwotICAgICJjb25uZWN0IiwgICAgICAgICAgWFlE Q09OLCAwLAotICAgICJjb252ZXJ0LWRpcmVjdG9yeSIsWFlEQ1ZULCAwLAotICAgICJjb3VudHJ5 LWNvZGUiLCAgICAgWFlETENDLCAwLAotICAgICJkaWFsLWNvbW1hbmQiLCAgICAgWFlERElBLCBD TV9JTlYsCi0gICAgImRpcmVjdG9yeSIsICAgICAgICBYWURESVIsIDAsCi0gICAgImRpc3BsYXki LCAgICAgICAgICBYWUREUFksIDAsCi0gICAgImVzY2FwZS1jaGFyYWN0ZXIiLCBYWURFU0MsIENN X0lOViwKLSAgICAiZXJyb3ItY29ycmVjdGlvbiIsIFhZREVDLCAgQ01fSU5WLAotICAgICJmbG93 LWNvbnRyb2wiLCAgICAgWFlERkMsICBDTV9JTlYsCi0gICAgImZvcmNlLWxvbmctZGlzdGFuY2Ui LCBYWURGTEQsIDAsCi0gICAgImhhbmd1cCIsICAgICAgICAgICBYWURIVVAsIDAsCi0gICAgImln bm9yZS1kaWFsdG9uZSIsICBYWURJRFQsIDAsCi0gICAgImludGVydmFsIiwgICAgICAgICBYWURJ TlQsIDAsCi0gICAgImluIiwgICAgICAgICAgICAgICBYWURJTkksIENNX0lOVnxDTV9BQlIsCi0g ICAgImluaXQtc3RyaW5nIiwgICAgICBYWURJTkksIENNX0lOViwKLSAgICAiaW50bC1wcmVmaXgi LCAgICAgIFhZRElYUCwgMCwKLSAgICAiaW50bC1zdWZmaXgiLCAgICAgIFhZRElYUywgMCwKLSNp Zm5kZWYgTk9YRkVSCi0gICAgImtlcm1pdC1zcG9vZiIsICAgICBYWURLU1AsIENNX0lOViwKLSNl bmRpZiAvKiBOT1hGRVIgKi8KLSAgICAibGMtYXJlYS1jb2RlcyIsICAgIFhZRExMQUMsIDAsCi0g ICAgImxjLXByZWZpeCIsICAgICAgICBYWURMQ1AsIDAsCi0gICAgImxjLXN1ZmZpeCIsICAgICAg ICBYWURMQ1MsIDAsCi0gICAgImxkLXByZWZpeCIsICAgICAgICBYWURMRFAsIDAsCi0gICAgImxk LXN1ZmZpeCIsICAgICAgICBYWURMRFMsIDAsCi0gICAgImxvY2FsLWFyZWEtY29kZSIsICBYWURM QUMsIENNX0lOViwKLSAgICAibG9jYWwtcHJlZml4IiwgICAgIFhZRExDUCwgQ01fSU5WLAotICAg ICJsb2NhbC1zdWZmaXgiLCAgICAgWFlETENTLCBDTV9JTlYsCi0gICAgIm0iLCAgICAgICAgICAg ICAgICBYWURNVEgsIENNX0lOVnxDTV9BQlIsCi0jaWZuZGVmIE5PU1BMCi0gICAgIm1hY3JvIiwg ICAgICAgICAgICBYWURNQUMsIDAsICAgICAgLyogMTk1ICovCi0jZW5kaWYgLyogTk9TUEwgKi8K LSNpZmRlZiBNRE1IVVAKLSAgICAibWUiLCAgICAgICAgICAgICAgIFhZRE1USCwgQ01fSU5WfENN X0FCUiwKLSNlbmRpZiAvKiBNRE1IVVAgKi8KLSAgICAibWV0aG9kIiwgICAgICAgICAgIFhZRE1U SCwgMCwKLSAgICAibW5wLWVuYWJsZSIsICAgICAgIFhZRE1OUCwgQ01fSU5WLCAvKiBvYnNvbGV0 ZSBidXQgc3RpbGwgYWNjZXB0ZWQgKi8KLSNpZmRlZiBNRE1IVVAKLSAgICAibW9kZW0taGFuZ3Vw IiwgICAgIFhZRE1IVSwgQ01fSU5WLAotI2VuZGlmIC8qIE1ETUhVUCAqLwotICAgICJwYWNpbmci LCAgICAgICAgICAgWFlEUEFDLCAgMCwKLSAgICAicGJ4LWV4Y2hhbmdlIiwgICAgIFhZRFBYWCwg IDAsCi0gICAgInBieC1pbnNpZGUtcHJlZml4IixYWURQWEksICAwLAotICAgICJwYngtb3V0c2lk ZS1wcmVmaXgiLFhZRFBYTywgMCwKLSAgICAicHJlZml4IiwgICAgICAgICAgIFhZRE5QUiwgIDAs Ci0gICAgInB1bHNlLWNvdW50cmllcyIsICBYWURQVUNDLCAwLAotICAgICJyZXN0cmljdCIsICAg ICAgICAgWFlEUlNUUiwgMCwKLSAgICAicmV0cmllcyIsICAgICAgICAgIFhZRFJUTSwgIDAsCi0g ICAgInNvcnQiLCAgICAgICAgICAgICBYWURTUlQsICAwLAotICAgICJzcGVlZC1tYXRjaGluZyIs ICAgWFlEU1BELCAgQ01fSU5WLAotICAgICJzdHJpbmciLCAgICAgICAgICAgWFlEU1RSLCAgQ01f SU5WLAotICAgICJzdWZmaXgiLCAgICAgICAgICAgWFlEU0ZYLCAgMCwKLSAgICAidGVzdCIsICAg ICAgICAgICAgIFhZRFRFU1QsIDAsCi0gICAgInRpbWVvdXQiLCAgICAgICAgICBYWURUTU8sICAw LAotICAgICJ0Zi1hcmVhLWNvZGUiLCAgICAgWFlEVEZDLCAgQ01fSU5WLAotICAgICJ0Zi1wcmVm aXgiLCAgICAgICAgWFlEVEZQLCAgQ01fSU5WLAotICAgICJ0b2xsLWZyZWUtYXJlYS1jb2RlIixY WURURkMsMCwKLSAgICAidG9sbC1mcmVlLXByZWZpeCIsIFhZRFRGUCwgIDAsCi0gICAgInRvbmUt Y291bnRyaWVzIiwgICBYWURUT0NDLCAwCi19OwotaW50IG5kaWFsID0gKHNpemVvZihkaWFsdGFi KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNpZmRlZiBNRE1IVVAKLXN0cnVjdCBrZXl0 YWIgbWRtaGFuZ1tdID0gewotICAgICJkdHIiLCAgICAgICAgICAgMCwgMCwKLSAgICAibW9kZW0t Y29tbWFuZCIsIDEsIDAsCi0gICAgInJzMjMyLXNpZ25hbCIsICAwLCAwLAotICAgICJ2MjQtc2ln bmFsIiwgICAgMCwgQ01fSU5WCi19OwotI2VuZGlmIC8qIE1ETUhVUCAqLwotCi1zdGF0aWMgc3Ry dWN0IGtleXRhYiBtZG1jbWRbXSA9IHsKLSAgICAiYXV0b2Fuc3dlciIsICAgICAgIFhZRFNfQU4s IDAsICAgICAvKiBhdXRvYW5zd2VyICovCi0gICAgImNvbXByZXNzaW9uIiwgICAgICBYWURTX0RD LCAwLCAgICAgLyogZGF0YSBjb21wcmVzc2lvbiAqLwotICAgICJkaWFsLW1vZGUtcHJvbXB0Iiwg WFlEU19NUCwgMCwgICAgIC8qIGRpYWwgbW9kZSBwcm9tcHQgKi8KLSAgICAiZGlhbC1tb2RlLXN0 cmluZyIsIFhZRFNfTVMsIDAsICAgICAvKiBkaWFsIG1vZGUgc3RyaW5nICovCi0gICAgImVycm9y LWNvcnJlY3Rpb24iLCBYWURTX0VDLCAwLCAgICAgLyogZXJyb3IgY29ycmVjdGlvbiAqLwotICAg ICJoYW5ndXAtY29tbWFuZCIsICAgWFlEU19IVSwgMCwgICAgIC8qIGhhbmd1cCBjb21tYW5kICov Ci0gICAgImhhcmR3YXJlLWZsb3ciLCAgICBYWURTX0hXLCAwLCAgICAgLyogaHdmYyAqLwotICAg ICJpZ25vcmUtZGlhbHRvbmUiLCAgWFlEU19JRCwgMCwgICAgIC8qIGlnbm9yZSBkaWFsdG9uZSAq LwotICAgICJpbml0LXN0cmluZyIsICAgICAgWFlEU19JTiwgMCwgICAgIC8qIGluaXQgc3RyaW5n ICovCi0gICAgIm5vLWZsb3ctY29udHJvbCIsICBYWURTX05GLCAwLCAgICAgLyogbm8gZmxvdyBj b250cm9sICovCi0gICAgInByZWRpYWwtaW5pdCIsICAgICBYWURTX0kyLCAwLCAgICAgLyogbGFz dC1taW51dGUgc2V0dXAgY29tbWFuZHMgKi8KLSAgICAicHVsc2UiLCAgICAgICAgICAgIFhZRFNf RFAsIDAsICAgICAvKiBwdWxzZSAqLwotICAgICJzb2Z0d2FyZS1mbG93IiwgICAgWFlEU19TVywg MCwgICAgIC8qIHN3ZmMgKi8KLSAgICAic3BlYWtlciIsICAgICAgICAgIFhZRFNfU1AsIDAsICAg ICAvKiBTcGVha2VyICovCi0gICAgInRvbmUiLCAgICAgICAgICAgICBYWURTX0RULCAwLCAgICAg LyogdG9uZSAqLwotICAgICJ2b2x1bWUiLCAgICAgICAgICAgWFlEU19WTywgMCAgICAgIC8qIFZv bHVtZSAqLwotfTsKLXN0YXRpYyBpbnQgbm1kbWNtZCA9IChzaXplb2YobWRtY21kKSAvIHNpemVv ZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0cnVjdCBrZXl0YWIgZGlhbF9mY1tdID0gewotICAgICJh dXRvIiwgICAgIEZMT19BVVRPLCAwLAotICAgICJub25lIiwgICAgIEZMT19OT05FLCAwLAotICAg ICJydHMvY3RzIiwgIEZMT19SVFNDLCAwLAotICAgICJ4b24veG9mZiIsIEZMT19YT05YLCAwCi19 OwotCi1zdHJ1Y3Qga2V5dGFiIGRpYWxfbVtdID0geyAgICAgICAgICAgICAgLyogRElBTCBNRVRI T0QgKi8KLSAgICAiYXV0byIsICAgIFhZRE1fQSwgMCwKLSAgICAiZGVmYXVsdCIsIFhZRE1fRCwg MCwKLSAgICAicHVsc2UiLCAgIFhZRE1fUCwgMCwKLSAgICAidG9uZSIsICAgIFhZRE1fVCwgMAot fTsKLWludCBuZGlhbF9tID0gKHNpemVvZihkaWFsX20pL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSk7 Ci0jZW5kaWYgLyogTk9ESUFMICovCi0KLSNpZmRlZiBDS19UQVBJCi1zdHJ1Y3Qga2V5dGFiIHRh cGl0YWJbXSA9IHsgICAgICAgICAgICAgLyogVG9wLUxldmVsIE1pY3Jvc29mdCBUQVBJICovCi0g ICAgImNvbmZpZ3VyZS1saW5lIiwgICAgIFhZVEFQSV9DRkcsICAwLAotICAgICJkaWFsaW5nLXBy b3BlcnRpZXMiLCBYWVRBUElfRElBTCwgMAotfTsKLWludCBudGFwaXRhYiA9IChzaXplb2YodGFw aXRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiBzZXR0YXBpdGFi W10gPSB7ICAgICAgICAgIC8qIFNFVCBNaWNyb3NvZnQgVEFQSSAqLwotICAgICJpbmFjdGl2aXR5 LXRpbWVvdXQiLCBYWVRBUElfSU5BLCAgMCwKLSAgICAibGluZSIsICAgICAgICAgICAgICAgWFlU QVBJX0xJTiwgIDAsCi0gICAgImxvY2F0aW9uIiwgICAgICAgICAgIFhZVEFQSV9MT0MsICAwLAot ICAgICJtYW51YWwtZGlhbGluZyIsICAgICBYWVRBUElfTUFOLCAgMCwKLSAgICAibW9kZW0tZGlh bGluZyIsICAgICAgWFlUQVBJX1BBU1MsIDAsCi0gICAgIm1vZGVtLWxpZ2h0cyIsICAgICAgIFhZ VEFQSV9MR0hULCAwLAotICAgICJwaG9uZS1udW1iZXItY29udmVyc2lvbnMiLCAgIFhZVEFQSV9D T04sICAwLAotICAgICJwb3J0IiwgICAgICAgICAgICAgICBYWVRBUElfTElOLCAgQ01fSU5WLAot ICAgICJwb3N0LWRpYWwtdGVybWluYWwiLCBYWVRBUElfUFNULCAgMCwKLSAgICAicHJlLWRpYWwt dGVybWluYWwiLCAgWFlUQVBJX1BSRSwgIDAsCi0gICAgInVzZS13aW5kb3dzLWNvbmZpZ3VyYXRp b24iLCBYWVRBUElfVVNFLCAwLAotICAgICJ3YWl0LWZvci1jcmVkaXQtY2FyZC10b25lIiwgWFlU QVBJX0JORywgMAotfTsKLWludCBuc2V0dGFwaXRhYiA9IChzaXplb2Yoc2V0dGFwaXRhYikvc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiAqIHRhcGlsb2N0YWIgPSBOVUxM OyAgICAgIC8qIE1pY3Jvc29mdCBUQVBJIExvY2F0aW9ucyAqLwotaW50IG50YXBpbG9jID0gMDsK LWV4dGVybiBzdHJ1Y3Qga2V5dGFiICogdGFwaWxpbmV0YWI7ICAgICAvKiBNaWNyb3NvZnQgVEFQ SSBMaW5lIERldmljZXMgKi8KLWV4dGVybiBpbnQgbnRhcGlsaW5lOwotZXh0ZXJuIGludCB0dHRh cGk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRBUEkgaW4gdXNlICovCi1leHRlcm4gaW50IHRh cGlwYXNzOyAgICAgICAgICAgICAgICAgICAgLyogVEFQSSBQYXNzdGhyb3VnaCBtb2RlICovCi1l eHRlcm4gaW50IHRhcGljb252OyAgICAgICAgICAgICAgICAgICAgLyogVEFQSSBDb252ZXJzaW9u IG1vZGUgKi8KLWV4dGVybiBpbnQgdGFwaWxpZ2h0czsKLWV4dGVybiBpbnQgdGFwaXByZXRlcm07 Ci1leHRlcm4gaW50IHRhcGlwb3N0dGVybTsKLWV4dGVybiBpbnQgdGFwaW1hbnVhbDsKLWV4dGVy biBpbnQgdGFwaWluYWN0aXZpdHk7Ci1leHRlcm4gaW50IHRhcGlib25nOwotZXh0ZXJuIGludCB0 YXBpdXNlY2ZnOwotI2VuZGlmIC8qIENLX1RBUEkgKi8KLQotI2lmbmRlZiBOT1BVU0gKLWV4dGVy biBpbnQgbm9wdXNoOwotZXh0ZXJuIGludCB3aWxkZW5hOwotI2lmZGVmIFVOSVgKLXN0cnVjdCBr ZXl0YWIgd2lsZHRhYltdID0geyAgICAgICAgICAgICAvKiBTRVQgV0lMRENBUkQtRVhQQU5TSU9O ICovCi0jaWZkZWYgVU5JWAotICAgICJrZXJtaXQiLCAgV0lMRF9LRVIsIDAsCQkvKiBCeSBLZXJt aXQgKi8KLSNlbmRpZgkvKiBVTklYICovCi0gICAgIm9mZiIsICAgICBXSUxEX09GRiwgMCwJCS8q IERpc2FibGVkICovCi0gICAgIm9uIiwgICAgICBXSUxEX09OLCAgMCwJCS8qIEVuYWJsZWQgKi8K LSNpZmRlZiBVTklYCi0gICAgInNoZWxsIiwgICBXSUxEX1NIRSwgMCwJCS8qIEJ5IFNoZWxsICov Ci0jZW5kaWYJLyogVU5JWCAqLwotICAgICIiLCAwLCAwCi19OwotaW50IG53aWxkID0gKHNpemVv Zih3aWxkdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdHJ1Y3Qga2V5dGFi IHdkb3R0YWJbXSA9IHsgICAgICAgICAgICAgLyogY29udCdkICovCi0gICAgIi9tYXRjaC1kb3Qt ZmlsZXMiLCAgICAxLCAwLAotICAgICIvbm8tbWF0Y2gtZG90LWZpbGVzIiwgMCwgMAotfTsKLWV4 dGVybiBpbnQgd2lsZHhwYW5kOwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBOT1BVU0gg Ki8KLQotI2lmZGVmIE5FVENPTk4KLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIG5ldGNtZFtdLCBuZXRr ZXlbXTsKLWV4dGVybiBpbnQgbm5ldHMsIG5uZXRrZXk7Ci0jaWZkZWYgVENQU09DS0VUCi1leHRl cm4gc3RydWN0IGtleXRhYiB0Y3BvcHRbXTsKLWV4dGVybiBpbnQgbnRjcG9wdDsKLSNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KLSNpZmRlZiBOUElQRQotY2hhciBwaXBlbmFtZVtQSVBFTkFNTCsxXSA9 IHsgTlVMLCBOVUwgfTsKLSNlbmRpZiAvKiBOUElQRSAqLwotI2lmZGVmIENLX05FVEJJT1MKLWV4 dGVybiB1bnNpZ25lZCBjaGFyIE5ldEJpb3NOYW1lW107Ci0jZW5kaWYgLyogQ0tfTkVUQklPUyAq LwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmZGVmIEFOWVgyNQotc3RydWN0IGtleXRhYiB4 MjV0YWJbXSA9IHsKLSAgICAiY2FsbC11c2VyLWRhdGEiLCAgICBYWVVEQVQsIDAsCi0gICAgImNs b3NlZC11c2VyLWdyb3VwIiwgWFlDTE9TLCAwLAotICAgICJyZXZlcnNlLWNoYXJnZSIsICAgIFhZ UkVWQywgMAotfTsKLWludCBueDI1ID0gKHNpemVvZih4MjV0YWIpIC8gc2l6ZW9mKHN0cnVjdCBr ZXl0YWIpKTsKLQotI2lmbmRlZiBJQk1YMjUKLXN0cnVjdCBrZXl0YWIgcGFkeDN0YWJbXSA9IHsK LSAgICAiYnJlYWstYWN0aW9uIiwgICAgICAgICBQQURfQlJFQUtfQUNUSU9OLCAgICAgICAgICAg MCwKLSAgICAiYnJlYWstY2hhcmFjdGVyIiwgICAgICBQQURfQlJFQUtfQ0hBUkFDVEVSLCAgICAg ICAgMCwKLSAgICAiY2hhcmFjdGVyLWRlbGV0ZSIsICAgICBQQURfQ0hBUl9ERUxFVEVfQ0hBUiwg ICAgICAgMCwKLSAgICAiY3ItcGFkZGluZyIsICAgICAgICAgICBQQURfUEFERElOR19BRlRFUl9D UiwgICAgICAgMCwKLSAgICAiZGlzY2FyZC1vdXRwdXQiLCAgICAgICBQQURfU1VQUFJFU1NJT05f T0ZfREFUQSwgICAgMCwKLSAgICAiZWNobyIsICAgICAgICAgICAgICAgICBQQURfRUNITywgICAg ICAgICAgICAgICAgICAgMCwKLSAgICAiZWRpdGluZyIsICAgICAgICAgICAgICBQQURfRURJVElO RywgICAgICAgICAgICAgICAgMCwKLSAgICAiZXNjYXBlIiwgICAgICAgICAgICAgICBQQURfRVND QVBFLCAgICAgICAgICAgICAgICAgMCwKLSAgICAiZm9yd2FyZCIsICAgICAgICAgICAgICBQQURf REFUQV9GT1JXQVJEX0NIQVIsICAgICAgMCwKLSAgICAibGYtcGFkZGluZyIsICAgICAgICAgICBQ QURfUEFERElOR19BRlRFUl9MRiwgICAgICAgMCwKLSAgICAibGYtaW5zZXJ0IiwgICAgICAgICAg ICBQQURfTEZfQUZURVJfQ1IsICAgICAgICAgICAgMCwKLSAgICAibGluZS1kZWxldGUiLCAgICAg ICAgICBQQURfQlVGRkVSX0RFTEVURV9DSEFSLCAgICAgMCwKLSAgICAibGluZS1kaXNwbGF5Iiwg ICAgICAgICBQQURfQlVGRkVSX0RJU1BMQVlfQ0hBUiwgICAgMCwKLSAgICAibGluZS1mb2xkIiwg ICAgICAgICAgICBQQURfTElORV9GT0xESU5HLCAgICAgICAgICAgMCwKLSAgICAicGFkLWZsb3ct Y29udHJvbCIsICAgICBQQURfRkxPV19DT05UUk9MX0JZX1BBRCwgICAgMCwKLSAgICAic2Vydmlj ZS1zaWduYWxzIiwgICAgICBQQURfU1VQUFJFU1NJT05fT0ZfU0lHTkFMUywgMCwKLSAgICAidGlt ZW91dCIsICAgICAgICAgICAgICBQQURfREFUQV9GT1JXQVJEX1RJTUVPVVQsICAgMCwKLS8qIFNw ZWVkIGlzIHJlYWQtb25seSAqLwotICAgICJ0cmFuc21pc3Npb24tcmF0ZSIsICAgIFBBRF9MSU5F X1NQRUVELCAgICAgICAgICAgICAwLAotICAgICJ1c2VyLWZsb3ctY29udHJvbCIsICAgIFBBRF9G TE9XX0NPTlRST0xfQllfVVNFUiwgICAwCi19OwotaW50IG5wYWR4MyA9IChzaXplb2YocGFkeDN0 YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLSNlbmRpZiAvKiBJQk1YMjUgKi8KLSNlbmRp ZiAvKiBBTllYMjUgKi8KLQotI2lmZGVmIFRMT0cKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHZidGFi W10gPSB7Ci0gICAgImJyaWVmIiwgICAwLCAwLAotI2lmZGVmIE9TMk9SVU5JWAotICAgICJmdHAi LCAgICAgMiwgMCwKLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgImZ0cCIsICAgICAyLCAwLAotI2Vu ZGlmIC8qIGRlZiBWTVMgKi8KLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSAgICAidmVyYm9zZSIs IDEsIDAKLX07Ci1pbnQgbnZiID0gKHNpemVvZih2YnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRh YikpOwotI2VuZGlmIC8qIFRMT0cgKi8KLQotI2lmZGVmIENLU1lTTE9HCi1zdGF0aWMgc3RydWN0 IGtleXRhYiBzeXNsb2d0YWJbXSA9IHsKLSAgICAiYWxsIiwgICAgICAgICBTWVNMR19DWCwgMCwK LSAgICAiY29tbWFuZHMiLCAgICBTWVNMR19DTSwgMCwKLSAgICAiY29ubmVjdGlvbiIsICBTWVNM R19BQywgMCwKLSAgICAiZGVidWciLCAgICAgICBTWVNMR19EQiwgMCwKLSAgICAiZGlhbCIsICAg ICAgICBTWVNMR19ESSwgMCwKLSAgICAiZmlsZS1hY2Nlc3MiLCBTWVNMR19GQSwgMCwKLSAgICAi ZmlsZS1jcmVhdGUiLCBTWVNMR19GQywgMCwKLSAgICAibG9naW4iLCAgICAgICBTWVNMR19MSSwg MCwKLSAgICAibm9uZSIsICAgICAgICBTWVNMR19OTywgMCwKLSAgICAicHJvdG9jb2wiLCAgICBT WVNMR19QUiwgMAotfTsKLWludCBuc3lzbG9nID0gKHNpemVvZihzeXNsb2d0YWIpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCi0vKiBQYXJpdHkga2V5 d29yZCB0YWJsZSAqLwotCi1zdHJ1Y3Qga2V5dGFiIHBhcnRibFtdID0gewotICAgICJldmVuIiwg ICAgJ2UnLCAwLAotI2lmZGVmIEhXUEFSSVRZCi0gICAgImhhcmR3YXJlIiwnSCcsIDAsCi0jZW5k aWYgLyogSFdQQVJJVFkgKi8KLSAgICAibWFyayIsICAgICdtJywgMCwKLSAgICAibm9uZSIsICAg ICAwICwgMCwKLSAgICAib2RkIiwgICAgICdvJywgMCwKLSAgICAic3BhY2UiLCAgICdzJywgMAot fTsKLWludCBucGFyID0gKHNpemVvZihwYXJ0YmwpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsK LQotI2lmZGVmIEhXUEFSSVRZCi1zdHJ1Y3Qga2V5dGFiIGh3cGFydGJsW10gPSB7Ci0vKiBBZGQg bWFyayBhbmQgc3BhY2UgaWYgbmVlZGVkIGFuZCBwb3NzaWJsZSAqLwotICAgICJldmVuIiwgICAg J2UnLCAwLAotI2lmZGVmIE9TMgotICAgICJtYXJrIiwgICAgJ20nLCAwLAotI2VuZGlmIC8qIE9T MiAqLwotICAgICJvZGQiLCAgICAgJ28nLCAwLAotI2lmZGVmIE9TMgotICAgICJzcGFjZSIsICAg J3MnLCAwLAotI2VuZGlmIC8qIE9TMiAqLwotICAgICIiLCAwLCAwCi19OwotaW50IG5od3BhciA9 IChzaXplb2YoaHdwYXJ0YmwpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0jZW5kaWYg LyogSFdQQVJJVFkgKi8KLQotLyogT24vT2ZmIHRhYmxlICovCi0KLXN0cnVjdCBrZXl0YWIgb25v ZmZbXSA9IHsKLSAgICAib2ZmIiwgICAgICAgMCwgMCwKLSAgICAib24iLCAgICAgICAgMSwgMAot fTsKLQotI2RlZmluZSBYWUNEX00gICAgMAkJCS8qIENEIE1FU1NBR0UgKi8KLSNkZWZpbmUgWFlD RF9QICAgIDEJCQkvKiBDRCBQQVRIICovCi0jZGVmaW5lIFhZQ0RfSCAgICAyCQkJLyogQ0QgSE9N RSAqLwotCi1zdHJ1Y3Qga2V5dGFiIGNkdGFiW10gPSB7Ci0gICAgImhvbWUiLCAgICAgIFhZQ0Rf SCwgMCwKLSAgICAibWVzc2FnZSIsICAgWFlDRF9NLCAwLAotICAgICJwYXRoIiwgICAgICBYWUNE X1AsIDAKLX07Ci1pbnQgbmNkdGFiID0gKHNpemVvZihjZHRhYikgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIGNkbXNnW10gPSB7Ci0gICAgImZpbGUiLCAgICAgIDIs IDAsCi0gICAgIm9mZiIsICAgICAgIDAsIDAsCi0gICAgIm9uIiwgICAgICAgIDEsIDAKLX07Ci1p bnQgbmNkbXNnID0gKHNpemVvZihjZG1zZykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1z dGF0aWMKLXN0cnVjdCBrZXl0YWIgeGl0dGFiW10gPSB7ICAgICAgICAgICAgICAvKiBTRVQgRVhJ VCAqLwotICAgICJoYW5ndXAiLCAgICAgICAgMywgMCwgICAgICAgICAgICAgIC8qIC4uLkhBTkdV UCAqLwotICAgICJvbi1kaXNjb25uZWN0IiwgMiwgMCwgICAgICAgICAgICAgIC8qIC4uLk9OLURJ U0NPTk5FQ1QgKi8KLSAgICAic3RhdHVzIiwgICAgICAgIDAsIDAsICAgICAgICAgICAgICAvKiAu Li5TVEFUVVMgKi8KLSAgICAid2FybmluZyIsICAgICAgIDEsIDAgICAgICAgICAgICAgICAvKiAu Li5XQVJOSU5HICovCi19OwotaW50IG5leGl0ID0gKHNpemVvZih4aXR0YWIpIC8gc2l6ZW9mKHN0 cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiB4aXR3dGFiW10gPSB7ICAgICAgICAgICAg IC8qIFNFVCBFWElUIFdBUk5JTkcgKi8KLSAgICAiYWx3YXlzIiwgMiwgMCwgICAgICAgICAgICAg ICAgICAgICAvKiBldmVuIHdoZW4gbm90IGNvbm5lY3RlZCAqLwotICAgICJvZmYiLCAgICAwLCAw LCAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHdhcm5pbmcgICAgICovCi0gICAgIm9uIiwgICAg IDEsIDAgICAgICAgICAgICAgICAgICAgICAgLyogd2hlbiBjb25uZWN0ZWQgKi8KLX07Ci1pbnQg bmV4aXR3ID0gKHNpemVvZih4aXR3dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0 cnVjdCBrZXl0YWIgcmx0YWJbXSA9IHsKLSAgICAibG9jYWwiLCAgICAgMSwgMCwgICAgICAgICAg ICAgICAgICAvKiBFQ0hPIHZhbHVlcyAqLwotICAgICJvZmYiLCAgICAgICAwLCBDTV9JTlYsCi0g ICAgIm9uIiwgICAgICAgIDEsIENNX0lOViwKLSAgICAicmVtb3RlIiwgICAgMCwgMAotfTsKLWlu dCBucmx0ID0gKHNpemVvZihybHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0vKiBJ bmNvbXBsZXRlIEZpbGUgRGlzcG9zaXRpb24gdGFibGUgKi8KLQotc3RydWN0IGtleXRhYiBpZmR0 YWJbXSA9IHsKLSAgICAiZGlzY2FyZCIsIFNFVF9PRkYsIDAsCi0gICAgImtlZXAiLCAgICBTRVRf T04sICAwCi19OwotCi1zdHJ1Y3Qga2V5dGFiIGlmZGF0YWJbXSA9IHsKLSAgICAiYXV0byIsICAg IFNFVF9BVVRPLCAwLAotICAgICJkaXNjYXJkIiwgU0VUX09GRiwgIDAsCi0gICAgImtlZXAiLCAg ICBTRVRfT04sICAgMAotfTsKLQotY2hhciAqIGlmZG5hbVtdID0geyAiZGlzY2FyZCIsICJrZWVw IiwgImF1dG8iIH07Ci0KLS8qIFNFVCBUQUtFIHBhcmFtZXRlcnMgdGFibGUgKi8KLXN0YXRpYwot c3RydWN0IGtleXRhYiB0YWt0YWJbXSA9IHsKLSAgICAiZWNobyIsICAwLCAwLAotICAgICJlcnJv ciIsIDEsIDAsCi0gICAgIm9mZiIsICAgMiwgQ01fSU5WLCAgICAgICAgICAgICAgICAgLyogRm9y IGNvbXBhdGliaWxpdHkgKi8KLSAgICAib24iLCAgICAzLCBDTV9JTlYgICAgICAgICAgICAgICAg ICAvKiB3aXRoIE1TLURPUyBLZXJtaXQuLi4gKi8KLX07Ci0KLSNpZm5kZWYgTk9TUEwKLSNpZmRl ZiBDT01NRU5UCi0vKiBub3QgdXNlZCAqLwotc3RhdGljCi1zdHJ1Y3Qga2V5dGFiIHN1ZnRhYltd ID0geyAgICAgICAgICAgICAgLyogKHdoYXQgdG8gZG8gd2l0aCkgU1RBUlRVUC1GSUxFICovCi0g ICAgImRlbGV0ZSIsIDEsIDAsCi0gICAgImtlZXAiLCAgIDAsIDAKLX07Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0vKiBTRVQgTUFDUk8gcGFyYW1ldGVycyB0YWJsZSAqLwotc3RhdGljCi1zdHJ1 Y3Qga2V5dGFiIHNtYWN0YWJbXSA9IHsKLSAgICAiZWNobyIsICAwLCAwLAotICAgICJlcnJvciIs IDEsIDAKLX07Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1NDUklQVAotc3RhdGlj Ci1zdHJ1Y3Qga2V5dGFiIHNjcnRhYltdID0gewotICAgICJlY2hvIiwgIDAsIDAKLX07Ci0jZW5k aWYgLyogTk9TQ1JJUFQgKi8KLQotLyogU0VUIENPTU1BTkQgdGFibGUgKi8KLQotLyogU0VUIENP TU1BTkQgaXRlbXMuLi4gKi8KLQotI2RlZmluZSBTQ01EX0JTWiAwCS8qIEJZVEVTSVpFICovCi0j ZGVmaW5lIFNDTURfUkNMIDEJLyogUkVDQUxMICovCi0jZGVmaW5lIFNDTURfUlRSIDIJLyogUkVU UlkgKi8KLSNkZWZpbmUgU0NNRF9RVU8gMwkvKiBRVU9USU5HICovCi0jZGVmaW5lIFNDTURfQ09M IDQJLyogQ09MT1IgKi8KLSNkZWZpbmUgU0NNRF9ISUcgNQkvKiBIRUlHSFQgKi8KLSNkZWZpbmUg U0NNRF9XSUQgNgkvKiBXSURUSCAqLwotI2RlZmluZSBTQ01EX0NVUiA3CS8qIENVUlNPUi1QT1NJ VElPTiAqLwotI2RlZmluZSBTQ01EX1NDUiA4CS8qIFNDUk9MTEJBQ0sgKi8KLSNkZWZpbmUgU0NN RF9NT1IgOQkvKiBNT1JFLVBST01QVElORyAqLwotI2RlZmluZSBTQ01EX0lOVCAxMCAgICAgLyog SU5URVJSVVBUSU9OICovCi0jZGVmaW5lIFNDTURfQURMIDExICAgICAvKiBBVVRPRE9XTkxPQUQg Ki8KLSNkZWZpbmUgU0NNRF9TVEEgMTIgICAgIC8qIFNUQVRVU0xJTkUgKi8KLSNkZWZpbmUgU0NN RF9EQlEgMTMJLyogRE9VQkxFUVVPVElORyAqLwotI2RlZmluZSBTQ01EX0NCUiAxNAkvKiBDQlJF QUsgKi8KLSNkZWZpbmUgU0NNRF9CRkwgMTUJLyogQlVGRkVSLVNJWkUgKG5vdCB1c2VkKSAqLwot I2RlZmluZSBTQ01EX0VSUiAxNgkvKiBFUlJPUiAqLwotI2RlZmluZSBTQ01EX1ZBUiAxNwkvKiBW QVJJQUJMRS1FVkFMVUFUSU9OICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNjbWR0YWJbXSA9 IHsKLSNpZmRlZiBDS19BVVRPREwKLSAgICAiYXV0b2Rvd25sb2FkIiwgICAgICAgU0NNRF9BREws IDAsCi0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgVG8gaW1w bGVtZW50IHRoaXMgcmVxdWlyZXMgdGhhdCB3ZSBjaGFuZ2UgQ01EQkwgYW5kIEFUTUJMCi0gIGZy b20gY29tcGlsZS10aW1lIHN5bWJvbHMgdG8gcnVudGltZSB2YXJpYWJsZXMuICBOb3QgYSBiaWcg ZGVhbCwKLSAgYnV0IG5vdCB0cml2aWFsIGVpdGhlci4KLSAqLwotICAgICJidWZmZXItc2l6ZSIs ICAgICAgICBTQ01EX0JGTCwgMCwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgImJ5dGVzaXpl IiwgICAgICAgICAgIFNDTURfQlNaLCAwLAotICAgICJjYnJlYWsiLCAgICAgICAgICAgICBTQ01E X0NCUiwgQ01fSU5WLAotI2lmZGVmIE9TMgotICAgICJjb2xvciIsICAgICAgICAgICAgICBTQ01E X0NPTCwgMCwKLSAgICAiY3Vyc29yLXBvc2l0aW9uIiwgICAgU0NNRF9DVVIsIDAsCi0jZW5kaWYg LyogT1MyICovCi0jaWZkZWYgRE9VQkxFUVVPVElORwotICAgICJkb3VibGVxdW90aW5nIiwgICAg ICBTQ01EX0RCUSwgMCwKLSNlbmRpZiAvKiBET1VCTEVRVU9USU5HICovCi0gICAgImVycm9yLWRp c3BsYXkiLCAgICAgIFNDTURfRVJSLCAwLAotICAgICJoZWlnaHQiLCAgICAgICAgICAgICBTQ01E X0hJRywgMCwKLSAgICAiaW50ZXJydXB0aW9uIiwgICAgICAgU0NNRF9JTlQsIDAsCi0gICAgIm1v cmUtcHJvbXB0aW5nIiwgICAgIFNDTURfTU9SLCAwLAotICAgICJxdW90aW5nIiwgICAgICAgICAg ICBTQ01EX1FVTywgMCwKLSNpZmRlZiBDS19SRUNBTEwKLSAgICAicmVjYWxsLWJ1ZmZlci1zaXpl IiwgU0NNRF9SQ0wsIDAsCi0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0jaWZkZWYgQ0tfUkVDQUxM Ci0gICAgInJldHJ5IiwgICAgICAgICAgICAgIFNDTURfUlRSLCAwLAotI2VuZGlmIC8qIENLX1JF Q0FMTCAqLwotI2lmZGVmIE9TMgotI2lmZGVmIE9ORVRFUk1VUEQKLSAgICAic2Nyb2xsYmFjayIs ICAgICAgICAgU0NNRF9TQ1IsIDAsCi0gICAgInN0YXR1c2xpbmUiLCAgICAgICAgIFNDTURfU1RB LCAwLAotI2VuZGlmIC8qIE9ORVRFUk1VUEQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAidmFy aWFibGUtZXZhbHVhdGlvbiIsIFNDTURfVkFSLDAsCi0gICAgIndpZHRoIiwgICAgICAgICAgICAg IFNDTURfV0lELCAwCi19Owotc3RhdGljIGludCBuYnl0dCA9IChzaXplb2Yoc2NtZHRhYikgLyBz aXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0jaWZuZGVmIE5PU0VSVkVSCi0vKiBTZXJ2ZXIgcGFy YW1ldGVycyB0YWJsZSAqLwotc3RhdGljIHN0cnVjdCBrZXl0YWIgc3J2dGFiW10gPSB7Ci0gICAg ImNkLW1lc3NhZ2UiLCAgIFhZU0VSQywgMCwKLSAgICAiZGlzcGxheSIsICAgICAgWFlTRVJELCAw LAotICAgICJnZXQtcGF0aCIsICAgICBYWVNFUlAsIDAsCi0gICAgImlkbGUtdGltZW91dCIsIFhZ U0VSSSwgMCwKLSAgICAia2VlcGFsaXZlIiwgICAgWFlTRVJLLCAwLAotICAgICJsb2dpbiIsICAg ICAgICBYWVNFUkwsIDAsCi0gICAgInRpbWVvdXQiLCAgICAgIFhZU0VSVCwgMAotfTsKLXN0YXRp YyBpbnQgbnNydnQgPSAoc2l6ZW9mKHNydnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwot I2VuZGlmIC8qIE5PU0VSVkVSICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNsZWVwdGFiW10g PSB7ICAgICAvKiBTRVQgU0xFRVAgdGFibGUgKi8KLSAgICAiY2FuY2VsbGF0aW9uIiwgIDAsICAg MAotfTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgdHN0YWJbXSA9IHsgICAgICAgIC8qIFNFVCBU UkFOU0ZFUi9YRkVSIHRhYmxlICovCi0gICAgImJlbGwiLCAgICAgICAgICAgIFhZWF9CRUwsIDAs Ci0jaWZkZWYgWEZSQ0FOCi0gICAgImNhbmNlbGxhdGlvbiIsICAgIFhZWF9DQU4sIDAsCi0jZW5k aWYgLyogWEZSQ0FOICovCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICAiY2hhcmFjdGVyLXNldCIsICAg WFlYX0NTRSwgMCwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jaWZuZGVmIE5PU1BMCi0gICAgImNy Yy1jYWxjdWxhdGlvbiIsIFhZWF9DUkMsIDAsCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAiZGlz cGxheSIsICAgICAgICAgWFlYX0RJUywgMCwKLSAgICAiaW50ZXJydXB0aW9uIiwgICAgWFlYX0lO VCwgMCwKLSAgICAibG9ja2luZy1zaGlmdCIsICAgWFlYX0xTSCwgMCwKLSAgICAibWVzc2FnZSIs ICAgICAgICAgWFlYX01TRywgMCwKLSAgICAibW9kZSIsICAgICAgICAgICAgWFlYX01PRCwgMCwK LSAgICAibXNnIiwgICAgICAgICAgICAgWFlYX01TRywgQ01fSU5WLAotI2lmZGVmIFBJUEVTRU5E Ci0gICAgInBpcGVzIiwgICAgICAgICAgIFhZWF9QSVAsIDAsCi0jZW5kaWYgLyogUElQRVNFTkQg Ki8KLSNpZmRlZiBDS19YWVoKLSAgICAicHJvdG9jb2wiLCAgICAgICAgWFlYX1BSTywgMCwKLSNl bmRpZiAvKiBDS19YWVogKi8KLSAgICAicmVwb3J0IiwgICAgICAgICAgWFlYX1JQVCwgMCwKLSAg ICAic2xvdy1zdGFydCIsICAgICAgWFlYX1NMTywgMCwKLSNpZm5kZWYgTk9DU0VUUwotICAgICJ0 cmFuc2xhdGlvbiIsICAgICBYWVhfWExBLCAwLAotI2Vsc2UKLSAgICAidHJhbnNsYXRpb24iLCAg ICAgWFlYX1hMQSwgQ01fSU5WLAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICAieGxhdGlvbiIs ICAgICAgICAgWFlYX1hMQSwgQ01fSU5WLAotICAgICIiLCAwLCAwCi19Owotc3RhdGljIGludCBu dHMgPSAoc2l6ZW9mKHRzdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdGF0 aWMgc3RydWN0IGtleXRhYiBydHN0YWJbXSA9IHsgICAgICAgLyogUkVNT1RFIFNFVCBUUkFOU0ZF Ui9YRkVSIHRhYmxlICovCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICAiY2hhcmFjdGVyLXNldCIsICAg WFlYX0NTRSwgMCwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgIm1vZGUiLCAgICAgICAgICAg IFhZWF9NT0QsIDAKLX07Ci1zdGF0aWMgaW50IG5ydHMgPSAoc2l6ZW9mKHJ0c3RhYikgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIHhmcm10YWJbXSA9IHsgICAgICAg ICAgICAgLyogVFJBTlNGRVIgTU9ERSB0YWJsZSAqLwotICAgICJhdXRvbWF0aWMiLCBYTU9ERV9B LCAwLAotICAgICJtYW51YWwiLCAgICBYTU9ERV9NLCAwCi19OwotCi0jaWZkZWYgTE9DVVMKLWV4 dGVybiBpbnQgbG9jdXMsIGF1dG9sb2N1czsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgbG9jdXN0 YWJbXSA9IHsKLSNpZmRlZiBLVUkKLSAgICB7ICJhc2siLCAgICAgMywgMCB9LAkJLyogUHJlc2Vu dGx5IGltcGxlbWVudGVkIGluIEdVSSBvbmx5ICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgeyAi YXV0byIsICAgIDIsIDAgfSwKLSAgICB7ICJsb2NhbCIsICAgMSwgMCB9LAotICAgIHsgInJlbW90 ZSIsICAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5sb2N1c3RhYiA9IChzaXplb2YobG9jdXN0YWIp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotI2VuZGlmIC8qIExPQ1VTICovCi0KLSNpZm5k ZWYgTk9DU0VUUwotLyogU0VUIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgdGFibGUgKi8KLQotZXh0 ZXJuIHN0cnVjdCBrZXl0YWIgdGNzdGFiW107Ci1leHRlcm4gaW50IG50Y3M7Ci0jZW5kaWYgLyog Tk9DU0VUUyAqLwotCi0vKiBTRVQgVFJBTlNGRVIgTE9DS0lORy1TSElGVCB0YWJsZSAqLwotc3Ry dWN0IGtleXRhYiBsc3RhYltdID0gewotICAgICJmb3JjZWQiLCAyLCAgIDAsCi0gICAgIm9mZiIs ICAgIDAsICAgMCwKLSAgICAib24iLCAgICAgMSwgICAwCi19OwotaW50IG5scyA9IChzaXplb2Yo bHN0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotLyogU0VUIFRFTE5FVCB0YWJsZXMg Ki8KLSNpZmRlZiBUTkNPREUKLWV4dGVybiBpbnQgdG5fbmxtLCB0bl9iX25sbSwgdG5fYl9tZXUs IHRuX2JfdW1lLCB0bl9iX3hmZXIsIHRuX3NiX2J1ZzsKLWV4dGVybiBpbnQgdG5fbm9fZW5jcnlw dF94ZmVyLCB0bl9hdXRoX2tyYjVfZGVzX2J1ZzsKLWV4dGVybiBpbnQgdG5fd2FpdF9mbGcsIHRu X2R1cGxleCwgdG5fZGVsYXlfc2IsIHRuX3NmdTsKLWV4dGVybiBpbnQgc2xfdG5fc2F2ZWQ7Ci1l eHRlcm4gaW50IHRuX2luZmluaXRlOwotZXh0ZXJuIGludCB0bl9yZW1fZWNobzsKLWV4dGVybiBp bnQgdG5fZGViOwotZXh0ZXJuIGludCB0bl9hdXRoX2hvdzsKLWV4dGVybiBpbnQgdG5fYXV0aF9l bmM7Ci0jaWZkZWYgQ0tfRk9SV0FSRF9YCi1leHRlcm4gY2hhciAqIHRuX2Z3ZHhfeGF1dGhvcml0 eTsKLSNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgot c3RhdGljIHN0cnVjdCBrZXl0YWIgc2V0YXV0aFtdID0gewotI2lmZGVmIENLX0tFUkJFUk9TCi0g ICAgIms0IiwgICAgICAgIEFVVEhfS1JCNCwgQ01fSU5WLAotICAgICJrNSIsICAgICAgICBBVVRI X0tSQjUsIENNX0lOViwKLSAgICAia2VyYmVyb3M0IiwgQVVUSF9LUkI0LCAwLAotICAgICJrZXJi ZXJvczUiLCBBVVRIX0tSQjUsIDAsCi0gICAgImtlcmJlcm9zX2l2IixBVVRIX0tSQjQsIENNX0lO ViwKLSAgICAia2VyYmVyb3NfdiIsIEFVVEhfS1JCNSwgQ01fSU5WLAotICAgICJrcmI0IiwgICAg ICBBVVRIX0tSQjQsIENNX0lOViwKLSAgICAia3JiNSIsICAgICAgQVVUSF9LUkI1LCBDTV9JTlYs Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNpZmRlZiBDS19TUlAKLSAgICAic3JwIiwgICAg ICAgQVVUSF9TUlAsICAwLAotI2VuZGlmIC8qIENLX1NSUCAqLwotI2lmZGVmIENLX1NTTAotICAg ICJzc2wiLCAgICAgIEFVVEhfU1NMLCAgIDAsCi0gICAgInRscyIsICAgICAgQVVUSF9UTFMsICAg MCwKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAiIiwgICAgICAgICAwLCAgICAgIDAKLX07Ci1z dGF0aWMgaW50IG5zZXRhdXRoID0gc2l6ZW9mKHNldGF1dGgpL3NpemVvZihzdHJ1Y3Qga2V5dGFi KSAtIDE7Ci0jaWZkZWYgQ0tfS0VSQkVST1MKLWV4dGVybiBjaGFyICoga3JiNV9kX3ByaW5jaXBh bDsgICAgICAgICAvKiBEZWZhdWx0IHByaW5jaXBhbCAqLwotZXh0ZXJuIGNoYXIgKiBrcmI1X2Rf aW5zdGFuY2U7Ci1leHRlcm4gY2hhciAqIGtyYjVfZF9yZWFsbTsgICAgICAgICAgICAgLyogRGVm YXVsdCByZWFsbSAqLwotZXh0ZXJuIGNoYXIgKiBrcmI1X2RfY2M7ICAgICAgICAgICAgICAgIC8q IERlZmF1bHQgY3JlZGVudGlhbHMgY2FjaGUgKi8KLWV4dGVybiBjaGFyICoga3JiNV9kX3Nydjsg ICAgICAgICAgICAgICAvKiBEZWZhdWx0IHNlcnZpY2UgbmFtZSAqLwotZXh0ZXJuIGludCAgICBr cmI1X2RfbGlmZXRpbWU7ICAgICAgICAgIC8qIERlZmF1bHQgbGlmZXRpbWUgKi8KLWV4dGVybiBp bnQgICAga3JiNV9kX2ZvcndhcmRhYmxlOwotZXh0ZXJuIGludCAgICBrcmI1X2RfcHJveGlhYmxl OwotZXh0ZXJuIGludCAgICBrcmI1X2RfcmVuZXdhYmxlOwotZXh0ZXJuIGludCAgICBrcmI1X2F1 dG9nZXQ7Ci1leHRlcm4gaW50ICAgIGtyYjVfYXV0b2RlbDsKLWV4dGVybiBpbnQgICAga3JiNV9k X2dldGs0OwotZXh0ZXJuIGludCAgICBrcmI1X2NoZWNrYWRkcnM7ICAgICAgICAgIC8qIENoZWNr IFRHVCBBZGRycyAqLwotZXh0ZXJuIGludCAgICBrcmI1X2Rfbm9fYWRkcmVzc2VzOwotZXh0ZXJu IGNoYXIgKiBrcmI1X2RfYWRkcnNbXTsKLWV4dGVybiBjaGFyICogazVfa2V5dGFiOyAgICAgICAg ICAgICAgICAvKiBLZXl0YWIgZmlsZSAqLwotCi1leHRlcm4gc3RydWN0IGtyYjRfaW5pdF9kYXRh IGtyYjRfaW5pdDsKLWV4dGVybiBjaGFyICoga3JiNF9kX3ByaW5jaXBhbDsgICAgICAgICAvKiBE ZWZhdWx0IHByaW5jaXBhbCAqLwotZXh0ZXJuIGNoYXIgKiBrcmI0X2RfcmVhbG07ICAgICAgICAg ICAgIC8qIERlZmF1bHQgcmVhbG0gKi8KLWV4dGVybiBjaGFyICoga3JiNF9kX3NydjsgICAgICAg ICAgICAgICAvKiBEZWZhdWx0IHNlcnZpY2UgbmFtZSAqLwotZXh0ZXJuIGludCAgICBrcmI0X2Rf bGlmZXRpbWU7ICAgICAgICAgIC8qIERlZmF1bHQgbGlmZXRpbWUgKi8KLWV4dGVybiBpbnQgICAg a3JiNF9kX3ByZWF1dGg7Ci1leHRlcm4gY2hhciAqIGtyYjRfZF9pbnN0YW5jZTsKLWV4dGVybiBp bnQgICAga3JiNF9hdXRvZ2V0OwotZXh0ZXJuIGludCAgICBrcmI0X2F1dG9kZWw7Ci1leHRlcm4g aW50ICAgIGtyYjRfY2hlY2thZGRyczsgICAgICAgICAgLyogQ2hlY2sgVEdUIEFkZHJzICovCi1l eHRlcm4gY2hhciAqIGs0X2tleXRhYjsgICAgICAgICAgICAgICAgLyogS2V5dGFiIGZpbGUgKi8K LSNpZmRlZiBLUkI0Ci1leHRlcm4gaW50ICAgIGs0ZGVidWc7Ci0jZW5kaWYgLyogS1JCNCAqLwot c3RhdGljIHN0cnVjdCBrZXl0YWIga3JidmVyW10gPSB7Ci0gICAgIjQiLCAgICAgICAgICAgICAg ICAgNCwgMCwKLSAgICAiNSIsICAgICAgICAgICAgICAgICA1LCAwLAotICAgICJpdiIsICAgICAg ICAgICAgICAgIDQsIENNX0lOViwKLSAgICAidiIsICAgICAgICAgICAgICAgICA1LCBDTV9JTlYK LX07Ci1zdGF0aWMgaW50IG5rcmJ2ZXIgPSBzaXplb2Yoa3JidmVyKS9zaXplb2Yoc3RydWN0IGtl eXRhYik7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGtkZXN0YWJbXSA9IHsKLSAgICAibmV2ZXIi LCAgICAgICAgICAgIEtSQl9ERUxfTk8sIDAsCi0gICAgIm5vIiwgICAgICAgICAgICAgICBLUkJf REVMX05PLCBDTV9JTlYsCi0gICAgIm9uLWNsb3NlIiwgICAgICAgICBLUkJfREVMX0NMLCAwLAot ICAgICJvbi1leGl0IiwgICAgICAgICAgS1JCX0RFTF9FWCwgMAotfTsKLXN0YXRpYyBpbnQgbmtk ZXN0YWIgPSBzaXplb2Yoa2Rlc3RhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotCi1zdGF0aWMg c3RydWN0IGtleXRhYiBrNHRhYltdID0gewotICAgICJhdXRvZGVsIiwgICAgICAgICAgIFhZS1JC REVMLCBDTV9JTlYsCi0gICAgImF1dG9kZXN0cm95IiwgICAgICAgWFlLUkJERUwsIDAsCi0gICAg ImF1dG9nZXQiLCAgICAgICAgICAgWFlLUkJHRVQsIDAsCi0gICAgImNoZWNrLWFkZHJlc3MiLCAg ICAgWFlLUkJBRFIsIDAsCi0gICAgImRlYnVnIiwgICAgICAgICAgICAgWFlLUkJEQkcsIENNX0lO ViwKLSAgICAiaW5zdGFuY2UiLCAgICAgICAgICBYWUtSQklOUywgMCwKLSAgICAia2V5dGFiIiwg ICAgICAgICAgICBYWUtSQktUQiwgMCwKLSAgICAibGlmZXRpbWUiLCAgICAgICAgICBYWUtSQkxJ RiwgMCwKLSAgICAicHJlYXV0aCIsICAgICAgICAgICBYWUtSQlBSRSwgMCwKLSAgICAicHJpbmNp cGFsIiwgICAgICAgICBYWUtSQlBSLCAgMCwKLSAgICAicHJvbXB0IiwgICAgICAgICAgICBYWUtS QlBSTSwgMCwKLSAgICAicmVhbG0iLCAgICAgICAgICAgICBYWUtSQlJMLCAgMCwKLSAgICAic2Vy dmljZS1uYW1lIiwgICAgICBYWUtSQlNSViwgMAotfTsKLXN0YXRpYyBpbnQgbms0dGFiID0gc2l6 ZW9mKGs0dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFi IGs1dGFiW10gPSB7Ci0gICAgImFkZHJlc3NlcyIsICAgICAgICAgWFlLUkJBREQsIDAsCi0gICAg ImF1dG9kZWxldGUiLCAgICAgICAgWFlLUkJERUwsIENNX0lOViwKLSAgICAiYXV0b2Rlc3Ryb3ki LCAgICAgICBYWUtSQkRFTCwgMCwKLSAgICAiYXV0b2dldCIsICAgICAgICAgICBYWUtSQkdFVCwg MCwKLSAgICAiY2MiLCAgICAgICAgICAgICAgICBYWUtSQkNDLCAgQ01fSU5WLAotICAgICJjaGVj ay1hZGRyZXNzIiwgICAgIFhZS1JCQURSLCAwLAotICAgICJjcmVkZW50aWFscy1jYWNoZSIsIFhZ S1JCQ0MsICAwLAotICAgICJmb3J3YXJkYWJsZSIsICAgICAgIFhZS1JCRldELCAwLAotICAgICJn ZXQtazQtdGd0IiwgICAgICAgIFhZS1JCSzVLNCwwLAotICAgICJpbnN0YW5jZSIsICAgICAgICAg IFhZS1JCSU5TLCAwLAotICAgICJrZXl0YWIiLCAgICAgICAgICAgIFhZS1JCS1RCLCAwLAotICAg ICJsaWZldGltZSIsICAgICAgICAgIFhZS1JCTElGLCAwLAotICAgICJuby1hZGRyZXNzZXMiLCAg ICAgIFhZS1JCTkFELCAwLAotICAgICJwcmluY2lwYWwiLCAgICAgICAgIFhZS1JCUFIsICAwLAot ICAgICJwcm9tcHQiLCAgICAgICAgICAgIFhZS1JCUFJNLCAwLAotICAgICJwcm94aWFibGUiLCAg ICAgICAgIFhZS1JCUFJYLCAwLAotICAgICJyZWFsbSIsICAgICAgICAgICAgIFhZS1JCUkwsICAw LAotICAgICJyZW5ld2FibGUiLCAgICAgICAgIFhZS1JCUk5XLCAwLAotICAgICJzZXJ2aWNlLW5h bWUiLCAgICAgIFhZS1JCU1JWLCAwCi19Owotc3RhdGljIGludCBuazV0YWIgPSBzaXplb2YoazV0 YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKLQotI2RlZmluZSBLUkJfUFdfUFJNIDEKLSNkZWZp bmUgS1JCX1BSX1BSTSAyCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGtyYnBybXRhYltdID0gewot ICAgICJwYXNzd29yZCIsICBLUkJfUFdfUFJNLCAwLAotICAgICJwcmluY2lwYWwiLCBLUkJfUFJf UFJNLCAwCi19OwotCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNpZmRlZiBDS19TUlAKLXN0 YXRpYyBzdHJ1Y3Qga2V5dGFiIHNycHRhYltdID0gewotICAgICJwcm9tcHQiLCAgICAgICAgICAg IFhZU1JQUFJNLCAwCi19Owotc3RhdGljIGludCBuc3JwdGFiID0gc2l6ZW9mKHNycHRhYikvc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpOwotI2RlZmluZSBTUlBfUFdfUFJNIDEKLQotc3RhdGljIHN0cnVj dCBrZXl0YWIgc3JwcHJtdGFiW10gPSB7Ci0gICAgInBhc3N3b3JkIiwgIFNSUF9QV19QUk0sIDAK LX07Ci0jZW5kaWYgLyogQ0tfU1JQICovCi0jaWZkZWYgQ0tfU1NMCi1zdGF0aWMgc3RydWN0IGtl eXRhYiBzc2x0YWJbXSA9IHsKLSAgICAiY2VydHMtb2siLCAgICAgICAgICBYWVNTTENPSywgIENN X0lOViwKLSAgICAiY2lwaGVyLWxpc3QiLCAgICAgICBYWVNTTENMLCAgIDAsCi0gICAgImNybC1k aXIiLCAgICAgICAgICAgWFlTU0xDUkxELCAwLAotICAgICJjcmwtZmlsZSIsICAgICAgICAgIFhZ U1NMQ1JMLCAgMCwKLSAgICAiZGVidWciLCAgICAgICAgICAgICBYWVNTTERCRywgIDAsCi0gICAg ImRoLWtleS1maWxlIiwgICAgICAgWFlTU0xES0ZMLCBDTV9JTlYsCi0gICAgImRoLXBhcmFtLWZp bGUiLCAgICAgWFlTU0xEUEZMLCAwLAotICAgICJkc2EtY2VydC1jaGFpbi1maWxlIiwgWFlTU0xE Q0NGLCAwLAotICAgICJkc2EtY2VydC1maWxlIiwgICAgIFhZU1NMRENGTCwgMCwKLSAgICAiZHNh LWtleS1maWxlIiwgICAgICBYWVNTTERLRkwsIDAsCi0gICAgImR1bW15IiwgICAgICAgICAgICAg WFlTU0xEVU0sICBDTV9JTlYsCi0gICAgIm9ubHkiLCAgICAgICAgICAgICAgWFlTU0xPTiwgICBD TV9JTlYsCi0gICAgInJhbmRvbS1maWxlIiwgICAgICAgWFlTU0xSTkQsICAwLAotICAgICJyc2Et Y2VydC1jaGFpbi1maWxlIiwgWFlTU0xSQ0NGLCAwLAotICAgICJyc2EtY2VydC1maWxlIiwgICAg IFhZU1NMUkNGTCwgMCwKLSAgICAicnNhLWtleS1maWxlIiwgICAgICBYWVNTTFJLRkwsIDAsCi0g ICAgInZlcmJvc2UiLCAgICAgICAgICAgWFlTU0xWUkIsICAwLAotICAgICJ2ZXJpZnkiLCAgICAg ICAgICAgIFhZU1NMVlJGLCAgMCwKLSAgICAidmVyaWZ5LWRpciIsICAgICAgICBYWVNTTFZSRkQs IDAsCi0gICAgInZlcmlmeS1maWxlIiwgICAgICAgWFlTU0xWUkZGLCAwCi19Owotc3RhdGljIGlu dCBuc3NsdGFiID0gc2l6ZW9mKHNzbHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotc3RhdGlj IHN0cnVjdCBrZXl0YWIgc3NsdmVydGFiW10gPSB7Ci0gICAgImZhaWwtaWYtbm8tcGVlci1jZXJ0 IiwgU1NMX1ZFUklGWV9QRUVSIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfVkVS SUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJULCAwLAotICAgICJubyIsICAgICAgICAgICAgICAgU1NM X1ZFUklGWV9OT05FLCAwLAotICAgICJub25lIiwgICAgICAgICAgICAgU1NMX1ZFUklGWV9OT05F LCBDTV9JTlYsCi0gICAgIm9mZiIsICAgICAgICAgICAgICBTU0xfVkVSSUZZX05PTkUsIENNX0lO ViwKLSAgICAib24iLCAgICAgICAgICAgICAgIFNTTF9WRVJJRllfUEVFUiwgQ01fSU5WLAotICAg ICJwZWVyLWNlcnQiLCAgICAgICAgU1NMX1ZFUklGWV9QRUVSLCAwCi19Owotc3RhdGljIGludCBu c3NsdmVydGFiID0gc2l6ZW9mKHNzbHZlcnRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotI2Vu ZGlmIC8qIENLX1NTTCAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0jaWZkZWYg Q0tfRU5DUllQVElPTgotaW50IGN4X3R5cGUgPSBDWF9BVVRPOwotZXh0ZXJuIGludCBzbF9jeF90 eXBlOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLWV4dGVybiBjaGFyICp0Y3BfYWRkcmVz czsKLSNpZm5kZWYgTk9IVFRQCi1leHRlcm4gY2hhciAqIHRjcF9odHRwX3Byb3h5OwotZXh0ZXJu IGNoYXIgKiB0Y3BfaHR0cF9wcm94eV91c2VyOwotZXh0ZXJuIGNoYXIgKiB0Y3BfaHR0cF9wcm94 eV9wd2Q7Ci1leHRlcm4gY2hhciAqIHRjcF9odHRwX3Byb3h5X2FnZW50OwotI2VuZGlmIC8qIE5P SFRUUCAqLwotI2lmZGVmIE5UCi0jaWZkZWYgQ0tfU09DS1MKLWV4dGVybiBjaGFyICp0Y3Bfc29j a3Nfc3ZyOwotZXh0ZXJuIGNoYXIgKnRjcF9zb2Nrc191c2VyOwotI2lmZGVmIENLX1NPQ0tTX05T Ci1leHRlcm4gY2hhciAqdGNwX3NvY2tzX25zOwotI2VuZGlmIC8qIENLX1NPQ0tTX05TICovCi0j ZW5kaWYgLyogQ0tfU09DS1MgKi8KLSNlbmRpZiAvKiBOVCAqLwotCi0jZGVmaW5lIFVQV19VU0VS ICAxCi0jZGVmaW5lIFVQV19QQVNTICAyCi0jZGVmaW5lIFVQV19BR0VOVCAzCi0KLXN0YXRpYyBz dHJ1Y3Qga2V5dGFiIHVzZXJwYXNzW10gPSB7Ci0gICAgeyAiL2FnZW50IiwgICBVUFdfQUdFTlQs IENNX0FSRyB9LAotICAgIHsgIi9wYXNzd29yZCIsIFVQV19QQVNTLCBDTV9BUkcgfSwKLSAgICB7 ICIvdXNlciIsICAgICBVUFdfVVNFUiwgQ01fQVJHIH0sCi19Owotc3RhdGljIGludCBudXNlcnBh c3MgPSBzaXplb2YodXNlcnBhc3MpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKLQotc3RhdGljIHN0 cnVjdCBrZXl0YWIgdG5uZWd0YWJbXSA9IHsgICAgIC8qIFRFTE5FVCBORUdPVElBVElPTiB0YWJs ZSAqLwotICAgICJhY2NlcHRlZCIsICBUTl9OR19BQywgMCwKLSAgICAicmVmdXNlZCIsICAgVE5f TkdfUkYsIDAsCi0gICAgInJlcSIsICAgICAgIFROX05HX1JRLCBDTV9JTlZ8Q01fQUJSLAotICAg ICJyZXF1IiwgICAgICBUTl9OR19SUSwgQ01fSU5WfENNX0FCUiwKLSAgICAicmVxdWUiLCAgICAg VE5fTkdfUlEsIENNX0lOVnxDTV9BQlIsCi0gICAgInJlcXVlcyIsICAgIFROX05HX1JRLCBDTV9J TlZ8Q01fQUJSLAotICAgICJyZXF1ZXN0IiwgICBUTl9OR19SUSwgQ01fSU5WfENNX0FCUiwKLSAg ICAicmVxdWVzdGUiLCAgVE5fTkdfUlEsIENNX0lOVnxDTV9BQlIsCi0gICAgInJlcXVlc3RlZCIs IFROX05HX1JRLCAwLAotICAgICJyZXF1aXJlZCIsICBUTl9OR19NVSwgMAotfTsKLXN0YXRpYyBp bnQgbnRubmVndGFiID0gc2l6ZW9mKHRubmVndGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0K LSNpZmRlZiBDS19FTkNSWVBUSU9OCi1zdGF0aWMgc3RydWN0IGtleXRhYiB0eXBrd2RbXSA9IHsK LSAgICAiL3R5cGUiLCAwLCBDTV9BUkcKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRuZW5j dGFiW10gPSB7ICAgICAvKiBURUxORVQgRU5DUllQVElPTiB0YWJsZSAqLwotICAgICJhY2NlcHRl ZCIsICAgVE5fTkdfQUMsICAgIENNX0lOViwKLSAgICAicmVmdXNlZCIsICAgIFROX05HX1JGLCAg ICBDTV9JTlYsCi0gICAgInJlcSIsICAgICAgICBUTl9OR19SUSwgICAgQ01fSU5WfENNX0FCUiwK LSAgICAicmVxdSIsICAgICAgIFROX05HX1JRLCAgICBDTV9JTlZ8Q01fQUJSLAotICAgICJyZXF1 ZSIsICAgICAgVE5fTkdfUlEsICAgIENNX0lOVnxDTV9BQlIsCi0gICAgInJlcXVlcyIsICAgICBU Tl9OR19SUSwgICAgQ01fSU5WfENNX0FCUiwKLSAgICAicmVxdWVzdCIsICAgIFROX05HX1JRLCAg ICBDTV9JTlZ8Q01fQUJSLAotICAgICJyZXF1ZXN0ZSIsICAgVE5fTkdfUlEsICAgIENNX0lOVnxD TV9BQlIsCi0gICAgInJlcXVlc3RlZCIsICBUTl9OR19SUSwgICAgQ01fSU5WLAotICAgICJyZXF1 aXJlZCIsICAgVE5fTkdfTVUsICAgIENNX0lOViwKLSAgICAic3RhcnQiLCAgICAgIFROX0VOX1NU QVJULCBDTV9JTlYsCi0gICAgInN0b3AiLCAgICAgICBUTl9FTl9TVE9QLCAgQ01fSU5WLAotICAg ICJ0eXBlIiwgICAgICAgVE5fRU5fVFlQLCAgIDAKLX07Ci1zdGF0aWMgaW50IG50bmVuYyA9IHNp emVvZih0bmVuY3RhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIDsKLSNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCi0KLSNpZmRlZiBDS19GT1JXQVJEX1gKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRu ZndkeHRhYltdID0geyAgICAvKiBURUxORVQgRk9SV0FSRC1YIHRhYmxlICovCi0gICAgIm5vLWVu Y3J5cHRpb24iLCAgICAxLCAgQ01fSU5WLAotICAgICJ4YXV0aG9yaXR5LWZpbGUiLCAgMCwgIDAK LX07Ci1zdGF0aWMgaW50IG50bmZ3ZHggPSBzaXplb2YodG5md2R4dGFiKS9zaXplb2Yoc3RydWN0 IGtleXRhYikgOwotI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLwotCi1zdGF0aWMgc3RydWN0IGtl eXRhYiB0bmJ1Z3RhYltdID0geyAgICAgLyogVEVMTkVUIEJVRyB0YWJsZSAqLwotICAgICJhdXRo LWtyYjUtZGVzIiwgICAgICAgICA0LCAwLAotICAgICJiaW5hcnktbWUtbWVhbnMtdS10b28iLCAw LCAwLAotICAgICJiaW5hcnktdS1tZWFucy1tZS10b28iLCAxLCAwLAotICAgICJpbmZpbml0ZS1s b29wLWNoZWNrIiwgICAyLCAwLAotICAgICJzYi1pbXBsaWVzLXdpbGwtZG8iLCAgICAzLCAwCi19 OwotCi0jaWZkZWYgQ0tfRU5WSVJPTk1FTlQKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRuZW52dGFi W10gPSB7ICAgICAvKiBURUxORVQgRU5WSVJPTk1FTlQgdGFibGUgKi8KLSAgICAiYWNjdCIsICAg ICBUTl9FTlZfQUNDVCwgICAgMCwKLSAgICAiZGlzcGxheSIsICBUTl9FTlZfRElTUCwgICAgMCwK LSAgICAiam9iIiwgICAgICBUTl9FTlZfSk9CLCAgICAgMCwKLSAgICAibG9jYXRpb24iLCBUTl9F TlZfTE9DLCAgICAgMCwKLSAgICAib2ZmIiwgICAgICBUTl9FTlZfT0ZGLCAgICAgQ01fSU5WLAot ICAgICJvbiIsICAgICAgIFROX0VOVl9PTiwgICAgICBDTV9JTlYsCi0gICAgInByaW50ZXIiLCAg VE5fRU5WX1BSTlQsICAgIDAsCi0gICAgInN5c3RlbXR5cGUiLFROX0VOVl9TWVMsICAgIDAsCi0g ICAgInVzZXIiLCAgICAgVE5fRU5WX1VTUiwgICAgIDAsCi0gICAgInVzZXJ2YXIiLCAgVE5fRU5W X1VWQVIsICAgIDAsCi0gICAgIiIsIDAsIDAKLX07Ci1zdGF0aWMgaW50IG50bmVudiA9IHNpemVv Zih0bmVudnRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKLSNlbmRpZiAvKiBDS19FTlZJ Uk9OTUVOVCAqLwotCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLXN0YXRpYyBzdHJ1Y3Qga2V5 dGFiIHRuYXV0aHRhYltdID0geyAgICAvKiBURUxORVQgQVVUSEVOVElDQVRJT04gdGFibGUgKi8K LSAgICAiYWNjZXB0ZWQiLCAgIFROX05HX0FDLCAgQ01fSU5WLAotICAgICJlbmNyeXB0LWZsYWci LCBUTl9BVV9FTkMsIDAsCi0gICAgImZvcndhcmRpbmciLCBUTl9BVV9GV0QsICAgMCwKLSAgICAi aG93LWZsYWciLCAgIFROX0FVX0hPVywgICAwLAotICAgICJyZWZ1c2VkIiwgICAgVE5fTkdfUkYs ICBDTV9JTlYsCi0gICAgInJlcSIsICAgICAgICBUTl9OR19SUSwgIENNX0lOVnxDTV9BQlIsCi0g ICAgInJlcXUiLCAgICAgICBUTl9OR19SUSwgIENNX0lOVnxDTV9BQlIsCi0gICAgInJlcXVlIiwg ICAgICBUTl9OR19SUSwgIENNX0lOVnxDTV9BQlIsCi0gICAgInJlcXVlcyIsICAgICBUTl9OR19S USwgIENNX0lOVnxDTV9BQlIsCi0gICAgInJlcXVlc3QiLCAgICBUTl9OR19SUSwgIENNX0lOVnxD TV9BQlIsCi0gICAgInJlcXVlc3RlIiwgICBUTl9OR19SUSwgIENNX0lOVnxDTV9BQlIsCi0gICAg InJlcXVlc3RlZCIsICBUTl9OR19SUSwgIENNX0lOViwKLSAgICAicmVxdWlyZWQiLCAgIFROX05H X01VLCAgQ01fSU5WLAotICAgICJ0eXBlIiwgICAgICAgVE5fQVVfVFlQLCAwCi19Owotc3RhdGlj IGludCBudG5hdXRoID0gc2l6ZW9mKHRuYXV0aHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIDsK LQotc3RydWN0IGtleXRhYiBhdXR5cHRhYltdID0geyAgICAvKiBURUxORVQgQVVUSEVOVElDQVRJ T04gVFlQRSB0YWJsZSAqLwotICAgICJhdXRvbWF0aWMiLCAgQVVUSF9BVVRPLCAwLAotI2lmZGVm IENLX0tFUkJFUk9TCi0gICAgIms0IiwgICAgICAgICBBVVRIX0tSQjQsIENNX0lOViwKLSAgICAi azUiLCAgICAgICAgIEFVVEhfS1JCNSwgQ01fSU5WLAotICAgICJrZXJiZXJvczQiLCAgQVVUSF9L UkI0LCAwLAotICAgICJrZXJiZXJvczUiLCAgQVVUSF9LUkI1LCAwLAotICAgICJrZXJiZXJvc19p diIsQVVUSF9LUkI0LCBDTV9JTlYsCi0gICAgImtlcmJlcm9zX3YiLCBBVVRIX0tSQjUsIENNX0lO ViwKLSAgICAia3JiNCIsICAgICAgIEFVVEhfS1JCNCwgQ01fSU5WLAotICAgICJrcmI1IiwgICAg ICAgQVVUSF9LUkI1LCBDTV9JTlYsCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSAgICAibm9u ZSIsICAgICAgIEFVVEhfTk9ORSwgMCwKLSNpZmRlZiBOVAotICAgICJudGxtIiwgICAgICAgQVVU SF9OVExNLCAwLAotI2VuZGlmIC8qIE5UICovCi0jaWZkZWYgQ0tfU1JQCi0gICAgInNycCIsICAg ICAgICBBVVRIX1NSUCwgIDAsCi0jZW5kaWYgLyogQ0tfU1JQICovCi0jaWZkZWYgQ0tfU1NMCi0g ICAgInNzbCIsICAgICAgICBBVVRIX1NTTCwgIDAsCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAg IiIsIDAsIDAKLX07Ci1pbnQgbmF1dHlwID0gc2l6ZW9mKGF1dHlwdGFiKS9zaXplb2Yoc3RydWN0 IGtleXRhYikgLSAxOwotCi1zdHJ1Y3Qga2V5dGFiIGF1aG93dGFiW10gPSB7ICAgIC8qIFRFTE5F VCBBVVRIRU5USUNBVElPTiBIT1cgdGFibGUgKi8KLSAgICAiYW55IiwgICAgIFROX0FVVEhfSE9X X0FOWSwgICAgIDAsCi0gICAgIm11dHVhbCIsICBUTl9BVVRIX0hPV19NVVRVQUwsICAwLAotICAg ICJvbmUtd2F5IiwgVE5fQVVUSF9IT1dfT05FX1dBWSwgMCwKLSAgICAiIiwgMCwgMAotfTsKLWlu dCBuYXVob3cgPSBzaXplb2YoYXVob3d0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7Ci0K LXN0cnVjdCBrZXl0YWIgYXVlbmN0YWJbXSA9IHsgICAgLyogVEVMTkVUIEFVVEhFTlRJQ0FUSU9O IEVOQ1JZUFQgdGFibGUgKi8KLSAgICAiYW55IiwgICAgIFROX0FVVEhfRU5DX0FOWSwgICAgIDAs Ci0gICAgIm5vbmUiLCAgICBUTl9BVVRIX0VOQ19OT05FLCAgICAwLAotICAgICJ0ZWxvcHQiLCAg VE5fQVVUSF9FTkNfVEVMT1BULCAgMCwKLSNpZmRlZiBDS19TU0wKLSAgICAidGxzIiwgICAgIFRO X0FVVEhfRU5DX1RMUywgICAgIDAsCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgIiIsIDAsIDAK LX07Ci1pbnQgbmF1ZW5jID0gc2l6ZW9mKGF1ZW5jdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikg LSAxOwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0KLSNkZWZpbmUgVE5fTkxfQklO IDMKLSNkZWZpbmUgVE5fTkxfTlZUIDQKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRuX25sbXRhYltd ID0geyAgICAvKiBURUxORVQgTkVXTElORS1NT0RFIHRhYmxlICovCi0gICAgImJpbmFyeS1tb2Rl IiwgVE5fTkxfQklOLCAwLCAgICAgICAgLyogQmluYXJ5IG1vZGUgKi8KLSAgICAibnZ0IiwgICAg VE5fTkxfTlZULCAwLCAgICAgICAgICAgICAvKiBOVlQgbW9kZSAqLwotICAgICJvZmYiLCAgICBU TkxfQ1JOVUwsIENNX0lOViwgICAgICAgIC8qIENSLU5VTCAoVEVMTkVUIHNwZWMpICovCi0gICAg Im9uIiwgICAgIFROTF9DUkxGLCAgQ01fSU5WLCAgICAgICAgLyogQ1ItTEYgKFRFTE5FVCBzcGVj KSAqLwotICAgICJyYXciLCAgICBUTkxfQ1IsICAgIENNX0lOViAgICAgICAgIC8qIENSIG9ubHkg KG91dCBvZiBzcGVjKSAqLwotfTsKLXN0YXRpYyBpbnQgbnRuX25sbSA9IChzaXplb2YodG5fbmxt dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRu bG10YWJbXSA9IHsgICAgICAvKiBURUxORVQgTkVXTElORS1NT0RFIHRhYmxlICovCi0gICAgImNy IiwgICAgIFROTF9DUiwgICAgQ01fSU5WLCAgICAgICAgLyogQ1Igb25seSAob3V0IG9mIHNwZWMp ICovCi0gICAgImNyLWxmIiwgIFROTF9DUkxGLCAgQ01fSU5WLCAgICAgICAgLyogQ1ItTEYgKFRF TE5FVCBzcGVjKSAqLwotICAgICJjci1udWwiLCBUTkxfQ1JOVUwsIENNX0lOViwgICAgICAgIC8q IENSLU5VTCAoVEVMTkVUIHNwZWMpICovCi0gICAgImxmIiwgICAgIFROTF9MRiwgICAgQ01fSU5W LCAgICAgICAgLyogTEYgaW5zdGVhZCBvZiBDUi1MRiAqLwotICAgICJvZmYiLCAgICBUTkxfQ1JO VUwsIDAsICAgICAgICAgICAgIC8qIENSLU5VTCAoVEVMTkVUIHNwZWMpICovCi0gICAgIm9uIiwg ICAgIFROTF9DUkxGLCAgMCwgICAgICAgICAgICAgLyogQ1ItTEYgKFRFTE5FVCBzcGVjKSAqLwot ICAgICJyYXciLCAgICBUTkxfQ1IsICAgIDAgICAgICAgICAgICAgIC8qIENSIG9ubHkgKG91dCBv ZiBzcGVjKSAqLwotfTsKLXN0YXRpYyBpbnQgbnRubG0gPSAoc2l6ZW9mKHRubG10YWIpIC8gc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiB0bnRhYltdID0gewotI2lmZGVm IENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgImF1dGhlbnRpY2F0aW9uIiwgICAgICAgQ0tfVE5fQVUs ICAwLAotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0gICAgImIiLCAgICAgICAgICAg ICAgICAgICAgQ0tfVE5fQk0sICBDTV9JTlZ8Q01fQUJSLAotICAgICJiaSIsICAgICAgICAgICAg ICAgICAgIENLX1ROX0JNLCAgQ01fSU5WfENNX0FCUiwKLSAgICAiYmluIiwgICAgICAgICAgICAg ICAgICBDS19UTl9CTSwgIENNX0lOVnxDTV9BQlIsCi0gICAgImJpbmEiLCAgICAgICAgICAgICAg ICAgQ0tfVE5fQk0sICBDTV9JTlZ8Q01fQUJSLAotICAgICJiaW5hciIsICAgICAgICAgICAgICAg IENLX1ROX0JNLCAgQ01fSU5WfENNX0FCUiwKLSAgICAiYmluYXJ5IiwgICAgICAgICAgICAgICBD S19UTl9CTSwgIENNX0lOVnxDTV9BQlIsCi0gICAgImJpbmFyeS0iLCAgICAgICAgICAgICAgQ0tf VE5fQk0sICBDTV9JTlZ8Q01fQUJSLAotICAgICJiaW5hcnktbW9kZSIsICAgICAgICAgIENLX1RO X0JNLCAgQ01fSU5WLAotICAgICJiaW5hcnktdHJhbnNmZXItbW9kZSIsIENLX1ROX1hGLCAgMCwK LSAgICAiYmluYXJ5LXhmZXItbW9kZSIsICAgICBDS19UTl9YRiwgIENNX0lOViwKLSAgICAiYnVn IiwgICAgICAgICAgICAgICAgICBDS19UTl9CVUcsIDAsCi0gICAgImRlYnVnIiwgICAgICAgICAg ICAgICAgQ0tfVE5fREIsICAwLAotICAgICJkZWxheS1zYiIsICAgICAgICAgICAgIENLX1ROX0RM LCAgMCwKLSAgICAiZWNobyIsICAgICAgICAgICAgICAgICBDS19UTl9FQywgIDAsCi0jaWZkZWYg Q0tfRU5DUllQVElPTgotICAgICJlbmNyeXB0aW9uIiwgICAgICBDS19UTl9FTkMsICAwLAotI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19FTlZJUk9OTUVOVAotICAgICJlbnZp cm9ubWVudCIsICAgICBDS19UTl9FTlYsICAwLAotI2VuZGlmIC8qIENLX0VOVklST05NRU5UICov Ci0jaWZkZWYgQ0tfRk9SV0FSRF9YCi0gICAgImZvcndhcmQteCIsICAgICAgIENLX1ROX0ZYLCAg IDAsCi0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0jaWZkZWYgSUtTX09QVElPTgotICAgICJr ZXJtaXQiLCAgICAgICAgICBDS19UTl9JS1MsICBDTV9JTlYsCi0jZW5kaWYgLyogSUtTX09QVElP TiAqLwotI2lmZGVmIENLX1NORExPQwotICAgICJsb2NhdGlvbiIsICAgICAgICBDS19UTl9MT0Ms ICAwLAotI2VuZGlmIC8qIENLX1NORExPQyAqLwotI2lmZGVmIENLX05BV1MKLSAgICAibmF3cyIs ICAgICAgICAgICAgQ0tfVE5fTkFXUywgQ01fSU5WLAotI2VuZGlmIC8qIENLX05BV1MgKi8KLSAg ICAibmV3bGluZS1tb2RlIiwgICAgQ0tfVE5fTkwsICAgMCwKLSAgICAibm8tZW5jcnlwdC1kdXJp bmcteGZlciIsIENLX1ROX05FLCBDTV9JTlYsCi0gICAgInByb21wdC1mb3ItdXNlcmlkIixDS19U Tl9QVUlELDAsCi0gICAgInJlbW90ZS1lY2hvIiwgICAgIENLX1ROX1JFLCAgIDAsCi0jaWZkZWYg Q0tfU1NMCi0gICAgInN0YXJ0LXRscyIsICAgICAgIENLX1ROX1RMUywgIENNX0lOViwKLSNlbmRp ZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBOVAotICAgICJzZnUtY29tcGF0aWJpbGl0eSIsIENLX1RO X1NGVSwgMCwKLSNlbHNlCi0gICAgInNmdS1jb21wYXRpYmlsaXR5IiwgQ0tfVE5fU0ZVLCBDTV9J TlYsCi0jZW5kaWYgLyogTlQgKi8KLSAgICAidGVybWluYWwtdHlwZSIsICAgQ0tfVE5fVFQsICAg MCwKLSAgICAid2FpdC1mb3ItbmVnb3RpYXRpb25zIiwgQ0tfVE5fV0FJVCwgMCwKLSNpZmRlZiBD S19FTlZJUk9OTUVOVAotICAgICJ4ZGlzcGxheS1sb2NhdGlvbiIsQ0tfVE5fWEQsIENNX0lOViwK LSNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotICAgICIiLCAwLCAwCi19OwotaW50IG50biA9 IChzaXplb2YodG50YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0cnVjdCBr ZXl0YWIgdG5vcHR0YWJbXSA9IHsKLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgICJhdXRo ZW50aWNhdGlvbiIsICBDS19UTl9BVSwgICAwLAotI2Vsc2UKLSAgICAiYXV0aGVudGljYXRpb24i LCAgQ0tfVE5fQVUsICAgQ01fSU5WLAotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0g ICAgImJpbmFyeS1tb2RlIiwgICAgIENLX1ROX0JNLCAgIDAsCi0jaWZkZWYgVE5fQ09NUE9SVAot ICAgICJjIiwgICAgICAgICAgICAgICBDS19UTl9DUEMsICAgQ01fSU5WfENNX0FCUiwKLSAgICAi Y28iLCAgICAgICAgICAgICAgQ0tfVE5fQ1BDLCAgIENNX0lOVnxDTV9BQlIsCi0gICAgImNvbSIs ICAgICAgICAgICAgIENLX1ROX0NQQywgICBDTV9JTlZ8Q01fQUJSLAotICAgICJjb20tcG9ydC1j b250cm9sIixDS19UTl9DUEMsICAgMCwKLSAgICAiY29tcG9ydC1jb250cm9sIiwgQ0tfVE5fQ1BD LCAgIENNX0lOViwKLSNlbHNlIC8qIFROX0NPTVBPUlQgKi8KLSAgICAiY29tLXBvcnQtY29udHJv bCIsQ0tfVE5fQ1BDLCAgQ01fSU5WLAotICAgICJjb21wb3J0LWNvbnRyb2wiLCBDS19UTl9DUEMs ICAgQ01fSU5WLAotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSAgICAiZWNobyIsICAgICAgICAg ICAgQ0tfVE5fRUMsICAgMCwKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgImVuY3J5cHRpb24i LCAgICAgIENLX1ROX0VOQywgIDAsCi0jZWxzZQotICAgICJlbmNyeXB0aW9uIiwgICAgICBDS19U Tl9FTkMsICBDTV9JTlYsCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVmIENLX0ZP UldBUkRfWAotICAgICJmb3J3YXJkLXgiLCAgICAgICBDS19UTl9GWCwgICAwLAotI2Vsc2UgLyog Q0tfRk9SV0FSRF9YICovCi0gICAgImZvcndhcmQteCIsICAgICAgIENLX1ROX0ZYLCAgIENNX0lO ViwKLSNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KLSAgICAiaWJtLXNhayIsICAgICAgICAgQ0tf VE5fU0FLLCAgQ01fSU5WLAotI2lmZGVmIElLU19PUFRJT04KLSAgICAia2VybWl0IiwgICAgICAg ICAgQ0tfVE5fSUtTLCAgMCwKLSNlbHNlCi0gICAgImtlcm1pdCIsICAgICAgICAgIENLX1ROX0lL UywgIENNX0lOViwKLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0gICAgImxmbG93IiwgICAgICAg ICAgIENLX1ROX0ZMVywgIENNX0lOViwKLSAgICAibG9nb3V0IiwgICAgICAgICAgQ0tfVE5fTE9H LCAgMCwKLSNpZmRlZiBDS19OQVdTCi0gICAgIm5hd3MiLCAgICAgICAgICAgIENLX1ROX05BV1Ms IDAsCi0jZWxzZQotICAgICJuYXdzIiwgICAgICAgICAgICBDS19UTl9OQVdTLCBDTV9JTlYsCi0j ZW5kaWYgLyogQ0tfTkFXUyAqLwotI2lmZGVmIENLX0VOVklST05NRU5UCi0gICAgIm5ldy1lbnZp cm9ubWVudCIsIENLX1ROX0VOViwgIDAsCi0jZWxzZQotICAgICJuZXctZW52aXJvbm1lbnQiLCBD S19UTl9FTlYsICBDTV9JTlYsCi0jZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KLSAgICAicHJh Z21hLWhlYXJ0YmVhdCIsQ0tfVE5fUEhSLCAgQ01fSU5WLAotICAgICJwcmFnbWEtbG9nb24iLCAg ICBDS19UTl9QTEcsICBDTV9JTlYsCi0gICAgInByYWdtYS1zc3BpIiwgICAgIENLX1ROX1BTUCwg IENNX0lOViwKLSAgICAic2FrIiwgICAgICAgICAgICAgQ0tfVE5fU0FLLCAgQ01fSU5WLAotI2lm ZGVmIENLX1NORExPQwotICAgICJzZW5kLWxvY2F0aW9uIiwgICBDS19UTl9MT0MsICAwLAotI2Vs c2UKLSAgICAic2VuZC1sb2NhdGlvbiIsICAgQ0tfVE5fTE9DLCAgQ01fSU5WLAotI2VuZGlmIC8q IENLX1NORExPQyAqLwotICAgICJzZ2EiLCAgICAgICAgICAgICBDS19UTl9TR0EsIENNX0lOVnxD TV9BQlIsCi0jaWZkZWYgQ0tfU1NMCi0gICAgInN0YXJ0LXRscyIsICAgICAgIENLX1ROX1RMUywg IDAsCi0jZWxzZQotICAgICJzdGFydC10bHMiLCAgICAgICBDS19UTl9UTFMsICBDTV9JTlYsCi0j ZW5kaWYgLyogQ0tfU1NMICovCi0gICAgInN1cHByZXNzLWdvLWFoZWFkcyIsIENLX1ROX1NHQSwg MCwKLSAgICAidGVybWluYWwtdHlwZSIsICAgQ0tfVE5fVFQsICAgMCwKLSAgICAidHR5cGUiLCAg ICAgICAgICAgQ0tfVE5fVFQsICAgQ01fSU5WfENNX0FCUiwKLSNpZmRlZiBDS19FTlZJUk9OTUVO VAotICAgICJ4ZGlzcGxheS1sb2NhdGlvbiIsIENLX1ROX1hELCAwLAotI2Vsc2UKLSAgICAieGRp c3BsYXktbG9jYXRpb24iLCBDS19UTl9YRCwgQ01fSU5WLAotI2VuZGlmIC8qIENLX0VOVklST05N RU5UICovCi0gICAgIiIsIDAsIDAKLX07Ci1pbnQgbnRub3B0ID0gKHNpemVvZih0bm9wdHRhYikg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotc3RydWN0IGtleXRhYiB0bm9wdHN3W10g PSB7Ci0gICAgIi9jbGllbnQiLCAgQ0tfVE5fQ0xJRU5ULCAgIDAsCi0gICAgIi9zZXJ2ZXIiLCAg Q0tfVE5fU0VSVkVSLCAgIDAKLX07Ci1pbnQgbnRub3B0c3cgPSAoc2l6ZW9mKHRub3B0c3cpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotc3RydWN0IGtl eXRhYiBmdHJ0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIEZlYXR1cmUgdGFibGUgKi8KLSNpZm5k ZWYgTk9DU0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwID0gd2UgaGF2ZSBpdCwgMSA9 IHdlIGRvbid0ICovCi0iY2hhcmFjdGVyLXNldHMiLCAgICAgICAwLCAwLAotI2Vsc2UKLSJjaGFy YWN0ZXItc2V0cyIsICAgICAgIDEsIDAsCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotI2lmbmRlZiBO T0NZUklMCi0iY3lyaWxsaWMiLCAgICAgICAgICAgICAwLCAwLAotI2Vsc2UKLSJjeXJpbGxpYyIs ICAgICAgICAgICAgIDEsIDAsCi0jZW5kaWYgLyogTk9DWVJJTCAqLwotCi0jaWZuZGVmIE5PTE9H RElBTAotImN4LWxvZyIsICAgICAgICAgICAgICAgMCwgMCwKLSNlbHNlCi0iY3gtbG9nIiwgICAg ICAgICAgICAgICAxLCAwLAotI2VuZGlmIC8qIE5PTE9HRElBTCAqLwotCi0jaWZuZGVmIE5PREVC VUcKLSJkZWJ1ZyIsICAgICAgICAgICAgICAgIDAsIDAsCi0jZWxzZQotImRlYnVnIiwgICAgICAg ICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBOT0RFQlVHICovCi0KLSNpZm5kZWYgTk9ESUFMCi0i ZGlhbCIsICAgICAgICAgICAgICAgICAwLCAwLAotI2Vsc2UKLSJkaWFsIiwgICAgICAgICAgICAg ICAgIDEsIDAsCi0jZW5kaWYgLyogTk9ESUFMICovCi0KLSNpZmRlZiBEWU5BTUlDCi0iZHluYW1p Yy1tZW1vcnkiLCAgICAgICAwLCAwLAotI2Vsc2UKLSJkeW5hbWljLW1lbW9yeSIsICAgICAgIDEs IDAsCi0jZW5kaWYgLyogRFlOQU1JQyAqLwotCi0jaWZuZGVmIE5PWEZFUgotImZpbGUtdHJhbnNm ZXIiLCAgICAgICAgMCwgMCwKLSNlbHNlCi0iZmlsZS10cmFuc2ZlciIsICAgICAgICAxLCAwLAot I2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgWFhGV0QKLSJmb3J3YXJkIiwgICAgICAgICAg ICAgIDAsIDAsCi0jZWxzZQotImZvcndhcmQiLCAgICAgICAgICAgICAgMSwgMCwKLSNlbmRpZiAv KiBYWEZXRCAqLwotCi0jaWZkZWYgTkVXRlRQCi0iZnRwIiwgICAgICAgICAgICAgICAgICAwLCAw LAotI2Vsc2UKLSJmdHAiLCAgICAgICAgICAgICAgICAgIDEsIDAsCi0jZW5kaWYgLyogTkVXRlRQ ICovCi0KLSNpZmRlZiBDS19DVVJTRVMKLSJmdWxsc2NyZWVuLWRpc3BsYXkiLCAgIDAsIDAsCi0j ZWxzZQotImZ1bGxzY3JlZW4tZGlzcGxheSIsICAgMSwgMCwKLSNlbmRpZiAvKiBDS19DVVJTRVMg Ki8KLSNpZmRlZiBHUkVFSwotImdyZWVrIiwgICAgICAgICAgICAgICAgMCwgMCwKLSNlbHNlCi0i Z3JlZWsiLCAgICAgICAgICAgICAgICAxLCAwLAotI2VuZGlmIC8qIEdSRUVLICovCi0jaWZkZWYg SEVCUkVXCi0iaGVicmV3IiwgICAgICAgICAgICAgICAwLCAwLAotI2Vsc2UKLSJoZWJyZXciLCAg ICAgICAgICAgICAgIDEsIDAsCi0jZW5kaWYgLyogSEVCUkVXICovCi0jaWZuZGVmIE5PSEVMUAot ImhlbHAiLCAgICAgICAgICAgICAgICAgMCwgMCwKLSNlbHNlCi0iaGVscCIsICAgICAgICAgICAg ICAgICAxLCAwLAotI2VuZGlmIC8qIE5PSEVMUCAqLwotCi0jaWZuZGVmIE5PSUtTRAotImlrc2Qi LCAgICAgICAgICAgICAgICAgMCwgMCwKLSNlbHNlCi0iaWtzZCIsICAgICAgICAgICAgICAgICAx LCAwLAotI2VuZGlmIC8qIE5PSUtTRCAqLwotCi0jaWZuZGVmIE5PU1BMCi0iaWYtY29tbWFuZCIs ICAgICAgICAgICAwLCAwLAotI2Vsc2UKLSJpZi1jb21tYW5kIiwgICAgICAgICAgIDEsIDAsCi0j ZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9KQwotI2lmZGVmIFVOSVgKLSJqb2ItY29udHJv bCIsICAgICAgICAgIDAsIDAsCi0jZWxzZQotImpvYi1jb250cm9sIiwgICAgICAgICAgMSwgMCwK LSNlbmRpZiAvKiBVTklYICovCi0jZWxzZQotImpvYi1jb250cm9sIiwgICAgICAgICAgMSwgMCwK LSNlbmRpZiAvKiBOT0pDICovCi0jaWZkZWYgS0FOSkkKLSJrYW5qaSIsICAgICAgICAgICAgICAg IDAsIDAsCi0jZWxzZQotImthbmppIiwgICAgICAgICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBL QU5KSSAqLwotCi0jaWZuZGVmIE5PWEZFUgotImtlcm1pdCIsICAgICAgICAgICAgICAgMCwgMCwK LSNlbHNlCi0ia2VybWl0IiwgICAgICAgICAgICAgICAxLCAwLAotI2VuZGlmIC8qIE5PWEZFUiAq LwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSJrZXJiZXJvcyIsICAgICAgICAgICAgIDAsIDAsCi0j ZWxzZQotImtlcmJlcm9zIiwgICAgICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBDS19LRVJCRVJP UyAqLwotCi0jaWZuZGVmIE5PQ1NFVFMKLSJsYXRpbjEiLCAgICAgICAgICAgICAgIDAsIDAsCi0j ZWxzZQotImxhdGluMSIsICAgICAgICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBOT0NTRVRTICov Ci0jaWZkZWYgTEFUSU4yCi0ibGF0aW4yIiwgICAgICAgICAgICAgICAwLCAwLAotI2Vsc2UKLSJs YXRpbjIiLCAgICAgICAgICAgICAgIDEsIDAsCi0jZW5kaWYgLyogTEFUSU4yICovCi0KLSNpZmRl ZiBDS0xFQVJOCi0ibGVhcm5lZC1zY3JpcHRzIiwgICAgICAgMCwgMCwKLSNlbHNlCi0ibGVhcm5l ZC1zY3JpcHRzIiwgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBDS0xFQVJOICovCi0KLSNpZm5kZWYg Tk9MT0NBTAotIm1ha2luZy1jb25uZWN0aW9ucyIsICAgMCwgMCwKLSNlbHNlCi0ibWFraW5nLWNv bm5lY3Rpb25zIiwgICAxLCAwLAotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIE5FVENP Tk4KLSJuZXR3b3JrIiwgICAgICAgICAgICAgIDAsIDAsCi0jZWxzZQotIm5ldHdvcmsiLCAgICAg ICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNpZmRlZiBOVAotI2lmZGVm IENLX0FVVEhFTlRJQ0FUSU9OCi0ibnRsbSIsICAgICAgICAgICAgICAgICAxLCAwLAotI2Vsc2Ug LyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSJudGxtIiwgICAgICAgICAgICAgICAgIDAsIDAsCi0j ZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNlbHNlIC8qIE5UICovCi0ibnRsbSIsICAg ICAgICAgICAgICAgICAwLCAwLAotI2VuZGlmIC8qIE5UICovCi0KLSNpZmRlZiBQSVBFU0VORAot InBpcGVzIiwgICAgICAgICAgICAgICAgMCwgMCwKLSNlbHNlCi0jaWZkZWYgTkVUQ01ECi0icGlw ZXMiLCAgICAgICAgICAgICAgICAwLCAwLAotI2VuZGlmIC8qIE5FVENNRCAqLwotI2VuZGlmIC8q IFBJUEVTRU5EICovCi0jaWZuZGVmIFBJUEVTRU5ECi0jaWZuZGVmIE5FVENNRAotInBpcGVzIiwg ICAgICAgICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotI2VuZGlmIC8qIE5F VENNRCAqLwotCi0jaWZkZWYgTkVUUFRZCi0icHR5IiwgICAgICAgICAgICAgICAgICAwLCAwLAot I2Vsc2UKLSJwdHkiLCAgICAgICAgICAgICAgICAgIDEsIDAsCi0jZW5kaWYgLyogTkVUUFRZICov Ci0KLSNpZm5kZWYgTk9QVVNICi0icHVzaCIsICAgICAgICAgICAgICAgICAwLCAwLAotI2Vsc2UK LSJwdXNoIiwgICAgICAgICAgICAgICAgIDEsIDAsCi0jZW5kaWYgLyogUFVTSCAqLwotCi0jaWZk ZWYgQ0tfUkVESVIKLSJyZWRpcmVjdCIsICAgICAgICAgICAgIDAsIDAsCi0jZWxzZQotInJlZGly ZWN0IiwgICAgICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBDS19SRURJUiAqLwotCi0jaWZkZWYg Q0tfUlRTQ1RTCi0icnRzL2N0cyIsICAgICAgICAgICAgICAwLCAwLAotI2Vsc2UKLSJydHMvY3Rz IiwgICAgICAgICAgICAgIDEsIDAsCi0jZW5kaWYgLyogUlRTL0NUUyAqLwotCi0jaWZuZGVmIE5P U0NSSVBUCi0ic2NyaXB0LWNvbW1hbmQiLCAgICAgICAwLCAwLAotI2Vsc2UKLSJzY3JpcHQtY29t bWFuZCIsICAgICAgIDEsIDAsCi0jZW5kaWYgLyogTk9TQ1JJUFQgKi8KLSNpZm5kZWYgTk9TRVJW RVIKLSJzZXJ2ZXItbW9kZSIsICAgICAgICAgIDAsIDAsCi0jZWxzZQotInNlcnZlci1tb2RlIiwg ICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0jaWZuZGVmIE5PU0VYUAot InNleHByZXNzaW9uIiwgICAgICAgICAgMCwgMCwKLSNlbHNlCi0ic2V4cHJlc3Npb24iLCAgICAg ICAgICAxLCAwLAotI2VuZGlmIC8qIE5PU0VYUCAqLwotCi0jaWZkZWYgU0ZUUF9CVUlMVElOCi0i c2Z0cCIsICAgICAgICAgICAgICAgICAxLCAwLAotI2Vsc2UKLSJzZnRwIiwgICAgICAgICAgICAg ICAgIDAsIDAsCi0jZW5kaWYgLyogU0ZUUF9CVUlMVElOICovCi0KLSNpZm5kZWYgTk9TSE9XCi0i c2hvdy1jb21tYW5kIiwgICAgICAgICAwLCAwLAotI2Vsc2UKLSJzaG93LWNvbW1hbmQiLCAgICAg ICAgIDEsIDAsCi0jZW5kaWYgLyogTk9TSE9XICovCi0KLSNpZmRlZiBDS19TUlAKLSJzcnAiLCAg ICAgICAgICAgICAgICAgIDAsIDAsCi0jZWxzZQotInNycCIsICAgICAgICAgICAgICAgICAgMSwg MCwKLSNlbmRpZiAvKiBDS19TUlAgKi8KLQotI2lmZGVmIFNTSEJVSUxUSU4KLSJzc2giLCAgICAg ICAgICAgICAgICAgIDAsIDAsCi0jZWxzZSAvKiBTU0hCVUlMVElOICovCi0ic3NoIiwgICAgICAg ICAgICAgICAgICAxLCAwLAotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLQotI2lmZGVmIENLX1NT TAotInNzbC90bHMiLCAgICAgICAgICAgICAgMCwgMCwKLSNlbHNlCi0ic3NsL3RscyIsICAgICAg ICAgICAgICAxLCAwLAotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0jaWZuZGVmIE5PWE1JVAotInRy YW5zbWl0IiwgICAgICAgICAgICAgMCwgMCwKLSNlbHNlCi0idHJhbnNtaXQiLCAgICAgICAgICAg ICAxLCAwLAotI2VuZGlmIC8qIE5PWE1JVCAqLwotCi0jaWZkZWYgVU5JQ09ERQotInVuaWNvZGUi LCAgICAgICAgICAgICAgMCwgMCwKLSNlbHNlCi0idW5pY29kZSIsICAgICAgICAgICAgICAxLCAw LAotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotI2lmZGVmIENLX1hZWgotInh5em1vZGVtIiwgICAg ICAgICAgICAgMCwgMCwKLSNlbHNlCi0ieHl6bW9kZW0iLCAgICAgICAgICAgICAxLCAwLAotI2Vu ZGlmIC8qIENLX1hZWiAqLwotCi0iIiwgMCwgMAotfTsKLWludCBuZnRyID0gKHNpemVvZihmdHJ0 YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0cnVjdCBrZXl0YWIgZGVzdHRh YltdID0geyAgICAgICAgICAgICAvKiBTRVQgREVTVElOQVRJT04gKi8KLSNpZmRlZiBDQUxJQlJB VEUKLSAgICAiY2FsaWJyYXRlIiwgREVTVF9OLCBDTV9JTlYsCi0jZW5kaWYgLyogQ0FMSUJSQVRF ICovCi0gICAgImRpc2siLCAgICBERVNUX0QsIDAsCi0jaWZkZWYgQ0FMSUJSQVRFCi0gICAgIm5v d2hlcmUiLCBERVNUX04sIDAsCi0jZW5kaWYgLyogQ0FMSUJSQVRFICovCi0gICAgInByaW50ZXIi LCBERVNUX1AsIDAsCi0gICAgInNjcmVlbiIsICBERVNUX1MsIDAKLX07Ci1pbnQgbmRlc3RzID0g IChzaXplb2YoZGVzdHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0jaWZuZGVmIE5P U1BMICAgICAgICAgICAvKiBVc2VkIG9ubHkgd2l0aCBzY3JpcHQgcHJvZ3JhbW1pbmcgaXRlbXMu Li4gKi8KLQotI2lmbmRlZiBOT1NFUlZFUiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMg aXMganVzdCB0byBhdm9pZCBzb21lICovCi0jZGVmaW5lIENLX1BBUlNESVIgICAgICAgICAgICAg ICAgICAgICAgLyogInN0YXRlbWVudCBub3QgcmVhY2hlZCIgKi8KLSNlbHNlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBjb21wbGFpbnRzLi4uICovCi0jaWZuZGVmIE5PRElB TAotI2RlZmluZSBDS19QQVJTRElSCi0jZW5kaWYgLyogTk9ESUFMICovCi0jZW5kaWYgLyogTk9T RVJWRVIgKi8KLQotLyoKLSAgY3ggPT0gMCBtZWFucyBkaWFsIGRpcmVjdG9yeQotICBjeCA9PSAx IG1lYW5zIG5ldHdvcmsgZGlyZWN0b3J5Ci0gIGN4ID09IDIgbWVhbnMgYSBkaXJlY3RvcnkgcGF0 aCBsaXN0Ci0qLwotc3RhdGljIGludAotcGFyc2RpcihjeCkgaW50IGN4OyB7Ci0gICAgaW50IGks IHgsIHksIGRkOyAgICAgICAgICAgICAgICAgICAgLyogV29ya2VycyAqLwotICAgIGludCBueGRp cjsKLSAgICBjaGFyICpzOwotICAgIGNoYXIgKiogeGRpcjsKLSAgICBjaGFyICpwcFtNQVhHRVRQ QVRIXTsgICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgbmFtZSBwb2ludGVycyAqLwotI2lmZGVm IFpGTlFGUAotICAgIHN0cnVjdCB6Zm5mcCAqIGZucDsKLSNpZmRlZiBPUzIKLSAgICBjaGFyICog ZW52OwotICAgIGNoYXIgZGlycGF0aFs0MDk2XTsKLSNlbHNlIC8qIE9TMiAqLwotICAgIGNoYXIg ZGlycGF0aFsxMDI0XTsgICAgICAgICAgICAgICAgIC8qIEZvciBmdWxseSBxdWFsaWZpZWQgZmls ZW5hbWVzICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogWkZOUUZQICovCi0KLSAgICBp bnQgbWF4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXhpbXVtIG51bWJlciBvZiB0 aGluZ3MgdG8gcGFyc2UgKi8KLSAgICBjaGFyIGM7Ci0KLSNpZm5kZWYgTk9ESUFMCi0gICAgaWYg KGN4ID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgLyogRGlhbGluZyAqLwotICAgICAgICBu eGRpciA9IG5kaWFsZGlyOwotICAgICAgICB4ZGlyID0gZGlhbGRpcjsKLSAgICAgICAgbWF4ID0g TUFYRERJUjsKLSAgICB9IGVsc2UKLSNpZmRlZiBORVRDT05OCi0gICAgaWYgKGN4ID09IDEpIHsg ICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayAqLwotICAgICAgICBueGRpciA9IG5uZXRk aXI7Ci0gICAgICAgIHhkaXIgPSBuZXRkaXI7Ci0gICAgICAgIG1heCA9IE1BWERESVI7Ci0gICAg fSBlbHNlCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2VuZGlmIC8qIE5PRElBTCAqLwotI2lmbmRl ZiBOT1NFUlZFUgotICAgIGlmIChjeCA9PSAyKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIEdF VCBwYXRoICovCi0gICAgICAgIG54ZGlyID0gbmdldHBhdGg7Ci0gICAgICAgIHhkaXIgPSBnZXRw YXRoOwotICAgICAgICBtYXggPSBNQVhHRVRQQVRIOwotICAgIH0gZWxzZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENhbGxlZCB3aXRoIGludmFsaWQgZnVuY3Rpb24gY29kZSAqLwot I2VuZGlmIC8qIE5PU0VSVkVSICovCi0gICAgICByZXR1cm4oLTIpOwotCi0gICAgZm9yIChpID0g MDsgaSA8IE1BWEdFVFBBVEg7IGkrKykgICAgLyogSW5pdCB0aGVzZS4gKi8KLSAgICAgIHBwW2ld ID0gTlVMTDsKLQotI2lmZGVmIENLX1BBUlNESVIKLSAgICBkZCA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgbmFtZSBjb3VudGVyICovCi0gICAgd2hpbGUgKDEp IHsKLSAgICAgICAgaWYgKGN4ICE9IDIpIHsgICAgICAgICAgICAgICAgICAvKiBEaWFsaW5nIG9y IE5ldHdvcmsgRGlyZWN0b3J5ICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICBpbnQgbGVuOwot ICAgICAgICAgICAgY2hhciAqIGFwcGRhdGEwID0gTlVMTCwgKiBhcHBkYXRhMSA9IE5VTEw7Ci0j aWZkZWYgTlQKLSAgICAgICAgICAgIGVudiA9IGdldGVudigiSzk1UEhPTkVTIik7Ci0gICAgICAg ICAgICBtYWtlc3RyKCZhcHBkYXRhMCwoY2hhciAqKUdldEFwcERhdGEoMCkpOwotICAgICAgICAg ICAgbWFrZXN0cigmYXBwZGF0YTEsKGNoYXIgKilHZXRBcHBEYXRhKDEpKTsKLSNlbHNlIC8qIE5U ICovCi0gICAgICAgICAgICBlbnYgPSBnZXRlbnYoIksyUEhPTkVTIik7Ci0jZW5kaWYgLyogTlQg Ki8KLSAgICAgICAgICAgIGlmICghZW52KQotICAgICAgICAgICAgICBlbnYgPSBnZXRlbnYoIks5 NVBIT05FUyIpOwotICAgICAgICAgICAgaWYgKCFlbnYpCi0gICAgICAgICAgICAgIGVudiA9ICIi OwotCi0gICAgICAgICAgICBkaXJwYXRoWzBdID0gJ1wwJzsKLSAgICAgICAgICAgIGxlbiA9IHN0 cmxlbihlbnYpICsgMipzdHJsZW4oc3RhcnR1cGRpcikgKyAyKnN0cmxlbihpbmlkaXIpCi0gICAg ICAgICAgICAgICAgKyAoYXBwZGF0YTA/MipzdHJsZW4oYXBwZGF0YTApOjApIAotICAgICAgICAg ICAgICAgICsgKGFwcGRhdGExPzIqc3RybGVuKGFwcGRhdGExKTowKQotICAgICAgICAgICAgICAg ICsgMipzdHJsZW4oemhvbWUoKSkgKyAyKnN0cmxlbihleGVkaXIpICsgOCpzdHJsZW4oIlBIT05F Uy8iKQotICAgICAgICAgICAgICAgICsgMTI7Ci0gICAgICAgICAgICBpZiAobGVuIDwgNDA5Nikg ICAgICAgICAgICAgLyogU0FGRSAqLwotICAgICAgICAgICAgICBzcHJpbnRmKGRpcnBhdGgsCi0g ICAgICAgICAgICAgICAgICAgICIlcyVzJXM7JXMlczslcyVzJXMlcyVzJXMlcyVzJXM7JXMlczsl czslcyVzIiwKLSAgICAgICAgICAgICAgICAgICAgLyogU2VtaWNvbG9uLXNlcGFyYXRlZCBwYXRo IGxpc3QgKi8KLSAgICAgICAgICAgICAgICAgICAgZW52LAotICAgICAgICAgICAgICAgICAgICAo ZW52WzBdICYmIGVudltzdHJsZW4oZW52KS0xXSA9PSAnOycpID8gIiIgOiAiOyIsCi0gICAgICAg ICAgICAgICAgICAgIHN0YXJ0dXBkaXIsCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBkaXIs ICJQSE9ORVMvIiwKLSAgICAgICAgICAgICAgICAgICAgYXBwZGF0YTEgPyBhcHBkYXRhMSA6ICIi LCAKLSAgICAgICAgICAgICAgICAgICAgYXBwZGF0YTEgPyAiS2VybWl0IDk1OyIgOiAiIiwKLSAg ICAgICAgICAgICAgICAgICAgYXBwZGF0YTEgPyBhcHBkYXRhMSA6ICIiLCAKLSAgICAgICAgICAg ICAgICAgICAgYXBwZGF0YTEgPyAiS2VybWl0IDk1L1BIT05FUy87IiA6ICIiLAotICAgICAgICAg ICAgICAgICAgICBhcHBkYXRhMCA/IGFwcGRhdGEwIDogIiIsIAotICAgICAgICAgICAgICAgICAg ICBhcHBkYXRhMCA/ICJLZXJtaXQgOTU7IiA6ICIiLAotICAgICAgICAgICAgICAgICAgICBhcHBk YXRhMCA/IGFwcGRhdGEwIDogIiIsIAotICAgICAgICAgICAgICAgICAgICBhcHBkYXRhMCA/ICJL ZXJtaXQgOTUvUEhPTkVTLzsiIDogIiIsCi0gICAgICAgICAgICAgICAgICAgIGluaWRpciwKLSAg ICAgICAgICAgICAgICAgICAgaW5pZGlyLCAiUEhPTkVTLyIsCi0gICAgICAgICAgICAgICAgICAg IHpob21lKCksCi0gICAgICAgICAgICAgICAgICAgIHpob21lKCksICJQSE9ORVMvIiwKLSAgICAg ICAgICAgICAgICAgICAgZXhlZGlyLAotICAgICAgICAgICAgICAgICAgICBleGVkaXIsICJQSE9O RVMvIgotICAgICAgICAgICAgICAgICAgICApOwotI2lmZGVmIE5UCi0gICAgICAgICAgICBtYWtl c3RyKCZhcHBkYXRhMCxOVUxMKTsKLSAgICAgICAgICAgIG1ha2VzdHIoJmFwcGRhdGExLE5VTEwp OwotI2VuZGlmIC8qIE5UICovCi0jZWxzZQotI2lmZGVmIFVOSVgKLSAgICAgICAgICAgIHkgPSAx MDI0OwotICAgICAgICAgICAgcyA9IGRpcnBhdGg7Ci0gICAgICAgICAgICB6enN0cmluZygiXFx2 KGhvbWUpIiwmcywmeSk7Ci0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAg ICAgICAgICAgeSA9IGNtaWZpcCgKLSAgICAgICAgICAgICAgICAgICJOYW1lcyBvZiBvbmUgb3Ig bW9yZSBkaXJlY3RvcnkgZmlsZXMsIHNlcGFyYXRlZCBieSBzcGFjZXMiLAotICAgICAgICAgICAg ICAgICAgICAgICAiIiwmcywmeCwwLAotI2lmZGVmIE9TMk9SVU5JWAotICAgICAgICAgICAgICAg ICAgICAgICBkaXJwYXRoLAotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSNl bmRpZiAvKiBPUzJPUlVOSVggKi8KLSAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKLSAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBMaXN0IG9mIGRpcmVjdG9yeSBuYW1lcyAqLwotICAgICAgICAgICAgeCA9IDA7 Ci0gICAgICAgICAgICB5ID0gY21kaXIoIkRpcmVjdG9yeSBuYW1lIiwiIiwmcyx4eHN0cmluZyk7 Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoeSA9PSAt MykgeyAgICAgICAgICAgICAgLyogRU9MIG9yIHVzZXIgdHlwZWQgPENSPiAqLwotICAgICAgICAg ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAg IGZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgeyAvKiBDbGVhciB0aGVzZSAqLwotICAgICAgICAg ICAgICAgICAgICBpZiAoaSA8IG54ZGlyICYmIHhkaXJbaV0pIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGZyZWUoeGRpcltpXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgICAgeGRpcltpXSA9IChpIDwgZGQpID8gcHBbaV0gOiBOVUxMOwotICAgICAgICAgICAg ICAgIH0KLSNpZm5kZWYgTk9ESUFMCi0gICAgICAgICAgICAgICAgaWYgKGN4ID09IDApCi0gICAg ICAgICAgICAgICAgICBuZGlhbGRpciA9IGRkOwotI2lmZGVmIE5FVENPTk4KLSAgICAgICAgICAg ICAgICBpZiAoY3ggPT0gMSkKLSAgICAgICAgICAgICAgICAgIG5uZXRkaXIgPSBkZDsKLSNlbmRp ZiAvKiBORVRDT05OICovCi0jZW5kaWYgLyogTk9ESUFMICovCi0jaWZuZGVmIE5PU0VSVkVSCi0g ICAgICAgICAgICAgICAgaWYgKGN4ID09IDIpCi0gICAgICAgICAgICAgICAgICBuZ2V0cGF0aCA9 IGRkOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKLQotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIFBh cnNlIGVycm9yICovCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRkOyBpKyspIHsg IC8qIEZyZWUgdGVtcCBzdG9yYWdlICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChwcFtpXSkg ZnJlZShwcFtpXSk7IC8qIGJ1dCBkb24ndCBjaGFuZ2UgKi8KLSAgICAgICAgICAgICAgICAgICAg cHBbaV0gPSBOVUxMOyAgICAgICAgICAgLyogYW55dGhpbmcgZWxzZSAqLwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKHgpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3Qg YWxsb3dlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0jaWZkZWYg Q0tfVE1QRElSCi0gICAgICAgIGlmIChjeCA9PSAyICYmICFpc2RpcihzKSkgewotICAgICAgICAg ICAgcHJpbnRmKCI/Tm90IGEgZGlyZWN0b3J5IC0gJXNcbiIsIHMpOwotICAgICAgICAgICAgcmV0 dXJuKC05KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLX1RNUERJUiAqLwotCi0jaWZkZWYgWkZO UUZQCi0gICAgICAgIGlmIChjeCA8IDIpIHsKLSAgICAgICAgICAgIGlmICghaXNhYnNvbHV0ZShz KSkgeyAgICAgICAvKiBJZiBub3QgcmVsYXRpdmUgZ2V0IGZ1bGwgcGF0aCAqLwotICAgICAgICAg ICAgICAgIGlmICgoZm5wID0gemZucWZwKHMsVE1QQlVGU0laIC0gMSx0bXBidWYpKSkgewotICAg ICAgICAgICAgICAgICAgICBpZiAoZm5wLT5mcGF0aCkKLSAgICAgICAgICAgICAgICAgICAgICBp ZiAoKGludCkgc3RybGVuKGZucC0+ZnBhdGgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgICAg IHMgPSBmbnAtPmZwYXRoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotI2VuZGlmIC8qIFpGTlFGUCAqLwotICAgICAgICBjID0gTlVMOwotICAgICAgICB4ID0g c3RybGVuKHMpOwotICAgICAgICBpZiAoeCA+IDApICAgICAgICAgICAgICAgICAgICAgIC8qIEdl dCBsYXN0IGNoYXIgKi8KLSAgICAgICAgICBjID0gc1t4LTFdOwotICAgICAgICBkZWJ1ZyhGMDAw LCJwYXJzZGlyIHMiLHMsYyk7Ci0gICAgICAgIGlmICgocHBbZGRdID0gbWFsbG9jKHN0cmxlbihz KSsyKSkgPT0gTlVMTCkgewotICAgICAgICAgICAgcHJpbnRmKCI/SW50ZXJuYWwgZXJyb3IgLSBt YWxsb2NcbiIpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRkOyBpKyspIHsgIC8qIEZy ZWUgdGVtcCBzdG9yYWdlICovCi0gICAgICAgICAgICAgICAgaWYgKHBwW2ldKSBmcmVlKHBwW2ld KTsKLSAgICAgICAgICAgICAgICBwcFtpXSA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg IC8qIEhhdmUgc3RvcmFnZSBmb3IgbmFtZSAqLwotICAgICAgICAgICAgc3RyY3B5KHBwW2RkXSxz KTsgICAgICAgICAgIC8qIENvcHkgc3RyaW5nIGludG8gbmV3IHN0b3JhZ2UgKi8KLSAgICAgICAg ICAgIGRlYnVnKEYxMTEsInBhcnNkaXIgcHBbZGRdIDEiLHBwW2RkXSxkZCk7Ci0jaWZuZGVmIE5P WEZFUgotICAgICAgICAgICAgaWYgKGN4ID09IDIpIHsgICAgICAgICAgICAgIC8qIElmIHdlIGFy ZSBwYXJzaW5nIGRpcmVjdG9yaWVzICovCi0gICAgICAgICAgICAgICAgY2hhciBkaXJzZXBbMl07 Ci0gICAgICAgICAgICAgICAgZXh0ZXJuIGludCBteWluZGV4OyAgICAgLyogQXBwZW5kIGRpcmVj dG9yeSBzZXBhcmF0b3IgaWYgKi8KLSAgICAgICAgICAgICAgICBleHRlcm4gc3RydWN0IHN5c2Rh dGEgc3lzaWRsaXN0W107IC8qIGl0IGlzIG1pc3NpbmcuLi4gICAqLwotICAgICAgICAgICAgICAg IGRlYnVnKEYxMDEsInBhcnNkaXIgbXlpbmRleCIsIiIsbXlpbmRleCk7Ci0gICAgICAgICAgICAg ICAgaWYgKG15aW5kZXggPiAtMSkKLSAgICAgICAgICAgICAgICAgIGlmIChzeXNpZGxpc3RbbXlp bmRleF0uc2lkX3VuaXhsaWtlKQotICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPSBzeXNpZGxp c3RbbXlpbmRleF0uc2lkX2RpcnNlcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGlyc2Vw WzBdID0gc3lzaWRsaXN0W215aW5kZXhdLnNpZF9kaXJzZXA7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBkaXJzZXBbMV0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjYXQocHBb ZGRdLCAoY2hhciAqKSBkaXJzZXApOyAvKiBzYWZlICovCi0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgICAgIGRlYnVnKEYx MTEsInBhcnNkaXIgcHBbZGRdIDIiLHBwW2RkXSxkZCk7Ci0gICAgICAgICAgICBpZiAoKytkZCA+ IG1heCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1RvbyBtYW55IGRpcmVjdG9yaWVzIC0g JWQgbWF4XG4iLCBtYXgpOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZDsgaSsr KSB7ICAvKiBGcmVlIHRlbXAgc3RvcmFnZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAocHBb aV0pIGZyZWUocHBbaV0pOwotICAgICAgICAgICAgICAgICAgICBwcFtpXSA9IE5VTEw7Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8q IENLX1BBUlNESVIgKi8KLX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PU0VSVkVS Ci1zdGF0aWMgaW50Ci1ja2xvZ2luKCkgewotICAgIGludCB4OwotICAgIGNoYXIgKiBzOwotICAg IGNoYXIgdXNlcm5hbWVbTE9HSU5MRU4rMV07Ci0gICAgY2hhciBwYXNzd29yZFtMT0dJTkxFTisx XTsKLSAgICBjaGFyIGFjY291bnRbTE9HSU5MRU4rMV07Ci0gICAgZXh0ZXJuIGNoYXIgKiB4X3Vz ZXIsICogeF9wYXNzd2QsICogeF9hY2N0OwotICAgIGV4dGVybiBpbnQgeF9sb2dpbiwgeF9sb2dn ZWQ7Ci0KLSAgICB1c2VybmFtZVswXSA9IE5VTDsKLSAgICBwYXNzd29yZFswXSA9IE5VTDsKLSAg ICBhY2NvdW50WzBdICA9IE5VTDsKLQotICAgIHggPSBjbWZsZCgidXNlcm5hbWUiLCAiIiwgJnMs IHh4c3RyaW5nKTsKLSAgICBpZiAoeCAhPSAtMykgewotICAgICAgICBpZiAoeCA8IDApCi0gICAg ICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKGludClzdHJsZW4ocykgPiBMT0dJTkxFTikg ewotICAgICAgICAgICAgcHJpbnRmKCJcIiVzXCIgLSB0b28gbG9uZywgJWQgbWF4XG4iLCBzLCBM T0dJTkxFTik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIGNr c3RybmNweSh1c2VybmFtZSxzLExPR0lOTEVOKzEpOwotICAgICAgICB4ID0gY21mbGQoInBhc3N3 b3JkIiwgIiIsICZzLCB4eHN0cmluZyk7Ci0gICAgICAgIGlmICh4ICE9IC0zKSB7Ci0gICAgICAg ICAgICBpZiAoeCA8IDApCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIGlm ICgoaW50KXN0cmxlbihzKSA+IExPR0lOTEVOKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJc IiVzXCIgLSB0b28gbG9uZywgJWQgbWF4XG4iLCBzLCBMT0dJTkxFTik7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNrc3RybmNweShwYXNz d29yZCxzLExPR0lOTEVOKzEpOwotICAgICAgICAgICAgeCA9IGNtZmxkKCJhY2NvdW50IiwgIiIs ICZzLCB4eHN0cmluZyk7Ci0gICAgICAgICAgICBpZiAoeCAhPSAtMykgewotICAgICAgICAgICAg ICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAg ICAgICBpZiAoKGludClzdHJsZW4ocykgPiBMT0dJTkxFTikgewotICAgICAgICAgICAgICAgICAg ICBwcmludGYoIlwiJXNcIiAtIHRvbyBsb25nLCAlZCBtYXhcbiIsIHMsIExPR0lOTEVOKTsKLSAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgY2tzdHJuY3B5KGFjY291bnQscyxMT0dJTkxFTisxKTsKLSAgICAgICAgICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbWFrZXN0cigmeF91c2VyLHVzZXJu YW1lKTsKLSAgICBtYWtlc3RyKCZ4X3Bhc3N3ZCxwYXNzd29yZCk7Ci0gICAgbWFrZXN0cigmeF9h Y2N0LGFjY291bnQpOwotICAgIHhfbG9naW4gPSAoeF91c2VyKSA/IDEgOiAwOwotICAgIHhfbG9n Z2VkID0gMDsKLSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQotI2lm bmRlZiBOT0xPQ0FMCi1zdGF0aWMgaW50Ci1zZXRkY2QoKSB7Ci0gICAgaW50IHgsIHksIHogPSAw OwotICAgIGlmICgoeSA9IGNta2V5KGNycnRhYixuY3JyLCIiLCJhdXRvbWF0aWMiLHh4c3RyaW5n KSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgaWYgKHkgPT0gQ0FSX09OKSB7Ci0gICAgICAgIHggPSBj bW51bSgiQ2FycmllciB3YWl0IHRpbWVvdXQsIHNlY29uZHMiLCIwIiwxMCwmeix4eHN0cmluZyk7 Ci0gICAgICAgIGlmICh4IDwgMCkgcmV0dXJuKHgpOwotICAgIH0KLSAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKLSAgICBjYXJyaWVyID0gdHRzY2Fycih5KTsKLSAgICBjZHRp bW8gPSB6OwotICAgIHJldHVybigxKTsKLX0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLWV4dGVy biBzdHJ1Y3Qga2V5dGFiIHllc25vW107Ci1leHRlcm4gaW50IG55ZXNubzsKLQotLyogZyBlIHQg eSBlIHMgbiBvICAqLwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBxMHllc25vW10gPSB7ICAgICAg LyogWWVzL05vL1F1aXQga2V5d29yZCB0YWJsZSAqLwotICAgICJubyIsICAgIDAsIDAsCi0gICAg Im9rIiwgICAgMSwgMCwKLSAgICAieWVzIiwgICAxLCAwCi19Owotc3RhdGljIGludCBucTB5ZXNu byA9IChzaXplb2YocTB5ZXNubykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdGF0aWMg c3RydWN0IGtleXRhYiBxMXllc25vW10gPSB7ICAgICAgLyogWWVzL05vL1F1aXQga2V5d29yZCB0 YWJsZSAqLwotICAgICJubyIsICAgIDAsIDAsCi0gICAgIm9rIiwgICAgMSwgMCwKLSAgICAicXVp dCIsICAyLCAwLAotICAgICJ5ZXMiLCAgIDEsIDAKLX07Ci1zdGF0aWMgaW50IG5xMXllc25vID0g KHNpemVvZihxMXllc25vKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0YXRpYyBzdHJ1 Y3Qga2V5dGFiIHEyeWVzbm9bXSA9IHsgICAgICAvKiBZZXMvTm8vUXVpdCBrZXl3b3JkIHRhYmxl ICovCi0gICAgImdvIiwgICAgMywgMCwKLSAgICAibm8iLCAgICAwLCAwLAotICAgICJvayIsICAg IDEsIDAsCi0gICAgInllcyIsICAgMSwgMAotfTsKLXN0YXRpYyBpbnQgbnEyeWVzbm8gPSAoc2l6 ZW9mKHEyeWVzbm8pIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RhdGljIHN0cnVjdCBr ZXl0YWIgcTN5ZXNub1tdID0geyAgICAgIC8qIFllcy9Oby9RdWl0IGtleXdvcmQgdGFibGUgKi8K LSAgICAiZ28iLCAgICAzLCAwLAotICAgICJubyIsICAgIDAsIDAsCi0gICAgIm9rIiwgICAgMSwg MCwKLSAgICAicXVpdCIsICAyLCAwLAotICAgICJ5ZXMiLCAgIDEsIDAKLX07Ci1zdGF0aWMgaW50 IG5xM3llc25vID0gKHNpemVvZihxM3llc25vKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0K LQotLyogQXNrIHF1ZXN0aW9uLCBnZXQgeWVzL25vIGFuc3dlciAqLwotCi1pbnQKLWdldHllc25v KG1zZywgZmxhZ3MpIGNoYXIgKiBtc2c7IGludCBmbGFnczsgewotI2lmZGVmIENLX1JFQ0FMTAot ICAgIGV4dGVybiBpbnQgb25fcmVjYWxsOyAgICAgICAgICAgICAgIC8qIGFyb3VuZCBQYXNzd29y ZCBwcm9tcHRpbmcgKi8KLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSAgICBpbnQgeSwgejsKLQot I2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGludCB2bW9kZSwgd2luOTVf cG9wdXAsIHN0YXJ0ZmxhZ3M7Ci0gICAgaW50IHZtb2RlX3NhdiA9IHZtb2RlOwotI2VuZGlmIC8q IE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIENLX0FQQwotICAgIGlmICgg YXBjYWN0aXZlICE9IEFQQ19JTkFDVElWRSAmJiAoYXBjc3RhdHVzICYgQVBDX05PSU5QKSApIHsK LSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfQVBDICov Ci0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotI2lmZGVmIENPTU1FTlQKLSAgICBpZiAo d2luOTVfcG9wdXAgJiYgIShzdGFydGZsYWdzICYgOTYpCi0jaWZkZWYgSUtTRAotICAgICAgICAm JiAhaW5zZXJ2ZXIKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICkKLSAgICAgIHJldHVybihw b3B1cF9yZWFkeWVzbm8odm1vZGUsTlVMTCxtc2csZmxhZ3MpKTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgaWYgKHZtb2RlID09IFZURVJNKSB7Ci0gICAgICAgIHZtb2RlID0gVkNNRDsKLSAg ICAgICAgVnNjcm5Jc0RpcnR5KFZURVJNKTsKLSAgICAgICAgVnNjcm5Jc0RpcnR5KFZDTUQpOwot ICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgVk1T Ci0vKgotICBJbiBWTVMsIHdoZW5ldmVyIGEgVEFLRSBmaWxlIG9yIG1hY3JvIGlzIGFjdGl2ZSwg d2UgcmVzdG9yZSB0aGUKLSAgb3JpZ2luYWwgY29uc29sZSBtb2RlcyBzbyBDdHJsLUMvQ3RybC1Z IGNhbiB3b3JrLiAgQnV0IGhlcmUgd2UKLSAgZ28gaW50ZXJhY3RpdmUgYWdhaW4sIHNvIHdlIGhh dmUgdG8gdGVtcG9yYXJpbHkgcHV0IHRoZW0gYmFjay4KLSovCi0gICAgaWYgKCF4Y21kc3JjKQot ICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsKLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVmIENL X1JFQ0FMTAotICAgIG9uX3JlY2FsbCA9IDA7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0gICAg Y21zYXZwKHBzYXZlLFBST01QVEwpOyAgICAgICAgICAgICAgLyogU2F2ZSBvbGQgcHJvbXB0ICov Ci0gICAgY21zZXRwKG1zZyk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSBuZXcgcHJv bXB0ICovCi0gICAgeiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlh bGl6ZSBhbnN3ZXIgdG8gTm8uICovCi0gICAgY21pbmkoY2t4ZWNoKTsgICAgICAgICAgICAgICAg ICAgICAgLyogSW5pdGlhbGl6ZSBwYXJzZXIuICovCi0gICAgZG8gewotICAgICAgICBwcm9tcHQo TlVMTCk7ICAgICAgICAgICAgICAgICAgIC8qIElzc3VlIHByb21wdC4gKi8KLSAgICAgICAgc3dp dGNoIChmbGFncykgewotICAgICAgICAgIGNhc2UgMDogIHkgPSBjbWtleShxMHllc25vLG5xMHll c25vLCIiLCIiLE5VTEwpOyBicmVhazsKLSAgICAgICAgICBjYXNlIDE6ICB5ID0gY21rZXkocTF5 ZXNubyxucTF5ZXNubywiIiwiIixOVUxMKTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAyOiAgeSA9 IGNta2V5KHEyeWVzbm8sbnEyeWVzbm8sIiIsIiIsTlVMTCk7IGJyZWFrOwotICAgICAgICAgIGRl ZmF1bHQ6IHkgPSBjbWtleShxM3llc25vLG5xM3llc25vLCIiLCIiLE5VTEwpOwotICAgICAgICB9 Ci0gICAgICAgIGlmICh5IDwgMCkgewotICAgICAgICAgICAgaWYgKHkgPT0gLTQpIHsgICAgICAg ICAgICAgIC8qIEVPRiAqLwotICAgICAgICAgICAgICAgIHogPSB5OwotICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlIGlmICh5ID09IC0zKSAgICAgICAgIC8qIE5vIGFu c3dlcj8gKi8KLSAgICAgICAgICAgICAgcHJpbnRmKCIgUGxlYXNlIHJlc3BvbmQ7IHR5cGUgJz8n IHRvIHNlZSB2YWxpZCBhbnN3ZXJzLlxuIik7Ci0gICAgICAgICAgICBjbWluaShja3hlY2gpOwot ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgeiA9IHk7ICAgICAgICAgICAgICAgICAgICAg IC8qIFNhdmUgYW5zd2VyICovCi0gICAgICAgICAgICB5ID0gY21jZm0oKTsgICAgICAgICAgICAg ICAgLyogR2V0IGNvbmZpcm1hdGlvbiAqLwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoeSA8IDAp OyAgICAgICAgICAgICAgICAgICAgLyogQ29udGludWUgdGlsbCBkb25lICovCi0gICAgY21zZXRw KHBzYXZlKTsgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSByZWFsIHByb21wdCAqLwot I2lmZGVmIFZNUwotICAgIGlmIChjbWRsdmwgPiAwKSAgICAgICAgICAgICAgICAgICAgIC8qIElu IFZNUyBhbmQgbm90IGF0IHRvcCBsZXZlbCwgKi8KLSAgICAgIGNvbnJlcygpOyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAgcmVzdG9yZSBjb25zb2xlIGFnYWluLiAqLwotI2VuZGlmIC8qIFZN UyAqLwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgaWYgKHZtb2RlICE9IHZtb2Rl X3NhdikgewotICAgICAgICB2bW9kZSA9IFZURVJNOwotICAgICAgICBWc2NybklzRGlydHkoVkNN RCk7Ci0gICAgICAgIFZzY3JuSXNEaXJ0eShWVEVSTSk7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICByZXR1cm4oeik7Ci19Ci0KLSNpZmRlZiBLVUkK LWV4dGVybiBIV05EIGh3bmRDb25zb2xlOwotX1BST1RPVFlQKGludCBndWlfdHh0X2RpYWxvZywo Y2hhciAqLGNoYXIgKixpbnQsY2hhciAqLGludCxjaGFyICosaW50KSk7Ci1fUFJPVE9UWVAoaW50 IGd1aV9tdHh0X2RpYWxvZywoY2hhciAqLGludCxzdHJ1Y3QgdHh0Ym94IFtdKSk7Ci1fUFJPVE9U WVAoaW50IGd1aV9wb3NpdGlvbiwoaW50LCBpbnQpKTsKLV9QUk9UT1RZUChpbnQgZ3VpX3Jlc2l6 ZV9tb2RlLChpbnQpKTsKLV9QUk9UT1RZUChpbnQgZ3VpX3dpbl9ydW5fbW9kZSwoaW50KSk7Ci1f UFJPVE9UWVAoaW50IGd1aV9zYXZlYXNfZGlhbG9nLChjaGFyICosY2hhciAqLCBpbnQsIGNoYXIg KiwgY2hhciAqLCBpbnQpKTsKLWV4dGVybiBpbnQgZ3VpX2RpYWxvZzsKLSNlbmRpZiAvKiBLVUkg Ki8KLQotLyogdSBxIF8gbyBrICAtLSAgVXNlciBRdWVyeSwgZ2V0IFllcy9ObyBvciBPSyBDYW5j ZWwgICovCi0vKgotICBDYWxsIHdpdGg6ICAKLSAgICBwcmVmYWNlOiBFeHBsYW5hdG9yeSB0ZXh0 IHRvIHByaW50LCBvciBOVUxMLgotICAgIHByb21wdDogIFByb21wdC4KLSAgICBtYXNrOiAgICBC aXRtYXNrIGZvciBsZWdhbCByZXNwb25zZXM6IDEgPSBPSyBvciBZZXM7IDIgPSBObyBvciBDYW5j ZWwuCi0gICAgaGVscDogICAgSGVscCB0ZXh0IChhcnJheSBvZiBzdHJpbmdzIG9yIE5VTEwpIFtu b3QgdXNlZCBieSBwYXJzZXJdLgotICAgIGRmbHQ6ICAgIERlZmF1bHQgcmVzcG9uc2UgKDEgb3Ig MikgW25vdCB1c2VkIGJ5IHBhcnNlcl0uCi0gIFJldHVybnM6Ci0gICAtMTogICAgICAgSW52YWxp ZCBhcmd1bWVudChzKS4KLSAgICAwOiAgICAgICBVc2VyIHNhaWQgTm8gb3IgQ2FuY2VsLgotICAg IDEgICAgICAgIFVzZXIgc2FpZCBZZXMgb3IgT0suICAgIAotICBOb3RlczoKLSAgICBwcmVmYWNl IGFuZCBwcm9tcHQgc2hvdWxkIG5vdCBpbmNsdWRlIGZpbmFsIGxpbmUgdGVybWluYXRvciBidXQg bWF5Ci0gICAgaW5jbHVkZSBlbWJlZGRlZCBvbmVzLiAgSGVscCB0ZXh0IGlzIGluIGNhc2UgR1VJ IGRpYWxvZyBuZWVkcyBhIEhlbHAKLSAgICBidXR0b247IGZpbmFsIGVsZW1lbnQgb2YgaGVscC1z dHJpbmcgYXJyYXkgaXMgIiIuICBkZmx0IGlzIHVzZWQgYnkgR1VJCi0gICAgdG8gaGlnaGxpZ2h0 IHRoZSBkZWZhdWx0IHJlc3BvbnNlIGJ1dHRvbi4KLSovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwot dXFfb2soY2hhciAqIHByZWZhY2UsIGNoYXIgKiBwcm9tcHQsIGludCBtYXNrLGNoYXIgKiogaGVs cCwgaW50IGRmbHQpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdXFfb2socHJlZmFjZSxwcm9tcHQs bWFzayxoZWxwLGRmbHQpCi0gICAgY2hhciAqIHByZWZhY2UsICogcHJvbXB0LCAqKiBoZWxwOwot ICAgIGludCBtYXNrLCBkZmx0OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB1cV9vayAqLyB7 Ci0gICAgaW50IHJjLCBsZW47Ci0gICAgY2hhciAqIHRleHQ9TlVMTDsKLQotICAgIGlmICghcHJv bXB0KQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmICgobWFzayAmIDMpID09IDEpIHsJCS8q IE9LIChHVUkgb25seSkgKi8KLSNpZmRlZiBLVUkKLSAgICAgIGlmICggZ3VpX2RpYWxvZyApIHsK LQkvKiBUaGlzIG9uZSBpcyBmb3IgcG9wdXAgaGVscCwgYWxlcnRzLCBldGMgKi8KLSAgICAgICAg aWYgKHByZWZhY2UpIHsKLSAgICAgICAgICAgIGxlbiA9IHN0cmxlbihwcmVmYWNlKSArIHN0cmxl bihwcm9tcHQpICsgNDsKLSAgICAgICAgICAgIHRleHQgPSAoY2hhciAqKW1hbGxvYyhsZW4pOwot ICAgICAgICAgICAgY2ttYWttc2codGV4dCxsZW4scHJlZmFjZSwiXG4iLHByb21wdCxOVUxMKTsK LSAgICAgICAgfQotICAgICAgICByYyA9IE1lc3NhZ2VCb3goaHduZENvbnNvbGUsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgdGV4dCA/IHRleHQgOiBwcm9tcHQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgcHJvbXB0LAotICAgICAgICAgICAgICAgICAgICAgICAgIE1CX09LIHwgTUJfSUNP TklORk9STUFUSU9OIHwgTUJfVEFTS01PREFMKTsKLSAgICAgICAgU2hvd1dpbmRvd0FzeW5jKGh3 bmRDb25zb2xlLFNXX1NIT1dOT1JNQUwpOwotICAgICAgICBTZXRGb3JlZ3JvdW5kV2luZG93KGh3 bmRDb25zb2xlKTsKLSAgICAgICAgaWYgKHRleHQpCi0JICBmcmVlKHRleHQpOwotICAgICAgICBp ZiAoIXJjKQotCSAgcmV0dXJuKC0xKTsKLSAgICAgICAgZWxzZSAKLQkgIHJldHVybigxKTsKLSAg ICAgIH0gZWxzZQotI2VuZGlmICAvKiBLVUkgKi8KLSAgICAgIHsKLQlpZiAocHJlZmFjZSkJCQkv KiBKdXN0IGRpc3BsYXkgdGhlIHRleHQsIGlmIGFueSAqLwotCSAgcHJpbnRmKCIlc1xuIixwcmVm YWNlKTsKLQlpZiAocHJvbXB0KQotCSAgcHJpbnRmKCIlc1xuIixwcm9tcHQpOwotICAgICAgICBy ZXR1cm4oMSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmICgobWFzayAmIDMpID09IDMpIHsJLyog WWVzL05vIG9yIE9LL0NhbmNlbCAqLwotI2lmZGVmIEtVSQotICAgICAgaWYgKCBndWlfZGlhbG9n ICkgewotICAgICAgICBpZiAocHJlZmFjZSkgewotICAgICAgICAgICAgbGVuID0gc3RybGVuKHBy ZWZhY2UpICsgc3RybGVuKHByb21wdCkgKyA0OwotICAgICAgICAgICAgdGV4dCA9IChjaGFyICop bWFsbG9jKGxlbik7Ci0gICAgICAgICAgICBja21ha21zZyh0ZXh0LGxlbixwcmVmYWNlLCJcbiIs cHJvbXB0LE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIHJjID0gTWVzc2FnZUJveChod25kQ29u c29sZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID8gdGV4dCA6IHByb21wdCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg TUJfWUVTTk8gfCBNQl9JQ09OSU5GT1JNQVRJT04gfCBNQl9UQVNLTU9EQUwgfCAKLSAgICAgICAg ICAgICAgICAgICAgICAgICAoZGZsdCA9PSAyID8gTUJfREVGQlVUVE9OMiA6IE1CX0RFRkJVVFRP TjEpKTsKLSAgICAgICAgU2hvd1dpbmRvd0FzeW5jKGh3bmRDb25zb2xlLFNXX1NIT1dOT1JNQUwp OwotICAgICAgICBTZXRGb3JlZ3JvdW5kV2luZG93KGh3bmRDb25zb2xlKTsKLSAgICAgICAgaWYg KHRleHQpCi0JICBmcmVlKHRleHQpOwotICAgICAgICBpZiAoIXJjKQotCSAgcmV0dXJuKC0xKTsK LSAgICAgICAgZWxzZSBpZiAocmMgPT0gSUROTyB8fCByYyA9PSBJRENBTkNFTCkKLQkgIHJldHVy bigwKTsKLSAgICAgICAgZWxzZQotCSAgcmV0dXJuKDEpOwotICAgICAgfSBlbHNlCi0jZW5kaWYg IC8qIEtVSSAqLwotICAgICAgewotCWlmIChwcmVmYWNlKQotCSAgcHJpbnRmKCIlc1xuIixwcmVm YWNlKTsKLQlyZXR1cm4oZ2V0eWVzbm8ocHJvbXB0LDApKTsKLSAgICAgIH0KLSAgICB9IGVsc2Ug ewotCXByaW50ZigiP0ludGVybmFsIGVycm9yOiB1cV9vaygpXG4iKTsKLQlyZXR1cm4oLTEpOwot ICAgIH0KLX0KLQotLyogdSBxIF8gdCB4IHQgIC0tICBVc2VyIFF1ZXJ5LCBnZXQgc2luZ2xlIHRl eHQgcmVzcG9uc2UgICovCi0vKgotICBDYWxsIHdpdGg6ICAKLSAgICBwcmVmYWNlOiBFeHBsYW5h dG9yeSB0ZXh0IHRvIHByaW50LCBvciBOVUxMLgotICAgIHByb21wdDogIFByb21wdC4gCi0gICAg ZWNobzogICAgMCA9IGRvbid0IGVjaG87IDEgPSBlY2hvOyAyID0gZWNobyB3aXRoIGFzdGVyaXNr cy4KLSAgICBoZWxwOiAgICBIZWxwIHRleHQgKGFycmF5IG9mIHN0cmluZ3Mgb3IgTlVMTCkgW25v dCB1c2VkIGJ5IHBhcnNlcl0uCi0gICAgYnVmOiAgICAgUG9pbnRlciB0byByZXN1bHQgYnVmZmVy LgotICAgIGJ1ZmxlbjogIExlbmd0aCBvZiByZXN1bHQgYnVmZmVyLgotICAgIGRmbHQ6ICAgIERl ZmF1bHQgcmVzcG9uc2UgdGV4dCBvciBOVUxMIFtub3QgdXNlZCBieSBwYXJzZXJdLgotICAgIHRp bWVyOiAgIE9wdGlvbmFsIFRpbWVvdXQKLSAgUmV0dXJuczoKLSAgICAwOiAgICAgICBVc2VyIHNh aWQgTm8gb3IgQ2FuY2VsLgotICAgIDEgICAgICAgIFVzZXIgc2FpZCBZZXMgb3IgT0suICAgIAot ICBOb3RlczoKLSAgICBwcmVmYWNlLCBwcm9tcHQsIGFuZCBoZWxwIGFzIGZvciB1cV9vaygpLgot Ki8KLWludAotI2lmZGVmIENLX0FOU0lDCi11cV90eHQoY2hhciAqIHByZWZhY2UsIGNoYXIgKiBw cm9tcHQsIGludCBlY2hvLCBjaGFyICoqIGhlbHAsIGNoYXIgKiBidWYsIAotICAgICAgIGludCBi dWZsZW4sIGNoYXIgKmRmbHQsIGludCB0aW1lcikKLSNlbHNlIC8qIENLX0FOU0lDICovCi11cV90 eHQocHJlZmFjZSxwcm9tcHQsZWNobyxoZWxwLGJ1ZixidWZsZW4sZGZsdCx0aW1lcikKLSAgICBj aGFyICogcHJlZmFjZSwgKiBwcm9tcHQsICoqIGhlbHAsICogYnVmLCAqIGRmbHQ7IAotICAgIGlu dCBidWZsZW4sIGVjaG8sIHRpbWVyOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0jaWZuZGVm IE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICBleHRlcm4gaW50IHZtb2RlOwotICAgIGV4dGVybiBp bnQgc3RhcnRmbGFnczsKLSAgICBleHRlcm4gaW50IHdpbjk1X3BvcHVwOwotI2VuZGlmIC8qIE9T MiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICBpbnQgcmM7IAotCi0gICAgaWYgKGJ1Zmxl biA8IDEgfHwgIWJ1ZikKLSAgICAgIHJldHVybigwKTsKLSNpZmRlZiBLVUkKLSAgICBpZiAoIGd1 aV9kaWFsb2cgKSB7Ci0gICAgICAgIHJjID0gZ3VpX3R4dF9kaWFsb2cocHJlZmFjZSxwcm9tcHQs ZWNobyxidWYsYnVmbGVuLGRmbHQsdGltZXIpOwotICAgICAgICBpZiAoIHJjID4gLTEgKQotICAg ICAgICAgICAgcmV0dXJuKHJjKTsKLSAgICAvKiBPdGhlcndpc2UsIHRoZSBkaWFsb2cgY291bGQg bm90IGJlIGNyZWF0ZWQuICBGYWxsYmFjayB0byB0ZXh0IG1vZGUgKi8KLSAgICB9IAotI2VuZGlm IC8qIEtVSSAqLwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgaWYgKHdpbjk1X3Bv cHVwICYmICEoc3RhcnRmbGFncyAmIDk2KQotI2lmZGVmIElLU0QKLSAgICAgICAgICYmICFpbnNl cnZlcgotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgICkgewotICAgICAgICBkZWJvayA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBsb2cgKi8KLSAgICAgICAgaWYgKGVj aG8gPT0gMSkKLSAgICAgICAgICAgICAgICBwb3B1cF9yZWFkdGV4dCh2bW9kZSxwcmVmYWNlLHBy b21wdCxidWYsYnVmbGVuLDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBv cHVwX3JlYWRwYXNzKHZtb2RlLHByZWZhY2UscHJvbXB0LGJ1ZixidWZsZW4sMCk7Ci0gICAgICAg IGRlYm9rID0gMTsKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSAgICBpZiAocHJlZmFjZSkKLSAgICAgIHByaW50Zigi JXNcbiIscHJlZmFjZSk7Ci0gICAgaWYgKGVjaG8gPT0gMSkKLSAgICAgIHJlYWR0ZXh0KHByb21w dCxidWYsYnVmbGVuKTsKLSAgICBlbHNlCi0gICAgICByZWFkcGFzcyhwcm9tcHQsYnVmLGJ1Zmxl bik7Ci0gICAgcmV0dXJuKDEpOwkJCQkvKiAobm8gYnV0dG9ucyBpbiBwYXJzZXIpICovCi19Ci0K LS8qIHUgcSBfIG0gdCB4IHQgIC0tICBVc2VyIFF1ZXJ5LCBnZXQgbXVsdGlwbGUgdGV4dCByZXNw b25zZXMgKi8KLS8qCi0gIENhbGwgd2l0aDogIAotICAgIHByZWZhY2U6IEV4cGxhbmF0b3J5IHRl eHQgdG8gcHJpbnQsIG9yIE5VTEwuCi0gICAgaGVscDogICAgSGVscCB0ZXh0IChhcnJheSBvZiBz dHJpbmdzIG9yIE5VTEwpIFtub3QgdXNlZCBieSBwYXJzZXJdLgotICAgIG46ICAgICAgIE51bWJl ciBvZiByZXNwb25zZXMgd2FudGVkLgotICAgIGZpZWxkOiAgIEFycmF5IG9mIHN0cnVjdCB0eHRi b3gsIG9uZSBlbGVtZW50IHBlciBmaWVsZCwgc2VlIGNrdXVzci5oLgotICBSZXR1cm5zOgotICAg IDA6ICAgICAgIFVzZXIgc2FpZCBObyBvciBDYW5jZWwuCi0gICAgMSAgICAgICAgVXNlciBzYWlk IFllcyBvciBPSy4gICAgCi0gIE5vdGVzOgotICAgIHByZWZhY2UgYW5kIGhlbHAgYXMgZm9yIHVx X29rKCkuCi0qLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXVxX210eHQoY2hhciAqIHByZWZhY2Us Y2hhciAqKmhlbHAsIGludCBuLCBzdHJ1Y3QgdHh0Ym94IGZpZWxkW10pCi0jZWxzZSAvKiBDS19B TlNJQyAqLwotdXFfbXR4dChwcmVmYWNlLGhlbHAsbixmaWVsZCkKLSAgICBjaGFyICogcHJlZmFj ZTsgY2hhciAqKiBoZWxwOyBpbnQgbjsgc3RydWN0IHR4dGJveCBmaWVsZFtdOyAKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotewotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgZXh0ZXJu IGludCB2bW9kZTsKLSAgICBleHRlcm4gaW50IHN0YXJ0ZmxhZ3M7Ci0gICAgZXh0ZXJuIGludCB3 aW45NV9wb3B1cDsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAg aW50IGksIHJjOwotCi0gICAgaWYgKG4gPCAxIHx8ICFmaWVsZCkKLSAgICAgIHJldHVybigwKTsK LSNpZmRlZiBLVUkKLSAgICBpZiAoIGd1aV9kaWFsb2cgKSB7Ci0gICAgICAgIHJjID0gZ3VpX210 eHRfZGlhbG9nKHByZWZhY2UsIG4sIGZpZWxkKTsKLSAgICAgICAgaWYgKCByYyA+IC0xICkKLSAg ICAgICAgICAgIHJldHVybihyYyk7Ci0gICAgLyogT3RoZXJ3aXNlLCB0aGUgZGlhbG9nIGNvdWxk IG5vdCBiZSBjcmVhdGVkLiAgRmFsbGJhY2sgdG8gdGV4dCBtb2RlICovCi0gICAgfQotI2VuZGlm IC8qIEtVSSAqLwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgaWYgKHdpbjk1X3Bv cHVwICYmICEoc3RhcnRmbGFncyAmIDk2KQotI2lmZGVmIElLU0QKLSAgICAgICAgICYmICFpbnNl cnZlcgotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgICkgewotICAgICAgICBkZWJvayA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBsb2cgKi8KLSAgICAgICAgZm9yIChp ID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAgICAgaWYgKGZpZWxkW2ldLnRfZWNobyA9PSAx KQotICAgICAgICAgICAgICAgIHBvcHVwX3JlYWR0ZXh0KHZtb2RlLHByZWZhY2UsZmllbGRbaV0u dF9sYmwsZmllbGRbaV0udF9idWYsZmllbGRbaV0udF9sZW4sMCk7Ci0gICAgICAgICAgICBlbHNl Ci0gICAgICAgICAgICAgICAgcG9wdXBfcmVhZHBhc3Modm1vZGUscHJlZmFjZSxmaWVsZFtpXS50 X2xibCxmaWVsZFtpXS50X2J1ZixmaWVsZFtpXS50X2xlbiwwKTsKLSAgICAgICAgfQotICAgICAg ICBkZWJvayA9IDE7Ci0gICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICov Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0gICAgaWYgKHByZWZhY2UpCi0gICAgICBwcmludGYo IiVzXG4iLHByZWZhY2UpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQlpZiAoZmll bGRbaV0udF9lY2hvID09IDEpCi0JICByZWFkdGV4dChmaWVsZFtpXS50X2xibCxmaWVsZFtpXS50 X2J1ZixmaWVsZFtpXS50X2xlbik7Ci0JZWxzZQotCSAgcmVhZHBhc3MoZmllbGRbaV0udF9sYmws ZmllbGRbaV0udF9idWYsZmllbGRbaV0udF9sZW4pOwotICAgIH0KLSAgICByZXR1cm4oMSk7Ci19 Ci0KLS8qIHUgcSBfIGYgaSBsIGUgIC0tICBVc2VyIFF1ZXJ5LCBnZXQgZmlsZSBvciBkaXJlY3Rv cnkgbmFtZSAgKi8KLS8qCi0gIENhbGwgd2l0aDogIAotICAgIHByZWZhY2U6IEV4cGxhbmF0b3J5 IHRleHQgdG8gcHJpbnQsIG9yIE5VTEwuCi0gICAgcHJvbXB0OiAgUHJvbXB0IHN0cmluZy4KLSAg ICBmYzogICAgICBGdW5jdGlvbiBjb2RlOgotCSAgICAgICAxID0gaW5wdXQgKGV4aXN0aW5nKSBm aWxlCi0JICAgICAgIDIgPSBleGlzdGluZyBkaXJlY3RvcnkgCi0JICAgICAgIDMgPSBjcmVhdGUg bmV3IG91dHB1dCBmaWxlCi0JICAgICAgIDQgPSBvdXRwdXQgZmlsZSBhbGxvd2luZyBhcHBlbmQg YWNjZXNzCi0gICAgaGVscDogICAgSGVscCB0ZXh0IChhcnJheSBvZiBzdHJpbmdzIG9yIE5VTEwp IFtub3QgdXNlZCBieSBwYXJzZXJdLgotICAgIGRmbHQ6ICAgIERlZmF1bHQgcmVzcG9uc2UuCi0g ICAgcmVzdWx0OiAgUG9pbnRlciB0byByZXN1bHQgYnVmZmVyLgotICAgIHJsZW5ndGg6IExlbmd0 aCBvZiByZXN1bHQgYnVmZmVyLgotCi0gIFJldHVybnM6Ci0gICAtMTogICAgICAgSW52YWxpZCBh cmd1bWVudCwgcmVzdWx0IHRvbyBsb25nLCBvciBvdGhlciBlcnJvci4KLSAgICAwOiAgICAgICBV c2VyIENhbmNlbGVkLgotICAgIDE6ICAgICAgIE9LLCB3aXRoIGZpbGUvcGF0aG5hbWUgY29waWVk IHRvIHJlc3VsdCBidWZmZXIuCi0gICAgMjogICAgICAgTGlrZSAxLCBidXQgZm9yIG91dHB1dCBm aWxlIHRoYXQgaXMgdG8gYmUgYXBwZW5kZWQgdG8uCi0KLSAgTm90ZXM6Ci0gICAgMS4gcHJlZmFj ZSBhbmQgcHJvbXB0IHNob3VsZCBub3QgaW5jbHVkZSBmaW5hbCBsaW5lIHRlcm1pbmF0b3IgYnV0 IG1heQotICAgICAgIGluY2x1ZGUgZW1iZWRkZWQgb25lcy4gIEhlbHAgdGV4dCBpcyBpbiBjYXNl IEdVSSBkaWFsb2cgbmVlZHMgYSBIZWxwCi0gICAgICAgYnV0dG9uOyBmaW5hbCBlbGVtZW50IG9m IGhlbHAtc3RyaW5nIGFycmF5IGlzICIiLgotCi0gICAgMi4gVGhlIGRlZmF1bHQgbWlnaHQgYmUg YSBmaWxlbmFtZSwgYSBkaXJlY3RvcnkgbmFtZSwgYSByZWxhdGl2ZQotICAgICAgIHBhdGhuYW1l LCBvciBhbiBhYnNvbHV0ZSBwYXRobmFtZS4gIFRoaXMgcm91dGluZSBtdXN0IGNvbnZlcnQgaXQg aW50bwotICAgICAgIGludG8gYSBmdWxseSBxdWFsaWZpZWQgKGFic29sdXRlKSBwYXRobmFtZSBz byB0aGUgdXNlciBrbm93cyBleGFjdGx5Ci0gICAgICAgd2hlcmUgdGhlIGZpbGUgaXMgdG8gYmUg Zm91bmQgb3Igc3RvcmVkLiAgSW4gYWRkaXRpb24sIHRoZSBXaW5kb3dzCi0gICAgICAgdmVyc2lv biBvZiB0aGlzIHJvdXRpbmUgbXVzdCBzZXBhcmF0ZSB0aGUgZGlyZWN0b3J5IHBhcnQgZnJvbSB0 aGUKLSAgICAgICBuYW1lIHBhcnQsIHNvIGl0IGNhbiBkaXNwbGF5IHRoZSBnaXZlbiBkaXJlY3Rv cnkgaW4gdGhlIGZpbGUgZGlhbG9nLAotICAgICAgIGFuZCBwdXQgbmFtZSBpbiB0aGUgZmlsZW5h bWUgYm94IHRvIGJlIGVkaXRlZCwgcmVwbGFjZWQsIG9yCi0gICAgICAgYWNjZXB0ZWQuCi0KLSAg ICAzLiBXaGVuIGNhbGxlZCB3aXRoIEZDIDQsIHRoZSBXaW5kb3dzIHZlcnNpb24gc2hvdWxkIGlu Y2x1ZGUgIk5ldyIgYW5kCi0gICAgICAgIkFwcGVuZCIgYnV0dG9ucyBpbiB0aGUgZGlhbG9nLiBz byB0aGUgdXNlciBjYW4gc2F5IHdoZXRoZXIgdGhlIGZpbGUKLSAgICAgICBzaG91bGQgb3Zlcndy aXRlIGFueSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUsIG9yIGJlIGFwcGVuZGVkIHRvIGl0LgotKi8K LQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXVxX2ZpbGUoY2hhciAqIHByZWZhY2UsIGNoYXIgKiBm cHJvbXB0LCBpbnQgZmMsIGNoYXIgKiogaGVscCwKLQljaGFyICogZGZsdCwgY2hhciAqIHJlc3Vs dCwgaW50IHJsZW5ndGgpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdXFfZmlsZShwcmVmYWNlLGZw cm9tcHQsZmMsaGVscCxkZmx0LHJlc3VsdCxybGVuZ3RoKQotICAgIGNoYXIgKiBwcmVmYWNlLCAq IGZwcm9tcHQsICoqIGhlbHAsICogZGZsdCwgKiByZXN1bHQ7Ci0gICAgaW50IGZjLCBybGVuZ3Ro OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB1cV9maWxlICovIHsKLQotICAgIGludCByYyA9 IC0xLCB4LCB5LCB6OwotICAgIGNoYXIgKiBzLCAqIHAsICogZnVsbHBhdGg7Ci0gICAgY2hhciBm aWxlYnVmW0NLTUFYUEFUSCsxXTsKLQotI2lmZGVmIENLX1JFQ0FMTAotICAgIGV4dGVybiBpbnQg b25fcmVjYWxsOwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotCi0jaWZkZWYgS1VJCi0gICAgaWYg KCBndWlfZGlhbG9nICkgewotICAgICAgICByYyA9IGd1aV9zYXZlYXNfZGlhbG9nKHByZWZhY2Us ZnByb21wdCxmYyxkZmx0LHJlc3VsdCxybGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIHJjOwotICAg IH0KLSNlbmRpZiAvKiBLVUkgKi8KLQotI2lmZGVmIENLX1JFQ0FMTAotICAgIG9uX3JlY2FsbCA9 IDA7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0KLSAgICBpZiAocHJlZmFjZSkJCQkvKiBJZiBw cmVmYXRvcnkgdGV4dCBnaXZlbi4uLiAqLwotICAgICAgcHJpbnRmKCIlc1xuIixwcmVmYWNlKTsJ CS8qIGRpc3BsYXkgaXQuICovCi0KLSAgICBjbXNhdnAocHNhdmUsUFJPTVBUTCk7ICAgICAgICAg ICAgICAvKiBTYXZlIG9sZCBwcm9tcHQgKi8KLQotICAgIC8qIFdlIGdldCB0aGUgZnVsbCBwYXRo bmFtZSBvZiB0aGUgcHJvcG9zZWQgb3V0cHV0IGZpbGUganVzdCBzbyAqLwotICAgIC8qIHdlIGNh biBzaG93IGl0IHRvIHRoZSB1c2VyIGJ1dCB3ZSBkb24ndCB1c2UgaXQgb3Vyc2VsdmVzLiAqLwot Ci0gICAgcCA9IE5VTEw7CQkJCS8qIEJ1aWxkIG5ldyBwcm9tcHQgKi8KLSAgICBpZiAoIWRmbHQp IGRmbHQgPSAiIjsKLSAgICBpZiAoKmRmbHQpCQkJCS8qIEhhdmUgZGVmYXVsdCBmaWxlbmFtZSAq LwotICAgICAgemZucWZwKGRmbHQsQ0tNQVhQQVRIKzEsZmlsZWJ1Zik7CS8qIEdldCBmdWxsIHBh dGggKi8KLSAgICBlbHNlCi0gICAgICBja21ha21zZyhmaWxlYnVmLENLTUFYUEFUSCsxLHpndGRp cigpLCJuZXdmaWxlIixOVUxMLE5VTEwpOwotICAgIGZ1bGxwYXRoID0gZmlsZWJ1ZjsKLSAgICB4 ID0gc3RybGVuKGZ1bGxwYXRoKTsKLQotICAgIC8qIElmIG5vIHByb21wdCBnaXZlbiwgYnVpbGQg b25lIHRoYXQgc2hvd3MgdGhlIHByb3Bvc2VkIGZ1bGwgcGF0aG5hbWUuICovCi0KLSAgICBpZiAo IWZwcm9tcHQpIGZwcm9tcHQgPSAiIjsKLSAgICBpZiAoISpmcHJvbXB0KSBmcHJvbXB0ID0geCA/ ICIgRmlsZW5hbWUiIDogIiBGaWxlbmFtZTogIjsKLSAgICB5ID0gc3RybGVuKGZwcm9tcHQpOwot ICAgIGlmICh4ID4gMCkgewkJCS8qIEhhdmUgZGVmYXVsdCBwYXRobmFtZT8gKi8KLQlwID0gKGNo YXIgKiltYWxsb2MoeCArIHkgKyA3KTsJLyogR2V0IHRlbXAgc3RvcmFnZSAqLwotCWlmIChwKSB7 CQkJLyogQnVpbGQgcHJvbXB0ICovCi0JICAgIGNrbWFrbXNnKHAseCt5KzcsZnByb21wdCwiIFsi LGZ1bGxwYXRoLCJdOiAiKTsKLQkgICAgZnByb21wdCA9IHA7Ci0JfQotICAgIH0KLSAgICBjbXNl dHAoZnByb21wdCk7CQkJLyogTWFrZSBuZXcgcHJvbXB0ICovCi0gICAgaWYgKHApIGZyZWUocCk7 CQkJLyogRnJlZSB0ZW1wIHN0b3JhZ2UgKi8KLSAgICBjbWluaShja3hlY2gpOyAgICAgICAgICAg ICAgICAgICAgICAvKiBJbml0aWFsaXplIHBhcnNlci4gKi8KLSAgICB4ID0gLTE7Ci0gICAgZG8g ewotICAgICAgICBwcm9tcHQoTlVMTCk7ICAgICAgICAgICAgICAgICAgIC8qIElzc3VlIHByb21w dC4gKi8KLSAgICAgICAgc3dpdGNoIChmYykgewkJCS8qIFBhcnNlIGRlcGVuZHMgb24gZnVuY3Rp b24gY29kZSAqLwotICAgICAgICAgIGNhc2UgMToJCQkvKiBJbnB1dCBmaWxlICovCi0JICAgIHgg PSBjbWlmaSgiTmFtZSBvZiBleGlzdGluZyBmaWxlIixkZmx0LCZzLCZ5LHh4c3RyaW5nKTsKLQkg ICAgcmMgPSAxOwotCSAgICBicmVhazsKLQkgIGNhc2UgMjoJCQkvKiBEaXJlY3RvcnkgKi8KLQkg ICAgeCA9IGNtZGlyKCJEaXJlY3RvcnkgbmFtZSIsZGZsdCwmcyx4eHN0cmluZyk7Ci0JICAgIHJj ID0gMTsKLQkgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAzOgkJCS8qIE5ldyBvdXRwdXQgZmls ZSAqLwotCSAgICAvKiBGYWxsIHRocnUuLi4gKi8KLQkgIGNhc2UgNDoJCQkvKiBPdXRwdXQgZmls ZSAtIEFwcGVuZCBhbGxvd2VkICovCi0JICAgIHggPSBjbW9maSgiT3V0cHV0IGZpbGUgc3BlY2lm aWNhdGlvbiIsZGZsdCwmcyx4eHN0cmluZyk7Ci0JICAgIHJjID0gKGZjID09IDQpID8gMSA6IDI7 Ci0JICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6CQkJLyogQmFkIGZ1bmN0aW9uIGNvZGUg Ki8KLQkgICAgZ290byB4X3VxX2ZpbGU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHggPCAwKSB7 CQkJLyogUGFyc2UgZXJyb3IgKi8KLQkgICAgZmlsZWJ1ZlswXSA9IE5VTDsKLSAgICAgICAgICAg IGlmICh4ID09IC00KSB7ICAgICAgICAgICAgICAvKiBFT0YgKi8KLSAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSAtMykgICAgICAgICAvKiBObyBhbnN3 ZXI/ICovCi0gICAgICAgICAgICAgIHByaW50ZihmYyA9PSAyID8KLQkJICAgICAiIFBsZWFzZSBl bnRlciBhIGRpcmVjdG9yeSBuYW1lLlxuIiA6Ci0JCSAgICAgIiBQbGVhc2UgZW50ZXIgYSBmaWxl bmFtZS5cbiIKLQkJICAgICApOwotICAgICAgICAgICAgY21pbmkoY2t4ZWNoKTsKLSAgICAgICAg fSBlbHNlIHsKLQkgICAgeiA9IHN0cmxlbihzKTsKLQkgICAgaWYgKHogPiBybGVuZ3RoIHx8IGNr c3RybmNweShmaWxlYnVmLGJyc3RyaXAocyksQ0tNQVhQQVRIKzEpIDwgeikgewotCQlwcmludGYo Ij9OYW1lIHRvbyBsb25nXG4iKTsKLQkJeCA9IC05OwotCSAgICB9IGVsc2UKLQkgICAgICB4ID0g Y21jZm0oKTsJCS8qIEdldCBjb25maXJtYXRpb24gKi8KLSAgICAgICAgfQotCWlmIChmYyA9PSAx ICYmIHggPiAtMSAmJiB5ID4gMCkgewotCSAgICBwcmludGYoIj9XaWxkY2FyZHMgbm90IGFsbG93 ZWRcbiIpOwotCSAgICB4ID0gLTk7Ci0JfQotICAgIH0gd2hpbGUgKHggPCAwKTsgICAgICAgICAg ICAgICAgICAgIC8qIENvbnRpbnVlIHRpbGwgZG9uZSAqLwotCi0gIHhfdXFfZmlsZToKLSAgICBp ZiAoeCA8IDApCi0gICAgICByYyA9IC0xOwotCi0gICAgY21zZXRwKHBzYXZlKTsgICAgICAgICAg ICAgICAgICAgICAgLyogUmVzdG9yZSByZWFsIHByb21wdCAqLwotCi0gICAgaWYgKHJjID4gMCkK LSAgICAgIGNrc3RybmNweShyZXN1bHQsZmlsZWJ1ZixybGVuZ3RoKTsKLSAgICByZXR1cm4ocmMp OwotfQotCi0KLSNpZmRlZiBDS19QRVJNUwotI2lmZGVmIFVOSVgKLQotX1BST1RPVFlQKCBpbnQg enNldHBlcm0sIChjaGFyICosIGludCkpOwotCi0vKiBDSE1PRCBjb21tYW5kIGZvciBVTklYIG9u bHkgKi8KLQotI2RlZmluZSBDSE1fRElSIDAKLSNkZWZpbmUgQ0hNX0RPVCAxCi0jZGVmaW5lIENI TV9GSUwgMgotI2RlZmluZSBDSE1fTElTIDMKLSNkZWZpbmUgQ0hNX05PTCA0Ci0jZGVmaW5lIENI TV9RVUkgNQotI2RlZmluZSBDSE1fUkVDIDYKLSNkZWZpbmUgQ0hNX1ZSQiA3Ci0jZGVmaW5lIENI TV9QQUcgOAotI2RlZmluZSBDSE1fTk9QIDkKLSNkZWZpbmUgQ0hNX1RZUCAxMAotI2RlZmluZSBD SE1fU0lNIDExCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHVjaG1vZHN3W10gPSB7Ci0gICAgIi9k aXJlY3RvcmllcyIsIENITV9ESVIsIDAsCi0gICAgIi9kb3RmaWxlcyIsICAgIENITV9ET1QsIDAs Ci0gICAgIi9maWxlcyIsICAgICAgIENITV9GSUwsIDAsCi0gICAgIi9saXN0IiwgICAgICAgIENI TV9MSVMsIDAsCi0gICAgIi9ub2xpc3QiLCAgICAgIENITV9OT0wsIDAsCi0gICAgIi9ub3BhZ2Ui LCAgICAgIENITV9OT1AsIDAsCi0gICAgIi9wYWdlIiwgICAgICAgIENITV9QQUcsIDAsCi0gICAg Ii9xdWlldCIsICAgICAgIENITV9RVUksIENNX0lOViwKLSAgICAiL3JlY3Vyc2l2ZSIsICAgQ0hN X1JFQywgMCwKLSAgICAiL3NpbXVsYXRlIiwgICAgQ0hNX1NJTSwgMCwKLSAgICAiL3R5cGUiLCAg ICAgICAgQ0hNX1RZUCwgQ01fQVJHLAotICAgICIvdmVyYm9zZSIsICAgICBDSE1fVlJCLCBDTV9J TlYsCi19Owotc3RhdGljIGludCBuY2htb2RzdyA9IChzaXplb2YodWNobW9kc3cpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsKLQotaW50Ci1kb3VjaG1vZCgpIHsKLSAgICBleHRlcm4gaW50IHJl Y3Vyc2l2ZSwgbnNjYW5maWxlLCBkaXJhY3RpdmU7Ci0jaWZkZWYgQ0tfVFRHV1NJWgotICAgIGV4 dGVybiBpbnQgdHRfcm93cywgdHRfY29sczsKLSAgICBpbnQgbiA9IDA7Ci0jZW5kaWYgLyogQ0tf VFRHV1NJWiAqLwotICAgIGludCBpLCBmaWxlcyA9IDEsIHQxID0gMSwgdDIgPSAwLCB4LCB5LCB6 LCB2ZXJib3NlID0gMCwgcmMgPSAxLCBwYWdpbmc7Ci0gICAgaW50IHhtb2RlID0gLTEsIGZzID0g MCwgZ2V0dmFsID0gMCwgc2ltdWxhdGUgPSAwLCB3aWxkID0gMDsKLSAgICBjaGFyIGMsICogczsK LSAgICBzdHJ1Y3QgRkRCIHN3LCBudTsKLQotICAgIGlmICh4YXNrbW9yZSA8IDApIHsKLSNpZmRl ZiBDS19UVEdXU0laCi0gICAgICAgIHhhc2ttb3JlID0gMTsKLSNlbHNlCi0gICAgICAgIHhhc2tt b3JlID0gMDsKLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0gICAgfQotICAgIHBhZ2luZyA9IHhh c2ttb3JlOwotCi0gICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmly c3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLwotICAgICAgICAgICBfQ01LRVksICAgICAgICAg ICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICJPY3RhbCBmaWxlIHBlcm1pc3Np b24gY29kZSwgb3Igc3dpdGNoIiwKLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgbmNobW9kc3csICAgICAgICAg ICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLSAgICAgICAg ICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjog NCA9IGNtc3dpICovCi0gICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyog UHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICB1Y2htb2RzdywgICAgICAgICAgICAg ICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgJm51ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICk7Ci0gICAg Y21mZGJpKCZudSwKLSAgICAgICAgICAgX0NNTlVNLCAgICAgICAgICAgICAgICAgICAgICAvKiBO dW1iZXIgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIZWxw IG1lc3NhZ2UgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBE ZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTi9B ICovCi0gICAgICAgICAgIDgsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmFkaXggPSA4 ICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTi9BICovCi0g ICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5j dGlvbiAqLwotICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIE4vQSAq LwotICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5leHQgKi8KLSAg ICAgICAgICAgKTsKLQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGlmICgoeCA9IGNtZmRiKCZz dykpIDwgMCkgewotICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICB4 ID0gLTk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/RmlsZW5hbWUgcmVxdWlyZWRcbiIpOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICB9Ci0gICAgICAg IGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAg IGMgPSBjbWdicmsoKTsKLSAgICAgICAgZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKTsK LSAgICAgICAgaWYgKGdldHZhbCAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotICAgICAg ICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7 Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZ2V0dmFs ICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoaXMg c3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7 Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7Ci0gICAgICAg ICAgY2FzZSBDSE1fRElSOgotICAgICAgICAgICAgdDEgPSAxOwotICAgICAgICAgICAgdDIgPSAx OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBDSE1fRE9UOgotICAgICAgICAg ICAgbWF0Y2hkb3QgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBDSE1f RklMOgotICAgICAgICAgICAgdDEgPSAwOwotICAgICAgICAgICAgdDIgPSAwOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBDSE1fTElTOgotICAgICAgICAgIGNhc2UgQ0hNX1ZS QjoKLSAgICAgICAgICAgIHZlcmJvc2UgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgY2FzZSBDSE1fTk9MOgotICAgICAgICAgIGNhc2UgQ0hNX1FVSToKLSAgICAgICAgICAgIHZl cmJvc2UgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBDSE1fUkVDOgot ICAgICAgICAgICAgcmVjdXJzaXZlID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg IGNhc2UgQ0hNX1BBRzoKLSAgICAgICAgICAgIHZlcmJvc2UgPSAxOwotICAgICAgICAgICAgcGFn aW5nID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgQ0hNX05PUDoKLSAg ICAgICAgICAgIHBhZ2luZyA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl IENITV9TSU06Ci0gICAgICAgICAgICBzaW11bGF0ZSA9IDE7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgICBjYXNlIENITV9UWVA6IHsKLSAgICAgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBr ZXl0YWIgdHh0YmluW107Ci0gICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHR4dGJpbiwzLCIi LCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAg ICAgICAgaWYgKHggPT0gMikgeyAgICAgICAgICAgICAvKiBBTEwgKi8KLSAgICAgICAgICAgICAg ICAgIHhtb2RlID0gLTE7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg LyogVEVYVCBvciBCSU5BUlkgb25seSAqLwotICAgICAgICAgICAgICAgICAgeG1vZGUgPSB4Owot ICAgICAgICAgICAgICAgICAgZnMgPSAxOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICB6ID0gY21yZXN1bHQu bnJlc3VsdDsKLSAgICB4ID0gY21pZmkyKCJGaWxlIHNwZWNpZmljYXRpb24iLCIiLCZzLCZ3aWxk LHQxLE5VTEwseHhzdHJpbmcsdDIpOwotICAgIGlmICh4IDwgMCkgewotICAgICAgICBpZiAoeCA9 PSAtMykgewotICAgICAgICAgICAgcHJpbnRmKCI/QSBmaWxlIHNwZWNpZmljYXRpb24gaXMgcmVx dWlyZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfSBlbHNlCi0gICAg ICAgICAgcmV0dXJuKHgpOwotICAgIH0KLSAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0la KTsKLSAgICBzID0gdG1wYnVmOwotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIHJl dHVybih4KTsKLSNpZmRlZiBaWFJFV0lORAotICAgIGlmICh3aWxkKSBmaWxlcyA9IHp4cmV3aW5k KCk7Ci0jZWxzZQotICAgIGlmICh3aWxkKSBmaWxlcyA9IG56eHBhbmQocywwKTsKLSNlbmRpZiAv KiBaWFJFV0lORCAqLwotCi0gICAgaWYgKHBhZ2luZyA+IC0xKQotICAgICAgeGFza21vcmUgPSBw YWdpbmc7Ci0KLSNpZmRlZiBDS19UVEdXU0laCi0gICAgaWYgKHZlcmJvc2UgJiYgcGFnaW5nKSB7 Ci0jaWZkZWYgT1MyCi0gICAgICAgIHR0Z2N3c3ooKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgICAg ICBpZiAodHRnd3NpeigpID4gMCkgewotICAgICAgICAgICAgaWYgKHR0X3Jvd3MgPiAwICYmIHR0 X2NvbHMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOwotICAgICAg ICAgICAgICAgIGNtZF9jb2xzID0gdHRfY29sczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot I2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0KLSAgICBm b3IgKGkgPSAwOyBpIDwgZmlsZXM7IGkrKykgewotICAgICAgICBpZiAoZmlsZXMgPT0gMSAmJiB3 aWxkID09IDApIHsgIC8qIEZvciAiY2htb2QgNzc3IC4iICovCi0gICAgICAgICAgICBja3N0cm5j cHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB4ID0g em5leHQobGluZSk7Ci0gICAgICAgICAgICBpZiAoeCA8IDEpIHsKLSAgICAgICAgICAgICAgICBp ZiAoaSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP05vIGZpbGVzIG1hdGNo IC0gXCIlc1wiXG4iLGxpbmUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZzKSB7Ci0jaWZkZWYgVk1TT1JVTklYCi0gICAgICAg ICAgICAvKiBJZiAvVFlQRTpURVhUIG9yIEJJTkFSWSBnaXZlbiwgc2tpcCBkaXJlY3RvcmllcyBh bmQgbGlua3MgKi8KLSAgICAgICAgICAgIC8qIHNpbmNlIHRoZXkgYXJlIG5laXRoZXIgdGV4dCBu b3IgYmluYXJ5LiAqLwotICAgICAgICAgICAgZXh0ZXJuIGludCB6Z2ZzX2Rpciwgemdmc19saW5r OwotICAgICAgICAgICAgemdldGZzKGxpbmUpOwotICAgICAgICAgICAgaWYgKHpnZnNfZGlyIHx8 IHpnZnNfbGluaykKLSAgICAgICAgICAgICAgY29udGludWU7Ci0jZWxzZQotICAgICAgICAgICAg aWYgKHpjaGtpKGxpbmUpIDwgMCkKLSAgICAgICAgICAgICAgY29udGludWU7Ci0jZW5kaWYgLyog Vk1TT1JVTklYICovCi0gICAgICAgICAgICAvKiBSZWd1bGFyIGZpbGUsIHNjYW4gaXQgKi8KLSAg ICAgICAgICAgIHN3aXRjaCAoc2NhbmZpbGUobGluZSwmeSxuc2NhbmZpbGUpKSB7Ci0gICAgICAg ICAgICAgIGNhc2UgRlRfQklOOgotICAgICAgICAgICAgICAgIGlmICh4bW9kZSAhPSAxKQotICAg ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgIGNhc2UgRlRfVEVYVDoKLSAgICAgICAgICAgICAgY2FzZSBGVF83QklUOgotICAgICAg ICAgICAgICBjYXNlIEZUXzhCSVQ6Ci0jaWZkZWYgVU5JQ09ERQotICAgICAgICAgICAgICBjYXNl IEZUX1VURjg6Ci0gICAgICAgICAgICAgIGNhc2UgRlRfVUNTMjoKLSNlbmRpZiAvKiBVTklDT0RF ICovCi0gICAgICAgICAgICAgICAgaWYgKHhtb2RlICE9IDApCi0gICAgICAgICAgICAgICAgICBj b250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoc2ltdWxhdGUp IHsKLSNpZmRlZiBVTklYCi0gICAgICAgICAgICBleHRlcm4gaW50IHpjaGtvZDsgICAgICAgICAg LyogVW5pZGVudGlmaWVkIEZseWluZyAqLwotICAgICAgICAgICAgaW50IHh4ID0gemNoa29kOyAg ICAgICAgICAgIC8qIEFQSSBFeHRlbnNpb24uLi4gKi8KLSAgICAgICAgICAgIHpjaGtvZCA9IDE7 Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICAgICAgaWYgKHpjaGtvKGxpbmUpIDwgMCkKLSAg ICAgICAgICAgICAgcHJpbnRmKCIlcyAtIEFjY2VzcyBkZW5pZWRcbiIsbGluZSk7Ci0gICAgICAg ICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50ZigiJXMgLSBPS1xuIixsaW5lKTsKLSNpZmRl ZiBVTklYCi0gICAgICAgICAgICB6Y2hrb2QgPSB4eDsKLSNlbmRpZiAvKiBVTklYICovCi0gICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoenNldHBlcm0obGluZSx6KSA8IDEpIHsKLSAg ICAgICAgICAgICAgICBpZiAodmVyYm9zZSB8fCBmaWxlcyA8IDIpIHsKLSAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCIlczogJXNcbiIsbGluZSxja19lcnJzdHIoKSk7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodmVy Ym9zZSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiJXMgICVzXG4iLHppcGVybShsaW5lKSxs aW5lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmZGVmIENLX1RUR1dTSVoKLSAgICAg ICAgaWYgKHZlcmJvc2UgJiYgcGFnaW5nKSB7ICAgICAgICAvKiBQYXVzZSBhdCBlbmQgb2Ygc2Ny ZWVuICovCi0gICAgICAgICAgICBpZiAoY21kX3Jvd3MgPiAwICYmIGNtZF9jb2xzID4gMCkgewot ICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIHsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKCFhc2ttb3JlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBuID0gMDsKLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19UVEdX U0laICovCi0KLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSByYyk7Ci19Ci0jZW5kaWYgLyog VU5JWCAqLwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0KLSNpZm5kZWYgTk9TUEwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTLUV4cHJlc3Npb25zICovCi0jaWZuZGVmIE5PU0VYUAotCi1z dHJ1Y3Qga2V5dGFiIHNleHB0YWJbXSA9IHsKLSAgICAiZGVwdGgtbGltaXQiLCAxLCAwLAotICAg ICJlY2hvLXJlc3VsdCIsIDAsIDAsCi0gICAgInRydW5jYXRlLWFsbC1yZXN1bHRzIiwgMgotfTsK LQotc3RhdGljIGludCBzZXhwbWF4ZGVwID0gMTAwMDsgICAgICAgICAgIC8qIE1heGltdW0gZGVw dGggKi8KLQotI2RlZmluZSB4eGZsb2F0KHMseCkgXAotKChpc2RpZ2l0KCpzKXx8KCpzPT0nLScp fHwoKnM9PScrJyl8fCgqcz09Jy4nKXx8KCpzPT0nXDA0MCcpKT9pc2Zsb2F0KHMseCk6MCkKLQot I2RlZmluZSBTWF9BREQgIDEgICAgICAgICAgICAgICAgICAgICAgIC8qIFN5bWJvbHMgZm9yIGJ1 aWx0LWluIG9wZXJhdG9ycyAqLwotI2RlZmluZSBTWF9TVUIgIDIKLSNkZWZpbmUgU1hfTVVMICAz Ci0jZGVmaW5lIFNYX0RJViAgNAotI2RlZmluZSBTWF9QT1cgIDUKLSNkZWZpbmUgU1hfU0VUICA2 Ci0jZGVmaW5lIFNYX01PRCAgNwotI2RlZmluZSBTWF9FVkEgIDgKLSNkZWZpbmUgU1hfRVhQICA5 Ci0jZGVmaW5lIFNYX0FFUSAxMAotI2RlZmluZSBTWF9BTFQgMTEKLSNkZWZpbmUgU1hfQUdUIDEy Ci0jZGVmaW5lIFNYX0FMRSAxMwotI2RlZmluZSBTWF9BR0UgMTQKLSNkZWZpbmUgU1hfTUlOIDE1 Ci0jZGVmaW5lIFNYX01BWCAxNgotI2RlZmluZSBTWF9TUVIgMTcKLSNkZWZpbmUgU1hfRkxSIDE4 Ci0jZGVmaW5lIFNYX0NFSSAxOQotI2RlZmluZSBTWF9UUlUgMjAKLSNkZWZpbmUgU1hfQUJTIDIx Ci0jZGVmaW5lIFNYX1JPVSAyMgotI2RlZmluZSBTWF9MRVQgMjMKLSNkZWZpbmUgU1hfTEdOIDI0 Ci0jZGVmaW5lIFNYX0xHWCAyNQotI2RlZmluZSBTWF9GTE8gMjYKLSNkZWZpbmUgU1hfSUZDIDI3 Ci0jZGVmaW5lIFNYX05PVCAyOAotI2RlZmluZSBTWF9ORVEgMjkKLSNkZWZpbmUgU1hfQU5EIDMw Ci0jZGVmaW5lIFNYX0xPUiAzMQotI2RlZmluZSBTWF9TSU4gMzIKLSNkZWZpbmUgU1hfQ09TIDMz Ci0jZGVmaW5lIFNYX1RBTiAzNAotI2RlZmluZSBTWF9CV0EgMzUKLSNkZWZpbmUgU1hfQldPIDM2 Ci0jZGVmaW5lIFNYX0JXWCAzNwotI2RlZmluZSBTWF9CV04gMzgKLSNkZWZpbmUgU1hfWE9SIDM5 Ci0jZGVmaW5lIFNYX0lOQyA0MAotI2RlZmluZSBTWF9ERUMgNDEKLSNkZWZpbmUgU1hfUVVPIDQy Ci0jZGVmaW5lIFNYX1NUUiA0MwotCi0vKiBPcGVyYXRvciBmbGFncyAqLwotCi0jZGVmaW5lIFNY Rl9QUkUgMjU2ICAgICAgICAgICAgICAgICAgICAgLyogUHJlZGljYXRlICovCi0jZGVmaW5lIFNY Rl9PTkUgNTEyICAgICAgICAgICAgICAgICAgICAgLyogUmVxdWlyZXMgb25lIGFyZyAqLwotI2Rl ZmluZSBTWEZfVFdPIDEwMjQgICAgICAgICAgICAgICAgICAgIC8qIFJlcXVpcmVzIHR3byBhcmdz IG9yIG1vcmUgKi8KLSNkZWZpbmUgU1hGX0ZMTyAyMDQ4ICAgICAgICAgICAgICAgICAgICAvKiBD b2VyY2UgdG8gZmxvYXRpbmctcG9pbnQgKi8KLQotLyogQnVpbHQtaW4gY29uc3RhbnRzICovCi0K LSNkZWZpbmUgU1hDX05JTCAxICAgICAgICAgICAgICAgICAgICAgICAvKiBOSUwgKi8KLSNkZWZp bmUgU1hDX1BJICAyICAgICAgICAgICAgICAgICAgICAgICAvKiBQSSAqLwotI2RlZmluZSBTWENf VCAgIDMgICAgICAgICAgICAgICAgICAgICAgIC8qIFQgKi8KLQotLyoKLSAgVGhpcyBpcyBhbiB4 bG9va3VwKCkgdGFibGUgYW5kIHNvIG5lZWQgbm90IGJlIGluICJhbGhhYmV0aWNhbCIgb3JkZXIu Ci0gIFRoZXJlZm9yZSBlbnRyaWVzIGFyZSBhcnJhbmdlZCB0byBtaW5pbWl6ZSBzZWFyY2ggZm9y IG1vc3QgY29tbW9uCi0gIG9wZXJhdG9ycy4KLSovCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzZXhw b3BzW10gPSB7ICAgICAgLyogQnVpbHQtaW4gb3BlcmF0b3JzICovCi0gICAgInNldHEiLCAgICBT WF9TRVQsIDAsICAgICAgICAgICAgICAgLyogR2xvYmFsIGFzc2lnbm1lbnQgKi8KLSAgICAiKyIs ICAgICAgIFNYX0FERCwgMCwgICAgICAgICAgICAgICAvKiBTaW1wbGUgYXJpdGhtZXRpYyAqLwot ICAgICItIiwgICAgICAgU1hfU1VCLCAwLAotICAgICIqIiwgICAgICAgU1hfTVVMLCAwLAotICAg ICIvIiwgICAgICAgU1hfRElWLCBTWEZfVFdPLAotICAgICJeIiwgICAgICAgU1hfUE9XLCBTWEZf VFdPLAotCi0gICAgImlmIiwgICAgICBTWF9JRkMsIFNYRl9UV08sICAgICAgICAgLyogSUYgKi8K LSAgICAibGV0IiwgICAgIFNYX0xFVCwgMCwgICAgICAgICAgICAgICAvKiBMb2NhbCBhc3NpZ25t ZW50ICovCi0gICAgIm5vdCIsICAgICBTWF9OT1QsIFNYRl9PTkUsICAgICAgICAgLyogTk9UICov Ci0gICAgIm1vZCIsICAgICBTWF9NT0QsIFNYRl9UV08sICAgICAgICAgLyogTW9kdWx1cyAqLwot Ci0gICAgIjwiLCAgICAgICBTWF9BTFQsIFNYRl9QUkUsCQkvKiBDb21wYXJpc29ucyAqLwotICAg ICI+IiwgICAgICAgU1hfQUdULCBTWEZfUFJFLAotICAgICI8PSIsICAgICAgU1hfQUxFLCBTWEZf UFJFLAotICAgICI9IiwgICAgICAgU1hfQUVRLCBTWEZfUFJFLAotICAgICI+PSIsICAgICAgU1hf QUdFLCBTWEZfUFJFLAotICAgICIhPSIsICAgICAgU1hfTkVRLCBTWEZfUFJFLAotCi0gICAgIisr IiwgICAgICBTWF9JTkMsIFNYRl9PTkV8U1hGX1RXTywgLyogSW5jcmVtZW50ICovCi0gICAgIi0t IiwgICAgICBTWF9ERUMsIFNYRl9PTkV8U1hGX1RXTywgLyogRGVjcmVtZW50ICovCi0KLSAgICAi KioiLCAgICAgIFNYX1BPVywgU1hGX1RXTywgICAgICAgICAvKiBDb21tb24gc3lub255bXMgKi8K LSAgICAiPT0iLCAgICAgIFNYX0FFUSwgU1hGX1BSRSwKLSAgICAiISIsICAgICAgIFNYX05PVCwg U1hGX09ORSwKLSAgICAiLiIsICAgICAgIFNYX0VWQSwgMCwKLQotICAgICJhbmQiLCAgICAgU1hf QU5ELCAwLCAgICAgICAgICAgICAgIC8qIExvZ2ljYWwgb3BlcmF0b3JzICovCi0gICAgIm9yIiwg ICAgICBTWF9MT1IsIDAsCi0gICAgInhvciIsICAgICBTWF9YT1IsIFNYRl9UV08sCi0KLSAgICAi bWF4IiwgICAgIFNYX01BWCwgU1hGX09ORXxTWEZfVFdPLCAvKiBNYXggYW5kIG1pbiAqLwotICAg ICJtaW4iLCAgICAgU1hfTUlOLCBTWEZfT05FfFNYRl9UV08sCi0KLSAgICAiJSIsICAgICAgIFNY X01PRCwgU1hGX1RXTywgICAgICAgICAvKiBNb3JlIHN5bm9ueW1zICovCi0gICAgInx8IiwgICAg ICBTWF9MT1IsIDAsCi0gICAgIiYmIiwgICAgICBTWF9BTkQsIDAsCi0KLSAgICAicXVvdGUiLCAg IFNYX1FVTywgU1hGX09ORSwKLSAgICAic3RyaW5nIiwgIFNYX1NUUiwgU1hGX09ORSwKLQotICAg ICJldmFsIiwgICAgU1hfRVZBLCAwLCAgICAgICAgICAgICAgIC8qIEFzc29ydGVkIGNvbW1hbmRz ICovCi0gICAgImFicyIsICAgICBTWF9BQlMsIFNYRl9PTkUsCi0gICAgInRydW5jYXRlIixTWF9U UlUsIFNYRl9PTkV8U1hGX0ZMTywKLSAgICAicm91bmQiLCAgIFNYX1JPVSwgU1hGX09ORXxTWEZf VFdPfFNYRl9GTE8sCi0gICAgImNlaWxpbmciLCBTWF9DRUksIFNYRl9PTkV8U1hGX0ZMTywKLSAg ICAiZmxvb3IiLCAgIFNYX0ZMUiwgU1hGX09ORXxTWEZfRkxPLAotICAgICJmbG9hdCIsICAgU1hf RkxPLCBTWEZfT05FfFNYRl9GTE8sCi0KLSNpZmRlZiBGTkZMT0FUCi0gICAgInNxcnQiLCAgICBT WF9TUVIsIFNYRl9PTkV8U1hGX0ZMTywgLyogRmxvYXRpbmcgcG9pbnQgZnVuY3Rpb25zICovCi0g ICAgImV4cCIsICAgICBTWF9FWFAsIFNYRl9PTkV8U1hGX0ZMTywKLSAgICAic2luIiwgICAgIFNY X1NJTiwgU1hGX09ORXxTWEZfRkxPLAotICAgICJjb3MiLCAgICAgU1hfQ09TLCBTWEZfT05FfFNY Rl9GTE8sCi0gICAgInRhbiIsICAgICBTWF9UQU4sIFNYRl9PTkV8U1hGX0ZMTywKLSAgICAibG9n IiwgICAgIFNYX0xHTiwgU1hGX09ORXxTWEZfRkxPLAotICAgICJsb2cxMCIsICAgU1hfTEdYLCBT WEZfT05FfFNYRl9GTE8sCi0jZW5kaWYgLyogRk5GTE9BVCAqLwotCi0gICAgIiMiLCAgICAgICBT WF9CV1gsIFNYRl9UV08sICAgICAgICAgLyogQml0d2lzZSBvcGVyYXRvcnMgKi8KLSAgICAiJiIs ICAgICAgIFNYX0JXQSwgMCwKLSAgICAifCIsICAgICAgIFNYX0JXTywgMCwKLSAgICAifiIsICAg ICAgIFNYX0JXTiwgU1hGX09ORSwKLSAgICAiIiwgMCwgMCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAoZW5kKSAqLwotfTsKLXN0YXRpYyBpbnQgbnNleHBvcHMgPSAoc2l6ZW9mKHNleHBv cHMpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFi IHNleHBjb25zdHNbXSA9IHsgICAvKiBCdWlsdC1pbiBjb25zdGFudHMgKi8KLSAgICAibmlsIiwg U1hDX05JTCwgMCwgICAgICAgICAgICAgICAgICAvKiBOSUwgKGZhbHNlKSAqLwotICAgICJwaSIs ICBTWENfUEksICAwLCAgICAgICAgICAgICAgICAgIC8qIFBpICgzLjE0MTU5MjYuLi4pICovCi0g ICAgInQiLCAgIFNYQ19ULCAgIDAsICAgICAgICAgICAgICAgICAgLyogVCAodHJ1ZSkgKi8KLSAg ICAiIiwgMCwgMAotfTsKLXN0YXRpYyBpbnQgbnNleHBjb25zdHMgPSAoc2l6ZW9mKHNleHBjb25z dHMpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLWludCBzZXhwcmMgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTLUV4cHJlc3Npb24gZXJyb3IgZmxhZyAqLwotaW50IHNl eHBwdiA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZWRpY2F0ZSB2YWx1ZSAqLwot c3RhdGljIGludCBzZXhwdHJ1bmMgPSAwOwkJLyogRmxhZyB0byBmb3JjZSBhbGwgcmVzdWx0cyB0 byBpbnQgKi8KLQotI2RlZmluZSBTWE1MRU4gNjQgICAgICAgICAgICAgICAgICAgICAgIC8qIE1h Y3JvIGFyZyBsaXN0IGluaXRpYWwgbGVuZ3RoICovCi0jaW5jbHVkZSA8bWF0aC5oPiAgICAgICAg ICAgICAgICAgICAgICAgLyogRmxvYXRpbmctcG9pbnQgZnVuY3Rpb25zICovCi0KLV9QUk9UT1RZ UCggY2hhciAqIGZwZm9ybWF0LCAoQ0tGTE9BVCwgaW50LCBpbnQpICk7Ci1fUFJPVE9UWVAoIENL RkxPQVQgY2tyb3VuZCwgKENLRkxPQVQsIGludCwgY2hhciAqLCBpbnQpICk7Ci0KLWV4dGVybiBj aGFyIG1hdGhfcGlbXTsgICAgICAgICAgICAgICAgICAvKiBWYWx1ZSBvZiBQaSAqLwotZXh0ZXJu IGludCBzZXhwZWNobzsgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBTRVhQUkVTU0lPTiBFQ0hP IHZhbHVlICovCi1leHRlcm4gY2hhciAqIHNleHB2YWw7ICAgICAgICAgICAgICAgICAgLyogTGFz dCB0b3AtbGV2ZWwgUy1FeHByZXNzaW9uIHZhbHVlICovCi1leHRlcm4gY2hhciAqIGxhc3RzZXhw OyAgICAgICAgICAgICAgICAgLyogTGFzdCBTLUV4cHJlc3Npb24gKi8KLWludCBzZXhwcm1heCA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBMb25nZXN0IHJlc3VsdCAoZm9yIHN0YXRzKSAq LwotaW50IHNleHBkbWF4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heCBkZXB0aCBy ZWFjaGVkIChmb3Igc3RhdHMpICovCi1pbnQgc2V4cGRlcCAgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgLyogZG9zZXhwKCkgcmVjdXJzaW9uIGRlcHRoICovCi1zdGF0aWMgaW50ICogc3hybGVu ID0gTlVMTDsgICAgICAgICAgICAgLyogUmVzdWx0IHN0YWNrIHN0cmluZyBzaXplcyAqLwotc3Rh dGljIGNoYXIgKiogc3hyZXN1bHQgPSBOVUxMOyAgICAgICAgIC8qIFJlc3VsdCBzdGFjayAqLwot Ci0vKiAgcyBoIG8gcyBlIHggcCAgLS0gIFNob3cgUy1FeHByZXNzaW9uIGluZm8gICovCi0KLVZP SUQKLXNob3NleHAoKSB7Ci0gICAgcHJpbnRmKCJcbiIpOwotICAgIHByaW50ZigiIHNleHByZXNz aW9uIGVjaG8tcmVzdWx0OiAlc1xuIixzaG93b29hKHNleHBlY2hvKSk7Ci0gICAgcHJpbnRmKCIg c2V4cHJlc3Npb24gZGVwdGgtbGltaXQ6ICVkXG4iLHNleHBtYXhkZXApOwotICAgIHByaW50Zigi XG4iKTsKLSAgICBwcmludGYoIiBtYXhpbXVtIGRlcHRoIHJlYWNoZWQ6ICAgJWRcbiIsc2V4cGRt YXgpOwotICAgIHByaW50ZigiIGxvbmdlc3QgcmVzdWx0IHJldHVybmVkOiAlZFxuIixzZXhwcm1h eCk7Ci0gICAgcHJpbnRmKCJcbiIpOwotICAgIHByaW50ZigiIHRydW5jYXRlIGFsbCByZXN1bHRz OiAgICAlc1xuIixzaG93b2ZmKHNleHB0cnVuYykpOwotICAgIHByaW50ZigiXG4iKTsKLSAgICBw cmludGYoIiBsYXN0IHNleHByZXNzaW9uOiAgICAgICAgJXNcbiIsbGFzdHNleHAgPyBsYXN0c2V4 cCA6ICIobm9uZSkiKTsKLSAgICBwcmludGYoIiBsYXN0IHZhbHVlOiAgICAgICAgICAgICAgJXNc biIsc2V4cHZhbCA/IHNleHB2YWwgOiAiKG5vbmUpIik7Ci0gICAgcHJpbnRmKCJcbiIpOwotfQot Ci0KLXN0YXRpYyBjaGFyICoKLXNleHBkZWJ1ZyhzKSBjaGFyICogczsgewotICAgIC8qIEZvciBk ZWJ1Z2dpbmcgLS0gaW5jbHVkZXMgcmVjdXJzaW9uIGRlcHRoIGluIGVhY2ggZGVidWcgZW50cnkg Ki8KLSAgICBzdGF0aWMgY2hhciBidWZbNjRdOwotICAgIGNrbWFrbXNnKGJ1Ziw2NCwiZG9zZXhw WyIsY2tpdG9hKHNleHBkZXApLCJdICIscyk7Ci0gICAgcmV0dXJuKChjaGFyICopYnVmKTsKLX0K LQotLyogIGQgbyBzIGUgeCBwICAtLSAgUy1FeHByZXNzaW9uIFJlYWRlciAgKi8KLQotLyogIFJl dHVybnMgdmFsdWUgYXMgc3RyaW5nIChlbXB0eSwgbnVtZXJpYywgb3Igbm9uLW51bWVyaWMpICov Ci0KLXN0YXRpYyBjaGFyIHN4cm91bmRidWZbMzJdOwkJLyogRm9yIFJPVU5EIHJlc3VsdCAqLwot Ci1jaGFyICoKLWRvc2V4cChzKSBjaGFyICpzOyB7ICAgICAgICAgICAgICAgICAgICAvKiBzID0g Uy1FeHByZXNzaW9uICovCi0gICAgZXh0ZXJuIHN0cnVjdCBtdGFiICptYWN0YWI7ICAgICAgICAg LyogTWFjcm8gdGFibGUgKi8KLSAgICBleHRlcm4gaW50IG1hY2x2bCwgbm1hYzsKLSAgICBleHRl cm4gY2hhciAqbXJ2YWxbXTsKLSAgICBleHRlcm4gaW50IG1ha2VzdHJsZW47ICAgICAgICAgICAg ICAvKiAoc2VlIG1ha2VzdHIoKSkgKi8KLSAgICBzdHJ1Y3Qgc3RyaW5nYXJyYXkgKiBxID0gTlVM TDsgICAgICAvKiBja3NwbGl0KCkgcmV0dXJuIHR5cGUgKi8KLSAgICBjaGFyICogcFtTRVhQTUFY KzFdLCAqKiBwMjsgICAgICAgICAvKiBMaXN0IGl0ZW1zIChtdXN0IGJlIG9uIHN0YWNrKSAqLwot ICAgIGNoYXIgKiBsaW5lID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIEZvciBidWlsZGluZyBt YWNybyBhcmd1bWVudCBsaXN0ICovCi0gICAgaW50IG5vc3BsaXQgPSAwOwotICAgIGludCBsaW5l bGVuID0gMDsKLSAgICBpbnQgbGluZXBvcyA9IDA7Ci0gICAgaW50IHF1b3RlID0gMDsgICAgICAg ICAgICAgICAgICAgICAgLyogTElTUCBxdW90ZSBmbGFnICovCi0gICAgY2hhciAqIHMyOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VycyAqLwotICAgIGludCBrdywga3dmbGFncywg bXggPSAwLCB4ID0gMDsKLSAgICBpbnQgbm90ID0gMCwgdHJ1bmNhdGUgPSAwLCBidWlsdGluID0g MDsKLSAgICBpbnQgZnBmbGFnID0gMCwgcXVpdCA9IDAsIG1hY3JvID0gMDsKLSAgICBDS19PRkZf VCByZXN1bHQgPSAwLCBpLCBqLCBrLCBuID0gMDsKLSAgICBDS0ZMT0FUIGZwaiwgZnByZXN1bHQg PSAwLjA7ICAgICAgICAvKiBGbG9hdGluZy1wb2ludCByZXN1bHRzICovCi0gICAgaW50IHBmbGFn ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogSGF2ZSBwcmVkaWNhdGUgKi8KLSAgICBpbnQg cHJlc3VsdCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBQcmVkaWNhdGUgcmVzdWx0ICovCi0g ICAgaW50IG11c3RmcmVlID0gMDsgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgbWFsbG9jJ2Qg d2UgbXVzdCBmcmVlICovCi0KLSAgICBzZXhwcHYgPSAtMTsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQcmVkaWNhdGUgdmFsdWUgKi8KLSAgICBzMiA9ICIiOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBEZWZhdWx0IHJldHVybiB2YWx1ZSAqLwotCi0gICAgZGVidWcoRjExMSxzZXhw ZGVidWcoImVudHJ5IDEiKSxzLHNleHByYyk7Ci0KLSAgICBpZiAoKytzZXhwZGVwID4gc2V4cG1h eGRlcCkgeyAgICAgICAvKiBLZWVwIHRyYWNrIG9mIGRlcHRoICovCi0gICAgICAgIHByaW50Zigi P1MtRXhwcmVzc2lvbiBkZXB0aCBsaW1pdCBleGNlZWRlZDogJWRcbiIsc2V4cG1heGRlcCk7Ci0g ICAgICAgIHNleHByYysrOwotICAgICAgICBkZWJ1ZyhGMTExLHNleHBkZWJ1ZygibWF4IGRlcHRo IGV4Y2VlZGVkIikscyxzZXhwcmMpOwotICAgIH0KLSAgICBpZiAoc2V4cGRlcCA+IHNleHBkbWF4 KSAgICAgICAgICAgICAvKiBGb3Igc3RhdHMgKi8KLSAgICAgIHNleHBkbWF4ID0gc2V4cGRlcDsK LQotICAgIGlmIChzZXhwcmMpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yLCBxdWl0 IGFsbCBsZXZlbHMgKi8KLSAgICAgIGdvdG8geGRvc2V4cDsgICAgICAgICAgICAgICAgICAgICAv KiBBbHdheXMgZ290byBjb21tb24gZXhpdCBwb2ludCAqLwotCi0gICAgZGVidWcoRjExMSxzZXhw ZGVidWcoImVudHJ5IDIiKSxzLHNleHByYyk7Ci0KLSAgICBpZiAoIXMpIHMgPSAiIjsgICAgICAg ICAgICAgICAgICAgICAvKiBOdWxsIG9yIGVtcHR5IGFyZyAqLwotCi0gICAgd2hpbGUgKCpzID09 IFNQKSBzKys7ICAgICAgICAgICAgICAgLyogU3RyaXAgbGVhZGluZyBzcGFjZXMgKi8KLSAgICBp ZiAoISpzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzbyBlbXB0eSByZXN1bHQgKi8K LSAgICAgIGdvdG8geGRvc2V4cDsKLS8qCi0gIEFsbG9jYXRlIHJlc3VsdCBzdGFjayB1cG9uIGZp cnN0IHVzZSwgb3IgYWZ0ZXIgaXQgaGFzIGJlZW4gcmVzaXplZCB3aXRoCi0gIFNFVCBTRVhQIERF UFRILUxJTUlULgotKi8KLSAgICBpZiAoIXN4cmVzdWx0KSB7Ci0gICAgICAgIHN4cmVzdWx0ID0g KGNoYXIgKiopbWFsbG9jKHNleHBtYXhkZXAgKiBzaXplb2YoY2hhciAqKSk7Ci0gICAgICAgIGlm ICghc3hyZXN1bHQpIHsKLSAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZh aWx1cmUgLSBcIiVzXCJcbiIsIHMpOwotICAgICAgICAgICAgc2V4cHJjKys7Ci0gICAgICAgICAg ICBnb3RvIHhkb3NleHA7Ci0gICAgICAgIH0KLSAgICAgICAgc3hybGVuID0gKGludCAqKW1hbGxv YyhzZXhwbWF4ZGVwICogc2l6ZW9mKGludCkpOwotICAgICAgICBpZiAoIXN4cmxlbikgewotICAg ICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSAtIFwiJXNcIlxuIiwg cyk7Ci0gICAgICAgICAgICBzZXhwcmMrKzsKLSAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAg ICAgICAgfQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2V4cG1heGRlcDsgaSsrKSB7Ci0gICAg ICAgICAgICBzeHJlc3VsdFtpXSA9IE5VTEw7ICAgICAgICAgLyogUmVzdWx0IHBvaW50ZXJzICov Ci0gICAgICAgICAgICBzeHJsZW5baV0gPSAwOyAgICAgICAgICAgICAgLyogQnVmZmVyIHNpemVz ICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgczIgPSBzOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogczIgaXMgdGhlIHJlc3VsdCBwb2ludGVyICovCi0gICAgayA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIGFjY3VtdWxhdG9yICovCi0gICAgaWYgKHNb MF0gPT0gJygnKSB7ICAgICAgICAgICAgICAgICAgLyogU3RhcnRzIHdpdGggb3BlbiBwYXJlbj8g Ki8KLSAgICAgICAgd2hpbGUgKCpzMisrKSBrKys7ICAgICAgICAgICAgICAvKiBHZXQgbGVuZ3Ro ICovCi0gICAgICAgIGlmIChzW2stMV0gPT0gJyknKSB7ICAgICAgICAgICAgLyogU3RyaXAgb3V0 ZXIgcGFyZW5zIGlmIGFueSAqLwotICAgICAgICAgICAgc1trLTFdID0gTlVMOwotICAgICAgICAg ICAgcysrOwotICAgICAgICAgICAgayAtPSAyOwotICAgICAgICAgICAgd2hpbGUgKCpzID09IFNQ KSB7ICAgICAgICAgIC8qIFN0cmlwIGxlYWRpbmcgc3BhY2VzIGZyb20gcmVzdWx0ICovCi0gICAg ICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgICAgIGstLTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIHdoaWxlIChrID4gMCAmJiBzW2stMV0gPT0gU1ApIHsgLyogQW5kIHRyYWlsaW5n IHNwYWNlcy4gKi8KLSAgICAgICAgICAgICAgICBzW2stMV0gPSBOVUw7Ci0gICAgICAgICAgICAg ICAgay0tOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghKnMpIHsgICAg ICAgICAgICAgICAgICAgICAgLyogSWYgbm90aGluZyByZW1haW5zICovCi0gICAgICAgICAgICBz MiA9ICIiOyAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGVtcHR5IHJlc3VsdC4gKi8KLSAg ICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBCcmVhayBy ZXN1bHQgdXAgaW50byAid29yZHMiIChhbiBTRVhQIGNvdW50cyBhcyBhIHdvcmQpICovCi0KLSAg ICBmb3IgKGkgPSAwOyBpIDwgU0VYUE1BWCsxOyBpKysgKSB7CS8qIENsZWFyIHRoZSBvcGVyYW5k cyAqLwotCXBbaV0gPSBOVUxMOwotICAgIH0KLSAgICBpZiAoISoocysxKSB8fCAhKihzKzIpKSB7 ICAgICAgICAgICAvKiBObyBuZWVkIHRvIGNhbGwgY2tzcGxpdCgpICovCi0gICAgICAgIG4gPSAx OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWYgaXQncyBvbmUgb3IgdHdvIGNoYXJzLiAq LwotICAgICAgICBwWzFdID0gczsgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG5lZWQgdG8g bWFsbG9jIHRoaXMgZWl0aGVyLiAqLwotCW5vc3BsaXQgPSAxOwotICAgICAgICBkZWJ1ZyhGMTAx LHNleHBkZWJ1Zygibm9zcGxpdCIpLCIiLG4pOwotICAgICAgICBpZiAoc1swXSA9PSAnKCcpIHsg ICAgICAgICAgICAgIC8qICgpIGVtcHR5ICovCi0gICAgICAgICAgICBzMiA9ICIiOwotICAgICAg ICAgICAgZ290byB4ZG9zZXhwOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLQlub3NwbGl0ID0g MDsKLSAgICAgICAgcSA9IGNrc3BsaXQoMSxTRVhQTUFYLHMsTlVMTCwiXFwlW10mJCstLz0qXl9A IXt9Lzw+fC4jfidgOjs/Iiw4LDM5LDApOwotICAgICAgICBpZiAoIXEpCi0gICAgICAgICAgZ290 byB4ZG9zZXhwOwotICAgICAgICBuID0gcS0+YV9zaXplOyAgICAgICAgICAgICAgICAgIC8qIE51 bWJlciBvZiBpdGVtcyAqLwotICAgICAgICBkZWJ1ZyhGMTAxLHNleHBkZWJ1Zygic3BsaXQiKSwi IixuKTsKLSAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBTRVhQTUFYKSB7ICAgICAvKiBDaGVjayBm b3IgdG9vIG1hbnkgKi8KLSAgICAgICAgICAgIHByaW50ZigiP1RvbyBtYW55IG9wZXJhbmRzOiBt YXggPSAlZFxuIixTRVhQTUFYKTsKLSAgICAgICAgICAgIHNleHByYysrOwotICAgICAgICAgICAg Z290byB4ZG9zZXhwOwotICAgICAgICB9Ci0gICAgICAgIGlmIChuID09IDApICAgICAgICAgICAg ICAgICAgICAgLyogTm9uZSwgcmVzdWx0IGlzIE5VTEwsIGRvbmUuICovCi0gICAgICAgICAgZ290 byB4ZG9zZXhwOwotICAgICAgICBpZiAobiA9PSAxICYmIHNbMF0gPT0gJygnKSB7ICAgIC8qIE9u ZSBidXQgaXQncyBhbm90aGVyIFNFWFAgKi8KLSAgICAgICAgICAgIHMyID0gZG9zZXhwKHMpOwot ICAgICAgICAgICAgZ290byB4ZG9zZXhwOwotICAgICAgICB9Ci0gICAgICAgIHAyID0gcS0+YV9o ZWFkOyAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0IGFycmF5LiAqLwotICAgICAg ICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgeyAgICAgIC8qIFdlIG11c3QgY29weSBpdCBiZWNh dXNlICovCi0gICAgICAgICAgICBwW2ldID0gTlVMTDsgICAgICAgICAgICAgICAgLyogcmVjdXJz aXZlIGNhbGxzIHRvIGRvc2V4cCgpICovCi0gICAgICAgICAgICBpZiAocDJbaV0pICAgICAgICAg ICAgICAgICAgLyogd3JpdGUgb3ZlciB0aGUgc2FtZSBhcnJheSAqLwotICAgICAgICAgICAgICBt YWtlc3RyKCYocFtpXSkscDJbaV0pOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzWzBdID09ICco JykgeyAgICAgICAgICAgICAgLyogT3BlcmF0b3IgaXMgYW4gUy1FeHByZXNzaW9uICovCi0gICAg ICAgICAgICBzMiA9IGRvc2V4cChwWzFdKTsgICAgICAgICAgLyogUmVwbGFjZSBpdCBieSBpdHMg dmFsdWUgKi8KLSAgICAgICAgICAgIG1ha2VzdHIoJihwWzFdKSxzMik7Ci0gICAgICAgIH0KLSAg ICAgICAgbXVzdGZyZWUrKzsgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0byBmcmVl IGl0ICovCi0gICAgfQotICAgIGRlYnVnKEYxMTAsc2V4cGRlYnVnKCJoZWFkIikscFsxXSwwKTsK LQotICAgIGlmIChuID09IDEgJiYgcFsxXSkgewotICAgICAgICBpZiAoKihwWzFdKSA9PSAnXDA0 NycpIHsgICAgICAgLyogQXBvc3Ryb3BoZSA9IExJU1AgcXVvdGUgY2hhcmFjdGVyICovCi0gICAg ICAgICAgICBzMiA9IHBbMV07Ci0gICAgICAgICAgICBnb3RvIHhkb3NleHA7Ci0gICAgICAgIH0K LSAgICB9Ci0vKgotICBUaGlzIHNlY3Rpb24gc2lkZXN0ZXBzIHhsb29rdXAoKSBvZiB0aGUgbW9z dCBjb21tb24gb3BlcmF0b3JzLgotICBJdCdzIG5vdCBuZWNlc3NhcnkgYnV0IGl0IHNwZWVkcyB1 cCBTRVhQLWhlYXZ5IGxvb3BzIGJ5IGFib3V0IDEwJS4KLSovCi0gICAga3dmbGFncyA9IDA7Ci0g ICAgaWYgKG4gPiAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9vayB1cCB0aGUgb3Bl cmF0b3IgKi8KLSAgICAgICAgczIgPSBwWzFdOyAgICAgICAgICAgICAgICAgICAgICAvKiBQcmVs b29rdXAgb3B0aW1pemF0aW9uLi4uICovCi0gICAgICAgIGlmICghczIpCi0gICAgICAgICAgczIg PSAiIjsKLSAgICAgICAgaWYgKCEqczIpCi0gICAgICAgICAgZ290byB4ZG9zZXhwOwotICAgICAg ICBrdyA9IDA7Ci0gICAgICAgIHggPSAwOwotICAgICAgICBpZiAoaXNkaWdpdCgqczIpKSB7ICAg ICAgICAgICAgIC8qIERpZ2l0ICovCi0gICAgICAgICAgICB4ID0gLTI7Ci0KLSAgICAgICAgfSBl bHNlIGlmIChpc2FscGhhKCpzMikgJiYgISooczIrMSkpIHsgLyogU2luZ2xlIGxldHRlciAqLwot ICAgICAgICAgICAgeCA9IC0xOwotCi0gICAgICAgIH0gZWxzZSBpZiAoKnMyID09ICdzJyB8fCAq czIgPT0gJ1MnKSB7IC8qIFNFVFEgKi8KLSAgICAgICAgICAgIHMyKys7Ci0gICAgICAgICAgICBp ZiAoKnMyID09ICdlJyB8fCAqczIgPT0gJ0UnKSB7Ci0gICAgICAgICAgICAgICAgczIrKzsKLSAg ICAgICAgICAgICAgICBpZiAoKnMyID09ICd0JyB8fCAqczIgPT0gJ1QnKSB7Ci0gICAgICAgICAg ICAgICAgICAgIHMyKys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqczIgPT0gJ3EnIHx8ICpz MiA9PSAnUScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKihzMisxKSkgewotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBTWF9TRVQ7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAga3dmbGFncyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHRp biA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KCF4KSB7Ci0gICAgICAgICAgICBpZiAoISooczIrMSkpIHsgICAgICAgICAgICAgLyogQ29tbW9u IHNpbmdsZS1jaGFyYWN0ZXIgb3BzICovCi0gICAgICAgICAgICAgICAgaWYgKCpzMiA9PSAnKycp IHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IFNYX0FERDsKLSAgICAgICAgICAgICAgICAgICAg a3dmbGFncyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJ1aWx0aW4gPSAxOwotICAgICAgICAg ICAgICAgIH0gZWxzZSBpZiAoKnMyID09ICctJykgewotICAgICAgICAgICAgICAgICAgICB4ID0g U1hfU1VCOwotICAgICAgICAgICAgICAgICAgICBrd2ZsYWdzID0gMDsKLSAgICAgICAgICAgICAg ICAgICAgYnVpbHRpbiA9IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgqczIgPT0gJyon KSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBTWF9NVUw7Ci0gICAgICAgICAgICAgICAgICAg IGt3ZmxhZ3MgPSAwOwotICAgICAgICAgICAgICAgICAgICBidWlsdGluID0gMTsKLSAgICAgICAg ICAgICAgICB9IGVsc2UgaWYgKCpzMiA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9 IFNYX0RJVjsKLSAgICAgICAgICAgICAgICAgICAga3dmbGFncyA9IFNYRl9UV087Ci0gICAgICAg ICAgICAgICAgICAgIGJ1aWx0aW4gPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGlmICgheCkgeyAgICAgICAgICAgICAgICAgICAvKiBOb25lIG9mIHRo ZSBhYm92ZSwgbG9vayBpdCB1cCAqLwotICAgICAgICAgICAgICAgIHggPSB4bG9va3VwKHNleHBv cHMscFsxXSxuc2V4cG9wcywma3cpOwotICAgICAgICAgICAgICAgIGlmICh4ID4gMCkgewotICAg ICAgICAgICAgICAgICAgICBrd2ZsYWdzID0gc2V4cG9wc1trd10uZmxnczsKLSAgICAgICAgICAg ICAgICAgICAgYnVpbHRpbiA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot ICAgICAgICB9Ci0gICAgfQotICAgIC8qIElmIG5vbmUgb2YgdGhlIGFib3ZlLCBjaGVjayBidWls dC1pbiBjb25zdGFudHMgKi8KLQotICAgIGlmICh4ID09IC0xKSB7Ci0gICAgICAgIHggPSB4bG9v a3VwKHNleHBjb25zdHMscFsxXSxuc2V4cGNvbnN0cywma3cpOwotICAgICAgICBpZiAoeCA+IDAp IHsKLSAgICAgICAgICAgIHN3aXRjaCAoeCkgewotICAgICAgICAgICAgICBjYXNlIFNYQ19OSUw6 Ci0gICAgICAgICAgICAgICAgczIgPSAiIjsKLSAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7 Ci0gICAgICAgICAgICAgIGNhc2UgU1hDX1BJOgotICAgICAgICAgICAgICAgIHMyID0gbWF0aF9w aTsKLSAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7Ci0gICAgICAgICAgICAgIGNhc2UgU1hD X1Q6Ci0gICAgICAgICAgICAgICAgczIgPSAiMSI7Ci0gICAgICAgICAgICAgICAgZ290byB4ZG9z ZXhwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChuID09IDEpIHsg ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBhbiBleHByZXNzaW9uICovCi0gICAgICAgIGlm IChidWlsdGluKSB7ICAgICAgICAgICAgICAgICAgLyogQnVpbHQtaW4gb3BlcmFuZD8gKi8KLSAg ICAgICAgICAgIHN3aXRjaCAoeCkgewkJLyogT3BlcmF0b3JzIHdpdGggZGVmYXVsdCB2YWx1ZXMg Ki8KLSAgICAgICAgICAgICAgY2FzZSBTWF9FVkE6Ci0gICAgICAgICAgICAgICAgczIgPSAiIjsK LSAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7Ci0gICAgICAgICAgICAgIGNhc2UgU1hfTVVM OiAgICAgICAgICAgICAgLyogKCopICovCi0gICAgICAgICAgICAgICAgczIgPSBzZXhwdmFsID8g c2V4cHZhbCA6ICIxIjsKLSAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7Ci0gICAgICAgICAg ICAgIGNhc2UgU1hfQU5EOiAgICAgICAgICAgICAgLyogKEFORCkgKi8KLSAgICAgICAgICAgICAg Y2FzZSBTWF9CV0E6ICAgICAgICAgICAgICAvKiBCaXR3aXNlICgmKSAqLwotICAgICAgICAgICAg ICAgIHJlc3VsdCsrOwotICAgICAgICAgICAgICBjYXNlIFNYX0xPUjogICAgICAgICAgICAgIC8q IChPUikgKi8KLSAgICAgICAgICAgICAgY2FzZSBTWF9CV086ICAgICAgICAgICAgICAvKiBCaXR3 aXNlICh8KSAqLwotICAgICAgICAgICAgICBjYXNlIFNYX0FERDogICAgICAgICAgICAgIC8qICgr KSAqLwotICAgICAgICAgICAgICBjYXNlIFNYX1NVQjogICAgICAgICAgICAgIC8qICgtKSAqLwot ICAgICAgICAgICAgICAgIHMyID0gcmVzdWx0ID8gIjEiIDogIjAiOwotICAgICAgICAgICAgICAg IGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9IGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE5vdCBhIGJ1aWx0LWluIG9wZXJhbmQgKi8KLSAgICAgICAgICAg IGNoYXIgKiBwMTsKLSAgICAgICAgICAgIHAxID0gcFsxXTsKLSAgICAgICAgICAgIHdoaWxlICgq cDEgPT0gU1ApIHAxKys7Ci0gICAgICAgICAgICBpZiAoIWlzYWxwaGEoKnAxKSkgewotICAgICAg ICAgICAgICAgIGlmICh4eGZsb2F0KHAxLDApID4gMCkgeyAvKiBJcyBpdCBhIG51bWJlcj8gKi8K LSAgICAgICAgICAgICAgICAgICAgczIgPSBwMTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUg KCpzMiA9PSAnKycpIHMyKys7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgqcDEgPT0gJygn KSB7IC8qIEFuIFMtRXhwcmVzc2lvbj8gKi8KLQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAg ICAgICAgICAgczIgPSBkb3NleHAoczIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgczIg PSBkb3NleHAocDEpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgfSBlbHNlIGlmICh4IDwg MSkgeyAgICAgICAgIC8qIElzIGl0IGEgdmFyaWFibGU/ICovCi0gICAgICAgICAgICAgICAgaiA9 IG14bG9vayhtYWN0YWIscFsxXSxubWFjKTsgLyogTG9vayBpdCB1cCAqLwotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsc2V4cGRlYnVnKCJuPT0xIG14bG9vayIpLHBbMV0saik7Ci0gICAgICAg ICAgICAgICAgczIgPSAoaiA+IC0xKSA/IG1hY3RhYltqXS5tdmFsIDogIiI7Ci0gICAgICAgICAg ICAgICAgaWYgKCFzMikgczIgPSAiIjsKLSAgICAgICAgICAgICAgICBpZiAoeHhmbG9hdChzMiww KSA+IDApICAvKiBNYWNybyB2YWx1ZSBpcyBhIG51bWJlciAqLwotICAgICAgICAgICAgICAgICAg Z290byB4ZG9zZXhwOwotICAgICAgICAgICAgICAgIGlmIChqID4gLTEpIHsgICAgICAgICAgIC8q IEl0J3MgYSBtYWNybyAqLwotICAgICAgICAgICAgICAgICAgICBteCA9IGo7Ci0gICAgICAgICAg ICAgICAgICAgIHggPSBqOyAgICAgICAgICAgICAgLyogd2hvc2UgZGVmaW5pdGlvbiBpcyBub3Qg bnVtZXJpYyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoKnMyID09ICcoJykgeyAgIC8qIElz IGl0IGFuIFMtRXhwcmVzc2lvbj8gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGhh dmUgdG8gYWxsb2NhdGUgbWVtb3J5IG9uIHRoZSBzdGFjayAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgLyogdG8gY2FsbCBvdXJzZWx2ZXMgcmVjdXJzaXZlbHkgb24gaXQgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSB3ZSdsbCB3aXBlIG91dCB0aGUgbWFjcm8gZGVm aW5pdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHMzID0gTlVMTDsKLSAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGludCBrID0gMDsgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgIHMzID0gczI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnMzKyspIGsr KzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHMzID0gKGNoYXIgKiltYWxsb2MoayArIDQpOwot ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RyY3B5KHMzLHMyKTsgICAvKiBTQUZFICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgczIgPSBkb3NleHAoczMpOyAvKiBFdmFsdWF0ZSBpdCAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZyZWUoczMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBm YWlsdXJlIC0gXCIlc1wiXG4iLHMyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXhw cmMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICBpZiAoKnMyID09ICdcMDQ3JykgewotICAgICAgICAgICAgICAgICAgICAgICAgczIrKzsKLSNp ZmRlZiBDT01NRU5UCi0JCQkvKiBEdW1wcyBjb3JlIGlmIHBldHR5IG9wdGltaXphdGlvbiB3YXMg dGFrZW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihwWzFdKSxzMik7Ci0j ZWxzZQotCQkJaWYgKCFub3NwbGl0ICYmIHBbMV0pIGZyZWUocFsxXSk7Ci0JCQlwWzFdID0gKGNo YXIgKiltYWxsb2MoKGludClzdHJsZW4oczIpICsgMSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgczIgPSBwWzFdOwotCQkJaWYgKCFzMikgczIgPSAiIjsK LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqczIgPT0gJygnKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHMyW21ha2VzdHJsZW4tMV0gPT0gJyknKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHMyW21ha2VzdHJsZW4tMV0gPSBOVUw7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHMyKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZGVi dWcoRjExMCxzZXhwZGVidWcoIidBIiksczIsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBn b3RvIHhkb3NleHA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg bWFjcm8rKzsgICAgICAgICAgICAvKiBOb3QgYW4gUy1FeHByZXNzaW9uICovCi0gICAgICAgICAg ICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogTm90IGZvdW5kIGluIG1hY3JvIHRhYmxl ICovCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP05vdCBkZWZpbmVkIC0gXCIlc1wiXG4i LCBwWzFdKTsKLSAgICAgICAgICAgICAgICAgICAgc2V4cHJjKys7Ci0gICAgICAgICAgICAgICAg ICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSAgICB9IGVsc2UgaWYgKHggPCAxICYmICFtYWNybykgeyAgICAgICAvKiBuID4gMSBh bmQgbm90IGEgYnVpbHQtaW4gb3BlcmF0b3IgKi8KLSAgICAgICAgeCA9IG14bG9vayhtYWN0YWIs cFsxXSxubWFjKTsgICAvKiBTZWUgaWYgaXQncyBhIG1hY3JvICovCi0gICAgICAgIGRlYnVnKEYx MTEsc2V4cGRlYnVnKCJuIT0xIG14bG9vayIpLHBbMV0seCk7Ci0gICAgICAgIGlmICh4IDwgMCkg ewotICAgICAgICAgICAgcHJpbnRmKCI/SW52YWxpZCBvcGVyYW5kIC0gXCIlc1wiXG4iLHBbMV0p OwotICAgICAgICAgICAgc2V4cHJjKys7Ci0gICAgICAgICAgICBnb3RvIHhkb3NleHA7Ci0gICAg ICAgIH0KLSAgICAgICAgbXggPSB4OwotICAgICAgICBtYWNybysrOwotICAgIH0KLSAgICBpZiAo YnVpbHRpbikgeyAgICAgICAgICAgICAgICAgICAgICAvKiBCdWlsdC1pbiBvcGVyYXRvci4uLiAq LwotICAgICAgICBpZiAoa3dmbGFncykgewotICAgICAgICAgICAgaW50IGZsZ3M7Ci0gICAgICAg ICAgICBpZiAoKGZsZ3MgPSAoa3dmbGFncyAmIChTWEZfT05FfFNYRl9UV08pKSkpIHsKLSAgICAg ICAgICAgICAgICBzd2l0Y2ggKGZsZ3MpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgKFNYRl9P TkV8U1hGX1RXTyk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuIDwgMikgewotICAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCI/VG9vIGZldyBvcGVyYW5kcyAtIFwiJXNcIlxuIixzKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIHNleHByYysrOwotICAgICAgICAgICAgICAgICAgICAg ICAgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBTWEZfVFdPOgotICAgICAgICAgICAg ICAgICAgICBpZiAobiA8IDMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1Rv byBmZXcgb3BlcmFuZHMgLSBcIiVzXCJcbiIscyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBz ZXhwcmMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgIGNhc2UgU1hGX09ORToKLQkJICAgIGlmIChuICE9IDIpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiP1RvbyAlcyBvcGVyYW5kcyAtIFwiJXNcIlxuIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobiA+IDIpID8gIm1hbnkiIDogImZldyIsIHMpOwotICAgICAg ICAgICAgICAgICAgICAgICAgc2V4cHJjKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IHhkb3NleHA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoa3dmbGFncyAmIFNYRl9QUkUpIHsgICAgLyogUHJl ZGljYXRlPyAqLwotCQlpZiAobiA8IDIpIHsKLQkJICAgIHByaW50ZigiP1RvbyBmZXcgb3BlcmFu ZHMgLSBcIiVzXCJcbiIscyk7Ci0JCSAgICBzZXhwcmMrKzsKLQkJICAgIGdvdG8geGRvc2V4cDsK LQkJfQotICAgICAgICAgICAgICAgIHBmbGFnID0gMTsKLSAgICAgICAgICAgICAgICBwcmVzdWx0 ID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChrd2ZsYWdzICYgU1hGX0ZMTykg ICAgICAvKiBPcGVyYXRvciByZXF1aXJlcyBmbG9hdGluZyBwb2ludCAqLwotICAgICAgICAgICAg ICBmcGZsYWcrKzsgICAgICAgICAgICAgICAgIC8qIEZvcmNlIGl0ICovCi0KLQkgICAgaWYgKHgg PT0gU1hfUk9VKSB7CQkvKiBST1VORCBjYW4gaGF2ZSAxIG9yIDIgYXJndW1lbnRzICovCi0JCWlm IChuIDwgMiB8fCBuID4gMykgewotCQkgICAgcHJpbnRmKCI/VG9vICVzIG9wZXJhbmRzIC0gXCIl c1wiXG4iLAotCQkJICAgKG4gPiAzKSA/ICJtYW55IiA6ICJmZXciLCBzKTsKLQkJICAgIHNleHBy YysrOwotCQkgICAgZ290byB4ZG9zZXhwOwotCQl9Ci0JICAgIH0KLQkgICAgaWYgKHggPT0gU1hf Uk9VKSB7Ci0JCS8qIEJ1dCB0aGV5IGFyZSBub3QgImN1bXVsYXRpdmUiIGxpa2Ugb3RoZXIgU0VY UCBhcmdzICovCi0JCS8qIFNvIHRoaXMgY2FzZSBpcyBoYW5kbGVkIHNwZWNpYWxseSAqLwotCQlj aGFyIGJ1ZjFbMzJdLCBidWYyWzMyXTsKLQkJZmxvYXQgcjsKLQkJY2hhciAqIHMwLCAqIHMxOwot CQljaGFyICogcTAsICogcTE7Ci0KLQkJczAgPSBwWzJdOwotCQlpZiAoIXMwKSBzMCA9ICIiOwot CQlpZiAoISpzMCkgczAgPSAiMCI7Ci0JCXEwID0gZG9zZXhwKHMwKTsKLQkJY2tzdHJuY3B5KGJ1 ZjEscTAsMzIpOwotCQlxMCA9IGJ1ZjE7Ci0KLQkJczEgPSBwWzNdOwotCQlpZiAoIXMxKSBzMSA9 ICIiOwotCQlpZiAoISpzMSkgczEgPSAiMCI7Ci0JCXExID0gZG9zZXhwKHMxKTsKLQkJaWYgKCFx MSkgcTEgPSAiIjsKLQkJaWYgKCEqcTEpIHExID0gIjAiOwotCQlja3N0cm5jcHkoYnVmMixxMSwz Mik7Ci0JCXExID0gYnVmMjsKLQotCQlyID0gY2tyb3VuZChhdG9mKHEwKSwoaW50KShhdG9mKHEx KSksc3hyb3VuZGJ1ZiwzMSk7Ci0JCXMyID0gc3hyb3VuZGJ1ZjsKLQkJc2V4cHJjID0gMDsKLQkJ Z290byB4ZG9zZXhwOwotCSAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHggPT0gU1hfU0VU IHx8IHggPT0gU1hfTEVUIHx8IC8qIEFzc2lnbm1lbnQgaXMgc3BlY2lhbCAqLwotICAgICAgICAg ICAgeCA9PSBTWF9JTkMgfHwgeCA9PSBTWF9ERUMpIHsKLSAgICAgICAgICAgIGludCByYzsKLSAg ICAgICAgICAgIGNoYXIgYywgKiBtLCAqIHMzOwotICAgICAgICAgICAgaWYgKG4gPT0gMSkgewot ICAgICAgICAgICAgICAgIHMyID0gIiI7Ci0gICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgczIgPSBOVUxMOwotICAgICAgICAgICAgZm9yIChp ID0gMTsgaSA8IG47IGkgKz0gMikgeyAvKiBMb29wIHRocnUgb3BlcmFuZCBwYWlycyAqLwotICAg ICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgICAgICBzMyA9IHBbaSsxXTsKLSAgICAg ICAgICAgICAgICBjID0gKnMzOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsc2V4cGRlYnVn KCJ0YXJnZXQgcCIpLHMzLDApOwotCi0gICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIHRhcmdl dCBkb2Vzbid0IGhhdmUgbXVsdGlwbGUgd29yZHMgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAo KnMzKSB7IGlmICgqczMgPCAnIScpIHsgcmMgPSAxOyBicmVhazsgfTsgczMrKzsgfQotICAgICAg ICAgICAgICAgIHMzID0gcFtpKzFdOwotICAgICAgICAgICAgICAgIGlmIChyYykgeyAgICAgICAg ICAgICAgIC8qIElmIGl0IGRvZXMgaXQgbXVzdCBoYXZlIGJlZW4gKi8KLSAgICAgICAgICAgICAg ICAgICAgY2hhciAqIHM0OyAgICAgICAgICAvKiBhbiBTRVhQIHNvIGV2YWx1YXRlIGl0ICovCi0g ICAgICAgICAgICAgICAgICAgIHMzID0gZG9zZXhwKHMzKTsKLSAgICAgICAgICAgICAgICAgICAg czQgPSBzMzsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgICAgICAg ICB3aGlsZSAoKnM0KSB7IGlmICgqczQgPCAnIScpIHsgcmMgPSAxOyBicmVhazsgfTsgczQrKzsg fQotICAgICAgICAgICAgICAgICAgICBpZiAocmMgPT0gMCkgbWFrZXN0cigmKHBbaSsxXSksczMp OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8qIEFuZCB0aGF0IGl0J3Mg bm90IGEgbnVtYmVyLCBldGMuICovCi0gICAgICAgICAgICAgICAgaWYgKHJjID4gMCB8fCBpc2Rp Z2l0KGMpIHx8IGMgPT0gJygnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0ludmFs aWQgYXNzaWdubWVudCAtIFwiJXNcIlxuIixzKTsKLSAgICAgICAgICAgICAgICAgICAgc2V4cHJj Kys7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKGlzYWxwaGEoYykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSB4bG9va3Vw KHNleHBjb25zdHMsczMsbnNleHBjb25zdHMsTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm IChyYyA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0Fzc2lnbm1lbnQg dG8gY29uc3RhbnQgLSBcIiVzXCJcbiIscyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXhw cmMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8qIElmICsr IG9yIC0tLCBnZXQgY3VycmVudCB2YWx1ZSBvZiB2YXJpYWJsZSAqLwotICAgICAgICAgICAgICAg IGlmICh4ID09IFNYX0lOQyB8fCB4ID09IFNYX0RFQykgewotICAgICAgICAgICAgICAgICAgICBp bnQgb2sgPSAxOwotICAgICAgICAgICAgICAgICAgICBjaGFyIGJ1ZlszMl07Ci0gICAgICAgICAg ICAgICAgICAgIGlmIChjID09IENNRFEpIHsgICAgLyogQSBiYWNrc2xhc2ggdmFyaWFibGUgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIGludCBuID0gMzI7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICogcyA9IGJ1ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZlswXSA9IE5V TDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6enN0cmluZyhzMywmcywmbikgPCAwIHx8 ICFidWZbMF0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gMDsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHMyID0gYnVmOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAg ICAgICAgIC8qIEEgbWFjcm8gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoayA9IG14 bG9vayhtYWN0YWIsczMsbm1hYykpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb2sg PSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg ICAgICBzMiA9IG1hY3RhYltrXS5tdmFsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi P05vdCBkZWZpbmVkIC0gXCIlc1wiXG4iLHBbaSsxXSk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBzZXhwcmMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIXMyKSBzMiA9ICIiOwot ICAgICAgICAgICAgICAgICAgICBrID0geHhmbG9hdChzMiwwKTsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKGsgPCAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9Ob3QgbnVt ZXJpYyAtIFwiJXNcIlxuIixwW2krMV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V4cHJj Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpzMiA9PSAnKycpIHMyKys7Ci0g ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNrYXRvZnMoczIpOwotICAgICAgICAgICAgICAg ICAgICBmcHJlc3VsdCA9IGZsb2F0dmFsOwotICAgICAgICAgICAgICAgICAgICBpZiAoayA+IDEg fHwgZnByZXN1bHQgIT0gcmVzdWx0KQotICAgICAgICAgICAgICAgICAgICAgIGZwZmxhZysrOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobiA8IGkrMikgeyAgICAgICAg ICAvKiBWYXJpYWJsZSB3aXRoIG5vIHZhbHVlICovCi0gICAgICAgICAgICAgICAgICAgIHMyID0g IiI7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4ID09IFNYX1NFVCB8fCB4ID09IFNYX0xFVCkg ewotICAgICAgICAgICAgICAgICAgICAgICAgZGVsbWFjKHBbaSsxXSwxKTsgLyogRGVsZXRlIHRo ZSB2YXJpYWJsZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzMiA9ICIxIjsKLSAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgIC8qIFZhcmlhYmxlIHdpdGggdmFsdWUgKi8KLSAgICAgICAgICAgICAgICAgICAgayA9IHh4 ZmxvYXQocFtpKzJdLDApOyAvKiBJcyBpdCBhIG51bWJlcj8gKi8KLSAgICAgICAgICAgICAgICAg ICAgaWYgKGsgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzMiA9IHBbaSsyXTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqczIgPT0gJysnKSBzMisrOwotICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgczIgPSBkb3NleHAo cFtpKzJdKTsgLyogSGF2ZSB2YWx1ZSwgZXZhbHVhdGUgaXQgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChzZXhwcmMpIGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAgICAgICAgICAgICAg IGlmICghczIpIHMyID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISpzMiAmJiAo eCA9PSBTWF9JTkMgfHwgeCA9PSBTWF9ERUMpKQotICAgICAgICAgICAgICAgICAgICAgICAgICBj b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBpZiAoeCA9PSBTWF9JTkMgfHwgeCA9PSBTWF9ERUMpIHsKLSAgICAgICAgICAg ICAgICAgICAgayA9IHh4ZmxvYXQoczIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrIDwg MSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm90IG51bWVyaWMgLSBcIiVz XCJcbiIsczIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V4cHJjKys7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgd2hpbGUgKCpzMiA9PSAnKycpIHMyKys7Ci0gICAgICAgICAgICAgICAg ICAgIGogPSBja2F0b2ZzKHMyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGsgPiAxKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBmcGogPSBmbG9hdHZhbDsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGZwZmxhZysrOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgICAgICAgICAgZnBqID0gKENLRkxPQVQpajsKLSAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBTWF9JTkMpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHJlc3VsdCArPSBqOwotICAgICAgICAgICAgICAgICAgICAgICAgZnByZXN1bHQgKz0g ZnBqOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHggPT0gU1hfREVDKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICByZXN1bHQgLT0gajsKLSAgICAgICAgICAgICAgICAgICAgICAg IGZwcmVzdWx0IC09IGZwajsKLSAgICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIEZORkxPQVQK LSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBmcHJlc3VsdCkgZnBmbGFnKys7Ci0j ZW5kaWYJLyogRk5GTE9BVCAqLwotICAgICAgICAgICAgICAgICAgICBzMiA9IChmcGZsYWcgJiYg IXNleHB0cnVuYykgPwotCQkJZnBmb3JtYXQoZnByZXN1bHQsMCwwKSA6IGNrZnN0b2EocmVzdWx0 KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gU1hfTEVUICYm IGNtZGx2bCA+IDApIC8qIExFVCBtYWtlcyB2YXIgbG9jYWwgKi8KLSAgICAgICAgICAgICAgICAg IGFkZGxvY2FsKHBbaSsxXSk7Ci0gICAgICAgICAgICAgICAgaWYgKChyYyA9IGFkZG1hYyhwW2kr MV0sczIpKSA8IDApIHsgLyogQWRkIHRoZSB2YWx1ZSAqLwotICAgICAgICAgICAgICAgICAgICBz d2l0Y2ggKHJjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzogbSA9ICJBcnJheSBu b3QgZGVjbGFyZWQiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0yOiBtID0g IlN1YnNjcmlwdCBvdXQgb2YgcmFuZ2UiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBj YXNlIC00OiBtID0gIk91dCBvZiBtZW1vcnkiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg ICBkZWZhdWx0OiBtID0gIkVycm9yIGNyZWF0aW5nIHZhcmlhYmxlIjsKLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj8lcyAtIFwiJXNcIlxuIixtLHMp OwotICAgICAgICAgICAgICAgICAgICBzZXhwcmMrKzsKLSAgICAgICAgICAgICAgICAgICAgZ290 byB4ZG9zZXhwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoczIpIHJl c3VsdCA9IGNrYXRvZnMoczIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZ290byB4ZG9z ZXhwOwotICAgICAgICB9IGVsc2UgaWYgKHggPT0gU1hfSUZDKSB7ICAgICAgICAgICAgICAgLyog Q29uZGl0aW9uYWwgZXhwcmVzc2lvbiAqLwotICAgICAgICAgICAgaW50IHRydWUgPSAwOwotICAg ICAgICAgICAgaWYgKG4gPiA0KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VG9vIG1hbnkg b3BlcmFuZHM6IElGIC0gXCIlc1wiXG4iLHMpOwotICAgICAgICAgICAgICAgIHNleHByYysrOwot ICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IHMyID0gZG9zZXhwKHBbMl0pOwotICAgICAgICAgICAgaWYgKHNleHByYykgZ290byB4ZG9zZXhw OwotICAgICAgICAgICAgaWYgKHMyKSB7Ci0gICAgICAgICAgICAgICAgaiA9IGNrYXRvZnMoczIp OwotICAgICAgICAgICAgICAgIGlmICh4eGZsb2F0KHMyLDApID09IDIpIHsKLSAgICAgICAgICAg ICAgICAgICAgZnBmbGFnKys7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxP QVQpcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBmcGogPSBmbG9hdHZhbDsKLSAgICAgICAg ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmcGogPSBhdG9mKHMyKTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdHJ1ZSA9ICgoZnBqICE9IDAuMCkgPyAx IDogMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXRydWUgJiYgbiA8IDQpIHsK LSAgICAgICAgICAgICAgICBzMiA9IE5VTEw7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgIHMyID0gZG9zZXhwKHRydWUgPyBwWzNdIDogcFs0XSk7Ci0gICAgICAgICAgICAg ICAgaWYgKHNleHByYykgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgICAgIGogPSBzMiA/IGNr YXRvZnMoczIpIDogMDsKLSAgICAgICAgICAgICAgICBpZiAoeHhmbG9hdChzMiwwKSA9PSAyKSB7 Ci0gICAgICAgICAgICAgICAgICAgIGZwZmxhZysrOwotICAgICAgICAgICAgICAgICAgICBmcHJl c3VsdCA9IChDS0ZMT0FUKXJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgZnBqID0gZmxvYXR2 YWw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZnBqID0g czIgPyBhdG9mKHMyKSA6IDAuMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ZnByZXN1bHQgPSBmcGo7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gajsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAgfSBlbHNlIGlmICh4ID09IFNY X1FVTykgewotI2lmbmRlZiBDT01NRU5UCi0gICAgICAgICAgICBpbnQgeHg7Ci0gICAgICAgICAg ICB4eCA9IHN0cmxlbihwWzJdKTsKLSAgICAgICAgICAgIHBbM10gPSAoY2hhciAqKW1hbGxvYyh4 eCs0KTsKLSAgICAgICAgICAgIHMyID0gcFszXTsKLSAgICAgICAgICAgIGNrbWFrbXNnKHBbM10s eHgrNCwiJygiLHBbMl0sIikiLE5VTEwpOwotICAgICAgICAgICAgbisrOwotI2Vsc2UKLSAgICAg ICAgICAgIHMyID0gcFsyXTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICBnb3Rv IHhkb3NleHA7Ci0gICAgICAgIH0gZWxzZSBpZiAoeCA9PSBTWF9TVFIpIHsKLSAgICAgICAgICAg IGludCB4eDsKLSAgICAgICAgICAgIHMyID0gZG9zZXhwKHBbMl0pOwotICAgICAgICAgICAgaWYg KHNleHByYykgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgeHggPSBzdHJsZW4oczIpOwotICAg ICAgICAgICAgcFszXSA9IChjaGFyICopbWFsbG9jKHh4KzQpOwotICAgICAgICAgICAgY2ttYWtt c2cocFszXSx4eCs0LCInKCIsczIsIikiLE5VTEwpOwotICAgICAgICAgICAgczIgPSBwWzNdOwot ICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgZ290byB4ZG9zZXhwOwotICAgICAgICB9Ci0g ICAgfQotICAgIC8qIEFyaXRobWV0aWMgb3BlcmF0b3Igb3IgbWFjcm8gLSBMb29wIHRocnUgb3Bl cmFuZHMgKi8KLQotICAgIHF1aXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNo b3J0LWNpcmN1aXQgZmxhZy4gKi8KLSAgICBpZiAobWFjcm8gJiYgbiA+IDEpIHsgICAgICAgICAg ICAgICAvKiBJZiBvcGVyYXRvciBpcyBhIG1hY3JvICovCi0gICAgICAgIGlmICghbGluZSkgeyAg ICAgICAgICAgICAgICAgICAgLyogYWxsb2NhdGUgbG9jYWwgYnVmZmVyIGZvciAqLwotICAgICAg ICAgICAgbGluZSA9IChjaGFyICopbWFsbG9jKFNYTUxFTik7IC8qIHRoZSBldmFsdWF0ZWQgYXJn dW1lbnQgbGlzdC4gKi8KLSAgICAgICAgICAgIGlmICghbGluZSkgewotICAgICAgICAgICAgICAg IHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgLSBcIiVzXCJcbiIscFsxXSk7Ci0g ICAgICAgICAgICAgICAgc2V4cHJjKys7Ci0gICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgbGluZWxlbiA9IFNYTUxFTjsKLSAgICAgICAgICAg IC8qIGRlYnVnKEYxMDEsImRvc2V4cCBtYWNybyBhcmcgYnVmZmVyIiwiIixsaW5lbGVuKTsgKi8K LSAgICAgICAgfQotICAgICAgICBsaW5lcG9zID0gMDsKLSAgICAgICAgbGluZVtsaW5lcG9zXSA9 IE5VTDsKLSAgICB9Ci0gICAgZm9yIChpID0gMTsgKChpIDwgbikgJiYgIXNleHByYyAmJiAhcXVp dCk7IGkrKykgeyAvKiBMb29wIHRocnUgb3BlcmFuZHMgKi8KLSAgICAgICAgcXVvdGUgPSAwOwot ICAgICAgICBzMiA9IHBbaSsxXTsgICAgICAgICAgICAgICAgICAgIC8qIEdldCBvcGVyYW5kICov Ci0gICAgICAgIGlmICghczIpIHMyID0gIiI7Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIGlm ICgqczIgPT0gJ1wwNDcnKSB7ICAgICAgICAgICAgLyogSXMgaXQgcXVvdGVkPyAqLwotICAgICAg ICAgICAgZGVidWcoRjExMCxzZXhwZGVidWcoIidCIiksczIsMCk7Ci0gICAgICAgICAgICBzMisr OyAgICAgICAgICAgICAgICAgICAgICAgLyogU3BhY2UgcGFzdCB0aGUgcXVvdGUgKi8KLSAgICAg ICAgICAgIHF1b3RlKys7Ci0gICAgICAgICAgICBpZiAoKnMyID09ICcoJykgeyAgICAgICAgICAg LyogUXVvdGVkIFMtRXhwcmVzc2lvbj8gKi8KLSAgICAgICAgICAgICAgICBjaGFyIGM0LCAqIHM0 ID0gczIrMTsgICAvKiBTdHJpcCBvdXRlciBwYXJlbnMgKi8KLSAgICAgICAgICAgICAgICB3aGls ZSAoKGM0ID0gKnM0KyspKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjNCA9PSAnKScgJiYg ISpzNCkgewotICAgICAgICAgICAgICAgICAgICAgICAgczIrKzsKLSAgICAgICAgICAgICAgICAg ICAgICAgICooczQtMSkgPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGRlYnVnKEYxMTAsc2V4cGRlYnVnKCInQyIpLHMyLDApOwotCi0gICAgICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IHF1b3RlZCAqLwotICAgICAgICAg ICAgczIgPSBkb3NleHAocFtpKzFdKTsgICAgICAgIC8qIGV2YWx1YXRlIGl0ICovCi0gICAgICAg ICAgICBpZiAoc2V4cHJjKSBnb3RvIHhkb3NleHA7Ci0gICAgICAgICAgICBpZiAoIXMyKSBzMiA9 ICIiOwotICAgICAgICAgICAgaWYgKCFtYWNybyAmJiB4ID09IFNYX0VWQSkKLSAgICAgICAgICAg ICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlmICgqczIgIT0gJ1wwNDcn KSB7ICAgICAgICAgICAgLyogSXMgaXQgcXVvdGVkPyAqLwotICAgICAgICAgICAgczIgPSBkb3Nl eHAocFtpKzFdKTsgICAgICAgIC8qIE5vLCBldmFsdWF0ZSBpdCAqLwotICAgICAgICAgICAgaWYg KHNleHByYykgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgaWYgKCFzMikgczIgPSAiIjsKLSAg ICAgICAgICAgIGlmICghbWFjcm8gJiYgeCA9PSBTWF9FVkEpCi0gICAgICAgICAgICAgIGNvbnRp bnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICgqczIgPT0gJ1wwNDcnKSB7ICAgICAgICAgICAg LyogSXMgcmVzdWx0IHF1b3RlZD8gKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsc2V4cGRlYnVn KCInQiIpLHMyLDApOwotICAgICAgICAgICAgczIrKzsgICAgICAgICAgICAgICAgICAgICAgIC8q IFNwYWNlIHBhc3QgdGhlIHF1b3RlICovCi0gICAgICAgICAgICBxdW90ZSsrOwotICAgICAgICAg ICAgaWYgKCpzMiA9PSAnKCcpIHsgICAgICAgICAgIC8qIFF1b3RlZCBTLUV4cHJlc3Npb24/ICov Ci0gICAgICAgICAgICAgICAgY2hhciBjNCwgKiBzNCA9IHMyKzE7ICAgLyogU3RyaXAgb3V0ZXIg cGFyZW5zICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKChjNCA9ICpzNCsrKSkgewotICAgICAg ICAgICAgICAgICAgICBpZiAoYzQgPT0gJyknICYmICEqczQpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHMyKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqKHM0LTEpID0gTlVMOwotICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLHNleHBk ZWJ1ZygiJ0MiKSxzMiwwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAg ICAgaWYgKG1hY3JvKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLHNleHBkZWJ1ZygibWFjcm8g YXJnIiksczIsaSk7Ci0gICAgICAgICAgICBpZiAoISpzMikgcXVvdGUrKzsKLSAgICAgICAgICAg IGlmICghcXVvdGUpIHsKLSAgICAgICAgICAgICAgICByZWdpc3RlciBjaGFyIGM0LCAqIHM0ID0g czI7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChjNCA9ICpzNCsrKSkgaWYgKGM0ID09IFNQKSB7 IHF1b3RlKys7IGJyZWFrOyB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocXVvdGUp IGxpbmVbbGluZXBvcysrXSA9ICd7JzsKLSAgICAgICAgICAgIHdoaWxlICgobGluZVtsaW5lcG9z KytdID0gKnMyKyspKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmVwb3MgPiBsaW5lbGVuIC0g MykgewotICAgICAgICAgICAgICAgICAgICBjaGFyICogdG1wID0gTlVMTDsKLSAgICAgICAgICAg ICAgICAgICAgbGluZVtsaW5lcG9zXSA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgbGluZWxl biArPSBTWE1MRU47Ci0gICAgICAgICAgICAgICAgICAgIHRtcCA9IChjaGFyICopIG1hbGxvYyhs aW5lbGVuKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF0bXApIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiP01lbW9yeSByZS1hbGxvY2F0aW9uIGZhaWx1cmUgLSBcIiVzLi4u XCJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBzZXhwcmMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRv c2V4cDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzdHJjcHko dG1wLGxpbmUpOwotICAgICAgICAgICAgICAgICAgICBmcmVlKGxpbmUpOwotICAgICAgICAgICAg ICAgICAgICBsaW5lID0gdG1wOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGxpbmVwb3MtLTsgICAgICAgICAgICAgICAgICAvKiBCYWNrIHVwIG92ZXIgTlVM ICovCi0gICAgICAgICAgICBpZiAocXVvdGUpCi0gICAgICAgICAgICAgIGxpbmVbbGluZXBvcysr XSA9ICd9JzsgICAgLyogRW5kIHF1b3RlIGdyb3VwICovCi0gICAgICAgICAgICBsaW5lW2xpbmVw b3MrK10gPSBTUDsgICAgICAgLyogYWRkIGEgc3BhY2UgKi8KLSAgICAgICAgICAgIGxpbmVbbGlu ZXBvc10gPSBOVUw7ICAgICAgICAvKiBhbmQgYSBOVUwgKi8KLSAgICAgICAgICAgIGNvbnRpbnVl OwotICAgICAgICB9Ci0gICAgICAgIGlmICghcXVvdGUpIHsgICAgICAgICAgICAgICAgICAgLyog QnVpbHQtaW4gb3BlcmF0b3IuLi4gKi8KLSAgICAgICAgICAgIHMyID0gZG9zZXhwKHMyKTsKLSAg ICAgICAgICAgIGlmIChzZXhwcmMpIGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAgIGlmICghczIp IHMyID0gIiI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHggPT0gU1hfRVZBKQotICAgICAgICAg IGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghKnMyKSB7Ci0gICAgICAgICAgICAvKiBBbiBlbXB0 eSB2YWx1ZSBpcyBub3QgYSBsZWdhbCBudW1iZXIgKi8KLSAgICAgICAgICAgIC8qIGJ1dCBpdCBp cyBhIGxlZ2FsIHRydXRoIHZhbHVlICovCi0gICAgICAgICAgICBpZiAoeCAhPSBTWF9BTkQgJiYg eCAhPSBTWF9MT1IgJiYgeCAhPSBTWF9OT1QpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9O b3QgTnVtZXJpYyAtIFwiJXNcIlxuIixwW2krMV0pOwotICAgICAgICAgICAgICAgIHNleHByYysr OwotICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGogPSAwOwotICAgICAgICAgICAgZnBqID0gMC4wOwotICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgaiA9IGNrYXRvZnMoczIpOwotICAgICAgICAgICAgLyogU3dpdGNoIHRvIGZsb2F0 aW5nLXBvaW50IHVwb24gZW5jb3VudGVyaW5nIGFueSBmLnAuIGFyZyAqLwotICAgICAgICAgICAg LyogT1IuLi4gaWYgaW50ZWdlciBpcyB0b28gYmlnICovCi0gICAgICAgICAgICBpZiAoIWZwZmxh ZykgaWYgKHh4ZmxvYXQoczIsMCkgPT0gMikKLSAgICAgICAgICAgICAgZnBmbGFnKys7Ci0gICAg ICAgICAgICBmcGogPSBhdG9mKHMyKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaSA9PSAxKSB7 ICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgcmVzdWx0IGlzIGZpcnN0IG9wZXJhbmQgKi8K LSAgICAgICAgICAgIHJlc3VsdCA9IChuID09IDIgJiYgeCA9PSBTWF9TVUIpID8gMC1qIDogajsK LSAgICAgICAgICAgIGZwcmVzdWx0ID0gKG4gPT0gMiAmJiB4ID09IFNYX1NVQikgPyAtZnBqIDog ZnBqOwotCSAgICBpZiAoKHggPT0gU1hfQU5EICYmIHJlc3VsdCA9PSAwKSB8fAkvKiBTaG9ydCBj aXJjdWl0ICovCi0JCSh4ID09IFNYX0xPUiAmJiByZXN1bHQgIT0gMCkpCi0JICAgICAgcXVpdCsr OwotICAgICAgICAgICAgaWYgKCEoa3dmbGFncyAmIFNYRl9PTkUpKQkvKiBDb21tYW5kIHcvc2lu Z2xlIGFyZyAqLwotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBp ZiAoeCA9PSBTWF9NT0QgfHwgeCA9PSBTWF9ESVYpIHsKLSAgICAgICAgICAgIGlmICghcmVzdWx0 KQotICAgICAgICAgICAgICBmcGZsYWcrKzsKLSAgICAgICAgICAgIGlmICghZnBqKSB7Ci0gICAg ICAgICAgICAgICAgcHJpbnRmKCI/RGl2aWRlIGJ5IHplcm8gLSBcIiVzXCJcbiIsY21kYnVmKTsK LSAgICAgICAgICAgICAgICBzZXhwcmMrKzsKLSAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoICh4KSB7CQkJLyogQWNj dW11bGF0ZSByZXN1bHQgKi8KLQotICAgICAgICAgIGNhc2UgU1hfRVZBOiAgICAgICAgICAgICAg ICAgIC8qIEVWQUwgKi8KLSAgICAgICAgICAgIHJlc3VsdCA9IGo7Ci0gICAgICAgICAgICBmcHJl c3VsdCA9IGZwajsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTWF9BREQ6 ICAgICAgICAgICAgICAgICAgLyogKyAqLwotICAgICAgICAgICAgcmVzdWx0ICs9IGo7Ci0gICAg ICAgICAgICBmcHJlc3VsdCArPSBmcGo7Ci0jaWZkZWYgRk5GTE9BVAotICAgICAgICAgICAgaWYg KHJlc3VsdCAhPSBmcHJlc3VsdCkKLSAgICAgICAgICAgICAgZnBmbGFnKys7Ci0jZW5kaWYJLyog Rk5GTE9BVCAqLwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNYX1NVQjog ICAgICAgICAgICAgICAgICAvKiAtICovCi0gICAgICAgICAgICByZXN1bHQgLT0gajsKLSAgICAg ICAgICAgIGZwcmVzdWx0IC09IGZwajsKLSNpZmRlZiBGTkZMT0FUCi0gICAgICAgICAgICBpZiAo cmVzdWx0ICE9IGZwcmVzdWx0KQotICAgICAgICAgICAgICBmcGZsYWcrKzsKLSNlbmRpZgkvKiBG TkZMT0FUICovCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU1hfTVVMOiAg ICAgICAgICAgICAgICAgIC8qICogKi8KLSAgICAgICAgICAgIHJlc3VsdCAqPSBqOwotICAgICAg ICAgICAgZnByZXN1bHQgKj0gZnBqOwotI2lmZGVmIEZORkxPQVQKLSAgICAgICAgICAgIGlmIChy ZXN1bHQgIT0gZnByZXN1bHQpCi0gICAgICAgICAgICAgIGZwZmxhZysrOwotI2VuZGlmCS8qIEZO RkxPQVQgKi8KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTWF9BTkQ6ICAg ICAgICAgICAgICAgICAgLyogQU5EICovCi0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYg ajsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KSBxdWl0Kys7Ci0gICAgICAgICAgICBmcHJlc3Vs dCA9IGZwcmVzdWx0ICYmIGZwajsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2Fz ZSBTWF9MT1I6ICAgICAgICAgICAgICAgICAgLyogT1IgKi8KLSAgICAgICAgICAgIHJlc3VsdCA9 IHJlc3VsdCB8fCBqOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHF1aXQrKzsKLSAgICAgICAg ICAgIGZwcmVzdWx0ID0gZnByZXN1bHQgfHwgZnBqOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg ICAgICAgICBjYXNlIFNYX01PRDogICAgICAgICAgICAgICAgICAvKiBNb2R1bHVzICovCi0gICAg ICAgICAgICByZXN1bHQgPSByZXN1bHQgJSBqOwotI2lmZGVmIEZORkxPQVQKLSAgICAgICAgICAg IGZwcmVzdWx0ID0gKENLRkxPQVQpZm1vZChmcHJlc3VsdCxmcGopOwotICAgICAgICAgICAgaWYg KHJlc3VsdCAhPSBmcHJlc3VsdCkKLSAgICAgICAgICAgICAgZnBmbGFnKys7Ci0jZWxzZQotICAg ICAgICAgICAgZnByZXN1bHQgPSByZXN1bHQ7Ci0jZW5kaWYgLyogRk5GTE9BVCAqLwotICAgICAg ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNYX0RJVjogICAgICAgICAgICAgICAgICAv KiAvICovCi0JICAgIGlmIChqKSB7Ci0JCXJlc3VsdCAvPSBqOwotCQlmcHJlc3VsdCAvPSBmcGo7 Ci0jaWZkZWYgRk5GTE9BVAotCQlpZiAocmVzdWx0ICE9IGZwcmVzdWx0KQotCQkgIGZwZmxhZysr OwotI2VuZGlmCS8qIEZORkxPQVQgKi8KLQkgICAgfSBlbHNlIHsKLQkJZnByZXN1bHQgLz0gZnBq OwotCQlyZXN1bHQgPSBmcGo7Ci0jaWZkZWYgRk5GTE9BVAotCQkgIGZwZmxhZysrOwotI2VuZGlm CS8qIEZORkxPQVQgKi8KLQkgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBj YXNlIFNYX0FFUTogICAgICAgICAgICAgICAgICAvKiBUZXN0IGZvciBlcXVhbGl0eSAqLwotICAg ICAgICAgICAgaWYgKGZwZmxhZykgewotICAgICAgICAgICAgICAgIGlmIChmcHJlc3VsdCAhPSBm cGopCi0gICAgICAgICAgICAgICAgICBwcmVzdWx0ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBqKQotICAgICAgICAgICAgICAgICAgcHJl c3VsdCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg IGNhc2UgU1hfTkVROiAgICAgICAgICAgICAgICAgIC8qIFRlc3QgZm9yIGluZXFhbGl0eSAqLwot ICAgICAgICAgICAgaWYgKGZwZmxhZykgewotICAgICAgICAgICAgICAgIGlmIChmcHJlc3VsdCA9 PSBmcGopCi0gICAgICAgICAgICAgICAgICBwcmVzdWx0ID0gMDsKLSAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBqKQotICAgICAgICAgICAgICAgICAg cHJlc3VsdCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg ICAgIGNhc2UgU1hfQUxFOiAgICAgICAgICAgICAgICAgIC8qIEFyaXRobWV0aWMgbGVzcy1lcXVh bCAqLwotICAgICAgICAgICAgaWYgKGZwZmxhZykgewotICAgICAgICAgICAgICAgIGlmIChmcGog PCBmcHJlc3VsdCkKLSAgICAgICAgICAgICAgICAgIHByZXN1bHQgPSAwOwotICAgICAgICAgICAg ICAgIGZwcmVzdWx0ID0gZnBqOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg ICBpZiAoaiA8IHJlc3VsdCkKLSAgICAgICAgICAgICAgICAgIHByZXN1bHQgPSAwOwotICAgICAg ICAgICAgICAgIHJlc3VsdCA9IGo7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK LQotICAgICAgICAgIGNhc2UgU1hfQUxUOiAgICAgICAgICAgICAgICAgIC8qIEFyaXRobWV0aWMg bGVzcy10aGFuICovCi0gICAgICAgICAgICBpZiAoZnBmbGFnKSB7Ci0gICAgICAgICAgICAgICAg aWYgKGZwaiA8PSBmcHJlc3VsdCkKLSAgICAgICAgICAgICAgICAgIHByZXN1bHQgPSAwOwotICAg ICAgICAgICAgICAgIGZwcmVzdWx0ID0gZnBqOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICAgICBpZiAoaiA8PSByZXN1bHQpCi0gICAgICAgICAgICAgICAgICBwcmVzdWx0ID0g MDsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBqOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNYX0FHVDogICAgICAgICAgICAgICAgICAvKiBB cml0aG1ldGljIGdyZWF0ZXItdGhhbiAqLwotICAgICAgICAgICAgaWYgKGZwZmxhZykgewotICAg ICAgICAgICAgICAgIGlmIChmcGogPj0gZnByZXN1bHQpCi0gICAgICAgICAgICAgICAgICBwcmVz dWx0ID0gMDsKLSAgICAgICAgICAgICAgICBmcHJlc3VsdCA9IGZwajsKLSAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGogPj0gcmVzdWx0KQotICAgICAgICAgICAgICAg ICAgcHJlc3VsdCA9IDA7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gajsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTWF9BR0U6ICAgICAgICAg ICAgICAgICAgLyogQXJpdGhtZXRpYyBncmVhdGVyLWVxdWFsICovCi0gICAgICAgICAgICBpZiAo ZnBmbGFnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZwaiA+IGZwcmVzdWx0KQotICAgICAgICAg ICAgICAgICAgcHJlc3VsdCA9IDA7Ci0gICAgICAgICAgICAgICAgZnByZXN1bHQgPSBmcGo7Ci0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChqID4gcmVzdWx0KQotICAg ICAgICAgICAgICAgICAgcHJlc3VsdCA9IDA7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gajsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTWF9Q T1c6ICAgICAgICAgICAgICAgICAgLyogUmFpc2UgdG8gcG93ZXIgKi8KLSNpZmRlZiBGTkZMT0FU Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGR1bW15OwotICAgICAgICAg ICAgICAgIGlmICghZnBqKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmVzdWx0ID0gMS4wOwot ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKCFmcHJlc3VsdCAmJiBmcGogPD0gMC4wKSkgewot ICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9EaXZpZGUgYnkgemVybyAtIFwiJXNcIlxuIixj bWRidWYpOwotICAgICAgICAgICAgICAgICAgICBzZXhwcmMrKzsKLSAgICAgICAgICAgICAgICAg ICAgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZnByZXN1bHQgPCAw LjAgJiYgbW9kZihmcGosJmR1bW15KSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9E b21haW4gZXJyb3IgLSBcIiVzXCJcbiIsY21kYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgc2V4 cHJjKys7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmcHJlc3VsdCA9IChDS0ZMT0FUKXBvdyhm cHJlc3VsdCxmcGopOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZiAv KiBGTkZMT0FUICovCi0gICAgICAgICAgICBpZiAoaiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAg cmVzdWx0ID0gMTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ0tfT0ZG X1Qgeiwgc2lnbiA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGogPCAwKSB7Ci0gICAgICAgICAg ICAgICAgICAgIGlmIChyZXN1bHQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCI/RGl2aWRlIGJ5IHplcm8gLSBcIiVzXCJcbiIsY21kYnVmKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHNleHByYysrOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhw OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGogPSAwIC0gajsK LSAgICAgICAgICAgICAgICAgICAgc2lnbisrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICB6ID0gcmVzdWx0OwotICAgICAgICAgICAgICAgIHdoaWxlICgtLWogPiAwKQotICAg ICAgICAgICAgICAgICAgcmVzdWx0ICo9IHo7Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ24pCi0g ICAgICAgICAgICAgICAgICByZXN1bHQgPSAxIC8gcmVzdWx0OwotICAgICAgICAgICAgfQotI2lm ZGVmIEZORkxPQVQKLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gZnByZXN1bHQpCi0gICAgICAg ICAgICAgIGZwZmxhZysrOwotI2VuZGlmCS8qIEZORkxPQVQgKi8KLSAgICAgICAgICAgIGJyZWFr OwotCi0jaWZkZWYgRk5GTE9BVAotICAgICAgICAgIGNhc2UgU1hfRVhQOiAgICAgICAgICAgICAg ICAgIC8qIGUgdG8gdGhlIGdpdmVuIHBvd2VyICovCi0gICAgICAgICAgICBmcHJlc3VsdCA9IChD S0ZMT0FUKSBleHAoZnBqKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBT WF9MR046ICAgICAgICAgICAgICAgICAgLyogTmF0dXJhbCBsb2cgKi8KLSAgICAgICAgICBjYXNl IFNYX0xHWDogICAgICAgICAgICAgICAgICAvKiBMb2cgYmFzZSAxMCAqLwotICAgICAgICAgIGNh c2UgU1hfU1FSOiAgICAgICAgICAgICAgICAgIC8qIFNxdWFyZSByb290ICovCi0gICAgICAgICAg ICBpZiAoZnBqIDwgMC4wKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/QXJndW1lbnQgb3V0 IG9mIHJhbmdlIC0gXCIlc1wiXG4iLGNtZGJ1Zik7Ci0gICAgICAgICAgICAgICAgc2V4cHJjKys7 Ci0gICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgaWYgKHggPT0gU1hfU1FSKQotICAgICAgICAgICAgICBmcHJlc3VsdCA9IChDS0ZMT0FUKSBz cXJ0KGZwaik7Ci0gICAgICAgICAgICBlbHNlIGlmICh4ID09IFNYX0xHTikKLSAgICAgICAgICAg ICAgZnByZXN1bHQgPSAoQ0tGTE9BVCkgbG9nKGZwaik7Ci0gICAgICAgICAgICBlbHNlCi0gICAg ICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpIGxvZzEwKGZwaik7Ci0gICAgICAgICAgICBi cmVhazsKLQotICAgICAgICAgIGNhc2UgU1hfU0lOOiAgICAgICAgICAgICAgICAgIC8qIHNpbmUg Ki8KLSAgICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpIHNpbihmcGopOwotICAgICAgICAg ICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNYX0NPUzogICAgICAgICAgICAgICAgICAvKiBj b3NpbmUgKi8KLSAgICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpIGNvcyhmcGopOwotICAg ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNYX1RBTjogICAgICAgICAgICAgICAg ICAvKiB0YW5nZW50ICovCi0gICAgICAgICAgICBmcHJlc3VsdCA9IChDS0ZMT0FUKSB0YW4oZnBq KTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIEZORkxPQVQgKi8KLQotICAgICAgICAg IGNhc2UgU1hfQ0VJOiAgICAgICAgICAgICAgICAgIC8qIENlaWxpbmcgKi8KLSAgICAgICAgICAg IGlmIChqICE9IGZwaikKLSAgICAgICAgICAgICAgaWYgKGZwaiA+IDAuMCkKLSAgICAgICAgICAg ICAgICBmcGogKz0gMS4wOwotICAgICAgICAgICAgZnByZXN1bHQgPSBmcGo7Ci0gICAgICAgICAg ICBmcGZsYWcgPSAxOwotICAgICAgICAgICAgdHJ1bmNhdGUgPSAxOwotICAgICAgICAgICAgYnJl YWs7Ci0KLSAgICAgICAgICBjYXNlIFNYX0ZMUjogICAgICAgICAgICAgICAgICAvKiBGbG9vciAq LwotICAgICAgICAgICAgaWYgKGogIT0gZnBqKQotICAgICAgICAgICAgICBpZiAoZnBqIDwgMC4w KQotICAgICAgICAgICAgICAgIGZwaiAtPSAxLjA7Ci0gICAgICAgICAgICBmcHJlc3VsdCA9IGZw ajsKLSAgICAgICAgICAgIGZwZmxhZyA9IDE7Ci0gICAgICAgICAgICB0cnVuY2F0ZSA9IDE7Ci0g ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU1hfVFJVOiAgICAgICAgICAgICAg ICAgIC8qIFRydW5jYXRlICovCi0gICAgICAgICAgICBmcHJlc3VsdCA9IGZwajsKLSAgICAgICAg ICAgIGZwZmxhZyA9IDE7Ci0gICAgICAgICAgICB0cnVuY2F0ZSA9IDE7Ci0gICAgICAgICAgICBi cmVhazsKLQotICAgICAgICAgIGNhc2UgU1hfQUJTOiAgICAgICAgICAgICAgICAgIC8qIEFic29s dXRlIHZhbHVlICovCi0gICAgICAgICAgICByZXN1bHQgPSAoaiA8IDApID8gMCAtIGogOiBqOwot I2lmZGVmIEZORkxPQVQKLSAgICAgICAgICAgIGZwcmVzdWx0ID0gKGZwaiA8IDAuMCkgPyAwLjAg LSBmcGogOiBmcGo7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IGZwcmVzdWx0KQotICAgICAg ICAgICAgICBmcGZsYWcrKzsKLSNlbmRpZgkvKiBGTkZMT0FUICovCi0gICAgICAgICAgICBicmVh azsKLQotICAgICAgICAgIGNhc2UgU1hfTUFYOiAgICAgICAgICAgICAgICAgIC8qIE1heCAqLwot ICAgICAgICAgICAgaWYgKGogIT0gZnBqKQotICAgICAgICAgICAgICBmcGZsYWcrKzsKLSAgICAg ICAgICAgIGlmIChmcGZsYWcpIHsKLSAgICAgICAgICAgICAgICBpZiAoZnBqID4gZnByZXN1bHQp Ci0gICAgICAgICAgICAgICAgICBmcHJlc3VsdCA9IGZwajsKLSAgICAgICAgICAgIH0gZWxzZQot ICAgICAgICAgICAgICBpZiAoaiA+IHJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBq OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNYX01JTjogICAgICAgICAg ICAgICAgICAvKiBNaW4gKi8KLSAgICAgICAgICAgIGlmIChqICE9IGZwaikKLSAgICAgICAgICAg ICAgZnBmbGFnKys7Ci0gICAgICAgICAgICBpZiAoZnBmbGFnKSB7Ci0gICAgICAgICAgICAgICAg aWYgKGZwaiA8IGZwcmVzdWx0KQotICAgICAgICAgICAgICAgICAgZnByZXN1bHQgPSBmcGo7Ci0g ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgaWYgKGogPCByZXN1bHQpCi0gICAgICAg ICAgICAgICAgcmVzdWx0ID0gajsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2Fz ZSBTWF9GTE86ICAgICAgICAgICAgICAgICAgLyogRmxvYXQgKi8KLSAgICAgICAgICAgIGZwZmxh ZysrOwotICAgICAgICAgICAgZnByZXN1bHQgPSByZXN1bHQ7Ci0gICAgICAgICAgICBmcGogPSBq OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNYX05PVDogICAgICAgICAg ICAgICAgICAvKiBOT1QgKHJldmVyc2UgdHJ1dGggdmFsdWUpICovCi0gICAgICAgICAgICBmcGZs YWcgPSAwOwotICAgICAgICAgICAgbm90Kys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg ICAgIGNhc2UgU1hfQldBOiAgICAgICAgICAgICAgICAgIC8qIEJpdHdpc2UgQU5EICovCi0gICAg ICAgICAgICBmcGZsYWcgPSAwOwotICAgICAgICAgICAgcmVzdWx0ICY9IGo7Ci0gICAgICAgICAg ICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU1hfQldPOiAgICAgICAgICAgICAgICAgIC8qIEJp dHdpc2UgT1IgKi8KLSAgICAgICAgICAgIGZwZmxhZyA9IDA7Ci0gICAgICAgICAgICByZXN1bHQg fD0gajsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTWF9CV1g6ICAgICAg ICAgICAgICAgICAgLyogQml0d2lzZSBYT1IgKi8KLSAgICAgICAgICBjYXNlIFNYX1hPUjogICAg ICAgICAgICAgICAgICAvKiBMb2dpY2FsIFhPUiAqLwotICAgICAgICAgICAgaWYgKG4gPiAzKSB7 Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VG9vIG1hbnkgb3BlcmFuZHMgLSBcIiVzXCJcbiIs cyk7Ci0gICAgICAgICAgICAgICAgc2V4cHJjKys7Ci0gICAgICAgICAgICAgICAgZ290byB4ZG9z ZXhwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnBmbGFnID0gMDsKLSAgICAgICAgICAg IGlmICh4ID09IFNYX0JXWCkgewotICAgICAgICAgICAgICAgIHJlc3VsdCBePSBqOwotICAgICAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAocmVzdWx0ICYmICFqKSB8 fCAoIXJlc3VsdCAmJiBqKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSByZXN1bHQgPSAx OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNY X0JXTjogICAgICAgICAgICAgICAgICAvKiBCaXR3aXNlIE5vdCAqLwotICAgICAgICAgICAgZnBm bGFnID0gMDsKLSAgICAgICAgICAgIHJlc3VsdCA9IH5yZXN1bHQ7Ci0gICAgICAgICAgICBicmVh azsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmludGYoIkJBRCBPUCBbJXNd XG4iLHBbMV0pOwotICAgICAgICAgICAgc2V4cHJjKys7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg aWYgKCFwZmxhZykgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGEgcHJlZGljYXRlICov Ci0gICAgICBzZXhwcHYgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgLyogU28gdW5zZXQgdGhp cyAqLwotCi0gIC8qIGRvbWFjcm86ICovCi0KLSAgICBpZiAobWFjcm8pIHsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBVc2VyLWRlZmluZWQgbWFjcm8gKi8KLSAgICAgICAgZXh0ZXJuIGludCBm c2V4cGZsYWc7ICAgICAgICAgICAvKiAoc2VlIGZuZXZhbCgpOmNrdXVzNC5jKSAqLwotICAgICAg ICBpbnQgbG9va2FnYWluID0gMDsgICAgICAgICAgICAgIC8qIE1heWJlIHRoZSBtYWNybyB0YWJs ZSBjaGFuZ2VkICovCi0gICAgICAgIGlmIChtYWN0YWJbbXhdLmt3ZCkgeyAgICAgICAgICAgLyog Q2hlY2sgYW5kIHNlZSAqLwotICAgICAgICAgICAgaWYgKGNrc3RyY21wKG1hY3RhYltteF0ua3dk LHBbMV0sLTEsMCkpCi0gICAgICAgICAgICAgIGxvb2thZ2FpbisrOwotICAgICAgICB9IGVsc2UK LSAgICAgICAgICBsb29rYWdhaW4rKzsKLSAgICAgICAgaWYgKGxvb2thZ2FpbikgeyAgICAgICAg ICAgICAgICAvKiBUaGUgdGFibGUgY2hhbmdlZCAqLwotICAgICAgICAgICAgbXggPSBteGxvb2so bWFjdGFiLHBbMV0sbm1hYyk7IC8qIEdldCB0aGUgbWFjcm8ncyBuZXcgaW5kZXggKi8KLSAgICAg ICAgICAgIGRlYnVnKEYxMTEsc2V4cGRlYnVnKCJtYWNybyBtb3ZlZCIpLHBbMV0sbXgpOwotICAg ICAgICAgICAgaWYgKG14IDwgMCkgeyAgICAgICAgICAgICAgICAgIC8qIFlpa2VzISAqLwotICAg ICAgICAgICAgICAgIHByaW50ZigiP01hY3JvIGRpc2FwcGVhcmVkISAtIFwiJXNcIlxuIixwWzFd KTsKLSAgICAgICAgICAgICAgICBzZXhwcmMrKzsKLSAgICAgICAgICAgICAgICBnb3RvIHhkb3Nl eHA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMSxzZXhwZGVi dWcoIm1hY3JvIG14IiksbWFjdGFiW214XS5rd2QsbXgpOwotICAgICAgICBpZiAoZnNleHBmbGFn KSB7ICAgICAgICAgICAgICAgIC8qIElmIGVtYmVkZGVkIGluIGEgZnVuY3Rpb24gY2FsbCAqLwot ICAgICAgICAgICAgaWYgKGNtcHVzaCgpID4gLTEpIHsgICAgICAgIC8qIGdldCBhIG5ldyBjb3B5 IG9mIHRoZSBwYXJzaW5nICovCi0gICAgICAgICAgICAgICAgZXh0ZXJuIGludCBpZmM7ICAgICAg ICAgLyogZW52aXJvbm1lbnQsICovCi0gICAgICAgICAgICAgICAgaW50IGssIGlmY3NhdiA9IGlm YzsgICAgLyogc2F2ZSB0aGUgSUYgc3RhdGUgKi8KLSAgICAgICAgICAgICAgICBkb2RvKG14LGxp bmUsMCk7ICAgICAgICAvKiBTZXQgdXAgdGhlIG1hY3JvICovCi0gICAgICAgICAgICAgICAgayA9 IHBhcnNlcigxKTsgICAgICAgICAgLyogQ2FsbCB0aGUgcGFyc2VyIHRvIGV4ZWN1dGUgaXQgKi8K LSAgICAgICAgICAgICAgICBjbXBvcCgpOyAgICAgICAgICAgICAgICAvKiBQb3AgYmFjayB0byBw cmV2aW91cyBsZXZlbCAqLwotICAgICAgICAgICAgICAgIGlmYyA9IGlmY3NhdjsgICAgICAgICAg IC8qIHJlc3RvcmUgSUYgc3RhdGUgKi8KLSAgICAgICAgICAgICAgICBpZiAoayA9PSAwKSAgICAg ICAgICAgICAvKiBJZiBubyBlcnJvciAqLwotICAgICAgICAgICAgICAgICAgczIgPSBtcnZhbFtt YWNsdmwrMV07IC8qIGdldCByZXR1cm4gdmFsdWUsIGlmIGFueSAqLwotICAgICAgICAgICAgICAg IGlmICghczIpIHMyID0gIiI7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCxzZXhwZGVidWco Im1hY3JvIHJldHVybiIpLHMyLDApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICBwcmludGYoIj9SZXNvdXJjZXMgZXhoYXVzdGVkIC0gXCIlc1wiXG4iLHMpOwotICAgICAg ICAgICAgICAgIHNleHByYysrOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgeyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE5vdCBlbWJlZGRlZCBpbiBhIGZ1bmN0aW9uIGNhbGwgKi8K LSAgICAgICAgICAgIGRvZG8obXgsbGluZSwwKTsgICAgICAgICAgICAvKiBBcyBhYm92ZSBidXQg d2l0aG91dCBjbXB1c2gvcG9wKCkgKi8KLSAgICAgICAgICAgIGsgPSBwYXJzZXIoMSk7Ci0gICAg ICAgICAgICBpZiAoayA9PSAwKQotICAgICAgICAgICAgICBzMiA9IG1ydmFsW21hY2x2bCsxXTsK LSAgICAgICAgICAgIGlmICghczIpIHMyID0gIiI7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYg KHBmbGFnKSB7ICAgICAgICAgICAgICAgICAvKiBQcmVkaWNhdGUgKi8KLSAgICAgICAgaWYgKG5v dCkgcHJlc3VsdCA9IHByZXN1bHQgPyAwIDogMTsKLSAgICAgICAgc2V4cHB2ID0gcHJlc3VsdDsg ICAgICAgICAgICAgICAvKiBTbyBzZXQgcHJlZGljYXRlIHZhbHVlICgwIG9yIDEpICovCi0gICAg ICAgIHMyID0gcHJlc3VsdCA/ICIxIiA6ICIwIjsKLSAgICB9IGVsc2UgaWYgKGZwZmxhZyAmJiAh c2V4cHRydW5jKSB7CS8qIFJlc3VsdCBpcyBmbG9hdGluZy1wb2ludCAqLwotICAgICAgICBpZiAo bm90KSBmcHJlc3VsdCA9IGZwcmVzdWx0ID8gMC4wIDogMS4wOwotICAgICAgICBzMiA9IGZwZm9y bWF0KGZwcmVzdWx0LDAsMCk7Ci0gICAgfSBlbHNlIGlmICh4ICE9IFNYX0VWQSkgewotICAgICAg ICBpZiAobm90KSByZXN1bHQgPSByZXN1bHQgPyAwIDogMTsKLSAgICAgICAgczIgPSBja2ZzdG9h KHJlc3VsdCk7Ci0gICAgfQotCi0vKiBDb21tb24gZXhpdCBwb2ludC4gIEFsd2F5cyBjb21lIGhl cmUgdG8gZXhpdC4gKi8KLQotICB4ZG9zZXhwOgotCi0gICAgaWYgKCFzMikgczIgPSAiIjsKLSAg ICBpZiAoIXNleHByYyAmJiBzMikgeyAgICAgICAgICAgICAgICAvKiBIYXZlIGEgcmVzdWx0ICov Ci0gICAgICAgIGNoYXIgKiBzeDsKLSAgICAgICAgY2hhciAqIHEyID0gczI7IGludCB4eCA9IDA7 Ci0gICAgICAgIGlmICgqczIpIHsKLSAgICAgICAgICAgIHdoaWxlICgqcTIrKykgeHgrKzsgICAg ICAgICAvKiBHZXQgbGVuZ3RoICovCi0gICAgICAgICAgICBpZiAoeHggPiBzZXhwcm1heCkgICAg ICAgICAgLyogKHN0YXRzKSAqLwotICAgICAgICAgICAgICBzZXhwcm1heCA9IHh4OwotICAgICAg ICB9IGVsc2UKLSAgICAgICAgICB4eCA9IDA7Ci0gICAgICAgIGlmICh4eCA+IHN4cmxlbltzZXhw ZGVwXSB8fCAhc3hyZXN1bHRbc2V4cGRlcF0pIHsKLSAgICAgICAgICAgIGludCBrOwotICAgICAg ICAgICAgayA9IHh4ICsgeHggLyA0OwotICAgICAgICAgICAgaWYgKGsgPCAzMikgayA9IDMyOwot ICAgICAgICAgICAgaWYgKHN4cmVzdWx0W3NleHBkZXBdKQotICAgICAgICAgICAgICBmcmVlKHN4 cmVzdWx0W3NleHBkZXBdKTsKLSAgICAgICAgICAgIGlmICgoc3hyZXN1bHRbc2V4cGRlcF0gPSAo Y2hhciAqKW1hbGxvYyhrKSkpIHsKLSAgICAgICAgICAgICAgICBzeHJsZW5bc2V4cGRlcF0gPSBr OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9NZW1vcnkg YWxsb2NhdGlvbiBmYWlsdXJlIC0gXCIlc1wiXG4iLHMyKTsKLSAgICAgICAgICAgICAgICBzZXhw cmMrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzeCA9IHN4cmVzdWx0W3Nl eHBkZXBdOyAgICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdCBidWZmZXIgKi8KLSAgICAgICAgd2hp bGUgKCgqc3grKyA9ICpzMisrKSkgOyAgICAgICAvKiBjb3B5IHJlc3VsdC4gKi8KLSAgICAgICAg aWYgKGZwZmxhZyAmJiB0cnVuY2F0ZSkgeyAgICAgICAvKiBGbG9hdGluZyBwb2ludCArIHRydW5j YXRlICovCi0gICAgICAgICAgICBzeCA9IHN4cmVzdWx0W3NleHBkZXBdOyAgICAgLyogYXQgZGVj aW1hbCBwb2ludCAqLwotICAgICAgICAgICAgZm9yIChpID0geHggLSAxOyBpID49IDA7IGktLSkg ewotICAgICAgICAgICAgICAgIGlmIChzeFtpXSA9PSAnLicpIHsKLSAgICAgICAgICAgICAgICAg ICAgc3hbaV0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID09IDApIHsgICAgICAg LyogSWYgbm90aGluZyBsZWZ0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBzeFswXSA9ICcw JzsgICAgLyogcHV0IGEgemVyby4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN4WzFdID0g TlVMOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChsaW5lKSAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIElmIG1hY3JvIGFyZyBidWZmZXIgYWxsb2NhdGVkICovCi0gICAgICBmcmVlKGxp bmUpOyAgICAgICAgICAgICAgICAgICAgICAgLyogZnJlZSBpdC4gKi8KLSAgICBpZiAobXVzdGZy ZWUpIHsgICAgICAgICAgICAgICAgICAgICAvKiBBbmQgZnJlZSBsb2NhbCBjb3B5IG9mIHNwbGl0 IGxpc3QgKi8KLSAgICAgICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHsKLSAgICAgICAgICAg IGlmIChwW2ldKSBmcmVlKHBbaV0pOwotICAgICAgICB9Ci0gICAgfQotICAgIGRlYnVnKEYxMTEs c2V4cGRlYnVnKCJleGl0Iiksc3hyZXN1bHRbc2V4cGRlcF0sc2V4cHJjKTsKLSAgICByZXR1cm4o c3hyZXN1bHRbc2V4cGRlcC0tXSk7Ci19Ci0jZW5kaWYgLyogTk9TRVhQICovCi0jZW5kaWYgLyog Tk9TUEwgKi8KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENI RUNLIGNvbW1hbmQgKi8KLWRvY2hrKCkgewotICAgIGludCB4LCB5OwotICAgIGlmICgoeSA9IGNt a2V5KGZ0cnRhYixuZnRyLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHkpOwot ICAgIGNrc3RybmNweShsaW5lLGF0bWJ1ZixMSU5CVUZTSVopOwotICAgIGlmICgoeSA9IGNtY2Zt KCkpIDwgMCkKLSAgICAgIHJldHVybih5KTsKLSNpZm5kZWYgTk9QVVNICi0gICAgaWYgKCFja3N0 cmNtcChsaW5lLCJwdXNoIiwoaW50KXN0cmxlbihsaW5lKSwwKSkgewotICAgICAgICBpZiAobXNn ZmxnKSAgICAgICAgICAgICAgICAgICAgIC8qIElmIGF0IHRvcCBsZXZlbC4uLiAqLwotICAgICAg ICAgIHByaW50ZigiIHB1c2glcyBhdmFpbGFibGVcbiIsIG5vcHVzaCA/ICIgbm90IiA6ICIiKTsK LSAgICAgICAgZWxzZSBpZiAobm9wdXNoICYmICFiYWNrZ3JkKQotICAgICAgICAgIHByaW50Zigi IENIRUNLOiBwdXNoIG5vdCBhdmFpbGFibGVcbiIpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEgLSBub3B1c2gpOwotICAgIH0KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNpZmRlZiBQSVBFU0VO RAotICAgIGlmICghY2tzdHJjbXAobGluZSwicGlwZXMiLChpbnQpc3RybGVuKGxpbmUpLDApKSB7 Ci0gICAgICAgIGlmIChtc2dmbGcpICAgICAgICAgICAgICAgICAgICAgLyogSWYgYXQgdG9wIGxl dmVsLi4uICovCi0gICAgICAgICAgcHJpbnRmKCIgcGlwZXMlcyBhdmFpbGFibGVcbiIsCi0gICAg ICAgICAgICAgICAgIChub3B1c2ggfHwgcHJvdG9jb2wgIT0gUFJPVE9fSykgPyAiIG5vdCIgOiAi Iik7Ci0gICAgICAgIGVsc2UgaWYgKChub3B1c2ggfHwgcHJvdG9jb2wgIT0gUFJPVE9fSykgJiYg IWJhY2tncmQpCi0gICAgICAgICAgcHJpbnRmKCIgQ0hFQ0s6IHBpcGVzIG5vdCBhdmFpbGFibGVc biIpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEgLSBub3B1c2gpOwotICAgIH0KLSNlbmRp ZiAvKiBQSVBFU0VORCAqLwotICAgIHkgPSBsb29rdXAoZnRydGFiLGxpbmUsbmZ0ciwmeCk7ICAg IC8qIExvb2sgaXQgdXAgKi8KLSAgICBkZWJ1ZyhGMTExLCJkb2NoayIsZnRydGFiW3hdLmt3ZCx5 KTsKLSAgICBpZiAobXNnZmxnKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBhdCB0b3Ag bGV2ZWwuLi4gKi8KLSAgICAgIHByaW50ZigiICVzJXMgYXZhaWxhYmxlXG4iLCBmdHJ0YWJbeF0u a3dkLCB5ID8gIiBub3QiIDogIiIpOwotICAgIGVsc2UgaWYgKHkgJiYgIWJhY2tncmQpCi0gICAg ICBwcmludGYoIiBDSEVDSzogJXMgbm90IGF2YWlsYWJsZVxuIiwgZnRydGFiW3hdLmt3ZCk7Ci0g ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxIC0geSk7Ci19Ci0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVm IENLTE9HRElBTAotCi0vKiBDb25uZWN0aW9uIGxvZyBhbmQgZWxhcHNlZC10aW1lIHJlcG9ydGlu ZyAqLwotCi1leHRlcm4gY2hhciBjeGxvZ2J1ZltdOyAgICAgICAgICAgICAgICAgLyogTG9nIHJl Y29yZCBidWZmZXIgKi8KLWV4dGVybiBjaGFyIGRpYWZpbFtdOyAgICAgICAgICAgICAgICAgICAv KiBMb2cgZmlsZSBuYW1lICovCi1leHRlcm4gaW50IGRpYWxvZywgY3hfYWN0aXZlOyAgICAgICAg ICAgLyogRmxhZ3MgKi8KLXN0YXRpYyBsb25nIGN4X3ByZXYgPSAwTDsgICAgICAgICAgICAgICAv KiBFbGFwc2VkIHRpbWUgb2YgcHJldmlvdXMgc2Vzc2lvbiAqLwotCi0jZW5kaWYgLyogQ0tMT0dE SUFMICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi1WT0lECi1kb2xvZ2VuZCgpIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgcmVjb3JkIHRvIGNvbm5lY3Rpb24gbG9nICov Ci0jaWZkZWYgTE9DVVMKLSAgICBleHRlcm4gaW50IGxvY3VzLCBhdXRvbG9jdXM7Ci0jZW5kaWYg LyogTE9DVVMgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgQ0tMT0dESUFMCi0gICAgbG9u ZyBkMSwgZDIsIHQxLCB0MjsKLSAgICBjaGFyIGJ1ZlszMl0sICogcDsKLSNlbmRpZiAvKiBDS0xP R0RJQUwgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRlZiBMT0NVUwotICAgIGlmIChh dXRvbG9jdXMpIHsKLSAgICAgICAgaW50IHggPSBsb2N1czsKLSNpZmRlZiBORVdGVFAKLQlkZWJ1 ZyhGMTAxLCJkb2xvZ2VuZCBmdHBpc2Nvbm5lY3RlZCIsIiIsZnRwaXNjb25uZWN0ZWQoKSk7Ci0g ICAgICAgIHNldGxvY3VzKGZ0cGlzY29ubmVjdGVkKCkgPyAwIDogMSwgMSk7Ci0jZWxzZQotICAg ICAgICBzZXRsb2N1cygxLDEpOwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotICAgIH0KLSNlbmRpZiAv KiBMT0NVUyAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBDS0xPR0RJQUwKLSAgICBkZWJ1 ZyhGMTAxLCJkb2xvZ2VuZCBkaWFsb2ciLCIiLGRpYWxvZyk7Ci0gICAgZGVidWcoRjEwMSwiZG9s b2dlbmQgY3hsb2didWZbMF0iLCIiLGN4bG9nYnVmWzBdKTsKLSNpZmRlZiBDS1NZU0xPRwotICAg IGRlYnVnKEYxMDEsImRvbG9nZW5kIGNreGxvZ2dpbmciLCIiLGNreGxvZ2dpbmcpOwotI2VuZGlm IC8qIENLU1lTTE9HICovCi0KLSAgICBpZiAoIWN4X2FjdGl2ZSB8fCAhY3hsb2didWZbMF0pICAg ICAvKiBObyBhY3RpdmUgcmVjb3JkICovCi0gICAgICByZXR1cm47Ci0KLSAgICBjeF9hY3RpdmUg PSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNvcmQgaXMgbm90IGFjdGl2ZSAqLwotICAg IGRlYnVnKEYxMTEsImRvbG9nZW5kIGN4bG9nYnVmIDEiLGN4bG9nYnVmLGN4X2FjdGl2ZSk7Ci0K LSAgICBkMSA9IG1qZCgoY2hhciAqKWN4bG9nYnVmKTsgICAgICAgICAvKiBHZXQgc3RhcnQgZGF0 ZSBvZiB0aGlzIHNlc3Npb24gKi8KLSAgICBja3N0cm5jcHkoYnVmLGNrZGF0ZSgpLDMxKTsgICAg ICAgICAvKiBHZXQgY3VycmVudCBkYXRlICovCi0gICAgZDIgPSBtamQoYnVmKTsgICAgICAgICAg ICAgICAgICAgICAgLyogQ29udmVydCB0aGVtIHRvIG1qZHMgKi8KLSAgICBwID0gY3hsb2didWY7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgc3RhcnQgdGltZSAqLwotICAgIHBbMTFdID0g TlVMOwotICAgIHBbMTRdID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQg dG8gc2Vjb25kcyAqLwotICAgIHQxID0gYXRvbChwKzkpICogMzYwMEwgKyBhdG9sKHArMTIpICog NjBMICsgYXRvbChwKzE1KTsKLSAgICBwWzExXSA9ICc6JzsKLSAgICBwWzE0XSA9ICc6JzsKLSAg ICBwID0gYnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgZW5kIHRpbWUgKi8K LSAgICBwWzExXSA9IE5VTDsKLSAgICBwWzE0XSA9IE5VTDsKLSAgICB0MiA9IGF0b2wocCs5KSAq IDM2MDBMICsgYXRvbChwKzEyKSAqIDYwTCArIGF0b2wocCsxNSk7Ci0gICAgdDIgPSAoKGQyIC0g ZDEpICogODY0MDBMKSArICh0MiAtIHQxKTsgLyogQ29tcHV0ZSBlbGFwc2VkIHRpbWUgKi8KLSAg ICBkZWJ1ZyhGMTAxLCJkb2xvZ2VuZCB0MiIsIiIsdDIpOwotICAgIGlmICh0MiA+IC0xTCkgewot ICAgICAgICBjeF9wcmV2ID0gdDI7Ci0gICAgICAgIHAgPSBoaG1tc3ModDIpOwotICAgICAgICBk ZWJ1ZyhGMTEwLCJkb2xvZ2VuZCBoaG1tc3MiLHAsMCk7Ci0gICAgICAgIGNrc3RybmNhdChjeGxv Z2J1ZiwiRT0iLENYTE9HQlVGTCk7IC8qIEFwcGVuZCB0byBsb2cgcmVjb3JkICovCi0gICAgICAg IGNrc3RybmNhdChjeGxvZ2J1ZixwLENYTE9HQlVGTCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImRv bG9nZW5kIGN4bG9nYnVmIDIiLGN4bG9nYnVmLDApOwotICAgIH0gZWxzZQotICAgICAgY3hfcHJl diA9IDBMOwotICAgIGRlYnVnKEYxMDEsImRvbG9nZW5kIGN4X3ByZXYiLCIiLGN4X3ByZXYpOwot ICAgIGlmIChkaWFsb2cpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGxvZ2dpbmcgKi8K LSAgICAgICAgaW50IHg7Ci0gICAgICAgIHggPSBkaWFvcG4oZGlhZmlsLDEsMSk7ICAgICAgICAg LyogT3BlbiBsb2cgaW4gYXBwZW5kIG1vZGUgKi8KLSAgICAgICAgZGVidWcoRjEwMSwiZG9sb2dl bmQgZGlhb3BuIiwiIix4KTsKLSAgICAgICAgeCA9IHpzb3V0bChaRElGSUwsY3hsb2didWYpOyAg ICAvKiBXcml0ZSB0aGUgcmVjb3JkICovCi0gICAgICAgIGRlYnVnKEYxMDEsImRvbG9nZW5kIHpz b3V0bCIsIiIseCk7Ci0gICAgICAgIHggPSB6Y2xvc2UoWkRJRklMKTsgICAgICAgICAgICAgLyog Q2xvc2UgdGhlIGxvZyAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJkb2xvZ2VuZCB6Y2xvc2UiLCIi LHgpOwotICAgIH0KLSNpZmRlZiBDS1NZU0xPRwotICAgIGRlYnVnKEYxMDEsImRvbG9nZW5kIGNr eGxvZ2dpbmciLCIiLGNreGxvZ2dpbmcpOwotICAgIGlmIChja3hsb2dnaW5nKSB7Ci0gICAgICAg IGludCB4OwotICAgICAgICB4ID0gY2tpbmRleCgiVD1ESUFMIixjeGxvZ2J1ZiwwLDAsMSk7Ci0g ICAgICAgIGRlYnVnKEYxMTEsImRvbG9nZW5kIGNreHN5c2xvZyIsY3hsb2didWYsY2t4c3lzbG9n KTsKLSAgICAgICAgZGVidWcoRjExMSwiZG9sb2dlbmQgY2tpbmRleCIsIlQ9RElBTCIseCk7Ci0g ICAgICAgIGlmICh4ID4gMCkgewotICAgICAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19E SSkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImRvbG9nZW5kIHN5c2xvZyIsY3hsb2di dWYrMTgsMCk7Ci0gICAgICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREksMSwiQ09OTkVDVElP TiIsKGNoYXIgKikoY3hsb2didWYrMTgpLCIiKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2t4 c3lzbG9nID49IFNZU0xHX0FDKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZG9sb2dl bmQgc3lzbG9nIixjeGxvZ2J1ZisxOCwwKTsKLSAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNM R19BQywxLCJDT05ORUNUSU9OIiwoY2hhciAqKShjeGxvZ2J1ZisxOCksIiIpOwotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jZW5kaWYgLyog Q0tMT0dESUFMICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotfQotCi0jaWZuZGVmIE5PTE9DQUwK LSNpZmRlZiBDS0xPR0RJQUwKLQotLyogIEQgTyBMIE8gRyBTIEggTyBXICAtLSAgU2hvdyBzZXNz aW9uL2Nvbm5lY3Rpb24gaW5mbyAgKi8KLQotLyogQ2FsbCB3aXRoIGZjID09IDEgdG8gc2hvdywg ZmMgPT0gMCB0byBvbmx5IGNhbGN1bGF0ZS4gKi8KLS8qIFJldHVybnMgc2Vzc2lvbiBlbGFwc2Vk IHRpbWUgaW4gc2Vjb25kcy4gKi8KLS8qIElmIG5vIHNlc3Npb24gYWN0aXZlLCByZXR1cm5zIGVs YXBzZWQgdGltZSBvZiBwcmV2aW91cyBzZXNzaW9uLCBpZiBhbnksICovCi0vKiBvdGhlcndpc2Ug MCAqLwotCi1sb25nCi1kb2xvZ3Nob3coZmMpIGludCBmYzsgeyAgICAgICAgICAgICAgICAgLyog U0hPVyAoY3VycmVudCkgQ09OTkVDVElPTiAqLwotICAgIGxvbmcgZDEsIGQyLCB0MSwgdDIgPSAw LCBwcmV2OwotICAgIGNoYXIgYywgYnVmMVszMl0sIGJ1ZjJbMzJdLCAqIGluZm9bMzJdLCAqIHAs ICogczsKLSAgICBjaGFyICogeGxvZ2J1ZiwgeGJ1ZltDWExPR0JVRkwrMV07Ci0gICAgaW50IGks IHggPSAwLCB6LCBmdHAgPSAwLCBhY3RpdmUgPSAwOwotCi0jaWZkZWYgTkVXRlRQCi0gICAgZXh0 ZXJuIGNoYXIgZnRwbG9nYnVmW107Ci0gICAgZXh0ZXJuIGxvbmcgZnRwbG9ncHJldjsKLSAgICBl eHRlcm4gaW50IGZ0cGxvZ2FjdGl2ZTsKLSAgICBpZiAoZmMgJiBXX0ZUUCkgewotICAgICAgICBm YyAmPSA2MzsKLSAgICAgICAgZnRwID0gMTsKLSAgICAgICAgeGxvZ2J1ZiA9IGZ0cGxvZ2J1ZjsK LSAgICAgICAgcHJldiA9IGZ0cGxvZ3ByZXY7Ci0gICAgICAgIGFjdGl2ZSA9IGZ0cGxvZ2FjdGl2 ZTsKLSAgICB9IGVsc2UgewotI2VuZGlmIC8qIE5FV0ZUUCAqLwotICAgICAgICBmdHAgPSAwOwot ICAgICAgICB4bG9nYnVmID0gY3hsb2didWY7Ci0gICAgICAgIHByZXYgPSBjeF9wcmV2OwotICAg ICAgICBhY3RpdmUgPSBjeF9hY3RpdmU7Ci0jaWZkZWYgTkVXRlRQCi0gICAgfQotI2VuZGlmIC8q IE5FV0ZUUCAqLwotCi0gICAgZGVidWcoRjEwMSwiZG9sb2dzaG93IGxvY2FsIiwiIixsb2NhbCk7 Ci0gICAgZGVidWcoRjEwMSwiZG9sb2dzaG93IGZ0cCIsIiIsZnRwKTsKLSAgICBkZWJ1ZyhGMTEx LCJkb2xvZ3Nob3cgYWN0aXZlIix4bG9nYnVmLGFjdGl2ZSk7Ci0KLSAgICBpZiAoIXhsb2didWZb MF0pIHsKLSAgICAgICAgaWYgKGZjKSB7Ci0gICAgICAgICAgICBpZiAoZGlkc2V0bGluIHx8IGZ0 cCkKLSAgICAgICAgICAgICAgcHJpbnRmKCIgJXM6IE5vIHJlY29yZC5cbiIsIGZ0cCA/ICJGVFAi IDogIktlcm1pdCIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBwcmludGYoIiAl czogTm8gY29ubmVjdGlvbi5cbiIsIGZ0cCA/ICJGVFAiIDogIktlcm1pdCIpOwotICAgICAgICB9 Ci0gICAgICAgIHJldHVybihwcmV2KTsKLSAgICB9Ci0KLSNpZmRlZiBORVdGVFAKLSAgICBpZiAo ZnRwKSB7Ci0gICAgICAgIHogPSBmdHBpc2Nvbm5lY3RlZCgpID8gMSA6IC0xOwotICAgIH0gZWxz ZSB7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0gICAgICAgIGlmIChsb2NhbCkgeyAgICAgICAgICAg ICAgICAgICAgLyogU2VlIGlmIHdlIGhhdmUgYW4gb3BlbiBjb25uZWN0aW9uICovCi0gICAgICAg ICAgICB6ID0gdHRjaGsoKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvbG9nc2hvdyB0dGNo ayIsIiIseik7Ci0gICAgICAgICAgICB6ID0gKHogPiAtMSkgPyAxIDogLTI7Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICB6ID0gYWN0aXZlID8gMSA6IC0yOwotICAgICAgICB9Ci0jaWZk ZWYgTkVXRlRQCi0gICAgfQotI2VuZGlmIC8qIE5FV0ZUUCAqLwotICAgIGlmICh6IDwgMEwpIHsK LSAgICAgICAgaWYgKCFmYykKLSAgICAgICAgICByZXR1cm4ocHJldik7Ci0gICAgICAgIGVsc2UK LSAgICAgICAgICB0MiA9IHByZXY7Ci0gICAgfQotICAgIC8qIE5vdGU6IE5PVCBja3N0cm5jcHkh ICovCi0gICAgc3RybmNweShidWYxLHhsb2didWYsMTcpOyAgICAgICAgICAgLyogQ29weSBvZiBq dXN0IHRoZSB0aW1lc3RhbXAgKi8KLSAgICBidWYxWzE3XSA9IE5VTDsgICAgICAgICAgICAgICAg ICAgICAvKiBUZXJtaW5hdGUgaXQgKi8KLSAgICBja3N0cm5jcHkoeGJ1Zix4bG9nYnVmKzE4LENY TE9HQlVGTCk7IC8qIENvcHkgdGhhdCBjYW4gYmUgcG9rZWQgKi8KLSAgICBkZWJ1ZyhGMTExLCJk b2xvZ3Nob3cgcHJldiIseGJ1ZixwcmV2KTsKLQotICAgIHh3b3Jkcyh4YnVmLDMxLGluZm8sMSk7 ICAgICAgICAgICAgIC8qIEJyZWFrIHVwIGludG8gZmllbGRzICovCi0gICAgZDEgPSBtamQoYnVm MSk7ICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCBzdGFydCB0aW1lIHRvIE1KRCAqLwot ICAgIGNrc3RybmNweShidWYyLGNrZGF0ZSgpLDMxKTsgICAgICAgIC8qIEN1cnJlbnQgZGF0ZSAq LwotICAgIGQyID0gbWpkKGJ1ZjIpOyAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgdG8g TUpEICovCi0gICAgcCA9IGJ1ZjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQg dG8gc3RhcnQgdGltZSAqLwotICAgIHBbMTFdID0gTlVMOwotICAgIHBbMTRdID0gTlVMOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgdG8gc2Vjb25kcyAqLwotICAgIHQxID0gYXRv bChwKzkpICogMzYwMEwgKyBhdG9sKHArMTIpICogNjBMICsgYXRvbChwKzE1KTsKLSAgICBwWzEx XSA9ICc6JzsKLSAgICBwWzE0XSA9ICc6JzsKLSAgICBwID0gYnVmMjsgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBEaXR0byBmb3IgY3VycmVudCB0aW1lICovCi0gICAgcFsxMV0gPSBOVUw7 Ci0gICAgcFsxNF0gPSBOVUw7Ci0gICAgaWYgKHogPiAtMUwpIHsKLSAgICAgICAgdDIgPSBhdG9s KHArOSkgKiAzNjAwTCArIGF0b2wocCsxMikgKiA2MEwgKyBhdG9sKHArMTUpOwotICAgICAgICB0 MiA9ICgoZDIgLSBkMSkgKiA4NjQwMEwpICsgKHQyIC0gdDEpOyAvKiBFbGFwc2VkIHRpbWUgc28g ZmFyICovCi0gICAgfQotICAgIGlmIChmYykgewotICAgICAgICBwID0gTlVMTDsKLSAgICAgICAg aWYgKHQyID4gLTFMKSAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IHNlY29uZHMgdG8gaGg6 bW06c3MgKi8KLSAgICAgICAgICBwID0gaGhtbXNzKHQyKTsKLSAgICAgICAgaWYgKHogPiAtMSkK LSAgICAgICAgICBzID0gIkFjdGl2ZSI7Ci0gICAgICAgIGVsc2UgaWYgKHogPT0gLTIpCi0gICAg ICAgICAgcyA9ICJDbG9zZWQiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcyA9ICJVbmtub3du IjsKLSAgICAgICAgcHJpbnRmKCJcbiIpOyAgICAgICAgICAgICAgICAgICAvKiBTaG93IHJlc3Vs dHMgKi8KLSAgICAgICAgcHJpbnRmKCIgU3RhdHVzOiAgICAgICAlc1xuIixzKTsKLSAgICAgICAg cHJpbnRmKCIgT3BlbmVkOiAgICAgICAlc1xuIixidWYxKTsKLSAgICAgICAgcHJpbnRmKCIgVXNl cjogICAgICAgICAlc1xuIixpbmZvWzFdID8gaW5mb1sxXSA6ICIiKTsKLSAgICAgICAgcHJpbnRm KCIgUElEOiAgICAgICAgICAlc1xuIixpbmZvWzJdID8gaW5mb1syXSA6ICIiKTsKLSAgICAgICAg Zm9yIChpID0gMzsgaW5mb1tpXTsgaSsrKSB7Ci0gICAgICAgICAgICBjID0gaW5mb1tpXVswXTsK LSAgICAgICAgICAgIHMgPSAoaW5mb1tpXSkgPyBpbmZvW2ldKzIgOiAiIjsKLSAgICAgICAgICAg IHN3aXRjaCAoYykgewotICAgICAgICAgICAgICBjYXNlICdUJzogcHJpbnRmKCIgVHlwZTogICAg ICAgICAlc1xuIiwgcyk7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlICdOJzogcHJpbnRmKCIg VG86ICAgICAgICAgICAlc1xuIiwgcyk7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlICdQJzog cHJpbnRmKCIgUG9ydDogICAgICAgICAlc1xuIiwgcyk7IGJyZWFrOwotICAgICAgICAgICAgICBj YXNlICdIJzogcHJpbnRmKCIgRnJvbTogICAgICAgICAlc1xuIiwgcyk7IGJyZWFrOwotICAgICAg ICAgICAgICBjYXNlICdEJzogcHJpbnRmKCIgRGV2aWNlOiAgICAgICAlc1xuIiwgcyk7IGJyZWFr OwotICAgICAgICAgICAgICBjYXNlICdPJzogcHJpbnRmKCIgT3JpZ2luOiAgICAgICAlc1xuIiwg cyk7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlICdFJzogYnJlYWs7Ci0gICAgICAgICAgICAg IGRlZmF1bHQ6ICBwcmludGYoIiAlc1xuIixpbmZvW2ldID8gaW5mb1tpXSA6ICIiKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoeiA8IDBMKQotICAgICAgICAgIHByaW50 ZigiIEVsYXBzZWQgdGltZTogJXNcbiIsIGhobW1zcyh0MikpOwotICAgICAgICBlbHNlCi0gICAg ICAgICAgcHJpbnRmKCIgRWxhcHNlZCB0aW1lOiAlc1xuIiwgcCA/IHAgOiAiKHVua25vd24pIik7 Ci0gICAgICAgIHggPSAwOwotI2lmZGVmIE5FVENPTk4KLSNpZmRlZiBTU0hCVUlMVElOCi0gICAg ICAgIGlmICggSVNfU1NIKCkgKSB4Kys7Ci0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVm IENLX0VOQ1JZUFRJT04KLSAgICAgICAgaWYgKGNrX3RuX2VuY3J5cHRpbmcoKSAmJiBja190bl9k ZWNyeXB0aW5nKCkpIHgrKzsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tf U1NMCi0gICAgICAgIGlmICh0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnKSB4Kys7 Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgUkxPR0NPREUKLSNpZmRlZiBDS19LRVJCRVJP UwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX0VLNExP R0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSB4Kys7Ci0jZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0jZW5kaWYgLyogUkxPR0NPREUgKi8K LSNlbmRpZiAvKiBORVRDT05OICovCi0gICAgICAgIGlmICh6ID4gMCkKLSAgICAgICAgICBwcmlu dGYoIiBFbmNyeXB0ZWQ6ICAgICVzXG4iLCB4ID8gIlllcyIgOiAiTm8iKTsKLSAgICAgICAgcHJp bnRmKCIgTG9nOiAgICAgICAgICAlc1xuIiwgZGlhbG9nID8gZGlhZmlsIDogIihub25lKSIpOwot ICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgfQotICAgIHJldHVybih0MiA+IC0xTCA/IHQyIDog MEwpOwotfQotCi1WT0lECi1kb2xvZ2xpbmUoKSB7Ci0gICAgY2hhciAqIHA7Ci0gICAgaW50IG4s IG0gPSAwOwotCi0gICAgZG9sb2dlbmQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJl dmlvdXMgc2Vzc2lvbiBub3QgY2xvc2VkIG91dD8gKi8KLSAgICBjeF9hY3RpdmUgPSAxOyAgICAg ICAgICAgICAgICAgICAgICAvKiBSZWNvcmQgaXMgYWN0aXZlICovCi0gICAgY3hfcHJldiA9IDBM OwotICAgIHAgPSBja2RhdGUoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCB0aW1lc3Rh bXAgKi8KLSAgICBuID0gY2tzdHJuY3B5KGN4bG9nYnVmLHAsQ1hMT0dCVUZMLTEpOyAvKiBTdGFy dCByZWNvcmQgb2ZmIHdpdGggaXQgKi8KLSAgICBpZiAoIXVpZGJ1ZlswXSkgewotICAgICAgICBk ZWJ1ZyhGMTAwLCJkb2xvZ2xpbmUgdWlkYnVmIGVtcHR5IiwiIiwwKTsKLSNpZmRlZiBVTklYICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaG8gaGFzIHdob2FtaSgpLi4uICovCi0gICAg ICAgIGNrc3RybmNweSh1aWRidWYsKGNoYXIgKil3aG9hbWkoKSxVSURCVUZMRU4pOwotI2Vsc2UK LSNpZmRlZiBTVFJBVFVTCi0gICAgICAgIGNrc3RybmNweSh1aWRidWYsKGNoYXIgKil3aG9hbWko KSxVSURCVUZMRU4pOwotI2Vsc2UKLSAgICAgICAgY2tzdHJuY3B5KHVpZGJ1ZiwiVU5LTk9XTiIs VUlEQlVGTEVOKTsKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAg IH0KLSAgICBtID0gc3RybGVuKHVpZGJ1ZikgKyBzdHJsZW4obXlob3N0KSArIHN0cmxlbih0dG5h bWUpICsgMzI7Ci0gICAgaWYgKG4rbSA8IENYTE9HQlVGTC0xKSB7ICAgICAgICAgICAgLyogQWRk IHNlcmlhbCBkZXZpY2UgaW5mbyAqLwotICAgICAgICBwID0gY3hsb2didWYrbjsKLSAgICAgICAg c3ByaW50ZihwLCIgJXMgJXMgVD1TRVJJQUwgSD0lcyBEPSVzICIsIC8qIFNBRkUgKi8KLSAgICAg ICAgICAgICAgICB1aWRidWYsCi0gICAgICAgICAgICAgICAgY2tnZXRwaWQoKSwKLSAgICAgICAg ICAgICAgICBteWhvc3QsCi0gICAgICAgICAgICAgICAgdHRuYW1lCi0gICAgICAgICAgICAgICAg KTsKLSAgICB9IGVsc2UKLSAgICAgIGNrc3RybmNweShjeGxvZ2J1ZiwiTE9HTElORSBCVUZGRVIg T1ZFUkZMT1ciLENYTE9HQlVGTCk7Ci0gICAgZGVidWcoRjExMCwiZG9sb2dsaW5lIixjeGxvZ2J1 ZiwwKTsKLX0KLQotI2lmZGVmIE5FVENPTk4KLVZPSUQKLWRvbG9nbmV0KCkgewotICAgIGNoYXIg KiBwLCAqIHMgPSAiTkVUIiwgKiB1dSA9IHVpZGJ1ZjsKLSAgICBjaGFyICogcG9ydCA9ICIiOwot ICAgIGludCBuLCBtLCB0Y3AgPSAwOwotICAgIGNoYXIgKiBoID0gTlVMTDsKLQotICAgIGRvbG9n ZW5kKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXZpb3VzIHNlc3Npb24gbm90IGNs b3NlZCBvdXQ/ICovCi0gICAgY3hfcHJldiA9IDBMOwotICAgIGN4X2FjdGl2ZSA9IDE7ICAgICAg ICAgICAgICAgICAgICAgIC8qIFJlY29yZCBpcyBhY3RpdmUgKi8KLSAgICBwID0gY2tkYXRlKCk7 Ci0gICAgbiA9IGNrc3RybmNweShjeGxvZ2J1ZixwLENYTE9HQlVGTCk7Ci0jaWZkZWYgVENQU09D S0VUCi0gICAgaWYgKG5ldHR5cGUgPT0gTkVUX1RDUEIgfHwgbmV0dHlwZSA9PSBORVRfVENQQSkg ewotCXRjcCsrOwotCXMgPSAiVENQIjsKLSAgICB9IGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX1NT SCkgewotCXMgPSAiU1NIIjsKLQl0Y3ArKzsKLSAgICB9Ci0jZW5kaWYgLyogVENQU09DS0VUICov Ci0jaWZkZWYgQU5ZWDI1Ci0gICAgaWYgKG5ldHR5cGUgPT0gTkVUX1NYMjUgfHwgbmV0dHlwZSA9 PSBORVRfVlgyNSB8fCBuZXR0eXBlID09IE5FVF9JWDI1KQotICAgICAgcyA9ICJYMjUiOwotI2Vu ZGlmIC8qIEFOWVgyNSAqLwotI2lmZGVmIERFQ05FVAotICAgIGlmIChuZXR0eXBlID09IE5FVF9E RUMpCi0gICAgICBzID0gIkRFQ05FVCI7Ci0jZW5kaWYgLyogREVDTkVUICovCi0jaWZkZWYgU1VQ RVJMQVQKLSAgICBpZiAobmV0dHlwZSA9PSBORVRfU0xBVCkKLSAgICAgIHMgPSAiU1VQRVJMQVQi OwotI2VuZGlmIC8qIFNVUEVSTEFUICovCi0jaWZkZWYgQ0tfTkVUQklPUwotICAgIGlmIChuZXR0 eXBlID09IE5FVF9CSU9TKQotICAgICAgcyA9ICJORVRCSU9TIjsKLSNlbmRpZiAvKiBDS19ORVRC SU9TICovCi0KLSAgICBpZiAoIXV1WzBdKSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsImRvbG9nbmV0 IHVpZGJ1ZiBlbXB0eSIsIiIsMCk7Ci0jaWZkZWYgT1MyT1JVTklYICAgICAgICAgICAgICAgICAg ICAgICAgLyogV2hvIGhhcyB3aG9hbWkoKS4uLiAqLwotICAgICAgICB1dSA9IChjaGFyICopd2hv YW1pKCk7Ci0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLSAgICAgICAgdXUgPSAoY2hhciAqKXdob2Ft aSgpOwotI2Vsc2UKLSAgICAgICAgdXUgPSAiVU5LTk9XTiI7Ci0jZW5kaWYgLyogU1RSQVRVUyAq LwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICB9Ci0jaWZkZWYgVENQU09DS0VUCi0gICAgaWYgKHRj cCkgewotCWludCBrOwotCW1ha2VzdHIoJmgsbXlob3N0KTsKLQlpZiAoKGsgPSBja2luZGV4KCI6 IixoLDAsMCwwKSkgPiAwKSB7Ci0JICAgIGhbay0xXSA9IE5VTDsKLQkgICAgcG9ydCA9ICZoW2td OwotCX0gZWxzZSB7Ci0JICAgIGludCBzdmNudW0gPSBnZXR0Y3Bwb3J0KCk7Ci0JICAgIGlmIChz dmNudW0gPiAwKQotCSAgICAgIHBvcnQgPSBja2l0b2Eoc3ZjbnVtKTsKLQkgICAgZWxzZQotCSAg ICAgIHBvcnQgPSAidW5rIjsKLQl9Ci0gICAgfQotI2VuZGlmCS8qIFRDUFNPQ0tFVCAqLwotICAg IG0gPSBzdHJsZW4odXUpICsgc3RybGVuKG15aG9zdCkgKyBzdHJsZW4odHRuYW1lKSArIHN0cmxl bihzKSArIDMyOwotICAgIGlmIChuK20gPCBDWExPR0JVRkwtMSkgeyAgICAgICAgICAgIC8qIFNB RkUgKi8KLSAgICAgICAgcCA9IGN4bG9nYnVmK247Ci0gICAgICAgIHNwcmludGYocCwiICVzICVz IFQ9JXMgTj0lcyBIPSVzIFA9JXMgIiwKLSAgICAgICAgICAgICAgICB1dSwKLSAgICAgICAgICAg ICAgICBja2dldHBpZCgpLAotICAgICAgICAgICAgICAgIHMsCi0gICAgICAgICAgICAgICAgdHRu YW1lLAotICAgICAgICAgICAgICAgIG15aG9zdCwKLQkJcG9ydAotICAgICAgICAgICAgICAgICk7 Ci0gICAgfSBlbHNlCi0gICAgICBja3N0cm5jcHkoY3hsb2didWYsIkxPR05FVCBCVUZGRVIgT1ZF UkZMT1ciLENYTE9HQlVGTCk7Ci0gICAgZGVidWcoRjExMCwiZG9sb2duZXQgY3hsb2didWYiLGN4 bG9nYnVmLDApOwotICAgIGlmIChoKSBtYWtlc3RyKCZoLE5VTEwpOwotfQotI2VuZGlmIC8qIE5F VENPTk4gKi8KLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLQotI2lmbmRlZiBOT0RJQUwKLS8qCi0g IFBhcnNlIGEgRElBTC1yZWxhdGVkIHN0cmluZywgc3RyaXBwaW5nIGVuY2xvc2luZyBicmFjZXMs IGlmIGFueS4KLSovCi1zdGF0aWMgaW50Ci1kaWFsc3RyKHAsbXNnKSBjaGFyICoqcDsgY2hhciAq bXNnOyB7Ci0gICAgaW50IHg7Ci0gICAgY2hhciAqczsKLQotICAgIGlmICgoeCA9IGNtdHh0KG1z ZywgIiIsICZzLCB4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICBzID0gYnJz dHJpcChzKTsgICAgICAgICAgICAgICAgICAgICAvKiBTdHJpcCBicmFjZXMgYXJvdW5kLiAqLwot ICAgIGRlYnVnKEYxMTAsImRpYWxzdHIiLHMsMCk7Ci0gICAgbWFrZXN0cihwLCpzP3M6TlVMTCk7 Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLX0KLQotVk9JRAotaW5pdG1kbSh4KSBpbnQgeDsg ewotICAgIE1ETUlORiAqIHA7Ci0gICAgaW50IG07Ci0KLSAgICBtZG10eXAgPSB4OyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTZXQgZ2xvYmFsIG1vZGVtIHR5cGUgKi8KLSAgICBkZWJ1ZyhG MTAxLCJpbml0bWRtIG1kbXR5cCIsIiIsbWRtdHlwKTsKLSAgICBkZWJ1ZyhGMTAxLCJpbml0bWRt IHVzZXJtZG0iLCIiLHVzZXJtZG0pOwotICAgIGlmICh4IDwgMSkgcmV0dXJuOwotCi0gICAgbSA9 IHVzZXJtZG0gPyB1c2VybWRtIDogbWRtdHlwOwotCi0gICAgcCA9IG1vZGVtcFttXTsgICAgICAg ICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gbW9kZW0gaW5mbyBzdHJ1Y3QsIGFuZCAqLwotICAg IC8qIGRlYnVnKEYxMDEsImluaXRtZG0gcCIsIiIscCk7ICovCi0gICAgaWYgKHApIHsKLSAgICAg ICAgZGlhbGVjID0gcC0+Y2FwYXMgJiBDS0RfRUM7ICAgICAvKiBzZXQgRElBTCBFUlJPUi1DT1JS RUNUSU9OLCAqLwotICAgICAgICBkaWFsZGMgPSBwLT5jYXBhcyAmIENLRF9EQzsgICAgIC8qIERJ QUwgREFUQS1DT01QUkVTU0lPTiwgYW5kICovCi0gICAgICAgIG1kbXNwZCA9IHAtPmNhcGFzICYg Q0tEX1NCID8gMCA6IDE7IC8qIERJQUwgU1BFRUQtTUFUQ0hJTkcgZnJvbSBpdC4gKi8KLSAgICAg ICAgZGlhbGZjID0gRkxPX0FVVE87ICAgICAgICAgICAgICAgICAgLyogTW9kZW0ncyBsb2NhbCBm bG93IGNvbnRyb2wuLiAqLwotICAgICAgICBkaWFsbWF4ICAgPSBwLT5tYXhfc3BlZWQ7Ci0gICAg ICAgIGRpYWxjYXBhcyA9IHAtPmNhcGFzOwotICAgICAgICBkaWFsZXNjICAgPSBwLT5lc2NfY2hh cjsKLSAgICB9IGVsc2UgaWYgKG1kbXR5cCA+IDApIHsKLSAgICAgICAgcHJpbnRmKCJXQVJOSU5H OiBtb2RlbSBpbmZvIGZvciBcIiVzXCIgbm90IGZpbGxlZCBpbiB5ZXRcbiIsCi0gICAgICAgICAg ICAgICBnbWRtdHlwKCkKLSAgICAgICAgICAgICAgICk7Ci0gICAgfQotCi0vKiBSZXNldCBvciBz ZXQgdGhlIFNFVCBESUFMIFNUUklORyBpdGVtcyAuLi4gKi8KLQotI2lmZGVmIERFQlVHCi0gICAg aWYgKGRlYmxvZykgewotICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxpbmkiLGRpYWxp bmksMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbG1zdHIgIixkaWFsbXN0ciww KTsKLSAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsbXBybXQiLGRpYWxtcHJtdCwwKTsK LSAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsY21kIixkaWFsY21kLDApOwotICAgICAg ICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxkY29uIixkaWFsZGNvbiwwKTsKLSAgICAgICAgZGVi dWcoRjExMCwiaW5pdG1kbSBkaWFsZGNvZmYiLGRpYWxkY29mZiwwKTsKLSAgICAgICAgZGVidWco RjExMCwiaW5pdG1kbSBkaWFsZWNvbiIsZGlhbGVjb24sMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAs ImluaXRtZG0gZGlhbGVjb2ZmIixkaWFsZWNvZmYsMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImlu aXRtZG0gZGlhbGhjbWQiLGRpYWxoY21kLDApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRt IGRpYWxod2ZjIixkaWFsaHdmYywwKTsKLSAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFs c3dmYyIsZGlhbHN3ZmMsMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbG5vZmMi LGRpYWxub2ZjLDApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWx0b25lIixkaWFs dG9uZSwwKTsKLSAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFscHVsc2UiLGRpYWxwdWxz ZSwwKTsKLSAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsbmFtZSIsZGlhbG5hbWUsMCk7 Ci0gICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbGFhb24iLGRpYWxhYW9uLDApOwotICAg ICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxhYW9mZiIsZGlhbGFhb2ZmLDApOwotICAgICAg ICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWx4MyIsZGlhbHgzLDApOwotICAgICAgICBkZWJ1ZyhG MTEwLCJpbml0bWRtIGRpYWxzcG9uIixkaWFsc3BvbiwwKTsKLSAgICAgICAgZGVidWcoRjExMCwi aW5pdG1kbSBkaWFsc3BvZmYiLGRpYWxzcG9mZiwwKTsKLSAgICAgICAgZGVidWcoRjExMCwiaW5p dG1kbSBkaWFsdm9sMSIsZGlhbHZvbDEsMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0g ZGlhbHZvbDIiLGRpYWx2b2wyLDApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWx2 b2wzIixkaWFsdm9sMywwKTsKLSAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsaW5pMiIs ZGlhbGluaTIsMCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICBpZiAodXNlcm1k bSAmJiBwKSB7IC8qIFVTRVItREVGSU5FRDogY29weSBpbmZvIGZyb20gc3BlY2lmaWVkIHRlbXBs YXRlICovCi0KLSAgICAgICAgbWFrZXN0cigmZGlhbGluaSAgLHAtPndha2Vfc3RyKTsKLSAgICAg ICAgbWFrZXN0cigmZGlhbG1zdHIgLHAtPmRtb2RlX3N0cik7Ci0gICAgICAgIG1ha2VzdHIoJmRp YWxtcHJtdCxwLT5kbW9kZV9wcm9tcHQpOwotICAgICAgICBtYWtlc3RyKCZkaWFsY21kICAscC0+ ZGlhbF9zdHIpOwotICAgICAgICBtYWtlc3RyKCZkaWFsZGNvbiAscC0+ZGNfb25fc3RyKTsKLSAg ICAgICAgbWFrZXN0cigmZGlhbGRjb2ZmLHAtPmRjX29mZl9zdHIpOwotICAgICAgICBtYWtlc3Ry KCZkaWFsZWNvbiAscC0+ZWNfb25fc3RyKTsKLSAgICAgICAgbWFrZXN0cigmZGlhbGVjb2ZmLHAt PmVjX29mZl9zdHIpOwotICAgICAgICBtYWtlc3RyKCZkaWFsaGNtZCAscC0+aHVwX3N0cik7Ci0g ICAgICAgIG1ha2VzdHIoJmRpYWxod2ZjICxwLT5od2ZjX3N0cik7Ci0gICAgICAgIG1ha2VzdHIo JmRpYWxzd2ZjICxwLT5zd2ZjX3N0cik7Ci0gICAgICAgIG1ha2VzdHIoJmRpYWxub2ZjICxwLT5u b2ZjX3N0cik7Ci0gICAgICAgIG1ha2VzdHIoJmRpYWx0b25lICxwLT50b25lKTsKLSAgICAgICAg bWFrZXN0cigmZGlhbHB1bHNlLHAtPnB1bHNlKTsKLSAgICAgICAgbWFrZXN0cigmZGlhbG5hbWUg LCJUaGlzIHNwYWNlIGF2YWlsYWJsZSAodXNlIFNFVCBNT0RFTSBOQU1FKSIpOwotICAgICAgICBt YWtlc3RyKCZkaWFsYWFvbiAscC0+YWFfb25fc3RyKTsKLSAgICAgICAgbWFrZXN0cigmZGlhbGFh b2ZmLHAtPmFhX29mZl9zdHIpOwotICAgICAgICBtYWtlc3RyKCZkaWFseDMgICAscC0+aWdub3Jl ZHQpOwotICAgICAgICBtYWtlc3RyKCZkaWFsc3BvbiAscC0+c3Bfb25fc3RyKTsKLSAgICAgICAg bWFrZXN0cigmZGlhbHNwb2ZmLHAtPnNwX29mZl9zdHIpOwotICAgICAgICBtYWtlc3RyKCZkaWFs dm9sMSAscC0+dm9sMV9zdHIpOwotICAgICAgICBtYWtlc3RyKCZkaWFsdm9sMiAscC0+dm9sMl9z dHIpOwotICAgICAgICBtYWtlc3RyKCZkaWFsdm9sMyAscC0+dm9sM19zdHIpOwotICAgICAgICBt YWtlc3RyKCZkaWFsaW5pMiAscC0+aW5pMik7Ci0KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAg ICAgICAgLyogTm90IHVzZXItZGVmaW5lZCwgc28gd2lwZSBvdXQgb3ZlcnJpZGVzICovCi0KLSAg ICAgICAgaWYgKGRpYWxpbmkpICAgbWFrZXN0cigmZGlhbGluaSxOVUxMKTsgICAvKiBJbml0LXN0 cmluZyAqLwotICAgICAgICBpZiAoZGlhbG1zdHIpICBtYWtlc3RyKCZkaWFsbXN0cixOVUxMKTsg IC8qIERpYWwtbW9kZS1zdHIgKi8KLSAgICAgICAgaWYgKGRpYWxtcHJtdCkgbWFrZXN0cigmZGlh bG1wcm10LE5VTEwpOyAvKiBEaWFsLW1vZGUtcHJvICovCi0gICAgICAgIGlmIChkaWFsY21kKSAg IG1ha2VzdHIoJmRpYWxjbWQsTlVMTCk7ICAgLyogRGlhbC1jb21tYW5kICAqLwotICAgICAgICBp ZiAoZGlhbGRjb24pICBtYWtlc3RyKCZkaWFsZGNvbixOVUxMKTsgIC8qIERDIE9OIGNvbW1hbmQg Ki8KLSAgICAgICAgaWYgKGRpYWxkY29mZikgbWFrZXN0cigmZGlhbGRjb2ZmLE5VTEwpOyAvKiBE QyBPRkYgY29tbWFuZCAqLwotICAgICAgICBpZiAoZGlhbGVjb24pICBtYWtlc3RyKCZkaWFsZWNv bixOVUxMKTsgIC8qIEVDIE9OIGNvbW1hbmQgKi8KLSAgICAgICAgaWYgKGRpYWxlY29mZikgbWFr ZXN0cigmZGlhbGVjb2ZmLE5VTEwpOyAvKiBFQyBPRkYgY29tbWFuZCAqLwotICAgICAgICBpZiAo ZGlhbGhjbWQpICBtYWtlc3RyKCZkaWFsaGNtZCxOVUxMKTsgIC8qIEhhbmd1cCBjb21tYW5kICov Ci0gICAgICAgIGlmIChkaWFsaHdmYykgIG1ha2VzdHIoJmRpYWxod2ZjLE5VTEwpOyAgLyogRmxv dyBjb250cm9sLi4uICovCi0gICAgICAgIGlmIChkaWFsc3dmYykgIG1ha2VzdHIoJmRpYWxzd2Zj LE5VTEwpOyAgLyogICovCi0gICAgICAgIGlmIChkaWFsbm9mYykgIG1ha2VzdHIoJmRpYWxub2Zj LE5VTEwpOyAgLyogICovCi0gICAgICAgIGlmIChkaWFsdG9uZSkgIG1ha2VzdHIoJmRpYWx0b25l LE5VTEwpOyAgLyogRGlhbGluZyBtZXRob2QgKi8KLSAgICAgICAgaWYgKGRpYWxwdWxzZSkgbWFr ZXN0cigmZGlhbHB1bHNlLE5VTEwpOyAvKiAgKi8KLSAgICAgICAgaWYgKGRpYWxuYW1lKSAgbWFr ZXN0cigmZGlhbG5hbWUsTlVMTCk7ICAvKiBNb2RlbSBuYW1lICovCi0gICAgICAgIGlmIChkaWFs YWFvbikgIG1ha2VzdHIoJmRpYWxhYW9uLE5VTEwpOyAgLyogQXV0b2Fuc3dlciBPbiAqLwotICAg ICAgICBpZiAoZGlhbGFhb2ZmKSBtYWtlc3RyKCZkaWFsYWFvZmYsTlVMTCk7IC8qIEF1dG9hbnN3 ZXIgT2ZmICovCi0gICAgICAgIGlmIChkaWFseDMpICAgIG1ha2VzdHIoJmRpYWx4MyxOVUxMKTsg ICAgLyogSWdub3JlIGRpYWx0b25lICovCi0gICAgICAgIGlmIChkaWFsc3BvbikgIG1ha2VzdHIo JmRpYWxzcG9uLE5VTEwpOyAgLyogU3BlYWtlciBPbiAqLwotICAgICAgICBpZiAoZGlhbHNwb2Zm KSBtYWtlc3RyKCZkaWFsc3BvZmYsTlVMTCk7IC8qIFNwZWFrZXIgT2ZmICovCi0gICAgICAgIGlm IChkaWFsdm9sMSkgIG1ha2VzdHIoJmRpYWx2b2wxLE5VTEwpOyAgLyogTG93IHZvbHVtZSAqLwot ICAgICAgICBpZiAoZGlhbHZvbDIpICBtYWtlc3RyKCZkaWFsdm9sMixOVUxMKTsgIC8qIE1lZGl1 bSB2b2x1bWUgKi8KLSAgICAgICAgaWYgKGRpYWx2b2wzKSAgbWFrZXN0cigmZGlhbHZvbDMsTlVM TCk7ICAvKiBIaWdoIHZvbHVtZSAqLwotICAgICAgICBpZiAoZGlhbGluaTIpICBtYWtlc3RyKCZk aWFsaW5pMixOVUxMKTsgIC8qIEluaXQgc3RyaW5nIDIgKi8KLSAgICB9Ci0gICAgaWYgKGF1dG9m bG93KSAgICAgICAgICAgICAgICAgICAgICAgLyogTWF5YmUgY2hhbmdlIGZsb3cgY29udHJvbCAq LwotICAgICAgc2V0ZmxvdygpOwotCi0jaWZuZGVmIE1JTklESUFMCi0jaWZkZWYgT0xEVEJDT0RF Ci0gICAgdGJtb2RlbCA9IDA7ICAgICAgICAgICAvKiBJZiBpdCdzIGEgVGVsZWJpdCwgd2UgZG9u J3Qga25vdyB0aGUgbW9kZWwgeWV0ICovCi0jZW5kaWYgLyogT0xEVEJDT0RFICovCi0jZW5kaWYg LyogTUlOSURJQUwgKi8KLX0KLQotI2lmZGVmIENPTU1FTlQKLS8qIE5vdCBpbXBsZW1lbnRlZCB5 ZXQgKi8KLWludAotc2V0YW5zd2VyKCkgewotICAgIGludCB4LCB5OwotICAgIGV4dGVybiBpbnQg YW5zX2NpZCwgYW5zX3Jpbmc7Ci0gICAgaWYgKCh4ID0gY21rZXkoYW5zd2VydGFiLG5hbnN3ZXJ0 YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgc3dpdGNoICh4 KSB7Ci0gICAgICBjYXNlIFhZQV9DSUQ6Ci0gICAgICAgIHJldHVybihzZXRvbigmYW5zX2NpZCkp OwotICAgICAgY2FzZSBYWUFfUk5HOgotICAgICAgICB5ID0gY21udW0oIkhvdyBtYW55IHJpbmdz IGJlZm9yZSBhbnN3ZXJpbmciLCIxIiwxMCwmeCx4eHN0cmluZyk7Ci0gICAgICAgIHkgPSBzZXRu dW0oJmFuc19yaW5ncyx4LHksMjU0KTsKLSAgICAgICAgcmV0dXJuKHkpOwotICAgIH0KLX0KLSNl bmRpZiAvKiBDT01NRU5UICovCi0KLWludAotc2V0bW9kZW0oKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNFVCBNT0RFTSAqLwotCi0gICAgaW50IHgsIHksIHo7Ci0gICAgbG9uZyB6 ejsKLSAgICBzdHJ1Y3QgRkRCIGsxLCBrMjsKLSAgICBleHRlcm4gaW50IG1kbXNldDsKLQotICAg IGNtZmRiaSgmazEsX0NNS0VZLAotICAgICAgICAgICAiTW9kZW0gcGFyYW1ldGVyIiwiIiwiIixu c2V0bWRtLCAwLCB4eHN0cmluZywgc2V0bWRtLCAmazIpOwotICAgIGNtZmRiaSgmazIsX0NNS0VZ LCIiLCIiLCIiLG5tZG0sMCx4eHN0cmluZyxtZG10YWIsTlVMTCk7Ci0gICAgeCA9IGNtZmRiKCZr MSk7Ci0gICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgKi8K LSAgICAgICAgaWYgKHggPT0gLTIgfHwgeCA9PSAtOSkKLSAgICAgICAgICBwcmludGYoIj9ObyBr ZXl3b3JkcyBtYXRjaDogXCIlc1wiXG4iLGF0bWJ1Zik7Ci0gICAgICAgIHJldHVybih4KTsKLSAg ICB9Ci0gICAgeSA9IGNtcmVzdWx0Lm5yZXN1bHQ7ICAgICAgICAgICAgICAgLyogS2V5d29yZCB2 YWx1ZSAqLwotICAgIGlmIChjbXJlc3VsdC5mZGJhZGRyID09ICZrMikgeyAgICAgIC8qIE1vZGVt LXR5cGUga2V5d29yZCB0YWJsZSAqLwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0g ICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICB1c2VybWRtID0gMDsKLSAgICAgICAgaW5pdG1k bShjbXJlc3VsdC5ucmVzdWx0KTsgICAgICAvKiBTZXQgdGhlIG1vZGVtIHR5cGUuICovCi0gICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7ICAgICAgICAgICAgLyogRG9uZSAqLwotICAgIH0KLSAg ICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsgICAgICAgICAvKiBTRVQgTU9ERU0ga2V5d29y ZCB0YWJsZS4gKi8KLSNpZmRlZiBNRE1IVVAKLSAgICAgIGNhc2UgWFlETUhVOiAgICAgICAgICAg ICAgICAgICAgICAvKiBESUFMIE1PREVNLUhBTkdVUCAqLwotICAgICAgICBpZiAoKHkgPSBjbWtl eShtZG1oYW5nLDQsImhvdyB0byBoYW5nIHVwIG1vZGVtIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgIm1vZGVtLWNvbW1hbmQiLCB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7 Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgIGRpYWxtaHUgPSB5OwotI2lmZGVmIENPTU1FTlQKLS8qIE5vcGUsIEkgZml4ZWQgaXQg KDIwMDEgMTEgMDgpICovCi0jaWZkZWYgQ0tfU0NPVjUKLSAgICAgICAgaWYgKGRpYWxtaHUgPT0g MCAmJiAhcXVpZXQpIHsKLSAgICAgICAgICAgIHByaW50ZigKLSJcbiBXQVJOSU5HOiBSUy0yMzIg c2lnbmFsIHNhbXBsaW5nIGFuZCBtYW5pcHVsYXRpb24gZG8gbm90IHdvcmtcbiIKLSAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHByaW50ZigKLSIgaW4gdGhlIHN0YW5kYXJkIFND TyBPU1I1IHNlcmlhbCBpL28gZHJpdmVycy4gIFNFVCBNT0RFTSBIQU5HVVAtTUVUSE9EXG4iCi0g ICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHByaW50ZigKLSIgTU9ERU0tQ09NTUFO RCBpcyByZWNvbW1lbmRlZCBmb3IgT1NSNS5cblxuIgotICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU0NPVjUgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0g ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0jZW5kaWYgLyogTURNSFVQICovCi0KLSAgICAg IGNhc2UgWFlEQ0FQOgotICAgICAgICB6eiA9IDBMOwotICAgICAgICB5ID0gMDsKLSAgICAgICAg d2hpbGUgKHkgIT0gLTMpIHsKLSAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KG1kbWNhcCxubWRt Y2FwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhcGFiaWxpdHkgb2YgbW9kZW0iLCAi IiwgeHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoeSA9PSAtMykKLSAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg ICAgIHJldHVybih5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHp6IHw9IHk7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgZGlhbGNhcGFzID0geno7Ci0gICAgICAgIGRlYnVnKEYxMDEsInNldG1vZGVt IGF1dG9mbG93IiwiIixhdXRvZmxvdyk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInNldG1vZGVtIGZs b3cgMSIsIiIsZmxvdyk7Ci0gICAgICAgIGlmIChhdXRvZmxvdykgICAgICAgICAgICAgICAgICAg LyogTWF5YmUgY2hhbmdlIGZsb3cgY29udHJvbCAqLwotICAgICAgICAgIHNldGZsb3coKTsKLSAg ICAgICAgZGVidWcoRjEwMSwic2V0bW9kZW0gZmxvdyAyIiwiIixmbG93KTsKLSAgICAgICAgbWRt c3BkID0genogJiBDS0RfU0IgPyAwIDogMTsgICAvKiBTZXQgTU9ERU0gU1BFRUQtTUFUQ0hJTkcg ZnJvbSBpdC4gKi8KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgY2FzZSBY WURNQVg6Ci0jaWZkZWYgVE5fQ09NUE9SVAotICAgICAgICBpZiAobmV0d29yayAmJiBpc3RuY29t cG9ydCgpKQotICAgICAgICAgIHggPSBjbWtleSh0bnNwZHRhYixudG5zcGQsbGluZSwiIix4eHN0 cmluZyk7Ci0gICAgICAgIGVsc2UKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0gICAgICAgICAg eCA9IGNta2V5KHNwZHRhYixuc3BkLGxpbmUsIiIseHhzdHJpbmcpOwotICAgICAgICBpZiAoeCA8 IDApIHsKLSAgICAgICAgICAgIGlmICh4ID09IC0zKSBwcmludGYoIj92YWx1ZSByZXF1aXJlZFxu Iik7Ci0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0g Y21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGRpYWxtYXggPSAobG9uZykgeCAqIDEw TDsKLSAgICAgICAgaWYgKGRpYWxtYXggPT0gNzApIGRpYWxtYXggPSA3NTsKLSAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgY2FzZSBYWURTVFI6ICAgICAgICAgICAgICAgICAg ICAgIC8qIFRoZXNlIG1vdmVkIGZyb20gU0VUIERJQUwgKi8KLSAgICAgIGNhc2UgWFlEREM6Ci0g ICAgICBjYXNlIFhZREVDOgotICAgICAgY2FzZSBYWURFU0M6Ci0gICAgICBjYXNlIFhZREZDOgot ICAgICAgY2FzZSBYWURLU1A6Ci0gICAgICBjYXNlIFhZRFNQRDoKLSAgICAgIGNhc2UgWFlERElB OgotICAgICAgICByZXR1cm4oc2V0ZGlhbCh4KSk7Ci0KLSAgICAgIGNhc2UgWFlEVFlQOgotICAg ICAgICBpZiAoKHkgPSBjbWtleShtZG10YWIsbm1kbSwibW9kZW0gdHlwZSIsIm5vbmUiLCB4eHN0 cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGlmICh5ID09IGRpYWx1 ZHQpIHsgICAgICAgICAgICAgLyogVXNlci1kZWZpbmVkIG1vZGVtIHR5cGUgKi8KLSAgICAgICAg ICAgIGlmICgoeCA9IGNta2V5KG1kbXRhYixubWRtLCJiYXNlZCBvbiBleGlzdGluZyBtb2RlbSB0 eXBlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIiwgeHhzdHJpbmcpKSA8 IDApCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHog PSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICB1c2VybWRtID0g MDsKLSAgICAgICAgdXNlcm1kbSA9ICh5ID09IGRpYWx1ZHQpID8geCA6IDA7Ci0gICAgICAgIGlu aXRtZG0oeSk7Ci0gICAgICAgIG1kbXNldCA9IChtZG10eXAgPiAwKTsKLSAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgY2FzZSBYWUROQU06Ci0gICAgICAgIHJldHVybihkaWFs c3RyKCZkaWFsbmFtZSwiRGVzY3JpcHRpdmUgbmFtZSBmb3IgbW9kZW0iKSk7Ci0KLSAgICAgIGNh c2UgWFlETUNEOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgTU9ERU0gQ0FSUklFUi1XQVRD SCAqLwotICAgICAgICByZXR1cm4oc2V0ZGNkKCkpOwotCi0gICAgICBjYXNlIFhZRFNQSzogICAg ICAgICAgICAgICAgICAgICAgLyogU0VUIE1PREVNIFNQRUFLRVIgKi8KLSAgICAgICAgcmV0dXJu KHNldG9uKCZtZG1zcGspKTsKLQotICAgICAgY2FzZSBYWURWT0w6ICAgICAgICAgICAgICAgICAg ICAgIC8qIFNFVCBNT0RFTSBWT0xVTUUgKi8KLSAgICAgICAgaWYgKCh4ID0gY21rZXkodm9sdGFi LDMsIiIsIm1lZGl1bSIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAg ICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICBtZG12b2wgPSB4OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBkZWZh dWx0OgotICAgICAgICBwcmludGYoIlVuZXhwZWN0ZWQgU0VUIE1PREVNIHBhcmFtZXRlclxuIik7 Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogU2V0IERJQUwgY29tbWFuZCBvcHRpb25zICovCi1zZXRkaWFs KHkpIGludCB5OyB7Ci0gICAgaW50IHggPSAwLCB6ID0gMDsKLSAgICBjaGFyICpzID0gTlVMTDsK LQotICAgIGlmICh5IDwgMCkKLSAgICAgIGlmICgoeSA9IGNta2V5KGRpYWx0YWIsbmRpYWwsIiIs IiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgIHJldHVybih5KTsKLSAgICBzd2l0Y2ggKHkpIHsK LSAgICAgIGNhc2UgWFlESFVQOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIEhBTkdVUCAq LwotICAgICAgICByZXR1cm4oc2V0b24oJmRpYWxobmcpKTsKLSAgICAgIGNhc2UgWFlESU5JOiAg ICAgICAgICAgICAgICAgICAgICAvKiBESUFMIElOSVQtU1RSSU5HICovCi0gICAgICAgIHJldHVy bihkaWFsc3RyKCZkaWFsaW5pLCJNb2RlbSBpbml0aWFsaXphdGlvbiBzdHJpbmciKSk7Ci0gICAg ICBjYXNlIFhZRE5QUjogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBQUkVGSVggKi8KLSAg ICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxucHIsIlRlbGVwaG9uZSBudW1iZXIgcHJlZml4Iikp OwotICAgICAgY2FzZSBYWURESUE6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgRElBTC1D T01NQU5EICovCi0gICAgICAgIHggPSBjbXR4dCgiRGlhbGluZyBjb21tYW5kIGZvciBtb2RlbSxc blwKLSBpbmNsdWRlIFwiJXNcIiB0byBzdGFuZCBmb3IgcGhvbmUgbnVtYmVyLFxuXAotIGZvciBl eGFtcGxlLCBcInNldCBkaWFsIGRpYWwtY29tbWFuZCBBVERUJXNcXDEzXCIiLAotICAgICAgICAg ICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAgICAmcywKLSAgICAgICAgICAgICAgICAgIHh4 c3RyaW5nKTsKLSAgICAgICAgaWYgKHggPCAwICYmIHggIT0gLTMpICAgICAgICAgICAvKiBIYW5k bGUgcGFyc2UgZXJyb3JzICovCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBzID0gYnJz dHJpcChzKTsgICAgICAgICAgICAgICAgIC8qIFN0cmlwIGJyYWNlcyBvciBxdW90ZXMgKi8KLSAg ICAgICAgeSA9IHggPSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAvKiBHZXQgbGVuZ3RoIG9mIHRl eHQgKi8KLSAgICAgICAgaWYgKHkgPiAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGVy ZSBpcyBhbnkgdGV4dCAobGVmdCksICovCi0gICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgeTsg eCsrKSB7ICAgLyogbWFrZSBzdXJlIHRoZXkgaW5jbHVkZWQgIiVzIiAqLwotICAgICAgICAgICAg ICAgIGlmIChzW3hdICE9ICclJykgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHNbeCsx XSA9PSAncycpIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHggPT0geSkg ewotICAgICAgICAgICAgICAgIHByaW50ZigKLSI/RGlhbC1jb21tYW5kIG11c3QgY29udGFpbiBc IiVjc1wiIGZvciBwaG9uZSBudW1iZXIuXG4iLCclJyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu KC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZGlhbGNtZCkgeyAg ICAgICAgICAgICAgICAgIC8qIEZyZWUgYW55IHByZXZpb3VzIHN0cmluZy4gKi8KLSAgICAgICAg ICAgIGZyZWUoZGlhbGNtZCk7Ci0gICAgICAgICAgICBkaWFsY21kID0gKGNoYXIgKikgMDsKLSAg ICAgICAgfQotICAgICAgICBpZiAoeSA+IDApIHsKLSAgICAgICAgICAgIGRpYWxjbWQgPSBtYWxs b2MoeSArIDEpOyAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgaXQgKi8KLSAgICAgICAgICAgIGlm IChkaWFsY21kKQotICAgICAgICAgICAgICBzdHJjcHkoZGlhbGNtZCxzKTsgICAgICAgIC8qIGFu ZCBtYWtlIGEgc2FmZSBjb3B5LiAqLwotICAgICAgICB9Ci0gICAgICAgIHJldHVybihzdWNjZXNz ID0gMSk7Ci0jaWZuZGVmIE5PWEZFUgotICAgICAgY2FzZSBYWURLU1A6ICAgICAgICAgICAgICAg ICAgICAgIC8qIERJQUwgS0VSTUlULVNQT09GICovCi0gICAgICAgIHJldHVybihzZXRvbigmZGlh bGtzcCkpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAgY2FzZSBYWURUTU86ICAgICAgICAg ICAgICAgICAgICAgIC8qIERJQUwgVElNRU9VVCAqLwotICAgICAgICB5ID0gY21udW0oIlNlY29u ZHMgdG8gd2FpdCBmb3IgY2FsbCBjb21wbGV0aW9uIiwiMCIsMTAsJngseHhzdHJpbmcpOwotICAg ICAgICBpZiAoeSA8IDApIHJldHVybih5KTsKLSAgICAgICAgeSA9IGNtbnVtKCJLZXJtaXQvbW9k ZW0gdGltZW91dCBkaWZmZXJlbnRpYWwiLCIxMCIsMTAsJnoseHhzdHJpbmcpOwotICAgICAgICBp ZiAoeSA8IDApIHJldHVybih5KTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAg ICAgICAgIHJldHVybih5KTsKLSAgICAgICAgZGlhbHRtbyA9IHg7Ci0gICAgICAgIG1kbXdhaXRk ID0gejsKLSAgICAgIGNhc2UgWFlERVNDOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIEVT Q0FQRS1DSEFSQUNURVIgKi8KLSAgICAgICAgeSA9IGNtbnVtKCJBU0NJSSB2YWx1ZSBvZiBjaGFy YWN0ZXIgdG8gZXNjYXBlIGJhY2sgdG8gbW9kZW0iLAotICAgICAgICAgICAgICAgICAgIjQzIiwx MCwmeCx4eHN0cmluZyk7Ci0gICAgICAgIHkgPSBzZXRudW0oJmRpYWxlc2MseCx5LDEyOCk7Ci0g ICAgICAgIGlmICh5ID4gLTEgJiYgZGlhbGVzYyA8IDApICAgICAgLyogTm8gZXNjYXBlIGNoYXJh Y3RlciAqLwotICAgICAgICAgIGRpYWxtaHUgPSAwOyAgICAgICAgICAgICAgICAgIC8qIFNvIG5v IGhhbmd1cCBieSBtb2RlbSBjb21tYW5kICovCi0gICAgICAgIHJldHVybih5KTsKLSAgICAgIGNh c2UgWFlERFBZOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIERJU1BMQVkgKi8KLSAgICAg ICAgcmV0dXJuKHNldG9uKCZkaWFsZHB5KSk7Ci0gICAgICBjYXNlIFhZRFNQRDogICAgICAgICAg ICAgICAgICAgICAgLyogRElBTCBTUEVFRC1NQVRDSElORyAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHVzZWQgdG8gYmUgc3BlZWQtY2hhbmdpbmcgKi8KLSAg ICAgICAgaWYgKCh5ID0gc2V0b24oJm1kbXNwZCkpIDwgMCkgcmV0dXJuKHkpOwotI2lmZGVmIENP TU1FTlQKLSAgICAgICAgbWRtc3BkID0gMSAtIG1kbXNwZDsgICAgICAgICAgICAvKiBzbyBoZXJl IHdlIHJldmVyc2UgdGhlIG1lYW5pbmcgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICBjYXNlIFhZRE1OUDogICAgICAgICAgICAgICAg ICAgICAgLyogRElBTCBNTlAtRU5BQkxFICovCi0gICAgICBjYXNlIFhZREVDOiAgICAgICAgICAg ICAgICAgICAgICAgLyogRElBTCBFUlJPUi1DT1JSRUNUSU9OICovCi0gICAgICAgIHggPSBzZXRv bigmZGlhbGVjKTsKLSAgICAgICAgaWYgKHggPiAwKQotICAgICAgICAgIGlmICghZGlhbGVjKSBk aWFsZGMgPSAwOyAgICAgIC8qIE9GRiBhbHNvIHR1cm5zIG9mZiBjb21wcmVzc2lvbiAqLwotICAg ICAgICByZXR1cm4oeCk7Ci0KLSAgICAgIGNhc2UgWFlEREM6ICAgICAgICAgICAgICAgICAgICAg ICAvKiBESUFMIENPTVBSRVNTSU9OICovCi0gICAgICAgIHggPSBzZXRvbigmZGlhbGRjKTsKLSAg ICAgICAgaWYgKHggPiAwKQotICAgICAgICAgIGlmIChkaWFsZGMpIGRpYWxlYyA9IDE7ICAgICAg IC8qIE9OIGFsc28gdHVybnMgb24gZXJyb3IgY29ycmVjdGlvbiAqLwotICAgICAgICByZXR1cm4o eCk7Ci0KLSNpZmRlZiBNRE1IVVAKLSAgICAgIGNhc2UgWFlETUhVOiAgICAgICAgICAgICAgICAg ICAgICAvKiBESUFMIE1PREVNLUhBTkdVUCAqLwotICAgICAgICByZXR1cm4oc2V0b24oJmRpYWxt aHUpKTsKLSNlbmRpZiAvKiBNRE1IVVAgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgICAgY2FzZSBY WURESVI6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgRElSRUNUT1JZICh6ZXJvIG9yIG1v cmUpICovCi0gICAgICAgIHJldHVybihwYXJzZGlyKDApKTsgICAgICAgICAgICAgLyogMCBtZWFu cyBESUFMICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgICAgY2FzZSBYWURTVFI6ICAgICAg ICAgICAgICAgICAgICAgIC8qIERJQUwgU1RSSU5HICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5 KG1kbWNtZCxubWRtY21kLCIiLCIiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAg IHN3aXRjaCAoeSkgewotICAgICAgICAgIGNhc2UgWFlEU19BTjogICAgICAgICAgICAgICAgIC8q IEF1dG9hbnN3ZXIgT04vT0ZGICovCi0gICAgICAgICAgY2FzZSBYWURTX0RDOiAgICAgICAgICAg ICAgICAgLyogRGF0YSBjb21wcmVzc2lvbiBPTi9PRkYgKi8KLSAgICAgICAgICBjYXNlIFhZRFNf RUM6ICAgICAgICAgICAgICAgICAvKiBFcnJvciBjb3JyZWN0aW9uIE9OL09GRiAqLwotICAgICAg ICAgICAgaWYgKCh4ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICBzcHJpbnRmKHRtcGJ1ZiwiTW9kZW0n cyBjb21tYW5kIHRvICVzYWJsZSAlcyIsIC8qIFNBRkUgKi8KLSAgICAgICAgICAgICAgICAgICAg eCA/ICJlbiIgOiAiZGlzIiwKLSAgICAgICAgICAgICAgICAgICAgKHkgPT0gWFlEU19EQykgPyAi Y29tcHJlc3Npb24iIDoKLSAgICAgICAgICAgICAgICAgICAgKCh5ID09IFhZRFNfRUMpID8gImVy cm9yLWNvcnJlY3Rpb24iIDoKLSAgICAgICAgICAgICAgICAgICAgImF1dG9hbnN3ZXIiKQotICAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgaWYgKHgpIHsKLSAgICAgICAgICAgICAg ICBpZiAoeSA9PSBYWURTX0RDKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRp YWxkY29uLHRtcGJ1ZikpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHkgPT0gWFlEU19FQykK LSAgICAgICAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsZWNvbix0bXBidWYpKTsKLSAg ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlh bGFhb24sdG1wYnVmKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlm ICh5ID09IFhZRFNfREMpCi0gICAgICAgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbGRj b2ZmLHRtcGJ1ZikpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHkgPT0gWFlEU19FQykKLSAg ICAgICAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsZWNvZmYsdG1wYnVmKSk7Ci0gICAg ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxh YW9mZix0bXBidWYpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIFhZRFNfSFU6ICAg ICAgICAgICAgICAgICAvKiAgICBoYW5ndXAgY29tbWFuZCAqLwotICAgICAgICAgICAgcmV0dXJu KGRpYWxzdHIoJmRpYWxoY21kLCJNb2RlbSdzIGhhbmd1cCBjb21tYW5kIikpOwotICAgICAgICAg IGNhc2UgWFlEU19IVzogICAgICAgICAgICAgICAgIC8qICAgIGh3ZmMgKi8KLSAgICAgICAgICAg IHJldHVybihkaWFsc3RyKCZkaWFsaHdmYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJN b2RlbSdzIGNvbW1hbmQgdG8gZW5hYmxlIGhhcmR3YXJlIGZsb3cgY29udHJvbCIpKTsKLSAgICAg ICAgICBjYXNlIFhZRFNfSU46ICAgICAgICAgICAgICAgICAvKiAgICBpbml0ICovCi0gICAgICAg ICAgICByZXR1cm4oZGlhbHN0cigmZGlhbGluaSwiTW9kZW0ncyBpbml0aWFsaXphdGlvbiBzdHJp bmciKSk7Ci0gICAgICAgICAgY2FzZSBYWURTX05GOiAgICAgICAgICAgICAgICAgLyogICAgbm8g ZmxvdyBjb250cm9sICovCi0gICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbG5vZmMsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAiTW9kZW0ncyBjb21tYW5kIHRvIGRpc2FibGUgbG9j YWwgZmxvdyBjb250cm9sIikpOwotICAgICAgICAgIGNhc2UgWFlEU19QWDogICAgICAgICAgICAg ICAgIC8qICAgIHByZWZpeCAqLwotICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxucHIs IlRlbGVwaG9uZSBudW1iZXIgcHJlZml4IGZvciBkaWFsaW5nIikpOwotICAgICAgICAgIGNhc2Ug WFlEU19TVzogICAgICAgICAgICAgICAgIC8qICAgIHN3ZmMgKi8KLSAgICAgICAgICAgIHJldHVy bihkaWFsc3RyKCZkaWFsc3dmYywKLSAgICAgICAgICAgICAgICAgICAiTW9kZW0ncyBjb21tYW5k IHRvIGVuYWJsZSBsb2NhbCBzb2Z0d2FyZSBmbG93IGNvbnRyb2wiKSk7Ci0gICAgICAgICAgY2Fz ZSBYWURTX0RUOiAgICAgICAgICAgICAgICAgLyogICAgdG9uZSBkaWFsaW5nICovCi0gICAgICAg ICAgICByZXR1cm4oZGlhbHN0cigmZGlhbHRvbmUsCi0gICAgICAgICAgICAgICAgICAgIkNvbW1h bmQgdG8gY29uZmlndXJlIG1vZGVtIGZvciB0b25lIGRpYWxpbmciKSk7Ci0gICAgICAgICAgY2Fz ZSBYWURTX0RQOiAgICAgICAgICAgICAgICAgLyogICAgcHVsc2UgZGlhbGluZyAqLwotICAgICAg ICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxwdWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICJDb21tYW5kIHRvIGNvbmZpZ3VyZSBtb2RlbSBmb3IgcHVsc2UgZGlhbGluZyIpKTsKLSAg ICAgICAgICBjYXNlIFhZRFNfTVM6ICAgICAgICAgICAgICAgICAvKiAgICBkaWFsIG1vZGUgc3Ry aW5nICovCi0gICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbG1zdHIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIkNvbW1hbmQgdG8gZW50ZXIgZGlhbCBtb2RlIikpOwotICAgICAgICAg IGNhc2UgWFlEU19NUDogICAgICAgICAgICAgICAgIC8qICAgIGRpYWwgbW9kZSBwcm9tcHQgKi8K LSAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsbXBybXQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAiTW9kZW0gcmVzcG9uc2UgdXBvbiBlbnRlcmluZyBkaWFsIG1vZGUiKSk7Ci0g ICAgICAgICAgY2FzZSBYWURTX1NQOiAgICAgICAgICAgICAgICAgLyogU1BFQUtFUiBPRkYgKi8K LSAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwg MCkgcmV0dXJuKHgpOwotICAgICAgICAgICAgaWYgKHgpCi0gICAgICAgICAgICAgIHJldHVybihk aWFsc3RyKCZkaWFsc3BvbiwiQ29tbWFuZCB0byB0dXJuIG1vZGVtIHNwZWFrZXIgb24iKSk7Ci0g ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsc3BvZmYs IkNvbW1hbmQgdG8gdHVybiBtb2RlbSBzcGVha2VyIG9mZiIpKTsKLQotICAgICAgICAgIGNhc2Ug WFlEU19WTzogICAgICAgICAgICAgICAgIC8qIFZPTFVNRSBMT1cgKi8KLSAgICAgICAgICAgIGlm ICgoeCA9IGNta2V5KHZvbHRhYiwzLCIiLCJtZWRpdW0iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4o eCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICAgICAgY2FzZSAwOgotICAg ICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWx2 b2wxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21tYW5kIGZvciBsb3cgbW9k ZW0gc3BlYWtlciB2b2x1bWUiKSk7Ci0gICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAg ICAgICByZXR1cm4oZGlhbHN0cigmZGlhbHZvbDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAiQ29tbWFuZCBmb3IgbWVkaXVtIG1vZGVtIHNwZWFrZXIgdm9sdW1lIikpOwotCi0gICAgICAg ICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbHZvbDMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgZm9yIGhpZ2ggbW9kZW0g c3BlYWtlciB2b2x1bWUiKSk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgIGNhc2UgWFlEU19JRDog ICAgICAgICAgICAgICAgIC8qIElHTk9SRS1ESUFMVE9ORSAqLwotICAgICAgICAgICAgcmV0dXJu KGRpYWxzdHIoJmRpYWx4MywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21tYW5kIHRv IHRlbGwgbW9kZW0gdG8gaWdub3JlIGRpYWx0b25lIikpOwotCi0gICAgICAgICAgY2FzZSBYWURT X0kyOiAgICAgICAgICAgICAgICAgLyogUFJFRElBTC1JTklUICovCi0gICAgICAgICAgICByZXR1 cm4oZGlhbHN0cigmZGlhbGluaTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tbWFu ZCB0byBzZW5kIHRvIG1vZGVtIGp1c3QgcHJpb3IgdG8gZGlhbGluZyIpKTsKLQotICAgICAgICAg IGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIFNFVCBESUFMIFNUUklO RyBwYXJhbWV0ZXJcbiIpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgWFlERkM6ICAgICAgICAg ICAgICAgICAgICAgICAvKiBESUFMIEZMT1ctQ09OVFJPTCAqLwotICAgICAgICBpZiAoKHkgPSBj bWtleShkaWFsX2ZjLDQsIiIsImF1dG8iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBkaWFsZmMgPSB5 OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFhZRE1USDogeyAg ICAgICAgICAgICAgICAgICAgLyogRElBTCBNRVRIT0QgKi8KLSAgICAgICAgZXh0ZXJuIGludCBk aWFsbWF1dG87Ci0gICAgICAgIGlmICgoeSA9IGNta2V5KGRpYWxfbSxuZGlhbF9tLCIiLCJkZWZh dWx0Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICh5ID09 IFhZRE1fQSkgeyAgICAgICAgICAgICAgLyogQVVUTyAqLwotICAgICAgICAgICAgZGlhbG1hdXRv ID0gMTsgICAgICAgICAgICAgIC8qIGxvY2FsIGNvdW50cnkgY29kZSwgaWYga25vd24uICovCi0g ICAgICAgICAgICBkaWFsbXRoID0gWFlETV9EOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg IGRpYWxtYXV0byA9IDA7ICAgICAgICAgICAgICAgIC8qIHVzZSB0aGUgbWV0aG9kIHNwZWNpZmll ZCAqLwotICAgICAgICAgIGRpYWxtdGggPSB5OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybihz dWNjZXNzID0gMSk7Ci0gICAgICB9Ci0gICAgICBjYXNlIFhZRFJUTToKLSAgICAgICAgeSA9IGNt bnVtKCJOdW1iZXIgb2YgdGltZXMgdG8gdHJ5IGRpYWxpbmcgYSBudW1iZXIiLAotICAgICAgICAg ICAgICAgICAgIjEiLDEwLCZ4LHh4c3RyaW5nKTsKLQl6ID0gc2V0bnVtKCZkaWFscnRyLHgseSwt MSk7Ci0JaWYgKHogPiAtMSAmJiBkaWFscnRyIDwgMCkgewotCSAgICBwcmludGYoIj9Tb3JyeSwg bmVnYXRpdmUgZGlhbCByZXRyaWVzIG5vdCB2YWxpZDogJWRcbiIsZGlhbHJ0cik7Ci0JICAgIHJl dHVybigtOSk7Ci0JfQotICAgICAgICByZXR1cm4oeik7Ci0KLSAgICAgIGNhc2UgWFlESU5UOgot ICAgICAgICB5ID0gY21udW0oIlNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIHJlZGlhbCBhdHRlbXB0 cyIsCi0gICAgICAgICAgICAgICAgICAiMzAiLDEwLCZ4LHh4c3RyaW5nKTsKLSAgICAgICAgeiA9 IHNldG51bSgmZGlhbGludCx4LHksLTEpOwotCWlmICh6ID4gLTEgJiYgZGlhbGludCA8IDApIHsK LQkgICAgcHJpbnRmKCI/U29ycnksIG5lZ2F0aXZlIGRpYWwgaW50ZXJ2YWwgbm90IHZhbGlkOiAl ZFxuIixkaWFsaW50KTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0gICAgICAgIHJldHVybih6KTsK LQotICAgICAgY2FzZSBYWURMQUM6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgQVJFQS1D T0RFICovCi0gICAgICAgIGlmICgoeCA9IGRpYWxzdHIoJmRpYWxsYWMsIkFyZWEgY29kZSB5b3Ug YXJlIGNhbGxpbmcgZnJvbSIpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBp ZiAoZGlhbGxhYykgewotICAgICAgICAgICAgaWYgKCFyZGlnaXRzKGRpYWxsYWMpKSB7Ci0gICAg ICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIGFyZWEgY29kZSBtdXN0IGJlIG51bWVyaWNcbiIp OwotICAgICAgICAgICAgICAgIGlmICgqZGlhbGxhYyA9PSAnKCcpCi0gICAgICAgICAgICAgICAg ICBwcmludGYoIihwbGVhc2Ugb21pdCB0aGUgcGFyZW50aGVzZXMpXG4iKTsKLSAgICAgICAgICAg ICAgICBpZiAoKmRpYWxsYWMgPT0gJy8nKQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCIobm8g c2xhc2hlcywgcGxlYXNlKVxuIik7Ci0gICAgICAgICAgICAgICAgaWYgKGRpYWxsYWMpIGZyZWUo ZGlhbGxhYyk7Ci0gICAgICAgICAgICAgICAgZGlhbGxhYyA9IE5VTEw7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4o eCk7Ci0KLSAgICAgIGNhc2UgWFlEQ05GOiAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GSVJN QVRJT04gKi8KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmZGlhbGNuZikpOwotCi0g ICAgICBjYXNlIFhZRENWVDogICAgICAgICAgICAgICAgICAgICAgLyogQ09OVkVSVC1ESVJFQ1RP UlkgKi8KLSAgICAgICAgaWYgKCh5ID0gY21rZXkoZGNudnRhYiwzLCIiLCJhc2siLHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgZGlhbGN2dCA9IHk7Ci0gICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGNhc2UgWFlETENDOiAgICAgICAgICAgICAg ICAgICAgICAvKiBESUFMIENPVU5UUlktQ09ERSAqLwotICAgICAgICB4ID0gZGlhbHN0cigmZGlh bGxjYywiQ291bnRyeSBjb2RlIHlvdSBhcmUgY2FsbGluZyBmcm9tIik7Ci0gICAgICAgIGlmICh4 IDwgMSkgcmV0dXJuKHgpOwotICAgICAgICBpZiAoZGlhbGxjYykgewotICAgICAgICAgICAgaWYg KCFyZGlnaXRzKGRpYWxsY2MpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIGNv dW50cnkgY29kZSBtdXN0IGJlIG51bWVyaWNcbiIpOwotICAgICAgICAgICAgICAgIGlmICgqZGlh bGxjYyA9PSAnKycpCi0gICAgICAgICAgICAgICAgICBwcmludGYoIihwbGVhc2Ugb21pdCB0aGUg cGx1cyBzaWduKVxuIik7Ci0gICAgICAgICAgICAgICAgaWYgKGRpYWxsY2MpIGZyZWUoZGlhbGxj Yyk7Ci0gICAgICAgICAgICAgICAgZGlhbGxjYyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgcmV0 dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghc3RyY21wKGRpYWxsY2Ms IjEiKSkgeyAvKiBTZXQgZGVmYXVsdHMgZm9yIFVTQSBhbmQgQ2FuYWRhICovCi0gICAgICAgICAg ICAgICAgaWYgKCFkaWFsbGRwKSAgICAgICAgICAgLyogTG9uZy1kaXN0YW5jZSBwcmVmaXggKi8K LSAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmRpYWxsZHAsIjEiKTsKLSAgICAgICAgICAgICAg ICBpZiAoIWRpYWxpeHApICAgICAgICAgICAvKiBJbnRlcm5hdGlvbmFsIGRpYWxpbmcgcHJlZml4 ICovCi0gICAgICAgICAgICAgICAgICBtYWtlc3RyKCZkaWFsaXhwLCIwMTEiKTsKLSAgICAgICAg ICAgICAgICBpZiAobnRvbGxmcmVlID09IDApIHsgICAvKiBUb2xsLWZyZWUgYXJlYSBjb2RlcyAq LwotICAgICAgICAgICAgICAgICAgICBpZiAoKGRpYWx0ZmNbMF0gPSBtYWxsb2MoNCkpKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoZGlhbHRmY1swXSwiODAwIik7IC8qIDE5NzAt c29tZXRoaW5nICovCi0gICAgICAgICAgICAgICAgICAgICAgICBudG9sbGZyZWUrKzsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgoZGlhbHRmY1sxXSA9IG1hbGxvYyg0KSkpIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoZGlhbHRmY1sxXSwiODg4Iik7IC8qIDE5OTYg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudG9sbGZyZWUrKzsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoKGRpYWx0ZmNbMl0gPSBtYWxsb2MoNCkpKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweShkaWFsdGZjWzJdLCI4NzciKTsgLyogNSBB cHJpbCAxOTk4ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50b2xsZnJlZSsr OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGRpYWx0ZmNbM10gPSBtYWxs b2MoNCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoZGlh bHRmY1szXSwiODY2Iik7IC8qIDIwMDA/ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBudG9sbGZyZWUrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICBpZiAoIWRpYWx0ZnApICAgICAgICAgICAvKiBUb2xsLWZyZWUgZGlhbGluZyBwcmVmaXggKi8K LSAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmRpYWx0ZnAsIjEiKTsKLSNpZmRlZiBDT01NRU5U Ci0vKiBUaGUgdGltZSBmb3IgdGhpcyBpcyBwYXN0ICovCi0gICAgICAgICAgICB9IGVsc2UgaWYg KCFzdHJjbXAoZGlhbGxjYywiMzU4IikgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgKChpbnQp IHN0cmNtcCh6em5kYXRlKCksIjE5OTYxMDExIikgPiAwKQotICAgICAgICAgICAgICAgICAgICAg ICApIHsgICAgICAgICAgICAgIC8qIEZpbmxhbmQgKi8KLSAgICAgICAgICAgICAgICBpZiAoIWRp YWxsZHApICAgICAgICAgICAvKiBMb25nLWRpc3RhbmNlIHByZWZpeCAqLwotICAgICAgICAgICAg ICAgICAgbWFrZXN0cigmZGlhbGxkcCwiOSIpOwotICAgICAgICAgICAgICAgIGlmICghZGlhbGl4 cCkgICAgICAgICAgIC8qIEludGVybmF0aW9uYWwgZGlhbGluZyBwcmVmaXggKi8KLSAgICAgICAg ICAgICAgICAgIG1ha2VzdHIoJmRpYWxpeHAsIjk5MCIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBFdmVyeXdoZXJlIGVs c2UgLi4uICovCi0gICAgICAgICAgICAgICAgaWYgKCFkaWFsbGRwKSB7Ci0gICAgICAgICAgICAg ICAgICAgIGlmICgoZGlhbGxkcCA9IG1hbGxvYyg0KSkpCi0gICAgICAgICAgICAgICAgICAgICAg c3RyY3B5KGRpYWxsZHAsIjAiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg aWYgKCFkaWFsaXhwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoZGlhbGl4cCA9IG1hbGxv Yyg0KSkpCi0gICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KGRpYWxpeHAsIjAwIik7Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFzdHJjbXAoZGlh bGxjYywiMzMiKSkgIC8qIEZyYW5jZSAqLwotICAgICAgICAgICAgICBkaWFsZmxkID0gMTsgICAg ICAgICAgICAgIC8qIExvbmctZGlzdGFuY2UgZGlhbGluZyBpcyBmb3JjZWQgKi8KLSAgICAgICAg fQotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFhZRElYUDogICAg ICAgICAgICAgICAgICAgICAgLyogRElBTCBJTlRMLVBSRUZJWCAqLwotICAgICAgICByZXR1cm4o ZGlhbHN0cigmZGlhbGl4cCwiSW50ZXJuYXRpb25hbCBkaWFsaW5nIHByZWZpeCIpKTsKLQotICAg ICAgY2FzZSBYWURJWFM6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgSU5UTC1TVUZGSVgg Ki8KLSAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxpeHMsIkludGVybmF0aW9uYWwgZGlhbGlu ZyBzdWZmaXgiKSk7Ci0KLSAgICAgIGNhc2UgWFlETERQOiAgICAgICAgICAgICAgICAgICAgICAv KiBESUFMIExELVBSRUZJWCAqLwotICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbGxkcCwiTG9u Zy1kaXN0YW5jZSBkaWFsaW5nIHByZWZpeCIpKTsKLQotICAgICAgY2FzZSBYWURMRFM6ICAgICAg ICAgICAgICAgICAgICAgIC8qIERJQUwgTEQtU1VGRklYICovCi0gICAgICAgIHJldHVybihkaWFs c3RyKCZkaWFsbGRzLCJMb25nLWRpc3RhbmNlIGRpYWxpbmcgc3VmZml4IikpOwotCi0gICAgICBj YXNlIFhZRExDUDogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBMQy1QUkVGSVggKi8KLSAg ICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxsY3AsIkxvY2FsIGRpYWxpbmcgcHJlZml4IikpOwot Ci0gICAgICBjYXNlIFhZRExDUzogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBMQy1TVUZG SVggKi8KLSAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxsY3MsIkxvY2FsIGRpYWxpbmcgc3Vm Zml4IikpOwotCi0jaWZkZWYgQ09NTUVOVAotICAgICAgY2FzZSBYWURQWFg6ICAgICAgICAgICAg ICAgICAgICAgIC8qIERJQUwgUEJYLUVYQ0hBTkdFICovCi0gICAgICAgIHJldHVybihkaWFsc3Ry KCZkaWFscHh4LCJFeGNoYW5nZSBvZiBQQlggeW91IGFyZSBjYWxsaW5nIGZyb20iKSk7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotCi0gICAgICBjYXNlIFhZRFBYSTogeyAgICAgICAgICAgICAgICAg ICAgLyogRElBTCBQQlgtSU5URVJOQUwtUFJFRklYICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAg ICAgIHJldHVybihkaWFsc3RyKCZkaWFscHhpLAotICAgICAgICAgICAgICAgICAgICAgICAiSW50 ZXJuYWwtY2FsbCBwcmVmaXggb2YgUEJYIHlvdSBhcmUgY2FsbGluZyBmcm9tIikpOwotI2Vsc2UK LSAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICBpZiAoKHggPSBjbXR4dCgiSW50ZXJuYWwtY2Fs bCBwcmVmaXggb2YgUEJYIHlvdSBhcmUgY2FsbGluZyBmcm9tIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAiIiwmcyxOVUxMKSkgPCAwKSAvKiBEb24ndCBldmFsdWF0ZSAqLwotICAgICAgICAg ICAgcmV0dXJuKHgpOwotI2lmbmRlZiBOT1NQTAotICAgICAgICAgIGlmICgqcykgewotICAgICAg ICAgICAgICBjaGFyIGMsICogcCA9IHRtcGJ1ZjsKLSAgICAgICAgICAgICAgaWYgKCpzID09ICdc XCcpIHsKLSAgICAgICAgICAgICAgICAgIGMgPSAqKHMrMSk7Ci0gICAgICAgICAgICAgICAgICBp ZiAoaXN1cHBlcihjKSkgYyA9IHRvbG93ZXIoYyk7Ci0gICAgICAgICAgICAgICAgICBpZiAoYyAh PSAnZicgJiYKLSAgICAgICAgICAgICAgICAgICAgICBja3N0cmNtcChzLCJcXHYoZCRweCkiLDgs MCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICBja3N0cmNtcChzLCJcXHYoZCRweHgpIiw5LDAp ICYmCi0gICAgICAgICAgICAgICAgICAgICAgY2tzdHJjbXAocywiXFx2KGQkcCkiLDcsMCkpIHsK LSAgICAgICAgICAgICAgICAgICAgICB4ID0gVE1QQlVGU0laOwotICAgICAgICAgICAgICAgICAg ICAgIHp6c3RyaW5nKHMsJnAsJngpOwotICAgICAgICAgICAgICAgICAgICAgIHMgPSB0bXBidWY7 Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0jZW5k aWYgLyogTk9TUEwgKi8KLSAgICAgICAgICBtYWtlc3RyKCZkaWFscHhpLHMpOwotICAgICAgICAg IHJldHVybigxKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgIGNhc2Ug WFlEUFhPOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIFBCWC1PVVRTSURFLVBSRUZJWCAq LwotICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbHB4bywKLSAgICAgICAgICAgICAgICAgICAg ICAgIk91dHNpZGUtbGluZSBwcmVmaXggb2YgUEJYIHlvdSBhcmUgY2FsbGluZyBmcm9tIikpOwot Ci0gICAgICBjYXNlIFhZRFNGWDogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBJTlRMLVNV RkZJWCAqLwotICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbHNmeCwiIFRlbGVwaG9uZSBudW1i ZXIgc3VmZml4IGZvciBkaWFsaW5nIikpOwotCi0gICAgICBjYXNlIFhZRFNSVDogICAgICAgICAg ICAgICAgICAgICAgLyogRElBTCBTT1JUICovCi0gICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0 b24oJmRpYWxzcnQpKTsKLQotICAgICAgY2FzZSBYWURQWFg6ICAgICAgICAgICAgICAgICAgICAg IC8qIERJQUwgUEJYLUVYQ0hBTkdFICovCi0gICAgICBjYXNlIFhZRFRGQzogeyAgICAgICAgICAg ICAgICAgICAgLyogRElBTCBUT0xMLUZSRUUtQVJFQS1DT0RFICAqLwotICAgICAgICAgIGludCBu LCBpOyAgICAgICAgICAgICAgICAgICAgIC8qICh6ZXJvIG9yIG1vcmUgb2YgdGhlbS4uLikgKi8K LSAgICAgICAgICBjaGFyICogcFtNQVhUT0xMRlJFRV07ICAgICAgICAvKiBUZW1wb3JhcnkgcG9p bnRlcnMgKi8KLSAgICAgICAgICBjaGFyICogbTsKLSAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwg TUFYVE9MTEZSRUU7IG4rKykgewotICAgICAgICAgICAgICBpZiAobiA9PSAwKSB7Ci0gICAgICAg ICAgICAgICAgICBtID0gKHkgPT0gWFlEVEZDKSA/Ci0gICAgICAgICAgICAgICAgICAiVG9sbC1m cmVlIGFyZWEgY29kZShzKSBpbiB0aGUgY291bnRyeSB5b3UgYXJlIGNhbGxpbmcgZnJvbSIKLSAg ICAgICAgICAgICAgICAgICAgOiAiRXhjaGFuZ2Uocykgb2YgUEJYIHlvdSBhcmUgY2FsbGluZyBm cm9tIjsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIG0gPSAoeSA9 PSBYWURURkMpID8KLSAgICAgICAgICAgICAgICAgICAgIkFub3RoZXIgdG9sbC1mcmVlIGFyZWEg Y29kZSIKLSAgICAgICAgICAgICAgICAgICAgICA6ICJBbm90aGVyIFBCWCBleGNoYW5nZSI7Ci0g ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQobSwiIiwmcyx4eHN0 cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgaWYgKHMp IHsKLSAgICAgICAgICAgICAgICAgIGludCBrOwotICAgICAgICAgICAgICAgICAgayA9IChpbnQp IHN0cmxlbihzKTsKLSAgICAgICAgICAgICAgICAgIGlmIChrID4gMCkgewotICAgICAgICAgICAg ICAgICAgICAgIGlmICgocFtuXSA9IG1hbGxvYyhrICsgMSkpKQotICAgICAgICAgICAgICAgICAg ICAgICAgc3RyY3B5KHBbbl0sIHMpOyAvKiBzYWZlICovCi0gICAgICAgICAgICAgICAgICB9IGVs c2UgYnJlYWs7Ci0gICAgICAgICAgICAgIH0gZWxzZSBicmVhazsKLSAgICAgICAgICB9Ci0gICAg ICAgICAgaWYgKHggPT0gLTMpIHsgICAgICAgICAgICAgICAgLyogQ29tbWFuZCB3YXMgc3VjY2Vz c2Z1bCAqLwotICAgICAgICAgICAgICBpbnQgbTsKLSAgICAgICAgICAgICAgbSA9ICh5ID09IFhZ RFRGQykgPyBudG9sbGZyZWUgOiBuZGlhbHB4eDsKLSAgICAgICAgICAgICAgaWYgKCh4ID0gY21j Zm0oKSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgeCA9 IDE7Ci0gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHsgLyogUmVtb3ZlIG9s ZCBsaXN0LCBpZiBhbnkgKi8KLSAgICAgICAgICAgICAgICAgIGlmICAoeSA9PSBYWURURkMpCi0g ICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihkaWFsdGZjW2ldKSxOVUxMKTsKLSAgICAgICAg ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKGRpYWxweHhbaV0p LE5VTEwpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmICAoeSA9PSBYWURURkMp Ci0gICAgICAgICAgICAgICAgbnRvbGxmcmVlID0gbjsgICAgICAgICAgLyogTmV3IGNvdW50ICov Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZGlhbHB4eCA9IG47Ci0gICAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsgLyogTmV3IGxpc3QgKi8KLSAgICAg ICAgICAgICAgICAgIGlmICAoeSA9PSBYWURURkMpCi0gICAgICAgICAgICAgICAgICAgIG1ha2Vz dHIoJihkaWFsdGZjW2ldKSxwW2ldKTsKLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg ICAgICAgICAgICAgbWFrZXN0cigmKGRpYWxweHhbaV0pLHBbaV0pOwotICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgIHggPSAxOwotICAgICAgICAgIH0KLSAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgaWYgKHBbaV0pIGZyZWUocFtpXSk7Ci0gICAgICAg ICAgcmV0dXJuKHgpOwotICAgICAgfQotCi0gICAgICBjYXNlIFhZRFRGUDogICAgICAgICAgICAg ICAgICAgICAgLyogVE9MTC1GUkVFLVBSRUZJWCAqLwotICAgICAgICByZXR1cm4oZGlhbHN0cigm ZGlhbHRmcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIiBMb25nLWRpc3RhbmNlIHByZWZpeCBm b3IgdG9sbC1mcmVlIGRpYWxpbmciKSk7Ci0KLSAgICAgIGNhc2UgWFlEQ09OOiAgICAgICAgICAg ICAgICAgICAgICAvKiBDT05ORUNUICovCi0gICAgICAgIHogPSAtMTsKLSAgICAgICAgaWYgKCh5 ID0gY21rZXkoY3JydGFiLG5jcnIsIiIsImF1dG8iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7 Ci0gICAgICAgIGlmICh5ICE9IENBUl9PRkYpICAgICAgICAgICAgICAgLyogQVVUTyBvciBPTj8g Ki8KLSAgICAgICAgICBpZiAoKHogPSBjbWtleShxdnRhYixucXZ0LCIiLCJ2ZXJib3NlIix4eHN0 cmluZykpIDwgMCkgcmV0dXJuKHopOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJl dHVybih4KTsKLSAgICAgICAgaWYgKHogPiAtMSkKLSAgICAgICAgICBkaWFsY3EgPSB6OwotICAg ICAgICBkaWFsY29uID0geTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAg Y2FzZSBYWURSU1RSOiAgICAgICAgICAgICAgICAgICAgIC8qIFJFU1RSSUNUICovCi0gICAgICAg IGlmICgoeSA9IGNta2V5KGRyc3RydGFiLDQsIiIsIm5vbmUiLHh4c3RyaW5nKSkgPCAwKSByZXR1 cm4oeSk7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAg ICBkaWFscnN0ciA9IHk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGNh c2UgWFlETExBQzogeyAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBhcmVhLWNvZGUgbGlzdCAg Ki8KLSAgICAgICAgICBpbnQgbiwgaTsgICAgICAgICAgICAgICAgICAgICAvKiAoemVybyBvciBt b3JlIG9mIHRoZW0uLi4pICovCi0gICAgICAgICAgY2hhciAqIHBbTUFYTE9DQUxBQ107IC8qIFRl bXBvcmFyeSBwb2ludGVycyAqLwotICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBNQVhMT0NBTEFD OyBuKyspIHsKLSAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoCi0gICAgICAgICAgICAgICAg ICAgICJBcmVhIGNvZGUgdG8gd2hpY2ggY2FsbHMgZnJvbSB5b3VyIGFyZWEgYXJlIGxvY2FsIiwK LSAgICAgICAgICAgICAgICAgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGlmIChzKSB7Ci0gICAgICAgICAgICAgICAgICBp bnQgazsKLSAgICAgICAgICAgICAgICAgIGsgPSAoaW50KSBzdHJsZW4ocyk7Ci0gICAgICAgICAg ICAgICAgICBpZiAoayA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoKHBbbl0gPSBt YWxsb2MoayArIDEpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweShwW25dLCBzKTsg Lyogc2FmZSAqLwotICAgICAgICAgICAgICAgICAgfSBlbHNlIGJyZWFrOwotICAgICAgICAgICAg ICB9IGVsc2UgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICh4ID09IC0zKSB7ICAg ICAgICAgICAgICAgIC8qIENvbW1hbmQgd2FzIHN1Y2Nlc3NmdWwgKi8KLSAgICAgICAgICAgICAg aWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAg ICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5sb2NhbGFjOyBpKyspIC8qIFJlbW92ZSBvbGQgbGlz dCwgaWYgYW55ICovCi0gICAgICAgICAgICAgICAgaWYgKGRpYWxsY2FjW2ldKSB7Ci0gICAgICAg ICAgICAgICAgICAgIGZyZWUoZGlhbGxjYWNbaV0pOwotICAgICAgICAgICAgICAgICAgICBkaWFs bGNhY1tpXSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBubG9jYWxh YyA9IG47ICAgICAgICAgICAgIC8qIE5ldyBjb3VudCAqLwotICAgICAgICAgICAgICBmb3IgKGkg PSAwOyBpIDwgbmxvY2FsYWM7IGkrKykgLyogTmV3IGxpc3QgKi8KLSAgICAgICAgICAgICAgICBk aWFsbGNhY1tpXSA9IHBbaV07Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0g ICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgZXJyb3IsIHVu ZG8gZXZlcnl0aGluZyAqLwotICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQot ICAgICAgICAgICAgICAgIGlmIChwW2ldKSBmcmVlKHBbaV0pOwotICAgICAgICAgICAgICByZXR1 cm4oeCk7Ci0gICAgICAgICAgfQotICAgICAgfQotCi0gICAgICBjYXNlIFhZREZMRDoKLSAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmZGlhbGZsZCkpOwotCi0gICAgICBjYXNlIFhZRElE VDogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBJR05PUkUtRElBTFRPTkUgKi8KLSAgICAg ICAgcmV0dXJuKHNldG9uKCZkaWFsaWR0KSk7Ci0KLSAgICAgIGNhc2UgWFlEUEFDOgotICAgICAg ICB5ID0gY21udW0oCi0gICAgICAgICAgICAgICJNaWxsaXNlY29uZHMgdG8gcGF1c2UgYmV0d2Vl biBlYWNoIGNoYXJhY3RlciBzZW50IHRvIGRpYWxlciIsCi0gICAgICAgICAgICAgICAgICAiIiwx MCwmeCx4eHN0cmluZyk7Ci0gICAgICAgIHJldHVybihzZXRudW0oJmRpYWxwYWNlLHgseSw5OTk5 KSk7Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICAgIGNhc2UgWFlETUFDOgotICAgICAgICBpZiAoKHgg PSBjbWZsZCgiTmFtZSBvZiBtYWNybyB0byBleGVjdXRlIGp1c3QgcHJpb3IgdG8gZGlhbGluZyIs Ci0gICAgICAgICAgICAgICAgICAgICAgICIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAg ICAgICBpZiAoeCA9PSAtMykKLSAgICAgICAgICAgICAgcyA9IE5VTEw7Ci0gICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgfQotICAgICAgICBpZiAocykg ewotICAgICAgICAgICAgaWYgKCEqcykgewotICAgICAgICAgICAgICAgIHMgPSBOVUxMOwotICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJV RlNJWik7Ci0gICAgICAgICAgICAgICAgcyA9IGxpbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgbWFrZXN0cigmZGlhbG1hYyxzKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgICBjYXNlIFhZRFBVQ0M6ICAgICAgICAgICAg ICAgICAgICAgLyogUHVsc2UgY291bnRyeSBjb2RlcyAqLwotICAgICAgY2FzZSBYWURUT0NDOiB7 ICAgICAgICAgICAgICAgICAgIC8qIFRvbmUgY291bnRyeSBjb2RlcyAqLwotICAgICAgICAgIGlu dCBuLCBpOwotICAgICAgICAgIGNoYXIgKiBwW01BWFRQQ0NdOwotICAgICAgICAgIGNoYXIgKiBt OwotICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBNQVhUUENDOyBuKyspIHsKLSAgICAgICAgICAg ICAgaWYgKG4gPT0gMCkgewotICAgICAgICAgICAgICAgICAgbSA9ICh5ID09IFhZRFBVQ0MpID8K LSAgICAgICAgICAgICAgICAgICJDb3VudHJ5IGNvZGUgd2hlcmUgUHVsc2UgZGlhbGluZyBpcyBy ZXF1aXJlZCIKLSAgICAgICAgICAgICAgICAgICAgOiAiQ291bnRyeSBjb2RlIHdoZXJlIFRvbmUg ZGlhbGluZyBpcyBhdmFpbGFibGUiOwotICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg ICAgICBtID0gIkFub3RoZXIgY291bnRyeSBjb2RlIjsKLSAgICAgICAgICAgICAgaWYgKCh4ID0g Y21mbGQobSwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgaWYgKHMpIHsKLSAgICAgICAgICAgICAgICAgIGludCBrOwotICAgICAgICAg ICAgICAgICAgayA9IChpbnQpIHN0cmxlbihzKTsKLSAgICAgICAgICAgICAgICAgIGlmIChrID4g MCkgewotICAgICAgICAgICAgICAgICAgICAgIGlmICgocFtuXSA9IG1hbGxvYyhrICsgMSkpKQot ICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHBbbl0sIHMpOyAvKiBzYWZlICovCi0gICAg ICAgICAgICAgICAgICB9IGVsc2UgYnJlYWs7Ci0gICAgICAgICAgICAgIH0gZWxzZSBicmVhazsK LSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHggPT0gLTMpIHsgICAgICAgICAgICAgICAgLyog Q29tbWFuZCB3YXMgc3VjY2Vzc2Z1bCAqLwotICAgICAgICAgICAgICBpbnQgbTsKLSAgICAgICAg ICAgICAgbSA9ICh5ID09IFhZRFBVQ0MpID8gbmRpYWxwdWNjIDogbmRpYWx0b2NjOwotICAgICAg ICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgp OwotICAgICAgICAgICAgICB4ID0gMTsKLSAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG07 IGkrKykgeyAvKiBSZW1vdmUgb2xkIGxpc3QsIGlmIGFueSAqLwotICAgICAgICAgICAgICAgICAg aWYgKHkgPT0gWFlEUFVDQykKLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKGRpYWxwdWNj W2ldKSxOVUxMKTsKLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg bWFrZXN0cigmKGRpYWx0b2NjW2ldKSxOVUxMKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICBpZiAoeSA9PSBYWURQVUNDKSB7Ci0gICAgICAgICAgICAgICAgICBuZGlhbHB1Y2MgPSBu OyAgICAgICAgICAgICAgICAvKiBOZXcgY291bnQgKi8KLSAgICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICAgIG5kaWFsdG9jYyA9IG47Ci0gICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeyAvKiBOZXcgbGlzdCAqLwotICAgICAg ICAgICAgICAgICAgaWYgKHkgPT0gWFlEUFVDQykgewotICAgICAgICAgICAgICAgICAgICAgIG1h a2VzdHIoJihkaWFscHVjY1tpXSkscFtpXSk7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihkaWFsdG9jY1tpXSkscFtpXSk7Ci0gICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgeCA9IDE7Ci0g ICAgICAgICAgfQotICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAg ICBpZiAocFtpXSkgZnJlZShwW2ldKTsKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICB9Ci0g ICAgICBjYXNlIFhZRFRFU1Q6Ci0gICAgICAgIHJldHVybihzZXRvbigmZGlhbHRlc3QpKTsKLQot ICAgICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBTRVQgRElBTCBwYXJh bWV0ZXJcbiIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLX0KLQotI2lmbmRlZiBOT1NI T1cKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTSE9XIE1PREVN ICovCi1zaG9tb2RlbSgpIHsKLSAgICBNRE1JTkYgKiBwOwotICAgIGludCB4LCBuLCBtZG07Ci0g ICAgY2hhciBjOwotICAgIGxvbmcgeno7Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVy KSB7Ci0gICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWRcclxuIik7Ci0gICAg ICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotICAg IHNobWRtbGluKCk7Ci0gICAgcHJpbnRmKCJcbiIpOwotCi0gICAgbWRtID0gKG1kbXR5cCA+IDAp ID8gbWRtdHlwIDogbWRtc2F2OwotICAgIHAgPSAobWRtID4gMCkgPyBtb2RlbXBbbWRtXSA6IE5V TEw7Ci0KLSAgICBpZiAocCkgewotICAgICAgICBwcmludGYoIiAlc1xuXG4iLCBkaWFsbmFtZSA/ IGRpYWxuYW1lIDogcC0+bmFtZSk7Ci0KLSAgICAgICAgcHJpbnRmKCIgTW9kZW0gY2FwYWJpbGl0 aWVzOiAgICAiKTsKLSAgICAgICAgenogPSBkaWFsY2FwYXMgPyBkaWFsY2FwYXMgOiBwLT5jYXBh czsKLSAgICAgICAgaWYgKCF6eikgewotICAgICAgICAgICAgcHJpbnRmKCIgKG5vbmUpIik7Ci0g ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoenogJiBDS0RfQVQpIHByaW50ZigiIEFU Iik7Ci0gICAgICAgICAgICBpZiAoenogJiBDS0RfVjI1KSBwcmludGYoIiBJVFUiKTsKLSAgICAg ICAgICAgIGlmICh6eiAmIENLRF9TQikgcHJpbnRmKCIgU0IiKTsKLSAgICAgICAgICAgIGlmICh6 eiAmIENLRF9FQykgcHJpbnRmKCIgRUMiKTsKLSAgICAgICAgICAgIGlmICh6eiAmIENLRF9EQykg cHJpbnRmKCIgREMiKTsKLSAgICAgICAgICAgIGlmICh6eiAmIENLRF9IVykgcHJpbnRmKCIgSFdG QyIpOwotICAgICAgICAgICAgaWYgKHp6ICYgQ0tEX1NXKSBwcmludGYoIiBTV0ZDIik7Ci0gICAg ICAgICAgICBpZiAoenogJiBDS0RfS1MpIHByaW50ZigiIEtTIik7Ci0gICAgICAgICAgICBpZiAo enogJiBDS0RfVEIpIHByaW50ZigiIFRCIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCJc biBNb2RlbSBjYXJyaWVyLXdhdGNoOiAgICAiKTsKLSAgICAgICAgaWYgKGNhcnJpZXIgPT0gQ0FS X09GRikgcHJpbnRmKCJvZmZcbiIpOwotICAgICAgICBlbHNlIGlmIChjYXJyaWVyID09IENBUl9P TikgcHJpbnRmKCJvblxuIik7Ci0gICAgICAgIGVsc2UgaWYgKGNhcnJpZXIgPT0gQ0FSX0FVVCkg cHJpbnRmKCJhdXRvXG4iKTsKLSAgICAgICAgZWxzZSBwcmludGYoInVua25vd25cbiIpOwotCi0g ICAgICAgIHByaW50ZigiIE1vZGVtIG1heGltdW0tc3BlZWQ6ICAgICIpOwotICAgICAgICB6eiA9 IChkaWFsbWF4ID4gMEwpID8gZGlhbG1heCA6IHAtPm1heF9zcGVlZDsKLSAgICAgICAgaWYgKHp6 ID4gMCkKLSAgICAgICAgICBwcmludGYoIiVsZCBicHNcbiIsIHp6KTsKLSAgICAgICAgZWxzZQot ICAgICAgICAgIHByaW50ZigiKHVua25vd24pXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgTW9kZW0g ZXJyb3ItY29ycmVjdGlvbjogJXNcbiIsIGRpYWxlYyA/ICJvbiIgOiAib2ZmIik7Ci0gICAgICAg IHByaW50ZigiIE1vZGVtIGNvbXByZXNzaW9uOiAgICAgICVzXG4iLCBkaWFsZGMgPyAib24iIDog Im9mZiIpOwotICAgICAgICBwcmludGYoIiBNb2RlbSBzcGVlZC1tYXRjaGluZzogICAlcyIsICAg bWRtc3BkID8gIm9uIiA6ICJvZmYiKTsKLSAgICAgICAgcHJpbnRmKCIgKGludGVyZmFjZSBzcGVl ZCAlcylcbiIsIG1kbXNwZCA/ICJjaGFuZ2VzIiA6ICJpcyBsb2NrZWQiKTsKLSAgICAgICAgcHJp bnRmKCIgTW9kZW0gZmxvdy1jb250cm9sOiAgICAgIik7Ci0gICAgICAgIGlmIChkaWFsZmMgPT0g RkxPX05PTkUpIHByaW50Zigibm9uZVxuIik7Ci0gICAgICAgIGVsc2UgaWYgKGRpYWxmYyA9PSBG TE9fWE9OWCkgcHJpbnRmKCJ4b24veG9mZlxuIik7Ci0gICAgICAgIGVsc2UgaWYgKGRpYWxmYyA9 PSBGTE9fUlRTQykgcHJpbnRmKCJydHMvY3RzXG4iKTsKLSAgICAgICAgZWxzZSBpZiAoZGlhbGZj ID09IEZMT19BVVRPKSBwcmludGYoImF1dG9cbiIpOwotICAgICAgICBwcmludGYoIiBNb2RlbSBo YW5ndXAtbWV0aG9kOiAgICAlc1xuIiwKLSAgICAgICAgICAgICAgIGRpYWxtaHUgPwotICAgICAg ICAgICAgICAgIm1vZGVtLWNvbW1hbmQiIDoKLSAgICAgICAgICAgICAgICJyczIzMi1zaWduYWwi Ci0gICAgICAgICAgICAgICApOwotICAgICAgICBwcmludGYoIiBNb2RlbSBzcGVha2VyOiAgICAg ICAgICAlc1xuIiwgc2hvd29mZihtZG1zcGspKTsKLSAgICAgICAgcHJpbnRmKCIgTW9kZW0gdm9s dW1lOiAgICAgICAgICAgJXNcbiIsCi0gICAgICAgICAgICAgICAobWRtdm9sID09IDIpID8gIm1l ZGl1bSIgOiAoKG1kbXZvbCA8PSAxKSA/ICJsb3ciIDogImhpZ2giKSk7Ci0gICAgICAgIHByaW50 ZigiIE1vZGVtIGtlcm1pdC1zcG9vZjogICAgICVzXG4iLCBkaWFsa3NwID8gIm9uIiA6ICJvZmYi KTsKLSAgICAgICAgYyA9IChjaGFyKSAoeCA9IChkaWFsZXNjID8gZGlhbGVzYyA6IHAtPmVzY19j aGFyKSk7Ci0gICAgICAgIHByaW50ZigiIE1vZGVtIGVzY2FwZS1jaGFyYWN0ZXI6ICVkIiwgeCk7 Ci0gICAgICAgIGlmIChpc3ByaW50KGMpKQotICAgICAgICAgIHByaW50ZigiICg9IFwiJWNcIiki LGMpOwotICAgICAgICBwcmludGYoCi0iXG5cbk1PREVNIENPTU1BTkRzICgqID0gc2V0IGF1dG9t YXRpY2FsbHkgYnkgU0VUIE1PREVNIFRZUEUpOlxuXG4iKTsKLSAgICAgICAgZGVidWcoRjExMCwi c2hvdyBkaWFsaW5pIixkaWFsaW5pLDApOwotICAgICAgICBwcmludGYoIiAlYyBJbml0LXN0cmlu ZzogICAgICAgICAgIiwgZGlhbGluaSA/ICcgJyA6ICcqJyApOwotICAgICAgICBzaG9kcyhkaWFs aW5pID8gZGlhbGluaSA6IHAtPndha2Vfc3RyKTsKLSAgICAgICAgcHJpbnRmKCIgJWMgRGlhbC1t b2RlLXN0cmluZzogICAgICIsIGRpYWxtc3RyID8gJyAnIDogJyonICk7Ci0gICAgICAgIHNob2Rz KGRpYWxtc3RyID8gZGlhbG1zdHIgOiBwLT5kbW9kZV9zdHIpOwotICAgICAgICBuID0gbG9jYWwg PyAxOSA6IDIwOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICBwcmludGYoIiAlYyBEaWFsLW1vZGUt cHJvbXB0OiAgICAgIiwgZGlhbG1wcm10ID8gJyAnIDogJyonICk7Ci0gICAgICAgIHNob2RzKGRp YWxtcHJtdCA/IGRpYWxtcHJtdCA6IHAtPmRtb2RlX3Byb21wdCk7Ci0gICAgICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0g ICAgICAgIHByaW50ZigiICVjIERpYWwtY29tbWFuZDogICAgICAgICAiLCBkaWFsY21kID8gJyAn IDogJyonICk7Ci0gICAgICAgIHNob2RzKGRpYWxjbWQgPyBkaWFsY21kIDogcC0+ZGlhbF9zdHIp OwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDApOyBlbHNlIG4gPSAwOwotICAgICAgICBwcmludGYoIiAlYyBDb21wcmVzc2lvbiBvbjogICAg ICAgIiwgZGlhbGRjb24gPyAnICcgOiAnKicgKTsKLSAgICAgICAgaWYgKCFkaWFsZGNvbikKLSAg ICAgICAgICBkZWJ1ZyhGMTEwLCJkaWFsZGNvbiIsIihudWxsKSIsMCk7Ci0gICAgICAgIGVsc2UK LSAgICAgICAgICBkZWJ1ZyhGMTEwLCJkaWFsZGNvbiIsZGlhbGRjb24sMCk7Ci0gICAgICAgIHNo b2RzKGRpYWxkY29uID8gZGlhbGRjb24gOiBwLT5kY19vbl9zdHIpOwotICAgICAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwot ICAgICAgICBwcmludGYoIiAlYyBDb21wcmVzc2lvbiBvZmY6ICAgICAgIiwgZGlhbGRjb2ZmID8g JyAnIDogJyonICk7Ci0gICAgICAgIHNob2RzKGRpYWxkY29mZiA/IGRpYWxkY29mZiA6IHAtPmRj X29mZl9zdHIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICBwcmludGYoIiAlYyBFcnJvci1jb3Jy ZWN0aW9uIG9uOiAgIiwgZGlhbGVjb24gPyAnICcgOiAnKicgKTsKLSAgICAgICAgc2hvZHMoZGlh bGVjb24gPyBkaWFsZWNvbiA6IHAtPmVjX29uX3N0cik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAg IHByaW50ZigiICVjIEVycm9yLWNvcnJlY3Rpb24gb2ZmOiAiLCBkaWFsZWNvZmYgPyAnICcgOiAn KicgKTsKLSAgICAgICAgc2hvZHMoZGlhbGVjb2ZmID8gZGlhbGVjb2ZmIDogcC0+ZWNfb2ZmX3N0 cik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIHByaW50ZigiICVjIEF1dG9hbnN3ZXIgb246ICAg ICAgICAiLCBkaWFsYWFvbiA/ICcgJyA6ICcqJyApOwotICAgICAgICBzaG9kcyhkaWFsYWFvbiA/ IGRpYWxhYW9uIDogcC0+YWFfb25fc3RyKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgcHJpbnRm KCIgJWMgQXV0b2Fuc3dlciBvZmY6ICAgICAgICIsIGRpYWxhYW9mZiA/ICcgJyA6ICcqJyApOwot ICAgICAgICBzaG9kcyhkaWFsYWFvZmYgPyBkaWFsYWFvZmYgOiBwLT5hYV9vZmZfc3RyKTsKLSAg ICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKLQotICAgICAgICBwcmludGYoIiAlYyBTcGVha2VyIG9uOiAgICAgICAgICAg IiwgZGlhbHNwb24gPyAnICcgOiAnKicgKTsKLSAgICAgICAgc2hvZHMoZGlhbHNwb24gPyBkaWFs c3BvbiA6IHAtPnNwX29uX3N0cik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIHByaW50ZigiICVj IFNwZWFrZXIgb2ZmOiAgICAgICAgICAiLCBkaWFsc3BvZmYgPyAnICcgOiAnKicgKTsKLSAgICAg ICAgc2hvZHMoZGlhbHNwb2ZmID8gZGlhbHNwb2ZmIDogcC0+c3Bfb2ZmX3N0cik7Ci0gICAgICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2Ug biA9IDA7Ci0gICAgICAgIHByaW50ZigiICVjIFZvbHVtZSBsb3c6ICAgICAgICAgICAiLCBkaWFs dm9sMSA/ICcgJyA6ICcqJyApOwotICAgICAgICBzaG9kcyhkaWFsdm9sMSA/IGRpYWx2b2wxIDog cC0+dm9sMV9zdHIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICBwcmludGYoIiAlYyBWb2x1bWUg bWVkaXVtOiAgICAgICAgIiwgZGlhbHZvbDIgPyAnICcgOiAnKicgKTsKLSAgICAgICAgc2hvZHMo ZGlhbHZvbDIgPyBkaWFsdm9sMiA6IHAtPnZvbDJfc3RyKTsKLSAgICAgICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAg ICAgcHJpbnRmKCIgJWMgVm9sdW1lIGhpZ2g6ICAgICAgICAgICIsIGRpYWx2b2wzID8gJyAnIDog JyonICk7Ci0gICAgICAgIHNob2RzKGRpYWx2b2wzID8gZGlhbHZvbDMgOiBwLT52b2wzX3N0cik7 Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4o MCk7IGVsc2UgbiA9IDA7Ci0KLSAgICAgICAgcHJpbnRmKCIgJWMgSGFuZ3VwLWNvbW1hbmQ6ICAg ICAgICIsIGRpYWxoY21kID8gJyAnIDogJyonICk7Ci0gICAgICAgIHNob2RzKGRpYWxoY21kID8g ZGlhbGhjbWQgOiBwLT5odXBfc3RyKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgcHJpbnRmKCIg JWMgSGFyZHdhcmUtZmxvdzogICAgICAgICIsIGRpYWxod2ZjID8gJyAnIDogJyonICk7Ci0gICAg ICAgIHNob2RzKGRpYWxod2ZjID8gZGlhbGh3ZmMgOiBwLT5od2ZjX3N0cik7Ci0gICAgICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9 IDA7Ci0gICAgICAgIHByaW50ZigiICVjIFNvZnR3YXJlLWZsb3c6ICAgICAgICAiLCBkaWFsc3dm YyA/ICcgJyA6ICcqJyApOwotICAgICAgICBzaG9kcyhkaWFsc3dmYyA/IGRpYWxzd2ZjIDogcC0+ c3dmY19zdHIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICBwcmludGYoIiAlYyBOby1mbG93LWNv bnRyb2w6ICAgICAgIiwgZGlhbG5vZmMgPyAnICcgOiAnKicgKTsKLSAgICAgICAgc2hvZHMoZGlh bG5vZmMgPyBkaWFsbm9mYyA6IHAtPm5vZmNfc3RyKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAg cHJpbnRmKCIgJWMgUHVsc2U6ICAgICAgICAgICAgICAgICIsIGRpYWxwdWxzZSA/ICcgJyA6ICcq Jyk7Ci0gICAgICAgIHNob2RzKGRpYWxwdWxzZSA/IGRpYWxwdWxzZSA6IHAtPnB1bHNlKTsKLSAg ICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKLSAgICAgICAgcHJpbnRmKCIgJWMgVG9uZTogICAgICAgICAgICAgICAgICIs IGRpYWx0b25lID8gJyAnIDogJyonKTsKLSAgICAgICAgc2hvZHMoZGlhbHRvbmUgPyBkaWFsdG9u ZSA6IHAtPnRvbmUpOwotCi0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIHByaW50ZigiICVjIElnbm9y ZS1kaWFsdG9uZTogICAgICAiLCBkaWFseDMgPyAnICcgOiAnKicpOwotICAgICAgICBzaG9kcyhk aWFseDMgPyBkaWFseDMgOiBwLT5pZ25vcmVkdCk7Ci0KLSAgICAgICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAg cHJpbnRmKCIgJWMgUHJlZGlhbC1pbml0OiAgICAgICAgICIsIGRpYWxpbmkyID8gJyAnIDogJyon KTsKLSAgICAgICAgc2hvZHMoZGlhbGluaTIgPyBkaWFsaW5pMiA6IHAtPmluaTIpOwotCi0gICAg ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDQpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVs c2UgbiA9IDA7Ci0gICAgICAgIHByaW50ZigiXG4gRm9yIG1vcmUgaW5mbzogU0hPVyBESUFMIGFu ZCBTSE9XIENPTU1VTklDQVRJT05TXG4iKTsKLQotICAgIH0gZWxzZSBpZiAobWRtID4gMCkgewot ICAgICAgICBwcmludGYoIk1vZGVtIGluZm8gZm9yIFwiJXNcIiBub3QgZmlsbGVkIGluIHlldFxu IiwgZ21kbXR5cCgpKTsKLSAgICB9IGVsc2UgcHJpbnRmKAotIiBObyBtb2RlbSBzZWxlY3RlZCwg c28gRElBTCBhbmQgbW9zdCBTRVQgTU9ERU0gY29tbWFuZHMgaGF2ZSBubyBlZmZlY3QuXG5cCi0g VXNlIFNFVCBNT0RFTSBUWVBFIHRvIHNlbGVjdCBhIG1vZGVtLlxuIik7Ci0gICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKLX0KLSNlbmRpZiAvKiBOT1NIT1cgKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8K LQotI2lmZGVmIENLX1RBUEkKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFRBUEkgYWN0aW9uIGNvbW1hbmRzICovCi1kb3RhcGkoKSB7Ci0gICAgaW50 IHgseTsKLSAgICBjaGFyICpzOwotCi0gICAgaWYgKCFUQVBJQXZhaWwpIHsKLSAgICAgICAgcHJp bnRmKCJcblRBUEkgaXMgdW5hdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0uXG4iKTsKLSAgICAgICAg cmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKCh5ID0gY21rZXkodGFwaXRhYixudGFwaXRhYiwi TVMgVEFQSSBjb21tYW5kIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih5KTsKLSAg ICBzd2l0Y2ggKHkpIHsKLSAgICAgIGNhc2UgWFlUQVBJX0NGRzogeyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFRBUEkgQ09ORklHVVJFLUxJTkUgKi8KLSAgICAgICAgICBleHRlcm4gc3RydWN0 IGtleXRhYiAqIHRhcGlsaW5ldGFiOwotICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiICog X3RhcGlsaW5ldGFiOwotICAgICAgICAgIGV4dGVybiBpbnQgbnRhcGlsaW5lOwotICAgICAgICAg IGV4dGVybiBpbnQgTGluZURldmljZUlkOwotICAgICAgICAgIGludCBsaW5lSUQ9TGluZURldmlj ZUlkOwotICAgICAgICAgIGlmIChUQVBJQXZhaWwpCi0gICAgICAgICAgICBja3RhcGlCdWlsZExp bmVUYWJsZSgmdGFwaWxpbmV0YWIsICZfdGFwaWxpbmV0YWIsICZudGFwaWxpbmUpOwotICAgICAg ICAgIGlmICh0YXBpbGluZXRhYiAmJiBfdGFwaWxpbmV0YWIgJiYgbnRhcGlsaW5lID4gMCkgewot ICAgICAgICAgICAgICBpbnQgaT0wLCBqID0gOTk5OSwgayA9IC0xOwotCi0gICAgICAgICAgICAg IGlmICggTGluZURldmljZUlkID09IC0xICkgewotICAgICAgICAgICAgICAgICAgLyogRmluZCBv dXQgd2hhdCB0aGUgbG93ZXN0IG51bWJlcmVkIFRBUEkgZGV2aWNlIGlzICovCi0gICAgICAgICAg ICAgICAgICAvKiBhbmQgdXNlIGl0IGFzIHRoZSBkZWZhdWx0LiAgICAgICAgICAgICAgICAgICAg ICAgKi8KLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudGFwaWxpbmU7IGkrKyAp IHsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAodGFwaWxpbmV0YWJbaV0ua3d2YWwgPCBqKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBpOwotICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAgIC8qIEZpbmQgdGhlIExpbmVEZXZpY2VJZCBpbiB0aGUgdGFibGUgYW5kIHVzZSB0 aGF0IGVudHJ5ICovCi0gICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnRhcGlsaW5l OyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcGlsaW5ldGFiW2ldLmt3dmFs ID09IExpbmVEZXZpY2VJZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gaTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmIChr ID49IDApCi0gICAgICAgICAgICAgICAgcyA9IF90YXBpbGluZXRhYltrXS5rd2Q7Ci0gICAgICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzID0gIiI7Ci0KLSAgICAgICAgICAgICAgaWYg KCh5ID0gY21rZXkoX3RhcGlsaW5ldGFiLG50YXBpbGluZSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJUQVBJIGRldmljZSBuYW1lIixzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAg ICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgbGluZUlEID0geTsKLSAgICAgICAgICB9 Ci0gICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0jaWZkZWYgSUtT RAotICAgICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgICBwcmludGYoIlNvcnJ5 LCBjb21tYW5kIGRpc2FibGVkXHJcbiIpOwotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDApOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBJU0tEICovCi0gICAgICAgICAgY2t0YXBpQ29u ZmlndXJlTGluZShsaW5lSUQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2Fz ZSBYWVRBUElfRElBTDogICAgICAgICAgICAgICAgIC8qIFRBUEkgRElBTElORy1QUk9QRVJUSUVT ICovCi0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7 Ci0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgICAgIHByaW50 ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWRcclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogSVNLRCAqLwotICAgICAgICBja3RhcGlE aWFsaW5nUHJvcCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKLX0KLQotc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNF VCBUQVBJIGNvbW1hbmQgb3B0aW9ucyAqLwotc2V0dGFwaSgpIHsKLSAgICBpbnQgeCwgeTsKLSAg ICBjaGFyICpzOwotCi0gICAgaWYgKCFUQVBJQXZhaWwpIHsKLSAgICAgICAgcHJpbnRmKCJcblRB UEkgaXMgdW5hdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0uXG4iKTsKLSAgICAgICAgcmV0dXJuKC05 KTsKLSAgICB9Ci0gICAgaWYgKCh5ID0gY21rZXkoc2V0dGFwaXRhYixuc2V0dGFwaXRhYiwiTVMg VEFQSSBvcHRpb24iLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHkpOwotICAgIHN3 aXRjaCAoeSkgewotICAgICAgY2FzZSBYWVRBUElfVVNFOgotICAgICAgICByZXR1cm4gKHN1Y2Nl c3MgPSBzZXRvbigmdGFwaXVzZWNmZykpOwotICAgICAgY2FzZSBYWVRBUElfTEdIVDoKLSAgICAg ICAgcmV0dXJuIChzdWNjZXNzID0gc2V0b24oJnRhcGlsaWdodHMpKTsKLSAgICAgIGNhc2UgWFlU QVBJX1BSRToKLSAgICAgICAgcmV0dXJuIChzdWNjZXNzID0gc2V0b24oJnRhcGlwcmV0ZXJtKSk7 Ci0gICAgICBjYXNlIFhZVEFQSV9QU1Q6Ci0gICAgICAgIHJldHVybiAoc3VjY2VzcyA9IHNldG9u KCZ0YXBpcG9zdHRlcm0pKTsKLSAgICAgIGNhc2UgWFlUQVBJX0lOQToKLSAgICAgICAgeSA9IGNt bnVtKCJzZWNvbmRzIG9mIGluYWN0aXZpdHkgYmVmb3JlIGF1dG8tZGlzY29ubmVjdCIsCi0gICAg ICAgICAgICAgICAgICAiMCIsMTAsJngseHhzdHJpbmcpOwotICAgICAgICByZXR1cm4oc2V0bnVt KCZ0YXBpaW5hY3Rpdml0eSx4LHksNjU1MzUpKTsKLSAgICAgIGNhc2UgWFlUQVBJX0JORzoKLSAg ICAgICAgeSA9IGNtbnVtKCJzZWNvbmRzIHRvIHdhaXQgZm9yIGNyZWRpdCBjYXJkIHRvbmUiLAot ICAgICAgICAgICAgICAgICAgIjgiLDEwLCZ4LHh4c3RyaW5nKTsKLSAgICAgICAgcmV0dXJuKHNl dG51bSgmdGFwaWJvbmcseCx5LDkwKSk7Ci0gICAgICBjYXNlIFhZVEFQSV9NQU46Ci0gICAgICAg IHJldHVybiAoc3VjY2VzcyA9IHNldG9uKCZ0YXBpbWFudWFsKSk7Ci0gICAgICBjYXNlIFhZVEFQ SV9DT046ICAgICAgICAgICAgICAgICAgLyogVEFQSSBDT05WRVJTSU9OUyAqLwotICAgICAgICBy ZXR1cm4gKHN1Y2Nlc3MgPSBzZXRvbmF1dCgmdGFwaWNvbnYpKTsKLSAgICAgIGNhc2UgWFlUQVBJ X0xJTjogICAgICAgICAgICAgICAgICAvKiBUQVBJIExJTkUgKi8KLSAgICAgICAgeCA9IHNldGxp bihYWVRBUElfTElOLDEsMCk7Ci0gICAgICAgIGlmICh4ID4gLTEpIGRpZHNldGxpbisrOwotICAg ICAgICByZXR1cm4oeCk7Ci0gICAgICBjYXNlIFhZVEFQSV9QQVNTOiB7ICAgICAgICAgICAgICAg LyogVEFQSSBQQVNTVEhST1VHSCAqLwotI2lmZGVmIE5PRElBTAotICAgICAgICAgIHByaW50Zigi XG4/TW9kZW0tZGlhbGluZyBub3Qgc3VwcG9ydGVkXG4iKTsKLSAgICAgICAgICByZXR1cm4oLTkp OwotI2Vsc2UgLyogTk9ESUFMICovCi0gICAgICAgICAgLyogUGFzc3Rocm91Z2ggYmVjYW1lIE1v ZGVtLWRpYWxpbmcgd2hpY2ggaXMgYW4gYW50b255bSAqLwotICAgICAgICAgIHN1Y2Nlc3MgPSBz ZXRvbigmdGFwaXBhc3MpOwotICAgICAgICAgIHRhcGlwYXNzID0gIXRhcGlwYXNzOwotICAgICAg ICAgIHJldHVybiAoc3VjY2Vzcyk7Ci0jZW5kaWYgLyogTk9ESUFMICovICAgICAgICAKLSAgICAg IH0KLSAgICAgIGNhc2UgWFlUQVBJX0xPQzogeyAgICAgICAgICAgICAgICAvKiBUQVBJIExPQ0FU SU9OICovCi0gICAgICAgICAgZXh0ZXJuIGNoYXIgdGFwaWxvY1tdOwotICAgICAgICAgIGV4dGVy biBpbnQgdGFwaWxvY2lkOwotICAgICAgICAgIGludCBpID0gMCwgaiA9IDk5OTksIGsgPSAtMTsK LQotICAgICAgICAgIGNrdGFwaUJ1aWxkTG9jYXRpb25UYWJsZSgmdGFwaWxvY3RhYiwgJm50YXBp bG9jKTsKLSAgICAgICAgICBpZiAoIXRhcGlsb2N0YWIgfHwgIW50YXBpbG9jKSB7Ci0gICAgICAg ICAgICAgIHByaW50ZigiXG5ObyBUQVBJIExvY2F0aW9ucyBhcmUgY29uZmlndXJlZCBmb3IgdGhp cyBzeXN0ZW1cbiIpOwotICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgIH0KLSAg ICAgICAgICBpZiAodGFwaWxvY2lkID09IC0xKQotICAgICAgICAgICAgdGFwaWxvY2lkID0gY2t0 YXBpR2V0Q3VycmVudExvY2F0aW9uSUQoKTsKLQotICAgICAgICAgIC8qIEZpbmQgdGhlIGN1cnJl bnQgdGFwaWxvYyBlbnRyeSAqLwotICAgICAgICAgIC8qIGFuZCB1c2UgaXQgYXMgdGhlIGRlZmF1 bHQuICovCi0gICAgICAgICAgZm9yIChrID0gMDsgayA8IG50YXBpbG9jOyBrKyspIHsKLSAgICAg ICAgICAgICAgaWYgKHRhcGlsb2N0YWJba10ua3d2YWwgPT0gdGFwaWxvY2lkKQotICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoayA+PSAwICYmIGsgPCBu dGFwaWxvYykKLSAgICAgICAgICAgIHMgPSB0YXBpbG9jdGFiW2tdLmt3ZDsKLSAgICAgICAgICBl bHNlCi0gICAgICAgICAgICBzID0gIiI7Ci0KLSAgICAgICAgICBpZiAoKHkgPSBjbWtleSh0YXBp bG9jdGFiLG50YXBpbG9jLCAiVEFQSSBsb2NhdGlvbiIscyx4eHN0cmluZykpIDwgMCkKLSAgICAg ICAgICAgIHJldHVybih5KTsKLQotICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAg ICAgICAgICAgIHJldHVybih4KTsKLSNpZmRlZiBJS1NECi0gICAgICAgICAgaWYgKGluc2VydmVy KSB7Ci0gICAgICAgICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWRcclxuIik7 Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgICAgfQotI2VuZGlm IC8qIElLU0QgKi8KLSAgICAgICAgICBja3RhcGlGZXRjaExvY2F0aW9uSW5mb0J5SUQoIHkgKTsK LSNpZm5kZWYgTk9ESUFMCi0gICAgICAgICAgQ29weVRhcGlMb2NhdGlvbkluZm9Ub0tlcm1pdERp YWxDbWQoKTsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSAgICAgICAgfQotICAgICAgICBicmVhazsK LSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3M9MSk7Ci19Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwot I2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRlZiBOT1NQTAotLyogTWV0aG9kIGZvciBldmFs dWF0aW5nIFwleCBhbmQgXCZ4W10gdmFyaWFibGVzICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFi IHZhcmV2YWx0YWJbXSA9IHsKLSAgICB7ICJyZWN1cnNpdmUiLCAxLCAwIH0sCi0gICAgeyAic2lt cGxlIiwgICAgMCwgMCB9Ci19Owotc3RhdGljIGludCBudmFyZXZhbHRhYiA9IChzaXplb2YodmFy ZXZhbHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1pbnQKLXNldHZhcmV2YWwoKSB7 Ci0gICAgaW50IHggPSAwLCB5ID0gMDsKLSAgICBleHRlcm4gaW50IHZhcmV2YWw7Ci0jaWZkZWYg RENNREJVRgotICAgIGV4dGVybiBpbnQgKiB4dmFyZXY7Ci0jZWxzZQotICAgIGV4dGVybiBpbnQg eHZhcmV2W107Ci0jZW5kaWYgLyogRENNREJVRiAqLwotCi0gICAgaWYgKCh4ID0gY21rZXkodmFy ZXZhbHRhYiwKLQkJICAgbnZhcmV2YWx0YWIsIAotCQkgICAiTWV0aG9kIGZvciBldmFsdWF0aW5n IFxcJXggYW5kIFxcJnhbXSB2YXJpYWJsZXMiLAotCQkgICAiIiwKLQkJICAgeHhzdHJpbmcpKSA8 IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAg cmV0dXJuKHkpOwotICAgIHh2YXJldltjbWRsdmxdID0geDsKLSAgICB2YXJldmFsID0geDsKLSAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOwotfQotCi0jaWZkZWYgQ0tfQU5TSUMgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU0VUIEFMQVJNICovCi1pbnQKLXNldGFsYXJtKGxvbmcgeHgpCi0jZWxz ZQotaW50Ci1zZXRhbGFybSh4eCkgbG9uZyB4eDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyog c2V0YWxhcm0gKi8gewotI2lmZGVmIENPTU1FTlQKLSAgICBpbnQgeXl5eSwgbW0sIGRkLCB4Owot ICAgIGNoYXIgKnM7Ci0gICAgbG9uZyB6ejsKLSAgICBjaGFyIGJ1Zls2XTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0gICAgbG9uZyBzZWMsIGpkOwotICAgIGNoYXIgeGJ1ZlsyMF0sICogcDsKLQot ICAgIGRlYnVnKEYxMDEsInNldGFsYXJtIHh4IiwiIix4eCk7Ci0gICAgY2tfYWxhcm0gPSAwTDsg ICAgICAgICAgICAgICAgICAgICAgLyogMCA9IG5vIGFsYXJtIChpbiBjYXNlIG9mIGVycm9yKSAq LwotICAgIGlmICh4eCA8IDBMKSB7Ci0gICAgICAgIHByaW50ZigiJWxkIC0gaWxsZWdhbCB2YWx1 ZSwgbXVzdCBiZSAwIG9yIHBvc2l0aXZlXG4iLCB4eCk7Ci0gICAgICAgIHJldHVybigtOSk7Ci0g ICAgfQotICAgIGlmICh4eCA9PSAwTCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIENMRUFSIEFM QVJNICovCi0gICAgICAgIGFscm1fZGF0ZVswXSA9IE5VTDsKLSAgICAgICAgYWxybV90aW1lWzBd ID0gTlVMOwotICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotI2lmZGVmIENPTU1FTlQKLSAgICB4 ID0gODsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgY3VycmVudCBkYXRlICov Ci0gICAgcyA9IGFscm1fZGF0ZTsKLSAgICBpZiAoenpzdHJpbmcoIlxcdihuZGF0ZSkiLCZzLCZ4 KSA8IDApIHsKLSAgICAgICAgcHJpbnRmKCJJbnRlcm5hbCBkYXRlIGVycm9yLCBzb3JyeS5cbiIp OwotICAgICAgICBhbHJtX2RhdGVbMF0gPSBTUDsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9 Ci0gICAgeCA9IDU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IGN1cnJlbnQg dGltZSAqLwotICAgIHMgPSBhbHJtX3RpbWU7Ci0gICAgaWYgKHp6c3RyaW5nKCJcXHYobnRpbWUp IiwmcywmeCkgPCAwKSB7Ci0gICAgICAgIHByaW50ZigiSW50ZXJuYWwgdGltZSBlcnJvciwgc29y cnkuXG4iKTsKLSAgICAgICAgYWxybV90aW1lWzBdID0gU1A7Ci0gICAgICAgIHJldHVybigtOSk7 Ci0gICAgfQotICAgIHNwcmludGYoYnVmLCIlMDVsZCIsYXRvbChhbHJtX3RpbWUpKTsgLyogU0FG RSAoMjApICovCi0gICAgY2tzdHJuY3B5KGFscm1fdGltZSxidWYsOCk7Ci0gICAgZGVidWcoRjEx MCwiU0VUIEFMQVJNIGRhdGUgKDEpIixhbHJtX2RhdGUsMCk7Ci0gICAgZGVidWcoRjExMCwiU0VU IEFMQVJNIHRpbWUgKDEpIixhbHJtX3RpbWUsMCk7Ci0KLSAgICBpZiAoKHp6ID0gYXRvbChhbHJt X3RpbWUpICsgeHgpIDwgMEwpIHsKLSAgICAgICAgcHJpbnRmKCJJbnRlcm5hbCB0aW1lIGNvbnZl cnNpb24gZXJyb3IsIHNvcnJ5LlxuIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAg IGlmICh6eiA+PSA4NjQwMEwpIHsgICAgICAgICAgICAgICAgIC8qIEFsYXJtIGNyb3NzZXMgbWlk bmlnaHQgKi8KLSAgICAgICAgY2hhciBkWzEwXTsgICAgICAgICAgICAgICAgICAgICAvKiBMb2Nh bCBkYXRlIGJ1ZmZlciAqLwotICAgICAgICBpbnQgbGFzdGRheTsgICAgICAgICAgICAgICAgICAg IC8qIExhc3QgZGF5IG9mIHRoaXMgbW9udGggKi8KLQotICAgICAgICBja3N0cm5jcHkoZCxhbHJt X2RhdGUsOCk7ICAgICAgIC8qIFdlJ2xsIGhhdmUgdG8gY2hhbmdlIHRoZSBkYXRlICovCi0KLSAg ICAgICAgeCA9ICh6eiAvIDg2NDAwTCk7ICAgICAgICAgICAgICAvKiBIb3cgbWFueSBkYXlzIGFm dGVyIHRvZGF5ICovCi0KLSAgICAgICAgZGQgPSBhdG9pKChjaGFyICopKGQrNikpOyAgICAgICAv KiBQYXJzZSB5eXl5bW1kZCAqLwotICAgICAgICBkWzZdID0gTlVMOyAgICAgICAgICAgICAgICAg ICAgIC8qIGludG8geXl5eSwgbW0sIGRkIC4uLiAqLwotICAgICAgICBtbSA9IGF0b2koKGNoYXIg KikoZCs0KSk7Ci0gICAgICAgIGRbNF0gPSBOVUw7Ci0gICAgICAgIHl5eXkgPSBhdG9pKChjaGFy ICopZCk7Ci0KLSAgICAgICAgLyogSG93IG1hbnkgZGF5cyBpbiB0aGlzIG1vbnRoICovCi0KLSAg ICAgICAgbGFzdGRheSA9IG1kYXlzW21tXTsKLSAgICAgICAgaWYgKG1tID09IDIgJiYgeXl5eSAl IDQgPT0gMCkgICAvKiBXb3JrcyB0aHJ1IDIwOTkgQUQuLi4gKi8KLSAgICAgICAgICBsYXN0ZGF5 Kys7Ci0KLSAgICAgICAgaWYgKGRkICsgeCA+IGxhc3RkYXkpIHsgICAgICAgICAvKiBEdW1iIGxv b3AgKi8KLSAgICAgICAgICAgIGludCB5OwotCi0gICAgICAgICAgICB4IC09IChtZGF5c1ttbV0g LSBkZCk7ICAgICAgLyogRGVkdWN0IHJlc3Qgb2YgdGhpcyBtb250aCdzIGRheXMgKi8KLQotICAg ICAgICAgICAgLyogVGhlcmUncyBhIG1vcmUgZWxlZ2FudCB3YXkgdG8gZG8gdGhpcy4uLiAqLwot Ci0gICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgIG1tKys7ICAgICAgICAg ICAgICAgICAgIC8qIE5leHQgbW9udGggKi8KLSAgICAgICAgICAgICAgICBpZiAobW0gPiAxMikg eyAgICAgICAgICAvKiBXcmFwIGFyb3VuZCAqLwotICAgICAgICAgICAgICAgICAgICBtbSA9IDE7 ICAgICAgICAgICAgIC8qIEphbiwgbmV4dCB5ZWFyICovCi0gICAgICAgICAgICAgICAgICAgIHl5 eXkrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgeSA9IG1kYXlzW21tXTsg ICAgICAgICAgLyogRGF5cyBpbiBuZXcgbW9udGggKi8KLSAgICAgICAgICAgICAgICBpZiAobW0g PT0gMiAmJiB5eXl5ICUgNCA9PSAwKSAvKiBGZWIgaW4gbGVhcCB5ZWFyICovCi0gICAgICAgICAg ICAgICAgICB5Kys7ICAgICAgICAgICAgICAgICAgLyogV29ya3MgdW50aWwgMjEwMCBBRCAqLwot ICAgICAgICAgICAgICAgIGlmICh4IC0geSA8IDEpCi0gICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICB4IC09IHk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZCA9 IHg7ICAgICAgICAgICAgICAgICAgICAgLyogRGF5IG9mIGFsYXJtIG1vbnRoICovCi0gICAgICAg IH0gZWxzZSBkZCArPSB4OwotCi0gICAgICAgIHNwcmludGYoYWxybV9kYXRlLCIlMDRkJTAyZCUw MmQiLHl5eXksbW0sZGQpOyAvKiBTQUZFICgyNCkgKi8KLSAgICAgICAgenogPSB6eiAlIDg2NDAw TDsKLSAgICB9Ci0gICAgc3ByaW50ZihhbHJtX3RpbWUsIiVsZCIsenopOyAgICAgICAgLyogU0FG RSAoMjQpICovCi0gICAgZGVidWcoRjExMCwiU0VUIEFMQVJNIGRhdGUgKDIpIixhbHJtX2RhdGUs MCk7Ci0gICAgZGVidWcoRjExMCwiU0VUIEFMQVJNIHRpbWUgKDIpIixhbHJtX3RpbWUsMCk7Ci0g ICAgY2tfYWxhcm0gPSB4eDsKLSNlbHNlCi0gICAgLyogSnVsIDE5OTggKi8KLSAgICBja3N0cm5j cHkoeGJ1Zixja2N2dGRhdGUoIiIsMSksMjApOyAvKiBHZXQgY3VycmVudCBkYXRlIGFuZCB0aW1l ICovCi0gICAgcCA9IHhidWY7Ci0gICAgY2tzdHJuY3B5KGFscm1fZGF0ZSx4YnVmLDEwKTsKLSAg ICBhbHJtX2RhdGVbOF0gPSBOVUw7Ci0gICAgc2VjID0gYXRvbChwKzkpICogMzYwMEwgKyBhdG9s KHArMTIpICogNjBMICsgYXRvbChwKzE1KTsKLSAgICBkZWJ1ZyhGMTEwLCJTRVQgQUxBUk0gZGF0 ZSAoMSkiLGFscm1fZGF0ZSwwKTsKLSAgICBkZWJ1ZyhGMTAxLCJTRVQgQUxBUk0gdGltZSAoMSki LCIiLHNlYyk7Ci0gICAgaWYgKChzZWMgKz0geHgpIDwgMEwpIHsKLSAgICAgICAgcHJpbnRmKCJJ bnRlcm5hbCB0aW1lIGNvbnZlcnNpb24gZXJyb3IsIHNvcnJ5LlxuIik7Ci0gICAgICAgIHJldHVy bigtOSk7Ci0gICAgfQotICAgIGlmIChzZWMgPj0gODY0MDBMKSB7ICAgICAgICAgICAgICAgIC8q IEFsYXJtIGNyb3NzZXMgbWlkbmlnaHQgKi8KLSAgICAgICAgbG9uZyBkYXlzOwotICAgICAgICBk YXlzID0gc2VjIC8gODY0MDBMOwotICAgICAgICBqZCA9IG1qZChwKSArIGRheXM7ICAgICAgICAg ICAgIC8qIEdldCBtb2RpZmllZCBKdWxpYW4gZGF0ZSAqLwotICAgICAgICBja3N0cm5jcHkoYWxy bV9kYXRlLG1qZDJkYXRlKGpkKSwxMCk7Ci0gICAgICAgIHNlYyAlPSA4NjQwMEw7Ci0gICAgfQot ICAgIHNwcmludGYoYWxybV90aW1lLCIlMDVsZCIsc2VjKTsgICAgIC8qIFNBRkUgKDI0KSAqLwot ICAgIGRlYnVnKEYxMTAsIlNFVCBBTEFSTSBkYXRlICgyKSIsYWxybV9kYXRlLDApOwotICAgIGRl YnVnKEYxMTAsIlNFVCBBTEFSTSB0aW1lICgyKSIsYWxybV90aW1lLDApOwotICAgIGNrX2FsYXJt ID0gMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsYXJtIGlzIHNldCAqLwotCi0jZW5kaWYg LyogQ09NTUVOVCAqLwotICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci19Ci0jZW5kaWYgLyogTk9T UEwgKi8KLQotI2lmbmRlZiBOT1NFVEtFWQotaW50Ci1kb3NldGtleSgpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU0VUIEtFWSAqLwotICAgIGludCB4LCB5OwotICAgIGludCBmbGFn ID0gMDsKLSAgICBpbnQga2M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBLZXkgY29k ZSAqLwotICAgIGNoYXIgKnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtleSBiaW5k aW5nICovCi0jaWZuZGVmIE5PS1ZFUkJTCi0gICAgY2hhciAqcDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogV29ya2VyICovCi0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLSNpZmRlZiBPUzIK LSAgICBleHRlcm4gaW50IG9zMmdrczsKLSAgICBleHRlcm4gaW50IG1za2tleXM7Ci0gICAgZXh0 ZXJuIGludCBpbml0dmlrOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgeF9pZm51bSA9IDE7Ci0g ICAgeSA9IGNtbnVtKCJudW1lcmljIGtleSBjb2RlLCBvciB0aGUgd29yZCBDTEVBUiwiLCIiLDEw LCZrYyx4eHN0cmluZyk7Ci0gICAgeF9pZm51bSA9IDA7Ci0gICAgaWYgKHkgPCAwKSB7Ci0gICAg ICAgIGRlYnVnKEYxMTEsIlNFVCBLRVkiLGF0bWJ1Zix5KTsKLSAgICAgICAgaWYgKHkgPT0gLTIp IHsgICAgICAgICAgICAgICAgICAvKiBOb3QgYSB2YWxpZCBudW1iZXIgKi8KLSAgICAgICAgICAg IGlmICgoeSA9IHN0cmxlbihhdG1idWYpKSA8IDApIC8qIENoZWNrIGZvciBTRVQgS0VZIENMRUFS ICovCi0gICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgICBpZiAoY2tzdHJjbXAo YXRtYnVmLCJjbGVhciIseSwwKSkKLSAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAg ICAgICAgICAgZm9yICh5ID0gMDsgeSA8IEtNU0laRTsgeSsrKSB7Ci0gICAgICAgICAgICAgICAg a2V5bWFwW3ldID0gKEtFWSkgeTsKLSAgICAgICAgICAgICAgICBtYWNyb3RhYlt5XSA9IE5VTEw7 Ci0gICAgICAgICAgICB9Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICBrZXltYXBpbml0KCk7ICAg ICAgICAgICAgICAgLyogU3BlY2lhbCBPUy8yIGluaXRpYWxpemF0aW9ucyAqLwotICAgICAgICAg ICAgaW5pdHZpayA9IDE7ICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgVklLIHRhYmxlICov Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgIH0gZWxz ZSBpZiAoeSA9PSAtMykgeyAgICAgICAgICAgLyogU0VUIEtFWSA8UmV0dXJuPiAqLwotICAgICAg ICAgICAgcHJpbnRmKCIgUHJlc3Mga2V5IHRvIGJlIGRlZmluZWQ6ICIpOyAvKiBQcm9tcHQgZm9y IGEga2V5c3Ryb2tlICovCi0jaWZkZWYgVU5JWAotI2lmZGVmIE5PU0VUQlVGCi0gICAgICAgICAg ICBmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBOT1NFVEJVRiAqLwotI2VuZGlmIC8qIFVOSVgg Ki8KLSAgICAgICAgICAgIGNvbmJpbigoY2hhcillc2NhcGUpOyAgICAgICAvKiBQdXQgdGVybWlu YWwgaW4gYmluYXJ5IG1vZGUgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIG9zMmdrcyA9IDA7 ICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBLdmVyYiBwcmVwcm9jZXNzaW5nICovCi0jZW5k aWYgLyogT1MyICovCi0gICAgICAgICAgICBrYyA9IGNvbmdrcygwKTsgICAgICAgICAgICAgLyog R2V0IGNoYXJhY3RlciBvciBzY2FuIGNvZGUgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIG9z MmdrcyA9IDE7ICAgICAgICAgICAgICAgICAvKiBUdXJuIG9uIEt2ZXJiIHByZXByb2Nlc3Npbmcg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAg ICAgICAvKiBSZXN0b3JlIHRlcm1pbmFsIHRvIGNicmVhayBtb2RlICovCi0gICAgICAgICAgICBp ZiAoa2MgPCAwKSB7ICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGVycm9yICovCi0gICAgICAg ICAgICAgICAgcHJpbnRmKCI/RXJyb3IgcmVhZGluZyBrZXlcbiIpOwotICAgICAgICAgICAgICAg IHJldHVybigwKTsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIHNob2tl eWNvZGUoa2MsLTEpOyAgICAgICAgICAvKiBTaG93IGN1cnJlbnQgZGVmaW5pdGlvbiAqLwotI2Vs c2UKLSAgICAgICAgICAgIHNob2tleWNvZGUoa2MpOyAgICAgICAgICAgICAvKiBTaG93IGN1cnJl bnQgZGVmaW5pdGlvbiAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgZmxhZyA9IDE7 ICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIGl0J3MgYSBtdWx0aWxpbmUgY29tbWFuZCAq LwotICAgICAgICB9IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yICovCi0g ICAgICAgICAgcmV0dXJuKHkpOwotICAgIH0KLQotICAgIC8qIE5vcm1hbCBTRVQgS0VZIDxzY2Fu Y29kZT4gPHZhbHVlPiBjb21tYW5kLi4uICovCi0KLSNpZmRlZiBPUzIKLSAgICBpZiAobXNra2V5 cykKLSAgICAgIGtjID0gbXNrdG9jayhrYyk7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAo a2MgPCAwIHx8IGtjID49IEtNU0laRSkgewotICAgICAgICBwcmludGYoIj9rZXkgY29kZSBtdXN0 IGJlIGJldHdlZW4gMCBhbmQgJWRcbiIsIEtNU0laRSAtIDEpOwotICAgICAgICByZXR1cm4oLTkp OwotICAgIH0KLSAgICBpZiAoa2MgPT0gZXNjYXBlKSB7Ci0gICAgICAgIHByaW50ZigiU29ycnks ICVkIGlzIHRoZSBDT05ORUNULW1vZGUgZXNjYXBlIGNoYXJhY3RlclxuIixrYyk7Ci0gICAgICAg IHJldHVybigtOSk7Ci0gICAgfQotI2lmZGVmIE9TMgotICAgIHdpZGVyZXN1bHQgPSAtMTsKLSNl bmRpZiAvKiBPUzIgKi8KLSAgICBpZiAoZmxhZykgewotICAgICAgICBjbXNhdnAocHNhdmUsUFJP TVBUTCk7Ci0gICAgICAgIGNtc2V0cCgiIEVudGVyIG5ldyBkZWZpbml0aW9uOiAiKTsKLSAgICAg ICAgY21pbmkoY2t4ZWNoKTsKLSAgICAgICAgY21mbGdzID0gMDsKLSAgICAgICAgcHJvbXB0KE5V TEwpOwotICAgIH0KLSAgZGVmX2FnYWluOgotICAgIGlmIChmbGFnKQotICAgICAgY21yZXMoKTsK LSAgICBpZiAoKHkgPSBjbXR4dCgia2V5IGRlZmluaXRpb24sXG5cCi1vciBDdHJsLUMgdG8gY2Fu Y2VsIHRoaXMgY29tbWFuZCxcblwKLW9yIEVudGVyIHRvIHJlc3RvcmUgZGVmYXVsdCBkZWZpbml0 aW9uIiwKLSAgICAgICAgICAgICAgICAgICAiIiwmcyxOVUxMKSkgPCAwKSB7Ci0gICAgICAgIGlm IChmbGFnKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxlIHBhcnNlIGVycm9ycyAqLwot ICAgICAgICAgIGdvdG8gZGVmX2FnYWluOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJu KHkpOwotICAgIH0KLSAgICBzID0gYnJzdHJpcChzKTsKLSNpZm5kZWYgTk9LVkVSQlMKLSAgICBw ID0gczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIHRoaXMgcGxhY2UgKi8K LSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotLyoKLSAgSWYgdGhlIGRlZmluaXRpb24gaW5jbHVkZWQg YW55IFxLdmVyYnMsIHF1b3RlIHRoZSBiYWNrc2xhc2ggc28gdGhlIFxLdmVyYgotICB3aWxsIHN0 aWxsIGJlIGluIHRoZSBkZWZpbml0aW9uIHdoZW4gdGhlIGtleSBpcyBwcmVzc2VkLiAgV2UgZG9u J3QgZG8gdGhpcwotICBpbiB6enN0cmluZygpLCBiZWNhdXNlIFxLdmVyYnMgYXJlIHZhbGlkIG9u bHkgaW4gdGhpcyBjb250ZXh0IGFuZCBub3doZXJlCi0gIGVsc2UuCi0KLSAgV2UgdXNlIHRoaXMg Y29kZSBhY3RpdmUgZm9yIGFsbCB2ZXJzaW9ucyB0aGF0IHN1cHBvcnQgU0VUIEtFWSwgZXZlbiBp ZiB0aGV5Ci0gIGRvbid0IHN1cHBvcnQgXEt2ZXJicywgYmVjYXVzZSBvdGhlcndpc2UgXEsgd291 bGQgYmVoYXZlIGRpZmZlcmVudGx5IGZvcgotICBkaWZmZXJlbnQgdmVyc2lvbnMuCi0qLwotICAg IGZvciAoeCA9IDAsIHkgPSAwOyBzW3hdOyB4KyssIHkrKykgeyAvKiBDb252ZXJ0IFxLIHRvIFxc SyAqLwotICAgICAgICBpZiAoKHggPiAwKSAmJgotICAgICAgICAgICAgKHNbeF0gPT0gJ0snIHx8 IHNbeF0gPT0gJ2snKQotICAgICAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEhhdmUgSyAqLwotCi0gICAgICAgICAgICBpZiAoKHggPT0gMSAmJiBzW3gtMV0gPT0gQ01EUSkg fHwKLSAgICAgICAgICAgICAgICAoeCA+IDEgJiYgc1t4LTFdID09IENNRFEgJiYgc1t4LTJdICE9 IENNRFEpKSB7Ci0gICAgICAgICAgICAgICAgbGluZVt5KytdID0gQ01EUTsgICAgICAgLyogTWFr ZSBpdCBcXEsgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4ID4gMSAmJiBzW3gt MV0gPT0gJ3snICYmIHNbeC0yXSA9PSBDTURRKSB7Ci0gICAgICAgICAgICAgICAgbGluZVt5LTFd ID0gQ01EUTsgICAgICAgLyogSGF2ZSBce0sgKi8KLSAgICAgICAgICAgICAgICBsaW5lW3krK10g PSAneyc7ICAgICAgICAvKiBNYWtlIGl0IFxce0sgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotICAgICAgICBsaW5lW3ldID0gc1t4XTsKLSAgICB9Ci0gICAgbGluZVt5KytdID0gTlVMOyAg ICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlICovCi0gICAgcyA9IGxpbmUgKyB5ICsgMTsg ICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gYWZ0ZXIgaXQgKi8KLSAgICB4ID0gTElOQlVG U0laIC0gKGludCkgc3RybGVuKGxpbmUpIC0gMTsgLyogQ2FsY3VsYXRlIHJlbWFpbmluZyBzcGFj ZSAqLwotICAgIGlmICgoeCA8IChMSU5CVUZTSVogLyAyKSkgfHwKLSAgICAgICAgKHp6c3RyaW5n KGxpbmUsICZzLCAmeCkgPCAwKSkgeyAvKiBFeHBhbmQgdmFyaWFibGVzLCBldGMuICovCi0gICAg ICAgIHByaW50ZigiP0tleSBkZWZpbml0aW9uIHRvbyBsb25nXG4iKTsKLSAgICAgICAgaWYgKGZs YWcpIGNtc2V0cChwc2F2ZSk7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIHMgPSBs aW5lICsgeSArIDE7ICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdC4gKi8KLQot I2lmbmRlZiBOT0tWRVJCUwotLyoKLSAgU3BlY2lhbCBjYXNlOiBzZWUgaWYgdGhlIGRlZmluaXRp b24gc3RhcnRzIHdpdGggYSBcS3ZlcmIuCi0gIElmIGl0IGRvZXMsIHBvaW50IHRvIGl0IHdpdGgg cCwgb3RoZXJ3aXNlIHNldCBwIHRvIE5VTEwuCi0qLwotICAgIHAgPSBzOwotICAgIGlmICgqcCsr ID09IENNRFEpIHsKLSAgICAgICAgaWYgKCpwID09ICd7JykgcCsrOwotICAgICAgICBwID0gKCpw ID09ICdrJyB8fCAqcCA9PSAnSycpID8gcCArIDEgOiBOVUxMOwotICAgIH0KLSNlbmRpZiAvKiBO T0tWRVJCUyAqLwotCi0gICAgaWYgKG1hY3JvdGFiW2tjXSkgeyAgICAgICAgICAgICAgICAgLyog UG9zc2libHkgZnJlZSBvbGQgbWFjcm8gZnJvbSBrZXkuICovCi0gICAgICAgIGZyZWUoKGNoYXIg KiltYWNyb3RhYltrY10pOwotICAgICAgICBtYWNyb3RhYltrY10gPSBOVUxMOwotICAgIH0KLSAg ICBzd2l0Y2ggKHN0cmxlbihzKSkgeyAgICAgICAgICAgICAgICAvKiBBY3Rpb24gZGVwZW5kcyBv biBsZW5ndGggKi8KLSAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXNldCB0byBkZWZhdWx0IGJpbmRpbmcgKi8KLSAgICAgICAga2V5bWFwW2tjXSA9IChLRVkpIGtj OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTaW5nbGUgY2hhcmFjdGVyICovCi0gICAgICAgIGtleW1hcFtrY10gPSAoQ0hBUikgKnM7 Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAg IC8qIENoYXJhY3RlciBzdHJpbmcgKi8KLSNpZm5kZWYgTk9LVkVSQlMKLSAgICAgICAgaWYgKHAp IHsKLSAgICAgICAgICAgIHkgPSB4bG9va3VwKGt2ZXJicyxwLG5rdmVyYnMsJngpOyAvKiBMb29r IGl0IHVwICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzZXQga2V5IGt2ZXJiIGxvb2t1cCIs MCx5KTsgLyogZXhhY3QgbWF0Y2ggcmVxdWlyZWQgKi8KLSAgICAgICAgICAgIGlmICh5ID4gLTEp IHsKLSAgICAgICAgICAgICAgICBrZXltYXBba2NdID0gRl9LVkVSQiB8IHk7Ci0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0tWRVJC UyAqLwotICAgICAgICBrZXltYXBba2NdID0gKEtFWSkga2M7Ci0gICAgICAgIG1hY3JvdGFiW2tj XSA9IChNQUNSTykgbWFsbG9jKHN0cmxlbihzKSsxKTsKLSAgICAgICAgaWYgKG1hY3JvdGFiW2tj XSkKLSAgICAgICAgICBzdHJjcHkoKGNoYXIgKikgbWFjcm90YWJba2NdLCBzKTsgLyogc2FmZSAq LwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGZsYWcpIGNtc2V0cChwc2F2ZSk7Ci0j aWZkZWYgT1MyCi0gICAgaW5pdHZpayA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVXBk YXRlIFZJSyB0YWJsZSAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIHJldHVybigxKTsKLX0KLSNl bmRpZiAvKiBOT1NFVEtFWSAqLwotCi0jaWZkZWYgU1RPUEJJVFMKLXN0cnVjdCBrZXl0YWIgc3Rv cHRibFtdID0gewotICAgIHsgIjEiLCAxLCAwIH0sCi0gICAgeyAiMiIsIDIsIDAgfQotfTsKLSNl bmRpZiAvKiBTVE9QQklUUyAqLwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzZXJ0YmxbXSA9IHsK LSAgICB7ICI3RTEiLCAwLCAwIH0sCi0gICAgeyAiN0UyIiwgMSwgMCB9LAotICAgIHsgIjdNMSIs IDIsIDAgfSwKLSAgICB7ICI3TTIiLCAzLCAwIH0sCi0gICAgeyAiN08xIiwgNCwgMCB9LAotICAg IHsgIjdPMiIsIDUsIDAgfSwKLSAgICB7ICI3UzEiLCA2LCAwIH0sCi0gICAgeyAiN1MyIiwgNywg MCB9LAotI2lmZGVmIEhXUEFSSVRZCi0gICAgeyAiOEUxIiwgOSwgMCB9LAotICAgIHsgIjhFMiIs IDEwLCAwIH0sCi0jZW5kaWYgLyogSFdQQVJJVFkgKi8KLSAgICB7ICI4TjEiLCA4LCAwIH0sCi0j aWZkZWYgSFdQQVJJVFkKLSAgICB7ICI4TjIiLCAxMSwgMCB9LAotICAgIHsgIjhPMSIsIDEyLCAw IH0sCi0gICAgeyAiOE8yIiwgMTMsIDAgfSwKLSNlbmRpZiAvKiBIV1BBUklUWSAqLwotICAgIHsg IiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnNlcnRibCA9IChzaXplb2Yoc2VydGJsKSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdGF0aWMgY2hhciAqIHNlcm5hbVtdID0geyAg ICAgICAgICAgICAgLyogS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBzZXJ0YmxbXSAqLwotICAiN0Ux IiwgIjdFMiIsICI3TTEiLCAiN00yIiwgIjdPMSIsICI3TzIiLCAiN1MxIiwgIjdTMiIsCi0gICI4 TjEiLCAiOEUxIiwgIjhFMiIsICI4TjIiLCAiOE8xIiwgIjhPMiIKLX07Ci0KLXN0YXRpYyBzdHJ1 Y3Qga2V5dGFiIG9wdHN0YWJbXSA9IHsgICAgICAvKiBTRVQgT1BUSU9OUyB0YWJsZSAqLwotI2lm bmRlZiBOT0ZSSUxMUwotICAgIHsgImRlbGV0ZSIsICAgIFhYREVMLCAgIDB9LCAgICAgICAgICAg IC8qIERFTEVURSAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0gICAgeyAiZGlyZWN0b3J5Iiwg WFhESVIsICAgMH0sICAgICAgICAgLyogRElSRUNUT1JZICovCi0jaWZkZWYgQ0tQVVJHRQotICAg IHsgInB1cmdlIiwgICAgIFhYUFVSR0UsIDB9LCAgICAgICAgIC8qIFBVUkdFICovCi0jZW5kaWYg LyogQ0tQVVJHRSAqLwotICAgIHsgInR5cGUiLCAgICAgIFhYVFlQLCAgIDB9LCAgICAgICAgIC8q IFRZUEUgKi8KLSAgICB7ICIiLCAwLCAwfQotfTsKLXN0YXRpYyBpbnQgbm9wdHN0YWIgPSAgKHNp emVvZihvcHRzdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi0jaWZuZGVmIE5P WEZFUgotLyoKLSAgUFJPVE9DT0wgU0VMRUNUSU9OLiAgS2VybWl0IGlzIGFsd2F5cyBhdmFpbGFi bGUuICBJZiBDS19YWVogaXMgZGVmaW5lZCBhdAotICBjb21waWxlIHRpbWUsIHRoZW4gdGhlIG90 aGVycyBiZWNvbWUgc2VsZWN0aW9ucyBhbHNvLiAgSW4gT1MvMiBhbmQKLSAgV2luZG93cywgdGhl eSBhcmUgaW50ZWdyYXRlZCBhbmQgdGhlIHZhcmlvdXMgU0VUIGNvbW1hbmRzIChlLmcuICJzZXQg ZmlsZQotICB0eXBlIikgYWZmZWN0IHRoZW0gYXMgdGhleSB3b3VsZCBLZXJtaXQuICBJbiBvdGhl ciBPUydzIChVTklYLCBWTVMsIGV0YyksCi0gIHRoZXkgYXJlIGV4dGVybmFsIHByb3RvY29scyB3 aGljaCBhcmUgcnVuIHZpYSBLZXJtaXQncyBSRURJUkVDVCBtZWNoYW5pc20uCi0gIEFsbCB3ZSBk byBpcyBjb2xsZWN0IGFuZCB2ZXJpZnkgdGhlIGZpbGVuYW1lcyBhbmQgcGFzcyB0aGVtIGFsb25n IHRvIHRoZQotICBleHRlcm5hbCBwcm90b2NvbC4KLSovCi1zdHJ1Y3Qga2V5dGFiIHByb3Rvc1td ID0gewotI2lmZGVmIENLX1hZWgotICAgICJnIiwgICAgICAgICAgUFJPVE9fRywgIENNX0lOViwK LSNlbmRpZiAvKiBDS19YWVogKi8KLSAgICAia2VybWl0IiwgICAgIFBST1RPX0ssICAwLAotI2lm ZGVmIENLX1hZWgotICAgICJvdGhlciIsICAgICAgUFJPVE9fTywgIDAsCi0gICAgIngiLCAgICAg ICAgICBQUk9UT19YLCAgQ01fSU5WfENNX0FCUiwKLSAgICAieG1vZGVtIiwgICAgIFBST1RPX1gs ICAwLAotICAgICJ4bW9kZW0tY3JjIiwgUFJPVE9fWEMsIDAsCi0gICAgInkiLCAgICAgICAgICBQ Uk9UT19ZLCAgQ01fSU5WfENNX0FCUiwKLSAgICAieW1vZGVtIiwgICAgIFBST1RPX1ksICAwLAot ICAgICJ5bW9kZW0tZyIsICAgUFJPVE9fRywgIDAsCi0gICAgInptb2RlbSIsICAgICBQUk9UT19a LCAgMAotI2VuZGlmIC8qIENLX1hZWiAqLwotfTsKLWludCBucHJvdG9zID0gIChzaXplb2YocHJv dG9zKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNpZm5kZWYgWFlaX0lOVEVSTkFMCi0j aWZuZGVmIE5PUFVTSAotI2RlZmluZSBFWFBfSEFORExFUiAxCi0jZGVmaW5lIEVYUF9TVERFUlIg IDIKLSNkZWZpbmUgRVhQX1RJTU8gICAgMwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBleHRwcm90 YWJbXSA9IHsKLSAgICB7ICJoYW5kbGVyIiwgICAgICAgICAgRVhQX0hBTkRMRVIsIDAgfSwKLSAg ICB7ICJyZWRpcmVjdC1zdGRlcnIiLCAgRVhQX1NUREVSUiwgMCB9LAotICAgIHsgInRpbWVvdXQi LCAgICAgICAgICBFWFBfVElNTywgMCB9Ci19Owotc3RhdGljIGludCBueHRwcm90YWIgPSAgKHNp emVvZihleHRwcm90YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLSNlbmRpZgkvKiBOT1BV U0ggKi8KLSNlbmRpZgkvKiBYWVpfSU5URVJOQUwgKi8KLQotI2RlZmluZSBYUENNRExFTiA3MQot Ci1fUFJPVE9UWVAoc3RhdGljIGludCBwcm90b2ZpZWxkLCAoY2hhciAqLCBjaGFyICosIGNoYXIg KikpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgc2V0cHJvdG8sICh2b2lkKSk7Ci0KLXN0YXRpYyBp bnQKLXByb3RvZmllbGQoY3VycmVudCwgaGVscCwgcHgpIGNoYXIgKiBjdXJyZW50LCAqIGhlbHAs ICogcHg7IHsKLQotICAgIGNoYXIgKnMsIHRtcGJ1ZltYUENNRExFTisxXTsKLSAgICBpbnQgeDsK LQotICAgIGlmIChjdXJyZW50KSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFB1dCBicmFjZXMg YXJvdW5kIGRlZmF1bHQgKi8KLSAgICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosInsiLGN1 cnJlbnQsIn0iLE5VTEwpOwotICAgIGVsc2UKLSAgICAgIHRtcGJ1ZlswXSA9IE5VTDsKLQotICAg IGlmICgoeCA9IGNtZmxkKGhlbHAsIChjaGFyICopdG1wYnVmLCAmcywgeHhzdHJpbmcpKSA8IDAp Ci0gICAgICByZXR1cm4oeCk7Ci0gICAgaWYgKChpbnQpc3RybGVuKHMpID4gWFBDTURMRU4pIHsK LSAgICAgICAgcHJpbnRmKCI/U29ycnkgLSBtYXhpbXVtIGxlbmd0aCBpcyAlZFxuIiwgWFBDTURM RU4pOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0gZWxzZSBpZiAoKnMpIHsKLSAgICAgICAg c3RyY3B5KHB4LHMpOyAgICAgICAgICAgICAgICAgICAvKiBzYWZlICovCi0gICAgfSBlbHNlIHsK LSAgICAgICAgcHggPSBOVUxMOwotICAgIH0KLSAgICByZXR1cm4oeCk7Ci19Ci0KLXN0YXRpYyBp bnQKLXNldHByb3RvKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgYSBm aWxlIHRyYW5zZmVyIHByb3RvY29sICovCi0gICAgLyogY2hhciAqIHMgPSBOVUxMOyAqLwotICAg IGludCB4ID0gMCwgeTsKLSAgICBjaGFyIHMxW1hQQ01ETEVOKzFdLCBzMltYUENNRExFTisxXSwg czNbWFBDTURMRU4rMV07Ci0gICAgY2hhciBzNFtYUENNRExFTisxXSwgczVbWFBDTURMRU4rMV0s IHM2W1hQQ01ETEVOKzFdLCBzN1tYUENNRExFTisxXTsKLSAgICBjaGFyICogcDEgPSBzMSwgKiBw MiA9IHMyLCAqcDMgPSBzMzsKLSAgICBjaGFyICogcDQgPSBzNCwgKiBwNSA9IHM1LCAqcDYgPSBz NiwgKnA3ID0gczc7Ci0KLSNpZmRlZiBYWVpfSU5URVJOQUwKLSAgICBleHRlcm4gaW50IHBfYXZh aWw7Ci0jZWxzZQotI2lmbmRlZiBDS19SRURJUgotICAgIHggPSAxOwotI2VuZGlmIC8qIENLX1JF RElSICovCi0jZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCi0gICAgczFbMF0gPSBOVUw7Ci0gICAg czJbMF0gPSBOVUw7Ci0gICAgczNbMF0gPSBOVUw7Ci0gICAgczRbMF0gPSBOVUw7Ci0gICAgczVb MF0gPSBOVUw7Ci0gICAgczZbMF0gPSBOVUw7Ci0KLSAgICBpZiAoKHkgPSBjbWtleShwcm90b3Ms bnByb3RvcywiIiwia2VybWl0Iix4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih5KTsKLQot ICAgIGlmICh4ICYmIHkgIT0gUFJPVE9fSykgewotICAgICAgICBwcmludGYoCi0gICAgICAgICAg ICI/U29ycnksIFJFRElSRUNUIGNhcGFiaWxpdHkgcmVxdWlyZWQgZm9yIGV4dGVybmFsIHByb3Rv Y29scy5cbiIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAoKHggPSBwcm90 b2ZpZWxkKHB0YWJbeV0uaF9iX2luaXQsCi0gICAgICJPcHRpb25hbCBjb21tYW5kIHRvIHNlbmQg dG8gaG9zdCBwcmlvciB0byB1cGxvYWRpbmcgaW4gYmluYXJ5IG1vZGUiLAotICAgICAgICAgICAg ICAgcDEpKSA8IDApIHsKLSAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgIHByb3Rv Y29sID0geTsgICAgICAgICAgICAgICAvKiBTZXQgcHJvdG9jb2wgYnV0IGRvbid0IGNoYW5nZSAq LwotICAgICAgICAgICAgcmV0dXJuKDEpOyAgICAgICAgICAgICAgICAgIC8qIGFueXRoaW5nIGVs c2UgKi8KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgIH0KLSAgICBp ZiAoKHggPSBwcm90b2ZpZWxkKHB0YWJbeV0uaF90X2luaXQsCi0gICAgICJPcHRpb25hbCBjb21t YW5kIHRvIHNlbmQgdG8gaG9zdCBwcmlvciB0byB1cGxvYWRpbmcgaW4gdGV4dCBtb2RlIiwKLSAg ICAgICAgICAgICAgIHAyKSkgPCAwKSB7Ci0gICAgICAgIGlmICh4ID09IC0zKQotICAgICAgICAg IGdvdG8gcHJvdG9leGl0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAg IH0KLQotICAgIGlmICh5ID09IFBST1RPX0spIHsKLSAgICAgICAgaWYgKCh4ID0gcHJvdG9maWVs ZChwdGFiW3ldLmhfeF9pbml0LAotICAgICAgICAgICAgICAgICAgICAiT3B0aW9uYWwgY29tbWFu ZCB0byBzZW5kIHRvIGhvc3QgdG8gc3RhcnQgS2VybWl0IHNlcnZlciIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgcDMpKSA8IDApIHsKLSAgICAgICAgICAgIGlmICh4ID09IC0zKQotICAg ICAgICAgICAgICBnb3RvIHByb3RvZXhpdDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg ICAgcmV0dXJuKHgpOwotICAgICAgICB9Ci0gICAgfQotCi0KLSNpZm5kZWYgWFlaX0lOVEVSTkFM ICAgICAgICAgICAgICAgICAgICAvKiBJZiBYWVpNT0RFTSBhcmUgZXh0ZXJuYWwuLi4gKi8KLQot ICAgIGlmICh5ICE9IFBST1RPX0spIHsKLSAgICAgICAgaWYgKCh4ID0gcHJvdG9maWVsZChwdGFi W3ldLnBfYl9zY21kLAotICAgICAgICAgICAgICAgICAiRXh0ZXJuYWwgY29tbWFuZCB0byBTRU5E IGluIEJJTkFSWSBtb2RlIHdpdGggdGhpcyBwcm90b2NvbCIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgcDQpKSA8IDApIHsKLSAgICAgICAgICAgIGlmICh4ID09IC0zKQotICAgICAgICAg ICAgICBnb3RvIHByb3RvZXhpdDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcmV0 dXJuKHgpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeCA9IHByb3RvZmllbGQocHRhYlt5XS5w X3Rfc2NtZCwKLSAgICAgICAgICAgICAgICAgIkV4dGVybmFsIGNvbW1hbmQgdG8gU0VORCBpbiBU RVhUIG1vZGUgd2l0aCB0aGlzIHByb3RvY29sIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwNSkpIDwgMCkgewotICAgICAgICAgICAgaWYgKHggPT0gLTMpCi0gICAgICAgICAgICAgIGdv dG8gcHJvdG9leGl0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh4ID0gcHJvdG9maWVsZChwdGFiW3ldLnBfYl9yY21k LAotICAgICAgICAgICAgICAgIkV4dGVybmFsIGNvbW1hbmQgdG8gUkVDRUlWRSBpbiBCSU5BUlkg bW9kZSB3aXRoIHRoaXMgcHJvdG9jb2wiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA2 KSkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoeCA9PSAtMykKLSAgICAgICAgICAgICAgZ290byBw cm90b2V4aXQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAg ICAgICAgfQotICAgICAgICBpZiAoKHggPSBwcm90b2ZpZWxkKHB0YWJbeV0ucF90X3JjbWQsCi0g ICAgICAgICAgICAgICAgICJFeHRlcm5hbCBjb21tYW5kIHRvIFJFQ0VJVkUgaW4gVEVYVCBtb2Rl IHdpdGggdGhpcyBwcm90b2NvbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDcpKSA8 IDApIHsKLSAgICAgICAgICAgIGlmICh4ID09IC0zKQotICAgICAgICAgICAgICBnb3RvIHByb3Rv ZXhpdDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAg ICB9Ci0gICAgfQotI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLwotCi0gICAgaWYgKCh4ID0gY21j Zm0oKSkgPCAwKSAgICAgICAgICAgICAgLyogQ29uZmlybSB0aGUgY29tbWFuZCAqLwotICAgICAg cmV0dXJuKHgpOwotCi1wcm90b2V4aXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog Q29tbW9uIGV4aXQgZnJvbSB0aGlzIHJvdXRpbmUgKi8KLQotI2lmZGVmIFhZWl9JTlRFUk5BTAot ICAgIGlmICghcF9hdmFpbCkgewotICAgICAgICBibGVlcChCUF9XQVJOKTsKLSAgICAgICAgcHJp bnRmKCJcbj9YLFksIGFuZCBabW9kZW0gYXJlIHVuYXZhaWxhYmxlXG4iKTsKLSAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9Ci0jZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCi0KLSAg ICBwMSA9IGJyc3RyaXAocDEpOwotICAgIHAyID0gYnJzdHJpcChwMik7Ci0gICAgcDMgPSBicnN0 cmlwKHAzKTsKLSAgICBwNCA9IGJyc3RyaXAocDQpOwotICAgIHA1ID0gYnJzdHJpcChwNSk7Ci0g ICAgcDYgPSBicnN0cmlwKHA2KTsKLSAgICBwNyA9IGJyc3RyaXAocDcpOwotICAgIGluaXRwcm90 byh5LHAxLHAyLHAzLHA0LHA1LHA2LHA3KTsKLSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotfQot Ci0jaWZuZGVmIE5PUFVTSAotI2lmbmRlZiBYWVpfSU5URVJOQUwKLQotI2RlZmluZSBERUZfRVhQ X1RJTU8gMTIJIC8qIERlZmF1bHQgdGltZW91dCBmb3IgZXh0ZXJuYWwgcHJvdG9jb2wgKHNlY29u ZHMpICovCi0KLWludCBleHBfaGFuZGxlciA9IDA7CQkJLyogVGhlc2UgYXJlIGV4cG9ydGVkICov Ci1pbnQgZXhwX3RpbW8gPSBERUZfRVhQX1RJTU87Ci1pbnQgZXhwX3N0ZGVyciA9IFNFVF9BVVRP OwotCi1WT0lECi1zaG9leHRlcm4oKSB7CQkJCS8qIEludm9rZWQgYnkgU0hPVyBQUk9UT0NPTCAq LwotICAgIHByaW50ZigiXG4gRXh0ZXJuYWwtcHJvdG9jb2wgaGFuZGxlcjogICAgICAgICAlc1xu IiwKLQkgICBleHBfaGFuZGxlciA/IChleHBfaGFuZGxlciA9PSAxID8gInB0eSIgOiAic3lzdGVt IikgOiAiYXV0b21hdGljIik7Ci0jaWZkZWYgQ09NTUVOVAotICAgIHByaW50ZigiIEV4dGVybmFs LXByb3RvY29sIHJlZGlyZWN0LXN0ZGVycjogJXNcbiIsIHNob3dvb2EoZXhwX3N0ZGVycikpOwot I2VuZGlmCS8qIENPTU1FTlQgKi8KLSAgICBwcmludGYoIiBFeHRlcm5hbC1wcm90b2NvbCB0aW1l b3V0OiAgICAgICAgICVkIChzZWMpXG4iLCBleHBfdGltbyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qg a2V5dGFiIHNldGV4dGVybmhhbmRsZXJbXSA9IHsKLSAgICB7ICJhdXRvbWF0aWMiLCAwLCAwIH0s Ci0gICAgeyAicHR5IiwgICAgICAgMSwgMCB9LAotICAgIHsgInN5c3RlbSIsICAgIDIsIDAgfQot fTsKLQotaW50Ci1zZXRleHRlcm4oKSB7CQkJCS8qIFNFVCBFWFRFUk5BTC1QUk9UT0NPTCAqLwot ICAgIGludCB4LCB5OwotICAgIGlmICgoeCA9IGNta2V5KGV4dHByb3RhYixueHRwcm90YWIsIiIs IiIseHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgc3dpdGNoICh4KSB7Ci0g ICAgICBjYXNlIEVYUF9IQU5ETEVSOgotCWlmICgoeCA9IGNta2V5KHNldGV4dGVybmhhbmRsZXIs MywiIiwiYXV0b21hdGljIix4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih4KTsKLQlpZiAoKHkg PSBjbWNmbSgpKSA8IDApCi0JICByZXR1cm4oeSk7Ci0JZXhwX2hhbmRsZXIgPSB4OwotCWJyZWFr OwotCQotI2lmZGVmIENPTU1FTlQKLSAgICAgIGNhc2UgRVhQX1NUREVSUjoKLQlpZiAoKHggPSBj bWtleShvb2F0YWIsMywiIiwiYXV0b21hdGljIix4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih4 KTsKLQlpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0JICByZXR1cm4oeSk7Ci0JZXhwX3N0ZGVyciA9 IHg7Ci0JYnJlYWs7Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCi0gICAgICBjYXNlIEVYUF9USU1P OgotCXkgPSBjbW51bSgiSW5hY3Rpdml0eSB0aW1lb3V0LCBzZWNvbmRzLCIsY2tpdG9hKERFRl9F WFBfVElNTyksCi0JCSAgMTAsJngseHhzdHJpbmcpOwotICAgICAgICByZXR1cm4oc2V0bnVtKCZl eHBfdGltbyx4LHksLTEpKTsKLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLX0KLSNl bmRpZgkvKiBYWVpfSU5URVJOQUwgKi8KLSNlbmRpZgkvKiBOT1BVU0ggKi8KLQotaW50Ci1zZXRk ZXN0KCkgewotICAgIGludCB4LCB5OwotICAgIGlmICgoeSA9IGNta2V5KGRlc3R0YWIsbmRlc3Rz LCIiLCJkaXNrIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgIGlmICgoeCA9IGNtY2Zt KCkpIDwgMCkgcmV0dXJuKHgpOwotICAgIGRlc3QgPSB5OwotICAgIHJldHVybigxKTsKLX0KLSNl bmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIERFQ05FVAotc3RydWN0IGtleXRhYiBkbmV0dGFi W10gPSB7Ci0jaWZuZGVmIE9TMk9OTFkKLSAgICAiY3Rlcm0iLCBOUF9DVEVSTSwgMCwKLSNlbmRp ZiAvKiBPUzJPTkxZICovCi0gICAgImxhdCIsICAgTlBfTEFULCAgIDAKLX07Ci1pbnQgbmRuZXQg PSAgKHNpemVvZihkbmV0dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0jZW5kaWYgLyog REVDTkVUICovCi0KLS8qICBTIEUgVCBQIFIgSSBOIFQgRSBSICAtLSAgU0VUIFBSSU5URVIgY29t bWFuZCAgKi8KLQotI2lmZGVmIFBSSU5UU1dJCi1zdGF0aWMgc3RydWN0IGtleXRhYiBwcm50YWJb XSA9IHsgICAgICAgLyogU0VUIFBSSU5URVIgc3dpdGNoZXMgKi8KLSAgICAiL2JpZGlyZWN0aW9u YWwiLCAgICBQUk5fQklELCAwLAotI2lmZGVmIE9TMgotICAgICIvY2hhcmFjdGVyLXNldCIsICAg IFBSTl9DUywgIENNX0FSRywKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAiL2NvbW1hbmQiLCAgICAg ICAgICBQUk5fUElQLCBDTV9BUkcsCi0gICAgIi9kb3MtZGV2aWNlIiwgICAgICAgUFJOX0RPUywg Q01fQVJHLAotICAgICIvZW5kLW9mLWpvYi1zdHJpbmciLFBSTl9UUk0sIENNX0FSRywKLSAgICAi L2ZpbGUiLCAgICAgICAgICAgICBQUk5fRklMLCBDTV9BUkcsCi0jaWZkZWYgQlBSSU5UCi0gICAg Ii9mbG93LWNvbnRyb2wiLCAgICAgUFJOX0ZMTywgQ01fQVJHLAotI2VuZGlmIC8qIEJQUklOVCAq LwotICAgICIvam9iLWhlYWRlci1maWxlIiwgIFBSTl9TRVAsIENNX0FSRywKLSNpZmRlZiBPUzIK LSAgICAiL2xlbmd0aCIsICAgICAgICAgICBQUk5fTEVOLCBDTV9BUkcsCi0jZW5kaWYgLyogT1My ICovCi0gICAgIi9ub25lIiwgICAgICAgICAgICAgUFJOX05PTiwgMCwKLSNpZmRlZiBPUzIKLSAg ICAiL25vcG9zdHNjcmlwdCIsICAgICBQUk5fUkFXLCAwLAotICAgICIvbm9wcyIsICAgICAgICAg ICAgIFBSTl9SQVcsIENNX0lOViwKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAiL291dHB1dC1vbmx5 IiwgICAgICBQUk5fT1VULCAwLAotI2lmZGVmIEJQUklOVAotICAgICIvcGFyaXR5IiwgICAgICAg ICAgIFBSTl9QQVIsIENNX0FSRywKLSNlbmRpZiAvKiBCUFJJTlQgKi8KLSAgICAiL3BpcGUiLCAg ICAgICAgICAgICBQUk5fUElQLCBDTV9BUkd8Q01fSU5WLAotI2lmZGVmIE9TMgotICAgICIvcG9z dHNjcmlwdCIsICAgICAgIFBSTl9QUywgIDAsCi0gICAgIi9wcyIsICAgICAgICAgICAgICAgUFJO X1BTLCAgQ01fSU5WLAotI2VuZGlmIC8qIE9TMiAqLwotICAgICIvc2VwYXJhdG9yIiwgICAgICAg IFBSTl9TRVAsIENNX0FSR3xDTV9JTlYsCi0jaWZkZWYgQlBSSU5UCi0gICAgIi9zcGVlZCIsICAg ICAgICAgICAgUFJOX1NQRCwgQ01fQVJHLAotI2VuZGlmIC8qIEJQUklOVCAqLwotICAgICIvdGlt ZW91dCIsICAgICAgICAgIFBSTl9UTU8sIENNX0FSRywKLSAgICAiL3Rlcm1pbmF0b3IiLCAgICAg ICBQUk5fVFJNLCBDTV9BUkd8Q01fSU5WLAotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0gICAgIi93 IiwgICAgICAgICAgICAgICAgUFJOX1dJTiwgQ01fQVJHfENNX0FCUnxDTV9JTlYsCi0gICAgIi93 aSIsICAgICAgICAgICAgICAgUFJOX1dJTiwgQ01fQVJHfENNX0FCUnxDTV9JTlYsCi0jZW5kaWYg LyogTlQgKi8KLSAgICAiL3dpZHRoIiwgICAgICAgICAgICBQUk5fV0lELCBDTV9BUkcsCi0jZW5k aWYgLyogT1MyICovCi0jaWZkZWYgTlQKLSAgICAiL3dpbmRvd3MtcXVldWUiLCAgICBQUk5fV0lO LCBDTV9BUkcsCi0jZW5kaWYgLyogTlQgKi8KLSAgICAiIiwgICAgICAgICAgICAgICAgIDAsICAg ICAgMAotfTsKLWludCBucHJuc3dpID0gIChzaXplb2YocHJudGFiKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSkgLSAxOwotI2VuZGlmIC8qIFBSSU5UU1dJICovCi0KLXN0YXRpYyBpbnQKLXNldHBy aW50ZXIoeHgpIGludCB4eDsgewotICAgIGludCB4LCB5OwotICAgIGNoYXIgKiBzOwotICAgIGNo YXIgKiBkZWZuYW1lID0gTlVMTDsKLSNpZmRlZiBPUzIKLSAgICBleHRlcm4gaW50IHBybmNzOwot I2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgQlBSSU5UCi0gICAgY2hhciBwb3J0YnVmWzY0XTsK LSAgICBsb25nIHBvcnRzcGVlZCA9IDBMOwotICAgIGludCBwb3J0cGFyaXR5ID0gMDsKLSAgICBp bnQgcG9ydGZsb3cgPSAwOwotI2VuZGlmIC8qIEJQUklOVCAqLwotCi0jaWZkZWYgUFJJTlRTV0kK LSAgICBpbnQgYywgaSwgbiwgd2lsZCwgY29uZmlybWVkID0gMDsgICAvKiBXb3JrZXJzICovCi0g ICAgaW50IGdldHZhbCA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogV2hldGhlciB0byBnZXQg c3dpdGNoIHZhbHVlICovCi0gICAgc3RydWN0IHN0cmluZ2ludCBwdltQUk5fTUFYKzFdOyAgICAv KiBUZW1wb3JhcnkgYXJyYXkgZm9yIHN3aXRjaCB2YWx1ZXMgKi8KLSAgICBzdHJ1Y3QgRkRCIHN3 LCBvZiwgY207ICAgICAgICAgICAgICAvKiBGREJzIGZvciBlYWNoIHBhcnNlIGZ1bmN0aW9uICov Ci0gICAgaW50IGhhdmVxdWUgPSAwOwotICAgIGludCB0eXBlc2V0ID0gMDsKLSNlbmRpZiAvKiBQ UklOVFNXSSAqLwotCi0jaWZkZWYgTlQKLSAgICBzdHJ1Y3Qga2V5dGFiICogcHJpbnR0YWIgPSBO VUxMLCAqIF9wcmludHRhYiA9IE5VTEw7Ci0gICAgaW50IG5wcmludCA9IDAsIHByaW50ZGVmPTA7 Ci0jZW5kaWYgLyogTlQgKi8KLQotI2lmZGVmIE9TMgotICAgIGRlZm5hbWUgPSAiUFJOIjsgICAg ICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgZGVm bmFtZSA9ICJMUFQ6IjsKLSNlbHNlCi0jaWZkZWYgVU5JWAotICAgIGRlZm5hbWUgPSAifGxwciI7 Ci0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwot Ci0jaWZkZWYgUFJJTlRTV0kKLSNpZmRlZiBOVAotICAgIGhhdmVxdWUgPSBXaW4zMkVudW1QcnQo JnByaW50dGFiLCZfcHJpbnR0YWIsJm5wcmludCwmcHJpbnRkZWYpOwotICAgIGhhdmVxdWUgPSBo YXZlcXVlICYmIG5wcmludDsKLSNlbmRpZiAvKiBOVCAqLwotCi0gICAgZm9yIChpID0gMDsgaSA8 PSBQUk5fTUFYOyBpKyspIHsgICAgLyogSW5pdGlhbGl6ZSBzd2l0Y2ggdmFsdWVzICovCi0gICAg ICAgIHB2W2ldLnN2YWwgPSBOVUxMOyAgICAgICAgICAgICAgLyogdG8gbnVsbCBwb2ludGVycyAq LwotICAgICAgICBwdltpXS5pdmFsID0gLTE7ICAgICAgICAgICAgICAgIC8qIGFuZCAtMSBpbnQg dmFsdWVzICovCi0gICAgICAgIHB2W2ldLnd2YWwgPSAoQ0tfT0ZGX1QpLTE7CS8qIGFuZCAtMSB3 aWRlIHZhbHVlcyAqLwotICAgIH0KLSAgICBpZiAoeHggPT0gWFlCRENQKSB7ICAgICAgICAgICAg ICAgICAvKiBTRVQgQlBSSU5URVIgPT0gL0JJRElSRUNUSU9OQUwgKi8KLSAgICAgICAgcHZbUFJO X0JJRF0uaXZhbCA9IDE7Ci0gICAgICAgIHB2W1BSTl9PVVRdLml2YWwgPSAwOwotICAgIH0KLQot ICAgIC8qIEluaXRpYWxpemUgZGVmYXVsdHMgYmFzZWQgdXBvbiBjdXJyZW50IHByaW50ZXIgc2V0 dGluZ3MgKi8KLSAgICBpZiAocHJpbnRlcm5hbWUpIHsKLSAgICAgICAgZGVmbmFtZSA9IHByaW50 ZXJuYW1lOwotICAgICAgICBzd2l0Y2ggKHByaW50ZXJ0eXBlKSB7Ci0gICAgICAgICAgY2FzZSBQ UlRfV0lOOiBwdltQUk5fV0lOXS5pdmFsID0gMTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBQUlRf RE9TOiBwdltQUk5fRE9TXS5pdmFsID0gMTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBQUlRfUElQ OiBwdltQUk5fUElQXS5pdmFsID0gMTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBQUlRfRklMOiBw dltQUk5fRklMXS5pdmFsID0gMTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBQUlRfTk9OOiBwdltQ Uk5fTk9OXS5pdmFsID0gMTsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWZkZWYgQlBSSU5U Ci0gICAgLyogb25seSBzZXQgdGhlIEJJREkgZmxhZyBpZiB3ZSBhcmUgYmlkaSAqLwotICAgIGlm IChwcmludGJpZGkpCi0gICAgICAgIHB2W1BSTl9CSURdLml2YWwgPSAxOwotCi0gICAgLyogc2Vy aWFsIHBvcnQgcGFyYW1ldGVycyBtYXkgYmUgc2V0IGZvciBub24tYmlkaSBkZXZpY2VzICovCi0g ICAgcHZbUFJOX1NQRF0uaXZhbCA9IHBwb3J0c3BlZWQgLyAxMEw7Ci0gICAgcHZbUFJOX1BBUl0u aXZhbCA9IHBwb3J0cGFyaXR5OwotICAgIHB2W1BSTl9GTE9dLml2YWwgPSBwcG9ydGZsb3c7Ci0j ZW5kaWYgLyogQlBSSU5UICovCi0gICAgaWYgKHByaW50dGltbykKLSAgICAgICAgcHZbUFJOX1RN T10uaXZhbCA9IHByaW50dGltbzsKLSAgICBpZiAocHJpbnR0ZXJtKSB7Ci0gICAgICAgIHB2W1BS Tl9UUk1dLml2YWwgPSAxOwotICAgICAgICBtYWtlc3RyKCZwdltQUk5fVFJNXS5zdmFsLHByaW50 dGVybSk7Ci0gICAgfQotICAgIGlmIChwcmludHNlcCkgewotICAgICAgICBwdltQUk5fU0VQXS5p dmFsID0gMTsKLSAgICAgICAgbWFrZXN0cigmcHZbUFJOX1NFUF0uc3ZhbCxwcmludHNlcCk7Ci0g ICAgfQotICAgIGlmICh0eHQycHMpIHsKLSAgICAgICAgcHZbUFJOX1BTXS5pdmFsID0gMTsKLSAg ICAgICAgcHZbUFJOX1dJRF0uaXZhbCA9IHBzX3dpZHRoOwotICAgICAgICBwdltQUk5fTEVOXS5p dmFsID0gcHNfbGVuZ3RoOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB2W1BSTl9SQVddLml2YWwg PSAxOwotICAgIH0KLQotICAgIC8qIFNldCB1cCBjaGFpbmVkIHBhcnNlIGZ1bmN0aW9ucy4uLiAq LwotCi0gICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRC IC0gY29tbWFuZCBzd2l0Y2hlcyAqLwotICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAg ICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICJTd2l0Y2giLCAgICAgICAgICAgICAgICAg ICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIG5wcm5zd2ksICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0gICAgICAgICAgIDQs ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBj bXN3aSAqLwotICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nl c3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgcHJudGFiLCAgICAgICAgICAgICAgICAgICAg ICAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICZjbSAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAgICAgICApOwotICAgIGNtZmRi aSgmY20sICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlY29uZCBmZGIgZm9yIGNvbmZpcm1h dGlvbiAqLwotICAgICAgICAgICBfQ01DRk0sICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2Rl ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICov Ci0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwot ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBk YXRhICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwg bnVtZXJpYyBkYXRhIDEgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotICAgICAgICAgICBOVUxMLAotICAgICAgICAg ICBOVUxMLAotICAgICAgICAgICAmb2YKLSAgICAgICAgICAgKTsKLSAgICBjbWZkYmkoJm9mLCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlyZCBGREIgZm9yIHByaW50ZXIgbmFtZSAqLwot ICAgICAgICAgICBfQ01PRkksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAg ICAgICAgICJQcmludGVyIG9yIGZpbGUgbmFtZSIsICAgICAgLyogaGxwbXNnICovCi0gICAgICAg ICAgIGRlZm5hbWUsICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAg ICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0g ICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBk YXRhIDE6IHRibCBzaXplICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotICAgICAgICAgICB4eHN0 cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAg ICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nICovCi0gICAgICAg ICAgIE5VTEwKLSAgICAgICAgICAgKTsKLQotICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFBhcnNlIDAgb3IgbW9yZSBzd2l0Y2hlcyAqLwotICAgICAgICB4ID0gY21m ZGIoJnN3KTsgICAgICAgICAgICAgICAgIC8qIFBhcnNlIHN3aXRjaCBvciBvdGhlciB0aGluZyAq LwotICAgICAgICBkZWJ1ZyhGMTAxLCJzZXRwcmludGVyIGNtZmRiIiwiIix4KTsKLSAgICAgICAg aWYgKHggPCAwKSAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciAqLwotICAgICAgICAgIGdv dG8geHNldHBybjsgICAgICAgICAgICAgICAgIC8qIG9yIHJlcGFyc2UgbmVlZGVkICovCi0gICAg ICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpICAgLyogQnJlYWsgb3V0IGlmIG5vdCBh IHN3aXRjaCAqLwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoY21yZXN1bHQuZmRiYWRk ciAhPSAmc3cpICAgIC8qIEFkdmFuY2VkIHVzYWdlIDotKSAqLwotICAgICAgICAgIGJyZWFrOwot ICAgICAgICBjID0gY21nYnJrKCk7ICAgICAgICAgICAgICAgICAgIC8qIEdldCBicmVhayBjaGFy YWN0ZXIgKi8KLSAgICAgICAgZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKTsgLyogdG8g c2VlIGhvdyB0aGV5IGVuZGVkIHRoZSBzd2l0Y2ggKi8KLSAgICAgICAgbiA9IGNtcmVzdWx0Lm5y ZXN1bHQ7ICAgICAgICAgICAvKiBOdW1lcmljIHJlc3VsdCA9IHN3aXRjaCB2YWx1ZSAqLwotICAg ICAgICBkZWJ1ZyhGMTAxLCJzZXRwcmludGVyIHN3aXRjaCIsIiIsbik7Ci0KLSAgICAgICAgc3dp dGNoIChuKSB7ICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIHRoZSBzd2l0Y2ggKi8KLSAg ICAgICAgICBjYXNlIFBSTl9QUzogICAgICAgICAgICAgICAgICAvKiBUZXh0IHRvIFBvc3RzY3Jp cHQgKi8KLSAgICAgICAgICAgIHB2W1BSTl9QU10uaXZhbCA9IDE7Ci0gICAgICAgICAgICBwdltQ Uk5fQklEXS5pdmFsID0gMDsKLSAgICAgICAgICAgIHB2W1BSTl9PVVRdLml2YWwgPSAxOwotICAg ICAgICAgICAgcHZbUFJOX1JBV10uaXZhbCA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLQotICAg ICAgICAgIGNhc2UgUFJOX1JBVzogICAgICAgICAgICAgICAgIC8qIE5vbi1Qb3N0c2NyaXB0ICov Ci0gICAgICAgICAgICBwdltQUk5fUFNdLml2YWwgPSAwOwotICAgICAgICAgICAgcHZbUFJOX1JB V10uaXZhbCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgUFJOX0JJ RDogICAgICAgICAgICAgICAgIC8qIEJpZGlyZWN0aW9uYWwgKi8KLSAgICAgICAgICAgIHB2W1BS Tl9CSURdLml2YWwgPSAxOwotICAgICAgICAgICAgcHZbUFJOX09VVF0uaXZhbCA9IDA7Ci0gICAg ICAgICAgICBwdltQUk5fUFNdLml2YWwgPSAwOwotICAgICAgICAgICAgcHZbUFJOX1JBV10uaXZh bCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgUFJOX09VVDogICAg ICAgICAgICAgICAgIC8qIE91dHB1dC1vbmx5ICovCi0gICAgICAgICAgICBwdltQUk5fT1VUXS5p dmFsID0gMTsKLSAgICAgICAgICAgIHB2W1BSTl9CSURdLml2YWwgPSAwOwotICAgICAgICAgICAg cHZbUFJOX1BTXS5pdmFsID0gMDsKLSAgICAgICAgICAgIHB2W1BSTl9SQVddLml2YWwgPSAxOwot ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFBSTl9OT046ICAgICAgICAgICAg ICAgICAvKiBOT05FICovCi0gICAgICAgICAgICB0eXBlc2V0Kys7Ci0gICAgICAgICAgICBwdltu XS5pdmFsID0gMTsKLSAgICAgICAgICAgIHB2W1BSTl9TUERdLml2YWwgPSAwOwotICAgICAgICAg ICAgcHZbUFJOX1BBUl0uaXZhbCA9IDA7Ci0gICAgICAgICAgICBwdltQUk5fRkxPXS5pdmFsID0g RkxPX0tFRVA7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmZGVmIFVOSVgKLSAgICAgICAgICBj YXNlIFBSTl9XSU46Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICAgIGNhc2UgUFJOX0RPUzog ICAgICAgICAgICAgICAgIC8qIERPUyBwcmludGVyIG5hbWUgKi8KLSAgICAgICAgICBjYXNlIFBS Tl9GSUw6ICAgICAgICAgICAgICAgICAvKiBPciBmaWxlbmFtZSAqLwotICAgICAgICAgIGNhc2Ug UFJOX1BJUDoKLSAgICAgICAgICAgIHR5cGVzZXQrKzsKLSAgICAgICAgICAgIGlmIChwdltuXS5z dmFsKSBmcmVlKHB2W25dLnN2YWwpOwotICAgICAgICAgICAgcHZbbl0uc3ZhbCA9IE5VTEw7Ci0g ICAgICAgICAgICBwdltQUk5fTk9OXS5pdmFsID0gMDsgICAgICAgLyogWmVybyBhbnkgcHJldmlv dXMgc2VsZWN0aW9ucyAqLwotICAgICAgICAgICAgcHZbUFJOX1dJTl0uaXZhbCA9IDA7Ci0gICAg ICAgICAgICBwdltQUk5fRE9TXS5pdmFsID0gMDsKLSAgICAgICAgICAgIHB2W1BSTl9GSUxdLml2 YWwgPSAwOwotICAgICAgICAgICAgcHZbUFJOX1BJUF0uaXZhbCA9IDA7Ci0gICAgICAgICAgICBw dltuXS5pdmFsID0gMTsgICAgICAgICAgICAgLyogRmxhZyB0aGlzIG9uZSAqLwotICAgICAgICAg ICAgaWYgKCFnZXR2YWwpIGJyZWFrOyAgICAgICAgIC8qIE5vIHZhbHVlIHdhbnRlZCAqLwotCi0g ICAgICAgICAgICBpZiAobiA9PSBQUk5fRklMKSB7ICAgICAgICAgLyogRmlsZSwgY2hlY2sgYWNj ZXNzaWJpbGl0eSAqLwotICAgICAgICAgICAgICAgIGludCB3aWxkID0gMDsKLSAgICAgICAgICAg ICAgICBpZiAoKHggPSBjbWlvZmkoIkZpbGVuYW1lIiwia2VybWl0LnBybiIsJnMsJndpbGQseHhz dHJpbmcpKTwgMCkKLSAgICAgICAgICAgICAgICAgIGlmICh4ID09IC05KSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgaWYgKHpjaGtvKHMpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIkNhbid0IGNyZWF0ZSBcIiVzXCJcbiIscyk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICB9IGVsc2UgZ290byB4c2V0cHJuOwotICAgICAgICAgICAgICAgIGlmIChpc3dpbGQocykp IHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QSBzaW5nbGUgZmlsZSBwbGVhc2VcbiIp OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICBwdltQUk5fU1BEXS5pdmFsID0gMDsKLSAgICAgICAgICAgICAgICBwdltQ Uk5fUEFSXS5pdmFsID0gMDsKLSAgICAgICAgICAgICAgICBwdltQUk5fRkxPXS5pdmFsID0gRkxP X0tFRVA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCh4ID0gY21mbGQobiA9PSBQUk5fRE9TID8g LyogVmFsdWUgd2FudGVkIC0gcGFyc2UgaXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICJET1MgcHJpbnRlciBkZXZpY2UgbmFtZSIgOiAvKiBIZWxwIG1lc3NhZ2UgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIChuID09IFBSTl9QSVAgPwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlByb2dyYW0gbmFtZSIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGVu YW1lIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBuID09IFBSTl9ET1MgPwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBSTiIgOiAgICAgIC8qIERlZmF1bHQgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgKSkgPCAwKQotICAgICAgICAgICAgICBnb3RvIHhzZXRwcm47Ci0gICAgICAgICAgICBz ID0gYnJzdHJpcChzKTsgICAgICAgICAgICAgLyogU3RyaXAgZW5jbG9zaW5nIGJyYWNlcyAqLwot ICAgICAgICAgICAgd2hpbGUgKCpzID09IFNQKSAgICAgICAgICAgIC8qIFN0cmlwIGxlYWRpbmcg YmxhbmtzICovCi0gICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgIGlmIChuID09IFBSTl9Q SVApIHsgICAgICAgICAvKiBJZiAvUElQRTogKi8KLSAgICAgICAgICAgICAgICBpZiAoKnMgPT0g J3wnKSB7ICAgICAgICAvKiBzdHJpcCBhbnkgZXh0cmFuZW91cyBwaXBlIHNpZ24gKi8KLSAgICAg ICAgICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnMgPT0gU1Ap Ci0gICAgICAgICAgICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICBwdltQUk5fU1BEXS5pdmFsID0gMDsKLSAgICAgICAgICAgICAgICBwdltQUk5fUEFS XS5pdmFsID0gMDsKLSAgICAgICAgICAgICAgICBwdltQUk5fRkxPXS5pdmFsID0gRkxPX0tFRVA7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHkgPSBzdHJsZW4ocykpID4gMCkgICAg LyogQW55dGhpbmcgbGVmdD8gKi8KLSAgICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwgPSAoY2hh ciAqKSBtYWxsb2MoeSsxKSkgLyogWWVzLCBrZWVwIGl0ICovCi0gICAgICAgICAgICAgICAgc3Ry Y3B5KHB2W25dLnN2YWwscyk7ICAgLyogc2FmZSAqLwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZk ZWYgTlQKLSAgICAgICAgICBjYXNlIFBSTl9XSU46ICAgICAgICAgICAgICAgICAvKiBXaW5kb3dz IHF1ZXVlIG5hbWUgKi8KLSAgICAgICAgICAgIHR5cGVzZXQrKzsKLSAgICAgICAgICAgIGlmIChw dltuXS5zdmFsKSBmcmVlKHB2W25dLnN2YWwpOwotICAgICAgICAgICAgcHZbbl0uc3ZhbCA9IE5V TEw7Ci0gICAgICAgICAgICBwdltQUk5fTk9OXS5pdmFsID0gMDsKLSAgICAgICAgICAgIHB2W1BS Tl9ET1NdLml2YWwgPSAwOwotICAgICAgICAgICAgcHZbUFJOX0ZJTF0uaXZhbCA9IDA7Ci0gICAg ICAgICAgICBwdltuXS5pdmFsID0gMTsKLSAgICAgICAgICAgIHB2W1BSTl9TUERdLml2YWwgPSAw OwotICAgICAgICAgICAgcHZbUFJOX1BBUl0uaXZhbCA9IDA7Ci0gICAgICAgICAgICBwdltQUk5f RkxPXS5pdmFsID0gRkxPX0tFRVA7Ci0KLSAgICAgICAgICAgIGlmICghZ2V0dmFsIHx8ICFoYXZl cXVlKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KF9w cmludHRhYixucHJpbnQsIlByaW50IHF1ZXVlIG5hbWUiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgX3ByaW50dGFiW3ByaW50ZGVmXS5rd2QseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAg ICAgICAgICBpZiAoeCAhPSAtMikKLSAgICAgICAgICAgICAgICAgIGdvdG8geHNldHBybjsKLQot ICAgICAgICAgICAgICAgIGlmIChwdltQUk5fV0lOXS5zdmFsKSBmcmVlKHB2W1BSTl9XSU5dLnN2 YWwpOwotICAgICAgICAgICAgICAgIHMgPSBhdG1idWY7Ci0gICAgICAgICAgICAgICAgaWYgKCh5 ID0gc3RybGVuKHMpKSA+IDApCi0gICAgICAgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCA9IChj aGFyICopbWFsbG9jKHkrMSkpCi0gICAgICAgICAgICAgICAgICAgIHN0cmNweShwdltuXS5zdmFs LHMpOyAvKiBzYWZlICovCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlm IChwdltQUk5fV0lOXS5zdmFsKSBmcmVlKHB2W1BSTl9XSU5dLnN2YWwpOwotICAgICAgICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBucHJpbnQ7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBp ZiAoeCA9PSBwcmludHRhYltpXS5rd3ZhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcyA9 IHByaW50dGFiW2ldLmt3ZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgo eSA9IHN0cmxlbihzKSkgPiAwKQotICAgICAgICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwgPSAo Y2hhciAqKW1hbGxvYyh5KzEpKQotICAgICAgICAgICAgICAgICAgICBzdHJjcHkocHZbbl0uc3Zh bCxzKTsgLyogc2FmZSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0jZW5k aWYgLyogTlQgKi8KLQotICAgICAgICAgIGNhc2UgUFJOX1NFUDogICAgICAgICAgICAgICAgIC8q IC9KT0ItSEVBREVSIChzZXBhcmF0b3IpICovCi0gICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkg ZnJlZShwdltuXS5zdmFsKTsKLSAgICAgICAgICAgIHB2W25dLnN2YWwgPSBOVUxMOwotICAgICAg ICAgICAgcHZbbl0uaXZhbCA9IDE7Ci0gICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0g ICAgICAgICAgICBpZiAoKHggPSBjbWlmaSgiRmlsZW5hbWUiLCIiLCZzLCZ5LHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgICAgICBnb3RvIHhzZXRwcm47Ci0gICAgICAgICAgICBpZiAoeSkgewot ICAgICAgICAgICAgICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZFxuIik7Ci0gICAg ICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8geHNldHBybjsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoeSA9IHN0cmxlbihzKSkgPiAwKQotICAgICAgICAg ICAgICBpZiAocHZbbl0uc3ZhbCA9IChjaGFyICopIG1hbGxvYyh5KzEpKQotICAgICAgICAgICAg ICAgIHN0cmNweShwdltuXS5zdmFsLHMpOyAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgIGJyZWFr OwotCi0gICAgICAgICAgY2FzZSBQUk5fVE1POiAgICAgICAgICAgICAgICAgLyogL1RJTUVPVVQ6 bnVtYmVyICovCi0gICAgICAgICAgICBwdltuXS5pdmFsID0gMDsKLSAgICAgICAgICAgIGlmICgh Z2V0dmFsKSBicmVhazsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtbnVtKCJTZWNvbmRzIiwiMCIs MTAsJnkseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIGdvdG8geHNldHBybjsKLSAgICAg ICAgICAgIGlmICh5ID4gOTk5KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnkgLSA5 OTkgaXMgdGhlIG1heGltdW1cbiIpOwotICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAg ICAgICAgICBnb3RvIHhzZXRwcm47Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg cHZbbl0uaXZhbCA9IHk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgUFJO X1RSTTogICAgICAgICAgICAgICAgIC8qIC9FTkQtT0YtSk9COnN0cmluZyAqLwotICAgICAgICAg ICAgaWYgKHB2W25dLnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7Ci0gICAgICAgICAgICBwdltuXS5z dmFsID0gTlVMTDsKLSAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOwotICAgICAgICAgICAgaWYg KCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlN0cmluZyAoZW5j bG9zZSBpbiBicmFjZXMgaWYgaXQgY29udGFpbnMgc3BhY2VzKSIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgZ290byB4c2V0 cHJuOwotICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7Ci0gICAgICAgICAgICBpZiAoKHkgPSBz dHJsZW4ocykpID4gMCkKLSAgICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwgPSAoY2hhciAqKSBt YWxsb2MoeSsxKSkKLSAgICAgICAgICAgICAgICBzdHJjcHkocHZbbl0uc3ZhbCxzKTsgICAvKiBz YWZlICovCi0gICAgICAgICAgICBicmVhazsKLQotI2lmZGVmIEJQUklOVAotICAgICAgICAgIGNh c2UgUFJOX0ZMTzoKLSAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKLSAgICAgICAgICAg IGlmICgoeCA9IGNta2V5KGZsb3RhYixuZmxvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlNlcmlhbCBwcmludGVyLXBvcnQgZmxvdyBjb250cm9sIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJydHMvY3RzIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgZ290 byB4c2V0cHJuOwotICAgICAgICAgICAgcHZbbl0uaXZhbCA9IHg7Ci0gICAgICAgICAgICBicmVh azsKLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICAgICAgY2FzZSBQUk5fU1BEOgotICAgICAgICAg ICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotCi0gICAgICAgICAgICAvKiBUTl9DT01QT1JUIGhlcmUg dG9vPyAqLwotCi0gICAgICAgICAgICBpZiAoKHggPSBjbWtleShzcGR0YWIsICAgICAgLyogU3Bl ZWQgKG5vIGRlZmF1bHQpICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBuc3BkLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlNlcmlhbCBwcmludGVyLXBvcnQgaW50ZXJmYWNlIHNw ZWVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICI5NjAwIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIHh4c3RyaW5nKQotICAgICAgICAgICAgICAgICApIDwgMCkKLSAgICAgICAg ICAgICAgZ290byB4c2V0cHJuOwotICAgICAgICAgICAgcHZbbl0uaXZhbCA9IHg7Ci0gICAgICAg ICAgICBicmVhazsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSAgICAgICAgICBjYXNlIFBSTl9Q QVI6Ci0gICAgICAgICAgICBwdltuXS5pdmFsID0gMDsKLSAgICAgICAgICAgIGlmICghZ2V0dmFs KSBicmVhazsKLSAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHBhcnRibCxucGFyLCJTZXJpYWwg cHJpbnRlci1wb3J0IHBhcml0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibm9uZSIs eHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIGdvdG8geHNldHBybjsKLSAgICAgICAgICAg IHB2W25dLml2YWwgPSB4OwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQlBSSU5UICov Ci0KLSNpZmRlZiBPUzIKLSAgICAgICAgICBjYXNlIFBSTl9MRU46Ci0gICAgICAgICAgICBpZiAo IWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbW51bSgiUFMgcGFnZSBsZW5n dGgiLCAiNjYiLDEwLCZ5LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICBnb3RvIHhzZXRw cm47Ci0gICAgICAgICAgICBwdltuXS5pdmFsID0geTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g ICAgICAgICAgY2FzZSBQUk5fV0lEOgotICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwot ICAgICAgICAgICAgaWYgKCh4ID0gY21udW0oIlBTIHBhZ2Ugd2lkdGgiLCAiODAiLDEwLCZ5LHh4 c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICBnb3RvIHhzZXRwcm47Ci0gICAgICAgICAgICBw dltuXS5pdmFsID0geTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBQUk5f Q1M6Ci0gICAgICAgICAgICAgIHB2W25dLml2YWwgPSAwOwotICAgICAgICAgICAgICBpZiAoIWdl dHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KAotI2lmZGVmIENLT1VO SQotICAgICAgICAgICAgICAgICAgICAgICB0eHJ0YWIsbnR4cnRhYiwKLSNlbHNlIC8qIENLT1VO SSAqLwotICAgICAgICAgICAgICAgICAgICAgICB0dGNzdGFiLG50ZXJtYywKLSNlbmRpZiAvKiBD S09VTkkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgImF1dG8tcHJpbnQvcHJpbnRzY3JlZW4g Y2hhcmFjdGVyLXNldCIsCi0gICAgICAgICAgICAgICAgICAgICAgICJjcDQzNyIseHhzdHJpbmcp KSA8IDApCi0gICAgICAgICAgICAgICAgICBnb3RvIHhzZXRwcm47Ci0gICAgICAgICAgICAgIHB2 W25dLml2YWwgPSB5OwotICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBPUzIgKi8KLQot ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIHN3aXRj aCB2YWx1ZSAtICVkXG4iLGNtcmVzdWx0Lm5yZXN1bHQpOwotICAgICAgICAgICAgeCA9IC05Owot ICAgICAgICAgICAgZ290byB4c2V0cHJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGxpbmVbMF0g PSBOVUw7ICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgcHJpbnRlciBuYW1lIHZh bHVlICovCi0gICAgc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgeyAgICAgICAgICAgLyogSG93IGRp ZCB3ZSBnZXQgaGVyZT8gKi8KLSAgICAgIGNhc2UgX0NNT0ZJOiAgICAgICAgICAgICAgICAgICAg ICAvKiBUaGV5IHR5cGVkIGEgZmlsZW5hbWUgKi8KLSAgICAgICAgY2tzdHJuY3B5KGxpbmUsY21y ZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOyAvKiBOYW1lICovCi0gICAgICAgIHdpbGQgPSBjbXJl c3VsdC5ucmVzdWx0OyAgICAgICAgLyogV2lsZCBmbGFnICovCi0gICAgICAgIGlmICghdHlwZXNl dCkgeyAgICAgICAgICAgICAgICAgLyogQSBwcmludGVyIG5hbWUgd2l0aG91dCBhIHR5cGUgKi8K LSAgICAgICAgICAgIHB2W1BSTl9OT05dLml2YWwgPSAwOyAgICAgICAvKiBpcyBzdXBwb3NlZCB0 byBiZSB0cmVhdGVkIGFzICAqLwotICAgICAgICAgICAgcHZbUFJOX1dJTl0uaXZhbCA9IDA7ICAg ICAgIC8qIGEgRE9TIG9yIFBpcGUgcHJpbnRlci4gIFdlICAgICovCi0gICAgICAgICAgICBwdltQ Uk5fRklMXS5pdmFsID0gMDsgICAgICAgLyogY2xlYXIgYWxsIHRoZSBmbGFncyBhbmQgbGV0ICAg Ki8KLSAgICAgICAgICAgIHB2W1BSTl9QSVBdLml2YWwgPSAwOyAgICAgICAvKiB0aGUgY29kZSBi ZWxvdyBkb3BlIG91dCB0aGUgICAqLwotICAgICAgICAgICAgcHZbUFJOX0RPU10uaXZhbCA9IDA7 ICAgICAgIC8qIHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIH0KLSNp ZmRlZiBOVAotICAgICAgICBlbHNlIGlmIChwdltQUk5fV0lOXS5pdmFsICYmIGxvb2t1cChfcHJp bnR0YWIsbGluZSxucHJpbnQsJnkpKSB7Ci0gICAgICAgICAgICAvKiBpbnZhbGlkIFdpbmRvdyBR dWV1ZSBuYW1lICovCi0gICAgICAgICAgICBwcmludGYoIj9pbnZhbGlkIFdpbmRvd3MgUHJpbnRl ciBRdWV1ZSBuYW1lOiBcIiVzXCJcclxuIixsaW5lKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAg ICAgICAgICAgIGdvdG8geHNldHBybjsKLSAgICAgICAgfQotI2VuZGlmIC8qIE5UICovCi0gICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgICAgICAgICAgLyogQ29uZmlybSB0aGUgY29tbWFu ZCAqLwotICAgICAgICAgIGdvdG8geHNldHBybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl IF9DTUNGTTogICAgICAgICAgICAgICAgICAgICAgLyogVGhleSBlbnRlcmVkIHRoZSBjb21tYW5k ICovCi0gICAgICAgIGlmIChwdltQUk5fRE9TXS5pdmFsID4gMCkKLSAgICAgICAgICBja3N0cm5j cHkobGluZSxwdltQUk5fRE9TXS5zdmFsID8gcHZbUFJOX0RPU10uc3ZhbCA6ICIiLExJTkJVRlNJ Wik7Ci0gICAgICAgIGVsc2UgaWYgKHB2W1BSTl9XSU5dLml2YWwgPiAwKQotICAgICAgICAgIGNr c3RybmNweShsaW5lLHB2W1BSTl9XSU5dLnN2YWwgPyBwdltQUk5fV0lOXS5zdmFsIDogIiIsTElO QlVGU0laKTsKLSAgICAgICAgZWxzZSBpZiAocHZbUFJOX0ZJTF0uaXZhbCA+IDApCi0gICAgICAg ICAgY2tzdHJuY3B5KGxpbmUscHZbUFJOX0ZJTF0uc3ZhbCA/IHB2W1BSTl9GSUxdLnN2YWwgOiAi IixMSU5CVUZTSVopOwotICAgICAgICBlbHNlIGlmIChwdltQUk5fUElQXS5pdmFsID4gMCkKLSAg ICAgICAgICBja3N0cm5jcHkobGluZSxwdltQUk5fUElQXS5zdmFsID8gcHZbUFJOX1BJUF0uc3Zh bCA6ICIiLExJTkJVRlNJWik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEJ5IG1pc3Rha2UgKi8KLSAgICAgICAgcHJpbnRmKCI/VW5l eHBlY3RlZCBmdW5jdGlvbiBjb2RlOiAlZFxuIixjbXJlc3VsdC5mY29kZSk7Ci0gICAgICAgIHgg PSAtOTsKLSAgICAgICAgZ290byB4c2V0cHJuOwotICAgIH0KLQotI2Vsc2UgIC8qIE5vIFBSSU5U U1dJICovCi0KLSAgICBpZiAoKHggPSBjbW9maSgiUHJpbnRlciBvciBmaWxlIG5hbWUiLGRlZm5h bWUsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgaWYgKHggPiAxKSB7 Ci0gICAgICAgIHByaW50ZigiP0RpcmVjdG9yeSBuYW1lcyBub3QgYWxsb3dlZFxuIik7Ci0gICAg ICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIHdoaWxlICgqcyA9PSBTUCB8fCAqcyA9PSBIVCkg cysrOyAgIC8qIFRyaW0gbGVhZGluZyB3aGl0ZXNwYWNlICovCi0gICAgY2tzdHJuY3B5KGxpbmUs cyxMSU5CVUZTSVopOyAgICAgICAgLyogTWFrZSBhIHRlbXBvcmFyeSBzYWZlIGNvcHkgKi8KLSAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsgICAvKiBDb25maXJtIHRoZSBjb21t YW5kICovCi0jZW5kaWYgLyogUFJJTlRTV0kgKi8KLQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5z ZXJ2ZXIgJiYgKGlzZ3Vlc3QKLSNpZm5kZWYgTk9TRVJWRVIKLSAgICAgICAgICAgICAgICAgICAg IHx8ICFFTkFCTEVEKGVuX3ByaSkKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotICAgICAgICAgICAg ICAgICAgICAgKSkgewotICAgICAgICBwcmludGYoIlNvcnJ5LCBwcmludGluZyBkaXNhYmxlZFxy XG4iKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9Ci0jZW5kaWYgLyogSVNL RCAqLwotCi0jaWZkZWYgUFJJTlRTV0kKLSNpZmRlZiBCUFJJTlQKLSAgICBpZiAocHJpbnRiaWRp KSB7ICAgICAgICAgICAgICAgICAgICAvKiBJZiBiaWRpIHByaW50aW5nIGFjdGl2ZSAqLwotI2lm bmRlZiBVTklYCi0gICAgICAgIGJwcnRzdG9wKCk7ICAgICAgICAgICAgICAgICAgICAgLyogU3Rv cCBpdCBiZWZvcmUgcHJvY2VlZGluZyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgcHJp bnRiaWRpID0gMDsKLSAgICB9Ci0gICAgaWYgKHB2W1BSTl9TUERdLml2YWwgPiAwKSB7Ci0gICAg ICAgIHBvcnRzcGVlZCA9IChsb25nKSBwdltQUk5fU1BEXS5pdmFsICogMTBMOwotICAgICAgICBp ZiAocG9ydHNwZWVkID09IDcwTCkgcG9ydHNwZWVkID0gNzVMOwotICAgIH0KLSAgICBpZiAocHZb UFJOX1BBUl0uaXZhbCA+IDApCi0gICAgICAgIHBvcnRwYXJpdHkgPSBwdltQUk5fUEFSXS5pdmFs OwotICAgIGlmIChwdltQUk5fRkxPXS5pdmFsID4gMCkKLSAgICAgICAgcG9ydGZsb3cgPSBwdltQ Uk5fRkxPXS5pdmFsOwotI2VuZGlmIC8qIEJQUklOVCAqLwotI2VuZGlmIC8qIFBSSU5UU1dJICov Ci0KLSAgICBzID0gbGluZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmludGVyIG5h bWUsIGlmIGdpdmVuICovCi0KLSNpZmRlZiBPUzJPUlVOSVgKLSNpZmRlZiBQUklOVFNXSQotICAg IGlmIChwdltQUk5fUElQXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIC9QSVBFIHdhcyBnaXZlbj8g Ki8KLSAgICAgICAgcHJpbnRwaXBlID0gMTsKLSAgICAgICAgbm9wcmludGVyID0gMDsKLSAgICAg ICAgaWYgKCpzID09ICAnfCcpIHsgICAgICAgICAgICAgICAvKiBJdCBtaWdodCBzdGlsbCBoYXZl IGEgcGlwZSBzaWduICovCi0gICAgICAgICAgICBzKys7ICAgICAgICAgICAgICAgICAgICAgICAg LyogaWYgbmFtZSBnaXZlIGxhdGVyICovCi0gICAgICAgICAgICB3aGlsZSAoKnMgPT0gU1ApICAg ICAgICAgICAgLyogc28gcmVtb3ZlIGl0IGFuZCBzcGFjZXMgKi8KLSAgICAgICAgICAgICAgcysr OwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0jZW5kaWYgLyogUFJJTlRTV0kgKi8KLSAgICAgIGlm ICgqcyA9PSAnfCcpIHsgICAgICAgICAgICAgICAgICAvKiBPciBwaXBlIGltcGxpZWQgYnkgbmFt ZT8gKi8KLSAgICAgICAgICBzKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCBw YXN0IHBpcGUgc2lnbiAqLwotICAgICAgICAgIHdoaWxlICgqcyA9PSBTUCkgICAgICAgICAgICAg IC8qIEdvYmJsZSB3aGl0ZXNwYWNlICovCi0gICAgICAgICAgICBzKys7Ci0gICAgICAgICAgaWYg KCpzKSB7Ci0gICAgICAgICAgICAgIHByaW50cGlwZSA9IDE7Ci0gICAgICAgICAgICAgIG5vcHJp bnRlciA9IDA7Ci0gICAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBwcmludHBp cGUgPSAwOwotICAgICAgfQotCi0jaWZkZWYgUFJJTlRTV0kKLSNpZmRlZiBCUFJJTlQKLSAgICBp ZiAocHJpbnRwaXBlICYmIHB2W1BSTl9CSURdLml2YWwgPiAwKSB7Ci0gICAgICAgIHByaW50Zigi P1NvcnJ5LCBwaXBlcyBub3QgYWxsb3dlZCBmb3IgYmlkaXJlY3Rpb25hbCBwcmludGVyXG4iKTsK LSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0jZW5kaWYgLyogQlBSSU5UICovCi0jZW5kaWYg LyogUFJJTlRTV0kgKi8KLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLQotI2lmZGVmIE9TMgotICAg IGlmICggcHZbUFJOX0NTXS5pdmFsID4gMCApIAotICAgICAgICBwcm5jcyA9IHB2W1BSTl9DU10u aXZhbDsKLQotICAgIGlmICggcHZbUFJOX1BTXS5pdmFsID4gMCApIHsKLSAgICAgICAgdHh0MnBz ID0gMTsKLSAgICAgICAgcHNfd2lkdGggPSBwdltQUk5fV0lEXS5pdmFsIDw9IDAgPyA4MCA6IHB2 W1BSTl9XSURdLml2YWw7Ci0gICAgICAgIHBzX2xlbmd0aCA9IHB2W1BSTl9MRU5dLml2YWwgPD0g MCA/IDY2IDogcHZbUFJOX0xFTl0uaXZhbDsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSAg ICB5ID0gc3RybGVuKHMpOyAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgbmFtZSBv ZiBuZXcgcHJpbnQgZmlsZSAqLwotICAgIGlmICh5ID4gMAotI2lmZGVmIE9TMgotICAgICAgICAm JiAoKHkgIT0gMykgfHwgKGNrc3RyY21wKHMsIlBSTiIsMywwKSAhPSAwKSkKLSNlbmRpZiAvKiBP UzIgKi8KLSAgICAgICAgKSB7Ci0gICAgICAgIGlmIChwcmludGVybmFtZSkgeyAgICAgICAgICAg ICAgLyogSGFkIGEgcHJpbnQgZmlsZSBiZWZvcmU/ICovCi0gICAgICAgICAgICBmcmVlKHByaW50 ZXJuYW1lKTsgICAgICAgICAgLyogUmVtb3ZlIGl0cyBuYW1lICovCi0gICAgICAgICAgICBwcmlu dGVybmFtZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRlcm5hbWUgPSAoY2hhciAq KSBtYWxsb2MoeSArIDEpOyAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgaXQgKi8KLSAgICAgICAgaWYg KCFwcmludGVybmFtZSkgewotICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24g ZmFpbHVyZVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAg IHN0cmNweShwcmludGVybmFtZSxzKTsgICAgICAgICAgLyogKHNhZmUpIENvcHkgbmV3IG5hbWUg dG8gbmV3IHNwYWNlICovCi0gICAgICAgIGRlYnVnKEYxMTAsInByaW50ZXJuYW1lIixwcmludGVy bmFtZSwwKTsKLSAgICB9Ci0KLSNpZmRlZiBQUklOVFNXSQotICAgIC8qIFNldCBwcmludGVyIHR5 cGUgZnJvbSBzd2l0Y2hlcyB0aGF0IHdlcmUgZ2l2ZW4gZXhwbGljaXRseSAqLwotCi0gICAgaWYg KHB2W1BSTl9OT05dLml2YWwgPiAwKSB7ICAgICAgICAgLyogTm8gcHJpbnRlciAqLwotICAgICAg ICBwcmludGVydHlwZSA9IFBSVF9OT047Ci0gICAgICAgIG5vcHJpbnRlciA9IDE7Ci0gICAgICAg IHByaW50cGlwZSA9IDA7Ci0gICAgfSBlbHNlIGlmIChwdltQUk5fRklMXS5pdmFsID4gMCkgeyAg LyogRmlsZSAqLwotICAgICAgICBwcmludGVydHlwZSA9IFBSVF9GSUw7Ci0gICAgICAgIG5vcHJp bnRlciA9IDA7Ci0gICAgICAgIHByaW50cGlwZSA9IDA7Ci0gICAgfSBlbHNlIGlmIChwdltQUk5f UElQXS5pdmFsID4gMCkgeyAgLyogUGlwZSAqLwotICAgICAgICBwcmludGVydHlwZSA9IFBSVF9Q SVA7Ci0gICAgICAgIG5vcHJpbnRlciA9IDA7Ci0gICAgICAgIHByaW50cGlwZSA9IDE7Ci0gICAg fSBlbHNlIGlmIChwdltQUk5fV0lOXS5pdmFsID4gMCkgeyAgLyogV2luZG93cyBwcmludCBxdWV1 ZSAqLwotICAgICAgICBwcmludGVydHlwZSA9IFBSVF9XSU47Ci0gICAgICAgIG5vcHJpbnRlciA9 IDA7Ci0gICAgICAgIHByaW50cGlwZSA9IDA7Ci0gICAgfSBlbHNlIGlmIChwdltQUk5fRE9TXS5p dmFsID4gMCkgeyAgLyogRE9TIGRldmljZSAqLwotICAgICAgICBwcmludGVydHlwZSA9IFBSVF9E T1M7Ci0gICAgICAgIG5vcHJpbnRlciA9IDA7Ci0gICAgICAgIHByaW50cGlwZSA9IDA7Ci0gICAg fSBlbHNlIGlmIChsaW5lWzBdKSB7ICAgICAgICAgICAgICAgLyogTmFtZSBnaXZlbiB3aXRob3V0 IHN3aXRjaGVzICovCi0gICAgICAgIG5vcHJpbnRlciA9IDA7Ci0gICAgICAgIHByaW50ZXJ0eXBl ID0gcHJpbnRwaXBlID8gUFJUX1BJUCA6IFBSVF9ET1M7Ci0jaWZkZWYgTlQKLSAgICAgICAgLyog d2FzIHRoZSBjb21tYW5kIFNFVCBQUklOVEVSIHdpbmRvd3MtcXVldWUgPyAqLwotICAgICAgICB5 ID0gbG9va3VwKF9wcmludHRhYixsaW5lLG5wcmludCwmeCk7Ci0gICAgICAgIGlmICh5ID49IDAp IHsKLSAgICAgICAgICAgIHByaW50ZXJ0eXBlID0gUFJUX1dJTjsKLSAgICAgICAgICAgIGlmIChw dltQUk5fV0lOXS5zdmFsKSBmcmVlKHB2W1BSTl9XSU5dLnN2YWwpOwotICAgICAgICAgICAgaWYg KHByaW50ZXJuYW1lKSB7ICAgICAgICAgIC8qIEhhZCBhIHByaW50IGZpbGUgYmVmb3JlPyAqLwot ICAgICAgICAgICAgICAgIGZyZWUocHJpbnRlcm5hbWUpOyAgICAgIC8qIFJlbW92ZSBpdHMgbmFt ZSAqLwotICAgICAgICAgICAgICAgIHByaW50ZXJuYW1lID0gTlVMTDsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIHB2W1BSTl9XSU5dLnN2YWwgPSBOVUxMOwotICAgICAgICAgICAgcHZbUFJO X1dJTl0uaXZhbCA9IDE7Ci0gICAgICAgICAgICBzID0gcHJpbnR0YWJbeF0ua3dkOyAgICAgICAg LyogR2V0IGZ1bGwgbmV3IG5hbWUgKi8KLSAgICAgICAgICAgIGlmICgoeSA9IHN0cmxlbihzKSkg PiAwKSB7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigmcHZbUFJOX1dJTl0uc3ZhbCxzKTsKLSAg ICAgICAgICAgICAgICBtYWtlc3RyKCZwcmludGVybmFtZSxzKTsKLSAgICAgICAgICAgICAgICBp ZiAoIXByaW50ZXJuYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBh bGxvY2F0aW9uIGZhaWx1cmVcbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJwcmludGVybmFt ZSIscHJpbnRlcm5hbWUsMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoIHkg PT0gLTIgKSB7Ci0gICAgICAgICAgICAvKiBBbWJpZ3VvdXMgUHJpbnQgUXVldWUgTmFtZSAqLwot ICAgICAgICAgICAgcHJpbnRmKCI/QW1iaWd1b3VzIHByaW50ZXIgbmFtZSBwcm92aWRlZC5cbiIp OwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE5UICovCi0g ICAgfQotCi0jaWZkZWYgQlBSSU5UCi0gICAgLyogUG9ydCBwYXJhbWV0ZXJzIG1heSBiZSBzZXQg Zm9yIG5vbi1iaWRpIG1vZGUgKi8KLQotICAgIHBwb3J0c3BlZWQgPSBwb3J0c3BlZWQ7ICAgICAg ICAgICAgIC8qIFNldCBwYXJhbWV0ZXJzICovCi0gICAgcHBvcnRwYXJpdHkgPSBwb3J0cGFyaXR5 OwotICAgIHBwb3J0ZmxvdyA9IHBvcnRmbG93OwotCi0gICAgaWYgKHB2W1BSTl9CSURdLml2YWwg PiAwKSB7ICAgICAgICAgLyogQmlkaXJlY3Rpb25hbCAqLwotI2lmZGVmIFVOSVgKLSAgICAgICAg cHJpbnRiaWRpID0gMTsgICAgICAgICAgICAgICAgICAvKiAoanVzdCB0byB0ZXN0IHBhcnNpbmcu Li4pICovCi0jZWxzZQotICAgICAgICBwcmludGJpZGkgPSBicHJ0c3RhcnQoKTsgICAgICAgIC8q IFN0YXJ0IGJpZGlyZWN0aW9uYWwgcHJpbnRlciAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSBwcmludGJpZGkpOwotICAgIH0gZWxzZQotICAgICAgcHJpbnRi aWRpID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBCUFJJTlRFUiwgdW5zZXQgZmxhZyAq LwotI2VuZGlmIC8qIEJQUklOVCAqLwotCi0gICAgaWYgKHB2W1BSTl9UTU9dLml2YWwgPiAtMSkg eyAgICAgICAgLyogVGFrZSBjYXJlIG9mIHRpbWVvdXQgKi8KLSAgICAgICAgcHJpbnR0aW1vID0g cHZbUFJOX1RNT10uaXZhbDsKLSAgICB9Ci0gICAgaWYgKHB2W1BSTl9UUk1dLml2YWwgPiAwKSB7 ICAgICAgICAgLyogVGVybWluYXRpb24gc3RyaW5nICovCi0gICAgICAgIGlmIChwcmludHRlcm0p IHsKLSAgICAgICAgICAgIGZyZWUocHJpbnR0ZXJtKTsKLSAgICAgICAgICAgIHByaW50dGVybSA9 IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHB2W1BSTl9UUk1dLnN2YWwpCi0gICAgICAg ICAgbWFrZXN0cigmcHJpbnR0ZXJtLHB2W1BSTl9UUk1dLnN2YWwpOwotICAgIH0KLSAgICBpZiAo cHZbUFJOX1NFUF0uaXZhbCA+IDApIHsgICAgICAgICAvKiBhbmQgc2VwYXJhdG9yIGZpbGUgKi8K LSAgICAgICAgaWYgKHByaW50c2VwKSB7Ci0gICAgICAgICAgICBmcmVlKHByaW50c2VwKTsKLSAg ICAgICAgICAgIHByaW50c2VwID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZiAocHZbUFJO X1NFUF0uc3ZhbCkKLSAgICAgICAgICBtYWtlc3RyKCZwcmludHNlcCxwdltQUk5fU0VQXS5zdmFs KTsKLSAgICB9Ci0jZW5kaWYgLyogUFJJTlRTV0kgKi8KLQotI2lmZGVmIFVOSVhPUk9TSwotICAg IGlmICghcHJpbnRwaXBlCi0jaWZkZWYgUFJJTlRTV0kKLSAgICAgICAgJiYgIW5vcHJpbnRlcgot I2VuZGlmIC8qIFBSSU5UU1dJICovCi0gICAgICAgICkgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRmlsZSAtIGNoZWNrIGFjY2VzcyAqLwotICAgICAgICBpZiAoemNoa28ocykgPCAw KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9BY2Nlc3MgZGVuaWVkIC0gJXNcbiIscyk7Ci0gICAg ICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICBnb3RvIHhzZXRwcm47Ci0gICAgICAgIH0KLSAg ICB9Ci0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0KLSAgICB4ID0gMTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSZXR1cm4gY29kZSAqLwotCi0gIHhzZXRwcm46ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ29tbW9uIGV4aXQgKi8KLSNpZmRlZiBQUklOVFNXSQotICAg IGZvciAoaSA9IDA7IGkgPD0gUFJOX01BWDsgaSsrKSB7ICAgIC8qIEZyZWUgbWFsbG9jJ2QgbWVt b3J5ICovCi0gICAgICAgIGlmIChwdltpXS5zdmFsKQotICAgICAgICAgIGZyZWUocHZbaV0uc3Zh bCk7Ci0gICAgfQotI2VuZGlmIC8qIFBSSU5UU1dJICovCi0gICAgc3VjY2VzcyA9ICh4ID4gMCkg PyAxIDogMDsKLSAgICByZXR1cm4oeCk7Ci19Ci0KLSNpZmRlZiBBTllTU0gKLS8qIFRoZSBTRVQg U1NIIGNvbW1hbmQgKi8KLQotI2RlZmluZSBTU0hfQ01EICAxICAgICAgICAgICAgICAgICAgICAg IC8qIFNFVCBTU0ggQ09NTUFORCAqLwotCi0jaWZkZWYgU1NIQlVJTFRJTiAgICAgICAgICAgICAg ICAgICAgICAgLyogQnVpbHQtaW4gU0VUIFNTSCBvcHRpb25zICovCi0jZGVmaW5lIFNTSF9BREQg IDIgICAgICAgICAgICAgICAgICAgICAgLyogQWRkICovCi0jZGVmaW5lIFNTSF9BRlcgIDMgICAg ICAgICAgICAgICAgICAgICAgLyogQWdlbnQtZm9yd2FyZGluZyAqLwotI2RlZmluZSBTU0hfQ0hJ ICA0ICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIEhvc3QgSVAgKi8KLSNkZWZpbmUgU1NI X1hGVyAgNSAgICAgICAgICAgICAgICAgICAgICAvKiBYMTEtZm9yd2FyZGluZyAqLwotI2RlZmlu ZSBTU0hfRFlGICA2ICAgICAgICAgICAgICAgICAgICAgIC8qIER5bmFtaWMgZm9yd2FyZGluZyAq LwotI2RlZmluZSBTU0hfR1dQICA3ICAgICAgICAgICAgICAgICAgICAgIC8qIEdhdGV3YSBwb3J0 Z3MgKi8KLSNkZWZpbmUgU1NIX0dTUyAgOCAgICAgICAgICAgICAgICAgICAgICAvKiBHU1NBUEkg Ki8KLSNkZWZpbmUgU1NIX0tCRCAgOSAgICAgICAgICAgICAgICAgICAgICAvKiBLQkQgSW50ZXJh Y3RpdmUgRGV2aWNlcyAqLwotI2RlZmluZSBTU0hfSzQgIDEwICAgICAgICAgICAgICAgICAgICAg IC8qIEtlcmJlcm9zIDQgKi8KLSNkZWZpbmUgU1NIX0s1ICAxMSAgICAgICAgICAgICAgICAgICAg ICAvKiBLZXJiZXJvcyA1ICovCi0jZGVmaW5lIFNTSF9TSEsgMTIgICAgICAgICAgICAgICAgICAg ICAgLyogU3RyaWN0IEhvc3QgS2V5IENoZWNrICovCi0jZGVmaW5lIFNTSF9WMSAgMTMgICAgICAg ICAgICAgICAgICAgICAgLyogU1NIIFYxICovCi0jZGVmaW5lIFNTSF9WMiAgMTQgICAgICAgICAg ICAgICAgICAgICAgLyogU1NIIFYyICovCi0jZGVmaW5lIFNTSF9QUlAgMTUgICAgICAgICAgICAg ICAgICAgICAgLyogUHJpdmQgcG9ydCAqLwotI2RlZmluZSBTU0hfQ01QIDE2ICAgICAgICAgICAg ICAgICAgICAgIC8qIENvbXByZXNzaW9uICovCi0jZGVmaW5lIFNTSF9YQUwgMTcgICAgICAgICAg ICAgICAgICAgICAgLyogWCBBdXRoIExvY2F0aW9uICovCi0jZGVmaW5lIFNTSF9TSEggMTggICAg ICAgICAgICAgICAgICAgICAgLyogUXVpZXQgKi8KLSNkZWZpbmUgU1NIX1ZFUiAxOSAgICAgICAg ICAgICAgICAgICAgICAvKiBWZXJzaW9uICovCi0jZGVmaW5lIFNTSF9WUkIgMjAgICAgICAgICAg ICAgICAgICAgICAgLyogVmVyYm9zaXR5IGxldmVsICovCi0jZGVmaW5lIFNTSF9JREYgMjEgICAg ICAgICAgICAgICAgICAgICAgLyogSWRlbnRpdHkgRmlsZSAqLwotI2RlZmluZSBTU0hfQ0ZHIDIy ICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBPcGVuU1NIIENvbmZpZyAqLwotI2RlZmluZSBT U0hfSEJUIDIzICAgICAgICAgICAgICAgICAgICAgIC8qIEhlYXJ0YmVhdCBJbnRlcnZhbCAqLwot I2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgc3NodGFiW10g PSB7ICAgICAgIC8qIFNFVCBTU0ggY29tbWFuZCB0YWJsZSAqLwotI2lmZGVmIFNTSEJVSUxUSU4K LSAgICB7ICJhZ2VudC1mb3J3YXJkaW5nIiwgICAgICAgIFNTSF9BRlcsICAwIH0sCi0gICAgeyAi Y2hlY2staG9zdC1pcCIsICAgICAgICAgICBTU0hfQ0hJLCAgMCB9LAotICAgIHsgImNvbXByZXNz aW9uIiwgICAgICAgICAgICAgU1NIX0NNUCwgIDAgfSwKLSAgICB7ICJkeW5hbWljLWZvcndhcmRp bmciLCAgICAgIFNTSF9EWUYsICAwIH0sCi0gICAgeyAiZ2F0ZXdheS1wb3J0cyIsICAgICAgICAg ICBTU0hfR1dQLCAgMCB9LAotICAgIHsgImdzc2FwaSIsICAgICAgICAgICAgICAgICAgU1NIX0dT UywgIDAgfSwKLSAgICB7ICJoZWFydGJlYXQtaW50ZXJ2YWwiLCAgICAgIFNTSF9IQlQsICAwIH0s Ci0gICAgeyAiaWRlbnRpdHktZmlsZSIsICAgICAgICAgICBTU0hfSURGLCAgMCB9LAotI2lmZGVm IENPTU1FTlQKLSAgICB7ICJrYmQtaW50ZXJhY3RpdmUtZGV2aWNlcyIsIFNTSF9LQkQsICAwIH0s Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHsgIms0IiwgICAgICAgICAgICAgICAgICAgICAg U1NIX0s0LCBDTV9JTlYgfSwKLSAgICB7ICJrNSIsICAgICAgICAgICAgICAgICAgICAgIFNTSF9L NSwgQ01fSU5WIH0sCi0gICAgeyAia2VyYmVyb3M0IiwgICAgICAgICAgICAgICBTU0hfSzQsICAg MCB9LAotICAgIHsgImtlcmJlcm9zNSIsICAgICAgICAgICAgICAgU1NIX0s1LCAgIDAgfSwKLSAg ICB7ICJrcmI0IiwgICAgICAgICAgICAgICAgICAgIFNTSF9LNCwgQ01fSU5WIH0sCi0gICAgeyAi a3JiNSIsICAgICAgICAgICAgICAgICAgICBTU0hfSzUsIENNX0lOViB9LAotICAgIHsgInByaXZp bGVnZWQtcG9ydCIsICAgICAgICAgU1NIX1BSUCwgIDAgfSwKLSAgICB7ICJxdWlldCIsICAgICAg ICAgICAgICAgICAgIFNTSF9TSEgsICAwIH0sCi0gICAgeyAic3RyaWN0LWhvc3Qta2V5LWNoZWNr IiwgICBTU0hfU0hLLCAgMCB9LAotICAgIHsgInVzZS1vcGVuc3NoLWNvbmZpZyIsICAgICAgU1NI X0NGRywgIDAgfSwKLSAgICB7ICJ2MSIsICAgICAgICAgICAgICAgICAgICAgIFNTSF9WMSwgICAw IH0sCi0gICAgeyAidjIiLCAgICAgICAgICAgICAgICAgICAgICBTU0hfVjIsICAgMCB9LAotICAg IHsgInZlcmJvc2UiLCAgICAgICAgICAgICAgICAgU1NIX1ZSQiwgIDAgfSwKLSAgICB7ICJ2ZXJz aW9uIiwgICAgICAgICAgICAgICAgIFNTSF9WRVIsICAwIH0sCi0gICAgeyAieDExLWZvcndhcmRp bmciLCAgICAgICAgICBTU0hfWEZXLCAgMCB9LAotICAgIHsgInhhdXRoLWxvY2F0aW9uIiwgICAg ICAgICAgU1NIX1hBTCwgIDAgfSwKLSNlbHNlCi0jaWZkZWYgU1NIQ01ECi0gICAgeyAiY29tbWFu ZCIsICAgICAgICAgICAgICAgICBTU0hfQ01ELCAgMCB9LAotI2VuZGlmIC8qIFNTSENNRCAqLwot I2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50 IG5zc2h0YWIgPSAoc2l6ZW9mKHNzaHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsK LQotI2lmZGVmIFNTSEJVSUxUSU4KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaHZlcltdID0geyAg ICAgICAvKiBTRVQgU1NIIFZFUlNJT04gY29tbWFuZCB0YWJsZSAqLwotICAgIHsgIjEiLCAgICAg ICAgICAxLCAgMCB9LAotICAgIHsgIjIiLCAgICAgICAgICAyLCAgMCB9LAotICAgIHsgImF1dG9t YXRpYyIsICAwLCAgMCB9Ci19OwotCi0jZGVmaW5lIFNTSEFfQ1JTICAgMQotI2RlZmluZSBTU0hB X0RTQSAgIDIKLSNkZWZpbmUgU1NIQV9HU1MgICAzCi0jZGVmaW5lIFNTSEFfSE9TICAgNAotI2Rl ZmluZSBTU0hBX0tCRCAgIDUKLSNkZWZpbmUgU1NIQV9LNCAgICA2Ci0jZGVmaW5lIFNTSEFfSzUg ICAgNwotI2RlZmluZSBTU0hBX1BTVyAgIDgKLSNkZWZpbmUgU1NIQV9QSyAgICA5Ci0jZGVmaW5l IFNTSEFfU0tFICAxMAotI2RlZmluZSBTU0hBX1RJUyAgMTEKLSNkZWZpbmUgU1NIQV9FWFQgIDEy Ci0jZGVmaW5lIFNTSEFfU1JQICAxMwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzc2gyYXV0W10g PSB7ICAgICAgLyogU0VUIFNTSCBWMiBBVVRIIGNvbW1hbmQgdGFibGUgKi8KLSAgICB7ICJleHRl cm5hbC1rZXl4IiwgICAgICBTU0hBX0VYVCwgMCB9LAotICAgIHsgImdzc2FwaSIsICAgICAgICAg ICAgIFNTSEFfR1NTLCAwIH0sCi0gICAgeyAiaG9zdGJhc2VkIiwgICAgICAgICAgU1NIQV9IT1Ms IDAgfSwKLSAgICB7ICJrZXlib2FyZC1pbnRlcmFjdGl2ZSIsICBTU0hBX0tCRCwgMCB9LAotICAg IHsgInBhc3N3b3JkIiwgICAgICAgICAgIFNTSEFfUFNXLCAwIH0sCi0gICAgeyAicHVibGlja2V5 IiwgICAgICAgICAgU1NIQV9QSywgIDAgfSwKLSAgICB7ICJzcnAtZ2V4LXNoYTEiLCAgICAgICBT U0hBX1NSUCwgMCB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnNzaDJhdXQg PSAoc2l6ZW9mKHNzaDJhdXQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLSNkZWZp bmUgU1NIRl9MQ0wgICAxCi0jZGVmaW5lIFNTSEZfUk1UICAgMgotCi1zdGF0aWMgc3RydWN0IGtl eXRhYiBhZGRmd2RbXSA9IHsgICAgICAgLyogU0VUIFNTSCBBREQgY29tbWFuZCB0YWJsZSAqLwot ICAgIHsgImxvY2FsLXBvcnQtZm9yd2FyZCIsICBTU0hGX0xDTCwgMCB9LAotICAgIHsgInJlbW90 ZS1wb3J0LWZvcndhcmQiLCBTU0hGX1JNVCwgMCB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0 YXRpYyBpbnQgbmFkZGZ3ZCA9IChzaXplb2YoYWRkZndkKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFi KSkgLSAxOwotCi0jZGVmaW5lIFNTSDFfQ0lGICAgMQotI2RlZmluZSBTU0gxX0dOSCAgIDIKLSNk ZWZpbmUgU1NIMV9VTkggICAzCi0jZGVmaW5lIFNTSDFfSzU0ICAgNAotCi0jZGVmaW5lIFNTSDJf Q0lGICAgMQotI2RlZmluZSBTU0gyX0dOSCAgIDIKLSNkZWZpbmUgU1NIMl9VTkggICAzCi0jZGVm aW5lIFNTSDJfQVJLICAgNAotI2RlZmluZSBTU0gyX0hLQSAgIDUKLSNkZWZpbmUgU1NIMl9NQUMg ICA2Ci0jZGVmaW5lIFNTSDJfQVVUICAgNwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzc2h2MXRh YltdID0geyAgICAgLyogU0VUIFNTSCBWMSBjb21tYW5kIHRhYmxlICovCi0gICAgeyAiY2lwaGVy IiwgICAgICAgICAgICAgICAgICBTU0gxX0NJRiwgMCB9LAotICAgIHsgImdsb2JhbC1rbm93bi1o b3N0cy1maWxlIiwgU1NIMV9HTkgsIDAgfSwKLSAgICB7ICJrNS1yZXVzZS1rNC1tZXNzYWdlcyIs ICAgIFNTSDFfSzU0LCBDTV9JTlYgfSwKLSAgICB7ICJ1c2VyLWtub3duLWhvc3RzLWZpbGUiLCAg IFNTSDFfVU5ILCAwIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuc3NodjF0 YWIgPSAoc2l6ZW9mKHNzaHYxdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1z dGF0aWMgc3RydWN0IGtleXRhYiBzc2h2MnRhYltdID0geyAgICAgLyogU0VUIFNTSCBWMiBjb21t YW5kIHRhYmxlICovCi0gICAgeyAiYXV0aGVudGljYXRpb24iLCAgICAgICAgICBTU0gyX0FVVCwg MCB9LAotICAgIHsgImF1dG8tcmVrZXkiLCAgICAgICAgICAgICAgU1NIMl9BUkssIDAgfSwKLSAg ICB7ICJjaXBoZXJzIiwgICAgICAgICAgICAgICAgIFNTSDJfQ0lGLCAwIH0sCi0gICAgeyAiZ2xv YmFsLWtub3duLWhvc3RzLWZpbGUiLCBTU0gyX0dOSCwgMCB9LAotICAgIHsgImhvc3RrZXktYWxn b3JpdGhtcyIsICAgICAgU1NIMl9IS0EsIDAgfSwKLSAgICB7ICJtYWNzIiwgICAgICAgICAgICAg ICAgICAgIFNTSDJfTUFDLCAwIH0sCi0gICAgeyAidXNlci1rbm93bi1ob3N0cy1maWxlIiwgICBT U0gyX1VOSCwgMCB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnNzaHYydGFi ID0gKHNpemVvZihzc2h2MnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotI2Rl ZmluZSBTU0hDXzNERVMgMSAgICAgICAgICAgICAgICAgICAgIC8qIDNERVMgKi8KLSNkZWZpbmUg U1NIQ18zQ0JDIDIgICAgICAgICAgICAgICAgICAgICAvKiAzREVTLUNCQyAqLwotI2RlZmluZSBT U0hDX0ExMjggMyAgICAgICAgICAgICAgICAgICAgIC8qIEFFUzEyOC1DQkMgKi8KLSNkZWZpbmUg U1NIQ19BMTkyIDQgICAgICAgICAgICAgICAgICAgICAvKiBBRVMxOTItQ0JDICovCi0jZGVmaW5l IFNTSENfQTI1NiA1ICAgICAgICAgICAgICAgICAgICAgLyogQUVTMjU2LUNCQyAqLwotI2RlZmlu ZSBTU0hDX0FSQzQgNiAgICAgICAgICAgICAgICAgICAgIC8qIEFSQ0ZPVVIgKi8KLSNkZWZpbmUg U1NIQ19GSVNIIDcgICAgICAgICAgICAgICAgICAgICAvKiBCTE9XRklTSCAqLwotI2RlZmluZSBT U0hDX0JDQkMgOSAgICAgICAgICAgICAgICAgICAgIC8qIEJMT1dGSVNILUNCQyAqLwotI2RlZmlu ZSBTU0hDX0MxMjggOCAgICAgICAgICAgICAgICAgICAgIC8qIENBU1QxMjgtQ0JDICovCi0jZGVm aW5lIFNTSENfMURFUyAxMCAgICAgICAgICAgICAgICAgICAgLyogREVTICovCi0KLXN0YXRpYyBz dHJ1Y3Qga2V5dGFiIHNzaDFjaXBoZXJzW10gPSB7Ci0gICAgeyAiM2RlcyIsICAgICAgICAgU1NI Q18zREVTLCAwIH0sCi0gICAgeyAiYmxvd2Zpc2giLCAgICAgU1NIQ19GSVNILCAwIH0sCi0gICAg eyAiZGVzIiwgICAgICAgICAgU1NIQ18xREVTLCAwIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owot c3RhdGljIGludCBuc3NoMWNpcGhlcnMgPSAoc2l6ZW9mKHNzaDFjaXBoZXJzKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzc2gyY2lwaGVyc1td ID0geyAgLyogU0VUIFNTSCBWMiBDSVBIRVJTIGNvbW1hbmQgdGFibGUgKi8KLSAgICB7ICIzZGVz LWNiYyIsICAgICAgICBTU0hDXzNERVMsIDAgfSwKLSAgICB7ICJhZXMxMjgtY2JjIiwgICAgICBT U0hDX0ExMjgsIDAgfSwKLSAgICB7ICJhZXMxOTItY2JjIiwgICAgICBTU0hDX0ExOTIsIDAgfSwK LSAgICB7ICJhZXMyNTYtY2JjIiwgICAgICBTU0hDX0EyNTYsIDAgfSwKLSAgICB7ICJhcmNmb3Vy IiwgICAgICAgICBTU0hDX0FSQzQsIDAgfSwKLSAgICB7ICJibG93ZmlzaC1jYmMiLCAgICBTU0hD X0ZJU0gsIDAgfSwKLSAgICB7ICJjYXN0MTI4LWNiYyIsICAgICBTU0hDX0MxMjgsIDAgfSwKLSAg ICB7ICJyaWpuZGFlbDEyOC1jYmMiLCBTU0hDX0ExMjgsIDAgfSwKLSAgICB7ICJyaWpuZGFlbDE5 Mi1jYmMiLCBTU0hDX0ExOTIsIDAgfSwKLSAgICB7ICJyaWpuZGFlbDI1Ni1jYmMiLCBTU0hDX0Ey NTYsIDAgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5zc2gyY2lwaGVycyA9 IChzaXplb2Yoc3NoMmNpcGhlcnMpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLSNk ZWZpbmUgU1NITV9TSEEgICAgICAgIDEgICAgICAgICAgICAgICAvKiBITUFDLVNIQTEgKi8KLSNk ZWZpbmUgU1NITV9TSEFfOTYgICAgIDIgICAgICAgICAgICAgICAvKiBITUFDLVNIQTEtOTYgKi8K LSNkZWZpbmUgU1NITV9NRDUgICAgICAgIDMgICAgICAgICAgICAgICAvKiBITUFDLU1ENSAqLwot I2RlZmluZSBTU0hNX01ENV85NiAgICAgNCAgICAgICAgICAgICAgIC8qIEhNQUMtTUQ1LTk2ICov Ci0jZGVmaW5lIFNTSE1fUklQRSAgICAgICA1ICAgICAgICAgICAgICAgLyogSE1BQy1SSVBFTUQx NjAgKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgc3NoMm1hY3NbXSA9IHsgICAgIC8qIFNFVCBT U0ggVjIgTUFDUyBjb21tYW5kIHRhYmxlICovCi0gICAgeyAiaG1hYy1tZDUiLCAgICAgICBTU0hN X01ENSwgICAgMCB9LAotICAgIHsgImhtYWMtbWQ1LTk2IiwgICAgU1NITV9NRDVfOTYsIDAgfSwK LSAgICB7ICJobWFjLXJpcGVtZDE2MCIsIFNTSE1fUklQRSwgICAwIH0sCi0gICAgeyAiaG1hYy1z aGExIiwgICAgICBTU0hNX1NIQSwgICAgMCB9LAotICAgIHsgImhtYWMtc2hhMS05NiIsICAgU1NI TV9TSEFfOTYsIDAgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5zc2gybWFj cyA9IChzaXplb2Yoc3NoMm1hY3MpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0 YXRpYyBzdHJ1Y3Qga2V5dGFiIHRndHBhc3NbXSA9IHsKLSAgICB7ICJ0Z3QtcGFzc2luZyIsIDEs IDAsIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBudGd0cGFzcyA9IChzaXpl b2YodGd0cGFzcykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotc3RhdGljIHN0cnVj dCBrZXl0YWIgZ3NzYXBpdGFiW10gPSB7Ci0gICAgeyAiZGVsZWdhdGUtY3JlZGVudGlhbHMiLCAx LCAwLCB9LAotICAgIHsgImtleS1leGNoYW5nZSIsICAgICAgICAgMiwgQ01fSU5WLCB9LAotICAg IHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmdzc2FwaXRhYiA9IChzaXplb2YoZ3NzYXBp dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi0jZGVmaW5lIEhLQV9SU0EgMQot I2RlZmluZSBIS0FfRFNTIDIKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgaGthdGFiW10gPSB7Ci0g ICAgeyAic3NoLWRzcyIsIEhLQV9EU1MsIDAsIH0sCi0gICAgeyAic3NoLXJzYSIsIEhLQV9SU0Es IDAsIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuaGthdGFiID0gKHNpemVv Zihoa2F0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLWludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgU1NIIHZhcmlhYmxlcyAqLwotICBzc2hf YWZ3ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFnZW50IGZvcndhcmRpbmcgKi8K LSAgc3NoX3hmdyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4MTEgZm9yd2FyZGlu ZyAgICovCi0gIHNzaF9wcnAgPSBTRVRfT0ZGLCAgICAgICAgICAgICAgICAgICAgLyogcHJpdmls ZWdlZCBwb3J0cyAqLwotICBzc2hfY21wID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGNvbXByZXNzaW9uICovCi0gIHNzaF9zaGggPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogcXVpZXQgICAgICAgKi8KLSAgc3NoX3ZlciA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBwcm90b2NvbCB2ZXJzaW9uIChhdXRvLDEsMikgKi8KLSAgc3NoX3ZyYiA9IDIsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBSZXBvcnQgZXJyb3JzICovCi0gIHNzaF9jaGtpcCA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgLyogU1NIIENoZWNrIEhvc3QgSVAgZmxhZyAqLwotICBz c2hfZ3dwID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdhdGV3YXkgcG9ydHMgKi8K LSAgc3NoX2R5ZiA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkeW5hbWljIGZvcndh cmRpbmcgKi8KLSAgc3NoX2dzZCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnc3Nh cGkgZGVsZWdhdGUgY3JlZGVudGlhbHMgKi8KLSAgc3NoX2s0dGd0ID0gMCwgICAgICAgICAgICAg ICAgICAgICAgICAvKiBrNCB0Z3QgcGFzc2luZyAqLwotICBzc2hfazV0Z3QgPSAwLCAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGs1IHRndCBwYXNzaW5nICovCi0gIHNzaF9zaGsgPSAyLCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU3RyaWN0IGhvc3Qga2V5IChubywgeWVzLCBhc2spICov Ci0gIHNzaDJfYXJrID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0byByZS1rZXkg Ki8KLSAgc3NoX2NhcyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIGFz IHN1YnN5cyAqLwotICBzc2hfY2ZnID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVz ZSBPcGVuU1NIIGNvbmZpZz8gKi8KLSAgc3NoX2dreCA9IDEsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBnc3NhcGkga2V5IGV4Y2hhbmdlICovCi0gIHNzaF9rNV9pc19rNCA9IDEsICAgICAg ICAgICAgICAgICAgICAgLyogc29tZSBTU0ggdjEgdXNlIHNhbWUgY29kZXMgKi8KLSAgc3NoX2hi dCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBoZWFydGJlYXQgKHNlY29uZHMpICov Ci0gIHNzaF9kdW1teSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogYm90dG9tIG9mIGxp c3QgKi8KLQotY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBm b2xsb3dpbmcgYXJlIHRvIGJlIG1hbGxvYydkICovCi0gICogc3NoMV9jaWYgPSBOVUxMLCAgICAg ICAgICAgICAgICAgICAgLyogdjEgY2lwaGVyICovCi0gICogc3NoMl9jaWYgPSBOVUxMLCAgICAg ICAgICAgICAgICAgICAgLyogdjIgY2lwaGVyIGxpc3QgKi8KLSAgKiBzc2gyX21hYyA9IE5VTEws ICAgICAgICAgICAgICAgICAgICAvKiB2MiBtYWMgbGlzdCAqLwotICAqIHNzaDJfYXV0aCA9IE5V TEwsICAgICAgICAgICAgICAgICAgIC8qIHYyIGF1dGhlbnRpY2F0aW9uIGxpc3QgKi8KLSAgKiBz c2hfaHN0ID0gTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBob3N0bmFtZSAqLwotICAqIHNz aF9wcnQgPSBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIHBvcnQvc2VydmljZSAqLwotICAq IHNzaF9jbWQgPSBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgdG8gZXhlY3V0 ZSAqLwotICAqIHNzaF94YWwgPSBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIHhhdXRoLWxv Y2F0aW9uICovCi0gICogc3NoMV9nbmggPSBOVUxMLCAgICAgICAgICAgICAgICAgICAgLyogdjEg Z2xvYmFsIGtub3duIGhvc3RzIGZpbGUgKi8KLSAgKiBzc2gxX3VuaCA9IE5VTEwsICAgICAgICAg ICAgICAgICAgICAvKiB2MSB1c2VyIGtub3duIGhvc3RzIGZpbGUgKi8KLSAgKiBzc2gyX2duaCA9 IE5VTEwsICAgICAgICAgICAgICAgICAgICAvKiB2MiBnbG9iYWwga25vd24gaG9zdHMgZmlsZSAq LwotICAqIHNzaDJfdW5oID0gTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIHYyIHVzZXIga25v d24gaG9zdHMgZmlsZSAqLwotICAqIHNzaDJfaGthID0gTlVMTCwgICAgICAgICAgICAgICAgICAg IC8qIEhvc3QgS2V5IEFsZ29yaXRobXMgKi8KLSAgKiB4eHhfZHVtbXkgPSBOVUxMOwotCi1jaGFy ICogc3NoX2lkZlszMl0gPSB7ICAgICAgICAgICAgICAgICAgLyogSWRlbnRpdHkgZmlsZSBsaXN0 ICovCi0gIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCwKLSAgTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLAotICBOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwsCi0gIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTAotfTsKLWNoYXIgKiBzc2hfdG1wWzMyXSA9IHsgICAgICAgICAgICAgICAgICAvKiBU ZW1wIGlkZW50aXR5IGZpbGUgbGlzdCAqLwotICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwsCi0gIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCwK LSAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLAotICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKLX07Ci1pbnQgc3NoX2lkZl9uID0gMDsKLQot ZXh0ZXJuIGludCAgICBzc2hfcGZfbGNsX24sCi0gICAgICAgICAgICAgIHNzaF9wZl9ybXRfbjsK LWV4dGVybiBzdHJ1Y3Qgc3NoX3BmIHNzaF9wZl9sY2xbMzJdOyAgICAvKiBQb3J0IGZvcndhcmRp bmcgc3RydWN0cyAqLwotZXh0ZXJuIHN0cnVjdCBzc2hfcGYgc3NoX3BmX3JtdFszMl07ICAgIC8q IChkZWNsYXJlZCBpbiBja3V1c3IuYykgKi8KLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0KLSNp ZmRlZiBTRlRQX0JVSUxUSU4KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNmdHB0YWJbXSA9IHsKLSAg ICB7ICJlbmQtb2YtbGluZSIsICAgICAgICAgICAgWFlfU0ZUUF9FT0wsIDAsIH0sCi0gICAgeyAi cmVtb3RlLWNoYXJhY3Rlci1zZXQiLCAgIFhZX1NGVFBfUkNTLCAwLCB9LAotICAgIHsgIiIsIDAs IDAgfQotfTsKLXN0YXRpYyBpbnQgbnNmdHB0YWIgPSAoc2l6ZW9mKHNmdHB0YWIpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0jZW5kaWYgLyogU0ZUUF9CVUlMVElOICovCi0KLVZPSUQK LXNob3NzaCgpIHsKLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgaW50IGksIG4gPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgLyogQUREIGFza21vcmUoKSEgKi8KLQotICAgIHByaW50ZigiXG5TU0gg aXMgYnVpbHQgaW46XG5cbiIpOwotCi0gICAgcHJpbnRmKCIgc3NoIGhvc3Q6ICAgICAgICAgICAg ICAgICAgICAgICAgJXNcbiIsc2hvd3N0cmluZyhzc2hfaHN0KSk7Ci0gICAgcHJpbnRmKCIgc3No IHBvcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgJXNcbiIsc2hvd3N0cmluZyhzc2hfcHJ0KSk7 Ci0gICAgcHJpbnRmKCIgc3NoIGNvbW1hbmQ6ICAgICAgICAgICAgICAgICAgICAgJXNcbiIsc2hv d3N0cmluZyhzc2hfY21kKSk7Ci0gICAgcHJpbnRmKCIgc3NoIGFnZW50LWZvcndhcmRpbmc6ICAg ICAgICAgICAgJXNcbiIsc2hvd29mZihzc2hfYWZ3KSk7Ci0gICAgcHJpbnRmKCIgc3NoIGNoZWNr LWhvc3QtaXA6ICAgICAgICAgICAgICAgJXNcbiIsc2hvd29mZihzc2hfY2hraXApKTsKLSAgICBw cmludGYoIiBzc2ggY29tcHJlc3Npb246ICAgICAgICAgICAgICAgICAlc1xuIixzaG93b2ZmKHNz aF9jbXApKTsKLSAgICBwcmludGYoIiBzc2ggZHluYW1pYy1mb3J3YXJkaW5nOiAgICAgICAgICAl c1xuIixzaG93b2ZmKHNzaF9keWYpKTsKLSAgICBpZiAoc3NoX3BmX2xjbFswXS5wMSAmJiBzc2hf cGZfbGNsWzBdLmhvc3QgJiYgc3NoX3BmX2xjbFswXS5wMikgewotICAgICAgcHJpbnRmKCIgc3No IGZvcndhcmQtbG9jYWwtcG9ydDogICAgICAgICAgJWQgJXMgJWRcbiIsCi0gICAgICAgICAgICAg c3NoX3BmX2xjbFswXS5wMSwgc3NoX3BmX2xjbFswXS5ob3N0LCBzc2hfcGZfbGNsWzBdLnAyKTsK LSAgICAgIGZvciAoIG49MTtuPHNzaF9wZl9sY2xfbjtuKysgKQotICAgICAgICBwcmludGYoIiAg ICAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgICAlZCAlcyAlZFxuIiwKLSAgICAgICAgICAg ICAgIHNzaF9wZl9sY2xbbl0ucDEsIHNzaF9wZl9sY2xbbl0uaG9zdCwgc3NoX3BmX2xjbFtuXS5w Mik7Ci0gICAgfSBlbHNlCi0gICAgICBwcmludGYoIiBzc2ggZm9yd2FyZC1sb2NhbC1wb3J0OiAg ICAgICAgIChub25lKVxuIik7Ci0gICAgaWYgKHNzaF9wZl9ybXRbMF0ucDEgJiYgc3NoX3BmX3Jt dFswXS5ob3N0ICYmIHNzaF9wZl9ybXRbMF0ucDIpIHsKLSAgICAgIHByaW50ZigiIHNzaCBmb3J3 YXJkLXJlbW90ZS1wb3J0OiAgICAgICAgICVkICVzICVkXG4iLAotICAgICAgICAgICAgIHNzaF9w Zl9ybXRbMF0ucDEsIHNzaF9wZl9ybXRbMF0uaG9zdCwgc3NoX3BmX3JtdFswXS5wMik7Ci0gICAg ICBmb3IgKCBuPTE7bjxzc2hfcGZfcm10X247bisrICkKLSAgICAgICAgcHJpbnRmKCIgICAgICAg ICAgICAgICAgICAgICAgICA6ICAgICAgICAgJWQgJXMgJWRcbiIsCi0gICAgICAgICAgICAgICBz c2hfcGZfcm10W25dLnAxLCBzc2hfcGZfcm10W25dLmhvc3QsIHNzaF9wZl9ybXRbbl0ucDIpOwot ICAgIH0gZWxzZQotICAgICAgcHJpbnRmKCIgc3NoIGZvcndhcmQtcmVtb3RlLXBvcnQ6ICAgICAg ICAobm9uZSlcbiIpOwotICAgIHByaW50ZigiIHNzaCBnYXRld2F5LXBvcnRzOiAgICAgICAgICAg ICAgICVzXG4iLHNob3dvZmYoc3NoX2d3cCkpOwotICAgIHByaW50ZigiIHNzaCBnc3NhcGkgZGVs ZWdhdGUtY3JlZGVudGlhbHM6ICVzXG4iLHNob3dvZmYoc3NoX2dzZCkpOwotICAgIHByaW50Zigi IHNzaCBnc3NhcGkga2V5LWV4Y2hhbmdlICAgICAgICA6ICVzXG4iLHNob3dvZmYoc3NoX2dreCkp OwotICAgIHByaW50ZigiIHNzaCBpZGVudGl0eS1maWxlOiAgICAgICAgICAgICAgICVkXG4iLHNz aF9pZGZfbik7Ci0gICAgZm9yIChpID0gMDsgaSA8IHNzaF9pZGZfbjsgaSsrKQotICAgICAgcHJp bnRmKCIgICUyZC4gJXNcbiIsaSsxLHNob3dzdHJpbmcoc3NoX2lkZltpXSkpOwotICAgIHByaW50 ZigiIHNzaCBoZWFydGJlYXQgaW50ZXJ2YWw6ICAgICAgICAgICVkXG4iLCBzc2hfaGJ0KTsKLSAg ICBwcmludGYoIiBzc2ggazQgdGd0LXBhc3Npbmc6ICAgICAgICAgICAgICAlc1xuIixzaG93b2Zm KHNzaF9rNHRndCkpOwotICAgIHByaW50ZigiIHNzaCBrNSB0Z3QtcGFzc2luZzogICAgICAgICAg ICAgICVzXG4iLHNob3dvZmYoc3NoX2s1dGd0KSk7Ci0KLSAgICBwcmludGYoIiBzc2ggcHJpdmls ZWdlZC1wb3J0OiAgICAgICAgICAgICAlc1xuIixzaG93b29hKHNzaF9wcnApKTsKLSAgICBwcmlu dGYoIiBzc2ggcXVpZXQ6ICAgICAgICAgICAgICAgICAgICAgICAlc1xuIixzaG93b2ZmKHNzaF9z aGgpKTsKLSAgICBwcmludGYoIiBzc2ggc3RyaWN0LWhvc3Qta2V5LWNoZWNrOiAgICAgICAlZFxu Iixzc2hfc2hrKTsKLSAgICBwcmludGYoIiBzc2ggdXNlLW9wZW5zc2gtY29uZmlnOiAgICAgICAg ICAlc1xuIixzaG93b2ZmKHNzaF9jZmcpKTsKLSAgICBwcmludGYoIiBzc2ggdmVyYm9zZTogICAg ICAgICAgICAgICAgICAgICAlZFxuIixzc2hfdnJiKTsKLSAgICBwcmludGYoIiBzc2ggdmVyc2lv bjogICAgICAgICAgICAgICAgICAgICAlc1xuIiwKLSAgICAgICAgICAgc3NoX3ZlciA/IGNraXRv YShzc2hfdmVyKSA6ICJhdXRvbWF0aWMiCi0gICAgICAgICAgICk7Ci0gICAgcHJpbnRmKCIgc3No IHgxMS1mb3J3YXJkaW5nOiAgICAgICAgICAgICAgJXNcbiIsc2hvd29vYShzc2hfeGZ3KSk7Ci0g ICAgcHJpbnRmKCIgc3NoIHhhdXRoLWxvY2F0aW9uOiAgICAgICAgICAgICAgJXNcbiIsc2hvd3N0 cmluZyhzc2hfeGFsKSk7Ci0gICAgcHJpbnRmKCJcbiIpOwotICAgIHByaW50ZigiIHNzaCB2MSBj aXBoZXI6ICAgICAgICAgICAgICAgICAgICVzXG4iLHNob3dzdHJpbmcoc3NoMV9jaWYpKTsKLSAg ICBwcmludGYoIiBzc2ggdjEgZ2xvYmFsLWtub3duLWhvc3RzLWZpbGU6ICAlc1xuIixzaG93c3Ry aW5nKHNzaDFfZ25oKSk7Ci0gICAgcHJpbnRmKCIgc3NoIHYxIHVzZXIta25vd24taG9zdHMtZmls ZTogICAgJXNcbiIsc2hvd3N0cmluZyhzc2gxX3VuaCkpOwotICAgIHByaW50ZigiXG4iKTsKLSAg ICBwcmludGYoIiBzc2ggdjIgYXV0aGVudGljYXRpb246ICAgICAgICAgICAlc1xuIixzaG93c3Ry aW5nKHNzaDJfYXV0aCkpOwotICAgIHByaW50ZigiIHNzaCB2MiBhdXRvLXJla2V5OiAgICAgICAg ICAgICAgICVzXG4iLHNob3dvZmYoc3NoMl9hcmspKTsKLSAgICBwcmludGYoIiBzc2ggdjIgY2lw aGVyczogICAgICAgICAgICAgICAgICAlc1xuIixzaG93c3RyaW5nKHNzaDJfY2lmKSk7Ci0gICAg cHJpbnRmKCIgc3NoIHYyIGNvbW1hbmQtYXMtc3Vic3lzdGVtOiAgICAgJXNcbiIsc2hvd29mZihz c2hfY2FzKSk7Ci0gICAgcHJpbnRmKCIgc3NoIHYyIGdsb2JhbC1rbm93bi1ob3N0cy1maWxlOiAg JXNcbiIsc2hvd3N0cmluZyhzc2gyX2duaCkpOwotICAgIHByaW50ZigiIHNzaCB2MiBob3N0a2V5 LWFsZ29yaXRobXM6ICAgICAgICVzXG4iLHNob3dzdHJpbmcoc3NoMl9oa2EpKTsKLSAgICBwcmlu dGYoIiBzc2ggdjIgbWFjOiAgICAgICAgICAgICAgICAgICAgICAlc1xuIixzaG93c3RyaW5nKHNz aDJfbWFjKSk7Ci0gICAgcHJpbnRmKCIgc3NoIHYyIHVzZXIta25vd24taG9zdHMtZmlsZTogICAg JXNcbiIsc2hvd3N0cmluZyhzc2gyX3VuaCkpOwotI2Vsc2UKLSNpZmRlZiBTU0hDTUQKLSAgICBl eHRlcm4gY2hhciAqIHNzaGNtZCwgKiBkZWZzc2hjbWQ7Ci0gICAgY2hhciAqIHM7Ci0gICAgcyA9 IHNzaGNtZCA/IHNzaGNtZCA6IGRlZnNzaGNtZDsKLSAgICBwcmludGYoIlxuIFNTSCBpcyBleHRl cm5hbC5cblxuIik7Ci0gICAgcHJpbnRmKCIgc3NoIGNvbW1hbmQ6ICVzXG4iLHNob3dzdHJpbmco cykpOwotI2VuZGlmIC8qIFNTSENNRCAqLwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSAgICBw cmludGYoIlxuIik7Ci19Ci0KLXN0YXRpYyBpbnQKLWRvc2V0c3NoKCkgewotI2lmZGVmIFNTSENN RAotICAgIGV4dGVybiBjaGFyICogc3NoY21kOwotI2VuZGlmIC8qIFNTSENNRCAqLwotI2lmZGVm IFNTSEJVSUxUSU4KLSNpZm5kZWYgU1NIVEVTVAotICAgIGV4dGVybiBpbnQgc2xfc3NoX3hmd19z YXZlZCwgc2xfc3NoX3Zlcl9zYXZlZDsKLSNlbmRpZiAvKiBTU0hURVNUICovCi0jZW5kaWYgLyog U1NIQlVJTFRJTiAqLwotICAgIGludCBjeCwgeCwgeSwgejsKLSAgICBjaGFyICogczsKLQotICAg IGlmICgoY3ggPSBjbWtleShzc2h0YWIsbnNzaHRhYiwiIiwiY29tbWFuZCIsIHh4c3RyaW5nKSkg PCAwKQotICAgICAgcmV0dXJuKGN4KTsKLSAgICBzd2l0Y2ggKGN4KSB7Ci0jaWZkZWYgU1NIQ01E Ci0gICAgICBjYXNlIFNTSF9DTUQ6ICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCAqLwot ICAgICAgICBpZiAoKHggPSBjbXR4dCgiQ29tbWFuZCB0byBzdGFydCBzc2giLCJzc2ggLWUgbm9u ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAg IHJldHVybih4KTsKLSAgICAgICAgbWFrZXN0cigmc3NoY21kLHMpOwotICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOwotI2VuZGlmIC8qIFNTSENNRCAqLwotCi0jaWZkZWYgU1NIQlVJTFRJTgot ICAgICAgY2FzZSBTU0hfQUZXOiAgICAgICAgICAgICAgICAgICAgIC8qIEFnZW50LWZvcndhcmRp bmcgKi8KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmc3NoX2FmdykpOwotCi0gICAg ICBjYXNlIFNTSF9DSEk6ICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgSG9zdCBJUCAqLwot ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzc2hfY2hraXApKTsKLSAgICAgICAgYnJl YWs7Ci0KLSAgICAgIGNhc2UgU1NIX0NNUDogICAgICAgICAgICAgICAgICAgICAvKiBDb21wcmVz c2lvbiAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzc2hfY21wKSk7Ci0KLSAg ICAgIGNhc2UgU1NIX0RZRjogICAgICAgICAgICAgICAgICAgICAvKiBEeW5hbWljIEZvcndhcmRp bmcgKi8KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmc3NoX2R5ZikpOwotCi0gICAg ICBjYXNlIFNTSF9HV1A6ICAgICAgICAgICAgICAgICAgICAgLyogR2F0ZXdheSBwb3J0cyAqLwot ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzc2hfZ3dwKSk7Ci0KLSAgICAgIGNhc2Ug U1NIX0dTUzogICAgICAgICAgICAgICAgICAgICAvKiBHU1NBUEkgKi8KLSAgICAgICAgaWYgKCh5 ID0gY21rZXkoZ3NzYXBpdGFiLG5nc3NhcGl0YWIsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgIHJldHVybih5KTsKLSAgICAgICAgc3dpdGNoICh5KSB7Ci0gICAgICAgICAgY2FzZSAx OiAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsZWdhdGUgY3JlZGVudGlhbHMgKi8KLSAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnNzaF9nc2QpKTsKLSAgICAgICAgICBjYXNl IDI6ICAgICAgICAgICAgICAgICAgICAgICAvKiBrZXktZXhjaGFuZ2UgKi8KLSAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gc2V0b24oJnNzaF9na3gpKTsKLSAgICAgICAgfQotICAgICAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDApOwotCi0jaWZkZWYgQ09NTUVOVAotICAgICAgY2FzZSBTU0hfS0JEOiAg ICAgICAgICAgICAgICAgICAgIC8qIEtiZCBJbnRlcmFjdGl2ZSBEZXZpY2VzICovCi0gICAgICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIC8q IFRPIEJFIEZJTExFRCBJTiAqLwotICAgICAgICByZXR1cm4oLTIpOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQotICAgICAgY2FzZSBTU0hfSzQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEtlcmJl cm9zIElWICovCi0gICAgICBjYXNlIFNTSF9LNTogICAgICAgICAgICAgICAgICAgICAgLyogS2Vy YmVyb3MgViAqLwotICAgICAgICBpZiAoKHkgPSBjbWtleSh0Z3RwYXNzLDEsIiIsInRndC1wYXNz aW5nIiwgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBzd2l0 Y2ggKHkpIHsKLSAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IChjeCA9PSBTU0hfSzQpID8KLSAgICAgICAgICAgICAgICAgICBzZXRvbigmc3NoX2s0dGd0KSA6 IHNldG9uKCZzc2hfazV0Z3QpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDAp OwotCi0gICAgICBjYXNlIFNTSF9QUlA6ICAgICAgICAgICAgICAgICAgICAgLyogUHJpdmQgcG9y dCAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzc2hfcHJwKSk7Ci0KLSAgICAg IGNhc2UgU1NIX1NISDogICAgICAgICAgICAgICAgICAgICAvKiBRdWlldCAqLwotICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzc2hfc2hoKSk7Ci0KLSAgICAgIGNhc2UgU1NIX1NISzog ICAgICAgICAgICAgICAgICAgICAvKiBTdHJpY3QgSG9zdCBLZXkgQ2hlY2sgKi8KLSAgICAgICAg aWYgKCh5ID0gY21rZXkob29rdGFiLDMsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAg IHJldHVybih5KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJl dHVybih4KTsKLSAgICAgICAgc3NoX3NoayA9IHk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0g MSk7Ci0KLSAgICAgIGNhc2UgU1NIX0hCVDoKLQl4ID0gY21udW0oIkhlYXJ0YmVhdCBpbnRlcnZh bCwgc2Vjb25kcyIsIjAiLDEwLCZ6LHh4c3RyaW5nKTsKLQlpZiAoeCA8IDApIHJldHVybih4KTsK LQlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLQlzc2hfaGJ0ID0gejsKLQlyZXR1 cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFNTSF9WMTogICAgICAgICAgICAgICAgICAg ICAgLyogU1NIIFYxICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5KHNzaHYxdGFiLG5zc2h2MXRh YiwiIiwiIiwgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBz d2l0Y2ggKHkpIHsKLSAgICAgICAgICBjYXNlIFNTSDFfSzU0OgotICAgICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSBzZXRvbigmc3NoX2s1X2lzX2s0KSk7Ci0gICAgICAgICAgY2FzZSBTU0gxX0NJ RjogICAgICAgICAgICAgICAgLyogTm90IGEgbGlzdCAqLwotICAgICAgICAgICAgaWYgKCh5ID0g Y21rZXkoc3NoMWNpcGhlcnMsbnNzaDFjaXBoZXJzLCIiLCIiLCB4eHN0cmluZykpIDwgMCkKLSAg ICAgICAgICAgICAgaWYgKHkgIT0gLTMpCi0gICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAg ICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgICAgICBp ZiAoeSA9PSAtMykgewotICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaDFfY2lmLE5VTEwpOwot ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgbnNz aDFjaXBoZXJzOyB4KyspCi0gICAgICAgICAgICAgICAgICBpZiAoc3NoMWNpcGhlcnNbeF0ua3d2 YWwgPT0geSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbWFr ZXN0cigmc3NoMV9jaWYsc3NoMWNpcGhlcnNbeF0ua3dkKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIHJldHVybigxKTsKLSAgICAgICAgICBjYXNlIFNTSDFfR05IOgotICAgICAgICAgIGNh c2UgU1NIMV9VTkg6Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWlmaSgiRmlsZW5hbWUiLCIiLCZz LCZ6LHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHggIT0gLTMpCi0gICAg ICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAgICAgICAgICBpZiAo emZucWZwKGxpbmUsVE1QQlVGU0laLHRtcGJ1ZikpCi0gICAgICAgICAgICAgICAgICBja3N0cm5j cHkobGluZSx0bXBidWYsTElOQlVGU0laKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMg PSAoeCA9PSAtMykgPyBOVUxMIDogbGluZTsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgc3dpdGNoICh5KSB7 Ci0gICAgICAgICAgICAgIGNhc2UgU1NIMV9HTkg6IG1ha2VzdHIoJnNzaDFfZ25oLHMpOyBicmVh azsKLSAgICAgICAgICAgICAgY2FzZSBTU0gxX1VOSDogbWFrZXN0cigmc3NoMV91bmgscyk7IGJy ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICB9Ci0K LSAgICAgIGNhc2UgU1NIX1YyOiAgICAgICAgICAgICAgICAgICAgICAvKiBTU0ggVjIgKi8KLSAg ICAgICAgaWYgKCh5ID0gY21rZXkoc3NodjJ0YWIsbnNzaHYydGFiLCIiLCIiLCB4eHN0cmluZykp IDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIHN3aXRjaCAoeSkgewotICAgICAg ICAgIGNhc2UgU1NIMl9BUks6Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZz c2gyX2FyaykpOwotICAgICAgICBjYXNlIFNTSDJfQVVUOiB7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogQXV0aGVudGljYXRpb24gKi8KLSNkZWZpbmUgVE1QQ05UIDEyCi0gICAgICAgICAgICBp bnQgaSwgaiwgdG1wW1RNUENOVF07Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgVE1QQ05U OyBpKyspCi0gICAgICAgICAgICAgIHRtcFtpXSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgVE1QQ05UOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShzc2gy YXV0LG5zc2gyYXV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBdXRoZW50aWNh dGlvbiBtZXRob2QiLCIiLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm ICh5ID09IC0zKQotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAo aiA9IDA7IGogPCBpOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRtcFtqXSA9PSB5 KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxyXG4/Q2hvaWNlIGhhcyBhbHJl YWR5IGJlZW4gdXNlZC5cclxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkp OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIHRtcFtpXSA9IHk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHogPSBjbWNm bSgpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih6KTsKLQotICAgICAgICAgICAgaWYgKHNz aDJfYXV0aCkgewotICAgICAgICAgICAgICAgIGZyZWUoc3NoMl9hdXRoKTsKLSAgICAgICAgICAg ICAgICBzc2gyX2F1dGggPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGkg PiAwKSB7Ci0gICAgICAgICAgICAgICAgaW50IGxlbiA9IDA7Ci0gICAgICAgICAgICAgICAgZm9y IChqID0gMDsgaiA8IGk7IGorKykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4 IDwgbnNzaDJhdXQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoc3NoMmF1dFt4XS5r d3ZhbCA9PSB0bXBbal0gJiYgIXNzaDJhdXRbeF0uZmxncykKLSAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBsZW4gKz0gc3RybGVuKHNzaDJhdXRbeF0u a3dkKSArIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNzaDJfYXV0aCA9 IG1hbGxvYyhsZW4pOwotICAgICAgICAgICAgICAgIHNzaDJfYXV0aFswXSA9ICdcMCc7Ci0gICAg ICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgewotICAgICAgICAgICAgICAgICAg ICBmb3IgKHggPSAwOyB4IDwgbnNzaDJhdXQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICBp ZiAoc3NoMmF1dFt4XS5rd3ZhbCA9PSB0bXBbal0gJiYgIXNzaDJhdXRbeF0uZmxncykKLSAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQo c3NoMl9hdXRoLHNzaDJhdXRbeF0ua3dkLGxlbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChq IDwgaSAtIDEpCi0gICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHNzaDJfYXV0aCwiLCIs bGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOwotI3VuZGVmIFRNUENOVAotICAgICAgICAgIH0KLSAgICAgICAgY2Fz ZSBTU0gyX0NJRjogewotI2RlZmluZSBUTVBDTlQgMTIKLSAgICAgICAgICAgIGludCBpLCBqLCB0 bXBbVE1QQ05UXTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBUTVBDTlQ7IGkrKykKLSAg ICAgICAgICAgICAgdG1wW2ldID0gMDsKLQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFRN UENOVDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoc3NoMmNpcGhlcnMs bnNzaDJjaXBoZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCIiLCB4eHN0 cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoeSA9PSAtMykKLSAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7 Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bXBbal0gPT0geSkgewotICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCJcclxuP0Nob2ljZSBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuXHJcbiIp OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0bXBbaV0gPSB5OwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAg ICAgICByZXR1cm4oeik7Ci0KLSAgICAgICAgICAgIGlmIChzc2gyX2NpZikgewotICAgICAgICAg ICAgICAgIGZyZWUoc3NoMl9jaWYpOwotICAgICAgICAgICAgICAgIHNzaDJfY2lmID0gTlVMTDsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpID4gMCkgewotICAgICAgICAgICAgICAg IGludCBsZW4gPSAwOwotICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqIDwgaTsgaisrKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBuc3NoMmNpcGhlcnM7IHgrKykKLSAg ICAgICAgICAgICAgICAgICAgICBpZiAoc3NoMmNpcGhlcnNbeF0ua3d2YWwgPT0gdG1wW2pdICYm Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICFzc2gyY2lwaGVyc1t4XS5mbGdzKQotICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGxlbiArPSBzdHJs ZW4oc3NoMmNpcGhlcnNbeF0ua3dkKSArIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIHNzaDJfY2lmID0gbWFsbG9jKGxlbik7Ci0gICAgICAgICAgICAgICAgc3NoMl9jaWZb MF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKLSAg ICAgICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBuc3NoMmNpcGhlcnM7IHgrKykKLSAgICAg ICAgICAgICAgICAgICAgaWYgKHNzaDJjaXBoZXJzW3hdLmt3dmFsID09IHRtcFtqXSAmJiAhc3No MmNpcGhlcnNbeF0uZmxncykKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICAgICAgY2tzdHJuY2F0KHNzaDJfY2lmLHNzaDJjaXBoZXJzW3hdLmt3ZCxsZW4pOwot ICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IGkgLSAxKQotICAgICAgICAgICAgICAgICAgICAg IGNrc3RybmNhdChzc2gyX2NpZiwiLCIsbGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotI3VuZGVmIFRNUENOVAot ICAgICAgICB9Ci0gICAgICAgIGNhc2UgU1NIMl9NQUM6IHsKLSNkZWZpbmUgVE1QQ05UIDEyCi0g ICAgICAgICAgICBpbnQgaSwgaiwgdG1wW1RNUENOVF07Ci0gICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgVE1QQ05UOyBpKyspCi0gICAgICAgICAgICAgIHRtcFtpXSA9IDA7Ci0KLSAgICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBUTVBDTlQ7IGkrKykgewotICAgICAgICAgICAgICAgIGlmICgo eSA9IGNta2V5KHNzaDJtYWNzLG5zc2gybWFjcywiIiwiIiwgeHhzdHJpbmcpKSA8IDApIHsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKHkgPT0gLTMpCi0gICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgewotICAgICAgICAgICAgICAg ICAgICBpZiAodG1wW2pdID09IHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi XHJcbj9DaG9pY2UgaGFzIGFscmVhZHkgYmVlbiB1c2VkLlxyXG4iKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgdG1wW2ldID0geTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeik7 Ci0KLSAgICAgICAgICAgIGlmIChzc2gyX21hYykgewotICAgICAgICAgICAgICAgIGZyZWUoc3No Ml9tYWMpOwotICAgICAgICAgICAgICAgIHNzaDJfbWFjID0gTlVMTDsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGlmIChpID4gMCkgewotICAgICAgICAgICAgICAgIGludCBsZW4gPSAwOwot ICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKLSAgICAgICAgICAgICAg ICAgICAgZm9yICh4ID0gMDsgeCA8IG5zc2gybWFjczsgeCsrKQotICAgICAgICAgICAgICAgICAg ICAgIGlmIChzc2gybWFjc1t4XS5rd3ZhbCA9PSB0bXBbal0gJiYgIXNzaDJtYWNzW3hdLmZsZ3Mp Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgbGVu ICs9IHN0cmxlbihzc2gybWFjc1t4XS5rd2QpICsgMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgc3NoMl9tYWMgPSBtYWxsb2MobGVuKTsKLSAgICAgICAgICAgICAgICBzc2gy X21hY1swXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgZm9yIChqPTA7IGogPCBpOyBqKyspIHsK LSAgICAgICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IG5zc2gybWFjczsgeCsrKQotICAg ICAgICAgICAgICAgICAgICAgIGlmIChzc2gybWFjc1t4XS5rd3ZhbCA9PSB0bXBbal0gJiYgIXNz aDJtYWNzW3hdLmZsZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICAgICAgY2tzdHJuY2F0KHNzaDJfbWFjLHNzaDJtYWNzW3hdLmt3ZCxsZW4pOwotICAg ICAgICAgICAgICAgICAgICBpZiAoaiA8IGkgLSAxKQotICAgICAgICAgICAgICAgICAgICAgIGNr c3RybmNhdChzc2gyX21hYywiLCIsbGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotI3VuZGVmIFRNUENOVAotICAg ICAgICAgIH0KLSAgICAgICAgICBjYXNlIFNTSDJfSEtBOiB7Ci0jZGVmaW5lIFRNUENOVCAxMgot ICAgICAgICAgICAgaW50IGksIGosIHRtcFtUTVBDTlRdOwotICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IFRNUENOVDsgaSsrKQotICAgICAgICAgICAgICB0bXBbaV0gPSAwOwotCi0gICAgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgVE1QQ05UOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAo KHkgPSBjbWtleShoa2F0YWIsbmhrYXRhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiIiwiIiwgeHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHkgPT0g LTMpCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHJl dHVybih5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChqID0gMDsg aiA8IGk7IGorKykgewotICAgICAgICAgICAgICAgICAgICBpZiAodG1wW2pdID09IHkpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbj9DaG9pY2UgaGFzIGFscmVhZHkgYmVl biB1c2VkLlxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdG1w W2ldID0geTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwg MCkKLSAgICAgICAgICAgICAgcmV0dXJuKHopOwotCi0gICAgICAgICAgICBpZiAoc3NoMl9oa2Ep IHsKLSAgICAgICAgICAgICAgICBmcmVlKHNzaDJfaGthKTsKLSAgICAgICAgICAgICAgICBzc2gy X2hrYSA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaSA+IDApIHsKLSAg ICAgICAgICAgICAgICBpbnQgbGVuID0gMDsKLSAgICAgICAgICAgICAgICBmb3IgKGo9MDsgaiA8 IGk7IGorKykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgbmhrYXRhYjsg eCsrKQotICAgICAgICAgICAgICAgICAgICAgIGlmIChoa2F0YWJbeF0ua3d2YWwgPT0gdG1wW2pd ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICFoa2F0YWJbeF0uZmxncykKLSAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBsZW4gKz0gc3RybGVu KGhrYXRhYlt4XS5rd2QpICsgMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg c3NoMl9oa2EgPSBtYWxsb2MobGVuKTsKLSAgICAgICAgICAgICAgICBzc2gyX2hrYVswXSA9ICdc MCc7Ci0gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgewotICAgICAgICAg ICAgICAgICAgZm9yICh4ID0gMDsgeCA8IG5oa2F0YWI7IHgrKykKLSAgICAgICAgICAgICAgICAg ICAgaWYgKGhrYXRhYlt4XS5rd3ZhbCA9PSB0bXBbal0gJiYgIWhrYXRhYlt4XS5mbGdzKQotICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQo c3NoMl9oa2EsaGthdGFiW3hdLmt3ZCxsZW4pOwotICAgICAgICAgICAgICAgICAgICBpZiAoaiA8 IGkgLSAxKQotICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChzc2gyX2hrYSwiLCIsbGVu KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOwotI3VuZGVmIFRNUENOVAotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNl IFNTSDJfR05IOgotICAgICAgICAgIGNhc2UgU1NIMl9VTkg6Ci0gICAgICAgICAgICBpZiAoKHgg PSBjbWlmaSgiRmlsZW5hbWUiLCIiLCZzLCZ6LHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAg ICAgICAgaWYgKHggIT0gLTMpCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0la KTsKLSAgICAgICAgICAgICAgICBpZiAoemZucWZwKGxpbmUsVE1QQlVGU0laLHRtcGJ1ZikpCi0g ICAgICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSx0bXBidWYsTElOQlVGU0laKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIHMgPSAoeCA9PSAtMykgPyBOVUxMIDogbGluZTsKLSAgICAg ICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwot ICAgICAgICAgICAgc3dpdGNoICh5KSB7Ci0gICAgICAgICAgICAgIGNhc2UgU1NIMl9HTkg6IG1h a2VzdHIoJnNzaDJfZ25oLHMpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBTU0gyX1VOSDog bWFrZXN0cigmc3NoMl91bmgscyk7IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1 cm4oc3VjY2VzcyA9IDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIFNTSF9WUkI6ICAgICAgICAgICAgICAg ICAgICAgLyogVmVyYm9zaXR5IGxldmVsICovCi0gICAgICAgIHkgPSBjbW51bSgiU1NIIHZlcmJv c2l0eSBsZXZlbCwgMC03IiwiMiIsMTAsJngseHhzdHJpbmcpOwotICAgICAgICByZXR1cm4oc2V0 bnVtKCZzc2hfdnJiLHgseSw3KSk7Ci0KLSAgICAgIGNhc2UgU1NIX1ZFUjogICAgICAgICAgICAg ICAgICAgICAvKiBWZXJzaW9uICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5KHNzaHZlciwzLCIi LCJhdXRvIiwgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBzc2hf dmVyID0geTsgICAgICAgICAgICAgICAgICAgIC8qIDAgPT0gQVVUTyAqLwotI2lmbmRlZiBTU0hU RVNUCi0gICAgICAgIHNsX3NzaF92ZXJfc2F2ZWQgPSAwOwotI2VuZGlmIC8qIFNTSFRFU1QgKi8K LSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgY2FzZSBTU0hfSURGOiB7ICAg ICAgICAgICAgICAgICAgIC8qIElkZW50aXR5IGZpbGUgKi8KLSAgICAgICAgaW50IGksIG47Ci0g ICAgICAgIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoKHggPSBj bWlmaSgiRmlsZW5hbWUiLCIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAg ICAgaWYgKHggPT0gLTMpCi0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICByZXR1cm4oeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXpmbnFmcChzLExJ TkJVRlNJWixsaW5lKSkKLSAgICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVop OwotICAgICAgICAgICAgbWFrZXN0cigmc3NoX3RtcFtpXSxsaW5lKTsKLSAgICAgICAgfQotICAg ICAgICBuID0gaTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSB7Ci0gICAgICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgICBtYWtlc3RyKCYoc3NoX3Rt cFtpXSksTlVMTCk7Ci0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIH0KLSAgICAgICAg Zm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLSAgICAgICAgICAgIG1ha2VzdHIoJihzc2hfaWRm W2ldKSxOVUxMKTsKLSAgICAgICAgICAgIGlmIChpIDwgbikgewotICAgICAgICAgICAgICAgIHNz aF9pZGZbaV0gPSBzc2hfdG1wW2ldOwotICAgICAgICAgICAgICAgIHNzaF90bXBbaV0gPSBOVUxM OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCYoc3NoX3Rt cFtpXSksTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3NoX2lkZl9u ID0gbjsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLSAgICAgIGNhc2Ug U1NIX1hGVzogICAgICAgICAgICAgICAgICAgICAvKiBYMTEtZm9yd2FyZGluZyAqLwotICAgICAg ICBzdWNjZXNzID0gc2V0b24oJnNzaF94ZncpOwotI2lmbmRlZiBTU0hURVNUCi0gICAgICAgIGlm IChzdWNjZXNzKQotICAgICAgICAgIHNsX3NzaF94Zndfc2F2ZWQgPSAwOwotI2VuZGlmIC8qIFNT SFRFU1QgKi8KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotCi0gICAgICBjYXNlIFNTSF9YQUw6 ICAgICAgICAgICAgICAgICAgICAgLyogU1NIIFhhdXRoIExvY2F0aW9uICovCi0gICAgICAgIGlm ICgoeCA9IGNtaWZpKCJQYXRoIHRvIGV4ZWN1dGFibGUiLCAiIiwmcywmeSx4eHN0cmluZykpIDwg MCkgewotICAgICAgICAgICAgaWYgKHggIT0gLTMpCi0gICAgICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0la KTsKLSAgICAgICAgICAgIGlmICh6Zm5xZnAobGluZSxUTVBCVUZTSVosdG1wYnVmKSkKLSAgICAg ICAgICAgICAgY2tzdHJuY3B5KGxpbmUsdG1wYnVmLExJTkJVRlNJWik7Ci0gICAgICAgIH0KLSAg ICAgICAgcyA9ICh4ID09IC0zKSA/IE5VTEwgOiBsaW5lOwotICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgbWFrZXN0cigmc3NoX3hhbCxzKTsKLSAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgY2FzZSBTU0hfQ0ZHOiAgICAgICAgICAg ICAgICAgICAgIC8qIFVzZSBPcGVuU1NIIENvbmZpZyAqLwotICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IHNldG9uKCZzc2hfY2ZnKSk7Ci0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotCi0gICAgICBk ZWZhdWx0OgotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLX0KLSNlbmRpZiAvKiBBTllTU0gg Ki8KLQotI2lmZGVmIFNGVFBfQlVJTFRJTgotc3RhdGljIGludAotZG9zZXRzZnRwKCkgewotICAg IGludCBjeCwgeCwgeSwgejsKLSAgICBjaGFyICogczsKLQotICAgIGlmICgoY3ggPSBjbWtleShz ZnRwdGFiLG5zZnRwdGFiLCIiLCIiLCB4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybihjeCk7 Ci0gICAgc3dpdGNoIChjeCkgewotICAgIGNhc2UgWFlfU0ZUUF9FT0w6Ci0gICAgY2FzZSBYWV9T RlRQX1JDUzoKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLX0KLSNl bmRpZiAvKiBTRlRQX0JVSUxUSU4gKi8KLQotI2lmZGVmIEtVSQotI2luY2x1ZGUgImlrdWkuaCIK LWV4dGVybiBVTE9ORyBSR0JUYWJsZVsxNl07Ci0KLSNkZWZpbmUgR1VJX1JHQiAgMQotI2RlZmlu ZSBHVUlfV0lOICAyCi0jZGVmaW5lIEdVSV9GT04gIDMKLSNkZWZpbmUgR1VJX0RJQSAgNAotI2Rl ZmluZSBHVUlfVExCICA1Ci0jZGVmaW5lIEdVSV9NTkIgIDYKLSNkZWZpbmUgR1VJX0NMUyAgNwot Ci0jZGVmaW5lIEdVSVdfUE9TIDEKLSNkZWZpbmUgR1VJV19SRVMgMgotI2RlZmluZSBHVUlXX1JV TiAzCi0jZGVmaW5lIEdVSVdSX05PTiAwCi0jZGVmaW5lIEdVSVdSX0ZPTiAxCi0jZGVmaW5lIEdV SVdSX0RJTSAyCi0jZGVmaW5lIEdVSVdOX1JFUyAxCi0jZGVmaW5lIEdVSVdOX01JTiAyCi0jZGVm aW5lIEdVSVdOX01BWCAzCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGd1aXRhYltdID0gewotICAg IHsgImNsb3NlIiwgICAgICAgR1VJX0NMUywgIDAgfSwKLSAgICB7ICJkaWFsb2dzIiwgICAgIEdV SV9ESUEsICAwIH0sCi0gICAgeyAiZm9udCIsICAgICAgICBHVUlfRk9OLCAgMCB9LAotICAgIHsg Im1lbnViYXIiLCAgICAgR1VJX01OQiwgIDAgfSwKLSAgICB7ICJyZ2Jjb2xvciIsICAgIEdVSV9S R0IsICAwIH0sCi0gICAgeyAidG9vbGJhciIsICAgICBHVUlfVExCLCAgMCB9LAotICAgIHsgIndp bmRvdyIsICAgICAgR1VJX1dJTiwgIDAgfSwKLSAgICB7ICIiLCAwLCAwfQotfTsKLXN0YXRpYyBp bnQgbmd1aXRhYiA9IChzaXplb2YoZ3VpdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0K LXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGd1aXd0YWJbXSA9IHsKLSAgICB7ICJwb3NpdGlvbiIsICAg IEdVSVdfUE9TLCAwIH0sCi0gICAgeyAicmVzaXplLW1vZGUiLCBHVUlXX1JFUywgMCB9LAotICAg IHsgInJ1bi1tb2RlIiwgICAgR1VJV19SVU4sIDAgfSwKLSAgICB7ICIiLCAwLCAwfQotfTsKLXN0 YXRpYyBpbnQgbmd1aXd0YWIgPSAoc2l6ZW9mKGd1aXd0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpKTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZ3Vpd3J0YWJbXSA9IHsKLSAgICB7ICJjaGFu Z2UtZGltZW5zaW9ucyIsICBHVUlXUl9ESU0sIDAgfSwKLSAgICB7ICJub25lIiwgICAgICAgICAg ICAgICBHVUlXUl9OT04sIDAgfSwKLSAgICB7ICJzY2FsZS1mb250IiwgICAgICAgICBHVUlXUl9G T04sIDAgfSwKLSAgICB7ICIiLCAwLCAwfQotfTsKLXN0YXRpYyBpbnQgbmd1aXdydGFiID0gKHNp emVvZihndWl3cnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdGF0aWMgc3RydWN0 IGtleXRhYiBndWl3bnRhYltdID0gewotICAgIHsgIm1heGltaXplIiwgIEdVSVdOX01BWCwgMCB9 LAotICAgIHsgIm1pbmltaXplIiwgIEdVSVdOX01JTiwgMCB9LAotICAgIHsgInJlc3RvcmUiLCAg IEdVSVdOX1JFUywgMCB9LAotICAgIHsgIiIsIDAsIDB9Ci19Owotc3RhdGljIGludCBuZ3Vpd250 YWIgPSAoc2l6ZW9mKGd1aXdudGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0YXRp YyBzdHJ1Y3Qga2V5dGFiIHJnYnRhYltdID0gewotICAgIHsgImJsYWNrIiwgICAgICAgICAwLCAw IH0sCi0gICAgeyAiYmx1ZSIsICAgICAgICAgIDEsIDAgfSwKLSAgICB7ICJicm93biIsICAgICAg ICAgNiwgMCB9LAotICAgIHsgImN5YW4iLCAgICAgICAgICAzLCAwIH0sCi0gICAgeyAiZGFya2dy YXkiLCAgICAgIDgsIDAgfSwKLSAgICB7ICJkZ3JheSIsICAgICAgICAgOCwgQ01fSU5WIH0sCi0g ICAgeyAiZ3JlZW4iLCAgICAgICAgIDIsIDAgfSwKLSAgICB7ICJsYmx1ZSIsICAgICAgICAgOSwg Q01fSU5WIH0sCi0gICAgeyAibGN5YW4iLCAgICAgICAgMTEsIENNX0lOViB9LAotICAgIHsgImxn cmVlbiIsICAgICAgIDEwLCBDTV9JTlYgfSwKLSAgICB7ICJsZ3JheSIsICAgICAgICAgNywgQ01f SU5WIH0sCi0gICAgeyAibGlnaHRibHVlIiwgICAgIDksIDAgfSwKLSAgICB7ICJsaWdodGN5YW4i LCAgICAxMSwgMCB9LAotICAgIHsgImxpZ2h0Z3JlZW4iLCAgIDEwLCAwIH0sCi0gICAgeyAibGln aHRncmF5IiwgICAgIDcsIDAgfSwKLSAgICB7ICJsaWdodG1hZ2VudGEiLCAxMywgMCB9LAotICAg IHsgImxpZ2h0cmVkIiwgICAgIDEyLCAwIH0sCi0gICAgeyAibG1hZ2VudGEiLCAgICAgMTMsIENN X0lOViB9LAotICAgIHsgImxyZWQiLCAgICAgICAgIDEyLCBDTV9JTlYgfSwKLSAgICB7ICJtYWdl bnRhIiwgICAgICAgNSwgMCB9LAotICAgIHsgInJlZCIsICAgICAgICAgICA0LCAwIH0sCi0gICAg eyAid2hpdGUiLCAgICAgICAgMTUsIDAgfSwKLSAgICB7ICJ5ZWxsb3ciLCAgICAgICAxNCwgMCB9 LAotCi19OwotaW50IG5yZ2IgPSAoc2l6ZW9mKHJnYnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRh YikpOwotCi1WT0lECi1zaG9ndWkoKSB7Ci0gICAgZXh0ZXJuIGd1aV9kaWFsb2c7Ci0gICAgZXh0 ZXJuIEhXTkQgZ2V0SHduZEtVSSgpOwotICAgIHVuc2lnbmVkIGNoYXIgY21kc2F2ID0gY29sb3Jj bWQ7Ci0gICAgaW50IGksIHJlZCwgZ3JlZW4sIGJsdWUsIGxpbmVzPTA7Ci0gICAgY2hhciAqIHM7 Ci0KLQotICAgIHByaW50ZigiR1VJIHBhcmFtdGVyczpcbiIpOwotICAgIGlmICgrK2xpbmVzID4g Y21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9 Ci0gICAgcHJpbnRmKCIgIERpYWxvZ3M6ICAgICAlc1xuIixzaG93b2ZmKGd1aV9kaWFsb2cpKTsK LSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJu OyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHByaW50ZigiICBQb3NpdGlvbjogICAgJWQsJWRcbiIs Z2V0X2d1aV93aW5kb3dfcG9zX3goKSwKLSAgICAgICAgICAgIGdldF9ndWlfd2luZG93X3Bvc195 KCkpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSBy ZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIgIFJlc29sdXRpb246ICAlZCB4 ICVkXG4iLEdldFN5c3RlbU1ldHJpY3MoU01fQ1hTQ1JFRU4pLAotICAgICAgICAgICAgR2V0U3lz dGVtTWV0cmljcyhTTV9DWVNDUkVFTikpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRm KCIgIFJ1bi1tb2RlOiAgICAlc1xuIixJc0ljb25pYyhnZXRId25kS1VJKCkpID8gIm1pbmltaXpl ZCIgOgotICAgICAgICAgICAgSXNab29tZWQoZ2V0SHduZEtVSSgpKSA/ICJtYXhpbWl6ZWQiIDog InJlc3RvcmVkIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBzd2l0Y2ggKCBnZXRfZ3VpX3Jl c2l6ZV9tb2RlKCkgKSB7Ci0gICAgICBjYXNlIEdVSVdSX05PTjoKLSAgICAgICAgcyA9ICJub25l IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdVSVdSX0ZPTjoKLSAgICAgICAgcyA9ICJz Y2FsZXMgZm9udCI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHVUlXUl9ESU06Ci0gICAg ICAgIHM9ICJjaGFuZ2VzIGRpbWVuc2lvbnMiOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg cHJpbnRmKCIgIFJlc2l6ZS1tb2RlOiAlc1xuIixzKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9y b3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotICAg IHByaW50ZigiXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotCi0gICAgcHJpbnRmKCJSR0IgQ29s b3IgVGFibGU6XG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHByaW50ZigiICBDb2xvciAg ICAgICAgICAgICAgUmVkIEdyZWVuIEJsdWVcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAg cHJpbnRmKCIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7 Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVy bjsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbnJnYjsgaSsrKSB7Ci0g ICAgICAgIGlmICghcmdidGFiW2ldLmZsZ3MpIHsKLSAgICAgICAgICAgIGJsdWUgPSAoUkdCVGFi bGVbcmdidGFiW2ldLmt3dmFsXSAmIDB4MDBGRjAwMDApPj4xNjsKLSAgICAgICAgICAgIGdyZWVu ID0gKFJHQlRhYmxlW3JnYnRhYltpXS5rd3ZhbF0gJiAweDAwMDBGRjAwKT4+ODsKLSAgICAgICAg ICAgIHJlZCA9IChSR0JUYWJsZVtyZ2J0YWJbaV0ua3d2YWxdICYgMHgwMDAwMDBGRik7Ci0gICAg ICAgICAgICBwcmludGYoIiAgJS0xOHMgJTNkICAlM2QgICUzZCAgIixyZ2J0YWJbaV0ua3dkLHJl ZCxncmVlbixibHVlKTsKLSAgICAgICAgICAgIGNvbG9yY21kID0gcmdidGFiW2ldLmt3dmFsIDw8 IDQ7Ci0gICAgICAgICAgICBwcmludGYoIioqKioqKioqIik7Ci0gICAgICAgICAgICBjb2xvcmNt ZCA9IGNtZHNhdjsKLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgIGlmICgr K2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7Ci0JCWlmICghYXNrbW9yZSgpKQotCQkgIHJldHVybjsK LQkJZWxzZQotCQkgIGxpbmVzID0gMDsKLQkgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHBy aW50ZigiXG4iKTsKLX0KLQotaW50Ci1zZXRyZ2IoKSB7Ci0gICAgaW50IGN4LCByZWQgPSAwLCBi bHVlID0gMCwgZ3JlZW4gPSAwLCB6LCB4OwotCi0gICAgaWYgKChjeCA9IGNta2V5KHJnYnRhYixu cmdiLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKGN4KTsKLSAgICBpZiAoKHog PSBjbW51bSgiUmVkIHZhbHVlLCAwLTI1NSIsIiIsMTAsJnJlZCx4eHN0cmluZykpIDwgMCkKLSAg ICAgIHJldHVybih6KTsKLSAgICBpZiAoKHogPSBjbW51bSgiR3JlZW4gdmFsdWUsIDAtMjU1Iiwi IiwxMCwmZ3JlZW4seHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oeik7Ci0gICAgaWYgKCh6 ID0gY21udW0oIkJsdWUgdmFsdWUsIDAtMjU1IiwiIiwxMCwmYmx1ZSx4eHN0cmluZykpIDwgMCkK LSAgICAgIHJldHVybih6KTsKLSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsK LSAgICBpZiAoY3ggPiAxNSB8fCByZWQgPiAyNTUgfHwgYmx1ZSA+IDI1NSB8fCBncmVlbiA+IDI1 NSkKLSAgICAgIHJldHVybigtMik7Ci0gICAgUkdCVGFibGVbY3hdID0gKHVuc2lnbmVkKSgoKHVu c2lnbmVkKWJsdWUgPDwgMTYpIHwKLSAgICAgICAgKHVuc2lnbmVkKSgodW5zaWduZWQpZ3JlZW4g PDwgOCkgfAotICAgICAgICAodW5zaWduZWQpcmVkKTsKLSAgICByZXR1cm4oc3VjY2VzcyA9IDEp OwotfQotCi0vKgotICBTZXQgR1VJIHdpbmRvdyBwb3NpdGlvbjogWFkgY29vcmRpbmF0ZXMgb2Yg dXBwZXIgbGVmdCBjb3JuZXIsCi0gIGV4cHJlc3NlZCBhcyBwaXhlbCBudW1iZXJzIGluIHRoZSBj dXJyZW50IHNjcmVlbiByZXNvbHV0aW9uLgotICAoMCwwKSBtZWFucyBwdXQgb3Vyc2VsdmVzIGlu IHRoZSB1cHBlciBsZWZ0IGNvcm5lci4KLSAgQ2FuIHdlIGNoZWNrIGZvciBvdXQgb2YgYm91bmRz PwotKi8KLQotaW50Ci1zZXRndWl3aW4oKSB7Ci0gICAgaW50IGN4LCB4LCB5LCB6OwotICAgIGlm ICgoY3ggPSBjbWtleShndWl3dGFiLG5ndWl3dGFiLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAg ICAgcmV0dXJuKGN4KTsKLSAgICBzd2l0Y2ggKGN4KSB7Ci0gICAgICBjYXNlIEdVSVdfUE9TOgot ICAgICAgICBpZiAoKHogPSBjbW51bSgiWCBjb29yZGluYXRlIChwaXhlbCBudW1iZXIpIiwiIiwx MCwmeCx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgIGlmICgo eiA9IGNtbnVtKCJZIGNvb3JkaW5hdGUgKHBpeGVsIG51bWJlcikiLCIiLDEwLCZ5LHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkg PCAwKQotICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgaWYgKHggPCAwIHx8IHkgPCAwKSB7 Ci0gICAgICAgICAgICBwcmludGYoIj9Db29yZGluYXRlcyBtdXN0IGJlIDAgb3IgZ3JlYXRlclxu Iik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIGd1aV9wb3Np dGlvbih4LHkpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgY2FzZSBHVUlX X1JFUzoKLSAgICAgICAgaWYgKCh4ID0gY21rZXkoZ3Vpd3J0YWIsbmd1aXdydGFiLCIiLCIiLHh4 c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh6ID0gY21j Zm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgZ3VpX3Jlc2l6ZV9tb2Rl KHgpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgY2FzZSBHVUlXX1JVTjoK LQlpZiAoKHggPSBjbWtleShndWl3bnRhYixuZ3Vpd250YWIsIiIsIiIseHhzdHJpbmcpKSA8IDAp Ci0JICByZXR1cm4oeCk7Ci0JaWYgKCh6ID0gY21jZm0oKSkgPCAwKQotCSAgcmV0dXJuKHopOwot CWd1aV93aW5fcnVuX21vZGUoeCk7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIGRlZmF1 bHQ6Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotfQotCi1pbnQKLXNldGd1aWZvbnQoKSB7 CQkJCS8qIEFzc3VtZXMgdGhhdCBDS0ZMT0FUIGlzIGRlZmluZWQhICovCi0KLSAgICBleHRlcm4g c3RydWN0IGtleXRhYiAqIHRlcm1fZm9udDsKLSAgICBleHRlcm4gc3RydWN0IGtleXRhYiAqIF90 ZXJtX2ZvbnQ7Ci0gICAgZXh0ZXJuIGludCB0dF9mb250LCB0dF9mb250X3NpemUsIG50ZXJtZm9u dDsKLSAgICBpbnQgeCwgeSwgejsKLSAgICBjaGFyICpzOwotCi0gICAgaWYgKG50ZXJtZm9udCA9 PSAwKQotICAgICAgQnVpbGRGb250VGFibGUoJnRlcm1fZm9udCwgJl90ZXJtX2ZvbnQsICZudGVy bWZvbnQpOwotICAgIGlmICghKHRlcm1fZm9udCAmJiBfdGVybV9mb250ICYmIG50ZXJtZm9udCA+ IDApKSB7Ci0gICAgICAgIHByaW50ZigiP0ludGVybmFsIGVycm9yOiBGYWlsdXJlIHRvIGVudW1l cmF0ZSBmb250c1xuIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGlmICgoeCA9 IGNta2V5KF90ZXJtX2ZvbnQsbnRlcm1mb250LCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAg cmV0dXJuKHgpOwotICAgIGlmICgoeiA9IGNtZmxkKCJIZWlnaHQgb2YgZm9udCBpbiBwb2ludHMi LCIxMiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oeik7Ci0gICAgaWYgKGlzZmxv YXQocywwKSA8IDEpIHsJCS8qIChzZXRzIGZsb2F0dmFsKSAqLwotCXByaW50ZigiP0ludGVnZXIg b3IgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHJlcXVpcmVkXG4iKTsKLQlyZXR1cm4oLTkpOwotICAg IH0KLSAgICBpZiAoZmxvYXR2YWwgPCAwLjUpIHsKLQlwcmludGYoIj9Qb3NpdGl2ZSBudW1iZXIg cmVxdWlyZWRcbiIpOwotCXJldHVybigtOSk7Ci0gICAgfQotICAgIGlmICgoeiA9IGNtY2ZtKCkp IDwgMCkKLSAgICAgIHJldHVybih6KTsKLSAgICB0dF9mb250ID0geDsJCQkvKiBGb250IGluZGV4 ICovCi0gICAgdHRfZm9udF9zaXplID0gKGludCkoZmxvYXR2YWwgKiAyKTsJLyogRm9udCBzaXpl IGluIGhhbGYgcG9pbnRzICovCi0gICAgS3VpU2V0UHJvcGVydHkoS1VJX1RFUk1fRk9OVCwgKGxv bmcpdHRfZm9udCwgKGxvbmcpdHRfZm9udF9zaXplKTsKLSAgICByZXR1cm4oc3VjY2VzcyA9IDEp OwotfQotCi1WT0lECi1zZXRndWlkaWFsb2coeCkgaW50IHg7Ci17Ci0gICAgZXh0ZXJuIGludCBn dWlfZGlhbG9nOwotICAgIGd1aV9kaWFsb2cgPSB4OwotICAgIEt1aVNldFByb3BlcnR5KEtVSV9H VUlfRElBTE9HUywgKGxvbmcpeCwgMEwpOwotfQotCi1WT0lECi1zZXRndWltZW51YmFyKHgpIGlu dCB4OwotewotICAgIEt1aVNldFByb3BlcnR5KEtVSV9HVUlfTUVOVUJBUiwgKGxvbmcpeCwgMEwp OwotfQotCi1WT0lECi1zZXRndWl0b29sYmFyKHgpIGludCB4OwotewotICAgIEt1aVNldFByb3Bl cnR5KEtVSV9HVUlfVE9PTEJBUiwgKGxvbmcpeCwgMEwpOwotfQotCi1WT0lECi1zZXRndWljbG9z ZSh4KSBpbnQgeDsKLXsKLSAgICBLdWlTZXRQcm9wZXJ0eShLVUlfR1VJX0NMT1NFLCAobG9uZyl4 LCAwTCk7Ci19Ci0KLWludAotc2V0Z3VpKCkgewotICAgIGludCBjeCwgeCwgcmM7Ci0gICAgaWYg KChjeCA9IGNta2V5KGd1aXRhYixuZ3VpdGFiLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAg cmV0dXJuKGN4KTsKLSAgICBzd2l0Y2ggKGN4KSB7Ci0gICAgICBjYXNlIEdVSV9ESUE6Ci0gICAg ICAgIHJjID0gc2V0b24oJngpOwotICAgICAgICBpZiAocmMgPj0gMCkKLSAgICAgICAgICBzZXRn dWlkaWFsb2coeCk7Ci0gICAgICAgIHJldHVybihyYyk7Ci0gICAgICBjYXNlIEdVSV9GT046Ci0g ICAgICAgIHJldHVybihzZXRndWlmb250KCkpOwotICAgICAgY2FzZSBHVUlfUkdCOgotICAgICAg ICByZXR1cm4oc2V0cmdiKCkpOwotICAgICAgY2FzZSBHVUlfV0lOOgotICAgICAgICByZXR1cm4o c2V0Z3Vpd2luKCkpOwotICAgICAgY2FzZSBHVUlfVExCOgotICAgICAgICByYyA9IHNldG9uKCZ4 KTsKLSAgICAgICAgaWYgKHJjID49IDApCi0gICAgICAgICAgc2V0Z3VpdG9vbGJhcih4KTsKLSAg ICAgICAgcmV0dXJuKHJjKTsKLSAgICAgIGNhc2UgR1VJX01OQjoKLSAgICAgICAgcmMgPSBzZXRv bigmeCk7Ci0gICAgICAgIGlmIChyYyA+PSAwKQotICAgICAgICAgIHNldGd1aW1lbnViYXIoeCk7 Ci0gICAgICAgIHJldHVybihyYyk7Ci0gICAgICBjYXNlIEdVSV9DTFM6Ci0gICAgICAgIHJjID0g c2V0b24oJngpOwotICAgICAgICBpZiAocmMgPj0gMCkKLSAgICAgICAgICBzZXRndWljbG9zZSh4 KTsKLSAgICAgICAgcmV0dXJuKHJjKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybigt Mik7Ci0gICAgfQotfQotI2VuZGlmIC8qIEtVSSAqLwotCi1WT0lECi1zZXRleGl0d2Fybih4KSBp bnQgeDsgCi17Ci0gICAgeGl0d2FybiA9IHg7Ci0jaWZkZWYgS1VJCi0gICAgS3VpU2V0UHJvcGVy dHkoS1VJX0VYSVRfV0FSTklORywgKGxvbmcpeCwgMEwpOwotI2VuZGlmIC8qIEtVSSAqLwotfQot Ci0jaWZuZGVmIE5PTE9DQUwKLVZPSUQKLXNldGRlYnNlcyh4KSBpbnQgeDsgewotI2lmZGVmIE9T MgotICAgIGlmICgoZGVic2VzICE9IDApICYmICh4ID09IDApKQkvKiBJdCB3YXMgb24gYW5kIHdl IHR1cm5lZCBpdCBvZmY/ICovCi0gICAgICBvczJkZWJ1Z29mZigpOwkJCS8qIEZpeCBPUy8yIGNv bG9yYXRpb24gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBkZWJzZXMgPSB4OwotI2lmZGVmIEtV SQotICAgIEt1aVNldFByb3BlcnR5KEtVSV9URVJNX0RFQlVHLHgsMCk7Ci0jZW5kaWYgLyogS1VJ ICovCi19Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0vKiAgRCBPIFAgUiBNICAtLSAgU2V0IGEg cGFyYW1ldGVyLiAgKi8KLS8qCi0gUmV0dXJuczoKLSAgLTI6IGlsbGVnYWwgaW5wdXQKLSAgLTE6 IHJlcGFyc2UgbmVlZGVkCi0gICAwOiBzdWNjZXNzCi0qLwotaW50Ci1kb3BybSh4eCxybXNmbGcp IGludCB4eCwgcm1zZmxnOyB7Ci0gICAgaW50IGkgPSAwLCB4ID0gMCwgeSA9IDAsIHogPSAwOwot ICAgIGxvbmcgenogPSAwTDsKLSAgICBjaGFyICpzID0gTlVMTCwgKnAgPSBOVUxMOwotI2lmZGVm IE9TMgotICAgIGNoYXIgcG9ydGJ1Zls2NF07Ci0gICAgbG9uZyBwb3J0c3BlZWQgPSAwTDsKLSAg ICBpbnQgcG9ydHBhcml0eSA9IDA7Ci0gICAgaW50IHBvcnRmbG93ID0gMDsKLSNlbmRpZiAvKiBP UzIgKi8KLQotI2lmbmRlZiBOT1NFVEtFWQotI2lmZGVmIE9TMgotICAgIGlmICh4eCA9PSBYWU1T SykKLSAgICAgIHJldHVybihzZXRtc2soKSk7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyog Tk9TRVRLRVkgKi8KLQotICAgIGlmICh4eCA9PSBYWUZMQUcpIHsgICAgICAgICAgICAgICAgIC8q IFNFVCBGTEFHICovCi0gICAgICAgIGV4dGVybiBpbnQgb29mbGFnOwotICAgICAgICByZXR1cm4o c3VjY2VzcyA9IHNldG9uKCZvb2ZsYWcpKTsKLSAgICB9Ci0gICAgaWYgKHh4ID09IFhZUFJUUiAg ICAgICAgICAgICAgICAgICAgLyogU0VUIFBSSU5URVIgKG9yIEJQUklOVEVSKSAqLwotI2lmZGVm IEJQUklOVAotICAgICAgICB8fCB4eCA9PSBYWUJEQ1AKLSNlbmRpZiAvKiBCUFJJTlQgKi8KLSAg ICAgICAgKQotICAgICAgcmV0dXJuKHNldHByaW50ZXIoeHgpKTsKLQotICAgIHN3aXRjaCAoeHgp IHsKLQotI2lmZGVmIEFOWVgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBYMjUg Li4uICovCi1jYXNlIFhZWDI1OgotICAgICAgICByZXR1cm4oc2V0eDI1KCkpOwotCi0jaWZuZGVm IElCTVgyNQotY2FzZSBYWVBBRDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBQ QUQgLi4uICovCi0gICAgICAgIHJldHVybihzZXRwYWRwKCkpOwotI2VuZGlmIC8qIElCTVgyNSAq LwotI2VuZGlmIC8qIEFOWVgyNSAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgICAgY2FzZSBYWUVP TDogICAgICAgLyogVGhlc2UgaGF2ZSBhbGwgYmVlbiBtb3ZlZCB0byBzZXQgc2VuZC9yZWNlaXZl Li4uICovCi0gICAgICBjYXNlIFhZTEVOOiAgICAgICAvKiBMZXQgdGhlIHVzZXIga25vdyB3aGF0 IHRvIGRvLiAqLwotICAgICAgY2FzZSBYWU1BUks6Ci0gICAgICBjYXNlIFhZTlBBRDoKLSAgICAg IGNhc2UgWFlQQURDOgotICAgICAgY2FzZSBYWVRJTU86Ci0gICAgICAgIHByaW50ZigiLi4uVXNl IFNFVCBTRU5EIG9yIFNFVCBSRUNFSVZFIGluc3RlYWQuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJU eXBlIEhFTFAgU0VUIFNFTkQgb3IgSEVMUCBTRVQgUkVDRUlWRSBmb3IgbW9yZSBpbmZvLlxuIik7 Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0KLSAgICAgIGNhc2UgWFlBVFRSOiAgICAg ICAgICAgICAgICAgICAgICAvKiBGaWxlIEF0dHJpYnV0ZSBwYWNrZXRzICovCi0gICAgICAgIHJl dHVybihzZXRhdChybXNmbGcpKTsKLQotICAgICAgY2FzZSBYWUlGRDogICAgICAgICAgICAgICAg ICAgICAgIC8qIEluY29tcGxldGUgZmlsZSBkaXNwb3NpdGlvbiAqLwotICAgICAgICBpZiAoKHkg PSBjbWtleShpZmRhdGFiLDMsIiIsImF1dG8iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0g ICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBpZiAocm1z ZmxnKSB7Ci0gICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICIzMTAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPT0gMCA/ ICIwIiA6ICh5ID09IDEgPyAiMSIgOiAiMiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybigo aW50KSBzc3RhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAga2VlcCA9IHk7Ci0g ICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9Y RkVSICovCi0KLSAgICAgIGNhc2UgWFlNQVRDSDoJCQkvKiBbIFJFTU9URSBdIFNFVCBNQVRDSC4u LiAgKi8KLSNpZm5kZWYgTk9YRkVSCi0JaWYgKCh6ID0gY21rZXkobWF0Y2h0YWIsbm1hdGNodGFi LCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHopOwotCWlmIChybXNmbGcpIHsKLSAg ICAgICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkg cmV0dXJuKHkpOwotCSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLQkgICAg c3dpdGNoICh6KSB7Ci0JICAgICAgY2FzZSBNQ0hfRE9URjoKLQkJcmV0dXJuKHNzdGF0ZSA9IHNl dGdlbignUycsIjMzMCIsIHkgPT0gMCA/ICIwIiA6ICIxIiwgIiIpKTsKLQkgICAgICBjYXNlIE1D SF9GSUZPOgotCQlyZXR1cm4oc3N0YXRlID0gc2V0Z2VuKCdTJywiMzMxIiwgeSA9PSAwID8gIjAi IDogIjEiLCAiIikpOwotCSAgICAgIGRlZmF1bHQ6Ci0JCXJldHVybigtMik7Ci0JICAgICAgfQot CSAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCSAgc3dpdGNoICh6KSB7Ci0JICAgIGNhc2UgTUNI X0ZJRk86Ci0JICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmbWF0Y2hmaWZvKSk7Ci0JICAg IGNhc2UgTUNIX0RPVEY6Ci0JICAgICAgeCA9IHNldG9uKCZtYXRjaGRvdCk7IAotCSAgICAgIGlm ICh4IDwgMCkgcmV0dXJuKHgpOwotCSAgICAgIGRpcl9kb3RzID0gLTE7Ci0JICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSB4KTsKLQkgICAgZGVmYXVsdDoKLQkgICAgICByZXR1cm4oLTIpOwotCSAgfQot Ci0jaWZuZGVmIE5PU1BMCi0gICAgICBjYXNlIFhZSU5QVTogICAgICAgICAgICAgICAgICAgICAg LyogU0VUIElOUFVUICovCi0gICAgICAgIHJldHVybihzZXRpbnAoKSk7Ci0jZW5kaWYgLyogTk9T UEwgKi8KLQotI2lmZGVmIE5FVENPTk4KLSAgICAgIGNhc2UgWFlORVQ6IHsgICAgICAgICAgICAg ICAgICAgICAvKiBTRVQgTkVUV09SSyAqLwotCi0gICAgICAgICAgc3RydWN0IEZEQiBrMSwgazI7 Ci0KLSAgICAgICAgICBjbWZkYmkoJmsxLF9DTUtFWSwiIiwiIiwiIixubmV0a2V5LCAwLCB4eHN0 cmluZywgbmV0a2V5LCAmazIpOwotICAgICAgICAgIGNtZmRiaSgmazIsX0NNS0VZLCIiLCIiLCIi LG5uZXRzLCAgIDAsIHh4c3RyaW5nLCBuZXRjbWQsIE5VTEwpOwotCi0jaWZkZWYgT1MyICAgICAv KiBIaWRlIG5ldHdvcmstdHlwZSBrZXl3b3JkcyBmb3IgbmV0d29ya3Mgbm90IGluc3RhbGxlZCAq LwotICAgICAgICAgIGZvciAoeiA9IDA7IHogPCBubmV0czsgeisrKSB7Ci0gICAgICAgICAgICAg IGlmIChuZXRjbWRbel0ua3d2YWwgPT0gTkVUX1RDUEIgJiYgdGNwX2F2YWlsID09IDApCi0gICAg ICAgICAgICAgICAgbmV0Y21kW3pdLmZsZ3MgPSAgQ01fSU5WOwotI2lmZGVmIFNTSEJVSUxUSU4K LSAgICAgICAgICAgICAgaWYgKG5ldGNtZFt6XS5rd3ZhbCA9PSBORVRfU1NIICYmCi0gICAgICAg ICAgICAgICAgICAgIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSkKLSAgICAgICAgICAgICAgICBu ZXRjbWRbel0uZmxncyA9ICBDTV9JTlY7Ci0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVm IERFQ05FVAotICAgICAgICAgICAgICBlbHNlIGlmIChuZXRjbWRbel0ua3d2YWwgPT0gTkVUX0RF QyAgJiYgZG5ldF9hdmFpbCA9PSAwKQotICAgICAgICAgICAgICAgIG5ldGNtZFt6XS5mbGdzID0g IENNX0lOVjsKLSNlbmRpZiAvKiBERUNORVQgKi8KLSNpZmRlZiBDS19ORVRCSU9TCi0gICAgICAg ICAgICAgIGVsc2UgaWYgKG5ldGNtZFt6XS5rd3ZhbCA9PSBORVRfQklPUyAmJiBuZXRiaW9zQXZh aWwgPT0gMCkKLSAgICAgICAgICAgICAgICBuZXRjbWRbel0uZmxncyA9ICBDTV9JTlY7Ci0jZW5k aWYgLyogQ0tfTkVUQklPUyAqLwotI2lmZGVmIFNVUEVSTEFUCi0gICAgICAgICAgICAgIGVsc2Ug aWYgKG5ldGNtZFt6XS5rd3ZhbCA9PSBORVRfU0xBVCAgJiYgc2xhdF9hdmFpbCA9PSAwKQotICAg ICAgICAgICAgICAgIG5ldGNtZFt6XS5mbGdzID0gIENNX0lOVjsKLSNlbmRpZiAvKiBTVVBFUkxB VCAqLwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAodGNwX2F2YWlsKSAgICAgICAgICAgICAg ICAvKiBEZWZhdWx0IG5ldHdvcmsgdHlwZSAqLwotICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1 ZiwidGNwL2lwIixUTVBCVUZTSVopOwotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICAgICAgICBlbHNl IGlmICggY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICkKLSAgICAgICAgICAgIGNrc3RybmNweSh0 bXBidWYsInNzaCIsVE1QQlVGU0laKTsKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZkZWYg REVDTkVUCi0gICAgICAgICAgZWxzZSBpZiAoZG5ldF9hdmFpbCkKLSAgICAgICAgICAgIGNrc3Ry bmNweSh0bXBidWYsImRlY25ldCIsVE1QQlVGU0laKTsKLSNlbmRpZiAvKiBERUNORVQgKi8KLSNp ZmRlZiBTVVBFUkxBVAotICAgICAgICAgIGVsc2UgaWYgKHNsYXRfYXZhaWwpCi0gICAgICAgICAg ICBja3N0cm5jcHkodG1wYnVmLCJzdXBlcmxhdCIsVE1QQlVGU0laKTsKLSNlbmRpZiAvKiBTVVBF UkxBVCAqLwotI2lmZGVmIENLX05FVEJJT1MKLSAgICAgICAgICBlbHNlIGlmIChuZXRiaW9zQXZh aWwpCi0gICAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLCJuZXRiaW9zIixUTVBCVUZTSVopOwot I2VuZGlmIC8qIENLX05FVEJJT1MgKi8KLSAgICAgICAgICBlbHNlIGNrc3RybmNweSh0bXBidWYs Im5hbWVkLXBpcGUiLFRNUEJVRlNJWik7Ci0jZWxzZSAgLyogT1MyICovCi0jaWZkZWYgVENQU09D S0VUCi0gICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZiwidGNwL2lwIixUTVBCVUZTSVopOwotI2Vs c2UKLSNpZmRlZiBBTllYMjUKLSAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLCJ4LjI1IixUTVBC VUZTSVopOwotI2Vsc2UKLSAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLCIiLFRNUEJVRlNJWik7 Ci0jZW5kaWYgLyogQU5ZWDI1ICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyog T1MyICovCi0KLSAgICAgICAgICB4ID0gY21mZGIoJmsxKTsKLSAgICAgICAgICBpZiAoeCA8IDAp IHsgICAgICAgICAgICAgICAgICAvKiBFcnJvciAqLwotICAgICAgICAgICAgICBpZiAoeCA9PSAt MiB8fCB4ID09IC05KQotICAgICAgICAgICAgICAgIHByaW50ZigiP05vIGtleXdvcmRzIG1hdGNo OiBcIiVzXCJcbiIsYXRtYnVmKTsKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAg IH0KLSAgICAgICAgICB6ID0gY21yZXN1bHQubnJlc3VsdDsgICAgICAgICAvKiBLZXl3b3JkIHZh bHVlICovCi0gICAgICAgICAgaWYgKGNtcmVzdWx0LmZkYmFkZHIgPT0gJmsxKSB7IC8qIFdoaWNo IHRhYmxlPyAqLwotI2lmbmRlZiBOT1NQTAotI2lmbmRlZiBOT0RJQUwKLSAgICAgICAgICAgICAg aWYgKHogPT0gWFlORVRfRCkKLSAgICAgICAgICAgICAgICByZXR1cm4ocGFyc2RpcigxKSk7Ci0j ZW5kaWYgLyogTk9ESUFMICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgICAgICAgaWYg KCh6ID0gY21rZXkobmV0Y21kLG5uZXRzLCIiLHRtcGJ1Zix4eHN0cmluZykpIDwgMCkKLSAgICAg ICAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgICAgfQotCi0jaWZkZWYgTkVUQ01ECi0gICAg ICAgICAgaWYgKHogPT0gTkVUX0NNRCAmJiBub3B1c2gpIHsKLSAgICAgICAgICAgICAgcHJpbnRm KCJcbj9Tb3JyeSwgYWNjZXNzIHRvIGV4dGVybmFsIGNvbW1hbmRzIGlzIGRpc2FibGVkXG4iKTsK LSAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogTkVUQ01E ICovCi0KLSNpZm5kZWYgTk9QVVNICi0jaWZkZWYgTkVUUFRZCi0gICAgICAgICAgaWYgKHogPT0g TkVUX1BUWSAmJiBub3B1c2gpIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCJcbj9Tb3JyeSwgYWNj ZXNzIHRvIGV4dGVybmFsIGNvbW1hbmRzIGlzIGRpc2FibGVkXG4iKTsKLSAgICAgICAgICAgICAg cmV0dXJuKC05KTsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogTkVUUFRZICovCi0jZW5kaWYgLyog Tk9QVVNIICovCi0KLSNpZmRlZiBPUzIKLSAgICAgICAgICBpZiAoeiA9PSBORVRfVENQQiAmJiB0 Y3BfYXZhaWwgPT0gMCkgewotICAgICAgICAgICAgICBwcmludGYoCi0iXG4/U29ycnksIGVpdGhl ciBUQ1AvSVAgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbSBvclxuXAotbmVjZXNzYXJ5 IERMTHMgZGlkIG5vdCBsb2FkLiAgVXNlIFNIT1cgTkVUV09SSyB0byBjaGVjayBuZXR3b3JrIHN0 YXR1cy5cbiIpOwotICAgICAgICAgICAgICByZXR1cm4oLTkpOwotI2lmZGVmIFNTSEJVSUxUSU4K LSAgICAgICAgICB9IGVsc2UgaWYgKHogPT0gTkVUX1NTSCAmJiAhY2tfc3NsZWF5X2lzX2luc3Rh bGxlZCgpKSB7Ci0gICAgICAgICAgICBwcmludGYoIlxuP1NvcnJ5LCBTU0ggaXMgbm90IGF2YWls YWJsZSBvbiB0aGlzIHN5c3RlbS5cbiIpIDsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0jZW5k aWYgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVmIENLX05FVEJJT1MKLSAgICAgICAgICB9IGVsc2Ug aWYgKHogPT0gTkVUX0JJT1MgJiYgbmV0Ymlvc0F2YWlsID09IDApIHsKLSAgICAgICAgICAgICAg cHJpbnRmKCJcbj9Tb3JyeSwgTkVUQklPUyBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVt LlxuIikgOwotICAgICAgICAgICAgICByZXR1cm4oLTkpOwotI2VuZGlmIC8qIENLX05FVEJJT1Mg Ki8KLSNpZmRlZiBERUNORVQKLSAgICAgICAgICB9IGVsc2UgaWYgKHogPT0gTkVUX0RFQyAmJiBk bmV0X2F2YWlsID09IDApIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCJcbj9Tb3JyeSwgREVDbmV0 IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0uXG4iKSA7Ci0gICAgICAgICAgICAgIHJl dHVybigtOSk7Ci0jZW5kaWYgLyogREVDTkVUICovCi0jaWZkZWYgU1VQRVJMQVQKLSAgICAgICAg ICB9IGVsc2UgaWYgKHogPT0gTkVUX1NMQVQgJiYgc2xhdF9hdmFpbCA9PSAwKSB7Ci0gICAgICAg ICAgICAgIHByaW50ZigiXG4/U29ycnksIFN1cGVyTEFUIGlzIG5vdCBhdmFpbGFibGUgb24gdGhp cyBzeXN0ZW0uXG4iKSA7Ci0gICAgICAgICAgICAgIHJldHVybigtOSk7Ci0jZW5kaWYgLyogU1VQ RVJMQVQgKi8KLSAgICAgICAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBOUElQRU9S QklPUwotICAgICAgICAgIGlmICh6ID09IE5FVF9QSVBFIHx8ICAgICAgICAgIC8qIE5hbWVkIHBp cGUgLS0gYWxzbyBnZXQgcGlwZW5hbWUgKi8KLSAgICAgICAgICAgICAgeiA9PSBORVRfQklPUykg eyAgICAgICAgICAvKiBORVRCSU9TIC0tIGFsc28gZ2V0IGxvY2FsIG5hbWUgKi8KLSAgICAgICAg ICAgICAgY2hhciAqZGVmbmFtOwotI2lmZGVmIENLX05FVEJJT1MKLSAgICAgICAgICAgICAgY2hh ciB0bXBuYm5hbVtORVRCSU9TX05BTUVfTEVOKzFdOwotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8K LSAgICAgICAgICAgICAgLyogQ29uc3RydWN0IGRlZmF1bHQgbmFtZSAgKi8KLSAgICAgICAgICAg ICAgaWYgKHogPT0gTkVUX1BJUEUpIHsgICAgICAvKiBOYW1lZCBwaXBlICovCi0gICAgICAgICAg ICAgICAgICBkZWZuYW0gPSAia2VybWl0IjsgICAgLyogRGVmYXVsdCBuYW1lIGlzIGFsd2F5cyAi a2VybWl0IiAqLwotICAgICAgICAgICAgICB9IAotI2lmZGVmIENLX05FVEJJT1MKLQkgICAgICBl bHNlIHsJCQkvKiBOZXRCSU9TICovCi0gICAgICAgICAgICAgICAgICBpZiAoTmV0Qmlvc05hbWVb MF0gIT0gU1ApIHsgLyogSWYgdGhlcmUgaXMgYWxyZWFkeSBhIG5hbWUsICovCi0gICAgICAgICAg ICAgICAgICAgICAgY2hhciAqcCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgaW50IG47 ICAgICAgICAgICAgLyogdXNlIGl0IGFzIHRoZSBkZWZhdWx0LiAqLwotICAgICAgICAgICAgICAg ICAgICAgIGNrc3RybmNweSh0bXBuYm5hbSxOZXRCaW9zTmFtZSxORVRCSU9TX05BTUVfTEVOKzEp OwotICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnZlcnQgdHJhaWxpbmcgc3BhY2VzIHRvIE5V THMgKi8KLSAgICAgICAgICAgICAgICAgICAgICBwID0gJnRtcG5ibmFtW05FVEJJT1NfTkFNRV9M RU4tMV07Ci0gICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpwID09IFNQKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICpwID0gTlVMOwotICAgICAgICAgICAgICAgICAgICAgICAgICBw LS07Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIGRlZm5h bSA9IHRtcG5ibmFtOwotICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgqbXlob3N0KSAgIC8q IE90aGVyd2lzZSB1c2UgdGhpcyBQQydzIGhvc3QgbmFtZSAqLwotICAgICAgICAgICAgICAgICAg ICBkZWZuYW0gPSAoY2hhciAqKSBteWhvc3Q7Ci0gICAgICAgICAgICAgICAgICBlbHNlICAgICAg ICAgICAgICAgICAgLyogT3RoZXJ3aXNlIHVzZSAia2VybWl0IiAqLwotICAgICAgICAgICAgICAg ICAgICBkZWZuYW0gPSAia2VybWl0IjsKLSAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX05F VEJJT1MgKi8KLSAgICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoKHogPT0gTkVUX1BJUEUpID8g Im5hbWUgb2YgbmFtZWQtcGlwZSIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9j YWwgTkVUQklPUyBuYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbmFtLCAm cywgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotI2lmZGVmIE5Q SVBFCi0gICAgICAgICAgICAgIHBpcGVuYW1lWzBdID0gTlVMOwotI2VuZGlmIC8qIE5QSVBFICov Ci0gICAgICAgICAgICAgIGlmICgoeSA9IChpbnQpIHN0cmxlbihzKSkgPCAxKSB7Ci0gICAgICAg ICAgICAgICAgICBwcmludGYoIj9Zb3UgbXVzdCBhbHNvIHNwZWNpZnkgYSAlcyBuYW1lXG4iLAot ICAgICAgICAgICAgICAgICAgICAgICAgICh6ID09IE5FVF9QSVBFKSA/ICJwaXBlIiA6ICJsb2Nh bCBORVRCSU9TIiApOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAg ICAgfQotI2lmZGVmIENLX05FVEJJT1MKLSAgICAgICAgICAgICAgaWYgKHogPT0gTkVUX0JJT1Mp IHsKLSAgICAgICAgICAgICAgICAgIGlmICghbmV0Ymlvc0F2YWlsKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/TkVUQklPUyBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVt LlxuIikgOwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICBpZiAoeSAtIE5FVEJJT1NfTkFNRV9MRU4gPiAwKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/TkVUQklPUyBuYW1lIHRvbyBsb25nLCAl bGQgbWF4aW11bVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUQklPU19OQU1F X0xFTik7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoICFzdHJjbXAocyx0bXBuYm5hbSkgKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgbmV0dHlwZSA9IHo7ICAgICAgLyogUmV0dXJuaW5nIHRvIG9sZCBjb25uZWN0aW9uLi4u ICovCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsgLyogRG9uZSAq LwotICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoIiAgICAgICAgICAgICAgICAi LE5ldEJpb3NOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP05FVEJJT1Mg bmFtZSBhbHJlYWR5IGFzc2lnbmVkIHRvIFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTmV0Qmlvc05hbWUpOwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7 Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIE5DQiBu Y2I7Ci0gICAgICAgICAgICAgICAgICAgICAgQVBJUkVUIHJjOwotICAgICAgICAgICAgICAgICAg ICAgIGNrc3RybmNweShOZXRCaW9zTmFtZSxzLDE2KTsKLSAgICAgICAgICAgICAgICAgICAgICBm b3IgKHggPSB5OyB4IDwgTkVUQklPU19OQU1FX0xFTjsgeCsrKQotICAgICAgICAgICAgICAgICAg ICAgICAgTmV0Qmlvc05hbWVbeF0gPSBTUDsKLSAgICAgICAgICAgICAgICAgICAgICBOZXRCaW9z TmFtZVtORVRCSU9TX05BTUVfTEVOXSA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIkNoZWNraW5nIFwiJXNcIiBhcyBhIHVuaXF1ZSBOZXRCSU9TIG5hbWUuLi5cbiIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5ldEJpb3NOYW1lKTsKLSAgICAgICAgICAgICAgICAg ICAgICByYyA9IE5DQkFkZE5hbWUoIE5ldGJldWlBUEksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZuY2IsIE5ldEJpb3NBZGFwdGVyLCBOZXRCaW9zTmFtZSApOwotICAg ICAgICAgICAgICAgICAgICAgIGlmIChyYykgewotICAgICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoCi0gICAgICAgICAgICAgICAgIj9Tb3JyeSwgXCIlc1wiIGlzIGFscmVhZHkgaW4gdXNl IGJ5IGFub3RoZXIgTmV0QklPUyBub2RlLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5ldEJpb3NOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh4ID0g MDsgeCA8IE5FVEJJT1NfTkFNRV9MRU47IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOZXRCaW9zTmFtZVt4XSA9IFNQOwotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4o LTkpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgfQotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KLSNpZmRlZiBOUElQRQotICAgICAg ICAgICAgICBpZiAoeiA9PSBORVRfUElQRSkKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkocGlw ZW5hbWUscyxQSVBFTkFNTCk7Ci0jZW5kaWYgLyogTlBJUEUgKi8KLSAgICAgICAgICB9IGVsc2UK LSNlbmRpZiAvKiBOUElQRU9SQklPUyAqLwotI2lmZGVmIERFQ05FVAotICAgICAgICAgICAgaWYg KHogPT0gTkVUX0RFQykgewotICAgICAgICAgICAgICAgIC8qIERldGVybWluZSBpZiB3ZSBhcmUg dXNpbmcgTEFUIG9yIENURVJNICovCi0gICAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoZG5l dHRhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZG5ldCwiREVDTkVUIHByb3Rv Y29sIiwibGF0Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih5KTsK LSAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAg ICAgICAgICAgICB0dG5wcm90byA9IHk7Ci0gICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBE RUNORVQgKi8KLSNpZmRlZiBORVRETEwKLSAgICAgICAgICAgICAgaWYgKHogPT0gTkVUX0RMTCkg ewotICAgICAgICAgICAgICAgICAgLyogRmluZCBvdXQgd2hpY2ggRExMIHRoZXkgYXJlIHVzaW5n ICovCi0gICAgICAgICAgICAgICAgICBjaGFyIGRsbG5hbWVbMjU2XT0iIjsKLSAgICAgICAgICAg ICAgICAgIGNoYXIgKiBwPU5VTEw7Ci0gICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWlmaSgi RHluYW1pYyBsb2FkIGxpYnJhcnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IiIsJnAsJnkseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9 PSAtMykgewotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9OYW1lIG9mIERMTCBy ZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGNrc3RybmNweShkbGxuYW1lLHAs MjU2KTsKLSAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgp OwotCi0gICAgICAgICAgICAgICAgICBpZiAobmV0ZGxsX2xvYWQoZGxsbmFtZSkgPCAwKSAvKiBU cnkgdG8gbG9hZCB0aGUgZGxsICovCi0gICAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMCk7Ci0gICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICBu ZXR0eXBlID0gejsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwot ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBORVRE TEwgKi8KLSAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsK LSAgICAgICAgICBuZXR0eXBlID0gejsKLSAgICAgICAgICBpZiAoCi0jaWZkZWYgREVDTkVUCi0g ICAgICAgICAgICAgIChuZXR0eXBlICE9IE5FVF9ERUMpICAmJgotI2VuZGlmIC8qIERFQ05FVCAq LwotI2lmZGVmIE5QSVBFCi0gICAgICAgICAgICAgIChuZXR0eXBlICE9IE5FVF9QSVBFKSAmJgot I2VuZGlmIC8qIE5QSVBFICovCi0jaWZkZWYgQ0tfTkVUQklPUwotICAgICAgICAgICAgICAobmV0 dHlwZSAhPSBORVRfQklPUykgJiYKLSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0jaWZkZWYgTkVU RklMRQotICAgICAgICAgICAgICAobmV0dHlwZSAhPSBORVRfRklMRSkgJiYKLSNlbmRpZiAvKiBO RVRGSUxFICovCi0jaWZkZWYgTkVUQ01ECi0gICAgICAgICAgICAgIChuZXR0eXBlICE9IE5FVF9D TUQpICYmCi0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgICAgICAgICAg IChuZXR0eXBlICE9IE5FVF9QVFkpICYmCi0jZW5kaWYgLyogTkVUUFRZICovCi0jaWZkZWYgTkVU RExMCi0gICAgICAgICAgICAgIChuZXR0eXBlICE9IE5FVF9ETEwpICYmCi0jZW5kaWYgLyogTkVU RExMICovCi0jaWZkZWYgU1VQRVJMQVQKLSAgICAgICAgICAgICAgKG5ldHR5cGUgIT0gTkVUX1NM QVQpICYmCi0jZW5kaWYgLyogU1VQRVJMQVQgKi8KLSAgICAgICAgICAgICAgKG5ldHR5cGUgIT0g TkVUX1NYMjUpICYmCi0gICAgICAgICAgICAgIChuZXR0eXBlICE9IE5FVF9WWDI1KSAmJgotI2lm ZGVmIElCTVgyNQotICAgICAgICAgICAgICAobmV0dHlwZSAhPSBORVRfSVgyNSkgJiYKLSNlbmRp ZiAvKiBJQk1YMjUgKi8KLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgICAgICAgICAgIChuZXR0eXBl ICE9IE5FVF9TU0gpICYmCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotICAgICAgICAgICAgICAo bmV0dHlwZSAhPSBORVRfVENQQikpIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCI/TmV0d29yayB0 eXBlIG5vdCBzdXBwb3J0ZWRcbiIpOwotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDAp OwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 Ci0gICAgICAgICAgfQotICAgICAgfQotCi0jaWZuZGVmIE5PVENQT1BUUwotI2lmZGVmIFRDUFNP Q0tFVAotICAgICAgY2FzZSBYWVRDUDogewotICAgICAgICBleHRlcm4gaW50IHR0eWZkOwotCi0g ICAgICAgIGlmICgoeiA9IGNta2V5KHRjcG9wdCxudGNwb3B0LCJUQ1Agb3B0aW9uIiwibm9kZWxh eSIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHopOwotCi0gICAgICAgIHN3aXRj aCAoeikgewotI2lmbmRlZiBOT0hUVFAKLSAgICAgICAgICBjYXNlIFhZVENQX0hUVFBfUFJPWFk6 IHsKLQkgICAgICBzdHJ1Y3QgRkRCIHN3LCB0eDsKLQkgICAgICBpbnQgbiwgeDsKLQkgICAgICBj aGFyIHVidWZbTE9HSU5MRU4rMV0sIHBidWZbTE9HSU5MRU4rMV0sIGFidWZbMjU2XTsKLQkgICAg ICB1YnVmWzBdID0gcGJ1ZlswXSA9IGFidWZbMF0gPSAwOwotCi0JICAgICAgY21mZGJpKCZzdywJ CS8qIEZpcnN0IEZEQiAtIHN3aXRjaGVzICovCi0JCSAgICAgX0NNS0VZLAkJLyogZmNvZGUgKi8K LQkJICAgICAiSFRUUCBwcm94eSBzZXJ2ZXIgaG9zdFs6cG9ydF0gb3Igc3dpdGNoIiwKLQkJICAg ICAiIiwJCS8qIGRlZmF1bHQgKi8KLQkJICAgICAiIiwJCS8qIGFkZHRsIHN0cmluZyBkYXRhICov Ci0JCSAgICAgbnVzZXJwYXNzLAkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICov Ci0JCSAgICAgNCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0JCSAg ICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0JCSAgICAgdXNlcnBhc3Ms CQkvKiBLZXl3b3JkIHRhYmxlICovCi0JCSAgICAgJnR4CQkvKiBQb2ludGVyIHRvIG5leHQgRkRC ICovCi0JCSAgICAgKTsKLQkgICAgICBjbWZkYmkoJnR4LAotCQkgICAgIF9DTVRYVCwJCS8qIGZj b2RlICovCi0JCSAgICAgIkhUVFAgcHJveHkgc2VydmVyIGhvc3RbOnBvcnRdIiwKLQkJICAgICAi IiwJCS8qIGRlZmF1bHQgKi8KLQkJICAgICAiIiwJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0J CSAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotCQkgICAgIDAsCQkJLyogYWRk dGwgbnVtZXJpYyBkYXRhIDIgKi8KLQkJICAgICB4eHN0cmluZywKLQkJICAgICBOVUxMLAotCQkg ICAgIE5VTEwKLQkJICAgICApOwotCSAgICAgIHdoaWxlICgxKSB7Ci0JCSAgaWYgKCh4ID0gY21m ZGIoJnN3KSkgPCAwKSB7Ci0JCSAgICAgIGlmICh4ID09IC0zKSB7Ci0JCQkgIHggPSAtOTsKLQkJ CSAgcHJpbnRmKCI/SG9zdG5hbWUgcmVxdWlyZWRcbiIpOwotCQkgICAgICB9Ci0JCSAgICAgIHJl dHVybih4KTsKLQkJICB9Ci0JCSAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkKLQkJICAg IGJyZWFrOwotCQkgIG4gPSBjbXJlc3VsdC5ucmVzdWx0OwotCQkgIHN3aXRjaCAobikgewotCQkg ICAgY2FzZSBVUFdfVVNFUjoKLQkJICAgIGNhc2UgVVBXX1BBU1M6Ci0JCSAgICBjYXNlIFVQV19B R0VOVDoKLQkJICAgICAgaWYgKCh4ID0gY21mbGQoKG4gPT0gVVBXX1VTRVIpID8KLQkJCQkgICAg ICJVc2VybmFtZSIgOgotCQkJCSAgICAgKChuID09IFVQV19QQVNTKSA/ICJQYXNzd29yZCIgOiAi QWdlbnQiKSwKLQkJCQkgICAgICIiLCAmcywgeHhzdHJpbmcpKSA8IDApIHsKLQkJCSAgaWYgKHgg IT0gLTMpCi0JCQkgICAgcmV0dXJuKHgpOwotCQkgICAgICB9Ci0JCSAgICAgIGNrc3RybmNweSgo biA9PSBVUFdfVVNFUikgPyB1YnVmIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICgobiA9PSBV UFdfUEFTUykgPyBwYnVmIDogYWJ1ZiksIHMsIAotICAgICAgICAgICAgICAgICAgICAgICAgKG4g PT0gVVBXX0FHRU5UKSA/IDI1NiA6IChMT0dJTkxFTisxKSk7Ci0JCSAgfQotCSAgICAgIH0KLQkg ICAgICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNVFhUKQotCQlyZXR1cm4oLTIpOwotCSAgICAg IHMgPSBjbXJlc3VsdC5zcmVzdWx0OwotCSAgICAgIGlmIChzKSBpZiAoISpzKSBzID0gTlVMTDsK LQotI2lmZGVmIElLU0RDT05GCi0JICAgICAgaWYgKGlrc2RjZikKLQkJcmV0dXJuKHN1Y2Nlc3Mg PSAwKTsKLSNlbmRpZiAvKiBJS1NEQ09ORiAqLwotCSAgICAgIG1ha2VzdHIoJnRjcF9odHRwX3By b3h5X3VzZXIsdWJ1ZlswXT91YnVmOk5VTEwpOwotCSAgICAgIG1ha2VzdHIoJnRjcF9odHRwX3By b3h5X3B3ZCxwYnVmWzBdP3BidWY6TlVMTCk7Ci0JICAgICAgbWFrZXN0cigmdGNwX2h0dHBfcHJv eHlfYWdlbnQsYWJ1ZlswXT9hYnVmOk5VTEwpOwotCSAgICAgIG1ha2VzdHIoJnRjcF9odHRwX3By b3h5LHMpOwotCSAgICAgIG1lbXNldChwYnVmLDAsc2l6ZW9mKHBidWYpKTsKLQkgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOwotCSAgfQotI2VuZGlmIC8qIE5PSFRUUCAqLwotLyoKLSAgSXQgd291 bGQgaGF2ZSBiZWVuIGVhc3kgdG8gY29tYmluZSBYWVRDUF9TT0NLU19TVlIgd2l0aCB0aGUgcHJl dmlvdXMKLSAgb25lIGV4Y2VwdCBmb3IgdGhlICNpZmRlZnMuLi4KLSovCi0jaWZkZWYgTlQKLSNp ZmRlZiBDS19TT0NLUwotICAgICAgICAgIGNhc2UgWFlUQ1BfU09DS1NfU1ZSOiB7Ci0JICAgICAg Y2hhciB1YnVmW0xPR0lOTEVOKzFdLCBwYnVmW0xPR0lOTEVOKzFdOwotCSAgICAgIGNoYXIgKiBw ID0gZ2V0ZW52KCJTT0NLU19TRVJWRVIiKTsKLQkgICAgICBzdHJ1Y3QgRkRCIHN3LCB0eDsKLQkg ICAgICBpbnQgbiwgeDsKLQotCSAgICAgIGlmICghcCkgcCA9ICIiOwotCi0JICAgICAgY21mZGJp KCZzdywJCS8qIEZpcnN0IEZEQiAtIHN3aXRjaGVzICovCi0JCSAgICAgX0NNS0VZLAkJLyogZmNv ZGUgKi8KLQkJICAgICAiU09DS1Mgc2VydmVyIGhvc3RbOnBvcnRdIG9yIHN3aXRjaCIsCi0JCSAg ICAgIiIsCQkvKiBkZWZhdWx0ICovCi0JCSAgICAgIiIsCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAq LwotCQkgICAgIG51c2VycGFzcywJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAq LwotCQkgICAgIDQsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotCQkg ICAgIHh4c3RyaW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotCQkgICAgIHVzZXJwYXNz LAkJLyogS2V5d29yZCB0YWJsZSAqLwotCQkgICAgICZ0eAkJLyogUG9pbnRlciB0byBuZXh0IEZE QiAqLwotCQkgICAgICk7Ci0JICAgICAgY21mZGJpKCZ0eCwKLQkJICAgICBfQ01UWFQsCQkvKiBm Y29kZSAqLwotCQkgICAgICJTT0NLUyBzZXJ2ZXIgaG9zdFs6cG9ydF0iLAotCQkgICAgIHAsCQkJ LyogZGVmYXVsdCAqLwotCQkgICAgICIiLAkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkJICAg ICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0JCSAgICAgMCwJCQkvKiBhZGR0bCBu dW1lcmljIGRhdGEgMiAqLwotCQkgICAgIHh4c3RyaW5nLAotCQkgICAgIE5VTEwsCi0JCSAgICAg TlVMTAotCQkgICAgICk7Ci0JICAgICAgd2hpbGUgKDEpIHsKLQkJICBpZiAoKHggPSBjbWZkYigm c3cpKSA8IDApIHsKLQkJICAgICAgaWYgKHggPT0gLTMpIHsKLQkJCSAgeCA9IC05OwotCQkJICBw cmludGYoIj9Ib3N0bmFtZSByZXF1aXJlZFxuIik7Ci0JCSAgICAgIH0KLQkJICAgICAgcmV0dXJu KHgpOwotCQkgIH0KLQkJICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKQotCQkgICAgYnJl YWs7Ci0JCSAgbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7Ci0JCSAgc3dpdGNoIChuKSB7Ci0JCSAgICBj YXNlIFVQV19VU0VSOgotCQkgICAgY2FzZSBVUFdfUEFTUzoKLQkJICAgICAgaWYgKCh4ID0gY21m bGQoKG4gPT0gVVBXX1VTRVIpID8gIlVzZXJuYW1lIiA6ICJQYXNzd29yZCIsCi0JCQkJICAgICAi IiwgJnMsIHh4c3RyaW5nKSkgPCAwKSB7Ci0JCQkgIGlmICh4ICE9IC0zKQotCQkJICAgIHJldHVy bih4KTsKLQkJICAgICAgfQotCQkgICAgICBja3N0cm5jcHkoKG4gPT0gVVBXX1VTRVIpID8gdWJ1 ZiA6IHBidWYsIHMsIExPR0lOTEVOKzEpOwotCQkgIH0KLQkgICAgICB9Ci0JICAgICAgaWYgKGNt cmVzdWx0LmZjb2RlICE9IF9DTVRYVCkKLQkJcmV0dXJuKC0yKTsKLQkgICAgICBzID0gY21yZXN1 bHQuc3Jlc3VsdDsKLQkgICAgICBpZiAocykgaWYgKCEqcykgcyA9IE5VTEw7Ci0KLSNpZmRlZiBJ S1NEQ09ORgotCSAgICAgIGlmIChpa3NkY2YpCi0JCXJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5k aWYgLyogSUtTRENPTkYgKi8KLQkgICAgICBtYWtlc3RyKCZ0Y3Bfc29ja3NfdXNlcix1YnVmKTsK LSAgICAgICAgICAgICAgbWVtc2V0KHBidWYsMCxzaXplb2YocGJ1ZikpOwotCSAgICAgIG1ha2Vz dHIoJnRjcF9zb2Nrc19zdnIscyk7Ci0JICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQkgIH0K LQotI2lmZGVmIENLX1NPQ0tTX05TCi0gICAgICAgICAgY2FzZSBYWVRDUF9TT0NLU19OUzogewot ICAgICAgICAgICAgY2hhciAqIHAgPSBnZXRlbnYoIlNPQ0tTX05TIik7Ci0gICAgICAgICAgICBp ZiAoIXApIHAgPSAiIjsKLSAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJob3N0bmFtZSBvciBJ UCBvZiBTT0NLUyBOYW1lIFNlcnZlciIscCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAm cyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0jaWZkZWYgSUtT RENPTkYKLSAgICAgICAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNl bmRpZiAvKiBJS1NEQ09ORiAqLwotICAgICAgICAgICAgICBpZiAodGNwX3NvY2tzX25zKSB7Ci0g ICAgICAgICAgICAgICAgICBmcmVlKHRjcF9zb2Nrc19ucyk7ICAgLyogRnJlZSBhbnkgcHJldmlv dXMgc3RvcmFnZSAqLwotICAgICAgICAgICAgICAgICAgdGNwX3NvY2tzX25zID0gTlVMTDsKLSAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAocyA9PSBOVUxMIHx8ICpzID09IE5VTCkg eyAvKiBJZiBub25lIGdpdmVuICovCi0gICAgICAgICAgICAgICAgICB0Y3Bfc29ja3NfbnMgPSBO VUxMOyAgLyogcmVtb3ZlIHRoZSBvdmVycmlkZSBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHRjcF9zb2Nr c19ucyA9IG1hbGxvYyhzdHJsZW4ocykrMSkpKSB7Ci0gICAgICAgICAgICAgICAgICBzdHJjcHko dGNwX3NvY2tzX25zLHMpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK LSAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU09DS1NfTlMgKi8KLSNlbmRpZiAvKiBDS19T T0NLUyAqLwotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgY2FzZSBYWVRDUF9BRERSRVNTOgot ICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoInByZWZlcnJlZCBJUCBBZGRyZXNzIGZvciBUQ1Ag Y29ubmVjdGlvbnMiLCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMseHhzdHJpbmcp KSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSNpZmRlZiBJS1NEQ09ORgotICAgICAg ICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBJS1NEQ09O RiAqLwotICAgICAgICAgICAgaWYgKHRjcF9hZGRyZXNzKSB7Ci0gICAgICAgICAgICAgICAgZnJl ZSh0Y3BfYWRkcmVzcyk7ICAgICAgLyogRnJlZSBhbnkgcHJldmlvdXMgc3RvcmFnZSAqLwotICAg ICAgICAgICAgICAgIHRjcF9hZGRyZXNzID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGlmIChzID09IE5VTEwgfHwgKnMgPT0gTlVMKSB7IC8qIElmIG5vbmUgZ2l2ZW4gKi8KLSAg ICAgICAgICAgICAgICB0Y3BfYWRkcmVzcyA9IE5VTEw7ICAgICAvKiByZW1vdmUgdGhlIG92ZXJy aWRlIHN0cmluZyAqLwotICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAg ICAgICAgICB9IGVsc2UgaWYgKCh0Y3BfYWRkcmVzcyA9IG1hbGxvYyhzdHJsZW4ocykrMSkpKSB7 Ci0gICAgICAgICAgICAgICAgc3RyY3B5KHRjcF9hZGRyZXNzLHMpOwotICAgICAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNpZmRlZiBTT19LRUVQQUxJVkUKLSAgICAgICAgICBjYXNl IFhZVENQX0tFRVBBTElWRToKLSAgICAgICAgICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIs Im9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHopOwotICAgICAgICAgICAgaWYgKCh5ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0jaWZkZWYgSUtTRENPTkYKLSAgICAgICAgICAgIGlmIChp a3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSNpZmRl ZiBTU0hCVUlMVElOCi0gICAgICAgICAgICBpZiAobmV0d29yayAmJiBuZXR0eXBlID09IE5FVF9T U0ggJiYgc3NoX3NvY2sgIT0gLTEpCi0gICAgICAgICAgICAgIHN1Y2Nlc3MgPSBrZWVwYWxpdmUo c3NoX3NvY2sseik7Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwot CSAgICAgIHN1Y2Nlc3MgPSBrZWVwYWxpdmUodHR5ZmQseik7Ci0gICAgICAgICAgICByZXR1cm4o c3VjY2Vzcyk7Ci0jZW5kaWYgLyogU09fS0VFUEFMSVZFICovCi0jaWZkZWYgU09fRE9OVFJPVVRF Ci0gICAgICAgICAgY2FzZSBYWVRDUF9ET05UUk9VVEU6Ci0gICAgICAgICAgICBpZiAoKHogPSBj bWtleShvbm9mZiwyLCIiLCJvZmYiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7Ci0gICAgICAg ICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSNpZmRlZiBJS1NEQ09ORgot ICAgICAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBJ S1NEQ09ORiAqLwotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICAgICAgICAgIGlmIChuZXR3b3JrICYm IG5ldHR5cGUgPT0gTkVUX1NTSCAmJiBzc2hfc29jayAhPSAtMSkKLSAgICAgICAgICAgICAgc3Vj Y2VzcyA9IGRvbnRyb3V0ZShzc2hfc29jayx6KTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAv KiBTU0hCVUlMVElOICovCi0JICAgICAgc3VjY2VzcyA9IGRvbnRyb3V0ZSh0dHlmZCx6KTsKLSAg ICAgICAgICAgIHJldHVybihzdWNjZXNzKTsKLSNlbmRpZiAvKiBTT19ET05UUk9VVEUgKi8KLSNp ZmRlZiBUQ1BfTk9ERUxBWQotICAgICAgICAgIGNhc2UgWFlUQ1BfTk9ERUxBWToKLSAgICAgICAg ICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIm9mZiIseHhzdHJpbmcpKSA8IDApIHJldHVy bih6KTsKLSAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotI2lm ZGVmIElLU0RDT05GCi0gICAgICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDAp OwotI2VuZGlmIC8qIElLU0RDT05GICovCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAgICAgICAg aWYgKG5ldHdvcmsgJiYgbmV0dHlwZSA9PSBORVRfU1NIICYmIHNzaF9zb2NrICE9IC0xKQotICAg ICAgICAgICAgICBzdWNjZXNzID0gbm9fZGVsYXkoc3NoX3NvY2sseik7Ci0gICAgICAgICAgICBl bHNlCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotCSAgICAgIHN1Y2Nlc3MgPSBub19kZWxheSh0 dHlmZCx6KTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzKTsKLSAgICAgICAgICBjYXNlIFhZ VENQX05BR0xFOiAgICAgICAgICAgICAvKiBUaGUgaW52ZXJzZSBvZiBOT0RFTEFZICovCi0gICAg ICAgICAgICBpZiAoKHogPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJl dHVybih6KTsKLSAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwot I2lmZGVmIElLU0RDT05GCi0gICAgICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9 IDApOwotI2VuZGlmIC8qIElLU0RDT05GICovCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAgICAg ICAgaWYgKG5ldHdvcmsgJiYgbmV0dHlwZSA9PSBORVRfU1NIICYmIHNzaF9zb2NrICE9IC0xKQot ICAgICAgICAgICAgICBzdWNjZXNzID0gbm9fZGVsYXkoc3NoX3NvY2sseik7Ci0gICAgICAgICAg ICBlbHNlCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotCSAgICAgIHN1Y2Nlc3MgPSBub19kZWxh eSh0dHlmZCwheik7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2Vzcyk7Ci0jZW5kaWYgLyogVENQ X05PREVMQVkgKi8KLSNpZmRlZiBTT19MSU5HRVIKLSAgICAgICAgICBjYXNlIFhZVENQX0xJTkdF UjoKLSAgICAgICAgICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykp IDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAgICAgaWYgKHopIHsgICAg ICAgICAgICAgICAgICAgIC8qIGlmIG9uLCB3ZSBuZWVkIGEgdGltZW91dCB2YWx1ZSAqLwotICAg ICAgICAgICAgICAgIGlmICgoeCA9IGNtbnVtKCJMaW5nZXIgdGltZW91dCBpbiAxMHRoIG9mIGEg bWlsbGlzZWNvbmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiwxMCwmeSx4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAg IH0gZWxzZQotICAgICAgICAgICAgICB5ID0gMDsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtY2Zt KCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotI2lmZGVmIElLU0RDT05GCi0gICAg ICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIElLU0RD T05GICovCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAgICAgICAgaWYgKG5ldHdvcmsgJiYgbmV0 dHlwZSA9PSBORVRfU1NIICYmIHNzaF9zb2NrICE9IC0xKQotICAgICAgICAgICAgICBzdWNjZXNz ID0gY2tfbGluZ2VyKHNzaF9zb2NrLHoseSk7Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyog U1NIQlVJTFRJTiAqLwotCSAgICAgIHN1Y2Nlc3MgPSBja19saW5nZXIodHR5ZmQseix5KTsKLSAg ICAgICAgICAgIHJldHVybihzdWNjZXNzKTsKLSNlbmRpZiAvKiBTT19MSU5HRVIgKi8KLSNpZmRl ZiBTT19TTkRCVUYKLSAgICAgICAgICBjYXNlIFhZVENQX1NFTkRCVUY6Ci0gICAgICAgICAgICB4 ID0gY21udW0oIlNlbmQgYnVmZmVyIHNpemUsIGJ5dGVzIiwiODE5MiIsMTAsJnoseHhzdHJpbmcp OwotICAgICAgICAgICAgaWYgKHggPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgICAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSNpZmRlZiBJS1NEQ09ORgotICAgICAgICAgICAg aWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBJS1NEQ09ORiAqLwot I2lmZGVmIFNTSEJVSUxUSU4KLSAgICAgICAgICAgIGlmIChuZXR3b3JrICYmIG5ldHR5cGUgPT0g TkVUX1NTSCAmJiBzc2hfc29jayAhPSAtMSkKLSAgICAgICAgICAgICAgc3VjY2VzcyA9IHNlbmRi dWYoc3NoX3NvY2sseik7Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAq LwotCSAgICAgIHN1Y2Nlc3MgPSBzZW5kYnVmKHR0eWZkLHopOwotICAgICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MpOwotI2VuZGlmIC8qIFNPX1NOREJVRiAqLwotI2lmZGVmIFNPX1JDVkJVRgotICAg ICAgICAgIGNhc2UgWFlUQ1BfUkVDVkJVRjoKLSAgICAgICAgICAgIHggPSBjbW51bSgiUmVjZWl2 ZSBidWZmZXIgc2l6ZSwgYnl0ZXMiLCI4MTkyIiwxMCwmeix4eHN0cmluZyk7Ci0gICAgICAgICAg ICBpZiAoeCA8IDApIHJldHVybih4KTsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOwotI2lmZGVmIElLU0RDT05GCi0gICAgICAgICAgICBpZiAoaWtzZGNmKSBy ZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIElLU0RDT05GICovCi0KLS8qIE5vdGU6IFRo ZSBmb2xsb3dpbmcgaXMgbm90IDE2LWJpdCBzYWZlICovCi0KLSNpZm5kZWYgUU5YMTYKLSAgICAg ICAgICAgIGlmICh4ID4gNTIyNDgpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9XYXJuaW5n OiByZWNlaXZlIGJ1ZmZlcnMgbGFyZ2VyIHRoYW4gNTIyNDggYnl0ZXNcbiIpOwotICAgICAgICAg ICAgICAgIHByaW50ZigiIG1heSBub3QgYmUgdW5kZXJzdG9vZCBieSBhbGwgaG9zdHMuICBQZXJm b3JtYW5jZVxuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgbWF5IHN1ZmZlci5cbiIpOwot ICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogUU5Y MTYgKi8KLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgICAgICAgICBpZiAobmV0d29yayAmJiBuZXR0 eXBlID09IE5FVF9TU0ggJiYgc3NoX3NvY2sgIT0gLTEpCi0gICAgICAgICAgICAgIHN1Y2Nlc3Mg PSByZWN2YnVmKHNzaF9zb2NrLHopOwotICAgICAgICAgICAgZWxzZQotI2VuZGlmIC8qIFNTSEJV SUxUSU4gKi8KLQkgICAgICBzdWNjZXNzID0gcmVjdmJ1Zih0dHlmZCx6KTsKLSAgICAgICAgICAg IHJldHVybihzdWNjZXNzKTsKLSNlbmRpZiAvKiBTT19SQ1ZCVUYgKi8KLQotI2lmZGVmIFZNUwot I2lmZGVmIERFQ19UQ1BJUAotICAgICAgICAgIGNhc2UgWFlUQ1BfVUNYOiB7ICAgICAgICAgICAg IC8qIFVDWCAyLjAgcG9ydCBzd2FiYmluZyBidWcgKi8KLSAgICAgICAgICAgICAgZXh0ZXJuIGlu dCB1Y3hfcG9ydF9idWc7Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnVj eF9wb3J0X2J1ZykpOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBERUNfVENQSVAgKi8KLSNlbmRp ZiAvKiBWTVMgKi8KLQotICAgICAgICAgIGNhc2UgWFlUQ1BfUkROUzogewotICAgICAgICAgICAg ICBleHRlcm4gaW50IHRjcF9yZG5zOwotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNl dG9uYXV0KCZ0Y3BfcmRucykpOwotICAgICAgICAgIH0KLQotI2lmZGVmIENLX0ROU19TUlYKLSAg ICAgICAgICBjYXNlIFhZVENQX0ROU19TUlY6IHsKLSAgICAgICAgICAgICAgZXh0ZXJuIGludCB0 Y3BfZG5zX3NydjsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmdGNwX2Ru c19zcnYpKTsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfRE5TX1NSViAqLwotCi0gICAgICAg ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotICAgICAgfQot I2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIE5PVENQT1BUUyAqLwotI2VuZGlmIC8q IE5FVENPTk4gKi8KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHh4KSB7Ci0KLSNpZm5kZWYgTk9MT0NB TAotI2lmZGVmIE5FVENPTk4KLSAgICAgIGNhc2UgWFlIT1NUOiB7ICAgICAgICAgICAgICAgICAg ICAvKiBTRVQgSE9TVCAqLwotICAgICAgICAgIHogPSB0dG5wcm90bzsgICAgICAgICAgICAgICAg IC8qIFNhdmUgcHJvdG9jb2wgaW4gY2FzZSBvZiBmYWlsdXJlICovCi0jaWZkZWYgREVDTkVUCi0g ICAgICAgICAgaWYgKG5ldHR5cGUgIT0gTkVUX0RFQykKLSNlbmRpZiAvKiBERUNORVQgKi8KLSAg ICAgICAgICAgIHR0bnByb3RvID0gTlBfTk9ORTsKLSAgICAgICAgICBpZiAoKHkgPSBzZXRsaW4o WFlIT1NULDEsMCkpIDw9IDApIHsgLyogU2V0cyBzdWNjZXNzIHRvIDEgKi8KLSAgICAgICAgICAg ICAgZGVidWcoRjEwMSwiU0VUIEhPU1QgZmFpbCBtZG10eXAiLCIiLG1kbXR5cCk7Ci0gICAgICAg ICAgICAgIHR0bnByb3RvID0gejsgICAgICAgICAgICAgLyogRmFpbGVkLCByZXN0b3JlIHByb3Rv Y29sICovCi0gICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwOwotICAgICAgICAgIH0KLSAgICAgICAg ICBkaWRzZXRsaW4rKzsKLSAgICAgICAgICBkZWJ1ZyhGMTAxLCJTRVQgSE9TVCBPSyBtZG10eXAi LCIiLG1kbXR5cCk7Ci0gICAgICAgICAgZGVidWcoRjEwMSwiU0VUIEhPU1QgcmVsaWFibGUiLCIi LHJlbGlhYmxlKTsKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICB9Ci0jZW5kaWYgLyogTkVU Q09OTiAqLwotCi0gICAgICBjYXNlIFhZTElORTogICAgICAgICAgICAgICAgICAgICAgLyogU0VU IExJTkUgKD0gU0VUIFBPUlQpICovCi0gICAgICAgIGRlYnVnKEYxMDEsInNldGxpbiBmbG93IDEi LCIiLGZsb3cpOwotICAgICAgICB4ID0gc2V0bGluKHh4LDEsMCk7Ci0gICAgICAgIGlmICh4ID4g LTEpIGRpZHNldGxpbisrOwotICAgICAgICBkZWJ1ZyhGMTAxLCJTRVQgTElORSBzZXRsaW4iLCIi LHgpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJTRVQgTElORSBmbG93IiwiIixmbG93KTsKLSAgICAg ICAgZGVidWcoRjEwMSwiU0VUIExJTkUgbG9jYWwiLCIiLGxvY2FsKTsKLSAgICAgICAgZGVidWco RjEwMSwiU0VUIExJTkUgcmVsaWFibGUiLCIiLHJlbGlhYmxlKTsKLSAgICAgICAgcmV0dXJuKHgp OwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRlZiBOT1NFVEtFWQotICAgICAgY2FzZSBY WUtFWTogICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBLRVkgKi8KLSAgICAgICAgcmV0dXJu KGRvc2V0a2V5KCkpOwotI2VuZGlmIC8qIE5PU0VUS0VZICovCi0KLSNpZm5kZWYgTk9DU0VUUwot ICAgICAgY2FzZSBYWUxBTkc6ICAgICAgICAgICAgICAgICAgICAgIC8qIExhbmd1YWdlICovCi0g ICAgICAgIGlmICgoeSA9IGNta2V5KGxuZ3RhYixubG5nLCIiLCJub25lIix4eHN0cmluZykpIDwg MCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkg cmV0dXJuKHgpOwotCi0gICAgICAgIC8qIExvb2sgdXAgbGFuZ3VhZ2UgYW5kIGdldCBhc3NvY2lh dGVkIGNoYXJhY3RlciBzZXRzICovCi0gICAgICAgIGZvciAoaSA9IDA7IChpIDwgbmxhbmdzKSAm JiAobGFuZ3NbaV0uaWQgIT0geSk7IGkrKykgOwotICAgICAgICBpZiAoaSA+PSBubGFuZ3MpIHsK LSAgICAgICAgICAgIHByaW50ZigiP2ludGVybmFsIGVycm9yLCBzb3JyeVxuIik7Ci0gICAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICB9IC8qICAqLwotICAgICAgICBsYW5n dWFnZSA9IGk7ICAgICAgICAgICAgICAgICAgIC8qIEFsbCBnb29kLCBzZXQgdGhlIGxhbmd1YWdl LCAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8K LQotI2lmbmRlZiBNQUMKLSAgICAgIGNhc2UgWFlCQUNLOiAgICAgICAgICAgICAgICAgICAgICAv KiBCQUNLR1JPVU5EICovCi0gICAgICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIiIseHhz dHJpbmcpKSA8IDApIHJldHVybih6KTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeSk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICBiZ3NldCA9IHo7ICAgICAgICAgICAg ICAgICAgICAgIC8qIDAgPSBvZmYgKGZvcmVncm91bmQpICovCi0jaWZkZWYgVk1TICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogMSA9IG9uIChiYWNrZ3JvdW5kKSAqLwotICAgICAgICBp ZiAoYmF0Y2ggJiYgYmdzZXQgPT0gMCkgICAgICAgIC8qIFRvIGVuYWJsZSBlY2hvaW5nIG9mIGNv bW1hbmRzICovCi0gICAgICAgICAgY2t4ZWNoID0gMTsgICAgICAgICAgICAgICAgICAgLyogaW4g Vk1TIGJhdGNoIGxvZ3MgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbHNlICAvKiBDT01NRU5UICov Ci0gICAgICAgIGlmICh6KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMSA9IEJhY2tncm91 bmQgKi8KLSAgICAgICAgICAgIGJnc2V0ID0gMTsKLSAgICAgICAgICAgIGJhY2tncmQgPSAxOwot I2lmZGVmIFZNUwotICAgICAgICAgICAgYmF0Y2ggPSAxOwotI2VuZGlmIC8qIFZNUyAqLwotICAg ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgPSBGb3JlZ3JvdW5kICov Ci0gICAgICAgICAgICBiZ3NldCA9IDA7Ci0gICAgICAgICAgICBiYWNrZ3JkID0gMDsKLSNpZmRl ZiBWTVMKLSAgICAgICAgICAgIGJhdGNoID0gMDsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAg fQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgc3VjY2VzcyA9IDE7Ci0gICAgICAgIGJn Y2hrKCk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzKTsKLSNlbmRpZiAvKiBNQUMgKi8KLQotICAg ICAgY2FzZSBYWVFVSUU6IHsgICAgICAgICAgICAgICAgICAgIC8qIFFVSUVUICovCi0jaWZkZWYg RENNREJVRgotICAgICAgICAgIGV4dGVybiBpbnQgKiB4cXVpZXQ7Ci0jZWxzZQotICAgICAgICAg IGV4dGVybiBpbnQgeHF1aWV0W107Ci0jZW5kaWYgLyogRENNREJVRiAqLwotICAgICAgICAgIHgg PSBzZXRvbigmcXVpZXQpOwotICAgICAgICAgIGlmICh4IDwgMCkgcmV0dXJuKHgpOwotICAgICAg ICAgIHhxdWlldFtjbWRsdmxdID0gcXVpZXQ7Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSB4 KTsKLSAgICAgIH0KLQotI2lmbmRlZiBOT1hGRVIKLSAgICAgIGNhc2UgWFlCVUY6IHsgICAgICAg ICAgICAgICAgICAgICAvKiBCVUZGRVJTICovCi0jaWZkZWYgRFlOQU1JQwotICAgICAgICAgIGlu dCBzYiwgcmI7Ci0gICAgICAgICAgaWYgKCh5ID0gY21udW0oIlNlbmQgYnVmZmVyIHNpemUiLCIi LDEwLCZzYix4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICBpZiAoeSA9PSAtMykgcHJp bnRmKCI/QnVmZmVyIHNpemUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICByZXR1cm4oeSk7 Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChzYiA8IDApIHsKLSAgICAgICAgICAgICAgaWYg KCphdG1idWYgPT0gJy0nKQotICAgICAgICAgICAgICAgIHByaW50ZigiP05lZ2F0aXZlIG51bWJl cnMgY2FuJ3QgYmUgdXNlZCBoZXJlXG4iKTsKLSAgICAgICAgICAgICAgZWxzZSBwcmludGYoIj9J bnRlZ2VyIG92ZXJmbG93LCB1c2UgYSBzbWFsbGVyIG51bWJlciBwbGVhc2VcbiIpOwotICAgICAg ICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgIH0gZWxzZSBpZiAoc2IgPCA4MCkgewotICAg ICAgICAgICAgICBwcmludGYoIj9Ub28gc21hbGxcbiIpOwotICAgICAgICAgICAgICByZXR1cm4o LTkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoKHk9Y21udW0oIlJlY2VpdmUgYnVmZmVy IHNpemUiLGNraXRvYShzYiksMTAsJnJiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0 dXJuKHkpOwotICAgICAgICAgIGlmIChyYiA8IDApIHsKLSAgICAgICAgICAgICAgaWYgKCphdG1i dWYgPT0gJy0nKQotICAgICAgICAgICAgICAgIHByaW50ZigiP05lZ2F0aXZlIG51bWJlcnMgY2Fu J3QgYmUgdXNlZCBoZXJlXG4iKTsKLSAgICAgICAgICAgICAgZWxzZSBwcmludGYoIj9JbnRlZ2Vy IG92ZXJmbG93LCB1c2UgYSBzbWFsbGVyIG51bWJlciBwbGVhc2VcbiIpOwotICAgICAgICAgICAg ICByZXR1cm4oLTkpOwotICAgICAgICAgIH0gZWxzZSBpZiAocmIgPCA4MCkgewotICAgICAgICAg ICAgICBwcmludGYoIj9Ub28gc21hbGxcbiIpOwotICAgICAgICAgICAgICByZXR1cm4oLTkpOwot ICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsK LSAgICAgICAgICBpZiAoKHkgPSBpbmlidWZzKHNiLHJiKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAg ICAgICAgeSA9IGFkanBrbCh1cnBzaXosd3Nsb3RyLGJpZ3Jic2l6KTsgLyogTWF5YmUgYWRqdXN0 IHBhY2tldCBzaXplcyAqLwotICAgICAgICAgIGlmICh5ICE9IHVycHNpeikgdXJwc2l6ID0geTsK LSAgICAgICAgICB5ID0gYWRqcGtsKHNwc2l6LHdzbG90cixiaWdzYnNpeik7Ci0gICAgICAgICAg aWYgKHkgIT0gc3BzaXopIHNwc2l6ID0gc3BtYXggPSBzcHNpenIgPSB5OwotICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7Ci0jZWxzZQotICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBub3Qg YXZhaWxhYmxlXG4iKTsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8q IERZTkFNSUMgKi8KLSAgICAgIH0KLQotICAgICAgY2FzZSBYWUNIS1Q6ICAgICAgICAgICAgICAg ICAgICAgIC8qIEJMT0NLLUNIRUNLICovCi0gICAgICAgIGlmICgoeCA9IGNta2V5KGNoa3RhYixu Y2hrdCwiIiwiMyIseHhzdHJpbmcpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh5ID0g Y21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0JaWYgKHggPT0gNSkgewotCSAgICBiY3RmID0gMTsK LSNpZmRlZiBDT01NRU5UCi0JICAgIHByaW50ZigiPzUgLSBOb3QgaW1wbGVtZW50ZWQgeWV0XG4i KTsKLQkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZgkvKiBDT01NRU5UICovCi0JfQot ICAgICAgICBiY3RyID0geDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBsb2NhbCB0b28g ZXZlbiBpZiBSRU1PVEUgU0VUICovCi0KLSAgICAgICAgaWYgKHJtc2ZsZykgewotICAgICAgICAg ICAgaWYgKHggPT0gNCkgewotICAgICAgICAgICAgICAgIHRtcGJ1ZlswXSA9ICdCJzsKLSAgICAg ICAgICAgICAgICB0bXBidWZbMV0gPSAnXDAnOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg ICAgICAgIGNrc3RybmNweSh0bXBidWYsY2tpdG9hKHgpLFRNUEJVRlNJWik7Ci0gICAgICAgICAg ICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiNDAwIiwgdG1wYnVmLCAiIik7Ci0gICAgICAgICAgICBy ZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRl ZiBOT0xPQ0FMCi0jaWZuZGVmIE1BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhl IE1hYyBoYXMgbm8gUlMtMjMyICovCi1jYXNlIFhZQ0FSUjogICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ0FSUklFUi1XQVRDSCAqLwotICAgICAgICByZXR1cm4oc2V0ZGNkKCkpOwotI2Vu ZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICB9Ci0KLSNpZmRlZiBUTkNP REUKLSAgICBzd2l0Y2ggKHh4KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBBdm9pZCBsb25n IHN3aXRjaCBzdGF0ZW1lbnRzLi4uICovCi0gICAgICBjYXNlIFhZVEVMT1A6IHsKLSAgICAgICAg ICBpbnQgYywgbjsgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXJzICovCi0gICAgICAgICAg aW50IGdldHZhbCA9IDA7ICAgICAgICAgICAgICAgLyogV2hldGhlciB0byBnZXQgc3dpdGNoIHZh bHVlICovCi0gICAgICAgICAgaW50IHRuc2VydmVyID0gMDsgICAgICAgICAgICAgLyogQ2xpZW50 IGJ5IGRlZmF1bHQgKi8KLSAgICAgICAgICBpbnQgb3B0ID0gLTE7ICAgICAgICAgICAgICAgICAv KiBUZWxuZXQgT3B0aW9uICovCi0gICAgICAgICAgc3RydWN0IEZEQiBzdywgb3A7ICAgICAgICAg ICAgLyogRkRCcyBmb3IgZWFjaCBwYXJzZSBmdW5jdGlvbiAqLwotI2lmZGVmIENLX0FVVEhFTlRJ Q0FUSU9OCi0gICAgICAgICAgZXh0ZXJuIGludCBzbF90b3B0X2Ffc19zYXZlZDsKLSAgICAgICAg ICBleHRlcm4gaW50IHNsX3RvcHRfYV9jX3NhdmVkOwotICAgICAgICAgIGV4dGVybiBpbnQgc2xf dG9wdF9lX3Nfc2F2ZWQ7Ci0gICAgICAgICAgZXh0ZXJuIGludCBzbF90b3B0X2VfY19zYXZlZDsK LSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2lmZGVmIElLU0QKLSAgICAgICAgICBp ZiAoaW5zZXJ2ZXIpICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgYnkgZGVmYXVsdCB3aGVuIElL U0QgKi8KLSAgICAgICAgICAgIHRuc2VydmVyID0gMTsKLSNlbmRpZiAvKiBJS1NEICovCi0KLSAg ICAgICAgICAvKiBTZXQgdXAgY2hhaW5lZCBwYXJzZSBmdW5jdGlvbnMuLi4gKi8KLQotICAgICAg ICAgIGNtZmRiaSgmb3AsICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IGZkYiAtIHRlbG9wdHMq LwotICAgICAgICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0g ICAgICAgICAgICAgICAgICIvY2xpZW50LCAvc2VydmVyIG9yIiwgLyogaGxwbXNnICovCi0gICAg ICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAg ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICov Ci0gICAgICAgICAgICAgICAgIG50bm9wdCwgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJp YyBkYXRhIDEgKi8KLSAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAvKiBh ZGR0bCBudW1lcmljIGRhdGEgMiAqLwotICAgICAgICAgICAgICAgICB4eHN0cmluZywKLSAgICAg ICAgICAgICAgICAgdG5vcHR0YWIsCi0gICAgICAgICAgICAgICAgICZzdwotICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgIC8qIFNlY29u ZCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICovCi0gICAgICAgICAgICAgICAgIF9DTUtFWSwgICAg ICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAg ICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAg ICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgbnRub3B0c3csICAg ICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLSAgICAgICAg ICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjog NCA9IGNtc3dpICovCi0gICAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgLyog UHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAgICB0bm9wdHN3LCAgICAgICAg ICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgICAgICAgTlVMTCAgICAgICAg ICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICAgICAgICk7 Ci0KLSAgICAgICAgICB3aGlsZSAob3B0IDwgMCkgeyAgICAgICAgICAgICAvKiBQYXJzZSAwIG9y IG1vcmUgc3dpdGNoZXMgKi8KLSAgICAgICAgICAgICAgeCA9IGNtZmRiKCZvcCk7ICAgICAgICAg ICAvKiBQYXJzZSBzd2l0Y2ggb3Igb3RoZXIgdGhpbmcgKi8KLSAgICAgICAgICAgICAgZGVidWco RjEwMSwiWFlURUxPUCBjbWZkYiIsIiIseCk7Ci0gICAgICAgICAgICAgIGlmICh4IDwgMCkgICAg ICAgICAgICAgICAgLyogRXJyb3IgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4oeCk7ICAgICAg ICAgICAgICAvKiBvciByZXBhcnNlIG5lZWRlZCAqLwotICAgICAgICAgICAgICBpZiAoY21yZXN1 bHQuZmNvZGUgIT0gX0NNS0VZKSAvKiBCcmVhayBvdXQgaWYgbm90IGEgc3dpdGNoICovCi0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGMgPSBjbWdicmsoKTsgICAgICAgICAg ICAgLyogR2V0IGJyZWFrIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgICBnZXR2YWwgPSAoYyA9 PSAnOicgfHwgYyA9PSAnPScpOyAvKiBzZWUgaG93IHN3aXRjaCBlbmRlZCAqLwotICAgICAgICAg ICAgICBpZiAoZ2V0dmFsICYmICEoY21yZXN1bHQua2ZsYWdzICYgQ01fQVJHKSkgewotICAgICAg ICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhcmd1bWVudHNc biIpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICB6ID0gY21yZXN1bHQubnJlc3VsdDsgICAgIC8qIE51bWVyaWMgcmVzdWx0ID0g c3dpdGNoIHZhbHVlICovCi0gICAgICAgICAgICAgIGRlYnVnKEYxMDEsIlhZVEVMT1Agc3dpdGNo IiwiIix6KTsKLQotICAgICAgICAgICAgICBzd2l0Y2ggKHopIHsgICAgICAgICAgICAgIC8qIFBy b2Nlc3MgdGhlIHN3aXRjaCAqLwotICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fQ0xJRU5UOgot ICAgICAgICAgICAgICAgICAgdG5zZXJ2ZXIgPSAwOwotICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgY2FzZSBDS19UTl9TRVJWRVI6Ci0gICAgICAgICAgICAgICAgICB0 bnNlcnZlciA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg IGNhc2UgQ0tfVE5fRUM6Ci0gICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfRUNITzsKLSAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fVFQ6Ci0g ICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfVFRZUEU7Ci0gICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENLX1ROX0JNOgotICAgICAgICAgICAgICAgICAg b3B0ID0gVEVMT1BUX0JJTkFSWTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgIGNhc2UgQ0tfVE5fRU5WOgotICAgICAgICAgICAgICAgICAgb3B0ID0gVEVMT1BUX05F V0VOVklST047Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl IENLX1ROX0xPQzoKLSAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9TTkRMT0M7Ci0gICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENLX1ROX0FVOgotICAg ICAgICAgICAgICAgICAgb3B0ID0gVEVMT1BUX0FVVEhFTlRJQ0FUSU9OOwotICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDS19UTl9GWDoKLSAgICAgICAgICAg ICAgICAgIG9wdCA9IFRFTE9QVF9GT1JXQVJEX1g7Ci0gICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICBjYXNlIENLX1ROX0VOQzoKLSAgICAgICAgICAgICAgICAgIG9wdCA9 IFRFTE9QVF9FTkNSWVBUSU9OOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgY2FzZSBDS19UTl9JS1M6Ci0gICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfS0VS TUlUOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDS19U Tl9UTFM6Ci0gICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfU1RBUlRfVExTOwotICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDS19UTl9YRDoKLSAgICAg ICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9YRElTUExPQzsKLSAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fTkFXUzoKLSAgICAgICAgICAgICAgICAg IG9wdCA9IFRFTE9QVF9OQVdTOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgY2FzZSBDS19UTl9TR0E6Ci0gICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfU0dB OwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDS19UTl9Q SFI6Ci0gICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfUFJBR01BX0hFQVJUQkVBVDsKLSAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fUFNQOgot ICAgICAgICAgICAgICAgICAgb3B0ID0gVEVMT1BUX1NTUElfTE9HT047Ci0gICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENLX1ROX1BMRzoKLSAgICAgICAgICAg ICAgICAgIG9wdCA9IFRFTE9QVF9QUkFHTUFfTE9HT047Ci0gICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICBjYXNlIENLX1ROX1NBSzoKLSAgICAgICAgICAgICAgICAgIG9w dCA9IFRFTE9QVF9JQk1fU0FLOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgY2FzZSBDS19UTl9DUEM6Ci0gICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfQ09N UE9SVDsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ0tf VE5fTE9HOgotICAgICAgICAgICAgICAgICAgb3B0ID0gVEVMT1BUX0xPR09VVDsKLSAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fRkxXOgotICAgICAg ICAgICAgICAgICAgb3B0ID0gVEVMT1BUX0xGTE9XOwotICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiP1Vu ZXhwZWN0ZWQgdmFsdWUgLSAlZFxuIix6KTsKLSAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7 Ci0gICAgICAgICAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgIGlmIChjbXJl c3VsdC5mZGJhZGRyID09ICZvcCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0gICAgICAgICAgfQotICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAg ICAgICBjYXNlIFRFTE9QVF9FQ0hPOiAgICAgICAgICAgLyogT3B0aW9ucyBvbmx5IHRoZSBTZXJ2 ZXIgV0lMTCAqLwotICAgICAgICAgICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgotICAgICAgICAg ICAgY2FzZSBURUxPUFRfU0VORF9VUkw6Ci0gICAgICAgICAgICBjYXNlIFRFTE9QVF9JQk1fU0FL OgotICAgICAgICAgICAgY2FzZSBURUxPUFRfTE9HT1VUOgotICAgICAgICAgICAgICBpZiAoKHgg PSBjbWtleSh0bm5lZ3RhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnRubmVndGFi LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzaXJlZCBzZXJ2ZXIgc3RhdGUiLAot ICAgVEVMT1BUX01PREUodG5zZXJ2ZXI/VEVMT1BUX0RFRl9TX01FX01PREUob3B0KTpURUxPUFRf REVGX0NfVV9NT0RFKG9wdCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmlu ZykKLSAgICAgICAgICAgICAgICAgICApIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICAg IHJldHVybih6KTsKLSAgICAgICAgICAgICAgaWYgKHRuc2VydmVyKSB7Ci0gICAgICAgICAgICAg ICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShvcHQpID0geDsKLSAgICAgICAgICAgICAgICAgIFRF TE9QVF9NRV9NT0RFKG9wdCkgPSB4OwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShvcHQpID0geDsKLSAgICAgICAgICAgICAgICAg IFRFTE9QVF9VX01PREUob3B0KSA9IHg7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg YnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgVEVMT1BUX1RUWVBFOiAgICAgICAgICAvKiBPcHRp b25zIG9ubHkgdGhlIENsaWVudCBXSUxMICovCi0gICAgICAgICAgICBjYXNlIFRFTE9QVF9ORVdF TlZJUk9OOgotICAgICAgICAgICAgY2FzZSBURUxPUFRfU05ETE9DOgotICAgICAgICAgICAgY2Fz ZSBURUxPUFRfQVVUSEVOVElDQVRJT046Ci0gICAgICAgICAgICBjYXNlIFRFTE9QVF9TVEFSVF9U TFM6Ci0gICAgICAgICAgICBjYXNlIFRFTE9QVF9YRElTUExPQzoKLSAgICAgICAgICAgIGNhc2Ug VEVMT1BUX05BV1M6Ci0gICAgICAgICAgICBjYXNlIFRFTE9QVF9MRkxPVzoKLSAgICAgICAgICAg IGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHRubmVn dGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudG5uZWd0YWIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJkZXNpcmVkIGNsaWVudCBzdGF0ZSIsCi0gICAgVEVMT1BUX01P REUoIXRuc2VydmVyP1RFTE9QVF9ERUZfU19VX01PREUob3B0KTpURUxPUFRfREVGX0NfTUVfTU9E RShvcHQpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpCi0gICAgICAg ICAgICAgICAgICAgKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAg ICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHopOwot ICAgICAgICAgICAgICBpZiAodG5zZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9E RUZfU19VX01PREUob3B0KSA9IHg7Ci0gICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKG9w dCkgPSB4OwotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgICAgICAgICAgICBpZiAo b3B0ID09IFRFTE9QVF9BVVRIRU5USUNBVElPTikKLSAgICAgICAgICAgICAgICAgICAgc2xfdG9w dF9hX3Nfc2F2ZWQgPSAwOwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0gICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShv cHQpID0geDsKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKG9wdCkgPSB4OwotI2lm ZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgICAgICAgICAgICBpZiAob3B0ID09IFRFTE9Q VF9BVVRIRU5USUNBVElPTikKLSAgICAgICAgICAgICAgICAgICAgc2xfdG9wdF9hX2Nfc2F2ZWQg PSAwOwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0gICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg IGlmICgoeCA9IGNta2V5KHRubmVndGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu dG5uZWd0YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuc2VydmVyID8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgImRlc2lyZWQgc2VydmVyIHN0YXRlIiA6Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJkZXNpcmVkIGNsaWVudCBzdGF0ZSIsCi0gICAgVEVMT1BU X01PREUodG5zZXJ2ZXI/VEVMT1BUX0RFRl9TX01FX01PREUob3B0KTpURUxPUFRfREVGX0NfTUVf TU9ERShvcHQpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICkgPCAwKQotICAg ICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkodG5u ZWd0YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50bm5lZ3RhYiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIXRuc2VydmVyID8gImRlc2lyZWQgc2VydmVyIHN0YXRlIiA6 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNpcmVkIGNsaWVudCBzdGF0ZSIsCi0g ICAgVEVMT1BUX01PREUoIXRuc2VydmVyP1RFTE9QVF9ERUZfU19VX01PREUob3B0KTpURUxPUFRf REVGX0NfVV9NT0RFKG9wdCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmlu ZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgKSA8 IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICBpZiAoKHogPSBj bWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAgICAgICBp ZiAodG5zZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKG9w dCkgPSB4OwotICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUob3B0KSA9IHg7Ci0gICAg ICAgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKG9wdCkgPSB5OwotICAgICAgICAgICAg ICAgICAgVEVMT1BUX1VfTU9ERShvcHQpID0geTsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAg ICAgICAgICAgICAgICBpZiAob3B0ID09IFRFTE9QVF9FTkNSWVBUSU9OKQotICAgICAgICAgICAg ICAgICAgICBzbF90b3B0X2Vfc19zYXZlZCA9IDA7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9D X01FX01PREUob3B0KSA9IHg7Ci0gICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShvcHQp ID0geDsKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUob3B0KSA9IHk7Ci0g ICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKG9wdCkgPSB5OwotI2lmZGVmIENLX0VOQ1JZ UFRJT04KLSAgICAgICAgICAgICAgICAgIGlmIChvcHQgPT0gVEVMT1BUX0VOQ1JZUFRJT04pCi0g ICAgICAgICAgICAgICAgICAgIHNsX3RvcHRfZV9jX3NhdmVkID0gMDsKLSNlbmRpZiAvKiBDS19F TkNSWVBUSU9OICovCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLQotICAgICAgY2FzZSBYWVRFTDogICAgICAgICAg ICAgICAgICAgICAgIC8qIFRFTE5FVCAqLwotICAgICAgICBpZiAoKHogPSBjbWtleSh0bnRhYixu dG4sInBhcmFtZXRlciBmb3IgVEVMTkVUIG5lZ290aWF0aW9ucyIsICIiLAotICAgICAgICAgICAg ICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAg IHN3aXRjaCAoeikgewotICAgICAgICAgIGNhc2UgQ0tfVE5fRUM6ICAgICAgICAgICAgICAgIC8q IEVDSE8gKi8KLSAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHJsdGFiLG5ybHQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAiaW5pdGlhbCBURUxORVQgZWNob2luZyBzdGF0ZSIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAibG9jYWwiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAg ICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVy bih5KTsKLSAgICAgICAgICAgIHRuX2R1cGxleCA9IHg7Ci0gICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOwotCi0gICAgICAgICAgY2FzZSBDS19UTl9SRTogICAgICAgICAgICAgICAgLyog UkVNT1RFLUVDSE8gKi8KLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnRuX3Jl bV9lY2hvKSk7Ci0KLSAgICAgICAgICBjYXNlIENLX1ROX0RCOiAgICAgICAgICAgICAgICAvKiBE RUJVRyAqLwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmdG5fZGViKSk7Ci0K LSAgICAgICAgICBjYXNlIENLX1ROX1RUOiAgICAgICAgICAgICAgICAvKiBURVJNSU5BTCBUWVBF ICovCi0gICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgidGVybWluYWwgdHlwZSBmb3IgVEVMTkVU IGNvbm5lY3Rpb25zIiwiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZzLHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAodG5fdGVy bSkgewotICAgICAgICAgICAgICAgIGZyZWUodG5fdGVybSk7ICAgICAgICAgIC8qIEZyZWUgYW55 IHByZXZpb3VzIHN0b3JhZ2UgKi8KLSAgICAgICAgICAgICAgICB0bl90ZXJtID0gTlVMTDsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzID09IE5VTEwgfHwgKnMgPT0gTlVMKSB7IC8q IElmIG5vbmUgZ2l2ZW4gKi8KLSAgICAgICAgICAgICAgICB0bl90ZXJtID0gTlVMTDsgICAgICAg ICAvKiByZW1vdmUgdGhlIG92ZXJyaWRlIHN0cmluZyAqLwotICAgICAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCh0bl90ZXJtID0gbWFsbG9j KHN0cmxlbihzKSsxKSkpIHsKLSAgICAgICAgICAgICAgICBzdHJjcHkodG5fdGVybSxzKTsKLSAg ICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgICAgfSBlbHNlIHJl dHVybihzdWNjZXNzID0gMCk7Ci0KLSNpZmRlZiBDS19GT1JXQVJEX1gKLSAgICAgICAgICBjYXNl IENLX1ROX0ZYOiAgICAgICAgICAgICAgICAvKiBGT1JXQVJELVggKi8KLSAgICAgICAgICAgIGlm ICgoeD1jbWtleSh0bmZ3ZHh0YWIsbnRuZndkeCwiIiwieGF1dGhvcml0eS1maWxlIix4eHN0cmlu ZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgc3dpdGNoICh4 KSB7Ci0gICAgICAgICAgICAgIGNhc2UgMDogeyAgICAgICAgICAgICAgICAgLyogWGF1dGhvcml0 eS1GaWxlICovCi0gICAgICAgICAgICAgICAgICB4ID0gY21pZmkoIkZ1bGwgcGF0aCBvZiAuWGF1 dGhvcml0eSBmaWxlIiwiIiwmcywmeSx4eHN0cmluZyk7Ci0gICAgICAgICAgICAgICAgICBpZiAo eCA8IDAgJiYgeCAhPSAtMykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAg ICAgICAgICAgICAgbWFrZXN0cigmdG5fZndkeF94YXV0aG9yaXR5LHMpOwotICAgICAgICAgICAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICBjYXNlIDE6IHsgICAgICAgICAgICAgICAgIC8qIE5vLUVuY3J5cHRpb24gKi8KLSAgICAgICAg ICAgICAgICAgIGV4dGVybiBpbnQgZndkeF9ub19lbmNyeXB0OwotICAgICAgICAgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmZndkeF9ub19lbmNyeXB0KSk7Ci0gICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5k aWYgLyogQ0tfRk9SV0FSRF9YICovCi0KLSAgICAgICAgICBjYXNlIENLX1ROX05MOiAgICAgICAg ICAgICAgICAvKiBURUxORVQgTkVXTElORS1NT0RFICovCi0gICAgICAgICAgICBpZiAoKHggPSBj bWtleSh0bl9ubG10YWIsbnRuX25sbSwiIiwibnZ0Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAg ICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgaWYgKHggPT0gVE5fTkxfQklOKSB7Ci0gICAg ICAgICAgICAgIGlmICgoeCA9IGNta2V5KHRubG10YWIsbnRubG0sIiIsInJhdyIseHhzdHJpbmcp KSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICBpZiAoKHkg PSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAg ICB0bl9iX25sbSA9IHg7Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAg ICAgICAgfSBlbHNlIGlmICh4ID09IFROX05MX05WVCkgewotICAgICAgICAgICAgICBpZiAoKHgg PSBjbWtleSh0bmxtdGFiLG50bmxtLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAg ICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0g ICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICB0bl9ubG0gPSB4OwotICAg ICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4o eSk7Ci0gICAgICAgICAgICAgIHRuX25sbSA9IHg7Ci0gICAgICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQ0tfVE5fWEY6ICAgICAgICAg ICAgICAgICAgLyogQklOQVJZLVRSQU5TRkVSLU1PREUgKi8KLSAgICAgICAgICAgIGlmICgoeiA9 IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHopOwotICAgICAg ICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgICB0bl9i X3hmZXIgPSB6OwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgICBj YXNlIENLX1ROX05FOiAgICAgICAgICAgICAgICAgIC8qIE5PLUVOQ1JZUFQtRFVSSU5HLVhGRVIg Ki8KLSAgICAgICAgICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykp IDwgMCkgcmV0dXJuKHopOwotICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeSk7Ci0jaWZkZWYgQ0tfQVBDCi0gICAgICAgICAgICAvKiBEb24ndCBsZXQgdGhpcyBiZSBz ZXQgcmVtb3RlbHkgKi8KLSAgICAgICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8 Ci0gICAgICAgICAgICAgICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVz ICYgQVBDX1VOQ0gpKSkKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRp ZiAvKiBDS19BUEMgKi8KLSAgICAgICAgICAgIHRuX25vX2VuY3J5cHRfeGZlciA9IHo7Ci0gICAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICAgICAgY2FzZSBDS19UTl9CTTog ICAgICAgICAgICAgICAgLyogQklOQVJZLU1PREUgKi8KLSAgICAgICAgICAgIGlmICgoeCA9IGNt a2V5KHRubmVndGFiLG50bm5lZ3RhYiwiIiwicmVmdXNlZCIseHhzdHJpbmcpKSA8IDApCi0gICAg ICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkK LSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01P REUoVEVMT1BUX0JJTkFSWSkgPSB4OwotICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShU RUxPUFRfQklOQVJZKSA9IHg7Ci0gICAgICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxP UFRfQklOQVJZKSA9IHg7Ci0gICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9C SU5BUlkpID0geDsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSNpZmRlZiBJ S1NfT1BUSU9OCi0gICAgICAgICAgY2FzZSBDS19UTl9JS1M6ICAgICAgICAgICAgICAgLyogS0VS TUlUICovCi0gICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0bm5lZ3RhYixudG5uZWd0YWIsIkRP IiwiYWNjZXB0Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAg ICAgICAgICAgaWYgKCh5ID0gY21rZXkodG5uZWd0YWIsbnRubmVndGFiLCJXSUxMIiwiYWNjZXB0 Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAg aWYgKCh6ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAg ICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfS0VSTUlUKSA9IHk7Ci0gICAgICAgICAg ICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9LRVJNSVQpID0geDsKLSAgICAgICAgICAgIFRF TE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9LRVJNSVQpID0geTsKLSAgICAgICAgICAgIFRFTE9Q VF9ERUZfQ19VX01PREUoVEVMT1BUX0tFUk1JVCkgPSB4OwotICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0KLSNpZmRlZiBDS19TU0wKLSAg ICAgICAgICBjYXNlIENLX1ROX1RMUzogICAgICAgICAgICAgICAvKiBTVEFSVF9UTFMgKi8KLSAg ICAgICAgICAgIGlmICgoeCA9IGNta2V5KHRubmVndGFiLG50bm5lZ3RhYiwibWUiLCJhY2NlcHQi LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICBp ZiAoKHkgPSBjbWtleSh0bm5lZ3RhYixudG5uZWd0YWIsInUiLCJhY2NlcHQiLHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAoKHogPSBjbWNm bSgpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgICAgIFRFTE9QVF9E RUZfU19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0geDsKLSAgICAgICAgICAgIFRFTE9QVF9E RUZfU19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSB5OwotICAgICAgICAgICAgVEVMT1BUX0RF Rl9DX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSB4OwotICAgICAgICAgICAgVEVMT1BUX0RF Rl9DX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IHk7Ci0gICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0jaWZkZWYgQ0tfTkFXUwotICAgICAg ICAgIGNhc2UgQ0tfVE5fTkFXUzogICAgICAgICAgICAgIC8qIE5BV1MgKi8KLSAgICAgICAgICAg IGlmICgoeCA9IGNta2V5KHRubmVndGFiLG50bm5lZ3RhYiwibWUiLCJhY2NlcHQiLHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICBpZiAoKHkgPSBj bWtleSh0bm5lZ3RhYixudG5uZWd0YWIsInUiLCJhY2NlcHQiLHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDAp Ci0gICAgICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgICAgIFRFTE9QVF9ERUZfU19NRV9N T0RFKFRFTE9QVF9OQVdTKSA9IHg7Ci0gICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRF TE9QVF9OQVdTKSA9IHk7Ci0gICAgICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRf TkFXUykgPSB4OwotICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfTkFXUykg PSB5OwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSNlbmRpZiAvKiBDS19OQVdT ICovCi0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgICAgICAgIGNhc2UgQ0tfVE5fQVU6 ICAgICAgICAgICAgICAgIC8qIEFVVEhFTlRJQ0FUSU9OICovCi0gICAgICAgICAgICBpZiAoKHgg PSBjbWtleSh0bmF1dGh0YWIsbnRuYXV0aCwiIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAg ICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgaWYgKHggPT0gVE5fQVVfRldEKSB7Ci0gICAg ICAgICAgICAgICAgZXh0ZXJuIGludCBmb3J3YXJkX2ZsYWc7Ci0gICAgICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSBzZXRvbigmZm9yd2FyZF9mbGFnKSk7Ci0gICAgICAgICAgICB9IGVsc2Ug aWYgKHggPT0gVE5fQVVfVFlQKSB7Ci0gICAgICAgICAgICAgICAgZXh0ZXJuIGludCBhdXRoX3R5 cGVfdXNlcltdOwotICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgc2xfYXV0aF90eXBlX3VzZXJb XTsKLSAgICAgICAgICAgICAgICBleHRlcm4gaW50IHNsX2F1dGhfc2F2ZWQ7Ci0gICAgICAgICAg ICAgICAgaW50IGksIGosIGF0eXBlc1tBVVRIVFlQTFNUU1pdOwotCi0gICAgICAgICAgICAgICAg Zm9yIChpID0gMDsgaSA8IEFVVEhUWVBMU1RTWjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAg IGlmICgoeSA9IGNta2V5KGF1dHlwdGFiLG5hdXR5cCwiIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaSA9PSAwID8gImF1dG9tYXRpYyIgOiAiIiAsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBpZiAoeSA9PSAtMykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmICh5ID09IEFVVEhUWVBFX0FVVE8gfHwg eSA9PSBBVVRIVFlQRV9OVUxMKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAot ICAgICAgICAgICAgICAgICAgICAgICAgIlxyXG4/Q2hvaWNlIG1heSBvbmx5IGJlIHVzZWQgaW4g Zmlyc3QgcG9zaXRpb24uXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05 KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAw OyBqIDwgaTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR5cGVzW2pdID09 IHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxyXG4/Q2hvaWNlIGhh cyBhbHJlYWR5IGJlZW4gdXNlZC5cclxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICBhdHlwZXNbaV0gPSB5OwotICAgICAgICAgICAgICAg ICAgICBpZiAoeSA9PSBBVVRIVFlQRV9OVUxMIHx8IHkgPT0gQVVUSFRZUEVfQVVUTykgewotICAg ICAgICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgaWYgKGkgPCBBVVRIVFlQTFNUU1opCi0gICAgICAgICAgICAgICAgICBhdHlwZXNbaV0gPSBB VVRIVFlQRV9OVUxMOwotICAgICAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAg ICAgICAgICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgICAgICAgICBzbF9hdXRoX3NhdmVk ID0gMDsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVVUSFRZUExTVFNaOyBpKysp IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0aF90eXBlX3VzZXJbaV0gPSBhdHlwZXNbaV07Ci0g ICAgICAgICAgICAgICAgICAgIHNsX2F1dGhfdHlwZV91c2VyW2ldID0gMDsKLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHggPT0gVE5fQVVfSE9XKSB7Ci0gICAgICAg ICAgICAgICAgaWYgKCh5ID0gY21rZXkoYXVob3d0YWIsbmF1aG93LCIiLCJhbnkiLHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIGlm ICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih6KTsKLSAgICAg ICAgICAgICAgICB0bl9hdXRoX2hvdyA9IHk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHggPT0g VE5fQVVfRU5DKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoYXVlbmN0YWIsbmF1 ZW5jLCIiLCJlbmNyeXB0Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVy bih5KTsKLSAgICAgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAg ICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgICAgICAgICAgdG5fYXV0aF9lbmMgPSB5OwotICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDAp Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgVEVMT1BUX0RF Rl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IHg7Ci0gICAgICAgICAgICAgICAg VEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0geDsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0jZW5kaWYgLyogQ0tfQVVU SEVOVElDQVRJT04gKi8KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICBjYXNlIENL X1ROX0VOQzogeyAgICAgICAgICAgICAvKiBFTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgIGlu dCBjLCB0bXAgPSAtMTsKLSAgICAgICAgICAgICAgaW50IGdldHZhbCA9IDA7Ci0gICAgICAgICAg ICAgIHN0YXRpYyBzdHJ1Y3Qga2V5dGFiICogdG5ldGJsID0gTlVMTDsKLSAgICAgICAgICAgICAg c3RhdGljIGludCBudG5ldGJsID0gMDsKLQotICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleSh0 bmVuY3RhYixudG5lbmMsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0 dXJuKHkpOwotICAgICAgICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAgICAgICAgICAgICBjYXNl IFROX0VOX1RZUDoKLSAgICAgICAgICAgICAgICAgIHggPSBja19nZXRfY3J5cHRfdGFibGUoJnRu ZXRibCwmbnRuZXRibCk7Ci0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19nZXRfY3J5 cHRfdGFibGUgeCIsIiIseCk7Ci0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19nZXRf Y3J5cHRfdGFibGUgbiIsIiIsbnRuZXRibCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoeCA8IDEg fHwgIXRuZXRibCB8fCBudG5ldGJsIDwgMSkgLyogRGlkbid0IGdldCBpdCAqLwotICAgICAgICAg ICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgICAgICAgICAgIGlmICgheCkgewotICAgICAgICAg ICAgICAgICAgICAgIHByaW50ZigiP09vcHMsIHR5cGVzIG5vdCBsb2FkZWRcbiIpOwotICAgICAg ICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0bmV0YmwsbnRuZXRibCwidHlwZSBvZiBlbmNyeXB0 aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRvbWF0aWMiLHh4c3Ry aW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAg ICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybih6 KTsKLSAgICAgICAgICAgICAgICAgIGN4X3R5cGUgPSB4OwotICAgICAgICAgICAgICAgICAgc2xf Y3hfdHlwZSA9IDA7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBj YXNlIFROX0VOX1NUQVJUOgotICAgICAgICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAw KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4oeik7Ci0jaWZkZWYgQ0tfQVBDCi0gICAgICAg ICAgICAgICAgICAvKiBEb24ndCBsZXQgdGhpcyBiZSBzZXQgcmVtb3RlbHkgKi8KLSAgICAgICAg ICAgICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8Ci0gICAgICAgICAgICAgICAg ICAgICAgYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkp Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogQ0tf QVBDICovCi0gICAgICAgICAgICAgICAgICBja190bl9lbmNfc3RhcnQoKTsKLSAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVE5fRU5fU1RPUDoKLSAgICAgICAg ICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKHopOwotI2lmZGVmIENLX0FQQwotICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgbGV0IHRo aXMgYmUgc2V0IHJlbW90ZWx5ICovCi0gICAgICAgICAgICAgICAgICBpZiAoYXBjYWN0aXZlID09 IEFQQ19MT0NBTCB8fAotICAgICAgICAgICAgICAgICAgICAgIGFwY2FjdGl2ZSA9PSBBUENfUkVN T1RFICYmICEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKQotICAgICAgICAgICAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENLX0FQQyAqLwotICAgICAgICAgICAgICAgICAg Y2tfdG5fZW5jX3N0b3AoKTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0g ICAgICAgICAgICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9E RUZfQ19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IHk7Ci0gICAgICAgICAgICAgICAgICBU RUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IHk7Ci0gICAgICAgICAgICAg ICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSB5OwotICAgICAg ICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSB5Owot ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAg ICAgICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQotICAgICAgICAgIGNhc2UgQ0tf VE5fQlVHOiAgICAgICAgICAgICAgIC8qIEJVRyAqLwotICAgICAgICAgICAgaWYgKCh4ID0gY21r ZXkodG5idWd0YWIsNCwiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJiaW5hcnktbWUt bWVhbnMtdS10b28iLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgICAgICBpZiAoKHogPSBjbWtleShvbm9mZiwyLCIiLCJvZmYiLHh4c3RyaW5nKSkgPCAw KSByZXR1cm4oeik7Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5 KTsKLSAgICAgICAgICAgIHN3aXRjaCAoeCkgewotICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAg ICAgICAgICAgICAgdG5fYl9tZXUgPSB6OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgdG5fYl91bWUgPSB6OwotICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgdG5f aW5maW5pdGUgPSB6OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl IDM6Ci0gICAgICAgICAgICAgICAgdG5fc2JfYnVnID0gejsKLSAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgIHRuX2F1dGhfa3JiNV9k ZXNfYnVnID0gejsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSNpZmRlZiBDS19FTlZJUk9OTUVOVAotICAg ICAgICAgIGNhc2UgQ0tfVE5fWEQ6ICAgICAgICAgICAgICAgIC8qIFhESVNQTE9DICovCi0gICAg ICAgICAgICBpZiAoKHggPSBjbWtleSh0bm5lZ3RhYixudG5uZWd0YWIsIm1lIiwiYWNjZXB0Iix4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgaWYg KCh5ID0gY21rZXkodG5uZWd0YWIsbnRubmVndGFiLCJ1IiwiYWNjZXB0Iix4eHN0cmluZykpIDwg MCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0o KSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgICAgICBURUxPUFRfREVG X1NfTUVfTU9ERShURUxPUFRfWERJU1BMT0MpID0geDsKLSAgICAgICAgICAgIFRFTE9QVF9ERUZf U19VX01PREUoVEVMT1BUX1hESVNQTE9DKSA9IHk7Ci0gICAgICAgICAgICBURUxPUFRfREVGX0Nf TUVfTU9ERShURUxPUFRfWERJU1BMT0MpID0geDsKLSAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19V X01PREUoVEVMT1BUX1hESVNQTE9DKSA9IHk7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwotCi0gICAgICAgICAgY2FzZSBDS19UTl9FTlY6IHsKLSAgICAgICAgICAgICAgY2hhciAq IG1zZyA9ICJ2YWx1ZSBvZiB0ZWxuZXQgZW52aXJvbm1lbnQgdmFyaWFibGUiOwotICAgICAgICAg ICAgICBleHRlcm4gaW50IHRuX2Vudl9mbGc7Ci0gICAgICAgICAgICAgIGV4dGVybiBjaGFyIHRu X2Vudl9hY2N0W10sIHRuX2Vudl9kaXNwW10sIHRuX2Vudl9qb2JbXSwKLSAgICAgICAgICAgICAg dG5fZW52X3BybnRbXSwgdG5fZW52X3N5c1tdOwotICAgICAgICAgICAgICBleHRlcm4gY2hhciAq IHRuX2xvYzsKLSAgICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkodG5lbnZ0YWIsbnRuZW52LCIi LCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAg ICAgICAgaWYgKHggPT0gVE5fRU5WX1VWQVIpIHsgICAvKiBVc2VyIHZhcmlhYmxlcyAqLwotICAg ICAgICAgICAgICAgICAgY2hhciAqIHV2YXI9TlVMTDsKLSAgICAgICAgICAgICAgICAgIGNoYXIg KiB1dmFsPU5VTEw7Ci0gICAgICAgICAgICAgICAgICBjaGFyICogZW52OwotICAgICAgICAgICAg ICAgICAgZXh0ZXJuIGNoYXIgKiB0bl9lbnZfdXNlcnZhcls4XVsyXTsKLQotICAgICAgICAgICAg ICAgICAgLyogR2V0IHRoZSB1c2VyIHZhcmlhYmxlIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAg IGlmICgoeCA9IGNtZmxkKCJOYW1lIG9mIEVudmlyb25tZW50IFZhcmlhYmxlIiwiIiwmcywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAg ICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgICBtYWtlc3RyKCZ1dmFyLHMp OwotCi0gICAgICAgICAgICAgICAgICBlbnYgPSBnZXRlbnYodXZhcik7Ci0gICAgICAgICAgICAg ICAgICBpZiAoIWVudikgZW52ID0gIiI7Ci0KLSAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNt dHh0KCJWYWx1ZSBvZiBFbnZpcm9ubWVudCBWYXJpYWJsZSIsZW52LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAg IHJldHVybih4KTsKLSAgICAgICAgICAgICAgICAgIGlmICgqcykKLSAgICAgICAgICAgICAgICAg ICAgbWFrZXN0cigmdXZhbCxzKTsKLQotICAgICAgICAgICAgICAgICAgLyogTm93IHRoYXQgd2Ug aGF2ZSB0aGUgdmFyaWFibGUgYW5kIHBlcmhhcHMgYSB2YWx1ZSAqLwotICAgICAgICAgICAgICAg ICAgLyogdGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXM6ICgxKSBuZXcgdmFyaWFibGUgICAq LwotICAgICAgICAgICAgICAgICAgLyogYW5kIGFzc29jaWF0ZWQgdmFsdWU7ICgyKSB2YXJpYWJs ZSBhbHJlYWR5IGV4aXN0cyAqLwotICAgICAgICAgICAgICAgICAgLyogYnV0IHdlIGhhdmUgYSBu ZXcgdmFsdWU7ICgzKSB2YXJpYWJsZSBhbHJlYWR5ICAgICAqLwotICAgICAgICAgICAgICAgICAg LyogZXhpc3RzIGJ1dCBubyBuZXcgdmFsdWUgdGhlcmVmb3JlIHRoZSB1c2VyIHdhbnRzICAqLwot ICAgICAgICAgICAgICAgICAgLyogdG8gY2xlYXIgdmFyaWFibGUuICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAvKiBUcnkgdG8gZmluZCBhbiBl eGlzdGluZyB2YXJpYWJsZSAqLwotICAgICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IDg7 IHgrKykgewotICAgICAgICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAodG5fZW52X3VzZXJ2 YXJbeF1bMF0sdXZhciwtMSwwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXZh bCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSh0bl9lbnZfdXNlcnZhclt4 XVsxXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9lbnZfdXNlcnZhclt4XVsx XSA9IHV2YWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHV2YXIpOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZyZWUodG5fZW52X3VzZXJ2YXJbeF1bMF0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdG5fZW52X3VzZXJ2YXJbeF1bMF0gPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZnJlZSh0bl9lbnZfdXNlcnZhclt4XVsxXSk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0bl9lbnZfdXNlcnZhclt4XVsxXSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmcmVlKHV2YXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg LyogQ291bGRuJ3QgZmluZCBvbmU7IGxvb2sgZm9yIGVtcHR5IGxvY2F0aW9uIHRvIGluc2VydCAq LwotICAgICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgewotICAgICAgICAg ICAgICAgICAgICAgIGlmICghdG5fZW52X3VzZXJ2YXJbeF1bMF0pIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgdG5fZW52X3VzZXJ2YXJbeF1bMF0gPSB1dmFyOwotICAgICAgICAgICAgICAg ICAgICAgICAgICB0bl9lbnZfdXNlcnZhclt4XVsxXSA9IHV2YWw7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIG5v IHNwYWNlIGZvciB2YXJpYWJsZS5cbiIpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoeCA9PSBUTl9FTlZf T0ZGIHx8IHggPT0gVE5fRU5WX09OKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApIHJldHVybih5KTsKLSNpZmRlZiBJS1NECi0gICAgICAgICAgICAgICAgICBpZiAo aW5zZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFu ZCBkaXNhYmxlZC5cclxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAwKTsKLSAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICAg ICAgICAgICB0bl9lbnZfZmxnID0geCA9PSBUTl9FTlZfT0ZGID8gMCA6IDE7Ci0gICAgICAgICAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg ICAgICAgLyogTm90IE9OL09GRiAtIEdldCB0aGUgdmFsdWUgKi8KLSAgICAgICAgICAgICAgeiA9 IGNtZGdxdW8oKTsKLSAgICAgICAgICAgICAgY21kc3F1bygwKTsKLSAgICAgICAgICAgICAgaWYg KCh5ID0gY210eHQobXNnLCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAg ICAgICBjbWRzcXVvKHopOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgIGNtZHNxdW8oeik7Ci0jaWZkZWYgSUtTRAotICAgICAgICAg ICAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK LSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbihzKSA+IDYz KSB7Ci0gICAgICAgICAgICAgICAgICBwcmludGYoIlNvcnJ5LCB0b28gbG9uZ1xuIik7Ci0gICAg ICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg IHN3aXRjaCAoeCkgewotICAgICAgICAgICAgICAgIGNhc2UgVE5fRU5WX1VTUjoKLSAgICAgICAg ICAgICAgICAgIGNrc3RybmNweSh1aWRidWYscyxVSURCVUZMRU4pOwotICAgICAgICAgICAgICAg ICAgc2xfdWlkX3NhdmVkID0gMDsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgIGNhc2UgVE5fRU5WX0FDQ1Q6Ci0gICAgICAgICAgICAgICAgICBja3N0cm5jcHkodG5f ZW52X2FjY3Qscyw2NCk7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICBjYXNlIFROX0VOVl9ESVNQOgotICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRuX2Vudl9k aXNwLHMsNjQpOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz ZSBUTl9FTlZfSk9COgotICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRuX2Vudl9qb2Iscyw2 NCk7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFROX0VO Vl9QUk5UOgotICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRuX2Vudl9wcm50LHMsNjQpOwot ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBUTl9FTlZfU1lT OgotICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRuX2Vudl9zeXMscyw2NCk7Ci0gICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFROX0VOVl9MT0M6Ci0gICAg ICAgICAgICAgICAgICBpZiAoISpzKSBzID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgIG1ha2Vz dHIoJnRuX2xvYyxzKTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg IGNhc2UgVE5fRU5WX1VWQVI6Ci0gICAgICAgICAgICAgICAgICBwcmludGYoIlxuP05vdCB5ZXQg aW1wbGVtZW50ZWRcbiIpOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICB9Ci0jZW5k aWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KLQotI2lmZGVmIENLX1NORExPQwotICAgICAgICAgIGNh c2UgQ0tfVE5fTE9DOiB7ICAgICAgICAgICAgIC8qIExPQ0FUSU9OICovCi0gICAgICAgICAgICAg IGV4dGVybiBjaGFyICogdG5fbG9jOwotICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiTG9j YXRpb24gc3RyaW5nIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgICAgICAgIGlmICghKnMpIHMgPSBOVUxMOwotICAgICAgICAgICAgICBt YWtlc3RyKCZ0bl9sb2Mscyk7Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0g ICAgICAgICAgfQotI2VuZGlmIC8qIENLX1NORExPQyAqLwotICAgICAgICAgIGNhc2UgQ0tfVE5f U0ZVOiAgICAgICAgICAgICAgIC8qIE1pY3Jvc29mdCBTRlUgY29tcGF0aWJpbGl0eSAqLwotICAg ICAgICAgICAgaWYgKCh6ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSBy ZXR1cm4oeik7Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsK LSAgICAgICAgICAgIHRuX3NmdSA9IHo7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEp OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIENLX1ROX1dBSVQ6ICAgICAg ICAgICAgICAvKiBXQUlULUZPUi1ORUdPVElBVElPTlMgKi8KLSAgICAgICAgICAgIGlmICgoeiA9 IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHopOwotICAgICAg ICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0jaWZkZWYgSUtTRAotICAg ICAgICAgICAgaWYgKGluc2VydmVyICYmCi0jaWZkZWYgSUtTRENPTkYKLSAgICAgICAgICAgICAg ICBpa3NkY2YKLSNlbHNlCi0gICAgICAgICAgICAgICAgMQotI2VuZGlmIC8qIElLU0RDT05GICov Ci0gICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIGNv bW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MCk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAgICAgdG5fd2Fp dF9mbGcgPSB6OwotICAgICAgICAgICAgc2xfdG5fc2F2ZWQgPSAwOwotICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgICAgIGNhc2UgQ0tfVE5fREw6ICAgICAgICAgICAg ICAgIC8qIERFTEFZIFNVQk5FR09USUFUSU9OUyAqLwotICAgICAgICAgICAgaWYgKCh6ID0gY21r ZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7Ci0gICAgICAgICAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSNpZmRlZiBJS1NECi0gICAgICAg ICAgICBpZiAoaW5zZXJ2ZXIgJiYKLSNpZmRlZiBJS1NEQ09ORgotICAgICAgICAgICAgICAgIGlr c2RjZgotI2Vsc2UKLSAgICAgICAgICAgICAgICAxCi0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSAg ICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFu ZCBkaXNhYmxlZC5cclxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK LSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICAgICB0bl9kZWxheV9z YiA9IHo7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICAgICAgY2Fz ZSBDS19UTl9QVUlEOiB7ICAgICAgICAgICAgLyogUFJPTVBULUZPUi1VU0VSSUQgKi8KLSAgICAg ICAgICAgICAgaW50IGksbGVuOwotICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiUHJvbXB0 IHN0cmluZyIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHkp OwotCSAgICAgIHMgPSBicnN0cmlwKHMpOwotICAgICAgICAgICAgICAvKiB3ZSBtdXN0IGNoZWNr IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gJSBmaWVsZHMgKi8KLSAgICAgICAgICAgICAgbGVu ID0gc3RybGVuKHMpOwotICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsK LSAgICAgICAgICAgICAgICAgIGlmIChzW2ldID09ICclJykgewotICAgICAgICAgICAgICAgICAg ICAgIGlmIChzW2krMV0gIT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiJSUgZmllbGRzIGFyZSBub3QgdXNlZCBpbiB0aGlzIGNvbW1hbmQuXG4iKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgIG1ha2VzdHIoJnRuX3ByX3VpZCxzKTsKLSAgICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZGVmYXVsdDoK LSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogVE5D T0RFICovCi0KLSAgICBzd2l0Y2ggKHh4KSB7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICBjYXNlIFhZ Q09VTjogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIENPVU5UICovCi0gICAgICAgIHggPSBj bW51bSgiUG9zaXRpdmUgbnVtYmVyIiwiMCIsMTAsJnoseHhzdHJpbmcpOwotICAgICAgICBpZiAo eCA8IDApIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eCk7Ci0gICAgICAgIGlmICh6IDwgMCkgewotICAgICAgICAgICAgcHJpbnRmKCI/QSBwb3NpdGl2 ZSBudW1iZXIsIHBsZWFzZVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0K LSAgICAgICAgZGVidWcoRjEwMSwiWFlDT1VOOiB6IiwiIix6KTsKLSAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSBzZXRudW0oJmNvdW50W2NtZGx2bF0seiwwLDEwMDAwKSk7Ci0jZW5kaWYgLyogTk9T UEwgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgICAgY2FzZSBYWUNBU0U6Ci0gICAgICAgIHJldHVy bihzdWNjZXNzID0gc2V0b24oJmlucGNhc1tjbWRsdmxdKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8K LQotICAgICAgY2FzZSBYWUNNRDogICAgICAgICAgICAgICAgICAgICAgIC8qIENPTU1BTkQgLi4u ICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5KHNjbWR0YWIsbmJ5dHQsIiIsIiIseHhzdHJpbmcp KSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAg ICAgICBjYXNlIFNDTURfQ0JSOgotICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQot ICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBjb25jYigoY2hhcillc2NhcGUp OwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgICAgIGNhc2UgU0NN RF9CU1o6Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiYnl0ZXNpemUgZm9yIGNvbW1hbmQg Y2hhcmFjdGVycywgNyBvciA4IiwiNyIsMTAsJngsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAg aWYgKHggIT0gNyAmJiB4ICE9IDgpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIlxuP1RoZSBj aG9pY2VzIGFyZSA3IGFuZCA4XG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAoeCA9PSA3KSBjbWRtc2sgPSAwMTc3OwotICAgICAg ICAgICAgZWxzZSBpZiAoeCA9PSA4KSBjbWRtc2sgPSAwMzc3OwotICAgICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKLSNpZmRlZiBDS19SRUNBTEwKLSAgICAgICAgICBjYXNlIFNDTURfUkNM OgotICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIm1heGltdW0gbnVtYmVyIG9mIGNvbW1hbmRz IGluIHJlY2FsbCBidWZmZXIiLCIxMCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAxMCwm eCx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAg aWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IGNtcmluaSh4KSk7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0jaWZkZWYgQ0tfUkVD QUxMCi0gICAgICAgICAgY2FzZSBTQ01EX1JUUjoKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gc2V0b24oJmNtX3JldHJ5KSk7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0gICAgICAgICAg Y2FzZSBTQ01EX01PUjogICAgICAgICAgICAgICAgLyogTW9yZS1wcm9tcHRpbmcgKi8KLSAgICAg ICAgICAgIHN1Y2Nlc3MgPSBzZXRvbigmeGFza21vcmUpOwotICAgICAgICAgICAgaWYgKHN1Y2Nl c3MpCi0gICAgICAgICAgICAgIHNhdmVhc2sgPSB4YXNrbW9yZTsKLSAgICAgICAgICAgIHJldHVy bihzdWNjZXNzKTsKLSAgICAgICAgICBjYXNlIFNDTURfUVVPOgotICAgICAgICAgICAgaWYgKCh4 ID0gc2V0b24oJnkpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgICAgIGNtZHNxdW8oeSk7ICAg ICAgICAgICAgICAgICAvKiBEbyBpdCB0aGUgcmlnaHQgd2F5ICovCi0gICAgICAgICAgICBjbWRf cXVvdGluZyA9IHk7ICAgICAgICAgICAgLyogQWxzbyBrZWVwIGEgZ2xvYmFsIGNvcHkgKi8KLSAg ICAgICAgICAgIC8qIFNldCBzdHJpbmctcHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotI2lmZGVmIGRh dGFnZW5lcmFsCi0gICAgICAgICAgICB4eHN0cmluZyA9IHkgPyB6enN0cmluZyA6ICh4eF9zdHJw KSBOVUxMOwotI2Vsc2UKLSNpZmRlZiBDS19BTlNJQwotICAgICAgICAgICAgeHhzdHJpbmcgPSB5 ID8genpzdHJpbmcgOiAoeHhfc3RycCkgTlVMTDsKLSNlbHNlCi0gICAgICAgICAgICB4eHN0cmlu ZyA9IHkgPyB6enN0cmluZyA6ICh4eF9zdHJwKSBOVUxMOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MSk7Ci0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9MT0NBTAotICAgICAgICAgIGNhc2UgU0NNRF9D T0w6IHsgICAgICAgICAgICAgIC8qIENvbW1hbmQtc2NyZWVuIGNvbG9ycyAqLwotICAgICAgICAg ICAgICBpbnQgZmcsIGJnOwotICAgICAgICAgICAgICBmZyA9IGNta2V5KHR0eWNscnRhYiwgbmNs cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImZvcmVncm91bmQgY29sb3IgYW5kIHRoZW4g YmFja2dyb3VuZCBjb2xvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIndoaXRlIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZyk7Ci0gICAgICAgICAgICAgIGlmIChmZyA8 IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKGZnKTsKLSAgICAgICAgICAgICAgaWYgKChiZyA9 IGNta2V5KHR0eWNscnRhYixuY2xycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJi YWNrZ3JvdW5kIGNvbG9yIiwiYmxhY2siLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAg IHJldHVybihiZyk7Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAg ICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgIGNvbG9yY21kID0gZmcgfCBiZyA8 PCA0OwotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgIH0KLSAg ICAgICAgICBjYXNlIFNDTURfU0NSOiAgICAgICAgICAgICAgICAvKiBDb21tYW5kIFNjcm9sbGJh Y2sgc2l6ZSAqLwotICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIkNPTU1BTkQgc2Nyb2xsYmFj ayBidWZmZXIgc2l6ZSwgbGluZXMiLCI1MTIiLDEwLCZ4LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAg ICAgIC8qIFRoZSBtYXggbnVtYmVyIG9mIGxpbmVzIGlzIHRoZSBSQU0gICovCi0gICAgICAgICAg ICAvKiB3ZSBjYW4gYWN0dWFsbHkgZGVkaWNhdGUgdG8gYSAgICAgICAqLwotICAgICAgICAgICAg Lyogc2Nyb2xsYmFjayBidWZmZXIgZ2l2ZW4gdGhlIG1heGltdW0gKi8KLSAgICAgICAgICAgIC8q IHByb2Nlc3MgbWVtb3J5IHNwYWNlIG9mIDUxMk1CICAgICAgICovCi0gICAgICAgICAgICBpZiAo eCA8IDI1NiB8fCB4ID4gMjAwMDAwMEwpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIlxuP1Ro ZSBzaXplIG11c3QgYmUgYmV0d2VlbiAyNTYgYW5kIDIsMDAwLDAwMC5cbiIpOwotICAgICAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp ZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICAgIHR0X3NjcnNpemVb VkNNRF0gPSB4OwotICAgICAgICAgICAgVnNjcm5Jbml0KCBWQ01EICk7Ci0gICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICAgICAgY2FzZSBTQ01EX1dJRDogewotICAgICAg ICAgICAgICBpZiAoKHkgPSBjbW51bSgiTnVtYmVyIG9mIGNvbHVtbnMgaW4gZGlzcGxheSB3aW5k b3ciLAotICAgICAgICAgICAgICAgICAgICAgICAgICI4MCIsMTAsJngseHhzdHJpbmcpKSA8IDAp Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApIHJldHVybih5KTsKLQotICAgICAgICAgICAgICBvczJfc2V0Y21kd2lkdGgoeCk7 Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgfQotICAgICAg ICAgIGNhc2UgU0NNRF9ISUc6Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiTnVtYmVyIG9m IHJvd3MgaW4gZGlzcGxheSB3aW5kb3ciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIjI0 IiwxMCwmeCx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgICBvczJf c2V0Y21kaGVpZ2h0KHgpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAg ICAgICAgIGNhc2UgU0NNRF9TVEE6IHsKLSAgICAgICAgICAgICAgZXh0ZXJuIGludCBtYXJnaW5i b3Q7Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmlu ZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp IHJldHVybih4KTsKLSAgICAgICAgICAgICAgaWYgKHkgIT0gdHRfc3RhdHVzW1ZDTURdKSB7Ci0g ICAgICAgICAgICAgICAgICAvKiBNaWdodCBuZWVkIHRvIGZpeHVwIHRoZSBtYXJnaW5zICovCi0g ICAgICAgICAgICAgICAgICB0dF9zdGF0dXNbVkNNRF0gPSB5OwotICAgICAgICAgICAgICAgICAg aWYgKHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICB0dF9zemNobmdbVkNNRF0gPSAyOwotICAg ICAgICAgICAgICAgICAgICAgIHR0X3Jvd3NbVkNNRF0tLTsKLSAgICAgICAgICAgICAgICAgICAg ICBjbWRfcm93cy0tOwotICAgICAgICAgICAgICAgICAgICAgIFZzY3JuSW5pdChWQ01EKTsgIC8q IEhlaWdodCBzZXQgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsK LSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgdHRfc3pj aG5nW1ZDTURdID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICB0dF9yb3dzW1ZDTURdKys7Ci0g ICAgICAgICAgICAgICAgICAgICAgY21kX3Jvd3MrKzsKLSAgICAgICAgICAgICAgICAgICAgICBW c2NybkluaXQoVkNNRCk7ICAvKiBIZWlnaHQgc2V0IGhlcmUgKi8KLSAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwot ICAgICAgICAgIH0KLQotICAgICAgICAgIGNhc2UgU0NNRF9DVVI6IHsKLSAgICAgICAgICAgICAg aW50IHJvdywgY29sOwotICAgICAgICAgICAgICBwb3NpdGlvbiAqIHBwb3M7Ci0KLSAgICAgICAg ICAgICAgcHBvcyA9IFZzY3JuR2V0Q3VyUG9zKFZDTUQpOwotI2lmZGVmIE5UCi0jZGVmaW5lIGl0 b2EgX2l0b2EKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgICBpdG9hKHBwb3MtPnkrMSwg dG1wYnVmLCAxMCk7Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJyb3cgKDEtYmFzZWQp Iix0bXBidWYsMTAsJnJvdyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4o eSk7Ci0KLSAgICAgICAgICAgICAgaXRvYShwcG9zLT54KzEsIHRtcGJ1ZiwgMTApOwotICAgICAg ICAgICAgICBpZiAoKHkgPSBjbW51bSgiY29sICgxLWJhc2VkKSIsdG1wYnVmLDEwLCZjb2wseHhz dHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLQotICAgICAgICAgICAgICBsZ290b3h5 KCBWQ01ELCBjb2wsIHJvdyApIDsKLSAgICAgICAgICAgICAgVnNjcm5Jc0RpcnR5KCBWQ01EICk7 Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzPTEpOwotICAgICAgICAgIH0KLSNlbmRpZiAv KiBOT0xPQ0FMICovCi0jZWxzZQotICAgICAgICAgIGNhc2UgU0NNRF9XSUQ6Ci0gICAgICAgICAg ICB5ID0gY21udW0oIkNvbW1hbmQgc2NyZWVuIHdpZHRoLCBjaGFyYWN0ZXJzIiwiODAiLDEwLCZ4 LHh4c3RyaW5nKTsKLSAgICAgICAgICAgIHJldHVybihzZXRudW0oJmNtZF9jb2xzLHgseSwxMDI0 KSk7Ci0KLSAgICAgICAgICBjYXNlIFNDTURfSElHOgotICAgICAgICAgICAgeSA9IGNtbnVtKCJD b21tYW5kIHNjcmVlbiBoZWlnaHQsIHJvd3MiLCIyNCIsMTAsJngseHhzdHJpbmcpOwotICAgICAg ICAgICAgcmV0dXJuKHNldG51bSgmY21kX3Jvd3MseCx5LDEwMjQpKTsKLSNlbmRpZiAvKiBPUzIg Ki8KLQotICAgICAgICAgIGNhc2UgU0NNRF9JTlQ6Ci0gICAgICAgICAgICByZXR1cm4oc2V0b24o JmNtZGludCkpOwotCi0jaWZkZWYgQ0tfQVVUT0RMCi0gICAgICAgICAgY2FzZSBTQ01EX0FETDoK LSAgICAgICAgICAgIHJldHVybihzZXRvbigmY21kYWRsKSk7Ci0jZW5kaWYgLyogQ0tfQVVUT0RM ICovCi0KLSNpZmRlZiBET1VCTEVRVU9USU5HCi0gICAgICAgICAgY2FzZSBTQ01EX0RCUTogewot ICAgICAgICAgICAgICBleHRlcm4gaW50IGRibHF1bzsKLSAgICAgICAgICAgICAgcmV0dXJuKHNl dG9uKCZkYmxxdW8pKTsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogRE9VQkxFUVVPVElORyAqLwot Ci0JICBjYXNlIFNDTURfRVJSOgotICAgICAgICAgICAgeSA9IGNtbnVtKCJFcnJvciBtZXNzYWdl IHZlcmJvc2l0eSBsZXZlbCwgMC0zIiwiMSIsMTAsJngseHhzdHJpbmcpOwotICAgICAgICAgICAg cmV0dXJuKHNldG51bSgmY21kX2Vycix4LHksMykpOwotCi0JICBjYXNlIFNDTURfVkFSOgotCSAg ICByZXR1cm4oc2V0dmFyZXZhbCgpKTsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg ICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoICh4eCkgewotCi0g ICAgICBjYXNlIFhZREZMVDogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIERFRkFVTFQgPSBD RCAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IGRvY2QoWFhDV0QpKTsKLQotY2FzZSBYWURF QlU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBERUJVRyB7IG9uLCBvZmYsIHNl c3Npb24gfSAqLwotICAgICAgICBpZiAoKHkgPSBjbWtleShkYmd0YWIsbmRiZywiIiwiIix4eHN0 cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGlmICh5ID09IERFQl9U SU0pCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgIHJldHVybihzZXRvbigmZGVidGltKSA8IDAg PyB4IDogKHN1Y2Nlc3MgPSAxKSk7Ci0jZWxzZQotICAgICAgICAgIC8qIHdoeSB0aGlzIGNoYW5n ZT8gKi8KLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZkZWJ0aW0pKTsKLSNlbmRp ZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlciAmJiBp c2d1ZXN0KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5c clxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLSNlbmRpZiAv KiBJS1NEICovCi0KLSAgICAgICAgc3dpdGNoICh5KSB7Ci0gICAgICAgICAgY2FzZSBERUJfTEVO OgotICAgICAgICAgICAgeSA9IGNtbnVtKCJNYXggbGVuZ3RoIGZvciBkZWJ1ZyBsb2cgc3RyaW5n cyIsIiIsMTAsJngseHhzdHJpbmcpOwotICAgICAgICAgICAgaWYgKCh6ID0gc2V0bnVtKCZkZWJ4 bGVuLHgseSwtMSkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAgICAg aWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICAgICAgY2FzZSBERUJfT0ZGOgotICAg ICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0jaWZuZGVmIE5PTE9DQUwKLSAgICAgICAgICAgIHNldGRlYnNlcygwKTsKLSNlbmRpZiAvKiBO T0xPQ0FMICovCi0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgIGlmIChkZWJsb2cpIGRvY2xzbG9n KExPR0QpOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwotCi0gICAgICAgICAgY2FzZSBERUJfT046Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSNpZmRlZiBERUJVRwotICAgICAg ICAgICAgZGVibG9nID0gZGVib3BuKCJkZWJ1Zy5sb2ciLCAwKTsKLSAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gZGVibG9nID8gMSA6IDApOwotI2Vsc2UKLSAgICAgICAgICAgIHByaW50Zigi P1NvcnJ5LCBkZWJ1ZyBsb2cgZmVhdHVyZSBub3QgZW5hYmxlZFxuIik7Ci0gICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgICAgY2FzZSBE RUJfU0VTOgotICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAg ICByZXR1cm4oeCk7Ci0jaWZuZGVmIE5PTE9DQUwKLSAgICAgICAgICAgIHNldGRlYnNlcygxKTsK LSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwot Ci0JICBjYXNlIERFQl9NU0c6CQkJLyogRGVidWcgbWVzc2FnZXMgMjAxMC8wMy8xMiAqLwotCSAg ICBpZiAoKHkgPSBjbWtleShvb2V0YWIsbm9vZXRhYiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSBy ZXR1cm4oeSk7Ci0JICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCSAgICBk ZWJtc2cgPSB5OwotCSAgICByZXR1cm4oMSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0K LSNpZm5kZWYgTk9YRkVSCi0gICAgICBjYXNlIFhZREVMQTogICAgICAgICAgICAgICAgICAgICAg LyogU0VUIERFTEFZICovCi0gICAgICAgIHkgPSBjbW51bSgiTnVtYmVyIG9mIHNlY29uZHMgYmVm b3JlIHN0YXJ0aW5nIHRvIHNlbmQiLAotICAgICAgICAgICAgICAgICAgIjUiLDEwLCZ4LHh4c3Ry aW5nKTsKLSAgICAgICAgaWYgKHggPCAwKSB4ID0gMDsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSBzZXRudW0oJmNrZGVsYXkseCx5LDk5OSkpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0gICAg ICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHh4KSB7Ci0j aWZkZWYgQ0tfVEFQSQotICAgICAgY2FzZSBYWVRBUEk6Ci0gICAgICAgIHJldHVybihzZXR0YXBp KCkpOwotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSNpZm5kZWYgTk9ESUFMCi0gICAgICBjYXNlIFhZ RElBTDogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIE1PREVNIG9yIFNFVCBESUFMICovCi0g ICAgICAgIHJldHVybihzZXRkaWFsKC0xKSk7Ci0gICAgICBjYXNlIFhZTU9ETToKLSAgICAgICAg cmV0dXJuKHNldG1vZGVtKCkpOwotI2lmZGVmIENPTU1FTlQKLSAgICAgIC8qIG5vdCBpbXBsZW1l bnRlZCB5ZXQgKi8KLSAgICAgIGNhc2UgWFlBTlNXRVI6ICAgICAgICAgICAgICAgICAgICAvKiBT RVQgQU5TV0VSICovCi0gICAgICAgIHJldHVybihzZXRhbnN3ZXIoKSk7Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICAgIGNh c2UgWFlEVVBMOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgRFVQTEVYICovCi0gICAgICAg IGlmICgoeSA9IGNta2V5KGRweHRhYiwyLCIiLCJmdWxsIix4eHN0cmluZykpIDwgMCkgcmV0dXJu KHkpOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAg ZHVwbGV4ID0geTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgY2FzZSBY WUxDTEU6ICAgICAgICAgICAgICAgICAgICAgIC8qIExPQ0FMLUVDSE8gKD0gRFVQTEVYKSAqLwot ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZkdXBsZXgpKTsKLQotICAgICAgY2FzZSBY WUVTQzogICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBFU0NBUEUgKi8KLSAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSBzZXRjYyhja2l0b2EoREZFU0MpLCZlc2NhcGUpKTsKLSNlbmRpZiAvKiBO T0xPQ0FMICovCi0KLSAgICAgIGNhc2UgWFlFWElUOiAgICAgICAgICAgICAgICAgICAgICAvKiBT RVQgRVhJVCAqLwotICAgICAgICBpZiAoKHogPSBjbWtleSh4aXR0YWIsbmV4aXQsIiIsIiIseHhz dHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICBzd2l0Y2ggKHopIHsK LSAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTVEFUVVMgKi8KLSAg ICAgICAgICAgIHkgPSBjbW51bSgiRVhJVCBzdGF0dXMgY29kZSIsIiIsMTAsJngseHhzdHJpbmcp OwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRudW0oJnhpdHN0YSx4LHksLTEpKTsK LSAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAvKiBXQVJOSU5HICovCi0g ICAgICAgICAgICBpZiAoKHogPSBjbWtleSh4aXR3dGFiLG5leGl0dywiIiwiIix4eHN0cmluZykp IDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAgICAgaWYgKCh5ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgICBzZXRleGl0d2Fybih6KTsKLSAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgY2FzZSAyOgotICAgICAgICAg ICAgc3VjY2VzcyA9IHNldG9uKCZleGl0b25jbG9zZSk7Ci0jaWZkZWYgVENQU09DS0VUCi0gICAg ICAgICAgICBpZiAoc3VjY2VzcykgdG5fZXhpdCA9IGV4aXRvbmNsb3NlOwotI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotICAgICAgICAgIGNhc2Ug MzogewotICAgICAgICAgICAgICBleHRlcm4gaW50IGV4aXRoYW5ndXA7Ci0gICAgICAgICAgICAg IHJldHVybigoc3VjY2VzcyA9IHNldG9uKCZleGl0aGFuZ3VwKSkpOwotICAgICAgICAgIH0KLSAg ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfSAvKiBF bmQgb2YgU0VUIEVYSVQgc3dpdGNoKCkgKi8KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr OwotICAgIH0KLQotICAgIHN3aXRjaCAoeHgpIHsKLQotICAgICAgY2FzZSBYWUZJTEU6ICAgICAg ICAgICAgICAgICAgICAgIC8qIFNFVCBGSUxFICovCi0gICAgICAgIHJldHVybihzZXRmaWwocm1z ZmxnKSk7Ci0KLSAgICAgIGNhc2UgWFlGTE9XOiB7ICAgICAgICAgICAgICAgICAgICAvKiBGTE9X LUNPTlRST0wgKi8KLSAgICAgICAgICBleHRlcm4gaW50IGN4Zmxvd1tdOwotICAgICAgICAgIHN0 cnVjdCBGREIgazEsIGsyOwotICAgICAgICAgIGludCB0bmNvbXBvcnQgPSAwOwotICAgICAgICAg IGNoYXIgKiBtOwotCi0jaWZkZWYgVE5fQ09NUE9SVAotICAgICAgICAgIGlmIChuZXR3b3JrICYm IGlzdG5jb21wb3J0KCkpCi0gICAgICAgICAgICB0bmNvbXBvcnQgPSAxOwotI2VuZGlmIC8qIFRO X0NPTVBPUlQgKi8KLQotICAgICAgICAgIGlmICh0bmNvbXBvcnQpIHsKLSAgICAgICAgICAgICAg bSA9ICJGbG93IGNvbnRyb2wgdHlwZSwgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG5cCi0gICBkdHIv Y2QgICAgZHRyL2N0cyAgIGtlZXAgICAgbm9uZSAgICBydHMvY3RzICAgeG9uL3hvZmZcblwKLSBv ciBjb25uZWN0aW9uIHR5cGUiOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLyogQWxs IHRoaXMgaXMgYmVjYXVzZSBjaGFpbmVkIEZEQidzIGRvbid0IGdpdmUgY2hhaW5lZCBoZWxwIHll dCAqLwotICAgICAgICAgICAgICBtID0KLSNpZmRlZiBQbGFuOQotI2lmZGVmIENLX1JUU0NUUwot ICAgICAgICAgICAiRmxvdyBjb250cm9sIHR5cGUsIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuXAot ICAga2VlcCAgIG5vbmUgICAgcnRzL2N0c1xuXAotIG9yIGNvbm5lY3Rpb24gdHlwZSIsCi0jZWxz ZQotICAgICAgICAgICAiRmxvdyBjb250cm9sIHR5cGUsIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxu XAotICAga2VlcCAgIG5vbmVcblwKLSBvciBjb25uZWN0aW9uIHR5cGUiOwotI2VuZGlmIC8qIENL X1JUU0NUUyAqLwotI2Vsc2UKLSNpZmRlZiBDS19SVFNDVFMKLSNpZmRlZiBDS19EVFJDRAotI2lm ZGVmIENLX0RUUkNUUwotICAgICAgICAgICAiRmxvdyBjb250cm9sIHR5cGUsIG9uZSBvZiB0aGUg Zm9sbG93aW5nOlxuXAotICAgZHRyL2NkICAgIGR0ci9jdHMgICBrZWVwICAgIG5vbmUgICAgcnRz L2N0cyAgIHhvbi94b2ZmXG5cCi0gb3IgY29ubmVjdGlvbiB0eXBlIjsKLSNlbHNlIC8qIENLX0RU UkNUUyAqLwotICAgICAgICAgICAiRmxvdyBjb250cm9sIHR5cGUsIG9uZSBvZiB0aGUgZm9sbG93 aW5nOlxuXAotICAgZHRyL2NkICAgIGtlZXAgICAgbm9uZSAgICBydHMvY3RzICAgeG9uL3hvZmZc blwKLSAgICAgICAgICAgIG9yIGNvbm5lY3Rpb24gdHlwZSI7Ci0jZW5kaWYgLyogQ0tfRFRSQ1RT ICovCi0jZWxzZSAvKiBDS19EVFJDRCAqLwotI2lmZGVmIENLX0RUUkNUUwotICAgICAgICAgICAi RmxvdyBjb250cm9sIHR5cGUsIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuXAotICAgZHRyL2N0cyAg IGtlZXAgICBub25lICAgIHJ0cy9jdHMgICB4b24veG9mZlxuXAotIG9yIGNvbm5lY3Rpb24gdHlw ZSI7Ci0jZWxzZSAvKiBDS19EVFJDVFMgKi8KLSAgICAgICAgICAgIkZsb3cgY29udHJvbCB0eXBl LCBvbmUgb2YgdGhlIGZvbGxvd2luZzpcblwKLSAgIGtlZXAgICBub25lICAgIHJ0cy9jdHMgICB4 b24veG9mZlxuXAotIG9yIGNvbm5lY3Rpb24gdHlwZSI7Ci0jZW5kaWYgLyogQ0tfRFRSQ1RTICov Ci0jZW5kaWYgLyogQ0tfRFRSQ0QgKi8KLSNlbHNlCi0gICAgICAgICAgICJGbG93IGNvbnRyb2wg dHlwZSwgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG5cCi0gICBrZWVwICAgbm9uZSAgICB4b24veG9m ZlxuXAotIG9yIGNvbm5lY3Rpb24gdHlwZSI7Ci0jZW5kaWYgLyogQ0tfUlRTQ1RTICovCi0jZW5k aWYgLyogUGxhbjkgKi8KLSAgICAgICAgICB9Ci0gICAgICAgICAgY21mZGJpKCZrMSxfQ01LRVks bSwiIiwiIixuY3h0eXBlc3csIDQsIHh4c3RyaW5nLCBjeHR5cGVzdywgJmsyKTsKLSAgICAgICAg ICBjbWZkYmkoJmsyLAotICAgICAgICAgICAgICAgICBfQ01LRVksCi0gICAgICAgICAgICAgICAg ICIiLAotICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICAgIiIsCi0jaWZkZWYg VE5fQ09NUE9SVAotICAgICAgICAgICAgICAgICAodG5jb21wb3J0ID8gbnRuZmxvIDogbmZsbyks Ci0jZWxzZQotICAgICAgICAgICAgICAgICBuZmxvLAotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8K LSAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgeHhzdHJpbmcsCi0jaWZkZWYg VE5fQ09NUE9SVAotICAgICAgICAgICAgICAgICAodG5jb21wb3J0ID8gdG5mbG90YWIgOiBmbG90 YWIpLAotI2Vsc2UKLSAgICAgICAgICAgICAgICAgZmxvdGFiLAotI2VuZGlmIC8qIFROX0NPTVBP UlQgKi8KLSAgICAgICAgICAgICAgICAgTlVMTAotICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgIHggPSBjbWZkYigmazEpOwotICAgICAgICAgIGlmICh4IDwgMCkgeyAgICAgICAgICAgICAg ICAgIC8qIEVycm9yICovCi0gICAgICAgICAgICAgIGlmICh4ID09IC0yIHx8IHggPT0gLTkpCi0g ICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm8ga2V5d29yZHMgb3Igc3dpdGNoZXMgbWF0Y2g6IFwi JXNcIlxuIixhdG1idWYpOwotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgfQot ICAgICAgICAgIHogPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgICAgIC8qIEtleXdvcmQgdmFsdWUg Ki8KLSAgICAgICAgICBpZiAoY21yZXN1bHQuZmRiYWRkciA9PSAmazIpIHsgLyogRmxvdy1jb250 cm9sIHR5cGUga2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApICAgIC8qIFNldCBpdCBpbW1lZGlhdGVseSAqLwotICAgICAgICAgICAgICAgIHJldHVy bih4KTsKLSAgICAgICAgICAgICAgZmxvdyA9IHo7Ci0gICAgICAgICAgICAgIGRlYnVnKEYxMDEs InNldCBmbG93IiwiIixmbG93KTsKLSNpZmRlZiBDS19TUEVFRAotICAgICAgICAgICAgICBpZiAo ZmxvdyA9PSBGTE9fWE9OWCkgICAgIC8qIFhvbi9Yb2ZmIGZvcmNlcyBwcmVmaXhpbmcgKi8KLSAg ICAgICAgICAgICAgICBjdGxwW1hPTl0gPSBjdGxwW1hPRkZdID0gY3RscFtYT04rMTI4XSA9IGN0 bHBbWE9GRisxMjhdID0gMTsKLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotICAgICAgICAgICAgICBh dXRvZmxvdyA9IChmbG93ID09IEZMT19BVVRPKTsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsgICAgICAvKiBEb25lICovCi0gICAgICAgICAgfQotICAgICAgICAgIGRlYnVnKEYx MDEsInNldCBmbG93IC9ibGFoIDEiLCIiLHopOyAvKiBTRVQgRkxPVyAvZm9yLXdoYXQgKi8KLSAg ICAgICAgICBpZiAoKHkgPSBjbWtleShmbG90YWIsbmZsbywiRmxvdyBjb250cm9sIHR5cGUiLCJu b25lIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAg ZGVidWcoRjEwMSwic2V0IGZsb3cgL2JsYWggMiIsIiIseSk7Ci0gICAgICAgICAgaWYgKHkgPT0g RkxPX0FVVE8pIHsKLSAgICAgICAgICAgICAgcHJpbnRmKAotICAiP1NvcnJ5LCBcImF1dG9tYXRp Y1wiIGNhbiBub3QgYmUgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIHR5cGUuXG4iKTsKLSAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICB9IGVsc2UgaWYgKHogPj0gMCAmJiB6IDw9 IENYVF9NQVgpCi0gICAgICAgICAgICBjeGZsb3dbel0gPSB5OwotICAgICAgICAgIGRlYnVnKEYx MDEsInNldCBmbG93IiwiIixmbG93KTsKLSAgICAgICAgICBkZWJ1ZyhGMTAxLCJzZXQgZmxvdyBh dXRvZmxvdyIsIiIsYXV0b2Zsb3cpOwotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0g ICAgICB9Ci0KLSAgICAgIGNhc2UgWFlIQU5EOiAgICAgICAgICAgICAgICAgICAgICAvKiBIQU5E U0hBS0UgKi8KLSAgICAgICAgaWYgKCh5ID0gY21rZXkoaHNodGFiLG5oc2gsIiIsIm5vbmUiLHh4 c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGlmICh5ID09IDk5OCkgewotICAgICAg ICAgICAgaWYgKCh4ID0gY21udW0oIkFTQ0lJIHZhbHVlIiwiIiwxMCwmeSx4eHN0cmluZykpIDwg MCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgaWYgKCh5IDwgMSkgfHwg KCh5ID4gMzEpICYmICh5ICE9IDEyNykpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2hh cmFjdGVyIG11c3QgYmUgaW4gQVNDSUkgY29udHJvbCByYW5nZVxuIik7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgdHVybiA9ICh5ID4gMDEyNykgPyAw IDogMTsKLSAgICAgICAgdHVybmNoID0geTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK LQotI2lmbmRlZiBOT1NQTAotICAgICAgY2FzZSBYWU1BQ1I6ICAgICAgICAgICAgICAgICAgICAg IC8qIFNFVCBNQUNSTyAqLwotICAgICAgICBpZiAoKHkgPSBjbWtleShzbWFjdGFiLDIsIiIsIiIs eHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgc3dpdGNoICh5KSB7Ci0gICAgICAg ICAgY2FzZSAwOiByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZtZWNobykpOwotICAgICAgICAgIGNh c2UgMTogcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmbWVycm9yW2NtZGx2bF0pKTsKLSAgICAgICAg ICBkZWZhdWx0OiByZXR1cm4oLTIpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQot ICAgICAgY2FzZSBYWU1TR1M6Ci0jaWZkZWYgVk1TCi0gICAgICAgIGlmICgoeiA9IGNta2V5KG9u b2ZmLDIsIiIsIiIseHhzdHJpbmcpKSA8IDApIHJldHVybih6KTsKLSAgICAgICAgaWYgKCh5ID0g Y21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIHZtc19tc2dzID0gejsKLSAgICAgICAg cHJpbnRmKCJTb3JyeSwgU0VUIE1FU1NBR0VTIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwotICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgZGVmYXVs dDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoICh4eCkgewotCi0gICAgICBj YXNlIFhZUEFSSTogICAgICAgICAgICAgICAgICAgICAgLyogUEFSSVRZICovCi0gICAgICAgIGlm ICgoeSA9IGNta2V5KHBhcnRibCxucGFyLCIiLCJub25lIix4eHN0cmluZykpIDwgMCkKLSAgICAg ICAgICByZXR1cm4oeSk7Ci0KLSAgICAgICAgLyogSWYgcGFyaXR5IG5vdCBub25lLCB0aGVuIHdl IGFsc28gd2FudCA4dGgtYml0IHByZWZpeGluZyAqLwotCi0jaWZkZWYgSFdQQVJJVFkKLSAgICAg ICAgaWYgKHkgPT0gJ0gnKSB7ICAgICAgICAgICAgICAgICAvKiBIYXJkd2FyZSAqLwotICAgICAg ICAgICAgaWYgKCh4ID0gY21rZXkoaHdwYXJ0Ymwsbmh3cGFyLCIiLCJldmVuIix4eHN0cmluZykp IDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICB9Ci0jZW5kaWYgLyogSFdQ QVJJVFkgKi8KLQotICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0 dXJuKHopOwotCi0jaWZkZWYgSFdQQVJJVFkKLSAgICAgICAgaWYgKHkgPT0gJ0gnKSB7ICAgICAg ICAgICAgICAgICAvKiA4IGRhdGEgYml0cyBwbHVzIGhhcmR3YXJlIHBhcml0eSAqLwotICAgICAg ICAgICAgcGFyaXR5ID0gMDsKLSNpZm5kZWYgTk9YRkVSCi0gICAgICAgICAgICBlYnFmbGcgPSAw OwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAgICAgICAgaHdwYXJpdHkgPSB4OwotICAgICAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcgZGF0YSBiaXRzICsgc29mdHdh cmUgcGFyaXR5ICovCi0gICAgICAgICAgICBod3Bhcml0eSA9IDA7Ci0jZW5kaWYgLyogSFdQQVJJ VFkgKi8KLSAgICAgICAgICAgIHBhcml0eSA9IHk7Ci0jaWZuZGVmIE5PWEZFUgotICAgICAgICAg ICAgZWJxZmxnID0gKHBhcml0eSkgPyAxIDogMDsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNpZmRl ZiBIV1BBUklUWQotICAgICAgICB9Ci0jZW5kaWYgLyogSFdQQVJJVFkgKi8KLQotI2lmZGVmIFRO X0NPTVBPUlQKLSAgICAgICAgaWYgKG5ldHdvcmsgJiYgaXN0bmNvbXBvcnQoKSkKLSAgICAgICAg ICB0bnNldHRpbmdzKHBhcml0eSwgMCk7Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotCi0gICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSNpZm5kZWYgTk9GUklMTFMKLSAgICAgIGNhc2Ug WFlQUk9NOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgUFJPTVBUICovCi0vKgotICBOb3Rl OiB4eHN0cmluZyBub3QgaW52b2tlZCBoZXJlLiAgSW5zdGVhZCwgaXQgaXMgaW52b2tlZCBldmVy eSB0aW1lIHRoZQotICBwcm9tcHQgaXMgaXNzdWVkLiAgVGhpcyBhbGxvd3MgdGhlIHByb21wdCBz dHJpbmcgdG8gY29udGFpbiB2YXJpYWJsZXMKLSAgdGhhdCBjYW4gY2hhbmdlLCBsaWtlIFx2KGRp ciksIFx2KHRpbWUpLCBldGMuCi0qLwotICAgICAgICBja21ha21zZyhsaW5lLCAgICAgICAgICAg ICAgICAgIC8qIERlZmF1bHQgbWlnaHQgaGF2ZSB0cmFpbGluZyBzcGFjZSAqLwotICAgICAgICAg ICAgICAgICBMSU5CVUZTSVosCi0gICAgICAgICAgICAgICAgICJ7IiwKLSAgICAgICAgICAgICAg ICAgaW5zZXJ2ZXIgPyBpa3Byb21wdCA6IGNrcHJvbXB0LAotICAgICAgICAgICAgICAgICAifSIs Ci0gICAgICAgICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgaWYg KCh4ID0gY210eHQoIlByb2dyYW0ncyBjb21tYW5kIHByb21wdCIsbGluZSwmcyxOVUxMKSkgPCAw KQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgcyA9IGJyc3RyaXAocyk7ICAgICAgICAg ICAgICAgICAvKiBSZW1vdmUgZW5jbG9zaW5nIGJyYWNlcywgaWYgYW55ICovCi0gICAgICAgIGNt c2V0cChzKTsgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHRoZSBwcm9tcHQgKi8KLSAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZuZGVm IE5PWEZFUgotICAgICAgY2FzZSBYWVJFVFI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFJFVFJZ OiBwZXItcGFja2V0IHJldHJ5IGxpbWl0ICovCi0gICAgICAgIHkgPSBjbW51bSgiTWF4aW11bSBy ZXRyaWVzIHBlciBwYWNrZXQiLCIxMCIsMTAsJngseHhzdHJpbmcpOwotICAgICAgICBpZiAoeCA8 IDApIHggPSAwOwotICAgICAgICBpZiAoKHggPSBzZXRudW0oJm1heHRyeSx4LHksOTk5KSkgPCAw KSByZXR1cm4oeCk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICBpZiAobWF4dHJ5IDw9IHdzbG90 cikgewotICAgICAgICAgICAgcHJpbnRmKCI/UmV0cnkgbGltaXQgbXVzdCBiZSBncmVhdGVyIHRo YW4gd2luZG93IHNpemVcbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAg ICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgaWYgKHJtc2ZsZykgewotICAg ICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjQwMyIsIGNraXRvYShtYXh0cnkpLCAiIik7 Ci0gICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgfSBlbHNlIHJldHVy bihzdWNjZXNzID0geCk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9TRVJWRVIK LSAgICAgIGNhc2UgWFlTRVJWOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgU0VSVkVSIGl0 ZW1zICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5KHNydnRhYixuc3J2dCwiIiwiIix4eHN0cmlu ZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAgICAgICBjYXNl IFhZU0VSSToKLSAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJOdW1iZXIgb2Ygc2Vjb25kcywg b3IgMCBmb3Igbm8gaWRsZSB0aW1lb3V0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIw IiwxMCwmeCx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgICAgIGlmICgo eSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotI2lmbmRlZiBPUzIK LSAgICAgICAgICAgIHNydnRpbSA9IDA7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICBz cnZpZGwgPSB4OwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICBj YXNlIFhZU0VSVDoKLSAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJJbnRlcnZhbCBmb3Igc2Vy dmVyIE5BS3MsIDAgPSBub25lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShE U1JWVElNKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLCZ4LCB4eHN0cmluZykpIDwg MCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgaWYgKHggPCAwKSB7Ci0g ICAgICAgICAgICAgICAgcHJpbnRmKAotICAgICAgICAgICAgICAgICAgICJcbj9TcGVjaWZ5IGEg cG9zaXRpdmUgbnVtYmVyLCBvciAwIGZvciBubyBzZXJ2ZXIgTkFLc1xuIik7Ci0gICAgICAgICAg ICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh5ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAocm1zZmxnKSB7Ci0gICAgICAg ICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjQwNCIsIGNraXRvYSh4KSwgIiIpOwotICAg ICAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotICAgICAgICAgICAgfSBlbHNlIHsK LSNpZm5kZWYgT1MyCi0gICAgICAgICAgICAgICAgc3J2aWRsID0gMDsKLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICAgICAgICAgICAgICBzcnZ0aW0gPSB4OyAgICAgICAgICAgICAvKiBTZXQgdGhlIHNl cnZlciB0aW1lb3V0IHZhcmlhYmxlICovCi0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIFhZU0VSRDogICAgICAgICAgICAg ICAgICAvKiBTRVJWRVIgRElTUExBWSAqLwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBz ZXRvbigmc3J2ZGlzKSk7IC8qIE9OIG9yIE9GRi4uLiAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAg ICAgICAgY2FzZSBYWVNFUlA6ICAgICAgICAgICAgICAgICAgLyogU0VSVkVSIEdFVC1QQVRIICov Ci0gICAgICAgICAgICByZXR1cm4ocGFyc2RpcigyKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQot ICAgICAgICAgIGNhc2UgWFlTRVJMOiAgICAgICAgICAgICAgICAgIC8qIFNFUlZFUiBMT0dJTiAq LwotICAgICAgICAgICAgcmV0dXJuKGNrbG9naW4oKSk7Ci0KLSAgICAgICAgICBjYXNlIFhZU0VS QzogICAgICAgICAgICAgICAgICAvKiBTRVJWRVIgQ0QtTUVTU0FHRSAqLwotICAgICAgICAgICAg eCA9IHJtc2ZsZyA/Ci0gICAgICAgICAgICAgIGNta2V5KG9ub2ZmLDIsIiIsIiIseHhzdHJpbmcp IDoKLSAgICAgICAgICAgICAgICBjbWtleShjZG1zZywzLCIiLCIiLHh4c3RyaW5nKTsKLSAgICAg ICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAg aWYgKHggPT0gMikgeyAgICAgICAgICAgICAgIC8qIENELU1FU1NBR0UgRklMRSAqLwotICAgICAg ICAgICAgICAgIGlmICgoeCA9IGNtdHh0KCJOYW1lIG9mIGZpbGUiLCIiLCZzLE5VTEwpKSA8IDAp Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgaWYgKCEqcykg ewotICAgICAgICAgICAgICAgICAgICBzID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgc3J2 Y2Rtc2cgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZj ZG1zZ3N0cixzKTsKLSAgICAgICAgICAgICAgICBtYWtlbGlzdChjZG1zZ3N0cixjZG1zZ2ZpbGUs OCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgICAgICAvKiBDRC1NRVNTQUdFIE9O L09GRiAqLwotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAocm1zZmxn KSB7Ci0gICAgICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjQyMCIsIHggPyAiMSIg OiAiMCIsICIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHggPiAwKQotICAgICAgICAgICAg ICAgICAgc3J2Y2Rtc2cgfD0gMTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg ICAgICBzcnZjZG1zZyAmPSAyOwotICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBYWVNFUks6ICAgICAgICAgICAgICAgICAg LyogU0VSVkVSIEtFRVBBTElWRSAqLwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRv bigmc3J2cGluZykpOyAvKiBPTiBvciBPRkYuLi4gKi8KLQotICAgICAgICAgIGRlZmF1bHQ6Ci0g ICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8K LSAgICB9Ci0KLSAgICBzd2l0Y2ggKHh4KSB7Ci0jaWZkZWYgVU5JWAotI2lmbmRlZiBOT0pDCi0g ICAgICBjYXNlIFhZU1VTUDogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFNVU1BFTkQgKi8K LSAgICAgICAgc2V0b24oJnhzdXNwZW5kKTsJCS8qIG9uIG9yIG9mZi4uLiAqLwotICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOwotI2VuZGlmIC8qIE5PSkMgKi8KLSNlbmRpZiAvKiBVTklYICov Ci0KLSAgICAgIGNhc2UgWFlUQUtFOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEFLRSAq LwotICAgICAgICBpZiAoKHkgPSBjbWtleSh0YWt0YWIsNCwiIiwiIix4eHN0cmluZykpIDwgMCkg cmV0dXJuKHkpOwotICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAgICAgICBjYXNlIDA6IHJldHVy bihzdWNjZXNzID0gc2V0b24oJnRlY2hvKSk7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgY2Fz ZSAxOiByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZ0YWtlcnJbY21kbHZsXSkpOwotI2Vsc2UKLSAg ICAgICAgICBjYXNlIDE6IHJldHVybihzdWNjZXNzID0gc2V0b24oJnRha2Vyclt0bGV2ZWxdKSk7 Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgICBjYXNlIDI6IHRlY2hvID0gMDsgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsgLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCAqLwotICAgICAgICAgIGNh c2UgMzogdGVjaG8gPSAxOyByZXR1cm4oc3VjY2VzcyA9IDEpOyAvKiBNUy1ET1MgS2VybWl0ICov Ci0gICAgICAgICAgZGVmYXVsdDogcmV0dXJuKC0yKTsKLSAgICAgICAgfQotCi0jaWZuZGVmIE5P U0NSSVBUCi0gICAgICBjYXNlIFhZU0NSSTogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFND UklQVCAqLwotICAgICAgICBpZiAoKHkgPSBjbWtleShzY3J0YWIsMSwiIiwiZWNobyIseHhzdHJp bmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgc3dpdGNoICh5KSB7Ci0gICAgICAgICAgY2Fz ZSAwOiByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzZWNobykpOwotICAgICAgICAgIGRlZmF1bHQ6 IHJldHVybigtMik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1NDUklQVCAqLwotCi0gICAgICBk ZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSNpZm5kZWYgTk9MT0NBTAotICAgIHN3 aXRjaCAoeHgpIHsKLSAgICAgIGNhc2UgWFlURVJNOiAgICAgICAgICAgICAgICAgICAgICAvKiBT RVQgVEVSTUlOQUwgKi8KLSAgICAgICAgeCA9IHNldHRybSgpOwotICAgICAgICBzdWNjZXNzID0g KHggPiAwKSA/IDEgOiAwOwotICAgICAgICByZXR1cm4oeCk7Ci0KLSNpZmRlZiBOVAotICAgICAg Y2FzZSBYWVdJTjk1OiAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBXSU45NSB3b3JrYXJvdW5k cyAqLwotICAgICAgICB4ID0gc2V0d2luOTUoKTsKLSAgICAgICAgc3VjY2VzcyA9ICh4ID4gMCA/ IDEgOiAwKTsKLSAgICAgICAgcmV0dXJuKHgpOwotI2VuZGlmIC8qIE5UICovCi0KLSNpZmRlZiBP UzIKLSAgICAgIGNhc2UgWFlETFI6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgRElBTEVS IHdvcmthcm91bmRzICovCi0gICAgICAgIHggPSBzZXRkaWFsZXIoKTsKLSAgICAgICAgc3VjY2Vz cyA9ICh4ID4gMCA/IDEgOiAwKTsKLSAgICAgICAgcmV0dXJuKHgpOwotCi0gICAgICBjYXNlIFhZ VElUTEU6ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRJVExFIG9mIHdpbmRvdyAqLwotICAg ICAgICB4ID0gc2V0dGl0bGUoKTsKLSAgICAgICAgc3VjY2VzcyA9ICh4ID4gMCA/IDEgOiAwKTsK LSAgICAgICAgcmV0dXJuKHgpOwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgT1MyTU9VU0UK LSAgICAgIGNhc2UgWFlNT1VTRTogICAgICAgICAgICAgICAgICAgICAvKiBTRVQgTU9VU0UgKi8K LSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRtb3UoKSk7Ci0jZW5kaWYgLyogT1MyTU9VU0Ug Ki8KLQotICAgICAgY2FzZSBYWUJFTEw6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBCRUxM ICovCi0gICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0YmVsbCgpKTsKLQotI2lmZGVmIE9TMgot ICAgICAgY2FzZSBYWVBSVFk6Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0cHJ0eSgpICk7 Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAg IH0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSAgICBzd2l0Y2ggKHh4KSB7Ci0KLS8qIFNFVCBT RU5EL1JFQ0VJVkUgcHJvdG9jb2wgcGFyYW1ldGVycy4gKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAg ICAgIGNhc2UgWFlSRUNWOgotICAgICAgY2FzZSBYWVNFTkQ6Ci0gICAgICAgIHJldHVybihzZXRz cih4eCxybXNmbGcpKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0g ICAgICBjYXNlIFhZU0VTUzogICAgICAgICAgICAgICAgICAgICAgLyogU0VTU0lPTi1MT0cgKi8K LSAgICAgICAgaWYgKCh4ID0gY21rZXkoc2Z0dGFiLG5zZnR0YWIsInR5cGUgb2YgZmlsZSIsCi0j aWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgICAgICJiaW5hcnkiLAotI2Vsc2UgLyogT1My ICovCi0gICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwKLSNlbmRpZiAvKiBPUzIgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgKQot ICAgICAgICAgICAgICkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh5 ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgaWYgKHggPT0g OTk5KSB7ICAgICAgICAgICAgICAgICAvKiBUSU1FU1RBTVBFRC1URVhUICovCi0gICAgICAgICAg ICBzZXNzZnQgPSBYWUZUX1Q7ICAgICAgICAgICAgLyogSW1wbGllcyB0ZXh0ICovCi0gICAgICAg ICAgICBzbG9ndHMgPSAxOyAgICAgICAgICAgICAgICAgLyogYW5kIHRpbWVzdGFtcHMgKi8KLQl9 IGVsc2UgaWYgKHggPT0gOTk4KSB7CQkvKiBOVUxMLVBBRERFRC1MSU5FUyAqLwotICAgICAgICAg ICAgc2xvZ251bCA9IDE7CQkvKiBhZGRzIE5VTCBhZnRlciBeSiAqLwotICAgICAgICB9IGVsc2Ug eyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEEgcmVndWxhciB0eXBlICovCi0gICAgICAgICAg ICBzZXNzZnQgPSB4OyAgICAgICAgICAgICAgICAgLyogVGhlIHR5cGUgKi8KLSAgICAgICAgICAg IHNsb2d0cyA9IDA7ICAgICAgICAgICAgICAgICAvKiBObyB0aW1lc3RhbXBlcyAqLwotICAgICAg ICB9Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGNhc2UgWFlTUEVFOiAg ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgU1BFRUQgKi8KLSAgICAgICAgbHAgPSBsaW5lOwot ICAgICAgICBpZiAobG9jYWwgJiYgIW5ldHdvcmspIHsKLSAgICAgICAgICBja21ha21zZyhscCwK LSAgICAgICAgICAgICAgICAgICBMSU5CVUZTSVosCi0gICAgICAgICAgICAgICAgICAgIlRyYW5z bWlzc2lvbiByYXRlIGZvciAiLAotICAgICAgICAgICAgICAgICAgIHR0bmFtZSwKLSAgICAgICAg ICAgICAgICAgICAiIChiaXRzIHBlciBzZWNvbmQpIiwKLSAgICAgICAgICAgICAgICAgICBOVUxM Ci0gICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBja3N0 cm5jcHkobHAsCi0gICAgICAgICAgICAgICAgICAgICJTZXJpYWwtcG9ydCBzcGVlZCAoYml0cyBw ZXIgc2Vjb25kKSIsCi0gICAgICAgICAgICAgICAgICAgIExJTkJVRlNJWgotICAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICB9Ci0gICAgICAgIHp6ID0gLTFMOwotCi0jaWZkZWYgVE5fQ09N UE9SVAotICAgICAgICBpZiAobmV0d29yayAmJiBpc3RuY29tcG9ydCgpKQotICAgICAgICAgIHgg PSBjbWtleSh0bnNwZHRhYixudG5zcGQsbGluZSwiIix4eHN0cmluZyk7Ci0gICAgICAgIGVsc2UK LSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0gICAgICAgICAgeCA9IGNta2V5KHNwZHRhYixuc3Bk LGxpbmUsIiIseHhzdHJpbmcpOwotICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgICAgIGlm ICh4ID09IC0zKSBwcmludGYoIj92YWx1ZSByZXF1aXJlZFxuIik7Ci0jaWZkZWYgVVNFVENTRVRT UEVFRAotICAgICAgICAgICAgLyogSW4gdGhpcyBjYXNlLCBhbnkgbnVtYmVyIGNhbiBiZSB0cmll ZCAqLwotICAgICAgICAgICAgLyogVGhlcmUncyBhIHBhcnNlIGVycm9yIG1lc3NhZ2UgYnV0IHRo ZSByZXF1ZXN0IHN0aWxsIGdvZXMgdGhydSAqLwotICAgICAgICAgICAgaWYgKHJkaWdpdHMoYXRt YnVmKSkKLSAgICAgICAgICAgICAgenogPSBhdG9sKGF0bWJ1Zik7Ci0gICAgICAgICAgICBlbHNl Ci0jZW5kaWYgLyogVVNFVENTRVRTUEVFRCAqLwotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0jaWZk ZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1Nv cnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgIGlmICghbG9jYWwp IHsKLSAgICAgICAgICAgIHByaW50ZigiP1NFVCBTUEVFRCBoYXMgbm8gZWZmZWN0IHdpdGhvdXQg cHJpb3IgU0VUIExJTkVcbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAg ICAgICAgfSBlbHNlIGlmIChuZXR3b3JrCi0jaWZkZWYgVE5fQ09NUE9SVAotICAgICAgICAgICAg ICAgICAgICYmICFpc3RuY29tcG9ydCgpCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotICAgICAg ICAgICAgICAgICAgICkgewotICAgICAgICAgICAgcHJpbnRmKCJcbj9TcGVlZCBjYW5ub3QgYmUg c2V0IGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zXG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMCk7Ci0gICAgICAgIH0KLQotLyoKLSAgTm90ZTogVGhpcyB3YXkgb2YgaGFuZGxpbmcg c3BlZWRzIGlzIG5vdCAxNi1iaXQgc2FmZSBmb3Igc3BlZWRzIGdyZWF0ZXIKLSAgdGhhbiAyMzA0 MDAuICBUaGUgYXJndW1lbnQgdG8gdHRzc3BkKCkgc2hvdWxkIGhhdmUgYmVlbiBhIGxvbmcuCi0q LwotI2lmZGVmIFVTRVRDU0VUU1BFRUQKLSAgICAgICAgaWYgKHp6ID4gLTFMKQotICAgICAgICAg IHggPSB6eiAvIDEwTDsKLSNlbmRpZiAvKiBVU0VUQ1NFVFNQRUVEICovCi0gICAgICAgIHp6ID0g KGxvbmcpIHggKiAxMEw7Ci0gICAgICAgIGlmICh6eiA9PSAxMzBMKSB6eiA9IDEzNEw7Ci0gICAg ICAgIGlmICh6eiA9PSA3MEwpIHp6ID0gNzVMOyAgICAgICAgLyogKHNlZSBzcGR0YWJbXSBkZWZp bml0aW9uKSAqLwotICAgICAgICBpZiAodHRzc3BkKHgpIDwgMCkgIHsgICAgICAgICAgIC8qIENh bGwgdHRzc3BkIHdpdGggY3BzLCBub3QgYnBzISAqLwotICAgICAgICAgICAgcHJpbnRmKCI/VW5z dXBwb3J0ZWQgbGluZSBzcGVlZCAtICVsZFxuIix6eik7Ci0gICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOwotICAgICAgICB9IGVsc2UgewotI2lmZGVmIENLX1RBUEkKLSAgICAgICAgICAg IGlmICghdHR0YXBpIHx8IHRhcGlwYXNzKQotICAgICAgICAgICAgICBzcGVlZCA9IHR0Z3NwZCgp OyAgICAgICAgIC8qIFJlYWQgaXQgYmFjayAqLwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg ICAgICBzcGVlZCA9IHp6OwotI2Vsc2UgLyogQ0tfVEFQSSAqLwotICAgICAgICAgICAgc3BlZWQg PSB0dGdzcGQoKTsgICAgICAgICAgIC8qIFJlYWQgaXQgYmFjayAqLwotI2VuZGlmIC8qIENLX1RB UEkgKi8KLSAgICAgICAgICAgIGlmIChzcGVlZCAhPSB6eikgIHsgICAgICAgICAvKiBDYWxsIHR0 c3NwZCB3aXRoIGNwcywgbm90IGJwcyEgKi8KLSAgICAgICAgICAgICAgICBwcmludGYoIj9TRVQg U1BFRUQgZmFpbHMsIHNwZWVkIGlzICVsZFxuIixzcGVlZCk7Ci0gICAgICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwZmxhZyAm JiAheGNtZHNyYykgewotICAgICAgICAgICAgICAgIGlmIChzcGVlZCA9PSA4ODgwKQotICAgICAg ICAgICAgICAgICAgcHJpbnRmKCIlcywgNzUvMTIwMCBicHNcbiIsdHRuYW1lKTsKLSAgICAgICAg ICAgICAgICBlbHNlIGlmIChzcGVlZCA9PSAxMzQpCi0gICAgICAgICAgICAgICAgICBwcmludGYo IiVzLCAxMzQuNSBicHNcbiIsdHRuYW1lKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg ICAgICAgICAgICBwcmludGYoIiVzLCAlbGQgYnBzXG4iLHR0bmFtZSxzcGVlZCk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICB9Ci0jZW5k aWYgLyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgICAgY2FzZSBYWVhGRVI6ICAg ICAgICAgICAgICAgICAgICAgIC8qIFNFVCBUUkFOU0ZFUiAqLwotICAgICAgICBpZiAoKHkgPSBj bWtleShybXNmbGcgPyBydHN0YWIgOiB0c3RhYiwgLyogKG9yIFJFTU9URSBTRVQgVFJBTlNGRVIp ICovCi0gICAgICAgICAgICAgICAgICAgICAgIHJtc2ZsZyA/IG5ydHMgOiBudHMsCi0gICAgICAg ICAgICAgICAgICAgICAgICIiLCJjaGFyYWN0ZXItc2V0Iix4eHN0cmluZykpIDwgMCkgcmV0dXJu KHkpOwotICAgICAgICBzd2l0Y2ggKHkpIHsKLSNpZmRlZiBYRlJDQU4KLSAgICAgICAgICBjYXNl IFhZWF9DQU46ICAgICAgICAgICAgICAgICAvKiBDQU5DRUxMQVRJT04gKi8KLSAgICAgICAgICAg IGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIiIseHhzdHJpbmcpKSA8IDApIHJldHVybih6KTsK LSAgICAgICAgICAgIGlmICh6ID09IDApIHsgICAgICAgICAgICAgICAvKiBPRkYgKi8KLSAgICAg ICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICAg ICAgICB4ZnJjYW4gPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp ZiAoKHkgPSBjbW51bSgiQVNDSUkgY29kZSBmb3IgY2FuY2VsbGF0aW9uIGNoYXJhY3RlciIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiLDEwLCZ4LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJu KHkpOwotICAgICAgICAgICAgICAgIGlmICh4ID4gMzEgJiYgeCAhPSAxMjcpIHsKLSAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCJDYW5jZWwgY2hhcmFjdGVyIG11c3QgYmUgMC0zMSBvciAxMjdc biIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiSG93IG1hbnkgcmVxdWlyZWQgdG8gY2F1 c2UgY2FuY2VsbGF0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIsMTAs JnosIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICAgICAgICAgIGlmICh6IDwgMikgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIk51bWJl ciBtdXN0IGJlIDIgb3IgZ3JlYXRlclxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigt OSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIHhmcmNhbiA9IDE7ICAgICAgICAgICAg IC8qIENBTkNFTExBVElPTiBPTiAqLwotICAgICAgICAgICAgICAgIHhmcmNociA9IHg7ICAgICAg ICAgICAgIC8qIFVzaW5nIHRoaXMgY2hhcmFjdGVyICovCi0gICAgICAgICAgICAgICAgeGZybnVt ID0gejsgICAgICAgICAgICAgLyogTmVlZGluZyB0aGlzIG1hbnkgb2YgdGhlbSAqLwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSNlbmRpZiAvKiBYRlJD QU4gKi8KLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgICAgICAgY2FzZSBYWVhfQ1NFOiAgICAgICAg ICAgICAgICAgLyogQ0hBUkFDVEVSLVNFVCAqLwotICAgICAgICAgICAgaWYgKCh5ID0gY21rZXko dGNzdGFiLG50Y3MsIiIsInRyYW5zcGFyZW50Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAg ICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eCk7Ci0gICAgICAgICAgICBpZiAocm1zZmxnKSB7Ci0gICAgICAgICAgICAgICAgc3N0YXRlID0g c2V0Z2VuKCdTJywgIjQwNSIsIHRjc2luZm9beV0uZGVzaWduYXRvciwgIiIpOwotICAgICAgICAg ICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICAgICBleHRlcm4gaW50IHNfY3NldCwgZmNoYXJzZXQsIGF4Y3NldFtdLCB0Y3Nfc2F2 ZTsKLSAgICAgICAgICAgICAgICB0c2xldmVsID0gKHkgPT0gVENfVFJBTlNQKSA/IDAgOiAxOyAv KiB0cmFuc2ZlciBzeW50YXggbGV2ZWwgKi8KLQkJeGZyeGxhID0gdHNsZXZlbDsKLSAgICAgICAg ICAgICAgICB0Y2hhcnNldCA9IHk7ICAgICAgICAgICAvKiB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0 ICovCi0gICAgICAgICAgICAgICAgLyogU0VORCBDSEFSQUNURVItU0VUIEFVVE8gKi8KLSAgICAg ICAgICAgICAgICBpZiAodHNsZXZlbCA+IDAgJiYgc19jc2V0ID09IFhNT0RFX0EpCi0gICAgICAg ICAgICAgICAgICBpZiAoeSA+IC0xICYmIHkgPD0gTUFYVENTRVRTKQotICAgICAgICAgICAgICAg ICAgICBpZiAoYXhjc2V0W3ldID4gLTEgJiYgYXhjc2V0W3ldID4gTUFYRkNTRVRTKQotICAgICAg ICAgICAgICAgICAgICAgIGZjaGFyc2V0ID0gYXhjc2V0W3ldOyAvKiBBdXRvLXBpY2sgZmlsZSBj aGFyc2V0ICovCi0gICAgICAgICAgICAgICAgc2V0eGxhdHlwZSh0Y2hhcnNldCxmY2hhcnNldCk7 IC8qIFRyYW5zbGF0aW9uIHR5cGUgKi8KLQkJdGNzX3NhdmUgPSAtMTsKLSAgICAgICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5PQ1NFVFMg Ki8KLQotICAgICAgICAgIGNhc2UgWFlYX0xTSDogICAgICAgICAgICAgICAgIC8qIExPQ0tJTkct U0hJRlQgKi8KLSAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KGxzdGFiLG5scywiIiwib24iLHh4 c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgICAgIGxzY2FwciA9ICh5ID09 IDEpID8gMSA6IDA7ICAvKiBPTjogcmVxdWVzdGVkID0gMSAqLwotICAgICAgICAgICAgbHNjYXB1 ID0gKHkgPT0gMikgPyAyIDogMDsgIC8qIEZPUkNFRDogIHVzZWQgPSAxICovCi0gICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0vKiAjaWZkZWYgQ0tfWFlaICovCi0gICAgICAgICAg Y2FzZSBYWVhfUFJPOiAgICAgICAgICAgICAgICAgLyogUHJvdG9jb2wgKi8KLSNpZm5kZWYgT1My Ci0gICAgICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9T b3JyeSwgb25seSBLZXJtaXQgcHJvdG9jb2wgaXMgYXZhaWxhYmxlXG4iKTsKLSAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAg ICAgICAgcmV0dXJuKHNldHByb3RvKCkpOwotLyogI2VuZGlmICovIC8qIENLX1hZWiAqLwotCi0g ICAgICAgICAgY2FzZSBYWVhfTU9EOiAgICAgICAgICAgICAgICAgLyogTW9kZSAqLwotICAgICAg ICAgICAgaWYgKCh5ID0gY21rZXkoeGZybXRhYiwyLCIiLCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgICAgIGlmIChybXNmbGcpIHsKLSAgICAgICAg ICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiNDEwIiwgeSA9PSBYTU9ERV9BID8gIjAiIDog IjEiLCAiIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKChpbnQpc3N0YXRlKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGdfeGZlcm1vZGUgPSB5OwotICAgICAgICAgICAgeGZlcm1vZGUg PSB5OwotI2lmZGVmIE5FV0ZUUAotCSAgICBpZiAoZnRwaXNvcGVuKCkpIHsJCS8qIElmIGFuIEZU UCBjb25uZWN0aW9uIGlzIG9wZW4gKi8KLQkJZXh0ZXJuIGludCBmdHBfeGZlcm1vZGU7IC8qIGNo YW5nZSBpdHMgdHJhbnNmZXIgbW9kZSB0b28gKi8KLQkJZnRwX3hmZXJtb2RlID0geGZlcm1vZGU7 Ci0JICAgIH0JICAgICAgCi0jZW5kaWYJLyogTkVXRlRQICovCi0gICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICAgICAgICBjYXNlIFhZWF9ESVM6 ICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5ICovCi0gICAgICAgICAgICByZXR1cm4oZG94ZGlz KDEpKTsJCS8qIDEgPT0gS2VybWl0ICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0gICAgICAg ICAgY2FzZSBYWVhfU0xPOiAgICAgICAgICAgICAgICAgLyogU2xvdy1zdGFydCAqLwotICAgICAg ICAgICAgcmV0dXJuKHNldG9uKCZzbG9zdGFydCkpOwotCi0jaWZuZGVmIE5PU1BMCi0gICAgICAg ICAgY2FzZSBYWVhfQ1JDOiAgICAgICAgICAgICAgICAgLyogQ1JDICovCi0gICAgICAgICAgICBy ZXR1cm4oc2V0b24oJmRvY3JjKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgICAgICAgIGNh c2UgWFlYX0JFTDogICAgICAgICAgICAgICAgIC8qIEJlbGwgKi8KLSAgICAgICAgICAgIHJldHVy bihzZXRvbigmeGZyYmVsKSk7Ci0KLSNpZmRlZiBQSVBFU0VORAotICAgICAgICAgIGNhc2UgWFlY X1BJUDogICAgICAgICAgICAgICAgIC8qIFBpcGVzICovCi0jaWZuZGVmIE5PUFVTSAotICAgICAg ICAgICAgaWYgKG5vcHVzaCkgewotI2VuZGlmIC8qIE5PUFVTSCAqLwotICAgICAgICAgICAgICAg IHByaW50ZigiU29ycnksIGFjY2VzcyB0byBwaXBlcyBpcyBkaXNhYmxlZFxuIik7Ci0gICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSNpZm5kZWYgTk9QVVNICi0gICAgICAgICAgICB9IGVsc2UK LSNlbmRpZiAvKiBOT1BVU0ggKi8KLSAgICAgICAgICAgICAgcmV0dXJuKHNldG9uKCZ1c2VwaXBl cykpOwotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLSAgICAgICAgICBjYXNlIFhZWF9JTlQ6ICAg ICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRpb24gKi8KLSAgICAgICAgICAgIHJldHVybihzZXRv bigmeGZyaW50KSk7Ci0KLSAgICAgICAgICBjYXNlIFhZWF9YTEE6Ci0gICAgICAgICAgICByZXR1 cm4oc2V0b24oJnhmcnhsYSkpOyAgICAgLyogVHJhbnNsYXRpb24gKi8KLQotICAgICAgICAgIGNh c2UgWFlYX01TRzogewotICAgICAgICAgICAgICBleHRlcm4gY2hhciAqIHhmcm1zZzsKLSAgICAg ICAgICAgICAgaWYgKCh4ID0gY210eHQoIlByb21wdCBzdHJpbmciLCIiLCZzLHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgaWYgKCEqcykg cyA9IE5VTEw7Ci0gICAgICAgICAgICAgIG1ha2VzdHIoJnhmcm1zZyxzKTsKLSAgICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotCSAgfQotCSAgY2FzZSBYWVhfUlBUOiB7Ci0JICAg ICAgZXh0ZXJuIGludCB3aGVyZWZsZzsKLQkgICAgICByZXR1cm4oc2V0b24oJndoZXJlZmxnKSk7 Ci0gICAgICAgICAgfQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4oLTIp OwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgfQotCi0gICAgc3dpdGNoICh4 eCkgewotCi0jaWZuZGVmIE5PWE1JVAotICAgICAgY2FzZSBYWVhNSVQ6ICAgICAgICAgICAgICAg ICAgICAgIC8qIFNFVCBUUkFOU01JVCAqLwotICAgICAgICByZXR1cm4oc2V0eG1pdCgpKTsKLSNl bmRpZiAvKiBOT1hNSVQgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSNpZm5kZWYgTk9DU0VUUwotICAg ICAgY2FzZSBYWVVOQ1M6ICAgICAgICAgICAgICAgICAgICAgIC8qIFVOS05PV04tQ0hBUkFDVEVS LVNFVCAqLwotICAgICAgICBpZiAoKHkgPSBjbWtleShpZmR0YWIsMiwiIiwiZGlzY2FyZCIseHhz dHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeCk7Ci0gICAgICAgIHVua2NzID0geTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYg Tk9QVVNICi0jaWZkZWYgVU5JWAotICAgICAgY2FzZSBYWVdJTEQ6ICAgICAgICAgICAgICAgICAg ICAgIC8qIFdJTERDQVJELUVYUEFOU0lPTiAqLwotICAgICAgICBpZiAoKHkgPSBjbWtleSh3aWxk dGFiLG53aWxkLAotICAgICAgICAgICAgICAgICAgICAgICAiV2lsZGNhcmQgZXhwYW5zaW9uIG9w dGlvbiIsIm9uIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAg IGlmICgoeiA9IGNta2V5KHdkb3R0YWIsCi0gICAgICAgICAgICAgICAgICAgICAgIDIsCi0gICAg ICAgICAgICAgICAgICAgICAgICJ3aGV0aGVyIHRvIG1hdGNoIGZpbGVuYW1lcyB0aGF0IHN0YXJ0 IHdpdGggXCIuXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAiL25vLW1hdGNoLWRvdC1maWxl cyIsCi0gICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKQotICAgICAgICAgICAgICkgPCAw KQotICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeCk7Ci0gICAgICAgIGlmIChub3B1c2gpIHsKLSAgICAgICAgICAgIGlmICh5ID4gMCkg ewotICAgICAgICAgICAgICAgIHByaW50ZigiU2hlbGwgZXhwYW5zaW9uIGlzIGRpc2FibGVkXG4i KTsKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICAgICAgfQot ICAgICAgICB9Ci0Jc3dpdGNoICh5KSB7Ci0JICBjYXNlIFdJTERfT046Ci0JICAgIHdpbGRlbmEg PSAxOyAKLQkgICAgYnJlYWs7Ci0JICBjYXNlIFdJTERfT0ZGOgotCSAgICB3aWxkZW5hID0gMDsg Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBXSUxEX0tFUjoKLQkgICAgd2lsZHhwYW5kID0gMDsgCQkv KiBUaGVzZSBhcmUgdGhlIHByZXZpb3VzICovCi0JICAgIGJyZWFrOwkJCS8qIGhhcmR3aXJlZCB2 YWx1ZXMgKi8KLQkgIGNhc2UgV0lMRF9TSEU6Ci0JICAgIHdpbGR4cGFuZCA9IDE7IAotCSAgICBi cmVhazsKLQl9Ci0gICAgICAgIG1hdGNoZG90ID0gejsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogTk9QVVNIICovCi0KLSNpZm5kZWYg Tk9YRkVSCi0gICAgICBjYXNlIFhZV0lORDogICAgICAgICAgICAgICAgICAgICAgLyogV0lORE9X LVNMT1RTICovCi0gICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LKSB7Ci0gICAgICAgICAg ICB5ID0gY21udW0oIldpbmRvdyBzaXplIGZvciBLZXJtaXQgcHJvdG9jb2wsIDEgdG8gMzIiLAot ICAgICAgICAgICAgICAgICAgICAgICIxIiwgMTAsICZ4LCB4eHN0cmluZyk7Ci0gICAgICAgICAg ICB5ID0gc2V0bnVtKCZ6LHgseSxNQVhXUyk7ICAgLyogPT0gMzIgKi8KLSAgICAgICAgfQotI2lm ZGVmIENLX1hZWgotICAgICAgICBlbHNlIGlmIChwcm90b2NvbCA9PSBQUk9UT19aKSB7Ci0gICAg ICAgICAgICB5ID0gY21udW0oIldpbmRvdyBzaXplIGZvciBaTU9ERU0gcHJvdG9jb2wsIDAgdG8g NjU1MzUiLAotICAgICAgICAgICAgICAgICAgICAgICIwIiwgMTAsICZ4LCB4eHN0cmluZyk7Ci0g ICAgICAgICAgICB5ID0gc2V0bnVtKCZ6LHgseSw2NTUzNSk7Ci0gICAgICAgIH0KLSNlbmRpZiAv KiBDS19YWVogKi8KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB5ID0gY21udW0oIldpbmRv dyBzaXplIGZvciBjdXJyZW50IHByb3RvY29sIiwKLSAgICAgICAgICAgICAgICAgICAgICAiIiwg MTAsICZ4LCB4eHN0cmluZyk7Ci0gICAgICAgICAgICB5ID0gc2V0bnVtKCZ6LHgseSw2NTQ3Mik7 ICAgLyogRG9lc24ndCBtYXR0ZXIgLSB3ZSB3b24ndCB1c2UgaXQgKi8KLSAgICAgICAgfQotICAg ICAgICBpZiAoeSA8IDApIHJldHVybih5KTsKLSAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RP X0spIHsKLSAgICAgICAgICAgIGlmICh6IDwgMSkKLSAgICAgICAgICAgICAgeiA9IDE7Ci0gICAg ICAgIH0KLSNpZmRlZiBDS19YWVoKLSAgICAgICAgZWxzZSBpZiAocHJvdG9jb2wgPT0gUFJPVE9f WikgewotICAgICAgICAgICAgLyogWm1vZGVtIHdpbmRvd2luZyBpcyBjbG9zZXIgdG8gS2VybWl0 IHBhY2tldCBsZW5ndGggKi8KLSAgICAgICAgICAgIC8qIHRoYW4gS2VybWl0IHdpbmRvdyBzaXpl LiAgSWYgV2luZG93IHNpemUgaXMgemVybyAgICovCi0gICAgICAgICAgICAvKiBhbiBlbmQgb2Yg ZnJhbWUgYW5kIENSQyBpcyBzZW50IG9ubHkgYXQgdGhlIGVuZCBvZiAqLwotICAgICAgICAgICAg LyogdGhlIGZpbGUgKGRlZmF1bHQpLiAgT3RoZXJ3aXNlLCBhbiBFbmQgb2YgRnJhbWUgICAgKi8K LSAgICAgICAgICAgIC8qIGFuZCBDUkMgYXJlIHNlbnQgYWZ0ZXIgV2luZG93IFNpemUgbnVtYmVy IG9mIGJ5dGVzICovCi0gICAgICAgICAgICBpZiAoeiA8IDApICAgICAgICAgICAgICAgICAgLyog RGlzYWJsZSB3aW5kb3dpbmcgICovCi0gICAgICAgICAgICAgIHogPSAwOwotICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgcHJpbnRmKCI/U0VUIFdJTkRPVyBkb2VzIG5vdCBhcHBseSB0byAl cyBwcm90b2NvbFxuIiwKLSAgICAgICAgICAgICAgICAgICBwdGFiW3Byb3RvY29sXS5wX25hbWUK LSAgICAgICAgICAgICAgICAgICApOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0K LSNpZmRlZiBDT01NRU5UCi0gICAgICAgIC8qIFRoaXMgaXMgdGFrZW4gY2FyZSBvZiBhdXRvbWF0 aWNhbGx5IG5vdyBpbiBwcm90b2NvbCBuZWdvdGlhdGlvbiAqLwotICAgICAgICBpZiAobWF4dHJ5 IDwgeikgewotICAgICAgICAgICAgcHJpbnRmKCI/V2luZG93IHNsb3RzIG11c3QgYmUgbGVzcyB0 aGFuIHJldHJ5IGxpbWl0XG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0g ICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGlmIChwcm90b2NvbCA9PSBQ Uk9UT19LICYmIHJtc2ZsZykgeyAvKiBTZXQgcmVtb3RlIHdpbmRvdyBzaXplICovCi0gICAgICAg ICAgICB3c2xvdHIgPSB6OyAgICAgICAgICAgICAgICAgLyogU2V0IGxvY2FsIHdpbmRvdyBzaXpl IHRvbyAqLwotICAgICAgICAgICAgcHRhYltwcm90b2NvbF0ud2luc2l6ZSA9IHdzbG90cjsKLSAg ICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICI0MDYiLCBja2l0b2EoeiksICIiKTsKLSAg ICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIHdzbG90 ciA9IHo7ICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHJlcXVlc3RlZCB3aW5kb3cgc2l6ZSBo ZXJlICovCi0gICAgICAgIHB0YWJbcHJvdG9jb2xdLndpbnNpemUgPSB3c2xvdHI7IC8qIGFuZCBp biBwcm90b2NvbC1zcGVjaWZpYyB0YWJsZSAqLwotICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJP VE9fSykgeyAgICAgIC8qIEFuZCBmb3IgS2VybWl0IG9ubHkuLi4gKi8KLSAgICAgICAgICAgIHN3 Y2FwciA9ICh3c2xvdHIgPiAxKSA/IDEgOiAwOyAvKiBzZXQgd2luZG93IGJpdCBpbiBjYXBhcyB3 b3JkICovCi0gICAgICAgICAgICBpZiAod3Nsb3RyID4gMSkgeyAgICAgICAgICAgLyogV2luZG93 IHNpemUgPiAxPyAqLwotICAgICAgICAgICAgICAgIC8qIE1heWJlIGFkanVzdCBwYWNrZXQgc2l6 ZSAqLwotICAgICAgICAgICAgICAgIHkgPSBhZGpwa2wodXJwc2l6LHdzbG90cixiaWdyYnNpeik7 Ci0gICAgICAgICAgICAgICAgaWYgKHkgIT0gdXJwc2l6KSB7ICAgICAgLyogRGlkIGl0IGNoYW5n ZT8gKi8KLSAgICAgICAgICAgICAgICAgICAgdXJwc2l6ID0geTsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKG1zZ2ZsZykKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCi0iIEFkanVzdGlu ZyByZWNlaXZlIHBhY2tldC1sZW5ndGggdG8gJWQgZm9yICVkIHdpbmRvdyBzbG90c1xuIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJwc2l6LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3c2xvdHIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHh4KSB7 Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICAgIGNhc2UgWFlPVVRQOiAgICAgICAgICAgICAgICAgICAg ICAvKiBPVVRQVVQgY29tbWFuZCBwYXJhbWV0ZXJzICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5 KG91dHB0YWIsbm91dHB0YWIsIk9VVFBVVCBjb21tYW5kIHBhcmFtZXRlciIsInBhY2luZyIsCi0g ICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5 KTsKLSAgICAgICAgc3dpdGNoKHkpIHsgICAgICAgICAgICAgICAgICAgICAvKiBXaGljaCBwYXJh bWV0ZXIgKi8KLSAgICAgICAgICBjYXNlIE9VVF9QQUM6ICAgICAgICAgICAgICAgICAvKiBQQUNJ TkcgKi8KLSAgICAgICAgICAgIHkgPSBjbW51bSgiTWlsbGlzZWNvbmRzIHRvIHBhdXNlIGJldHdl ZW4gZWFjaCBPVVRQVVQgY2hhcmFjdGVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAiMTAwIiwg MTAsJngseHhzdHJpbmcpOwotICAgICAgICAgICAgeSA9IHNldG51bSgmeix4LHksMTYzODMpOyAg IC8qIFZlcmlmeSBhbmQgZ2V0IGNvbmZpcm1hdGlvbiAqLwotICAgICAgICAgICAgaWYgKHkgPCAw KSByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAoeiA8IDApIHogPSAwOyAgICAgICAgICAgLyog KHNhdmUgc29tZSBzcGFjZSkgKi8KLSAgICAgICAgICAgIHBhY2luZyA9IHo7Ci0gICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgIGNhc2UgT1VUX0VTQzogICAgICAgICAg ICAgICAgIC8qIFNwZWNpYWwtZXNjYXBlcyAqLwotICAgICAgICAgICAgcmV0dXJuKHNldG9uKCZv dXRlc2MpKTsKLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiAoc2hv dWxkbid0IGhhcHBlbikgKi8KLSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSNl bmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgQ0tfU1BFRUQKLSAgICAgIGNhc2UgWFlRQ1RMOiB7 Ci0gICAgICAgICAgc2hvcnQgKnA7Ci0gICAgICAgICAgaW50IHp6OwotICAgICAgICAgIGlmICgo eiA9IGNta2V5KGN0bHRhYiwyLCAiY29udHJvbC1jaGFyYWN0ZXIgcHJlZml4aW5nIG9wdGlvbiIs IiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAg ICByZXR1cm4oeik7Ci0gICAgICAgICAgLyogTWFrZSBzcGFjZSBmb3IgYSB0ZW1wb3JhcnkgY29w eSBvZiB0aGUgcHJlZml4aW5nIHRhYmxlICovCi0KLSAgICAgICAgICBwID0gKHNob3J0ICopbWFs bG9jKDI1NiAqIHNpemVvZihzaG9ydCkpOwotICAgICAgICAgIGlmICghcCkgewotICAgICAgICAg ICAgICBwcmludGYoIj9JbnRlcm5hbCBlcnJvciAtIG1hbGxvYyBmYWlsdXJlXG4iKTsKLSAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZm9yIChpID0gMDsg aSA8IDI1NjsgaSsrKSBwW2ldID0gY3RscFtpXTsgLyogQ29weSBjdXJyZW50IHRhYmxlICovCi0K LSAgICAgICAgICBzd2l0Y2ggKHopIHsKLSAgICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAg ICAgICAgICAvKiBVTlBSRUZJWEVEIGNvbnRyb2wgY2hhcmFjdGVyICovCi0gICAgICAgICAgICBj YXNlIDE6ICAgICAgICAgICAgICAgICAgICAgLyogUFJFRklYRUQgY29udHJvbCBjaGFyYWN0ZXIg Ki8KLSAgICAgICAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAvKiBDb2xsZWN0IGEg bGlzdCBvZiBudW1iZXJzICovCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICAgICAgICB4X2lm bnVtID0gMTsgICAgICAgICAgLyogVHVybiBvZmYgY29tcGxhaW50cyBmcm9tIGV2YWwoKSAqLwot I2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbW51bSgoeiA9 PSAwKSA/Ci0iXG4gTnVtZXJpYyBBU0NJSSB2YWx1ZSBvZiBjb250cm9sIGNoYXJhY3RlciB0aGF0 IG5lZWRzIE5PIHByZWZpeCxcblwKLSBvciB0aGUgd29yZCBcImFsbFwiLCBvciBjYXJyaWFnZSBy ZXR1cm4gdG8gY29tcGxldGUgdGhlIGxpc3QiIDoKLSJcbiBOdW1lcmljIEFTQ0lJIHZhbHVlIG9m IGNvbnRyb2wgY2hhcmFjdGVyIHRoYXQgTVVTVCBCRSBwcmVmaXhlZCxcblwKLSBvciB0aGUgd29y ZCBcImFsbFwiLCBvciBjYXJyaWFnZSByZXR1cm4gdG8gY29tcGxldGUgdGhlIGxpc3QiLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsMTAsJnkseHhzdHJpbmcKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICkpIDwgMCkgewotI2lmbmRlZiBOT1NQTAotICAgICAg ICAgICAgICAgICAgICAgIHhfaWZudW0gPSAwOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAg ICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg ICBpZiAoeCA9PSAtMikgewotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCkgeyBmcmVl KChjaGFyICopcCk7IHAgPSBOVUxMOyB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMTAsIlNFVCBDT05UUk9MIGF0bWJ1ZiIsYXRtYnVmLDApOwotICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoIWNrc3RyY21wKGF0bWJ1ZiwiYWxsIiwzLDApIHx8IC8qICJBTEwiICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2tzdHJjbXAoYXRtYnVmLCJhbCIsMiwwKSB8 fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNrc3RyY21wKGF0bWJ1ZiwiYSIsMSww KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAw KSAvKiBHZXQgY29uZmlybWF0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybih4KTsKLQkJCSAgICAgIHByZWZpeGluZyA9IHogPyBQWF9BTEwgOiBQWF9OT047Ci0J CQkgICAgICBzZXRwcmVmaXgocHJlZml4aW5nKTsKLQkJCSAgICAgIHJldHVybihzdWNjZXNzID0g MSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CS8qIE5vdCBudW1iZXIsIG5v dCBBTEwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICI/UGxlYXNlIHNwZWNpZnkgYSBudW1iZXIgb3IgdGhl IHdvcmQgQUxMXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCkgZnJlZSgoY2hhciAqKXApOwot ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgfQotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgICAg ICAgeF9pZm51bSA9IDA7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZmRlZiBVTlBSRUZJWFpFUk8K LSAgICAgICAgICAgICAgICAgIHp6ID0gMDsKLSNlbHNlCi0jaWZuZGVmIE9TMgotICAgICAgICAg ICAgICAgICAgenogPSAxIC0gejsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICB6eiA9IDA7ICAg ICAgICAgICAgICAgLyogQWxsb3cgMCAoYnV0IG9ubHkgZm9yIFptb2RlbSkgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBVTlBSRUZJWFpFUk8gKi8KLQotICAgICAgICAgICAgLyogcHJp bnRmKCJ4ID0gJWQsIHkgPSAlZCwgeiA9ICVkLCB6eiA9ICVkXG4iLCB4LHkseix6eik7ICovCi0K LSAgICAgICAgICAgICAgICAgIGlmICgoeSA+ICAzMSAmJiB5IDwgMTI3KSB8fCAvKiBBIHNwZWNp ZmljIG51bWVyaWMgdmFsdWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAoeSA+IDE1OSAmJiB5 IDwgMjU1KSB8fCAvKiBDaGVjayB0aGF0IGl0IGlzIGEgdmFsaWQgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAoeSA8IHp6KSB8fCAgICAgICAvKiBjb250cm9sIGNvZGUuICovCi0gICAgICAgICAg ICAgICAgICAgICAgKHkgPiAyNTUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/ VmFsdWVzIGFsbG93ZWQgYXJlOiAlZC0zMSwgMTI3LTE1OSwgMjU1XG4iLHp6KTsKLSAgICAgICAg ICAgICAgICAgICAgICBpZiAocCkgZnJlZSgoY2hhciAqKXApOwotICAgICAgICAgICAgICAgICAg ICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB4 ID0geSAmIDEyNzsgICAgICAgICAgLyogR2V0IDctYml0IHZhbHVlICovCi0gICAgICAgICAgICAg ICAgICBpZiAoeiA9PSAwKSB7ICAgICAgICAgLyogSWYgdGhleSBhcmUgc2F5aW5nIGl0IGlzIHNh ZmUuLi4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBmbG93IGNvbnRyb2wgaXMgWG9u L1hvZmYgKi8KLSAgICAgICAgICAgICAgICAgICAgICBpZiAoKChmbG93ID09IEZMT19YT05YKSAm JgotICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWE9OICYgWE9GRiBjaGFycyBub3Qgc2Fm ZS4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh4ID09IFhPTiB8fCB4ID09IFhPRkYp KQotICAgICAgICAgICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKG1zZ2ZsZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiU29ycnksIG5vdCB3aGlsZSBYb24vWG9mZiBpcyBp biBlZmZlY3QuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHApIGZyZWUoKGNo YXIgKilwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAg ICAgICAgICAgICAgICB9Ci0jaWZkZWYgVE5DT0RFCi0gICAgICAgICAgICAgICAgICAgICAgZWxz ZSBpZiAobmV0d29yayAmJiBJU19URUxORVQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmICh5ID09IENSIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1 bnNpZ25lZCkgeSA9PSAodW5zaWduZWQpIDI1NSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKG1zZ2ZsZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlNvcnJ5 LCBub3Qgb24gYSBURUxORVQgY29ubmVjdGlvbi5cbiIpOwotICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAocCkgZnJlZSgoY2hhciAqKXApOwotICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBUTkNPREUgKi8K LSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIHBbeV0gPSAoY2hhcikgejsg ICAgICAvKiBBbGwgT0ssIHNldCBmbGFnICovCi0gICAgICAgICAgICAgIH0gLyogRW5kIG9mIHdo aWxlIGxvb3AgKi8KLS8qCi0gIEdldCBoZXJlIG9ubHkgaWYgdGhleSBoYXZlIG1hZGUgbm8gbWlz dGFrZXMuICBDb3B5IHRlbXBvcmFyeSB0YWJsZSBiYWNrIHRvCi0gIHBlcm1hbmVudCBvbmUsIHRo ZW4gZnJlZSB0ZW1wb3JhcnkgdGFibGUgYW5kIHJldHVybiBzdWNjZXNzZnVsbHkuCi0qLwotICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIGN0bHBbaV0gPSBwW2ldOwotICAg ICAgICAgICAgICBpZiAocCkgZnJlZSgoY2hhciAqKXApOwotICAgICAgICAgICAgICBpZiAoeiA+ IDApIGNsZWFycnEgPSAwOyAgIC8qIDE5OSAoc2VlIFNFVCBQUkVGSVhJTkcpICovCi0gICAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg ICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICAgIH0KLSAgICAgIH0KLSNlbmRpZiAvKiBDS19T UEVFRCAqLwotICAgIH0KLQotICAgIHN3aXRjaCAoeHgpIHsKLQotI2lmbmRlZiBOT1hGRVIKLSAg ICAgIGNhc2UgWFlSRVBUOgotICAgICAgICBpZiAoKHkgPSBjbWtleShycHR0YWIsMiwKLSAgICAg ICAgICAgICAgICAgICAgICAgInJlcGVhdC1jb3VudCBjb21wcmVzc2lvbiBwYXJhbWV0ZXIiLCIi LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgc3dpdGNoKHkp IHsKLSAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9u KCZycHRlbmEpKTsgLyogUkVQRUFUIENPVU5UUyA9IE9OLCBPRkYgKi8KLSAgICAgICAgICBjYXNl IDE6ICAgICAgICAgICAgICAgICAgICAgICAvKiBSRVBFQVQgTUlOSU5VTSBudW1iZXIgKi8KLSAg ICAgICAgICAgIHByaW50ZigiKG5vdCBpbXBsZW1lbnRlZCB5ZXQsIG5vdGhpbmcgaGFwcGVucylc biIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICBjYXNlIDI6ICAgICAgICAg ICAgICAgICAgICAgICAvKiBSRVBFQVQgUFJFRklYIGNoYXIgKi8KLSAgICAgICAgICAgIGlmICgo eCA9IGNtbnVtKCJBU0NJSSB2YWx1ZSIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApCi0gICAgICAg ICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHgpOwotICAgICAgICAgICAgaWYgKCh6ID4gMzIgJiYgeiA8IDYzKSB8fCAoeiA+IDk1ICYm IHogPCAxMjcpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHkgPT0gMSkgcnB0bWluID0gKENIQVIp IHo7IGVsc2UgbXlycHRxID0gKENIQVIpIHo7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/ SWxsZWdhbCB2YWx1ZSBmb3IgcHJlZml4IGNoYXJhY3RlclxuIik7Ci0gICAgICAgICAgICAgICAg cmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE5PWEZFUiAq LwotCi0jaWZuZGVmIE5PU1BMCi0gICAgICBjYXNlIFhZQUxSTTogewotI2lmbmRlZiBDT01NRU5U Ci0gICAgICAgICAgaW50IHl5OwotICAgICAgICAgIGxvbmcgeno7Ci0gICAgICAgICAgenogPSAt MUw7Ci0gICAgICAgICAgeXkgPSB4X2lmbnVtOwotICAgICAgICAgIHhfaWZudW0gPSAxOyAgICAg ICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGludGVybmFsIGNvbXBsYWludHMgKi8KLSAgICAgICAg ICB5ID0gY21udW0oIlNlY29uZHMgZnJvbSBub3csIG9yIHRpbWUgb2YgZGF5IGFzIGhoOm1tOnNz IiwKLSAgICAgICAgICAgICAgICAgICAgIjAiICwxMCwgJngsIHh4c3RyaW5nKTsKLSAgICAgICAg ICB4X2lmbnVtID0geXk7Ci0gICAgICAgICAgaWYgKHkgPCAwKSB7Ci0gICAgICAgICAgICAgIGlm ICh5ID09IC0yKSB7ICAgICAgICAgICAgLyogSW52YWxpZCBudW1iZXIgb3IgZXhwcmVzc2lvbiAq LwotICAgICAgICAgICAgICAgICAgenogPSB0b2Qyc2VjKGF0bWJ1Zik7IC8qIENvbnZlcnQgdG8g c2VjcyBzaW5jZSBtaWRuaWdodCAqLwotICAgICAgICAgICAgICAgICAgaWYgKHp6IDwgMEwpIHsK LSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9OdW1iZXIsIGV4cHJlc3Npb24sIG9yIHRp bWUgb2YgZGF5IHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkp OwotICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICBjaGFy IG5vd1szMl07ICAgICAvKiBDdXJyZW50IHRpbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICBj aGFyICpwOwotICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdG5vdzsKLSAgICAgICAgICAgICAg ICAgICAgICBwID0gbm93OwotICAgICAgICAgICAgICAgICAgICAgIHp0aW1lKCZwKTsKLSAgICAg ICAgICAgICAgICAgICAgICB0bm93ID0gYXRvbChwKzExKSAqIDM2MDBMICsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGF0b2wocCsxNCkgKiA2MEwgKyBhdG9sKHArMTcpOwotICAgICAgICAgICAg ICAgICAgICAgIGlmICh6eiA8IHRub3cpICAgIC8qIFVzZXIncyB0aW1lIGJlZm9yZSBub3cgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIHp6ICs9IDg2NDAwTDsgICAvKiBTbyBtYWtlIGl0IHRv bW9ycm93ICovCi0gICAgICAgICAgICAgICAgICAgICAgenogLT0gdG5vdzsgICAgICAgLyogU2Vj b25kcyBmcm9tIG5vdy4gKi8KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSBl bHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBp ZiAoeCA8IDApIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCI/QWxhcm0gdGltZSBpcyBpbiB0aGUg cGFzdC5cbiIpOwotICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgIH0KLSAgICAg ICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICBpZiAoenog PiAtMUwpIHsgICAgICAgICAgICAgICAvKiBUaW1lIG9mIGRheSBnaXZlbj8gKi8KLSAgICAgICAg ICAgICAgeCA9IHp6OwotICAgICAgICAgICAgICBpZiAoenogIT0gKGxvbmcpIHgpIHsKLSAgICAg ICAgICAgICAgICAgIHByaW50ZigKLSJTb3JyeSwgYXJpdGhtZXRpYyBvdmVyZmxvdyAtIGhoOm1t OnNzIG5vdCB1c2FibGUgb24gdGhpcyBwbGF0Zm9ybS5cbiIKLSAgICAgICAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgfQot ICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4oc2V0YWxhcm0oKGxvbmcpeCkpOwotICAgICAg fQotI2Vsc2UKLS8qCi0gIFRoaXMgaXMgdG8gYWxsb3cgbG9uZyB2YWx1ZXMgd2hlcmUgaW50IGFu ZCBsb25nIGFyZSBub3QgdGhlIHNhbWUsIGUuZy4KLSAgb24gMTYtYml0IHN5c3RlbXMuICBCdXQg c29tZXRoaW5nIGlzIHdyb25nIHdpdGggaXQuCi0qLwotICAgICAgICBpZiAoKHkgPSBjbXR4dCgi c2Vjb25kcyBmcm9tIG5vdyIsICIwIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJl dHVybih5KTsKLSAgICAgICAgaWYgKHJkaWdpdHMocykpIHsKLSAgICAgICAgICAgIHJldHVybihz ZXRhbGFybShhdG9sKHMpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludGYo IiVzIC0gbm90IGEgbnVtYmVyXG4iLHMpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAg ICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVm IE5PWEZFUgotICAgICAgY2FzZSBYWVBST1RPOgotICAgICAgICByZXR1cm4oc2V0cHJvdG8oKSk7 Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLS8qCi0gIEMtS2VybWl0IHVucHJlZml4ZXMgY29udHJv bCBjaGFyYWN0ZXJzIGF1dG9tYXRpY2FsbHkgb24gbmV0d29yayBjb25uZWN0aW9ucwotICBpZiBD TEVBUi1DSEFOTkVMIGlzIE9OLCB3aGljaCBpdCBpcyBieSBkZWZhdWx0LiAgQnV0IG5vdCBhbGwg bmV0d29yawotICBjb25uZWN0aW9ucyBhcmUgdHJhbnNwYXJlbnQgdG8gYWxsIGNvbnRyb2wgY2hh cmFjdGVycy4gIEZvciBleGFtcGxlLCB0aGUKLSAgREVDLTIwLCBldmVuIHdoZW4geW91IFRFTE5F VCB0byBpdCwgaXMgc2Vuc2l0aXZlIHRvIEN0cmwtTyBhbmQgQ3RybC1ULgotICBJZiB5b3UgdGVs bCBDLUtlcm1pdCB0byBTRVQgQ09OVFJPTCBQUkVGSVggMTUgYW5kL29yIDIwLCBpdCBkb2Vzbid0 IGhlbHAKLSAgYmVjYXVzZSBDTEVBUi1DSEFOTkVMIGlzIHN0aWxsIGluIGVmZmVjdC4gIElmIHRo ZSB1c2VyIGdvZXMgdG8gdGhlIHRyb3VibGUKLSAgdG8gc2V0IHVwIHNvbWUgcHJlZml4aW5nLCB0 aGVuIEtlcm1pdCBzaG91bGQgZG8gd2hhdCB0aGUgdXNlciBzYWlkLiAgSW4KLSAgQy1LZXJtaXQg Ny4xIEFscGhhLjAzIHdlIGNoYW5nZSB0aGUgY29kZSB0byBzZXQgY2xlYXJycSB0byAwIGlmIHRo ZSB1c2VyCi0gIGdpdmVzIGEgU0VUIFBSRUZJWElORyBvciBTRVQgQ09OVFJPTCBQUkVGSVggY29t bWFuZC4KLSovCi0KLSNpZmRlZiBDS19TUEVFRAotICAgICAgY2FzZSBYWVBSRUZJWDogewotI2lm ZGVmIENPTU1FTlQKLSAgICAgICAgICBleHRlcm4gaW50IGNsZWFycnE7Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotICAgICAgICAgIGlmICgoeiA9IGNta2V5KHBmeHRhYiwgNCwgImNvbnRyb2wtY2hh cmFjdGVyIHByZWZpeGluZyBvcHRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICIiLCB4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgICBjbGVhcnJxID0gMDsgICAgICAg ICAgICAgICAgICAvKiAxOTkgKi8KLSAgICAgICAgICBzZXRwcmVmaXgoeik7Ci0jaWZkZWYgQ09N TUVOVAotICAgICAgICAgIGlmIChoaW50cyAmJiAoeiA9PSBQWF9BTEwgfHwgeiA9PSBQWF9DQVUp ICYmIGNsZWFycnEpIHsKLSAgICAgICAgcHJpbnRmKCJIaW50OiBVc2UgU0VUIENMRUFSLUNIQU5O RUwgT0ZGIHRvIGRpc2FibGUgbmVnb3RpYXRpb24gb2ZcbiIpOwotICAgICAgICBwcmludGYoIiAg ICAgIFNFVCBQUkVGSVhJTkcgTk9ORSBkdXJpbmcgZmlsZSB0cmFuc2ZlcnMgb24gcmVsaWFibGVc biIpOwotICAgICAgICBwcmludGYoIiAgICAgIGNvbm5lY3Rpb25zLlxuIik7Ci0gICAgICAgICAg fQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwot ICAgICAgfQotI2VuZGlmIC8qIENLX1NQRUVEICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICAgIGNh c2UgWFlMT0dJTjoKLSAgICAgICAgaWYgKCh6ID0gY21rZXkobG9naW50YWIsIDMsICJ2YWx1ZSBm b3IgbG9naW4gc2NyaXB0IiwidXNlcmlkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICB4ID0gY21kZ3F1bygpOwot ICAgICAgICBpZiAoeiA9PSBMT0dJX1BTVykKLSAgICAgICAgICBjbWRzcXVvKDApOwotICAgICAg ICBpZiAoKHkgPSBjbXR4dCgidGV4dCIsIiIsICZzLCBOVUxMKSkgPCAwKSB7Ci0gICAgICAgICAg ICBjbWRzcXVvKHgpOwotICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICB9Ci0gICAgICAg IGNtZHNxdW8oeCk7Ci0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgIHMgPSBi cnN0cmlwKHMpOwotICAgICAgICBpZiAoKGludClzdHJsZW4ocykgPiA2MykgewotICAgICAgICAg ICAgcHJpbnRmKCJTb3JyeSwgdG9vIGxvbmdcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsK LSAgICAgICAgfQotICAgICAgICBzd2l0Y2goeikgewotICAgICAgICAgIGNhc2UgTE9HSV9VSUQ6 Ci0gICAgICAgICAgICBja3N0cm5jcHkodWlkYnVmLHMsVUlEQlVGTEVOKTsKLSAgICAgICAgICAg IHNsX3VpZF9zYXZlZCA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIExP R0lfUFNXOgotICAgICAgICAgICAgY2tzdHJuY3B5KHB3YnVmLHMsUFdCVUZMKTsKLSAgICAgICAg ICAgIGlmIChwd2J1ZlswXSkgewotICAgICAgICAgICAgICAgIHB3ZmxnID0gMTsKLSNpZmRlZiBP UzIKLSAgICAgICAgICAgICAgICBwd2NyeXB0ID0gMTsKLSNlbHNlIC8qIE9TMiAqLwotICAgICAg ICAgICAgICAgIHB3Y3J5cHQgPSAwOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBMT0dJX1BSTToKLSAgICAgICAgICAg IGNrc3RybmNweShwcm1idWYscyxQV0JVRkwpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybihz dWNjZXNzID0gMSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHh4 KSB7Ci0KLSAgICAgIGNhc2UgWFlTVEFSVFVQOgotICAgICAgICBpZiAoKHkgPSBjbWtleShpZmR0 YWIsMiwiIiwiZGlzY2FyZCIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgaWYg KCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIERlbGV0ZVN0YXJ0dXBGaWxl ID0gKHkgIT0gMCkgPyAwIDogMTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAg ICAgY2FzZSBYWVRNUERJUjoKLSAgICAgICAgeCA9IGNtZGlyKCJOYW1lIG9mIHRlbXBvcmFyeSBk aXJlY3RvcnkiLCIiLCZzLHh4c3RyaW5nKTsKLSAgICAgICAgaWYgKHggPT0gLTMpCi0gICAgICAg ICAgcyA9ICIiOwotICAgICAgICBlbHNlIGlmICh4IDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBtYWtl c3RyKCZ0ZW1wZGlyLHMpOwotICAgICAgICByZXR1cm4odGVtcGRpciA/IDEgOiAwKTsKLQotI2lm bmRlZiBOT1hGRVIKLSAgICAgIGNhc2UgWFlERVNUOiAgICAgICAgICAgICAgICAgICAgICAvKiBE RVNUSU5BVElPTiAqLwotICAgICAgICByZXR1cm4oc2V0ZGVzdCgpKTsKLSNlbmRpZiAvKiBOT1hG RVIgKi8KLQotI2lmbmRlZiBOT1BVU0gKLSNpZm5kZWYgTk9GUklMTFMKLQotLyogRWRpdG9yLCBC cm93c2VyLCBhbmQgRlRQIENsaWVudCAqLwotCi0gICAgICBjYXNlIFhZRURJVDogICAgICAgICAg ICAgICAgICAgICAgLyogRURJVE9SICovCi0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2 ZXIpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4i KTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAv KiBJS1NEICovCi0jaWZkZWYgQ0tfQVBDCi0gICAgICAgIC8qIERvbid0IGxldCB0aGlzIGJlIHNl dCByZW1vdGVseSAqLwotICAgICAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCB8fAotICAg ICAgICAgICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVzICYgQVBDX1VO Q0gpKSkKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENLX0FQQyAq LwotCi0jaWZkZWYgT1MyT1JVTklYCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgKnAgPSBn ZXRlbnYoIlBBVEgiKTsKLSAgICAgICAgICAgIGNoYXIgKmU7Ci0gICAgICAgICAgICBlID0gZWRp dG9yWzBdID8gKGNoYXIgKikgZWRpdG9yIDogZ2V0ZW52KCJFRElUT1IiKTsKLSAgICAgICAgICAg IGlmICghZSkgZSA9ICIiOwotICAgICAgICAgICAgaWYgKHApCi0gICAgICAgICAgICAgIHggPSBj bWlmaXAoIk5hbWUgb2YgcHJlZmVycmVkIGVkaXRvciIsZSwmcywmeSwwLHAseHhzdHJpbmcpOwot ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB4ID0gY21pZmkoIkZ1bGwgcGF0aCBvZiBw cmVmZXJyZWQgZWRpdG9yIixlLCZzLCZ5LHh4c3RyaW5nKTsKLSAgICAgICAgICAgIGlmICh4IDwg MCAmJiB4ICE9IC0zKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIH0KLSNlbHNl Ci0jaWZkZWYgVk1TCi0gICAgICAgIGlmICgoeSA9IGNtdHh0KCJEQ0wgY29tbWFuZCBmb3IgZWRp dGluZyIsICJlZGl0IiwgJnMsIE5VTEwpKSA8IDApIHsKLSAgICAgICAgICAgIGlmICh4ICE9IC0z KQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlm ICgoeCA9IGNtaWZpKCJGdWxsIHBhdGggb2YgcHJlZmVycmVkIGVkaXRvciIsIiIsJnMsJnkseHhz dHJpbmcpKTwwKSB7Ci0gICAgICAgICAgICBpZiAoeCAhPSAtMykKLSAgICAgICAgICAgICAgcmV0 dXJuKHgpOwotICAgICAgICB9Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyT1JVTklY ICovCi0jaWZkZWYgVk1TCi0gICAgICAgIGNrc3RybmNweShlZGl0b3IscyxDS01BWFBBVEgpOwot ICAgICAgICBlZGl0b3B0c1swXSA9IE5VTDsKLSNlbHNlCi0gICAgICAgIGlmICh5ICE9IDApIHsK LSAgICAgICAgICAgIHByaW50ZigiP0Egc2luZ2xlIGZpbGUgcGxlYXNlXG4iKTsKLSAgICAgICAg ICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5C VUZTSVopOwotICAgICAgICBpZiAoKHggPSBjbXR4dCgiZWRpdG9yIGNvbW1hbmQtbGluZSBvcHRp b25zIiwiIiwmcyxOVUxMKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgY2tz dHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7Ci0gICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHopOwotICAgICAgICBpZiAobGluZVswXSkgewotICAgICAgICAgICAgemZucWZw KGxpbmUsQ0tNQVhQQVRILGVkaXRvcik7Ci0gICAgICAgICAgICBja3N0cm5jcHkoZWRpdG9wdHMs dG1wYnVmLDEyOCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlZGl0b3JbMF0gPSBO VUw7Ci0gICAgICAgICAgICBlZGl0b3B0c1swXSA9IE5VTDsKLSAgICAgICAgfQotI2VuZGlmIC8q IFZNUyAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0jaWZuZGVmIE5PRlRQCi0j aWZuZGVmIFNZU0ZUUAotI2lmZGVmIFRDUFNPQ0tFVAotICAgICAgY2FzZSBYWUZUUFg6Ci0gICAg ICAgIHJldHVybihkb3NldGZ0cCgpKTsgICAgICAgICAgICAgLyogU0VUIEZUUCAqLwotI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIFNZU0ZUUCAqLwotI2VuZGlmIC8qIE5PRlRQICov Ci0KLSNpZmRlZiBCUk9XU0VSCi0jaWZuZGVmIE5PRlRQCi0jaWZkZWYgU1lTRlRQCi0gICAgICBj YXNlIFhZRlRQOiAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEZUUC1DTElFTlQgKi8KLSNl bmRpZiAvKiBTWVNGVFAgKi8KLSNlbmRpZiAvKiBOT0ZUUCAqLwotICAgICAgY2FzZSBYWUJST1dT RTogICAgICAgICAgICAgICAgICAgIC8qIFNFVCBCUk9XU0VSICovCi0gICAgICAgIHsKLSAgICAg ICAgICAgIGNoYXIgKnAgPSBnZXRlbnYoIlBBVEgiKTsKLSAgICAgICAgICAgIGNoYXIgKmFwcCA9 IChjaGFyICopIGJyb3dzZXIsICpvcHRzID0gKGNoYXIgKikgYnJvd3NvcHRzOwotI2lmbmRlZiBO T0ZUUAotI2lmZGVmIFNZU0ZUUAotICAgICAgICAgICAgZXh0ZXJuIGNoYXIgZnRwYXBwW10sIGZ0 cG9wdHNbXTsKLSAgICAgICAgICAgIGlmICh4eCA9PSBYWUZUUCkgewotICAgICAgICAgICAgICAg IGFwcCA9IChjaGFyICopZnRwYXBwOwotICAgICAgICAgICAgICAgIG9wdHMgPSAoY2hhciAqKWZ0 cG9wdHM7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogU1lTRlRQICovCi0jZW5kaWYgLyogTk9G VFAgKi8KLSNpZmRlZiBJS1NECi0gICAgICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAg ICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7Ci0gICAgICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBJ S1NEICovCi0jaWZkZWYgQ0tfQVBDCi0gICAgICAgICAgICAvKiBEb24ndCBsZXQgdGhpcyBiZSBz ZXQgcmVtb3RlbHkgKi8KLSAgICAgICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8 Ci0gICAgICAgICAgICAgICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVz ICYgQVBDX1VOQ0gpKSkKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRp ZiAvKiBDS19BUEMgKi8KLSNpZmRlZiBPUzJPUlVOSVgKLSAgICAgICAgICAgIGlmIChwKQotICAg ICAgICAgICAgICB4ID0gY21pZmlwKHh4ID09IFhZQlJPV1NFID8KLSAgICAgICAgICAgICAgICAg ICAgICAgICAiTmFtZSBvZiBwcmVmZXJyZWQgYnJvd3NlciIgOgotICAgICAgICAgICAgICAgICAg ICAgICAgICJOYW1lIG9mIHByZWZlcnJlZCBmdHAgY2xpZW50IiwKLSNpZmRlZiBPUzIKLSAgICAg ICAgICAgICAgICAgICAgICAgICB4eCA9PSBYWUZUUCA/ICJmdHAuZXhlIiA6ICIiCi0jZWxzZQot ICAgICAgICAgICAgICAgICAgICAgICAgIHh4ID09IFhZRlRQID8gImZ0cCIgOiAiIgotI2VuZGlm IC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICwmcywmeSwwLHAseHhzdHJpbmcK LSAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg ICAgICB4ID0gY21pZmkoeHggPT0gWFlCUk9XU0UgPwotICAgICAgICAgICAgICAgICAgICAgICAg IkZ1bGwgcGF0aCBvZiBwcmVmZXJyZWQgYnJvd3NlciIgOgotICAgICAgICAgICAgICAgICAgICAg ICAgIkZ1bGwgcGF0aCBvZiBwcmVmZXJyZWQgZnRwIGNsaWVudCIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAiIiwmcywmeSx4eHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICAgIGlmICh4IDwgMCAmJiB4ICE9IC0zKQotICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0jZWxzZQotI2lmZGVmIFZNUwotICAgICAgICAgICAgaWYgKCh4ID0gY210eHQoIkRDTCBjb21t YW5kIHRvIHN0YXJ0IHlvdXIgcHJlZmVycmVkIFdlYiBicm93c2VyIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICIiLCAmcywgTlVMTCkpIDwgMCkgewotICAgICAgICAgICAgICAgIGlmICh4 ICE9IC0zKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgfQotI2Vs c2UKLSAgICAgICAgICAgIGlmICgoeCA9IGNtaWZpKCJGdWxsIHBhdGggb2YgcHJlZmVycmVkIGJy b3dzZXIiLCIiLCZzLCZ5LHh4c3RyaW5nKQotICAgICAgICAgICAgICAgICApIDwgMCkgewotICAg ICAgICAgICAgICAgIGlmICh4ICE9IC0zKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwot ICAgICAgICAgICAgfQotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwot I2lmZGVmIFZNUwotICAgICAgICAgICAgY2tzdHJuY3B5KGFwcCxzLENLTUFYUEFUSCk7Ci0gICAg ICAgICAgICAqb3B0cyA9IE5VTDsKLSNlbHNlCi0gICAgICAgICAgICBpZiAoeSAhPSAwKSB7Ci0g ICAgICAgICAgICAgICAgcHJpbnRmKCI/QSBzaW5nbGUgZmlsZSBwbGVhc2VcbiIpOwotICAgICAg ICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBja3N0cm5j cHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbXR4dCh4eCA9PSBY WUJST1dTRSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJvd3NlciBjb21tYW5kLWxp bmUgb3B0aW9ucyIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImZ0cCBjbGllbnQgY29t bWFuZC1saW5lIG9wdGlvbnMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsJnMsTlVM TCkKLSAgICAgICAgICAgICAgICAgKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAg ICAgICAgICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVopOwotICAgICAgICAgICAgaWYg KCh6ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7Ci0gICAgICAgICAgICBpZiAobGluZVswXSkg ewotICAgICAgICAgICAgICAgIHpmbnFmcChsaW5lLENLTUFYUEFUSCxhcHApOwotICAgICAgICAg ICAgICAgIGNrc3RybmNweShvcHRzLCB0bXBidWYsIDEyOCk7Ci0gICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgICphcHAgPSBOVUw7Ci0gICAgICAgICAgICAgICAgKm9wdHMgPSBO VUw7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogVk1TICovCi0gICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQlJPV1NFUiAqLwotI2VuZGlmIC8q IE5PRlJJTExTICovCi0jZW5kaWYgLyogTk9QVVNIICovCi0KLSNpZmRlZiBDS19DVFJMWgotICAg ICAgY2FzZSBYWUVPRjogeyAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBFT0YgKi8KLSAgICAg ICAgICBleHRlcm4gaW50IGVvZm1ldGhvZDsgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZW9mdGFiW107 Ci0gICAgICAgICAgaWYgKCh4ID0gY21rZXkoZW9mdGFiLDMsImVuZC1vZi1maWxlIGRldGVjdGlv biBtZXRob2QiLCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQot ICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkK LSAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICBlb2ZtZXRob2QgPSB4OwotICAgICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0jZW5kaWYgLyogQ0tfQ1RSTFogKi8K LQotI2lmZGVmIFNFU0xJTUlUCi0gICAgICBjYXNlIFhZTElNSVQ6IHsgIC8qIFNlc3Npb24tTGlt aXQgKGxlbmd0aCBvZiBzZXNzaW9uIGluIHNlY29uZHMpICovCi0gICAgICAgICAgZXh0ZXJuIGlu dCBzZXNsaW1pdDsKLSNpZmRlZiBPUzIKLSAgICAgICAgICBleHRlcm4gaW50IGRvd25sb2FkZWQ7 Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgeSA9IGNtbnVtKCJNYXhpbXVtIGxlbmd0aCBv ZiBzZXNzaW9uLCBzZWNvbmRzIiwiMCIsMTAsJngseHhzdHJpbmcpOwotICAgICAgICAgIGlmIChp bnNlcnZlciAmJgotI2lmZGVmIElLU0RDT05GCi0gICAgICAgICAgICAgIGlrc2RjZgotI2Vsc2UK LSAgICAgICAgICAgICAgMQotI2VuZGlmIC8qIElLU0RDT05GICovCi0jaWZkZWYgT1MyCi0gICAg ICAgICAgICAgICB8fCBkb3dubG9hZGVkCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAg ICkgewotICAgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAg ICAgcmV0dXJuKHopOwotICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFuZCBkaXNh YmxlZC5cclxuIik7Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAg ICAgfQotICAgICAgICAgIHJldHVybihzZXRudW0oJnNlc2xpbWl0LHgseSw4NjQwMCkpOwotICAg ICAgfQotI2VuZGlmIC8qIFNFU0xJTUlUICovCi0KLSAgICAgIGNhc2UgWFlSRUxZOiB7ICAgICAg ICAgICAgICAgICAgICAvKiBTRVQgUkVMSUFCTEUgKi8KLSAgICAgICAgICBpZiAoKHggPSBjbWtl eShvb2F0YWIsMywiIiwiYXV0b21hdGljIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJl dHVybih4KTsKLSAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAg ICAgICAgICByZWxpYWJsZSA9IHg7Ci0gICAgICAgICAgc2V0cmVsaWFibGUgPSAoeCAhPSBTRVRf QVVUTyk7Ci0gICAgICAgICAgZGVidWcoRjEwMSwiU0VUIFJFTElBQkxFIHJlbGlhYmxlIiwiIixy ZWxpYWJsZSk7Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLQotI2lm ZGVmIFNUUkVBTUlORwotICAgICAgY2FzZSBYWVNUUkVBTTogeyAgICAgICAgICAgICAgICAgIC8q IFNFVCBTVFJFQU1JTkcgKi8KLSAgICAgICAgICBleHRlcm4gaW50IHN0cmVhbXJxOwotICAgICAg ICAgIGlmICgoeCA9IGNta2V5KG9vYXRhYiwzLCIiLCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAw KQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHkpOwotICAgICAgICAgIHN0cmVhbXJxID0geDsKLSAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOwotICAgICAgfQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCi0jaWZkZWYg Q0tTWVNMT0cKLSAgICAgIGNhc2UgWFlTWVNMOiB7Ci0gICAgICAgICAgaWYgKCh4ID0gY21rZXko c3lzbG9ndGFiLG5zeXNsb2csIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICByZXR1 cm4oeCk7Ci0gICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0jaWZk ZWYgSUtTRAotICAgICAgICAgIGlmIChpbnNlcnZlciAmJgotI2lmZGVmIElLU0RDT05GCi0gICAg ICAgICAgICAgIGlrc2RjZgotI2Vsc2UKLSAgICAgICAgICAgICAgMQotI2VuZGlmIC8qIElLU0RD T05GICovCi0gICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwg Y29tbWFuZCBkaXNhYmxlZC5cbiIpOwotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDAp OwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgQ0tfQVBDCi0gICAgICAg ICAgLyogRG9uJ3QgbGV0IHRoaXMgYmUgc2V0IHJlbW90ZWx5ICovCi0gICAgICAgICAgaWYgKGFw Y2FjdGl2ZSA9PSBBUENfTE9DQUwgfHwKLSAgICAgICAgICAgICAgKGFwY2FjdGl2ZSA9PSBBUENf UkVNT1RFICYmICEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKSkKLSAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0gICAgICAgICAgY2t4c3lzbG9nID0g eDsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotI2VuZGlmIC8qIENL U1lTTE9HICovCi0KLSNpZmRlZiBUTE9HCi0gICAgICBjYXNlIFhZVExPRzogeyAgICAgICAgICAg ICAgICAgICAgLyogU0VUIFRSQU5TQUNUSU9OLUxPRyAqLwotICAgICAgICAgIGV4dGVybiBpbnQg dGxvZ3NlcDsKLSAgICAgICAgICBpZiAoKHggPSBjbWtleSh2YnRhYixudmIsIiIsInZlcmJvc2Ui LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgIGlmICh4 ID09IDApIHsKLSAgICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoImZpZWxkIHNlcGFyYXRvciIs IiwiLCZzLE5VTEwpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICAgICAgcyA9IGJyc3RyaXAo cyk7Ci0gICAgICAgICAgICAgIGlmICgqcykgewotICAgICAgICAgICAgICAgICAgaWYgKHNbMV0p IHsKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9BIHNpbmdsZSBjaGFyYWN0ZXIsIHBs ZWFzZS5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAg ICAgICAgICB9IGVsc2UgaWYgKCgqcyA+PSAnMCcgJiYgKnMgPD0gJzknKSB8fAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoKnMgPj0gJ0EnICYmICpzIDw9ICdaJykgfHwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCpzID49ICdhJyAmJiAqcyA8PSAneicpKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCI/QSBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlciwgcGxl YXNlLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAg ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICB0bG9nc2VwID0gKnM7Ci0gICAgICAg ICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICB9Ci0jaWZkZWYgSUtTRAotICAgICAgICAg IGlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KSB7Ci0gICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5 LCBjb21tYW5kIGRpc2FibGVkLlxuIik7Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MCk7Ci0gICAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBDS19BUEMKLSAgICAg ICAgICAvKiBEb24ndCBsZXQgdGhpcyBiZSBzZXQgcmVtb3RlbHkgKi8KLSAgICAgICAgICBpZiAo YXBjYWN0aXZlID09IEFQQ19MT0NBTCB8fAotICAgICAgICAgICAgICAoYXBjYWN0aXZlID09IEFQ Q19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpKQotICAgICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLSAgICAgICAgICB0bG9nZm10ID0g eDsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotI2VuZGlmIC8qIFRM T0cgKi8KLQotICAgICAgY2FzZSBYWUNMRUFSOiB7ICAgICAgICAgICAgICAgICAgIC8qIFNFVCBD TEVBUkNIQU5ORUwgKi8KLSAgICAgICAgICBpZiAoKHggPSBjbWtleShvb2F0YWIsMywiIiwiYXV0 b21hdGljIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICBjbGVhcnJxID0g eDsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotCi0jaWZkZWYgQ0tf QVVUSEVOVElDQVRJT04KLSAgICAgIGNhc2UgWFlBVVRIOiB7ICAgICAgICAgICAgICAgICAgICAv KiBTRVQgQVVUSEVOVElDQVRJT04gKi8KLSNpZmRlZiBDS19LRVJCRVJPUwotICAgICAgICAgIGlu dCBrdiA9IDA7Ci0gICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrcmJfb3BfZGF0YSBrcmJfb3A7Ci0j ZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSAgICAgICAgICBjaGFyICogcCA9IE5VTEw7Ci0gICAg ICAgICAgaWYgKCh4ID0KLSAgICAgICAgICAgICAgIGNta2V5KHNldGF1dGgsbnNldGF1dGgsImF1 dGhlbnRpY2F0aW9uIHR5cGUiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICAgIHN3aXRjaCAoeCkgewotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgICAg ICAgICBjYXNlIEFVVEhfS1JCNDoga3YgPSA0OyBicmVhazsgLyogRG9uJ3QgYXNzdW1lIHZhbHVl cyBhcmUgc2FtZSAqLwotICAgICAgICAgICAgY2FzZSBBVVRIX0tSQjU6IGt2ID0gNTsgYnJlYWs7 Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNpZmRlZiBDS19TUlAKLSAgICAgICAgICAgIGNh c2UgQVVUSF9TUlA6IGJyZWFrOwotI2VuZGlmIC8qIENLX1NSUCAqLwotI2lmZGVmIENLX1NTTAot ICAgICAgICAgICAgY2FzZSBBVVRIX1NTTDoKLSAgICAgICAgICAgIGNhc2UgQVVUSF9UTFM6Ci0g ICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgZGVm YXVsdDoKLSAgICAgICAgICAgICAgcHJpbnRmKCI/QXV0aG9yaXphdGlvbiB0eXBlIG5vdCBzdXBw b3J0ZWQgeWV0IC0gXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICAgYXRtYnVmKTsKLSAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICB9Ci0jaWZkZWYgSUtTRAotICAgICAg ICAgIGlmIChpbnNlcnZlciAmJgotI2lmZGVmIElLU0RDT05GCi0gICAgICAgICAgICAgIGlrc2Rj ZgotI2Vsc2UKLSAgICAgICAgICAgICAgMQotI2VuZGlmIC8qIElLU0RDT05GICovCi0gICAgICAg ICAgICAgICkgewotICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5 KTsKLSAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXG4iKTsK LSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgICB9Ci0jZW5kaWYg LyogSUtTRCAqLwotI2lmZGVmIENLX0FQQwotICAgICAgICAgIC8qIERvbid0IGxldCB0aGlzIGJl IHNldCByZW1vdGVseSAqLwotICAgICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8 Ci0gICAgICAgICAgICAgIGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVzICYg QVBDX1VOQ0gpKSB7Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHkpOwotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICAgIH0KLSNl bmRpZiAvKiBDS19BUEMgKi8KLQotICAgICAgICAgIHN3aXRjaCh4KSB7Ci0jaWZkZWYgQ0tfS0VS QkVST1MKLSAgICAgICAgICAgIGNhc2UgQVVUSF9LUkI0OgotICAgICAgICAgICAgY2FzZSBBVVRI X0tSQjU6IHsKLSAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWtleShrdiA9PSA0ID8gazR0YWIg OiBrNXRhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrdiA9PSA0ID8gbms0dGFi IDogbms1dGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLZXJiZXJvcyBwYXJh bWV0ZXIiLCIiLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcyA9ICIiOwotICAgICAgICAg ICAgICAgIHN3aXRjaCAoeCkgewotI2lmZGVmIEtSQjQKLSAgICAgICAgICAgICAgICAgIGNhc2Ug WFlLUkJEQkc6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA0KSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigmazRkZWJ1ZykpIDwgMCkKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotI2lmZGVmIE5UCi0gICAgICAgICAgICAgICAgICAg ICAgICBja19rcmI0X2RlYnVnKGs0ZGVidWcpOwotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwot ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlm IC8qIEtSQjQgKi8KLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJMSUY6Ci0gICAgICAgICAg ICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJUR1QgbGlmZXRpbWUiLCI2MDAiLDEwLCZ6LHh4c3Ry aW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCUFJFOgotICAgICAg ICAgICAgICAgICAgICBpZiAoa3YgPT0gNCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCh5ID0gc2V0b24oJmtyYjRfZF9wcmVhdXRoKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBYWUtSQklOUzoKLSAg ICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoIkluc3RhbmNlIG5hbWUiLCIiLCZzLHh4 c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCRldEOgotICAg ICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNSkgewotICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCh5ID0gc2V0b24oJmtyYjVfZF9mb3J3YXJkYWJsZSkpIDwgMCkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJQ Ulg6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA1KSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBpZiAoKHkgPSBzZXRvbigma3JiNV9kX3Byb3hpYWJsZSkpIDwgMCkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug WFlLUkJSTlc6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJUR1QgcmVuZXdh YmxlIGxpZmV0aW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiLDEw LCZ6LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCQURS OgotICAgICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNSkgewotICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCh5ID0gc2V0b24oJmtyYjVfY2hlY2thZGRycykpIDwgMCkKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gc2V0b24oJmtyYjRfY2hlY2thZGRycykp IDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg Y2FzZSBYWUtSQk5BRDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGt2ID09IDUpIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IHNldG9uKCZrcmI1X2Rfbm9fYWRkcmVzc2VzKSkg PCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBj YXNlIFhZS1JCQUREOgotICAgICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNSkgewotICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqIHRtcGFkZHJzW0tSQjVfTlVNX09GX0FERFJTXTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBLUkI1X05VTV9PRl9BRERSUzsg aSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBhZGRyc1tpXSA9IE5VTEw7Ci0KLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmICgoeSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNtZmxkKCJMaXN0IG9mIElQIGFkZHJlc3NlcyIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIG1ha2VsaXN0KHMsdG1wYWRkcnMsS1JCNV9OVU1fT0ZfQUREUlMpOwotICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgZm9yIChpID0gMDsgaSA8IEtSQjVfTlVNX09GX0FERFJTOyBpKyspIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcGFkZHJzW2ldICE9IE5VTEwpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSh0bXBhZGRyc1tpXSk7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy bih5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg IGZvciAoaSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPCBLUkI1X05VTV9P Rl9BRERSUyAmJiB0bXBhZGRyc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsr KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZXRfYWRkcih0bXBhZGRyc1tp XSkgPT0gMHhmZmZmZmZmZikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoImludmFsaWQgaXAgYWRkcmVzczogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0bXBhZGRyc1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBLUkI1X05VTV9PRl9BRERSUzsgaSsrKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wYWRkcnNbaV0gIT0gTlVMTCkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSh0bXBhZGRyc1tpXSk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpIDwgS1JCNV9OVU1fT0ZfQUREUlMgJiYga3Ji NV9kX2FkZHJzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKyspIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoa3JiNV9kX2FkZHJzW2ldKQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZnJlZShrcmI1X2RfYWRkcnNbaV0pOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGtyYjVfZF9hZGRyc1tpXSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpIDwgS1JCNV9OVU1fT0ZfQUREUlMgJiYgdG1wYWRkcnNbaV07Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKykgewotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGtyYjVfZF9hZGRyc1tpXSA9IHRtcGFkZHJzW2ldOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRtcGFkZHJzW2ldID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVfZF9hZGRyc1tpXSA9IE5VTEw7Ci0gICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICBjYXNl IFhZS1JCR0VUOgotICAgICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNSkgewotICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCh5ID0gc2V0b24oJmtyYjVfYXV0b2dldCkpIDwgMCkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gc2V0b24oJmtyYjRfYXV0b2dl dCkpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgY2FzZSBYWUtSQkRFTDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh6ID0gY21rZXkoa2Rl c3RhYixua2Rlc3RhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkF1dG8g RGVzdHJveSBUaWNrZXRzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5l dmVyIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeik7Ci0g ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBYWUtSQlBS OgotICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiVXNlciBJRCIsdWlkYnVmLCZz LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCUkw6Ci0g ICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJOYW1lIG9mIHJlYWxtIiwiIiwmcyx4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBYWUtSQktUQjoKLSAg ICAgICAgICAgICAgICAgICAgeSA9IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJnoseHhzdHJpbmcp OwotICAgICAgICAgICAgICAgICAgICBpZiAoeSAhPSAtMykgewotICAgICAgICAgICAgICAgICAg ICAgICBpZiAoeSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAg ICAgICAgICAgICAgICAgICAgICBpZiAoeikgewotICAgICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz ZSBYWUtSQkNDOgotICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbW9maSgiRmlsZW5hbWUi LCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsK LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZS1JC U1JWOgotICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiTmFtZSBvZiBzZXJ2aWNl IHRvIHVzZSBpbiB0aWNrZXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo a3YgPT0gNCA/ICJyY21kIiA6ICJob3N0IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSA8IDApCi0gICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICAgIGNhc2UgWFlLUkJLNUs0OgotICAgICAgICAgICAgICAgICAgICBpZiAoa3YgPT0g NSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gc2V0b24oJmtyYjVfZF9nZXRr NCkpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsK LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICAgIGNhc2UgWFlLUkJQUk06ICAgICAgICAvKiBQcm9tcHQgKi8KLSAgICAgICAg ICAgICAgICAgICAgaWYgKCh6ID0gY21rZXkoa3JicHJtdGFiLDIsIiIsIiIseHhzdHJpbmcpKSA8 IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAgICAgICAgICAg ICBpZiAoKHkgPSBjbXR4dCgoeiA9PSBLUkJfUFdfUFJNKSA/Ci0gICJUZXh0IG9mIHByb21wdDtc bm1heSBjb250YWluIFwiJXNcIiB0byBiZSByZXBsYWNlZCBieSBwcmluY2lwYWwgbmFtZSIgOgot ICAiVGV4dCBvZiBwcm9tcHQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICAgICApIDwgMCkKLSAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7 Ci0gICAgICAgICAgICAgICAgcyA9IGxpbmU7Ci0gICAgICAgICAgICAgICAgaWYgKCh5ID0gY21j Zm0oKSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotI2lmZGVmIElLU0QKLSAg ICAgICAgICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYKLSNpZmRlZiBJS1NEQ09ORgotICAgICAgICAg ICAgICAgICAgICBpa3NkY2YKLSNlbHNlIC8qIElLU0RDT05GICovCi0gICAgICAgICAgICAgICAg ICAgIDEKLSNlbmRpZiAvKiBJS1NEQ09ORiAqLwotICAgICAgICAgICAgICAgICAgICApCi0gICAg ICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIElLU0QgKi8KLQot ICAgICAgICAgICAgICAgIHN3aXRjaCAoeCkgeyAgICAgICAgICAgIC8qIENvcHkgdmFsdWUgdG8g cmlnaHQgcGxhY2UgKi8KLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJMSUY6ICAgICAgICAv KiBMaWZldGltZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNCkKLSAgICAgICAg ICAgICAgICAgICAgICBrcmI0X2RfbGlmZXRpbWUgPSB6OwotICAgICAgICAgICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgICAgICAgICAga3JiNV9kX2xpZmV0aW1lID0gejsKLSAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCUk5XOgotICAg ICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNSkKLSAgICAgICAgICAgICAgICAgICAgICBrcmI1 X2RfcmVuZXdhYmxlID0gejsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICBjYXNlIFhZS1JCUFI6ICAgICAgICAgLyogUHJpbmNpcGFsICovCi0gICAgICAgICAg ICAgICAgICAgIHMgPSBicnN0cmlwKHMpOwkvKiBTdHJpcCBicmFjZXMgYXJvdW5kLiAqLwotICAg ICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNCkKLSAgICAgICAgICAgICAgICAgICAgICBtYWtl c3RyKCZrcmI0X2RfcHJpbmNpcGFsLHMpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg ICAgICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNV9kX3ByaW5jaXBhbCxzKTsKLSAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCSU5TOiAgICAg ICAgLyogSW5zdGFuY2UgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGt2ID09IDQpCi0gICAg ICAgICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNF9kX2luc3RhbmNlLHMpOwotICAgICAgICAg ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNV9kX2lu c3RhbmNlLHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg IGNhc2UgWFlLUkJSTDogICAgICAgICAvKiBSZWFsbSAqLwotICAgICAgICAgICAgICAgICAgICBp ZiAoa3YgPT0gNCkKLSAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZrcmI0X2RfcmVhbG0s cyk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBtYWtl c3RyKCZrcmI1X2RfcmVhbG0scyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgY2FzZSBYWUtSQktUQjogICAgICAgIC8qIEtleSBUYWJsZSAqLwotICAgICAg ICAgICAgICAgICAgICBpZiAoa3YgPT0gNCkKLSAgICAgICAgICAgICAgICAgICAgICBtYWtlc3Ry KCZrNF9rZXl0YWIscyk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg ICAgICAgICBtYWtlc3RyKCZrNV9rZXl0YWIscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgY2FzZSBYWUtSQkNDOiAgICAgICAgIC8qIENyZWRlbnRpYWxz IGNhY2hlICovCi0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZF9jYyxzKTsKLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCU1JW OiAgICAgICAgLyogU2VydmljZSBOYW1lICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChrdiA9 PSA0KQotICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRfZF9zcnYscyk7Ci0gICAg ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZrcmI1 X2Rfc3J2LHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg IGNhc2UgWFlLUkJERUw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA1KQotICAgICAg ICAgICAgICAgICAgICAgIGtyYjVfYXV0b2RlbCA9IHo7Ci0gICAgICAgICAgICAgICAgICAgIGVs c2UKLSAgICAgICAgICAgICAgICAgICAgICBrcmI0X2F1dG9kZWwgPSB6OwotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJQUk06ICAgICAgICAv KiBQcm9tcHQgKi8KLQkJICAgIHMgPSBicnN0cmlwKHMpOwotICAgICAgICAgICAgICAgICAgICBz d2l0Y2ggKHopIHsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtSQl9QV19QUk06IHsgLyog UGFzc3dvcmQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgdGhhdCB0aGVy ZSBhcmUgbm8gbW9yZSB0aGFuICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHR3byAl IGZpZWxkcyBhbmQgJSBtdXN0IGZvbGxvd2VkIGJ5ICdzJy4gKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGksbixsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0 cmxlbihzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbiA9IDA7IGkg PCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNbaV0gPT0g JyUnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNbaSsxXSAhPSAn JScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNbaSsxXSAh PSAncycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT25seSAlJXMg ZmllbGRzIGFyZSBwZXJtaXR0ZWQuXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbiA+IDIpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9ubHkgdHdvICUlcyBmaWVsZHMgYXJl IHBlcm1pdHRlZC5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGt2 ID09IDUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmazVwd3Byb21wdCxz KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1ha2VzdHIoJms0cHdwcm9tcHQscyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICBj YXNlIEtSQl9QUl9QUk06IHsgLyogUHJpbmNpcGFsICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gJSBmaWVsZHMgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGksbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAg ICBsZW4gPSBzdHJsZW4ocyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNbaV0g PT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNbaSsxXSAh PSAnJScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlJSBmaWVsZHMgYXJlIG5vdCB1c2Vk IGluIHRoaXMgY29tbWFuZC5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGt2ID09IDUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFr ZXN0cigmazVwcnByb21wdCxzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJms0cHJwcm9tcHQscyk7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2lmZGVmIENLX1NS UAotICAgICAgICAgICAgY2FzZSBBVVRIX1NSUDogewotICAgICAgICAgICAgICAgIGlmICgoeCA9 IGNta2V5KHNycHRhYiwgbnNycHRhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi U1JQIHBhcmFtZXRlciIsIiIseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAg cmV0dXJuKHgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzID0gIiI7Ci0g ICAgICAgICAgICAgICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZU1JQ UFJNOiAgICAgICAgLyogUHJvbXB0ICovCi0gICAgICAgICAgICAgICAgICAgIGlmICgoeiA9IGNt a2V5KHNycHBybXRhYiwxLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAg ICAgIHJldHVybih6KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoCi0gICJU ZXh0IG9mIHByb21wdDtcbm1heSBjb250YWluIG9uZSBcIiVzXCIgdG8gYmUgcmVwbGFjZWQgYnkg dGhlIHVzZXJuYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB4eHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApCi0gICAgICAgICAgICAgICAgICAgICAgICAgKSA8IDApCi0gICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotICAg ICAgICAgICAgICAgIHMgPSBsaW5lOwotICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkp IDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICBzd2l0 Y2ggKHgpIHsgICAgICAgICAgICAvKiBDb3B5IHZhbHVlIHRvIHJpZ2h0IHBsYWNlICovCi0gICAg ICAgICAgICAgICAgICBjYXNlIFhZU1JQUFJNOiAgICAgICAgLyogUHJvbXB0ICovCi0JCSAgICBz ID0gYnJzdHJpcChzKTsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh6KSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgY2FzZSBTUlBfUFdfUFJNOiB7IC8qIFBhc3N3b3JkICovCi0gICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENoZWNrICVzIGZpZWxkcyAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgaSxuLGxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0g c3RybGVuKHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBuID0gMDsg aSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpXSA9 PSAnJScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpKzFdICE9 ICclJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpKzFd ICE9ICdzJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9ubHkgJSVz IGZpZWxkcyBhcmUgcGVybWl0dGVkLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK24g PiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT25seSBvbmUgJSVzIGZp ZWxkIGlzIHBlcm1pdHRlZC5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg bWFrZXN0cigmc3JwcHdwcm9tcHQscyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSNlbmRp ZiAvKiBDS19TUlAgKi8KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgIGNhc2UgQVVUSF9TU0w6 Ci0gICAgICAgICAgICBjYXNlIEFVVEhfVExTOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCh6ID0g Y21rZXkoc3NsdGFiLCBuc3NsdGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHggPT0g QVVUSF9TU0wgPyAiU1NMIHBhcmFtZXRlciIgOiAiVExTIHBhcmFtZXRlciIpLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICBy ZXR1cm4oeik7Ci0gICAgICAgICAgICAgICAgcyA9ICIiOwotICAgICAgICAgICAgICAgIHN3aXRj aCAoeikgewotICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTFJDRkw6ICAgICAgIC8qIFNTTC9U TFMgUlNBIENlcnRzIGZpbGUgKi8KLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xSQ0NGOiAg ICAgICAvKiBTU0wvVExTIFJTQSBDZXJ0cyBDaGFpbiBmaWxlICovCi0gICAgICAgICAgICAgICAg ICBjYXNlIFhZU1NMUktGTDogICAgICAgLyogU1NML1RMUyBSU0EgS2V5IEZpbGUgKi8KLSAgICAg ICAgICAgICAgICAgIGNhc2UgWFlTU0xEQ0ZMOiAgICAgICAvKiBTU0wvVExTIERTQSBDZXJ0cyBm aWxlICovCi0gICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMRENDRjogICAgICAgLyogU1NML1RM UyBEU0EgQ2VydHMgQ2hhaW4gZmlsZSAqLwotICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTERL Rkw6ICAgICAgIC8qIFNTTC9UTFMgREggS2V5IEZpbGUgKi8KLSAgICAgICAgICAgICAgICAgIGNh c2UgWFlTU0xEUEZMOiAgICAgICAvKiBTU0wvVExTIERIIFBhcmFtIEZpbGUgKi8KLSAgICAgICAg ICAgICAgICAgIGNhc2UgWFlTU0xDUkw6ICAgICAgICAvKiBTU0wvVExTIENSTCBGaWxlICovCi0g ICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMVlJGRjogICAgICAgLyogU1NML1RMUyBWZXJpZnkg RmlsZSAqLwotICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTFJORDogICAgICAgIC8qIFNTTC9U TFMgUmFuZG9tIEZpbGUgKi8KLSAgICAgICAgICAgICAgICAgICAgeSA9IGNtaWZpKCJGaWxlbmFt ZSIsIiIsJnMsJngseHhzdHJpbmcpOwotICAgICAgICAgICAgICAgICAgICBpZiAoeSAhPSAtMykg ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPCAwKQotICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCkgewotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZFxu Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSBs aW5lOwotICAgICAgICAgICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVy bih5KTsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh6KSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgY2FzZSBYWVNTTFJDRkw6ICAgLyogU1NML1RMUyBSU0EgQ2VydHMgZmlsZSAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCFzWzBdICYmIHNzbF9yc2FfY2VydF9maWxlKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShzc2xfcnNhX2NlcnRfZmlsZSk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3JzYV9jZXJ0X2ZpbGUgPSBOVUxMOwotICAgICAg ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWFrZXN0cigmc3NsX3JzYV9jZXJ0X2ZpbGUscyk7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCFzc2xfcnNhX2tleV9maWxlKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWFrZXN0cigmc3NsX3JzYV9rZXlfZmlsZSxzKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgWFlTU0xSQ0NGOiAgIC8qIFNTTC9UTFMgUlNBIENlcnRzIENoYWluIGZpbGUg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzWzBdICYmIHNzbF9yc2FfY2VydF9j aGFpbl9maWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHNzbF9yc2Ff Y2VydF9jaGFpbl9maWxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9yc2Ff Y2VydF9jaGFpbl9maWxlID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl IGlmIChzWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xf cnNhX2NlcnRfY2hhaW5fZmlsZSxzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNl IFhZU1NMUktGTDogICAvKiBTU0wvVExTIFJTQSBLZXkgRmlsZSAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFzWzBdICYmIHNzbF9yc2Ffa2V5X2ZpbGUpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmcmVlKHNzbF9yc2Ffa2V5X2ZpbGUpOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNzbF9yc2Ffa2V5X2ZpbGUgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIGlmIChzWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0 cigmc3NsX3JzYV9rZXlfZmlsZSxzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlT U0xEQ0ZMOiAgIC8qIFNTTC9UTFMgRFNBIENlcnRzIGZpbGUgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgIGlmICghc1swXSAmJiBzc2xfZHNhX2NlcnRfZmlsZSkgewotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZyZWUoc3NsX2RzYV9jZXJ0X2ZpbGUpOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNzbF9kc2FfY2VydF9maWxlID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoc1swXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vz dHIoJnNzbF9kc2FfY2VydF9maWxlLHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm ICghc3NsX2RoX2tleV9maWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0 cigmc3NsX2RoX2tleV9maWxlLHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWVNT TERDQ0Y6ICAgLyogU1NML1RMUyBEU0EgQ2VydHMgQ2hhaW4gZmlsZSAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIXNbMF0gJiYgc3NsX2RzYV9jZXJ0X2NoYWluX2ZpbGUpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoc3NsX2RzYV9jZXJ0X2NoYWluX2ZpbGUp OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2RzYV9jZXJ0X2NoYWluX2ZpbGUg PSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNbMF0pIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9kc2FfY2VydF9jaGFpbl9m aWxlLHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xES0ZMOiAgIC8q IFNTTC9UTFMgREggS2V5IEZpbGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc1sw XSAmJiBzc2xfZGhfa2V5X2ZpbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVl KHNzbF9kaF9rZXlfZmlsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2RoX2tl eV9maWxlID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc1swXSkg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9kaF9rZXlfZmlsZSxz KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xEUEZMOiAgIC8qIFNTTC9UTFMg REggUGFyYW0gRmlsZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzWzBdICYmIHNz bF9kaF9wYXJhbV9maWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShzc2xf ZGhfcGFyYW1fZmlsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2RoX3BhcmFt X2ZpbGUgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzWzBdKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX2RoX3BhcmFtX2ZpbGUs cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMQ1JMOiAgICAvKiBTU0wvVExT IENSTCBGaWxlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNbMF0gJiYgc3NsX2Ny bF9maWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShzc2xfY3JsX2ZpbGUp OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jcmxfZmlsZSA9IE5VTEw7Ci0gICAg ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNbMF0pIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYWtlc3RyKCZzc2xfY3JsX2ZpbGUscyk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg ICAgICBjYXNlIFhZU1NMVlJGRjogICAvKiBTU0wvVExTIFZlcmlmeSBGaWxlICovCi0gICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIXNbMF0gJiYgc3NsX3ZlcmlmeV9maWxlKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnJlZShzc2xfdmVyaWZ5X2ZpbGUpOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNzbF92ZXJpZnlfZmlsZSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgaWYgKHNbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt YWtlc3RyKCZzc2xfdmVyaWZ5X2ZpbGUscyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNl IFhZU1NMUk5EOiAgICAvKiBTU0wvVExTIFJhbmRvbSBGaWxlICovCi0gICAgICAgICAgICAgICAg ICAgICAgICBpZiAoIXNbMF0gJiYgc3NsX3JuZF9maWxlKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgZnJlZShzc2xfcm5kX2ZpbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNzbF9ybmRfZmlsZSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KHNbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xfcm5kX2Zp bGUscyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVh azsKLQotICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTENSTEQ6Ci0gICAgICAgICAgICAgICAg ICBjYXNlIFhZU1NMVlJGRDogewotICAgICAgICAgICAgICAgICAgICBjaGFyICogZCA9IE5VTEw7 Ci0gICAgICAgICAgICAgICAgICAgIGlmICh6ID09IFhZU1NMVlJGRCkKLSAgICAgICAgICAgICAg ICAgICAgICBkPSBnZXRlbnYoIlNTTF9DRVJUX0RJUiIpOwotICAgICAgICAgICAgICAgICAgICBp ZiAoZCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgZCA9ICIiOwotICAgICAgICAg ICAgICAgICAgICBpZiAoKHkgPSBjbWRpcigiRGlyZWN0b3J5IixkLCZzLHh4c3RyaW5nKSkgPCAw KQotCQkgICAgICBpZiAoeSAhPSAtMykKLQkJCXJldHVybih5KTsKLSAgICAgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotICAgICAgICAgICAgICAgICAgICBzID0g bGluZTsKLSAgICAgICAgICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7Ci0gICAgICAgICAgICAg ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCh6KSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgY2FzZSBYWVNTTENSTEQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNbMF0g JiYgc3NsX2NybF9kaXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHNzbF9j cmxfZGlyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfY3JsX2RpciA9IE5VTEw7 Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNbMF0pIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xfY3JsX2RpcixzKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgWFlTU0xWUkZEOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz WzBdICYmIHNzbF92ZXJpZnlfZGlyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJl ZShzc2xfdmVyaWZ5X2Rpcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3Zlcmlm eV9kaXIgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzWzBdKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX3ZlcmlmeV9kaXIscyk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xDT0s6ICAgICAg ICAvKiBTU0wvVExTIENlcnRzLU9rIGZsYWcgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCh5 ID0gc2V0b24oJnNzbF9jZXJ0c29rX2ZsYWcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAg cmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg IGNhc2UgWFlTU0xEQkc6ICAgICAgICAgICAgICAgIC8qIFNTTC9UTFMgRGVidWcgZmxhZyAqLwot ICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigmc3NsX2RlYnVnX2ZsYWcpKSA8IDAp Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xPTjogICAgICAgICAvKiBTU0wvVExT IE9ubHkgZmxhZyAqLwotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAg ICAgICAgICAgICAgICBjYXNlIEFVVEhfU1NMOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCh5ID0gc2V0b24oJnNzbF9vbmx5X2ZsYWcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgQVVUSF9UTFM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo KHkgPSBzZXRvbigmdGxzX29ubHlfZmxhZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICBjYXNlIFhZU1NMVlJCOiAgICAgICAgLyogU1NML1RMUyBWZXJib3NlIGZsYWcgKi8KLSAgICAg ICAgICAgICAgICAgICAgaWYgKCh5ID0gc2V0b24oJnNzbF92ZXJib3NlX2ZsYWcpKSA8IDApCi0g ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xWUkY6ICAgICAgICAvKiBTU0wvVExTIFZl cmlmeSBmbGFnICovCi0gICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHNzbHZlcnRh YiwgbnNzbHZlcnRhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNTTC9U TFMgdmVyaWZ5IG1vZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVl ci1jZXJ0Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgIHNzbF92ZXJpZnlfZmxh ZyA9IHg7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz ZSBYWVNTTERVTToKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gc2V0b24oJnNzbF9kdW1t eV9mbGFnKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMQ0w6IHsgICAg ICAgICAgICAgICAvKiBTU0wvVExTIENpcGhlciBMaXN0ICovCi0jaWZkZWYgQ09NTUVOVAotICAg ICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgY29kZSBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgY29s b24gZGVsaW1pdGVkICovCi0gICAgICAgICAgICAgICAgICAgICAgLyogbGlzdCBvZiB0aGUgY2lw aGVycyBjdXJyZW50bHkgaW4gdXNlIHRvIGJlIHVzZWQgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAvKiBhcyB0aGUgZGVmYXVsdCBmb3IgY210eHQoKS4gIEhvd2V2ZXIsIGEgYmV0dGVyICAqLwot ICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgaXMgc2ltcGx5IHRoZSBtYWdpYyBrZXl3 b3JkICJBTEwiLiAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgQ0hBUiBkZWZbMTAyNF0g PSAiIjsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoc3NsX2NvbiAhPSBOVUxMKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIENIQVIgKiBwID0gTlVMTCwgKnEgPSBkZWY7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBpLCBsZW47Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgZm9yIChpID0gMDsgOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAg PSAoQ0hBUiAqKSBTU0xfZ2V0X2NpcGhlcl9saXN0KHNzbF9jb24saSk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0cmxl bihwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxK2xlbisxID49IGRlZisx MDI0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpxKysgPSAnOic7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHko cSxwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgKz0gbGVuOwotICAgICAgICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcCA9IGdldGVudigiU1NMX0NJ UEhFUiIpOwotICAgICAgICAgICAgICAgICAgICAgIGlmICghcCkKLSAgICAgICAgICAgICAgICAg ICAgICAgIHAgPSAiQUxMIjsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgK LSAgICAgICAgICAgICAgICAgICAgIkNvbG9uLWRlbGltaXRlZCBsaXN0IG9mIGNpcGhlcnMgb3Ig QUxMIChjYXNlLXNlbnNpdGl2ZSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApIDwgMCkK LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICAgICAg ICBtYWtlc3RyKCZzc2xfY2lwaGVyX2xpc3Qscyk7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYg KHNzbF9jb24gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfbGlicmFy eV9pbml0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jdHggPSAoU1NMX0NUWCAq KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9DVFhfbmV3KChTU0xfTUVUSE9EICop VExTdjFfbWV0aG9kKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3NsX2N0eCAh PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jb249IChTU0wgKikgU1NM X25ldyhzc2xfY3R4KTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgICAgaWYgKHNzbF9jb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX3NldF9j aXBoZXJfbGlzdChzc2xfY29uLHNzbF9jaXBoZXJfbGlzdCk7Ci0gICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K LSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAg ICAgfQotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0KLSNpZm5kZWYgTk9TUEwKLSAg ICAgIGNhc2UgWFlGVU5DOgotICAgICAgICBpZiAoKHggPSBjbWtleShmdW5jdGFiLG5mdW5jdGFi LCIiLCJkaWFnbm9zdGljcyIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwot ICAgICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICBjYXNlIEZVTkNfREk6IHJldHVybihzZXRv bigmZm5kaWFncykpOwotICAgICAgICAgIGNhc2UgRlVOQ19FUjogcmV0dXJuKHNldG9uKCZmbmVy cm9yKSk7Ci0gICAgICAgICAgZGVmYXVsdDogICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0j ZW5kaWYgLyogTk9TUEwgKi8KLQotICAgICAgY2FzZSBYWVNMRUVQOiAgICAgICAgICAgICAgICAg ICAgIC8qIFNFVCBTTEVFUCAvIFBBVVNFICovCi0gICAgICAgIGlmICgoeCA9IGNta2V5KHNsZWVw dGFiLDEsIiIsImNhbmNlbGxhdGlvbiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICByZXR1cm4oc2V0b24oJnNsZWVwY2FuKSk7Ci0KLSAgICAgIGNhc2UgWFlD RDogICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgQ0QgKi8KLSAgICAgICAgaWYgKCh4ID0g Y21rZXkoY2R0YWIsbmNkdGFiLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVy bih4KTsKLSAgICAgICAgc3dpdGNoICh4KSB7Ci0JICBjYXNlIFhZQ0RfSDogewkJLyogU0VUIENE IEhPTUUgKi8KLQkgICAgICBleHRlcm4gY2hhciAqIG15aG9tZTsKLQkgICAgICBpZiAoKHkgPSBj bWRpcigiRGlyZWN0b3J5IG5hbWUiLHpob21lKCksJnMseHhzdHJpbmcpKSA8IDApCi0JCXJldHVy bih5KTsKLQkgICAgICBtYWtlc3RyKCZteWhvbWUscyk7Ci0JICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKLQkgIH0KLSAgICAgICAgICBjYXNlIFhZQ0RfTTogICAgICAgICAgICAgICAgICAvKiBT RVQgQ0QgTUVTU0FHRSAqLwotICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkoY2Rtc2csbmNkbXNn LCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAg ICAgICBpZiAoeCA9PSAyKSB7ICAgICAgICAgICAgICAgLyogQ0QgTUVTU0FHRSBGSUxFICovCi0g ICAgICAgICAgICAgICAgaWYgKCh4ID0gY210eHQoIk5hbWUgb2YgZmlsZSIsIiIsJnMsTlVMTCkp IDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgICBpZiAo ISpzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSBOVUxMOwotI2lmbmRlZiBOT1hGRVIKLSAg ICAgICAgICAgICAgICAgICAgc3J2Y2Rtc2cgPSAwOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZjZG1zZ3N0cixzKTsKLSAg ICAgICAgICAgICAgICBtYWtlbGlzdChjZG1zZ3N0cixjZG1zZ2ZpbGUsOCk7Ci0gICAgICAgICAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg aWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7IC8qIENELU1FU1NBR0UgT04vT0ZGICov Ci0jaWZuZGVmIE5PWEZFUgotICAgICAgICAgICAgaWYgKHggPiAwKQotICAgICAgICAgICAgICBz cnZjZG1zZyB8PSAyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBzcnZjZG1zZyAm PSAxOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLQotICAgICAgICAgIGNhc2UgWFlDRF9QOiB7ICAgICAgICAgICAgICAgIC8qIFNFVCBDRCBQ QVRIICovCi0gICAgICAgICAgICAgIGV4dGVybiBjaGFyICogY2tjZHBhdGg7Ci0gICAgICAgICAg ICAgIGlmICgoeCA9IGNtdHh0KCJDRCBQQVRIIHN0cmluZyIsIiIsJnMseHhzdHJpbmcpKSA8IDAp Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICBtYWtlc3RyKCZja2Nk cGF0aCxzKTsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICB9 Ci0gICAgICAgIH0KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgU1RPUEJJVFMKLSAgICAgIGNh c2UgWFlTVE9QOiAgICAgICAgICAgICAgICAgICAgICAvKiBTVE9QLUJJVFMgKi8KLSAgICAgICAg aWYgKCh4ID0gY21rZXkoc3RvcHRibCwyLCJTdG9wIGJpdHMgZm9yIHNlcmlhbCBkZXZpY2UiLCIi LAotICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1 cm4oeCk7Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4o eSk7Ci0gICAgICAgIGlmICh4ID4gMCAmJiB4IDwgMykgewotICAgICAgICAgICAgc3RvcGJpdHMg PSB4OwotI2lmZGVmIFROX0NPTVBPUlQKLSAgICAgICAgICAgIGlmIChuZXR3b3JrICYmIGlzdG5j b21wb3J0KCkpIHsKLSAgICAgICAgICAgICAgICB0bnNldHRpbmdzKC0xLCB4KTsKLSAgICAgICAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIFRO X0NPTVBPUlQgKi8KLSNpZmRlZiBIV1BBUklUWQotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKLSNlbHNlIC8qIEhXUEFSSVRZICovCi0gICAgICAgICAgICByZXR1cm4oLTIpOwotI2Vu ZGlmIC8qIEhXUEFSSVRZICovCi0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHJldHVybigtMik7 Ci0jZW5kaWYgLyogU1RPUEJJVFMgKi8KLQotICAgICAgY2FzZSBYWURJU0M6IHsKLSAgICAgICAg ICBleHRlcm4gaW50IGNsc29uZGlzYzsKLSAgICAgICAgICByZXR1cm4oc2V0b24oJmNsc29uZGlz YykpOwotICAgICAgfQotCi0gICAgICBjYXNlIFhZU0VSSUFMOiB7Ci0gICAgICAgICAgLyogY2hh ciBjOyAqLwotICAgICAgICAgIGV4dGVybiBpbnQgY21hc2s7Ci0gICAgICAgICAgaWYgKCh4ID0g Y21rZXkoc2VydGJsLG5zZXJ0YmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIlNlcmlhbCBk ZXZpY2UgY2hhcmFjdGVyIHNpemUsIHBhcml0eSwgYW5kIHN0b3AgYml0cyIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIjhOMSIsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICAgIGNrc3RybmNweShsaW5lLGF0bWJ1ZixMSU5CVUZTSVopOyAvKiBBc3Nv Y2lhdGVkIGtleXdvcmQgc3RyaW5nICovCi0gICAgICAgICAgcyA9IGxpbmU7Ci0gICAgICAgICAg aWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAg IGNrc3RybmNweShsaW5lLHNlcm5hbVt4XSxMSU5CVUZTSVopOwotICAgICAgICAgIHMgPSBsaW5l OwotICAgICAgICAgIGlmIChzWzBdICE9ICc4JyAmJiBzWzBdICE9ICc3JykgLyogQ2hhciBzaXpl ICovCi0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg IHogPSBzWzBdIC0gJzAnOwotICAgICAgICAgIGlmIChpc3VwcGVyKHNbMV0pKSAgICAgICAgICAg IC8qIFBhcml0eSAqLwotICAgICAgICAgICAgc1sxXSA9IHRvbG93ZXIoc1sxXSk7Ci0gICAgICAg ICAgaWYgKHNbMl0gIT0gJzEnICYmIHNbMl0gIT0gJzInKSAvKiBTdG9wIGJpdHMgKi8KLSAgICAg ICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RvcGJpdHMg PSBzWzJdIC0gJzAnOwotICAgICAgICAgIGlmICh6ID09IDgpIHsgICAgICAgICAgICAgICAgIC8q IDggYml0cyArIHBhcml0eSAob3Igbm90KSAqLwotICAgICAgICAgICAgICBwYXJpdHkgPSAwOyAg ICAgICAgICAgICAgIC8qIFNldCBwYXJpdHkgKi8KLSAgICAgICAgICAgICAgaHdwYXJpdHkgPSAo c1sxXSA9PSAnbicpID8gMCA6IHNbMV07Ci0gICAgICAgICAgICAgIHNldGNtYXNrKDgpOyAgICAg ICAgICAgICAgLyogQWxzbyBzZXQgVEVSTSBCWVRFU0laRSB0byA4ICovCi0gICAgICAgICAgfSBl bHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogNyBiaXRzIHBsdXMgcGFyaXR5ICovCi0gICAg ICAgICAgICAgIHBhcml0eSA9IChzWzFdID09ICduJykgPyAwIDogc1sxXTsKLSAgICAgICAgICAg ICAgaHdwYXJpdHkgPSAwOwotICAgICAgICAgICAgICBzZXRjbWFzayg3KTsgICAgICAgICAgICAg IC8qIEFsc28gc2V0IFRFUk0gQllURVNJWkUgdG8gNyAqLwotICAgICAgICAgIH0KLSNpZmRlZiBU Tl9DT01QT1JUCi0gICAgICAgICAgaWYgKG5ldHdvcmsgJiYgIWlzdG5jb21wb3J0KCkpCi0gICAg ICAgICAgICB0bnNldHRpbmdzKHBhcml0eSwgc3RvcGJpdHMpOwotI2VuZGlmIC8qIFROX0NPTVBP UlQgKi8KLQotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7ICAgICAgICAgIC8qIGZyb20g U0VUIFNFUklBTCAqLwotICAgICAgfQotCi0gICAgICBjYXNlIFhZT1BUUzogeyAgICAgICAgICAg ICAgICAgICAgLyogU0VUIE9QVElPTlMgKi8KLSAgICAgICAgICBleHRlcm4gaW50IHNldGRpcm9w dHMoKTsKLSAgICAgICAgICBleHRlcm4gaW50IHNldHR5cG9wdHMoKTsKLSNpZmRlZiBDS1BVUkdF Ci0gICAgICAgICAgZXh0ZXJuIGludCBzZXRwdXJnb3B0cygpOwotI2VuZGlmIC8qIENLUFVSR0Ug Ki8KLSAgICAgICAgICBpZiAoKHggPSBjbWtleShvcHRzdGFiLG5vcHRzdGFiLCJmb3IgY29tbWFu ZCIsIiIsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAg IHN3aXRjaCAoeCkgewotI2lmbmRlZiBOT0ZSSUxMUwotICAgICAgICAgICAgY2FzZSBYWERFTDoK LSAgICAgICAgICAgICAgcmV0dXJuKHNldGRlbG9wdHMoKSk7Ci0jZW5kaWYgLyogTk9GUklMTFMg Ki8KLSAgICAgICAgICAgIGNhc2UgWFhESVI6Ci0gICAgICAgICAgICAgIHJldHVybihzZXRkaXJv cHRzKCkpOwotICAgICAgICAgICAgY2FzZSBYWFRZUDoKLSAgICAgICAgICAgICAgcmV0dXJuKHNl dHR5cG9wdHMoKSk7Ci0jaWZkZWYgQ0tQVVJHRQotICAgICAgICAgICAgY2FzZSBYWFBVUkdFOgot ICAgICAgICAgICAgICByZXR1cm4oc2V0cHVyZ29wdHMoKSk7Ci0jZW5kaWYgLyogQ0tQVVJHRSAq LwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAg ICAgICB9Ci0gICAgICB9Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmbmRlZiBOT1hGRVIKLSAg ICAgIGNhc2UgWFlROEZMRzogewotICAgICAgICAgIGV4dGVybiBpbnQgcThmbGFnOwotICAgICAg ICAgIHJldHVybihzZXRvbigmcThmbGFnKSk7Ci0gICAgICB9Ci0gICAgICBjYXNlIFhZVElNRVI6 IHsKLSAgICAgICAgICBleHRlcm4gaW50IGFza3RpbWVyOwotICAgICAgICAgIHkgPSBjbW51bSgi VGltZSBsaW1pdCBmb3IgQVNLIGNvbW1hbmQsIHNlY29uZHMiLCIwIiwxMCwmeCx4eHN0cmluZyk7 Ci0jaWZkZWYgUU5YMTYKLSAgICAgICAgICByZXR1cm4oc2V0bnVtKCZhc2t0aW1lcix4LHksMzI3 NjcpKTsKLSNlbHNlCi0gICAgICAgICAgcmV0dXJuKHNldG51bSgmYXNrdGltZXIseCx5LDg2NDAw KSk7Ci0jZW5kaWYgLyogUU5YMTYgKi8KLSAgICAgIH0KLSAgICAgIGNhc2UgWFlGQUNLQjogewot ICAgICAgICAgIGV4dGVybiBpbnQgZmFja2J1ZzsKLSAgICAgICAgICByZXR1cm4oc2V0b24oJmZh Y2tidWcpKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotICAgICAgY2FzZSBYWUhJ TlRTOgotICAgICAgICByZXR1cm4oc2V0b24oJmhpbnRzKSk7Ci0KLSNpZm5kZWYgTk9TUEwKLSAg ICAgIGNhc2UgWFlFVkFMOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCBvbGRldmFsOwotICAgICAg ICAgIGlmICgoeCA9IGNta2V5KG9sZG5ldywyLCIiLCIiLCB4eHN0cmluZykpIDwgMCkKLSAgICAg ICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0gICAg ICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgb2xkZXZhbCA9IHg7Ci0gICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVm IE5PWEZFUgotICAgICAgY2FzZSBYWUZBQ0tQOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCBmYWNr cGF0aDsKLSAgICAgICAgICByZXR1cm4oc2V0b24oJmZhY2twYXRoKSk7Ci0gICAgICB9Ci0jZW5k aWYgLyogTk9YRkVSICovCi0KLSAgICAgIGNhc2UgWFlRTlhQTDogewotICAgICAgICAgIGV4dGVy biBpbnQgcW54cG9ydGxvY2s7Ci0gICAgICAgICAgcmV0dXJuKHNldG9uKCZxbnhwb3J0bG9jaykp OwotICAgICAgfQotCi0jaWZuZGVmIE5PQ01ETAotI2lmZGVmIElLU0QKLSAgICAgIGNhc2UgWFlJ S1M6IHsKLSAgICAgICAgICBpbnQgc2V0aWtzKCk7Ci0gICAgICAgICAgcmV0dXJuKHNldGlrcygp KTsKLSAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogTk9DTURMICovCi0KLSNp ZmRlZiBDS1JPT1QKLSAgICAgIGNhc2UgWFlST09UOgotICAgICAgICByZXR1cm4oZG9jaHJvb3Qo KSk7Ci0jZW5kaWYgLyogQ0tST09UICovCi0KLSNpZm5kZWYgTk9TUEwKLSNpZm5kZWYgTk9TRVhQ Ci0gICAgICBjYXNlIFhZU0VYUDogewotICAgICAgICAgIGlmICgoeCA9IGNta2V5KHNleHB0YWIs MywiIiwiIiwgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAg ICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgIGlmICgo eCA9IGNta2V5KG9vYXRhYiwzLCIiLCJhdXRvbWF0aWMiLCB4eHN0cmluZykpIDwgMCkKLSAgICAg ICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwg MCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgIHNleHBlY2hvID0g eDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDE6IHsKLSAgICAgICAg ICAgICAgICBpbnQgaSwgeHg7Ci0gICAgICAgICAgICAgICAgeHggPSBzZXhwbWF4ZGVwOwotICAg ICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEwMDAiLDEwLCZ4LHh4c3RyaW5nKSkgPCAw KQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIHogPSBzZXRu dW0oJnNleHBtYXhkZXAseCx5LC0xKTsKLSAgICAgICAgICAgICAgICBpZiAoeiA8IDApCi0gICAg ICAgICAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgICAgICAgICAgaWYgKHN4cmVzdWx0KSB7 ICAgICAgICAgLyogRnJlZSBvbGQgc3RhY2sgaWYgYWxsb2NhdGVkICovCi0gICAgICAgICAgICAg ICAgICAgIGZvciAoaSA9IDA7IGkgPCB4eDsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgIGlm IChzeHJlc3VsdFtpXSkgZnJlZShzeHJlc3VsdFtpXSk7Ci0gICAgICAgICAgICAgICAgICAgIGZy ZWUoKGNoYXIgKilzeHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzeHJsZW4pIGZy ZWUoKGNoYXIgKilzeHJsZW4pOwotICAgICAgICAgICAgICAgICAgICBzeHJlc3VsdCA9IE5VTEw7 Ci0gICAgICAgICAgICAgICAgICAgIHN4cmxlbiA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCSAgICBjYXNlIDI6Ci0JICAg ICAgcmV0dXJuKHNldG9uKCZzZXhwdHJ1bmMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBOT1NFWFBMICovCi0jZW5kaWYg LyogTk9TUEwgKi8KLQotI2lmZGVmIE5FV0ZUUAotICAgICAgY2FzZSBYWUdQUjogewotICAgICAg ICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIGdwcnRhYltdOwotICAgICAgICAgIGV4dGVybiBpbnQg ZnRwZ2V0OwotICAgICAgICAgIGlmICgoeCA9IGNta2V5KGdwcnRhYiwzLCIiLCJrZXJtaXQiLCB4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICBpZiAoKHkg PSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgZnRwZ2V0 ID0geDsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotI2VuZGlmIC8q IE5FV0ZUUCAqLwotCi0jaWZkZWYgQU5ZU1NICi0gICAgICBjYXNlIFhZU1NIOgotICAgICAgICBy ZXR1cm4oZG9zZXRzc2goKSk7Ci0jZW5kaWYgLyogQU5ZU0hIICovCi0KLSNpZmRlZiBTRlRQX0JV SUxUSU4KLSAgICAgIGNhc2UgWFlTRlRQOgotICAgICAgICByZXR1cm4oZG9zZXRzZnRwKCkpOwot I2VuZGlmIC8qIFNGVFBfQlVJTFRJTiAqLwotCi0jaWZkZWYgTE9DVVMKLSAgICAgIGNhc2UgWFlM T0NVUzoKLSAgICAgICAgICBpZiAoKHggPSBjbWtleShsb2N1c3RhYixubG9jdXN0YWIsIiIsCi0j aWZkZWYgS1VJCi0JCQkgImFzayIKLSNlbHNlCi0JCQkgImF1dG8iCi0jZW5kaWYgLyogS1VJICov Ci0JCQkgLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAg ICBpZiAoeCA9PSAyIHx8IHggPT0gMykgewkvKiBBVVRPIG9yIEFTSyAqLwotICAgICAgICAgICAg ICBzZXRhdXRvbG9jdXMoeCAtIDEpOwkvKiBUd28gZm9ybXMgb2YgYXV0b21hdGljIGxvY3VzaW5n ICovCi0JICAgICAgLyogc2V0bG9jdXMoMSwwKTsgKi8gICAgICAvKiB3ZSdyZSBub3QgY2hhbmdp bmcgdGhlIGxvY3VzIGhlcmUgKi8KLSAgICAgICAgICB9IGVsc2UgewkJCS8qIExPQ0FMIG9yIFJF TU9URSAqLwotICAgICAgICAgICAgICBzZXRhdXRvbG9jdXMoMCk7CQkvKiBObyBhdXRvbWF0aWMg TG9jdXMgY2hhbmdpbmcgKi8KLSAgICAgICAgICAgICAgc2V0bG9jdXMoeCwwKTsJCS8qIFNldCBM b2N1cyBhcyByZXF1ZXN0ZWQgKi8KLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKLSNlbmRpZiAvKiBMT0NVUyAqLwotCi0jaWZkZWYgS1VJCi0gICAgICBjYXNlIFhZ R1VJOgotICAgICAgICByZXR1cm4oc2V0Z3VpKCkpOwotI2VuZGlmIC8qIEtVSSAqLwotCi0jaWZu ZGVmIE5PRlJJTExTCi0jaWZuZGVmIE5PUkVOQU1FCi0gICAgICBjYXNlIFhZX1JFTjoJCQkvKiBT RVQgUkVOQU1FICovCi0JcmV0dXJuKHNldHJlbmFtZSgpKTsKLSNlbmRpZgkvKiBOT1JFTkFNRSAq LwotI2VuZGlmCS8qIE5PRlJJTExTICovCi0KLSNpZm5kZWYgTk9QVVNICi0jaWZkZWYgQ0tfUkVE SVIKLSNpZm5kZWYgTk9YRkVSCi0gICAgICBjYXNlIFhZRVhUUk46CQkJLyogU0VUIEVYVEVSTkFM LVBST1RPQ09MICovCi0JcmV0dXJuKHNldGV4dGVybigpKTsKLSNlbmRpZgkvKiBOT1hGRVIgKi8K LSNlbmRpZgkvKiBDS19SRURJUiAqLwotI2VuZGlmCS8qIE5PUFVTSCAqLwotCi0jaWZuZGVmIE5P U1BMCi0gICAgICBjYXNlIFhZVkFSRVY6CQkJLyogU0VUIFZBUklBQkxFLUVWQUxVQVRJT04gKi8K LQlyZXR1cm4oc2V0dmFyZXZhbCgpKTsKLSNlbmRpZgkvKiBOT1NQTCAqLwotCi0gICAgICBkZWZh dWx0OgotICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAg ICBwcmludGYoIk5vdCBpbXBsZW1lbnRlZCAtICVzXG4iLGNtZGJ1Zik7Ci0gICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLX0KLQotLyoKLSAgSCBVIFAgTyBLICAtLSAgSXMgSGFu Z3VwIE9LPwotCi0gIElzc3VlcyBhIHdhcm5pbmcgYW5kIGdldHMgT0sgZnJvbSB1c2VyIGRlcGVu ZGluZyBvbiB3aGV0aGVyIGEgY29ubmVjdGlvbgotICBzZWVtcyB0byBiZSBvcGVuIGFuZCB3aGF0 IHRoZSBTRVQgRVhJVCBXQVJOSU5HIHNldHRpbmcgaXMuICBSZXR1cm5zOgotICAgIDAgaWYgbm90 IE9LIHRvIGhhbmcgdXAgb3IgZXhpdCAoaS5lLiB1c2VyIHNhaWQgTm8pOwotICAgIG5vbnplcm8g aWYgT0suCi0gIEFyZ3VtZW50IHggaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIHRoZSBFWElUIGNv bW1hbmQgZnJvbSBTRVQgTElORSAvIEhPU1QuCi0qLwotaW50Ci1odXBvayh4KSBpbnQgeDsgeyAg ICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJucyAxIGlmIE9LLCAwIGlmIG5vdCBPSyAqLwot ICAgIGludCB5LCB6ID0gMTsKLSAgICBleHRlcm4gaW50IGV4aXRoYW5ndXA7Ci0jaWZkZWYgVk1T Ci0gICAgZXh0ZXJuIGludCBiYXRjaDsKLQotICAgIGlmIChiYXRjaCkgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE5vIHdhcm5pbmdzIGluIGJhdGNoICovCi0gICAgICByZXR1cm4oMSk7Ci0j ZWxzZQotI2lmZGVmIFVOSVgKLSAgICBpZiAoYmFja2dyZCkgICAgICAgICAgICAgICAgICAgICAg ICAvKiBObyB3YXJuaW5ncyBpbiBiYWNrZ3JvdW5kICovCi0gICAgICByZXR1cm4oMSk7Ci0jZW5k aWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi0jaWZuZGVmIEs5NUcKLSAgICBkZWJ1 ZyhGMTAxLCJodXBvayBsb2NhbCIsIiIsbG9jYWwpOwotCi0gICAgaWYgKCFsb2NhbCkgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTm8gd2FybmluZ3MgaW4gcmVtb3RlIG1vZGUgKi8KLSAgICAg IHJldHVybigxKTsKLSNlbmRpZiAvKiBLOTVHICovCi0KLSAgICBpZiAoeCA9PSAwICYmIGV4aXRo YW5ndXAgPT0gMCkgICAgICAvKiBFWElUIGFuZCBFWElUIEhBTkdVUCBpcyBPRkYgKi8KLSAgICAg IHJldHVybigxKTsKLQotICAgIGRlYnVnKEYxMDEsImh1cG9rIHgiLCIiLHgpOwotICAgIGRlYnVn KEYxMDEsImh1cG9rIHhpdHdhcm4iLCIiLHhpdHdhcm4pOwotICAgIGRlYnVnKEYxMDEsImh1cG9r IG5ldHdvcmsiLCIiLG5ldHdvcmspOwotICAgIGRlYnVnKEYxMDEsImh1cG9rIGhhdmVsaW5lIiwi IixoYXZlbGluZSk7Ci0KLSAgICBpZiAoKGxvY2FsICYmIHhpdHdhcm4pIHx8ICAgICAgICAgICAv KiBJcyBhIGNvbm5lY3Rpb24gb3Blbj8gKi8KLSAgICAgICAgKCF4ICYmIHhpdHdhcm4gPT0gMikp IHsgICAgICAgICAvKiBPciBBbHdheXMgZ2l2ZSB3YXJuaW5nIG9uIEVYSVQgKi8KLSAgICAgICAg aW50IG5lZWR3YXJuID0gMDsKLSAgICAgICAgY2hhciB3YXJuaW5nWzI1Nl07Ci0KLSAgICAgICAg aWYgKG5ldHdvcmspIHsKLSAgICAgICAgICAgIGlmICh0dGNoaygpID49IDApCi0gICAgICAgICAg ICAgIG5lZWR3YXJuID0gMTsKLSAgICAgICAgICAgIC8qIEEgY29ubmVjdGlvbiBzZWVtcyB0byBi ZSBvcGVuIGJ1dCBpdCBjYW4ndCBwb3NzaWJseSBiZSAqLwotICAgICAgICAgICAgaWYgKCFoYXZl bGluZSkKLSAgICAgICAgICAgICAgbmVlZHdhcm4gPSAwOwotICAgICAgICAgICAgaWYgKG5lZWR3 YXJuKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmNtcCh0dG5hbWUsIioiKSkKLSAgICAgICAg ICAgICAgICAgICAgY2ttYWttc2cod2FybmluZywyNTYsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiIEEgbmV0d29yayBjb25uZWN0aW9uIHRvICIsdHRuYW1lLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIiBtaWdodCBzdGlsbCBiZSBhY3RpdmUuXG4iLE5VTEwpOwotICAg ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh3YXJuaW5nLAot ICAgICAgICAgICAgICAgICAgICIgQW4gaW5jb21pbmcgbmV0d29yayBjb25uZWN0aW9uIG1pZ2h0 IHN0aWxsIGJlIGFjdGl2ZS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Nik7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg LyogU2VyaWFsIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgICAgIGlmIChjYXJyaWVyID09IENBUl9P RkYpICAgICAvKiBTRVQgQ0FSUklFUiBPRkYgKi8KLSAgICAgICAgICAgICAgbmVlZHdhcm4gPSAw OyAgICAgICAgICAgICAvKiBzbyB3ZSBkb24ndCBjYXJlIGFib3V0IGNhcnJpZXIuICovCi0gICAg ICAgICAgICBlbHNlIGlmICgoeSA9IHR0Z21kbSgpKSA+PSAwKSAvKiBlbHNlLCBnZXQgbW9kZW0g c2lnbmFscyAqLwotICAgICAgICAgICAgICBuZWVkd2FybiA9ICh5ICYgQk1fRENEKTsgIC8qIENo ZWNrIGZvciBjYXJyaWVyICovCi0gICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAg ICAgLyogSWYgd2UgY2FuJ3QgZ2V0IG1vZGVtIHNpZ25hbHMuLi4gKi8KLSAgICAgICAgICAgICAg bmVlZHdhcm4gPSAodHRjaGsoKSA+PSAwKTsKLSAgICAgICAgICAgIC8qIEEgY29ubmVjdGlvbiBz ZWVtcyB0byBiZSBvcGVuIGJ1dCBpdCBjYW4ndCBwb3NzaWJseSBiZSAqLwotICAgICAgICAgICAg aWYgKCFoYXZlbGluZSB8fCAhZXhpdGhhbmd1cCkKLSAgICAgICAgICAgICAgbmVlZHdhcm4gPSAw OwotICAgICAgICAgICAgaWYgKG5lZWR3YXJuKQotICAgICAgICAgICAgICAgIGNrbWFrbXNnKHdh cm5pbmcsMjU2LAotICAgICAgICAgICAgICAgICAgICAgIiBBIHNlcmlhbCBjb25uZWN0aW9uIG1p Z2h0IHN0aWxsIGJlIGFjdGl2ZSBvbiAiLAotICAgICAgICAgICAgICAgICAgICAgdHRuYW1lLCIu XG4iLE5VTEwpOwotICAgICAgICB9Ci0KLS8qIElmIGEgd2FybmluZyB3YXMgaXNzdWVkLCBnZXQg dXNlcidzIHBlcm1pc3Npb24gdG8gRVhJVC4gKi8KLQotICAgICAgICBpZiAobmVlZHdhcm4gfHwg KCF4ICYmIHhpdHdhcm4gPT0gMgotI2lmbmRlZiBLOTVHCi0JCQkmJiBsb2NhbAotI2VuZGlmIC8q IEs5NUcgKi8KLQkJCSApKSB7Ci0gICAgICAgICAgICBpZiAoICFuZWVkd2FybiApCi0gICAgICAg ICAgICAgICAgY2tzdHJuY3B5KHdhcm5pbmcsICJObyBhY3RpdmUgY29ubmVjdGlvbnMiLCAyNTYp OwotCi0jaWZkZWYgQ09NTUVOVAotCSAgICBwcmludGYoIiVzIix3YXJuaW5nKTsKLSAgICAgICAg ICAgIHogPSBnZXR5ZXNubyh4ID8gIk9LIHRvIGNsb3NlPyAiIDogIk9LIHRvIGV4aXQ/ICIsMCk7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJodXBvayBnZXR5ZXNubyIsIiIseik7Ci0gICAgICAg ICAgICBpZiAoeiA8IC0zKSB6ID0gMDsKLSNlbHNlCi0JICAgIHogPSB1cV9vayh3YXJuaW5nLAot CQkgICAgICB4ID8gIk9LIHRvIGNsb3NlPyAiIDogIk9LIHRvIGV4aXQ/ICIsCi0JCSAgICAgIDMs Ci0JCSAgICAgIE5VTEwsCi0JCSAgICAgIDAKLQkJICAgICAgKTsKLSAgICAgICAgICAgIGRlYnVn KEYxMDEsImh1cG9rIHVxX29rIiwiIix6KTsKLQkgICAgaWYgKHogPCAwKSB6ID0gMDsKLSNlbmRp ZiAvKiBDT01NRU5UICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKHopOwotfQotCi0j aWZuZGVmIE5PU0hPVwotVk9JRAotc2hvY3RsKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNIT1cgQ09OVFJPTC1QUkVGSVhJTkcgKi8KLSNpZmRlZiBDS19TUEVFRAotICAgIGlu dCBpOwotI2lmZGVmIE9TMgotICAgIGludCB6ZXJvOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIHBy aW50ZigKLSJcbmNvbnRyb2wgcXVvdGUgPSAlZCwgYXBwbGllZCB0byAoMCA9IHVucHJlZml4ZWQs IDEgPSBwcmVmaXhlZCk6XG5cbiIsCi0gICAgICAgICAgIG15Y3RscSk7Ci0jaWZkZWYgT1MyCi0j aWZuZGVmIFVOUFJFRklYWkVSTwotICAgIHplcm8gPSBjdGxwWzBdOwotICAgIGlmIChwcm90b2Nv bCA9PSBQUk9UT19LKSAgICAgICAgICAgIC8qIFplcm8gY2FuJ3QgYmUgdW5wcmVmaXhlZCAqLwot ICAgICAgY3RscFswXSA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBLZXJtaXQgKi8K LSNlbmRpZiAvKiBVTlBSRUZJWFpFUk8gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBmb3IgKGkg PSAwOyBpIDwgMTY7IGkrKykgewotICAgICAgICBwcmludGYoIiAgJTNkOiAlZCAgICUzZDogJWQg IixpLGN0bHBbaV0sIGkrMTYsIGN0bHBbaSsxNl0pOwotICAgICAgICBpZiAoaSA9PSAxNSkKLSAg ICAgICAgICBwcmludGYoIiAgMTI3OiAlZCIsY3RscFsxMjddKTsKLSAgICAgICAgZWxzZQotICAg ICAgICAgIHByaW50ZigiICAgICAgICAiKTsKLSAgICAgICAgcHJpbnRmKCIgICUzZDogJWQgICAl M2Q6ICVkICIsaSsxMjgsY3RscFtpKzEyOF0sIGkrMTQ0LCBjdGxwW2krMTQ0XSk7Ci0gICAgICAg IGlmIChpID09IDE1KSAgcHJpbnRmKCIgIDI1NTogJWQiLGN0bHBbMjU1XSk7Ci0gICAgICAgIHBy aW50ZigiXG4iKTsKLSAgICB9Ci0gICAgcHJpbnRmKCJcbiIpOwotI2lmbmRlZiBVTlBSRUZJWFpF Uk8KLSNpZmRlZiBPUzIKLSAgICBjdGxwWzBdID0gemVybzsKLSNlbmRpZiAvKiBPUzIgKi8KLSNl bmRpZiAvKiBVTlBSRUZJWFpFUk8gKi8KLQotI2VuZGlmIC8qIENLX1NQRUVEICovCi19Ci0KLSNp Zm5kZWYgTk9YRkVSCi1WT0lECi1zaG9kYmwoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU0hPVyBET1VCTEUvSUdOT1JFICovCi0jaWZkZWYgQ0tYWENIQVIKLSAgICBpbnQgaSwg biA9IDA7Ci0gICAgcHJpbnRmKCJcblNFVCBTRU5EIERPVUJMRSBjaGFyYWN0ZXJzOlxuIik7Ci0g ICAgZm9yIChpID0gMDsgaSA8IDI1NTsgaSsrKSB7Ci0gICAgICAgIGlmIChkYmx0W2ldICYgMikg ewotICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBpKTsKLSAgICAg ICAgfQotICAgIH0KLSAgICBpZiAobiA9PSAwKQotICAgICAgcHJpbnRmKCIgKG5vbmUpIik7Ci0g ICAgbiA9IDA7Ci0gICAgcHJpbnRmKCJcblNFVCBSRUNFSVZFIElHTk9SRSBjaGFyYWN0ZXJzOlxu Iik7Ci0gICAgZm9yIChpID0gMDsgaSA8IDI1NTsgaSsrKSB7Ci0gICAgICAgIGlmIChkYmx0W2ld ICYgMSkgewotICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBpKTsK LSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobiA9PSAwKQotICAgICAgcHJpbnRmKCIgKG5vbmUp Iik7Ci0gICAgcHJpbnRmKCJcblxuIik7Ci0jZW5kaWYgLyogQ0tYWENIQVIgKi8KLX0KLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLSNlbmRpZiAvKiBOT1NIT1cgKi8KLQotI2lmbmRlZiBOT1BVU0gKLSNp ZmRlZiBDS19SRVhYCi0vKgotICBSZXh4IGNvbW1hbmQuICBOb3RlLCB0aGlzIGlzIG5vdCBPUy8y LXNwZWNpZmljLCBiZWNhdXNlIFJleHggYWxzbyBydW5zCi0gIG9uIG90aGVyIHN5c3RlbXMgd2hl cmUgQy1LZXJtaXQgYWxzbyBydW5zLCBsaWtlIHRoZSBBbWlnYS4KLSovCi0jZGVmaW5lIFJFWEJV RkwgMTAwICAgICAgICAgICAgICAgICAgICAgLyogQ2hhbmdlIHRoaXMgaWYgbmVjY2Vzc2FyeSAq LwotY2hhciByZXh4YnVmW1JFWEJVRkxdID0geyAnXDAnIH07ICAgICAgIC8qIFJleHgncyByZXR1 cm4gdmFsdWUgKHN0cmluZykgKi8KLQotaW50Ci1kb3JleHgoKSB7Ci0gICAgaW50IHgsIHk7Ci0g ICAgY2hhciAqcmV4eGNtZDsKLQotICAgICAgICBpZiAoKHggPSBjbXR4dCgiUmV4eCBjb21tYW5k IiwiIiwmcmV4eGNtZCx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0KLSNp ZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgIHByaW50ZigiP1NvcnJ5LCBj b21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAg ICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIENLX0FQQwotICAgIC8qIERvbid0IGxldCB0 aGlzIGJlIHNldCByZW1vdGVseSAqLwotICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8 Ci0gICAgICAgIGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVzICYgQVBDX1VO Q0gpKQotICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLQot ICAgICAgICBja3N0cm5jcHkobGluZSxyZXh4Y21kLExJTkJVRlNJWik7Ci0gICAgICAgIHJleHhj bWQgPSBsaW5lOwotI2lmZGVmIE9TMgotICAgICAgICByZXR1cm4ob3MycmV4eChyZXh4Y21kLHJl eHhidWYsUkVYQlVGTCkpOwotI2Vsc2UgLyogIU9TMiAqLwotICAgICAgICBwcmludGYoIlNvcnJ5 LCBub3RoaW5nIGhhcHBlbnMuXG4iKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNl bmRpZiAvKiBPUzIgKi8KLX0KLSNlbmRpZiAvKiBDS19SRVhYICovCi0jZW5kaWYgLyogTk9QVVNI ICovCi0jZWxzZSAgLyogTk9JQ1AgKi8KLVZPSUQKLWRvbG9nZW5kKCkgewotICAgIC8qIER1bW15 IHdyaXRlIHJlY29yZCB0byBjb25uZWN0aW9uIGxvZyAqLwotfQotI2VuZGlmIC8qIE5PSUNQICov CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1 czQuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXM0LmMKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NjYwM2EuLjAwMDAwMDAKLS0tIGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czQuYworKysgL2Rldi9udWxsCkBA IC0xLDE1MDg3ICswLDAgQEAKLSNpbmNsdWRlICJja2NzeW0uaCIKLQotLyogIEMgSyBVIFUgUyA0 IC0tICAiVXNlciBJbnRlcmZhY2UiIGZvciBDLUtlcm1pdCwgcGFydCA0ICAqLwotCi0vKgotICBB dXRob3JzOgotICAgIEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAotICAgICAgVGhl IEtlcm1pdCBQcm9qZWN0LCBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5Ci0gICAg SmVmZnJleSBFIEFsdG1hbiA8amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4KLSAgICAgIFNl Y3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQotCi0gIENvcHlyaWdodCAoQykgMTk4 NSwgMjAxMSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5 IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0 IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21h aS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0qLwotCi0vKgotICBG aWxlIGNrdXVzNC5jIC0tIEZ1bmN0aW9ucyBtb3ZlZCBmcm9tIG90aGVyIGNrdXVzKi5jIG1vZHVs ZXMgdG8gZXZlbgotICBvdXQgdGhlaXIgc2l6ZXMuCi0qLwotI2luY2x1ZGUgImNrY2RlYi5oIgot I2luY2x1ZGUgImNrY2FzYy5oIgotI2luY2x1ZGUgImNrY2tlci5oIgotI2luY2x1ZGUgImNrY25l dC5oIiAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgc3ltYm9scyAqLwotI2luY2x1ZGUg ImNrdXVzci5oIgotI2luY2x1ZGUgImNrdXZlci5oIgotI2luY2x1ZGUgImNrY3hsYS5oIiAgICAg ICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBzZXRzICovCi0KLSNpZmRlZiBDS19BVVRIRU5U SUNBVElPTgotI2luY2x1ZGUgImNrdWF0aC5oIgotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9O ICovCi0jaWZkZWYgQ0tfU1NMCi0jaW5jbHVkZSAiY2tfc3NsLmgiCi0jZW5kaWYgLyogQ0tfU1NM ICovCi0KLSNpZmRlZiBWTVMKLSNpbmNsdWRlIDxlcnJuby5oPiAgICAgICAgICAgICAgICAgICAg ICAvKiBGb3IgXHYoZXJybm8pICovCi1leHRlcm4gY2hhciAqIGNrdm1zZXJyc3RyKHVuc2lnbmVk IGxvbmcpOwotI2lmbmRlZiBPTERfVk1TCi0jaW5jbHVkZSA8bGliJHJvdXRpbmVzLmg+ICAgICAg ICAgICAgICAgLyogTm90IGZvciBWQVggQyAyLjQgKi8KLSNlbHNlCi0jaW5jbHVkZSA8bGliZGVm Lmg+Ci0jZW5kaWYgLyogT0xEX1ZNUyAqLwotX1BST1RPVFlQKGludCB2bXN0dHlmZCwgKHZvaWQp ICk7Ci0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTlQKLSNkZWZpbmUg SU5DTF9OT1BNCi0jZGVmaW5lIElOQ0xfVklPICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVl ZGVkIGZvciBja29jb24uaCAqLwotI2luY2x1ZGUgPG9zMi5oPgotI3VuZGVmIENPTU1FTlQKLSNl bHNlCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHRhcGkuaD4KLSNpbmNsdWRlICJj a250YXAuaCIKLSNkZWZpbmUgQVBJUkVUIFVMT05HCi0jZW5kaWYgLyogTlQgKi8KLSNpbmNsdWRl ICJja29jb24uaCIKLSNpbmNsdWRlICJja29ldGMuaCIKLWludCBTdGFydGVkRnJvbURpYWxlciA9 IDA7Ci1IV05EIGh3bmREaWFsZXIgPSAwOwotTE9ORyBLZXJtaXREaWFsZXJJRCA9IDA7Ci0jaWZk ZWYgcHV0Y2hhcgotI3VuZGVmIHB1dGNoYXIKLSNlbmRpZiAvKiBwdXRjaGFyICovCi0jZGVmaW5l IHB1dGNoYXIoeCkgY29ub2MoeCkKLSNpZmRlZiBDS19QSUQKLSNpbmNsdWRlIDxwcm9jZXNzLmg+ Ci0jZW5kaWYgLyogQ0tfUElEICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBLVUkKLWV4 dGVybiBzdHJ1Y3Qga2V5dGFiICogdGVybV9mb250OwotZXh0ZXJuIGludCBudGVybWZvbnQsIHR0 X2ZvbnQsIHR0X2ZvbnRfc2l6ZTsKLSNlbmRpZiAvKiBLVUkgKi8KLQotZXh0ZXJuIHh4X3N0cnAg eHhzdHJpbmc7Ci0KLSNpZmRlZiBERUNfVENQSVAKLSNpbmNsdWRlIDxkZXNjcmlwPgotI2luY2x1 ZGUgPGR2aWRlZj4KLSNpbmNsdWRlIDxkY2RlZj4KLSNlbmRpZiAvKiBERUNfVENQSVAgKi8KLQot I2lmZGVmIEZORkxPQVQKLSNpbmNsdWRlIDxtYXRoLmg+ICAgICAgICAgICAgICAgICAgICAgICAv KiBGbG9hdGluZy1wb2ludCBmdW5jdGlvbnMgKi8KLSNlbmRpZiAvKiBGTkZMT0FUICovCi0KLWV4 dGVybiBpbnQgcXVpZXQsIG5ldHdvcmssIHhpdHN0YSwgZXNjYXBlLCBub3B1c2gsIHhmZXJzdGF0 LAotICBleGl0b25jbG9zZSwgdG5fZXhpdCwgdHRucHJvdG8sIGF1dG9kbCwgZmxvdywgYnl0ZW9y ZGVyLCB3aGF0LCBsYXN0eGZlcjsKLQotZXh0ZXJuIGludCBmaWxlcGVlaywgbnNjYW5maWxlLCBt YWtlc3RybGVuOwotZXh0ZXJuIGNoYXIgKiBrX2luZm9fZGlyOwotCi0jaWZuZGVmIE1BQwotI2lm bmRlZiBBTUlHQQotZXh0ZXJuIGludCB0dHlmZDsKLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAv KiBBTUlHQSAqLwotCi0jaWZkZWYgVE5DT0RFCi1leHRlcm4gaW50IHRuX25sbSwgdG5fYl9ubG0s IHRuX2JfeGZlciwgdG5fc2JfYnVnOwotZXh0ZXJuIGludCB0bl9yZW1fZWNobzsKLWV4dGVybiBp bnQgdG5fYl9tZXUsIHRuX2JfdW1lLCB0bl9hdXRoX2tyYjVfZGVzX2J1ZzsKLSNlbmRpZiAvKiBU TkNPREUgKi8KLQotc3RhdGljIGNoYXIgKiBsYXN0a3d2YWwgPSBOVUxMOwotCi1jaGFyICogeGZl cmZpbGUgPSBOVUxMOwotaW50IHhmZXJsb2cgPSAwOwotCi1leHRlcm4gaW50IGxvY2FsLCB4YXJn Yywgc3RheWZsZywgcmNmbGFnLCBiZ3NldCwgYmFja2dyZCwgY2ZpbGVmLAotICBpbnNlcnZlciwg c3J2Y2Rtc2csIHN1Y2Nlc3M7Ci0KLSNpZmRlZiBWTVMKLWV4dGVybiBpbnQgYmF0Y2g7Ci0jZW5k aWYgLyogVk1TICovCi0KLWV4dGVybiBjaGFyIGNtZGZpbFtdLCAqdmVyc2lvLCAqY2t4c3lzLCAq Knhhcmd2OwotI2lmZGVmIERFQlVHCi1leHRlcm4gY2hhciBkZWJmaWxbXTsgICAgICAgICAgICAg ICAgICAgLyogRGVidWcgbG9nIGZpbGUgbmFtZSAqLwotZXh0ZXJuIGludCBkZWJ0aW07Ci0jZW5k aWYgLyogREVCVUcgKi8KLQotZXh0ZXJuIGludCBub2luaXQ7Ci0KLXN0YXRpYyBjaGFyIG5kYXRi dWZbMTBdOwotCi1jaGFyICptb250aHNbXSA9IHsKLSAgICAiSmFuIiwgIkZlYiIsICJNYXIiLCAi QXByIiwgIk1heSIsICJKdW4iLAotICAgICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92 IiwgIkRlYyIKLX07Ci0KLWNoYXIgKgotenpuZGF0ZSgpIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJldHVybnMgdG9kYXkncyBkYXRlIGFzIHl5eXltbWRkICovCi0gICAgY2hhciAq IHAgPSBOVUxMOwotICAgIGludCB4OwotCi0vKiBXQVJOSU5HIC0gVGhpcyB3aWxsIGZhaWwgaWYg YXNjdGltZSgpIHJldHVybnMgbm9uLUVuZ2xpc2ggbW9udGggbmFtZXMgKi8KLQotICAgIHp0aW1l KCZwKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCAiYXNjdGltZSIgc3RyaW5nICov Ci0gICAgaWYgKHAgPT0gTlVMTCB8fCAqcCA9PSBOVUwpIHJldHVybigiIik7Ci0gICAgZm9yICh4 ID0gMjA7IHggPCAyNDsgeCsrKSAgICAgICAgICAgLyogeXl5eSAqLwotICAgICAgbmRhdGJ1Zlt4 IC0gMjBdID0gcFt4XTsKLSAgICBuZGF0YnVmWzZdID0gKGNoYXIpICgocFs4XSA9PSAnICcpID8g JzAnIDogcFs4XSk7Ci0gICAgbmRhdGJ1Zls3XSA9IHBbOV07ICAgICAgICAgICAgICAgICAgLyog ZGQgKi8KLSAgICBmb3IgKHggPSAwOyB4IDwgMTI7IHgrKykgICAgICAgICAgICAvKiBtbSAqLwot ICAgICAgaWYgKCFzdHJuY21wKHArNCxtb250aHNbeF0sMykpIGJyZWFrOwotICAgIGlmICh4ID09 IDEyKSB7Ci0gICAgICAgIG5kYXRidWZbNF0gPSBuZGF0YnVmWzVdID0gJz8nOwotICAgIH0gZWxz ZSB7Ci0gICAgICAgIHgrKzsKLSAgICAgICAgbmRhdGJ1Zls0XSA9IChjaGFyKSAoKHggPCAxMCkg PyAnMCcgOiAnMScpOwotICAgICAgICBuZGF0YnVmWzVdID0gKGNoYXIpICgoeCAlIDEwKSArIDQ4 KTsKLSAgICB9Ci0gICAgbmRhdGJ1Zls4XSA9IE5VTDsKLSAgICBkZWJ1ZyhGMTEwLCJ6em5kYXRl IHJldHVybiIsbmRhdGJ1ZiwwKTsKLSAgICByZXR1cm4oKGNoYXIgKiluZGF0YnVmKTsKLX0KLQot I2lmZGVmIERDTURCVUYKLWV4dGVybiBzdHJ1Y3QgY21kcHRyICpjbWRzdGs7Ci1leHRlcm4gY2hh ciAqbGluZSwgKnRtcGJ1ZjsKLSNlbHNlCi1leHRlcm4gc3RydWN0IGNtZHB0ciBjbWRzdGtbXTsK LWV4dGVybiBjaGFyIGxpbmVbXSwgdG1wYnVmW107Ci0jZW5kaWYgLyogRENNREJVRiAqLwotCi0j aWZkZWYgT1MyCi1leHRlcm4gY2hhciBleGVkaXJbXTsKLSNlbHNlCi1leHRlcm4gY2hhciAqIGV4 ZWRpcjsKLSNlbmRpZiAvKiBPUzIgKi8KLQotZXh0ZXJuIGludCBuZXR0eXBlOwotCi0jaWZuZGVm IE5PSUNQICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTW9zdCBvZiB0aGlzIGZpbGUuLi4g Ki8KLSNpZmRlZiBDS0xPR0RJQUwKLWV4dGVybiBjaGFyIGRpYWZpbFtdOwotI2VuZGlmIC8qIENL TE9HRElBTCAqLwotCi0jaWZuZGVmIEFNSUdBCi0jaWZuZGVmIE1BQwotI2luY2x1ZGUgPHNpZ25h bC5oPgotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIEFNSUdBICovCi0KLSNpZmRlZiBTVjY4 CQkJCS8qIEp1bHkgMjAwNiBiZWxpZXZlIGl0IG9yIG5vdCAqLwotI2lmbmRlZiBTRUVLX0NVUgot I2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCS8qIFNFRUtfQ1VSICovCi0jZW5kaWYJLyogU1Y2 OCAqLwotCi0jaWZkZWYgU0NPMzIJCQkJLyogSnVuZSAyMDExIGJlbGlldmUgaXQgb3Igbm90Li4u ICovCi0jaWZkZWYgWEVOSVgKLSNpZm5kZWYgU0VFS19DVVIKLSNpbmNsdWRlIDx1bmlzdGQuaD4K LSNlbmRpZgkvKiBTRUVLX0NVUiAqLwotI2VuZGlmCS8qIFhFTklYICovCi0jZW5kaWYJLyogU0NP MzIgKi8KLQotI2lmZGVmIFNUUkFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmF0 dXMgQ29tcHV0ZXIsIEluYy4gIFZPUyAqLwotI2lmZGVmIHB1dGNoYXIKLSN1bmRlZiBwdXRjaGFy Ci0jZW5kaWYgLyogcHV0Y2hhciAqLwotI2RlZmluZSBwdXRjaGFyKHgpIGNvbm9jKHgpCi0jaWZk ZWYgZ2V0Y2hhcgotI3VuZGVmIGdldGNoYXIKLSNlbmRpZiAvKiBnZXRjaGFyICovCi0jZGVmaW5l IGdldGNoYXIoeCkgY29uaW5jKDApCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotCi0KLSNpZmRlZiBB TllYMjUKLWV4dGVybiBpbnQgcmV2Y2FsbCwgY2xvc2dyLCBjdWRhdGE7Ci1pbnQgeDI1dmVyOwot ZXh0ZXJuIGNoYXIgdWRhdGFbXTsKLSNpZm5kZWYgSUJNWDI1Ci1leHRlcm4gaW50IG5wYWR4MzsK LWV4dGVybiBDSEFSIHBhZHBhcm1zW107Ci1leHRlcm4gc3RydWN0IGtleXRhYiBwYWR4M3RhYltd OwotI2VuZGlmIC8qICFJQk1YMjUgKi8KLSNpZmRlZiBJQk1YMjUKLS8qIGdsb2JhbCB2YXJpYWJs ZXMgb25seSBhdmFpbGFibGUgZm9yIElCTSBYLjI1IC0gcG9zc2libHkgaW50ZXJlc3RpbmcgZm9y Ci0gKiBvdGhlciBpbXBsZW1lbnRhdGlvbnMKLSAqLwotZXh0ZXJuIHgyNWFkZHJfdCBsb2NhbF9u dWE7Ci1leHRlcm4geDI1YWRkcl90IHJlbW90ZV9udWE7Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0j ZW5kaWYgLyogQU5ZWDI1ICovCi0KLSNpZmRlZiBORVRDT05OCi0jaWZuZGVmIE5PRElBTAotZXh0 ZXJuIGludCBubmV0ZGlyOwotZXh0ZXJuIGNoYXIgKm5ldGRpcltdOwotI2VuZGlmIC8qIE5PRElB TCAqLwotZXh0ZXJuIGNoYXIgaXBhZGRyW107Ci0KLSNpZmRlZiBDS19ORVRCSU9TCi1leHRlcm4g dW5zaWduZWQgc2hvcnQgbmV0Ymlvc0F2YWlsOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgTmV0YmV1 aUFQSTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyIE5ldEJpb3NOYW1lW107Ci1leHRlcm4gdW5zaWdu ZWQgY2hhciBOZXRCaW9zQWRhcHRlcjsKLWV4dGVybiB1bnNpZ25lZCBjaGFyIE5ldEJpb3NMU047 Ci0jZW5kaWYgLyogQ0tfTkVUQklPUyAqLwotCi0jaWZkZWYgVENQU09DS0VUCi1leHRlcm4gY2hh ciBteWlwYWRkcltdOwotZXh0ZXJuIGludCB0Y3BfcmRuczsKLSNpZmRlZiBDS19ETlNfU1JWCi1l eHRlcm4gaW50IHRjcF9kbnNfc3J2OwotI2VuZGlmIC8qIENLX0ROU19TUlYgKi8KLWV4dGVybiBj aGFyICogdGNwX2FkZHJlc3M7Ci0jaWZuZGVmIE5PSFRUUAotZXh0ZXJuIGNoYXIgKiB0Y3BfaHR0 cF9wcm94eTsKLSNlbmRpZiAvKiBOT0hUVFAgKi8KLSNpZmRlZiBOVAotI2lmZGVmIENLX1NPQ0tT Ci1leHRlcm4gY2hhciAqIHRjcF9zb2Nrc19zdnI7Ci0jaWZkZWYgQ0tfU09DS1NfTlMKLWV4dGVy biBjaGFyICogdGNwX3NvY2tzX25zOwotI2VuZGlmIC8qIENLX1NPQ0tTX05TICovCi0jZW5kaWYg LyogQ0tfU09DS1MgKi8KLSNlbmRpZiAvKiBOVCAqLwotCi0jaWZuZGVmIE5PVENQT1BUUwotI2lm ZGVmIFNPTF9TT0NLRVQKLSNpZmRlZiBTT19MSU5HRVIKLWV4dGVybiBpbnQgdGNwX2xpbmdlcjsK LWV4dGVybiBpbnQgdGNwX2xpbmdlcl90bW87Ci0jZW5kaWYgLyogU09fTElOR0VSICovCi0jaWZk ZWYgU09fRE9OVFJPVVRFCi1leHRlcm4gaW50IHRjcF9kb250cm91dGU7Ci0jZW5kaWYgLyogU09f RE9OVFJPVVRFICovCi0jaWZkZWYgVENQX05PREVMQVkKLWV4dGVybiBpbnQgdGNwX25vZGVsYXk7 Ci0jZW5kaWYgLyogVENQX05PREVMQVkgKi8KLSNpZmRlZiBTT19TTkRCVUYKLWV4dGVybiBpbnQg dGNwX3NlbmRidWY7Ci0jZW5kaWYgLyogU09fU05EQlVGICovCi0jaWZkZWYgU09fUkNWQlVGCi1l eHRlcm4gaW50IHRjcF9yZWN2YnVmOwotI2VuZGlmIC8qIFNPX1JDVkJVRiAqLwotI2lmZGVmIFNP X0tFRVBBTElWRQotZXh0ZXJuIGludCB0Y3Bfa2VlcGFsaXZlOwotI2VuZGlmIC8qIFNPX0tFRVBB TElWRSAqLwotI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8KLSNlbmRpZiAvKiBOT1RDUE9QVFMgKi8K LSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLWV4dGVybiBj aGFyICogZmxvbmFtZVtdOwotCi0jaWZuZGVmIE5PU1BMCi1leHRlcm4gaW50IHZhcmV2YWw7CQkJ LyogVmFyaWFibGUgZXZhbHVhdGlvbiBtZXRob2QgKi8KLWV4dGVybiBpbnQgZm5kaWFnczsgICAg ICAgICAgICAgICAgICAgICAvKiBGdW5jdGlvbiBkaWFnbm9zdGljcyBvbi9vZmYgKi8KLWV4dGVy biBpbnQgZGl2Ynl6ZXJvOwotaW50IGl0c2FwYXR0ZXJuID0gMDsKLWludCBpc2luYnVmbGVuID0g MDsKLWludCBpc2pvaW4gPSAwOwotI2lmZGVmIENLX0FQQwotZXh0ZXJuIGludCBhcGNhY3RpdmU7 ICAgICAgICAgICAgICAgICAgIC8qIE5vbnplcm8gPSBBUEMgY29tbWFuZCB3YXMgcmVjJ2QgKi8K LWV4dGVybiBpbnQgYXBjc3RhdHVzOyAgICAgICAgICAgICAgICAgICAvKiBBcmUgQVBDIGNvbW1h bmRzIGJlaW5nIHByb2Nlc3NlZD8gKi8KLSNpZmRlZiBEQ01EQlVGCi1leHRlcm4gY2hhciAqYXBj YnVmOyAgICAgICAgICAgICAgICAgICAgLyogQVBDIGNvbW1hbmQgYnVmZmVyICovCi0jZWxzZQot ZXh0ZXJuIGNoYXIgYXBjYnVmW107Ci0jZW5kaWYgLyogRENNREJVRiAqLwotI2VuZGlmIC8qIENL X0FQQyAqLwotCi1leHRlcm4gY2hhciBldmFsYnVmW107ICAgICAgICAgICAgICAgICAgLyogRVZB TFVBVEUgcmVzdWx0ICovCi1leHRlcm4gY2hhciB1aWRidWZbXSwgcHdidWZbXSwgcHJtYnVmW107 Ci1fUFJPVE9UWVAoIHN0YXRpYyBjaGFyICogZm5ldmFsLCAoY2hhciAqLCBjaGFyICogW10sIGlu dCwgY2hhciAqICkgKTsKLV9QUk9UT1RZUCggc3RhdGljIFZPSUQgbXlmbHNoLCAodm9pZCkgKTsK LV9QUk9UT1RZUCggc3RhdGljIGNoYXIgKiBnZXRpcCwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCgg aW50IGRlbHRhMnNlYywgKGNoYXIgKiwgbG9uZyAqKSApOwotCi0jaWZkZWYgTkVXRlRQCi1fUFJP VE9UWVAoIGNoYXIgKiBmdHBfY3BsX21vZGUsICh2b2lkKSApOwotX1BST1RPVFlQKCBjaGFyICog ZnRwX2RwbF9tb2RlLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggY2hhciAqIGZ0cF9hdXRodHlwZSwg KHZvaWQpICk7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0KLSNpZm5kZWYgTk9IVFRQCi1fUFJPVE9U WVAoIGNoYXIgKiBodHRwX2hvc3QsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgaHR0cF9pc2Nv bm5lY3RlZCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBodHRwX3NlY3VyaXR5LCAodm9p ZCkgKTsKLSNlbmRpZiAvKiBOT0hUVFAgKi8KLQotI2lmbmRlZiBOT1NFWFAKLV9QUk9UT1RZUCgg Y2hhciAqIGRvc2V4cCwgKGNoYXIgKikgKTsKLWludCBmc2V4cGZsYWcgPSAwOwotI2VuZGlmIC8q IE5PU0VYUCAqLwotCi1zdGF0aWMgY2hhciBoZXhkaWdpdHNbMTZdID0gewotICAgICcwJywnMScs JzInLCczJywnNCcsJzUnLCc2JywnNycsJzgnLCc5JywnQScsJ0InLCdDJywnRCcsJ0UnLCdGJwot fTsKLWV4dGVybiBjaGFyICogdGVtcGRpcjsKLQotI2lmZGVmIENLX1JFWFgKLWV4dGVybiBjaGFy IHJleHhidWZbXTsKLSNlbmRpZiAvKiBDS19SRVhYICovCi0KLWV4dGVybiBpbnQgdGZsaW5lW107 Ci0KLWNoYXIgKndrZGF5c1tdID0gewotICAgICJTdW4iLCAiTW9uIiwgIlR1ZSIsICJXZWQiLCAi VGh1IiwgIkZyaSIsICJTYXQiCi19OwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBPUzIK LWV4dGVybiBjaGFyIHN0YXJ0dXBkaXJbXSwgaW5pZGlyW107Ci0jZWxzZQotI2lmZGVmIFZNU09S VU5JWAotZXh0ZXJuIGNoYXIgc3RhcnR1cGRpcltdOwotI2VuZGlmIC8qIFZNU09SVU5JWCAqLwot I2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgT1MyCi1fUFJPVE9UWVAgKGludCBvczJnZXRjcCwg KHZvaWQpICk7Ci0jaWZkZWYgVENQU09DS0VUCi1leHRlcm4gY2hhciB0Y3BuYW1lW107Ci0jZW5k aWYgLyogVENQU09DS0VUICovCi1leHRlcm4gaW50IHRjcF9hdmFpbDsKLSNpZmRlZiBERUNORVQK LWV4dGVybiBpbnQgZG5ldF9hdmFpbDsKLSNlbmRpZiAvKiBERUNORVQgKi8KLSNpZmRlZiBTVVBF UkxBVAotZXh0ZXJuIGludCBzbGF0X2F2YWlsOwotI2VuZGlmIC8qIFNVUEVSTEFUICovCi0KLSNp Zm5kZWYgTk9URVJNCi1leHRlcm4gaW50IHR0X3R5cGUsIG1heF90dDsKLWV4dGVybiBzdHJ1Y3Qg dHRfaW5mb19yZWMgdHRfaW5mb1tdOwotI2VuZGlmIC8qIE5PVEVSTSAqLwotZXh0ZXJuIGludCB0 dF9yb3dzW10sIHR0X2NvbHNbXTsKLSNlbHNlIC8qIE9TMiAqLwotZXh0ZXJuIGludCB0dF9yb3dz LCB0dF9jb2xzOwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgQ0tfVEFQSQotZXh0ZXJuIGlu dCB0dHRhcGk7Ci1leHRlcm4gaW50IHRhcGlwYXNzOwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgKiB0 YXBpbGluZXRhYjsKLWV4dGVybiBzdHJ1Y3Qga2V5dGFiICogX3RhcGlsaW5ldGFiOwotZXh0ZXJu IGludCBudGFwaWxpbmU7Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotCi1leHRlcm4gc3RydWN0IGtl eXRhYiBjb2x4dGFiW107Ci1leHRlcm4gaW50IG5jb2x4OwotCi1leHRlcm4gY2hhciB0dG5hbWVb XSwgKnppbnB0ciwgKmtlcm1yYzsKLWV4dGVybiBjaGFyIGluaWRpcltdOwotCi1leHRlcm4gaW50 IGFjdGl2ZWNtZCwgcmVtb25seSwgY21kX3Jvd3MsIGNtZF9jb2xzLCBwYXJpdHksIHNlc2xvZywK LSAgc2Vzc2Z0LCBzb3NpLCBod3Bhcml0eSwgdHNlY3MsIHhhcmdzLCB6aW5jbnQsIHRsZXZlbCwg aW5zaWxlbmNlLCBjbWRtc2ssCi0gIHRpbWludCwgdGltZWYsIGluYnVmc2l6ZSwgZGlhbG9nLCBi aW5hcnksIGNhcnJpZXIsIGNkdGltbywgY21hc2ssIGR1cGxleCwKLSAgZm1hc2ssIGluZWNobywg bm1hYywgdHVybmNoLCB0dXJuLCBrYmNoYXI7Ci0KLSNpZm5kZWYgTk9YRkVSCi1leHRlcm4gQ0hB UiBlb2wsICBteXBhZGMsIG15c3RjaCwgcGFkY2gsIHNlb2wsIHN0Y2hyLCAqIGVwa3Rtc2csIGZl b2w7Ci1leHRlcm4gY2hhciAqY2tzeXNpZDsKLWV4dGVybiBzdHJ1Y3QgY2tfcCBwdGFiW107Ci1l eHRlcm4gaW50Ci0gIHByb3RvY29sLCBwcmVmaXhpbmcsIHhmcmJlbCwgeGZyY2FuLCB4ZnJpbnQs IHhmcmNociwgeGZybnVtLCBwa3RwYXVzLAotICBsc2NhcHIsIGxzY2FwdSwgeGZlcm1vZGUsIGRl c3QsIHNsb3N0YXJ0LCBtYXhycHMsIG1heHNwcywgbWF4dHJ5LCBteXBhZG4sCi0gIG5wYWQsIHBr dHRpbSwgYmlncmJzaXosIGJpZ3Nic2l6LCBrZWVwLCBhdGNhcHIsIGF1dG9wYXIsIGJjdHIsIGJj dHUsCi0gIGNydW5jaGVkLCBja2RlbGF5LCBlYnEsIGVicWZsZywgcGt0bG9nLCByZXRyYW5zLCBy cGFja2V0cywgcnB0ZmxnLCBycHRxLAotICBydGltbywgc3BhY2tldHMsIHNwc2l6LCBzcHNpemYs IHNwc2l6ciwgdGltZW91dHMsIGZuY2FjdCwgZm5jbnYsIHVycHNpeiwKLSAgd21heCwgd3Nsb3Ru LCB3c2xvdHIsIGZkaXNwbGEsIHNwbWF4LCBmbnJwYXRoLCBmbnNwYXRoLCBjcmMxNjsKLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIE9TMgotZXh0ZXJuIGludCB6eHBuOwotZXh0ZXJuIGlu dCB2aWV3b25seTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBH RlRJTUVSCi1leHRlcm4gQ0tGTE9BVCBmcHRzZWNzLCBmcHhmc2VjczsKLSNlbmRpZiAvKiBHRlRJ TUVSICovCi1leHRlcm4gbG9uZyB4ZnNlY3MsIHRmY3BzOwotCi0jaWZkZWYgQ0tfVE1QRElSCi1l eHRlcm4gY2hhciAqZGxkaXI7Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0jZW5kaWYgLyogTk9Y RkVSICovCi0KLSNpZmRlZiBSRUNVUlNJVkUKLWV4dGVybiBpbnQgcmVjdXJzaXZlOwotI2VuZGlm IC8qIFJFQ1VSU0lWRSAqLwotCi0jaWZkZWYgVk1TCi1leHRlcm4gaW50IGZyZWNsOwotI2VuZGlm IC8qIFZNUyAqLwotCi1leHRlcm4gQ0tfT0ZGX1QgZmZjLCB0ZmMsIHRsY2ksIHRsY287Ci1leHRl cm4gbG9uZyBmaWxjbnQsIHJwdG4sIHNwZWVkLCAgY2N1LCBjY3AsIHZlcm51bSwgeHZlcm51bTsK LQotI2lmbmRlZiBOT1NQTAotZXh0ZXJuIGNoYXIgZnNwZWNbXSwgbXlob3N0W107Ci0jZW5kaWYg LyogTk9TUEwgKi8KLQotZXh0ZXJuIGNoYXIgKnRmbmFtW107ICAgICAgICAgICAgICAgICAgIC8q IENvbW1hbmQgZmlsZSBuYW1lcyAqLwotCi1leHRlcm4gY2hhciBwa3RmaWxbXSwgICAgICAgICAg ICAgICAgICAgLyogUGFja2V0IGxvZyBmaWxlIG5hbWUgKi8KLSNpZmRlZiBUTE9HCi0gIHRyYWZp bFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gbG9nIGZpbGUg bmFtZSAqLwotI2VuZGlmIC8qIFRMT0cgKi8KLSAgc2VzZmlsW107ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTZXNzaW9uIGxvZyBmaWxlIG5hbWUgKi8KLQotI2lmbmRlZiBOT1hNSVQg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRSQU5TTUlUIGNvbW1hbmQgdmFyaWFibGVzICov Ci1leHRlcm4gY2hhciB4bWl0YnVmW107Ci1leHRlcm4gaW50IHhtaXRmLCB4bWl0bCwgeG1pdHgs IHhtaXRzLCB4bWl0dywgeG1pdHQ7Ci0jZW5kaWYgLyogTk9YTUlUICovCi0KLWV4dGVybiBpbnQg Y21kbHZsOwotCi0jaWZuZGVmIE5PU1BMCi0vKiBTY3JpcHQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ug aXRlbXMgKi8KLWV4dGVybiBjaGFyICoqYV9wdHJbXTsgICAgICAgICAgICAgICAgICAvKiBBcnJh eXMgKi8KLWV4dGVybiBpbnQgYV9kaW1bXTsKLXN0YXRpYyBjaGFyICogaW5wbWF0Y2ggPSBOVUxM OwotI2lmZGVmIENLRkxPQVQKLWNoYXIgKiBpbnBzY2FsZSA9IE5VTEw7Ci0jZW5kaWYJLyogQ0tG TE9BVCAqLwotZXh0ZXJuIGNoYXIgKiBpbnBidWYsIGluY2hhcltdOyAgICAgICAgIC8qIEJ1ZmZl cnMgZm9yIElOUFVUIGFuZCBSRUlOUFVUICovCi1leHRlcm4gY2hhciAqaW5wYnA7ICAgICAgICAg ICAgICAgICAgICAgLyogQW5kIHBvaW50ZXIgdG8gc2FtZSAqLwotc3RhdGljIGNoYXIgKnIzID0g KGNoYXIgKikwOwotZXh0ZXJuIGludCBpbmNvdW50OyAgICAgICAgICAgICAgICAgICAgIC8qIElO UFVUIGNoYXJhY3RlciBjb3VudCAqLwotZXh0ZXJuIGludCBtX2ZvdW5kOyAgICAgICAgICAgICAg ICAgICAgIC8qIE1JTlBVVCByZXN1bHQgKi8KLWV4dGVybiBpbnQgbWFjbHZsOyAgICAgICAgICAg ICAgICAgICAgICAvKiBNYWNybyBpbnZvY2F0aW9uIGxldmVsICovCi1leHRlcm4gc3RydWN0IG10 YWIgKm1hY3RhYjsgICAgICAgICAgICAgLyogTWFjcm8gdGFibGUgKi8KLWV4dGVybiBjaGFyICpt cnZhbFtdOwotZXh0ZXJuIGludCBtYWNhcmdjW10sIHRvcGFyZ2M7Ci0KLSNpZmRlZiBDT01NRU5U Ci1leHRlcm4gY2hhciAqbV9saW5lW107Ci1leHRlcm4gY2hhciAqdG9wbGluZTsKLSNlbmRpZiAv KiBDT01NRU5UICovCi0KLWV4dGVybiBjaGFyICptX2FyZ1tNQUNMRVZFTF1bMTBdOyAvKiBZb3Ug aGF2ZSB0byBwdXQgaW4gdGhlIGRpbWVuc2lvbnMgKi8KLWV4dGVybiBjaGFyICpnX3ZhcltHVkFS U107ICAgICAgICAvKiBmb3IgZXh0ZXJuYWwgMi1kaW1lbnNpb25hbCBhcnJheXMuICovCi0jaWZk ZWYgRENNREJVRgotZXh0ZXJuIGludCAqY291bnQsICppbnBjYXM7Ci0jZWxzZQotZXh0ZXJuIGlu dCBjb3VudFtdLCBpbnBjYXNbXTsKLSNlbmRpZiAvKiBEQ01EQlVGICovCi0jZW5kaWYgLyogTk9T UEwgKi8KLQotI2lmZGVmIFVOSVgKLWV4dGVybiBpbnQgaGFzbG9jazsgICAgICAgICAgICAgICAg ICAgICAvKiBGb3IgVVVDUCBsb2NrcyAqLwotZXh0ZXJuIGNoYXIgZmxmbmFtW107Ci0jaWZuZGVm IFVTRVRUWUxPQ0sKLWV4dGVybiBjaGFyIGxvY2syW107Ci0jZW5kaWYgLyogVVNFVFRZTE9DSyAq LwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmZGVmIE9TMk9SVU5JWAotZXh0ZXJuIGludCBtYXhu YW0sIG1heHBhdGg7ICAgICAgICAgICAgIC8qIExvbmdlc3QgbmFtZSwgcGF0aCBsZW5ndGggKi8K LSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLQotZXh0ZXJuIGludCBtZG10eXAsIG1kbXNhdjsKLQot I2lmbmRlZiBOT0RJQUwKLS8qIERJQUwtcmVsYXRlZCB2YXJpYWJsZXMgKi8KLWV4dGVybiBjaGFy IG1vZGVtbXNnW107Ci1leHRlcm4gTURNSU5GICptb2RlbXBbXTsgICAgICAgICAgICAgICAgLyog UG9pbnRlcnMgdG8gbW9kZW0gaW5mbyBzdHJ1Y3RzICovCi1leHRlcm4gaW50IG5tZG0sIGRpYWxo bmcsIGRpYWx0bW8sIGRpYWxrc3AsIGRpYWxkcHksIGRpYWxzcnQsIGRpYWxzdGE7Ci1leHRlcm4g aW50IGRpYWxydHIsIGRpYWxpbnQsIGRpYWxyc3RyLCBkaWFsY29uLCBkaWFsY3EsIGRpYWxmbGQ7 Ci1leHRlcm4gaW50IG1kbXNwZCwgZGlhbGVjLCBkaWFsZGMsIGRpYWxtdGgsIGRpYWxtYXV0bywg ZGlhbGVzYzsKLWV4dGVybiBjaGFyICpkaWFsbnVtLCAgICpkaWFsaW5pLCAgKmRpYWxkaXJbXSwg KmRpYWxjbWQsICAqZGlhbG5wciwKLSAqZGlhbGRjb24sICpkaWFsZGNvZmYsICpkaWFsZWNvbiwg KmRpYWxlY29mZiwgKmRpYWxoY21kLCAqZGlhbGxhYywKLSAqZGlhbGh3ZmMsICpkaWFsc3dmYywg ICpkaWFsbm9mYywgKmRpYWxwdWxzZSwgKmRpYWx0b25lLCAqZGlhbG5hbWUsCi0gKmRpYWxhYW9u LCAqZGlhbGFhb2ZmLCAqZGlhbG1hYzsKLWV4dGVybiBjaGFyICpkaWFsbGNjLCAgICpkaWFsaXhw LCAgKmRpYWxpeHMsICAgKmRpYWxsZHAsICAqZGlhbGxkcywKLSAqZGlhbHB4aSwgICpkaWFscHhv LCAgICpkaWFsc2Z4LCAgKmRpYWx0ZnA7Ci1leHRlcm4gY2hhciAqZGlhbGxjcCwgICAqZGlhbGxj czsKLWV4dGVybiBpbnQgbnRvbGxmcmVlLCBuZGlhbHB4eCwgbmxvY2FsYWM7Ci1leHRlcm4gY2hh ciAqZGlhbHRmY1tdLCAqZGlhbGxjYWNbXSwgKmRpYWxweHhbXSwgKm1hdGNocHh4OwotZXh0ZXJu IGludCBuZGlhbHB1Y2MsIG5kaWFsdG9jYzsKLWV4dGVybiBjaGFyICpkaWFsdG9jY1tdLCAqZGlh bHB1Y2NbXTsKLWV4dGVybiBpbnQgbmRpYWxkaXIsIGRpYWxjbmYsIGRpYWxjdnQsIGRpYWxpZHQs IGRpYWxwYWNlOwotZXh0ZXJuIGxvbmcgZGlhbG1heCwgZGlhbGNhcGFzOwotCi1leHRlcm4gc3Ry dWN0IGtleXRhYiBtZG10YWJbXTsKLQotI2lmZGVmIEJJR0JVRk9LCi0jZGVmaW5lIEFSR0JVRlNJ WiA4MTkxCi0jZWxzZQotI2RlZmluZSBBUkdCVUZTSVogMTAyMwotI2VuZGlmIC8qIEJJR0JVRk9L ICovCi0KLSNpZmRlZiBCSUdCVUZPSwotZXh0ZXJuIGNoYXIgKiBkaWFsbXNnW107Ci0jZW5kaWYg LyogQklHQlVGT0sgKi8KLQotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0jaWZuZGVmIE5PQ1NFVFMK LS8qIFRyYW5zbGF0aW9uIHN0dWZmICovCi1leHRlcm4gaW50IG5maWxjOwotZXh0ZXJuIHN0cnVj dCBrZXl0YWIgZmNzdGFiW107Ci1leHRlcm4gaW50IGZjaGFyc2V0LCB0Y2hhcnNldCwgdHNsZXZl bCwgbGFuZ3VhZ2UsIG5sbmcsIHRjc3IsIHRjc2w7Ci1leHRlcm4gaW50IGRjc2V0NywgZGNzZXQ4 OwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgbG5ndGFiW107Ci1leHRlcm4gc3RydWN0IGNzaW5mbyBm Y3NpbmZvW10sIHRjc2luZm9bXTsKLWV4dGVybiBzdHJ1Y3QgbGFuZ2luZm8gbGFuZ3NbXTsKLSNp ZmRlZiBDS19BTlNJQwotZXh0ZXJuIENIQVIgKCp4bHNbTUFYVENTRVRTKzFdW01BWEZDU0VUUysx XSkoQ0hBUik7IC8qIENoYXJhY3RlciBzZXQgKi8KLWV4dGVybiBDSEFSICgqeGxyW01BWFRDU0VU UysxXVtNQVhGQ1NFVFMrMV0pKENIQVIpOyAvKiB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgKi8KLSNl bHNlCi1leHRlcm4gQ0hBUiAoKnhsc1tNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKSgpOyAvKiBD aGFyYWN0ZXIgc2V0ICovCi1leHRlcm4gQ0hBUiAoKnhscltNQVhUQ1NFVFMrMV1bTUFYRkNTRVRT KzFdKSgpOyAvKiB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuICovCi0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLSNpZmRlZiBVTklDT0RFCi0gICAgZXh0ZXJuIGludCB1Y3Nib20sIHVjc29yZGVyOwotI2Vu ZGlmIC8qIFVOSUNPREUgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZm5kZWYgTk9TUEwK LS8qIEJ1aWx0LWluIHZhcmlhYmxlIG5hbWVzLCBtYXhpbXVtIGxlbmd0aCBWTkFNTCAoMjAgY2hh cmFjdGVycykgKi8KLQotc3RydWN0IGtleXRhYiB2YXJ0YWJbXSA9IHsKLSAgICB7ICJfbGluZSIs ICAgICBWTl9URkxOLCAgQ01fSU5WfSwgICAvKiAxOTIgKi8KLSNpZmRlZiBPUzIKLSAgICB7ICJf cmVnbmFtZSIsICBWTl9SRUdOLCAgQ01fSU5WfSwgICAvKiAxLjEuMTIgKi8KLSAgICB7ICJfcmVn b3JnIiwgICBWTl9SRUdPLCAgQ01fSU5WfSwgICAvKiAxLjEuMTIgKi8KLSAgICB7ICJfcmVnbnVt IiwgICBWTl9SRUdTLCAgQ01fSU5WfSwgICAvKiAxLjEuMTIgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LSAgICB7ICJhcGNhY3RpdmUiLCBWTl9BUEMsICAgQ01fSU5WfSwgICAvKiAxOTIgKi8KLSNpZmRl ZiBOVAotICAgIHsgImFwcGRhdGEiLCAgIFZOX0FQUERBVEEsIDB9LCAgICAgIC8qIDIwMSAqLwot I2VuZGlmIC8qIE5UICovCi0gICAgeyAiYXJnYyIsICAgICAgVk5fQVJHQywgIDB9LAotICAgIHsg ImFyZ3MiLCAgICAgIFZOX0FSR1MsICAwfSwKLSAgICB7ICJhdXRobmFtZSIsICBWTl9BVVRITiwg MH0sICAgICAgICAvKiAxOTYgKi8KLSAgICB7ICJhdXRoc3RhdGUiLCBWTl9BVVRIUywgMH0sICAg ICAgICAvKiAxOTUgKi8KLSAgICB7ICJhdXRodHlwZSIsICBWTl9BVVRIVCwgMH0sICAgICAgICAv KiAxOTUgKi8KLSAgICB7ICJiaXRzIiwgICAgICBWTl9CSVRTLCAgMH0sICAgICAgICAvKiAyMTIg Ki8KLSAgICB7ICJibG9ja2NoZWNrIixWTl9CTEssICAgMH0sICAgICAgICAvKiAxOTUgKi8KLSNp ZmRlZiBCUk9XU0VSCi0gICAgeyAiYnJvd3NlciIsICAgVk5fQlJPV1NSLDB9LCAgICAgICAgLyog MTkzICovCi0gICAgeyAiYnJvd3NvcHRzIiwgVk5fQlJPUFQsIDB9LCAgICAgICAgLyogMTkzICov Ci0gICAgeyAiYnJvd3N1cmwiLCAgVk5fVVJMLCAgIDB9LCAgICAgICAgLyogMTkzICovCi0gICAg eyAiYnVpbGRpZCIsICAgVk5fQlVJTEQsIDB9LCAgICAgICAgLyogMTk5ICovCi0jZW5kaWYgLyog QlJPV1NFUiAqLwotICAgIHsgImJ5dGVvcmRlciIsIFZOX0JZVEUsICAwfSwgICAgICAgIC8qIDE5 NSAqLwotI2lmbmRlZiBOT0NTRVRTCi0gICAgeyAiY2hhcnNldCIsICAgVk5fQ1NFVCwgIDB9LCAg ICAgICAgLyogMTkyICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIHsgImNtZGJ1ZnNpemUi LFZOX0NNREJMLCAwfSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsgImNtZGZpbGUiLCAgIFZOX0NN REYsICAwfSwKLSAgICB7ICJjbWRsZXZlbCIsICBWTl9DTURMLCAgMH0sCi0gICAgeyAiY21kc291 cmNlIiwgVk5fQ01EUywgIDB9LAotICAgIHsgImNvbHMiLCAgICAgIFZOX0NPTFMsICAwfSwgICAg ICAgIC8qIDE5MCAqLwotI2lmZGVmIE5UCi0gICAgeyAiY29tbW9uIiwgICAgVk5fQ09NTU9OLCAw fSwgICAgICAgLyogMjAxICovCi0jZW5kaWYgLyogTlQgKi8KLSAgICB7ICJjb25uZWN0aW9uIixW Tl9DT05OLCAgMH0sICAgICAgICAvKiAxOTAgKi8KLSAgICB7ICJjb3VudCIsICAgICBWTl9DT1VO LCAgMH0sCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgImNwcyIsICAgICAgIFZOX0NQUywgICAwfSwg ICAgICAgIC8qIDE5MCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHsgImNwdSIsICAgICAg IFZOX0NQVSwgICAwfSwKLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAiY3JjMTYiLCAgICAgVk5fQ1JD MTYsIDB9LCAgICAgICAgLyogMTkyICovCi0gICAgeyAiY3R0eSIsICAgICAgVk5fVFRZTkFNLDB9 LCAgICAgICAgLyogMTk2ICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZuZGVmIE5PTE9HRElB TAotI2lmbmRlZiBOT0xPQ0FMCi0gICAgeyAiY3hfdGltZSIsICAgVk5fQ1hUSU1FLDB9LCAgICAg ICAgLyogMTk1ICovCi0gICAgeyAiY3hfc3RhdHVzIiwgVk5fQ1hfU1RBLDB9LCAgICAgICAgLyog MTk5ICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2VuZGlmIC8qIE5PTE9HRElBTCAqLwotI2lm bmRlZiBOT0RJQUwKLSAgICB7ICJkJGFjIiwgICAgICBWTl9EX0FDLCAgMH0sICAgICAgICAvKiAx OTIgKi8KLSAgICB7ICJkJGNjIiwgICAgICBWTl9EX0NDLCAgMH0sICAgICAgICAvKiAxOTIgKi8K LSAgICB7ICJkJGlwIiwgICAgICBWTl9EX0lQLCAgMH0sICAgICAgICAvKiAxOTIgKi8KLSAgICB7 ICJkJGxjIiwgICAgICBWTl9EX0xDUCwgMH0sICAgICAgICAvKiAxOTMgKi8KLSAgICB7ICJkJGxj cCIsICAgICBWTl9EX0xDUCwgQ01fSU5WfSwgICAvKiAxOTMgKi8KLSAgICB7ICJkJGxwIiwgICAg ICBWTl9EX0xQLCAgMH0sICAgICAgICAvKiAxOTIgKi8KLSAgICB7ICJkJHB4IiwgICAgICBWTl9E X1BYWCwgMH0sICAgICAgICAvKiAxOTUgKi8KLSAgICB7ICJkJHB4eCIsICAgICBWTl9EX1BYWCwg Q01fSU5WfSwgICAvKiAxOTUgKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSAgICB7ICJkYXRlIiwg ICAgICBWTl9EQVRFLCAgMH0sCi0gICAgeyAiZGF5IiwgICAgICAgVk5fREFZLCAgIDB9LAotI2lm ZGVmIE5UCi0gICAgeyAiZGVza3RvcCIsICAgVk5fREVTS1RPUCwgMH0sICAgICAvKiAyMDEgKi8K LSNlbmRpZiAvKiBOVCAqLwotI2lmbmRlZiBOT0RJQUwKLSAgICB7ICJkaWFsY291bnQiLCBWTl9E UlRSLCAgMH0sICAgICAgICAvKiAxOTUgKi8KLSAgICB7ICJkaWFsbWVzc2FnZSIsVk5fRE1TRywg MH0sCS8qIDIxMiAqLwotICAgIHsgImRpYWxudW1iZXIiLFZOX0ROVU0sICAwfSwgICAgICAgIC8q IDE5MiAqLwotICAgIHsgImRpYWxyZXN1bHQiLFZOX01ETVNHLCAwfSwgICAgICAgIC8qIDE5MiAq LwotICAgIHsgImRpYWxzdGF0dXMiLFZOX0RJQUwsICAwfSwgICAgICAgIC8qIDE5MCAqLwotICAg IHsgImRpYWxzdWZmaXgiLFZOX1BEU0ZYLCAwfSwgICAgICAgIC8qIDE5MyAqLwotICAgIHsgImRp YWx0eXBlIiwgIFZOX0RUWVBFLCAwfSwgICAgICAgIC8qIDE5MyAqLwotI2VuZGlmIC8qIE5PRElB TCAqLwotICAgIHsgImRpcmVjdG9yeSIsIFZOX0RJUkUsICAwfSwKLSNpZm5kZWYgTk9ESUFMCi0g ICAgeyAiZG1faGYiLCAgICAgVk5fRE1fSEYsIDB9LCAgICAgICAgLyogMTk5ICovCi0gICAgeyAi ZG1fbHAiLCAgICAgVk5fRE1fTFAsIDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAiZG1fc3Ai LCAgICAgVk5fRE1fU1AsIDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAiZG1fcGQiLCAgICAg Vk5fRE1fUEQsIDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAiZG1fdGQiLCAgICAgVk5fRE1f VEQsIDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAiZG1fd2EiLCAgICAgVk5fRE1fV0EsIDB9 LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAiZG1fd2IiLCAgICAgVk5fRE1fV0IsIDB9LCAgICAg ICAgLyogMTk5ICovCi0gICAgeyAiZG1fd2QiLCAgICAgVk5fRE1fV0QsIDB9LCAgICAgICAgLyog MTk1ICovCi0gICAgeyAiZG1fcmMiLCAgICAgVk5fRE1fUkMsIDB9LCAgICAgICAgLyogMTk1ICov Ci0jZW5kaWYgLyogTk9ESUFMICovCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgImRvd25sb2FkIiwg IFZOX0RMRElSLCAwfSwgICAgICAgIC8qIDE5MiAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAg IHsgImVkaXRvciIsICAgIFZOX0VESVRPUiwwfSwKLSAgICB7ICJlZGl0ZmlsZSIsICBWTl9FREZJ TEUsMH0sCi0gICAgeyAiZWRpdG9wdHMiLCAgVk5fRURPUFQsIDB9LAotICAgIHsgImVycm5vIiwg ICAgIFZOX0VSUk5PLCAwfSwgICAgICAgIC8qIDE5MiAqLwotICAgIHsgImVycnN0cmluZyIsIFZO X0VSU1RSLCAwfSwgICAgICAgIC8qIDE5MiAqLwotICAgIHsgImVzY2FwZSIsICAgIFZOX0VTQywg ICAwfSwgICAgICAgIC8qIDE5MyAqLwotICAgIHsgImV2YWx1YXRlIiwgIFZOX0VWQUwsICAwfSwg ICAgICAgIC8qIDE5MCAqLwotI2lmZGVmIE9TMk9SVU5JWAotICAgIHsgImV4ZWRpciIsICAgIFZO X0VYRURJUiwwfSwgICAgICAgIC8qIDE5MiAqLwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotICAg IHsgImV4aXRzdGF0dXMiLFZOX0VYSVQsICAwfSwKLSNpZmRlZiBDS0NIQU5ORUxJTwotICAgIHsg ImZfY291bnQiLCAgIFZOX0ZDT1UsICAwfSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsgImZfZXJy b3IiLCAgIFZOX0ZFUlIsICAwfSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsgImZfbWF4IiwgICAg IFZOX0ZNQVgsICAwfSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsgImZpbGVlcnJvciIsIFZOX0ZF UlIsICBDTV9JTlZ9LCAgIC8qIDE5NSAqLwotICAgIHsgImZpbGVtYXgiLCAgIFZOX0ZFUlIsICBD TV9JTlZ9LCAgIC8qIDE5NSAqLwotI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCi0gICAgeyAiZmls ZW5hbWUiLCAgVk5fRk5BTSwgIDB9LCAgICAgICAgLyogMTkzICovCi0gICAgeyAiZmlsZW51bWJl ciIsVk5fRk5VTSwgIDB9LCAgICAgICAgLyogMTkzICovCi0gICAgeyAiZmlsZXNwZWMiLCAgVk5f RklMRSwgIDB9LAotICAgIHsgImZzaXplIiwgICAgIFZOX0ZGQywgICAwfSwgICAgICAgIC8qIDE5 MCAqLwotI2lmZGVmIEdGVElNRVIKLSAgICB7ICJmdGltZSIsICAgICBWTl9GVElNRSwgMH0sICAg ICAgICAvKiAxOTkgKi8KLSNlbHNlCi0gICAgeyAiZnRpbWUiLCAgICAgVk5fTlRJTSwgIENNX0lO Vn0sCi0jZW5kaWYgLyogR0ZUSU1FUiAqLwotI2lmbmRlZiBOT0ZUUAotI2lmbmRlZiBTWVNGVFAK LSAgICB7ICJmdHBfY29kZSIsICAgICAgICAgVk5fRlRQX0MsIDB9LCAvKiAxOTkgKi8KLSAgICB7 ICJmdHBfY3BsIiwgICAgICAgICAgVk5fRlRQX0IsIDB9LCAvKiAxOTkgKi8KLSAgICB7ICJmdHBf Y29ubmVjdGVkIiwgICAgVk5fRlRQX1gsIDB9LCAvKiAxOTkgKi8KLSAgICB7ICJmdHBfZHBsIiwg ICAgICAgICAgVk5fRlRQX0QsIDB9LCAvKiAxOTkgKi8KLSAgICB7ICJmdHBfZ2V0cHV0cmVtb3Rl IiwgVk5fRlRQX0csIDB9LCAvKiAxOTkgKi8KLSAgICB7ICJmdHBfaG9zdCIsICAgICAgICAgVk5f RlRQX0gsIDB9LCAvKiAxOTkgKi8KLSAgICB7ICJmdHBfbG9nZ2VkaW4iLCAgICAgVk5fRlRQX0ws IDB9LCAvKiAxOTkgKi8KLSAgICB7ICJmdHBfbWVzc2FnZSIsICAgICAgVk5fRlRQX00sIDB9LCAv KiAxOTkgKi8KLSAgICB7ICJmdHBfbXNnIiwgICAgICAgICAgVk5fRlRQX00sIENNX0lOVn0sIC8q IDE5OSAqLwotICAgIHsgImZ0cF9zZWN1cml0eSIsICAgICBWTl9GVFBfWiwgMH0sIC8qIDE5OSAq LwotICAgIHsgImZ0cF9zZXJ2ZXIiLCAgICAgICBWTl9GVFBfUywgMH0sIC8qIDE5OSAqLwotI2Vu ZGlmIC8qIFNZU0ZUUCAqLwotI2VuZGlmIC8qIE5PRlRQICovCi0gICAgeyAiZnR5cGUiLCAgICAg Vk5fTU9ERSwgIDB9LCAgICAgICAgLyogMTkwICovCi0jaWZkZWYgS1VJCi0gICAgeyAiZ3VpX2Zv bnRuYW1lIiwgVk5fR1VJX0ZOTSwgMH0sCS8qIDIwNSAqLwotICAgIHsgImd1aV9mb250c2l6ZSIs IFZOX0dVSV9GU1osIDB9LAkvKiAyMDUgKi8KLSAgICB7ICJndWlfcnVubW9kZSIsIFZOX0dVSV9S VU4sIDB9LCAgICAvKiAyMDUgKi8KLSAgICB7ICJndWlfeHBvcyIsICAgIFZOX0dVSV9YUCwgIDB9 LCAgICAvKiAyMDUgKi8KLSAgICB7ICJndWlfeHJlcyIsICAgIFZOX0dVSV9YUiwgIDB9LCAgICAv KiAyMDUgKi8KLSAgICB7ICJndWlfeXBvcyIsICAgIFZOX0dVSV9ZUCwgIDB9LCAgICAvKiAyMDUg Ki8KLSAgICB7ICJndWlfeXJlcyIsICAgIFZOX0dVSV9ZUiwgIDB9LCAgICAvKiAyMDUgKi8KLSNl bmRpZiAvKiBLVUkgKi8KLSAgICB7ICJoZXJhbGQiLCAgICBWTl9IRVJBTEQsIDB9LAotICAgIHsg ImhvbWUiLCAgICAgIFZOX0hPTUUsICAgMH0sCi0gICAgeyAiaG9zdCIsICAgICAgVk5fSE9TVCwg ICAwfSwKLSAgICB7ICJob3VyIiwgICAgICBWTl9IT1VSLCAgIDB9LCAgICAgICAvKiAyMDAgKi8K LSNpZm5kZWYgTk9IVFRQCi0gICAgeyAiaHR0cF9jb2RlIiwgICAgICBWTl9IVFRQX0MsIDB9LCAg LyogMTk5ICovCi0gICAgeyAiaHR0cF9jb25uZWN0ZWQiLCBWTl9IVFRQX04sIDB9LCAgLyogMTk5 ICovCi0gICAgeyAiaHR0cF9ob3N0IiwgICAgICBWTl9IVFRQX0gsIDB9LCAgLyogMTk5ICovCi0g ICAgeyAiaHR0cF9tZXNzYWdlIiwgICBWTl9IVFRQX00sIDB9LCAgLyogMTk5ICovCi0gICAgeyAi aHR0cF9zZWN1cml0eSIsICBWTl9IVFRQX1MsIDB9LCAgLyogMTk5ICovCi0jZW5kaWYgLyogTk9I VFRQICovCi0gICAgeyAiaHdwYXJpdHkiLCAgVk5fSFdQQVIsIDB9LCAgICAgICAgLyogMTk1ICov Ci0gICAgeyAiaW5wdXQiLCAgICAgVk5fSUJVRiwgIDB9LAotICAgIHsgImluY2hhciIsICAgIFZO X0lDSFIsICAwfSwKLSAgICB7ICJpbmNvdW50IiwgICBWTl9JQ05ULCAgMH0sCi0gICAgeyAiaW5p ZGlyIiwgICAgVk5fSU5JLCAgIDB9LCAgICAgICAgLyogMTkyICovCi0gICAgeyAiaW5tYXRjaCIs ICAgVk5fTUFUQ0gsIDB9LCAgICAgICAgLyogMTk2ICovCi0gICAgeyAiaW5tZXNzYWdlIiwgVk5f SU5QTVNHLDB9LCAgICAgICAgLyogMjEyICovCi0gICAgeyAiaW5zY2FsZSIsICAgVk5fSVNDQUxF LDB9LCAgICAgICAgLyogMjEwICovCi0gICAgeyAiaW5zdGF0dXMiLCAgVk5fSVNUQVQsIDB9LCAg ICAgICAgLyogMTkyICovCi0gICAgeyAiaW50aW1lIiwgICAgVk5fSU5USU1FLDB9LCAgICAgICAg LyogMTkzICovCi0gICAgeyAiaW53YWl0IiwgICAgVk5fSU5UTU8sIDB9LCAgICAgICAgLyogMTk1 ICovCi0gICAgeyAiaXAiLCAgICAgICAgVk5fSVBBRERSLCBDTV9BQlJ8Q01fSU5WfSwKLSAgICB7 ICJpcGFkZHJlc3MiLCBWTl9JUEFERFIsMH0sICAgICAgICAvKiAxOTIgKi8KLSAgICB7ICJpcHJv bXB0IiwgICBWTl9QUk9NUFQsMH0sICAgICAgICAvKiAxOTkgKi8KLSAgICB7ICJrYmNoYXIiLCAg ICBWTl9LQkNIQVIsMH0sICAgICAgICAvKiAxOTYgKi8KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVm IE9TMgotICAgIHsgImtleWJvYXJkIiwgIFZOX0tFWUIsICAwfSwKLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICB7ICJrcmI0ZXJy bXNnIiwgICAgVk5fSzRFTVNHLDB9LAotICAgIHsgImtyYjRlcnJubyIsICAgICBWTl9LNEVOTywg MH0sCi0gICAgeyAia3JiNHByaW5jaXBhbCIsIFZOX0s0UFJOLCAwfSwKLSAgICB7ICJrcmI0cmVh bG0iLCAgICAgVk5fSzRSTE0sIDB9LAotICAgIHsgImtyYjRzZXJ2aWNlIiwgICBWTl9LNFNSViwg MH0sCi0gICAgeyAia3JiNWNjIiwgICAgICAgIFZOX0s1Q0MsICAwfSwKLSAgICB7ICJrcmI1ZXJy bXNnIiwgICAgVk5fSzVFTVNHLDB9LAotICAgIHsgImtyYjVlcnJubyIsICAgICBWTl9LNUVOTywg MH0sCi0gICAgeyAia3JiNXByaW5jaXBhbCIsIFZOX0s1UFJOLCAwfSwKLSAgICB7ICJrcmI1cmVh bG0iLCAgICAgVk5fSzVSTE0sIDB9LAotICAgIHsgImtyYjVzZXJ2aWNlIiwgICBWTl9LNVNSViwg MH0sCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSAgICB7ICJsYXN0Y29tbWFuZCIsICAgVk5f UFJFVkNNRCwgMH0sCS8qIDI5OSAqLwotI2lmbmRlZiBOT0xBU1RGSUxFCi0gICAgeyAibGFzdGZp bGVzcGVjIiwgIFZOX0xBU1RGSUwsIDB9LAkvKiAyMTIgKi8KLSNlbmRpZgkvKiBOT0xBU1RGSUxF ICovCi0gICAgeyAibGFzdGtleXdvcmR2YWx1ZSIsICBWTl9MQVNUS1dWLCAwfSwgLyogMjEyICov Ci0gICAgeyAibGFzdGt3dmFsdWUiLCAgIFZOX0xBU1RLV1YsIENNX0FCUnxDTV9JTlZ9LCAvKiAy MTIgKi8KLSAgICB7ICJsaW5lIiwgICAgICAgICAgVk5fTElORSwgIDB9LAotICAgIHsgImxvY2Fs IiwgICAgICAgICBWTl9MQ0wsICAgMH0sCi0jaWZkZWYgVU5JWAotICAgIHsgImxvY2tkaXIiLCAg ICAgICBWTl9MQ0tESVIsMH0sCS8qIDE5NSAqLwotICAgIHsgImxvY2twaWQiLCAgICAgICBWTl9M Q0tQSUQsMH0sCS8qIDE5NSAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICB7ICJsb2dfY29ubmVj dGlvbiIsIFZOX0xPR19DT04sIDB9LCAvKiAyMDYgKi8KLSAgICB7ICJsb2dfZGVidWciLCBWTl9M T0dfREVCLCAwfSwgICAgICAvKiAyMDYgKi8KLSAgICB7ICJsb2dfcGFja2V0IiwgVk5fTE9HX1BL VCwgMH0sICAgICAvKiAyMDYgKi8KLSAgICB7ICJsb2dfc2Vzc2lvbiIsIFZOX0xPR19TRVMsIDB9 LCAgICAvKiAyMDYgKi8KLSAgICB7ICJsb2dfdHJhbnNhY3Rpb24iLCBWTl9MT0dfVFJBLCAwfSwv KiAyMDYgKi8KLSAgICB7ICJtYWNsZXZlbCIsICBWTl9NQUNMVkwsMH0sICAgICAgICAvKiAxOTUg Ki8KLSAgICB7ICJtYWNybyIsICAgICBWTl9NQUMsICAgMH0sCi0jaWZkZWYgRk5GTE9BVAotICAg IHsgIm1hdGhfZSIsICAgIFZOX01BX0UsICAwfSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsgIm1h dGhfcGkiLCAgIFZOX01BX1BJLCAwfSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsgIm1hdGhfcHJl Y2lzaW9uIiwgVk5fTUFfUFIsIDB9LCAgIC8qIDE5NSAqLwotI2VuZGlmIC8qIEZORkxPQVQgKi8K LSAgICB7ICJtaW5wdXQiLCAgICBWTl9NSU5QLCAgMH0sICAgICAgICAvKiAxOTIgKi8KLSAgICB7 ICJtb2RlbCIsICAgICBWTl9NT0RMLCAgMH0sICAgICAgICAvKiAxOTMgKi8KLSAgICB7ICJtb2Rl bSIsICAgICBWTl9NRE0sICAgMH0sCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICB7 ICJtb3VzZWN1cngiLCBWTl9NT1VfWCwgMH0sICAgICAgICAvKiBLOTUgMS4xLjE0ICovCi0gICAg eyAibW91c2VjdXJ5IiwgVk5fTU9VX1ksIDB9LCAgICAgICAgLyogSzk1IDEuMS4xNCAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZm5kZWYgTk9ESUFMCi0gICAg eyAibV9hYV9vZmYiLCAgVk5fTV9BQVgsIDB9LCAgICAgICAgLyogYWxsIDE5Mi4uLiAqLwotICAg IHsgIm1fYWFfb24iLCAgIFZOX01fQUFPLCAwfSwKLSAgICB7ICJtX2RjX29mZiIsICBWTl9NX0RD WCwgMH0sCi0gICAgeyAibV9kY19vbiIsICAgVk5fTV9EQ08sIDB9LAotICAgIHsgIm1fZGlhbCIs ICAgIFZOX01fRENNLCAwfSwKLSAgICB7ICJtX2VjX29mZiIsICBWTl9NX0VDWCwgMH0sCi0gICAg eyAibV9lY19vbiIsICAgVk5fTV9FQ08sIDB9LAotICAgIHsgIm1fZmNfaHciLCAgIFZOX01fSFdG LCAwfSwKLSAgICB7ICJtX2ZjX25vIiwgICBWTl9NX05GQywgMH0sCi0gICAgeyAibV9mY19zdyIs ICAgVk5fTV9TV0YsIDB9LAotICAgIHsgIm1faHVwIiwgICAgIFZOX01fSFVQLCAwfSwKLSAgICB7 ICJtX2luaXQiLCAgICBWTl9NX0lOSSwgMH0sCi0gICAgeyAibV9uYW1lIiwgICAgVk5fTV9OQU0s IDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAibV9wdWxzZSIsICAgVk5fTV9QRE0sIDB9LAot ICAgIHsgIm1fc2lnX2NkIiwgIFZOX01TX0NELCAwfSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsg Im1fc2lnX2N0cyIsIFZOX01TX0NUUywwfSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsgIm1fc2ln X2RzciIsIFZOX01TX0RTUiwwfSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsgIm1fc2lnX2R0ciIs IFZOX01TX0RUUiwwfSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsgIm1fc2lnX3JpIiwgIFZOX01T X1JJLCAwfSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsgIm1fc2lnX3J0cyIsIFZOX01TX1JUUyww fSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsgIm1fdG9uZSIsICAgIFZOX01fVERNLCAwfSwKLSNl bmRpZiAvKiBOT0RJQUwgKi8KLSAgICB7ICJuYW1lIiwgICAgICBWTl9OQU1FLCAgMH0sCi0gICAg eyAibmRhdGUiLCAgICAgVk5fTkRBVCwgIDB9LAotICAgIHsgIm5kYXkiLCAgICAgIFZOX05EQVks ICAwfSwKLSAgICB7ICJuZXdsaW5lIiwgICBWTl9ORVdMLCAgMH0sCi0gICAgeyAibnRpbWUiLCAg ICAgVk5fTlRJTSwgIDB9LAotICAgIHsgIm9zbmFtZSIsICAgIFZOX09TTkFNLCAwfSwgICAgICAg IC8qIDE5MyAqLwotICAgIHsgIm9zcmVsZWFzZSIsIFZOX09TUkVMLCAwfSwgICAgICAgIC8qIDE5 MyAqLwotICAgIHsgIm9zdmVyc2lvbiIsIFZOX09TVkVSLCAwfSwgICAgICAgIC8qIDE5MyAqLwot I2lmbmRlZiBOT1hGRVIKLSAgICB7ICJwYWNrZXRsZW4iLCBWTl9SUFNJWiwgMH0sICAgICAgICAv KiAxOTIgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICB7ICJwYXJpdHkiLCAgICBWTl9QUlRZ LCAgMH0sICAgICAgICAvKiAxOTAgKi8KLSAgICB7ICJwYXNzd29yZCIsICBWTl9QV0QsICAgQ01f SU5WfSwgICAvKiAxOTIgKi8KLSNpZmRlZiBOVAotICAgIHsgInBlcnNvbmFsIiwgIFZOX1BFUlNP TkFMLCAwfSwgICAgIC8qIDIwMSAqLwotI2VuZGlmIC8qIE5UICovCi0jaWZkZWYgUEVYSVRTVEFU Ci0gICAgeyAicGV4aXRzdGF0IiwgVk5fUEVYSVQsIDB9LCAgICAgICAgLyogMTkzICovCi0jZW5k aWYgLyogUEVYSVRTVEFUICovCi0jaWZkZWYgQ0tfUElECi0gICAgeyAicGlkIiwgICAgICAgVk5f UElELCAgIDB9LCAgICAgICAgLyogMTkzICovCi0jZW5kaWYgLyogQ0tfUElEICovCi0gICAgeyAi cGxhdGZvcm0iLCAgVk5fU1lTViwgIDB9LAotICAgIHsgInByaW50ZXIiLCAgIFZOX1BSSU5ULCAw fSwgICAgICAgIC8qIDE5MyAqLwotICAgIHsgInByb2dyYW0iLCAgIFZOX1BST0csICAwfSwKLSAg ICB7ICJwcm9tcHQiLCAgICBWTl9QUk0sICAgQ01fSU5WfSwgICAvKiAxOTIgKi8KLSNpZm5kZWYg Tk9YRkVSCi0gICAgeyAicHJvdG9jb2wiLCAgVk5fUFJPVE8sIDB9LCAgICAgICAgLyogMTkyICov Ci0gICAgeyAicF84Yml0IiwgICAgVk5fUF84QklULDB9LCAgICAgICAgLyogMTkzICovCi0gICAg eyAicF9jdGwiLCAgICAgVk5fUF9DVEwsIDB9LCAgICAgICAgLyogMTkzICovCi0gICAgeyAicF9y cHQiLCAgICAgVk5fUF9SUFQsIDB9LCAgICAgICAgLyogMTkzICovCi0gICAgeyAicXVlcnkiLCAg ICAgVk5fUVVFLCAgIDB9LCAgICAgICAgLyogMTkwICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0g ICAgeyAicmVtb3RlaXAiLCAgVk5fSE9TVElQLDB9LAkvKiAyMTIgKi8KLSAgICB7ICJyZXR1cm4i LCAgICBWTl9SRVQsICAgMH0sCi0jaWZkZWYgQ0tfUkVYWAotICAgIHsgInJleHgiLCAgICAgIFZO X1JFWFgsICAwfSwgICAgICAgIC8qIDE5MCAqLwotI2VuZGlmIC8qIENLX1JFWFggKi8KLSNpZmRl ZiBUTl9DT01QT1JUCi0gICAgeyAicmZjMjIxN19zaWduYXR1cmUiLCBWTl9UTkNfU0lHLCAwfSwg LyogMjAxICovCi0gICAgeyAicmZjMjcxN19zaWduYXR1cmUiLCBWTl9UTkNfU0lHLCBDTV9JTlZ9 LCAvKiAyMDIgKi8KLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0gICAgeyAicm93cyIsICAgICAg Vk5fUk9XUywgIDB9LCAgICAgICAgLyogMTkwICovCi0jaWZuZGVmIE5PU0VYUAotICAgIHsgInNk ZXB0aCIsICAgIFZOX0xTRVhQLDB9LCAgICAgICAgIC8qIDE5OSAqLwotI2VuZGlmIC8qIE5PU0VY UCAqLwotICAgIHsgInNlY3VyZSIsICAgIFZOX1NFQ1VSRSwgMH0sICAgICAgIC8qIDE5OSAqLwot I2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgeyAic2VsZWN0IiwgICAgVk5fU0VMQ1Qs IDB9LCAgICAgICAgLyogMTkyICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NB TCAqLwotICAgIHsgInNlbmRsaXN0IiwgIFZOX1NOREwsICAwfSwKLSAgICB7ICJzZXJpYWwiLCAg ICBWTl9TRVJJQUwsMH0sICAgICAgICAvKiAxOTUgKi8KLSAgICB7ICJzZXRsaW5lbXNnIixWTl9T TE1TRywgMH0sICAgICAgICAvKiAxOTUgKi8KLSNpZm5kZWYgTk9TRVhQCi0gICAgeyAic2V4cHJl c3Npb24iLFZOX1NFWFAsIDB9LCAgICAgICAgLyogMTk5ICovCi0jZW5kaWYgLyogTk9TRVhQICov Ci0gICAgeyAic3BlZWQiLCAgICAgVk5fU1BFRSwgIDB9LAotI2lmZGVmIE9TMgotICAgIHsgInNw YWNlIiwgICAgIFZOX1NQQSwgICAwfSwKLSAgICB7ICJzdGFydHVwIiwgICBWTl9TVEFSLCAgMH0s ICAgICAgICAvKiAxOTAgKi8KLSNlbHNlCi0jaWZkZWYgVU5JWAotICAgIHsgInN0YXJ0dXAiLCAg IFZOX1NUQVIsICAwfSwgICAgICAgIC8qIDE5MyAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICB7 ICJzdGFydHVwIiwgICBWTl9TVEFSLCAgMH0sICAgICAgICAvKiAxOTMgKi8KLSNlbmRpZiAvKiBW TVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgeyAic3RhdHVz IiwgICAgVk5fU1VDQywgIDB9LAotI2lmbmRlZiBOT1NFWFAKLSAgICB7ICJzdmFsdWUiLCAgICBW Tl9WU0VYUCwgMH0sICAgICAgICAvKiAxOTkgKi8KLSNlbmRpZiAvKiBOT1NFWFAgKi8KLSNpZm5k ZWYgTk9YRkVSCi0gICAgeyAic3lzaWQiLCAgICAgVk5fU1lTSSwgIDB9LAotI2VuZGlmIC8qIE5P WEZFUiAqLwotICAgIHsgInN5c3RlbSIsICAgIFZOX1NZU1QsICAwfSwKLSAgICB7ICJ0ZXJtaW5h bCIsICBWTl9UVFlQLCAgMH0sCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PS1ZFUkJTCi0gICAgeyAi dGVybWtleSIsICAgVk5fVFJNSywgIENNX0lOVn0sICAgLyogMTkyICovCi0jZW5kaWYgLyogTk9L VkVSQlMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB7ICJ0ZXN0IiwgICAgICBWTl9URVNULCAg MH0sICAgICAgICAvKiAxOTMgKi8KLSAgICB7ICJ0ZXh0ZGlyIiwgICBWTl9UWFRESVIsMH0sICAg ICAgICAvKiAxOTUgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAidGZzaXplIiwgICAgVk5fVEZD LCAgIDB9LAotICAgIHsgInRmdGltZSIsICAgIFZOX1RGVElNLCAwfSwgICAgICAgIC8qIDE5NSAq LwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHsgInRpbWUiLCAgICAgIFZOX1RJTUUsICAwfSwK LSAgICB7ICJ0aW1lc3RhbXAiLCBWTl9OT1csICAgMH0sICAgICAgICAvKiAyMDAgKi8KLSAgICB7 ICJ0bXBkaXIiLCAgICBWTl9URU1QLCAgMH0sICAgICAgICAvKiAxOTIgKi8KLSNpZmRlZiBDS19U UklHR0VSCi0gICAgeyAidHJpZ2dlciIsICAgVk5fVFJJRywgIDB9LCAgICAgICAgLyogMTkzICov Ci0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotI2lmZGVmIENLX1RUWUZECi0gICAgeyAidHR5ZmQi LCAgICAgVk5fVFRZRiwgIDB9LAotI2VuZGlmIC8qIENLX1RUWUZEICovCi0gICAgeyAidHlfbG4i LCAgICAgVk5fVFlfTE4sIDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAidHlfbGMiLCAgICAg Vk5fVFlfTEMsIDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAidHlfbG0iLCAgICAgVk5fVFlf TE0sIDB9LCAgICAgICAgLyogMTk1ICovCi0jaWZkZWYgQlJPV1NFUgotICAgIHsgInVybCIsICAg ICAgIFZOX1VSTCwgICBDTV9JTlZ9LCAgIC8qIDE5MyAqLwotI2VuZGlmIC8qIEJST1dTRVIgKi8K LSAgICB7ICJ1c2VyaWQiLCAgICBWTl9VSUQsICAgMH0sICAgICAgICAvKiAxOTIgKi8KLSAgICB7 ICJ2YXJldmFsIiwgICBWTl9WQVJFVkFMLCAwfSwJLyogMjEyICovCi0gICAgeyAidmVyc2lvbiIs ICAgVk5fVkVSUywgIDB9LAotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJ3aW5kb3ciLCAgICBWTl9X SU5ETywgMH0sICAgICAgICAvKiAxOTIgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNpZmRlZiBJ Qk1YMjUKLSAgICB7ICJ4MjVsb2NhbF9udWEiLCBWTl9YMjVMQSwgMH0sICAgICAvKiAxOTMgKi8K LSAgICB7ICJ4MjVyZW1vdGVfbnVhIiwgVk5fWDI1UkEsIDB9LCAgICAvKiAxOTMgKi8KLSNlbmRp ZiAvKiBJQk1YMjUgKi8KLSNpZmRlZiBDS19TU0wKLSAgICB7ICJ4NTA5X2lzc3VlciIsICBWTl9Y NTA5X0ksIDB9LAotICAgIHsgIng1MDlfc3ViamVjdCIsIFZOX1g1MDlfUywgMH0sCi0jZW5kaWYg LyogQ0tfU1NMICovCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgInhmZXJzdGF0dXMiLFZOX1hGU1RB VCwwfSwgICAgICAgIC8qIDE5MyAqLwotICAgIHsgInhmZXJtc2ciLCAgIFZOX1hGTVNHLCAwfSwg ICAgICAgIC8qIDE5MyAqLwotICAgIHsgInhmZXJfYmFkcGFja2V0cyIsIFZOX1hGX0JDLCAwfSwg IC8qIDE5NSAqLwotICAgIHsgInhmZXJfdGltZW91dHMiLCAgIFZOX1hGX1RNLCAwfSwgIC8qIDE5 NSAqLwotICAgIHsgInhmZXJfcmV0cmFuc21pdHMiLFZOX1hGX1JYLCAwfSwgIC8qIDE5NSAqLwot I2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHsgInhwcm9ncmFtIiwgIFZOX1hQUk9HLCAwfSwgICAg ICAgIC8qIDE5MyAqLwotICAgIHsgInh2ZXJzaW9uIiwgIFZOX1hWTlVNLCAwfSAgICAgICAgIC8q IDE5MiAqLwotfTsKLWludCBudmFycyA9IChzaXplb2YodmFydGFiKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1NQTAotc3RydWN0IGtl eXRhYiBmbmN0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIEZ1bmN0aW9uIG5hbWVzICovCi0jaWZk ZWYgT1MyCi0gICAgeyAiLm9veCIsICAgICAgIEZOX09PWCwgQ01fSU5WfSwgICAgLyogLi4uICov Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBDS0NIQU5ORUxJTwotICAgIHsgIl9lb2YiLCAg ICAgICBGTl9GRU9GLCAgIDB9LAotICAgIHsgIl9lcnJtc2ciLCAgICBGTl9GRVJNU0csIDB9LAot ICAgIHsgIl9nZXRibG9jayIsICBGTl9GR0JMSywgIDB9LAotICAgIHsgIl9nZXRjaGFyIiwgICBG Tl9GR0NIQVIsIDB9LAotICAgIHsgIl9nZXRsaW5lIiwgICBGTl9GR0xJTkUsIDB9LAotICAgIHsg Il9oYW5kbGUiLCAgICBGTl9GSUxOTywgIDB9LAotICAgIHsgIl9saW5lIiwgICAgICBGTl9OTElO RSwgIDB9LAotICAgIHsgIl9wb3MiLCAgICAgICBGTl9GUE9TLCAgIDB9LAotICAgIHsgIl9wdXRi bG9jayIsICBGTl9GUEJMSywgIDB9LAotICAgIHsgIl9wdXRjaGFyIiwgICBGTl9GUENIQVIsIDB9 LAotICAgIHsgIl9wdXRsaW5lIiwgICBGTl9GUExJTkUsIDB9LAotICAgIHsgIl9zdGF0dXMiLCAg ICBGTl9GU1RBVCwgIDB9LAotI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCi0KLSAgICB7ICJhYWNv bnZlcnQiLCAgRk5fQUFEVU1QLCAwfSwgICAgICAvKiBBc3NvY2lhdGl2ZSBBcnJheSBjb252ZXJz aW9uICovCi0gICAgeyAiYWJzb2x1dGUiLCAgIEZOX0FCUywgIDB9LCAgICAgICAgLyogQWJzb2x1 dGUgdmFsdWUgKi8KLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICB7ICJhZGRyMm5hbWUiLCAgRk5fSFNU QURELENNX0lOVn0sICAvKiBJUCBBZGRyZXNzIHRvIEhvc3RuYW1lICovCi0gICAgeyAiYWRkcnRv bmFtZSIsIEZOX0hTVEFERCxDTV9JTlZ9LCAgLyogSVAgQWRkcmVzcyB0byBIb3N0bmFtZSAqLwot I2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotICAgIHsgImFycmF5bG9vayIsICBGTl9BTE9PSywwfSwg ICAgICAgIC8qIEFycmF5IGxvb2t1cCAqLwotICAgIHsgImI2NGRlY29kZSIsICBGTl9GTUI2NCww fSwgICAgICAgIC8qIEJhc2UtNjQgY29udmVyc2lvbiAqLwotICAgIHsgImI2NGVuY29kZSIsICBG Tl9UT0I2NCwwfSwgICAgICAgIC8qIC4uLiAqLwotICAgIHsgImJhc2VuYW1lIiwgICBGTl9CU04s ICAwfSwgICAgICAgIC8qIEJhc2VuYW1lICovCi0gICAgeyAiYnJlYWsiLCAgICAgIEZOX0JSSywg IDB9LCAgICAgICAgLyogQnJlYWsgKGFzIGluIFNub2JvbCkgKi8KLSAgICB7ICJjYSIsICAgICAg ICAgRk5fQ0FQLCAgQ01fSU5WfENNX0FCUn0sIC8qIEFiYnJldmlhdGlvbiBmb3IgY2FwaXRhYmxp emUgKi8KLSAgICB7ICJjYXAiLCAgICAgICAgRk5fQ0FQLCAgQ01fSU5WfENNX0FCUn0sIC8qIEFi YnJldmlhdGlvbiBmb3IgY2FwaXRhYmxpemUgKi8KLSAgICB7ICJjYXBpdGFsaXplIiwgRk5fQ0FQ LCAgMH0sICAgICAgICAvKiBGaXJzdCBMZXR0ZXIgLT4gdXBwZXJjYXNlICovCi0gICAgeyAiY2Fw cyIsICAgICAgIEZOX0NBUCwgIENNX0lOVn0sICAgLyogZGl0dG8gKi8KLSAgICB7ICJjaGFyYWN0 ZXIiLCAgRk5fQ0hSLCAgMH0sICAgICAgICAvKiBDaGFyYWN0ZXIgZnJvbSBjb2RlICovCi0gICAg eyAiY2hlY2tzdW0iLCAgIEZOX0NISywgIDB9LCAgICAgICAgLyogQ2hlY2tzdW0gKi8KLSAgICB7 ICJjbWRzdGFjayIsICAgRk5fQ01EU1RLLDB9LCAgICAgICAvKiBDb21tYW5kIHN0YWNrICovCi0g ICAgeyAiY21wZGF0ZXMiLCAgIEZOX0NNUERBVEUsMH0sICAgICAgLyogQ29tcGFyZSBkYXRlcyAq LwotICAgIHsgImNvZGUiLCAgICAgICBGTl9DT0QsICAwfSwgICAgICAgIC8qIENvZGUgZnJvbSBj aGFyYWN0ZXIgKi8KLSNpZm5kZWYgTk9QVVNICi0gICAgeyAiY29tbWFuZCIsICAgIEZOX0NNRCwg IDB9LCAgICAgICAgLyogT3V0cHV0IGZyb20gYSBjb21tYW5kICovCi0jZW5kaWYgLyogTk9QVVNI ICovCi0gICAgeyAiY29udGVudHMiLCAgIEZOX0NPTiwgIDB9LCAgICAgICAgLyogRGVmaW5pdGlv biAoY29udGVudHMpIG9mIHZhcmlhYmxlICovCi0gICAgeyAiY291bnQiLCAgICAgIEZOX0NPVU5U LCAwfSwgICAgICAgLyogT2NjdXJyZW5jZXMgb2Ygc3RyaW5nIGluIHN0cmluZyAqLwotICAgIHsg ImNyYzE2IiwgICAgICBGTl9DUkMsICAwfSwgICAgICAgIC8qIENSQy0xNiAqLwotI2lmZGVmIE9T MgotICAgIHsgImNyeXB0IiwgICAgICBGTl9DUlksIENNX0lOVn0sCi0jZW5kaWYgLyogT1MyICov Ci0gICAgeyAiY3Z0Y3NldCIsICAgIEZOX1hMQVRFLCAwfSwJLyogQ29udmVydCBjaGFyYWN0ZXIg c2V0ICovCi0gICAgeyAiY3Z0ZGF0ZSIsICAgIEZOX0RUSU0sIDB9LCAgICAgICAgLyogQ29udmVy dCBmcmVlIGRhdGUvdGltZSB0byBzdGQgKi8KLSNpZmRlZiBaRkNEQVQKLSAgICB7ICJkYXRlIiwg ICAgICAgRk5fRkQsICAgMH0sICAgICAgICAvKiBGaWxlIG1vZGlmaWNhdGlvbi9jcmVhdGlvbiBk YXRlICovCi0jZW5kaWYgLyogWkZDREFUICovCi0gICAgeyAiZGF5IiwgICAgICAgIEZOX0RBWSwg IDB9LCAgICAgICAgLyogRGF5IG9mIHdlZWsgKi8KLSAgICB7ICJkYXlvZnllYXIiLCAgRk5fSkRB VEUsMH0sICAgICAgICAvKiBEYXRlIHRvIERheSBvZiBZZWFyICovCi0gICAgeyAiZGVjb2RlaGV4 IiwgIEZOX1VOUENULCAwfSwJLyogRGVjb2RlIHN0cmluZyB3aXRoIGhleCBlc2NhcGVzICovCi0g ICAgeyAiZGVmaW5pdGlvbiIsIEZOX0RFRiwgIDB9LCAgICAgICAgLyogUmV0dXJuIGRlZmluaXRp b24gb2YgZ2l2ZW4gbWFjcm8gKi8KLSAgICB7ICJkZWx0YTJzZWNzIiwgRk5fREVMU0VDLCAwfSwg ICAgICAvKiBEZWx0YSB0aW1lIHRvIHNlY29uZHMgKi8KLSAgICB7ICJkZWx0YXRvc2VjcyIsIEZO X0RFTFNFQywgQ01fSU5WfSwgLyogRGVsdGEgdGltZSB0byBzZWNvbmRzICovCi0jaWZuZGVmIE5P RElBTAotICAgIHsgImRpYWxjb252ZXJ0IixGTl9QTkNWVCwwfSwgICAgICAgIC8qIENvbnZlcnQg cG9ydGFibGUgcGhvbmUgbnVtYmVyICovCi0jZW5kaWYgLyogTk9ESUFMICovCi0gICAgeyAiZGlm ZmRhdGVzIiwgIEZOX0RJRkRBVEUsMH0sICAgICAgLyogRGlmZmVyZW5jZSBvZiB0d28gZGF0ZS10 aW1lcyAqLwotICAgIHsgImRpbWVuc2lvbiIsICBGTl9ESU0sICAwfSwgICAgICAgIC8qIERpbWVu c2lvbiBvZiBhcnJheSAqLwotICAgIHsgImRpciIsICAgICAgICBGTl9ESVIsICBDTV9JTlZ8Q01f QUJSfSwgLyogQWJicmV2aWF0aW9uIGZvciBkaXJlY3QuLiAqLwotICAgIHsgImRpcmUiLCAgICAg ICBGTl9ESVIsICBDTV9JTlZ8Q01fQUJSfSwgLyogQWJicmV2aWF0aW9uIGZvciBkaXJlY3QuLiAq LwotICAgIHsgImRpcmVjIiwgICAgICBGTl9ESVIsICBDTV9JTlZ8Q01fQUJSfSwgLyogQWJicmV2 aWF0aW9uIGZvciBkaXJlY3QuLiAqLwotICAgIHsgImRpcmVjdCIsICAgICBGTl9ESVIsICBDTV9J TlZ8Q01fQUJSfSwgLyogQWJicmV2aWF0aW9uIGZvciBkaXJlY3QuLiAqLwotICAgIHsgImRpcmVj dG8iLCAgICBGTl9ESVIsICBDTV9JTlZ8Q01fQUJSfSwgLyogQWJicmV2aWF0aW9uIGZvciBkaXJl Y3QuLiAqLwotICAgIHsgImRpcmVjdG9yIiwgICBGTl9ESVIsICBDTV9JTlZ8Q01fQUJSfSwgLyog QWJicmV2aWF0aW9uIGZvciBkaXJlY3QuLiAqLwotICAgIHsgImRpcmVjdG9yaWVzIixGTl9ESVIs ICAwfSwgICAgICAgIC8qIExpc3Qgb2YgZGlyZWN0b3JpZXMgKi8KLSAgICB7ICJkaXJlY3Rvcnki LCAgRk5fRElSLCAgQ01fSU5WfSwJLyogTGlzdCBvZiBkaXJlY3RvcmllcyAqLwotICAgIHsgImRp cm5hbWUiLCAgICBGTl9ETkFNLCAwfSwgICAgICAgIC8qIERpcmVjdG9yeSBwYXJ0IG9mIGZpbGVu YW1lICovCi0gICAgeyAiZG9zMnVuaXhwYXRoIixGTl9QQ19EVSwgfSwgICAgICAgLyogRE9TIHRv IFVOSVggcGF0aCAqLwotICAgIHsgImRvc3RvdW5peHBhdGgiLEZOX1BDX0RVLCBDTV9JTlZ9LCAv KiBET1MgdG8gVU5JWCBwYXRoICovCi0gICAgeyAiZG95IiwgICAgICAgIEZOX0pEQVRFLENNX0lO Vn0sICAgLyogRGF0ZSB0byBEYXkgb2YgWWVhciAqLwotICAgIHsgImRveTJkYXRlIiwgICBGTl9E QVRFSiwwfSwgICAgICAgIC8qIERheSBvZiBZZWFyIHRvIGRhdGUgKi8KLSAgICB7ICJkb3l0b2Rh dGUiLCAgRk5fREFURUosQ01fSU5WfSwgICAvKiBEYXkgb2YgWWVhciB0byBkYXRlICovCi0gICAg eyAiZW1haWxhZGRyZXNzIixGTl9FTUFJTCwgMH0sCS8qIEVtYWlsIGFkZHJlc3MgKi8KLSNpZmRl ZiBGTl9FUlJNU0cKLSAgICB7ICJlcnJzdHJpbmciLCAgRk5fRVJSTVNHLDB9LCAgICAgICAvKiBF cnJvciBjb2RlIHRvIG1lc3NhZ2UgKi8KLSNlbmRpZiAvKiBGTl9FUlJNU0cgKi8KLSAgICB7ICJl dmFsdWF0ZSIsICAgRk5fRVZBLCAgMH0sICAgICAgICAvKiBFdmFsdWF0ZSBnaXZlbiBhcml0aCBl eHByZXNzaW9uICovCi0gICAgeyAiZXhlY3V0ZSIsICAgIEZOX0VYRSwgIDB9LCAgICAgICAgLyog RXhlY3V0ZSBnaXZlbiBtYWNybyAqLwotICAgIHsgImZpbGVzIiwgICAgICBGTl9GQywgICAwfSwg ICAgICAgIC8qIEZpbGUgY291bnQgKi8KLSNpZmRlZiBGTkZMT0FUCi0gICAgeyAiZnBhYnNvbHV0 ZSIsIEZOX0ZQQUJTLCAwfSwgICAgICAgLyogRmxvYXRpbmctcG9pbnQgYWJzb2x1dGUgdmFsdWUg Ki8KLSAgICB7ICJmcGFkZCIsICAgICAgRk5fRlBBREQsIDB9LCAgICAgICAvKiBGUCBhZGQgKi8K LSAgICB7ICJmcGNvc2luZSIsICAgRk5fRlBDT1MsIDB9LCAgICAgICAvKiBGUCBjb3NpbmUgKi8K LSAgICB7ICJmcGRpdmlkZSIsICAgRk5fRlBESVYsIDB9LCAgICAgICAvKiBGUCBkaXZpZGUgKi8K LSAgICB7ICJmcGV4cCIsICAgICAgRk5fRlBFWFAsIDB9LCAgICAgICAvKiBGUCBlIHRvIHRoZSB4 ICovCi0gICAgeyAiZnBpbnQiLCAgICAgIEZOX0ZQSU5ULCAwfSwgICAgICAgLyogRlAgdG8gaW50 ZWdlciAqLwotICAgIHsgImZwbG9nMTAiLCAgICBGTl9GUExPRywgMH0sICAgICAgIC8qIEZQIGJh c2UtMTAgbG9nYXJpdGhtICovCi0gICAgeyAiZnBsb2duIiwgICAgIEZOX0ZQTE4sICAwfSwgICAg ICAgLyogRlAgbmF0dXJhbCBsb2dhcml0aG0gKi8KLSAgICB7ICJmcG1heGltdW0iLCAgRk5fRlBN QVgsIDB9LCAgICAgICAvKiBGUCBtYXhpbnVtICovCi0gICAgeyAiZnBtaW5pbXVtIiwgIEZOX0ZQ TUlOLCAwfSwgICAgICAgLyogRlAgbWluaW51bSAqLwotICAgIHsgImZwbW9kdWx1cyIsICBGTl9G UE1PRCwgMH0sICAgICAgIC8qIEZQIG1vZHVsdXMgKi8KLSAgICB7ICJmcG11bHRpcGx5IiwgRk5f RlBNVUwsIDB9LCAgICAgICAvKiBGUCBtdWx0aXBseSAqLwotICAgIHsgImZwcmFpc2UiLCAgICBG Tl9GUFBPVywgMH0sICAgICAgIC8qIEZQIHJhaXNlIHRvIGEgcG93ZXIgKi8KLSAgICB7ICJmcHJv dW5kIiwgICAgRk5fRlBST1UsIDB9LCAgICAgICAvKiBGUCByb3VuZCAqLwotICAgIHsgImZwc2lu ZSIsICAgICBGTl9GUFNJTiwgMH0sICAgICAgIC8qIEZQIHNpbmUgKi8KLSAgICB7ICJmcHNxcnQi LCAgICAgRk5fRlBTUVIsIDB9LCAgICAgICAvKiBGUCBzcXVhcmUgcm9vdCAqLwotICAgIHsgImZw c3VidHJhY3QiLCBGTl9GUFNVQiwgMH0sICAgICAgIC8qIEZQIHN1YnRyYWN0ICovCi0gICAgeyAi ZnB0YW5nZW50IiwgIEZOX0ZQVEFOLCAwfSwgICAgICAgLyogRlAgdGFuZ2VudCAqLwotI2VuZGlm IC8qIEZORkxPQVQgKi8KLSAgICB7ICJmdW5jdGlvbiIsICAgRk5fRlVOQywgMCB9LCAgICAgICAv KiBUZXN0IGZvciBleGlzdGVuY2Ugb2YgYSBmdW5jdGlvbiAqLwotICAgIHsgImdldHBpZGluZm8i LCBGTl9QSUQsIDAgIH0sICAgICAgIC8qIEdldCBQSUQgaW5mbyAqLwotICAgIHsgImhleDJpcCIs ICAgICBGTl9IRVgySVAsMH0sICAgICAgIC8qIEhleCB0byBJUCBhZGRyZXNzICovCi0gICAgeyAi aGV4dG9pcCIsICAgIEZOX0hFWDJJUCxDTV9JTlZ9LCAgLyogSGV4IHRvIElQIGFkZHJlc3MgKi8K LSAgICB7ICJoZXgybiIsICAgICAgRk5fSEVYMk4sIENNX0lOVn0sICAvKiBIZXggdG8gZGVjaW1h bCBudW1iZXIgKi8KLSAgICB7ICJoZXhpZnkiLCAgICAgRk5fSEVYLCAgIDB9LCAgICAgICAvKiBI ZXhpZnkgKHN0cmluZykgKi8KLSAgICB7ICJpbmRleCIsICAgICAgRk5fSU5ELCAgIDB9LCAgICAg ICAvKiBJbmRleCAoc3RyaW5nIHNlYXJjaCkgKi8KLSAgICB7ICJpcDJoZXgiLCAgICAgRk5fSVAy SEVYLDB9LCAgICAgICAvKiBJUCBhZGRyZXNzIHRvIGhleCAqLwotICAgIHsgImlwdG9oZXgiLCAg ICBGTl9JUDJIRVgsQ01fSU5WfSwgIC8qIElQIGFkZHJlc3MgdG8gaGV4ICovCi0gICAgeyAiaXBh ZGRyZXNzIiwgIEZOX0lQQSwgICAwfSwgICAgICAgLyogRmluZCBhbmQgcmV0dXJuIElQIGFkZHJl c3MgKi8KLSAgICB7ICJqZGF0ZSIsICAgICAgRk5fSkRBVEUsIENNX0lOVn0sICAvKiBEYXRlIHRv IERheSBvZiBZZWFyICovCi0gICAgeyAiam9pbiIsICAgICAgIEZOX0pPSU4sICAwfSwgICAgICAg LyogSm9pbiBhcnJheSBlbGVtZW50cyAqLwotICAgIHsgImtleXdvcmR2YWx1ZSIsICBGTl9LV1ZB TCwgMH0sICAgIC8qIEtleXdvcmQ9VmFsdWUgKi8KLSNpZmRlZiBDS19LRVJCRVJPUwotICAgIHsg ImtyYmZsYWdzIiwgICAgICBGTl9LUkJfRkcsIDB9LCAgIC8qIEtlcmJlcm9zIGZ1bmN0aW9ucyAq LwotICAgIHsgImtyYmlzdmFsaWQiLCAgICBGTl9LUkJfSVYsIDB9LAotICAgIHsgImtyYm5leHR0 aWNrZXQiLCBGTl9LUkJfTlgsIDB9LAotICAgIHsgImtyYnRpY2tldHMiLCAgICBGTl9LUkJfVEss IDB9LAotICAgIHsgImtyYnRpbWVsZWZ0IiwgICBGTl9LUkJfVFQsIDB9LAotI2VuZGlmIC8qIENL X0tFUkJFUk9TICovCi0gICAgeyAia3d2YWx1ZSIsICAgIEZOX0tXVkFMLCBDTV9JTlZ9LAkvKiBL ZXl3b3JkPVZhbHVlICovCi0gICAgeyAibGVmdCIsICAgICAgIEZOX0xFRiwgIDB9LCAgICAgICAg LyogTGVmdG1vc3QgbiBjaGFyYWN0ZXJzIG9mIHN0cmluZyAqLwotICAgIHsgImxlbmd0aCIsICAg ICBGTl9MRU4sICAwfSwgICAgICAgIC8qIFJldHVybiBsZW5ndGggb2YgYXJndW1lbnQgKi8KLSAg ICB7ICJsaXRlcmFsIiwgICAgRk5fTElULCAgMH0sICAgICAgICAvKiBSZXR1cm4gYXJndW1lbnQg bGl0ZXJhbGx5ICovCi0jaWZkZWYgTlQKLSAgICB7ICJsb25ncGF0aG5hbWUiLEZOX0xOQU1FLDB9 LAkvKiBHZXRMb25nUGF0aE5hbWUoKSAqLwotI2Vsc2UKLSAgICB7ICJsb25ncGF0aG5hbWUiLEZO X0ZGTixDTV9JTlZ9LAotI2VuZGlmIC8qIE5UICovCi0gICAgeyAibG9wIiwgICAgICAgIEZOX1NU TCwgIDB9LCAgICAgICAgLyogTG9wICovCi0gICAgeyAibG9weCIsICAgICAgIEZOX0xPUFgsIDB9 LCAgICAgICAgLyogTG9weCAqLwotICAgIHsgImxvd2VyIiwgICAgICBGTl9MT1csICAwfSwgICAg ICAgIC8qIFJldHVybiBsb3dlcmNhc2VkIGFyZ3VtZW50ICovCi0gICAgeyAibHBhZCIsICAgICAg IEZOX0xQQSwgIDB9LCAgICAgICAgLyogUmV0dXJuIGxlZnQtcGFkZGVkIGFyZ3VtZW50ICovCi0g ICAgeyAibHRyaW0iLCAgICAgIEZOX0xUUiwgIDB9LCAgICAgICAgLyogTGVmdC1UcmltICovCi0g ICAgeyAibWF4aW11bSIsICAgIEZOX01BWCwgIDB9LCAgICAgICAgLyogUmV0dXJuIG1heGltdW0g b2YgdHdvIGFyZ3VtZW50cyAqLwotICAgIHsgIm1pbmltdW0iLCAgICBGTl9NSU4sICAwfSwgICAg ICAgIC8qIFJldHVybiBtaW5pbXVtIG9mIHR3byBhcmd1bWVudHMgKi8KLSAgICB7ICJtamQiLCAg ICAgICAgRk5fTUpELCAgMH0sICAgICAgICAvKiBEYXRlIHRvIE1vZGlmaWVkIEp1bGlhbiBEYXRl ICovCi0gICAgeyAibWpkMmRhdGUiLCAgIEZOX01KRDIsIDB9LCAgICAgICAgLyogTUpEIHRvIERh dGUgKi8KLSAgICB7ICJtamR0b2RhdGUiLCAgRk5fTUpEMiwgQ01fSU5WfSwgICAvKiBNSkQgdG8g RGF0ZSAqLwotICAgIHsgIm1vZHVsdXMiLCAgICBGTl9NT0QsICAwfSwgICAgICAgIC8qIFJldHVy biBtb2R1bHVzIG9mIHR3byBhcmd1bWVudHMgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgeyAibXNs ZWVwIiwgICAgIEZOX01TTEVFUCwwfSwgICAgICAgLyogU2xlZXAgZm9yIG4gbWlsbGlzZWNvbmRz ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHsgIm4yaGV4IiwgICAgICBGTl8ySEVYLCBD TV9JTlZ9LCAgIC8qIE51bWJlciB0byBoZXggKi8KLSAgICB7ICJuMm9jdGFsIiwgICAgRk5fMk9D VCwgQ01fSU5WfSwgICAvKiBOdW1iZXIgdG8gb2N0YWwgKi8KLSAgICB7ICJuMnRpbWUiLCAgICAg Rk5fTjJUSU0sMH0sICAgICAgICAvKiBOdW1iZXIgdG8gaGg6bW06c3MgKi8KLSNpZmRlZiBUQ1BT T0NLRVQKLSAgICB7ICJuYW1lMmFkZHIiLCAgRk5fSFNUTkFNLENNX0lOVn0sICAvKiBIb3N0bmFt ZSB0byBJUCBBZGRyZXNzICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0gICAgeyAibmRheSIs ICAgICAgIEZOX05EQVksIDB9LCAgICAgICAgLyogTnVtZXJpYyBkYXkgb2Ygd2VlayAqLwotICAg IHsgIm5leHRmaWxlIiwgICBGTl9GSUwsICAwfSwgICAgICAgIC8qIE5leHQgZmlsZSBpbiBsaXN0 ICovCi0gICAgeyAibnRpbWUiLCAgICAgIEZOX05USU0sIDB9LCAgICAgICAgLyogVGltZSB0byBz ZWNvbmRzIHNpbmNlIG1pZG5pZ2h0ICovCi0gICAgeyAibnRvaGV4IiwgICAgIEZOXzJIRVgsIENN X0lOVn0sICAgLyogTnVtYmVyIHRvIGhleCAqLwotICAgIHsgIm50b29jdGFsIiwgICBGTl8yT0NU LCBDTV9JTlZ9LCAgIC8qIE51bWJlciB0byBvY3RhbCAqLwotICAgIHsgIm50b3RpbWUiLCAgICBG Tl9OMlRJTSxDTV9JTlZ9LCAgIC8qIE51bWJlciB0byBoaDptbTpzcyAqLwotICAgIHsgIm9jdDJu IiwgICAgICBGTl9PQ1QyTixDTV9JTlZ9LCAgIC8qIE9jdGFsIHRvIGRlY2ltYWwgbnVtYmVyICov Ci0gICAgeyAib2N0dG9uIiwgICAgIEZOX09DVDJOLENNX0lOVn0sICAgLyogT2N0YWwgdG8gZGVj aW1hbCBudW1iZXIgKi8KLSAgICB7ICJwYXRobmFtZSIsICAgRk5fRkZOLCAgMH0sICAgICAgICAv KiBGdWxsIGZpbGUgbmFtZSAqLwotICAgIHsgInBhdHRlcm4iLCAgICBGTl9QQVRURVJOLCAwfSwg ICAgIC8qIFBhdHRlcm4gKGZvciBJTlBVVCkgKi8KLSNpZmRlZiBDS19QRVJNUwotICAgIHsgInBl cm1pc3Npb25zIixGTl9QRVJNLCAwfSwgICAgICAgIC8qIFBlcm1pc3Npb25zIG9mIGZpbGUgKi8K LSNlbHNlCi0gICAgeyAicGVybWlzc2lvbnMiLEZOX1BFUk0sIENNX0lOVn0sICAgLyogUGVybWlz c2lvbnMgb2YgZmlsZSAqLwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0jaWZkZWYgU0VFS19DVVIK LSAgICB7ICJwaWN0dXJlaW5mbyIsRk5fUElDVFVSRSwgMCB9LAkvKiBQaWN0dXJlIG9yaWVudGF0 aW9uL2RpbWVuc2lvbnMgKi8KLSNlbmRpZgkvKiBTRUVLX0NVUiAqLwotICAgIHsgInJhZGl4Iiwg ICAgICBGTl9SQURJWCwgMCB9LAkvKiBSYWRpeCBjb252ZXJzaW9uICovCi0jaWZuZGVmIE5PUkFO RE9NCi0gICAgeyAicmFuZG9tIiwgICAgIEZOX1JBTkQsIDB9LCAgICAgICAgLyogUmFuZG9tIG51 bWJlciAqLwotI2VuZGlmIC8qIE5PUkFORE9NICovCi0jaWZuZGVmIE5PUFVTSAotICAgIHsgInJh d2NvbW1hbmQiLCBGTl9SQVcsICAwfSwgICAgICAgIC8qIE91dHB1dCBmcm9tIGEgY29tbWFuZCAo cmF3KSAqLwotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2lmZGVmIFJFQ1VSU0lWRQotICAgIHsgInJk aXJlY3RvcmllcyIsIEZOX1JESVIsIDB9LCAgICAgIC8qIFJlY3Vyc2l2ZSBkaXJlY3RvcnkgbGlz dCAqLwotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgIHsgInJlY3Vyc2UiLCAgICBGTl9SRUNV UlNFLCAwfSwJLyogUmVjdXJzaXZlIHZhcmlhYmxlIGV2YWx1YXRpb24gKi8KLSNpZmRlZiBSRUNV UlNJVkUKLSAgICB7ICJyZmlsZXMiLCAgICAgICBGTl9SRklMLCAwfSwgICAgICAvKiBSZWN1cnNp dmUgZmlsZSBsaXN0ICovCi0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0gICAgeyAicmVwIiwgICAg ICAgIEZOX1JFUCwgQ01fSU5WfENNX0FCUn0sCi0gICAgeyAicmVwZWF0IiwgICAgIEZOX1JFUCwg IDB9LCAgICAgICAgLyogUmVwZWF0IGFyZ3VtZW50IGdpdmVuICMgb2YgdGltZXMgKi8KLSAgICB7 ICJyZXBsYWNlIiwgICAgRk5fUlBMLCAgMH0sICAgICAgICAvKiBSZXBsYWNlIGNoYXJhY3RlcnMg aW4gc3RyaW5nICovCi0gICAgeyAicmV2ZXJzZSIsICAgIEZOX1JFViwgIDB9LCAgICAgICAgLyog UmV2ZXJzZSB0aGUgYXJndW1lbnQgc3RyaW5nICovCi0gICAgeyAicmlnaHQiLCAgICAgIEZOX1JJ RywgIDB9LCAgICAgICAgLyogUmlnaHRtb3N0IG4gY2hhcmFjdGVycyBvZiBzdHJpbmcgKi8KLSAg ICB7ICJyaW5kZXgiLCAgICAgRk5fUklYLCAgMH0sICAgICAgICAvKiBSaWdodCBpbmRleCAqLwot ICAgIHsgInJwYWQiLCAgICAgICBGTl9SUEEsICAwfSwgICAgICAgIC8qIFJpZ2h0LXBhZCB0aGUg YXJndW1lbnQgKi8KLSAgICB7ICJyc2VhcmNoIiwgICAgRk5fUlNFQVJDSCwgMH0sICAgICAvKiBS LUwgU2VhcmNoIGZvciBwYXR0ZXJuIGluIHN0cmluZyAqLwotI2lmZGVmIE9TMgotICAgIHsgInNj cm5jdXJ4IiwgICBGTl9TQ1JOX0NYLCAgMH0sICAgIC8qIFNjcmVlbiBDdXJzb3IgWCBQb3MgKi8K LSAgICB7ICJzY3JuY3VyeSIsICAgRk5fU0NSTl9DWSwgIDB9LCAgICAvKiBTY3JlZW4gQ3Vyc29y IFkgUG9zICovCi0gICAgeyAic2NybnN0ciIsICAgIEZOX1NDUk5fU1RSLCAwfSwgICAgLyogU2Ny ZWVuIFN0cmluZyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIHsgInNlYXJjaCIsICAgICBGTl9T RUFSQ0gsIDB9LCAgICAgIC8qIEwtUiBTZWFyY2ggZm9yIHBhdHRlcm4gaW4gc3RyaW5nICovCi0j aWZuZGVmIE5PU0VYUAotICAgIHsgInNleHByZXNzaW9uIixGTl9TRVhQLCAwfSwgICAgICAgIC8q IFMtRXhwcmVzc2lvbiAqLwotI2VuZGlmIC8qIE5PU0VYUCAqLwotI2lmZGVmIE5UCi0gICAgeyAi c2hvcnRwYXRobmFtZSIsRk5fU05BTUUsMH0sCS8qIEdldFNob3J0UGF0aE5hbWUoKSAqLwotI2Vs c2UKLSAgICB7ICJzaG9ydHBhdGhuYW1lIixGTl9GRk4sQ01fSU5WfSwKLSNlbmRpZiAvKiBOVCAq LwotICAgIHsgInNpemUiLCAgICAgICBGTl9GUywgICAwfSwgICAgICAgIC8qIEZpbGUgc2l6ZSAq LwotI2lmZGVmIENPTU1FTlQKLSAgICB7ICJzbGVlcCIsICAgICAgRk5fU0xFRVAsMH0sICAgICAg ICAvKiBTbGVlcCBmb3IgbiBzZWNvbmRzICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHsg InNwYW4iLCAgICAgICBGTl9TUE4sICAwfSwgICAgICAgIC8qIFNwYW4gLSBsaWtlIFNub2JvbCAq LwotICAgIHsgInNwbGl0IiwgICAgICBGTl9TUExJVCwwfSwgICAgICAgIC8qIFNwbGl0IHN0cmlu ZyBpbnRvIHdvcmRzICovCi0gICAgeyAic3F1ZWV6ZSIsICAgIEZOX1NRVUVFWkUsMH0sCS8qIFNx dWVlemUgd2hpdGVzcGFjZSBpbiBzdHJpbmcgKi8KLSAgICB7ICJzdHJjbXAiLCAgICAgRk5fU1RS Q01QLDB9LAkvKiBTdHJpbmcgY29tcGFyaXNvbiAqLwotICAgIHsgInN0cmluZ3R5cGUiLCBGTl9T VFJJTkdULDB9LAkvKiBTdHJpbmcgdHlwZSAoNy1iaXQsIDgtYml0LCBVVEYtOCkgKi8KLSAgICB7 ICJzdHJpcGIiLCAgICAgRk5fU1RCLCAgMH0sICAgICAgICAvKiBTdHJpcCBlbmNsb3NpbmcgYnJh Y2VzL2JyYWNrZXRzICovCi0gICAgeyAic3RyaXBuIiwgICAgIEZOX1NUTiwgIDB9LCAgICAgICAg LyogU3RyaXAgbiBjaGFycyAqLwotICAgIHsgInN0cmlweCIsICAgICBGTl9TVFgsICAwfSwgICAg ICAgIC8qIFN0cmlwIHN1ZmZpeCAqLwotICAgIHsgInN1IiwgICAgICAgICBGTl9TVUIsICBDTV9J TlZ8Q01fQUJSfSwKLSAgICB7ICJzdWIiLCAgICAgICAgRk5fU1VCLCAgQ01fSU5WfENNX0FCUn0s Ci0gICAgeyAic3VicyIsICAgICAgIEZOX1NVQiwgIENNX0lOVnxDTV9BQlJ9LAotICAgIHsgInN1 YnN0IiwgICAgICBGTl9TVUIsICBDTV9JTlZ8Q01fQUJSfSwKLSAgICB7ICJzdWJzdGl0dXRlIiwg Rk5fU1VCU1QsMH0sICAgICAgICAvKiBTdWJzdGl0dXRlIGNoYXJzICovCi0gICAgeyAic3Vic3Ry aW5nIiwgIEZOX1NVQiwgIDB9LCAgICAgICAgLyogRXh0cmFjdCBzdWJzdHJpbmcgZnJvbSBhcmd1 bWVudCAqLwotICAgIHsgInRhYmxlbG9vayIsICBGTl9UTE9PSywwfSwgICAgICAgIC8qIFRhYmxl IGxvb2t1cCAqLwotICAgIHsgInRpbWUiLCAgICAgICBGTl9USU1FLCAwfSwgICAgICAgIC8qIEZy ZWUtZm9ybWF0IHRpbWUgdG8gaGg6bW06c3MgKi8KLSAgICB7ICJ0b2Qyc2VjcyIsICAgRk5fTlRJ TSwgQ01fSU5WfSwgICAvKiBUaW1lLW9mLWRheS10by1zZWNzLXNpbmNlLW1pZG5pdGUgKi8KLSAg ICB7ICJ0b2R0b3NlY3MiLCAgRk5fTlRJTSwgQ01fSU5WfSwgICAvKiBUaW1lLW9mLWRheS10by1z ZWNzLXNpbmNlLW1pZG5pdGUgKi8KLSAgICB7ICJ0cmltIiwgICAgICAgRk5fVFJNLCAgMH0sICAg ICAgICAvKiBUcmltICovCi0gICAgeyAidW5oZXhpZnkiLCAgIEZOX1VOSCwgIDB9LCAgICAgICAg LyogVW5oZXhpZnkgKi8KLSAgICB7ICJ1bml4MmRvc3BhdGgiLEZOX1BDX1VELCAwfSwgICAgICAv KiBVTklYIHRvIERPUyBwYXRoICovCi0gICAgeyAidW5peHRvZG9zcGF0aCIsRk5fUENfVUQsIENN X0lOVn0sIC8qIFVOSVggdG8gRE9TIHBhdGggKi8KLSAgICB7ICJ1bnRhYmlmeSIsICAgRk5fVU5U QUIsMH0sICAgICAgICAvKiBVbnRhYmlmeSAqLwotICAgIHsgInVwcGVyIiwgICAgICBGTl9VUFAs ICAwfSwgICAgICAgIC8qIFJldHVybiB1cHBlcmNhc2VkIGFyZ3VtZW50ICovCi0gICAgeyAidXRj ZGF0ZSIsICAgIEZOX1RPR01ULDB9LCAgICAgICAgLyogRGF0ZS10aW1lIHRvIFVUQyAoR01UKSAq LwotICAgIHsgInZlcmlmeSIsICAgICBGTl9WRVIsICAwfSwgICAgICAgIC8qIFZlcmlmeSAqLwot ICAgIHsgIndvcmQiLCAgICAgICBGTl9XT1JELCAwfSwgICAgICAgIC8qIEV4dHJhY3QgYSB3b3Jk ICovCi0gICAgeyAiIiwgMCwgMH0KLX07Ci1pbnQgbmZ1bmNzID0gKHNpemVvZihmbmN0YWIpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRl ZiBOT1NQTCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1ZmZlciBmb3IgZXhwYW5zaW9u IG9mICovCi0jaWZkZWYgQklHQlVGT0sgICAgICAgICAgICAgICAgICAgICAgICAgLyogYnVpbHQt aW4gdmFyaWFibGVzLiAqLwotI2RlZmluZSBWVkJVRkwgMTAyNAotI2Vsc2UKLSNkZWZpbmUgVlZC VUZMIDI1NgotI2VuZGlmIC8qIEJJR0JVRk9LICovCi1jaGFyIHZ2YnVmW1ZWQlVGTCsxXTsKLSNl bmRpZiAvKiBOT1NQTCAqLwotCi1zdHJ1Y3Qga2V5dGFiIGRpc3B0YltdID0geyAgICAgICAgICAg ICAgLyogTG9nIGZpbGUgZGlzcG9zaXRpb24gKi8KLSAgICB7ICJhcHBlbmQiLCAgICAxLCAgMH0s Ci0gICAgeyAibmV3IiwgICAgICAgMCwgIDB9Ci19OwotCi0jaWZkZWYgQ0tGTE9BVAotCi0vKiBJ IE4gSSBUIEYgTCBPIEEgVCAgLS0gIERlZHVjZSBmbG9hdGluZy1wb2ludCBwcmVjaXNpb24gYnkg aW5zcGVjdGlvbiAqLwotCi1pbnQgZnBfcm91bmRpbmcgPSAwOyAgICAgICAgICAgICAgICAvKiBO b256ZXJvIGlmIHByaW50ZigiJWYiKSByb3VuZHMgKi8KLWludCBmcF9kaWdpdHMgPSAwOyAgICAg ICAgICAgICAgICAgIC8qIERpZ2l0cyBvZiBmbG9hdGluZyBwb2ludCBwcmVjaXNpb24gKi8KLQot I2lmZGVmIENPTU1FTlQKLS8qIEZvciBsb29raW5nIGF0IGludGVybmFsIGZsb2F0aW5nLXBvaW50 IHJlcHJlc2VudGF0aW9ucyAqLwotc3RhdGljIGNoYXIgZnBfeGJ1ZlsxMjhdOwotc3RhdGljIGNo YXIgKgotdG9oZXgocywgbikgQ0hBUiAqIHM7IGludCBuOyB7Ci0gICAgaW50IHg7Ci0gICAgY2hh ciAqIHAgPSBmcF94YnVmOwotICAgIHdoaWxlIChuLS0gPiAwKSB7Ci0gICAgICAgIHggPSAoKnMg Pj4gNCkgJiAweDBmOwotICAgICAgICAqcCsrID0gaGV4ZGlnaXRzW3hdOwotICAgICAgICB4ID0g KnMrKyAmIDB4MGY7Ci0gICAgICAgICpwKysgPSBoZXhkaWdpdHNbeF07Ci0gICAgfQotICAgICpw ID0gTlVMOwotICAgIHJldHVybigoY2hhciAqKWZwX3hidWYpOwotfQotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQotY2hhciBtYXRoX3BpW10gPSAiMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMy Nzk1IjsKLWNoYXIgbWF0aF9lW10gPSAgIjIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUy NyI7Ci0KLVZPSUQKLWluaXRmbG9hdCgpIHsKLSAgICBjaGFyICogYnVmID0gTlVMTDsKLSAgICBp bnQgaSwgeCwgeTsKLS8qCi0gIFdlIG1hbGxvYyBhIGJpZyB0ZW1wb3JhcnkgYnVmZmVyIGZvciBz cHJpbnRmKCkgdG8gbWluaW1pemUgbGlrZWxpaG9vZCBvZgotICAoYW5kIGRhbWFnZSBmcm9tKSBz cHJpbnRmIGJ1ZmZlciBvdmVyZmxvd3MuICBJbiBhbnkgY2FzZSwgdGhlIG9ubHkgd2F5IHRoaXMK LSAgY291bGQgaGFwcGVuIHdvdWxkIGJlIGlmIHNwcmludGYoKSBpdHNlbGYgaGFkIGJ1Z3MsIHNp bmNlIHRoZSBmb3JtYXQKLSAgZGVzY3JpcHRvciBzYXlzIHRvIGN1dCBpdCBvZmYgYXQgMjUwIGRl Y2ltYWwgcGxhY2VzLgotKi8KLSAgICBpZiAoKGJ1ZiA9IChjaGFyICopbWFsbG9jKDQwOTYpKSkg ewotICAgICAgICBzcHJpbnRmKGJ1ZiwiJTAuMjUwZiIsKDEwLjAgLyAzLjApKTsKLSAgICAgICAg Zm9yIChpID0gMjsgaSA8IDI1MCAmJiBidWZbaV0gPT0gJzMnOyBpKyspIDsKLSAgICAgICAgeCA9 IGkgLSAxOwotICAgICAgICBkZWJ1ZyhGMTExLCJpbml0ZmxvYXQgMTAuMC8zLjAiLGJ1Zix4KTsK LSAgICAgICAgc3ByaW50ZihidWYsIiUwLjI1MGYiLCg0LjAgLyA5LjApKTsKLSAgICAgICAgZm9y IChpID0gMjsgaSA8IDI1MCAmJiBidWZbaV0gPT0gJzQnOyBpKyspIDsKLSAgICAgICAgeSA9IGkg LSAxOwotICAgICAgICBkZWJ1ZyhGMTExLCJpbml0ZmxvYXQgNC4wLzkuMCIsYnVmLHkpOwotICAg ICAgICBmcF9kaWdpdHMgPSAoeCA8IHkpID8geCA6IHk7Ci0gICAgICAgIGlmIChmcF9kaWdpdHMg PCBzaXplb2YobWF0aF9waSkgLSAxKSB7Ci0gICAgICAgICAgICBtYXRoX3BpW2ZwX2RpZ2l0cysx XSA9IE5VTDsKLSAgICAgICAgICAgIG1hdGhfZVtmcF9kaWdpdHMrMV0gPSBOVUw7Ci0gICAgICAg IH0KLSAgICAgICAgc3ByaW50ZihidWYsIiUwLjZmIiwoNy4wIC8gOS4wKSk7Ci0gICAgICAgIGlm IChidWZbN10gPT0gJzgnKSBmcF9yb3VuZGluZyA9IDE7Ci0gICAgICAgIGRlYnVnKEYxMTEsImlu aXRmbG9hdCA3LjAvOS4wIixidWYsZnBfcm91bmRpbmcpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJp bml0ZmxvYXQgcHJlY2lzaW9uIiwiIixmcF9kaWdpdHMpOwotICAgICAgICBmcmVlKGJ1Zik7Ci0g ICAgfQotfQotI2VuZGlmIC8qIENLRkxPQVQgKi8KLQotLyoKLSAgUCBSIEUgUyBDIEEgTiAtLSBB IHF1aWNrIGxvb2sgdGhyb3VnaCB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yCi0gIGl0ZW1z IHRoYXQgbXVzdCBiZSBoYW5kbGVkIGJlZm9yZSB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSBpcyBl eGVjdXRlZC4KLSovCi0jaWZkZWYgTlQKLWV4dGVybiBpbnQgU3RhcnRlZEZyb21EaWFsZXI7Ci0j ZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBPUzIKLWV4dGVybiBpbnQgazk1c3RkaW87Ci11bnNpZ25l ZCBsb25nIHN0YXJ0ZmxhZ3MgPSAwTDsKLSNlbmRpZiAvKiBPUzIgKi8KLQotc3RhdGljIGNoYXIg KgotZmluZGlucGF0aChhcmcpIGNoYXIgKiBhcmc7IHsKLSNpZmRlZiBPUzIKLSAgICBjaGFyICog c2NyaXB0ZW52LCAqIGtleW1hcGVudjsKLSAgICBpbnQgbGVuOwotI2VuZGlmIC8qIE9TMiAqLwot I2lmZGVmIERDTURCVUYKLSAgICBleHRlcm4gY2hhciAqIGNtZGJ1ZjsKLSNlbHNlCi0gICAgZXh0 ZXJuIGNoYXIgY21kYnVmW107Ci0jZW5kaWYgLyogRENNREJVRiAqLwotICAgIGNoYXIgdGFrZXBh dGhbNDA5Nl07Ci0gICAgY2hhciAqIHM7Ci0gICAgaW50IHgsIHo7Ci0KLSAgICAvKiBTZXQgdXAg c2VhcmNoIHBhdGguLi4gKi8KLSNpZmRlZiBPUzIKLSAgICBjaGFyICogYXBwZGF0YTAgPSBOVUxM LCAqYXBwZGF0YTEgPSBOVUxMOwotI2lmZGVmIE5UCi0gICAgc2NyaXB0ZW52ID0gZ2V0ZW52KCJL OTVTQ1JJUFRTIik7Ci0gICAga2V5bWFwZW52ID0gZ2V0ZW52KCJLOTVLRVlNQVBTIik7Ci0gICAg bWFrZXN0cigmYXBwZGF0YTAsKGNoYXIgKilHZXRBcHBEYXRhKDApKTsKLSAgICBtYWtlc3RyKCZh cHBkYXRhMSwoY2hhciAqKUdldEFwcERhdGEoMSkpOwotI2Vsc2UgLyogTlQgKi8KLSAgICBzY3Jp cHRlbnYgPSBnZXRlbnYoIksyU0NSSVBUUyIpOwotICAgIGtleW1hcGVudiA9IGdldGVudigiSzJL RVlNQVBTIik7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICBpZiAoIXNjcmlwdGVudikKLSAgICAgIHNj cmlwdGVudiA9IGdldGVudigiQ0tfU0NSSVBUUyIpOwotICAgIGlmICghc2NyaXB0ZW52KQotICAg ICAgc2NyaXB0ZW52ID0gIiI7Ci0gICAgaWYgKCFrZXltYXBlbnYpCi0gICAgICBrZXltYXBlbnYg PSBnZXRlbnYoIkNLX0tFWU1BUFMiKTsKLSAgICBpZiAoIWtleW1hcGVudikKLSAgICAgIGtleW1h cGVudiA9ICIiOwotCi0gICAgZGVidWcoRjExMCwic3RhcnR1cGRpciIsc3RhcnR1cGRpciwwKTsK LSAgICBkZWJ1ZyhGMTEwLCJjb21tb24gYXBwZGF0YSBkaXJlY3RvcnkiLGFwcGRhdGExLDApOwot ICAgIGRlYnVnKEYxMTAsImFwcGRhdGEgZGlyZWN0b3J5IixhcHBkYXRhMCwwKTsKLSAgICBkZWJ1 ZyhGMTEwLCJpbmlkaXIiLGluaWRpciwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJob21lIix6aG9tZSgp LDApOwotICAgIGRlYnVnKEYxMTAsImV4ZWRpciIsZXhlZGlyLDApOwotCi0gICAgbGVuID0gc3Ry bGVuKHNjcmlwdGVudikgKyBzdHJsZW4oa2V5bWFwZW52KSArIDMqc3RybGVuKHN0YXJ0dXBkaXIp Ci0gICAgICAgICsgMypzdHJsZW4oaW5pZGlyKSArIDMqc3RybGVuKHpob21lKCkpICsgMypzdHJs ZW4oZXhlZGlyKQotICAgICAgICArIChhcHBkYXRhMCA/IDMqc3RybGVuKGFwcGRhdGEwKSA6IDAp IAotICAgICAgICArIChhcHBkYXRhMSA/IDMqc3RybGVuKGFwcGRhdGExKSA6IDApCi0gICAgICAg ICsgNipzdHJsZW4oIlNDUklQVFMvIikgKyA2KnN0cmxlbigiS0VZTUFQUy8iKSArIDE2OwotCi0g ICAgaWYgKGxlbiA+PSA0MDk2KSB7ICAgICAgICAgICAgICAgICAgLyogU0FGRSAobGVuZ3RoIGlz IGNoZWNrZWQpICovCi0gICAgICAgIHRha2VwYXRoWzBdID0gJ1wwJzsKLSAgICAgICAgZGVidWco RjExMSwiZmluZGlucGF0aCBlcnJvciAtIHBhdGggbGVuZ3RoIHRvbyBsb25nIiwibGVuIixsZW4p OwotICAgIH0gZWxzZQotICAgICAgc3ByaW50Zih0YWtlcGF0aCwKLSAgICAgICAgICAgICAgLyog c2VtaWNvbG9uLXNlcGFyYXRlZCBwYXRoIGxpc3QgKi8KLSAgICAiJXMlcyVzJXMlczslcyVzOyVz JXM7JXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXM7JXMlczslcyVzOyVzOyVzJXM7JXMlcyIsCi0g ICAgICAgICAgICAgIHNjcmlwdGVudiwKLSAgICAgICAgICAgICAgKHNjcmlwdGVudlswXSAmJiBz Y3JpcHRlbnZbc3RybGVuKHNjcmlwdGVudiktMV09PSc7Jyk/IiI6IjsiLAotICAgICAgICAgICAg ICBrZXltYXBlbnYsCi0gICAgICAgICAgICAgIChrZXltYXBlbnZbMF0gJiYga2V5bWFwZW52W3N0 cmxlbihrZXltYXBlbnYpLTFdPT0nOycpPyIiOiI7IiwKLSAgICAgICAgICAgICAgc3RhcnR1cGRp ciwKLSAgICAgICAgICAgICAgc3RhcnR1cGRpciwgIlNDUklQVFMvIiwKLSAgICAgICAgICAgICAg c3RhcnR1cGRpciwgIktFWU1BUFMvIiwKLSAgICAgICAgICAgICAgYXBwZGF0YTEgPyBhcHBkYXRh MSA6ICIiLCAKLSAgICAgICAgICAgICAgYXBwZGF0YTEgPyAiS2VybWl0IDk1OyIgOiAiIiwKLSAg ICAgICAgICAgICAgYXBwZGF0YTEgPyBhcHBkYXRhMSA6ICIiLAotICAgICAgICAgICAgICBhcHBk YXRhMSA/ICJLZXJtaXQgOTUvU0NSSVBUUy87IiA6ICIiLAotICAgICAgICAgICAgICBhcHBkYXRh MSA/IGFwcGRhdGExIDogIiIsCi0gICAgICAgICAgICAgIGFwcGRhdGExID8gIktlcm1pdCA5NS9L RVlNQVBTLzsiIDogIiIsCi0gICAgICAgICAgICAgIGFwcGRhdGEwID8gYXBwZGF0YTAgOiAiIiwK LSAgICAgICAgICAgICAgYXBwZGF0YTAgPyAiS2VybWl0IDk1OyIgOiAiIiwKLSAgICAgICAgICAg ICAgYXBwZGF0YTAgPyBhcHBkYXRhMCA6ICIiLAotICAgICAgICAgICAgICBhcHBkYXRhMCA/ICJL ZXJtaXQgOTUvU0NSSVBUUy87IiA6ICIiLAotICAgICAgICAgICAgICBhcHBkYXRhMCA/IGFwcGRh dGEwIDogIiIsCi0gICAgICAgICAgICAgIGFwcGRhdGEwID8gIktlcm1pdCA5NS9LRVlNQVBTLzsi IDogIiIsCi0gICAgICAgICAgICAgIGluaWRpciwKLSAgICAgICAgICAgICAgaW5pZGlyLCAiU0NS SVBUUy8iLAotICAgICAgICAgICAgICBpbmlkaXIsICJLRVlNQVBTLyIsCi0gICAgICAgICAgICAg IHpob21lKCksCi0gICAgICAgICAgICAgIHpob21lKCksICJTQ1JJUFRTLyIsCi0gICAgICAgICAg ICAgIHpob21lKCksICJLRVlNQVBTLyIsCi0gICAgICAgICAgICAgIGV4ZWRpciwKLSAgICAgICAg ICAgICAgZXhlZGlyLCAiU0NSSVBUUy8iLAotICAgICAgICAgICAgICBleGVkaXIsICJLRVlNQVBT LyIKLSAgICAgICAgICAgICAgKTsKLSAgICBkZWJ1ZyhGMTEwLCJmaW5kaW5wYXRoIHRha2VwYXRo Iix0YWtlcGF0aCwwKTsKLSNpZmRlZiBOVAotICAgIG1ha2VzdHIoJmFwcGRhdGEwLE5VTEwpOwot ICAgIG1ha2VzdHIoJmFwcGRhdGExLE5VTEwpOwotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiBu b3QgT1MyICovCi0jaWZuZGVmIE5PU1BMCi0gICAgeiA9IDEwMjQ7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTG9vayBpbiBob21lIGRpcmVjdG9yeSAqLwotICAgIHMgPSB0YWtlcGF0aDsK LSAgICB6enN0cmluZygiXFx2KGhvbWUpIiwmcywmeik7Ci0jZWxzZQotICAgIHRha2VwYXRoWzBd ID0gJ1wwJzsKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2VuZGlmIC8qIE9TMiAqLwotLyoKLSAgQWxs IHRoZSBsb2dpYyBmb3Igc2VhcmNoaW5nIHRoZSB0YWtlIHBhdGggaXMgaW4gdGhlIGNvbW1hbmQg cGFyc2VyLgotICBTbyBldmVuIHRob3VnaCB3ZSBhcmVuJ3QgcGFyc2luZyBjb21tYW5kcywgd2Ug aW5pdGlhbGl6ZSBhbmQgY2FsbCB0aGUKLSAgcGFyc2VyIGZyb20gaGVyZSwgd2l0aCB0aGUgcHVy cG9ydGVkIGZpbGVuYW1lIHN0dWZmZWQgaW50byB0aGUgY29tbWFuZAotICBidWZmZXIsIGZvbGxv d2VkIGJ5IHNvbWUgY2FycmlhZ2UgcmV0dXJucyB0byBtYWtlIHRoZSBwYXJzZXIgcmV0dXJuLgot ICBJZiB0aGUgZmlsZSBpcyBub3QgZm91bmQsIG9yIG90aGVyd2lzZSBub3QgYWNjZXNzaWJsZSwg dGhlIHBhcnNlciBwcmludHMKLSAgYW4gYXBwcm9wcmlhdGUgbWVzc2FnZSwgYW5kIHRoZW4gd2Ug anVzdCBleGl0LgotKi8KLSAgICBjbWRpbmkoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBBbGxvY2F0ZSBjb21tYW5kIGJ1ZmZlcnMgZXRjICovCi0gICAgY21pbmkoMCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGVtICovCi0gICAgLyogU3R1ZmYgZmls ZW5hbWUgaW50byBjb21tYW5kIGJ1ZiB3aXRoIGJyYWNlcyBpbiBjYXNlIG9mIHNwYWNlcyAqLwot ICAgIGNrbWFrbXNnKGNtZGJ1ZixDTURCTCwieyIsYXJnLCJ9IixOVUxMKTsKLSAgICBkZWJ1ZyhG MTEwLCJmaW5kaW5wYXRoIGNtZGJ1ZiIsY21kYnVmLDApOwotICAgIGNrc3RybmNhdChjbWRidWYs IlxyXHIiLENNREJMKTsgICAgIC8qIEFuZCBzb21lIGNhcnJpYWdlIHJldHVybnMgKi8KLSAgICBp ZiAoY21pZmlwKCIiLCIiLCZzLCZ4LDAsdGFrZXBhdGgseHhzdHJpbmcpIDwgMCkKLSAgICAgIHJl dHVybihOVUxMKTsKLSAgICBjbXJlcygpOwotICAgIHJldHVybihzKTsKLX0KLQotc3RhdGljIGlu dCB0cl9pbnQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgaWYgVFJBTlNNSVQgaW50ZXJy dXB0ZWQgKi8KLQotI2lmbmRlZiBNQUMKLVNJR1RZUAotI2lmZGVmIENLX0FOU0lDCi10cnRyYXAo aW50IGZvbykgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFJBTlNNSVQgaW50ZXJydXB0IHRy YXAgKi8KLSNlbHNlCi10cnRyYXAoZm9vKSBpbnQgZm9vOyAgICAgICAgICAgICAgICAgICAgLyog VFJBTlNNSVQgaW50ZXJydXB0IHRyYXAgKi8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdHJ0 cmFwICovIHsKLSNpZmRlZiBfX0VNWF9fCi0gICAgc2lnbmFsKFNJR0lOVCwgU0lHX0FDSyk7Ci0j ZW5kaWYKLSAgICB0cl9pbnQgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoTmVlZCBh cmcgZm9yIEFOU0kgQykgKi8KLSAgICBTSUdSRVRVUk47Ci19Ci0jZW5kaWYgLyogTUFDICovCi0j ZW5kaWYgLyogTk9JQ1AgKi8KLQotI2lmZGVmIFVOSVgKLVZPSUQKLWdldGV4ZWRpcigpIHsKLSAg ICBleHRlcm4gY2hhciAqIHhhcmcwOwotICAgIGxvbmcgeHg7Ci0gIC8qCi0gICAgVW5peCBwcm92 aWRlcyBubyBzdGFuZGFyZCBzZXJ2aWNlIGZvciB0aGlzLiAgV2UgbG9vayBpbiBhcmd2WzBdLCBh bmQgaWYKLSAgICB3ZSdyZSBsdWNreSB0aGVyZSdzIGEgZnVsbCBwYXRobmFtZS4gIElmIG5vdCB3 ZSBkbyBhIFBBVEggc2VhcmNoLgotICAqLwotICAgIGlmIChja3N0cmNocih4YXJnMCwnLycpKSB7 ICAgICAgICAgIC8qIEdsb2JhbCBjb3B5IG9mIGFyZ3ZbMF0gKi8KLSAgICAgICAgaW50IGksIGs7 Ci0gICAgICAgIGNoYXIgKiBwID0gTlVMTDsKLSAgICAgICAgaWYgKChrID0gY2tzdHJuY3B5KHRt cGJ1Zix4YXJnMCxUTVBCVUZTSVotMikpID4gMCkgewotICAgICAgICAgICAgcCA9IHRtcGJ1ZjsK LSAgICAgICAgICAgIC8qIENvbnZlcnQgdG8gZnVsbHkgcXVhbGlmaWVkIHBhdGhuYW1lICovCi0g ICAgICAgICAgICBpZiAodG1wYnVmWzBdKSBpZiAodG1wYnVmWzBdICE9ICcvJykgewotICAgICAg ICAgICAgICAgIGxpbmVbMF0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgemZucWZwKHRtcGJ1ZixM SU5CVUZTSVotMiwoY2hhciAqKWxpbmUpOwotICAgICAgICAgICAgICAgIGlmIChsaW5lWzBdKQot ICAgICAgICAgICAgICAgICAgcCA9IGxpbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4 eCA9IHpjaGtpKHApOwotICAgICAgICAgICAgaWYgKHh4ID4gLTEpIHsJCS8qIElzIHRoZSByZXN1 bHQgYW4gZXhpc3RpbmcgZmlsZT8gKi8KLSAgICAgICAgICAgICAgICBrID0gc3RybGVuKHApOwot ICAgICAgICAgICAgICAgIGZvciAoaSA9IGstMTsgaSA+IDA7IGktLSkgeyAvKiBZZXMsIHN0cmlw IG5hbWUgcGFydCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAocFtpXSA9PSAnLycpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgay0xKQotICAgICAgICAgICAgICAgICAgICAg ICAgICBwW2krMV0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQkgICAg bWFrZXN0cigmZXhlZGlyLHApOwkJLyogU2F2ZSB0aGUgcmVzdWx0ICovCi0gICAgICAgIH0KLSAg ICB9Ci0gICAgaWYgKCFleGVkaXIgJiYgeGFyZzApIHsgICAgICAgICAgICAgLyogTm90IGZvdW5k PyAqLwotICAgICAgICBjaGFyICogcDsKLSAgICAgICAgcCA9IGdldGVudigiUEFUSCIpOyAgICAg ICAgICAgICAvKiBTZWFyY2ggdGhlIFBBVEggKi8KLSAgICAgICAgaWYgKHApIHsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBvbmUuLi4gKi8KLSAgICAgICAgICAgIGNoYXIg KiBxLCAqIFBBVEggPSBOVUxMOwotICAgICAgICAgICAgaW50IGs7Ci0gICAgICAgICAgICBtYWtl c3RyKCZQQVRILHApOyAgICAgICAgICAgLyogUG9rZWFibGUgY29weSBvZiBQQVRIIHN0cmluZyAq LwotICAgICAgICAgICAgaWYgKFBBVEgpIHsgICAgICAgICAgICAgICAgIC8qIElmIG1hbGxvYyBz dWNjZWVkZWQuLi4gKi8KLSAgICAgICAgICAgICAgICBwID0gUEFUSDsKLSAgICAgICAgICAgICAg ICB3aGlsZSAocCAmJiAqcCkgeyAgICAgICAgLyogTG9vcCB0aHJvdWdoIHNlZ21lbnRzICovCi0g ICAgICAgICAgICAgICAgICAgIHEgPSBja3N0cmNocihwLCc6Jyk7IC8qIEVuZCBvZiB0aGlzIHNl Z21lbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHEgPT0gcCkgeyAgICAgICAvKiBOdWxs IFBBVEggc2VnbWVudCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgcCsrOyAgICAgICAgICAg IC8qIFNraXAgb3ZlciBjb2xvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7 Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHEpICAgICAg ICAgICAgICAvKiBJZiBub3QgYXQgZW5kIG9mIFBBVEggc3RyaW5nICovCi0gICAgICAgICAgICAg ICAgICAgICAgKnErKyA9IE5VTDsgICAgICAgLyogemVybyBvdXQgdGhlIGNvbG9uICovCi0gICAg ICAgICAgICAgICAgICAgIGlmICgoayA9IGNrc3RybmNweSh0bXBidWYscCxUTVBCVUZTSVopKSA+ IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBidWZbay0xXSAhPSAnLycpIHsg LyogQ29weSB0aGlzIFBBVEggc2VnbWVudCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRtcGJ1ZltrKytdID0gJy8nOyAgICAvKiBBcHBlbmQgJy8nIGlmIG5lZWRlZCAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRtcGJ1ZltrXSA9IE5VTDsKLSAgICAgICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFwcGVuZCB0aGUgYXJndlswXSB2 YWx1ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNrc3RybmNweSgmdG1wYnVmW2td LHhhcmcwLFRNUEJVRlNJWikgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHpjaGtpKHRtcGJ1ZikgPiAtMSkgeyAvKiBGaWxlIGV4aXN0cz8gKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG1wYnVmW2tdID0gTlVMOyAgICAgIC8qIFllcywgd2UncmUgZG9u ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6Zm5xZnAodG1wYnVmLExJTkJV RlNJWiwoY2hhciAqKWxpbmUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtl c3RyKCZleGVkaXIsbGluZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg IH0gZWxzZSBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgICBwID0gcTsgICAgICAgICAgICAgIC8qIE5vdCBmb3VuZCwgZ28gdG8gbmV4 dCBzZWdtZW50ICAqLwotICAgICAgICAgICAgICAgIH0gLyogd2hpbGUgKi8KLSAgICAgICAgICAg ICAgICBmcmVlKFBBVEgpOyAgICAgICAgICAgICAvKiBGcmVlIFBBVEggY29weSAqLwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghZXhlZGlyKSB7ICAgICAgICAgICAgICAg ICAgLyogU3RpbGwgbm90aGluZz8gKi8KLSAgICAgICAgICAgIGlmICh6Y2hraSh4YXJnMCkgPiAt MSkgeyAgICAvKiBNYXliZSBpdCdzIGluIHRoZSBjdXJyZW50IGRpciAqLwotICAgICAgICAgICAg ICAgIHpmbnFmcCh6Z3RkaXIoKSxMSU5CVUZTSVosKGNoYXIgKilsaW5lKTsKLSAgICAgICAgICAg ICAgICBtYWtlc3RyKCZleGVkaXIsbGluZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgaWYgKCFleGVkaXIpIHsgICAgICAgICAgICAgICAgICAgICAgLyogU3RpbGwgbm90 aGluZz8gKi8KLSAgICAgICAgbWFrZXN0cigmZXhlZGlyLCIvIik7ICAgICAgICAgICAvKiBGYWtl IGl0IHdpdGggd2l0aCByb290LiAqLwotICAgIH0KLX0KLSNlbmRpZiAvKiBVTklYICovCi0KLWlu dCBhcmdfeCA9IDA7Ci1zdGF0aWMgaW50IHhfcHJlc2NhbiA9IDA7Ci0KLS8qCi0gIFRoZSBhcmd1 bWVudCB5IG9uY2UgbWVhbnQgc29tZXRoaW5nIGJ1dCBJIGNhbid0IGltYWdpbmUgd2hhdCBzbyBu b3cKLSAgaXQncyBpZ25vcmVkLiAgKFByaW9yIHRvIDIyIEF1ZyA5OCwgcHJlc2NhbigpIHdhcyBj YWxsZWQgdHdpY2UgYnkgbWFpbigpLAotICBhbmQgdGhlIGFyZyBkaWZmZXJlbnRpYXRlZCB0aGUg dHdvIGNhbGxzLiAgQnV0IHRoaXMgY2F1c2VkIGFsbCBzb3J0cyBvZgotICBwcm9ibGVtcyAmIGNv bmZ1c2lvbiwgc28gSSBjb21tZW50ZWQgb3V0IHRoZSBzZWNvbmQgY2FsbC4gIFRoaXMgaXNzdWUg bWlnaHQKLSAgbmVlZCB0byBiZSByZXZpc2l0ZWQuKQotKi8KLVZPSUQKLXByZXNjYW4oZHVtbXkp IGludCBkdW1teTsgeyAgICAgICAgICAgICAvKiBBcmcgaXMgaWdub3JlZC4gKi8KLSAgICBleHRl cm4gaW50IGhvd2NhbGxlZDsKLSAgICBpbnQgeWFyZ2M7IGNoYXIgKip5YXJndjsKLSAgICBjaGFy IHg7Ci0gICAgY2hhciAqeXAsICp5eTsKLSNpZmRlZiBERUJVRwotICAgIGludCBkZWJjb3VudCA9 IDA7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBpbnQgejsKLQotICAgIGlmICh4X3ByZXNjYW4p ICAgICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgcnVuIG9uY2UgKi8KLSAgICAgIHJldHVybjsK LSAgICB4X3ByZXNjYW4gPSAxOwotCi0gICAgeWFyZ2MgPSB4YXJnYzsgICAgICAgICAgICAgICAg ICAgICAgLyogTWFrZSBjb3B5IG9mIGFyZyB2ZWN0b3IgKi8KLSAgICB5YXJndiA9IHhhcmd2Owot Ci0jaWZuZGVmIE5PSUNQCi0jaWZkZWYgRENNREJVRgotICAgIGlmICgha2VybXJjKQotICAgICAg aWYgKCEoa2VybXJjID0gKGNoYXIgKikgbWFsbG9jKEtFUk1SQ0wrMSkpKQotICAgICAgICBmYXRh bCgicHJlc2Nhbjogbm8gbWVtb3J5IGZvciBrZXJtcmMiKTsKLSNlbmRpZiAvKiBEQ01EQlVGICov Ci0gICAgY2tzdHJuY3B5KGtlcm1yYyxLRVJNUkMsS0VSTVJDTCk7ICAgLyogRGVmYXVsdCBpbml0 IGZpbGUgbmFtZSAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZmRlZiBPUzIKLSAgICB5cCA9 IGdldGVudigiSzk1U1RBUlRGTEFHUyIpOwotICAgIGlmICh5cCkgewotICAgICAgICBzdGFydGZs YWdzID0gYXRvaSh5cCk7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgSUtTRAot ICAgIGlmIChob3djYWxsZWQgPT0gSV9BTV9JS1NEKSAgICAgICAgIC8qIEludGVybmV0IEtlcm1p dCBTZXJ2aWNlIGRhZW1vbiAqLwotICAgICAgaW5zZXJ2ZXIgPSAxOyAgICAgICAgICAgICAgICAg ICAgIC8qIChTZWUgaW5zZXJ2ZXIgc2VjdGlvbiBvZiBja2NtYWkpICovCi0jZW5kaWYgLyogSUtT RCAqLwotCi0vKiBDb21tYW5kIGxpbmUgb3B0aW9ucyBmb3IgS2VybWl0ICovCi0KLSNpZm5kZWYg Tk9DTURMCi0gICAgaWYgKHlhcmdjID4gMQotICAgICAgICAmJiAqeWFyZ3ZbMV0gIT0gJy0nCi0g ICAgICAgICYmICh5YXJndlsxXVswXSAhPSAnPScpCi0jaWZkZWYgS0VSQkFORwotICAgICAgICAm JiAoeWFyZ3ZbMV1bMF0gIT0gJysnKQotI2VuZGlmIC8qIEtFUkJBTkcgKi8KLSNpZmRlZiBJS1NE Ci0gICAgICAgICYmIChob3djYWxsZWQgIT0gSV9BTV9JS1NEKQotI2VuZGlmIC8qIElLU0QgKi8K LSAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSBhcyAx c3QgYXJndW1lbnQgKi8KLSNpZm5kZWYgTk9JQ1AKLSAgICAgICAgY2hhciAqczsKLSNlbmRpZiAv KiBOT0lDUCAqLwotI2lmbmRlZiBOT1VSTAotICAgICAgICBleHRlcm4gaW50IGhhdmV1cmw7Ci0g ICAgICAgIGV4dGVybiBzdHJ1Y3QgdXJsZGF0YSBnX3VybDsKLSAgICAgICAgaWYgKHVybHBhcnNl KHlhcmd2WzFdLCZnX3VybCkpIHsKLSAgICAgICAgICAgIGlmICghY2tzdHJjbXAoZ191cmwuc3Zj LCJmdHAiLC0xLDApIHx8Ci0gICAgICAgICAgICAgICAgIWNrc3RyY21wKGdfdXJsLnN2YywiZnRw cyIsLTEsMCkpIHsKLSAgICAgICAgICAgICAgICBoYXZldXJsID0gMTsKLSAgICAgICAgICAgICAg ICBob3djYWxsZWQgPSBJX0FNX0ZUUDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21w KGdfdXJsLnN2YywidGVsbmV0IiwtMSwwKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAhY2tz dHJjbXAoZ191cmwuc3ZjLCJ0ZWxuZXRzIiwtMSwwKSkgewotICAgICAgICAgICAgICAgIGhhdmV1 cmwgPSAxOwotICAgICAgICAgICAgICAgIGhvd2NhbGxlZCA9IElfQU1fVEVMTkVUOwotICAgICAg ICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoZ191cmwuc3ZjLCJzc2giLC0xLDApKSB7Ci0gICAg ICAgICAgICAgICAgaGF2ZXVybCA9IDE7Ci0gICAgICAgICAgICAgICAgaG93Y2FsbGVkID0gSV9B TV9TU0g7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChnX3VybC5zdmMsImlrc2Qi LC0xLDApIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICFja3N0cmNtcChnX3VybC5zdmMsImtl cm1pdCIsLTEsMCkpIHsKLSAgICAgICAgICAgICAgICBoYXZldXJsID0gMTsKLSAgICAgICAgICAg ICAgICBob3djYWxsZWQgPSBJX0FNX0tFUk1JVDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNr c3RyY21wKGdfdXJsLnN2YywiaHR0cCIsLTEsMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAg IWNrc3RyY21wKGdfdXJsLnN2YywiaHR0cHMiLC0xLDApKSB7Ci0gICAgICAgICAgICAgICAgaGF2 ZXVybCA9IDE7Ci0gICAgICAgICAgICAgICAgaG93Y2FsbGVkID0gSV9BTV9IVFRQOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgaWYgKGhhdmV1cmwpIHsKLSAgICAgICAgICAgICAgICB3aGls ZSAoLS15YXJnYyA+IDApIHsgICAvKiBHbyB0aHJvdWdoIGNvbW1hbmQtbGluZSBhcmdzICovCi0g ICAgICAgICAgICAgICAgICAgIHlhcmd2Kys7ICAgICAgICAgICAgLyogbG9va2luZyBmb3IgLVkg YW5kIC1kICovCi0gICAgICAgICAgICAgICAgICAgIHlwID0gKnlhcmd2KzE7Ci0gICAgICAgICAg ICAgICAgICAgIGlmICgqKnlhcmd2ID09ICctJykgewotICAgICAgICAgICAgICAgICAgICAgICAg eCA9ICooKnlhcmd2KzEpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHgpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSNpZm5kZWYgTk9JQ1AKLQkJ CSAgICAgIGNhc2UgJysnOgotCQkJICAgICAgY2FzZSAnLSc6Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChkb3hhcmcoeWFyZ3YsMSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmYXRhbCgiRXh0ZW5kZWQgYXJndW1lbnQgZXJyb3IiKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB5cCA9ICIiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSNlbmRpZiAvKiBOT0lDUCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn WSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vaW5pdCsrOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSAncSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aWV0ID0g MTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5vaW5pdCA9IDE7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RhcnRmbGFncyB8PSAyOyAgICAvKiBObyBuZXR3b3JrIERMTHMgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGZsYWdzIHw9IDQ7ICAgIC8qIE5vIFRB UEkgRExMcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3Mg fD0gODsgICAgLyogTm8gU2VjdXJpdHkgRExMcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gMTY7ICAgLyogTm8gWm1vZGVtIERMTHMgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGZsYWdzIHw9IDMyOyAgIC8qIFN0ZGlu ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSA2NDsg ICAvKiBTdGRvdXQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Qn OiAvKiA9IFNFVCBERUJVRyBPTiAqLwotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChkZWJjb3VudCsrID4gMCkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkZWJ0aW0gPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIWRlYmxvZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJsb2cgPSBk ZWJvcG4oImRlYnVnLmxvZyIsMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlICdXJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCooeXArMSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoImludmFs aWQgYXJndW1lbnQgYnVuZGxpbmcgYWZ0ZXIgLVciKTsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeWFyZ3YrKywgeWFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHlhcmdjIDwgMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRh bCgiV2luZG93IGhhbmRsZSBtaXNzaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGh3bmREaWFsZXIgPSAoSFdORCkgYXRvbCgqeWFyZ3YpOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTdGFydGVkRnJvbURpYWxlciA9IDE7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHlhcmd2KyssIHlhcmdjLS07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEtlcm1pdERpYWxlcklEID0gYXRvbCgqeWFyZ3YpIDsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl ICcjJzogLyogSzk1IGluaXRpYWxpemF0aW9uIG9wdGlvbnMgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCooeXArMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZhdGFsKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eWFyZ3YrKywgeWFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHlh cmdjIDwgMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiLSMgYXJn dW1lbnQgbWlzc2luZyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGZs YWdzIHw9IGF0b2woKnlhcmd2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgheXApCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gKisreXA7Ci0g ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgICAgIC8qIGFmdGVyIHRoaXMgcG9pbnQgbm9uLUtlcm1pdCBwZXJzb25hbGl0aWVz IG11c3QgcmV0dXJuICovCi0gICAgICAgIHN3aXRjaCAoaG93Y2FsbGVkKSB7Ci0JICBjYXNlIElf QU1fS0VSTUlUOgotCSAgY2FzZSBJX0FNX0lLU0Q6Ci0JICBjYXNlIElfQU1fU1NIU1VCOgotICAg ICAgICAgICAgYnJlYWs7Ci0JICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg ICB9Ci0jZW5kaWYgLyogTk9VUkwgKi8KLQotI2lmbmRlZiBOT0lDUAotICAgICAgICAvKiBJZiBp dCBpcyBub3QgYSBVUkwgdGhhdCB3ZSByZWNvZ25pemUsIHRyeSB0byB0cmVhdCBpdCBhcyBhIGZp bGUgKi8KLQotICAgICAgICBpZiAoIWlzYWJzb2x1dGUoeWFyZ3ZbMV0pKSAgICAgIC8qIElmIG5v dCBhYnNvbHV0ZSAqLwotICAgICAgICAgIHMgPSBmaW5kaW5wYXRoKHlhcmd2WzFdKTsgICAgIC8q IExvb2sgaW4gUEFUSCAqLwotICAgICAgICBlbHNlCi0gICAgICAgICAgcyA9IHlhcmd2WzFdOwot ICAgICAgICBpZiAoIXMpCi0gICAgICAgICAgZG9leGl0KEJBRF9FWElULHhpdHN0YSk7Ci0gICAg ICAgIHpmbnFmcChzLENLTUFYUEFUSCxjbWRmaWwpOyAgICAgLyogSW4gY2FzZSBvZiBDRCBpbiBm aWxlICovCi0gICAgICAgIHlhcmdjIC09IDE7ICAgICAgICAgICAgICAgICAgICAgLyogU2tpcCBw YXN0IHRoZSBmaWxlbmFtZSAqLwotICAgICAgICB5YXJndiArPSAxOyAgICAgICAgICAgICAgICAg ICAgIC8qIE90aGVyd2lzZSB3ZSdsbCBnZXQgYW4gZXJyb3IgKi8KLSNlbmRpZiAvKiBOT0lDUCAq LwotICAgIH0KLQotI2lmbmRlZiBOT0NNREwKLSNpZmRlZiBORVdGVFAKLSAgICBpZiAoaG93Y2Fs bGVkID09IElfQU1fRlRQKSB7ICAgICAgICAvKiBLZXJtaXQncyBGVFAgY2xpZW50IHBlcnNvbmFs aXR5ICovCi0gICAgICAgIHdoaWxlICgtLXlhcmdjID4gMCkgeyAgICAgICAgICAgLyogR28gdGhy b3VnaCBjb21tYW5kLWxpbmUgYXJncyAqLwotICAgICAgICAgICAgeWFyZ3YrKzsgICAgICAgICAg ICAgICAgICAgIC8qIGxvb2tpbmcgZm9yIC1ZIGFuZCAtZCAqLwotICAgICAgICAgICAgeXAgPSAq eWFyZ3YrMTsKLSAgICAgICAgICAgIGlmICgqKnlhcmd2ID09ICctJykgewotICAgICAgICAgICAg ICAgIHggPSAqKCp5YXJndisxKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoeCkgewotICAgICAg ICAgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSNpZm5kZWYgTk9JQ1AKLQkJICAgICAgY2FzZSAn Kyc6Ci0JCSAgICAgIGNhc2UgJy0nOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRveGFy Zyh5YXJndiwxKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiRXh0 ZW5kZWQgYXJndW1lbnQgZXJyb3IiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgICAgIHlwID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1knOgot ICAgICAgICAgICAgICAgICAgICAgICAgbm9pbml0Kys7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3EnOgotICAgICAgICAgICAg ICAgICAgICAgICAgICBxdWlldCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotCi0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaCc6Ci0gICAgICAgICAgICAgICAgICAg ICAgICBub2luaXQgPSAxOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICAgICAgc3Rh cnRmbGFncyB8PSAyOyAgICAvKiBObyBuZXR3b3JrIERMTHMgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgIHN0YXJ0ZmxhZ3MgfD0gNDsgICAgLyogTm8gVEFQSSBETExzICovCi0gICAgICAgICAg ICAgICAgICAgICAgICBzdGFydGZsYWdzIHw9IDg7ICAgIC8qIE5vIFNlY3VyaXR5IERMTHMgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gMTY7ICAgLyogTm8gWm1vZGVt IERMTHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gMzI7ICAgLyog U3RkaW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gNjQ7ICAgLyog U3Rkb3V0ICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkJzogICAgICAgICAgICAgLyogPSBTRVQg REVCVUcgT04gKi8KLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRl YmNvdW50KysgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ0aW0gPSAxOwotICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWJsb2cpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIGRlYmxvZyA9IGRlYm9wbigiZGVidWcubG9nIiwwKTsKLSNlbmRpZiAvKiBERUJVRyAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAg ICAgICAgICAgY2FzZSAnVyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKih5cCsxKSkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoImludmFsaWQgYXJndW1lbnQgYnVuZGxp bmcgYWZ0ZXIgLVciKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHlhcmd2KyssIHlhcmdjLS07 Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeWFyZ2MgPCAxKQotICAgICAgICAgICAgICAg ICAgICAgICAgICBmYXRhbCgiV2luZG93IGhhbmRsZSBtaXNzaW5nIik7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBod25kRGlhbGVyID0gKEhXTkQpIGF0b2woKnlhcmd2KTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIFN0YXJ0ZWRGcm9tRGlhbGVyID0gMTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHlhcmd2KyssIHlhcmdjLS07Ci0gICAgICAgICAgICAgICAgICAgICAgICBLZXJtaXREaWFs ZXJJRCA9IGF0b2woKnlhcmd2KSA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgICAgICBjYXNlICcjJzogICAgICAgICAvKiBLOTUgaW5pdGlhbGl6YXRp b24gb3B0aW9ucyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCooeXArMSkpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGlu ZyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg eWFyZ3YrKywgeWFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5YXJnYyA8IDEp Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCItIyBhcmd1bWVudCBtaXNzaW5nIik7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydGZsYWdzIHw9IGF0b2woKnlhcmd2KTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICgheXApCi0gICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAqKyt5cDsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAg IH0KLSNlbmRpZiAvKiBORVdGVFAgKi8KLSNlbmRpZiAvKiBOT0NNREwgKi8KLQotICAgIHdoaWxl ICgtLXlhcmdjID4gMCkgeyAgICAgICAgICAgICAgIC8qIEdvIHRocm91Z2ggY29tbWFuZC1saW5l IGFyZ3MgKi8KLSAgICAgICAgeWFyZ3YrKzsKLSAgICAgICAgeXAgPSAqeWFyZ3YrMTsgICAgICAg ICAgICAgICAgICAvKiBQb2ludGVyIGZvciBidW5kbGVkIGFyZ3MgKi8KLSAgICAgICAgaWYgKCoq eWFyZ3YgPT0gJz0nKSAgICAgICAgICAgICAvKiBTYW1lIHJ1bGVzIGFzIGNtZGxpbigpLi4uICov Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWJ1ZyhGMTEwLCJwcmVzY2FuICp5YXJndiIs Knlhcmd2LDApOwotCi0jaWZuZGVmIE5PSUNQCi0jaWZkZWYgS0VSQkFORwotICAgICAgICB5eSA9 ICp5YXJndjsKLSAgICAgICAgaWYgKCFzdHJjbXAoeXksIisiKSB8fCAoKnl5ID09ICcrJyAmJiAq KHl5KzEpIDwgKGNoYXIpMzMpKSB7Ci0gICAgICAgICAgICBjaGFyICogczsKLSAgICAgICAgICAg IHlhcmd2Kys7Ci0gICAgICAgICAgICBub2luaXQgPSAxOwotICAgICAgICAgICAgaWYgKCEqeWFy Z3YpCi0gICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNmaWxlZiA9IDE7Ci0gICAg ICAgICAgICBzID0gZmluZGlucGF0aCgqeWFyZ3YpOwotICAgICAgICAgICAgaWYgKHMpIHsKLSAg ICAgICAgICAgICAgICB6Zm5xZnAocyxDS01BWFBBVEgsY21kZmlsKTsKLSAgICAgICAgICAgICAg ICByZXR1cm47Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgZG9leGl0KEJBRF9F WElULHhpdHN0YSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBLRVJCQU5HICovCi0jZW5kaWYgLyog Tk9JQ1AgKi8KLSAgICAgICAgaWYgKCFzdHJjbXAoKnlhcmd2LCItLSIpKSAgICAgICAvKiBnZXRv cHQoKSBjb25mb3JtYW5jZSAqLwotICAgICAgICAgIHJldHVybjsKLSNpZmRlZiBWTVMKLSAgICAg ICAgZWxzZSBpZiAoKip5YXJndiA9PSAnLycpCi0gICAgICAgICAgY29udGludWU7Ci0jZW5kaWYg LyogVk1TICovCi0gICAgICAgIGVsc2UgaWYgKCoqeWFyZ3YgPT0gJy0nKSB7ICAgICAgLyogR290 IGFuIG9wdGlvbiAoYmVnaW5zIHdpdGggZGFzaCkgKi8KLSAgICAgICAgICAgIHggPSAqKCp5YXJn disxKTsgICAgICAgICAgICAvKiBHZXQgb3B0aW9uIGxldHRlciAqLwotICAgICAgICAgICAgd2hp bGUgKHgpIHsgICAgICAgICAgICAgICAgIC8qIEFsbG93IGZvciBidW5kbGVkIG9wdGlvbnMgKi8K LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMDAwLCJwcmVzY2FuIGFyZyIsIiIseCk7Ci0gICAgICAg ICAgICAgICAgc3dpdGNoICh4KSB7Ci0jaWZuZGVmIE5PSUNQCi0gICAgICAgICAgICAgICAgICBj YXNlICcrJzoKLSAgICAgICAgICAgICAgICAgIGNhc2UgJy0nOgotICAgICAgICAgICAgICAgICAg ICBpZiAoZG94YXJnKHlhcmd2LDEpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmF0 YWwoIkV4dGVuZGVkIGFyZ3VtZW50IGVycm9yIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNp Zm5kZWYgQ09NTUVOVAkJCQkvKiBKZWZmIDI4IEFwciAyMDAzICovCi0gICAgICAgICAgICAgICAg ICAgIHlwID0gTlVMTDsJCS8qIChub3QgIiIpICovCi0jZWxzZQotICAgICAgICAgICAgICAgICAg ICB5YXJndisrLCB5YXJnYy0tOwotICAgICAgICAgICAgICAgICAgICB5cCA9ICp5YXJndjsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8q IE5PSUNQICovCi0KLSAgICAgICAgICAgICAgICAgIGNhc2UgJzcnOiAgICAgICAgICAgICAvKiBV bmRvY3VtZW50ZWQuLi4gKi8KLSAgICAgICAgICAgICAgICAgICAgc3N0ZWxuZXQgPSAxOyAgICAg ICAvKiAoYmVjYXVzZSBpdCBkb2Vzbid0IHdvcmspICovCi0gICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotI2lmZGVmIElLU0QKLSAgICAgICAgICAgICAgICAgIGNhc2UgJ0EnOiB7Ci0gICAgICAg ICAgICAgICAgICAgICAgY2hhciAqIHA7Ci0gICAgICAgICAgICAgICAgICAgICAgaW5zZXJ2ZXIg PSAxOyAgICAgLyogRmxhZyB0aGF0IHdlIGFyZSBkb2luZyB0aGlzICovCi0gICAgICAgICAgICAg ICAgICAgICAgc3J2Y2Rtc2cgPSAyOyAgICAgLyogUHJlc2V0IHRoaXMgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAvKiBTZWUgaW5zZXJ2ZXIgc2VjdGlvbiBvZiBja2NtYWkuYyBmb3IgbW9yZSBz ZXR0aW5ncyAqLwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICAgIGlmICgqKHlwKzEp KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJpbnZhbGlkIGFyZ3VtZW50IGJ1 bmRsaW5nIGFmdGVyIC1BIik7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIE5UCi0g ICAgICAgICAgICAgICAgICAgICAgLyogU3VwcG9ydCBmb3IgUHJhZ21hIFN5c3RlbXMgVGVsbmV0 L1Rlcm1pbmFsIFNlcnZlcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgICBwID0gZ2V0ZW52KCJQ UkFHTUFTWVNfSU5FVERfU09DSyIpOwotICAgICAgICAgICAgICAgICAgICAgIGlmIChwICYmIGF0 b2kocCkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICB0dG5hbWVbMF0gPSAnJCc7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSgmdHRuYW1lWzFdLHAsVFROQU1M RU4tMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgICAgICAgICAgIHlhcmd2Kyss IHlhcmdjLS07Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKHlhcmdjIDwgMSB8fCAqKnlhcmd2 ID09ICctJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiLUEgYXJndW1lbnQg bWlzc2luZyIpOwotICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgIHR0bmFtZVswXSA9ICckJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg Y2tzdHJuY3B5KCZ0dG5hbWVbMV0sKnlhcmd2LFRUTkFNTEVOLTEpOwotICAgICAgICAgICAgICAg ICAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0KLSNpZmRlZiBPUzIKLSAg ICAgICAgICAgICAgICAgIGNhc2UgJ1cnOgotICAgICAgICAgICAgICAgICAgICBpZiAoKih5cCsx KSkKLSAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGlu ZyBhZnRlciAtVyIpOwotICAgICAgICAgICAgICAgICAgICB5YXJndisrLCB5YXJnYy0tOwotICAg ICAgICAgICAgICAgICAgICBpZiAoeWFyZ2MgPCAxKQotICAgICAgICAgICAgICAgICAgICAgIGZh dGFsKCJXaW5kb3cgaGFuZGxlIG1pc3NpbmciKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAg ICAgICAgICAgIGlmIChkdW1teSkgewotICAgICAgICAgICAgICAgICAgICAgICAgeWFyZ3YrKywg eWFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgewotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgIGh3bmREaWFsZXIgPSAoSFdORCkgYXRvbCgqeWFyZ3YpOwotICAgICAgICAgICAgICAgICAg ICAgICAgU3RhcnRlZEZyb21EaWFsZXIgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgeWFy Z3YrKywgeWFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEtlcm1pdERpYWxlcklEID0g YXRvbCgqeWFyZ3YpIDsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgICAgIH0KLSNl bmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg ICAgICAgICAgICBjYXNlICcjJzogICAgICAgICAgICAgLyogSzk1IGluaXRpYWxpemF0aW9uIG9w dGlvbnMgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCooeXArMSkpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGZhdGFsKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7Ci0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgeWFyZ3YrKywgeWFyZ2MtLTsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKHlhcmdjIDwgMSkKLSAgICAgICAgICAgICAgICAgICAgICBm YXRhbCgiLSMgYXJndW1lbnQgbWlzc2luZyIpOwotICAgICAgICAgICAgICAgICAgICBzdGFydGZs YWdzIHw9IGF0b2woKnlhcmd2KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYg LyogT1MyICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgICAgICAgIGNhc2UgJ00nOiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTXkgVXNlciBOYW1lICovCi0gICAgICAgICAg ICAgICAgICAgIGlmICgqKHlwKzEpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgi aW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgIHlhcmd2KyssIHlhcmdjLS07Ci0gICAgICAgICAgICAgICAgICAgIGlm ICgoeWFyZ2MgPCAxKSB8fCAoKip5YXJndiA9PSAnLScpKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBmYXRhbCgibWlzc2luZyB1c2VybmFtZSIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbigqeWFyZ3YpID4gVUlEQlVGTEVOKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgidXNlcm5hbWUgdG9vIGxvbmciKTsKLSAg ICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFRoaXMgY2FuJ3Qgd29y ay4gIHVpZGJ1ZiBpcyBvdmVyd3JpdHRlbiBpbiBzeXNpbml0KCkgd2hpY2ggaGFzIHlldCB0byBi ZQotICBjYWxsZWQuICBUaGlzIGNhbm5vdCBiZSBzZXQgaW4gcHJlc2NhbigpLgotKi8KLSNpZmRl ZiBJS1NECi0gICAgICAgICAgICAgICAgICAgIGlmICghaW5zZXJ2ZXIpCi0jZW5kaWYgLyogSUtT RCAqLwotICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh1aWRidWYsKnlhcmd2LFVJREJV RkxFTik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgICAgICBicmVhazsK LSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgICAgICAgICAgY2FzZSAnUic6ICAgICAgICAg ICAgIC8qIFJlbW90ZS1vbmx5IGFkdmlzb3J5ICovCi0jaWZkZWYgQ0tfSUZSTwotICAgICAgICAg ICAgICAgICAgICByZW1vbmx5ID0gMTsKLSNlbmRpZiAvKiBDS19JRlJPICovCi0gICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSAnUyc6ICAgICAgICAgICAg IC8qIFNUQVkgKi8KLSAgICAgICAgICAgICAgICAgICAgc3RheWZsZyA9IDE7Ci0gICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSAnaCc6Ci0gICAgICAgICAg ICAgICAgICAgIG5vaW5pdCA9IDE7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgIHN0 YXJ0ZmxhZ3MgfD0gMjsgICAgLyogTm8gbmV0d29yayBETExzICovCi0gICAgICAgICAgICAgICAg ICAgIHN0YXJ0ZmxhZ3MgfD0gNDsgICAgLyogTm8gVEFQSSBETExzICovCi0gICAgICAgICAgICAg ICAgICAgIHN0YXJ0ZmxhZ3MgfD0gODsgICAgLyogTm8gU2VjdXJpdHkgRExMcyAqLwotICAgICAg ICAgICAgICAgICAgICBzdGFydGZsYWdzIHw9IDE2OyAgIC8qIE5vIFptb2RlbSBETExzICovCi0g ICAgICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gMzI7ICAgLyogU3RkaW4gKi8KLSAgICAg ICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSA2NDsgICAvKiBTdGRvdXQgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZuZGVmIE5PSUNQCi0gICAg ICAgICAgICAgICAgICBjYXNlICdZJzogICAgICAgICAgICAgLyogTm8gaW5pdCBmaWxlICovCi0g ICAgICAgICAgICAgICAgICAgIG5vaW5pdCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSAgICAgICAgICAgICAgICAgIGNhc2UgJ3EnOgotICAg ICAgICAgICAgICAgICAgICAgIHF1aWV0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLQotICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6ICAgICAgICAgICAgIC8qID0gU0VUIERF QlVHIE9OICovCi0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRlYmNvdW50 KysgPiAwKQotICAgICAgICAgICAgICAgICAgICAgIGRlYnRpbSA9IDE7Ci0gICAgICAgICAgICAg ICAgICAgIGlmICghZGVibG9nKQotICAgICAgICAgICAgICAgICAgICAgIGRlYmxvZyA9IGRlYm9w bigiZGVidWcubG9nIiwwKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgICAgICAgICAgICAgICAg ICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgY2FzZSAneCc6ICAgICAgICAgICAgIC8qIFNl cnZlciAqLwotICAgICAgICAgICAgICAgICAgICBhcmdfeCA9IDE7ICAgICAgICAgIC8qIE5vdGUg aW4gYWR2YW5jZSAqLwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNpZm5kZWYgTk9JQ1AK LSAgICAgICAgICAgICAgICAgIGNhc2UgJ3knOiAgICAgICAgICAgICAvKiBBbHRlcm5hdGl2ZSBp bml0IGZpbGUgKi8KLSAgICAgICAgICAgICAgICAgICAgbm9pbml0ID0gMDsKLSAgICAgICAgICAg ICAgICAgICAgeWFyZ3YrKywgeWFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHlhcmdj IDwgMSkgZmF0YWwoIm1pc3NpbmcgbmFtZSBpbiAteSIpOwotICAgICAgICAgICAgICAgICAgICAv KiBSZXBsYWNlIGluaXQgZmlsZSBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNw eShrZXJtcmMsKnlhcmd2LEtFUk1SQ0wpOwotICAgICAgICAgICAgICAgICAgICByY2ZsYWcgPSAx OyAgICAgICAgIC8qIEZsYWcgdGhhdCB0aGlzIGhhcyBiZWVuIGRvbmUgKi8KLSAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjExMSwicHJlc2NhbiBrZXJtcmMiLGtlcm1yYyxyY2ZsYWcpOwotICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgICAgICAgICAg ICAgICAgY2FzZSAneic6ICAgICAgICAgICAgIC8qID0gU0VUIEJBQ0tHUk9VTkQgT0ZGICovCi0g ICAgICAgICAgICAgICAgICAgIGJnc2V0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYmFja2dy ZCA9IDA7Ci0jaWZkZWYgVk1TCi0gICAgICAgICAgICAgICAgICAgIGJhdGNoID0gMDsKLSNlbmRp ZiAvKiBWTVMgKi8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAg ICAgIGNhc2UgJ0InOiAgICAgICAgICAgICAvKiBGb3JjZSBiYWNrZ3JvdW5kIChiYXRjaCkgKi8K LSAgICAgICAgICAgICAgICAgICAgYmdzZXQgPSAxOwotICAgICAgICAgICAgICAgICAgICBiYWNr Z3JkID0gMTsKLSNpZmRlZiBWTVMKLSAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSAxOwotI2Vu ZGlmIC8qIFZNUyAqLwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotI2lmZGVmIENLX05F VEJJT1MKLSAgICAgICAgICAgICAgICAgIGNhc2UgJ04nOgotICAgICAgICAgICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbiA7Ci0gICAgICAgICAgICAgICAgICAgICAg ICB5YXJndisrLCB5YXJnYy0tOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgICAgICAg ICAgIGlmICh5KQotICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybGVuKCp5YXJndikgIT0g MSB8fCAoKnlhcmd2KVswXSA9PSAnWCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBO ZXRCaW9zQWRhcHRlciA9IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gYXRvaSgqeWFyZ3YpOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChuID49IDAgJiYgbiA8PSA5KQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTmV0Qmlvc0FkYXB0ZXIgPSBuOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldEJpb3NBZGFwdGVyID0g LTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfTkVUQklPUyAqLwotICAgICAg ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgheXApCi0gICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICB4ID0gKisreXA7ICAgICAgICAgICAgICAvKiBTZWUgaWYg b3B0aW9ucyBhcmUgYnVuZGxlZCAqLwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot I2VuZGlmIC8qIE5PQ01ETCAqLwotfQotCi0vKiAgRyBFIFQgVCBDIFMgIC0tICBHZXQgVHJhbnNm ZXIgKEludGVybWVkaWF0ZSkgQ2hhcmFjdGVyIFNldCAgKi8KLQotLyoKLSAgR2l2ZW4gdHdvIGZp bGUgY2hhcmFjdGVyIHNldHMsIHRoaXMgcm91dGluZSBwaWNrcyBvdXQgdGhlIGFwcHJvcHJpYXRl Ci0gICJ0cmFuc2ZlciIgY2hhcmFjdGVyIHNldCB0byB1c2UgZm9yIHRyYW5zbGF0aW5nIGJldHdl ZW4gdGhlbS4KLSAgVGhlIHRyYW5zZmVyIGNoYXJhY3RlciBzZXQgbnVtYmVyIGlzIHJldHVybmVk LgotCi0gIFRyYW5zbGF0aW9uIGJldHdlZW4gdHdvIGZpbGUgY2hhcmFjdGVyIHNldHMgaXMgZG9u ZSwgZm9yIGV4YW1wbGUsCi0gIGJ5IHRoZSBDT05ORUNULCBUUkFOU01JVCwgYW5kIFRSQU5TTEFU RSBjb21tYW5kcy4KLQotICBUcmFuc2xhdGlvbiBiZXR3ZWVuIEthbmppIGNoYXJhY3RlciBzZXRz IGlzIG5vdCB5ZXQgc3VwcG9ydGVkLgotKi8KLWludAotZ2V0dGNzKGNzMSxjczIpIGludCBjczEs IGNzMjsgewotI2lmZGVmIE5PQ1NFVFMgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGNo YXJhY3Rlci1zZXQgc3VwcG9ydCAqLwotICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHNvIG5vIHRyYW5zbGF0aW9uICovCi0jZWxzZQotICAgIGludCB0Y3MgPSBUQ19U UkFOU1A7Ci0jaWZkZWYgS0FOSkkKLS8qIEthbmppIG5vdCBzdXBwb3J0ZWQgeWV0ICovCi0gICAg aWYgKGZjc2luZm9bY3MxXS5hbHBoYWJldCA9PSBBTF9KQVBBTiB8fAotICAgICAgICBmY3NpbmZv W2NzMl0uYWxwaGFiZXQgPT0gQUxfSkFQQU4gKQotICAgICAgdGNzID0gVENfVFJBTlNQOwotICAg IGVsc2UKLSNlbmRpZiAvKiBLQU5KSSAqLwotI2lmZGVmIENZUklMTElDCi0vKgotICBJIGNhbid0 IHJlbWVtYmVyIHdoeSB3ZSBkb24ndCB0ZXN0IGJvdGggc2V0cyBoZXJlLCBidXQgSSB0aGluayB0 aGVyZQotICBtdXN0IGhhdmUgYmVlbiBhIHJlYXNvbi4uLgotKi8KLSAgICAgIGlmIChmY3NpbmZv W2NzMl0uYWxwaGFiZXQgPT0gQUxfQ1lSSUwpCi0gICAgICAgIHRjcyA9IFRDX0NZUklMTDsKLSAg ICAgIGVsc2UKLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotI2lmZGVmIEhFQlJFVwotICAgICAgICAg IGlmIChmY3NpbmZvW2NzMV0uYWxwaGFiZXQgPT0gQUxfSEVCUkVXIHx8Ci0gICAgICAgICAgICAg IGZjc2luZm9bY3MyXS5hbHBoYWJldCA9PSBBTF9IRUJSRVcgKQotICAgICAgICAgICAgdGNzID0g VENfSEVCUkVXOwotICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBIRUJSRVcgKi8KLSNpZmRlZiBH UkVFSwotICAgICAgICAgIGlmIChmY3NpbmZvW2NzMV0uYWxwaGFiZXQgPT0gQUxfR1JFRUsgfHwK LSAgICAgICAgICAgICAgZmNzaW5mb1tjczJdLmFscGhhYmV0ID09IEFMX0dSRUVLICkKLSAgICAg ICAgICAgIHRjcyA9IFRDX0dSRUVLOwotICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBHUkVFSyAq LwotCi0gICAgICAgICAgICAvKiBSb21hbiBzZXRzIC4uLiAqLwotCi0jaWZkZWYgTEFUSU4yICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRWFzdCBFdXJvcGVhbiAqLwotICAgICAgICBpZiAo Y3MxID09IEZDXzJMQVRJTiAgfHwgY3MyID09IEZDXzJMQVRJTiB8fCAvKiBMYXRpbi0yICovCi0g ICAgICAgICAgICBjczEgPT0gRkNfQ1A4NTIgICB8fCBjczIgPT0gRkNfQ1A4NTIgIHx8IC8qIENQ ODUyICovCi0gICAgICAgICAgICBjczEgPT0gRkNfQ1AxMjUwICB8fCBjczIgPT0gRkNfQ1AxMjUw IHx8IC8qIFdpbmRvd3MgTGF0aW4tMiAqLwotICAgICAgICAgICAgY3MxID09IEZDX01BWk9WSUEg fHwgY3MyID09IEZDX01BWk9WSUEpICAvKiBQb2xpc2ggTWF6b3ZpYSAqLwotICAgICAgICAgIHRj cyA9IFRDXzJMQVRJTjsKLSAgICAgICAgZWxzZQotI2VuZGlmIC8qIExBVElOMiAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlc3QgRXVyb3BlYW4gRXVyby1h d2FyZSAqLwotICAgICAgICAgIGlmIChjczEgPT0gRkNfQ1A4NTggfHwgY3MxID09IEZDXzlMQVRJ TiB8fAotICAgICAgICAgICAgICBjczIgPT0gRkNfQ1A4NTggfHwgY3MyID09IEZDXzlMQVRJTikK LSAgICAgICAgICAgIHRjcyA9IFRDXzlMQVRJTjsKLSAgICAgICAgICBlbHNlICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUcmFkaXRpb25hbCBXZXN0IEV1cm9wZWFuICovCi0gICAgICAgICAg ICB0Y3MgPSBUQ18xTEFUSU47Ci0gICAgcmV0dXJuKHRjcyk7Ci0jZW5kaWYgLyogTk9DU0VUUyAq LwotfQotCi0jaWZuZGVmIE5PTE9DQUwKLS8qICBEIE8gQyBPIE4gRSBDIFQgIC0tICBEbyB0aGUg Y29ubmVjdCBjb21tYW5kICAqLwotLyoKLSAgcSA9IDAgbWVhbnMgaXNzdWUgbm9ybWFsIGluZm9y bWF0aW9uYWwgbWVzc2FnZSBhYm91dCBob3cgdG8gZ2V0IGJhY2ssIGV0Yy4KLSAgcSAhPSAwIG1l YW5zIHRvIHNraXAgdGhlIG1lc3NhZ2UuCi0qLwotCi1pbnQKLWRvY29uZWN0KHEsYXN5bmMpIGlu dCBxLCBhc3luYzsgewotICAgIGludCB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJldHVybiBjb2RlICovCi0jaWZkZWYgQ0tfQVVUT0RMCi0gICAgZXh0ZXJuIENIQVIga3NidWZb XTsKLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSNpZm5kZWYgTk9LVkVSQlMgICAgICAgICAgICAg ICAgICAgICAgICAvKiBLZXlib2FyZCBtYWNybyBtYXRlcmlhbCAqLwotICAgIGV4dGVybiBpbnQg a2V5bWFjLCBrZXltYWN4OwotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0gICAgZXh0ZXJuIGludCBq dXN0b25lLCBhZGxfZXJyOwotICAgIGludCBxc2F2ZTsgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZvciByZW1lbWJlcmluZyAicXVpZXQiIHZhbHVlICovCi0jaWZkZWYgT1MyCi0gICAgZXh0 ZXJuIGludCB0ZXJtX2lvOwotICAgIGV4dGVybiBpbnQgZGlzcGxheV9kZW1vOwotICAgIGludCB0 ZXJtX2lvX3NhdmU7Ci0jaWZkZWYgS1VJCi0gICAgZXh0ZXJuIGludCBrdWlfYXN5bmM7Ci0jZW5k aWYgLyogS1VJICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgaW50IGlzX3RuID0gMDsKLQotI2lm ZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgaWYgKCFxdWlldCkKLSAgICAg ICAgICBwcmludGYoIj9Tb3JyeSwgSUtTRCBjYW5ub3QgQ09OTkVDVC5cclxuIik7Ci0gICAgICAg IHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotICAgIGlz X3RuID0KLSNpZmRlZiBUTkNPREUKLSAgICAgIChsb2NhbCAmJiBuZXR3b3JrICYmIElTX1RFTE5F VCgpKSB8fCAoIWxvY2FsICYmIHNzdGVsbmV0KQotI2Vsc2UKLSAgICAgICAgMAotI2VuZGlmIC8q IFROQ09ERSAqLwotICAgICAgICAgIDsKLS8qCi0gIFNhdmluZywgY2hhbmdpbmcsIGFuZCByZXN0 b3JpbmcgdGhlIGdsb2JhbCAicXVpZXQiIHZhcmlhYmxlIGFyb3VuZCBjYWxscwotICB0byBjb25l Y3QoKSB0byBjb250cm9sIHdoZXRoZXIgdGhlIHZlcmJvc2UgQ09OTkVDVCBtZXNzYWdlIGlzIHBy aW50ZWQgaXMKLSAgb2J2aW91c2x5IGxlc3MgZWxlZ2FudCB0aGFuIHBhc3NpbmcgYSBwYXJhbWV0 ZXIgdG8gY29uZWN0KCksIGJ1dCB3ZSBkbyBpdAotICB0aGlzIHdheSB0byBhdm9pZCB0aGUgbmVl ZCB0byBjaGFuZ2UgYWxsIG9mIHRoZSBjaz9jb24uYyBtb2R1bGVzLiAgTk9URToKLSAgaXQgaXMg aW1wb3J0YW50IHRvIHJlc3RvcmUgdGhlIHZhbHVlIGltbWVkaWF0ZWx5IHVwb24gcmV0dXJuIGlu IGNhc2UgdGhlcmUKLSAgaXMgYW4gYXV0b2Rvd25sb2FkIG9yIEFQQy4KLSovCi0gICAgcXNhdmUg PSBxdWlldDsgICAgICAgICAgICAgICAgICAgICAgLyogU2F2ZSBpdCAqLwotICAgIGlmICghcXVp ZXQgJiYgcSA+IC0xKQotICAgICAgcXVpZXQgPSBxOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFVzZSBhcmd1bWVudCB0ZW1wb3JhcmlseSAqLwotICAgIGNvbnJlcygpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFB1dCBjb25zb2xlIGJhY2sgdG8gbm9ybWFsICovCi0gICAgZGVidWco RjEwMSwiZG9jb25lY3QganVzdG9uZSAxIiwiIixqdXN0b25lKTsKLSNpZmRlZiBDS19BVVRPREwK LSAgICBrc2J1ZlswXSA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAvKiBBdXRvZG93bmxvYWQg cGFja2V0IGJ1ZmZlciAqLwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotI2lmZGVmIE9TMgotICAg IGRpc3BsYXlfZGVtbyA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRvIGRpc3Bs YXkgZGVtbyAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgSUtTX09QVElPTgotICAgIGlm IChpc190biAmJiBURUxPUFRfVShURUxPUFRfS0VSTUlUKSAmJiB0dGNoaygpID49IDAKLSNpZmRl ZiBPUzIKLSAgICAgICAmJiAhdmlld29ubHkKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgKSB7 Ci0gICAgICAgIC8qIElmIHRoZSByZW1vdGUgc2lkZSBpcyBpbiBhIHN0YXRlIG9mIElLUyBTVEFS VC1TRVJWRVIgICAgKi8KLSAgICAgICAgLyogd2UgcmVxdWVzdCB0aGF0IHRoZSBzdGF0ZSBiZSBj aGFuZ2VkLiAgV2Ugd2lsbCBkZXRlY3QgICAqLwotICAgICAgICAvKiBhIGZhaWx1cmUgdG8gYWRo ZXJlIHRvIHRoZSByZXF1ZXN0IHdoZW4gd2UgY2FsbCB0dGluYygpICovCi0gICAgICAgIGlmICgh aWtzX3dhaXQoS0VSTUlUX1JFUV9TVE9QLDApICYmICF0Y3BfaW5jb21pbmcpIHsKLSAgICAgICAg ICAgIGlmICghcXVpZXQpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIlxyXG5FbnRlciBDbGll bnQvU2VydmVyIE1vZGUuLi4gIFVzZTpcclxuXHJcbiIpOwotICAgICAgICAgICAgICAgIHByaW50 ZigKLSIgUkVNT1RFIExPR0lOIDx1c2VyPiA8cGFzc3dvcmQ+IHRvIGxvZyBpbiB0byB0aGUgc2Vy dmVyIGlmIG5lY2Vzc2FyeS5cclxuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgU0VORCBh bmQgR0VUIGZvciBmaWxlIHRyYW5zZmVyLlxyXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGYo IiBSRU1PVEUgY29tbWFuZHMgZm9yIGZpbGUgbWFuYWdlbWVudC5cclxuIik7Ci0gICAgICAgICAg ICAgICAgcHJpbnRmKCIgRklOSVNIIHRvIHRlcm1pbmF0ZSBDbGllbnQvU2VydmVyIG1vZGUuXHJc biIpOwotICAgICAgICAgICAgICAgIHByaW50ZigiIEJZRSB0byB0ZXJtaW5hdGUgYW5kIGNsb3Nl IGNvbm5lY3Rpb24uXHJcbiIpOwotICAgICAgICAgICAgICAgIHByaW50ZigiIFJFTU9URSBIRUxQ IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxyXG5cclxuIik7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBxdWlldCA9IHFzYXZlOwotICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgIC8q IEZhaWx1cmUgKi8KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIExldCBvdXIgcGVlciBrbm93 IG91ciBzdGF0ZS4gKi8KLSNpZmRlZiBDS19BVVRPREwKLSAgICBpZiAoaXNfdG4gJiYgVEVMT1BU X01FKFRFTE9QVF9LRVJNSVQpCi0jaWZkZWYgT1MyCi0gICAgICAgICYmICF2aWV3b25seQotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICAgKSB7Ci0gICAgICAgIGlmIChhdXRvZGwgJiYgIVRFTE9Q VF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpIHsKLSAgICAgICAgICAgIHRuX3Np a3MoS0VSTUlUX1NUQVJUKTsgICAgICAvKiBTZW5kIEtlcm1pdC1TZXJ2ZXIgU3RhcnQgKi8KLSAg ICAgICAgfSBlbHNlIGlmICghYXV0b2RsICYmIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJt aXQubWVfc3RhcnQpIHsKLSAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1NUT1ApOwotICAgICAg ICB9Ci0gICAgfQotI2Vsc2UgLyogQ0tfQVVUT0RMICovCi0gICAgaWYgKGlzX3RuICYmIFRFTE9Q VF9NRShURUxPUFRfS0VSTUlUKSAmJgotCVRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQu bWVfc3RhcnQpCi0gICAgICAgIHRuX3Npa3MoS0VSTUlUX1NUT1ApOwotI2VuZGlmIC8qIENLX0FV VE9ETCAqLwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLQotICAgIGRlYnVnKEYxMDEsImRvY29u ZWN0IGZsb3ciLCIiLGZsb3cpOwotI2lmZGVmIE9TMgotICAgIGRlYnVnKEYxMDEsImRvY29uZWN0 IGFzeW5jIiwiIixhc3luYyk7Ci0jaWZkZWYgS1VJCi0gICAgaWYgKGt1aV9hc3luYykKLSAgICAg IGFzeW5jID0gMTs7Ci0jZW5kaWYgLyogS1VJICovCi0gICAgeCA9IGNvbmVjdChhc3luYyk7ICAg ICAgICAgICAgICAgICAgLyogQ29ubmVjdCB0aGUgZmlyc3QgdGltZSAqLwotI2Vsc2UgLyogT1My ICovCi0gICAgeCA9IGNvbmVjdCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIGRlYm9rID0gMTsK LQotI2lmZGVmIElLU19PUFRJT04KLSAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkgJiYK LSAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ICYmCi0gICAg ICAgICF0Y3BfaW5jb21pbmcgJiYgIXF1aWV0ICYmIHR0Y2hrKCkgPj0gMAotICAgICAgICApIHsK LSAgICAgICAgcHJpbnRmKCJcclxuRW50ZXIgQ2xpZW50L1NlcnZlciBNb2RlLi4uICBVc2U6XHJc blxyXG4iKTsKLSAgICAgICAgcHJpbnRmKAotIiBSRU1PVEUgTE9HSU4gPHVzZXI+IDxwYXNzd29y ZD4gdG8gbG9nIGluIHRvIHRoZSBzZXJ2ZXIgaWYgbmVjZXNzYXJ5LlxyXG4iKTsKLSAgICAgICAg cHJpbnRmKCIgU0VORCBhbmQgR0VUIGZvciBmaWxlIHRyYW5zZmVyLlxyXG4iKTsKLSAgICAgICAg cHJpbnRmKCIgUkVNT1RFIGNvbW1hbmRzIGZvciBmaWxlIG1hbmFnZW1lbnQuXHJcbiIpOwotICAg ICAgICBwcmludGYoIiBGSU5JU0ggdG8gdGVybWluYXRlIENsaWVudC9TZXJ2ZXIgbW9kZS5cclxu Iik7Ci0gICAgICAgIHByaW50ZigiIEJZRSB0byB0ZXJtaW5hdGUgYW5kIGNsb3NlIGNvbm5lY3Rp b24uXHJcbiIpOwotICAgICAgICBwcmludGYoIiBSRU1PVEUgSEVMUCBmb3IgYWRkaXRpb25hbCBp bmZvcm1hdGlvbi5cclxuXHJcbiIpOwotICAgIH0KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0K LSAgICBxdWlldCA9IHFzYXZlOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlICJxdWll dCIgdmFsdWUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVjdCBqdXN0b25lIDIiLCIiLGp1c3Rv bmUpOwotCi0jaWZkZWYgTkVUQ09OTgotICAgIGlmIChuZXR3b3JrICYmIHRuX2V4aXQgJiYgdHRj aGsoKSA8IDApCi0gICAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7ICAgICAgICAgLyogRXhp dCB3aXRoIGdvb2Qgc3RhdHVzICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0jaWZkZWYgT1My T1JVTklYCi0gICAgLyogRXhpdCBvbiBkaXNjb25uZWN0IGlmIHRoZSBwb3J0IGlzIG5vdCBvcGVu IG9yIGNhcnJpZXIgZGV0ZWN0ICovCi0gICAgaWYgKGV4aXRvbmNsb3NlICYmICh0dGNoaygpIDwg MCkpCi0gICAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7Ci0jZW5kaWYgLyogT1MyT1JVTklY ICovCi0KLSNpZmRlZiBDS0NPTklOVEI0Q0IKLSAgICAvKiBUaGUgb3JkZXIgbWFrZXMgYSBkaWZm ZXJlbmNlIGluIEhQLVVYIDguMDAuICovCi0gICAgLyogVGhlIG90aGVyIG9yZGVyIG1ha2VzIGl0 IHRoaW5rIGl0J3MgaW4gdGhlIGJhY2tncm91bmQgd2hlbiBpdCAqLwotICAgIC8qIHJldHVybnMg ZnJvbSBDT05ORUNUIChBcHIgMTk5OSkuICovCi0gICAgc2V0aW50KCk7Ci0gICAgY29uY2IoKGNo YXIpZXNjYXBlKTsgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBjb25zb2xlIGZvciBjb21tYW5k cyAqLwotI2Vsc2UKLSAgICAvKiBUaGlzIGlzIGhvdyBpdCBoYXMgYWx3YXlzIGJlZW4gc28gYmV0 dGVyIGxlYXZlIGl0ICovCi0gICAgLyogdGhpcyB3YXkgZm9yIGFsbCBub24tSFAtVVgtOC4wMCBi dWlsZHMuICovCi0gICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAgICAgLyogUmVz dG9yZSBjb25zb2xlIGZvciBjb21tYW5kcyAqLwotICAgIHNldGludCgpOwotI2VuZGlmIC8qIENL Q09OSU5UQjRDQiAqLwotCi0jaWZkZWYgT1MyCi0gICAgaWYgKCFhc3luYykgewotICAgICAgICB0 ZXJtX2lvX3NhdmUgPSB0ZXJtX2lvOyAgICAgICAgIC8qIERpc2FibGUgSS9PIGJ5IGVtdWxhdG9y ICovCi0gICAgICAgIHRlcm1faW8gPSAwOwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgQ0tf QVBDCi0vKgotICBJZiBhbiBBUEMgY29tbWFuZCB3YXMgcmVjZWl2ZWQgZHVyaW5nIENPTk5FQ1Qg bW9kZSwgd2UgZGVmaW5lIGl0IG5vdwotICBhcyBhIG1hY3JvLCBleGVjdXRlIHRoZSBtYWNybywg YW5kIHRoZW4gcmV0dXJuIHRvIENPTk5FQ1QgbW9kZS4KLSAgV2UgZG8gdGhpcyBpbiBhIFdISUxF IGxvb3AgaW4gY2FzZSBhZGRpdGlvbmFsIEFQQ3MgY29tZSBkdXJpbmcgc3Vic2VxdWVudAotICBD T05ORUNUIHNlc3Npb25zLgotKi8KLSAgICAgICAgZGVidWcoRjEwMSwiZG9jb25lY3QgYXBjYWN0 aXZlIiwiIixhcGNhY3RpdmUpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVjdCBzdWNjZXNz IiwiIixzdWNjZXNzKTsKLQotICAgICAgICB3aGlsZSAoeCA+IDAgJiYgKGFwY2FjdGl2ZSA9PSBB UENfTE9DQUwgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoYXBjYWN0aXZlID09IEFQQ19S RU1PVEUgJiYgYXBjc3RhdHVzICE9IEFQQ19PRkYpKSkgewotICAgICAgICAgICAgZGVidWcoRjEw MSwiZG9jb25lY3QganVzdG9uZSAzIiwiIixqdXN0b25lKTsKLSAgICAgICAgICAgIGlmIChtbG9v ayhtYWN0YWIsIl9hcGNfY29tbWFuZHMiLG5tYWMpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAg ZGVidWcoRjExMCwiZG9jb25lY3QgYWJvdXQgdG8gZXhlY3V0ZSBBUEMiLGFwY2J1ZiwwKTsKLSAg ICAgICAgICAgICAgICBkb21hYygiX2FwY19jb21tYW5kcyIsYXBjYnVmLGNtZHN0a1tjbWRsdmxd LmNjZmxnc3xDRl9BUEMpOwotICAgICAgICAgICAgICAgIGRlbG1hYygiX2FwY19jb21tYW5kcyIs MSk7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg ZGVidWcoRjEwMCwiZG9jb25lY3QgQVBDIGluIHByb2dyZXNzIiwiIiwwKTsKLSNlbmRpZiAvKiBE RUJVRyAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9jb25lY3Qg YXBjYWN0aXZlIGFmdGVyIGRvbWFjIiwiIixhcGNhY3RpdmUpOwotICAgICAgICAgICAgaWYgKCFh cGNhY3RpdmUpIHsgICAgICAgICAgICAgICAvKiBJbiBjYXNlIENMRUFSIEFQQyB3YXMgaW4gQVBD ICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9jb25lY3QgcXVpdCBBUEMgbG9vcDog YXBjYWN0aXZlIiwiIixhcGNhY3RpdmUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgLyogQWxzbyBkb24ndCByZWNvbm5lY3QgaWYgYXV0b2Rvd25s b2FkIGZhaWxlZCAtIHZlcnkgY29uZnVzaW5nISAqLwotICAgICAgICAgICAgLyogTGV0IHRoZW0g dmlldyB0aGUgbG9jYWwgc2NyZWVuIHRvIHNlZSB3aGF0IGhhcHBlbmVkLiAtIGZkYyAqLwotCi0g ICAgICAgICAgICAvKiBUaGlzIHNob3VsZCBiZSBjb25kaXRpb25hbC4gIElmIHNvbWVvbmUgaXMg cmVseWluZyBvbiB0aGUgKi8KLSAgICAgICAgICAgIC8qIGNvbm5lY3QgbW9kZSBhdXRvZG93bmxv YWQgZm9yIHRoZSBrZXJtaXQgc2VydmVyIHRvIHVzZSB3aXRoICovCi0gICAgICAgICAgICAvKiBh IHJlbW90ZWx5IGV4ZWN1dGVkIHNjcmlwdCB3ZSBzaG91bGQgYmUgYWJsZSB0byByZXR1cm4gdG8g Ki8KLSAgICAgICAgICAgIC8qIGNvbm5lY3QgbW9kZSBvbiB0aGUgZmFpbHVyZS4gIFdoYXQgd2Ug cmVhbGx5IG5lZWQgdG8gZG8gaXMgKi8KLSAgICAgICAgICAgIC8qIHJlcG9ydCB0aGUgc3RhdHVz IG9mIHRoZSB0cmFuc2ZlciBhbmQgdGhlbiByZXR1cm4gdG8gQ09OTkVDVC4gKi8KLSAgICAgICAg ICAgIC8qIEluIHVuaXggdGhpcyB3b3VsZCBzaW1wbHkgYmUgYSBwcmludGYoKSwgYnV0IGluIEs5 NSBpdCBjb3VsZCAqLwotICAgICAgICAgICAgLyogdXNlIGEgcG9wdXAgZGlhbG9nIHRvIHJlcG9y dCB0aGUgc3RhdHVzLiAtIEplZmYgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICAgICAgICAgIGRl YnVnKEYxMDEsImRvY29uZWN0IHhmZXJzdGF0IiwiIix4ZmVyc3RhdCk7Ci0gICAgICAgICAgICBp ZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCAmJiAheGZlcnN0YXQgJiYgYWRsX2VyciAhPSAwKSB7 Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9jb25lY3QgcXVpdCBBUEMgbG9vcDogeGZl cnN0YXQiLCIiLHhmZXJzdGF0KTsKLSAgICAgICAgICAgICAgICBhcGNhY3RpdmUgPSBBUENfSU5B Q1RJVkU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyog Tk9YRkVSICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICBtc2xlZXAoMjUwKTsKLSNlbmRpZiAv KiBPUzIgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvY29uZWN0IGp1c3RvbmUgNCIsIiIs anVzdG9uZSk7Ci0gICAgICAgICAgICBxc2F2ZSA9IHF1aWV0OyAgICAgICAgICAgICAgLyogRG8g dGhpcyBhZ2Fpbi4uLiAqLwotICAgICAgICAgICAgaWYgKCFxdWlldCAmJiBxID4gLTEpCi0gICAg ICAgICAgICAgIHF1aWV0ID0gcTsKLSNpZmRlZiBDS19BVVRPREwKLSAgICAgICAgICAgIGtzYnVm WzBdID0gTlVMOwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotI2lmZGVmIElLU19PUFRJT04KLSNp ZmRlZiBDS19BVVRPREwKLSAgICAgICAgICAgIGlmIChpc190biAmJgotICAgICAgICAgICAgICAg IFRFTE9QVF9NRShURUxPUFRfS0VSTUlUKSAmJgotICAgICAgICAgICAgICAgICFURUxPUFRfU0Io VEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0ICYmCi0gICAgICAgICAgICAgICAgYXV0b2Rs Ci0jaWZkZWYgQ0tfQVBDCi0gICAgICAgICAgICAgICAgJiYgIWFwY2FjdGl2ZQotI2VuZGlmIC8q IENLX0FQQyAqLwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICYmICF2aWV3b25seQotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgIHRuX3Np a3MoS0VSTUlUX1NUQVJUKTsgIC8qIFNlbmQgS2VybWl0LVNlcnZlciBTdGFydCAqLwotICAgICAg ICAgICAgfQotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8K LSNpZm5kZWYgT1MyCi0gICAgICAgICAgICB4ID0gY29uZWN0KCk7ICAgICAgICAgICAgICAgLyog UmUtQ09OTkVDVC4gKi8KLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICAgICAgeCA9IGNvbmVjdCgw KTsKLSAgICAgICAgICAgIHRlcm1faW8gPSB0ZXJtX2lvX3NhdmU7Ci0jZW5kaWYgLyogT1MyICov Ci0gICAgICAgICAgICBkZWJvayA9IDE7Ci0gICAgICAgICAgICBxdWlldCA9IHFzYXZlOwotICAg ICAgICAgICAgZGVidWcoRjEwMSwiZG9jb25lY3QganVzdG9uZSA1IiwiIixqdXN0b25lKTsKLSNp ZmRlZiBORVRDT05OCi0gICAgICAgICAgICBpZiAobmV0d29yayAmJiB0dGNoaygpIDwgMCkgewot ICAgICAgICAgICAgICAgIGlmICh0bl9leGl0IHx8IGV4aXRvbmNsb3NlKQotICAgICAgICAgICAg ICAgICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5FVENPTk4g Ki8KLQotI2lmZGVmIE9TMk9SVU5JWAotICAgICAgICAgICAgLyogSWYgY29ubmVjdGlvbiBkcm9w cGVkICovCi0gICAgICAgICAgICBpZiAodHRjaGsoKSA8IDApIHsKLSAgICAgICAgICAgICAgICBj b25jYigoY2hhcillc2NhcGUpOyAgICAvKiBSZXN0b3JlIGNvbnNvbGUuICovCi0gICAgICAgICAg ICAgICAgaWYgKGV4aXRvbmNsb3NlKQotICAgICAgICAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJ VCx4aXRzdGEpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotICAgICAgICB9IC8qIExv b3AgYmFjayBmb3IgbW9yZS4gKi8KLSNlbmRpZiAvKiBDS19BUEMgKi8KLQotI2lmbmRlZiBOT0tW RVJCUwotICAgICAgICBpZiAoKGtleW1hYyA+IDApICYmIChrZXltYWN4ID4gLTEpKSB7IC8qIEV4 ZWN1dGluZyBhIGtleWJvYXJkIG1hY3JvPyAqLwotICAgICAgICAgICAgLyogU2V0IHVwIHRoZSBt YWNybyBhbmQgcmV0dXJuICovCi0gICAgICAgICAgICAvKiBEbyBub3QgY2xlYXIgdGhlIGtleW1h YyBmbGFnICovCi0jaWZkZWYgT1MyCi0JICAgIHRlcm1faW8gPSB0ZXJtX2lvX3NhdmU7Ci0jZW5k aWYgLyogT1MyICovCi0gICAgICAgICAgICByZXR1cm4oZG9kbyhrZXltYWN4LE5VTEwsQ0ZfS01B Q3xjbWRzdGtbY21kbHZsXS5jY2ZsZ3MpKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE5PS1ZFUkJT ICovCi0jaWZkZWYgT1MyCi0gICAgICAgIHRlcm1faW8gPSB0ZXJtX2lvX3NhdmU7Ci0gICAgfSAv KiBpZiAoIWFzeW5jKSAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgQ0tDT05JTlRCNENC Ci0gICAgLyogVGhlIG9yZGVyIG1ha2VzIGEgZGlmZmVyZW5jZSBpbiBIUC1VWCA4LjAwLiAqLwot ICAgIC8qIFRoZSBvdGhlciBvcmRlciBtYWtlcyBpdCB0aGluayBpdCdzIGluIHRoZSBiYWNrZ3Jv dW5kIHdoZW4gaXQgKi8KLSAgICAvKiByZXR1cm5zIGZyb20gQ09OTkVDVCAoQXByIDE5OTkpLiAq LwotICAgIHNldGludCgpOwotICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgICAg IC8qIFJlc3RvcmUgY29uc29sZSBmb3IgY29tbWFuZHMgKi8KLSNlbHNlCi0gICAgLyogVGhpcyBp cyBob3cgaXQgaGFzIGFsd2F5cyBiZWVuIHNvIGJldHRlciBsZWF2ZSBpdCAqLwotICAgIC8qIHRo aXMgd2F5IGZvciBhbGwgbm9uLUhQLVVYLTguMDAgYnVpbGRzLiAqLwotICAgIGNvbmNiKChjaGFy KWVzY2FwZSk7ICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgY29uc29sZSBmb3IgY29tbWFuZHMg Ki8KLSAgICBzZXRpbnQoKTsKLSNlbmRpZiAvKiBDS0NPTklOVEI0Q0IgKi8KLSNpZmRlZiBPUzIK LSAgICBpZiAoIWFzeW5jKQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgd2hhdCA9IFdfQ09NTUFO RDsgICAgICAgICAgICAgICAgIC8qIEJhY2sgaW4gY29tbWFuZCBtb2RlLiAqLwotICAgIHJldHVy bih4KTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbmUuICovCi19Ci0jZW5kaWYgLyog Tk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PSUNQCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgSXQgc2Vl bWVkIHRoYXQgdGhpcyB3YXMgbmVlZGVkIGZvciBPUy8yLCBpbiB3aGljaCBcdihjbWRmaWxlKSBh bmQgb3RoZXIKLSAgZmlsZS1vcmllbnRlZCB2YXJpYWJsZXMgb3IgZnVuY3Rpb25zIGNhbiByZXR1 cm4gZmlsZW5hbWVzIGNvbnRhaW5pbmcKLSAgYmFja3NsYXNoZXMsIHdoaWNoIGFyZSBzdWJzZXF1 ZW50bHkgaW50ZXJwcmV0ZWQgYXMgcXVvdGVzIHJhdGhlciB0aGFuCi0gIGRpcmVjdG9yeSBzZXBh cmF0b3JzIChlLmcuIHNlZSBjb21tZW50ZWQgc2VjdGlvbiBmb3IgVk5fQ01ERiBiZWxvdykuCi0g IEJ1dCB0aGUgcHJvYmxlbSBjYW4ndCBiZSBjdXJlZCBhdCB0aGlzIGxldmVsLiAgRXhhbXBsZToK LQotICAgIHR5cGUgXHYoY21kZmlsZSkKLQotICBXaXRob3V0IGRvdWJsaW5nLCB0aGUgZmlsZW5h bWUgaXMgcGFyc2VkIGNvcnJlY3RseSwgYnV0IHRoZW4gd2hlbiBwYXNzZWQKLSAgdG8gVU5JWCAn Y2F0JyB0aHJvdWdoIHRoZSBzaGVsbCwgdGhlIGJhY2tzbGFzaCBpcyByZW1vdmVkLCBhbmQgdGhl biBjYXQKLSAgY2FuJ3Qgb3BlbiB0aGUgZmlsZS4gIFdpdGggZG91YmxpbmcsIHRoZSBmaWxlbmFt ZSBpcyBub3QgcGFyc2VkIGNvcnJlY3RseQotICBhbmQgdGhlIFRZUEUgY29tbWFuZCBmYWlscyBp bW1lZGlhdGVseSB3aXRoIGEgImZpbGUgbm90IGZvdW5kIiBlcnJvci4KLSovCi0vKgotICBVdGls aXR5IHJvdXRpbmUgdG8gZG91YmxlIGFsbCBiYWNrc2xhc2hlcyBpbiBhIHN0cmluZy4KLSAgczEg aXMgcG9pbnRlciB0byBzb3VyY2Ugc3RyaW5nLCBzMiBpcyBwb2ludGVyIHRvIGRlc3RpbmF0aW9u IHN0cmluZywKLSAgbiBpcyBsZW5ndGggb2YgZGVzdGluYXRpb24gc3RyaW5nLCBib3RoIE5VTC10 ZXJtaW5hdGVkLgotICBSZXR1cm5zIDAgaWYgT0ssIC0xIGlmIG5vdCBPSyAoZGVzdGluYXRpb24g c3RyaW5nIHRvbyBzaG9ydCkuCi0qLwotaW50Ci1kYmxicyhzMSxzMixuKSBjaGFyICpzMSwgKnMy OyBpbnQgbjsgewotICAgIGludCBpID0gMDsKLSAgICB3aGlsZSAoKnMxKSB7Ci0gICAgICAgIGlm ICgqczEgPT0gJ1xcJykgewotICAgICAgICAgICAgaWYgKCsraSA+IG4pIHJldHVybigtMSk7Ci0g ICAgICAgICAgICAqczIrKyA9ICdcXCc7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCsraSA+IG4p IHJldHVybigtMSk7Ci0gICAgICAgICpzMisrID0gKnMxKys7Ci0gICAgfQotICAgICpzMiA9IE5V TDsKLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi1jaGFyICoKLWdt ZG10eXAoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgbW9kZW0gdHlwZSAq LwotI2lmbmRlZiBOT0RJQUwKLSAgICBpbnQgaSwgeDsKLQotICAgIGRlYnVnKEYxMTEsImdtZG10 eXAiLCJtZG10eXAiLG1kbXR5cCk7Ci0gICAgZGVidWcoRjExMSwiZ21kbXR5cCIsIm1kbXNhdiIs bWRtc2F2KTsKLQotICAgIHggPSBtZG10eXA7Ci0gICAgaWYgKHggPCAwKSAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogSW4gY2FzZSBvZiBuZXR3b3JrIGRpYWxpbmcgKi8KLSAgICAgIHggPSBt ZG1zYXY7Ci0gICAgaWYgKHggPCAxKQotICAgICAgcmV0dXJuKCJub25lIik7Ci0gICAgZWxzZQot ICAgICAgZm9yIChpID0gMDsgaSA8IG5tZG07IGkrKykKLSAgICAgICAgaWYgKChtZG10YWJbaV0u a3d2YWwgPT0geCkgJiYgKG1kbXRhYltpXS5mbGdzID09IDApKQotICAgICAgICAgIHJldHVybiht ZG10YWJbaV0ua3dkKTsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSAgICByZXR1cm4oIm5vbmUiKTsK LX0KLQotI2lmbmRlZiBOT1hNSVQKLSNpZm5kZWYgTk9MT0NBTAotLyogIFQgUiBBIE4gUyBNIEkg VCAgLS0gIFJhdyB1cGxvYWQgICovCi0KLS8qICBPYmV5IGN1cnJlbnQgbGluZSwgZHVwbGV4LCBw YXJpdHksIGZsb3csIHRleHQvYmluYXJ5IHNldHRpbmdzLiAqLwotLyogIFJldHVybnMgMCB1cG9u IGFwcGFyZW50IHN1Y2Nlc3MsIDEgb24gb2J2aW91cyBmYWlsdXJlLiAgKi8KLQotLyoqKgotIFRo aW5ncyB0byBhZGQ6Ci0gLiBNYWtlIGJvdGggdGV4dCBhbmQgYmluYXJ5IG1vZGUgb2JleSBzZXQg ZmlsZSBieXRlc2l6ZS4KLSAuIE1heWJlIGFsbG93IHVzZXIgdG8gc3BlY2lmeSB0ZXJtaW5hdG9y cyBvdGhlciB0aGFuIENSPwotIC4gTWF5YmUgYWxsb3cgdXNlciB0byBzcGVjaWZ5IHByb21wdHMg b3RoZXIgdGhhbiBzaW5nbGUgY2hhcmFjdGVycz8KLSAuIE1ha2UgU1RBVElTVElDUyBhbHNvIHdv cmsgZm9yIFRSQU5TTUlULgotIC4gSWYgVFJBTlNNSVQgaXMgZG9uZSB3aXRob3V0IGVjaG8sIG1h a2Ugc29tZSBraW5kIG9mIChvcHRpb25hbCkgZGlzcGxheS4KLSAuIE1ha2UgdGhlIHNhbWUgb3B0 aW1pemF0aW9uIGZvciBiaW5hcnktbW9kZSB0cmFuc21pdCB0aGF0IHdhcyBkb25lIGZvcgotICAg dGV4dC1tb2RlIChpbiB0aGUgbm8tZWNobyAvIG5vLXByb21wdCAvIG5vLXBhdXNlIGNhc2UpLgot KioqLwotCi0vKiAgVCBSIEEgTiBTIE0gSSBUICAtLSAgUmF3IHVwbG9hZCAgKi8KLQotLyogIHMg aXMgdGhlIGZpbGVuYW1lLCB0IGlzIHRoZSB0dXJuYXJvdW5kIChwcm9tcHQpIGNoYXJhY3RlciAg Ki8KLQotLyoKLSAgTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBidWZmZXIuCi0gIE11 c3QgYmUgbGVzcyB0aGFuIExJTkJVRlNJWgotKi8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgWE1CVUZT IDQwOTYgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIFhZWm1v ZGVtICovCi0jZWxzZSAvKiBPUzIgKi8KLSNkZWZpbmUgWE1CVUZTIDEwMjQKLSNlbmRpZiAvKiBP UzIgKi8KLQotI2lmZGVmIFROQ09ERQotI2lmbmRlZiBJQUMKLSNkZWZpbmUgSUFDIDI1NQotI2Vu ZGlmIC8qIElBQyAqLwotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0jZGVmaW5lIE9VVFhCVUZTSVog MTUKLXN0YXRpYyBDSEFSIGlueGJ1ZltPVVRYQlVGU0laKzFdOyAgICAgICAvKiBIb3N0LXRvLXNj cmVlbiBleHBhbnNpb24gYnVmZmVyICovCi1zdGF0aWMgaW50IGlueGNvdW50ID0gMDsgICAgICAg ICAgICAgICAgLyogYW5kIGNvdW50ICovCi1zdGF0aWMgQ0hBUiBvdXR4YnVmW09VVFhCVUZTSVor MV07ICAgICAgLyogS2V5Ym9hcmQtdG8taG9zdCBleHBhbnNpb24gYnVmICovCi1zdGF0aWMgaW50 IG91dHhjb3VudCA9IDA7ICAgICAgICAgICAgICAgLyogYW5kIGNvdW50ICovCi0KLS8qICBUIFIg QSBOIFMgTSBJIFQgIC0tICBVbmd1YXJkZWQgbm9uLXByb3RvY29sIGZpbGUgdHJhbnNtaXNzaW9u ICAqLwotLyoKLSAgQ2FsbCB3aXRoOgotICAgIGNoYXIgKiBzOiAgIE5hbWUgb2YgZmlsZSB0byB0 cmFuc21pdC4KLSAgICBjaGFyIHQ6ICAgICBUdXJuYXJvdW5kIGNoYXIgZm9yIHRleHQtbW9kZSB0 cmFuc21pc3Npb24gKG5vcm1hbGx5IExGKS4KLSAgICBpbnQgeGxhdGU6ICBub256ZXJvID0gY2hh cnNldCB0cmFuc2xhdGlvbiBmb3IgdGV4dC1tb2RlIHhmZXIsIDAgPSBza2lwLgotICAgIGludCBi aW5hcnk6IG5vbnplcm8gPSB0cmFuc21pdCBpbiBiaW5hcnkgbW9kZSwgMCA9IGluIHRleHQgbW9k ZS4KLSovCi0jZGVmaW5lIFhCQlVGU0laIDUwOAkJCS8qIEZvciBiaW5hcnkgYmxhc3RpbmcgKi8K LXN0YXRpYyBDSEFSIHhiYnVmW1hCQlVGU0laKzRdOwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwot dHJhbnNtaXQoY2hhciAqIHMsIGNoYXIgdCwgaW50IHhsYXRlLCBpbnQgYmluYXJ5LCBpbnQgeHhl Y2hvKQotI2Vsc2UKLXRyYW5zbWl0KHMsdCx4bGF0ZSxiaW5hcnkseHhlY2hvKSBjaGFyICpzOyBj aGFyIHQ7IGludCB4bGF0ZSwgYmluYXJ5LCB4eGVjaG87Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LS8qIHRyYW5zbWl0ICovIHsKLSNpZmRlZiBNQUMKLSAgICBleHRlcm4gY2hhciBzc3RhdGU7Ci0g ICAgaW50IGNvdW50ID0gMTAwOwotI2Vsc2UKLSAgICBpbnQgY291bnQgPSAwOwotI2lmZGVmIE9T MgotI2lmZGVmIE5UCi0gICAgU0lHVFlQICgqIG9sZHNpZykoaW50KTsgICAgICAgICAgICAgLyog Rm9yIHNhdmluZyBvbGQgaW50ZXJydXB0IHRyYXAuICovCi0jZWxzZSAvKiBOVCAqLwotICAgIFNJ R1RZUCAoKiB2b2xhdGlsZSBvbGRzaWcpKGludCk7Ci0jZW5kaWYgLyogTlQgKi8KLQotI2Vsc2Ug LyogT1MyICovCi0gICAgU0lHVFlQICgqIG9sZHNpZykoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNl bmRpZiAvKiBNQUMgKi8KLSAgICBpbnQgZW9mID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAv KiBFbmQgb2YgRmlsZSBmbGFnICovCi0gICAgaW50IGVvbCA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogRW5kIG9mIExpbmUgZmxhZyAqLwotICAgIGludCByYyA9IDE7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFJldHVybiBjb2RlLiAwPWZhaWwsIDE9c3VjY2VlZC4gKi8KLSAgICBp bnQgbXlmbG93OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBjb3B5IG9mIGdsb2Jh bCBmbG93Li4uICovCi0gICAgaW50IGlzX3RuID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyog RG8gVGVsbmV0IG5lZ290aWF0aW9ucyAqLwotICAgIGludCB4YnVmc2l6ID0gWE1CVUZTOyAgICAg ICAgICAgICAgIC8qIFNpemUgb2YgVFJBTlNNSVQgYnVmZmVyICovCi0gICAgaW50IHgsIHksIGMs IGk7ICAgICAgICAgICAgICAgICAgICAgLyogSW50IHdvcmtlcnMuLi4gKi8KLSAgICBpbnQgY29u dHJvbCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBFY2hvIGxvb3AgY29udHJvbCAqLwotICAg IGxvbmcgbmJ5dGVzID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgYnl0ZSBjb3VudCAq LwotICAgIGxvbmcgeno7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvbmcgd29ya2Vy ICovCi0gICAgY2hhciAqcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhciAqIHdv cmtlciAqLwotCi0jaWZkZWYgUElQRVNFTkQKLSAgICBleHRlcm4gaW50IHBpcGVzZW5kOwotI2Vu ZGlmIC8qIFBJUEVTRU5EICovCi0KLSNpZm5kZWYgTk9DU0VUUwotICAgIGludCB0Y3MgPSBUQ19U UkFOU1A7ICAgICAgICAgICAgICAgIC8qIEludGVybWVkaWF0ZSAoeGZlcikgY2hhciBzZXQgKi8K LSAgICBpbnQgbGFuZ3N2ID0gTF9VU0FTQ0lJOyAgICAgICAgICAgICAvKiBTYXZlIGN1cnJlbnQg bGFuZ3VhZ2UgKi8KLSAgICBpbnQgdW5pY29kZSA9IDA7Ci0gICAgaW50IHRjc3NpemUgPSAwOwot Ci0jaWZkZWYgQ0tfQU5TSUMgLyogQU5TSSBDIHByb3RvdHlwZXMuLi4gKi8KLSAgICBDSEFSICgq c3hvKShDSEFSKTsKLSAgICBDSEFSICgqcnhvKShDSEFSKTsKLSAgICBDSEFSICgqc3hpKShDSEFS KTsKLSAgICBDSEFSICgqcnhpKShDSEFSKTsKLSNlbHNlIC8qIE5vdCBBTlNJIEMuLi4gKi8KLSAg ICBDSEFSICgqc3hvKSgpOwotICAgIENIQVIgKCpyeG8pKCk7Ci0gICAgQ0hBUiAoKnN4aSkoKTsK LSAgICBDSEFSICgqcnhpKSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0jaWZkZWYgVU5JQ09E RQotICAgIHVuaW9uIGNrX3Nob3J0IHVjOwotICAgIGludCBib21vcmRlciA9IDA7Ci0jaWZkZWYg Q0tfQU5TSUMKLSAgICBleHRlcm4gaW50ICgqeGxfdWZjW01BWEZDU0VUUysxXSkoVVNIT1JUKTsg IC8qIFVuaWNvZGUgdG8gRkNTICovCi0gICAgZXh0ZXJuIFVTSE9SVCAoKnhsX2ZjdVtNQVhGQ1NF VFMrMV0pKENIQVIpOyAvKiBGQ1MgdG8gVW5pY29kZSAqLwotICAgIGV4dGVybiBpbnQgKCp4dWYp KFVTSE9SVCk7Ci0gICAgZXh0ZXJuIFVTSE9SVCAoKnhmdSkoQ0hBUik7Ci0jZWxzZQotICAgIGV4 dGVybiBpbnQgKCp4bF91ZmNbTUFYRkNTRVRTKzFdKSgpOwotICAgIGV4dGVybiBVU0hPUlQgKCp4 bF9mY3VbTUFYRkNTRVRTKzFdKSgpOwotICAgIGV4dGVybiBpbnQgKCp4dWYpKCk7Ci0gICAgZXh0 ZXJuIFVTSE9SVCAoKnhmdSkoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotI2VuZGlmIC8qIFVO SUNPREUgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ4bWl0IHQi LCIiLHQpOwotICAgIGRlYnVnKEYxMDEsInhtaXQgeGxhdGUiLCIiLHhsYXRlKTsKLSAgICBkZWJ1 ZyhGMTAxLCJ4bWl0IGJpbmFyeSIsIiIsYmluYXJ5KTsKLQotI2lmZGVmIFBJUEVTRU5ECi0gICAg aWYgKHBpcGVzZW5kKSB7Ci0gICAgICAgIGlmIChub3B1c2gpIHJldHVybigtMik7Ci0gICAgICAg IGlmICh6eGNtZChaSUZJTEUscykgPCAxKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9DYW4ndCBz dGFydCBjb21tYW5kOiAlc1xuIixzKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAg fQotICAgIH0gZWxzZQotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0gICAgaWYgKHpvcGVuaShaSUZJ TEUscykgPT0gMCkgeyAgICAgICAgLyogT3BlbiB0aGUgZmlsZSB0byBiZSB0cmFuc21pdHRlZCAq LwotICAgICAgICBwcmludGYoIj9DYW4ndCBvcGVuIGZpbGUgJXNcbiIscyk7Ci0gICAgICAgIHJl dHVybigwKTsKLSAgICB9Ci0gICAgeCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogT3BlbiB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsICovCi0gICAgaWYgKHR0b3Blbih0dG5h bWUsJngsbWRtdHlwLGNkdGltbykgPCAwKSB7ICAvKiAobm8gaGFybSBpZiBhbHJlYWR5IG9wZW4p ICovCi0gICAgICAgIHByaW50ZigiQ2FuJ3Qgb3BlbiBkZXZpY2UgJXNcbiIsdHRuYW1lKTsKLSAg ICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICB6eiA9IHggPyBzcGVlZCA6IC0xTDsKLSAgICBp ZiAoYmluYXJ5KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBCaW5hcnkgZmlsZSB0cmFuc21p c3Npb24gKi8KLSAgICAgICAgbXlmbG93ID0gKGZsb3cgPT0gRkxPX1hPTlgpID8gRkxPX05PTkUg OiBmbG93OwotCi0gICAgICAgIGlmICh0dHZ0KHp6LG15ZmxvdykgPCAwKSB7ICAgICAgLyogU28g bm8gWG9uL1hvZmYhICovCi0gICAgICAgICAgICBwcmludGYoIkNhbid0IGNvbmRpdGlvbiBsaW5l XG4iKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g ICAgICAgIGlmICh0dHBrdCh6eixmbG93LHBhcml0eSkgPCAwKSB7IC8qIFB1dCB0aGUgbGluZSBp biAicGFja2V0IG1vZGUiICovCi0gICAgICAgICAgICBwcmludGYoIkNhbid0IGNvbmRpdGlvbiBs aW5lXG4iKTsgLyogc28gWG9uL1hvZmYgd2lsbCB3b3JrLCBldGMuICovCi0gICAgICAgICAgICBy ZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaXNfdG4gPQotI2lmZGVmIFROQ09ERQot ICAgICAgKGxvY2FsICYmIG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHx8ICghbG9jYWwgJiYgc3N0 ZWxuZXQpCi0jZWxzZQotICAgICAgICAwCi0jZW5kaWYgLyogVE5DT0RFICovCi0gICAgICAgICAg OwotCi0jaWZuZGVmIE5PQ1NFVFMKLS8qIFNldCB1cCBjaGFyYWN0ZXIgc2V0IHRyYW5zbGF0aW9u cyAqLwotCi0gICAgdGNzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIlRyYW5z ZmVyIiBvciAiT3RoZXIiIGNoYXJzZXQgKi8KLSAgICBzeG8gPSByeG8gPSBOVUxMOyAgICAgICAg ICAgICAgICAgICAvKiBJbml0aWFsaXplIGJ5dGUtdG8tYnl0ZSBmdW5jdGlvbnMgKi8KLSAgICBz eGkgPSByeGkgPSBOVUxMOwotICAgIHVuaWNvZGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIEFzc3VtZSBVbmljb2RlIHdvbid0IGJlIGludm9sdmVkICovCi0gICAgaWYgKCFiaW5hcnkg JiYgeGxhdGUpIHsgICAgICAgICAgICAgLyogU2V0IHVwIGNoYXJzZXQgdHJhbnNsYXRpb25zICov Ci0vKgotICBJbiB0aGUgU0VORElORyBkaXJlY3Rpb24sIHdlIGFyZSBjb252ZXJ0aW5nIGZyb20g dGhlIGxvY2FsIGZpbGUncwotICBjaGFyYWN0ZXItc2V0IChmY2hhcnNldCkgdG8gdGhlIHJlbW90 ZSB0ZXJtaW5hbCBjaGFyc2V0ICh0Y3NyKS4gIEluIHRoZQotICBSRUNFSVZJTkcgZGlyZWN0aW9u IChlY2hvaW5nKSB3ZSBhcmUgY29udmVydGluZyBmcm9tIHRoZSByZW1vdGUgZW5kIG9mIHRoZQot ICB0ZXJtaW5hbCBjaGFyc2V0ICh0Y3NyKSB0byBpdHMgbG9jYWwgZW5kICh0Y3NsKSwgd2hpY2gg aXMgbm90IG5lY2Vzc2FyaWx5Ci0gIHRoZSBzYW1lIGFzIHRoZSBmaWxlIGNoYXJhY3Rlci1zZXQu ICBFc3BlY2lhbGx5IHdoZW4gdGhlIGZpbGUgY2hhcmFjdGVyCi0gIHNldCBpcyBVQ1MtMiwgd2hp Y2ggaXMgbm90IGEgdmFsaWQgdGVybWluYWwgY2hhcmFjdGVyIHNldC4gIFRoZSB2YXJpb3VzCi0g IGNvbWJpbmF0aW9ucyBhcmUgcmVwcmVzZW50ZWQgaW4gdGhpcyB0YWJsZToKLQotICBGQ1MgPSBG aWxlIENoYXJhY3RlciBTZXQKLSAgUkNTID0gUmVtb3RlIFRlcm1pbmFsIENoYXJhY3RlciBTZXQK LSAgQ0NTID0gQ29uc29sZSAoTG9jYWwgVGVybWluYWwpIENoYXJhY3RlciBTZXQKLQotICAgOCAg IDQgICAyICAgMQotICBGQ1MgRkNTIFJDUyBDQ1MKLSAgVUNTIFVURiBVVEYgVVRGCi0gICAwICAg MCAgIDAgICAwICAgPSAgIDAgICA9ICAgTm8gdHJhbnNsYXRpb24KLSAgIDAgICAwICAgMCAgIDEg ICA9ICAgMSAgID0gICBGQ1MgLT4gUkNTLCBFY2hvIFJDUyAtPiBVVEYKLSAgIDAgICAwICAgMSAg IDAgICA9ICAgMiAgID0gICBGQ1MgLT4gVVRGLCBFY2hvIFVURiAtPiBDQ1MKLSAgIDAgICAwICAg MSAgIDEgICA9ICAgMyAgID0gICBGQ1MgLT4gVVRGLCBFY2hvIG5vIHRyYW5zbGF0aW9uCi0KLSAg IDAgICAxICAgMCAgIDAgICA9ICAgNCAgID0gICBVVEYgLT4gUkNTLCBFY2hvIFJDUyAtPiBDQ1MK LSAgIDAgICAxICAgMCAgIDEgICA9ICAgNSAgID0gICBVVEYgLT4gUkNTLCBFY2hvIFJDUyAtPiBV VEYKLSAgIDAgICAxICAgMSAgIDAgICA9ICAgNiAgID0gICBVVEYgLT4gVVRGLCBFY2hvIFVURiAt PiBDQ1MKLSAgIDAgICAxICAgMSAgIDEgICA9ICAgNyAgID0gICBObyB0cmFuc2xhdGlvbgotCi0g ICAxICAgMCAgIDAgICAwICAgPSAgIDggICA9ICAgVUNTIC0+IFJDUywgRWNobyBSQ1MgLT4gQ0NT Ci0gICAxICAgMCAgIDAgICAxICAgPSAgIDkgICA9ICAgVUNTIC0+IFJDUywgRWNobyBSQ1MgLT4g VVRGCi0gICAxICAgMCAgIDEgICAwICAgPSAgMTAgICA9ICAgVUNTIC0+IFVURiwgRWNobyBVVEYg LT4gQ0NTCi0gICAxICAgMCAgIDEgICAxICAgPSAgMTEgICA9ICAgVUNTIC0+IFVURiwgRWNobyBu byB0cmFuc2xhdGlvbgotKi8KLSNpZmRlZiBVTklDT0RFCi0gICAgICAgIHhmdSA9IE5VTEw7ICAg ICAgICAgICAgICAgICAgICAgLyogVW5pY29kZSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgKi8KLSAg ICAgICAgeHVmID0gTlVMTDsKLSAgICAgICAgYm9tb3JkZXIgPSB1Y3NvcmRlcjsgICAgICAgICAg ICAvKiBVQ1MtMiBieXRlIG9yZGVyICovCi0KLSAgICAgICAgaWYgKGZjaGFyc2V0ID09IEZDX1VD UzIpICAgICAgICAvKiBGaWxlIGNoYXJzZXQgaXMgVUNTLTIgKi8KLSAgICAgICAgICB1bmljb2Rl IHw9IDg7Ci0gICAgICAgIGVsc2UgaWYgKGZjaGFyc2V0ID09IEZDX1VURjgpICAgLyogRmlsZSBj aGFyc2V0IGlzIFVURi04ICovCi0gICAgICAgICAgdW5pY29kZSB8PSA0OwotICAgICAgICBpZiAo dGNzciA9PSBGQ19VVEY4KSAgICAgICAgICAgIC8qIFJlbW90ZSB0ZXJtIGNoYXJzZXQgaXMgVVRG LTggKi8KLSAgICAgICAgICB1bmljb2RlIHw9IDI7Ci0gICAgICAgIGlmICh0Y3NsID09IEZDX1VU RjgpICAgICAgICAgICAgLyogTG9jYWwgdGVybSBjaGFyc2V0IGlzIFVURi04ICovCi0gICAgICAg ICAgdW5pY29kZSB8PSAxOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLS8qCi0gIFdoZW4gVW5pY29k ZSBub3QgaW52b2x2ZWQgLS0gVENTIGlzIHRoZSBpbnRlcm1lZGlhdGUgKHhmZXIpIHNldCwgYW5k OgotICBzeG8gPSBGaWxlLXRvLUludGVybWVkaWF0ZSBjaGFyc2V0IGZ1bmN0aW9uCi0gIHJ4byA9 IEludGVybWVkaWF0ZS10by1SZW1vdGUtVGVybWluYWwgY2hhcnNldCBmdW5jdGlvbgotICBzeGkg PSBSZW1vdGUtVGVybWluYWwtdG8tSW50ZXJtZWRpYXRlCi0gIHJ4aSA9IEludGVybWVkaWF0ZS10 by1Mb2NhbC1UZXJtaW5hbAotKi8KLSAgICAgICAgdGNzID0gZ2V0dGNzKHRjc3IsZmNoYXJzZXQp OyAgICAvKiBHZXQgaW50ZXJtZWRpYXRlIHNldC4gKi8KLSAgICAgICAgc3hvID0geGxzW3Rjc11b ZmNoYXJzZXRdOyAgICAgICAvKiB0cmFuc2xhdGlvbiBmdW5jdGlvbiAqLwotICAgICAgICByeG8g PSB4bHJbdGNzXVt0Y3NyXTsgICAgICAgICAgIC8qIHBvaW50ZXJzIGZvciBvdXRwdXQgZnVuY3Rp b25zICovCi0gICAgICAgIHN4aSA9IHhsc1t0Y3NdW3Rjc3JdOyAgICAgICAgICAgLyogYW5kIGZv ciBpbnB1dCBmdW5jdGlvbnMuICovCi0gICAgICAgIHJ4aSA9IHhsclt0Y3NdW3Rjc2xdOwotLyoK LSAgQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHVuaWNvZGUgbm9uemVybyBpZiBVbmljb2RlIGlzIGlu dm9sdmVkIGluIHRoZQotICBjb252ZXJzaW9uLCBhbmQgdG8gMCBpZiBpdCBpcyBub3QuCi0gIFRo ZSBmb2xsb3dpbmcgaXMgdG8gcHJldmVudCB1c2Ugb2Ygem1zdHVmZigpIGFuZCB6ZHN0dWZmKCkg YnkgdHJhbnNsYXRpb24KLSAgZnVuY3Rpb25zIChzdHVmZmluZyB3b3JrcyB3aXRoIGZpbGUgaS9v LCBub3Qgd2l0aCBjb21tdW5pY2F0aW9uIGkvbykuCi0qLwotICAgICAgICBsYW5nc3YgPSBsYW5n dWFnZTsgICAgICAgICAgICAgIC8qIFNhdmUgY3VycmVudCBTRVQgTEFOR1VBR0UgKi8KLSAgICAg ICAgbGFuZ3VhZ2UgPSBMX1VTQVNDSUk7ICAgICAgICAgICAvKiBObyBsYW5ndWFnZS1zcGVjaWZp YyB0cmFuc2xhdGlvbnMgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0gICAgaSA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmVnaW5uaW5nIG9mIGJ1ZmZlci4g Ki8KLSNpZm5kZWYgTUFDCi0jaWZuZGVmIEFNSUdBCi0gICAgb2xkc2lnID0gc2lnbmFsKFNJR0lO VCwgdHJ0cmFwKTsgICAgLyogU2F2ZSBjdXJyZW50IGludGVycnVwdCB0cmFwLiAqLwotI2VuZGlm IC8qIEFNSUdBICovCi0jZW5kaWYgLyogTUFDICovCi0gICAgdHJfaW50ID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogSGF2ZSBub3QgYmVlbiBpbnRlcnJ1cHRlZCAoeWV0KS4gKi8KLSAg ICByYyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gY29kZSBwcmVz dW1lZCBnb29kLiAqLwotI2lmZGVmIFZNUwotICAgIGNvbnJlcygpOwotI2VuZGlmIC8qIFZNUyAq LwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICBkZWJ1ZyhGMTAxLCJYTUlUIHVuaWNvZGUiLCIiLHVu aWNvZGUpOwotI2lmZGVmIFVOSUNPREUKLSAgICBkZWJ1ZyhGMTAxLCJYTUlUIGJvbW9yZGVyIiwi Iixib21vcmRlcik7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8K LQotICAgIGMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgY29u ZGl0aW9uICovCi0gICAgd2hpbGUgKGMgPiAtMSAmJiAhZW9mKSB7ICAgICAgICAgICAgLyogTG9v cCBmb3IgYWxsIGNoYXJhY3RlcnMgaW4gZmlsZSAqLwotICAgICAgICBlb2wgPSAwOwotI2lmZGVm IE1BQwotICAgICAgICAvKgotICAgICAgICAgKiBJdCBpcyBleHBlbnNpdmUgdG8gcnVuIHRoZSBt aW5pcGFyc2VyIHNvIGRvbid0IGRvIGl0IGZvcgotICAgICAgICAgKiBldmVyeSBjaGFyYWN0ZXIu Ci0gICAgICAgICAqLwotICAgICAgICBpZiAoLS1jb3VudCA8IDApIHsKLSAgICAgICAgICAgIGNv dW50ID0gMTAwOwotICAgICAgICAgICAgbWluaXBhcnNlcigxKTsKLSAgICAgICAgICAgIGlmIChz c3RhdGUgPT0gJ2EnKSB7Ci0gICAgICAgICAgICAgICAgc3N0YXRlID0gJ1wwJzsKLSAgICAgICAg ICAgICAgICBnb3RvIHhtaXRmYWlsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZWxzZSAv KiBOb3QgTUFDICovCi0gICAgICAgIGlmICh0cl9pbnQpIHsgICAgICAgICAgICAgICAgICAgLyog SW50ZXJydXB0ZWQ/ICovCi0gICAgICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAgICAg LyogUHJpbnQgbWVzc2FnZSAqLwotICAgICAgICAgICAgZ290byB4bWl0ZmFpbDsKLSAgICAgICAg fQotI2VuZGlmIC8qIE1BQyAqLwotICAgICAgICBjID0gem1pbmNoYXIoKTsgICAgICAgICAgICAg ICAgIC8qIEdldCBhIGZpbGUgY2hhcmFjdGVyICovCi0jaWZkZWYgQ09NTUVOVAotLyogdG9vIG11 Y2ggKi8KLSNpZmRlZiBERUJVRwotICAgICAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgICAgICBp ZiAoYyA8IDApCi0gICAgICAgICAgICAgIGRlYnVnKEYxMDEsIlhNSVQgem1pbmNoYXIiLCIiLGMp OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBkZWJ1ZyhGMDAwLCJYTUlUIHptaW5j aGFyIiwiIixjKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jZW5kaWYgLyogQ09N TUVOVCAqLwotICAgICAgICBpZiAoYyA8IC0xKSB7ICAgICAgICAgICAgICAgICAgIC8qIE90aGVy IGVycm9yICovCi0gICAgICAgICAgICBwcmludGYoIj9UUkFOU01JVCBmaWxlIHJlYWQgZXJyb3I6 ICVzXG4iLGNrX2VycnN0cigpKTsKLSAgICAgICAgICAgIGdvdG8geG1pdGZhaWw7Ci0gICAgICAg IH0gZWxzZSBpZiAoYyA+IC0xKSB7Ci0gICAgICAgICAgICBuYnl0ZXMrKzsKLSAgICAgICAgICAg IGMgJj0gZm1hc2s7ICAgICAgICAgICAgICAgICAvKiBBcHBseSBTRVQgRklMRSBCWVRFU0laRSBt YXNrICovCi0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAtMSkgewotICAgICAgICAgICAgZW9mID0g MTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlhNSVQgZW9mIiwiIixlb2YpOwotICAgICAgICB9 Ci0gICAgICAgIGlmIChiaW5hcnkpIHsgICAgICAgICAgICAgICAgICAgLyogQmluYXJ5Li4uICov Ci0gICAgICAgICAgICBpZiAoYyA9PSAtMSkgeyAgICAgICAgICAgICAgLyogSWYgRU9GICovCi0g ICAgICAgICAgICAgICAgcmMgPSAxOyAgICAgICAgICAgICAgICAgLyogU3VjY2VzcyAqLwotICAg ICAgICAgICAgICAgIGVvZiA9IDE7Ci0gICAgICAgICAgICAgICAgZ290byB4bWl0ZXhpdDsgICAg ICAgICAgLyogRG9uZSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCF4bWl0dyAm JiAheHhlY2hvKSB7ICAgIC8qIFNwZWNpYWwgImJsYXN0IiBtb2RlICovCi0gICAgICAgICAgICAg ICAgaWYgKGNvdW50ID09IFhCQlVGU0laKSB7IC8qIEZpbGUgaW5wdXQgYnVmZmVyIGZ1bGwuLi4g Ki8KLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvdW50ID4gMCkgewotICAgICAgICAgICAg ICAgICAgICAgICAgZXJybm8gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHR0b2wo eGJidWYsY291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPCAwKSB7ICAgIC8q IHRyeSB0byBzZW5kIGl0LiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi P1RSQU5TTUlUIG91dHB1dCBlcnJvcjogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNrX2VycnN0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJYTUlUIGJpbmFyeSB0dG9sIGVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBja19lcnJzdHIoKSxlcnJubyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmMgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPCAwKSBicmVh azsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50IC09IHk7Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY291bnQgPSAwOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICB4YmJ1Zltjb3VudCsrXSA9IGM7Ci0jaWZkZWYgVE5DT0RFCi0gICAg ICAgICAgICAgICAgaWYgKGMgPT0gSUFDICYmIGlzX3RuKSAgLyogVGVsbmV0IElBQyAqLwotICAg ICAgICAgICAgICAgICAgeGJidWZbY291bnQrK10gPSBJQUM7IC8qIG11c3QgYmUgZG91YmxlZCAq LwotI2VuZGlmIC8qIFROQ09ERSAqLwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgaWYgKHR0b2MoZG9wYXIoKGNoYXIpIGMpKSA8IDApIHsgLyog ZWxzZSBqdXN0IHNlbmQgdGhlIGNoYXIgKi8KLSAgICAgICAgICAgICAgICBwcmludGYoIj9DYW4n dCB0cmFuc21pdCBjaGFyYWN0ZXJcbiIpOwotICAgICAgICAgICAgICAgIGdvdG8geG1pdGZhaWw7 Ci0gICAgICAgICAgICB9Ci0jaWZkZWYgVE5DT0RFCi0gICAgICAgICAgICBpZiAoYyA9PSBJQUMg JiYgaXNfdG4pICAgICAgLyogUXVvdGUgVGVsbmV0IElBQyAqLwotICAgICAgICAgICAgICB0dG9j KChjaGFyKUlBQyk7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLSAgICAgICAgICAgIGlmICh4bWl0 dykgICAgICAgICAgICAgICAgICAvKiBQYXVzZSBpZiByZXF1ZXN0ZWQgKi8KLSAgICAgICAgICAg ICAgbXNsZWVwKHhtaXR3KTsKLQotICAgICAgICAgICAgaWYgKHh4ZWNobykgeyAgICAgICAgICAg ICAgIC8qIFNFVCBUUkFOU01JVCBFQ0hPIE9OPyAqLwotICAgICAgICAgICAgICAgIGlmIChkdXBs ZXgpIHsgICAgICAgICAgIC8qIFllcywgZm9yIGhhbGYgZHVwbGV4ICovCi0jaWZuZGVmIE5PTE9D QUwKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgLyogRWNobyB0byBlbXVsYXRvciAq LwotICAgICAgICAgICAgICAgICAgICBzY3JpcHR3cnRidWYoKFVTSE9SVCkoYyAmIGNtZG1zaykp OwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICAgICAgICAgICAg ICAgICAgaWYgKGNvbm9jKChjaGFyKShjICYgY21kbXNrKSkgPCAwKSAvKiBlY2hvIGxvY2FsbHku ICovCi0gICAgICAgICAgICAgICAgICAgICAgZ290byB4bWl0ZmFpbDsKLSAgICAgICAgICAgICAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBGb3IgZnVsbCBkdXBsZXgsICovCi0gICAgICAg ICAgICAgICAgICAgIGludCBpLCBuOyAgICAgICAgICAgLyogZGlzcGxheSB3aGF0ZXZlciBpcyB0 aGVyZS4gKi8KLSAgICAgICAgICAgICAgICAgICAgbiA9IHR0Y2hrKCk7ICAgICAgICAvKiBTZWUg aG93IG1hbnkgY2hhcnMgYXJlIHdhaXRpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG4g PCAwKSB7ICAgICAgICAvKiBDb25uZWN0aW9uIGRyb3BwZWQ/ICovCi0gICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoIj9Db25uZWN0aW9uIGxvc3RcbiIpOwotICAgICAgICAgICAgICAgICAg ICAgICAgZ290byB4bWl0ZmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7IC8qIFJlYWQgYW5kIGVjaG8gdGhhdCBt YW55LiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHR0aW5jKHhtaXR0KTsgLyogVGlt ZWQgcmVhZCBqdXN0IGluIGNhc2UuICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA+ IC0xKSB7ICAgLyogSWYgbm8gdGltZW91dCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmIChwYXJpdHkpIHggJj0gMHg3ZjsgLyogZGlzcGxheSB0aGUgY2hhciwgKi8KLSNpZm5kZWYg Tk9MT0NBTAotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVjaG8g dG8gZW11bGF0b3IgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHR3cnRidWYo KFVTSE9SVCl4KTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm9jKChjaGFyKSh4ICYgY21kbXNrKSkgPCAw KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP091dHB1dCBlcnJv clxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geG1pdGZhaWw7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBl bHNlIGlmICh4ID09IC0yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJD b25uZWN0aW9uIGNsb3NlZC5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0Y2xv cygxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhtaXRmYWlsOwotICAgICAg ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXNzaW9u IExpbWl0IGV4Y2VlZGVkIC0gY2xvc2luZyBjb25uZWN0aW9uLlxuIgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0Y2xv cygxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhtaXRmYWlsOwotICAgICAg ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIj9Db21tdW5pY2F0aW9ucyBlcnJvclxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ290byB4bWl0ZmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB0dGZs dWkoKTsgICAgICAgICAgICAvKiBOb3QgZWNob2luZywganVzdCBmbHVzaCBpbnB1dC4gKi8KLQot ICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQgbW9kZSwgbGlu ZSBhdCBhIHRpbWUuICovCi0jaWZkZWYgVU5JQ09ERQotICAgICAgICAgICAgaWYgKGZjaGFyc2V0 ID09IEZDX1VDUzIgJiYgeGxhdGUpIHsgLyogU3BlY2lhbCBmb3IgVUNTLTIgKi8KLSAgICAgICAg ICAgICAgICBjaGFyIHhidWZbOF07Ci0gICAgICAgICAgICAgICAgeCA9IDEgLSAobmJ5dGVzICYg MSk7ICAgLyogT2RkIG9yIGV2ZW4gYnl0ZSAqLwotICAgICAgICAgICAgICAgIGlmICh4ID09IDAp ICAgICAgICAgICAgIC8qIE5vdGU6IDEgPSB0aGUgMXN0LCAwID0gMm5kLCBldGMgKi8KLSAgICAg ICAgICAgICAgICAgIHVjLnhfc2hvcnQgPSAwOwotICAgICAgICAgICAgICAgIGlmIChib21vcmRl cikgICAgICAgICAgIC8qIExpdHRsZSBFbmRpYW4gKi8KLSAgICAgICAgICAgICAgICAgIHggPSAx IC0geDsgICAgICAgICAgICAvKiBTYXZlIGJ5dGUgaW4gYXBwcm9wcmlhdGUgaGFsZiAqLwotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDEsIlhNSVQgVUNTMiB4IiwiIix4KTsKLSAgICAgICAgICAg ICAgICB1Yy54X2NoYXJbeF0gPSAoQ0hBUikgKGMgJiAweGZmKTsKLSAgICAgICAgICAgICAgICBp ZiAobmJ5dGVzICYgMSkgICAgICAgICAvKiBGaXJzdCBieXRlLCBnbyBiYWNrIGZvciBuZXh0ICov Ci0gICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAobmJ5dGVz ID09IDIpIHsgICAgICAvKiBVQ1MtMiBCeXRlIE9yZGVyIE1hcmsgKi8KLSAgICAgICAgICAgICAg ICAgICAgaWYgKHVjLnhfc2hvcnQgPT0gKFVTSE9SVCkgMHhmZWZmKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAwLCJYTUlUIFVDUzIgQk9NIEZFRkYiLCIiLGJvbW9yZGVyKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKHVjLnhfc2hvcnQgPT0gKFVTSE9SVCkgMHhmZmZlKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBib21vcmRlciA9IDEgLSBib21vcmRlcjsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDAsIlhNSVQgVUNTMiBCT00gRkZGRSAoc3dhcCkiLCIiLGJvbW9yZGVyKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNwcmludGYoeGJ1ZiwiJTA0WCIs dWMueF9zaG9ydCk7IC8qIFNBRkUgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJYTUlU IFVDUzIiLHhidWYsdWMueF9zaG9ydCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5ieXRlcyAmIDEp ICAgICAgICAgLyogU3BlY2lhbCBlb2wgdGVzdCBmb3IgVUNTLTIgKi8KLSAgICAgICAgICAgICAg ICAgIGlmICh1Yy54X3Nob3J0ID09ICdcbicpCi0gICAgICAgICAgICAgICAgICAgIGVvbCA9IDE7 Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgIGlmICh1Yy54X3Nob3J0ID09IDB4MjAy OCB8fCB1Yy54X3Nob3J0ID09IDB4MjAyOSkKLSAgICAgICAgICAgICAgICAgICAgZW9sID0gMTsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBVTklD T0RFICovCi0gICAgICAgICAgICAgIGlmIChjID09ICdcbicpIHsgICAgICAgICAgLyogTm9ybWFs IGVvbCB0ZXN0IG90aGVyd2lzZSAqLwotICAgICAgICAgICAgICAgICAgZW9sID0gMTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlb2wpIHsgICAgICAgICAgICAgICAgICAvKiBFbmQg b2YgbGluZT8gKi8KLSAgICAgICAgICAgICAgICBpbnQgc3R1ZmYgPSAtMTsKLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJYTUlUIGVvbCBsZW5ndGgiLCIiLGkpOwotICAgICAgICAgICAgICAg IGlmIChpID09IDApIHsgICAgICAgICAgIC8qIEJsYW5rIGxpbmU/ICovCi0gICAgICAgICAgICAg ICAgICAgIGlmICh4bWl0ZikgICAgICAgICAgLyogWWVzLCBpbnNlcnQgZmlsbCBpZiBhc2tlZC4g Ki8KLSAgICAgICAgICAgICAgICAgICAgICBsaW5lW2krK10gPSBkb3BhcigoY2hhcikgeG1pdGYp OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaSA9PSAwIHx8ICgoY2hh cikgbGluZVtpLTFdKSAhPSAoKGNoYXIpIGRvcGFyKENSKSkpCi0gICAgICAgICAgICAgICAgICBs aW5lW2krK10gPSBkb3BhcihDUik7IC8qIFRlcm1pbmF0ZSBpdCB3aXRoIENSICovCi0gICAgICAg ICAgICAgICAgaWYgKHhtaXRsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWZmID0gTEY7Ci0j aWZkZWYgVE5DT0RFCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc190biAmJiAodG5fbmxt ICE9IFROTF9DUikpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogVEVMTkVUIE5FV0xJTkUgT04v T0ZGL1JBVyAqLwotICAgICAgICAgICAgICAgICAgICBzdHVmZiA9ICh0bl9ubG0gPT0gVE5MX0NS TEYpID8gTEYgOiBOVUw7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIGlmIChzdHVmZiA+IC0xKQotICAgICAgICAgICAgICAgICAgbGluZVtp KytdID0gZG9wYXIoKGNoYXIpc3R1ZmYpOwotICAgICAgICAgICAgICAgIGxpbmVbaV0gPSBOVUw7 Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwiWE1JVCBlb2wgbGluZSIsbGluZSxpKTsKLQot ICAgICAgICAgICAgfSBlbHNlIGlmIChjICE9IC0xKSB7ICAgICAgIC8qIE5vdCBhIG5ld2xpbmUs IHJlZ3VsYXIgY2hhcmFjdGVyICovCi0gICAgICAgICAgICAgICAgaW50IGssIHg7Ci0gICAgICAg ICAgICAgICAgb3V0eGJ1ZlswXSA9IGM7ICAgICAgICAgLyogSW4gY2FzZSBvZiBubyB0cmFuc2xh dGlvbiAqLwotICAgICAgICAgICAgICAgIG91dHhjb3VudCA9IDE7ICAgICAgICAgIC8qIEFzc3Vt ZSByZXN1bHQgaXMgb25lIGJ5dGUgKi8KLSNpZm5kZWYgTk9DU0VUUwotICAgICAgICAgICAgICAg IHN3aXRjaCAodW5pY29kZSkgewotICAgICAgICAgICAgICAgICAgY2FzZSAwOiAgICAgICAgICAg ICAgIC8qIE5vIFVuaWNvZGUgaW52b2x2ZWQgKi8KLSAgICAgICAgICAgICAgICAgIGNhc2UgMToK LSAgICAgICAgICAgICAgICAgICAgaWYgKHhsYXRlKSB7ICAgICAgICAvKiBJZiBub3QgL1RSQU5T UEFSRU5UICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2NhbC10by1pbnRlcm1lZGlh dGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeG8pIGMgPSAoKnN4bykoKGNoYXIp Yyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm1lZGlhdGUtdG8tcmVtb3RlICov Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnhvKSBjID0gKCpyeG8pKChjaGFyKWMpOwot ICAgICAgICAgICAgICAgICAgICAgICAgb3V0eGJ1ZlswXSA9IGM7Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgVU5JQ09ERQotICAgICAg ICAgICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgIC8qIExvY2FsIGJ5dGUgdG8gVVRGLTgg Ki8KLSAgICAgICAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICAgICAgeGZ1ID0g eGxfZmN1W2ZjaGFyc2V0XTsKLSAgICAgICAgICAgICAgICAgICAgdGNzc2l6ZSA9IGZjc2luZm9b ZmNoYXJzZXRdLnNpemU7Ci0gICAgICAgICAgICAgICAgICAgIG91dHhjb3VudCA9Ci0gICAgICAg ICAgICAgICAgICAgICAgYl90b191KChDSEFSKWMsb3V0eGJ1ZixPVVRYQlVGU0laLHRjc3NpemUp OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgNDog ICAgICAgICAgICAgICAvKiBMb2NhbCBVVEYtOCB0byByZW1vdGUgYnl0ZSAqLwotICAgICAgICAg ICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgICAgICAgICB4dWYgPSB4bF91ZmNbdGNzcl07 Ci0gICAgICAgICAgICAgICAgICAgIHggPSB1X3RvX2IoKENIQVIpYyk7IC8qIENvbnZlcnQgdG8g Ynl0ZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMSkgeyAgICAgIC8qIElmIG1v cmUgaW5wdXQgYnl0ZXMgbmVlZGVkICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsgICAgICAgLyogZ28gYmFjayBhbmQgZ2V0IHRoZW0gKi8KLSAgICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmICh4ID09IC0yKSB7IC8qIExTIG9yIFBTIChzaG91bGRuJ3QgaGFwcGVuKSAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgb3V0eGJ1ZlswXSA9IENSOwotICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgaWYgKHggPT0gLTkpIHsgLyogVVRGLTggZXJyb3IgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgIG91dHhidWZbMF0gPSAnPyc7IC8qIEluc2VydCBlcnJvciBjaGFyICovCi0g ICAgICAgICAgICAgICAgICAgICAgICBvdXR4YnVmWzFdID0gdV90b19iMigpOyAvKiBJbnNlcnQg bmV4dCBjaGFyICovCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXR4Y291bnQgPSAyOwotICAg ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0eGJ1 ZlswXSA9ICAgIC8qIE90aGVyd2lzZSBzdG9yZSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgKHVuc2lnbmVkKSh4ICYgMHhmZik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIDY6ICAgICAg ICAgICAgICAgLyogVVRGLTggdG8gVVRGLTggKi8KLSAgICAgICAgICAgICAgICAgIGNhc2UgNzoK LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIDg6ICAg ICAgICAgICAgICAgLyogVUNTLTIgdG8gYnl0ZSAqLwotICAgICAgICAgICAgICAgICAgY2FzZSA5 OgotICAgICAgICAgICAgICAgICAgICB4dWYgPSB4bF91ZmNbdGNzcl07Ci0gICAgICAgICAgICAg ICAgICAgIG91dHhidWZbMF0gPSAoKnh1ZikodWMueF9zaG9ydCk7Ci0gICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSAxMDoKLSAgICAgICAgICAgICAgICAg IGNhc2UgMTE6IHsgICAgICAgICAgICAvKiBVQ1MtMiB0byBVVEYtOCAqLwotICAgICAgICAgICAg ICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgICAgICAgICAgIENIQVIgKiBidWYgPSBOVUxM OwotICAgICAgICAgICAgICAgICAgICAgIHggPSB1Y3MyX3RvX3V0ZjgodWMueF9zaG9ydCwmYnVm KTsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgb3V0eGJ1ZlswXSA9IDB4ZmY7IC8qICg9IFUrRkZGRCkgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgb3V0eGJ1ZlsxXSA9IDB4YmQ7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgIHggPSAyOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg ICBmb3IgKGogPSAwOyBqIDwgeDsgaisrKQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0eGJ1 ZltqXSA9IGJ1ZltqXTsKLSAgICAgICAgICAgICAgICAgICAgICBvdXR4Y291bnQgPSB4OwotICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8q IFVOSUNPREUgKi8KLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAg ICAgICAgICAgICAgIG91dHhidWZbb3V0eGNvdW50XSA9IE5VTDsKLSAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTExLCJYTUlUIG91dHhidWYiLG91dHhidWYsb3V0eGNvdW50KTsKLS8qCi0gIE5vdyB0 aGUgaW5wdXQgY2hhcmFjdGVyICgxIG9yIG1vcmUgYnl0ZXMpIGlzIHRyYW5zbGF0ZWQgaW50byB0 aGUgb3V0cHV0Ci0gIGV4cGFuc2lvbiBidWZmZXIgKDEgb3IgbW9yZSBieXRlcyk7IG91dHhjb3Vu dCA9IG51bWJlciBvZiBieXRlcyB0byBhZGQgdG8KLSAgdGhlIFRSQU5TTUlUIGxpbmUgYnVmZmVy LCB3aGljaCB3ZSBkbyBoZXJlLCB0YWtpbmcgY2FyZSBvZiBwYXJpdHksIFNJL1NPCi0gIHByb2Nl c3NpbmcsIGFuZCBxdW90aW5nIFRlbG5ldCBJQUNzLgotKi8KLSAgICAgICAgICAgICAgICBmb3Ig KGsgPSAwOyBrIDwgb3V0eGNvdW50OyBrKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYyA9IG91 dHhidWZba107Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4bWl0cyAmJiBwYXJpdHkgJiYgKGMg JiAwMjAwKSkgeyAvKiBJZiBzaGlmdGluZyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgbGlu ZVtpKytdID0gZG9wYXIoU08pOyAvKiBuZWVkcyB0byBiZSBkb25lLCAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgbGluZVtpKytdID0gZG9wYXIoKGNoYXIpYyk7IC8qIGRvIGl0IGhlcmUsICov Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lW2krK10gPSBkb3BhcihTSSk7IC8qIGNydWRl bHkuICovCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBsaW5lW2krK10gPSBkb3BhcigoY2hhciljKTsKLSNpZmRlZiBUTkNPREUKLSAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChjID09IChDSEFSKUlBQyAmJiBpc190bikKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgbGluZVtpKytdID0gKENIQVIpSUFDOwotI2VuZGlmIC8qIFROQ09ERSAq LwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg fQotLyoKLSAgU2VuZCBjaGFyYWN0ZXJzIGlmIGJ1ZmZlciBmdWxsLCBvciBhdCBlbmQgb2YgbGlu ZSwgb3IgYXQgZW5kIG9mIGZpbGUuCi0gIChFbmQgb2YgbGluZSBvbmx5IGlmIGVjaG9pbmcsIHdh aXRpbmcgZm9yIGEgcHJvbXB0LCBvciBwYXVzaW5nLikKLSovCi0gICAgICAgICAgICBkZWJ1ZyhG MDAwLCJYTUlUIGMiLGNraXRvYShpKSxjKTsKLSAgICAgICAgICAgIGlmIChpID49IHhidWZzaXog fHwgZW9mIHx8IChlb2wgJiYgKHh4ZWNobyB8fCB4bWl0dyB8fCB0KSkpIHsKLSAgICAgICAgICAg ICAgICBwID0gbGluZTsKLSAgICAgICAgICAgICAgICBsaW5lW2ldID0gJ1wwJzsKLSAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJ0cmFuc21pdCBidWYiLHAsaSk7Ci0gICAgICAgICAgICAgICAg aWYgKHR0b2woKENIQVIgKilwLGkpIDwgMCkgeyAvKiB0cnkgdG8gc2VuZCBpdC4gKi8KLSAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCI/VFJBTlNNSVQgb3V0cHV0IGVycm9yOiAlc1xuIixja19l cnJzdHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGkgPSAwOyAgICAg ICAgICAgICAgICAgIC8qIFJlc2V0IGJ1ZmZlciBwb2ludGVyLiAqLwotLyoKLSAgTm93IHdlIGhh bmRsZSB0aGUgZWNoby4gIElmIHRoZSB1c2VyIHdhbnRzIHRvIHNlZSBpdCwgb3IgaWYgd2UgaGF2 ZSB0bwotICB3YWl0IGZvciB0aGUgdHVybmFyb3VuZCBjaGFyYWN0ZXIsIHQuICBJZiB0aGUgZWNo byBpcyBiZWluZyBkaXNwbGF5ZWQsCi0gIGFuZCB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0IHRyYW5z bGF0aW9uIGlzIHJlcXVpcmVkLCB3ZSBkbyBpdCBoZXJlLgotKi8KLSAgICAgICAgICAgICAgICBp ZiAoZHVwbGV4ICYmIHh4ZWNobykgeyAgLyogSWYgbG9jYWwgZWNobywgZWNobyBpdCAqLwotICAg ICAgICAgICAgICAgICAgICBpZiAocGFyaXR5IHx8IGNtZG1zayA9PSAweDdmKSB7IC8qIFN0cmlw IGhpIGJpdHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnNzID0gbGluZTsgICAg ICAgICAgICAgLyogaWYgbmVjZXNzYXJ5ICovCi0gICAgICAgICAgICAgICAgICAgICAgICB3aGls ZSAoKnNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNzICY9IDB4N2Y7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3MrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgfQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAg ICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgLyogRWNobyB0byBlbXVsYXRvciAq LwotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc3MgPSBwOwotICAgICAgICAgICAgICAg ICAgICAgICAgd2hpbGUgKCpzcykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlw dHdydGJ1ZigoVVNIT1JUKSpzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3MrKzsK LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlm IC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYg KGNvbm9sbChwKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgZ290byB4bWl0ZmFpbDsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHhtaXR3KSAgICAgICAgICAgICAg LyogU2xlZXAgVFJBTlNNSVQgUEFVU0UgaW50ZXJ2YWwgKi8KLSAgICAgICAgICAgICAgICAgIG1z bGVlcCh4bWl0dyk7Ci0KLSAgICAgICAgICAgICAgICBjb250cm9sID0gMDsgICAgICAgICAgICAv KiBSZWFkYmFjayBsb29wIGNvbnRyb2wgKi8KLSAgICAgICAgICAgICAgICBpZiAodCAhPSAwICYm IGVvbCkgICAgICAvKiBUUkFOU01JVCBQUk9NUFQgZ2l2ZW4gYW5kIGF0IEVPTCAqLwotICAgICAg ICAgICAgICAgICAgY29udHJvbCB8PSAxOwotICAgICAgICAgICAgICAgIGlmICh4eGVjaG8gJiYg IWR1cGxleCkgICAvKiBFY2hvIGRlc2lyZWQgYW5kIGlzIHJlbW90ZSAqLwotICAgICAgICAgICAg ICAgICAgY29udHJvbCB8PSAyOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHsgICAg ICAgICAgLyogRG8gdGhpcyBpZiByZWFkaW5nIGJhY2sgdGhlIGVjaG8gKi8KLSAgICAgICAgICAg ICAgICAgICAgaW50IG47Ci0gICAgICAgICAgICAgICAgICAgIHggPSAwOwotICAgICAgICAgICAg ICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wg JiAxKSB7IC8qIFRlcm1pbmF0aW9uIGNyaXRlcmlvbiAqLwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICh4ID09IHQpICAgIC8qIGZvciB0dXJuYXJvdW5kICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp ZiAoY29udHJvbCAmIDIpIHsgLyogQW5kIGZvciBlY2hvaW5nICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKChuID0gdHRjaGsoKSkgPCAxKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgICAgICBpZiAoKHggPSB0dGluYyh4bWl0dCkpIDwgMCkgeyAvKiBSZWFkIHdpdGggdGlt ZW91dCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoeCkgewotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMjoKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCJDb25uZWN0aW9uIGNsb3NlZC5cbiIpOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0dGNsb3MoMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8geG1pdGZhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0z OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiU2Vzc2lvbiBMaW1pdCBleGNlZWRlZCAtIGNsb3NpbmcgY29ubmVj dGlvbi5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0Y2xvcygxKTsgLyogZnVsbCB0aHJ1Li4uICov Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geG1pdGZhaWw7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoIj9UaW1lb3V0XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ290byB4bWl0ZmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA+IC0x ICYmIChjb250cm9sICYgMikpIHsgLyogRWNobyBhbnkgZWNob2VzICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHBhcml0eSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHggJj0gMHg3ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0geDsKLSNpZm5kZWYg Tk9MT0NBTAotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHdy dGJ1ZigoVVNIT1JUKXgpOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnhidWZbMF0gPSBjOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlueGNvdW50ID0gMTsKLSNpZm5kZWYgTk9DU0VUUwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodW5pY29kZSAmIDMpIHsgLyogUmVtb3RlIGJpdHMg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHhsYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoc3hpKSBjID0gKCpzeGkpKChDSEFSKWMpOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHJ4aSkgYyA9ICgqcnhpKSgoQ0hBUiljKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlueGJ1ZlswXSA9IGM7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0jaWZkZWYgVU5JQ09ERQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSAxOiAgIC8qIFJlbW90ZSBCeXRlIHRvIGxvY2FsIFVURi04ICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHhmdSA9IHhsX2ZjdVt0Y3NyXTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGNzc2l6ZSA9IGZjc2luZm9bdGNzcl0uc2l6ZTsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW54Y291bnQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJfdG9fdSgoQ0hBUiljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnhidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE9VVFhCVUZTSVosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRj c3NpemUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIDI6ICAgLyogUmVtb3RlIFVURi04IHRvIGxvY2FsIEJ5dGUgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeHVmID0geGxfdWZjW3Rjc2xdOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB4ID0gdV90b19iKChDSEFSKWMpOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoeCA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlueGJ1 ZlswXSA9ICh1bnNpZ25lZCkoeCAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogICAvKiBV VEYtOCB0byBVVEYtOCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnhidWZbaW54 Y291bnRdID0gTlVMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb254byhpbnhj b3VudCwoY2hhciAqKWlueGJ1ZikgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z290byB4bWl0ZmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgIC8qIE5vdCBl Y2hvaW5nICovCi0gICAgICAgICAgICAgICAgICB0dGZsdWkoKTsgICAgICAgICAgICAgLyogSnVz dCBmbHVzaCBpbnB1dCBidWZmZXIgKi8KLSAgICAgICAgICAgIH0gLyogRW5kIG9mIGJ1ZmZlci1k dW1waW5nIGJsb2NrICovCi0gICAgICAgIH0gLyogRW5kIG9mIHRleHQgbW9kZSAqLwotICAgICAg ICBpZiAoZW9mKSB7Ci0gICAgICAgICAgICByYyA9IDE7Ci0gICAgICAgICAgICBnb3RvIHhtaXRl eGl0OwotICAgICAgICB9Ci0gICAgfSAvKiBFbmQgb2YgY2hhcmFjdGVyLXJlYWRpbmcgbG9vcCAq LwotCi0gIHhtaXRmYWlsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmFpbHVyZSBl eGl0IHBvaW50ICovCi0gICAgcmMgPSAwOwotCi0gIHhtaXRleGl0OiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogR2VuZXJhbCBleGl0IHBvaW50ICovCi0gICAgaWYgKHJjID4gMCkgewot ICAgICAgICBpZiAoYmluYXJ5ICYmICF4bWl0dyAmJiAheHhlY2hvKSB7IC8qICJibGFzdGluZyI/ ICovCi0gICAgICAgICAgICB3aGlsZSAoY291bnQgPiAwKSB7ICAgICAgICAgICAgLyogUGFydGlh bCBidWZmZXIgc3RpbGwgdG8gZ28/ICovCi0gICAgICAgICAgICAgICAgZXJybm8gPSAwOwotICAg ICAgICAgICAgICAgIHkgPSB0dG9sKHhiYnVmLGNvdW50KTsKLSAgICAgICAgICAgICAgICBpZiAo eSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VFJBTlNNSVQgb3V0cHV0IGVy cm9yOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrX2VycnN0cigpKTsKLSAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiWE1JVCBiaW5hcnkgZW9mIHR0b2wgZXJyb3Ii LAotICAgICAgICAgICAgICAgICAgICAgICAgICBja19lcnJzdHIoKSxlcnJubyk7Ci0gICAgICAg ICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvdW50IC09IHk7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0gZWxzZSBpZiAoIWJpbmFyeSAmJiAqeG1pdGJ1ZikgeyAvKiBBbnl0aGluZyB0byBz ZW5kIGF0IEVPRj8gKi8KLSAgICAgICAgICAgIHAgPSB4bWl0YnVmOyAgICAgICAgICAgICAgICAv KiBZZXMsIHBvaW50IHRvIHN0cmluZy4gKi8KLSAgICAgICAgICAgIHdoaWxlICgqcCkgICAgICAg ICAgICAgICAgICAvKiBTZW5kIGl0LiAqLwotICAgICAgICAgICAgICB0dG9jKGRvcGFyKCpwKysp KTsgICAgICAgIC8qIERvbid0IHdvcnJ5IGFib3V0IGVjaG8gaGVyZS4gKi8KLSAgICAgICAgfQot ICAgIH0KLQotI2lmbmRlZiBBTUlHQQotI2lmbmRlZiBNQUMKLSAgICBzaWduYWwoU0lHSU5ULG9s ZHNpZyk7ICAgICAgICAgICAgICAvKiBQdXQgb2xkIHNpZ25hbCBhY3Rpb24gYmFjay4gKi8KLSNl bmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBBTUlHQSAqLwotI2lmZGVmIFZNUwotICAgIGNvbmNi KGVzY2FwZSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFB1dCB0ZXJtaW5hbCBiYWNrLCAqLwot I2VuZGlmIC8qIFZNUyAqLwotICAgIHpjbG9zZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAg IC8qIENsb3NlIGZpbGUsICovCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICBsYW5ndWFnZSA9IGxhbmdz djsgICAgICAgICAgICAgICAgICAvKiByZXN0b3JlIGxhbmd1YWdlLCAqLwotI2VuZGlmIC8qIE5P Q1NFVFMgKi8KLSAgICB0dHJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQg dGVybWluYWwgbW9kZXMsICovCi0gICAgcmV0dXJuKHJjKTsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogYW5kIHJldHVybiBzdWNjZXNzZnVsbHkuICovCi19Ci0jZW5kaWYgLyogTk9MT0NBTCAq LwotI2VuZGlmIC8qIE5PWE1JVCAqLwotCi0jaWZuZGVmIE5PQ1NFVFMKLQotX1BST1RPVFlQKCBD SEFSICgqc3h4KSwgKENIQVIpICk7ICAgICAgIC8qIExvY2FsIHRyYW5zbGF0aW9uIGZ1bmN0aW9u ICovCi1fUFJPVE9UWVAoIENIQVIgKCpyeHgpLCAoQ0hBUikgKTsgICAgICAgLyogTG9jYWwgdHJh bnNsYXRpb24gZnVuY3Rpb24gKi8KLV9QUk9UT1RZUCggQ0hBUiB6bDFhcywgKENIQVIpICk7ICAg ICAgICAvKiBMYXRpbi0xIHRvIGFzY2lpICovCi1fUFJPVE9UWVAoIENIQVIgeGwxYXMsIChDSEFS KSApOyAgICAgICAgLyogZGl0dG8gKi8KLQotLyogIFggTCBBIFQgRSAgLS0gIFRyYW5zbGF0ZSBh IGxvY2FsIGZpbGUgZnJvbSBvbmUgY2hhcmFjdGVyIHNldCB0byBhbm90aGVyICovCi0KLS8qCi0g IFRyYW5zbGF0ZXMgaW5wdXQgZmlsZSAoZmluKSBmcm9tIGNoYXJhY3RlciBzZXQgY3NpbiB0byBj aGFyYWN0ZXIgc2V0IGNzb3V0Ci0gIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gdGhlIG91dHB1dCBm aWxlIChmb3V0KS4gIFRoZSB0d28gY2hhcmFjdGVyIHNldHMgYXJlCi0gIGZpbGUgY2hhcmFjdGVy IHNldHMgZnJvbSBmY3N0YWIuCi0qLwotCi1pbnQKLXhsYXRlKGZpbiwgZm91dCwgY3NpbiwgY3Nv dXQpIGNoYXIgKmZpbiwgKmZvdXQ7IGludCBjc2luLCBjc291dDsgewotCi0jaWZuZGVmIE1BQwot I2lmZGVmIE9TMgotICAgIGV4dGVybiBpbnQgazk1c3Rkb3V0OwotICAgIGV4dGVybiBpbnQgd2hl cmV4W10sIHdoZXJleVtdOwotICAgIGV4dGVybiB1bnNpZ25lZCBjaGFyIGNvbG9yY21kOwotI2lm ZGVmIE5UCi0gICAgU0lHVFlQICgqIG9sZHNpZykoaW50KTsgICAgICAgICAgICAgLyogRm9yIHNh dmluZyBvbGQgaW50ZXJydXB0IHRyYXAuICovCi0jZWxzZSAvKiBOVCAqLwotICAgIFNJR1RZUCAo KiB2b2xhdGlsZSBvbGRzaWcpKGludCk7ICAgIC8qIEZvciBzYXZpbmcgb2xkIGludGVycnVwdCB0 cmFwLiAqLwotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiBPUzIgKi8KLSAgICBTSUdUWVAgKCog b2xkc2lnKSgpOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2lmZGVmIENL X0FOU0lDCi0gICAgaW50ICgqZm4pKGNoYXIpOyAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0 IGZ1bmN0aW9uIHBvaW50ZXIgKi8KLSNlbHNlCi0gICAgaW50ICgqZm4pKCk7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLSAgICBleHRlcm4gaW50IHhsYXR5cGU7Ci0gICAgaW50IGZpbGVjb2RlOyAg ICAgICAgICAgICAgICAgICAgICAgLyogQ29kZSBmb3Igb3V0cHV0IGZpbGUgKi8KLSAgICBpbnQg c2NybmZsZyA9IDA7Ci0KLSAgICBpbnQgeiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBSZXR1cm4gY29kZS4gKi8KLSAgICBpbnQgeCwgYywgYzI7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBXb3JrZXJzICovCi0jaWZuZGVmIFVOSUNPREUKLSAgICBpbnQgdGNzOwotI2VuZGlmIC8q IFVOSUNPREUgKi8KLQotICAgIGZmYyA9IDBMOwotCi0gICAgaWYgKHpvcGVuaShaSUZJTEUsZmlu KSA9PSAwKSB7ICAgICAgLyogT3BlbiB0aGUgZmlsZSB0byBiZSB0cmFuc2xhdGVkICovCi0jaWZk ZWYgQ09NTUVOVAotICAgICAgICAvKiBBbiBlcnJvciBtZXNzYWdlIHdhcyBhbHJlYWR5IHByaW50 ZWQgYnkgem9wZW5pKCkgKi8KLSAgICAgICAgcHJpbnRmKCI/Q2FuJ3Qgb3BlbiBpbnB1dCBmaWxl ICVzXG4iLGZpbik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICByZXR1cm4oMCk7Ci0g ICAgfQotI2lmZGVmIE1BQwotLyoKLSAgSWYgdXNlciBzcGVjaWZpZWQgbm8gb3V0cHV0IGZpbGUs IGl0IGdvZXMgdG8gdGhlIHNjcmVlbi4gIEZvciB0aGUgTWFjLAotICB0aGlzIG11c3QgYmUgZG9u ZSBhIHNwZWNpYWwgd2F5IChyZXN1bHQgZ29lcyB0byBhIG5ldyB3aW5kb3cpOyB0aGUgTWFjCi0g IGRvZXNuJ3QgaGF2ZSBhICJjb250cm9sbGluZyB0ZXJtaW5hbCIgZGV2aWNlIG5hbWUuCi0qLwot ICAgIGZpbGVjb2RlID0gIXN0cmNtcChmb3V0LENUVE5BTSkgPyBaQ1RFUk0gOiBaT0ZJTEU7Ci0j ZWxzZQotI2lmZGVmIFZNUwotICAgIGZpbGVjb2RlID0gIXN0cmNtcChmb3V0LENUVE5BTSkgPyBa Q1RFUk0gOiBaTUZJTEU7Ci0jZWxzZQotI2lmZGVmIE9TMgotICAgIGZpbGVjb2RlID0gKCFzdHJp Y21wKGZvdXQsImNvbiIpIHx8ICFzdHJpY21wKGZvdXQsImNvbjoiKSkgPwotICAgICAgICBaQ1RF Uk0gOiBaTUZJTEU7Ci0gICAgaWYgKChmaWxlY29kZSA9PSBaQ1RFUk0pICYmICFrOTVzdGRvdXQg JiYgIWluc2VydmVyKQotICAgICAgICBjc291dCA9IEZDX1VDUzI7Ci0jZWxzZSAvKiBPUzIgKi8K LSAgICBmaWxlY29kZSA9IFpPRklMRTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMg Ki8KLSNlbmRpZiAvKiBNQUMgKi8KLSAgICBpZiAoem9wZW5vKGZpbGVjb2RlLGZvdXQsTlVMTCxO VUxMKSA9PSAwKSB7IC8qIEFuZCB0aGUgb3V0cHV0IGZpbGUgKi8KLSAgICAgICAgcHJpbnRmKCI/ Q2FuJ3Qgb3BlbiBvdXRwdXQgZmlsZSAlc1xuIixmb3V0KTsKLSAgICAgICAgcmV0dXJuKDApOwot ICAgIH0KLSNpZm5kZWYgQU1JR0EKLSNpZm5kZWYgTUFDCi0gICAgb2xkc2lnID0gc2lnbmFsKFNJ R0lOVCwgdHJ0cmFwKTsgICAgLyogU2F2ZSBjdXJyZW50IGludGVycnVwdCB0cmFwLiAqLwotI2Vu ZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIEFNSUdBICovCi0KLSAgICBzY3JuZmxnID0gKGZpbGVj b2RlID09IFpDVEVSTSk7ICAgICAvKiBTZXQgb3V0cHV0IGZ1bmN0aW9uICovCi0gICAgaWYgKHNj cm5mbGcpCi0gICAgICBmbiA9IE5VTEw7Ci0gICAgZWxzZSBpZiAoZmlsZWNvZGUgPT0gWk1GSUxF KQotICAgICAgZm4gPSBwdXRtZmlsOwotICAgIGVsc2UKLSAgICAgIGZuID0gcHV0ZmlsOwotCi0g ICAgdHJfaW50ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSGF2ZSBub3QgYmVlbiBp bnRlcnJ1cHRlZCAoeWV0KS4gKi8KLSAgICB6ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBSZXR1cm4gY29kZSBwcmVzdW1lZCBnb29kLiAqLwotCi0gICAgaWYgKCFzY3JuZmxn ICYmICFxdWlldCkKLSAgICAgIHByaW50ZigiICVzICglcykgPT4gJXMgKCVzKVxuIiwgICAvKiBT YXkgd2hhdCB3ZSdyZSBkb2luZy4gKi8KLSAgICAgICAgICAgICBmaW4sIGZjc2luZm9bY3Npbl0u a2V5d29yZCwKLSAgICAgICAgICAgICBmb3V0LGZjc2luZm9bY3NvdXRdLmtleXdvcmQKLSAgICAg ICAgICAgICApOwotCi0jaWZuZGVmIFVOSUNPREUKLS8qCi0gIE5vbi1Vbmljb2RlIHBpY2tzIHRo ZSAibW9zdCBhcHByb3ByaWF0ZSIgdHJhbnNmZXIgY2hhcmFjdGVyIHNldCBhcyB0aGUKLSAgaW50 ZXJtZWRpYXRlIHNldCwgd2hpY2ggcmVzdWx0cyBpbiBsb3NzIG9mIGFueSBjaGFyYWN0ZXJzIHRo YXQgdGhlIHNvdXJjZQotICBhbmQgdGFyZ2V0IHNldHMgaGF2ZSBpbiBjb21tb24sIGJ1dCBhcmUg bGFja2luZyBmcm9tIHRoZSBpbnRlcm1lZGlhdGUgc2V0LgotKi8KLSNpZmRlZiBLQU5KSQotICAg IC8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIEphcGFuZXNlLi4uICovCi0KLSAgICBpZiAoZmNzaW5m b1tjc2luXS5hbHBoYWJldCA9PSBBTF9KQVBBTiB8fAotICAgICAgICAgZmNzaW5mb1tjc291dF0u YWxwaGFiZXQgPT0gQUxfSkFQQU4pIHsKLSAgICAgICAgVVNIT1JUIGV1OwotICAgICAgICBpbnQg YywgeCwgeTsKLQotICAgICAgICB4cG5ieXRlKC0xLDAsMCxOVUxMKTsgICAgICAgICAgIC8qIFJl c2V0IG91dHB1dCBtYWNoaW5lICovCi0gICAgICAgIHhsYXR5cGUgPSBYTEFfSkFQQU47Ci0KLSAg ICAgICAgd2hpbGUgKChjID0geGduYnl0ZShGQ19KRVVDLGNzaW4sTlVMTCkpID4gLTEpIHsgLyog R2V0IGFuIEVVQyBieXRlICovCi0gICAgICAgICAgICBpZiAodHJfaW50KSB7ICAgICAgICAgICAg ICAgLyogSW50ZXJydXB0ZWQ/ICovCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJeQy4uLlxuIik7 ICAgICAgLyogUHJpbnQgbWVzc2FnZSAqLwotICAgICAgICAgICAgICAgIHogPSAwOwotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogU2VuZCBFVUMg Ynl0ZSB0byBvdXRwdXQgbWFjaGluZSAqLwotICAgICAgICAgICAgaWYgKCh4ID0geHBuYnl0ZShj LFRDX0pFVUMsY3NvdXQsZm4pKSA8IDApIHsKLSAgICAgICAgICAgICAgICB6ID0gLTE7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZ290 byB4eGxhdGU7Ci0gICAgfQotI2VuZGlmIC8qIEtBTkpJICovCi0KLSAgICAvKiBSZWd1bGFyIGJ5 dGV3aXNlIGNvbnZlcnNpb24uLi4gKi8KLQotICAgIHRjcyA9IGdldHRjcyhjc2luLGNzb3V0KTsg ICAgICAgICAgIC8qIEdldCBpbnRlcm1lZGlhdGUgc2V0LiAqLwotICAgIGlmIChjc2luID09IGNz b3V0KSB7ICAgICAgICAgICAgICAgIC8qIElucHV0IGFuZCBvdXRwdXQgc2V0cyB0aGUgc2FtZT8g Ki8KLSAgICAgICAgc3h4ID0gcnh4ID0gTlVMTDsgICAgICAgICAgICAgICAvKiBJZiBzbywgbm8g dHJhbnNsYXRpb24uICovCi0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogT3RoZXJ3aXNlLCBzZXQgdXAgKi8KLSAgICAgICAgaWYgKHRjcyA8IDAgfHwgdGNzID4gTUFY VENTRVRTIHx8Ci0gICAgICAgICAgICBjc2luIDwgMCB8fCBjc2luID4gTUFYRkNTRVRTIHx8Ci0g ICAgICAgICAgICBjc291dCA8IDAgfHwgY3NvdXQgPiBNQVhGQ1NFVFMpIHsKLSAgICAgICAgICAg IGRlYnVnKEYxMDAsIlhMQVRFIGNzZXRzIG91dCBvZiByYW5nZSIsIiIsMCk7Ci0gICAgICAgICAg ICBzeHggPSByeHggPSBOVUxMOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3h4ID0g eGxzW3Rjc11bY3Npbl07ICAgICAgIC8qIHRyYW5zbGF0aW9uIGZ1bmN0aW9uICovCi0gICAgICAg ICAgICByeHggPSB4bHJbdGNzXVtjc291dF07ICAgICAgLyogcG9pbnRlcnMuICovCi0gICAgICAg ICAgICBpZiAocnh4ID09IHpsMWFzKSByeHggPSB4bDFhczsKLSAgICAgICAgfQotICAgIH0KLSAg ICB3aGlsZSAoKGMgPSB6bWluY2hhcigpKSAhPSAtMSkgeyAvKiBMb29wIGZvciBhbGwgY2hhcmFj dGVycyBpbiBmaWxlICovCi0gICAgICAgIGlmICh0cl9pbnQpIHsgICAgICAgICAgICAgICAgICAg LyogSW50ZXJydXB0ZWQ/ICovCi0gICAgICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAg ICAgLyogUHJpbnQgbWVzc2FnZSAqLwotICAgICAgICAgICAgeiA9IDA7Ci0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3h4KSBjID0gKCpzeHgpKChDSEFSKWMpOyAg IC8qIEZyb20gZmNzMSB0byB0Y3MgKi8KLSAgICAgICAgaWYgKHJ4eCkgYyA9ICgqcnh4KSgoQ0hB UiljKTsgICAvKiBmcm9tIHRjcyB0byBmY3MyICovCi0gICAgICAgIGlmICh6Y2hvdXQoZmlsZWNv ZGUsKGNoYXIpYykgPCAwKSB7IC8qIE91dHB1dCB4bGF0ZWQgY2hhcmFjdGVyICovCi0gICAgICAg ICAgICB6ID0gLTE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBn b3RvIHh4bGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb25lLiAqLwotCi0jZWxzZSAg LyogVU5JQ09ERSAqLwotLyoKLSAgIFVzZSBVbmljb2RlIGFzIHRoZSBpbnRlcm1lZGlhdGUgY2hh cmFjdGVyIHNldC4gIEl0J3Mgc2ltcGxlIGFuZCBnaXZlcwotICAgbGl0dGxlIG9yIG5vIGxvc3Ms IGJ1dCB0aGUgb3ZlcmhlYWQgaXMgYSBiaXQgaGlnaGVyLgotKi8KLSAgICBpbml0eGxhdGUoY3Np bixjc291dCk7ICAgICAgICAgICAgICAvKiBTZXQgdXAgdHJhbnNsYXRpb24gZnVuY3Rpb25zICov Ci0KLSAgICBpZiAoeGxhdHlwZSA9PSBYTEFfTk9ORSkgewotICAgICAgICB3aGlsZSAoKGMgPSB6 bWluY2hhcigpKSAhPSAtMSkgeyAvKiBMb29wIGZvciBhbGwgY2hhcmFjdGVycyBpbiBmaWxlICov Ci0gICAgICAgICAgICBpZiAodHJfaW50KSB7ICAgICAgICAgICAgICAgLyogSW50ZXJydXB0ZWQ/ ICovCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgLyogUHJpbnQgbWVz c2FnZSAqLwotICAgICAgICAgICAgICAgIHogPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHpjaG91dChmaWxlY29kZSwoY2hhciljKSA8 IDApIHsgLyogT3V0cHV0IHhsYXRlZCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgICAgICB6ID0g LTE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICAgICAgZ290byB4eGxhdGU7ICAgICAgICAgICAgICAgICAgICAvKiBEb25lLiAqLwotICAgIH0K LQotCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICBpZiAoY3NvdXQgPT0gRkNfVUNT MiAmJiAgICAgICAgICAgICAvKiB3ZSdyZSB0cmFuc2xhdGluZyB0byBVQ1MtMiAqLwotICAgICAg ICBmaWxlY29kZSA9PSBaQ1RFUk0gJiYgICAgICAgICAgIC8qIGZvciB0aGUgcmVhbCBzY3JlZW4u Li4gKi8KLSAgICAgICAgIWs5NXN0ZG91dCAmJiAhaW5zZXJ2ZXIKLSAgICAgICAgKSB7Ci0gICAg ICAgIHVuaW9uIHsKLSAgICAgICAgICAgIFVTSE9SVCB1Y3MyOwotICAgICAgICAgICAgVUNIQVIg IGJ5dGVzWzJdOwotICAgICAgICB9IG91dHB1dDsKLQotICAgICAgICB3aGlsZSAoMSkgeyAgICAg ICAgICAgICAgICAgICAgIC8qIEluIHRoaXMgY2FzZSB3ZSBnbyB0d28tYnktdHdvLiAqLwotICAg ICAgICAgICAgaWYgKChjID0geGduYnl0ZShGQ19VQ1MyLGNzaW4sTlVMTCkpIDwgMCkKLSAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBvdXRwdXQuYnl0ZXNbMF0gPSBjOwotICAgICAg ICAgICAgaWYgKChjID0geGduYnl0ZShGQ19VQ1MyLGNzaW4sTlVMTCkpIDwgMCkKLSAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBvdXRwdXQuYnl0ZXNbMV0gPSBjOwotCi0gICAgICAg ICAgICBpZiAodHJfaW50KSB7ICAgICAgICAgICAgICAgLyogSW50ZXJydXB0ZWQ/ICovCi0gICAg ICAgICAgICAgICAgcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgLyogUHJpbnQgbWVzc2FnZSAqLwot ICAgICAgICAgICAgICAgIHogPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgfQotCi0gICAgICAgICAgICBWc2NybldydFVDUzJTdHJBdHQoVkNNRCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmb3V0cHV0LnVjczIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZXlbVkNNRF0s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmV4W1ZDTURdLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZjb2xvcmNtZAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRp ZiAvKiBOT0xPQ0FMICovCi0KLSAgICAgIC8qIEdlbmVyYWwgY2FzZTogR2V0IG5leHQgYnl0ZSB0 cmFuc2xhdGVkIGZyb20gZmNzIHRvIFVDUy0yICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgICB3 aGlsZSAoKGMgPSB4Z25ieXRlKEZDX1VDUzIsY3NpbixOVUxMKSkgPiAtMSAmJgotICAgICAgICAg ICAgICAoYzIgPSB4Z25ieXRlKEZDX1VDUzIsY3NpbixOVUxMKSkgPiAtMSkgewotICAgICAgICAg IGV4dGVybiBpbnQgZmlsZW9yZGVyOwotCi0gICAgICAgICAgaWYgKHRyX2ludCkgeyAgICAgICAg ICAgICAgICAgLyogSW50ZXJydXB0ZWQ/ICovCi0gICAgICAgICAgICAgIHByaW50ZigiXkMuLi5c biIpOyAgICAgICAgLyogUHJpbnQgbWVzc2FnZSAqLwotICAgICAgICAgICAgICB6ID0gMDsKLSAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGRlYnVnKEYwMDEsIlhM QVRFIGMiLCIiLGMpOwotICAgICAgICAgIGRlYnVnKEYwMDEsIlhMQVRFIGMyIiwiIixjMik7Ci0K LSAgICAgICAgICAvKiBBbmQgdGhlbiBzZW5kIFVDUy0yIGJ5dGUgdG8gdHJhbnNsYXRlLWFuZC1v dXRwdXQgbWFjaGluZSAqLwotCi0gICAgICAgICAgaWYgKCh4ID0geHBuYnl0ZShmaWxlb3JkZXI/ YzI6YyxUQ19VQ1MyLGNzb3V0LGZuKSkgPCAwKSB7Ci0gICAgICAgICAgICAgIHogPSAtMTsKLSAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICgoeCA9IHhwbmJ5 dGUoZmlsZW9yZGVyP2M6YzIsVENfVUNTMixjc291dCxmbikpIDwgMCkgewotICAgICAgICAgICAg ICB6ID0gLTE7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgIH0KLSNl bHNlCi0gICAgd2hpbGUgKChjID0geGduYnl0ZShGQ19VQ1MyLGNzaW4sTlVMTCkpID4gLTEpIHsK LSAgICAgICAgICBpZiAodHJfaW50KSB7ICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRlZD8g Ki8KLSAgICAgICAgICAgICAgcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgICAvKiBQcmludCBtZXNz YWdlICovCi0gICAgICAgICAgICAgIHogPSAwOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICB9Ci0gICAgICAgICAgaWYgKCh4ID0geHBuYnl0ZShjLFRDX1VDUzIsY3NvdXQsZm4pKSA8 IDApIHsKLSAgICAgICAgICAgICAgeiA9IC0xOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICB9Ci0gICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jZW5kaWYgLyogVU5JQ09E RSAqLwotCi0gIHh4bGF0ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbW9u IGV4aXQgcG9pbnQgKi8KLQotI2lmbmRlZiBBTUlHQQotI2lmbmRlZiBNQUMKLSAgICBzaWduYWwo U0lHSU5ULG9sZHNpZyk7ICAgICAgICAgICAgICAvKiBQdXQgb2xkIHNpZ25hbCBhY3Rpb24gYmFj ay4gKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBBTUlHQSAqLwotICAgIHRyX2ludCA9 IDA7Ci0gICAgaWYgKHogPCAwKSB7Ci0gICAgICAgIGlmICh6ID09IC0xKQotICAgICAgICAgIHBy aW50ZigiP0ZpbGUgb3V0cHV0IGVycm9yOiAlc1xuIixja19lcnJzdHIoKSk7Ci0gICAgICAgIHog PSAwOwotICAgIH0KLSAgICB6Y2xvc2UoWklGSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBD bG9zZSBmaWxlcyAqLwotICAgIHpjbG9zZShmaWxlY29kZSk7ICAgICAgICAgICAgICAgICAgIC8q IC4uLiAqLwotICAgIHJldHVybihzdWNjZXNzID0geik7ICAgICAgICAgICAgICAgIC8qIGFuZCBy ZXR1cm4gc3RhdHVzLiAqLwotfQotCi1pbnQKLWRveGxhdGUoKSB7Ci0jaWZkZWYgT1MyT05MWQot ICAgIGV4dGVybiBpbnQgdHRfZm9udDsKLSNlbmRpZiAvKiBPUzJPTkxZICovCi0jaWZkZWYgVU5J WAotICAgIGV4dGVybiBjaGFyICoqIG10Y2hzOyAgICAgICAgICAgICAgIC8qIHp4cGFuZCgpIGZp bGUgbGlzdCAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICBpbnQgeCwgeSwgaW5jcywgb3V0Y3Ms IG11bHRpcGxlID0gMCwgd2lsZCA9IDAsIGZjID0gMCwgbGVuID0gMDsKLSAgICBpbnQgb2Zpc2Rp ciA9IDA7Ci0gICAgY2hhciAqIHMsICogdG9jcyA9ICIiOwotCi0gICAgaWYgKCh4ID0gY21pZmko IkZpbGUocykgdG8gdHJhbnNsYXRlIiwiIiwmcywmd2lsZCx4eHN0cmluZykpIDwgMCkgewotICAg ICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgcHJpbnRmKCI/TmFtZSBvZiBhbiBleGlz dGluZyBmaWxlXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0gZWxzZQot ICAgICAgICAgIHJldHVybih4KTsKLSAgICB9Ci0gICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZT SVopOyAgICAgICAgLyogU2F2ZSBjb3B5IG9mIHN0cmluZyBqdXN0IHBhcnNlZC4gKi8KLQotICAg IGlmICgoaW5jcyA9IGNta2V5KGZjc3RhYixuZmlsYywiZnJvbSBjaGFyYWN0ZXItc2V0IiwiIix4 eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybihpbmNzKTsKLQotI2lmZGVmIE9TMgotICAgIGlm IChpc3VuaWNvZGUoKSkKLSAgICAgIHRvY3MgPSAidWNzMiI7Ci0gICAgZWxzZQotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgdG9jcyA9IGdldGRjc2V0KCk7Ci0KLSAgICBpZiAoKG91dGNzID0gY21r ZXkoZmNzdGFiLG5maWxjLCJ0byBjaGFyYWN0ZXItc2V0Iix0b2NzLHh4c3RyaW5nKSkgPCAwKQot ICAgICAgcmV0dXJuKG91dGNzKTsKLSAgICBpZiAoKHggPSBjbW9maSgib3V0cHV0IGZpbGUiLENU VE5BTSwmcyx4eHN0cmluZykpIDwgMCkgcmV0dXJuKHgpOwotICAgIGlmICh4ID4gMSkKLSAgICAg IG9maXNkaXIgPSAxOwotCi0gICAgbGVuID0gY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7 Ci0gICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7ICAgLyogQ29uZmlybSB0aGUg Y29tbWFuZCAqLwotCi0gICAgaWYgKGxlbiA8IDEpCi0gICAgICByZXR1cm4oLTIpOwotCi0gICAg aWYgKG9maXNkaXIpCi0gICAgICBtdWx0aXBsZSA9IDI7Ci0gICAgZWxzZSBpZiAod2lsZCkgewot ICAgICAgICBpZiAoaXNkaXIodG1wYnVmKSkKLSAgICAgICAgICBtdWx0aXBsZSA9IDI7Ci0gICAg ICAgIGVsc2UgaWYgKCFzdHJjbXAodG1wYnVmLENUVE5BTSkpCi0gICAgICAgICAgbXVsdGlwbGUg PSAxOwotI2lmZGVmIE9TMgotICAgICAgICBlbHNlIGlmICghc3RyaWNtcCh0bXBidWYsImNvbiIp IHx8ICFzdHJpY21wKHRtcGJ1ZiwiY29uOiIpKQotICAgICAgICAgIG11bHRpcGxlID0gMTsKLSNl bHNlCi0jaWZkZWYgVU5JWE9ST1NLCi0gICAgICAgIGVsc2UgaWYgKCFzdHJuY21wKHRtcGJ1Ziwi L2Rldi8iLDQpKQotICAgICAgICAgIG11bHRpcGxlID0gMTsKLSNlbmRpZiAvKiBVTklYT1JPU0sg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgaWYgKCFtdWx0aXBsZSkgewotICAgICAgICAg ICAgcHJpbnRmKCI/QSBzaW5nbGUgZmlsZSBwbGVhc2VcbiIpOwotICAgICAgICAgICAgcmV0dXJu KC05KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIW11bHRpcGxlKSB7ICAgICAgICAgICAg ICAgICAgICAvKiBKdXN0IG9uZSBmaWxlICovCi0gICAgICAgIHJldHVybihzdWNjZXNzID0geGxh dGUobGluZSx0bXBidWYsaW5jcyxvdXRjcykpOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFRyYW5zbGF0ZSBtdWx0aXBsZSBmaWxlcyAqLwotICAgICAgICBjaGFy IGRpcmJ1ZltDS01BWFBBVEgrNF07Ci0gICAgICAgIGludCBrOwotI2lmbmRlZiBaWFJFV0lORAot ICAgICAgICBpbnQgZmxhZ3MgPSBaWF9GSUxPTkxZOwotI2VuZGlmIC8qIFpYUkVXSU5EICovCi0K LSAgICAgICAgaWYgKG11bHRpcGxlID09IDIpIHsgICAgICAgICAgICAvKiBUYXJnZXQgaXMgYSBk aXJlY3RvcnkgKi8KLSAgICAgICAgICAgIGsgPSBja3N0cm5jcHkoZGlyYnVmLHRtcGJ1ZixDS01B WFBBVEgrMSkgLSAxOwotICAgICAgICAgICAgaWYgKGsgPCAwKQotICAgICAgICAgICAgICByZXR1 cm4oLTIpOwotI2lmZGVmIE9TMk9SVU5JWAotICAgICAgICAgICAgaWYgKGRpcmJ1ZltrXSAhPSAn LycpIHsKLSAgICAgICAgICAgICAgICBkaXJidWZbaysxXSA9ICcvJzsKLSAgICAgICAgICAgICAg ICBkaXJidWZbaysyXSA9IE5VTDsKLSAgICAgICAgICAgIH0KLSNlbHNlCi0jaWZkZWYgT1NLCi0g ICAgICAgICAgICBpZiAoZGlyYnVmW2tdICE9ICcvJykgewotICAgICAgICAgICAgICAgIGRpcmJ1 ZltrKzFdID0gJy8nOwotICAgICAgICAgICAgICAgIGRpcmJ1ZltrKzJdID0gTlVMOwotICAgICAg ICAgICAgfQotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAgICAgICAgIGlmIChja21hdGNoKCIqLkRJ UjsxIixzLDAsMCkpCi0gICAgICAgICAgICAgIGsgPSBjdnRkaXIodG1wYnVmLGRpcmJ1ZixUTVBC VUZTSVopOwotICAgICAgICAgICAgaWYgKGRpcmJ1ZltrXSAhPSAnXScgJiYKLSAgICAgICAgICAg ICAgICBkaXJidWZba10gIT0gJz4nICYmCi0gICAgICAgICAgICAgICAgZGlyYnVmW2tdICE9ICc6 JykKLSAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwK LSAgICAgICAgICAgIGlmIChkaXJidWZba10gIT0gJzonKSB7Ci0gICAgICAgICAgICAgICAgZGly YnVmW2srMV0gPSAnOic7Ci0gICAgICAgICAgICAgICAgZGlyYnVmW2srMl0gPSBOVUw7Ci0gICAg ICAgICAgICB9Ci0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLSAgICAgICAgICAgIGlmIChkaXJidWZb a10gIT0gJz4nKSB7Ci0gICAgICAgICAgICAgICAgZGlyYnVmW2srMV0gPSAnPic7Ci0gICAgICAg ICAgICAgICAgZGlyYnVmW2srMl0gPSBOVUw7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogU1RS QVRVUyAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5k aWYgLyogT1NLICovCi0jZW5kaWYgLyogT1MyT1JVTklYICovCi0gICAgICAgIH0KLQotI2lmZGVm IFpYUkVXSU5ECi0gICAgICAgIGZjID0genhyZXdpbmQoKTsgICAgICAgICAgICAgICAgLyogUmV3 aW5kIHRoZSBmaWxlIGxpc3QgKi8KLSNlbHNlCi0gICAgICAgIGlmIChtYXRjaGRvdCkgIGZsYWdz IHw9IFpYX01BVENIRE9UOwotICAgICAgICBmYyA9IG56eHBhbmQobGluZSxmbGFncyk7Ci0jZW5k aWYgLyogWlhSRVdJTkQgKi8KLQotICAgICAgICBpZiAoZmMgPCAxKSB7Ci0gICAgICAgICAgICBw cmludGYoIj9XaWxkY2FyZCBleHBhbnNpb24gZXJyb3JcbiIpOwotICAgICAgICAgICAgcmV0dXJu KC05KTsKLSAgICAgICAgfQotI2lmZGVmIFVOSVgKLSAgICAgICAgc2hfc29ydChtdGNocyxOVUxM LGZjLDAsMCxmaWxlY2FzZSk7IC8qIFNvcnQgdGhlIGZpbGUgbGlzdCAqLwotI2VuZGlmIC8qIFVO SVggKi8KLQotICAgICAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIExvb3Ag dGhyb3VnaCB0aGUgZmlsZXMgKi8KLSAgICAgICAgICAgIHpuZXh0KGxpbmUpOwotICAgICAgICAg ICAgaWYgKCFsaW5lWzBdKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICht dWx0aXBsZSA9PSAyKQotICAgICAgICAgICAgICBja21ha21zZyh0bXBidWYsVE1QQlVGU0laLGRp cmJ1ZixsaW5lLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICBpZiAoeGxhdGUobGluZSx0bXBidWYs aW5jcyxvdXRjcykgPCAxKQotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAg ICAgICB9Ci0gICAgfQotICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci19Ci0jZW5kaWYgLyogTk9D U0VUUyAqLwotCi1zdGF0aWMgY2hhciBob21wdGhidWZbQ0tNQVhQQVRIKzFdOwotCi1jaGFyICoK LWhvbWVwYXRoKCkgewotICAgIGludCB4OwotICAgIGV4dGVybiBjaGFyICogbXlob21lOwotICAg IGNoYXIgKiBoOwotCi0gICAgaCA9IG15aG9tZSA/IG15aG9tZSA6IHpob21lKCk7Ci0gICAgaG9t cHRoYnVmWzBdID0gTlVMOwotI2lmZGVmIFVOSVhPUk9TSwotICAgIHggPSBja3N0cm5jcHkoaG9t cHRoYnVmLGgsQ0tNQVhQQVRIKzEpOwotICAgIGlmICh4IDw9IDApIHsKLSAgICAgICAgaG9tcHRo YnVmWzBdID0gJy8nOwotICAgICAgICBob21wdGhidWZbMV0gPSBOVUw7Ci0gICAgfSBlbHNlIGlm ICh4IDwgQ0tNQVhQQVRIIC0gMiAmJiBob21wdGhidWZbeC0xXSAhPSAnLycpIHsKLSAgICAgICAg aG9tcHRoYnVmW3hdID0gJy8nOwotICAgICAgICBob21wdGhidWZbeCsxXSA9IE5VTDsKLSAgICB9 Ci0gICAgcmV0dXJuKGhvbXB0aGJ1Zik7Ci0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLSAgICBpZiAo c3RybGVuKGgpIDwgQ0tNQVhQQVRIKQotICAgICAgc3ByaW50Zihob21wdGhidWYsIiVzPiIsaCk7 CS8qIFNBRkUgKi8KLSAgICByZXR1cm4oaG9tcHRoYnVmKTsKLSNlbHNlCi0gICAgcmV0dXJuKGgp OwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLX0KLQotLyog IEQgTyBMIE8gRyAgLS0gIERvIHRoZSBsb2cgY29tbWFuZCAgKi8KLQotaW50Ci1kb2xvZyh4KSBp bnQgeDsgewotICAgIGludCB5LCBkaXNwOyBjaGFyICpzID0gTlVMTCwgKiBwID0gTlVMTCwgKiBx ID0gTlVMTDsKLSAgICBleHRlcm4gaW50IGlzZ3Vlc3Q7Ci0jaWZkZWYgWkZOUUZQCi0gICAgc3Ry dWN0IHpmbmZwICogZm5wOwotI2VuZGlmIC8qIFpGTlFGUCAqLwotCi0gICAgaWYgKGlzZ3Vlc3Qp IHsKLSAgICAgICAgcHJpbnRmKCI/QW5vbnltb3VzIGxvZyBjcmVhdGlvbiBub3QgYWxsb3dlZFxu Iik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIHN3aXRjaCAoeCkgeyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFdoaWNoIGxvZy4uLiAqLwotCi0jaWZkZWYgREVCVUcKLSAgICAg IGNhc2UgTE9HRDoKLSAgICAgICAgcSA9ICJkZWJ1Zy5sb2ciOwotICAgICAgICB5ID0gY21vZmko Ik5hbWUgb2YgZGVidWdnaW5nIGxvZyBmaWxlIixxLCZzLHh4c3RyaW5nKTsKLSAgICAgICAgYnJl YWs7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotICAgICAgY2FzZSBMT0dQOgotICAgICAgICBxID0g InBhY2tldC5sb2ciOwotICAgICAgICB5ID0gY21vZmkoIk5hbWUgb2YgcGFja2V0IGxvZyBmaWxl IixxLCZzLHh4c3RyaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZm5kZWYgTk9MT0NBTAotICAg ICAgY2FzZSBMT0dTOgotICAgICAgICBxID0gInNlc3Npb24ubG9nIjsKLSAgICAgICAgeSA9IGNt b2ZpKCJOYW1lIG9mIHNlc3Npb24gbG9nIGZpbGUiLHEsJnMseHhzdHJpbmcpOwotICAgICAgICBi cmVhazsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRlZiBUTE9HCi0gICAgICBjYXNlIExP R1Q6Ci0gICAgICAgIHEgPSAidHJhbnNhY3QubG9nIjsKLSAgICAgICAgeSA9IGNtb2ZpKCJOYW1l IG9mIHRyYW5zYWN0aW9uIGxvZyBmaWxlIixxLCZzLHh4c3RyaW5nKTsKLSAgICAgICAgYnJlYWs7 Ci0jZW5kaWYgLyogVExPRyAqLwotCi0jaWZkZWYgQ0tMT0dESUFMCi0gICAgICBjYXNlIExPR006 IHsKLSAgICAgICAgICBpbnQgbSwgbjsKLSAgICAgICAgICBjaGFyIG15cGF0aFtDS01BWFBBVEgr MV07Ci0gICAgICAgICAgcSA9IENYTE9HRklMRTsKLSAgICAgICAgICBtID0gY2tzdHJuY3B5KG15 cGF0aCxob21lcGF0aCgpLENLTUFYUEFUSCk7Ci0gICAgICAgICAgbiA9IHN0cmxlbihDWExPR0ZJ TEUpOwotICAgICAgICAgIGlmIChtICsgbiA8IENLTUFYUEFUSCkKLSAgICAgICAgICAgIGNrc3Ry bmNhdChteXBhdGgsQ1hMT0dGSUxFLENLTUFYUEFUSCk7Ci0gICAgICAgICAgZWxzZQotICAgICAg ICAgICAgY2tzdHJuY3B5KG15cGF0aCxDWExPR0ZJTEUsQ0tNQVhQQVRIKTsKLSAgICAgICAgICB5 ID0gY21vZmkoIk5hbWUgb2YgY29ubmVjdGlvbiBsb2cgZmlsZSIsbXlwYXRoLCZzLHh4c3RyaW5n KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLQot ICAgICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRmKCJcbj9Vbmtub3duIGxvZyBkZXNpZ25hdG9y IC0gJWRcbiIseCk7Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotICAgIGlmICh5IDwgMCkg cmV0dXJuKHkpOwotICAgIGlmICh5ID09IDIpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElm IHRoZXkgZ2F2ZSBhIGRpcmVjdG9yeSBuYW1lICovCi0gICAgICAgIGludCBrOwotICAgICAgICBj aGFyICogZHMgPSAiLyI7Ci0gICAgICAgIGsgPSBzdHJsZW4ocyk7Ci0gICAgICAgIGlmIChrID4g MCAmJiBzW2stMV0gPT0gJy8nKSBkcyA9ICIiOwotICAgICAgICBja21ha21zZyh0bXBidWYsVE1Q QlVGU0laLHMsZHMscSxOVUxMKTsKLSAgICAgICAgcyA9IHRtcGJ1ZjsKLSAgICB9Ci0jaWZkZWYg WkZOUUZQCi0jaWZkZWYgT1MyT1JVTklYCi0gICAgaWYgKCpzICE9ICd8JykgICAgICAgICAgICAg ICAgICAgICAgLyogQWxsb3cgZm9yIHBpcGVzICovCi0jZWxzZQotI2lmZGVmIE9TSwotICAgIGlm ICgqcyAhPSAnfCcpCi0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogT1MyT1JVTklYICovCi0g ICAgICBpZiAoKGZucCA9IHpmbnFmcChzLFRNUEJVRlNJWiAtIDEsdG1wYnVmKSkpIHsKLSAgICAg ICAgICBpZiAoZm5wLT5mcGF0aCkKLSAgICAgICAgICAgIGlmICgoaW50KSBzdHJsZW4oZm5wLT5m cGF0aCkgPiAwKQotICAgICAgICAgICAgICBzID0gZm5wLT5mcGF0aDsKLSAgICAgIH0gLyogZWxz ZSBpZiBlcnJvciBrZWVwIG9yaWdpbmFsIHN0cmluZyAqLwotI2VuZGlmIC8qIFpGTlFGUCAqLwot Ci0gICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotICAgIHMgPSBsaW5lOwotI2lmZGVm IE1BQwotICAgIHkgPSAwOwotI2Vsc2UKLQotICAgIHAgPSAibmV3IjsKLSNpZmRlZiBUTE9HCi0g ICAgaWYgKCh4ID09IExPR1QgJiYgdGxvZ2ZtdCA9PSAyKSB8fCB4ID09IExPR00pCi0gICAgICBw ID0gImFwcGVuZCI7Ci0jZW5kaWYgLyogVExPRyAqLwotCi0gICAgaWYgKCh5ID0gY21rZXkoZGlz cHRiLDIsIkRpc3Bvc2l0aW9uIixwLHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHkpOwot I2VuZGlmIC8qIE1BQyAqLwotICAgIGRpc3AgPSB5OwotICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHkpOwotCi0gICAgc3dpdGNoICh4KSB7Ci0KLSNpZmRlZiBERUJVRwotICAgICAg Y2FzZSBMT0dEOgotICAgICAgICByZXR1cm4oZGVibG9nID0gZGVib3BuKHMsZGlzcCkpOwotI2Vu ZGlmIC8qIERFQlVHICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgICBjYXNlIExPR1A6Ci0gICAg ICAgIHJldHVybihwa3Rsb2cgPSBwa3RvcG4ocyxkaXNwKSk7Ci0jZW5kaWYgLyogTk9YRkVSICov Ci0KLSNpZm5kZWYgTk9MT0NBTAotICAgICAgY2FzZSBMT0dTOgotICAgICAgICBzZXRzZXNsb2co c2Vzb3BuKHMsZGlzcCkpOwotICAgICAgICByZXR1cm4oc2VzbG9nKTsKLSNlbmRpZiAvKiBOT0xP Q0FMICovCi0KLSNpZmRlZiBUTE9HCi0gICAgICBjYXNlIExPR1Q6Ci0gICAgICAgIHJldHVybih0 cmFsb2cgPSB0cmFvcG4ocyxkaXNwKSk7Ci0jZW5kaWYgLyogVExPRyAqLwotCi0jaWZkZWYgQ0tM T0dESUFMCi0gICAgICBjYXNlIExPR006Ci0gICAgICAgIHJldHVybihkaWFsb2cgPSBkaWFvcG4o cyxkaXNwLDApKTsKLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLQotICAgICAgZGVmYXVsdDoKLSAg ICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci19Ci0KLSNpZm5kZWYgTk9YRkVSCi1pbnQKLXBrdG9w bihzLGRpc3ApIGNoYXIgKnM7IGludCBkaXNwOyB7Ci0gICAgc3RhdGljIHN0cnVjdCBmaWxpbmZv IHh4OwotCi0gICAgaWYgKCFzKQotICAgICAgcyA9ICIiOwotICAgIGlmICghKnMpCi0gICAgICBy ZXR1cm4oMCk7Ci0KLSAgICBkZWJ1ZyhGMTExLCJwa3RvcG4iLHMsZGlzcCk7Ci0KLSAgICB6Y2xv c2UoWlBGSUxFKTsKLQotI2lmZGVmIE9TMk9SVU5JWAotICAgIGlmIChzWzBdID09ICd8JykgeyAg ICAgICAgICAgICAgICAgIC8qIFBpcGUgKi8KLSAgICAgICAgY2hhciAqIHAgPSBzICsgMTsKLSAg ICAgICAgZGVidWcoRjExMCwicGt0b3BuIHAiLHAsMCk7Ci0gICAgICAgIHdoaWxlICgqcCkgewot ICAgICAgICAgICAgaWYgKCpwICE9ICcgJykKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICBlbHNlCi0gICAgICAgICAgICAgIHArKzsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhG MTEwLCJwa3RvcG4gcGlwZSIscCwwKTsKLSAgICAgICAgcGt0bG9nID0genhjbWQoWlBGSUxFLHAp OwotICAgICAgICBkZWJ1ZyhGMTAxLCJwa3RvcG4gc2VzbG9nIiwiIixzZXNsb2cpOwotICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgKi8KLSNlbmRpZiAvKiBP UzJPUlVOSVggKi8KLSAgICAgICAgaWYgKGRpc3ApIHsKLSAgICAgICAgICAgIHh4LmJzID0gMDsg eHguY3MgPSAwOyB4eC5ybCA9IDA7IHh4Lm9yZyA9IDA7IHh4LmNjID0gMDsKLSAgICAgICAgICAg IHh4LnR5cCA9IDA7IHh4LmRzcCA9IFhZRlpfQTsgeHgub3Nfc3BlY2lmaWMgPSAiIjsKLSAgICAg ICAgICAgIHh4LmxibG9wdHMgPSAwOwotICAgICAgICAgICAgcGt0bG9nID0gem9wZW5vKFpQRklM RSxzLE5VTEwsJnh4KTsKLSAgICAgICAgfSBlbHNlIHBrdGxvZyA9IHpvcGVubyhaUEZJTEUscyxO VUxMLE5VTEwpOwotICAgICAgICBpZiAoIXBrdGxvZyAmJiAhcXVpZXQpCi0gICAgICAgICAgcHJp bnRmKCI/JXMgLSAlc1xuIixzLGNrX2VycnN0cigpKTsKLSNpZmRlZiBPUzJPUlVOSVgKLSAgICB9 Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0gICAgaWYgKHBrdGxvZyA+IDApCi0gICAgICBja3N0 cm5jcHkocGt0ZmlsLHMsQ0tNQVhQQVRIKzEpOwotICAgIGVsc2UKLSAgICAgICpwa3RmaWwgPSAn XDAnOwotICAgIHJldHVybihwa3Rsb2cpOwotfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi1pbnQK LXRyYW9wbihzLGRpc3ApIGNoYXIgKnM7IGludCBkaXNwOyB7Ci0jaWZkZWYgVExPRwotICAgIHN0 YXRpYyBzdHJ1Y3QgZmlsaW5mbyB4eDsKLQotICAgIGlmICghcykKLSAgICAgIHMgPSAiIjsKLSAg ICBpZiAoISpzKQotICAgICAgcmV0dXJuKDApOwotCi0gICAgZGVidWcoRjExMSwidHJhb3BuIixz LGRpc3ApOwotICAgIGRlYnVnKEYxMDEsInRyYW9wbiB0bG9nZm10IiwiIix0bG9nZm10KTsKLQot ICAgIHpjbG9zZShaVEZJTEUpOwotCi0jaWZkZWYgT1MyT1JVTklYCi0gICAgaWYgKHRsb2dmbXQg PT0gMikgeyAgICAgICAgICAgICAgICAgLyogRlRQIGZvcm1hdCBpcyBzcGVjaWFsLi4uICovCi0g ICAgICAgIFZPSUQgZG9pa2xvZygpOwotICAgICAgICBpZiAoIWRpc3ApICAgICAgICAgICAgICAg ICAgICAgIC8qIEFwcGVuZD8gKi8KLSAgICAgICAgICBpZiAoemNoa2kocykgPiAtMSkgICAgICAg ICAgICAvKiBObyAtIGRvZXMgZmlsZSBleGlzdD8gKi8KLSAgICAgICAgICAgIChWT0lEKSB6ZGVs ZXQocyk7ICAgICAgICAgICAvKiBZZXMgLSBkZWxldGUgaXQuICovCi0gICAgICAgIHhmZXJsb2cg PSAxOwotICAgICAgICBja3N0cm5jcHkodHJhZmlsLHMsQ0tNQVhQQVRIKTsKLSAgICAgICAgbWFr ZXN0cigmeGZlcmZpbGUscyk7Ci0gICAgICAgIGRvaWtsb2coKTsKLSAgICAgICAgcmV0dXJuKDEp OwotICAgIH0KLSAgICBpZiAoc1swXSA9PSAnfCcpIHsgICAgICAgICAgICAgICAgICAvKiBQaXBl ICovCi0gICAgICAgIGNoYXIgKiBwID0gcyArIDE7Ci0gICAgICAgIGRlYnVnKEYxMTAsInRyYW9w biBwIixwLDApOwotICAgICAgICB3aGlsZSAoKnApIHsKLSAgICAgICAgICAgIGlmICgqcCAhPSAn ICcpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg ICBwKys7Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMCwidHJhb3BuIHBpcGUiLHAsMCk7 Ci0gICAgICAgIHRyYWxvZyA9IHp4Y21kKFpURklMRSxwKTsKLSAgICAgICAgZGVidWcoRjEwMSwi dHJhb3BuIHRyYWxvZyIsIiIsdHJhbG9nKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyT1JVTklYICov Ci0KLSAgICBpZiAoc1swXSAhPSAnfCcpIHsgICAgICAgICAgICAgICAgICAvKiBGaWxlICovCi0g ICAgICAgIGlmIChkaXNwKSB7Ci0gICAgICAgICAgICB4eC5icyA9IDA7IHh4LmNzID0gMDsgeHgu cmwgPSAwOyB4eC5vcmcgPSAwOyB4eC5jYyA9IDA7Ci0gICAgICAgICAgICB4eC50eXAgPSAwOyB4 eC5kc3AgPSBYWUZaX0E7IHh4Lm9zX3NwZWNpZmljID0gIiI7Ci0gICAgICAgICAgICB4eC5sYmxv cHRzID0gMDsKLSAgICAgICAgICAgIHRyYWxvZyA9IHpvcGVubyhaVEZJTEUscyxOVUxMLCZ4eCk7 Ci0gICAgICAgIH0gZWxzZSB0cmFsb2cgPSB6b3Blbm8oWlRGSUxFLHMsTlVMTCxOVUxMKTsKLSAg ICB9Ci0gICAgaWYgKCF0cmFsb2cgJiYgIXF1aWV0KQotICAgICAgcHJpbnRmKCI/JXMgLSAlc1xu IixzLGNrX2VycnN0cigpKTsKLSAgICBpZiAodHJhbG9nID4gMCAmJiB0bG9nZm10ID4gMCkgewot ICAgICAgICBja3N0cm5jcHkodHJhZmlsLHMsQ0tNQVhQQVRIKTsKLSAgICAgICAgdGxvZyhGMTEw LCJUcmFuc2FjdGlvbiBMb2c6Iix2ZXJzaW8sMEwpOwotI2lmbmRlZiBNQUMKLSAgICAgICAgdGxv ZyhGMTAwLGNreHN5cywiIiwwTCk7Ci0jZW5kaWYgLyogTUFDICovCi0gICAgICAgIHp0aW1lKCZz KTsKLSAgICAgICAgdGxvZyhGMTAwLHMsIiIsMEwpOwotICAgIH0gZWxzZQotICAgICAgKnRyYWZp bCA9ICdcMCc7Ci0gICAgcmV0dXJuKHRyYWxvZyk7Ci0jZWxzZQotICAgIHJldHVybigwKTsKLSNl bmRpZiAvKiBUTE9HICovCi19Ci0KLSNpZm5kZWYgTk9MT0NBTAotaW50Ci1zZXNvcG4ocyxkaXNw KSBjaGFyICogczsgaW50IGRpc3A7IHsKLSAgICBzdGF0aWMgc3RydWN0IGZpbGluZm8geHg7Ci0g ICAgZXh0ZXJuIGludCB0c3N0YXRlOwotCi0gICAgdHNzdGF0ZSA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogU2Vzc2lvbiBsb2cgdGltZXN0YW1wIHN0YXRlICovCi0KLSAgICBpZiAoIXMp Ci0gICAgICBzID0gIiI7Ci0gICAgaWYgKCEqcykKLSAgICAgIHJldHVybigwKTsKLQotICAgIGRl YnVnKEYxMTEsInNlc29wbiIscyxkaXNwKTsKLQotICAgIHpjbG9zZShaU0ZJTEUpOwotCi0jaWZk ZWYgT1MyT1JVTklYCi0gICAgaWYgKHNbMF0gPT0gJ3wnKSB7ICAgICAgICAgICAgICAgICAgLyog UGlwZSAqLwotICAgICAgICBjaGFyICogcCA9IHMgKyAxOwotICAgICAgICBkZWJ1ZyhGMTEwLCJz ZXNvcG4gcCIscCwwKTsKLSAgICAgICAgd2hpbGUgKCpwKSB7Ci0gICAgICAgICAgICBpZiAoKnAg IT0gJyAnKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg ICAgICAgcCsrOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMTAsInNlc29wbiBwaXBlIixw LDApOwotICAgICAgICBzZXRzZXNsb2coenhjbWQoWlNGSUxFLHApKTsKLSAgICAgICAgZGVidWco RjEwMSwic2Vzb3BuIHNlc2xvZyIsIiIsc2VzbG9nKTsKLSAgICB9IGVsc2UgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBGaWxlICovCi0jZW5kaWYgLyogT1MyT1JVTklYICovCi0gICAg ICAgIGlmIChkaXNwKSB7Ci0gICAgICAgICAgICB4eC5icyA9IDA7IHh4LmNzID0gMDsgeHgucmwg PSAwOyB4eC5vcmcgPSAwOyB4eC5jYyA9IDA7Ci0gICAgICAgICAgICB4eC50eXAgPSAwOyB4eC5k c3AgPSBYWUZaX0E7IHh4Lm9zX3NwZWNpZmljID0gIiI7Ci0gICAgICAgICAgICB4eC5sYmxvcHRz ID0gMDsKLSAgICAgICAgICAgIHNldHNlc2xvZyh6b3Blbm8oWlNGSUxFLHMsTlVMTCwmeHgpKTsK LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgc2V0c2VzbG9nKHpvcGVubyhaU0ZJTEUscyxOVUxM LE5VTEwpKTsKLSAgICAgICAgaWYgKCFzZXNsb2cgJiYgIXF1aWV0KQotICAgICAgICAgIHByaW50 ZigiPyVzIC0gJXNcbiIscyxja19lcnJzdHIoKSk7Ci0jaWZkZWYgT1MyT1JVTklYCi0gICAgfQot I2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotICAgIGlmIChzZXNsb2cgPiAwKQotICAgICAgY2tzdHJu Y3B5KHNlc2ZpbCxzLENLTUFYUEFUSCsxKTsKLSAgICBlbHNlCi0gICAgICAqc2VzZmlsID0gJ1ww JzsKLSAgICByZXR1cm4oc2VzbG9nKTsKLX0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jZW5kaWYg LyogTk9JQ1AgKi8KLQotaW50Ci1kZWJvcG4ocyxkaXNwKSBjaGFyICpzOyBpbnQgZGlzcDsgewot I2lmZGVmIERFQlVHCi0jaWZkZWYgQ0tfVVRTTkFNRQotICAgIGV4dGVybiBjaGFyIHVubV9tY2hb XSwgdW5tX25hbVtdLCB1bm1fcmVsW10sIHVubV92ZXJbXSwgdW5tX21vZFtdOwotI2VuZGlmIC8q IENLX1VUU05BTUUgKi8KLSNpZmRlZiBPUzIKLSAgICBleHRlcm4gY2hhciBja3hzeXN0ZW1bXTsK LSNlbmRpZiAvKiBPUzIgKi8KLSAgICBjaGFyICp0cDsKLSAgICBzdGF0aWMgc3RydWN0IGZpbGlu Zm8geHg7Ci0KLSAgICBpZiAoIXMpCi0gICAgICBzID0gIiI7Ci0gICAgaWYgKCEqcykKLSAgICAg IHJldHVybigwKTsKLQotICAgIHpjbG9zZShaREZJTEUpOwotCi0jaWZkZWYgT1MyT1JVTklYCi0g ICAgaWYgKHNbMF0gPT0gJ3wnKSB7ICAgICAgICAgICAgICAgICAgLyogUGlwZSAqLwotICAgICAg ICBjaGFyICogcCA9IHMgKyAxOwotICAgICAgICBkZWJ1ZyhGMTEwLCJkZWJvcG4gcCIscCwwKTsK LSAgICAgICAgd2hpbGUgKCpwKSB7Ci0gICAgICAgICAgICBpZiAoKnAgIT0gJyAnKQotICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcCsrOwotICAg ICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMTAsImRlYm9wbiBwaXBlIixwLDApOwotICAgICAgICBk ZWJsb2cgPSB6eGNtZChaREZJTEUscCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsImRlYm9wbiBkZWJs b2ciLCIiLGRlYmxvZyk7Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogRmlsZSAqLwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotICAgICAgICBpZiAoZGlzcCkgewot ICAgICAgICAgICAgeHguYnMgPSAwOyB4eC5jcyA9IDA7IHh4LnJsID0gMDsgeHgub3JnID0gMDsg eHguY2MgPSAwOwotICAgICAgICAgICAgeHgudHlwID0gMDsgeHguZHNwID0gWFlGWl9BOyB4eC5v c19zcGVjaWZpYyA9ICIiOwotICAgICAgICAgICAgeHgubGJsb3B0cyA9IDA7Ci0gICAgICAgICAg ICBkZWJsb2cgPSB6b3Blbm8oWkRGSUxFLHMsTlVMTCwmeHgpOwotICAgICAgICB9IGVsc2UKLSAg ICAgICAgICBkZWJsb2cgPSB6b3Blbm8oWkRGSUxFLHMsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYg KCFkZWJsb2cgJiYgIXF1aWV0KQotICAgICAgICAgIHByaW50ZigiPyVzIC0gJXNcbiIscyxja19l cnJzdHIoKSk7Ci0jaWZkZWYgT1MyT1JVTklYCi0gICAgfQotI2VuZGlmIC8qIE9TMk9SVU5JWCAq LwotICAgIGlmIChkZWJsb2cgPiAwKSB7Ci0gICAgICAgIGNrc3RybmNweShkZWJmaWwscyxDS01B WFBBVEgrMSk7Ci0gICAgICAgIGRlYnVnKEYxMTAsIkRlYnVnIExvZyAiLHZlcnNpbywwKTsKLSNp Zm5kZWYgTUFDCi0jaWZkZWYgT1MyCi0gICAgICAgIGRlYnVnKEYxMTAsY2t4c3lzLGNreHN5c3Rl bSwwKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICBkZWJ1ZyhGMTAwLGNreHN5cywiIiwwKTsK LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNpZmRlZiBDS19VVFNOQU1FCi0g ICAgICAgIGlmICh1bm1fbWNoWzBdKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ1bmFtZSBt YWNoaW5lIix1bm1fbWNoLDApOwotICAgICAgICAgICAgaWYgKHVubV9tb2RbMF0pCi0gICAgICAg ICAgICAgIGRlYnVnKEYxMTAsInVuYW1lIG1vZGVsICAiLHVubV9tb2QsMCk7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJ1bmFtZSBzeXNuYW1lIix1bm1fbmFtLDApOwotICAgICAgICAgICAgZGVi dWcoRjExMCwidW5hbWUgcmVsZWFzZSIsdW5tX3JlbCwwKTsKLSAgICAgICAgICAgIGRlYnVnKEYx MTAsInVuYW1lIHZlcnNpb24iLHVubV92ZXIsMCk7Ci0gICAgICAgIH0KLSNpZmRlZiBLVEFSR0VU Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgKiBzOyAgICAgICAgICAgICAgICAgICAvKiBN YWtlZmlsZSB0YXJnZXQgKi8KLSAgICAgICAgICAgIHMgPSBLVEFSR0VUOwotICAgICAgICAgICAg aWYgKCFzKSBzID0gIiI7Ci0gICAgICAgICAgICBpZiAoISpzKSBzID0gIih1bmtub3duKSI7Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJidWlsZCB0YXJnZXQiLHMsMCk7Ci0gICAgICAgIH0KLSNl bmRpZiAvKiBLVEFSR0VUICovCi0gICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgIHp0aW1lKCZ0 cCk7Ci0gICAgICAgIGRlYmxvZyA9IDE7Ci0gICAgICAgIGRlYnVnKEYxMDAsdHAsIiIsMCk7Ci0j ZW5kaWYgLyogVVRTTkFNRSAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJieXRlb3JkZXIiLCIiLGJ5 dGVvcmRlcik7Ci0jaWZuZGVmIE5PSUNQCi0jaWZuZGVmIE5PTE9DQUwKLSAgICAgICAgaWYgKGxv Y2FsKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJBY3RpdmUgY29ubmVjdGlvbjogIix0dG5h bWUsMCk7Ci0gICAgICAgICAgICBpZiAoIW5ldHdvcmspIHsKLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJTcGVlZCIsIiIsc3BlZWQpOwotICAgICAgICAgICAgICAgIGlmIChod3Bhcml0eSkK LSAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIlBhcml0eVtoYXJkd2FyZV0iLHBhcm5hbSgo Y2hhcilod3Bhcml0eSksMCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg ICAgZGVidWcoRjExMCwiUGFyaXR5IixwYXJuYW0oKGNoYXIpcGFyaXR5KSwwKTsKLSAgICAgICAg ICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIk1vZGVtIixn bWRtdHlwKCksMCk7Ci0gICAgICAgICAgICAgICAgZGVibG9nID0gMTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsIkFjdGl2ZSBjb25uZWN0 aW9uOiAiLCJub25lIiwwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNlbmRp ZiAvKiBOT0lDUCAqLwotICAgIH0gZWxzZSAqZGViZmlsID0gJ1wwJzsKLSAgICByZXR1cm4oZGVi bG9nKTsKLSNlbHNlCi0gICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIE1BQyAqLwotfQotCi0KLS8q ICBDIEsgRCBBIFQgRSAgLS0gIFJldHVybnMgY3VycmVudCBkYXRlL3RpbWUgaW4gc3RhbmRhcmQg Zm9ybWF0ICAqLwotCi1zdGF0aWMgY2hhciBub3didWZbMThdOwotCi1jaGFyICoKLWNrZGF0ZSgp IHsKLSAgICBleHRlcm4gc3RydWN0IGtleXRhYiBjbW9udGhzW107Ci0gICAgaW50IHg7Ci0gICAg Y2hhciAqIHQ7ICAgICAgICAgICAgICAgICAgIC8qIFN1YnN0aXR1dGUgdG9kYXkncyBkYXRlICov Ci0gICAgY2hhciBkYnVmWzMyXTsKLSAgICB6dGltZSgmdCk7Ci0KLS8qICAwMTIzNDU2Nzg5MDEy MzQ1Njc4OTAxMjMgKi8KLS8qICBTYXQgSnVsICA0IDEyOjE2OjQzIDE5OTggKi8KLQotICAgIGNr c3RybmNweShkYnVmLHQsMzIpOwotICAgIHQgPSBkYnVmOwotICAgIGRlYnVnKEYxMTAsImNrZGF0 ZSBkYnVmIixkYnVmLDApOwotICAgIG5vd2J1ZlswXSA9IHRbMjBdOwotICAgIG5vd2J1ZlsxXSA9 IHRbMjFdOwotICAgIG5vd2J1ZlsyXSA9IHRbMjJdOwotICAgIG5vd2J1ZlszXSA9IHRbMjNdOwot Ci0gICAgbm93YnVmWzRdID0gTlVMOwotICAgIGRlYnVnKEYxMTAsImNrZGF0ZSBub3didWYiLG5v d2J1ZiwwKTsKLQotICAgIHRbN10gPSBOVUw7Ci0gICAgaWYgKCh4ID0gbG9va3VwKGNtb250aHMs dCs0LDEyLE5VTEwpKSA8IDApIHsKLSAgICAgICAgZGVidWcoRjExMCwiY2tkYXRlIGJhZCBtb250 aCIsdCwwKTsKLSAgICAgICAgcmV0dXJuKCI8QkFEX01PTlRIPiIpOwotICAgIH0KLSAgICBzcHJp bnRmKG5vd2J1Zis0LCIlMDJkIix4KTsgICAgICAgICAvKiBTQUZFICovCi0gICAgbm93YnVmWzZd ID0gKHRbOF0gPT0gU1ApID8gJzAnIDogdFs4XTsKLSAgICBub3didWZbN10gPSB0WzldOwotICAg IG5vd2J1Zls4XSA9ICcgJzsKLQotICAgIG5vd2J1Zls5XSA9IE5VTDsKLSAgICBkZWJ1ZyhGMTEw LCJja2RhdGUgbm93YnVmIixub3didWYsMCk7Ci0KLSAgICBmb3IgKHggPSAxMTsgeCA8IDE5OyB4 KyspIG5vd2J1Zlt4LTJdID0gdFt4XTsKLSAgICBub3didWZbMTddID0gTlVMOwotICAgIGRlYnVn KEYxMTAsImNrZGF0ZSBub3didWYiLG5vd2J1ZiwwKTsKLQotICAgIHJldHVybigoY2hhciAqKW5v d2J1Zik7Ci19Ci0KLSNpZm5kZWYgTk9JQ1AKLSNpZmRlZiBDS0xPR0RJQUwKLQotLyoKLSAgZmMg PSAwIGZvciBpbml0aWFsIG9wZW4sIG1lYW5pbmcgb3BlbiwgdGhlbiBjbG9zZSBpbW1lZGlhdGVs eS4KLSAgZmMgPiAwIGZvciBzdWJzZXF1ZW50IG9wZW5zLCBtZWFuaW5nIG9wZW4gZm9yIHVzZSwg bGVhdmUgb3Blbi4KLSovCi1pbnQKLWRpYW9wbihzLGRpc3AsZmMpIGNoYXIgKnM7IGludCBkaXNw LCBmYzsgewotICAgIHN0YXRpYyBzdHJ1Y3QgZmlsaW5mbyB4eDsKLQotICAgIGlmICghcykKLSAg ICAgIHMgPSAiIjsKLSAgICBpZiAoISpzKQotICAgICAgcmV0dXJuKDApOwotCi0gICAgZGVidWco RjExMCwiZGlhb3BuIGxvZyIscywwKTsKLSAgICBkZWJ1ZyhGMTAxLCJkaWFvcG4gZmMiLHMsZmMp OwotICAgIGRlYnVnKEYxMDEsImRpYW9wbiBkaXNwIDEiLHMsZGlzcCk7Ci0gICAgaWYgKGZjKSBk aXNwID0gMTsgICAgICAgICAgICAgICAgICAgLyogRm9yY2UgYXBwZW5kIGlmIG9wZW4gZm9yIHVz ZSAqLwotICAgIGRlYnVnKEYxMDEsImRpYW9wbiBkaXNwIDIiLHMsZGlzcCk7Ci0KLSAgICB6Y2xv c2UoWkRJRklMKTsgICAgICAgICAgICAgICAgICAgICAvKiBJbiBjYXNlIGEgbG9nIHdhcyBhbHJl YWR5IG9wZW4gKi8KLQotI2lmZGVmIE9TMk9SVU5JWAotICAgIGlmIChzWzBdID09ICd8JykgeyAg ICAgICAgICAgICAgICAgIC8qIFBpcGUgKi8KLSAgICAgICAgY2hhciAqIHAgPSBzICsgMTsKLSAg ICAgICAgZGVidWcoRjExMCwiZGlhb3BuIHAiLHAsMCk7Ci0gICAgICAgIHdoaWxlICgqcCkgewot ICAgICAgICAgICAgaWYgKCpwICE9ICcgJykKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICBlbHNlCi0gICAgICAgICAgICAgIHArKzsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhG MTEwLCJkaWFvcG4gcGlwZSIscCwwKTsKLSAgICAgICAgZGlhbG9nID0genhjbWQoWkRJRklMLHAp OwotICAgICAgICBkZWJ1ZyhGMTAxLCJkaWFvcG4gZGlhbG9nIiwiIixkaWFsb2cpOwotICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgKi8KLSNlbmRpZiAvKiBP UzJPUlVOSVggKi8KLSAgICAgICAgaWYgKGRpc3ApIHsKLSAgICAgICAgICAgIHh4LmJzID0gMDsg eHguY3MgPSAwOyB4eC5ybCA9IDA7IHh4Lm9yZyA9IDA7IHh4LmNjID0gMDsKLSAgICAgICAgICAg IHh4LnR5cCA9IDA7IHh4LmRzcCA9IFhZRlpfQTsgeHgub3Nfc3BlY2lmaWMgPSAiIjsKLSAgICAg ICAgICAgIHh4LmxibG9wdHMgPSAwOwotICAgICAgICAgICAgZGlhbG9nID0gem9wZW5vKFpESUZJ TCxzLE5VTEwsJnh4KTsKLSAgICAgICAgfSBlbHNlIGRpYWxvZyA9IHpvcGVubyhaRElGSUwscyxO VUxMLE5VTEwpOwotICAgICAgICBpZiAoIWRpYWxvZykKLSAgICAgICAgICBwcmludGYoIj8lcyAt ICVzXG4iLHMsY2tfZXJyc3RyKCkpOwotI2lmZGVmIE9TMk9SVU5JWAotICAgIH0KLSNlbmRpZiAv KiBPUzJPUlVOSVggKi8KLSAgICBpZiAoZGlhbG9nID4gMCkKLSAgICAgIGNrc3RybmNweShkaWFm aWwscyxDS01BWFBBVEgrMSk7Ci0gICAgZWxzZQotICAgICAgKmRpYWZpbCA9ICdcMCc7Ci0gICAg aWYgKGZjID09IDApICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbCBvcGVuICovCi0g ICAgICB6Y2xvc2UoWkRJRklMKTsgICAgICAgICAgICAgICAgICAgLyogY2xvc2UgaXQgKi8KLSAg ICByZXR1cm4oZGlhbG9nKTsKLX0KLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLQotI2lmbmRlZiBO T1NIT1cKLQotLyogIFNIT1cgY29tbWFuZCByb3V0aW5lcyAqLwotCi1jaGFyICoKLXNob3htKCkg ewotICAgIGNoYXIgKiBzOwotICAgIHN3aXRjaCAoYmluYXJ5KSB7Ci0gICAgICBjYXNlIFhZRlRf VDogcyA9ICJ0ZXh0IjsgICAgICAgICBicmVhazsKLSNpZmRlZiBWTVMKLSAgICAgIGNhc2UgWFlG VF9COiBzID0gImJpbmFyeSBmaXhlZCI7IGJyZWFrOwotICAgICAgY2FzZSBYWUZUX0k6IHMgPSAi aW1hZ2UiOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhZRlRfTDogcyA9ICJsYWJlbGVkIjsg ICAgICBicmVhazsKLSAgICAgIGNhc2UgWFlGVF9VOiBzID0gImJpbmFyeSB1bmRlZiI7IGJyZWFr OwotI2Vsc2UKLSNpZmRlZiBNQUMKLSAgICAgIGNhc2UgWFlGVF9COiBzID0gImJpbmFyeSI7ICAg ICAgIGJyZWFrOwotICAgICAgY2FzZSBYWUZUX006IHMgPSAibWFjYmluYXJ5IjsgICAgYnJlYWs7 Ci0jZWxzZQotICAgICAgY2FzZSBYWUZUX0I6IHMgPSAiYmluYXJ5IjsgICAgICAgYnJlYWs7Ci0j aWZkZWYgQ0tfTEFCRUxFRAotICAgICAgY2FzZSBYWUZUX0w6IHMgPSAibGFiZWxlZCI7ICAgICAg YnJlYWs7Ci0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlm IC8qIFZNUyAqLwotICAgICAgZGVmYXVsdDogcyA9ICJ1bmtub3duIjsgYnJlYWs7Ci0gICAgfQot ICAgIHJldHVybihzKTsKLX0KLQotI2lmbmRlZiBOT1hGRVIKLVZPSUQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTSE9XIFRSQU5TRkVSICovCi1zaG94ZmVyKCkgewotICAg IGV4dGVybiBpbnQgZG9jcmMsIHVzZXBpcGVzLCB4ZnJ4bGEsIHdoZXJlZmxnOwotICAgIGV4dGVy biBjaGFyICogeGZybXNnOwotICAgIHByaW50ZigiXG4iKTsKLSAgICBwcmludGYoIiBUcmFuc2Zl ciBCZWxsOiAlc1xuIixzaG93b2ZmKHhmcmJlbCkpOwotICAgIHByaW50ZigiIFRyYW5zZmVyIElu dGVycnVwdGlvbjogJXNcbiIsc2hvd29mZih4ZnJpbnQpKTsKLSAgICBwcmludGYoIiBUcmFuc2Zl ciBDYW5jZWxsYXRpb246ICVzXG4iLHNob3dvZmYoeGZyY2FuKSk7Ci0jaWZuZGVmIE5PQ1NFVFMK LSAgICBwcmludGYoIiBUcmFuc2ZlciBUcmFuc2xhdGlvbjogICVzXG4iLHNob3dvZmYoeGZyeGxh KSk7Ci0gICAgcHJpbnRmKCIgVHJhbnNmZXIgQ2hhcmFjdGVyLXNldDogIik7Ci0gICAgaWYgKHRj aGFyc2V0ID09IFRDX1RSQU5TUCkKLSAgICAgIHByaW50ZigiVHJhbnNwYXJlbnRcbiIpOwotICAg IGVsc2UKLSAgICAgIHByaW50ZigiJXNcbiIsdGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCk7Ci0j ZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIHByaW50ZigiIFRyYW5zZmVyIENSQy1jYWxjdWxhdGlv bjogJXNcbiIsc2hvd29mZihkb2NyYykpOwotICAgIHByaW50ZigiIFRyYW5zZmVyIERpc3BsYXk6 ICIpOwotICAgIHN3aXRjaCAoZmRpc3BsYSkgewotICAgICAgY2FzZSBYWUZEX046IHByaW50Zigi JXNcbiIsIm5vbmUiKTsgYnJlYWs7Ci0gICAgICBjYXNlIFhZRkRfUjogcHJpbnRmKCIlc1xuIiwi c2VyaWFsIik7IGJyZWFrOwotICAgICAgY2FzZSBYWUZEX0M6IHByaW50ZigiJXNcbiIsImZ1bGxz Y3JlZW4iKTsgYnJlYWs7Ci0gICAgICBjYXNlIFhZRkRfUzogcHJpbnRmKCIlc1xuIiwiY3J0Iik7 IGJyZWFrOwotICAgICAgY2FzZSBYWUZEX0I6IHByaW50ZigiJXNcbiIsImJyaWVmIik7IGJyZWFr OwotICAgICAgY2FzZSBYWUZEX0c6IHByaW50ZigiJXNcbiIsImd1aSIpOyBicmVhazsKLSAgICB9 Ci0gICAgcHJpbnRmKCIgVHJhbnNmZXIgTWVzc2FnZTogJXNcbiIsIHhmcm1zZyA/IHhmcm1zZyA6 ICIobm9uZSkiKTsKLSAgICBwcmludGYoIiBUcmFuc2ZlciBMb2NraW5nLXNoaWZ0OiAiKTsKLSAg ICBpZiAobHNjYXB1ID09IDIpIHsKLSAgICAgICAgcHJpbnRmKCJmb3JjZWQiKTsKLSAgICB9IGVs c2UgewotICAgICAgICBwcmludGYoIiVzIiwgKGxzY2FwciA/ICJlbmFibGVkIiA6ICJkaXNhYmxl ZCIpKTsKLSAgICAgICAgaWYgKGxzY2FwcikgcHJpbnRmKCIsJXMlcyIsIChsc2NhcHUgPyAiICIg OiAiIG5vdCAiKSwgInVzZWQiKTsKLSAgICB9Ci0gICAgcHJpbnRmKCJcbiBUcmFuc2ZlciBNb2Rl OiAlc1xuIiwKLSAgICAgICAgICAgeGZlcm1vZGUgPT0gWE1PREVfQSA/Ci0gICAgICAgICAgICJh dXRvbWF0aWMiIDoKLSAgICAgICAgICAgIm1hbnVhbCIKLSAgICAgICAgICAgKTsKLSAgICBwcmlu dGYoIiBUcmFuc2ZlciBQaXBlczogJXNcbiIsIHNob3dvZmYodXNlcGlwZXMpKTsKLSAgICBwcmlu dGYoIiBUcmFuc2ZlciBQcm90b2NvbDogJXNcbiIscHRhYltwcm90b2NvbF0ucF9uYW1lKTsKLSAg ICBwcmludGYoIiBUcmFuc2ZlciBSZXBvcnQ6ICVzXG4iLHNob3dvZmYod2hlcmVmbGcpKTsKLSAg ICBwcmludGYoIiBUcmFuc2ZlciBTbG93LXN0YXJ0OiAlc1xuIixzaG93b2ZmKHNsb3N0YXJ0KSk7 Ci0gICAgcHJpbnRmKCJcbiIpOwotfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi1WT0lECi1zaG9m bG93KCkgewotICAgIGludCBpLCB4OwotICAgIGV4dGVybiBpbnQgY3hmbG93W10sIGN4dHlwZSwg bmN4bmFtZSwgbmZsb25hbWUsIGF1dG9mbG93OwotICAgIGV4dGVybiBjaGFyICogY3huYW1lW107 Ci0gICAgcHJpbnRmKCJcbkNvbm5lY3Rpb24gdHlwZTogICAgICAgICVzXG4iLGN4bmFtZVtjeHR5 cGVdKTsKLSAgICBpZiAoYXV0b2Zsb3cpIHsKLSAgICAgICAgcHJpbnRmKCJDdXJyZW50IGZsb3ct Y29udHJvbDogICAlc1xuIiwgZmxvbmFtZVtjeGZsb3dbY3h0eXBlXV0pOwotICAgICAgICBwcmlu dGYoIlN3aXRjaGVzIGF1dG9tYXRpY2FsbHk6IHllc1xuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAg ICAgcHJpbnRmKCJDdXJyZW50IGZsb3ctY29udHJvbDogICAlc1xuIiwgZmxvbmFtZVtmbG93XSk7 Ci0gICAgICAgIHByaW50ZigiU3dpdGNoZXMgYXV0b21hdGljYWxseTogbm9cbiIpOwotICAgIH0K LSAgICBwcmludGYoIlxuRGVmYXVsdHMgYnkgY29ubmVjdGlvbiB0eXBlOlxuIik7Ci0gICAgZGVi dWcoRjExMSwic2hvZmxvdyBjeHR5cGUiLGN4bmFtZVtjeHR5cGVdLGN4dHlwZSk7Ci0gICAgZGVi dWcoRjEwMSwic2hvZmxvdyBmbG93IiwiIixmbG93KTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbmN4 bmFtZTsgaSsrKSB7Ci0jaWZkZWYgTk9MT0NBTAotICAgICAgICBpZiAoaSA+IDApIGJyZWFrOwot I2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZm5kZWYgTkVUQ09OTgotICAgICAgICBpZiAoaSA+IDIp IGJyZWFrOwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNpZm5kZWYgREVDTkVUCi0gICAgICAgIGlm IChpID09IENYVF9ERUNORVQpIGNvbnRpbnVlOwotI2VuZGlmIC8qIERFQ05FVCAqLwotI2lmbmRl ZiBERUNORVQKLSNpZm5kZWYgU1VQRVJMQVQKLSAgICAgICAgaWYgKGkgPT0gQ1hUX0xBVCkgY29u dGludWU7Ci0jZW5kaWYgLyogU1VQRVJMQVQgKi8KLSNlbmRpZiAvKiBERUNORVQgKi8KLSNpZm5k ZWYgQ0tfTkVUQklPUwotICAgICAgICBpZiAoaSA9PSBDWFRfTkVUQklPUykgY29udGludWU7Ci0j ZW5kaWYgLyogQ0tfTkVUQklPUyAqLwotI2lmbmRlZiBOUElQRQotICAgICAgICBpZiAoaSA9PSBD WFRfTlBJUEUpIGNvbnRpbnVlOwotI2VuZGlmIC8qIE5QSVBFICovCi0jaWZuZGVmIE5FVENNRAot ICAgICAgICBpZiAoaSA9PSBDWFRfUElQRSkgY29udGludWU7Ci0jZW5kaWYgLyogTkVUQ01EICov Ci0jaWZuZGVmIEFOWVgyNQotICAgICAgICBpZiAoaSA9PSBDWFRfWDI1KSBjb250aW51ZTsKLSNl bmRpZiAvKiBBTllYMjUgKi8KLSAgICAgICAgeCA9IGN4Zmxvd1tpXTsKLSAgICAgICAgZGVidWco RjEwMSwic2hvZmxvdyB4IiwiIix4KTsKLSAgICAgICAgaWYgKHggPCBuZmxvbmFtZSkKLSAgICAg ICAgICBwcmludGYoIiAgJS0xNHM6ICVzXG4iLGN4bmFtZVtpXSxmbG9uYW1lW3hdKTsKLSAgICAg ICAgZWxzZQotICAgICAgICAgIHByaW50ZigiICAlLTE0czogKCVkKVxuIixjeG5hbWVbaV0seCk7 Ci0gICAgfQotICAgIHByaW50ZigiXG4iKTsKLX0KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYg QU5ZWDI1Ci1pbnQKLXNob3gyNShuKSBpbnQgbjsgewotICAgIGlmIChuZXR0eXBlID09IE5FVF9T WDI1KSB7Ci0gICAgICAgIHByaW50ZigiU3VuTGluayBYLjI1IFYlZC4lZCIseDI1dmVyIC8gMTAs eDI1dmVyICUgMTApOwotICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfWDMpIHByaW50ZigiLCBQ QUQgWC4zLCBYLjI4LCBYLjI5IHByb3RvY29sLCIpOwotICAgICAgICBwcmludGYoIlxuIik7Ci0g ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEp OyBlbHNlIG4gPSAwOwotICAgICAgICBwcmludGYoIiBSZXZlcnNlIGNoYXJnZSBjYWxsICVzIiwK LSAgICAgICAgICAgICAgIHJldmNhbGwgPyAic2VsZWN0ZWQiIDogIm5vdCBzZWxlY3RlZCIpOwot ICAgICAgICBwcmludGYgKCIsIENsb3NlZCB1c2VyIGdyb3VwICIpOwotICAgICAgICBpZiAoY2xv c2dyID4gLTEpCi0gICAgICAgICAgcHJpbnRmICgiJWQiLGNsb3Nncik7Ci0gICAgICAgIGVsc2UK LSAgICAgICAgICBwcmludGYgKCJub3Qgc2VsZWN0ZWQiKTsKLSAgICAgICAgcHJpbnRmKCJcbiIp OwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu KC0xKTsgZWxzZSBuID0gMDsKLSAgICAgICAgcHJpbnRmKCIgQ2FsbCB1c2VyIGRhdGEgJXMuXG4i LCBjdWRhdGEgPyB1ZGF0YSA6ICJub3Qgc2VsZWN0ZWQiKTsKLSAgICAgICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0gICAg fSBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9WWDI1KSB7Ci0gICAgICAgIGlmICh0dG5wcm90byA9 PSBOUF9YMykgcHJpbnRmKCIsIFBBRCBYLjMsIFguMjgsIFguMjkgcHJvdG9jb2wsIik7Ci0gICAg ICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIHByaW50ZigiIFJldmVy c2UgY2hhcmdlIGNhbGwgJXMiLAotICAgICAgICAgICAgICAgcmV2Y2FsbCA/ICJzZWxlY3RlZCIg OiAibm90IHNlbGVjdGVkIik7Ci0gICAgICAgIHByaW50ZiAoIiwgQ2xvc2VkIHVzZXIgZ3JvdXAg W3Vuc3VwcG9ydGVkXSIpOwotICAgICAgICBpZiAoY2xvc2dyID4gLTEpCi0gICAgICAgICAgcHJp bnRmICgiJWQiLGNsb3Nncik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwcmludGYgKCJub3Qg c2VsZWN0ZWQiKTsKLSAgICAgICAgcHJpbnRmICgiLCIpOwotICAgICAgICBwcmludGYoIlxuIik7 Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4o LTEpOyBlbHNlIG4gPSAwOwotICAgICAgICBwcmludGYoIiBDYWxsIHVzZXIgZGF0YSAlcy5cbiIs IGN1ZGF0YSA/IHVkYXRhIDogIm5vdCBzZWxlY3RlZCIpOwotICAgICAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSAgICB9 IGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX0lYMjUpIHsKLSAgICAgICAgcHJpbnRmKCJBSVggTlBJ IFguMjVcbiIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSAgICAgICAgcHJpbnRmKCJcbiBSZXZlcnNlIGNo YXJnZSBjYWxsICVzIiwKLSAgICAgICAgICAgICAgIHJldmNhbGwgPyAic2VsZWN0ZWQiIDogIm5v dCBzZWxlY3RlZCIpOwotICAgICAgICBwcmludGYgKCIsIENsb3NlZCB1c2VyIGdyb3VwIFt1bnN1 cHBvcnRlZF0iKTsKLSAgICAgICAgaWYgKGNsb3NnciA+IC0xKQotICAgICAgICAgIHByaW50ZiAo IiVkIixjbG9zZ3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcHJpbnRmICgibm90IHNlbGVj dGVkIik7Ci0gICAgICAgIHByaW50ZiAoIiwiKTsKLSAgICAgICAgcHJpbnRmKCJcbiBDYWxsIHVz ZXIgZGF0YSAlcy5cbiIsIGN1ZGF0YSA/IHVkYXRhIDogIm5vdCBzZWxlY3RlZCIpOwotICAgIH0K LSAgICByZXR1cm4obik7Ci19Ci0KLSNpZm5kZWYgSUJNWDI1Ci1pbnQKLXNob3BhZChuKSBpbnQg bjsgewotICAgIGludCBpOwotICAgIHByaW50ZigiXG5YLjMgUEFEIFBhcmFtZXRlcnM6XG4iKTsK LSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsg ZWxzZSBuID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnBhZHgzOyBpKyspIHsKLSAgICAgICAg cHJpbnRmKCIgWyVkXSAlcyAlZFxuIixwYWR4M3RhYltpXS5rd3ZhbCxwYWR4M3RhYltpXS5rd2Qs Ci0gICAgICAgICAgICAgICBwYWRwYXJtc1twYWR4M3RhYltpXS5rd3ZhbF0pOwotICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBu ID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuKG4pOwotfQotI2VuZGlmIC8qIElCTVgyNSAqLwotI2Vu ZGlmIC8qIEFOWVgyNSAqLwotCi1WT0lECi1zaG9wYXJjKCkgewotICAgIGV4dGVybiBpbnQgcmVs aWFibGUsIHN0b3BiaXRzLCBjbHNvbmRpc2M7Ci0gICAgaW50IGk7IGNoYXIgKnM7Ci0gICAgbG9u ZyB6ejsKLQotI2lmZGVmIE5FV0ZUUAotICAgIGlmIChmdHBpc2Nvbm5lY3RlZCgpKSB7Ci0gICAg ICAgIHNob2Z0cCgxKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgIH0KLSNlbmRpZiAvKiBO RVdGVFAgKi8KLQotICAgIHByaW50ZigiQ29tbXVuaWNhdGlvbnMgUGFyYW1ldGVyczpcbiIpOwot Ci0gICAgaWYgKG5ldHdvcmsKLSNpZmRlZiBJS1NECi0gICAgICAgICB8fCBpbnNlcnZlcgotI2Vu ZGlmIC8qIElLU0QgKi8KLSAgICAgICAgICkgewotICAgICAgICBwcmludGYoIiBOZXR3b3JrIEhv c3Q6ICVzJXMiLHR0bmFtZSwKLSAgICAgICAgICAgICAgIChyZWxpYWJsZSA9PSBTRVRfT04gfHwg KHJlbGlhYmxlID09IFNFVF9BVVRPICYmICFsb2NhbCkKLSNpZmRlZiBUTl9DT01QT1JUCi0gICAg ICAgICAgICAgICAmJiAhaXN0bmNvbXBvcnQoKQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSNp ZmRlZiBJS1NECi0gICAgICAgICAgICAgICB8fCBpbnNlcnZlcgotI2VuZGlmIC8qIElLU0QgKi8K LSAgICAgICAgICAgICAgICkgPyAiIChyZWxpYWJsZSkiIDogIiIpOwotI2lmZGVmIFROX0NPTVBP UlQKLSAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKLSAgICAgICAgICAgIGludCBtb2RlbXN0 YXRlOwotICAgICAgICAgICAgY2hhciAqIG9mbG93LCAqIGlmbG93ID0gIiIsICogcGFyaXR5LCAq IHN0b3BzaXplLCAqIHNpZ25hdHVyZTsKLSAgICAgICAgICAgIGludCBiYXVkID0gdG5jX2dldF9i YXVkKCk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodG5jX2dldF9vZmxvdygpKSB7Ci0gICAgICAg ICAgICAgIGNhc2UgVE5DX0NUTF9PRkxPV19OT05FOgotICAgICAgICAgICAgICAgIG9mbG93ID0g Im5vbmUiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFROQ19D VExfT0ZMT1dfWE9OX1hPRkY6Ci0gICAgICAgICAgICAgICAgb2Zsb3cgPSAieG9uL3hvZmYiOwot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFROQ19DVExfT0ZMT1df UlRTX0NUUzoKLSAgICAgICAgICAgICAgICBvZmxvdyA9ICJydHMvY3RzIjsKLSAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUTkNfQ1RMX09GTE9XX0RDRDoKLSAgICAg ICAgICAgICAgICBvZmxvdyA9ICJkY2QiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICBjYXNlIFROQ19DVExfT0ZMT1dfRFNSOgotICAgICAgICAgICAgICAgIG9mbG93ID0g ImRzciI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g ICAgICAgICAgICAgICAgb2Zsb3cgPSAiKHVua25vd24pIjsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIHN3aXRjaCAodG5jX2dldF9pZmxvdygpKSB7Ci0gICAgICAgICAgICAgIGNhc2UgVE5D X0NUTF9JRkxPV19OT05FOgotICAgICAgICAgICAgICAgIGlmbG93ID0gIm5vbmUiOwotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFROQ19DVExfSUZMT1dfWE9OX1hP RkY6Ci0gICAgICAgICAgICAgICAgaWZsb3cgPSAieG9uL3hvZmYiOwotICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFROQ19DVExfSUZMT1dfUlRTX0NUUzoKLSAgICAg ICAgICAgICAgICBpZmxvdyA9ICJydHMvY3RzIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgY2FzZSBUTkNfQ1RMX0lGTE9XX0RUUjoKLSAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZmxvdyA9IG9mbG93 OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3dpdGNoICh0bmNfZ2V0X3Bhcml0eSgpKSB7 Ci0gICAgICAgICAgICAgIGNhc2UgVE5DX1BBUl9OT05FOgotICAgICAgICAgICAgICAgIHBhcml0 eSA9ICJub25lIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBU TkNfUEFSX09ERDoKLSAgICAgICAgICAgICAgICBwYXJpdHkgPSAib2RkIjsKLSAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUTkNfUEFSX0VWRU46Ci0gICAgICAgICAg ICAgICAgcGFyaXR5ID0gImV2ZW4iOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICBjYXNlIFROQ19QQVJfTUFSSzoKLSAgICAgICAgICAgICAgICBwYXJpdHkgPSAibWFyayI7 Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVE5DX1BBUl9TUEFD RToKLSAgICAgICAgICAgICAgICBwYXJpdHkgPSAic3BhY2UiOwotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHBhcml0eSA9ICIo dW5rbm93bikiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3dpdGNoICh0bmNfZ2V0X3N0 b3BzaXplKCkpIHsKLSAgICAgICAgICAgICAgY2FzZSBUTkNfU0JfMToKLSAgICAgICAgICAgICAg ICBzdG9wc2l6ZSA9ICIxIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg Y2FzZSBUTkNfU0JfMV81OgotICAgICAgICAgICAgICAgIHN0b3BzaXplID0gIjEuNSI7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVE5DX1NCXzI6Ci0gICAgICAg ICAgICAgICAgc3RvcHNpemUgPSAiMiI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgc3RvcHNpemUgPSAiKHVua25vd24pIjsK LSAgICAgICAgICAgIH0KLQkgICAgc2lnbmF0dXJlID0gKGNoYXIgKil0bmNfZ2V0X3NpZ25hdHVy ZSgpOwotICAgICAgICAgICAgcHJpbnRmKCJcbiAgU2lnbmF0dXJlICAgICAgICAgICAgOiAlc1xu IixzaWduYXR1cmU/c2lnbmF0dXJlOiIiKTsKLSAgICAgICAgICAgIGlmIChiYXVkIDw9IDApCi0g ICAgICAgICAgICAgIHByaW50ZigiICBTcGVlZCAgICAgICAgICAgICAgICA6ICh1bmtub3duKVxu Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50ZigiICBTcGVlZCAgICAg ICAgICAgICAgICA6ICVkXG4iLCBiYXVkKTsKLSAgICAgICAgICAgIHByaW50ZigiICBPdXRib3Vu ZCBGbG93IENvbnRyb2w6ICVzXG4iLCBvZmxvdyk7Ci0gICAgICAgICAgICBwcmludGYoIiAgSW5i b3VuZCBGbG93IENvbnRyb2wgOiAlc1xuIiwgaWZsb3cpOwotICAgICAgICAgICAgcHJpbnRmKCIg IFBhcml0eSAgICAgICAgICAgICAgIDogJXNcbiIsIHBhcml0eSk7Ci0gICAgICAgICAgICBwcmlu dGYoIiAgRGF0YSBTaXplICAgICAgICAgICAgOiAlZFxuIiwgdG5jX2dldF9kYXRhc2l6ZSgpKTsK LSAgICAgICAgICAgIHByaW50ZigiICBTdG9wIEJpdHMgICAgICAgICAgICA6ICVzXG4iLCBzdG9w c2l6ZSk7Ci0gICAgICAgICAgICBwcmludGYoIiAgRFRSIFNpZ25hbCAgICAgICAgICAgOiAlZFxu IiwgdG5jX2dldF9kdHJfc3RhdGUoKSk7Ci0gICAgICAgICAgICBwcmludGYoIiAgUlRTIFNpZ25h bCAgICAgICAgICAgOiAlZFxuIiwgdG5jX2dldF9ydHNfc3RhdGUoKSk7Ci0gICAgICAgICAgICBw cmludGYoIiAgTW9kZW0gU3RhdGU6XG4iKTsKLSAgICAgICAgICAgIG1vZGVtc3RhdGUgPSB0bmNf Z2V0X21zKCk7Ci0gICAgICAgICAgICBpZiAobW9kZW1zdGF0ZSAmIFROQ19NU19FREdFX1JJTkcp Ci0gICAgICAgICAgICAgIHByaW50ZigiICAgIFRyYWlsaW5nIEVkZ2UgUmluZyBEZXRlY3RvciBP blxuIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50ZigiICAgIFRyYWls aW5nIEVkZ2UgUmluZyBEZXRlY3RvciBPZmZcbiIpOwotICAgICAgICAgICAgaWYgKG1vZGVtc3Rh dGUgJiBUTkNfTVNfQ1RTX1NJRykKLSAgICAgICAgICAgICAgcHJpbnRmKCIgICAgQ1RTIFNpZ25h bCBPblxuIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50ZigiICAgIENU UyBTaWduYWwgT2ZmXG4iKTsKLSAgICAgICAgICAgIGlmIChtb2RlbXN0YXRlICYgVE5DX01TX0RT Ul9TSUcpCi0gICAgICAgICAgICAgIHByaW50ZigiICAgIERTUiBTaWduYWwgT25cbiIpOwotICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBwcmludGYoIiAgICBEU1IgU2lnbmFsIE9mZlxu Iik7Ci0gICAgICAgICAgICBpZiAobW9kZW1zdGF0ZSAmIFROQ19NU19SSV9TSUcpCi0gICAgICAg ICAgICAgIHByaW50ZigiICAgIFJpbmcgSW5kaWNhdG9yIE9uXG4iKTsKLSAgICAgICAgICAgIGVs c2UKLSAgICAgICAgICAgICAgcHJpbnRmKCIgICAgUmluZyBJbmRpY2F0b3IgT2ZmXG4iKTsKLSAg ICAgICAgICAgIGlmIChtb2RlbXN0YXRlICYgVE5DX01TX1JMU0RfU0lHKQotICAgICAgICAgICAg ICBwcmludGYoIiAgICBSTFNEIChDRCkgU2lnbmFsIE9uXG4iKTsKLSAgICAgICAgICAgIGVsc2UK LSAgICAgICAgICAgICAgcHJpbnRmKCIgICAgUkxTRCAoQ0QpIFNpZ25hbCBPZmZcbiIpOwotICAg ICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAq LwotICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgcHJpbnRmKCIgJXM6ICVzJXMsIHNwZWVkOiAiLAot I2lmZGVmIE9TMgotICAgICAgICAgICAgICAgIlBvcnQiLAotI2Vsc2UKLSAgICAgICAgICAgICAg ICJMaW5lIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgIHR0bmFtZSwKLSNpZmRl ZiBDS19UVFlGRAotICAgICAgICAgICAgICAgKGxvY2FsICYmCi0jaWZkZWYgVk1TCi0gICAgICAg ICAgICAgICAgdm1zdHR5ZmQoKSA8IDAKLSNlbHNlCi0gICAgICAgICAgICAgICAgdHR5ZmQgPT0g LTEKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgICAgICAgICApID8KLSAgICAgICAgICAgICAg ICAgIiAoY2xvc2VkKSIgOgotICAgICAgICAgICAgICAgICAgIChyZWxpYWJsZSA9PSBTRVRfT04g PyAiIChyZWxpYWJsZSkiIDogIiIpCi0jZWxzZQotICAgICAgICAgICAgICAgIiIKLSNlbmRpZiAv KiBDS19UVFlGRCAqLwotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgaWYgKAotI2lmZGVmIENL X1RUWUZECi0jaWZkZWYgVk1TCi0gICAgICAgICAgICB2bXN0dHlmZCgpIDwgMAotI2Vsc2UKLSAg ICAgICAgICAgIHR0eWZkID09IC0xCi0jZW5kaWYgLyogVk1TICovCi0gICAgICAgICAgICB8fAot I2VuZGlmIC8qIENLX1RUWUZEICovCi0gICAgICAgICAgICAoenogPSB0dGdzcGQoKSkgPCAwKSB7 Ci0gICAgICAgICAgICBwcmludGYoInVua25vd24iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgIGlmIChzcGVlZCA9PSA4ODgwKSBwcmludGYoIjc1LzEyMDAiKTsKLSAgICAgICAgICAg IGVsc2UgaWYgKHNwZWVkID09IDEzNCkgcHJpbnRmKCIxMzQuNSIpOwotICAgICAgICAgICAgZWxz ZSBwcmludGYoIiVsZCIsenopOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChuZXR3b3JrCi0j aWZkZWYgSUtTRAotICAgICAgICAgfHwgaW5zZXJ2ZXIKLSNlbmRpZiAvKiBJS1NEICovCi0gICAg ICAgICApCi0gICAgICBwcmludGYoIlxuIE1vZGU6ICIpOwotICAgIGVsc2UKLSAgICAgIHByaW50 ZigiLCBtb2RlOiAiKTsKLSAgICBpZiAobG9jYWwpIHByaW50ZigibG9jYWwiKTsgZWxzZSBwcmlu dGYoInJlbW90ZSIpOwotICAgIGlmIChuZXR3b3JrID09IDAKLSNpZmRlZiBJS1NECi0gICAgICAg ICAmJiAhaW5zZXJ2ZXIKLSNlbmRpZi8qIElLU0QgKi8KLSAgICAgICAgICkgewotI2lmZGVmIENL X1RBUEkKLSAgICAgICAgaWYgKHR0dGFwaSAmJiAhdGFwaXBhc3MgKQotICAgICAgICAgIHByaW50 ZigiLCBtb2RlbTogJXMiLCJUQVBJIik7Ci0gICAgICAgIGVsc2UKLSNlbmRpZiAvKiBDS19UQVBJ ICovCi0gICAgICAgIHByaW50ZigiLCBtb2RlbTogJXMiLGdtZG10eXAoKSk7Ci0gICAgfSBlbHNl IHsKLSNpZmRlZiBORVRDT05OCi0gICAgICAgaWYgKG5ldHR5cGUgPT0gTkVUX1RDUEEpIHByaW50 ZigiLCBUQ1AvSVAiKTsKLSAgICAgICBpZiAobmV0dHlwZSA9PSBORVRfVENQQikgcHJpbnRmKCIs IFRDUC9JUCIpOwotICAgICAgIGlmIChuZXR0eXBlID09IE5FVF9ERUMpIHsKLSAgICAgICAgICAg aWYgKHR0bnByb3RvID09IE5QX0xBVCkgcHJpbnRmKCIsIERFQ25ldCBMQVQiKTsKLSAgICAgICAg ICAgZWxzZSBpZiAoIHR0bnByb3RvID09IE5QX0NURVJNICkgcHJpbnRmKCIsIERFQ25ldCBDVEVS TSIpOwotICAgICAgICAgICBlbHNlIHByaW50ZigiLCBERUNuZXQiKTsKLSAgICAgICB9Ci0gICAg ICAgaWYgKG5ldHR5cGUgPT0gTkVUX1NMQVQpIHByaW50ZigiLCBNZXJpZGlhbiBUZWNobm9sb2dp ZXMnIFN1cGVyTEFUIik7Ci0jaWZkZWYgTkVURklMRQotICAgICAgIGlmIChuZXR0eXBlID09IE5F VF9GSUxFKSBwcmludGYoIiwgbG9jYWwgZmlsZSIpOwotI2VuZGlmIC8qIE5FVEZJTEUgKi8KLSNp ZmRlZiBORVRDTUQKLSAgICAgICBpZiAobmV0dHlwZSA9PSBORVRfQ01EKSBwcmludGYoIiwgcGlw ZSIpOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgICAgIGlmIChuZXR0 eXBlID09IE5FVF9QVFkpIHByaW50ZigiLCBwc2V1ZG90ZXJtaW5hbCIpOwotI2VuZGlmIC8qIE5F VFBUWSAqLwotI2lmZGVmIE5FVERMTAotICAgICAgIGlmIChuZXR0eXBlID09IE5FVF9ETEwpIHBy aW50ZigiLCBkeW5hbWljIGxvYWQgbGlicmFyeSIpOwotI2VuZGlmIC8qIE5FVERMTCAqLwotICAg ICAgIGlmIChuZXR0eXBlID09IE5FVF9QSVBFKSBwcmludGYoIiwgTmFtZWQgUGlwZXMiKTsKLSNp ZmRlZiBTU0hCVUlMVElOCi0gICAgICAgaWYgKG5ldHR5cGUgPT0gTkVUX1NTSCkKLSAgICAgICAg IHByaW50ZigiLCBTZWN1cmUgU2hlbGwgcHJvdG9jb2wgKFNFQ1VSRSkiKTsKLSNlbmRpZiAvKiBT U0hCVUlMVElOICovCi0jaWZkZWYgQU5ZWDI1Ci0gICAgICAgaWYgKHNob3gyNSgwKSA8IDApIHJl dHVybjsKLSNlbmRpZiAvKiBBTllYMjUgKi8KLSAgICAgICBpZiAoSVNfVEVMTkVUKCkpIHsKLSAg ICAgICAgICAgcHJpbnRmKCIsIHRlbG5ldCBwcm90b2NvbCIpOwotICAgICAgICAgICBpZiAoMAot I2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgIHx8IGNrX3RuX2VuY3J5cHRpbmco KSAmJiBja190bl9kZWNyeXB0aW5nKCkKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZk ZWYgQ0tfU1NMCi0gICAgICAgICAgICAgICB8fCB0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2 ZV9mbGFnCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICApCi0gICAgICAgICAg ICAgcHJpbnRmKCIgKFNFQ1VSRSkiKTsKLSAgICAgICB9Ci0jaWZkZWYgUkxPR0NPREUKLSAgICAg ICBlbHNlIGlmICh0dG5wcm90byA9PSBOUF9STE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfSzRMT0dJ TiB8fAotICAgICAgICAgICAgICAgIHR0bnByb3RvID09IE5QX0s1TE9HSU4pCi0gICAgICAgICBw cmludGYoIiwgcmxvZ2luIHByb3RvY29sIik7Ci0gICAgICAgZWxzZSBpZiAodHRucHJvdG8gPT0g TlBfRUs0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pCi0gICAgICAgICBwcmludGYo IiwgcmxvZ2luIHByb3RvY29sIChTRUNVUkUpIik7Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNp ZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIEtSQjUKLSAgICAgICBlbHNlIGlmICh0dG5wcm90byA9 PSBOUF9LNVUyVSkKLSAgICAgICAgIHByaW50ZigiLCBLZXJiZXJvcyA1IFVzZXIgdG8gVXNlciBw cm90b2NvbCAoU0VDVVJFKSIpOwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJC RVJPUyAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSAgICB9Ci0gICAgcHJpbnRmKCJcbiIpOwot ICAgIGlmIChod3Bhcml0eSAmJiBsb2NhbCAmJiAhbmV0d29yaykKLSAgICAgIHMgPSBwYXJuYW0o KGNoYXIpaHdwYXJpdHkpOwotICAgIGVsc2UKLSAgICAgIHMgPSBwYXJuYW0oKGNoYXIpcGFyaXR5 KTsKLSAgICBwcmludGYoIiBQYXJpdHk6ICVzJXMiLGh3cGFyaXR5ID8gImhhcmR3YXJlICIgOiAi Iiwgcyk7Ci0jaWZuZGVmIE5PTE9DQUwKLSAgICBpZiAobG9jYWwgJiYgIW5ldHdvcmspIHsKLSAg ICAgICAgaW50IHNiOwotICAgICAgICBjaGFyIGM7Ci0gICAgICAgIGMgPSBzWzBdOwotICAgICAg ICBpZiAoaXNsb3dlcihjKSkgYyA9IHRvdXBwZXIoYyk7Ci0gICAgICAgIHNiID0gc3RvcGJpdHM7 Ci0gICAgICAgIGlmIChzYiA8IDEpIHsKLSAgICAgICAgICAgIHNiID0gKHNwZWVkID4gMCAmJiBz cGVlZCA8PSAxMTBMKSA/IDIgOiAxOwotICAgICAgICAgICAgcHJpbnRmKCIsIHN0b3AtYml0czog KGRlZmF1bHQpIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludGYoIiwgc3Rv cC1iaXRzOiAlZCIsc2IpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChod3Bhcml0eSkKLSAgICAg ICAgICBwcmludGYoIiAoOCVjJWQpIixjLHNiKTsKLSAgICAgICAgZWxzZSBpZiAocGFyaXR5KQot ICAgICAgICAgIHByaW50ZigiICg3JWMlZCkiLGMsc2IpOwotICAgICAgICBlbHNlCi0gICAgICAg ICAgcHJpbnRmKCIgKDhOJWQpIixzYik7Ci0gICAgICAgIHByaW50ZigiXG4gRCIpOwotICAgIH0g ZWxzZQotICAgICAgcHJpbnRmKCIsIGQiKTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSAgICBw cmludGYoInVwbGV4OiAlcywgIiwgZHVwbGV4ID8gImhhbGYiIDogImZ1bGwiKTsKLSAgICBkZWJ1 ZyhGMTAxLCJzaG9wYXJwIGZsb3ciLCIiLGZsb3cpOwotICAgIHByaW50ZigiZmxvdzogJXMiLCBm bG9uYW1lW2Zsb3ddKTsKLSAgICBwcmludGYoIiwgaGFuZHNoYWtlOiAiKTsKLSAgICBpZiAodHVy bikgcHJpbnRmKCIlZFxuIix0dXJuY2gpOyBlbHNlIHByaW50Zigibm9uZVxuIik7Ci0jaWZkZWYg Q09NTUVOVAotICAgIGlmIChsb2NhbCAmJiAhbmV0d29yaykgeyAgICAgICAgICAgIC8qIFNFVCBD QVJSSUVSLVdBVENIICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBpZiAoY2Fycmll ciA9PSBDQVJfT0ZGKSBzID0gIm9mZiI7Ci0gICAgICAgIGVsc2UgaWYgKGNhcnJpZXIgPT0gQ0FS X09OKSBzID0gIm9uIjsKLSAgICAgICAgZWxzZSBpZiAoY2FycmllciA9PSBDQVJfQVVUKSBzID0g ImF1dG8iOwotICAgICAgICBlbHNlIHMgPSAidW5rbm93biI7Ci0gICAgICAgIHByaW50ZigiIENh cnJpZXItd2F0Y2g6ICVzIiwgcyk7Ci0gICAgICAgIGlmIChjYXJyaWVyID09IENBUl9PTikgewot ICAgICAgICAgICAgaWYgKGNkdGltbykgcHJpbnRmKCIsIHRpbWVvdXQ6ICVkIHNlYyIsIGNkdGlt byk7Ci0gICAgICAgICAgICBlbHNlIHByaW50ZigiLCB0aW1lb3V0OiBub25lIik7Ci0gICAgICAg IH0KLSNpZmRlZiBDT01NRU5UCi0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBwcmlu dGYoIiwgY2xvc2Utb24tZGlzY29ubmVjdDogJXNcbiIsc2hvd29mZihjbHNvbmRpc2MpKTsKLQot I2lmZGVmIFVOSVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVVQ1AgbG9ja2ZpbGUs IFVOSVggb25seSAqLwotICAgIGlmIChsb2NhbCkgewotI2lmbmRlZiBOT1VVQ1AKLSAgICAgICAg aWYgKCFuZXR3b3JrICYmIGhhc2xvY2sgJiYgKmZsZm5hbSkKLSAgICAgICAgICBwcmludGYoIiBM b2NrZmlsZTogJXMiLGZsZm5hbSk7Ci0jaWZuZGVmIFVTRVRUWUxPQ0sKLSAgICAgICAgaWYgKCFu ZXR3b3JrICYmIGhhc2xvY2sgJiYgbG9jazJbMF0pCi0gICAgICAgICAgcHJpbnRmKCJcbiBTZWNv bmRhcnkgbG9ja2ZpbGU6ICVzIixsb2NrMik7Ci0jZW5kaWYgLyogVVNFVFRZTE9DSyAqLwotI2Vs c2UKLSNpZmRlZiBRTlgKLSAgICAgICAgewotICAgICAgICAgICAgZXh0ZXJuIGludCBxbnhwb3J0 bG9jaywgcW54b3BlbmNvdW50KCk7Ci0gICAgICAgICAgICBpZiAobG9jYWwpCi0gICAgICAgICAg ICAgIHByaW50ZigiIFFueC1wb3J0LWxvY2s6ICVzLCBPcGVuIGNvdW50OiAlZCIsCi0gICAgICAg ICAgICAgICAgICAgICBzaG93b2ZmKHFueHBvcnRsb2NrKSwKLSAgICAgICAgICAgICAgICAgICAg IHFueG9wZW5jb3VudCgpCi0gICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgZWxz ZQotICAgICAgICAgICAgICBwcmludGYoIiBRbngtcG9ydC1sb2NrOiAlcyIsIHNob3dvZmYocW54 cG9ydGxvY2spKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIFFOWCAqLwotI2VuZGlmIC8qIE5PVVVD UCAqLwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciAq IHM7Ci0gICAgICAgIHMgPSB0dGdsY2tkaXIoKTsKLSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0g ICAgICAgIHByaW50ZigiIExvY2tmaWxlIGRpcmVjdG9yeTogJXNcbiIsICpzID8gcyA6ICIobm9u ZSkiKTsKLSAgICB9Ci0jZW5kaWYgLyogVU5JWCAqLwotI2lmbmRlZiBNQUNPU1gKLSAgICBpZiAo IWxvY2FsKSB7Ci0gICAgICAgIHByaW50ZigiIFR5cGljYWwgcG9ydCBkZXZpY2UgbmFtZTogJXNc biIsdHRndHBuKCkpOwotICAgIH0KLSNlbmRpZgkvKiBNQUNPU1ggKi8KLSAgICBpZiAobG9jYWwp IHsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIGkgPSBwYXJpdHkgPyA3IDogODsKLSAgICAgICAg aWYgKGkgPT0gOCkgaSA9IChjbWFzayA9PSAwMTc3KSA/IDcgOiA4OwotICAgICAgICBwcmludGYo IiBUZXJtaW5hbCBieXRlc2l6ZTogJWQsIixpKTsKLSAgICAgICAgcHJpbnRmKCIgZXNjYXBlIGNo YXJhY3RlcjogJWQgKF4lYylcbiIsZXNjYXBlLGN0bChlc2NhcGUpKTsKLSAgICB9Ci19Ci0KLWlu dAotc2hvdGNwKG4pIGludCBuOyB7Ci0jaWZkZWYgVENQU09DS0VUCi0gICAgaWYgKG5ldHR5cGUg PT0gTkVUX1RDUEEgfHwgbmV0dHlwZSA9PSBORVRfVENQQikgewotICAgICAgICBwcmludGYoIlNF VCBUQ1AgcGFyYW1ldGVyczpcbiIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSAgICAgICAgcHJpbnRmKCIg UmV2ZXJzZSBETlMgbG9va3VwOiAlc1xuIiwgc2hvd29vYSh0Y3BfcmRucykpOwotICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOwotCi0jaWZkZWYgQ0tfRE5TX1NSVgotICAgICAgICBwcmludGYoIiBETlMgU2VydmljZSBS ZWNvcmRzIGxvb2t1cDogJXNcbiIsIHNob3dvb2EodGNwX2Ruc19zcnYpKTsKLSAgICAgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0g MDsKLSNlbmRpZiAvKiBDS19ETlNfU1JWICovCi0KLSNpZm5kZWYgTk9UQ1BPUFRTCi0jaWZkZWYg U09MX1NPQ0tFVAotI2lmZGVmIFNPX0tFRVBBTElWRQotICAgICAgICBwcmludGYoIiBLZWVwYWxp dmU6ICVzXG4iLCBzaG93b2ZmKHRjcF9rZWVwYWxpdmUpKTsKLSAgICAgICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSNlbmRp ZiAvKiBTT19LRUVQQUxJVkUgKi8KLQotI2lmZGVmIFNPX0xJTkdFUgotICAgICAgICBwcmludGYo IiBMaW5nZXI6ICVzIiwgdGNwX2xpbmdlciA/ICJvbiwgIiA6ICJvZmZcbiIgKTsKLSAgICAgICAg aWYgKHRjcF9saW5nZXIpIHsKLSAgICAgICAgICAgIGlmICh0Y3BfbGluZ2VyX3RtbykKLSAgICAg ICAgICAgICAgcHJpbnRmKCIlZCB4IDEwIG1pbGxpc2Vjb25kc1xuIix0Y3BfbGluZ2VyX3Rtbyk7 Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50Zigibm8gdGltZW91dFxuIik7 Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSNlbmRpZiAvKiBTT19MSU5HRVIgKi8KLQotI2lm ZGVmIFNPX0RPTlRST1VURQotICAgICAgICBwcmludGYoIiBEb250Um91dGU6ICVzXG4iLCB0Y3Bf ZG9udHJvdXRlID8gIm9uIiA6ICJvZmYiICk7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogU09f RE9OVFJPVVRFICovCi0KLSNpZmRlZiBUQ1BfTk9ERUxBWQotICAgICAgICBwcmludGYoIiBOb2Rl bGF5OiAlc1xuIiwgc2hvd29mZih0Y3Bfbm9kZWxheSkpOwotICAgICAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotI2VuZGlm IC8qIFRDUF9OT0RFTEFZICovCi0KLSNpZmRlZiBTT19TTkRCVUYKLSAgICAgICAgaWYgKHRjcF9z ZW5kYnVmIDw9IDApCi0gICAgICAgICAgcHJpbnRmKCIgU2VuZCBidWZmZXI6IChkZWZhdWx0IHNp emUpXG4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByaW50ZigiIFNlbmQgYnVmZmVyOiAl ZCBieXRlc1xuIiwgdGNwX3NlbmRidWYpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotI2VuZGlmIC8qIFNPX1NO REJVRiAqLwotI2lmZGVmIFNPX1JDVkJVRgotICAgICAgICBpZiAodGNwX3JlY3ZidWYgPD0gMCkK LSAgICAgICAgICBwcmludGYoIiBSZWNlaXZlIGJ1ZmZlcjogKGRlZmF1bHQgc2l6ZSlcbiIpOwot ICAgICAgICBlbHNlCi0gICAgICAgICAgcHJpbnRmKCIgUmVjZWl2ZSBidWZmZXI6ICVkIGJ5dGVz XG4iLCB0Y3BfcmVjdmJ1Zik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogU09fUkNWQlVGICov Ci0jZW5kaWYgLyogU09MX1NPQ0tFVCAqLwotI2VuZGlmIC8qIE5PVENQT1BUUyAqLwotICAgICAg ICBwcmludGYoIiBhZGRyZXNzOiAlc1xuIix0Y3BfYWRkcmVzcyA/IHRjcF9hZGRyZXNzIDogIihu b25lKSIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSNpZm5kZWYgTk9IVFRQCi0gICAgICAgIHByaW50Zigi IGh0dHAtcHJveHk6ICVzXG4iLHRjcF9odHRwX3Byb3h5ID8gdGNwX2h0dHBfcHJveHkgOiAiKG5v bmUpIik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotI2VuZGlmIC8qIE5PSFRUUCAqLwotI2lmZGVmIE5UCi0j aWZkZWYgQ0tfU09DS1MKLSAgICAgICAgcHJpbnRmKCIgc29ja3Mtc2VydmVyOiAlc1xuIix0Y3Bf c29ja3Nfc3ZyID8gdGNwX3NvY2tzX3N2ciA6ICIobm9uZSkiKTsKLSAgICAgICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0j aWZkZWYgQ0tfU09DS1NfTlMKLSAgICAgICAgcHJpbnRmKCIgc29ja3MtbmFtZS1zZXJ2ZXI6ICVz XG4iLAotICAgICAgICAgICAgICAgdGNwX3NvY2tzX25zID8gdGNwX3NvY2tzX25zIDogIihub25l KSIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKC0xKTsgZWxzZSBuID0gMDsKLSNlbmRpZiAvKiBDS19TT0NLU19OUyAqLwotI2VuZGlmIC8q IENLX1NPQ0tTICovCi0jZW5kaWYgLyogTlQgKi8KLSAgICB9Ci0jZW5kaWYgLyogVENQU09DS0VU ICovCi0gICAgcmV0dXJuKG4pOwotfQotCi0jaWZkZWYgVE5DT0RFCi1pbnQKLXNob3RvcHQobikg aW50IG47IHsKLSAgICBpbnQgb3B0OwotCi0gICAgcHJpbnRmKCIlLTIxcyAlMTJzICUxMnMgJTEy cyAlMTJzXG5cbiIsCi0gICAgICAgICAgICJUZWxuZXQgT3B0aW9uIiwiTWUgKGNsaWVudCkiLCJV IChjbGllbnQpIiwKLSAgICAgICAgICAgIk1lIChzZXJ2ZXIpIiwiVSAoc2VydmVyKSIpOwotICAg IG4gKz0gMjsKLSAgICBpZiAobiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigtMSk7IGVsc2UgbiA9IDA7Ci0KLSAgICBmb3IgKCBvcHQgPSBURUxPUFRfRklSU1Q7IG9wdCA8 PSBURUxPUFRfTEFTVDsgb3B0KyspIHsKLSAgICAgICAgc3dpdGNoIChvcHQpIHsKLSAgICAgICAg ICBjYXNlIFRFTE9QVF9BVVRIRU5USUNBVElPTjoKLSAgICAgICAgICBjYXNlIFRFTE9QVF9FTkNS WVBUSU9OOgotICAgICAgICAgIGNhc2UgVEVMT1BUX1RUWVBFOgotICAgICAgICAgIGNhc2UgVEVM T1BUX05BV1M6Ci0gICAgICAgICAgY2FzZSBURUxPUFRfQklOQVJZOgotICAgICAgICAgIGNhc2Ug VEVMT1BUX05FV0VOVklST046Ci0gICAgICAgICAgY2FzZSBURUxPUFRfU05ETE9DOgotICAgICAg ICAgIGNhc2UgVEVMT1BUX1hESVNQTE9DOgotICAgICAgICAgIGNhc2UgVEVMT1BUX1NHQToKLSAg ICAgICAgICBjYXNlIFRFTE9QVF9FQ0hPOgotICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoK LSAgICAgICAgICBjYXNlIFRFTE9QVF9TVEFSVF9UTFM6Ci0gICAgICAgICAgY2FzZSBURUxPUFRf Rk9SV0FSRF9YOgotICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg IH0KLSAgICAgICAgcHJpbnRmKCIlMDNkICUtMTdzICIsCi0gICAgICAgICAgICAgICBvcHQsIFRF TE9QVChvcHQpCi0gICAgICAgICAgICAgICApOwotICAgICAgICBwcmludGYoIiUxMnMgJTEycyAi LAotICAgICAgICAgICAgICAgVEVMT1BUX01PREUoVEVMT1BUX0RFRl9DX01FX01PREUob3B0KSks Ci0gICAgICAgICAgICAgICBURUxPUFRfTU9ERShURUxPUFRfREVGX0NfVV9NT0RFKG9wdCkpCi0g ICAgICAgICAgICAgICApOwotICAgICAgICBwcmludGYoIiUxMnMgJTEyc1xuIiwKLSAgICAgICAg ICAgICAgIFRFTE9QVF9NT0RFKFRFTE9QVF9ERUZfU19NRV9NT0RFKG9wdCkpLAotICAgICAgICAg ICAgICAgVEVMT1BUX01PREUoVEVMT1BUX0RFRl9TX1VfTU9ERShvcHQpKQotICAgICAgICAgICAg ICAgKTsKLQotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSAgICAgICAgaWYgKHNzdGVsbmV0KQotICAgICAgICAg IHByaW50ZigiJTIxcyAlMTJzICUxMnMgJTEycyAlMTJzXG4iLAotICAgICAgICAgICAgICAgICAi IiwKLSAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAgICIiLAotICAgICAgICAg ICAgICAgICAoVEVMT1BUX01FKG9wdCk/IldJTEwiOiJXT05UIiksCi0gICAgICAgICAgICAgICAg IChURUxPUFRfVShvcHQpPyJETyI6IkRPTlQiKQotICAgICAgICAgICAgICAgICApOwotICAgICAg ICBlbHNlCi0gICAgICAgICAgcHJpbnRmKCIlMjFzICUxMnMgJTEycyAlMTJzICUxMnNcbiIsCi0g ICAgICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAgICAoVEVMT1BUX01FKG9wdCk/IldJ TEwiOiJXT05UIiksCi0gICAgICAgICAgICAgICAgIChURUxPUFRfVShvcHQpPyJETyI6IkRPTlQi KSwKLSAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAgICIiCi0gICAgICAgICAg ICAgICAgICk7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotICAgIH0KLSAgICByZXR1cm4obik7Ci19Ci0KLWlu dAotc2hvdGVsKG4pIGludCBuOyB7Ci0gICAgZXh0ZXJuIGludCB0bl9kdXBsZXg7Ci0jaWZkZWYg Q0tfRU5WSVJPTk1FTlQKLSAgICBleHRlcm4gaW50IHRuX2Vudl9mbGc7Ci0gICAgZXh0ZXJuIGNo YXIgdG5fZW52X2FjY3RbXTsKLSAgICBleHRlcm4gY2hhciB0bl9lbnZfam9iW107Ci0gICAgZXh0 ZXJuIGNoYXIgdG5fZW52X3BybnRbXTsKLSAgICBleHRlcm4gY2hhciB0bl9lbnZfc3lzW107Ci0g ICAgZXh0ZXJuIGNoYXIgKiB0bl9lbnZfdXNlcnZhcls4XVsyXTsKLSAgICBpbnQgeDsKLSNlbmRp ZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotI2lmZGVmIENLX1NORExPQwotICAgIGV4dGVybiBjaGFy ICogdG5fbG9jOwotI2VuZGlmIC8qIENLX1NORExPQyAqLwotICAgIHByaW50ZigiU0VUIFRFTE5F VCBwYXJhbWV0ZXJzOlxuIGVjaG86ICVzXG4gTlZUIG5ld2xpbmUtbW9kZTogIiwKLSAgICAgICAg ICAgdG5fZHVwbGV4ID8gImxvY2FsIiA6ICJyZW1vdGUiKTsKLSAgICBzd2l0Y2ggKHRuX25sbSkg ewotICAgICAgY2FzZSBUTkxfQ1JOVUw6IHByaW50ZigiJXNcbiIsIm9mZiAoY3ItbnVsKSIpOyBi cmVhazsKLSAgICAgIGNhc2UgVE5MX0NSTEY6ICBwcmludGYoIiVzXG4iLCJvbiAoY3ItbGYpIik7 IGJyZWFrOwotICAgICAgY2FzZSBUTkxfQ1I6ICAgIHByaW50ZigiJXNcbiIsInJhdyAoY3IpIik7 IGJyZWFrOwotICAgICAgY2FzZSBUTkxfTEY6ICAgIHByaW50ZigiJXNcbiIsIihsZikiKTsgYnJl YWs7Ci0gICAgfQotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgewot ICAgICAgICBpbnQgdHlwZSA9IGNrX3RuX2F1dGhlbnRpY2F0ZWQoKTsKLSAgICAgICAgcHJpbnRm KCIgYXV0aGVudGljYXRpb246ICIpOwotICAgICAgICBzd2l0Y2ggKHNzdGVsbmV0ID8KLSAgICAg ICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgOgotICAgICAg ICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pCi0gICAgICAg ICAgICAgICAgKSB7Ci0gICAgICAgICAgY2FzZSBUTl9OR19BQzogcHJpbnRmKCAiYWNjZXB0ZWQg IiApOyBicmVhazsKLSAgICAgICAgICBjYXNlIFROX05HX1JGOiBwcmludGYoICJyZWZ1c2VkICAi ICk7IGJyZWFrOwotICAgICAgICAgIGNhc2UgVE5fTkdfUlE6IHByaW50ZiggInJlcXVlc3RlZCIp OyBicmVhazsKLSAgICAgICAgICBjYXNlIFROX05HX01VOiBwcmludGYoICJyZXF1aXJlZCAiKTsg YnJlYWs7Ci0gICAgICAgIH0KLQotI2lmZGVmIENLX1NTTAotICAgICAgICBpZiAoKHNzbF9hY3Rp dmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpICYmCi0gICAgICAgICAgICAgY2tfdG5fYXV0aF92 YWxpZCgpID09IEFVVEhfVkFMSUQgJiYKLSAgICAgICAgICAgICAoIVRFTE9QVF9VKFRFTE9QVF9B VVRIRU5USUNBVElPTikgfHwKLSAgICAgICAgICAgICAgIHR5cGUgPT0gQVVUSFRZUEVfTlVMTCB8 fAotICAgICAgICAgICAgICAgdHlwZSA9PSBBVVRIVFlQRV9BVVRPKSkKLSAgICAgICAgICAgIHBy aW50ZigiICAgaW4gdXNlOiBYLjUwOSBjZXJ0aWZpY2F0ZVxuIik7Ci0gICAgICAgIGVsc2UKLSNl bmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICBwcmludGYoIiAgIGluIHVzZTogJXNcbiIsQVVU SFRZUEVfTkFNRSh0eXBlKSk7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotICAgICAgICBpZiAoZm9yd2FyZF9m bGFnKQotICAgICAgICAgIHByaW50ZigiICBjcmVkZW50aWFscyBmb3J3YXJkaW5nIHJlcXVlc3Rl ZCAlc1xuIiwKLSAgICAgICAgICAgICAgICAgZm9yd2FyZGVkX3RpY2tldHMgPyAiYW5kIGNvbXBs ZXRlZCIgOgotICAgICAgICAgICAgICAgICAiYnV0IG5vdCBjb21wbGV0ZWQiKTsKLSAgICAgICAg ZWxzZQotICAgICAgICAgIHByaW50ZigiICBjcmVkZW50aWFscyBmb3J3YXJkaW5nIGRpc2FibGVk XG4iKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigtMSk7IGVsc2UgbiA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9O ICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIHsKLSAgICAgICAgaW50IGkseDsKLSAgICAg ICAgaW50IGVfdHlwZSA9IGNrX3RuX2VuY3J5cHRpbmcoKTsKLSAgICAgICAgaW50IGRfdHlwZSA9 IGNrX3RuX2RlY3J5cHRpbmcoKTsKLSAgICAgICAgY2hhciAqIGVfc3RyID0gTlVMTCwgKiBkX3N0 ciA9IE5VTEw7Ci0gICAgICAgIHN0YXRpYyBzdHJ1Y3Qga2V5dGFiICogdG5ldGJsID0gTlVMTDsK LSAgICAgICAgc3RhdGljIGludCBudG5ldGJsID0gMDsKLQotICAgICAgICB4ID0gY2tfZ2V0X2Ny eXB0X3RhYmxlKCZ0bmV0YmwsJm50bmV0YmwpOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBu dG5ldGJsOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChlX3R5cGUgPT0gdG5ldGJsW2ldLmt3dmFs KQotICAgICAgICAgICAgICBlX3N0ciA9IHRuZXRibFtpXS5rd2Q7Ci0gICAgICAgICAgICBpZiAo ZF90eXBlID09IHRuZXRibFtpXS5rd3ZhbCkKLSAgICAgICAgICAgICAgZF9zdHIgPSB0bmV0Ymxb aV0ua3dkOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiIGVuY3J5cHRpb246ICIpOwotICAg ICAgICBzd2l0Y2ggKFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSkgewotICAgICAg ICAgIC8qIFRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgdG8gcmVwb3J0IGJvdGggTUUgYW5kIFUgbW9k ZXMgKi8KLSAgICAgICAgICBjYXNlIFROX05HX0FDOiBwcmludGYoICJhY2NlcHRlZCAiICk7IGJy ZWFrOwotICAgICAgICAgIGNhc2UgVE5fTkdfUkY6IHByaW50ZiggInJlZnVzZWQgICIgKTsgYnJl YWs7Ci0gICAgICAgICAgY2FzZSBUTl9OR19SUTogcHJpbnRmKCAicmVxdWVzdGVkIik7IGJyZWFr OwotICAgICAgICAgIGNhc2UgVE5fTkdfTVU6IHByaW50ZiggInJlcXVpcmVkICIpOyBicmVhazsK LSAgICAgICAgfQotICAgICAgICBwcmludGYoIiAgICAgICBpbiB1c2U6ICIpOwotICAgICAgICBz d2l0Y2ggKChlX3R5cGUgPyAxIDogMCkgfCAoZF90eXBlID8gMiA6IDApKSB7Ci0gICAgICAgICAg Y2FzZSAwOgotICAgICAgICAgICAgcHJpbnRmKCJwbGFpbiB0ZXh0IGluIGJvdGggZGlyZWN0aW9u cyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAg cHJpbnRmKCIlcyBvdXRwdXQsIHBsYWluIHRleHQgaW5wdXQiLGVfc3RyKTsKLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHByaW50ZigicGxhaW4gdGV4 dCBvdXRwdXQsICVzIGlucHV0IixkX3N0cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICBjYXNlIDM6Ci0gICAgICAgICAgICBwcmludGYoIiVzIG91dHB1dCwgJXMgaW5wdXQiLGVfc3Ry LGRfc3RyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHByaW50Zigi XG4iKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigtMSk7IGVsc2UgbiA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8K LSNpZmRlZiBJS1NfT1BUSU9OCi0gICAgcHJpbnRmKCIga2VybWl0OiAiKTsKLSAgICBzd2l0Y2gg KFRFTE9QVF9VX01PREUoVEVMT1BUX0tFUk1JVCkpIHsKLSAgICAgIGNhc2UgVE5fTkdfQUM6IHBy aW50ZiggInUsIGFjY2VwdGVkOyAgIiApOyBicmVhazsKLSAgICAgIGNhc2UgVE5fTkdfUkY6IHBy aW50ZiggInUsIHJlZnVzZWQ7ICAgIiApOyBicmVhazsKLSAgICAgIGNhc2UgVE5fTkdfUlE6IHBy aW50ZiggInUsIHJlcXVlc3RlZDsgIik7IGJyZWFrOwotICAgICAgY2FzZSBUTl9OR19NVTogcHJp bnRmKCAidSwgcmVxdWlyZWQ7ICAiKTsgYnJlYWs7Ci0gICAgfQotICAgIHN3aXRjaCAoVEVMT1BU X01FX01PREUoVEVMT1BUX0tFUk1JVCkpIHsKLSAgICAgIGNhc2UgVE5fTkdfQUM6IHByaW50Zigg Im1lLCBhY2NlcHRlZDsgICIgKTsgYnJlYWs7Ci0gICAgICBjYXNlIFROX05HX1JGOiBwcmludGYo ICJtZSwgcmVmdXNlZDsgICAiICk7IGJyZWFrOwotICAgICAgY2FzZSBUTl9OR19SUTogcHJpbnRm KCAibWUsIHJlcXVlc3RlZDsgIik7IGJyZWFrOwotICAgICAgY2FzZSBUTl9OR19NVTogcHJpbnRm KCAibWUsIHJlcXVpcmVkOyAgIik7IGJyZWFrOwotICAgIH0KLSAgICBpZiAoVEVMT1BUX1UoVEVM T1BUX0tFUk1JVCkpCi0gICAgICBwcmludGYoIiB1LCAlcyIsCi0gICAgICAgICAgICAgVEVMT1BU X1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ID8KLSAgICAgICAgICAgICAic3RhcnRl ZCIgOgotICAgICAgICAgICAgICJzdG9wcGVkIgotICAgICAgICAgICAgICk7Ci0gICAgZWxzZQot ICAgICAgcHJpbnRmKCIgdSwgbi9hIik7Ci0gICAgaWYgKFRFTE9QVF9NRShURUxPUFRfS0VSTUlU KSkKLSAgICAgIHByaW50ZigiIG1lLCAlczsiLAotICAgICAgICAgICAgIFRFTE9QVF9TQihURUxP UFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgPwotICAgICAgICAgICAgICJzdGFydGVkIiA6Ci0g ICAgICAgICAgICAgInN0b3BwZWQiCi0gICAgICAgICAgICAgKTsKLSAgICBlbHNlCi0gICAgICBw cmludGYoIiBtZSwgbi9hOyIpOwotICAgIHByaW50ZigiXG4iKTsKLSAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSNlbmRp ZiAvKiBJS1NfT1BUSU9OICovCi0gICAgcHJpbnRmKCIgQklOQVJZIG5ld2xpbmUtbW9kZTogIik7 Ci0gICAgc3dpdGNoICh0bl9iX25sbSkgewotICAgICAgY2FzZSBUTkxfQ1JOVUw6IHByaW50Zigi JXNcbiIsIm9mZiAoY3ItbnVsKSIpOyBicmVhazsKLSAgICAgIGNhc2UgVE5MX0NSTEY6ICBwcmlu dGYoIiVzXG4iLCJvbiAoY3ItbGYpIik7IGJyZWFrOwotICAgICAgY2FzZSBUTkxfQ1I6ICAgIHBy aW50ZigiJXNcbiIsInJhdyAoY3IpIik7IGJyZWFrOwotICAgICAgY2FzZSBUTkxfTEY6ICAgIHBy aW50ZigiJXNcbiIsIihsZikiKTsgYnJlYWs7Ci0gICAgfQotICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotICAgIHByaW50 ZigiIGJpbmFyeS1tb2RlOiAiKTsKLSAgICBzd2l0Y2ggKFRFTE9QVF9VX01PREUoVEVMT1BUX0JJ TkFSWSkpIHsKLSAgICAgIGNhc2UgVE5fTkdfQUM6IHByaW50ZiggInUsIGFjY2VwdGVkOyAgIiAp OyBicmVhazsKLSAgICAgIGNhc2UgVE5fTkdfUkY6IHByaW50ZiggInUsIHJlZnVzZWQ7ICAgIiAp OyBicmVhazsKLSAgICAgIGNhc2UgVE5fTkdfUlE6IHByaW50ZiggInUsIHJlcXVlc3RlZDsgIik7 IGJyZWFrOwotICAgICAgY2FzZSBUTl9OR19NVTogcHJpbnRmKCAidSwgcmVxdWlyZWQ7ICAiKTsg YnJlYWs7Ci0gICAgfQotICAgIHN3aXRjaCAoVEVMT1BUX01FX01PREUoVEVMT1BUX0JJTkFSWSkp IHsKLSAgICAgIGNhc2UgVE5fTkdfQUM6IHByaW50ZiggIm1lLCBhY2NlcHRlZDsgIiApOyBicmVh ayA7Ci0gICAgICBjYXNlIFROX05HX1JGOiBwcmludGYoICJtZSwgcmVmdXNlZDsgIiApOyBicmVh azsKLSAgICAgIGNhc2UgVE5fTkdfUlE6IHByaW50ZiggIm1lLCByZXF1ZXN0ZWQ7ICIpOyBicmVh azsKLSAgICAgIGNhc2UgVE5fTkdfTVU6IHByaW50ZiggIm1lLCByZXF1aXJlZDsgICIpOyBicmVh azsKLSAgICB9Ci0gICAgcHJpbnRmKCJ1LCAlczsgbWUsICVzXG4iLAotICAgICAgICAgICBURUxP UFRfVShURUxPUFRfQklOQVJZKSA/ICJCSU5BUlkiIDogIk5WVCIsCi0gICAgICAgICAgIFRFTE9Q VF9NRShURUxPUFRfQklOQVJZKSA/ICJCSU5BUlkiIDogIk5WVCIKLSAgICAgICAgICAgKTsKLSAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxz ZSBuID0gMDsKLSAgICBwcmludGYoIiBiaW5hcnktdHJhbnNmZXItbW9kZTogJXNcbiIsc2hvd29m Zih0bl9iX3hmZXIpKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoIiBidWcgYmluYXJ5LW1lLW1l YW5zLXUtdG9vOiAlc1xuIixzaG93b2ZmKHRuX2JfbWV1KSk7Ci0gICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0gICAgcHJp bnRmKCIgYnVnIGJpbmFyeS11LW1lYW5zLW1lLXRvbzogJXNcbiIsc2hvd29mZih0bl9iX3VtZSkp OwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEp OyBlbHNlIG4gPSAwOwotICAgIHByaW50ZigiIGJ1ZyBzYi1pbXBsaWVzLXdpbGwtZG86ICVzXG4i LHNob3dvZmYodG5fc2JfYnVnKSk7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKCIgYnVnIGF1dGgt a3JiNS1kZXM6ICVzXG4iLHNob3dvZmYodG5fYXV0aF9rcmI1X2Rlc19idWcpKTsKLSAgICBpZiAo KytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0g MDsKLSAgICBwcmludGYoIiB0ZXJtaW5hbC10eXBlOiAiKTsKLSAgICBpZiAodG5fdGVybSkgewot ICAgICAgICBwcmludGYoIiVzXG4iLHRuX3Rlcm0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNo YXIgKnA7Ci0jaWZkZWYgT1MyCi0gICAgICAgIHAgPSAodHRfdHlwZSA+PSAwICYmIHR0X3R5cGUg PD0gbWF4X3R0KSA/Ci0gICAgICAgICAgdHRfaW5mb1t0dF90eXBlXS54X25hbWUgOgotICAgICAg ICAgICAgIlVOS05PV04iOwotI2Vsc2UKLSAgICAgICAgcCA9IGdldGVudigiVEVSTSIpOwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICBpZiAocCkKLSAgICAgICAgICBwcmludGYoIm5vbmUgKCVz IHdpbGwgYmUgdXNlZClcbiIscCk7Ci0gICAgICAgIGVsc2UgcHJpbnRmKCJub25lXG4iKTsKLSAg ICB9Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigt MSk7IGVsc2UgbiA9IDA7Ci0jaWZkZWYgQ0tfRU5WSVJPTk1FTlQKLSAgICBwcmludGYoIiBlbnZp cm9ubWVudDogJXNcbiIsIHNob3dvZmYodG5fZW52X2ZsZykpOwotICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotICAgIHBy aW50ZigiICAgQUNDT1VOVDogJXNcbiIsdG5fZW52X2FjY3QpOwotICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotICAgIHBy aW50ZigiICAgRElTUExBWTogJXNcbiIsKGNoYXIgKil0bl9nZXRfZGlzcGxheSgpID8KLSAgICAg ICAgICAgIChjaGFyICopdG5fZ2V0X2Rpc3BsYXkoKSA6ICIiKTsKLSAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSAgICBw cmludGYoIiAgIEpPQiAgICA6ICVzXG4iLHRuX2Vudl9qb2IpOwotICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotICAgIHBy aW50ZigiICAgUFJJTlRFUjogJXNcbiIsdG5fZW52X3BybnQpOwotICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotI2lmbmRl ZiBOT1NQTAotICAgIHByaW50ZigiICAgVVNFUiAgIDogJXNcbiIsdWlkYnVmKTsKLSAgICBpZiAo KytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0g MDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHByaW50ZigiICAgU1lTVEVNIDogJXNcbiIsdG5f ZW52X3N5cyk7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigtMSk7IGVsc2UgbiA9IDA7Ci0gICAgZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgewotICAg ICAgICBpZiAodG5fZW52X3VzZXJ2YXJbeF1bMF0gJiYgdG5fZW52X3VzZXJ2YXJbeF1bMV0pIHsK LSAgICAgICAgICAgIHByaW50ZigiICAgJS03czogJXNcbiIsdG5fZW52X3VzZXJ2YXJbeF1bMF0s Ci0gICAgICAgICAgICAgICAgICAgdG5fZW52X3VzZXJ2YXJbeF1bMV0pOwotICAgICAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2Ug biA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KLSNp ZmRlZiBDS19TTkRMT0MKLSAgICBwcmludGYoIiAgTE9DQVRJT046ICVzXG4iLCB0bl9sb2MgPyB0 bl9sb2MgOiAiIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogQ0tfU05ETE9DICovCi0jaWZkZWYg Q0tfRk9SV0FSRF9YCi0gICAgcHJpbnRmKCIgLlhhdXRob3JpdHktZmlsZTogJXNcbiIsIChjaGFy ICopWGF1RmlsZU5hbWUoKSA/Ci0gICAgICAgICAgICAoY2hhciAqKVhhdUZpbGVOYW1lKCkgOiAi KG5vbmUpIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigtMSk7IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0gICAgcmV0 dXJuKG4pOwotfQotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0jaWZkZWYgQ0tfTkVUQklPUwotc3Rh dGljIGludAotc2hvbmIobikgaW50IG47IHsKLSAgICBwcmludGYoIk5FVEJJT1MgcGFyYW1ldGVy czpcbiIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oLTEpOyBlbHNlIG4gPSAwOwotICAgIHByaW50ZigiIEFQSSAgICAgICA6ICVzXG4iLAotICAg ICAgICAgICBOZXRiZXVpQVBJID8KLSAgICAgICAgICAgIk5FVEFQSS5ETEwgLSBJQk0gRXh0ZW5k ZWQgU2VydmljZXMgb3IgTm92ZWxsIE5ldHdhcmUgUmVxdWVzdGVyIgotICAgICAgICAgICA6ICJB Q1NORVRCLkRMTCAtIElCTSBOZXR3b3JrIFRyYW5zcG9ydCBTZXJ2aWNlcy8yIiApIDsKLSAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBu ID0gMDsKLSAgICBwcmludGYoIiBMb2NhbCBOYW1lOiBbJXNdXG4iLCBOZXRCaW9zTmFtZSk7Ci0g ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVs c2UgbiA9IDA7Ci0gICAgcHJpbnRmKCIgQWRhcHRlciAgIDogJWRcbiIsIE5ldEJpb3NBZGFwdGVy KTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0x KTsgZWxzZSBuID0gMDsKLSAgICBpZiAoTmV0Qmlvc0xTTiA+IDB4RkYpIHsKLSAgICAgICAgcHJp bnRmKCIgU2Vzc2lvbiAgIDogJWRcbiIsIE5ldEJpb3NMU04pOwotICAgIH0gZWxzZSB7Ci0gICAg ICAgIHByaW50ZigiIFNlc3Npb24gICA6IG5vbmUgYWN0aXZlXG4iKTsKLSAgICB9Ci0gICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9 IDA7Ci0gICAgcmV0dXJuKG4pOwotfQotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KLQotI2lmbmRl ZiBOT05FVAotaW50Ci1zaG9uZXQoKSB7Ci0KLSNpZm5kZWYgTkVUQ09OTgotICAgIHByaW50Zigi XG5ObyBuZXR3b3JrcyBhcmUgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdFxu Iik7Ci0KLSNlbHNlCi0jaWZkZWYgTk9MT0NBTAotICAgIHByaW50ZigiXG5ObyBuZXR3b3JrcyBh cmUgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdFxuIik7Ci0KLSNlbHNlIC8q IHJlc3Qgb2YgdGhpcyByb3V0aW5lICovCi0KLSAgICBpbnQgaSwgbiA9IDQ7Ci0KLSNpZm5kZWYg Tk9ESUFMCi0gICAgaWYgKG5uZXRkaXIgPD0gMSkgewotICAgICAgICBwcmludGYoIlxuTmV0d29y ayBkaXJlY3Rvcnk6ICVzXG4iLG5ldGRpclswXSA/IG5ldGRpclswXSA6ICIobm9uZSkiKTsKLSAg ICAgICAgbisrOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBpOwotICAgICAgICBwcmludGYo IlxuTmV0d29yayBkaXJlY3RvcmllczpcbiIpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbm5l dGRpcjsgaSsrKSB7Ci0gICAgICAgICAgICBwcmludGYoIiUyZC4gJXNcbiIsaSxuZXRkaXJbaV0p OwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBOT0RJQUwg Ki8KLQotI2lmZGVmIFNTSENNRAotICAgIHsKLSAgICAgICAgZXh0ZXJuIGNoYXIgKiBzc2hjbWQ7 Ci0gICAgICAgIHByaW50ZigiU1NIIENPTU1BTkQ6ICVzXG4iLHNzaGNtZCA/IHNzaGNtZCA6ICJz c2ggLWUgbm9uZSIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgIH0KLSNlbmRpZiAvKiBTU0hDTUQgKi8K LQotI2lmZGVmIE9TMgotICAgIHByaW50ZigiXG5OZXR3b3JrIGF2YWlsYWJpbGl0eTpcbiIpOwot I2Vsc2UKLSAgICBwcmludGYoIlxuU3VwcG9ydGVkIG5ldHdvcmtzOlxuIik7Ci0jZW5kaWYgLyog T1MyICovCi0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigwKTsgZWxzZSBuID0gMDsKLQotI2lmZGVmIFZNUwotCi0jaWZkZWYgVENQV0FSRQotICAgIHBy aW50ZigiIFByb2Nlc3MgU29mdHdhcmUgQ29ycG9yYXRpb24gVENQd2FyZSBmb3IgT3BlblZNUyIp OwotI2Vsc2UKLSNpZmRlZiBNVUxUSU5FVAotICAgIHByaW50ZigiIFRHViBNdWx0aU5ldCBUQ1Av SVAiKTsKLSNlbHNlCi0jaWZkZWYgV0lOVENQCi0gICAgcHJpbnRmKCIgV09MTE9OR09ORyBXSU4v VENQIik7Ci0jZWxzZQotI2lmZGVmIERFQ19UQ1BJUAotICAgIHsKLSAgICAgICAgc3RhdGljICRE RVNDUklQVE9SKHRjcF9kZXNjLCJfVENQMDoiKTsKLSAgICAgICAgaW50IHN0YXR1czsKLSAgICAg ICAgbG9uZyBkZXZjbGFzczsKLSAgICAgICAgc3RhdGljIGludCBpdG1jb2QgPSBEVkkkX0RFVkNM QVNTOwotCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBzdGF0dXMgPSBMSUIkR0VURFZJKCZpdG1j b2QsIDAsICZ0Y3BfZGVzYywgJmRldmNsYXNzKTsKLSNlbHNlCi0gICAgICAgIC8qIE1hcnRpbiBa aW5zZXIgOS85NiAqLwotICAgICAgICBzdGF0dXMgPSBsaWIkZ2V0ZHZpKCZpdG1jb2QsIDAsICZ0 Y3BfZGVzYywgJmRldmNsYXNzKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGlmICgo c3RhdHVzICYgMSkgJiYgKGRldmNsYXNzID09IERDJF9TQ09NKSkKLSAgICAgICAgICBwcmludGYo IiBQcm9jZXNzIFNvZnR3YXJlIENvcnBvcmF0aW9uIFRDUHdhcmUgZm9yIE9wZW5WTVMiKTsKLSAg ICAgICAgZWxzZQotI2lmZGVmIFVDWDUwCi0gICAgICAgICAgcHJpbnRmKCIgREVDIFRDUC9JUCBT ZXJ2aWNlcyBmb3IgKE9wZW4pVk1TIDUuMCIpOwotI2Vsc2UKLSAgICAgICAgICBwcmludGYoIiBE RUMgVENQL0lQIFNlcnZpY2VzIGZvciAoT3BlbilWTVMiKTsKLSNlbmRpZiAvKiBVQ1g1MCAqLwot ICAgIH0KLSNlbHNlCi0jaWZkZWYgQ01VX1RDUElQCi0gICAgcHJpbnRmKCIgQ01VLU9wZW5WTVMv SVAiKTsKLSNlbHNlCi0gICAgcHJpbnRmKCIgTm9uZSIpOwotI2VuZGlmIC8qIENNVV9UQ1BJUCAq LwotI2VuZGlmIC8qIERFQ19UQ1BJUCAqLwotI2VuZGlmIC8qIFdJTlRDUCAqLwotI2VuZGlmIC8q IE1VTFRJTkVUICovCi0jZW5kaWYgLyogVENQV0FSRSAqLwotICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0jaWZkZWYgVE5D T0RFCi0gICAgcHJpbnRmKCIsIFRFTE5FVCBwcm90b2NvbFxuXG4iKTsKLSAgICBpZiAoKytuID4g Y21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAg IG4gPSBzaG90ZWwobik7Ci0gICAgaWYgKG4gPCAwKSByZXR1cm4oMCk7Ci0gICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSNl bmRpZiAvKiBUTkNPREUgKi8KLSAgICBwcmludGYoIlxuIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICBwcmlu dGYoIlxuIik7Ci0gICAgbiA9IHNob3RjcCgrK24pOwotICAgIGlmIChuIDwgMCkgcmV0dXJuKDAp OwotI2Vsc2UgLyogTm90IFZNUyAqLwotCi0jaWZkZWYgU1VOWDI1Ci0gICAgcHJpbnRmKCIgU3Vu TGluayBYLjI1XG4iKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotI2VuZGlmIC8qIFNVTlgyNSAqLwotCi0jaWZkZWYg U1RSQVRVU1gyNQotICAgIHByaW50ZigiIFN0cmF0dXMgVk9TIFguMjVcbiIpOwotICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 Ci0jZW5kaWYgLyogU1RSQVRVU1gyNSAqLwotCi0jaWZkZWYgSUJNWDI1Ci0gICAgcHJpbnRmKCIg SUJNIEFJWCBYLjI1XG4iKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotI2VuZGlmIC8qIElCTVgyNSAqLwotCi0jaWZk ZWYgSFBYMjUKLSAgICBwcmludGYoIiBIUC1VWCBYLjI1XG4iKTsKLSAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotI2VuZGlm IC8qIEhQWDI1ICovCi0KLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgaWYgKGNrX3NzbGVheV9pc19p bnN0YWxsZWQoKSkKLSAgICAgICAgcHJpbnRmKCIgU1NIIFYxIGFuZCBWMiBwcm90b2NvbHNcbiIp OwotICAgIGVsc2UKLSAgICAgICAgcHJpbnRmKCIgU1NIIFYxIGFuZCBWMiBwcm90b2NvbHMgLSBu b3QgYXZhaWxhYmxlXG4iKTsKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0KLSNpZmRlZiBERUNO RVQKLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotICAgIGlmIChkbmV0X2F2YWlsKQotICAgICAgcHJp bnRmKCIgREVDbmV0LCBMQVQgYW5kIENURVJNIHByb3RvY29sc1xuIik7Ci0gICAgZWxzZQotICAg ICAgcHJpbnRmKCIgREVDbmV0LCBMQVQgYW5kIENURVJNIHByb3RvY29scyAtIG5vdCBhdmFpbGFi bGVcbiIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMCk7IGVsc2UgbiA9IDA7Ci0jZWxzZSAvKiBOVCAqLwotICAgIGlmIChkbmV0X2F2YWlsKQot ICAgICAgcHJpbnRmKCIgREVDbmV0LCBMQVQgcHJvdG9jb2xcbiIpOwotICAgIGVsc2UKLSAgICAg IHByaW50ZigiIERFQ25ldCwgTEFUIHByb3RvY29sIC0gbm90IGF2YWlsYWJsZVxuIik7Ci0gICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBu ID0gMDsKLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UKLSAgICBwcmludGYoIiBERUNuZXRcbiIpOwot ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVs c2UgbiA9IDA7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogREVDTkVUICovCi0KLSNpZmRl ZiBOUElQRQotICAgIHByaW50ZigiIE5hbWVkIFBpcGVzXG4iKTsKLSAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotI2VuZGlm IC8qIE5QSVBFICovCi0KLSNpZmRlZiBDS19ORVRCSU9TCi0gICAgaWYgKG5ldGJpb3NBdmFpbCkK LSAgICAgIHByaW50ZigiIE5FVEJJT1NcbiIpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZigiIE5F VEJJT1MgLSBub3QgYXZhaWxhYmxlXG4iKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotI2VuZGlmIC8qIENLX05FVEJJ T1MgKi8KLQotI2lmZGVmIFNVUEVSTEFUCi0gICAgaWYgKHNsYXRfYXZhaWwpCi0gICAgICBwcmlu dGYoIiBTdXBlckxBVFxuIik7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCIgU3VwZXJMQVQgLSBu b3QgYXZhaWxhYmxlXG4iKSA7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSNlbmRpZiAvKiBTVVBFUkxBVCAqLwotCi0j aWZkZWYgVENQU09DS0VUCi0gICAgaWYgKAotI2lmZGVmIE9TMgotICAgICAgICB0Y3BfYXZhaWwK LSNlbHNlCi0gICAgICAgIDEKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgKSB7Ci0gICAgICAg IGNoYXIgaXBhZGRyWzE2XTsKLQotICAgICAgICBpZiAoZ2V0bG9jYWxpcGFkZHJzKGlwYWRkciwx NiwwKSA8IDApIHsKLSNpZmRlZiBPUzJPTkxZCi0gICAgICAgICAgICBwcmludGYoIiBUQ1AvSVAg dmlhICVzXG4iLCB0Y3BuYW1lKTsKLSNlbHNlCi0gICAgICAgICAgICBwcmludGYoIiBUQ1AvSVBc biIpOwotI2VuZGlmIC8qIE9TMk9OTFkgKi8KLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICBpbnQgaSA9IDE7Ci0jaWZkZWYgT1MyT05MWQotICAgICAgICAg IHByaW50ZigiIFRDUC9JUCBbJTE2c10gdmlhICVzXG4iLCBpcGFkZHIsIHRjcG5hbWUpOwotI2Vs c2UKLSAgICAgICAgICBwcmludGYoIiBUQ1AvSVAgWyUxNnNdXG4iLGlwYWRkcik7Ci0jZW5kaWYg LyogT1MyT05MWSAqLwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLQotICAgICAgICAgICAgd2hpbGUgKGdl dGxvY2FsaXBhZGRycyhpcGFkZHIsMTYsaSsrKSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgcHJp bnRmKCIgICAgICAgIFslMTZzXVxuIixpcGFkZHIpOwotICAgICAgICAgICAgICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5ldHR5cGUgPT0gTkVUX1RDUEIp IHsKLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgIG4gPSBzaG90Y3AoKytu KTsKLSAgICAgICAgICAgIGlmIChuIDwgMCkgcmV0dXJuKDApOwotI2lmZGVmIFROQ09ERQotICAg ICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgICAgbiA9IHNob3RlbCgrK24pOwotICAg ICAgICAgICAgaWYgKG4gPCAwKSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0gICAg ICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDAp OyBlbHNlIG4gPSAwOwotICAgICAgICB9Ci0jaWZkZWYgT1MyCi0gICAgfSBlbHNlIHsKLSAgICAg ICAgcHJpbnRmKCIgVENQL0lQIC0gbm90IGF2YWlsYWJsZSVzXG4iLHRjcG5hbWVbMF0gPyB0Y3Bu YW1lIDogIiIgKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0jZW5k aWYgLyogVENQU09DS0VUICovCi0KLSNpZmRlZiBDS19ORVRCSU9TCi0gICAgaWYgKG5ldGJpb3NB dmFpbCAmJiBuZXR0eXBlID09IE5FVF9CSU9TKSB7Ci0gICAgICAgcHJpbnRmKCJcbiIpIDsKLSAg ICAgICBpZiAoKG4gPSBzaG9uYigrK24pKSA8IDApIHJldHVybigwKTsKLSAgICAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwot ICAgIH0KLSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0KLSNlbmRpZiAvKiBWTVMgKi8KLQotICAg IHByaW50ZigiXG5BY3RpdmUgbmV0d29yayBjb25uZWN0aW9uOlxuIik7Ci0gICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLQot ICAgIGlmIChuZXR3b3JrKSB7Ci0gICAgICAgIHByaW50ZigiIEhvc3Q6ICVzIix0dG5hbWUpOwot ICAgICAgICBpZiAoKG5ldHR5cGUgPT0gTkVUX1RDUEEgfHwgbmV0dHlwZSA9PSBORVRfVENQQikg JiYgKmlwYWRkcikKLSAgICAgICAgICBwcmludGYoIiBbJXNdIixpcGFkZHIpOwotICAgIH0gZWxz ZQotICAgICAgcHJpbnRmKCIgSG9zdDogbm9uZSIpOwotICAgIHByaW50ZigiLCB2aWE6ICIpOwot ICAgIGlmIChuZXR0eXBlID09IE5FVF9UQ1BBIHx8IG5ldHR5cGUgPT0gTkVUX1RDUEIpCi0gICAg ICBwcmludGYoInRjcC9pcFxuIik7Ci0gICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfU1gyNSkK LSAgICAgIHByaW50ZigiU3VuTGluayBYLjI1XG4iKTsKLSAgICBlbHNlIGlmIChuZXR0eXBlID09 IE5FVF9WWDI1KQotICAgICAgcHJpbnRmKCJTdHJhdHVzIFZPUyBYLjI1XG4iKTsKLSAgICBlbHNl IGlmIChuZXR0eXBlID09IE5FVF9JWDI1KQotICAgICAgcHJpbnRmKCJJQk0gQUlYIFguMjVcbiIp OwotICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX0hYMjUpCi0gICAgICBwcmludGYoIkhQLVVY IFguMjVcbiIpOwotICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX0RFQykgewotICAgICAgICBp ZiAoIHR0bnByb3RvID09IE5QX0xBVCApCi0gICAgICAgICAgcHJpbnRmKCJERUNuZXQgTEFUXG4i KTsKLSAgICAgICAgZWxzZSBpZiAoIHR0bnByb3RvID09IE5QX0NURVJNICkKLSAgICAgICAgICBw cmludGYoIkRFQ25ldCBDVEVSTVxuIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwcmludGYo IkRFQ25ldFxuIik7Ci0gICAgfSBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9QSVBFKQotICAgICAg cHJpbnRmKCJOYW1lZCBQaXBlc1xuIik7Ci0gICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfQklP UykKLSAgICAgIHByaW50ZigiTmV0QklPU1xuIik7Ci0gICAgZWxzZSBpZiAobmV0dHlwZSA9PSBO RVRfU0xBVCkKLSAgICAgIHByaW50ZigiU3VwZXJMQVRcbiIpOwotCi0jaWZkZWYgTkVURklMRQot ICAgIGVsc2UgaWYgKCBuZXR0eXBlID09IE5FVF9GSUxFICkKLSAgICAgIHByaW50ZigibG9jYWwg ZmlsZVxuIik7Ci0jZW5kaWYgLyogTkVURklMRSAqLwotI2lmZGVmIE5FVENNRAotICAgIGVsc2Ug aWYgKCBuZXR0eXBlID09IE5FVF9DTUQgKQotICAgICAgcHJpbnRmKCJwaXBlXG4iKTsKLSNlbmRp ZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBlbHNlIGlmICggbmV0dHlwZSA9PSBO RVRfUFRZICkKLSAgICAgICAgcHJpbnRmKCJwc2V1ZG90ZXJtaW5hbFxuIik7Ci0jZW5kaWYgLyog TkVUUFRZICovCi0jaWZkZWYgTkVURExMCi0gICAgZWxzZSBpZiAoIG5ldHR5cGUgPT0gTkVUX0RM TCApCi0gICAgICBwcmludGYoImR5bmFtaWMgbGluayBsaWJyYXJ5XG4iKTsKLSNlbmRpZiAvKiBO RVRETEwgKi8KLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDApOyBlbHNlIG4gPSAwOwotCi0jaWZkZWYgQU5ZWDI1Ci0gICAgaWYgKChuZXR0eXBlID09 IE5FVF9TWDI1KSB8fAotICAgICAgICAobmV0dHlwZSA9PSBORVRfVlgyNSkgfHwKLSAgICAgICAg KG5ldHR5cGUgPT0gTkVUX0lYMjUpKQotICAgICAgaWYgKChuID0gc2hveDI1KG4pKSA8IDApIHJl dHVybigwKTsKLSNlbmRpZiAvKiBBTllYMjUgKi8KLQotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICBp ZiAobmV0dHlwZSA9PSBORVRfU1NIKSB7Ci0gICAgICAgIHByaW50ZigiU2VjdXJlIFNoZWxsIHBy b3RvY29sXG4iKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogU1NIQlVJTFRJTiAq LwotCi0gICAgaWYgKG5ldHR5cGUgPT0gTkVUX1RDUEEgfHwgbmV0dHlwZSA9PSBORVRfVENQQikg ewotI2lmZGVmIFJMT0dDT0RFCi0gICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9STE9HSU4pIHsK LSAgICAgICAgICAgIHByaW50ZigiIExPR0lOIChybG9naW4pIHByb3RvY29sXG4iKTsKLSAgICAg ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7 IGVsc2UgbiA9IDA7Ci0gICAgICAgIH0KLSNpZmRlZiBDS19LRVJCRVJPUwotICAgICAgICBlbHNl IGlmICh0dG5wcm90byA9PSBOUF9LNExPR0lOKSB7Ci0gICAgICAgICAgICBwcmludGYoIiBLZXJi ZXJvcyA0IExPR0lOIChrbG9naW4pIHByb3RvY29sXG4iKTsKLSAgICAgICAgICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0g ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pIHsKLSAg ICAgICAgICAgIHByaW50ZigiIEVuY3J5cHRlZCBLZXJiZXJvcyA0IExPR0lOIChla2xvZ2luKSBw cm90b2NvbFxuIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug aWYgKHR0bnByb3RvID09IE5QX0s1TE9HSU4pIHsKLSAgICAgICAgICAgIHByaW50ZigiIEtlcmJl cm9zIDUgTE9HSU4gKGtsb2dpbikgcHJvdG9jb2xcbiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAg ICAgICAgfQotICAgICAgICBlbHNlIGlmICh0dG5wcm90byA9PSBOUF9FSzVMT0dJTikgewotICAg ICAgICAgICAgcHJpbnRmKCIgRW5jcnlwdGVkIEtlcmJlcm9zIDUgTE9HSU4gKGVrbG9naW4pIHBy b3RvY29sXG4iKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19L RVJCRVJPUyAqLwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAg ICAgICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJVKSB7Ci0gICAgICAgICAgICBwcmludGYoIiBL ZXJiZXJvcyA1IFVzZXIgdG8gVXNlciBwcm90b2NvbFxuIik7Ci0gICAgICAgICAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwot ICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQotI2lmZGVmIFROQ09ERQotICAg ICAgICBpZiAoSVNfVEVMTkVUKCkpIHsKLSAgICAgICAgICAgIHByaW50ZigiIFRFTE5FVCBwcm90 b2NvbFxuIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgRWNob2lu ZyBpcyBjdXJyZW50bHkgJXNcbiIsZHVwbGV4ID8gImxvY2FsIiA6ICJyZW1vdGUiKTsKLSAgICAg ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7 IGVsc2UgbiA9IDA7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICAgICAgaWYg KHR0bnByb3RvID09IE5QX1RDUFJBVykgewotICAgICAgICAgICAgcHJpbnRmKCIgUmF3IFRDUCBz b2NrZXRcbiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICBwcmlu dGYoIlxuIik7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSAg ICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogTk9ORVQgKi8KLQotI2lmbmRlZiBOT0RJQUwKLVZP SUQKLXNob2RpYWwoKSB7Ci0gICAgaWYgKG1kbXR5cCA+PSAwIHx8IGxvY2FsICE9IDApIGRvc2hv ZGlhbCgpOwotfQotCi1WT0lECi1zaG9kcyhzKSBjaGFyICpzOyB7ICAgICAgICAgICAgICAgICAg ICAgLyogU2hvdyBhIGRpYWwtcmVsYXRlZCBzdHJpbmcgKi8KLSAgICBjaGFyIGM7Ci0gICAgaWYg KHMgPT0gTlVMTCB8fCAhKCpzKSkgeyAgICAgICAgICAgLyogRW1wdHk/ICovCi0gICAgICAgIHBy aW50ZigiKG5vbmUpXG4iKTsKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBOb3QgZW1wdHkuICovCi0gICAgICAgIHdoaWxlICgoYyA9ICpzKyspKSAgICAgICAgICAg ICAgLyogQ2FuIGNvbnRhaW4gY29udHJvbHMgKi8KLSAgICAgICAgICBpZiAoYyA9PSAnXFwnKSAg ICAgICAgICAgICAgICAvKiBhIGJhY2tzbGFzaCAqLwotICAgICAgICAgICAgcHJpbnRmKCJcXFxc Iik7Ci0gICAgICAgICAgZWxzZSBpZiAoYyA+IDMxICYmIGMgPCAxMjcpIHsKLSAgICAgICAgICAg ICAgcHV0Y2hhcihjKTsKLSAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiXFx7 JWR9IixjKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgIH0KLX0KLQotaW50Ci1kb3Nob2Rp YWwoKSB7Ci0KLSAgICBpbnQgaSwgbiA9IDI7Ci0KLSAgICBwcmludGYoIiBEaWFsIHN0YXR1czog ICVkIiwgZGlhbHN0YSk7Ci0KLSNpZmRlZiBCSUdCVUZPSwotICAgIGlmIChkaWFsc3RhID4gOTAp Ci0gICAgICBwcmludGYoIiA9IFVua25vd24gZXJyb3IiKTsKLSAgICBlbHNlIGlmIChkaWFsc3Rh IDwgMCkKLSAgICAgIHByaW50ZigiID0gKG5vbmUpIik7Ci0gICAgZWxzZSBpZiAoZGlhbHN0YSA8 IDM1ICYmIGRpYWxtc2dbZGlhbHN0YV0pCi0gICAgICBwcmludGYoIiA9ICVzIiwgZGlhbG1zZ1tk aWFsc3RhXSk7Ci0jZW5kaWYgLyogQklHQlVGT0sgKi8KLSAgICBuKys7Ci0gICAgaWYgKG5kaWFs ZGlyIDw9IDEpIHsKLSAgICAgICAgcHJpbnRmKCJcbiBEaWFsIGRpcmVjdG9yeTogJXNcbiIsZGlh bGRpclswXSA/IGRpYWxkaXJbMF0gOiAiKG5vbmUpIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg aW50IGk7Ci0gICAgICAgIHByaW50ZigiXG4gRGlhbCBkaXJlY3RvcmllczpcbiIpOwotICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgbmRpYWxkaXI7IGkrKykKLSAgICAgICAgICBwcmludGYoIiUyZC4g JXNcbiIsaSsxLGRpYWxkaXJbaV0pOwotICAgICAgICBuICs9IG5kaWFsZGlyOwotICAgIH0KLSAg ICBwcmludGYoIiBEaWFsIG1ldGhvZDogICIpOwotICAgIGlmICAgICAgKGRpYWxtYXV0bykgICAg ICAgICBwcmludGYoImF1dG8gICAiKTsKLSAgICBlbHNlIGlmIChkaWFsbXRoID09IFhZRE1fRCkg cHJpbnRmKCJkZWZhdWx0Iik7Ci0gICAgZWxzZSBpZiAoZGlhbG10aCA9PSBYWURNX1ApIHByaW50 ZigicHVsc2UgICIpOwotICAgIGVsc2UgaWYgKGRpYWxtdGggPT0gWFlETV9UKSBwcmludGYoInRv bmUgICAiKTsKLSAgICBwcmludGYoIiAgICAgICAgIERpYWwgc29ydDogJXNcbiIsZGlhbHNydCA/ ICJvbiIgOiAib2ZmIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoIiBEaWFsIGhhbmd1cDogICVz ICAgICAgICAgICAgIERpYWwgZGlzcGxheTogJXNcbiIsCi0gICAgICAgICAgIGRpYWxobmcgPyAi b24gIiA6ICJvZmYiLCBkaWFsZHB5ID8gIm9uIiA6ICJvZmYiKTsKLSAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgIGlm IChkaWFscnRyID4gMCkgewotICAgICAgICBwcmludGYoIiBEaWFsIHJldHJpZXM6ICUtMTJkICAg IERpYWwgaW50ZXJ2YWw6ICVkXG4iLAotICAgICAgICAgICAgICAgZGlhbHJ0ciwgZGlhbGludCk7 Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRmKCIgRGlhbCByZXRyaWVzOiAoYXV0bykgICAg ICAgICAgRGlhbCBpbnRlcnZhbDogJWRcbiIsIGRpYWxpbnQpOwotICAgIH0KLSAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwot ICAgIHByaW50ZigiIERpYWwgdGltZW91dDogIik7Ci0jaWZkZWYgQ0tfVEFQSQotICAgIGlmICh0 dHRhcGkgJiYgIXRhcGlwYXNzKQotICAgICAgICBwcmludGYoIih0YXBpKSIpOwotICAgIGVsc2UK LSNlbmRpZiAvKiBDS19UQVBJICovCi0gICAgaWYgKGRpYWx0bW8gPiAwKQotICAgICAgcHJpbnRm KCIlNGQgc2VjIiwgZGlhbHRtbyk7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCIwIChhdXRvKSIp OwotICAgIHByaW50ZigiICAgICAgICBSZWRpYWwgbnVtYmVyOiAlc1xuIixkaWFsbnVtID8gZGlh bG51bSA6ICIobm9uZSkiKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgIHByaW50ZigiIERpYWwgY29uZmlybWF0 aW9uOiAlcyAgICAgICAgRGlhbCBjb252ZXJ0LWRpcmVjdG9yeTogJXNcbiIsCi0gICAgICAgICAg IGRpYWxjbmYgPyAib24gIiA6ICJvZmYiLAotICAgICAgICAgICBkaWFsY3Z0ID8gKChkaWFsY3Z0 ID09IDEpID8gIm9uIiA6ICJhc2siKSA6ICJvZmYiKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgIHByaW50Zigi IERpYWwgaWdub3JlLWRpYWx0b25lOiAlcyIsIGRpYWxpZHQgPyAib24gIiA6ICJvZmYiKTsKLSAg ICBwcmludGYoIiAgICAgRGlhbCBwYWNpbmc6ICVkXG4iLGRpYWxwYWNlKTsKLSAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwot ICAgIHByaW50ZigKLSIgRGlhbCBwcmVmaXg6ICAgICAgICAgICAgICAgICAgJXNcbiIsIGRpYWxu cHIgPyBkaWFsbnByIDogIihub25lKSIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKAotIiBEaWFs IHN1ZmZpeDogICAgICAgICAgICAgICAgICAlc1xuIiwgZGlhbHNmeCA/IGRpYWxzZnggOiAiKG5v bmUpIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigwKTsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoCi0iIERpYWwgY291bnRyeS1jb2RlOiAgICAg ICAgICAgICUtMTJzIiwgZGlhbGxjYyA/IGRpYWxsY2MgOiAiKG5vbmUpIik7Ci0gICAgcHJpbnRm KCJEaWFsIGNvbm5lY3Q6ICAlcyIsIGRpYWxjb24gPyAoKGRpYWxjb24gPT0gMSkgPyAib24iIDog ImF1dG8iKQotICAgICAgICAgICA6ICJvZmYiKTsKLSAgICBpZiAoZGlhbGNvbiAhPSBDQVJfT0ZG KQotICAgICAgcHJpbnRmKCIgJXMiLCBkaWFsY3EgPyAicXVpZXQiIDogInZlcmJvc2UiKTsKLSAg ICBwcmludGYoCi0iXG4gRGlhbCBhcmVhLWNvZGU6ICAgICAgICAgICAgICAgJS0xMnMiLCBkaWFs bGFjID8gZGlhbGxhYyA6ICIobm9uZSkiKTsKLSAgICBuKys7Ci0gICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICBwcmlu dGYoIkRpYWwgcmVzdHJpY3Q6ICIpOwotICAgIGlmIChkaWFscnN0ciA9PSA1KSBwcmludGYoImlu dGVybmF0aW9uYWxcbiIpOwotICAgIGVsc2UgaWYgKGRpYWxyc3RyID09IDQpIHByaW50ZigibG9u Zy1kaXN0YW5jZVxuIik7Ci0gICAgZWxzZSBpZiAoZGlhbHJzdHIgPT0gMikgcHJpbnRmKCJsb2Nh bFxuIik7Ci0gICAgZWxzZSBpZiAoZGlhbHJzdHIgPT0gNikgcHJpbnRmKCJub25lXG4iKTsKLSAg ICBlbHNlIHByaW50ZigiP1xuIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoIiBEaWFsIGxjLWFy ZWEtY29kZXM6ICAgICAgICAgICAiKTsKLSAgICBpZiAobmxvY2FsYWMgPT0gMCkKLSAgICAgIHBy aW50ZigiKG5vbmUpIik7Ci0gICAgZWxzZQotICAgICAgZm9yIChpID0gMDsgaSA8IG5sb2NhbGFj OyBpKyspCi0gICAgICAgIHByaW50ZigiJXMgIiwgZGlhbGxjYWNbaV0pOwotICAgIHByaW50ZigK LSJcbiBEaWFsIGxjLXByZWZpeDogICAgICAgICAgICAgICAlc1xuIiwgZGlhbGxjcCA/IGRpYWxs Y3AgOiAiKG5vbmUpIik7Ci0gICAgbisrOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKAotIiBEaWFs IGxjLXN1ZmZpeDogICAgICAgICAgICAgICAlc1xuIiwgZGlhbGxjcyA/IGRpYWxsY3MgOiAiKG5v bmUpIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigwKTsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoCi0iIERpYWwgbGQtcHJlZml4OiAgICAgICAg ICAgICAgICVzXG4iLCBkaWFsbGRwID8gZGlhbGxkcCA6ICIobm9uZSkiKTsKLSAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwot ICAgIHByaW50ZigKLSIgRGlhbCBsZC1zdWZmaXg6ICAgICAgICAgICAgICAgJXNcbiIsIGRpYWxs ZHMgPyBkaWFsbGRzIDogIihub25lKSIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKAotIiBEaWFs IGZvcmNlLWxvbmctZGlzdGFuY2UgICAgICAlc1xuIiwgc2hvd29mZihkaWFsZmxkKSk7Ci0gICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBu ID0gMDsKLSAgICBwcmludGYoCi0iIERpYWwgaW50bC1wcmVmaXg6ICAgICAgICAgICAgICVzXG4i LCBkaWFsaXhwID8gZGlhbGl4cCA6ICIobm9uZSkiKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgIHByaW50ZigK LSIgRGlhbCBpbnRsLXN1ZmZpeDogICAgICAgICAgICAgJXNcbiIsIGRpYWxpeHMgPyBkaWFsaXhz IDogIihub25lKSIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKAotIiBEaWFsIHRvbGwtZnJlZS1h cmVhLWNvZGU6ICAgICAiKTsKLSAgICBpZiAobnRvbGxmcmVlID09IDApCi0gICAgICBwcmludGYo Iihub25lKSIpOwotICAgIGVsc2UKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBudG9sbGZyZWU7IGkr KykKLSAgICAgICAgcHJpbnRmKCIlcyAiLCBkaWFsdGZjW2ldKTsKLSAgICBwcmludGYoIlxuIik7 Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKLQotICAgIHByaW50ZigKLSIgRGlhbCBwdWxzZS1jb3VudHJpZXM6ICAgICAg ICAgIik7Ci0gICAgaWYgKG5kaWFscHVjYyA9PSAwKQotICAgICAgcHJpbnRmKCIobm9uZSkiKTsK LSAgICBlbHNlCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgbmRpYWxwdWNjOyBpKyspCi0gICAgICAg IHByaW50ZigiJXMgIiwgZGlhbHB1Y2NbaV0pOwotICAgIHByaW50ZigiXG4iKTsKLSAgICBpZiAo KytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAw OwotCi0gICAgcHJpbnRmKAotIiBEaWFsIHRvbmUtY291bnRyaWVzOiAgICAgICAgICAiKTsKLSAg ICBpZiAobmRpYWx0b2NjID09IDApCi0gICAgICBwcmludGYoIihub25lKSIpOwotICAgIGVsc2UK LSAgICAgIGZvciAoaSA9IDA7IGkgPCBuZGlhbHRvY2M7IGkrKykKLSAgICAgICAgcHJpbnRmKCIl cyAiLCBkaWFsdG9jY1tpXSk7Ci0gICAgcHJpbnRmKCJcbiIpOwotICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0KLSAgICBw cmludGYoCi0JIiBEaWFsIHRvbGwtZnJlZS1wcmVmaXg6ICAgICAgICAlc1xuIiwKLQlkaWFsdGZw ID8gZGlhbHRmcCA6Ci0JKGRpYWxsZHAgPyBkaWFsbGRwIDogIihub25lKSIpCi0JKTsKLSAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOwotICAgIHByaW50ZigiIERpYWwgcGJ4LWV4Y2hhbmdlOiAgICAgICAgICAgICIpOwotICAg IGlmIChuZGlhbHB4eCA9PSAwKQotICAgICAgcHJpbnRmKCIobm9uZSkiKTsKLSAgICBlbHNlCi0g ICAgICBmb3IgKGkgPSAwOyBpIDwgbmRpYWxweHg7IGkrKykKLSAgICAgICAgcHJpbnRmKCIlcyAi LCBkaWFscHh4W2ldKTsKLSAgICBwcmludGYoIlxuIik7Ci0KLSAgICBpZiAoKytuID4gY21kX3Jv d3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgIHByaW50 ZigKLSIgRGlhbCBwYngtaW5zaWRlLXByZWZpeDogICAgICAgJXNcbiIsIGRpYWxweGkgPyBkaWFs cHhpIDogIihub25lKSIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKAotIiBEaWFsIHBieC1vdXRz aWRlLXByZWZpeDogICAgICAlc1xuIiwgZGlhbHB4byA/IGRpYWxweG8gOiAiKG5vbmUpIik7Ci0g ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxz ZSBuID0gMDsKLSAgICBwcmludGYoCi0iIERpYWwgbWFjcm86ICAgICAgICAgICAgICAgICAgICVz XG4iLCBkaWFsbWFjID8gZGlhbG1hYyA6ICIobm9uZSkiKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0j ZW5kaWYgLyogTk9ESUFMICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0vKiAgU2hvdyBGaWxl IFBhcmFtZXRlcnMgKi8KLQotc3RhdGljIGNoYXIgKgotcGF0aHZhbCh4KSBpbnQgeDsgewotICAg IHN3aXRjaCAoeCkgewotICAgICAgY2FzZSBQQVRIX09GRjogIHJldHVybigib2ZmIik7Ci0gICAg ICBjYXNlIFBBVEhfQUJTOiAgcmV0dXJuKCJhYnNvbHV0ZSIpOwotICAgICAgY2FzZSBQQVRIX1JF TDogIHJldHVybigicmVsYXRpdmUiKTsKLSAgICAgIGNhc2UgUEFUSF9BVVRPOiByZXR1cm4oImF1 dG8iKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybigidW5rbm93biIpOwotICAgIH0KLX0KLQotVk9J RAotc2hvZmlsKCkgewotICAgIGNoYXIgKnM7IGludCBpID0gMCwgbiA9IDE7Ci0gICAgZXh0ZXJu IGNoYXIgKiBpZmRuYW1bXTsKLSAgICBleHRlcm4gaW50IHdpbGRlbmE7Ci0jaWZkZWYgVU5JWAot ICAgIGV4dGVybiBpbnQgd2lsZHhwYW5kOwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICBleHRlcm4g Y2hhciAqIHNuZF9tb3ZlLCAqIHNuZF9yZW5hbWUsICogcmN2X21vdmUsICogcmN2X3JlbmFtZTsK LSNpZmRlZiBQQVRURVJOUwotICAgIGV4dGVybiBpbnQgcGF0dGVybnM7Ci0jZW5kaWYgLyogUEFU VEVSTlMgKi8KLSAgICBleHRlcm4gY2hhciAqIHJmc3BlYywgKiBzZnNwZWM7Ci0jaWZkZWYgVU5J WAotICAgIGV4dGVybiBpbnQgem9idWZzaXplLCB6b2ZidWZmZXIsIHpvZmJsb2NrOwotI2VuZGlm IC8qIFVOSVggKi8KLSNpZmRlZiBDS19DVFJMWgotICAgIGV4dGVybiBpbnQgZW9mbWV0aG9kOwot I2VuZGlmIC8qIENLX0NUUkxaICovCi0KLSAgICBwcmludGYoIlxuIik7Ci0KLSNpZmRlZiBWTVMK LSAgICBwcmludGYoIiBGaWxlIHJlY29yZC1MZW5ndGg6ICAgICAgJTVkXG4iLGZyZWNsKTsKLSAg ICBuKys7Ci0jZW5kaWYgLyogVk1TICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgcHJpbnRmKCIg VHJhbnNmZXIgbW9kZTogICAgICAgICAgICVzXG4iLAotICAgICAgICAgICB4ZmVybW9kZSA9PSBY TU9ERV9BID8KLSAgICAgICAgICAgImF1dG9tYXRpYyIgOgotICAgICAgICAgICAibWFudWFsIgot ICAgICAgICAgICApOwotICAgIG4rKzsKLSNpZmRlZiBQQVRURVJOUwotICAgIHByaW50ZigiIEZp bGUgcGF0dGVybnM6ICAgICAgICAgICAlcyIsIHNob3dvb2EocGF0dGVybnMpKTsKLSAgICBpZiAo eGZlcm1vZGUgPT0gWE1PREVfTSAmJiBwYXR0ZXJucykKLSAgICAgIHByaW50ZigiIChidXQgZGlz YWJsZWQgYnkgVFJBTlNGRVItTU9ERSBNQU5VQUwpIik7Ci0gICAgZWxzZSBpZiAocGF0dGVybnMp Ci0gICAgICBwcmludGYoIiAoU0hPVyBQQVRURVJOUyBmb3IgbGlzdCkiKTsKLSAgICBwcmludGYo IlxuIik7Ci0gICAgbisrOwotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0gICAgaWYgKGZpbGVwZWVr KQotICAgICAgcHJpbnRmKCIgRmlsZSBzY2FuOiAgICAgICAgICAgICAgIG9uICVkXG4iLCBuc2Nh bmZpbGUpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZigiIEZpbGUgc2NhbjogICAgICAgICAgICAg ICBvZmZcbiIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm47IGVsc2UgbiA9IDA7Ci0gICAgaWYgKHhmZXJtb2RlID09IFhNT0RFX0EpCi0gICAgICBw cmludGYoIiBEZWZhdWx0IGZpbGUgdHlwZTogICAgICAgJXNcbiIsc2hveG0oKSk7Ci0gICAgZWxz ZQotICAgICAgcHJpbnRmKCIgRmlsZSB0eXBlOiAgICAgICAgICAgICAgICVzXG4iLHNob3htKCkp OwotICAgIG4rKzsKLSAgICBpZiAoZm5jbnYgPT0gWFlGTl9MKQotICAgICAgcyA9ICJsaXRlcmFs IjsKLSAgICBlbHNlIGlmIChmbmNudiA9PSBYWUZOX0MpCi0gICAgICBzID0gImNvbnZlcnRlZCI7 Ci0gICAgZWxzZQotICAgICAgcyA9ICIodW5rbm93bikiOwotICAgIHByaW50ZigiIEZpbGUgbmFt ZXM6ICAgICAgICAgICAgICAlc1xuIixzKTsKLSAgICBuKys7Ci0gICAgcHJpbnRmKCIgU2VuZCBw YXRobmFtZXM6ICAgICAgICAgICVzXG4iLCBwYXRodmFsKGZuc3BhdGgpKTsKLSAgICBuKys7Ci0g ICAgcHJpbnRmKCIgUmVjZWl2ZSBwYXRobmFtZXM6ICAgICAgICVzXG4iLCBwYXRodmFsKGZucnBh dGgpKTsKLSAgICBuKys7Ci0jaWZkZWYgVU5JWE9ST1NLCi0gICAgcHJpbnRmKCIgTWF0Y2ggZG90 IGZpbGVzOiAgICAgICAgICVzXG4iLCBtYXRjaGRvdCA/ICJ5ZXMiIDogIm5vIik7Ci0gICAgbisr OwotI2lmZGVmIFVOSVgKLSAgICBwcmludGYoIiBXaWxkY2FyZC1leHBhbnNpb246ICAgICAgJXMg KCVzKVxuIiwgc2hvd29mZih3aWxkZW5hKSwKLQkgICB3aWxkeHBhbmQgPyAic2hlbGwiIDogImtl cm1pdCIpOwotICAgIG4rKzsKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogVU5JWE9ST1NL ICovCi0gICAgcHJpbnRmKCIgRmlsZSBjb2xsaXNpb246ICAgICAgICAgICIpOwotICAgIGZvciAo aSA9IDA7IGkgPCBuY29seDsgaSsrKQotICAgICAgaWYgKGNvbHh0YWJbaV0ua3d2YWwgPT0gZm5j YWN0KSBicmVhazsKLSAgICBwcmludGYoIiVzXG4iLCAoaSA9PSBuY29seCkgPyAidW5rbm93biIg OiBjb2x4dGFiW2ldLmt3ZCk7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoIiBGaWxlIGRlc3RpbmF0aW9u OiAgICAgICAgJXNcbiIsCi0gICAgICAgICAgIChkZXN0ID09IERFU1RfRCkgPyAiZGlzayIgOgot ICAgICAgICAgICAoKGRlc3QgPT0gREVTVF9TKSA/ICJzY3JlZW4iIDoKLSAgICAgICAgICAgICgo ZGVzdCA9PSBERVNUX04pID8gIm5vd2hlcmUiIDoKLSAgICAgICAgICAgICJwcmludGVyIikpCi0g ICAgICAgICAgICk7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybjsgZWxzZSBuID0gMDsKLSAgICBzID0gKGtlZXAgPj0gMCAmJiBrZWVwIDw9IDIpID8g aWZkbmFtW2tlZXBdIDogImtlZXAiOwotICAgIHByaW50ZigiIEZpbGUgaW5jb21wbGV0ZTogICAg ICAgICAlc1xuIixzKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotICAgIHByaW50ZigiIEZpbGUgYnl0ZXNpemU6ICAgICAg ICAgICAlZFxuIiwoZm1hc2sgPT0gMDE3NykgPyA3IDogOCk7Ci0gICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSNpZm5kZWYgTk9D U0VUUwotICAgIHByaW50ZigiIEZpbGUgY2hhcmFjdGVyLXNldDogICAgICAlc1xuIixmY3NpbmZv W2ZjaGFyc2V0XS5rZXl3b3JkKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotICAgIHByaW50ZigiIEZpbGUgZGVmYXVsdCA3 LWJpdDogICAgICAlc1xuIixmY3NpbmZvW2Rjc2V0N10ua2V5d29yZCk7Ci0gICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSAgICBw cmludGYoIiBGaWxlIGRlZmF1bHQgOC1iaXQ6ICAgICAgJXNcbiIsZmNzaW5mb1tkY3NldDhdLmtl eXdvcmQpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm47IGVsc2UgbiA9IDA7Ci0jaWZkZWYgVU5JQ09ERQotICAgIHByaW50ZigiIEZpbGUgVUNTIGJv bTogICAgICAgICAgICAlc1xuIixzaG93b2ZmKHVjc2JvbSkpOwotICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRm KCIgRmlsZSBVQ1MgYnl0ZS1vcmRlcjogICAgICVzLWVuZGlhblxuIiwKLSAgICAgICAgICAgdWNz b3JkZXIgPyAibGl0dGxlIiA6ICJiaWciKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotICAgIHByaW50ZigiIENvbXB1dGVy IGJ5dGVvcmRlcjogICAgICAlcy1lbmRpYW5cbiIsCi0gICAgICAgICAgIGJ5dGVvcmRlciA/ICJs aXR0bGUiIDogImJpZyIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotI2VuZGlmIC8q IE5PQ1NFVFMgKi8KLQotICAgIHByaW50ZigiIEZpbGUgZW5kLW9mLWxpbmU6ICAgICAgICAiKTsK LSAgICBpID0gZmVvbDsKLSAgICBzd2l0Y2ggKGZlb2wpIHsKLSAgICAgIGNhc2UgWFlGQV9DOiBw cmludGYoIiVzXG4iLCJjciIpOyBicmVhazsKLSAgICAgIGNhc2UgWFlGQV9MOiBwcmludGYoIiVz XG4iLCJsZiIpOyBicmVhazsKLSAgICAgIGNhc2UgWFlGQV8yOiBwcmludGYoIiVzXG4iLCJjcmxm Iik7IGJyZWFrOwotICAgICAgZGVmYXVsdDogcHJpbnRmKCIlZFxuIixpKTsKLSAgICB9Ci0gICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0g MDsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIENLX0NUUkxaCi0gICAgcHJpbnRmKCIg RmlsZSBlb2Y6ICAgICAgICAgICAgICAgICVzXG4iLCBlb2ZtZXRob2QgPyAiY3RybC16IiA6ICJs ZW5ndGgiKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuOyBlbHNlIG4gPSAwOwotI2VuZGlmIC8qIENLX0NUUkxaICovCi0jaWZuZGVmIE5PWEZFUgot I2lmZGVmIENLX1RNUERJUgotICAgIHByaW50ZigiIEZpbGUgZG93bmxvYWQtZGlyZWN0b3J5OiAl c1xuIiwgZGxkaXIgPyBkbGRpciA6ICIobm9uZSkiKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotI2lmZGVmIENPTU1FTlQK LSAgICBpID0gMjU2OwotICAgIHMgPSBsaW5lOwotICAgIHp6c3RyaW5nKCJcXHYodG1wZGlyKSIs JnMsJmkpOwotICAgIHByaW50ZigiIFRlbXBvcmFyeSBkaXJlY3Rvcnk6ICAgICAlc1xuIiwgbGlu ZSk7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsg ZWxzZSBuID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogQ0tfVE1QRElSICov Ci0jaWZkZWYgVk1TCi0gICAgewotICAgICAgICBleHRlcm4gaW50IHZtc3N2ZXJzaW9ucywgdm1z cnZlcnNpb25zOwotICAgICAgICBwcmludGYoIiBTZW5kIHZlcnNpb24tbnVtYmVyczogICAgJXNc biIsc2hvd29mZih2bXNzdmVyc2lvbnMpKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSAgICAgICAgcHJpbnRmKCIg UmVjZWl2ZSB2ZXJzaW9uLW51bWJlcnM6ICVzXG4iLHNob3dvZmYodm1zcnZlcnNpb25zKSk7Ci0g ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVs c2UgbiA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIFZNUyAqLwotICAgIHByaW50ZigiIFNlbmQgbW92 ZS10bzogICAgICAgICAgICAlc1xuIiwKLSAgICAgICAgICAgc25kX21vdmUgPyBzbmRfbW92ZSA6 ICIobm9uZSkiKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuOyBlbHNlIG4gPSAwOwotICAgIHByaW50ZigiIFNlbmQgcmVuYW1lLXRvOiAgICAgICAg ICAlc1xuIiwKLSAgICAgICAgICAgc25kX3JlbmFtZSA/IHNuZF9yZW5hbWUgOiAiKG5vbmUpIik7 Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxz ZSBuID0gMDsKLSAgICBwcmludGYoIiBSZWNlaXZlIG1vdmUtdG86ICAgICAgICAgJXNcbiIsCi0g ICAgICAgICAgIHJjdl9tb3ZlID8gcmN2X21vdmUgOiAiKG5vbmUpIik7Ci0gICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSAgICBw cmludGYoIiBSZWNlaXZlIHJlbmFtZS10bzogICAgICAgJXNcbiIsCi0gICAgICAgICAgIHJjdl9y ZW5hbWUgPyByY3ZfcmVuYW1lIDogIihub25lKSIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogTk9YRkVS ICovCi0jaWZkZWYgS0VSTVJDCi0gICAgcHJpbnRmKCIgSW5pdGlhbGl6YXRpb24gZmlsZTogICAg ICVzXG4iLCBub2luaXQgPyAiKG5vbmUpIiA6Ci0jaWZkZWYgQ0tfU1lTSU5JCi0gICAgICAgICAg IENLX1NZU0lOSQotI2Vsc2UKLSAgICAgICAgICAga2VybXJjCi0jZW5kaWYgLyogQ0tfU1lTSU5J ICovCi0gICAgICAgICAgICk7Ci0jZW5kaWYgLyogS0VSTVJDICovCi0gICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLQotICAgIGlm IChrX2luZm9fZGlyKSB7Ci0gICAgICAgIHByaW50ZigiIEtlcm1pdCBkb2MgZmlsZXM6ICAgICAg ICAlc1xuIiwga19pbmZvX2Rpcik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7Ci0gICAgfQotCi0jaWZkZWYgQ0tST09U Ci0gICAgcyA9IHpnZXRyb290KCk7Ci0gICAgcHJpbnRmKCIgUm9vdCBzZXQ6ICAgICAgICAgICAg ICAgICVzXG4iLCBzID8gcyA6ICIobm9uZSkiKTsKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotI2lm ZGVmIFVOSVgKLSAgICBwcmludGYoIiBEaXNrIG91dHB1dCBidWZmZXI6ICAgICAgJWQgKHdyaXRl cyBhcmUgJXMsICVzKVxuIiwKLSAgICAgICAgICAgem9idWZzaXplLAotICAgICAgICAgICB6b2Zi dWZmZXIgPyAiYnVmZmVyZWQiIDogInVuYnVmZmVyZWQiLAotICAgICAgICAgICB6b2ZibG9jayA/ ICJibG9ja2luZyIgOiAibm9uYmxvY2tpbmciCi0gICAgICAgICAgICk7Ci0gICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSNpZmRl ZiBEWU5BTUlDCi0gICAgcHJpbnRmKCIgU3RyaW5nc3BhY2U6ICAgICAgICAgICAgICVkXG4iLCB6 c2V0ZmlsKDAsMikpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm47IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKCIgTGlzdHNpemU6ICAgICAgICAgICAg ICAgICVkXG4iLCB6c2V0ZmlsKDAsNCkpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwot I2VuZGlmIC8qIFVOSVggKi8KLSNpZmRlZiBPUzJPUlVOSVgKLSAgICBwcmludGYoIiBMb25nZXN0 IGZpbGVuYW1lOiAgICAgICAgJWRcbiIsIG1heG5hbSk7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoIiBM b25nZXN0IHBhdGhuYW1lOiAgICAgICAgJWRcbiIsIG1heHBhdGgpOwotICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7Ci0jZW5kaWYg LyogT1MyT1JVTklYICovCi0KLSAgICBwcmludGYoIiBMYXN0IGZpbGUgc2VudDogICAgICAgICAg JXNcbiIsIHNmc3BlYyA/IHNmc3BlYyA6ICIobm9uZSkiKTsKLSAgICBpZiAoKytuID4gY21kX3Jv d3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotICAgIHByaW50Zigi IExhc3QgZmlsZSByZWNlaXZlZDogICAgICAlc1xuIiwgcmZzcGVjID8gcmZzcGVjIDogIihub25l KSIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47 IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKCJcbiBBbHNvIHNlZTpcbiIpOwotICAgIG4rKzsKLSAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4g PSAwOwotICAgIHByaW50ZigiIFNIT1cgUFJPVE9DT0wsIFNIT1cgWEZFUiIpOwotI2lmZGVmIENL X0xBQkVMRUQKLSAgICBwcmludGYoIiwgU0hPVyBMQUJFTEVEIik7Ci0jZW5kaWYgLyogQ0tfTEFC RUxFRCAqLwotI2lmZGVmIFBBVFRFUk5TCi0gICAgcHJpbnRmKCIsIFNIT1cgUEFUVEVSTlMiKTsK LSNlbmRpZiAvKiBQQVRURVJOUyAqLwotI2lmZGVmIFNUUkVBTUlORwotICAgIHByaW50ZigiLCBT SE9XIFNUUkVBTUlORyIpOwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotI2lmbmRlZiBOT0NTRVRT Ci0gICAgcHJpbnRmKCIsIFNIT1cgQ0hBUkFDVEVSLVNFVFMiKTsKLSNlbmRpZiAvKiBOT0NTRVRT ICovCi0gICAgcHJpbnRmKCJcblxuIik7Ci19Ci0KLSNpZm5kZWYgTk9YRkVSCi1WT0lECi1zaG9w YXJwKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvdG9jb2wgKi8KLSAgICBl eHRlcm4gaW50IGRvY3JjLCBza2lwYnVwOwotICAgIGNoYXIgKnM7Ci0KLSNpZmRlZiBDS19USU1F UlMKLSAgICBleHRlcm4gaW50IHJ0dGZsZzsKLSNlbmRpZiAvKiBDS19USU1FUlMgKi8KLQotICAg IHByaW50ZigiUHJvdG9jb2w6ICVzXG4iLHB0YWJbcHJvdG9jb2xdLnBfbmFtZSk7Ci0KLSAgICBp ZiAocHJvdG9jb2wgPT0gUFJPVE9fSykgewotICAgICAgICBwcmludGYoIlxuUHJvdG9jb2wgUGFy YW1ldGVyczogICBTZW5kICAgIFJlY2VpdmUiKTsKLSAgICAgICAgaWYgKHRpbWVmKQotICAgICAg ICAgIHByaW50ZigiXG4gVGltZW91dCAodXNlZD0lMmQpOiU3ZColOGQgIiwgdGltaW50LCBydGlt bywgcGt0dGltKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByaW50ZigiXG4gVGltZW91dCAo dXNlZD0lMmQpOiU3ZCU5ZCAiLCAgdGltaW50LCBydGltbywgcGt0dGltKTsKLSNpZmRlZiBYRlJD QU4KLSAgICAgICAgcHJpbnRmKCIgICAgICAgQ2FuY2VsbGF0aW9uOiAgICAlcyIsc2hvd29mZih4 ZnJjYW4pKTsKLSAgICAgICAgaWYgKHhmcmNhbikKLSAgICAgICAgICBwcmludGYoIiAlZCAlZCIs IHhmcmNociwgeGZybnVtKTsKLSNlbmRpZiAvKiBYRlJDQU4gKi8KLSAgICAgICAgcHJpbnRmKCJc biBQYWRkaW5nOiAgICAgICUxMWQlOWQiLCBucGFkLCAgIG15cGFkbik7Ci0gICAgICAgIGlmIChi Y3RyID09IDQpCi0gICAgICAgICAgcHJpbnRmKCIgICAgICAgIEJsb2NrIENoZWNrOiBibGFuay1m cmVlLTJcbiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcHJpbnRmKCIgICAgICAgIEJsb2Nr IENoZWNrOiAlNmRcbiIsYmN0cik7Ci0gICAgICAgIHByaW50ZiggICIgUGFkIENoYXJhY3Rlcjol MTFkJTlkIiwgcGFkY2gsICBteXBhZGMpOwotICAgICAgICBwcmludGYoIiAgICAgICAgRGVsYXk6 ICAgICAgICU2ZFxuIixja2RlbGF5KTsKLSAgICAgICAgcHJpbnRmKCAgIiBQYXVzZTogICAgICAg ICUxMWQlOWQiLCBwa3RwYXVzLCBwa3RwYXVzKTsKLSAgICAgICAgcHJpbnRmKCIgICAgICAgIEF0 dHJpYnV0ZXM6ICAgICAgJXNcbiIsc2hvd29mZihhdGNhcHIpKTsKLSAgICAgICAgcHJpbnRmKCAg IiBQYWNrZXQgU3RhcnQ6ICUxMWQlOWQiLCBteXN0Y2gsIHN0Y2hyKTsKLSAgICAgICAgcHJpbnRm KCIgICAgICAgIE1heCBSZXRyaWVzOiAlNmQlc1xuIiwKLSAgICAgICAgICAgICAgIG1heHRyeSwK LSAgICAgICAgICAgICAgIChtYXh0cnkgPT0gMCkgPyAiICh1bmxpbWl0ZWQpIiA6ICIiCi0gICAg ICAgICAgICAgICApOwotICAgICAgICBwcmludGYoICAiIFBhY2tldCBFbmQ6ICAgJTExZCU5ZCIs IHNlb2wsICAgZW9sKTsKLSAgICAgICAgaWYgKGVicWZsZykKLSAgICAgICAgICBwcmludGYoIiAg ICAgICAgOHRoLUJpdCBQcmVmaXg6ICclYyciLGVicSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg ICBwcmludGYoIiAgICAgICAgOHRoLUJpdCBQcmVmaXg6ICgnJWMnIGJ1dCBub3QgdXNlZCkiLGVi cSk7Ci0gICAgICAgIHByaW50ZiggICJcbiBQYWNrZXQgTGVuZ3RoOiUxMWQgIiwgc3BtYXgpOwot ICAgICAgICBwcmludGYoIiU4ZCAgICAgIiwgIHVycHNpeik7Ci0gICAgICAgIGlmIChycHRmbGcp Ci0gICAgICAgICAgcHJpbnRmKCIgICBSZXBlYXQgUHJlZml4OiAgJyVjJyIscnB0cSk7Ci0gICAg ICAgIGVsc2UKLSAgICAgICAgICBwcmludGYoIiAgIFJlcGVhdCBQcmVmaXg6ICAoJyVjJyBidXQg bm90IHVzZWQpIixycHRxKTsKLSAgICAgICAgcHJpbnRmKCAgIlxuIE1heGltdW0gTGVuZ3RoOiAl OWQlOWQiLCBtYXhzcHMsIG1heHJwcyk7Ci0gICAgICAgIHByaW50ZigiICAgICAgICBXaW5kb3cg U2l6ZTolN2Qgc2V0LCAlZCB1c2VkXG4iLHdzbG90cix3bWF4KTsKLSAgICAgICAgcHJpbnRmKCAg ICAiIEJ1ZmZlciBTaXplOiAgJTExZCU5ZCIsIGJpZ3Nic2l6LCBiaWdyYnNpeik7Ci0gICAgICAg IHByaW50ZigiICAgICAgICBMb2NraW5nLVNoaWZ0OiAgICAiKTsKLSAgICAgICAgaWYgKGxzY2Fw dSA9PSAyKSB7Ci0gICAgICAgICAgICBwcmludGYoImZvcmNlZCIpOwotICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgcHJpbnRmKCIlcyIsIChsc2NhcHIgPyAiZW5hYmxlZCIgOiAiZGlzYWJs ZWQiKSk7Ci0gICAgICAgICAgICBpZiAobHNjYXByKSBwcmludGYoIiwlcyVzIiwgKGxzY2FwdSA/ ICIgIiA6ICIgbm90ICIpLCAidXNlZCIpOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiXG5c biIpOwotCi0gICAgICAgIGlmICghKHMgPSBwdGFiW3Byb3RvY29sXS5oX2JfaW5pdCkpIHMgPSAi IjsKLSAgICAgICAgcHJpbnRmKCIgQXV0by11cGxvYWQgY29tbWFuZCAoYmluYXJ5KTogIik7Ci0g ICAgICAgIGlmICgqcykgewotICAgICAgICAgICAgc2hvc3RyZGVmKChDSEFSICopcyk7Ci0gICAg ICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmlu dGYoIihub25lKVxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCEocyA9IHB0YWJbcHJvdG9j b2xdLmhfdF9pbml0KSkgcyA9ICIiOwotICAgICAgICBwcmludGYoIiBBdXRvLXVwbG9hZCBjb21t YW5kICh0ZXh0KTogICAiKTsKLSAgICAgICAgaWYgKCpzKSB7Ci0gICAgICAgICAgICBzaG9zdHJk ZWYoKENIQVIgKilzKTsKLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgIHByaW50ZigiKG5vbmUpXG4iKTsKLSAgICAgICAgfQotICAgICAgICBp ZiAoIShzID0gcHRhYltwcm90b2NvbF0uaF94X2luaXQpKSBzID0gIiI7Ci0gICAgICAgIHByaW50 ZigiIEF1dG8tc2VydmVyIGNvbW1hbmQ6ICAgICAgICAgICIpOwotICAgICAgICBpZiAoKnMpIHsK LSAgICAgICAgICAgIHNob3N0cmRlZigoQ0hBUiAqKXMpOwotICAgICAgICAgICAgcHJpbnRmKCJc biIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnRmKCIobm9uZSlcbiIpOwot ICAgICAgICB9Ci0gICAgICAgIHRtcGJ1ZlswXSA9IE5VTDsKLSNpZmRlZiBDS19USU1FUlMKLSAg ICAgICAgaWYgKHJ0dGZsZykgewotICAgICAgICAgICAgZXh0ZXJuIGludCBtaW50aW1lLCBtYXh0 aW1lOwotICAgICAgICAgICAgc3ByaW50Zih0bXBidWYsIiBQYWNrZXQgdGltZW91dHM6IGR5bmFt aWMgJWQ6JWQiLCAvKiBTQUZFICovCi0gICAgICAgICAgICAgICAgICAgIG1pbnRpbWUsCi0gICAg ICAgICAgICAgICAgICAgIG1heHRpbWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg c3ByaW50Zih0bXBidWYsIiBQYWNrZXQgdGltZW91dHM6IGZpeGVkIik7IC8qIFNBRkUgKi8KLSAg ICAgICAgfQotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotICAgICAgICBpZiAodG1wYnVmWzBdKQot ICAgICAgICAgIHByaW50ZigiJS0zMXMiLHRtcGJ1Zik7Ci0gICAgICAgIHByaW50ZigiU2VuZCBi YWNrdXA6ICVzXG4iLHNob3dvZmYoIXNraXBidXApKTsKLQotICAgICAgICBwcmludGYoIiBUcmFu c2ZlciBtb2RlOiAgICVzIiwgeGZlcm1vZGUgPT0gWE1PREVfQSA/Ci0gICAgICAgICAgICAgICAi YXV0b21hdGljICAgIiA6Ci0gICAgICAgICAgICAgICAibWFudWFsICAgICAgIgotICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgcHJpbnRmKCIgVHJhbnNmZXIgc2xvdy1zdGFydDogJXMsIGNyYzog JXNcbiIsCi0gICAgICAgICAgICAgICBzaG93b2ZmKHNsb3N0YXJ0KSwKLSAgICAgICAgICAgICAg IHNob3dvZmYoZG9jcmMpCi0gICAgICAgICAgICAgICApOwotI2lmZGVmIFBJUEVTRU5ECi0gICAg ICAgIHsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgdXNlcGlwZXM7Ci0gICAgICAgICAgICBwcmlu dGYoIiBUcmFuc2ZlciBwaXBlczogICVzICAgICAgICAgIix1c2VwaXBlcyA/ICJvbiAiIDogIm9m ZiIpOwotICAgICAgICB9Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSNpZm5kZWYgTk9DU0VUUwot ICAgICAgICBwcmludGYoIiBUcmFuc2ZlciBjaGFyYWN0ZXItc2V0OiAiKTsKLSAgICAgICAgaWYg KHRjaGFyc2V0ID09IFRDX1RSQU5TUCkKLSAgICAgICAgICBwcmludGYoInRyYW5zcGFyZW50XG4i KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByaW50ZigiJXNcbiIsIHRjc2luZm9bdGNoYXJz ZXRdLmtleXdvcmQgKTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jaWZkZWYgUElQRVNFTkQKLSAg ICAgICAgewotICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBzbmRmaWx0ZXIsICogcmN2ZmlsdGVy OwotICAgICAgICAgICAgcHJpbnRmKCIgU2VuZCBmaWx0ZXI6ICAgICAlc1xuIiwgc25kZmlsdGVy ID8gc25kZmlsdGVyIDogIihub25lKSIpOwotICAgICAgICAgICAgcHJpbnRmKCIgUmVjZWl2ZSBm aWx0ZXI6ICAlc1xuIiwgcmN2ZmlsdGVyID8gcmN2ZmlsdGVyIDogIihub25lKSIpOwotICAgICAg ICB9Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSAgICAgICAgcHJpbnRmKCJcbkFsc28gc2VlOlxu Iik7Ci0gICAgICAgIHByaW50ZigiIFNIT1cgRklMRSwgU0hPVyBYRkVSIik7Ci0KLSNpZmRlZiBD S19MQUJFTEVECi0gICAgICAgIHByaW50ZigiLCBTSE9XIExBQkVMRUQiKTsKLSNlbmRpZiAvKiBD S19MQUJFTEVEICovCi0jaWZkZWYgUEFUVEVSTlMKLSAgICAgICAgcHJpbnRmKCIsIFNIT1cgUEFU VEVSTlMiKTsKLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotI2lmZGVmIFNUUkVBTUlORwotICAgICAg ICBwcmludGYoIiwgU0hPVyBTVFJFQU1JTkciKTsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSNp Zm5kZWYgTk9DU0VUUwotICAgICAgICBwcmludGYoIiwgU0hPVyBDSEFSQUNURVItU0VUUyIpOwot I2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICB9Ci0KLSNpZmRlZiBDS19YWVoKLSNpZmRlZiBYWVpf SU5URVJOQUwKLSAgICBpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgewotICAgICAgICBpbnQgaTsK LSAgICAgICAgaW50IHg7Ci0gICAgICAgIHByaW50ZigiIEZpbGUgdHlwZTogJXNcbiIsIGJpbmFy eSA/ICJiaW5hcnkiIDogInRleHQiKTsKLSAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX1op IHsgICAgICAgICAgICAgIC8qIFptb2RlbSAqLwotICAgICAgICAgICAgcHJpbnRmKCIgV2luZG93 IHNpemU6ICAgIik7Ci0gICAgICAgICAgICBpZiAocHRhYltwcm90b2NvbF0ud2luc2l6ZSA8IDEp Ci0gICAgICAgICAgICAgIHByaW50Zigibm9uZVxuIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAg ICAgICAgICAgIHByaW50ZigiJWRcbiIsd3Nsb3RyKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAg ICAgICBwcmludGYoIiBQYWNrZXQgKGZyYW1lKSBsZW5ndGg6ICIpOwotICAgICAgICAgICAgaWYg KHB0YWJbcHJvdG9jb2xdLnNwa3RsZW4gPCAwKQotICAgICAgICAgICAgICBwcmludGYoIm5vbmVc biIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBwcmludGYoIiVkXG4iLHNwbWF4 KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBp ZiAocHRhYltwcm90b2NvbF0uc3BrdGxlbiA+PSAxMDAwKQotICAgICAgICAgICAgICBwcmludGYo IiAxSyBwYWNrZXRzXG4iKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJpbnRm KCIgMTI4LWJ5dGUgcGFja2V0c1xuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCIgUGF0 aG5hbWUgc3RyaXBwaW5nIHdoZW4gc2VuZGluZzogICAlc1xuIiwKLSAgICAgICAgICAgICAgIHNo b3dvZmYocHRhYltwcm90b2NvbF0uZm5zcCkKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHBy aW50ZigiIFBhdGhuYW1lIHN0cmlwcGluZyB3aGVuIHJlY2VpdmluZzogJXNcbiIsCi0gICAgICAg ICAgICAgICBzaG93b2ZmKHB0YWJbcHJvdG9jb2xdLmZucnApCi0gICAgICAgICAgICAgICApOwot ICAgICAgICBwcmludGYoIiBGaWxlbmFtZSBjb2xsaXNpb24gYWN0aW9uOiAgICAgICAgICIpOwot ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmNvbHg7IGkrKykKLSAgICAgICAgICBpZiAoY29seHRh YltpXS5rd3ZhbCA9PSBmbmNhY3QpIGJyZWFrOwotICAgICAgICBwcmludGYoIiUtMTJzIiwgKGkg PT0gbmNvbHgpID8gInVua25vd24iIDogY29seHRhYltpXS5rd2QpOwotCi0gICAgICAgIHByaW50 ZigiXG4gRXNjYXBlIGNvbnRyb2wgY2hhcmFjdGVyczogICAgICAgICAgIik7Ci0gICAgICAgIHgg PSBwdGFiW3Byb3RvY29sXS5wcmVmaXg7Ci0gICAgICAgIGlmICh4ID09IFBYX0FMTCkKLSAgICAg ICAgICBwcmludGYoImFsbFxuIik7Ci0gICAgICAgIGVsc2UgaWYgKHggPT0gUFhfQ0FVIHx8IHg9 PVBYX1dJTCkKLSAgICAgICAgICBwcmludGYoIm1pbmltYWxcbiIpOwotICAgICAgICBlbHNlCi0g ICAgICAgICAgcHJpbnRmKCJub25lXG4iKTsKLSAgICAgICAgaWYgKCEocyA9IHB0YWJbcHJvdG9j b2xdLmhfYl9pbml0KSkKLSAgICAgICAgICBzID0gIiI7Ci0gICAgICAgIHByaW50ZigiIEF1dG9y ZWNlaXZlIGNvbW1hbmQgKGJpbmFyeSk6ICVzXG4iLCAqcyA/IHMgOiAiKG5vbmUpIik7Ci0gICAg ICAgIGlmICghKHMgPSBwdGFiW3Byb3RvY29sXS5oX3RfaW5pdCkpCi0gICAgICAgICAgcyA9ICIi OwotICAgICAgICBwcmludGYoIiBBdXRvcmVjZWl2ZSBjb21tYW5kICh0ZXh0KTogICAlc1xuIiwg KnMgPyBzIDogIihub25lKSIpOwotICAgIH0KLSNlbHNlCi0jaWZuZGVmIE5PUFVTSAotICAgIGlm IChwcm90b2NvbCAhPSBQUk9UT19LKSB7Ci0JX1BST1RPVFlQKCBWT0lEIHNob2V4dGVybiwgKHZv aWQpICk7Ci0gICAgICAgIHByaW50ZigiXG5FeGVjdXRlZCBieSBleHRlcm5hbCBjb21tYW5kczpc blxuIik7Ci0gICAgICAgIHMgPSBwdGFiW3Byb3RvY29sXS5wX2Jfc2NtZDsKLSAgICAgICAgaWYg KCFzKSBzID0gIiI7Ci0gICAgICAgIHByaW50ZigiIFNFTkQgY29tbWFuZCAoYmluYXJ5KTogICAg ICAgICVzXG4iLCAqcyA/IHMgOiAiKG5vbmUpIik7Ci0gICAgICAgIHMgPSBwdGFiW3Byb3RvY29s XS5wX3Rfc2NtZDsKLSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgIHByaW50ZigiIFNF TkQgY29tbWFuZCAodGV4dCk6ICAgICAgICAgICVzXG4iLCAqcyA/IHMgOiAiKG5vbmUpIik7Ci0g ICAgICAgIHMgPSBwdGFiW3Byb3RvY29sXS5wX2JfcmNtZDsKLSAgICAgICAgaWYgKCFzKSBzID0g IiI7Ci0gICAgICAgIHByaW50ZigiIFJFQ0VJVkUgY29tbWFuZCAoYmluYXJ5KTogICAgICVzXG4i LCAqcyA/IHMgOiAiKG5vbmUpIik7Ci0gICAgICAgIHMgPSBwdGFiW3Byb3RvY29sXS5wX3RfcmNt ZDsKLSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgIHByaW50ZigiIFJFQ0VJVkUgY29t bWFuZCAodGV4dCk6ICAgICAgICVzXG4iLCAqcyA/IHMgOiAiKG5vbmUpIik7Ci0gICAgICAgIHMg PSBwdGFiW3Byb3RvY29sXS5oX2JfaW5pdDsKLSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAg ICAgIHByaW50ZigiIEF1dG9yZWNlaXZlIGNvbW1hbmQgKGJpbmFyeSk6ICVzXG4iLCAqcyA/IHMg OiAiKG5vbmUpIik7Ci0gICAgICAgIHMgPSBwdGFiW3Byb3RvY29sXS5oX3RfaW5pdDsKLSAgICAg ICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgIHByaW50ZigiIEF1dG9yZWNlaXZlIGNvbW1hbmQg KHRleHQpOiAgICVzXG4iLCAqcyA/IHMgOiAiKG5vbmUpIik7Ci0JKFZPSUQpIHNob2V4dGVybigp OwotICAgIH0KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8K LSNlbmRpZiAvKiBDS19YWVogKi8KLX0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBO T0NTRVRTCi0vKiBDaGFyYWN0ZXItc2V0IGl0ZW1zICovCi0KLWV4dGVybiBpbnQgc19jc2V0LCBy X2NzZXQsIGF4Y3NldFtdLCBhZmNzZXRbXTsKLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIHhmcm10YWJb XTsKLQotVk9JRAotc2hvcGFybCgpIHsKLSNpZmRlZiBDT01NRU5UCi0gICAgaW50IGk7Ci0vKiBN aXNsZWFkaW5nLi4uICovCi0gICAgcHJpbnRmKCJcbkF2YWlsYWJsZSBMYW5ndWFnZXM6XG4iKTsK LSAgICBmb3IgKGkgPSAwOyBpIDwgTUFYTEFORzsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigiICVz XG4iLGxhbmdzW2ldLmRlc2NyaXB0aW9uKTsKLSAgICB9Ci0jZWxzZQotICAgIHByaW50ZigiXG5M YW5ndWFnZS1zcGVjaWZpYyB0cmFuc2xhdGlvbiBydWxlczogJXNcbiIsCi0gICAgICAgICAgIGxh bmd1YWdlID09IExfVVNBU0NJSSA/ICJub25lIiA6IGxhbmdzW2xhbmd1YWdlXS5kZXNjcmlwdGlv bik7Ci0gICAgc2hvY2hhcnNldCgpOwotICAgIHByaW50ZigiXG5cbiIpOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLX0KLQotVk9JRAotc2hvY2hhcnNldCgpIHsKLSAgICBpbnQgeDsKLSNpZmRlZiBD T01NRU5UCi0gICAgY2hhciAqIHMgPSAiVW5rbm93biI7Ci0gICAgZXh0ZXJuIGludCB4bGF0eXBl OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICBleHRlcm4gaW50 IHhmcnhsYTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotICAgIGRlYnVnKEYxMDEsIlNIT1cgRklM RSBDSEFSIiwiIixmY2hhcnNldCk7Ci0gICAgcHJpbnRmKCJcbiIpOwotI2lmbmRlZiBOT1hGRVIK LSAgICBwcmludGYoIiBUcmFuc2ZlciBUcmFuc2xhdGlvbjogJXNcbiIsIHNob3dvZmYoeGZyeGxh KSk7Ci0gICAgaWYgKCF4ZnJ4bGEpIHsKLSAgICAgICAgcHJpbnRmKAotICAgICAgIiBCZWNhdXNl IHRyYW5zZmVyIHRyYW5zbGF0aW9uIGlzIG9mZiwgdGhlIGZvbGxvd2luZyBhcmUgaWdub3JlZDpc blxuIik7Ci0gICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHByaW50ZigiIEZpbGUgQ2hh cmFjdGVyLVNldDogJXMgKCVzKSwgIiwKLSAgICAgICAgICAgZmNzaW5mb1tmY2hhcnNldF0ua2V5 d29yZCwKLSAgICAgICAgICAgZmNzaW5mb1tmY2hhcnNldF0ubmFtZQotICAgICAgICAgICApOwot ICAgIGlmICgoeCA9IGZjc2luZm9bZmNoYXJzZXRdLnNpemUpID09IDEyOCkKLSAgICAgIHByaW50 ZigiNy1iaXQiKTsKLSAgICBlbHNlIGlmICh4ID09IDI1NikKLSAgICAgIHByaW50ZigiOC1iaXQi KTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIm11bHRpYnl0ZSIpOwotICAgIHByaW50ZigiXG4i KTsKLSAgICBwcmludGYoIiBGaWxlIFNjYW46ICVzXG4iLHNob3dvZmYoZmlsZXBlZWspKTsKLSAg ICBwcmludGYoIiAgIERlZmF1bHQgN2JpdC1DaGFyYWN0ZXItU2V0OiAlc1xuIixmY3NpbmZvW2Rj c2V0N10ua2V5d29yZCk7Ci0gICAgcHJpbnRmKCIgICBEZWZhdWx0IDhiaXQtQ2hhcmFjdGVyLVNl dDogJXNcbiIsZmNzaW5mb1tkY3NldDhdLmtleXdvcmQpOwotICAgIHByaW50ZigiIFRyYW5zZmVy IENoYXJhY3Rlci1TZXQiKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgaWYgKHRzbGV2ZWwgPT0gVFNf TDIpCi0gICAgICBwcmludGYoIjogKGludGVybmF0aW9uYWwpIik7Ci0gICAgZWxzZQotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSAgICBpZiAodGNoYXJzZXQgPT0gVENfVFJBTlNQKQotICAgICAgcHJp bnRmKCI6IFRyYW5zcGFyZW50Iik7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCI6ICVzICglcyki LHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQsIHRjc2luZm9bdGNoYXJzZXRdLm5hbWUpOwotICAg IHByaW50ZigiXG4iKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgc3dpdGNoICh4bGF0eXBlKSB7Ci0g ICAgICBjYXNlIFhMQV9OT05FOiBzID0gIk5vbmUiOyBicmVhazsKLSAgICAgIGNhc2UgWExBX0JZ VEU6IHMgPSAiQnl0ZSI7IGJyZWFrOwotICAgICAgY2FzZSBYTEFfSkFQQU46IHMgPSAiSmFwYW5l c2UiOyBicmVhazsKLSAgICAgIGNhc2UgWExBX1VOSUNPREU6IHMgPSAiVW5pY29kZSI7IGJyZWFr OwotICAgIH0KLSAgICBwcmludGYoIlxuIFRyYW5zbGF0aW9uIHR5cGU6ICVzXG4iLHMpOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICBwcmludGYoIiBTRU5EIGNoYXJhY3Rlci1zZXQtc2VsZWN0 aW9uOiAlc1xuIix4ZnJtdGFiW3NfY3NldF0ua3dkKTsKLSAgICBwcmludGYoIiBSRUNFSVZFIGNo YXJhY3Rlci1zZXQtc2VsZWN0aW9uOiAlc1xuIix4ZnJtdGFiW3JfY3NldF0ua3dkKTsKLSAgICBp ZiAoc19jc2V0ID09IFhNT0RFX0EgfHwgcl9jc2V0ID09IFhNT0RFX0EpCi0gICAgICBwcmludGYo Ci0gICAgICAiIChVc2UgU0hPVyBBU1NPQ0lBVElPTlMgdG8gbGlzdCBhdXRvbWF0aWMgY2hhcmFj dGVyLXNldCBzZWxlY3Rpb25zLilcbiIKLSAgICAgICAgICAgICApOwotfQotCi1WT0lECi1zaG93 YXNzb2MoKSB7Ci0gICAgaW50IGksIGssIG4gPSA0OwotICAgIGNoYXIgKiBzOwotICAgIHByaW50 ZigiXG5Gb3IgaW5jb21pbmcgZmlsZXM6XG5cbiIpOwotICAgIHByaW50ZigiVHJhbnNmZXIgQ2hh cmFjdGVyLVNldCAgIEZpbGUgQ2hhcmFjdGVyLVNldFxuIik7Ci0gICAgZm9yIChpID0gMTsgaSA8 PSBNQVhUQ1NFVFM7IGkrKykgewotICAgICAgICBrID0gYXhjc2V0W2ldOwotICAgICAgICBpZiAo ayA8IDAgfHwgayA+IE1BWEZDU0VUUykKLSAgICAgICAgICBzID0gIihub25lKSI7Ci0gICAgICAg IGVsc2UKLSAgICAgICAgICBzID0gZmNzaW5mb1trXS5rZXl3b3JkOwotICAgICAgICBpZiAoIXMp IHMgPSAiIjsKLSAgICAgICAgaWYgKCEqcykgcyA9ICIobm9uZSkiOwotICAgICAgICBwcmludGYo IiAlLTI1cyVzXG4iLHRjc2luZm9baV0ua2V5d29yZCxzKTsKLSAgICAgICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSAgICB9Ci0g ICAgcHJpbnRmKCJcbkZvciBvdXRib3VuZCBmaWxlczpcblxuIik7Ci0gICAgbiArPSAyOwotICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9 IDA7Ci0gICAgcHJpbnRmKCJGaWxlIENoYXJhY3Rlci1TZXQgICAgICAgVHJhbnNmZXIgQ2hhcmFj dGVyLVNldFxuIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybjsgZWxzZSBuID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDw9IE1BWEZDU0VUUzsgaSsr KSB7Ci0gICAgICAgIGsgPSBhZmNzZXRbaV07Ci0gICAgICAgIGlmIChrIDwgMCB8fCBrID4gTUFY VENTRVRTKQotICAgICAgICAgIHMgPSAiKG5vbmUpIjsKLSAgICAgICAgZWxzZQotICAgICAgICAg IHMgPSB0Y3NpbmZvW2tdLmtleXdvcmQ7Ci0gICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAg ICBpZiAoISpzKSBzID0gIihub25lKSI7Ci0gICAgICAgIHByaW50ZigiICUtMjVzJXNcbiIsZmNz aW5mb1tpXS5rZXl3b3JkLHMpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotICAgIH0KLX0KLSNlbmRpZiAvKiBOT0NT RVRTICovCi0KLVZPSUQKLXNob3BhcigpIHsKLSAgICBwcmludGYoIlNob3cgd2hhdD8gIChUeXBl IFwic2hvdyA/XCIgZm9yIGEgbGlzdCBvZiBwb3NzaWJpbGl0aWVzLilcbiIpOwotfQotI2VuZGlm IC8qIE5PU0hPVyAqLwotCi0jaWZuZGVmIE5PWEZFUgotLyogIEQgTyBTIFQgQSBUICAtLSAgRGlz cGxheSBmaWxlIHRyYW5zZmVyIHN0YXRpc3RpY3MuICAqLwotCi1pbnQKLWRvc3RhdChicmllZikg aW50IGJyaWVmOyB7Ci0gICAgZXh0ZXJuIGxvbmcgZmlscmVqLCBwZWFrY3BzOwotICAgIGV4dGVy biBpbnQgbGFzdHNwbWF4LCBzdHJlYW1lZCwgY2xlYXJlZCwgc3RyZWFtb2s7Ci0gICAgZXh0ZXJu IGNoYXIgd2hvYXJldVtdOwotICAgIGludCBuID0gMCwgZnRwID0gMDsKLSAgICBleHRlcm4gaW50 IGRvY3JjLCBpbnRlcnJ1cHRlZCwgZmF0YWxpbzsKLQotICAgIGZ0cCA9IGxhc3R4ZmVyICYgV19G VFA7Ci0KLSNpZmRlZiBDS19UVEdXU0laCi0jaWZkZWYgT1MyCi0gICAgaWYgKHR0X2NvbHNbVlRF Uk1dIDwgMCB8fCB0dF9yb3dzW1ZURVJNXSA8IDApCi0gICAgICB0dGd3c2l6KCk7Ci0jZWxzZSAv KiBPUzIgKi8KLSAgICBpZiAodHRnd3NpeigpID4gMCkgewotICAgICAgICBpZiAodHRfcm93cyA+ IDAgJiYgdHRfY29scyA+IDApIHsKLSAgICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93czsKLSAg ICAgICAgICAgIGNtZF9jb2xzID0gdHRfY29sczsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJkb3N0 YXQgeGZlcnN0YXQiLCIiLHhmZXJzdGF0KTsKLSAgICBpZiAoeGZlcnN0YXQgPCAwKSB7Ci0gICAg ICAgIHByaW50ZigiIE5vIGZpbGUgdHJhbnNmZXJzIHlldC5cbiIpOwotICAgICAgICByZXR1cm4o MSk7Ci0gICAgfQotICAgIG4gPSAwOwotICAgIGlmIChicmllZikgeyBwcmludGYoIlxuIik7IG4r KzsgfTsKLSAgICBwcmludGYoIiBwcm90b2NvbCAgICAgICAgICAgICAgIDogJXNcbiIsCi0gICAg ICAgICAgIGZ0cCA/ICJmdHAiIDogcHRhYltwcm90b2NvbF0ucF9uYW1lKTsKLSAgICBuKys7Ci0g ICAgcHJpbnRmKCIgc3RhdHVzICAgICAgICAgICAgICAgICA6ICIpOwotICAgIGlmICh4ZmVyc3Rh dCkgcHJpbnRmKCJTVUNDRVNTXG4iKTsKLSAgICBlbHNlIGlmIChpbnRlcnJ1cHRlZCkgcHJpbnRm KCJGQUlMVVJFIChpbnRlcnJ1cHRlZClcbiIpOwotICAgIGVsc2UgaWYgKGZhdGFsaW8pIHByaW50 ZigiRkFJTFVSRSAoaS9vIGVycm9yKVxuIik7Ci0gICAgZWxzZSBwcmludGYoIkZBSUxVUkVcbiIp OwotI2lmbmRlZiBYWVpfSU5URVJOQUwKLSAgICBpZiAoIWZ0cCAmJiBwcm90b2NvbCAhPSBQUk9U T19LKSB7Ci0gICAgICAgIHByaW50ZigiXG4gZXh0ZXJuYWwgcHJvdG9jb2wgc3RhdGlzdGljcyBu b3QgYXZhaWxhYmxlXG4iKTsKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLSNlbmRpZiAvKiBY WVpfSU5URVJOQUwgKi8KLSAgICBuKys7Ci0gICAgaWYgKCFmdHApIHsKLSAgICAgICAgaWYgKCF4 ZmVyc3RhdCA+IDApIHsKLSAgICAgICAgICAgIGlmIChkb2NyYykKLSAgICAgICAgICAgICAgcHJp bnRmKCIgY3JjLTE2IG9mIGZpbGUocykgICAgICA6ICVsZFxuIiwgY3JjMTYpOwotICAgICAgICAg ICAgZWxzZQotICAgICAgICAgICAgICBwcmludGYoIiBjcmMtMTYgb2YgZmlsZShzKSAgICAgIDog KGRpc2FibGVkKVxuIik7Ci0gICAgICAgICAgICBuKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KCF4ZmVyc3RhdCAmJiAqZXBrdG1zZykgewotICAgICAgICAgICAgcHJpbnRmKCIgcmVhc29uICAg ICAgICAgICAgICAgICA6ICVzXG4iLCBlcGt0bXNnKTsKLSAgICAgICAgICAgIG4rKzsKLSAgICAg ICAgfQotICAgIH0KLSAgICBpZiAoIWJyaWVmKSB7Ci0jaWZkZWYgTkVXRlRQCi0gICAgICAgIGlm IChmdHApIHsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyIGZ0cF9zcnZ0eXBbXTsKLSAgICAgICAg ICAgIHByaW50ZigiIHJlbW90ZSBzeXN0ZW0gdHlwZSAgICAgOiAlc1xuIixmdHBfc3J2dHlwKTsK LSAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogTkVXRlRQICovCi0gICAgICAgICAgaWYgKHdob2Fy ZXVbMF0pIHsKLSAgICAgICAgICAgIHByaW50ZigiIHJlbW90ZSBzeXN0ZW0gdHlwZSAgICAgOiAl c1xuIiwKLSAgICAgICAgICAgICAgICAgICBnZXRzeXNpZCgoY2hhciAqKXdob2FyZXUpKTsKLSAg ICAgICAgICAgIG4rKzsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoIiBmaWxlcyB0cmFuc2Zl cnJlZCAgICAgIDogJWxkXG4iLGZpbGNudCAtIGZpbHJlaik7Ci0gICAgICAgIGlmICghZnRwKQot ICAgICAgICAgIHByaW50ZigiIGZpbGVzIG5vdCB0cmFuc2ZlcnJlZCAgOiAlbGRcbiIsZmlscmVq KTsKLSAgICAgICAgcHJpbnRmKCIgY2hhcmFjdGVycyBsYXN0IGZpbGUgICA6ICVzXG4iLGNrZnN0 b2EoZmZjKSk7Ci0gICAgICAgIHByaW50ZigiIHRvdGFsIGZpbGUgY2hhcmFjdGVycyAgOiAlc1xu Iixja2ZzdG9hKHRmYykpOwotICAgICAgICBuICs9IGZ0cCA/IDMgOiA0OwotICAgICAgICBpZiAo IWZ0cCkgewotICAgICAgICAgICAgcHJpbnRmKCIgY29tbXVuaWNhdGlvbiBsaW5lIGluICA6ICVz XG4iLGNrZnN0b2EodGxjaSkpOwotICAgICAgICAgICAgcHJpbnRmKCIgY29tbXVuaWNhdGlvbiBs aW5lIG91dCA6ICVzXG4iLGNrZnN0b2EodGxjbykpOwotICAgICAgICAgICAgcHJpbnRmKCIgcGFj a2V0cyBzZW50ICAgICAgICAgICA6ICVkXG4iLCBzcGFja2V0cyk7Ci0gICAgICAgICAgICBwcmlu dGYoIiBwYWNrZXRzIHJlY2VpdmVkICAgICAgIDogJWRcbiIsIHJwYWNrZXRzKTsKLSAgICAgICAg ICAgIG4gKz0gNDsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZnRwKSBnb3RvIGRvdGltZXM7 Ci0KLSAgICBwcmludGYoIiBkYW1hZ2VkIHBhY2tldHMgcmVjJ2QgIDogJWRcbiIsIGNydW5jaGVk KTsKLSAgICBwcmludGYoIiB0aW1lb3V0cyAgICAgICAgICAgICAgIDogJWRcbiIsIHRpbWVvdXRz KTsKLSAgICBwcmludGYoIiByZXRyYW5zbWlzc2lvbnMgICAgICAgIDogJWRcbiIsIHJldHJhbnMp OwotICAgIG4gKz0gMzsKLQotICAgIGlmICghYnJpZWYpIHsKLSAgICAgICAgaWYgKGZpbGNudCA+ IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiIHBhcml0eSAgICAgICAgICAgICAgICAgOiAlcyIs cGFybmFtKChjaGFyKXBhcml0eSkpOwotICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgaWYg KGF1dG9wYXIpIHsgcHJpbnRmKCIgKGRldGVjdGVkIGF1dG9tYXRpY2FsbHkpIik7IG4rKzsgfQot ICAgICAgICAgICAgcHJpbnRmKAotICAgICAgICAgICAgICAgICAiXG4gY29udHJvbCBjaGFyYWN0 ZXJzICAgICA6ICVsZCBwcmVmaXhlZCwgJWxkIHVucHJlZml4ZWRcbiIsCi0gICAgICAgICAgICAg ICAgICAgY2NwLCBjY3UpOwotICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgcHJpbnRmKCIg OHRoIGJpdCBwcmVmaXhpbmcgICAgICA6ICIpOwotICAgICAgICAgICAgbisrOwotICAgICAgICAg ICAgaWYgKGVicWZsZykgcHJpbnRmKCJ5ZXMgWyVjXVxuIixlYnEpOyBlbHNlIHByaW50Zigibm9c biIpOwotICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgcHJpbnRmKCIgbG9ja2luZyBzaGlm dHMgICAgICAgICA6ICVzXG4iLCBsc2NhcHUgPyAieWVzIiA6ICJubyIpOwotICAgICAgICAgICAg bisrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIHsgaWYg KCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBuID0gMDsgfQotICAgIGlmIChzdHJlYW1lZCA+ IDApCi0gICAgICBwcmludGYoIiB3aW5kb3cgc2xvdHMgdXNlZCAgICAgIDogKHN0cmVhbWluZylc biIpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZigiIHdpbmRvdyBzbG90cyB1c2VkICAgICAgOiAl ZCBvZiAlZFxuIiwgd21heCwgd3Nsb3RyKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbiA9IDA7IH0KLSAgICBwcmludGYoIiBy ZWxpYWJsZTogICAgICAgICAgICAgIDogJXMlc1xuIiwKLSAgICAgICAgICAgc3RyZWFtb2sgPyAi IiA6ICJub3QgIiwgIm5lZ290aWF0ZWQiKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbiA9IDA7IH0KLSAgICBwcmludGYoIiBj bGVhcmNoYW5uZWw6ICAgICAgICAgIDogJXMlc1xuIiwKLSAgICAgICAgICAgY2xlYXJlZCAgPyAi IiA6ICJub3QgIiwgIm5lZ290aWF0ZWQiKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbiA9IDA7IH0KLQotICAgIGlmICghYnJp ZWYpIHsKLSAgICAgICAgcHJpbnRmKCIgcGFja2V0IGxlbmd0aCAgICAgICAgICA6ICVkIChzZW5k KSwgJWQgKHJlY2VpdmUpXG4iLAotICAgICAgICAgICAgICAgbGFzdHNwbWF4LCB1cnBzaXopOwot ICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4o MSk7IGVsc2UgbiA9IDA7IH0KLSAgICAgICAgcHJpbnRmKCIgY29tcHJlc3Npb24gICAgICAgICAg ICA6ICIpOwotICAgICAgICBpZiAocnB0ZmxnKQotICAgICAgICAgIHByaW50ZigieWVzIFslY10g KCVsZClcbiIsKGNoYXIpIHJwdHEscnB0bik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwcmlu dGYoIm5vXG4iKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDEpOyBlbHNlIG4gPSAwOyB9Ci0gICAgICAgIGlmIChiY3R1ID09IDQpCi0g ICAgICAgICAgcHJpbnRmKCIgYmxvY2sgY2hlY2sgdHlwZSB1c2VkICA6IGJsYW5rLWZyZWUtMlxu Iik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwcmludGYoIiBibG9jayBjaGVjayB0eXBlIHVz ZWQgIDogJWRcbiIsYmN0dSk7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIHsgaWYg KCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBuID0gMDsgfQotICAgIH0KLQotICBkb3RpbWVz OgotCi0jaWZkZWYgR0ZUSU1FUgotI2lmZGVmIENPTU1FTlQKLSAgICBwcmludGYoIiBlbGFwc2Vk IHRpbWUgICAgICAgICAgIDogJTAuM2Ygc2VjLCAlc1xuIiwgZnB0c2VjcyxoaG1tc3ModHNlY3Mp KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgcHJpbnRmKCIgZWxhcHNlZCB0aW1lICAgICAg ICAgICA6ICVzICglMC4zZiBzZWMpXG4iLAotICAgICAgICAgICBoaG1tc3MoKGxvbmcpKGZwdHNl Y3MgKyAwLjUpKSxmcHRzZWNzKTsKLSNlbHNlCi0jaWZkZWYgQ09NTUVOVAotICAgIHByaW50Zigi IGVsYXBzZWQgdGltZSAgICAgICAgICAgOiAlcyAoJWQgc2VjKVxuIixoaG1tc3ModHNlY3MpLHRz ZWNzKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgcHJpbnRmKCIgZWxhcHNlZCB0aW1lICAg ICAgICAgICA6ICVkIHNlYywgJXNcbiIsdHNlY3MsaGhtbXNzKHRzZWNzKSk7Ci0jZW5kaWYgLyog R0ZUSU1FUiAqLwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkp IHJldHVybigxKTsgZWxzZSBuID0gMDsgfQotICAgIGlmICghZnRwICYmIGxvY2FsICYmICFuZXR3 b3JrICYmICFicmllZikgewotICAgICAgICBpZiAoc3BlZWQgPD0gMEwpIHNwZWVkID0gdHRnc3Bk KCk7Ci0gICAgICAgIGlmIChzcGVlZCA+IDBMKSB7Ci0gICAgICAgICAgICBpZiAoc3BlZWQgPT0g ODg4MCkKLSAgICAgICAgICAgICAgcHJpbnRmKCIgdHJhbnNtaXNzaW9uIHJhdGUgICAgICA6IDc1 LzEyMDAgYnBzXG4iKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJpbnRmKCIg dHJhbnNtaXNzaW9uIHJhdGUgICAgICA6ICVsZCBicHNcbiIsc3BlZWQpOwotICAgICAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNl IG4gPSAwOyB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFmdHAgJiYgbG9jYWwgJiYgIW5l dHdvcmsgJiYgICAgLyogT25seSBtYWtlcyBzZW5zZSBmb3IgKi8KLSAgICAgICAgbWRtdHlwID09 IDAgJiYgICAgICAgICAgICAgICAgICAvKiBkaXJlY3Qgc2VyaWFsIGNvbm5lY3Rpb25zICovCi0g ICAgICAgIHNwZWVkID4gOTlMICYmICAgICAgICAgICAgICAgICAgLyogd2hlbiB3ZSByZWFsbHkg a25vdyB0aGUgc3BlZWQgKi8KLSAgICAgICAgc3BlZWQgIT0gODg4MEwKLSAgICAgICAgKSB7Ci0g ICAgICAgIGludCBlZmY7Ci0gICAgICAgIGVmZiA9ICgoKHRmY3BzICogMTAwTCkgLyAoc3BlZWQg LyAxMDBMKSkgKyA1TCkgLyAxMEw7Ci0gICAgICAgIHByaW50ZigiIGVmZmVjdGl2ZSBkYXRhIHJh dGUgICAgOiAlbGQgY3BzICglZCUlKVxuIix0ZmNwcyxlZmYpOwotICAgIH0gZWxzZQotICAgICAg cHJpbnRmKCIgZWZmZWN0aXZlIGRhdGEgcmF0ZSAgICA6ICVsZCBjcHNcbiIsIHRmY3BzKTsKLSAg ICBpZiAoIWZ0cCAmJiBwZWFrY3BzID4gMEwgJiYgcGVha2NwcyA+IHRmY3BzKQotICAgICAgcHJp bnRmKCIgcGVhayBkYXRhIHJhdGUgICAgICAgICA6ICVsZCBjcHNcbiIsIHBlYWtjcHMpOwotICAg IGlmIChicmllZikKLSAgICAgIHByaW50ZigiXG5Vc2UgU1RBVElTVElDUyAvVkVSQk9TRSBmb3Ig Z3JlYXRlciBkZXRhaWwuXG5cbiIpOwotICAgIHJldHVybigxKTsKLX0KLSNlbmRpZiAvKiBOT1hG RVIgKi8KLQotI2lmbmRlZiBOT1NQTAotCi0vKiBUaGUgSU5QVVQgY29tbWFuZCAqLwotCi0vKgot ICBOT1RFOiBBbiBJTlBVVCB0aW1lb3V0IG9mIDAgbWVhbnMgdG8gcGVyZm9ybSBhIG5vbmJsb2Nr aW5nIHJlYWQgb2YgdGhlCi0gIG1hdGVyaWFsIHRoYXQgaGFzIGFscmVhZHkgYXJyaXZlZCBhbmQg aXMgd2FpdGluZyB0byBiZSByZWFkLCBhbmQgcGVyZm9ybQotICBtYXRjaGVzIGFnYWluc3QgaXQs IHdpdGhvdXQgZG9pbmcgYW55IGZ1cnRoZXIgcmVhZHMuICBJdCBzaG91bGQgc3VjY2VlZAotICBv ciBmYWlsIGluc3RhbnRhbmVvdXNseS4KLSovCi0KLS8qIE91dHB1dCBidWZmZXJpbmcgZm9yICJk b2lucHV0IiAqLwotCi0jaWZkZWYgcGRwMTEKLSNkZWZpbmUgTUFYQlVSU1QgMTYgICAgICAgICAg ICAgLyogTWF4aW11bSBzaXplIG9mIGlucHV0IGJ1cnN0ICovCi0jZWxzZQotI2RlZmluZSBNQVhC VVJTVCAxMDI0Ci0jZW5kaWYgLyogcGRwMTEgKi8KLSNpZmRlZiBPU0sKLXN0YXRpYyBDSEFSICpj b25idWY7ICAgICAgICAgICAgLyogQnVmZmVyIHRvIGhvbGQgb3V0cHV0IGZvciBjb25zb2xlICov Ci0jZWxzZQotc3RhdGljIENIQVIgY29uYnVmW01BWEJVUlNUXTsgICAvKiBCdWZmZXIgdG8gaG9s ZCBvdXRwdXQgZm9yIGNvbnNvbGUgKi8KLSNlbmRpZiAvKiBPU0sgKi8KLXN0YXRpYyBpbnQgY29u Y250ID0gMDsgICAgICAgICAgLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgYnVmZmVyZWQgKi8KLSNp ZmRlZiBPU0sKLXN0YXRpYyBDSEFSICpzZXNidWY7ICAgICAgICAgICAgLyogQnVmZmVyIHRvIGhv bGQgb3V0cHV0IGZvciBzZXNzaW9uIGxvZyAqLwotI2Vsc2UKLXN0YXRpYyBDSEFSIHNlc2J1ZltN QVhCVVJTVF07ICAgLyogQnVmZmVyIHRvIGhvbGQgb3V0cHV0IGZvciBzZXNzaW9uIGxvZyAqLwot I2VuZGlmIC8qIE9TSyAqLwotc3RhdGljIGludCBzZXNjbnQgPSAwOyAgICAgICAgICAvKiBOdW1i ZXIgb2YgY2hhcmFjdGVycyBidWZmZXJlZCAqLwotCi1leHRlcm4gaW50IGRlYnNlczsgICAgICAg ICAgICAgICAgICAgICAgLyogVEVSTUlOQUwgREVCVUcgT04vT0ZGICovCi0KLXN0YXRpYyBWT0lE ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbHVzaCBJTlBVVCBlY2hvaW5nICovCi1t eWZsc2goKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHNlc3Npb24gbG9n IG91dHB1dC4gKi8KLSAgICBpZiAoY29uY250ID4gMCkgewotICAgICAgICBpZiAoZGVic2VzKSB7 ICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIGRlYnVnZ2luZz8gKi8KLSAgICAgICAgICAg IGludCBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmNudDsgaSsrKQotICAgICAg ICAgICAgICBjb25vbChkYmNocihjb25idWZbaV0pKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg ICAgY29ueG8oY29uY250LCAoY2hhciAqKSBjb25idWYpOwotICAgICAgICBjb25jbnQgPSAwOwot ICAgIH0KLSAgICBpZiAoc2VzY250ID4gMCkgewotICAgICAgICBsb2dzdHIoKGNoYXIgKikgc2Vz YnVmLCBzZXNjbnQpOwotICAgICAgICBzZXNjbnQgPSAwOwotICAgIH0KLX0KLQotLyogRXhlY3V0 ZSB0aGUgSU5QVVQgYW5kIE1JTlBVVCBjb21tYW5kcyAqLwotCi1pbnQgaW5zdGF0dXMgPSAtMTsK LWxvbmcgaW5ldGltZSA9IC0xTDsKLWludCBpbndhaXQgPSAwOwotaW50IG5vd3JhcCA9IDA7Ci0K LS8qIEZvciByZXR1cm5pbmcgdGhlIGlucHV0IHNlcXVlbmNlIHRoYXQgbWF0Y2hlZCAqLwotCi0j aWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgTUFUQ0hCVUZTSVogODE5MQotI2Vsc2UKLSNkZWZpbmUg TUFUQ0hCVUZTSVogMTAyMwotI2VuZGlmIC8qIEJJR0JVRk9LICovCi1zdGF0aWMgY2hhciAqIG1h dGNoYnVmID0gTlVMTDsKLXN0YXRpYyBpbnQgbWF0Y2hpbmRleCA9IDA7Ci1zdGF0aWMgaW50IGJ1 cnN0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcnMgcmVtYWluaW5nIGluIGlucHV0 IGJ1cnN0ICovCi0vKgotICB0aW1vID0gSG93IGxvbmcgdG8gd2FpdDoKLSAgICAgICAgIDwgMCA9 IFdhaXQgZm9yZXZlcgotICAgICAgICAgICAwID0gRG9uJ3Qgd2FpdCBhdCBhbGwgLSBtYXRlcmlh bCBtdXN0IGFscmVhZHkgaGF2ZSBhcnJpdmVkCi0gICAgICAgICA+IDAgPSBXYWl0IHRoaXMgbWFu eSBzZWNvbmRzCi0gIG1zICAgPSBBcnJheSBvZiBzdHJpbmdzIHRvIHdhaXQgZm9yLgotICBtcCAg ID0gQXJyYXkgb2YgZmxhZ3MuCi0gICAgICAgICBJZiBtcFtpXSA9PSAwLCBtc1tpXSBpcyBsaXRl cmFsLCBlbHNlIGl0J3MgYSBwYXR0ZXJuLgotICBmbGFncyA9IGJpdCBtYXNrCi0gICAgSU5QU1df Tk9NID0gL05PTUFUQ0ggPSAxCi0gICAgSU5QU1dfQ0xSID0gL0NMRUFSICAgPSAyCi0gICAgSU5Q U1dfTk9XID0gL05PV1JBUCAgPSA0Ci0gICAgSU5QU1dfQ09VID0gL0NPVU5UICAgPSA4Ci0gIGNv dW50ID0gL0NPVU5UOiB2YWx1ZSBpZiBhIC9DT1VOVCBzd2l0Y2ggd2FzIGdpdmVuLgotCi0gUmV0 dXJuczoKLSAgICAwIG9uIGZhaWx1cmUsIDEgb24gc3VjY2Vzcy4KLSovCi0jaWZuZGVmIEVTX05P Uk1BTAotI2RlZmluZSBFU19OT1JNQUwgMAotI2VuZGlmCS8qIEVTX05PUk1BTCAqLwotZXh0ZXJu IGludCBpbmVzY1tdLCBvbGRlc2NbXTsKLQotaW50Ci1kb2lucHV0KHRpbW8sbXMsbXAsZmxhZ3Ms Y291bnQpCi0gICAgaW50IHRpbW87IGNoYXIgKm1zW107IGludCBtcFtdOyBpbnQgZmxhZ3M7IGlu dCBjb3VudDsgewotICAgIGV4dGVybiBpbnQgaW5pbnRyOwotI2lmZGVmIENLX0FVVE9ETAotICAg IGV4dGVybiBpbnQgaW5hdXRvZGw7Ci0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0gICAgaW50IHgs IHksIGksIHQsIHJ0LCBpY24sIGFueWNoYXIgPSAwLCBtaVtNSU5QTUFYXTsKLSNpZmRlZiBHRlRJ TUVSCi0gICAgQ0tGTE9BVCBmcHQgPSAwLjA7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgIGlu dCBzYXZlY291bnQgPSAwOwotICAgIGludCBub21hdGNoID0gMDsKLSAgICBpbnQgY2xlYXJmaXJz dCA9IDA7Ci0gICAgaW50IGxhc3RjaGFyID0gMDsKLSAgICBpbnQgd2FpdGluZyA9IDA7Ci0gICAg aW50IGltYXNrID0gMDsKLSAgICBjaGFyIGNoLCAqeHAsICpzOwotICAgIENIQVIgYzsKLSNpZm5k ZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGV4dGVybiBpbnQgdGVybV9pbzsKLSAgICBpbnQg dGVybV9pb19zYXZlOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNp ZmRlZiBUTkNPREUKLSAgICBzdGF0aWMgaW50IGNyID0gMDsKLSNlbmRpZiAvKiBUTkNPREUgKi8K LSAgICBpbnQgaXNfdG4gPSAwOwotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICBleHRlcm4gaW50IHNz aF9jYXM7Ci0gICAgZXh0ZXJuIGNoYXIgKiBzc2hfY21kOwotI2VuZGlmIC8qIFNTSEJVSUxUSU4g Ki8KLSAgICBpbnQgbm9lc2NzZXEgPSAwOwkJCS8qIEZpbHRlciBlc2NhcGUgc2VxdWVuY2VzICov Ci0KLSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBjb3VudCIsIiIsY291bnQpOwotICAgIGRlYnVnKEYx MDEsImlucHV0IGZsYWdzIiwiIixmbGFncyk7Ci0KLS8qCi0gIENLX0JVUlNUIGVuYWJsZXMgdGhl IElOUFVUIHNwZWVkdXAgY29kZSwgd2hpY2ggZGVwZW5kcyBvbiB0dGNoaygpIHJldHVybmluZwot ICBhY2N1cmF0ZSBpbmZvcm1hdGlvbi4gIElmIElOUFVUIGZhaWxzIHdpdGggdGhpcyBjb2RlIGVu YWJsZWQsIGNoYW5nZSB0aGUKLSAgYWJvdmUgIiNkZWZpbmUiIHRvICIjdW5kZWYiLgotKi8KLSNk ZWZpbmUgQ0tfQlVSU1QKLQotLyoqKioqIENIQU5HRSBUSElTIFRPIEEgU0VUIElOUFVUIFBBUkFN RVRFUiAqKioqKi8KLQotICAgIG5vZXNjc2VxID0gKHNlc3NmdCA9PSBYWUZUX1QpOwkvKiBGaWx0 ZXIgZXNjYXBlIHNlcXVlbmNlcyAqLwotCi0gICAgaW1hc2sgPSBjbWFzazsKLSAgICBpZiAocGFy aXR5KSBpbWFzayA9IDB4N2Y7Ci0gICAgaW53YWl0ID0gdGltbzsgICAgICAgICAgICAgICAgICAg ICAgLyogRm9yIFx2KGlud2FpdCkgKi8KLQotICAgIC8qIE9wdGlvbnMgZnJvbSBjb21tYW5kIHN3 aXRjaGVzICovCi0KLSAgICBub3dyYXAgPSBmbGFncyAmIElOUFNXX05PVzsJCS8qIDQgPSAvTk9X UkFQICovCi0gICAgbm9tYXRjaCA9IGZsYWdzICYgSU5QU1dfTk9NOwkvKiAxID0gL05PTUFUQ0gg Ki8KLSAgICBjbGVhcmZpcnN0ID0gZmxhZ3MgJiBJTlBTV19DTFI7CS8qIDIgPSAvQ0xFQVIgKi8K LSAgICBzYXZlY291bnQgPSBjb3VudDsKLQotICAgIG1ha2VzdHIoJmlucG1hdGNoLE5VTEwpOwot ICAgIGlmICghbWF0Y2hidWYpIHsKLSAgICAgICAgbWF0Y2hidWYgPSBtYWxsb2MoTUFUQ0hCVUZT SVorMSk7Ci0gICAgICAgIG1hdGNoYnVmWzBdID0gTlVMOwotICAgIH0KLSAgICBtYXRjaGluZGV4 ID0gMDsKLQotICAgIC8qIElmIGxhc3QgdGltZSB0aHJvdWdoIHdlIHJldHVybmVkIGJlY2F1c2Ug b2YgL05PV1JBUCBhbmQgYnVmZmVyIGZ1bGwgKi8KLSAgICAvKiBub3cgd2UgaGF2ZSB0byBjbGVh ciB0aGUgYnVmZmVyIHRvIG1ha2Ugcm9vbSBmb3IgYW5vdGhlciBsb2FkLiAqLwotCi0gICAgaWYg KG5vd3JhcCAmJiBpbnN0YXR1cyA9PSBJTlBfQkYpCi0gICAgICBjbGVhcmZpcnN0ID0gMTsKLQot ICAgIGlmIChjbGVhcmZpcnN0KSB7CQkJLyogSU5QVVQgL0NMRUFSICovCi0JaW50IGk7Ci0JbXlm bHNoKCk7CQkJLyogRmx1c2ggc2NyZWVuIGFuZCBsb2cgYnVmZmVycyAqLwotCWZvciAoaSA9IDA7 IGkgPCBpbmJ1ZnNpemU7IGkrKykKLQkgIGlucGJ1ZltpXSA9IE5VTDsKLQlpbnBicCA9IGlucGJ1 ZjsKLSAgICB9Ci0gICAgaXNfdG4gPQotI2lmZGVmIFROQ09ERQotICAgICAgICAobG9jYWwgJiYg bmV0d29yayAmJiBJU19URUxORVQoKSkgfHwgKCFsb2NhbCAmJiBzc3RlbG5ldCkKLSNlbHNlCi0g ICAgICAgICAwCi0jZW5kaWYgLyogVE5DT0RFICovCi0gICAgICAgICAgOwotCi0jaWZkZWYgQ0tf U1NMCi0gICAgaWYgKGlzX3RuKSBpZiAoc3NsX3Jhd19mbGFnIHx8IHRsc19yYXdfZmxhZykgaXNf dG4gPSAwOwotI2VuZGlmCS8qIENLX1NTTCAqLwotCi0gICAgaW5zdGF0dXMgPSBJTlBfSUU7ICAg ICAgICAgICAgICAgICAgLyogMyA9IGludGVybmFsIGVycm9yICovCi0gICAga2JjaGFyID0gMDsK LQotI2lmZGVmIE9TSwotICAgIGlmIChjb25idWYgPT0gTlVMTCkgewotICAgICAgICBpZiAoKGNv bmJ1ZiA9IChDSEFSICopbWFsbG9jKE1BWEJVUlNUKjIpKSA9PSBOVUxMKSB7Ci0gICAgICAgICAg ICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAgICAgICAgc2VzYnVmID0gY29uYnVmICsgTUFYQlVS U1Q7Ci0gICAgfQotI2VuZGlmIC8qIE9TSyAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICBpZiAo bG9jYWwpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbiBsb2NhbCBtb2RlLi4uICovCi0g ICAgICAgIGlmICgod2FpdGluZyA9IHR0Y2hrKCkpIDwgMCkgeyAgLyogY2hlY2sgdGhhdCBjb25u ZWN0aW9uIGlzIG9wZW4gKi8KLQkgICAgaWYgKCFxdWlldCkgewotCQlpZiAoKCFuZXR3b3JrIAot I2lmZGVmIFROX0NPTVBPUlQKLQkJICAgICAgfHwgaXN0bmNvbXBvcnQoKQotI2VuZGlmIC8qIFRO X0NPTVBPUlQgKi8KLQkJICAgICAgKSAmJiBjYXJyaWVyICE9IENBUl9PRkYpCi0JCSAgICBwcmlu dGYoIj9DYXJyaWVyIGRldGVjdCBmYWlsdXJlIG9uICVzLlxuIiwgdHRuYW1lKTsKLQkJZWxzZQot CQkgICAgcHJpbnRmKCI/Q29ubmVjdGlvbiAlcyAlcyBpcyBub3Qgb3Blbi5cbiIsCi0JCSAgICAg ICBuZXR3b3JrID8gInRvIiA6ICJvbiIsCi0JCSAgICAgICB0dG5hbWUKLQkJICAgICAgICk7Ci0J ICAgIH0KLSAgICAgICAgICAgIGluc3RhdHVzID0gSU5QX0lPOwotICAgICAgICAgICAgcmV0dXJu KDApOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMDEsImRvaW5wdXQgd2FpdGluZyIsIiIs d2FpdGluZyk7Ci0gICAgICAgIHkgPSB0dHZ0KHNwZWVkLGZsb3cpOyAgICAgICAgICAgLyogUHV0 IGxpbmUgaW4gInR0dnQiIG1vZGUgKi8KLSAgICAgICAgaWYgKHkgPCAwKSB7Ci0gICAgICAgICAg ICBwcmludGYoIj9JTlBVVCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0gICAgICAgICAgICBp bnN0YXR1cyA9IElOUF9JTzsKLSAgICAgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAg ICAvKiBXYXRjaCBvdXQgZm9yIGZhaWx1cmUuICovCi0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYg LyogTk9MT0NBTCAqLwotCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgIGlmICggbmV0d29yayAmJiBu ZXR0eXBlID09IE5FVF9TU0ggJiYgc3NoX2NhcyAmJiBzc2hfY21kICYmIAotICAgICAgICAgIShz dHJjbXAoc3NoX2NtZCwia2VybWl0IikgJiYgc3RyY21wKHNzaF9jbWQsInNmdHAiKSkpIHsKLSAg ICAgICAgaWYgKCFxdWlldCkKLQkgIHByaW50ZigiP1NTSCBTdWJzeXN0ZW0gYWN0aXZlOiAlc1xu Iiwgc3NoX2NtZCk7Ci0gICAgICAgIGluc3RhdHVzID0gSU5QX0lLUzsKLSAgICAgICAgcmV0dXJu KDApOwotICAgIH0KLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0KLSAgICBkZWJ1ZyhGMTExLCJk b2lucHV0IG1zWzBdIixtc1swXSx3YWl0aW5nKTsKLQotICAgIGlmICghbXNbMF0gfHwgaXNlbXB0 eXN0cmluZyhtc1swXSkpIHsgLyogTm8gc2VhcmNoIHN0cmluZyB3YXMgZ2l2ZW4gbm9yICovCi0J aWYgKGNvdW50IDwgMikJCQkgIC8qIGEgL0NPVU5UOiBzd2l0Y2ggc28gd2UganVzdCAqLwotCSAg YW55Y2hhciA9IDE7CQkJICAvKiB3YWl0IGZvciB0aGUgZmlyc3QgY2hhcmFjdGVyICovCi0gICAg fQotICAgIGlmIChub21hdGNoKSBhbnljaGFyID0gMDsJCS8qIERvbid0IG1hdGNoIGFueXRoaW5n ICovCi0KLSAgICBpZiAoIWFueWNoYXIgJiYgd2FpdGluZyA9PSAwICYmIHRpbW8gPT0gMCkKLSAg ICAgIHJldHVybigwKTsKLQotI2lmbmRlZiBOT0RFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAg ICAgICBjaGFyIHhidWZbMjRdOwotICAgICAgICBkZWJ1ZyhGMTAxLCJkb2lucHV0IGFueWNoYXIi LCIiLGFueWNoYXIpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJkb2lucHV0IHRpbW8iLCIiLHRpbW8p OwotICAgICAgICBkZWJ1ZyhGMTAxLCJkb2lucHV0IGVjaG8iLCIiLGluZWNobyk7Ci0jaWZkZWYg Q0tfQlVSU1QKLSAgICAgICAgZGVidWcoRjEwMSwiZG9pbnB1dCBidXJzdCIsIiIsYnVyc3QpOwot I2VuZGlmCS8qIENLX0JVUlNUICovCi0gICAgICAgIHkgPSAtMTsKLSAgICAgICAgd2hpbGUgKG1z WysreV0pIHsKLSAgICAgICAgICAgIHNwcmludGYoeGJ1ZiwiZG9pbnB1dCBzdHJpbmcgJTJkIix5 KTsgLyogU0FGRSAoMjQpICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLHhidWYsbXNbeV0sbXBb eV0pOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE5PREVCVUcgKi8KLQotI2lmZGVmIElL U19PUFRJT04KLSAgICBpZiAoaXNfdG4pIHsKLSAgICAgICAgLyogSWYgdGhlIHJlbW90ZSBzaWRl IGlzIGluIGEgc3RhdGUgb2YgSUtTIFNUQVJULVNFUlZFUiAgICAqLwotICAgICAgICAvKiB3ZSBy ZXF1ZXN0IHRoYXQgdGhlIHN0YXRlIGJlIGNoYW5nZWQuICBXZSB3aWxsIGRldGVjdCAgICovCi0g ICAgICAgIC8qIGEgZmFpbHVyZSB0byBhZGhlcmUgdG8gdGhlIHJlcXVlc3Qgd2hlbiB3ZSBjYWxs IHR0aW5jKCkgKi8KLSAgICAgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpICYmCi0gICAg ICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQpCi0gICAgICAg ICAgaWtzX3dhaXQoS0VSTUlUX1JFUV9TVE9QLDApOyAgLyogU2VuZCBSZXF1ZXN0LVN0b3AgKi8K LSNpZmRlZiBDS19BVVRPREwKLSAgICAgICAgLyogSWYgd2UgYXJlIHByb2Nlc3NpbmcgcGFja2V0 cyBkdXJpbmcgSU5QVVQgYW5kIHdlIGhhdmUgbm90ICovCi0gICAgICAgIC8qIHNlbnQgYSBTVEFS VCBtZXNzYWdlLCBkbyBzbyBub3cuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAg ICBpZiAoaW5hdXRvZGwgJiYgVEVMT1BUX01FKFRFTE9QVF9LRVJNSVQpICYmCi0JCQkhVEVMT1BU X1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkgewotICAgICAgICAgICAgdG5fc2lr cyhLRVJNSVRfU1RBUlQpOyAgICAgIC8qIFNlbmQgS2VybWl0LVNlcnZlciBTdGFydCAqLwotICAg ICAgICB9Ci0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0gICAgfQotI2VuZGlmIC8qIElLU19PUFRJ T04gKi8KLSAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4g Y29kZSwgYXNzdW1lIGZhaWx1cmUgKi8KLSAgICBpbnN0YXR1cyA9IElOUF9UTzsgICAgICAgICAg ICAgICAgICAvKiBTdGF0dXMsIGFzc3VtZSB0aW1lb3V0ICovCi0KLSAgICBmb3IgKHkgPSAwOyB5 IDwgTUlOUE1BWDsgeSsrKQkvKiBJbml0aWFsaXplLi4uICovCi0gICAgICBtaVt5XSA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogIC4uc3RyaW5nIHBhdHRlcm4gbWF0Y2ggcG9zaXRpb24g Ki8KLQotICAgIGlmICghaW5wY2FzW2NtZGx2bF0pIHsgICAgICAgICAgICAgIC8qIElOUFVUIENB U0UgPSBJR05PUkU/ICAqLwotICAgICAgICB5ID0gLTE7Ci0gICAgICAgIHdoaWxlICgoeHAgPSBt c1srK3ldKSkgewkvKiBDb252ZXJ0IGVhY2ggdGFyZ2V0IHRvIGxvd2VyY2FzZSAqLwotICAgICAg ICAgICAgd2hpbGUgKCp4cCkgewotICAgICAgICAgICAgICAgIGlmIChpc3VwcGVyKCp4cCkpICp4 cCA9IChjaGFyKSB0b2xvd2VyKCp4cCk7Ci0gICAgICAgICAgICAgICAgeHArKzsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBydGltZXIoKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBSZXNldCB0aW1lci4gKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgcmZ0aW1lcigp OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxvYXRpbmctcG9pbnQgdGltZXIgdG9vLiAq LwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICBpbmV0aW1lID0gLTFMOyAgICAgICAgICAgICAg ICAgICAgICAvKiBJbml0aWFsaXplIGVsYXBzZWQgdGltZS4gKi8KLSAgICB0ID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUaW1lIG5vdyBpcyAwLiAqLwotICAgIG1fZm91bmQg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgdG8gdGltZWQtb3V0ICovCi0g ICAgaW5jb3VudCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIGNvdW50 ZXIgKi8KLSAgICBydCA9ICh0aW1vID09IDApID8gMCA6IDE7ICAgICAgICAgICAvKiBDaGFyYWN0 ZXItcmVhZCB0aW1lb3V0IGludGVydmFsICovCi0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9T MgotICAgIHRlcm1faW9fc2F2ZSA9IHRlcm1faW87ICAgICAgICAgICAgIC8qIERpc2FibGUgSS9P IGJ5IGVtdWxhdG9yICovCi0gICAgdGVybV9pbyA9IDA7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5k aWYgLyogTk9MT0NBTCAqLwotCi0gICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ2hhcmFjdGVyLWdldHRpbmcgbG9vcCAqLwotI2lmZGVmIENLX0FQQwotICAgICAgICAv KiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW4gQXV0b2Rvd24gb3Igb3RoZXIgQVBDIGNvbW1h bmQgKi8KLSAgICAgICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwgfHwKLSAgICAgICAgICAg IChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSAmJiBhcGNzdGF0dXMgIT0gQVBDX09GRikpIHsKLSAg ICAgICAgICAgIGlmIChtbG9vayhtYWN0YWIsIl9hcGNfY29tbWFuZHMiLG5tYWMpID09IC0xKSB7 Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZG9pbnB1dCBhYm91dCB0byBleGVjdXRlIEFQ QyIsYXBjYnVmLDApOwotICAgICAgICAgICAgICAgIGRvbWFjKCJfYXBjX2NvbW1hbmRzIixhcGNi dWYsY21kc3RrW2NtZGx2bF0uY2NmbGdzfENGX0FQQyk7Ci0gICAgICAgICAgICAgICAgZGVsbWFj KCJfYXBjX2NvbW1hbmRzIiwxKTsKLSAgICAgICAgICAgICAgICBhcGNhY3RpdmUgPSBBUENfSU5B Q1RJVkU7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgZGVidWcoRjEwMCwiZG9pbnB1dCBBUEMgaW4gcHJvZ3Jlc3MiLCIiLDApOwotI2VuZGlmIC8q IERFQlVHICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19BUEMgKi8K LQotICAgICAgICBpZiAodGltbyA9PSAwICYmIHdhaXRpbmcgPCAxKSB7IC8qIFNwZWNpYWwgZXhp dCBjcml0ZXJpb24gKi8KLSAgICAgICAgICAgIGluc3RhdHVzID0gSU5QX1RPOyAgICAgICAgICAv KiBmb3IgdGltZW91dCA9PSAwICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg ICAgICBpZiAobG9jYWwpIHsgICAgICAgICAgICAgICAgICAgIC8qIE9uZSBjYXNlIGZvciBsb2Nh bCAqLwotICAgICAgICAgICAgeSA9IHR0aW5jKHJ0KTsgICAgICAgICAgICAgIC8qIEdldCBjaGFy YWN0ZXIgZnJvbSBjb21tIGRldmljZSAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9pbnB1 dCB0dGluYyhydCkgcmV0dXJucyIsIiIseSk7Ci0gICAgICAgICAgICBpZiAoeSA8IC0xKSB7ICAg ICAgICAgICAgICAgLyogQ29ubmVjdGlvbiBmYWlsZWQuICovCi0gICAgICAgICAgICAgICAgaW5z dGF0dXMgPSBJTlBfSU87ICAgICAgLyogU3RhdHVzID0gaS9vIGVycm9yICovCi0jaWZuZGVmIE5P TE9DQUwKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICB0ZXJtX2lvID0gdGVybV9pb19zYXZl OwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICAgICAgICAgICAg ICBzd2l0Y2ggKHkpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgLTI6ICAgICAgICAgICAgICAv KiBDb25uZWN0aW9uIGxvc3QgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsICYmICFu ZXR3b3JrICYmIGNhcnJpZXIgIT0gQ0FSX09GRikgewotICAgICAgICAgICAgICAgICAgICAgICAg ZG9sb2dlbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ29ubmVjdGlvbiBj bG9zZWQuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR0Y2xvcygxKTsKLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgIGNhc2UgLTM6Ci0gICAgICAgICAgICAgICAgICAgIGRvbG9nZW5kKCk7Ci0gICAgICAgICAg ICAgICAgICAgIHByaW50ZigiU2Vzc2lvbiBMaW1pdCBleGNlZWRlZCAtIGNsb3NpbmcgY29ubmVj dGlvbi5cbiIpOwotICAgICAgICAgICAgICAgICAgICB0dGNsb3MoMSk7Ci0gICAgICAgICAgICAg ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZG9pbnB1dCBDb25uZWN0aW9uIGZhaWxl ZCIsInJldHVybmluZyAwIix5KTsKLSAgICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5pbnRyKSB7Ci0gICAgICAgICAgICAgICAgZGVidWco RjExMSwiZG9pbnB1dCIsImluaW50ciIsaW5pbnRyKTsKLSAgICAgICAgICAgICAgICBpZiAoKGlj biA9IGNvbmNoaygpKSA+IDApIHsgLyogSW50ZXJydXB0ZWQgZnJvbSBrZXlib2FyZD8gKi8KLSAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiaW5wdXQgaW50ZXJydXB0ZWQgZnJvbSBrZXli b2FyZCIsIiIsaWNuKTsKLSAgICAgICAgICAgICAgICAgICAga2JjaGFyID0gY29uaW5jKDApOwot ICAgICAgICAgICAgICAgICAgICBpZiAoa2JjaGFyID49IDApIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHdoaWxlICgtLWljbiA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJkb2lucHV0IiwiYWJzb3JiaW5nIiwwKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25pbmMoMCk7ICAgICAgLyogWWVzLCBhYnNvcmIgd2hhdCB3YXMgdHlwZWQuICov Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnN0 YXR1cyA9IElOUF9VSTsgIC8qIEZhaWwgYW5kIHJlbWVtYmVyIHdoeS4gKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEFub3RoZXIgZm9yIHJlbW90ZSAqLwotICAgICAgICAgICAgeSA9IGNvbmluYyhydCk7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2lucHV0IGNvbmluYyhydCkgcmV0dXJucyIsIiIs eSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHkgPiAtMSkgeyAgICAgICAgICAgICAgICAgICAv KiBBIGNoYXJhY3RlciBhcnJpdmVkICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2lucHV0 IiwiYSBjaGFyYWN0ZXIgYXJyaXZlZCIseSk7Ci0gICAgICAgICAgICBpZiAodGltbyA9PSAwKQot ICAgICAgICAgICAgICB3YWl0aW5nLS07Ci0jaWZuZGVmIE9TMgotI2RlZmluZSBUTl9OT0xPCi0j ZW5kaWYgLyogT1MyICovCi0jaWZkZWYgTk9MT0NBTAotI2RlZmluZSBUTl9OT0xPCi0jZW5kaWYg LyogTk9MT0NBTCAqLwotCi0jaWZkZWYgVE5fTk9MTwotICAgICAgICAgICAgZGVidWcoRjEwMCwi ZG9pbnB1dCBUTl9OT0xPIiwiIiwwKTsKLSNpZmRlZiBUTkNPREUKLSAgICAgICAgICAgIC8qIENo ZWNrIGZvciB0ZWxuZXQgcHJvdG9jb2wgbmVnb3RpYXRpb24gKi8KLSAgICAgICAgICAgIGlmIChp c190bikgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoeSAmIDB4ZmYpIHsKLSAgICAgICAgICAg ICAgICAgIGNhc2UgSUFDOgotICAgICAgICAgICAgICAgICAgICBjciA9IDA7Ci0gICAgICAgICAg ICAgICAgICAgIG15ZmxzaCgpOyAgIC8qIEJyZWFrIGZyb20gaW5wdXQgYnVyc3QgZm9yIHRuX2Rv b3AoKSAqLwotI2lmZGVmIENLX0JVUlNUCi0gICAgICAgICAgICAgICAgICAgIGJ1cnN0ID0gMDsK LSNlbmRpZiAvKiBDS19CVVJTVCAqLwotICAgICAgICAgICAgICAgICAgICB3YWl0aW5nIC09IDI7 ICAgICAgIC8qIChub3QgbmVjZXNzYXJpbHkuLi4pICovCi0gICAgICAgICAgICAgICAgICAgIHN3 aXRjaCAodG5fZG9vcCgoQ0hBUikoeSAmIDB4ZmYpLGR1cGxleCx0dGluYykpIHsKLSAgICAgICAg ICAgICAgICAgICAgICBjYXNlIDI6IGR1cGxleCA9IDA7IGNvbnRpbnVlOwotICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgMTogZHVwbGV4ID0gMTsgY29udGludWU7Ci0jaWZkZWYgSUtTX09QVElP TgotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICAgICAgICAg IGlmIChURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQgJiYKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIXRjcF9pbmNvbWluZykgewotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGluc3RhdHVzID0gSU5QX0lLUzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoCi0gIiBJbnRlcm5ldCBLZXJtaXQgU2VydmljZSBpbiBTRVJWRVIgbW9kZS5cbiBQ bGVhc2UgdXNlIFJFTU9URSBjb21tYW5kcy5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotI2Vu ZGlmIC8qIElLU19PUFRJT04gKi8KLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6ICAgICAg ICAgICAvKiBURUxORVQgRE8gTE9HT1VUIHJlY2VpdmVkICovCi0JCQljb250aW51ZTsKLQkJICAg ICAgY2FzZSA3OgotCQkgICAgICBjYXNlIDM6CQkvKiBBIHF1b3RlZCBJQUMgKi8KLQkJCWJyZWFr OwotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0JCQljb250aW51ZTsKLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgY2FzZSBDUjoKLSAgICAgICAgICAgICAg ICAgICAgY3IgPSAxOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgIGNhc2UgTlVMOgotICAgICAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9C SU5BUlkpICYmIGNyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjciA9IDA7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICBjciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgY3IgPSAwOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBJJ20gZWNob2luZyByZW1vdGUgY2hhcnMg Ki8KLSAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FQ0hPKSAmJiB0bl9yZW1f ZWNobykKLSAgICAgICAgICAgICAgICAgIHR0b2MoKGNoYXIpeSk7Ci0gICAgICAgICAgICB9Ci0j ZW5kaWYgLyogVE5DT0RFICovCi0jaWZkZWYgQ0tfQVVUT0RMCi0gICAgICAgICAgICAvKiBDaGVj ayBmb3IgZmlsZSB0cmFuc2ZlciBwYWNrZXRzICovCi0gICAgICAgICAgICBpZiAoaW5hdXRvZGwp IGF1dG9kb3duKHkpOwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotI2Vsc2UgIC8qIFROX05PTE8g Ki8KLSAgICAgICAgICAgIGRlYnVnKEYxMDAsImRvaW5wdXQgIVROX05PTE8iLCIiLDApOwotI2lm ZGVmIFROQ09ERQotICAgICAgICAgICAgLyogQ2hlY2sgZm9yIHRlbG5ldCBwcm90b2NvbCBuZWdv dGlhdGlvbiAqLwotICAgICAgICAgICAgaWYgKGlzX3RuKSB7Ci0gICAgICAgICAgICAgICAgaW50 IHR4OwotICAgICAgICAgICAgICAgIHN3aXRjaCAoeSAmIDB4ZmYpIHsKLSAgICAgICAgICAgICAg ICAgIGNhc2UgSUFDOgotICAgICAgICAgICAgICAgICAgICBteWZsc2goKTsgICAvKiBCcmVhayBm cm9tIGlucHV0IGJ1cnN0IGZvciB0bl9kb29wKCkgKi8KLSNpZmRlZiBDS19CVVJTVAotICAgICAg ICAgICAgICAgICAgICBidXJzdCA9IDA7Ci0jZW5kaWYgLyogQ0tfQlVSU1QgKi8KLSNpZmRlZiBJ S1NfT1BUSU9OCi0gICAgICAgICAgICAgICAgICAgIHR4ID0gc2NyaXB0d3J0YnVmKChVU0hPUlQp eSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0eCA9PSA0KSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkgJiYgCi0JCQkgICAgVEVMT1BUX1NC KFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ICYmCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIXRjcF9pbmNvbWluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgewotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhdHVzID0gSU5QX0lLUzsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoCi0gICIgSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgaW4g U0VSVkVSIG1vZGUuXG4gUGxlYXNlIHVzZSBSRU1PVEUgY29tbWFuZHMuXG4iCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAodHggPT0gNikgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogVEVMTkVUIERP IExPR09VVCByZWNlaXZlZCAqLwotCi0gICAgICAgICAgICAgICAgICAgIH0KLSNlbHNlIC8qIElL U19PUFRJT04gKi8KLSAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxlcyBUZWxuZXQgbmVnb3Rp YXRpb25zICovCi0gICAgICAgICAgICAgICAgICAgIHR4ID0gc2NyaXB0d3J0YnVmKChVU0hPUlQp eSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0eCA9PSA2KSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAvKiBURUxORVQgRE8gTE9HT1VUIHJlY2VpdmVkICovCi0gICAgICAgICAgICAgICAg ICAgIH0KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0gICAgICAgICAgICAgICAgICAgIHdhaXRp bmcgLT0gMjsgICAgICAgLyogKG5vdCBuZWNlc3NhcmlseS4uLikgKi8KLSAgICAgICAgICAgICAg ICAgICAgY3IgPSAwOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgIC8q IGFuZCBhdXRvZG93bmxvYWQgY2hlY2sgKi8KLSAgICAgICAgICAgICAgICAgIGNhc2UgQ1I6Ci0g ICAgICAgICAgICAgICAgICAgIGNyID0gMTsKLSAgICAgICAgICAgICAgICAgICAgdHggPSBzY3Jp cHR3cnRidWYoKFVTSE9SVCl5KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHR4ID09IDYpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRFTE5FVCBETyBMT0dPVVQgcmVjZWl2ZWQgKi8K LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICAgIGNhc2UgTlVMOgotICAgICAgICAgICAgICAgICAgICBjciA9IDA7Ci0gICAg ICAgICAgICAgICAgICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkgJiYgY3IpCi0gICAg ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHR4ID0gc2Ny aXB0d3J0YnVmKChVU0hPUlQpeSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0eCA9PSA2KSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBURUxORVQgRE8gTE9HT1VUIHJlY2VpdmVkICov Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBjciA9IDA7Ci0gICAg ICAgICAgICAgICAgICAgIHR4ID0gc2NyaXB0d3J0YnVmKChVU0hPUlQpeSk7Ci0gICAgICAgICAg ICAgICAgICAgIGlmICh0eCA9PSA2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBURUxO RVQgRE8gTE9HT1VUIHJlY2VpdmVkICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogSSdtIGVjaG9pbmcgcmVtb3RlIGNoYXJzICov Ci0gICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfRUNITykgJiYgdG5fcmVtX2Vj aG8pCi0gICAgICAgICAgICAgICAgICB0dG9jKChDSEFSKXkpOwotICAgICAgICAgICAgfSBlbHNl Ci0jZW5kaWYgLyogVE5DT0RFICovCi0gICAgICAgICAgICAgIC8qIEhhbmRsZXMgdGVybWluYWwg ZW11bGF0aW9uIHJlc3BvbnNlcyAqLwotICAgICAgICAgICAgICBzY3JpcHR3cnRidWYoKFVTSE9S VCl5KTsKLSNlbmRpZiAvKiBUTl9OT0xPICovCi0KLSAgICAgICAgICAgIC8qIFJlYWwgaW5wdXQg Y2hhcmFjdGVyIHRvIGJlIGNoZWNrZWQgKi8KLQotI2lmZGVmIENLX0JVUlNUCi0gICAgICAgICAg ICBidXJzdC0tOyAgICAgICAgICAgICAgICAgICAgLyogT25lIGxlc3MgY2hhcmFjdGVyIHdhaXRp bmcgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvaW5wdXQgYnVyc3QiLCIiLGJ1cnN0KTsK LSNlbmRpZiAvKiBDS19CVVJTVCAqLwotICAgICAgICAgICAgYyA9IChDSEFSKSAoaW1hc2sgJiAo Q0hBUikgeSk7IC8qIE1hc2sgb2ZmIGFueSBwYXJpdHkgKi8KLSAgICAgICAgICAgIGluY2hhclsw XSA9IGM7ICAgICAgICAgICAgICAvKiBSZW1lbWJlciBjaGFyYWN0ZXIgZm9yIFx2KGluY2hhcikg Ki8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgQ0tfQlVSU1QKLSAgICAgICAgICAgIC8qIFVwZGF0 ZSAibGFzdGNoYXIiIHRpbWUgb25seSBvbmNlIGR1cmluZyBpbnB1dCBidXJzdCAqLwotICAgICAg ICAgICAgaWYgKGJ1cnN0IDw9IDApCi0jZW5kaWYgLyogQ0tfQlVSU1QgKi8KLSNlbmRpZiAvKiBD T01NRU5UICovCi0gICAgICAgICAgICAgIGxhc3RjaGFyID0gZ3RpbWVyKCk7ICAgICAgLyogUmVt ZW1iZXIgd2hlbiBpdCBjYW1lICovCi0KLSAgICAgICAgICAgIGlmIChjID09ICdcMCcpIHsgICAg ICAgICAgICAvKiBOVUwsIHdlIGNhbid0IHVzZSBpdCAqLwotICAgICAgICAgICAgICAgIGlmIChh bnljaGFyKSB7ICAgICAgICAgIC8qIEV4Y2VwdCBpZiBhbnkgY2hhcmFjdGVyIHdpbGwgZG8/ICov Ci0gICAgICAgICAgICAgICAgICAgIHggPSAxOyAgICAgICAgICAgICAgLyogWWVzLCBkb25lLiAq LwotCQkgICAgaW5zdGF0dXMgPSBJTlBfT0s7Ci0gICAgICAgICAgICAgICAgICAgIGluY291bnQg PSAxOyAgICAgICAgLyogVGhpcyBtdXN0IGJlIHRoZSBmaXJzdCBhbmQgb25seS4gKi8KLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGdvdG8gcmVmaWxs OwkvKiBPdGhlcndpc2UgY29udGludWUgSU5QVVR0aW5nICovCi0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICAqaW5wYnArKyA9IGM7ICAgICAgICAgICAgICAgLyogU3RvcmUgY2hhciBpbiBjaXJj dWxhciBidWZmZXIgKi8KLSAgICAgICAgICAgIGluY291bnQrKzsgICAgICAgICAgICAgICAgICAv KiBDb3VudCBpdCBmb3IgXHYoaW5jb3VudCkgKi8KLQotCSAgICBpZiAoZmxhZ3MgJiBJTlBTV19D T1UpIHsJLyogSU5QVVQgL0NPVU5UICovCi0JCWlmICgtLWNvdW50IDwgMSkgewotCQkgICAgeCA9 IDE7Ci0JCSAgICBpbnN0YXR1cyA9IElOUF9PSzsKLSAgICAgICAgICAgICAgICAgICAgaW5jb3Vu dCA9IHNhdmVjb3VudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCX0KLQkgICAgfQot ICAgICAgICAgICAgaWYgKG1hdGNoYnVmKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5k ZXggPCBNQVRDSEJVRlNJWikgewotICAgICAgICAgICAgICAgICAgICBtYXRjaGJ1ZlttYXRjaGlu ZGV4KytdID0gYzsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hidWZbbWF0Y2hpbmRleF0gPSBO VUw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2lmZGVmIE1BQwotICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyICp0dGVybXc7ICAgIC8qIGZha2Ug cG9pbnRlciBjYXN0ICovCi0gICAgICAgICAgICAgICAgaWYgKGluZWNobykgewotICAgICAgICAg ICAgICAgICAgICBvdXRjaGFyKHR0ZXJtdywgYyk7IC8qIGVjaG8gdG8gdGVybWluYWwgd2luZG93 ICovCi0gICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgbWlnaHQgYmUgdG9vIG11Y2ggb3Zlcmhl YWQgdG8gZG8gaGVyZSA/ICovCi0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWNvbW1hbmQodHRl cm13KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZWxzZSAvKiBOb3QgTUFD ICovCi0gICAgICAgICAgICBpZiAoaW5lY2hvKSB7ICAgICAgICAgICAgICAgLyogQnVmZmVyIGNv bnNvbGUgb3V0cHV0ICovCi0gICAgICAgICAgICAgICAgY29uYnVmW2NvbmNudCsrXSA9IGM7Ci0g ICAgICAgICAgICB9Ci0jZW5kaWYgLyogTUFDICovCi0jaWZuZGVmIE9TMgotICAgICAgICAgICAg aWYgKHNlc2xvZykgewotCQlpbnQgZHVtbXkgPSAwLCBza2lwID0gMDsKLSNpZm5kZWYgTk9MT0NB TAotCQlpZiAobm9lc2NzZXEpIHsKLQkJICAgIGR1bW15ID0gY2hrYWVzKGMsMCk7Ci0JCSAgICBp ZiAoaW5lc2NbMF0gIT0gRVNfTk9STUFMIHx8IG9sZGVzY1swXSAhPSBFU19OT1JNQUwpCi0JCSAg ICAgIHNraXAgPSAxOwotCQl9Ci0jZW5kaWYJLyogTk9MT0NBTCAqLwotI2lmZGVmIFVOSVhPUk9T SwotCQlpZiAoc2Vzc2Z0ID09IFhZRlRfVCkgewotI2lmZGVmIFVOSVgKLQkJICAgIGlmIChjID09 ICdccicpCi0jZWxzZQotI2lmZGVmIE9TSwotCQkgICAgaWYgKGMgPT0gJ1wwMTInKQotI2VuZGlm IC8qIE9TSyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQkJICAgICAgc2tpcCA9IDE7Ci0JCX0KLSNl bmRpZgkvKiBVTklYT1JPU0sgKi8KLQkJaWYgKCFza2lwKQotICAgICAgICAgICAgICAgICAgc2Vz YnVmW3Nlc2NudCsrXSA9IGM7IC8qIEJ1ZmZlciBzZXNzaW9uIGxvZyBvdXRwdXQgKi8KLSAgICAg ICAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIGlmIChhbnljaGFyKSB7ICAg ICAgICAgICAgICAvKiBBbnkgY2hhcmFjdGVyIHdpbGwgZG8/ICovCi0gICAgICAgICAgICAgICAg eCA9IDE7Ci0JCWluc3RhdHVzID0gSU5QX09LOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFpbnBjYXNbY21kbHZsXSkgeyAgICAgIC8qIEln bm9yZSBhbHBoYWJldGljIGNhc2U/ICovCi0gICAgICAgICAgICAgICAgaWYgKGlzdXBwZXIoYykp ICAgICAgICAgLyogWWVzLCBjb252ZXJ0IGlucHV0IGNoYXIgdG8gbG93ZXIgKi8KLSAgICAgICAg ICAgICAgICAgIGMgPSAoQ0hBUikgdG9sb3dlcihjKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGRlYnVnKEYwMDAsImRvaW5wdXQgY2hhciIsIiIsYyk7Ci0KLSAgICAgICAgICAgIC8qIEhl cmUgaXMgdGhlIG1hdGNoaW5nIHNlY3Rpb24gKi8KLQotICAgICAgICAgICAgeSA9IC0xOyAgICAg ICAgICAgICAgICAgICAgIC8qIExvb3AgdGhydSBzZWFyY2ggc3RyaW5ncyAqLwotICAgICAgICAg ICAgd2hpbGUgKCFub21hdGNoICYmIChzID0gbXNbKyt5XSkpIHsJLyogLi4uYXMgbWFueSBhcyB3 ZSBoYXZlLiAqLwotICAgICAgICAgICAgICAgIGlmIChtcFt5XSkgeyAgICAgICAgICAgIC8qIFBh dHRlcm4gbWF0Y2g/ICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgICAgICBpbnQg ajsKLSAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBpcyBncm9zcyBidXQgaXQgd29ya3MuLi4g Ki8KLSAgICAgICAgICAgICAgICAgICAgLyogV2UgY291bGQganVzdCBhcyBlYXNpbHkgaGF2ZSBw cmVwZW5kZWQgJyonIHRvIHRoZSAgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogcGF0dGVybiBh bmQgc2tpcHBlZCB0aGUgbG9vcCwgZXhjZXB0IHRoZW4gd2Ugd291bGQgKi8KLSAgICAgICAgICAg ICAgICAgICAgLyogbm90IGhhdmUgYW55IHdheSB0byBpZGVudGlmeSB0aGUgbWF0Y2hpbmcgc3Ry aW5nLiAgKi8KLSAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG1hdGNoaW5kZXg7 IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNrbWF0Y2gocywmbWF0Y2hidWZb al0sMSwxKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5kZXggPSBqOwot CQkJICAgIGluc3RhdHVzID0gSU5QX09LOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgg PSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlm ICh4ID4gMCkKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNlbHNlCi0gICAgICAgICAg ICAgICAgICAgIC8qIEp1bHkgMjAwMSAtIGNrbWF0Y2goKSByZXR1cm5zIG1hdGNoIHBvc2l0aW9u LiAqLwotICAgICAgICAgICAgICAgICAgICAvKiBJdCB3b3JrcyBhbmQgaXQncyBub3QgZ3Jvc3Mu ICovCi0JCSAgICAvKiAoNCA9IGZsb2F0aW5nIHBhdHRlcm4pICovCi0gICAgICAgICAgICAgICAg ICAgIHggPSBja21hdGNoKHMsbWF0Y2hidWYsaW5wY2FzW2NtZGx2bF0sMSs0KTsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKHggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGlu ZGV4ID0geCAtIDE7Ci0JCQlpbnN0YXR1cyA9IElOUF9PSzsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHggPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIExpdGVyYWwg bWF0Y2guICovCi0gICAgICAgICAgICAgICAgaSA9IG1pW3ldOyAgICAgICAgICAgICAgLyogTWF0 Y2gtcG9zaXRpb24gaW4gc2VhcmNoIHN0cmluZy4gKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhG MDAwLCJjb21wYXJlIGNoYXIiLCIiLChDSEFSKXNbaV0pOwotICAgICAgICAgICAgICAgIGlmIChj ID09IChDSEFSKSBzW2ldKSB7IC8qIENoZWNrIGZvciBtYXRjaCAqLwotICAgICAgICAgICAgICAg ICAgICBpKys7ICAgICAgICAgICAgICAgIC8qIEdvdCBvbmUsIGdvIHRvIG5leHQgY2hhcmFjdGVy ICovCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogRG9uJ3QgaGF2 ZSBhIG1hdGNoICovCi0gICAgICAgICAgICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgICAg ICAgICBmb3IgKGogPSBpOyBpID4gMDsgKSB7IC8qIEJhY2sgdXAgaW4gc2VhcmNoIHN0cmluZyAq LwotICAgICAgICAgICAgICAgICAgICAgICAgaS0tOyAvKiAoRG8gdGhpcyBoZXJlIHRvIHByZXZl bnQgY29tcGlsZXIgZm91bHVwKSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgLyogaiBpcyB0 aGUgbGVuZ3RoIG9mIHRoZSBzdWJzdHJpbmcgdGhhdCBtYXRjaGVkICovCi0gICAgICAgICAgICAg ICAgICAgICAgICBpZiAoYyA9PSAoQ0hBUikgc1tpXSkgewotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICghc3RybmNtcChzLCZzW2otaV0saSkpIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaSsrOyAgICAgICAgICAvKiBjIGFjdHVhbGx5IG1hdGNoZXMgLS0gY2ZrICov Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKENIQVIpIHNb aV0gPT0gKENIQVIpICdcMCcpIHsgLyogTWF0Y2hlZCB0byBlbmQ/ICovCi0gICAgICAgICAgICAg ICAgICAgIGNrc3RybmNweShtYXRjaGJ1Zixtc1t5XSxNQVRDSEJVRlNJWik7Ci0gICAgICAgICAg ICAgICAgICAgIG1hdGNoaW5kZXggPSAwOwotCQkgICAgaW5zdGF0dXMgPSBJTlBfT0s7ICAvKiBZ ZXMsICovCi0gICAgICAgICAgICAgICAgICAgIHggPSAxOyAgICAgICAgICAgIAotICAgICAgICAg ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qIGRvbmUuICovCi0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIG1pW3ldID0gaTsgICAgICAgICAgICAgIC8qIE5vLCByZW1l bWJlciBtYXRjaC1wb3NpdGlvbiAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHgg PT0gMSkgeyAgICAgICAgICAgICAgIC8qIFNldCBcdihtaW5wdXQpIHJlc3VsdCAqLwotCQlpbnN0 YXR1cyA9IElOUF9PSzsKLSAgICAgICAgICAgICAgICBtX2ZvdW5kID0geSArIDE7Ci0gICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5wYnAgPj0g aW5wYnVmICsgaW5idWZzaXplKSB7IC8qIFJlYWNoZWQgZW5kIG9mIGJ1ZmZlcj8gKi8KLQkJaWYg KG5vd3JhcCkgewkJLyogSWYgL05PV1JBUC4uLiovCi0JCSAgICBpbnN0YXR1cyA9IElOUF9CRjsJ LyogLi4ucmV0dXJuIGluZGljYXRpbmcgYnVmZmVyIGZ1bGwuICovCi0JCSAgICAqaW5wYnAgPSBO VUw7Ci0JCSAgICBnb3RvIHhpbnB1dDsKLQkJfQotICAgICAgICAgICAgICAgICppbnBicCA9IE5V TDsgICAgICAgICAgIC8qIE1ha2UgaXQgbnVsbC10ZXJtaW5hdGVkICovCi0gICAgICAgICAgICAg ICAgaW5wYnAgPSBpbnBidWY7ICAgICAgICAgLyogWWVzLiAqLwotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0jaWZkZWYgQ0tfQlVSU1QKLSAgICAgICAgZWxzZSBpZiAoeSA8PSAtMSAmJiBidXJz dCA+IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvaW5wdXQgKHk8PS0xJiZidXJzdD4w KSIsImJ1cnN0IixidXJzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQSB0aW1lb3V0IG9jY3VycmVkIHNvIHRoZXJlIGNhbid0ICovCi0gICAgICAgICAgICBi dXJzdCA9IDA7ICAgICAgICAgICAgICAgICAgLyogYmUgZGF0YSB3YWl0aW5nOyBtdXN0IGNoZWNr IHRpbW8gKi8KLSAgICAgICAgfQotICAgICAgcmVmaWxsOgotICAgICAgICBpZiAoYnVyc3QgPD0g MCkgeyAgICAgICAgICAgICAgIC8qIE5vIGJ1ZmZlcmVkIGNoYXJzIHJlbWFpbmluZy4uLiAqLwot ICAgICAgICAgICAgbXlmbHNoKCk7ICAgICAgICAgICAgICAgICAgIC8qIEZsdXNoIGJ1ZmZlcmVk IG91dHB1dCAqLwotICAgICAgICAgICAgaWYgKGxvY2FsKSB7ICAgICAgICAgICAgICAgIC8qIEdl dCBzaXplIG9mIG5leHQgaW5wdXQgYnVyc3QgKi8KLSAgICAgICAgICAgICAgICBidXJzdCA9IHR0 Y2hrKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1cnN0IDwgMCkgeyAgICAgICAgLyogdHRjaGso KSBzYXlzIGNvbm5lY3Rpb24gaXMgY2xvc2VkICovCi0gICAgICAgICAgICAgICAgICAgIGluc3Rh dHVzID0gSU5QX0lPOyAgLyogU3RhdHVzID0gaS9vIGVycm9yICovCi0jaWZuZGVmIE5PTE9DQUwK LSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgdGVybV9pbyA9IHRlcm1faW9fc2F2ZTsK LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLQkJICAgIGlmICgoIW5l dHdvcmsgCi0jaWZkZWYgVE5fQ09NUE9SVAotCQkgICAgICAgICB8fCBpc3RuY29tcG9ydCgpCi0j ZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotCQkJICkgJiYgY2FycmllciAhPSBDQVJfT0ZGKSB7Ci0J LyogVGhlIHRlc3QgaXMgd3JpdHRlbiB0aGlzIHdheSBiZWNhdXNlIHRoZSBNaWNyb3NvZnQgY29t cGlsZXIKLQkgKiBpcyBwcm9kdWNpbmcgYmFkIGNvZGUgaWYgd3JpdHRlbjoKLQkgKgotCSAqICBp ZiAobmV0d29yayAmJiAoIWlzdG5jb21wb3J0KCkgfHwgY2FycmllciA9PSBDQVJfT0ZGKSApCi0J ICovCi0JCQlicmVhazsKLSAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCQkgcHJpbnRm KCJGYXRhbCBlcnJvciAtIGRpc2Nvbm5lY3RlZC5cbiIpOwotCQkJIHR0Y2xvcygxKTsKLQkJCSBi cmVhazsKLQkJICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChp bmludHIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChpY24gPSBjb25jaGsoKSkgPiAwKSB7 IC8qIEludGVycnVwdCBmcm9tIGtleWJvYXJkPyAqLwotICAgICAgICAgICAgICAgICAgICAgICAg a2JjaGFyID0gY29uaW5jKDApOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwi aW5wdXQgaW50ZXJydXB0ZWQgZnJvbSBrZXlib2FyZCIsIiIsaWNuKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHdoaWxlICgtLWljbiA+IDApIGNvbmluYygwKTsgLyogWWVzLCBhYnNvcmIgY2hh cnMuICovCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogQW5kIGZh aWwuICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJ1cnN0ID0gY29uY2hrKCk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2lucHV0IGJ1cnN0IiwiIixidXJzdCk7 Ci0gICAgICAgICAgICAvKiBQcmV2ZW50IG92ZXJmbG93IG9mICJjb25idWYiIGFuZCAic2VzYnVm IiAqLwotICAgICAgICAgICAgaWYgKGJ1cnN0ID4gTUFYQlVSU1QpCi0gICAgICAgICAgICAgIGJ1 cnN0ID0gTUFYQlVSU1Q7Ci0KLSAgICAgICAgICAgIC8qIERpZCBub3QgbWF0Y2gsIHRpbWVyIGV4 Y2VlZGVkPyAqLwotICAgICAgICAgICAgdCA9IGd0aW1lcigpOwotICAgICAgICAgICAgZGVidWco RjExMSwiZG9pbnB1dCBndGltZXIiLCJidXJzdCIsdCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAx LCJkb2lucHV0IHRpbW8iLCIiLHRpbW8pOwotICAgICAgICAgICAgaWYgKCh0ID49IHRpbW8pICYm ICh0aW1vID4gMCkpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZWxzZSBpZiAo aW5zaWxlbmNlID4gMCAmJiAodCAtIGxhc3RjaGFyKSA+IGluc2lsZW5jZSkKLSAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2lu cHV0IChidXJzdCA+IDApIiwiYnVyc3QiLGJ1cnN0KTsKLSAgICAgICAgfQotI2Vsc2UgIC8qIENL X0JVUlNUICovCi0gICAgICByZWZpbGw6Ci0gICAgICAgIG15ZmxzaCgpOyAgICAgICAgICAgICAg ICAgICAgICAgLyogRmx1c2ggYnVmZmVyZWQgb3V0cHV0ICovCi0gICAgICAgIC8qIERpZCBub3Qg bWF0Y2gsIHRpbWVyIGV4Y2VlZGVkPyAqLwotICAgICAgICB0ID0gZ3RpbWVyKCk7Ci0gICAgICAg IGRlYnVnKEYxMTEsImRvaW5wdXQgZ3RpbWVyIiwibm8gYnVyc3QiLHQpOwotICAgICAgICBkZWJ1 ZyhGMTAxLCJkb2lucHV0IHRpbW8iLCIiLHRpbW8pOwotICAgICAgICBpZiAoKHQgPj0gdGltbykg JiYgKHRpbW8gPiAtMSkpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGVsc2UgaWYgKGluc2ls ZW5jZSA+IDAgJiYgKHQgLSBsYXN0Y2hhcikgPiBpbnNpbGVuY2UpCi0gICAgICAgICAgYnJlYWs7 Ci0jZW5kaWYgLyogQ0tfQlVSU1QgKi8KLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTdGlsbCBoYXZlIHRpbWUgbGVmdCwgY29udGludWUuICovCi0gIHhpbnB1dDoK LSAgICBteWZsc2goKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbHVzaCBidWZmZXJl ZCBvdXRwdXQgKi8KLSAgICBpZiAoaW5zdGF0dXMgPT0gSU5QX0JGKSB7CQkvKiBCdWZmZXIgZnVs bCBhbmQgL05PV0FJVCAqLwotCXggPSAwOwkJCQkvKiBNdXN0IG5vdCBzdWNjZWVkICovCi0gICAg fSBlbHNlIHsJCQkJLyogQnVmZmVyIGZ1bGwgYW5kIC9OT1dBSVQgKi8KLQlpZiAobm9tYXRjaCkg eCA9IDE7CQkvKiBTdWNjZWVkIGlmIG5vbWF0Y2ggYW5kIHRpbWVkIG91dCAqLwotCWlmICh4ID4g MCAmJiAhbm9tYXRjaCkKLQkgIGluc3RhdHVzID0gMDsKLSAgICB9Ci0jaWZuZGVmIE5PTE9DQUwK LSNpZmRlZiBPUzIKLSAgICB0ZXJtX2lvID0gdGVybV9pb19zYXZlOwotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgSUtTX09QVElP TgotI2lmZGVmIENLX0FVVE9ETAotICAgIGlmIChpc190biAmJiBURUxPUFRfTUUoVEVMT1BUX0tF Uk1JVCkgJiYgaW5hdXRvZGwpIHsKLSAgICAgICAgdG5fc2lrcyhLRVJNSVRfU1RPUCk7ICAgICAg ICAgICAvKiBTZW5kIEtlcm1pdC1TZXJ2ZXIgU3RvcCAqLwotICAgIH0KLSNlbmRpZiAvKiBDS19B VVRPREwgKi8KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwot Ci0jaWZkZWYgR0ZUSU1FUgotICAgIGZwdCA9IGdmdGltZXIoKTsgICAgICAgICAgICAgICAgICAg IC8qIEdldCBlbGFwc2VkIHRpbWUgKi8KLQotLyogSWYgYSBsb25nIGlzIDMyIGJpdHMsIGl0IHdv dWxkIHRha2UgYWJvdXQgNTAgZGF5cyBmb3IgdGhpcyB0byBvdmVyZmxvdy4gKi8KLQotICAgIGlu ZXRpbWUgPSAoaW50KShmcHQgKiAoQ0tGTE9BVCkxMDAwLjApOwotI2Vsc2UKLSAgICBpbmV0aW1l ID0gKGludCkoZ3RpbWVyKCkgKiAxMDAwKTsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSAgICBp ZiAoeCA+IDApCi0gICAgICBtYWtlc3RyKCZpbnBtYXRjaCwmbWF0Y2hidWZbbWF0Y2hpbmRleF0p OyAvKiBcdihpbm1hdGNoKSAqLwotICAgIHJldHVybih4KTsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJldHVybiB0aGUgcmV0dXJuIGNvZGUuICovCi19Ci0jZW5kaWYgLyogTk9TUEwgKi8K LQotI2lmbmRlZiBOT1NQTAotLyogUkVJTlBVVCBDb21tYW5kICovCi0KLS8qCi0gIE5vdGUsIHRo ZSB0aW1lb3V0IHBhcmFtZXRlciBpcyByZXF1aXJlZCwgYnV0IGlnbm9yZWQuICBTeW50YXggaXMg Y29tcGF0aWJsZQotICB3aXRoIE1TLURPUyBLZXJtaXQgZXhjZXB0IHRpbWVvdXQgY2FuJ3QgYmUg b21pdHRlZC4gIFRoaXMgZnVuY3Rpb24gb25seQotICBsb29rcyBhdCB0aGUgY2hhcmFjdGVycyBh bHJlYWR5IHJlY2VpdmVkIGFuZCBkb2VzIG5vdCByZWFkIGFueSBuZXcKLSAgY2hhcmFjdGVycyBm cm9tIHRoZSBjb25uZWN0aW9uLgotKi8KLWludAotZG9yZWlucCh0aW1vLHMscGF0KSBpbnQgdGlt bzsgY2hhciAqczsgaW50IHBhdDsgewotICAgIGludCB4LCB5LCBpOwotICAgIGNoYXIgKnh4LCAq eHAsICp4cSA9IChjaGFyICopMDsKLSAgICBDSEFSIGM7Ci0KLSAgICBpZiAoIXMpIHMgPSAiIjsK LSAgICBkZWJ1ZyhGMTAxLCJkb3JlaW5wdXQgcGF0IiwiIixwYXQpOwotCi0gICAgeSA9IChpbnQp c3RybGVuKHMpOwotICAgIGRlYnVnKEYxMTEsImRvcmVpbnB1dCBzZWFyY2giLHMseSk7Ci0KLSAg ICBpZiAoeSA+IGluYnVmc2l6ZSkgeyAgICAgICAgICAgICAgICAvKiBJZiBzZWFyY2ggc3RyaW5n IGxvbmdlciB0aGFuICovCi0gICAgICAgIGRlYnVnKEYxMDEsImRvcmVpbnB1dCBpbmJ1ZnNpemUi LCIiLGluYnVmc2l6ZSk7Ci0gICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAg LyogaW5wdXQgYnVmZmVyLCBmYWlsLiAqLwotICAgIH0KLSAgICBtYWtlc3RyKCZpbnBtYXRjaCxO VUxMKTsKLSAgICBpZiAoIW1hdGNoYnVmKQotICAgICAgbWF0Y2hidWYgPSBtYWxsb2MoTUFUQ0hC VUZTSVorMSk7Ci0gICAgbWF0Y2hpbmRleCA9IDA7Ci0KLSAgICB4ID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gY29kZSwgYXNzdW1lIGZhaWx1cmUgKi8KLSAgICBp ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJpbmcgcGF0dGVybiBtYXRj aCBwb3NpdGlvbiAqLwotCi0gICAgaWYgKCFpbnBjYXNbY21kbHZsXSkgeyAgICAgICAgICAgICAg LyogSU5QVVQgQ0FTRSA9IElHTk9SRT8gICovCi0gICAgICAgIHhwID0gbWFsbG9jKHkrMik7ICAg ICAgICAgICAgICAgLyogTWFrZSBhIHNlcGFyYXRlIGNvcHkgb2YgdGhlICovCi0gICAgICAgIGlm ICgheHApIHsgICAgICAgICAgICAgICAgICAgICAgLyogc2VhcmNoIHN0cmluZy4gKi8KLSAgICAg ICAgICAgIHByaW50ZigiP21hbGxvYyBlcnJvciA2XG4iKTsKLSAgICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgfSBlbHNlIHhxID0geHA7ICAgICAgICAgICAgICAgICAvKiBLZWVwIHBvaW50 ZXIgdG8gYmVnaW5uaW5nLiAqLwotICAgICAgICB3aGlsZSAoKnMpIHsgICAgICAgICAgICAgICAg ICAgIC8qIFllcywgY29udmVydCB0byBsb3dlcmNhc2UgKi8KLSAgICAgICAgICAgICp4cCA9ICpz OwotICAgICAgICAgICAgaWYgKGlzdXBwZXIoKnhwKSkgKnhwID0gKGNoYXIpIHRvbG93ZXIoKnhw KTsKLSAgICAgICAgICAgIHhwKys7IHMrKzsKLSAgICAgICAgfQotICAgICAgICAqeHAgPSBOVUw7 ICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSBpdCEgKi8KLSAgICAgICAgcyA9IHhx OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNb3ZlIHNlYXJjaCBwb2ludGVyIHRvIGl0LiAq LwotICAgIH0KLSAgICB4eCA9ICppbnBicCA/IGlucGJwIDogaW5wYnVmOyAgICAgICAvKiBDdXJy ZW50IElOUFVUIGJ1ZmZlciBwb2ludGVyICovCi0gICAgZG8gewotICAgICAgICBjID0gKnh4Kys7 ICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBuZXh0IGNoYXJhY3RlciAqLwotICAgICAgICBp ZiAoIWMpIGJyZWFrOwotICAgICAgICBpZiAoeHggPj0gaW5wYnVmICsgaW5idWZzaXplKSAgIC8q IFdyYXAgYXJvdW5kIGlmIG5lY2Vzc2FyeSAqLwotICAgICAgICAgIHh4ID0gaW5wYnVmOwotICAg ICAgICBpZiAoIWlucGNhc1tjbWRsdmxdKSB7ICAgICAgICAgIC8qIElnbm9yZSBhbHBoYWJldGlj IGNhc2U/ICovCi0gICAgICAgICAgICBpZiAoaXN1cHBlcihjKSkgYyA9IChDSEFSKSB0b2xvd2Vy KGMpOyAvKiBZZXMgKi8KLSAgICAgICAgfQotICAgICAgICBpZiAocGF0KSB7Ci0gICAgICAgICAg ICBpbnQgajsKLSAgICAgICAgICAgIGlmIChtYXRjaGJ1ZikgewotICAgICAgICAgICAgICAgIGlm IChtYXRjaGluZGV4IDwgTUFUQ0hCVUZTSVopIHsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hi dWZbbWF0Y2hpbmRleCsrXSA9IGM7Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoYnVmW21hdGNo aW5kZXhdID0gTlVMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKGog PSAwOyBqIDwgbWF0Y2hpbmRleDsgaisrKSB7IC8qIEdyb3NzIGJ1dCBlZmZlY3RpdmUgKi8KLSAg ICAgICAgICAgICAgICAgICAgaWYgKGNrbWF0Y2gocywmbWF0Y2hidWZbal0sMSwxKSkgewotICAg ICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiR09UIElUIiwiIixqKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIG1hdGNoaW5kZXggPSBqOwotICAgICAgICAgICAgICAgICAgICAgICAg eCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4 ID4gMCkKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg ICAgfQotICAgICAgICBkZWJ1ZyhGMDAwLCJkb3JlaW5wIGNoYXIiLCIiLGMpOwotICAgICAgICBk ZWJ1ZyhGMDAwLCJjb21wYXJlIGNoYXIiLCIiLChDSEFSKSBzW2ldKTsKLSAgICAgICAgaWYgKCgo Y2hhcikgYykgPT0gKChjaGFyKSBzW2ldKSkgeyAvKiBDaGVjayBmb3IgbWF0Y2ggKi8KLSAgICAg ICAgICAgIGkrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBHb3Qgb25lLCBnbyB0byBuZXh0 IGNoYXJhY3RlciAqLwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8q IERvbid0IGhhdmUgYSBtYXRjaCAqLwotICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICBm b3IgKGogPSBpOyBpID4gMDsgKSB7ICAgICAgLyogW2pyc10gc2VhcmNoIGJhY2t3YXJkcyBmb3Ig aXQgICovCi0gICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgICAgIGlmICgoKGNoYXIp IGMpID09ICgoY2hhcikgc1tpXSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJuY21w KHMsJnNbai1pXSxpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogW2pyc10gb3IgcmV0dXJuIHRvIHplcm8gZnJvbSAtMSAqLwotICAgICAgICBpZiAo c1tpXSA9PSAnXDAnKSB7ICAgICAgICAgICAgIC8qIE1hdGNoZWQgYWxsIHRoZSB3YXkgdG8gZW5k PyAqLwotICAgICAgICAgICAgY2tzdHJuY3B5KG1hdGNoYnVmLHMsTUFUQ0hCVUZTSVopOwotICAg ICAgICAgICAgbWF0Y2hpbmRleCA9IDA7Ci0gICAgICAgICAgICB4ID0gMTsgICAgICAgICAgICAg ICAgICAgICAgLyogWWVzLCAqLwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAg ICAgIC8qIGRvbmUuICovCi0gICAgICAgIH0KLSAgICB9IHdoaWxlICh4eCAhPSBpbnBicCAmJiB4 IDwgMSk7ICAgICAvKiBVbnRpbCBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQuICovCi0KLSAgICBpZiAo IWlucGNhc1tjbWRsdmxdKSBpZiAoeHEpIGZyZWUoeHEpOyAvKiBGcmVlIHRoaXMgaWYgaXQgd2Fz IG1hbGxvYydkLiAqLwotICAgIG1ha2VzdHIoJmlucG1hdGNoLCZtYXRjaGJ1ZlttYXRjaGluZGV4 XSk7IC8qIFx2KGlubWF0Y2gpICovCi0gICAgcmV0dXJuKHgpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUmV0dXJuIHNlYXJjaCByZXN1bHQuICovCi19Ci0KLS8qICBYIFggUyBUIFIgSSBO IEcgIC0tICBJbnRlcnByZXQgc3RyaW5ncyBjb250YWluaW5nIGJhY2tzbGFzaCBlc2NhcGVzICAq LwotLyogIFogWiBTIFQgUiBJIE4gRyAgLS0gIChuZXcgbmFtZS4uLikgICovCi0vKgotIENvcGll cyByZXN1bHQgdG8gbmV3IHN0cmluZy4KLSAgc3RyaXBzIGVuY2xvc2luZyBicmFjZXMgb3IgZG91 YmxlcXVvdGVzLgotICBpbnRlcnByZXRzIGJhY2tzbGFzaCBlc2NhcGVzLgotICByZXR1cm5zIDAg b24gc3VjY2Vzcywgbm9uemVybyBvbiBmYWlsdXJlLgotICB0cmllcyB0byBiZSBjb21wYXRpYmxl IHdpdGggTVMtRE9TIEtlcm1pdC4KLQotIFN5bnRheCBvZiBpbnB1dCBzdHJpbmc6Ci0gIHN0cmlu ZyA9IGNoYXJzIHwgImNoYXJzIiB8IHtjaGFyc30KLSAgY2hhcnMgPSAoYyplKikqCi0gIHdoZXJl IGMgPSBhbnkgcHJpbnRhYmxlIGNoYXJhY3RlciwgYXNjaWkgMzItMTI2Ci0gIGFuZCBlID0gYSBi YWNrc2xhc2ggZXNjYXBlCi0gIGFuZCAqIG1lYW5zIDAgb3IgbW9yZSByZXBldGl0aW9ucyBvZiBw cmVjZWRpbmcgcXVhbnRpdHkKLSAgYmFja3NsYXNoIGVzY2FwZSA9IFxvcGVyYW5kCi0gIG9wZXJh bmQgPSB7bnVtYmVyfSB8IG51bWJlciB8IGZuYW1lKG9wZXJhbmQpIHwgdihuYW1lKSB8ICQobmFt ZSkgfCBtKG5hbWUpCi0gIG51bWJlciA9IFtyXW5bbltuXV1dLCBpLmUuIGFuIG9wdGlvbmFsIHJh ZGl4IGNvZGUgZm9sbG93ZWQgYnkgMS0zIGRpZ2l0cwotICByYWRpeCBjb2RlIGlzIG9PIChvY3Rh bCksIHhYIChoZXgpLCBkRCBvciBub25lIChkZWNpbWFsKSAoc2VlIHh4ZXNjKCkpLgotKi8KLQot I2lmbmRlZiBOT0ZSSUxMUwotaW50Ci15eXN0cmluZyhzLHMyKSBjaGFyICpzOyBjaGFyICoqczI7 IHsgICAgLyogUmV2ZXJzZSBhIHN0cmluZyAqLwotICAgIGludCB4OwotICAgIHN0YXRpYyBjaGFy ICpuZXc7Ci0gICAgbmV3ID0gKnMyOwotICAgIGlmICghcyB8fCAhbmV3KSByZXR1cm4oLTEpOyAg ICAgICAgIC8qIFdhdGNoIG91dCBmb3IgbnVsbCBwb2ludGVycy4gKi8KLSAgICBpZiAoKHggPSAo aW50KXN0cmxlbihzKSkgPT0gMCkgeyAgICAvKiBSZWN1cnNpb24gZG9uZS4gKi8KLSAgICAgICAg Km5ldyA9ICdcMCc7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgeC0tOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlLCBjYWxsIHNlbGYgKi8KLSAgICAq bmV3KysgPSBzW3hdOyAgICAgICAgICAgICAgICAgICAgICAvKiB0byByZXZlcnNlIHJlc3Qgb2Yg c3RyaW5nLiAqLwotICAgIHNbeF0gPSAwOwotICAgIHJldHVybih5eXN0cmluZyhzLCZuZXcpKTsK LX0KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi1zdGF0aWMgY2hhciBpcGFidWZbMTZdID0geyBO VUwgfTsgICAgICAgLyogSVAgYWRkcmVzcyBidWZmZXIgKi8KLQotc3RhdGljIGNoYXIgKgotZ2V0 aXAocykgY2hhciAqczsgewotICAgIGNoYXIgYz1OVUw7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFdvcmtlcnMuLi4gKi8KLSAgICBpbnQgaT0wLCBwPTAsIGQ9MDsKLSAgICBpbnQgc3RhdGUg PSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBTdGF0ZSBvZiAyLXN0YXRlIEZTQSAqLwotCi0g ICAgd2hpbGUgKChjID0gKnMrKykpIHsKLSAgICAgICAgc3dpdGNoKHN0YXRlKSB7Ci0gICAgICAg ICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgICAgLyogRmluZCBmaXJzdCBkaWdpdCAqLwot ICAgICAgICAgICAgaSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZmZXIg aW5kZXggKi8KLSAgICAgICAgICAgIGlwYWJ1ZltpXSA9IE5VTDsgICAgICAgICAgICAvKiBJbml0 aWFsaXplIG91dHB1dCBidWZmZXIgKi8KLSAgICAgICAgICAgIHAgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAvKiBQZXJpb2QgY291bnRlciAqLwotICAgICAgICAgICAgZCA9IDA7ICAgICAgICAg ICAgICAgICAgICAgIC8qIERpZ2l0IGNvdW50ZXIgKi8KLSAgICAgICAgICAgIGlmIChpc2RpZ2l0 KGMpKSB7ICAgICAgICAgICAvKiBIYXZlIGZpcnN0IGRpZ2l0ICovCi0gICAgICAgICAgICAgICAg ZCA9IDE7ICAgICAgICAgICAgICAgICAgLyogQ291bnQgaXQgKi8KLSAgICAgICAgICAgICAgICBp cGFidWZbaSsrXSA9IGM7ICAgICAgICAvKiBDb3B5IGl0ICovCi0gICAgICAgICAgICAgICAgc3Rh dGUgPSAxOyAgICAgICAgICAgICAgLyogQ2hhbmdlIHN0YXRlICovCi0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAg ICAgIC8qIEluIG51bWVyaWMgZmllbGQgKi8KLSAgICAgICAgICAgIGlmIChpc2RpZ2l0KGMpKSB7 ICAgICAgICAgICAvKiBIYXZlIGRpZ2l0ICovCi0gICAgICAgICAgICAgICAgaWYgKCsrZCA+IDMp ICAgICAgICAgICAgLyogVG9vIG1hbnkgKi8KLSAgICAgICAgICAgICAgICAgIHN0YXRlID0gMDsg ICAgICAgICAgICAvKiBTdGFydCBvdmVyICovCi0gICAgICAgICAgICAgICAgZWxzZSAgICAgICAg ICAgICAgICAgICAgLyogTm90IHRvbyBtYW55ICovCi0gICAgICAgICAgICAgICAgICBpcGFidWZb aSsrXSA9IGM7ICAgICAgLyogS2VlcCBpdCAqLwotICAgICAgICAgICAgfSBlbHNlIGlmIChjID09 ICcuJyAmJiBwIDwgMykgeyAvKiBIYXZlIGEgcGVyaW9kICovCi0gICAgICAgICAgICAgICAgcCsr OyAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgaXQgKi8KLSAgICAgICAgICAgICAgICBpZiAo ZCA9PSAwKSAgICAgICAgICAgICAvKiBOb3QgcHJlY2VkZWQgYnkgYSBkaWdpdCAqLwotICAgICAg ICAgICAgICAgICAgc3RhdGUgPSAwOyAgICAgICAgICAgIC8qIFN0YXJ0IG92ZXIgKi8KLSAgICAg ICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAvKiBPSyAqLwotICAgICAgICAgICAg ICAgICAgaXBhYnVmW2krK10gPSBjOyAgICAgIC8qIEtlZXAgaXQgKi8KLSAgICAgICAgICAgICAg ICBkID0gMDsgICAgICAgICAgICAgICAgICAvKiBSZXNldCBkaWdpdCBjb3VudGVyICovCi0gICAg ICAgICAgICB9IGVsc2UgaWYgKHAgPT0gMyAmJiBkID4gMCkgeyAvKiBOb3QgcGFydCBvZiBhZGRy ZXNzICovCi0gICAgICAgICAgICAgICAgaXBhYnVmW2ldID0gTlVMOyAgICAgICAgLyogSWYgd2Ug aGF2ZSBmdWxsIElQIGFkZHJlc3MgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4oKGNoYXIgKilp cGFidWYpOyAvKiBSZXR1cm4gaXQgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgICAvKiBPdGhlcndpc2UgKi8KLSAgICAgICAgICAgICAgICBzdGF0ZSA9IDA7ICAgICAg ICAgICAgICAvKiBTdGFydCBvdmVyICovCi0gICAgICAgICAgICAgICAgaXBhYnVmWzBdID0gTlVM OyAgICAgICAgLyogKGluIGNhc2Ugbm8gbW9yZSBjaGFycyBsZWZ0KSAqLwotICAgICAgICAgICAg fQotICAgICAgICB9Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog RmFsbCB0aHJ1IGF0IGVuZCBvZiBzdHJpbmcgKi8KLSAgICBpcGFidWZbaV0gPSBOVUw7ICAgICAg ICAgICAgICAgICAgICAvKiBNYXliZSB3ZSBoYXZlIG9uZSAqLwotICAgIHJldHVybigocCA9PSAz ICYmIGQgPiAwKSA/IChjaGFyICopaXBhYnVmIDogIiIpOwotfQotI2VuZGlmIC8qIE5PU1BMICov Ci0KLS8qIERhdGUgUm91dGluZXMgKi8KLQotLyogWiBKIEQgQSBUIEUgIC0tICBDb252ZXJ0IHl5 eXltbWRkIGRhdGUgdG8gRGF5IG9mIFllYXIgKi8KLQotc3RhdGljIGludCBqZGF5c1sxMl0gPSB7 ICAwLDMxLDU5LDkwLDEyMCwxNTEsMTgxLDIxMiwyNDMsMjczLDMwNCwzMzQgfTsKLXN0YXRpYyBp bnQgbGRheXNbMTJdID0geyAgMCwzMSw2MCw5MSwxMjEsMTUyLDE4MiwyMTMsMjQ0LDI3NCwzMDUs MzM1IH07Ci1zdGF0aWMgY2hhciB6amRidWZbMTJdID0geyBOVUwsIE5VTCB9OwotLyoKLSAgRGVp bmRlLCBuZSBpbiBwb3N0ZXJ1bSBhIFhJSSBrYWxlbmRhcyBhcHJpbGlzIGFlcXVpbm9jdGl1bSBy ZWNlZGF0LAotICBzdGF0dWltdXMgYmlzc2V4dHVtIHF1YXJ0byBxdW9xdWUgYW5ubyAodXRpIG1v cyBlc3QpIGNvbnRpbnVhcmkgZGViZXJlLAotICBwcmFldGVycXVhbSBpbiBjZW50ZXNpbWlzIGFu bmlzOyBxdWksIHF1YW12aXMgYmlzc2V4dGlsZXMgYW50ZWEgc2VtcGVyCi0gIGZ1ZXJpbnQsIHF1 YWxlbSBldGlhbSBlc3NlIHZvbHVtdXMgYW5udW0gTURDLCBwb3N0IGV1bSB0YW1lbiBxdWkgZGVp bmNlcHMKLSAgY29uc2VxdWVudHVyIGNlbnRlc2ltaSBub24gb21uZXMgYmlzc2V4dGlsZXMgc2lu dCwgc2VkIGluIHF1YWRyaW5nZW50aXMKLSAgcXVpYnVzcXVlIGFubmlzIHByaW1pIHF1aXF1ZSB0 cmVzIGNlbnRlc2ltaSBzaW5lIGJpc3NleHRvIHRyYW5zaWdhbnR1ciwKLSAgcXVhcnR1cyB2ZXJv IHF1aXNxdWUgY2VudGVzaW11cyBiaXNzZXh0aWxpcyBzaXQsIGl0YSB1dCBhbm51cyBNRENDLCBN RENDQywKLSAgTURDQ0NDIGJpc3NleHRpbGVzIG5vbiBzaW50LiBBbm5vIHZlcm8gTU0sIG1vcmUg Y29uc3VldG8gZGllcyBiaXNzZXh0dXMKLSAgaW50ZXJjYWxldHVyLCBmZWJydWFyaW8gZGllcyBY WElYIGNvbnRpbmVudGUsIGlkZW1xdWUgb3JkbyBpbnRlcm1pdHRlbmRpCi0gIGludGVyY2FsYW5k aXF1ZSBiaXNzZXh0dW0gZGllbSBpbiBxdWFkcmluZ2VudGlzIHF1aWJ1c3F1ZSBhbm5pcyBwZXJw ZXR1bwotICBjb25zZXJ2ZXR1ci4gIC0gR3JlZ29yaXVzIFhJSUksIEFubm8gRG9taW5pIE1ETFhY WElJLgotKi8KLWNoYXIgKgotempkYXRlKGRhdGUpIGNoYXIgKiBkYXRlOyB7ICAgICAgICAgICAg IC8qIGRhdGUgPSB5eXl5bW1kZCAqLwotICAgIGNoYXIgeWVhcls1XTsKLSAgICBjaGFyIG1vbnRo WzNdOwotICAgIGNoYXIgZGF5WzNdOwotICAgIGludCBkLCBtLCB4LCB5OwotICAgIGludCBsZWFw ZGF5LCBqOwotICAgIGNoYXIgKiB0aW1lID0gTlVMTDsKLQotICAgIGlmICghZGF0ZSkgZGF0ZSA9 ICIiOyAgICAgICAgICAgICAgIC8qIFZhbGlkYXRlIGFyZyAqLwotICAgIHggPSBzdHJsZW4oZGF0 ZSk7Ci0gICAgaWYgKHggPCAxKSByZXR1cm4oIjAiKTsKLSAgICBpZiAoeCA8IDgpIHJldHVybigi LTEiKTsKLSAgICBmb3IgKHggPSAwOyB4IDwgODsgeCsrKQotICAgICAgaWYgKCFpc2RpZ2l0KGRh dGVbeF0pKQotICAgICAgICByZXR1cm4oIi0xIik7Ci0KLSAgICBpZiAoZGF0ZVs4XSkgaWYgKGRh dGVbOV0pCi0gICAgICB0aW1lID0gZGF0ZSArIDk7Ci0KLSAgICB5ZWFyWzBdID0gZGF0ZVswXTsg ICAgICAgICAgICAgICAgICAvKiBJc29sYXRlIHllYXIgKi8KLSAgICB5ZWFyWzFdID0gZGF0ZVsx XTsKLSAgICB5ZWFyWzJdID0gZGF0ZVsyXTsKLSAgICB5ZWFyWzNdID0gZGF0ZVszXTsKLSAgICB5 ZWFyWzRdID0gJ1wwJzsKLQotICAgIG1vbnRoWzBdID0gZGF0ZVs0XTsgICAgICAgICAgICAgICAg IC8qIE1vbnRoICovCi0gICAgbW9udGhbMV0gPSBkYXRlWzVdOwotICAgIG1vbnRoWzJdID0gJ1ww Jzs7Ci0KLSAgICBkYXlbMF0gPSBkYXRlWzZdOyAgICAgICAgICAgICAgICAgICAvKiBBbmQgZGF5 ICovCi0gICAgZGF5WzFdID0gZGF0ZVs3XTsKLSAgICBkYXlbMl0gPSAnXDAnOwotCi0gICAgbGVh cGRheSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIG5vIGxlYXAgZGF5ICov Ci0gICAgeSA9IGF0b2koeWVhcik7Ci0gICAgbSA9IGF0b2kobW9udGgpOwotICAgIGQgPSBhdG9p KGRheSk7Ci0gICAgaWYgKG0gPiAyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gTGVh cCBkYXkgYmVmb3JlIE1hcmNoICovCi0gICAgICAgIGlmICh5ICUgNCA9PSAwKSB7ICAgICAgICAg ICAgICAgLyogSWYgeWVhciBpcyBkaXZpc2libGUgYnkgNCAqLwotICAgICAgICAgICAgbGVhcGRh eSA9IDE7ICAgICAgICAgICAgICAgIC8qIEl0J3MgYSBMZWFwIHllYXIgKi8KLSAgICAgICAgICAg IGlmICh5ICUgMTAwID09IDApIHsgICAgICAgICAvKiBFeGNlcHQgaWYgZGl2aXNpYmxlIGJ5IDEw MCAqLwotICAgICAgICAgICAgICAgIGlmICh5ICUgNDAwICE9IDApICAgICAgIC8qIGJ1dCBub3Qg YnkgNDAwICovCi0gICAgICAgICAgICAgICAgICBsZWFwZGF5ID0gMDsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotICAgIH0KLSAgICBqID0gamRheXNbbSAtIDFdICsgZCArIGxlYXBkYXk7ICAg ICAvKiBEYXkgb2YgeWVhciAqLwotICAgIGlmICh0aW1lKQotICAgICAgc3ByaW50Zih6amRidWYs IiUwNGQlMDNkICVzIix5LGosdGltZSk7IC8qIFNBRkUgKi8KLSAgICBlbHNlCi0gICAgICBzcHJp bnRmKHpqZGJ1ZiwiJTA0ZCUwM2QiLHksaik7ICAgLyogU0FGRSAqLwotICAgIHJldHVybigoY2hh ciAqKXpqZGJ1Zik7Ci19Ci0KLXN0YXRpYyBjaGFyIGp6ZGJ1ZlszMl07Ci0KLS8qIEogWiBEIEEg VCBFICAtLSAgQ29udmVydCBEYXkgb2YgWWVhciB0byB5eXl5ZGRtbSBkYXRlICovCi0KLWNoYXIg KgotanpkYXRlKGRhdGUpIGNoYXIgKiBkYXRlOyB7ICAgICAgICAgICAgIC8qIGRhdGUgPSB5eXl5 ZGRkICovCi0gICAgY2hhciB5ZWFyWzVdOyAgICAgICAgICAgICAgICAgICAgICAgLyogd2l0aCBv cHRpb25hbCB0aW1lICovCi0gICAgY2hhciBkYXlbNF07Ci0gICAgY2hhciAqIHRpbWUgPSBOVUxM LCAqIHA7Ci0gICAgaW50IGQsIG0sIHgsIHk7Ci0gICAgaW50IGxlYXBkYXksIGo7Ci0gICAgaW50 ICogeno7Ci0KLSAgICBpZiAoIWRhdGUpIGRhdGUgPSAiIjsgICAgICAgICAgICAgICAvKiBWYWxp ZGF0ZSBhcmcgKi8KLSAgICB4ID0gc3RybGVuKGRhdGUpOwotCi0gICAgZGVidWcoRjExMSwianpk YXRlIGxlbiIsZGF0ZSx4KTsKLQotICAgIGlmICh4IDwgMSkgcmV0dXJuKCIwIik7Ci0gICAgaWYg KHggPCA3KSByZXR1cm4oIi0xIik7Ci0gICAgaWYgKHggPiA4KSB0aW1lID0gZGF0ZSArIDg7Ci0K LSAgICBmb3IgKHggPSAwOyB4IDwgNzsgeCsrKQotICAgICAgaWYgKCFpc2RpZ2l0KGRhdGVbeF0p KQotICAgICAgICByZXR1cm4oIi0xIik7Ci0KLSAgICB5ZWFyWzBdID0gZGF0ZVswXTsgICAgICAg ICAgICAgICAgICAvKiBJc29sYXRlIHllYXIgKi8KLSAgICB5ZWFyWzFdID0gZGF0ZVsxXTsKLSAg ICB5ZWFyWzJdID0gZGF0ZVsyXTsKLSAgICB5ZWFyWzNdID0gZGF0ZVszXTsKLSAgICB5ZWFyWzRd ID0gJ1wwJzsKLQotICAgIGRlYnVnKEYxMTAsImp6ZGF0ZSB5ZWFyIix5ZWFyLDApOwotCi0gICAg ZGF5WzBdID0gZGF0ZVs0XTsgICAgICAgICAgICAgICAgICAgLyogQW5kIGRheSAqLwotICAgIGRh eVsxXSA9IGRhdGVbNV07Ci0gICAgZGF5WzJdID0gZGF0ZVs2XTsKLSAgICBkYXlbM10gPSAnXDAn OwotCi0gICAgZGVidWcoRjExMCwianpkYXRlIGRheSIsZGF5LDApOwotCi0gICAgaiA9IGF0b2ko ZGF5KTsKLSAgICBpZiAoaiA+IDM2NikKLSAgICAgIHJldHVybigiLTEiKTsKLQotICAgIGxlYXBk YXkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBubyBsZWFwIGRheSAqLwot ICAgIHkgPSBhdG9pKHllYXIpOwotICAgIGlmICh5ICUgNCA9PSAwKSB7ICAgICAgICAgICAgICAg ICAgIC8qIElmIHllYXIgaXMgZGl2aXNpYmxlIGJ5IDQgKi8KLSAgICAgICAgbGVhcGRheSA9IDE7 ICAgICAgICAgICAgICAgICAgICAvKiBJdCdzIGEgTGVhcCB5ZWFyICovCi0gICAgICAgIGlmICh5 ICUgMTAwID09IDApIHsgICAgICAgICAgICAgLyogRXhjZXB0IGlmIGRpdmlzaWJsZSBieSAxMDAg Ki8KLSAgICAgICAgICAgIGlmICh5ICUgNDAwICE9IDApICAgICAgICAgICAvKiBidXQgbm90IGJ5 IDQwMCAqLwotICAgICAgICAgICAgICBsZWFwZGF5ID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAg ICBkZWJ1ZyhGMTAxLCJqemRhdGUgbGVhcGRheSIsIiIsbGVhcGRheSk7Ci0gICAgenogPSBsZWFw ZGF5ID8gbGRheXMgOiBqZGF5czsKLQotICAgIGZvciAoeCA9IDA7IHggPCAxMTsgeCsrKQotICAg ICAgaWYgKGogPiB6elt4XSAmJiBqIDw9IHp6W3grMV0pCi0gICAgICAgIGJyZWFrOwotICAgIG0g PSB4ICsgMTsKLQotICAgIGRlYnVnKEYxMDEsImp6ZGF0ZSBtIiwiIixtKTsKLQotICAgIGQgPSBq IC0genpbeF07Ci0KLSAgICBkZWJ1ZyhGMTAxLCJqemRhdGUgZCIsIiIsZCk7Ci0KLSAgICBpZiAo dGltZSkKLSAgICAgIHNwcmludGYoanpkYnVmLCIlMDRkJTAyZCUwMmQgJXMiLHksbSxkLHRpbWUp OyAvKiBTQUZFICovCi0gICAgZWxzZQotICAgICAgc3ByaW50ZihqemRidWYsIiUwNGQlMDJkJTAy ZCIseSxtLGQpOyAvKiBTQUZFICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJqemRhdGUganpkYnVmIixq emRidWYsMCk7Ci0KLSAgICBwID0gY2tjdnRkYXRlKChjaGFyICopanpkYnVmLCAwKTsgICAvKiBD b252ZXJ0IHRvIHN0YW5kYXJkIGZvcm0gKi8KLSAgICBja3N0cm5jcHkoanpkYnVmLHAsMzIpOwot ICAgIGlmICghdGltZSkganpkYnVmWzhdID0gTlVMOyAgICAgICAgIC8qIFJlbW92ZSB0aW1lIGlm IG5vdCB3YW50ZWQgKi8KLSAgICByZXR1cm4oKGNoYXIgKilqemRidWYpOwotfQotCi0vKiBNIEog RCAgLS0gIE1vZGlmaWVkIEp1bGlhbiBEYXRlICovCi0vKgotICBDYWxsIHdpdGg6Ci0gICAgU3Rh bmRhcmQtZm9ybWF0IGRhdGUtdGltZSBzdHJpbmc6IHl5eXltbWRkWyBoaDptbTpzc10uCi0gICAg VGhlIHRpbWUsIGlmIGFueSwgaXMgaWdub3JlZC4KLQotICBSZXR1cm5zOgotICAgIC0xTCBvbiBl cnJvciwgb3RoZXJ3aXNlOgotICAgIFRoZSBudW1iZXIgb2YgZGF5cyBzaW5jZSAxNyBOb3YgMTg1 OCBhcyBhIHdob2xlIG51bWJlcjoKLSAgICAxNiBOb3YgMTg1OCA9IC0xLCAxNyBOb3YgMTg1OCA9 IDAsIDE4IE5vdiAxODU4ID0gMSwgMTkgTm92IDE4NTggPSAyLCAuLi4KLQotICBUaGUgTW9kaWZp ZWQgSnVsaWFuIERhdGUgaXMgZGVmaW5lZCBieSB0aGUgSW50ZXJuYXRpb25hbCBBc3Ryb25vbWlj YWwKLSAgVW5pb24gYXMgdGhlIHRydWUgSnVsaWFuIGRhdGUgbWludXMgMjQwMDAwMC41IGRheXMu ICBUaGUgdHJ1ZSBKdWxpYW4KLSAgZGF0ZSBpcyB0aGUgbnVtYmVyIGRheXMgc2luY2Ugc2luY2Ug bm9vbiBvZiAxIEphbnVhcnkgNDcxMyBCQ0Ugb2YgdGhlCi0gIEp1bGlhbiBwcm9sZXB0aWMgY2Fs ZW5kYXIuICBDb252ZXJzaW9ucyBiZXR3ZWVuIGNhbGVuZGFyIGRhdGVzIGFuZAotICBKdWxpYW4g ZGF0ZXMsIGhvd2V2ZXIsIGFzc3VtZSBHcmVnb3JpYW4gZGF0aW5nLgotKi8KLWxvbmcKLW1qZChk YXRlKSBjaGFyICogZGF0ZTsgewotICAgIGNoYXIgeWVhcls1XTsKLSAgICBjaGFyIG1vbnRoWzNd OwotICAgIGNoYXIgZGF5WzNdOwotICAgIGludCB4LCBhLCBkLCBtLCB5OwotICAgIGxvbmcgejsK LQotICAgIGlmICghZGF0ZSkgZGF0ZSA9ICIiOyAgICAgICAgICAgICAgIC8qIFZhbGlkYXRlIGFy ZyAqLwotICAgIHggPSBzdHJsZW4oZGF0ZSk7Ci0gICAgaWYgKHggPCAxKSByZXR1cm4oMEwpOwot ICAgIGlmICh4IDwgOCkgcmV0dXJuKC0xTCk7Ci0gICAgZm9yICh4ID0gMDsgeCA8IDg7IHgrKykK LSAgICAgIGlmICghaXNkaWdpdChkYXRlW3hdKSkKLSAgICAgICAgcmV0dXJuKC0xTCk7Ci0KLSAg ICB5ZWFyWzBdID0gZGF0ZVswXTsgICAgICAgICAgICAgICAgICAvKiBJc29sYXRlIHllYXIgKi8K LSAgICB5ZWFyWzFdID0gZGF0ZVsxXTsKLSAgICB5ZWFyWzJdID0gZGF0ZVsyXTsKLSAgICB5ZWFy WzNdID0gZGF0ZVszXTsKLSAgICB5ZWFyWzRdID0gJ1wwJzsKLQotICAgIG1vbnRoWzBdID0gZGF0 ZVs0XTsgICAgICAgICAgICAgICAgIC8qIE1vbnRoICovCi0gICAgbW9udGhbMV0gPSBkYXRlWzVd OwotICAgIG1vbnRoWzJdID0gJ1wwJzs7Ci0gICAgbSA9IGF0b2kobW9udGgpOwotCi0gICAgZGF5 WzBdID0gZGF0ZVs2XTsgICAgICAgICAgICAgICAgICAgLyogQW5kIGRheSAqLwotICAgIGRheVsx XSA9IGRhdGVbN107Ci0gICAgZGF5WzJdID0gJ1wwJzsKLSAgICBkID0gYXRvaShkYXkpOwotCi0g ICAgYSA9ICgxNC1tKS8xMjsgICAgICAgICAgICAgICAgICAgICAgLyogQ2FsY3VsYXRlIHRydWUg SnVsaWFuIGRhdGUgKi8KLSAgICB5ID0gYXRvaSh5ZWFyKSArIDQ4MDAgLSBhOwotICAgIG0gPSBt ICsgMTIgKiBhIC0gMzsKLSAgICB6ID0gZCArIChsb25nKSgzMDYqbSs1KS8xMCArIChsb25nKSh5 KjM2NSkgKyB5LzQgLSB5LzEwMCArIHkvNDAwIC0gMzIwNDVMOwotCi0gICAgeiAtPSAyNDAwMDAx TDsgICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCBKRCB0byBNSkQgKi8KLQotICAgIHJl dHVybih6KTsKLX0KLQotc3RhdGljIGNoYXIgbWpkMmRidWZbMzJdOwotCi0vKiAgTSBKIEQgMiBE IEEgVCBFICAtLSAgQ29udmVydHMgTUpEIHRvIHl5eXltbWRkICAqLwotCi1jaGFyICoKLSNpZmRl ZiBDS19BTlNJQwotbWpkMmRhdGUobG9uZyBtamQpCi0jZWxzZQotbWpkMmRhdGUobWpkKSBsb25n IG1qZDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogbWpkMmRhdGUgKi8gewotICAgIGxvbmcg amQsIGwsIG47Ci0gICAgaW50IGQsIG0sIHk7Ci0gICAgamQgPSAobG9uZykobWpkICsgMjQwMDAw MUwpOwotICAgIGwgPSBqZCArIDY4NTY5OwotICAgIG4gPSA0ICogbCAvIDE0NjA5N0w7Ci0gICAg bCA9IGwgLSAoMTQ2MDk3ICogbiArIDMpIC8gNDsKLSAgICB5ID0gNDAwMCAqIChsICsgMSkgLyAx NDYxMDAxTDsKLSAgICBsID0gbCAtIDE0NjEgKiB5IC8gNCArIDMxOwotICAgIG0gPSA4MCAqIGwg LyAyNDQ3OwotICAgIGQgPSBsIC0gMjQ0NyAqIG0gLyA4MDsKLSAgICBsID0gbSAvIDExOwotICAg IG0gPSBtICsgMiAtIDEyICogbDsKLSAgICB5ID0gMTAwICogKG4gLSA0OSkgKyB5ICsgbDsKLSAg ICBzcHJpbnRmKG1qZDJkYnVmLCIlMDRkJTAyZCUwMmQiLHksbSxkKTsgLyogU0FGRSAqLwotICAg IHJldHVybigoY2hhciAqKW1qZDJkYnVmKTsKLX0KLQotI2lmbmRlZiBOT1NQTAotc3RhdGljIGNo YXIgKiogZmxpc3QgPSAoY2hhciAqKikgTlVMTDsgIC8qIEZpbGUgbGlzdCBmb3IgXGZuZXh0Zmls ZSgpICovCi1zdGF0aWMgaW50IGZsaXN0biA9IDA7ICAgICAgICAgICAgICAgICAgLyogTnVtYmVy IG9mIGl0ZW1zIGluIGZpbGUgbGlzdCAqLwotCi0vKgotICBUaGUgZnVuY3Rpb24gcmV0dXJuLXZh bHVlIGJ1ZmZlciBtdXN0IGJlIGdsb2JhbCwgc2luY2UgZm5ldmFsKCkgcmV0dXJucyBhCi0gIHBv aW50ZXIgdG8gaXQuICBmbmV2YWwoKSBpcyBjYWxsZWQgb25seSBieSB6enN0cmluZygpLCB3aGlj aCBhbHdheXMgY29waWVzCi0gIHRoZSByZXN1bHQgb3V0IG9mIHRoaXMgYnVmZmVyIHRvIHNvbWV3 aGVyZSBlbHNlLCBzbyBpdCdzIE9LIHRvIGhhdmUgb25seQotICBvbmUgYnVmZmVyIGZvciB0aGlz IGluIG1vc3QgY2FzZXMuICBIb3dldmVyLCBzaW5jZSBmdW5jdGlvbiBjYWxscyBjYW4gYmUKLSAg bmVzdGVkIC0tIGUuZy4gZnVuY3Rpb25zIHdob3NlIGFyZ3VtZW50cyBhcmUgZnVuY3Rpb25zLCBv ciByZWN1cnNpdmUKLSAgZnVuY3Rpb25zLCBhdCBzb21lIHBvaW50IHdlIHNob3VsZCBjb252ZXJ0 IHRoaXMgdG8gYW4gYXJyYXkgb2YgYnVmZmVycywKLSAgaW5kZXhlZCBieSBmdW5jdGlvbiBkZXB0 aCAod2hpY2ggbWlnaHQgb3IgbWlnaHQgbm90IGJlIHRoZSBzYW1lIGFzIHRoZQotICAiZGVwdGgi IHZhcmlhYmxlKS4gIEFsc28sIHNpbmNlIGZ1bmN0aW9uIHJlc3VsdHMgYXJlIHBvdGVudGlhbGx5 IHF1aXRlIGJpZywKLSAgd2UnZCBuZWVkIHRvIGFsbG9jYXRlIGFuZCBkZWFsbG9jYXRlIGR5bmFt aWNhbGx5IGFzIHdlIGRlc2NlbmQgYW5kIGFzY2VuZAotICBmdW5jdGlvbiBkZXB0aC4gIExlZnQg Zm9yIGEgZnV0dXJlIHJlbGVhc2UuLi4KLSovCi1jaGFyIGZudmFsW0ZOVkFMTCsyXTsgICAgICAg ICAgICAgICAgICAgLyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlICAqLwotc3RhdGljIGludCBmbmRl cHRoID0gMDsgICAgICAgICAgICAgICAgIC8qICh3ZSBkb24ndCBhY3R1YWxseSB1c2UgdGhpcyB5 ZXQpICovCi1pbnQgZm5zdWNjZXNzID0gMTsKLWV4dGVybiBpbnQgZm5lcnJvcjsKLQotLyogZiBw IGYgbyByIG0gYSB0ICAtLSAgRmxvYXRpbmctcG9pbnQgbnVtYmVyIG5pY2VseSBmb3JtYXR0ZWQu ICAqLwotLyoKLSAgIFJldHVybnMgcmVzdWx0cyBmcm9tIGEgY2lyY3VsYXIgMUsgYnVmZmVyLgot ICAgRG9uJ3QgY291bnQgb24gdG9vIG1hbnkgcmVzdWx0cyByZW1haW5pbmcgYXZhaWxhYmxlIGF0 IG9uY2U7IGl0IGNvdWxkCi0gICBiZSBhbnl3aGVyZSBmcm9tIDUgdG8gbWF5YmUgMTAwLCBkZXBl bmRpbmcgb24gdGhlIHNpemVzIG9mIHRoZSByZXN1bHRzLgotKi8KLSNpZmRlZiBDS0ZMT0FUCi0j ZGVmaW5lIEZQRk1UU0laIDEwMjQKLXN0YXRpYyBjaGFyIGZwZm10YnVmW0ZQRk1UU0laXSA9IHsg TlVMLCBOVUwgfTsKLXN0YXRpYyBpbnQgZnBmYnVmcG9zID0gMDsgICAgICAgICAgICAgICAvKiAo d2h5IHdhcyB0aGlzIGNoYXIgYmVmb3JlPykgKi8KLQotY2hhciAqCi1mcGZvcm1hdChmcHJlc3Vs dCxwbGFjZXMscm91bmQpIENLRkxPQVQgZnByZXN1bHQ7IGludCBwbGFjZXMsIHJvdW5kOyB7Ci0g ICAgY2hhciBmYnVmWzE2XTsgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIGNyZWF0aW5nIHBy aW50ZiBmb3JtYXQgKi8KLSAgICBpbnQgbmluZXMgPSAwLCBzaWduID0gMCwgeCwgeSwgaSwgaiwg c2l6ZSA9IDA7Ci0gICAgY2hhciAqIGJ1ZjsKLSAgICBDS0ZMT0FUIGZ0bXA7Ci0KLSAgICB4ID0g cGxhY2VzID8gcGxhY2VzIDogKGZwX2RpZ2l0cyA/IGZwX2RpZ2l0cyA6IDYpOwotCi0gICAgZGVi dWcoRjEwMSwiZnBmb3JtYXQgZnByZXN1bHQiLCIiLGZwcmVzdWx0KTsKLSAgICBkZWJ1ZyhGMTAx LCJmcGZvcm1hdCBwbGFjZXMiLCIiLHBsYWNlcyk7Ci0gICAgZGVidWcoRjEwMSwiZnBmb3JtYXQg ZnBmYnVmcG9zIDEiLCIiLGZwZmJ1ZnBvcyk7Ci0KLSAgICBmdG1wID0gZnByZXN1bHQ7Ci0gICAg aWYgKGZ0bXAgPCAwLjApIGZ0bXAgPSAwLjAgLSBmcHJlc3VsdDsKLQotI2lmZGVmIEZORkxPQVQK LSAgICBpZiAoIWZwX3JvdW5kaW5nICYmICAgICAgICAgICAgICAgICAvKiBJZiBwcmludGYgZG9l c24ndCByb3VuZCwgKi8KLSAgICAgICAgKHBsYWNlcyA+IDAgfHwgICAgICAgICAgICAgICAgICAv KiByb3VuZCByZXN1bHQgdG8gZGVjaW1hbCBwbGFjZXMuICovCi0gICAgICAgICAocGxhY2VzID09 IDAgJiYgcm91bmQpKSkKLSAgICAgIGZwcmVzdWx0ICs9ICgwLjUgLyBwb3coMTAuMCwoQ0tGTE9B VClwbGFjZXMpKTsKLSAgICB5ID0gKGZ0bXAgPT0gMC4wKSA/IDEgOiAoaW50KWxvZzEwKGZ0bXAp OwotICAgIHNpemUgPSB5ICsgeCArIDM7ICAgICAgICAgICAgICAgICAgIC8qIEVzdGltYXRlZCBs ZW5ndGggb2YgcmVzdWx0ICovCi0gICAgaWYgKGZwcmVzdWx0IDwgMC4wKSBzaXplKys7Ci0jZWxz ZQotICAgIHNpemUgPSAyMDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHdheSB0byBl c3RpbWF0ZSwgYmUgZ2VuZXJvdXMgKi8KLSNlbmRpZiAvKiBGTkZMT0FUICovCi0KLSAgICBkZWJ1 ZyhGMTAxLCJmcGZvcm1hdCBzaXplIiwiIixzaXplKTsKLQotICAgIGlmIChmcGZidWZwb3MgPiAo RlBGTVRTSVogLSBzaXplKSkgIC8qIFdyYXAgYXJvdW5kIGlmIG5lY2Vzc2FyeSAqLwotICAgICAg ZnBmYnVmcG9zID0gMDsKLSAgICBkZWJ1ZyhGMTAxLCJmcGZvcm1hdCBmcGZidWZwb3MgMSIsIiIs ZnBmYnVmcG9zKTsKLQotICAgIGJ1ZiA9ICZmcGZtdGJ1ZltmcGZidWZwb3NdOwotCi0gICAgaWYg KHBsYWNlcyA+IDApIHsgICAgICAgICAgICAgICAgICAgLyogSWYgcGxhY2VzIHNwZWNpZmllZCAq LwotICAgICAgICAvKiB1c2Ugc3BlY2lmaWVkIHBsYWNlcyB0byB3cml0ZSBnaXZlbiBudW1iZXIg b2YgZGlnaXRzICovCi0gICAgICAgIHNwcmludGYoZmJ1ZiwiJSUwLiVkZiIscGxhY2VzKTsgLyog U0FGRSAqLwotICAgICAgICBzcHJpbnRmKGJ1ZixmYnVmLGZwcmVzdWx0KTsgICAgIC8qIFNBRkUg Ki8KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2Uu Li4gKi8KLSAgICAgICAgLyogR28gZm9yIG1heCBwcmVjaXNpb24gKi8KLSAgICAgICAgc3ByaW50 ZihmYnVmLCIlJTAuJWRmIixmcF9kaWdpdHMpOyAvKiBTQUZFICovCi0gICAgICAgIHNwcmludGYo YnVmLGZidWYsZnByZXN1bHQpOyAgICAgLyogU0FGRSAqLwotICAgIH0KLSAgICBpZiAoYnVmWzBd ID09ICctJykgc2lnbiA9IDE7Ci0gICAgZGVidWcoRjExMSwiZnByZXN1bHQgMSBlcnJubyIsYnVm LGVycm5vKTsgLyogQ2hlY2sgZm9yIG92ZXIvdW5kZXJmbG93ICovCi0gICAgZGVidWcoRjExMSwi ZnByZXN1bHQgMSBmcGZidWZwb3MiLGJ1ZixmcGZidWZwb3MpOwotICAgIC8qIEdpdmUgcmVxdWVz dGVkIGRlY2ltYWwgcGxhY2VzICovCi0gICAgZm9yIChpID0gc2lnbjsgaSA8IEZQRk1UU0laICYm IGJ1ZltpXTsgaSsrKSB7Ci0gICAgICAgIGlmIChidWZbaV0gPT0gJy4nKSAgICAgICAgICAgICAg LyogRmlyc3QgZmluZCB0aGUgZGVjaW1hbCBwb2ludCAqLwotICAgICAgICAgIGJyZWFrOwotICAg ICAgICBlbHNlIGlmIChpID4gZnBfZGlnaXRzICsgc2lnbiAtIDEpIC8qIHJlcGxhY2luZyBnYXJi YWdlICovCi0gICAgICAgICAgYnVmW2ldID0gJzAnOyAgICAgICAgICAgICAgICAgLyogZGlnaXRz IHdpdGggMC4uLiAqLwotICAgIH0KLSAgICBpZiAoYnVmW2ldID09ICcuJykgeyAgICAgICAgICAg ICAgICAvKiBIYXZlIGRlY2ltYWwgcG9pbnQgKi8KLSAgICAgICAgaW50IGdvdGVuZCA9IDA7Ci0g ICAgICAgIC8qIHBsYWNlcyA8IDAgc28gdHJ1bmNhdGUgZnJhY3Rpb24gKi8KLSAgICAgICAgaWYg KHBsYWNlcyA8IDAgfHwgKHBsYWNlcyA9PSAwICYmIHJvdW5kKSkgewotICAgICAgICAgICAgYnVm W2ldID0gTlVMOwotICAgICAgICB9IGVsc2UgaWYgKHBsYWNlcyA+IDApIHsgICAgICAgIC8qIGQg PiAwIHNvIHRoaXMgbWFueSBkZWNpbWFsIHBsYWNlcyAqLwotICAgICAgICAgICAgaSsrOyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IGRpZ2l0IGFmdGVyIGRlY2ltYWwgKi8KLSAg ICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbGFjZXM7IGorKykgeyAvKiBUcnVuY2F0ZSBhZnRl ciBkIGRlY2ltYWwgKi8KLSAgICAgICAgICAgICAgICBpZiAoIWJ1ZltqK2ldKSAgICAgICAgLyog cGxhY2VzIG9yIGV4dGVuZCB0byBkICAqLwotICAgICAgICAgICAgICAgICAgZ290ZW5kID0gMTsg ICAgICAgICAgICAgIC8qIGRlY2ltYWwgcGxhY2VzLiAqLwotICAgICAgICAgICAgICAgIGlmIChn b3RlbmQgfHwgaitpK3NpZ24gPiBmcF9kaWdpdHMpCi0gICAgICAgICAgICAgICAgICBidWZbaitp XSA9ICcwJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJ1ZltqK2ldID0gTlVMOwotICAg ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBsYWNlcyA9PSAwIHNvIERv IFRoZSBSaWdodCBUaGluZyAqLwotICAgICAgICAgICAgZm9yIChqID0gKGludClzdHJsZW4oYnVm KSAtIDE7IGogPiBpKzE7IGotLSkgewotICAgICAgICAgICAgICAgIGlmICgoaiAtIHNpZ24pID4g ZnBfZGlnaXRzKQotICAgICAgICAgICAgICAgICAgYnVmW2pdID0gJzAnOwotICAgICAgICAgICAg ICAgIGlmIChidWZbal0gPT0gJzAnKQotICAgICAgICAgICAgICAgICAgYnVmW2pdID0gTlVMOyAv KiBTdHJpcCB1c2VsZXNzIHRyYWlsaW5nIDAncy4gKi8KLSAgICAgICAgICAgICAgICBlbHNlCi0g ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K LSAgICBmcGZtdGJ1ZltGUEZNVFNJWi0xXSA9IE5VTDsKLSAgICBqID0gc3RybGVuKGJ1Zik7Ci0g ICAgc2lnbiA9IDA7Ci0gICAgZm9yIChpID0gai0xOyBpID49IDA7IGktLSkgewotICAgICAgICBp ZiAoYnVmW2ldID09ICc5JykKLSAgICAgICAgICBuaW5lcysrOwotICAgICAgICBlbHNlCi0gICAg ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIC8qIERvIHNvbWV0aGluZyBhYm91dCB4eC54eDk5OTk5 OTk5Li4uICovCi0gICAgaWYgKG5pbmVzID4gNSkgewotICAgICAgICBpZiAoaXNkaWdpdChidWZb aV0pICYmIGkgPCBGUEZNVFNJWiAtIDIpIHsKLSAgICAgICAgICAgIGJ1ZltpXSA9IGJ1ZltpXSAr IDE7Ci0gICAgICAgICAgICBidWZbaSsxXSA9ICcwJzsKLSAgICAgICAgICAgIGJ1ZltpKzJdID0g J1wwJzsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIXN0cm5jbXAoYnVmLCItMC4wIixGUEZN VFNJWikpCi0gICAgICBja3N0cm5jcHkoYnVmLCIwLjAiLEZQRk1UU0laKTsKLSAgICBmcGZidWZw b3MgKz0gKGludClzdHJsZW4oYnVmKSArIDE7Ci0gICAgcmV0dXJuKChjaGFyICopYnVmKTsKLX0K LSNlbmRpZiAvKiBDS0ZMT0FUICovCi0KLXN0YXRpYyBWT0lECi1ldmFsZXJyKGZuKSBjaGFyICog Zm47IHsKLSAgICBpZiAoZm5kaWFncykgewotICAgICAgICBpZiAoZGl2Ynl6ZXJvKQotICAgICAg ICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkRJVklERV9CWV9aRVJPOlxcZiIsZm4s IigpPiIsTlVMTCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZB TEwsIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICB9Ci19 Ci0KLQotc3RhdGljIGludAotY2tjaW5kZXgoYyxzKSBjaGFyIGMsICpzOyB7Ci0gICAgaW50IHJj OwotICAgIGlmICghYyB8fCAhcykgcmV0dXJuKDApOwotICAgIGZvciAocmMgPSAwOyBzW3JjXTsg cmMrKykgewotCWlmIChjID09IHNbcmNdKSByZXR1cm4ocmMrMSk7Ci0gICAgfQotICAgIHJldHVy bigwKTsKLX0KLQotc3RhdGljIGNoYXIgKgotZG9rd3ZhbChzLHNlcCkgY2hhciAqIHMsICogc2Vw OyB7Ci0gICAgY2hhciBjID0gJ1wwJywgKiBwLCAqIGt3ID0gTlVMTCwgKiB2cCA9IE5VTEw7Ci0g ICAgY2hhciAqIHJjID0gIjAiOwkJCS8qIFJldHVybiBjb2RlICovCi0gICAgaW50IHggPSAwOwot ICAgIGlmICghcykgcmV0dXJuKHJjKTsKLSAgICBpZiAoISpzKSByZXR1cm4ocmMpOwotICAgIGRl YnVnKEYxMTAsImt3dmFsIGFyZyIscywwKTsKLSAgICBkZWJ1ZyhGMTEwLCJrd3ZhbCBzZXAiLHNl cCwwKTsKLSAgICBwID0gKGNoYXIgKiltYWxsb2MoKGludClzdHJsZW4ocykrMSk7Ci0gICAgaWYg KCFwKSBnb3RvIHhkb2t3dmFsOwotICAgIHN0cmNweShwLHMpOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNBRkUgKi8KLSAgICBzID0gcDsKLSAgICB3aGlsZSAoKnMgPCAnIScgJiYgKnMgPiAn XDAnKSAgICAgICAvKiBHZXQgZmlyc3Qgbm9uYmxhbmsgKi8KLSAgICAgIHMrKzsKLSAgICBpZiAo ISpzKSBnb3RvIHhkb2t3dmFsOwotICAgIGlmIChja2NpbmRleCgqcyxzZXApKQkJLyogU2VwYXJh dG9yIGJ1dCBubyBrZXl3b3JkICovCi0gICAgICBnb3RvIHhkb2t3dmFsOwotICAgIGt3ID0gczsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgKi8KLSAgICB3aGlsZSAoKnMg PiAnICcpIHsKLQlpZiAoY2tjaW5kZXgoKnMsc2VwKSkgewkJLyoga2V5d29yZD0uLi4gKi8KLSAg ICAgICAgICAgIGMgPSAqczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg IHMrKzsKLSAgICB9Ci0gICAgaWYgKCprdykgcmMgPSAiMSI7CQkJLyogSGF2ZSBrZXl3b3JkLCBw cm9tb3RlIHJldHVybiBjb2RlICovCi0gICAgKnMrKyA9IE5VTDsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVGVybWluYXRlIGtleXdvcmQgKi8KLSAgICB3aGlsZSAoKnMgPCAnIScgJiYgKnMg PiAnXDAnKSAgICAgICAvKiBTa2lwIGJsYW5rcyAqLwotICAgICAgcysrOwotICAgIGlmICghYyAm JiBja2NpbmRleCgqcyxzZXApKSB7Ci0gICAgICAgIGMgPSAqcysrOyAgICAgICAgICAgICAgICAg ICAgICAgLyogSGF2ZSBzZXBhcmF0b3IgKi8KLSAgICAgICAgd2hpbGUgKCpzIDwgJyEnICYmICpz ID4gJ1wwJykgICAvKiBTa2lwIGJsYW5rcyAqLwotICAgICAgICAgIHMrKzsKLSAgICB9Ci0gICAg aWYgKGMpIHsKLSAgICAgICAgdnAgPSBzOwotCWlmICgqdnApIHJjID0gIjIiOwkJLyogSGF2ZSB2 YWx1ZSwgYW5vdGhlciBwcm9tb3Rpb24gKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIHdoaWxl ICgqcyA+ICcgJykgICAgICAgICAgICAgICAgLyogU2tpcCB0byBlbmQgKi8KLSAgICAgICAgICBz Kys7Ci0gICAgICAgICpzID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRl IHZhbHVlICovCi0jZW5kaWYJLyogQ09NTUVOVCAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJr d3ZhbCBjIixja2N0b2EoYyksMCk7Ci0gICAgZGVidWcoRjExMCwia3d2YWwga2V5d29yZCIsa3cs MCk7Ci0gICAgZGVidWcoRjExMCwia3d2YWwgdmFsdWUiLHZwLDApOwotICAgIG1ha2VzdHIoJmxh c3Rrd3ZhbCxrdyk7Ci0gICAgdnAgPSBicnN0cmlwKHZwKTsKLSAgICBkZWJ1ZyhGMTEwLCJrd3Zh bCB2YWx1ZSIsdnAsMCk7Ci0gICAgeCA9IGFkZG1hYyhrdyx2cCk7Ci0gICAgZGVidWcoRjExMSwi a3d2YWwgYWRkbWFjIixrdyx4KTsKLSAgeGRva3d2YWw6IAotICAgIGlmIChwKSBmcmVlKHApOwot ICAgIHJldHVybigoeCA8IDApID8gIi0xIiA6IHJjKTsKLX0KLQotc3RhdGljIGludAotaXNhYXJy YXkocykgY2hhciAqIHM7IHsJCQkvKiBJcyBzIGFuIGFzc29jaWF0aXZlIGFycmF5IGVsZW1lbnQg Ki8KLSAgICBpbnQgc3RhdGUgPSAwOwotICAgIENIQVIgYzsKLSAgICBpZiAoIXMpIHJldHVybigw KTsKLSAgICB3aGlsZSAoKGMgPSAqcysrKSkgewotCWlmICghaXNwcmludChjKSkgewotCSAgICBy ZXR1cm4oMCk7Ci0JfSBlbHNlIGlmIChjID09ICc8JykgewotCSAgICBpZiAoc3RhdGUgIT0gMCkK LQkgICAgICByZXR1cm4oMCk7Ci0JICAgIHN0YXRlID0gMTsKLQl9IGVsc2UgaWYgKGMgPT0gJz4n KSB7Ci0JICAgIHJldHVybigoc3RhdGUgIT0gMSB8fCAqcykgPyAwIDogMSk7Ci0JfQotICAgIH0K LSAgICByZXR1cm4oMCk7Ci19Ci0KLXN0YXRpYyBjaGFyICogICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBFdmFsdWF0ZSBidWlsdGluIGZ1bmN0aW9ucyAqLwotZm5ldmFsKGZuLGFyZ3AsYXJn bix4cCkgY2hhciAqZm4sICphcmdwW107IGludCBhcmduOyBjaGFyICogeHA7IHsKLSAgICBpbnQg aT0wLCBqPTAsIGs9MCwgbGVuMT0wLCBsZW4yPTAsIGxlbjM9MCwgbj0wLCB0PTAsIHg9MCwgeT0w OwotICAgIGludCBjeCwgZmFpbGVkID0gMDsgICAgICAgICAgICAgICAgIC8qIFJldHVybiBjb2Rl LCAwID0gb2sgKi8KLSAgICBsb25nIHogPSAwTDsKLSAgICBjaGFyICpicFtGTkFSR1MgKyAxXTsg ICAgICAgICAgICAgICAvKiBQb2ludGVycyB0byBtYWxsb2MnZCBzdHJpbmdzICovCi0gICAgY2hh ciBjID0gTlVMOwotICAgIGNoYXIgKnAgPSBOVUxMLCAqcyA9IE5VTEw7Ci0gICAgY2hhciAqdmFs MSA9IE5VTEwsICp2YWwyID0gTlVMTDsgICAgLyogUG9pbnRlcnMgdG8gbnVtZXJpYyBzdHJpbmcg dmFsdWVzICovCi0KLSNpZmRlZiBSRUNVUlNJVkUKLSAgICBpbnQgcnNhdmUgPSByZWN1cnNpdmU7 Ci0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0jaWZkZWYgT1MyCi0gICAgaW50IHpzYXZlID0genhw bjsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGlmICghZm4pIGZuID0gIiI7ICAgICAgICAgICAg ICAgICAgIC8qIFByb3RlY3QgYWdhaW5zdCBudWxsIHBvaW50ZXJzICovCi0gICAgaWYgKCEqZm4p IHJldHVybigiIik7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgRk5BUkdTOyBpKyspICAgICAgICAv KiBJbml0aWFsaXplIGFyZ3VtZW50IHBvaW50ZXJzICovCi0gICAgICBicFtpXSA9IE5VTEw7Ci0v KgotICBJTVBPUlRBTlQ6IE5vdGUgdGhhdCBhcmduIGlzIG5vdCBhbiBhY2N1cmF0ZSBjb3VudCBv ZiB0aGUgbnVtYmVyIG9mCi0gIGFyZ3VtZW50cy4gIFdlIGNhbid0IHJlYWxseSB0ZWxsIGlmIGFu IGFyZ3VtZW50IGlzIG51bGwgdW50aWwgYWZ0ZXIgd2UKLSAgZXhlY3V0ZSB0aGUgY29kZSBiZWxv dy4gIFNvIGFyZ24gaXMgcmVhbGx5IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMKLSAg d2UgbWlnaHQgaGF2ZS4gIEFyZ24gc2hvdWxkIGFsd2F5cyBiZSBhdCBsZWFzdCAxLCBldmVuIGlm IHRoZSBmdW5jdGlvbiBpcwotICBjYWxsZWQgd2l0aCBlbXB0eSBwYXJlbnRoZXNlcyAoYnV0IGRv bid0IGNvdW50IG9uIGl0KS4KLSovCi0gICAgZGVidWcoRjExMSwiZm5ldmFsIixmbixhcmduKTsK LSAgICBkZWJ1ZyhGMTEwLCJmbmV2YWwiLGFyZ3BbMF0sMCk7Ci0gICAgaWYgKGFyZ24gPiBGTkFS R1MpICAgICAgICAgICAgICAgICAgLyogRGlzY2FyZCBleGNlc3MgYXJndW1lbnRzICovCi0gICAg ICBhcmduID0gRk5BUkdTOwotCi0gICAgZm5kZXB0aCsrOwotICAgIGRlYnVnKEYxMDEsImZuZXZh bCBmbmRlcHRoIiwiIixmbmRlcHRoKTsKLSAgICBwID0gZm52YWw7Ci0gICAgZm52YWxbMF0gPSBO VUw7Ci0gICAgeSA9IGxvb2t1cChmbmN0YWIsZm4sbmZ1bmNzLCZ4KTsgICAgLyogTG9vayB1cCB0 aGUgZnVuY3Rpb24gbmFtZSAqLwotICAgIGN4ID0geTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEJlY2F1c2UgeSBpcyB0b28gZ2VuZXJpYy4uLiAqLwotICAgIGlmIChjeCA8IDApIHsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgZm91bmQgKi8KLSAgICAgICAgZmFpbGVkID0g MTsKLSAgICAgICAgaWYgKGZuZGlhZ3MpIHsgICAgICAgICAgICAgICAgICAvKiBGVU5DVElPTiBE SUFHTk9TVElDIE9OICovCi0gICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgIHggPSBzdHJs ZW4oZm4pOwotICAgICAgICAgICAgLyogVGhlIGZvbGxvd2luZyBzcHJpbnRmJ3MgYXJlIHNhZmUg Ki8KLSAgICAgICAgICAgIHN3aXRjaCAoY3gpIHsKLSAgICAgICAgICAgICAgY2FzZSAtMToKLSAg ICAgICAgICAgICAgICBpZiAoeCArIDMyIDwgRk5WQUxMKQotICAgICAgICAgICAgICAgICAgc3By aW50ZihmbnZhbCwiPEVSUk9SOk5PX1NVQ0hfRlVOQ1RJT046XFxmJXMoKT4iLGZuKTsKLSAgICAg ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCI8RVJST1I6 Tk9fU1VDSF9GVU5DVElPTj4iKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgY2FzZSAtMjoKLSAgICAgICAgICAgICAgICBpZiAoeCArIDI2IDwgRk5WQUxMKQotICAgICAg ICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiPEVSUk9SOk5BTUVfQU1CSUdVT1VTOlxcZiVzKCk+ Iixmbik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgc3ByaW50Zihm bnZhbCwiPEVSUk9SOk5BTUVfQU1CSUdVT1VTPiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICBjYXNlIC0zOgotICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIjxF UlJPUjpGVU5DVElPTl9OQU1FX01JU1NJTkc6XFxmKCk+Iik7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKHggKyAyNiA8 IEZOVkFMTCkKLSAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIjxFUlJPUjpMT09LVVBf RkFJTFVSRTpcXGYlcygpPiIsZm4pOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg ICAgICAgIHNwcmludGYoZm52YWwsIjxFUlJPUjpMT09LVVBfRkFJTFVSRT4iKTsKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBnb3RvIGZu ZW5kOyAgICAgICAgICAgICAgICAgICAgIC8qIEFsd2F5cyBsZWF2ZSB2aWEgY29tbW9uIGV4aXQg Ki8KLSAgICB9Ci0gICAgZm4gPSBmbmN0YWJbeF0ua3dkOyAgICAgICAgICAgICAgICAgLyogRnVs bCBuYW1lIG9mIGZ1bmN0aW9uICovCi0KLSAgICBpZiAoYXJnbiA8IDApIHsKLSAgICAgICAgZmFp bGVkID0gMTsKLSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICBpZiAoZm5kaWFncykKLSAgICAg ICAgICBzcHJpbnRmKGZudmFsLCI8RVJST1I6TUlTU0lOR19BUkc6XFxmJXMoKT4iLGZuKTsKLSAg ICAgICAgZ290byBmbmVuZDsKLSAgICB9Ci0gICAgaWYgKGN4ID09IEZOX0xJVCkgeyAgICAgICAg ICAgICAgICAgLyogbGl0ZXJhbChhcmcxKSAqLwotICAgICAgICBkZWJ1ZyhGMDEwLCJmbGl0Iix4 cCwwKTsKLSAgICAgICAgcCA9IHhwID8geHAgOiAiIjsgICAgICAgICAgICAgICAvKiBSZXR1cm4g YSBwb2ludGVyIHRvIGFyZyBpdHNlbGYgKi8KLSAgICAgICAgZ290byBmbmVuZDsKLSAgICB9Ci0K LSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgaW50IGo7Ci0gICAgICAg IGZvciAoaiA9IDA7IGogPCBhcmduOyBqKyspCi0JICBkZWJ1ZyhGMTExLCJmbmV2YWwgYXJnIixh cmdwW2pdLGopOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIGZvciAoaiA9IGFyZ24t MTsgaiA+PSAwOyBqLS0pIHsgICAgIC8qIFVuY291bnQgZW1wdHkgdHJhaWxpbmcgYXJncyAqLwot ICAgICAgICBpZiAoIWFyZ3Bbal0pCi0gICAgICAgICAgYXJnbi0tOwotICAgICAgICBlbHNlIGlm ICghKihhcmdwW2pdKSkKLSAgICAgICAgICBhcmduLS07Ci0gICAgICAgIGVsc2UgYnJlYWs7Ci0g ICAgfQotICAgIGRlYnVnKEYxMTEsImZuZXZhbCBhcmduIixmbixhcmduKTsKLS8qCi0gIFxmbGl0 ZXJhbCgpIGFuZCBcZmNvbnRlbnRzKCkgYXJlIHNwZWNpYWwgZnVuY3Rpb25zIHRoYXQgZG8gbm90 IGV2YWx1YXRlCi0gIHRoZWlyIGFyZ3VtZW50cywgYW5kIGFyZSB0cmVhdGVkIHNwZWNpYWxseSBo ZXJlLiAgQWZ0ZXIgdGhlc2UgY29tZSB0aGUKLSAgZnVuY3Rpb25zIHdob3NlIGFyZ3VtZW50cyBh cmUgZXZhbHVhdGVkIGluIHRoZSBub3JtYWwgd2F5LgotKi8KLSNpZmRlZiBDT01NRU5UCi0gICAg LyogKG1vdmVkIHVwKSAqLwotICAgIGlmIChjeCA9PSBGTl9MSVQpIHsgICAgICAgICAgICAgICAg IC8qIGxpdGVyYWwoYXJnMSkgKi8KLSAgICAgICAgZGVidWcoRjExMCwiZmxpdCIseHAsMCk7Ci0g ICAgICAgIHAgPSB4cCA/IHhwIDogIiI7ICAgICAgICAgICAgICAgLyogUmV0dXJuIGEgcG9pbnRl ciB0byBhcmcgaXRzZWxmICovCi0gICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgfQotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSAgICBpZiAoY3ggPT0gRk5fQ09OKSB7ICAgICAgICAgICAgICAgICAvKiBD b250ZW50cyBvZiB2YXJpYWJsZSwgdW5leHBhbmRlZC4gKi8KLSAgICAgICAgY2hhciBjOwotICAg ICAgICBpbnQgc3Vic2NyaXB0ID0gMDsgICAgICAgIAotICAgICAgICBpZiAoIShwID0gYXJncFsw XSkgfHwgISpwKSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgcCA9IGZu dmFsOwotICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgIHNwcmludGYoZm52 YWwsIjxFUlJPUjpNSVNTSU5HX0FSRzpcXGZjb250ZW50cygpPiIpOwotICAgICAgICAgICAgZ290 byBmbmVuZDsKLSAgICAgICAgfQotICAgICAgICBwID0gYnJzdHJpcChwKTsKLSAgICAgICAgaWYg KCpwID09IENNRFEpIHArKzsKLSAgICAgICAgaWYgKChjID0gKnApID09ICclJykgeyAgICAgICAg ICAvKiBTY2FsYXIgdmFyaWFibGUuICovCi0gICAgICAgICAgICBjID0gKisrcDsgICAgICAgICAg ICAgICAgICAgLyogR2V0IElEIGNoYXJhY3Rlci4gKi8KLSAgICAgICAgICAgIHAgPSAiIjsgICAg ICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgZGVmaW5pdGlvbiBpcyBlbXB0eSAqLwotICAgICAg ICAgICAgaWYgKCFjKSB7ICAgICAgICAgICAgICAgICAgIC8qIERvdWJsZSBwYXJhbm9pYSAqLwot ICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgcCA9IGZudmFsOwot ICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICAgICAgc3ByaW50Zihm bnZhbCwiPEVSUk9SOkFSR19CQURfVkFSSUFCTEU6XFxmY29udGVudHMoKT4iKTsKLSAgICAgICAg ICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGMgPj0g JzAnICYmIGMgPD0gJzknKSB7IC8qIERpZ2l0IGZvciBtYWNybyBhcmcgKi8KLSAgICAgICAgICAg ICAgICBpZiAobWFjbHZsIDwgMCkgICAgICAgICAvKiBEaWdpdCB2YXJpYWJsZXMgYXJlIGdsb2Jh bCAqLwotICAgICAgICAgICAgICAgICAgcCA9IGdfdmFyW2NdOyAgICAgICAgIC8qIGlmIG5vIG1h Y3JvIGlzIGFjdGl2ZSAqLwotICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAg IC8qIG90aGVyd2lzZSAqLwotICAgICAgICAgICAgICAgICAgcCA9IG1fYXJnW21hY2x2bF1bYyAt ICcwJ107IC8qIHRoZXkncmUgb24gdGhlIHN0YWNrICovCi0gICAgICAgICAgICB9IGVsc2UgaWYg KGMgPT0gJyonKSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgIHAgPSAobWFjbHZs ID4gLTEpID8gbV9saW5lW21hY2x2bF0gOiB0b3BsaW5lOwotICAgICAgICAgICAgICAgIGlmICgh cCkgcCA9ICIiOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBpbnQgbnggPSBGTlZBTEw7Ci0gICAg ICAgICAgICAgICAgY2hhciAqIHN4ID0gZm52YWw7Ci0gICAgICAgICAgICAgICAgcCA9IGZudmFs OwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgICBpZiAoY21kc3JjKCkgPT0gMCAmJiB0 b3BsaW5lKQotICAgICAgICAgICAgICAgICAgcCA9IHRvcGxpbmU7Ci0gICAgICAgICAgICAgICAg ZWxzZQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgIGlmICh6enN0cmlu ZygiXFxmam9pbigmX1tdLHsgfSwxKSIsJnN4LCZueCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgc3ByaW50Zihm bnZhbCwiPEVSUk9SOk9WRVJGTE9XOlxcZmNvbnRlbnRzKCk+Iik7Ci0JCSAgICBkZWJ1ZyhGMTEw LCJ6enN0cmluZyBmY29udGVudHMoXFwlKikiLHAsMCk7Ci0gICAgICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg aWYgKGlzdXBwZXIoYykpIGMgLT0gKCdhJy0nQScpOwotICAgICAgICAgICAgICAgIHAgPSBnX3Zh cltjXTsgICAgICAgICAgIC8qIExldHRlciBmb3IgZ2xvYmFsIHZhcmlhYmxlICovCi0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBpZiAoIXApIHAgPSAiIjsKLSAgICAgICAgICAgIGdvdG8gZm5l bmQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnJicpIHsgICAgICAgICAgLyogQXJyYXkgcmVm ZXJlbmNlLiAqLwotICAgICAgICAgICAgaW50IHZiaSwgZDsKLSAgICAgICAgICAgIGlmIChhcnJh eW5hbShwLCZ2YmksJmQpIDwgMCkgeyAvKiBHZXQgbmFtZSBhbmQgc3Vic2NyaXB0ICovCi0gICAg ICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICBwID0gZm52YWw7Ci0gICAg ICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFs LCI8RVJST1I6QVJHX0JBRF9BUlJBWTpcXGZjb250ZW50cygpPiIpOwotICAgICAgICAgICAgICAg IGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICB9Ci0JICAgIHN1YnNjcmlwdCA9IGNoa2FycmF5KHZi aSxkKTsgLyogQ2hlY2sgdGhlIGFycmF5ICovCi0gICAgICAgICAgICBpZiAoc3Vic2NyaXB0ID49 IDApIHsJLyogQXJyYXkgaXMgZGVjbGFyZWQ/ICovCi0gICAgICAgICAgICAgICAgdmJpIC09IEFS UkFZQkFTRTsgICAgICAgLyogQ29udmVydCBuYW1lIHRvIGluZGV4ICovCi0gICAgICAgICAgICAg ICAgaWYgKGFfZGltW3ZiaV0gPj0gZCkgeyAgLyogSWYgc3Vic2NyaXB0IGluIHJhbmdlICovCi0g ICAgICAgICAgICAgICAgICAgIGNoYXIgKiphcDsKLSAgICAgICAgICAgICAgICAgICAgYXAgPSBh X3B0clt2YmldOyAgICAvKiBnZXQgZGF0YSBwb2ludGVyICovCi0gICAgICAgICAgICAgICAgICAg IGlmIChhcCkgeyAgICAgICAgICAgLyogYW5kIGlmIHRoZXJlIGlzIG9uZSAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgcCA9IGFwW2RdOwkvKiByZXR1cm4gaXQgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewkJCS8qIEFycmF5IG5vdCBkZWNsYXJlZCBvciBl bGVtZW50ICovCi0gICAgICAgICAgICAgICAgZm52YWxbMF0gPSBOVUw7CQkvKiBvdXQgb2YgcmFu Z2UgLSByZXR1cm4gbnVsbCBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICBwID0gZm52YWw7CQkv KiBmZGMgMjAxMC0xMi0zMCAqLwotICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CQotICAgICAg ICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAg ICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAg ICBzcHJpbnRmKGZudmFsLCI8RVJST1I6QVJHX05PVF9WQVJJQUJMRTpcXGZjb250ZW50cygpPiIp OwotICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgfQotICAgIH0KLSAgICBwID0gZm52 YWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHJlc3VsdCBwb2ludGVyICov Ci0gICAgZm52YWxbMF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCByZXN1 bHQgPSBlbXB0eSBzdHJpbmcgKi8KLQotICAgIGZvciAoaSA9IDA7IGkgPCBhcmduOyBpKyspIHsg ICAgICAgIC8qIExvb3AgdG8gZXhwYW5kIGVhY2ggYXJndW1lbnQgKi8KLSAgICAgICAgbiA9IE1B WEFSR0xFTjsgICAgICAgICAgICAgICAgICAvKiBBbGxvdyBwbGVudHkgb2Ygc3BhY2UgKi8KLSAg ICAgICAgYnBbaV0gPSBzID0gbWFsbG9jKG4rMSk7ICAgICAgICAvKiBBbGxvY2F0ZSBzcGFjZSBm b3IgdGhpcyBhcmd1bWVudCAqLwotICAgICAgICBpZiAoYnBbaV0gPT0gTlVMTCkgeyAgICAgICAg ICAgIC8qIEhhbmRsZSBmYWlsdXJlIHRvIGdldCBzcGFjZSAqLwotICAgICAgICAgICAgZmFpbGVk ID0gMTsKLSAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICBja21ha21zZyhm bnZhbCxGTlZBTEwsIjxFUlJPUjpNQUxMT0NfRkFJTFVSRTpcXGYiLGZuLCIoKT4iLE5VTEwpOwot ICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgfQotICAgICAgICBwID0gYXJncFtpXSA/ IGFyZ3BbaV0gOiAiIjsgICAgIC8qIFBvaW50IHRvIHRoaXMgYXJndW1lbnQgKi8KLQotLyoKLSAg VHJpbSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgZnJvbSB0aGUgb3JpZ2luYWwgYXJndW1l bnQsIGJlZm9yZQotICBldmFsdWF0aW9uLiAgVGhpcyBjb2RlIG5ldyB0byBlZGl0IDE4NC4gIEZp eGVkIGluIGVkaXQgMTk5IHRvIHRyaW0KLSAgYmxhbmtzIEJFRk9SRSBzdHJpcHBpbmcgYnJhY2Vz LgotCi0qLwotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeCwgajsKLSAgICAgICAgICAgIHgg PSBzdHJsZW4ocCk7Ci0gICAgICAgICAgICBqID0geCAtIDE7ICAgICAgICAgICAgICAgICAgLyog VHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlICovCi0gICAgICAgICAgICB3aGlsZSAoaiA+IDAgJiYg KCoocCArIGopID09IFNQIHx8ICoocCArIGopID09IEhUKSkKLSAgICAgICAgICAgICAgKihwICsg ai0tKSA9IE5VTDsKLSAgICAgICAgICAgIHdoaWxlICgqcCA9PSBTUCB8fCAqcCA9PSBIVCkgLyog U3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlICovCi0gICAgICAgICAgICAgIHArKzsKLSAgICAgICAg ICAgIHggPSBzdHJsZW4ocCk7Ci0gICAgICAgICAgICBpZiAoKnAgPT0gJ3snICYmICoocCt4LTEp ID09ICd9JykgeyAvKiBOT1cgc3RyaXAgYnJhY2VzICovCi0gICAgICAgICAgICAgICAgcFt4LTFd ID0gTlVMOwotICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICB4IC09IDI7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotLyogTm93IGV2YWx1YXRlIHRoZSBhcmd1bWVudCAq LwotCi0gICAgICAgIGRlYnVnKEYxMTEsImZuZXZhbCBjYWxsaW5nIHp6c3RyaW5nIixwLG4pOwot ICAgICAgICB0ID0genpzdHJpbmcocCwmcywmbik7ICAgICAgICAgIC8qIEV4cGFuZCBhcmcgaW50 byBuZXcgc3BhY2UgKi8KLSAgICAgICAgZGVidWcoRjEwMSwiZm5ldmFsIHp6c3RyaW5nIiwiIix0 KTsKLSAgICAgICAgZGVidWcoRjEwMSwiZm5ldmFsIHp6c3RyaW5nIiwiIixuKTsKLSAgICAgICAg aWYgKHQgPCAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmbmV2YWwgenpzdHJpbmcgZmFp bHMsIGFyZyIsIiIsaSk7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYg KGZuZGlhZ3MpIHsKLSAgICAgICAgICAgICAgICBpZiAobiA9PSAwKQotICAgICAgICAgICAgICAg ICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxF UlJPUjpBUkdfVE9PX0xPTkc6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19FVkFMX0ZBSUxVUkU6XFxmIixmbiwiKCk+IixO VUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIH0K LSAgICAgICAgZGVidWcoRjExMSwiZm5ldmFsIGFyZyIsYnBbaV0saSk7Ci0gICAgfQotCi0jaWZk ZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgIGludCBqOwotICAgICAgICBmb3Ig KGogPSAwOyBqIDwgYXJnbjsgaisrKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJmbmV2YWwg YXJnIHBvc3QgZXZhbCIsYXJncFtqXSxqKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImZuZXZh bCBldmFsdWF0ZWQgYXJnIixicFtqXSxqKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBE RUJVRyAqLwotICAgIHsKLQkvKiBBZGp1c3QgYXJnbiBmb3IgZW1wdHkgdHJhaWxpbmcgYXJndW1l bnRzLiAqLwotCS8qIEZvciBleGFtcGxlIHdoZW4gYW4gYXJnIGlzIGEgdmFyaWFibGUgbmFtZSBi dXQgdGhlICovCi0JLyogdmFyaWFibGUgaGFzIG5vIHZhbHVlLiAgIEp1bHkgMjAwNi4gKi8KLQlp bnQgaiwgb2xkOyBjaGFyICpwOwotCW9sZCA9IGFyZ247Ci0JZm9yIChqID0gYXJnbiAtIDE7IGog Pj0gMDsgai0tKSB7Ci0JICAgIHAgPSBicFtqXTsKLQkgICAgaWYgKCFwKQotCSAgICAgIGFyZ24t LTsKLQkgICAgZWxzZSBpZiAoISpwKQotCSAgICAgIGFyZ24tLTsKLQkgICAgZWxzZQotCSAgICAg IGJyZWFrOwotCX0KLSNpZmRlZiBERUJVRwotCWlmIChhcmduICE9IG9sZCkKLQkgIGRlYnVnKEYx MDEsImZuZXZhbCBhZGp1c3RlZCBhcmduIiwiIixhcmduKTsKLSNlbmRpZgkvKiBERUJVRyAqLwot ICAgIH0JCi0KLS8qCi0gIEZyb20gdGhpcyBwb2ludCBvbiwgYnBbMC4uYXJnbi0xXSBhcmUgbm90 IE5VTEwgYW5kIGFsbCBtdXN0IGJlIGZyZWVkCi0gIGJlZm9yZSByZXR1cm5pbmcuCi0qLwotICAg IGlmIChhcmduIDwgMSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIENhdGNoIHJlcXVpcmVkIGFy Z3MgbWlzc2luZyAqLwotICAgICAgICBzd2l0Y2ggKGN4KSB7Ci0gICAgICAgICAgY2FzZSBGTl9E RUY6Ci0gICAgICAgICAgY2FzZSBGTl9FVkE6Ci0gICAgICAgICAgY2FzZSBGTl9FWEU6Ci0gICAg ICAgICAgY2FzZSBGTl9DSFI6Ci0gICAgICAgICAgY2FzZSBGTl9DT0Q6Ci0gICAgICAgICAgY2Fz ZSBGTl9NQVg6Ci0gICAgICAgICAgY2FzZSBGTl9NSU46Ci0gICAgICAgICAgY2FzZSBGTl9NT0Q6 Ci0gICAgICAgICAgY2FzZSBGTl9GRDoKLSAgICAgICAgICBjYXNlIEZOX0ZTOgotICAgICAgICAg IGNhc2UgRk5fVE9EOgotICAgICAgICAgIGNhc2UgRk5fRkZOOgotICAgICAgICAgIGNhc2UgRk5f QlNOOgotICAgICAgICAgIGNhc2UgRk5fUkFXOgotICAgICAgICAgIGNhc2UgRk5fQ01EOgotICAg ICAgICAgIGNhc2UgRk5fMkhFWDoKLSAgICAgICAgICBjYXNlIEZOXzJPQ1Q6Ci0gICAgICAgICAg Y2FzZSBGTl9ETkFNOgotI2lmZGVmIEZOX0VSUk1TRwotICAgICAgICAgIGNhc2UgRk5fRVJSTVNH OgotI2VuZGlmIC8qIEZOX0VSUk1TRyAqLwotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgICAgICAg Y2FzZSBGTl9LUkJfVEs6Ci0gICAgICAgICAgY2FzZSBGTl9LUkJfTlg6Ci0gICAgICAgICAgY2Fz ZSBGTl9LUkJfSVY6Ci0gICAgICAgICAgY2FzZSBGTl9LUkJfVFQ6Ci0gICAgICAgICAgY2FzZSBG Tl9LUkJfRkc6Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSAgICAgICAgICBjYXNlIEZOX01K RDI6Ci0gICAgICAgICAgY2FzZSBGTl9OMlRJTToKLSAgICAgICAgICBjYXNlIEZOX0RJTToKLSAg ICAgICAgICBjYXNlIEZOX0RBVEVKOgotICAgICAgICAgIGNhc2UgRk5fUE5DVlQ6Ci0gICAgICAg ICAgY2FzZSBGTl9QRVJNOgotICAgICAgICAgIGNhc2UgRk5fQUxPT0s6Ci0gICAgICAgICAgY2Fz ZSBGTl9UTE9PSzoKLSAgICAgICAgICBjYXNlIEZOX0FCUzoKLSAgICAgICAgICBjYXNlIEZOX0FB RFVNUDoKLSAgICAgICAgICBjYXNlIEZOX0pPSU46Ci0jaWZkZWYgQ0tGTE9BVAotICAgICAgICAg IGNhc2UgRk5fRlBBQlM6Ci0gICAgICAgICAgY2FzZSBGTl9GUEVYUDoKLSAgICAgICAgICBjYXNl IEZOX0ZQTE9HOgotICAgICAgICAgIGNhc2UgRk5fRlBMTjoKLSAgICAgICAgICBjYXNlIEZOX0ZQ TU9EOgotICAgICAgICAgIGNhc2UgRk5fRlBTUVI6Ci0gICAgICAgICAgY2FzZSBGTl9GUEFERDoK LSAgICAgICAgICBjYXNlIEZOX0ZQRElWOgotICAgICAgICAgIGNhc2UgRk5fRlBNVUw6Ci0gICAg ICAgICAgY2FzZSBGTl9GUFBPVzoKLSAgICAgICAgICBjYXNlIEZOX0ZQU1VCOgotICAgICAgICAg IGNhc2UgRk5fRlBJTlQ6Ci0gICAgICAgICAgY2FzZSBGTl9GUFJPVToKLSAgICAgICAgICBjYXNl IEZOX0ZQU0lOOgotICAgICAgICAgIGNhc2UgRk5fRlBDT1M6Ci0gICAgICAgICAgY2FzZSBGTl9G UFRBTjoKLSNlbmRpZiAvKiBDS0ZMT0FUICovCi0jaWZkZWYgVENQU09DS0VUCi0gICAgICAgICAg Y2FzZSBGTl9IU1RBREQ6Ci0gICAgICAgICAgY2FzZSBGTl9IU1ROQU06Ci0jZW5kaWYgLyogVENQ U09DS0VUICovCi0gICAgICAgICAgY2FzZSBGTl9ERUxTRUM6Ci0jaWZkZWYgQ09NTUVOVAotICAg ICAgICAgIGNhc2UgRk5fS1dWQUw6Ci0gICAgICAgICAgY2FzZSBGTl9TTEVFUDoKLSAgICAgICAg ICBjYXNlIEZOX01TTEVFUDoKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYgTlQKLSAgICAg ICAgICBjYXNlIEZOX1NOQU1FOgotICAgICAgICAgIGNhc2UgRk5fTE5BTUU6Ci0jZW5kaWYgLyog TlQgKi8KLSAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBwID0gZm52YWw7Ci0g ICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5W QUxMLCI8RVJST1I6TUlTU0lOR19BUkc6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAg IGdvdG8gZm5lbmQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcCA9IGZudmFsOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlc2UgYWdhaW4uICovCi0gICAgZm52YWxbMF0gPSBO VUw7Ci0KLSAgICBzd2l0Y2ggKGN4KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBEbyBmdW5j dGlvbiBvbiBleHBhbmRlZCBhcmdzLiAqLwotI2lmZGVmIFRDUFNPQ0tFVAotICAgICAgY2FzZSBG Tl9IU1RBREQ6Ci0gICAgICAgIHAgPSBja2FkZHIybmFtZShicFswXSk7Ci0gICAgICAgIGdvdG8g Zm5lbmQ7Ci0gICAgICBjYXNlIEZOX0hTVE5BTToKLSAgICAgICAgcCA9IGNrbmFtZTJhZGRyKGJw WzBdKTsKLSAgICAgICAgZ290byBmbmVuZDsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotICAg ICAgY2FzZSBGTl9ERUY6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmZGVmaW5pdGlvbihhcmcx KSAqLwotICAgICAgICBrID0gaXNhYXJyYXkoYnBbMF0pID8KLQkgICAgbXh4bG9vayhtYWN0YWIs YnBbMF0sbm1hYykgOgotCQlteGxvb2sobWFjdGFiLGJwWzBdLG5tYWMpOwotICAgICAgICBwID0g KGsgPiAtMSkgPyBtYWN0YWJba10ubXZhbCA6ICIiOwotICAgICAgICBnb3RvIGZuZW5kOwotCi0g ICAgICBjYXNlIEZOX0VWQTogICAgICAgICAgICAgICAgICAgICAgLyogXGZldmFsdWF0ZShhcmcx KSAqLwotICAgICAgICBwID0gKihicFswXSkgPyBldmFseChicFswXSkgOiAiIjsKLSAgICAgICAg aWYgKCEqcCAmJiBmbmRpYWdzKSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAg ICAgcCA9IGZudmFsOwotICAgICAgICAgICAgZXZhbGVycihmbik7Ci0gICAgICAgIH0KLSAgICAg ICAgZ290byBmbmVuZDsKLQotICAgICAgY2FzZSBGTl9FWEU6ICAgICAgICAgICAgICAgICAgICAg IC8qIFxmZXhlY3V0ZShhcmcxKSAqLwotICAgICAgICBqID0gKGludClzdHJsZW4ocyA9IGJwWzBd KTsgICAgIC8qIExlbmd0aCBvZiBtYWNybyBpbnZvY2F0aW9uICovCi0gICAgICAgIHAgPSAiIjsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSByZXR1cm4gdmFsdWUgdG8gbnVs bCAqLwotICAgICAgICBpZiAoaikgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZXJl IGlzIGEgbWFjcm8gdG8gZXhlY3V0ZSAqLwotICAgICAgICAgICAgd2hpbGUgKCpzID09IFNQKSBz Kyssai0tOyAgIC8qIHN0cmlwIGxlYWRpbmcgc3BhY2VzICovCi0gICAgICAgICAgICBwID0gczsg ICAgICAgICAgICAgICAgICAgICAgLyogcmVtZW1iZXIgYmVnaW5uaW5nIG9mIG1hY3JvIG5hbWUg Ki8KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBqOyBpKyspIHsgICAvKiBmaW5kIGVuZCBv ZiBtYWNybyBuYW1lICovCi0gICAgICAgICAgICAgICAgaWYgKCpzID09IFNQKQotICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgaWYgKCpzID09IFNQKSAgICAgICB7ICAgICAgIC8qIGlmIHRoZXJlIHdhcyBhIHNw YWNlIGFmdGVyICovCi0gICAgICAgICAgICAgICAgKnMrKyA9IE5VTDsgICAgICAgICAgICAgLyog dGVybWluYXRlIHRoZSBtYWNybyBuYW1lICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKCpzID09 IFNQKSBzKys7ICAgLyogc2tpcCBwYXN0IGFueSBleHRyYSBzcGFjZXMgKi8KLSAgICAgICAgICAg IH0gZWxzZQotICAgICAgICAgICAgICBzID0gIiI7ICAgICAgICAgICAgICAgICAgIC8qIG1heWJl IHRoZXJlIGFyZSBubyBhcmd1bWVudHMgKi8KLSAgICAgICAgICAgIGlmIChwICYmICpwKSB7Ci0g ICAgICAgICAgICAgICAgayA9IG1sb29rKG1hY3RhYixwLG5tYWMpOyAvKiBMb29rIHVwIHRoZSBt YWNybyBuYW1lICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZmV4ZWMgbWxvb2siLHAs ayk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgayA9IC0xOwotICAgICAgICAg ICAgaWYgKGsgPCAwKSB7Ci0gICAgICAgICAgICAgICAgY2hhciAqIHAyID0gcDsKLSAgICAgICAg ICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAg ICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAgIGNrbWFreG1zZyhmbnZhbCxG TlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpOT19TVUNIX01BQ1JP OlxcZiIsZm4sIigiLHAyLCIpPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAgICAgZ290byBmbmVu ZDsKLSAgICAgICAgICAgIH0KLS8qCi0gIFRoaXMgaXMganVzdCBhIFdFRSBiaXQgZGFuZ2Vyb3Vz IGJlY2F1c2Ugd2UgYXJlIGNvcHlpbmcgdXAgdG8gOSBhcmd1bWVudHMKLSAgaW50byB0aGUgc3Bh Y2UgcmVzZXJ2ZWQgZm9yIG9uZS4gIEl0IHdvbid0IG92ZXJydW4gdGhlIGJ1ZmZlciwgYnV0IGlm IHRoZXJlCi0gIGFyZSBsb3RzIG9mIGxvbmcgYXJndW1lbnRzIHdlIG1pZ2h0IGxvc2Ugc29tZS4g IFRoZSBvdGhlciBwcm9ibGVtIGlzIHRoYXQgaWYKLSAgdGhlIG1hY3JvIGhhcyBtb3JlIHRoYW4g MyBhcmd1bWVudHMsIHRoZSA0dGggdGhyb3VnaCBsYXN0IGFyZSBhbGwKLSAgY29uY2F0ZW5hdGVk IG9udG8gdGhlIHRoaXJkLiAgKFRoZSB3b3JrYXJvdW5kIGlzIHRvIHVzZSBzcGFjZXMgcmF0aGVy IHRoYW4KLSAgY29tbWFzIHRvIHNlcGFyYXRlIHRoZW0uKSAgTGVhdmluZyBpdCBsaWtlIHRoaXMg dG8gYXZvaWQgaGF2aW5nIHRvIGFsbG9jYXRlCi0gIHRvbnMgbW9yZSBidWZmZXJzLgotKi8KLSAg ICAgICAgICAgIGlmIChhcmduID4gMSkgeyAgICAgICAgICAgICAvKiBDb21tYXMgdXNlZCBpbnN0 ZWFkIG9mIHNwYWNlcyAqLwotICAgICAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgICAg IGNoYXIgKnAgPSBicFswXTsgICAgICAgIC8qIFJldXNlIHRoaXMgc3BhY2UgKi8KLSAgICAgICAg ICAgICAgICAqcCA9IE5VTDsgICAgICAgICAgICAgICAvKiBNYWtlIGludG8gZG9kbygpIGFyZyBs aXN0ICovCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ247IGkrKykgewotICAg ICAgICAgICAgICAgICAgICBja3N0cm5jYXQocCxicFtpXSxNQVhBUkdMRU4pOwotICAgICAgICAg ICAgICAgICAgICBja3N0cm5jYXQocCwiICIsTUFYQVJHTEVOKTsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgcyA9IGJwWzBdOyAgICAgICAgICAgICAgLyogUG9pbnQgdG8gbmV3 IGxpc3QgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHAgPSAiIjsgICAgICAgICAgICAg ICAgICAgICAvKiBJbml0aWFsaXplIHJldHVybiB2YWx1ZSAqLwotICAgICAgICAgICAgaWYgKGsg Pj0gMCkgeyAgICAgICAgICAgICAgIC8qIElmIG1hY3JvIGZvdW5kIGluIHRhYmxlICovCi0gICAg ICAgICAgICAgICAgLyogR28gc2V0IGl0IHVwIChsaWtlIERPIGNtZCkgKi8KLSAgICAgICAgICAg ICAgICBpZiAoKGogPSBkb2RvKGsscyxjbWRzdGtbY21kbHZsXS5jY2ZsZ3MpKSA+IDApIHsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKGNtcHVzaCgpID4gLTEpIHsgLyogUHVzaCBjb21tYW5kIHBh cnNlciBzdGF0ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBpZmM7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWZjc2F2ID0gaWZjOyAvKiBQdXNoIElGIGNvbmRp dGlvbiBvbiBzdGFjayAqLwotICAgICAgICAgICAgICAgICAgICAgICAgayA9IHBhcnNlcigxKTsg IC8qIENhbGwgcGFyc2VyIHRvIGV4ZWN1dGUgdGhlIG1hY3JvICovCi0gICAgICAgICAgICAgICAg ICAgICAgICBjbXBvcCgpOyAgICAgICAgLyogUG9wIGNvbW1hbmQgcGFyc2VyICovCi0gICAgICAg ICAgICAgICAgICAgICAgICBpZmMgPSBpZmNzYXY7ICAgLyogUmVzdG9yZSBJRiBjb25kaXRpb24g Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID09IDApIHsgICAvKiBObyBlcnJvcnMs IGlnbm9yZSBhY3Rpb24gY21kcy4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0g bXJ2YWxbbWFjbHZsKzFdOyAvKiBJZiBPSywgc2V0IHJldHVybiB2YWx1ZS4gKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBOVUxMKSBwID0gIiI7Ci0gICAgICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgLyog Q2FuJ3QgcHVzaCBhbnkgbW9yZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEw MCwienpzdHJpbmcgZm5ldmFsIGZleGVjIGZhaWx1cmUiLCIiLDApOwotICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCJcbj9cXGZleGVjKCkgdG9vIGRlZXBseSBuZXN0ZWRcbiIpOwotICAg ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNtcG9wKCkgPiAtMSkgOwotICAgICAgICAgICAg ICAgICAgICAgICAgcCA9ICIiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMTAsInp6c3Ry aW5nIGZuZXZhbCBmZXhlY3V0ZSBmaW5hbCBwIixwLDApOwotICAgICAgICBnb3RvIGZuZW5kOwot Ci0jaWZkZWYgUkVDVVJTSVZFCi0gICAgICBjYXNlIEZOX1JESVI6ICAgICAgICAgICAgICAgICAg ICAgLyogXGZyZGlyLi4oKSAtIFJlY3Vyc2l2ZSBkaXIgY291bnQgKi8KLSAgICAgIGNhc2UgRk5f UkZJTDogICAgICAgICAgICAgICAgICAgICAvKiBcZnJmaWxlcygpIC0gUmVjdXJzaXZlIGZpbGUg Y291bnQgKi8KLSAgICAgICAgLyogcmVjdXJzaXZlID0gMjsgKi8gICAgICAgICAgICAvKiBmYWxs IHRocnUuLi4gKi8KLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSAgICAgIGNhc2UgRk5fRkM6ICAg ICAgICAgICAgICAgICAgICAgICAvKiBcZmZpbGVzKCkgLSBGaWxlIGNvdW50LiAqLwotICAgICAg Y2FzZSBGTl9ESVI6IHsgICAgICAgICAgICAgICAgICAgIC8qIFxmZmRpci4oKSAtIERpcmVjdG9y eSBjb3VudC4gKi8KLSAgICAgICAgICBjaGFyIGFidWZbMTZdLCAqczsKLSAgICAgICAgICBjaGFy ICoqIGFwID0gTlVMTDsKLSAgICAgICAgICBpbnQgeCwgeGZsYWdzID0gMDsKLSAgICAgICAgICBp ZiAobWF0Y2hkb3QpCi0gICAgICAgICAgICB4ZmxhZ3MgfD0gWlhfTUFUQ0hET1Q7Ci0gICAgICAg ICAgaWYgKGN4ID09IEZOX1JESVIgfHwgY3ggPT0gRk5fUkZJTCkgewotICAgICAgICAgICAgICB4 ZmxhZ3MgfD0gWlhfUkVDVVJTRTsKLSNpZmRlZiBDS1NZTUxJTksKLSAgICAgICAgICAgICAgLyog UmVjdXJzaXZlIC0gZG9uJ3QgZm9sbG93IHN5bWxpbmtzICovCi0gICAgICAgICAgICAgIHhmbGFn cyB8PSBaWF9OT0xJTktTOwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotICAgICAgICAgIH0KLSAg ICAgICAgICBmYWlsZWQgPSAwOwotICAgICAgICAgIGlmIChhcmduIDwgMSkgewotICAgICAgICAg ICAgICBwID0gIjAiOwotICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgIH0KLSAg ICAgICAgICBpZiAoY3ggPT0gRk5fRElSIHx8IGN4ID09IEZOX1JESVIpIHsgLyogT25seSBsaXN0 IGRpcmVjdG9yaWVzICovCi0JICAgICAgZGVidWcoRjEwMCwiRk5fRElSIG9yIEZOX1JESVIiLCIi LDApOwotICAgICAgICAgICAgICB4ZmxhZ3MgfD0gWlhfRElST05MWTsKLSNpZmRlZiBPUzIKLSAg ICAgICAgICAgICAgenhwbiA9IDE7ICAgICAgICAgICAgICAgICAvKiBVc2UgdGhlIGFsdGVybmF0 ZSBsaXN0ICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgfSBlbHNlIHsgICAgICAgICAg ICAgICAgICAgICAgLyogTGlzdCBvbmx5IGZpbGVzICovCi0JICAgICAgZGVidWcoRjEwMCwiTm90 IEZOX0RJUiBvciBGTl9SRElSIiwiIiwwKTsKLSAgICAgICAgICAgICAgeGZsYWdzIHw9IFpYX0ZJ TE9OTFk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgIHp4cG4gPSAxOyAgICAgICAgICAgICAg ICAgLyogVXNlIHRoZSBhbHRlcm5hdGUgbGlzdCAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAg ICAgIH0KLSAgICAgICAgICBpZiAoKihicFswXSkpIHsKLSAgICAgICAgICAgICAgayA9IG56eHBh bmQoYnBbMF0seGZsYWdzKTsKLSAgICAgICAgICAgICAgaWYgKGsgPCAwKSBrID0gMDsKLSAgICAg ICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLGspOyAgICAvKiBTQUZFICovCi0gICAgICAgICAg ICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHAgPSAiMCI7Ci0K LSAgICAgICAgICBpZiAoYXJnbiA+IDEpIHsgICAgICAgICAgICAgICAvKiBBc3NpZ24gbGlzdCB0 byBhcnJheSAqLwotICAgICAgICAgICAgICBmbnZhbFswXSA9IE5VTDsgICAgICAgICAgIC8qIElu aXRpYWwgcmV0dXJuIHZhbHVlICovCi0gICAgICAgICAgICAgIGNrc3RybmNweShhYnVmLGJwWzFd LDE2KTsgLyogR2V0IGFycmF5IHJlZmVyZW5jZSAqLwotICAgICAgICAgICAgICBzID0gYWJ1ZjsK LSAgICAgICAgICAgICAgaWYgKCpzID09IENNRFEpIHMrKzsKLSAgICAgICAgICAgICAgZmFpbGVk ID0gMTsgICAgICAgICAgICAgICAvKiBBc3N1bWUgaXQncyBiYWQgKi8KLSAgICAgICAgICAgICAg cCA9IGZudmFsOyAgICAgICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQgKi8KLSAgICAgICAg ICAgICAgaWYgKGZuZGlhZ3MpICAgICAgICAgICAgICAvKiBEZWZhdWx0IGlzIHRoaXMgZXJyb3Ig bWVzc2FnZSAqLwotICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19CQURfQVJSQVk6XFxmIixmbiwiKCk+IixO VUxMKTsKLSAgICAgICAgICAgICAgaWYgKHNbMF0gIT0gJyYnKSAgICAgICAgICAvKiAiQWRkcmVz cyIgb2YgYXJyYXkgKi8KLSAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAg ICBpZiAoc1syXSkKLSAgICAgICAgICAgICAgICBpZiAoc1syXSAhPSAnWycgfHwgc1szXSAhPSAn XScpCi0gICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICBpZiAoc1sx XSA+PSA2NCAmJiBzWzFdIDwgOTEpIC8qIENvbnZlcnQgdXBwZXIgdG8gbG93ZXIgKi8KLSAgICAg ICAgICAgICAgICBzWzFdICs9IDMyOwotICAgICAgICAgICAgICBpZiAoKHggPSBkY2xhcnJheShz WzFdLGspKSA8IDApIC8qIEZpbGUgbGlzdCBwbHVzIGNvdW50ICovCi0gICAgICAgICAgICAgICAg Z290byBmbmVuZDsKLSAgICAgICAgICAgICAgZmFpbGVkID0gMDsgICAgICAgICAgICAgICAvKiBV bnNldCBmYWlsdXJlIGZsYWcgKi8KLSAgICAgICAgICAgICAgYXAgPSBhX3B0clt4XTsgICAgICAg ICAgICAvKiBQb2ludCB0byBhcnJheSB3ZSBqdXN0IGRlY2xhcmVkICovCi0gICAgICAgICAgICAg IHNwcmludGYoZm52YWwsIiVkIixrKTsgICAgLyogU0FGRSAqLwotICAgICAgICAgIH0KLSNpZmRl ZiBPUzIKLSAgICAgICAgICBpZiAoYXApIHsgICAgICAgICAgICAgICAgICAgICAvKiBXZSBhcmUg bWFraW5nIGFuIGFycmF5ICovCi0gICAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgICBj aGFyIHRtcFsxNl07Ci0gICAgICAgICAgICAgIGFwWzBdID0gTlVMTDsgICAgICAgICAgICAgLyog Q29udGFpbmluZyBudW1iZXIgb2YgZmlsZXMgICAgKi8KLSAgICAgICAgICAgICAgbWFrZXN0cigm KGFwWzBdKSxja2l0b2EoaykpOwotCi0gICAgICAgICAgICAgIGNrc3RybmNweSh0bXAsZm52YWws MTYpOyAgLyogU2F2ZSByZXR1cm4gdmFsdWUgKi8KLQotICAgICAgICAgICAgICBmb3IgKGkgPSAx OyBpIDw9IGs7IGkrKykgeyAvKiBGaWxsIGl0ICovCi0gICAgICAgICAgICAgICAgICBhcFtpXSA9 IE5VTEw7Ci0gICAgICAgICAgICAgICAgICB6bmV4dChmbnZhbCk7ICAgICAgICAgLyogTmV4dCBm aWxlbmFtZSAqLwotICAgICAgICAgICAgICAgICAgaWYgKCEqZm52YWwpICAgICAgICAgIC8qIE5v IG1vcmUsIGRvbmUgKi8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAv KiBJbiBjYXNlIGEgcHJlbWF0dXJlIGVuZCAqLwotICAgICAgICAgICAgICAgICAgbWFrZXN0cigm KGFwW2ldKSxmbnZhbCk7Ci0gICAgICAgICAgICAgIH0KLSNpZmRlZiBaWFJFV0lORAotICAgICAg ICAgICAgICBrID0genhyZXdpbmQoKTsgICAgICAgICAgIC8qIFJlc2V0IHRoZSBmaWxlIGV4cGFu c2lvbiAqLwotI2Vsc2UKLSAgICAgICAgICAgICAgayA9IG56eHBhbmQoYnBbMF0seGZsYWdzKTsK LSNlbmRpZiAvKiBaWFJFV0lORCAqLwotICAgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwsdG1w LEZOVkFMTCk7IC8qIFJlc3RvcmUgcmV0dXJuIHZhbHVlICovCi0gICAgICAgICAgfQotI2Vsc2Ug LyogT1MyICovCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFr ZSBjb3BpZXMgb2YgdGhlIGxpc3QgKi8KLSAgICAgICAgICAgICAgaW50IGk7IGNoYXIgdG1wWzE2 XTsKLSAgICAgICAgICAgICAgaWYgKGZsaXN0KSB7ICAgICAgICAgICAgICAvKiBGcmVlIG9sZCBm aWxlIGxpc3QsIGlmIGFueSAqLwotICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgZmxpc3Rb aV07IGkrKykgeyAvKiBhbmQgZWFjaCBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICBm cmVlKGZsaXN0W2ldKTsKLSAgICAgICAgICAgICAgICAgICAgICBmbGlzdFtpXSA9IE5VTEw7Ci0g ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBmcmVlKChjaGFyICopZmxpc3Qp OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNrc3RybmNweSh0bXAsZm52YWwsMTYp OyAgLyogU2F2ZSBvdXIgcmV0dXJuIHZhbHVlICovCi0gICAgICAgICAgICAgIGZsaXN0ID0gKGNo YXIgKiopIG1hbGxvYygoaysxKSAqIHNpemVvZihjaGFyICopKTsgLyogTmV3IGFycmF5ICovCi0g ICAgICAgICAgICAgIGlmIChmbGlzdCkgewotICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsg aSA8PSBrOyBpKyspIHsgLyogRmlsbCBpdCAqLwotICAgICAgICAgICAgICAgICAgICAgIGZsaXN0 W2ldID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICB6bmV4dChmbnZhbCk7ICAgICAvKiBO ZXh0IGZpbGVuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgaWYgKCEqZm52YWwpICAgICAg LyogTm8gbW9yZSwgZG9uZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKGZsaXN0W2ldKSxmbnZhbCk7Ci0gICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBpZiAoYXApIHsgICAgICAgICAgICAgLyogSWYg YXJyYXkgcG9pbnRlciBnaXZlbiAqLwotICAgICAgICAgICAgICAgICAgICAgIGFwWzBdID0gTlVM TDsKLSAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYoYXBbMF0pLGNraXRvYShrKSk7Ci0g ICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGs7IGkrKykgeyAvKiBDb3B5IGZp bGUgbGlzdCB0byBhcnJheSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBhcFtpKzFdID0g TlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKGFwW2krMV0pLGZsaXN0 W2ldKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLHRtcCxGTlZBTEwpOyAv KiBSZXN0b3JlIHJldHVybiB2YWx1ZSAqLwotICAgICAgICAgICAgICBmbGlzdG4gPSAwOyAgICAg ICAgICAgICAgIC8qIFJlc2V0IGdsb2JhbCBsaXN0IHBvaW50ZXIgKi8KLSAgICAgICAgICB9Ci0j ZW5kaWYgLyogT1MyICovCi0jaWZkZWYgUkVDVVJTSVZFCi0gICAgICAgICAgcmVjdXJzaXZlID0g cnNhdmU7Ci0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgenhw biA9IHpzYXZlOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgfQotICAgICAgZ290byBmbmVuZDsK LQotICAgICAgY2FzZSBGTl9GSUw6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmbmV4dGZpbGUo KSAtIE5leHQgZmlsZSBpbiBsaXN0LiAqLwotICAgICAgICBwID0gZm52YWw7ICAgICAgICAgICAg ICAgICAgICAgIC8qIChubyBhcmdzKSAqLwotICAgICAgICAqcCA9IE5VTDsKLSNpZmRlZiBPUzIK LSAgICAgICAgenhwbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBPUy8yIC0gdXNlIHRo ZSBhbHRlcm5hdGUgbGlzdCAqLwotICAgICAgICB6bmV4dChwKTsgICAgICAgICAgICAgICAgICAg ICAgIC8qIENhbGwgc3lzdGVtLWRlcGVuZGVudCBmdW5jdGlvbiAqLwotICAgICAgICB6eHBuID0g enNhdmU7ICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgb3JpZ2luYWwgbGlzdCAqLwotI2Vs c2UKLSAgICAgICAgaWYgKGZsaXN0KSAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcnMsIHVz ZSBvdXIgb3duIGxpc3QuICovCi0gICAgICAgICAgaWYgKGZsaXN0W2ZsaXN0bl0pCi0JICAgIHAg PSBmbGlzdFtmbGlzdG4rK107Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIGdvdG8gZm5lbmQ7 Ci0KLSAgICB9IC8qIEJyZWFrIHVwIGJpZyBzd2l0Y2guLi4gKi8KLQotICAgIHN3aXRjaCAoY3gp IHsKLSAgICAgIGNhc2UgRk5fSU5EOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZmluZGV4KHMx LHMyLHN0YXJ0LG9jY3VycmVuY2UpICovCi0gICAgICBjYXNlIEZOX1JJWDogICAgICAgICAgICAg ICAgICAgICAgLyogXGZyaW5kZXgoczEsczIsc3RhcnQsb2NjdXJyZW5jZSkgKi8KLSAgICAgIGNh c2UgRk5fU0VBUkNIOiAgICAgICAgICAgICAgICAgICAvKiBcZnNlYXJjaChwYXQsc3RyaW5nLHN0 YXJ0LG9jYykgKi8KLSAgICAgIGNhc2UgRk5fUlNFQVJDSDoJCQkvKiBcZnJzZWFyY2gocGF0LHN0 cmluZyxzdGFydCxvY2MpICovCi0gICAgICBjYXNlIEZOX0NPVU5UOiB7CQkJLyogXGZjb3VudChz MSxzMixzdGFydCkgKi8KLQlpbnQgaSA9IDAsIHJpZ2h0ID0gMCwgc2VhcmNoID0gMCwgY291bnQg PSAwOwotCWludCBkZXNpcmVkID0gMTsKLSAgICAgICAgcmlnaHQgPSAoY3ggPT0gRk5fUklYIHx8 IGN4ID09IEZOX1JTRUFSQ0gpOwotICAgICAgICBzZWFyY2ggPSAoY3ggPT0gRk5fU0VBUkNIIHx8 IGN4ID09IEZOX1JTRUFSQ0gpOwotCWNvdW50ID0gKGN4ID09IEZOX0NPVU5UKTsKLSAgICAgICAg cCA9ICIwIjsKLSAgICAgICAgaWYgKGFyZ24gPiAxKSB7ICAgICAgICAgICAgICAgICAvKiBPbmx5 IHdvcmtzIGlmIHdlIGhhdmUgMiBvciAzIGFyZ3MgKi8KLSAgICAgICAgICAgIGludCBzdGFydCA9 IDA7Ci0gICAgICAgICAgICBjaGFyICogcGF0ID0gTlVMTDsKLSAgICAgICAgICAgIGxlbjEgPSAo aW50KXN0cmxlbihwYXQgPSBicFswXSk7IC8qIGxlbmd0aCBvZiBzdHJpbmcgdG8gbG9vayBmb3Ig Ki8KLSAgICAgICAgICAgIGxlbjIgPSAoaW50KXN0cmxlbihzID0gYnBbMV0pOyAvKiBsZW5ndGgg b2Ygc3RyaW5nIHRvIGxvb2sgaW4gKi8KLSAgICAgICAgICAgIGlmIChsZW4xIDwgMSB8fCBsZW4y IDwgMSkgICAvKiBXYXRjaCBvdXQgZm9yIGVtcHR5IHN0cmluZ3MgKi8KLSAgICAgICAgICAgICAg Z290byBmbmVuZDsKLSAgICAgICAgICAgIHN0YXJ0ID0gcmlnaHQgPyAtMSA6IDA7ICAgICAvKiBE ZWZhdWx0IHN0YXJ0aW5nIHBvc2l0aW9uICovCi0gICAgICAgICAgICBpZiAoYXJnbiA+IDIpIHsK LSAgICAgICAgICAgICAgICB2YWwxID0gKihicFsyXSkgPyBldmFseChicFsyXSkgOiAiMSI7Ci0J CWlmIChhcmduID4gMykgewotCQkgICAgdmFsMiA9ICooYnBbM10pID8gZXZhbHgoYnBbM10pIDog IjEiOwotCQkgICAgaWYgKGNoa251bSh2YWwyKSkgZGVzaXJlZCA9IGF0b2kodmFsMik7Ci0JCSAg ICBpZiAoZGVzaXJlZCAqIGxlbjEgPiBsZW4yKSBnb3RvIGZuZW5kOwotCQl9Ci0gICAgICAgICAg ICAgICAgaWYgKGNoa251bSh2YWwxKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgdDsKLSAg ICAgICAgICAgICAgICAgICAgdCA9IGF0b2kodmFsMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm ICghc2VhcmNoKSB7ICAgICAgLyogSW5kZXggb3IgUmluZGV4ICovCi0gICAgICAgICAgICAgICAg ICAgICAgICBqID0gbGVuMiAtIGxlbjE7IC8qIExlbmd0aCBkaWZmZXJlbmNlICovCi0gICAgICAg ICAgICAgICAgICAgICAgICB0LS07ICAgICAgICAgICAgIC8qIENvbnZlcnQgcG9zaXRpb24gdG8g MC1iYXNlZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPCAwKSB0ID0gMDsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gdDsKLSAgICAgICAgICAgICAgICAgICAgICAg IGlmICghcmlnaHQgJiYgc3RhcnQgPCAwKSBzdGFydCA9IDA7Ci0gICAgICAgICAgICAgICAgICAg IH0gZWxzZSB7ICAgICAgICAgICAgLyogU2VhcmNoIG9yIFJzZWFyY2ggKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPCAwKSB0 ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaWdodCkgeyAgICAvKiBSaWdodCB0 byBsZWZ0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPiBsZW4yKSB0ID0g bGVuMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGxlbjIgLSB0IC0gMTsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICB4ID0gbGVuMiAtIHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc1t4XSA9IE5VTDsK LSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAvKiBMZWZ0IHRvIHJpZ2h0 ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0IC0gMTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDA7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IGxlbjIpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg ICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgZXZhbGVycihmbik7Ci0gICAg ICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmbmVu ZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0JICAgIGlmIChjb3VudCkgewkJ LyogXGZjb3VudCgpICovCi0JCWludCBqOwotCQlmb3IgKGkgPSAwOyBzdGFydCA8IGxlbjI7IGkr KykgewotCQkgICAgaiA9IGNraW5kZXgocGF0LGJwWzFdLHN0YXJ0LDAsaW5wY2FzW2NtZGx2bF0p OwotCQkgICAgaWYgKGogPT0gMCkgYnJlYWs7Ci0JCSAgICBzdGFydCA9IGo7Ci0JCX0KLQotCSAg ICB9IGVsc2UgaWYgKHNlYXJjaCkgewkvKiBcZnNlYXJjaCgpIG9yIFxmcnNlYXJjaCgpICovCi0K LSAgICAgICAgICAgICAgICBpZiAocmlnaHQgJiYgcGF0WzBdID09ICdeJykgewotICAgICAgICAg ICAgICAgICAgICByaWdodCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gMDsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0KSB7CQkvKiBGcm9tIHJp Z2h0ICovCi0JCSAgICBpbnQgaywgaiA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFy dCA8IDApCi0JCSAgICAgIHN0YXJ0ID0gbGVuMiAtIDE7Ci0JCSAgICBpID0gMDsKLQkJICAgIHdo aWxlIChzdGFydCA+PSAwICYmIGogPD0gZGVzaXJlZCkgewotCQkJZm9yIChpID0gc3RhcnQ7Ci0J CQkgICAgIChpID49IDApICYmIAotCQkJCSAhKGsgPSBja21hdGNoKHBhdCxzK2ksaW5wY2FzW2Nt ZGx2bF0sMSs0KSk7Ci0JCQkgICAgIGktLSkgOwotCQkJaWYgKGsgPCAxKSB7CS8qIE5vIG1hdGNo ICovCi0JCQkgICAgaSA9IDA7Ci0JCQkgICAgYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoaiA9PSBkZXNp cmVkKSB7IC8qIFRoZSBtYXRjaCB3ZSB3YW50PyAqLwotCQkJICAgIGkgKz0gazsJLyogWWVzLCBy ZXR1cm4gc3RyaW5nIGluZGV4ICovCi0JCQkgICAgYnJlYWs7Ci0JCQl9Ci0JCQlqKys7CQkvKiBO bywgY291bnQgdGhpcyBtYXRjaCAqLwotCQkJc1tpXSA9IE5VTDsJLyogbnVsbCBpdCBvdXQgKi8K LQkJCXN0YXJ0ID0gaS0xOwkvKiBtb3ZlIGxlZnQgYW5kIGxvb2sgYWdhaW4gKi8KLQkJICAgIH0K LQotICAgICAgICAgICAgICAgIH0gZWxzZSB7CQkvKiBGcm9tIGxlZnQgKi8KLQkJICAgIGludCBq OwotCQkgICAgaSA9IDA7Ci0JCSAgICBmb3IgKGogPSAxOyBqIDw9IGRlc2lyZWQgJiYgc3RhcnQg PCBsZW4yOyBqKyspIHsKLQkJCWkgPSBja21hdGNoKHBhdCwmc1tzdGFydF0saW5wY2FzW2NtZGx2 bF0sMSs0KTsKLQkJCWlmIChpID09IDAgfHwgaiA9PSBkZXNpcmVkKSBicmVhazsKLQkJCXN0YXJ0 ICs9IGkgKyAxOwotCQkgICAgfQkJCQotCQkgICAgaWYgKGogPT0gZGVzaXJlZCAmJiBpICE9IDAp Ci0JCSAgICAgIGkgKz0gc3RhcnQ7Ci0JCSAgICBlbHNlCi0JCSAgICAgIGkgPSAwOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7CQkJLyogaW5kZXggb3IgcmluZGV4ICov Ci0JCWludCBqID0gMDsKLQkJaSA9IDA7Ci0JCWZvciAoaiA9IDE7IGogPD0gZGVzaXJlZCAmJiBz dGFydCA8IGxlbjI7IGorKykgewotCQkgICAgaSA9IGNraW5kZXgocGF0LGJwWzFdLHN0YXJ0LHJp Z2h0LGlucGNhc1tjbWRsdmxdKTsKLQkJICAgIGlmIChpID09IDAgfHwgaiA9PSBkZXNpcmVkKSBi cmVhazsKLQkJICAgIHN0YXJ0ID0gKHJpZ2h0KSA/IGxlbjIgLSBpICsgMSA6IGk7Ci0JCX0KLQkJ aWYgKGogIT0gZGVzaXJlZCkKLQkJICBpID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IHNwcmludGYoZm52YWwsIiVkIixpKTsgICAgICAvKiBTQUZFICovCi0gICAgICAgICAgICBwID0g Zm52YWw7Ci0gICAgICAgIH0KLSAgICAgICAgZ290byBmbmVuZDsKLSAgICAgIH0KLQotICAgICAg Y2FzZSBGTl9SUEw6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmcmVwbGFjZShzMSxzMixzMykg Ki8KLSAgICAgIC8qCi0gICAgICAgIHMgPSBicFswXSA9IHNvdXJjZSBzdHJpbmcKLSAgICAgICAg ICAgIGJwWzFdID0gbWF0Y2ggc3RyaW5nCi0gICAgICAgICAgICBicFsyXSA9IHJlcGxhY2VtZW50 IHN0cmluZwotICAgICAgICAgICAgYnBbM10gPSB3aGljaCBvY2N1cnJlbmNlIChkZWZhdWx0ID0g YWxsKTsKLSAgICAgICAgcCA9IGZudmFsID0gZGVzdGluYXRpb24gKHJlc3VsdCkgc3RyaW5nCi0g ICAgICAqLwotICAgICAgICBpZiAoYXJnbiA8IDEpICAgICAgICAgICAgICAgICAgIC8qIE5vdGhp bmcgKi8KLSAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICBpZiAoYXJnbiA8IDIpIHsgICAg ICAgICAgICAgICAgIC8qIE9ubHkgd29ya3MgaWYgd2UgaGF2ZSAyIG9yIDMgYXJncyAqLwotICAg ICAgICAgICAgY2tzdHJuY3B5KHAsYnBbMF0sRk5WQUxMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgIGludCBvY2N1ciA9IDAsIHh4ID0gMCwgajI7Ci0gICAgICAgICAgICBsZW4xID0g KGludClzdHJsZW4oYnBbMF0pOyAgLyogbGVuZ3RoIG9mIHN0cmluZyB0byBsb29rIGluICovCi0g ICAgICAgICAgICBsZW4yID0gKGludClzdHJsZW4oYnBbMV0pOyAgLyogbGVuZ3RoIG9mIHN0cmlu ZyB0byBsb29rIGZvciAqLwotICAgICAgICAgICAgbGVuMyA9IChhcmduIDwgMykgPyAwIDogKGlu dClzdHJsZW4oYnBbMl0pOyAvKiBMZW4gb2YgcmVwbGFjZW1udCAqLwotICAgICAgICAgICAgaiA9 IGxlbjEgLSBsZW4yICsgMTsKLSAgICAgICAgICAgIGoyID0gajsKLSAgICAgICAgICAgIGlmIChh cmduID4gMykgewotICAgICAgICAgICAgICAgIGlmIChjaGtudW0oYnBbM10pKSB7Ci0gICAgICAg ICAgICAgICAgICAgIG9jY3VyID0gYXRvaShicFszXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAg aWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxM LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1FUklD OlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogSWYgYXJncyBv dXQgb2Ygd2hhY2suLi4gKi8KLSAgICAgICAgICAgIGlmIChqIDwgMSB8fCBsZW4xID09IDAgfHwg bGVuMiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KHAsYnBbMF0sRk5WQUxMKTsg LyoganVzdCByZXR1cm4gb3JpZ2luYWwgc3RyaW5nICovCi0gICAgICAgICAgICAgICAgcFtGTlZB TExdID0gTlVMOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmFnYWluOgot ICAgICAgICAgICAgICAgIHMgPSBicFswXTsgICAgICAgICAgICAgIC8qIFBvaW50IHRvIGJlZ2lu bmluZyBvZiBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoai0tID4gMCkgeyAgICAg ICAvKiBGb3IgZWFjaCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFja3N0 cmNtcChicFsxXSxzLGxlbjIsaW5wY2FzW2NtZGx2bF0pICYmCi0gICAgICAgICAgICAgICAgICAg ICAgICAob2NjdXIgPT0gMCB8fCBvY2N1ciA9PSArK3h4KSkgewotICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGxlbjMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHko cCxicFsyXSxGTlZBTEwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgKz0gbGVuMzsK LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHMgKz0g bGVuMjsgICAgICAvKiBhbmQgc2tpcCBwYXN0IGl0LiAqLwotICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgeyAgICAgICAgICAgIC8qIE5vLCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgKnAr KyA9ICpzKys7ICAgIC8qIGp1c3QgY29weSB0aGlzIGNoYXJhY3RlciAqLwotICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICpwID0gTlVMOwot ICAgICAgICAgICAgICAgIHdoaWxlICgoKnArKyA9ICpzKyspKTsKLSAgICAgICAgICAgICAgICBp ZiAob2NjdXIgPCAwKSB7ICAgICAgICAvKiBjaGVhcC4uLiAqLwotICAgICAgICAgICAgICAgICAg ICBvY2N1ciA9IHh4ICsgb2NjdXIgKyAxOwotICAgICAgICAgICAgICAgICAgICB4eCA9IDA7Ci0g ICAgICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICAgICAgICAgICAgaiA9IGoy OwotICAgICAgICAgICAgICAgICAgICBpZiAob2NjdXIgPiAwKQotICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gcmFnYWluOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgIGNh c2UgRk5fQ0hSOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZmNoYXJhY3RlcihhcmcxKSAqLwot ICAgICAgICB2YWwxID0gKihicFswXSkgPyBldmFseChicFswXSkgOiAiIjsKLSAgICAgICAgaWYg KGNoa251bSh2YWwxKSkgeyAgICAgICAgICAgICAvKiBNdXN0IGJlIG51bWVyaWMgKi8KLSAgICAg ICAgICAgIGkgPSBhdG9pKHZhbDEpOwotICAgICAgICAgICAgaWYgKGkgPj0gMCAmJiBpIDwgMjU2 KSB7ICAgIC8qIE11c3QgYmUgYW4gOC1iaXQgdmFsdWUgKi8KLSAgICAgICAgICAgICAgICBwID0g Zm52YWw7Ci0gICAgICAgICAgICAgICAgKnArKyA9IChjaGFyKSBpOwotICAgICAgICAgICAgICAg ICpwID0gTlVMOwotICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZm5k aWFncykKLSAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLGZuLCIoKT4i LE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmFp bGVkID0gMTsKLSAgICAgICAgICAgIGV2YWxlcnIoZm4pOwotICAgICAgICB9Ci0gICAgICAgIGdv dG8gZm5lbmQ7Ci0KLSAgICAgIGNhc2UgRk5fQ09EOiAgICAgICAgICAgICAgICAgICAgICAvKiBc ZmNvZGUoY2hhcikgKi8KLSAgICAgICAgaWYgKChpbnQpc3RybGVuKGJwWzBdKSA+IDApIHsKLSAg ICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICAgIGkgPSAqYnBbMF07Ci0gICAgICAgICAg ICBzcHJpbnRmKHAsIiVkIiwoaSAmIDB4ZmYpKTsgLyogU0FGRSAqLwotICAgICAgICB9IGVsc2Ug cCA9ICIwIjsJCQkvKiBDYW4ndCBoYXBwZW4gKi8KLSAgICAgICAgZ290byBmbmVuZDsKLQotICAg ICAgY2FzZSBGTl9MRU46ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmbGVuZ3RoKGFyZzEpICov Ci0gICAgICAgIGlmIChhcmduID4gMCkgewotICAgICAgICAgICAgcCA9IGZudmFsOwotICAgICAg ICAgICAgc3ByaW50ZihwLCIlZCIsKGludClzdHJsZW4oYnBbMF0pKTsgLyogU0FGRSAqLwotICAg ICAgICB9IGVsc2UgcCA9ICIwIjsKLSAgICAgICAgZ290byBmbmVuZDsKLQotICAgICAgY2FzZSBG Tl9MT1c6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmbG93ZXIoYXJnMSkgKi8KLSAgICAgICAg cyA9IGJwWzBdID8gYnBbMF0gOiAiIjsKLSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICB3aGls ZSAoKnMpIHsKLSAgICAgICAgICAgIGlmIChpc3VwcGVyKCpzKSkKLSAgICAgICAgICAgICAgKnAg PSAoY2hhcikgdG9sb3dlcigqcyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICpw ID0gKnM7Ci0gICAgICAgICAgICBwKys7IHMrKzsKLSAgICAgICAgfQotICAgICAgICAqcCA9IE5V TDsKLSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAgICBjYXNl IEZOX01BWDogICAgICAgICAgICAgICAgICAgICAgLyogXGZtYXgoYXJnMSxhcmcyKSAqLwotICAg ICAgY2FzZSBGTl9NSU46ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmbWluKGFyZzEsYXJnMikg Ki8KLSAgICAgIGNhc2UgRk5fTU9EOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZm1vZChhcmcx LGFyZzIpICovCi0gICAgICAgIHZhbDEgPSAqKGJwWzBdKSA/IGV2YWx4KGJwWzBdKSA6ICIiOwot I2lmZGVmIENPTU1FTlQKLSAgICAgICAgLyogTm8gbG9uZ2VyIG5lY2Vzc2FyeSBiZWNhdXNlIGV2 YWx4KCkgbm8gbG9uZ2VyIG92ZXJ3cml0ZXMgaXRzICovCi0gICAgICAgIC8qIHJlc3VsdCBldmVy eSB0aW1lIGl0J3MgY2FsbGVkICgyMDAwLzA5LzIzKS4gKi8KLSAgICAgICAgZnJlZShicFswXSk7 Ci0gICAgICAgIGJwWzBdID0gTlVMTDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGlm IChhcmduID4gMSkgewotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIC8qIERpdHRvLi4uICov Ci0gICAgICAgICAgICBicFswXSA9IG1hbGxvYygoaW50KXN0cmxlbih2YWwxKSsxKTsKLSAgICAg ICAgICAgIGlmIChicFswXSkKLSAgICAgICAgICAgICAgc3RyY3B5KGJwWzBdLHZhbDEpOyAgICAg ICAvKiBzYWZlICovCi0gICAgICAgICAgICB2YWwxID0gYnBbMF07Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotICAgICAgICAgICAgdmFsMiA9ICooYnBbMV0pID8gZXZhbHgoYnBbMV0pIDogIiI7Ci0g ICAgICAgICAgICBpZiAoY2hrbnVtKHZhbDEpICYmIGNoa251bSh2YWwyKSkgewotICAgICAgICAg ICAgICAgIGkgPSBhdG9pKHZhbDEpOwotICAgICAgICAgICAgICAgIGogPSBhdG9pKHZhbDIpOwot ICAgICAgICAgICAgICAgIHN3aXRjaCAoeSkgewotICAgICAgICAgICAgICAgICAgY2FzZSBGTl9N QVg6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChqIDwgaSkgaiA9IGk7Ci0gICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBGTl9NSU46Ci0gICAgICAgICAg ICAgICAgICAgIGlmIChqID4gaSkgaiA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgY2FzZSBGTl9NT0Q6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChq ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2tt YWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi PEVSUk9SOkRJVklERV9CWV9aRVJPOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZudmFsWzBdID0gTlVM OwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAgICAg ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgaiA9IGkgJSBqOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgICAgICAgc3ByaW50 ZihwLCIlZCIsaik7ICAgICAgLyogU0FGRSAqLwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgIGV2YWxlcnIoZm4pOwotICAg ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgcCA9IHZhbDE7Ci0gICAgICAgIGdvdG8gZm5lbmQ7 Ci0gICAgfSAvKiBCcmVhayB1cCBiaWcgc3dpdGNoLi4uICovCi0KLSAgICBzd2l0Y2ggKHkpIHsK LSAgICAgIGNhc2UgRk5fU1VCOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZnN1YnN0cihhcmcx LGFyZzIsYXJnMykgKi8KLSAgICAgIGNhc2UgRk5fUklHOiAgICAgICAgICAgICAgICAgICAgICAv KiBcZnJpZ2h0KGFyZzEsYXJnMikgKi8KLSAgICAgIGNhc2UgRk5fTEVGOiAgICAgICAgICAgICAg ICAgICAgICAvKiBcZmxlZnQoYXJnMSxhcmcyKSAqLwotICAgICAgICBpZiAoYXJnbiA8IDEpCi0g ICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgdmFsMSA9ICIiOwotICAgICAgICBpZiAoYXJn biA+IDEpCi0gICAgICAgICAgaWYgKCooYnBbMV0pKQotICAgICAgICAgICAgdmFsMSA9ICBldmFs eChicFsxXSk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICBpZiAoYnBbMV0pIGZyZWUoYnBbMV0p OyAgICAgICAgIC8qIEhhdmUgdG8gY29weSB0aGlzICovCi0gICAgICAgIGJwWzFdID0gbWFsbG9j KChpbnQpc3RybGVuKHZhbDEpKzEpOwotICAgICAgICBpZiAoIWJwWzFdKSB7Ci0gICAgICAgICAg ICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYgKGZuZGlhZ3MpIHsKLSAgICAgICAgICAgICAg ICBwID0gZm52YWw7Ci0gICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAg ICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6TUFMTE9DX0ZBSUxVUkU6XFxmIixmbiwiKCk+ IixOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAg IH0KLSAgICAgICAgc3RyY3B5KGJwWzFdLHZhbDEpOyAgICAgICAgICAgICAvKiBzYWZlICovCi0g ICAgICAgIHZhbDEgPSBicFsxXTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIHZhbDIg PSAiIjsKLSAgICAgICAgaWYgKGFyZ24gPiAyKQotICAgICAgICAgIGlmICgqKGJwWzJdKSkKLSAg ICAgICAgICAgIHZhbDIgPSBldmFseChicFsyXSk7Ci0gICAgICAgIGlmICgKLSAgICAgICAgICAg ICgoYXJnbiA+IDEpICYmIChpbnQpc3RybGVuKHZhbDEpICYmICFyZGlnaXRzKHZhbDEpKSB8fAot ICAgICAgICAgICAgKChjeCA9PSBGTl9TVUIpICYmCi0gICAgICAgICAgICAgICgoYXJnbiA+IDIp ICYmIChpbnQpc3RybGVuKHZhbDIpICYmICFyZGlnaXRzKHZhbDIpKSkKLSAgICAgICAgICAgICkg ewotICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgIGV2YWxlcnIoZm4pOwotICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW50IGx4OwotICAgICAgICAgICAgcCA9IGZudmFs OyAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gcmVzdWx0ICovCi0gICAgICAgICAgICBs eCA9IHN0cmxlbihicFswXSk7ICAgICAgICAgLyogbGVuZ3RoIG9mIGFyZzEgKi8KLSAgICAgICAg ICAgIGlmIChjeCA9PSBGTl9TVUIpIHsgICAgICAgICAvKiBzdWJzdHJpbmcgKi8KLSAgICAgICAg ICAgICAgICBrID0gKGFyZ24gPiAyKSA/IGF0b2kodmFsMikgOiBNQVhBUkdMRU47IC8qIGxlbmd0 aCAqLwotICAgICAgICAgICAgICAgIGogPSAoYXJnbiA+IDEpID8gYXRvaSh2YWwxKSA6IDE7IC8q IHN0YXJ0IHBvcyBmb3Igc3Vic3RyICovCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGN4ID09IEZO X0xFRikgeyAgLyogbGVmdCAqLwotICAgICAgICAgICAgICAgIGsgPSAoYXJnbiA+IDEpID8gYXRv aSh2YWwxKSA6IGx4OwotICAgICAgICAgICAgICAgIGogPSAxOwotICAgICAgICAgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJpZ2h0ICovCi0gICAgICAgICAgICAg ICAgayA9IChhcmduID4gMSkgPyBhdG9pKHZhbDEpIDogbHg7IC8qIGxlbmd0aCAqLwotICAgICAg ICAgICAgICAgIGogPSBseCAtIGsgKyAxOyAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IHBvcyBm b3IgcmlnaHQgKi8KLSAgICAgICAgICAgICAgICBpZiAoaiA8IDEpIGogPSAxOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKGsgPiAwICYmIGogPD0gbHgpIHsgICAgICAgICAgICAgIC8q IGlmIHN0YXJ0IHBvcyBpbiByYW5nZSAqLwotICAgICAgICAgICAgICAgIHMgPSBicFswXStqLTE7 ICAgICAgICAgICAgICAgICAgIC8qIHBvaW50IHRvIHNvdXJjZSBzdHJpbmcgKi8KLSAgICAgICAg ICAgICAgICBmb3IgKGkgPSAwOyAoaSA8IGspICYmICgqcCsrID0gKnMrKyk7IGkrKykgOyAgLyog Y29weSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKnAgPSBOVUw7ICAgICAgICAgICAg ICAgICAgIC8qIHRlcm1pbmF0ZSB0aGUgcmVzdWx0ICovCi0gICAgICAgICAgICBwID0gZm52YWw7 ICAgICAgICAgICAgICAgICAgLyogYW5kIHBvaW50IHRvIGl0LiAqLwotICAgICAgICB9Ci0gICAg ICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgIGNhc2UgRk5fVVBQOiAgICAgICAgICAgICAgICAgICAg ICAvKiBcZnVwcGVyKGFyZzEpICovCi0gICAgICAgIHMgPSBicFswXSA/IGJwWzBdIDogIiI7Ci0g ICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgd2hpbGUgKCpzKSB7Ci0gICAgICAgICAgICBpZiAo aXNsb3dlcigqcykpCi0gICAgICAgICAgICAgICpwID0gKGNoYXIpIHRvdXBwZXIoKnMpOwotICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAqcCA9ICpzOwotICAgICAgICAgICAgcCsrOyBz Kys7Ci0gICAgICAgIH0KLSAgICAgICAgKnAgPSBOVUw7Ci0gICAgICAgIHAgPSBmbnZhbDsKLSAg ICAgICAgZ290byBmbmVuZDsKLQotICAgICAgY2FzZSBGTl9SRVA6ICAgICAgICAgICAgICAgICAg ICAgIC8qIFxmcmVwZWF0KHRleHQsbnVtYmVyKSAqLwotICAgICAgICBpZiAoYXJnbiA8IDEpCi0g ICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgdmFsMSA9ICIxIjsKLSAgICAgICAgaWYgKGFy Z24gPiAxKQotICAgICAgICAgIGlmICgqKGJwWzFdKSkKLSAgICAgICAgICAgIHZhbDEgPSBldmFs eChicFsxXSk7Ci0gICAgICAgIGlmIChjaGtudW0odmFsMSkpIHsgICAgICAgICAgICAgLyogUmVw ZWF0IGNvdW50ICovCi0gICAgICAgICAgICBuID0gYXRvaSh2YWwxKTsKLSAgICAgICAgICAgIGRl YnVnKEYxMTEsIlNVTkRBWSBmcmVwZWF0IG4iLHZhbDEsbik7Ci0gICAgICAgICAgICBpZiAobiA+ IDApIHsgICAgICAgICAgICAgICAgLyogTWFrZSBuIGNvcGllcyAqLwotICAgICAgICAgICAgICAg IHAgPSBmbnZhbDsKLSAgICAgICAgICAgICAgICAqcCA9ICdcMCc7Ci0gICAgICAgICAgICAgICAg ayA9IChpbnQpc3RybGVuKGJwWzBdKTsgLyogTWFrZSBzdXJlIHN0cmluZyBoYXMgc29tZSBsZW5n dGggKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJTVU5EQVkgZnJlcGVhdCBrIiwiIixr KTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJTVU5EQVkgZnJlcGVhdCBGTlZBTEwiLCIi LEZOVkFMTCk7Ci0gICAgICAgICAgICAgICAgaWYgKGsgKiBuID49IEZOVkFMTCkgeyAgLyogQnV0 IG5vdCB0b28gbXVjaC4uLiAqLwotICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAg ICAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAgICAgICBja21h a21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJP UjpSRVNVTFRfVE9PX0xPTkc6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgICAgICAg ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgIGZudmFsWzBdID0gTlVMOwotICAgICAgICAg ICAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChrID4gMCkgeyAgICAgICAgICAg IC8qIElmIHRoZXJlIGlzIHNvbWV0aGluZyB0byBjb3B5ICovCi0gICAgICAgICAgICAgICAgICAg IGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsgLyogQ29weSBsb29wICovCi0gICAgICAgICAgICAg ICAgICAgICAgICBzID0gYnBbMF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAw OyBqIDwgazsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwIC0gZm52 YWwpID49IEZOVkFMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAv KiBzaG91bGRuJ3QgaGFwcGVuLi4uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICpzKys7Ci0gICAgICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgKnAgPSBOVUw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgIGV2YWxlcnIoZm4p OwotICAgICAgICB9Ci0gICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgZ290byBmbmVuZDsKLQot I2lmbmRlZiBOT0ZSSUxMUwotICAgICAgY2FzZSBGTl9SRVY6ICAgICAgICAgICAgICAgICAgICAg IC8qIFxmcmV2ZXJzZSgpICovCi0gICAgICAgIGlmIChhcmduIDwgMSkKLSAgICAgICAgICBnb3Rv IGZuZW5kOwotICAgICAgICB5eXN0cmluZyhicFswXSwmcCk7Ci0gICAgICAgIGdvdG8gZm5lbmQ7 Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotICAgICAgY2FzZSBGTl9SUEE6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFxmcnBhZCgpIGFuZCBcZmxwYWQoKSAqLwotICAgICAgY2FzZSBGTl9MUEE6 Ci0gICAgICAgIGlmIChhcmduIDwgMSkKLSAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB2 YWwxID0gIiI7Ci0gICAgICAgIGlmIChhcmduID4gMSkKLSAgICAgICAgICBpZiAoKihicFsxXSkp Ci0gICAgICAgICAgICB2YWwxID0gZXZhbHgoYnBbMV0pOwotICAgICAgICBpZiAoYXJnbiA9PSAx KSB7ICAgICAgICAgICAgICAgIC8qIElmIGEgbnVtYmVyIHdhc24ndCBnaXZlbiAqLwotICAgICAg ICAgICAgcCA9IGZudmFsOyAgICAgICAgICAgICAgICAgIC8qIGp1c3QgcmV0dXJuIHRoZSBvcmln aW5hbCBzdHJpbmcgKi8KLSAgICAgICAgICAgIGNrc3RybmNweShwLGJwWzBdLEZOVkFMTCk7Ci0g ICAgICAgIH0gZWxzZSBpZiAoYXJnbiA+IDEgJiYgICEqdmFsMSkgewotICAgICAgICAgICAgZmFp bGVkID0gMTsKLSAgICAgICAgICAgIGV2YWxlcnIoZm4pOwotICAgICAgICB9IGVsc2UgLyogaWYg KGNoa251bSh2YWwxKSkgKi8geyAvKiBSZXBlYXQgY291bnQgKi8KLSAgICAgICAgICAgIGNoYXIg cGM7Ci0gICAgICAgICAgICBuID0gYXRvaSh2YWwxKTsKLSAgICAgICAgICAgIGlmIChuID49IDAp IHsKLSAgICAgICAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgICAgICAgayA9IChpbnQp c3RybGVuKGJwWzBdKTsgLyogTGVuZ3RoIG9mIHN0cmluZyB0byBiZSBwYWRkZWQgKi8KLSAgICAg ICAgICAgICAgICBpZiAoayA+PSBuKSB7ICAgICAgICAgICAvKiBJdCdzIGFscmVhZHkgbG9uZyBl bm91Z2ggKi8KLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHAsYnBbMF0sRk5WQUxMKTsK LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAobiArIGsg PD0gRk5WQUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYyA9IChjaGFyKSAoKGFyZ24g PCAzKSA/IFNQIDogKmJwWzJdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGMpIHBj ID0gU1A7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3ggPT0gRk5fUlBBKSB7IC8qIFJQ QUQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJuY3B5KHAsYnBbMF0sayk7IC8q IChsZWF2ZSBpdCBsaWtlIHRoaXMpICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcFtr XSA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICs9IGs7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgZm9yIChpID0gazsgaSA8IG47IGkrKykKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpwKysgPSBwYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7ICAgICAgICAvKiBMUEFEICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiAtPSBr OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gcGM7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RybmNweShwLGJwWzBdLGspOyAvKiAobGVhdmUgaXQgbGlrZSB0aGlzKSAq LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBba10gPSBOVUw7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgcCArPSBrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICpwID0gTlVMOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwID0gZm52YWw7Ci0g ICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSNpZmRlZiBaRkNEQVQKLSAgICAgIGNhc2UgRk5fRkQ6ICAg ICAgICAgICAgICAgICAgICAgICAvKiBcZmRhdGUoZmlsZW5hbWUpICovCi0gICAgICAgIHAgPSBm bnZhbDsKLSAgICAgICAgcyA9IHpmY2RhdChicFswXSk7Ci0gICAgICAgIGlmICghcykgcyA9ICIi OwotICAgICAgICBpZiAoISpzKSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAg ICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVS Uk9SOkZJTEVfTk9UX0ZPVU5EOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICBnb3Rv IGZuZW5kOwotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNweShmbnZhbCxzLEZOVkFMTCk7Ci0j ZW5kaWYgLyogWkZDREFUICovCi0gICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICB9IC8qIEJyZWFr IHVwIGJpZyBzd2l0Y2guLi4gKi8KLQotICAgIHN3aXRjaCAoeSkgewotICAgICAgY2FzZSBGTl9G UzogewkJCS8qIFxmc2l6ZShmaWxlbmFtZSkgKi8KLQkgIENLX09GRl9UIHo7Ci0JICBwID0gZm52 YWw7Ci0JICB6ID0gemNoa2koYnBbMF0pOwotCSAgaWYgKHogPCAoQ0tfT0ZGX1QpMCkgewotCSAg ICAgIGZhaWxlZCA9IDE7Ci0JICAgICAgaWYgKGZuZGlhZ3MpIHsKLQkJICBpZiAoeiA9PSAoQ0tf T0ZGX1QpLTEpCi0JCSAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0JCQkgICAgICI8RVJST1I6 RklMRV9OT1RfRk9VTkQ6XFxmIixmbiwiKCk+IixOVUxMKTsKLQkJICBlbHNlIGlmICh6ID09IChD S19PRkZfVCktMikKLQkJICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLQkJCSAgICAgIjxFUlJP UjpGSUxFX05PVF9SRUFEQUJMRTpcXGYiLGZuLCIoKT4iLE5VTEwpOwotCQkgIGVsc2UgaWYgKHog PT0gKENLX09GRl9UKS0zKQotCQkgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotCQkJICAgICAi PEVSUk9SOkZJTEVfTk9UX0FDQ0VTU0lCTEU6XFxmIixmbiwiKCk+IixOVUxMKTsKLQkJICBlbHNl Ci0JCSAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0JCQkgICAgICI8RVJST1I6RklMRV9FUlJP UjpcXGYiLGZuLCIoKT4iLE5VTEwpOwotCSAgICAgIH0KLQkgICAgICBnb3RvIGZuZW5kOwotCSAg fQotCSAgY2tzdHJuY3B5KGZudmFsLGNrZnN0b2EoeiksRk5WQUxMKTsKLQkgIGdvdG8gZm5lbmQ7 Ci0gICAgICB9Ci0gICAgICBjYXNlIEZOX1ZFUjogICAgICAgICAgICAgICAgICAgICAgLyogXGZ2 ZXJpZnkoKSAqLwotCXAgPSAiLTEiOwotCWlmIChhcmduID09IDEpCQkJLyogTm8gc2Vjb25kIGFy ZyAqLwotCSAgZ290byBmbmVuZDsKLQllbHNlIGlmICghYnBbMV0pCQkvKiBPciBzZWNvbmQgYXJn IG51bGwgKi8KLQkgIGdvdG8gZm5lbmQ7Ci0JZWxzZSBpZiAoISooYnBbMV0pKQkJLyogb3IgZW1w dHkuICovCi0JICBnb3RvIGZuZW5kOwotICAgICAgICBwID0gIjAiOwotICAgICAgICBpZiAoYXJn biA+IDEpIHsgICAgICAgICAgICAgICAgIC8qIE9ubHkgd29ya3MgaWYgd2UgaGF2ZSAyIG9yIDMg YXJncyAqLwotICAgICAgICAgICAgaW50IHN0YXJ0OwotICAgICAgICAgICAgY2hhciAqczIsIGNo MSwgY2gyOwotICAgICAgICAgICAgc3RhcnQgPSAwOwotICAgICAgICAgICAgaWYgKGFyZ24gPiAy KSB7ICAgICAgICAgICAgIC8qIFN0YXJ0aW5nIHBvc2l0aW9uIHNwZWNpZmllZCAqLwotICAgICAg ICAgICAgICAgIHZhbDEgPSAqKGJwWzJdKSA/IGV2YWx4KGJwWzJdKSA6ICIwIjsKLSAgICAgICAg ICAgICAgICBpZiAoY2hrbnVtKHZhbDEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0g YXRvaSh2YWwxKSAvKiAtIDEgKi87Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA8IDAp IHN0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID4gKGludClzdHJsZW4o YnBbMV0pKQotICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdmVyZmluOwotICAgICAgICAgICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAg ICAgICAgICAgIGV2YWxlcnIoZm4pOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkgPSBzdGFydDsK LSAgICAgICAgICAgIHAgPSAiMCI7Ci0gICAgICAgICAgICBmb3IgKHMgPSBicFsxXSArIHN0YXJ0 OyAqczsgcysrLGkrKykgewotICAgICAgICAgICAgICAgIGNoMSA9ICpzOwotICAgICAgICAgICAg ICAgIGlmICghaW5wY2FzW2NtZGx2bF0pIGlmIChpc2xvd2VyKGNoMSkpIGNoMSA9IHRvdXBwZXIo Y2gxKTsKLSAgICAgICAgICAgICAgICBqID0gMDsKLSAgICAgICAgICAgICAgICBmb3IgKHMyID0g YnBbMF07ICpzMjsgczIrKykgewotICAgICAgICAgICAgICAgICAgICBjaDIgPSAqczI7Ci0gICAg ICAgICAgICAgICAgICAgIGlmICghaW5wY2FzW2NtZGx2bF0pIGlmIChpc2xvd2VyKGNoMikpIGNo MiA9IHRvdXBwZXIoY2gyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoMSA9PSBjaDIpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIGogPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgaWYgKGogPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFs LCIlZCIsaSsxKTsgLyogU0FGRSAqLwotICAgICAgICAgICAgICAgICAgICBwID0gZm52YWw7Ci0g ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgICAgdmVyZmluOgotICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAg ICBjYXNlIEZOX0lQQTogICAgICAgICAgICAgICAgICAgICAgLyogRmluZCBhbmQgcmV0dXJuIElQ IGFkZHJlc3MgKi8KLSAgICAgICAgaWYgKGFyZ24gPiAwKSB7ICAgICAgICAgICAgICAgICAvKiBp biBhcmd1bWVudCBzdHJpbmcuICovCi0gICAgICAgICAgICBpbnQgc3RhcnQgPSAwOwotICAgICAg ICAgICAgaWYgKGFyZ24gPiAxKSB7ICAgICAgICAgICAgIC8qIFN0YXJ0aW5nIHBvc2l0aW9uIHNw ZWNpZmllZCAqLwotICAgICAgICAgICAgICAgIGlmIChjaGtudW0oYnBbMV0pKSB7Ci0gICAgICAg ICAgICAgICAgICAgIHN0YXJ0ID0gYXRvaShicFsxXSkgLSAxOwotICAgICAgICAgICAgICAgICAg ICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZu ZGlhZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIs Zm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcCA9IGdldGlwKGJwWzBdK3N0 YXJ0KTsKLSAgICAgICAgfSBlbHNlIHAgPSAiIjsKLSAgICAgICAgZ290byBmbmVuZDsKLQotI2lm ZGVmIE9TMgotICAgICAgY2FzZSBGTl9DUlk6Ci0gICAgICAgIHAgPSAiIjsKLSAgICAgICAgaWYg KGFyZ24gPiAwKSB7Ci0gICAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgICBja3N0cm5j cHkocCxicFswXSxGTlZBTEwpOwotICAgICAgICAgICAgY2tfZW5jcnlwdChwKTsKLSAgICAgICAg fQotICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAgICBjYXNlIEZOX09PWDoKLSAgICAgICAgcCA9 ICIiOwotICAgICAgICBpZiAoYXJnbiA+IDApCi0gICAgICAgICAgcCA9IChjaGFyICopIGNrX29v eChicFswXSwgKGFyZ24gPiAxKSA/IGJwWzFdIDogIiIpOwotICAgICAgICBnb3RvIGZuZW5kOwot I2VuZGlmIC8qIE9TMiAqLwotCi0gICAgICBjYXNlIEZOX0hFWDogICAgICAgICAgICAgICAgICAg ICAgLyogXGZoZXhpZnkoYXJnMSkgKi8KLSAgICAgICAgaWYgKGFyZ24gPCAxKQotICAgICAgICAg IGdvdG8gZm5lbmQ7Ci0gICAgICAgIGlmICgoaW50KXN0cmxlbihicFswXSkgPCAoRk5WQUxMIC8g MikpIHsKLSAgICAgICAgICAgIHMgPSBicFswXTsKLSAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAg ICAgICAgICAgIHdoaWxlICgqcykgewotICAgICAgICAgICAgICAgIHggPSAoKnMgPj4gNCkgJiAw eDBmOwotICAgICAgICAgICAgICAgICpwKysgPSBoZXhkaWdpdHNbeF07Ci0gICAgICAgICAgICAg ICAgeCA9ICpzKysgJiAweDBmOwotICAgICAgICAgICAgICAgICpwKysgPSBoZXhkaWdpdHNbeF07 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqcCA9IE5VTDsKLSAgICAgICAgICAgIHAgPSBm bnZhbDsKLSAgICAgICAgfQotICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAgICBjYXNlIEZOX1VO VEFCOgkJCS8qIFxmdW50YWIoYXJnMSkgKi8KLQlpZiAoYXJnbiA8IDEpCi0JICBnb3RvIGZuZW5k OwotCWlmICgoaW50KXN0cmxlbihicFswXSkgPCAoRk5WQUxMICogMikpIHsKLQkgICAgcyA9IGJw WzBdOwotCSAgICBwID0gZm52YWw7Ci0JICAgIGlmICh1bnRhYmlmeShicFswXSxwLEZOVkFMTCkg PCAwKSB7Ci0JCWZhaWxlZCA9IDE7Ci0JCWlmIChmbmRpYWdzKQotCQkgIGNrbWFrbXNnKGZudmFs LEZOVkFMTCwKLQkJCSAgICI8RVJST1I6T1ZFUkZMT1c6XFxmIixmbiwiKCk+IixOVUxMKTsKLQkg ICAgfQotCSAgICBnb3RvIGZuZW5kOwotCX0KLQotICAgICAgY2FzZSBGTl9VTkg6IHsgICAgICAg ICAgICAgICAgICAgIC8qIFxmdW5oZXgoYXJnMSkgKi8KLSAgICAgICAgICBpbnQgY1syXSwgaTsK LSAgICAgICAgICBpZiAoYXJnbiA8IDEpCi0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAg ICAgIGlmICgoaW50KXN0cmxlbihicFswXSkgPCAoRk5WQUxMICogMikpIHsKLSAgICAgICAgICAg ICAgcyA9IGJwWzBdOwotICAgICAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgICAgIHdo aWxlICgqcykgewotICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewot ICAgICAgICAgICAgICAgICAgICAgIGNbaV0gPSAqcysrOwotICAgICAgICAgICAgICAgICAgICAg IGlmICghY1tpXSkgeyBwID0gIiI7IGdvdG8gdW5oZXhmaW47IH0KLSAgICAgICAgICAgICAgICAg ICAgICBpZiAoaXNsb3dlcihjW2ldKSkgY1tpXSA9IHRvdXBwZXIoY1tpXSk7Ci0gICAgICAgICAg ICAgICAgICAgICAgaWYgKGNbaV0gPj0gJzAnICYmIGNbaV0gPD0gJzknKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgIGNbaV0gLT0gMHgzMDsKLSAgICAgICAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKGNbaV0gPj0gJ0EnICYmIGNbaV0gPD0gJ0YnKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIGNbaV0gLT0gMHgzNzsKLSAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhm bnZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTlZBTEwsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdF OlxcZiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigpPiIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgKnAr KyA9ICgoY1swXSA8PCA0KSAmIDB4ZjApIHwgKGNbMV0gJiAweDBmKTsKLSAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAqcCA9IE5VTDsKLSAgICAgICAgICAgICAgcCA9IGZudmFsOwotICAg ICAgICAgIH0KLSAgICAgICAgdW5oZXhmaW46Ci0gICAgICAgICAgZ290byBmbmVuZDsKLSAgICAg IH0KLQotICAgICAgY2FzZSBGTl9CUks6IHsgICAgICAgICAgICAgICAgICAgIC8qIFxmYnJlYWso KSAqLwotICAgICAgICAgIGNoYXIgKiBjOyAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3Rl cnMgdG8gYnJlYWsgb24gKi8KLSAgICAgICAgICBjaGFyIGMyLCBzMjsKLSAgICAgICAgICBpbnQg c3RhcnQgPSAwOwotICAgICAgICAgIGludCBkb25lID0gMDsKLSAgICAgICAgICBpZiAoYXJnbiA8 IDEpCi0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgIGlmIChhcmduID4gMikgewot ICAgICAgICAgICAgICBzID0gYnBbMl0gPyBicFsyXSA6ICIwIjsKLSAgICAgICAgICAgICAgaWYg KGNoa251bShzKSkgewotICAgICAgICAgICAgICAgICAgc3RhcnQgPSBhdG9pKHMpOwotICAgICAg ICAgICAgICAgICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwOwotICAgICAgICAgICAgICAgICAg aWYgKHN0YXJ0ID4gKGludClzdHJsZW4oYnBbMF0pKQotICAgICAgICAgICAgICAgICAgICBnb3Rv IGJya2ZpbjsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIGZhaWxl ZCA9IDE7Ci0gICAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAg ICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi PEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAg ICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAg ICBzID0gYnBbMF0gKyBzdGFydDsgICAgICAgICAgICAvKiBTb3VyY2UgcG9pbnRlciAqLwotCi0g ICAgICAgICAgd2hpbGUgKCpzICYmICFkb25lKSB7Ci0gICAgICAgICAgICAgIHMyID0gKnM7Ci0g ICAgICAgICAgICAgIGlmICghaW5wY2FzW2NtZGx2bF0gJiYgaXNsb3dlcihzMikpIHMyID0gdG91 cHBlcihzMik7Ci0gICAgICAgICAgICAgIGMgPSBicFsxXSA/IGJwWzFdIDogIiI7ICAgLyogQ2hh cmFjdGVyIHRvIGJyZWFrIG9uICovCi0gICAgICAgICAgICAgIHdoaWxlICgqYykgewotICAgICAg ICAgICAgICAgICAgYzIgPSAqYzsKLSAgICAgICAgICAgICAgICAgIGlmICghaW5wY2FzW2NtZGx2 bF0gJiYgaXNsb3dlcihjMikpIGMyID0gdG91cHBlcihjMik7Ci0gICAgICAgICAgICAgICAgICBp ZiAoYzIgPT0gczIpIHsKLSAgICAgICAgICAgICAgICAgICAgICBkb25lID0gMTsKLSAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgIGMrKzsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoZG9uZSkgYnJlYWs7 Ci0gICAgICAgICAgICAgICpwKysgPSAqcysrOwotICAgICAgICAgIH0KLSAgICAgICAgICAqcCA9 IE5VTDsgICAgICAgICAgICAgICAgICAgICAvKiB0ZXJtaW5hdGUgdGhlIHJlc3VsdCAqLwotICAg ICAgICAgIHAgPSBmbnZhbDsgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBwb2ludCB0byBpdC4g Ki8KLSAgICAgICAgYnJrZmluOgotICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICB9Ci0KLSAg ICAgIGNhc2UgRk5fU1BOOiB7ICAgICAgICAgICAgICAgICAgICAvKiBcZnNwYW4oKSAqLwotICAg ICAgICAgIGNoYXIgKnE7Ci0gICAgICAgICAgY2hhciBjMSwgYzI7Ci0gICAgICAgICAgaW50IHN0 YXJ0ID0gMDsKLSAgICAgICAgICBpZiAoYXJnbiA8IDEpCi0gICAgICAgICAgICBnb3RvIGZuZW5k OwotICAgICAgICAgIGlmIChhcmduID4gMikgeyAgICAgICAgICAgICAgIC8qIFN0YXJ0aW5nIHBv c2l0aW9uICovCi0gICAgICAgICAgICAgIHMgPSBicFsyXSA/IGJwWzJdIDogIjAiOwotICAgICAg ICAgICAgICBpZiAoY2hrbnVtKHMpKSB7Ci0gICAgICAgICAgICAgICAgICBzdGFydCA9IGF0b2ko cyk7Ci0gICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDA7Ci0gICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAg ICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFs LEZOVkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05V TUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7 Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgcyA9IGJwWzBdICsgc3Rh cnQ7ICAgICAgICAgICAgLyogU291cmNlIHBvaW50ZXIgKi8KLSAgICAgICAgICBpZiAoYXJnbiA+ IDEgJiYKLSAgICAgICAgICAgICAgKGludClzdHJsZW4oYnBbMV0pID4gMCAmJgotICAgICAgICAg ICAgICBzdGFydCA8PSAoaW50KXN0cmxlbihicFswXSkpIHsKLSAgICAgICAgICAgICAgd2hpbGUg KCpzKSB7ICAgICAgICAgICAgICAvKiBMb29wIHRocnUgc291cmNlIHN0cmluZyAqLwotICAgICAg ICAgICAgICAgICAgcSA9IGJwWzFdOyAgICAgICAgICAgIC8qIFNwYW4gc3RyaW5nICovCi0gICAg ICAgICAgICAgICAgICBjMSA9ICpzOwotICAgICAgICAgICAgICAgICAgaWYgKCFpbnBjYXNbY21k bHZsXSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzbG93ZXIoYzEpKSBjMSA9IHRvdXBwZXIo YzEpOwotICAgICAgICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAgICAgICAgICB3aGlsZSAo KGMyID0gKnErKykpIHsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlucGNhc1tjbWRsdmxd KQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzbG93ZXIoYzIpKSBjMiA9IHRvdXBwZXIo YzIpOwotICAgICAgICAgICAgICAgICAgICAgIGlmIChjMSA9PSBjMikgeyB4ID0gMTsgYnJlYWs7 IH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGlmICgheCkgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICAqcCsrID0gKnMrKzsKLSAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAqcCA9IE5VTDsgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSBhbmQgcmV0dXJu IHRoZSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgcCA9IGZudmFsOwotICAgICAgICAgIH0KLSAg ICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgfQotICAgIH0gLyogQnJlYWsgdXAgYmlnIHN3aXRj aC4uLiAqLwotCi0gICAgc3dpdGNoICh5KSB7Ci0gICAgICBjYXNlIEZOX1RSTTogICAgICAgICAg ICAgICAgICAgICAgLyogXGZ0cmltKHMxWyxzMl0pICovCi0gICAgICBjYXNlIEZOX0xUUjogICAg ICAgICAgICAgICAgICAgICAgLyogXGZsdHJpbShzMVssczJdKSAqLwotICAgICAgICBpZiAoYXJn biA8IDEpCi0gICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgaWYgKChsZW4xID0gKGludClz dHJsZW4oYnBbMF0pKSA+IDApIHsKLSAgICAgICAgICAgIGlmIChsZW4xID4gRk5WQUxMKQotICAg ICAgICAgICAgICBsZW4xID0gRk5WQUxMOwotICAgICAgICAgICAgcyA9ICIgXHRcclxuIjsKLSAg ICAgICAgICAgIGlmIChhcmduID4gMSkgICAgICAgICAgICAgICAvKiBUcmltIGxpc3QgZ2l2ZW4g Ki8KLSAgICAgICAgICAgICAgcyA9IGJwWzFdOwotICAgICAgICAgICAgbGVuMiA9IChpbnQpc3Ry bGVuKHMpOwotICAgICAgICAgICAgaWYgKGxlbjIgPCAxKSB7ICAgICAgICAgICAgIC8qIG9yIG5v dC4uLiAqLwotICAgICAgICAgICAgICAgIHMgPSAiIFx0XHJcbiI7ICAgICAgICAgIC8qIERlZmF1 bHQgaXMgdG8gdHJpbSB3aGl0ZXNwYWNlICovCi0gICAgICAgICAgICAgICAgbGVuMiA9IDI7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY3ggPT0gRk5fVFJNKSB7ICAgICAgICAgLyog VHJpbSBmcm9tIHJpZ2h0ICovCi0gICAgICAgICAgICAgICAgY2hhciAqIHEsIHAyLCBxMjsKLSAg ICAgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwsYnBbMF0sRk5WQUxMKTsgLyogQ29weSBzdHJp bmcgdG8gb3V0cHV0ICovCi0gICAgICAgICAgICAgICAgcCA9IGZudmFsICsgbGVuMSAtIDE7ICAg LyogUG9pbnQgdG8gbGFzdCBjaGFyYWN0ZXIgKi8KLQotICAgICAgICAgICAgICAgIHdoaWxlIChw ID49IChjaGFyICopZm52YWwpIHsgLyogR28gYmFja3dhcmRzICovCi0gICAgICAgICAgICAgICAg ICAgIHEgPSBzOyAgICAgICAgICAgICAgLyogUG9pbnQgdG8gdHJpbSBsaXN0ICovCi0gICAgICAg ICAgICAgICAgICAgIHAyID0gKnA7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5wY2FzW2Nt ZGx2bF0pCi0gICAgICAgICAgICAgICAgICAgICAgaWYgKGlzbG93ZXIocDIpKSBwMiA9IHRvdXBw ZXIocDIpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnEpIHsgICAgICAgIC8qIElzIHRo aXMgY2hhciBpbiB0cmltIGxpc3Q/ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBxMiA9ICpx OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnBjYXNbY21kbHZsXSkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGlzbG93ZXIocTIpKSBxMiA9IHRvdXBwZXIocTIpOwotICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHAyID09IHEyKSB7IC8qIFllcywgbnVsbCBpdCBvdXQg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCA9IE5VTDsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgICAgIHErKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICBpZiAoISpxKSAgICAgICAgICAgIC8qIFRyaW0gbGlzdCBleGhhdXN0ZWQgKi8KLSAg ICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAvKiBTbyB3ZSdyZSBkb25lLiAq LwotICAgICAgICAgICAgICAgICAgICBwLS07ICAgICAgICAgICAgICAgIC8qIEVsc2Uga2VlcCB0 cmltbWluZyAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAg ICAgICAgICAgICAgICAvKiBUcmltIGZyb20gbGVmdCAqLwotICAgICAgICAgICAgICAgIGNoYXIg KiBxLCBwMiwgcTI7Ci0gICAgICAgICAgICAgICAgcCA9IGJwWzBdOyAgICAgICAgICAgICAgLyog U291cmNlICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKCpwKSB7Ci0gICAgICAgICAgICAgICAg ICAgIHAyID0gKnA7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5wY2FzW2NtZGx2bF0pCi0g ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzbG93ZXIocDIpKSBwMiA9IHRvdXBwZXIocDIpOwot ICAgICAgICAgICAgICAgICAgICBxID0gczsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpx KSB7ICAgICAgICAvKiBJcyB0aGlzIGNoYXIgaW4gdHJpbSBsaXN0PyAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgcTIgPSAqcTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5wY2Fz W2NtZGx2bF0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc2xvd2VyKHEyKSkgcTIg PSB0b3VwcGVyKHEyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwMiA9PSBxMikgeyAv KiBZZXMsIHBvaW50IHBhc3QgaXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwKys7 ICAgICAgICAvKiBhbmQgdHJ5IG5leHQgc291cmNlIGNoYXJhY3RlciAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICAgICAgcSsrOyAgICAgICAgICAgIC8qIE5vLCB0cnkgbmV4dCB0cmltIGNo YXJhY3RlciAqLwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlm ICghKnEpICAgICAgICAgICAgLyogVHJpbSBsaXN0IGV4aGF1c3RlZCAqLwotICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIC8qIFNvIHdlJ3JlIGRvbmUuICovCi0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCxwLEZOVkFMTCk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgIH0gZWxzZSBwID0g IiI7Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgIGNhc2UgRk5fQ0FQOiAgICAgICAgICAg ICAgICAgICAgICAvKiBcZmNhcGl0YWxpemUoYXJnMSkgKi8KLSAgICAgICAgaWYgKGFyZ24gPCAx KQotICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIHMgPSBicFswXTsKLSAgICAgICAgcCA9 IGZudmFsOwotICAgICAgICB4ID0gMDsKLSAgICAgICAgd2hpbGUgKChjID0gKnMrKykpIHsKLSAg ICAgICAgICAgIGlmIChpc2FscGhhKGMpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gMCkg ewotICAgICAgICAgICAgICAgICAgICB4ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlz bG93ZXIoYykpCi0gICAgICAgICAgICAgICAgICAgICAgYyA9IHRvdXBwZXIoYyk7Ci0gICAgICAg ICAgICAgICAgfSBlbHNlIGlmIChpc3VwcGVyKGMpKQotICAgICAgICAgICAgICAgICAgYyA9IHRv bG93ZXIoYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqcCsrID0gYzsKLSAgICAgICAg fQotICAgICAgICAqcCA9IE5VTDsKLSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICBnb3RvIGZu ZW5kOwotCi0jaWZkZWYgQ09NTUVOVAotICAgICAgY2FzZSBGTl9UT0Q6ICAgICAgICAgICAgICAg ICAgICAgIC8qIFRpbWUgb2YgZGF5IHRvIHNlY3Mgc2luY2UgbWlkbml0ZSAqLwotICAgICAgICBz cHJpbnRmKGZudmFsLCIlbGQiLHRvZDJzZWMoYnBbMF0pKTsgLyogU0FGRSAqLwotICAgICAgICBn b3RvIGZuZW5kOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgICAgY2FzZSBGTl9GRk46ICAg ICAgICAgICAgICAgICAgICAgIC8qIEZ1bGwgcGF0aG5hbWUgb2YgZmlsZSAqLwotICAgICAgICB6 Zm5xZnAoYnBbMF0sRk5WQUxMLHApOwotICAgICAgICBpZiAoIXApIHAgPSAiIjsKLSAgICAgICAg Z290byBmbmVuZDsKLQotICAgICAgY2FzZSBGTl9DSEs6IHsgICAgICAgICAgICAgICAgICAgIC8q IFxmY2hlY2tzdW0oKSAqLwotICAgICAgICAgIGxvbmcgY2hrID0gMDsKLSAgICAgICAgICBwID0g KGFyZ24gPiAwKSA/IGJwWzBdIDogIiI7Ci0gICAgICAgICAgd2hpbGUgKCpwKSBjaGsgKz0gKnAr KzsKLSAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlbHUiLGNoayk7ICAgICAvKiBTQUZFICovCi0g ICAgICAgICAgcCA9IGZudmFsOwotICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICB9Ci0KLSNp Zm5kZWYgTk9YRkVSCi0gICAgICBjYXNlIEZOX0NSQzogICAgICAgICAgICAgICAgICAgICAgLyog XGZjcmMxNigpICovCi0gICAgICAgIGlmIChhcmduID4gMCkKLSAgICAgICAgICBzcHJpbnRmKGZu dmFsLCIldSIsICAgICAgICAgICAvKiBTQUZFICovCi0gICAgICAgICAgICAgICAgICBjaGszKChD SEFSICopYnBbMF0sKGludClzdHJsZW4oYnBbMF0pKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg ICBwID0gIjAiOwotICAgICAgICBnb3RvIGZuZW5kOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0g ICAgICBjYXNlIEZOX0JTTjogICAgICAgICAgICAgICAgICAgICAgLyogXGZiYXNlbmFtZSgpICov Ci0gICAgICAgIHpzdHJpcChicFswXSwmcCk7Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSNpZm5k ZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgICAgY2FzZSBGTl9TQ1JOX0NYOiAgICAgICAgICAg ICAgICAgIC8qIFxmc2NybmN1cngoKSAqLwotICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgIHNw cmludGYocCwiJWQiLChpbnQpVnNjcm5HZXRDdXJQb3MoVlRFUk0pLT54KTsgLyogU0FGRSAqLwot ICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAgICBjYXNlIEZOX1NDUk5fQ1k6ICAgICAgICAgICAg ICAgICAgLyogXGZzY3JuY3VyeSgpICovCi0gICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgc3By aW50ZihwLCIlZCIsKGludClWc2NybkdldEN1clBvcyhWVEVSTSktPnkpOyAvKiBTQUZFICovCi0g ICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgIGNhc2UgRk5fU0NSTl9TVFI6IHsgICAgICAgICAg ICAgICAvKiBcZnNjcm5zdHIoKSAqLwotICAgICAgICAgIHZpZGVvbGluZSAqIGxpbmUgPSBOVUxM OwotICAgICAgICAgIHZpb2NlbGwgKiBjZWxscyA9IE5VTEw7Ci0gICAgICAgICAgaW50IHJvdyA9 IDAsIGNvbCA9IDAsIGxlbiA9IDA7Ci0gICAgICAgICAgLyogTk9URTogT24gVW5pY29kZSBzeXN0 ZW1zLCB0aGUgc2NyZWVuIGNvbnRlbnRzIGFyZSBzdG9yZWQgaW4gKi8KLSAgICAgICAgICAvKiBp biBVbmljb2RlLiAgVGhlcmVmb3JlLCB3ZSBzaG91bGQgcmVhbGx5IGJlIHBlcmZvcm1pbmcgYSAg ICAqLwotICAgICAgICAgIC8qIGNvbnZlcnNpb24gdG8gdGhlIGxvY2FsIGNoYXJhY3RlciBzZXQu ICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAvKiA2LzE4LzIwMDAgLSBhZGRl ZCB0aGUgdHJhbnNsYXRpb24gdG8gbGNzICovCi0KLSAgICAgICAgICBpZiAoYnBbMF0gPT0gTlVM TCB8fCBicFswXVswXSA9PSAnXDAnKSB7Ci0gICAgICAgICAgICAgIHJvdyA9IDA7Ci0gICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgaWYgKGNoa251bShicFswXSkpIHsKLSAgICAgICAg ICAgICAgICAgIHJvdyA9IGF0b2koYnBbMF0pOwotICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8 IDApCi0gICAgICAgICAgICAgICAgICAgIHJvdyA9IDA7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgICAgaWYgKGZu ZGlhZ3MpCi0gICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwi KCk+IixOVUxMKTsKLSAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAg IH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgbGluZSA9IFZzY3JuR2V0TGluZUZyb21Ub3AoIFZU RVJNLCAoVVNIT1JUKSByb3cgKTsKLSAgICAgICAgICBpZiAobGluZSAhPSBOVUxMKSB7Ci0gICAg ICAgICAgICAgIGlmIChicFsxXSA9PSBOVUxMIHx8IGJwWzFdWzBdID09ICdcMCcpCi0gICAgICAg ICAgICAgICAgY29sID0gMDsKLSAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg ICBpZiAoY2hrbnVtKGJwWzBdKSkgewotICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IGF0b2ko YnBbMV0pOwotICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2wgPCAwIHx8IGNvbCA+PSBsaW5l LT53aWR0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IDA7Ci0gICAgICAgICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAg ICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBja21h a21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVS Uk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgICAg ICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgaWYgKGJwWzJdID09IE5VTEwgfHwgYnBbMl1bMF0gPT0gJ1wwJykgewot ICAgICAgICAgICAgICAgICAgbGVuID0gbGluZS0+d2lkdGggLSAoY29sKzEpOwotICAgICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgaWYgKCFjaGtudW0oYnBbMl0pKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICBp ZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFM TCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1F UklDOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgZ290byBmbmVu ZDsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGxlbiA9IGF0b2koYnBb Ml0pOwotICAgICAgICAgICAgICAgICAgaWYgKGxlbiA8IDAgfHwgbGVuID4gbGluZS0+d2lkdGgp Ci0gICAgICAgICAgICAgICAgICAgIGxlbiA9IGxpbmUtPndpZHRoOwotICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgIGNlbGxzID0gbGluZS0+Y2VsbHM7Ci0gICAgICAgICAgICAgIGZvciAo aSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgICAgaW50IHBvcyA9IGkgKyBj b2w7Ci0gICAgICAgICAgICAgICAgICBpZiAocG9zIDwgbGluZS0+d2lkdGgpIHsKLSAgICAgICAg ICAgICAgICAgICAgICBpZiAoaXN1bmljb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBm bnZhbFtpXSA9IChDSEFSKSB1dG9seGxhdChjZWxsc1twb3NdLmMpOwotICAgICAgICAgICAgICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGZudmFsW2ldID0gKENIQVIpIChj ZWxsc1twb3NdLmMgJiAweEZGKTsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoZm52YWxbaV0g PT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZudmFsW2ldID0gU1A7Ci0gICAgICAgICAg ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZm52YWxbaV0gPSBTUDsKLSAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICBmbnZhbFtpXSA9ICdcMCc7Ci0gICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgZm52YWxbMF0gPSAnXDAnOwotICAgICAgICAgIH0KLSAgICAg ICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgIH0KLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9QVVNICi0gICAgICBj YXNlIEZOX1JBVzogICAgICAgICAgICAgICAgICAgICAgLyogXGZyYXdjb21tYW5kKCkgKi8KLSAg ICAgIGNhc2UgRk5fQ01EOiB7ICAgICAgICAgICAgICAgICAgICAvKiBcZmNvbW1hbmQoKSAqLwot ICAgICAgICAgIGludCB4LCBjLCBuID0gRk5WQUxMOwotICAgICAgICAgIHggPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENvbXBsZXRpb24gZmxhZyAqLwotLyoKLSAgWklGSUxFIGNhbiBi ZSBzYWZlbHkgdXNlZCBiZWNhdXNlIHdlIGNhbid0IHBvc3NpYmx5IGJlIHRyYW5zZmVycmluZyBh IGZpbGUKLSAgd2hpbGUgZXhlY3V0aW5nIHRoaXMgZnVuY3Rpb24uCi0qLwotICAgICAgICAgIGlm ICghbm9wdXNoICYmIHp4Y21kKFpJRklMRSxicFswXSkgPiAwKSB7IC8qIE9wZW4gdGhlIGNvbW1h bmQgKi8KLSAgICAgICAgICAgICAgd2hpbGUgKG4tLSA+IC0xKSB7ICAgICAgICAvKiBSZWFkIGZy b20gaXQgKi8KLSAgICAgICAgICAgICAgICAgIGlmICgoYyA9IHptaW5jaGFyKCkpIDwgMCkgewot ICAgICAgICAgICAgICAgICAgICAgIHggPSAxOyAgICAgICAgICAgICAvKiBFT0YgLSBzZXQgY29t cGxldGlvbiBmbGFnICovCi0gICAgICAgICAgICAgICAgICAgICAgaWYgKGN4ID09IEZOX0NNRCkg eyAvKiBJZiBub3QgInJhd2NvbW1hbmQiICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHAt LTsgICAgICAgICAgIC8qIHJlbW92ZSB0cmFpbGluZyBuZXdsaW5lcyAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgICB3aGlsZSAoKnAgPT0gQ1IgfHwgKnAgPT0gTEYpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgcC0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICBwKys7Ci0gICAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICpwID0gTlVMOyAgICAg ICAgIC8qIFRlcm1pbmF0ZSB0aGUgc3RyaW5nICovCi0gICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBz dGlsbCBydW5uaW5nICovCi0gICAgICAgICAgICAgICAgICAgICpwKysgPSBjOyAgICAgICAgICAg LyogQ29weSB0aGUgYnl0ZXMgKi8KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB6Y2xv c2UoWklGSUxFKTsgICAgICAgICAgIC8qIENsb3NlIHRoZSBjb21tYW5kICovCi0gICAgICAgICAg fQotICAgICAgICAgIC8qIFJldHVybiBudWxsIHN0cmluZyBpZiBjb21tYW5kJ3Mgb3V0cHV0IHdh cyB0b28gbG9uZy4gKi8KLSAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgaWYgKCF4KSB7 Ci0gICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgIGlmIChmbmRpYWdzKQot ICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAiPEVSUk9SOlJFU1VMVF9UT09fTE9ORzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAg ICAgICAgIH0KLSAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgfQotI2VuZGlmIC8qIE5PUFVT SCAqLwotICAgIH0gLyogQnJlYWsgdXAgYmlnIHN3aXRjaC4uLiAqLwotCi0gICAgc3dpdGNoICh5 KSB7Ci0gICAgICBjYXNlIEZOX1NUWDogICAgICAgICAgICAgICAgICAgICAgLyogXGZzdHJpcHgo c3RyaW5nLGMpICovCi0gICAgICAgIGlmICghKHMgPSBicFswXSkpICAgICAgICAgICAgICAgLyog TWFrZSBzdXJlIHRoZXJlIGlzIGEgc3RyaW5nICovCi0gICAgICAgICAgZ290byBmbmVuZDsKLSAg ICAgICAgYyA9ICcuJzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgdG8gc3Ry aXAgZnJvbSAqLwotICAgICAgICBpZiAoYXJnbiA+IDEpIGlmICgqYnBbMV0pIGMgPSAqYnBbMV07 Ci0gICAgICAgIG4gPSBja3N0cm5jcHkoZm52YWwsYnBbMF0sRk5WQUxMKTsKLSAgICAgICAgd2hp bGUgKC0tbiA+PSAwKSB7Ci0gICAgICAgICAgICBpZiAoZm52YWxbbl0gPT0gYykgewotICAgICAg ICAgICAgICAgIGZudmFsW25dID0gTlVMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgZ290byBmbmVu ZDsKLQotICAgICAgY2FzZSBGTl9TVEw6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmbG9wKHN0 cmluZyxjKSAqLwotICAgICAgY2FzZSBGTl9MT1BYOiB7CQkJLyogXGZsb3B4KHN0cmluZyxjKSAq LwotCSAgaW50IG4gPSAxOwotCSAgaWYgKCEocyA9IGJwWzBdKSkJCS8qIE1ha2Ugc3VyZSB0aGVy ZSBpcyBhIHN0cmluZyAqLwotCSAgICBnb3RvIGZuZW5kOwotCSAgYyA9ICcuJzsJCQkvKiBDaGFy YWN0ZXIgdG8gc3RyaXAgdG8gKi8KLQkgIGlmIChhcmduID4gMSkgaWYgKCpicFsxXSkgYyA9ICpi cFsxXTsKLQkgIGlmIChhcmduID4gMikgaWYgKCpicFsyXSkgewotI2lmbmRlZiBOT0ZMT0FUCi0J ICAgICAgbiA9IDA7Ci0JICAgICAgaWYgKGlzZmxvYXQoYnBbMl0sMCkpIHsKLQkJICBuID0gKGlu dClmbG9hdHZhbDsKLQkJICBpZiAobiA8IDApIG4gPSAwOwotCSAgICAgIH0gZWxzZQotI2VuZGlm CS8qIE5PRkxPQVQgKi8KLQkJbiA9IGF0b2koYnBbMl0pOwotCSAgfQotCSAgeCA9IDA7Ci0JICBp ZiAoY3ggPT0gRk5fTE9QWCkgewkJLyogTG9weCAoZnJvbSByaWdodCkgKi8KLQkgICAgICBpZiAo biA9PSAwKQotCQlnb3RvIGZuZW5kOwotCSAgICAgIHMgKz0gc3RybGVuKHMpIC0gMTsJLyogV2Ug YWxyZWFkeSBrbm93IGl0J3MgPiAwICovCi0JICAgICAgd2hpbGUgKHMtLSA+PSBicFswXSkgewot CQkgIGlmICgqcyA9PSBjKSB7Ci0JCSAgICAgIG4tLTsKLQkJICAgICAgaWYgKG4gPT0gMCkgewot CQkJICBzKys7Ci0JCQkgIHggPSAxOwotCQkJICBicmVhazsKLQkJICAgICAgfQotCQkgIH0KLQkg ICAgICB9Ci0JICAgICAgaWYgKCF4KSBzID0gIiI7Ci0JICB9IGVsc2UgewkJCS8qIExvcCAoZnJv bSBsZWZ0KSAqLwotCSAgICAgIGlmIChuID09IDApIHsKLQkJICBwID0gYnBbMF07Ci0JCSAgZ290 byBmbmVuZDsKLQkgICAgICB9Ci0JICAgICAgd2hpbGUgKCpzKyspIHsKLQkJICBpZiAoKihzLTEp ID09IGMpIHsKLQkJICAgICAgaWYgKC0tbiA9PSAwKSB7Ci0JCQkgIHggPSAxOwotCQkJICBicmVh azsKLQkJICAgICAgfQotCQkgIH0KLQkgICAgICB9Ci0JICAgICAgaWYgKCF4KSBzID0gYnBbMF07 Ci0JICB9Ci0JICBja3N0cm5jcHkoZm52YWwscyxGTlZBTEwpOwotCSAgcCA9IGZudmFsOwotCSAg Z290byBmbmVuZDsKLSAgICAgIH0KLSAgICAgIGNhc2UgRk5fU1ROOiAgICAgICAgICAgICAgICAg ICAgICAvKiBcZnN0cmlwbihzdHJpbmcsbikgKi8KLSAgICAgICAgaWYgKGFyZ24gPCAxKSAgICAg ICAgICAgICAgICAgICAvKiBSZW1vdmUgbiBjaGFycyBmcm9tIHJpZ2h0ICovCi0gICAgICAgICAg Z290byBmbmVuZDsKLSAgICAgICAgdmFsMSA9ICIwIjsKLSAgICAgICAgaWYgKGFyZ24gPiAxKQot ICAgICAgICAgIGlmICgqKGJwWzFdKSkKLSAgICAgICAgICAgIHZhbDEgPSBldmFseChicFsxXSk7 Ci0gICAgICAgIGlmICghY2hrbnVtKHZhbDEpKSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwot ICAgICAgICAgICAgZXZhbGVycihmbik7Ci0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAg ICB9Ci0gICAgICAgIG4gPSBhdG9pKHZhbDEpOwotICAgICAgICBpZiAobiA8IDApIG4gPSAwOwot ICAgICAgICBrID0gKGludClzdHJsZW4ocyA9IGJwWzBdKSAtIG47Ci0gICAgICAgIGlmIChrIDwg MCkgayA9IDA7Ci0gICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgd2hpbGUgKGstLSA+IDApCi0g ICAgICAgICAgKnArKyA9ICpzKys7Ci0gICAgICAgICpwID0gTlVMOwotICAgICAgICBwID0gZm52 YWw7Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgIGNhc2UgRk5fU1RCOiB7ICAgICAgICAg ICAgICAgICAgICAvKiBcZnN0cmlwYihzdHJpbmcsYykgKi8KLSAgICAgICAgICBjaGFyIGMyID0g TlVMOwotICAgICAgICAgIGludCBpLCBrID0gMDsKLSAgICAgICAgICBjaGFyICogZ3Jfb3BuID0g IlwieycoWzwiOyAgICAvKiBHcm91cCBvcGVuIGJyYWNrZXRzICovCi0gICAgICAgICAgY2hhciAq IGdyX2NscyA9ICJcIn0nKV0+IjsgICAgLyogR3JvdXAgY2xvc2UgYnJhY2tldHMgKi8KLQotICAg ICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICAqcCA9IE5VTDsKLSAgICAgICAgICBpZiAoIShz ID0gYnBbMF0pKSAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhlcmUgaXMgYSBzdHJpbmcgKi8K LSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgaWYgKCh4ID0gc3RybGVuKHMpKSA8 IDEpCi0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgIGMgPSBOVUw7ICAgICAgICAg ICAgICAgICAgICAgIC8qIEJyYWNlL2JyYWNrZXQga2luZCAqLwotICAgICAgICAgIGlmIChhcmdu ID4gMSkgewotICAgICAgICAgICAgICBpZiAoKmJwWzFdKSB7Ci0gICAgICAgICAgICAgICAgICBp ZiAoY2hrbnVtKGJwWzFdKSkgewotICAgICAgICAgICAgICAgICAgICAgIGsgPSBhdG9pKGJwWzFd KTsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoayA8IDApIGsgPSA2MzsKLSAgICAgICAgICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChrICYgKDE8PGkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoc1swXSA9PSBncl9vcG5baV0gJiYgc1t4LTFdID09IGdyX2Nsc1tpXSkgewotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCxzKzEsRk5WQUxMKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbnZhbFt4LTJdID0gTlVMOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLHMsRk5W QUxMKTsgLyogTm8gbWF0Y2ggKi8KLSAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwot ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCSAgYyA9 ICFicFsxXSA/IDAgOiAqYnBbMV07Ci0gICAgICAgICAgaWYgKCFjKSBjID0gc1swXTsKLSAgICAg ICAgICBpZiAoYXJnbiA+IDIpIGlmICgqYnBbMl0pIGMyID0gKmJwWzJdOwotICAgICAgICAgIGlm ICgqcyA9PSBjKSB7Ci0gICAgICAgICAgICAgIGlmICghYzIpIHsKLSAgICAgICAgICAgICAgICAg IHN3aXRjaCAoYykgewotICAgICAgICAgICAgICAgICAgICBjYXNlICcoJzogYzIgPSAnKSc7IGJy ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdbJzogYzIgPSAnXSc7IGJyZWFrOwotICAg ICAgICAgICAgICAgICAgICBjYXNlICd7JzogYzIgPSAnfSc7IGJyZWFrOwotICAgICAgICAgICAg ICAgICAgICBjYXNlICc8JzogYzIgPSAnPic7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj YXNlICciJzogYzIgPSAnIic7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDM5OiAg YzIgPSAzOTsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDk2OiAgYzIgPSAzOTsg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg ICAgIGlmIChhcmduID09IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSBjOwot ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg IHN0cm5jcHkoZm52YWwscyx4KTsgLyogTGVhdmUgaXQgbGlrZSB0aGlzICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIGZudmFsW3hdID0gTlVMOwotICAgICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoc1t4LTFdID09IGMyKSB7Ci0g ICAgICAgICAgICAgICAgICBzdHJuY3B5KGZudmFsLHMrMSx4LTIpOyAvKiBMZWF2ZSBpdCBsaWtl IHRoaXMgKi8KLSAgICAgICAgICAgICAgICAgIGZudmFsW3gtMl0gPSBOVUw7Ci0gICAgICAgICAg ICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAg ICAgIHN0cm5jcHkoZm52YWwscyx4KTsKLSAgICAgICAgICBmbnZhbFt4XSA9IE5VTDsKLSAgICAg ICAgICBnb3RvIGZuZW5kOwotICAgICAgfQotCi0gICAgICBjYXNlIEZOXzJIRVg6ICAgICAgICAg ICAgICAgICAgICAgLyogTnVtYmVyIHRvIGhleCAqLwotICAgICAgY2FzZSBGTl8yT0NUOiAgICAg ICAgICAgICAgICAgICAgIC8qIE51bWJlciB0byBvY3RhbCAqLwotICAgICAgICB2YWwxID0gZXZh bHgoYnBbMF0pOwotICAgICAgICBpZiAoISp2YWwxKSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAx OwotICAgICAgICAgICAgZXZhbGVycihmbik7Ci0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAg ICAgICB9Ci0gICAgICAgIHNwcmludGYoZm52YWwsIGN4ID09IEZOXzJIRVggPyAiJWx4IiA6ICIl bG8iLCBhdG9sKHZhbDEpKTsgLyogU0FGRSAqLwotICAgICAgICBpZiAoY3ggPT0gRk5fMkhFWCAm JiAoaW50KShzdHJsZW4oZm52YWwpJjEpKQotICAgICAgICAgIHNwcmludGYoZm52YWwsIjAlbHgi LGF0b2wodmFsMSkpOyAvKiBTQUZFICovCi0gICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgZ290 byBmbmVuZDsKLQotICAgICAgY2FzZSBGTl9ETkFNOiB7ICAgICAgICAgICAgICAgICAgIC8qIERp cmVjdG9yeSBwYXJ0IG9mIGZpbGUgbmFtZSAqLwotICAgICAgICAgIGNoYXIgKnM7Ci0gICAgICAg ICAgemZucWZwKGJwWzBdLEZOVkFMTCxwKTsgICAgICAgLyogR2V0IGZ1bGwgbmFtZSAqLwotICAg ICAgICAgIGlmICghaXNkaXIocCkpIHsgICAgICAgICAgICAgIC8qIElzIGl0IGFscmVhZHkgYSBk aXJlY3Rvcnk/ICovCi0gICAgICAgICAgICAgIHpzdHJpcChwLCZzKTsgICAgICAgICAgICAgLyog Tm8gZ2V0IGJhc2VuYW1lICovCi0gICAgICAgICAgICAgIGlmICgqcykgewotICAgICAgICAgICAg ICAgICAgeCA9IGNraW5kZXgocyxwLDAsMCwwKTsgLyogUG9zIG9mIGxhdHRlciBpbiBmb3JtZXIg Ki8KLSAgICAgICAgICAgICAgICAgIGlmICh4ID4gMCkgcFt4LTFdID0gTlVMOwotICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICghcCkgcCA9ICIiOwotICAgICAgICAg IGdvdG8gZm5lbmQ7Ci0gICAgICB9Ci0KLSNpZm5kZWYgTk9SQU5ET00KLSAgICAgIGNhc2UgRk5f UkFORDogICAgICAgICAgICAgICAgICAgICAvKiBSYW5kb20gbnVtYmVyICovCi0jaWZkZWYgQ0tf U1NMCi0gICAgICAgIGlmIChSQU5EX2J5dGVzKCh1bnNpZ25lZCBjaGFyICopJmssc2l6ZW9mKGsp KSA8IDApCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgayA9IHJhbmQoKTsKLSAgICAg ICAgeCA9IDA7Ci0gICAgICAgIGlmIChhcmduID4gMCkgewotICAgICAgICAgICAgaWYgKCFjaGtu dW0oYnBbMF0pKSB7Ci0gICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAg ICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIs Zm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIHggPSBhdG9pKGJwWzBdKTsKLSAgICAgICAgfQotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLCAoeCA+IDAgJiYgayA+IDApIHx8ICh4IDwg MCAmJiBrIDwgMCkgPyBrICUgeCA6IAotICAgICAgICAgICAgICAgICh4ID09IDAgPyAwIDogKDAg LSAoayAlICgteCkpKSkpOwotI2Vsc2UKLSAgICAgICAgZGVidWcoRjExMSwicmFuZCIsY2tpdG9h KHgpLGspOwotI2lmZGVmIFNVTk9TNAotLyogVGhpcyBpcyByZWFsbHkgc3RyYW5nZSBidXQgb24g U3VuT1MsIGlmIHdlIGFyZSByZXF1ZXN0aW5nIHJhbmRvbSBudW1iZXJzICovCi0vKiBiZXR3ZWVu IDAgYW5kIDQgb3IgbGVzcywgdGhleSBhbHdheXMgY29tZSBvdXQgaW4gc2VxdWVuY2U6IDAgMSAy IDMgMCAxIDIgKi8KLS8qIFNoaWZ0aW5nIHRoZSByZXN1bHQgb2YgcmFuZCgpIGluIHRoaXMgY2Fz ZSBnaXZlcyBhIG1vcmUgcmFuZG9tIHJlc3VsdC4gICAqLwotICAgICAgICBpZiAoeCA8IDUpCi0g ICAgICAgICAgayA9IGsgPj4gNTsKLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSAgICAgICAgaWYgKCh4 ID4gMCAmJiBrID4gMCkgfHwgKHggPCAwICYmIGsgPCAwKSkKLSAgICAgICAgICB4ID0gayAlIHg7 Ci0gICAgICAgIGVsc2UgaWYgKHggPT0gMCkKLSAgICAgICAgICB4ID0gMDsKLSAgICAgICAgZWxz ZQotICAgICAgICAgIHggPSAwIC0gKGsgJSAoLXgpKTsKLSAgICAgICAgZGVidWcoRjEwMSwicmFu ZCB4IiwiIix4KTsKLSAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLCB4KTsgICAgICAgICAvKiBT QUZFICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBwID0gZm52YWw7Ci0gICAgICAg IGdvdG8gZm5lbmQ7Ci0jZW5kaWYgLyogTk9SQU5ET00gKi8KLSAgICB9IC8qIEJyZWFrIHVwIGJp ZyBzd2l0Y2guLi4gKi8KLQotICAgIHN3aXRjaCAoeSkgewotICAgICAgY2FzZSBGTl9TUExJVDog ICAgICAgICAgICAgICAgICAgIC8qIFxmc3BsaXQoczEsYSxzMixzMyxtYXNrKSAqLwotICAgICAg Y2FzZSBGTl9XT1JEOiB7ICAgICAgICAgICAgICAgICAgIC8qIFxmd29yZChzMSxuLHMyLHMzLG1h c2spICovCi0gICAgICAgICAgaW50IHdvcmRudW0gPSAwOwotICAgICAgICAgIGludCBzcGxpdHRp bmcgPSAwOwotICAgICAgICAgIGludCB4OwotICAgICAgICAgIGludCBhcnJheSA9IDA7Ci0gICAg ICAgICAgaW50IGdyb3VwaW5nID0gMDsKLSAgICAgICAgICBpbnQgbm9jb2xsYXBzZSA9IDA7Ci0g ICAgICAgICAgY2hhciAqIHNlcCA9ICIiOwotICAgICAgICAgIGNoYXIgKiBub3RzZXAgPSAiIjsK LSAgICAgICAgICBjaGFyICogYnAwID0gTlVMTDsKLSAgICAgICAgICBjaGFyICogYnAxID0gTlVM TDsKLSAgICAgICAgICBjaGFyICAgYWJ1ZlsxNl07Ci0gICAgICAgICAgc3RydWN0IHN0cmluZ2Fy cmF5ICogcSA9IE5VTEw7Ci0KLSAgICAgICAgICBzcGxpdHRpbmcgPSAoY3ggPT0gRk5fU1BMSVQp OyAvKiBPdXIgam9iICovCi0JICBkZWJ1ZyhGMTAxLCJGTl9TUExJVCBzcGxpdHRpbmciLCIiLHNw bGl0dGluZyk7Ci0KLSAgICAgICAgICBmbnZhbFswXSA9IHNwbGl0dGluZyA/ICcwJyA6IE5VTDsg LyogSW5pdGlhbCByZXR1cm4gdmFsdWUgKi8KLSAgICAgICAgICBmbnZhbFsxXSA9IE5VTDsKLSAg ICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgYnAwID0gYnBbMF07ICAgICAgICAgICAgICAg ICAgLyogU291cmNlIHN0cmluZyAqLwotICAgICAgICAgIGlmICghYnAwKSBicDAgPSAiIjsKLSAg ICAgICAgICBkZWJ1ZyhGMTExLCJmc3BsaXQgYnBbMF0iLGJwMCxhcmduKTsKLSAgICAgICAgICBp ZiAoYXJnbiA8IDEgfHwgISpicDApICAgICAgICAvKiBJZiBub25lLCByZXR1cm4gZGVmYXVsdCB2 YWx1ZSAqLwotICAgICAgICAgICAgZ290byBmbmVuZDsKLQotICAgICAgICAgIGJwMSA9IGJwWzFd OyAgICAgICAgICAgICAgICAgIC8qIEZ1bmN0aW9uLWRlcGVuZGVudCBhcmcgKi8KLSAgICAgICAg ICBpZiAoIWJwMSkgYnAxID0gIiI7ICAgICAgICAgICAvKiAoYXJyYXkgb3IgbnVtYmVyKSAqLwot ICAgICAgICAgIGRlYnVnKEYxMTAsImZzcGxpdCBicFsxXSIsYnAxLDApOwotICAgICAgICAgIGlm IChicFs1XSkgewotICAgICAgICAgICAgICBpZiAoIWNoa251bShicFs1XSkpIHsKLSAgICAgICAg ICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxG TlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJ QzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICB4ID0gYXRvaShicFs1XSk7Ci0gICAgICAgICAg ICAgIG5vY29sbGFwc2UgPSB4OwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoIXNwbGl0dGlu ZykgeyAgICAgICAgICAgICAvKiBcZndvcmQoKTogbiA9IGRlc2lyZWQgd29yZCBudW1iZXIgKi8K LSAgICAgICAgICAgICAgdmFsMSA9ICIxIjsgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGlzIGZp cnN0IHdvcmQgKi8KLSAgICAgICAgICAgICAgaWYgKGFyZ24gPiAxKSAgICAgICAgICAgICAvKiBX b3JkIG51bWJlciBzdXBwbGllZCAqLwotICAgICAgICAgICAgICAgIGlmICgqYnAxKQotICAgICAg ICAgICAgICAgICAgdmFsMSA9IGV2YWx4KGJwMSk7Ci0gICAgICAgICAgICAgIGlmICghY2hrbnVt KHZhbDEpKSB7Ci0gICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAg ICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxF UlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgICAg ICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgbiA9IGF0b2ko dmFsMSk7Ci0gICAgICAgICAgfSBlbHNlIGlmIChhcmduID4gMSAmJiAqYnAxKSB7IC8qIFxmc3Bs aXQoKTogbiA9IHdvcmQgY291bnQgKi8KLSAgICAgICAgICAgICAgY2tzdHJuY3B5KGFidWYsYnAx LDE2KTsgICAvKiBHZXQgYXJyYXkgcmVmZXJlbmNlICovCi0gICAgICAgICAgICAgIGRlYnVnKEYx MTAsImZzcGxpdCBhYnVmIDEiLGFidWYsMCk7Ci0gICAgICAgICAgICAgIGZhaWxlZCA9IDE7ICAg ICAgICAgICAgICAgLyogQXNzdW1lIGl0J3MgYmFkICovCi0gICAgICAgICAgICAgIGlmIChmbmRp YWdzKSAgICAgICAgICAgICAgLyogRGVmYXVsdCBpcyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8KLSAg ICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIjxFUlJPUjpBUkdfQkFEX0FSUkFZOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAg ICAgICAgIGlmIChhYnVmWzBdICE9ICcmJykgICAgICAgLyogIkFkZHJlc3MiIG9mIGFycmF5ICov Ci0gICAgICAgICAgICAgICAgZ290byBmbmVuZDsgICAgICAgICAgICAgLyogSXQncyBiYWQgKi8K LSAgICAgICAgICAgICAgaWYgKGFidWZbMl0pIHsgICAgICAgICAgICAvKiBDaGVjayBmb3IgYnJh Y2tldHMgKi8KLSAgICAgICAgICAgICAgICAgIGlmIChhYnVmWzJdICE9ICdbJyB8fCBhYnVmWzNd ICE9ICddJykgewotICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7ICAgICAgIC8qIEJh ZCAqLwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg IGRlYnVnKEYxMTAsImZzcGxpdCBhYnVmIDIiLGFidWYsMCk7Ci0gICAgICAgICAgICAgIGlmIChh YnVmWzFdID4gNjQgJiYgYWJ1ZlsxXSA8IDkxKSAvKiBDb252ZXJ0IHVwcGVyIHRvIGxvd2VyICov Ci0gICAgICAgICAgICAgICAgYWJ1ZlsxXSArPSAzMjsKLSAgICAgICAgICAgICAgaWYgKGFidWZb MV0gPCA5NyB8fCBhYnVmWzFdID4gMTIyKSB7IC8qIENoZWNrIGZvciBhLXogKi8KLSAgICAgICAg ICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZGVi dWcoRjExMCwiZnNwbGl0IGFidWYgMyIsYWJ1ZiwwKTsKLSAgICAgICAgICAgICAgYXJyYXkgPSAx OwotICAgICAgICAgICAgICBmbnZhbFswXSA9IE5VTDsgICAgICAgICAgIC8qIE5vIGVycm9yLCBl cmFzZSBtZXNzYWdlICovCi0gICAgICAgICAgICAgIGZhaWxlZCA9IDA7ICAgICAgICAgICAgICAg LyogVW5zZXQgZmFpbHVyZSBmbGFnICovCi0gICAgICAgICAgICAgIG4gPSAwOyAgICAgICAgICAg ICAgICAgICAgLyogSW5pdGlhbGl6ZSB3b3JkIGNvdW50ZXIgKi8KLSAgICAgICAgICB9Ci0gICAg ICAgICAgaWYgKGFyZ24gPiAyKSAgICAgICAgICAgICAgICAgLyogSGF2ZSBicmVhayBzZXQ/ICov Ci0gICAgICAgICAgICBzZXAgPSBicFsyXTsKLSAgICAgICAgICBkZWJ1ZyhGMTExLCJmc3BsaXQg c2VwIixzZXAsYXJnbik7Ci0gICAgICAgICAgaWYgKGFyZ24gPiAzKSAgICAgICAgICAgICAgICAg LyogSGF2ZSBpbmNsdWRlIHNldD8gKi8KLSAgICAgICAgICAgIG5vdHNlcCA9IGJwWzNdOwotICAg ICAgICAgIGRlYnVnKEYxMTEsImZzcGxpdCBub3RzZXAiLG5vdHNlcCxhcmduKTsKLSAgICAgICAg ICBpZiAoYXJnbiA+IDQpIHsgICAgICAgICAgICAgICAvKiBIYXZlIGdyb3VwaW5nIHNldD8gKi8K LSAgICAgICAgICAgICAgY2hhciAqIGJwNCA9IGJwWzRdOwotICAgICAgICAgICAgICBkZWJ1ZyhG MTExLCJmc3BsaXQgYnA0IixicDQsYXJnbik7Ci0gICAgICAgICAgICAgIGlmICghYnA0KSBicDQg PSAiMCI7Ci0gICAgICAgICAgICAgIGlmICghKmJwNCkgYnA0ID0gIjAiOwotICAgICAgICAgICAg ICBpZiAoY2hrbnVtKGJwNCkpIHsKLSAgICAgICAgICAgICAgICAgIGdyb3VwaW5nID0gYXRvaShi cDQpOwotICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwaW5nID09IC0xKQotICAgICAgICAgICAg ICAgICAgICBncm91cGluZyA9IDEyNzsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAg ICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwp OwotICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAgfQotICAgICAg ICAgIH0KLSAgICAgICAgICAvKiBBcmdzIHBhcnNlZCwgbm93IGRvIHRoZSB3b3JrICovCi0KLSAg ICAgICAgICBkZWJ1ZyhGMTExLCJmc3BsaXQgYnAwIixicDAsbik7Ci0gICAgICAgICAgcSA9IGNr c3BsaXQoc3BsaXR0aW5nLG4sYnAwLHNlcCxub3RzZXAsZ3JvdXBpbmcsMCxub2NvbGxhcHNlKTsK LQotICAgICAgICAgIHdvcmRudW0gPSBxID8gcS0+YV9zaXplIDogLTE7IC8qIENoZWNrIHJlc3Vs dCAqLwotICAgICAgICAgIGlmICh3b3JkbnVtIDwgMCkgewotICAgICAgICAgICAgICBmYWlsZWQg PSAxOyAgICAgICAgICAgICAgIC8qIEZhaWx1cmUgKi8KLSAgICAgICAgICAgICAgaWYgKGZuZGlh Z3MpCi0gICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAg ICAgICAgICAgICAgICh3b3JkbnVtID09IC0xKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAg IjxFUlJPUjpNQUxMT0NfRkFJTFVSRTpcXGYiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAi PEVSUk9SOlRPT19NQU5ZX1dPUkRTOlxcZiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZm4s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIigpPiIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgIGdvdG8g Zm5lbmQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChzcGxpdHRpbmcpIHsgICAgICAgICAg ICAgIC8qIFxmc3BsaXQoKSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFs LGNraXRvYSh3b3JkbnVtKSxGTlZBTEwpOwotICAgICAgICAgICAgICBpZiAoYXJyYXkpIHsgICAg ICAgICAgICAgIC8qIEFycmF5IHdhcyBub3QgZGVjbGFyZWQuICovCi0gICAgICAgICAgICAgICAg ICBpbnQgaTsKLSAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGRjbGFycmF5KGFidWZbMV0sd29y ZG51bSkpIDwgMCkgeyAvKiBEZWNsYXJlIGl0LiAqLwotICAgICAgICAgICAgICAgICAgICAgIGZh aWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAg ICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiPEVSUk9SOk1BTExPQ19GQUlMVVJFOlxcZiIsZm4sIigpPiIsTlVMTCk7 Ci0gICAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gd29yZG51bTsgaSsrKSB7IC8qIENv cHkgcmVzdWx0cyAqLwotICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihhX3B0clt4XVtp XSkscS0+YV9oZWFkW2ldKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg IGFfcHRyW3hdWzBdID0gTlVMTDsgICAvKiBBcnJheSBpcyAxLWJhc2VkICovCi0gICAgICAgICAg ICAgICAgICBtYWtlc3RyKCYoYV9wdHJbeF1bMF0pLGZudmFsKTsgLyogRWxlbWVudCA9IHNpemUg Ki8KLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgIC8qIFxmd29yZCgpIHJlc3VsdCAqLwotICAgICAgICAgICAgICBjaGFyICogczsKLSAgICAg ICAgICAgICAgcyA9IHEtPmFfaGVhZFsxXTsKLSAgICAgICAgICAgICAgaWYgKCFzKSBzID0gIiI7 Ci0gICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCxzLEZOVkFMTCk7Ci0gICAgICAgICAgfQot ICAgICAgICAgIGdvdG8gZm5lbmQ7ICAgICAgICAgICAgICAgICAgIC8qIERvbmUgKi8KLSAgICAg IH0KLQotICAgIH0gLyogQnJlYWsgdXAgYmlnIHN3aXRjaC4uLiAqLwotCi0gICAgc3dpdGNoICh5 KSB7Ci0KLSNpZmRlZiBDS19LRVJCRVJPUwotICAgICAgY2FzZSBGTl9LUkJfVEs6ICAgICAgICAg ICAgICAgICAgIC8qIEtlcmJlcm9zIHRpY2tldHMgKi8KLSAgICAgIGNhc2UgRk5fS1JCX05YOiAg ICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyBuZXh0IHRpY2tldCAqLwotICAgICAgY2FzZSBG Tl9LUkJfSVY6ICAgICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIHRpY2tldCBpcyB2YWxpZCAq LwotICAgICAgY2FzZSBGTl9LUkJfRkc6ICAgICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIFRp Y2tldCBmbGFncyAqLwotICAgICAgY2FzZSBGTl9LUkJfVFQ6IHsgICAgICAgICAgICAgICAgIC8q IEtlcmJlcm9zIHRpY2tldCB0aW1lICovCi0gICAgICAgICAgaW50IGt2ID0gMDsgICAgICAgICAg ICAgICAgICAgLyogS2VyYmVyb3MgdmVyc2lvbiAqLwotICAgICAgICAgIGludCBuID0gMDsKLSAg ICAgICAgICBjaGFyICogcyA9IE5VTEw7Ci0gICAgICAgICAgaWYgKHJkaWdpdHMoYnBbMF0pKSB7 Ci0gICAgICAgICAgICAgIGt2ID0gYXRvaShicFswXSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAg ICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAg ICAgICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAg ICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrdiAhPSA0ICYm IGt2ICE9IDUpIHsKLSAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgaWYg KGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAg ICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLGZuLCIoKT4i LE5VTEwpOwotICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgIH0KLSAgICAgICAg ICBpZiAoKGN4ID09IEZOX0tSQl9JViB8fCBjeCA9PSBGTl9LUkJfVFQgfHwgY3ggPT0gRk5fS1JC X0ZHKSAmJgotICAgICAgICAgICAgICAgYXJnbiA8IDIpIHsKLSAgICAgICAgICAgICAgZmFpbGVk ID0gMTsKLSAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAgY2ttYWtt c2coZm52YWwsRk5WQUxMLCI8RVJST1I6TUlTU0lOR19BUkc6XFxmIixmbiwiKCk+IixOVUxMKTsK LSAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgc3dpdGNo ICh5KSB7Ci0gICAgICAgICAgICBjYXNlIEZOX0tSQl9USzogICAgICAgICAgICAgLyogTnVtYmVy IG9mIEtlcmJlcm9zIHRpY2tldHMgKi8KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgICAg ICAgICAgICBzd2l0Y2ggKGt2KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAg ICAgICAgICAgbiA9IGNrX2tyYjRfZ2V0X3RrdHMoKTsKLSAgICAgICAgICAgICAgICAgIHNwcmlu dGYoZm52YWwsICIlZCIsIChuID49IDApID8gbiA6IDApOyAvKiBTQUZFICovCi0gICAgICAgICAg ICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICAgIGNhc2UgNTogewotICAgICAgICAg ICAgICAgICAgICBleHRlcm4gY2hhciAqIGtyYjVfZF9jYzsKLSAgICAgICAgICAgICAgICAgICAg biA9IGNrX2tyYjVfZ2V0X3RrdHMoa3JiNV9kX2NjKTsKLSAgICAgICAgICAgICAgICAgICAgc3By aW50ZihmbnZhbCwgIiVkIiwgKG4gPj0gMCkgPyBuIDogMCk7IC8qIFNBRkUgKi8KLSAgICAgICAg ICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg IH0KLSNlbHNlCi0gICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIiwwKTsgICAgLyogU0FG RSAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0gICAgICAgICAgICAgIGdvdG8g Zm5lbmQ7Ci0KLSAgICAgICAgICAgIGNhc2UgRk5fS1JCX05YOiAgICAgICAgICAgICAvKiBLZXJi ZXJvcyBuZXh0IHRpY2tldCAqLwotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgICAg ICAgIHN3aXRjaCAoa3YpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAg ICAgICBzID0gY2tfa3JiNF9nZXRfbmV4dF90a3QoKTsKLSAgICAgICAgICAgICAgICAgIGNrc3Ry bmNweShmbnZhbCwgcyA/IHMgOiAiIixGTlZBTEwpOwotICAgICAgICAgICAgICAgICAgZ290byBm bmVuZDsKLSAgICAgICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgICBzID0gY2tf a3JiNV9nZXRfbmV4dF90a3QoKTsKLSAgICAgICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCwg cyA/IHMgOiAiIixGTlZBTEwpOwotICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAg ICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiayVkIG5leHQt dGlja2V0LXN0cmluZyIsa3YpOyAvKiBTQUZFICovCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJ T04gKi8KLSAgICAgICAgICAgICAgZ290byBmbmVuZDsKLQotICAgICAgICAgICAgY2FzZSBGTl9L UkJfSVY6ICAgICAgICAgICAgIC8qIEtlcmJlcm9zIHRpY2tldCBpcyB2YWxpZCAqLwotI2lmZGVm IENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgICAgICAgIC8qIFJldHVybiAxIGlmIHZhbGlkLCAw IGlmIG5vdCAqLwotICAgICAgICAgICAgICBzd2l0Y2ggKGt2KSB7Ci0gICAgICAgICAgICAgICAg Y2FzZSA0OgotICAgICAgICAgICAgICAgICAgbiA9IGNrX2tyYjRfdGt0X2lzdmFsaWQoYnBbMV0p OwotICAgICAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwgIiVkIiwgbiA+IDAgPyAxIDogMCk7 IC8qIFNBVkUgKi8KLSAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAg ICAgY2FzZSA1OiB7Ci0gICAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyICoga3JiNV9kX2Nj OwotICAgICAgICAgICAgICAgICAgICBuID0gY2tfa3JiNV90a3RfaXN2YWxpZChrcmI1X2RfY2Ms YnBbMV0pOwotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsIG4gPiAwID8g MSA6IDApOyAvKiBTQUZFICovCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICBzcHJp bnRmKGZudmFsLCIlZCIsMCk7ICAgIC8qIFNBRkUgKi8KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNB VElPTiAqLwotICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAgICAgICAgICBjYXNlIEZO X0tSQl9UVDogICAgICAgICAgICAgLyogS2VyYmVyb3MgdGlja2V0IHRpbWUgKi8KLSNpZmRlZiBD S19BVVRIRU5USUNBVElPTgotICAgICAgICAgICAgICBzd2l0Y2ggKGt2KSB7Ci0gICAgICAgICAg ICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgICAgbiA9IGNrX2tyYjRfdGt0X3RpbWUoYnBb MV0pOwotICAgICAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLCBuID49IDAgPyBuIDog MCk7IC8qIFNBRkUgKi8KLSAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAg ICAgICAgY2FzZSA1OiB7Ci0gICAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyICoga3JiNV9k X2NjOwotICAgICAgICAgICAgICAgICAgICBuID0gY2tfa3JiNV90a3RfdGltZShrcmI1X2RfY2Ms YnBbMV0pOwotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsIG4gPj0gMCA/ IG4gOiAwKTsgLyogU0FGRSAqLwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgY2tz dHJuY3B5KGZudmFsLCI2MDAiLEZOVkFMTCk7IC8qIFNvbWUgdGltZSAqLwotI2VuZGlmIC8qIENL X0FVVEhFTlRJQ0FUSU9OICovCi0gICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgICAg ICAgIGNhc2UgRk5fS1JCX0ZHOiAgICAgICAgICAgICAvKiBLZXJiZXJvcyB0aWNrZXQgZmxhZ3Mg Ki8KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgICAgICAgICAgICBzd2l0Y2ggKGt2KSB7 Ci0gICAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgICAgZm52YWxbMF0gPSAn XDAnOwotICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAgICBjYXNl IDU6IHsKLSAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2RfY2M7Ci0gICAg ICAgICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCxja19rcmI1X3RrdF9mbGFncyhrcmI1X2Rf Y2MsYnBbMV0pLEZOVkFMTCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICBmbnZh bFswXSA9ICdcMCc7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICAgICAgICAg ICAgZ290byBmbmVuZDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcCA9IGZudmFsOwotICAgICAg ICAgIGdvdG8gZm5lbmQ7Ci0gICAgICB9Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQotI2lm ZGVmIEZOX0VSUk1TRwotICAgICAgY2FzZSBGTl9FUlJNU0c6Ci0gICAgICAgIGlmIChyZGlnaXRz KGJwWzBdKSkgewotICAgICAgICAgICAgayA9IGF0b2koYnBbMF0pOwotICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAg ICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpc XGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgfQot I2lmZGVmIFZNUwotICAgICAgICBja3N0cm5jcHkoZm52YWwsY2t2bXNlcnJzdHIoayksRk5WQUxM KTsKLSNlbHNlCi0gICAgICAgIHggPSBlcnJubzsKLSAgICAgICAgZXJybm8gPSBrOwotICAgICAg ICBja3N0cm5jcHkoZm52YWwsY2tfZXJyc3RyKCksRk5WQUxMKTsKLSAgICAgICAgZXJybm8gPSB4 OwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgIGdvdG8gZm5l bmQ7Ci0jZW5kaWYgLyogRk5fRVJSTVNHICovCi0KLSAgICAgIGNhc2UgRk5fRElNOiB7Ci0gICAg ICAgICAgaW50IG1heDsKLSAgICAgICAgICBjaGFyIGFidWZbMTZdLCAqczsKLSAgICAgICAgICBm bnZhbFswXSA9IE5VTDsgICAgICAgICAgICAgICAvKiBJbml0aWFsIHJldHVybiB2YWx1ZSAqLwot ICAgICAgICAgIGNrc3RybmNweShhYnVmLGJwWzBdLDE2KTsgICAgIC8qIEdldCBhcnJheSByZWZl cmVuY2UgKi8KLSAgICAgICAgICBzID0gYWJ1ZjsKLSAgICAgICAgICBpZiAoKnMgPT0gQ01EUSkg cysrOwotICAgICAgICAgIGZhaWxlZCA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBp dCdzIGJhZCAqLwotICAgICAgICAgIHAgPSBmbnZhbDsgICAgICAgICAgICAgICAgICAgIC8qIFBv aW50IHRvIHJlc3VsdCAqLwotICAgICAgICAgIGlmIChmbmRpYWdzKSAgICAgICAgICAgICAgICAg IC8qIERlZmF1bHQgaXMgdGhpcyBlcnJvciBtZXNzYWdlICovCi0gICAgICAgICAgICBja21ha21z ZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpBUkdfQkFEX0FSUkFZOlxcZiIsZm4sIigpPiIsTlVMTCk7 Ci0gICAgICAgICAgaWYgKHNbMF0gIT0gJyYnKSB7ICAgICAgICAgICAgLyogIkFkZHJlc3MiIG9m IGFycmF5ICovCi0gICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgfQotICAgICAg ICAgIGlmIChzWzJdKSB7Ci0gICAgICAgICAgICAgIGlmIChzWzJdICE9ICdbJyB8fCBzWzNdICE9 ICddJykgewotICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAgfQot ICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoc1sxXSA+PSA2NCAmJiBzWzFdIDwgOTEpICAvKiBD b252ZXJ0IHVwcGVyIHRvIGxvd2VyICovCi0gICAgICAgICAgICBzWzFdICs9IDMyOwotICAgICAg ICAgIGlmIChzWzFdIDwgOTUgfHwgc1sxXSA+IDEyMikgeyAvKiBDaGVjayBmb3IgYS16ICovCi0g ICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CSAJIC8qIEJhZCAqLwotICAgICAgICAgIH0KLSAgICAg ICAgICBpZiAoKG1heCA9IGNoa2FycmF5KHNbMV0sMSkpIDwgMSkgLyogKHNlY29uZCBhcmcgd2Fz IDEpICovCi0gICAgICAgICAgICBtYXggPSAwOwotICAgICAgICAgIGZhaWxlZCA9IDA7ICAgICAg ICAgICAgICAgICAgIC8qIFVuc2V0IGZhaWx1cmUgZmxhZyAqLwotICAgICAgICAgIHNwcmludGYo Zm52YWwsIiVkIixtYXgpOyAgICAgIC8qIFNBRkUgKi8KLSAgICAgICAgICBnb3RvIGZuZW5kOwot ICAgICAgfQotCi0gICAgfSAvKiBCcmVhayB1cCBiaWcgc3dpdGNoLi4uICovCi0KLSAgICBzd2l0 Y2ggKHkpIHsKLSAgICAgIGNhc2UgRk5fSkRBVEU6Ci0gICAgICAgIGlmIChhcmduIDwgMSkgICAg ICAgICAgICAgICAgICAgLyogQ2hlY2sgbnVtYmVyIG9mIGFyZ3MgKi8KLSAgICAgICAgICBwID0g Y2tkYXRlKCk7ICAgICAgICAgICAgICAgICAvKiBOb25lLCBnZXQgdG9kYXkncyBkYXRlLXRpbWUg Ki8KLSAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTb21lICovCi0g ICAgICAgICAgcCA9IGJwWzBdOyAgICAgICAgICAgICAgICAgICAgLyogVXNlIGZpcnN0ICovCi0g ICAgICAgIHAgPSBja2N2dGRhdGUocCwwKTsgICAgICAgICAgICAgLyogQ29udmVydCB0byBzdGFu ZGFyZCBmb3JtICovCi0gICAgICAgIGNrc3RybmNweShmbnZhbCx6amRhdGUocCksRk5WQUxMKTsg LyogQ29udmVydCB0byBKdWxpYW4gKi8KLSAgICAgICAgcCA9IGZudmFsOyAgICAgICAgICAgICAg ICAgICAgICAvKiBQb2ludCB0byByZXN1bHQgKi8KLSAgICAgICAgZmFpbGVkID0gMDsKLSAgICAg ICAgaWYgKCpwID09ICctJykgewotICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAg IGlmIChmbmRpYWdzKSAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGlzIHRoaXMgZXJyb3IgbWVz c2FnZSAqLwotICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpBUkdf QkFEX0RBVEU6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgfQotICAgICAgICBnb3RvIGZu ZW5kOwotCi0gICAgICBjYXNlIEZOX0RBVEVKOgotICAgICAgICBja3N0cm5jcHkoZm52YWwsanpk YXRlKGJwWzBdKSxGTlZBTEwpOyAvKiBDb252ZXJ0IHRvIHl5eXk8ZGF5b2Z5ZWFyPiAqLwotICAg ICAgICBwID0gZm52YWw7ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdCAq LwotICAgICAgICBmYWlsZWQgPSAwOwotICAgICAgICBpZiAoKnAgPT0gJy0nKSB7Ci0gICAgICAg ICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYgKGZuZGlhZ3MpICAgICAgICAgICAgICAg IC8qIERlZmF1bHQgaXMgdGhpcyBlcnJvciBtZXNzYWdlICovCi0gICAgICAgICAgICAgIGNrbWFr bXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkFSR19CQURfREFURTpcXGYiLGZuLCIoKT4iLE5VTEwp OwotICAgICAgICB9Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgIGNhc2UgRk5fRFRJTTog ICAgICAgICAgICAgICAgICAgICAvKiBcZmN2dGRhdGUoKSAqLwotICAgICAgY2FzZSBGTl9USU1F OiAgICAgICAgICAgICAgICAgICAgIC8qIEZyZWUtZm9ybWF0IHRpbWUgdG8gaGg6bW06c3MgKi8K LSAgICAgIGNhc2UgRk5fTlRJTTogICAgICAgICAgICAgICAgICAgICAvKiBUaW1lIHRvIHNlYyBz aW5jZSBtaWRuaWdodCAqLwotICAgICAgICBzID0gKGFyZ24gPiAwKSA/IGJwWzBdIDogIiI7Ci0g ICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAgICBpZiAoISpzKQotICAgICAgICAgIHAgPSBj a2RhdGUoKTsgICAgICAgICAgICAgICAgIC8qIE5vbmUsIGdldCB0b2RheSdzIGRhdGUgKi8KLSAg ICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTb21lICovCi0gICAgICAg ICAgcCA9IGJwWzBdOyAgICAgICAgICAgICAgICAgICAgLyogVXNlIGZpcnN0ICovCi0JewotCSAg ICBjaGFyICogczsKLQkgICAgcyA9IHA7Ci0JICAgIHdoaWxlICgqcykgewotCQlpZiAoKnMgPCAz MikgewotCQkgICAgKnMgPSBOVUw7Ci0JCSAgICBicmVhazsKLQkJfQotCQlzKys7Ci0JICAgIH0K LQkgICAgLyogZG8geyBpZiAoKnMgPCAnIScpICpzID0gTlVMOyBicmVhazsgfSB3aGlsZSAoKnMr Kyk7ICovCi0JfQotICAgICAgICBwID0gY2tjdnRkYXRlKHAsMik7ICAgICAgICAgICAgIC8qIENv bnZlcnQgdG8gc3RhbmRhcmQgZm9ybSAqLwotICAgICAgICBpZiAoKnAgPT0gJzwnKSB7Ci0gICAg ICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYgKGZuZGlhZ3MpICAgICAgICAgICAg ICAgIC8qIERlZmF1bHQgaXMgdGhpcyBlcnJvciBtZXNzYWdlICovCi0gICAgICAgICAgICAgIGNr bWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdf QkFEX0RBVEVfT1JfVElNRTpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgcCA9IGZu dmFsOwotICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXJn biA+IDEpIHsJCQkvKiBGb3JtYXQgY29kZSAqLwotICAgICAgICAgICAgcyA9IGJwWzFdOwotICAg ICAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgICAgICBpZiAoISpzKSBzID0gIjAiOwot ICAgICAgICAgICAgaWYgKCFjaGtudW0ocykpIHsKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSAx OwotICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICAgICAgY2ttYWtt c2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdf Tk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgICAgICBwID0gZm52 YWw7Ci0gICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIHggPSBhdG9pKHMpOwotICAgICAgICAgICAgLyogaWYgKHgpICovIHAgPSBzaHVmZmxlZGF0 ZShwLHgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjeCA9PSBGTl9USU1FKSB7Ci0gICAgICAg ICAgICBwICs9IDk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3ggPT0gRk5fTlRJTSkgewotICAgICAg ICAgICAgbG9uZyBzZWMgPSAwTDsKLSAgICAgICAgICAgIHBbMTFdID0gTlVMOwotICAgICAgICAg ICAgcFsxNF0gPSBOVUw7Ci0gICAgICAgICAgICBzZWMgPSBhdG9sKHArOSkgKiAzNjAwTCArIGF0 b2wocCsxMikgKiA2MEwgKyBhdG9sKHArMTUpOwotICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwi JWxkIixzZWMpOyAgIC8qIFNBRkUgKi8KLSAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAg fQotICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAgICBjYXNlIEZOX01KRDogICAgICAgICAgICAg ICAgICAgICAgLyogTW9kaWZpZWQgSnVsaWFuIERhdGUgKi8KLSAgICAgICAgaWYgKGFyZ24gPCAx KSAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBudW1iZXIgb2YgYXJncyAqLwotICAgICAgICAg IHAgPSB6em5kYXRlKCk7ICAgICAgICAgICAgICAgIC8qIE5vbmUsIGdldCB0b2RheSdzIGRhdGUt dGltZSAqLwotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWUg Ki8KLSAgICAgICAgICBwID0gYnBbMF07ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgZmlyc3Qg Ki8KLSAgICAgICAgcCA9IGNrY3Z0ZGF0ZShwLDApOyAgICAgICAgICAgICAvKiBDb252ZXJ0IHRv IHN0YW5kYXJkIGZvcm0gKi8KLSAgICAgICAgaWYgKCpwID09ICctJykgewotICAgICAgICAgICAg ZmFpbGVkID0gMTsKLSAgICAgICAgICAgIGlmIChmbmRpYWdzKSAgICAgICAgICAgICAgICAvKiBE ZWZhdWx0IGlzIHRoaXMgZXJyb3IgbWVzc2FnZSAqLwotICAgICAgICAgICAgICBja21ha21zZyhm bnZhbCxGTlZBTEwsIjxFUlJPUjpBUkdfQkFEX0RBVEU6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAg ICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgLyogQ29udmVydCB0byBt b2RpZmllZCBKdWxpYW4gZGF0ZSAqLwotICAgICAgICBzcHJpbnRmKGZudmFsLCIlbGQiLG1qZChw KSk7ICAgIC8qIFNBRkUgKi8KLSAgICAgICAgcCA9IGZudmFsOyAgICAgICAgICAgICAgICAgICAg ICAvKiBQb2ludCB0byByZXN1bHQgKi8KLSAgICAgICAgZ290byBmbmVuZDsKLQotICAgICAgY2Fz ZSBGTl9NSkQyOiB7Ci0gICAgICAgICAgbG9uZyBrID0gMEw7Ci0gICAgICAgICAgaW50IG4gPSAw OwotICAgICAgICAgIHAgPSBldmFseChicFswXSk7Ci0gICAgICAgICAgaWYgKCpwID09ICctJykg ewotICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgIG4gPSAxOwotICAgICAgICAgIH0K LSAgICAgICAgICBpZiAoIXJkaWdpdHMocCkpIHsKLSAgICAgICAgICAgICAgZmFpbGVkID0gMTsK LSAgICAgICAgICAgICAgZXZhbGVycihmbik7Ci0gICAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAg ICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICBrID0gYXRvbChwKTsKLSAgICAgICAgICAgICAgaWYgKG4pIGsgPSAtazsKLSAgICAgICAgICB9 Ci0gICAgICAgICAgY2tzdHJuY3B5KGZudmFsLG1qZDJkYXRlKGspLEZOVkFMTCk7IC8qIENvbnZl cnQgdG8gRGF0ZSAqLwotICAgICAgICAgIHAgPSBmbnZhbDsgICAgICAgICAgICAgICAgICAgIC8q IFBvaW50IHRvIHJlc3VsdCAqLwotICAgICAgICAgIGZhaWxlZCA9IDA7Ci0gICAgICAgICAgZ290 byBmbmVuZDsKLSAgICAgIH0KLQotI2lmbmRlZiBOT0RJQUwKLSAgICAgIGNhc2UgRk5fUE5DVlQ6 IHsgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IHBob25lIG51bWJlciAqLwotICAgICAgICAg IGV4dGVybiBjaGFyICogcG5jdnQoKTsKLSAgICAgICAgICBmYWlsZWQgPSAwOwotICAgICAgICAg IHAgPSBwbmN2dChicFswXSk7Ci0gICAgICAgICAgaWYgKCFwKSBwID0gIiI7Ci0gICAgICAgICAg aWYgKCEqcCkgewotICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgIGlmIChmbmRp YWdzKSAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGlzIHRoaXMgZXJyb3IgbWVzc2FnZSAqLwot ICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAg ICAgICI8RVJST1I6QVJHX0JBRF9QSE9ORU5VTTpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAg ICB9Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICB9Ci0jZW5kaWYgLyogTk9ESUFMICovCi0K LSAgICAgIGNhc2UgRk5fREFZOgotICAgICAgY2FzZSBGTl9OREFZOgotICAgICAgICBpZiAoYXJn biA8IDEpICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIG51bWJlciBvZiBhcmdzICovCi0gICAg ICAgICAgcCA9IHp6bmRhdGUoKTsgICAgICAgICAgICAgICAgLyogTm9uZSwgZ2V0IHRvZGF5J3Mg ZGF0ZS10aW1lICovCi0gICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog U29tZSAqLwotICAgICAgICAgIHAgPSBicFswXTsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBm aXJzdCAqLwotICAgICAgICBwID0gY2tjdnRkYXRlKHAsMCk7ICAgICAgICAgICAgIC8qIENvbnZl cnQgdG8gc3RhbmRhcmQgZm9ybSAqLwotICAgICAgICBpZiAoKnAgPT0gJy0nKSB7Ci0gICAgICAg ICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYgKGZuZGlhZ3MpICAgICAgICAgICAgICAg IC8qIERlZmF1bHQgaXMgdGhpcyBlcnJvciBtZXNzYWdlICovCi0gICAgICAgICAgICAgIGNrbWFr bXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkFSR19CQURfREFURTpcXGYiLGZuLCIoKT4iLE5VTEwp OwotICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgfQotICAgICAgICBmYWlsZWQgPSAw OwotICAgICAgICB6ID0gbWpkKHApOyAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgdG8g bW9kaWZpZWQgSnVsaWFuIGRhdGUgKi8KLSAgICAgICAgeiA9IHogJSA3TDsKLSAgICAgICAgaWYg KHogPCAwKSB7Ci0gICAgICAgICAgICB6ID0gMCAtIHo7Ci0gICAgICAgICAgICBrID0gNiAtICgo aW50KXogKyAzKSAlIDc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBrID0gKChpbnQp eiArIDMpICUgNzsJLyogRGF5IG9mIHdlZWsgKi8KLSAgICAgICAgfQotICAgICAgICBwID0gZm52 YWw7ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdCAqLwotICAgICAgICBp ZiAoY3ggPT0gRk5fTkRBWSkKLSAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsayk7ICAgICAg ICAvKiBTQUZFICovCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBja3N0cm5jcHkoZm52YWwsd2tk YXlzW2tdLEZOVkFMTCk7Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgIGNhc2UgRk5fTjJU SU06IHsgICAgICAgICAgICAgICAgICAvKiBTZWMgc2luY2UgbWlkbmlnaHQgdG8gaGg6bW06c3Mg Ki8KLSAgICAgICAgICBsb25nIGsgPSAwTDsKLSAgICAgICAgICBpbnQgbiA9IDAsIGhoLCBtbSwg c3M7Ci0gICAgICAgICAgY2hhciAqIHMgPSBicFswXTsKLSAgICAgICAgICBpZiAoYXJnbiA8IDEp ICAgICAgICAgICAgICAgICAvKiBJZiBubyBhcmcgc3Vic3RpdHV0ZSAwICovCi0gICAgICAgICAg ICBzID0gIjAiOwotICAgICAgICAgIHAgPSBldmFseChzKTsgICAgICAgICAgICAgICAgIC8qIEV2 YWx1YXRlIGV4cHJlc3Npb24gc2lsZW50bHkgKi8KLSAgICAgICAgICBpZiAoKnAgPT0gJy0nKSB7 ICAgICAgICAgICAgICAvKiBDaGVjayByZXN1bHQgZm9yIG1pbnVzIHNpZ24gKi8KLSAgICAgICAg ICAgICAgcCsrOwotICAgICAgICAgICAgICBuID0gMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAg aWYgKCFyZGlnaXRzKHApKSB7IC8qIENoZWNrIGZvciBudW1lcmljICovCi0gICAgICAgICAgICAg IGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAg ICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixO VUxMKTsKLSAgICAgICAgICAgICAgcCA9IGZudmFsOwotICAgICAgICAgICAgICBnb3RvIGZuZW5k OwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGsgPSBhdG9sKHApOwotICAgICAg ICAgICAgICBpZiAobikgayA9IC1rOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoayA8IDAp IHsgICAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgbmVnYXRpdmUgKi8KLSAgICAgICAgICAg ICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAg ICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJS T1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgICBw ID0gZm52YWw7Ci0gICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgfQotICAgICAg ICAgIGhoID0gayAvIDM2MDBMOyAgICAgICAgICAgICAgIC8qIEhhdmUgcG9zaXRpdmUgbnVtYmVy ICovCi0gICAgICAgICAgbW0gPSAoayAlIDM2MDBMKSAvIDYwTDsgICAgICAgLyogYnJlYWsgaXQg ZG93bi4uLiAqLwotICAgICAgICAgIHNzID0gKChrICUgMzYwMEwpICUgNjBMKTsKLQotICAgICAg ICAgIHNwcmludGYoZm52YWwsIiUwMmQ6JTAyZDolMDJkIixoaCxtbSxzcyk7IC8qIFNBRkUgKi8K LSAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgZmFpbGVkID0gMDsKLSAgICAgICAgICBn b3RvIGZuZW5kOwotICAgICAgfQotCi0gICAgICBjYXNlIEZOX1BFUk06IHsgICAgICAgICAgICAg ICAgICAgLyogRmlsZSBwZXJtaXNzaW9ucyAqLwotICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAg ICAgICB6ID0gemNoa2koYnBbMF0pOwotICAgICAgICAgIGlmICh6IDwgMCkgewotICAgICAgICAg ICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICBpZiAoZm5kaWFncykgewotICAgICAgICAg ICAgICAgICAgaWYgKHogPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFs LEZOVkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpGSUxFX05PVF9G T1VORDpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeiA9 PSAtMikKLSAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkZJTEVfTk9UX1JFQURBQkxFOlxcZiIsZm4s IigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgICBlbHNlIGlmICh6ID09IC0zKQotICAgICAg ICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICI8RVJST1I6RklMRV9OT1RfQUNDRVNTSUJMRTpcXGYiLGZuLCIoKT4iLE5VTEwp OwotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBja21ha21zZyhm bnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6RklMRV9F UlJPUjpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg IGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgfQotI2lmZGVmIENLX1BFUk1TCi0gICAgICAgICAgY2tz dHJuY3B5KGZudmFsLHppcGVybShicFswXSksRk5WQUxMKTsKLSNlbHNlCi0gICAgICAgICAgY2tz dHJuY3B5KGZudmFsLCIodW5rbm93bikiLEZOVkFMTCk7Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8K LSAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgfQotICAgICAgY2FzZSBGTl9UTE9PSzogICAg ICAgICAgICAgICAgICAgIC8qIHRhYmxlbG9vaygpICovCi0gICAgICBjYXNlIEZOX0FMT09LOiB7 ICAgICAgICAgICAgICAgICAgLyogYXJyYXlsb29rKCkgKi8KLSAgICAgICAgICBpbnQgaSwgeCwg aGksIGxvLCBtYXgsIGNtZGxlbjsKLSAgICAgICAgICBjaGFyIGFidWZbMTZdLCAqcywgKnBhdDsK LSAgICAgICAgICBjaGFyIGt3YnVmWzI1Nl07Ci0gICAgICAgICAgY2hhciBkZWxpbSA9ICc6JzsK LSAgICAgICAgICBmYWlsZWQgPSAxOyAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgZmFpbHVy ZSAqLwotICAgICAgICAgIGNrc3RybmNweShmbnZhbCwiLTEiLEZOVkFMTCk7Ci0gICAgICAgICAg cGF0ID0gYnBbMF07ICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gc2VhcmNoIHBhdHRlcm4g Ki8KLSAgICAgICAgICBpZiAoIXBhdCkgcGF0ID0gIiI7ICAgICAgICAgICAvKiBXYXRjaCBvdXQg Zm9yIE5VTEwgcG9pbnRlciAqLwotICAgICAgICAgIGNtZGxlbiA9IHN0cmxlbihwYXQpOyAgICAg ICAgIC8qIEdldCBwYXR0ZXJuIGxlbmd0aCAqLwotICAgICAgICAgIGlmIChhcmduIDwgMiAvKiB8 fCBjbWRsZW4gPCAxICovICkgeyAvKiBOZWVkIHR3byBhcmdzICovCi0gICAgICAgICAgICAgIGlm IChmbmRpYWdzKQotICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9S Ok1JU1NJTkdfQVJHOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAgIGdvdG8gZm5l bmQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNrc3RybmNweShhYnVmLGJwWzFdLDE2KTsgICAg IC8qIEdldCBhcnJheSByZWZlcmVuY2UgKi8KLSAgICAgICAgICBpZiAoYXJnbiA+IDIpCi0gICAg ICAgICAgICBkZWxpbSA9ICooYnBbMl0pOwotICAgICAgICAgIHMgPSBhYnVmOwotICAgICAgICAg IGlmICgoeCA9IGFycmF5Ym91bmRzKHMsJmxvLCZoaSkpIDwgMCkgeyAvKiBHZXQgaW5kZXggYW5k IGJvdW5kcyAqLwotICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgIGNr bWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkFSR19CQURfQVJSQVk6XFxmIixmbiwiKCk+IixO VUxMKTsKLSAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICB9Ci0gICAgICAgICAg cCA9IGZudmFsOyAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0ICovCi0gICAg ICAgICAgbWF4ID0gYV9kaW1beF07ICAgICAgICAgICAgICAgLyogU2l6ZSBvZiBhcnJheSAqLwot ICAgICAgICAgIGlmIChsbyA8IDApIGxvID0gMDsgICAgICAgICAgIC8qIFVzZSBnaXZlbiByYW5n ZSBpZiBhbnkgKi8KLSAgICAgICAgICBpZiAobG8gPiBtYXgpIGxvID0gbWF4OwotICAgICAgICAg IGlmIChoaSA8IDApIGhpID0gbWF4OwotICAgICAgICAgIGlmIChoaSA+IG1heCkgaGkgPSBtYXg7 Ci0gICAgICAgICAgZmFpbGVkID0gMDsgICAgICAgICAgICAgICAgICAgLyogVW5zZXQgZmFpbHVy ZSBmbGFnICovCi0gICAgICAgICAgaWYgKG1heCA8IDEpCi0gICAgICAgICAgICBnb3RvIGZuZW5k OwotICAgICAgICAgIGt3YnVmWzI1NV0gPSBOVUw7Ci0gICAgICAgICAgZm9yIChpID0gbG87IGkg PD0gaGk7IGkrKykgewotICAgICAgICAgICAgICBpZiAoIWFfcHRyW3hdW2ldKQotICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICBpZiAoY3ggPT0gRk5fQUxPT0spIHsKLSAg ICAgICAgICAgICAgICAgIGlmIChja21hdGNoKHBhdCxhX3B0clt4XVtpXSxpbnBjYXNbY21kbHZs XSwxKzQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLGkpOyAv KiBTQUZFICovCi0gICAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChjeCA9PSBGTl9UTE9PSykgewotICAg ICAgICAgICAgICAgICAgY2hhciAqIGFhOwotICAgICAgICAgICAgICAgICAgaW50IGogPSAwLCB2 ID0gMCwgbGVuOwotICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gaGkpCi0gICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgYWEgPSBhX3B0clt4XVtpXTsgICAgIC8q IFBvaW50IHRvIHRoaXMgYXJyYXkgZWxlbWVudCAqLwotICAgICAgICAgICAgICAgICAgaWYgKCFh YSkgYWEgPSAiIjsKLSAgICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgMjU0ICYmICphYSkgeyAv KiBJc29sYXRlIGtleXdvcmQgKi8KLSAgICAgICAgICAgICAgICAgICAgICBpZiAoKmFhID09IGRl bGltKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg ICAga3didWZbaisrXSA9ICphYSsrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAga3didWZbal0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgICBsZW4gPSBqOwotICAgICAg ICAgICAgICAgICAgdiA9IDA7Ci0gICAgICAgICAgICAgICAgICBpZiAoKGxlbiA9PSBjbWRsZW4g JiYgIWNrc3RyY21wKGt3YnVmLHBhdCxsZW4sMCkpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg KCh2ID0gIWNrc3RyY21wKGt3YnVmLHBhdCxjbWRsZW4sMCkpICYmCi0gICAgICAgICAgICAgICAg ICAgICAgIGNrc3RyY21wKGFfcHRyW3hdW2krMV0scGF0LGNtZGxlbiwwKSkpIHsKLSAgICAgICAg ICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsaSk7IC8qIFNBRkUgKi8KLSAgICAgICAg ICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgaWYgKHYpIHsgICAgICAgICAgICAgIC8qIEFtYmlndW91cyAqLwotICAgICAgICAg ICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCwiLTIiLEZOVkFMTCk7Ci0gICAgICAgICAgICAg ICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg fQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoY3ggPT0gRk5fVExPT0spIHsgICAgICAgICAv KiB0YWJsZWxvb2soKSBsYXN0IGVsZW1lbnQgKi8KLSAgICAgICAgICAgICAgY2tzdHJuY3B5KGZu dmFsLCItMSIsRk5WQUxMKTsKLSAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcChhX3B0clt4XVto aV0scGF0LGNtZGxlbiwwKSkKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsaGkp OyAvKiBTQUZFICovCi0gICAgICAgICAgfQotICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICB9 Ci0gICAgICBjYXNlIEZOX1RPQjY0OiAgICAgICAgICAgICAgICAgICAgLyogQmFzZS02NCBjb252 ZXJzaW9uICovCi0gICAgICBjYXNlIEZOX0ZNQjY0OgotICAgICAgICBwID0gZm52YWw7Ci0gICAg ICAgICpwID0gTlVMOwotICAgICAgICBpZiAoYXJnbiA8IDEpCi0gICAgICAgICAgZ290byBmbmVu ZDsKLSAgICAgICAgaWYgKGN4ID09IEZOX1RPQjY0KSB7Ci0gICAgICAgICAgICB4ID0gYjh0b2I2 NChicFswXSwtMSxmbnZhbCxGTlZBTEwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg eCA9IHN0cmxlbihicFswXSk7Ci0gICAgICAgICAgICBpZiAoeCAlIDQpIHsgICAgICAgICAgICAg ICAgLyogbGVuZ3RoIG11c3QgYmUgbXVsdGlwbGUgb2YgNCAqLwotICAgICAgICAgICAgICAgIGZh aWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAg ICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX0lOQ09NUExFVEU6XFxmIixmbiwiKCk+IixO VUxMKTsKLSAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgYjY0dG9iOChOVUxMLDAsTlVMTCwwKTsgICAgIC8qIFJlc2V0ICovCi0gICAgICAgICAg ICB4ID0gYjY0dG9iOChicFswXSwtMSxmbnZhbCxGTlZBTEwpOwotICAgICAgICAgICAgYjY0dG9i OChOVUxMLDAsTlVMTCwwKTsgICAgIC8qIFJlc2V0IGFnYWluICovCi0gICAgICAgIH0KLSAgICAg ICAgaWYgKHggPCAwKSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYg KGZuZGlhZ3MpIHsKLSAgICAgICAgICAgICAgICBjaGFyICogbSA9ICJJTlRFUk5BTF9FUlJPUiI7 Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIC0x OiBtID0gIkFSR19UT09fTE9ORyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSAtMjog bSA9ICJBUkdfT1VUX09GX1JBTkdFIjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGlmIChja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjoiLG0sIlxcZiIsZm4p ID4gMCkKLSAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChmbnZhbCwiKCk+IixGTlZBTEwpOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgIGNh c2UgRk5fQUJTOiB7Ci0gICAgICAgICAgY2hhciAqIHM7Ci0gICAgICAgICAgcyA9IGJwWzBdOwot ICAgICAgICAgIGlmICgqcyA9PSAnLScgfHwgKnMgPT0gJysnKQotICAgICAgICAgICAgcysrOwot ICAgICAgICAgIGlmICghcmRpZ2l0cyhzKSkgewotICAgICAgICAgICAgICBpZiAoZm5kaWFncykK LSAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAg ICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2tzdHJuY3B5 KGZudmFsLHMsRk5WQUxMKTsKLSAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgfQotCi0gICAg ICBjYXNlIEZOX0FBRFVNUDogewotICAgICAgICAgIGNoYXIgYWJ1ZlsxNl0sICpzID0gTlVMTCwg KiphcCA9IE5VTEwsICoqdnAgPSBOVUxMOwotICAgICAgICAgIGNoYXIgcGF0dGVybltWTkFNTF07 Ci0gICAgICAgICAgaW50IHNsZW4sIGksIGosIGssIGZpcnN0ID0gLTE7Ci0gICAgICAgICAgZXh0 ZXJuIGludCB4ZGVsbWFjKCk7Ci0gICAgICAgICAgcCA9IGZudmFsOwotICAgICAgICAgIGlmIChh cmduIDwgMikgewotICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICBj a21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpNSVNTSU5HX0FSRzI6XFxmIixmbiwiKCk+IixO VUxMKTsKLSAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICB9Ci0gICAgICAgICAg ZGVidWcoRjEwMSwiYWFjb252ZXJ0IGFyZ24iLCIiLGFyZ24pOwotICAgICAgICAgIHMgPSBicFsw XTsKLSAgICAgICAgICBzbGVuID0gc3RybGVuKHMpOwotCi0gICAgICAgICAgLyogQ291bnQgZWxl bWVudHMgc28gd2UgY2FuIGNyZWF0ZSB0aGUgYXJyYXkgKi8KLQotICAgICAgICAgIGNrbWFrbXNn KHBhdHRlcm4sVk5BTUwscywiPCo+IixOVUxMLE5VTEwpOwotICAgICAgICAgIGZvciAoayA9IDAs IGkgPSAwOyBpIDwgbm1hYzsgaSsrKSB7Ci0gICAgICAgICAgICAgIGlmIChja21hdGNoKHBhdHRl cm4sbWFjdGFiW2ldLmt3ZCwwLDEpKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoZmlyc3QgPCAw KSAgICAgICAgLyogUmVtZW1iZXIgbG9jYXRpb24gb2YgZmlyc3QgbWF0Y2ggKi8KLSAgICAgICAg ICAgICAgICAgICAgZmlyc3QgPSBpOwotICAgICAgICAgICAgICAgICAgaysrOwotICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGRlYnVnKEYxMDEsImFhY29udmVydCBtYXRj aGVzIiwiIixrKTsKLSAgICAgICAgICBkZWJ1ZyhGMTAxLCJhYWNvbnZlcnQgZmlyc3QiLCIiLGZp cnN0KTsKLSAgICAgICAgICBmbnZhbFswXSA9IE5VTDsgICAgICAgICAgICAgICAvKiBJbml0aWFs IHJldHVybiB2YWx1ZSAqLwotICAgICAgICAgIGNrc3RybmNweShhYnVmLGJwWzFdLDE2KTsgICAg IC8qIEdldCBhcnJheSByZWZlcmVuY2UgKi8KLSAgICAgICAgICBzID0gYWJ1ZjsKLSAgICAgICAg ICBpZiAoKnMgPT0gQ01EUSkgcysrOwotICAgICAgICAgIHAgPSBmbnZhbDsgICAgICAgICAgICAg ICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdCAqLwotICAgICAgICAgIGlmIChmbmRpYWdzKSAgICAg ICAgICAgICAgICAgIC8qIERlZmF1bHQgaXMgdGhpcyBlcnJvciBtZXNzYWdlICovCi0gICAgICAg ICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpBUkdfQkFEX0FSUkFZOlxcZiIsZm4s IigpPiIsTlVMTCk7Ci0gICAgICAgICAgaWYgKHNbMF0gIT0gJyYnKSAgICAgICAgICAgICAgLyog QWRkcmVzcyBvZiBhcnJheSAqLwotICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICBp ZiAoc1syXSkKLSAgICAgICAgICAgIGlmIChzWzJdICE9ICdbJyB8fCBzWzNdICE9ICddJykKLSAg ICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICBpZiAoc1sxXSA+PSA2NCAmJiBzWzFd IDwgOTEpICAvKiBDb252ZXJ0IHVwcGVyIHRvIGxvd2VyICovCi0gICAgICAgICAgICBzWzFdICs9 IDMyOwotICAgICAgICAgIGlmICgoeCA9IGRjbGFycmF5KHNbMV0saykpIDwgMCkgLyogRGVjbGFy ZSBhcnJheSB0byBzaXplICovCi0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgIGFw ID0gYV9wdHJbeF07ICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIGFycmF5IHdlIGp1c3QgZGVj bGFyZWQgKi8KLSAgICAgICAgICAvKiBkZWJ1ZyhGMTExLCJhYWNvbnZlcnQgYXJyYXkgMSIsYWJ1 ZixhcCk7ICovCi0gICAgICAgICAgYWJ1ZlswXSA9IE5VTDsKLSAgICAgICAgICBpZiAoYXJnbiA+ IDIpIHsKLSAgICAgICAgICAgICAgY2tzdHJuY3B5KGFidWYsYnBbMl0sMTYpOyAvKiBHZXQgdmFs dWUgYXJyYXkgcmVmZXJlbmNlICovCi0gICAgICAgICAgICAgIHMgPSBhYnVmOwotICAgICAgICAg ICAgICBpZiAoKnMgPT0gQ01EUSkgcysrOwotICAgICAgICAgICAgICBpZiAoc1swXSAhPSAnJicp ICAgICAgICAgIC8qIEFkZHJlc3Mgb2YgYXJyYXkgKi8KLSAgICAgICAgICAgICAgICBnb3RvIGZu ZW5kOwotICAgICAgICAgICAgICBpZiAoc1syXSkKLSAgICAgICAgICAgICAgICBpZiAoc1syXSAh PSAnWycgfHwgc1szXSAhPSAnXScpCi0gICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAg ICAgICAgICAgICBpZiAoc1sxXSA+PSA2NCAmJiBzWzFdIDwgOTEpIC8qIENvbnZlcnQgdXBwZXIg dG8gbG93ZXIgKi8KLSAgICAgICAgICAgICAgICBzWzFdICs9IDMyOwotICAgICAgICAgICAgICBp ZiAoKHggPSBkY2xhcnJheShzWzFdLGspKSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBmbmVu ZDsKLSAgICAgICAgICAgICAgdnAgPSBhX3B0clt4XTsgICAgICAgICAgICAvKiBQb2ludCB0byBh cnJheSB3ZSBqdXN0IGRlY2xhcmVkICovCi0gICAgICAgICAgfQotICAgICAgICAgIC8qIGRlYnVn KEYxMTEsImFhY29udmVydCBhcnJheSAyIixhYnVmLHZwKTsgKi8KLSAgICAgICAgICBtYWtlc3Ry KCZhcFswXSxja2l0b2EoaykpOwotICAgICAgICAgIGlmICh2cCkgbWFrZXN0cigmdnBbMF0sY2tp dG9hKGspKTsKLSAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgY2ttYWttc2coZm52 YWwsRk5WQUxMLCI8RVJST1I6QVNTT0NJQVRJVkVfQVJSQVk6XFxmIixmbiwiKCk+IixOVUxMKTsK LQotICAgICAgICAgIC8qIENvcHkgbWFjcm8gaW5kZXggJiB2YWx1ZSB0byB0aGUgYXJyYXlzIGFu ZCB0aGVuIHJlbW92ZSB0aGUgKi8KLSAgICAgICAgICAvKiBtYWNybywgc28gdGhlICdmaXJzdCcg cG9pbnRlciBrZWVwcyBpbmRpY2F0aW5nIHRoZSBuZXh0IG9uZS4gKi8KLSAgICAgICAgICAvKiBX ZSBjb3VsZCBjb21iaW5lIHRoZSBpbml0aWFsIGNvdW50aW5nIGxvb3Agd2l0aCB0aGlzIG9uZSBi dXQgKi8KLSAgICAgICAgICAvKiB0aGVuIGl0IHdvdWxkIGJlIGhhcmRlciB0byBjcmVhdGUgdGhl IGFycmF5IGFuZCBhbnl3YXkgdGhpcyAqLwotICAgICAgICAgIC8qIGZ1bmN0aW9uIGlzIHBsZW50 eSBmYXN0IGFzIGl0IGlzLiAqLwotCi0gICAgICAgICAgZm9yIChpID0gMTsgaSA8PSBrOyApIHsK LSAgICAgICAgICAgICAgaWYgKCFja21hdGNoKHBhdHRlcm4sbWFjdGFiW2ZpcnN0XS5rd2QsMCwx KSkgewotICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiYWFjb252ZXJ0IG9kZGJhbGwiLG1h Y3RhYltmaXJzdF0ua3dkLGZpcnN0KTsKLSAgICAgICAgICAgICAgICAgIGZpcnN0Kys7Ci0gICAg ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBj a3N0cm5jcHkodG1wYnVmLG1hY3RhYltmaXJzdF0ua3dkLFRNUEJVRlNJWik7IC8qIE1hY3JvIG5h bWUgKi8KLSAgICAgICAgICAgICAgcyA9IHRtcGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgIC8q IE1ha2Ugd3JpdGVhYmxlIGNvcHkgKi8KLSAgICAgICAgICAgICAgcyArPSBzbGVuOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIElzb2xhdGUgImluZGV4IiAqLwotICAgICAgICAgICAgICBqID0g c3RybGVuKHMpIC0gMTsKLSAgICAgICAgICAgICAgaWYgKCpzICE9ICc8JyB8fCAqKHMraikgIT0g Jz4nKSB7IC8qIENoZWNrIHN5bnRheCAqLwotICAgICAgICAgICAgICAgICAgLyogVGhpcyBzaG91 bGRuJ3QgaGFwcGVuICovCi0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJhYWNvbnZlcnQg RVJST1IiLG1hY3RhYltmaXJzdF0ua3dkLGZpcnN0KTsKLSAgICAgICAgICAgICAgICAgIGdvdG8g Zm5lbmQ7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgKihzK2opID0gTlVMOyAgICAg ICAgICAgICAvKiBSZW1vdmUgZmluYWwgJz4nICovCi0gICAgICAgICAgICAgIGRlYnVnKEYxMTEs ImFhY29udmVydCIscysxLGkpOwotICAgICAgICAgICAgICBtYWtlc3RyKCYoYXBbaV0pLHMrMSk7 ICAgIC8qIFNldCBmaXJzdCBhcnJheSB0byBpbmRleCAqLwotICAgICAgICAgICAgICBpZiAodnAp Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigmKHZwW2ldKSxtYWN0YWJbZmlyc3RdLm12YWwpOyAv KiAybmQgdG8gdmFsdWUgKi8KLSAgICAgICAgICAgICAgaWYgKHhkZWxtYWMoZmlyc3QpIDwgMCkK LSAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICBpKys7Ci0gICAgICAg ICAgfQotICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIixrKTsgICAgICAgIC8qIFNBRkUgKi8K LSAgICAgICAgICBwID0gZm52YWw7ICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gc2l6ZSBv ZiBhcnJheSAqLwotICAgICAgICAgIGRlYnVnKEYxMTAsImFhY29udmVydCByZXR1cm4iLHAsMCk7 Ci0gICAgICAgICAgZmFpbGVkID0gMDsgICAgICAgICAgICAgICAgICAgLyogVW5zZXQgZmFpbHVy ZSBmbGFnICovCi0gICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgIH0KLQotICAgIH0gLyogRW5k IG9mIHN3aXRjaCgpICovCi0KLSNpZmRlZiBGTkZMT0FUCi0vKgotICBGbG9hdGluZy1wb2ludCBm dW5jdGlvbnMuICBUbyBiZSBpbmNsdWRlZCBvbmx5IGlmIEZORkxPQVQgaXMgZGVmaW5lZCwgd2hp Y2gKLSAgc2hvdWxkIGhhcHBlbiBvbmx5IGlmIENLRkxPQVQgaXMgYWxzbyBkZWZpbmVkLCBhbmQg aWYgdGhlIG1hdGggbGlicmFyeSBpcwotICBsaW5rZWQgaW4uICBFdmVuIHRoZW4sIHdlIG1pZ2h0 IGhhdmUgZmxvYXQtdnMtZG91YmxlIGNvbmZ1c2lvbiBhcyB3ZWxsIGFzCi0gIGNvbmZ1c2lvbiBh Ym91dCB3aGF0IHRoZSBmaW5hbCAiJWYiIGZvcm1hdCBlZmZlY3RvciBpcyBzdXBwb3NlZCB0byBy ZWZlcmVuY2UKLSAgKDMyIGJpdHMsIDY0IGJpdHMsIGV0YykuICBFeHBlY3QgdHJvdWJsZSBpZiBD S0ZMT0FUIGRvZXMgbm90IG1hdGNoIHRoZSBkYXRhCi0gIHR5cGUgb2YgbWF0aCBsaWJyYXJ5IGZ1 bmN0aW9ucyBvciBhcmdzLgotKi8KLSAgICBpZiAoY3ggPT0gRk5fRlBBQlMgfHwgICAgICAgICAg ICAgICAvKiBGbG9hdGluZy1wb2ludCBmdW5jdGlvbnMgKi8KLSAgICAgICAgY3ggPT0gRk5fRlBB REQgfHwKLSAgICAgICAgY3ggPT0gRk5fRlBESVYgfHwKLSAgICAgICAgY3ggPT0gRk5fRlBFWFAg fHwKLSAgICAgICAgY3ggPT0gRk5fRlBMT0cgfHwKLSAgICAgICAgY3ggPT0gRk5fRlBMTiAgfHwK LSAgICAgICAgY3ggPT0gRk5fRlBNT0QgfHwKLSAgICAgICAgY3ggPT0gRk5fRlBNQVggfHwKLSAg ICAgICAgY3ggPT0gRk5fRlBNSU4gfHwKLSAgICAgICAgY3ggPT0gRk5fRlBNVUwgfHwKLSAgICAg ICAgY3ggPT0gRk5fRlBQT1cgfHwKLSAgICAgICAgY3ggPT0gRk5fRlBTUVIgfHwKLSAgICAgICAg Y3ggPT0gRk5fRlBJTlQgfHwKLSAgICAgICAgY3ggPT0gRk5fRlBTVUIgfHwKLSAgICAgICAgY3gg PT0gRk5fRlBST1UgfHwKLSAgICAgICAgY3ggPT0gRk5fRlBTSU4gfHwKLSAgICAgICAgY3ggPT0g Rk5fRlBDT1MgfHwKLSAgICAgICAgY3ggPT0gRk5fRlBUQU4pIHsKLSAgICAgICAgQ0tGTE9BVCBm YXJnWzJdLCBmcHJlc3VsdCA9IDAuMDsKLSAgICAgICAgY2hhciBmcGJ1Zls2NF0sICogYnAwOwot ICAgICAgICBkb3VibGUgZHVtbXk7Ci0gICAgICAgIC8qIGludCBzaWduID0gMDsgKi8KLSAgICAg ICAgaW50IGksIGosIHBsYWNlcyA9IDA7Ci0gICAgICAgIGludCBhcmdjb3VudCA9IDE7Ci0KLSAg ICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICBicDAgPSBicFsw XTsKLSAgICAgICAgaWYgKCFicDApCi0gICAgICAgICAgYnAwID0gIjAiOwotICAgICAgICBlbHNl IGlmICghKmJwMCkKLSAgICAgICAgICBicDAgPSAiMCI7Ci0gICAgICAgIGlmICghaXNmbG9hdChi cDAsMCkpIHsKLSAgICAgICAgICAgIGsgPSBteGxvb2sobWFjdGFiLGJwMCxubWFjKTsKLSAgICAg ICAgICAgIGJwMCA9IChrID4gLTEpID8gbWFjdGFiW2tdLm12YWwgOiBOVUxMOwotICAgICAgICAg ICAgaWYgKGJwMCkgewotICAgICAgICAgICAgICAgIGlmICghaXNmbG9hdChicDAsMCkpIHsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgY2tt YWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJS T1I6QVJHX05PVF9GTE9BVDpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgICAgICAg ICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotICAgICAgICBpZiAoY3ggPT0gRk5fRlBJTlQpIHsgICAgICAgICAgIC8qIEZsb2F0IHRvIGlu dCAqLwotICAgICAgICAgICAgZmFpbGVkID0gMDsKLSAgICAgICAgICAgIGNrc3RybmNweShmbnZh bCxicDAsRk5WQUxMKTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGZudmFsW2ldOyBpKyspIHsK LSAgICAgICAgICAgICAgICBpZiAoZm52YWxbaV0gPT0gJy4nKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGZudmFsW2ldID0gTlVMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAg ICB9Ci0gICAgICAgIHN3aXRjaCAoeSkgeyAgICAgICAgICAgICAgICAgICAgLyogVGhlc2UgbmVl ZCAyIGFyZ3MgKi8KLSAgICAgICAgICBjYXNlIEZOX0ZQQUREOgotICAgICAgICAgIGNhc2UgRk5f RlBESVY6Ci0gICAgICAgICAgY2FzZSBGTl9GUE1PRDoKLSAgICAgICAgICBjYXNlIEZOX0ZQTUFY OgotICAgICAgICAgIGNhc2UgRk5fRlBNSU46Ci0gICAgICAgICAgY2FzZSBGTl9GUE1VTDoKLSAg ICAgICAgICBjYXNlIEZOX0ZQUE9XOgotICAgICAgICAgIGNhc2UgRk5fRlBTVUI6Ci0gICAgICAg ICAgICBhcmdjb3VudCA9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgLyogTWlzc2luZyBhcmd1bWVu dHMgYXJlIHN1cHBsaWVkIGFzIDAuMCAqLwotCi0gICAgICAgIGRlYnVnKEYxMTEsZm4sImFyZ2Nv dW50Iixhcmdjb3VudCk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjb3VudDsgaSsrKSB7 IC8qIEdldCBmbG9hdGluZy1wb2ludCBhcmdzICovCi0jaWZkZWYgREVCVUcKLSAgICAgICAgICAg IGlmIChkZWJsb2cpIHsKLSAgICAgICAgICAgICAgICBja21ha21zZyhmcGJ1ZiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICA2NCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiYnBbIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICBja2l0b2EoaSksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgYnBbaV0gPyBicFtpXSA6ICIobnVsbCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICJd IgotICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEw MCxmcGJ1ZiwiIiwwKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgICAg ICAgICAgaWYgKCFicFtpXSkgewotICAgICAgICAgICAgICAgIGZhcmdbaV0gPSAwLjA7Ci0gICAg ICAgICAgICB9IGVsc2UgaWYgKCEqKGJwW2ldKSkgewotICAgICAgICAgICAgICAgIGZhcmdbaV0g PSAwLjA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc2Zsb2F0KGJwW2ldLDApKSB7Ci0gICAg ICAgICAgICAgICAgY2hhciAqIHRtcDsKLSAgICAgICAgICAgICAgICBrID0gbXhsb29rKG1hY3Rh YixicFtpXSxubWFjKTsKLSAgICAgICAgICAgICAgICB0bXAgPSAoayA+IC0xKSA/IG1hY3RhYltr XS5tdmFsIDogTlVMTDsKLSAgICAgICAgICAgICAgICBpZiAodG1wKSB7Ci0gICAgICAgICAgICAg ICAgICAgIGlmICghaXNmbG9hdCh0bXAsMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm IChmbmRpYWdzKQotICAgICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZB TEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05PVF9G TE9BVDpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBm bmVuZDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGZhcmdbaV0gPSBmbG9hdHZhbDsKLQotI2lmZGVmIERFQlVHCi0g ICAgICAgICAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihmcGJ1Ziwi ZmFyZ1slZF09JWYiLGksZmFyZ1tpXSk7IC8qIFNBRkUgKi8KLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAwLGZwYnVmLCIiLDApOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0g ICAgICAgIH0KLSAgICAgICAgaWYgKGJwW2FyZ2NvdW50XSkgeyAgICAgICAgICAgICAvKiBHZXQg ZGVjaW1hbCBwbGFjZXMgKi8KLSAgICAgICAgICAgIGNoYXIgKiBzOwotICAgICAgICAgICAgcyA9 IGJwW2FyZ2NvdW50XTsKLSAgICAgICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAgICAgICAg aWYgKCEqcykgcyA9ICIwIjsKLSAgICAgICAgICAgIHMgPSBldmFseChzKTsKLSAgICAgICAgICAg IGlmICghcykgcyA9ICIiOwotICAgICAgICAgICAgaWYgKCEqcykgewotICAgICAgICAgICAgICAg IGV2YWxlcnIoZm4pOwotICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBwbGFjZXMgPSBhdG9pKHMpOwotICAgICAgICB9Ci0gICAgICAgIGVycm5v ID0gMDsKLSAgICAgICAgZmFpbGVkID0gMDsKLSAgICAgICAgc3dpdGNoICh5KSB7ICAgICAgICAg ICAgICAgICAgICAvKiBOb3cgZG8gdGhlIHJlcXVlc3RlZCBmdW5jdGlvbiAqLwotICAgICAgICAg IGNhc2UgRk5fRlBBQlM6ICAgICAgICAgICAgICAgIC8qIEZsb2F0aW5nLXBvaW50IGFic29sdXRl IHZhbHVlICovCi0jaWZuZGVmIENPTU1FTlQKLSAgICAgICAgICAgIGZwcmVzdWx0ID0gZmFicyhm YXJnWzBdKTsKLSNlbHNlCi0gICAgICAgICAgICBpZiAoZmFyZ1swXSA8IDAuMCkKLSAgICAgICAg ICAgICAgZnByZXN1bHQgPSAwLjAgLSBmYXJnWzBdOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRk5fRlBBREQ6ICAgICAgICAgICAgICAg IC8qIEZQIGFkZCAqLwotICAgICAgICAgICAgZnByZXN1bHQgPSBmYXJnWzBdICsgZmFyZ1sxXTsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRk5fRlBESVY6ICAgICAgICAgICAg ICAgIC8qIEZQIGRpdmlkZSAqLwotICAgICAgICAgIGNhc2UgRk5fRlBNT0Q6ICAgICAgICAgICAg ICAgIC8qIEZQIG1vZHVsdXMgKi8KLSAgICAgICAgICAgIGlmICghZmFyZ1sxXSkgewotICAgICAg ICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAg ICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAiPEVSUk9SOkRJVklERV9CWV9aRVJPOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAg ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgZnByZXN1bHQgPSAoY3ggPT0gRk5fRlBESVYp ID8KLSAgICAgICAgICAgICAgICAoZmFyZ1swXSAvIGZhcmdbMV0pIDoKLSAgICAgICAgICAgICAg ICAgIGZtb2QoZmFyZ1swXSxmYXJnWzFdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg IGNhc2UgRk5fRlBFWFA6ICAgICAgICAgICAgICAgIC8qIEZQIGUgdG8gdGhlIHggKi8KLSAgICAg ICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpIGV4cChmYXJnWzBdKTsKLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgIGNhc2UgRk5fRlBMT0c6ICAgICAgICAgICAgICAgIC8qIEZQIGJhc2Ut MTAgbG9nYXJpdGhtICovCi0gICAgICAgICAgY2FzZSBGTl9GUExOOiAgICAgICAgICAgICAgICAg LyogRlAgbmF0dXJhbCBsb2dhcml0aG0gKi8KLSAgICAgICAgICAgIGlmIChmYXJnWzBdIDwgMC4w KSB7Ci0gICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZm5k aWFncykKLSAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLGZuLCIoKT4i LE5VTEwpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgIGZwcmVzdWx0ID0gKGN4 ID09IEZOX0ZQTE9HKSA/IGxvZzEwKGZhcmdbMF0pIDogbG9nKGZhcmdbMF0pOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGTl9GUE1VTDogICAgICAgICAgICAgICAgLyogRlAg bXVsdGlwbHkgKi8KLSAgICAgICAgICAgIGZwcmVzdWx0ID0gZmFyZ1swXSAqIGZhcmdbMV07Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEZOX0ZQUE9XOiAgICAgICAgICAgICAg ICAvKiBGUCByYWlzZSB0byBhIHBvd2VyICovCi0gICAgICAgICAgICBmcHJlc3VsdCA9IG1vZGYo ZmFyZ1sxXSwmZHVtbXkpOwotICAgICAgICAgICAgaWYgKCghZmFyZ1swXSAmJiBmYXJnWzFdIDw9 IDAuMCkgfHwKLSAgICAgICAgICAgICAgICAoZmFyZ1swXSA8IDAuMCAmJiBmcHJlc3VsdCkpIHsK LSAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgIGlmIChmbmRpYWdz KQotICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVM TCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgZnByZXN1bHQgPSBwb3coZmFy Z1swXSxmYXJnWzFdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRk5fRlBT UVI6ICAgICAgICAgICAgICAgIC8qIEZQIHNxdWFyZSByb290ICovCi0gICAgICAgICAgICBpZiAo ZmFyZ1swXSA8IDAuMCkgewotICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAg ICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZB TEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19PVVRfT0ZfUkFOR0U6 XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICBm cHJlc3VsdCA9IHNxcnQoZmFyZ1swXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj YXNlIEZOX0ZQU1VCOiAgICAgICAgICAgICAgICAvKiBGUCBzdWJ0cmFjdCAqLwotICAgICAgICAg ICAgZnByZXN1bHQgPSBmYXJnWzBdIC0gZmFyZ1sxXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgIGNhc2UgRk5fRlBST1U6ICAgICAgICAgICAgICAgIC8qIEZQIHJvdW5kICovCi0gICAg ICAgICAgICBmcHJlc3VsdCA9IGZhcmdbMF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICBjYXNlIEZOX0ZQU0lOOiAgICAgICAgICAgICAgICAvKiBGUCBzaW5lICovCi0gICAgICAgICAg ICBmcHJlc3VsdCA9IChDS0ZMT0FUKSBzaW4oZmFyZ1swXSk7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgICBjYXNlIEZOX0ZQQ09TOiAgICAgICAgICAgICAgICAvKiBGUCBjb3NpbmUgKi8K LSAgICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpIGNvcyhmYXJnWzBdKTsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRk5fRlBUQU46ICAgICAgICAgICAgICAgIC8qIEZQ IHRhbmdlbnQgKi8KLSAgICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpIHRhbihmYXJnWzBd KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRk5fRlBNQVg6Ci0gICAgICAg ICAgICBmcHJlc3VsdCA9IChmYXJnWzBdID4gZmFyZ1sxXSkgPyBmYXJnWzBdIDogZmFyZ1sxXTsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRk5fRlBNSU46Ci0gICAgICAgICAg ICBmcHJlc3VsdCA9IChmYXJnWzBdIDwgZmFyZ1sxXSkgPyBmYXJnWzBdIDogZmFyZ1sxXTsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogR2V0IGhlcmUgd2l0aCBm cHJlc3VsdCA9IGZ1bmN0aW9uIHJlc3VsdCAqLwotCi0gICAgICAgIGlmIChlcnJubykgeyAgICAg ICAgICAgICAgICAgICAgLyogSWYgcmFuZ2Ugb3IgZG9tYWluIGVycm9yICovCi0gICAgICAgICAg ICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgIGNr bWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpGTE9B VElORy1QT0lOVC1PUDpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIGlm IChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgLyogYW5kL29yIGFueSBvdGhlciBraW5kIG9m IGVycm9yLCAqLwotICAgICAgICAgIGdvdG8gZm5lbmQ7ICAgICAgICAgICAgICAgICAgIC8qIGZh aWwuICovCi0jaWZuZGVmIENPTU1FTlQKLSAgICAgICAgLyogQ2FsbCByb3V0aW5lIGNvbnRhaW5p bmcgY29kZSB0aGF0IHdhcyBmb3JtZXJseSBpbmxpbmUgKi8KLSAgICAgICAgY2tzdHJuY3B5KGZu dmFsLGZwZm9ybWF0KGZwcmVzdWx0LHBsYWNlcyxjeCA9PSBGTl9GUFJPVSksRk5WQUxMKTsKLSNl bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgZmJ1ZlsxNl07ICAgICAgICAgICAgICAv KiBGb3IgY3JlYXRpbmcgcHJpbnRmIGZvcm1hdCAqLwotICAgICAgICAgICAgaWYgKCFmcF9yb3Vu ZGluZyAmJiAgICAgICAgIC8qIElmIHByaW50ZiBkb2Vzbid0IHJvdW5kLCAqLwotICAgICAgICAg ICAgICAgIChwbGFjZXMgPiAwIHx8ICAgICAgICAgIC8qIHJvdW5kIHJlc3VsdCB0byBkZWNpbWFs IHBsYWNlcy4gKi8KLSAgICAgICAgICAgICAgICAgKHBsYWNlcyA9PSAwICYmIGN4ID09IEZOX0ZQ Uk9VKSkpCi0gICAgICAgICAgICAgIGZwcmVzdWx0ICs9ICgwLjUgLyBwb3coMTAuMCwoQ0tGTE9B VClwbGFjZXMpKTsKLSAgICAgICAgICAgIGlmIChwbGFjZXMgPiAwKSB7ICAgICAgICAgICAgICAg ICAgIC8qIElmIHBsYWNlcyBzcGVjaWZpZWQgKi8KLSAgICAgICAgICAgICAgICAvKiB1c2Ugc3Bl Y2lmaWVkIHBsYWNlcyB0byB3cml0ZSBnaXZlbiBudW1iZXIgb2YgZGlnaXRzICovCi0gICAgICAg ICAgICAgICAgc3ByaW50ZihmYnVmLCIlJTAuJWRmIixwbGFjZXMpOyAvKiBTQUZFICovCi0gICAg ICAgICAgICAgICAgc3ByaW50ZihmbnZhbCxmYnVmLGZwcmVzdWx0KTsgICAvKiBTQUZFICovCi0g ICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndp c2UuLi4gKi8KLSNpZmRlZiBDT01NRU5UCi0vKgotICBIZXJlIHdlIHdhbnQgdG8gcHJpbnQgZXhh Y3RseSBmcF9kaWdpdHMgc2lnbmlmaWNhbnQgZGlnaXRzLCBubyBtYXR0ZXIgd2hpY2gKLSAgc2lk ZSBvZiB0aGUgZGVjaW1hbCBwb2ludCB0aGV5IGFyZSBvbi4gIFRoYXQgaXMsIHdlIHdhbnQgd2Fu dCB0aGUgZGVmYXVsdAotICBmb3JtYXQgdG8gc2hvdyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygbm9u LWdhcmJhZ2UgZGlnaXRzLCBBTkQgd2Ugd2FudCB0aGUgbGFzdAotICBzdWNoIGRpZ2l0IHRvIGJl IHJvdW5kZWQuICBPZiBjb3Vyc2UgdGhlcmUgaXMgbm8gd2F5IHRvIGRvIHRoYXQsIHNpbmNlIHRo ZQotICBkaWdpdCBhZnRlciB0aGUgbGFzdCBub24tZ2FyYmFnZSBkaWdpdCBpcywgd2VsbCwgZ2Fy YmFnZS4gIFNvIHRoZSBmb2xsb3dpbmcKLSAgY2xldmVyIHJ1c2UgZG9lcyBubyBnb29kLgotKi8K LSAgICAgICAgICAgICAgICBpbnQgc2lnbiA9IDAsIG0gPSAwOwotICAgICAgICAgICAgICAgIHNw cmludGYoZm52YWwsIiVmIixmcHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZudmFsWzBd ID09ICctJykgc2lnbiA9IDE7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gc2lnbjsgaSA8IEZO VkFMTDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KGZudmFsW2ldKSkK LSAgICAgICAgICAgICAgICAgICAgICBtKys7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgaWYgKG0gPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBkID0gZnBfZGlnaXRz IC0gbTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGQgPCAxKSBkID0gMTsKLSAgICAgICAgICAg ICAgICAgICAgc3ByaW50ZihmYnVmLCIlJSVkLiVkZiIsZnBfZGlnaXRzK3NpZ24rMSxkKTsKLSAg ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGZidWYs IiUlMC4lZGYiLGZwX2RpZ2l0cyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IHNwcmludGYoZm52YWwsZmJ1ZixmcHJlc3VsdCk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIC8q IEdvIGZvciBtYXggcHJlY2lzaW9uICovCi0gICAgICAgICAgICAgICAgc3ByaW50ZihmYnVmLCIl JTAuJWRmIixmcF9kaWdpdHMpOyAvKiBTQUZFICovCi0gICAgICAgICAgICAgICAgc3ByaW50Zihm bnZhbCxmYnVmLGZwcmVzdWx0KTsgLyogU0FGRSAqLwotCi0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZudmFsWzBdID09ICctJykgc2lnbiA9IDE7 Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMSwiZnByZXN1bHQgMSIsZm52YWwsZXJybm8p OyAvKiBDaGVjayBmb3Igb3Zlci91bmRlcmZsb3cgKi8KLSAgICAgICAgZm9yIChpID0gc2lnbjsg Zm52YWxbaV07IGkrKykgeyAvKiBHaXZlIHJlcXVlc3RlZCBkZWNpbWFsIHBsYWNlcyAqLwotICAg ICAgICAgICAgaWYgKGZudmFsW2ldID09ICcuJykgICAgICAgIC8qIEZpcnN0IGZpbmQgdGhlIGRl Y2ltYWwgcG9pbnQgKi8KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbHNlIGlm IChpID4gZnBfZGlnaXRzICsgc2lnbiAtIDEpIC8qIHJlcGxhY2luZyBnYXJiYWdlICovCi0gICAg ICAgICAgICAgIGZudmFsW2ldID0gJzAnOyAgICAgICAgICAgLyogZGlnaXRzIHdpdGggMC4uLiAq LwotICAgICAgICB9Ci0gICAgICAgIGlmIChmbnZhbFtpXSA9PSAnLicpIHsgICAgICAgICAgLyog SGF2ZSBkZWNpbWFsIHBvaW50ICovCi0gICAgICAgICAgICBpbnQgZ290ZW5kID0gMDsKLSAgICAg ICAgICAgIC8qIGQgPCAwIHNvIHRydW5jYXRlIGZyYWN0aW9uICovCi0gICAgICAgICAgICBpZiAo cGxhY2VzIDwgMCB8fCAocGxhY2VzID09IDAgJiYgY3ggPT0gRk5fRlBST1UpKSB7Ci0gICAgICAg ICAgICAgICAgZm52YWxbaV0gPSBOVUw7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBsYWNlcyA+ IDApIHsgICAgLyogZCA+IDAgc28gdGhpcyBtYW55IGRlY2ltYWwgcGxhY2VzICovCi0gICAgICAg ICAgICAgICAgaSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IGRpZ2l0IGFm dGVyIGRlY2ltYWwgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcGxhY2VzOyBq KyspIHsgLyogVHJ1bmNhdGUgYWZ0ZXIgZCBkZWNpbWFsICovCi0gICAgICAgICAgICAgICAgICAg IGlmICghZm52YWxbaitpXSkgICAgICAgICAgIC8qIHBsYWNlcyBvciBleHRlbmQgdG8gZCAgKi8K LSAgICAgICAgICAgICAgICAgICAgICBnb3RlbmQgPSAxOyAgICAgICAgICAgICAgLyogZGVjaW1h bCBwbGFjZXMuICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChnb3RlbmQgfHwgaitpK3NpZ24g PiBmcF9kaWdpdHMpCi0gICAgICAgICAgICAgICAgICAgICAgZm52YWxbaitpXSA9ICcwJzsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm52YWxbaitpXSA9IE5VTDsKLSAgICAg ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBkID09IDAgc28gRG8gVGhlIFJp Z2h0IFRoaW5nICovCi0gICAgICAgICAgICAgICAgZm9yIChqID0gKGludClzdHJsZW4oZm52YWwp IC0gMTsgaiA+IGkrMTsgai0tKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoaiAtIHNpZ24p ID4gZnBfZGlnaXRzKQotICAgICAgICAgICAgICAgICAgICAgIGZudmFsW2pdID0gJzAnOwotICAg ICAgICAgICAgICAgICAgICBpZiAoZm52YWxbal0gPT0gJzAnKQotICAgICAgICAgICAgICAgICAg ICAgIGZudmFsW2pdID0gTlVMOyAgIC8qIFN0cmlwIHVzZWxlc3MgdHJhaWxpbmcgMCdzLiAqLwot ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJmcHJlc3VsdCAyIixmbnZhbCxlcnJubyk7Ci0g ICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICB9Ci0jZW5kaWYgLyogRk5GTE9BVCAqLwotCi0jaWZk ZWYgQ0tDSEFOTkVMSU8KLSAgICBpZiAoY3ggPT0gRk5fRlNUQVQgIHx8ICAgICAgICAgICAgICAv KiBGaWxlIGZ1bmN0aW9ucyAqLwotICAgICAgICBjeCA9PSBGTl9GUE9TICAgfHwKLSAgICAgICAg Y3ggPT0gRk5fRkVPRiAgIHx8Ci0gICAgICAgIGN4ID09IEZOX0ZHQ0hBUiB8fAotICAgICAgICBj eCA9PSBGTl9GR0xJTkUgfHwKLSAgICAgICAgY3ggPT0gRk5fRkdCTEsgIHx8Ci0gICAgICAgIGN4 ID09IEZOX0ZQQ0hBUiB8fAotICAgICAgICBjeCA9PSBGTl9GUExJTkUgfHwKLSAgICAgICAgY3gg PT0gRk5fRlBCTEsgIHx8Ci0gICAgICAgIGN4ID09IEZOX05MSU5FICB8fAotICAgICAgICBjeCA9 PSBGTl9GRVJNU0cgfHwKLSAgICAgICAgY3ggPT0gRk5fRklMTk8pIHsKLSAgICAgICAgaW50IHgg PSAwLCB0ID0gMCwgY2hhbm5lbDsKLSAgICAgICAgbG9uZyB6OwotICAgICAgICBleHRlcm4gaW50 IHpfbWF4Y2hhbjsKLQotICAgICAgICBmYWlsZWQgPSAxOyAgICAgICAgICAgICAgICAgICAgIC8q IEFzc3VtZSBmYWlsdXJlICovCi0gICAgICAgIHAgPSBmbnZhbDsgICAgICAgICAgICAgICAgICAg ICAgLyogdW50aWwgd2UgdmFsaWRhdGUgYXJncyAqLwotICAgICAgICBpZiAoY3ggPT0gRk5fRkVS TVNHKSB7Ci0gICAgICAgICAgICBleHRlcm4gaW50IHpfZXJyb3I7Ci0gICAgICAgICAgICBpZiAo YXJnbiA8IDEpIHsKLSAgICAgICAgICAgICAgICB4ID0gel9lcnJvcjsKLSAgICAgICAgICAgIH0g ZWxzZSBpZiAoY2hrbnVtKGJwWzBdKSkgewotICAgICAgICAgICAgICAgIHggPSBhdG9pKGJwWzBd KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgY2ttYWtt c2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1Rf TlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgZmFpbGVkID0gMDsKLSAg ICAgICAgICAgIGNrc3RybmNweShmbnZhbCxja2ZlcnJvcih4KSxGTlZBTEwpOwotICAgICAgICAg ICAgZ290byBmbmVuZDsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXJnbiA8IDEpIHsgICAgICAg ICAgICAgICAgIC8qIEFsbCBmaWxlIGZ1bmN0aW9ucyBuZWVkIGNoYW5uZWwgKi8KLQkgICAgaWYg KGN4ID09IEZOX0ZTVEFUKSB7CS8qIEV4Y2VwdCBmX3N0YXR1cygpLCBlLmcuIHdoZW4gKi8KLQkJ Zm52YWxbMF0gPSAnMCc7CQkvKiBjYWxsZWQgd2l0aCBhIHZhcmlhYmxlIHRoYXQgKi8KLQkJZm52 YWxbMV0gPSBOVUw7CQkvKiBoYXNuJ3QgYmVlbiBkZWZpbmVkIHlldC4gKi8KLQkJZmFpbGVkID0g MDsKLQkgICAgfSBlbHNlIHsKLQkJaWYgKGZuZGlhZ3MpCi0JCSBja21ha21zZyhmbnZhbCxGTlZB TEwsIjxFUlJPUjpNSVNTSU5HX0FSRzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotCSAgICB9Ci0gICAg ICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZGlnaXRzKGJwWzBd KSkgeyAgICAgICAgICAgLyogQ2hhbm5lbCBtdXN0IGJlIG51bWVyaWMgKi8KLSAgICAgICAgICAg IGNoYW5uZWwgPSBhdG9pKGJwWzBdKTsKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBGYWlsIGlmIGl0IGlzbid0ICovCi0gICAgICAgICAgICBpZiAoZm5kaWFncykK LSAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAg ICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAg ICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2hhbm5lbCA8IDAgfHwg Y2hhbm5lbCA+IHpfbWF4Y2hhbikgeyAvKiBDaGVjayBjaGFubmVsIHJhbmdlICovCi0gICAgICAg ICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAot ICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19PVVRfT0ZfUkFOR0U6XFxmIixmbiwi KCk+IixOVUxMKTsKLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIH0KLSAgICAgICAg eCA9IHpfZ2V0bW9kZShjaGFubmVsKTsgICAgICAgICAvKiBGaW5kIG91dCBhYm91dCB0aGUgY2hh bm5lbCAqLwotCi0gICAgICAgIGZhaWxlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogQXNz dW1lIHN1Y2Nlc3MgZnJvbSBoZXJlIGRvd24gKi8KLSAgICAgICAgaWYgKGN4ID09IEZOX0ZTVEFU KSB7ICAgICAgICAgICAvKiBTdGF0dXMgLyBtb2RlcyBvZiBjaGFubmVsICovCi0gICAgICAgICAg ICBpZiAoeCA+IC0xKQotICAgICAgICAgICAgICB4ICY9IEZNX1JXQjsgICAgICAgICAgICAgIC8q IE1hc2sgb3V0IGlycmVsZXZhbnQgYml0cyAqLwotICAgICAgICAgICAgZWxzZSAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEluIHRoaXMgY2FzZSBub3Qgb3BlbiBpcyBPSyAqLwotICAgICAgICAg ICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIDAgaWYgbm90IG9wZW4sIDEtNyBpZiBv cGVuICovCi0gICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIseCk7ICAgICAgLyogU0FGRSAq LwotICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgfSBlbHNlIGlmICh4IDwgMSkgeyAg ICAgICAgICAgICAvKiBOb3QgXGZfc3RhdHVzKCkgc28gbXVzdCBiZSBvcGVuICovCi0gICAgICAg ICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAg IGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkZJTEVfTk9UX09QRU46XFxmIixmbiwiKCk+ IixOVUxMKTsKLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgc3dp dGNoICh5KSB7ICAgICAgICAgICAgICAgICAgICAvKiBEbyB0aGUgcmVxdWVzdGVkIGZ1bmN0aW9u ICovCi0gICAgICAgICAgY2FzZSBGTl9GUE9TOiAgICAgICAgICAgICAgICAgLyogR2V0IHBvc2l0 aW9uICovCi0gICAgICAgICAgICB6ID0gel9nZXRwb3MoY2hhbm5lbCk7CS8qIEZJWCBUSElTICov Ci0gICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlbGQiLHopOyAgICAgLyogU0FGRSAqLwotICAg ICAgICAgICAgZ290byBmbmVuZDsKLQotICAgICAgICAgIGNhc2UgRk5fTkxJTkU6ICAgICAgICAg ICAgICAgIC8qIEdldCBsaW5lIG51bWJlciAqLwotICAgICAgICAgICAgeiA9IHpfZ2V0bGluZShj aGFubmVsKTsJLyogRklYIFRISVMgKi8KLSAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVsZCIs eik7ICAgICAvKiBTQUZFICovCi0gICAgICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAgICAgICAg Y2FzZSBGTl9GRU9GOiAgICAgICAgICAgICAgICAgLyogQ2hlY2sgRU9GICovCi0gICAgICAgICAg ICB0ID0gMDsKLSAgICAgICAgICAgIGlmICh4ICYgRk1fRU9GKSB0ID0gMTsKLSAgICAgICAgICAg IHNwcmludGYoZm52YWwsIiVkIix0KTsgICAgICAvKiBTQUZFICovCi0gICAgICAgICAgICBnb3Rv IGZuZW5kOwotCi0gICAgICAgICAgY2FzZSBGTl9GSUxOTzogICAgICAgICAgICAgICAgLyogR2V0 IGZpbGUgaGFuZGxlICovCi0gICAgICAgICAgICB4ID0gel9nZXRmbnVtKGNoYW5uZWwpOwotICAg ICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLHgpOyAgICAgIC8qIFNBRkUgKi8KLSAgICAgICAg ICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgICAgICBjYXNlIEZOX0ZQQkxLOiAgICAgICAgICAgICAg ICAvKiBSZWFkIG9yIHdyaXRlIGJsb2NrICovCi0gICAgICAgICAgY2FzZSBGTl9GR0JMSzoKLSAg ICAgICAgICAgIGlmIChhcmduIDwgMikgewotICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQot ICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIjxFUlJPUjpNSVNTSU5HX0FSRzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAg ICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo cmRpZ2l0cyhicFsxXSkpIHsKLSAgICAgICAgICAgICAgICB0ID0gYXRvaShicFsxXSk7Ci0gICAg ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAg ICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAg ICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgfQotICAgICAgICAgIGNhc2UgRk5fRkdD SEFSOiAgICAgICAgICAgICAgIC8qIFJlYWQgb3Igd3JpdGUgY2hhcmFjdGVyIG9yIGxpbmUgKi8K LSAgICAgICAgICBjYXNlIEZOX0ZQQ0hBUjoKLSAgICAgICAgICBjYXNlIEZOX0ZHTElORToKLSAg ICAgICAgICBjYXNlIEZOX0ZQTElORToKLSAgICAgICAgICAgIGZudmFsWzBdID0gTlVMOwotICAg ICAgICAgICAgc3dpdGNoICh5KSB7Ci0gICAgICAgICAgICAgIGNhc2UgRk5fRkdDSEFSOiB0ID0g el9pbihjaGFubmVsLGZudmFsLEZOVkFMTCwxLDEpOyBicmVhazsKLSAgICAgICAgICAgICAgY2Fz ZSBGTl9GR0xJTkU6IHQgPSB6X2luKGNoYW5uZWwsZm52YWwsRk5WQUxMLEZOVkFMTC0xLDApOyBi cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBGTl9GR0JMSzoKLSAgICAgICAgICAgICAgICBpZiAo dCA+PSBGTlZBTEwpIHQgPSBGTlZBTEwgLSAxOwotICAgICAgICAgICAgICAgIHQgPSB6X2luKGNo YW5uZWwsZm52YWwsRk5WQUxMLHQsMSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgIGNhc2UgRk5fRlBDSEFSOiB0ID0gel9vdXQoY2hhbm5lbCxicFsxXSwxLDEpOyAgYnJl YWs7Ci0gICAgICAgICAgICAgIGNhc2UgRk5fRlBMSU5FOiB0ID0gel9vdXQoY2hhbm5lbCxicFsx XSwtMSwwKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRk5fRlBCTEs6ICB0ID0gel9vdXQo Y2hhbm5lbCxicFsxXSwtMSwxKTsgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp ZiAodCA8IDApIHsgICAgICAgICAgICAgICAgLyogSGFuZGxlIHJlYWQvd3JpdGUgZXJyb3IgKi8K LSAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgIGlmIChmbmRpYWdz ICYmIHQgIT0gRlhfRU9GKQotICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxM LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpGSUxFX0VSUk9SXyVkOlxcZiIs Zm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGlmIChjeCA9PSBGTl9GR0NIQVIpICAgICAgICAvKiBOdWxsIHRlcm1p bmF0ZSBjaGFyICovCi0gICAgICAgICAgICAgIGZudmFsWzFdID0gTlVMOwotICAgICAgICAgICAg LyogV3JpdGUgKHB1dCkgZnVuY3Rpb25zIHJldHVybiBudW1lcmljIHN0YXR1cyBjb2RlICovCi0g ICAgICAgICAgICBpZiAoY3ggPT0gRk5fRlBDSEFSIHx8IGN4ID09IEZOX0ZQTElORSB8fCBjeCA9 PSBGTl9GUEJMSykKLSAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLHQpOyAgICAvKiBT QUZFICovCi0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlm IC8qIENLQ0hBTk5FTElPICovCi0KLSAgICBpZiAoY3ggPT0gRk5fU1FVRUVaRSkgewkJLyogU3Ry aW5nIGZ1bmN0aW9uIFxmc3F1ZWV6ZSgpICovCi0JLyogU3F1ZWV6ZSBvdXQgd2hpdGVzcGFjZSAq LwotCS8qIEFkZCBvcHRpb25zIGxhdGVyIGZvciB3aGV0aGVyIHRvIHRyaW0gbGVhZGluZyBhbmQg dHJhaWxpbmcgYmxhbmtzICovCi0gICAgICAgIC8qIGFuZCB3aGF0IHRvIGRvIGFib3V0IGNvbnRy b2wgY2hhcmFjdGVycywgOC1iaXQgd2hpdGVzcGFjZSwgZXRjICovCi0JaW50IHN0YXJ0ZWQgPSAw OwkJLyogRmxhZyBmb3IgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgKi8KLQlpbnQgbiA9IDA7CQkJLyog QmxhbmsvVGFiIGNvdW50ZXIgKi8KLSAgICAgICAgcyA9IGJwWzBdID8gYnBbMF0gOiAiIjsKLSAg ICAgICAgcCA9IGZudmFsOwkJCS8qIFJlc3VsdCBidWZmZXIgKi8KLQl3aGlsZSAoKnMpIHsJCQkv KiBXaGlsZSB0aGVyZSBpcyBpbnB1dCAqLwotCSAgICBpZiAoIXN0YXJ0ZWQgJiYgKCpzID09ICcg JyB8fCAqcyA9PSAnXDAxMScpKSB7Ci0JCXMrKzsJCQkvKiBTa2lwIHBhc3QgbGVhZGluZyB3aGl0 ZXNwYWNlICovCi0JCWNvbnRpbnVlOwotCSAgICB9Ci0JICAgIHN0YXJ0ZWQrKzsJCQkvKiBMZWFk aW5nIHdoaXRlc3BhY2Ugd2FzIHNraXBwZWQgKi8KLQkgICAgaWYgKCpzICE9ICcgJyAmJiAqcyAh PSAnXDAxMScpIHsgLyogSGF2ZSBhIG5vbnNwYWNlIGNoYXIgKi8KLQkJbiA9IDA7CQkJLyogcmVz ZXQgc3BhY2UgY291bnRlciAqLwotCQkqcCsrID0gKnMrKzsJCS8qIGNvcHkgY2hhciB0byBkZXN0 aW5hdGlvbiAqLwotCQljb250aW51ZTsKLQkgICAgfQkJICAgIAotCSAgICBpZiAobisrID4gMCkg ewkJLyogSGF2ZSBibGFuayBvciB0YWIgKi8KLQkJcysrOwkJCS8qIGRvbid0IGNvcHkgbW9yZSB0 aGFuIG9uZSAqLwotCQljb250aW51ZTsKLQkgICAgfQotCSAgICAqcCsrID0gJyAnOwkJCS8qIERl cG9zaXQgb25lIHNwYWNlICovCi0JICAgIHMrKzsJCQkvKiBhbmQgZ28gdG8gbmV4dCBzb3VyY2Ug Y2hhciAqLwotCX0KLQlpZiAoKihwLTEpID09ICcgJykgcC0tOwkJLyogUmVtb3ZlIHRyYWlsaW5n IHNwYWNlICovCi0gICAgICAgICpwID0gTlVMOwkJCS8qIFRlcm1pbmF0ZSBzdHJpbmcgKi8KLSAg ICAgICAgcCA9IGZudmFsOwkJCS8qIHBvaW50IHRvIGJlZ2lubmluZyAqLwotICAgICAgICBnb3Rv IGZuZW5kOwkJCS8qIERvbmUuICovCi0gICAgfQotICAgIGlmIChjeCA9PSBGTl9QQVRURVJOKSB7 ICAgICAgICAgICAgIC8qIFxmcGF0dGVybigpIGZvciBJTlBVVCAqLwotICAgICAgICBpdHNhcGF0 dGVybiA9IDE7Ci0gICAgICAgIGlmIChhcmduID4gMCkgewotICAgICAgICAgICAgcCA9IGZudmFs OwotICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLGJwWzBdLEZOVkFMTCk7Ci0gICAgICAgIH0g ZWxzZSBwID0gIiI7Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgfQotICAgIGlmIChjeCA9PSBG Tl9IRVgyTiB8fCBjeCA9PSBGTl9PQ1QyTikgeyAvKiBcZmhleDJuKCksIFxmb2N0Mm4oKSAqLwot ICAgICAgICBwID0gIjAiOwotICAgICAgICBpZiAoYXJnbiA8IDEpCi0gICAgICAgICAgZ290byBm bmVuZDsKLSAgICAgICAgcCA9IGNrcmFkaXgoYnBbMF0sICgoY3ggPT0gRk5fSEVYMk4pID8gMTYg OiA4KSwgMTApOwotICAgICAgICBpZiAoIXApIHsKLSAgICAgICAgICAgIGlmIChmbmRpYWdzKQot ICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAg ICAgICI8RVJST1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAg ICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgfQotICAgICAgICBmYWlsZWQgPSAwOwotICAgICAg ICBja3N0cm5jcHkoZm52YWwscCxGTlZBTEwpOwotICAgICAgICBwID0gZm52YWw7Ci0gICAgICAg IGdvdG8gZm5lbmQ7Ci0gICAgfQotCi0gICAgaWYgKGN4ID09IEZOX0hFWDJJUCkgewotICAgICAg ICBpbnQgY1syXSwgaXBbNF0sIGksIGs7Ci0gICAgICAgIHAgPSAiMCI7Ci0gICAgICAgIGlmIChh cmduIDwgMSkKLSAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICBzID0gYnBbMF07Ci0gICAg ICAgIGlmICgoaW50KXN0cmxlbihzKSAhPSA4KSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwot ICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZO VkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdFOlxc ZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0g ICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgZm9yIChrID0gMDsgayA8IDg7IGsgKz0gMikgewot ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotICAgICAgICAgICAgICAgIGNb aV0gPSAqcysrOwotICAgICAgICAgICAgICAgIGlmIChpc2xvd2VyKGNbaV0pKSBjW2ldID0gdG91 cHBlcihjW2ldKTsKLSAgICAgICAgICAgICAgICBpZiAoY1tpXSA+PSAnMCcgJiYgY1tpXSA8PSAn OScpIHsKLSAgICAgICAgICAgICAgICAgICAgY1tpXSAtPSAweDMwOwotICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoY1tpXSA+PSAnQScgJiYgY1tpXSA8PSAnRicpIHsKLSAgICAgICAgICAgICAg ICAgICAgY1tpXSAtPSAweDM3OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQot ICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19PVVRfT0ZfUkFOR0U6XFxmIixmbiwiKCk+ IixOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgaXBbay8yXSA9IGNbMF0gPDwgNCB8IGNbMV07Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBzcHJpbnRmKHAsIiVkLiVkLiVkLiVkIixpcFswXSxpcFsxXSxp cFsyXSxpcFszXSk7IC8qIFNBRkUgKi8KLSAgICAgICAgfQotICAgICAgICBnb3RvIGZuZW5kOwot ICAgIH0KLSAgICBpZiAoY3ggPT0gRk5fSVAySEVYKSB7Ci0gICAgICAgIGludCBpcFs0XSwgaTsK LSAgICAgICAgY2hhciAqIHE7Ci0gICAgICAgIHAgPSAiMDAwMDAwMDAiOwotICAgICAgICBpZiAo YXJnbiA8IDEpCi0gICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgcyA9IGJwWzBdOwotICAg ICAgICBwID0gZm52YWw7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAg ICAgICAgIHEgPSBja3N0cmNocihzLCcuJyk7Ci0gICAgICAgICAgICBpZiAocSkgewotICAgICAg ICAgICAgICAgICpxKysgPSBOVUw7Ci0gICAgICAgICAgICAgICAgaXBbaV0gPSBhdG9pKHMpOwot ICAgICAgICAgICAgICAgIHMgPSBxOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAg ICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAg ICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBp cFszXSA9IGF0b2kocyk7Ci0gICAgICAgIHNwcmludGYocCwiJTAyeCUwMnglMDJ4JTAyeCIsaXBb MF0saXBbMV0saXBbMl0saXBbM10pOyAvKiBTQUZFICovCi0gICAgICAgIGdvdG8gZm5lbmQ7Ci0g ICAgfQotICAgIGlmIChjeCA9PSBGTl9SQURJWCkgewotICAgICAgICBmYWlsZWQgPSAxOwotICAg ICAgICBwID0gZm52YWw7Ci0gICAgICAgIGlmIChhcmduIDwgMykgewotICAgICAgICAgICAgaWYg KGZuZGlhZ3MpCi0gICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOk1J U1NJTkdfQVJHOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICBnb3RvIGZuZW5kOwot ICAgICAgICB9Ci0gICAgICAgIGlmICghcmRpZ2l0cyhicFsxXSkgfHwgIXJkaWdpdHMoYnBbMl0p KSB7Ci0gICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgY2ttYWttc2coZm52 YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJ QzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAg fQotICAgICAgICBwID0gY2tyYWRpeChicFswXSxhdG9pKGJwWzFdKSxhdG9pKGJwWzJdKSk7Ci0g ICAgICAgIGlmICghcCkgewotICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAg IGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpB UkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICBnb3RvIGZu ZW5kOwotICAgICAgICB9Ci0gICAgICAgIGZhaWxlZCA9IDA7Ci0gICAgICAgIGNrc3RybmNweShm bnZhbCxwLEZOVkFMTCk7Ci0gICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgZ290byBmbmVuZDsK LSAgICB9Ci0gICAgaWYgKGN4ID09IEZOX0pPSU4pIHsKLSAgICAgICAgaW50IGksIHgsIHksIHos IGZsYWcsIGZsYWcyLCBoaSwgbG8sIG1heCwgc2VwbGVuLCBncm91cGluZyA9IDA7Ci0gICAgICAg IGNoYXIgYWJ1ZlsxNl0sIGMsICpzLCAqcSwgKnNlcCA9IE5VTEw7Ci0gICAgICAgIGNoYXIgKiBn cl9vcG4gPSAiXCJ7JyhbPCI7ICAgICAgLyogR3JvdXAgb3BlbiBicmFja2V0cyAqLwotICAgICAg ICBjaGFyICogZ3JfY2xzID0gIlwifScpXT4iOyAgICAgIC8qIEdyb3VwIGNsb3NlIGJyYWNrZXRz ICovCi0gICAgICAgIGNoYXIgbGJbMl0sIHJiWzJdOyAgICAgICAgICAgICAgLyogU2VsZWN0ZWQg bGVmdCBhbmQgcmlnaHQgYnJhY2tldHMgKi8KLQlpbnQgY3N2ID0gMCwgdHN2ID0gMDsJCS8qIEZ1 bmN0aW9uIGZsYWdzICovCi0JY2hhciBzcGVjaWFsY2hhciA9IDA7CQkvKiBGaWVsZCBjaGFyIHRo YXQgdHJpZ2dlcnMgZ3JvdXBpbmcgKi8KLQljaGFyICpzMiA9IE5VTEw7CQkvKiBBZGRyZXNzIG9m IG1hbGxvYydkIHN0b3JhZ2UgKi8KLQotICAgICAgICBmYWlsZWQgPSAxOyAgICAgICAgICAgICAg ICAgICAgIC8qIEFzc3VtZSBmYWlsdXJlICovCi0gICAgICAgIGZudmFsWzBdID0gTlVMOwotICAg ICAgICBkZWJ1ZyhGMTAxLCJGTkpPSU4gQVJHTiIsIiIsYXJnbik7Ci0KLSAgICAgICAgY2tzdHJu Y3B5KGFidWYsYnBbMF0sMTYpOyAgICAgICAvKiBHZXQgYXJyYXkgcmVmZXJlbmNlICovCi0gICAg ICAgIHMgPSBhYnVmOwotICAgICAgICBpZiAoKHggPSBhcnJheWJvdW5kcyhzLCZsbywmaGkpKSA8 IDApIHsgIC8qIEdldCBpbmRleCBhbmQgYm91bmRzICovCi0gICAgICAgICAgICBpZiAoZm5kaWFn cykKLSAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6QVJHX0JBRF9B UlJBWTpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAg ICAgfQotICAgICAgICBwID0gZm52YWw7ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRv IHJlc3VsdCAqLwotICAgICAgICBtYXggPSBhX2RpbVt4XTsgICAgICAgICAgICAgICAgIC8qIFNp emUgb2YgYXJyYXkgKi8KLSAgICAgICAgaWYgKGxvIDwgMCkgbG8gPSAxOyAgICAgICAgICAgICAv KiBVc2UgZ2l2ZW4gcmFuZ2UgaWYgYW55ICovCi0gICAgICAgIGlmIChsbyA+IG1heCkgbG8gPSBt YXg7Ci0jaWZkZWYgQ09NTUVOVAotCWhpID0gbWF4OwotI2Vsc2UKLS8qCi0gIFRoaXMgaXMgYSB3 b3JrYXJvdW5kIGZvciB0aGUgcHJvYmxlbSBpbiB3aGljaCB0aGUgZGltZW5zaW9uIG9mIHRoZSBc Jl9bXQotICBhcnJheSAoYnV0IG5vdCBpdHMgY29udGVudHMpIGdyb3dzIHVwb24gZW50cnkgdG8g YSBTV0lUQ0ggYmxvY2suICBCdXQgdGhpcwotICBjb2RlIHByZXZlbnRzIHRoZSBkaW1lbnNpb24g ZnJvbSBncm93aW5nLiAgR28gZmlndXJlLgotKi8KLSAgICAgICAgaWYgKGhpIDwgMCkgewkJCS8q IEJvdW5kcyBub3QgZ2l2ZW4gKi8KLSAgICAgICAgICAgIGlmICh4KQkJCS8qIFJlZ3VsYXIgYXJy YXkgKi8KLQkgICAgICBoaSA9IG1heDsKLQkgICAgZWxzZQkJCS8qIEFyZ3VtZW50IHZlY3RvciBh cnJheSAqLwotCSAgICAgIGZvciAoaGkgPSBtYXg7IGhpID49IGxvOyBoaS0tKSB7IC8qIGlnbm9y ZSBhbnkgdHJhaWxpbmcgKi8KLQkJICBpZiAoIWFfcHRyW3hdW2hpXSkgY29udGludWU7IC8qIGVt cHR5IGVsZW1lbnRzICovCi0JCSAgaWYgKCEqKGFfcHRyW3hdW2hpXSkpIGNvbnRpbnVlOwotCQkg IGJyZWFrOwotCSAgICAgIH0KLQl9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBpZiAo aGkgPiBtYXgpIGhpID0gbWF4OwotICAgICAgICBmYWlsZWQgPSAwOyAgICAgICAgICAgICAgICAg ICAgIC8qIFVuc2V0IGZhaWx1cmUgZmxhZyAqLwotICAgICAgICBpZiAobWF4IDwgMSkKLSAgICAg ICAgICBnb3RvIGZuZW5kOwotICAgICAgICBzZXAgPSAiICI7ICAgICAgICAgICAgICAgICAgICAg IC8qIFNlcGFyYXRvciAqLwotICAgICAgICBsYlswXSA9IE5VTDsJCQkvKiBHcm91cCBzdGFydCBj aGFyIChhcyBzdHJpbmcpICovCi0gICAgICAgIHJiWzBdID0gTlVMOwotICAgICAgICBsYlsxXSA9 IE5VTDsJCQkvKiBHcm91cCBlbmQgY2hhciBhcyBzdHJpbmcgKi8KLSAgICAgICAgcmJbMV0gPSBO VUw7Ci0KLSAgICAgICAgaWYgKGFyZ24gPiAxKSB7Ci0JICAgIGlmIChicFsxXSkgaWYgKCpicFsx XSkgewkvKiBJZiBhcmcxIGdpdmVuIGFuZCBub3QgZW1wdHkgKi8KLQkJaWYgKCFzdHJjbXAoYnBb MV0sIkNTViIpKSB7IC8qIFNwZWNpYWwgIkNTViIgc3ltYm9saWMgYXJnICovCi0JCSAgICBjc3Yr KzsJCS8qIE1ha2UgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCAqLwotCQkgICAgc2VwID0gIiwiOwkJ LyogQ29tbWEgKi8KLQkJICAgIHNwZWNpYWxjaGFyID0gKnNlcDsJLyogU2VwYXJhdG9yIGlzIHNw ZWNpYWwgY2hhcmFjdGVyICovCi0JCSAgICBncm91cGluZyA9IDE7CS8qIEdyb3VwIHdpdGggZG91 YmxlcXVvdGVzICovCi0JCSAgICBsYlswXSA9ICciJzsJLyogYW5kIGhlcmUgKi8KLQkJICAgIHJi WzBdID0gJyInOwkvKiB0aGV5IGFyZSAqLwotCQl9IGVsc2UgaWYgKCFzdHJjbXAoYnBbMV0sIlRT ViIpKSB7IC8qICJUU1YiIHN5bWJvbGljIGFyZyAqLwotCQkgICAgdHN2Kys7CQkvKiBNYWtlIGEg VGFiIHNlcGFyYXRlZCBsaXN0ICovCi0JCSAgICBzZXAgPSAiXDAxMSI7CS8qIFRhYiAqLwotCQkg ICAgc3BlY2lhbGNoYXIgPSAqc2VwOwotCQkgICAgZ3JvdXBpbmcgPSAwOwkvKiBObyBncm91cGlu ZyAqLwotCQl9IGVsc2UJCQkvKiBOb3JtYWwgY2FzZSAqLwotCQkgIHNlcCA9IGJwWzFdOwkJLyog dXNlIHRoZSBzZXBhcmF0b3IgY2hhciBzcGVjaWZpZWQgKi8KLQkgICAgfQotCX0KLSAgICAgICAg aWYgKGFyZ24gPiAyICYmICFjc3YgJiYgIXRzdikgewkvKiBHcm91cGluZz8gKi8KLSAgICAgICAg ICAgIGNoYXIgKiBicDIgPSBicFsyXTsKLSAgICAgICAgICAgIGlmICghYnAyKSBicDIgPSAiMCI7 Ci0gICAgICAgICAgICBpZiAoISpicDIpIGJwMiA9ICIwIjsKLSAgICAgICAgICAgIGlmIChjaGtu dW0oYnAyKSkgewotICAgICAgICAgICAgICAgIGdyb3VwaW5nID0gYXRvaShicDIpOwotICAgICAg ICAgICAgICAgIGlmIChncm91cGluZyA8IDAgfHwgZ3JvdXBpbmcgPiA2MykKLSAgICAgICAgICAg ICAgICAgIGdyb3VwaW5nID0gMTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAg ICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAg ICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChncm91cGlu ZykgeyAgICAgICAgICAgICAvKiBUYWtlIGxvd2VzdC1vcmRlciBvbmUgKi8KLSAgICAgICAgICAg ICAgICBpbnQgaiwgazsgICAgICAgICAgICAgICAvKiBhbmQgc2V0IHRoZSBvdGhlcnMgdG8gMCAq LwotICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCA2OyBrKyspIHsKLSAgICAgICAgICAg ICAgICAgICAgaiA9IDEgPDwgazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwaW5nICYg aikgewotICAgICAgICAgICAgICAgICAgICAgICAgbGJbMF0gPSBncl9vcG5ba107Ci0gICAgICAg ICAgICAgICAgICAgICAgICByYlswXSA9IGdyX2Nsc1trXTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0JaWYgKCFjc3YgJiYgIXRzdikgewkJLyogTm9ybWFsIGNh c2UsIG5vdCBDU1Ygb3IgVFNWICovCi0JICAgIHNwZWNpYWxjaGFyID0gU1A7CQkvKiBTcGVjaWFs IGNoYXJhY3RlciBpcyBzcGFjZSAqLwotCSAgICBpZiAoYXJnbiA+IDMpCQkvKiBOb256ZXJvIDR0 aCBhcmcgZm9yIG5vIHNlcGFyYXRvciAqLwotCSAgICAgIGlmIChjaGtudW0oYnBbM10pKQotCQlp ZiAoYXRvaShicFszXSkgPiAwKQotCQkgIHNlcCA9IE5VTEw7Ci0JICAgIGlmICghc2VwKSB7Ci0J CXNlcCA9ICIiOwotCQlzZXBsZW4gPSAwOwotCSAgICB9IGVsc2UKLQkgICAgICBzZXBsZW4gPSBz dHJsZW4oc2VwKTsKLQl9Ci0gICAgICAgIGZvciAoaSA9IGxvOyBpIDw9IGhpOyBpKyspIHsgICAg LyogTG9vcCB0aHJ1IHNlbGVjdGVkIGFycmF5IGVsZW1lbnRzICovCi0gICAgICAgICAgICBzID0g YV9wdHJbeF1baV07ICAgICAgICAgICAgLyogR2V0IG5leHQgZWxlbWVudCAqLwotICAgICAgICAg ICAgaWYgKCFzKQotICAgICAgICAgICAgICBzID0gIiI7Ci0gICAgICAgICAgICBmbGFnID0gMDsg ICAgICAgICAgICAgICAgICAgLyogRmxhZyB0byBpbmRpY2F0ZSBncm91cGluZyBuZWVkZWQgKi8K LQkgICAgZmxhZzIgPSAwOwkJCS8qIEZsYWcgZm9yIGludGVybmFsIGRvdWJsZXF1b3RlcyAqLwot ICAgICAgICAgICAgaWYgKGdyb3VwaW5nKSB7ICAgICAgICAgICAgIC8qIERvZXMgdGhpcyBlbGVt ZW50IG5lZWQgcXVvdGluZz8gKi8KLSAgICAgICAgICAgICAgICBxID0gczsgICAgICAgICAgICAg ICAgICAvKiBMb29rIGZvciBzcGVjaWFsIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgICAgIHdo aWxlICgoYyA9ICpxKyspKSB7CS8qIElmIGZvdW5kICovCi0JCSAgICBpZiAoYyA9PSBzcGVjaWFs Y2hhcikgLyogZ3JvdXBpbmcgaXMgcmVxdWlyZWQgKi8KLQkJICAgICAgZmxhZysrOwotCQkgICAg aWYgKGNzdiAmJiAoYyA9PSAnIicpKSAvKiBDaGFyYWN0ZXIgdGhhdCBuZWVkcyBkb3VibGluZyAq LwotCQkgICAgICBmbGFnMisrOwkJICAgLyogaW4gY29tbWEtc2VwYXJhdGVkIGxpc3QgKi8KLQkJ ICAgIGlmIChmbGFnICYmICFjc3YpCS8qIEV4aXQgZWFybHkgaWYgbm8gbW9yZSB0byBkbyAqLwot CQkgICAgICBicmVhazsKLQkJfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgeSA9IHN0cmxl bihzKTsgICAgICAgICAgICAgIC8qIEdldCBsZW5ndGggb2YgdGhpcyBlbGVtZW50ICovCi0JICAg IGlmICgoeSA+IDApICYmIGNzdiAmJiAhZmxhZykgeyAvKiBDU1YgaXRlbSBuZWVkcyBncm91cGlu ZyAqLwotCQlpZiAoc1swXSA9PSBTUCB8fCBzW3ktMV0gPT0gU1AgfHwgLyogaWYgaXQgaGFzIGxl YWRpbmcgKi8KLQkJICAgIHNbMF0gPT0gSFQgfHwgc1t5LTFdID09IEhUKQkvKiBvciB0cmFpbGlu ZyB3aGl0ZXNwYWNlICovCi0JCSAgZmxhZysrOwkJLyogdGhlbiBpdCBuZWVkcyBncm91cGluZyAq LwotCSAgICB9Ci0JICAgIGlmIChmbGFnIHx8IGZsYWcyKSB7CS8qIFN0cmluZyBuZWVkcyBncm91 cGluZyBvciBxdW90aW5nICovCi0JCWNoYXIgKnNzID0gczsKLSAgICAgICAgICAgICAgICBxID0g KGNoYXIgKiltYWxsb2MoeSArIGZsYWcyICsgMyk7IC8qIE1ha2UgbmV3IGJ1ZmZlciAqLwotCQlp ZiAocSkgewotCQkgICAgczIgPSBxOwkJLyogYW5kIHRoaXMgaXMgd2hhdCB0byBmcmVlICovCi0J CSAgICBpZiAoZmxhZykJCS8qIElmIGdyb3VwaW5nICovCi0JCSAgICAgICpxKysgPSBsYlswXTsJ LyogcHV0IG9wZW5pbmcgZ3JvdXAgcXVvdGUgKi8KLQkJICAgIHdoaWxlICgqc3MpIHsJLyogTG9v cCB0aHJvdWdoIHN0cmluZyAqLwotCQkJaWYgKGZsYWcyICYmICgqc3MgPT0gJyInKSkgLyogSWYg Q1NWIGFuZCB0aGlzIGEgJyInICovCi0JCQkgICpxKysgPSAqc3M7CSAgICAgICAgICAgLyogZG91 YmxlIGl0LiAqLwotCQkJKnErKyA9ICpzcysrOwkvKiBDb3B5IHRoZSBjaGFyYWN0ZXIgKi8KLQkJ ICAgIH0KLQkJICAgIGlmIChmbGFnKQkJLyogSWYgZ3JvdXBpbmcgKi8KLQkJICAgICAgKnErKyA9 IHJiWzBdOwkvKiBhZGQgY2xvc2luZyBncm91cCBxdW90ZSAqLwotCQkgICAgKnEgPSBOVUw7CQkv KiB0ZXJtaW5hdGUgdGhlIHJlc3VsdC4gKi8KLQkJICAgIHMgPSBzMjsKLQkJICAgIHkgPSBzdHJs ZW4ocyk7Ci0JCX0KLQkgICAgfQotICAgICAgICAgICAgeiA9IDA7ICAgICAgICAgICAgICAgICAg ICAgIC8qIE51bWJlciBvZiBjaGFycyBjb3BpZWQgKi8KLSAgICAgICAgICAgIGZsYWcgPSAwOyAg ICAgICAgICAgICAgICAgICAvKiBmbGFnIGlzIG5vdyBidWZmZXItb3ZlcnJ1biBmbGFnICovCi0g ICAgICAgICAgICBpZiAoeSA+IDApICAgICAgICAgICAgICAgICAgLyogSWYgdGhpcyBzdHJpbmcg aXMgbm90IGVtcHR5ICovCi0gICAgICAgICAgICAgIHogPSBja3N0cm5jYXQoZm52YWwscyxGTlZB TEwpOyAvKiBjb3B5IGl0LiAqLwotCSAgICBpZiAoczIpIGZyZWUoczIpOwkJLyogRnJlZSB0ZW1w IHN0b3JhZ2UgKi8KLSAgICAgICAgICAgIGlmICh6IDwgeSkgICAgICAgICAgICAgICAgICAvKiBO b3cgY2hlY2sgZm9yIGJ1ZmZlciBvdmVycnVuLiAqLwotICAgICAgICAgICAgICBmbGFnKys7Ci0g ICAgICAgICAgICBpZiAoIWZsYWcgJiYgKnNlcCAmJiBpIDwgaGkpIHsgLyogSWYgYnVmZmVyIHN0 aWxsIGhhcyByb29tICovCi0gICAgICAgICAgICAgICAgeiA9IGNrc3RybmNhdChmbnZhbCxzZXAs Rk5WQUxMKTsgLyogY29weSBkZWxpbWl0ZXIgKi8KLSAgICAgICAgICAgICAgICBpZiAoeiA8IHNl cGxlbikKLSAgICAgICAgICAgICAgICAgIGZsYWcrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGlmIChmbGFnKSB7Ci0gICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAg ICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFM TCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6UkVTVUxUX1RPT19MT05HOlxc ZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotCWlzam9pbiA9IDE7Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAg fQotICAgIGlmIChjeCA9PSBGTl9TVUJTVCkgeyAgICAgICAgICAgICAgIC8qIFxmc3Vic3RpdHV0 ZSgpICovCi0gICAgICAgIENIQVIgYywgKiBzLCAqIHIsICogdHBbMl0sIGJ1ZjFbMjU2XSwgYnVm MlsyNTZdLCBidWYzWzI1Nl07Ci0gICAgICAgIGludCBsZW4sIGksIGosIHN0YXRlID0gMCwgbG8g PSAwLCBoaSA9IDA7Ci0KLSAgICAgICAgZmFpbGVkID0gMDsKLSAgICAgICAgcCA9IGZudmFsOyAg ICAgICAgICAgICAgICAgICAgICAvKiBSZXN1bHQgcG9pbnRlciAqLwotICAgICAgICAqcCA9IE5V TDsKLSAgICAgICAgaWYgKCFicFswXSkgICAgICAgICAgICAgICAgICAgICAvKiBObyB0YXJnZXQs IG5vIHJlc3VsdCovCi0gICAgICAgICAgZ290byBmbmVuZDsKLQotICAgICAgICBsZW4gPSBzdHJs ZW4oYnBbMF0pOyAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzb3VyY2UgKi8KLSAgICAgICAgaWYg KGxlbiA9PSAwKQotICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIGlmIChsZW4gPiBGTlZB TEwpIHsKLSAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBpZiAoZm5kaWFncykK LSAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAg ICAgICAiPEVSUk9SOlJFU1VMVF9UT09fTE9ORzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAg ICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWJwWzFdKSB7Ci0gICAg ICAgICAgICBja3N0cm5jcHkoYnBbMF0sZm52YWwsRk5WQUxMKTsKLSAgICAgICAgICAgIGdvdG8g Zm5lbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgdHBbMF0gPSBidWYxOyAgICAgICAgICAgICAgICAg ICAvKiBGb3IgczItczMgaW50ZXJwcmV0YXRpb24gbG9vcCAqLwotICAgICAgICB0cFsxXSA9IGJ1 ZjI7Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7ICAgICAvKiBJbml0aWFs aXplIHdvcmtpbmcgYnVmZmVycyAqLwotICAgICAgICAgICAgYnVmMVtpXSA9IDA7ICAgICAgICAg ICAgICAgIC8qIHMyIGV4cGFuc2lvbiBidWZmZXIgKi8KLSAgICAgICAgICAgIGJ1ZjJbaV0gPSAw OyAgICAgICAgICAgICAgICAvKiBzMyBleHBhbnNpb24gYnVmZmVyICovCi0gICAgICAgICAgICBi dWYzW2ldID0gaTsgICAgICAgICAgICAgICAgLyogVHJhbnNsYXRpb24gdGFibGUgKi8KLSAgICAg ICAgfQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7ICAgICAgIC8qIEludGVycHJl dCBzMiBhbmQgczMgKi8KLSAgICAgICAgICAgIHMgPSAoQ0hBUiAqKWJwW2krMV07ICAgICAgICAv KiBBcmcgcG9pbnRlciAqLwotICAgICAgICAgICAgaWYgKCFzKSBzID0gKENIQVIgKikiIjsKLSAg ICAgICAgICAgIHIgPSB0cFtpXTsgICAgICAgICAgICAgICAgICAvKiBUbyBjb25zdHJ1Y3QgaW50 ZXJwcmV0ZWQgYXJnICovCi0gICAgICAgICAgICBqID0gMDsgICAgICAgICAgICAgICAgICAgICAg LyogT3V0cHV0IGJ1ZiBwb2ludGVyICovCi0gICAgICAgICAgICBzdGF0ZSA9IDA7ICAgICAgICAg ICAgICAgICAgLyogSW5pdGlhbCBzdGF0ZSAqLwotICAgICAgICAgICAgd2hpbGUgKGMgPSAqcysr KSB7ICAgICAgICAgIC8qIExvb3AgdGhydSBhcmcgY2hhcnMgKi8KLSAgICAgICAgICAgICAgICBp ZiAoaiA+IDI1NSkgICAgICAgICAgICAvKiBPdXRwdXQgYnVmIGZ1bGwgKi8KLSAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAg ICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAvKiBOb3JtYWwgc3RhdGUgKi8KLSAgICAg ICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAn XFwnOiAgICAgICAgLyogSGF2ZSBxdW90ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3Rh dGUgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICAgICAgY2FzZSAnWyc6ICAgICAgICAgLyogSGF2ZSByYW5nZSBzdGFydGVyICovCi0gICAgICAg ICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAvKiBBbnl0aGluZyBl bHNlICovCi0gICAgICAgICAgICAgICAgICAgICAgICByW2orK10gPSBjOwotICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAg LyogUXVvdGVkIGNoYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgcltqKytdID0gYzsKLSAgICAg ICAgICAgICAgICAgICAgc3RhdGUgPSAwOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK LSAgICAgICAgICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAvKiBSYW5nZSBib3R0b20g Ki8KLSAgICAgICAgICAgICAgICAgICAgbG8gPSBjOwotICAgICAgICAgICAgICAgICAgICBzdGF0 ZSsrOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgIGNh c2UgMzogICAgICAgICAgICAgICAvKiBSYW5nZSBzZXBhcmF0ZXIgKi8KLSAgICAgICAgICAgICAg ICAgICAgaWYgKGMgIT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSAx OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIjxFUlJPUjpCQURfUkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgc3RhdGUrKzsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7 Ci0gICAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgLyogUmFuZ2UgdG9wICov Ci0gICAgICAgICAgICAgICAgICAgIGhpID0gYzsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUr KzsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICBjYXNl IDU6ICAgICAgICAgICAgICAgLyogUmFuZ2UgZW5kICovCi0gICAgICAgICAgICAgICAgICAgIGlm IChjICE9ICddJykgewotICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICAgICAgICAgICAg ICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICI8RVJST1I6QkFEX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgIGZvciAoayA9IGxvOyBrIDw9IGhpICYmIGogPCAyNTU7IGsrKykgLyogRmlsbCBp biAqLwotICAgICAgICAgICAgICAgICAgICAgIHJbaisrXSA9IGs7Ci0gICAgICAgICAgICAgICAg ICAgIGxvID0gMDsgaGkgPSAwOyAgICAgLyogUmVzZXQgKi8KLSAgICAgICAgICAgICAgICAgICAg c3RhdGUgPSAwOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1 NiAmJiBidWYxW2ldOyBpKyspIHsgIC8qIENyZWF0ZSB0cmFuc2xhdGlvbiB0YWJsZSAqLwotICAg ICAgICAgICAgayA9ICh1bnNpZ25lZClidWYxW2ldOwotICAgICAgICAgICAgYnVmM1trXSA9IGJ1 ZjJbaV07Ci0gICAgICAgIH0KLSAgICAgICAgcyA9IChDSEFSICopYnBbMF07ICAgICAgICAgICAg ICAvKiBQb2ludCB0byBzb3VyY2Ugc3RyaW5nICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBs ZW47IGkrKykgeyAgICAgLyogVHJhbnNsYXRpb24gbG9vcCAqLwotICAgICAgICAgICAgayA9ICh1 bnNpZ25lZClzW2ldOyAgICAgICAgIC8qIEdldCBuZXh0IGNoYXIgKi8KLSAgICAgICAgICAgIGlm ICghYnVmM1trXSkgICAgICAgICAgICAgICAvKiBSZW1vdmUgdGhpcyBjaGFyICovCi0gICAgICAg ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgKnArKyA9IGJ1ZjNba107ICAgICAgICAgICAg IC8qIFN1YnN0aXR1dGUgdGhpcyBjaGFyICovCi0gICAgICAgIH0KLSAgICAgICAgKnAgPSBOVUw7 Ci0gICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgZ290byBmbmVuZDsKLSAgICB9Ci0KLSNpZm5k ZWYgTk9TRVhQCi0gICAgaWYgKGN4ID09IEZOX1NFWFApIHsgICAgICAgICAgICAgICAgLyogXGZz ZXhwcmVzc2lvbihhcmcxKSAqLwotICAgICAgICBjaGFyICogcDI7Ci0gICAgICAgIGZzZXhwZmxh ZysrOwotICAgICAgICBwID0gKGFyZ24gPiAwKSA/IGRvc2V4cChicFswXSkgOiAiIjsKLSAgICAg ICAgZnNleHBmbGFnLS07Ci0gICAgICAgIHAyID0gZm52YWw7Ci0gICAgICAgIHdoaWxlICgoKnAy KysgPSAqcCsrKSkgOwotICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0g ICAgfQotI2VuZGlmIC8qIE5PU0VYUCAqLwotCi0gICAgaWYgKGN4ID09IEZOX0NNRFNUSykgeyAg ICAgICAgICAgICAgLyogXGZjbWRzdGFjayhuMSxuMikgKi8KLSAgICAgICAgaW50IGksIGosIGs7 Ci0gICAgICAgIGNoYXIgKiBzOwotCi0gICAgICAgIGlmIChicFswXSkKLSAgICAgICAgICB2YWwx ID0gKihicFswXSkgPyBldmFseChicFswXSkgOiBja2l0b2EoY21kbHZsKTsKLSAgICAgICAgZWxz ZQotICAgICAgICAgIHZhbDEgPSBja2l0b2EoY21kbHZsKTsKLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgIGZyZWUoYnBbMF0pOyAgICAgICAgICAgICAgICAgICAgLyogKGV2YWx4KCkgYWx3YXlzIHVz ZXMgc2FtZSBidWZmZXIpICovCi0gICAgICAgIGJwWzBdID0gTlVMTDsgICAgICAgICAgICAgICAg ICAgLyogKG5vdCBhbnkgbW9yZSEpICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBm YWlsZWQgPSAxOwotICAgICAgICBpZiAoYXJnbiA+IDEpIHsKLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgICAgICBtYWtlc3RyKCYoYnBbMF0pLHZhbDEpOwotICAgICAgICAgICAgdmFsMSA9IGJwWzBd OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIHZhbDIgPSAqKGJwWzFdKSA/IGV2 YWx4KGJwWzFdKSA6ICIwIjsKLSAgICAgICAgICAgIGlmICghKGNoa251bSh2YWwxKSAmJiBjaGtu dW0odmFsMikpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAg ICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAi PEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAg ICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICB2YWwxID0gY2tpdG9hKGNtZGx2bCk7Ci0gICAgICAgICAgICB2YWwyID0gIjAiOwotICAg ICAgICB9Ci0gICAgICAgIGkgPSBhdG9pKHZhbDEpOyAgICAgICAgICAgICAgICAgLyogTGV2ZWwg Ki8KLSAgICAgICAgaiA9IGF0b2kodmFsMik7ICAgICAgICAgICAgICAgICAvKiBGbGFncyAqLwot ICAgICAgICBpZiAoaSA8IDAgfHwgaSA+IGNtZGx2bCkgewotICAgICAgICAgICAgaWYgKGZuZGlh Z3MpCi0gICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAg ICAgICAgICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0g ICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0gICAgICAgIGZhaWxlZCA9IDA7Ci0g ICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgayA9IGNtZHN0a1tpXS5zcmM7ICAgICAgICAgICAg ICAvKiBXaGF0IChwcm9tcHQsIGZpbGUsIG1hY3JvKSAqLwotICAgICAgICBpZiAoaikgewotICAg ICAgICAgICAgY2tzdHJuY3B5KGZudmFsLGNraXRvYShrKSxGTlZBTEwpOwotICAgICAgICAgICAg Z290byBmbmVuZDsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGspIHsKLSAgICAgICAgICBj YXNlIENNRF9LQjoKLSAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCwiKHByb21wdCkiLEZOVkFM TCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIENNRF9URjoKLSAgICAgICAg ICAgIHMgPSB0Zm5hbVtjbWRzdGtbaV0ubHZsXTsKLSAgICAgICAgICAgIGlmICghemZucWZwKHMs Rk5WQUxMLGZudmFsKSkKLSAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLHMsRk5WQUxMKTsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgQ01EX01EOgotICAgICAgICAgICAg Y2tzdHJuY3B5KGZudmFsLG1fYXJnW2NtZHN0a1tpXS5sdmxdWzBdLEZOVkFMTCk7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBnb3RvIGZuZW5kOwotICAgIH0KLSNpZmRl ZiBDS0ZMT0FUCi0gICAgaWYgKGN4ID09IEZOX0RJRkRBVEUpIHsgICAgICAgICAgICAgLyogXGZk aWZmZGF0ZXMoZDEsZDIpICovCi0gICAgICAgIGNoYXIgKiBkMSwgKiBkMjsKLSAgICAgICAgZDEg PSBicFswXSA/IGJwWzBdIDogY2tkYXRlKCk7Ci0gICAgICAgIGQyID0gYnBbMV0gPyBicFsxXSA6 IGNrZGF0ZSgpOwotICAgICAgICBwID0gKGNoYXIgKiljbWRpZmZkYXRlKGQxLGQyKTsKLSAgICAg ICAgaWYgKCFwKSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYgKGZu ZGlhZ3MpIHsKLSAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpC QURfREFURTpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBnb3RvIGZuZW5kOwotICAgIH0KLSNl bmRpZiAvKiBDS0ZMT0FUICovCi0gICAgaWYgKGN4ID09IEZOX0NNUERBVEUpIHsgICAgICAgICAg ICAgLyogXGZjbWRkYXRlcyhkMSxkMikgKi8KLSAgICAgICAgaW50IHggPSAwOwotICAgICAgICBj aGFyIGQxWzE4XSwgZDJbMThdLCAqIGRwOwotICAgICAgICBmYWlsZWQgPSAwOwotICAgICAgICBk MVswXSA9IE5VTDsKLSAgICAgICAgZDJbMF0gPSBOVUw7Ci0gICAgICAgIHAgPSBmbnZhbDsKLSAg ICAgICAgZHAgPSBjbWN2dGRhdGUoYnBbMF0sMSk7Ci0gICAgICAgIGlmIChkcCkgewotICAgICAg ICAgICAgY2tzdHJuY3B5KGQxLGRwLDE4KTsKLSAgICAgICAgICAgIGlmICgoZHAgPSBjbWN2dGRh dGUoYnBbMV0sMSkpKSB7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KGQyLGRwLDE4KTsKLSAg ICAgICAgICAgICAgICB4ID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBp ZiAoeCA9PSAwKSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYgKGZu ZGlhZ3MpCi0gICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkJBRF9E QVRFOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB4 ID0gc3RyY21wKGQxLGQyKTsKLSAgICAgICAgICAgIGlmICh4ID4gMCkKLSAgICAgICAgICAgICAg eCA9IDE7Ci0gICAgICAgICAgICBlbHNlIGlmICh4IDwgMCkKLSAgICAgICAgICAgICAgeCA9IC0x OwotICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLHgpOwotICAgICAgICB9Ci0gICAgICAg IGdvdG8gZm5lbmQ7Ci0gICAgfQotICAgIGlmIChjeCA9PSBGTl9UT0dNVCkgeyAgICAgICAgICAg ICAgIC8qIFxmdXRjZGF0ZShkMSkgKi8KLSAgICAgICAgY2hhciAqIGQxLCAqIGRwOwotICAgICAg ICBjaGFyIGRhdGVidWZbMzJdOwotICAgICAgICBjaGFyIGQyWzMyXTsKLSAgICAgICAgcCA9IGZu dmFsOwotICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICBpZiAoKGRwID0gY21jdnRkYXRlKGJw WzBdLDEpKSkgeyAvKiBUaGUgZ2l2ZW4gZGF0ZSAqLwotICAgICAgICAgICAgY2tzdHJuY3B5KGRh dGVidWYsZHAsMTgpOwotICAgICAgICAgICAgY2tzdHJuY3B5KGQyLGRwLDE4KTsgICAgICAgIC8q IGxvY2FsIHRpbWUgKi8KLSAgICAgICAgICAgIGNrc3RybmNhdChkYXRlYnVmLCJaIiwxOSk7ICAv KiBTYW1lIHRpbWUgR01UICovCi0gICAgICAgICAgICBpZiAoKGRwID0gY21jdnRkYXRlKGRhdGVi dWYsMSkpKSAvKiBjb252ZXJ0ZWQgdG8gbG9jYWwgdGltZSAqLwotICAgICAgICAgICAgICBja3N0 cm5jcHkoZGF0ZWJ1ZixkcCwxOCk7Ci0gICAgICAgICAgICBpZiAoKHAgPSAoY2hhciAqKWNtZGlm ZmRhdGUoZDIsZGF0ZWJ1ZikpKSB7IC8qIEdldCBvZmZzZXQgKi8KLSAgICAgICAgICAgICAgICBj a3N0cm5jYXQoZDIscCwzMik7ICAgICAvKiBBcHBlbmQgb2Zmc2V0IHRvIGxvY2FsIHRpbWUgKi8K LSAgICAgICAgICAgICAgICBpZiAoKGRwID0gY21jdnRkYXRlKGQyLDEpKSkgewotICAgICAgICAg ICAgICAgICAgICBmYWlsZWQgPSAwOwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoZm52 YWwsZHAsRk5WQUxMKTsKLSAgICAgICAgICAgICAgICAgICAgcCA9IGZudmFsOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZmFpbGVkICYm IGZuZGlhZ3MpCi0gICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6QkFEX0RB VEU6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgZ290byBmbmVuZDsKLSAgICB9Ci0gICAg aWYgKGN4ID09IEZOX0RFTFNFQykgeyAgICAgICAgICAgICAgLyogXGZkZWx0YTJzZWNzKGRlbHRh LXRpbWUpICovCi0gICAgICAgIGxvbmcgc2VjczsKLSAgICAgICAgcCA9IGZudmFsOwotICAgICAg ICBpZiAoKHggPSBkZWx0YTJzZWMoYnBbMF0sJnNlY3MpKSA8IDApIHsKLSAgICAgICAgICAgIGZh aWxlZCA9IDE7Ci0gICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgY2ttYWtt c2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAoeCA9PSAtMSkgPwotICAg ICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QkFEX0RFTFRBX1RJTUU6XFxmIiA6Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpPVkVSRkxPVzpcXGYiLAotICAgICAgICAgICAg ICAgICAgICAgICBmbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIigpPiIsCi0gICAgICAgICAg ICAgICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg IGdvdG8gZm5lbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgc3ByaW50ZihwLCIlbGQiLHNlY3MpOwot ICAgICAgICBnb3RvIGZuZW5kOwotICAgIH0KLSAgICBpZiAoY3ggPT0gRk5fUENfRFUpIHsKLSAg ICAgICAgY2hhciBjLCAqIHMgPSBicFswXTsKLSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAg ICAgIHAgPSBmbnZhbDsKLSAgICAgICAgd2hpbGUgKChjID0gKnMrKykpIHsKLSAgICAgICAgICAg IGlmIChjID09ICc6JykgewotICAgICAgICAgICAgICAgIGlmICgqcyAhPSAnXFwnKQotICAgICAg ICAgICAgICAgICAgKnArKyA9ICcvJzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXFwn KSB7Ci0gICAgICAgICAgICAgICAgKnArKyA9ICcvJzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgKnArKyA9IGM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg ICAgKnAgPSBOVUw7Ci0gICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgZ290byBmbmVuZDsKLSAg ICB9Ci0gICAgaWYgKGN4ID09IEZOX1BDX1VEKSB7ICAgICAgICAgICAgICAgLyogVW5peCB0byBE T1MgcGF0aCAqLwotICAgICAgICBjaGFyIGMsICogcyA9IGJwWzBdOwotICAgICAgICBpZiAoIXMp IHMgPSAiIjsKLSAgICAgICAgaWYgKCpzID09ICd+JykgeyAgICAgICAgICAgICAgICAvKiBTa2lw IGxlYWRpbmcgdGlsZGUgKi8KLSAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgIGlmICgqcyA9 PSAnLycpCi0gICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgfQotICAgICAgICBwID0gZm52YWw7 Ci0gICAgICAgIHdoaWxlICgoYyA9ICpzKyspKQotICAgICAgICAgICpwICsrID0gKGMgPT0gJy8n KSA/ICdcXCcgOiBjOwotICAgICAgICAqcCA9IE5VTDsKLSAgICAgICAgcCA9IGZudmFsOwotICAg ICAgICBnb3RvIGZuZW5kOwotICAgIH0KLSAgICBpZiAoY3ggPT0gRk5fS1dWQUwpIHsgICAgICAg ICAgICAgICAvKiBLZXl3b3JkPVZhbHVlICovCi0gICAgICAgIHAgPSBkb2t3dmFsKGJwWzBdLGJw WzFdP2JwWzFdOiI9Iik7Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgfQotI2lmZGVmIENPTU1F TlQKLS8qIEN1dGUgaWRlYSBidXQgZG9lc24ndCB3b3JrICovCi0gICAgaWYgKGN4ID09IEZOX1NM RUVQIHx8IGN4ID09IEZOX01TTEVFUCkgewotICAgICAgICBwID0gIiI7Ci0gICAgICAgIGlmIChj aGtudW0oYnBbMF0pKSB7Ci0gICAgICAgICAgICB4ID0gYXRvaShicFswXSk7Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYgKGZuZGlhZ3Mp IHsKLSAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsK LSAgICAgICAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBn b3RvIGZuZW5kOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjeCA9PSBGTl9TTEVFUCkKLSAgICAg ICAgICB4ICo9IDEwMDA7Ci0gICAgICAgIG1zbGVlcCh4KTsKLSAgICAgICAgZ290byBmbmVuZDsK LSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgTlQKLSAgICBpZiAoY3ggPT0g Rk5fU05BTUUpIHsKLSAgICAgICAgR2V0U2hvcnRQYXRoTmFtZShicFswXSxmbnZhbCxGTlZBTEwp OwotICAgICAgICBnb3RvIGZuZW5kOwotICAgIH0KLSAgICBpZiAoY3ggPT0gRk5fTE5BTUUpIHsK LSAgICAgICAgY2tHZXRMb25nUGF0aE5hbWUoYnBbMF0sZm52YWwsRk5WQUxMKTsKLSAgICAgICAg Z290byBmbmVuZDsKLSAgICB9Ci0jZW5kaWYgLyogTlQgKi8KLQotLyoKLSAgXGZlbWFpbGFkZHJl c3MoKToKLSAgUGlja3MgdGhlIGVtYWlsIGFkZHJlc3Mgb3V0IG9mIGFuIFJGQyAyODIyIEZyb206 IG9yIFNlbmRlcjogaGVhZGVyLgotICBBZGRlZCAyNiBOb3YgMjAwNS4gIEhhbmRsZXMgYWxsIGNv bW1vbiwgYW5kIHNvbWUgdW5jb21tb24sIGNhc2VzIGJ1dAotICBkb2Vzbid0IHRvdGFsbHkgYm90 aGVyIGFib3V0IG5lc3RlZCBjb21tZW50cy4gIE5lZWRlZCB0aGlzIGZvciBmZXRjaGluZwotICBl bWFpbCBmcm9tIGEgUE9QIHNlcnZlciBhbmQgdGhlbiBjb25zdHJ1Y3RpbmcgdGhlIEJTRCAiRnJv bSAiIGxpbmUuCi0gIFdvcmtzIHdpdGggb3Igd2l0aG91dCB0aGUgIkZyb206ICIgb3IgIlNlbmRl cjogIiB0YWcuCi0qLwotICAgIGlmIChjeCA9PSBGTl9FTUFJTCkgewotICAgICAgICBjaGFyIGMs ICogcyA9IGJwWzBdLCAqIHMyLCAqIHMzLCAqIGFwID0gIiI7Ci0JaW50IGssIHN0YXRlID0gMCwg cXVvdGUgPSAwLCBpbmZpZWxkID0gMDsKLQlpbnQgcGMgPSAwOwkJCS8qIEZvciBuZXN0ZWQgY29t bWVudHMgKi8KLSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0JaWYgKCEqcykgZ290byB4ZW1haWw7 Ci0KLQlpZiAoY2tpbmRleCgiRnJvbTogIixzLDAsMCwwKSA9PSAxKSBzICs9IDU7Ci0JaWYgKGNr aW5kZXgoIlNlbmRlcjogIixzLDAsMCwwKSA9PSAxKSBzICs9IDc7Ci0KLQlrID0gc3RybGVuKHMp OwkJCS8qIFN0cmlwIGp1bmsgZnJvbSBlbmQgKi8KLQlpZiAoayA8IDEpIGdvdG8geGVtYWlsOwot CWstLTsKLQl3aGlsZSAoayA+PSAwICYmIHNba10gPT0gQ1IgfHwgc1trXSA9PSBMRikKLQkgIHNb ay0tXSA9IE5VTDsKLQl3aGlsZSAoayA+PSAwICYmIHNba10gPT0gU1AgfHwgc1trXSA9PSBIVCkK LQkgIHNbay0tXSA9IE5VTDsKLQlpZiAoayA9PSAwKQotCSAgZ290byB4ZW1haWw7Ci0KLSNpZm5k ZWYgQ09NTUVOVAkJCSAgICAgLyogU2ltcGxlIG1ldGhvZCBpZiBub3QgMTAwJSBmb29scHJvb2Yg Ki8KLQlrID0gMDsKLQlmb3IgKHMyID0gczsgKnMyOyBzMisrKSB7CS8qIEZpbmQgYXQtc2lnbiAq LwotCSAgICBpZiAoKnMyID09ICdAJykgewotCQlrKys7CQkJLyogSWYgbW9yZSB0aGFuIG9uZSB1 c2UgcmlnaHRtb3N0ICovCi0JCXMzID0gczI7Ci0JICAgIH0KLQl9Ci0JaWYgKGsgPCAxKQkJCS8q IE5vIGF0LXNpZ24gKi8KLQkgIGdvdG8geGVtYWlsOwotCi0JZm9yIChhcCA9IHMzLTE7IGFwID49 IHM7IGFwLS0pIHsgLyogQmFjayB1cCB0byBiZWdpbm5pbmcgb2YgYWRkcmVzcyAqLwotCSAgICBp ZiAoaXNzcGFjZSgqYXApIHx8ICphcCA9PSAnPCcpIHsKLQkJYXArKzsKLSAJCWJyZWFrOwotCSAg ICB9Ci0JICAgIGlmIChhcCA9PSBzKQotCSAgICAgIGJyZWFrOwotCX0KLQlmb3IgKHMyID0gczMr MTsgKnMyOyBzMisrKSB7CS8qIEZpbmQgZW5kIG9mIGFkZHJlc3MgKi8KLQkgICAgaWYgKGlzc3Bh Y2UoKnMyKSB8fCAqczIgPT0gJz4nKQotCSAgICAgIGJyZWFrOwotCX0KLQkqczItLSA9IE5VTDsK LQlpZiAoKmFwID09ICdbJyAmJiAqczIgPT0gJ10nKSB7CS8qIEhhbmRsZSBbYmxhaEBibGFoLmJs YWhdICovCi0JICAgIGFwKys7Ci0JICAgICpzMiA9IE5VTDsKLQl9Ci0JaWYgKCFja3N0cmNtcChh cCwibWFpbHRvOiIsNywwKSkgLyogSGFuZGxlIG1haWx0bzogVVJMcyAqLwotCSAgYXAgKz0gNzsK LQotI2Vsc2UgIC8qIFRvbyBjb21wbGljYXRlZCBhbmQgZXJyb3ItcHJvbmUgKi8KLQotCWsgPSAw OwotCWZvciAoczIgPSBzOyAqczI7IHMyKyspIHsJLyogU3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNl ICovCi0JICAgIGlmICgqczIgPT0gU1AgfHwgKnMyID09IEhUKSB7Ci0JCWsgPSAxOwotCQlicmVh azsKLQkgICAgfQotCX0KLQlpZiAoIWspIHsJCQkvKiBTaW1wbGUgYWRkcmVzcyAqLwotCSAgICBh cCA9IHM7Ci0JICAgIGdvdG8geGVtYWlsOwotCX0KLQlkbyB7CQkJCS8qIE5vdCBzaW1wbGUsIGhh dmUgdG8gZXh0cmFjdCBpdCAqLwotCSAgICBpZiAocXVvdGUpIHsKLQkJcXVvdGUgPSAwOwotCQlj b250aW51ZTsKLQkgICAgfSBlbHNlIGlmICgqcyA9PSAnXFwnKSB7Ci0JCXF1b3RlID0gMTsKLQkJ Y29udGludWU7Ci0JICAgIH0KLQkgICAgc3dpdGNoIChzdGF0ZSkgewotCSAgICAgIGNhc2UgMDoK LQkJaWYgKCFpbmZpZWxkICYmICpzID09ICciJykgeyAvKiBRdW90ZWQgc3RyaW5nICovCi0JCSAg ICBpbmZpZWxkID0gMTsKLQkJICAgIGMgPSAnIic7Ci0JCSAgICBzdGF0ZSA9IDE7Ci0JCX0gZWxz ZSBpZiAoIWluZmllbGQgJiYgKnMgPT0gJygnKSB7IC8qIENvbW1lbnQgaW4gcGFyZW5zICovCi0J CSAgICBwYysrOwotCQkgICAgaW5maWVsZCA9IDE7Ci0JCSAgICBjID0gJyknOwotCQkgICAgaWYg KCphcCkgKnMgPSBOVUw7Ci0JCSAgICBzdGF0ZSA9IDE7Ci0JCX0gZWxzZSBpZiAoIWluZmllbGQg JiYgKnMgPT0gJzwnKSB7IC8qIEFkZHJlc3MgKi8KLQkJICAgIGluZmllbGQgPSAxOwotCQkgICAg YyA9ICc+JzsKLQkJICAgIGFwID0gcysxOwotCQkgICAgc3RhdGUgPSAyOwotCQl9IGVsc2UgaWYg KGluZmllbGQgJiYgKCpzID09IFNQIHx8ICpzID09IEhUKSkgewotCQkgICAgaW5maWVsZCA9IDA7 Ci0JCX0gZWxzZSB7CQkvKiBPbmUgb3IgbW9yZSBiYXJlIHdvcmRzICovCi0JCSAgICBpbmZpZWxk ID0gMTsJLyogQ291bGQgYmUgYW4gYWRkcmVzcyAqLwotCQkgICAgaWYgKCEqYXApIGFwID0gczsJ LyogQ291bGQgYmUgY29tbWVudHMgKi8KLQkJfQotCQljb250aW51ZTsKLQkgICAgICBjYXNlIDE6 CQkJLyogSW4gUXVvdGVkIHN0cmluZyBvciBDb21tZW50ICovCi0JCWlmIChpbmZpZWxkICYmICpz ID09IGMpIHsgLyogTG9vayBmb3IgZW5kICovCi0JCSAgICBpbmZpZWxkID0gMDsKLQkJICAgICpz KysgPSBOVUw7Ci0JCSAgICB3aGlsZSAoKnMgPT0gU1AgfHwgKnMgPT0gSFQpIHMrKzsKLQkJICAg IGlmICghKmFwKQotCQkgICAgICBhcCA9IHM7Ci0JCSAgICBzdGF0ZSA9IDA7Ci0JCX0KLQkJY29u dGludWU7Ci0JICAgICAgY2FzZSAyOgkJCS8qIEluIGFkZHJlc3MgKi8KLQkJaWYgKGluZmllbGQg JiYgKnMgPT0gYykgeyAvKiBMb29raW5nIGZvciBlbmQgKi8KLQkJICAgIGluZmllbGQgPSAwOwot CQkgICAgKnMgPSBOVUw7Ci0JCSAgICBicmVhazsKLQkJfQotCSAgICB9Ci0JfSB3aGlsZSAoKnMr Kyk7Ci0KLSAgICAgIHhlbWFpbDoKLQlpZiAoKmFwKSB7Ci0JICAgIHdoaWxlICgqYXAgPT0gU1Ag fHwgKmFwID09IEhUKSBhcCsrOwotCX0KLQlrID0gc3RybGVuKGFwKSAtIDE7Ci0Jd2hpbGUgKGsg Pj0gMCAmJiAoYXBba10gPT0gU1AgfHwgYXBba10gPT0gSFQpKQotCSAgYXBbay0tXSA9IE5VTDsK LQlpZiAoKmFwKSB7Ci0JICAgIGZhaWxlZCA9IDA7Ci0JICAgIGlmICgqYXAgPT0gJzwnKSB7Ci0J CWsgPSBzdHJsZW4oYXApOwotCQlpZiAoKihhcCtrLTEpID09ICc+JykgewotCQkgICAgYXBbay0x XSA9IE5VTDsKLQkJICAgIGFwKys7Ci0JCX0KLQkgICAgfQotCX0gZWxzZQotCSAgZmFpbGVkID0g MTsKLQkvKiBIZXJlIHdlIG1pZ2h0IGFsc28gd2FudCBjaGVjayBhZ2FpbnN0ICIqQCouKiIgKi8K LSNlbmRpZgkvKiBDT01NRU50ICovCi0gICAgICB4ZW1haWw6Ci0JY2tzdHJuY3B5KGZudmFsLGFw LEZOVkFMTCk7Ci0JZ290byBmbmVuZDsKLSAgICB9Ci0KLSNpZmRlZiBTRUVLX0NVUgotLyoKLSAg IFxmcGljdHVyZSgpOiAgIEdldCBkaW1lbnNpb25zIG9mIEdJRiBvciBKUEcgaW1hZ2UuCi0gICBm ZGMgSnVuZSAyMDA2Ci0qLwotICAgIGlmIChjeCA9PSBGTl9QSUNUVVJFKSB7Ci0JRklMRSAqZnAg PSBOVUxMOwotCWludCBjLCB4LCB3ID0gMCwgaCA9IDAsIGVvZiA9IDA7Ci0JdW5zaWduZWQgaW50 IGksIGosIGs7Ci0JdW5zaWduZWQgY2hhciBidWZbMTAyNF07Ci0JY2hhciBhYnVmWzE2XSwgKiBw LCAqIHM7Ci0JY2hhciAqKiBhcCA9IE5VTEw7Ci0KLQlwID0gZm52YWw7CQkJLyogUG9pbnQgdG8g cmVzdWx0ICovCi0JZmFpbGVkID0gMTsJCQkvKiBBc3N1bWUgZmFpbHVyZSAqLwotCWlmIChhcmdu ID4gMSkgewotCSAgICBpbnQgeGk7Ci0JICAgIGNrc3RybmNweShhYnVmLGJwWzFdLDE2KTsJLyog R2V0IGFycmF5IHJlZmVyZW5jZSAqLwotCSAgICBzID0gYWJ1ZjsKLQkgICAgaWYgKCpzID09IENN RFEpIHMrKzsKLQkgICAgaWYgKGZuZGlhZ3MpCQkvKiBEZWZhdWx0IGlzIHRoaXMgZXJyb3IgbWVz c2FnZSAqLwotCSAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLQkJICAgICAgICI8RVJST1I6 QVJHX0JBRF9BUlJBWTpcXGYiLGZuLCIoKT4iLE5VTEwpOwotCSAgICBpZiAoc1swXSAhPSAnJicp CQkvKiAiQWRkcmVzcyIgb2YgYXJyYXkgKi8KLQkgICAgICBnb3RvIGZuZW5kOwotCSAgICBpZiAo c1syXSkKLQkgICAgICBpZiAoc1syXSAhPSAnWycgfHwgc1szXSAhPSAnXScpCi0JCWdvdG8gZm5l bmQ7Ci0JICAgIGlmIChzWzFdID49IDY0ICYmIHNbMV0gPCA5MSkgLyogQ29udmVydCB1cHBlciB0 byBsb3dlciAqLwotCSAgICAgIHNbMV0gKz0gMzI7Ci0JICAgIGlmICgoeGkgPSBkY2xhcnJheShz WzFdLDIpKSA8IDApIC8qIFR3byBlbGVtZW50cyAqLwotCSAgICAgIGdvdG8gZm5lbmQ7Ci0JICAg IGFwID0gYV9wdHJbeGldOwkJLyogUG9pbnQgdG8gYXJyYXkgd2UganVzdCBkZWNsYXJlZCAqLwot CX0KLQlzID0gYnBbMF07CQkJLyogRmlsZW5hbWUgKi8KLQlmYWlsZWQgPSAwOwkJCS8qIEZyb20g aGVyZSBvbiB3ZSBkb24ndCBmYWlsICovCi0JcFswXSA9ICcwJzsJCQkvKiBEZWZhdWx0IHJldHVy biB2YWx1ZSAqLwotCXBbMV0gPSBOVUw7Ci0JaWYgKCFja21hdGNoKCIqLntqcGcsanBlZyxnaWZ9 JCIscywwLDErNCkpIC8qIEFwcHJvcHJpYXRlIG5hbWU/ICovCi0JICBnb3RvIGZuZW5kOwkJCS8q IE5vLCBmYWlsICovCi0JZnAgPSBmb3BlbihzLCAiciIpOwkJLyogT3BlbiBpdCAqLwotCWlmIChm cCA9PSBOVUxMKSB7CQkvKiBDYW4ndCwgZmFpbCAqLwotCSAgICBwWzBdID0gJy0nOwotCSAgICBw WzFdID0gJzEnOwotCSAgICBwWzJdID0gTlVMOwkJCS8qIFJldHVybiAtMSAqLwotCSAgICBnb3Rv IGZuZW5kOwotCX0KLQlrID0gc3RybGVuKHMpOwotCWlmICghY2tzdHJjbXAoJnNbay00XSwiLmdp ZiIsNCwwKSkgeyAvKiBHSUYgZmlsZSAqLwotCSAgICBpZiAoZnJlYWQoYnVmLDEsMTAsZnApICE9 IDEwKSB7Ci0JCWZjbG9zZShmcCk7Ci0JCWdvdG8gZm5lbmQ7Ci0JICAgIH0KLQkgICAgLyogQ2hl Y2sgc2lnbmF0dXJlICovCi0JICAgIGlmIChja3N0cmNtcCgoY2hhciAqKWJ1ZiwiR0lGODdhIiw2 LDApICYmCi0JCWNrc3RyY21wKChjaGFyICopYnVmLCJHSUY4OWEiLDYsMCkpIHsKLQkJZmNsb3Nl KGZwKTsKLQkJZ290byBmbmVuZDsKLQkgICAgfQotCSAgICB3ID0gYnVmWzZdICsgMjU2ICogYnVm WzddOwotCSAgICBoID0gYnVmWzhdICsgMjU2ICogYnVmWzldOwotCSAgICBnb3RvIHBpY2VuZDsK LQl9IGVsc2UgaWYgKCFja3N0cmNtcCgmc1trLTRdLCIuanBnIiw0LDApIHx8IC8qIEpQRUcgZmls ZSAqLwotCQkgICAhY2tzdHJjbXAoJnNbay01XSwiLmpwZWciLDUsMCkpIHsKLQkgICAgaWYgKGZy ZWFkKGJ1ZiwxLDIsZnApICE9IDIpIHsKLQkJZmNsb3NlKGZwKTsKLQkJZ290byBmbmVuZDsKLQkg ICAgfQotCSAgICBpZiAoYnVmWzBdICE9IDB4ZmYgfHwgYnVmWzFdICE9IDB4ZDgpIHsgLyogQ2hl Y2sgc2lnbmF0dXJlICovCi0JCWZjbG9zZShmcCk7Ci0JCWdvdG8gZm5lbmQ7Ci0JICAgIH0KLQkg ICAgZW9mID0gMDsKLQkgICAgd2hpbGUgKCFlb2YpIHsJCS8qIExvb3AgZm9yIGVhY2ggbWFya2Vy ICovCi0JCXdoaWxlICghZW9mKSB7CQkvKiBGaW5kIG5leHQgbWFya2VyICovCi0JCSAgICBjID0g Z2V0YyhmcCk7Ci0JCSAgICBpZiAoYyA9PSAodW5zaWduZWQgaW50KUVPRikgewotCQkJZW9mKys7 Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJICAgIGlmIChjID09IDB4ZmYpIHsKLQkJCWJ1ZlswXSA9 IGM7Ci0JCQljID0gZ2V0YyhmcCk7Ci0JCQlpZiAoYyA9PSAodW5zaWduZWQgaW50KUVPRikgewot CQkJICAgIGVvZisrOwotCQkJICAgIGJyZWFrOwotCQkJfQotCQkJYnVmWzFdID0gYzsKLQkJCWlm IChjID09IDB4ZDkpCi0JCQkgIGVvZisrOwotCQkJaWYgKGMgPj0gMHhjMCAmJiBjIDw9IDB4ZmUp Ci0JCQkgIGJyZWFrOwotCQkgICAgfQotCQl9Ci0JCWlmIChlb2YpIGJyZWFrOwotCQl4ID0gYnVm WzFdOwotCQlpZiAoeCA9PSAweGMwIHx8IHggPT0gMHhjMSB8fCB4ID09IDB4YzIgfHwgeCA9PSAw eGMzIHx8Ci0JCSAgICB4ID09IDB4YzkgfHwgeCA9PSAweGNhIHx8IHggPT0gMHhjYikgewotCQkg ICAgaWYgKGZyZWFkKGJ1ZiwxLDcsZnApICE9IDcpIHsKLQkJCWZjbG9zZShmcCk7Ci0JCQlnb3Rv IGZuZW5kOwotCQkgICAgfQotCQkgICAgaCA9IGJ1ZlszXSAqIDI1NiArIGJ1Zls0XTsKLQkJICAg IHcgPSBidWZbNV0gKiAyNTYgKyBidWZbNl07Ci0JCSAgICBnb3RvIHBpY2VuZDsKLQkJfSBlbHNl IHsJCS8qIE5vdCBhIGRlc2lyZWQgZmllbGQgKi8KLQkJICAgIGlmIChmZW9mKGZwKSkgewotCQkJ ZW9mKys7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJICAgIGlmIChmcmVhZChidWYsMSwyLGZwKSAh PSAyKSB7IC8qIExlbmd0aCBvZiB0aGlzIGZpZWxkICovCi0JCQlmY2xvc2UoZnApOwotCQkJZ290 byBmbmVuZDsKLQkJICAgIH0KLQkJICAgIGogPSAyNTYgKiBidWZbMF0gKyBidWZbMV0gLSAyOyAv KiBTa2lwIG5leHQgZmllbGQgKi8KLQkJICAgIGlmIChDS0ZTRUVLKGZwLChDS19PRkZfVClqLFNF RUtfQ1VSKSAhPSAwKSB7Ci0JCQlmY2xvc2UoZnApOwotCQkJZ290byBmbmVuZDsKLQkJICAgIH0K LQkJfQotCSAgICB9IAotCX0KLSAgICAgIHBpY2VuZDoKLQlmY2xvc2UoZnApOwotCWlmIChhcCkg ewotCSAgICBtYWtlc3RyKCYoYXBbMF0pLCIyIik7Ci0JICAgIG1ha2VzdHIoJihhcFsxXSksY2tp dG9hKHcpKTsKLQkgICAgbWFrZXN0cigmKGFwWzJdKSxja2l0b2EoaCkpOwotCX0KLQlpZiAodyA+ IDAgJiYgaCA+IDApIHsKLQkgICAgaWYgKHcgPiBoKSBwWzBdID0gJzEnOwotCSAgICBpZiAoaCA+ PSB3KSBwWzBdID0gJzInOwotCX0KLQlnb3RvIGZuZW5kOwotICAgIH0KLSNlbmRpZgkvKiBTRUVL X0NVUiAqLwotCi0gICAgaWYgKGN4ID09IEZOX1BJRCkgewotCWludCB4ID0gLTE7Ci0JaWYgKGNo a251bShicFswXSkpIHsJCS8qIE5lZWQgbnVtZXJpYyBhcmd1bWVudCAqLwotCSAgICBpbnQgcGlk OwotCSAgICBwaWQgPSBhdG9pKGJwWzBdKTsJCS8qIENvbnZlcnQgdG8gaW50ICovCi0jaWZkZWYg VU5JWAotCSAgICBpZiAoa2lsbChwaWQsMCkgPCAwKSB7CS8qIFRlc3QgaXQgKi8KLQkJaWYgKGVy cm5vID09Ci0jaWZkZWYgRVNSQ0gKLQkJICAgIEVTUkNICQkvKiBObyBzdWNoIHByb2Nlc3MgKi8K LSNlbHNlCi0JCSAgICAzCi0jZW5kaWYJLyogRVNSQ0ggKi8KLQkJICAgICkKLQkJICB4ID0gMDsK LQkgICAgfSBlbHNlCQkJLyogUHJvY2VzcyBleGlzdHMgKi8KLQkgICAgICB4ID0gMTsKLSNlbmRp ZgkvKiBVTklYICovCi0JfQotCXNwcmludGYoZm52YWwsIiVkIix4KTsJCS8qIFNBRkUgKi8KLQln b3RvIGZuZW5kOwotICAgIH0KLQotICAgIGlmIChjeCA9PSBGTl9GVU5DKSB7Ci0JY2hhciAqIHMg PSBicFswXTsKLQlwID0gIjAiOwotICAgICAgICBkZWJ1ZyhGMTExLCJmZnVuYyIscyxhcmduKTsK LQlpZiAoYXJnbiA+IDApIHsKLQkgICAgaW50IHgsIHk7Ci0JICAgIGZvciAocCA9IHM7ICpwOyBw KyspIHsJLyogQ2hvcCBvZmYgdHJhaWxpbmcgcGFyZW5zIGlmIGFueSAqLwotCQlpZiAoKnAgPT0g JygnKSB7Ci0JCSAgICAqcCA9IE5VTDsKLQkJICAgIGJyZWFrOwotCQl9Ci0JICAgIH0KLQkgICAg LyogQ2hvcCBvZmYgbGVhZGluZyAiXFxmIiBvciAiXGYiIG9yICJmIiAqLwotCSAgICBwID0gczsK LQkgICAgaWYgKCpwID09IENNRFEpCQkvKiBBbGxvdyBmb3IgXFxmLi4uICovCi0JICAgICAgcCsr OwotCSAgICBpZiAoKnAgPT0gQ01EUSAmJiAoKihwKzEpID09ICdmJyB8fCAqKHArMSkgPT0gJ0Yn KSkgeyAvKiBvciBcZiAqLwotCQlwICs9IDI7Ci0JICAgIH0gZWxzZSBpZiAoKnAgPT0gJ2YnIHx8 ICpwID09ICdGJykgeyAvKiBvciBqdXN0IGYgKi8KLQkJcCsrOwotCSAgICB9Ci0JICAgIHkgPSBs b29rdXAoZm5jdGFiLHAsbmZ1bmNzLCZ4KTsgLyogTG9vayB1cCB0aGUgcmVzdWx0ICovCi0JICAg IGRlYnVnKEYxMTEsImZmdW5jIixwLHkpOwotCSAgICBwID0gKHkgPiAtMSkgPyAiMSIgOiAiMCI7 Ci0JfQotCWdvdG8gZm5lbmQ7Ci0gICAgfQotICAgIGlmIChjeCA9PSBGTl9SRUNVUlNFKSB7Ci0J aW50IHQsIG47Ci0JY2hhciAqIHM7Ci0JZm52YWxbMF0gPSBOVUw7CQkJLyogRGVmYXVsdCByZXN1 bHQgaXMgZW1wdHkgc3RyaW5nICovCi0JcyA9IGJwWzBdOwkJCS8qIENoZWNrIGZvciBudWxsIGFy Z3VtZW50ICovCi0JaWYgKCFzKSBzID0gIiI7CQkJLyogb3IgZW1wdHkgYXJndW1lbnQgKi8KLQlp ZiAoISpzKSBnb3RvIGZuZW5kOwkJLyogaW4gd2hpY2ggY2FzZSByZXR1cm4gZW1wdHkgc3RyaW5n ICovCi0gICAgICAgIG4gPSBGTlZBTEw7CQkJLyogTm90IGVtcHR5LCBtYXggc2l6ZSBmb3IgcmVz dWx0ICovCi0gICAgICAgIHMgPSBmbnZhbDsJCQkvKiBMb2NhdGlvbiBvZiByZXN1bHQgKi8KLQl7 Ci0JICAgIC8qIEZvcmNlIFZBUklBQkxFLUVWQUxVQVRJT04gU0lNUExFIFJFQ1VSU0lWRSAqLwot CSAgICAvKiBOT1RFOiBUaGlzIGlzIHZ1bG5lcmFibGUgdG8gU0lHSU5UIGFuZCB3aGF0bm90Li4u ICovCi0JICAgIGludCB0bXAgPSB2YXJldmFsOwkJLyogU2F2ZSBWQVJJQUJMRS1FVkFMVUFUSU9O IHNldHRpbmcgKi8KLQkgICAgdmFyZXZhbCA9IDE7CQkvKiBGb3JjZSBpdCB0byBSRUNVUlNJVkUg Ki8KLQkgICAgenpzdHJpbmcoYnBbMF0sJnMsJm4pOwkvKiBFeHBhbmQgYXJnIGludG8gcmVzdWx0 IHNwYWNlICovIAotCSAgICB2YXJldmFsID0gdG1wOwkJLyogUmVzdG9yZSBWQVJJQUJMRS1FVkFM VUFUSU9OICovCi0JfQotCWdvdG8gZm5lbmQ7Ci0gICAgfQotCi0gICAgaWYgKGN4ID09IEZOX1hM QVRFKSB7CQkvKiBmX2N2dGNzZXQoKSAqLwotI2lmZGVmIE5PRlJJTExTCi0JY2tzdHJuY3B5KGZu dmFsLGJwWzBdLEZOVkFMTCk7CQotI2Vsc2UKLSNpZm5kZWYgTk9VTklDT0RFCi0JX1BST1RPVFlQ KCBjaGFyICogY3Z0c3RyaW5nLCAoY2hhciAqLCBpbnQsIGludCkgKTsKLSAgICAgICAgY2hhciAq IHN0cmluZywgKiBjc2V0MSwgKiBjc2V0MjsKLQlpbnQgaWQxLCBpZDI7Ci0jZW5kaWYJLyogTk9V TklDT0RFICovCi0gICAgICAgIGZudmFsWzBdID0gTlVMOwkKLSNpZmRlZiBOT1VOSUNPREUKLQlj a3N0cm5jcHkoZm52YWwsYnBbMF0sRk5WQUxMKTsJCi0jZWxzZQotICAgICAgICBzdHJpbmcgPSBi cFswXSA/IGJwWzBdIDogIiI7CS8qIFN0cmluZyB0byBjb252ZXJ0ICovCi0JaWYgKCEqc3RyaW5n KSBnb3RvIGZuZW5kOwkvKiBJdCdzIGVtcHR5ICovCi0KLSAgICAgICAgY3NldDEgPSBicFsxXSA/ IGJwWzFdIDogImFzY2lpIjsgLyogQ3VycmVudCBjaGFyc2V0IG9mIHN0cmluZyAqLwotICAgICAg ICBjc2V0MiA9IGJwWzJdID8gYnBbMl0gOiAiYXNjaWkiOyAvKiBDaGFyc2V0IHRvIGNvbnZlcnQg dG8gKi8KLQotCWlkMSA9IGxvb2t1cChmY3N0YWIsY3NldDEsbmZpbGMsTlVMTCk7IC8qIExvb2t1 cCAnZnJvbScgc2V0ICovCi0JaWYgKGlkMSA8IDApIHsKLSAgICAgICAgICAgIGZhaWxlZCA9IDE7 Ci0JICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOlVOS05PV05fQ0hBUlNFVDpcXGYi LGZuLCIoKT4iLE5VTEwpOwotCSAgICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0JaWQyID0gbG9v a3VwKGZjc3RhYixjc2V0MixuZmlsYyxOVUxMKTsgLyogTG9va3VwICd0bycgc2V0ICovCi0JaWYg KGlkMiA8IDApIHsKLSAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0JICAgIGNrbWFrbXNnKGZudmFs LEZOVkFMTCwiPEVSUk9SOlVOS05PV05fQ0hBUlNFVDpcXGYiLGZuLCIoKT4iLE5VTEwpOwotCSAg ICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0Jc3RyaW5nID0gY3Z0c3RyaW5nKHN0cmluZyxpZDEs aWQyKTsKLQlja3N0cm5jcHkoZm52YWwsc3RyaW5nLEZOVkFMTCk7Ci0jZW5kaWYJLyogTk9VTklD T0RFICovCi0jZW5kaWYJLyogTk9GUklMTFMgKi8KLQlnb3RvIGZuZW5kOwotICAgIH0KLQotLyog RGVjb2RlIHN0cmluZ3MgY29udGFpbmluZyBoZXggZXNjYXBlcyAqLwotCi0gICAgaWYgKGN4ID09 IEZOX1VOUENUKSB7CQkvKiBcZmRlY29kZWhleCgpICovCi0gICAgICAgIGNoYXIgKnMxLCAqczI7 Ci0JY2hhciAqcHJlZml4OwkJCS8qIENhbiBiZSAxIG9yIDIgY2hhcnMgKi8KLQljaGFyIGJ1Zlsz XTsKLQlpbnQgbiA9IDAsIGs7Ci0KLQlwID0gZm52YWw7Ci0JKnAgPSBOVUw7Ci0gICAgICAgIGlm IChhcmduIDwgMSkgZ290byBmbmVuZDsJLyogRW1wdHkgc3RyaW5nICovCi0KLQlzMSA9IGJwWzBd ID8gYnBbMF0gOiAiIjsJLyogT3JpZ2luYWwgc3RyaW5nICovCi0JcHJlZml4ID0gYnBbMV0gPyBi cFsxXSA6ICIlJSI7CS8qIEhleCBieXRlIHByZWZpeCAqLwotCW4gPSAoaW50KXN0cmxlbihwcmVm aXgpOwkvKiBMZW5ndGggb2YgcHJlZml4ICovCi0JaWYgKG4gPCAxIHx8IG4gPiAyKSB7CQkvKiBt dXN0IGJlIDEgb3IgMiAqLwotCSAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0JCSAgICAgICAi PEVSUk9SOklOVkFMSURfSEVYX1BSRUZJWDpcXGYiLGZuLCIoKT4iLE5VTEwpOwotCSAgICBnb3Rv IHh1bnBjdDsKLQl9Ci0gICAgICAgIHdoaWxlICgqczEpIHsKLQkgICAgaWYgKCFja3N0cmNtcChz MSxwcmVmaXgsbiwwKSkgeyAvKiBDYXNlLWluZGVwZW5kZW50ICovCi0JCWlmICghKihzMStuKSkg ewotCQkgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotCQkJICAgICAiPEVSUk9SOklOQ09NUExF VEVfU0VRVUVOQ0U6XFxmIixmbiwiKCk+IixOVUxMKTsKLQkJICAgIGdvdG8geHVucGN0OwotCQl9 Ci0JCWJ1ZlswXSA9ICooczErbik7CS8qIEZpcnN0IGhleCBjaGFyYWN0ZXIgKi8KLQkJYnVmWzFd ID0gKihzMStuKzEpOwkvKiBTZWNvbmQgaGV4IGNoYXJhY3RlciAqLwotCQlidWZbMl0gPSBOVUw7 Ci0JCWlmICgoayA9IGNraGV4Ynl0ZXRvaW50KChjaGFyICopYnVmKSkgPiAtMSkgewotCQkgICAg KnArKyA9IChjaGFyKSBrOwkvKiBEZXBvc2l0IGRlY29kZWQgcmVzdWx0ICovCi0JCSAgICBzMSAr PSAyK247CQkvKiBhbmQgYWR2YW5jZSB0aGUgc291cmNlIHBvaW50ZXIgKi8KLQkJfSBlbHNlIHsJ CS8qIEZhaWwgb24gY29udmVyc2lvbiBlcnJvciAqLwotCQkgICAgY2ttYWttc2coZm52YWwsRk5W QUxMLAotCQkJICAgICAiPEVSUk9SOk5PTl9IRVhfQ0hBUlM6XFxmIixmbiwiKCk+IixOVUxMKTsK LQkJICAgIGdvdG8geHVucGN0OwotCQl9Ci0JICAgIH0gZWxzZSB7CQkJLyogTm90IGEgaGV4IGVz Y2FwZSBzZXF1ZW5jZSAqLwotCQkqcCsrID0gKnMxKys7CQkvKiBKdXN0IGNvcHkgdGhlIGNoYXJh Y3RlciAqLwotCSAgICB9Ci0gICAgICAgIH0KLQkqcCA9IE5VTDsJCQkvKiBUZXJtaW5hdGUgdGhl IHJlc3VsdCBzdHJpbmcgKi8KLSAgICAgICAgZmFpbGVkID0gMDsJCQkvKiBTYXkgd2UgZGlkbid0 IGZhaWwgKi8KLSAgICAgICAgcCA9IGZudmFsOwkJCS8qIFNldCB1cCByZXN1bHQgcG9pbnRlciAq LwotICAgICAgICBnb3RvIGZuZW5kOwkJCS8qIGFuZCBmaW5pc2ggKi8KLQotICAgICAgeHVucGN0 OgkJCQkvKiBFcnJvciBleGl0ICovCi0JcCA9IGZudmFsOwotCWZhaWxlZCA9IDE7Ci0JZ290byBm bmVuZDsKLSAgICB9Ci0KLS8qIENoZWNrIGEgc3RyaW5nIGZvciBlbmNvZGluZyBmYW1pbHkgKi8K LQotICAgIGlmIChjeCA9PSBGTl9TVFJJTkdUKSB7CQkvKiBcZnN0cmluZ3R5cGUoKSAqLwotCXAg PSAiVU5LIjsKLQlzd2l0Y2ggKHNjYW5zdHJpbmcoYnBbMF0pKSB7Ci0JICBjYXNlIEZUXzdCSVQ6 IHAgPSAiN0JJVCI7IGJyZWFrOwotCSAgY2FzZSBGVF84QklUOiBwID0gIjhCSVQiOyBicmVhazsK LQkgIGNhc2UgRlRfVVRGODogcCA9ICJVVEY4IjsgYnJlYWs7Ci0JICBjYXNlIEZUX1VDUzI6IHAg PSAiVUNTMiI7IGJyZWFrOwotCSAgY2FzZSBGVF9URVhUOiBwID0gIlRFWFQiOyBicmVhazsKLQkg IGNhc2UgRlRfQklOOiAgcCA9ICJCSU5BUlkiOyBicmVhazsKLQl9Ci0JY2tzdHJuY3B5KGZudmFs LHAsRk5WQUxMKTsKLQlwID0gZm52YWw7Ci0JZ290byBmbmVuZDsKLSAgICB9Ci0KLS8qIFN0cmlu ZyBjb21wYXJlIHMxLCBzMiwgWyBjYXNlIF0sIFsgc3RhcnQgXSAsIFsgbGVuIF0gKi8KLQotICAg IGlmIChjeCA9PSBGTl9TVFJDTVApIHsKLSAgICAgICAgaW50IGRvY2FzZSA9IDA7CQkJLyogQ2Fz ZSBtYXR0ZXJzIG9yIG5vdCAqLwotICAgICAgICBpbnQgc3RhcnQgPSAwOwkJCS8qIFN0YXJ0IG9m IHN1YnN0cmluZyAqLwotCWludCBsZW4gPSAtMTsJCQkvKiBMZW5ndGggb2Ygc3Vic3RyaW5nIHRv IGNvbXBhcmUgKi8KLQlpbnQgeDsgY2hhciAqIHMxLCAqIHMyOwkJLyogd29ya2VycyAqLwotCi0g ICAgICAgIHAgPSAiMCI7CQkJLyogUmV0dXJuIHZhbHVlICovCi0gICAgICAgIGlmIChhcmduID09 IDApIHsJCS8qIFR3byBudWxsIHN0cmluZ3MgYXJlIGVxdWFsICovCi0JICAgIGNrc3RybmNweShm bnZhbCxwLEZOVkFMTCk7Ci0JICAgIHAgPSBmbnZhbDsKLQkgICAgZ290byBmbmVuZDsKLQl9Ci0g ICAgICAgIGlmIChhcmduID09IDEpIHsJCS8qIE5vbi1udWxsIHN0cmluZyA+IG51bGwgc3RyaW5n ICovCi0JICAgIHAgPSAiMSI7Ci0JICAgIGNrc3RybmNweShmbnZhbCxwLEZOVkFMTCk7Ci0JICAg IHAgPSBmbnZhbDsKLQkgICAgZ290byBmbmVuZDsKLQl9Ci0JaWYgKGFyZ24gPiAyKSB7Ci0JICAg IHMgPSAqKGJwWzJdKSA/IGV2YWx4KGJwWzJdKSA6ICIwIjsgLyogMCA9IGNhc2VsZXNzICovCi0J ICAgIGlmIChjaGtudW0ocykpIGRvY2FzZSA9IGF0b2kocyk7Ci0JICAgIGlmIChhcmduID4gMykg ewotCQlzID0gKihicFszXSkgPyBldmFseChicFszXSkgOiAiMSI7IC8qIHN0YXJ0IGlzIDEtYmFz ZWQgKi8KLQkJaWYgKGNoa251bShzKSkgc3RhcnQgPSBhdG9pKHMpOwotCQlpZiAoYXJnbiA+IDQp IHsKLQkJICAgIHMgPSAqKGJwWzRdKSA/IGV2YWx4KGJwWzRdKSA6ICItMSI7CS8qIC0xID0gd2hv bGUgdGhpbmcgKi8KLQkJICAgIGlmIChjaGtudW0ocykpIGxlbiA9IGF0b2kocyk7Ci0JCX0JCQot CSAgICB9ICAgICAgICAKLQl9Ci0JaWYgKHN0YXJ0ID4gMCkgc3RhcnQtLTsgCS8qIHN0YXJ0IGlz IDAtYmFzZWQgaW50ZXJuYWxseSAqLwotCXMxID0gYnBbMF07CQkJLyogR2V0IGxlbmd0aCBvZiBm aXJzdCBhcmcgKi8KLQl4ID0gKGludClzdHJsZW4oczEpOwotCWlmICh4ID4gc3RhcnQpCQkJLyog UG9pbnQgdG8gc3RhcnQgcG9zaXRpb24gb2YgczEgKi8KLQkgIHMxICs9IHN0YXJ0OwotCWVsc2UK LQkgIHMxID0gIiI7Ci0JczIgPSBicFsxXTsJCQkvKiBHZXQgbGVuZ3RoIG9mIHNlY29uZCBhcmcg Ki8KLQl4ID0gKGludClzdHJsZW4oczIpOwotCWlmICh4ID4gc3RhcnQpCQkJLyogUG9pbnQgdG8g c3RhcnQgcG9zaXRpb24gb2YgczIgKi8KLQkgIHMyICs9IHN0YXJ0OwotCWVsc2UKLQkgIHMyID0g IiI7Ci0JeCA9IGNrc3RyY21wKHMsczIsbGVuLGRvY2FzZSk7Ci0JcCA9IGNraXRvYSh4KTsKLQlj a3N0cm5jcHkoZm52YWwscCxGTlZBTEwpOwotCXAgPSBmbnZhbDsKLQlnb3RvIGZuZW5kOwotICAg IH0KLQotLyogTm90ZTogd2hlbiBhZGRpbmcgbmV3IGZ1bmN0aW9ucyByZW1lbWJlciB0byB1cGRh dGUgZG9oZnVuYyBpbiBja3V1czIuYy4gKi8KLQotICAgIGZhaWxlZCA9IDE7Ci0gICAgaWYgKGZu ZGlhZ3MpCi0gICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpVTktOT1dOX0ZVTkNU SU9OOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0KLSAgZm5lbmQ6Ci0gICAgLyogRnJlZSB0ZW1wb3Jh cnkgc3RvcmFnZSBmb3IgYWd1bWVudHMgKi8KLSAgICBmb3IgKGsgPSAwOyBrIDwgYXJnbjsgaysr KSBpZiAoYnBba10pIGZyZWUoYnBba10pOwotICAgIGZuZGVwdGgtLTsKLSAgICBpZiAoZmFpbGVk KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBIYW5kbGUgZmFpbHVyZSAqLwotICAgICAgICBk ZWJ1ZyhGMTExLCJmbmVuZCIsZm52YWwsZXJybm8pOwotICAgICAgICBpZiAoIXApIHAgPSAiIjsK LSAgICAgICAgaWYgKHBbMF0pIHsKLSAgICAgICAgICAgIC8qIEluIGNhc2UgdGhpcyB3YXNuJ3Qg Y2F1Z2h0IGFib3ZlLi4uICovCi0gICAgICAgICAgICBrID0gc3RybGVuKHApOwotICAgICAgICAg ICAgaWYgKHBbMF0gIT0gJzwnICYmIHBbay0xXSAhPSAnPicpIHsKLSAgICAgICAgICAgICAgICBj a21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpCQURfQVJHOlxcZiIsZm4sIigpPiIsTlVMTCk7 Ci0gICAgICAgICAgICAgICAgcCA9IGZudmFsOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6VU5LTk9XTjpc XGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgcCA9IGZudmFsOwotICAgICAgICB9Ci0g ICAgICAgIGlmIChmbmVycm9yKSAgICAgICAgICAgICAgICAgICAgLyogU0VUIEZVTkNUSU9OIEVS Uk9SIE9OICovCi0gICAgICAgICAgZm5zdWNjZXNzID0gMDsgICAgICAgICAgICAgICAgLyogTWFr ZSBjb21tYW5kIGZhaWwgKHNlZSBja3V1czUuYykgKi8KLSAgICAgICAgZGVidWcoRjExMSwiZm5l dmFsIGZhaWxlZCIscCxmbnN1Y2Nlc3MpOwotICAgICAgICBpZiAoZm5kaWFncykgICAgICAgICAg ICAgICAgICAgIC8qIFNFVCBGVU5DVElPTiBESUFHTk9TVElDUyBPTiAqLwotICAgICAgICAgIHBy aW50ZigiPyVzXG4iLHApOyAgICAgICAgICAgIC8qIFByaW50IGVycm9yIG1lc3NhZ2Ugbm93LiAq LwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuKCIiKTsgICAgICAgICAgICAgICAgICAg LyogUmV0dXJuIG5vdGhpbmcuICovCi0gICAgfQotICAgIHJldHVybihwKTsKLX0KLSNlbmRpZiAv KiBOT1NQTCAqLwotCi1zdGF0aWMgY2hhciBja3BpZGJ1ZlszMl0gPSAiPz8/PyI7Ci0KLSNpZmRl ZiBWTVMKLV9QUk9UT1RZUChsb25nIHpncGlkLCh2b2lkKSk7Ci0jZW5kaWYgLyogVk1TICovCi0K LWNoYXIgKgotY2tnZXRwaWQoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVy biBwaWQgYXMgc3RyaW5nICovCi0jaWZkZWYgQ0tfUElECi0jaWZkZWYgT1MyCi0jZGVmaW5lIGdl dHBpZCBfZ2V0cGlkCi0gICAgdW5zaWduZWQgbG9uZyB6ejsKLSNlbHNlCi0gICAgbG9uZyB6ejsK LSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBWTVMKLSAgICB6eiA9IHpncGlkKCk7Ci0jZWxzZQot ICAgIHp6ID0gZ2V0cGlkKCk7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgc3ByaW50Zihja3BpZGJ1 ZiwiJWxkIix6eik7ICAgICAgICAgLyogU0FGRSAqLwotI2VuZGlmIC8qIENLX1BJRCAqLwotICAg IHJldHVybigoY2hhciAqKWNrcGlkYnVmKTsKLX0KLQotI2lmbmRlZiBOT1NQTAotI2RlZmluZSBF TUJVRkxFTiAxMjggICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIG1lc3NhZ2UgYnVmZmVyIGxl bmd0aCAqLwotCi1zdGF0aWMgY2hhciBlbWJ1ZltFTUJVRkxFTisxXTsKLQotY2hhciAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV2YWx1YXRlIGJ1aWx0aW4gdmFyaWFibGUg Ki8KLW52bG9vayhzKSBjaGFyICpzOyB7Ci0gICAgaW50IHgsIHksIGN4OwotICAgIGxvbmcgejsK LSAgICBjaGFyICpwOwotI2lmbmRlZiBOT0RJQUwKLSAgICBNRE1JTkYgKiBtOwotI2VuZGlmIC8q IE5PRElBTCAqLwotI2lmbmRlZiBOT0tWRVJCUyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtl eWJvYXJkIG1hY3JvIG1hdGVyaWFsICovCi0gICAgZXh0ZXJuIGludCBrZXltYWMsIGtleW1hY3g7 Ci0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLSNpZmRlZiBDS19MT0dJTgotICAgIGV4dGVybiBpbnQg aXNndWVzdDsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgIGlmICghcykgcyA9ICIiOwotICAg IHggPSBzdHJsZW4ocyk7Ci0gICAgaWYgKGZuZGlhZ3MpIHsgICAgICAgICAgICAgICAgICAgICAg LyogRlVOQ1RJT04gRElBR05PU1RJQyBPTiAqLwotICAgICAgICBpZiAoeCArIDMyIDwgRU1CVUZM RU4pCi0gICAgICAgICAgc3ByaW50ZihlbWJ1ZiwiPEVSUk9SOk5PX1NVQ0hfVkFSSUFCTEU6XFx2 KCVzKT4iLHMpOyAvKiBTQUZFICovCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBzcHJpbnRmKGVt YnVmLCI8RVJST1I6Tk9fU1VDSF9WQVJJQUJMRT4iKTsgLyogU0FGRSAqLwotICAgIH0gZWxzZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZVTkNUSU9OIERJQUdOT1NUSUMgT0ZGICov Ci0gICAgICBlbWJ1ZlswXSA9IE5VTDsKLSAgICB4ID0gVlZCVUZMOwotICAgIHAgPSB2dmJ1ZjsK LSAgICBpZiAoenpzdHJpbmcocywmcCwmeCkgPCAwKSB7ICAgICAgICAvKiBlLmcuIGZvciBcdihc JWEpICovCi0gICAgICAgIHkgPSAtMTsKLSAgICB9IGVsc2UgewotICAgICAgICBzID0gdnZidWY7 Ci0gICAgICAgIHkgPSBsb29rdXAodmFydGFiLHMsbnZhcnMsJngpOwotICAgIH0KLSAgICBjeCA9 IHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB5IGlzIHRvbyBnZW5lcmljICovCi0j aWZuZGVmIE5PRElBTAotICAgIG0gPSAobWRtdHlwID4gMCkgPyBtb2RlbXBbbWRtdHlwXSA6IE5V TEw7IC8qIEZvciBcdihtX3h4eCkgdmFyaWFibGVzICovCi0jZW5kaWYgLyogTk9ESUFMICovCi0K LSAgICBkZWJ1ZyhGMTAxLCJudmxvb2sgeSIsIiIseSk7Ci0KLSAgICBzd2l0Y2ggKHkpIHsKLSAg ICAgIGNhc2UgVk5fQVJHQzogICAgICAgICAgICAgICAgICAgICAvKiBBUkdDICovCi0gICAgICAg IHNwcmludGYodnZidWYsIiVkIixtYWNsdmwgPCAwID8gdG9wYXJnYyA6IG1hY2FyZ2NbbWFjbHZs XSk7IC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLQotICAgICAgY2FzZSBWTl9B UkdTOiAgICAgICAgICAgICAgICAgICAgIC8qIEFSR1MgKi8KLSAgICAgICAgc3ByaW50Zih2dmJ1 ZiwiJWQiLHhhcmdzKTsgICAgICAvKiBTQUZFICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0K LSAgICAgIGNhc2UgVk5fQ09VTjogICAgICAgICAgICAgICAgICAgICAvKiBDT1VOVCAqLwotICAg ICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsY291bnRbY21kbHZsXSk7IC8qIFNBRkUgKi8KLSAgICAg ICAgcmV0dXJuKHZ2YnVmKTsKLQotICAgICAgY2FzZSBWTl9EQVRFOiAgICAgICAgICAgICAgICAg ICAgIC8qIERBVEUgKi8KLSAgICAgICAgenRpbWUoJnApOyAgICAgICAgICAgICAgICAgICAgICAv KiBHZXQgImFzY3RpbWUiIHN0cmluZyAqLwotICAgICAgICBpZiAocCA9PSBOVUxMIHx8ICpwID09 IE5VTCkgcmV0dXJuKE5VTEwpOwotICAgICAgICB2dmJ1ZlswXSA9IHBbOF07ICAgICAgICAgICAg ICAgIC8qIGRkICovCi0gICAgICAgIHZ2YnVmWzFdID0gcFs5XTsKLSAgICAgICAgdnZidWZbMl0g PSBTUDsKLSAgICAgICAgdnZidWZbM10gPSBwWzRdOyAgICAgICAgICAgICAgICAvKiBtbW0gKi8K LSAgICAgICAgdnZidWZbNF0gPSBwWzVdOwotICAgICAgICB2dmJ1Zls1XSA9IHBbNl07Ci0gICAg ICAgIHZ2YnVmWzZdID0gU1A7Ci0gICAgICAgIGZvciAoeCA9IDIwOyB4IDwgMjQ7IHgrKykgICAg ICAgLyogeXl5eSAqLwotICAgICAgICAgIHZ2YnVmW3ggLSAxM10gPSBwW3hdOwotICAgICAgICB2 dmJ1ZlsxMV0gPSBOVUw7Ci0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0KLSAgICAgIGNhc2UgVk5f TkRBVDogICAgICAgICAgICAgICAgICAgICAvKiBOdW1lcmljIGRhdGUgKi8KLSAgICAgICAgY2tz dHJuY3B5KHZ2YnVmLHp6bmRhdGUoKSxWVkJVRkwpOwotICAgICAgICByZXR1cm4odnZidWYpOwot Ci0gICAgICBjYXNlIFZOX0RJUkU6ICAgICAgICAgICAgICAgICAgICAgLyogRElSRUNUT1JZICov Ci0gICAgICAgIHMgPSB6Z3RkaXIoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IGN1cnJlbnQg ZGlyZWN0b3J5ICovCi0gICAgICAgIGlmICghcykKLSNpZmRlZiBVTklYT1JPU0sKLSAgICAgICAg ICBzID0gIi4vIjsKLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgICAgICAgcyA9ICJbXSI7Ci0jZWxz ZQotICAgICAgICAgIHMgPSAiIjsKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYT1JP U0sgKi8KLSAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHMsVlZCVUZMKTsKLSAgICAgICAgcyA9IHZ2 YnVmOwotI2lmZGVmIFVOSVhPUk9TSwotICAgICAgICB4ID0gc3RybGVuKHMpOwotICAgICAgICBp ZiAoeCA8IFZWQlVGTCAtIDEpIHsKLSAgICAgICAgICAgIGlmIChzW3gtMV0gIT0gJy8nKSB7Ci0g ICAgICAgICAgICAgICAgc1t4XSA9ICcvJzsKLSAgICAgICAgICAgICAgICBzW3grMV0gPSBOVUw7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSAgICAg ICAgcmV0dXJuKHMpOwotCi0gICAgICBjYXNlIFZOX0ZJTEU6ICAgICAgICAgICAgICAgICAgICAg LyogZmlsZXNwZWMgKi8KLSAgICAgICAgcmV0dXJuKGZzcGVjKTsKLQotICAgICAgY2FzZSBWTl9I T1NUOiAgICAgICAgICAgICAgICAgICAgIC8qIGhvc3QgbmFtZSAqLwotICAgICAgICBpZiAoKm15 aG9zdCkgeyAgICAgICAgICAgICAgICAgIC8qIElmIGtub3duICovCi0gICAgICAgICAgICByZXR1 cm4obXlob3N0KTsgICAgICAgICAgICAgLyogcmV0dXJuIGl0LiAqLwotICAgICAgICB9IGVsc2Ug eyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSAqLwotICAgICAgICAgICAgY2tz dHJuY3B5KHZ2YnVmLCJ1bmtub3duIixWVkJVRkwpOyAvKiBqdXN0IHNheSAidW5rbm93biIgKi8K LSAgICAgICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBWTl9T WVNUOiAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbSB0eXBlICovCi0jaWZkZWYgVU5JWAot ICAgICAgICBja3N0cm5jcHkodnZidWYsIlVOSVgiLFZWQlVGTCk7Ci0jZWxzZQotI2lmZGVmIFZN UwotICAgICAgICBja3N0cm5jcHkodnZidWYsIlZNUyIsVlZCVUZMKTsKLSNlbHNlCi0jaWZkZWYg T1NLCi0gICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiT1M5LzY4SyIsVlZCVUZMKTsKLSNlbHNlCi0j aWZkZWYgQU1JR0EKLSAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJBbWlnYSIsVlZCVUZMKTsKLSNl bHNlCi0jaWZkZWYgTUFDCi0gICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiTWFjaW50b3NoIixWVkJV RkwpOwotI2Vsc2UKLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotICAgICAgICBja3N0cm5jcHkodnZi dWYsIldJTjMyIixWVkJVRkwpIDsKLSNlbHNlIC8qIE5UICovCi0gICAgICAgIGNrc3RybmNweSh2 dmJ1ZiwiT1MvMiIsVlZCVUZMKTsKLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UKLSNpZmRlZiBkYXRh Z2VuZXJhbAotICAgICAgICBja3N0cm5jcHkodnZidWYsIkFPUy9WUyIsVlZCVUZMKTsKLSNlbHNl Ci0jaWZkZWYgR0VNRE9TCi0gICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiQXRhcmlfU1QiLFZWQlVG TCk7Ci0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLSAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJTdHJh dHVzX1ZPUyIsVlZCVUZMKTsKLSNlbHNlCi0gICAgICAgIGNrc3RybmNweSh2dmJ1ZiwidW5rbm93 biIsVlZCVUZMKTsKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogR0VNRE9TICovCi0j ZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBNQUMg Ki8KLSNlbmRpZiAvKiBBTUlHQSAqLwotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIFZNUyAq LwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLQotICAgICAgY2Fz ZSBWTl9TWVNWOiAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbSBoZXJhbGQgKi8KLSNpZmRl ZiBJS1NECi0jaWZkZWYgQ0tfTE9HSU4KLSAgICAgICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3Qp Ci0gICAgICAgICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2VuZGlmIC8q IElLU0QgKi8KLSAgICAgICAgZm9yICh4ID0geSA9IDA7IHggPCBWVkJVRkw7IHgrKykgewotICAg ICAgICAgICAgaWYgKGNreHN5c1t4XSA9PSBTUCAmJiB5ID09IDApIGNvbnRpbnVlOwotICAgICAg ICAgICAgdnZidWZbeSsrXSA9IChjaGFyKSAoKGNreHN5c1t4XSA9PSBTUCkgPyAnXycgOiBja3hz eXNbeF0pOwotICAgICAgICB9Ci0gICAgICAgIHZ2YnVmW3ldID0gTlVMOwotICAgICAgICByZXR1 cm4odnZidWYpOwotICAgIH0gLyogQnJlYWsgdXAgbG9uZyBzd2l0Y2ggc3RhdGVtZW50cy4uLiAq LwotCi0gICAgc3dpdGNoKHkpIHsKLSAgICAgIGNhc2UgVk5fVElNRTogICAgICAgICAgICAgICAg ICAgICAvKiBUSU1FLiBBc3N1bWVzIHRoYXQgenRpbWUgcmV0dXJucyAqLwotICAgICAgICB6dGlt ZSgmcCk7ICAgICAgICAgICAgICAgICAgICAgIC8qICJUaHUgRmViICA4IDEyOjAwOjAwIDE5OTAi ICovCi0gICAgICAgIGlmIChwID09IE5VTEwgfHwgKnAgPT0gTlVMKSAgICAgLyogbGlrZSBhc2N0 aW1lKCkhICovCi0gICAgICAgICAgcmV0dXJuKCIiKTsKLSAgICAgICAgZm9yICh4ID0gMTE7IHgg PCAxOTsgeCsrKSAgICAgICAvKiBjb3B5IGhoOm1tOnNzICovCi0gICAgICAgICAgdnZidWZbeCAt IDExXSA9IHBbeF07ICAgICAgICAgLyogdG8gdnZidWYgKi8KLSAgICAgICAgdnZidWZbOF0gPSBO VUw7ICAgICAgICAgICAgICAgICAvKiB0ZXJtaW5hdGUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVm KTsgICAgICAgICAgICAgICAgICAvKiBhbmQgcmV0dXJuIGl0ICovCi0KLSAgICAgIGNhc2UgVk5f TlRJTTogICAgICAgICAgICAgICAgICAgICAvKiBOdW1lcmljIHRpbWUgKi8KLSAgICAgICAgenRp bWUoJnApOyAgICAgICAgICAgICAgICAgICAgICAvKiAiVGh1IEZlYiAgOCAxMjowMDowMCAxOTkw IiAqLwotICAgICAgICBpZiAocCA9PSBOVUxMIHx8ICpwID09IE5VTCkgICAgIC8qIGxpa2UgYXNj dGltZSgpISAqLwotICAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICAgICAgeiA9IGF0b2wocCsx MSkgKiAzNjAwTCArIGF0b2wocCsxNCkgKiA2MEwgKyBhdG9sKHArMTcpOwotICAgICAgICBzcHJp bnRmKHZ2YnVmLCIlbGQiLHopOyAgICAgICAgIC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2 YnVmKTsKLQotI2lmZGVmIENLX1RUWUZECi0gICAgICBjYXNlIFZOX1RUWUY6ICAgICAgICAgICAg ICAgICAgICAgLyogVFRZIGZpbGUgZGVzY3JpcHRvciAqLwotICAgICAgICBzcHJpbnRmKHZ2YnVm LCIlZCIsICAgICAgICAgICAgIC8qIFNBRkUgKi8KLSNpZmRlZiBWTVMKLSAgICAgICAgICAgICAg ICB2bXN0dHlmZCgpCi0jZWxzZQotICAgICAgICAgICAgICAgIHR0eWZkCi0jZW5kaWYgLyogVk1T ICovCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSNlbmRpZiAv KiBDS19UVFlGRCAqLwotCi0gICAgICBjYXNlIFZOX1ZFUlM6ICAgICAgICAgICAgICAgICAgICAg LyogTnVtZXJpYyBLZXJtaXQgdmVyc2lvbiBudW1iZXIgKi8KLSAgICAgICAgc3ByaW50Zih2dmJ1 ZiwiJWxkIix2ZXJudW0pOyAgICAvKiBTQUZFICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0K LSAgICAgIGNhc2UgVk5fWFZOVU06ICAgICAgICAgICAgICAgICAgICAvKiBQcm9kdWN0LXNwZWNp ZmljIHZlcnNpb24gbnVtYmVyICovCi0gICAgICAgIHNwcmludGYodnZidWYsIiVsZCIseHZlcm51 bSk7ICAgLyogU0FGRSAqLwotICAgICAgICByZXR1cm4odnZidWYpOwotCi0gICAgICBjYXNlIFZO X0hPTUU6ICAgICAgICAgICAgICAgICAgICAgLyogSG9tZSBkaXJlY3RvcnkgKi8KLSAgICAgICAg cmV0dXJuKGhvbWVwYXRoKCkpOwotCi0gICAgICBjYXNlIFZOX0lCVUY6ICAgICAgICAgICAgICAg ICAgICAgLyogSU5QVVQgYnVmZmVyICovCi0gICAgICAgIHJldHVybigoY2hhciAqKWlucGJ1Zik7 Ci0KLSAgICAgIGNhc2UgVk5fSUNIUjogICAgICAgICAgICAgICAgICAgICAvKiBJTlBVVCBjaGFy YWN0ZXIgKi8KLSAgICAgICAgaW5jaGFyWzFdID0gTlVMOwotICAgICAgICByZXR1cm4oKGNoYXIg KilpbmNoYXIpOwotCi0gICAgICBjYXNlIFZOX0lDTlQ6ICAgICAgICAgICAgICAgICAgICAgLyog SU5QVVQgY2hhcmFjdGVyIGNvdW50ICovCi0gICAgICAgIHNwcmludGYodnZidWYsIiVkIixpbmNv dW50KTsgICAgLyogU0FGRSAqLwotICAgICAgICByZXR1cm4odnZidWYpOwotCi0gICAgICBjYXNl IFZOX1NQRUU6IHsgICAgICAgICAgICAgICAgICAgLyogVHJhbnNtaXNzaW9uIFNQRUVEICovCi0g ICAgICAgICAgbG9uZyB0OwotICAgICAgICAgIHQgPSB0dGdzcGQoKTsKLSAgICAgICAgICBpZiAo dCA8IDBMKQotICAgICAgICAgICAgc3ByaW50Zih2dmJ1ZiwidW5rbm93biIpOyAgIC8qIFNBRkUg Ki8KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlbGQiLHQpOyAg ICAgLyogU0FGRSAqLwotICAgICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgICB9Ci0KLSAgICAg IGNhc2UgVk5fU1VDQzogICAgICAgICAgICAgICAgICAgICAvKiBTVUNDRVNTIGZsYWcgKi8KLSAg ICAgICAgLyogTm90ZSBpbnZlcnRlZCBzZW5zZSAqLwotICAgICAgICBzcHJpbnRmKHZ2YnVmLCIl ZCIsKHN1Y2Nlc3MgPT0gMCkgPyAxIDogMCk7IC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2 YnVmKTsKLQotICAgICAgY2FzZSBWTl9MSU5FOiB7ICAgICAgICAgICAgICAgICAgIC8qIExJTkUg Ki8KLSNpZmRlZiBERUJVRwotICAgICAgICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgICAgICAg ZGVidWcoRjExMSwiXFx2KGxpbmUpIGxvY2FsIix0dG5hbWUsbG9jYWwpOwotICAgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJcXHYobGluZSkgaW5zZXJ2ZXIiLCIiLGluc2VydmVyKTsKLSNpZmRlZiBU TkNPREUKLSAgICAgICAgICAgICAgZGVidWcoRjExMSwiXFx2KGxpbmUpIHRjcF9pbmNvbWluZyIs IiIsdGNwX2luY29taW5nKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNpZmRlZiBDS19UQVBJCi0g ICAgICAgICAgICAgIGRlYnVnKEYxMTEsIlxcdihsaW5lKSB0dHRhcGkiLCIiLHR0dGFwaSk7Ci0j ZW5kaWYgLyogQ0tfVEFQSSAqLwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0j aWZkZWYgQ0tfVEFQSQotICAgICAgICAgIGlmICh0dHRhcGkpIHsgICAgICAgICAgICAgICAgIC8q IElmIEkgaGF2ZSBtYWRlIGEgVEFQSSBjb25uZWN0aW9uICovCi0gICAgICAgICAgICAgIGludCBp OyAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIHRoZSBUQVBJIGRldmljZSBuYW1lICovCi0g ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudGFwaWxpbmU7IGkrKykgewotICAgICAgICAg ICAgICAgICAgaWYgKCFzdHJjbXAodHRuYW1lLHRhcGlsaW5ldGFiW2ldLmt3ZCkpIHsKLSAgICAg ICAgICAgICAgICAgICAgICBwID0gX3RhcGlsaW5ldGFiW2ldLmt3ZDsKLSAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4ocCk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0K LSAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICAg ICAgICBpZiAoaW5zZXJ2ZXIgICAgICAgICAgICAgICAgICAvKiBJZiBJIGFtIGEgVENQIHNlcnZl ciAqLwotI2lmZGVmIFROQ09ERQotICAgICAgICAgICAgICB8fCB0Y3BfaW5jb21pbmcKLSNlbmRp ZiAvKiBUTkNPREUgKi8KLSAgICAgICAgICAgICAgKQotI2lmZGVmIFRDUFNPQ0tFVAotICAgICAg ICAgICAgcCA9IGNrZ2V0cGVlcigpOyAgICAgICAgICAgIC8qIHJldHVybiBwZWVyIG5hbWUgKi8K LSAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogTk9YRkVS ICovCi0gICAgICAgICAgaWYgKGxvY2FsKSAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNl IGlmIGluIGxvY2FsIG1vZGUgKi8KLSAgICAgICAgICAgIHAgPSAoY2hhciAqKSB0dG5hbWU7ICAg ICAgICAvKiByZXR1cm4gU0VUIExJTkUgLyBTRVQgSE9TVCBuYW1lICovCi0gICAgICAgICAgZWxz ZSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlICovCi0gICAgICAgICAgICBw ID0gIiI7ICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGVtcHR5IHN0cmluZyAqLwotICAg ICAgICAgIGlmICghcCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEluIGNhc2UgY2tnZXRwZWVy KCkgcmV0dXJucyAqLwotICAgICAgICAgICAgcCA9ICIiOyAgICAgICAgICAgICAgICAgICAgIC8q IG51bGwgcG9pbnRlci4uLiAqLwotICAgICAgICAgIGRlYnVnKEYxMTAsIlxcdihsaW5lKSBwIixw LDApOwotICAgICAgICAgIGlmICghKnApCi0gICAgICAgICAgICBwID0gKGNoYXIgKikgdHRuYW1l OwotICAgICAgICAgIHJldHVybihwKTsKLSAgICAgIH0KLSAgICAgIGNhc2UgVk5fUFJPRzogICAg ICAgICAgICAgICAgICAgICAvKiBQcm9ncmFtIG5hbWUgKi8KLSAgICAgICAgcmV0dXJuKCJDLUtl cm1pdCIpOwotCi0gICAgfSAvKiBCcmVhayB1cCBsb25nIHN3aXRjaCBzdGF0ZW1lbnRzLi4uICov Ci0KLSAgICBzd2l0Y2goeSkgewotICAgICAgY2FzZSBWTl9SRVQ6ICAgICAgICAgICAgICAgICAg ICAgIC8qIFZhbHVlIG9mIG1vc3QgcmVjZW50IFJFVFVSTiAqLwotICAgICAgICBkZWJ1ZyhGMTEx LCJcXHYocmV0dXJuKSIsbXJ2YWxbbWFjbHZsKzFdLG1hY2x2bCsxKTsKLSAgICAgICAgcCA9IG1y dmFsW21hY2x2bCsxXTsKLSAgICAgICAgaWYgKHAgPT0gTlVMTCkgcCA9ICIiOwotICAgICAgICBy ZXR1cm4ocCk7Ci0KLSAgICAgIGNhc2UgVk5fRkZDOiAgICAgICAgICAgICAgICAgICAgICAvKiBT aXplIG9mIG1vc3QgcmVjZW50IGZpbGUgKi8KLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwgIiVzIiwg Y2tmc3RvYShmZmMpKTsgLyogU0FGRSAqLwotICAgICAgICByZXR1cm4odnZidWYpOwotCi0gICAg ICBjYXNlIFZOX1RGQzogICAgICAgICAgICAgICAgICAgICAgLyogU2l6ZSBvZiBtb3N0IHJlY2Vu dCBmaWxlIGdyb3VwICovCi0gICAgICAgIHNwcmludGYodnZidWYsICIlcyIsIGNrZnN0b2EodGZj KSk7IC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLQotICAgICAgY2FzZSBWTl9D UFU6ICAgICAgICAgICAgICAgICAgICAgIC8qIENQVSB0eXBlICovCi0jaWZkZWYgSUtTRAotI2lm ZGVmIENLX0xPR0lOCi0gICAgICAgIGlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KQotICAgICAgICAg IHJldHVybigiIik7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0j aWZkZWYgT1MyCi0gICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyICogZ2V0Y3B1KHZvaWQpIDsK LSAgICAgICAgICAgIHJldHVybiBnZXRjcHUoKTsKLSAgICAgICAgIH0KLSNlbHNlIC8qIE9TMiAq LwotI2lmZGVmIENLQ1BVCi0gICAgICAgIHJldHVybihDS0NQVSk7ICAgICAgICAgICAgICAgICAg LyogVHJhZGl0aW9uYWxseSwgY29tcGlsZS10aW1lIHZhbHVlICovCi0jZWxzZQotI2lmZGVmIENL X1VUU05BTUUKLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCdXQg aWYgbm9uZSwgdHJ5IHJ1bnRpbWUgdmFsdWUgKi8KLSAgICAgICAgICAgIGV4dGVybiBjaGFyIHVu bV9tY2hbXTsKLSAgICAgICAgICAgIHJldHVybigoY2hhciAqKXVubV9tY2gpOwotICAgICAgICB9 Ci0jZWxzZQotICAgICAgICBwID0gZ2V0ZW52KCJIT1NUVFlQRSIpOwkJLyogMjAwOTExMTYgKi8K LQlpZiAocCkgaWYgKCpwKSByZXR1cm4ocCk7Ci0gICAgICAgIHJldHVybigidW5rbm93biIpOwot I2VuZGlmIC8qIENLX1VUU05BTUUgKi8KLSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIE9T MiAqLwotCi0gICAgICBjYXNlIFZOX0NNREw6ICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFu ZCBsZXZlbCAqLwotICAgICAgICBzcHJpbnRmKHZ2YnVmLCAiJWQiLCBjbWRsdmwpOyAgIC8qIFNB RkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLQotICAgICAgY2FzZSBWTl9EQVk6ICAgICAg ICAgICAgICAgICAgICAgIC8qIERheSBvZiB3ZWVrICovCi0gICAgICAgIHp0aW1lKCZwKTsKLSAg ICAgICAgaWYgKHAgIT0gTlVMTCAmJiAqcCAhPSBOVUwpICAgICAvKiB6dGltZSgpIHN1Y2NlZWRl ZC4gKi8KLSAgICAgICAgICBja3N0cm5jcHkodnZidWYscCw0KTsKLSAgICAgICAgZWxzZQotICAg ICAgICAgIHZ2YnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgIC8qIHp0aW1lKCkgZmFpbGVkLiAq LwotICAgICAgICByZXR1cm4odnZidWYpOyAgICAgICAgICAgICAgICAgIC8qIFJldHVybiB3aGF0 IHdlIGdvdC4gKi8KLQotICAgICAgY2FzZSBWTl9OREFZOiB7ICAgICAgICAgICAgICAgICAgIC8q IE51bWVyaWMgZGF5IG9mIHdlZWsgKi8KLSAgICAgICAgICBsb25nIGs7Ci0gICAgICAgICAgeiA9 IG1qZCh6em5kYXRlKCkpOyAgICAgICAgICAgLyogR2V0IG1vZGlmaWVkIEp1bGlhbiBkYXRlICov Ci0gICAgICAgICAgayA9ICgoKGludCkoeiAlIDdMKSkgKyAzKSAlIDc7IC8qIEdldCBkYXkgbnVt YmVyICovCi0gICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWxkIixrKTsgICAgICAgLyogU0FGRSAq LwotICAgICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgVk5fTENM OiAgICAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCAodnMgcmVtb3RlKSBtb2RlICovCi0gICAg ICAgIGNrc3RybmNweSh2dmJ1ZiwgbG9jYWwgPyAiMSIgOiAiMCIsVlZCVUZMKTsKLSAgICAgICAg cmV0dXJuKHZ2YnVmKTsKLQotICAgICAgY2FzZSBWTl9DTURTOiAgICAgICAgICAgICAgICAgICAg IC8qIENvbW1hbmQgc291cmNlICovCi0gICAgICAgIGlmIChjbWRzdGtbY21kbHZsXS5zcmMgPT0g Q01EX0tCKQotICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwicHJvbXB0IixWVkJVRkwpOwotICAg ICAgICBlbHNlIGlmIChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01EX01EKQotICAgICAgICAgIGNr c3RybmNweSh2dmJ1ZiwibWFjcm8iLFZWQlVGTCk7Ci0gICAgICAgIGVsc2UgaWYgKGNtZHN0a1tj bWRsdmxdLnNyYyA9PSBDTURfVEYpCi0gICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJmaWxlIixW VkJVRkwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJ1bmtub3du IixWVkJVRkwpOwotICAgICAgICByZXR1cm4odnZidWYpOwotCi0gICAgICBjYXNlIFZOX0NNREY6 ICAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBjb21tYW5kIGZpbGUgbmFtZSAqLwotI2lm ZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChzZWUgY29tbWVudHMgYWJv dmUpICovCi0gICAgICAgIGlmICh0Zm5hbVt0bGV2ZWxdKSB7ICAgICAgICAgICAgLyogKG5lYXIg ZGJsYnMgZGVjbGFyYXRpb24pICovCi0gICAgICAgICAgICBkYmxicyh0Zm5hbVt0bGV2ZWxdLHZ2 YnVmLFZWQlVGTCk7Ci0gICAgICAgICAgICByZXR1cm4odnZidWYpOwotICAgICAgICB9IGVsc2Ug cmV0dXJuKCIiKTsKLSNlbHNlCi0gICAgICAgIGlmICh0bGV2ZWwgPCAwKQotICAgICAgICAgIHJl dHVybigiIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4odGZuYW1bdGxldmVsXSA/ IHRmbmFtW3RsZXZlbF0gOiAiIik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgICBjYXNl IFZOX01BQzogICAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBtYWNybyBuYW1lICovCi0g ICAgICAgIHJldHVybigobWFjbHZsID4gLTEpID8gbV9hcmdbbWFjbHZsXVswXSA6ICIiKTsKLQot ICAgICAgY2FzZSBWTl9FWElUOgotICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIseGl0c3RhKTsg ICAgIC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLQotICAgIH0gLyogQnJlYWsg dXAgbG9uZyBzd2l0Y2ggc3RhdGVtZW50cy4uLiAqLwotCi0gICAgc3dpdGNoKHkpIHsKLSAgICAg IGNhc2UgVk5fUFJUWTogeyAgICAgICAgICAgICAgICAgICAvKiBQYXJpdHkgKi8KLSAgICAgICAg ICBjaGFyICpzczsKLSAgICAgICAgICBzd2l0Y2ggKHBhcml0eSkgewotICAgICAgICAgICAgY2Fz ZSAwOiAgIHNzID0gIm5vbmUiOyAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdlJzogc3MgPSAi ZXZlbiI7ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ20nOiBzcyA9ICJtYXJrIjsgIGJyZWFr OwotICAgICAgICAgICAgY2FzZSAnbyc6IHNzID0gIm9kZCI7ICAgYnJlYWs7Ci0gICAgICAgICAg ICBjYXNlICdzJzogc3MgPSAic3BhY2UiOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6ICBz cyA9ICJ1bmtub3duIjsgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNrc3RybmNweSh2 dmJ1ZixzcyxWVkJVRkwpOwotICAgICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgICB9Ci0KLSAg ICAgIGNhc2UgVk5fRElBTDoKLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLCAgICAgICAgICAg ICAvKiBTQUZFICovCi0jaWZuZGVmIE5PRElBTAotICAgICAgICAgICAgICAgIGRpYWxzdGEKLSNl bHNlCi0gICAgICAgICAgICAgICAgLTEKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSAgICAgICAgICAg ICAgICApOwotICAgICAgICByZXR1cm4odnZidWYpOwotCi0jaWZuZGVmIE5PRElBTAotICAgICAg Y2FzZSBWTl9ETVNHOgotI2lmZGVmIEJJR0JVRk9LCi0JY2tzdHJuY3B5KHZ2YnVmLGRpYWxtc2db ZGlhbHN0YV0sVlZCVUZMKTsgLyogU2FmZSBpZiBzcmMgPT0gTlVMTCAqLwotI2VuZGlmCS8qIEJJ R0JVRk9LICovCi0JcmV0dXJuKChjaGFyICopdnZidWYpOwotI2VuZGlmCS8qIE5PRElBTCAqLwot Ci0jaWZkZWYgT1MyCi0gICAgICBjYXNlIFZOX0tFWUI6Ci0gICAgICAgIGNrc3RybmNweSh2dmJ1 Zixjb25rYmcoKSxWVkJVRkwpOwotICAgICAgICByZXR1cm4odnZidWYpOwotICAgICAgY2FzZSBW Tl9TRUxDVDogewotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICAgICAgY29uc3QgY2hhciAqIHNlbGVj dGlvbiA9IEdldFNlbGVjdGlvbigpOwotICAgICAgICAgIHJldHVybiggKGNoYXIgKikgKHNlbGVj dGlvbiA/IHNlbGVjdGlvbiA6ICIiICkpIDsKLSNlbHNlCi0gICAgICAgICAgcmV0dXJuKCIiKTsK LSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5k ZWYgTk9YRkVSCi0gICAgICBjYXNlIFZOX0NQUzoKLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWxk Iix0ZmNwcyk7ICAgICAvKiBTQUZFICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0jZW5kaWYg LyogTk9YRkVSICovCi0KLSAgICAgIGNhc2UgVk5fTU9ERTogICAgICAgICAgICAgICAgICAgICAv KiBGaWxlIHRyYW5zZmVyIG1vZGUgKi8KLSAgICAgICAgc3dpdGNoIChiaW5hcnkpIHsKLSAgICAg ICAgICBjYXNlIFhZRlRfVDogY2tzdHJuY3B5KHZ2YnVmLCJ0ZXh0IixWVkJVRkwpOyBicmVhazsK LSAgICAgICAgICBjYXNlIFhZRlRfQjoKLSAgICAgICAgICBjYXNlIFhZRlRfVTogY2tzdHJuY3B5 KHZ2YnVmLCJiaW5hcnkiLFZWQlVGTCk7IGJyZWFrOwotICAgICAgICAgIGNhc2UgWFlGVF9JOiBj a3N0cm5jcHkodnZidWYsImltYWdlIixWVkJVRkwpOyBicmVhazsKLSAgICAgICAgICBjYXNlIFhZ RlRfTDogY2tzdHJuY3B5KHZ2YnVmLCJsYWJlbGVkIixWVkJVRkwpOyBicmVhazsKLSAgICAgICAg ICBjYXNlIFhZRlRfTTogY2tzdHJuY3B5KHZ2YnVmLCJtYWNiaW5hcnkiLFZWQlVGTCk7IGJyZWFr OwotICAgICAgICAgIGRlZmF1bHQ6ICAgICBja3N0cm5jcHkodnZidWYsInVua25vd24iLFZWQlVG TCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLQotI2lmZGVmIENLX1JFWFgK LSAgICAgIGNhc2UgVk5fUkVYWDoKLSAgICAgICAgcmV0dXJuKHJleHhidWYpOwotI2VuZGlmIC8q IENLX1JFWFggKi8KLQotICAgICAgY2FzZSBWTl9ORVdMOiAgICAgICAgICAgICAgICAgICAgIC8q IFN5c3RlbSBuZXdsaW5lIGNoYXIgb3Igc2VxdWVuY2UgKi8KLSNpZmRlZiBVTklYCi0gICAgICAg IGNrc3RybmNweSh2dmJ1ZiwiXG4iLFZWQlVGTCk7Ci0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFs Ci0gICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiXG4iLFZWQlVGTCk7Ci0jZWxzZQotI2lmZGVmIE9T SwotICAgICAgICBja3N0cm5jcHkodnZidWYsIlwxNSIsVlZCVUZMKTsgIC8qIFJlbWVtYmVyLCB0 aGVzZSBhcmUgb2N0YWwuLi4gKi8KLSNlbHNlCi0jaWZkZWYgTUFDCi0gICAgICAgIGNrc3RybmNw eSh2dmJ1ZiwiXDE1IixWVkJVRkwpOwotI2Vsc2UKLSNpZmRlZiBPUzIKLSAgICAgICAgY2tzdHJu Y3B5KHZ2YnVmLCJcMTVcMTIiLFZWQlVGTCk7Ci0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLSAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLCJcbiIsVlZCVUZMKTsKLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAg ICAgIGNrc3RybmNweSh2dmJ1ZiwiXDE1XDEyIixWVkJVRkwpOwotI2Vsc2UKLSNpZmRlZiBBTUlH QQotICAgICAgICBja3N0cm5jcHkodnZidWYsIlxuIixWVkJVRkwpOwotI2Vsc2UKLSNpZmRlZiBH RU1ET1MKLSAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJcbiIsVlZCVUZMKTsKLSNlbHNlCi0gICAg ICAgIGNrc3RybmNweSh2dmJ1ZiwiXG4iLFZWQlVGTCk7Ci0jZW5kaWYgLyogR0VNRE9TICovCi0j ZW5kaWYgLyogQU1JR0EgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICov Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogT1NLICovCi0j ZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgIHJldHVy bih2dmJ1Zik7Ci0KLSAgICAgIGNhc2UgVk5fUk9XUzogICAgICAgICAgICAgICAgICAgICAvKiBS T1dTICovCi0gICAgICBjYXNlIFZOX0NPTFM6ICAgICAgICAgICAgICAgICAgICAgLyogQ09MUyAq LwotICAgICAgICBja3N0cm5jcHkodnZidWYsKGN4ID09IFZOX1JPV1MpID8gIjI0IiA6ICI4MCIs VlZCVUZMKTsgLyogRGVmYXVsdCAqLwotI2lmZGVmIENLX1RUR1dTSVoKLSNpZmRlZiBPUzIKLSAg ICAgICAgaWYgKHR0X2NvbHNbVlRFUk1dIDwgMCB8fCB0dF9yb3dzW1ZURVJNXSA8IDApCi0gICAg ICAgICAgdHRnd3NpeigpOwotICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsICAgICAgICAgICAg IC8qIFNBRkUgKi8KLSAgICAgICAgICAgICAgICAoY3ggPT0gVk5fUk9XUykgPyB0dF9yb3dzW1ZU RVJNXSA6IHR0X2NvbHNbVlRFUk1dKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICBpZiAodHRn d3NpeigpID4gMCkgICAgICAgICAgICAgIC8qIEdldCB3aW5kb3cgc2l6ZSAqLwotICAgICAgICAg IGlmICh0dF9jb2xzID4gMCAmJiB0dF9yb3dzID4gMCkgLyogc2V0cyB0dF9yb3dzLCB0dF9jb2xz ICovCi0gICAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsICAgICAgICAgLyogU0FGRSAqLwot ICAgICAgICAgICAgICAgICAgICAoY3ggPT0gVk5fUk9XUykgPyB0dF9yb3dzIDogdHRfY29scyk7 Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotICAgICAgICByZXR1 cm4odnZidWYpOwotCi0gICAgICBjYXNlIFZOX1RUWVA6Ci0jaWZkZWYgTk9URVJNCi0gICAgICAg IGNrc3RybmNweSh2dmJ1ZiwidW5rbm93biIsVlZCVUZMKTsKLSNlbHNlCi0jaWZkZWYgT1MyCi0g ICAgICAgIHNwcmludGYodnZidWYsICIlcyIsICAgICAgICAgICAgLyogU0FGRSAqLwotICAgICAg ICAgICAgICAgICh0dF90eXBlID49IDAgJiYgdHRfdHlwZSA8PSBtYXhfdHQpID8KLSAgICAgICAg ICAgICAgICB0dF9pbmZvW3R0X3R5cGVdLnhfbmFtZSA6Ci0gICAgICAgICAgICAgICAgInVua25v d24iCi0gICAgICAgICAgICAgICAgKTsKLSNlbHNlCi0jaWZkZWYgTUFDCi0gICAgICAgIGNrc3Ry bmNweSh2dmJ1ZiwidnQzMjAiLFZWQlVGTCk7Ci0jZWxzZQotICAgICAgICBwID0gZ2V0ZW52KCJU RVJNIik7Ci0gICAgICAgIGNrc3RybmNweSh2dmJ1ZixwID8gcCA6ICJ1bmtub3duIixWVkJVRkwr MSk7Ci0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9URVJN ICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0KLSAgICAgIGNhc2UgVk5fTUlOUDogICAgICAg ICAgICAgICAgICAgICAvKiBNSU5QVVQgKi8KLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwgIiVkIiwg bV9mb3VuZCk7ICAvKiBTQUZFICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgfSAvKiBC cmVhayB1cCBsb25nIHN3aXRjaCBzdGF0ZW1lbnRzLi4uICovCi0KLSAgICBzd2l0Y2goeSkgewot ICAgICAgY2FzZSBWTl9DT05OOiAgICAgICAgICAgICAgICAgICAgIC8qIENPTk5FQ1RJT04gKi8K LSAgICAgICAgaWYgKCFsb2NhbCkgewotICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwicmVtb3Rl IixWVkJVRkwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFuZXR3b3JrKQot ICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsInNlcmlhbCIsVlZCVUZMKTsKLSNpZmRlZiBU Q1BTT0NLRVQKLSAgICAgICAgICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX1RDUEIgfHwgbmV0 dHlwZSA9PSBORVRfVENQQSkgewotICAgICAgICAgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9U RUxORVQpCi0gICAgICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsInRjcC9pcF90ZWxuZXQi LFZWQlVGTCk7Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAodHRucHJv dG8gPT0gTlBfU1NMIHx8IHR0bnByb3RvID09IE5QX1NTTF9SQVcpCi0gICAgICAgICAgICAgICAg ICBja3N0cm5jcHkodnZidWYsInRjcC9pcF9zc2wiLFZWQlVGTCk7Ci0gICAgICAgICAgICAgICAg ZWxzZSBpZiAodHRucHJvdG8gPT0gTlBfVExTIHx8IHR0bnByb3RvID09IE5QX1NTTF9SQVcpCi0g ICAgICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsInRjcC9pcF90bHMiLFZWQlVGTCk7Ci0j ZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLCJ0Y3AvaXAiLFZWQlVGTCk7Ci0gICAgICAgICAgICB9Ci0jZW5k aWYgLyogVENQU09DS0VUICovCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAgICAgICAgZWxzZSBp ZiAobmV0dHlwZSA9PSBORVRfU1NIKQotICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVm LCJ0Y3AvaXBfc3NoIixWVkJVRkwpOwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNpZmRlZiBB TllYMjUKLSAgICAgICAgICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX1NYMjUgfHwKLSAgICAg ICAgICAgICAgICAgICAgIG5ldHR5cGUgPT0gTkVUX1ZYMjUgfHwKLSAgICAgICAgICAgICAgICAg ICAgIG5ldHR5cGUgPT0gTkVUX0lYMjUKLSAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAg ICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJ4LjI1IixWVkJVRkwpOwotI2VuZGlmIC8qIEFOWVgyNSAq LwotI2lmZGVmIERFQ05FVAotICAgICAgICAgICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfREVD KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX0xBVCkKLSAgICAgICAgICAg ICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiZGVjbmV0X2xhdCIsVlZCVUZMKTsKLSAgICAgICAgICAg ICAgICBlbHNlIGlmICggdHRucHJvdG8gPT0gTlBfQ1RFUk0gKQotICAgICAgICAgICAgICAgICAg Y2tzdHJuY3B5KHZ2YnVmLCJkZWNuZXRfY3Rlcm0iLFZWQlVGTCk7Ci0gICAgICAgICAgICAgICAg ZWxzZQotICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJkZWNuZXQiLFZWQlVGTCk7 Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogREVDTkVUICovCi0jaWZkZWYgU1VQRVJMQVQKLSAg ICAgICAgICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX1NMQVQpCi0gICAgICAgICAgICAgIGNr c3RybmNweSh2dmJ1Ziwic3VwZXJsYXQiLFZWQlVGTCk7Ci0jZW5kaWYgLyogU1VQRVJMQVQgKi8K LSNpZmRlZiBORVRGSUxFCi0gICAgICAgICAgICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9GSUxF KQotICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsImxvY2FsX2ZpbGUiLFZWQlVGTCk7Ci0j ZW5kaWYgLyogTkVURklMRSAqLwotI2lmZGVmIE5FVENNRAotICAgICAgICAgICAgZWxzZSBpZiAo bmV0dHlwZSA9PSBORVRfQ01EKQotICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsInBpcGUi LFZWQlVGTCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgICAgICAg ICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9QVFkpCi0gICAgICAgICAgICAgIGNrc3RybmNweSh2 dmJ1ZiwicHNldWRvdGVybWluYWwiLFZWQlVGTCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0jaWZk ZWYgTkVURExMCi0gICAgICAgICAgICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9ETEwpCi0gICAg ICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiZHluYW1pY19saW5rX2xpYnJhcnkiLFZWQlVGTCk7 Ci0jZW5kaWYgLyogTkVURExMICovCi0KLSNpZmRlZiBOUElQRQotICAgICAgICAgICAgZWxzZSBp ZiAobmV0dHlwZSA9PSBORVRfUElQRSkKLSAgICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJu YW1lZF9waXBlIixWVkJVRkwpOwotI2VuZGlmIC8qIE5QSVBFICovCi0jaWZkZWYgQ0tfTkVUQklP UwotICAgICAgICAgICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfQklPUykKLSAgICAgICAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLCJuZXRiaW9zIixWVkJVRkwpOwotI2VuZGlmIC8qIENLX05FVEJJ T1MgKi8KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJ1 bmtub3duIixWVkJVRkwpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0KLSNp Zm5kZWYgTk9YRkVSCi0gICAgICBjYXNlIFZOX1NZU0k6ICAgICAgICAgICAgICAgICAgICAgLyog U3lzdGVtIElELCBLZXJtaXQgY29kZSAqLwotICAgICAgICByZXR1cm4oKGNoYXIgKilja3N5c2lk KTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIE9TMgotICAgICAgY2FzZSBWTl9TUEE6 IHsKLSAgICAgICAgICB1bnNpZ25lZCBsb25nIHNwYWNlID0gemRza3NwYWNlKDApOwotICAgICAg ICAgIGlmIChzcGFjZSA+IDAgJiYgc3BhY2UgPCAxMDI0KQotICAgICAgICAgICAgc3ByaW50Zih2 dmJ1ZiwiLTEiKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIl bHUiLHNwYWNlKTsgLyogU0FGRSAqLwotICAgICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgICB9 Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgICBjYXNlIFZOX1FVRTog ewotICAgICAgICAgIGV4dGVybiBjaGFyIHF1ZXJ5YnVmW107Ci0gICAgICAgICAgcmV0dXJuKHF1 ZXJ5YnVmKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0NTRVRT Ci0gICAgICBjYXNlIFZOX0NTRVQ6Ci0jaWZkZWYgT1MyCi0gICAgICAgIHNwcmludGYodnZidWYs ImNwJWQiLG9zMmdldGNwKCkpOyAvKiBTQUZFICovCi0jZWxzZQotICAgICAgICBja3N0cm5jcHko dnZidWYsZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZCxWVkJVRkwrMSk7Ci0jZW5kaWYgLyogT1My ICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZk ZWYgT1MyCi0gICAgICBjYXNlIFZOX0VYRURJUjoKLSAgICAgICAgcmV0dXJuKGV4ZWRpcik7Ci0g ICAgICBjYXNlIFZOX1NUQVI6Ci0gICAgICAgIHJldHVybihzdGFydHVwZGlyKTsKLSNlbHNlCi0g ICAgICBjYXNlIFZOX0VYRURJUjoKLSAgICAgICAgcmV0dXJuKGV4ZWRpciA/IGV4ZWRpciA6ICIi KTsKLSNpZmRlZiBWTVNPUlVOSVgKLSAgICAgIGNhc2UgVk5fU1RBUjoKLSAgICAgICAgcmV0dXJu KHN0YXJ0dXBkaXIpOwotI2VuZGlmIC8qIFZNU09SVU5JWCAqLwotI2VuZGlmIC8qIE9TMiAqLwot Ci0gICAgICBjYXNlIFZOX0lOSToKLSAgICAgICAgcmV0dXJuKGluaWRpcik7Ci0KLSAgICAgIGNh c2UgVk5fTURNOgotICAgICAgICByZXR1cm4oZ21kbXR5cCgpKTsKLQotICAgICAgY2FzZSBWTl9F VkFMOgotICAgICAgICByZXR1cm4oZXZhbGJ1Zik7Ci0KLSNpZm5kZWYgTk9ESUFMCi0gICAgICBj YXNlIFZOX0RfQ0M6ICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBDT1VOVFJZLUNPREUgKi8K LSAgICAgICAgcmV0dXJuKGRpYWxsY2MgPyBkaWFsbGNjIDogIiIpOwotCi0gICAgICBjYXNlIFZO X0RfQUM6ICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBBUkVBLUNPREUgKi8KLSAgICAgICAg cmV0dXJuKGRpYWxsYWMgPyBkaWFsbGFjIDogIiIpOwotCi0gICAgICBjYXNlIFZOX0RfSVA6ICAg ICAgICAgICAgICAgICAgICAgLyogRElBTCBJTlRFUk5BVElPTkFMLVBSRUZJWCAqLwotICAgICAg ICByZXR1cm4oZGlhbGl4cCA/IGRpYWxpeHAgOiAiIik7Ci0KLSAgICAgIGNhc2UgVk5fRF9MUDog ICAgICAgICAgICAgICAgICAgICAvKiBESUFMIExELVBSRUZJWCAqLwotICAgICAgICByZXR1cm4o ZGlhbGxkcCA/IGRpYWxsZHAgOiAiIik7Ci0KLSAgICAgIGNhc2UgVk5fRF9MQ1A6ICAgICAgICAg ICAgICAgICAgICAvKiBESUFMIExPQ0FMLVBSRUZJWCAqLwotICAgICAgICByZXR1cm4oZGlhbGxj cCA/IGRpYWxsY3AgOiAiIik7Ci0KLSAgICAgIGNhc2UgVk5fRF9QWFg6ICAgICAgICAgICAgICAg ICAgICAvKiBESUFMIFBCWC1FWENIQU5HRSB0aGF0IG1hdGNoZWQgKi8KLSAgICAgICAgcmV0dXJu KG1hdGNocHh4ID8gbWF0Y2hweHggOiAiIik7Ci0jZWxzZQotICAgICAgY2FzZSBWTl9EX0NDOiAg ICAgICAgICAgICAgICAgICAgIC8qIERJQUwgQ09VTlRSWS1DT0RFICovCi0gICAgICBjYXNlIFZO X0RfQUM6ICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBBUkVBLUNPREUgKi8KLSAgICAgIGNh c2UgVk5fRF9JUDogICAgICAgICAgICAgICAgICAgICAvKiBESUFMIElOVEVSTkFUSU9OQUwtUFJF RklYICovCi0gICAgICBjYXNlIFZOX0RfTFA6ICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBM RC1QUkVGSVggKi8KLSAgICAgIGNhc2UgVk5fRF9MQ1A6ICAgICAgICAgICAgICAgICAgICAvKiBE SUFMIExPQ0FMLVBSRUZJWCAqLwotICAgICAgY2FzZSBWTl9EX1BYWDogICAgICAgICAgICAgICAg ICAgIC8qIERJQUwgUEJYLUVYQ0hBTkdFICovCi0gICAgICAgIHJldHVybigiIik7Ci0jZW5kaWYg LyogTk9ESUFMICovCi0gICAgICBjYXNlIFZOX1VJRDoKLSNpZmRlZiBVTklYCi0gICAgICAgIHsK LSNpZmRlZiBJS1NECi0gICAgICAgICAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICAgICAgICAgIHJl dHVybigoY2hhciAqKXVpZGJ1Zik7Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogSUtTRCAq LwotICAgICAgICAgICAgICBpZiAodWlkYnVmWzBdKQotICAgICAgICAgICAgICAgIHJldHVybigo Y2hhciAqKXVpZGJ1Zik7Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1 cm4od2hvYW1pKCkpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICByZXR1cm4oKGNoYXIgKil1 aWRidWYpOwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICB9IC8qIEJyZWFrIHVwIGxvbmcgc3dpdGNo IHN0YXRlbWVudHMuLi4gKi8KLQotICAgIHN3aXRjaCh5KSB7Ci0gICAgICBjYXNlIFZOX1BXRDoK LSNpZmRlZiBPUzIKLSAgICAgICAgaWYgKGFjdGl2ZWNtZCA9PSBYWE9VVCB8fCBhY3RpdmVjbWQg PT0gWFhMTk9VVCkgewotICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHB3YnVmLFZWQlVGTCk7 Ci0gICAgICAgICAgICBja19lbmNyeXB0KChjaGFyICopdnZidWYpOwotICAgICAgICAgICAgcmV0 dXJuKChjaGFyICopdnZidWYpOwotICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBPUzIgKi8KLSAg ICAgICAgICByZXR1cm4oKGNoYXIgKilwd2J1Zik7Ci0KLSAgICAgIGNhc2UgVk5fUFJNOgotICAg ICAgICByZXR1cm4oKGNoYXIgKilwcm1idWYpOwotCi0gICAgICBjYXNlIFZOX1BST1RPOgotI2lm ZGVmIE5PWEZFUgotICAgICAgICByZXR1cm4oIm5vbmUiKTsKLSNlbHNlCi0jaWZkZWYgQ0tfWFla Ci0gICAgICAgIHJldHVybihwdGFiW3Byb3RvY29sXS5wX25hbWUpOwotI2Vsc2UKLSAgICAgICAg cmV0dXJuKCJrZXJtaXQiKTsKLSNlbmRpZiAvKiBDS19YWVogKi8KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotI2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBDS19UTVBESVIKLSAgICAgIGNhc2UgVk5fRExE SVI6Ci0gICAgICAgIHJldHVybihkbGRpciA/IGRsZGlyIDogIiIpOwotI2VuZGlmIC8qIENLX1RN UERJUiAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PRElBTAotICAgICAgY2Fz ZSBWTl9NX0lOSTogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGluaXQgc3RyaW5nICovCi0g ICAgICAgIHJldHVybihkaWFsaW5pID8gZGlhbGluaSA6IChtID8gbS0+d2FrZV9zdHIgOiAiIikp OwotCi0gICAgICBjYXNlIFZOX01fRENNOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gZGlh bCBjb21tYW5kICovCi0gICAgICAgIHJldHVybihkaWFsY21kID8gZGlhbGNtZCA6IChtID8gbS0+ ZGlhbF9zdHIgOiAiIikpOwotCi0gICAgICBjYXNlIFZOX01fRENPOiAgICAgICAgICAgICAgICAg ICAgLyogTW9kZW0gZGF0YSBjb21wcmVzc2lvbiBvbiAqLwotICAgICAgICByZXR1cm4oZGlhbGRj b24gPyBkaWFsZGNvbiA6IChtID8gbS0+ZGNfb25fc3RyIDogIiIpKTsKLQotICAgICAgY2FzZSBW Tl9NX0RDWDogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGRhdGEgY29tcHJlc3Npb24gb2Zm ICovCi0gICAgICAgIHJldHVybihkaWFsZGNvZmYgPyBkaWFsZGNvZmYgOiAobSA/IG0tPmRjX29m Zl9zdHIgOiAiIikpOwotCi0gICAgICBjYXNlIFZOX01fRUNPOiAgICAgICAgICAgICAgICAgICAg LyogTW9kZW0gZXJyb3IgY29ycmVjdGlvbiBvbiAqLwotICAgICAgICByZXR1cm4oZGlhbGVjb24g PyBkaWFsZWNvbiA6IChtID8gbS0+ZWNfb25fc3RyIDogIiIpKTsKLQotICAgICAgY2FzZSBWTl9N X0VDWDogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGVycm9yIGNvcnJlY3Rpb24gb2ZmICov Ci0gICAgICAgIHJldHVybihkaWFsZWNvZmYgPyBkaWFsZWNvZmYgOiAobSA/IG0tPmVjX29mZl9z dHIgOiAiIikpOwotCi0gICAgICBjYXNlIFZOX01fQUFPOiAgICAgICAgICAgICAgICAgICAgLyog TW9kZW0gYXV0b2Fuc3dlciBvbiAqLwotICAgICAgICByZXR1cm4oZGlhbGFhb24gPyBkaWFsYWFv biA6IChtID8gbS0+YWFfb25fc3RyIDogIiIpKTsKLQotICAgICAgY2FzZSBWTl9NX0FBWDogICAg ICAgICAgICAgICAgICAgIC8qIE1vZGVtIGF1dG9hbnN3ZXIgb2ZmICovCi0gICAgICAgIHJldHVy bihkaWFsYWFvZmYgPyBkaWFsYWFvZmYgOiAobSA/IG0tPmFhX29mZl9zdHIgOiAiIikpOwotCi0g ICAgICBjYXNlIFZOX01fSFVQOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gaGFuZ3VwIGNv bW1hbmQgKi8KLSAgICAgICAgcmV0dXJuKGRpYWxoY21kID8gZGlhbGhjbWQgOiAobSA/IG0tPmh1 cF9zdHIgOiAiIikpOwotCi0gICAgICBjYXNlIFZOX01fSFdGOiAgICAgICAgICAgICAgICAgICAg LyogTW9kZW0gaGFyZHdhcmUgZmxvdyBjb21tYW5kICovCi0gICAgICAgIHJldHVybihkaWFsaHdm YyA/IGRpYWxod2ZjIDogKG0gPyBtLT5od2ZjX3N0ciA6ICIiKSk7Ci0KLSAgICAgIGNhc2UgVk5f TV9TV0Y6ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBzb2Z0d2FyZSBmbG93IGNvbW1hbmQg Ki8KLSAgICAgICAgcmV0dXJuKGRpYWxzd2ZjID8gZGlhbHN3ZmMgOiAobSA/IG0tPnN3ZmNfc3Ry IDogIiIpKTsKLQotICAgICAgY2FzZSBWTl9NX05GQzogICAgICAgICAgICAgICAgICAgIC8qIE1v ZGVtIG5vIGZsb3ctY29udHJvbCBjb21tYW5kICovCi0gICAgICAgIHJldHVybihkaWFsbm9mYyA/ IGRpYWxub2ZjIDogKG0gPyBtLT5ub2ZjX3N0ciA6ICIiKSk7Ci0KLSAgICAgIGNhc2UgVk5fTV9Q RE06ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBwdWxzZSBkaWFsaW5nIG1vZGUgKi8KLSAg ICAgICAgcmV0dXJuKGRpYWxwdWxzZSA/IGRpYWxwdWxzZSA6IChtID8gbS0+cHVsc2UgOiAiIikp OwotCi0gICAgICBjYXNlIFZOX01fVERNOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gdG9u ZSBkaWFsaW5nIG1vZGUgKi8KLSAgICAgICAgcmV0dXJuKGRpYWx0b25lID8gZGlhbHRvbmUgOiAo bSA/IG0tPnRvbmUgOiAiIikpOwotCi0gICAgICBjYXNlIFZOX01fTkFNOiAgICAgICAgICAgICAg ICAgICAgLyogTW9kZW0gZnVsbCBuYW1lICovCi0gICAgICAgIHJldHVybihkaWFsbmFtZSA/IGRp YWxuYW1lIDogKG0gPyBtLT5uYW1lIDogIiIpKTsKLSNlbHNlCi0gICAgICBjYXNlIFZOX01fSU5J OiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gaW5pdCBzdHJpbmcgKi8KLSAgICAgIGNhc2Ug Vk5fTV9EQ006ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBkaWFsIGNvbW1hbmQgKi8KLSAg ICAgIGNhc2UgVk5fTV9EQ086ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBkYXRhIGNvbXBy ZXNzaW9uIG9uICovCi0gICAgICBjYXNlIFZOX01fRENYOiAgICAgICAgICAgICAgICAgICAgLyog TW9kZW0gZGF0YSBjb21wcmVzc2lvbiBvZmYgKi8KLSAgICAgIGNhc2UgVk5fTV9FQ086ICAgICAg ICAgICAgICAgICAgICAvKiBNb2RlbSBlcnJvciBjb3JyZWN0aW9uIG9uICovCi0gICAgICBjYXNl IFZOX01fRUNYOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gZXJyb3IgY29ycmVjdGlvbiBv ZmYgKi8KLSAgICAgIGNhc2UgVk5fTV9BQU86ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBh dXRvYW5zd2VyIG9uICovCi0gICAgICBjYXNlIFZOX01fQUFYOiAgICAgICAgICAgICAgICAgICAg LyogTW9kZW0gYXV0b2Fuc3dlciBvZmYgKi8KLSAgICAgIGNhc2UgVk5fTV9IVVA6ICAgICAgICAg ICAgICAgICAgICAvKiBNb2RlbSBoYW5ndXAgY29tbWFuZCAqLwotICAgICAgY2FzZSBWTl9NX0hX RjogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGhhcmR3YXJlIGZsb3cgY29tbWFuZCAqLwot ICAgICAgY2FzZSBWTl9NX1NXRjogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIHNvZnR3YXJl IGZsb3cgY29tbWFuZCAqLwotICAgICAgY2FzZSBWTl9NX05GQzogICAgICAgICAgICAgICAgICAg IC8qIE1vZGVtIG5vIGZsb3ctY29udHJvbCBjb21tYW5kICovCi0gICAgICBjYXNlIFZOX01fUERN OiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gcHVsc2UgZGlhbGluZyBtb2RlICovCi0gICAg ICBjYXNlIFZOX01fVERNOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gdG9uZSBkaWFsaW5n IG1vZGUgKi8KLSAgICAgIGNhc2UgVk5fTV9OQU06Ci0gICAgICAgIHJldHVybigiIik7Ci0jZW5k aWYgLyogTk9ESUFMICovCi0KLSAgICAgIGNhc2UgVk5fSVNUQVQ6ICAgICAgICAgICAgICAgICAg ICAvKiBJTlBVVCBzdGF0dXMgKi8KLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwgIiVkIiwgaW5zdGF0 dXMpOyAvKiBTQUZFICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0KLSAgICAgIGNhc2UgVk5f VEVNUDogICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgZGlyZWN0b3J5ICovCi0gICAg ICAgIGlmICh0ZW1wZGlyKSB7Ci0gICAgICAgICAgICBwID0gdGVtcGRpcjsKLSAgICAgICAgfSBl bHNlIHsKLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotICAgICAgICAgICAgcCA9IGdldGVudigiSzk1 VE1QIik7Ci0jZWxzZQotICAgICAgICAgICAgcCA9IGdldGVudigiSzJUTVAiKTsKLSNlbmRpZiAv KiBOVCAqLwotICAgICAgICAgICAgaWYgKCAhcCApCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAg ICAgICAgIHAgPSBnZXRlbnYoIkNLX1RNUCIpOwotICAgICAgICAgICAgaWYgKCFwKSBwID0gZ2V0 ZW52KCJUTVBESVIiKTsKLSAgICAgICAgICAgIGlmICghcCkgcCA9IGdldGVudigiVEVNUCIpOwot ICAgICAgICAgICAgaWYgKCFwKSBwID0gZ2V0ZW52KCJUTVAiKTsKLQotI2lmZGVmIE9TMk9SVU5J WAotICAgICAgICAgICAgaWYgKHApIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVu KHApOwotICAgICAgICAgICAgICAgIGlmIChwW2xlbi0xXSAhPSAnLycKLSNpZmRlZiBPUzIKLSAg ICAgICAgICAgICAgICAgICAgJiYgcFtsZW4tMV0gIT0gJ1xcJwotI2VuZGlmIC8qIE9TMiAqLwot ICAgICAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjaGFy IGZvb1tDS01BWFBBVEhdOwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoZm9vLHAsQ0tN QVhQQVRIKTsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KGZvbywiLyIsQ0tNQVhQQVRI KTsKLSAgICAgICAgICAgICAgICAgICAgcCA9IGZvbzsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICB9IGVsc2UKLSNlbHNlIC8qIE9TMk9SVU5JWCAqLwotICAgICAgICAgICAgaWYgKCFw KQotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotI2lmZGVmIFVOSVggICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFN5c3RlbXMgdGhhdCBoYXZlIGEgc3RhbmRhcmQgKi8KLSAgICAgICAgICAg ICAgcCA9ICIvdG1wLyI7ICAgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgZGlyZWN0b3J5Li4uICov Ci0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgICAgICAgICAgIHAgPSAiOlRNUDoiOwot I2Vsc2UKLSAgICAgICAgICAgICAgcCA9ICIiOwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0j ZW5kaWYgLyogVU5JWCAqLwotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNweSh2dmJ1ZixwLFZW QlVGTCk7Ci0gICAgICAgIHAgPSB2dmJ1ZjsKLQotLyogVGhpcyBuZWVkcyBnZW5lcmFsaXppbmcg Zm9yIFZPUywgQU9TL1ZTLCBldGMuLi4gKi8KLQotICAgICAgICB3aGlsZSAoKnApIHsKLSNpZmRl ZiBPUzIKLSAgICAgICAgICAgIGlmICgqcCA9PSAnXFwnKSAqcCA9ICcvJzsKLSNlbmRpZiAvKiBP UzIgKi8KLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgfQotI2lmbmRlZiBWTVMKLSAgICAgICAg aWYgKHAgPiB2dmJ1ZikgewotICAgICAgICAgICAgY2hhciBjID0gICAgICAgICAgICAgICAgICAg IC8qIERpcmVjdG9yeSB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIgKi8KLSNpZmRlZiBNQUMKLSAgICAg ICAgICAgICAgJzonCi0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgICAgICAgICAgICc6 JwotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0gICAgICAgICAgICAgICc+JwotI2Vsc2UKLSAgICAg ICAgICAgICAgJy8nCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFs ICovCi0jZW5kaWYgLyogTUFDICovCi0gICAgICAgICAgICAgICAgOwotCi0gICAgICAgICAgICBp ZiAoKihwLTEpICE9IGMpIHsKLSAgICAgICAgICAgICAgICAqcCsrID0gYzsKLSAgICAgICAgICAg ICAgICAqcCA9IE5VTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIFZNUyAq LwotICAgICAgICByZXR1cm4odnZidWYpOwotICAgIH0gLyogQnJlYWsgdXAgbG9uZyBzd2l0Y2gg c3RhdGVtZW50cy4uLiAqLwotCi0gICAgc3dpdGNoKHkpIHsKLSAgICAgIGNhc2UgVk5fRVJSTk86 ICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBudW1iZXIgKi8KLSNpZmRlZiBWTVMKLSAgICAg ICAgewotICAgICAgICAgICAgZXh0ZXJuIGludCB2bXNfbGFzdGVycjsKLSAgICAgICAgICAgIHNw cmludGYodnZidWYsICIlZCIsIHZtc19sYXN0ZXJyKTsgLyogU0FGRSAqLwotICAgICAgICB9Ci0j ZWxzZQotICAgICAgICBzcHJpbnRmKHZ2YnVmLCAiJWQiLCBlcnJubyk7ICAgIC8qIFNBRkUgKi8K LSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLQotICAgICAgY2FzZSBW Tl9FUlNUUjogICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIHN0cmluZyAqLwotICAgICAgICBj a3N0cm5jcHkodnZidWYsY2tfZXJyc3RyKCksVlZCVUZMKTsKLSAgICAgICAgcmV0dXJuKHZ2YnVm KTsKLQotI2lmbmRlZiBOT1hGRVIKLSAgICAgIGNhc2UgVk5fUlBTSVo6ICAgICAgICAgICAgICAg ICAgICAvKiBSRUNFSVZFIHBhY2tldC1sZW5ndGggKi8KLSAgICAgICAgc3ByaW50Zih2dmJ1Ziwi JWQiLHVycHNpeik7ICAgICAvKiBTQUZFICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0KLSAg ICAgIGNhc2UgVk5fV0lORE86ICAgICAgICAgICAgICAgICAgICAvKiBXSU5ET1cgc2xvdHMgKi8K LSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLHdzbG90cik7ICAgICAvKiBTQUZFICovCi0gICAg ICAgIHJldHVybih2dmJ1Zik7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSAgICAgIGNhc2UgVk5f VEZMTjogICAgICAgICAgICAgICAgICAgICAvKiBUQUtFLWZpbGUgbGluZSBudW1iZXIgKi8KLSAg ICAgICAgaWYgKHRsZXZlbCA+IC0xKSB7Ci0gICAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCAiJWQi LCB0ZmxpbmVbdGxldmVsXSk7IC8qIFNBRkUgKi8KLSAgICAgICAgICAgIHJldHVybih2dmJ1Zik7 Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHJldHVybigiMCIpOwotCi0gICAgICBjYXNlIFZO X01ETVNHOiAgICAgICAgICAgICAgICAgICAgLyogRElBTFJFU1VMVCAqLwotI2lmbmRlZiBOT0RJ QUwKLSAgICAgICAgcmV0dXJuKChjaGFyICopbW9kZW1tc2cpOwotI2Vsc2UKLSAgICAgICAgcmV0 dXJuKCIiKTsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQotICAgICAgY2FzZSBWTl9ETlVNOiAgICAg ICAgICAgICAgICAgICAgIC8qIERJQUxOVU1CRVIgKi8KLSNpZm5kZWYgTk9ESUFMCi0gICAgICAg IHJldHVybihkaWFsbnVtID8gKGNoYXIgKikgZGlhbG51bSA6ICIiKTsKLSNlbHNlCi0gICAgICAg IHJldHVybigiIik7Ci0jZW5kaWYgLyogTk9ESUFMICovCi0KLSAgICAgIGNhc2UgVk5fQVBDOgot ICAgICAgICBzcHJpbnRmKHZ2YnVmLCAiJWQiLCAgICAgICAgICAgIC8qIFNBRkUgKi8KLSNpZmRl ZiBDS19BUEMKLSAgICAgICAgICAgICAgICBhcGNhY3RpdmUKLSNlbHNlCi0gICAgICAgICAgICAg ICAgMAotI2VuZGlmIC8qIENLX0FQQyAqLwotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHJl dHVybigoY2hhciAqKXZ2YnVmKTsKLQotI2lmZGVmIE9TMgotI2lmbmRlZiBOT0tWRVJCUwotICAg ICAgY2FzZSBWTl9UUk1LOgotICAgICAgICAgIHNwcmludGYodnZidWYsICIlZCIsIGtleW1hYyk7 IC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOwotI2VuZGlmIC8qIE5P S1ZFUkJTICovCi0jZW5kaWYgLyogT1MyICovCi0KLSAgICAgIGNhc2UgVk5fSVBBRERSOgotI2lm ZGVmIFRDUFNPQ0tFVAotI2lmbmRlZiBPU0sKLSAgICAgIC8qIFRoaXMgZHVtcHMgY29yZSBvbiBP Uy05IGZvciBzb21lIHJlYXNvbiwgYnV0IG9ubHkgaWYgZXhlY3V0ZWQgKi8KLSAgICAgIC8qIGJl Zm9yZSB3ZSBoYXZlIG1hZGUgYSBUQ1AgY29ubmVjdGlvbi4gIFRoaXMgaXMgb2J2aW91c2x5IG5v dCAqLwotICAgICAgLyogdGhlIGlkZWFsIGZpeC4gKi8KLSAgICAgICAgaWYgKCFteWlwYWRkclsw XSkKLSAgICAgICAgICBnZXRsb2NhbGlwYWRkcigpOwotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLwotICAgICAgICBja3N0cm5jcHkodnZidWYsCi0jaWZkZWYgVENQU09D S0VUCi0gICAgICAgICAgICAgICAgKGNoYXIgKilteWlwYWRkciwKLSNlbHNlCi0gICAgICAgICAg ICAgICAgIiIsCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0gICAgICAgICAgICAgICAgVlZCVUZM KTsKLSAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOwotCi0jaWZuZGVmIE5PWEZFUgotICAg ICAgY2FzZSBWTl9DUkMxNjogICAgICAgICAgICAgICAgICAgIC8qIENSQy0xNiBvZiBtb3N0IHJl Y2VudCB0cmFuc2ZlciAqLwotICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsY3JjMTYpOyAgICAg IC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8K LQotI2lmZGVmIENLX1BJRAotICAgICAgY2FzZSBWTl9QSUQ6Ci0jaWZkZWYgSUtTRAotI2lmZGVm IENLX0xPR0lOCi0gICAgICAgIGlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KQotICAgICAgICAgIHJl dHVybigiIik7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0gICAg ICAgIHJldHVybihja2dldHBpZCgpKTsKLSNlbmRpZiAvKiBDS19QSUQgKi8KLQotI2lmbmRlZiBO T1hGRVIKLSAgICAgIGNhc2UgVk5fRk5BTTogeyAgICAgICAgICAgICAgICAgICAvKiBcdihmaWxl bmFtZSkgKi8KLSAgICAgICAgICBleHRlcm4gY2hhciBmaWxuYW1bXSwgb2ZuMVtdLCAqc2ZzcGVj LCAqcnJmc3BlYzsKLSAgICAgICAgICBjaGFyICogdG1wOwotICAgICAgICAgIHN3aXRjaCAod2hh dCkgeyAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MgKi8KLSNp ZmRlZiBORVdGVFAKLSAgICAgICAgICAgIGNhc2UgKFdfRlRQfFdfUkVDVik6Ci0gICAgICAgICAg ICBjYXNlIChXX0ZUUHxXX1NFTkQpOgotICAgICAgICAgICAgICByZXR1cm4oKGNoYXIgKilmaWxu YW0pOwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotICAgICAgICAgICAgY2FzZSBXX1JFQ1Y6Ci0gICAg ICAgICAgICBjYXNlIFdfUkVNTzoKLSAgICAgICAgICAgICAgcmV0dXJuKChjaGFyICopb2ZuMSk7 Ci0gICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgLyogTW9zdCByZWNlbnQg ZmlsZSB0cmFuc2ZlcnJlZCAqLwotICAgICAgICAgICAgICBpZiAoZmlsbmFtWzBdKSB7ICAgICAg ICAgIC8qIChpZiBhbnkpICovCi0gICAgICAgICAgICAgICAgICByZXR1cm4oKGNoYXIgKilmaWxu YW0pOwotICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3R4ZmVyICYgV19TRU5EICYmIHNmc3Bl YykgewotICAgICAgICAgICAgICAgICAgaWYgKGZuc3BhdGggPT0gUEFUSF9PRkYpCi0gICAgICAg ICAgICAgICAgICAgIHpzdHJpcChzZnNwZWMsJnRtcCk7Ci0gICAgICAgICAgICAgICAgICBlbHNl Ci0gICAgICAgICAgICAgICAgICAgIHRtcCA9IHNmc3BlYzsKLSAgICAgICAgICAgICAgICAgIHJl dHVybih0bXApOwotICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3R4ZmVyICYgV19SRUNWICYm IHJyZnNwZWMpIHsKLSAgICAgICAgICAgICAgICAgIGlmIChmbnJwYXRoID09IFBBVEhfT0ZGKQot ICAgICAgICAgICAgICAgICAgICB6c3RyaXAocnJmc3BlYywmdG1wKTsKLSAgICAgICAgICAgICAg ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdG1wID0gcnJmc3BlYzsKLSAgICAgICAgICAg ICAgICAgIHJldHVybih0bXApOwotICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg ICByZXR1cm4oIiIpOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhc2UgVk5fRk5VTTog ICAgICAgICAgICAgICAgICAgICAvKiBcdihmaWxlbnVtKSAqLwotICAgICAgICBzcHJpbnRmKHZ2 YnVmLCIlbGQiLGZpbGNudCk7ICAgIC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKChjaGFyICop dnZidWYpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgUEVYSVRTVEFUCi0gICAgICBj YXNlIFZOX1BFWElUOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCBwZXhpdHN0YXQ7Ci0gICAgICAg ICAgc3ByaW50Zih2dmJ1ZiwiJWQiLHBleGl0c3RhdCk7IC8qIFNBRkUgKi8KLSAgICAgICAgICBy ZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgICB9Ci0jZW5kaWYgLyogUEVYSVRTVEFUICovCi0K LSNpZm5kZWYgTk9YRkVSCi0gICAgICBjYXNlIFZOX1BfOEJJVDoKLSAgICAgICAgdnZidWZbMF0g PSBwYXJpdHkgPyBlYnEgOiBOVUw7Ci0gICAgICAgIHZ2YnVmWzFdID0gTlVMOwotICAgICAgICBy ZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0KLSAgICAgIGNhc2UgVk5fUF9DVEw6IHsKLSAgICAgICAg ICBleHRlcm4gQ0hBUiBteWN0bHE7Ci0gICAgICAgICAgdnZidWZbMF0gPSBteWN0bHE7Ci0gICAg ICAgICAgdnZidWZbMV0gPSBOVUw7Ci0gICAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOwot ICAgICAgfQotICAgICAgY2FzZSBWTl9QX1JQVDogewotICAgICAgICAgIGV4dGVybiBpbnQgcnB0 ZW5hOwotICAgICAgICAgIHZ2YnVmWzBdID0gcnB0ZW5hID8gcnB0cSA6IE5VTDsKLSAgICAgICAg ICB2dmJ1ZlsxXSA9IE5VTDsKLSAgICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAg ICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBPUzIKLSAgICAgIGNhc2UgVk5fUkVH TjoKLSAgICAgICAgcmV0dXJuKGdldF9yZWdfbmFtZSgpKTsKLSAgICAgIGNhc2UgVk5fUkVHTzoK LSAgICAgICAgcmV0dXJuKGdldF9yZWdfY29ycCgpKTsKLSAgICAgIGNhc2UgVk5fUkVHUzoKLSAg ICAgICAgcmV0dXJuKGdldF9yZWdfc24oKSk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgfSAvKiBC cmVhayB1cCBsb25nIHN3aXRjaCBzdGF0ZW1lbnRzLi4uICovCi0KLSAgICBzd2l0Y2goeSkgewot ICAgICAgY2FzZSBWTl9YUFJPRzoKLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotI2lmZGVmIEtVSQot ICAgICAgICByZXR1cm4oIkstOTVHIik7Ci0jZWxzZQotICAgICAgICByZXR1cm4oIkstOTUiKTsK LSNlbmRpZiAvKiBLVUkgKi8KLSNlbHNlCi0gICAgICAgIHJldHVybigiSy8yIik7Ci0jZW5kaWYg LyogTlQgKi8KLSNlbHNlCi0gICAgICAgIHJldHVybigiQy1LZXJtaXQiKTsKLSNlbmRpZiAvKiBP UzIgKi8KLQotICAgICAgY2FzZSBWTl9FRElUT1I6Ci0jaWZkZWYgTk9GUklMTFMKLSAgICAgICAg cmV0dXJuKCIiKTsKLSNlbHNlCi0jaWZkZWYgTk9QVVNICi0gICAgICAgIHJldHVybigiIik7Ci0j ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBleHRlcm4gY2hhciBlZGl0b3JbXTsKLSAgICAg ICAgICAgIGNoYXIgKnNzOwotICAgICAgICAgICAgaWYgKCFlZGl0b3JbMF0pIHsKLSAgICAgICAg ICAgICAgICBzcyA9IGdldGVudigiRURJVE9SIik7Ci0gICAgICAgICAgICAgICAgaWYgKHNzKSB7 Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShlZGl0b3Isc3MsQ0tNQVhQQVRIKTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJc XHYoZWRpdG9yKSIsZWRpdG9yLDApOwotICAgICAgICAgICAgcmV0dXJuKGVkaXRvclswXSA/IChj aGFyICopZWRpdG9yIDogIiIpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9QVVNIICovCi0jZW5k aWYgLyogTk9GUklMTFMgKi8KLQotICAgICAgY2FzZSBWTl9FRE9QVDoKLSNpZmRlZiBOT0ZSSUxM UwotICAgICAgICByZXR1cm4oIiIpOwotI2Vsc2UKLSNpZmRlZiBOT1BVU0gKLSAgICAgICAgcmV0 dXJuKCIiKTsKLSNlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyIGVkaXRv cHRzW107Ci0gICAgICAgICAgICByZXR1cm4oZWRpdG9wdHNbMF0gPyAoY2hhciAqKWVkaXRvcHRz IDogIiIpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9QVVNIICovCi0jZW5kaWYgLyogTk9GUklM TFMgKi8KLQotICAgICAgY2FzZSBWTl9FREZJTEU6Ci0jaWZkZWYgTk9GUklMTFMKLSAgICAgICAg cmV0dXJuKCIiKTsKLSNlbHNlCi0jaWZkZWYgTk9QVVNICi0gICAgICAgIHJldHVybigiIik7Ci0j ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBleHRlcm4gY2hhciBlZGl0ZmlsZVtdOwotICAg ICAgICAgICAgcmV0dXJuKGVkaXRmaWxlWzBdID8gKGNoYXIgKillZGl0ZmlsZSA6ICIiKTsKLSAg ICAgICAgfQotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSNp ZmRlZiBCUk9XU0VSCi0gICAgICBjYXNlIFZOX0JST1dTUjogewotICAgICAgICAgIGV4dGVybiBj aGFyIGJyb3dzZXJbXTsKLSAgICAgICAgICBpZiAoIWJyb3dzZXJbMF0pIHsKLSAgICAgICAgICAg ICAgcyA9IGdldGVudigiQlJPV1NFUiIpOwotICAgICAgICAgICAgICBpZiAocykgY2tzdHJuY3B5 KGJyb3dzZXIscyxDS01BWFBBVEgpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4oYnJv d3NlclswXSA/IChjaGFyICopYnJvd3NlciA6ICIiKTsKLSAgICAgIH0KLSAgICAgIGNhc2UgVk5f QlJPUFQ6IHsKLSAgICAgICAgICBleHRlcm4gY2hhciBicm93c29wdHNbXTsKLSAgICAgICAgICBy ZXR1cm4oYnJvd3NvcHRzWzBdID8gKGNoYXIgKilicm93c29wdHMgOiAiIik7Ci0gICAgICB9Ci0g ICAgICBjYXNlIFZOX1VSTDogewotICAgICAgICAgIGV4dGVybiBjaGFyIGJyb3dzdXJsW107Ci0g ICAgICAgICAgcmV0dXJuKGJyb3dzdXJsWzBdID8gKGNoYXIgKilicm93c3VybCA6ICIiKTsKLSAg ICAgIH0KLSNlbmRpZiAvKiBCUk9XU0VSICovCi0gICAgICBjYXNlIFZOX0hFUkFMRDoKLSAgICAg ICAgcmV0dXJuKChjaGFyICopdmVyc2lvKTsKLQotICAgICAgY2FzZSBWTl9URVNUOiB7ICAgICAg ICAgICAgICAgICAgIC8qIHRlc3QgKi8KLSAgICAgICAgICBleHRlcm4gY2hhciAqIGNrX3NfdGVz dCwgKiBja19zX3R2ZXI7Ci0gICAgICAgICAgaWYgKCFja19zX3Rlc3QpIGNrX3NfdGVzdCA9ICIi OwotICAgICAgICAgIGlmICghY2tfc190dmVyKSBja19zX3R2ZXIgPSAiIjsKLSAgICAgICAgICBp ZiAoKmNrX3NfdGVzdCkgewotICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsY2tfc190ZXN0 LFZWQlVGTCk7Ci0gICAgICAgICAgICAgIGlmICgqY2tfc190dmVyKSB7Ci0gICAgICAgICAgICAg ICAgICBja3N0cm5jYXQodnZidWYsIi4iLFZWQlVGTCk7Ci0gICAgICAgICAgICAgICAgICBja3N0 cm5jYXQodnZidWYsY2tfc190dmVyLFZWQlVGTCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg ICB9IGVsc2UKLSAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiMCIsVlZCVUZMKTsKLSAgICAg ICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgICB9Ci0KLSNpZm5kZWYgTk9YRkVSCi0g ICAgICBjYXNlIFZOX1hGU1RBVDogICAgICAgICAgICAgICAgICAgLyogeGZlcnN0YXR1cyAqLwot ICAgICAgICB4ID0geGZlcnN0YXQ7ICAgICAgICAgICAgICAgICAgIC8qIExpa2Ugc3VjY2VzcyAq LwotICAgICAgICBpZiAoeCA+IC0xKSB4ID0gKHggPT0gMCkgPyAxIDogMDsgLyogRXh0ZXJuYWwg dmFsdWUgaXMgcmV2ZXJzZWQgKi8KLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLHgpOyAgICAg ICAgICAvKiBTQUZFICovCi0gICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLQotICAgICAg Y2FzZSBWTl9YRk1TRzogICAgICAgICAgICAgICAgICAgIC8qIHhmZXJtc2cgKi8KLSAgICAgICAg cmV0dXJuKChjaGFyICopZXBrdG1zZyk7Ci0KLSNpZm5kZWYgTk9NU0VORAotICAgICAgY2FzZSBW Tl9TTkRMOiB7ICAgICAgICAgICAgICAgICAgIC8qIHNlbmRsaXN0ICovCi0gICAgICAgICAgZXh0 ZXJuIGludCBmaWxlc2lubGlzdDsKLSAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsZmlsZXNp bmxpc3QpOyAvKiBTQUZFICovCi0gICAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOwotICAg ICAgfQotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVm IENLX1RSSUdHRVIKLSAgICAgIGNhc2UgVk5fVFJJRzogewotICAgICAgICAgIGV4dGVybiBjaGFy ICogdHJpZ2dlcnZhbDsKLSAgICAgICAgICByZXR1cm4odHJpZ2dlcnZhbCA/IHRyaWdnZXJ2YWwg OiAiIik7Ci0gICAgICB9Ci0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotI2lmZGVmIE9TMk1PVVNF Ci0jaWZkZWYgT1MyCi0gICAgICBjYXNlIFZOX01PVV9YOiB7Ci0gICAgICAgICAgZXh0ZXJuIGlu dCBNb3VzZUN1clg7Ci0gICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLE1vdXNlQ3VyWCk7IC8q IFNBRkUgKi8KLSAgICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgICB9Ci0gICAg ICBjYXNlIFZOX01PVV9ZOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCBNb3VzZUN1clk7Ci0gICAg ICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLE1vdXNlQ3VyWSk7IC8qIFNBRkUgKi8KLSAgICAgICAg ICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0jZW5k aWYgLyogT1MyTU9VU0UgKi8KLSAgICAgIGNhc2UgVk5fUFJJTlQ6IHsKLSAgICAgICAgICBleHRl cm4gaW50IHByaW50cGlwZTsKLSAgICAgICAgICBleHRlcm4gY2hhciAqIHByaW50ZXJuYW1lOwot I2lmZGVmIFBSSU5UU1dJCi0gICAgICAgICAgZXh0ZXJuIGludCBub3ByaW50ZXI7Ci0gICAgICAg ICAgaWYgKG5vcHJpbnRlcikgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBQUklOVFNXSSAqLwotICAg ICAgICAgIGNrbWFrbXNnKHZ2YnVmLFZWQlVGTCwKLSAgICAgICAgICAgICAgICAgICBwcmludHBp cGUgPyAifCIgOiAiIiwKLSAgICAgICAgICAgICAgICAgICBwcmludGVybmFtZSA/IHByaW50ZXJu YW1lIDoKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAiUFJOIiwKLSNlbHNlCi0gICAg ICAgICAgICAgICAgICAgIihkZWZhdWx0KSIsCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAg ICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICBOVUxMCi0gICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgICB9Ci0gICAgfSAv KiBCcmVhayB1cCBsb25nIHN3aXRjaCBzdGF0ZW1lbnRzLi4uICovCi0KLSAgICBzd2l0Y2goeSkg ewotICAgICAgY2FzZSBWTl9FU0M6ICAgICAgICAgICAgICAgICAgICAgIC8qIEVzY2FwZSBjaGFy YWN0ZXIgKi8KLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGVzY2FwZSk7ICAgICAvKiBTQUZF ICovCi0gICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLQotICAgICAgY2FzZSBWTl9JTlRJ TUU6Ci0gICAgICAgIHNwcmludGYodnZidWYsIiVsZCIsaW5ldGltZSk7ICAgLyogU0FGRSAqLwot ICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0KLSAgICAgIGNhc2UgVk5fSU5UTU86Ci0g ICAgICAgIHNwcmludGYodnZidWYsIiVkIixpbndhaXQpOyAgICAgLyogU0FGRSAqLwotICAgICAg ICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0KLSAgICAgIGNhc2UgVk5fU0VDVVJFOgotICAgICAg ICBpZiAoMAotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICAgICAgICAgIHx8IElTX1NTSCgpCi0jZW5k aWYgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgIHx8 IGNrX3RuX2VuY3J5cHRpbmcoKSAmJiBja190bl9kZWNyeXB0aW5nKCkKLSNlbmRpZiAvKiBDS19F TkNSWVBUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICB8fCB0bHNfYWN0aXZlX2Zs YWcgfHwgc3NsX2FjdGl2ZV9mbGFnCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAp Ci0gICAgICAgICAgcmV0dXJuKCIxIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4o IjAiKTsKLQotICAgICAgY2FzZSBWTl9BVVRITjoKLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgot ICAgICAgICB7Ci0gICAgICAgICAgICBleHRlcm4gY2hhciBzelVzZXJOYW1lQXV0aGVudGljYXRl ZFtdOwotICAgICAgICAgICAgcmV0dXJuKChjaGFyICopc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQp OwotICAgICAgICB9Ci0jZWxzZSAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotICAgICAgICByZXR1 cm4oKGNoYXIgKikiIik7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotICAgICAg Y2FzZSBWTl9BVVRIUzoKLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgICAgICBzd2l0Y2gg KGNrX3RuX2F1dGhfdmFsaWQoKSkgewotICAgICAgICAgIGNhc2UgQVVUSF9VTktOT1dOOgotICAg ICAgICAgICAgcmV0dXJuKChjaGFyICopInVua25vd24iKTsKLSAgICAgICAgICBjYXNlIEFVVEhf T1RIRVI6Ci0gICAgICAgICAgICByZXR1cm4oKGNoYXIgKikib3RoZXIiKTsKLSAgICAgICAgICBj YXNlIEFVVEhfVVNFUjoKLSAgICAgICAgICAgIHJldHVybigoY2hhciAqKSJ1c2VyIik7Ci0gICAg ICAgICAgY2FzZSBBVVRIX1ZBTElEOgotICAgICAgICAgICAgcmV0dXJuKChjaGFyICopInZhbGlk Iik7Ci0gICAgICAgICAgY2FzZSBBVVRIX1JFSkVDVDoKLSAgICAgICAgICBkZWZhdWx0OgotICAg ICAgICAgICAgcmV0dXJuKChjaGFyICopInJlamVjdGVkIik7Ci0gICAgICAgIH0KLSNlbHNlIC8q IENLX0FVVEhFTlRJQ0FUSU9OICovCi0gICAgICAgIHJldHVybigoY2hhciAqKSJyZWplY3RlZCIp OwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0KLSAgICAgIGNhc2UgVk5fQVVUSFQ6 Ci0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgaWYgKChz c2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSAmJgotICAgICAgICAgICAgY2tfdG5f YXV0aF92YWxpZCgpID09IEFVVEhfVkFMSUQgJiYKLSAgICAgICAgICAgIChzc3RlbG5ldCA/ICgh VEVMT1BUX1UoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSkgOgotICAgICAgICAgICAgICAgICAgICAg ICAgKCFURUxPUFRfTUUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSkpIHx8Ci0gICAgICAgICAgICAg Y2tfdG5fYXV0aGVudGljYXRlZCgpID09IEFVVEhUWVBFX05VTEwgfHwKLSAgICAgICAgICAgICBj a190bl9hdXRoZW50aWNhdGVkKCkgPT0gQVVUSFRZUEVfQVVUTykKLSAgICAgICAgICByZXR1cm4o IlhfNTA5X0NFUlRJRklDQVRFIik7Ci0gICAgICAgIGVsc2UKLSNlbmRpZiAvKiBDS19TU0wgKi8K LSAgICAgICAgICByZXR1cm4oQVVUSFRZUEVfTkFNRShja190bl9hdXRoZW50aWNhdGVkKCkpKTsK LSNlbHNlIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0gICAgICAgIHJldHVybigoY2hhciAqKSJO VUxMIik7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotI2lmZGVmIENLX0tFUkJF Uk9TCi0gICAgICBjYXNlIFZOX0s0UFJOOiB7Ci0gICAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI0 X2RfcHJpbmNpcGFsOwotICAgICAgICAgIGlmIChrcmI0X2RfcHJpbmNpcGFsKQotICAgICAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLGtyYjRfZF9wcmluY2lwYWwsVlZCVUZMKzEpOwotICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgICp2dmJ1ZiA9IE5VTDsKLSAgICAgICAgICByZXR1cm4oKGNoYXIg Kil2dmJ1Zik7Ci0gICAgICB9Ci0gICAgICBjYXNlIFZOX0s1UFJOOiB7Ci0gICAgICAgICAgZXh0 ZXJuIGNoYXIgKiBrcmI1X2RfcHJpbmNpcGFsOwotICAgICAgICAgIGlmIChrcmI1X2RfcHJpbmNp cGFsKQotICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLGtyYjVfZF9wcmluY2lwYWwsVlZCVUZM KzEpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICp2dmJ1ZiA9IE5VTDsKLSAgICAgICAg ICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgICB9Ci0gICAgICBjYXNlIFZOX0s0UkxNOiB7 Ci0gICAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI0X2RfcmVhbG07Ci0gICAgICAgICAgaWYgKGty YjRfZF9yZWFsbSkgewotICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsa3JiNF9kX3JlYWxt LFZWQlVGTCsxKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBjaGFyICogcyA9 IGNrX2tyYjRfZ2V0cmVhbG0oKTsKLSAgICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHMgPyBz IDogIiIsVlZCVUZMKzEpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4oKGNoYXIgKil2 dmJ1Zik7Ci0gICAgICB9Ci0gICAgICBjYXNlIFZOX0s0U1JWOiB7Ci0gICAgICAgICAgZXh0ZXJu IGNoYXIgKiBrcmI0X2Rfc3J2OwotICAgICAgICAgIGlmIChrcmI0X2Rfc3J2KQotICAgICAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLGtyYjRfZF9zcnYsVlZCVUZMKzEpOwotICAgICAgICAgIGVsc2UK LSAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwicmNtZCIsVlZCVUZMKTsKLSAgICAgICAgICBy ZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgICB9Ci0gICAgICBjYXNlIFZOX0s1UkxNOiB7Ci0g ICAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2RfcmVhbG07Ci0gICAgICAgICAgZXh0ZXJuIGNo YXIgKiBrcmI1X2RfY2M7Ci0gICAgICAgICAgaWYgKGtyYjVfZF9yZWFsbSkgewotICAgICAgICAg ICAgICBja3N0cm5jcHkodnZidWYsa3JiNV9kX3JlYWxtLFZWQlVGTCsxKTsKLSAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICBjaGFyICogcyA9IGNrX2tyYjVfZ2V0cmVhbG0oa3JiNV9k X2NjKTsKLSAgICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHMsVlZCVUZMKzEpOwotICAgICAg ICAgIH0KLSAgICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgICB9Ci0gICAgICBj YXNlIFZOX0s1Q0M6IHsKLSAgICAgICAgICBleHRlcm4gY2hhciAqIGtyYjVfZF9jYzsKLSAgICAg ICAgICBpZiAoa3JiNV9kX2NjKQotICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLGtyYjVfZF9j YyxWVkJVRkwrMSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVm LGNrX2tyYjVfZ2V0X2NjX25hbWUoKSxWVkJVRkwrMSk7Ci0gICAgICAgICAgcmV0dXJuKChjaGFy ICopdnZidWYpOwotICAgICAgfQotICAgICAgY2FzZSBWTl9LNVNSVjogewotICAgICAgICAgIGV4 dGVybiBjaGFyICoga3JiNV9kX3NydjsKLSAgICAgICAgICBpZiAoa3JiNV9kX3NydikKLSAgICAg ICAgICAgIGNrc3RybmNweSh2dmJ1ZixrcmI1X2Rfc3J2LFZWQlVGTCsxKTsKLSAgICAgICAgICBl bHNlCi0gICAgICAgICAgICBja3N0cm5jcHkodnZidWYsImhvc3QiLFZWQlVGTCk7Ci0gICAgICAg ICAgcmV0dXJuKChjaGFyICopdnZidWYpOwotICAgICAgfQotICAgICAgY2FzZSBWTl9LNEVOTzog ewotICAgICAgICBleHRlcm4gaW50IGtyYjRfZXJybm87Ci0gICAgICAgIHNwcmludGYodnZidWYs IiVkIixrcmI0X2Vycm5vKTsgLyogU0FGRSAqLwotICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1 Zik7Ci0gICAgICB9Ci0gICAgICBjYXNlIFZOX0s1RU5POiB7Ci0gICAgICAgIGV4dGVybiBpbnQg a3JiNV9lcnJubzsKLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGtyYjVfZXJybm8pOyAvKiBT QUZFICovCi0gICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIH0KLSAgICAgIGNh c2UgVk5fSzRFTVNHOiB7Ci0gICAgICAgIGV4dGVybiBjaGFyICoga3JiNF9lcnJtc2c7Ci0gICAg ICAgIGNrc3RybmNweSh2dmJ1ZixrcmI0X2Vycm1zZz9rcmI0X2Vycm1zZzoiIixWVkJVRkwrMSk7 Ci0gICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIH0KLSAgICAgIGNhc2UgVk5f SzVFTVNHOiB7Ci0gICAgICAgIGV4dGVybiBjaGFyICoga3JiNV9lcnJtc2c7Ci0gICAgICAgIGNr c3RybmNweSh2dmJ1ZixrcmI1X2Vycm1zZyxWVkJVRkwrMSk7Ci0gICAgICAgIHJldHVybigoY2hh ciAqKXZ2YnVmKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2lmZGVmIENL X1NTTAotICAgICAgY2FzZSBWTl9YNTA5X1M6Ci0gICAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcp Ci0gICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHNzbF9nZXRfc3ViamVjdF9uYW1lKHNzbF9jb24p LFZWQlVGTCsxKTsKLSAgICAgICAgZWxzZSBpZiAodGxzX2FjdGl2ZV9mbGFnKQotICAgICAgICAg IGNrc3RybmNweSh2dmJ1Zixzc2xfZ2V0X3N1YmplY3RfbmFtZSh0bHNfY29uKSxWVkJVRkwrMSk7 Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBja3N0cm5jcHkodnZidWYsIiIsVlZCVUZMKzEpOwot ICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgICBjYXNlIFZOX1g1MDlfSToKLSAg ICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZykKLSAgICAgICAgICBja3N0cm5jcHkodnZidWYsc3Ns X2dldF9pc3N1ZXJfbmFtZShzc2xfY29uKSxWVkJVRkwrMSk7Ci0gICAgICAgIGVsc2UgaWYgKHRs c19hY3RpdmVfZmxhZykKLSAgICAgICAgICBja3N0cm5jcHkodnZidWYsc3NsX2dldF9pc3N1ZXJf bmFtZSh0bHNfY29uKSxWVkJVRkwrMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBja3N0cm5j cHkodnZidWYsIiIsVlZCVUZMKzEpOwotICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0j ZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICAgIGNhc2UgVk5fT1NOQU06Ci0jaWZkZWYgSUtTRAot I2lmZGVmIENLX0xPR0lOCi0gICAgICAgIGlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KQotICAgICAg ICAgIHJldHVybigiIik7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNlbmRpZiAvKiBJS1NEICov Ci0jaWZkZWYgQ0tfVVRTTkFNRQotICAgICAgICB7Ci0gICAgICAgICAgICBleHRlcm4gY2hhciB1 bm1fbmFtW107Ci0gICAgICAgICAgICByZXR1cm4oKGNoYXIgKil1bm1fbmFtKTsKLSAgICAgICAg fQotI2Vsc2UKLSAgICAgICAgZm9yICh4ID0geSA9IDA7IHggPCBWVkJVRkw7IHgrKykgewotICAg ICAgICAgICAgaWYgKGNreHN5c1t4XSA9PSBTUCAmJiBjeCA9PSAwKSBjb250aW51ZTsKLSAgICAg ICAgICAgIHZ2YnVmW3krK10gPSAoY2hhcikgKChja3hzeXNbeF0gPT0gU1ApID8gJ18nIDogY2t4 c3lzW3hdKTsKLSAgICAgICAgfQotICAgICAgICB2dmJ1Zlt5XSA9IE5VTDsKLSAgICAgICAgcmV0 dXJuKHZ2YnVmKTsKLSNlbmRpZiAvKiBDS19VVFNOQU1FICovCi0KLSAgICAgIGNhc2UgVk5fT1NW RVI6IHsKLSNpZmRlZiBDS19VVFNOQU1FCi0gICAgICAgICAgZXh0ZXJuIGNoYXIgdW5tX3Zlcltd OwotI2lmZGVmIElLU0QKLSNpZmRlZiBDS19MT0dJTgotICAgICAgICAgIGlmIChpbnNlcnZlciAm JiBpc2d1ZXN0KQotICAgICAgICAgICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAq LwotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgICByZXR1cm4oKGNoYXIgKil1bm1fdmVyKTsK LSNlbHNlCi0gICAgICAgICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBDS19VVFNOQU1FICovCi0g ICAgICB9Ci0KLSAgICAgIGNhc2UgVk5fT1NSRUw6IHsKLSNpZmRlZiBDS19VVFNOQU1FCi0gICAg ICAgICAgZXh0ZXJuIGNoYXIgdW5tX3JlbFtdOwotI2lmZGVmIElLU0QKLSNpZmRlZiBDS19MT0dJ TgotICAgICAgICAgIGlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KQotICAgICAgICAgICAgcmV0dXJu KCIiKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAg ICByZXR1cm4oKGNoYXIgKil1bm1fcmVsKTsKLSNlbHNlCi0gICAgICAgICAgcmV0dXJuKCIiKTsK LSNlbmRpZiAvKiBDS19VVFNOQU1FICovCi0gICAgICB9Ci0gICAgfSAvKiBCcmVhayB1cCBsb25n IHN3aXRjaCBzdGF0ZW1lbnRzLi4uICovCi0KLSAgICBzd2l0Y2goeSkgewotICAgICAgY2FzZSBW Tl9OQU1FOiB7Ci0gICAgICAgICAgZXh0ZXJuIGNoYXIgKiBteW5hbWU7Ci0gICAgICAgICAgcmV0 dXJuKG15bmFtZSk7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgVk5fTU9ETDogewotI2lmZGVmIENL X1VUU05BTUUKLSAgICAgICAgICBleHRlcm4gY2hhciB1bm1fbW9kW10sIHVubV9tY2hbXTsKLSAg ICAgICAgICBpbnQgeSA9IFZWQlVGTCAtIDE7Ci0gICAgICAgICAgY2hhciAqIHMgPSB1bm1fbW9k OwotI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KLSNpZmRlZiBJS1NECi0jaWZkZWYgQ0tfTE9HSU4K LSAgICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgaXNndWVzdCkKLSAgICAgICAgICAgIHJldHVybigi Iik7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0KLSNpZmRlZiBD T01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3YXMgSFBVWCAqLwotICAgICAgICAg IGlmICghdW5tX21vZFswXSAmJiAhbm9wdXNoKQotICAgICAgICAgICAgenpzdHJpbmcoIlxcZmNv bW1hbmQobW9kZWwpIiwmcywmeSk7Ci0vKgotICAgQW5vdGhlciBwb3NzaWJpbGl0eSB3b3VsZCBi ZToKLSAgICAgIlxcZmNvbW1hbmQoa3NoIC1jICd3aGVuY2UgbW9kZWwgMT4mLSAmJiBtb2RlbCB8 fCB1bmFtZSAtbScpIgotICAgQnV0IHRoYXQgd291bGQgZGVwZW5kIG9uIGhhdmluZyBrc2guCi0q LwotI2Vsc2UKLSNpZmRlZiBPU0YzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaWdp dGFsIFVOSVggMy4yIGFuZCBoaWdoZXIuLi4gKi8KLS8qIE5vdGU6IFVsdHJpeCBoYXMgL2V0Yy9z aXplciwgYnV0IGl0IGlzIG5vdCBwdWJsaWNseSBleGVjdXRhYmxlLiAqLwotLyogc2l6ZXIgLWMg b3V0cHV0cyAnY3B1Ojx0YWI+PHRhYj4iREVDeHh4eCInICovCi0gICAgICAgICAgaWYgKCF1bm1f bW9kWzBdKSB7Ci0gICAgICAgICAgICAgIGNoYXIgKiBwOwotICAgICAgICAgICAgICBpbnQgZmxh ZyA9IDA7Ci0gICAgICAgICAgICAgIHp6c3RyaW5nKCJcXGZjb21tYW5kKC91c3Ivc2Jpbi9zaXpl ciAtYykiLCZzLCZ5KTsKLSAgICAgICAgICAgICAgZGVidWcoRjExMCwiRFUgbW9kZWwiLHVubV9t b2QsMCk7Ci0gICAgICAgICAgICAgIHMgPSB1bm1fbW9kOwotICAgICAgICAgICAgICBwID0gdW5t X21vZDsKLSAgICAgICAgICAgICAgd2hpbGUgKCpwKSB7ICAgICAgICAgICAgICAvKiBFeHRyYWN0 IHRoZSBwYXJ0IGluIHF1b3RlcyAqLwotICAgICAgICAgICAgICAgICAgaWYgKCpwID09ICciJykg ewotICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFnKQotICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDE7Ci0gICAgICAgICAgICAg ICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgaWYgKGZsYWcpCi0gICAgICAgICAgICAgICAg ICAgICpzKysgPSAqcDsKLSAgICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAqcyA9IE5VTDsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogT1NGMzIgKi8K LSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBDS19VVFNOQU1FCi0gICAgICAgICAgaWYg KHVubV9tb2RbMF0pCi0gICAgICAgICAgICByZXR1cm4oKGNoYXIgKil1bm1fbW9kKTsKLSAgICAg ICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4oKGNoYXIgKil1bm1fbWNoKTsKLSNlbHNlCi0g ICAgICAgICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBDS19VVFNOQU1FICovCi0gICAgICB9Ci0K LSNpZmRlZiBJQk1YMjUKLSAgICAgIC8qIFguMjUgdmFyaWFibGVzIChsb2NhbCBhbmQgcmVtb3Rl IGFkZHJlc3MpICovCi0gICAgICBjYXNlIFZOX1gyNUxBOgotICAgICAgICBpZiAoIWxvY2FsX251 YVswXSAmJiAheDI1bG9jYWxfbnVhKGxvY2FsX251YSkpCi0gICAgICAgICAgKnZ2YnVmID0gTlVM TDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNrc3RybmNweSh2dmJ1Zixsb2NhbF9udWEsVlZC VUZMKzEpOwotICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0KLSAgICAgIGNhc2UgVk5f WDI1UkE6Ci0gICAgICAgIGlmICghcmVtb3RlX251YVswXSkKLSAgICAgICAgICAqdnZidWYgPSBO VUxMOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHJlbW90ZV9udWEs VlZCVUZMKzEpOwotICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0jZW5kaWYgLyogSUJN WDI1ICovCi0KLSNpZm5kZWYgTk9ESUFMCi0gICAgICBjYXNlIFZOX1BEU0ZYOiB7Ci0gICAgICAg ICAgZXh0ZXJuIGNoYXIgcGRzZnhbXTsKLSAgICAgICAgICByZXR1cm4oKGNoYXIgKilwZHNmeCk7 Ci0gICAgICB9Ci0gICAgICBjYXNlIFZOX0RUWVBFOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCBk aWFsdHlwZTsKLSAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsZGlhbHR5cGUpOyAvKiBTQUZF ICovCi0gICAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOwotICAgICAgfQotI2VuZGlmIC8q IE5PRElBTCAqLwotCi0jaWZkZWYgVU5JWAotICAgICAgY2FzZSBWTl9MQ0tQSUQ6IHsKLSAgICAg ICAgICBleHRlcm4gY2hhciBsb2NrcGlkW107Ci0gICAgICAgICAgcmV0dXJuKChjaGFyICopbG9j a3BpZCk7Ci0gICAgICB9Ci0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAg ICAgY2FzZSBWTl9CTEs6Ci0gICAgICAgIHNwcmludGYodnZidWYsIiVkIixiY3RyKTsgICAgICAg LyogU0FGRSAqLwotICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0KLSAgICAgIGNhc2Ug Vk5fVEZUSU06Ci0gICAgICAgIHNwcmludGYodnZidWYsICAgICAgICAgICAgICAgICAgLyogU0FG RSAqLwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgICAgICAiJWxkIiwgKGxvbmcpKGZwdHNl Y3MgKyAwLjUpCi0jZWxzZQotICAgICAgICAgICAgICAgICIlZCIsIHRzZWNzCi0jZW5kaWYgLyog R0ZUSU1FUiAqLwotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHJldHVybigoY2hhciAqKXZ2 YnVmKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotICAgICAgY2FzZSBWTl9IV1BBUjoKLSAgICAg IGNhc2UgVk5fU0VSSUFMOiB7Ci0gICAgICAgICAgaW50IHNiOwotICAgICAgICAgIGNoYXIgYywg KiBzczsKLSAgICAgICAgICBleHRlcm4gaW50IHN0b3BiaXRzOwotICAgICAgICAgIHZ2YnVmWzBd ID0gTlVMOwotICAgICAgICAgIGlmIChod3Bhcml0eSAmJiBsb2NhbCAmJiAhbmV0d29yaykKLSAg ICAgICAgICAgIHNzID0gcGFybmFtKChjaGFyKWh3cGFyaXR5KTsKLSAgICAgICAgICBlbHNlCi0g ICAgICAgICAgICBzcyA9IHBhcm5hbSgoY2hhcilwYXJpdHkpOwotICAgICAgICAgIGlmIChjeCA9 PSBWTl9IV1BBUikgewotICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsc3MsVlZCVUZMKTsK LSAgICAgICAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOwotICAgICAgICAgIH0KLSAgICAg ICAgICBjID0gc3NbMF07Ci0gICAgICAgICAgaWYgKGlzbG93ZXIoYykpIGMgPSB0b3VwcGVyKGMp OwotICAgICAgICAgIHNiID0gc3RvcGJpdHM7Ci0gICAgICAgICAgaWYgKHNiIDwgMSkKLSAgICAg ICAgICAgIHNiID0gKHNwZWVkID4gMCAmJiBzcGVlZCA8PSAxMTBMKSA/IDIgOiAxOwotICAgICAg ICAgIGlmIChod3Bhcml0eSkKLSAgICAgICAgICAgIHNwcmludGYodnZidWYsIiA4JWMlZCIsYyxz Yik7IC8qIFNBRkUgKi8KLSAgICAgICAgICBlbHNlIGlmIChwYXJpdHkpCi0gICAgICAgICAgICBz cHJpbnRmKHZ2YnVmLCIgNyVjJWQiLGMsc2IpOyAvKiBTQUZFICovCi0gICAgICAgICAgZWxzZQot ICAgICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiIDhOJWQiLHNiKTsgIC8qIFNBRkUgKi8KLSAgICAg ICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgICB9Ci0KLSNpZmRlZiBVTklYCi0gICAg ICBjYXNlIFZOX0xDS0RJUjogewotI2lmbmRlZiBOT1VVQ1AKLSAgICAgICAgICBleHRlcm4gY2hh ciAqIHV1Y3Bsb2NrZGlyOwotICAgICAgICAgIGNrc3RybmNweSh2dmJ1Zix1dWNwbG9ja2RpcixW VkJVRkwpOwotICAgICAgICAgIHggPSBzdHJsZW4odnZidWYpOwotICAgICAgICAgIGlmICh4ID4g MCkgewotICAgICAgICAgICAgICBpZiAodnZidWZbeC0xXSAhPSAnLycpIHsKLSAgICAgICAgICAg ICAgICAgIHZ2YnVmW3hdID0gJy8nOwotICAgICAgICAgICAgICAgICAgdnZidWZbeCsxXSA9IE5V TDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgdnZidWZb MF0gPSBOVUw7Ci0jZW5kaWYgLyogTk9VVUNQICovCi0gICAgICAgICAgcmV0dXJuKChjaGFyICop dnZidWYpOwotICAgICAgfQotI2VuZGlmIC8qIFVOSVggKi8KLSAgICB9IC8qIEJyZWFrIHVwIGxv bmcgc3dpdGNoIHN0YXRlbWVudHMuLi4gKi8KLQotICAgIHN3aXRjaCh5KSB7Ci0jaWZuZGVmIE5P RElBTAotICAgICAgY2FzZSBWTl9ETV9MUDoKLSAgICAgIGNhc2UgVk5fRE1fU1A6Ci0gICAgICBj YXNlIFZOX0RNX1BEOgotICAgICAgY2FzZSBWTl9ETV9URDoKLSAgICAgIGNhc2UgVk5fRE1fV0E6 Ci0gICAgICBjYXNlIFZOX0RNX1dEOgotICAgICAgY2FzZSBWTl9ETV9IRjoKLSAgICAgIGNhc2Ug Vk5fRE1fV0I6Ci0gICAgICBjYXNlIFZOX0RNX1JDOiB7Ci0gICAgICAgICAgZXh0ZXJuIGNoYXIg KiBnZXRkbSgpOwotICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZixnZXRkbSh5KSxWVkJVRkwpOwot ICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBOT0RJ QUwgKi8KLQotICAgICAgY2FzZSBWTl9UWV9MTjoKLSAgICAgIGNhc2UgVk5fVFlfTEM6IHsKLSAg ICAgICAgICBleHRlcm4gaW50IHR5cF9saW5lczsKLSAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIl ZCIsdHlwX2xpbmVzKTsgLyogU0FGRSAqLwotICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVm KTsKLSAgICAgIH0KLSAgICAgIGNhc2UgVk5fVFlfTE06IHsKLSAgICAgICAgICBleHRlcm4gaW50 IHR5cF9tdGNoczsKLSAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsdHlwX210Y2hzKTsgLyog U0FGRSAqLwotICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIH0KLSAgICAg IGNhc2UgVk5fTUFDTFZMOgotICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsbWFjbHZsKTsgICAg IC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOwotICAgIH0gLyogQnJl YWsgdXAgbG9uZyBzd2l0Y2ggc3RhdGVtZW50cy4uLiAqLwotCi0gICAgc3dpdGNoKHkpIHsKLSNp Zm5kZWYgTk9MQVNURklMRQotICAgICAgY2FzZSBWTl9MQVNURklMOiB7Ci0JICBleHRlcm4gY2hh ciAqIGxhc3RmaWxlOwotCSAgcmV0dXJuKGxhc3RmaWxlID8gbGFzdGZpbGUgOiAiIik7Ci0gICAg ICB9Ci0jZW5kaWYJLyogTk9MQVNURklMRSAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICAgIGNhc2Ug Vk5fWEZfQkM6Ci0gICAgICAgIHNwcmludGYodnZidWYsIiVkIixjcnVuY2hlZCk7ICAgLyogU0FG RSAqLwotICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0KLSAgICAgIGNhc2UgVk5fWEZf VE06Ci0gICAgICAgIHNwcmludGYodnZidWYsIiVkIix0aW1lb3V0cyk7ICAgLyogU0FGRSAqLwot ICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0KLSAgICAgIGNhc2UgVk5fWEZfUlg6Ci0g ICAgICAgIHNwcmludGYodnZidWYsIiVkIixyZXRyYW5zKTsgICAgLyogU0FGRSAqLwotICAgICAg ICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSAgICAgIGNh c2UgVk5fTVNfQ0Q6ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBzaWduYWxzICovCi0gICAg ICBjYXNlIFZOX01TX0NUUzoKLSAgICAgIGNhc2UgVk5fTVNfRFNSOgotICAgICAgY2FzZSBWTl9N U19EVFI6Ci0gICAgICBjYXNlIFZOX01TX1JJOgotICAgICAgY2FzZSBWTl9NU19SVFM6IHsKLSAg ICAgICAgICBpbnQgeCwgeiA9IC0xOwotICAgICAgICAgIHggPSB0dGdtZG0oKTsgICAgICAgICAg ICAgICAgIC8qIFRyeSB0byBnZXQgdGhlbSAqLwotICAgICAgICAgIGlmICh4ID4gLTEpIHsKLSAg ICAgICAgICAgICAgc3dpdGNoICh5KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWTl9NU19DRDog IHogPSAoeCAmIEJNX0RDRCkgPyAxIDogMDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBW Tl9NU19EU1I6IHogPSAoeCAmIEJNX0RTUikgPyAxIDogMDsgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgY2FzZSBWTl9NU19DVFM6IHogPSAoeCAmIEJNX0NUUykgPyAxIDogMDsgYnJlYWs7Ci0jaWZk ZWYgTUFDCi0gICAgICAgICAgICAgICAgY2FzZSBWTl9NU19EVFI6IHogPSAoeCAmIEJNX0RUUikg PyAxIDogMDsgYnJlYWs7Ci0jZWxzZQotI2lmbmRlZiBTVFJBVFVTCi0gICAgICAgICAgICAgICAg Y2FzZSBWTl9NU19SSTogIHogPSAoeCAmIEJNX1JORykgPyAxIDogMDsgYnJlYWs7Ci0jaWZuZGVm IE5UCi0gICAgICAgICAgICAgICAgY2FzZSBWTl9NU19EVFI6IHogPSAoeCAmIEJNX0RUUikgPyAx IDogMDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBWTl9NU19SVFM6IHogPSAoeCAmIEJN X1JUUykgPyAxIDogMDsgYnJlYWs7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBTVFJBVFVT ICovCi0jZW5kaWYgLyogTUFDICovCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAg ICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLHopOyAgICAgICAgLyogU0FGRSAqLwotICAgICAgICAg IHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIH0KLSAgICAgIGNhc2UgVk5fTUFUQ0g6ICAg ICAgICAgICAgICAgICAgICAvKiBJTlBVVCBNQVRDSCAqLwotICAgICAgICByZXR1cm4oaW5wbWF0 Y2ggPyBpbnBtYXRjaCA6ICIiKTsKLQotI2lmZGVmIENLRkxPQVQKLSAgICAgIGNhc2UgVk5fSVND QUxFOgkJCS8qIElOUFVUIFNDQUxFLUZBQ1RPUiAqLwotICAgICAgICByZXR1cm4oaW5wc2NhbGUg PyBpbnBzY2FsZSA6ICIxLjAiKTsKLSNlbmRpZgkvKiBDS0ZMT0FUICovCi0KLSAgICAgIGNhc2Ug Vk5fU0xNU0c6IHsgICAgICAgICAgICAgICAgICAvKiBTRVQgTElORSAvIEhPU1QgbWVzc2FnZSAq LwotICAgICAgICAgIGV4dGVybiBjaGFyICogc2xtc2c7Ci0gICAgICAgICAgdnZidWZbMF0gPSBO VUw7Ci0gICAgICAgICAgaWYgKHNsbXNnKQotICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHNs bXNnLFZWQlVGTCk7Ci0gICAgICAgICByZXR1cm4odnZidWYpOwotICAgICAgfQotCi0gICAgICBj YXNlIFZOX1RYVERJUjogICAgICAgICAgICAgICAgICAgLyogVEVYVERJUiAqLwotICAgICAgICBy ZXR1cm4oa19pbmZvX2RpciA/IGtfaW5mb19kaXIgOiAiIik7Ci0KLSNpZmRlZiBGTkZMT0FUCi0g ICAgICBjYXNlIFZOX01BX1BJOgotICAgICAgICByZXR1cm4obWF0aF9waSk7Ci0KLSAgICAgIGNh c2UgVk5fTUFfRToKLSAgICAgICAgcmV0dXJuKG1hdGhfZSk7Ci0KLSAgICAgIGNhc2UgVk5fTUFf UFI6Ci0gICAgICAgIHNwcmludGYodnZidWYsIiVkIixmcF9kaWdpdHMpOyAgLyogU0FGRSAqLwot ICAgICAgICByZXR1cm4odnZidWYpOwotI2VuZGlmIC8qIEZORkxPQVQgKi8KLQotICAgICAgY2Fz ZSBWTl9DTURCTDoKLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLENNREJMKTsgICAgICAvKiBT QUZFICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0KLSNpZmRlZiBDS0NIQU5ORUxJTwotICAg ICAgY2FzZSBWTl9GRVJSOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCB6X2Vycm9yOwotICAgICAg ICAgIHNwcmludGYodnZidWYsIiVkIix6X2Vycm9yKTsgIC8qIFNBRkUgKi8KLSAgICAgICAgICBy ZXR1cm4odnZidWYpOwotICAgICAgfQotICAgICAgY2FzZSBWTl9GTUFYOiB7Ci0gICAgICAgICAg ZXh0ZXJuIGludCB6X21heGNoYW47Ci0gICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLHpfbWF4 Y2hhbik7IC8qIFNBRkUgKi8KLSAgICAgICAgICByZXR1cm4odnZidWYpOwotICAgICAgfQotICAg ICAgY2FzZSBWTl9GQ09VOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCB6X2ZpbGNvdW50OwotICAg ICAgICAgIHNwcmludGYodnZidWYsIiVkIix6X2ZpbGNvdW50KTsgLyogU0FGRSAqLwotICAgICAg ICAgIHJldHVybih2dmJ1Zik7Ci0gICAgICB9Ci0jZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KLQot I2lmbmRlZiBOT0RJQUwKLSAgICAgIGNhc2UgVk5fRFJUUjogewotICAgICAgICAgIGV4dGVybiBp bnQgZGlhbGNvdW50OwotICAgICAgICAgIHNwcmludGYodnZidWYsIiVkIixkaWFsY291bnQpOyAv KiBTQUZFICovCi0gICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBO T0RJQUwgKi8KLQotI2lmbmRlZiBOT0xPR0RJQUwKLSNpZm5kZWYgTk9MT0NBTAotICAgICAgY2Fz ZSBWTl9DWFRJTUU6Ci0gICAgICAgIHNwcmludGYodnZidWYsIiVsZCIsZG9sb2dzaG93KDApKTsg LyogU0FGRSAqLwotICAgICAgICByZXR1cm4odnZidWYpOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8K LSNlbmRpZiAvKiBOT0xPR0RJQUwgKi8KLQotICAgICAgY2FzZSBWTl9CWVRFOgotICAgICAgICBz cHJpbnRmKHZ2YnVmLCIlZCIsYnl0ZW9yZGVyKTsgIC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJu KHZ2YnVmKTsKLQotICAgICAgY2FzZSBWTl9LQkNIQVI6Ci0gICAgICAgIHZ2YnVmWzBdID0gTlVM OwotICAgICAgICB2dmJ1ZlsxXSA9IE5VTDsKLSAgICAgICAgaWYgKGtiY2hhciA+IDApCi0gICAg ICAgICAgdnZidWZbMF0gPSAoa2JjaGFyICYgMHhmZik7Ci0gICAgICAgIHJldHVybih2dmJ1Zik7 Ci0KLSAgICAgIGNhc2UgVk5fVFRZTkFNOiB7Ci0jaWZkZWYgSEFWRUNUVE5BTQotICAgICAgICAg IGV4dGVybiBjaGFyIGN0dG5hbVtdOwotICAgICAgICAgIHJldHVybigoY2hhciAqKWN0dG5hbSk7 Ci0jZWxzZQotICAgICAgICAgIHJldHVybihDVFROQU0pOwotI2VuZGlmIC8qIEhBVkVDVFROQU0g Ki8KLSAgICAgIH0KLQotICAgICAgY2FzZSBWTl9QUk9NUFQ6Ci0gICAgICAgIHJldHVybihjbWdl dHAoKSk7Ci0KLSAgICAgIGNhc2UgVk5fQlVJTEQ6IHsKLSAgICAgICAgICBleHRlcm4gY2hhciAq IGJ1aWxkaWQ7Ci0gICAgICAgICAgcmV0dXJuKGJ1aWxkaWQpOwotICAgICAgfQotCi0jaWZuZGVm IE5PU0VYUAotICAgICAgY2FzZSBWTl9TRVhQOiB7Ci0gICAgICAgICAgZXh0ZXJuIGNoYXIgKiBs YXN0c2V4cDsKLSAgICAgICAgICByZXR1cm4obGFzdHNleHAgPyBsYXN0c2V4cCA6ICIiKTsKLSAg ICAgIH0KLSAgICAgIGNhc2UgVk5fVlNFWFA6IHsKLSAgICAgICAgICBleHRlcm4gY2hhciAqIHNl eHB2YWw7Ci0gICAgICAgICAgcmV0dXJuKHNleHB2YWwgPyBzZXhwdmFsIDogIiIpOwotICAgICAg fQotICAgICAgY2FzZSBWTl9MU0VYUDogewotICAgICAgICAgIGV4dGVybiBpbnQgc2V4cGRlcDsK LSAgICAgICAgICBja3N0cm5jcHkodnZidWYsY2tpdG9hKHNleHBkZXApLFZWQlVGTCk7Ci0gICAg ICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBOT1NFWFAgKi8KLQotI2lm ZGVmIEdGVElNRVIKLSAgICAgIGNhc2UgVk5fRlRJTUU6IHsKLSAgICAgICAgICBDS0ZMT0FUIGY7 Ci0gICAgICAgICAgenRpbWUoJnApOwotICAgICAgICAgIGlmIChwID09IE5VTEwgfHwgKnAgPT0g TlVMKQotICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgICAgICAgIHogPSBhdG9sKHArMTEp ICogMzYwMEwgKyBhdG9sKHArMTQpICogNjBMICsgYXRvbChwKzE3KTsKLSAgICAgICAgICBmID0g KENLRkxPQVQpeiArICgoQ0tGTE9BVCl6dHVzZWMpIC8gMTAwMDAwMC4wOwotICAgICAgICAgIHNw cmludGYodnZidWYsIiVmIixmKTsgICAgICAgIC8qIFNBRkUgKi8KLSAgICAgICAgICByZXR1cm4o dnZidWYpOwotICAgICAgfQotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotI2lmbmRlZiBOT0hUVFAK LSAgICAgIGNhc2UgVk5fSFRUUF9DOiB7ICAgICAgICAgICAgICAgICAvKiBIVFRQIENvZGUgKi8K LSAgICAgICAgICBleHRlcm4gaW50IGh0dHBfY29kZTsKLSAgICAgICAgICByZXR1cm4oY2tpdG9h KGh0dHBfY29kZSkpOwotICAgICAgfQotICAgICAgY2FzZSBWTl9IVFRQX046ICAgICAgICAgICAg ICAgICAgIC8qIEhUVFAgQ29ubmVjdGVkICovCi0gICAgICAgIHJldHVybiggaHR0cF9pc2Nvbm5l Y3RlZCgpID8gIjEiIDogIjAiKTsKLSAgICAgIGNhc2UgVk5fSFRUUF9IOiAgICAgICAgICAgICAg ICAgICAvKiBIVFRQIEhvc3QgKi8KLSAgICAgICAgcmV0dXJuKCAoY2hhciAqKWh0dHBfaG9zdCgp ICk7Ci0gICAgICBjYXNlIFZOX0hUVFBfTTogeyAgICAgICAgICAgICAgICAgLyogSFRUUCBNZXNz YWdlICovCi0gICAgICAgICAgZXh0ZXJuIGNoYXIgaHR0cF9yZXBseV9zdHJbXTsKLSAgICAgICAg ICByZXR1cm4oKGNoYXIgKilodHRwX3JlcGx5X3N0cik7Ci0gICAgICB9Ci0gICAgICBjYXNlIFZO X0hUVFBfUzogICAgICAgICAgICAgICAgICAgLyogSFRUUCBTZWN1cml0eSAqLwotICAgICAgICBy ZXR1cm4oKGNoYXIgKilodHRwX3NlY3VyaXR5KCkpOwotI2VuZGlmIC8qIE5PSFRUUCAqLwotCi0j aWZkZWYgTkVXRlRQCi0gICAgICBjYXNlIFZOX0ZUUF9COgotICAgICAgICByZXR1cm4oKGNoYXIg KilmdHBfY3BsX21vZGUoKSk7Ci0gICAgICBjYXNlIFZOX0ZUUF9EOgotICAgICAgICByZXR1cm4o KGNoYXIgKilmdHBfZHBsX21vZGUoKSk7Ci0gICAgICBjYXNlIFZOX0ZUUF9aOgotICAgICAgICBy ZXR1cm4oKGNoYXIgKilmdHBfYXV0aHR5cGUoKSk7Ci0gICAgICBjYXNlIFZOX0ZUUF9DOiB7Ci0g ICAgICAgICAgZXh0ZXJuIGludCBmdHBjb2RlOwotICAgICAgICAgIHJldHVybihja2l0b2EoZnRw Y29kZSkpOwotICAgICAgfQotICAgICAgY2FzZSBWTl9GVFBfTTogewotICAgICAgICAgIGV4dGVy biBjaGFyIGZ0cF9yZXBseV9zdHJbXTsKLSAgICAgICAgICBpZiAoaXNkaWdpdChmdHBfcmVwbHlf c3RyWzBdKSAmJgotICAgICAgICAgICAgICBpc2RpZ2l0KGZ0cF9yZXBseV9zdHJbMV0pICYmCi0g ICAgICAgICAgICAgIGlzZGlnaXQoZnRwX3JlcGx5X3N0clsyXSkgJiYKLSAgICAgICAgICAgICAg ZnRwX3JlcGx5X3N0clszXSA9PSAnICcpCi0gICAgICAgICAgICByZXR1cm4oJmZ0cF9yZXBseV9z dHJbNF0pOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybihmdHBfcmVwbHlfc3Ry KTsKLSAgICAgIH0KLSAgICAgIGNhc2UgVk5fRlRQX1M6IHsKLSAgICAgICAgICBleHRlcm4gY2hh ciBmdHBfc3J2dHlwW107Ci0gICAgICAgICAgcmV0dXJuKChjaGFyICopZnRwX3NydnR5cCk7Ci0g ICAgICB9Ci0gICAgICBjYXNlIFZOX0ZUUF9IOiB7Ci0gICAgICAgICAgZXh0ZXJuIGNoYXIgKiBm dHBfaG9zdDsKLSAgICAgICAgICByZXR1cm4oZnRwX2hvc3QgPyBmdHBfaG9zdCA6ICIiKTsKLSAg ICAgIH0KLSAgICAgIGNhc2UgVk5fRlRQX1g6IHsgICAgICAgICAgICAgICAgICAvKiBGVFAgQ29u bmVjdGVkICovCi0gICAgICAgICAgcmV0dXJuKGZ0cGlzY29ubmVjdGVkKCkgPyAiMSIgOiAiMCIp OwotICAgICAgfQotICAgICAgY2FzZSBWTl9GVFBfTDogeyAgICAgICAgICAgICAgICAgIC8qIEZU UCBMb2dnZWQgaW4gKi8KLSAgICAgICAgICByZXR1cm4oZnRwaXNsb2dnZWRpbigpID8gIjEiIDog IjAiKTsKLSAgICAgIH0KLSAgICAgIGNhc2UgVk5fRlRQX0c6IHsgICAgICAgICAgICAgICAgICAv KiBGVFAgR0VULVBVVC1SRU1PVEUgKi8KLSAgICAgICAgICBleHRlcm4gaW50IGZ0cGdldDsKLSAg ICAgICAgICBjaGFyICogcyA9ICIiOwotICAgICAgICAgIHN3aXRjaCAoZnRwZ2V0KSB7Ci0gICAg ICAgICAgICBjYXNlIDA6IHMgPSAia2VybWl0IjsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDE6 IHMgPSAiZnRwIjsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6IHMgPSAiYXV0byI7IGJyZWFr OwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4ocyk7Ci0gICAgICB9Ci0jZW5kaWYgLyog TkVXRlRQICovCi0KLSNpZm5kZWYgTk9MT0NBTAotICAgICAgY2FzZSBWTl9DWF9TVEE6IHsgICAg ICAgICAgICAgICAgIC8qIENPTk5FQ1Qgc3RhdHVzICovCi0gICAgICAgICAgZXh0ZXJuIGludCBj eF9zdGF0dXM7Ci0gICAgICAgICAgcmV0dXJuKGNraXRvYShjeF9zdGF0dXMpKTsKLSAgICAgIH0K LSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgICBjYXNlIFZOX05PVzogICAgICAgICAgICAgICAg ICAgICAgLyogVGltZXN0YW1wICovCi0gICAgICAgIHJldHVybihja2N2dGRhdGUocCwwKSk7Ci0K LSAgICAgIGNhc2UgVk5fSE9VUjogICAgICAgICAgICAgICAgICAgICAvKiBIb3VyIG9mIHRoZSBk YXkgKi8KLSAgICAgICAgenRpbWUoJnApOyAgICAgICAgICAgICAgICAgICAgICAvKiAiVGh1IEZl YiAgOCAxMjowMDowMCAxOTkwIiAqLwotICAgICAgICBpZiAoIXApIHAgPSAiIjsKLSAgICAgICAg aWYgKCEqcCkgcmV0dXJuKHApOwotICAgICAgICB2dmJ1ZlswXSA9IHBbMTFdOwotICAgICAgICB2 dmJ1ZlsxXSA9IHBbMTJdOwotICAgICAgICB2dmJ1ZlsyXSA9IE5VTDsKLSAgICAgICAgcmV0dXJu KHZ2YnVmKTsgICAgICAgICAgICAgICAgICAvKiBhbmQgcmV0dXJuIGl0ICovCi0KLSAgICAgIGNh c2UgVk5fQklUUzoJCQkvKiBCaXRzICgxNiwgMzIsIDY0KSAqLwotCWlmIChzaXplb2YobG9uZykg PiA0KQotCSAgcmV0dXJuKGNraXRvYSg4KnNpemVvZihsb25nKSkpOwotCWVsc2UKLQkgIHJldHVy bihja2l0b2EoOCpzaXplb2YoaW50KSkpOwotCi0gICAgICBjYXNlIFZOX0xBU1RLV1Y6CQkJLyog MjEyICovCi0JcmV0dXJuKGxhc3Rrd3ZhbCA/IGxhc3Rrd3ZhbCA6ICIiKTsKLQotICAgICAgY2Fz ZSBWTl9IT1NUSVA6IHsJCQkvKiAyMTIgKi8KLSNpZmRlZiBUQ1BTT0NLRVQKLQkgIGV4dGVybiBj aGFyIGhvc3RpcGFkZHJbXTsKLQkgIHJldHVybigoY2hhciAqKWhvc3RpcGFkZHIpOwotI2Vsc2UK LQkgIHJldHVybigiIik7Ci0jZW5kaWYJLyogVENQU09DS0VUICovCi0gICAgICB9Ci0gICAgICBj YXNlIFZOX0lOUE1TRzoKLQlzd2l0Y2ggKGluc3RhdHVzKSB7Ci0JICBjYXNlIElOUF9PSzogIHJl dHVybigiU1VDQ0VTUyIpOwotCSAgY2FzZSBJTlBfVE86ICByZXR1cm4oIlRpbWVkIG91dCIpOwot CSAgY2FzZSBJTlBfVUk6ICByZXR1cm4oIktleWJvYXJkIGludGVycnVwdCIpOwotCSAgY2FzZSBJ TlBfSUU6ICByZXR1cm4oIkludGVybmFsIGVycm9yIik7Ci0JICBjYXNlIElOUF9JTzogIHJldHVy bigiSS9PIGVycm9yIG9yIGNvbm5lY3Rpb24gbG9zdCIpOwotCSAgY2FzZSBJTlBfSUtTOiByZXR1 cm4oIklOUFVUIGRpc2FibGVkIik7Ci0JICBjYXNlIElOUF9CRjogIHJldHVybigiQnVmZmVyIGZp bGxlZCBhbmQgL05PV1JBUCBzZXQiKTsKLQkgIGRlZmF1bHQ6ICAgICAgcmV0dXJuKCJVbmtub3du Iik7Ci0JfQotCi0gICAgICBjYXNlIFZOX1ZBUkVWQUw6CQkJLyogMjEyICovCi0JcmV0dXJuKHZh cmV2YWwgPyAicmVjdXJzaXZlIiA6ICJzaW1wbGUiKTsKLQotICAgICAgY2FzZSBWTl9MT0dfQ09O OgkJCS8qIFx2KC4uLikgZm9yIGxvZyBmaWxlcyAqLwotI2lmZGVmIENLTE9HRElBTAotICAgICAg ICByZXR1cm4oZGlhZmlsKTsKLSNlbHNlIAotICAgICAgICByZXR1cm4oIiIpOwotI2VuZGlmCi0g ICAgICBjYXNlIFZOX0xPR19QS1Q6Ci0jaWZuZGVmIE5PWEZFUgotICAgICAgICByZXR1cm4ocGt0 ZmlsKTsKLSNlbHNlCi0gICAgICAgIHJldHVybigiIik7Ci0jZW5kaWYKLSAgICAgIGNhc2UgVk5f TE9HX1NFUzoKLSNpZm5kZWYgTk9MT0NBTAotICAgICAgICByZXR1cm4oc2VzZmlsKTsKLSNlbHNl Ci0gICAgICAgIHJldHVybigiIik7Ci0jZW5kaWYKLSAgICAgIGNhc2UgVk5fTE9HX1RSQToKLSNp ZmRlZiBUTE9HCi0gICAgICAgIHJldHVybih0cmFmaWwpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJu KCIiKTsKLSNlbmRpZgotICAgICAgY2FzZSBWTl9MT0dfREVCOgotI2lmZGVmIERFQlVHCi0gICAg ICAgIHJldHVybihkZWJmaWwpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuKCIiKTsKLSNlbmRpZgot ICAgICAgY2FzZSBWTl9QUkVWQ01EOiB7Ci0JICBleHRlcm4gY2hhciAqIHByZXZjbWQ7Ci0JICBy ZXR1cm4ocHJldmNtZCA/ICBwcmV2Y21kIDogIiIpOwotICAgICAgfQotICAgIH0KLQotI2lmbmRl ZiBOT0RJQUwKLSAgICBzd2l0Y2ggKHkpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxs ZXIgSUQgdmFsdWVzICovCi0gICAgICBleHRlcm4gY2hhcgotICAgICAgICAqIGNhbGxpZF9kYXRl LCAqIGNhbGxpZF90aW1lLCAqIGNhbGxpZF9uYW1lLAotICAgICAgICAqIGNhbGxpZF9ubWJyLCAq IGNhbGxpZF9tZXNnOwotCi0gICAgICBjYXNlIFZOX0NJX0RBOgotICAgICAgICByZXR1cm4oY2Fs bGlkX2RhdGUgPyBjYWxsaWRfZGF0ZSA6ICIiKTsKLQotICAgICAgY2FzZSBWTl9DSV9USToKLSAg ICAgICAgcmV0dXJuKGNhbGxpZF90aW1lID8gY2FsbGlkX3RpbWUgOiAiIik7Ci0KLSAgICAgIGNh c2UgVk5fQ0lfTkE6Ci0gICAgICAgIHJldHVybihjYWxsaWRfbmFtZSA/IGNhbGxpZF9uYW1lIDog IiIpOwotCi0gICAgICBjYXNlIFZOX0NJX05VOgotICAgICAgICByZXR1cm4oY2FsbGlkX25tYnIg PyBjYWxsaWRfbm1iciA6ICIiKTsKLQotICAgICAgY2FzZSBWTl9DSV9NRToKLSAgICAgICAgcmV0 dXJuKGNhbGxpZF9tZXNnID8gY2FsbGlkX21lc2cgOiAiIik7Ci0KLSAgICB9IC8qIEVuZCBvZiB2 YXJpYWJsZS1uYW1lIHN3aXRjaGVzICovCi0jZW5kaWYgLyogTk9ESUFMICovCi0KLSNpZmRlZiBO VAotICAgIHN3aXRjaCAoeSkgewotICAgICAgY2FzZSBWTl9QRVJTT05BTDoKLSAgICAgICAgcCA9 IChjaGFyICopR2V0UGVyc29uYWwoKTsKLSAgICAgICAgaWYgKHApIHsKLSAgICAgICAgICAgIEdl dFNob3J0UGF0aE5hbWUocCx2dmJ1ZixWVkJVRkwpOwotICAgICAgICAgICAgcmV0dXJuKHZ2YnVm KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4oIiIpOwotICAgICAgY2FzZSBWTl9ERVNLVE9Q OgotICAgICAgICAgIHAgPSAoY2hhciAqKUdldERlc2t0b3AoKTsKLSAgICAgICAgICBpZiAocCkg ewotICAgICAgICAgICAgICBHZXRTaG9ydFBhdGhOYW1lKHAsdnZidWYsVlZCVUZMKTsKLSAgICAg ICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuKCIi KTsKLSAgICAgIGNhc2UgVk5fQ09NTU9OOgotICAgICAgICBwID0gKGNoYXIgKilHZXRBcHBEYXRh KDEpOwotICAgICAgICBpZiAocCkgewotICAgICAgICAgICAgY2ttYWttc2codnZidWYsVlZCVUZM LHAsIktlcm1pdCA5NS8iLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICBHZXRTaG9ydFBhdGhOYW1l KHZ2YnVmLHZ2YnVmLFZWQlVGTCk7Ci0gICAgICAgICAgICByZXR1cm4odnZidWYpOwotICAgICAg ICB9Ci0gICAgICAgIHJldHVybigiIik7Ci0gICAgICBjYXNlIFZOX0FQUERBVEE6Ci0gICAgICAg IHAgPSAoY2hhciAqKUdldEFwcERhdGEoMCk7Ci0gICAgICAgIGlmIChwKSB7Ci0gICAgICAgICAg ICBja21ha21zZyh2dmJ1ZixWVkJVRkwscCwiS2VybWl0IDk1LyIsTlVMTCxOVUxMKTsKLSAgICAg ICAgICAgIEdldFNob3J0UGF0aE5hbWUodnZidWYsdnZidWYsVlZCVUZMKTsKLSAgICAgICAgICAg IHJldHVybih2dmJ1Zik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKCIiKTsKLSAgICB9Ci0j ZW5kaWYgLyogTlQgKi8KLQotI2lmZGVmIFROX0NPTVBPUlQKLSAgICBzd2l0Y2ggKHkpIHsKLSAg ICAgIGNhc2UgVk5fVE5DX1NJRzogewotICAgICAgICBwID0gKGNoYXIgKikgdG5jX2dldF9zaWdu YXR1cmUoKTsKLSAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHAgPyBwIDogIiIsVlZCVUZMKTsKLSAg ICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogVE5fQ09NUE9S VCAqLwotCi0jaWZkZWYgS1VJCi0gICAgc3dpdGNoICh5KSB7Ci0gICAgICBjYXNlIFZOX0dVSV9S VU46IHsKLQkgIGV4dGVybiBIV05EIGdldEh3bmRLVUkoKTsKLQkgIGlmICggSXNJY29uaWMoZ2V0 SHduZEtVSSgpKSApCi0gICAgICAgICAgICByZXR1cm4oIm1pbmltaXplZCIpOwotCSAgaWYgKCBJ c1pvb21lZChnZXRId25kS1VJKCkpICkKLSAgICAgICAgICAgIHJldHVybigibWF4aW1pemVkIik7 Ci0JICByZXR1cm4oInJlc3RvcmVkIik7Ci0gICAgICB9Ci0gICAgICBjYXNlIFZOX0dVSV9YUDoK LSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGdldF9ndWlfd2luZG93X3Bvc194KCkpOyAgLyog U0FGRSAqLwotICAgICAgICByZXR1cm4odnZidWYpOwotICAgICAgY2FzZSBWTl9HVUlfWVA6Ci0g ICAgICAgIHNwcmludGYodnZidWYsIiVkIixnZXRfZ3VpX3dpbmRvd19wb3NfeSgpKTsgIC8qIFNB RkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICAgIGNhc2UgVk5fR1VJX1hSOgotICAg ICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsR2V0U3lzdGVtTWV0cmljcyhTTV9DWFNDUkVFTikpOyAg LyogU0FGRSAqLwotICAgICAgICByZXR1cm4odnZidWYpOwotICAgICAgY2FzZSBWTl9HVUlfWVI6 Ci0gICAgICAgIHNwcmludGYodnZidWYsIiVkIixHZXRTeXN0ZW1NZXRyaWNzKFNNX0NZU0NSRUVO KSk7ICAvKiBTQUZFICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgICBjYXNlIFZOX0dV SV9GTk06Ci0gICAgICAgICAgaWYgKCBudGVybWZvbnQgPiAwICkgewotICAgICAgICAgICAgICBp bnQgaTsKLSAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG50ZXJtZm9udDsgaSsrKSB7Ci0g ICAgICAgICAgICAgICAgICBpZiAodHRfZm9udCA9PSB0ZXJtX2ZvbnRbaV0ua3d2YWwpIHsKLSAg ICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsdGVybV9mb250W2ldLmt3ZCxWVkJV RkwpOwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuKCIo dW5rbm93bikiKTsKLSAgICAgIGNhc2UgVk5fR1VJX0ZTWjoKLSAgICAgICAgICBja3N0cm5jcHko dnZidWYsY2tpdG9hKHR0X2ZvbnRfc2l6ZS8yKSxWVkJVRkwpOwotICAgICAgICAgIGlmICggdHRf Zm9udF9zaXplICUgMiApCi0gICAgICAgICAgICAgIGNrc3RybmNhdCh2dmJ1ZiwiLjUiLFZWQlVG TCk7Ci0gICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICB9Ci0jZW5kaWYgLyogS1VJICovCi0K LSAgICBmbnN1Y2Nlc3MgPSAwOwotICAgIGlmIChmbmVycm9yKSB7Ci0gICAgICAgIGZuc3VjY2Vz cyA9IDA7Ci0gICAgfQotICAgIGlmIChmbmRpYWdzKSB7Ci0gICAgICAgIGlmICghZW1idWZbMF0p Ci0gICAgICAgICAgY2tzdHJuY3B5KGVtYnVmLCI8RVJST1I6Tk9fU1VDSF9WQVJJQUJMRT4iLEVN QlVGTEVOKTsKLSAgICAgICAgcHJpbnRmKCI/JXNcbiIsZW1idWYpOwotICAgICAgICByZXR1cm4o KGNoYXIgKillbWJ1Zik7Ci0gICAgfSBlbHNlCi0gICAgICByZXR1cm4oIiIpOwotfQotI2VuZGlm IC8qIE5PU1BMICovCi0KLQotLyoKLSAgWCBYIFMgVCBSIEkgTiBHICAtLSAgRXhwYW5kIHZhcmlh YmxlcyBhbmQgYmFja3NsYXNoIGNvZGVzLgotCi0gICAgaW50IHh4dHN0cmluZyhzLCZzMiwmbik7 Ci0KLSAgRXhwYW5kcyBcIGVzY2FwZXMgdmlhIHJlY3Vyc2l2ZSBkZXNjZW50LgotICBBcmd1bWVu dCBzIGlzIGEgcG9pbnRlciB0byBzdHJpbmcgdG8gZXhwYW5kIChzb3VyY2UpLgotICBBcmd1bWVu dCBzMiBpcyB0aGUgYWRkcmVzcyBvZiB3aGVyZSB0byBwdXQgcmVzdWx0IChkZXN0aW5hdGlvbiku Ci0gIEFyZ3VtZW50IG4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgZGVzdGluYXRpb24gc3RyaW5nICh0 byBwcmV2ZW50IG92ZXJydW5zKS4KLSAgUmV0dXJucyAtMSBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nl c3MsCi0gICAgd2l0aCBkZXN0aW5hdGlvbiBzdHJpbmcgbnVsbC10ZXJtaW5hdGVkIGFuZCBzMiBw b2ludGluZyB0byB0aGUKLSAgICB0ZXJtaW5hdGluZyBudWxsLCBzbyB0aGF0IHN1YnNlcXVlbnQg Y2hhcmFjdGVycyBjYW4gYmUgYWRkZWQuCi0gICAgRmFpbHVyZSByZWFzb25zIGluY2x1ZGUgZGVz dGluYXRpb24gYnVmZmVyIGlzIGZpbGxlZCB1cC4KLSovCi0KLSNkZWZpbmUgWFhERVBMSU0gMTAw ICAgICAgICAgICAgICAgICAgICAvKiBSZWN1cnNpb24gZGVwdGggbGltaXQgKi8KLS8qCi0gIElu IFdpbmRvd3MgdGhlIHN0YWNrIGlzIGxpbWl0ZWQgdG8gMjU2SyBzbyBiaWcgY2hhcmFjdGVyIGFy cmF5cyBsaWtlCi0gIHZuYW1idWYgY2FuJ3QgYmUgb24gdGhlIHN0YWNrIGluIHJlY3Vyc2l2ZSBm dW5jdGlvbnMgbGlrZSB6enN0cmluZygpLgotICBCdXQgdGhhdCdzIG5vIHJlYXNvbiB1c2UgbWFs bG9jKCkgaW4gVW5peCBvciBWTVMsIHdoaWNoIGRvbid0IGhhdmUKLSAgdGhpcyBraW5kIG9mIHJl c3RyaWN0aW9uLgotKi8KLSNpZmRlZiBEVk5BTUJVRgkJCQkvKiBEeW5hbWljIHZuYW1idWZbXSAq LwotI3VuZGVmIERWTkFNQlVGCQkJCS8qIENsZWFuIHNsYXRlICovCi0jZW5kaWYgLyogRFZOQU1C VUYgKi8KLQotI2lmbmRlZiBOT1NQTAkJCQkvKiBPbmx5IGlmIFNQTCBpbmNsdWRlZCAqLwotI2lm ZGVmIE9TMgkJCQkvKiBPbmx5IGZvciBLOTUgKi8KLSNkZWZpbmUgRFZOQU1CVUYKLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1pbnQKLXp6c3RyaW5nKHMsczIsbikgY2hh ciAqczsgY2hhciAqKnMyOyBpbnQgKm47IHsKLSAgICBpbnQgeCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBDdXJyZW50IGNoYXJhY3RlciAqLwotICAgICAgICB5LCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlciAqLwotICAgICAgICBwcCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFBhcmVuIGxldmVsICovCi0gICAgICAgIGtwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQnJhY2UgbGV2ZWwgKi8KLSAgICAgICAgYXJnbiwgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBGdW5jdGlvbiBhcmd1bWVudCBjb3VudGVyICovCi0gICAg ICAgIG4yLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9jYWwgY29weSBvZiBuICov Ci0gICAgICAgIGQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXJyYXkgZGltZW5z aW9uICovCi0gICAgICAgIHZiaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVmFyaWFi bGUgaWQgKGludGVnZXIgZm9ybSkgKi8KLSAgICAgICAgYXJnbCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTdHJpbmcgYXJndW1lbnQgbGVuZ3RoICovCi0gICAgICAgIG54LCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU2F2ZSBvcmlnaW5hbCBsZW5ndGggKi8KLQlxdW90aW5n ID0gMDsJCQkvKiAyOTkgKi8KLQotICAgIGNoYXIgdmIsICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFZhcmlhYmxlIGlkIChjaGFyIGZvcm0pICovCi0gICAgICAgICp2cCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byB2YXJpYWJsZSBkZWZpbml0aW9uICovCi0g ICAgICAgICpuZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9jYWwgcG9pbnRlciB0 byB0YXJnZXQgc3RyaW5nICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAqb2xkLCAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgb3JpZ2luYWwgdGFyZ2V0IHBvaW50ZXIgKi8KLSNl bmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICpwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogV29ya2VyICovCi0gICAgICAgICpxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogV29ya2VyICovCi0gICAgICAgICpzMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog V29ya2VyICovCi0gICAgaW50ICB4MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV29y a2VyICovCi0gICAgY2hhciAqciAgPSAoY2hhciAqKTA7ICAgICAgICAgICAgICAgLyogRm9yIGhv bGRpbmcgZnVuY3Rpb24gYXJncyAqLwotICAgIGNoYXIgKnIyID0gKGNoYXIgKikwOwotICAgIGNo YXIgKnIzcDsKLQotI2lmbmRlZiBOT1NQTAotI2lmZGVmIERWTkFNQlVGCi0gICAgY2hhciAqIHZu YW1idWYgPSBOVUxMOyAgICAgICAgICAgICAgLyogQnVmZmVyIGZvciB2YXJpYWJsZS9mdW5jdGlv biBuYW1lICovCi0jZWxzZSAvKiBEVk5BTUJVRiAqLwotICAgIGNoYXIgdm5hbWJ1ZltWTkFNTF07 ICAgICAgICAgICAgICAgIC8qIEJ1ZmZlciBmb3IgdmFyaWFibGUvZnVuY3Rpb24gbmFtZSAqLwot I2VuZGlmIC8qIERWTkFNQlVGICovCi0gICAgY2hhciAqYXJncFtGTkFSR1NdOyAgICAgICAgICAg ICAgICAgLyogUG9pbnRlcnMgdG8gZnVuY3Rpb24gYXJncyAqLwotI2VuZGlmIC8qIE5PU1BMICov Ci0KLSAgICBzdGF0aWMgaW50IGRlcHRoID0gMDsgICAgICAgICAgICAgICAvKiBDYWxsIGRlcHRo LCBhdm9pZCBvdmVyZmxvdyAqLwotCi0gICAgbjIgPSAqbjsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTWFrZSBsb2NhbCBjb3BpZXMgb2YgYXJncyAqLwotICAgIG54ID0gbjI7Ci0KLSNp ZmRlZiBDT01NRU5UCi0gICAgLyogVGhpcyBpcyBhbHdheXMgMzJLIGluIEJJR0JVRk9LIGJ1aWxk cyAqLwotICAgIGlmIChkZXB0aCA9PSAwKQotICAgICAgZGVidWcoRjEwMSwienpzdHJpbmcgdG9w LWxldmVsIG4iLCIiLG4yKTsKLSNlbmRpZgkvKiBDT01NRU5UICovCi0KLSAgICBuZXcgPSAqczI7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3Igb25lIGxlc3MgbGV2ZWwgb2YgaW5kaXJl Y3Rpb24gKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgb2xkID0gbmV3OwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgIGl0c2FwYXR0ZXJuID0gMDsJCQkvKiBGb3IgXGZw YXR0ZXJuKCkgKi8KLSAgICBpc2pvaW4gPSAwOwkJCQkvKiBGb3IgXGZqb2luKCkgKi8KLSNlbmRp ZiAvKiBOT1NQTCAqLwotICAgIGRlcHRoKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFNpbmsgdG8gYSBuZXcgZGVwdGggKi8KLSAgICBpZiAoZGVwdGggPiBYWERFUExJTSkgeyAgICAg ICAgICAgICAvKiBUb28gZGVlcD8gKi8KLSAgICAgICAgcHJpbnRmKCI/ZGVmaW5pdGlvbiBpcyBj aXJjdWxhciBvciB0b28gZGVlcFxuIik7Ci0gICAgICAgIGRlYnVnKEYxMDEsInp6c3RyaW5nIGZh aWwiLCIiLGRlcHRoKTsKLSAgICAgICAgZGVwdGggPSAwOwotICAgICAgICAqbmV3ID0gTlVMOwot ICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAoIXMgfHwgIW5ldykgeyAgICAgICAg ICAgICAgICAgICAvKiBXYXRjaCBvdXQgZm9yIG51bGwgcG9pbnRlcnMgKi8KLSAgICAgICAgZGVi dWcoRjEwMSwienpzdHJpbmcgZmFpbCAyIiwiIixkZXB0aCk7Ci0gICAgICAgIGlmIChuZXcpCi0g ICAgICAgICAgKm5ldyA9IE5VTDsKLSAgICAgICAgZGVwdGggPSAwOwotICAgICAgICByZXR1cm4o LTEpOwotICAgIH0KLSAgICBzMyA9IHM7Ci0gICAgYXJnbCA9IDA7Ci0gICAgd2hpbGUgKCpzMysr KSBhcmdsKys7ICAgICAgICAgICAgICAvKiBHZXQgbGVuZ3RoIG9mIHNvdXJjZSBzdHJpbmcgKi8K LSAgICBkZWJ1ZyhGMDEwLCJ6enN0cmluZyBlbnRyeSIscywwKTsKLSAgICBpZiAoYXJnbCA9PSAw KSB7ICAgICAgICAgICAgICAgICAgICAvKiBFbXB0eSBzdHJpbmcgKi8KLSAgICAgICAgZGVidWco RjExMSwienpzdHJpbmcgZW1wdHkgYXJnIixzLGFyZ2wpOwotICAgICAgICBkZXB0aCA9IDA7Ci0g ICAgICAgICpuZXcgPSBOVUw7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKGFy Z2wgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogV2F0Y2ggb3V0IGZvciBnYXJiYWdlICov Ci0gICAgICAgIGRlYnVnKEYxMDEsInp6c3RyaW5nIGZhaWwgMyIsIiIsZGVwdGgpOwotICAgICAg ICAqbmV3ID0gTlVMOwotICAgICAgICBkZXB0aCA9IDA7Ci0gICAgICAgIHJldHVybigtMSk7Ci0g ICAgfQotI2lmZGVmIERWTkFNQlVGCi0gICAgZGVidWcoRjEwMCwidm5hbWJ1ZiBtYWxsb2MuLi4i LCIiLDApOwotICAgIHZuYW1idWYgPSBtYWxsb2MoVk5BTUwpOwotICAgIGlmICh2bmFtYnVmID09 IE5VTEwpIHsKLSAgICAgICAgcHJpbnRmKCI/T3V0IG9mIG1lbW9yeSIpOwotICAgICAgICByZXR1 cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAwLCJ2bmFtYnVmIG1hbGxvYyBvayIsIiIsMCk7 Ci0jZW5kaWYgLyogRFZOQU1CVUYgKi8KLQotICAgIHdoaWxlICgoeCA9ICpzKSkgeyAgICAgICAg ICAgICAgICAgIC8qIExvb3AgZm9yIGFsbCBjaGFyYWN0ZXJzICovCi0gICAgICAgIGlmICh4ICE9 IENNRFEpIHsgICAgICAgICAgICAgICAgLyogSXMgaXQgdGhlIGNvbW1hbmQtcXVvdGUgY2hhcj8g Ki8KLSAgICAgICAgICAgICpuZXcrKyA9ICpzKys7ICAgICAgICAgICAgICAvKiBObywgbm9ybWFs IGNoYXIsIGp1c3QgY29weSAqLwotICAgICAgICAgICAgaWYgKC0tbjIgPCAwKSB7ICAgICAgICAg ICAgIC8qIGFuZCBjb3VudCBpdCwgY2FyZWZ1bCBvZiBvdmVyZmxvdyAqLwotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDEsInp6c3RyaW5nIG92ZXJmbG93IDEiLCIiLGRlcHRoKTsKLSAgICAgICAg ICAgICAgICBkZXB0aCA9IDA7Ci0jaWZkZWYgRFZOQU1CVUYKLSAgICAgICAgICAgICAgICBpZiAo dm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKLSNlbmRpZiAvKiBEVk5BTUJVRiAqLwotICAgICAgICAg ICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsK LSAgICAgICAgfQotCi0vKiBXZSBoYXZlIHRoZSBjb21tYW5kLXF1b3RlIGNoYXJhY3Rlci4gKi8K LQotICAgICAgICB4ID0gKihzKzEpOyAgICAgICAgICAgICAgICAgICAgIC8qIEdldCB0aGUgZm9s bG93aW5nIGNoYXJhY3Rlci4gKi8KLSAgICAgICAgaWYgKGlzdXBwZXIoeCkpIHggPSB0b2xvd2Vy KHgpOwotICAgICAgICBzd2l0Y2ggKHgpIHsgICAgICAgICAgICAgICAgICAgIC8qIEFjdCBhY2Nv cmRpbmcgdG8gdmFyaWFibGUgdHlwZSAqLwotI2lmbmRlZiBOT1NQTAotICAgICAgICAgIGNhc2Ug MDogICAgICAgICAgICAgICAgICAgICAgIC8qIEl0J3MgYSBsb25lIGJhY2tzbGFzaCAqLwotICAg ICAgICAgICAgKm5ldysrID0gKnMrKzsKLSAgICAgICAgICAgIGlmICgtLW4yIDwgMCkgewotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDEsInp6c3RyaW5nIG92ZXJmbG93IDIiLCIiLDApOwotI2lm ZGVmIERWTkFNQlVGCi0gICAgICAgICAgICAgICAgaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1Zik7 Ci0jZW5kaWYgLyogRFZOQU1CVUYgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnJSc6ICAgICAg ICAgICAgICAgICAgICAgLyogVmFyaWFibGUgKi8KLSAgICAgICAgICAgIHMgKz0gMjsgICAgICAg ICAgICAgICAgICAgICAvKiBHZXQgdGhlIGxldHRlciBvciBkaWdpdCAqLwotICAgICAgICAgICAg dmIgPSAqcysrOyAgICAgICAgICAgICAgICAgIC8qIGFuZCBtb3ZlIHNvdXJjZSBwb2ludGVyIHBh c3QgaXQgKi8KLSAgICAgICAgICAgIHZwID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiBBc3N1 bWUgZGVmaW5pdGlvbiBpcyBlbXB0eSAqLwotICAgICAgICAgICAgaWYgKHZiID49ICcwJyAmJiB2 YiA8PSAnOScpIHsgLyogRGlnaXQgZm9yIG1hY3JvIGFyZyAqLwotICAgICAgICAgICAgICAgIGlm IChtYWNsdmwgPCAwKSAgICAgICAgIC8qIERpZ2l0IHZhcmlhYmxlcyBhcmUgZ2xvYmFsICovCi0g ICAgICAgICAgICAgICAgICB2cCA9IGdfdmFyW3ZiXTsgICAgICAgLyogaWYgbm8gbWFjcm8gaXMg YWN0aXZlICovCi0gICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgLyogb3Ro ZXJ3aXNlICovCi0gICAgICAgICAgICAgICAgICB2cCA9IG1fYXJnW21hY2x2bF1bdmIgLSAnMCdd OyAvKiB0aGV5J3JlIG9uIHRoZSBzdGFjayAqLwotICAgICAgICAgICAgfSBlbHNlIGlmICh2YiA9 PSAnKicpIHsgICAgIC8qIE1hY3JvIGFyZ3Mgc3RyaW5nICovCi0jaWZkZWYgQ09NTUVOVAotICAg ICAgICAgICAgICAgIC8qIFRoaXMgZG9lc24ndCB0YWtlIGNoYW5nZXMgaW50byBhY2NvdW50ICov Ci0gICAgICAgICAgICAgICAgdnAgPSAobWFjbHZsID49IDApID8gbV9saW5lW21hY2x2bF0gOiB0 b3BsaW5lOwotICAgICAgICAgICAgICAgIGlmICghdnApIHZwID0gIiI7Ci0jZWxzZQotCQljaGFy ICogc3MgPSBuZXc7Ci0gICAgICAgICAgICAgICAgaWYgKHp6c3RyaW5nKCJcXGZqb2luKCZfW10s LDEpIiwmbmV3LCZuMikgPCAwKSB7Ci0jaWZkZWYgRFZOQU1CVUYKLQkJICAgIGlmICh2bmFtYnVm KSBmcmVlKHZuYW1idWYpOwotI2VuZGlmIC8qIERWTkFNQlVGICovCi0JCSAgICByZXR1cm4oLTEp OwotCQl9Ci0JCWRlYnVnKEYxMTAsInp6c3RyaW5nIFxcJSoiLHNzLDApOwotICAgICAgICAgICAg ICAgIGJyZWFrOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgaWYgKGlzdXBwZXIodmIpKSB2YiArPSAoJ2EnLSdBJyk7Ci0gICAgICAg ICAgICAgICAgdnAgPSBnX3Zhclt2Yl07ICAgICAgICAgLyogTGV0dGVyIGZvciBnbG9iYWwgdmFy aWFibGUgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghdnApIHZwID0gIiI7Ci0j aWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgaWYgKHZwKSB7ICAgICAgICAgICAgICAgICAgIC8q IElmIGRlZmluaXRpb24gbm90IGVtcHR5ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQlpZiAo dmFyZXZhbCkgewotCQkgICAgZGVidWcoRjAxMCwienpzdHJpbmcgJW4gdnAiLHZwLDApOwotCQkg ICAgLyogY2FsbCBzZWxmIHRvIGV2YWx1YXRlIGl0ICovCi0JCSAgICBpZiAoenpzdHJpbmcodnAs Jm5ldywmbjIpIDwgMCkgewotCQkJZGVidWcoRjEwMSwienpzdHJpbmcgZmFpbCA2IiwiIixkZXB0 aCk7Ci0jaWZkZWYgRFZOQU1CVUYKLQkJCWlmICh2bmFtYnVmKSBmcmVlKHZuYW1idWYpOwotI2Vu ZGlmIC8qIERWTkFNQlVGICovCi0JCQlyZXR1cm4oLTEpOwkvKiBQYXNzIGFsb25nIGZhaWx1cmUg Ki8KLQkJICAgIH0KLQkJfSBlbHNlIHsKLQkJICAgIHdoaWxlICgoKm5ldysrID0gKnZwKyspKSAv KiBjb3B5IGl0IHRvIG91dHB1dCBzdHJpbmcuICovCi0JCSAgICAgIGlmICgtLW4yIDwgMCkgewot CQkJICBpZiAocSkgZnJlZShxKTsKLQkJCSAgZGVidWcoRjEwMSwienpzdHJpbmcgb3ZlcmZsb3cg NC41IiwiIixkZXB0aCk7Ci0jaWZkZWYgRFZOQU1CVUYKLQkJCSAgaWYgKHZuYW1idWYpIGZyZWUo dm5hbWJ1Zik7Ci0jZW5kaWYgLyogRFZOQU1CVUYgKi8KLQkJCSAgcmV0dXJuKC0xKTsKLQkJICAg ICAgfQotCQkgICAgbmV3LS07CQkvKiBCYWNrIHVwIG92ZXIgdGVybWluYXRpbmcgbnVsbCAqLwot CQkgICAgbjIrKzsJCS8qIHRvIGFsbG93IGZvciBmdXJ0aGVyIGRlcG9zaXRzLiAqLwotCQl9Ci0j aWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJ6enN0cmluZyAlbiB2cCIsIihOVUxMKSIsMCk7Ci0gICAgICAgICAgICAgICAgbjIg PSBueDsKLSAgICAgICAgICAgICAgICBuZXcgPSBvbGQ7Ci0gICAgICAgICAgICAgICAgKm5ldyA9 IE5VTDsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICBjYXNlICcmJzogICAgICAgICAgICAgICAgICAgICAvKiBBbiBhcnJh eSByZWZlcmVuY2UgKi8KLSAgICAgICAgICAgIHggPSBhcnJheW5hbShzLCZ2YmksJmQpOyAgICAv KiBHZXQgbmFtZSBhbmQgc3Vic2NyaXB0ICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6enN0 cmluZyBhcnJheW5hbSIscyx4KTsKLSAgICAgICAgICAgIGlmICh4IDwgMCkgewotICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsInp6c3RyaW5nIGZhaWwgNyIsIiIsZGVwdGgpOwotI2lmZGVmIERW TkFNQlVGCi0gICAgICAgICAgICAgICAgaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1Zik7Ci0jZW5k aWYgLyogRFZOQU1CVUYgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgcHAgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEJyYWNrZXQg Y291bnRlciAqLwotICAgICAgICAgICAgd2hpbGUgKCpzKSB7ICAgICAgICAgICAgICAgIC8qIEFk dmFuY2Ugc291cmNlIHBvaW50ZXIuLi4gKi8KLSAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJ1sn KSBwcCsrOwotICAgICAgICAgICAgICAgIGlmICgqcyA9PSAnXScgJiYgLS1wcCA9PSAwKSBicmVh azsKLSAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo KnMgPT0gJ10nKSBzKys7ICAgICAgICAgLyogLi4ucGFzdCB0aGUgY2xvc2luZyBicmFja2V0LiAq LwotCi0gICAgICAgICAgICB4ID0gY2hrYXJyYXkodmJpLGQpOyAgICAgICAgLyogQXJyYXkgaXMg ZGVjbGFyZWQ/ICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBjaGthcnJheSIs IiIseCk7Ci0gICAgICAgICAgICBpZiAoeCA+IC0xKSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAg ICAgICAgICAgIGNoYXIgKiBzMSA9IE5VTEw7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAg ICAgICAgICAgIHZiaSAtPSBBUlJBWUJBU0U7ICAgICAgIC8qIENvbnZlcnQgbmFtZSB0byBpbmRl eCAqLwotCi0gICAgICAgICAgICAgICAgICBpZiAoYV9kaW1bdmJpXSA+PSBkKSB7IC8qIElmIHN1 YnNjcmlwdCBpbiByYW5nZSAqLwotICAgICAgICAgICAgICAgICAgICBjaGFyICoqYXA7Ci0gICAg ICAgICAgICAgICAgICAgIGFwID0gYV9wdHJbdmJpXTsgICAgLyogZ2V0IGRhdGEgcG9pbnRlciAq LwotICAgICAgICAgICAgICAgICAgICBpZiAoYXApIHsgICAgICAgICAgIC8qIGFuZCBpZiB0aGVy ZSBpcyBvbmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcFtkXSkgeyAgICAvKiBJ ZiBkZWZpbml0aW9uIG5vdCBlbXB0eSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsInp6c3RyaW5nIGFwW2RdIixhcFtkXSxkKTsKLQkJCSAgICBpZiAodmFyZXZhbCkg ewotCQkJCWlmICh6enN0cmluZyhhcFtkXSwmbmV3LCZuMikgPCAwKSB7Ci0JCQkJICAgIGRlYnVn KEYxMDEsInp6c3RyaW5nIGZhaWwgOCIsIiIsZGVwdGgpOwotI2lmZGVmIERWTkFNQlVGCi0JCQkJ ICAgIGlmICh2bmFtYnVmKSBmcmVlKHZuYW1idWYpOwotI2VuZGlmIC8qIERWTkFNQlVGICovCi0J CQkJICAgIHJldHVybigtMSk7IC8qIFBhc3MgYWxvbmcgZmFpbHVyZSAqLwotCQkJCX0KLQkJCSAg ICB9IGVsc2UgewotCQkJCXZwID0gYXBbZF07Ci0JCQkJd2hpbGUgKCgqbmV3KysgPSAqdnArKykp IC8qIGNvcHkgdG8gcmVzdWx0ICovCi0JCQkJICBpZiAoLS1uMiA8IDApIHsKLQkJCQkgICAgICBp ZiAocSkgZnJlZShxKTsKLQkJCQkgICAgICBkZWJ1ZyhGMTAxLAotCQkJCQkgICAgInp6c3RyaW5n IG92ZXJmbG93IDguNSIsIiIsZGVwdGgpOwotI2lmZGVmIERWTkFNQlVGCi0JCQkJICAgICAgaWYg KHZuYW1idWYpIGZyZWUodm5hbWJ1Zik7Ci0jZW5kaWYgLyogRFZOQU1CVUYgKi8KLQkJCQkgICAg ICByZXR1cm4oLTEpOwotCQkJCSAgfQotCQkJCW5ldy0tOwkvKiBCYWNrIHVwIG92ZXIgdGVybWlu YXRpbmcgbnVsbCAqLwotCQkJCW4yKys7CS8qIHRvIGFsbG93IGZvciBmdXJ0aGVyIGRlcG9zaXRz LiAqLwotCQkJICAgIH0KLQkJCX0KLQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgICAgICAgICAgLyogb2xkID0gbmV3OyAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgbjIgPSBueDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K LQkgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlICdmJzogICAgICAg ICAgICAgICAgICAgICAvKiBBIGJ1aWx0aW4gZnVuY3Rpb24gKi8KLSAgICAgICAgICAgIHEgPSB2 bmFtYnVmOyAgICAgICAgICAgICAgICAvKiBDb3B5IHRoZSBuYW1lICovCi0gICAgICAgICAgICB5 ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogaW50byBhIHNlcGFyYXRlIGJ1ZmZlciAqLwot ICAgICAgICAgICAgcyArPSAyOyAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50IHBhc3QgJ0Yn ICovCi0gICAgICAgICAgICB3aGlsZSAoeSsrIDwgVk5BTUwpIHsKLSAgICAgICAgICAgICAgICBp ZiAoKnMgPT0gJygnKSB7IHMrKzsgYnJlYWs7IH0gLyogTG9vayBmb3Igb3BlbiBwYXJlbiAqLwot ICAgICAgICAgICAgICAgIGlmICgoKnEgPSAqcykgPT0gTlVMKSBicmVhazsgICAvKiBvciBlbmQg b2Ygc3RyaW5nICovCi0gICAgICAgICAgICAgICAgcysrOyBxKys7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICAqcSA9IE5VTDsgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlIGZ1bmN0 aW9uIG5hbWUgKi8KLSAgICAgICAgICAgIGlmICh5ID49IFZOQU1MKSB7ICAgICAgICAgICAvKiBI YW5kbGUgcGF0aG9sb2dpY2FsIGNhc2UgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoKnMgJiYg KCpzICE9ICcoJykpIC8qIG9mIHZlcnkgbG9uZyBzdHJpbmcgZW50ZXJlZCAqLwotICAgICAgICAg ICAgICAgICAgcysrOyAgICAgICAgICAgICAgICAgICAgLyogYXMgZnVuY3Rpb24gbmFtZS4gKi8K LSAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJyknKSBzKys7ICAgICAgIC8qIFNraXAgcGFzdCBp dC4gKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHIgPSByMiA9IG1hbGxvYyhhcmdsKzIp OyAgICAvKiBBbmQgbWFrZSBhIHBsYWNlIHRvIGNvcHkgYXJncyAqLwotICAgICAgICAgICAgLyog ZGVidWcoRjEwMSwienpzdHJpbmcgcjIiLCIiLHIyKTsgKi8KLSAgICAgICAgICAgIGlmICghcjIp IHsgICAgICAgICAgICAgICAgICAvKiBXYXRjaCBvdXQgZm9yIG1hbGxvYyBmYWlsdXJlICovCi0g ICAgICAgICAgICAgICAgZGVidWcoRjEwMSwienpzdHJpbmcgZmFpbCA5IiwiIixkZXB0aCk7Ci0g ICAgICAgICAgICAgICAgKm5ldyA9IE5VTDsKLSAgICAgICAgICAgICAgICBkZXB0aCA9IDA7Ci0j aWZkZWYgRFZOQU1CVUYKLSAgICAgICAgICAgICAgICBpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVm KTsKLSNlbmRpZiAvKiBEVk5BTUJVRiAqLwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocjMpIGZyZWUocjMpOyAvKiBBbmQgYW5vdGhl ciB0byBjb3B5IGxpdGVyYWwgYXJnIHN0cmluZyAqLwotICAgICAgICAgICAgcjMgPSBtYWxsb2Mo YXJnbCsyKTsKLSAgICAgICAgICAgIC8qIGRlYnVnKEYxMDEsInp6c3RyaW5nIHIzIiwiIixyMyk7 ICovCi0gICAgICAgICAgICBpZiAoIXIzKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwi enpzdHJpbmcgZmFpbCAxMCIsIiIsZGVwdGgpOwotICAgICAgICAgICAgICAgIGRlcHRoID0gMDsK LSAgICAgICAgICAgICAgICAqbmV3ID0gTlVMOwotICAgICAgICAgICAgICAgIGlmIChyMikgZnJl ZShyMik7Ci0jaWZkZWYgRFZOQU1CVUYKLSAgICAgICAgICAgICAgICBpZiAodm5hbWJ1ZikgZnJl ZSh2bmFtYnVmKTsKLSNlbmRpZiAvKiBEVk5BTUJVRiAqLwotICAgICAgICAgICAgICAgIHJldHVy bigtMSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgcjNwID0gcjM7Ci0gICAg ICAgICAgICBhcmduID0gMDsgICAgICAgICAgICAgICAgICAgLyogQXJndW1lbnQgY291bnRlciAq LwotICAgICAgICAgICAgYXJncFthcmduKytdID0gcjsgICAgICAgICAgIC8qIFBvaW50IHRvIGZp cnN0IGFyZ3VtZW50ICovCi0gICAgICAgICAgICB5ID0gMDsgICAgICAgICAgICAgICAgICAgICAg LyogQ29tcGxldGlvbiBmbGFnICovCi0gICAgICAgICAgICBwcCA9IDE7ICAgICAgICAgICAgICAg ICAgICAgLyogUGFyZW4gbGV2ZWwgKGFscmVhZHkgaGF2ZSBvbmUpLiAqLwotICAgICAgICAgICAg a3AgPSAwOwotICAgICAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgIC8qIENvcHkg ZWFjaCBhcmd1bWVudCwgY2hhciBieSBjaGFyLiAqLwotICAgICAgICAgICAgICAgICpyM3ArKyA9 ICpzOyAgICAgICAgICAgIC8qIFRoaXMgaXMgYSBsaXRlcmFsIGNvcHkgZm9yIFxmbGl0ICovCi0g ICAgICAgICAgICAgICAgaWYgKCEqcykgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBpZiAoKnMg PT0gJ3snKSB7ICAgICAgICAvKiBMZWZ0IGJyYWNlICovCi0gICAgICAgICAgICAgICAgICAgIGtw Kys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgqcyA9PSAnfScpIHsg ICAgICAgIC8qIFJpZ2h0IGJyYWNlICovCi0gICAgICAgICAgICAgICAgICAgIGtwLS07Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgqcyA9PSAnKCcgJiYga3AgPD0gMCkg eyAvKiBPcGVuIHBhcmVuIG5vdCBpbiBicmFjZSAqLwotICAgICAgICAgICAgICAgICAgICBwcCsr OyAgICAgICAgICAgICAgIC8qIENvdW50IGl0ICovCi0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICpyID0gKnM7ICAgICAgICAgICAgICAgIC8qIE5vdyBjb3B5IHJlc3VsdGluZyBi eXRlICovCi0gICAgICAgICAgICAgICAgaWYgKCEqcikgICAgICAgICAgICAgICAgLyogSWYgTlVM LCBkb25lLiAqLwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYg KCpyID09ICcpJyAmJiBrcCA8PSAwKSB7IC8qIENsb3NpbmcgcGFyZW4sIGNvdW50IGl0LiAqLwot ICAgICAgICAgICAgICAgICAgICBpZiAoLS1wcCA9PSAwKSB7ICAgIC8qIEZpbmFsIG9uZT8gKi8K LSAgICAgICAgICAgICAgICAgICAgICAgICpyID0gTlVMOyAgICAgICAvKiBNYWtlIGl0IGEgdGVy bWluYXRpbmcgbnVsbCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgKihyM3AgLSAxKSA9IE5V TDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHMrKzsgICAgICAgICAgICAvKiBQb2ludCBwYXN0 IGl0IGluIHNvdXJjZSBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAxOyAg ICAgICAgICAvKiBGbGFnIHdlJ3ZlIGdvdCBhbGwgdGhlIGFyZ3MgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBEb25lIHdpdGggd2hpbGUgbG9vcCAqLwotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm ICgqciA9PSAnLCcgJiYga3AgPD0gMCkgeyAvKiBDb21tYSAqLwotICAgICAgICAgICAgICAgICAg ICBpZiAocHAgPT0gMSkgeyAgICAgICAgICAvKiBJZiBub3Qgd2l0aGluICgpJ3MsICovCi0gICAg ICAgICAgICAgICAgICAgICAgICBpZiAoYXJnbiA+PSBGTkFSR1MpIHsgLyogVG9vIG1hbnkgYXJn cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMrKzsgcisrOyAgIC8qIEtlZXAgY29s bGVjdGluZyBmbGl0KCkgc3RyaW5nICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg ICAqciA9IE5VTDsgICAgICAgICAgIC8qIE5ldyBhcmcsIHNraXAgcGFzdCBjb21tYSAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgYXJncFthcmduKytdID0gcisxOyAvKiBJbiByYW5nZSwgcG9p bnQgdG8gbmV3IGFyZyAqLwotICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg IC8qIE90aGVyd2lzZSBqdXN0IHNraXAgcGFzdCAgKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgcysrOyByKys7ICAgICAgICAgICAgICAgLyogQWR2YW5jZSBwb2ludGVycyAq LwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCF5KSAgICAgICAgICAgICAgICAgICAg IC8qIElmIHdlIGRpZG4ndCBmaW5kIGNsb3NpbmcgcGFyZW4gKi8KLSAgICAgICAgICAgICAgYXJn biA9IC0xOwotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAg ICAgICAgICAgY2hhciBidWZbMjRdOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInp6c3Ry aW5nIGZ1bmN0aW9uIG5hbWUiLHZuYW1idWYseSk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjAx MCwienpzdHJpbmcgZnVuY3Rpb24gcjMiLHIzLDApOwotICAgICAgICAgICAgICAgIGZvciAoeSA9 IDA7IHkgPCBhcmduOyB5KyspIHsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsImFy ZyAlMmQgIix5KTsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjAxMCxidWYsYXJncFt5XSww KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8K LQkgICAgewotCSAgICAgLyogSW4gY2FzZSB0aGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgY29u c3RydWN0ZWQgKi8KLQkJY2hhciBidWZbNjRdOyBjaGFyICogcCA9IGJ1ZjsgaW50IG4gPSA2NDsg Ci0JCWlmICh6enN0cmluZyh2bmFtYnVmLCZwLCZuKSA+IC0xKQotCQkgIGNrc3RybmNweSh2bmFt YnVmLGJ1Ziw2NCk7Ci0JICAgIH0KLSAgICAgICAgICAgIHZwID0gZm5ldmFsKHZuYW1idWYsYXJn cCxhcmduLHIzKTsgLyogRXZhbHVhdGUgdGhlIGZ1bmN0aW9uLiAqLwotICAgICAgICAgICAgaWYg KHZwKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGRlZmluaXRpb24gbm90IGVtcHR5ICov Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCgqbmV3KysgPSAqdnArKykpIHsgLyogY29weSBpdCB0 byBvdXRwdXQgc3RyaW5nICovCi0gICAgICAgICAgICAgICAgICAgIGlmICgtLW4yIDwgMCkgeyAg ICAgICAgLyogd2F0Y2ggb3V0IGZvciBvdmVyZmxvdyAqLwotICAgICAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjEwMSwienpzdHJpbmcgZmFpbCAxMiIsIiIsZGVwdGgpOwotICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHIyKSB7IGZyZWUocjIpOyByMiA9IE5VTEw7IH0KLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChyMykgeyBmcmVlKHIzKTsgcjMgPSBOVUxMOyB9Ci0jaWZkZWYgRFZO QU1CVUYKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2bmFtYnVmKSBmcmVlKHZuYW1idWYp OwotI2VuZGlmIC8qIERWTkFNQlVGICovCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4o LTEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIG5ldy0tOyAgICAgICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciB0ZXJtaW5hdGlu ZyBudWxsICovCi0gICAgICAgICAgICAgICAgbjIrKzsgICAgICAgICAgICAgICAgICAgLyogdG8g YWxsb3cgZm9yIGZ1cnRoZXIgZGVwb3NpdHMuICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBpZiAocjIpIHsgZnJlZShyMik7IHIyID0gTlVMTDsgfQotICAgICAgICAgICAgaWYgKHIzKSB7 IGZyZWUocjMpOyByMyA9IE5VTEw7IH0KLSAgICAgICAgICAgIGJyZWFrOwotCSAgY2FzZSAncSc6 CQkJLyogMjk5IFN0cmluZyB0byBiZSB0YWtlIGxpdGVyYWxseSAqLwotCSAgICBxdW90aW5nID0g MTsJCS8qIDI5OSAqLwotICAgICAgICAgIGNhc2UgJyQnOiAgICAgICAgICAgICAgICAgICAgIC8q IEFuIGVudmlyb25tZW50IHZhcmlhYmxlICovCi0gICAgICAgICAgY2FzZSAndic6ICAgICAgICAg ICAgICAgICAgICAgLyogT3IgYSBuYW1lZCBidWlsdGluIHZhcmlhYmxlLiAqLwotICAgICAgICAg IGNhc2UgJ20nOiAgICAgICAgICAgICAgICAgICAgIC8qIE9yIGEgbWFjcm8gL2xvbmcgdmFyaWFi bGUgKi8KLSAgICAgICAgICBjYXNlICdzJzogICAgICAgICAgICAgICAgICAgICAvKiAxOTYgTWFj cm8gc3Vic3RyaW5nICovCi0gICAgICAgICAgY2FzZSAnOic6ICAgICAgICAgICAgICAgICAgICAg LyogMTk2IFwtdmFyaWFibGUgc3Vic3RyaW5nICovCi0gICAgICAgICAgICBwcCA9IDA7Ci0gICAg ICAgICAgICBwID0gcysyOyAgICAgICAgICAgICAgICAgICAgLyogJC9WL00gbXVzdCBiZSBmb2xs b3dlZCBieSAobmFtZSkgKi8KLSAgICAgICAgICAgIGlmICgqcCAhPSAnKCcpIHsgICAgICAgICAg ICAvKiBhcyBpbiBcJChIT01FKSBvciBcVihjb3VudCkgKi8KLSAgICAgICAgICAgICAgICAqbmV3 KysgPSAqcysrOyAgICAgICAgICAvKiBJZiBub3QsIGp1c3QgY29weSBpdCAqLwotICAgICAgICAg ICAgICAgIGlmICgtLW4yIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6 enN0cmluZyBvdmVyZmxvdyAzIiwiIixkZXB0aCk7Ci0jaWZkZWYgRFZOQU1CVUYKLSAgICAgICAg ICAgICAgICAgICAgaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1Zik7Ci0jZW5kaWYgLyogRFZOQU1C VUYgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcCsr OwotICAgICAgICAgICAgcCsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIDFz dCBjaGFyIG9mIG5hbWUgKi8KLSAgICAgICAgICAgIHEgPSB2bmFtYnVmOyAgICAgICAgICAgICAg ICAvKiBDb3B5IHRoZSBuYW1lICovCi0gICAgICAgICAgICB5ID0gMDsgICAgICAgICAgICAgICAg ICAgICAgLyogaW50byBhIHNlcGFyYXRlIGJ1ZmZlciAqLwotCSAgICBkZWJ1ZyhGMTEwLCI+Pj4+ IFxccShBUkcpIixwLDApOwotICAgICAgICAgICAgd2hpbGUgKHkrKyA8IFZOQU1MKSB7ICAgICAg IC8qIFdhdGNoIG91dCBmb3IgbmFtZSB0b28gbG9uZyAqLwotICAgICAgICAgICAgICAgIGlmICgq cCA9PSAnKCcpIHsgICAgICAgIC8qIFBhcmVucyBjYW4gYmUgbmVzdGVkLi4uICovCi0JCSAgICBp ZiAoKihwLTEpICE9IENNRFEpCS8qIDI5OSAqLwotCQkgICAgICBwcCsrOwotICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoKnAgPT0gJyknKSB7IC8qIE5hbWUgcHJvcGVybHkgdGVybWluYXRlZCB3 aXRoICcpJyAqLwotCQkgICAgaWYgKCoocC0xKSAhPSBDTURRKQkvKiAyOTkgKi8KLQkJICAgICAg cHAtLTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBwID09IDApIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHArKzsgICAgICAgICAgICAvKiBNb3ZlIHNvdXJjZSBwb2ludGVyIHBhc3QgJykn ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKCpxID0gKnApID09IE5V TCkgICAvKiBTdHJpbmcgZW5kcyBiZWZvcmUgJyknICovCi0gICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICBwKys7IHErKzsgICAgICAgICAgICAgICAvKiBBZHZhbmNlIHBv aW50ZXJzICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqcSA9IE5VTDsgICAgICAgICAg ICAgICAgICAgLyogVGVybWluYXRlIHRoZSB2YXJpYWJsZSBuYW1lICovCi0gICAgICAgICAgICBp ZiAoeSA+PSBWTkFNTCkgeyAgICAgICAgICAgLyogSGFuZGxlIHBhdGhvbG9naWNhbCBjYXNlICov Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCpwICYmICgqcCAhPSAnKScpKSAvKiBvZiB2ZXJ5IGxv bmcgc3RyaW5nIGVudGVyZWQgKi8KLSAgICAgICAgICAgICAgICAgIHArKzsgICAgICAgICAgICAg ICAgICAgIC8qIGFzIHZhcmlhYmxlIG5hbWUuICovCi0gICAgICAgICAgICAgICAgaWYgKCpwID09 ICcpJykgcCsrOyAgICAgICAvKiBTa2lwIGFoZWFkIHRvIHRoZSBlbmQgb2YgaXQuICovCi0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBzID0gcDsgICAgICAgICAgICAgICAgICAgICAgLyogQWRq dXN0IGdsb2JhbCBzb3VyY2UgcG9pbnRlciAqLwotICAgICAgICAgICAgczMgPSB2bmFtYnVmOwot ICAgICAgICAgICAgeDMgPSAwOwotICAgICAgICAgICAgd2hpbGUgKCpzMysrKSB4MysrOwotICAg ICAgICAgICAgcCA9IG1hbGxvYyh4MyArIDEpOyAgICAgICAgIC8qIE1ha2UgdGVtcG9yYXJ5IHNw YWNlICovCi0gICAgICAgICAgICBpZiAocCAmJiAhcXVvdGluZykgewkvKiBJZiB3ZSBnb3QgdGhl IHNwYWNlICovCi0gICAgICAgICAgICAgICAgdnAgPSB2bmFtYnVmOyAgICAgICAgICAgLyogUG9p bnQgdG8gb3JpZ2luYWwgKi8KLSAgICAgICAgICAgICAgICBzdHJjcHkocCx2cCk7ICAgICAgICAg ICAvKiAoc2FmZSkgTWFrZSBhIGNvcHkgb2YgaXQgKi8KLSAgICAgICAgICAgICAgICB5ID0gVk5B TUw7ICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgbmFtZSBidWZmZXIgKi8KLSAgICAgICAgICAg ICAgICB6enN0cmluZyhwLCZ2cCwmeSk7ICAgICAvKiBFdmFsdWF0ZSB0aGUgY29weSAqLwotICAg ICAgICAgICAgICAgIGZyZWUocCk7ICAgICAgICAgICAgICAgIC8qIEZyZWUgdGhlIHRlbXBvcmFy eSBzcGFjZSAqLwotICAgICAgICAgICAgICAgIHAgPSBOVUxMOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgZGVidWcoRjExMCwienpzdHJpbmcgdm5hbWUiLHZuYW1idWYsMCk7Ci0gICAgICAg ICAgICBxID0gTlVMTDsKLQkgICAgaWYgKHggPT0gJ3EnKSB7CQkvKiAyOTkgUXVvdGluZyB0aGlz IHN0cmluZyAqLwotCQl2cCA9IHZuYW1idWY7CQkvKiAyOTkgKi8KLQkJZGVidWcoRjExMCwiPj4+ IFZQIix2cCwwKTsKLQkgICAgfSBlbHNlIGlmICh4ID09ICckJykgewkvKiBMb29rIHVwIGl0cyB2 YWx1ZSAqLwotICAgICAgICAgICAgICAgIHZwID0gZ2V0ZW52KHZuYW1idWYpOyAgIC8qIFRoaXMg d2F5IGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZSAqLwotICAgICAgICAgICAgfSBlbHNlIGlmICh4 ID09ICdtJyB8fCB4ID09ICdzJyB8fCB4ID09ICc6JykgeyAvKiBNYWNybyAvIHN1YnN0ciAqLwot ICAgICAgICAgICAgICAgIGludCBrLCB4MSA9IC0xLCB4MiA9IC0xOwotCQljaGFyIGMgPSBOVUw7 IAotICAgICAgICAgICAgICAgIGsgPSBzdHJsZW4odm5hbWJ1Zik7Ci0gICAgICAgICAgICAgICAg LyogXHMobmFtZVtuOm1dKSAtLSBDb21wYWN0IHN1YnN0cmluZyBub3RhdGlvbiAqLwotICAgICAg ICAgICAgICAgIGlmICgoeCA9PSAncycgfHwgeCA9PSAnOicpICYmIChrID4gMSkpIHsgLyogU3Vi c3RyaW5nIHdhbnRlZCAqLwotCQkgICAgaW50IGJwcmM7Ci0gICAgICAgICAgICAgICAgICAgIGlm ICh2bmFtYnVmW2stMV0gPT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaTsK LSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBrLTE7IGkrKykgewotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2bmFtYnVmW2ldID09ICdbJykgewotCQkJCWJw cmMgPSBib3VuZHNwYWlyKHZuYW1idWYsIjpfLiIsJngxLCZ4MiwmYyk7Ci0JCQkJZGVidWcoRjEx MSwienpzdHJpbmcgYm91bmRzcGFpciIsdm5hbWJ1ZixicHJjKTsKLQkJCQlkZWJ1ZyhGMDAwLCJ6 enN0cmluZyBib3VuZHNwYWlyIGMiLCIiLGMpOwotCQkJCWlmIChicHJjID4gLTEpIHsKLQkJCQkg ICAgdm5hbWJ1ZltpXSA9IE5VTDsKLQkJCQkgICAgaWYgKHgxIDwgMSkKLQkJCQkgICAgICB4MSA9 IDE7Ci0JCQkJICAgIHgxLS07CS8qIEFkanVzdCB0byAwLWJhc2UgKi8KLQkJCQl9Ci0JCQkJYnJl YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg ICAgfQotCQkgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoeCA9 PSAnOicpIHsJCS8qIFZhcmlhYmxlIHR5cGUgKHMgb3IgOikgKi8KLSAgICAgICAgICAgICAgICAg ICAgdnAgPSB2bmFtYnVmOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCSAgICB5ID0gaXNh YXJyYXkodm5hbWJ1ZikgPwotCQkJbXh4bG9vayhtYWN0YWIsdm5hbWJ1ZixubWFjKSA6Ci0JCQlt eGxvb2sobWFjdGFiLHZuYW1idWYsbm1hYyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5ID4g LTEpIHsJLyogR290IGRlZmluaXRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHZwID0g bWFjdGFiW3ldLm12YWw7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICB2cCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICB9Ci0JCWRlYnVnKEYxMTEsInp6c3RyaW5nIHZwIix2cCwodnA9PU5VTEwpPzA6c3Ry bGVuKHZwKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodnApIHsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKCh4ID09ICdzJyB8fCB4ID09ICc6JykgJiYgKGsgPiAxKSkgewotICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ29tcGFjdCBzdWJzdHJpbmcgbm90YXRpb24gKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmICh4MiA9PSAwKSB7ICAvKiBMZW5ndGggKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2cCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKHgxID4gLTEpIHsgLyogU3RhcnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBr ID0gc3RybGVuKHZwKTsKLQkJCSAgICBkZWJ1ZyhGMTAxLCI+Pj4gayIsIiIsayk7Ci0JCQkgICAg LyogSWYgaXQncyBvZmYgdGhlIGVuZCwgcmVzdWx0IGlzIGVtcHR5ICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHgxID4gaykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2cCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChr ID4gMCkgewotCQkJCS8qIFN0YXkgaW4gYm91bmRzICovCi0JCQkJaWYgKGMgPT0gJ18nICYmIHgy ID4gaykJLyogc3RhcnRwb3NfZW5kcG9zICovCi0JCQkJICB4MiA9IGs7Ci0JCQkJaWYgKGMgPT0g JzonICYmIHgxICsgeDIgPiBrKSAvKiBzdGFydDpsZW5ndGggKi8KLQkJCQkgIHgyID0gLTE7Ci0J CQkJZGVidWcoRjEwMSwiPj4+IHgyIiwiIix4Mik7Ci0JCQkJZGVidWcoRjAwMCwiPj4+IGMiLCIi LGMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHEgPSBtYWxsb2Moaysx KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweShxLHZwKTsg Lyogc2FmZSAqLwotCQkJCSAgICBpZiAoYyA9PSAnLicpIHsKLQkJCQkJcVt4MSsxXSA9IE5VTDsK LQkJCQkJZGVidWcoRjAwMCwiWFhYLiBxIixxLGMpOwotCQkJCSAgICB9Ci0JCQkJICAgIGlmIChj ID09ICc6JykgeyAvKiBzdGFydDpsZW5ndGggKi8KLQkJCQkJaWYgKCh4MiA+IC0xKSAmJiAoKHgx ICsgeDIpIDw9IGspKSB7Ci0JCQkJCSAgICBxW3gxK3gyXSA9IE5VTDsKLQkJCQkJfQotCQkJCQlk ZWJ1ZyhGMDAwLCJYWFg6IHEiLHEsYyk7Ci0JCQkJICAgIH0gZWxzZSBpZiAoYyA9PSAnXycpIHsg Lyogc3RhcnRfZW5kcG9zICovCi0JCQkJCWlmICh4MSA+PSB4MikgewotCQkJCQkgICAgcVt4MSA9 IDBdID0gTlVMOwotCQkJCQl9IGVsc2UgaWYgKHgyIDwgayAmJiB4MiA+IC0xKSB7Ci0JCQkJCSAg ICBxW3gyXSA9IE5VTDsKLQkJCQkJfQotCQkJCQlkZWJ1ZyhGMDAwLCJYWFhfIHEiLHEsYyk7Ci0J CQkJICAgIH0KLQkJCQkgICAgdnAgPSBxK3gxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgdnAgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB2cCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLQkJCWRlYnVnKEYxMTAs IlhYWCB2bmFtYnVmIix2bmFtYnVmLDApOwotCQkJZGVidWcoRjAwMCwiWFhYIGMiLCIiLGMpOwot CQkJZGVidWcoRjEwMSwiWFhYIHgxIiwiIix4MSk7Ci0JCQlkZWJ1ZyhGMTAxLCJYWFggeDIiLCIi LHgyKTsKLQkJCWRlYnVnKEYxMTAsIlhYWCByZXN1bHQiLHZwLDApOwotI2lmZGVmIERFQlVHCi0g ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCF2cCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBzdHJsZW4odnApOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRp ZiAvKiBERUJVRyAqLwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIG9yICovCi0gICAgICAg ICAgICAgICAgdnAgPSBudmxvb2sodm5hbWJ1Zik7ICAgLyogdGhpcyB3YXkgZm9yIGJ1aWx0aW4g dmFyaWFibGUgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh2cCkgeyAgICAgICAg ICAgICAgICAgICAvKiBJZiBkZWZpbml0aW9uIG5vdCBlbXB0eSAqLwotICAgICAgICAgICAgICAg IHdoaWxlICgoKm5ldysrID0gKnZwKyspKSAvKiBjb3B5IGl0IHRvIG91dHB1dCBzdHJpbmcuICov Ci0gICAgICAgICAgICAgICAgICBpZiAoLS1uMiA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAg ICBpZiAocSkgZnJlZShxKTsKLSAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6enN0 cmluZyBvdmVyZmxvdyA0IiwiIixkZXB0aCk7Ci0jaWZkZWYgRFZOQU1CVUYKLSAgICAgICAgICAg ICAgICAgICAgICBpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKLSNlbmRpZiAvKiBEVk5BTUJV RiAqLwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgbmV3LS07ICAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBv dmVyIHRlcm1pbmF0aW5nIG51bGwgKi8KLSAgICAgICAgICAgICAgICBuMisrOyAgICAgICAgICAg ICAgICAgICAvKiB0byBhbGxvdyBmb3IgZnVydGhlciBkZXBvc2l0cy4gKi8KLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGlmIChxKSB7Ci0gICAgICAgICAgICAgICAgZnJlZShxKTsKLSAgICAg ICAgICAgICAgICBxID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot I2VuZGlmIC8qIE5PU1BMICovICAgICAgICAgICAgICAgICAgICAgIC8qIEhhbmRsZSBcbm5uIGV2 ZW4gaWYgTk9TUEwuICovCi0KLSNpZm5kZWYgTk9LVkVSQlMKLSAgICAgICAgY2FzZSAnSyc6Ci0g ICAgICAgIGNhc2UgJ2snOiB7Ci0gICAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRhYiBrdmVy YnNbXTsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgbmt2ZXJiczsKLSNkZWZpbmUgS19CVUZMRU4g MzAKLSAgICAgICAgICAgIGNoYXIga2J1ZltLX0JVRkxFTiArIDFdOyAgICAvKiBLZXkgdmVyYiBu YW1lIGJ1ZmZlciAqLwotICAgICAgICAgICAgaW50IHgsIHksIHosIGJyYWNlID0gMDsKLSAgICAg ICAgICAgIHMgKz0gMjsKLS8qCi0gIFdlIGFzc3VtZSB0aGF0IHRoZSB2ZXJiIG5hbWUgaXMge2Jy YWNlZH0sIG9yIGl0IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUKLSAgc3RyaW5nLCBzLCBvciBp dCBlbmRzIHdpdGggYSBzcGFjZSwgY29udHJvbCBjaGFyYWN0ZXIsIG9yIGJhY2tzbGFzaC4KLSov Ci0gICAgICAgICAgICBwID0ga2J1ZjsgICAgICAgICAgICAgICAgICAgLyogQ29weSB2ZXJiIG5h bWUgaW50byBsb2NhbCBidWZmZXIgKi8KLSAgICAgICAgICAgIHggPSAwOwotICAgICAgICAgICAg aWYgKCpzID09ICd7JykgIHsKLSAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICAgICAg YnJhY2UrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlICgoeCsrIDwgS19CVUZM RU4pICYmICgqcyA+IFNQKSAmJiAoKnMgIT0gQ01EUSkpIHsKLSAgICAgICAgICAgICAgICBpZiAo YnJhY2UgJiYgKnMgPT0gJ30nKSB7Ci0gICAgICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICpw KysgPSAqcysrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJhY2UgPSAwOwotICAgICAg ICAgICAgKnAgPSBOVUw7ICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZS4gKi8KLSAgICAg ICAgICAgIHAgPSBrYnVmOyAgICAgICAgICAgICAgICAgICAvKiBQb2ludCBiYWNrIHRvIGJlZ2lu bmluZyAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwienpzdHJpbmcga3ZlcmIiLHAsMCk7Ci0g ICAgICAgICAgICB5ID0geGxvb2t1cChrdmVyYnMscCxua3ZlcmJzLCZ4KTsgLyogTG9vayBpdCB1 cCAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwienpzdHJpbmcgbG9va3VwIiwwLHkpOwotICAg ICAgICAgICAgaWYgKHkgPiAtMSkgewotICAgICAgICAgICAgICAgIGRva3ZlcmIoVkNNRCx5KTsK LSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAv KiBJcyBpdCBhIG1hY3JvPyAqLwotICAgICAgICAgICAgICAgIHkgPSBteGxvb2sobWFjdGFiLHAs bm1hYyk7Ci0gICAgICAgICAgICAgICAgaWYgKHkgPiAtMSkgewotICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJ6enN0cmluZyBteGxvb2siLHAseSk7Ci0gICAgICAgICAgICAgICAgICAg IGlmICgoeiA9IGRvZG8oeSxOVUxMLGNtZHN0a1tjbWRsdmxdLmNjZmxncykpID4gMCkgewotICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGNtcHVzaCgpID4gLTEpIHsgIC8qIFB1c2ggY29tbWFu ZCBwYXJzZXIgc3RhdGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gaW50 IGlmYzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWZjc2F2ID0gaWZjOyAvKiBQ dXNoIElGIGNvbmRpdGlvbiBvbiBzdGFjayAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHkgPSBwYXJzZXIoMSk7ICAgIC8qIE5ldyBwYXJzZXIgdG8gZXhlY3V0ZSBtYWNybyAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNtcG9wKCk7ICAgICAgICAgIC8qIFBvcCBjb21tYW5k IHBhcnNlciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYyA9IGlmY3NhdjsgICAg IC8qIFJlc3RvcmUgSUYgY29uZGl0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHkgPT0gMCkgeyAgICAgLyogTm8gZXJyb3JzLCBpZ25vcmUgYWN0aW9ucyAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gbXJ2YWxbbWFjbHZsKzFdOyAvKiBJZiBPSyBz ZXQgcmV0dXJuIHZhbCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9 PSBOVUxMKSBwID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogQ2FuJ3QgcHVzaCBhbnkg bW9yZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInp6c3RyaW5n IHB1c2hlZCB0b28gZGVlcCIsIiIsZGVwdGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4/SW50ZXJuYWwgZXJy b3I6IHp6c3RyaW5nIHN0YWNrIG92ZXJmbG93XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNtcG9wKCkg PiAtMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9ICIiOwotICAgICAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot I2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgfQotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0KLSAgICAgICAgZGVmYXVsdDogICAgICAg ICAgICAgICAgICAgICAgICAvKiBNYXliZSBpdCdzIGEgYmFja3NsYXNoIGNvZGUgKi8KLSAgICAg ICAgICB5ID0geHhlc2MoJnMpOyAgICAgICAgICAgICAgICAvKiBHbyBpbnRlcnByZXQgaXQgKi8K LSAgICAgICAgICBpZiAoeSA8IDApIHsgICAgICAgICAgICAgICAgICAvKiBVcG9uIGZhaWx1cmUg Ki8KLSAgICAgICAgICAgICAgKm5ldysrID0gKGNoYXIpIHg7ICAgICAgICAvKiBKdXN0IHF1b3Rl IHRoZSBuZXh0IGNoYXJhY3RlciAqLwotICAgICAgICAgICAgICBzICs9IDI7ICAgICAgICAgICAg ICAgICAgIC8qIE1vdmUgcGFzdCB0aGUgcGFpciAqLwotICAgICAgICAgICAgICBuMiAtPSAyOwot ICAgICAgICAgICAgICBpZiAobjIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJ6enN0cmluZyBvdmVyZmxvdyA1IiwiIixkZXB0aCk7Ci0jaWZkZWYgRFZOQU1CVUYKLSAgICAg ICAgICAgICAgICAgIGlmICh2bmFtYnVmKSBmcmVlKHZuYW1idWYpOwotI2VuZGlmIC8qIERWTkFN QlVGICovCi0gICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgLyogYW5kIGdvIGJhY2sgZm9y IG1vcmUgKi8KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAqbmV3KysgPSAoY2hh cikgeTsgICAgICAgIC8qIGVsc2UgZGVwb3NpdCBpbnRlcnByZXRlZCB2YWx1ZSAqLwotICAgICAg ICAgICAgICBpZiAoLS1uMiA8IDApIHsKLSAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInp6 c3RyaW5nIG92ZXJmbG93IDYiLCIiLGRlcHRoKTsKLSNpZmRlZiBEVk5BTUJVRgotICAgICAgICAg ICAgICAgICAgaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1Zik7Ci0jZW5kaWYgLyogRFZOQU1CVUYg Ki8KLSAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgKm5ldyA9IE5VTDsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogVGVybWluYXRlIHRoZSBuZXcgc3RyaW5nICovCi0gICAgZGVidWcoRjAxMCwi enpzdHJpbmcgd2hpbGUgZXhpdCIsKnMyLDApOwotCi0gICAgZGVwdGgtLTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQWRqdXN0IHN0YWNrIGRlcHRoIGdhdWdlICovCi0gICAgKnMyID0g bmV3OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29weSByZXN1bHRzIGJhY2sgaW50byAq LwotICAgICpuID0gbjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBhcmd1bWVu dCBhZGRyZXNzZXMgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBvayIsIiIsZGVwdGgpOwot I2lmZGVmIERWTkFNQlVGCi0gICAgaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1Zik7Ci0jZW5kaWYg LyogRFZOQU1CVUYgKi8KLSAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBhbmQgcmV0dXJuLiAqLwotfQotI2VuZGlmIC8qIE5PSUNQICovCgpkaWZmIC0tZ2l0IGEvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czUuYyBiL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXM1LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGM0Yzg3ODIuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja3V1czUuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNDI3ICswLDAgQEAK LSNpbmNsdWRlICJja2NzeW0uaCIKLQotaW50IHhjbWRzcmMgPSAwOwotCi0jaWZkZWYgTk9JQ1AK LWludCBjbWRzcmMoKSB7IHJldHVybigwKTsgfQotI2VuZGlmIC8qIE5PSUNQICovCi0KLS8qICBD IEsgVSBVIFMgNSAtLSAgIlVzZXIgSW50ZXJmYWNlIiBmb3IgQy1LZXJtaXQsIHBhcnQgNSAgKi8K LQotLyoKLSAgQXV0aG9yczoKLSAgICBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwK LSAgICAgIFRoZSBLZXJtaXQgUHJvamVjdCwgQ29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsg Q2l0eQotICAgIEplZmZyZXkgRSBBbHRtYW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+ Ci0gICAgICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkKLQotICBDb3B5cmln aHQgKEMpIDE5ODUsIDIwMTEsCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBp biB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRo ZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGlu IHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotKi8K LQotLyogSW5jbHVkZXMgKi8KLQotI2luY2x1ZGUgImNrY2RlYi5oIgotI2luY2x1ZGUgImNrY2Fz Yy5oIgotI2luY2x1ZGUgImNrY2tlci5oIgotI2luY2x1ZGUgImNrdXVzci5oIgotCi0jaWZkZWYg RENNREJVRgotY2hhciAqbGluZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJh Y3RlciBidWZmZXIgZm9yIGFueXRoaW5nICovCi1jaGFyICp0bXBidWY7Ci0jZWxzZQotY2hhciBs aW5lW0xJTkJVRlNJWisxXTsKLWNoYXIgdG1wYnVmW1RNUEJVRlNJWisxXTsgICAgICAgICAgICAg ICAvKiBUZW1wb3JhcnkgYnVmZmVyICovCi0jZW5kaWYgLyogRENNREJVRiAqLwotCi0jaWZuZGVm IE5PSUNQCi0KLSNpbmNsdWRlICJja2NuZXQuaCIKLSNpZm5kZWYgTk9DU0VUUwotI2luY2x1ZGUg ImNrY3hsYS5oIgotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNpZmRlZiBNQUMKLSNpbmNsdWRlICJj a21hc20uaCIKLSNlbmRpZiAvKiBNQUMgKi8KLSNpZmRlZiBDS19TU0wKLSNpbmNsdWRlICJja19z c2wuaCIKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotZXh0ZXJuIGNoYXIgKiBja19jcnllYXI7ICAg ICAgIC8qIChja2NtYWkuYykgTGF0ZXN0IEMtS2VybWl0IGNvcHlyaWdodCB5ZWFyICovCi0KLSNp ZmRlZiBPUzIKLSNpbmNsdWRlICJja29ldGMuaCIKLSNpZm5kZWYgTlQKLSNkZWZpbmUgSU5DTF9O T1BNCi0jZGVmaW5lIElOQ0xfVklPIC8qIE5lZWRlZCBmb3IgY2tvY29uLmggKi8KLSNpbmNsdWRl IDxvczIuaD4KLSN1bmRlZiBDT01NRU5UCi0jZWxzZSAvKiBOVCAqLwotI2luY2x1ZGUgPHdpbmRv d3MuaD4KLSNkZWZpbmUgVEFQSV9DVVJSRU5UX1ZFUlNJT04gMHgwMDAxMDAwNAotI2luY2x1ZGUg PHRhcGkuaD4KLSNpbmNsdWRlIDxtY3guaD4KLSNpbmNsdWRlICJja250YXAuaCIKLSNkZWZpbmUg QVBJUkVUIFVMT05HCi1leHRlcm4gaW50IERpYWxlckhhbmRsZTsKLWV4dGVybiBpbnQgU3RhcnRl ZEZyb21EaWFsZXI7Ci0jZW5kaWYgLyogTlQgKi8KLSNpbmNsdWRlICJja29jb24uaCIKLSNpbmNs dWRlICJja29rZXkuaCIKLSNpZmRlZiBLVUkKLSNpbmNsdWRlICJpa3VpLmgiCi0jZW5kaWYgLyog S1VJICovCi0jaWZkZWYgcHV0Y2hhcgotI3VuZGVmIHB1dGNoYXIKLSNlbmRpZiAvKiBwdXRjaGFy ICovCi0jZGVmaW5lIHB1dGNoYXIoeCkgY29ub2MoeCkKLWV4dGVybiBpbnQgY3Vyc29yX3NhdmUg OwotZXh0ZXJuIGJvb2wgY3Vyc29yZW5hW10gOwotI2VuZGlmIC8qIE9TMiAqLwotCi0vKiAyMDEw LTAzLTA5IFNNUy4gIFZBWCBDIFYzLjEtMDUxIG5lZWRzIDxzdGF0Lmg+IGZvciBvZmZfdC4gKi8K LSNpZmRlZiBWTVMKLSNpbmNsdWRlIDxzdGF0Lmg+Ci0jZW5kaWYgLyogZGVmIFZNUyAqLwotCi0v KiBGb3IgZm9ybWF0dGVkIHNjcmVlbnMsICJtb3JlPyIgcHJvbXB0aW5nLCBldGMuICovCi0KLSNp ZmRlZiBGVDE4Ci0jZGVmaW5lIGlzeGRpZ2l0KGMpIGlzZGlnaXQoYykKLSNlbmRpZiAvKiBGVDE4 ICovCi0KLSNpZmRlZiBTVFJBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJhdHVz IENvbXB1dGVyLCBJbmMuICBWT1MgKi8KLSNpZmRlZiBwdXRjaGFyCi0jdW5kZWYgcHV0Y2hhcgot I2VuZGlmIC8qIHB1dGNoYXIgKi8KLSNkZWZpbmUgcHV0Y2hhcih4KSBjb25vYyh4KQotI2lmZGVm IGdldGNoYXIKLSN1bmRlZiBnZXRjaGFyCi0jZW5kaWYgLyogZ2V0Y2hhciAqLwotI2RlZmluZSBn ZXRjaGFyKHgpIGNvbmluYygwKQotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLQotLyogRXh0ZXJuYWwg dmFyaWFibGVzICovCi0KLWV4dGVybiBpbnQgY2FycmllciwgY2R0aW1vLCBsb2NhbCwgcXVpZXQs IGJhY2tncmQsIGJnc2V0LCBzb3NpLCB4c3VzcGVuZCwKLSAgYmluYXJ5LCBlc2NhcGUsIHhhcmdz LCBmbG93LCBjbWRtc2ssIGR1cGxleCwgY2t4ZWNoLCBzZXNsb2csIHdoYXQsCi0gIGluc2VydmVy LCBkaXJhY3RpdmUsIHRsZXZlbCwgY3dkZiwgbmZ1bmNzLCBtc2dmbGcsIHJlbWFwcGQsIGhpbnRz LCBtZG10eXAsCi0gIHppbmNudCwgY21hc2ssIHJjZmxhZywgc3VjY2VzcywgeGl0c3RhLCBwZmxh ZywgdG5sbSwgdG5fbmxtLCB4aXR3YXJuLAotICBkZWJzZXMsIHhhc2ttb3JlLCBwYXJpdHksIHNh dmVhc2ssIHdhc2Nsb3NlZCwgd2h5Y2xvc2VkLCBjZGFjdGl2ZSwKLSAgcmNkYWN0aXZlLCBrZWVw YWxsY2hhcnMsIGNtZF9lcnI7Ci0KLSNpZmRlZiBMT0NVUwotZXh0ZXJuIGludCBsb2N1cywgYXV0 b2xvY3VzOwotI2VuZGlmIC8qIExPQ1VTICovCi0KLSNpZm5kZWYgTk9NU0VORAotZXh0ZXJuIGlu dCBhZGRsaXN0OwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQotI2lmZGVmIENLX1NQRUVECi1leHRl cm4gaW50IHByZWZpeGluZzsKLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotCi1leHRlcm4gaW50IGdf bWF0Y2hkb3Q7Ci0KLSNpZmRlZiBSRUNVUlNJVkUKLWV4dGVybiBpbnQgcmVjdXJzaXZlOwotI2Vu ZGlmIC8qIFJFQ1VSU0lWRSAqLwotZXh0ZXJuIGludCB4ZmlsZXR5cGU7Ci0KLSNpZmRlZiBJS1NE Q09ORgotZXh0ZXJuIGNoYXIgKiBpa3NkY29uZjsKLWV4dGVybiBpbnQgaWtzZGNmOwotI2VuZGlm IC8qIElLU0RDT05GICovCi0KLSNpZmRlZiBDS19SRUNBTEwKLWV4dGVybiBpbnQgb25fcmVjYWxs OwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotCi1leHRlcm4gaW50IG5nZXRwYXRoLCBleGl0b25j bG9zZTsKLWV4dGVybiBjaGFyICogZ2V0cGF0aFtdOwotZXh0ZXJuIENIQVIgKiBlcGt0bXNnOwot Ci1leHRlcm4gY2hhciAqIHNuZF9tb3ZlOwotZXh0ZXJuIGNoYXIgKiBzbmRfcmVuYW1lOwotZXh0 ZXJuIGNoYXIgKiByY3ZfbW92ZTsKLWV4dGVybiBjaGFyICogcmN2X3JlbmFtZTsKLWV4dGVybiBj aGFyICogZ19zbmRfbW92ZTsKLWV4dGVybiBjaGFyICogZ19zbmRfcmVuYW1lOwotZXh0ZXJuIGNo YXIgKiBnX3Jjdl9tb3ZlOwotZXh0ZXJuIGNoYXIgKiBnX3Jjdl9yZW5hbWU7Ci0KLWV4dGVybiBj aGFyICogbm1bXTsKLQotI2lmZGVmIENLX1VUU05BTUUKLWV4dGVybiBjaGFyIHVubV9tY2hbXTsK LWV4dGVybiBjaGFyIHVubV9tb2RbXTsKLWV4dGVybiBjaGFyIHVubV9uYW1bXTsKLWV4dGVybiBj aGFyIHVubV9yZWxbXTsKLWV4dGVybiBjaGFyIHVubV92ZXJbXTsKLSNlbmRpZiAvKiBDS19VVFNO QU1FICovCi0KLSNpZm5kZWYgTk9QVVNICi0jaWZuZGVmIE5PRlJJTExTCi1leHRlcm4gY2hhciBl ZGl0b3JbXTsKLWV4dGVybiBjaGFyIGVkaXRmaWxlW107Ci1leHRlcm4gY2hhciBlZGl0b3B0c1td OwotI2lmZGVmIEJST1dTRVIKLWV4dGVybiBjaGFyIGJyb3dzZXJbXTsKLWV4dGVybiBjaGFyIGJy b3dzb3B0c1tdOwotZXh0ZXJuIGNoYXIgYnJvd3N1cmxbXTsKLSNlbmRpZiAvKiBCUk9XU0VSICov Ci0jZW5kaWYgLyogIE5PRlJJTExTICovCi0jZW5kaWYgLyogTk9QVVNIICovCi0KLSNpZm5kZWYg Tk9GUklMTFMKLSNpZm5kZWYgTk9SRU5BTUUKLV9QUk9UT1RZUChWT0lEIHNob3JlbmFtZSwgKHZv aWQpKTsKLSNlbmRpZgkvKiBOT1JFTkFNRSAqLwotI2VuZGlmCS8qIE5PRlJJTExTICovCi0KLSNp Zm5kZWYgTk9TRVJWRVIKLWV4dGVybiBjaGFyICogeF91c2VyLCAqIHhfcGFzc3dkLCAqIHhfYWNj dDsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0jaWZkZWYgQ0tMT0dESUFMCi1leHRlcm4gaW50 IGRpYWxvZzsKLWV4dGVybiBjaGFyIGRpYWZpbFtdOwotI2VuZGlmIC8qIENLTE9HRElBTCAqLwot Ci0jaWZkZWYgQ0tST09UCi1leHRlcm4gaW50IGNrcm9vdGVycjsKLSNlbmRpZiAvKiBDS1JPT1Qg Ki8KLQotI2lmbmRlZiBOT1NQTAotZXh0ZXJuIGludCBjZmlsZWYsIHh4ZG90LCB2YXJldmFsOwot ZXh0ZXJuIGNoYXIgY21kZmlsW107Ci0KLXN0cnVjdCBsb2NhbHZhciAqIGxvY2FsaGVhZFtDTURT VEtMXTsKLXN0cnVjdCBsb2NhbHZhciAqIGxvY2FsdGFpbCA9IE5VTEw7Ci1zdHJ1Y3QgbG9jYWx2 YXIgKiBsb2NhbG5leHQgPSBOVUxMOwotCi1fUFJPVE9UWVAoIFZPSUQgc2hvc2V4cCwgKHZvaWQp ICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBWT0lEIHNob2lucHV0LCAodm9pZCkgKTsKLV9QUk9UT1RZ UCggc3RhdGljIGNoYXIgZ2V0dG9rLCAgICh2b2lkKSApOwotX1BST1RPVFlQKCBzdGF0aWMgVk9J RCBmYWN0b3IsICAgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBWT0lEIHRlcm0sICAgICAo dm9pZCkgKTsKLV9QUk9UT1RZUCggc3RhdGljIFZPSUQgdGVybXAsICAgICh2b2lkKSApOwotX1BS T1RPVFlQKCBzdGF0aWMgVk9JRCBleHBycCwgICAgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIHN0YXRp YyBWT0lEIGV4cHIsICAgICAodm9pZCkgKTsKLV9QUk9UT1RZUCggc3RhdGljIFZPSUQgc2ltcGxl LCAgICh2b2lkKSApOwotX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBzaW1wbGVyLCAgKHZvaWQpICk7 Ci1fUFJPVE9UWVAoIHN0YXRpYyBWT0lEIHNpbXBsZXN0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCgg c3RhdGljIENLX09GRl9UIHhwYXJzZSwgICAodm9pZCkgKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwot I2lmbmRlZiBOT1NIT1cKLV9QUk9UT1RZUCggaW50IHNob19pa3MsICh2b2lkKSApOwotI2VuZGlm IC8qIE5PU0hPVyAqLwotCi0jaWZkZWYgTUFDCi1jaGFyICogY2twcm9tcHQgPSAiTWFjLUtlcm1p dD4iOyAgICAgICAgLyogRGVmYXVsdCBwcm9tcHQgZm9yIE1hY2ludG9zaCAqLwotY2hhciAqIGlr cHJvbXB0ID0gIklLU0Q+IjsKLSNlbHNlICAvKiBOb3QgTUFDICovCi0jaWZkZWYgTk9TUEwKLSNp ZmRlZiBPUzIKLWNoYXIgKiBja3Byb21wdCA9ICJLLTk1PiAiOyAgICAgICAgICAgICAvKiBEZWZh dWx0IHByb21wdCBmb3IgV2luMzIgKi8KLWNoYXIgKiBpa3Byb21wdCA9ICJJS1NEPiAiOwotI2Vs c2UKLWNoYXIgKiBja3Byb21wdCA9ICJDLUtlcm1pdD4iOwotY2hhciAqIGlrcHJvbXB0ID0gIklL U0Q+IjsKLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UgIC8qIE5PU1BMICovCi0jaWZkZWYgT1MyCi0v KiBEZWZhdWx0IHByb21wdCBmb3IgT1MvMiBhbmQgV2luMzIgKi8KLSNpZmRlZiBOVAotY2hhciAq IGNrcHJvbXB0ID0gIltcXGZyZXBsYWNlKFxcZmxvbmdwYXRoKFxcdihkaXIpKSwvLFxcXFwpXSBL LTk1PiAiOwotY2hhciAqIGlrcHJvbXB0ID0gIltcXGZyZXBsYWNlKFxcZmxvbmdwYXRoKFxcdihk aXIpKSwvLFxcXFwpXSBJS1NEPiAiOwotI2Vsc2UgIC8qIE5UICovCi1jaGFyICogY2twcm9tcHQg PSAiW1xcZnJlcGxhY2UoXFx2KGRpciksLyxcXFxcKV0gSy05NT4gIjsKLWNoYXIgKiBpa3Byb21w dCA9ICJbXFxmcmVwbGFjZShcXHYoZGlyKSwvLFxcXFwpXSBJS1NEPiAiOwotI2VuZGlmIC8qIE5U ICovCi0jZWxzZSAgLyogT1MyICovCi0jaWZkZWYgVk1TCi1jaGFyICogY2twcm9tcHQgPSAiXFx2 KGRpcikgQy1LZXJtaXQ+IjsgLyogRGVmYXVsdCBwcm9tcHQgVk1TICovCi1jaGFyICogaWtwcm9t cHQgPSAiXFx2KGRpcikgSUtTRD4iOwotI2Vsc2UKLWNoYXIgKiBja3Byb21wdCA9ICIoXFx2KGRp cikpIEMtS2VybWl0PiI7IC8qIERlZmF1bHQgcHJvbXB0IGZvciBvdGhlcnMgKi8KLWNoYXIgKiBp a3Byb21wdCA9ICIoXFx2KGRpcikpIElLU0Q+IjsKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAv KiBOVCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyogTUFDICovCi0KLSNpZm5kZWYg Q0NITUFYUEFUSAotI2RlZmluZSBDQ0hNQVhQQVRIIDI1NwotI2VuZGlmIC8qIENDSE1BWFBBVEgg Ki8KLWNoYXIgaW5pZGlyW0NDSE1BWFBBVEhdID0geyBOVUwsIE5VTCB9OyAvKiBEaXJlY3Rvcnkg SU5JIGZpbGUgZXhlY3V0ZWQgZnJvbSAqLwotCi0jaWZkZWYgVE5DT0RFCi1leHRlcm4gaW50IHRu X2JfbmxtOyAgICAgICAgICAgICAgICAgICAgLyogVEVMTkVUIEJJTkFSWSBuZXdsaW5lIG1vZGUg Ki8KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotI2lmbmRlZiBOT0tWRVJCUwotZXh0ZXJuIHN0cnVj dCBrZXl0YWIga3ZlcmJzW107ICAgICAgICAgIC8qIFRhYmxlIG9mIFxLdmVyYnMgKi8KLWV4dGVy biBpbnQgbmt2ZXJiczsgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgXEt2ZXJicyAq LwotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0KLSNpZm5kZWYgTk9QVVNICi1leHRlcm4gaW50IG5v cHVzaDsKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmZGVmIENLX1JFQ0FMTAotZXh0ZXJuIGlu dCBjbV9yZWNhbGw7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0KLWV4dGVybiBjaGFyICpjY250 YWJbXTsKLQotLyogUHJpbnRlciBzdHVmZiAqLwotCi1leHRlcm4gY2hhciAqcHJpbnRlcm5hbWU7 Ci1leHRlcm4gaW50IHByaW50cGlwZTsKLSNpZmRlZiBCUFJJTlQKLWV4dGVybiBpbnQgcHJpbnRi aWRpLCBwcG9ydHBhcml0eSwgcHBvcnRmbG93OwotZXh0ZXJuIGxvbmcgcHBvcnRzcGVlZDsKLSNl bmRpZiAvKiBCUFJJTlQgKi8KLQotI2lmZGVmIE9TMgotX1BST1RPVFlQIChpbnQgb3MyZ2V0Y3As ICh2b2lkKSApOwotX1BST1RPVFlQIChpbnQgb3MyZ2V0Y3BsaXN0LCAoaW50ICosIGludCkgKTsK LSNpZmRlZiBPUzJNT1VTRQotZXh0ZXJuIGludCB0dF9tb3VzZTsKLSNlbmRpZiAvKiBPUzJNT1VT RSAqLwotZXh0ZXJuIGludCB0dF91cGRhdGUsIHR0X3VwZG1vZGUsIHVwZG1vZGUsIHR0X3V0Zjg7 Ci0jaWZuZGVmIElLU0RPTkxZCi1leHRlcm4gaW50IHR0X3N0YXR1c1tdOwotI2VuZGlmIC8qIElL U0RPTkxZICovCi0jaWZkZWYgUENGT05UUwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdGVybV9mb250 W107Ci0jZWxzZQotI2lmZGVmIEtVSQotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgKiB0ZXJtX2ZvbnQ7 Ci0jZW5kaWYgLyogS1VJICovCi0jZW5kaWYgLyogUENGT05UUyAqLwotZXh0ZXJuIGludCBudGVy bWZvbnQsIHR0X2ZvbnQsIHR0X2ZvbnRfc2l6ZTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyIGNvbG9y bm9ybWFsLCBjb2xvcnVuZGVybGluZSwgY29sb3JzdGF0dXMsCi0gICAgY29sb3JoZWxwLCBjb2xv cnNlbGVjdCwgY29sb3Jib3JkZXIsIGNvbG9yZ3JhcGhpYywgY29sb3JkZWJ1ZywKLSAgICBjb2xv cnJldmVyc2UsIGNvbG9yY21kLCBjb2xvcml0YWxpYzsKLWV4dGVybiBpbnQgcHJpb3JpdHk7Ci1l eHRlcm4gc3RydWN0IGtleXRhYiBwcnR5dGFiW107Ci1leHRlcm4gaW50IG5wcnR5OwotY2hhciAq IGNtZG1hYyA9IE5VTEw7Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBWTVMKLV9QUk9UT1RZ UCAoaW50IHprZXJtaW5pLCAoY2hhciAqLCBpbnQsIGNoYXIgKikgKTsKLSNlbmRpZiAvKiBWTVMg Ki8KLQotZXh0ZXJuIGxvbmcgdmVybnVtOwotZXh0ZXJuIGludCBpbmVjaG8sIGluc2lsZW5jZSwg aW5idWZzaXplLCBudmFycywgaW5pbnRyOwotZXh0ZXJuIGNoYXIgKnByb3R2LCAqZm5zdiwgKmNt ZHYsICp1c2VydiwgKmNreHYsICpja3p2LCAqY2t6c3lzLCAqeGxhdiwKLSAqY2tuZXR2LCAqY2xj bWRzOwotI2lmZGVmIE9TMgotZXh0ZXJuIGNoYXIgKmNreXY7Ci0jZW5kaWYgLyogT1MyICovCi0j aWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLWV4dGVybiBjaGFyICogY2thdGh2OwotI2VuZGlmIC8q IENLX0FVVEhFTlRJQ0FUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi1leHRlcm4gY2hhciAqIGNrc3Ns djsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0jaWZuZGVmIENS WVBUX0RMTAotZXh0ZXJuIGNoYXIgKiBja2NycHY7Ci0jZW5kaWYgLyogQ1JZUFRfRExMICovCi0j ZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotCi0jaWZkZWYgU1NIQlVJTFRJTgotZXh0ZXJuIGNo YXIgKmNrc3NodjsKLSNpZmRlZiBTRlRQX0JVSUxUSU4KLWV4dGVybiBjaGFyICpja3NmdHB2Owot I2VuZGlmIC8qIFNGVFBfQlVJTFRJTiAqLwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLQotI2lm ZGVmIFROQ09ERQotZXh0ZXJuIGNoYXIgKmNrdGVsdjsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNp Zm5kZWYgTk9GVFAKLSNpZm5kZWYgU1lTRlRQCi1leHRlcm4gY2hhciAqIGNrZnRwdjsKLSNlbmRp ZiAvKiBTWVNGVFAgKi8KLSNlbmRpZiAvKiBOT0ZUUCAqLwotCi1leHRlcm4gaW50IHNydmlkbDsK LQotI2lmZGVmIE9TMgotZXh0ZXJuIGNoYXIgKmNrb25ldHY7Ci1leHRlcm4gaW50IGludGVybTsK LSNpZmRlZiBDS19ORVRCSU9TCi1leHRlcm4gY2hhciAqY2tvbmJpdjsKLSNlbmRpZiAvKiBDS19O RVRCSU9TICovCi0jaWZkZWYgT1MyTU9VU0UKLWV4dGVybiBjaGFyICpja29tb3V2OwotI2VuZGlm IC8qIE9TMk1PVVNFICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9MT0NBTAotZXh0 ZXJuIGNoYXIgKmNvbm52OwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZm5kZWYgTk9ESUFMCi1l eHRlcm4gY2hhciAqZGlhbHY7Ci0jZW5kaWYgLyogTk9ESUFMICovCi0jaWZuZGVmIE5PU0NSSVBU Ci1leHRlcm4gY2hhciAqbG9naW52OwotZXh0ZXJuIGludCBzZWNobzsKLSNlbmRpZiAvKiBOT1ND UklQVCAqLwotCi0jaWZuZGVmIE5PRElBTAotZXh0ZXJuIGludCBubWRtLCBkaXJsaW5lOwotZXh0 ZXJuIHN0cnVjdCBrZXl0YWIgbWRtdGFiW107Ci0jZW5kaWYgLyogTk9ESUFMICovCi0KLWV4dGVy biBpbnQgbmV0d29yaywgbmV0dHlwZSwgdHRucHJvdG87Ci0KLSNpZmRlZiBPUzIKLSNpZm5kZWYg Tk9URVJNCi0vKiBTRVQgVEVSTUlOQUwgaXRlbXMuLi4gKi8KLWV4dGVybiBpbnQgdHRfdHlwZSwg dHRfYXJyb3csIHR0X2tleXBhZCwgdHRfd3JhcCwgdHRfYW5zd2VyLCB0dF9zY3JzaXplW107Ci1l eHRlcm4gaW50IHR0X2JlbGwsIHR0X3JvbGxbXSwgdHRfY3RzdG1vLCB0dF9jdXJzb3IsIHR0X3Bh Y2luZywgdHRfdHlwZV9tb2RlOwotZXh0ZXJuIGNoYXIgYW5zd2VyYmFja1tdOwotZXh0ZXJuIHN0 cnVjdCB0dF9pbmZvX3JlYyB0dF9pbmZvW107ICAgIC8qIEluZGV4ZWQgYnkgdGVybWluYWwgdHlw ZSAqLwotZXh0ZXJuIGludCBtYXhfdHQ7Ci0jZW5kaWYgLyogTk9URVJNICovCi0jZW5kaWYgLyog T1MyICovCi0KLV9QUk9UT1RZUCggVk9JRCBzaG90cm0sICh2b2lkKSApOwotX1BST1RPVFlQKCBp bnQgc2hvZmVhLCAodm9pZCkgKTsKLQotI2lmZGVmIE9TMgotZXh0ZXJuIGludCB0dF9yb3dzW10s IHR0X2NvbHNbXTsKLSNlbHNlIC8qIE9TMiAqLwotZXh0ZXJuIGludCB0dF9yb3dzLCB0dF9jb2xz OwotI2VuZGlmIC8qIE9TMiAqLwotZXh0ZXJuIGludCBjbWRfcm93cywgY21kX2NvbHM7Ci0KLSNp ZmRlZiBDS19UTVBESVIKLWV4dGVybiBpbnQgZl90bXBkaXI7ICAgICAgICAgICAgICAgICAgICAv KiBEaXJlY3RvcnkgY2hhbmdlZCB0ZW1wb3JhcmlseSAqLwotZXh0ZXJuIGNoYXIgc2F2ZGlyW107 ICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBkaXJlY3RvcnkgKi8KLSNlbmRpZiAvKiBD S19UTVBESVIgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi1leHRlcm4gaW50IHR0X2NyZCwgdHRfbGZk LCB0dF9lc2NhcGU7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PQ1NFVFMKLWV4 dGVybiBpbnQgbGFuZ3VhZ2UsIG5maWxjLCB0Y3NyLCB0Y3NsLCB0Y3NfdHJhbnNwLCBmY2hhcnNl dDsKLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIGZjc3RhYltdOwotZXh0ZXJuIHN0cnVjdCBjc2luZm8g ZmNzaW5mb1tdOwotI2lmbmRlZiBNQUMKLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIHR0Y3N0YWJbXTsK LSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLWV4dGVybiBsb25nIHNw ZWVkOwotCi0jaWZuZGVmIE5PWE1JVAotZXh0ZXJuIGludCB4bWl0ZiwgeG1pdGwsIHhtaXRwLCB4 bWl0eCwgeG1pdHMsIHhtaXR3LCB4bWl0dDsKLWV4dGVybiBjaGFyIHhtaXRidWZbXTsKLSNlbmRp ZiAvKiBOT1hNSVQgKi8KLQotZXh0ZXJuIGNoYXIgKip4YXJndiwgKnZlcnNpbywgKmNreHN5cywg KmRmdHR5LCAqbHA7Ci0KLSNpZmRlZiBEQ01EQlVGCi1leHRlcm4gY2hhciAqY21kYnVmLCAqYXRt YnVmOyAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXJzICovCi0jaWZuZGVmIE5PU1BMCi1leHRl cm4gY2hhciAqc2F2YnVmOyAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXJzICov Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNlbHNlCi1leHRlcm4gY2hhciBjbWRidWZbXSwgYXRtYnVm W107ICAgICAgICAgLyogQ29tbWFuZCBidWZmZXJzICovCi0jaWZuZGVmIE5PU1BMCi1leHRlcm4g Y2hhciBzYXZidWZbXTsgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXJzICovCi0j ZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLWV4dGVybiBjaGFyIHRv a3RhYltdLCB0dG5hbWVbXSwgcHNhdmVbXTsKLWV4dGVybiBDSEFSIHNzdGF0ZSwgZmVvbDsKLWV4 dGVybiBpbnQgY21mbGdzLCB0ZWNobywgcmVwYXJzLCBuY21kOwotZXh0ZXJuIHN0cnVjdCBrZXl0 YWIgY21kdGFiW107Ci0KLSNpZm5kZWYgTk9TRVRLRVkKLUtFWSAqa2V5bWFwOwotI2lmbmRlZiBP UzIKLSNkZWZpbmUgbWFwa2V5KHgpIGtleW1hcFt4XQotI2VuZGlmIC8qIE9TMiAqLwotTUFDUk8g Km1hY3JvdGFiOwotX1BST1RPVFlQKCBWT0lEIHNob3N0cmRlZiwgKENIQVIgKikgKTsKLSNlbmRp ZiAvKiBOT1NFVEtFWSAqLwotCi1leHRlcm4gaW50IGNtZGx2bDsKLQotI2lmbmRlZiBOT1NQTAot ZXh0ZXJuIHN0cnVjdCBtdGFiICptYWN0YWI7Ci1leHRlcm4gc3RydWN0IGtleXRhYiBtYWNrZXlb XTsKLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIHZhcnRhYltdLCBmbmN0YWJbXSwgaWZ0YWJbXTsKLWV4 dGVybiBpbnQgbWFjbHZsLCBubWFjLCBtZWNobywgZm5kaWFncywgZm5lcnJvciwgZm5zdWNjZXNz LCBuaWY7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotRklMRSAqdGZpbGVbTUFYVEFLRV07ICAgICAg ICAgICAgICAgICAgIC8qIFRBS0UgZmlsZSBzdGFjayAqLwotY2hhciAqdGZuYW1bTUFYVEFLRV07 Ci1pbnQgdGZsaW5lW01BWFRBS0VdOwotCi1pbnQgdG9wY21kID0gLTE7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogY21kdGFiIGluZGV4IG9mIGN1cnJlbnQgY29tbWFuZCAqLwotaW50IGhhdmV0 b2tlbiA9IDA7Ci1leHRlcm4gaW50IGRibHF1bzsgICAgICAgICAgICAgICAgICAgICAgLyogRG91 YmxlcXVvdGluZyBlbmFibGVkICovCi0KLSNpZmRlZiBEQ01EQlVGICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBJbml0aWFsaXphdGlvbiBmaWxlc3BlYyAqLwotY2hhciAqa2VybXJjID0gTlVM TDsKLSNlbHNlCi1jaGFyIGtlcm1yY2JbS0VSTVJDTF07Ci1jaGFyICprZXJtcmMgPSBrZXJtcmNi OwotI2VuZGlmIC8qIERDTURCVUYgKi8KLQotaW50IG5vaGVyYWxkID0gMDsKLWludCBjbV9yZXRy eSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHJldHJ5IGVuYWJsZWQgKi8K LXh4X3N0cnAgeHhzdHJpbmcgPSB6enN0cmluZzsKLQotI2lmbmRlZiBOT1hGRVIKLWV4dGVybiBp bnQgZGlzcGxhLCBieWVfYWN0aXZlLCBwcm90b2NvbCwgcGt0bG9nLCByZW1maWxlLCByZW1waXBl LCB1bmtjcywKLSAga2VlcCwgbGZfb3B0cywgZm5jbnYsIHBrdHBhdXMsIGF1dG9kbCwgeGZyY2Fu LCB4ZnJjaHIsIHhmcm51bSwgc3J2dGltLAotICBzcnZkaXMsIHF1ZXJ5LCByZXRyYW5zLCBzdHJl YW1lZCwgcmVsaWFibGUsIGNydW5jaGVkLCB0aW1lb3V0cywKLSAgZm5ycGF0aCwgYXV0b3BhdGgs IHJwYWNrZXRzLCBzcGFja2V0cywgZXBrdHJjdmQsIHNydnBpbmc7Ci0KLSNpZmRlZiBDS19BVVRP REwKLWV4dGVybiBpbnQgaW5hdXRvZGwsIGNtZGFkbDsKLSNlbmRpZiAvKiBDS19BVVRPREwgKi8K LQotI2lmbmRlZiBOT1NFUlZFUgotZXh0ZXJuIGludCBlbl9hc2csIGVuX2N3ZCwgZW5fY3B5LCBl bl9kZWwsIGVuX2RpciwgZW5fZmluLCBlbl9ieWUsIGVuX3JldCwKLSAgZW5fZ2V0LCBlbl9ob3Ms IGVuX3F1ZSwgZW5fcmVuLCBlbl9zZW4sIGVuX3NldCwgZW5fc3BhLCBlbl90eXAsIGVuX3dobywK LSAgZW5fbWFpLCBlbl9wcmksIGVuX21rZCwgZW5fcm1kLCBlbl94aXQsIGVuX2VuYTsKLSNlbmRp ZiAvKiBOT1NFUlZFUiAqLwotCi1leHRlcm4gaW50IGF0Y2FwciwKLSAgYXRlbmNpLCBhdGVuY28s IGF0ZGF0aSwgYXRkYXRvLCBhdGxlbmksIGF0bGVubywgYXRibGtpLCBhdGJsa28sCi0gIGF0dHlw aSwgYXR0eXBvLCBhdHNpZGksIGF0c2lkbywgYXRzeXNpLCBhdHN5c28sIGF0ZGlzaSwgYXRkaXNv OwotCi0jaWZkZWYgU1RSQVRVUwotZXh0ZXJuIGludCBhdGZybWksIGF0ZnJtbywgYXRjcmVpLCBh dGNyZW8sIGF0YWN0aSwgYXRhY3RvOwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLQotI2lmZGVmIENL X1BFUk1TCi1leHRlcm4gaW50IGF0bHByaSwgYXRscHJvLCBhdGdwcmksIGF0Z3BybzsKLSNlbmRp ZiAvKiBDS19QRVJNUyAqLwotCi0jaWZkZWYgQ0tfTE9HSU4KLWV4dGVybiBjaGFyICogYW5vbmZp bGU7ICAgICAgICAgICAgICAgICAvKiBBbm9ueW1vdXMgbG9naW4gaW5pdCBmaWxlICovCi1leHRl cm4gY2hhciAqIGFub25yb290OyAgICAgICAgICAgICAgICAgLyogQW5vbnltb3VzIGZpbGUtc3lz dGVtIHJvb3QgKi8KLWV4dGVybiBjaGFyICogdXNlcmZpbGU7ICAgICAgICAgICAgICAgICAvKiBG b3JiaWRkZW4gdXNlciBmaWxlICovCi1leHRlcm4gaW50IGlzZ3Vlc3Q7ICAgICAgICAgICAgICAg ICAgICAgLyogRmxhZyBmb3IgYW5vbnltb3VzIHVzZXIgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAq LwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgRENNREJVRgotaW50ICp4cXVpZXQgPSBO VUxMOwotaW50ICp4dmFyZXYgPSBOVUxMOwotI2Vsc2UKLWludCB4cXVpZXRbQ01EU1RLTF07Ci1p bnQgeHZhcmV2W0NNRFNUS0xdOwotI2VuZGlmIC8qIERDTURCVUYgKi8KLQotY2hhciAqIHByc3Ry aW5nW0NNRFNUS0xdOwotCi0jaWZuZGVmIE5PU1BMCi0KLWV4dGVybiBsb25nIGNrX2FsYXJtOwot ZXh0ZXJuIGNoYXIgYWxybV9kYXRlW10sIGFscm1fdGltZVtdOwotCi0vKiBMb2NhbCBkZWNsYXJh dGlvbnMgKi8KLQotc3RhdGljIGludCBudWxjbWQgPSAwOyAgICAgICAgICAgICAgICAgIC8qIEZs YWcgZm9yIG5leHQgY21kIHRvIGJlIGlnbm9yZWQgKi8KLQotLyogRGVmaW5pdGlvbnMgZm9yIHBy ZWRlZmluZWQgbWFjcm9zICovCi0KLS8qIEZpcnN0LCB0aGUgc2luZ2xlLWxpbmUgbWFjcm9zLCBp bnN0YWxsZWQgd2l0aCBhZGRtYWMoKS4uLiAqLwotCi0vKiBJQk0tTElORU1PREUgbWFjcm8gKi8K LWNoYXIgKm1faWJtID0gInNldCBwYXJpdHkgbWFyaywgc2V0IGR1cGwgaGFsZiwgc2V0IGhhbmRz aCB4b24sIHNldCBmbG93IG5vbmUiOwotCi0vKiBGQVRBTCBtYWNybyAqLwotY2hhciAqbV9mYXQg PSAiaWYgZGVmIFxcJTEgZWNobyBcXCUxLCBpZiBub3QgPSBcXHYobG9jYWwpIDAgaGFuZ3VwLCBz dG9wIDEiOwotCi0jaWZkZWYgQ0tfU1BFRUQKLSNpZmRlZiBJUklYNjUKLWNoYXIgKm1fZmFzdCA9 ICJzZXQgd2luIDMwLCBzZXQgcmVjIHBhY2sgNDAwMCwgc2V0IHByZWZpeCBjYXV0aW91cyI7Ci0j ZWxzZQotI2lmZGVmIElSSVgKLS8qIEJlY2F1c2Ugb2YgYnVnIGluIHRlbG5ldCBzZXJ2ZXIgKi8K LWNoYXIgKm1fZmFzdCA9ICJzZXQgd2luZG93IDMwLCBzZXQgcmVjIHBhY2sgNDAwMCwgc2V0IHNl bmQgcGFjayA0MDAwLFwKLSBzZXQgcHJlZiBjYXV0aW91cyI7Ci0jZWxzZQotI2lmZGVmIHBkcDEx Ci1jaGFyICptX2Zhc3QgPSAic2V0IHdpbiAzLCBzZXQgcmVjIHBhY2sgMTAyNCwgc2V0IHByZWZp eCBjYXV0aW91cyI7Ci0jZWxzZQotI2lmZGVmIEJJR0JVRk9LCi1jaGFyICptX2Zhc3QgPSAic2V0 IHdpbiAzMCwgc2V0IHJlYyBwYWNrIDQwMDAsIHNldCBwcmVmaXggY2F1dGlvdXMiOwotI2Vsc2UK LWNoYXIgKm1fZmFzdCA9ICJzZXQgd2luIDQsIHNldCByZWMgcGFjayAyMjAwLCBzZXQgcHJlZml4 IGNhdXRpb3VzIjsKLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotI2VuZGlmIC8qIElSSVggKi8KLSNl bmRpZiAvKiBJUklYNjUgKi8KLSNlbmRpZiAvKiBwZHAxMSAqLwotI2lmZGVmIHBkcDExCi1jaGFy ICptX2NhdXRpb3VzID0gInNldCB3aW4gMiwgc2V0IHJlYyBwYWNrIDUxMiwgc2V0IHByZWZpeGlu ZyBjYXV0aW91cyI7Ci0jZWxzZQotY2hhciAqbV9jYXV0aW91cyA9ICJzZXQgd2luIDQsIHNldCBy ZWMgcGFjayAxMDAwLCBzZXQgcHJlZml4aW5nIGNhdXRpb3VzIjsKLSNlbmRpZiAvKiBwZHAxMSAq LwotY2hhciAqbV9yb2J1c3QgPSAic2V0IHdpbiAxLCBzZXQgcmVjIHBhY2sgOTAsIHNldCBwcmVm aXhpbmcgYWxsLCBcCi1zZXQgcmVsaWFibGUgb2ZmLCBzZXQgY2xlYXJjaGFubmVsIG9mZiI7Ci0j ZWxzZQotI2lmZGVmIEJJR0JVRk9LCi0jaWZkZWYgSVJJWDY1Ci1jaGFyICptX2Zhc3QgPSAic2V0 IHdpbiAzMCwgc2V0IHJlYyBwYWNrIDQwMDAiOwotI2Vsc2UKLSNpZmRlZiBJUklYCi1jaGFyICpt X2Zhc3QgPSAic2V0IHdpbiAzMCwgc2V0IHJlYyBwYWNrIDQwMDAsIHNldCBzZW5kIHBhY2sgNDAw MCI7Ci0jZWxzZQotY2hhciAqbV9mYXN0ID0gInNldCB3aW4gMzAsIHNldCByZWMgcGFjayA0MDAw IjsKLSNlbmRpZiAvKiBJUklYICovCi0jZW5kaWYgLyogSVJJWDY1ICovCi0jZWxzZSAvKiBOb3Qg QklHQlVGT0sgKi8KLWNoYXIgKm1fZmFzdCA9ICJzZXQgd2luIDQsIHNldCByZWMgcGFjayAyMjAw IjsKLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotY2hhciAqbV9jYXV0aW91cyA9ICJzZXQgd2luIDQs IHNldCByZWMgcGFjayAxMDAwIjsKLWNoYXIgKm1fcm9idXN0ID0gInNldCB3aW4gMSwgc2V0IHJl YyBwYWNrIDkwLCBzZXQgcmVsaWFibGUgb2ZmIjsKLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotCi0j aWZkZWYgVk1TCi1jaGFyICptX3B1cmdlID0gInJ1biBwdXJnZSBcXCUqIjsKLSNlbmRpZiAvKiBW TVMgKi8KLQotI2lmZGVmIE9TMgotY2hhciAqbV9tYW51YWwgPSAiYnJvd3NlIFxcdihleGVkaXIp ZG9jcy9tYW51YWwva2VybWl0OTUuaHRtIjsKLSNlbmRpZiAvKiBPUzIgKi8KLQotLyogTm93IHRo ZSBtdWx0aWxpbmUgbWFjcm9zLCBkZWZpbmVkIHdpdGggYWRkbW1hYygpLi4uICovCi0KLS8qIEZP UiBtYWNybyBmb3IgXCVpLXN0eWxlIGxvb3AgdmFyaWFibGVzIChzZWUgZG9mb3IoKS4uLikgKi8K LQotY2hhciAqZm9yX2RlZltdID0geyAiX2Fzc2lnbiBfZm9yXFx2KGNtZGxldmVsKSB7IF9nZXRh cmdzLCIsCi0iZGVmIFxcXFxcXCUxIFxcZmV2YWwoXFwlMiksOl8uLnRvcCxpZiBcXCU1IFxcXFxc XCUxIFxcJTMgZ290byBfLi5ib3QsIiwKLSJcXCU2LDpfLi5pbmMsaW5jciBcXFxcXFwlMSBcXCU0 LGdvdG8gXy4udG9wLDpfLi5ib3QsX3B1dGFyZ3N9LCIsCi0iZGVmIGJyZWFrIGdvdG8gXy4uYm90 LCBkZWYgY29udGludWUgZ290byBfLi5pbmMsIiwKLSJkbyBfZm9yXFx2KGNtZGxldmVsKSBcXCUx IFxcJTIgXFwlMyBcXCU0IHsgXFwlNSB9LF9hc3NpZ24gX2ZvclxcdihjbWRsZXZlbCkiLAotIiJ9 OwotCi0vKiBUaGlzIGlzIHRoZSBGT1IgbWFjcm8gd2hlbiB0aGUgbG9vcCB2YXJpYWJsZSBpcyBp dHNlbGYgYSBtYWNybyAqLwotCi1jaGFyICpmb3pfZGVmW10gPSB7ICJfYXNzaWduIF9mb3JcXHYo Y21kbGV2ZWwpIHsgX2dldGFyZ3MsIiwKLSJkZWYgXFwlMSBcXGZldmFsKFxcJTIpLDpfLi50b3As aWYgXFwlNSBcXCUxIFxcJTMgZ290byBfLi5ib3QsIiwKLSJcXCU2LDpfLi5pbmMsaW5jciBcXCUx IFxcJTQsZ290byBfLi50b3AsOl8uLmJvdCxfcHV0YXJnc30sIiwKLSJkZWYgYnJlYWsgZ290byBf Li5ib3QsIGRlZiBjb250aW51ZSBnb3RvIF8uLmluYywiLAotImRvIF9mb3JcXHYoY21kbGV2ZWwp IFxcJTEgXFwlMiBcXCUzIFxcJTQgeyBcXCU1IH0sX2Fzc2lnbiBfZm9yXFx2KGNtZGxldmVsKSIs Ci0iIn07Ci0KLS8qIFdISUxFIG1hY3JvICovCi1jaGFyICp3aGlsX2RlZltdID0geyAiX2Fzc2ln biBfd2hpXFx2KGNtZGxldmVsKSB7X2dldGFyZ3MsIiwKLSI6Xy4uaW5jLFxcJTEsXFwlMixnb3Rv IF8uLmluYyw6Xy4uYm90LF9wdXRhcmdzfSwiLAotIl9kZWYgYnJlYWsgZ290byBfLi5ib3QsIF9k ZWYgY29udGludWUgZ290byBfLi5pbmMsIiwKLSJkbyBfd2hpXFx2KGNtZGxldmVsKSxfYXNzaWdu IF93aGlcXHYoY21kbGV2ZWwpIiwKLSIifTsKLQotLyogU1dJVENIIG1hY3JvICovCi1jaGFyICpz d19kZWZbXSA9IHsgIl9hc3NpZ24gX3N3X1xcdihjbWRsZXZlbCkge19nZXRhcmdzLCIsCi0iX2Zv cndhcmQge1xcJTF9LFxcJTIsOmRlZmF1bHQsOl8uLmJvdCxfcHV0YXJnc30sX2RlZiBicmVhayBn b3RvIF8uLmJvdCwiLAotImRvIF9zd19cXHYoY21kbGV2ZWwpLF9hc3NpZ24gX3N3X1xcdihjbWRs ZXZlbCkiLAotIiJ9OwotCi0vKiBYSUYgbWFjcm8gKi8KLWNoYXIgKnhpZl9kZWZbXSA9IHsKLSJf YXNzaWduIF9pZlxcdihjbWRsZXZlbCkge19nZXRhcmdzLFxcJTEsX3B1dGFyZ3N9LCIsCi0iZG8g X2lmXFx2KGNtZGxldmVsKSxfYXNzaWduIF9pZlxcdihjbWRsZXZlbCkiLAotIiJ9OwotCi0vKgot ICBWYXJpYWJsZXMgZGVjbGFyZWQgaGVyZSBmb3IgdXNlIGJ5IG90aGVyIGNrdXVzKi5jIG1vZHVs ZXMuCi0gIFNwYWNlIGlzIGFsbG9jYXRlZCBoZXJlIHRvIHNhdmUgcm9vbSBpbiBja3V1c3IuYy4K LSovCi0jaWZkZWYgRENNREJVRgotc3RydWN0IGNtZHB0ciAqY21kc3RrOwotaW50Ci0gICppZmNt ZCAgPSBOVUxMLAotICAqY291bnQgID0gTlVMTCwKLSAgKmlmdGVzdCA9IE5VTEwsCi0gICppbnRp bWUgPSBOVUxMLAotICAqaW5wY2FzID0gTlVMTCwKLSAgKnRha2VyciA9IE5VTEwsCi0gICptZXJy b3IgPSBOVUxMOwotI2Vsc2UKLXN0cnVjdCBjbWRwdHIgY21kc3RrW0NNRFNUS0xdOwotaW50IGlm Y21kW0NNRFNUS0xdLCBjb3VudFtDTURTVEtMXSwgaWZ0ZXN0W0NNRFNUS0xdLCBpbnRpbWVbQ01E U1RLTF0sCi0gIGlucGNhc1tDTURTVEtMXSwgdGFrZXJyW0NNRFNUS0xdLCBtZXJyb3JbQ01EU1RL TF07Ci0jZW5kaWYgLyogRENNREJVRiAqLwotCi0vKiBNYWNybyBzdGFjayAqLwotCi0jaWZkZWYg Q09NTUVOVAotY2hhciAqdG9wbGluZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgIC8qIFByb2dy YW0gaW52b2NhdGlvbiBhcmcgbGluZSAqLwotY2hhciAqbV9saW5lW01BQ0xFVkVMXSA9IHsgTlVM TCwgTlVMTCB9OyAvKiBTdGFjayBvZiBtYWNybyBpbnZvY2F0aW9uIGxpbmVzICovCi0jZW5kaWYg LyogQ09NTUVOVCAqLwotCi1jaGFyICoqbV94YXJnW01BQ0xFVkVMXTsgICAgICAgICAgICAgICAg LyogUG9pbnRlcnMgdG8gYXJnIHZlY3RvciBhcnJheXMgKi8KLWludCBuX3hhcmdbTUFDTEVWRUxd OyAgICAgICAgICAgICAgICAgICAvKiBTaXplcyBvZiBhcmcgdmVjdG9yIGFycmF5cyAqLwotY2hh ciAqbV9hcmdbTUFDTEVWRUxdW05BUkdTXTsgICAgICAgICAgIC8qIEFyZ3Mgb2YgZWFjaCBsZXZl bCAqLwotaW50IG1hY2FyZ2NbTUFDTEVWRUxdOyAgICAgICAgICAgICAgICAgIC8qIEFyZ2Mgb2Yg ZWFjaCBsZXZlbCAqLwotY2hhciAqbWFjcFtNQUNMRVZFTF07ICAgICAgICAgICAgICAgICAgIC8q IEN1cnJlbnQgcG9zaXRpb24gaW4gZWFjaCBtYWNybyAqLwotY2hhciAqbWFjeFtNQUNMRVZFTF07 ICAgICAgICAgICAgICAgICAgIC8qIEJlZ2lubmluZyBvZiBlYWNoIG1hY3JvIGRlZiAqLwotY2hh ciAqbXJ2YWxbTUFDTEVWRUxdOyAgICAgICAgICAgICAgICAgIC8qIFJFVFVSTiB2YWx1ZSBhdCBl YWNoIGxldmVsICovCi1pbnQgbGFzdGNtZFtNQUNMRVZFTF07ICAgICAgICAgICAgICAgICAgLyog TGFzdCBjb21tYW5kIGF0IGVhY2ggbGV2ZWwgKi8KLWludCB0b3BhcmdjID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBBcmdjIGF0IHRvcCBsZXZlbCAqLwotY2hhciAqKnRvcHhhcmcgPSBO VUxMOyAgICAgICAgICAgICAgICAgIC8qIEFyZ3YgYXQgdG9wIGxldmVsICovCi1jaGFyICp0b3Bh cmdbTUFYQVJHTElTVCsyXTsKLQotLyogR2xvYmFsIFZhcmlhYmxlcyAqLwotCi1jaGFyICpnX3Zh cltHVkFSUysxXTsgICAgICAgICAgICAgICAgICAgLyogR2xvYmFsIFwlYS4ueiBwb2ludGVycyAq LwotZXh0ZXJuIGNoYXIgdmFybmFtW107ICAgICAgICAgICAgICAgICAgIC8qIFwleCB2YXJpYWJs ZSBuYW1lIGJ1ZmZlciAqLwotCi0vKiBBcnJheXMgLS0gRGltZW5zaW9uIG11c3QgYmUgJ3onIC0g QVJSQVlCQVNFICsgMSAqLwotLyogTm90ZTogYV9saW5rW3hdIDwgMCBtZWFucyBubyBsaW5rOyA+ PSAwIGlzIGEgbGluayAqLwotCi1jaGFyICoqYV9wdHJbMzJdOyAgICAgICAgICAgICAgICAgICAg ICAgLyogQXJyYXkgcG9pbnRlcnMsIGZvciBhcnJheXMgYS16ICovCi1pbnQgYV9kaW1bMzJdOyAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGltZW5zaW9ucyBmb3IgZWFjaCBhcnJheSAqLwot aW50IGFfbGlua1szMl07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExpbmsgKGluZGV4IG9m IGxpbmtlZC10by1hcnJheSkgKi8KLQotY2hhciAqKmFhX3B0cltDTURTVEtMXVszMl07ICAgICAg ICAgICAgIC8qIEFycmF5IHN0YWNrIGZvciBhdXRvbWF0aWMgYXJyYXlzICovCi1pbnQgYWFfZGlt W0NNRFNUS0xdWzMyXTsgICAgICAgICAgICAgICAgLyogRGltZW5zaW9ucyBmb3IgZWFjaCBhcnJh eSAqLwotCi0vKiBJTlBVVCBjb21tYW5kIGJ1ZmZlcnMgYW5kIHZhcmlhYmxlcyAqLwotCi1jaGFy ICogaW5wYnVmID0gTlVMTDsgICAgICAgICAgICAgICAgICAgLyogQnVmZmVyIGZvciBJTlBVVCBh bmQgUkVJTlBVVCAqLwotZXh0ZXJuIGNoYXIgKiBpbnBicDsgICAgICAgICAgICAgICAgICAgIC8q IEdsb2JhbC9zdGF0aWMgcG9pbnRlciB0byBpdCAgKi8KLWNoYXIgaW5jaGFyWzJdID0geyBOVUws IE5VTCB9OyAgICAgICAgICAvKiBMYXN0IGNoYXJhY3RlciB0aGF0IHdhcyBJTlBVVCAqLwotaW50 ICBpbmNvdW50ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIElOUFVUIGNoYXJhY3RlciBj b3VudCAqLwotZXh0ZXJuIGludCBpbnN0YXR1czsgICAgICAgICAgICAgICAgICAgIC8qIElOUFVU IHN0YXR1cyAqLwotc3RhdGljIGNoYXIgKiBpX3RleHRbXSA9IHsgICAgICAgICAgICAgIC8qIElO UFVUIHN0YXR1cyB0ZXh0ICovCi0gICAgInN1Y2Nlc3MiLCAidGltZW91dCIsICJpbnRlcnJ1cHRl ZCIsICJpbnRlcm5hbCBlcnJvciIsICJpL28gZXJyb3IiCi19OwotCi1jaGFyIGxibGJ1ZltMQkxT SVpdOyAgICAgICAgICAgICAgICAgICAgLyogQnVmZmVyIGZvciBsYWJlbHMgKi8KLQotI2Vsc2Ug IC8qIE5PU1BMICovCi0KLWludCB0YWtlcnJbTUFYVEFLRV07Ci0jZW5kaWYgLyogTk9TUEwgKi8K LQotc3RhdGljIGNoYXIgKnByZXZkaXIgPSBOVUxMOwotCi1pbnQgcGFjaW5nID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogT1VUUFVUIHBhY2luZyAqLwotCi1jaGFyICp0cDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IGJ1ZmZlciBwb2ludGVyICovCi0K LWludCB0aW1lbGltaXQgPSAwLCBhc2t0aW1lciA9IDA7ICAgICAgICAvKiBUaW1lcnMgZm9yIHRp bWUtbGltaXRlZCBjb21tYW5kcyAqLwotCi0jaWZkZWYgQ0tfQVBDICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQXBwbGljYXRpb24gUHJvZ3JhbSBDb21tYW5kIChBUEMpICovCi1pbnQgYXBj YWN0aXZlID0gQVBDX0lOQUNUSVZFOwotaW50IGFwY3N0YXR1cyA9IEFQQ19PRkY7ICAgICAgICAg ICAgICAgIC8qIE9GRiBieSBkZWZhdWx0IGV2ZXJ5d2hlcmUgKi8KLSNpZmRlZiBEQ01EQlVGCi1j aGFyICphcGNidWY7Ci0jZWxzZQotY2hhciBhcGNidWZbQVBDQlVGTEVOXTsKLSNlbmRpZiAvKiBE Q01EQlVGICovCi0jZW5kaWYgLyogQ0tfQVBDICovCi0KLWV4dGVybiBjaGFyIHBrdGZpbFtdLAot I2lmZGVmIERFQlVHCi0gIGRlYmZpbFtdLAotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgVExP RwotICB0cmFmaWxbXSwKLSNlbmRpZiAvKiBUTE9HICovCi0gIHNlc2ZpbFtdOwotCi0jaWZuZGVm IE5PRlJJTExTCi1leHRlcm4gaW50IHJtYWlsZiwgcnByaW50ZjsgICAgICAgICAgICAgLyogUkVN T1RFIE1BSUwgJiBQUklOVCBpdGVtcyAqLwotZXh0ZXJuIGNoYXIgb3B0YnVmW107Ci0jZW5kaWYg LyogTk9GUklMTFMgKi8KLQotZXh0ZXJuIGludCBub2luaXQ7CQkJLyogRmxhdCB0byBza2lwIGlu aXQgZmlsZSAqLwotCi0jaWZuZGVmIE5PU1BMCi1zdGF0aWMgc3RydWN0IGtleXRhYiBrY2R0YWJb XSA9IHsJLyogU3ltYm9saWMgZGlyZWN0b3J5IG5hbWVzICovCi0jaWZkZWYgTlQKLSAgICB7ICJh cHBkYXRhIiwgIFZOX0FQUERBVEEsICAgMCB9LAotICAgIHsgImNvbW1vbiIsICAgVk5fQ09NTU9O LCAgICAwIH0sCi0gICAgeyAiZGVza3RvcCIsICBWTl9ERVNLVE9QLCAgIDAgfSwKLSNlbmRpZiAv KiBOVCAqLwotICAgIHsgImRvd25sb2FkIiwgVk5fRExESVIsICAgICAwIH0sCi0jaWZkZWYgT1My T1JVTklYCi0gICAgeyAiZXhlZGlyIiwgICBWTl9FWEVESVIsICAgIDAgfSwKLSNlbmRpZiAvKiBP UzJPUlVOSVggKi8KLSAgICB7ICJob21lIiwgICAgIFZOX0hPTUUsICAgICAgMCB9LAotICAgIHsg ImluaWRpciIsICAgVk5fSU5JLCAgICAgICAwIH0sCi0jaWZkZWYgVU5JWAotICAgIHsgImxvY2tk aXIiLCAgVk5fTENLRElSLCAgICAwIH0sCi0jZW5kaWYgLyogVU5JWCAqLwotI2lmZGVmIE5UCi0g ICAgeyAibXlfZG9jdW1lbnRzIixWTl9QRVJTT05BTCwgIDAgfSwKLSAgICB7ICJwZXJzb25hbCIs IFZOX1BFUlNPTkFMLCAgQ01fSU5WIH0sCi0jZW5kaWYgLyogTlQgKi8KLSAgICB7ICJzdGFydHVw IiwgIFZOX1NUQVIsICAgICAgMCB9LAotICAgIHsgInRleHRkaXIiLCAgVk5fVFhURElSLCAgICAw IH0sCi0gICAgeyAidG1wZGlyIiwgICBWTl9URU1QLCAgICAgIDAgfQotfTsKLXN0YXRpYyBpbnQg bmtjZHRhYiA9IChzaXplb2Yoa2NkdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0jZW5k aWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1NQTAotX1BST1RPVFlQKCBWT0lEIGZyZWVsb2Nh bCwgKGludCkgKTsKLV9QUk9UT1RZUCggc3RhdGljIENLX09GRl9UIGV4cG9uLCAoQ0tfT0ZGX1Qs IENLX09GRl9UKSApOwotX1BST1RPVFlQKCBzdGF0aWMgQ0tfT0ZGX1QgZ2NkLCAoQ0tfT0ZGX1Qs IENLX09GRl9UKSApOwotX1BST1RPVFlQKCBzdGF0aWMgQ0tfT0ZGX1QgZmFjdCwgKENLX09GRl9U KSApOwotCi1pbnQgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIG1hY3JvIGRhdGEg c3RydWN0dXJlcy4gKi8KLW1hY2luaSgpIHsgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIG1hY3Rh YiBhbmQgcHJlc2V0IHRoZSBmaXJzdCBlbGVtZW50LiAqLwotICAgIGludCBpOwotICAgIGlmICgh KG1hY3RhYiA9IChzdHJ1Y3QgbXRhYiAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGFiKSAqIE1B Q19NQVgpKSkKLSAgICAgIHJldHVybigtMSk7Ci0gICAgbWFjdGFiWzBdLmt3ZCA9IE5VTEw7Ci0g ICAgbWFjdGFiWzBdLm12YWwgPSBOVUxMOwotICAgIG1hY3RhYlswXS5mbGdzID0gMDsKLSAgICBm b3IgKGkgPSAwOyBpIDwgTUFDTEVWRUw7IGkrKykKLSAgICAgIGxvY2FsaGVhZFtpXSA9IE5VTEw7 Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLS8qICBDIE0gRCBTIFIg QyAgLS0gIFJldHVybnMgY3VycmVudCBjb21tYW5kIHNvdXJjZSAgKi8KLQotLyogIDAgPSB0b3Ag bGV2ZWwsIDEgPSBmaWxlLCAyID0gbWFjcm8sIC0xID0gZXJyb3IgKHNob3VsZG4ndCBoYXBwZW4p ICovCi0KLS8qCi0gIEFzIG9mIDE5IEF1ZyAyMDAwIHRoaXMgcm91dGluZSBpcyBvYnNvbGV0ZS4g IFRoZSBzY2FsYXIgZ2xvYmFsIHZhcmlhYmxlCi0gIHhjbWRzcmMgY2FuIGJlIGNoZWNrZWQgaW5z dGVhZCB0byBzYXZlIHRoZSBvdmVyaGVhZCBvZiBhIGZ1bmN0aW9uIGNhbGwuCi0qLwotaW50Ci1j bWRzcmMoKSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgIHJldHVybih4Y21kc3JjKTsKLSNlbHNlCi0j aWZuZGVmIE5PU1BMCi0gICAgaWYgKGNtZGx2bCA9PSAwKQotICAgICAgcmV0dXJuKDApOwotICAg IGVsc2UgaWYgKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfTUQpCi0gICAgICByZXR1cm4oMik7 Ci0gICAgZWxzZSBpZiAoY21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9URikKLSAgICAgIHJldHVy bigxKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oLTEpOwotI2Vsc2UKLSAgICBpZiAodGxldmVs IDwgMCkKLSAgICAgIHJldHVybigwKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oMSk7Ci0jZW5k aWYgLyogTk9TUEwgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi19Ci0KLS8qICBDIE0gRCBJIE4g SSAgLS0gIEluaXRpYWxpemUgdGhlIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyICAqLwotCi1z dGF0aWMgaW50IGNtZGluaXRlZCA9IDA7ICAgICAgICAgICAgICAgLyogQ29tbWFuZCBwYXJzZXIg aW5pdGlhbGl6ZWQgKi8KLWV4dGVybiBpbnQgY21kaW50OyAgICAgICAgICAgICAgICAgICAgICAv KiBJbnRlcnJ1cHRzIGFyZSBhbGxvd2VkICovCi0jaWZkZWYgQ0tfQVVUT0RMCi1pbnQgY21kYWRs ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0b2Rvd25sb2FkICovCi0jZWxzZQot aW50IGNtZGFkbCA9IDA7Ci0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0KLWNoYXIgKiBrX2luZm9f ZGlyID0gTlVMTDsgICAgICAgICAgICAgICAvKiBXaGVyZSB0byBmaW5kIHRleHQgZmlsZXMgKi8K LSNpZmRlZiBVTklYCi1zdGF0aWMgY2hhciAqIHR4dGRpcltdID0gewotICAgICIvdXNyL2xvY2Fs L2RvYy8iLCAgICAgICAgICAgICAgICAgIC8qIExpbnV4LCBTdW5PUywgLi4uICovCi0gICAgIi91 c3Ivc2hhcmUvbGliLyIsICAgICAgICAgICAgICAgICAgLyogSFAtVVggMTAueHguLi4gKi8KLSAg ICAiL3Vzci9zaGFyZS9kb2MvIiwgICAgICAgICAgICAgICAgICAvKiBPdGhlciBwb3NzaWJpbGl0 aWVzLi4uICovCi0gICAgIi91c3IvbG9jYWwvbGliLyIsICAgICAgICAgICAgICAgICAgLyogTk9U RTogRWFjaCBvZiB0aGVzZSBpcyB0cmllZCAqLwotICAgICIvdXNyL2xvY2FsL3NoYXJlLyIsICAg ICAgICAgICAgICAgIC8qIGFzIGlzLCBhbmQgYWxzbyB3aXRoIGEga2VybWl0ICovCi0gICAgIi91 c3IvbG9jYWwvc2hhcmUvZG9jLyIsICAgICAgICAgICAgLyogc3ViZGlyZWN0b3J5LiAqLwotICAg ICIvdXNyL2xvY2FsL3NoYXJlL2xpYi8iLAotICAgICIvb3B0L2tlcm1pdC8iLCAgICAgICAgICAg ICAgICAgICAgIC8qIFNvbGFyaXMgKi8KLSAgICAiL29wdC9rZXJtaXQvZG9jLyIsCi0gICAgIi9v cHQvIiwKLSAgICAiL3Vzci9kb2MvIiwKLSAgICAiL2RvYy8iLAotICAgICIiCi19OwotI2VuZGlm IC8qIFVOSVggKi8KLQotLyoKLSAgbG9va3VwKCkgY2FjaGUgdG8gc3BlZWQgdXAgc2NyaXB0IGV4 ZWN1dGlvbi4KLQotICBUaGlzIGlzIGEgc3RhdGljIGNhY2hlLiAgSXRlbXMgYXJlIHN0b3JlZCBp biBkZWNyZWFzaW5nIGZyZXF1ZW5jeSBvZgotICByZWZlcmVuY2UgYmFzZWQgb24gc3RhdGlzdGlj cyBmcm9tIGEgcmFuZ2Ugb2Ygc2NyaXB0cy4gIFRoaXMgZ2l2ZXMKLSAgYmV0dGVyIHBlcmZvcm1h bmNlIHRoYW4gYSBkeW5hbWljIGNhY2hlLCB3aGljaCB3b3VsZCByZXF1aXJlIGEgbG90IG1vcmUK LSAgY29kZSBhbmQgYWxzbyB3b3VsZCByZXF1aXJlIHN5c3RlbS1kZXBlbmRlbnQgZWxlbWVudHMg aW5jbHVkaW5nIHN5c3RlbQotICBjYWxscyAoZS5nLiB0byBnZXQgc3Vic2Vjb25kIHRpbWVzIGZv ciBlbnRyeSBhZ2luZykuCi0qLwotI2lmZGVmIFVTRV9MVUNBQ0hFICAgICAgICAgICAgICAgICAg ICAgIC8qIFNldCBpbiBja3V1c3IuaCAqLwotI2RlZmluZSBMVUNBQ0hFIDMyICAgICAgICAgICAg ICAgICAgICAgIC8qIENoYW5nZSB0aGlzIHRvIHJlZHVjZSBjYWNoZSBzaXplICovCi1pbnQgbHVz aXplID0gMDsKLWNoYXIgKiBsdWNtZFtMVUNBQ0hFXTsKLWludCBsdXZhbFtMVUNBQ0hFXTsKLWlu dCBsdWlkeFtMVUNBQ0hFXTsKLXN0cnVjdCBrZXl0YWIgKiBsdXRhYltMVUNBQ0hFXTsKLSNlbmRp ZiAvKiBVU0VfTFVDQUNIRSAqLwotCi1zdGF0aWMgVk9JRAotbHVpbml0KCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgbG9va3VwKCkgY2FjaGUgKi8KLSAgICBp bnQgeCwgeTsKLQotI2lmZGVmIFVTRV9MVUNBQ0hFCi0gICAgeCA9IGxvb2t1cChjbWR0YWIsImlm IixuY21kLCZ5KTsKLSAgICBsdWNtZFtsdXNpemVdID0gImlmIjsKLSAgICBsdXZhbFtsdXNpemVd ID0geDsKLSAgICBsdWlkeFtsdXNpemVdID0geTsKLSAgICBsdXRhYltsdXNpemVdID0gY21kdGFi OwotICAgIGlmICgrK2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKLQotICAgIHggPSBsb29rdXAo aWZ0YWIsIm5vdCIsbmlmLCZ5KTsKLSAgICBsdWNtZFtsdXNpemVdID0gIm5vdCI7Ci0gICAgbHV2 YWxbbHVzaXplXSA9IHg7Ci0gICAgbHVpZHhbbHVzaXplXSA9IHk7Ci0gICAgbHV0YWJbbHVzaXpl XSA9IGlmdGFiOwotICAgIGlmICgrK2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKLQotICAgIHgg PSBsb29rdXAodmFydGFiLCJjbWRsZXZlbCIsbnZhcnMsJnkpOwotICAgIGx1Y21kW2x1c2l6ZV0g PSAiY21kbGV2ZWwiOwotICAgIGx1dmFsW2x1c2l6ZV0gPSB4OwotICAgIGx1aWR4W2x1c2l6ZV0g PSB5OwotICAgIGx1dGFiW2x1c2l6ZV0gPSB2YXJ0YWI7Ci0gICAgaWYgKCsrbHVzaXplID4gTFVD QUNIRSkgcmV0dXJuOwotCi0gICAgeCA9IGxvb2t1cChjbWR0YWIsImdvdG8iLG5jbWQsJnkpOwot ICAgIGx1Y21kW2x1c2l6ZV0gPSAiZ290byI7Ci0gICAgbHV2YWxbbHVzaXplXSA9IHg7Ci0gICAg bHVpZHhbbHVzaXplXSA9IHk7Ci0gICAgbHV0YWJbbHVzaXplXSA9IGNtZHRhYjsKLSAgICBpZiAo KytsdXNpemUgPiBMVUNBQ0hFKSByZXR1cm47Ci0KLSAgICB4ID0gbG9va3VwKGlmdGFiLCI+Iixu aWYsJnkpOwotICAgIGx1Y21kW2x1c2l6ZV0gPSAiPiI7Ci0gICAgbHV2YWxbbHVzaXplXSA9IHg7 Ci0gICAgbHVpZHhbbHVzaXplXSA9IHk7Ci0gICAgbHV0YWJbbHVzaXplXSA9IGlmdGFiOwotICAg IGlmICgrK2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKLQotICAgIHggPSBsb29rdXAoY21kdGFi LCJpbmNyIixuY21kLCZ5KTsKLSAgICBsdWNtZFtsdXNpemVdID0gImluY3IiOwotICAgIGx1dmFs W2x1c2l6ZV0gPSB4OwotICAgIGx1aWR4W2x1c2l6ZV0gPSB5OwotICAgIGx1dGFiW2x1c2l6ZV0g PSBjbWR0YWI7Ci0gICAgaWYgKCsrbHVzaXplID4gTFVDQUNIRSkgcmV0dXJuOwotCi0gICAgeCA9 IGxvb2t1cChjbWR0YWIsImRlZiIsbmNtZCwmeSk7Ci0gICAgbHVjbWRbbHVzaXplXSA9ICJkZWYi OwotICAgIGx1dmFsW2x1c2l6ZV0gPSB4OwotICAgIGx1aWR4W2x1c2l6ZV0gPSB5OwotICAgIGx1 dGFiW2x1c2l6ZV0gPSBjbWR0YWI7Ci0gICAgaWYgKCsrbHVzaXplID4gTFVDQUNIRSkgcmV0dXJu OwotCi0gICAgeCA9IGxvb2t1cChjbWR0YWIsIl9hc3NpZ24iLG5jbWQsJnkpOwotICAgIGx1Y21k W2x1c2l6ZV0gPSAiX2Fzc2lnbiI7Ci0gICAgbHV2YWxbbHVzaXplXSA9IHg7Ci0gICAgbHVpZHhb bHVzaXplXSA9IHk7Ci0gICAgbHV0YWJbbHVzaXplXSA9IGNtZHRhYjsKLSAgICBpZiAoKytsdXNp emUgPiBMVUNBQ0hFKSByZXR1cm47Ci0KLSAgICB4ID0gbG9va3VwKGNtZHRhYiwiZWNobyIsbmNt ZCwmeSk7Ci0gICAgbHVjbWRbbHVzaXplXSA9ICJlY2hvIjsKLSAgICBsdXZhbFtsdXNpemVdID0g eDsKLSAgICBsdWlkeFtsdXNpemVdID0geTsKLSAgICBsdXRhYltsdXNpemVdID0gY21kdGFiOwot ICAgIGlmICgrK2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKLQotICAgIHggPSBsb29rdXAoZm5j dGFiLCJldmFsIixuZnVuY3MsJnkpOwotICAgIGx1Y21kW2x1c2l6ZV0gPSAiZXZhbCI7Ci0gICAg bHV2YWxbbHVzaXplXSA9IHg7Ci0gICAgbHVpZHhbbHVzaXplXSA9IHk7Ci0gICAgbHV0YWJbbHVz aXplXSA9IGZuY3RhYjsKLSAgICBpZiAoKytsdXNpemUgPiBMVUNBQ0hFKSByZXR1cm47Ci0KLSAg ICB4ID0gbG9va3VwKGZuY3RhYiwibGl0IixuZnVuY3MsJnkpOwotICAgIGx1Y21kW2x1c2l6ZV0g PSAibGl0IjsKLSAgICBsdXZhbFtsdXNpemVdID0geDsKLSAgICBsdWlkeFtsdXNpemVdID0geTsK LSAgICBsdXRhYltsdXNpemVdID0gZm5jdGFiOwotICAgIGlmICgrK2x1c2l6ZSA+IExVQ0FDSEUp IHJldHVybjsKLQotICAgIHggPSBsb29rdXAoY21kdGFiLCJkbyIsbmNtZCwmeSk7Ci0gICAgbHVj bWRbbHVzaXplXSA9ICJkbyI7Ci0gICAgbHV2YWxbbHVzaXplXSA9IHg7Ci0gICAgbHVpZHhbbHVz aXplXSA9IHk7Ci0gICAgbHV0YWJbbHVzaXplXSA9IGNtZHRhYjsKLSAgICBpZiAoKytsdXNpemUg PiBMVUNBQ0hFKSByZXR1cm47Ci0KLSAgICB4ID0gbG9va3VwKGNtZHRhYiwiX2dldGFyZ3MiLG5j bWQsJnkpOwotICAgIGx1Y21kW2x1c2l6ZV0gPSAiX2dldGFyZ3MiOwotICAgIGx1dmFsW2x1c2l6 ZV0gPSB4OwotICAgIGx1aWR4W2x1c2l6ZV0gPSB5OwotICAgIGx1dGFiW2x1c2l6ZV0gPSBjbWR0 YWI7Ci0gICAgaWYgKCsrbHVzaXplID4gTFVDQUNIRSkgcmV0dXJuOwotCi0gICAgeCA9IGxvb2t1 cChpZnRhYiwiPCIsbmlmLCZ5KTsKLSAgICBsdWNtZFtsdXNpemVdID0gIjwiOwotICAgIGx1dmFs W2x1c2l6ZV0gPSB4OwotICAgIGx1aWR4W2x1c2l6ZV0gPSB5OwotICAgIGx1dGFiW2x1c2l6ZV0g PSBpZnRhYjsKLSAgICBpZiAoKytsdXNpemUgPiBMVUNBQ0hFKSByZXR1cm47Ci0KLSAgICB4ID0g bG9va3VwKGNtZHRhYiwiX3B1dGFyZ3MiLG5jbWQsJnkpOwotICAgIGx1Y21kW2x1c2l6ZV0gPSAi X3B1dGFyZ3MiOwotICAgIGx1dmFsW2x1c2l6ZV0gPSB4OwotICAgIGx1aWR4W2x1c2l6ZV0gPSB5 OwotICAgIGx1dGFiW2x1c2l6ZV0gPSBjbWR0YWI7Ci0gICAgaWYgKCsrbHVzaXplID4gTFVDQUNI RSkgcmV0dXJuOwotCi0gICAgeCA9IGxvb2t1cChjbWR0YWIsImFzZyIsbmNtZCwmeSk7Ci0gICAg bHVjbWRbbHVzaXplXSA9ICJhc2ciOwotICAgIGx1dmFsW2x1c2l6ZV0gPSB4OwotICAgIGx1aWR4 W2x1c2l6ZV0gPSB5OwotICAgIGx1dGFiW2x1c2l6ZV0gPSBjbWR0YWI7Ci0gICAgaWYgKCsrbHVz aXplID4gTFVDQUNIRSkgcmV0dXJuOwotCi0gICAgeCA9IGxvb2t1cChjbWR0YWIsImVsc2UiLG5j bWQsJnkpOwotICAgIGx1Y21kW2x1c2l6ZV0gPSAiZWxzZSI7Ci0gICAgbHV2YWxbbHVzaXplXSA9 IHg7Ci0gICAgbHVpZHhbbHVzaXplXSA9IHk7Ci0gICAgbHV0YWJbbHVzaXplXSA9IGNtZHRhYjsK LSNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLwotfQotCi1WT0lECi1jbWRpbmkoKSB7Ci0gICAgaW50 IGkgPSAwLCB4ID0gMCwgeSA9IDAsIHogPSAwLCBza2lwID0gMDsKLSAgICBjaGFyICogcDsKLSNp ZmRlZiBUVFNQRExJU1QKLSAgICBsb25nICogc3MgPSBOVUxMOwotICAgIGV4dGVybiBpbnQgbnNw ZDsKLSAgICBleHRlcm4gc3RydWN0IGtleXRhYiAqIHNwZHRhYjsKLSNlbmRpZiAvKiBUVFNQRExJ U1QgKi8KLQotI2lmbmRlZiBOT1NQTAotLyoKLSAgT24gc3RhY2sgdG8gYWxsb3cgcmVjdXJzaW9u IQotKi8KLSAgICBjaGFyIHZuYW1idWZbVk5BTUxdOyAgICAgICAgICAgICAgICAvKiBCdWZmZXIg Zm9yIHZhcmlhYmxlIG5hbWVzICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIGlmIChjbWRp bml0ZWQpICAgICAgICAgICAgICAgICAgICAgIC8qIEFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KLSAg ICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBkbyBpdCBhZ2Fp biAqLwotCi0gICAgZm9yIChpID0gMDsgaSA8IENNRFNUS0w7IGkrKykgICAgICAgLyogUHJvbXB0 IHN0cmluZ3MgZm9yIGVhY2ggKi8KLSAgICAgIHByc3RyaW5nW2ldID0gTlVMTDsgICAgICAgICAg ICAgICAvKiBjb21tYW5kIGxldmVsICovCi0KLSNpZm5kZWYgTk9DU0VUUwotICAgIHAgPSBnZXRl bnYoIktfQ0hBUlNFVCIpOyAgICAgICAgICAgIC8qIFNldCBkZWZhdWx0IGZpbGUgY2hhcmFjdGVy IHNldCAqLwotICAgIGlmIChwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZyb20g ZW52aXJvbm1lbnQgKi8KLSAgICAgICAgeCA9IGxvb2t1cChmY3N0YWIscCxuZmlsYywmeSk7Ci0g ICAgICAgIGlmICh4ID4gLTEpCi0gICAgICAgICAgZmNoYXJzZXQgPSB4OwotICAgIH0KLSNlbmRp ZiAvKiBOT0NTRVRTICovCi0KLSAgICBwID0gZ2V0ZW52KCJLX0lORk9fRElSRUNUT1JZIik7ICAg ICAvKiBGaW5kIEtlcm1pdCBpbmZvIGRpcmVjdG9yeSAqLwotICAgIGlmIChwICYmICpwICYmIHN0 cmxlbihwKSA8PSBDS01BWFBBVEgpCi0gICAgICBtYWtlc3RyKCZrX2luZm9fZGlyLHApOwotICAg IGlmICgha19pbmZvX2RpcikgewotICAgICAgICBwID0gZ2V0ZW52KCJLX0lORk9fRElSIik7Ci0g ICAgICAgIGlmIChwICYmICpwICYmIHN0cmxlbihwKSA8PSBDS01BWFBBVEgpCi0gICAgICAgICAg bWFrZXN0cigma19pbmZvX2RpcixwKTsKLSAgICB9Ci0jaWZkZWYgVU5JWAotICAgIGlmIChrX2lu Zm9fZGlyKSB7ICAgICAgICAgICAgICAgICAgIC8qIExvb2sgZm9yIEtlcm1pdCBkb2NzIGRpcmVj dG9yeSAqLwotICAgICAgICBpZiAoemNoa2koa19pbmZvX2RpcikgPT0gLTIpIHsKLSAgICAgICAg ICAgIGNoYXIgeGJ1ZltDS01BWFBBVEgrMzJdLCAqcyA9ICIiOwotICAgICAgICAgICAgaWYgKGNr cmNoYXIoa19pbmZvX2RpcikgIT0gJy8nKQotICAgICAgICAgICAgICBzID0gIi8iOwotICAgICAg ICAgICAgY2ttYWttc2coeGJ1ZixDS01BWFBBVEgrMzIsa19pbmZvX2RpcixzLCJja3Vid3IudHh0 IixOVUxMKTsKLSAgICAgICAgICAgIGlmICh6Y2hraSh4YnVmKSA8IDApCi0gICAgICAgICAgICAg IG1ha2VzdHIoJmtfaW5mb19kaXIsTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFr X2luZm9fZGlyKSB7Ci0gICAgICAgIGNoYXIgeGJ1ZltDS01BWFBBVEgrMzJdOwotICAgICAgICBp bnQgaTsKLSAgICAgICAgZm9yIChpID0gMDsgKih0eHRkaXJbaV0pOyBpKyspIHsKLSAgICAgICAg ICAgIGNrbWFrbXNnKHhidWYsQ0tNQVhQQVRIKzMyLHR4dGRpcltpXSwiY2t1YndyLnR4dCIsTlVM TCxOVUxMKTsKLSAgICAgICAgICAgIGlmICh6Y2hraSh4YnVmKSA+IDApIHsKLSAgICAgICAgICAg ICAgICBtYWtlc3RyKCZrX2luZm9fZGlyLHR4dGRpcltpXSk7Ci0gICAgICAgICAgICAgICAgZGVi dWcoRjExMCwia19pbmZvX2RpciAxIixrX2luZm9fZGlyLDApOwotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2ttYWttc2coeGJ1ZixDS01BWFBBVEgr MzIsCi0gICAgICAgICAgICAgICAgICAgICB0eHRkaXJbaV0sImtlcm1pdC8iLCJja3Vid3IudHh0 IixOVUxMKTsKLSAgICAgICAgICAgIGlmICh6Y2hraSh4YnVmKSA+IDApIHsKLSAgICAgICAgICAg ICAgICBja21ha21zZyh4YnVmLENLTUFYUEFUSCszMix0eHRkaXJbaV0sImtlcm1pdC8iLE5VTEws TlVMTCk7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigma19pbmZvX2Rpcix4YnVmKTsKLSAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJrX2luZm9fZGlyIDIiLGtfaW5mb19kaXIsMCk7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBja21ha21zZyh4 YnVmLENLTUFYUEFUSCszMiwKLSAgICAgICAgICAgICAgICAgICAgIHR4dGRpcltpXSwiY2tlcm1p dC8iLCJja3Vid3IudHh0IixOVUxMKTsKLSAgICAgICAgICAgIGlmICh6Y2hraSh4YnVmKSA+IDAp IHsKLSAgICAgICAgICAgICAgICBja21ha21zZyh4YnVmLENLTUFYUEFUSCszMix0eHRkaXJbaV0s ImNrZXJtaXQvIixOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtfaW5mb19k aXIseGJ1Zik7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwia19pbmZvX2RpciAzIixrX2lu Zm9fZGlyLDApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgICAgIGlmIChrX2luZm9fZGlyKSB7ICAgICAgICAgICAgICAgLyogTWFrZSBzdXJl IGl0IGVuZHMgd2l0aCAiLyIgKi8KLSAgICAgICAgICAgIGlmIChja3JjaGFyKGtfaW5mb19kaXIp ICE9ICcvJykgewotICAgICAgICAgICAgICAgIGNoYXIgeGJ1ZltDS01BWFBBVEgrMzJdOwotICAg ICAgICAgICAgICAgIGNrbWFrbXNnKHhidWYsQ0tNQVhQQVRIKzMyLGtfaW5mb19kaXIsIi8iLE5V TEwsTlVMTCk7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigma19pbmZvX2Rpcix4YnVmKTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbHNlCi0jaWZkZWYgT1MyCi0gICAgewot ICAgICAgICBjaGFyIHhkaXJbQ0tNQVhQQVRIKzhdLCAqcyA9ICIiOwotICAgICAgICBleHRlcm4g Y2hhciBzdGFydHVwZGlyW107Ci0gICAgICAgIHhkaXJbMF0gPSBOVUw7Ci0gICAgICAgIGlmIChj a3JjaGFyKHN0YXJ0dXBkaXIpICE9ICcvJykKLSAgICAgICAgICBzID0gIi8iOwotICAgICAgICBp ZiAoc3RybGVuKHMpICsgc3RybGVuKHN0YXJ0dXBkaXIpICsgNSA8IENLTUFYUEFUSCArIDggKQot ICAgICAgICAgIGNrbWFrbXNnKHhkaXIsQ0tNQVhQQVRIKzgscyxzdGFydHVwZGlyLCJET0MvIixO VUxMKTsKLSAgICAgICAgbWFrZXN0cigma19pbmZvX2Rpcix4ZGlyKTsKLSAgICB9Ci0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZkZWYgVFRTUERMSVNUCi0gICAgaWYg KCFzcGR0YWIgJiYgKHNzID0gdHRzcGRsaXN0KCkpKSB7IC8qIEdldCBzcGVlZCBsaXN0IGlmIG5l Y2Vzc2FyeSAqLwotICAgICAgICBpbnQgaiwgaywgbSA9IDAsIG47ICAgICAgICAgICAgIC8qIENy ZWF0ZSBzb3J0ZWQga2V5d29yZCB0YWJsZSAqLwotICAgICAgICBjaGFyIGJ1ZlsxNl07Ci0gICAg ICAgIGNoYXIgKiBwOwotICAgICAgICBpZiAoKHNwZHRhYiA9Ci0gICAgICAgICAgICAgKHN0cnVj dCBrZXl0YWIgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5dGFiKSAqIHNzWzBdKSkpIHsKLSAg ICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gc3NbMF07IGkrKykgeyAvKiBzc1swXSA9IG51bWJl ciBvZiBlbGVtZW50cyAqLwotICAgICAgICAgICAgICAgIGlmIChzc1tpXSA8IDFMKSBicmVhazsg ICAgIC8qIFNob3VsZG4ndCBoYXBwZW4gKi8KLSAgICAgICAgICAgICAgICBidWZbMF0gPSBOVUw7 ICAgICAgICAgICAgICAvKiBNYWtlIHN0cmluZyAqLwotICAgICAgICAgICAgICAgIHNwcmludGYo YnVmLCIlbGQiLHNzW2ldKTsgIC8qIFNBRkUgKi8KLSAgICAgICAgICAgICAgICBpZiAoc3NbaV0g PT0gODg4MEwpCi0gICAgICAgICAgICAgICAgICBja3N0cm5jcHkoYnVmLCI3NS8xMjAwIixzaXpl b2YoYnVmKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNzW2ldID09IDEzNEwpCi0gICAgICAgICAg ICAgICAgICBja3N0cm5jYXQoYnVmLCIuNSIsMTYpOwotICAgICAgICAgICAgICAgIG4gPSBzdHJs ZW4oYnVmKTsKLSAgICAgICAgICAgICAgICBpZiAoKG4gPiAwKSAmJiAocCA9IChjaGFyICopbWFs bG9jKG4rMSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtID4gMCkgeyAgICAgICAgLyog SGF2ZSBhdCBsZWFzdCBvbmUgaW4gbGlzdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZm9y IChqID0gMDsgICAgIC8qIEZpbmQgc2xvdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBqIDwgbSAmJiBzdHJjbXAoYnVmLHNwZHRhYltqXS5rd2QpID4gMDsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaisrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBt KSB7ICAgIC8qIE11c3QgaW5zZXJ0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y IChrID0gbS0xOyBrID49IGo7IGstLSkgeyAvKiBNb3ZlIG90aGVycyBkb3duICovCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNwZHRhYltrKzFdLmt3ZCA9IHNwZHRhYltrXS5rd2Q7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZHRhYltrKzFdLmZsZ3MgPSBzcGR0 YWJba10uZmxnczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BkdGFiW2srMV0u a3d2YWwgPSBzcGR0YWJba10ua3d2YWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgICAg ICAgICAgICAgIC8qIEZpcnN0IG9uZSAqLwotICAgICAgICAgICAgICAgICAgICAgIGogPSAwOwot ICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkocCxidWYsbisxKTsgLyogQWRkIG5ldyBzcGVl ZCAqLwotICAgICAgICAgICAgICAgICAgICBzcGR0YWJbal0ua3dkID0gcDsKLSAgICAgICAgICAg ICAgICAgICAgc3BkdGFiW2pdLmZsZ3MgPSAwOwotICAgICAgICAgICAgICAgICAgICBzcGR0YWJb al0ua3d2YWwgPSAoaW50KSBzc1tpXSAvIDEwOwotICAgICAgICAgICAgICAgICAgICBtKys7ICAg ICAgICAgICAgICAgIC8qIENvdW50IHRoaXMgb25lICovCi0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG5zcGQgPSBtOwotICAgIH0KLSNlbmRpZiAv KiBUVFNQRExJU1QgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgIC8qIEFsbG9jYXRlIElOUFVUIGNv bW1hbmQgYnVmZmVyICovCi0gICAgaWYgKCFpbnBidWYpIHsKLSAgICAgICAgaWYgKCEoaW5wYnVm ID0gKGNoYXIgKikgbWFsbG9jKElOUEJVRlNJWis4KSkpCi0gICAgICAgICAgZmF0YWwoImNtZGlu aTogbm8gbWVtb3J5IGZvciBJTlBVVCBidWZmZXIiKTsKLSAgICB9Ci0gICAgZm9yICh4ID0gMDsg eCA8IElOUEJVRlNJWjsgeCsrKSAgICAgLyogSW5pdGlhbGl6ZSBpdCAqLwotICAgICAgaW5wYnVm W3hdID0gTlVMOwotICAgIGlucGJwID0gaW5wYnVmOyAgICAgICAgICAgICAgICAgICAgIC8qIElu aXRpYWxpemUgcG9pbnRlciAqLwotICAgIGluYnVmc2l6ZSA9IElOUEJVRlNJWjsgICAgICAgICAg ICAgIC8qIGFuZCBzaXplLiAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBEQ01EQlVG Ci0gICAgaWYgKGNtc2V0dXAoKSA8IDApIGZhdGFsKCJDYW4ndCBhbGxvY2F0ZSBjb21tYW5kIGJ1 ZmZlcnMhIik7Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICAvKiBBbGxvY2F0ZSBjb21tYW5kIHN0YWNr IGFsbG93aW5nIGNvbW1hbmQgcGFyc2VyIHRvIGNhbGwgaXRzZWxmICovCi0KLSAgICBpZiAoIShj bWRzdGsgPSAoc3RydWN0IGNtZHB0ciAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRwdHIpKkNN RFNUS0wpKSkKLSAgICAgIGZhdGFsKCJjbWRpbmk6IG5vIG1lbW9yeSBmb3IgY21kc3RrIik7Ci0g ICAgaWYgKCEoaWZjbWQgPSAoaW50ICopIG1hbGxvYyhzaXplb2YoaW50KSpDTURTVEtMKSkpCi0g ICAgICBmYXRhbCgiY21kaW5pOiBubyBtZW1vcnkgZm9yIGlmY21kIik7Ci0gICAgaWYgKCEoY291 bnQgPSAoaW50ICopIG1hbGxvYyhzaXplb2YoaW50KSpDTURTVEtMKSkpCi0gICAgICBmYXRhbCgi Y21kaW5pOiBubyBtZW1vcnkgZm9yIGNvdW50Iik7Ci0gICAgaWYgKCEoaWZ0ZXN0ID0gKGludCAq KSBtYWxsb2Moc2l6ZW9mKGludCkqQ01EU1RLTCkpKQotICAgICAgZmF0YWwoImNtZGluaTogbm8g bWVtb3J5IGZvciBpZnRlc3QiKTsKLSAgICBpZiAoIShpbnRpbWUgPSAoaW50ICopIG1hbGxvYyhz aXplb2YoaW50KSpDTURTVEtMKSkpCi0gICAgICBmYXRhbCgiY21kaW5pOiBubyBtZW1vcnkgZm9y IGludGltZSIpOwotICAgIGlmICghKGlucGNhcyA9IChpbnQgKikgbWFsbG9jKHNpemVvZihpbnQp KkNNRFNUS0wpKSkKLSAgICAgIGZhdGFsKCJjbWRpbmk6IG5vIG1lbW9yeSBmb3IgaW5wY2FzIik7 Ci0gICAgaWYgKCEodGFrZXJyID0gKGludCAqKSBtYWxsb2Moc2l6ZW9mKGludCkqQ01EU1RLTCkp KQotICAgICAgZmF0YWwoImNtZGluaTogbm8gbWVtb3J5IGZvciB0YWtlcnIiKTsKLSAgICBpZiAo IShtZXJyb3IgPSAoaW50ICopIG1hbGxvYyhzaXplb2YoaW50KSpDTURTVEtMKSkpCi0gICAgICBm YXRhbCgiY21kaW5pOiBubyBtZW1vcnkgZm9yIG1lcnJvciIpOwotICAgIGlmICghKHhxdWlldCA9 IChpbnQgKikgbWFsbG9jKHNpemVvZihpbnQpKkNNRFNUS0wpKSkKLSAgICAgIGZhdGFsKCJjbWRp bmk6IG5vIG1lbW9yeSBmb3IgeHF1aWV0Iik7Ci0gICAgaWYgKCEoeHZhcmV2ID0gKGludCAqKSBt YWxsb2Moc2l6ZW9mKGludCkqQ01EU1RLTCkpKQotICAgICAgZmF0YWwoImNtZGluaTogbm8gbWVt b3J5IGZvciB4dmFyZXYiKTsKLSAgICBpZiAoIWtlcm1yYykKLSAgICAgIGlmICghKGtlcm1yYyA9 IChjaGFyICopIG1hbGxvYyhLRVJNUkNMKzEpKSkKLSAgICAgICAgZmF0YWwoImNtZGluaTogbm8g bWVtb3J5IGZvciBrZXJtcmMiKTsKLSNpZmRlZiBDS19BUEMKLS8qIEFwcGxpY2F0aW9uIFByb2dy YW0gQ29tbWFuZCBidWZmZXIgKi8KLSAgICBpZiAoIShhcGNidWYgPSBtYWxsb2MoQVBDQlVGTEVO ICsgMSkpKQotICAgICAgICBmYXRhbCgiY21kaW5pOiBubyBtZW1vcnkgZm9yIGFwY2J1ZiIpOwot I2VuZGlmIC8qIENLX0FQQyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLS8qIGxpbmVbXSBhbmQg dG1wYnVmW10gYXJlIHRoZSB0d28gc3RyaW5nIGJ1ZmZlcnMgdXNlZCBieSB0aGUgY29tbWFuZCBw YXJzZXIgKi8KLQotICAgIGlmICghKGxpbmUgPSBtYWxsb2MoTElOQlVGU0laICsgMSkpKQotICAg ICAgICBmYXRhbCgiY21kaW5pOiBubyBtZW1vcnkgZm9yIGxpbmUiKTsKLSAgICBpZiAoISh0bXBi dWYgPSBtYWxsb2MoTElOQlVGU0laICsgMSkpKQotICAgICAgICBmYXRhbCgiY21kaW5pOiBubyBt ZW1vcnkgZm9yIHRtcGJ1ZiIpOwotI2VuZGlmIC8qIERDTURCVUYgKi8KLQotI2lmbmRlZiBOT1NQ TAotI2lmZGVmIENLX01JTlBVVAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEluaXRpYWxpemUgTUlOUFVUIHBvaW50ZXJzICovCi0gICAgICAgIGludCBpOwotICAg ICAgICBleHRlcm4gY2hhciAqbXNbXTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IE1JTlBNQVg7 IGkrKykKLSAgICAgICAgICBtc1tpXSA9IE5VTEw7Ci0gICAgfQotI2VuZGlmIC8qIENLX01JTlBV VCAqLwotCi0gICAgaWYgKG1hY2luaSgpIDwgMCkgICAgICAgICAgICAgICAgICAgLyogQWxsb2Nh dGUgbWFjcm8gYnVmZmVycyAqLwotICAgICAgZmF0YWwoIkNhbid0IGFsbG9jYXRlIG1hY3JvIGJ1 ZmZlcnMhIik7Ci0KLSAgICBpZmNtZFswXSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBD b21tYW5kLWxldmVsIHJlbGF0ZWQgdmFyaWFibGVzLiAqLwotICAgIGlmdGVzdFswXSA9IDA7ICAg ICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdmFyaWFibGVzIGF0IHRvcCBsZXZlbCAq LwotICAgIGNvdW50WzBdID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mIHN0YWNrLi4u ICovCi0gICAgaW50aW1lWzBdID0gMDsKLSAgICBpbnBjYXNbMF0gPSAwOwotICAgIHRha2Vyclsw XSA9IDA7Ci0gICAgbWVycm9yWzBdID0gMDsKLSAgICB4cXVpZXRbMF0gPSBxdWlldDsKLSAgICB4 dmFyZXZbMF0gPSB2YXJldmFsOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9TUEwK LSAgICBjbWRsdmwgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRo ZSBjb21tYW5kIHN0YWNrICovCi0gICAgeGNtZHNyYyA9IENNRF9LQjsKLSAgICBjbWRzdGtbY21k bHZsXS5zcmMgPSBDTURfS0I7ICAgICAgICAvKiBTb3VyY2UgaXMgY29uc29sZSAqLwotICAgIGNt ZHN0a1tjbWRsdmxdLmx2bCA9IDA7ICAgICAgICAgICAgIC8qIExldmVsIGlzIDAgKi8KLSAgICBj bWRzdGtbY21kbHZsXS5jY2ZsZ3MgPSAwOyAgICAgICAgICAvKiBObyBmbGFncyAqLwotI2VuZGlm IC8qIE5PU1BMICovCi0KLSAgICB0bGV2ZWwgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAv KiBUYWtlIGZpbGUgbGV2ZWwgPSBrZXlib2FyZCAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBNQVhU QUtFOyBpKyspICAgICAgIC8qIEluaXRpYWxpemUgY29tbWFuZCBmaWxlIG5hbWVzICovCi0gICAg ICB0Zm5hbVtpXSA9IE5VTEw7Ci0KLSAgICBjbXNldHAoY2twcm9tcHQpOyAgICAgICAgICAgICAg ICAgICAvKiBTZXQgdXAgQy1LZXJtaXQncyBwcm9tcHQgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBzZXQgSUtTRCBwcm9tcHQgaGVyZSBzaW5jZSAq LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdlIGRvIG5vdCB5 ZXQga25vdyBpZiB3ZSBhcmUgSUtTRCAqLwotI2lmbmRlZiBOT1NQTAotCi0gICAgaW5pdG1hYygp OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBtYWNybyB0YWJsZSAqLwot Ci0vKiBQcmVkZWZpbmUgYnVpbHQtaW4gb25lLWxpbmUgbWFjcm9zICovCi0KLSAgICBhZGRtYWMo ImlibS1saW5lbW9kZSIsbV9pYm0pOyAgICAgICAvKiBJQk0tTElORU1PREUgKi8KLSAgICBhZGRt YWMoImZhdGFsIixtX2ZhdCk7ICAgICAgICAgICAgICAvKiBGQVRBTCBtYWNybyAqLwotICAgIHkg PSBhZGRtYWMoImZhc3QiLG1fZmFzdCk7ICAgICAgICAgIC8qIEZBU1QgbWFjcm8gKi8KLSAgICBh ZGRtYWMoImNhdXRpb3VzIixtX2NhdXRpb3VzKTsgICAgICAvKiBDQVVUSU9VUyBtYWNybyAqLwot ICAgIGFkZG1hYygicm9idXN0IixtX3JvYnVzdCk7ICAgICAgICAgIC8qIFJPQlVTVCBtYWNybyAq LwotI2lmZGVmIE9TMgotICAgIGFkZG1hYygibWFudWFsIixtX21hbnVhbCk7ICAgICAgICAgIC8q IE1BTlVBTCBtYWNybyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIFZNUwotICAgIGFkZG1h YygicHVyZ2UiLG1fcHVyZ2UpOyAgICAgICAgICAgIC8qIFBVUkdFIG1hY3JvICovCi0jZW5kaWYg LyogVk1TICovCi0KLS8qCi0gIFByZWRlZmluZSBidWlsdC1pbiBtdWx0aWxpbmUgbWFjcm9zOyB0 aGVzZSBhcmUgdG9wLWxldmVsIGNvbW1hbmRzCi0gIHRoYXQgYXJlIGltcGxlbWVudGVkIGludGVy bmFsbHkgYXMgbWFjcm9zLiAgTk9URTogV2hlbiBhZGRpbmcgYSBuZXcKLSAgb25lIG9mIHRoZXNl LCByZW1lbWJlciB0byB1cGRhdGUgdGhlIEVORCBhbmQgUkVUVVJOIGNvbW1hbmRzIHRvCi0gIGFj Y291bnQgZm9yIGl0LCBvciBlbHNlIEVORCBhbmQgUkVUVVJOIGZyb20gd2l0aGluIGl0IHdvbid0 IHdvcmsgcmlnaHQuCi0qLwotICAgIHggPSBhZGRtbWFjKCJfZm9yeCIsZm9yX2RlZik7ICAgICAg IC8qIEZPUiBtYWNybyAqLwotICAgIGlmICh4ID4gLTEpIG1hY3RhYlt4XS5mbGdzID0gQ01fSU5W OwotICAgIHggPSBhZGRtbWFjKCJfZm9yeiIsZm96X2RlZik7ICAgICAgIC8qIE90aGVyIEZPUiBt YWNybyAqLwotICAgIGlmICh4ID4gLTEpIG1hY3RhYlt4XS5mbGdzID0gQ01fSU5WOwotICAgIHgg PSBhZGRtbWFjKCJfeGlmIix4aWZfZGVmKTsgICAgICAgIC8qIFhJRiBtYWNybyAqLwotICAgIGlm ICh4ID4gLTEpIG1hY3RhYlt4XS5mbGdzID0gQ01fSU5WOwotICAgIHggPSBhZGRtbWFjKCJfd2hp bGUiLHdoaWxfZGVmKTsgICAgIC8qIFdISUxFIG1hY3JvICovCi0gICAgaWYgKHggPiAtMSkgbWFj dGFiW3hdLmZsZ3MgPSBDTV9JTlY7Ci0gICAgeCA9IGFkZG1tYWMoIl9zd2l0eCIsc3dfZGVmKTsg ICAgICAgLyogU1dJVENIIG1hY3JvICovCi0gICAgaWYgKHggPiAtMSkgbWFjdGFiW3hdLmZsZ3Mg PSBDTV9JTlY7Ci0KLS8qIEZpbGwgaW4gY29tbWFuZC1saW5lIGFyZ3VtZW50IHZlY3RvciAqLwot Ci0gICAgc3ByaW50Zih2bmFtYnVmLCJcXCZAWyVkXSIseGFyZ3MpOyAgLyogU0FGRSAqLwotICAg IGlmIChpbnNlcnZlcikgeyAgICAgICAgICAgICAgICAgICAgIC8qIEJ1dCBoaWRkZW4gaW4gSUtT RCAqLwotICAgICAgICB5ID0gLTE7Ci0gICAgICAgIHhhcmdzID0gMDsKLSAgICB9IGVsc2UKLSAg ICAgIHkgPSBhcnJheW5hbSh2bmFtYnVmLCZ4LCZ6KTsgICAgICAvKiBnb2VzIGluIGFycmF5IFwm QFtdICovCi0KLSAgICB0bXBidWZbMF0gPSBOVUw7Ci0gICAgaWYgKHkgPiAtMSkgewotICAgICAg ICBpbnQgaiA9IC0xOwotICAgICAgICBpbnQgeXkgPSAwOwotICAgICAgICBkY2xhcnJheSgoY2hh cil4LHopOyAgICAgICAgICAgIC8qIERlY2xhcmUgdGhlIGFycmF5ICovCi0jaWZuZGVmIE5PVEFL RUFSR1MKLSAgICAgICAgLyogTWFjcm8gYXJndW1lbnQgdmVjdG9yICovCi0gICAgICAgIHNwcmlu dGYodm5hbWJ1ZiwiXFwmX1slZF0iLHopOyAgLyogU0FGRSAqLwotICAgICAgICB5eSA9IGFycmF5 bmFtKHZuYW1idWYsJngsJnopOyAgIC8qIGdvZXMgaW4gYXJyYXkgXCZfW10gKi8KLSAgICAgICAg aWYgKHl5ID4gLTEpICAgICAgICAgICAgICAgICAgICAvKiBOYW1lIGlzIE9LICovCi0gICAgICAg ICAgZGNsYXJyYXkoKGNoYXIpeCx6KTsgICAgICAgICAgLyogRGVjbGFyZSB0aGUgYXJyYXkgKi8K LSNlbmRpZiAvKiBOT1RBS0VBUkdTICovCi0gICAgICAgIHNraXAgPSAwOwotICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgeGFyZ3M7IGkrKykgeyAgIC8qIEZpbGwgdGhlIGFycmF5cyAqLwotICAgICAg ICAgICAgc3ByaW50Zih2bmFtYnVmLCJcXCZAWyVkXSIsaSk7IC8qIFNBRkUgKi8KLSAgICAgICAg ICAgIGFkZG1hYyh2bmFtYnVmLHhhcmd2W2ldKTsKLSAgICAgICAgICAgIGlmIChjZmlsZWYgJiYg aSA9PSAwKQotICAgICAgICAgICAgICBjb250aW51ZTsKLSNpZmRlZiBLRVJCQU5HCi0gICAgICAg ICAgICBpZiAoc2tpcCkgewotICAgICAgICAgICAgICAgIGogPSAwOwotICAgICAgICAgICAgICAg IHNraXAgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIEtFUkJBTkcgKi8KLSAgICAgICAgICAgIGlmIChqIDwgMCAmJiAgICAgICAgICAgICAg ICAvKiBBc3NpZ24gaXRlbXMgYWZ0ZXIgIj0iIG9yICItLSIqLwotICAgICAgICAgICAgICAgICgh c3RyY21wKHhhcmd2W2ldLCI9IikgfHwgIXN0cmNtcCh4YXJndltpXSwiLS0iKSkKLSAgICAgICAg ICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBqID0gMDsgICAgICAgICAgICAgICAgICAvKiB0 byBcJTEuLlwlOSAqLwotI2lmZGVmIEtFUkJBTkcKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaiA8 IDAgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgKCFzdHJjbXAoeGFyZ3ZbaV0sIisiKSB8fAot ICAgICAgICAgICAgICAgICAgICAgICAgIXN0cm5jbXAoeGFyZ3ZbaV0sIisgIiwyKSB8fAotICAg ICAgICAgICAgICAgICAgICAgICAgIXN0cm5jbXAoeGFyZ3ZbaV0sIitcdCIsMikpCi0gICAgICAg ICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBza2lwID0gMTsKLSAgICAgICAg ICAgICAgICBjb250aW51ZTsKLSNlbmRpZiAvKiBLRVJCQU5HICovCi0gICAgICAgICAgICB9IGVs c2UgaWYgKGogPiAtMSkgewotICAgICAgICAgICAgICAgIGorKzsKLSAgICAgICAgICAgICAgICBp ZiAoaiA8PSA5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZuYW1idWZbMF0gPSAnXFwnOwotICAg ICAgICAgICAgICAgICAgICB2bmFtYnVmWzFdID0gJyUnOwotICAgICAgICAgICAgICAgICAgICB2 bmFtYnVmWzJdID0gKGNoYXIpKGorJzAnKTsKLSAgICAgICAgICAgICAgICAgICAgdm5hbWJ1Zlsz XSA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgYWRkbWFjKHZuYW1idWYseGFyZ3ZbaV0pOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoeXkgPiAtMSkgewotICAgICAg ICAgICAgICAgICAgICBjaGFyIGMsICogcDsKLSAgICAgICAgICAgICAgICAgICAgaW50IGZsYWcg PSAwOwotICAgICAgICAgICAgICAgICAgICBwID0geGFyZ3ZbaV07Ci0gICAgICAgICAgICAgICAg ICAgIG1ha2VzdHIoJih0b3Bhcmdbal0pLHApOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAo KGMgPSAqcCsrKSkgeyBpZiAoYyA9PSBTUCkgeyBmbGFnKys7IGJyZWFrOyB9IH0KLSAgICAgICAg ICAgICAgICAgICAgaWYgKGZsYWcpCi0gICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRt cGJ1ZiwiXCIiLFRNUEJVRlNJWik7Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bXBi dWYseGFyZ3ZbaV0sVE1QQlVGU0laKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWcpCi0g ICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRtcGJ1ZiwiXCIiLFRNUEJVRlNJWik7Ci0g ICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bXBidWYsIiAiLFRNUEJVRlNJWik7Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChjZmls ZWYpIHsKLSAgICAgICAgICAgIGFkZG1hYygiXFwlMCIsY21kZmlsKTsKLSAgICAgICAgICAgIGlm ICh5eSA+IC0xKQotICAgICAgICAgICAgICBtYWtlc3RyKCYodG9wYXJnWzBdKSxjbWRmaWwpOwot ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYWRkbWFjKCJcXCUwIix4YXJndlswXSk7Ci0g ICAgICAgICAgICBpZiAoeXkgPiAtMSkKLSAgICAgICAgICAgICAgbWFrZXN0cigmKHRvcGFyZ1sw XSkseGFyZ3ZbMF0pOwotICAgICAgICB9Ci0gICAgICAgIGlmICh5eSA+IC0xKSB7Ci0gICAgICAg ICAgICB0b3BhcmdjID0gKGogPCAwKSA/IDEgOiBqICsgMTsKLSAgICAgICAgICAgIHRvcHhhcmcg PSB0b3Bhcmc7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgLyogVGhpcyBuZWVkcyB3b3Jr ICovCi0gICAgICAgICAgICBpZiAoIWNmaWxlZikKLSAgICAgICAgICAgICAgbWFrZXN0cigmdG9w bGluZSx0bXBidWYpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgIHRvcGFyZ2MgPSAwOwotICAgICAgICAgICAgdG9weGFyZyA9IE5VTEw7Ci0gICAg ICAgIH0KLSAgICAgICAgYV9kaW1bMF0gPSB0b3BhcmdjIC0gMTsKLSAgICAgICAgYV9wdHJbMF0g PSB0b3B4YXJnOwotCWRlYnVnKEYxMTEsImFfZGltWzBdIiwiQSIsYV9kaW1bMF0pOwotICAgIH0K LSAgICAqdm5hbWJ1ZiA9IE5VTDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgbHVpbml0KCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBsb29rdXAoKSBjYWNoZSAq LwotCi0vKiBHZXQgb3VyIGhvbWUgZGlyZWN0b3J5IG5vdy4gIFRoaXMgbmVlZGVkIGluIGxvdHMg b2YgcGxhY2VzLiAqLwotCi0gICAgY21kaW5pdGVkID0gMTsKLX0KLQotI2lmZGVmIE5UCi1fUFJP VE9UWVAoY2hhciAqIEdldEFwcERhdGEsKGludCkpOwotI2VuZGlmIC8qIE5UICovCi0KLVZPSUQK LWRvaW5pdCgpIHsKLSNpZmRlZiBDS1JPT1QKLWV4dGVybiBpbnQgY2tyb290ZXJyOwotI2VuZGlm IC8qIENLUk9PVCAqLwotICAgIGludCB4ID0gMCwgb2sgPSAwOwotI2lmZGVmIE9TMgotICAgIGNo YXIgKiBwdHIgPSAwOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKCFjbWRpbml0ZWQpCi0g ICAgICBjbWRpbmkoKTsKLQotI2lmZGVmIE1BQwotICAgIHJldHVybjsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE1hYyBLZXJtaXQgaGFzIG5vIGluaXQgZmlsZSAqLwotCi0jZWxzZSAv KiAhTUFDICovCi0KLS8qIElmIHNraXBwaW5nIGluaXQgZmlsZSAoJy1ZJyBvbiBLZXJtaXQgY29t bWFuZCBsaW5lKSwgcmV0dXJuIG5vdy4gKi8KLQotICAgIGlmIChub2luaXQpIHsKLSAgICAgICAg a2VybXJjWzBdID0gJ1wwJzsKLSAgICAgICAgaW5pZGlyWzBdID0gJ1wwJzsKLS8qCi0gIEJ1dCBy ZXR1cm5pbmcgZnJvbSBoZXJlIHJlc3VsdHMgaW4gaW5pZGlyW10gbmV2ZXIgYmVpbmcgc2V0IHRv IGFueXRoaW5nLgotICBJbnN0ZWFkIGl0IHNob3VsZCBiZSBzZXQgdG8gd2hlcmV2ZXIgdGhlIGlu aXQgZmlsZSAqd291bGQqIGhhdmUgYmVlbgotICBleGVjdXRlZCBmcm9tLiAgU28gdGhpcyBiaXQg b2YgY29kZSBzaG91bGQgYmUgcmVtb3ZlZCwgYW5kIHRoZW4gd2Ugc2hvdWxkCi0gIHNwcmlua2xl ICJpZiAobm9pbml0KSIgdGVzdHMgdGhyb3VnaG91dCB0aGUgZm9sbG93aW5nIGNvZGUgdW50aWwg d2UgaGF2ZQotICBzZXQgaW5pZGlyW10sIGFuZCB0aGVuIHJldHVybiB3aXRob3V0IGFjdHVhbGx5 IHRha2luZyB0aGUgaW5pdCBmaWxlLgotKi8KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lm ZGVmIE9TMgotLyoKLSAgVGhlIC15IGluaXQgZmlsZSBtdXN0IGJlIGZ1bGx5IHNwZWNpZmllZCBv ciBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0gIEtFUk1SQyBpcyBsb29rZWQgZm9yIHZpYSBJ TklULCBEUEFUSCBhbmQgUEFUSCBpbiB0aGF0IG9yZGVyLiAgRmluYWxseSwgb3VyCi0gIG93biBl eGVjdXRhYmxlIGZpbGUgcGF0aCBpcyB0YWtlbiBhbmQgdGhlIC5FWEUgc3VmZml4IGlzIHJlcGxh Y2VkIGJ5IC5JTkkKLSAgYW5kIHRoaXMgaXMgdHJpZWQgYXMgdGhlIGluaXRpYWxpemF0aW9uIGZp bGUuCi0qLwotI2lmZGVmIENLX0xPR0lOCi0gICAgZGVidWcoRjEwMSwiZG9pbml0IGluc2VydmVy IiwiIixpbnNlcnZlcik7Ci0gICAgZGVidWcoRjEwMSwiZG9pbml0IGlzZ3Vlc3QiLCIiLGlzZ3Vl c3QpOwotICAgIGRlYnVnKEYxMTAsImRvaW5pdCBhbm9uZmlsZSIsYW5vbmZpbGUsMCk7Ci0KLSAg ICBpZiAoaXNndWVzdCAmJiBhbm9uZmlsZSkgewotICAgICAgY2tzdHJuY3B5KGxpbmUsIGFub25m aWxlLCBMSU5CVUZTSVorMSk7Ci0gICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAg ICAgIGlmIChyY2ZsYWcpIHsKLSAgICAgICAgICBja3N0cm5jcHkobGluZSxrZXJtcmMsTElOQlVG U0laKzEpOwotI2lmZGVmIENLX0xPR0lOCi0gICAgICB9IGVsc2UgaWYgKGluc2VydmVyKSB7Ci0g ICAgICAgICAgY2hhciAqIGFwcGRhdGEgPSBOVUxMOwotI2lmZGVmIE5UCi0gICAgICAgICAgYXBw ZGF0YSA9IEdldEFwcERhdGEoMSk7Ci0gICAgICAgICAgaWYgKCBhcHBkYXRhICkgewotICAgICAg ICAgICAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWisxLGFwcGRhdGEsCi0gICAgICAgICAgICAg ICAgICAgICAgICAiS2VybWl0IDk1L2s5NS5pbmkiLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAg IGlmICggemNoa2kobGluZSkgPCAwICkKLSAgICAgICAgICAgICAgICAgIGxpbmVbMF0gPSAnXDAn OwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAobGluZVswXSA9PSAwKSB7Ci0gICAgICAgICAg ICAgIGFwcGRhdGEgPSBHZXRBcHBEYXRhKDApOwotICAgICAgICAgICAgICBpZiAoIGFwcGRhdGEg KSB7Ci0gICAgICAgICAgICAgICAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWisxLGFwcGRhdGEs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIktlcm1pdCA5NS9rOTUuaW5pIixOVUxMLE5V TEwpOwotICAgICAgICAgICAgICAgICAgaWYgKCB6Y2hraShsaW5lKSA8IDAgKQotICAgICAgICAg ICAgICAgICAgICAgIGxpbmVbMF0gPSAnXDAnOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg fQotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgaWYgKGxpbmVbMF0gPT0gMCkgewotICAgICAg ICAgICAgICBhcHBkYXRhID0gemhvbWUoKTsKLSAgICAgICAgICAgICAgaWYgKCBhcHBkYXRhICkg ewotICAgICAgICAgICAgICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVorMSxhcHBkYXRhLAot I2lmZGVmIE5UCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJrOTUuaW5pIiwKLSNlbHNlIC8q IE5UICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJrMi5pbmkiLAotI2VuZGlmIC8qIE5U ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwpOwotICAgICAgICAgICAg ICAgICAgaWYgKCB6Y2hraShsaW5lKSA8IDAgKQotICAgICAgICAgICAgICAgICAgICAgIGxpbmVb MF0gPSAnXDAnOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGRlYnVn KEYxMTAsImRvaW5pdCBpbnNlcnZlciBpbmlmaWxlIixsaW5lLDApOwotI2VuZGlmIC8qIENLX0xP R0lOICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciAqIGVudiA9IDA7Ci0jaWZkZWYgTlQK LSAgICAgICAgZW52ID0gZ2V0ZW52KCJLOTUuS1NDIik7Ci0jZWxzZQotICAgICAgICBlbnYgPSBn ZXRlbnYoIksyLktTQyIpOwotI2VuZGlmIC8qIE5UICovCi0gICAgICAgIGlmICghZW52KSB7Ci0j aWZkZWYgTlQKLSAgICAgICAgICAgIGVudiA9IGdldGVudigiSzk1LklOSSIpOwotI2Vsc2UKLSAg ICAgICAgICAgIGVudiA9IGdldGVudigiSzIuSU5JIik7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAg ICAgfQotICAgICAgICBpZiAoIWVudikKLSAgICAgICAgICBlbnYgPSBnZXRlbnYoIkNLRVJNSVQu SU5JIik7Ci0gICAgICAgIGlmICghZW52KQotICAgICAgICAgIGVudiA9IGdldGVudigiQ0tFUk1J VF9JTkkiKTsKLSAgICAgICAgbGluZVswXSA9ICdcMCc7Ci0KLSAgICAgICAgZGVidWcoRjExMCwi ZG9pbml0IGVudiIsZW52LDApOwotICAgICAgICBpZiAoZW52KQotICAgICAgICAgIGNrc3RybmNw eShsaW5lLGVudixMSU5CVUZTSVorMSk7Ci0KLSNpZmRlZiBOVAotICAgICAgICBpZiAobGluZVsw XSA9PSAwKSB7Ci0gICAgICAgICAgICBlbnYgPSBHZXRBcHBEYXRhKDEpOwotICAgICAgICAgICAg aWYgKCBlbnYgKSB7Ci0gICAgICAgICAgICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVorMSxl bnYsIktlcm1pdCA5NS9rOTUuaW5pIixOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgIGlmICgg emNoa2kobGluZSkgPCAwICkKLSAgICAgICAgICAgICAgICAgICAgbGluZVswXSA9ICdcMCc7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxpbmVbMF0gPT0gMCkgewotICAg ICAgICAgICAgZW52ID0gR2V0QXBwRGF0YSgwKTsKLSAgICAgICAgICAgIGlmICggZW52ICkgewot ICAgICAgICAgICAgICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laKzEsZW52LCJLZXJtaXQgOTUv azk1LmluaSIsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICBpZiAoIHpjaGtpKGxpbmUpIDwg MCApCi0gICAgICAgICAgICAgICAgICAgIGxpbmVbMF0gPSAnXDAnOwotICAgICAgICAgICAgfQot ICAgICAgICB9Ci0jZW5kaWYgLyogTlQgKi8KLQotICAgICAgICBpZiAobGluZVswXSA9PSAwKSB7 Ci0gICAgICAgICAgICBlbnYgPSB6aG9tZSgpOwotICAgICAgICAgICAgaWYgKCBlbnYgKSB7Ci0g ICAgICAgICAgICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVorMSxlbnYsCi0jaWZkZWYgTlQK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIms5NS5pbmkiLAotI2Vsc2UgLyogTlQgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgImsyLmluaSIsCi0jZW5kaWYgLyogTlQgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICBpZiAoIHpj aGtpKGxpbmUpIDwgMCApCi0gICAgICAgICAgICAgICAgICAgIGxpbmVbMF0gPSAnXDAnOwotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxpbmVbMF0gPT0gMCkKLSAgICAg ICAgICBfc2VhcmNoZW52KGtlcm1yYywiSU5JVCIsbGluZSk7Ci0gICAgICAgIGlmIChsaW5lWzBd ID09IDApCi0gICAgICAgICAgX3NlYXJjaGVudihrZXJtcmMsIkRQQVRIIixsaW5lKTsKLSAgICAg ICAgaWYgKGxpbmVbMF0gPT0gMCkKLSAgICAgICAgICBfc2VhcmNoZW52KGtlcm1yYywiUEFUSCIs bGluZSk7Ci0gICAgICAgIGlmIChsaW5lWzBdID09IDApIHsKLSAgICAgICAgICAgIGNoYXIgKnBn bXB0ciA9IEdldExvYWRQYXRoKCk7Ci0gICAgICAgICAgICBpZiAocGdtcHRyICYmIHN0cmxlbihw Z21wdHIpIDwgTElOQlVGU0laLTgpIHsKLSAgICAgICAgICAgICAgICBscCA9IHN0cnJjaHIocGdt cHRyLCAnXFwnKTsKLSAgICAgICAgICAgICAgICBpZiAobHApIHsKLSAgICAgICAgICAgICAgICAg ICAgc3RybmNweShsaW5lLCBwZ21wdHIsIGxwIC0gcGdtcHRyKTsKLSNpZmRlZiBOVAotICAgICAg ICAgICAgICAgICAgICBzdHJjcHkobGluZSArIChscCAtIHBnbXB0ciksICIvazk1LmluaSIpOwot I2Vsc2UgLyogTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KGxpbmUgKyAobHAgLSBw Z21wdHIpLCAiL2syLmluaSIpOwotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbHAgPSBzdHJyY2hyKHBnbXB0ciwgJy4nKTsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKGxwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJu Y3B5KGxpbmUsIHBnbXB0ciwgbHAgLSBwZ21wdHIpOwotICAgICAgICAgICAgICAgICAgICAgICAg c3RyY3B5KGxpbmUgKyAobHAgLSBwZ21wdHIpLCAiLmluaSIpOwotICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot Ci0jaWZkZWYgQ0tST09UCi0gICAgaWYgKCF6aW5yb290KGxpbmUpKSB7Ci0gICAgICAgIGRlYnVn KEYxMTAsImRvaW5pdCBzZXRyb290IHZpb2xhdGlvbiIsbGluZSwwKTsKLSAgICAgICAgcmV0dXJu OwotICAgIH0KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotICAgIGRlYnVnKEYxMTAsImRvaW5pdCBm b3BlbigpIixsaW5lLDApOwotICAgIGlmICgodGZpbGVbMF0gPSBmb3BlbihsaW5lLCJyIikpICE9 IE5VTEwpIHsKLSAgICAgICAgb2sgPSAxOwotICAgICAgICB0bGV2ZWwgPSAwOwotICAgICAgICB0 ZmxpbmVbdGxldmVsXSA9IDA7Ci0gICAgICAgIGlmICh0Zm5hbVt0bGV2ZWxdID0gbWFsbG9jKHN0 cmxlbihsaW5lKSsxKSkKLSAgICAgICAgICBzdHJjcHkodGZuYW1bdGxldmVsXSxsaW5lKTsgICAv KiBzYWZlICovCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgIGNtZGx2bCsrOwotICAgICAgICB4Y21k c3JjID0gQ01EX1RGOwotICAgICAgICBjbWRzdGtbY21kbHZsXS5zcmMgPSBDTURfVEY7Ci0gICAg ICAgIGNtZHN0a1tjbWRsdmxdLmx2bCA9IHRsZXZlbDsKLSAgICAgICAgY21kc3RrW2NtZGx2bF0u Y2NmbGdzID0gMDsKLSAgICAgICAgaWZjbWRbY21kbHZsXSA9IDA7Ci0gICAgICAgIGlmdGVzdFtj bWRsdmxdID0gMDsKLSAgICAgICAgY291bnRbY21kbHZsXSA9ICBjb3VudFtjbWRsdmwtMV07IC8q IEluaGVyaXQgZnJvbSBwcmV2aW91cyBsZXZlbCAqLwotICAgICAgICBpbnRpbWVbY21kbHZsXSA9 IGludGltZVtjbWRsdmwtMV07Ci0gICAgICAgIGlucGNhc1tjbWRsdmxdID0gaW5wY2FzW2NtZGx2 bC0xXTsKLSAgICAgICAgdGFrZXJyW2NtZGx2bF0gPSB0YWtlcnJbY21kbHZsLTFdOwotICAgICAg ICBtZXJyb3JbY21kbHZsXSA9IG1lcnJvcltjbWRsdmwtMV07Ci0gICAgICAgIHhxdWlldFtjbWRs dmxdID0gcXVpZXQ7Ci0gICAgICAgIHh2YXJldltjbWRsdmxdID0gdmFyZXZhbDsKLSNlbmRpZiAv KiBOT1NQTCAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJkb2luaXQgaW5pdCBmaWxlIixsaW5lLDAp OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsImRvaW5pdCBubyBpbml0IGZpbGUi LCIiLDApOwotICAgIH0KLSAgICBja3N0cm5jcHkoa2VybXJjLGxpbmUsS0VSTVJDTCk7Ci0gICAg Zm9yIChwdHIgPSBrZXJtcmM7ICpwdHI7IHB0cisrKSAgICAgLyogQ29udmVydCBiYWNrc2xhc2hl cyB0byBzbGFzaGVzICovCi0gICAgICAgaWYgKCpwdHIgPT0gJ1xcJykKLSAgICAgICAgICpwdHIg PSAnLyc7Ci0jZWxzZSAvKiBub3QgT1MyICovCi0gICAgbHAgPSBsaW5lOwotICAgIGxwWzBdID0g J1wwJzsKLSAgICBkZWJ1ZyhGMTAxLCJkb2luaXQgcmNmbGFnIiwiIixyY2ZsYWcpOwotI2lmZGVm IEdFTURPUwotICAgIHprZXJtaW5pKGxpbmUsIHJjZmxhZywga2VybXJjKTsKLSNlbHNlCi0jaWZk ZWYgVk1TCi0gICAgewotCWludCB4OwotCXggPSB6a2VybWluaShsaW5lLExJTkJVRlNJWixrZXJt cmMpOwotCWRlYnVnKEYxMTEsIkNVU1RPTSB6a2VybWluaSIsbGluZSx4KTsKLQlpZiAoeCA9PSAw KQotCSAgbGluZVswXSA9IE5VTDsKLSAgICB9Ci0jZWxzZSAvKiBub3QgVk1TICovCi0jaWZkZWYg Q0tfTE9HSU4KLSAgICBkZWJ1ZyhGMTAxLCJkb2luaXQgaXNndWVzdCIsIiIsaXNndWVzdCk7Ci0g ICAgaWYgKGlzZ3Vlc3QpCi0gICAgICBja3N0cm5jcHkobHAsIGFub25maWxlID8gYW5vbmZpbGUg OiBrZXJtcmMsIExJTkJVRlNJWik7Ci0gICAgZWxzZQotI2VuZGlmIC8qIENLX0xPR0lOICovCi0g ICAgICBpZiAocmNmbGFnKSB7ICAgICAgICAgICAgICAgICAgICAgLyogSWYgaW5pdCBmaWxlIG5h bWUgZnJvbSBjbWQgbGluZSAqLwotICAgICAgICAgIGNrc3RybmNweShscCxrZXJtcmMsTElOQlVG U0laKTsgLyogdXNlIGl0LCAqLwotICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIG90aGVyd2lzZS4uLiAqLwotI2lmZGVmIENLX0lOSV9BICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIElmIHdlJ3ZlIGEgc3lzdGVtLXdpZGUgaW5pdCBmaWxlICovCi0gICAgICAgICAg LyogQW5kIGl0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgdXNlcidzLi4uICovCi0gICAgICAg ICAgY2tzdHJuY3B5KGxwLENLX1NZU0lOSSxLRVJNUkNMKTsgLyogVXNlIGl0ICovCi0gICAgICAg ICAgaWYgKHpjaGtpKGxwKSA8IDApIHsgICAgICAgICAgLyogKGlmIGl0IGV4aXN0cy4uLikgKi8K LSNlbmRpZiAvKiBDS19JTklfQSAqLwotICAgICAgICAgICAgICBjaGFyICogaG9tZGlyOwotICAg ICAgICAgICAgICBjaGFyICogZW52ID0gMDsKLSAgICAgICAgICAgICAgbGluZVswXSA9IE5VTDsK LQotICAgICAgICAgICAgICAvKiBBZGQgc3VwcG9ydCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUg Ki8KLSAgICAgICAgICAgICAgZW52ID0gZ2V0ZW52KCJDS0VSTUlULklOSSIpOwotICAgICAgICAg ICAgICBpZiAoIWVudikKLSAgICAgICAgICAgICAgICBlbnYgPSBnZXRlbnYoIkNLRVJNSVRfSU5J Iik7Ci0gICAgICAgICAgICAgIGlmIChlbnYpCi0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KGxw LGVudixLRVJNUkNMKTsKLQotICAgICAgICAgICAgICBpZiAobHBbMF0gPT0gMCkgewotICAgICAg ICAgICAgICAgICAgaG9tZGlyID0gemhvbWUoKTsKLSAgICAgICAgICAgICAgICAgIGlmIChob21k aXIpIHsgICAgICAgICAvKiBIb21lIGRpcmVjdG9yeSBmb3IgaW5pdCBmaWxlLiAqLwotICAgICAg ICAgICAgICAgICAgICAgIGNrc3RybmNweShscCxob21kaXIsS0VSTVJDTCk7Ci0jaWZkZWYgU1RS QVRVUwotICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChscCwiPiIsS0VSTVJDTCk7Lyog Vk9TIGRpcnNlcCAqLwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICBpZiAobHBbMF0gPT0g Jy8nKSBja3N0cm5jYXQobHAsIi8iLEtFUk1SQ0wpOwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChscCxrZXJtcmMs S0VSTVJDTCk7LyogQXBwZW5kIGRlZmF1bHQgZmlsZSBuYW1lICovCi0gICAgICAgICAgICAgIH0K LSNpZmRlZiBDS19JTklfQQotICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19JTklfQSAqLwotI2lm ZGVmIENLX0lOSV9CICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbS13aWRlIGluaXQg ZGVmaW5lZD8gKi8KLSAgICAgICAgICAvKiBCdXQgdXNlcidzIGluaSBmaWxlIHRha2VzIHByZWNl ZGVuY2UgKi8KLSAgICAgICAgICBpZiAoemNoa2kobHApIDwgMCkgICAgICAgICAgICAvKiBJZiB1 c2VyIGRvZXNuJ3QgaGF2ZSBoZXIgb3duLCAqLwotICAgICAgICAgICAgY2tzdHJuY3B5KGxwLENL X1NZU0lOSSxLRVJNUkNMKTsgLyogdXNlIHN5c3RlbS13aWRlIG9uZS4gKi8KLSNlbmRpZiAvKiBD S19JTklfQiAqLwotICAgICAgfQotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIEdFTURPUyAq LwotCi0jaWZkZWYgQU1JR0EKLSAgICByZXFvZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBEaXNhYmxlIHJlcXVlc3RvcnMgKi8KLSNlbmRpZiAvKiBBTUlHQSAqLwotCi0jaWZkZWYg VVNFX0NVU1RPTQotICAgIC8qIElmIG5vIGluaXQgZmlsZSB3YXMgZm91bmQsIGV4ZWN1dGUgdGhl IGN1c3RvbWl6YXRpb24gZmlsZSAqLwotICAgIGRlYnVnKEYxMTEsIkNVU1RPTSAxIixsaW5lLHJj ZmxhZyk7Ci0gICAgaWYgKCghbGluZVswXSB8fCB6Y2hraShsaW5lKSA8IDApICYmICFyY2ZsYWcp IHsKLQlpbnQgeDsKLSNpZmRlZiBPUzIKLQl4ID0gY2ttYWtlc3RyKGxpbmUsTElOQlVGU0laLEdl dEFwcERhdGEoMSksIi8iLCJLOTVDVVNUT00uSU5JIixOVUxMKTsKLQlkZWJ1ZyhGMTExLCJDVVNU T00gMiIsbGluZSx4KTsKLQlpZiAoemNoa2kobGluZSkgPCAwKSB7Ci0JICAgIHggPSBja21ha2Vz dHIobGluZSxMSU5CVUZTSVosR2V0QXBwRGF0YSgwKSwiLyIsIks5NVVTRVIuSU5JIixOVUxMKTsK LQkgICAgZGVidWcoRjExMSwiQ1VTVE9NIDMiLGxpbmUseCk7Ci0JfQotI2Vsc2UgIC8qIE9TMiAq LwotCXggPSBja3N0cm5jcHkobGluZSx6aG9tZSgpLExJTkJVRlNJWik7Ci0jaWZuZGVmIFZNUwot CS8qIFZNUyB6aG9tZSgpIHJldHVybnMgIlNZUyRMT0dJTjoiICovCi0JaWYgKGxpbmVbeC0xXSAh PSBESVJTRVApIHsKLQkgICAgbGluZVt4KytdID0gRElSU0VQOwotCSAgICBsaW5lW3hdID0gTlVM OwotCX0KLSNlbmRpZiAvKiBWTVMgKi8KLQl4ID0gY2tzdHJuY2F0KGxpbmUsTVlDVVNUT00sTElO QlVGU0laKTsKLQlkZWJ1ZyhGMTExLCJDVVNUT00gNCIsbGluZSx4KTsKLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICB9Ci0gICAgZGVidWcoRjExMCwiQ1VTVE9NIDUiLGxpbmUsMCk7Ci0jZW5kaWYgLyog VVNFX0NVU1RPTSAqLwotCi0jaWZkZWYgQ0tST09UCi0gICAgaWYgKCF6aW5yb290KGxpbmUpKSB7 Ci0gICAgICAgIGRlYnVnKEYxMTAsImRvaW5pdCBzZXRyb290IHZpb2xhdGlvbiIsbGluZSwwKTsK LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotICAgIGRlYnVn KEYxMTAsImRvaW5pdCBpbmkgZmlsZSBpcyIsbGluZSwwKTsKLSAgICBpZiAoKHRmaWxlWzBdID0g Zm9wZW4obGluZSwiciIpKSAhPSBOVUxMKSB7IC8qIFRyeSB0byBvcGVuIGluaXQgZmlsZS4gKi8K LSAgICAgICAgb2sgPSAxOwotICAgICAgICB0bGV2ZWwgPSAwOwotICAgICAgICB0ZmxpbmVbdGxl dmVsXSA9IDA7Ci0gICAgICAgIGlmICgodGZuYW1bdGxldmVsXSA9IG1hbGxvYyhzdHJsZW4obGlu ZSkrMSkpKQotICAgICAgICAgIHN0cmNweSh0Zm5hbVt0bGV2ZWxdLGxpbmUpOyAgIC8qIHNhZmUg Ki8KLQotICAgICAgICBja3N0cm5jcHkoa2VybXJjLGxpbmUsS0VSTVJDTCk7Ci0KLSNpZm5kZWYg Tk9TUEwKLSAgICAgICAgY21kbHZsKys7Ci0gICAgICAgIGlmY21kW2NtZGx2bF0gPSAwOwotICAg ICAgICBpZnRlc3RbY21kbHZsXSA9IDA7Ci0gICAgICAgIGNvdW50W2NtZGx2bF0gPSAgY291bnRb Y21kbHZsLTFdOyAvKiBJbmhlcml0IGZyb20gcHJldmlvdXMgbGV2ZWwgKi8KLSAgICAgICAgaW50 aW1lW2NtZGx2bF0gPSBpbnRpbWVbY21kbHZsLTFdOwotICAgICAgICBpbnBjYXNbY21kbHZsXSA9 IGlucGNhc1tjbWRsdmwtMV07Ci0gICAgICAgIHRha2VycltjbWRsdmxdID0gdGFrZXJyW2NtZGx2 bC0xXTsKLSAgICAgICAgbWVycm9yW2NtZGx2bF0gPSBtZXJyb3JbY21kbHZsLTFdOwotICAgICAg ICB4cXVpZXRbY21kbHZsXSA9IHF1aWV0OwotICAgICAgICB4dmFyZXZbY21kbHZsXSA9IHZhcmV2 YWw7Ci0gICAgICAgIGRlYnVnKEYxMDEsImRvaW5pdCBvcGVuIG9rIiwiIixjbWRsdmwpOwotICAg ICAgICB4Y21kc3JjID0gQ01EX1RGOwotICAgICAgICBjbWRzdGtbY21kbHZsXS5zcmMgPSBDTURf VEY7Ci0gICAgICAgIGNtZHN0a1tjbWRsdmxdLmx2bCA9IHRsZXZlbDsKLSAgICAgICAgY21kc3Rr W2NtZGx2bF0uY2NmbGdzID0gMDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIH0gZWxzZSBpZiAo cmNmbGFnKSB7Ci0gICAgICAgIC8qIFByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb25seSBpZiBhIHNw ZWNpZmljIGZpbGUgd2FzIGFza2VkIGZvci4gKi8KLSAgICAgICAgcHJpbnRmKCI/JXMgLSAlc1xu IiwgY2tfZXJyc3RyKCksIGxpbmUpOwotICAgIH0KLQotI2lmZGVmIGRhdGFnZW5lcmFsCi0vKiBJ ZiBDS0VSTUlULklOSSBub3QgZm91bmQgaW4gaG9tZSBkaXJlY3RvcnksIGxvb2sgaW4gc2VhcmNo bGlzdCAqLwotICAgIGlmICgvKiBob21kaXIgJiYgKi8gKHRsZXZlbCA8IDApKSB7Ci0gICAgICAg IGNrc3RybmNweShscCxrZXJtcmMsTElOQlVGU0laKTsKLSAgICAgICAgaWYgKCh0ZmlsZVswXSA9 IGZvcGVuKGxpbmUsInIiKSkgIT0gTlVMTCkgewotICAgICAgICAgICAgb2sgPSAxOwotICAgICAg ICAgICAgdGxldmVsID0gMDsKLSAgICAgICAgICAgIHRmbGluZVt0bGV2ZWxdID0gMDsKLSAgICAg ICAgICAgIGlmICh0Zm5hbVt0bGV2ZWxdID0gbWFsbG9jKHN0cmxlbihsaW5lKSsxKSkKLSAgICAg ICAgICAgICAgc3RyY3B5KHRmbmFtW3RsZXZlbF0sbGluZSk7IC8qIHNhZmUgKi8KLSNpZm5kZWYg Tk9TUEwKLSAgICAgICAgICAgIGNtZGx2bCsrOwotICAgICAgICAgICAgeGNtZHNyYyA9IENNRF9U RjsKLSAgICAgICAgICAgIGNtZHN0a1tjbWRsdmxdLnNyYyA9IENNRF9URjsKLSAgICAgICAgICAg IGNtZHN0a1tjbWRsdmxdLmx2bCA9IHRsZXZlbDsKLSAgICAgICAgICAgIGNtZHN0a1tjbWRsdmxd LmNjZmxncyA9IDA7Ci0gICAgICAgICAgICBpZmNtZFtjbWRsdmxdID0gMDsKLSAgICAgICAgICAg IGlmdGVzdFtjbWRsdmxdID0gMDsKLSAgICAgICAgICAgIGNvdW50W2NtZGx2bF0gPSAgY291bnRb Y21kbHZsLTFdOyAvKiBJbmhlcml0IGZyb20gcHJldmlvdXMgbGV2ZWwgKi8KLSAgICAgICAgICAg IGludGltZVtjbWRsdmxdID0gaW50aW1lW2NtZGx2bC0xXTsKLSAgICAgICAgICAgIGlucGNhc1tj bWRsdmxdID0gaW5wY2FzW2NtZGx2bC0xXTsKLSAgICAgICAgICAgIHRha2VycltjbWRsdmxdID0g dGFrZXJyW2NtZGx2bC0xXTsKLSAgICAgICAgICAgIG1lcnJvcltjbWRsdmxdID0gbWVycm9yW2Nt ZGx2bC0xXTsKLSAgICAgICAgICAgIHhxdWlldFtjbWRsdmxdID0gcXVpZXQ7Ci0JICAgIHh2YXJl dltjbWRsdmxdID0gdmFyZXZhbDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICB9Ci0gICAg fQotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0KLSNpZmRlZiBBTUlHQSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBBbWlnYS4uLiAqLwotICAgIHJlcXBvcCgpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFJlc3RvcmUgcmVxdWVzdG9ycyAqLwotI2VuZGlmIC8qIEFNSUdBICov Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTUFDICovCi0KLSAgICAvKiBBc3NpZ24gdmFs dWUgdG8gaW5pZGlyICovCi0KLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIGluaWRpclswXSA9IE5V TDsKLSAgICB9IGVsc2UgewotICAgICAgICBja3N0cm5jcHkoaW5pZGlyLCBrZXJtcmMsIENDSE1B WFBBVEgpOwotICAgICAgICB4ID0gc3RybGVuKGluaWRpcik7Ci0gICAgICAgIGlmICh4ID4gMCkg ewotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICBmb3IgKGkgPSB4IC0gMTsgaSA+IDA7 IGktLSApIHsKLSAgICAgICAgICAgICAgICBpZiAoSVNESVJTRVAoaW5pZGlyW2ldKSkgewotICAg ICAgICAgICAgICAgICAgICBpbmlkaXJbaSsxXSA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jaWZk ZWYgTlQKLSAgICAgICAgR2V0U2hvcnRQYXRoTmFtZShpbmlkaXIsaW5pZGlyLENDSE1BWFBBVEgp OwotI2VuZGlmIC8qIE5UICovCi0gICAgfQotfQotCi1WT0lECi1kb2lrc2Rpbml0KCkgewotI2lm ZGVmIENLX1NTTAotICAgIC8qIElLU0QgZG9lc24ndCByZXF1ZXN0IGNsaWVudCBjZXJ0cyAqLwot ICAgIHNzbF92ZXJpZnlfZmxhZyA9IFNTTF9WRVJJRllfTk9ORTsKLSNlbmRpZiAvKiBDS19TU0wg Ki8KLQotICAgIGlmICghY21kaW5pdGVkKQotICAgICAgY21kaW5pKCk7Ci0KLSNpZmRlZiBJS1NE Q09ORgotI2lmZGVmIE9TMgotICAgIGxpbmVbMF0gPSAnXDAnOwotICAgIF9zZWFyY2hlbnYoaWtz ZGNvbmYsIklOSVQiLGxpbmUpOwotICAgIGlmIChsaW5lWzBdID09IDApCi0gICAgICBfc2VhcmNo ZW52KGlrc2Rjb25mLCJEUEFUSCIsbGluZSk7Ci0gICAgaWYgKGxpbmVbMF0gPT0gMCkKLSAgICAg IF9zZWFyY2hlbnYoaWtzZGNvbmYsIlBBVEgiLGxpbmUpOwotICAgIGlmIChsaW5lWzBdID09IDAp IHsKLSAgICAgICAgY2hhciAqcGdtcHRyID0gR2V0TG9hZFBhdGgoKTsKLSAgICAgICAgaWYgKHBn bXB0ciAmJiBzdHJsZW4ocGdtcHRyKSA8IExJTkJVRlNJWi04KSB7Ci0gICAgICAgICAgICBscCA9 IHN0cnJjaHIocGdtcHRyLCAnXFwnKTsKLSAgICAgICAgICAgIGlmIChscCkgewotICAgICAgICAg ICAgICAgIHN0cm5jcHkobGluZSwgcGdtcHRyLCBscCAtIHBnbXB0cik7Ci0gICAgICAgICAgICAg ICAgc3RyY3B5KGxpbmUgKyAobHAgLSBwZ21wdHIpLCAiXFwiKTsKLSAgICAgICAgICAgICAgICBz dHJjcHkobGluZSArIChscCAtIHBnbXB0ciArIDEpLCBpa3NkY29uZik7Ci0gICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICAgIGxwID0gc3RycmNocihwZ21wdHIsICcuJyk7Ci0gICAg ICAgICAgICAgICAgaWYgKGxwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0cm5jcHkobGluZSwg cGdtcHRyLCBscCAtIHBnbXB0cik7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmNweShsaW5lICsg KGxwIC0gcGdtcHRyKSwgIi5rc2MiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVidWcoRjExMCwiZG9pa3NkaW5pdCgpIGxpbmUiLGxp bmUsMCk7Ci0gICAgdGZpbGVbMF0gPSBmb3BlbihsaW5lLCJyIik7Ci0jZWxzZSAvKiBPUzIgKi8K LSAgICB0ZmlsZVswXSA9IGZvcGVuKGlrc2Rjb25mLCJyIik7Ci0jZW5kaWYgLyogT1MyICovCi0g ICAgaWYgKHRmaWxlWzBdICE9IE5VTEwpIHsKLSAgICAgICAgdGxldmVsID0gMDsKLSAgICAgICAg dGZsaW5lW3RsZXZlbF0gPSAwOwotI2lmZGVmIE9TMgotICAgICAgICBpZiAodGZuYW1bdGxldmVs XSA9IG1hbGxvYyhzdHJsZW4obGluZSkrMSkpCi0gICAgICAgICAgc3RyY3B5KHRmbmFtW3RsZXZl bF0sbGluZSk7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgaWYgKCh0Zm5hbVt0bGV2ZWxdID0g bWFsbG9jKHN0cmxlbihpa3NkY29uZikrMSkpKQotICAgICAgICAgIHN0cmNweSh0Zm5hbVt0bGV2 ZWxdLGlrc2Rjb25mKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAg Y21kbHZsKys7Ci0gICAgICAgIHhjbWRzcmMgPSBDTURfVEY7Ci0gICAgICAgIGNtZHN0a1tjbWRs dmxdLnNyYyA9IENNRF9URjsKLSAgICAgICAgY21kc3RrW2NtZGx2bF0ubHZsID0gdGxldmVsOwot ICAgICAgICBjbWRzdGtbY21kbHZsXS5jY2ZsZ3MgPSAwOwotICAgICAgICBpZmNtZFtjbWRsdmxd ICA9IDA7Ci0gICAgICAgIGlmdGVzdFtjbWRsdmxdID0gMDsKLSAgICAgICAgY291bnRbY21kbHZs XSAgPSBjb3VudFtjbWRsdmwtMV07IC8qIEluaGVyaXQgZnJvbSBwcmV2aW91cyBsZXZlbCAqLwot ICAgICAgICBpbnRpbWVbY21kbHZsXSA9IGludGltZVtjbWRsdmwtMV07Ci0gICAgICAgIGlucGNh c1tjbWRsdmxdID0gaW5wY2FzW2NtZGx2bC0xXTsKLSAgICAgICAgdGFrZXJyW2NtZGx2bF0gPSB0 YWtlcnJbY21kbHZsLTFdOwotICAgICAgICBtZXJyb3JbY21kbHZsXSA9IG1lcnJvcltjbWRsdmwt MV07Ci0gICAgICAgIHhxdWlldFtjbWRsdmxdID0gcXVpZXQ7Ci0JeHZhcmV2W2NtZGx2bF0gPSB2 YXJldmFsOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgIGRlYnVnKEYxMTAsImRvaWtzZGlu aXQgZmlsZSBvayIsdGZuYW1bdGxldmVsXSwwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBkZWJ1 ZyhGMTEwLCJkb2lrc2Rpbml0IG9wZW4gZmFpbGVkIix0Zm5hbVt0bGV2ZWxdLDApOwotICAgIH0K LSNlbmRpZiAvKiBJS1NEQ09ORiAqLwotfQotCi0jaWZuZGVmIE5PU1BMCi0vKgotICBHIEUgVCBO IEMgTQotCi0gIEdldCBuZXh0IGNvbW1hbmQgZnJvbSBjdXJyZW50IG1hY3JvIGRlZmluaXRpb24u ICBDb21tYW5kIGlzIGNvcGllZAotICBpbnRvIHN0cmluZyBwb2ludGVkIHRvIGJ5IGFyZ3VtZW50 IHMsIG1heCBsZW5ndGggbi4gICBSZXR1cm5zOgotICAgMCBpZiBhIHN0cmluZyB3YXMgY29waWVk OwotICAtMSBpZiB0aGVyZSB3YXMgbm8gc3RyaW5nIHRvIGNvcHkuCi0qLwotaW50Ci1nZXRuY20o cyxuKSBjaGFyICpzOyBpbnQgbjsgewotICAgIGludCB5ID0gMDsJCQkJLyogQ2hhcmFjdGVyIGNv dW50ZXIgKi8KLSAgICBpbnQgcXVvdGUgPSAwOwotICAgIGludCBrcCA9IDA7CQkJCS8qIEJyYWNl IHVwLWRvd24gY291bnRlciAqLwotICAgIGludCBwcCA9IDA7CQkJCS8qIFBhcmVudGhlc2lzIHVw LWRvd24gY291bnRlciAqLwotI2lmbmRlZiBOT0RRTUFDUk8KLSAgICBpbnQgZHEgPSAwOwkJCQkv KiBEb3VibGVxdW90ZSBjb3VudGVyICovCi0jZW5kaWYgLyogTk9EUU1BQ1JPICovCi0gICAgY2hh ciAqczI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29weSBvZiBkZXN0aW5hdGlvbiBw b2ludGVyICovCi0KLSAgICBzMiA9IHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJ bml0aWFsaXplIHN0cmluZyBwb2ludGVycyAqLwotICAgICpzID0gTlVMOyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGFuZCBkZXN0aW5hdGlvbiBidWZmZXIgKi8KLQotICAgIC8qIGRlYnVn KEYwMTAsImdldG5jbSBlbnRyeSIsbWFjcFttYWNsdmxdLDApOyAqLwotCi0gICAgZm9yICh5ID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9vcCBmb3IgbiBieXRlcyBtYXggKi8KLSAg ICAgICAgIG1hY3BbbWFjbHZsXSAmJiAqbWFjcFttYWNsdmxdICYmIHkgPCBuOwotICAgICAgICAg eSsrLCBzKyssIG1hY3BbbWFjbHZsXSsrKSB7Ci0KLSAgICAgICAgKnMgPSAqbWFjcFttYWNsdmxd OyAgICAgICAgICAgICAvKiBHZXQgbmV4dCBjaGFyIGZyb20gbWFjcm8gZGVmICovCi0KLSNpZm5k ZWYgQ09NTUVOVAotLyoKLSAgVGhpcyBpcyB0byBhbGxvdyBxdW90aW5nIG9mIHBhcmVudGhlc2Vz LCBjb21tYXMsIGV0YywgaW4gZnVuY3Rpb24KLSAgYXJndW1lbnRzLCBidXQgaXQgYnJlYWtzIGp1 c3QgYWJvdXQgZXZlcnl0aGluZyBlbHNlLiAgRE9OJ1QgUkVNT1ZFIFRISVMKLSAgQ09NTUVOVCEg IChPdGhlcndpc2UgeW91J2xsIHdpbmQgdXAgYWRkaW5nIHRoZSBzYW1lIGNvZGUgYWdhaW4gYW5k IGJyZWFraW5nCi0gIGV2ZXJ5dGhpbmcgYWdhaW4uKSAgPC0tIFRoZSBwcmVjZWRpbmcgd2Fybmlu ZyBzaG91bGQgYmUgb2Jzb2xldGUgc2luY2UgdGhlCi0gIHN0YXRlbWVudHMgYmVsb3cgaGF2ZSBi ZWVuIGZpeGVkLCBidXQgaW4gY2FzZSBvZiBmaXJlLCByZW1vdmUgdGhlICJuIiBmcm9tCi0gIHRo ZSA8Iz5pZm5kZWYgYWJvdmUuICBORVcgV0FSTklORzogY29kZSBhZGRlZCAxMiBBcHIgMjAwMiB0 byBleGVtcHQgdGhlCi0gIG9wZW5pbmcgYnJhY2UgaW4gXHtubm59IGZyb20gYmVpbmcgdHJlYXRl ZCBhcyBhIHF1b3RlZCBicmFjZS4KLSovCi0gICAgICAgIGlmICghcXVvdGUgJiYgKnMgPT0gQ01E USkgewotICAgICAgICAgICAgcXVvdGUgPSAxOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKHF1b3RlKSB7Ci0JICAgIGludCBub3RxdW90ZSA9IDA7Ci0gICAg ICAgICAgICBxdW90ZSA9IDA7Ci0JICAgIGlmICgqcyA9PSAneycpIHsJCS8qIENoZWNrIGZvciBc e25ubn0gKDguMC4yMDMpICovCi0JCWNoYXIgYywgKiBwOwotCQlwID0gbWFjcFttYWNsdmxdICsg MTsKLQkJd2hpbGUgKChjID0gKnArKykpIHsKLQkJICAgIGlmIChpc2RpZ2l0KGMpKQotCQkgICAg ICBjb250aW51ZTsKLQkJICAgIGVsc2UgaWYgKGMgPT0gJ30nKSB7Ci0JCQlub3RxdW90ZSsrOwot CQkJYnJlYWs7Ci0JCSAgICB9IGVsc2UgewotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkgICAg fQotCSAgICBpZiAobm90cXVvdGUgPT0gMCkKLQkgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQotLyoKLSAgQWxsb3cgYnJhY2VzIGFyb3VuZCBtYWNybyBk ZWZpbml0aW9uIHRvIHByZXZlbnQgY29tbWFzIGZyb20gYmVpbmcgdHVybmVkIHRvCi0gIGVuZC1v Zi1saW5lcyBhbmQgYWxzbyB0cmVhdCBhbnkgY29tbWFzIHdpdGhpbiBwYXJlbnMgYXMgdGV4dCBz byB0aGF0Ci0gIG11bHRpcGxlLWFyZ3VtZW50IGZ1bmN0aW9ucyB3b24ndCBjYXVzZSB0aGUgY29t bWFuZCB0byBicmVhayBwcmVtYXR1cmVseS4KLSAgMTkgT2N0IDIwMDE6IFNpbWlsYXIgdHJlYXRt ZW50IHdhcyBhZGRlZCBmb3IgZG91YmxlcXVvdGVzLCBzbwotCi0gICAgIGRlZmluZSBmb28geyBl Y2hvICJvbmUsIHR3bywgdGhyZWUiIH0KLQotICB3b3VsZCB3b3JrIGFzIGV4cGVjdGVkLiAgVGhp cyBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBicm9rZW4gYW55dGhpbmcgYnV0Ci0gIGlmIHNvbWV0aGlu ZyBjb21lcyB1cCBsYXRlciwgcmVidWlsZCB3aXRoIE5PRFFNQUNSTyBkZWZpbmVkLgotKi8KLSAg ICAgICAgaWYgKCpzID09ICd7Jykga3ArKzsgICAgICAgICAgICAvKiBDb3VudCBicmFjZXMgKi8K LSAgICAgICAgaWYgKCpzID09ICd9JyAmJiBrcCA+IDApIGtwLS07Ci0gICAgICAgIGlmICgqcyA9 PSAnKCcpIHBwKys7ICAgICAgICAgICAgLyogQ291bnQgcGFyZW50aGVzZXMuICovCi0gICAgICAg IGlmICgqcyA9PSAnKScgJiYgcHAgPiAwKSBwcC0tOwotI2lmbmRlZiBOT0RRTUFDUk8KLSNpZm5k ZWYgQ09NTUVOVAotCS8qIFRvbyBtYW55IGZhbHNlIHBvc2l0aXZlcyAqLwotCS8qIE5vLCBub3Qg cmVhbGx5IC0tIHRoaXMgaXMgaW5kZWVkIHRoZSBiZXN0IHdlIGNhbiBkbyAqLwotCS8qIFJldmVy dGVkIHRvIHRoaXMgbWV0aG9kIFN1biBNYXkgMTEgMTg6NDM6NDUgMjAwMyAqLwotCWlmICgqcyA9 PSAnIicpIGRxID0gMSAtIGRxOyAgICAgLyogQWNjb3VudCBmb3IgZG91YmxlcXVvdGVzICovCi0j ZWxzZSAgLyogRnJpIEFwciAgNCAxMzoyMToyOSAyMDAzICovCi0JLyogVGhlIGNvZGUgYmVsb3cg YnJlYWtzIHRoZSBTV0lUQ0ggc3RhdGVtZW50ICovCi0JLyogVGhlcmUgaXMgbm8gd2F5IHRvIG1h a2UgdGhpcyB3b3JrIC0tIGl0IHdvdWxkIHJlcXVpcmUgKi8KLQkvKiBidWlsZGluZyBpbiBhbGwg dGhlIGtub3dsZWRnZSBvZiBjb21tYW5kIHBhcnNlci4gKi8KLSAgICAgICAgaWYgKGRibHF1byAm JiAoKnMgPT0gJyInKSkgeyAgICAvKiBIYXZlIGRvdWJsZXF1b3RlICovCi0gICAgICAgICAgICBp ZiAoZHEgPT0gMSkgewkJLyogQ2xvc2UgcXVvdGUgb25seSBpZi4uLiAqLwotICAgICAgICAgICAg ICAgIGlmICgoKihtYWNwW21hY2x2bF0rMSkgPT0gU1ApIHx8IC8qIGZvbGxvd2VkIGJ5IHNwYWNl IG9yLi4uICovCi0JCSAgICAoISoobWFjcFttYWNsdmxdKzEpKSB8fCAgICAgIC8qIGF0IGVuZCBv ciAuLi4gKi8KLQkJICAgIC8qIE5leHQgY2hhciBpcyBjb21tYW5kIHNlcGFyYXRvci4uLiAqLwot CQkgICAgLyogU3VuIE1heSAxMSAxNzoyNDoxMiAyMDAzICovCi0JCSAgICAoa3AgPCAxICYmIHBw IDwgMSAmJiAoKihtYWNwW21hY2x2bF0rMSkgPT0gJywnKSkKLQkJICAgICkJCSAgICAgCi0gICAg ICAgICAgICAgICAgICBkcSA9IDA7CQkvKiBDbG9zZSB0aGUgcXVvdGUgKi8KLSAgICAgICAgICAg IH0gZWxzZSBpZiAoZHEgPT0gMCkgewotICAgICAgICAgICAgICAgIC8qIE9wZW4gcXVvdGUgb25s eSBpZiBhdCBiZWdpbm5pbmcgb3IgcHJlY2VkZWQgYnkgc3BhY2UgKi8KLSAgICAgICAgICAgICAg ICBpZiAocyA+IHMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqKHMtMSkgPT0gU1ApCi0g ICAgICAgICAgICAgICAgICAgICAgZHEgPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo cyA9PSBzMikgewotICAgICAgICAgICAgICAgICAgICAgIGRxID0gMTsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5k aWYgLyogTk9EUU1BQ1JPICovCi0gICAgICAgIGlmICgqcyA9PSAnLCcgJiYgcHAgPD0gMCAmJiBr cCA8PSAwCi0jaWZuZGVmIE5PRFFNQUNSTwotICAgICAgICAgICAgJiYgZHEgPT0gMAotI2VuZGlm IC8qIE5PRFFNQUNSTyAqLwotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBtYWNwW21hY2x2 bF0rKzsgICAgICAgICAgICAgLyogQ29tbWEgbm90IGluIHt9IG9yICgpICovCi0gICAgICAgICAg ICAvKiBkZWJ1ZyhGMTEwLCJuZXh0IGNtZCIscywwKTsgKi8KLSAgICAgICAgICAgIGtwID0gcHAg PSAwOyAgICAgICAgICAgICAgICAvKiBzbyB3ZSBoYXZlIHRoZSBuZXh0IGNvbW1hbmQgKi8KLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUmVhY2hlZCBlbmQuICovCi0jaWZkZWYgQ09NTUVOVAotICAgIC8qIERP TidUIERPIFRISVMgLSBJVCBCUkVBS1MgRVZFUllUSElORyAqLwotICAgICpzID0gTlVMOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICBpZiAoKnMyID09IE5VTCkgeyAgICAgICAgICAgICAgICAg ICAvKiBJZiBub3RoaW5nIHdhcyBjb3BpZWQsICovCi0gICAgICAgIC8qIGRlYnVnKEYxMDAsIlhY WCBnZXRuY20gZW9tIiwiIiwwKTsgKi8KLSAgICAgICAgcG9wY2x2bCgpOyAgICAgICAgICAgICAg ICAgICAgICAvKiBwb3AgY29tbWFuZCBsZXZlbC4gKi8KLSAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndpc2UsIHRhY2sg Q1Igb250byBlbmQgKi8KLSAgICAgICAgKnMrKyA9IENSOwotICAgICAgICAqcyA9ICdcMCc7Ci0g ICAgICAgIC8qIGRlYnVnKEYxMTAsIlhYWCBnZXRuY20gT0siLHMsMCk7ICovCi0gICAgICAgIGlm IChtZWNobyAmJiBwZmxhZykgICAgICAgICAgICAgLyogSWYgTUFDUk8gRUNITyBPTiwgZWNobyB0 aGUgY21kICovCi0gICAgICAgICAgcHJpbnRmKCIlc1xuIixzMik7Ci0gICAgfQotICAgIHJldHVy bigwKTsKLX0KLQotLyogIEQgTyBNIEEgQyAgLS0gIERlZmluZSBhbmQgdGhlbiBleGVjdXRlIGEg bWFjcm8gKi8KLQotaW50Ci1kb21hYyhuYW1lLCBkZWYsIGZsYWdzKSBjaGFyICpuYW1lLCAqZGVm OyBpbnQgZmxhZ3M7IHsKLSAgICBpbnQgeCwgbTsKLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9T MgotICAgIGV4dGVybiBpbnQgdGVybV9pbzsKLSAgICBpbnQgdGVybV9pb19zYXYgPSB0ZXJtX2lv OwotICAgIHRlcm1faW8gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc2FibGUgVGVy bWluYWwgRW11bGF0b3IgSS9PICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NB TCAqLwotICAgIG0gPSBtYWNsdmw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQg bWFjcm8gc3RhY2sgbGV2ZWwgKi8KLSAgICB4ID0gYWRkbWFjKG5hbWUsIGRlZik7ICAgICAgICAg ICAgICAvKiBEZWZpbmUgYSBuZXcgbWFjcm8gKi8KLSAgICBpZiAoeCA+IC0xKSB7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBJZiBzdWNjZXNzZnVsLCAqLwotICAgICAgICBkb2RvKHgsTlVMTCxm bGFncyk7ICAgICAgICAgICAgIC8qIHN0YXJ0IGl0IChpbmNyZW1lbnRzIG1hY2x2bCkuICovCi0g ICAgICAgIHdoaWxlIChtYWNsdmwgPiBtKSB7ICAgICAgICAgICAgLyogS2VlcCBnb2luZyB0aWxs IGRvbmUgd2l0aCBpdCwgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvbWFjIGxvb3AgbWFj bHZsIDEiLCIiLG1hY2x2bCk7Ci0gICAgICAgICAgICBzc3RhdGUgPSAoQ0hBUikgcGFyc2VyKDEp OyAgLyogcGFyc2luZyAmIGV4ZWN1dGluZyBlYWNoIGNvbW1hbmQsICovCi0gICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJkb21hYyBsb29wIG1hY2x2bCAyIiwiIixtYWNsdmwpOwotICAgICAgICAgICAg aWYgKHNzdGF0ZSkgcHJvdG8oKTsgICAgICAgIC8qIGluY2x1ZGluZyBwcm90b2NvbCBjb21tYW5k cy4gKi8KLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTAxLCJkb21hYyBsb29wIGV4aXQgbWFj bHZsIiwiIixtYWNsdmwpOwotICAgIH0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAg IHRlcm1faW8gPSB0ZXJtX2lvX3NhdjsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xP Q0FMICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MpOwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLS8q Ci0gIEcgRSBUIE4gQyBUCi0KLSAgR2V0IG5leHQgY29tbWFuZCBmcm9tIFRBS0UgKGNvbW1hbmQp IGZpbGUuCi0KLSAgQ2FsbCB3aXRoOgotICAgcyAgICAgUG9pbnRlciB0byBidWZmZXIgdG8gcmVh ZCBpbnRvCi0gICBuICAgICBMZW5ndGggb2YgYnVmZmVyCi0gICBmICAgICBGaWxlIGRlc2NyaXB0 b3Igb2YgZmlsZSB0byByZWFkIGZyb20KLSAgIGZsYWcgIDAgPT0ga2VlcCBsaW5lIHRlcm1pbmF0 b3Igb24gYW5kIGFsbG93IGNvbnRpbnVhdGlvbgotICAgICAgICAgMSA9PSBkaXNjYXJkIGxpbmUg dGVybWluYXRvciBhbmQgZG9uJ3QgYWxsb3cgY29udGludWF0aW9uCi0KLSAgQ2FsbCB3aXRoIGZs YWcgPT0gMCB0byByZWFkIGEgY29tbWFuZCBmcm9tIGEgVEFLRSBmaWxlOwotICBDYWxsIHdpdGgg ZmxhZyAhPSAwIHRvIHJlYWQgYSBsaW5lIGZyb20gYSBkaWFsaW5nIG9yIG5ldHdvcmsgZGlyZWN0 b3J5LgotCi0gIEluIGJvdGggY2FzZXMsIHRyYWlsaW5nIGNvbW1lbnRzIGFuZC9vciB0cmFpbGlu ZyB3aGl0ZXNwYWNlIGlzL2FyZSBzdHJpcHBlZC4KLSAgSWYgZmxhZyA9PSAwLCBjb250aW51ZWQg bGluZXMgYXJlIGNvbWJpbmVkIGludG8gb25lIGxpbmUuICBBIGNvbnRpbnVlZCBsaW5lCi0gIGlz IG9uZSB0aGF0IGVuZHMgaW4gaHlwZW4sIG9yIGFueSBsaW5lIGluIGEgImJsb2NrIiwgd2hpY2gg c3RhcnRzIHdpdGggInsiCi0gIGF0IHRoZSBlbmQgb2YgYSBsaW5lIGFuZCBlbmRzIHdpdGggYSBt YXRjaGluZyAifSIgYXQgdGhlIGJlZ2lubmluZyBvZiBhCi0gIHN1YnNlcXVlbnQgbGluZTsgYmxv Y2tzIG1heSBiZSBuZXN0ZWQuCi0KLSAgUmV0dXJuczoKLSAgIDAgaWYgYSBzdHJpbmcgd2FzIGNv cGllZCwKLSAgLTEgb24gRU9GLAotICAtMiBvbiBtYWxsb2MgZmFpbHVyZQotICAtMyBpZiBsaW5l IGlzIG5vdCBwcm9wZXJseSB0ZXJtaW5hdGVkCi0gIC00IGlmIChwb3NzaWJseSBjb250aW51ZWQp IGxpbmUgaXMgdG9vIGxvbmcuCi0qLwotc3RhdGljIGludCBscHhsZW4gPSAwOwotCi1pbnQKLWdl dG5jdChzLG4sZixmbGFnKSBjaGFyICpzOyBpbnQgbjsgRklMRSAqZjsgaW50IGZsYWc7IHsKLSAg ICBpbnQgaSA9IDAsIGxlbiA9IDAsIGJ1ZmxlbiA9IDA7Ci0gICAgY2hhciBjID0gTlVMLCBjYyA9 IE5VTCwgY2NsID0gTlVMLCBjY3ggPSBOVUwsICpzMiA9IE5VTEw7Ci0gICAgY2hhciAqbHAgPSBO VUxMLCAqbHB4ID0gTlVMTCwgKmxwMiA9IE5VTEwsICpscDMgPSBOVUxMLCAqbGFzdGNvbW1hID0g TlVMTDsKLSAgICBjaGFyICogcHJldiA9IE5VTEw7Ci0gICAgaW50IGJjID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQmxvY2sgY291bnRlciAqLwotCi0gICAgczIgPSBzOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgb3JpZ2luYWwgcG9pbnRlciAqLwotICAg IHByZXYgPSBzMjsJCQkJLyogSGVyZSB0b28gKi8KLSAgICBidWZsZW4gPSBuOyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSZW1lbWJlciBvcmlnaW5hbCBidWZmZXIgbGVuZ3RoICovCi0KLSAg ICBpZiAobiA8IDApCi0gICAgICByZXR1cm4oLTIpOwotCi0gICAgLyogQWxsb2NhdGUgYSBsaW5l IGJ1ZmZlciBvbmx5IGlmIHdlIGRvbid0IGhhdmUgb25lIHRoYXQncyBiaWcgZW5vdWdoICovCi0K LSAgICBkZWJ1ZyhGMTExLCJnZXRuY3QiLGNraXRvYShscHhsZW4pLG4pOwotCi0gICAgaWYgKGxw eCAmJiAobiA+IGxweGxlbikpIHsgICAgICAgICAgLyogSGF2ZSBvbmUgYWxyZWFkeSAqLwotICAg ICAgICBkZWJ1ZyhGMTAxLCJnZXRuY3QgbmV3IGJ1ZmZlciIsIiIsbHB4bGVuKTsKLSAgICAgICAg ZnJlZShscHgpOyAgICAgICAgICAgICAgICAgICAgICAvKiBCdXQgaXQncyBub3QgYmlnIGVub3Vn aCAqLwotICAgICAgICBscHggPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgIC8qIEZyZWUgY3Vy cmVudCBvbmUgKi8KLSAgICAgICAgbHB4bGVuID0gMDsKLSAgICB9Ci0gICAgaWYgKCFscHgpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IG5ldyBvbmUgKi8KLSAgICAgICAgaWYgKCEo bHB4ID0gKGNoYXIgKikgbWFsbG9jKG4pKSkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwiZ2V0 bmN0IG1hbGxvYyBmYWlsdXJlIiwiIiwwKTsKLSAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBh bGxvY2F0aW9uIGZhaWx1cmUgW2dldG5jdDolZF1cbiIsbik7Ci0gICAgICAgICAgICByZXR1cm4o LTIpOwotICAgICAgICB9Ci0gICAgICAgIGxweGxlbiA9IG47Ci0gICAgfQotICAgIGxwMiA9IGxw eDsKLSNpZmRlZiBLTFVER0UKLSAgICAvKiBOT1RFOiBObyBsb25nZXIgdXNlZCBhcyBvZiAxNCBB dWcgMjAwMCAqLwotICAgIGxwMisrOwotI2VuZGlmIC8qIEtMVURHRSAqLwotCi0gICAgd2hpbGUg KDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9vcCB0byByZWFkIGxpbmVzIGZyb20g ZmlsZSAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRuY3Qgd2hpbGUgKDEpIiwiIixuKTsKLSAg ICAgICAgaWYgKGZnZXRzKGxwMixuLGYpID09IE5VTEwpIHsgICAvKiBSZWFkIGEgbGluZSBpbnRv IGxwMiAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwiZ2V0bmN0IEVPRiIsczIsMCk7IC8qIEVP RiAqLwotICAgICAgICAgICAgZnJlZShscHgpOyAgICAgICAgICAgICAgICAgIC8qIEZyZWUgdGVt cG9yYXJ5IHN0b3JhZ2UgKi8KLSAgICAgICAgICAgIGxweCA9IE5VTEw7Ci0gICAgICAgICAgICAq cyA9IE5VTDsgICAgICAgICAgICAgICAgICAgLyogTWFrZSBkZXN0aW5hdGlvbiBiZSBlbXB0eSAq LwotICAgICAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgIC8qIFJldHVybiBmYWls dXJlIGNvZGUgKi8KLSAgICAgICAgfQotCi0jaWZuZGVmIE5PRElBTAotICAgICAgICBpZiAoZmxh ZykgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IHRoaXMgbGluZSAqLwotICAgICAgICAg IGRpcmxpbmUrKzsKLSAgICAgICAgZWxzZQotI2VuZGlmIC8qIE5PRElBTCAqLwotICAgICAgICAg IHRmbGluZVt0bGV2ZWxdKys7Ci0gICAgICAgIGxlbiA9IHN0cmxlbihscDIpIC0gMTsgICAgICAg ICAgLyogUG9zaXRpb24gb2YgbGluZSB0ZXJtaW5hdG9yICovCi0gICAgICAgIGlmIChsZW4gPT0g MCAmJiBscDJbMF0gIT0gJ1xuJykgeyAvKiBMYXN0IGxpbmUgaW4gZmlsZSBoYXMgb25lIGNoYXIg Ki8KLSAgICAgICAgICAgIGxwMlsrK2xlbl0gPSAnXG4nOyAgICAgICAgICAvKiB0aGF0IGlzIG5v dCBhIG5ld2xpbmUgKi8KLSAgICAgICAgICAgIGxwMltsZW5dID0gTlVMOwotICAgICAgICB9Ci0g ICAgICAgIGRlYnVnKEYwMTAsImdldG5jdCIsbHAyLDApOwotICAgICAgICBpZiAobGVuIDwgMCkK LSAgICAgICAgICBsZW4gPSAwOwotICAgICAgICBpZiAodGVjaG8gJiYgcGZsYWcpICAgICAgICAg ICAgIC8qIElmIFRBS0UgRUNITyBPTiwgKi8KLSAgICAgICAgICBwcmludGYoIiUzZC4gJXMiLCAg ICAgICAgICAgICAvKiBlY2hvIGl0IHRoaXMgbGluZS4gKi8KLSNpZm5kZWYgTk9ESUFMCi0gICAg ICAgICAgICAgICAgIGZsYWcgPyBkaXJsaW5lIDoKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSAgICAg ICAgICAgICAgICAgdGZsaW5lW3RsZXZlbF0sCi0gICAgICAgICAgICAgICAgIGxwMgotICAgICAg ICAgICAgICAgICApOwotICAgICAgICBscDMgPSBscDI7ICAgICAgICAgICAgICAgICAgICAgIC8q IFdvcmtpbmcgcG9pbnRlciAqLwotICAgICAgICBpID0gbGVuOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEdldCBmaXJzdCBub253aGl0ZXNwYWNlIGNoYXJhY3RlciAqLwotICAgICAgICB3aGls ZSAoaSA+IDAgJiYgKCpscDMgPT0gU1AgfHwgKmxwMyA9PSBIVCkpIHsKLSAgICAgICAgICAgIGkt LTsKLSAgICAgICAgICAgIGxwMysrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpID09IDAgJiYg YmMgPiAwKSAgICAgICAgICAgLyogQmxhbmsgbGluZSBpbiB7Li4ufSBibG9jayAqLwotICAgICAg ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8qIElzb2xhdGUsIHJlbW92ZSwgYW5kIGNoZWNrIHRl cm1pbmF0b3IgKi8KLQotICAgICAgICBjID0gbHAyW2xlbl07ICAgICAgICAgICAgICAgICAgIC8q IFZhbHVlIG9mIGxpbmUgdGVybWluYXRvciAqLwotICAgICAgICAvKiBkZWJ1ZyhGMTAxLCJnZXRu Y3QgdGVybWluYXRvciIsIiIsYyk7ICovCi0gICAgICAgIGlmIChjIDwgTEYgfHwgYyA+IENSKSB7 ICAgICAgICAgLyogSXQncyBub3QgYSB0ZXJtaW5hdG9yICovCi0gICAgICAgICAgICAvKiBkZWJ1 ZyhGMTExLCJnZXRuY3QgYmFkIGxpbmUiLGxwMixjKTsgKi8KLSAgICAgICAgICAgIGlmIChmZW9m KGYpICYmIGxlbiA+IDAgJiYgbGVuIDwgbikgewotICAgICAgICAgICAgICAgIC8qIEtsdWRnZSBB bGVydC4uLiAqLwotICAgICAgICAgICAgICAgIGlmICghcXVpZXQpCi0gICAgICAgICAgICAgICAg ICBwcmludGYoIldBUk5JTkc6IExhc3QgbGluZSBvZiAlcyBsYWNrcyB0ZXJtaW5hdG9yXG4iLAot ICAgICAgICAgICAgICAgICAgICAgICAgIHMyID09IGNtZGJ1ZiA/ICJjb21tYW5kIGZpbGUiIDog ImRpcmVjdG9yeSBmaWxlIik7Ci0gICAgICAgICAgICAgICAgYyA9IGxwMlsrK2xlbl0gPSAnXG4n OyAgLyogTm8gYmlnIGRlYWwgLSBzdXBwbHkgb25lLiAqLwotICAgICAgICAgICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgIC8qIFNvbWV0aGluZydzIHdyb25nLCBmYWlsLiAqLwotICAgICAg ICAgICAgICAgIGZyZWUobHB4KTsKLSAgICAgICAgICAgICAgICBscHggPSBOVUxMOwotICAgICAg ICAgICAgICAgIHJldHVybigtMyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg LyogVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlICovCi0KLSAgICAgICAgZm9yIChpID0gbGVuIC0g MTsgaSA+IC0xICYmIGxwMltpXSA8PSBTUDsgaS0tKSAvKiBUcmltICovCi0gICAgICAgICAgOwot ICAgICAgICAvKiBkZWJ1ZyhGMTAxLCJnZXRuY3QgaSIsIiIsaSk7ICovCi0gICAgICAgIGxwMltp KzFdID0gTlVMOyAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlIHRoZSBzdHJpbmcgKi8KLSAg ICAgICAgLyogZGVidWcoRjExMCwiZ2V0bmN0IGxwMiIsbHAyLDApOyAqLwotICAgICAgICBscCA9 IGxwMjsgICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgYSB3b3JraW5nIHBvaW50ZXIgKi8K LQotICAgICAgICAvKiBSZW1vdmUgdHJhaWxpbmcgb3IgZnVsbC1saW5lIGNvbW1lbnQgKi8KLQot ICAgICAgICB3aGlsZSAoKGNjID0gKmxwKSkgewotICAgICAgICAgICAgaWYgKGNjID09ICc7JyB8 fCBjYyA9PSAnIycpIHsgLyogQ29tbWVudCBpbnRyb2R1Y2VyPyAqLwotICAgICAgICAgICAgICAg IGlmIChscCA9PSBscDIpIHsgICAgICAgIC8qIEZpcnN0IGNoYXIgb24gbGluZSAqLwotICAgICAg ICAgICAgICAgICAgICAqbHAgPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoKihscCAtIDEpID09IFNQIHx8ICoobHAgLSAxKSA9PSBI VCkgewotICAgICAgICAgICAgICAgICAgICBscC0tOwotICAgICAgICAgICAgICAgICAgICAqbHAg PSBOVUw7ICAvKiBPciBwcmVjZWRlZCBieSB3aGl0ZXNwYWNlICovCi0gICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGxwKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxwID4gbHAyKQotICAgICAgICAgIGxwLS07 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciB0aGUgTlVMICovCi0KLSAg ICAgICAgLyogTm93IHRyaW0gYW55IHNwYWNlIHRoYXQgcHJlY2VkZWQgdGhlIGNvbW1lbnQgKi8K LQotICAgICAgICB3aGlsZSAoKCpscCA9PSBTUCB8fCAqbHAgPT0gSFQpICYmIGxwID49IGxwMikg ewotICAgICAgICAgICAgKmxwID0gTlVMOwotICAgICAgICAgICAgaWYgKGxwIDw9IGxwMikKLSAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBscC0tOwotICAgICAgICB9Ci0gICAgICAg IC8qIGRlYnVnKEYxMTAsImdldG5jdCBjb21tZW50IHRyaW1tZWQiLGxwMiwwKTsgKi8KLQotICAg ICAgICBsZW4gPSBzdHJsZW4obHAyKTsgICAgICAgICAgICAgIC8qIExlbmd0aCBhZnRlciB0cmlt bWluZyAqLwotCi0gICAgICAgIGlmIChuIC0gbGVuIDwgMikgeyAgICAgICAgICAgICAgLyogQ2hl Y2sgcmVtYWluaW5nIHNwYWNlICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJnZXRuY3QgY29t bWFuZCB0b28gbG9uZyIsczIsYnVmbGVuKTsKLSAgICAgICAgICAgIHByaW50ZigiP0xpbmUgdG9v IGxvbmcsIG1heGltdW0gbGVuZ3RoOiAlZC5cbiIsYnVmbGVuKTsKLSAgICAgICAgICAgIGZyZWUo bHB4KTsKLSAgICAgICAgICAgIHJldHVybigtNCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2NsID0g KGxlbiA+IDApID8gbHAyW2xlbi0xXSA6IDA7ICAgICAvKiBMYXN0IGNoYXJhY3RlciBpbiBsaW5l ICovCi0gICAgICAgIGNjeCA9IChsZW4gPiAxKSA/IGxwMltsZW4tMl0gOiAwOyAgICAgLyogUGVu dWx0aW1hdGUgY2hhciBpbiBsaW5lICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIC8qIExp bmUgY29udGFpbmluZyBvbmx5IHdoaXRlc3BhY2UgYW5kICwtICovCi0gICAgICAgIGlmICgobGVu ID4gMSkgJiYgKGxwMyA9PSBscDIrbGVuLTIpICYmIChjY2wgPT0gJy0nKSAmJiAoY2N4ID09ICcs JykpCi0gICAgICAgICAgY29udGludWU7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYg S0xVREdFCi0vKgotICBJZiBpdCBpcyBhIGNvbW1hbmQgYW5kIGl0IGJlZ2lucyB3aXRoIGEgdG9r ZW4gKGxpa2UgISBvciAuKSB0aGF0IGlzIG5vdAotICBmb2xsb3dlZCBieSBhIHNwYWNlLCBpbnNl cnQgYSBzcGFjZSBub3c7IG90aGVyd2lzZSBjbWtleSgpIGNhbiBnZXQgbWlnaHR5Ci0gIGNvbmZ1 c2VkLgotKi8KLSAgICAgICAgaWYgKHMgPT0gczIgJiYgIWZsYWcpIHsKLSAgICAgICAgICAgIGNo YXIgKnAgPSB0b2t0YWI7Ci0gICAgICAgICAgICB3aGlsZSAoKnApIHsKLSAgICAgICAgICAgICAg ICBpZiAoKnAgPT0gKmxwMyAmJiAqKHArMSkgIT0gU1ApIHsKLSAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMCwiZ2V0bmN0IHRva2VuIixwLDApOwotICAgICAgICAgICAgICAgICAgICAqbHAz LS0gPSBTUDsKLSAgICAgICAgICAgICAgICAgICAgKmxwMyA9ICpwOwotICAgICAgICAgICAgICAg ICAgICBpZiAobHAzIDwgbHAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBscDItLTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGxlbisrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg ICAgICAgICAgcCsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogS0xVREdF ICovCi0gICAgICAgIGxwID0gbHAyOwotCi0gICAgICAgIHdoaWxlICgoKnMrKyA9ICpscCsrKSkg ICAgICAgICAgLyogQ29weSByZXN1bHQgdG8gdGFyZ2V0IGJ1ZmZlciAqLwotICAgICAgICAgIG4t LTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFjY291bnRpbmcgZm9yIGxlbmd0aCAqLwot ICAgICAgICBzLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciB0 aGUgTlVMICovCi0KLSAgICAgICAgLyogQ2hlY2sgd2hldGhlciB0aGlzIGxpbmUgaXMgY29udGlu dWVkICovCi0KLSAgICAgICAgaWYgKGZsYWcpICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBs aW5lIGNvbnRpbnVhdGlvbiB3aGVuIGZsYWc9MSAqLwotICAgICAgICAgIGJyZWFrOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFNvIGJyZWFrIG91dCBvZiByZWFkLWxpbmVzIGxvb3AgKi8KLQot I2lmZGVmIENPTU1FTlQKLSAgICAgICAgZGVidWcoRjAwMCwiZ2V0bmN0IGZpcnN0IGNoYXIiLCIi LCpscDMpOwotICAgICAgICBkZWJ1ZyhGMDAwLCJnZXRuY3QgbGFzdCBjaGFyIiwiIixjY2wpOwot ICAgICAgICBkZWJ1ZyhGMDAwLCJnZXRuY3QgbmV4dC10by1sYXN0IGNoYXIiLCIiLGNjeCk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgICAgIGlmIChiYyA+IDAgJiYgKmxwMyA9PSAnfScp IHsgICAgLyogRmlyc3QgY2hhciBvbiBsaW5lIGlzICd9JyAqLwotICAgICAgICAgICAgYmMtLTsJ CQkvKiBEZWNyZW1lbnQgYmxvY2sgY291bnRlciAqLwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg KGJjID09IDAgJiYgICAgICAgICAgICAgICAgICAvKiBMaW5lIGlzIGNvbnRpbnVlZCBpZiBiYyA+ IDAgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAvKiBOb3Qgc3VwcG9ydGVkIGFzIG9m IEMtS2VybWl0IDYuMCAqLwotICAgICAgICAgICAgY2NsICE9IENNRFEgJiYgICAgICAgICAgICAg IC8qIG9yIGxpbmUgZW5kcyB3aXRoIENNRFEgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg ICAgICAgICBjY2wgIT0gJy0nICAmJiAgICAgICAgICAgICAgLyogb3IgbGluZSBlbmRzIHdpdGgg ZGFzaCAqLwotICAgICAgICAgICAgY2NsICE9ICd7JykgICAgICAgICAgICAgICAgIC8qIG9yIGxp bmUgZW5kcyB3aXRoIG9wZW5pbmcgYnJhY2UgKi8KLSAgICAgICAgICBicmVhazsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBOb25lIG9mIHRob3NlLCB3ZSdyZSBkb25lLiAqLwotCi0gICAgICAg IGlmIChjY2wgPT0gJy0nIHx8IGNjbCA9PSAneycpICAgLyogQ29udGludWF0aW9uIGNoYXJhY3Rl ciAqLwotICAgICAgICAgIGlmIChjY3ggPT0gQ01EUSkgICAgICAgICAgICAgIC8qIEJ1dCBpdCdz IHF1b3RlZCAqLwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgIC8qIHNv IGlnbm9yZSBpdCAqLwotCi0gICAgICAgIGlmIChjY2wgPT0gJ3snKSB7ICAgICAgICAgICAgICAg LyogTGFzdCBjaGFyIG9uIGxpbmUgaXMgJ3snPyAqLwotICAgICAgICAgICAgYmMrKzsgICAgICAg ICAgICAgICAgICAgICAgIC8qIENvdW50IHRoZSBibG9jayBvcGVuZXIuICovCi0gICAgICAgIH0g ZWxzZSBpZiAoY2NsID09ICctJykgeyAgICAgICAgLyogRXhwbGljaXQgY29udGludWU/ICovCi0g ICAgICAgICAgICBjaGFyIGMsICogc3M7Ci0gICAgICAgICAgICBpbnQgc3RhdGUgPSAwLCBubjsK LSAgICAgICAgICAgIHMtLTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBZZXMsIGJhY2sgdXAg b3ZlciB0ZXJtaW5hdG9ycyAqLwotICAgICAgICAgICAgbisrOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGFuZCBvdmVyIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgIG5u ID0gbjsgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIGN1cnJlbnQgY291bnQgKi8KLSAgICAg ICAgICAgIHNzID0gczsgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgcG9pbnRlciAqLwotICAg ICAgICAgICAgcy0tOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBkYXNo ICovCi0gICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICB3aGlsZSAoc3RhdGUgPCAyICYmIHMg Pj0gcHJldikgeyAvKiBDaGVjayBmb3IgInssLSIgKi8KLSAgICAgICAgICAgICAgICBuKys7Ci0g ICAgICAgICAgICAgICAgYyA9ICpzLS07Ci0gICAgICAgICAgICAgICAgaWYgKGMgPD0gU1ApCi0g ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoYyAhPSAnLCcg JiYgYyAhPSAneycpCi0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBz d2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAg LyogTG9va2luZyBmb3IgY29tbWEgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJywn KQotICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMTsKLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgLyogTG9va2lu ZyBmb3IgbGVmdCBicmFjZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAneycpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMjsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHMgKz0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICpzID0gTlVMOwotICAgICAgICAg ICAgICAgICAgICAgICAgYmMrKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBpZiAoc3RhdGUgIT0gMikgeyBzID0gc3M7IG4gPSBubjsgfQotICAgICAgICAgICAgKnMg PSBOVUw7Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm9uZSBv ZiB0aG9zZSBidXQgKGJjID4gMCkgKi8KLSAgICAgICAgICAgIGxhc3Rjb21tYSA9IHM7Ci0gICAg ICAgICAgICAqcysrID0gJywnOyAgICAgICAgICAgICAgICAgLyogYW5kIGluc2VydCBhIGNvbW1h ICovCi0gICAgICAgICAgICBuLS07Ci0gICAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAg IGRlYnVnKEYxMDEsImdldG5jdCBiYyIsIiIsYmMpOwotICAgICAgICBkZWJ1ZyhGMTAwLCJnZXRu Y3QgY29udGludWVkIiwiIiwwKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgICAgKnMg PSBOVUw7Ci0gICAgICAgIHByZXYgPSBzOwotCi0gICAgfSAvKiByZWFkLWxpbmVzIHdoaWxlIGxv b3AgKi8KLQotICAgIGlmIChsYXN0Y29tbWEpCi0gICAgICAqbGFzdGNvbW1hID0gU1A7Ci0gICAg aWYgKCFmbGFnKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGFjayBsaW5lIHRlcm1pbmF0 b3IgYmFjayBvbiAqLwotICAgICAgKnMrKyA9IGM7Ci0gICAgKnMrKyA9IE5VTDsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVGVybWluYXRlIHRoZSBzdHJpbmcgKi8KLSAgICB1bnRhYihzMik7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb25lLCBjb252ZXJ0IHRhYnMgdG8gc3BhY2Vz ICovCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoIWZsYWcpIHsKLSAgICAgICAgZGVidWcoRjAxMCwi Q01EKEYpIixzMiwwKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBmcmVlKGxweCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGcmVlIHRlbXBvcmFyeSBzdG9yYWdlICovCi0g ICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHN1Y2Nlc3Mg Ki8KLX0KLQotVk9JRAotc2hvc3RhY2soKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IER1bXAgdGhlIGNvbW1hbmQgc3RhY2sgKi8KLSAgICBpbnQgaTsKLSAgICBjaGFyICpwOwotI2lm bmRlZiBOT1NQTAotICAgIGZvciAoaSA9IGNtZGx2bDsgaSA+IDA7IGktLSkgewotICAgICAgICBp ZiAoY21kc3RrW2ldLnNyYyA9PSBDTURfVEYpIHsKLSAgICAgICAgICAgIHAgPSB0Zm5hbVtjbWRz dGtbaV0ubHZsXTsKLSAgICAgICAgICAgIGlmICh6Zm5xZnAocCxUTVBCVUZTSVosdG1wYnVmKSkK LSAgICAgICAgICAgICAgcCA9IHRtcGJ1ZjsKLSAgICAgICAgICAgIHByaW50ZigiICUyZC4gRmls ZSAgOiAlcyAobGluZSAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgaSwKLSAgICAgICAgICAg ICAgICAgICBwLAotICAgICAgICAgICAgICAgICAgIHRmbGluZVtjbWRzdGtbaV0ubHZsXQotICAg ICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY21kc3RrW2ldLnNyYyA9PSBD TURfTUQpIHsKLSAgICAgICAgICAgIGNoYXIgKiBtOwotICAgICAgICAgICAgbSA9IG1fYXJnW2Nt ZHN0a1tpXS5sdmxdWzBdOyAvKiBOYW1lIG9mIHRoaXMgbWFjcm8gKi8KLSAgICAgICAgICAgIGlm IChpID4gMCkgeyAgICAgICAgICAgICAgICAgLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgMi1sZXZl bCAqLwotICAgICAgICAgICAgICAgIGNoYXIgKnM7ICAgICAgICAgICAgICAgICAvKiBidWlsdC1p biBtYWNyb3MuLi4gKi8KLSAgICAgICAgICAgICAgICBzID0gbV9hcmdbY21kc3RrW2ktMV0ubHZs XVswXTsgLyogTmFtZSBuZXh0IGxldmVsIHVwICovCi0gICAgICAgICAgICAgICAgaWYgKHMgJiYg Y21kc3RrW2ktMV0uc3JjID09IENNRF9NRCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0 cmNtcChzLCJfZm9yeCIpKQotICAgICAgICAgICAgICAgICAgICAgIG0gPSAiRk9SIjsKLSAgICAg ICAgICAgICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChzLCJfeGlmIikpCi0gICAgICAgICAgICAg ICAgICAgICAgbSA9ICJYSUYiOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghc3RyY21w KHMsIl93aGlsZSIpKQotICAgICAgICAgICAgICAgICAgICAgIG0gPSAiV0hJTEUiOwotICAgICAg ICAgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKHMsIl9zd2l0eCIpKQotICAgICAgICAgICAg ICAgICAgICAgIG0gPSAiU1dJVENIIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBwcmludGYoIiAlMmQuIE1hY3JvIDogJXNcbiIsaSxtKTsKLSAgICAgICAg fSBlbHNlIGlmIChjbWRzdGtbaV0uc3JjID09IENNRF9LQikgewotICAgICAgICAgICAgcHJpbnRm KCIgJTJkLiBQcm9tcHQ6XG4iLGkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJp bnRmKCIgJTJkLiBFUlJPUiA6IENvbW1hbmQgc291cmNlIHVua25vd25cbiIsaSk7Ci0gICAgICAg IH0KLSAgICB9Ci0jZWxzZQotICAgIGZvciAoaSA9IHRsZXZlbDsgaSA+IC0xOyBpLS0pIHsKLSAg ICAgICAgcCA9IHRmbmFtW2ldOwotICAgICAgICBpZiAoemZucWZwKHAsVE1QQlVGU0laLHRtcGJ1 ZikpCi0gICAgICAgICAgcCA9IHRtcGJ1ZjsKLSAgICAgICAgcHJpbnRmKCIgJTJkLiBGaWxlICA6 ICVzIChsaW5lICVkKVxuIiwKLSAgICAgICAgICAgICAgIGksCi0gICAgICAgICAgICAgICBwLAot ICAgICAgICAgICAgICAgdGZsaW5lW2ldCi0gICAgICAgICAgICAgICApOwotICAgIH0KLSNlbmRp ZiAvKiBOT1NQTCAqLwotICAgIGlmIChpID09IDApCi0gICAgICBwcmludGYoIiAlMmQuIFByb21w dDogKHRvcCBsZXZlbClcbiIsMCk7Ci19Ci0KLS8qIEZvciBjb21tYW5kIGVycm9yIG1lc3NhZ2Vz IC0gYXZvaWQgZHVtcGluZyBvdXQgdGhlIGNvbnRlbnRzIG9mIHNvbWUgKi8KLS8qIHNvbWUgaHVn ZSBGT1IgbG9vcCBpZiBpdCBjb250YWlucyBhIHN5bnRheCBlcnJvci4gKi8KLQotc3RhdGljIGNo YXIgKgotY21kZGlzcGxheShzLCBjeCkgY2hhciAqIHM7IGludCBjeDsgewotICAgIHN0YXRpYyBj aGFyIGJ1Zls4MF07Ci0gICAgaWYgKChpbnQpc3RybGVuKHMpID4gNzApIHsKLQlzcHJpbnRmKGJ1 ZiwiJS42NHMuLi4iLHMpOwkvKiBTQUZFICovCi0JcyA9IGJ1ZjsKLSAgICB9Ci0gICAgcmV0dXJu KHMpOwotfQotCi1zdGF0aWMgVk9JRAotY21kZXJyKCkgewotICAgIGlmICh4Y21kc3JjID4gMCkg ewotCXN3aXRjaCAoY21kX2VycikgewkJLyogU0VUIENPTU1BTkQgRVJST1ItRElTUExBWSAqLwot CSAgY2FzZSAwOgotCSAgICBicmVhazsKLQkgIGNhc2UgMToKLQkgIGNhc2UgMjoKLQkgICAgaWYg KHRsZXZlbCA+IC0xKSB7Ci0jaWZuZGVmIE5PU1BMCi0JCWlmICh4Y21kc3JjID09IDIpCi0JCSAg cHJpbnRmKAotIkluIG1hY3JvIG9yIGJsb2NrIGRlZmluZWQgaW4gZmlsZTogJXMgc3RhcnRpbmcg YWJvdXQgbGluZSAlZFxuIiwKLQkJCSB0Zm5hbVt0bGV2ZWxdID8gdGZuYW1bdGxldmVsXSA6ICIi LCB0ZmxpbmVbdGxldmVsXQotCQkJICk7Ci0JCWVsc2UKLSNlbmRpZiAvKiBOT1NQTCAqLwotCQkg IHByaW50ZigiRmlsZTogJXMsIExpbmU6ICVkXG4iLAotCQkJIHRmbmFtW3RsZXZlbF0gPyB0Zm5h bVt0bGV2ZWxdIDogIiIsIHRmbGluZVt0bGV2ZWxdCi0JCQkgKTsKLQkgICAgfQotI2lmbmRlZiBO T1NQTAotCSAgICBpZiAoY21kX2VyciA9PSAyKSB7Ci0JCWlmIChjbWRzdGtbY21kbHZsXS5zcmMg PT0gQ01EX01EKSB7IC8qIEV4ZWN1dGluZyBhIG1hY3JvPyAqLwotCQkgICAgaW50IG07Ci0JCSAg ICBtID0gY21kc3RrW2NtZGx2bF0ubHZsOwotCQkgICAgaWYgKG1sb29rKG1hY3RhYixtX2FyZ1tt XVswXSxubWFjKSA+PSAwKQotCQkgICAgICBwcmludGYoIk1hY3JvIG5hbWU6ICVzXG4iLCBtX2Fy Z1ttXVswXSk7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0JICAgIGJyZWFrOwot Ci0JICBjYXNlIDM6Ci0JICAgIHByaW50ZigiQ29tbWFuZCBzdGFjazpcbiIpOwotCSAgICBzaG9z dGFjaygpOwkJCSAgICAKLQl9Ci0gICAgfQotfQotCi0vKiAgUCBBIFIgUyBFIFIgIC0tICBUb3At bGV2ZWwgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXIuICAqLwotCi0vKgotICBDYWxsIHdpdGg6 Ci0gICAgbSA9IDAgZm9yIG5vcm1hbCBiZWhhdmlvcjoga2VlcCBwYXJzaW5nIGFuZCBleGVjdXRp bmcgY29tbWFuZHMKLSAgICAgICAgICB1bnRpbCBhbiBhY3Rpb24gY29tbWFuZCBpcyBwYXJzZWQs IHRoZW4gcmV0dXJuIHdpdGggYQotICAgICAgICAgIEtlcm1pdCBzdGFydC1zdGF0ZSBhcyB0aGUg dmFsdWUgb2YgdGhpcyBmdW5jdGlvbi4KLSAgICBtID0gMSB0byBwYXJzZSBvbmx5IG9uZSBjb21t YW5kLCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNhbGwgcGFyc2VyKCkKLSAgICAgICAgICByZWN1cnNp dmVseS4KLSAgICBtID0gMiB0byByZWFkIGJ1dCBkbyBub3QgZXhlY3V0ZSBvbmUgY29tbWFuZC4K LSAgSW4gYWxsIGNhc2VzLCBwYXJzZXIoKSByZXR1cm5zOgotICAgIDAgICAgIGlmIG5vIEtlcm1p dCBwcm90b2NvbCBhY3Rpb24gcmVxdWlyZWQKLSAgICA+IDAgICB3aXRoIGEgS2VybWl0IHByb3Rv Y29sIHN0YXJ0LXN0YXRlLgotICAgIDwgMCAgIHVwb24gZXJyb3IuCi0qLwotaW50Ci1wYXJzZXIo bSkgaW50IG07IHsKLSAgICBpbnQgdGZjb2RlLCB4eCwgeXksIHp6OyAgICAgICAgICAgICAvKiBX b3JrZXJzICovCi0gICAgaW50IGlzX3RuID0gMDsKLSAgICBpbnQgY2Rsb3N0ID0gMDsKLQotI2lm bmRlZiBOT1NQTAotICAgIGludCBpbmxldmVsOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIExl dmVsIHdlIHdlcmUgY2FsbGVkIGF0ICovCi0gICAgZXh0ZXJuIGludCBhc2tmbGFnLCBlY2hvc3Rh cnM7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICBjaGFyICpjYnA7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlciBwb2ludGVyICovCi0jaWZkZWYgTUFDCi0gICAgZXh0 ZXJuIGNoYXIgKmxmaWxlczsgICAgICAgICAgICAgICAgLyogRmFrZSBleHRlcm4gY2FzdCAqLwot I2VuZGlmIC8qIE1BQyAqLwotICAgIGV4dGVybiBpbnQgaW50ZXJydXB0ZWQ7Ci0jaWZuZGVmIE5P WEZFUgotICAgIGV4dGVybiBpbnQgc25kY21kLCBnZXRjbWQsIGZhdGFsaW8sIGNsZWFycnE7Ci0j ZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBBTUlHQQotICAgIHJlcXJlcygpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgQW1pZ2FET1MgcmVxdWVzdG9ycyAqLwotI2Vu ZGlmIC8qIEFNSUdBICovCi0KLSNpZmRlZiBPUzIKLSAgICBpZiAoY3Vyc29yX3NhdmUgPiAtMSkg eyAgICAgICAgICAgICAvKiBSZXN0b3JlIGN1cnNvciBpZiBpdCB3YXMgKi8KLSAgICAgICAgY3Vy c29yZW5hW1ZDTURdID0gY3Vyc29yX3NhdmU7ICAvKiB0dXJuZWQgb2ZmIGR1cmluZyBmaWxlIHRy YW5zZmVyICovCi0gICAgICAgIGN1cnNvcl9zYXZlID0gLTE7Ci0gICAgfQotI2VuZGlmIC8qIE9T MiAqLwotCi0jaWZkZWYgSUtTREIKLSAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJD T01NQU5EIFBST01QVCIsIiIsIiIpOyAvKiBJS1NEIGRhdGFiYXNlICovCi0jZW5kaWYgLyogSUtT REIgKi8KLQotICAgIGlzX3RuID0gKGxvY2FsICYmIG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHx8 Ci0gICAgICAoIWxvY2FsICYmIHNzdGVsbmV0KTsKLQotICAgIGlmICgheGNtZHNyYykgICAgICAg ICAgICAgICAgICAgICAgIC8qIElmIGF0IHRvcCAoaW50ZXJhY3RpdmUpIGxldmVsIC4uLiAqLwot ICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAgIC8qIHB1dCBjb25zb2xlIGlu ICdjYnJlYWsnIG1vZGUuICovCi0KLSNpZmRlZiBDS19UTVBESVIKLS8qIElmIHdlIHdlcmUgY2Qn ZCB0ZW1wb3JhcmlseSB0byBhbm90aGVyIGRldmljZSBvciBkaXJlY3RvcnkgLi4uICovCi0gICAg aWYgKGZfdG1wZGlyKSB7Ci0gICAgICAgIGludCB4OwotICAgICAgICB4ID0gemNoZGlyKChjaGFy ICopIHNhdmRpcik7ICAgIC8qIC4uLiByZXN0b3JlIHByZXZpb3VzIGRpcmVjdG9yeSAqLwotICAg ICAgICBmX3RtcGRpciA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGFuZCByZW1lbWJlciB3ZSBk aWQgaXQuICovCi0gICAgICAgIGRlYnVnKEYxMTEsInBhcnNlciB0bXBkaXIgcmVzdG9yaW5nIixz YXZkaXIseCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1RNUERJUiAqLwotCi0jaWZuZGVmIE5PU1BM Ci0gICAgaW5sZXZlbCA9IGNtZGx2bDsgICAgICAgICAgIC8qIEN1cnJlbnQgbWFjcm8gbGV2ZWwg Ki8KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgZGVidWcoRjEwMSwi JnBhcnNlciBlbnRyeSBtYWNsdmwiLCIiLG1hY2x2bCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIiZw YXJzZXIgZW50cnkgaW5sZXZlbCIsIiIsaW5sZXZlbCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIiZw YXJzZXIgZW50cnkgdGxldmVsIiwiIix0bGV2ZWwpOwotICAgICAgICBkZWJ1ZyhGMTAxLCImcGFy c2VyIGVudHJ5IGNtZGx2bCIsIiIsY21kbHZsKTsKLSAgICAgICAgZGVidWcoRjEwMSwiJnBhcnNl ciBlbnRyeSBtIiwiIixtKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNlbmRpZiAvKiBO T1NQTCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIGZ0cmVzZXQoKTsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFJlc2V0IGdsb2JhbCBmaWxlIHNldHRpbmdzICovCi0jZW5kaWYgLyogTk9Y RkVSICovCi0vKgotICBzc3RhdGUgYmVjb21lcyBub256ZXJvIHdoZW4gYSBjb21tYW5kIGhhcyBi ZWVuIHBhcnNlZCB0aGF0IHJlcXVpcmVzIHNvbWUKLSAgYWN0aW9uIGZyb20gdGhlIHByb3RvY29s IG1vZHVsZS4gIEFueSBub24tcHJvdG9jb2wgYWN0aW9ucywgc3VjaCBhcyBsb2NhbAotICBkaXJl Y3RvcnkgbGlzdGluZyBvciB0ZXJtaW5hbCBlbXVsYXRpb24sIGFyZSBpbnZva2VkIGRpcmVjdGx5 IGZyb20gYmVsb3cuCi0qLwotICAgIHNzdGF0ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFN0YXJ0IHdpdGggbm8gc3RhcnQgc3RhdGUuICovCi0KLSNpZm5kZWYgTk9YRkVSCi0jaWZu ZGVmIE5PU1BMCi0gICAgcXVlcnkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUVVF Ulkgbm90IGFjdGl2ZSAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIE5PSElOVFMKLSAg ICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgaWYgKGxvY2FsICYmICFuZXR3b3JrICYmIGNhcnJp ZXIgIT0gQ0FSX09GRikgewotICAgICAgICAgICAgaW50IHg7ICAgICAgICAgICAgICAgICAgICAg IC8qIFNlcmlhbCBjb25uZWN0aW9uICovCi0gICAgICAgICAgICB4ID0gdHRnbWRtKCk7ICAgICAg ICAgICAgICAgLyogd2l0aCBjYXJyaWVyIGNoZWNraW5nICovCi0gICAgICAgICAgICBpZiAoeCA+ IC0xKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCEoeCAmIEJNX0RDRCkpIHsKLSAgICAgICAgICAg ICAgICAgICAgY2Rsb3N0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgZmF0YWxpbyA9IDE7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotI2lmZGVm IERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgdG9w IHdoYXQiLCIiLHdoYXQpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgdG9wIGludGVycnVw dGVkIiwiIixpbnRlcnJ1cHRlZCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciB0b3AgY2Rs b3N0IiwiIixjZGxvc3QpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgdG9wIHNuZGNtZCIs IiIsc25kY21kKTsKLSAgICAgICAgZGVidWcoRjEwMSwicGFyc2VyIHRvcCBnZXRjbWQiLCIiLGdl dGNtZCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgaWYgKGNkbG9zdCAmJiAhaW50 ZXJydXB0ZWQgJiYgKHNuZGNtZCB8fCBnZXRjbWQpKSB7Ci0gICAgICAgIHByaW50ZigiP0Nvbm5l Y3Rpb24gYnJva2VuIChjYXJyaWVyIHNpZ25hbCBsb3N0KVxuIik7Ci0gICAgfQotICAgIGlmIChz bmRjbWQgJiYgcHJvdG9jb2wgPT0gUFJPVE9fSyAmJgotCSFzdWNjZXNzICYmIGhpbnRzICYmICFp bnRlcnJ1cHRlZCAmJiAhZmF0YWxpbyAmJiAheGNtZHNyYykgewotICAgICAgICBpbnQgeCA9IDAs IG4gPSAwOwotICAgICAgICBwcmludGYoIlxuKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7 Ci0gICAgICAgIHByaW50ZigiU0VORC1jbGFzcyBjb21tYW5kIGZhaWxlZC5cbiIpOwotICAgICAg ICBwcmludGYoIiBQYWNrZXRzIHNlbnQ6ICVkXG4iLCBzcGFja2V0cyk7Ci0gICAgICAgIHByaW50 ZigiIFJldHJhbnNtaXNzaW9uczogJWRcbiIscmV0cmFucyk7Ci0gICAgICAgIHByaW50ZigiIFRp bWVvdXRzOiAlZFxuIiwgdGltZW91dHMpOwotICAgICAgICBwcmludGYoIiBEYW1hZ2VkIHBhY2tl dHM6ICVkXG4iLCBjcnVuY2hlZCk7Ci0gICAgICAgIGlmIChlcGt0cmN2ZCkgewotICAgICAgICAg ICAgcHJpbnRmKCIgVHJhbnNmZXIgY2FuY2VsZWQgYnkgcmVjZWl2ZXIuXG4iKTsKLSAgICAgICAg ICAgIHByaW50ZigiIFJlY2VpdmVyJ3MgbWVzc2FnZTogXCIlc1wiXG4iLChjaGFyICopZXBrdG1z Zyk7Ci0gICAgICAgICAgICBuKys7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAo ZXBrdG1zZykgaWYgKCplcGt0bXNnKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgRmF0YWwg S2VybWl0IFByb3RvY29sIEVycm9yOiAlc1xuIixlcGt0bXNnKTsKLSAgICAgICAgICAgICAgICBu Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxvY2FsICYmICFuZXR3 b3JrICYmIGNhcnJpZXIgIT0gQ0FSX09GRikgewotICAgICAgICAgICAgaW50IHh4OyAgICAgICAg ICAgICAgICAgICAgIC8qIFNlcmlhbCBjb25uZWN0aW9uICovCi0gICAgICAgICAgICB4eCA9IHR0 Z21kbSgpOyAgICAgICAgICAgICAgLyogd2l0aCBjYXJyaWVyIGNoZWNraW5nICovCi0gICAgICAg ICAgICBpZiAoeHggPiAtMSkgewotICAgICAgICAgICAgICAgIGlmICghKHh4ICYgQk1fRENEKSkK LSAgICAgICAgICAgICAgICAgIGNkbG9zdCA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LQotI2lmZGVmIFVOSVgKLSAgICAgICAgaWYgKGVycm5vICE9IDApCi0jZW5kaWYgLyogVU5JWCAq LwotICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCIgTW9zdCByZWNlbnQgbG9jYWwg T1MgZXJyb3I6IFwiJXNcIlxuIixja19lcnJzdHIoKSk7Ci0gICAgICAgICAgICAgIG4rKzsKLSAg ICAgICAgICB9Ci0gICAgICAgIHByaW50ZigKLSAgICJcbkhJTlRTLi4uIElmIHRoZSBwcmVjZWRp bmcgZXJyb3IgbWVzc2FnZSVzIG5vdCBleHBsYWluIHRoZSBmYWlsdXJlOlxuIiwKLSAgICAgICAg ICAgICAgIChuID4gMSkgPyAicyBkbyIgOiAiIGRvZXMiCi0gICAgICAgICAgICAgICApOwotI2lm bmRlZiBOT0xPQ0FMCi0gICAgICAgIGlmIChsb2NhbCkgewotICAgICAgICAgICAgaWYgKHJwYWNr ZXRzID09IDApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIiAuIERpZCB5b3Ugc3RhcnQgYSBL ZXJtaXQgcmVjZWl2ZXIgb24gdGhlIGZhciBlbmQ/XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgcHJpbnRmKAotICAgICAgICAgICAgICAgICIgLiBUcnkgY2hhbmdp bmcgdGhlIHJlbW90ZSBLZXJtaXQncyBGTE9XLUNPTlRST0wgc2V0dGluZy5cbiIpOwotICAgICAg ICAgICAgICAgIGlmICghbmV0d29yayAmJiBtZG10eXAgPiAwKQotICAgICAgICAgICAgICAgICAg aWYgKCgzICogY3J1bmNoZWQpID4gc3BhY2tldHMpCi0gICAgICAgICAgICAgICAgICAgIHByaW50 ZigKLSAgICAgICAgICAgICAgICAiIC4gVHJ5IHBsYWNpbmcgYSBuZXcgY2FsbCB0byBnZXQgYSBj bGVhbmVyIGNvbm5lY3Rpb24uXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm IChycGFja2V0cyA+IDApIHsKLSAgICAgICAgICAgIGlmIChmbG93ID09IEZMT19OT05FKQotICAg ICAgICAgICAgIHByaW50ZigiIC4gR2l2ZSBtZSBhIFNFVCBGTE9XIFhPTi9YT0ZGIGNvbW1hbmQg YW5kIHRyeSBhZ2Fpbi5cbiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgIHByaW50 ZigiIC4gR2l2ZSBtZSBhIFNFVCBGTE9XIE5PTkUgY29tbWFuZCBhbmQgdHJ5IGFnYWluLlxuIik7 Ci0gICAgICAgIH0KLSAgICAgICAgeCsrOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotICAgICAg ICBpZiAoKDMgKiB0aW1lb3V0cykgPiBzcGFja2V0cykKLSAgICAgICAgICBwcmludGYoIiAuIEFk anVzdCB0aGUgdGltZW91dCBtZXRob2QgKHNlZSBIRUxQIFNFVCBTRU5EKS5cbiIpOwotICAgICAg ICBpZiAoKDMgKiByZXRyYW5zKSA+IHNwYWNrZXRzKQotICAgICAgICAgIHByaW50ZigiIC4gSW5j cmVhc2UgdGhlIHJldHJ5IGxpbWl0IChzZWUgSEVMUCBTRVQgUkVUUlkpLlxuIik7Ci0KLSNpZmRl ZiBDS19TUEVFRAotICAgICAgICBpZiAocHJlZml4aW5nICE9IFBYX0FMTCAmJiBycGFja2V0cyA+ IDIpIHsKLSAgICAgICAgICAgIHByaW50ZigiIC4gVHJ5IGl0IGFnYWluIHdpdGg6IFNFVCBQUkVG SVhJTkcgQUxMXG4iKTsKLSAgICAgICAgICAgIHgrKzsKLSAgICAgICAgfQotI2VuZGlmIC8qIENL X1NQRUVEICovCi0jaWZkZWYgU1RSRUFNSU5HCi0gICAgICAgIGlmIChzdHJlYW1lZCkgewotICAg ICAgICAgICAgcHJpbnRmKCIgLiBUcnkgaXQgYWdhaW4gd2l0aDogU0VUIFNUUkVBTUlORyBPRkZc biIpOwotICAgICAgICAgICAgeCsrOwotICAgICAgICB9IGVsc2UgaWYgKHJlbGlhYmxlKSB7Ci0g ICAgICAgICAgICBwcmludGYoIiAuIFRyeSBpdCBhZ2FpbiB3aXRoOiBTRVQgUkVMSUFCTEUgT0ZG XG4iKTsKLSAgICAgICAgICAgIHgrKzsKLSAgICAgICAgfQotI2VuZGlmIC8qIFNUUkVBTUlORyAq LwotCi0jaWZkZWYgQ0tfU1BFRUQKLSAgICAgICAgaWYgKGNsZWFycnEgPiAwICYmIHByZWZpeGlu ZyA9PSBQWF9OT04pIHsKLSAgICAgICAgICAgIHByaW50ZigiIC4gVHJ5IGl0IGFnYWluIHdpdGg6 IFNFVCBDTEVBUi1DSEFOTkVMIE9GRlxuIik7Ci0gICAgICAgICAgICB4Kys7Ci0gICAgICAgIH0K LSNlbmRpZiAvKiBDS19TUEVFRCAqLwotICAgICAgICBpZiAoIXBhcml0eSkgewotICAgICAgICAg ICAgcHJpbnRmKCIgLiBUcnkgaXQgYWdhaW4gd2l0aDogU0VUIFBBUklUWSBTUEFDRVxuIik7Ci0g ICAgICAgICAgICB4Kys7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCIgLiAlc2l2ZSBhIFJP QlVTVCBjb21tYW5kIGFuZCB0cnkgYWdhaW4uXG4iLAotICAgICAgICAgICAgICAgKHggPiAwKSA/ ICJBcyBhIGxhc3QgcmVzb3J0LCBnIiA6ICJHIgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAg cHJpbnRmKCJBbHNvOlxuIik7Ci0gICAgICAgIHByaW50ZigiIC4gQmUgc3VyZSB0aGUgc291cmNl IGZpbGUgaGFzIHJlYWQgcGVybWlzc2lvbi5cbiIpOwotICAgICAgICBwcmludGYoIiAuIEJlIHN1 cmUgdGhlIHRhcmdldCBkaXJlY3RvcnkgaGFzIHdyaXRlIHBlcm1pc3Npb24uXG4iKTsKLS8qCi0g ICAgICAgIGlmIHRoZSBmaWxlIHdhcyAyRyBvciBsYXJnZXIgbWFrZSBzdXJlIG90aGVyIEtlcm1p dCBzdXBwb3J0cyBMRnMuLi4KLSovCi0gICAgICAgIHByaW50ZigiIC4gQmUgc3VyZSB0aGUgdGFy Z2V0IGRpc2sgaGFzIHN1ZmZpY2llbnQgc3BhY2UuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIoVXNl IFNFVCBISU5UUyBPRkYgdG8gc3VwcHJlc3MgaGludHMuKVxuIik7Ci0gICAgICAgIHByaW50Zigi KioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4iKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwi dG9wY21kIiwiIix0b3BjbWQpOwotICAgIGlmIChnZXRjbWQgJiYgcHJvdG9jb2wgPT0gUFJPVE9f SyAmJgotCSFzdWNjZXNzICYmIGhpbnRzICYmICFpbnRlcnJ1cHRlZCAmJiAhZmF0YWxpbyAmJiAh eGNtZHNyYykgewotICAgICAgICBpbnQgeCA9IDA7Ci0gICAgICAgIGV4dGVybiBpbnQgdXJwc2l6 LCB3c2xvdHI7Ci0gICAgICAgIHByaW50ZigiXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG4i KTsKLSAgICAgICAgcHJpbnRmKCJSRUNFSVZFLSBvciBHRVQtY2xhc3MgY29tbWFuZCBmYWlsZWQu XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgUGFja2V0cyByZWNlaXZlZDogJWRcbiIsIHJwYWNrZXRz KTsKLSAgICAgICAgcHJpbnRmKCIgRGFtYWdlZCBwYWNrZXRzOiAlZFxuIiwgY3J1bmNoZWQpOwot ICAgICAgICBwcmludGYoIiBUaW1lb3V0czogJWRcbiIsIHRpbWVvdXRzKTsKLSAgICAgICAgaWYg KHJwYWNrZXRzID4gMCkKLSAgICAgICAgICBwcmludGYoIiBQYWNrZXQgbGVuZ3RoOiAlZFxuIiwg dXJwc2l6KTsKLSAgICAgICAgaWYgKGVwa3RyY3ZkKSB7Ci0gICAgICAgICAgICBwcmludGYoIiBU cmFuc2ZlciBjYW5jZWxlZCBieSBzZW5kZXIuXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiIFNl bmRlcidzIG1lc3NhZ2U6IFwiJXNcIlxuIiwoY2hhciAqKWVwa3Rtc2cpOwotICAgICAgICB9Ci0j aWZkZWYgVU5JWAotICAgICAgICBpZiAoZXJybm8gIT0gMCkKLSNlbmRpZiAvKiBVTklYICovCi0g ICAgICAgICAgcHJpbnRmKCIgTW9zdCByZWNlbnQgbG9jYWwgZXJyb3I6IFwiJXNcIlxuIixja19l cnJzdHIoKSk7Ci0gICAgICAgIHByaW50ZigKLSAgICJcbkhJTlRTLi4uIElmIHRoZSBwcmVjZWRp bmcgZXJyb3IgbWVzc2FnZSVzIG5vdCBleHBsYWluIHRoZSBmYWlsdXJlOlxuIiwKLSAgICAgICAg ICAgICAgIGVwa3RyY3ZkID8gInMgZG8iIDogIiBkb2VzIgotICAgICAgICAgICAgICAgKTsKLSNp Zm5kZWYgTk9MT0NBTAotICAgICAgICBpZiAobG9jYWwpIHsKLSAgICAgICAgICAgIGlmICh0b3Bj bWQgPT0gWFhHRVQpCi0gICAgICAgICAgICAgIHByaW50ZigiIC4gRGlkIHlvdSBzdGFydCBhIEtl cm1pdCBTRVJWRVIgb24gdGhlIGZhciBlbmQ/XG4iKTsKLSAgICAgICAgICAgIGlmIChycGFja2V0 cyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRvcGNtZCAhPSBYWEdFVCkKLSAgICAgICAg ICAgICAgICAgIHByaW50ZigiIC4gRGlkIHlvdSBzdGFydCBhIEtlcm1pdCBTRU5EZXIgb24gdGhl IGZhciBlbmQ/XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJp bnRmKAotICAgICAgICAgICAgICAgICIgLiBDaG9vc2UgYSBkaWZmZXJlbnQgRkxPVy1DT05UUk9M IHNldHRpbmcgYW5kIHRyeSBhZ2Fpbi5cbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs c2UgaWYgKHRvcGNtZCA9PSBYWEdFVCkKLSAgICAgICAgICBwcmludGYoIiAuIElzIHRoZSBvdGhl ciBLZXJtaXQgaW4gKG9yIGRvZXMgaXQgaGF2ZSkgU0VSVkVSIG1vZGU/XG4iKTsKLSAgICAgICAg aWYgKHJwYWNrZXRzID4gMCAmJiB1cnBzaXogPiA5MCkKLSAgICAgICAgICBwcmludGYoIiAuIFRy eSBzbWFsbGVyIHBhY2tldHMgKFNFVCBSRUNFSVZFIFBBQ0tFVC1MRU5HVEgpLlxuIik7Ci0gICAg ICAgIGlmIChycGFja2V0cyA+IDAgJiYgd3Nsb3RyID4gMSAmJiAhc3RyZWFtZWQpCi0gICAgICAg ICAgcHJpbnRmKCIgLiBUcnkgYSBzbWFsbGVyIHdpbmRvdyBzaXplIChTRVQgV0lORE9XKS5cbiIp OwotICAgICAgICBpZiAoIWxvY2FsICYmIHJwYWNrZXRzID4gMCkgewotICAgICAgICAgICAgaWYg KGZsb3cgPT0gRkxPX05PTkUpCi0gICAgICAgICAgICAgcHJpbnRmKCIgLiBHaXZlIG1lIGEgU0VU IEZMT1cgWE9OL1hPRkYgY29tbWFuZCBhbmQgdHJ5IGFnYWluLlxuIik7Ci0gICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgcHJpbnRmKCIgLiBHaXZlIG1lIGEgU0VUIEZMT1cgTk9ORSBjb21t YW5kIGFuZCB0cnkgYWdhaW4uXG4iKTsKLSAgICAgICAgfQotICAgICAgICB4Kys7Ci0jZW5kaWYg LyogTk9MT0NBTCAqLwotI2lmZGVmIFNUUkVBTUlORwotICAgICAgICBpZiAoc3RyZWFtZWQpIHsK LSAgICAgICAgICAgIHByaW50ZigiIC4gVHJ5IGl0IGFnYWluIHdpdGg6IFNFVCBTVFJFQU1JTkcg T0ZGXG4iKTsKLSAgICAgICAgICAgIHgrKzsKLSAgICAgICAgfSBlbHNlIGlmIChyZWxpYWJsZSAm JiBsb2NhbCkgewotICAgICAgICAgICAgcHJpbnRmKCIgLiBUcnkgaXQgYWdhaW4gd2l0aDogU0VU IFJFTElBQkxFIE9GRlxuIik7Ci0gICAgICAgICAgICB4Kys7Ci0gICAgICAgIH0gZWxzZQotI2Vu ZGlmIC8qIFNUUkVBTUlORyAqLwotICAgICAgICBpZiAoIXBhcml0eSkgewotICAgICAgICAgICAg cHJpbnRmKCIgLiBUcnkgaXQgYWdhaW4gd2l0aDogU0VUIFBBUklUWSBTUEFDRVxuIik7Ci0gICAg ICAgICAgICB4Kys7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCh4ID4gMCkgPwotICAgICAg ICAgICAgICAgIiAuIEFzIGEgbGFzdCByZXNvcnQsIGdpdmUgYSBST0JVU1QgY29tbWFuZCBhbmQg dHJ5IGFnYWluLlxuIiA6Ci0gICAgICAgICAgICAgICAiIC4gR2l2ZSBhIFJPQlVTVCBjb21tYW5k IGFuZCB0cnkgYWdhaW4uXG4iCi0gICAgICAgICAgICAgICApOwotICAgICAgICBwcmludGYoIkFs c286XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgLiBCZSBzdXJlIHRoZSB0YXJnZXQgZGlyZWN0b3J5 IGhhcyB3cml0ZSBwZXJtaXNzaW9uLlxuIik7Ci0gICAgICAgIHByaW50ZigiIC4gQmUgc3VyZSB0 aGUgdGFyZ2V0IGRpc2sgaGFzIHN1ZmZpY2llbnQgc3BhY2UuXG4iKTsKLSAgICAgICAgcHJpbnRm KCIgLiBUcnkgdGVsbGluZyB0aGUgJXMgdG8gU0VUIFBSRUZJWElORyBBTEwuXG4iLAotICAgICAg ICAgICAgICAgdG9wY21kID09IFhYR0VUID8gInNlcnZlciIgOiAic2VuZGVyIgotICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgcHJpbnRmKCIgLiBUcnkgZ2l2aW5nIGEgUk9CVVNUIGNvbW1hbmQg dG8gdGhlICVzLlxuIiwKLSAgICAgICAgICAgICAgIHRvcGNtZCA9PSBYWEdFVCA/ICJzZXJ2ZXIi IDogInNlbmRlciIKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHByaW50ZigiKFVzZSBTRVQg SElOVFMgT0ZGIHRvIHN1cHByZXNzIGhpbnRzLilcbiIpOwotICAgICAgICBwcmludGYoIioqKioq KioqKioqKioqKioqKioqKioqKipcblxuIik7Ci0gICAgfQotI2VuZGlmIC8qIE5PSElOVFMgKi8K LSAgICBnZXRjbWQgPSAwOwotICAgIHNuZGNtZCA9IDA7Ci0gICAgaW50ZXJydXB0ZWQgPSAwOwot I2VuZGlmIC8qIE5PWEZFUiAqLwotCi0gICAgd2hpbGUgKHNzdGF0ZSA9PSAwKSB7ICAgICAgICAg ICAgICAgLyogUGFyc2UgY21kcyB1bnRpbCBhY3Rpb24gcmVxdWVzdGVkICovCi0gICAgICAgIGRl YnVnKEYxMDAsInBhcnNlIHRvcCIsIiIsMCk7Ci0Jd2hhdCA9IFdfQ09NTUFORDsJCS8qIE5vdyB3 ZSdyZSBwYXJzaW5nIGNvbW1hbmRzLiAqLwotCXJjZGFjdGl2ZSA9IDA7CQkJLyogUkVNT1RFIENE IG5vdCBhY3RpdmUgKi8KLQlrZWVwYWxsY2hhcnMgPSAwOwkJLyogTUlOUFVUIG5vdCBhY3RpdmUg Ki8KLQotI2lmZGVmIE9TMgotICAgICAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19JTkFDVElWRSkK LSAgICAgICAgICBXYWl0Q29tbWFuZE1vZGVTZW0oLTEpOwotI2VuZGlmIC8qIE9TMiAqLwotI2lm ZGVmIElLU19PUFRJT04KLSAgICAgICAgaWYgKChsb2NhbCAmJgotICAgICAgICAgICAgICF4Y21k c3JjICYmCi0gICAgICAgICAgICAgaXNfdG4gJiYKLSAgICAgICAgICAgICBURUxPUFRfTUUoVEVM T1BUX0tFUk1JVCkgJiYKLSAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2Vy bWl0Lm1lX3N0YXJ0KSB8fAotICAgICAgICAgICAgKCFsb2NhbCAmJgotICAgICAgICAgICAgICFj bWRhZGwgJiYKLSAgICAgICAgICAgICBURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYKLSAgICAg ICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KQotICAgICAg ICAgICAgKSB7Ci0gICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9TVE9QKTsKLSAgICAgICAgfQot I2VuZGlmIC8qIElLU19PUFRJT04gKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICAgICAgaWYgKGF1 dG9wYXRoKSB7Ci0gICAgICAgICAgICBmbnJwYXRoID0gUEFUSF9BVVRPOwotICAgICAgICAgICAg YXV0b3BhdGggPSAwOwotICAgICAgICB9Ci0gICAgICAgIHJlbWZpbGUgPSAwOyAgICAgICAgICAg ICAgICAgICAgLyogQ2xlYXIgdGhlc2UgaW4gY2FzZSBSRU1PVEUgKi8KLSAgICAgICAgcmVtYXBw ZCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHdhcyBpbnRlcnJ1cHRlZC4uLiAq LwotICAgICAgICByZW1waXBlID0gMDsKLSAgICAgICAgbWFrZXN0cigmc25kX21vdmUsZ19zbmRf bW92ZSk7ICAvKiBSZXN0b3JlIHRoZXNlICovCi0gICAgICAgIG1ha2VzdHIoJnJjdl9tb3ZlLGdf cmN2X21vdmUpOwotICAgICAgICBtYWtlc3RyKCZzbmRfcmVuYW1lLGdfc25kX3JlbmFtZSk7Ci0g ICAgICAgIG1ha2VzdHIoJnJjdl9yZW5hbWUsZ19yY3ZfcmVuYW1lKTsKLSNlbmRpZiAvKiBOT1hG RVIgKi8KLQotICAgIC8qIFRha2UgcmVxdWVzdGVkIGFjdGlvbiBpZiB0aGVyZSB3YXMgYW4gZXJy b3IgaW4gdGhlIHByZXZpb3VzIGNvbW1hbmQgKi8KLQotICAgICAgICBzZXRpbnQoKTsKLSAgICAg ICAgZGVidWcoRjEwMSwicGFyc2VyIHRsZXZlbCIsIiIsdGxldmVsKTsKLSAgICAgICAgZGVidWco RjEwMSwicGFyc2VyIGNtZF9yb3dzIiwiIixjbWRfcm93cyk7Ci0KLSNpZm5kZWYgTk9MT0NBTAot ICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgd2FzY2xvc2VkIiwiIix3YXNjbG9zZWQpOwotICAg ICAgICBpZiAod2FzY2xvc2VkKSB7ICAgICAgICAgICAgICAgIC8qIElmIGNvbm5lY3Rpb24gd2Fz IGp1c3QgY2xvc2VkICovCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICBpbnQgazsKLSAgICAg ICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX2Nsb3NlIixubWFjKTsgLyogTG9vayB1cCAib25f Y2xvc2UiICovCi0gICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgLyogSWYg Zm91bmQsICovCi0gICAgICAgICAgICAgICAgLyogcHJpbnRmKCJPTl9DTE9TRSBDTUQgTE9PUFxu Iik7ICovCi0gICAgICAgICAgICAgICAgZG9kbyhrLGNraXRvYSh3aHljbG9zZWQpLDApOyAvKiBT ZXQgaXQgdXAgKi8KLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAg ICAgd2h5Y2xvc2VkID0gV0NfUkVNTzsKLSAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDA7Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgeHhk b3QgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciB0aGlzLi4uICovCi0KLSAgICAg ICAgZGVidWcoRjEwMSwicGFyc2VyIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwotICAgICAgICBpZiAo c3VjY2VzcyA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoY21kc3RrW2NtZGx2bF0uc3JjID09IENN RF9URiAmJiB0YWtlcnJbY21kbHZsXSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiQ29tbWFu ZCBmaWxlIHRlcm1pbmF0ZWQgYnkgZXJyb3IuXG4iKTsKLSAgICAgICAgICAgICAgICBwb3BjbHZs KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNtZGx2bCA9PSAwKSByZXR1cm4oMCk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBpZiAoY21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9NRCAmJiBt ZXJyb3JbY21kbHZsXSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiQ29tbWFuZCBlcnJvcjog bWFjcm8gdGVybWluYXRlZC5cbiIpOwotICAgICAgICAgICAgICAgIHBvcGNsdmwoKTsKLSAgICAg ICAgICAgICAgICBpZiAobSAmJiAoY21kbHZsIDwgaW5sZXZlbCkpCi0gICAgICAgICAgICAgICAg ICByZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg ICBudWxjbWQgPSAobSA9PSAyKTsKLSAgICAgICAgZGVidWcoRjEwMSwicGFyc2VyIG51bGNtZCIs IiIsbnVsY21kKTsKLSNlbHNlCi0gICAgICAgIGlmIChzdWNjZXNzID09IDAgJiYgdGxldmVsID4g LTEgJiYgdGFrZXJyW3RsZXZlbF0pIHsKLSAgICAgICAgICAgIHByaW50ZigiQ29tbWFuZCBmaWxl IHRlcm1pbmF0ZWQgYnkgZXJyb3IuXG4iKTsKLSAgICAgICAgICAgIHBvcGNsdmwoKTsKLSAgICAg ICAgICAgIGNtaW5pKGNreGVjaCk7ICAgICAgICAgICAgICAvKiBDbGVhciB0aGUgY21kIGJ1ZmZl ci4gKi8KLSAgICAgICAgICAgIGlmICh0bGV2ZWwgPCAwKSAgICAgICAgICAgICAvKiBKdXN0IHBv cHBlZCBvdXQgb2YgY21kIGZpbGVzPyAqLwotICAgICAgICAgICAgICByZXR1cm4oMCk7ICAgICAg ICAgICAgICAgIC8qIEVuZCBvZiBpbml0IGZpbGUgb3Igd2hhdGV2ZXIuICovCi0gICAgICAgIH0K LSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgTUFDCi0gICAgICAgIC8qIENoZWNrIGZvciBU QUtFIGluaXRpYXRlZCBieSBtZW51LiAqLwotICAgICAgICBpZiAoKHRsZXZlbCA9PSAtMSkgJiYg bGZpbGVzKQotICAgICAgICAgICAgc3RhcnRsZmlsZSgpOwotI2VuZGlmIC8qIE1BQyAqLwotCi0g ICAgICAgIC8qIElmIGluIFRBS0UgZmlsZSwgY2hlY2sgZm9yIEVPRiAqLwotI2lmbmRlZiBOT1NQ TAotI2lmZGVmIE1BQwotICAgICAgICBpZgotI2Vsc2UKLSAgICAgICAgd2hpbGUKLSNlbmRpZiAv KiBNQUMgKi8KLSAgICAgICAgICAoKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfVEYpICAvKiBJ ZiBlbmQgb2YgdGFrZSBmaWxlICovCi0gICAgICAgICAgICAgICAmJiAodGxldmVsID4gLTEpCi0g ICAgICAgICAgICAgICAmJiBmZW9mKHRmaWxlW3RsZXZlbF0pKSB7Ci0gICAgICAgICAgICBwb3Bj bHZsKCk7ICAgICAgICAgICAgICAgICAgLyogcG9wIGNvbW1hbmQgbGV2ZWwgKi8KLSAgICAgICAg ICAgIGNtaW5pKGNreGVjaCk7ICAgICAgICAgICAgICAvKiBhbmQgY2xlYXIgdGhlIGNtZCBidWZm ZXIuICovCi0gICAgICAgICAgICBpZiAoY21kbHZsID09IDApIHsgICAgICAgICAgLyogSnVzdCBw b3BwZWQgb3V0IG9mIGFsbCBjbWQgZmlsZXM/ICovCi0gICAgICAgICAgICAgICAgcmV0dXJuKDAp OyAgICAgICAgICAgICAgLyogRW5kIG9mIGluaXQgZmlsZSBvciB3aGF0ZXZlci4gKi8KLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotI2lmZGVmIE1BQwotICAgICAgICBtaW5pcGFyc2VyKDEpOwot ICAgICAgICBpZiAoc3N0YXRlID09ICdhJykgeyAgICAgICAgICAgIC8qIGlmIGNtZC0uIGNhbmNl bCAqLwotICAgICAgICAgICAgZGVidWcoRjEwMCwgInBhcnNlcjogY2FuY2VsIHRha2UgZHVlIHRv IHNzdGF0ZSIsICIiLCBzc3RhdGUpOwotICAgICAgICAgICAgc3N0YXRlID0gJ1wwJzsKLSAgICAg ICAgICAgIGRvc3RvcCgpOwotICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAg IC8qIEVuZCBvZiBpbml0IGZpbGUgb3Igd2hhdGV2ZXIuICovCi0gICAgICAgIH0KLSNlbmRpZiAv KiAgTUFDICovCi0KLSNlbHNlIC8qIE5PU1BMICovCi0gICAgICAgIGlmICgodGxldmVsID4gLTEp ICYmIGZlb2YodGZpbGVbdGxldmVsXSkpIHsgLyogSWYgZW5kIG9mIHRha2UgKi8KLSAgICAgICAg ICAgIHBvcGNsdmwoKTsgICAgICAgICAgICAgICAgICAvKiBQb3AgdXAgb25lIGxldmVsLiAqLwot ICAgICAgICAgICAgY21pbmkoY2t4ZWNoKTsgICAgICAgICAgICAgIC8qIGFuZCBjbGVhciB0aGUg Y21kIGJ1ZmZlci4gKi8KLSAgICAgICAgICAgIGlmICh0bGV2ZWwgPCAwKSAgICAgICAgICAgICAv KiBKdXN0IHBvcHBlZCBvdXQgb2YgY21kIGZpbGVzPyAqLwotICAgICAgICAgICAgICByZXR1cm4o MCk7ICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBpbml0IGZpbGUgb3Igd2hhdGV2ZXIuICovCi0g ICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAg ZGVidWcoRjEwMSwicGFyc2VyIGNtZGx2bCIsIiIsY21kbHZsKTsKLSAgICAgICAgZGVidWcoRjEw MSwicGFyc2VyIGNtZHNyYyIsIiIsY21kc3RrW2NtZGx2bF0uc3JjKTsKLQotICAgICAgICBpZiAo Y21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9NRCkgeyAvKiBFeGVjdXRpbmcgYSBtYWNybz8gKi8K LSAgICAgICAgICAgIGRlYnVnKEYxMDAsInBhcnNlciBtYWNybyIsIiIsMCk7Ci0gICAgICAgICAg ICBtYWNsdmwgPSBjbWRzdGtbY21kbHZsXS5sdmw7IC8qIEdldCBjdXJyZW50IGxldmVsICovCi0g ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgbWFjbHZsIiwiIixtYWNsdmwpOwotICAgICAg ICAgICAgY2JwID0gY21kYnVmOyAgICAgICAgICAgICAgIC8qIENvcHkgbmV4dCBjbWQgdG8gY29t bWFuZCBidWZmZXIuICovCi0gICAgICAgICAgICAqY2JwID0gTlVMOwotICAgICAgICAgICAgaWYg KCpzYXZidWYpIHsgICAgICAgICAgICAgIC8qIEluIGNhc2UgdGhlbi1wYXJ0IG9mICdpZicgY29t bWFuZCAqLwotICAgICAgICAgICAgICAgIGNrc3RybmNweShjYnAsc2F2YnVmLENNREJMKTsgLyog d2FzIHNhdmVkLCByZXN0b3JlIGl0LiAqLwotICAgICAgICAgICAgICAgICpzYXZidWYgPSAnXDAn OwotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIEVsc2UgZ2V0IG5l eHQgY21kIGZyb20gbWFjcm8gZGVmICovCi0gICAgICAgICAgICAgICAgaWYgKGdldG5jbShjYnAs Q01EQkwpIDwgMCkgewotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICAgICAgICAgIGlmIChkZWJs b2cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciBlbmQgb2Yg bWFjcm8gbSIsIiIsbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJz ZXIgZW5kIG9mIG1hY3JvIGNtZGx2bCIsIiIsY21kbHZsKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDEsInBhcnNlciBlbmQgb2YgbWFjcm8gaW5sZXZlbCIsIiIsaW5sZXZlbCk7 Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgICAgICAgICAg ICAgICAgICBpZiAobSAmJiAoY21kbHZsIDwgaW5sZXZlbCkpCi0gICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgLyogaWYg KCFtKSAqLyBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBkZWJ1ZyhGMDEwLCJDTUQoTSkiLGNtZGJ1ZiwwKTsKLQotICAgICAgICB9IGVsc2Ug aWYgKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfVEYpCi0jZWxzZQotICAgICAgICAgIGlmICh0 bGV2ZWwgPiAtMSkKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgIHsKLSNpZm5kZWYgTk9T UEwKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInBhcnNlciBzYXZidWYiLHNhdmJ1Zix0bGV2ZWwp OwotICAgICAgICAgICAgaWYgKCpzYXZidWYpIHsgICAgICAgICAgICAgIC8qIEluIGNhc2UgVEhF Ti1wYXJ0IG9mIElGIGNvbW1hbmQgKi8KLSAgICAgICAgICAgICAgICBja3N0cm5jcHkoY21kYnVm LHNhdmJ1ZixDTURCTCk7IC8qIHdhcyBzYXZlZCwgcmVzdG9yZSBpdC4gKi8KLSAgICAgICAgICAg ICAgICAqc2F2YnVmID0gJ1wwJzsKLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIE5PU1BM ICovCi0KLSAgICAgICAgICAgICAgLyogR2V0IG5leHQgbGluZSBmcm9tIFRBS0UgZmlsZSAqLwot Ci0gICAgICAgICAgICAgIGlmICgodGZjb2RlID0gZ2V0bmN0KGNtZGJ1ZixDTURCTCx0ZmlsZVt0 bGV2ZWxdLDApKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInBhcnNlciB0 ZmNvZGUiLHRmaWxlW3RsZXZlbF0sdGZjb2RlKTsKLSAgICAgICAgICAgICAgICAgIGlmICh0ZmNv ZGUgPCAtMSkgeyAgICAvKiBFcnJvciAqLwotICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi P0Vycm9yIGluIFRBS0UgY29tbWFuZCBmaWxlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHRmY29kZSA9PSAtMikgPyAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIgOgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGluZSB0b28gbG9uZyBvciBjb250YWlucyBO VUwgY2hhcmFjdGVycyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgICAgICAgICBkb3N0b3AoKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAvKiAtMSBtZWFucyBFT0YgKi8KLSAgICAgICAg ICAgICAgfQotCi0gICAgICAgIC8qIElmIGludGVyYWN0aXZlLCBnZXQgbmV4dCBjb21tYW5kIGZy b20gdXNlci4gKi8KLQotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFVzZXIgdHlwZXMgaXQgaW4uICovCi0gICAgICAgICAgICBpZiAocGZsYWcpIHByb21wdCh4eHN0 cmluZyk7Ci0gICAgICAgICAgICBjbWluaShja3hlY2gpOwotICAgICAgICB9Ci0KLSAgICAvKiBO b3cgd2Uga25vdyB3aGVyZSBuZXh0IGNvbW1hbmQgaXMgY29taW5nIGZyb20uIFBhcnNlIGFuZCBl eGVjdXRlIGl0LiAqLwotCi0gICAgICAgIHJlcGFycyA9IDE7ICAgICAgICAgICAgICAgICAgICAg LyogMSA9IGNvbW1hbmQgbmVlZHMgcGFyc2luZyAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICAgICAg ZGlzcGxhID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgbm8gZmlsZSB0cmFuc2Zl ciBkaXNwbGF5ICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSAgICAgICAgd2hpbGUgKHJlcGFy cykgeyAgICAgICAgICAgICAgICAvKiBQYXJzZSB0aGlzIGNtZCB1bnRpbCBlbnRlcmVkLiAqLwot Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgdG9wIG9mIHdoaWxlIGxvb3AiLCIiLDAp OwotCSAgICB4YXNrbW9yZSA9IHNhdmVhc2s7CQkvKiBSZXN0b3JlIGdsb2JhbCBtb3JlLXByb21w dGluZyAqLwotCSAgICBkaXJhY3RpdmUgPSAwOwkJLyogRElSIGNvbW1hbmQgbm90IGFjdGl2ZSAq LwotCSAgICBjZGFjdGl2ZSA9IDA7CQkvKiBDRCBjb21tYW5kIG5vdCBhY3RpdmUgKi8KLSNpZm5k ZWYgTk9TUEwKLQkgICAgYXNrZmxhZyA9IDA7CQkvKiBBU0sgY29tbWFuZCBub3QgYWN0aXZlICov Ci0JICAgIGVjaG9zdGFycyA9IDA7CQkvKiBOb3IgQVNLUSAqLwotCSAgICBkZWJvayA9IDE7CQkJ LyogVW5kaXNhYmxlIGRlYnVnZ2luZyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBS RUNVUlNJVkUKLSAgICAgICAgICAgIC8qIEluIGNhc2Ugb2YgInNlbmQgL3JlY3Vyc2l2ZSAuLz88 Q3RybC1VPiIgZXRjICovCi0gICAgICAgICAgICByZWN1cnNpdmUgPSAwOyAgICAgICAgICAgICAg LyogVGhpcyBpcyBuZXZlciBzdGlja3kgKi8KLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSAgICAg ICAgICAgIHhmaWxldHlwZSA9IC0xOyAgICAgICAgICAgICAvKiBSZXNldCB0aGlzIGJldHdlZW4g ZWFjaCBjb21tYW5kICovCi0jaWZuZGVmIE5PTVNFTkQKLSAgICAgICAgICAgIGFkZGxpc3QgPSAw OwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLSNpZmRlZiBDS19SRUNBTEwKLSAgICAgICAgICAgIG9u X3JlY2FsbCA9IDE7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0gICAgICAgICAgICAvKiBUaGlz IG1pZ2h0IGhhdmUgYmVlbiBjaGFuZ2VkIGJ5IGEgc3dpdGNoICovCi0gICAgICAgICAgICBpZiAo Z19tYXRjaGRvdCA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgbWF0Y2hkb3QgPSBnX21hdGNoZG90 OwotICAgICAgICAgICAgICAgIGdfbWF0Y2hkb3QgPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGNtcmVzKCk7ICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBidWZmZXIgcG9pbnRl cnMuICovCi0KLSNpZmRlZiBPUzIKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAvKiB3ZSBj aGVjayB0byBzZWUgaWYgYSBtYWNybyBpcyB3YWl0aW5nIHRvIGJlIGV4ZWN1dGVkICovCi0gICAg ICAgICAgICAvKiBpZiBzbywgd2UgY2FsbCBkb21hYyBvbiBpdCAqLwotICAgICAgICAgICAgaWYg KGNtZG1hYykgewotICAgICAgICAgICAgICAgIGNrc3RybmNweShjbWRidWYsIGNtZG1hYywgQ01E QkwpOwotICAgICAgICAgICAgICAgIGZyZWUoY21kbWFjKTsKLSAgICAgICAgICAgICAgICBjbWRt YWMgPSBOVUxMOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgICAgICAgICBieWVfYWN0aXZlID0gMDsKLSNl bmRpZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgICAgIGhhdmV0b2tlbiA9IDA7Ci0gICAgICAgICAg ICB4eCA9IGNta2V5MihjbWR0YWIsbmNtZCwiQ29tbWFuZCIsIiIsdG9rdGFiLHh4c3RyaW5nLDEp OwotICAgICAgICAgICAgZGVidWcoRjEwMSwidG9wLWxldmVsIGNta2V5MiIsIiIseHgpOwotICAg ICAgICAgICAgaWYgKHh4ID09IC01KSB7Ci0gICAgICAgICAgICAgICAgeXkgPSBjaGt0b2sodG9r dGFiKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0b3AtbGV2ZWwgY21rZXkgdG9rZW4i LCIiLHl5KTsKLSNpZm5kZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgIC8qIEVpdGhlciB3YXkg bWFrZXMgYWJzb2x1dGVseSBubyBkaWZmZXJlbmNlICovCi0gICAgICAgICAgICAgICAgZGVidWco RjExMCwiTk8gVU5HV09SRCIsYXRtYnVmLDApOwotICAgICAgICAgICAgICAgIC8qIHVuZ3dvcmQo KTsgKi8KLSNlbHNlCi0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiVE9LRU4gVU5HV09SRCIs YXRtYnVmLDApOwotICAgICAgICAgICAgICAgIHVuZ3dvcmQoKTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgICAgICAgICAgc3dpdGNoICh5eSkgewotICAgICAgICAgICAgICAgICAgY2Fz ZSAnIyc6IHh4ID0gWFhDT007IGJyZWFrOyAvKiBDb21tZW50ICovCi0gICAgICAgICAgICAgICAg ICBjYXNlICc7JzogeHggPSBYWENPTTsgYnJlYWs7IC8qIENvbW1lbnQgKi8KLSNpZm5kZWYgTk9T UEwKLSAgICAgICAgICAgICAgICAgIGNhc2UgJy4nOiB4eCA9IFhYREVGOyB4eGRvdCA9IDE7IGJy ZWFrOyAvKiBBc3NpZ25tZW50ICovCi0gICAgICAgICAgICAgICAgICBjYXNlICc6JzogeHggPSBY WExCTDsgYnJlYWs7IC8qIEdPVE8gbGFiZWwgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZu ZGVmIE5PUFVTSAotI2lmZGVmIENLX1JFRElSCi0gICAgICAgICAgICAgICAgICBjYXNlICc8JzoK LSNlbmRpZiAvKiBDS19SRURJUiAqLwotICAgICAgICAgICAgICAgICAgY2FzZSAnQCc6Ci0gICAg ICAgICAgICAgICAgICBjYXNlICchJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vcHVzaCkg ewotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqczsgaW50IHg7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBpZiAoKHggPSBjbXR4dCgiVGV4dCB0byBiZSBpZ25vcmVkIiwiIiwmcyxOVUxM KSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBzdWNjZXNzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHh4ID0g WFhDT007Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBzd2l0Y2goeXkpIHsKLSNpZmRlZiBDS19SRURJUgotICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlICc8JzogeHggPSBYWEZVTjsgYnJlYWs7IC8qIFJFRElSRUNUICovCi0jZW5kaWYg LyogQ0tfUkVESVIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQCc6Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyEnOiB4eCA9IFhYU0hFOyBicmVhazsgLyogU2hl bGwgZXNjYXBlICovCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9QVVNIICovCi0j aWZkZWYgQ0tfUkVDQUxMCi0gICAgICAgICAgICAgICAgICBjYXNlICdeJzogeHggPSBYWFJFRE87 ICBicmVhazsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAg ICAgICAgICAgIGNhc2UgJ3snOiB4eCA9IFhYTUFDUk87IGJyZWFrOwotICAgICAgICAgICAgICAg ICAgY2FzZSAnKCc6IHh4ID0gWFhTRVhQOyAgYnJlYWs7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQot ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWll dCAmJiAhY21kX2VycikgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbj9JbnZh bGlkIC0gXCIlc1wiXG4iLAotCQkJICAgICAgIGNtZGRpc3BsYXkoKGNoYXIgKiljbWRidWYseHgp Ci0JCQkgICAgICAgKTsKLQkJCWNtZGVycigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgIHh4ID0gLTI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIGhhdmV0b2tlbiA9IDE7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiSEFWRSBUT0tF TiIsIiIseHgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHh4ID4gLTEpIHsKLSAg ICAgICAgICAgICAgICB0b3BjbWQgPSB4eDsgICAgICAgICAgICAvKiBUb3AtbGV2ZWwgY29tbWFu ZCBpbmRleCAqLwotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgICAgIGlmIChtYWNsdmwgPiAt MSkKLSAgICAgICAgICAgICAgICAgIGxhc3RjbWRbbWFjbHZsXSA9IHh4OwotI2VuZGlmIC8qIE5P U1BMICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwidG9wY21kIiwiIix0b3BjbWQpOwot ICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImNtZmxncyIsIiIsY21mbGdzKTsKLSAgICAgICAg ICAgIH0KLQotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgLyogU3BlY2lhbCBoYW5kbGluZyBm b3IgSUYuLkVMU0UgKi8KLQotICAgICAgICAgICAgZGVidWcoRjEwMSwiY21kbHZsIiwiIixjbWRs dmwpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiaWZjbWRbY21kbHZsXSIsIiIsaWZjbWRbY21k bHZsXSk7Ci0KLSAgICAgICAgICAgIGlmIChpZmNtZFtjbWRsdmxdKSAgICAgICAgICAvKiBDb3Vu dCBzdG10cyBhZnRlciBJRiAqLwotICAgICAgICAgICAgICBpZmNtZFtjbWRsdmxdKys7Ci0gICAg ICAgICAgICBpZiAoaWZjbWRbY21kbHZsXSA+IDIgJiYgeHggIT0gWFhFTFMgJiYgeHggIT0gWFhD T00pCi0gICAgICAgICAgICAgIGlmY21kW2NtZGx2bF0gPSAwOwotCi0gICAgICAgICAgICAvKiBF eGVjdXRlIHRoZSBjb21tYW5kIGFuZCB0YWtlIGFjdGlvbiBiYXNlZCBvbiByZXR1cm4gY29kZS4g Ki8KLQotICAgICAgICAgICAgaWYgKG51bGNtZCkgeyAgICAgICAgICAgICAgIC8qIElnbm9yaW5n IHRoaXMgY29tbWFuZD8gKi8KLSAgICAgICAgICAgICAgICB4eCA9IFhYQ09NOyAgICAgICAgICAg ICAvKiBNYWtlIHRoaXMgY29tbWFuZCBhIGNvbW1lbnQuICovCi0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBmbnN1Y2Nlc3MgPSAxOyAgICAgICAgICAgICAgLyogRm9yIGNhdGNoaW5nIFxmdW5j dGlvbigpIGVycm9ycyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICAgICAgICAgIGRlYnVn KEYxMDEsImNhbGxpbmcgZG9jbWQoKSIsIiIseHgpOwotICAgICAgICAgICAgenogPSBkb2NtZCh4 eCk7ICAgICAgICAgICAgIC8qIFBhcnNlIHJlc3Qgb2YgY29tbWFuZCAmIGV4ZWN1dGUuICovCi0K LSNpZm5kZWYgTk9TUEwKLQkgICAgewkJCQkvKiBGb3IgXHYobGFzdGNvbW1hbmQpICovCi0JCWV4 dGVybiBjaGFyICogcHJldmNtZDsKLQkJLyogVGhlIGV4Y2VwdGlvbiBsaXN0IGtpbmQgb2YgYSBo YWNrIGJ1dCBsZXQncyB0cnkgaXQuLi4gKi8KLQkJaWYgKGNrc3RyY21wKGNtZGJ1ZiwiX2dldGFy ZyIsNywwKSAmJgotCQkgICAgY2tzdHJjbXAoY21kYnVmLCJpZiAiLDMsMCkgJiYKLQkJICAgIGNr c3RyY21wKGNtZGJ1ZiwieGlmICIsNCwwKSAmJgotCQkgICAgY2tzdHJjbXAoY21kYnVmLCJkbyBf aWYiLDYsMCkgJiYKLQkJICAgIGNrc3RyY21wKGNtZGJ1ZiwiX2Fzc2lnbiBfaWYiLDExLDApKQot CQkgIGNrc3RybmNweShwcmV2Y21kLGNtZGJ1ZixDTURCTCk7Ci0JICAgIH0KLSNlbmRpZgkvKiBO T1NQTCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICBpZiAoZm5lcnJvciAmJiAhZm5z dWNjZXNzKQotICAgICAgICAgICAgICBzdWNjZXNzID0gMDsKLSNlbmRpZiAvKiBOT1NQTCAqLwot ICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9jbWQgcmV0dXJucyIsIiIsenopOwotICAgICAgICAg ICAgLyogZGVidWcoRjAxMSwiY21kYnVmIixjbWRidWYsMzApOyAqLwotICAgICAgICAgICAgLyog ZGVidWcoRjAxMSwiYXRtYnVmIixhdG1idWYsMzApOyAqLwotI2lmZGVmIE1BQwotICAgICAgICAg ICAgaWYgKHRsZXZlbCA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNzdGF0ZSA9PSAnYScp IHsgICAgLyogaWYgY21kLS4gY2FuY2VsICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYx MTAsICJwYXJzZXI6IGNhbmNlbCB0YWtlLCBzc3RhdGU6IiwgImEiLCAwKTsKLSAgICAgICAgICAg ICAgICAgICAgc3N0YXRlID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAgICAgZG9zdG9wKCk7Ci0g ICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsgICAgICAgICAgLyogRW5kIG9mIGluaXQgZmls ZSBvciB3aGF0ZXZlci4gKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5k aWYgLyogTUFDICovCi0gICAgICAgICAgICBzd2l0Y2ggKHp6KSB7Ci0gICAgICAgICAgICAgIGNh c2UgLTQ6ICAgICAgICAgICAgICAgICAgLyogRU9GIChlLmcuIG9uIHJlZGlyZWN0ZWQgc3RkaW4p ICovCi0gICAgICAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOyAvKiAuLi5leGl0 IHN1Y2Nlc3NmdWxseSAqLwotICAgICAgICAgICAgICBjYXNlIC0xOiAgICAgICAgICAgICAgICAg IC8qIFJlcGFyc2UgbmVlZGVkICovCi0gICAgICAgICAgICAgICAgcmVwYXJzID0gMTsgICAgICAg ICAgICAgLyogSnVzdCBzZXQgcmVwYXJzZSBmbGFnIGFuZC4uLiAqLwotICAgICAgICAgICAgICAg IGNvbnRpbnVlOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICBjYXNlIC03OiAgICAgICAgICAg ICAgICAgIC8qIFRoZXkgdHlwZWQgYSBkaXNrIGxldHRlciAqLwotICAgICAgICAgICAgICAgIGlm ICghemNoZGlyKChjaGFyICopY21kYnVmKSkgewotICAgICAgICAgICAgICAgICAgICBwZXJyb3Io KGNoYXIgKiljbWRidWYpOwotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMDsKLSAgICAg ICAgICAgICAgICB9IGVsc2Ugc3VjY2VzcyA9IDE7Ci0gICAgICAgICAgICAgICAgcmVwYXJzID0g MDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAg ICAgICAgICBjYXNlIC02OiAgICAgICAgICAgICAgICAgIC8qIEludmFsaWQgY29tbWFuZCBnaXZl biB3L25vIGFyZ3MgKi8KLSAgICAgICAgICAgICAgY2FzZSAtMjogewkJLyogSW52YWxpZCBjb21t YW5kIGdpdmVuIHcvYXJncyAqLwotCQkgIGludCB4ID0gMDsKLQkJICBjaGFyICogZW9sID0gIiI7 Ci0JCSAgeCA9IHN0cmxlbihjbWRidWYpOwkvKiBBdm9pZCBibGFuayBsaW5lICovCi0JCSAgaWYg KHggPiAwKSB7Ci0JCSAgICAgIGlmIChjbWRidWZbeC0xXSAhPSBMRikKLQkJCWVvbCA9ICJcbiI7 Ci0JCSAgICAgIHByaW50ZigiP0ludmFsaWQ6ICVzJXMiLAotCQkJICAgICBjbWRkaXNwbGF5KGNt ZGJ1Zix4eCksZW9sCi0JCQkgICAgICk7Ci0JCSAgfSBlbHNlCi0JCSAgICBwcmludGYoIj9JbnZh bGlkXG4iKTsKLQkgICAgICB9Ci0JICAgICAgY2FzZSAtOToJCQkvKiBCYWQsIGVycm9yIG1lc3Nh Z2UgYWxyZWFkeSBkb25lICovCi0JCXN1Y2Nlc3MgPSAwOwotCQlkZWJ1ZyhGMTEwLCJ0b3AtbGV2 ZWwgY21rZXkgZmFpbGVkIixjbWRidWYsMCk7Ci0JCS8qIElmIGluIGJhY2tncm91bmQgdy8gY29t bWFuZHMgY29taW5nIHN0ZGluLCB0ZXJtaW5hdGUgKi8KLQkJaWYgKHBmbGFnID09IDAgJiYgdGxl dmVsIDwgMCkKLQkJICBmYXRhbCgiS2VybWl0IGNvbW1hbmQgZXJyb3IgaW4gYmFja2dyb3VuZCBl eGVjdXRpb24iKTsKLS8qCi0gIENvbW1hbmQgcmV0cnkgZmVhdHVyZSwgZWRpdCAxOTAuICBJZiB3 ZSdyZSBhdCBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgbGV2ZWwsCi0gIHJlcHJvbXB0IHRoZSB1c2Vy IHdpdGggYXMgbXVjaCBvZiB0aGUgY29tbWFuZCBhcyBkaWRuJ3QgZmFpbC4KLSovCi0jaWZkZWYg Q0tfUkVDQUxMCi0JCWlmIChjbV9yZXRyeSAmJiAheGNtZHNyYykgeyAvKiBJZiBhdCB0b3AgbGV2 ZWwgKi8KLQkJICAgIGludCBsZW47Ci0JCSAgICBjaGFyICpwLCAqczsKLQkJICAgIGxlbiA9IHN0 cmxlbihjbWRidWYpOyAvKiBMZW5ndGggb2YgY29tbWFuZCBidWZmZXIgKi8KLQkJICAgIHAgPSBt YWxsb2MobGVuICsgMSk7ICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgY29weSAqLwotCQkgICAgaWYg KHApIHsgICAgICAgICAgICAgIC8qIElmIHdlIGdvdCB0aGUgc3BhY2UgY29weSAqLwotCQkJc3Ry Y3B5KHAsY21kYnVmKTsgLyogdGhlIGNvbW1hbmQgYnVmZmVyIChTQUZFKS4gKi8KLQkJCS8qIENo b3Agb2ZmIGZpbmFsIGZpZWxkLCB0aGUgb25lIHRoYXQgZmFpbGVkLiAqLwotCQkJcyA9IHAgKyBs ZW4gLSAxOyAgICAgICAgICAvKiBQb2ludCB0byBlbmQgKi8KLQkJCXdoaWxlICgqcyA9PSBTUCAm JiBzID4gcCkgLyogVHJpbSBibGFua3MgKi8KLQkJCSAgcy0tOwotCQkJd2hpbGUgKCpzICE9IFNQ ICYmIHMgPiBwKSAvKiBUcmltIGxhc3QgZmllbGQgKi8KLQkJCSAgcy0tOwotCQkJaWYgKHMgPiBw KSAgICAgICAgLyogS2VlcCB0aGUgc3BhY2UgKi8KLQkJCSAgcysrOyAgICAgICAgICAgIC8qIGFm dGVyIGxhc3QgZ29vZCBmaWVsZCAqLwotCQkJaWYgKHMgPj0gcCkgICAgICAgLyogQ3V0IG9mZiBy ZW1haW5kZXIgKi8KLQkJCSAgKnMgPSBOVUw7Ci0JCQljbWluaShja3hlY2gpOyAgICAvKiBSZWlu aXRpYWxpemUgdGhlIHBhcnNlciAqLwotCQkJY2tzdHJuY3B5KGNtZGJ1ZixwLENNREJMKTsgLyog Q29weSByZXN1bHQgYmFjayAqLwotCQkJZnJlZShwKTsgICAgICAgICAgLyogRnJlZSB0ZW1wb3Jh cnkgc3RvcmFnZSAqLwotCQkJcCA9IE5VTEw7Ci0JCQlwcm9tcHQoeHhzdHJpbmcpOyAvKiBSZXBy aW50IHRoZSBwcm9tcHQgKi8KLQkJCXByaW50ZigiJXMiLGNtZGJ1Zik7IC8qIFJlcHJpbnQgcGFy dGlhbCBjb21tYW5kICovCi0JCQlyZXBhcnMgPSAxOyAgICAgICAgICAvKiBGb3JjZSByZXBhcnNl ICovCi0JCQljb250aW51ZTsKLQkJICAgIH0KLQkJfSBlbHNlCi0jZW5kaWYgLyogQ0tfUkVDQUxM ICovCi0JCSAgY21kZXJyKCk7Ci0KLQkJY21pbmkoY2t4ZWNoKTsJCS8qIChmYWxsIHRocnUpICov Ci0KLQkgICAgICBjYXNlIC0zOgkJCS8qIEVtcHR5IGNvbW1hbmQgT0sgYXQgdG9wIGxldmVsICov Ci0JCXJlcGFycyA9IDA7CQkvKiBEb24ndCBuZWVkIHRvIHJlcGFyc2UuICovCi0JCWNvbnRpbnVl OwkJLyogR28gYmFjayBhbmQgZ2V0IGFub3RoZXIgY29tbWFuZC4gKi8KLQotCSAgICAgIGRlZmF1 bHQ6CQkJLyogQ29tbWFuZCB3YXMgc3VjY2Vzc2Z1bC4gKi8KLSNpZm5kZWYgTk9TUEwKLQkJZGVi dWcoRjEwMSwicGFyc2VyIHByZXBhcmluZyB0byBjb250aW51ZSIsIiIsbWFjbHZsKTsKLSNlbmRp ZiAvKiBOT1NQTCAqLwotCQlkZWJ1ZyhGMTAxLCJwYXJzZXIgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7 Ci0JCXJlcGFycyA9IDA7CQkvKiBEb24ndCBuZWVkIHRvIHJlcGFyc2UuICovCi0JCWNvbnRpbnVl OwkJLyogR28gYmFjayBhbmQgZ2V0IGFub3RoZXIgY29tbWFuZC4gKi8KLQkgICAgfQotICAgICAg ICB9Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciBicmVha3Mgb3V0 IG9mIHdoaWxlIGxvb3AiLCIiLG1hY2x2bCk7Ci0gICAgICAgIGlmIChtICYmIChjbWRsdmwgPCBp bmxldmVsKSkgIHJldHVybigoaW50KSBzc3RhdGUpOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAg fQotCi0vKiBHb3QgYW4gYWN0aW9uIGNvbW1hbmQsIHJldHVybiBzdGFydCBzdGF0ZS4gKi8KLQot ICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotfQotCi0jaWZuZGVmIE5PU1BMCi0vKgotICBPVVRQ VVQgY29tbWFuZC4KLSAgQnVmZmVyaW5nIGFuZCBwYWNpbmcgYWRkZWQgYnkgTC5JLiBLaXJieSwg NUEoMTg5KSwgSnVuZSAxOTkzLgotKi8KLSNkZWZpbmUgT0JTSVpFIDgwICAgICAgICAgICAgICAg ICAgICAgICAvKiBTaXplIG9mIGxvY2FsIGNoYXJhY3RlciBidWZmZXIgKi8KLQotc3RhdGljIGlu dCBvYm47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1ZmZlciBvZmZzZXQgKGhpZ2ggd2F0 ZXIgbWFyaykgKi8KLXN0YXRpYyBjaGFyIG9idWZbT0JTSVpFKzFdOyAgICAgICAgICAgICAvKiBP VVRQVVQgYnVmZmVyLiAqLwotc3RhdGljIGNoYXIgKm9icDsgICAgICAgICAgICAgICAgICAgICAg IC8qIFBvaW50ZXIgdG8gb3V0cHV0IGJ1ZmZlci4gKi8KLV9QUk9UT1RZUCggc3RhdGljIGludCBv Ym9jLCAoY2hhcikgKTsKLV9QUk9UT1RZUCggc3RhdGljIGludCB4eG91dCwgKGNoYXIgKiwgaW50 KSApOwotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXh4b3V0KGNoYXIgKm9idWYsIGlu dCBvYnNpemUpCi0jZWxzZQoteHhvdXQob2J1Ziwgb2JzaXplKSBjaGFyICpvYnVmOyBpbnQgb2Jz aXplOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB4eG91dCAqLyB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogT1VUUFVUIGNvbW1hbmQncyBvdXRwdXQgZnVuY3Rpb24gKi8KLSAgICBp bnQgaSwgcmM7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJ4eG91dCBvYnNpemUiLCIiLG9ic2l6ZSk7Ci0g ICAgZGVidWcoRjEwMSwieHhvdXQgcGFjaW5nIiwiIixwYWNpbmcpOwotICAgIGRlYnVnKEYxMTEs Inh4b3V0IHN0cmluZyIsb2J1ZixzdHJsZW4ob2J1ZikpOwotCi0gICAgcmMgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbCByZXR1cm4gY29kZS4gKi8KLSAgICBpZiAo IW9idWYgfHwgKG9ic2l6ZSA8PSAwKSkgICAgICAgICAvKiBOb3RoaW5nIHRvIG91dHB1dC4gKi8K LSAgICAgIGdvdG8geHhvdXRfeDsgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gc3VjY2Vz c2Z1bGx5ICovCi0KLSAgICByYyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE5vdyBhc3N1bWUgZmFpbHVyZSAqLwotICAgIGlmIChwYWNpbmcgPT0gMCkgeyAgICAgICAgICAg ICAgICAgICAgLyogSXMgcGFjaW5nIGVuYWJsZWQ/ICovCi0gICAgICAgIGlmICgobG9jYWwgPyAg ICAgICAgICAgICAgICAgICAgICAvKiBObywgd3JpdGUgZW50aXJlIHN0cmluZyBhdCBvbmNlICov Ci0gICAgICAgICAgICAgdHRvbCgoQ0hBUiAqKW9idWYsIG9ic2l6ZSkgOiAvKiB0byBjb21tdW5p Y2F0aW9ucyBkZXZpY2UgKi8KLSAgICAgICAgICAgICBjb254byhvYnNpemUsIG9idWYpKSAgICAg ICAgIC8qIG9yIHRvIGNvbnNvbGUgKi8KLSAgICAgICAgICAgICE9IG9ic2l6ZSkKLSAgICAgICAg ICBnb3RvIHh4b3V0X3g7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG9i c2l6ZTsgaSsrKSB7ICAvKiBXcml0ZSBpbmRpdmlkdWFsIGNoYXJzICovCi0gICAgICAgICAgICBp ZiAoKGxvY2FsID8gdHRvYyhvYnVmW2ldKSA6IGNvbm9jKG9idWZbaV0pKSA8IDApCi0gICAgICAg ICAgICAgIGdvdG8geHhvdXRfeDsKLSAgICAgICAgICAgIG1zbGVlcChwYWNpbmcpOwotICAgICAg ICB9Ci0gICAgfQotICAgIGlmIChkdXBsZXgpIHsKLSNpZmRlZiBPUzIKLSAgICAgICAgaWYgKGlu ZWNobyAmJiBsb2NhbCkgewotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgb2JzaXplOyBpKyspIHsgLyogV3JpdGUgdG8gZW11bGF0b3IgKi8KLSAgICAgICAgICAg ICAgICBzY3JpcHR3cnRidWYoKFVTSE9SVClvYnVmW2ldKTsgLyogd2hpY2ggYWxzbyBsb2dzIHNl c3Npb24gKi8KLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgICAgICAg ICBjb254byhvYnNpemUsb2J1Zik7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2VzbG9nKSB7ICAgICAg ICAgICAgLyogb3IgbG9nIHNlc3Npb24gaGVyZSAqLwotICAgICAgICAgICAgbG9nc3RyKChjaGFy ICopIG9idWYsIG9ic2l6ZSk7Ci0gICAgICAgIH0KLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICBp ZiAoc2VzbG9nKSB7Ci0gICAgICAgICAgICBsb2dzdHIoKGNoYXIgKikgb2J1Ziwgb2JzaXplKTsK LSAgICAgICAgfQotICAgICAgICBpZiAoaW5lY2hvICYmIGxvY2FsKSB7Ci0gICAgICAgICAgICBj b254byhvYnNpemUsb2J1Zik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0g ICAgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3VjY2VzcyAqLwotICB4 eG91dF94OgotICAgIG9ibiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0 IGNvdW50ICovCi0gICAgb2JwID0gb2J1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5k IHBvaW50ZXJzICovCi0gICAgcmV0dXJuKHJjKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog cmV0dXJuIG91ciByZXR1cm4gY29kZSAqLwotfQotCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgTWFj cm9zIGZvciBPVVRQVVQgY29tbWFuZCBleGVjdXRpb24sIHRvIG1ha2UgaXQgZ28gZmFzdGVyLgot Ki8KLSNkZWZpbmUgb2JmbHMoKSAoKHh4b3V0KG9idWYsb2JuKTwwKT8tMTowKQotI2RlZmluZSBv Ym9jKGMpICgoKm9icCsrPShjaGFyKShjKSksKm9icD0wLCgoKCsrb2JuKT49T0JTSVpFKT9vYmZs cygpOjApKQotCi0jZWxzZSAvKiBUaGUgbWFjcm9zIGNhdXNlIHNvbWUgY29tcGlsZXJzIHRvIGdl bmVyYXRlIGJhZCBjb2RlLiAqLwotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLW9ib2Mo Y2hhciBjKQotI2Vsc2UKLW9ib2MoYykgY2hhciBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0v KiBvYm9jICovIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1VUUFVUIGNvbW1hbmQn cyBvdXRwdXQgZnVuY3Rpb24gKi8KLQotICAgICpvYnArKyA9IGM7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIERlcG9zaXQgY2hhcmFjdGVyICovCi0gICAgKm9icCA9IE5VTDsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRmx1c2ggYnVmZmVyIGlmIGl0J3Mgbm93IGZ1bGwgKi8KLQotICAg IHJldHVybigoKCsrb2JuKSA+PSBPQlNJWkUpID8geHhvdXQob2J1ZixvYm4pIDogMCk7Ci19Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKiAgUm91dGluZXMgZm9yIGhhbmRsaW5nIGxvY2FsIHZh cmlhYmxlcyAtLSBhbHNvIHNlZSBwb3BjbHZsKCkuICAqLwotCi1WT0lECi1mcmVlbG9jYWwobSkg aW50IG07IHsgICAgICAgICAgICAgICAgICAgLyogRnJlZSBsb2NhbCB2YXJpYWJsZXMgKi8KLSAg ICBzdHJ1Y3QgbG9jYWx2YXIgKiB2LCAqIHR2OyAgICAgICAgICAvKiBhdCBtYWNybyBsZXZlbCBt Li4uICovCi0gICAgZGVidWcoRjEwMSwiZnJlZWxvY2FsIGxldmVsIiwiIixtKTsKLSAgICBpZiAo bSA8IDApIHJldHVybjsKLSAgICB2ID0gbG9jYWxoZWFkW21dOyAgICAgICAgICAgICAgICAgICAv KiBMaXN0IGhlYWQgZm9yIGxldmVsIG0gKi8KLSAgICB3aGlsZSAodikgewotICAgICAgICBpZiAo di0+bHZfbmFtZSkgICAgICAgICAgICAgICAgIC8qIFZhcmlhYmxlIG5hbWUgKi8KLSAgICAgICAg ICBmcmVlKHYtPmx2X25hbWUpOwotICAgICAgICBpZiAodi0+bHZfdmFsdWUpICAgICAgICAgICAg ICAgIC8qIFZhbHVlICovCi0gICAgICAgICAgZnJlZSh2LT5sdl92YWx1ZSk7Ci0gICAgICAgIHR2 ID0gdjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2F2ZSBwb2ludGVyIHRvIHRoaXMgbm9k ZSAqLwotICAgICAgICB2ID0gdi0+bHZfbmV4dDsgICAgICAgICAgICAgICAgIC8qIEdldCBuZXh0 IG9uZSAqLwotICAgICAgICBpZiAodHYpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZyZWUg dGhpcyBvbmUgKi8KLSAgICAgICAgICBmcmVlKChjaGFyICopdHYpOwotICAgIH0KLSAgICBsb2Nh bGhlYWRbbV0gPSAoc3RydWN0IGxvY2FsdmFyICopIE5VTEw7IC8qIERvbmUsIHNldCBsaXN0IGhl YWQgdG8gTlVMTCAqLwotfQotCi0jZGVmaW5lIE1BWExPQ0FMVkFSIDY0Ci0KLS8qIFJldHVybiBh IHBvaW50ZXIgdG8gdGhlIGRlZmluaXRpb24gb2YgYSB1c2VyLWRlZmluZWQgdmFyaWFibGUgKi8K LQotc3RhdGljIGNoYXIgKgotdmFyZGVmKHMsaXNhcnJheSx4MSx4MikgY2hhciAqIHM7IGludCAq IGlzYXJyYXksICogeDEsICogeDI7IHsKLSAgICBjaGFyICogcDsKLSAgICBjaGFyIGM7Ci0gICAg KmlzYXJyYXkgPSAwOwotICAgIGlmICghcykgcmV0dXJuKE5VTEwpOwotICAgIGlmICghKnMpIHJl dHVybihOVUxMKTsKLSAgICBwID0gczsKLSAgICBpZiAoKnMgPT0gQ01EUSkgewotICAgICAgICBw Kys7Ci0gICAgICAgIGlmICghKnApCi0gICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgICAgICBp ZiAoKGMgPSAqcCkgPT0gJyUnKSB7ICAgICAgICAgIC8qIFNjYWxhciB2YXJpYWJsZS4gKi8KLSAg ICAgICAgICAgIGMgPSAqKytwOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgSUQgY2hhcmFjdGVy LiAqLwotICAgICAgICAgICAgcCA9ICIiOyAgICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBk ZWZpbml0aW9uIGlzIGVtcHR5ICovCi0gICAgICAgICAgICBpZiAoIWMpCi0gICAgICAgICAgICAg IHJldHVybihOVUxMKTsKLSAgICAgICAgICAgIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgeyAv KiBEaWdpdCBmb3IgbWFjcm8gYXJnICovCi0gICAgICAgICAgICAgICAgaWYgKG1hY2x2bCA8IDAp ICAgICAgICAgLyogRGlnaXQgdmFyaWFibGVzIGFyZSBnbG9iYWwgKi8KLSAgICAgICAgICAgICAg ICAgIHJldHVybihnX3ZhcltjXSk7ICAgICAvKiBpZiBubyBtYWNybyBpcyBhY3RpdmUgKi8KLSAg ICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndpc2UgKi8KLSAg ICAgICAgICAgICAgICAgIHJldHVybihtX2FyZ1ttYWNsdmxdW2MgLSAnMCddKTsgLyogdGhleSdy ZSBvbiB0aGUgc3RhY2sgKi8KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNhbHBoYShjKSkgewot ICAgICAgICAgICAgICAgIGlmIChpc3VwcGVyKGMpKSBjIC09ICgnYSctJ0EnKTsKLSAgICAgICAg ICAgICAgICByZXR1cm4oZ192YXJbY10pOyAgICAgICAgICAgLyogTGV0dGVyIGZvciBnbG9iYWwg dmFyaWFibGUgKi8KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICByZXR1cm4oTlVM TCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnJicpIHsgICAgICAgICAgLyogQXJyYXkgcmVm ZXJlbmNlLiAqLwotICAgICAgICAgICAgaW50IHgsIHZiaSwgZDsKLSAgICAgICAgICAgIHggPSBh cnJheW5hbShwLCZ2YmksJmQpOyAgICAvKiBHZXQgbmFtZSBhbmQgc3Vic2NyaXB0ICovCi0gICAg ICAgICAgICBpZiAoeCA+IC0xIHx8IGQgPT0gLTE3KSB7Ci0gICAgICAgICAgICAgICAgKmlzYXJy YXkgPSAxOwotICAgICAgICAgICAgICAgICp4MSA9IHZiaTsKLSAgICAgICAgICAgICAgICAqeDIg PSAoZCA9PSAtMTcpID8gMCA6IGQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeCA8 IDApCi0gICAgICAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICAgICAgICAgIGlmIChjaGthcnJh eSh2YmksZCkgPj0gMCkgewkvKiBBcnJheSBpcyBkZWNsYXJlZD8gKi8KLSAgICAgICAgICAgICAg ICB2YmkgLT0gQVJSQVlCQVNFOyAgICAgICAvKiBDb252ZXJ0IG5hbWUgdG8gaW5kZXggKi8KLSAg ICAgICAgICAgICAgICBpZiAoYV9kaW1bdmJpXSA+PSBkKSB7ICAvKiBJZiBzdWJzY3JpcHQgaW4g cmFuZ2UgKi8KLSAgICAgICAgICAgICAgICAgICAgY2hhciAqKmFwOwotICAgICAgICAgICAgICAg ICAgICBhcCA9IGFfcHRyW3ZiaV07Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigoYXApID8g YXBbZF0gOiBOVUxMKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBrOwot ICAgICAgICBrID0gbXhsb29rKG1hY3RhYixzLG5tYWMpOwotICAgICAgICByZXR1cm4oKGsgPiAt MSkgPyBtYWN0YWJba10ubXZhbCA6IE5VTEwpOwotICAgIH0KLX0KLQotCi1pbnQKLWFkZGxvY2Fs KHApIGNoYXIgKiBwOyB7Ci0gICAgaW50IHgsIHosIGlzYXJyYXkgPSAwOwotICAgIGNoYXIgKiBz OwotICAgIHN0cnVjdCBsb2NhbHZhciAqIHYsICpwcmV2ID0gKHN0cnVjdCBsb2NhbHZhciAqKU5V TEw7Ci0gICAgZXh0ZXJuIGludCB0cmFfYXNnOyBpbnQgdHJhX3RtcDsKLQotICAgIHRyYV90bXAg PSB0cmFfYXNnOwotCi0gICAgcyA9IHZhcmRlZihwLCZpc2FycmF5LCZ4LCZ6KTsgICAgICAgLyog R2V0IGRlZmluaXRpb24gb2YgdmFyaWFibGUgKi8KLSAgICBpZiAoaXNhcnJheSkgeyAgICAgICAg ICAgICAgICAgICAgICAvKiBBcnJheXMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5ICovCi0gICAgICAg IHB1c2hhcnJheSh4LHopOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmICghcykg cyA9ICIiOwotICAgIGlmICgodiA9IGxvY2FsaGVhZFtjbWRsdmxdKSkgeyAgICAgIC8qIEFscmVh ZHkgaGF2ZSBzb21lIGF0IHRoaXMgbGV2ZWw/ICovCi0gICAgICAgIHdoaWxlICh2KSB7ICAgICAg ICAgICAgICAgICAgICAgLyogRmluZCBlbmQgb2YgbGlzdCAqLwotICAgICAgICAgICAgcHJldiA9 IHY7Ci0gICAgICAgICAgICB2ID0gdi0+bHZfbmV4dDsKLSAgICAgICAgfQotICAgIH0KLSAgICB2 ID0gKHN0cnVjdCBsb2NhbHZhciAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NhbHZhcikpOwot ICAgIGlmICghdikgewotICAgICAgICBwcmludGYoIj9GYWlsdXJlIHRvIGFsbG9jYXRlIHN0b3Jh Z2UgZm9yIGxvY2FsIHZhcmlhYmxlcyIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAg ICBpZiAoIWxvY2FsaGVhZFtjbWRsdmxdKSAgICAgICAgICAgICAvKiBJZiBmaXJzdCwgc2V0IGxp c3QgaGVhZCAqLwotICAgICAgbG9jYWxoZWFkW2NtZGx2bF0gPSB2OwotICAgIGVsc2UgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSBsaW5rIHByZXZpb3VzIHRvIHRo aXMgKi8KLSAgICAgIHByZXYtPmx2X25leHQgPSB2OwotICAgIHByZXYgPSB2OyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEFuZCBtYWtlIHRoaXMgcHJldmlvdXMgKi8KLSAgICB2LT5sdl9u ZXh0ID0gKHN0cnVjdCBsb2NhbHZhciAqKSBOVUxMOyAvKiBObyBuZXh0IHlldCAqLwotCi0gICAg aWYgKCEodi0+bHZfbmFtZSA9IChjaGFyICopIG1hbGxvYygoaW50KSBzdHJsZW4ocCkgKyAxKSkp Ci0gICAgICByZXR1cm4oLTEpOwotICAgIHN0cmNweSh2LT5sdl9uYW1lLCBwKTsgICAgICAgICAg ICAgIC8qIENvcHkgbmFtZSBpbnRvIG5ldyBub2RlIChTQUZFKSAqLwotCi0gICAgaWYgKCpzKSB7 Ci0gICAgICAgIGlmICghKHYtPmx2X3ZhbHVlID0gKGNoYXIgKikgbWFsbG9jKChpbnQpIHN0cmxl bihzKSArIDEpKSkKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBzdHJjcHkodi0+bHZf dmFsdWUsIHMpOyAgICAgICAgIC8qIENvcHkgdmFsdWUgaW50byBuZXcgbm9kZSAoU0FGRSkgKi8K LSAgICB9IGVsc2UKLSAgICAgIHYtPmx2X3ZhbHVlID0gTlVMTDsKLQotICAgIHRyYV9hc2cgPSAw OwotICAgIGRlbG1hYyhwLDEpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGV0ZSB0aGUg b3JpZ2luYWwgbWFjcm8gKi8KLSAgICB0cmFfYXNnID0gdHJhX3RtcDsKLSAgICByZXR1cm4oMCk7 Ci19Ci0KLWludAotZG9sb2NhbCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERv IHRoZSBMT0NBTCBjb21tYW5kICovCi0gICAgaW50IGksIHg7Ci0gICAgY2hhciAqIHM7Ci0gICAg Y2hhciAqIGxpc3RbTUFYTE9DQUxWQVIrMl07ICAgICAgICAgLyogVXAgdG8gNjQgdmFyaWFibGVz IHBlciBsaW5lICovCi0KLSAgICBpZiAoKHggPSBjbXR4dCgiVmFyaWFibGUgbmFtZShzKSIsIiIs JnMsTlVMTCkpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLQotICAgIHh3b3JkcyhzLE1BWExPQ0FM VkFSLGxpc3QsMCk7ICAgICAgIC8qIEJyZWFrIHVwIGxpbmUgaW50byAid29yZHMiICovCi0KLSAg ICAvKiBOb3RlOiBBcnJheXMgZG8gbm90IHVzZSB0aGUgbG9jYWxoZWFkIGxpc3QsIGJ1dCBoYXZl IHRoZWlyIG93biBzdGFjayAqLwotCi0gICAgZm9yIChpID0gMTsgaSA8IE1BWExPQ0FMVkFSICYm IGxpc3RbaV07IGkrKykgeyAvKiBHbyB0aHJvdWdoIHRoZSBsaXN0ICovCi0gICAgICAgIGlmIChh ZGRsb2NhbChsaXN0W2ldKSA8IDApCi0gICAgICAgICAgZ290byBsb2NhbGJhZDsKLSAgICB9Ci0g ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICBsb2NhbGJhZDoKLSAgICBwcmludGYoIj9GYWls dXJlIHRvIGFsbG9jYXRlIHN0b3JhZ2UgZm9yIGxvY2FsIHZhcmlhYmxlcyIpOwotICAgIGZyZWVs b2NhbChjbWRsdmwpOwotICAgIHJldHVybigtOSk7Ci19Ci0KLS8qICBEIE8gTyBVIFQgUCBVIFQg IC0tICBSZXR1cm5zIDAgb24gZmFpbHVyZSwgMSBvbiBzdWNjZXNzICovCi0KLSNpZm5kZWYgTk9L VkVSQlMKLSNkZWZpbmUgS19CVUZMRU4gMzAKLSNkZWZpbmUgU0VORF9CVUZMRU4gMjU1Ci0jZGVm aW5lIHNlbmRidWZkKHgpIHsgb3NlbmRidWZbc2VuZG5keCsrXSA9IHg7XAotIGlmIChzZW5kbmR4 ID09IFNFTkRfQlVGTEVOKSB7ZG9vdXRwdXQocyxjeCk7IHNlbmRuZHggPSAwO319Ci0jZW5kaWYg LyogTk9LVkVSQlMgKi8KLQotaW50IG91dGVzYyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFByb2Nlc3Mgc3BlY2lhbCBPVVRQVVQgZXNjYXBlcyAqLwotCi1pbnQKLWRvb3V0cHV0KHMs IGN4KSBjaGFyICpzOyBpbnQgY3g7IHsKLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgZXh0ZXJuIGlu dCBzc2hfY2FzOwotICAgIGV4dGVybiBjaGFyICogc3NoX2NtZDsKLSNlbmRpZiAvKiBTU0hCVUlM VElOICovCi0gICAgaW50IHgsIHh4LCB5LCBxdW90ZTsgICAgICAgICAgICAgICAgLyogV29ya2Vy cyAqLwotICAgIGludCBpc190biA9IDA7Ci0KLSAgICBpc190biA9IChsb2NhbCAmJiBuZXR3b3Jr ICYmIElTX1RFTE5FVCgpKSB8fAotICAgICAgKCFsb2NhbCAmJiBzc3RlbG5ldCk7Ci0KLSAgICBk ZWJ1ZyhGMTExLCJkb291dHB1dCBzIixzLChpbnQpc3RybGVuKHMpKTsKLQotICAgIGlmIChsb2Nh bCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbmRpdGlvbiBleHRlcm5hbCBsaW5lICov Ci0jaWZkZWYgTk9MT0NBTAotICAgICAgICBnb3RvIG91dGVycjsKLSNlbHNlCi0JaWYgKHR0Y2hr KCkgPCAwKSB7Ci0JICAgIGlmICghbmV0d29yaykgewotCQlpZiAoY2FycmllciAhPSBDQVJfT0ZG KSB7Ci0JCSAgICBpbnQgeDsKLQkJICAgIHggPSB0dGdtZG0oKTsKLQkJICAgIGlmICgoeCA+IC0x KSAmJiAoKHggJiBCTV9EQ0QpID09IDApKSB7Ci0JCQlwcmludGYoCi0iP0NhcnJpZXIgc2lnbmFs IHJlcXVpcmVkIGJ1dCBub3QgcHJlc2VudCAtIFRyeSBTRVQgQ0FSUklFUi1XQVRDSCBPRkYuXG4i Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCQkJcmV0dXJuKDApOwotCQkgICAg fQotCQl9IGVsc2UgewotCQkgICAgcHJpbnRmKAotIj9Qcm9ibGVtIHdpdGggc2VyaWFsIHBvcnQg b3IgbW9kZW0gb3IgY2FibGUgLSBUcnkgU0hPVyBDT01NVU5JQ0FUSU9OUy5cbiIKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLQkJICAgIHJldHVybigwKTsKLQkJfQotCSAgICB9Ci0JICAg IHByaW50ZigiP0Nvbm5lY3Rpb24gJXMgJXMgaXMgbm90IG9wZW4gb3Igbm90IGZ1bmN0aW9uaW5n LlxuIiwKLQkJICAgbmV0d29yayA/ICJ0byIgOiAib24iLAotCQkgICB0dG5hbWUKLQkJICAgKTsK LQkgICAgcmV0dXJuKDApOwotCX0KLSAgICAgICAgaWYgKHR0dnQoc3BlZWQsZmxvdykgPCAwKSB7 Ci0gICAgICAgICAgICBwcmludGYoIj9PVVRQVVQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwot ICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwot ICAgIH0KLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgaWYgKCBuZXR3b3JrICYmIG5ldHR5cGUgPT0g TkVUX1NTSCAmJiBzc2hfY2FzICYmIHNzaF9jbWQgJiYgCi0gICAgICAgICAhKHN0cmNtcChzc2hf Y21kLCJrZXJtaXQiKSAmJiBzdHJjbXAoc3NoX2NtZCwic2Z0cCIpKSkgewotICAgICAgICBpZiAo IXF1aWV0KQotICAgICAgICAgICAgcHJpbnRmKCI/U1NIIFN1YnN5c3RlbSBhY3RpdmU6ICVzXG4i LCBzc2hfY21kKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBTU0hCVUlM VElOICovCi0KLSAgICBpZiAoIWNtZGdxdW8oKSkgeyAgICAgICAgICAgICAgICAgICAvKiBDT01N QU5EIFFVT1RJTkcgT0ZGICovCi0gICAgICAgIHggPSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAg ICAgLyogSnVzdCBzZW5kIHRoZSBzdHJpbmcgbGl0ZXJhbGx5ICovCi0gICAgICAgIHh4ID0gbG9j YWwgPyB0dG9sKChDSEFSICopcyx4KSA6IGNvbnhvKHgscyk7Ci0gICAgICAgIHJldHVybihzdWNj ZXNzID0gKHh4ID09IHgpID8gMSA6IDApOwotICAgIH0KLSAgICBxdW90ZSA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGJhY2tzbGFzaCAoXCkgcXVvdGUgKi8KLSAg ICBvYm4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBjb3VudCAqLwot ICAgIG9icCA9IG9idWY7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBwb2ludGVycyAq LwotCi0gIG91dGFnYWluOgotICAgIHdoaWxlICgoeCA9ICpzKyspKSB7ICAgICAgICAgICAgICAg IC8qIExvb3AgdGhyb3VnaCB0aGUgc3RyaW5nICovCi0gICAgICAgIHkgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRXJyb3IgY29kZSwgMCA9IG5vIGVycm9yLiAqLwotICAgICAgICBk ZWJ1ZyhGMDAwLCJkb291dHB1dCIsIiIseCk7Ci0gICAgICAgIGlmIChxdW90ZSkgeyAgICAgICAg ICAgICAgICAgICAgLyogVGhpcyBjaGFyYWN0ZXIgaXMgcXVvdGVkICovCi0jaWZuZGVmIE5PS1ZF UkJTCi0gICAgICAgICAgIGlmICh4ID09ICdrJyB8fCB4ID09ICdLJykgeyAgLyogXGsgb3IgXEsg Ki8KLSAgICAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIGt2ZXJic1tdOwotICAgICAg ICAgICAgICAgZXh0ZXJuIGludCBua3ZlcmJzOwotICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIg KiBrZXlkZWZwdHI7Ci0gICAgICAgICAgICAgICBleHRlcm4gaW50IGtleW1hYzsKLSAgICAgICAg ICAgICAgIGV4dGVybiBpbnQga2V5bWFjeDsKLSAgICAgICAgICAgICAgIGludCB4LCB5LCBicmFj ZSA9IDA7Ci0gICAgICAgICAgICAgICBpbnQgcGF1c2U7Ci0gICAgICAgICAgICAgICBjaGFyICog cCwgKiBiOwotICAgICAgICAgICAgICAgY2hhciBrYnVmW0tfQlVGTEVOICsgMV07IC8qIEtleSB2 ZXJiIG5hbWUgYnVmZmVyICovCi0gICAgICAgICAgICAgICBjaGFyIG9zZW5kYnVmW1NFTkRfQlVG TEVOICsxXTsKLSAgICAgICAgICAgICAgIGludCAgc2VuZG5keCA9IDA7Ci0KLSAgICAgICAgICAg ICAgIGlmICh4eG91dChvYnVmLG9ibikgPCAwKSAvKiBGbHVzaCBidWZmZXIgKi8KLSAgICAgICAg ICAgICAgICAgZ290byBvdXRlcnI7Ci0gICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJPVVRQVVQg S1ZFUkIiLCIiLDApOyAvKiBTZW5kIGEgS1ZFUkIgKi8KLSAgICAgICAgICAgICAgIHsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBIYXZlIEsgdmVyYj8gKi8KLSAgICAgICAgICAgICAgICAgICBp ZiAoISpzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgIH0KLS8qCi0gIFdlIGFzc3VtZSB0aGF0IHRoZSB2ZXJiIG5hbWUgaXMge2JyYWNlZH0sIG9y IGl0IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUKLSAgc3RyaW5nLCBzLCBvciBpdCBlbmRzIHdp dGggYSBzcGFjZSwgY29udHJvbCBjaGFyYWN0ZXIsIG9yIGJhY2tzbGFzaC4KLSovCi0gICAgICAg ICAgICAgICAgICAgcCA9IGtidWY7ICAgICAgICAgICAgLyogQ29weSB2ZXJiIG5hbWUgaW50byBs b2NhbCBidWZmZXIgKi8KLSAgICAgICAgICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgICAgICAg ICAgICB3aGlsZSAoKHgrKyA8IEtfQlVGTEVOKSAmJiAoKnMgPiBTUCkgJiYgKCpzICE9IENNRFEp KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIGlmIChicmFjZSAmJiAqcyA9PSAnfScpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAqcysrOwotICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICBpZiAoKnMgJiYgIWJyYWNlKSAgICAvKiBJZiB3ZSBicm9r ZSBiZWNhdXNlIG9mIFwsIGV0YywgKi8KLSAgICAgICAgICAgICAgICAgICAgIHMtLTsgICAgICAg ICAgICAgICAvKiAgYmFjayB1cCBzbyB3ZSBnZXQgYW5vdGhlciBsb29rLiAqLwotICAgICAgICAg ICAgICAgICAgIGJyYWNlID0gMDsKLSAgICAgICAgICAgICAgICAgICAqcCA9IE5VTDsgICAgICAg ICAgICAvKiBUZXJtaW5hdGUuICovCi0gICAgICAgICAgICAgICAgICAgcCA9IGtidWY7ICAgICAg ICAgICAgLyogUG9pbnQgYmFjayB0byBiZWdpbm5pbmcgKi8KLSAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJkb291dHB1dCBrdmVyYiIscCwwKTsKLSAgICAgICAgICAgICAgICAgICB5ID0g eGxvb2t1cChrdmVyYnMscCxua3ZlcmJzLCZ4KTsgLyogTG9vayBpdCB1cCAqLwotICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsImRvb3V0cHV0IGxvb2t1cCIsMCx5KTsKLSAgICAgICAgICAg ICAgICAgICBpZiAoeSA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIGlmIChzZW5kbmR4 KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBkb291dHB1dChvc2VuZGJ1ZixjeCk7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kbmR4ID0gMDsKLSAgICAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICBkb2t2ZXJiKFZDTUQseSk7Ci0jaWZuZGVm IE5PU1BMCi0gICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgLyogSXMgaXQg YSBtYWNybz8gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgeSA9IG14bG9vayhtYWN0YWIscCxu bWFjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPiAtMSkgewotICAgICAgICAgICAg ICAgICAgICAgICAgICAgY21wdXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlt YWMgPSAxOyAgLyogRmxhZyBmb3Iga2V5IG1hY3JvIGFjdGl2ZSAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgICAga2V5bWFjeCA9IHk7IC8qIEtleSBtYWNybyBpbmRleCAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgICAga2V5ZGVmcHRyID0gczsgLyogV2hlcmUgdG8gcmVzdW1lIG5leHQg dGltZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZG9vdXRwdXQg bXhsb29rIixrZXlkZWZwdHIseSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIo MSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBjbXBvcCgpOwotICAgICAgICAgICAgICAg ICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBxdW90ZSA9IDA7Ci0gICAgICAgICAgICAgICBj b250aW51ZTsKLSAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLSAgICAg ICAgICAgICBpZiAob3V0ZXNjICYmICh4ID09ICduJyB8fCB4ID09ICdOJykpIHsgLyogXG4gb3Ig XE4gKi8KLSAgICAgICAgICAgICAgICAgaWYgKHh4b3V0KG9idWYsb2JuKSA8IDApIC8qIEZsdXNo IGJ1ZmZlciAqLwotICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0ZXJyOwotICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJPVVRQVVQgTlVMIiwiIiwwKTsgLyogU2VuZCBhIE5VTCAqLwotICAg ICAgICAgICAgICAgICBpZiAobG9jYWwpCi0gICAgICAgICAgICAgICAgICAgdHRvYyhOVUwpOwot ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgY29ub2MoTlVMKTsKLSAg ICAgICAgICAgICAgICAgcXVvdGUgPSAwOwotICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQot ICAgICAgICAgICAgIH0gZWxzZSBpZiAob3V0ZXNjICYmICh4ID09ICdiJyB8fCB4ID09ICdCJykp IHsgLyogXGIgb3IgXEIgKi8KLQotICAgICAgICAgICAgICAgIGlmICh4eG91dChvYnVmLG9ibikg PCAwKSAvKiBGbHVzaCBidWZmZXIgZmlyc3QgKi8KLSAgICAgICAgICAgICAgICAgIGdvdG8gb3V0 ZXJyOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIk9VVFBVVCBCUkVBSyIsIiIsMCk7Ci0j aWZuZGVmIE5PTE9DQUwKLSAgICAgICAgICAgICAgICB0dHNuZGIoKTsgICAgICAgICAgICAgICAv KiBTZW5kIEJSRUFLIHNpZ25hbCAqLwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgaWYgKGxvY2Fs KQotICAgICAgICAgICAgICAgICAgIHR0b2MoTlVMKTsKLSAgICAgICAgICAgICAgICAgZWxzZQot ICAgICAgICAgICAgICAgICAgIGNvbm9jKE5VTCk7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAg ICAgICAgICAgICAgIHF1b3RlID0gMDsgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIHF1b3RlIGZs YWcgKi8KLSAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAvKiBhbmQgbm90 IHRoZSBiIG9yIEIgKi8KLSNpZmRlZiBDS19MQlJLCi0gICAgICAgICAgICAgfSBlbHNlIGlmIChv dXRlc2MgJiYgKHggPT0gJ2wnIHx8IHggPT0gJ0wnKSkgeyAvKiBcbCBvciBcTCAqLwotICAgICAg ICAgICAgICAgICBpZiAoeHhvdXQob2J1ZixvYm4pIDwgMCkgLyogRmx1c2ggYnVmZmVyIGZpcnN0 ICovCi0gICAgICAgICAgICAgICAgICAgZ290byBvdXRlcnI7Ci0gICAgICAgICAgICAgICAgIGRl YnVnKEYxMDAsIk9VVFBVVCBMb25nIEJSRUFLIiwiIiwwKTsKLSNpZm5kZWYgTk9MT0NBTAotICAg ICAgICAgICAgICAgICB0dHNuZGxiKCk7ICAgICAgICAgICAgIC8qIFNlbmQgTG9uZyBCUkVBSyBz aWduYWwgKi8KLSNlbHNlCi0gICAgICAgICAgICAgICAgIGlmIChsb2NhbCkKLSAgICAgICAgICAg ICAgICAgICB0dG9jKE5VTCk7Ci0gICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg ICAgICBjb25vYyhOVUwpOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICAgICAgICAgICAgICAg cXVvdGUgPSAwOyAgICAgICAgICAgICAvKiBUdXJuIG9mZiBxdW90ZSBmbGFnICovCi0gICAgICAg ICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgLyogYW5kIG5vdCB0aGUgbCBvciBMICov Ci0jZW5kaWYgLyogQ0tfTEJSSyAqLwotCi0gICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IENN RFEpIHsgICAgLyogQmFja3NsYXNoIGl0c2VsZiAqLwotICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAwLCJPVVRQVVQgQ01EUSIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgIHh4ID0gb2JvYyhkb3Bh cihDTURRKSk7IC8qIE91dHB1dCB0aGUgYmFja3NsYXNoLiAqLwotICAgICAgICAgICAgICAgICBp ZiAoeHggPCAwKQotICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0ZXJyOwotICAgICAgICAgICAg ICAgICBxdW90ZSA9IDA7Ci0gICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgLyogaWYgXCBub3QgZm9sbG93ZWQgYnkgc3Bl Y2lhbCBlc2MgKi8KLSAgICAgICAgICAgICAgICAvKiBOb3RlOiBBdGFyaSBTVCBjb21waWxlciB3 b24ndCBhbGxvdyBtYWNybyBjYWxsIGluICJpZiAoKSIgKi8KLSAgICAgICAgICAgICAgICAgeHgg PSBvYm9jKGRvcGFyKENNRFEpKTsgLyogT3V0cHV0IHRoZSBiYWNrc2xhc2guICovCi0gICAgICAg ICAgICAgICAgIGlmICh4eCA8IDApCi0gICAgICAgICAgICAgICAgICAgZ290byBvdXRlcnI7Ci0g ICAgICAgICAgICAgICAgIHF1b3RlID0gMDsgICAgICAgICAgICAgLyogVHVybiBvZmYgcXVvdGUg ZmxhZyAqLwotICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh4ID09IENNRFEpIHsg ICAgICAgICAvKiBUaGlzIGlzIHRoZSBxdW90ZSBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgIHF1 b3RlID0gMTsgICAgICAgICAgICAgICAgICAvKiBHbyBiYWNrIGFuZCBnZXQgbmV4dCBjaGFyYWN0 ZXIgKi8KLSAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAvKiB3aGljaCBp cyBxdW90ZWQgKi8KLSAgICAgICAgfQotICAgICAgICB4eCA9IG9ib2MoZG9wYXIoKGNoYXIpeCkp OyAgICAgIC8qIE91dHB1dCB0aGlzIGNoYXJhY3RlciAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJk b291dHB1dCIsb2J1ZixvYm4pOwotICAgICAgICBpZiAoeHggPCAwKQotICAgICAgICAgIGdvdG8g b3V0ZXJyOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgaWYgKHNlc2xvZyAmJiBkdXBsZXgpIHsg ICAgICAgICAvKiBMb2cgdGhlIGNoYXJhY3RlciBpZiBsb2cgaXMgb24gKi8KLSAgICAgICAgICAg IGxvZ2NoYXIoKGNoYXIpeCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg ICAgIGlmICh4ID09ICdcMDE1JykgeyAgICAgICAgICAgICAgLyogU3RyaW5nIGNvbnRhaW5zIGNh cnJpYWdlIHJldHVybiAqLwotICAgICAgICAgICAgaW50IHN0dWZmID0gLTEsIHN0dWZmMiA9IC0x OwotICAgICAgICAgICAgaWYgKHRubG0pIHsgICAgICAgICAgICAgICAgIC8qIFRFUk1JTkFMIE5F V0xJTkUgT04gKi8KLSAgICAgICAgICAgICAgICBzdHVmZiA9IExGOyAgICAgICAgICAgICAvKiBT dHVmZiBMRiAqLwotICAgICAgICAgICAgfQotI2lmZGVmIFROQ09ERQotICAgICAgICAgICAgLyog VEVMTkVUIE5FV0xJTkUgT04vT0ZGL1JBVyAqLwotICAgICAgICAgICAgaWYgKGlzX3RuKSB7Ci0g ICAgICAgICAgICAgICAgc3dpdGNoIChURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkgPyAvKiBOVlQg b3IgQklOQVJZICovCi0gICAgICAgICAgICAgICAgICAgICAgICB0bl9iX25sbSA6Ci0gICAgICAg ICAgICAgICAgICAgICAgICB0bl9ubG0KLSAgICAgICAgICAgICAgICAgICAgICAgICkgewotICAg ICAgICAgICAgICAgICAgY2FzZSBUTkxfQ1I6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgY2FzZSBUTkxfQ1JOVUw6Ci0gICAgICAgICAgICAgICAgICAgIHN0 dWZmMiA9IHN0dWZmOwotICAgICAgICAgICAgICAgICAgICBzdHVmZiAgPSBOVUw7Ci0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBUTkxfQ1JMRjoKLSAg ICAgICAgICAgICAgICAgICAgc3R1ZmYyID0gc3R1ZmY7Ci0gICAgICAgICAgICAgICAgICAgIHN0 dWZmID0gTEY7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICAgICAgICAgIGlmIChzdHVm ZiA+IC0xKSB7ICAgICAgICAgICAvKiBTdHVmZmluZyBhbm90aGVyIGNoYXJhY3Rlci4uLiAqLwot ICAgICAgICAgICAgICAgIHh4ID0gb2JvYyhkb3BhcigoQ0hBUilzdHVmZikpOwotICAgICAgICAg ICAgICAgIGlmICh4eCA8IDApCi0gICAgICAgICAgICAgICAgICBnb3RvIG91dGVycjsKLSNpZmRl ZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgaWYgKHNlc2xvZyAmJiBkdXBsZXgpIHsgLyogTG9n IHN0dWZmZWQgY2hhciBpZiBhcHByb3ByaWF0ZSAqLwotICAgICAgICAgICAgICAgICAgICBsb2dj aGFyKChjaGFyKXN0dWZmKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0dWZmMiA+IC0xKSB7ICAgICAgICAg IC8qIFN0dWZmaW5nIGFub3RoZXIgY2hhcmFjdGVyLi4uICovCi0gICAgICAgICAgICAgICAgeHgg PSBvYm9jKGRvcGFyKChDSEFSKXN0dWZmMikpOwotICAgICAgICAgICAgICAgIGlmICh4eCA8IDAp Ci0gICAgICAgICAgICAgICAgICBnb3RvIG91dGVycjsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAg ICAgICAgICAgaWYgKHNlc2xvZyAmJiBkdXBsZXgpIHsgLyogTG9nIHN0dWZmZWQgY2hhciBpZiBh cHByb3ByaWF0ZSAqLwotICAgICAgICAgICAgICAgICAgICBsb2djaGFyKChjaGFyKXN0dWZmMik7 Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGlmICh4eG91dChvYnVmLG9ibikgPCAwKSAgICAvKiBGbHVzaGluZyBpcyBy ZXF1aXJlZCBoZXJlISAqLwotICAgICAgICAgICAgICBnb3RvIG91dGVycjsKLSAgICAgICAgfQot ICAgIH0KLSAgICBpZiAoY3ggPT0gWFhMTk9VVCkgewotICAgICAgICBzID0gIlwwMTUiOwotICAg ICAgICBjeCA9IDA7Ci0gICAgICAgIGdvdG8gb3V0YWdhaW47Ci0gICAgfQotICAgIGlmIChxdW90 ZSA9PSAxKSAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmluZyBlbmRlZCB3aXRoIGJhY2tzbGFz aCAqLwotICAgICAgeHggPSBvYm9jKGRvcGFyKENNRFEpKTsKLQotICAgIGlmIChvYm4gPiAwKSAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE9VVFBVVCBkb25lICovCi0gICAgICBpZiAoeHhvdXQo b2J1ZixvYm4pIDwgMCkgICAgICAgICAgLyogRmx1c2ggdGhlIGJ1ZmZlciBpZiBuZWNlc3Nhcnku ICovCi0gICAgICAgIGdvdG8gb3V0ZXJyOwotICAgIHJldHVybigxKTsKLQotb3V0ZXJyOiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9VVFBVVCBjb21tYW5kIGVycm9yIGhhbmRs ZXIgKi8KLSAgICBpZiAobXNnZmxnKSBwcmludGYoIj9PVVRQVVQgZXhlY3V0aW9uIGVycm9yXG4i KTsKLSAgICByZXR1cm4oMCk7Ci0KLS8qIFJlbW92ZSAibG9jYWwiIE9VVFBVVCBtYWNybyBkZWZp bmluaXRpb25zICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBObyBtb3JlIG1hY3JvcyAuLi4gKi8K LSN1bmRlZiBvYm9jCi0jdW5kZWYgb2JmbHMKLSNlbmRpZiAvKiBDT01NRU5UICovCi19Ci0jZW5k aWYgLyogTk9TUEwgKi8KLQotLyogRGlzcGxheSB2ZXJzaW9uIGhlcmFsZCBhbmQgaW5pdGlhbCBw cm9tcHQgKi8KLQotVk9JRAotaGVyYWxkKCkgewotICAgIGludCB4ID0gMCwgaTsKLSAgICBleHRl cm4gaW50IHNydmNkbXNnOwotICAgIGV4dGVybiBjaGFyICogY2Rtc2dmaWxlW107Ci0gICAgY2hh ciAqIHNzbDsKLSAgICBjaGFyICoga3JiNDsKLSAgICBjaGFyICoga3JiNTsKLQotI2lmbmRlZiBO T0NNREwKLSAgICBleHRlcm4gY2hhciAqIGJhbm5lcmZpbGU7Ci0gICAgZGVidWcoRjExMCwiaGVy YWxkIGJhbm5lcmZpbGUiLGJhbm5lcmZpbGUsMCk7Ci0gICAgaWYgKGJhbm5lcmZpbGUpIHsKLSAg ICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsKLSAgICAgICAgaWYgKGRvdHlwZShiYW5uZXJmaWxl LDEsMCwwLE5VTEwsMCxOVUxMLDAsMCxOVUxMLDApID4gMCkgewotICAgICAgICAgICAgZGVidWco RjExMSwiaGVyYWxkIiwic3J2Y2Rtc2ciLHNydmNkbXNnKTsKLSAgICAgICAgICAgIGlmIChzcnZj ZG1zZykgewotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLSAgICAg ICAgICAgICAgICAgICAgZGVidWcoRjExMSwiaGVyYWxkIGNkbXNnZmlsZVtpXSIsY2Rtc2dmaWxl W2ldLGkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoemNoa2koY2Rtc2dmaWxlW2ldKSA+IC0x KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBkb3R5cGUoY2Rtc2dmaWxlW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHhhc2ttb3JlLDAsMCxOVUxMLDAsTlVMTCwwLDAsTlVMTCwwKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg fQotI2VuZGlmIC8qIE5PQ01ETCAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgIC8qIFRoZSBmb2xs b3dpbmcgZ2VuZXJhdGVzIGJhZCBjb2RlIGluIFNDTyBjb21waWxlcnMuICovCi0gICAgLyogT2Jz ZXJ2ZWQgaW4gYm90aCBPU1I1IGFuZCBVbml4d2FyZSAyIC0tIGFmdGVyIGV4ZWN1dGluZyB0aGlz ICovCi0gICAgLyogc3RhdGVtZW50IHdoZW4gYWxsIGNvbmRpdGlvbnMgYXJlIGZhbHNlLCB4IGhh cyBhIHZhbHVlIG9mIC0zMi4gKi8KLSAgICBpZiAobm9oZXJhbGQgfHwgcXVpZXQgfHwgYmdzZXQg PiAwIHx8IChiZ3NldCAhPSAwICYmIGJhY2tncmQgIT0gMCkpCi0gICAgICB4ID0gMTsKLSNlbHNl Ci0gICAgeCA9IDA7Ci0gICAgaWYgKG5vaGVyYWxkIHx8IHF1aWV0KQotICAgICAgeCA9IDE7Ci0g ICAgZWxzZSBpZiAoYmdzZXQgPiAwKQotICAgICAgeCA9IDE7Ci0gICAgZWxzZSBpZiAoYmdzZXQg PCAwICYmIGJhY2tncmQgPiAwKQotICAgICAgeCA9IDE7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot Ci0gICAgc3NsID0gIiI7Ci0gICAga3JiNCA9ICIiOwotICAgIGtyYjUgPSAiIjsKLSNpZmRlZiBD S19BVVRIRU5USUNBVElPTgotI2lmZGVmIENLX1NTTCAgICAKLSAgICBzc2wgPSAiK1NTTCI7Ci0j ZW5kaWYJLyogQ0tfU1NMICovCi0jaWZkZWYgS1JCNAotICAgIGtyYjQgPSAiK0tSQjQiOwotI2Vu ZGlmCS8qIEtSQjQgKi8KLSNpZmRlZiBLUkI1Ci0gICAga3JiNSA9ICIrS1JCNSI7Ci0jZW5kaWYJ LyogS1JCNSAqLwotI2VuZGlmCS8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0KLSAgICBpZiAoeCA9 PSAwKSB7Ci0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICAgICAgcHJpbnRmKCIlcywgZm9yJXNcbiIs dmVyc2lvLGNreHN5cyk7Ci0jZWxzZQotI2lmZGVmIE9TSwotICAgICAgICBwcmludGYoIiVzLCBm b3Ilc1xuIix2ZXJzaW8sY2t4c3lzKTsKLSNlbHNlCi0jaWZkZWYgQ0tfNjRCSVQKLSAgICAgICAg cHJpbnRmKCIlcywgZm9yJXMlcyVzJXMgKDY0LWJpdClcblxyIix2ZXJzaW8sY2t4c3lzLHNzbCxr cmI0LGtyYjUpOwotI2Vsc2UKLSAgICAgICAgcHJpbnRmKCIlcywgZm9yJXMlcyVzJXNcblxyIix2 ZXJzaW8sY2t4c3lzLHNzbCxrcmI0LGtyYjUpOwotI2VuZGlmLyogQ0tfNjRCSVQgKi8KLSNlbmRp ZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotICAgICAgICBwcmludGYoIiBD b3B5cmlnaHQgKEMpIDE5ODUsICVzLFxuIiwgY2tfY3J5ZWFyKTsKLSAgICAgICAgcHJpbnRmKCIg IFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsu XG4iKTsKLSNpZmRlZiBPUzIKLSAgICAgICBzaG9yZWcoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQot ICAgICAgICBpZiAoIXF1aWV0ICYmICFiYWNrZ3JkKSB7Ci0jaWZkZWYgQ09NTUVOVAotLyogIkRl ZmF1bHQgZmlsZS10cmFuc2ZlciBtb2RlIGlzIEFVVE9NQVRJQyIgaXMgdXNlbGVzcyBpbmZvcm1h dGlvbi4uLiAqLwotICAgICAgICAgICAgY2hhciAqIHM7Ci0gICAgICAgICAgICBleHRlcm4gaW50 IHhmZXJtb2RlOwotI2lmZGVmIFZNUwotICAgICAgICAgICAgcyA9ICJBVVRPTUFUSUMiOwotI2Vs c2UKLSAgICAgICAgICAgIGlmICh4ZmVybW9kZSA9PSBYTU9ERV9BKSB7Ci0gICAgICAgICAgICAg ICAgcyA9ICJBVVRPTUFUSUMiOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg ICBzID0gZ2Ztb2RlKGJpbmFyeSwxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgh cykgcyA9ICIiOwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICAgICAgaWYgKCpzKQotICAgICAg ICAgICAgICBwcmludGYoIkRlZmF1bHQgZmlsZS10cmFuc2ZlciBtb2RlIGlzICVzXG4iLCBzKTsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImhlcmFsZCIs InNydmNkbXNnIixzcnZjZG1zZyk7Ci0gICAgICAgICAgICBpZiAoc3J2Y2Rtc2cpIHsKLSAgICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsImhlcmFsZCBjZG1zZ2ZpbGVbaV0iLGNkbXNnZmlsZVtpXSxpKTsKLSAgICAg ICAgICAgICAgICAgICAgaWYgKHpjaGtpKGNkbXNnZmlsZVtpXSkgPiAtMSkgewotICAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZG90 eXBlKGNkbXNnZmlsZVtpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YXNrbW9y ZSwwLDAsTlVMTCwwLE5VTEwsMCwwLE5VTEwsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIHByaW50ZigiVHlwZSA/IG9yIEhFTFAgZm9yIGhlbHAuXG4iKTsK LSAgICAgICAgfQotICAgIH0KLX0KLQotLyogIEcgRiBNIE8gRCBFICAtLSAgR2V0IEZpbGUgKHRy YW5zZmVyKSBNb2RlICAqLwotCi1jaGFyICoKLWdmbW9kZShiaW5hcnksdXBjYXNlKSBpbnQgYmlu YXJ5LCB1cGNhc2U7IHsKLSAgICBjaGFyICogczsKLSAgICBzd2l0Y2ggKGJpbmFyeSkgewotICAg ICAgY2FzZSBYWUZUX1Q6IHMgPSB1cGNhc2UgPyAiVEVYVCIgOiAidGV4dCI7IGJyZWFrOwotI2lm ZGVmIFZNUwotICAgICAgY2FzZSBYWUZUX0I6IHMgPSB1cGNhc2UgPyAiQklOQVJZIEZJWEVEIiA6 ICJiaW5hcnkgZml4ZWQiOyBicmVhazsKLSAgICAgIGNhc2UgWFlGVF9JOiBzID0gdXBjYXNlID8g IklNQUdFIiA6ICJpbWFnZSI7IGJyZWFrOwotICAgICAgY2FzZSBYWUZUX0w6IHMgPSB1cGNhc2Ug PyAiTEFCRUxFRCIgOiAibGFiZWxlZCI7IGJyZWFrOwotICAgICAgY2FzZSBYWUZUX1U6IHMgPSB1 cGNhc2UgPyAiQklOQVJZIFVOREVGIiA6ICJiaW5hcnkgdW5kZWYiOyBicmVhazsKLSNlbHNlCi0j aWZkZWYgTUFDCi0gICAgICBjYXNlIFhZRlRfQjogcyA9IHVwY2FzZSA/ICJCSU5BUlkiIDogImJp bmFyeSI7IGJyZWFrOwotICAgICAgY2FzZSBYWUZUX006IHMgPSB1cGNhc2UgPyAiTUFDQklOQVJZ IiA6ICJtYWNiaW5hcnkiOyBicmVhazsKLSNlbHNlCi0gICAgICBjYXNlIFhZRlRfQjogcyA9IHVw Y2FzZSA/ICJCSU5BUlkiIDogImJpbmFyeSI7IGJyZWFrOwotI2lmZGVmIENLX0xBQkVMRUQKLSAg ICAgIGNhc2UgWFlGVF9MOiBzID0gdXBjYXNlID8gIkxBQkVMRUQiIDogImxhYmVsZWQiOyBicmVh azsKLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyog Vk1TICovCi0gICAgICBjYXNlIFhZRlRfWDogcyA9IHVwY2FzZSA/ICJURU5FWCIgOiAidGVuZXgi OyBicmVhazsKLSAgICAgIGRlZmF1bHQ6IHMgPSAiIjsKLSAgICB9Ci0gICAgcmV0dXJuKHMpOwot fQotCi0jaWZuZGVmIE5PU1BMCi1zdGF0aWMgaW50Ci1pc2FhKHMpIGNoYXIgKiBzOyB7ICAgICAg ICAgICAgICAgICAgICAgLyogSXMgYXNzb2NpYXRpdmUgYXJyYXkgKi8KLSAgICBjaGFyIGM7Ci0g ICAgaW50IHg7Ci0gICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgaWYgKCEqcykgcmV0dXJuKDApOwot ICAgIHMrKzsKLSAgICB3aGlsZSAoKGMgPSAqcysrKSkgewotICAgICAgICBpZiAoYyA9PSAnPCcp IHsKLSAgICAgICAgICAgIHggPSBzdHJsZW4ocyk7Ci0gICAgICAgICAgICByZXR1cm4gKCgqKHMr eC0xKSA9PSAnPicpID8gMSA6IDApOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybigwKTsK LX0KLQotLyogIE0gTCBPIE8gSyAgLS0gIExvb2t1cCB0aGUgbWFjcm8gbmFtZSBpbiB0aGUgbWFj cm8gdGFibGUgICovCi0KLS8qCi0gIENhbGwgdGhpcyB3YXk6ICB2ID0gbWxvb2sodGFibGUsd29y ZCxuKTsKLQotICAgIHRhYmxlIC0gYSAnc3RydWN0IG10YWInIHRhYmxlLgotICAgIHdvcmQgIC0g dGhlIHRhcmdldCBzdHJpbmcgdG8gbG9vayB1cCBpbiB0aGUgdGFibGUuCi0gICAgbiAgICAgLSB0 aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB0YWJsZS4KLQotICBUaGUga2V5d29yZCB0YWJs ZSBtdXN0IGJlIGFycmFuZ2VkIGluIGFzY2VuZGluZyBhbHBoYWJldGljYWwgb3JkZXIsIGFuZAot ICBhbGwgbGV0dGVycyBtdXN0IGJlIGxvd2VyY2FzZS4KLQotICBSZXR1cm5zIHRoZSB0YWJsZSBp bmRleCwgMCBvciBncmVhdGVyLCBpZiB0aGUgbmFtZSB3YXMgZm91bmQsIG9yOgotCi0gICAtMyBp ZiBub3RoaW5nIHRvIGxvb2sgdXAgKHRhcmdldCB3YXMgbnVsbCksCi0gICAtMiBpZiBhbWJpZ3Vv dXMsCi0gICAtMSBpZiBub3QgZm91bmQuCi0KLSAgQSBtYXRjaCBpcyBzdWNjZXNzZnVsIGlmIHRo ZSB0YXJnZXQgbWF0Y2hlcyBhIGtleXdvcmQgZXhhY3RseSwgb3IgaWYKLSAgdGhlIHRhcmdldCBp cyBhIHByZWZpeCBvZiBleGFjdGx5IG9uZSBrZXl3b3JkLiAgSXQgaXMgYW1iaWd1b3VzIGlmIHRo ZQotICB0YXJnZXQgbWF0Y2hlcyB0d28gb3IgbW9yZSBrZXl3b3JkcyBmcm9tIHRoZSB0YWJsZS4K LSovCi1pbnQKLW1sb29rKHRhYmxlLGNtZCxuKSBzdHJ1Y3QgbXRhYiB0YWJsZVtdOyBjaGFyICpj bWQ7IGludCBuOyB7Ci0gICAgcmVnaXN0ZXIgaW50IGk7Ci0gICAgaW50IHYsIHcsIGNtZGxlbiA9 IDA7Ci0gICAgY2hhciBjID0gMCwgYzEsICogczsKLSAgICBpZiAoIWNtZCkgY21kID0gIiI7Ci0K LSAgICBmb3IgKHMgPSBjbWQ7ICpzOyBzKyspIGNtZGxlbisrOyAgICAvKiAoaW5zdGVhZCBvZiBz dHJsZW4pICovCi0gICAgZGVidWcoRjExMSwiTUxPT0siLGNtZCxjbWRsZW4pOwotCi0gICAgYzEg PSAqY21kOwotICAgIGlmIChpc3VwcGVyKGMxKSkKLSAgICAgIGMxID0gdG9sb3dlcihjMSk7Ci0g ICAgaWYgKGNtZGxlbiA8IDEpCi0gICAgICByZXR1cm4oLTMpOwotCi0vKiBOb3QgbnVsbCwgbG9v ayBpdCB1cCAqLwotCi0gICAgaWYgKG4gPCAxMikgeyAgICAgICAgICAgICAgICAgICAgICAgLyog Tm90IHdvcnRoIGl0IGZvciBzbWFsbCB0YWJsZXMgKi8KLSAgICAgICAgaSA9IDA7Ci0gICAgfSBl bHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmluYXJ5IHNlYXJjaCBmb3Igd2hl cmUgdG8gc3RhcnQgKi8KLSAgICAgICAgaW50IGxvID0gMDsKLSAgICAgICAgaW50IGhpID0gbjsK LSAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgd2hpbGUgKGxvKzIgPCBoaSAmJiArK2Nv dW50IDwgMTIpIHsKLSAgICAgICAgICAgIGkgPSBsbyArICgoaGkgLSBsbykgLyAyKTsKLSAgICAg ICAgICAgIGMgPSAqKHRhYmxlW2ldLmt3ZCk7Ci0gICAgICAgICAgICBpZiAoaXN1cHBlcihjKSkg YyA9IHRvbG93ZXIoYyk7Ci0gICAgICAgICAgICBpZiAoYyA8IGMxKSB7Ci0gICAgICAgICAgICAg ICAgbG8gPSBpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBoaSA9IGk7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaSA9IChjIDwgYzEpID8gbG8rMSA6 IGxvOwotICAgIH0KLSAgICBmb3IgKCA7IGkgPCBuLTE7IGkrKykgewotICAgICAgICBzID0gdGFi bGVbaV0ua3dkOwotICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICAgICAgaWYgKCEqcykgY29u dGludWU7ICAgICAgICAgICAgICAvKiBFbXB0eSB0YWJsZSBlbnRyeSAqLwotICAgICAgICBjID0g KnM7Ci0gICAgICAgIGlmIChpc3VwcGVyKGMpKSBjID0gdG9sb3dlcihjKTsKLSAgICAgICAgaWYg KGMxICE9IGMpIGNvbnRpbnVlOyAgICAgICAgICAvKiBGaXJzdCBjaGFyIGRvZXNuJ3QgbWF0Y2gg Ki8KLSAgICAgICAgaWYgKCFja3N0cmNtcChzLGNtZCwtMSwwKSkgICAgICAvKiBIYXZlIGV4YWN0 IG1hdGNoPyAqLwotICAgICAgICAgIHJldHVybihpKTsKLSAgICAgICAgdiA9ICFja3N0cmNtcChz LGNtZCxjbWRsZW4sMCk7Ci0gICAgICAgIHcgPSBja3N0cmNtcCh0YWJsZVtpKzFdLmt3ZCxjbWQs Y21kbGVuLDApOwotICAgICAgICBpZiAodiAmJiB3KSAgICAgICAgICAgICAgICAgICAgIC8qIEhh dmUgYWJicmV2aWF0ZWQgbWF0Y2g/ICovCi0gICAgICAgICAgcmV0dXJuKGkpOwotICAgICAgICBp ZiAodikgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFtYmlndW91cz8gKi8KLSAgICAgICAg ICByZXR1cm4oLTIpOwotICAgICAgICBpZiAodyA+IDApICAgICAgICAgICAgICAgICAgICAgIC8q IFBhc3Qgb3VyIGFscGhhYmV0aWMgYXJlYT8gKi8KLSAgICAgICAgICByZXR1cm4oLTEpOwotICAg IH0KLQotLyogTGFzdCAob3Igb25seSkgZWxlbWVudCAqLwotCi0gICAgaWYgKCFja3N0cmNtcCh0 YWJsZVtuLTFdLmt3ZCxjbWQsY21kbGVuLDApKQotICAgICAgcmV0dXJuKG4tMSk7Ci0KLSAgICBy ZXR1cm4oLTEpOwotfQotCi0vKiBteGxvb2sgaXMgbGlrZSBtbG9vaywgYnV0IGFuIGV4YWN0IGZ1 bGwtbGVuZ3RoIG1hdGNoIGlzIHJlcXVpcmVkICovCi0KLWludAotbXhsb29rKHRhYmxlLGNtZCxu KSBjaGFyICpjbWQ7IHN0cnVjdCBtdGFiIHRhYmxlW107IGludCBuOyB7Ci0gICAgcmVnaXN0ZXIg aW50IGk7Ci0gICAgaW50IHcsIGNtZGxlbiA9IDAsIG9uZSA9IDA7Ci0gICAgcmVnaXN0ZXIgY2hh ciBjID0gMCwgYzEsICogczsKLQotICAgIGlmICghY21kKSBjbWQgPSAiIjsgICAgICAgICAgICAg ICAgIC8qIENoZWNrIGFyZ3MgKi8KLQotICAgIGZvciAocyA9IGNtZDsgKnM7IHMrKykgY21kbGVu Kys7ICAgIC8qIChpbnN0ZWFkIG9mIHN0cmxlbikgKi8KLSAgICBkZWJ1ZyhGMTExLCJNWExPT0si LGNtZCxjbWRsZW4pOwotCi0gICAgYzEgPSAqY21kOyAgICAgICAgICAgICAgICAgICAgICAgICAg LyogRmlyc3QgY2hhciBvZiBzdHJpbmcgdG8gbG9vayB1cCAqLwotICAgIGlmIChpc3VwcGVyKGMx KSkKLSAgICAgIGMxID0gdG9sb3dlcihjMSk7Ci0gICAgaWYgKCEqKGNtZCsxKSkgICAgICAgICAg ICAgICAgICAgICAgLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgMS1jaGFyIG5hbWVzICovCi0gICAg ICBvbmUgPSAxOwotCi0gICAgaWYgKGNtZGxlbiA8IDEpICAgICAgICAgICAgICAgICAgICAgLyog Tm90aGluZyB0byBsb29rIHVwICovCi0gICAgICByZXR1cm4oLTMpOwotCi0gICAgaWYgKG4gPCAx MikgeyAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IHdvcnRoIGl0IGZvciBzbWFsbCB0YWJs ZXMgKi8KLSAgICAgICAgaSA9IDA7Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQmluYXJ5IHNlYXJjaCBmb3Igd2hlcmUgdG8gc3RhcnQgKi8KLSAgICAgICAgaW50 IGxvID0gMDsKLSAgICAgICAgaW50IGhpID0gbjsKLSAgICAgICAgaW50IGNvdW50ID0gMDsKLSAg ICAgICAgd2hpbGUgKGxvKzIgPCBoaSAmJiArK2NvdW50IDwgMTIpIHsKLSAgICAgICAgICAgIGkg PSBsbyArICgoaGkgLSBsbykgLyAyKTsKLSAgICAgICAgICAgIGMgPSAqKHRhYmxlW2ldLmt3ZCk7 Ci0gICAgICAgICAgICBpZiAoaXN1cHBlcihjKSkgYyA9IHRvbG93ZXIoYyk7Ci0gICAgICAgICAg ICBpZiAoYyA8IGMxKSB7Ci0gICAgICAgICAgICAgICAgbG8gPSBpOwotICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICBoaSA9IGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSAgICAgICAgaSA9IChjIDwgYzEpID8gbG8rMSA6IGxvOwotICAgIH0KLSAgICBmb3IgKCA7IGkg PCBuOyBpKyspIHsgICAgICAgICAgICAgICAvKiBMb29rIHRocnUgdGFibGUgKi8KLSAgICAgICAg cyA9IHRhYmxlW2ldLmt3ZDsgICAgICAgICAgICAgICAvKiBUaGlzIGVudHJ5ICovCi0gICAgICAg IGlmICghcykgcyA9ICIiOwotICAgICAgICBpZiAoISpzKSBjb250aW51ZTsgICAgICAgICAgICAg IC8qIEVtcHR5IHRhYmxlIGVudHJ5ICovCi0gICAgICAgIGMgPSAqczsKLSAgICAgICAgaWYgKGlz dXBwZXIoYykpIGMgPSB0b2xvd2VyKGMpOwotICAgICAgICBpZiAoYzEgIT0gYykgY29udGludWU7 ICAgICAgICAgIC8qIEZpcnN0IGNoYXIgZG9lc24ndCBtYXRjaCAqLwotICAgICAgICBpZiAob25l KSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIE5hbWUgaXMgb25lIGNoYXIgbG9uZyAqLwotICAg ICAgICAgICAgaWYgKCEqKHMrMSkpCi0gICAgICAgICAgICAgIHJldHVybihpKTsgICAgICAgICAg ICAgICAgLyogU28gaXMgdGFibGUgZW50cnkgKi8KLSAgICAgICAgfQotI2lmZGVmIENPTU1FTlQK LSAgICAgICAgaWYgKCgoaW50KXN0cmxlbihzKSA9PSBjbWRsZW4pICYmCi0gICAgICAgICAgICAo IWNrc3RyY21wKHMsY21kLGNtZGxlbiwwKSkpIHJldHVybihpKTsKLSNlbHNlCi0gICAgICAgIHcg PSBja3N0cmNtcChzLGNtZCwtMSwwKTsKLSAgICAgICAgaWYgKCF3KSByZXR1cm4oaSk7Ci0gICAg ICAgIGlmICh3ID4gMCkgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQot ICAgIHJldHVybigtMSk7Ci19Ci0KLS8qIG14eGxvb2sgaXMgbGlrZSBteGxvb2ssIGJ1dCBjYXNl LXNlbnNpdGl2ZSAqLwotCi1pbnQKLW14eGxvb2sodGFibGUsY21kLG4pIGNoYXIgKmNtZDsgc3Ry dWN0IG10YWIgdGFibGVbXTsgaW50IG47IHsKLSAgICBpbnQgaSwgY21kbGVuOwotICAgIGlmICgh Y21kKSBjbWQgPSAiIjsKLSAgICBpZiAoKChjbWRsZW4gPSBzdHJsZW4oY21kKSkgPCAxKSB8fCAo biA8IDEpKSByZXR1cm4oLTMpOwotICAgIC8qIGRlYnVnKEYxMTEsIm14eGxvb2sgdGFyZ2V0Iixj bWQsbik7ICovCi0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBpZiAoKChp bnQpc3RybGVuKHRhYmxlW2ldLmt3ZCkgPT0gY21kbGVuKSAmJgotICAgICAgICAgICAgKCFzdHJu Y21wKHRhYmxlW2ldLmt3ZCxjbWQsY21kbGVuKSkpCi0gICAgICAgICAgcmV0dXJuKGkpOwotICAg IH0KLSAgICByZXR1cm4oLTEpOwotfQotCi1zdGF0aWMgaW50Ci10cmFjZXZhbChuYW0sIHZhbCkg Y2hhciAqIG5hbSwgKiB2YWw7IHsgLyogRm9yIFRSQUNFIGNvbW1hbmQgKi8KLSAgICBpZiAodmFs KQotICAgICAgcHJpbnRmKCI+Pj4gJXM6IFwiJXNcIlxuIiwgbmFtLCB2YWwpOwotICAgIGVsc2UK LSAgICAgIHByaW50ZigiPj4+ICVzOiAodW5kZWYpXG4iLCBuYW0pOwotICAgIHJldHVybigwKTsK LX0KLQotI2lmZGVmIFVTRV9WQVJMRU4gICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCB1c2Vk ICovCi0KLS8qICBWIEEgUiBMIEUgTiAgLS0gIEdldCBsZW5ndGggb2YgdmFyaWFibGUncyB2YWx1 ZS4KLQotICBHaXZlbiBhIHZhcmlhYmxlIG5hbWUsIHJldHVybiB0aGUgbGVuZ3RoIG9mIGl0cyBk ZWZpbml0aW9uIG9yIDAgaWYgdGhlCi0gIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkLiAgSWYgaXQg aXMgZGVmaW5lZCwgc2V0IGFyZ3VtZW50IHMgdG8gcG9pbnQgdG8gaXRzCi0gIGRlZmluaXRpb24u ICBPdGhlcndpc2Ugc2V0IHMgdG8gTlVMTC4KLSovCi1pbnQKLXZhcmxlbihuYW0scykgY2hhciAq bmFtOyBjaGFyICoqczsgeyAgICAvKiBMZW5ndGggb2YgdmFsdWUgb2YgdmFyaWFibGUgKi8KLSAg ICBpbnQgeCwgejsKLSAgICBjaGFyICpwID0gTlVMTCwgYzsKLQotICAgICpzID0gTlVMTDsKLSAg ICBpZiAoIW5hbSkgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAvKiBXYXRjaCBvdXQgZm9yIG51 bGwgcG9pbnRlciAqLwotICAgIGlmICgqbmFtID09IENNRFEpIHsKLSAgICAgICAgbmFtKys7Ci0g ICAgICAgIGlmICgqbmFtID09ICclJykgeyAgICAgICAgICAgICAgLyogSWYgaXQncyBhIHZhcmlh YmxlIG5hbWUgKi8KLSAgICAgICAgICAgIGlmICghKGMgPSAqKG5hbSsxKSkpIHJldHVybigwKTsg LyogR2V0IGxldHRlciBvciBkaWdpdCAqLwotICAgICAgICAgICAgcCA9IChjaGFyICopMDsgICAg ICAgICAgICAgIC8qIEluaXRpYWxpemUgdmFsdWUgcG9pbnRlciAqLwotICAgICAgICAgICAgaWYg KG1hY2x2bCA+IC0xICYmIGMgPj0gJzAnICYmIGMgPD0gJzknKSB7IC8qIERpZ2l0PyAqLwotICAg ICAgICAgICAgICAgIHAgPSBtX2FyZ1ttYWNsdmxdW2MgLSAnMCddOyAvKiBQb2ludGVyIGZyb20g bWFjcm8tYXJnIHRhYmxlICovCi0gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg ICAgLyogSXQncyBhIGdsb2JhbCB2YXJpYWJsZSAqLwotICAgICAgICAgICAgICAgIGlmIChjIDwg MzMgfHwgYyA+IEdWQVJTKSByZXR1cm4oMCk7Ci0gICAgICAgICAgICAgICAgcCA9IGdfdmFyW2Nd OyAgICAgICAgICAgLyogR2V0IHBvaW50ZXIgZnJvbSBnbG9iYWwtdmFyIHRhYmxlICovCi0gICAg ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKm5hbSA9PSAnJicpIHsgICAgICAgICAgICAg ICAvKiBBbiBhcnJheSByZWZlcmVuY2U/ICovCi0gICAgICAgICAgICBjaGFyICoqcTsKLSAgICAg ICAgICAgIGlmIChhcnJheW5hbShuYW0sJngsJnopIDwgMCkgLyogSWYgc3ludGF4IGlzIGJhZCAq LwotICAgICAgICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgIC8qIHJldHVybiAtMS4g Ki8KLSAgICAgICAgICAgIHggLT0gQVJSQVlCQVNFOyAgICAgICAgICAgICAvKiBDb252ZXJ0IG5h bWUgdG8gbnVtYmVyLiAqLwotICAgICAgICAgICAgaWYgKChxID0gYV9wdHJbeF0pID09IE5VTEwp IC8qIElmIGFycmF5IG5vdCBkZWNsYXJlZCwgKi8KLSAgICAgICAgICAgICAgcmV0dXJuKDApOyAg ICAgICAgICAgICAgICAvKiByZXR1cm4gLTIuICovCi0gICAgICAgICAgICBpZiAoeiA+IGFfZGlt W3hdKSAgICAgICAgICAgLyogSWYgc3Vic2NyaXB0IG91dCBvZiByYW5nZSwgKi8KLSAgICAgICAg ICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAvKiByZXR1cm4gLTMuICovCi0gICAgICAg ICAgICBwID0gcVt6XTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE1hY3JvICovCi0gICAgICAgIHogPSBpc2FhKG5hbSk7Ci0gICAgICAgIHgg PSB6ID8gbXh4bG9vayhtYWN0YWIsbmFtLG5tYWMpIDogbWxvb2sobWFjdGFiLG5hbSxubWFjKTsK LSAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgcCA9IG1h Y3RhYlt4XS5tdmFsOwotICAgIH0KLSAgICBpZiAocCkKLSAgICAgICpzID0gcDsKLSAgICBlbHNl Ci0gICAgICBwID0gIiI7Ci0gICAgcmV0dXJuKChpbnQpc3RybGVuKHApKTsKLX0KLSNlbmRpZiAv KiBVU0VfVkFSTEVOICovCi0KLS8qCi0gIFRoaXMgcm91dGluZSBpcyBmb3IgdGhlIGJlbmVmaXQg b2YgdGhvc2UgY29tcGlsZXJzIHRoYXQgY2FuJ3QgaGFuZGxlCi0gIGxvbmcgc3RyaW5nIGNvbnN0 YW50cyBvciBjb250aW51ZWQgbGluZXMgd2l0aGluIHRoZW0uICBMb25nIHByZWRlZmluZWQKLSAg bWFjcm9zIGxpa2UgRk9SLCBXSElMRSwgYW5kIFhJRiBoYXZlIHRoZWlyIGNvbnRlbnRzIGJyb2tl biB1cCBpbnRvCi0gIGFycmF5cyBvZiBzdHJpbmcgcG9pbnRlcnMuICBUaGlzIHJvdXRpbmUgY29u Y2F0ZW5hdGVzIHRoZW0gYmFjayBpbnRvIGEKLSAgc2luZ2xlIHN0cmluZyBhZ2FpbiwgYW5kIHRo ZW4gY2FsbHMgdGhlIHJlYWwgYWRkbWFjKCkgcm91dGluZSB0byBlbnRlcgotICB0aGUgZGVmaW5p dGlvbiBpbnRvIHRoZSBtYWNybyB0YWJsZS4KLSovCi1pbnQKLWFkZG1tYWMobmFtLHMpIGNoYXIg Km5hbSwgKnNbXTsgeyAgICAgICAvKiBBZGQgYSBtdWx0aWxpbmUgbWFjcm8gZGVmaW5pdGlvbiAq LwotICAgIGludCBpLCB4LCB5OyBjaGFyICpwOwotICAgIHggPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIExlbmd0aCBjb3VudGVyICovCi0gICAgZm9yIChpID0gMDsgKHkgPSAo aW50KXN0cmxlbihzW2ldKSkgPiAwOyBpKyspIHsgLyogQWRkIHVwIHRvdGFsIGxlbmd0aCAqLwot ICAgICAgICBkZWJ1ZyhGMTExLCJhZGRtbWFjIGxpbmUiLHNbaV0seSk7Ci0gICAgICAgIHggKz0g eTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiYWRkbW1hYyBsaW5lcyIsIiIsaSk7Ci0gICAgZGVi dWcoRjEwMSwiYWRkbW1hYyBsb29wIGV4aXQiLCIiLHkpOwotICAgIGRlYnVnKEYxMTEsImFkZG1t YWMgbGVuZ3RoIixuYW0seCk7Ci0gICAgaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCi0gICAgcCA9 IG1hbGxvYyh4KzEpOyAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIGFs bCBvZiBpdC4gKi8KLSAgICBpZiAoIXApIHsKLSAgICAgICAgcHJpbnRmKCI/YWRkbW1hYyBtYWxs b2MgZXJyb3I6ICVzXG4iLG5hbSk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImFkZG1tYWMgbWFsbG9j IGVycm9yIixuYW0sMCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgICpwID0gJ1ww JzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9mZiB3aXRoIG51bGwgc3RyaW5n LiAqLwotICAgIGZvciAoaSA9IDA7ICpzW2ldOyBpKyspICAgICAgICAgICAgIC8qIENvbmNhdGVu YXRlIHRoZW0gYWxsIHRvZ2V0aGVyLiAqLwotICAgICAgY2tzdHJuY2F0KHAsc1tpXSx4KzEpOwot ICAgIHkgPSAoaW50KXN0cmxlbihwKTsgICAgICAgICAgICAgICAgIC8qIEZpbmFsIHByZWNhdXRp b24uICovCi0gICAgZGVidWcoRjExMSwiYWRkbW1hYyBjb25zdHJ1Y3RlZCBzdHJpbmciLHAseSk7 Ci0gICAgaWYgKHkgPT0geCkgewotICAgICAgICB5ID0gYWRkbWFjKG5hbSxwKTsgICAgICAgICAg ICAgIC8qIEFkZCByZXN1bHQgdG8gdGhlIG1hY3JvIHRhYmxlLiAqLwotICAgIH0gZWxzZSB7Ci0g ICAgICAgIGRlYnVnKEYxMDAsImFkZG1tYWMgbGVuZ3RoIG1pc21hdGNoIiwiIiwwKTsKLSAgICAg ICAgcHJpbnRmKCJcbiFhZGRtbWFjIGludGVybmFsIGVycm9yIVxuIik7Ci0gICAgICAgIHkgPSAt MTsKLSAgICB9Ci0gICAgZnJlZShwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnJl ZSB0aGUgdGVtcG9yYXJ5IGNvcHkuICovCi0gICAgcmV0dXJuKHkpOwotfQotCi0vKiBIZXJlIGlz IHRoZSByZWFsIGFkZG1hYyByb3V0aW5lLiAqLwotCi0vKiBSZXR1cm5zIC0xIG9uIGZhaWx1cmUs IG1hY3JvIHRhYmxlIGluZGV4ID49IDAgb24gc3VjY2Vzcy4gKi8KLQotaW50IG10Y2hhbmdlZCA9 IDA7Ci0KLWludAotYWRkbWFjKG5hbSxkZWYpIGNoYXIgKm5hbSwgKmRlZjsgeyAgICAgIC8qIEFk ZCBhIG1hY3JvIHRvIHRoZSBtYWNybyB0YWJsZSAqLwotICAgIGludCBpLCB4LCB5LCB6LCBuYW1s ZW4sIGRlZmxlbiwgZmxhZyA9IDA7Ci0gICAgaW50IHJlcGxhY2luZyA9IDAsIGRlbGV0aW5nID0g MDsKLSAgICBjaGFyICogcCA9IE5VTEwsIGMsICpzOwotICAgIGV4dGVybiBpbnQgdHJhX2FzZzsg aW50IHRyYV90bXA7Ci0KLSAgICBpZiAoIW5hbSkgcmV0dXJuKC0xKTsKLSAgICBpZiAoISpuYW0p IHJldHVybigtMSk7Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyICYmCi0jaWZkZWYg SUtTRENPTkYKLSAgICAgICAgaWtzZGNmCi0jZWxzZSAvKiBJS1NEQ09ORiAqLwotICAgICAgICAx Ci0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSAgICAgICAgKSB7Ci0gICAgICAgIGlmICghY2tzdHJj bXAoIm9uX2V4aXQiLG5hbSwtMSwwKSB8fAotICAgICAgICAgICAgIWNrc3RyY21wKCJvbl9sb2dv dXQiLG5hbSwtMSwwKSkKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSNlbmRpZiAvKiBJ S1NEICovCi0KLSAgICBuYW1sZW4gPSAwOwotICAgIHAgPSBuYW07Ci0gICAgd2hpbGUgKCpwKysp IG5hbWxlbisrOyAgICAgICAgICAgICAgLyogKGluc3RlYWQgb2Ygc3RybGVuKSAqLwotCi0gICAg dHJhX3RtcCA9IHRyYV9hc2c7ICAgICAgICAgICAgICAgICAgLyogdHJhY2UuLi4gKi8KLSAgICBk ZWJ1ZyhGMTExLCJhZGRtYWMgbmFtIixuYW0sbmFtbGVuKTsKLSAgICBpZiAoIWRlZikgeyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBXYXRjaCBvdXQgZm9yIG51bGwgcG9pbnRlciAqLwotICAg ICAgICBkZWZsZW4gPSAwOwotICAgICAgICBkZWJ1ZyhGMTExLCJhZGRtYWMgZGVmIiwiKG51bGwg cG9pbnRlcikiLGRlZmxlbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVmbGVuID0gMDsKLSAg ICAgICAgcCA9IGRlZjsKLSAgICAgICAgd2hpbGUgKCpwKyspIGRlZmxlbisrOyAgICAgICAgICAv KiAoaW5zdGVhZCBvZiBzdHJsZW4pICovCi0gICAgICAgIGRlYnVnKEYwMTAsImFkZG1hYyBkZWYi LGRlZiwwKTsKLSAgICB9Ci0jaWZkZWYgVVNFX1ZBUkxFTiAgICAgICAgICAgICAgICAgICAgICAg LyogTk9UIFVTRUQgKi8KLSAgICAvKiBUaGlzIGRvZXMgbm90IGJvb3N0IHBlcmZvcm1hbmNlIG11 Y2ggYmVjYXVzZSB2YXJsZW4oKSBkb2VzIGEgbG90ICovCi0gICAgeCA9IHZhcmxlbihuYW0sJnMp OwotICAgIGlmICh4ID4gMCAmJiB4ID49IGRlZmxlbikgewotICAgICAgICBzdHJjcHkocyxkZWYp OyAgICAgICAgICAgICAgICAgIC8qIE5PVCBVU0VEICovCi0gICAgICAgIGZsYWcgPSAxOwotICAg ICAgICBwID0gczsKLSAgICB9Ci0jZW5kaWYgLyogVVNFX1ZBUkxFTiAqLwotCi0gICAgaWYgKCpu YW0gPT0gQ01EUSkgbmFtKys7ICAgICAgICAgICAgLyogQmFja3NsYXNoIHF1b3RlPyAqLwotICAg IGlmICgqbmFtID09ICclJykgeyAgICAgICAgICAgICAgICAgIC8qIFllcywgaWYgaXQncyBhIHZh cmlhYmxlIG5hbWUsICovCi0gICAgICAgIGlmICghKGMgPSAqKG5hbSArIDEpKSkgcmV0dXJuKC0x KTsgLyogVmFyaWFibGUgbmFtZSBsZXR0ZXIgb3IgZGlnaXQgKi8KLSAgICAgICAgaWYgKCFmbGFn KSB7Ci0gICAgICAgICAgICB0cmFfYXNnID0gMDsKLSAgICAgICAgICAgIGRlbG1hYyhuYW0sMCk7 ICAgICAgICAgICAgICAvKiBEZWxldGUgYW55IG9sZCB2YWx1ZS4gKi8KLSAgICAgICAgICAgIHRy YV9hc2cgPSB0cmFfdG1wOwotICAgICAgICB9Ci0gICAgICAgIGlmIChkZWZsZW4gPCAxKSB7ICAg ICAgICAgICAgICAgLyogTnVsbCBkZWZpbml0aW9uICovCi0gICAgICAgICAgICBwID0gTlVMTDsg ICAgICAgICAgICAgICAgICAgLyogQmV0dGVyIG5vdCBtYWxsb2Mgb3Igc3RyY3B5ISAqLwotICAg ICAgICB9IGVsc2UgaWYgKCFmbGFnKSB7ICAgICAgICAgICAgIC8qIEEgc3Vic3RhbnRpYWwgZGVm aW5pdGlvbiAqLwotICAgICAgICAgICAgcCA9IG1hbGxvYyhkZWZsZW4gKyAxKTsgICAgIC8qIEFs bG9jYXRlIHNwYWNlIGZvciBpdCAqLwotICAgICAgICAgICAgaWYgKCFwKSB7Ci0gICAgICAgICAg ICAgICAgcHJpbnRmKCI/YWRkbWFjIG1hbGxvYyBlcnJvciAyXG4iKTsKLSAgICAgICAgICAgICAg ICByZXR1cm4oLTEpOwotICAgICAgICAgICAgfSBlbHNlIHN0cmNweShwLGRlZik7ICAgICAgIC8q IENvcHkgZGVmIGludG8gbmV3IHNwYWNlIChTQUZFKSAqLwotICAgICAgICB9Ci0KLSAgICAgICAg LyogTm93IHAgcG9pbnRzIHRvIHRoZSBkZWZpbml0aW9uLCBvciBpcyBhIG51bGwgcG9pbnRlciAq LwotCi0gICAgICAgIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgeyAgICAgLyogXCUwLTkgdmFy aWFibGUgKi8KLSAgICAgICAgICAgIGlmIChtYWNsdmwgPCAwKSB7ICAgICAgICAgICAvKiBBcmUg d2UgY2FsbGluZyBvciBpbiBhIG1hY3JvPyAqLwotICAgICAgICAgICAgICAgIGdfdmFyW2NdID0g cDsgICAgICAgICAgIC8qIE5vLCBpdCdzIHRvcCBsZXZlbCBvbmUgKi8KLSAgICAgICAgICAgICAg ICBtYWtlc3RyKCYodG9wYXJnW2MgLSAnMCddKSxwKTsgLyogVGFrZSBjYXJlIFwmX1tdIHRvbyAq LwotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIFllcywgaXQncyBh IG1hY3JvIGFyZ3VtZW50ICovCi0gICAgICAgICAgICAgICAgbV9hcmdbbWFjbHZsXVtjIC0gJzAn XSA9IHA7IC8qIEFzc2lnbiB0aGUgdmFsdWUgKi8KLSAgICAgICAgICAgICAgICBtYWtlc3RyKCYo bV94YXJnW21hY2x2bF1bYyAtICcwJ10pLHApOyAvKiBBbmQgYSBjb3B5IGhlcmUgKi8KLSAgICAg ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJdCdz IGEgXCVhLXogdmFyaWFibGUgKi8KLSAgICAgICAgICAgIGlmIChjIDwgMzMgfHwgKHVuc2lnbmVk IGludCljID4gR1ZBUlMpIHJldHVybigtMSk7Ci0gICAgICAgICAgICBpZiAoaXN1cHBlcihjKSkg YyA9IChjaGFyKSB0b2xvd2VyKGMpOwotICAgICAgICAgICAgZ192YXJbY10gPSBwOyAgICAgICAg ICAgICAgIC8qIFB1dCBwb2ludGVyIGluIGdsb2JhbC12YXIgdGFibGUgKi8KLSAgICAgICAgfQot ICAgICAgICBpZiAodHJhX2FzZykgdHJhY2V2YWwobmFtLHApOwotICAgICAgICByZXR1cm4oMCk7 Ci0gICAgfSBlbHNlIGlmICgqbmFtID09ICcmJykgeyAgICAgICAgICAgLyogQW4gYXJyYXkgcmVm ZXJlbmNlPyAqLwotICAgICAgICBjaGFyICoqcSA9IE5VTEw7Ci0gICAgICAgIGludCByYyA9IDA7 Ci0gICAgICAgIGlmICgoeSA9IGFycmF5bmFtKG5hbSwmeCwmeikpIDwgMCkgLyogSWYgc3ludGF4 IGlzIGJhZCAqLwotICAgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgIC8qIHJl dHVybiAtMS4gKi8KLSAgICAgICAgaWYgKGNoa2FycmF5KHgseikgPCAwKSAgICAgICAgICAvKiBJ ZiBhcnJheSBub3QgZGVjbGFyZWQgb3IgKi8KLSAgICAgICAgICByYyA9IC0yOyAgICAgICAgICAg ICAgICAgICAgICAvKiBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlLCByZXQgLTIgKi8KLSAgICAgICAg aWYgKCFmbGFnKSB7Ci0gICAgICAgICAgICB0cmFfYXNnID0gMDsKLSAgICAgICAgICAgIGRlbG1h YyhuYW0sMCk7ICAgICAgICAgICAgICAvKiBEZWxldGUgYW55IG9sZCB2YWx1ZS4gKi8KLSAgICAg ICAgICAgIHRyYV9hc2cgPSB0cmFfdG1wOwotICAgICAgICB9Ci0gICAgICAgIHggLT0gQVJSQVlC QVNFOyAgICAgICAgICAgICAgICAgLyogQ29udmVydCBuYW1lIGxldHRlciB0byBpbmRleC4gKi8K LSAgICAgICAgaWYgKHggPiAneicgLSBBUlJBWUJBU0UgKyAxKQotICAgICAgICAgIHJjID0gLTE7 Ci0gICAgICAgIGlmIChyYyAhPSAtMSkgewotICAgICAgICAgICAgaWYgKChxID0gYV9wdHJbeF0p ID09IE5VTEwpIC8qIElmIGFycmF5IG5vdCBkZWNsYXJlZCwgKi8KLSAgICAgICAgICAgICAgcmV0 dXJuKC0zKTsgICAgICAgICAgICAgICAvKiByZXR1cm4gLTMuICovCi0gICAgICAgIH0KLSAgICAg ICAgaWYgKHJjIDwgMCkKLSAgICAgICAgICByZXR1cm4ocmMpOwotICAgICAgICBpZiAoIWZsYWcp IHsKLSAgICAgICAgICAgIGlmIChkZWZsZW4gPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChw ID0gbWFsbG9jKGRlZmxlbisxKSkgPT0gTlVMTCkgeyAvKiBBbGxvY2F0ZSBzcGFjZSAqLwotICAg ICAgICAgICAgICAgICAgICBwcmludGYoImFkZG1hYyBtYWNybyBlcnJvciA3OiAlc1xuIixuYW0p OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTQpOyAgICAgICAgIC8qIGZvciBuZXcgZGVm LCByZXR1cm4gLTQgb24gZmFpbC4gKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgc3RyY3B5KHAsZGVmKTsgICAgICAgICAgLyogQ29weSBkZWYgaW50byBuZXcgc3BhY2UgKFNB RkUpLiAqLwotICAgICAgICAgICAgfSBlbHNlIHAgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAg IHFbel0gPSBwOyAgICAgICAgICAgICAgICAgICAgICAgLyogU3RvcmUgcG9pbnRlciB0byBpdC4g Ki8KLSAgICAgICAgaWYgKHggPT0gMCkgeyAgICAgICAgICAgICAgICAgICAvKiBBcmcgdmVjdG9y IGFycmF5ICovCi0gICAgICAgICAgICBpZiAoeiA+PSAwICYmIHogPD0gOSkgeyAgICAgLyogQ29w eSB2YWx1ZXMgdG8gY29ycmVzcG9uZGluZyAgKi8KLSAgICAgICAgICAgICAgICBpZiAobWFjbHZs IDwgMCkgeyAgICAgICAvKiBcJTEuLjkgdmFyaWFibGVzLiAqLwotICAgICAgICAgICAgICAgICAg ICBtYWtlc3RyKCYodG9wYXJnW3pdKSxwKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgICAgICBtYWtlc3RyKCYobV9hcmdbbWFjbHZsXVt6XSkscCk7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICh0cmFfYXNn KSB0cmFjZXZhbChuYW0scCk7Ci0gICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAg ICAgLyogRG9uZS4gKi8KLSAgICB9Ci0KLS8qIE5vdCBhIG1hY3JvIGFyZ3VtZW50IG9yIGEgdmFy aWFibGUsIHNvIGl0J3MgYSBtYWNybyBkZWZpbml0aW9uICovCi0KLSNpZmRlZiBVU0VfVkFSTEVO Ci0gICAgaWYgKGZsYWcpIHsKLSAgICAgICAgaWYgKHRyYV9hc2cpIHRyYWNldmFsKG5hbSxwKTsK LSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBVU0VfVkFSTEVOICovCi0gICAg eCA9IGlzYWEobmFtKSA/ICAgICAgICAgICAgICAgICAgICAgLyogSWYgaXQncyBhbiBhc3NvY2lh dGl2ZSBhcnJheSAqLwotICAgICAgbXh4bG9vayhtYWN0YWIsbmFtLG5tYWMpIDogICAgICAgIC8q IGxvb2sgaXQgdXAgdGhpcyB3YXkgKi8KLSAgICAgICAgbXhsb29rKG1hY3RhYixuYW0sbm1hYyk7 ICAgICAgICAvKiBvdGhlcndpc2UgdGhpcyB3YXkuICovCi0gICAgaWYgKHggPiAtMSkgeyAgICAg ICAgICAgICAgICAgICAgICAgLyogSWYgZm91bmQuLi4gKi8KLSAgICAgICAgaWYgKGRlZmxlbiA+ IDApICAgICAgICAgICAgICAgICAvKiBhbmQgYSBuZXcgZGVmaW5pdGlvbiB3YXMgZ2l2ZW4gKi8K LSAgICAgICAgICByZXBsYWNpbmcgPSAxOyAgICAgICAgICAgICAgICAvKiB3ZSdyZSByZXBsYWNp bmcgKi8KLSAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndp c2UgKi8KLSAgICAgICAgICBkZWxldGluZyA9IDE7ICAgICAgICAgICAgICAgICAvKiB3ZSdyZSBk ZWxldGluZyAqLwotICAgIH0KLSAgICBpZiAoZGVsZXRpbmcpIHsgICAgICAgICAgICAgICAgICAg ICAvKiBEZWxldGluZy4uLiAqLwotICAgICAgICBpZiAoZGVsbWFjKG5hbSwwKSA8IDApCi0gICAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgbXRjaGFuZ2VkKys7Ci0gICAgICAgIGlmICh0cmFf YXNnKSB0cmFjZXZhbChuYW0scCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9IGVsc2UgaWYg KGRlZmxlbiA8IDEpICAgICAgICAgICAgICAvKiBOZXcgbWFjcm8gd2l0aCBubyBkZWZpbml0aW9u ICovCi0gICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90aGluZyB0 byBkby4gKi8KLQotICAgIGlmIChyZXBsYWNpbmcpIHsgICAgICAgICAgICAgICAgICAgIC8qIFJl cGxhY2luZyBhbiBleGlzdGluZyBtYWNybyAqLwotICAgICAgICBpZiAobWFjdGFiW3hdLm12YWwp IHsgICAgICAgICAgIC8qIElmIGl0IGN1cnJlbnRseSBoYXMgYSBkZWZpbml0aW9uLCAqLwotICAg ICAgICAgICAgZnJlZShtYWN0YWJbeF0ubXZhbCk7ICAgICAgIC8qIGZyZWUgaXQuICovCi0gICAg ICAgICAgICBtYWN0YWJbeF0ubXZhbCA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbXRjaGFu Z2VkKys7Ci0gICAgICAgIHkgPSB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVwbGFj ZW1lbnQgaW5kZXguICovCi0KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBBZGRpbmcgYSBuZXcgbWFjcm8uLi4gKi8KLSAgICAgICAgY2hhciBjMSwgYzI7ICAgICAg ICAgICAgICAgICAgICAvKiBVc2UgZmFzdCBsb29rdXAgdG8gZmluZCB0aGUgKi8KLSAgICAgICAg YzEgPSAqbmFtOyAgICAgICAgICAgICAgICAgICAgICAvKiBhbHBoYWJldGljYWwgc2xvdC4gKi8K LSAgICAgICAgaWYgKGlzdXBwZXIoYzEpKSBjMSA9IChjaGFyKSB0b2xvd2VyKGMxKTsKLQotICAg ICAgICBpZiAobm1hYyA8IDUpIHsgICAgICAgICAgICAgICAgIC8qIE5vdCB3b3J0aCBpdCBmb3Ig c21hbGwgdGFibGVzICovCi0gICAgICAgICAgICB5ID0gMDsKLSAgICAgICAgfSBlbHNlIHsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgKi8KLSAg ICAgICAgICAgIGludCBsbyA9IDA7ICAgICAgICAgICAgICAgICAvKiB3aGVyZSB0byBzdGFydCAq LwotICAgICAgICAgICAgaW50IGhpID0gbm1hYzsKLSAgICAgICAgICAgIGludCBjb3VudCA9IDA7 Ci0gICAgICAgICAgICBjaGFyIGMgPSAwOwotICAgICAgICAgICAgd2hpbGUgKGxvKzIgPCBoaSAm JiArK2NvdW50IDwgMTIpIHsKLSAgICAgICAgICAgICAgICB5ID0gbG8gKyAoKGhpIC0gbG8pIC8g Mik7Ci0gICAgICAgICAgICAgICAgYyA9ICoobWFjdGFiW3ldLmt3ZCk7Ci0gICAgICAgICAgICAg ICAgaWYgKGlzdXBwZXIoYykpIGMgPSAoY2hhcikgdG9sb3dlcihjKTsKLSAgICAgICAgICAgICAg ICBpZiAoYyA8IGMxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvID0geTsKLSAgICAgICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBoaSA9IHk7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgeSA9IChjIDwgYzEpID8gbG8rMSA6IGxv OwotICAgICAgICB9Ci0gICAgICAgIC8qIE5vdyBzZWFyY2ggbGluZWFybHkgZnJvbSBzdGFydGlu ZyBsb2NhdGlvbiAqLwotICAgICAgICBmb3IgKCA7IHkgPCBNQUNfTUFYICYmIG1hY3RhYlt5XS5r d2QgIT0gTlVMTDsgeSsrKSB7Ci0gICAgICAgICAgICBjMiA9ICoobWFjdGFiW3ldLmt3ZCk7Ci0g ICAgICAgICAgICBpZiAoaXN1cHBlcihjMikpIGMyID0gKGNoYXIpIHRvbG93ZXIoYzIpOwotICAg ICAgICAgICAgaWYgKGMxID4gYzIpCi0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg ICAgaWYgKGMxIDwgYzIpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGNr c3RyY21wKG5hbSxtYWN0YWJbeV0ua3dkLC0xLDApIDw9IDApCi0gICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICB9Ci0gICAgICAgIGlmICh5ID09IE1BQ19NQVgpIHsgICAgICAgICAgICAgLyog TWFjcm8gdGFibGUgaXMgZnVsbC4gKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImFkZG1hYyB0 YWJsZSBvdmVyZmxvdyIsIiIseSk7Ci0gICAgICAgICAgICBwcmludGYoIj9NYWNybyB0YWJsZSBv dmVyZmxvd1xuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAg IGlmIChtYWN0YWJbeV0ua3dkICE9IE5VTEwpIHsgICAgLyogTXVzdCBpbnNlcnQgKi8KLSAgICAg ICAgICAgIGZvciAoaSA9IG5tYWM7IGkgPiB5OyBpLS0pIHsgLyogTW92ZSB0aGUgcmVzdCBkb3du IG9uZSBzbG90ICovCi0gICAgICAgICAgICAgICAgbWFjdGFiW2ldLmt3ZCA9IG1hY3RhYltpLTFd Lmt3ZDsKLSAgICAgICAgICAgICAgICBtYWN0YWJbaV0ubXZhbCA9IG1hY3RhYltpLTFdLm12YWw7 Ci0gICAgICAgICAgICAgICAgbWFjdGFiW2ldLmZsZ3MgPSBtYWN0YWJbaS0xXS5mbGdzOwotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG10Y2hhbmdlZCsrOwotICAgICAgICBwID0g bWFsbG9jKG5hbWxlbiArIDEpOyAgICAgICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBuYW1lICov Ci0gICAgICAgIGlmICghcCkgewotICAgICAgICAgICAgcHJpbnRmKCI/QWRkbWFjOiBPdXQgb2Yg bWVtb3J5IC0gXCIlc1wiXG4iLG5hbSk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAg ICB9Ci0gICAgICAgIHN0cmNweShwLG5hbSk7ICAgICAgICAgICAgICAgICAgLyogQ29weSBuYW1l IGludG8gbmV3IHNwYWNlIChTQUZFKSAqLwotICAgICAgICBtYWN0YWJbeV0ua3dkID0gcDsgICAg ICAgICAgICAgIC8qIEFkZCBwb2ludGVyIHRvIHRhYmxlICovCi0gICAgfQotICAgIGlmIChkZWZs ZW4gPiAwKSB7ICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGhhdmUgYSBkZWZpbml0aW9uICov Ci0gICAgICAgIHAgPSBtYWxsb2MoZGVmbGVuICsgMSk7ICAgICAgICAgLyogR2V0IHNwYWNlICov Ci0gICAgICAgIGlmIChwID09IE5VTEwpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1NwYWNlIGV4 aGF1c3RlZCAtIFwiJXNcIlxuIiwgbmFtKTsKLSAgICAgICAgICAgIGlmIChtYWN0YWJbeV0ua3dk KSB7Ci0gICAgICAgICAgICAgICAgZnJlZShtYWN0YWJbeV0ua3dkKTsKLSAgICAgICAgICAgICAg ICBtYWN0YWJbeV0ua3dkID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy bigtMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHJjcHkocCxkZWYpOyAgICAg ICAgICAgICAgLyogQ29weSB0aGUgZGVmaW5pdGlvbiAoU0FGRSkgKi8KLSAgICAgICAgfQotICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmluaXRpb24gaXMgZW1w dHkgKi8KLSAgICAgICAgcCA9IE5VTEw7Ci0gICAgfQotICAgIG1hY3RhYlt5XS5tdmFsID0gcDsg ICAgICAgICAgICAgICAgIC8qIE1hY3JvIHBvaW50cyB0byBkZWZpbml0aW9uICovCi0gICAgbWFj dGFiW3ldLmZsZ3MgPSAwOyAgICAgICAgICAgICAgICAgLyogTm8gZmxhZ3MgKi8KLSAgICBpZiAo IXJlcGxhY2luZykgICAgICAgICAgICAgICAgICAgICAvKiBJZiBuZXcgbWFjcm8gKi8KLSAgICAg IG5tYWMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3VudCBpdCAqLwotICAgIGlm ICh0cmFfYXNnKSB0cmFjZXZhbChuYW0scCk7Ci0gICAgcmV0dXJuKHkpOwotfQotCi1pbnQKLXhk ZWxtYWMoeCkgaW50IHg7IHsgICAgICAgICAgICAgICAgICAgICAvKiBEZWxldGUgYSBtYWNybyBn aXZlbiBpdHMgaW5kZXggKi8KLSAgICBpbnQgaTsKLSAgICBleHRlcm4gaW50IHRyYV9hc2c7Ci0g ICAgaWYgKHggPCAwKSByZXR1cm4oeCk7Ci0gICAgaWYgKHRyYV9hc2cpCi0gICAgICB0cmFjZXZh bChtYWN0YWJbeF0ua3dkLE5VTEwpOwotCi0gICAgaWYgKG1hY3RhYlt4XS5rd2QpIHsgICAgICAg ICAgICAgICAgLyogRnJlZSB0aGUgc3RvcmFnZSBmb3IgdGhlIG5hbWUgKi8KLSAgICAgICAgZnJl ZShtYWN0YWJbeF0ua3dkKTsKLSAgICAgICAgbWFjdGFiW3hdLmt3ZCA9IE5VTEw7Ci0gICAgfQot ICAgIGlmIChtYWN0YWJbeF0ubXZhbCkgeyAgICAgICAgICAgICAgIC8qIGFuZCBmb3IgdGhlIGRl ZmluaXRpb24gKi8KLSAgICAgICAgZnJlZShtYWN0YWJbeF0ubXZhbCk7Ci0gICAgICAgIG1hY3Rh Ylt4XS5tdmFsID0gTlVMTDsKLSAgICB9Ci0gICAgZm9yIChpID0geDsgaSA8IG5tYWM7IGkrKykg eyAgICAgICAgLyogTm93IG1vdmUgdXAgdGhlIG90aGVycy4gKi8KLSAgICAgICAgbWFjdGFiW2ld Lmt3ZCA9IG1hY3RhYltpKzFdLmt3ZDsKLSAgICAgICAgbWFjdGFiW2ldLm12YWwgPSBtYWN0YWJb aSsxXS5tdmFsOwotICAgICAgICBtYWN0YWJbaV0uZmxncyA9IG1hY3RhYltpKzFdLmZsZ3M7Ci0g ICAgfQotICAgIG5tYWMtLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9uZSBsZXNz IG1hY3JvICovCi0KLSAgICBtYWN0YWJbbm1hY10ua3dkID0gTlVMTDsgICAgICAgICAgICAvKiBE ZWxldGUgbGFzdCBpdGVtIGZyb20gdGFibGUgKi8KLSAgICBtYWN0YWJbbm1hY10ubXZhbCA9IE5V TEw7Ci0gICAgbWFjdGFiW25tYWNdLmZsZ3MgPSAwOwotICAgIG10Y2hhbmdlZCsrOwotICAgIHJl dHVybigwKTsKLX0KLQotaW50Ci1kZWxtYWMobmFtLGV4YWN0KSBjaGFyICpuYW07IGludCBleGFj dDsgeyAvKiBEZWxldGUgdGhlIG5hbWVkIG1hY3JvICovCi0gICAgaW50IHgsIHo7Ci0gICAgY2hh ciAqcCwgYzsKLSAgICBleHRlcm4gaW50IHRyYV9hc2c7Ci0KLSAgICBpZiAoIW5hbSkgcmV0dXJu KDApOyAgICAgICAgICAgICAgICAvKiBXYXRjaCBvdXQgZm9yIG51bGwgcG9pbnRlciAqLwotICAg IGRlYnVnKEYxMTAsImRlbG1hYyBuYW0iLG5hbSwwKTsKLSNpZmRlZiBJS1NECi0gICAgaWYgKCBp bnNlcnZlciAmJgotI2lmZGVmIElLU0RDT05GCi0gICAgICAgIGlrc2RjZgotI2Vsc2UgLyogSUtT RENPTkYgKi8KLSAgICAgICAgMQotI2VuZGlmIC8qIElLU0RDT05GICovCi0gICAgICAgICkgewot ICAgICAgICBpZiAoIWNrc3RyY21wKCJvbl9leGl0IixuYW0sLTEsMCkgfHwKLSAgICAgICAgICAg ICFja3N0cmNtcCgib25fbG9nb3V0IixuYW0sLTEsMCkpCi0gICAgICAgICAgcmV0dXJuKC0xKTsK LSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0gICAgaWYgKCpuYW0gPT0gQ01EUSkgbmFtKys7 Ci0gICAgaWYgKCpuYW0gPT0gJyUnKSB7ICAgICAgICAgICAgICAgICAgLyogSWYgaXQncyBhIHZh cmlhYmxlIG5hbWUgKi8KLSAgICAgICAgaWYgKCEoYyA9ICoobmFtKzEpKSkgcmV0dXJuKDApOyAv KiBHZXQgdmFyaWFibGUgbmFtZSBsZXR0ZXIgb3IgZGlnaXQgKi8KLSAgICAgICAgcCA9IChjaGFy ICopMDsgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHZhbHVlIHBvaW50ZXIgKi8KLSAg ICAgICAgaWYgKG1hY2x2bCA8IDAgJiYgYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsgLyogVG9wLWxl dmVsIGRpZ2l0PyAqLwotICAgICAgICAgICAgcCA9IHRvcGFyZ1tjIC0gJzAnXTsKLSAgICAgICAg ICAgIGlmIChwKSBpZiAocCAhPSBnX3ZhcltjXSkgewotICAgICAgICAgICAgICAgIGZyZWUocCk7 Ci0gICAgICAgICAgICAgICAgdG9wYXJnW2MgLSAnMCddID0gTlVMTDsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIHAgPSBnX3ZhcltjXTsKLSAgICAgICAgICAgIGdfdmFyW2NdID0gTlVMTDsg ICAgICAgICAgICAvKiBaZXJvIHRoZSB0YWJsZSBlbnRyeSAqLwotICAgICAgICB9IGVsc2UgaWYg KG1hY2x2bCA+IC0xICYmIGMgPj0gJzAnICYmIGMgPD0gJzknKSB7IC8qIERpZ2l0PyAqLwotICAg ICAgICAgICAgcCA9IG1feGFyZ1ttYWNsdmxdW2MgLSAnMCddOwotICAgICAgICAgICAgaWYgKHAp IGlmIChwICE9IGdfdmFyW2NdKSB7Ci0gICAgICAgICAgICAgICAgZnJlZShwKTsKLSAgICAgICAg ICAgICAgICBtX3hhcmdbbWFjbHZsXVtjIC0gJzAnXSA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBwID0gbV9hcmdbbWFjbHZsXVtjIC0gJzAnXTsgLyogR2V0IHBvaW50ZXIgZnJv bSBtYWNyby1hcmcgdGFibGUgKi8KLSAgICAgICAgICAgIG1fYXJnW21hY2x2bF1bYyAtICcwJ10g PSBOVUxMOyAvKiBaZXJvIHRoZSB0YWJsZSBwb2ludGVyICovCi0gICAgICAgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogSXQncyBhIGdsb2JhbCB2YXJpYWJsZSAqLwotICAgICAg ICAgICAgaWYgKGMgPCAzMyB8fCAodW5zaWduZWQgaW50KWMgPiBHVkFSUykgcmV0dXJuKDApOwot ICAgICAgICAgICAgcCA9IGdfdmFyW2NdOyAgICAgICAgICAgICAgIC8qIEdldCBwb2ludGVyIGZy b20gZ2xvYmFsLXZhciB0YWJsZSAqLwotICAgICAgICAgICAgZ192YXJbY10gPSBOVUxMOyAgICAg ICAgICAgIC8qIFplcm8gdGhlIHRhYmxlIGVudHJ5ICovCi0gICAgICAgIH0KLSAgICAgICAgaWYg KHApIHsKLSAgICAgICAgICAgIGRlYnVnKEYwMTAsImRlbG1hYyBkZWYiLHAsMCk7Ci0gICAgICAg ICAgICBmcmVlKHApOyAgICAgICAgICAgICAgICAgICAgLyogRnJlZSB0aGUgc3RvcmFnZSAqLwot ICAgICAgICAgICAgcCA9IE5VTEw7Ci0gICAgICAgIH0gZWxzZSBkZWJ1ZyhGMTEwLCJkZWxtYWMg ZGVmIiwiKG51bGwgcG9pbnRlcikiLDApOwotICAgICAgICBpZiAodHJhX2FzZykgdHJhY2V2YWwo bmFtLE5VTEwpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmICgqbmFtID09ICcm JykgeyAgICAgICAgICAgICAgICAgIC8qIEFuIGFycmF5IHJlZmVyZW5jZT8gKi8KLSAgICAgICAg Y2hhciAqKnE7Ci0gICAgICAgIGlmIChhcnJheW5hbShuYW0sJngsJnopIDwgMCkgICAgLyogSWYg c3ludGF4IGlzIGJhZCAqLwotICAgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAg IC8qIHJldHVybiAtMS4gKi8KLSAgICAgICAgeCAtPSBBUlJBWUJBU0U7ICAgICAgICAgICAgICAg ICAvKiBDb252ZXJ0IG5hbWUgdG8gbnVtYmVyLiAqLwotICAgICAgICBpZiAoKHEgPSBhX3B0clt4 XSkgPT0gTlVMTCkgICAgIC8qIElmIGFycmF5IG5vdCBkZWNsYXJlZCwgKi8KLSAgICAgICAgICBy ZXR1cm4oLTIpOyAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gLTIuICovCi0gICAgICAgIGlm ICh6ID4gYV9kaW1beF0pICAgICAgICAgICAgICAgLyogSWYgc3Vic2NyaXB0IG91dCBvZiByYW5n ZSwgKi8KLSAgICAgICAgICByZXR1cm4oLTMpOyAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4g LTMuICovCi0gICAgICAgIGlmIChxW3pdKSB7ICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhl cmUgaXMgYW4gb2xkIHZhbHVlLCAqLwotICAgICAgICAgICAgZGVidWcoRjAxMCwiZGVsbWFjIGRl ZiIscVt6XSwwKTsKLSAgICAgICAgICAgIGlmICh4ICE9IDApICAgICAgICAgICAgICAgICAvKiBN YWNybyBhcmcgdmVjdG9yIGlzIGp1c3QgYSBjb3B5ICovCi0gICAgICAgICAgICAgIGZyZWUocVt6 XSk7ICAgICAgICAgICAgICAgLyogT3RoZXJzIGFyZSByZWFsIHNvIGZyZWUgdGhlbSAqLwotICAg ICAgICAgICAgcVt6XSA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAoeCA9PSAwKSB7ICAgICAgICAg ICAgICAgLyogQXJnIHZlY3RvciBhcnJheSAqLwotICAgICAgICAgICAgICAgIGlmICh6ID49IDAg JiYgeiA8PSA5KSB7IC8qIENvcHkgdmFsdWVzIHRvIGNvcnJlc3BvbmRpbmcgICovCi0gICAgICAg ICAgICAgICAgICAgIGlmIChtYWNsdmwgPCAwKSB7ICAgLyogXCUxLi45IHZhcmlhYmxlcy4gKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJih0b3Bhcmdbel0pLE5VTEwpOwotICAg ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0 cigmKG1fYXJnW21hY2x2bF1bel0pLE5VTEwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRyYV9hc2cpIHRy YWNldmFsKG5hbSxOVUxMKTsKLSAgICAgICAgfSBlbHNlIGRlYnVnKEYwMTAsImRlbG1hYyBkZWYi LCIobnVsbCBwb2ludGVyKSIsMCk7Ci0gICAgfQotCi0gICAvKiBOb3QgYSB2YXJpYWJsZSBvciBh biBhcnJheSwgc28gaXQgbXVzdCBiZSBhIG1hY3JvLiAqLwotCi0gICAgeiA9IGlzYWEobmFtKTsK LSAgICBkZWJ1ZyhGMTExLCJkZWxtYWMgaXNhYSIsbmFtLHopOwotICAgIGRlYnVnKEYxMTEsImRl bG1hYyBleGFjdCIsbmFtLGV4YWN0KTsKLSAgICB4ID0geiA/IG14eGxvb2sobWFjdGFiLG5hbSxu bWFjKSA6Ci0gICAgICBleGFjdCA/IG14bG9vayhtYWN0YWIsbmFtLG5tYWMpIDoKLSAgICAgICAg bWxvb2sobWFjdGFiLG5hbSxubWFjKTsKLSAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgZGVidWco RjExMSwiZGVsbWFjIG1sb29rIixuYW0seCk7Ci0gICAgICAgIHJldHVybih4KTsKLSAgICB9Ci0g ICAgcmV0dXJuKHhkZWxtYWMoeCkpOwotfQotCi1WT0lECi1pbml0bWFjKCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogSW5pdCBtYWNybyAmIHZhcmlhYmxlIHRhYmxlcyAqLwotICAg IGludCBpLCBqLCB4OwotCi0gICAgbm1hYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTm8gbWFjcm9zICovCi0gICAgZm9yIChpID0gMDsgaSA8IE1BQ19NQVg7IGkrKykgeyAgICAg LyogSW5pdGlhbGl6ZSB0aGUgbWFjcm8gdGFibGUgKi8KLSAgICAgICAgbWFjdGFiW2ldLmt3ZCA9 IE5VTEw7Ci0gICAgICAgIG1hY3RhYltpXS5tdmFsID0gTlVMTDsKLSAgICAgICAgbWFjdGFiW2ld LmZsZ3MgPSAwOwotICAgIH0KLSAgICBtdGNoYW5nZWQrKzsKLSAgICB4ID0gKE1BWEFSR0xJU1Qg KyAxKSAqIHNpemVvZihjaGFyICoqKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgTUFDTEVWRUw7IGkr KykgeyAgICAvKiBJbml0IHRoZSBtYWNybyBhcmd1bWVudCB0YWJsZXMgKi8KLSAgICAgICAgbV94 YXJnW2ldID0gKGNoYXIgKiopIG1hbGxvYyh4KTsKLSAgICAgICAgbXJ2YWxbaV0gPSBOVUxMOyAg ICAgICAgICAgICAgICAvKiBNYWNybyByZXR1cm4gdmFsdWUgKi8KLSAgICAgICAgLyogUG9pbnRl ciB0byBlbnRpcmUgYXJndW1lbnQgdmVjdG9yLCBsZXZlbCBpLCBmb3IgXCZfW10gYXJyYXkgKi8K LSAgICAgICAgZm9yIChqID0gMDsgaiA8PSBNQVhBUkdMSVNUOyBqKyspIHsgLyogTWFjcm8gYXJn dW1lbnQgbGlzdCAqLwotICAgICAgICAgICAgaWYgKGogPCAxMCkgICAgICAgICAgICAgICAgIC8q IEZvciB0aGUgXCUwLi5cJTkgdmFyaWFibGVzICovCi0gICAgICAgICAgICAgIG1fYXJnW2ldW2pd ID0gTlVMTDsgICAgICAgLyogUG9pbnRlciB0byBhcmcgaiwgbGV2ZWwgaS4gKi8KLSAgICAgICAg ICAgIGlmIChtX3hhcmdbaV0pICAgICAgICAgICAgICAvKiBGb3IgXCZfW10gLSBhbGwgYXJncy4g Ki8KLSAgICAgICAgICAgICAgbV94YXJnW2ldW2pdID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0K LSAgICBmb3IgKGkgPSAwOyBpIDwgR1ZBUlM7IGkrKykgeyAgICAgICAvKiBBbmQgdGhlIGdsb2Jh bCB2YXJpYWJsZXMgdGFibGUgKi8KLSAgICAgICAgZ192YXJbaV0gPSBOVUxMOwotICAgIH0KLSAg ICAvKiBBbmQgdGhlIHRhYmxlIG9mIGFycmF5cyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCAoaW50 KSAneicgLSBBUlJBWUJBU0UgKyAxOyBpKyspIHsKLSAgICAgICAgYV9wdHJbaV0gPSAoY2hhciAq KikgTlVMTDsgICAgICAvKiBOdWxsIHBvaW50ZXIgZm9yIGVhY2ggKi8KLSAgICAgICAgYV9kaW1b aV0gPSAwOyAgICAgICAgICAgICAgICAgICAvKiBhbmQgYSBkaW1lbnNpb24gb2YgemVybyAqLwot ICAgICAgICBhX2xpbmtbaV0gPSAtMTsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IENNRFNUS0w7 IGorKykgewotICAgICAgICAgICAgYWFfcHRyW2pdW2ldID0gKGNoYXIgKiopIE5VTEw7Ci0gICAg ICAgICAgICBhYV9kaW1bal1baV0gPSAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi1pbnQKLXBv cGNsdmwoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb3AgY29tbWFuZCBsZXZl bCwgcmV0dXJuIGNtZGx2bCAqLwotICAgIGV4dGVybiBpbnQgdHJhX2NtZDsKLSAgICBzdHJ1Y3Qg bG9jYWx2YXIgKiB2OwotICAgIGludCBpLCB0b3BjbWQ7Ci0gICAgZGVidWcoRjEwMSwicG9wY2x2 bCBjbWRsdmwiLCIiLGNtZGx2bCk7Ci0gICAgaWYgKGNtZGx2bCA+IDApIHsKLSAgICAgICAgaWYg KCh2ID0gbG9jYWxoZWFkW2NtZGx2bF0pKSB7ICAvKiBEaWQgd2Ugc2F2ZSBhbnkgdmFyaWFibGVz PyAqLwotICAgICAgICAgICAgd2hpbGUgKHYpIHsgICAgICAgICAgICAgICAgIC8qIFllcyAqLwot ICAgICAgICAgICAgICAgIGlmICh2LT5sdl92YWx1ZSkgICAgICAgIC8qIENvcHkgb2xkIG9uZXMg YmFjayAqLwotICAgICAgICAgICAgICAgICAgYWRkbWFjKHYtPmx2X25hbWUsdi0+bHZfdmFsdWUp OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGRlbG1hYyh2LT5sdl9u YW1lLDEpOwotICAgICAgICAgICAgICAgIHYgPSB2LT5sdl9uZXh0OwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgZnJlZWxvY2FsKGNtZGx2bCk7ICAgICAgICAgIC8qIEZyZWUgbG9jYWwgc3Rv cmFnZSAqLwotICAgICAgICB9Ci0gICAgICAgIC8qIEF1dG9tYXRpYyBhcnJheXMgZG8gbm90IHVz ZSB0aGUgbG9jYWxoZWFkIGxpc3QgKi8KLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjg7IGkr KykgeyAgICAgIC8qIEZyZWUgYW55IGxvY2FsIGFycmF5cyAqLwotICAgICAgICAgICAgaWYgKGFh X3B0cltjbWRsdmxdW2ldKSB7CS8qIERvZXMgdGhpcyBvbmUgZXhpc3Q/ICovCi0gICAgICAgICAg ICAgICAgZGNsYXJyYXkoKGNoYXIpKGkrQVJSQVlCQVNFKSwtMSk7IC8qIERlc3Ryb3kgZ2xvYmFs IG9uZSAqLwotICAgICAgICAgICAgICAgIGFfcHRyW2ldID0gYWFfcHRyW2NtZGx2bF1baV07Ci0g ICAgICAgICAgICAgICAgYV9kaW1baV0gPSBhYV9kaW1bY21kbHZsXVtpXTsKLSAgICAgICAgICAg ICAgICBhYV9wdHJbY21kbHZsXVtpXSA9IChjaGFyICoqKU5VTEw7Ci0gICAgICAgICAgICAgICAg YWFfZGltW2NtZGx2bF1baV0gPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmIChhYV9kaW1bY21k bHZsXVtpXSA9PSAtMjMpIHsgLyogU2VjcmV0IGNvZGUgKi8KLSAgICAgICAgICAgICAgICBkY2xh cnJheSgoY2hhcikoaStBUlJBWUJBU0UpLC0xKTsgLyogKHNlZSBwdXNoYXJyYXkoKSkgKi8KLSAg ICAgICAgICAgICAgICBhYV9wdHJbY21kbHZsXVtpXSA9IChjaGFyICoqKU5VTEw7Ci0gICAgICAg ICAgICAgICAgYWFfZGltW2NtZGx2bF1baV0gPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAg ICAgICAvKiBPdGhlcndpc2UgZG8gbm90aGluZyAtIGl0IGlzIGEgbG9jYWwgYXJyYXkgdGhhdCB3 YXMgZGVjbGFyZWQgKi8KLSAgICAgICAgICAgIC8qIGF0IGEgbGV2ZWwgYWJvdmUgdGhpcyBvbmUg c28gbGVhdmUgaXQgYWxvbmUuICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGNtZGx2bCA8 IDEpIHsgICAgICAgICAgICAgICAgICAgLyogSWYgd2UncmUgYWxyZWFkeSBhdCB0b3AgbGV2ZWwg Ki8KLSAgICAgICAgY21kbHZsID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBqdXN0IG1ha2Ug c3VyZSBhbGwgdGhlICovCi0gICAgICAgIHRsZXZlbCA9IC0xOyAgICAgICAgICAgICAgICAgICAg Lyogc3RhY2sgcG9pbnRlcnMgYXJlIHNldCByaWdodCAqLwotICAgICAgICBtYWNsdmwgPSAtMTsg ICAgICAgICAgICAgICAgICAgIC8qIGFuZCByZXR1cm4gKi8KLSAgICB9IGVsc2UgaWYgKGNtZHN0 a1tjbWRsdmxdLnNyYyA9PSBDTURfVEYpIHsgLyogUmVhZGluZyBmcm9tIFRBS0UgZmlsZT8gKi8K LSAgICAgICAgZGVidWcoRjEwMSwicG9wY2x2bCB0bGV2ZWwiLCIiLHRsZXZlbCk7Ci0gICAgICAg IGlmICh0bGV2ZWwgPiAtMSkgeyAgICAgICAgICAgICAgLyogWWVzLCAqLwotICAgICAgICAgICAg ZmNsb3NlKHRmaWxlW3RsZXZlbF0pOyAgICAgIC8qIGNsb3NlIGl0ICovCi0KLSAgICAgICAgICAg IGlmICh0cmFfY21kKQotICAgICAgICAgICAgICBwcmludGYoIlslZF0gLUY6IFwiJXNcIlxuIixj bWRsdmwsdGZuYW1bdGxldmVsXSk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJDTUQgLUYiLHRm bmFtW3RsZXZlbF0sY21kbHZsKTsKLSAgICAgICAgICAgIGlmICh0Zm5hbVt0bGV2ZWxdKSB7ICAg ICAgICAvKiBmcmVlIHN0b3JhZ2UgZm9yIG5hbWUgKi8KLSAgICAgICAgICAgICAgICBmcmVlKHRm bmFtW3RsZXZlbF0pOwotICAgICAgICAgICAgICAgIHRmbmFtW3RsZXZlbF0gPSBOVUxMOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgdGxldmVsLS07ICAgICAgICAgICAgICAgICAgIC8qIGFu ZCBwb3AgdGFrZSBsZXZlbCAqLwotICAgICAgICAgICAgY21kbHZsLS07ICAgICAgICAgICAgICAg ICAgIC8qIGFuZCBjb21tYW5kIGxldmVsICovCi0gICAgICAgICAgICBxdWlldCA9IHhxdWlldFtj bWRsdmxdOwotICAgICAgICAgICAgdmFyZXZhbCA9IHh2YXJldltjbWRsdmxdOwotICAgICAgICB9 IGVsc2UKLSAgICAgICAgICB0bGV2ZWwgPSAtMTsKLSAgICB9IGVsc2UgaWYgKGNtZHN0a1tjbWRs dmxdLnNyYyA9PSBDTURfTUQpIHsgLyogSW4gYSBtYWNybz8gKi8KLSAgICAgICAgdG9wY21kID0g bGFzdGNtZFttYWNsdmxdOwotICAgICAgICBkZWJ1ZyhGMTAxLCJwb3BjbHZsIG1hY2x2bCIsIiIs bWFjbHZsKTsKLSAgICAgICAgaWYgKG1hY2x2bCA+IC0xKSB7ICAgICAgICAgICAgICAvKiBZZXMs ICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICBjaGFy ICoqcTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICBtYWNwW21hY2x2bF0gPSAi IjsgICAgICAgICAgLyogc2V0IG1hY3JvIHBvaW50ZXIgdG8gbnVsbCBzdHJpbmcgKi8KLSAgICAg ICAgICAgICpjbWRidWYgPSAnXDAnOyAgICAgICAgICAgICAvKiBjbGVhciB0aGUgY29tbWFuZCBi dWZmZXIgKi8KLQotICAgICAgICAgICAgaWYgKChtYWNsdmwgPiAwKSAmJiAgICAgICAgIC8qIDIg TWF5IDE5OTkgKi8KLSAgICAgICAgICAgICAgICAobV9hcmdbbWFjbHZsLTFdWzBdKSAmJgotICAg ICAgICAgICAgICAgICghc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl94aWYiLDQpIHx8Ci0g ICAgICAgICAgICAgICAgICFzdHJuY21wKG1fYXJnW21hY2x2bC0xXVswXSwiX2ZvciIsNCkgfHwK LSAgICAgICAgICAgICAgICAgIXN0cm5jbXAobV9hcmdbbWFjbHZsLTFdWzBdLCJfc3dpIiw0KSB8 fAotICAgICAgICAgICAgICAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl93aGkiLDQp KSAmJgotICAgICAgICAgICAgICAgIG1ydmFsW21hY2x2bCsxXSkgewotICAgICAgICAgICAgICAg IG1ha2VzdHIoJihtcnZhbFttYWNsdmwtMV0pLG1ydmFsW21hY2x2bCsxXSk7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBpZiAobWFjbHZsKzEgPCBNQUNMRVZFTCkgewotICAgICAgICAgICAg ICAgIGlmIChtcnZhbFttYWNsdmwrMV0pIHsgIC8qIEZyZWUgYW55IGRlZXBlciByZXR1cm4gdmFs dWVzLiAqLwotICAgICAgICAgICAgICAgICAgICBmcmVlKG1ydmFsW21hY2x2bCsxXSk7Ci0gICAg ICAgICAgICAgICAgICAgIG1ydmFsW21hY2x2bCsxXSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRyYV9jbWQpCi0gICAgICAgICAgICAg IHByaW50ZigiWyVkXSAtTTogXCIlc1wiXG4iLGNtZGx2bCxtX2FyZ1tjbWRzdGtbY21kbHZsXS5s dmxdWzBdKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIkNNRCAtTSIsbV9hcmdbY21kc3RrW2Nt ZGx2bF0ubHZsXVswXSxjbWRsdmwpOwotCi0gICAgICAgICAgICBtYWNsdmwtLTsgICAgICAgICAg ICAgICAgICAgLyogUG9wIG1hY3JvIGxldmVsICovCi0gICAgICAgICAgICBjbWRsdmwtLTsgICAg ICAgICAgICAgICAgICAgLyogYW5kIGNvbW1hbmQgbGV2ZWwgKi8KLSAgICAgICAgICAgIGRlYnVn KEYxMDEsInBvcGNsdmwgbWFjIG5ldyBtYWNsdmwiLCIiLG1hY2x2bCk7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMDEwLCJwb3BjbHZsIG1hYyBtcnZhbFttYWNsdmwrMV0iLG1ydmFsW21hY2x2bCsyXSww KTsKLQotICAgICAgICAgICAgcXVpZXQgPSB4cXVpZXRbY21kbHZsXTsKLQkgICAgdmFyZXZhbCA9 IHh2YXJldltjbWRsdmxdOwotICAgICAgICAgICAgaWYgKG1hY2x2bCA+IC0xKSB7Ci0gICAgICAg ICAgICAgICAgYV9wdHJbMF0gPSBtX3hhcmdbbWFjbHZsXTsKLSAgICAgICAgICAgICAgICBhX2Rp bVswXSA9IG5feGFyZ1ttYWNsdmxdIC0gMTsKLQkJZGVidWcoRjExMSwiYV9kaW1bMF0iLCJCIixh X2RpbVswXSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFfcHRyWzBd ID0gdG9weGFyZzsKLSAgICAgICAgICAgICAgICBhX2RpbVswXSA9IHRvcGFyZ2MgLSAxOwotCQlk ZWJ1ZyhGMTExLCJhX2RpbVswXSIsIkMiLGFfZGltWzBdKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1hY2x2bCA9IC0xOwotICAgICAgICB9Ci0jaWZuZGVm IE5PU0VYUAotICAgICAgICBkZWJ1ZyhGMTAxLCJwb3BjbHZsIHRvcGNtZCIsIiIsdG9wY21kKTsK LSAgICAgICAgaWYgKHRvcGNtZCA9PSBYWFNFWFApIHsKLSAgICAgICAgICAgIGV4dGVybiBjaGFy ICogc2V4cHZhbDsKLSAgICAgICAgICAgIG1ha2VzdHIoJihtcnZhbFttYWNsdmwrMV0pLHNleHB2 YWwpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9TRVhQICovCi0gICAgfSBlbHNlIHsKLSAgICAg ICAgY21kbHZsLS07Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInBvcGNsdmwgY21kbHZsIiwiIixj bWRsdmwpOwotICAgIGlmIChwcnN0cmluZ1tjbWRsdmxdKSB7Ci0gICAgICAgIGNtc2V0cChwcnN0 cmluZ1tjbWRsdmxdKTsKLSAgICAgICAgbWFrZXN0cigmKHByc3RyaW5nW2NtZGx2bF0pLE5VTEwp OwotICAgIH0KLSNpZm5kZWYgTUFDCi0gICAgaWYgKGNtZGx2bCA8IDEgfHwgeGNtZHNyYyA9PSBD TURfS0IpIHsgLyogSWYgYXQgcHJvbXB0ICovCi0gICAgICAgIHNldGludCgpOwotICAgICAgICBj b25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgIC8qIEdvIGludG8gY2JyZWFrIG1vZGUgKi8K LSAgICB9Ci0jZW5kaWYgLyogTUFDICovCi0gICAgeGNtZHNyYyA9IGNtZHN0a1tjbWRsdmxdLnNy YzsKLSAgICBkZWJ1ZyhGMTAxLCJwb3BjbHZsIHhjbWRzcmMiLCIiLHhjbWRzcmMpOwotICAgIGRl YnVnKEYxMDEsInBvcGNsdmwgdGxldmVsIiwiIix0bGV2ZWwpOwotICAgIHJldHVybihjbWRsdmwg PCAxID8gMCA6IGNtZGx2bCk7ICAgIC8qIFJldHVybiBjb21tYW5kIGxldmVsICovCi19Ci0jZWxz ZSAvKiBObyBzY3JpcHQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgKi8KLWludCBwb3BjbHZsKCkgeyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBKdXN0IGNsb3NlIGN1cnJlbnQgdGFrZSBmaWxlLiAq LwotICAgIGlmICh0bGV2ZWwgPiAtMSkgeyAgICAgICAgICAgICAgICAgIC8qIGlmIGFueS4uLiAq LwotICAgICAgICBpZiAodGZuYW1bdGxldmVsXSkgewotICAgICAgICAgICAgZnJlZSh0Zm5hbVt0 bGV2ZWxdKTsKLSAgICAgICAgICAgIHRmbmFtW3RsZXZlbF0gPSBOVUxMOwotICAgICAgICB9Ci0g ICAgICAgIGZjbG9zZSh0ZmlsZVt0bGV2ZWwtLV0pOwotICAgIH0KLSAgICBpZiAodGxldmVsID09 IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBBbmQgaWYgYmFjayBhdCB0b3AgbGV2ZWwgKi8KLSAg ICAgICAgc2V0aW50KCk7Ci0gICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAg LyogYW5kIGdvIGJhY2sgaW50byBjYnJlYWsgbW9kZS4gKi8KLSAgICB9Ci0gICAgeGNtZHNyYyA9 IHRsZXZlbCA+IC0xID8gQ01EX1RGIDogMDsKLSAgICByZXR1cm4odGxldmVsICsgMSk7Ci19Ci0j ZW5kaWYgLyogTk9TUEwgKi8KLQotCi0jaWZuZGVmIE5PU1BMCi1zdGF0aWMgaW50Ci1pc2VvbSht KSBjaGFyICogbTsgeyAgICAgICAgICAgICAgICAgICAgLyogVGVzdCBpZiBhdCBlbmQgb2YgbWFj cm8gZGVmICovCi0gICAgaWYgKCFtKQotICAgICAgbSA9ICIiOwotICAgIGRlYnVnKEYxMTEsImlz ZW9tIixtLG1hY2x2bCk7Ci0gICAgd2hpbGUgKCptKSB7Ci0gICAgICAgIC8qIEFueXRoaW5nIGJ1 dCBTcGFjZSBhbmQgQ29tbWEgbWVhbnMgbW9yZSBtYWNybyBpcyBsZWZ0ICovCi0gICAgICAgIGlm ICgoKm0gPiBTUCkgJiYgKCptICE9ICcsJykpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImlz ZW9tIHJldHVybiIsbSwwKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotICAg ICAgICBtKys7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsImlzZW9tIHJldHVybiIsbSwxKTsKLSAg ICByZXR1cm4oMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIGxlZnQgKi8K LX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0vKiBQb3AgYWxsIGNvbW1hbmQgbGV2ZWxzIHRoYXQg Y2FuIGJlIHBvcHBlZCAqLwotCi1pbnQKLXByZXBvcCgpIHsKLSAgICBpZiAoY21kbHZsID4gMCkg eyAgICAgICAgICAgICAgICAgICAvKiBJZiBjb21tYW5kIGxldmVsIGlzID4gMCBhbmQuLi4gKi8K LSAgICAgICAgd2hpbGUgKAotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgICAgKChjbWRzdGtb Y21kbHZsXS5zcmMgPT0gQ01EX1RGKSAmJiAvKiBDb21tYW5kIHNvdXJjZSBpcyBmaWxlICovCi0j ZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgICAgICh0bGV2ZWwgPiAtMSkgJiYKLSAgICAgICAg ICAgIGZlb2YodGZpbGVbdGxldmVsXSkpICAgICAgICAvKiBBbmQgYXQgZW5kIG9mIGZpbGUuLi4g Ki8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgICAgIC8qIE9yIGNvbW1hbmQgc291cmNlIGlz IG1hY3JvLi4uICovCi0gICAgICAgICAgICAgICB8fCAoKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBD TURfTUQpICYmCi0gICAgICAgICAgICAgICAgKG1hY2x2bCA+IC0xKSAmJgotICAgICAgICAgICAg ICAgIGlzZW9tKG1hY3BbbWFjbHZsXSkpKSAgLyogYW5kIGF0IGVuZCBvZiBtYWNybywgdGhlbi4u LiAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgcG9wY2x2 bCgpOyAgICAgICAgICAgICAgICAvKiBwb3AgY29tbWFuZCBsZXZlbC4gKi8KLSAgICAgICAgfQot ICAgIH0KLSAgICByZXR1cm4oY21kbHZsIDwgMSA/IDAgOiBjbWRsdmwpOyAgICAvKiBSZXR1cm4g Y29tbWFuZCBsZXZlbCAqLwotfQotCi0vKiBTVE9QIC0gZ2V0IGJhY2sgdG8gQy1LZXJtaXQgcHJv bXB0LCBubyBtYXR0ZXIgd2hlcmUgZnJvbS4gKi8KLQotaW50Ci1kb3N0b3AoKSB7Ci0gICAgZXh0 ZXJuIGludCBjbWRkZXA7Ci0gICAgd2hpbGUgKHBvcGNsdmwoKSkgOyAgICAgICAgIC8qIFBvcCBh bGwgbWFjcm9zICYgdGFrZSBmaWxlcyAqLwotI2lmbmRlZiBOT1NQTAotICAgIGlmIChjbWRkZXAg PiAtMSkgICAgICAgICAgICAvKiBBbmQgYWxsIHJlY3Vyc2l2ZSBjbWQgcGtnIGludm9jYXRpb25z ICovCi0gICAgICB3aGlsZSAoY21wb3AoKSA+IC0xKSA7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAg ICBjbWluaShja3hlY2gpOyAgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIGNvbW1hbmQgYnVmZmVy LiAqLwotICAgIHJldHVybigwKTsKLX0KLQotLyogQ2xvc2UgdGhlIGdpdmVuIGxvZyAqLwotCi1p bnQKLWRvY2xzbG9nKHgpIGludCB4OyB7Ci0gICAgaW50IHk7Ci0gICAgc3dpdGNoICh4KSB7Ci0j aWZkZWYgREVCVUcKLSAgICAgIGNhc2UgTE9HRDoKLSAgICAgICAgaWYgKGRlYmxvZyA8PSAwKSB7 Ci0gICAgICAgICAgICBwcmludGYoIj9EZWJ1Z2dpbmcgbG9nIHdhc24ndCBvcGVuXG4iKTsKLSAg ICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTAwLCJEZWJ1 ZyBMb2cgQ2xvc2VkIiwiIiwwTCk7Ci0gICAgICAgICpkZWJmaWwgPSAnXDAnOwotICAgICAgICBk ZWJsb2cgPSAwOwotICAgICAgICByZXR1cm4oemNsb3NlKFpERklMRSkpOwotI2VuZGlmIC8qIERF QlVHICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgICBjYXNlIExPR1A6Ci0gICAgICAgIGlmIChw a3Rsb2cgPD0gMCkgewotICAgICAgICAgICAgcHJpbnRmKCI/UGFja2V0IGxvZyB3YXNuJ3Qgb3Bl blxuIik7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAgICAgICAgKnBrdGZp bCA9ICdcMCc7Ci0gICAgICAgIHBrdGxvZyA9IDA7Ci0gICAgICAgIHJldHVybih6Y2xvc2UoWlBG SUxFKSk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9MT0NBTAotICAgICAgY2Fz ZSBMT0dTOgotICAgICAgICBpZiAoc2VzbG9nIDw9IDApIHsKLSAgICAgICAgICAgIHByaW50Zigi P1Nlc3Npb24gbG9nIHdhc24ndCBvcGVuXG4iKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAg ICAgICAgfQotICAgICAgICAqc2VzZmlsID0gJ1wwJzsKLSAgICAgICAgc2V0c2VzbG9nKDApOwot ICAgICAgICByZXR1cm4oemNsb3NlKFpTRklMRSkpOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQot I2lmZGVmIFRMT0cKLSAgICAgIGNhc2UgTE9HVDogewotI2lmZGVmIElLU0QKLSAgICAgICAgICBl eHRlcm4gaW50IGlrbG9nb3BlbiwgeGZlcmxvZzsKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAg ICAgaWYgKHRyYWxvZyA8PSAwCi0jaWZkZWYgSUtTRAotICAgICAgICAgICAgICAmJiAhaWtsb2dv cGVuCi0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAg aWYgKG1zZ2ZsZykKLSAgICAgICAgICAgICAgICBwcmludGYoIj9UcmFuc2FjdGlvbiBsb2cgd2Fz bid0IG9wZW5cbiIpOwotICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgfQotI2lm ZGVmIElLU0QKLSAgICAgICAgICBpZiAoaWtsb2dvcGVuICYmICFpbnNlcnZlcikgewotICAgICAg ICAgICAgICBjbG9zZSh4ZmVybG9nKTsKLSAgICAgICAgICAgICAgaWtsb2dvcGVuID0gMDsKLSAg ICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAgIGlmICh0cmFsb2cpIHsKLSAg ICAgICAgICAgICAgdGxvZyhGMTAwLCJUcmFuc2FjdGlvbiBMb2cgQ2xvc2VkIiwiIiwwTCk7Ci0g ICAgICAgICAgICAgIHpjbG9zZShaVEZJTEUpOwotICAgICAgICAgIH0KLSAgICAgICAgICAqdHJh ZmlsID0gJ1wwJzsKLSAgICAgICAgICB0cmFsb2cgPSAwOwotICAgICAgICAgIHJldHVybigxKTsK LSAgICAgIH0KLSNlbmRpZiAvKiBUTE9HICovCi0KLSNpZmRlZiBDS0xPR0RJQUwKLSAgICAgIGNh c2UgTE9HTToKLSAgICAgICAgaWYgKGRpYWxvZyA8PSAwKSB7Ci0gICAgICAgICAgICBpZiAobXNn ZmxnKSBwcmludGYoIj9Db25uZWN0aW9uIGxvZyB3YXNuJ3Qgb3BlblxuIik7Ci0gICAgICAgICAg ICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAgICAgICAgKmRpYWZpbCA9ICdcMCc7Ci0gICAgICAg IGRpYWxvZyA9IDA7Ci0gICAgICAgIHJldHVybih6Y2xvc2UoWkRJRklMKSk7Ci0jZW5kaWYgLyog Q0tMT0dESUFMICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICAgIGNhc2UgTE9HVzogICAgICAgICAg ICAgICAgICAgICAgICAvKiBXUklURSBmaWxlICovCi0gICAgICBjYXNlIExPR1I6ICAgICAgICAg ICAgICAgICAgICAgICAgLyogUkVBRCBmaWxlICovCi0gICAgICAgIHkgPSAoeCA9PSBMT0dSKSA/ IFpSRklMRSA6IFpXRklMRTsKLSAgICAgICAgaWYgKGNoa2ZuKHkpIDwgMSkgICAgICAgICAgICAg ICAvKiBJZiBubyBmaWxlIHRvIGNsb3NlICovCi0gICAgICAgICAgcmV0dXJuKDEpOyAgICAgICAg ICAgICAgICAgICAgLyogc3VjY2VlZCBzaWxlbnRseS4gKi8KLSAgICAgICAgcmV0dXJuKHpjbG9z ZSh5KSk7ICAgICAgICAgICAgICAvKiBPdGhlcndpc2UsIGNsb3NlIHRoZSBmaWxlLiAqLwotI2Vu ZGlmIC8qIE5PU1BMICovCi0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByaW50ZigiXG4/VW5l eHBlY3RlZCBsb2cgZGVzaWduYXRvciAtICVkXG4iLCB4KTsKLSAgICAgICAgcmV0dXJuKDApOwot ICAgIH0KLX0KLQotc3RhdGljIGludCBzbGMgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIFNj cmVlbiBsaW5lIGNvdW50ICovCi0KLWNoYXIgKgotc2hvd3N0cmluZyhzKSBjaGFyICogczsgewot ICAgIHJldHVybihzID8gcyA6ICIobnVsbCkiKTsKLX0KLQotY2hhciAqCi1zaG93b2ZmKHgpIGlu dCB4OyB7Ci0gICAgcmV0dXJuKHggPyAib24iIDogIm9mZiIpOwotfQotCi1jaGFyICoKLXNob3dv b2EoeCkgaW50IHg7IHsKLSAgICBzd2l0Y2ggKHgpIHsKLSAgICAgIGNhc2UgU0VUX09GRjogIHJl dHVybigib2ZmIik7Ci0gICAgICBjYXNlIFNFVF9PTjogICByZXR1cm4oIm9uIik7Ci0gICAgICBj YXNlIFNFVF9BVVRPOiByZXR1cm4oImF1dG9tYXRpYyIpOwotICAgICAgZGVmYXVsdDogICAgICAg cmV0dXJuKCIodW5rbm93bikiKTsKLSAgICB9Ci19Ci0KLSNpZmRlZiBHRU1ET1MKLWlzeGRpZ2l0 KGMpIGludCBjOyB7Ci0gICAgcmV0dXJuKGlzZGlnaXQoYykgfHwKLSAgICAgICAgICAgKGMgPj0g J2EnICYmIGMgPD0gJ2YnKSB8fAotICAgICAgICAgICAoYyA+PSAnQScgJiYgYyA8PSAnRicpKTsK LX0KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQotI2lmbmRlZiBOT1NFVEtFWQotI2lmZGVmIE9TMgot c3RhdGljIHN0cnVjdCBrZXl0YWIgc2hva2V5dGFiW10gPSB7ICAgIC8qIFNIT1cgS0VZIG1vZGVz ICovCi0gICAgImFsbCIsICAgIDEsIDAsCi0gICAgIm9uZSIsICAgIDAsIDAKLX07Ci1zdGF0aWMg aW50IG5zaG9rZXkgPSAoc2l6ZW9mKHNob2tleXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikp OwotCi0jZGVmaW5lIFNIS0VZREVGIFRUX01BWCs1Ci1zdHJ1Y3Qga2V5dGFiIHNob2tleW10YWJb XSA9IHsKLSAgICAiYWFhIiwgICAgICAgVFRfQUFBLCAgICAgQ01fSU5WLCAgICAvKiBBbm5BcmJv ciAqLwotICAgICJhZG0zYSIsICAgICBUVF9BRE0zQSwgICAwLCAgICAgICAgIC8qIExTSSBBRE0t M0EgKi8KLSAgICAiYWRtNSIsICAgICAgVFRfQURNNSwgICAgMCwgICAgICAgICAvKiBMU0kgQURN LTUgKi8KLSAgICAiYWl4dGVybSIsICAgVFRfQUlYVEVSTSwgMCwgICAgICAgICAvKiBJQk0gQUlY dGVybSAqLwotICAgICJhbm5hcmJvciIsICBUVF9BQUEsICAgICAwLCAgICAgICAgIC8qIEFubkFy Ym9yICovCi0gICAgImFuc2ktYmJzIiwgIFRUX0FOU0ksICAgIDAsICAgICAgICAgLyogQU5TSS5T WVMgKEJCUykgKi8KLSAgICAiYXQzODYiLCAgICAgVFRfQVQzODYsICAgMCwgICAgICAgICAvKiBV bml4d2FyZSBBTlNJICovCi0gICAgImF2YXRhci8wKyIsIFRUX0FOU0ksICAgIDAsICAgICAgICAg LyogQVZBVEFSLzArICovCi0gICAgImJhODAiLCAgICAgIFRUX0JBODAsICAgIDAsICAgICAgICAg LyogTml4ZG9yZiBCQTgwICovCi0gICAgImJlIiwgICAgICAgIFRUX0JFT1MsICAgIENNX0lOVnxD TV9BQlIsCi0gICAgImJlb3MtYW5zaSIsIFRUX0JFT1MsICAgIENNX0lOViwgICAgLyogQmVPUyBB TlNJICovCi0gICAgImJldGVybSIsICAgIFRUX0JFT1MsICAgIDAsICAgICAgICAgLyogQmVPUyBD b25zb2xlICovCi0gICAgImQyMDAiLCAgICAgIFRUX0RHMjAwLCAgIENNX0lOVnxDTV9BQlIsIC8q IERhdGEgR2VuZXJhbCBEQVNIRVIgMjAwICovCi0gICAgImQyMTAiLCAgICAgIFRUX0RHMjEwLCAg IENNX0lOVnxDTV9BQlIsIC8qIERhdGEgR2VuZXJhbCBEQVNIRVIgMjEwICovCi0gICAgImQyMTci LCAgICAgIFRUX0RHMjE3LCAgIENNX0lOVnxDTV9BQlIsIC8qIERhdGEgR2VuZXJhbCBEQVNIRVIg MjE3ICovCi0gICAgImRlZmF1bHQiLCAgIFNIS0VZREVGLCAgIDAsCi0gICAgImRnMjAwIiwgICAg IFRUX0RHMjAwLCAgIDAsICAgICAgICAgLyogRGF0YSBHZW5lcmFsIERBU0hFUiAyMDAgKi8KLSAg ICAiZGcyMTAiLCAgICAgVFRfREcyMTAsICAgMCwgICAgICAgICAvKiBEYXRhIEdlbmVyYWwgREFT SEVSIDIxMCAqLwotICAgICJkZzIxNyIsICAgICBUVF9ERzIxNywgICAwLCAgICAgICAgIC8qIERh dGEgR2VuZXJhbCBEQVNIRVIgMjE3ICovCi0gICAgImVtYWNzIiwgICAgIFRUX0tCTV9FTUFDUywg ICAwLCAgICAgLyogRW1hY3MgbW9kZSAqLwotICAgICJoMTkiLCAgICAgICBUVF9IMTksICAgICBD TV9JTlYsICAgIC8qIEhlYXRoLTE5ICovCi0gICAgImhlYXRoMTkiLCAgIFRUX0gxOSwgICAgIDAs ICAgICAgICAgLyogSGVhdGgtMTkgKi8KLSAgICAiaGVicmV3IiwgICAgVFRfS0JNX0hFQlJFVywg MCwgICAgICAvKiBIZWJyZXcgbW9kZSAqLwotICAgICJoZnQiLCAgICAgICBUVF9IRlQsICAgICAw LCAgICAgICAgIC8qIElCTSBIRlQgKi8KLSAgICAiaHAyNjIxYSIsICAgVFRfSFAyNjIxLCAgMCwg ICAgICAgICAvKiBIUCAyNjIxQSAqLwotICAgICJocHRlcm0iLCAgICBUVF9IUFRFUk0sICAwLCAg ICAgICAgIC8qIEhQIFRFUk0gKi8KLSAgICAiaHoxNTAwIiwgICAgVFRfSFpMMTUwMCwgMCwgICAg ICAgICAvKiBIYXplbHRpbmUgMTUwMCAqLwotICAgICJpYm0zMTUxIiwgICBUVF9JQk0zMSwgICAw LCAgICAgICAgIC8qIElCTSAzMTAxLXh4LDMxNjEgKi8KLSAgICAibGludXgiLCAgICAgVFRfTElO VVgsICAgMCwgICAgICAgICAvKiBMaW51eCAqLwotICAgICJxYW5zaSIsICAgICBUVF9RQU5TSSwg ICAwLCAgICAgICAgIC8qIFFOWCBBTlNJICovCi0gICAgInFueCIsICAgICAgIFRUX1FOWCwgICAg IDAsICAgICAgICAgLyogUU5YICovCi0gICAgInJ1c3NpYW4iLCAgIFRUX0tCTV9SVVNTSUFOLCAw LCAgICAgLyogUnVzc2lhbiBtb2RlICovCi0gICAgInNjb2Fuc2kiLCAgIFRUX1NDT0FOU0ksIDAs ICAgICAgICAgLyogU0NPIEFOU0kgKi8KLSAgICAic25pLTk3ODAxIiwgVFRfOTc4MDEsICAgMCwg ICAgICAgICAvKiBTaW5peCA5NzgwMSAqLwotICAgICJzdW4iLCAgICAgICBUVF9TVU4sICAgICAw LCAgICAgICAgIC8qIFN1biBDb25zb2xlICovCi0jaWZkZWYgT1MyUE0KLSNpZmRlZiBDT01NRU5U Ci0gICAgInRlazQwMTQiLCBUVF9URUs0MCwgMCwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5k aWYgLyogT1MyUE0gKi8KLSAgICAidHR5IiwgICAgIFRUX05PTkUsICAwLAotICAgICJ0dmk5MTAr IiwgVFRfVFZJOTEwLCAwLAotICAgICJ0dmk5MjUiLCAgVFRfVFZJOTI1LCAwLAotICAgICJ0dmk5 NTAiLCAgVFRfVFZJOTUwLCAwLAotICAgICJ2YzQwNCIsICAgVFRfVkM0NDA0LCAwLAotICAgICJ2 YzQ0MDQiLCAgVFRfVkM0NDA0LCBDTV9JTlYsCi0gICAgInZpcDc4MDkiLCBUVF9WSVA3ODA5LCAw LAotICAgICJ2dDEwMCIsICAgVFRfVlQxMDAsIDAsCi0gICAgInZ0MTAyIiwgICBUVF9WVDEwMiwg MCwKLSAgICAidnQyMjAiLCAgIFRUX1ZUMjIwLCAwLAotICAgICJ2dDIyMHBjIiwgVFRfVlQyMjBQ QywgMCwKLSAgICAidnQzMjAiLCAgIFRUX1ZUMzIwLCAwLAotICAgICJ2dDMyMHBjIiwgVFRfVlQz MjBQQywgMCwKLSAgICAidnQ1MiIsICAgIFRUX1ZUNTIsICAwLAotICAgICJ3cCIsICAgICAgVFRf S0JNX1dQLCAwLAotICAgICJ3eTE2MCIsICAgVFRfV1kxNjAsICAwLAotICAgICJ3eTMwIiwgICAg VFRfV1kzMCwgIDAsCi0gICAgInd5MzcwIiwgICBUVF9XWTM3MCwgMCwKLSAgICAid3k1MCIsICAg IFRUX1dZNTAsICAwLAotICAgICJ3eTYwIiwgICAgVFRfV1k2MCwgIDAsCi0gICAgInd5c2UzMCIs ICBUVF9XWTMwLCAgQ01fSU5WLAotICAgICJ3eXNlMzcwIiwgVFRfV1kzNzAsIENNX0lOViwKLSAg ICAid3lzZTUwIiwgIFRUX1dZNTAsICBDTV9JTlYsCi0gICAgInd5c2U2MCIsICBUVF9XWTYwLCAg Q01fSU5WCi19OwotaW50IG5zaG9rZXltID0gKHNpemVvZihzaG9rZXltdGFiKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSk7Ci0jZW5kaWYgLyogT1MyICovCi0KLVZPSUQKLSNpZmRlZiBPUzIKLXNo b2tleWNvZGUoYyxtKSBpbnQgYywgbTsKLSNlbHNlCi1zaG9rZXljb2RlKGMpIGludCBjOwotI2Vu ZGlmCi0vKiBzaG9rZXljb2RlICovIHsKLSAgICBLRVkgY2g7Ci0gICAgQ0hBUiAqczsKLSNpZmRl ZiBPUzIKLSAgICBpbnQgaTsKLSAgICBjb25fZXZlbnQga207Ci0jZWxzZSAvKiBPUzIgKi8KLSAg ICBpbnQga207Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBPUzIKLSAgICBleHRlcm4gaW50 IG1za2tleXM7Ci0gICAgY2hhciAqIG1zdHIgPSAiIjsKLQotICAgIGlmIChjID49IEtNU0laRSkg ewotICAgICAgICBibGVlcChCUF9GQUlMKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbHNl IC8qIE9TMiAqLwotICAgIHByaW50ZigiIEtleSBjb2RlIFxcJWQgPT4gIiwgYyk7Ci0jZW5kaWYg LyogT1MyICovCi0KLSNpZm5kZWYgT1MyCi0gICAga20gPSBtYXBrZXkoYyk7Ci0KLSNpZm5kZWYg Tk9LVkVSQlMKLSAgICBpZiAoSVNfS1ZFUkIoa20pKSB7ICAgICAgICAgICAgICAgICAvKiBcS3Zl cmI/ICovCi0gICAgICAgIGludCBpLCBrdjsKLSAgICAgICAga3YgPSBrbSAmIH4oRl9LVkVSQik7 Ci0gICAgICAgIHByaW50ZigiVmVyYjogIik7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBua3Zl cmJzOyBpKyspCi0gICAgICAgICAgaWYgKGt2ZXJic1tpXS5rd3ZhbCA9PSBrdikgewotICAgICAg ICAgICAgICBwcmludGYoIlxcSyVzIixrdmVyYnNbaV0ua3dkKTsKLSAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgfQotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgfSBlbHNlCi0jZW5k aWYgLyogTk9LVkVSQlMgKi8KLSAgICAgIGlmIChJU19DU0koa20pKSB7Ci0gICAgICAgICAgaW50 IHhrbSA9IGttICYgMHhGRjsKLSAgICAgICAgICBpZiAoeGttIDw9IDMyIHx8IHhrbSA+PSAxMjcp Ci0gICAgICAgICAgICBwcmludGYoIlN0cmluZzogXFx7Mjd9W1xceyVkfVxuIix4a20pOwotICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiU3RyaW5nOiBcXHsyN31bJWNcbiIseGtt KTsKLSAgICAgIH0gZWxzZSBpZiAoSVNfRVNDKGttKSkgewotICAgICAgICAgIGludCB4a20gPSBr bSAmIDB4RkY7Ci0gICAgICAgICAgaWYgKHhrbSA8PSAzMiB8fCB4a20gPj0gMTI3KQotICAgICAg ICAgICAgcHJpbnRmKCJTdHJpbmc6IFxcezI3fVxceyVkfVxuIix4a20pOwotICAgICAgICAgIGVs c2UKLSAgICAgICAgICAgIHByaW50ZigiU3RyaW5nOiBcXHsyN30lY1xuIix4a20pOwotICAgICAg fSBlbHNlIGlmIChtYWNyb3RhYltjXSkgeyAgICAgICAgIC8qIFNlZSBpZiB0aGVyZSdzIGEgbWFj cm8gKi8KLSAgICAgICAgICBwcmludGYoIlN0cmluZzogIik7ICAgICAgICAgICAvKiBJZiBzbywg ZGlzcGxheSBpdHMgZGVmaW5pdGlvbiAqLwotICAgICAgICAgIHMgPSBtYWNyb3RhYltjXTsKLSAg ICAgICAgICBzaG9zdHJkZWYocyk7Ci0gICAgICAgICAgcHJpbnRmKCJcbiIpOwotI2lmbmRlZiBO T0tWRVJCUwotICAgIH0gZWxzZSBpZiAoa20gPj0gMHgxMDApIHsgICAgICAgICAgIC8qIFRoaXMg bWVhbnMgInVuZGVmaW5lZCIgKi8KLSAgICAgICAgcHJpbnRmKCJVbmRlZmluZWRcbiIpOwotI2Vu ZGlmIC8qIE5PS1ZFUkJTICovCi0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTm8gbWFjcm8sIHNob3cgc2luZ2xlIGNoYXJhY3RlciAqLwotICAgICAgICBwcmludGYo IkNoYXJhY3RlcjogIik7Ci0gICAgICAgIGNoID0ga207Ci0gICAgICAgIGlmIChjaCA8IDMyIHx8 IGNoID09IDEyNwotI2lmZGVmIE9TMgotICAgICAgICAgICAgfHwgY2ggPiAyNTUKLSNlbmRpZiAv KiBPUzIgKi8KLSNpZm5kZWYgTkVYVAotI2lmbmRlZiBBVVgKLSNpZm5kZWYgWEVOSVgKLSNpZm5k ZWYgT1MyCi0gICAgICAgICAgICB8fCAoY2ggPiAxMjcgJiYgY2ggPCAxNjApCi0jZW5kaWYgLyog T1MyICovCi0jZW5kaWYgLyogWEVOSVggKi8KLSNlbmRpZiAvKiBBVVggKi8KLSNlbmRpZiAvKiBO RVhUICovCi0gICAgICAgICAgICApCi0vKgotICBUaGVzZSB1c2VkIHRvIGJlICVkLCBidXQgZ2Nj IDEuOTMgJiBsYXRlciBjb21wbGFpbiBhYm91dCB0eXBlIG1pc21hdGNoZXMuCi0gICV1IGlzIHN1 cHBvc2VkIHRvIGJlIHRvdGFsbHkgcG9ydGFibGUuCi0qLwotICAgICAgICAgIHByaW50ZigiXFwl dSIsKHVuc2lnbmVkIGludCkgY2gpOwotICAgICAgICBlbHNlIHByaW50ZigiJWMgXFwldSIsKENI QVIpIChjaCAmIDB4ZmYpLCh1bnNpZ25lZCBpbnQpIGNoKTsKLSAgICAgICAgaWYgKGNoID09IChL RVkpIGMpCi0gICAgICAgICAgcHJpbnRmKCIgKHNlbGYsIG5vIHRyYW5zbGF0aW9uKVxuIik7Ci0g ICAgICAgIGVsc2UKLSAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgfQotI2Vsc2UgLyogT1My ICovCi0gICAgaWYgKG0gPCAwKSB7Ci0gICAgICAgIGttID0gbWFwa2V5KGMpOwotICAgICAgICBt c3RyID0gImRlZmF1bHQiOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGttID0gbWFwdGVybWtleShj LG0pOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnNob2tleW07IGkrKykgewotICAgICAgICAg ICAgaWYgKG0gPT0gc2hva2V5bXRhYltpXS5rd3ZhbCkgewotICAgICAgICAgICAgICAgIG1zdHIg PSBzaG9rZXltdGFiW2ldLmt3ZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgIH0KLSAgICBzID0ga2V5bmFtZShjKTsKLSAgICBkZWJ1ZyhGMTEx LCJzaG9rZXljb2RlIG1zdHIiLG1zdHIsbSk7Ci0gICAgZGVidWcoRjExMSwic2hva2V5Y29kZSBr ZXluYW1lIixzLGMpOwotICAgIHByaW50ZigiICVzS2V5IGNvZGUgXFwlZCAlcyAoJXMpID0+ICIs Ci0gICAgICAgICAgICBtc2trZXlzID8gIm1za2VybWl0ICIgOiAiIiwKLSAgICAgICAgICAgIG1z a2tleXMgPyBja3RvbXNrKGMpIDogYywKLSAgICAgICAgICAgIHMgPT0gTlVMTCA/ICIiIDogcywg bXN0cik7Ci0KLSAgICBzd2l0Y2ggKGttLnR5cGUpIHsKLSNpZm5kZWYgTk9LVkVSQlMKLSAgICAg IGNhc2Uga3ZlcmI6IHsKLSAgICAgICAgICBpbnQgaSwga3Y7Ci0gICAgICAgICAga3YgPSBrbS5r dmVyYi5pZCAmIH4oRl9LVkVSQik7Ci0gICAgICAgICAgcHJpbnRmKCJWZXJiOiAiKTsKLSAgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgbmt2ZXJiczsgaSsrKSB7Ci0gICAgICAgICAgICAgIGlmIChr dmVyYnNbaV0ua3d2YWwgPT0ga3YpIHsKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiXFxLJXMi LGt2ZXJic1tpXS5rd2QpOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg IH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgIGJyZWFr OwotICAgICAgfQotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0gICAgICBjYXNlIGNzaTogewotICAg ICAgICAgIGludCB4a20gPSBrbS5jc2kua2V5ICYgMHhGRjsKLSAgICAgICAgICBpZiAoeGttIDw9 IDMyIHx8IHhrbSA+PSAxMjcpCi0gICAgICAgICAgICBwcmludGYoIlN0cmluZzogXFx7Mjd9W1xc eyVkfVxuIix4a20pOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiU3RyaW5n OiBcXHsyN31bJWNcbiIseGttKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNh c2UgZXNjOiB7Ci0gICAgICAgICAgaW50IHhrbSA9IGttLmVzYy5rZXkgJiAweEZGOwotICAgICAg ICAgIGlmICh4a20gPD0gMzIgfHwgeGttID49IDEyNykKLSAgICAgICAgICAgIHByaW50ZigiU3Ry aW5nOiBcXHslZH1cXHslZH1cbiIsSVNERzIwMCh0dF90eXBlKT8zMDoyNyx4a20pOwotICAgICAg ICAgIGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiU3RyaW5nOiBcXHslZH0lY1xuIixJU0RHMjAw KHR0X3R5cGUpPzMwOjI3LHhrbSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBj YXNlIG1hY3JvOiB7Ci0gICAgICAgICAgcHJpbnRmKCJTdHJpbmc6ICIpOyAgICAgICAgICAgLyog TWFjcm8sIGRpc3BsYXkgaXRzIGRlZmluaXRpb24gKi8KLSAgICAgICAgICBzaG9zdHJkZWYoa20u bWFjcm8uc3RyaW5nKTsKLSAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgYnJlYWs7 Ci0gICAgICB9Ci0gICAgICBjYXNlIGxpdGVyYWw6IHsKLSAgICAgICAgICBwcmludGYoIkxpdGVy YWwgc3RyaW5nOiAiKTsgICAvKiBMaXRlcmFsLCBkaXNwbGF5IGl0cyBkZWZpbml0aW9uICovCi0g ICAgICAgICAgc2hvc3RyZGVmKGttLmxpdGVyYWwuc3RyaW5nKTsKLSAgICAgICAgICBwcmludGYo IlxuIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIGVycm9yOiB7Ci0g ICAgICAgICAgaWYgKGMgPj0gMHgxMDApIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCJVbmRlZmlu ZWRcbiIpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHByaW50ZigiQ2hhcmFj dGVyOiAiKTsKLSAgICAgICAgICAgICAgY2ggPSBjOwotICAgICAgICAgICAgICBpZiAoY2ggPCAz MiB8fCBjaCA9PSAxMjcgfHwgY2ggPiAyNTUKLSNpZm5kZWYgTkVYVAotI2lmbmRlZiBBVVgKLSNp Zm5kZWYgWEVOSVgKLSNpZm5kZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgfHwgKGNoID4gMTI3 ICYmIGNoIDwgMTYwKQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFhFTklYICovCi0jZW5k aWYgLyogQVVYICovCi0jZW5kaWYgLyogTkVYVCAqLwotICAgICAgICAgICAgICAgICAgICkKLS8q Ci0gIFRoZXNlIHVzZWQgdG8gYmUgJWQsIGJ1dCBnY2MgMS45MyAmIGxhdGVyIGNvbXBsYWluIGFi b3V0IHR5cGUgbWlzbWF0Y2hlcy4KLSAgJXUgaXMgc3VwcG9zZWQgdG8gYmUgdG90YWxseSBwb3J0 YWJsZS4KLSovCi0gICAgICAgICAgICAgICAgICBwcmludGYoIlxcJXUiLCh1bnNpZ25lZCBpbnQp IGNoKTsKLSAgICAgICAgICAgICAgZWxzZSBwcmludGYoIiVjIFxcJXUiLChDSEFSKSAoY2ggJiAw eGZmKSwodW5zaWduZWQgaW50KSBjaCk7Ci0gICAgICAgICAgICAgIHByaW50ZigiIChzZWxmLCBu byB0cmFuc2xhdGlvbilcbiIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAg IH0KLSAgICAgIGNhc2Uga2V5OiB7Ci0gICAgICAgICAgcHJpbnRmKCJDaGFyYWN0ZXI6ICIpOwot ICAgICAgICAgIGNoID0ga20ua2V5LnNjYW5jb2RlOwotICAgICAgICAgIGlmIChjaCA8IDMyIHx8 IGNoID09IDEyNyB8fCBjaCA+IDI1NQotI2lmbmRlZiBORVhUCi0jaWZuZGVmIEFVWAotI2lmbmRl ZiBYRU5JWAotI2lmbmRlZiBPUzIKLSAgICAgICAgICAgICAgfHwgKGNoID4gMTI3ICYmIGNoIDwg MTYwKQotI2Vsc2UKLSAgICAgICAgICAgICAgIHx8IChjaCA+IDEyNykKLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbmRpZiAvKiBYRU5JWCAqLwotI2VuZGlmIC8qIEFVWCAqLwotI2VuZGlmIC8qIE5FWFQg Ki8KLSAgICAgICAgICAgICAgKQotLyoKLSAgVGhlc2UgdXNlZCB0byBiZSAlZCwgYnV0IGdjYyAx LjkzICYgbGF0ZXIgY29tcGxhaW4gYWJvdXQgdHlwZSBtaXNtYXRjaGVzLgotICAldSBpcyBzdXBw b3NlZCB0byBiZSB0b3RhbGx5IHBvcnRhYmxlLgotKi8KLSAgICAgICAgICAgIHByaW50ZigiXFwl dSIsKHVuc2lnbmVkIGludCkgY2gpOwotICAgICAgICAgIGVsc2UgcHJpbnRmKCIlYyBcXCV1Iiwo Q0hBUikgKGNoICYgMHhmZiksKHVuc2lnbmVkIGludCkgY2gpOwotICAgICAgICAgIGlmIChjaCA9 PSAoS0VZKSBjKQotICAgICAgICAgICAgcHJpbnRmKCIgKHNlbGYsIG5vIHRyYW5zbGF0aW9uKVxu Iik7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAg IGJyZWFrOwotICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLX0KLSNlbmRpZiAvKiBO T1NFVEtFWSAqLwotCi1WT0lECi1zaG9zdHJkZWYocykgQ0hBUiAqIHM7IHsKLSAgICBDSEFSIGNo OwotICAgIGlmICghcykgcyA9IChDSEFSICopIiI7Ci0gICAgd2hpbGUgKChjaCA9ICpzKyspKSB7 Ci0gICAgICAgIGlmIChjaCA8IDMyIHx8IGNoID09IDEyNyB8fCBjaCA9PSAyNTUKLS8qCi0gIFN5 c3RlbXMgd2hvc2UgbmF0aXZlIGNoYXJhY3RlciBzZXRzIGhhdmUgZ3JhcGhpYyBjaGFyYWN0ZXJz IGluIEMxLi4uCi0qLwotI2lmbmRlZiBORVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE5lWFQgKi8KLSNpZm5kZWYgQVVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNp bnRvc2ggKi8KLSNpZm5kZWYgWEVOSVggICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJQk0g UEMgKi8KLSNpZmRlZiBPUzIKLS8qCi0gIEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgdGhlIGxv Y2FsIGhvc3QgY2FuIGRpc3BsYXkgOC1iaXQgY2hhcmFjdGVyczsKLSAgdGhleSBhcmUgbm90IHBv cnRhYmxlIGFtb25nIGNoYXJhY3Rlci1zZXRzIGFuZCBmb250cy4gIFdobyBrbm93cyB3aGF0Ci0g IHdvdWxkIGJlIGRpc3BsYXllZC4uLgotKi8KLSAgICAgICAgICAgIHx8IChjaCA+IDEyNykKLSNl bHNlIC8qIE9TMiAqLwotICAgICAgICAgICAgfHwgKGNoID4gMTI3ICYmIGNoIDwgMTYwKQotI2Vu ZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFhFTklYICovCi0jZW5kaWYgLyogQVVYICovCi0jZW5k aWYgLyogTkVYVCAqLwotICAgICAgICAgICAgKQotICAgICAgICAgIHByaW50ZigiXFx7JWR9Iixj aCk7ICAgICAgICAgIC8qIERpc3BsYXkgY29udHJvbCBjaGFyYWN0ZXJzICovCi0gICAgICAgIGVs c2UgcHV0Y2hhcigoY2hhcikgY2gpOyAgICAgICAgLyogaW4gYmFja3NsYXNoIG5vdGF0aW9uICov Ci0gICAgfQotfQotCi0jZGVmaW5lIHh4ZGlmZih2LHN5cykgc3RybmNtcCh2LHN5cyxzdHJsZW4o c3lzKSkKLQotI2lmbmRlZiBOT1NIT1cKLVZPSUQKLXNob3ZlcigpIHsKLSNpZmRlZiBPUzIKLSAg ICBleHRlcm4gY2hhciBja3hzeXN0ZW1bXTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBleHRlcm4g Y2hhciAqY2tfcGF0Y2gsICogY2tsaWJ2OwotICAgIHByaW50ZigiXG5WZXJzaW9uczpcbiAlc1xu Iix2ZXJzaW8pOwotICAgIHByaW50ZigiIE51bWVyaWM6ICVsZFxuIix2ZXJudW0pOwotI2lmZGVm IE9TMgotICAgIHByaW50ZigiIE9wZXJhdGluZyBTeXN0ZW06ICVzXG4iLCBja3hzeXN0ZW0pOwot I2Vsc2UgLyogT1MyICovCi0gICAgcHJpbnRmKCIgQnVpbHQgZm9yOiAlc1xuIiwgY2t4c3lzKTsK LSNpZmRlZiBDS19VVFNOQU1FCi0gICAgaWYgKHVubV9uYW1bMF0pCi0gICAgICBwcmludGYoIiBS dW5uaW5nIG9uOiAlcyAlcyAlcyAlc1xuIiwgdW5tX25hbSx1bm1fdmVyLHVubV9yZWwsdW5tX21j aCk7Ci0jZW5kaWYgLyogQ0tfVVRTTkFNRSAqLwotICAgIHByaW50ZigiIFBhdGNoZXM6ICVzXG4i LCAqY2tfcGF0Y2ggPyBja19wYXRjaCA6ICIobm9uZSkiKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAg ICBpZiAoeHhkaWZmKGNreHYsY2t4c3lzKSkKLSAgICAgIHByaW50ZigiICVzIGZvciVzXG4iLGNr eHYsY2t4c3lzKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIiAlc1xuIixja3h2KTsKLSAgICBp ZiAoeHhkaWZmKGNrenYsY2t6c3lzKSkKLSAgICAgIHByaW50ZigiICVzIGZvciVzXG4iLGNrenYs Y2t6c3lzKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIiAlc1xuIixja3p2KTsKLSAgICBwcmlu dGYoIiAlc1xuIixja2xpYnYpOwotICAgIHByaW50ZigiICVzXG4iLHByb3R2KTsKLSAgICBwcmlu dGYoIiAlc1xuIixmbnN2KTsKLSAgICBwcmludGYoIiAlc1xuICVzXG4iLGNtZHYsdXNlcnYpOwot I2lmbmRlZiBOT0NTRVRTCi0gICAgcHJpbnRmKCIgJXNcbiIseGxhdik7Ci0jZW5kaWYgLyogTk9D U0VUUyAqLwotI2lmbmRlZiBNQUMKLSNpZm5kZWYgTk9MT0NBTAotICAgIHByaW50ZigiICVzXG4i LGNvbm52KTsKLSNpZmRlZiBPUzIKLSAgICBwcmludGYoIiAlc1xuIixja3l2KTsKLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jZW5kaWYgLyogTUFDICovCi0jaWZuZGVm IE5PRElBTAotICAgIHByaW50ZigiICVzXG4iLGRpYWx2KTsKLSNlbmRpZiAvKiBOT0RJQUwgKi8K LSNpZm5kZWYgTk9TQ1JJUFQKLSAgICBwcmludGYoIiAlc1xuIixsb2dpbnYpOwotI2VuZGlmIC8q IE5PU0NSSVBUICovCi0jaWZkZWYgTkVUQ09OTgotICAgIHByaW50ZigiICVzXG4iLGNrbmV0dik7 Ci0jaWZkZWYgT1MyCi0gICAgcHJpbnRmKCIgJXNcbiIsY2tvbmV0dik7Ci0jaWZkZWYgQ0tfTkVU QklPUwotICAgIHByaW50ZigiICVzXG4iLGNrb25iaXYpOwotI2VuZGlmIC8qIENLX05FVEJJT1Mg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0jaWZkZWYgVE5DT0RF Ci0gICAgcHJpbnRmKCIgJXNcbiIsY2t0ZWx2KTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNpZmRl ZiBTU0hCVUlMVElOCi0gICAgcHJpbnRmKCIgJXNcbiIsY2tzc2h2KTsKLSNpZmRlZiBTRlRQX0JV SUxUSU4KLSAgICBwcmludGYoIiAlc1xuIixja3NmdHB2KTsKLSNlbmRpZiAvKiBTRlRQX0JVSUxU SU4gKi8KLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZkZWYgT1MyCi0jaWZkZWYgT1MyTU9V U0UKLSAgICBwcmludGYoIiAlc1xuIixja29tb3V2KTsKLSNlbmRpZiAvKiBPUzJNT1VTRSAqLwot I2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIE5FV0ZUUAotICAgIHByaW50ZigiICVzXG4iLGNrZnRw dik7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICBw cmludGYoIiAlc1xuIixja2F0aHYpOwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0j aWZkZWYgQ0tfRU5DUllQVElPTgotI2lmZGVmIENSWVBUX0RMTAotICAgIHByaW50ZigiICVzXG4i LGNrX2NyeXB0X2RsbF92ZXJzaW9uKCkpOwotI2Vsc2UgLyogQ1JZUFRfRExMICovCi0gICAgcHJp bnRmKCIgJXNcbiIsY2tjcnB2KTsKLSNlbmRpZiAvKiBDUllQVF9ETEwgKi8KLSNlbmRpZiAvKiBD S19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgcHJpbnRmKCIgJXNcbiIsY2tzc2x2 KTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICBwcmludGYoIlxuIik7Ci19Ci0KLSNpZmRlZiBD S19MQUJFTEVECi1WT0lECi1zaG9sYmwoKSB7Ci0jaWZkZWYgVk1TCi0gICAgcHJpbnRmKCJWTVMg TGFiZWxlZCBGaWxlIEZlYXR1cmVzOlxuIik7Ci0gICAgcHJpbnRmKCIgYWNsICVzIChBQ0wgaW5m byAlcylcbiIsCi0gICAgICAgICAgIHNob3dvZmYobGZfb3B0cyAmIExCTF9BQ0wpLAotICAgICAg ICAgICBsZl9vcHRzICYgTEJMX0FDTCA/ICJwcmVzZXJ2ZWQiIDogImRpc2NhcmRlZCIpOwotICAg IHByaW50ZigiIGJhY2t1cC1kYXRlICVzIChiYWNrdXAgZGF0ZS90aW1lICVzKVxuIiwKLSAgICAg ICAgICAgc2hvd29mZihsZl9vcHRzICYgTEJMX0JDSyksCi0gICAgICAgICAgIGxmX29wdHMgJiBM QkxfQkNLID8gInByZXNlcnZlZCIgOiAiZGlzY2FyZGVkIik7Ci0gICAgcHJpbnRmKCIgbmFtZSAl cyAob3JpZ2luYWwgZmlsZW5hbWUgJXMpXG4iLAotICAgICAgICAgICBzaG93b2ZmKGxmX29wdHMg JiBMQkxfTkFNKSwKLSAgICAgICAgICAgbGZfb3B0cyAmIExCTF9OQU0gPyAicHJlc2VydmVkIiA6 ICJkaXNjYXJkZWQiKTsKLSAgICBwcmludGYoIiBvd25lciAlcyAob3JpZ2luYWwgZmlsZSBvd25l ciBpZCAlcylcbiIsCi0gICAgICAgICAgIHNob3dvZmYobGZfb3B0cyAmIExCTF9PV04pLAotICAg ICAgICAgICBsZl9vcHRzICYgTEJMX09XTiA/ICJwcmVzZXJ2ZWQiIDogImRpc2NhcmRlZCIpOwot ICAgIHByaW50ZigiIHBhdGggJXMgKG9yaWdpbmFsIGZpbGUncyBkaXNrOltkaXJlY3RvcnldICVz KVxuIiwKLSAgICAgICAgICAgc2hvd29mZihsZl9vcHRzICYgTEJMX1BUSCksCi0gICAgICAgICAg IGxmX29wdHMgJiBMQkxfUFRIID8gInByZXNlcnZlZCIgOiAiZGlzY2FyZGVkIik7Ci0jZWxzZQot I2lmZGVmIE9TMgotICAgIHByaW50ZigiT1MvMiBMYWJlbGVkIEZpbGUgZmVhdHVyZXMgKGF0dHJp YnV0ZXMpOlxuIik7Ci0gICAgcHJpbnRmKCIgYXJjaGl2ZTogICAlc1xuIiwgc2hvd29mZihsZl9v cHRzICYgTEJMX0FSQykpOwotICAgIHByaW50ZigiIGV4dGVuZGVkOiAgJXNcbiIsIHNob3dvZmYo bGZfb3B0cyAmIExCTF9FWFQpKTsKLSAgICBwcmludGYoIiBoaWRkZW46ICAgICVzXG4iLCBzaG93 b2ZmKGxmX29wdHMgJiBMQkxfSElEKSk7Ci0gICAgcHJpbnRmKCIgcmVhZC1vbmx5OiAlc1xuIiwg c2hvd29mZihsZl9vcHRzICYgTEJMX1JPICkpOwotICAgIHByaW50ZigiIHN5c3RlbTogICAgJXNc biIsIHNob3dvZmYobGZfb3B0cyAmIExCTF9TWVMpKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRp ZiAvKiBWTVMgKi8KLX0KLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0KLVZPSUQKLXNob3Rjcyhj c2wsY3NyKSBpbnQgY3NsLCBjc3I7IHsgICAgICAgICAvKiBTaG93IHRlcm1pbmFsIGNoYXJhY3Rl ciBzZXQgKi8KLSNpZm5kZWYgTk9DU0VUUwotI2lmZGVmIE9TMgotI2lmbmRlZiBOT1RFUk0KLSAg ICBleHRlcm4gc3RydWN0IF92dEcgR1s0XSwgKkdMLCAqR1I7Ci0gICAgZXh0ZXJuIGludCBkZWNu cmNtLCBzbmlfY2hjb2RlOwotICAgIGV4dGVybiBpbnQgdHRfdXRmOCwgZGVjX25yYywgZGVjX2ti ZCwgZGVjX2xhbmc7Ci0gICAgZXh0ZXJuIHBybmNzOwotCi0gICAgcHJpbnRmKCIgVGVybWluYWwg Y2hhcmFjdGVyLXNldHM6XG4iKTsKLSAgICBpZiAoSVM5NzgwMSh0dF90eXBlX21vZGUpKSB7Ci0g ICAgICAgIGlmIChjbWFzayA9PSAwMzc3KQotICAgICAgICAgIHByaW50ZigiICAgICBNb2RlOiA4 LWJpdCBNb2RlXG4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByaW50ZigiICAgICBNb2Rl OiA3LWJpdCBNb2RlXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICAgIENILkNPREUgaXMgJXNcbiIs c25pX2NoY29kZT8iT24iOiJPZmYiKTsKLSAgICB9IGVsc2UgaWYgKElTVlQxMDAodHRfdHlwZV9t b2RlKSkgewotICAgICAgICBpZiAoZGVjbnJjbSkKLSAgICAgICAgICBwcmludGYoIiAgICAgTW9k ZTogNy1iaXQgTmF0aW9uYWwgTW9kZVxuIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwcmlu dGYoIiAgICAgTW9kZTogOC1iaXQgTXVsdGluYXRpb25hbCBNb2RlXG4iKTsKLSAgICB9Ci0gICAg aWYgKCBpc3VuaWNvZGUoKSApCi0gICAgICAgIHByaW50ZigiICAgIExvY2FsOiBVbmljb2RlIGRp c3BsYXkgLyAlcyBpbnB1dFxuIiwKLSAgICAgICAgICAgICAgICBjc2wgPT0gVFhfVFJBTlNQID8g InRyYW5zcGFyZW50IiA6Ci0gICAgICAgICAgICAgICAgY3NsID09IFRYX1VOREVGID8gInVuZGVm aW5lZCIgOiB0eHJpbmZvW2NzbF0tPmtleXdkKTsKLSAgICBlbHNlCi0gICAgICAgIHByaW50Zigi ICAgIExvY2FsOiAlc1xuIiwKLSAgICAgICAgICAgICAgICBjc2wgPT0gVFhfVFJBTlNQID8gInRy YW5zcGFyZW50IiA6Ci0gICAgICAgICAgICAgICAgY3NsID09IFRYX1VOREVGID8gInVuZGVmaW5l ZCIgOiB0eHJpbmZvW2NzbF0tPmtleXdkKTsKLQotICAgIGlmICggdHRfdXRmOCApIHsKLSAgICAg ICAgcHJpbnRmKCIgICBSZW1vdGU6IFVURi04XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBw cmludGYoIiAgIFJlbW90ZTogJXNHMDogJXMgKCVzKVxuIiwKLSAgICAgICAgICAgR0wgPT0gJkdb MF0gPyAiR0wtPiIgOiBHUiA9PSAmR1swXSA/ICJHUi0+IiA6ICIgICAgIiwKLSAgICAgICAgICAg dHhyaW5mb1tHWzBdLmRlc2lnbmF0aW9uXS0+a2V5d2QsCi0gICAgICAgICAgIEdbMF0uZGVzaWdu YXRpb24gPT0gVFhfVFJBTlNQID8gIiIgOgotICAgICAgICAgICBHWzBdLnNpemUgPT0gY3M5NCA/ ICI5NCBjaGFycyIgOgotICAgICAgICAgICBHWzBdLnNpemUgPT0gY3M5NiA/ICI5NiBjaGFycyIg OiAibXVsdGktYnl0ZSIpOwotICAgICAgICBwcmludGYoIiAgICAgICAgICAgJXNHMTogJXMgKCVz KVxuIiwKLSAgICAgICAgICAgR0wgPT0gJkdbMV0gPyAiR0wtPiIgOiBHUiA9PSAmR1sxXSA/ICJH Ui0+IiA6ICIgICAgIiwKLSAgICAgICAgICAgdHhyaW5mb1tHWzFdLmRlc2lnbmF0aW9uXS0+a2V5 d2QsCi0gICAgICAgICAgIEdbMV0uZGVzaWduYXRpb24gPT0gVFhfVFJBTlNQID8gIiIgOgotICAg ICAgICAgICBHWzFdLnNpemUgPT0gY3M5NCA/ICI5NCBjaGFycyIgOgotICAgICAgICAgICBHWzFd LnNpemUgPT0gY3M5NiA/ICI5NiBjaGFycyIgOiAibXVsdGktYnl0ZSIpOwotICAgICAgICBwcmlu dGYoIiAgICAgICAgICAgJXNHMjogJXMgKCVzKVxuIiwKLSAgICAgICAgICAgR0wgPT0gJkdbMl0g PyAiR0wtPiIgOiBHUiA9PSAmR1syXSA/ICJHUi0+IiA6ICIgICAgIiwKLSAgICAgICAgICAgdHhy aW5mb1tHWzJdLmRlc2lnbmF0aW9uXS0+a2V5d2QsCi0gICAgICAgICAgIEdbMl0uZGVzaWduYXRp b24gPT0gVFhfVFJBTlNQID8gIiIgOgotICAgICAgICAgICBHWzJdLnNpemUgPT0gY3M5NCA/ICI5 NCBjaGFycyIgOgotICAgICAgICAgICBHWzJdLnNpemUgPT0gY3M5NiA/ICI5NiBjaGFycyIgOiAi bXVsdGktYnl0ZSIpOwotICAgICAgICBwcmludGYoIiAgICAgICAgICAgJXNHMzogJXMgKCVzKVxu IiwKLSAgICAgICAgICAgR0wgPT0gJkdbM10gPyAiR0wtPiIgOiBHUiA9PSAmR1szXSA/ICJHUi0+ IiA6ICIgICAgIiwKLSAgICAgICAgICAgdHhyaW5mb1tHWzNdLmRlc2lnbmF0aW9uXS0+a2V5d2Qs Ci0gICAgICAgICAgIEdbM10uZGVzaWduYXRpb24gPT0gVFhfVFJBTlNQID8gIiIgOgotICAgICAg ICAgICBHWzNdLnNpemUgPT0gY3M5NCA/ICI5NCBjaGFycyIgOgotICAgICAgICAgICBHWzNdLnNp emUgPT0gY3M5NiA/ICI5NiBjaGFycyIgOiAibXVsdGktYnl0ZSIpOwotICAgIH0KLSAgICBwcmlu dGYoIlxuIik7Ci0gICAgcHJpbnRmKCIgS2V5Ym9hcmQgY2hhcmFjdGVyLXNldHM6XG4iKTsKLSAg ICBwcmludGYoIiAgIE11bHRpbmF0aW9uYWw6ICVzXG4iLHR4cmluZm9bZGVjX2tiZF0tPmtleXdk KTsKLSAgICBwcmludGYoIiAgICAgICAgTmF0aW9uYWw6ICVzXG4iLHR4cmluZm9bZGVjX25yY10t PmtleXdkKTsKLSAgICBwcmludGYoIlxuIik7Ci0gICAgcHJpbnRmKCIgUHJpbnRlciBjaGFyYWN0 ZXItc2V0OiAlc1xuIix0eHJpbmZvW3BybmNzXS0+a2V5d2QpOwotI2VuZGlmIC8qIE5PVEVSTSAq LwotI2Vsc2UgLyogT1MyICovCi0jaWZuZGVmIE1BQwotICAgIGNoYXIgKnM7Ci0KLSAgICBkZWJ1 ZyhGMTAxLCJURVJNIExPQ0FMIENTRVQiLCIiLGNzbCk7Ci0gICAgZGVidWcoRjEwMSwiVEVSTSBS RU1PVEUgQ1NFVCIsIiIsY3NyKTsKLSAgICBwcmludGYoIiBUZXJtaW5hbCBjaGFyYWN0ZXItc2V0 OiAiKTsKLSAgICBpZiAodGNzX3RyYW5zcCkgeyAgICAgICAgICAgICAgICAgICAvKiBObyB0cmFu c2xhdGlvbiAqLwotICAgICAgICBwcmludGYoInRyYW5zcGFyZW50XG4iKTsKLSAgICB9IGVsc2Ug eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2xhdGlvbiAqLwotICAgICAgICBw cmludGYoIiVzIChyZW1vdGUpICVzIChsb2NhbClcbiIsCi0gICAgICAgICAgICAgICBmY3NpbmZv W2Nzcl0ua2V5d29yZCxmY3NpbmZvW2NzbF0ua2V5d29yZCk7Ci0gICAgICAgIGlmIChjc3IgIT0g Y3NsKSB7Ci0gICAgICAgICAgICBzd2l0Y2goZ2V0dGNzKGNzcixjc2wpKSB7Ci0gICAgICAgICAg ICAgIGNhc2UgVENfVVNBU0NJSTogIHMgPSAiYXNjaWkiOyAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgIGNhc2UgVENfMUxBVElOOiAgIHMgPSAibGF0aW4xLWlzbyI7ICAgYnJlYWs7Ci0gICAg ICAgICAgICAgIGNhc2UgVENfMkxBVElOOiAgIHMgPSAibGF0aW4yLWlzbyI7ICAgYnJlYWs7Ci0g ICAgICAgICAgICAgIGNhc2UgVENfQ1lSSUxMOiAgIHMgPSAiY3lyaWxsaWMtaXNvIjsgYnJlYWs7 Ci0gICAgICAgICAgICAgIGNhc2UgVENfSkVVQzogICAgIHMgPSAiamFwYW5lc2UtZXVjIjsgYnJl YWs7Ci0gICAgICAgICAgICAgIGNhc2UgVENfSEVCUkVXOiAgIHMgPSAiaGVicmV3LWlzbyI7ICAg YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVENfR1JFRUs6ICAgIHMgPSAiZ3JlZWstaXNvIjsg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVENfOUxBVElOOiAgIHMgPSAibGF0aW45LWlz byI7ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgIHMgPSAidHJhbnNw YXJlbnQiOyAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3RyY21wKHMs ZmNzaW5mb1tjc2xdLmtleXdvcmQpICYmCi0gICAgICAgICAgICAgICAgc3RyY21wKHMsZmNzaW5m b1tjc3JdLmtleXdvcmQpKQotICAgICAgICAgICAgICBwcmludGYoIiAgICAgICAgICAgICAgICAg ICAgICAgICAodmlhICVzKVxuIixzKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBNQUMg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi19Ci0KLSNpZm5kZWYg Tk9MT0NBTAotI2lmZGVmIE9TMgotZXh0ZXJuIGNoYXIgaHRhYltdOwotVk9JRAotc2hvdGFicygp IHsKLSAgICBpbnQgaSxqLGssbjsKLQotICAgIHByaW50ZigiVGFiIFN0b3BzOlxuXG4iKTsKLSAg ICBmb3IgKGkgPSAwLCBqID0gMSwgayA9IFZzY3JuR2V0V2lkdGgoVkNNRCk7IGkgPCBNQVhURVJN Q09MOyApIHsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgcHJpbnRmKCIlYyIsaHRhYlsrK2ld PT0nVCc/J1QnOictJyk7Ci0gICAgICAgIH0gd2hpbGUgKGkgJSBrICYmIGkgPCBNQVhURVJNQ09M KTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBmb3IgKCA7IGogPD0gaTsgaisrKSB7 Ci0gICAgICAgICAgICBzd2l0Y2ggKCBqJTEwICkgewotCSAgICAgIGNhc2UgMToKLSAgICAgICAg ICAgICAgICBwcmludGYoIiVjIixqID09IDEgPyAnMScgOiAnLicpOwotICAgICAgICAgICAgICAg IGJyZWFrOwotCSAgICAgIGNhc2UgMjoKLQkgICAgICBjYXNlIDM6Ci0JICAgICAgY2FzZSA0Ogot CSAgICAgIGNhc2UgNToKLQkgICAgICBjYXNlIDY6Ci0JICAgICAgY2FzZSA3OgotICAgICAgICAg ICAgICAgIHByaW50ZigiJWMiLCcuJyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0JICAgICAg Y2FzZSA4OgotICAgICAgICAgICAgICAgIG4gPSAoaisyKS8xMDA7Ci0gICAgICAgICAgICAgICAg aWYgKG4pCi0JCSAgcHJpbnRmKCIlZCIsbik7Ci0gICAgICAgICAgICAgICAgZWxzZSAKLQkJICBw cmludGYoIiVjIiwnLicpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICAgIGNhc2UgOToK LSAgICAgICAgICAgICAgICBuID0gKGorMSklMTAwLzEwOwotICAgICAgICAgICAgICAgIGlmIChu KQotCQkgIHByaW50ZigiJWQiLG4pOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGo+OTApCi0J CSAgcHJpbnRmKCIwIik7Ci0gICAgICAgICAgICAgICAgZWxzZSAKLQkJICBwcmludGYoIiVjIiwn LicpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICAgIGNhc2UgMDoKLSAgICAgICAgICAg ICAgICBwcmludGYoIjAiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgfQotI2lmZGVmIENPTU1FTlQK LSAgICBmb3IgKGkgPSAxOyBpIDw9IDcwOyBpKyspCi0gICAgICBwcmludGYoIiVjIixodGFiW2ld PT0nVCc/J1QnOictJyk7Ci0gICAgcHJpbnRmKCJcbjEuLi4uLi4uMTAuLi4uLi4uLjIwLi4uLi4u Li4zMC4uLi4uLi4uNDAuLi4uLi4uLjUwLi4uLi4uLi42MFwKLS4uLi4uLi4uNzBcblxuIik7Ci0g ICAgZm9yICg7IGkgPD0gMTQwOyBpKyspCi0gICAgICBwcmludGYoIiVjIixodGFiW2ldPT0nVCc/ J1QnOictJyk7Ci0gICAgcHJpbnRmKCJcbi4uLi4uLi4uODAuLi4uLi4uLjkwLi4uLi4uLjEwMC4u Li4uLi4xMTAuLi4uLi4uMTIwLi4uLi4uLjEzMFwKLS4uLi4uLi4xNDBcblxuIik7Ci0gICAgZm9y ICg7IGkgPD0gMjEwOyBpKyspCi0gICAgICBwcmludGYoIiVjIixodGFiW2ldPT0nVCc/J1QnOict Jyk7Ci0gICAgcHJpbnRmKCJcbi4uLi4uLi4xNTAuLi4uLi4uMTYwLi4uLi4uLjE3MC4uLi4uLi4x ODAuLi4uLi4uMTkwLi4uLi4uLjIwMFwKLS4uLi4uLi4yMTBcblxuIik7Ci0gICAgZm9yICg7IGkg PD0gMjU1OyBpKyspCi0gICAgICBwcmludGYoIiVjIixodGFiW2ldPT0nVCc/J1QnOictJyk7Ci0g ICAgcHJpbnRmKCJcbi4uLi4uLi4yMjAuLi4uLi4uMjMwLi4uLi4uLjI0MC4uLi4uLi4yNTAuLjI1 NVxuIik7Ci0jZW5kaWYKLQotfQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwg Ki8KLQotI2lmZGVmIE9TMk1PVVNFCi1WT0lECi1zaG9tb3UoKSB7Ci0gICAgaW50IGJ1dHRvbiwg ZXZlbnQsIGlkLCBpOwotICAgIGNoYXIgKiBuYW1lID0gIiI7Ci0KLSAgICBwcmludGYoIk1vdXNl IHNldHRpbmdzOlxuIik7Ci0gICAgcHJpbnRmKCIgICBCdXR0b24gQ291bnQ6ICAgJWRcbiIsbW91 c2VidXR0b25jb3VudCgpKTsKLSAgICBwcmludGYoIiAgIEFjdGl2ZTogICAgICAgICAlc1xuXG4i LHNob3dvZmYodHRfbW91c2UpKTsKLQotICAgIGZvciAoYnV0dG9uID0gMDsgYnV0dG9uIDwgTU1C VVRUT05NQVg7IGJ1dHRvbisrKQotICAgICAgZm9yIChldmVudCA9IDA7IGV2ZW50IDwgTU1FVkVO VFNJWkU7IGV2ZW50KyspCi0gICAgICAgIGlmIChtb3VzZW1hcFtidXR0b25dW2V2ZW50XS50eXBl ICE9IGVycm9yKQotICAgICAgICAgIHN3aXRjaCAobW91c2VtYXBbYnV0dG9uXVtldmVudF0udHlw ZSkgewotICAgICAgICAgICAgY2FzZSBrZXk6Ci0gICAgICAgICAgICAgIHByaW50ZigiICAgJXMg PSBDaGFyYWN0ZXI6ICVjIFxcJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICBtb3VzZW5hbWUo YnV0dG9uLGV2ZW50KSwKLSAgICAgICAgICAgICAgICAgICAgIG1vdXNlbWFwW2J1dHRvbl1bZXZl bnRdLmtleS5zY2FuY29kZSwKLSAgICAgICAgICAgICAgICAgICAgIG1vdXNlbWFwW2J1dHRvbl1b ZXZlbnRdLmtleS5zY2FuY29kZSApOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg IGNhc2Uga3ZlcmI6Ci0gICAgICAgICAgICAgIGlkID0gbW91c2VtYXBbYnV0dG9uXVtldmVudF0u a3ZlcmIuaWQgJiB+KEZfS1ZFUkIpOwotICAgICAgICAgICAgICBpZiAoaWQgIT0gS19JR05PUkUp IHsKLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGk8IG5rdmVyYnM7IGkrKykKLSAgICAg ICAgICAgICAgICAgICAgaWYgKGlkID09IGt2ZXJic1tpXS5rd3ZhbCkgewotICAgICAgICAgICAg ICAgICAgICAgICAgbmFtZSA9IGt2ZXJic1tpXS5rd2Q7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgcHJpbnRm KCIgICAlcyA9IEt2ZXJiOiBcXEslc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBtb3Vz ZW5hbWUoYnV0dG9uLGV2ZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lCi0gICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgIGNhc2UgbWFjcm86Ci0gICAgICAgICAgICAgIHByaW50ZigiICAg JXMgPSBNYWNybzogIiwKLSAgICAgICAgICAgICAgICAgICAgIG1vdXNlbmFtZShidXR0b24sZXZl bnQpICk7Ci0gICAgICAgICAgICAgIHNob3N0cmRlZihtb3VzZW1hcFtidXR0b25dW2V2ZW50XS5t YWNyby5zdHJpbmcpOwotICAgICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIH0KLX0KLSNlbmRpZiAvKiBPUzJNT1VTRSAqLwotCi0jaWZuZGVm IE5PTE9DQUwKLVZPSUQKLXNob3RybSgpIHsKLSAgICBjaGFyICpzOwotICAgIGV4dGVybiBjaGFy ICogZ2V0aWFjdCgpOwotICAgIGV4dGVybiBpbnQgdHRfcHJpbnQsIGFkbF9lcnI7Ci0jaWZuZGVm IE5PVFJJR0dFUgotICAgIGV4dGVybiBjaGFyICogdHRfdHJpZ2dlcltdOwotI2VuZGlmIC8qIE5P VFJJR0dFUiAqLwotI2lmZGVmIENLVElETEUKLSAgICBleHRlcm4gY2hhciAqIHR0X2lkbGVzbmRf c3RyOwotICAgIGV4dGVybiBpbnQgdHRfaWRsZXNuZF90bW87Ci0gICAgZXh0ZXJuIGludCB0dF9p ZGxlbGltaXQsIHR0X2lkbGVhY3Q7Ci0jZW5kaWYgLyogQ0tUSURMRSAqLwotI2lmZGVmIE9TMgot ICAgIGV4dGVybiBpbnQgd3lfYXV0b3BhZ2UsIGF1dG9zY3JvbGwsIHNncmNvbG9ycywgY29sb3Jy ZXNldCwgdXNlcl9lcmFzZW1vZGUsCi0gICAgICBkZWNzY25tLCBkZWNzY25tX3VzciwgdHRfZGlm Zl91cGQsIHR0X3NlbmRkYXRhLAotICAgICAgd3lfYmxvY2tlbmQsIG1hcmdpbmJlbGwsIG1hcmdp bmJlbGxjb2wsIHR0X21vZGVjaGcsIGRndW5peDsKLSAgICBpbnQgbGluZXMgPSAwOwotI2lmZGVm IEtVSQotICAgIGV4dGVybiBDS0ZMT0FUIHR0X2xpbmVzcGFjaW5nW107Ci0gICAgZXh0ZXJuIHR0 X2N1cnNvcl9ibGluazsKLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBQQ0ZPTlRTCi0gICAgaW50 IGk7Ci0gICAgY2hhciAqZm9udDsKLQotICAgIGlmIChJc09TMkZ1bGxTY3JlZW4oKSkgeyAgICAg ICAgICAgIC8qIERldGVybWluZSB0aGUgZm9udCBuYW1lICovCi0gICAgICAgIGlmICghb3MyTG9h ZFBDRm9udHMoKSkgewotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG50ZXJtZm9udDsgaSsr KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHR0X2ZvbnQgPT0gdGVybV9mb250W2ldLmt3dmFsKSB7 Ci0gICAgICAgICAgICAgICAgICAgIGZvbnQgPSB0ZXJtX2ZvbnRbaV0ua3dkOwotICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb250ID0gIihETEwgbm90IGF2YWlsYWJsZSkiOwot ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9udCA9ICAgICAiKGZ1bGwgc2NyZWVu IG9ubHkpIjsKLSAgICB9Ci0jZW5kaWYgLyogUENGT05UUyAqLwotI2lmZGVmIEtVSQotICAgIGNo YXIgZm9udFs2NF0gPSAiKHVua25vd24pIjsKLSAgICBpZiAoIG50ZXJtZm9udCA+IDAgKSB7Ci0g ICAgICAgIGludCBpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnRlcm1mb250OyBpKyspIHsK LSAgICAgICAgICAgIGlmICh0dF9mb250ID09IHRlcm1fZm9udFtpXS5rd3ZhbCkgewotICAgICAg ICAgICAgICAgIGNrc3RybmNweShmb250LHRlcm1fZm9udFtpXS5rd2QsNTkpOwotICAgICAgICAg ICAgICAgIGNrc3RybmNhdChmb250LCIgIiw2NCk7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY2F0 KGZvbnQsY2tpdG9hKHR0X2ZvbnRfc2l6ZS8yKSw2NCk7Ci0gICAgICAgICAgICAgICAgaWYgKCB0 dF9mb250X3NpemUgJSAyICkKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KGZvbnQsIi41 Iiw2NCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSAgICB9Ci0jZW5kaWYgLyogS1VJICovCi0KLSAgICBwcmludGYoIlRlcm1pbmFsIHBhcmFtZXRl cnM6XG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHByaW50ZigiICUxOXM6ICUxZCUtMTJz ICAlMTNzOiAlMWQlLTE0c1xuIiwKLSAgICAgICAgICAgIkJ5dGVzaXplOiBDb21tYW5kIiwKLSAg ICAgICAgICAgKGNtZG1zayA9PSAwMzc3KSA/IDggOiA3LAotICAgICAgICAgICAiIGJpdHMiLCJU ZXJtaW5hbCIsCi0gICAgICAgICAgIChjbWFzayA9PSAwMzc3KSA/IDggOiA3LCIgYml0cyIpOwot ICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47 IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIgJTE5czogJS0xM3MiLCJUeXBlIiwKLSAg ICAgICAgICAgKHR0X3R5cGUgPj0gMCAmJiB0dF90eXBlIDw9IG1heF90dCkgPwotICAgICAgICAg ICB0dF9pbmZvW3R0X3R5cGVdLnhfbmFtZSA6Ci0gICAgICAgICAgICJ1bmtub3duIiApOwotICAg IGlmICh0dF90eXBlID49IDAgJiYgdHRfdHlwZSA8PSBtYXhfdHQpCi0gICAgICBpZiAoc3RybGVu KHR0X2luZm9bdHRfdHlwZV0ueF9pZCkpCi0gICAgICAgIHByaW50ZigiICAlMTNzOiA8RVNDPiVz IiwiSUQiLHR0X2luZm9bdHRfdHlwZV0ueF9pZCk7Ci0gICAgcHJpbnRmKCJcbiIpOwotICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2Ug bGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLCJF Y2hvIiwKLSAgICAgICAgICAgZHVwbGV4ID8gImxvY2FsIiA6ICJyZW1vdGUiLCJMb2NraW5nLXNo aWZ0IixzaG93b2ZmKHNvc2kpKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHByaW50ZigiICUx OXM6ICUtMTNzICAlMTNzOiAlLTE1c1xuIiwiTmV3bGluZS1tb2RlIiwgc2hvd29mZih0bmxtKSwK LQkgICAiQ3ItZGlzcGxheSIsdHRfY3JkID8gImNybGYiIDogIm5vcm1hbCIpOwotICAgIGlmICgr K2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGlu ZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLCJDdXJz b3IiLAotI2lmZGVmIEtVSQotCSAgICAodHRfY3Vyc29yID09IDIpID8gKHR0X2N1cnNvcl9ibGlu ayA/IAotCQkJCSAiZnVsbCAoKikiIDogImZ1bGwgKC4pIikgOgotCSAgICAodHRfY3Vyc29yID09 IDEpID8gKHR0X2N1cnNvcl9ibGluayA/IAotCQkJCSAiaGFsZiAoKikiIDogImhhbGYgKC4pIikg OgotCSAgICAodHRfY3Vyc29yX2JsaW5rID8gInVuZGVybGluZSAoKikiIDogInVuZGVybGluZSAo LikiKSwKLSNlbHNlIC8qIEtVSSAqLwotICAgICAgICAgICAodHRfY3Vyc29yID09IDIpID8gImZ1 bGwiIDoKLSAgICAgICAgICAgKHR0X2N1cnNvciA9PSAxKSA/ICJoYWxmIiA6ICJ1bmRlcmxpbmUi LAotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENLX0FVVE9ETAotICAgICAgICAgICAiYXV0b2Rv d25sb2FkIixhdXRvZGwgPT0gVEFEX09OID8KLSAgICAgICAgICAgKGFkbF9lcnIgPyAib24sIGVy cm9yIHN0b3AiIDogIm9uLCBlcnJvciBjb250aW51ZSIpIDogCi0gICAgICAgICAgIGF1dG9kbCA9 PSBUQURfQVNLID8gCi0gICAgICAgICAgIChhZGxfZXJyID8gImFzaywgZXJyb3Igc3RvcCIgOiAi YXNrLCBlcnJvciBjb250aW51ZSIpIDoKLSAgICAgICAgICAgIm9mZiIKLSNlbHNlIC8qIENLX0FV VE9ETCAqLwotICAgICAgICAgICAiIiwgIiIKLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSAgICAg ICAgICAgKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHByaW50ZigiICUxOXM6ICUtMTNzICAl MTNzOiAlLTE1c1xuIiwiQXJyb3cta2V5cyIsCi0gICAgICAgICAgIHR0X2Fycm93ID8gImFwcGxp Y2F0aW9uIiA6ICJjdXJzb3IiLAotICAgICAgICAgICAiS2V5cGFkLW1vZGUiLCB0dF9rZXlwYWQg PyAiYXBwbGljYXRpb24iIDogIm51bWVyaWMiCi0gICAgICAgICAgICk7Ci0KLSAgICBpZiAoKyts aW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVz ID0gMDsgfQotCi0gICAgLyogSnVzdCB0byBtYWtlIHN1cmUgd2UgYXJlIHVzaW5nIGN1cnJlbnQg aW5mbyAqLwotICAgIHVwZGFuc3dlcmJrKCk7Ci0KLSAgICAvKgotICAgICAgIFRoaXMgbGluZSBk b2Vzbid0IGVuZCB3aXRoICdcbicgYmVjYXVzZSB0aGUgYW5zd2VyYmFjayBzdHJpbmcKLSAgICAg ICBpcyB0ZXJtaW5hdGVkIHdpdGggYSBuZXdsaW5lCi0gICAgKi8KLSAgICBwcmludGYoIiAlMTlz OiAlLTEzcyAgJTEzczogJS0xNXMiLCJBbnN3ZXJiYWNrIiwKLSAgICAgICAgICAgc2hvd29mZih0 dF9hbnN3ZXIpLCJyZXNwb25zZSIsYW5zd2VyYmFjayk7Ci0gICAgc3dpdGNoICh0dF9iZWxsKSB7 Ci0gICAgICBjYXNlIFhZQl9OT05FOgotICAgICAgICBzID0gIm5vbmUiOwotICAgICAgICBicmVh azsKLSAgICAgIGNhc2UgWFlCX1ZJUzoKLSAgICAgICAgcz0gInZpc2libGUiOwotICAgICAgICBi cmVhazsKLSAgICAgIGNhc2UgWFlCX0FVRCB8IFhZQl9CRUVQOgotICAgICAgICBzPSJiZWVwIjsK LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhZQl9BVUQgfCBYWUJfU1lTOgotICAgICAgICBz PSJzeXN0ZW0gc291bmRzIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAg ICBzPSIodW5rbm93bikiOwotICAgIH0KLSAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAgJTEzczog JS0xNXNcbiIsIkJlbGwiLHMsCi0gICAgICAgICAgICJXcmFwIixzaG93b2ZmKHR0X3dyYXApKTsK LSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJu OyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHByaW50ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1 c1xuIiwiQXV0b3BhZ2UiLHNob3dvZmYod3lfYXV0b3BhZ2UpLAotICAgICAgICAgICAiQXV0b3Nj cm9sbCIsc2hvd29mZihhdXRvc2Nyb2xsKSk7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAt IDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBwcmlu dGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJS0xNXNcbiIsIlNHUiBDb2xvcnMiLHNob3dvZmYoc2dy Y29sb3JzKSwKLSAgICAgICAgICAgIkVTQ1swbSBjb2xvciIsY29sb3JyZXNldD8iZGVmYXVsdC1j b2xvciI6ImN1cnJlbnQtY29sb3IiKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykg eyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHByaW50Zigi ICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1c1xuIiwKLSAgICAgICAgICAgICJFcmFzZSBjb2xvciIs dXNlcl9lcmFzZW1vZGU/ImRlZmF1bHQtY29sb3IiOiJjdXJyZW50LWNvbG9yIiwKLSAgICAgICAg ICAgIlNjcmVlbiBtb2RlIixkZWNzY25tPyJyZXZlcnNlIjoibm9ybWFsIik7Ci0gICAgaWYgKCsr bGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5l cyA9IDA7IH0KLQotICAgIHByaW50ZigiICUxOXM6ICUtMTNkICAlMTNzOiAlLTE1ZFxuIiwiVHJh bnNtaXQtdGltZW91dCIsdHRfY3RzdG1vLAotICAgICAgICAgICAiT3V0cHV0LXBhY2luZyIsdHRf cGFjaW5nKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotCi0gICAgcHJpbnRmKCIgJTE5czogJS0xM2Qg ICUxM3M6ICVzXG4iLCJJZGxlLXRpbWVvdXQiLHR0X2lkbGVsaW1pdCwKLSAgICAgICAgICAgIklk bGUtYWN0aW9uIiwgZ2V0aWFjdCgpKTsKLQotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRm KCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLCJTZW5kIGRhdGEiLAotICAgICAgICAgIHNo b3dvZmYodHRfc2VuZGRhdGEpLCJFbmQgb2YgQmxvY2siLCB3eV9ibG9ja2VuZD8iY3JsZi9ldHgi OiJ1cy9jciIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0jaWZuZGVmIE5PVFJJR0dFUgotICAgIHBy aW50ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlZCBzZWNvbmRzXG4iLCJBdXRvLWV4aXQgdHJpZ2dl ciIsCi0gICAgICAgICAgIHR0X3RyaWdnZXJbMF0sIk91dHB1dCBwYWNpbmciLHR0X3BhY2luZyAp OwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1 cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogTk9UUklHR0VSICovCi0gICAgcHJpbnRm KCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVkXG4iLCJNYXJnaW4gYmVsbCIsCi0gICAgICAgICAg IHNob3dvZmYobWFyZ2luYmVsbCksImF0IGNvbHVtbiIsIG1hcmdpbmJlbGxjb2wpOwotICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2Ug bGluZXMgPSAwOyB9Ci0gICAgc3dpdGNoICh0dF9tb2RlY2hnKSB7Ci0gICAgICBjYXNlIFRWQ19E SVM6IHMgPSAiZGlzYWJsZWQiOyBicmVhazsKLSAgICAgIGNhc2UgVFZDX0VOQTogcyA9ICJlbmFi bGVkIjsgIGJyZWFrOwotICAgICAgY2FzZSBUVkNfVzk1OiBzID0gIndpbjk1LXJlc3RyaWN0ZWQi OyBicmVhazsKLSAgICAgIGRlZmF1bHQ6IHMgPSAiKHVua25vd24pIjsKLSAgICB9Ci0gICAgcHJp bnRmKCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLCJERyBVbml4IG1vZGUiLAotICAgICAg ICAgICBzaG93b2ZmKGRndW5peCksIlZpZGVvIGNoYW5nZSIsIHMpOwotICAgIGlmICgrK2xpbmVz ID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAw OyB9Ci0KLSNpZmRlZiBDS19BUEMKLSAgICBpZiAoYXBjc3RhdHVzID09IEFQQ19PTikgcyA9ICJv biI7Ci0gICAgZWxzZSBpZiAoYXBjc3RhdHVzID09IEFQQ19PRkYpIHMgPSAib2ZmIjsKLSAgICBl bHNlIGlmIChhcGNzdGF0dXMgPT0gQVBDX09OfEFQQ19VTkNIKSBzID0gInVuY2hlY2tlZCI7Ci0g ICAgZWxzZSBpZiAoYXBjc3RhdHVzID09IEFQQ19PTnxBUENfTk9JTlApIHMgPSAibm8taW5wdXQi OwotICAgIGVsc2UgaWYgKGFwY3N0YXR1cyA9PSBBUENfT058QVBDX1VOQ0h8QVBDX05PSU5QKSBz ID0gInVuY2hlY2tlZC1uby1pbnB1dCI7Ci0gICAgcHJpbnRmKCIgJTE5czogJS0xM3MgICUxM3M6 ICUtMTVzXG4iLAotICAgICAgICAgICAiQVBDIiwgcywKLSNpZmRlZiBQQ0ZPTlRTCi0gICAgICAg ICAgICJGb250IChWR0EpIixmb250Ci0jZWxzZSAvKiBQQ0ZPTlRTICovCi0jaWZkZWYgS1VJCi0g ICAgICAgICAgICJGb250Iixmb250Ci0jZWxzZQotICAgICAgICAgICAiRm9udCIsIihub3Qgc3Vw cG9ydGVkKSIKLSNlbmRpZiAvKiBLVUkgKi8KLSNlbmRpZiAvKiBQQ0ZPTlRTICovCi0KLSAgICAg ICAgICAgKTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dz IC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotCi0jaWZk ZWYgQ0tfVFRHV1NJWiAgICAgICAgICAgICAgICAgICAgICAgLyogQ29uc29sZSB0ZXJtaW5hbCBz Y3JlZW4gc2l6ZSAqLwotICAgIGlmICh0dF9jb2xzW1ZURVJNXSA8IDAgfHwgdHRfcm93c1tWVEVS TV0gPCAwKQotICAgICAgdHRnd3NpeigpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyeSB0 byBnZXQgbGF0ZXN0IHNpemUgKi8KLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0gICAgcHJpbnRm KCIgJTE5czogJS0xM2QgICUxM3M6ICUtMTVkXG4iLCJIZWlnaHQiLHR0X3Jvd3NbVlRFUk1dLAot ICAgICAgICAgICAiV2lkdGgiLHR0X2NvbHNbVlRFUk1dKTsKLSAgICBpZiAoKytsaW5lcyA+IGNt ZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQot I2lmZGVmIEtVSQotICAgIHByaW50ZigiICUxOXM6ICUtMTJmICAlMTRzOiAlLTE1ZFxuIiwiTGlu ZSBzcGFjaW5nIix0dF9saW5lc3BhY2luZ1tWVEVSTV0sCi0gICAgICAgICAgICJEaXNwbGF5IEhl aWdodCIsVnNjcm5HZXREaXNwbGF5SGVpZ2h0KFZURVJNKSk7Ci0gICAgaWYgKCsrbGluZXMgPiBj bWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0K LSNlbmRpZiAvKiBLVUkgKi8KLSAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJWQgbGlu ZXNcbiIsIlJvbGwtbW9kZSIsCi0gICAgICAgICAgdHRfcm9sbFtWVEVSTV0/Imluc2VydCI6Im92 ZXJ3cml0ZSIsIlNjcm9sbGJhY2siLCB0dF9zY3JzaXplW1ZURVJNXSk7Ci0gICAgaWYgKCsrbGlu ZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9 IDA7IH0KLQotICAgIGlmICh1cGRtb2RlID09IHR0X3VwZG1vZGUpCi0gICAgICBpZiAodXBkbW9k ZSA9PSBUVFVfRkFTVCkKLSAgICAgICAgcyA9ICJmYXN0IChmYXN0KSI7Ci0gICAgICBlbHNlCi0g ICAgICAgIHMgPSAic21vb3RoIChzbW9vdGgpIjsKLSAgICBlbHNlCi0gICAgICBpZiAodXBkbW9k ZSA9PSBUVFVfRkFTVCkKLSAgICAgICAgcyA9ICJmYXN0IChzbW9vdGgpIjsKLSAgICAgIGVsc2UK LSAgICAgICAgcyA9ICJzbW9vdGggKGZhc3QpIjsKLQotICAgIHByaW50ZigiICUxOXM6ICUtMTNz ICAlMTNzOiAlZCBtc1xuIiwiU2NyZWVuLXVwZGF0ZTogbW9kZSIscywKLSAgICAgICAgICAgImlu dGVydmFsIix0dF91cGRhdGUpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlm ICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIgJTE5 czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLAotICAgICAgICAgICAiU2NyZWVuLW9wdGltaXphdGlv biIsc2hvd29mZih0dF9kaWZmX3VwZCksCi0gICAgICAgICAgICJTdGF0dXMgbGluZSIsc2hvd29m Zih0dF9zdGF0dXNbVlRFUk1dKSk7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsg aWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBwcmludGYoIiAl MTlzOiAlLTEzcyAgJTEzczogJS0xNXNcbiIsIkRlYnVnIiwKLSAgICAgICAgICAgc2hvd29mZihk ZWJzZXMpLCJTZXNzaW9uIGxvZyIsIHNlc2xvZz8gc2VzZmlsIDogIihub25lKSIgKTsKLSAgICBp ZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNl IGxpbmVzID0gMDsgfQotCi0gICAgLyogRGlzcGxheSBjb2xvcnMgKHNob3VsZCBiZWNvbWUgU0hP VyBDT0xPUlMpICovCi0gICAgewotICAgICAgICBVU0hPUlQgcm93LCBjb2w7Ci0gICAgICAgIGNo YXIgKiBjb2xvcnNbMTZdID0gewotICAgICAgICAgICAgImJsYWNrIiwiYmx1ZSIsImdyZWVuIiwi Y3lhbiIsInJlZCIsIm1hZ2VudGEiLCJicm93biIsImxncmF5IiwKLSAgICAgICAgICAgICJkZ3Jh eSIsImxibHVlIiwibGdyZWVuIiwibGN5YW4iLCJscmVkIiwibG1hZ2VudCIsInllbGxvdyIsIndo aXRlIgotICAgICAgICB9OwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIGlmICgrK2xp bmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMg PSAwOyB9Ci0KLSAgICAgICAgcHJpbnRmKCIgQ29sb3I6Iik7Ci0jaWZuZGVmIE9ORVRFUk1VUEQK LSAgICAgICAgR2V0Q3VyUG9zKCZyb3csICZjb2wpOwotICAgICAgICBXcnRDaGFyU3RyQXR0KCJi b3JkZXIiLCAgICA2LCByb3csIDksICZjb2xvcmJvcmRlciApOwotICAgICAgICBXcnRDaGFyU3Ry QXR0KCJkZWJ1ZyIsICAgICA1LCByb3csIDE3LCAmY29sb3JkZWJ1ZyApOwotICAgICAgICBXcnRD aGFyU3RyQXR0KCJoZWxwdGV4dCIsICA4LCByb3csIDI1LCAmY29sb3JoZWxwICk7Ci0gICAgICAg IFdydENoYXJTdHJBdHQoInJldmVyc2UiLCAgIDcsIHJvdywgMzQsICZjb2xvcnJldmVyc2UgKTsK LSAgICAgICAgV3J0Q2hhclN0ckF0dCgic2VsZWN0IiwgICAgNiwgcm93LCA0MiwgJmNvbG9yc2Vs ZWN0ICk7Ci0gICAgICAgIFdydENoYXJTdHJBdHQoInN0YXR1cyIsICAgIDYsIHJvdywgNTAsICZj b2xvcnN0YXR1cyApOwotICAgICAgICBXcnRDaGFyU3RyQXR0KCJ0ZXJtaW5hbCIsICA4LCByb3cs IDU4LCAmY29sb3Jub3JtYWwgKTsKLSAgICAgICAgV3J0Q2hhclN0ckF0dCgidW5kZXJsaW5lIiwg OSwgcm93LCA2NywgJmNvbG9ydW5kZXJsaW5lICk7Ci0jZW5kaWYgLyogT05FVEVSTVVQRCAqLwot ICAgICAgICByb3cgPSBWc2NybkdldEN1clBvcyhWQ01EKS0+eSsxOwotICAgICAgICBWc2Nybldy dENoYXJTdHJBdHQoVkNNRCwgImJvcmRlciIsICAgIDYsIHJvdywgOSwgJmNvbG9yYm9yZGVyICk7 Ci0gICAgICAgIFZzY3JuV3J0Q2hhclN0ckF0dChWQ01ELCAiZGVidWciLCAgICAgNSwgcm93LCAx NywgJmNvbG9yZGVidWcgKTsKLSAgICAgICAgVnNjcm5XcnRDaGFyU3RyQXR0KFZDTUQsICJoZWxw dGV4dCIsICA4LCByb3csIDI1LCAmY29sb3JoZWxwICk7Ci0gICAgICAgIFZzY3JuV3J0Q2hhclN0 ckF0dChWQ01ELCAicmV2ZXJzZSIsICAgNywgcm93LCAzNCwgJmNvbG9ycmV2ZXJzZSApOwotICAg ICAgICBWc2NybldydENoYXJTdHJBdHQoVkNNRCwgInNlbGVjdCIsICAgIDYsIHJvdywgNDIsICZj b2xvcnNlbGVjdCApOwotICAgICAgICBWc2NybldydENoYXJTdHJBdHQoVkNNRCwgInN0YXR1cyIs ICAgIDYsIHJvdywgNTAsICZjb2xvcnN0YXR1cyApOwotICAgICAgICBWc2NybldydENoYXJTdHJB dHQoVkNNRCwgInRlcm1pbmFsIiwgIDgsIHJvdywgNTgsICZjb2xvcm5vcm1hbCApOwotICAgICAg ICBWc2NybldydENoYXJTdHJBdHQoVkNNRCwgInVuZGVybGluZSIsICA5LCByb3csIDY3LCAmY29s b3J1bmRlcmxpbmUgKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBpZiAoKytsaW5l cyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0g MDsgfQotCi0gICAgICAgIC8qIEZvcmVncm91bmQgY29sb3IgbmFtZXMgKi8KLSAgICAgICAgcHJp bnRmKCIlNnM6ICUtOHMlLThzJS05cyUtOHMlLThzJS04cyUtOXMlLTlzXG4iLCJmb3JlIiwKLSAg ICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JkZWJ1ZyYweDBG XSwKLSAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JoZWxwJjB4MEZdLAotICAgICAgICAgICAg ICAgIGNvbG9yc1tjb2xvcnJldmVyc2UmMHgwRl0sCi0gICAgICAgICAgICAgICAgY29sb3JzW2Nv bG9yc2VsZWN0JjB4MEZdLAotICAgICAgICAgICAgICAgIGNvbG9yc1tjb2xvcnN0YXR1cyYweDBG XSwKLSAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3Jub3JtYWwmMHgwRl0sCi0gICAgICAgICAg ICAgICAgY29sb3JzW2NvbG9ydW5kZXJsaW5lJjB4MEZdKTsKLSAgICAgICAgaWYgKCsrbGluZXMg PiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7 IH0KLQotICAgICAgICAvKiBCYWNrZ3JvdW5kIGNvbG9yIG5hbWVzICovCi0gICAgICAgIHByaW50 ZigiJTZzOiAlLThzJS04cyUtOXMlLThzJS04cyUtOHMlLTlzJS05c1xuIiwiYmFjayIsCi0gICAg ICAgICAgICAgICAgY29sb3JzW2NvbG9yYm9yZGVyXSwKLSAgICAgICAgICAgICAgICBjb2xvcnNb Y29sb3JkZWJ1Zz4+NF0sCi0gICAgICAgICAgICAgICAgY29sb3JzW2NvbG9yaGVscD4+NF0sCi0g ICAgICAgICAgICAgICAgY29sb3JzW2NvbG9ycmV2ZXJzZT4+NF0sCi0gICAgICAgICAgICAgICAg Y29sb3JzW2NvbG9yc2VsZWN0Pj40XSwKLSAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JzdGF0 dXM+PjRdLAotICAgICAgICAgICAgICAgIGNvbG9yc1tjb2xvcm5vcm1hbD4+NF0sCi0gICAgICAg ICAgICAgICAgY29sb3JzW2NvbG9ydW5kZXJsaW5lPj40XSApOwotICAgICAgICBpZiAoKytsaW5l cyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0g MDsgfQotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAg ICAgIHByaW50ZigiIENvbG9yOiIpOwotI2lmbmRlZiBPTkVURVJNVVBECi0gICAgICAgIEdldEN1 clBvcygmcm93LCAmY29sKTsKLSAgICAgICAgV3J0Q2hhclN0ckF0dCgiZ3JhcGhpYyIsICAgNywg cm93LCA5LCAmY29sb3JncmFwaGljICk7Ci0gICAgICAgIFdydENoYXJTdHJBdHQoImNvbW1hbmQi LCAgIDcsIHJvdywgMTcsICZjb2xvcmNtZCApOwotICAgICAgICBXcnRDaGFyU3RyQXR0KCJpdGFs aWMiLCAgICA2LCByb3csIDI2LCAmY29sb3JpdGFsaWMgKTsKLSNlbmRpZiAvKiBPTkVURVJNVVBE ICovCi0gICAgICAgIHJvdyA9IFZzY3JuR2V0Q3VyUG9zKFZDTUQpLT55KzE7Ci0gICAgICAgIFZz Y3JuV3J0Q2hhclN0ckF0dChWQ01ELCAiZ3JhcGhpYyIsICAgNywgcm93LCA5LCAgJmNvbG9yZ3Jh cGhpYyApOwotICAgICAgICBWc2NybldydENoYXJTdHJBdHQoVkNNRCwgImNvbW1hbmQiLCAgIDcs IHJvdywgMTcsICZjb2xvcmNtZCApOwotICAgICAgICBWc2NybldydENoYXJTdHJBdHQoVkNNRCwg Iml0YWxpYyIsICAgIDYsIHJvdywgMjYsICZjb2xvcml0YWxpYyApOwotICAgICAgICBwcmludGYo IlxuIik7Ci0gICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0KLSAgICAgICAgLyogRm9yZWdyb3VuZCBj b2xvciBuYW1lcyAqLwotICAgICAgICBwcmludGYoIiU2czogJS04cyUtOHMlLThzXG4iLCJmb3Jl IiwKLSAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JncmFwaGljJjB4MEZdLAotICAgICAgICAg ICAgICAgIGNvbG9yc1tjb2xvcmNtZCYweDBGXSwKLSAgICAgICAgICAgICAgICBjb2xvcnNbY29s b3JpdGFsaWMmMHgwRl0pOwotICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotCi0gICAgICAgIC8qIEJh Y2tncm91bmQgY29sb3IgbmFtZXMgKi8KLSAgICAgICAgcHJpbnRmKCIlNnM6ICUtOHMlLThzJS04 c1xuIiwiYmFjayIsCi0gICAgICAgICAgICAgICAgY29sb3JzW2NvbG9yZ3JhcGhpYz4+NF0sCi0g ICAgICAgICAgICAgICAgY29sb3JzW2NvbG9yY21kPj40XSwKLSAgICAgICAgICAgICAgICBjb2xv cnNbY29sb3JpdGFsaWM+PjRdKTsKLSAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICB9Ci0gICAg cHJpbnRmKCJcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNr bW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgewotICAgICAgICBleHRlcm4g aW50IHRydWVibGluaywgdHJ1ZWRpbSwgdHJ1ZXJldmVyc2UsIHRydWV1bmRlcmxpbmUsIHRydWVp dGFsaWM7Ci0gICAgICAgIHByaW50ZigKLQkgICAgIiBBdHRyaWJ1dGU6ICBcCi1ibGluazogJS0z cyAgZGltOiAlLTNzICBpdGFsaWM6ICUtM3MgIHJldmVyc2U6ICUtM3MgIHVuZGVybGluZTogJS0z c1xuIiwKLQkgICAgdHJ1ZWJsaW5rPyJvbiI6Im9mZiIsIHRydWVkaW0/Im9uIjoib2ZmIiwgdHJ1 ZWl0YWxpYz8ib24iOiJvZmYiLCAKLQkgICAgdHJ1ZXJldmVyc2U/Im9uIjoib2ZmIiwgdHJ1ZXVu ZGVybGluZT8ib24iOiJvZmYiKTsKLSAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICB9Ci0gICAg ewotICAgICAgICBleHRlcm4gdnRhdHRyaWIgV1BhdHRyaWI7Ci0gICAgICAgIHByaW50ZigiIEFT Q0lJIFByb3RlY3RlZCBjaGFyczogJXMlcyVzJXMlcyVzJXNcbiIsCi0gICAgICAgICAgICAgICAg V1BhdHRyaWIuYmxpbmtpbmc/ImJsaW5rICI6IiIsCi0gICAgICAgICAgICAgICAgV1BhdHRyaWIu aXRhbGljPyJpdGFsaWMgIjoiIiwKLSAgICAgICAgICAgICAgICBXUGF0dHJpYi5yZXZlcnNlZD8i cmV2ZXJzZSAiOiIiLAotICAgICAgICAgICAgICAgIFdQYXR0cmliLnVuZGVybGluZWQ/InVuZGVy bGluZSAiOiIiLAotICAgICAgICAgICAgICAgIFdQYXR0cmliLmJvbGQ/ImJvbGQgIjoiIiwKLSAg ICAgICAgICAgICAgICBXUGF0dHJpYi5kaW0/ImRpbSAiOiIiLAotICAgICAgICAgICAgICAgIFdQ YXR0cmliLmludmlzaWJsZT8iaW52aXNpYmxlICI6IiIpOwotICAgICAgICBpZiAoKytsaW5lcyA+ IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsg fQotICAgIH0KLQotICAgIHByaW50ZigiXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dz IC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIChW T0lEKSBzaG9lc2MoZXNjYXBlKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHByaW50ZigiIFNl ZSBTSE9XIENIQVJBQ1RFUi1TRVRTIGZvciBjaGFyYWN0ZXItc2V0IGluZm9cbiIpOwotICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2Ug bGluZXMgPSAwOyB9Ci0KLSNlbHNlIC8qIE9TMiAqLyAgIC8qIEJlZ2lubmluZyBvZiBuZXcgbm9u LU9TMiB2ZXJzaW9uICovCi0KLSAgICBwcmludGYoIlxuIik7Ci0gICAgcHJpbnRmKCJUZXJtaW5h bCBwYXJhbWV0ZXJzOlxuIik7Ci0gICAgcHJpbnRmKCIgJTE5czogJTFkJS0xMnMgICUxM3M6ICUx ZCUtMTRzXG4iLAotICAgICAgICAgICAiQnl0ZXNpemU6IENvbW1hbmQiLAotICAgICAgICAgICAo Y21kbXNrID09IDAzNzcpID8gOCA6IDcsCi0gICAgICAgICAgICIgYml0cyIsIlRlcm1pbmFsIiwK LSAgICAgICAgICAgKGNtYXNrID09IDAzNzcpID8gOCA6IDcsIiBiaXRzIik7Ci0gICAgcyA9IGdl dGVudigiVEVSTSIpOwotI2lmZGVmIFhQUklOVAotICAgIHByaW50ZigiICUxOXM6ICUtMTNzICAl MTNzOiAlLTE1c1xuIiwKLSAgICAgICAgICAgIlR5cGUiLAotICAgICAgICAgICBzID8gcyA6ICIo dW5rbm93bikiLAotICAgICAgICAgICAiUHJpbnQiLAotICAgICAgICAgICBzaG93b2ZmKHR0X3By aW50KQotICAgICAgICAgICApOwotI2Vsc2UKLSAgICBwcmludGYoIiAlMTlzOiAlLTEzc1xuIiwi VHlwZSIsIHMgPyBzIDogIih1bmtub3duKSIpOwotI2VuZGlmIC8qIFhQUklOVCAqLwotICAgIHBy aW50ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1c1xuIiwiRWNobyIsCi0gICAgICAgICAgIGR1 cGxleCA/ICJsb2NhbCIgOiAicmVtb3RlIiwiTG9ja2luZy1zaGlmdCIsc2hvd29mZihzb3NpKSk7 Ci0gICAgcHJpbnRmKCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLCJOZXdsaW5lLW1vZGUi LAotICAgICAgICAgICBzaG93b2ZmKHRubG0pLCJDci1kaXNwbGF5Iix0dF9jcmQgPyAiY3JsZiIg OiAibm9ybWFsIik7Ci0KLSNpZmRlZiBDS19BUEMKLSAgICBpZiAoYXBjc3RhdHVzID09IEFQQ19P TikgcyA9ICJvbiI7Ci0gICAgZWxzZSBpZiAoYXBjc3RhdHVzID09IEFQQ19PRkYpIHMgPSAib2Zm IjsKLSAgICBlbHNlIGlmIChhcGNzdGF0dXMgPT0gKEFQQ19PTnxBUENfVU5DSCkpIHMgPSAidW5j aGVja2VkIjsKLSAgICBlbHNlIGlmIChhcGNzdGF0dXMgPT0gKEFQQ19PTnxBUENfTk9JTlApKSBz ID0gIm5vLWlucHV0IjsKLSAgICBlbHNlIGlmIChhcGNzdGF0dXMgPT0gKEFQQ19PTnxBUENfVU5D SHxBUENfTk9JTlApKQotICAgICAgcyA9ICJ1bmNoZWNrZWQtbm8taW5wdXQiOwotICAgIHByaW50 ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1c1xuIiwKLSAgICAgICAgICAgIkFQQyIsIHMsCi0j aWZkZWYgQ0tfQVVUT0RMCi0gICAgICAgICAgICJBdXRvZG93bmxvYWQiLCBhdXRvZGwgPwotICAg ICAgICAgICAoYWRsX2VyciA/ICJvbiwgZXJyb3Igc3RvcCIgOiAib24sIGVycm9yIGNvbnRpbnVl IikgOiAib2ZmIgotI2Vsc2UKLSAgICAgICAgICAgIiIsIiIKLSNlbmRpZiAvKiBDS19BVVRPREwg Ki8KLSAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLQotI2lmZGVmIENLX1RUR1dT SVogICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnNvbGUgdGVybWluYWwgc2NyZWVuIHNpemUg Ki8KLSAgICB0dGd3c2l6KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcnkgdG8gZ2V0 IGxhdGVzdCBzaXplICovCi0gICAgcHJpbnRmKCIgJTE5czogJS0xM2QgICUxM3M6ICUtMTVkXG4i LCJIZWlnaHQiLHR0X3Jvd3MsICJXaWR0aCIsIHR0X2NvbHMpOwotI2VuZGlmIC8qIENLX1RUR1dT SVogKi8KLQotICAgIHByaW50ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1c1xuIiwiRGVidWci LAotICAgICAgICAgICBzaG93b2ZmKGRlYnNlcyksIlNlc3Npb24gbG9nIiwgc2VzbG9nPyBzZXNm aWwgOiAiKG5vbmUpIiApOwotCi0jaWZkZWYgQ0tUSURMRQotICAgIHByaW50ZigiICUxOXM6ICUt MTNkICAlMTNzOiAlc1xuIiwiSWRsZS10aW1lb3V0Iix0dF9pZGxlbGltaXQsCi0gICAgICAgICAg ICJJZGxlLWFjdGlvbiIsIGdldGlhY3QoKSk7Ci0jZW5kaWYgLyogQ0tUSURMRSAqLwotCi0gICAg cHJpbnRmKCIgJTE5czogJS0xM3MgICIsIkxmLWRpc3BsYXkiLCB0dF9sZmQgPyAiY3JsZiIgOiAi bm9ybWFsIik7Ci0jaWZkZWYgVU5JWAotI2lmbmRlZiBOT0pDCi0gICAgcHJpbnRmKCIlMTNzOiAl LTE1cyIsIlN1c3BlbmQiLCBzaG93b2ZmKHhzdXNwZW5kKSk7Ci0jZW5kaWYgLyogTk9KQyAqLwot I2VuZGlmIC8qIFVOSVggKi8KLSAgICBwcmludGYoIlxuIik7Ci0KLSNpZm5kZWYgTk9UUklHR0VS Ci0gICAgcHJpbnRmKCIgJTE5czogJS0xM3NcbiIsIlRyaWdnZXIiLAotICAgICAgICAgICB0dF90 cmlnZ2VyWzBdID8gdHRfdHJpZ2dlclswXSA6ICIobm9uZSkiKTsKLSNlbmRpZiAvKiBOT1RSSUdH RVIgKi8KLSAgICBwcmludGYoIlxuIik7Ci0KLSAgICAoVk9JRCkgc2hvZXNjKGVzY2FwZSk7Ci0j aWZuZGVmIE5PQ1NFVFMKLSAgICBzaG90Y3ModGNzbCx0Y3NyKTsgICAgICAgICAgLyogU2hvdyB0 ZXJtaW5hbCBjaGFyYWN0ZXIgc2V0cyAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2VuZGlm IC8qIE9TMiAqLwotfQotCi1WT0lECi1zaG1kbWxpbigpIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQnJpZWZseSBzaG93IG1vZGVtICYgbGluZSAqLwotI2lmbmRlZiBOT0RJQUwKLSNp Zm5kZWYgTUlOSURJQUwKLSNpZmRlZiBPTERUQkNPREUKLSAgICBleHRlcm4gaW50IHRibW9kZWw7 Ci0gICAgX1BST1RPVFlQKCBjaGFyICogZ3RibW9kZWwsICh2b2lkKSApOwotI2VuZGlmIC8qIE9M RFRCQ09ERSAqLwotI2VuZGlmIC8qIE1JTklESUFMICovCi0jZW5kaWYgLyogTk9ESUFMICovCi0g ICAgaWYgKGxvY2FsKQotI2lmZGVmIE9TMgotICAgICAgcHJpbnRmKCIgUG9ydDogJXMsIE1vZGVt IHR5cGU6ICIsdHRuYW1lKTsKLSNlbHNlCi0gICAgICBwcmludGYoIiBMaW5lOiAlcywgTW9kZW0g dHlwZTogIix0dG5hbWUpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIGVsc2UKLSAgICAgIHByaW50 ZigKLSNpZmRlZiBPUzIKLSIgQ29tbXVuaWNhdGlvbiBkZXZpY2Ugbm90IHlldCBzZWxlY3RlZCB3 aXRoIFNFVCBQT1JUXG4gTW9kZW0gdHlwZTogIgotI2Vsc2UKLSIgQ29tbXVuaWNhdGlvbiBkZXZp Y2Ugbm90IHlldCBzZWxlY3RlZCB3aXRoIFNFVCBMSU5FXG4gTW9kZW0gdHlwZTogIgotI2VuZGlm IC8qIE9TMiAqLwotICAgICAgICAgICAgICk7Ci0jaWZuZGVmIE5PRElBTAotICAgIHByaW50Zigi JXMiLGdtZG10eXAoKSk7Ci0jaWZuZGVmIE1JTklESUFMCi0jaWZkZWYgT0xEVEJDT0RFCi0gICAg aWYgKHRibW9kZWwpIHByaW50ZigiICglcykiLGd0Ym1vZGVsKCkpOyAvKiBUZWxlYml0IG1vZGVs IGluZm8gKi8KLSNlbmRpZiAvKiBPTERUQkNPREUgKi8KLSNlbmRpZiAvKiBNSU5JRElBTCAqLwot I2Vsc2UKLSAgICBwcmludGYoIihkaXNhYmxlZCkiKTsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLX0K LQotI2lmZGVmIENLX1RBUEkKLXZvaWQKLXNob3RhcGkoaW50IG9wdGlvbikgewotICAgIGludCBy Yz0wLGsgOwotICAgIGNoYXIgKnM9TlVMTDsKLSAgICBMUERFVkNGRyAgICAgICAgbHBEZXZDZmcg PSBOVUxMOwotICAgIExQQ09NTUNPTkZJRyAgICBscENvbW1Db25maWcgPSBOVUxMOwotICAgIExQ TU9ERU1TRVRUSU5HUyBscE1vZGVtU2V0dGluZ3MgPSBOVUxMOwotICAgIERDQiAqICAgICAgICAg ICBscERDQiA9IE5VTEw7Ci0gICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgKiB0YXBpbG9jdGFiOyAg LyogTWljcm9zb2Z0IFRBUEkgTG9jYXRpb25zICovCi0gICAgZXh0ZXJuIGludCBudGFwaWxvYzsK LSAgICBleHRlcm4gc3RydWN0IGtleXRhYiAqIHRhcGlsaW5ldGFiOyAvKiBNaWNyb3NvZnQgVEFQ SSBMaW5lIERldmljZXMgKi8KLSAgICBleHRlcm4gaW50IG50YXBpbGluZTsKLSAgICBleHRlcm4g aW50IHR0dGFwaTsgICAgICAgICAgICAgICAgICAvKiBUQVBJIGluIHVzZSAqLwotICAgIGV4dGVy biBpbnQgdGFwaXBhc3M7ICAgICAgICAgICAgICAgIC8qIFRBUEkgUGFzc3Rocm91Z2ggbW9kZSAq LwotICAgIGV4dGVybiBpbnQgdGFwaWNvbnY7ICAgICAgICAgICAgICAgIC8qIFRBUEkgQ29udmVy c2lvbiBtb2RlICovCi0gICAgZXh0ZXJuIGludCB0YXBpbGlnaHRzOwotICAgIGV4dGVybiBpbnQg dGFwaXByZXRlcm07Ci0gICAgZXh0ZXJuIGludCB0YXBpcG9zdHRlcm07Ci0gICAgZXh0ZXJuIGlu dCB0YXBpbWFudWFsOwotICAgIGV4dGVybiBpbnQgdGFwaWluYWN0aXZpdHk7Ci0gICAgZXh0ZXJu IGludCB0YXBpYm9uZzsKLSAgICBleHRlcm4gaW50IHRhcGl1c2VjZmc7Ci0gICAgZXh0ZXJuIGNo YXIgdGFwaWxvY1tdOwotICAgIGV4dGVybiBpbnQgdGFwaWxvY2lkOwotICAgIGV4dGVybiBpbnQg VEFQSUF2YWlsOwotCi0gICAgaWYgKCFUQVBJQXZhaWwpIHsKLSAgICAgICAgcHJpbnRmKCJUQVBJ IFN1cHBvcnQgbm90IGVuYWJsZWRcclxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg c3dpdGNoIChvcHRpb24pIHsKLSAgICAgIGNhc2UgMDoKLSAgICAgICAgcHJpbnRmKCJUQVBJIFNl dHRpbmdzOlxuIik7Ci0gICAgICAgIHByaW50ZigiICBMaW5lOiAgICAgICAgICAgICAgICAgICAg ICAlc1xuIiwKLSAgICAgICAgICAgICAgIHR0dGFwaSA/IHR0bmFtZSA6ICIobm9uZSBpbiB1c2Up Iik7Ci0KLSAgICAgICAgY2t0YXBpQnVpbGRMb2NhdGlvblRhYmxlKCZ0YXBpbG9jdGFiLCAmbnRh cGlsb2MpOwotICAgICAgICBpZiAodGFwaWxvY2lkID09IC0xKQotICAgICAgICAgIHRhcGlsb2Np ZCA9IGNrdGFwaUdldEN1cnJlbnRMb2NhdGlvbklEKCk7Ci0KLSAgICAgICAgLyogRmluZCB0aGUg Y3VycmVudCB0YXBpbG9jIGVudHJ5ICovCi0gICAgICAgIC8qIGFuZCB1c2UgaXQgYXMgdGhlIGRl ZmF1bHQuICovCi0gICAgICAgIGZvciAoayA9IDA7IGsgPCBudGFwaWxvYzsgaysrKSB7Ci0gICAg ICAgICAgICBpZiAodGFwaWxvY3RhYltrXS5rd3ZhbCA9PSB0YXBpbG9jaWQpCi0gICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChrID49IDAgJiYgayA8IG50YXBpbG9j KQotICAgICAgICAgIHMgPSB0YXBpbG9jdGFiW2tdLmt3ZDsKLSAgICAgICAgZWxzZQotICAgICAg ICAgIHMgPSAiKHVua25vd24pIjsKLSAgICAgICAgcHJpbnRmKCIgIExvY2F0aW9uOiAgICAgICAg ICAgICAgICAgICVzXG4iLHMpOwotICAgICAgICBwcmludGYoIiAgTW9kZW0tZGlhbGluZzogICAg ICAgICAgICAgJXNcbiIsdGFwaXBhc3M/Im9mZiI6Im9uIik7Ci0gICAgICAgIHByaW50ZigiICBQ aG9uZS1udW1iZXItY29udmVyc2lvbnM6ICAlc1xuIiwKLSAgICAgICAgICAgICAgICB0YXBpY29u dj09Q0tfT04/Im9uIjp0YXBpY29udj09Q0tfQVVUTz8iYXV0byI6Im9mZiIpOwotICAgICAgICBw cmludGYoIiAgTW9kZW0tbGlnaHRzOiAgICAgICAgICAgICAgJXMgJXNcbiIsdGFwaWxpZ2h0cz8i b24gIjoib2ZmIiwKLSAgICAgICAgICAgICAgICB0YXBpcGFzcz8iKG4vYSkiOiIiKTsKLSAgICAg ICAgcHJpbnRmKCIgIFByZWRpYWwtdGVybWluYWw6ICAgICAgICAgICVzICVzXG4iLHRhcGlwcmV0 ZXJtPyJvbiAiOiJvZmYiLAotICAgICAgICAgICAgICAgIHRhcGlwYXNzPyIobi9hKSI6IiIpOwot ICAgICAgICBwcmludGYoIiAgUG9zdGRpYWwtdGVybWluYWw6ICAgICAgICAgJXMgJXNcbiIsdGFw aXBvc3R0ZXJtPyJvbiAiOiJvZmYiLAotICAgICAgICAgICAgICAgIHRhcGlwYXNzPyIobi9hKSI6 IiIpOwotICAgICAgICBwcmludGYoIiAgTWFudWFsLWRpYWw6ICAgICAgICAgICAgICAgJXMgJXNc biIsdGFwaW1hbnVhbD8ib24gIjoib2ZmIiwKLSAgICAgICAgICAgICAgICB0YXBpcGFzcz8iKG4v YSkiOiIiKTsKLSAgICAgICAgcHJpbnRmKCIgIEluYWN0aXZpdHktdGltZW91dDogICAgICAgICVk IHNlY29uZHMgJXNcbiIsdGFwaWluYWN0aXZpdHksCi0gICAgICAgICAgICAgICAgdGFwaXBhc3M/ IihuL2EpIjoiIik7Ci0gICAgICAgIHByaW50ZigiICBXYWl0LWZvci1ib25nOiAgICAgICAgICAg ICAlZCBzZWNvbmRzICVzXG4iLHRhcGlib25nLAotICAgICAgICAgICAgICAgIHRhcGlwYXNzPyIo bi9hKSI6IiIpOwotICAgICAgICBwcmludGYoIiAgVXNlLXdpbmRvd3MtY29uZmlndXJhdGlvbjog JXMgJXNcbiIsCi0gICAgICAgICAgICAgICAgdGFwaXVzZWNmZz8ib24gIjoib2ZmIiwgdGFwaXBh c3M/IihuL2EpIjoiIik7Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLQotI2lmZGVmIEJFVEFURVNU Ci0gICAgICAgIGlmICh0YXBpcGFzcykgewotcHJpbnRmKCJLLTk1IHVzZXMgdGhlIFRBUEkgTGlu ZSBpbiBhbiBleGNsdXNpdmUgbW9kZS4gIE90aGVyIGFwcGxpY2F0aW9uc1xuIik7Ci1wcmludGYo Im1heSBvcGVuIHRoZSBkZXZpY2UgYnV0IG1heSBub3QgcGxhY2UgY2FsbHMgbm9yIGFuc3dlciBj YWxscy5cbiIpOwotcHJpbnRmKCJEaWFsaW5nIGlzIHBlcmZvcm1lZCB1c2luZyB0aGUgSy05NSBk aWFsaW5nIHByb2NlZHVyZXMuICBTRVQgTU9ERU1cbiIpOwotcHJpbnRmKCJUWVBFIFRBUEkgYWZ0 ZXIgdGhlIFNFVCBUQVBJIExJTkUgY29tbWFuZCB0byBhY3RpdmF0ZSB0aGUgbW9kZW1cbiIpOwot cHJpbnRmKCJkZWZpbml0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWN0aXZlIFRBUEkgTElORSBk ZXZpY2UuXG5cbiIpOwotCi0gICAgICAgIH0gZWxzZSB7Ci0KLXByaW50ZigiSy05NSB1c2VzIHRo ZSBUQVBJIExpbmUgaW4gYSBjb29wZXJhdGl2ZSBtb2RlLiAgT3RoZXIgYXBwbGljYXRpb25zXG4i KTsKLXByaW50ZigibWF5IG9wZW4gdGhlIGRldmljZSwgcGxhY2UgYW5kIGFuc3dlciBjYWxscy4g IERpYWxpbmcgaXMgcGVyZm9ybWVkXG4iKTsKLXByaW50ZigiYnkgVEFQSS4gIEstOTUgU0VUIE1P REVNIGNvbW1hbmRzIGFyZSBub3QgdXNlZC5cblxuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBp ZiAodGFwaWNvbnYgPT0gQ0tfT04gfHwKLSAgICAgICAgICAgIHRhcGljb252ID09IENLX0FVVE8g JiYgIXRhcGlwYXNzKSB7Ci1wcmludGYoCi0iUGhvbmUgbnVtYmVycyBhcmUgY29udmVydGVkIGZy b20gY2Fub25pY2FsIHRvIGRpYWxhYmxlIGZvcm0gYnkgVEFQSVxuIik7Ci1wcmludGYoInVzaW5n IHRoZSBkaWFsaW5nIHJ1bGVzIHNwZWNpZmllZCBpbiB0aGUgVEFQSSBEaWFsaW5nIFByb3BlcnRp ZXNcbiIpOwotcHJpbnRmKCJkaWFsb2cuXG5cbiIpOwotCi0gICAgICAgIH0gZWxzZSB7Ci0KLXBy aW50ZigKLSJQaG9uZSBudW1iZXJzIGFyZSBjb252ZXJ0ZWQgZnJvbSBjYW5vbmljYWwgdG8gZGlh bGFibGUgZm9ybSBieSBLLTk1XG4iKTsKLXByaW50ZigKLSJ1c2luZyB0aGUgZGlhbGluZyBydWxl cyBzcGVjaWZpZWQgd2l0aCB0aGUgU0VUIERJQUwgY29tbWFuZHMuICBUQVBJXG4iKTsKLXByaW50 ZigKLSJEaWFsaW5nIFByb3BlcnRpZXMgYXJlIGltcG9ydGVkIGF1dG9tYXRpY2x5IHVwb24gc3Rh cnR1cCBhbmQgd2hlbmV2ZXJcbiIpOwotcHJpbnRmKCJ0aGUgVEFQSSBEaWFsaW5nIFByb3BlcnRp ZXMgYXJlIGFsdGVyZWQgb3Igd2hlbiB0aGUgVEFQSSBMb2NhdGlvblxuIik7Ci1wcmludGYoImlz IGNoYW5nZWQuXG5cbiIpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQkVUQVRFU1QgKi8KLQotICAg ICAgICBpZiAodGFwaXBhc3MpIHsKLSAgICAgICAgICAgIHByaW50ZigiVHlwZSBTSE9XIE1PREVN IHRvIHNlZSBNT0RFTSBjb25maWd1cmF0aW9uLlxuIik7Ci0gICAgICAgICAgICBpZiAodGFwaWNv bnYgPT0gQ0tfT04pCi0gICAgICAgICAgICAgIHByaW50ZigiVHlwZSBTSE9XIERJQUwgdG8gc2Vl IERJQUwtcmVsYXRlZCBpdGVtcy5cbiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg aWYgKHRhcGljb252ID09IENLX09OIHx8IHRhcGljb252ID09IENLX0FVVE8pCi0gICAgICAgICAg ICAgIHByaW50ZigiVHlwZSBTSE9XIERJQUwgdG8gc2VlIERJQUwtcmVsYXRlZCBpdGVtcy5cbiIp OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAxOgotICAgICAgICBja3Rh cGlEaXNwbGF5VGFwaUxvY2F0aW9uSW5mbygpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug MjoKLSAgICAgICAgcmMgPSBja3RhcGlHZXRNb2RlbVNldHRpbmdzKCZscERldkNmZywmbHBNb2Rl bVNldHRpbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZscENvbW1D b25maWcsJmxwRENCKTsKLSAgICAgICAgaWYgKHJjKSB7Ci0gICAgICAgICAgICBja3RhcGlEaXNw bGF5TW9kZW1TZXR0aW5ncyhscERldkNmZyxscE1vZGVtU2V0dGluZ3MsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwQ29tbUNvbmZpZyxscERDQik7Ci0gICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gcmV0cmlldmUgTW9kZW0g U2V0dGluZ3NcbiIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAzOiB7 Ci0gICAgICAgICAgSEFORExFIGhNb2RlbSA9IEdldE1vZGVtSGFuZGxlRnJvbUxpbmUoKEhMSU5F KTApOwotICAgICAgICAgIGlmIChoTW9kZW0pCi0gICAgICAgICAgICBEaXNwbGF5Q29tbVByb3Bl cnRpZXMoaE1vZGVtKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcmludGYoIj9VbmFi bGUgdG8gcmV0cmlldmUgYSB2YWxpZCBNb2RlbSBIYW5kbGVcbiIpOwotICAgICAgICAgIENsb3Nl SGFuZGxlKGhNb2RlbSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHBy aW50ZigiXG4iKTsKLX0KLSNlbmRpZiAvKiBDS19UQVBJICovCi0jZW5kaWYgLyogTk9MT0NBTCAq LwotCi0jaWZkZWYgUEFUVEVSTlMKLXN0YXRpYyBWT0lECi1zaG9wYXQoKSB7Ci0gICAgZXh0ZXJu IGNoYXIgKiBiaW5wYXR0ZXJuc1tdLCAqIHR4dHBhdHRlcm5zW107Ci0gICAgZXh0ZXJuIGludCBw YXR0ZXJucywgZmlsZXBlZWs7Ci0gICAgY2hhciAqKnAsICpzOwotICAgIGludCBpLCBqLCBrLCBu LCBmbGFnLCB3aWR0aDsKLSNpZmRlZiBDS19UVEdXU0laCi0gICAgdHRnd3NpeigpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVHJ5IHRvIGdldCBsYXRlc3Qgc2l6ZSAqLwotI2lmZGVmIE9T MgotICAgIHdpZHRoID0gdHRfY29sc1tWQ01EXTsKLSNlbHNlIC8qIE9TMiAqLwotICAgIHdpZHRo ID0gdHRfY29sczsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBpZiAod2lkdGggPCAxKQotI2VuZGlm IC8qIENLX1RUR1dTSVogKi8KLSAgICAgIHdpZHRoID0gODA7Ci0gICAgcHJpbnRmKCJcbiIpOwot ICAgIHByaW50ZigiIFNldCBmaWxlIHR5cGU6ICAgICAgICAgICAgJXNcbiIsZ2Ztb2RlKGJpbmFy eSwxKSk7Ci0gICAgcHJpbnRmKCIgU2V0IGZpbGUgcGF0dGVybnM6ICAgICAgICAlcyIsIHNob3dv b2EocGF0dGVybnMpKTsKLSNpZmRlZiBDS19MQUJFTEVECi0gICAgaWYgKGJpbmFyeSA9PSBYWUZU X0wpCi0gICAgICBwcmludGYoIiAoYnV0IFNFVCBGSUxFIFRZUEUgTEFCRUxFRCBvdmVycmlkZXMp XG4iKTsKLSAgICBlbHNlCi0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotI2lmZGVmIFZNUwotICAg IGlmIChiaW5hcnkgPT0gWFlGVF9JKQotICAgICAgcHJpbnRmKCIgKGJ1dCBTRVQgRklMRSBUWVBF IElNQUdFIG92ZXJyaWRlcylcbiIpOwotICAgIGVsc2UKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICBp ZiAoZmlsZXBlZWspCi0gICAgICBwcmludGYoIiAoYnV0IFNFVCBGSUxFIFNDQU4gT04gb3ZlcnJp ZGVzKVxuIik7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCJcbiIpOwotICAgIHByaW50ZigiIE1h eGltdW0gcGF0dGVybnMgYWxsb3dlZDogJWRcbiIsIEZUUEFUVEVSTlMpOwotICAgIGZvciAoayA9 IDA7IGsgPCAyOyBrKyspIHsgICAgICAgICAgIC8qIEZvciBlYWNoIGtpbmQgb2YgcGF0dGVyICov Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgaWYgKGsgPT0gMCkgeyAgICAgICAgICAg ICAgICAgICAvKiBiaW5hcnkuLi4gKi8KLSAgICAgICAgICAgIHByaW50ZigiIEZpbGUgYmluYXJ5 LXBhdHRlcm5zOiAiKTsKLSAgICAgICAgICAgIHAgPSBiaW5wYXR0ZXJuczsKLSAgICAgICAgfSBl bHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiB0ZXh0Li4uICovCi0gICAgICAgICAgICBw cmludGYoIiBGaWxlIHRleHQtcGF0dGVybnM6ICAgIik7Ci0gICAgICAgICAgICBwID0gdHh0cGF0 dGVybnM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFwWzBdKSB7Ci0gICAgICAgICAgICBwcmlu dGYoIihub25lKVxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludGYoIlxu ICIpOwotICAgICAgICAgICAgbiA9IDI7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRlRQ QVRURVJOUzsgaSsrKSB7IC8qIEZvciBlYWNoIHBhdHRlcm4gKi8KLSAgICAgICAgICAgICAgICBp ZiAoIXBbaV0pICAgICAgICAgICAgICAvKiBEb25lICovCi0gICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICBzID0gcFtpXTsgICAgICAgICAgICAgICAvKiBMb29rIGZvciBl bWJlZGRlZCBzcGFjZSAqLwotICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGZsYWcgPSAxOyAq czsgcysrLCBqKyspIC8qIGFuZCBhbHNvIGdldCBsZW5ndGggKi8KLSAgICAgICAgICAgICAgICAg IGlmICgqcyA9PSBTUCkKLSAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDM7Ci0gICAgICAgICAg ICAgICAgbiArPSBqICsgZmxhZzsgICAgICAgICAgLyogTGVuZ3RoIG9mIHRoaXMgbGluZSAqLwot ICAgICAgICAgICAgICAgIGlmIChuID49IHdpZHRoIC0gMSkgewotICAgICAgICAgICAgICAgICAg ICBwcmludGYoIlxuICIpOwotICAgICAgICAgICAgICAgICAgICBuID0gaisyOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcmludGYoZmxhZyA9PSAzID8gIiB7JXN9IiA6ICIg JXMiLCBwW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuID4gMikKLSAgICAg ICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHByaW50ZigiXG4i KTsKLX0KLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotCi0jaWZuZGVmIE5PU1BMCi1zdGF0aWMgVk9J RAotc2hvb3V0cHV0KCkgewotICAgIHByaW50ZigiIE91dHB1dCBwYWNpbmc6ICAgICAgICAgICVk IChtaWxsaXNlY29uZHMpXG4iLHBhY2luZyk7Ci0gICAgcHJpbnRmKCIgT3V0cHV0IHNwZWNpYWwt ZXNjYXBlczogJXNcbiIsIHNob3dvZmYob3V0ZXNjKSk7Ci19Ci0KLXN0YXRpYyBWT0lECi1zaG9p bnB1dCgpIHsKLSNpZmRlZiBDS0ZMT0FUCi0gICAgZXh0ZXJuIGNoYXIgKiBpbnBzY2FsZTsKLSNl bmRpZgkvKiBDS0ZMT0FUICovCi0KLSNpZmRlZiBDS19BVVRPREwKLSAgICBwcmludGYoIiBJbnB1 dCBhdXRvZG93bmxvYWQ6ICAgICAlc1xuIiwgc2hvd29mZihpbmF1dG9kbCkpOwotI2VuZGlmIC8q IENLX0FVVE9ETCAqLwotICAgIHByaW50ZigiIElucHV0IGNhbmNlbGxhdGlvbjogICAgICVzXG4i LCBzaG93b2ZmKGluaW50cikpOwotICAgIHByaW50ZigiIElucHV0IGNhc2U6ICAgICAgICAgICAg ICVzXG4iLCBpbnBjYXNbY21kbHZsXSA/Ci0gICAgICAgICAgICJvYnNlcnZlIiA6ICJpZ25vcmUi KTsKLSAgICBwcmludGYoIiBJbnB1dCBidWZmZXItbGVuZ3RoOiAgICAlZFxuIiwgaW5idWZzaXpl KTsKLSAgICBwcmludGYoIiBJbnB1dCBlY2hvOiAgICAgICAgICAgICAlc1xuIiwgc2hvd29mZihp bmVjaG8pKTsKLSAgICBwcmludGYoIiBJbnB1dCBzaWxlbmNlOiAgICAgICAgICAlZCAoc2Vjb25k cylcbiIsIGluc2lsZW5jZSk7Ci0jaWZkZWYgT1MyCi0gICAgcHJpbnRmKCIgSW5wdXQgdGVybWlu YWw6ICAgICAgICAgJXNcbiIsIHNob3dvZmYoaW50ZXJtKSk7Ci0jZW5kaWYgLyogT1MyICovCi0g ICAgcHJpbnRmKCIgSW5wdXQgdGltZW91dDogICAgICAgICAgJXNcbiIsIGludGltZVtjbWRsdmxd ID8KLSAgICAgICAgICAgInF1aXQiIDogInByb2NlZWQiKTsKLSNpZmRlZiBDS0ZMT0FUCi0gICAg cHJpbnRmKCIgSW5wdXQgc2NhbGUtZmFjdG9yOiAgICAgJXNcbiIsIGlucHNjYWxlID8gaW5wc2Nh bGUgOiAiMS4wIik7Ci0jZW5kaWYJLyogQ0tGTE9BVCAqLwotCi0gICAgaWYgKGluc3RhdHVzIDwg MCkKLSAgICAgIHByaW50ZigiIExhc3QgSU5QVVQ6ICAgICAgICAgICAgIC0xIChJTlBVVCBjb21t YW5kIG5vdCB5ZXQgZ2l2ZW4pXG4iKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIiBMYXN0IElO UFVUOiAgICAgICAgICAgICAlZCAoJXMpXG4iLCBpbnN0YXR1cyxpX3RleHRbaW5zdGF0dXNdKTsK LX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PU1BMCi1pbnQKLXNob3dhcnJheSgp IHsKLSNpZmRlZiBDT01NRU5UCi0gICAgY2hhciAqIHAsICogcSwgKiogYXA7Ci0gICAgaW50IGk7 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGNoYXIgKnM7IGludCB4ID0gMCwgeTsKLSAgICBp bnQgcmFuZ2VbMl07Ci0KLSAgICBpZiAoKHkgPSBjbWZsZCgiQXJyYXkgbmFtZSIsIiIsJnMsTlVM TCkpIDwgMCkKLSAgICAgIGlmICh5ICE9IC0zKQotICAgICAgICByZXR1cm4oeSk7Ci0gICAgY2tz dHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotICAgIHMgPSBsaW5lOwotICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkKLSAgICAgIHJldHVybih5KTsKLSAgICBpZiAoKnMpIHsKLSAgICAgICAgY2hh ciAqKiBhcDsKLSAgICAgICAgaWYgKCh4ID0gYXJyYXlib3VuZHMocywmKHJhbmdlWzBdKSwmKHJh bmdlWzFdKSkpIDwgMCkgewotICAgICAgICAgICAgcHJpbnRmKCI/QmFkIGFycmF5OiAlc1xuIixz KTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXAgPSBhX3B0 clt4XTsKLSAgICAgICAgaWYgKCFhcCkgewotICAgICAgICAgICAgcHJpbnRmKCJBcnJheSBub3Qg ZGVjbGFyZWQ6ICVzXG4iLCBzKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0g ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgaSwgbiwgbWF4OwotICAgICAgICAgICAg bWF4ID0gKHJhbmdlWzFdID4gMCkgPwotICAgICAgICAgICAgICByYW5nZVsxXSA6Ci0gICAgICAg ICAgICAgICAgKChyYW5nZVswXSA+IDApID8gcmFuZ2VbMF0gOiBhX2RpbVt4XSk7Ci0gICAgICAg ICAgICBpZiAocmFuZ2VbMF0gPCAwKQotICAgICAgICAgICAgICByYW5nZVswXSA9IDA7Ci0gICAg ICAgICAgICBpZiAobWF4ID4gYV9kaW1beF0pCi0gICAgICAgICAgICAgIG1heCA9IGFfZGltW3hd OwotICAgICAgICAgICAgbiA9IDE7Ci0gICAgICAgICAgICBwcmludGYoIlxcJiVjW106IERpbWVu c2lvbiA9ICVkIixhcnJheWl0b2EoeCksYV9kaW1beF0pOwotICAgICAgICAgICAgaWYgKGFfbGlu a1t4XSA+IC0xKQotICAgICAgICAgICAgICBwcmludGYoIiAoTGluayB0byBcXCYlY1tdKSIsYXJy YXlpdG9hKGFfbGlua1t4XSkpOwotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAg ICAgZm9yIChpID0gcmFuZ2VbMF07IGkgPD0gbWF4OyBpKyspIHsKLSAgICAgICAgICAgICAgICBp ZiAoYXBbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlM2QuICVzXG4iLGksYXBb aV0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoeGFza21vcmUpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChjbWRfY29scyA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICB4ID0gc3RybGVuKGFwW2ldKSArIDU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9 ICh4ICUgY21kX2NvbHMpID8gMSA6IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiAr PSAoeCAvIGNtZF9jb2xzKSArIHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4rKzsKLSAgICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID4gKGNtZF9yb3dzIC0gMykpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAwOwotICAgICAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0KLSAgICAvKiBB bGwgYXJyYXlzIC0ganVzdCBzaG93IG5hbWUgYW5kIGRpbWVuc2lvbiAqLwotCi0gICAgZm9yICh5 ID0gMDsgeSA8IChpbnQpICd6JyAtIEFSUkFZQkFTRSArIDE7IHkrKykgewotICAgICAgICBpZiAo YV9wdHJbeV0pIHsKLSAgICAgICAgICAgIGlmICh4ID09IDApIHByaW50ZigiRGVjbGFyZWQgYXJy YXlzOlxuIik7Ci0gICAgICAgICAgICB4ID0gMTsKLSAgICAgICAgICAgIHByaW50ZigiIFxcJiVj WyVkXSIsCi0gICAgICAgICAgICAgICAgICAgKHkgPT0gMSkgPyA2NCA6IHkgKyBBUlJBWUJBU0Us IGFfZGltW3ldKTsKLSAgICAgICAgICAgIGlmIChhX2xpbmtbeV0gPiAtMSkKLSAgICAgICAgICAg ICAgcHJpbnRmKCIgPT4gXFwmJWNbXSIsYXJyYXlpdG9hKGFfbGlua1t5XSkpOwotICAgICAgICAg ICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgheCkgcHJpbnRmKCIgTm8g YXJyYXlzIGRlY2xhcmVkXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuKDEpOwotfQotI2VuZGlmIC8q IE5PU1BMICovCi0KLWludAotZG9zaG93KHgpIGludCB4OyB7Ci0gICAgaW50IHksIHosIGk7IGxv bmcgeno7Ci0gICAgZXh0ZXJuIGludCBvcHRsaW5lczsKLSAgICBjaGFyICpzOwotI2lmZGVmIE9T MgotICAgIGV4dGVybiBpbnQgb3MyZ2tzOwotICAgIGV4dGVybiBpbnQgdHRfa2JfbW9kZTsKLSNl bmRpZiAvKiBPUzIgKi8KLSAgICBleHRlcm4gaW50IHNydmNkbXNnOwotICAgIGV4dGVybiBjaGFy ICogY2Rtc2dzdHIsICogY2tjZHBhdGg7Ci0KLSNpZm5kZWYgTk9TRVRLRVkKLSAgICBpZiAoeCA9 PSBTSEtFWSkgeyAgICAgICAgICAgICAgICAgICAvKiBTSE9XIEtFWSAqLwotICAgICAgICBpbnQg YzsKLSNpZmRlZiBPUzIKLSAgICAgICAgaWYgKCh4ID0gY21rZXkoc2hva2V5dGFiLG5zaG9rZXks IkhvdyBtYW55IGtleXMgc2hvdWxkIGJlIHNob3duPyIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAib25lIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBzd2l0Y2ggKHR0X2ti X21vZGUpIHsKLSAgICAgICAgICBjYXNlIEtCTV9FTToKLSAgICAgICAgICAgIHMgPSAiZW1hY3Mi OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBLQk1fSEU6Ci0gICAgICAgICAg ICBzID0gImhlYnJldyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEtCTV9S VToKLSAgICAgICAgICAgIHMgPSAicnVzc2lhbiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICBjYXNlIEtCTV9FTjoKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcyA9ICJk ZWZhdWx0IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeiA9 IGNta2V5KHNob2tleW10YWIsbnNob2tleW0sIldoaWNoIGRlZmluaXRpb24gc2hvdWxkIGJlIHNo b3duPyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4o eik7Ci0gICAgICAgIGlmICh6ID09IFNIS0VZREVGKQotICAgICAgICAgIHogPSAtMTsKLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0j aWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgICAgIHByaW50Zigi U29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotI2lmZGVmIE1BQwotICAg ICAgICBwcmludGYoIk5vdCBpbXBsZW1lbnRlZFxuIik7Ci0gICAgICAgIHJldHVybigwKTsKLSNl bHNlIC8qIE5vdCBNQUMgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgaWYgKHgpIHsKLSAgICAgICAg ICAgIGNvbl9ldmVudCBldnQ7Ci0gICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgS01TSVpFOyBj KyspIHsKLSAgICAgICAgICAgICAgICBldnQgPSAoeiA8IDApID8gbWFwa2V5KGMpIDogbWFwdGVy bWtleShjLHopOwotICAgICAgICAgICAgICAgIGlmIChldnQudHlwZSAhPSBlcnJvcikgewotICAg ICAgICAgICAgICAgICAgICBzaG9rZXljb2RlKGMseik7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAg ICAgcHJpbnRmKCIgUHJlc3Mga2V5OiAiKTsKLSNpZmRlZiBVTklYCi0jaWZkZWYgTk9TRVRCVUYK LSAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0jZW5k aWYgLyogVU5JWCAqLwotICAgICAgICAgICAgY29uYmluKChjaGFyKWVzY2FwZSk7ICAgICAgIC8q IFB1dCB0ZXJtaW5hbCBpbiBiaW5hcnkgbW9kZSAqLwotI2lmZGVmIE9TMgotICAgICAgICAgICAg b3MyZ2tzID0gMDsgICAgICAgICAgICAgICAgIC8qIFJhdyBzY2FuY29kZSBwcm9jZXNzaW5nICov Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICBjID0gY29uZ2tzKDApOyAgICAgICAgICAg ICAgLyogR2V0IGNoYXJhY3RlciBvciBzY2FuIGNvZGUgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAg ICAgIG9zMmdrcyA9IDE7ICAgICAgICAgICAgICAgICAvKiBDb29rZWQgc2NhbmNvZGUgcHJvY2Vz c2luZyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgY29uY2IoKGNoYXIpZXNjYXBl KTsgICAgICAgIC8qIFJlc3RvcmUgdGVybWluYWwgdG8gY2JyZWFrIG1vZGUgKi8KLSAgICAgICAg ICAgIGlmIChjIDwgMCkgeyAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgZXJyb3IgKi8KLSAg ICAgICAgICAgICAgICBwcmludGYoIj9FcnJvciByZWFkaW5nIGtleVxuIik7Ci0gICAgICAgICAg ICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgfQotI2lmbmRlZiBPUzIKLS8qCi0gIERvIE5P VCBtYXNrIHdoZW4gaXQgY2FuIGJlIGEgcmF3IHNjYW4gY29kZSwgcGVyaGFwcyA+IDI1NQotKi8K LSAgICAgICAgICAgIGMgJj0gY21kbXNrOyAgICAgICAgICAgICAgICAvKiBBcHBseSBjb21tYW5k IG1hc2sgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSNp ZmRlZiBPUzIKLSAgICAgICAgICAgIHNob2tleWNvZGUoYyx6KTsKLSNlbHNlIC8qIE9TMiAqLwot ICAgICAgICAgICAgc2hva2V5Y29kZShjKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBPUzIK LSAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm4oMSk7Ci0jZW5kaWYg LyogTUFDICovCi0gICAgfQotI2lmbmRlZiBOT0tWRVJCUwotICAgIGlmICh4ID09IFNIS1ZCKSB7 ICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgS1ZFUkJTICovCi0gICAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotI2lmZGVmIElLU0QKLSAgICAgICAgaWYgKGluc2VydmVy KSB7Ci0gICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsK LSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJ S1NEICovCi0gICAgICAgIHByaW50ZigiXG5UaGUgZm9sbG93aW5nICVkIGtleWJvYXJkIHZlcmJz IGFyZSBhdmFpbGFibGU6XG5cbiIsbmt2ZXJicyk7Ci0gICAgICAgIGt3ZGhlbHAoa3ZlcmJzLG5r dmVyYnMsIiIsIlxcSyIsIiIsMywwKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBy ZXR1cm4oMSk7Ci0gICAgfQotI2lmZGVmIE9TMgotICAgIGlmICh4ID09IFNIVURLKSB7ICAgICAg ICAgICAgICAgICAgIC8qIFNIT1cgVURLcyAqLwotICAgICAgICBleHRlcm4gdm9pZCBzaG93dWRr KHZvaWQpOwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSNpZmRl ZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgcHJpbnRmKCJTb3Jy eSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICBzaG93dWRrKCk7Ci0g ICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9L VkVSQlMgKi8KLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgaWYg KHggPT0gU0hNQUMpIHsgICAgICAgICAgICAgICAgICAgLyogU0hPVyBNQUNSTyAqLwotICAgICAg ICBzdHJ1Y3QgRkRCIGt3LCBmbCwgY207Ci0gICAgICAgIGludCBpLCBrLCBuID0gMCwgbGVmdCwg ZmxhZywgY29uZmlybWVkID0gMDsKLSAgICAgICAgY2hhciAqIHAsICpxWzY0XTsKLSAgICAgICAg Zm9yIChpID0gMDsgaSA8IG5tYWM7IGkrKykgeyAgICAvKiBjb3B5IHRoZSBtYWNybyB0YWJsZSAq LwotICAgICAgICAgICAgbWFja2V5W2ldLmt3ZCA9IG1hY3RhYltpXS5rd2Q7IC8qIGludG8gYSBy ZWd1bGFyIGtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgIG1hY2tleVtpXS5rd3ZhbCA9IGk7 ICAgICAgICAvKiB3aXRoIHZhbHVlID0gcG9pbnRlciB0byBtYWNybyB0YmwgKi8KLSAgICAgICAg ICAgIG1hY2tleVtpXS5mbGdzID0gbWFjdGFiW2ldLmZsZ3M7Ci0gICAgICAgIH0KLSAgICAgICAg cCA9IGxpbmU7Ci0gICAgICAgIGxlZnQgPSBMSU5CVUZTSVo7Ci0gICAgICAgIHdoaWxlICghY29u ZmlybWVkICYmIG4gPCA2NCkgewotICAgICAgICAgICAgY21mZGJpKCZrdywgICAgICAgICAgICAg ICAgIC8qIEZpcnN0IEZEQiAtIG1hY3JvIHRhYmxlICovCi0gICAgICAgICAgICAgICAgICAgX0NN S0VZLCAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgICAgICAgICAiTWFjcm8g bmFtZSIsICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgICAgICAgICAiIiwgICAgICAg ICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAgICAgIiIsICAgICAgICAg ICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICBubWFj LCAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLSAg ICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRh dGEgMjogNCA9IGNtc3dpICovCi0gICAgICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAg ICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAgICAgIG1hY2tleSwg ICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgICAgICAgICAmZmwg ICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAvKiAybmQg RkRCIC0gc29tZXRoaW5nIG5vdCBpbiBtYWN0YWIgKi8KLSAgICAgICAgICAgICAgICAgICBfQ01G TEQsICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgIC8qIGhscG1zZyAqLwotICAgICAgICAgICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAgICAgICAgIDAsICAg ICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0gICAgICAgICAgICAg ICAgICAgMCwgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLSAg ICAgICAgICAgICAgICAgICB4eHN0cmluZywKLSAgICAgICAgICAgICAgICAgICBOVUxMLAotICAg ICAgICAgICAgICAgICAgICZjbQotICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBj bWZkYmkoJmNtLCAgICAgICAgICAgICAgICAgLyogM3JkIEZEQiAtIENvbmZpcm1hdGlvbiAqLwot ICAgICAgICAgICAgICAgICAgIF9DTUNGTSwgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAg ICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAg ICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAg ICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0g ICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBk YXRhIDEgKi8KLSAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAvKiBhZGR0 bCBudW1lcmljIGRhdGEgMiAqLwotICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAg ICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICBOVUxMCi0gICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgIHggPSBjbWZkYigma3cpOyAgICAgICAgICAgICAvKiBQYXJzZSBz b21ldGhpbmcgKi8KLSAgICAgICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICAgICAgcyA9IGF0bWJ1ZjsgICAgICAgICAgICAgICAgIC8qIFdoYXQgdGhl IHVzZXIgdHlwZWQgKi8KLSAgICAgICAgICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsKLSAg ICAgICAgICAgICAgY2FzZSBfQ01LRVk6ICAgICAgICAgICAgICAvKiBJZiBpdCB3YXMgYSBrZXl3 b3JkICovCi0gICAgICAgICAgICAgICAgeSA9IG1sb29rKG1hY3RhYixhdG1idWYsbm1hYyk7IC8q IGdldCBmdWxsIG5hbWUgKi8KLSAgICAgICAgICAgICAgICBpZiAoeSA+IC0xKQotICAgICAgICAg ICAgICAgICAgcyA9IG1hY3RhYlt5XS5rd2Q7ICAgIC8qIChmYWxsIHRocnUgb24gcHVycG9zZS4u LikgKi8KLSAgICAgICAgICAgICAgY2FzZSBfQ01GTEQ6Ci0gICAgICAgICAgICAgICAgayA9IGNr c3RybmNweShwLHMsbGVmdCkgKyAxOyAvKiBDb3B5IHJlc3VsdCB0byBsaXN0ICovCi0gICAgICAg ICAgICAgICAgbGVmdCAtPSBrOwotICAgICAgICAgICAgICAgIGlmIChsZWZ0IDw9IDApIHsKLSAg ICAgICAgICAgICAgICAgICAgKnAgPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBxW24rK10gPSBwOyAgICAgICAgICAg ICAvKiBQb2ludCB0byB0aGlzIGl0ZW0gKi8KLSAgICAgICAgICAgICAgICBwICs9IGs7ICAgICAg ICAgICAgICAgICAvKiBNb3ZlIGJ1ZmZlciBwb2ludGVyIHBhc3QgaXQgKi8KLSAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBfQ01DRk06ICAgICAgICAgICAgICAvKiBF bmQgb2YgY29tbWFuZCAqLwotICAgICAgICAgICAgICAgIGNvbmZpcm1lZCsrOwotICAgICAgICAg ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0gICAgICAgIGlmIChuID09IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiTWFjcm9z OlxuIik7Ci0gICAgICAgICAgICBzbGMgPSAxOwotICAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8 IG5tYWM7IHkrKykKLSAgICAgICAgICAgICAgaWYgKHNob21hYyhtYWN0YWJbeV0ua3dkLG1hY3Rh Ylt5XS5tdmFsKSA8IDApIGJyZWFrOwotICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICB9 Ci0gICAgICAgIHNsYyA9IDA7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAg ICAgICAgICAgIGZsYWcgPSAwOwotICAgICAgICAgICAgcyA9IHFbaV07Ci0gICAgICAgICAgICBp ZiAoIXMpIHMgPSAiIjsKLSAgICAgICAgICAgIGlmICghKnMpIGNvbnRpbnVlOwotICAgICAgICAg ICAgaWYgKGlzd2lsZChzKSkgeyAgICAgICAgICAgIC8qIFBhdHRlcm4gbWF0Y2ggKi8KLSAgICAg ICAgICAgICAgICBmb3IgKGsgPSAwLCB4ID0gMDsgeCA8IG5tYWM7IHgrKykgewotICAgICAgICAg ICAgICAgICAgICBpZiAoY2ttYXRjaChzLG1hY3RhYlt4XS5rd2QsMCwxKSkgewotICAgICAgICAg ICAgICAgICAgICAgICAgc2hvbWFjKG1hY3RhYlt4XS5rd2QsbWFjdGFiW3hdLm12YWwpOwotICAg ICAgICAgICAgICAgICAgICAgICAgaysrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghaykKLSAgICAgICAgICAgICAgICAgIHgg PSAtMTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBjb250aW51ZTsK LSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBFeGFjdCBtYXRjaCAq LwotICAgICAgICAgICAgICAgIHggPSBteGxvb2sobWFjdGFiLHMsbm1hYyk7Ci0gICAgICAgICAg ICAgICAgZmxhZyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmxhZyAmJiB4 ID09IC0xKQotICAgICAgICAgICAgICB4ID0gbWxvb2sobWFjdGFiLHMsbm1hYyk7Ci0gICAgICAg ICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICAgICAgY2FzZSAtMzogICAgICAgICAgICAgICAg ICAvKiBOb3RoaW5nIHRvIGxvb2sgdXAgKi8KLSAgICAgICAgICAgICAgY2FzZSAtMTogICAgICAg ICAgICAgICAgICAvKiBOb3QgZm91bmQgKi8KLSAgICAgICAgICAgICAgICBwcmludGYoIiVzIC0g KG5vdCBkZWZpbmVkKVxuIixzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgY2FzZSAtMjogICAgICAgICAgICAgICAgICAvKiBBbWJpZ3VvdXMsIG1hdGNoZXMgbW9yZSB0 aGFuIG9uZSAqLwotICAgICAgICAgICAgICAgIHByaW50ZigiJXMgLSBhbWJpZ3VvdXNcbiIscyk7 Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAg ICAgICAgICAgLyogTWF0Y2hlcyBvbmUgZXhhY3RseSAqLwotICAgICAgICAgICAgICAgIHNob21h YyhtYWN0YWJbeF0ua3dkLG1hY3RhYlt4XS5tdmFsKTsKLSAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotI2Vu ZGlmIC8qIE5PU1BMICovCi0KLS8qCi0gIE90aGVyIFNIT1cgY29tbWFuZHMgb25seSBoYXZlIHR3 byBmaWVsZHMuICBHZXQgY29tbWFuZCBjb25maXJtYXRpb24gaGVyZSwKLSAgdGhlbiBoYW5kbGUg d2l0aCBiaWcgc3dpdGNoKCkgc3RhdGVtZW50LgotKi8KLSNpZm5kZWYgTk9TUEwKLSAgICBpZiAo eCAhPSBTSEJVSSAmJiB4ICE9IFNIQVJSKQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApCi0gICAgICAgIHJldHVybih5KTsKLQotI2lmZGVmIENPTU1FTlQK LSAgICAvKiBUaGlzIHJlc3RyaWN0aW9uIGlzIHRvbyBnZW5lcmFsLiAqLwotI2lmZGVmIElLU0QK LSAgICBpZiAoaW5zZXJ2ZXIgJiYKLSNpZmRlZiBDS19MT0dJTgotICAgICAgICBpc2d1ZXN0Ci0j ZWxzZQotICAgICAgICAwCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICAgICAgKSB7Ci0gICAg ICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0gICAgc3dpdGNoICh4KSB7Ci0KLSNpZmRlZiBBTllYMjUKLSNpZm5kZWYgSUJN WDI1Ci0gICAgICBjYXNlIFNIUEFEOgotICAgICAgICBzaG9wYWQoMCk7Ci0gICAgICAgIGJyZWFr OwotI2VuZGlmIC8qIElCTVgyNSAqLwotI2VuZGlmIC8qIEFOWVgyNSAqLwotCi0gICAgICBjYXNl IFNITkVUOgotI2lmZGVmIE5PTE9DQUwKLSAgICAgICAgcHJpbnRmKCIgTm8gbmV0d29yayBzdXBw b3J0IGluIHRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdC5cbiIpOwotI2Vsc2UKLSNpZm5kZWYgTkVU Q09OTgotICAgICAgICBwcmludGYoIiBObyBuZXR3b3JrIHN1cHBvcnQgaW4gdGhpcyB2ZXJzaW9u IG9mIEMtS2VybWl0LlxuIik7Ci0jZWxzZQotICAgICAgICBzaG9uZXQoKTsKLSNlbmRpZiAvKiBO RVRDT05OICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgICAgICBicmVhazsKLQotICAgICAg Y2FzZSBTSFBBUjoKLSAgICAgICAgc2hvcGFyKCk7Ci0gICAgICAgIGJyZWFrOwotCi0jaWZuZGVm IE5PWEZFUgotICAgICAgY2FzZSBTSEFUVDoKLSAgICAgICAgc2hvYXR0KCk7Ci0gICAgICAgIGJy ZWFrOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgICBjYXNlIFNI Q09VOgotICAgICAgICBwcmludGYoIiAlZFxuIixjb3VudFtjbWRsdmxdKTsKLSAgICAgICAgYnJl YWs7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1NFUlZFUgotICAgICAgY2FzZSBT SFNFUjogICAgICAgICAgICAgICAgICAgICAgIC8qIFNob3cgU2VydmVyICovCi0gICAgICAgIGkg PSAwOwotI2lmbmRlZiBOT0ZSSUxMUwotICAgICAgICBwcmludGYoIkZ1bmN0aW9uOiAgICAgICAg ICBTdGF0dXM6XG4iKTsKLSAgICAgICAgaSsrOwotICAgICAgICBwcmludGYoIiBHRVQgICAgICAg ICAgICAgICAgJXNcbiIsbm1bZW5fZ2V0XSk7Ci0gICAgICAgIGkrKzsKLSAgICAgICAgcHJpbnRm KCIgU0VORCAgICAgICAgICAgICAgICVzXG4iLG5tW2VuX3Nlbl0pOwotICAgICAgICBpKys7Ci0g ICAgICAgIHByaW50ZigiIE1BSUwgICAgICAgICAgICAgICAlc1xuIixubVtpbnNlcnZlciA/IDAg OiBlbl9tYWldKTsKLSAgICAgICAgaSsrOwotICAgICAgICBwcmludGYoIiBQUklOVCAgICAgICAg ICAgICAgJXNcbiIsbm1baW5zZXJ2ZXIgPyAwIDogZW5fcHJpXSk7Ci0gICAgICAgIGkrKzsKLSNp Zm5kZWYgTk9TUEwKLSAgICAgICAgcHJpbnRmKCIgUkVNT1RFIEFTU0lHTiAgICAgICVzXG4iLG5t W2VuX2FzZ10pOwotICAgICAgICBpKys7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgcHJp bnRmKCIgUkVNT1RFIENEL0NXRCAgICAgICVzXG4iLG5tW2VuX2N3ZF0pOwotICAgICAgICBpKys7 Ci0jaWZkZWYgWkNPUFkKLSAgICAgICAgcHJpbnRmKCIgUkVNT1RFIENPUFkgICAgICAgICVzXG4i LG5tW2VuX2NweV0pOwotICAgICAgICBpKys7Ci0jZW5kaWYgLyogWkNPUFkgKi8KLSAgICAgICAg cHJpbnRmKCIgUkVNT1RFIERFTEVURSAgICAgICVzXG4iLG5tW2VuX2RlbF0pOwotICAgICAgICBw cmludGYoIiBSRU1PVEUgRElSRUNUT1JZICAgJXNcbiIsbm1bZW5fZGlyXSk7Ci0gICAgICAgIHBy aW50ZigiIFJFTU9URSBIT1NUICAgICAgICAlc1xuIixubVtpbnNlcnZlciA/IDAgOiBlbl9ob3Nd KTsKLSAgICAgICAgaSArPSAzOwotI2lmbmRlZiBOT1NQTAotICAgICAgICBwcmludGYoIiBSRU1P VEUgUVVFUlkgICAgICAgJXNcbiIsbm1bZW5fcXVlXSk7Ci0gICAgICAgIGkrKzsKLSNlbmRpZiAv KiBOT1NQTCAqLwotICAgICAgICBwcmludGYoIiBSRU1PVEUgTUtESVIgICAgICAgJXNcbiIsbm1b ZW5fbWtkXSk7Ci0gICAgICAgIHByaW50ZigiIFJFTU9URSBSTURJUiAgICAgICAlc1xuIixubVtl bl9ybWRdKTsKLSAgICAgICAgcHJpbnRmKCIgUkVNT1RFIFJFTkFNRSAgICAgICVzXG4iLG5tW2Vu X3Jlbl0pOwotICAgICAgICBwcmludGYoIiBSRU1PVEUgU0VUICAgICAgICAgJXNcbiIsbm1bZW5f c2V0XSk7Ci0gICAgICAgIHByaW50ZigiIFJFTU9URSBTUEFDRSAgICAgICAlc1xuIixubVtlbl9z cGFdKTsKLSAgICAgICAgcHJpbnRmKCIgUkVNT1RFIFRZUEUgICAgICAgICVzXG4iLG5tW2VuX3R5 cF0pOwotICAgICAgICBwcmludGYoIiBSRU1PVEUgV0hPICAgICAgICAgJXNcbiIsbm1baW5zZXJ2 ZXIgPyAwIDogZW5fd2hvXSk7Ci0gICAgICAgIHByaW50ZigiIEJZRSAgICAgICAgICAgICAgICAl c1xuIixubVtlbl9ieWVdKTsKLSAgICAgICAgcHJpbnRmKCIgRklOSVNIICAgICAgICAgICAgICVz XG4iLG5tW2VuX2Zpbl0pOwotICAgICAgICBwcmludGYoIiBFWElUICAgICAgICAgICAgICAgJXNc biIsbm1bZW5feGl0XSk7Ci0gICAgICAgIHByaW50ZigiIEVOQUJMRSAgICAgICAgICAgICAlc1xu IixubVtlbl9lbmFdKTsKLSAgICAgICAgaSArPSAxMTsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwot ICAgICAgICBpZiAoaSA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEp OyBlbHNlIGkgPSAwOyB9Ci0gICAgICAgIHByaW50ZigiU2VydmVyIHRpbWVvdXQ6ICAgICAgJWRc biIsc3J2dGltKTsKLSAgICAgICAgaWYgKCsraSA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDEpOyBlbHNlIGkgPSAwOyB9Ci0gICAgICAgIHByaW50ZigiU2VydmVyIGlk bGUtdGltZW91dDogJWRcbiIsc3J2aWRsKTsKLSAgICAgICAgaWYgKCsraSA+IGNtZF9yb3dzIC0g MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGkgPSAwOyB9Ci0gICAgICAgIHBy aW50ZigiU2VydmVyIGtlZXBhbGl2ZSAgICAgJXNcbiIsIHNob3dvZmYoc3J2cGluZykpOwotICAg ICAgICBpZiAoKytpID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgaSA9IDA7IH0KLSAgICAgICAgcHJpbnRmKCJTZXJ2ZXIgY2QtbWVzc2FnZSAgICAlc1xu Iiwgc2hvd29mZihzcnZjZG1zZykpOwotICAgICAgICBpZiAoc3J2Y2Rtc2cgJiYgY2Rtc2dzdHIp Ci0gICAgICAgICAgcHJpbnRmKCJTZXJ2ZXIgY2QtbWVzc2FnZSAgICAlc1xuIiwgY2Rtc2dzdHIp OwotICAgICAgICBpZiAoKytpID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMSk7IGVsc2UgaSA9IDA7IH0KLSAgICAgICAgcHJpbnRmKCJTZXJ2ZXIgZGlzcGxheTogICAg ICAlc1xuIiwgc2hvd29mZihzcnZkaXMpKTsKLSAgICAgICAgaWYgKCsraSA+IGNtZF9yb3dzIC0g MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGkgPSAwOyB9Ci0gICAgICAgIHBy aW50ZigiU2VydmVyIGxvZ2luOiAgICAgICAgIik7Ci0gICAgICAgIGlmICgheF91c2VyKSB7Ci0g ICAgICAgICAgICBwcmludGYoIihub25lKVxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICBwcmludGYoIlwiJXNcIiwgXCIlc1wiLCBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAg ICAgeF91c2VyLAotICAgICAgICAgICAgICAgICAgIHhfcGFzc3dkID8geF9wYXNzd2QgOiAiIiwK LSAgICAgICAgICAgICAgICAgICB4X2FjY3QgPyB4X2FjY3QgOiAiIgotICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCsraSA+IGNtZF9yb3dzIC0gMykgeyBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGkgPSAwOyB9Ci0gICAgICAgIHByaW50ZigiU2Vy dmVyIGdldC1wYXRoOiAiKTsKLSAgICAgICAgaWYgKG5nZXRwYXRoID09IDApIHsKLSAgICAgICAg ICAgIHByaW50ZigiICAgIChub25lKVxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBmb3IgKHgg PSAwOyB4IDwgbmdldHBhdGg7IHgrKykgewotICAgICAgICAgICAgICAgIGlmIChnZXRwYXRoW3hd KSBwcmludGYoIiAlZC4gJXNcbiIsIHgsIGdldHBhdGhbeF0pOwotICAgICAgICAgICAgICAgIGlm ICgrK2kgPiAoY21kX3Jvd3MgLSAzKSkgeyAvKiBNb3JlIHRoYW4gYSBzY3JlZW5mdWwuLi4gKi8K LSAgICAgICAgICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCi0gICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg ICBpID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQotICAgICAgY2FzZSBTSFNUQTog ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXR1cyBvZiBsYXN0IGNvbW1hbmQgKi8KLSAgICAg ICAgcHJpbnRmKCIgJXNcbiIsIHN1Y2Nlc3MgPyAiU1VDQ0VTUyIgOiAiRkFJTFVSRSIpOwotICAg ICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGNoYW5nZSBpdCAq LwotCi0gICAgICBjYXNlIFNIU1RLOiB7ICAgICAgICAgICAgICAgICAgICAgLyogU3RhY2sgZm9y IE1BQyBkZWJ1Z2dpbmcgKi8KLSNpZmRlZiBNQUMKLSAgICAgICAgICBsb25nIHNwOwotICAgICAg ICAgIHNwID0gLTE7Ci0gICAgICAgICAgbG9hZEEwICgoY2hhciAqKSZzcCk7ICAgICAgICAgLyog c2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KLSAgICAgICAgICBTUHRvYUEwKCk7ICAgICAgICAg ICAgICAgICAgICAvKiBtb3ZlIFNQIHRvIGRlc3RpbmF0aW9uICovCi0gICAgICAgICAgcHJpbnRm KCJTdGFjayBhdCAweCV4XG4iLCBzcCk7Ci0gICAgICAgICAgc2hvd19xdWV1ZSgpOyAgICAgICAg ICAgICAgICAgLyogbW9yZSBkZWJ1Z2dpbmcgKi8KLSAgICAgICAgICBicmVhazsKLSNlbHNlCi0g ICAgICAgICAgc2hvc3RhY2soKTsKLSNlbmRpZiAvKiBNQUMgKi8KLSAgICAgICAgICBicmVhazsK LSAgICAgIH0KLQotCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICAgIGNhc2UgU0hU QUI6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTSE9XIFRBQlMgKi8KLSNpZmRlZiBJS1NECi0g ICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFu ZCBkaXNhYmxlZC5cclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAg ICAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICBzaG90YWJzKCk7Ci0gICAgICAgIGJy ZWFrOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgICBjYXNlIFNIVEVSOiAgICAgICAgICAgICAg ICAgICAgICAgLyogU0hPVyBURVJNSU5BTCAqLwotI2lmZGVmIElLU0QKLSAgICAgICAgaWYgKGlu c2VydmVyKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxy XG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSNlbmRp ZiAvKiBJS1NEICovCi0gICAgICAgIHNob3RybSgpOwotICAgICAgICBicmVhazsKLQotI2lmZGVm IE9TMgotICAgICAgY2FzZSBTSFZTQ1JOOiAgICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgVmly dHVhbCBTY3JlZW4gLSBmb3IgZGVidWcgKi8KLSAgICAgICAgc2hvdnNjcm4oKTsKLSAgICAgICAg YnJlYWs7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZkZWYg T1MyTU9VU0UKLSAgICAgIGNhc2UgU0hNT1U6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTSE9X IE1PVVNFICovCi0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAg ICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAg ICAgc2hvbW91KCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE9TMk1PVVNFICovCi0KLSNp Zm5kZWYgTk9GUklMTFMKLSAgICAgIGNhc2UgU0hWRVI6Ci0gICAgICAgIHNob3ZlcigpOwotICAg ICAgICBicmVhazsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAg ICBjYXNlIFNIQlVJOiAgICAgICAgICAgICAgICAgICAgICAgLyogQnVpbHQtaW4gdmFyaWFibGVz ICovCi0JbGluZVswXSA9IE5VTDsKLSAgICAgICAgaWYgKCh5ID0gY210eHQoIlZhcmlhYmxlIG5h bWUgb3IgcGF0dGVybiIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkp OwotICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgICAgIC8qIGlmIChs aW5lWzBdKSBja3N0cm5jYXQobGluZSwiKiIsTElOQlVGU0laKTsgKi8KLQotICAgICAgY2FzZSBT SEZVTjogICAgICAgICAgICAgICAgICAgICAgIC8qIG9yIGJ1aWx0LWluIGZ1bmN0aW9ucyAqLwot I2lmZGVmIENLX1RUR1dTSVoKLSNpZmRlZiBPUzIKLSAgICAgICAgaWYgKHR0X2NvbHNbVlRFUk1d IDwgMCB8fCB0dF9yb3dzW1ZURVJNXSA8IDApCi0gICAgICAgICAgdHRnd3NpeigpOwotI2Vsc2Ug LyogT1MyICovCi0gICAgICAgIGlmICh0dGd3c2l6KCkgPiAwKSB7ICAgICAgICAgICAgLyogR2V0 IGN1cnJlbnQgc2NyZWVuIHNpemUgKi8KLSAgICAgICAgICAgIGlmICh0dF9yb3dzID4gMCAmJiB0 dF9jb2xzID4gMCkgewotICAgICAgICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93czsKLSAgICAg ICAgICAgICAgICBjbWRfY29scyA9IHR0X2NvbHM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0KLSAgICAgICAgaWYg KHggPT0gU0hGVU4pIHsgICAgICAgICAgICAgICAvKiBGdW5jdGlvbnMgKi8KLSAgICAgICAgICAg IHByaW50ZigiXG5UaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlOlxuXG4iKTsK LSAgICAgICAgICAgIGt3ZGhlbHAoZm5jdGFiLG5mdW5jcywiIiwiXFxGIiwiKCkiLDMsMCk7Ci0g ICAgICAgICAgICBwcmludGYoIlxuIik7Ci0jaWZuZGVmIE5PSEVMUAotICAgICAgICAgICAgcHJp bnRmKAotIkhFTFAgRlVOQ1RJT04gPG5hbWU+IGdpdmVzIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25z IG9mIHRoZSBnaXZlbiBmdW5jdGlvbi5cblxuIgotICAgICAgICAgICAgICAgICAgICk7Ci0jZW5k aWYgLyogTk9IRUxQICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBWYXJpYWJsZXMgKi8KLQkgICAgaW50IGosIGZsYWcgPSAw LCBoYXZlYXJnID0gMDsKLQkgICAgc3RydWN0IHN0cmluZ2FycmF5ICogcSA9IE5VTEw7Ci0JICAg IGNoYXIgKiogcHA7Ci0JICAgIGlmIChsaW5lWzBdKSB7CQkvKiBIYXZlIHNvbWV0aGluZyB0byBz ZWFyY2ggZm9yICovCi0JCWhhdmVhcmcgPSAxOwkJLyogTWF5YmUgYSBsaXN0IG9mIHRoaW5ncyAq LwotCQlxID0gY2tzcGxpdCgxLDAsbGluZSxOVUxMLCJfLV4kKj9bXXt9IiwwLDAsMCk7Ci0JCWlm ICghcSkgYnJlYWs7Ci0JCXBwID0gcS0+YV9oZWFkOwotCSAgICB9Ci0JICAgIGkgPSAwOwotCSAg ICBmb3IgKHkgPSAwOyB5IDwgbnZhcnM7IHkrKykgewotCQlpZiAoKHZhcnRhYlt5XS5mbGdzICYg Q01fSU5WKSkKLQkJICBjb250aW51ZTsKLQkJaWYgKGhhdmVhcmcpIHsJCS8qIElmIEkgaGF2ZSBz b21ldGhpbmcgdG8gbWF0Y2ggKi8KLQkJICAgIGNoYXIgKiBzMjsKLQkJICAgIGZvciAoZmxhZyA9 IDAsIGogPSAxOyBqIDw9IHEtPmFfc2l6ZSAmJiAhZmxhZzsgaisrKSB7Ci0JCQlzMiA9IHBwW2pd ID8gcHBbal0gOiAiIjsKLSNpZmRlZiBDT01NRU5UCi0vKiBUaGlzIGlzIG5vdCBuZWVkZWQgYmVj YXVzZSBpdCdzIHdoYXQgdGhlIDQgYXJnIGRvZXMgaW4gY2ttYXRjaCgpICovCi0JCQlsZW4gPSBz dHJsZW4oczIpOwotCQkJaWYgKGxlbiA+IDApIHsKLQkJCSAgICBpZiAoczJbbGVuLTFdICE9ICck Jykgey8qIFRvIGFsbG93IGFuY2hvcnMgKi8KLQkJCQlja21ha21zZyhsaW5lLExJTkJVRlNJWixw cFtqXSwiKiIsTlVMTCxOVUxMKTsKLQkJCQlzMiA9IGxpbmU7Ci0JCQkgICAgfQotCQkJfQotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQkJCWlmIChja21hdGNoKHMyLHZhcnRhYlt5XS5rd2QsMCw0KSA+ IDApIHsKLQkJCSAgICBmbGFnID0gMTsJLyogTWF0Y2hlcyAqLwotCQkJICAgIGJyZWFrOwotCQkJ fQotCQkgICAgfQotCQkgICAgaWYgKCFmbGFnKQkJLyogRG9lc24ndCBtYXRjaCAqLwotCQkgICAg ICBjb250aW51ZTsKLQkJfQotCQlzID0gbnZsb29rKHZhcnRhYlt5XS5rd2QpOwotCQlwcmludGYo IiBcXHYoJXMpID0gIix2YXJ0YWJbeV0ua3dkKTsKLQkJaWYgKHZhcnRhYlt5XS5rd3ZhbCA9PSBW Tl9ORVdMKSB7IC8qIFx2KG5ld2xpbmUpICovCi0JCSAgICB3aGlsZSAoKnMpCQkvKiBTaG93IGNv bnRyb2wgY2hhcnMgc3ltYm9saWNhbGx5ICovCi0JCSAgICAgIHByaW50ZigiXFx7JWR9Iiwqcysr KTsKLQkJICAgIHByaW50ZigiXG4iKTsKLQkJfSBlbHNlIGlmICh2YXJ0YWJbeV0ua3d2YWwgPT0g Vk5fSUJVRiAgfHwgLyogXHYoaW5wdXQpICovCi0JCQkgICB2YXJ0YWJbeV0ua3d2YWwgPT0gVk5f UVVFICAgfHwgLyogXHYocXVlcnkpICovCi0jaWZkZWYgT1MyCi0JCQkgICB2YXJ0YWJbeV0ua3d2 YWwgPT0gVk5fU0VMQ1QgfHwgLyogXHYoc2VsZWN0KSAqLwotI2VuZGlmIC8qIE9TMiAqLwotCQkJ ICAgKHZhcnRhYlt5XS5rd3ZhbCA+PSBWTl9NX0FBQSAmJiAvKiBtb2RlbSBvbmVzICovCi0JCQkg ICAgdmFydGFiW3ldLmt3dmFsIDw9IFZOX01fWlpaKQotCQkJICAgKSB7Ci0JCSAgICBpbnQgciA9 IDEyOwkJLyogVGhpcyBvbmUgY2FuIHdyYXAgYXJvdW5kICovCi0JCSAgICBjaGFyIGJ1ZlsxMF07 Ci0JCSAgICB3aGlsZSAoKnMpIHsKLQkJCWlmIChpc3ByaW50KCpzKSkgewotCQkJICAgIGJ1Zlsw XSA9ICpzOwotCQkJICAgIGJ1ZlsxXSA9IE5VTDsKLQkJCSAgICByKys7Ci0JCQl9IGVsc2Ugewot CQkJICAgIHNwcmludGYoYnVmLCJcXHslZH0iLCpzKTsgLyogU0FGRSAqLwotCQkJICAgIHIgKz0g KGludCkgc3RybGVuKGJ1Zik7Ci0JCQl9Ci0JCQlpZiAociA+PSBjbWRfY29scyAtIDEpIHsKLQkJ CSAgICBwcmludGYoIlxuIik7Ci0JCQkgICAgciA9IDA7Ci0JCQkgICAgaSsrOwotCQkJfQotCQkJ cHJpbnRmKCIlcyIsYnVmKTsKLQkJCXMrKzsKLQkJICAgIH0KLQkJICAgIHByaW50ZigiXG4iKTsK LQkJfSBlbHNlCi0JCSAgcHJpbnRmKCIlc1xuIixzKTsKLQkJaWYgKCsraSA+IChjbWRfcm93cyAt IDMpKSB7IC8qIE1vcmUgdGhhbiBhIHNjcmVlbmZ1bC4uLiAqLwotCQkgICAgaWYgKCh5ID49IG52 YXJzIC0gMSkgfHwgIWFza21vcmUoKSkKLQkJICAgICAgYnJlYWs7Ci0JCSAgICBlbHNlCi0JCSAg ICAgIGkgPSAwOwotCQl9Ci0JICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAg ICAgY2FzZSBTSFZBUjogICAgICAgICAgICAgICAgICAgICAgIC8qIEdsb2JhbCB2YXJpYWJsZXMg Ki8KLSAgICAgICAgeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWYXJpYWJsZSBj b3VudCAqLwotICAgICAgICBzbGMgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNjcmVl biBsaW5lIGNvdW50IGZvciAibW9yZT8iICovCi0gICAgICAgIGZvciAoeSA9IDMzOyB5IDwgR1ZB UlM7IHkrKykKLSAgICAgICAgICBpZiAoZ192YXJbeV0pIHsKLSAgICAgICAgICAgICAgaWYgKHgr KyA9PSAwKSBwcmludGYoIkdsb2JhbCB2YXJpYWJsZXM6XG4iKTsKLSAgICAgICAgICAgICAgc3By aW50ZihsaW5lLCIgXFwlJSVjIix5KTsgLyogU0FGRSAqLwotICAgICAgICAgICAgICBpZiAoc2hv bWFjKGxpbmUsZ192YXJbeV0pIDwgMCkgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICBpZiAo IXgpIHByaW50ZigiIE5vIHZhcmlhYmxlcyBkZWZpbmVkXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0K LSAgICAgIGNhc2UgU0hBUkc6IHsgICAgICAgICAgICAgICAgICAgICAvKiBBcmdzICovCi0gICAg ICAgICAgY2hhciAqIHMxLCAqIHMyOwotICAgICAgICAgIGlmIChtYWNsdmwgPiAtMSkgewotICAg ICAgICAgICAgICBwcmludGYoIk1hY3JvIGFyZ3VtZW50cyBhdCBsZXZlbCAlZCAoXFx2KGFyZ2Mp ID0gJWQpOlxuIiwKLSAgICAgICAgICAgICAgICAgICAgIG1hY2x2bCwKLSAgICAgICAgICAgICAg ICAgICAgIG1hY2FyZ2NbbWFjbHZsXQotICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgZm9yICh5ID0gMDsgeSA8IG1hY2FyZ2NbbWFjbHZsXTsgeSsrKSB7Ci0gICAgICAgICAg ICAgICAgICBzMSA9IG1fYXJnW21hY2x2bF1beV07Ci0gICAgICAgICAgICAgICAgICBpZiAoIXMx KSBzMSA9ICIoTlVMTCkiOwotICAgICAgICAgICAgICAgICAgczIgPSBtX3hhcmdbbWFjbHZsXVt5 XTsKLSAgICAgICAgICAgICAgICAgIGlmICghczIpIHMyID0gIihOVUxMKSI7Ci0gICAgICAgICAg ICAgICAgICBpZiAoeSA8IDEwKQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBcXCUlJWQg PSAlc1xuIix5LHMxKTsKLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCIgXFwmX1slZF0gPSAlc1xuIix5LHMyKTsKLSAgICAgICAgICAgICAgfQotICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHByaW50ZigiVG9wLWxldmVsIGFyZ3VtZW50 cyAoXFx2KGFyZ2MpID0gJWQpOlxuIiwgdG9wYXJnYyk7Ci0gICAgICAgICAgICAgIGZvciAoeSA9 IDA7IHkgPCB0b3BhcmdjOyB5KyspIHsKLSAgICAgICAgICAgICAgICAgIHMxID0gZ192YXJbeSAr ICcwJ107Ci0gICAgICAgICAgICAgICAgICBpZiAoIXMxKSBzMSA9ICIoTlVMTCkiOwotICAgICAg ICAgICAgICAgICAgczIgPSB0b3BhcmdbeV07Ci0gICAgICAgICAgICAgICAgICBpZiAoIXMyKSBz MiA9ICIoTlVMTCkiOwotICAgICAgICAgICAgICAgICAgaWYgKHkgPCAxMCAmJiBnX3Zhclt5XSkK LSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgXFwlJSVkID0gJXNcbiIseSxzMSk7Ci0gICAg ICAgICAgICAgICAgICBpZiAodG9wYXJnW3ldKQotICAgICAgICAgICAgICAgICAgICBwcmludGYo IiBcXCZfWyVkXSA9ICVzXG4iLHksczIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQot ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFNIQVJSOiAgICAgICAgICAg ICAgICAgICAgICAgLyogQXJyYXlzICovCi0gICAgICAgIHJldHVybihzaG93YXJyYXkoKSk7Ci0j ZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICAgIGNhc2UgU0hQUk86ICAg ICAgICAgICAgICAgICAgICAgICAvKiBQcm90b2NvbCBwYXJhbWV0ZXJzICovCi0gICAgICAgIHNo b3BhcnAoKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAv KiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICBjYXNlIFNIQ09NOiAgICAgICAg ICAgICAgICAgICAgICAgLyogQ29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzICovCi0gICAgICAgIHBy aW50ZigiXG4iKTsKLSAgICAgICAgc2hvcGFyYygpOwotI2lmZGVmIE9TMgotICAgICAgICB7Ci0g ICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGNoYXIgKnMgPSAiKHVua25vd24pIjsKLSAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBucHJ0eTsgaSsrKQotICAgICAgICAgICAgICBpZiAo cHJ0eXRhYltpXS5rd3ZhbCA9PSBwcmlvcml0eSkgewotICAgICAgICAgICAgICAgICAgcyA9IHBy dHl0YWJbaV0ua3dkOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0K LSAgICAgICAgICAgIHByaW50ZigiIFByaW9yaXR5OiAlc1xuIiwgcyApOwotICAgICAgICB9Ci0j ZW5kaWYgLyogT1MyICovCi0KLSAgICAgICAgcHJpbnRmKCJcbiIpOwotI2lmZGVmIE5FVENPTk4K LSAgICAgICAgaWYgKCFuZXR3b3JrCi0jaWZkZWYgSUtTRAotICAgICAgICAgICAgICYmICFpbnNl cnZlcgotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgICAgICApIHsKLSNlbmRpZiAvKiBORVRD T05OICovCi0gICAgICAgICAgICBzaG9tZG0oKTsKLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsK LSNpZmRlZiBORVRDT05OCi0gICAgICAgIH0KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNpZm5k ZWYgTk9ESUFMCi0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoICFpbnNlcnZlciApCi0jZW5kaWYg LyogSUtTRCAqLwotICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGYoIlR5cGUgU0hPVyBESUFM IHRvIHNlZSBESUFMLXJlbGF0ZWQgaXRlbXMuXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiVHlw ZSBTSE9XIE1PREVNIHRvIHNlZSBtb2RlbS1yZWxhdGVkIGl0ZW1zLlxuIik7Ci0jaWZkZWYgQ0tf VEFQSQotICAgICAgICAgICAgcHJpbnRmKCJUeXBlIFNIT1cgVEFQSSB0byBzZWUgVEFQSS1yZWxh dGVkIGl0ZW1zLlxuIik7Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotICAgICAgICAgICAgcHJpbnRm KCJcbiIpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9ESUFMICovCi0gICAgICAgIGJyZWFrOwot I2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotICAgICAgY2FzZSBTSEZJTDogICAgICAgICAgICAgICAg ICAgICAgIC8qIEZpbGUgcGFyYW1ldGVycyAqLwotICAgICAgICBzaG9maWwoKTsKLSAgICAgICAg LyogcHJpbnRmKCJcbiIpOyAqLyAgICAgICAgICAgICAvKiAob3V0IG8nIHNwYWNlKSAqLwotICAg ICAgICBicmVhazsKLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgICBjYXNlIFNITE5HOiAgICAgICAg ICAgICAgICAgICAgICAgLyogTGFuZ3VhZ2VzICovCi0gICAgICAgIHNob3BhcmwoKTsKLSAgICAg ICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgICBj YXNlIFNIU0NSOiAgICAgICAgICAgICAgICAgICAgICAgLyogU2NyaXB0cyAqLwotICAgICAgICBw cmludGYoIiBDb21tYW5kIHF1b3Rpbmc6ICAgICAgICAlc1xuIiwgc2hvd29mZihjbWRncXVvKCkp KTsKLSAgICAgICAgcHJpbnRmKCIgVGFrZSAgZWNobzogICAgICAgICAgICAgJXNcbiIsIHNob3dv ZmYodGVjaG8pKTsKLSAgICAgICAgcHJpbnRmKCIgVGFrZSAgZXJyb3I6ICAgICAgICAgICAgJXNc biIsIHNob3dvZmYodGFrZXJyW2NtZGx2bF0pKTsKLSAgICAgICAgcHJpbnRmKCIgTWFjcm8gZWNo bzogICAgICAgICAgICAgJXNcbiIsIHNob3dvZmYobWVjaG8pKTsKLSAgICAgICAgcHJpbnRmKCIg TWFjcm8gZXJyb3I6ICAgICAgICAgICAgJXNcbiIsIHNob3dvZmYobWVycm9yW2NtZGx2bF0pKTsK LSAgICAgICAgcHJpbnRmKCIgUXVpZXQ6ICAgICAgICAgICAgICAgICAgJXNcbiIsIHNob3dvZmYo cXVpZXQpKTsKLSAgICAgICAgcHJpbnRmKCIgVmFyaWFibGUgZXZhbHVhdGlvbjogICAgJXMgW1xc JSV4IGFuZCBcXCZ4W10gdmFyaWFibGVzXVxuIiwKLQkgICAgICAgdmFyZXZhbCA/ICJyZWN1cnNp dmUiIDogInNpbXBsZSIpOwotICAgICAgICBwcmludGYoIiBGdW5jdGlvbiBkaWFnbm9zdGljczog ICAlc1xuIiwgc2hvd29mZihmbmRpYWdzKSk7Ci0gICAgICAgIHByaW50ZigiIEZ1bmN0aW9uIGVy cm9yOiAgICAgICAgICVzXG4iLCBzaG93b2ZmKGZuZXJyb3IpKTsKLSNpZmRlZiBDS0xFQVJOCi0g ICAgICAgIHsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyICogbGVhcm5maWxlOwotICAgICAgICAg ICAgZXh0ZXJuIGludCBsZWFybmluZzsKLSAgICAgICAgICAgIGlmIChsZWFybmZpbGUpIHsKLSAg ICAgICAgICAgICAgICBwcmludGYoIiBMRUFSTiBmaWxlOiAgICAgICAgICAgICAlcyAoJXMpXG4i LAotICAgICAgICAgICAgICAgICAgICAgICBsZWFybmZpbGUsCi0gICAgICAgICAgICAgICAgICAg ICAgIGxlYXJuaW5nID8gIk9OIiA6ICJPRkYiCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgcHJpbnRmKCIgTEVBUk4gZmlsZTogICAg ICAgICAgICAgKG5vbmUpXG4iKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLTEVBUk4gKi8KLSAg ICAgICAgc2hvaW5wdXQoKTsKLSAgICAgICAgc2hvb3V0cHV0KCk7Ci0jaWZuZGVmIE5PU0NSSVBU Ci0gICAgICAgIHByaW50ZigiIFNjcmlwdCBlY2hvOiAgICAgICAgICAgICVzXG4iLCBzaG93b2Zm KHNlY2hvKSk7Ci0jZW5kaWYgLyogTk9TQ1JJUFQgKi8KLSAgICAgICAgcHJpbnRmKCIgQ29tbWFu ZCBidWZmZXIgbGVuZ3RoOiAgJWRcbiIsIENNREJMKTsKLSAgICAgICAgcHJpbnRmKCIgQXRvbSBi dWZmZXIgbGVuZ3RoOiAgICAgJWRcbiIsIEFUTUJMKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYg LyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1hNSVQKLSAgICAgIGNhc2UgU0hYTUk6Ci0gICAgICAg IHByaW50ZigiXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgRmlsZSB0eXBlOiAgICAgICAgICAgICAg ICAgICAgICAgJXNcbiIsCi0gICAgICAgICAgICAgICBiaW5hcnkgPyAiYmluYXJ5IiA6ICJ0ZXh0 Iik7Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgICAgcHJpbnRmKCIgRmlsZSBjaGFyYWN0ZXItc2V0 OiAgICAgICAgICAgICAgJXNcbiIsCi0gICAgICAgICAgICAgICBmY3NpbmZvW2ZjaGFyc2V0XS5r ZXl3b3JkKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgaWYgKCBpc3VuaWNvZGUoKSApIHsKLSAgICAg ICAgcHJpbnRmKCIgVGVybWluYWwgQ2hhcmFjdGVyIChyZW1vdGUpOiAgICAgJXNcbiIsCi0gICAg ICAgICAgICAgIHR0X3V0ZjggPyAidXRmLTgiIDogdGNzciA9PSBUWF9UUkFOU1AgPyAidHJhbnNw YXJlbnQiIDoKLSAgICAgICAgICAgICAgdGNzciA9PSBUWF9VTkRFRiA/ICJ1bmRlZmluZWQiIDog dHhyaW5mb1t0Y3NyXS0+a2V5d2QpOwotICAgICAgICBwcmludGYoIiBUZXJtaW5hbCBDaGFyYWN0 ZXIgKGxvY2FsKTogICAgICAlc1xuIiwKLSAgICAgICAgICAgICAgdGNzbCA9PSBUWF9UUkFOU1Ag PyAidHJhbnNwYXJlbnQiIDoKLSAgICAgICAgICAgICAgdGNzbCA9PSBUWF9VTkRFRiA/ICJ1bmRl ZmluZWQiIDogdHhyaW5mb1t0Y3NsXS0+a2V5d2QpOwotICAgICAgICB9IGVsc2UgewotICAgICAg ICBwcmludGYoIiBUZXJtaW5hbCBDaGFyYWN0ZXIgKHJlbW90ZSk6ICAgICAlc1xuIiwKLSAgICAg ICAgICAgICAgdHRfdXRmOCA/ICJ1dGYtOCIgOiB0Y3NyID09IFRYX1RSQU5TUCA/ICJ0cmFuc3Bh cmVudCIgOgotICAgICAgICAgICAgICB0Y3NyID09IFRYX1VOREVGID8gInVuZGVmaW5lZCIgOiB0 eHJpbmZvW3Rjc3JdLT5rZXl3ZCk7Ci0gICAgICAgIHByaW50ZigiIFRlcm1pbmFsIENoYXJhY3Rl ciAobG9jYWwpOiAgICAgICVzXG4iLAotICAgICAgICAgICAgICB0Y3NsID09IFRYX1RSQU5TUCA/ ICJ0cmFuc3BhcmVudCIgOgotICAgICAgICAgICAgICB0Y3NsID09IFRYX1VOREVGID8gInVuZGVm aW5lZCIgOiB0eHJpbmZvW3Rjc2xdLT5rZXl3ZCk7Ci0gICAgICAgIH0KLSNlbHNlIC8qIE9TMiAq LwotICAgICAgICBwcmludGYoIiBUZXJtaW5hbCBjaGFyYWN0ZXItc2V0IChyZW1vdGUpOiAlc1xu IiwKLSAgICAgICAgICAgICAgIGZjc2luZm9bdGNzcl0ua2V5d29yZCk7Ci0gICAgICAgIHByaW50 ZigiIFRlcm1pbmFsIGNoYXJhY3Rlci1zZXQgKGxvY2FsKTogICVzXG4iLAotICAgICAgICAgICAg ICAgZmNzaW5mb1t0Y3NsXS5rZXl3b3JkKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBO T0NTRVRTICovCi0gICAgICAgIHByaW50ZigiIFRlcm1pbmFsIGJ5dGVzaXplOiAgICAgICAgICAg ICAgICVkXG4iLAotICAgICAgICAgICAgICAgKGNtYXNrID09IDB4ZmYpID8gOCA6IDcpOwotICAg ICAgICBwcmludGYoIiBUZXJtaW5hbCBlY2hvOiAgICAgICAgICAgICAgICAgICAlc1xuIiwKLSAg ICAgICAgICAgICAgIGR1cGxleCA/ICJsb2NhbCIgOiAicmVtb3RlIik7Ci0gICAgICAgIHByaW50 ZigiIFRyYW5zbWl0IEVPRjogICAgICAgICAgICAgICAgICAgICIpOwotICAgICAgICBpZiAoKnht aXRidWYgPT0gTlVMKSB7Ci0gICAgICAgICAgICBwcmludGYoIihub25lKVxuIik7Ci0gICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICBjaGFyICpwOwotICAgICAgICAgICAgcCA9IHhtaXRidWY7 Ci0gICAgICAgICAgICB3aGlsZSAoKnApIHsKLSAgICAgICAgICAgICAgICBpZiAoKnAgPCBTUCkK LSAgICAgICAgICAgICAgICAgIHByaW50ZigiXiVjIixjdGwoKnApKTsKLSAgICAgICAgICAgICAg ICBlbHNlCi0gICAgICAgICAgICAgICAgICBwcmludGYoIiVjIiwqcCk7Ci0gICAgICAgICAgICAg ICAgcCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAg ICB9Ci0gICAgICAgIGlmICh4bWl0ZikKLSAgICAgICAgICBwcmludGYoIiBUcmFuc21pdCBGaWxs OiAgICAgICAgICAgICAgICAgICAlZFxuIiwgeG1pdGYpOwotICAgICAgICBlbHNlCi0gICAgICAg ICAgcHJpbnRmKCIgVHJhbnNtaXQgRmlsbDogICAgICAgICAgICAgICAgICAgKG5vbmUpXG4iKTsK LSAgICAgICAgcHJpbnRmKCIgVHJhbnNtaXQgTGluZWZlZWQ6ICAgICAgICAgICAgICAgJXNcbiIs c2hvd29mZih4bWl0bCkpOwotICAgICAgICBpZiAoeG1pdHApCi0gICAgICAgICAgcHJpbnRmKCIg VHJhbnNtaXQgUHJvbXB0OiAgICAgICAgICAgICAgICAgJWQgKCVzKVxuIiwKLSAgICAgICAgICAg ICAgICAgeG1pdHAsCi0gICAgICAgICAgICAgICAgIGNoYXJ0b3N0cih4bWl0cCkKLSAgICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByaW50ZigiIFRyYW5zbWl0IFBy b21wdDogICAgICAgICAgICAgICAgIChub25lKVxuIik7Ci0gICAgICAgIHByaW50ZigiIFRyYW5z bWl0IEVjaG86ICAgICAgICAgICAgICAgICAgICVzXG4iLCBzaG93b2ZmKHhtaXR4KSk7Ci0gICAg ICAgIHByaW50ZigiIFRyYW5zbWl0IExvY2tpbmctU2hpZnQ6ICAgICAgICAgICVzXG4iLCBzaG93 b2ZmKHhtaXRzKSk7Ci0gICAgICAgIHByaW50ZigiIFRyYW5zbWl0IFBhdXNlOiAgICAgICAgICAg ICAgICAgICVkIChtaWxsaXNlY29uZCVzKVxuIiwKLSAgICAgICAgICAgICAgIHhtaXR3LAotICAg ICAgICAgICAgICAgKHhtaXR3ID09IDEpID8gIiIgOiAicyIKLSAgICAgICAgICAgICAgICk7Ci0g ICAgICAgIHByaW50ZigiIFRyYW5zbWl0IFRpbWVvdXQ6ICAgICAgICAgICAgICAgICVkIChzZWNv bmQlcylcbiIsCi0gICAgICAgICAgICAgICB4bWl0dCwKLSAgICAgICAgICAgICAgICh4bWl0dCA9 PSAxKSA/ICIiIDogInMiCi0gICAgICAgICAgICAgICApOwotICAgICAgICBwcmludGYoIlxuIik7 Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PWE1JVCAqLwotCi0jaWZuZGVmIE5PRElBTAot ICAgICAgY2FzZSBTSE1PRDogICAgICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgTU9ERU0gKi8K LSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgcHJpbnRm KCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICBzaG9tb2Rl bSgpOyAgICAgICAgICAgICAgICAgICAgIC8qIFNob3cgU0VUIE1PREVNIGl0ZW1zICovCi0gICAg ICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0jaWZuZGVmIE1BQwotICAgICAgY2Fz ZSBTSERGTFQ6Ci0gICAgICAgIHByaW50ZigiJXNcbiIsemd0ZGlyKCkpOwotICAgICAgICBicmVh azsKLSNlbmRpZiAvKiBNQUMgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICBjYXNlIFNIRVND OgotI2lmZGVmIElLU0QKLSAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICBwcmlu dGYoIlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgIHJldHVy bihzaG9lc2MoZXNjYXBlKSk7Ci0KLSNpZm5kZWYgTk9ESUFMCi0gICAgICBjYXNlIFNIRElBOiAg ICAgICAgICAgICAgICAgICAgICAgLyogU0hPVyBESUFMICovCi0jaWZkZWYgSUtTRAotICAgICAg ICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlz YWJsZWQuXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAg fQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgc2htZG1saW4oKTsKLSAgICAgICAgcHJpbnRm KCIsIHNwZWVkOiAiKTsKLSAgICAgICAgaWYgKCh6eiA9IHR0Z3NwZCgpKSA8IDApIHsKLSAgICAg ICAgICAgIHByaW50ZigidW5rbm93biIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg aWYgKHp6ID09IDg4ODApIHByaW50ZigiNzUvMTIwMCIpOyBlbHNlIHByaW50ZigiJWxkIix6eik7 Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNhcnJpZXIgPT0gQ0FSX09GRikgcyA9ICJvZmYiOwot ICAgICAgICBlbHNlIGlmIChjYXJyaWVyID09IENBUl9PTikgcyA9ICJvbiI7Ci0gICAgICAgIGVs c2UgaWYgKGNhcnJpZXIgPT0gQ0FSX0FVVCkgcyA9ICJhdXRvIjsKLSAgICAgICAgZWxzZSBzID0g InVua25vd24iOwotICAgICAgICBwcmludGYoIiwgY2FycmllcjogJXMiLCBzKTsKLSAgICAgICAg aWYgKGNhcnJpZXIgPT0gQ0FSX09OKSB7Ci0gICAgICAgICAgICBpZiAoY2R0aW1vKSBwcmludGYo IiwgdGltZW91dDogJWQgc2VjIiwgY2R0aW1vKTsKLSAgICAgICAgICAgIGVsc2UgcHJpbnRmKCIs IHRpbWVvdXQ6IG5vbmUiKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAg ICAgIGRvc2hvZGlhbCgpOwotICAgICAgICBpZiAobG9jYWwKLSNpZmRlZiBORVRDT05OCi0gICAg ICAgICAgICAmJiAhbmV0d29yawotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSAgICAgICAgICAgICkg ewotICAgICAgICAgICAgcHJpbnRmKCJUeXBlIFNIT1cgTU9ERU0gdG8gc2VlIG1vZGVtIHNldHRp bmdzLlxuIik7Ci0jaWZkZWYgQ0tfVEFQSQotICAgICAgICAgICAgcHJpbnRmKCJUeXBlIFNIT1cg VEFQSSB0byBzZWUgVEFQSS1yZWxhdGVkIGl0ZW1zXG4iKTsKLSNlbmRpZiAvKiBDS19UQVBJICov Ci0gICAgICAgICAgICBwcmludGYoIlR5cGUgU0hPVyBDT01NVU5JQ0FUSU9OUyB0byBzZWUgbW9k ZW0gc2lnbmFscy5cbiIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5P RElBTCAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBD S19MQUJFTEVECi0gICAgICBjYXNlIFNITEJMOiAgICAgICAgICAgICAgICAgICAgICAgLyogTGFi ZWxlZCBmaWxlIGluZm8gKi8KLSAgICAgICAgc2hvbGJsKCk7Ci0gICAgICAgIGJyZWFrOwotI2Vu ZGlmIC8qIENLX0xBQkVMRUQgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotICAgICAgY2FzZSBT SENTRTogICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBzZXRzICovCi0jaWZkZWYg Tk9DU0VUUwotICAgICAgICBwcmludGYoCi0iIENoYXJhY3RlciBzZXQgdHJhbnNsYXRpb24gaXMg bm90IHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24gb2YgQy1LZXJtaXRcbiIpOwotI2Vsc2UKLSAg ICAgICAgc2hvY2hhcnNldCgpOwotI2lmbmRlZiBOT1hGRVIKLSAgICAgICAgcHJpbnRmKCJcbiBV bmtub3duLUNoYXItU2V0OiAlc1xuIiwKLSAgICAgICAgICAgICAgIHVua2NzID8gIktlZXAiIDog IkRpc2NhcmQiKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgcHJp bnRmKCJcbiIpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICBzaG90Y3ModGNzbCx0Y3NyKTsK LSAgICAgICAgcHJpbnRmKCJcbiIpOwotI2lmZGVmIE9TMgotICAgICAgICAvKiBQQyBDb2RlIFBh Z2UgaW5mb3JtYXRpb24gKi8KLSAgICAgICAgewotICAgICAgICAgICAgY2hhciBjcGJ1ZlsxMjhd OwotICAgICAgICAgICAgaW50IGNwbGlzdFsxNl0sIGNwczsKLSAgICAgICAgICAgIGludCBhY3Rp dmVjcDsKLSAgICAgICAgICAgIGNwcyA9IG9zMmdldGNwbGlzdChjcGxpc3QsIHNpemVvZihjcGxp c3QpKTsKLQotICAgICAgICAgICAgc3ByaW50ZihjcGJ1ZiwgICAgICAgICAgICAgIC8qIFNBRkUg Ki8KLSAgICAgICAgICAgICAgICAgICAgIiUzZCwlM2QsJTNkLCUzZCwlM2QsJTNkLCUzZCwlM2Qs JTNkLCUzZCwlM2QsJTNkIiwKLSAgICAgICAgICAgICAgICAgICAgIGNwcyA+IDEgPyBjcGxpc3Rb MV0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgY3BzID4gMiA/IGNwbGlzdFsyXSA6IDAsIGNw cyA+IDMgPyBjcGxpc3RbM10gOiAwLAotICAgICAgICAgICAgICAgICAgICAgY3BzID4gNCA/IGNw bGlzdFs0XSA6IDAsIGNwcyA+IDUgPyBjcGxpc3RbNV0gOiAwLAotICAgICAgICAgICAgICAgICAg ICAgY3BzID4gNiA/IGNwbGlzdFs2XSA6IDAsIGNwcyA+IDcgPyBjcGxpc3RbN10gOiAwLAotICAg ICAgICAgICAgICAgICAgICAgY3BzID4gOCA/IGNwbGlzdFs4XSA6IDAsIGNwcyA+IDkgPyBjcGxp c3RbOV0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgY3BzID4gMTAgPyBjcGxpc3RbMTBdIDog MCwgY3BzID4gMTEgPyBjcGxpc3RbMTFdIDogMCwKLSAgICAgICAgICAgICAgICAgICAgIGNwcyA+ IDEyID8gY3BsaXN0WzEyXSA6IDAKLSAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICBwcmludGYoIiBDb2RlIFBhZ2VzOlxuIik7Ci0gICAgICAgICAgICBhY3RpdmVjcCA9IG9zMmdl dGNwKCk7Ci0gICAgICAgICAgICBpZiAoIGFjdGl2ZWNwICkgewotICAgICAgICAgICAgICBwcmlu dGYoIiAgICAgQWN0aXZlOiAlZFxuIixhY3RpdmVjcCk7Ci0gICAgICAgICAgICAgIGlmICghaXNX aW45NSgpKQotICAgICAgICAgICAgICAgIHByaW50ZigiICBBdmFpbGFibGU6ICVzXG4iLGNwYnVm KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICBwcmludGYoIiAgICAgQWN0aXZl OiBuL2FcbiIpOwotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9Ci0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICAgICBicmVhazsKLQotICAgICAg Y2FzZSBTSEZFQTogICAgICAgICAgICAgICAgICAgICAgIC8qIEZlYXR1cmVzICovCi0gICAgICAg IHNob2ZlYSgpOwotICAgICAgICBicmVhazsKLQotI2lmZGVmIENLX1NQRUVECi0gICAgICBjYXNl IFNIQ1RMOiAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbC1QcmVmaXggdGFibGUgKi8K LSAgICAgICAgc2hvY3RsKCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX1NQRUVEICov Ci0KLSAgICAgIGNhc2UgU0hFWEk6IHsKLSAgICAgICAgICBleHRlcm4gaW50IGV4aXRoYW5ndXA7 Ci0gICAgICAgICAgcHJpbnRmKCJcbiBFeGl0IHdhcm5pbmcgJXNcbiIsIHhpdHdhcm4gPwotICAg ICAgICAgICAgICAgICAoeGl0d2FybiA9PSAxID8gIm9uIiA6ICJhbHdheXMiKSA6ICJvZmYiKTsK LSAgICAgICAgICBwcmludGYoIiBFeGl0IG9uLWRpc2Nvbm5lY3Q6ICVzXG4iLCBzaG93b2ZmKGV4 aXRvbmNsb3NlKSk7Ci0gICAgICAgICAgcHJpbnRmKCIgRXhpdCBoYW5ndXA6ICVzXG4iLCBzaG93 b2ZmKGV4aXRoYW5ndXApKTsKLSAgICAgICAgICBwcmludGYoIiBDdXJyZW50IGV4aXQgc3RhdHVz OiAlZFxuXG4iLCB4aXRzdGEpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2Fz ZSBTSFBSVDogewotI2lmZGVmIFBSSU5UU1dJCi0gICAgICAgICAgZXh0ZXJuIGludCBwcmludHRp bW8sIHByaW50ZXJ0eXBlLCBub3ByaW50ZXI7Ci0gICAgICAgICAgZXh0ZXJuIGNoYXIgKiBwcmlu dHRlcm0sICogcHJpbnRzZXA7Ci0gICAgICAgICAgZXh0ZXJuIGludCBwcm5jczsKLSNpZmRlZiBC UFJJTlQKLSAgICAgICAgICBleHRlcm4gaW50IHByaW50YmlkaTsKLSNlbmRpZiAvKiBCUFJJTlQg Ki8KLSNlbmRpZiAvKiBQUklOVFNXSSAqLwotCi0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5z ZXJ2ZXIgJiYKLSNpZmRlZiBDS19MT0dJTgotICAgICAgICAgICAgaXNndWVzdAotI2Vsc2UgLyog Q0tfTE9HSU4gKi8KLSAgICAgICAgICAgIDAKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgICAg ICAgICAgICkgewotICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5c clxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICB9Ci0jZW5k aWYgLyogSUtTRCAqLwotI2lmZGVmIFBSSU5UU1dJCi0gICAgICAgICAgaWYgKG5vcHJpbnRlcikg ewotICAgICAgICAgICAgICBwcmludGYoIlByaW50ZXI6IChub25lKVxuXG4iKTsKLSAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotI2VuZGlmIC8qIFBSSU5UU1dJICovCi0KLSAgICAg ICAgICBwcmludGYoIlByaW50ZXI6ICVzJXNcbiIsCi0KLSAgICAgICAgICAgICAgICAgcHJpbnRw aXBlID8gInwgIiA6ICIiLAotICAgICAgICAgICAgICAgICBwcmludGVybmFtZSA/IHByaW50ZXJu YW1lIDoKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgIlBSTiIKLSNlbHNlCi0gICAgICAg ICAgICAgICAgICIoZGVmYXVsdCkiCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAg ICk7Ci0jaWZkZWYgUFJJTlRTV0kKLSNpZmRlZiBCUFJJTlQKLSAgICAgICAgICBpZiAocHJpbnRi aWRpKSB7Ci0gICAgICAgICAgICAgIHByaW50ZigiIC9CSURJUkVDVElPTkFMXG4iKTsKLSAgICAg ICAgICAgICAgaWYgKHBwb3J0c3BlZWQgPiAwKQotICAgICAgICAgICAgICAgIHByaW50ZigiIC9T UEVFRDolbGRcbiIscHBvcnRzcGVlZCk7Ci0gICAgICAgICAgICAgIHByaW50ZigiIC9QQVJJVFk6 JXNcbiIscGFybmFtKChjaGFyKXBwb3J0cGFyaXR5KSk7Ci0gICAgICAgICAgICAgIHByaW50Zigi IC9GTE9XOiVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgcHBvcnRmbG93ID09IEZMT19OT05F ID8gIk5PTkUiIDoKLSAgICAgICAgICAgICAgICAgICAgIChwcG9ydGZsb3cgPT0gRkxPX1JUU0Mg PyAiUlRTL0NUUyIgOiAiWE9OL1hPRkYiKQotICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAg ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiIC9PVVRQVVQtT05MWVxuIik7Ci0jZW5k aWYgLyogQlBSSU5UICovCi0gICAgICAgICAgc3dpdGNoIChwcmludGVydHlwZSkgewotICAgICAg ICAgICAgY2FzZSBQUlRfTk9OOiBwcmludGYoIiAvTk9ORVxuIik7IGJyZWFrOwotICAgICAgICAg ICAgY2FzZSBQUlRfRklMOiBwcmludGYoIiAvRklMRVxuIik7IGJyZWFrOwotICAgICAgICAgICAg Y2FzZSBQUlRfUElQOiBwcmludGYoIiAvUElQRVxuIik7IGJyZWFrOwotICAgICAgICAgICAgY2Fz ZSBQUlRfRE9TOiBwcmludGYoIiAvRE9TLURFVklDRVxuIik7IGJyZWFrOwotICAgICAgICAgICAg Y2FzZSBQUlRfV0lOOiBwcmludGYoIiAvV0lORE9XUy1RVUVVRVxuIik7IGJyZWFrOwotICAgICAg ICAgIH0KLSAgICAgICAgICBwcmludGYoIiAvVElNRU9VVDolZFxuIixwcmludHRpbW8pOwotICAg ICAgICAgIGlmIChwcmludHRlcm0pIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCIgL0VORC1PRi1K T0ItU1RSSU5HOiIpOwotICAgICAgICAgICAgICBzaG9zdHJkZWYocHJpbnR0ZXJtKTsKLSAgICAg ICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcHJp bnRmKCIgL0VORC1PRi1KT0ItU1RSSU5HOihub25lKVxuIik7Ci0gICAgICAgICAgcHJpbnRmKCIg L0pPQi1IRUFERVItRklMRTolc1xuIixwcmludHNlcCA/IHByaW50c2VwIDogIihub25lKSIpOwot ICAgICAgICAgIHByaW50ZigiIC9DSEFSQUNURVItU0VUOiAlc1xuIix0eHJpbmZvW3BybmNzXS0+ a2V5d2QpOwotI2VuZGlmIC8qIFBSSU5UU1dJICovCi0gICAgICAgICAgcHJpbnRmKCJcbiIpOwot ICAgICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIFNIQ01EOiB7Ci0jaWZkZWYg RE9VQkxFUVVPVElORwotICAgICAgICAgIGV4dGVybiBpbnQgZGJscXVvOwotI2VuZGlmIC8qIERP VUJMRVFVT1RJTkcgKi8KLSNpZmRlZiBDS19BVVRPREwKLSAgICAgICAgICBwcmludGYoIiBDb21t YW5kIGF1dG9kb3dubG9hZDogJXNcbiIsc2hvd29mZihjbWRhZGwpKTsKLSNlbHNlCi0gICAgICAg ICAgcHJpbnRmKCIgQ29tbWFuZCBhdXRvZG93bmxvYWQ6IChub3QgYXZhaWxhYmxlKVxuIik7Ci0j ZW5kaWYgLyogQ0tfQVVUT0RMICovCi0gICAgICAgICAgcHJpbnRmKCIgQ29tbWFuZCBieXRlc2l6 ZTogJWQgYml0c1xuIiwgKGNtZG1zayA9PSAwMzc3KSA/IDggOiA3KTsKLSAgICAgICAgICBwcmlu dGYoIiBDb21tYW5kIGVycm9yLWRpc3BsYXk6ICVkXG4iLCBjbWRfZXJyKTsKLSNpZmRlZiBDS19S RUNBTEwKLSAgICAgICAgICBwcmludGYoIiBDb21tYW5kIHJlY2FsbC1idWZmZXItc2l6ZTogJWRc biIsY21fcmVjYWxsKTsKLSNlbHNlCi0gICAgICAgICAgcHJpbnRmKCIgQ29tbWFuZCByZWNhbGwt YnVmZmVyIG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uXG4iKTsKLSNlbmRpZiAvKiBDS19S RUNBTEwgKi8KLSNpZmRlZiBDS19SRUNBTEwKLSAgICAgICAgICBwcmludGYoIiBDb21tYW5kIHJl dHJ5OiAlc1xuIixzaG93b2ZmKGNtX3JldHJ5KSk7Ci0jZWxzZQotICAgICAgICAgIHByaW50Zigi IENvbW1hbmQgcmV0cnkgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb25cbiIpOwotI2VuZGlm IC8qIENLX1JFQ0FMTCAqLwotICAgICAgICAgIHByaW50ZigiIENvbW1hbmQgaW50ZXJydXB0aW9u OiAlc1xuIiwgc2hvd29mZihjbWRpbnQpKTsKLSAgICAgICAgICBwcmludGYoIiBDb21tYW5kIHF1 b3Rpbmc6ICVzXG4iLCBzaG93b2ZmKGNtZGdxdW8oKSkpOwotI2lmZGVmIERPVUJMRVFVT1RJTkcK LSAgICAgICAgICBwcmludGYoIiBDb21tYW5kIGRvdWJsZXF1b3Rpbmc6ICVzXG4iLCBzaG93b2Zm KGRibHF1bykpOwotI2VuZGlmIC8qIERPVUJMRVFVT1RJTkcgKi8KLSAgICAgICAgICBwcmludGYo IiBDb21tYW5kIG1vcmUtcHJvbXB0aW5nOiAlc1xuIiwgc2hvd29mZih4YXNrbW9yZSkpOwotICAg ICAgICAgIHByaW50ZigiIENvbW1hbmQgaGVpZ2h0OiAlZFxuIiwgY21kX3Jvd3MpOwotICAgICAg ICAgIHByaW50ZigiIENvbW1hbmQgd2lkdGg6ICAlZFxuIiwgY21kX2NvbHMpOwotI2lmbmRlZiBJ S1NET05MWQotI2lmZGVmIE9TMgotICAgICAgICAgIHByaW50ZigiIENvbW1hbmQgc3RhdHVzbGlu ZTogJXNcbiIsc2hvd29mZih0dF9zdGF0dXNbVkNNRF0pKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNl bmRpZiAvKiBJS1NET05MWSAqLwotI2lmZGVmIExPQ1VTCi0gICAgICAgICAgcHJpbnRmKCIgTG9j dXM6ICAgICAgICAgICVzIiwKLSAgICAgICAgICAgICAgICAgYXV0b2xvY3VzID8gKGF1dG9sb2N1 cyA9PSAyID8gImFzayIgOiAiYXV0byIpIDoKLQkJIChsb2N1cyA/ICJsb2NhbCIgOiAicmVtb3Rl IikpOwotICAgICAgICAgIGlmIChhdXRvbG9jdXMpCi0gICAgICAgICAgICBwcmludGYoIiAoJXMp IiwgbG9jdXMgPyAibG9jYWwiIDogInJlbW90ZSIpOwotICAgICAgICAgIHByaW50ZigiXG4iKTsK LSNlbmRpZiAvKiBMT0NVUyAqLwotICAgICAgICAgIHByaW50ZigiIEhpbnRzOiAgICAgICAgICAl c1xuIiwgc2hvd29mZihoaW50cykpOwotICAgICAgICAgIHByaW50ZigiIFF1aWV0OiAgICAgICAg ICAlc1xuIiwgc2hvd29mZihxdWlldCkpOwotICAgICAgICAgIHByaW50ZigiIE1heGltdW0gY29t bWFuZCBsZW5ndGg6ICVkXG4iLCBDTURCTCk7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgewot ICAgICAgICAgICAgICBjaGFyICogczsKLSAgICAgICAgICAgICAgaW50IGs7Ci0gICAgICAgICAg ICAgIHByaW50ZigiIE1heGltdW0gbnVtYmVyIG9mIG1hY3JvczogJWRcbiIsIE1BQ19NQVgpOwot ICAgICAgICAgICAgICBwcmludGYoIiBNYWNyb3MgZGVmaW5lZDogJWRcbiIsIG5tYWMpOwotICAg ICAgICAgICAgICBwcmludGYoIiBNYXhpbXVtIG1hY3JvIGRlcHRoOiAlZFxuIiwgTUFDTEVWRUwp OwotICAgICAgICAgICAgICBwcmludGYoIiBNYXhpbXVtIFRBS0UgZGVwdGg6ICVkXG4iLCBNQVhU QUtFKTsKLSAgICAgICAgICAgICAgcyA9ICIobm90IGRlZmluZWQpIjsKLSAgICAgICAgICAgICAg ayA9IG1sb29rKG1hY3RhYiwib25fdW5rbm93bl9jb21tYW5kIixubWFjKTsKLSAgICAgICAgICAg ICAgaWYgKGsgPiAtMSkgaWYgKG1hY3RhYltrXS5tdmFsKSBzID0gbWFjdGFiW2tdLm12YWw7Ci0g ICAgICAgICAgICAgIHByaW50ZigiIE9OX1VOS05PV05fQ09NTUFORDogJXNcbiIscyk7Ci0gICAg ICAgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZkZWYgVU5JWAotI2lmbmRlZiBOT0pDCi0g ICAgICAgICAgcHJpbnRmKCIgU3VzcGVuZDogJXNcbiIsIHNob3dvZmYoeHN1c3BlbmQpKTsKLSNl bmRpZiAvKiBOT0pDICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICAgIHByaW50ZigiIEFj Y2VzcyB0byBleHRlcm5hbCBjb21tYW5kcyBhbmQgcHJvZ3JhbXMlcyBhbGxvd2VkXG4iLAotI2lm bmRlZiBOT1BVU0gKLSAgICAgICAgICAgICAgICAgIW5vcHVzaCA/ICIiIDoKLSNlbmRpZiAvKiBO T1BVU0ggKi8KLSAgICAgICAgICAgICAgICAgICIgbm90Iik7Ci0gICAgICAgICAgYnJlYWs7Ci0g ICAgICB9Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICAgIGNhc2UgU0hBTFJNOgotICAgICAgICBpZiAo Y2tfYWxhcm0pCi0gICAgICAgICAgcHJpbnRmKCJBbGFybSBhdCAlcyAlc1xuIixhbHJtX2RhdGUs YWxybV90aW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByaW50ZigiKG5vIGFsYXJtIHNl dClcbiIpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5P TVNFTkQKLSAgICAgIGNhc2UgU0hTRkw6IHsKLSAgICAgICAgICBleHRlcm4gc3RydWN0IGZpbGVs aXN0ICogZmlsZWhlYWQ7Ci0gICAgICAgICAgaWYgKCFmaWxlaGVhZCkgewotICAgICAgICAgICAg ICBwcmludGYoInNlbmQtbGlzdCBpcyBlbXB0eVxuIik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgc3RydWN0IGZpbGVsaXN0ICogZmxwOwotICAgICAgICAgICAgICBjaGFyICog czsKLSAgICAgICAgICAgICAgZmxwID0gZmlsZWhlYWQ7Ci0gICAgICAgICAgICAgIHdoaWxlIChm bHApIHsKLSAgICAgICAgICAgICAgICAgIHMgPSBmbHAtPmZsX2FsaWFzOwotICAgICAgICAgICAg ICAgICAgaWYgKCFzKSBzID0gIihub25lKSI7Ci0gICAgICAgICAgICAgICAgICBwcmludGYoIiVz LCBtb2RlOiAlcywgYWxpYXM6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZscC0+ ZmxfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnZm1vZGUoZmxwLT5mbF9tb2RlLDAp LAotICAgICAgICAgICAgICAgICAgICAgICAgIHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICAgICAgICAgICAgZmxwID0gZmxwLT5mbF9uZXh0OwotICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9NU0VORCAq LwotCi0jaWZkZWYgQ0tYWENIQVIKLSAgICAgIGNhc2UgU0hEQkw6Ci0gICAgICAgIHNob2RibCgp OwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS1hYQ0hBUiAqLwotCi0jaWZuZGVmIE5PUFVT SAotI2lmbmRlZiBOT0ZSSUxMUwotICAgICAgY2FzZSBTSEVESVQ6Ci0gICAgICAgIGlmICghZWRp dG9yWzBdKSB7Ci0gICAgICAgICAgICBzID0gZ2V0ZW52KCJFRElUT1IiKTsKLSAgICAgICAgICAg IGlmIChzKSBja3N0cm5jcHkoZWRpdG9yLHMsQ0tNQVhQQVRIKTsKLSAgICAgICAgfQotICAgICAg ICBwcmludGYoIlxuIGVkaXRvcjogICVzXG4iLCBlZGl0b3JbMF0gPyBlZGl0b3IgOiAiKG5vbmUp Iik7Ci0gICAgICAgIGlmIChlZGl0b3JbMF0pIHsKLSAgICAgICAgICAgIHByaW50ZigiIG9wdGlv bnM6ICVzXG4iLCBlZGl0b3B0c1swXSA/IGVkaXRvcHRzIDogIihub25lKSIpOwotICAgICAgICAg ICAgcHJpbnRmKCIgZmlsZTogICAgJXNcbiIsIGVkaXRmaWxlWzBdID8gZWRpdGZpbGUgOiAiKG5v bmUpIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBicmVhazsK LQotI2lmZGVmIEJST1dTRVIKLSAgICAgIGNhc2UgU0hCUk9XU0U6Ci0gICAgICAgIGlmICghYnJv d3NlclswXSkgewotICAgICAgICAgICAgcyA9IGdldGVudigiQlJPV1NFUiIpOwotICAgICAgICAg ICAgaWYgKHMpIGNrc3RybmNweShicm93c2VyLHMsQ0tNQVhQQVRIKTsKLSAgICAgICAgfQotICAg ICAgICBwcmludGYoIlxuIGJyb3dzZXI6ICVzXG4iLCBicm93c2VyWzBdID8gYnJvd3NlciA6ICIo bm9uZSkiKTsKLSAgICAgICAgaWYgKGJyb3dzZXJbMF0pIHsKLSAgICAgICAgICAgIHByaW50Zigi IG9wdGlvbnM6ICVzXG4iLCBicm93c29wdHNbMF0gPyBicm93c29wdHMgOiAiKG5vbmUpIik7Ci0g ICAgICAgICAgICBwcmludGYoIiB1cmw6ICAgICAlc1xuIiwgYnJvd3N1cmxbMF0gPyBicm93c3Vy bCA6ICIobm9uZSkiKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAg IGJyZWFrOwotI2VuZGlmIC8qIEJST1dTRVIgKi8KLSNlbmRpZiAvKiAgTk9GUklMTFMgKi8KLSNl bmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgQ0tfVEFQSQotICAg ICAgY2FzZSBTSFRBUEk6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRBUEkgb3B0aW9ucyAqLwot I2lmZGVmIElLU0QKLSAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICBwcmludGYo IlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgIHNob3RhcGko MCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTSFRBUElfTDogICAgICAgICAgICAgICAg ICAgIC8qIFRBUEkgTG9jYXRpb25zICovCi0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2 ZXIpIHsKLSAgICAgICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIp OwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotI2VuZGlmIC8q IElLU0QgKi8KLSAgICAgICAgc2hvdGFwaSgxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl IFNIVEFQSV9NOiAgICAgICAgICAgICAgICAgICAgLyogVEFQSSBNb2RlbSAqLwotI2lmZGVmIElL U0QKLSAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBj b21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgIHNob3RhcGkoMik7Ci0gICAg ICAgIGJyZWFrOwotICAgICAgY2FzZSBTSFRBUElfQzogICAgICAgICAgICAgICAgICAgIC8qIFRB UEkgQ29tbSAqLwotI2lmZGVmIElLU0QKLSAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAg ICAgICBwcmludGYoIlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAg ICAgIHNob3RhcGkoMyk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX1RBUEkgKi8KLQot ICAgICAgY2FzZSBTSFRDUDogICAgICAgICAgICAgICAgICAgICAgIC8qIFNIT1RDUCAqLwotICAg ICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIHNob3RjcCgwKTsKLSAgICAgICAgcHJpbnRmKCJc biIpOwotICAgICAgICBicmVhazsKLQotI2lmZGVmIFROQ09ERQotICAgICAgY2FzZSBTSFRFTDog ICAgICAgICAgICAgICAgICAgICAgIC8qIFRFTE5FVCAqLwotICAgICAgICBwcmludGYoIlxuIik7 Ci0gICAgICAgIHNob3RlbCgwKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBicmVh azsKLQotICAgICAgY2FzZSBTSFRPUFQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRFTE5FVCBP UFRJT05TICovCi0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgc2hvdG9wdCgwKTsKLSAg ICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBUTkNPREUgKi8K LQotI2lmZGVmIENLX1RSSUdHRVIKLSAgICAgIGNhc2UgU0hUUklHOiB7Ci0gICAgICAgICAgZXh0 ZXJuIGNoYXIgKiB0dF90cmlnZ2VyW10sICogdHJpZ2dlcnZhbDsKLSAgICAgICAgICBpbnQgaTsK LSAgICAgICAgICBpZiAoIXR0X3RyaWdnZXJbMF0pIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCIg VHJpZ2dlcnM6IChub25lKVxuIik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg cHJpbnRmKCIgVHJpZ2dlcnM6XG4iKTsKLSAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFRS SUdHRVJTOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgIGlmICghdHRfdHJpZ2dlcltpXSkKLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBwcmludGYoIiAgXCIl c1wiXG4iLHR0X3RyaWdnZXJbaV0pOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHBy aW50ZigiIE1vc3QgcmVjZW50IHRyaWdnZXIgZW5jb3VudGVyZWQ6ICIpOwotICAgICAgICAgICAg ICBpZiAodHJpZ2dlcnZhbCkKLSAgICAgICAgICAgICAgICBwcmludGYoIlwiJXNcIlxuIix0cmln Z2VydmFsKTsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50ZigiKG5v bmUpXG4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0jZW5kaWYg LyogQ0tfVFJJR0dFUiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRlZiBOT1NQTAot ICAgICAgY2FzZSBTSElOUDoKLSAgICAgICAgc2hvaW5wdXQoKTsKLSAgICAgICAgYnJlYWs7Ci0j ZW5kaWYgLyogTk9TUEwgKi8KLQotICAgICAgY2FzZSBTSExPRzogewotI2lmbmRlZiBNQUMKLSNp ZmRlZiBJS1NECi0gICAgICAgICAgaWYgKGluc2VydmVyICYmCi0jaWZkZWYgQ0tfTE9HSU4KLSAg ICAgICAgICAgICAgaXNndWVzdAotI2Vsc2UgLyogQ0tfTE9HSU4gKi8KLSAgICAgICAgICAgICAg MAotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBw cmludGYoIlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgREVC VUcKLSAgICAgICAgICBwcmludGYoIlxuIERlYnVnIGxvZzogICAgICAgJXMiLCBkZWJsb2cgPyBk ZWJmaWwgOiAiKG5vbmUpIik7Ci0JICB7Ci0JICAgICAgZXh0ZXJuIGludCBkZWJ0aW07Ci0JICAg ICAgaWYgKGRlYnRpbSkgcHJpbnRmKCIgKHRpbWVzdGFtcHMpIik7Ci0JICAgICAgcHJpbnRmKCJc biIpOwotCSAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZuZGVmIE5PWEZFUgotICAgICAgICAg IHByaW50ZigiIFBhY2tldCBsb2c6ICAgICAgJXNcbiIsICAgcGt0bG9nID8gcGt0ZmlsIDogIihu b25lKSIpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICAgICAg cHJpbnRmKCIgU2Vzc2lvbiBsb2c6ICAgICAlcyIsICAgc2VzbG9nID8gc2VzZmlsIDogIihub25l KSIpOwotCSAgewotCSAgICAgIGV4dGVybiBpbnQgc2Vzc2Z0LCBzbG9ndHMsIHNsb2dudWw7Ci0J ICAgICAgc3dpdGNoIChzZXNzZnQpIHsKLQkJY2FzZSBYWUZUX1Q6IHByaW50ZigiICh0ZXh0KSIp OyBicmVhazsKLQkJY2FzZSBYWUZUX0I6IHByaW50ZigiIChiaW5hcnkpIik7IGJyZWFrOwotCQlj YXNlIFhZRlRfRDogcHJpbnRmKCIgKGRlYnVnKSIpOyBicmVhazsKLQkgICAgICB9Ci0JICAgICAg aWYgKHNsb2d0cykgcHJpbnRmKCIodGltZXN0YW1wZWQpIik7Ci0JICAgICAgaWYgKHNsb2dudWwp IHByaW50ZigiKG51bGwtcGFkZGVkKSIpOwotCSAgICAgIHByaW50ZigiXG4iKTsKLQkgIH0KLQot I2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZmRlZiBUTE9HCi0gICAgICAgICAgcHJpbnRmKCIgVHJh bnNhY3Rpb24gbG9nOiAlcyAoJXMpXG4iLAotICAgICAgICAgICAgICAgICAodHJhbG9nID8gKCp0 cmFmaWwgPyB0cmFmaWwgOiAiKG5vbmUpIikgOiAiKG5vbmUpIiksCi0gICAgICAgICAgICAgICAg ICh0bG9nZm10ID8gKCh0bG9nZm10ID09IDIpID8gImZ0cCIgOiAidmVyYm9zZSIpIDogImJyaWVm IikKLSAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBUTE9HICovCi0jaWZkZWYgQ0tMT0dE SUFMCi0gICAgICAgICAgICBwcmludGYoIiBDb25uZWN0aW9uIGxvZzogICVzXG4iLCBkaWFsb2cg PyBkaWFmaWwgOiAiKG5vbmUpIik7Ci0jZW5kaWYgLyogQ0tMT0dESUFMICovCi0gICAgICAgICAg cHJpbnRmKCJcbiIpOwotI2VuZGlmIC8qIE1BQyAqLwotICAgICAgICAgIGJyZWFrOwotICAgICAg fQotCi0jaWZuZGVmIE5PU1BMCi0gICAgICBjYXNlIFNIT1VUUDogICAgICAgICAgICAgICAgICAg ICAgLyogT1VUUFVUICovCi0gICAgICAgIHNob291dHB1dCgpOwotICAgICAgICBicmVhazsKLSNl bmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgUEFUVEVSTlMKLSAgICAgIGNhc2UgU0hPUEFUOiAg ICAgICAgICAgICAgICAgICAgICAvKiBQQVRURVJOUyAqLwotICAgICAgICBzaG9wYXQoKTsKLSAg ICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLQotI2lmZGVmIFNUUkVBTUlORwot ICAgICAgY2FzZSBTSE9TVFI6IHsgICAgICAgICAgICAgICAgICAgIC8qIFNUUkVBTUlORyAqLwot ICAgICAgICAgIGV4dGVybiBpbnQgc3RyZWFtcnEsIGNsZWFycnEsIGNsZWFyZWQ7Ci0gICAgICAg ICAgZXh0ZXJuIGxvbmcgdGZjcHM7Ci0gICAgICAgICAgZGVidWcoRjEwMSwiU0hPVyBSRUxJQUJM RSByZWxpYWJsZSIsIiIscmVsaWFibGUpOwotICAgICAgICAgIHByaW50ZigiXG4gUmVsaWFibGU6 ICAgICAlc1xuIixzaG93b29hKHJlbGlhYmxlKSk7Ci0gICAgICAgICAgcHJpbnRmKCIgQ2xlYXJj aGFubmVsOiAlc1xuIixzaG93b29hKGNsZWFycnEpKTsKLSAgICAgICAgICBwcmludGYoIiBTdHJl YW1pbmc6ICAgICVzXG5cbiIsc2hvd29vYShzdHJlYW1ycSkpOwotICAgICAgICAgIGlmICgoIWxv Y2FsICYmIChzdHJlYW1ycSA9PSBTRVRfT04pKSB8fAotICAgICAgICAgICAgICAoc3RyZWFtcnEg PT0gU0VUX0FVVE8gJiYgcmVsaWFibGUpKQotICAgICAgICAgICAgcHJpbnRmKCIgU3RyZWFtaW5n IHdpbGwgYmUgZG9uZSBpZiByZXF1ZXN0ZWQuXG4iKTsKLSAgICAgICAgICBlbHNlIGlmICgoc3Ry ZWFtcnEgPT0gU0VUX09GRikgfHwKLSAgICAgICAgICAgICAgICAgICAoKHN0cmVhbXJxID09IFNF VF9BVVRPKSAmJiAhcmVsaWFibGUpKQotICAgICAgICAgICAgcHJpbnRmKCIgU3RyZWFtaW5nIHdp bGwgbm90IGJlIHJlcXVlc3RlZCBhbmQgd2lsbCBub3QgYmUgZG9uZS5cbiIpOwotICAgICAgICAg IGVsc2UgaWYgKChzdHJlYW1ycSA9PSBTRVRfT04pIHx8Ci0gICAgICAgICAgICAgICAgICAgKChz dHJlYW1ycSA9PSBTRVRfQVVUTykgJiYgcmVsaWFibGUpKQotICAgICAgICAgICAgcHJpbnRmKAot IiBTdHJlYW1pbmcgd2lsbCBiZSByZXF1ZXN0ZWQgYW5kIHdpbGwgYmUgZG9uZSBpZiB0aGUgb3Ro ZXIgS2VybWl0IGFncmVlcy5cbiIpOwotICAgICAgICAgIHByaW50ZigiIExhc3QgdHJhbnNmZXI6 ICVzc3RyZWFtaW5nJXMsICVsZCBjcHMuXG4iLAotICAgICAgICAgICAgICAgICBzdHJlYW1lZCA+ IDAgPyAiIiA6ICJubyAiLAotICAgICAgICAgICAgICAgICBjbGVhcmVkID8gIiwgY2xlYXJjaGFu bmVsIiA6ICIiLAotICAgICAgICAgICAgICAgICB0ZmNwcwotICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSNlbmRp ZiAvKiBTVFJFQU1JTkcgKi8KLQotICAgICAgY2FzZSBTSE9JS1M6Ci0gICAgICAgIHJldHVybihz aG9faWtzKCkpOwotICAgICAgICBicmVhazsKLQotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0g ICAgICBjYXNlIFNIT0FVVEg6Ci0gICAgICAgIHJldHVybihzaG9fYXV0aCgwKSk7Ci0jZW5kaWYg LyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotI2lmbmRlZiBOT0ZUUAotICAgICAgY2FzZSBTSE9G VFA6IHsKLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAg cHJpbnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7Ci0gICAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIFNZ U0ZUUAotICAgICAgICB7Ci0gICAgICAgICAgICBleHRlcm4gY2hhciBmdHBhcHBbXSwgZnRwb3B0 c1tdOwotICAgICAgICAgICAgcHJpbnRmKCIgZnRwLWNsaWVudDogICVzXG4iLCBmdHBhcHBbMF0g PyBmdHBhcHAgOiAiKG5vbmUpIik7Ci0gICAgICAgICAgICBpZiAoZnRwYXBwWzBdKQotICAgICAg ICAgICAgICBwcmludGYoIiBmdHAgb3B0aW9uczogJXNcbiIsIGZ0cG9wdHNbMF0gPyBmdHBvcHRz IDogIihub25lKSIpOwotICAgICAgICB9Ci0jZWxzZQotI2lmZGVmIE5FV0ZUUAotICAgICAgICBz aG9mdHAoMCk7Ci0jZWxzZQotICAgICAgICBwcmludGYoIihObyBGVFAgY2xpZW50IGluY2x1ZGVk IGluIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXQuKVxuIik7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0j ZW5kaWYgLyogU1lTRlRQICovCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotI2VuZGlmIC8qIE5P RlRQICovCi0KLSNpZm5kZWYgTk9DTURMCi0gICAgICBjYXNlIFNIWE9QVDogewotI2lmZGVmIElL U0RCCi0gICAgICAgICAgZXh0ZXJuIGludCBkYmVuYWJsZWQ7Ci0gICAgICAgICAgZXh0ZXJuIGNo YXIgKiBkYmZpbGUsICogZGJkaXI7Ci0jZW5kaWYgLyogSUtTREIgKi8KLSNpZmRlZiBDS1dUTVAK LSAgICAgICAgICBleHRlcm4gaW50IGNreHd0bXA7Ci0gICAgICAgICAgZXh0ZXJuIGNoYXIgKiB3 dG1wZmlsZTsKLSNlbmRpZiAvKiBDS1dUTVAgKi8KLSNpZmRlZiBDS19MT0dJTgotICAgICAgICAg IGV4dGVybiBpbnQgY2t4YW5vbiwgeGZlcmxvZywgbG9naW50aW1vOwotICAgICAgICAgIGV4dGVy biBjaGFyICogeGZlcmZpbGU7Ci0jaWZkZWYgVU5JWAotICAgICAgICAgIGV4dGVybiBpbnQgY2t4 cHJpdjsKLSNlbmRpZiAvKiBVTklYICovCi0jaWZkZWYgQ0tfUEVSTVMKLSAgICAgICAgICBleHRl cm4gaW50IGNreHBlcm1zOwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0jZW5kaWYgLyogQ0tfTE9H SU4gKi8KLSAgICAgICAgICBleHRlcm4gY2hhciAqIGJhbm5lcmZpbGUsICogaGVscGZpbGU7Ci0K LSNpZmRlZiBJS1NECi0gICAgICAgICAgaWYgKGluc2VydmVyICYmCi0jaWZkZWYgQ0tfTE9HSU4K LSAgICAgICAgICAgICAgaXNndWVzdAotI2Vsc2UgLyogQ0tfTE9HSU4gKi8KLSAgICAgICAgICAg ICAgMAotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgICAgICAgICAgICkgewotICAgICAgICAg ICAgICBwcmludGYoIlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwot ICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICBpZiAoIWNtZGludCkKLSAgICAgICAg ICAgIHByaW50ZigiIC0tbm9pbnRlcnJ1cHRzXG4iKTsKLSAgICAgICAgICBwcmludGYoIiAtLWJh bm5lcmZpbGU9JXNcbiIsYmFubmVyZmlsZSA/IGJhbm5lcmZpbGUgOiAiKG51bGwpIik7Ci0gICAg ICAgICAgcHJpbnRmKCIgLS1jZGZpbGU6JXNcbiIsY2Rtc2dzdHIgPyBjZG1zZ3N0ciA6ICIobnVs bCkiKTsKLSAgICAgICAgICBwcmludGYoIiAtLWNkbWVzc2FnZTolZFxuIixzcnZjZG1zZyk7Ci0g ICAgICAgICAgcHJpbnRmKCIgLS1oZWxwZmlsZTolZFxuIixoZWxwZmlsZSk7Ci0gICAgICAgICAg aWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgfQotI2lmZGVmIENLU1lTTE9HCi0jaWZkZWYgU1lTTE9HTEVW RUwKLSAgICAgICAgICBwcmludGYoIiAtLXN5c2xvZzolZCAoZm9yY2VkKVxuIixja3hzeXNsb2cp OwotI2Vsc2UKLSAgICAgICAgICBwcmludGYoIiAtLXN5c2xvZzolZFxuIixja3hzeXNsb2cpOwot I2VuZGlmIC8qIFNZU0xPR0xFVkVMICovCi0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZmRlZiBD S1dUTVAKLSAgICAgICAgICBwcmludGYoIiAtLXd0bXBsb2c6JWRcbiIsY2t4d3RtcCk7Ci0gICAg ICAgICAgcHJpbnRmKCIgLS13dG1wZmlsZT0lc1xuIix3dG1wZmlsZSA/IHd0bXBmaWxlIDogIihu dWxsKSIpOwotI2VuZGlmIC8qIENLV1RNUCAqLwotI2lmZGVmIElLU0QKLSNpZmRlZiBDS19MT0dJ TgotICAgICAgICAgIHByaW50ZigiIC0tYW5vbnltb3VzOiVkXG4iLGNreGFub24pOwotI2lmZGVm IFVOSVgKLSAgICAgICAgICBwcmludGYoIiAtLXByaXZpZDolZFxuIixja3hwcml2KTsKLSNlbmRp ZiAvKiBVTklYICovCi0jaWZkZWYgQ0tfUEVSTVMKLSAgICAgICAgICBwcmludGYoIiAtLXBlcm1p c3Npb246JTA0b1xuIixja3hwZXJtcyk7Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLSAgICAgICAg ICBwcmludGYoIiAtLWluaXRmaWxlOiVzXG4iLGFub25maWxlID8gYW5vbmZpbGUgOiAiKG51bGwp Iik7Ci0gICAgICAgICAgcHJpbnRmKCIgLS11c2VyZmlsZTolc1xuIix1c2VyZmlsZSA/IHVzZXJm aWxlIDogIihudWxsKSIpOwotICAgICAgICAgIHByaW50ZigiIC0tcm9vdDolc1xuIixhbm9ucm9v dCA/IGFub25yb290IDogIihudWxsKSIpOwotICAgICAgICAgIHByaW50ZigiIC0teGZlcmxvZz0l ZFxuIix4ZmVybG9nKTsKLSAgICAgICAgICBwcmludGYoIiAtLXhmZXJmaWxlPSVzXG4iLHhmZXJm aWxlID8geGZlcmZpbGUgOiAiKG51bGwpIik7Ci0gICAgICAgICAgcHJpbnRmKCIgLS10aW1lb3V0 PSVkXG4iLGxvZ2ludGltbyk7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNpZmRlZiBJS1NEQgot ICAgICAgICAgIHByaW50ZigiIC0tZGF0YWJhc2U9JWRcbiIsZGJlbmFibGVkKTsKLSAgICAgICAg ICBwcmludGYoIiAtLWRiZmlsZT0lc1xuIixkYmZpbGUgPyBkYmZpbGUgOiAiKG51bGwpIik7Ci0g ICAgICAgICAgaWYgKGRiZGlyKQotICAgICAgICAgICAgcHJpbnRmKCIgICAoZGIgZGlyZWN0b3J5 PVslc10pXG4iLGRiZGlyKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotI2lmZGVmIElLU0RDT05GCi0g ICAgICAgICAgcHJpbnRmKCIgSUtTRCBjb25mPSVzXG4iLGlrc2Rjb25mKTsKLSNlbmRpZiAvKiBJ S1NEQ09ORiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgICBwcmludGYoIlxuIik7Ci0g ICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0jZW5kaWYgLyogTk9DTURMICovCi0KLSAgICAgIGNh c2UgU0hDRDogewotCSAgZXh0ZXJuIGNoYXIgKiBteWhvbWU7Ci0JICBzID0gZ2V0ZW52KCJDRFBB VEgiKTsKLQkgIGlmICghcykgcyA9ICIobm9uZSkiOwotCSAgcHJpbnRmKCJcbiBjdXJyZW50IGRp cmVjdG9yeTogICVzXG4iLCB6Z3RkaXIoKSk7Ci0JICBwcmludGYoIiBwcmV2aW91cyBkaXJlY3Rv cnk6ICVzXG4iLCBwcmV2ZGlyID8gcHJldmRpciA6ICIobm9uZSkiKTsKLQkgIHByaW50ZigiIGNk IGhvbWU6ICAgICAgICAgICAgJXNcbiIsIGhvbWVwYXRoKCkpOwotCSAgcHJpbnRmKCIgY2QgcGF0 aDogICAgICAgICAgICAlc1xuIiwgY2tjZHBhdGggPyBja2NkcGF0aCA6IHMpOwotCSAgcHJpbnRm KCIgY2QgbWVzc2FnZTogICAgICAgICAlc1xuIiwgc2hvd29mZihzcnZjZG1zZyAmIDIpKTsKLQkg IHByaW50ZigiIHNlcnZlciBjZC1tZXNzYWdlOiAgJXNcbiIsIHNob3dvZmYoc3J2Y2Rtc2cgJiAx KSk7Ci0JICBwcmludGYoIiBjZCBtZXNzYWdlIGZpbGU6ICAgICVzXG5cbiIsY2Rtc2dzdHIgPyBj ZG1zZ3N0ciA6ICIobm9uZSkiKTsKLQkgIGJyZWFrOwotICAgICAgfQotI2lmbmRlZiBOT0NTRVRT Ci0gICAgICBjYXNlIFNIQVNTT0M6Ci0gICAgICAgIChWT0lEKSBzaG93YXNzb2MoKTsKLSAgICAg ICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZkZWYgQ0tMT0dESUFMCi0gICAg ICBjYXNlIFNIQ09OTlg6Ci0jaWZkZWYgTkVXRlRQCi0gICAgICAgIGlmIChmdHBpc2Nvbm5lY3Rl ZCgpKSB7Ci0gICAgICAgICAgICBleHRlcm4gY2hhciBjeGxvZ2J1ZltdOwotICAgICAgICAgICAg ZG9sb2dzaG93KFdfRlRQIHwgMSk7Ci0gICAgICAgICAgICBpZiAoY3hsb2didWZbMF0pCi0gICAg ICAgICAgICAgIGRvbG9nc2hvdygxKTsKLSAgICAgICAgfSBlbHNlIHsKLSNlbmRpZiAvKiBORVdG VFAgKi8KLSAgICAgICAgICAgIGRvbG9nc2hvdygxKTsKLSNpZmRlZiBORVdGVFAKLSAgICAgICAg fQotI2VuZGlmIC8qIE5FV0ZUUCAqLwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS0xPR0RJ QUwgKi8KLQotICAgICAgY2FzZSBTSE9QVFM6Ci0gICAgICAgIG9wdGxpbmVzID0gMDsKLSNpZm5k ZWYgTk9GUklMTFMKLSAgICAgICAgKFZPSUQpIHNob3dkZWxvcHRzKCk7Ci0jZW5kaWYgLyogTk9G UklMTFMgKi8KLSNpZmRlZiBET01ZRElSCi0gICAgICAgIChWT0lEKSBzaG93ZGlyb3B0cygpOwot I2VuZGlmIC8qIERPTVlESVIgKi8KLSNpZmRlZiBDS1BVUkdFCi0gICAgICAgIChWT0lEKSBzaG93 cHVyZ29wdHMoKTsKLSNlbmRpZiAvKiBDS1BVUkdFICovCi0gICAgICAgIChWT0lEKSBzaG93dHlw b3B0cygpOwotICAgICAgICBicmVhazsKLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICBjYXNlIFNI T0ZMTzoKLSAgICAgICAgKFZPSUQpIHNob2Zsb3coKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYg LyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgICAgY2FzZSBTSE9YRkVSOgotICAg ICAgICAoVk9JRCkgc2hveGZlcigpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotI2lmZGVmIENLX1JFQ0FMTAotICAgICAgY2FzZSBTSEhJU1RPUlk6Ci0gICAgICAgIChW T0lEKSBjbWhpc3RvcnkoKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICov Ci0KLSNpZm5kZWYgTk9TRVhQCi0jaWZuZGVmIE5PU1BMCi0gICAgICBjYXNlIFNIU0VYUDoKLSAg ICAgICAgKFZPSUQpIHNob3NleHAoKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9TUEwg Ki8KLSNlbmRpZiAvKiBOT1NFWFAgKi8KLQotI2lmZGVmIEFOWVNTSAotICAgICAgY2FzZSBTSE9T U0g6Ci0gICAgICAgIChWT0lEKSBzaG9zc2goKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyog QU5ZU1NIICovCi0KLSNpZmRlZiBLVUkKLSAgICAgIGNhc2UgU0hPR1VJOgotICAgICAgICAoVk9J RCkgc2hvZ3VpKCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIEtVSSAqLwotCi0jaWZuZGVm IE5PRlJJTExTCi0jaWZuZGVmIE5PUkVOQU1FCi0gICAgICBjYXNlIFNIT1JFTjoKLSAgICAgICAg KFZPSUQpIHNob3JlbmFtZSgpOwotICAgICAgICBicmVhazsKLSNlbmRpZgkvKiBOT1JFTkFNRSAq LwotI2VuZGlmCS8qIE5PRlJJTExTICovCi0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByaW50 ZigiXG5Ob3RoaW5nIHRvIHNob3cuLi5cbiIpOwotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0K LSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotfQotCi0jaWZuZGVmIE5PWEZFUgotaW50Ci1zaG9h dHQoKSB7Ci0gICAgcHJpbnRmKCJBdHRyaWJ1dGVzOiAlc1xuIiwgc2hvd29mZihhdGNhcHIpKTsK LSAgICBpZiAoIWF0Y2FwcikgcmV0dXJuKDApOwotICAgIHByaW50ZigiIEJsb2Nrc2l6ZTogJXNc biIsIHNob3dvZmYoYXRibGtpKSk7Ci0gICAgcHJpbnRmKCIgRGF0ZTogJXNcbiIsIHNob3dvZmYo YXRkYXRpKSk7Ci0gICAgcHJpbnRmKCIgRGlzcG9zaXRpb246ICVzXG4iLCBzaG93b2ZmKGF0ZGlz aSkpOwotICAgIHByaW50ZigiIEVuY29kaW5nIChDaGFyYWN0ZXIgU2V0KTogJXNcbiIsIHNob3dv ZmYoYXRlbmNpKSk7Ci0gICAgcHJpbnRmKCIgTGVuZ3RoOiAlc1xuIiwgc2hvd29mZihhdGxlbmkp KTsKLSAgICBwcmludGYoIiBUeXBlICh0ZXh0L2JpbmFyeSk6ICVzXG4iLCBzaG93b2ZmKGF0dHlw aSkpOwotICAgIHByaW50ZigiIFN5c3RlbSBJRDogJXNcbiIsIHNob3dvZmYoYXRzaWRpKSk7Ci0g ICAgcHJpbnRmKCIgU3lzdGVtIEluZm86ICVzXG4iLCBzaG93b2ZmKGF0c3lzaSkpOwotI2lmZGVm IENLX1BFUk1TCi0gICAgcHJpbnRmKCIgUGVybWlzc2lvbnMgSW46ICAlc1xuIiwgc2hvd29mZihh dGxwcmkpKTsKLSAgICBwcmludGYoIiBQZXJtaXNzaW9ucyBPdXQ6ICVzXG4iLCBzaG93b2ZmKGF0 bHBybykpOwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0jaWZkZWYgU1RSQVRVUwotICAgIHByaW50 ZigiIEZvcm1hdDogJXNcbiIsIHNob3dvZmYoYXRmcm1pKSk7Ci0gICAgcHJpbnRmKCIgQ3JlYXRv cjogJXNcbiIsIHNob3dvZmYoYXRjcmVpKSk7Ci0gICAgcHJpbnRmKCIgQWNjb3VudDogJXNcbiIs IHNob3dvZmYoYXRhY3RpKSk7Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwotICAgIHJldHVybigwKTsK LX0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT1NQTAotaW50ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgTUFDUk9TICovCi1zaG9tYWMoczEsIHMy KSBjaGFyICpzMSwgKnMyOyB7Ci0gICAgaW50IHgsIG4sIHBwOwotICAgIHBwID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcmVudGhlc2lzIGNvdW50ZXIgKi8KLQotICAgIGRl YnVnKEYxMTAsInNob21hYyBzMSIsczEsMCk7Ci0gICAgZGVidWcoRjExMCwic2hvbWFjIHMyIixz MiwwKTsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoIGluc2VydmVyICYmCi0jaWZkZWYgSUtTRENP TkYKLSAgICAgICAgaWtzZGNmCi0jZWxzZSAvKiBJS1NEQ09ORiAqLwotICAgICAgICAxCi0jZW5k aWYgLyogSUtTRENPTkYgKi8KLSAgICAgICAgKSB7Ci0gICAgICAgIGlmICghY2tzdHJjbXAoIm9u X2V4aXQiLHMxLC0xLDApIHx8Ci0gICAgICAgICAgICAhY2tzdHJjbXAoIm9uX2xvZ291dCIsczEs LTEsMCkpCi0gICAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0K LSAgICBpZiAoIXMxKQotICAgICAgcmV0dXJuKDApOwotICAgIGVsc2UKLSAgICAgIHByaW50Zigi JXMgPSAiLHMxKTsgICAgICAgICAgICAgICAvKiBQcmludCBibGFuayBsaW5lIGFuZCBtYWNybyBu YW1lICovCi0gICAgbiA9IChpbnQpc3RybGVuKHMxKSArIDQ7ICAgICAgICAgICAgLyogV2lkdGgg b2YgY3VycmVudCBsaW5lICovCi0gICAgaWYgKCFzMikgczIgPSAiKG5vdCBkZWZpbmVkKSI7Ci0K LSAgICB3aGlsZSAoKHggPSAqczIrKykpIHsgICAgICAgICAgICAgICAvKiBMb29wIHRocnUgZGVm aW5pdGlvbiAqLwotICAgICAgICBpZiAoeCA9PSAnKCcpIHBwKys7ICAgICAgICAgICAgIC8qIFRy ZWF0IGNvbW1hcyB3aXRoaW4gcGFyZW5zICovCi0gICAgICAgIGlmICh4ID09ICcpJykgcHAtLTsg ICAgICAgICAgICAgLyogYXMgb3JkaW5hcnkgdGV4dCAqLwotICAgICAgICBpZiAocHAgPCAwKSBw cCA9IDA7ICAgICAgICAgICAgIC8qIE91dHNpZGUgcGFyZW5zLCAqLwotICAgICAgICBpZiAoeCA9 PSAnLCcgJiYgcHAgPT0gMCkgeyAgICAgIC8qIGNvbW1hIGJlY29tZXMgY29tbWEtZGFzaC1OTC4g Ki8KLSAgICAgICAgICAgIHB1dGNoYXIoJywnKTsKLSAgICAgICAgICAgIHB1dGNoYXIoJy0nKTsK LSAgICAgICAgICAgIHggPSAnXG4nOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnNlcnZlciAm JiAoeCA9PSAnXG4nKSkgICAgLyogU2VuZCBDUiBiZWZvcmUgTEYgKi8KLSAgICAgICAgICBwdXRj aGFyKENSKTsKLSAgICAgICAgcHV0Y2hhcigoQ0hBUil4KTsgICAgICAgICAgICAgICAvKiBPdXRw dXQgdGhlIGNoYXJhY3RlciAqLwotICAgICAgICBpZiAoeCA9PSAnXG4nKSB7ICAgICAgICAgICAg ICAgIC8qIElmIGl0IHdhcyBhIG5ld2xpbmUgKi8KLSNpZmRlZiBVTklYCi0jaWZkZWYgTk9TRVRC VUYKLSAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0j ZW5kaWYgLyogVU5JWCAqLwotICAgICAgICAgICAgcHV0Y2hhcignICcpOyAgICAgICAgICAgICAg IC8qIEluZGVudCB0aGUgbmV4dCBsaW5lIDEgc3BhY2UgKi8KLSAgICAgICAgICAgIHdoaWxlKCpz MiA9PSAnICcpIHMyKys7ICAgICAvKiBza2lwIHBhc3QgbGVhZGluZyBibGFua3MgKi8KLSAgICAg ICAgICAgIG4gPSAyOyAgICAgICAgICAgICAgICAgICAgICAvKiByZXN0YXJ0IHRoZSBjaGFyYWN0 ZXIgY291bnRlciAqLwotICAgICAgICAgICAgc2xjKys7ICAgICAgICAgICAgICAgICAgICAgIC8q IGFuZCBpbmNyZW1lbnQgdGhlIGxpbmUgY291bnRlci4gKi8KLSAgICAgICAgfSBlbHNlIGlmICgr K24gPiAoY21kX2NvbHMgLSAxKSkgeyAvKiBJZiBsaW5lIGlzIHRvbyB3aWRlICovCi0gICAgICAg ICAgICBwdXRjaGFyKCctJyk7ICAgICAgICAgICAgICAgLyogb3V0cHV0IGEgZGFzaCAqLwotICAg ICAgICAgICAgaWYgKGluc2VydmVyKQotICAgICAgICAgICAgICBwdXRjaGFyKENSKTsgICAgICAg ICAgICAgIC8qIGFuZCBhIGNhcnJpYWdlIHJldHVybiAqLwotICAgICAgICAgICAgcHV0Y2hhcihO TCk7ICAgICAgICAgICAgICAgIC8qIGFuZCBhIG5ld2xpbmUgKi8KLSNpZmRlZiBVTklYCi0jaWZk ZWYgTk9TRVRCVUYKLSAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE5PU0VU QlVGICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICAgICAgbiA9IDE7ICAgICAgICAgICAg ICAgICAgICAgIC8qIGFuZCByZXN0YXJ0IHRoZSBjaGFyIGNvdW50ZXIgKi8KLSAgICAgICAgICAg IHNsYysrOyAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgaW5jcmVtZW50IHRoZSBsaW5lIGNv dW50ZXIgKi8KLSAgICAgICAgfQotICAgICAgICBpZiAobiA8IDMgJiYgc2xjID4gKGNtZF9yb3dz IC0gMykpIHsgLyogSWYgbmV3IGxpbmUgYW5kIHNjcmVlbiBmdWxsICovCi0gICAgICAgICAgICBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgLyogYXNrIGlmIHRoZXkgd2FudCBtb3JlLiAqLwot ICAgICAgICAgICAgbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXkgZG8sIHN0YXJ0 IGEgbmV3IGxpbmUgKi8KLSAgICAgICAgICAgIHNsYyA9IDA7ICAgICAgICAgICAgICAgICAgICAv KiBhbmQgcmVzdGFydCBsaW5lIGNvdW50ZXIgKi8KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo aW5zZXJ2ZXIpCi0gICAgICBwdXRjaGFyKENSKTsKLSAgICBwdXRjaGFyKE5MKTsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBFbmQgb2YgZGVmaW5pdGlvbiAqLwotICAgIGlmICgrK3NsYyA+IChj bWRfcm93cyAtIDMpKSB7Ci0gICAgICAgIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOwotICAg ICAgICBzbGMgPSAwOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogTk9TUEwg Ki8KLSNlbmRpZiAvKiBOT1NIT1cgKi8KLQotaW50IHhfaWZudW0gPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEZsYWcgZm9yIElGIE5VTUVSSUMgYWN0aXZlICovCi0KLSNpZm5kZWYgTk9T UEwKLS8qIEV2YWx1YXRlIGFuIGFyaXRobWV0aWMgZXhwcmVzc2lvbi4gKi8KLS8qIENvZGUgYWRh cHRlZCBmcm9tIGV2LCBieSBIb3dpZSBLYXllIG9mIENvbHVtYmlhIFUgJiBvdGhlcnMuICovCi0K LXN0YXRpYyBpbnQgeGVycm9yID0gMDsKLWludCBkaXZieXplcm8gPSAwOwotc3RhdGljIGNoYXIg KmNwOwotc3RhdGljIENLX09GRl9UIHRva3ZhbDsKLXN0YXRpYyBjaGFyIGN1cnRvazsKLXN0YXRp YyBDS19PRkZfVCBleHB2YWw7Ci0KLSNkZWZpbmUgTE9OR0JJVFMgKDgqc2l6ZW9mIChDS19PRkZf VCkpCi0jZGVmaW5lIE5VTUJFUiAnTicKLSNkZWZpbmUgTl9FT1QgJ0UnCi0KLS8qCi0gUmVwbGFj ZW1lbnQgZm9yIHN0cmNocigpIGFuZCBpbmRleCgpLCBuZWl0aGVyIG9mIHdoaWNoIHNlZW0gdG8g YmUgdW5pdmVyc2FsLgotKi8KLQotc3RhdGljIGNoYXIgKgotI2lmZGVmIENLX0FOU0lDCi13aW5k ZXgoY2hhciAqIHMsIGNoYXIgYykKLSNlbHNlCi13aW5kZXgocyxjKSBjaGFyICpzLCBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi0vKiB3aW5kZXggKi8gewotICAgIHdoaWxlICgqcyAhPSBOVUwg JiYgKnMgIT0gYykgcysrOwotICAgIGlmICgqcyA9PSBjKSByZXR1cm4ocyk7IGVsc2UgcmV0dXJu KE5VTEwpOwotfQotCi0KLS8qCi0gZyBlIHQgdCBvIGsKLQotIFJldHVybnMgdGhlIG5leHQgdG9r ZW4uICBJZiB0b2tlbiBpcyBhIE5VTUJFUiwgc2V0cyB0b2t2YWwgYXBwcm9wcmlhdGVseS4KLSov Ci1zdGF0aWMgY2hhcgotZ2V0dG9rKCkgewotICAgIGNoYXIgdGJ1Zls4MF0gLyogLCp0cCAqLyA7 ICAgICAgICAgIC8qIEJ1ZmZlciB0byBhY2N1bXVsYXRlIG51bWJlciAqLwotCi0gICAgd2hpbGUg KGlzc3BhY2UoKmNwKSkgICAgICAgICAgICAgICAgLyogU2tpcCBwYXN0IGxlYWRpbmcgc3BhY2Vz ICovCi0gICAgICBjcCsrOwotCi0gICAgZGVidWcoRjExMCwiR0VUVE9LIixjcCwwKTsKLQotICAg IHN3aXRjaCAoKmNwKSB7Ci0gICAgICBjYXNlICckJzogICAgICAgICAgICAgICAgICAgICAgICAg LyogPz8/ICovCi0gICAgICBjYXNlICcrJzogICAgICAgICAgICAgICAgICAgICAgICAgLyogQWRk ICovCi0gICAgICBjYXNlICctJzogICAgICAgICAgICAgICAgICAgICAgICAgLyogU3VidHJhY3Qg b3IgTmVnYXRlICovCi0gICAgICBjYXNlICdAJzogICAgICAgICAgICAgICAgICAgICAgICAgLyog R3JlYXRlc3QgQ29tbW9uIERpdmlzb3IgKi8KLSAgICAgIGNhc2UgJyonOiAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBNdWx0aXBseSAqLwotICAgICAgY2FzZSAnLyc6ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERpdmlkZSAqLwotICAgICAgY2FzZSAnJSc6ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE1vZHVsdXMgKi8KLSAgICAgIGNhc2UgJzwnOiAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBMZWZ0IHNoaWZ0ICovCi0gICAgICBjYXNlICc+JzogICAgICAgICAgICAgICAgICAg ICAgICAgLyogUmlnaHQgc2hpZnQgKi8KLSAgICAgIGNhc2UgJyYnOiAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBBbmQgKi8KLSAgICAgIGNhc2UgJ3wnOiAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBPciAqLwotICAgICAgY2FzZSAnIyc6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4 Y2x1c2l2ZSBPciAqLwotICAgICAgY2FzZSAnfic6ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE5vdCAqLwotICAgICAgY2FzZSAnXic6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4cG9u ZW50ICovCi0gICAgICBjYXNlICchJzogICAgICAgICAgICAgICAgICAgICAgICAgLyogRmFjdG9y aWFsICovCi0gICAgICBjYXNlICcoJzogICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyZW5z IGZvciBncm91cGluZyAqLwotICAgICAgY2FzZSAnKSc6IHJldHVybigqY3ArKyk7ICAgICAgICAg IC8qIG9wZXJhdG9yLCBqdXN0IHJldHVybiBpdCAqLwotICAgICAgY2FzZSAnXG4nOgotICAgICAg Y2FzZSAnXDAnOiByZXR1cm4oTl9FT1QpOyAgICAgICAgIC8qIEVuZCBvZiBsaW5lLCByZXR1cm4g dGhhdCAqLwotICAgIH0KLSNpZmRlZiBDT01NRU5UCi0vKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCBj b2RlLCB3aGljaCBhbGxvd3Mgb25seSBpbnRlZ2VyIG51bWJlcnMuICovCi0KLSAgICBpZiAoaXN4 ZGlnaXQoKmNwKSkgeyAgICAgICAgICAgICAgICAvKiBEaWdpdCwgbXVzdCBiZSBhIG51bWJlciAq LwotICAgICAgICBpbnQgcmFkaXggPSAxMDsgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgcmFk aXggKi8KLSAgICAgICAgZm9yICh0cCA9IHRidWY7IGlzeGRpZ2l0KCpjcCk7IGNwKyspCi0gICAg ICAgICAgKnRwKysgPSAoY2hhcikgKGlzdXBwZXIoKmNwKSA/IHRvbG93ZXIoKmNwKSA6ICpjcCk7 Ci0gICAgICAgICp0cCA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG51bWJlciAq LwotICAgICAgICBzd2l0Y2goaXN1cHBlcigqY3ApID8gdG9sb3dlcigqY3ApIDogKmNwKSB7IC8q IEV4YW1pbmUgYnJlYWsgY2hhciAqLwotICAgICAgICAgIGNhc2UgJ2gnOgotICAgICAgICAgIGNh c2UgJ3gnOiByYWRpeCA9IDE2OyBjcCsrOyBicmVhazsgLyogaWYgcmFkaXggc2lnbmlmaWVyLi4u ICovCi0gICAgICAgICAgY2FzZSAnbyc6Ci0gICAgICAgICAgY2FzZSAncSc6IHJhZGl4ID0gODsg Y3ArKzsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAndCc6IHJhZGl4ID0gMjsgY3ArKzsgYnJlYWs7 Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh0cCA9IHRidWYsIHRva3ZhbCA9IDA7ICp0cCAhPSAn XDAnOyB0cCsrKSAgewotICAgICAgICAgICAgaW50IGRpZzsKLSAgICAgICAgICAgIGRpZyA9ICp0 cCAtICcwJzsgICAgICAgICAgICAvKiBDb252ZXJ0IG51bWJlciAqLwotICAgICAgICAgICAgaWYg KGRpZyA+IDEwKSBkaWcgLT0gJ2EnLScwJy0xMDsKLSAgICAgICAgICAgIGlmIChkaWcgPj0gcmFk aXgpIHsKLSAgICAgICAgICAgICAgICBpZiAoY21kbHZsID09IDAgJiYgIXhfaWZudW0gJiYgIXhl cnJvcikKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgZGlnaXQgJyVjJyBpbiBu dW1iZXJcbiIsKnRwKTsKLSAgICAgICAgICAgICAgICB4ZXJyb3IgPSAxOwotICAgICAgICAgICAg ICAgIHJldHVybihOVU1CRVIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdG9rdmFsID0g cmFkaXgqdG9rdmFsICsgZGlnOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybihOVU1CRVIpOwot ICAgIH0KLSAgICBpZiAoY21kbHZsID09IDAgJiYgIXhfaWZudW0gJiYgIXhlcnJvcikKLSAgICAg IHByaW50ZigiSW52YWxpZCBjaGFyYWN0ZXIgJyVjJyBpbiBpbnB1dFxuIiwqY3ApOwotICAgIHhl cnJvciA9IDE7Ci0gICAgY3ArKzsKLSAgICByZXR1cm4oZ2V0dG9rKCkpOwotI2Vsc2UKLS8qIFRo aXMgY29kZSBhbGxvd3Mgbm9uLW51bWJlcnMgdG8gYmUgdHJlYXRlZCBhcyBtYWNybyBuYW1lcyAq LwotICAgIHsKLSAgICAgICAgaW50IGksIHg7Ci0gICAgICAgIGNoYXIgKiBzLCAqIGNwMTsKLSAg ICAgICAgY3AxID0gY3A7Ci0gICAgICAgIHRwID0gdGJ1ZjsKLSAgICAgICAgZm9yIChpID0gMDsg aSA8IDgwOyBpKyspIHsKLSAgICAgICAgICAgIC8qIExvb2sgYWhlYWQgdG8gbmV4dCBicmVhayBj aGFyYWN0ZXIgKi8KLSAgICAgICAgICAgIC8qIHByZXR0eSBtdWNoIGFueXRoaW5nIHRoYXQgaXMg bm90IGluIHRoZSBzd2l0Y2goKSBhYm92ZS4gKi8KLSAgICAgICAgICAgIGlmIChpc2FscGhhKCpj cCkgfHwgaXNkaWdpdCgqY3ApIHx8Ci0gICAgICAgICAgICAgICAgKmNwID09ICdfJyB8fCAqY3Ag PT0gJzonIHx8ICpjcCA9PSAnLicgfHwKLSAgICAgICAgICAgICAgICAqY3AgPT0gJ1snIHx8ICpj cCA9PSAnXScgfHwKLSAgICAgICAgICAgICAgICAqY3AgPT0gJ3snIHx8ICpjcCA9PSAnfScKLSAg ICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgIHRidWZbaV0gPSAqY3ArKzsKLSAgICAgICAg ICAgIGVsc2UKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkg Pj0gODApIHsKLSAgICAgICAgICAgIHByaW50ZigiVG9vIGxvbmcgLSBcIiVzXCJcbiIsIGNwMSk7 Ci0gICAgICAgICAgICB4ZXJyb3IgPSAxOwotICAgICAgICAgICAgY3ArKzsKLSAgICAgICAgICAg IHJldHVybihnZXR0b2soKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHhlcnJvcikgcmV0dXJu KE5VTUJFUik7Ci0KLSAgICAgICAgdGJ1ZltpXSA9IE5VTDsKLSAgICAgICAgcyA9IHRidWY7Ci0g ICAgICAgIGlmICghaXNkaWdpdCh0YnVmWzBdKSkgewotICAgICAgICAgICAgY2hhciAqIHMyID0g TlVMTDsKLSAgICAgICAgICAgIHggPSBteGxvb2sobWFjdGFiLHRidWYsbm1hYyk7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTExLCJnZXR0b2sgbXhsb29rIix0YnVmLHgpOwotICAgICAgICAgICAgaWYg KHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNtZGx2bCA9PSAwICYmICF4X2lmbnVtICYm ICF4ZXJyb3IpCi0gICAgICAgICAgICAgICAgICBwcmludGYoIkJhZCBudW1iZXIgLSBcIiVzXCJc biIsdGJ1Zik7Ci0gICAgICAgICAgICAgICAgeGVycm9yID0gMTsKLSAgICAgICAgICAgICAgICBj cCsrOwotICAgICAgICAgICAgICAgIHJldHVybihnZXR0b2soKSk7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBzMiA9IG1hY3RhYlt4XS5tdmFsOwotICAgICAgICAgICAgaWYgKCFzMikgczIg PSAiIjsKLSAgICAgICAgICAgIGlmICgqczIpIHMgPSBzMjsKLSAgICAgICAgfQotI2lmZGVmIENL RkxPQVQKLSAgICAgICAgeCA9IGlzZmxvYXQocywwKTsKLSNlbHNlCi0gICAgICAgIHggPSBjaGtu dW0ocyk7Ci0jZW5kaWYgLyogQ0tGTE9BVCAqLwotICAgICAgICBpZiAoeCA+IDApIHsKLSAgICAg ICAgICAgIHRva3ZhbCA9IGNrYXRvZnMocyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICBpZiAoY21kbHZsID09IDAgJiYgIXhfaWZudW0gJiYgIXhlcnJvcikKLSAgICAgICAgICAgICAg cHJpbnRmKCJCYWQgbnVtYmVyIC0gXCIlc1wiXG4iLHRidWYpOwotICAgICAgICAgICAgeGVycm9y ID0gMTsKLSAgICAgICAgICAgIGNwKys7Ci0gICAgICAgICAgICByZXR1cm4oZ2V0dG9rKCkpOwot ICAgICAgICB9Ci0gICAgICAgIHJldHVybihOVU1CRVIpOwotICAgIH0KLSNlbmRpZiAvKiBDT01N RU5UICovCi19Ci0KLXN0YXRpYyBDS19PRkZfVAotI2lmZGVmIENLX0FOU0lDCi1leHBvbihDS19P RkZfVCB4LCBDS19PRkZfVCB5KQotI2Vsc2UKLWV4cG9uKHgseSkgQ0tfT0ZGX1QgeCx5OwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi0vKiBleHBvbiAqLyB7Ci0gICAgQ0tfT0ZGX1QgcmVzdWx0ID0g MTsKLSAgICBpbnQgc2lnbiA9IDE7Ci0gICAgaWYgKHkgPCAwKSByZXR1cm4oMCk7Ci0gICAgaWYg KHggPCAwKSB7Ci0gICAgICAgIHggPSAteDsKLSAgICAgICAgaWYgKHkgJiAxKSBzaWduID0gLTE7 Ci0gICAgfQotICAgIHdoaWxlICh5ICE9IDApIHsKLSAgICAgICAgaWYgKHkgJiAxKSByZXN1bHQg Kj0geDsKLSAgICAgICAgeSA+Pj0gMTsKLSAgICAgICAgaWYgKHkgIT0gMCkgeCAqPSB4OwotICB9 Ci0gIHJldHVybihyZXN1bHQgKiBzaWduKTsKLX0KLQotLyoKLSAqIGZhY3RvciA6Oj0gc2ltcGxl IHwgc2ltcGxlIF4gZmFjdG9yCi0gKgotICovCi1zdGF0aWMgVk9JRAotZmFjdG9yKCkgewotICAg IENLX09GRl9UIG9sZHZhbDsKLSAgICBzaW1wbGUoKTsKLSAgICBpZiAoY3VydG9rID09ICdeJykg ewotICAgICAgICBvbGR2YWwgPSBleHB2YWw7Ci0gICAgICAgIGN1cnRvayA9IGdldHRvaygpOwot ICAgICAgICBmYWN0b3IoKTsKLSAgICAgICAgZXhwdmFsID0gZXhwb24ob2xkdmFsLGV4cHZhbCk7 Ci0gICAgfQotfQotCi0vKgotICogdGVybXAgOjo9IE5VTEwgfCB7KiwvLCUsJn0gZmFjdG9yIHRl cm1wCi0gKgotICovCi1zdGF0aWMgVk9JRAotdGVybXAoKSB7Ci0gICAgd2hpbGUgKGN1cnRvayA9 PSAnKicgfHwgY3VydG9rID09ICcvJyB8fCBjdXJ0b2sgPT0gJyUnIHx8IGN1cnRvayA9PSAnJicp IHsKLSAgICAgICAgQ0tfT0ZGX1Qgb2xkdmFsOwotICAgICAgICBjaGFyIG9wOwotICAgICAgICBv cCA9IGN1cnRvazsKLSAgICAgICAgY3VydG9rID0gZ2V0dG9rKCk7ICAgICAgICAgICAgICAvKiBz a2lwIHBhc3Qgb3BlcmF0b3IgKi8KLSAgICAgICAgb2xkdmFsID0gZXhwdmFsOwotICAgICAgICBm YWN0b3IoKTsKLSAgICAgICAgc3dpdGNoKG9wKSB7Ci0gICAgICAgICAgY2FzZSAnKic6IGV4cHZh bCA9IG9sZHZhbCAqIGV4cHZhbDsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnLyc6Ci0gICAgICAg ICAgY2FzZSAnJSc6Ci0gICAgICAgICAgICBpZiAoZXhwdmFsID09IDApIHsKLSAgICAgICAgICAg ICAgICBpZiAoIXhfaWZudW0pCi0gICAgICAgICAgICAgICAgICBwcmludGYoIj9EaXZpZGUgYnkg emVyb1xuIik7Ci0gICAgICAgICAgICAgICAgeGVycm9yID0gMTsKLSAgICAgICAgICAgICAgICBk aXZieXplcm8gPSAxOwotICAgICAgICAgICAgICAgIGV4cHZhbCA9IC0xOwotICAgICAgICAgICAg fSBlbHNlCi0gICAgICAgICAgICAgIGV4cHZhbCA9IChvcCA9PSAnLycpID8gKG9sZHZhbCAvIGV4 cHZhbCkgOiAob2xkdmFsICUgZXhwdmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg IGNhc2UgJyYnOgotICAgICAgICAgICAgZXhwdmFsID0gb2xkdmFsICYgZXhwdmFsOyBicmVhazsK LSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIENLX09GRl9UCi0jaWZkZWYgQ0tfQU5TSUMK LWZhY3QoQ0tfT0ZGX1QgeCkKLSNlbHNlCi1mYWN0KHgpIENLX09GRl9UIHg7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLS8qIGZhY3QgKi8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBm YWN0b3JpYWwgKi8KLSAgICBDS19PRkZfVCByZXN1bHQgPSAxOwotICAgIHdoaWxlICh4ID4gMSkK LSAgICAgIHJlc3VsdCAqPSB4LS07Ci0gICAgcmV0dXJuKHJlc3VsdCk7Ci19Ci0KLS8qCi0gKiB0 ZXJtIDo6PSBmYWN0b3IgdGVybXAKLSAqCi0gKi8KLXN0YXRpYyBWT0lECi10ZXJtKCkgewotICAg IGZhY3RvcigpOwotICAgIHRlcm1wKCk7Ci19Ci0KLXN0YXRpYyBDS19PRkZfVAotI2lmZGVmIENL X0FOU0lDCi1nY2QoQ0tfT0ZGX1QgeCwgQ0tfT0ZGX1QgeSkKLSNlbHNlCi1nY2QoeCx5KSBDS19P RkZfVCB4LHk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGdjZCAqLyB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBHcmVhdGVzdCBDb21tb24gRGl2aXNvciAqLwotICAgIGludCBu c2hpZnQgPSAwOwotICAgIGlmICh4IDwgMCkgeCA9IC14OwotICAgIGlmICh5IDwgMCkgeSA9IC15 OyAgICAgICAgICAgICAgICAgIC8qIHZhbGlkYXRlIGFyZ3VtZW50cyAqLwotICAgIGlmICh4ID09 IDAgfHwgeSA9PSAwKSByZXR1cm4oeCArIHkpOyAgICAvKiB0aGlzIGlzIGJvZ3VzICovCi0KLSAg ICB3aGlsZSAoISgoeCAmIDEpIHwgKHkgJiAxKSkpIHsgICAgICAvKiBnZXQgcmlkIG9mIHBvd2Vy cyBvZiAyICovCi0gICAgICAgIG5zaGlmdCsrOwotICAgICAgICB4ID4+PSAxOwotICAgICAgICB5 ID4+PSAxOwotICAgIH0KLSAgICB3aGlsZSAoeCAhPSAxICYmIHkgIT0gMSAmJiB4ICE9IDAgJiYg eSAhPSAwKSB7Ci0gICAgICAgIHdoaWxlICghKHggJiAxKSkgeCA+Pj0gMTsgICAgICAgLyogZWxp bWluYXRlIHVubmVjZXNzYXJ5ICovCi0gICAgICAgIHdoaWxlICghKHkgJiAxKSkgeSA+Pj0gMTsg ICAgICAgLyogcG93ZXJzIG9mIDIgKi8KLSAgICAgICAgaWYgKHggPCB5KSB7ICAgICAgICAgICAg ICAgICAgICAvKiBmb3JjZSB4IHRvIGJlIGxhcmdlciAqLwotICAgICAgICAgICAgQ0tfT0ZGX1Qg dDsKLSAgICAgICAgICAgIHQgPSB4OwotICAgICAgICAgICAgeCA9IHk7Ci0gICAgICAgICAgICB5 ID0gdDsKLSAgICAgICAgfQotICAgICAgICB4IC09IHk7Ci0gICAgfQotICAgIGlmICh4ID09IDAg fHwgeSA9PSAwKSByZXR1cm4oKHggKyB5KSA8PCBuc2hpZnQpOyAvKiBnY2QgaXMgbm9uLXplcm8g b25lICovCi0gICAgZWxzZSByZXR1cm4oKENLX09GRl9UKSAxIDw8IG5zaGlmdCk7ICAgIC8qIGVs c2UgZ2NkIGlzIDEgKi8KLX0KLQotLyoKLSAqIGV4cHJwIDo6PSBOVUxMIHwgeyssLSx8LC4uLn0g dGVybSBleHBycAotICoKLSAqLwotc3RhdGljIFZPSUQKLWV4cHJwKCkgewotICAgIHdoaWxlICh3 aW5kZXgoIistfDw+I0AiLGN1cnRvaykgIT0gTlVMTCkgewotICAgICAgICBDS19PRkZfVCBvbGR2 YWw7Ci0gICAgICAgIGNoYXIgb3A7Ci0gICAgICAgIG9wID0gY3VydG9rOwotICAgICAgICBjdXJ0 b2sgPSBnZXR0b2soKTsgICAgICAgICAgICAgIC8qIHNraXAgcGFzdCBvcGVyYXRvciAqLwotICAg ICAgICBvbGR2YWwgPSBleHB2YWw7Ci0gICAgICAgIHRlcm0oKTsKLSAgICAgICAgc3dpdGNoKG9w KSB7Ci0gICAgICAgICAgY2FzZSAnKycgOiBleHB2YWwgPSBvbGR2YWwgKyBleHB2YWw7IGJyZWFr OwotICAgICAgICAgIGNhc2UgJy0nIDogZXhwdmFsID0gb2xkdmFsIC0gZXhwdmFsOyBicmVhazsK LSAgICAgICAgICBjYXNlICd8JyA6IGV4cHZhbCA9IG9sZHZhbCB8IGV4cHZhbDsgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSAnIycgOiBleHB2YWwgPSBvbGR2YWwgXiBleHB2YWw7IGJyZWFrOwotICAg ICAgICAgIGNhc2UgJ0AnIDogZXhwdmFsID0gZ2NkKG9sZHZhbCxleHB2YWwpOyBicmVhazsKLSAg ICAgICAgICBjYXNlICc8JyA6IGV4cHZhbCA9IG9sZHZhbCA8PCBleHB2YWw7IGJyZWFrOwotICAg ICAgICAgIGNhc2UgJz4nIDogZXhwdmFsID0gb2xkdmFsID4+IGV4cHZhbDsgYnJlYWs7Ci0gICAg ICAgIH0KLSAgICB9Ci19Ci0KLS8qCi0gKiBleHByIDo6PSB0ZXJtIGV4cHJwCi0gKgotICovCi1z dGF0aWMgVk9JRAotZXhwcigpIHsKLSAgICB0ZXJtKCk7Ci0gICAgZXhwcnAoKTsKLX0KLQotc3Rh dGljIENLX09GRl9UCi14cGFyc2UoKSB7Ci0gICAgY3VydG9rID0gZ2V0dG9rKCk7Ci0gICAgZXhw cigpOwotI2lmZGVmIENPTU1FTlQKLSAgICBpZiAoY3VydG9rID09ICckJykgewotICAgICAgICBj dXJ0b2sgPSBnZXR0b2soKTsKLSAgICAgICAgaWYgKGN1cnRvayAhPSBOVU1CRVIpIHsKLSAgICAg ICAgICAgIGlmIChjbWRsdmwgPT0gMCAmJiAheF9pZm51bSkKLSAgICAgICAgICAgICAgcHJpbnRm KCI/SWxsZWdhbCByYWRpeFxuIik7Ci0gICAgICAgICAgICB4ZXJyb3IgPSAxOwotICAgICAgICAg ICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0gICAgICAgIGN1cnRvayA9IGdldHRvaygpOwotICAg IH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgaWYgKGN1cnRvayAhPSBOX0VPVCkgewotICAg ICAgICBpZiAoY21kbHZsID09IDAgJiYgIXhfaWZudW0gJiYgIXhlcnJvcikKLSAgICAgICAgICBw cmludGYoIj9FeHRyYSBjaGFyYWN0ZXJzIGFmdGVyIGV4cHJlc3Npb25cbiIpOwotICAgICAgICB4 ZXJyb3IgPSAxOwotICAgIH0KLSAgICByZXR1cm4oZXhwdmFsKTsKLX0KLQotY2hhciAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNpbGVudCBmcm9udCBlbmQgZm9yIGV2YWxh KCkgKi8KLWV2YWx4KHMpIGNoYXIgKnM7IHsKLSAgICBjaGFyICogcDsKLSAgICBpbnQgdDsKLSAg ICB0ID0geF9pZm51bTsKLSAgICB4X2lmbnVtID0gMTsKLSAgICBwID0gZXZhbGEocyk7Ci0gICAg eF9pZm51bSA9IHQ7Ci0gICAgcmV0dXJuKHApOwotfQotCi1jaGFyICoKLWV2YWxhKHMpIGNoYXIg KnM7IHsKLSAgICBDS19PRkZfVCB2OwkJCQkvKiBOdW1lcmljIHZhbHVlICovCi0gICAgaWYgKCFz KSByZXR1cm4oIiIpOwotICAgIHhlcnJvciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFN0YXJ0IG91dCB3aXRoIG5vIGVycm9yICovCi0gICAgZGl2Ynl6ZXJvID0gMDsKLSAgICBjcCA9 IHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHRoZSBhcmd1bWVudCBnbG9i YWwgKi8KLSAgICB2ID0geHBhcnNlKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSB0 aGUgc3RyaW5nICovCi0gICAgcmV0dXJuKHhlcnJvciA/ICIiIDogY2tmc3RvYSh2KSk7CS8qIFJl dHVybiBlbXB0eSBzdHJpbmcgb24gZXJyb3IgKi8KLX0KLQotLyoKLSAqIHNpbXBsZXN0IDo6PSBO VU1CRVIgfCAoIGV4cHIgKQotICoKLSAqLwotc3RhdGljIFZPSUQKLXNpbXBsZXN0KCkgewotICAg IGNoYXIgKiBwOwotICAgIHAgPSBjcDsKLSAgICBpZiAoY3VydG9rID09IE5VTUJFUikKLSAgICAg IGV4cHZhbCA9IHRva3ZhbDsKLSAgICBlbHNlIGlmIChjdXJ0b2sgPT0gJygnKSB7Ci0gICAgICAg IGN1cnRvayA9IGdldHRvaygpOyAgICAgICAgICAgICAgLyogc2tpcCBvdmVyIHBhcmVuICovCi0g ICAgICAgIGV4cHIoKTsKLSAgICAgICAgaWYgKGN1cnRvayAhPSAnKScpIHsKLSAgICAgICAgICAg IGlmIChjbWRsdmwgPT0gMCAmJiAheF9pZm51bSAmJiAheGVycm9yKQotICAgICAgICAgICAgICBw cmludGYoIj9NaXNzaW5nIHJpZ2h0IHBhcmVudGhlc2lzXG4iKTsKLSAgICAgICAgICAgIHhlcnJv ciA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMCwiR0VUVE9LIFNJTVBMRVNUICgp IixwLDApOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGNtZGx2bCA9PSAwICYmICF4X2lm bnVtICYmICF4ZXJyb3IpCi0gICAgICAgICAgcHJpbnRmKCI/T3BlcmF0b3IgdW5leHBlY3RlZFxu Iik7Ci0gICAgICAgIHhlcnJvciA9IDE7Ci0gICAgfQotICAgIGN1cnRvayA9IGdldHRvaygpOwot fQotCi0vKgotICogc2ltcGxlciA6Oj0gc2ltcGxlc3QgfCBzaW1wbGVzdCAhCi0gKgotICovCi1z dGF0aWMgVk9JRAotc2ltcGxlcigpIHsKLSAgICBzaW1wbGVzdCgpOwotICAgIGlmIChjdXJ0b2sg PT0gJyEnKSB7Ci0gICAgICAgIGN1cnRvayA9IGdldHRvaygpOwotICAgICAgICBleHB2YWwgPSBm YWN0KGV4cHZhbCk7Ci0gICAgfQotfQotCi0vKgotICogc2ltcGxlIDo6PSB7LSx+LCF9IHNpbXBs ZXIgfCBzaW1wbGVyCi0gKgotICovCi0KLXN0YXRpYyBWT0lECi1zaW1wbGUoKSB7Ci0gICAgaWYg KGN1cnRvayA9PSAnLScgfHwgY3VydG9rID09ICd+JyB8fCBjdXJ0b2sgPT0gJyEnIHx8IGN1cnRv ayA9PSAnKycpIHsKLSAgICAgICAgaW50IG9wID0gY3VydG9rOwotICAgICAgICBjdXJ0b2sgPSBn ZXR0b2soKTsgICAgICAgICAgICAgIC8qIHNraXAgb3ZlciAtIHNpZ24gKi8KLSAgICAgICAgc2lt cGxlcigpOyAgICAgICAgICAgICAgICAgICAgICAvKiBwYXJzZSB0aGUgZmFjdG9yIGFnYWluICov Ci0gICAgICAgIGlmIChvcCAhPSAnKycpCi0gICAgICAgICAgZXhwdmFsID0gKG9wID09ICctJykg PyAtZXhwdmFsIDogKChvcCA9PSAnIScpID8gIWV4cHZhbCA6IH5leHB2YWwpOwotICAgIH0gZWxz ZSBzaW1wbGVyKCk7Ci19Ci0KLS8qICBEIEMgTCBBIFIgUiBBIFkgIC0tICBEZWNsYXJlIGFuIGFy cmF5ICAqLwotLyoKLSAgQ2FsbCB3aXRoOgotICAgY2hhciBhID0gc2luZ2xlIGNoYXJhY3RlciBk ZXNpZ25hdG9yIGZvciB0aGUgYXJyYXksIGUuZy4gImEiLgotICAgaW50ICBuID0gc2l6ZSBvZiBh cnJheS4gIC0xIG1lYW5zIHRvIHVuZGVjbGFyZSB0aGUgYXJyYXkuCi0gIFJldHVybnM6Ci0gICAw IG9yIGdyZWF0ZXIgb24gc3VjY2VzcywgaGF2aW5nIGNyZWF0ZWQgdGhlIHJlcXVlc3RlZCBhcnJh eSB3aXRoCi0gICAgIHdpdGggbisxIGVsZW1lbnRzLCAwLi5uLiAgSWYgYW4gYXJyYXkgb2YgdGhl IHNhbWUgbmFtZSBleGlzdGVkCi0gICAgIHByZXZpb3VzbHksIGl0IGlzIGRlc3Ryb3llZC4gIFRo ZSBuZXcgYXJyYXkgaGFzIGFsbCBpdHMgZWxlbWVudHMKLSAgICAgaW5pdGlhbGl6ZWQgdG8gTlVM TCBwb2ludGVycy4gIFdoZW4gYW4gYXJyYXkgaXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQsCi0gICAg IHRoZSByZXR1cm4gdmFsdWUgaXMgaXRzIGluZGV4ICgwID0gJ2EnLCAxID0gJ2InLCBhbmQgc28g b24uKQotICAtMSBvbiBmYWlsdXJlIChiZWNhdXNlICdhJyBvdXQgb2YgcmFuZ2Ugb3IgbWFsbG9j IGZhaWx1cmUpLgotKi8KLWludAotI2lmZGVmIENLX0FOU0lDCi1kY2xhcnJheShjaGFyIGEsIGlu dCBuKQotI2Vsc2UKLWRjbGFycmF5KGEsbikgY2hhciBhOyBpbnQgbjsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotLyogZGNsYXJyYXkgKi8gewotICAgIGNoYXIgYywgKipwOyBpbnQgaSwgbjIsIHJj OwotCi0gICAgaWYgKGEgPiA2MyAmJiBhIDwgOTEpIGEgKz0gMzI7ICAgICAgLyogQ29udmVydCBs ZXR0ZXJzIHRvIGxvd2VyY2FzZSAqLwotICAgIGlmIChhIDwgQVJSQVlCQVNFIHx8IGEgPiAxMjIp ICAgICAgIC8qIFZlcmlmeSBuYW1lICovCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKG4g PCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgYXJnICovCi0gICAgICByZXR1 cm4oLTEpOwotICAgIGlmIChuKzEgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1BWElO VCsxIHdyYXBzIGFyb3VuZCAqLwotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGMgPSBhOwotICAg IGEgLT0gQVJSQVlCQVNFOyAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgbmFtZSB0byBu dW1iZXIgKi8KLSAgICByYyA9IGE7CQkJCS8qIEFycmF5IGluZGV4IHdpbGwgYmUgcmV0dXJuIGNv ZGUgKi8KLSAgICBpZiAoKHAgPSBhX3B0clthXSkgIT0gTlVMTCkgeyAgICAgICAvKiBEZWxldGUg b2xkIGFycmF5IG9mIHNhbWUgbmFtZSAqLwotICAgICAgICBpZiAoYV9saW5rW2FdID4gLTEpIHsg ICAgICAgICAgIC8qIElzIGl0IGEgbGluaz8gKi8KLSAgICAgICAgICAgIGlmIChuID09IDApIHsg ICAgICAgICAgICAgICAvKiBJZiB3ZSdyZSBqdXN0IGRlbGV0aW5nIGl0ICovCi0gICAgICAgICAg ICAgICAgYV9wdHJbYV0gPSAoY2hhciAqKikgTlVMTDsgLyogY2xlYXIgYWxsIHRoZSBpbmZvLiAq LwotICAgICAgICAgICAgICAgIGFfZGltW2FdID0gMDsKLSAgICAgICAgICAgICAgICBhX2xpbmtb YV0gPSAtMTsKLSAgICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTm90IGRlbGV0aW5nICovCi0gICAgICAgICAgICBhID0g YV9saW5rW2FdOyAgICAgICAgICAgICAgLyogU3dpdGNoIHRvIGxpbmtlZC10byBhcnJheSAqLwot ICAgICAgICB9Ci0gICAgICAgIG4yID0gYV9kaW1bYV07ICAgICAgICAgICAgICAgICAgLyogUmVh bCBhcnJheSAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IG4yOyBpKyspIHsgICAgIC8qIEZp cnN0IGRlbGV0ZSBpdHMgZWxlbWVudHMgKi8KLSAgICAgICAgICAgIGlmIChwW2ldKSB7Ci0gICAg ICAgICAgICAgICAgZnJlZShwW2ldKTsKLSAgICAgICAgICAgICAgICBwW2ldID0gTlVMTDsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmcmVlKChjaGFyICopYV9wdHJbYV0pOyAg ICAgICAgIC8qIFRoZW4gdGhlIGVsZW1lbnQgbGlzdCAqLwotICAgICAgICBpZiAobiA9PSAwKSB7 ICAgICAgICAgICAgICAgICAgIC8qIElmIHVuZGVjbGFyaW5nIHRoaXMgYXJyYXkuLi4gKi8KLSAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjIgLSBBUlJBWUJBU0U7IGkrKykgeyAvKiBBbnkg bGlua2VkIGFycmF5cz8gKi8KLSAgICAgICAgICAgICAgICBpZiAoaSAhPSBhICYmIGFfbGlua1tp XSA9PSBhKSB7ICAgICAvKiBGaW5kIHRoZW0gKi8KLSAgICAgICAgICAgICAgICAgICAgYV9wdHJb aV0gPSAoY2hhciAqKikgTlVMTDsgICAgICAvKiBhbmQgcmVtb3ZlIHRoZW0gKi8KLSAgICAgICAg ICAgICAgICAgICAgYV9kaW1baV0gPSAwOwotICAgICAgICAgICAgICAgICAgICBhX2xpbmtbaV0g PSAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg ICAgYV9wdHJbYV0gPSAoY2hhciAqKikgTlVMTDsgICAgICAvKiBSZW1vdmUgcG9pbnRlciB0byBl bGVtZW50IGxpc3QgKi8KLSAgICAgICAgYV9kaW1bYV0gPSAwOyAgICAgICAgICAgICAgICAgICAv KiBTZXQgZGltZW5zaW9uIGF0IHplcm8uICovCi0gICAgICAgIGFfbGlua1thXSA9IC0xOyAgICAg ICAgICAgICAgICAgLyogVW5zZXQgbGluayB3b3JkICovCi0gICAgfQotICAgIGlmIChuIDwgMCkJ CQkJLyogSWYgb25seSB1bmRlY2xhcmluZywgKi8KLSAgICAgIHJldHVybigwKTsJCQkvKiAgd2Un cmUgZG9uZS4gKi8KLSAgICBwID0gKGNoYXIgKiopIG1hbGxvYygobisxKSAqIHNpemVvZihjaGFy ICoqKSk7IC8qIEFsbG9jYXRlIGZvciBuZXcgYXJyYXkgKi8KLSAgICBpZiAocCA9PSBOVUxMKSBy ZXR1cm4oLTEpOyAgICAgICAgICAvKiBDaGVjayAqLwotICAgIGFfcHRyW2FdID0gcDsgICAgICAg ICAgICAgICAgICAgICAgIC8qIFNhdmUgcG9pbnRlciB0byBtZW1iZXIgbGlzdCAqLwotICAgIGFf ZGltW2FdID0gbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgZGltZW5zaW9uICovCi0g ICAgZm9yIChpID0gMDsgaSA8PSBuOyBpKyspICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBtZW1i ZXJzIHRvIG51bGwgKi8KLSAgICAgIHBbaV0gPSBOVUxMOwotICAgIGZvciAoaSA9IDA7IGkgPCAo aW50KSAneicgLSBBUlJBWUJBU0U7IGkrKykgeyAvKiBBbnkgbGlua2VkIGFycmF5cz8gKi8KLSAg ICAgICAgaWYgKGkgIT0gYSAmJiBhX2xpbmtbaV0gPT0gYSkgeyAvKiBGaW5kIGFuZCB1cGRhdGUg dGhlbSAqLwotICAgICAgICAgICAgYV9wdHJbaV0gPSBwOwotICAgICAgICAgICAgYV9kaW1baV0g PSBuOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19Ci0KLS8qICBYIEEgUiBS IEEgWSAgLS0gQ29udmVydCBhcnJheSBuYW1lIHRvIGFycmF5IGluZGV4ICAqLwotCi1pbnQKLXhh cnJheShzKSBjaGFyICogczsgewotICAgIGNoYXIgYnVmWzhdOwotICAgIGludCB4OwotICAgIGNo YXIgYzsKLQotICAgIGlmICghcykgcyA9ICIiOwotICAgIGRlYnVnKEYxMTAsInhhcnJheSIscyww KTsKLSAgICBpZiAoISpzKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICB4ID0gc3RybGVuKHMpOwot Ci0gICAgYnVmWzBdID0gTlVMOwotICAgIGJ1ZlsxXSA9IE5VTDsKLSAgICBidWZbMl0gPSBzWzBd OwotICAgIGJ1ZlszXSA9ICh4ID4gMCkgPyBzWzFdIDogTlVMOwotICAgIGJ1Zls0XSA9ICh4ID4g MSkgPyBzWzJdIDogTlVMOwotICAgIGJ1Zls1XSA9ICh4ID4gMikgPyBzWzNdIDogTlVMOwotICAg IGJ1Zls2XSA9IE5VTDsKLSAgICBkZWJ1ZyhGMTEwLCJ4YXJyYXkgYnVmWzNdIiwmYnVmWzNdLDAp OwotICAgIHMgPSBidWYrMjsKLSAgICBpZiAoKnMgPT0gJyYnKSB7Ci0gICAgICAgIGJ1ZlsxXSA9 IENNRFE7Ci0gICAgICAgIHMtLTsKLSAgICB9IGVsc2UgaWYgKCpzICE9IENNRFEpIHsKLSAgICAg ICAgYnVmWzBdID0gQ01EUTsKLSAgICAgICAgYnVmWzFdID0gJyYnOwotICAgICAgICBzID0gYnVm OwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJ4YXJyYXkgcyIscywwKTsKLSAgICBjID0gKihzKzIp OwotICAgIGlmIChpc3VwcGVyKGMpKQotICAgICAgYyA9IHRvbG93ZXIoYyk7Ci0gICAgaWYgKGMg PT0gJ0AnKQotICAgICAgYyA9IDk2OwotICAgIHggPSAoaW50KWMgLSBBUlJBWUJBU0U7Ci0gICAg aWYgKCoocyszKSA9PSAnWycpCi0gICAgICAqKHMrMykgPSBOVUw7Ci0gICAgaWYgKHggPCAwKSB7 Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgaWYgKHggPiAoJ3onIC0gQVJSQVlCQVNFKSkgewot CWRlYnVnKEYxMDEsInhhcnJheSB4IG91dCBvZiByYW5nZSIsIiIseCk7Ci0JcmV0dXJuKC0xKTsK LSAgICB9Ci0gICAgaWYgKCoocyszKSkgewotCWRlYnVnKEYxMTAsInhhcnJheSBzeW50YXgiLHMs MCk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgcmV0dXJuKHgpOwotfQotCi0vKgotICBib3Vu ZHNwYWlyKCkgLS0gcGFyc2VzIGJsYWhbbjptXQotCi0gIEZvciB1c2Ugd2l0aCBhcnJheSBzZWdt ZW50IHNwZWNpZmllcnMgYW5kIGNvbXBhY3Qgc3Vic3RyaW5nIG5vdGF0aW9uLgotICBJZ25vcmVz IHRoZSAiYmxhaCIgcGFydCwgZ2V0cyB0aGUgdmFsdWVzIG9mIG4gYW5kIG0sIHdoaWNoIGNhbiBi ZQotICBudW1iZXJzLCB2YXJpYWJsZXMsIG9yIGFyaXRobWV0aWMgZXhwcmVzc2lvbnM7IGFueXRo aW5nIHRoYXQgcmVzb2x2ZXMKLSAgdG8gYSBudW1iZXIuCi0KLSAgQ2FsbCB3aXRoOgotICAgcyAg ICAtIHN0cmluZyB0byBwYXJzZQotICAgc2VwICAtIGFycmF5IG9mIHBlcm1pc3NpYmxlIGJvdW5k cyBzZXBhcmF0b3IgY2hhcnMKLSAgIGxvICAgLSBwb2ludGVyIHRvIGxvdy1ib3VuZCByZXN1bHQg KG9yIC0xKQotICAgaGkgICAtIHBvaW50ZXIgdG8gaGktYm91bmQgcmVzdWx0IChvciAtMSkKLSAg IHp6ICAgLSBwb2ludGVyIHRvIHNlcGFyYXRvciBjaGFyIHRoYXQgd2FzIGVuY291bnRlcmVkIChv ciBOVUwpCi0gIFJldHVybnM6Ci0gICAtMSBvbiBmYWlsdXJlCi0gICAgMCBvbiBzdWNjZXNzCi0q LyAgICAgIAotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotYm91bmRzcGFpcihjaGFyICpzLCBjaGFy ICpzZXAsIGludCAqbG8sIGludCAqaGksIGNoYXIgKnp6KQotI2Vsc2UKLWJvdW5kc3BhaXIocyxz ZXAsbG8saGksenopIGNoYXIgKnMsICpzZXAsICp6ejsgaW50ICpsbywgKmhpOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi17Ci0gICAgaW50IGksIHgsIHksIHJhbmdlWzJdLCBiYyA9IDA7Ci0gICAg Y2hhciBjID0gTlVMLCAqczIgPSBOVUxMLCBidWZbMjU2XSwgKnAsICpxLCAqciwgKmVbMl0sICp0 bXAgPSBOVUxMOwotCi0gICAgZGVidWcoRjExMCwiYm91bmRzcGFpciBzIixzLDApOwotICAgIGRl YnVnKEYxMTAsImJvdW5kc3BhaXIgc2VwIixzZXAsMCk7Ci0KLSAgICAqbG8gPSAtMTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGJvdW5kcyAqLwotICAgICpoaSA9IC0xOwot ICAgICp6eiA9IDA7CQkJCS8qIERlZmF1bHQgYm91bmRzIHNlcGFyYXRvciAqLwotCi0gICAgcmFu Z2VbMF0gPSAtMTsgICAgICAgICAgICAgICAgICAgICAgLyogSXQncyBPSyAtLSBnZXQgY29udGVu dHMgKi8KLSAgICByYW5nZVsxXSA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAvKiBvZiBzdWJz Y3JpcHQgYnJhY2tldHMgKi8KLSAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICBpZiAoISpzKQotICAg ICAgcmV0dXJuKC0xKTsKLSAgICBtYWtlc3RyKCZ0bXAscyk7ICAgICAgICAgICAgICAgICAgICAv KiBNYWtlIGEgcG9rZWFibGUgY29weSAqLwotICAgIHAgPSB0bXA7Ci0gICAgcSA9IE5VTEw7Ci0g ICAgciA9IE5VTEw7Ci0gICAgZm9yIChwID0gczsgKnA7IHArKykgewkJLyogR2V0IHRoZSB0d28g ZWxlbWVudHMgKi8KLQlpZiAoKnAgPT0gJ1snKSB7Ci0JICAgIGJjKys7CQkJLyogQnJhY2tldCBj b3VudGVyICovCi0JICAgIGlmIChiYyA9PSAxICYmICFxKSBxID0gcCsxOwotCX0gZWxzZSBpZiAo KnAgPT0gJ10nKSB7Ci0JICAgIGJjLS07Ci0JICAgIGlmIChiYyA9PSAwICYmIHEpICpwID0gTlVM OwotCX0gZWxzZSBpZiAoYmMgPT0gMSkgewkJLyogSWYgd2l0aGluIGJyYWNrZXJzICovCi0JICAg IHMyID0gY2tzdHJjaHIoc2VwLCpwKTsJLyogQ2hlY2sgZm9yIHNlcGFyYXRvciAqLwotCSAgICBp ZiAoczIpIHsKLQkJZGVidWcoRjAwMCwiYm91bmRzcGFpciAqczIiLCIiLCpzMik7Ci0JCWlmIChj KSB7ICAgICAgICAKLQkJICAgIGRlYnVnKEYwMDAsImJvdW5kc3BhaXIiLCJUb28gbWFueSBzZXBh cmF0b3JzIiwqczIpOwotCQkgICAgbWFrZXN0cigmdG1wLE5VTEwpOwotCQkgICAgcmV0dXJuKC0x KTsKLQkJfQotCQljID0gKnMyOwkJLyogU2VwYXJhdG9yIGNoYXJhY3RlciAqLwotCQkqcCA9IE5V TDsKLQkJciA9IHArMTsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAgaWYgKGJjID09IDAgJiYgIXEp IHsKLQkvKiBUaGlzIGFsbG93cyBzdWNoIGNvbnN0cnVjdGlvbnMgYXMgInNob3cgYXJyYXkgYSIg Ki8KLQlkZWJ1ZyhGMTEwLCJib3VuZHNwYWlyIiwibm8gYnJhY2tldHMiLDApOwotCW1ha2VzdHIo JnRtcCxOVUxMKTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmIChiYyAhPSAwIHx8ICFxKSB7 Ci0JZGVidWcoRjExMCwiYm91bmRzcGFpciIsInVuYmFsYW5jZWQgb3IgbWlzc2luZyBicmFja2V0 cyIsMCk7Ci0JbWFrZXN0cigmdG1wLE5VTEwpOwotCXJldHVybigtMSk7Ci0gICAgfQotICAgIGlm ICghcSkgcSA9ICIiOwotICAgIGlmICghKnEpIHEgPSAiLTEiOwotICAgIGlmICghcikgciA9ICIi OwotICAgIGlmICghKnIpIHIgPSAiLTEiOwotCi0gICAgZVswXSA9IHE7Ci0gICAgZVsxXSA9IHI7 Ci0KLSAgICBkZWJ1ZyhGMDAwLCJib3VuZHNwYWlyIGMiLCIiLGMpOwotICAgIGRlYnVnKEYxMTAs ImJvdW5kc3BhaXIgcSIscSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJib3VuZHNwYWlyIHIiLHIsMCk7 Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgMiAmJiBlW2ldOyBpKyspIHsKLQl5ID0gMjU1OwkJCS8q IEV4cGFuZCB2YXJpYWJsZXMsIGV0Yy4gKi8KLQlzID0gYnVmOwotCXp6c3RyaW5nKGVbaV0sJnMs JnkpOwotCXMgPSBldmFseChidWYpOwkJCS8qIEV2YWx1YXRlIGl0IGFyaXRobWV0aWNhbGx5ICov Ci0JaWYgKHMpIGlmICgqcykKLQkgIGNrc3RybmNweShidWYscywyNTYpOwotCWlmICghY2hrbnVt KGJ1ZikpIHsJCS8qIERpZCB3ZSBnZXQgYSBudW1iZXI/ICovCi0JICAgIGRlYnVnKEYxMTAsImJv dW5kc3BhaXIgZWxlbWVudCBub3QgbnVtZXJpYyIsYnVmLDApOwotCSAgICBtYWtlc3RyKCZ0bXAs TlVMTCk7CQkvKiBObywgZmFpbC4gKi8KLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0JcmFuZ2VbaV0g PSBhdG9pKGJ1Zik7Ci0gICAgfQotICAgIG1ha2VzdHIoJnRtcCxOVUxMKTsgICAgICAgICAgICAg ICAgIC8qIEZyZWUgdGVtcG9yYXJ5IHBva2VkIHN0cmluZyAqLwotICAgICpsbyA9IHJhbmdlWzBd OyAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiB3aGF0IHdlIGdvdCAqLwotICAgICpoaSA9 IHJhbmdlWzFdOwotICAgICp6eiA9IGM7Ci0gICAgZGVidWcoRjEwMSwiYm91bmRzcGFpciBsbyIs IiIsKmxvKTsKLSAgICBkZWJ1ZyhGMTAxLCJib3VuZHNwYWlyIGhpIiwiIiwqaGkpOwotICAgIHJl dHVybigwKTsKLX0KLQotLyogIEEgUiBSIEEgWSBCIE8gVSBOIEQgUyAgLS0gIFBhcnNlIGFycmF5 IHNlZ21lbnQgbm90YXRpb24gXCZhW246bV0gICovCi0KLS8qCi0gIENhbGwgd2l0aCBzID0gYXJy YXkgcmVmZXJlbmNlLCBwbHVzIHR3byBwb2ludGVycyB0byBpbnRzLgotICBSZXR1cm5zIC0xIG9u IGVycm9yLCBvciBhcnJheSBpbmRleCwgd2l0aCB0aGUgdHdvIGludHMgc2V0IGFzIGZvbGxvd3M6 Ci0gICBcJmFbXSAgICAgLTEsIC0xCi0gICBcJmFbM10gICAgIDMsIC0xCi0gICBcJmFbMzoxN10g IDMsIDE3Ci0gIFRoZSBhcnJheSBuZWVkIG5vdCBiZSBkZWNsYXJlZCAtLSB0aGlzIHJvdXRpbmUg aXMganVzdCBmb3IgcGFyc2luZy4KLSovCi1pbnQKLWFycmF5Ym91bmRzKHMsbG8saGkpIGNoYXIg KiBzOyBpbnQgKiBsbywgKiBoaTsgewotICAgIGludCBpLCB4LCB5LCByYW5nZVsyXTsKLSAgICBj aGFyIHp6LCBidWZbMjU2XSwgKiBwLCAqIHE7Ci0gICAgY2hhciAqIHRtcCA9IE5VTEw7Ci0KLSAg ICAqbG8gPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGJvdW5kcyAq LwotICAgICpoaSA9IC0xOwotCi0gICAgaWYgKCFzKSBzID0gIiI7ICAgICAgICAgICAgICAgICAg ICAgLyogRGVmZW5zZSBkZSBudWxsIGFyZ3MgKi8KLSAgICBpZiAoISpzKQotICAgICAgcmV0dXJu KC0xKTsKLQotICAgIHggPSB4YXJyYXkocyk7ICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNr IGJhc2ljIHN0cnVjdHVyZSAqLwotICAgIGRlYnVnKEYxMTEsImFycmF5Ym91bmRzIHhhcnJheSIs cyx4KTsKLSAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgT0ss IGZhaWwuICovCi0gICAgICByZXR1cm4oLTEpOwotICAgIHkgPSBib3VuZHNwYWlyKHMsIjoiLGxv LGhpLCZ6eik7Ci0gICAgZGVidWcoRjExMSwiYXJyYXlib3VuZHMgYm91bmRzcGFpciIscyx5KTsK LSAgICBkZWJ1ZyhGMTAxLCJhcnJheWJvdW5kcyBsbyIsIiIsKmxvKTsKLSAgICBkZWJ1ZyhGMTAx LCJhcnJheWJvdW5kcyBoaSIsIiIsKmhpKTsKLSAgICBpZiAoeSA8IDApCQkJCS8qIEdldCBib3Vu ZHMgKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAgcmV0dXJuKHgpOwotfQotCi0vKiAgQSBSIFIg QSBZIE4gQSBNICAtLSAgUGFyc2UgYW4gYXJyYXkgbmFtZSAgKi8KLQotLyoKLSAgQ2FsbCB3aXRo IHBvaW50ZXIgdG8gc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggdGhlIGFycmF5IHJlZmVyZW5jZS4K LSAgU3RyaW5nIG1heSBiZWdpbiB3aXRoIGVpdGhlciBcJiBvciBqdXN0ICYuCi0gIE9uIHN1Y2Nl c3MsCi0gICAgUmV0dXJucyBsZXR0ZXIgSUQgKGFsd2F5cyBsb3dlcmNhc2UpIGluIGFyZ3VtZW50 IGMsCi0gICAgICB3aGljaCBjYW4gYWxzbyBiZSBhY2NlbnQgZ3JhdmUgKGAgPSA5NjsgJ0AnIGlz IGNvbnZlcnRlZCB0byBncmF2ZSk7Ci0gICAgRGltZW5zaW9uIG9yIHN1YnNjcmlwdCBpbiBhcmd1 bWVudCBuOwotICAgIElNUE9SVEFOVDogVGhlc2UgYXJndW1lbnRzIG11c3QgYmUgcHJvdmlkZWQg YnkgdGhlIGNhbGxlciBhcyBhZGRyZXNzZXMKLSAgICBvZiBpbnRzIChub3QgY2hhcnMpLCBmb3Ig ZXhhbXBsZToKLSAgICAgIGNoYXIgKnM7IGludCB4LCB5OwotICAgICAgYXJyYXluYW0ocywmeCwm eSk7Ci0gIE9uIGZhaWx1cmUsIHJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIsIHdpdGggYXJncyBu IGFuZCBjIHNldCB0byB6ZXJvLgotKi8KLWludAotYXJyYXluYW0oc3MsYyxuKSBjaGFyICpzczsg aW50ICpjOyBpbnQgKm47IHsKLSAgICBpbnQgaSwgeSwgcHAsIGxlbjsKLSAgICBjaGFyIHg7Ci0g ICAgY2hhciAqcywgKnAsICpzeCwgKnZucDsKLSAgICAvKiBPbiBzdGFjayB0byBhbGxvdyBmb3Ig cmVjdXJzaXZlIGNhbGxzLi4uICovCi0gICAgY2hhciB2bmJ1ZltBUlJBWVJFRkxFTisxXTsgICAg ICAgICAgLyogRW50aXJlIGFycmF5IHJlZmVyZW5jZSAqLwotICAgIGNoYXIgc3NidWZbQVJSQVlS RUZMRU4rMV07ICAgICAgICAgIC8qIFN1YnNjcmlwdCBpbiAicGxhaW4gdGV4dCIgKi8KLSAgICBj aGFyIHN4YnVmWzE2XTsgICAgICAgICAgICAgICAgICAgICAvKiBFdmFsdWF0ZWQgc3Vic2NyaXB0 ICovCi0KLSAgICAqYyA9ICpuID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFs aXplIHJldHVybiB2YWx1ZXMgKi8KLSAgICBsZW4gPSBzdHJsZW4oc3MpOwotICAgIGZvciAocHAg PSAwLGkgPSAwOyBpIDwgbGVuOyBpKyspIHsgICAgICAgICAgLyogQ2hlY2sgbGVuZ3RoICovCi0g ICAgICAgIGlmIChzc1tpXSA9PSAnWycpIHsKLSAgICAgICAgICAgIHBwKys7Ci0gICAgICAgIH0g ZWxzZSBpZiAoc3NbaV0gPT0gJ10nKSB7Ci0gICAgICAgICAgICBpZiAoLS1wcCA9PSAwKQotICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaSA+IEFSUkFZUkVG TEVOKSB7Ci0gICAgICAgIHByaW50ZigiP0FycmF5IHJlZmVyZW5jZSB0b28gbG9uZyAtICVzXG4i LHNzKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgY2tzdHJuY3B5KHZuYnVmLHNz LEFSUkFZUkVGTEVOKTsKLSAgICB2bnAgPSB2bmJ1ZjsKLSAgICBpZiAodm5idWZbMF0gPT0gQ01E USAmJiB2bmJ1ZlsxXSA9PSAnJicpIHZucCsrOwotICAgIGlmICgqdm5wICE9ICcmJykgewotICAg ICAgICBwcmludGYoIj9Ob3QgYW4gYXJyYXkgLSAlc1xuIix2bmJ1Zik7Ci0gICAgICAgIHJldHVy bigtOSk7Ci0gICAgfQotICAgIHggPSAqKHZucCArIDEpOyAgICAgICAgICAgICAgICAgICAgIC8q IEZvbGQgY2FzZSBvZiBhcnJheSBuYW1lICovCi0KLSAgICAvKiBXZSBkb24ndCB1c2UgaXN1cHBl ciAmIHRvbG93ZXIgaGVyZSBvbiBwdXJwb3NlIGJlY2F1c2UgdGhlc2UgKi8KLSAgICAvKiB3b3Vs ZCBwcm9kdWNlIHVuZGVzaXJlZCBlZmZlY3RzIHdpdGggYWNjZW50ZWQgbGV0dGVycy4gKi8KLSAg ICBpZiAoeCA+IDYzICYmIHggPCA5MSkgeCAgPSAqKHZucCArIDEpID0gKGNoYXIpICh4ICsgMzIp OwotICAgIGlmICgoeCA8IEFSUkFZQkFTRSkgfHwgKHggPiAxMjIpIHx8ICgqKHZucCsyKSAhPSAn WycpKSB7Ci0gICAgICAgIGlmIChtc2dmbGcpIHsKLSAgICAgICAgICAgIHByaW50ZigiP0ludmFs aWQgZm9ybWF0IGZvciBhcnJheSBuYW1lIC0gJXNcbiIsdm5idWYpOwotICAgICAgICAgICAgcmV0 dXJuKC05KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0g ICAgKmMgPSB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHRoZSBhcnJh eSBuYW1lICovCi0gICAgcyA9IHZucCszOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0 IGRpbWVuc2lvbiAqLwotICAgIHAgPSBzc2J1ZjsKLSAgICBwcCA9IDE7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBCcmFja2V0IGNvdW50ZXIgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwg QVJSQVlSRUZMRU4gJiYgKnMgIT0gTlVMOyBpKyspIHsgLyogQ29weSB1cCB0byBdICovCi0gICAg ICAgIGlmICgqcyA9PSAnWycpIHBwKys7Ci0gICAgICAgIGlmICgqcyA9PSAnXScgJiYgLS1wcCA9 PSAwKSBicmVhazsKLSAgICAgICAgKnArKyA9ICpzKys7Ci0gICAgfQotICAgIGlmICgqcyAhPSAn XScpIHsKLSAgICAgICAgcHJpbnRmKCI/Tm8gY2xvc2luZyBicmFja2V0IG9uIGFycmF5IGRpbWVu c2lvbiAtICVzXG4iLHZuYnVmKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgcC0t OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHJpbSB3aGl0ZXNwYWNlIGZyb20g ZW5kICovCi0gICAgd2hpbGUgKCpwID09IFNQIHx8ICpwID09IEhUKQotICAgICAgcC0tOwotICAg IHArKzsKLSAgICAqcCA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5h dGUgc3Vic2NyaXB0IHdpdGggbnVsbCAqLwotICAgIHAgPSBzc2J1ZjsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFBvaW50IHRvIGJlZ2lubmluZyBvZiBzdWJzY3JpcHQgKi8KLSAgICB3aGls ZSAoKnAgPT0gU1AgfHwgKnAgPT0gSFQpICAgICAgICAvKiBUcmltIHdoaXRlc3BhY2UgZnJvbSBi ZWdpbm5pbmcgKi8KLSAgICAgIHArKzsKLSAgICBzeCA9IHN4YnVmOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBXaGVyZSB0byBwdXQgZXhwYW5kZWQgc3Vic2NyaXB0ICovCi0gICAgeSA9IDE2 OwotICAgIHsKLQkvKiBFdmVuIGlmIFZBUklBQkxFLUVWQUxVQVRJT04gU0lNUExFIHVzZSBSRUNV UlNJVkUgZm9yIHN1YnNjcmlwdHMgKi8KLQkvKiBOT1RFOiBUaGlzIGlzIHZ1bG5lcmFibGUgdG8g U0lHSU5UIGFuZCB3aGF0bm90Li4uICovCi0JaW50IHRtcCA9IHZhcmV2YWw7CQkvKiBTYXZlIFZB UklBQkxFLUVWQUxVQVRJT04gc2V0dGluZyAqLwotCXZhcmV2YWwgPSAxOwkJCS8qIEZvcmNlIGl0 IHRvIFJFQ1VSU0lWRSAqLwotCXp6c3RyaW5nKHAsJnN4LCZ5KTsJCS8qIENvbnZlcnQgdmFyaWFi bGVzLCBldGMuICovCi0JdmFyZXZhbCA9IHRtcDsJCQkvKiBSZXN0b3JlIFZBUklBQkxFLUVWQUxV QVRJT04gKi8KLSAgICB9Ci0gICAgc3ggPSBzeGJ1ZjsKLSAgICB3aGlsZSAoKnN4ID09IFNQKSBz eCsrOwotICAgIC8qIGRlYnVnKEYxMTAsImFycmF5bmFtIHN4IiwiIixzeCk7ICovCi0gICAgaWYg KCEqc3gpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW1wdHkgYnJhY2tldHMuLi4gKi8K LSAgICAgICAgKm4gPSAtMTc7ICAgICAgICAgICAgICAgICAgICAgICAvKiAoU2VjcmV0IGNvZGUg Oi0pICovCi0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotICAgIHAgPSBldmFsYShzeCk7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFJ1biBpdCB0aHJ1IFxmbmV2YWwoKS4uLiAqLwotICAgIGlm IChwKSBpZiAoKnApIGNrc3RybmNweShzeGJ1ZixwLDE2KTsgLyogV2Uga25vdyBpdCBoYXMgdG8g YmUgYSBudW1iZXIuICovCi0KLSAgICBpZiAoIWNoa251bShzeGJ1ZikpIHsgICAgICAgICAgICAg ICAvKiBNYWtlIHN1cmUgaXQncyBhbGwgZGlnaXRzICovCi0gICAgICAgIGlmIChtc2dmbGcpIHsK LSAgICAgICAgICAgIHByaW50ZigiP0FycmF5IGRpbWVuc2lvbiBvciBzdWJzY3JpcHQgbWlzc2lu ZyBvciBub3QgbnVtZXJpY1xuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9 IGVsc2UKLSAgICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLSAgICBpZiAoKHkgPSBhdG9pKHN4 YnVmKSkgPCAwKSB7Ci0gICAgICAgIGlmIChjbWZsZ3MgPT0gMCkgcHJpbnRmKCJcbiIpOwotICAg ICAgICBpZiAobXNnZmxnKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9BcnJheSBkaW1lbnNpb24g b3Igc3Vic2NyaXB0IG5vdCBwb3NpdGl2ZSBvciB6ZXJvXG4iKTsKLSAgICAgICAgICAgIHJldHVy bigtOSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHJldHVybigtMik7Ci0gICAgfQotICAg ICpuID0geTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiB0aGUgc3Vic2Ny aXB0IG9yIGRpbWVuc2lvbiAqLwotICAgIHJldHVybigwKTsKLX0KLQotLyogY2hrYXJyYXkgcmV0 dXJucyAwIG9yIGdyZWF0ZXIgaWYgYXJyYXkgZXhpc3RzLCBuZWdhdGl2ZSBvdGhlcndpc2UgKi8K LQotaW50Ci1jaGthcnJheShhLGkpIGludCBhLCBpOyB7ICAgICAgICAgICAgICAgLyogQ2hlY2sg aWYgYXJyYXkgaXMgZGVjbGFyZWQgKi8KLSAgICBpbnQgeDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBhbmQgaWYgc3Vic2NyaXB0IGlzIGluIHJhbmdlICovCi0gICAgaWYgKGEgPT0g NjQpIGEgPSA5NjsgICAgICAgICAgICAgICAgLyogQ29udmVydCBhdHNpZ24gdG8gZ3JhdmUgYWNj ZW50ICovCi0gICAgeCA9IGEgLSBBUlJBWUJBU0U7ICAgICAgICAgICAgICAgICAgLyogVmFsdWVz IG11c3QgYmUgaW4gcmFuZ2UgOTUtMTIyICovCi0jaWZkZWYgQ09NTUVOVAotICAgIGlmICh4ID09 IDAgJiYgbWFjbHZsIDwgMCkgICAgICAgICAgIC8qIE1hY3JvIGFyZyB2ZWN0b3IgYnV0IG5vIG1h Y3JvICovCi0gICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGlmICh4 IDwgMCB8fCB4ID4gJ3onIC0gQVJSQVlCQVNFKSAgIC8qIE5vdCBpbiByYW5nZSAqLwotICAgICAg cmV0dXJuKC0yKTsKLSAgICBpZiAoYV9wdHJbeF0gPT0gTlVMTCkgcmV0dXJuKC0xKTsgICAvKiBO b3QgZGVjbGFyZWQgKi8KLSAgICBpZiAoaSA+IGFfZGltW3hdKSByZXR1cm4oLTIpOyAgICAgICAv KiBEZWNsYXJlZCBidXQgb3V0IG9mIHJhbmdlLiAqLwotICAgIHJldHVybihhX2RpbVt4XSk7ICAg ICAgICAgICAgICAgICAgIC8qIEFsbCBvaywgcmV0dXJuIGRpbWVuc2lvbiAqLwotfQotCi0jaWZk ZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBpc24ndCB1c2VkLiAq LwotY2hhciAqCi1hcnJheXZhbChhLGkpIGludCBhLCBpOyB7ICAgICAgICAgICAgICAgLyogUmV0 dXJuIHZhbHVlIG9mIFwmYVtpXSAqLwotICAgIGludCB4OyBjaGFyICoqcDsgICAgICAgICAgICAg ICAgICAgIC8qIChwb3NzaWJseSBOVUxMKSAqLwotICAgIGlmIChhID09IDY0KSBhID0gOTY7ICAg ICAgICAgICAgICAgIC8qIENvbnZlcnQgYXRzaWduIHRvIGdyYXZlIGFjY2VudCAqLwotICAgIHgg PSBhIC0gQVJSQVlCQVNFOyAgICAgICAgICAgICAgICAgIC8qIFZhbHVlcyBtdXN0IGJlIGluIHJh bmdlIDk1LTEyMiAqLwotICAgIGlmICh4IDwgMCB8fCB4ID4gMjcpIHJldHVybihOVUxMKTsgIC8q IE5vdCBpbiByYW5nZSAqLwotICAgIGlmICgoeCA+IDApICYmIChwID0gYV9wdHJbeF0pID09IE5V TEwpIC8qIEFycmF5IG5vdCBkZWNsYXJlZCAqLwotICAgICAgcmV0dXJuKE5VTEwpOwotICAgIGlm IChpID4gYV9kaW1beF0pICAgICAgICAgICAgICAgICAgIC8qIFN1YnNjcmlwdCBvdXQgb2YgcmFu Z2UuICovCi0gICAgICByZXR1cm4oTlVMTCk7Ci0gICAgcmV0dXJuKHBbaV0pOyAgICAgICAgICAg ICAgICAgICAgICAgLyogQWxsIG9rLCByZXR1cm4gcG9pbnRlciB0byB2YWx1ZS4gKi8KLX0KLSNl bmRpZiAvKiBDT01NRU5UICovCi0KLS8qCi0gIHB1c2hhcnJheSgpIGlzIGNhbGxlZCB3aGVuIGFu IGFycmF5IG5hbWUgaXMgaW5jbHVkZWQgaW4gYSBMT0NBTCBzdGF0ZW1lbnQuCi0gIEl0IG1vdmVz IHRoZSBwb2ludGVycyBmcm9tIHRoZSBnbG9iYWwgZGVmaW5pdGlvbiB0byB0aGUgc3RhY2ssIGFu ZCByZW1vdmVzCi0gIHRoZSBnbG9iYWwgZGVmaW5pdGlvbi4gIExhdGVyLCBpZiB0aGUgc2FtZSBh cnJheSBpcyBkZWNsYXJlZCBpbiB0aGUgbG9jYWwKLSAgY29udGV4dCwgaXQgb2NjdXBpZXMgdGhl IGdsb2JhbCBkZWZpbml0aW9uIGluIHRoZSBub3JtYWwgd2F5LiAgQnV0IHdoZW4KLSAgcG9wY2x2 bCgpIGlzIGNhbGxlZCwgaXQgcmVwbGFjZXMgdGhlIGdsb2JhbCBkZWZpbml0aW9uIHdpdGggdGhl IG9uZSBzYXZlZAotICBoZXJlLiAgVGhlICJzZWNyZXQgY29kZSIgaXMgdXNlZCB0byBpbmRpY2F0 ZSB0byBwb3BjbHYoKSB0aGF0IGl0IHNob3VsZAotICByZW1vdmUgdGhlIGdsb2JhbCBhcnJheSB3 aGVuIHBvcHBpbmcgdGhyb3VnaCB0aGlzIGxldmVsIC0tIG90aGVyd2lzZSBpZiBhCi0gIGxvY2Fs IGFycmF5IHdlcmUgZGVjbGFyZWQgdGhhdCBoYWQgbm8gY291bnRlcnBhcnQgYXQgYW55IGhpZ2hl ciBsZXZlbCwgaXQKLSAgd291bGQgbmV2ZXIgYmUgZGVsZXRlZC4gIFRoaXMgYWxsb3dzIEFsZ29s LWxpa2UgaW5oZXJpdGFuY2UgdG8gd29yayBib3RoCi0gIG9uIHRoZSB3YXkgZG93biBhbmQgb24g dGhlIHdheSBiYWNrIHVwLgotKi8KLWludAotcHVzaGFycmF5KHgseikgaW50IHgsIHo7IHsKLSAg ICBpbnQgeTsKLSAgICBkZWJ1ZyhGMDAwLCJwdXNoYXJyYXkgeCIsIiIseCk7Ci0gICAgZGVidWco RjEwMSwicHVzaGFycmF5IHoiLCIiLHopOwotICAgIHkgPSBjaGthcnJheSh4LHopOwotICAgIGRl YnVnKEYxMDEsInB1c2hhcnJheSB5IiwiIix5KTsKLSAgICB4IC09IEFSUkFZQkFTRTsgICAgICAg ICAgICAgICAgICAgICAvKiBDb252ZXJ0IG5hbWUgbGV0dGVyIHRvIGluZGV4LiAqLwotICAgIGlm ICh4IDwgMCB8fCB4ID4gMjcpCi0gICAgICByZXR1cm4oLTEpOwotICAgIGlmICh5IDwgMCkgewot ICAgICAgICBhYV9wdHJbY21kbHZsXVt4XSA9IChjaGFyICoqKSBOVUxMOwotICAgICAgICBhYV9k aW1bY21kbHZsXVt4XSA9IC0yMzsgICAgICAgIC8qIFNlY3JldCBjb2RlIChzZWUgcG9wY2x2bCgp KSAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFhX3B0cltjbWRsdmxdW3hdID0gYV9wdHJbeF07 Ci0gICAgICAgIGFhX2RpbVtjbWRsdmxdW3hdID0geTsKLSAgICB9Ci0gICAgYV9wdHJbeF0gPSAo Y2hhciAqKikgTlVMTDsKLSAgICBhX2RpbVt4XSA9IDA7Ci0gICAgcmV0dXJuKDApOwotfQotCi0v KiAgUCBBIFIgUyBFIFYgQSBSICAtLSAgUGFyc2UgYSB2YXJpYWJsZSBuYW1lIG9yIGFycmF5IHJl ZmVyZW5jZS4gICovCi0vKgotIENhbGwgd2l0aDoKLSAgIHMgID0gcG9pbnRlciB0byBjYW5kaWRh dGUgdmFyaWFibGUgbmFtZSBvciBhcnJheSByZWZlcmVuY2UuCi0gICAqYyA9IGFkZHJlc3Mgb2Yg aW50ZWdlciBpbiB3aGljaCB0byByZXR1cm4gdmFyaWFibGUgSUQuCi0gICAqaSA9IGFkZHJlc3Mg b2YgaW50ZWdlciBpbiB3aGljaCB0byByZXR1cm4gYXJyYXkgc3Vic2NyaXB0LgotIFJldHVybnM6 Ci0gICAtMjogIHN5bnRheCBlcnJvciBpbiB2YXJpYWJsZSBuYW1lIG9yIGFycmF5IHJlZmVyZW5j ZS4KLSAgICAxOiAgc3VjY2Vzc2Z1bCBwYXJzZSBvZiBhIHNpbXBsZSB2YXJpYWJsZSwgd2l0aCBJ RCBpbiBjLgotICAgIDI6ICBzdWNjZXNzZnVsIHBhcnNlIG9mIGFuIGFycmF5IHJlZmVyZW5jZSwg dy9JRCBpbiBjIGFuZCBzdWJzY3JpcHQgaW4gaS4KLSovCi1pbnQKLXBhcnNldmFyKHMsYyxpKSBj aGFyICpzOyBpbnQgKmMsICppOyB7Ci0gICAgY2hhciAqcDsKLSAgICBpbnQgeCx5LHo7Ci0KLSAg ICBwID0gczsKLSAgICBpZiAoKnMgPT0gQ01EUSkgcysrOyAgICAgICAgICAgICAgICAvKiBQb2lu dCBhZnRlciBiYWNrc2xhc2ggKi8KLQotICAgIGlmICgqcyAhPSAnJScgJiYgKnMgIT0gJyYnKSB7 ICAgICAgIC8qIE1ha2Ugc3VyZSBpdCdzICUgb3IgJiAqLwotICAgICAgICBwcmludGYoIj9Ob3Qg YSB2YXJpYWJsZSBuYW1lIC0gJXNcbiIscCk7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQot ICAgIGlmICgoaW50KXN0cmxlbihzKSA8IDIpIHsKLSAgICAgICAgcHJpbnRmKCI/SW5jb21wbGV0 ZSB2YXJpYWJsZSBuYW1lIC0gJXNcbiIscCk7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQot ICAgIGlmICgqcyA9PSAnJScgJiYgKihzKzIpICE9ICdcMCcpIHsKLSAgICAgICAgcHJpbnRmKCI/ T25seSBvbmUgY2hhcmFjdGVyIGFmdGVyICclJScgaW4gdmFyaWFibGUgbmFtZSwgcGxlYXNlXG4i KTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKCpzID09ICcmJyAmJiAqKHMr MikgIT0gJ1snKSB7Ci0gICAgICAgIHByaW50ZigiP0FycmF5IHN1YnNjcmlwdCBleHBlY3RlZCAt ICVzXG4iLHApOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAoKnMgPT0gJyUn KSB7ICAgICAgICAgICAgICAgICAgICAvKiBTaW1wbGUgdmFyaWFibGUuICovCi0gICAgICAgIHkg PSAqKHMrMSk7ICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHZhcmlhYmxlIElEIGxldHRlci9j aGFyICovCi0gICAgICAgIGlmIChpc3VwcGVyKHkpKSB5IC09ICgnYSctJ0EnKTsgLyogQ29udmVy dCB1cHBlciB0byBsb3dlciBjYXNlICovCi0gICAgICAgICpjID0geTsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU2V0IHRoZSByZXR1cm4gdmFsdWVzLiAqLwotICAgICAgICAqaSA9IC0xOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGFycmF5IHN1YnNjcmlwdC4gKi8KLSAgICAgICAg cmV0dXJuKDEpOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gMSA9IHNpbXBsZSB2YXJp YWJsZSAqLwotICAgIH0KLSAgICBpZiAoKnMgPT0gJyYnKSB7ICAgICAgICAgICAgICAgICAgICAv KiBBcnJheSByZWZlcmVuY2UuICovCi0gICAgICAgIHkgPSBhcnJheW5hbShzLCZ4LCZ6KTsgICAg ICAgICAgLyogR28gcGFyc2UgaXQuICovCi0gICAgICAgIGRlYnVnKEYxMDEsInBhcnNldmFyIGFy cmF5bmFtIiwiIix5KTsKLSAgICAgICAgaWYgKCh5KSA8IDApIHsKLSAgICAgICAgICAgIGlmICh5 ID09IC0yKQotICAgICAgICAgICAgICByZXR1cm4ocHVzaGFycmF5KHgseikpOwotICAgICAgICAg ICAgaWYgKHkgIT0gLTkpCi0gICAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgYXJyYXkgcmVm ZXJlbmNlIC0gJXNcbiIscCk7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0g ICAgICAgIGlmIChjaGthcnJheSh4LHopIDwgMCkgeyAgICAgICAgLyogQ2hlY2sgaWYgZGVjbGFy ZWQsIGV0Yy4gKi8KLSAgICAgICAgICAgIHByaW50ZigiP0FycmF5IG5vdCBkZWNsYXJlZCBvciBz dWJzY3JpcHQgb3V0IG9mIHJhbmdlXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAg ICAgIH0KLSAgICAgICAgKmMgPSB4OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4g YXJyYXkgbGV0dGVyICovCi0gICAgICAgICppID0gejsgICAgICAgICAgICAgICAgICAgICAgICAg LyogYW5kIHN1YnNjcmlwdC4gKi8KLSAgICAgICAgcmV0dXJuKDIpOwotICAgIH0KLSAgICByZXR1 cm4oLTIpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb25lIG9mIHRoZSBhYm92ZS4gKi8K LX0KLQotCi0jZGVmaW5lIFZBTE4gMzIKLQotLyogR2V0IHRoZSBudW1lcmljIHZhbHVlIG9mIGEg dmFyaWFibGUgKi8KLS8qCi0gIENhbGwgd2l0aCBwb2ludGVyIHRvIHZhcmlhYmxlIG5hbWUsIHBv aW50ZXIgdG8gaW50IGZvciByZXR1cm4gdmFsdWUuCi0gIFJldHVybnM6Ci0gICAgMCBvbiBzdWNj ZXNzIHdpdGggc2Vjb25kIGFyZyBjb250YWluaW5nIHRoZSB2YWx1ZS4KLSAgIC0xIG9uIGZhaWx1 cmUgKGJhZCB2YXJpYWJsZSBzeW50YXgsIHZhcmlhYmxlIG5vdCBkZWZpbmVkIG9yIG5vdCBudW1l cmljKS4KLSovCi1pbnQKLXZhcnZhbChzLHYpIGNoYXIgKnM7IENLX09GRl9UICp2OyB7Ci0gICAg Y2hhciB2YWxidWZbVkFMTisxXTsgICAgICAgICAgICAgICAgLyogcyBpcyBwb2ludGVyIHRvIHZh cmlhYmxlIG5hbWUgKi8KLSAgICBjaGFyIG5hbWVbMjU2XTsKLSAgICBjaGFyICpwOwotICAgIGlu dCB5OwotCi0gICAgaWYgKCpzICE9IENNRFEpIHsgICAgICAgICAgICAgICAgICAgLyogSGFuZGxl IG1hY3JvIG5hbWVzIHRvbyAqLwotICAgICAgICBja21ha21zZyhuYW1lLDI1NiwiXFxtKCIscywi KSIsTlVMTCk7Ci0gICAgICAgIHMgPSBuYW1lOwotICAgIH0KLSAgICBwID0gdmFsYnVmOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBFeHBhbmQgdmFyaWFibGUgaW50byB2YWxidWYuICovCi0g ICAgeSA9IFZBTE47Ci0gICAgaWYgKHp6c3RyaW5nKHMsJnAsJnkpIDwgMCkgcmV0dXJuKC0xKTsK LSAgICBwID0gdmFsYnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdmFs dWUgaXMgbnVtZXJpYyAgKi8KLSAgICBpZiAoISpwKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBCZSBuaWNlIC0tIGxldCBhbiB1bmRlZmluZWQgKi8KLSAgICAgICAgdmFsYnVmWzBdID0g JzAnOyAgICAgICAgICAgICAgICAvKiB2YXJpYWJsZSBiZSB0cmVhdGVkIGFzIDAuICAgKi8KLSAg ICAgICAgdmFsYnVmWzFdID0gTlVMOwotICAgIH0KLSAgICBpZiAoY2hrbnVtKHApKSB7ICAgICAg ICAgICAgICAgICAgICAvKiBDb252ZXJ0IG51bWVyaWMgc3RyaW5nIHRvIGludCAqLwotICAgICAg ICAqdiA9IGNrYXRvZnMocCk7CQkvKiBPSyAqLwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE5vdCBPSyAqLwotICAgICAgICBwID0gZXZhbGEocCk7ICAgICAgICAg ICAgICAgICAgIC8qIE1heWJlIGl0J3MgYW4gZXhwcmVzc2lvbiAqLwotICAgICAgICBpZiAoIWNo a251bShwKSkgICAgICAgICAgICAgICAgIC8qIERpZCBpdCBldmFsdWF0ZT8gKi8KLSAgICAgICAg ICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAvKiBObywgZmFpbHVyZS4gKi8KLSAgICAg ICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBZZXMsICovCi0gICAgICAgICAg KnYgPSBja2F0b2ZzKHApOwkJLyogc3VjY2VzcyAqLwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19 Ci0KLS8qIEluY3JlbWVudCBvciBkZWNyZW1lbnQgYSB2YXJpYWJsZSAqLwotLyogUmV0dXJucyAt MSBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MgKi8KLQotaW50Ci1pbmN2YXIocyx4LHopIGNoYXIg KnM7IENLX09GRl9UIHg7IGludCB6OyB7ICAvKiBJbmNyZW1lbnQgYSBudW1lcmljIHZhcmlhYmxl ICovCi0gICAgQ0tfT0ZGX1QgbjsJCQkJLyogcyBpcyBwb2ludGVyIHRvIHZhcmlhYmxlIG5hbWUg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4IGlzIGFtb3Vu dCB0byBpbmNyZW1lbnQgYnkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB6ICE9IDAgbWVhbnMgYWRkICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogeiA9IDAgbWVhbnMgc3VidHJhY3QgKi8KLSAgICBpZiAodmFydmFsKHMs Jm4pIDwgMCkgICAgICAgICAgICAgICAvKiBDb252ZXJ0IG51bWVyaWMgc3RyaW5nIHRvIGludCAq LwotICAgICAgcmV0dXJuKC0xKTsKLSAgICBpZiAoeikgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBJbmNyZW1lbnQgaXQgYnkgdGhlIGdpdmVuIGFtb3VudCAqLwotICAgICAgbiArPSB4 OwotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9yIGRlY3JlbWVu dCBhcyByZXF1ZXN0ZWQuICovCi0gICAgICBuIC09IHg7Ci0gICAgYWRkbWFjKHMsY2tmc3RvYShu KSk7CQkvKiBSZXBsYWNlIG9sZCB2YXJpYWJsZSAqLwotICAgIHJldHVybigwKTsKLX0KLQotLyog RCBPIEQgTyAgLS0gIERvIGEgbWFjcm8gKi8KLQotLyoKLSAgQ2FsbCB3aXRoIHggPSBtYWNybyB0 YWJsZSBpbmRleCwgcyA9IHBvaW50ZXIgdG8gYXJndW1lbnRzLgotICBSZXR1cm5zIDAgb24gZmFp bHVyZSwgMSBvbiBzdWNjZXNzLgotKi8KLQotaW50Ci1kb2RvKHgscyxmbGFncykgaW50IHg7IGNo YXIgKnM7IGludCBmbGFnczsgewotICAgIGludCB5OwotICAgIGV4dGVybiBpbnQgdHJhX2FzZywg dHJhX2NtZDsgaW50IHRyYV90bXA7Ci0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICBl eHRlcm4gaW50IHRlcm1faW87Ci0gICAgaW50IHRlcm1faW9fc2F2ID0gdGVybV9pbzsKLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSAgICBpZiAoeCA8IDApICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBJdCBjYW4gaGFwcGVuISAqLwotICAgICAgcmV0dXJuKC0x KTsKLQotICAgIHRyYV90bXAgPSB0cmFfYXNnOwotCi0gICAgaWYgKCsrbWFjbHZsID49IE1BQ0xF VkVMKSB7ICAgICAgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgc3RvcmFnZSAqLwotICAgICAgICBk ZWJ1ZyhGMTAxLCJkb2RvIG1hY2x2bCB0b28gZGVlcCIsIiIsbWFjbHZsKTsKLSAgICAgICAgLS1t YWNsdmw7Ci0gICAgICAgIHByaW50ZigiTWFjcm9zIG5lc3RlZCB0b28gZGVlcGx5XG4iKTsKLSAg ICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBtYWNwW21hY2x2bF0gPSBtYWN0YWJbeF0ubXZh bDsgICAgICAvKiBQb2ludCB0byB0aGUgbWFjcm8gYm9keSAqLwotICAgIG1hY3hbbWFjbHZsXSA9 IG1hY3RhYlt4XS5tdmFsOyAgICAgIC8qIFJlbWVtYmVyIHdoZXJlIHRoZSBiZWdpbm5pbmcgaXMg Ki8KLQotI2lmZGVmIENPTU1FTlQKLSAgICBtYWtlc3RyKCYobV9saW5lW21hY2x2bF0pLHMpOyAg ICAgICAvKiBFbnRpcmUgYXJnIHN0cmluZyBmb3IgIlwlKiIgKi8KLSNlbmRpZiAvKiBDT01NRU5U ICovCi0KLSAgICBjbWRsdmwrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnRlcmlu ZyBhIG5ldyBjb21tYW5kIGxldmVsICovCi0gICAgaWYgKGNtZGx2bCA+PSBDTURTVEtMKSB7ICAg ICAgICAgICAgLyogVG9vIG1hbnkgbWFjcm9zICsgVEFLRSBmaWxlcz8gKi8KLSAgICAgICAgZGVi dWcoRjEwMSwiZG9kbyBjbWRsdmwgdG9vIGRlZXAiLCIiLGNtZGx2bCk7Ci0gICAgICAgIGNtZGx2 bC0tOwotICAgICAgICBwcmludGYoIj9UQUtFIGZpbGVzIGFuZCBETyBjb21tYW5kcyBuZXN0ZWQg dG9vIGRlZXBseVxuIik7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jaWZkZWYgREVCVUcK LSAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsIkNNRCArTSIsbWFjdGFiW3hd Lmt3ZCxjbWRsdmwpOwotICAgICAgICBkZWJ1ZyhGMDEwLCJDTUQgLT4iLHMsMCk7Ci0gICAgfQot I2VuZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiBWTVMKLSAgICBjb25yZXMoKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTbyBDdHJsLUMsIGV0Yywgd2lsbCB3b3JrLiAqLwotI2VuZGlm IC8qIFZNUyAqLwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgdGVybV9pbyA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSB0ZXJtaW5hbCBlbXVsYXRvciBJL08g Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgaWZjbWRbY21k bHZsXSA9IDA7Ci0gICAgaWZ0ZXN0W2NtZGx2bF0gPSAwOwotICAgIGNvdW50W2NtZGx2bF0gPSBj b3VudFtjbWRsdmwtMV07ICAgIC8qIEluaGVyaXQgQ09VTlQgZnJvbSBwcmV2aW91cyBsZXZlbCAq LwotICAgIGludGltZVtjbWRsdmxdID0gaW50aW1lW2NtZGx2bC0xXTsgIC8qIEluaGVyaXQgcHJl dmlvdXMgSU5QVVQgVElNRU9VVCAqLwotICAgIGlucGNhc1tjbWRsdmxdID0gaW5wY2FzW2NtZGx2 bC0xXTsgIC8qICAgYW5kIElOUFVUIENBU0UgKi8KLSAgICB0YWtlcnJbY21kbHZsXSA9IHRha2Vy cltjbWRsdmwtMV07ICAvKiAgIGFuZCBUQUtFIEVSUk9SICovCi0gICAgbWVycm9yW2NtZGx2bF0g PSBtZXJyb3JbY21kbHZsLTFdOyAgLyogICBhbmQgTUFDUk8gRVJST1IgKi8KLSAgICB4cXVpZXRb Y21kbHZsXSA9IHF1aWV0OwotICAgIHh2YXJldltjbWRsdmxdID0gdmFyZXZhbDsKLSAgICB4Y21k c3JjID0gQ01EX01EOwotICAgIGNtZHN0a1tjbWRsdmxdLnNyYyA9IENNRF9NRDsgICAgICAgIC8q IFNheSB3ZSdyZSBpbiBhIG1hY3JvICovCi0gICAgY21kc3RrW2NtZGx2bF0ubHZsID0gbWFjbHZs OyAgICAgICAgLyogYW5kIHJlbWVtYmVyIHRoZSBtYWNybyBsZXZlbCAqLwotICAgIGNtZHN0a1tj bWRsdmxdLmNjZmxncyA9IGZsYWdzICYgfkNGX0lNQUM7IC8qIFNldCBmbGFncyAqLwotCi0gICAg LyogSW5pdGlhbGl6ZSByZXR1cm4gdmFsdWUgZXhjZXB0IGluIEZPUiwgV0hJTEUsIElGLCBhbmQg U1dJVENIIG1hY3JvcyAqLwotCi0gICAgaWYgKCEoZmxhZ3MgJiBDRl9JTUFDKSAmJiBtcnZhbFtt YWNsdmxdKSB7Ci0gICAgICAgIGZyZWUobXJ2YWxbbWFjbHZsXSk7Ci0gICAgICAgIG1ydmFsW21h Y2x2bF0gPSBOVUxMOwotICAgIH0KLQotICAgIC8qIENsZWFyIG9sZCAlMC4uJTkgYXJndW1lbnRz ICovCi0KLSAgICBhZGRtYWMoIiUwIixtYWN0YWJbeF0ua3dkKTsgICAgICAgICAvKiBEZWZpbmUg JTAgPSBuYW1lIG9mIG1hY3JvICovCi0gICAgbWFrZXN0cigmKG1feGFyZ1ttYWNsdmxdWzBdKSxt YWN0YWJbeF0ua3dkKTsKLSAgICB2YXJuYW1bMF0gPSAnJSc7Ci0gICAgdmFybmFtWzJdID0gJ1ww JzsKLSAgICB0cmFfYXNnID0gMDsKLSAgICBmb3IgKHkgPSAxOyB5IDwgMTA7IHkrKykgeyAgICAg ICAgICAvKiBDbGVhciBhcmdzICUxLi4lOSAqLwotICAgICAgICBpZiAobV9hcmdbbWFjbHZsXVt5 XSkgeyAgICAgICAgIC8qIERvbid0IGNhbGwgZGVsbWFjKCkgdW5sZXNzICovCi0gICAgICAgICAg ICB2YXJuYW1bMV0gPSAoY2hhcikgKHkgKyAnMCcpOyAvKiB3ZSBoYXZlIHRvLi4uICovCi0gICAg ICAgICAgICBkZWxtYWModmFybmFtLDApOwotICAgICAgICB9Ci0gICAgfQotICAgIHRyYV9hc2cg PSB0cmFfdG1wOwotCi0vKiBBc3NpZ24gdGhlIG5ldyBhcmdzIG9uZSB3b3JkIHBlciBhcmcsIGFs bG93aW5nIGJyYWNlcyB0byBncm91cCB3b3JkcyAqLwotCi0gICAgeHdvcmRzKHMsTUFYQVJHTElT VCxOVUxMLDApOwotCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICB0ZXJtX2lvID0g dGVybV9pb19zYXY7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAg IGlmICh0cmFfY21kKQotICAgICAgcHJpbnRmKCJbJWRdICtNOiBcIiVzXCJcbiIsY21kbHZsLG1h Y3RhYlt4XS5rd2QpOwotICAgIHJldHVybigxKTsKLX0KLQotLyogSW5zZXJ0ICJsaXRlcmFsIiBx dW90ZSBhcm91bmQgZWFjaCBjb21tYS1zZXBhcmF0ZWQgY29tbWFuZCB0byBwcmV2ZW50ICovCi0v KiBpdHMgcHJlbWF0dXJlIGV4cGFuc2lvbi4gIE9ubHkgZG8gdGhpcyBpZiBvYmplY3QgY29tbWFu ZCBpcyBzdXJyb3VuZGVkICovCi0vKiBieSBicmFjZXMuICovCi0KLXN0YXRpYyBjaGFyKiBmbGl0 ID0gIlxcZmxpdCgiOwotCi1pbnQKLWxpdGNtZChzcmMsZGVzdCxuKSBjaGFyICoqc3JjLCAqKmRl c3Q7IGludCBuOyB7Ci0gICAgaW50IGJjID0gMCwgcHAgPSAwOwotICAgIGNoYXIgYywgKnMsICps cCwgKnNzOwotCi0gICAgcyA9ICpzcmM7Ci0gICAgbHAgPSAqZGVzdDsKLQotICAgIGRlYnVnKEYw MTAsImxpdGNtZCIscywwKTsKLQotICAgIHdoaWxlICgqcyA9PSBTUCkgcysrOyAgICAgICAgICAg ICAgIC8qIFN0cmlwIGV4dHJhIGxlYWRpbmcgc3BhY2VzICovCi0KLSAgICBpZiAoKnMgPT0gJ3sn KSB7ICAgICAgICAgICAgICAgICAgICAvKiBTdGFydHMgd2l0aCBicmFjZSAqLwotICAgICAgICBw cCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcmVuIGNvdW50ZXIgKi8KLSAgICAg ICAgYmMgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBsZWFkaW5nIGJyYWNl ICovCi0gICAgICAgICpscCsrID0gKnMrKzsgICAgICAgICAgICAgICAgICAgLyogQ29weSBpdCAq LwotICAgICAgICBpZiAoLS1uIDwgMSkgcmV0dXJuKC0xKTsgICAgICAgIC8qIENoZWNrIHNwYWNl ICovCi0gICAgICAgIHdoaWxlICgqcyA9PSBTUCkgcysrOyAgICAgICAgICAgLyogU3RyaXAgaW50 ZXJpb3IgbGVhZGluZyBzcGFjZXMgKi8KLSAgICAgICAgc3MgPSBmbGl0OyAgICAgICAgICAgICAg ICAgICAgICAvKiBQb2ludCB0byAiXGZsaXQoIiAqLwotICAgICAgICB3aGlsZSAoKCpscCsrID0g KnNzKyspKSAgICAgICAgIC8qIENvcHkgaXQgKi8KLSAgICAgICAgICBpZiAoLS1uIDwgMSkgICAg ICAgICAgICAgICAgICAvKiBhbmQgY2hlY2sgc3BhY2UgKi8KLSAgICAgICAgICAgIHJldHVybigt MSk7Ci0gICAgICAgIGxwLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBv dmVyIG51bGwgKi8KLQotICAgICAgICB3aGlsZSAoKnMpIHsgICAgICAgICAgICAgICAgICAgIC8q IEdvIHRocnUgcmVzdCBvZiB0ZXh0ICovCi0gICAgICAgICAgICBjID0gKnM7Ci0gICAgICAgICAg ICBpZiAoYyA9PSAneycpIGJjKys7ICAgICAgICAgLyogQ291bnQgYnJhY2tldHMgKi8KLSAgICAg ICAgICAgIGlmIChjID09ICcoJykgcHArKzsgICAgICAgICAvKiBhbmQgcGFyZW5zICovCi0gICAg ICAgICAgICBpZiAoYyA9PSAnKScpIHsgICAgICAgICAgICAgLyogUmlnaHQgcGFyZW50aGVzaXMu ICovCi0gICAgICAgICAgICAgICAgcHAtLTsgICAgICAgICAgICAgICAgICAgLyogQ291bnQgaXQu ICovCi0gICAgICAgICAgICAgICAgaWYgKHBwIDwgMCkgeyAgICAgICAgICAgLyogQW4gdW5iYWxh bmNlZCByaWdodCBwYXJlbi4uLiAqLwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFRoZSBwcm9ibGVt IGhlcmUgaXMgdGhhdCAiXHsiIGFwcGVhcnMgdG8gYmUgYSBxdW90ZWQgYnJhY2UgYW5kIHRoZXJl Zm9yZQotICBpc24ndCBjb3VudGVkOyB0aGVuIHRoZSAifSIgbWF0Y2hlcyBhbiBlYXJsaWVyIG9w ZW5pbmcgYnJhY2UsIGNhdXNpbmcKLSAgKGUuZy4pIHRydW5jYXRpb24gb2YgbWFjcm9zIGJ5IGdl dG5jbSgpLgotKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG4gPCA1KSAgICAgICAgICAvKiBP dXQgb2Ygc3BhY2UgaW4gZGVzdCBidWZmZXI/ICovCi0gICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKC0xKTsgICAgICAgLyogSWYgc28sIGdpdmUgdXAuICovCi0gICAgICAgICAgICAgICAgICAg ICpscCsrID0gQ01EUTsgICAgICAgLyogTXVzdCBiZSBxdW90ZWQgdG8gcHJldmVudCAqLwotICAg ICAgICAgICAgICAgICAgICAqbHArKyA9ICd9JzsgICAgICAgIC8qIHByZW1hdHVyZSB0ZXJtaW5h dGlvbiBvZiAqLwotICAgICAgICAgICAgICAgICAgICAqbHArKyA9ICc0JzsgICAgICAgIC8qIFxm bGl0KC4uLikgKi8KLSAgICAgICAgICAgICAgICAgICAgKmxwKysgPSAnMSc7Ci0gICAgICAgICAg ICAgICAgICAgICpscCsrID0gJ30nOwotICAgICAgICAgICAgICAgICAgICBuIC09IDU7Ci0jZWxz ZQotLyogSGVyZSB3ZSByZWx5IG9uIHRoZSBmYWN0IHRoZSBcbm5uIG5ldmVyIHRha2VzIG1vcmUg dGhhbiAzIGRpZ2l0cyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAobiA8IDQpICAgICAgICAg IC8qIE91dCBvZiBzcGFjZSBpbiBkZXN0IGJ1ZmZlcj8gKi8KLSAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4oLTEpOyAgICAgICAvKiBJZiBzbywgZ2l2ZSB1cC4gKi8KLSAgICAgICAgICAgICAg ICAgICAgKmxwKysgPSBDTURROyAgICAgICAvKiBNdXN0IGJlIHF1b3RlZCB0byBwcmV2ZW50ICov Ci0gICAgICAgICAgICAgICAgICAgICpscCsrID0gJzAnOyAgICAgICAgLyogcHJlbWF0dXJlIHRl cm1pbmF0aW9uIG9mICovCi0gICAgICAgICAgICAgICAgICAgICpscCsrID0gJzQnOyAgICAgICAg LyogXGZsaXQoLi4uKSAqLwotICAgICAgICAgICAgICAgICAgICAqbHArKyA9ICcxJzsKLSAgICAg ICAgICAgICAgICAgICAgbiAtPSA0OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAg ICAgICAgICAgcHArKzsgICAgICAgICAgICAgICAvKiBVbmNvdW50IGl0LiAqLwotICAgICAgICAg ICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjID09ICd9JykgeyAgICAg ICAgICAgICAvKiBDbG9zaW5nIGJyYWNlLiAqLwotICAgICAgICAgICAgICAgIGlmICgtLWJjID09 IDApIHsgICAgICAgIC8qIEZpbmFsIG9uZT8gKi8KLSAgICAgICAgICAgICAgICAgICAgKmxwKysg PSAnKSc7ICAgICAgICAvKiBBZGQgY2xvc2luZyBwYXJlbiBmb3IgIlxmbGl0KCkiICovCi0gICAg ICAgICAgICAgICAgICAgIGlmICgtLW4gPCAxKSByZXR1cm4oLTEpOwotICAgICAgICAgICAgICAg ICAgICAqbHArKyA9IGM7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgtLW4gPCAxKSByZXR1cm4o LTEpOwotICAgICAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpscCsrID0g YzsgICAgICAgICAgICAgICAgICAvKiBHZW5lcmFsIGNhc2UgKi8KLSAgICAgICAgICAgIGlmICgt LW4gPCAxKSByZXR1cm4oLTEpOwotICAgICAgICAgICAgcysrOwotICAgICAgICB9Ci0gICAgICAg ICpscCA9IE5VTDsKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBO byBicmFja2V0cyBhcm91bmQsICovCi0gICAgICAgIHdoaWxlICgoKmxwKysgPSAqcysrKSkgICAg ICAgICAgLyoganVzdCBjb3B5LiAqLwotICAgICAgICAgIGlmICgtLW4gPCAxKQotICAgICAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICAgICAgbHAtLTsKLSAgICB9Ci0gICAgKnNyYyA9IHM7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHVwZGF0ZWQgc291cmNlICovCi0gICAgKmRl c3QgPSBscDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGRlc3RpbmF0aW9uIHBvaW50 ZXJzICovCi0gICAgaWYgKGJjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmFpbCBp ZiBicmFjZXMgdW5iYWxhbmNlZCAqLwotICAgICAgcmV0dXJuKC0xKTsKLSAgICBlbHNlICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2Ugc3VjY2VlZC4gKi8KLSAgICAg IHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0vKiBGdW5jdGlvbnMgbW92ZWQg aGVyZSBmcm9tIGNrdXVzci5jIHRvIGV2ZW4gb3V0IHRoZSBtb2R1bGUgc2l6ZXMuLi4gKi8KLQot LyoKLSAgQnJlYWtzIHVwIHN0cmluZyBzIC0tIElOIFBMQUNFISAtLSBpbnRvIGEgbGlzdCBvZiB1 cCB0byBtYXggd29yZHMuCi0gIFBvaW50ZXJzIHRvIGVhY2ggd29yZCBnbyBpbnRvIHRoZSBhcnJh eSBsaXN0W10uCi0gIG1heCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygd29yZHMgKHBvaW50ZXJz KS4KLSAgSWYgbGlzdCBpcyBOVUxMLCB0aGVuIHRoZXkgYXJlIGFkZGVkIHRvIHRoZSBtYWNybyB0 YWJsZS4KLSAgZmxhZyA9IDAgbWVhbnMgdGhlIGxhc3QgZmllbGQgaXMgdG8gYmUgb25lIHdvcmQs IGxpa2UgYWxsIHRoZSBvdGhlciBmaWVsZHMsCi0gICAgICAgICBzbyBhbnl0aGluZyBhZnRlciBp dCBpcyBkaXNjYXJkZWQuCi0gIGZsYWcgPSAxIG1lYW5zIHRoZSBsYXN0IGZpZWxkIGV4dGVuZHMg dG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBldmVuIGlmCi0gICAgICAgICB0aGVyZSBhcmUgbG90 cyBvZiB3b3JkcyBsZWZ0LCBzbyB0aGUgbGFzdCBmaWVsZCBjb250YWlucyB0aGUKLSAgICAgICAg IHJlbWFpbmRlciBvZiB0aGUgc3RyaW5nLgotKi8KLVZPSUQKLXh3b3JkcyhzLG1heCxsaXN0LGZs YWcpIGNoYXIgKnM7IGludCBtYXg7IGNoYXIgKmxpc3RbXTsgaW50IGZsYWc7IHsKLSAgICBjaGFy ICpwOwotICAgIGludCBiLCBpLCBrLCBxLCB5LCB6OwotI2lmbmRlZiBOT1NQTAotICAgIGludCBt YWNybzsKLSAgICBtYWNybyA9IChsaXN0ID09IE5VTEwpOwotICAgIGRlYnVnKEYwMTAsInh3b3Jk cyIscywwKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgWFdPUkRTREVCVUcKLSAgICBw cmludGYoIlhXT1JEUyBzdHJpbmc9JXNcbiIscyk7Ci0gICAgcHJpbnRmKCJYV09SRFMgbWF4PSVk XG4iLG1heCk7Ci0jZW5kaWYgLyogWFdPUkRTREVCVUcgKi8KLSAgICBwID0gczsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGJlZ2lubmluZyBvZiBzdHJpbmcgKi8K LSAgICBxID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBkb3Vi bGVxdW90ZSByZW1vdmFsICovCi0gICAgYiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRmxhZyBmb3Igb3V0ZXIgYnJhY2UgcmVtb3ZhbCAqLwotICAgIGsgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGluLXdvcmQgKi8KLSAgICB5ID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCcmFjZSBuZXN0aW5nIGxldmVsICovCi0g ICAgeiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIldvcmQiIGNvdW50ZXIs IDAgdGhydSBtYXggKi8KLQotICAgIGlmIChsaXN0KQotICAgICAgZm9yIChpID0gMDsgaSA8PSBt YXg7IGkrKykgICAgICAgIC8qIEluaXRpYWxpemUgcG9pbnRlcnMgKi8KLSAgICAgICAgbGlzdFtp XSA9IE5VTEw7Ci0KLSAgICBpZiAoZmxhZykgbWF4LS07Ci0KLSAgICB3aGlsZSAoMSkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBHbyB0aHJ1IHdvcmQgbGlzdCAqLwotICAgICAgICBpZiAo IXMgfHwgKCpzID09ICdcMCcpKSB7ICAgICAgIC8qIE5vIG1vcmUgY2hhcmFjdGVycz8gKi8KLSAg ICAgICAgICAgIGlmIChrICE9IDApIHsgICAgICAgICAgICAgICAvKiBXYXMgSSBpbiBhIHdvcmQ/ ICovCi0gICAgICAgICAgICAgICAgaWYgKHogPT0gbWF4KSBicmVhazsgICAgLyogWWVzLCBvbmx5 IGdvIHVwIHRvIG1heC4gKi8KLSAgICAgICAgICAgICAgICB6Kys7ICAgICAgICAgICAgICAgICAg ICAvKiBDb3VudCB0aGlzIHdvcmQuICovCi0jaWZkZWYgWFdPUkRTREVCVUcKLSAgICAgICAgICAg ICAgICBwcmludGYoIjEgeisrID0gJWRcbiIsIHopOwotI2VuZGlmIC8qIFhXT1JEU0RFQlVHICov Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICAgICAgaWYgKG1hY3JvKSB7ICAgICAgICAgICAg LyogRG9pbmcgbWFjcm8gYXJncyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoeiA8IDEwKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJuYW1bMV0gPSAoY2hhcikgKHogKyAnMCcpOyAv KiBBc3NpZ24gbGFzdCBhcmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZG1hYyh2YXJu YW0scCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHog PD0gbWF4KSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1h Y2x2bCA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGFkZG1hYyh2YXJuYW0scCk7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYobV94YXJnW21hY2x2bF1bel0pLHApOwotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAg ICAgLyogTm90IGRvaW5nIG1hY3JvIGFyZ3MgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAg ICAgICAgICAgICAgICBsaXN0W3pdID0gcDsgICAgICAgIC8qIEFzc2lnbiBwb2ludGVyLiAqLwot I2lmZGVmIFhXT1JEU0RFQlVHCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiWzFdTElTVFsl ZF09XCIlc1wiXG4iLHosbGlzdFt6XSk7Ci0jZW5kaWYgLyogWFdPUkRTREVCVUcgKi8KLSNpZm5k ZWYgTk9TUEwKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAg ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBBbmQgZ2V0IG91dC4gKi8KLSAgICAg ICAgICAgIH0gZWxzZSBicmVhazsgICAgICAgICAgICAgICAvKiBXYXMgbm90IGluIGEgd29yZCAq LwotICAgICAgICB9Ci0gICAgICAgIGlmIChrID09IDAgJiYgKCpzID09IFNQIHx8ICpzID09IEhU KSkgeyAvKiBFYXQgbGVhZGluZyBibGFua3MgKi8KLSAgICAgICAgICAgIHMrKzsKLSAgICAgICAg ICAgIGNvbnRpbnVlOwotICAgICAgICB9IGVsc2UgaWYgKHEgPT0gMCAmJiAqcyA9PSAneycpIHsg LyogQW4gb3BlbmluZyBicmFjZSAqLwotICAgICAgICAgICAgaWYgKGsgPT0gMCAmJiB5ID09IDAp IHsgICAgIC8qIElmIGxlYWRpbmcgYnJhY2UgKi8KLSAgICAgICAgICAgICAgICBwID0gcysxOyAg ICAgICAgICAgICAgICAvKiBwb2ludCBwYXN0IGl0ICovCi0gICAgICAgICAgICAgICAgYiA9IDE7 ICAgICAgICAgICAgICAgICAgLyogYW5kIGZsYWcgdGhhdCB3ZSBkaWQgdGhpcyAqLwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgayA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcg dGhhdCB3ZSdyZSBpbiBhIHdvcmQgKi8KLSAgICAgICAgICAgIHkrKzsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDb3VudCB0aGUgYnJhY2UuICovCi0gICAgICAgIH0gZWxzZSBpZiAocSA9PSAw ICYmICpzID09ICd9JykgeyAvKiBBIGNsb3NpbmcgYnJhY2UuICovCi0gICAgICAgICAgICB5LS07 ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgaXQuICovCi0gICAgICAgICAgICBpZiAo eSA8PSAwICYmIGIgIT0gMCkgeyAgICAgLyogSWYgaXQgbWF0Y2hlcyB0aGUgbGVhZGluZyBicmFj ZSAqLwotICAgICAgICAgICAgICAgIGNoYXIgYzsKLSAgICAgICAgICAgICAgICBjID0gKihzKzEp OwotICAgICAgICAgICAgICAgIGlmICghYyB8fCBjID09IFNQIHx8IGMgPT0gSFQpIHsgLyogYXQg RU9MIG9yIGZvbGxvd2VkIGJ5IFNQICovCi0gICAgICAgICAgICAgICAgICAgICpzID0gU1A7ICAg ICAgICAgICAgLyogY2hhbmdlIGl0IHRvIGEgc3BhY2UgKi8KLSAgICAgICAgICAgICAgICAgICAg YiA9IDA7ICAgICAgICAgICAgICAvKiBhbmQgd2UncmUgbm90IGluIGJyYWNlcyBhbnkgbW9yZSAq LwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNpZmRlZiBET1VCTEVRVU9USU5H Ci0gICAgICAgIC8qIE9wZW5pbmcgZG91YmxlcXVvdGUgKi8KLSAgICAgICAgfSBlbHNlIGlmIChr ID09IDAgJiYgYiA9PSAwICYmICpzID09ICciJyAmJiBkYmxxdW8pIHsKLSAgICAgICAgICAgIHkr KzsKLSAgICAgICAgICAgIHAgPSBzKzE7ICAgICAgICAgICAgICAgICAgICAvKiBwb2ludCBwYXN0 IGl0ICovCi0gICAgICAgICAgICBxID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGZs YWcgdGhhdCB3ZSBkaWQgdGhpcyAqLwotICAgICAgICAgICAgayA9IDE7ICAgICAgICAgICAgICAg ICAgICAgIC8qIEZsYWcgdGhhdCB3ZSdyZSBpbiBhIHdvcmQgKi8KLSAgICAgICAgLyogQ2xvc2lu ZyBkb3VibGUgcXVvdGUgKi8KLSAgICAgICAgfSBlbHNlIGlmIChxID4gMCAmJiBrID4gMCAmJiBi ID09IDAgJiYgKnMgPT0gJyInICYmIGRibHF1bykgewotICAgICAgICAgICAgY2hhciBjOwotICAg ICAgICAgICAgYyA9ICoocysxKTsKLSAgICAgICAgICAgIGlmICghYyB8fCBjID09IFNQIHx8IGMg PT0gSFQpIHsgLyogYXQgRU9MIG9yIGZvbGxvd2VkIGJ5IFNQICovCi0gICAgICAgICAgICAgICAg eS0tOwotICAgICAgICAgICAgICAgICpzID0gU1A7ICAgICAgICAgICAgICAgIC8qIGNoYW5nZSBp dCB0byBhIHNwYWNlICovCi0gICAgICAgICAgICAgICAgcSA9IDA7ICAgICAgICAgICAgICAgICAg LyogYW5kIHdlJ3JlIG5vdCBpbiBxdW90ZXMgYW55IG1vcmUgKi8KLSAgICAgICAgICAgIH0KLSNl bmRpZiAvKiBET1VCTEVRVU9USU5HICovCi0KLSAgICAgICAgfSBlbHNlIGlmICgqcyAhPSBTUCAm JiAqcyAhPSBIVCkgeyAvKiBOb25zcGFjZSBtZWFucyB3ZSdyZSBpbiBhIHdvcmQgKi8KLSAgICAg ICAgICAgIGlmIChrID09IDApIHsgICAgICAgICAgICAgICAvKiBJZiB3ZSB3ZXJlbid0IGluIGEg d29yZCBiZWZvcmUsICovCi0gICAgICAgICAgICAgICAgcCA9IHM7ICAgICAgICAgICAgICAgICAg LyogTWFyayB0aGUgYmVnaW5uaW5nICovCi0gICAgICAgICAgICAgICAgaWYgKGZsYWcgJiYgeiA9 PSBtYXgpIHsgLyogV2FudCBsYXN0IHdvcmQgdG8gYmUgcmVtYWluZGVyPyAqLwotICAgICAgICAg ICAgICAgICAgICB6Kys7Ci0jaWZkZWYgWFdPUkRTREVCVUcKLSAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCIxIHorKyA9ICVkXG4iLCB6KTsKLSNlbmRpZiAvKiBYV09SRFNERUJVRyAqLwotICAg ICAgICAgICAgICAgICAgICBsaXN0W3pdID0gcDsgICAgICAgIC8qIFllcywgcG9pbnQgdG8gaXQg Ki8KLSNpZmRlZiBYV09SRFNERUJVRwotICAgICAgICAgICAgICAgICAgICBwcmludGYoIls0XUxJ U1RbJWRdPVwiJXNcIlxuIix6LGxpc3Rbel0pOwotI2VuZGlmIC8qIFhXT1JEU0RFQlVHICovCi0g ICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogYW5kIHF1aXQgKi8KLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgayA9IDE7ICAgICAgICAgICAgICAgICAg LyogU2V0IGluLXdvcmQgZmxhZyAqLwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg IC8qIElmIHdlJ3JlIG5vdCBpbnNpZGUgYSBicmFjZWQgcXVhbnRpdHksIGFuZCB3ZSBhcmUgaW4g YSB3b3JkLCBhbmQgKi8KLSAgICAgICAgLyogd2UgaGF2ZSBoaXQgd2hpdGVzcGFjZSwgdGhlbiB3 ZSBoYXZlIGEgd29yZC4gKi8KLSAgICAgICAgaWYgKCh5IDwgMSkgJiYgKGsgIT0gMCkgJiYgKCpz ID09IFNQIHx8ICpzID09IEhUKSAmJiAhYikgewotICAgICAgICAgICAgaWYgKCFmbGFnIHx8IHog PCBtYXgpICAgICAgIC8qIGlmIHdlIGRvbid0IHdhbnQgdG8ga2VlcCByZXN0ICovCi0gICAgICAg ICAgICAgICpzID0gJ1wwJzsgICAgICAgICAgICAgICAgLyogdGVybWluYXRlIHRoZSBhcmcgd2l0 aCBudWxsICovCi0gICAgICAgICAgICBrID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogc2F5 IHdlJ3JlIG5vdCBpbiBhIHdvcmQgYW55IG1vcmUgKi8KLSAgICAgICAgICAgIHkgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAvKiBzdGFydCBicmFjZXMgb2ZmIGNsZWFuIGFnYWluICovCi0gICAg ICAgICAgICBpZiAoeiA9PSBtYXgpIGJyZWFrOyAgICAgICAgLyogT25seSBnbyB1cCB0byBtYXgu ICovCi0gICAgICAgICAgICB6Kys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogY291bnQgdGhp cyBhcmcgKi8KLSNpZmRlZiBYV09SRFNERUJVRwotICAgICAgICAgICAgcHJpbnRmKCIxIHorKyA9 ICVkXG4iLCB6KTsKLSNlbmRpZiAvKiBYV09SRFNERUJVRyAqLwotCi0jaWZuZGVmIE5PU1BMCi0g ICAgICAgICAgICBpZiAobWFjcm8pIHsKLSAgICAgICAgICAgICAgICBpZiAoeiA8IDEwKSB7Ci0g ICAgICAgICAgICAgICAgICAgIHZhcm5hbVsxXSA9IChjaGFyKSAoeiArICcwJyk7IC8qIGNvbXB1 dGUgaXRzIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgYWRkbWFjKHZhcm5hbSxwKTsgICAv KiBhZGQgaXQgdG8gdGhlIG1hY3JvIHRhYmxlICovCi0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGlmICh6IDw9IG1heCkgewotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAg ICAgICAgaWYgKG1hY2x2bCA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgYWRkbWFjKHZhcm5h bSxwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYobV94YXJnW21hY2x2bF1bel0pLHApOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyogTk9TUEwgKi8K LSAgICAgICAgICAgICAgICBsaXN0W3pdID0gcDsKLSNpZmRlZiBYV09SRFNERUJVRwotICAgICAg ICAgICAgICAgIHByaW50ZigiWzJdTElTVFslZF09XCIlc1wiXG4iLHosbGlzdFt6XSk7Ci0jZW5k aWYgLyogWFdPUkRTREVCVUcgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgIH0KLSNlbmRp ZiAvKiBOT1NQTCAqLwotICAgICAgICAgICAgcCA9IHMrMTsKLSAgICAgICAgfQotICAgICAgICBz Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHBhc3QgdGhpcyBjaGFyYWN0 ZXIgKi8KLSAgICB9Ci0gICAgaWYgKCh6ID09IDApICYmICh5ID4gMSkpIHsgICAgICAgICAgLyog RXh0cmEgY2xvc2luZyBicmFjZShzKSBhdCBlbmQgKi8KLSAgICAgICAgeisrOwotI2lmbmRlZiBO T1NQTAotICAgICAgICBpZiAobWFjcm8pIHsKLSAgICAgICAgICAgIGlmICh6IDwgMTApIHsKLSAg ICAgICAgICAgICAgICB2YXJuYW1bMV0gPSB6ICsgJzAnOyAgICAvKiBjb21wdXRlIGl0cyBuYW1l ICovCi0gICAgICAgICAgICAgICAgYWRkbWFjKHZhcm5hbSxwKTsgICAgICAgLyogQWRkIHJlc3Qg b2YgbGluZSB0byBsYXN0IGFyZyAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHog PD0gbWF4KSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgIGlmIChtYWNsdmwgPCAw KQotICAgICAgICAgICAgICAgICAgYWRkbWFjKHZhcm5hbSxwKTsKLSAgICAgICAgICAgICAgICBl bHNlCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKG1f eGFyZ1ttYWNsdmxdW3pdKSxwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSNl bmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgICAgbGlzdFt6XSA9IHA7Ci0jaWZkZWYgWFdPUkRT REVCVUcKLSAgICAgICAgICAgIHByaW50ZigiWzNdTElTVFslZF09XCIlc1wiXG4iLHosbGlzdFt6 XSk7Ci0jZW5kaWYgLyogWFdPUkRTREVCVUcgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgfQot I2VuZGlmIC8qIE5PU1BMICovCi0gICAgfQotI2lmbmRlZiBOT1NQTAotICAgIGlmIChtYWNybykg eyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hY3JvICovCi0gICAgICAgIGlmIChtYWNsdmwg PCAwKSB7Ci0gICAgICAgICAgICBhX2RpbVswXSA9IHo7ICAgICAgICAgICAgICAgLyogQXJyYXkg ZGltZW5zaW9uIGlzIG9uZSBsZXNzICovCi0gICAgICAgICAgICB0b3BhcmdjID0geiArIDE7ICAg ICAgICAgICAgLyogdGhhbiBcdihhcmdjKSAqLwotCSAgICBkZWJ1ZyhGMTExLCJhX2RpbVswXSIs IkQiLGFfZGltWzBdKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1hY2FyZ2NbbWFj bHZsXSA9IHogKyAxOyAgICAvKiBTZXQgXHYoYXJnYykgdmFyaWFibGUgKi8KLSAgICAgICAgICAg IG5feGFyZ1ttYWNsdmxdID0geiArIDE7ICAgICAvKiBUaGlzIGlzIHRoZSBhY3R1YWwgbnVtYmVy ICovCi0gICAgICAgICAgICBhX3B0clswXSA9IG1feGFyZ1ttYWNsdmxdOyAgLyogUG9pbnQgXCZf W10gYXQgdGhlIGFyZ3MgKi8KLSAgICAgICAgICAgIGFfZGltWzBdID0gejsgICAgICAgICAgICAg ICAvKiBBbmQgZ2l2ZSBpdCB0aGlzIGRpbWVuc2lvbiAqLwotCSAgICBkZWJ1ZyhGMTExLCJhX2Rp bVswXSIsIkUiLGFfZGltWzBdKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAq LwotICAgIHJldHVybjsKLX0KLQotI2lmbmRlZiBOT1NQTAotCi0vKiAgRCBPIFMgSCBJIEYgVCAg LS0gIERvIHRoZSBTSElGVCBDb21tYW5kOyBzaGlmdCBtYWNybyBhcmdzIGxlZnQgYnkgbiAqLwot Ci0vKiAgTm90ZTogYXQgc29tZSBwb2ludCBsZXQncyBjb25zb2xpZGF0ZSBtX2FyZ1tdW10gYW5k IG1feGFyZ1tdW10uICovCi0KLWludAotZG9zaGlmdChuKSBpbnQgbjsgeyAgICAgICAgICAgICAg ICAgICAgIC8qIG4gPSBzaGlmdCBjb3VudCAqLwotICAgIGludCBpLCB0b3AsIGxldmVsOwotICAg IGNoYXIgLyogKnMsICptLCAqLyBidWZbNl07ICAgICAgICAgIC8qIEJ1ZmZlciB0byBidWlsZCBz Y2FsYXIgbmFtZXMgKi8KLSAgICBjaGFyICogc3ggPSB0bXBidWY7Ci0gICAgaW50IG54ID0gVE1Q QlVGU0laOwotCi0gICAgZGVidWcoRjEwMSwiU0hJRlQgY291bnQiLCIiLG4pOwotICAgIGRlYnVn KEYxMDEsIlNISUZUIHRvcGFyZ2MiLCIiLHRvcGFyZ2MpOwotCi0gICAgaWYgKG4gPCAxKSAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU3RheSBpbiByYW5nZSAqLwotICAgICAgcmV0dXJuKG4g PT0gMCA/IDEgOiAwKTsKLQotICAgIGxldmVsID0gbWFjbHZsOwotICAgIHRvcCA9IChsZXZlbCA8 IDApID8gdG9wYXJnYyA6IG1hY2FyZ2NbbGV2ZWxdOwotCi0gICAgaWYgKG4gPj0gdG9wKQotICAg ICAgbiA9IHRvcCAtIDE7Ci0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLSAgICAg ICAgZGVidWcoRjEwMSwiU0hJRlQgY291bnQgMiIsIiIsbik7Ci0gICAgICAgIGRlYnVnKEYxMDEs IlNISUZUIGxldmVsIiwiIixsZXZlbCk7Ci0gICAgICAgIGlmIChsZXZlbCA+IC0xKQotICAgICAg ICAgIGRlYnVnKEYxMDEsIlNISUZUIG1hY2FyZ2NbbGV2ZWxdIiwiIixtYWNhcmdjW2xldmVsXSk7 Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICBidWZbMF0gPSAnXFwnOyAgICAgICAg ICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIG5hbWUgdGVtcGxhdGUgKi8KLSAgICBidWZbMV0g PSAnJSc7Ci0gICAgYnVmWzJdID0gTlVMOwotICAgIGJ1ZlszXSA9IE5VTDsKLQotICAgIGZvciAo aSA9IDE7IGkgPD0gbjsgaSsrKSB7ICAgICAgICAgIC8qIEZyZWUgc2hpZnRlZC1vdmVyIGFyZ3Mg Ki8KLSAgICAgICAgaWYgKGxldmVsIDwgMCkgewotICAgICAgICAgICAgbWFrZXN0cigmKHRvcGFy Z1tpXSksTlVMTCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtYWtlc3RyKCYobV94 YXJnW2xldmVsXVtpXSksTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgPCAxMCkgeyAg ICAgICAgICAgICAgICAgICAvKiBJcyB0aGlzIG5lY2Vzc2FyeT8gKi8KLSAgICAgICAgICAgIGJ1 ZlsyXSA9IChjaGFyKShpKycwJyk7Ci0gICAgICAgICAgICBkZWxtYWMoYnVmLDApOwotICAgICAg ICB9Ci0gICAgfQotICAgIGZvciAoaSA9IDE7IGkgPD0gdG9wLW47IGkrKykgeyAgICAgIC8qIFNo aWZ0IHJlbWFpbmluZyBhcmdzICovCi0gICAgICAgIGlmIChsZXZlbCA8IDApIHsKLSNpZmRlZiBD T01NRU5UCi0gICAgICAgICAgICB0b3BhcmdbaV0gPSB0b3BhcmdbaStuXTsgICAgLyogRnVsbCB2 ZWN0b3IgKi8KLSNlbHNlCi0gICAgICAgICAgICBtYWtlc3RyKCYodG9wYXJnW2ldKSx0b3Bhcmdb aStuXSk7IC8qIEZ1bGwgdmVjdG9yICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAg ICAgaWYgKGkgPCAxMCkgICAgICAgICAgICAgICAgIC8qIFNjYWxhcnMuLi4gKi8KLSAgICAgICAg ICAgICAgbWFrZXN0cigmKGdfdmFyW2krJzAnXSksdG9wYXJnW2krbl0pOwotICAgICAgICB9IGVs c2UgewotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIG1feGFyZ1tsZXZlbF1baV0gPSBtX3hh cmdbbGV2ZWxdW2krbl07Ci0jZWxzZQotICAgICAgICAgICAgbWFrZXN0cigmKG1feGFyZ1tsZXZl bF1baV0pLG1feGFyZ1tsZXZlbF1baStuXSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAg ICAgICAgaWYgKGkgPCAxMCkgewotICAgICAgICAgICAgICAgIGJ1ZlsyXSA9IChjaGFyKShpKycw Jyk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjAxMCwiU0hJRlQgYnVmIixidWYsMCk7Ci0gICAg ICAgICAgICAgICAgYWRkbWFjKGJ1ZixtX3hhcmdbbGV2ZWxdW2krbl0pOwotICAgICAgICAgICAg fQotICAgICAgICB9Ci0gICAgfQotICAgIGZvciAoaSA9IHRvcC1uOyBpIDw9IHRvcDsgaSsrKSB7 ICAgIC8qIENsZWFyIG4gYXJncyBmcm9tIHRoZSBlbmQgKi8KLSAgICAgICAgaWYgKGxldmVsIDwg MCkgewotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHRvcGFyZ1tpXSA9IE5VTEw7Ci0jZWxz ZQotICAgICAgICAgICAgbWFrZXN0cigmKHRvcGFyZ1tpXSksTlVMTCk7Ci0jZW5kaWYgLyogQ09N TUVOdCAqLwotICAgICAgICAgICAgaWYgKGkgPCAxMCkKLSAgICAgICAgICAgICAgbWFrZXN0cigm KGdfdmFyW2krJzAnXSksTlVMTCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgQ09NTUVOVAot ICAgICAgICAgICAgbV94YXJnW2xldmVsXVtpXSA9IE5VTEw7Ci0jZWxzZQotICAgICAgICAgICAg bWFrZXN0cigmKG1feGFyZ1tsZXZlbF1baV0pLE5VTEwpOwotI2VuZGlmIC8qIENPTU1FTnQgKi8K LSAgICAgICAgICAgIGlmIChpIDwgMTApIHsKLSAgICAgICAgICAgICAgICBidWZbMl0gPSAoY2hh cikoaSsnMCcpOwotICAgICAgICAgICAgICAgIGRlbG1hYyhidWYsMCk7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGxldmVsID4gLTEpIHsgICAgICAgICAgICAgICAg ICAgLyogTWFjcm8gYXJncyAqLwotICAgICAgICBtYWNhcmdjW2xldmVsXSAtPSBuOyAgICAgICAg ICAgIC8qIEFkanVzdCBjb3VudCAqLwotICAgICAgICBuX3hhcmdbbWFjbHZsXSA9IG1hY2FyZ2Nb bGV2ZWxdOyAvKiBIZXJlIHRvbyAqLwotICAgICAgICBhX2RpbVswXSA9IG1hY2FyZ2NbbGV2ZWxd IC0gMTsgIC8qIEFkanVzdCBhcnJheSBkaW1lbnNpb24gKi8KLQlkZWJ1ZyhGMTExLCJhX2RpbVsw XSIsIkYiLGFfZGltWzBdKTsKLSAgICAgICAgenpzdHJpbmcoIlxcZmpvaW4oJl9bXSx7IH0sMSki LCZzeCwmbngpOyAvKiBIYW5kbGUgXCUqICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBtYWtl c3RyKCYobV9saW5lW2xldmVsXSksdG1wYnVmKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGl0dG8gZm9yIHRvcCBsZXZl bCAqLwotICAgICAgICB0b3BhcmdjIC09IG47Ci0gICAgICAgIGFfZGltWzBdID0gdG9wYXJnYyAt IDE7Ci0JZGVidWcoRjExMSwiYV9kaW1bMF0iLCJHIixhX2RpbVswXSk7Ci0gICAgICAgIHp6c3Ry aW5nKCJcXGZqb2luKCZfW10seyB9LDEpIiwmc3gsJm54KTsKLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgIG1ha2VzdHIoJnRvcGxpbmUsdG1wYnVmKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg fQotICAgIHJldHVybigxKTsKLX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1pbnQKLWRvY2QoY3gp IGludCBjeDsgeyAgICAgICAgICAgICAgICAgICAgICAvKiBEbyB0aGUgQ0QgY29tbWFuZCAqLwot ICAgIGludCB4OwotICAgIGV4dGVybiBpbnQgc2VydmVyLCBzcnZjZG1zZywgY2RhY3RpdmU7Ci0g ICAgZXh0ZXJuIGNoYXIgKiBjZG1zZ2ZpbGVbXSwgKiBja2NkcGF0aDsKLSAgICBjaGFyICpzLCAq cDsKLSNpZmRlZiBNQUMKLSAgICBjaGFyIHRlbXBbMzRdOwotI2VuZGlmIC8qIE1BQyAqLwotI2lm ZGVmIElLU0RDT05GCi1leHRlcm4gaW50IGlrc2RjZjsKLSNlbmRpZiAvKiBJS1NEQ09ORiAqLwot Ci0jaWZuZGVmIE5PRlJJTExTCi0gICAgaWYgKGN4ID09IFhYQkFDSykgewotICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgIGN3ZGYgPSAxOwotICAgICAgICBpZiAocHJldmRp cikgewotICAgICAgICAgICAgcyA9IHpndGRpcigpOwotICAgICAgICAgICAgaWYgKCF6Y2hkaXIo cHJldmRpcikpIHsKLSAgICAgICAgICAgICAgICBjd2RmID0gMDsKLSAgICAgICAgICAgICAgICBw ZXJyb3Iocyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1ha2VzdHIo JnByZXZkaXIscyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKGN3 ZGYpOwotICAgIH0KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0gICAgaWYgKGN4ID09IFhYQ0RV UCkgewotI2lmZGVmIFZNUwotICAgICAgICBzID0gIlstXSI7Ci0jZWxzZQotI2lmZGVmIGRhdGFn ZW5lcmFsCi0gICAgICAgIHMgPSAiXiI7Ci0jZWxzZQotICAgICAgICBzID0gIi4uIjsKLSNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICBja3N0cm5jcHko bGluZSxzLExJTkJVRlNJWik7Ci0gICAgICAgIGdvdG8gZ29jZDsKLSAgICB9Ci0jaWZuZGVmIE5P U1BMCi0gICAgaWYgKGN4ID09IFhYS0NEKSB7CQkJLyogU3ltYm9saWMgKEtlcm1pdCkgQ0QgKi8K LQljaGFyICogcDsKLQlpbnQgbiwgazsKLQl4ID0gY21rZXkoa2NkdGFiLG5rY2R0YWIsIlN5bWJv bGljIGRpcmVjdG9yeSBuYW1lIiwiaG9tZSIseHhzdHJpbmcpOwotCWlmICh4IDwgMCkKLQkgIHJl dHVybih4KTsKLQl4ID0gbG9va3VwKGtjZHRhYixhdG1idWYsbmtjZHRhYiwmayk7IC8qIEdldCBj b21wbGV0ZSBrZXl3b3JkICovCi0JaWYgKHggPCAwKSB7Ci0JICAgIHByaW50ZigiP0xvb2t1cCBl cnJvclxuIik7CS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0g ICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLQkgIHJldHVybih4KTsKLQlpZiAoayA9PSBW Tl9IT01FKSB7CQkvKiBIT01FOiBhbGxvdyBTRVQgSE9NRSB0byBvdmVycmlkZSAqLwotCSAgICBj a3N0cm5jcHkobGluZSxob21lcGF0aCgpLExJTkJVRlNJWik7Ci0JfSBlbHNlIHsJCQkvKiBPdGhl ciBzeW1ib2xpYyBuYW1lICovCi0JICAgIC8qIENvbnZlcnQgdG8gdmFyaWFibGUgc3ludGF4ICov Ci0JICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosIlxcdigiLGtjZHRhYltrXS5rd2QsIiki LE5VTEwpOwotCSAgICBwID0gbGluZTsJCQkvKiBFeHBhbmQgdGhlIHZhcmlhYmxlICovCi0JICAg IG4gPSBMSU5CVUZTSVo7Ci0JICAgIHp6c3RyaW5nKHRtcGJ1ZiwmcCwmbik7Ci0JICAgIGlmICgh bGluZVswXSkgewkJLyogRmFpbCBpZiB2YXJpYWJsZSBub3QgZGVmaW5lZCAqLwotCQlwcmludGYo Ij8lcyAtIG5vdCBkZWZpbmVkXG4iLHRtcGJ1Zik7Ci0JCXJldHVybihzdWNjZXNzID0gMCk7Ci0J ICAgIH0KLQl9Ci0JcyA9IGxpbmU7CQkJLyogQWxsIE9LLCBnbyB0cnkgdG8gQ0QuLi4gKi8KLQln b3RvIGdvY2Q7Ci0gICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICBjZGFjdGl2ZSA9IDE7 Ci0jaWZkZWYgR0VNRE9TCi0gICAgaWYgKCh4ID0gY21kaXIoIk5hbWUgb2YgbG9jYWwgZGlyZWN0 b3J5LCBvciBjYXJyaWFnZSByZXR1cm4iLAotICAgICAgICAgICAgICAgICAgIGhvbWVwYXRoKCks Ci0gICAgICAgICAgICAgICAgICAgJnMsCi0gICAgICAgICAgICAgICAgICAgTlVMTAotICAgICAg ICAgICAgICAgICAgICkKLSAgICAgICAgICkgPCAwICkKLSAgICAgIHJldHVybih4KTsKLSNlbHNl Ci0jaWZkZWYgT1MyCi0gICAgaWYgKCh4ID0gY21kaXJwKCJOYW1lIG9mIFBDIGRpc2sgYW5kL29y IGRpcmVjdG9yeSxcblwKLSAgICAgICBvciBwcmVzcyB0aGUgRW50ZXIga2V5IGZvciB0aGUgZGVm YXVsdCIsCi0gICAgICAgICAgICAgICAgICAgIGhvbWVwYXRoKCksCi0gICAgICAgICAgICAgICAg ICAgICZzLAotICAgICAgICAgICAgICAgICAgICBja2NkcGF0aCA/IGNrY2RwYXRoIDogZ2V0ZW52 KCJDRFBBVEgiKSwKLSAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKLSAgICAgICAgICAgICAg ICAgICAgKQotICAgICAgICAgKSA8IDAgKQotICAgICAgcmV0dXJuKHgpOwotI2Vsc2UKLSNpZmRl ZiBNQUMKLSAgICB4ID0gY2tzdHJuY3B5KHRlbXAsaG9tZXBhdGgoKSwzMik7Ci0gICAgaWYgKHgg PiAwKSBpZiAodGVtcFt4LTFdICE9ICc6JykgeyB0ZW1wW3hdID0gJzonOyB0ZW1wW3grMV0gPSBO VUw7IH0KLSAgICBpZiAoKHggPSBjbXR4dCgiTmFtZSBvZiBNYWNpbnRvc2ggdm9sdW1lIGFuZC9v ciBmb2xkZXIsXG5cCi0gb3IgcHJlc3MgdGhlIFJldHVybiBrZXkgZm9yIHRoZSBkZXNrdG9wIG9u IHRoZSBib290IGRpc2siLAotICAgICAgICAgICAgICAgICAgIHRlbXAsJnMsIHh4c3RyaW5nKSkg PCAwICkKLSAgICAgIHJldHVybih4KTsKLSNlbHNlCi0gICAgaWYgKCh4ID0gY21kaXJwKCJDYXJy aWFnZSByZXR1cm4gZm9yIGhvbWUgZGlyZWN0b3J5LFxuXAotb3IgbmFtZSBvZiBkaXJlY3Rvcnkg b24gdGhpcyBjb21wdXRlciIsCi0jaWZkZWYgVk1TCi0gICAgICAgICAgICAgICAgICAgICJTWVMk TE9HSU4iLCAgICAgICAgLyogV2l0aCBubyBjb2xvbiAqLwotI2Vsc2UKLSAgICAgICAgICAgICAg ICAgICAgaG9tZXBhdGgoKSwJCS8qIEluIFZNUyB0aGlzIGlzICJTWVMkTE9HSU46IiAqLwotI2Vu ZGlmIC8qIFZNUyAqLwotICAgICAgICAgICAgICAgICAgICAmcywKLSAgICAgICAgICAgICAgICAg ICAgY2tjZHBhdGggPyBja2NkcGF0aCA6IGdldGVudigiQ0RQQVRIIiksCi0gICAgICAgICAgICAg ICAgICAgIHh4c3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICkpIDwgMCkKLSAgICAgIHJldHVy bih4KTsKLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBHRU1E T1MgKi8KLSAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7ICAgICAgICAvKiBNYWtlIGEg c2FmZSBjb3B5ICovCi0gICAgcyA9IGxpbmU7Ci0jaWZkZWYgVk1TCi0gICAgaWYgKGNrbWF0Y2go IiouRElSOzEkIixzLDAsMCkpCi0gICAgICBpZiAoY3Z0ZGlyKHMsdG1wYnVmLFRNUEJVRlNJWikg PiAwKQotICAgICAgICBzID0gdG1wYnVmOwotI2VuZGlmIC8qIFZNUyAqLwotICAgIGRlYnVnKEYx MTAsImRvY2QiLHMsMCk7Ci0jaWZuZGVmIE1BQwotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkg ICAgICAgICAgICAgIC8qIEdldCBjb25maXJtYXRpb24gKi8KLSAgICAgIHJldHVybih4KTsKLSNl bmRpZiAvKiBNQUMgKi8KLQotICBnb2NkOgotCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICB4ID0g c3RybGVuKGxpbmUpOyAgICAgICAgICAgICAgICAgICAvKiBob21kaXIgZW5kcyBpbiBjb2xvbiwg Ki8KLSAgICBpZiAoeCA+IDEgJiYgbGluZVt4LTFdID09ICc6JykgICAgICAvKiBhbmQgImRpciIg ZG9lc24ndCBsaWtlIHRoYXQuLi4gKi8KLSAgICAgIGxpbmVbeC0xXSA9IE5VTDsKLSNlbmRpZiAv KiBkYXRhZ2VuZXJhbCAqLwotCi0jaWZkZWYgTUFDCi0gICAgY3dkZiA9IDE7Ci0gICAgaWYgKCF6 Y2hkaXIocykpIHsKLSAgICAgICAgY3dkZiA9IDA7Ci0gICAgICAgIGlmICgqcyAhPSAnOicpIHsg ICAgICAgICAgICAgICAgLyogSWYgaXQgZmFpbGVkLCAqLwotICAgICAgICAgICAgY2hhciAqcDsg ICAgICAgICAgICAgICAgICAgIC8qIHN1cHBseSBsZWFkaW5nIGNvbG9uICovCi0gICAgICAgICAg ICBpbnQgbGVuID0gKGludClzdHJsZW4ocykgKyAyOwotICAgICAgICAgICAgcCA9IG1hbGxvYyhs ZW4pOyAgICAgICAgICAgIC8qIGFuZCB0cnkgYWdhaW4uLi4gKi8KLSAgICAgICAgICAgIGlmIChw KSB7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KHAsIjoiKTsgICAgICAgICAgLyogc2FmZSAqLwot ICAgICAgICAgICAgICAgIHN0cmNhdChwLHMpOyAgICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICAg ICAgICAgICAgICBpZiAoemNoZGlyKHApKQotICAgICAgICAgICAgICAgICAgY3dkZiA9IDE7Ci0g ICAgICAgICAgICAgICAgZnJlZShwKTsKLSAgICAgICAgICAgICAgICBwID0gTlVMTDsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIWN3ZGYpCi0gICAgICBwZXJyb3Io cyk7Ci0jZWxzZQotICAgIHAgPSB6Z3RkaXIoKTsKLSAgICBpZiAoIXpjaGRpcihzKSkgewotICAg ICAgICBjd2RmID0gMDsKLSNpZmRlZiBDS1JPT1QKLSAgICAgICAgaWYgKGNrcm9vdGVycikKLSAg ICAgICAgICBwcmludGYoIj9PZmYgbGltaXRzOiBcIiVzXCJcbiIscyk7Ci0gICAgICAgIGVsc2UK LSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAgICAgICAgICBwZXJyb3Iocyk7Ci0gICAgfSBlbHNlIGN3 ZGYgPSAxOwotI2VuZGlmIC8qIE1BQyAqLwotCi0gICAgeCA9IDA7Ci0gICAgaWYgKGN3ZGYpIHsK LSAgICAgICAgbWFrZXN0cigmcHJldmRpcixwKTsKLSAgICAgICAgZGVidWcoRjExMSwiZG9jZCIs InNydmNkbXNnIixzcnZjZG1zZyk7Ci0gICAgICAgIGlmIChzcnZjZG1zZwotI2lmZGVmIElLU0RD T05GCi0gICAgICAgICAgICAmJiAhKGluc2VydmVyICYmICFpa3NkY2YpCi0jZW5kaWYgLyogSUtT RENPTkYgKi8KLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwi ZG9jZCBjZG1zZ2ZpbGVbaV0iLGNkbXNnZmlsZVtpXSxpKTsKLSAgICAgICAgICAgICAgICBpZiAo emNoa2koY2Rtc2dmaWxlW2ldKSA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAxOwot ICAgICAgICAgICAgICAgICAgICBkb3R5cGUoY2Rtc2dmaWxlW2ldLHhhc2ttb3JlLDAsMCxOVUxM LDAsTlVMTCwwLDAsTlVMTCwwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotLyogeGRvY2Q6ICov Ci0gICAgaWYgKCF4ICYmIHNydmNkbXNnICYmICFzZXJ2ZXIKLSNpZmRlZiBJS1NEQ09ORgotICAg ICAgICAmJiAhKGluc2VydmVyICYmICFpa3NkY2YpCi0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSAg ICAgICAgJiYgIXF1aWV0ICYmICF4Y21kc3JjKQotICAgICAgcHJpbnRmKCIlc1xuIiwgemd0ZGly KCkpOwotCi0gICAgcmV0dXJuKGN3ZGYpOwotfQotCi1zdGF0aWMgaW50IG9uX2N0cmxjID0gMDsK LQotVk9JRAotZml4Y21kKCkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBGaXggY29tbWFuZCBw YXJzZXIgYWZ0ZXIgaW50ZXJydXB0aW9uICovCi0jaWZuZGVmIE5PU1BMCi0jaWZuZGVmIE5PT05D VFJMQwotICAgIGlmIChubWFjKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueSBtYWNy b3MgZGVmaW5lZD8gKi8KLSAgICAgICAgaW50IGs7ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBZZXMgKi8KLSAgICAgICAgY2hhciAqIHMgPSAib25fY3RybGMiOyAgICAgICAgICAvKiBOYW1l IG9mIEN0cmwtQyBoYW5kbGluZyBtYWNybyAqLwotICAgICAgICBrID0gbWxvb2sobWFjdGFiLHMs bm1hYyk7ICAgICAgIC8qIExvb2sgaXQgdXAuICovCi0gICAgICAgIGlmIChrID49IDApIHsgICAg ICAgICAgICAgICAgICAgLyogSWYgZm91bmQsICovCi0gICAgICAgICAgICBpZiAob25fY3RybGMr KyA9PSAwKSB7ICAgICAgLyogaWYgbm90IGFscmVhZHkgZXhlY3V0aW5nLCAqLwotICAgICAgICAg ICAgICAgIGlmIChkb2RvKGssIiIsMCkgPiAtMSkgIC8qIHNldCBpdCB1cCwgKi8KLSAgICAgICAg ICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAvKiBleGVjdXRlIGl0LCAqLwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgZGVsbWFjKHMsMSk7ICAgICAgICAgICAgICAgIC8qIGFuZCB1 bmRlZmluZSBpdC4gKi8KLSAgICAgICAgfQotICAgIH0KLSAgICBvbl9jdHJsYyA9IDA7Ci0jZW5k aWYgLyogTk9PTkNUUkxDICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICBkb3N0b3AoKTsgICAg ICAgICAgICAgICAgICAgLyogQmFjayB0byB0b3AgbGV2ZWwgKGFsc28gY2FsbHMgY29uaW50KCkp LiAqLwotICAgIGJnY2hrKCk7ICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBiYWNrZ3JvdW5k IHN0YXR1cyAqLwotICAgIGlmICgqcHNhdmUpIHsgICAgICAgICAgICAgICAvKiBJZiBvbGQgcHJv bXB0IHNhdmVkLCAqLwotICAgICAgICBjbXNldHAocHNhdmUpOyAgICAgICAgICAvKiByZXN0b3Jl IGl0LiAqLwotICAgICAgICAqcHNhdmUgPSBOVUw7Ci0gICAgfQotICAgIHN1Y2Nlc3MgPSAwOyAg ICAgICAgICAgICAgICAvKiBUZWxsIHBhcnNlciBsYXN0IGNvbW1hbmQgZmFpbGVkICovCi19Ci0K LSNpZm5kZWYgTk9TSE9XICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTSE9XIEZFQVRVUkVT ICovCi0vKgotICBOb3RlLCBwcmVzZW50bHkgb3B0bGlzdFtdIGluZGV4IG92ZXJmbG93IGlzIG5v dCBjaGVja2VkLgotICBUaGVyZSBpcyBwbGVudHkgb2Ygcm9vbSAobGVzcyB0aGFuIDM2MCBlbnRy aWVzIGZvciAxMDAwIHNsb3RzKS4KLSAgV2hlbiBzcGFjZSBzdGFydHMgdG8gZ2V0IHRpZ2h0LCBj aGVjayBmb3Igbm9wdGxpc3QgPj0gTk9QVExJU1QKLSAgZXZlcnkgdGltZSBub3B0bGlzdCBpcyBp bmNyZW1lbnRlZC4KLSovCi0jZGVmaW5lIE5PUFRMSVNUIDEwMjQKLXN0YXRpYyBpbnQgbm9wdGxp c3QgPSAwOwotc3RhdGljIGNoYXIgKiBvcHRsaXN0W05PUFRMSVNUKzFdOwotc3RhdGljIGludCBo cG9zID0gMDsKLQotaW50Ci1wcnRvcHQobGluZXMscykgaW50ICogbGluZXM7IGNoYXIgKnM7IHsg LyogUHJpbnQgYW4gb3B0aW9uICovCi0gICAgaW50IHksIGk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRG9lcyB3b3JkIHdyYXAuICovCi0gICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgaSA9 ICpsaW5lczsKLSAgICBpZiAoISpzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbXB0 eSBhcmd1bWVudCAqLwotICAgICAgICBpZiAoaHBvcyA+IDApIHsgICAgICAgICAgICAgICAgIC8q IG1lYW5zIHRvIGVuZCB0aGlzIGxpbmUuICovCi0gICAgICAgICAgICBwcmludGYoIlxuIik7ICAg ICAgICAgICAgICAgLyogTm90IG5lZWRlZCBpZiBhbHJlYWR5IGF0ICovCi0gICAgICAgICAgICBp ZiAoKytpID4gKGNtZF9yb3dzIC0gMykpIHsgLyogYmVnaW5uaW5nIG9mIG5ldyBsaW5lLiAqLwot ICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKQotICAgICAgICAgICAgICAgICAgcmV0dXJu KDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGkgPSAwOwotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiXG4iKTsgICAgICAgICAgICAg ICAgICAgLyogQW5kIHRoZW4gbWFrZSBhIGJsYW5rIGxpbmUgKi8KLSAgICAgICAgaWYgKCsraSA+ IChjbWRfcm93cyAtIDMpKSB7Ci0gICAgICAgICAgICBpZiAoIWFza21vcmUoKSkKLSAgICAgICAg ICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBpID0gMDsK LSAgICAgICAgfQotICAgICAgICBocG9zID0gMDsKLSAgICAgICAgKmxpbmVzID0gaTsKLSAgICAg ICAgcmV0dXJuKDEpOwotICAgIH0KLSAgICB5ID0gKGludClzdHJsZW4ocykgKyAxOwotICAgIGhw b3MgKz0geTsKLSAgICBkZWJ1ZyhGMTAxLCJwcnRvcHQgaHBvcyIsIiIsaHBvcyk7Ci0gICAgZGVi dWcoRjEwMSwicHJ0b3B0IGNtZF9jb2xzIiwiIixjbWRfY29scyk7Ci0KLSAgICBpZiAoCi0jaWZk ZWYgT1MyCi0gICAgICAgIGhwb3MgPiAoKGNtZF9jb2xzID4gNDApID8gKGNtZF9jb2xzIC0gMSkg OiA3OSkKLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICBocG9zID4gKCh0dF9jb2xzID4gNDApID8g KHR0X2NvbHMgLSAxKSA6IDc5KQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICApIHsKLSAgICAg ICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBpZiAoKytpID4gKGNtZF9yb3dzIC0gMykpIHsKLSAg ICAgICAgICAgIGlmICghYXNrbW9yZSgpKQotICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAg ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGkgPSAwOwotICAgICAgICB9Ci0gICAgICAgIHBy aW50ZigiICVzIixzKTsKLSAgICAgICAgaHBvcyA9IHk7Ci0gICAgfSBlbHNlCi0gICAgICBwcmlu dGYoIiAlcyIscyk7Ci0gICAgKmxpbmVzID0gaTsKLSAgICByZXR1cm4oMSk7Ci19Ci0KLXN0YXRp YyBWT0lECi1pbml0b3B0bGlzdCgpIHsKLSAgICBpbnQgaTsKLSAgICBpZiAobm9wdGxpc3QgPiAw KQotICAgICAgcmV0dXJuOwotICAgIGZvciAoaSA9IDA7IGkgPCBOT1BUTElTVDsgaSsrKQotICAg ICAgb3B0bGlzdFtpXSA9IE5VTEw7Ci0KLSNpZmRlZiBNQUMKLSNpZmRlZiBNUFcKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1QVyIpOwotI2VuZGlmIC8qIE1QVyAqLwotI2Vu ZGlmIC8qIE1BQyAqLwotCi0jaWZkZWYgTUFDCi0jaWZkZWYgVEhJTktfQwotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiVEhJTktfQyIpOwotI2VuZGlmIC8qIFRISU5LX0MgKi8K LSNlbmRpZiAvKiBNQUMgKi8KLQotI2lmZGVmIF9fMzg2X18KLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIl9fMzg2X18iKTsKLSNlbmRpZiAvKiBfXzM4Nl9fICovCi0KLS8qIE1l bW9yeSBtb2RlbHMuLi4gKi8KLQotI2lmZGVmIF9fRkxBVF9fCi0gICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJfX0ZMQVRfXyIpOwotI2VuZGlmIC8qIF9fRkxBVF9fICovCi0jaWZk ZWYgX19TTUFMTF9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX1NNQUxM X18iKTsKLSNlbmRpZiAvKiBfX1NNQUxMX18gKi8KLSNpZmRlZiBfX01FRElVTV9fCi0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX01FRElVTV9fIik7Ci0jZW5kaWYgLyogX19N RURJVU1fXyAqLwotI2lmZGVmIF9fQ09NUEFDVF9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJfX0NPTVBBQ1RfXyIpOwotI2VuZGlmIC8qIF9fQ09NUEFDVF9fICovCi0jaWZk ZWYgX19MQVJHRV9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX0xBUkdF X18iKTsKLSNlbmRpZiAvKiBfX0xBUkdFX18gKi8KLQotI2lmZGVmIERFQlVHCi0jaWZkZWYgSUZE RUJVRwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSUZERUJVRyIpOwotI2Vs c2UKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkRFQlVHIik7Ci0jZW5kaWYg LyogSUZERUJVRyAqLwotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgVExPRwotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVExPRyIpOwotI2VuZGlmIC8qIFRMT0cgKi8KLSNp ZmRlZiBCSUdCVUZPSwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQklHQlVG T0siKTsKLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotI2lmZGVmIElOUEJVRlNJWgotICAgIHNwcmlu dGYobGluZSwiSU5QQlVGU0laPSVkIixJTlBCVUZTSVopOyAvKiBTQUZFICovCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIElOUEJVRlNJWkUgKi8K LSNpZmRlZiBMSU5CVUZTSVoKLSAgICBzcHJpbnRmKGxpbmUsIkxJTkJVRlNJWj0lZCIsTElOQlVG U0laKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5l KTsKLSNlbmRpZiAvKiBMSU5CVUZTSVpFICovCi0jaWZkZWYgSU5CVUZTSVpFCi0gICAgc3ByaW50 ZihsaW5lLCJJTkJVRlNJWkU9JWQiLElOQlVGU0laRSk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogSU5CVUZTSVpFICovCi0j aWZkZWYgT0JVRlNJWkUKLSAgICBzcHJpbnRmKGxpbmUsIk9CVUZTSVpFPSVkIixPQlVGU0laRSk7 IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0j ZW5kaWYgLyogT0JVRlNJWkUgKi8KLSNpZmRlZiBGRF9TRVRTSVpFCi0gICAgc3ByaW50ZihsaW5l LCJGRF9TRVRTSVpFPSVkIixGRF9TRVRTSVpFKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBGRF9TRVRTSVpFICovCi0jaWZk ZWYgWEZSQ0FOCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJYRlJDQU4iKTsK LSNlbmRpZiAvKiBYRlJDQU4gKi8KLSNpZmRlZiBYUFJJTlQKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIlhQUklOVCIpOwotI2VuZGlmIC8qIFhQUklOVCAqLwotI2lmZGVmIFBJ UEVTRU5ECi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJQSVBFU0VORCIpOwot I2VuZGlmIC8qIFBJUEVTRU5EICovCi0jaWZkZWYgQ0tfU1BFRUQKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIkNLX1NQRUVEIik7Ci0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLSNp ZmRlZiBDS19GQVNUCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19GQVNU Iik7Ci0jZW5kaWYgLyogQ0tfRkFTVCAqLwotI2lmZGVmIENLX0FQQwotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfQVBDIik7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0jaWZk ZWYgQ0tfQVVUT0RMCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19BVVRP REwiKTsKLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSNpZmRlZiBDS19NS0RJUgotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfTUtESVIiKTsKLSNlbmRpZiAvKiBDS19NS0RJ UiAqLwotI2lmZGVmIE5PTUtESVIKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks Ik5PTUtESVIiKTsKLSNlbmRpZiAvKiBOT01LRElSICovCi0jaWZkZWYgQ0tfTEFCRUxFRAotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfTEFCRUxFRCIpOwotI2VuZGlmIC8q IENLX0xBQkVMRUQgKi8KLSNpZmRlZiBOT0RJQUwKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIk5PRElBTCIpOwotI2VuZGlmIC8qIE5PRElBTCAqLwotI2lmZGVmIE1JTklESUFM Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNSU5JRElBTCIpOwotI2VuZGlm IC8qIE1JTklESUFMICovCi0jaWZkZWYgV0hBVEFNSQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiV0hBVEFNSSIpOwotI2VuZGlmIC8qIFdIQVRBTUkgKi8KLSNpZmRlZiBEWU5B TUlDCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJEWU5BTUlDIik7Ci0jZW5k aWYgLyogRFlOQU1JQyAqLwotI2lmbmRlZiBOT1NQTAotICAgIHNwcmludGYobGluZSwiQ01EREVQ PSVkIixDTURERVApOyAgIC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksbGluZSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIE1BWFBBVEhMRU4KLSAg ICBzcHJpbnRmKGxpbmUsIk1BWFBBVEhMRU49JWQiLE1BWFBBVEhMRU4pOyAvKiBTQUZFICovCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIE1BWFBB VEhMRU4gKi8KLQotI2lmZGVmIERFVk5BTUxFTgotICAgIHNwcmludGYobGluZSwiREVWTkFNTEVO PSVkIixERVZOQU1MRU4pOyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIERFVk5BTUxFTiAqLwotCi0jaWZkZWYgTk9fUEFSQU1f SAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9fUEFSQU1fSCIpOwotI2Vu ZGlmIC8qIE5PX1BBUkFNX0ggKi8KLQotI2lmZGVmIElOQ0xfUEFSQU1fSAotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiSU5DTF9QQVJBTV9IIik7Ci0jZW5kaWYgLyogSU5DTF9Q QVJBTV9IICovCi0KLSAgICBzcHJpbnRmKGxpbmUsIkNLTUFYUEFUSD0lZCIsQ0tNQVhQQVRIKTsg LyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLQot ICAgIHNwcmludGYobGluZSwiQ0tNQVhPUEVOPSVkIixDS01BWE9QRU4pOyAvKiBTQUZFICovCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotCi0gICAgc3ByaW50Zihs aW5lLCJaX01BWENIQU49JWQiLFpfTUFYQ0hBTik7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0KLSNpZmRlZiBPUEVOX01BWAotICAgIHNwcmlu dGYobGluZSwiT1BFTl9NQVg9JWQiLE9QRU5fTUFYKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBPUEVOX01BWCAqLwotCi0j aWZkZWYgX1BPU0lYX09QRU5fTUFYCi0gICAgc3ByaW50ZihsaW5lLCJfUE9TSVhfT1BFTl9NQVg9 JWQiLF9QT1NJWF9PUEVOX01BWCk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogX1BPU0lYX09QRU5fTUFYICovCi0KLSNpZmRl ZiBDS0NIQU5ORUxJTwotICAgIHsKLSAgICAgICAgZXh0ZXJuIGludCB6X21heGNoYW47Ci0jaWZk ZWYgVU5JWAotICAgICAgICBleHRlcm4gaW50IGNrbWF4ZmlsZXM7Ci0gICAgICAgIHNwcmludGYo bGluZSwiY2ttYXhmaWxlcz0lZCIsY2ttYXhmaWxlcyk7IC8qIFNBRkUgKi8KLSAgICAgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIFVOSVggKi8KLSAg ICAgICAgc3ByaW50ZihsaW5lLCJ6X21heGNoYW49JWQiLHpfbWF4Y2hhbik7IC8qIFNBRkUgKi8K LSAgICAgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotICAgIH0KLSNl bmRpZiAvKiBDS0NIQU5ORUxJTyAqLwotCi0jaWZkZWYgRk9QRU5fTUFYCi0gICAgc3ByaW50Zihs aW5lLCJGT1BFTl9NQVg9JWQiLEZPUEVOX01BWCk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogRk9QRU5fTUFYICovCi0KLSNp ZmRlZiBNQVhHRVRQQVRICi0gICAgc3ByaW50ZihsaW5lLCJNQVhHRVRQQVRIPSVkIixNQVhHRVRQ QVRIKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5l KTsKLSNlbmRpZiAvKiBNQVhHRVRQQVRIICovCi0KLSNpZmRlZiBDTURCTAotICAgIHNwcmludGYo bGluZSwiQ01EQkw9JWQiLENNREJMKTsgICAgIC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogQ01EQkwgKi8KLQotI2lmZGVmIFZO QU1MCi0gICAgc3ByaW50ZihsaW5lLCJWTkFNTD0lZCIsVk5BTUwpOyAgICAgLyogU0FGRSAqLwot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBWTkFN TCAqLwotCi0jaWZkZWYgQVJSQVlSRUZMRU4KLSAgICBzcHJpbnRmKGxpbmUsIkFSUkFZUkVGTEVO PSVkIixBUlJBWVJFRkxFTik7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogQVJSQVlSRUZMRU4gKi8KLQotI2lmZGVmIFVJREJV RkxFTgotICAgIHNwcmludGYobGluZSwiVUlEQlVGTEVOPSVkIixVSURCVUZMRU4pOyAvKiBTQUZF ICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8q IFVJREJVRkxFTiAqLwotCi0jaWZkZWYgRk9SREVQVEgKLSAgICBzcHJpbnRmKGxpbmUsIkZPUkRF UFRIPSVkIixGT1JERVBUSCk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogRk9SREVQVEggKi8KLQotI2lmZGVmIE1BWFRBS0UK LSAgICBzcHJpbnRmKGxpbmUsIk1BWFRBS0U9JWQiLE1BWFRBS0UpOyAvKiBTQUZFICovCi0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIE1BWFRBS0Ug Ki8KLQotI2lmZGVmIE1BQ0xFVkVMCi0gICAgc3ByaW50ZihsaW5lLCJNQUNMRVZFTD0lZCIsTUFD TEVWRUwpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxp bmUpOwotI2VuZGlmIC8qIE1BQ0xFVkVMICovCi0KLSNpZmRlZiBNQUNfTUFYCi0gICAgc3ByaW50 ZihsaW5lLCJNQUNfTUFYPSVkIixNQUNfTUFYKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBNQUNfTUFYICovCi0KLSNpZmRl ZiBfTEFSR0VGSUxFX1NPVVJDRQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi X0xBUkdFRklMRV9TT1VSQ0UiKTsKLSNlbmRpZgkvKiBfTEFSR0VGSUxFX1NPVVJDRSAqLwotCi0j aWZkZWYgX0ZJTEVfT0ZGU0VUX0JJVFMKLSAgICBzcHJpbnRmKGxpbmUsIl9GSUxFX09GRlNFVF9C SVRTPSVkIixfRklMRV9PRkZTRVRfQklUUyk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYJLyogX0ZJTEVfT0ZGU0VUX0JJVFMgKi8K LQotI2lmZGVmIF9fVVNFX0ZJTEVfT0ZGU0VUNjQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIl9fVVNFX0ZJTEVfT0ZGU0VUNjQiKTsKLSNlbmRpZgkvKiBfX1VTRV9GSUxFX09G RlNFVDY0ICovCi0KLSNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiX19VU0VfTEFSR0VGSUxFNjQiKTsKLSNlbmRpZgkvKiBfX1VTRV9M QVJHRUZJTEU2NCAqLwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIENIQVJfTUFYCi0gICAgc3By aW50ZihsaW5lLCJDSEFSX01BWD0lbGx4IixDSEFSX01BWCk7IC8qIFNBRkUgKi8KLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogQ0hBUl9NQVggKi8K LSNpZmRlZiBVQ0hBUl9NQVgKLSAgICBzcHJpbnRmKGxpbmUsIlVDSEFSX01BWD0lbGx4IixVQ0hB Ul9NQVgpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxp bmUpOwotI2VuZGlmIC8qIFVDSEFSX01BWCAqLwotI2lmZGVmIFNIUlRfTUFYCi0gICAgc3ByaW50 ZihsaW5lLCJTSFJUX01BWD0lbGx4IixTSFJUX01BWCk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogU0hSVF9NQVggKi8KLSNp ZmRlZiBVU0hSVF9NQVgKLSAgICBzcHJpbnRmKGxpbmUsIlVTSFJUX01BWD0lbGx4IixVU0hSVF9N QVgpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUp OwotI2VuZGlmIC8qIFVTSFJUX01BWCAqLwotI2lmZGVmIElOVF9NQVgKLSAgICBzcHJpbnRmKGxp bmUsIklOVF9NQVg9JWxseCIsSU5UX01BWCk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogSU5UX01BWCAqLwotI2lmZGVmIFVJ TlRfTUFYCi0gICAgc3ByaW50ZihsaW5lLCJVSU5UX01BWD0lbGx4IixVSU5UX01BWCk7IC8qIFNB RkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYg LyogVUlOVF9NQVggKi8KLSNpZmRlZiBNQVhfTE9ORwotICAgIHNwcmludGYobGluZSwiTUFYX0xP Tkc9JWxseCIsTUFYX0xPTkcpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIE1BWF9MT05HICovCi0jaWZkZWYgTE9OR19NQVgK LSAgICBzcHJpbnRmKGxpbmUsIkxPTkdfTUFYPSVsbHgiLExPTkdfTUFYKTsgLyogU0FGRSAqLwot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBMT05H X01BWCAqLwotI2lmZGVmIFVMT05HX01BWAotICAgIHNwcmludGYobGluZSwiVUxPTkdfTUFYPSVs bHgiLFVMT05HX01BWCk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksbGluZSk7Ci0jZW5kaWYgLyogVUxPTkdfTUFYICovCi0jaWZkZWYgTUFYSU5UCi0gICAg c3ByaW50ZihsaW5lLCJNQVhJTlQ9JWxseCIsTUFYSU5UKTsgLyogU0FGRSAqLwotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBNQVhJTlQgKi8KLSNp ZmRlZiBNQVhMT05HCi0gICAgc3ByaW50ZihsaW5lLCJNQVhMT05HPSVsbHgiLE1BWExPTkcpOyAv KiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2Vu ZGlmIC8qIE1BWExPTkcgKi8KLSNpZmRlZiBOVAotI2lmZGVmIExMT05HX01BWAotICAgIHNwcmlu dGYobGluZSwiTExPTkdfTUFYPSVJNjR4IixMTE9OR19NQVgpOyAvKiBTQUZFICovCi0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIExMT05HX01BWCAq LwotI2lmZGVmIFVMTE9OR19NQVgKLSAgICBzcHJpbnRmKGxpbmUsIlVMTE9OR19NQVg9JUk2NHgi LFVMTE9OR19NQVgpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLGxpbmUpOwotI2VuZGlmIC8qIFVMTE9OR19NQVggKi8KLSNpZmRlZiBNQVhMT05HTE9ORwot ICAgIHNwcmludGYobGluZSwiTUFYTE9OR0xPTkc9JUk2NHgiLE1BWExPTkdMT05HKTsgIC8qIFNB RkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYg LyogTUFYTE9OR0xPTkcgKi8KLSNlbHNlCi0jaWZkZWYgTExPTkdfTUFYCi0gICAgc3ByaW50Zihs aW5lLCJMTE9OR19NQVg9JWxseCIsTExPTkdfTUFYKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBMTE9OR19NQVggKi8KLSNp ZmRlZiBVTExPTkdfTUFYCi0gICAgc3ByaW50ZihsaW5lLCJVTExPTkdfTUFYPSVsbHgiLFVMTE9O R19NQVgpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxp bmUpOwotI2VuZGlmIC8qIFVMTE9OR19NQVggKi8KLSNpZmRlZiBNQVhMT05HTE9ORwotICAgIHNw cmludGYobGluZSwiTUFYTE9OR0xPTkc9JWxseCIsTUFYTE9OR0xPTkcpOyAgLyogU0FGRSAqLwot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBNQVhM T05HTE9ORyAqLwotI2VuZGlmCi0jaWZkZWYgX0lOVEVHUkFMX01BWF9CSVRTCi0gICAgc3ByaW50 ZihsaW5lLCJfSU5URUdSQUxfTUFYX0JJVFM9JWQiLF9JTlRFR1JBTF9NQVhfQklUUyk7ICAvKiBT QUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlm IC8qIF9JTlRFR1JBTF9NQVhfQklUUyAqLwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQotI2lmZGVm IE1JTlBVVE1BWAotICAgIHNwcmludGYobGluZSwiTUlOUFVUTUFYPSVkIixNSU5QVVRNQVgpOyAv KiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2Vu ZGlmIC8qIE1JTlBVVE1BWCAqLwotCi0jaWZkZWYgTUFYV0xECi0gICAgc3ByaW50ZihsaW5lLCJN QVhXTEQ9JWQiLE1BWFdMRCk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksbGluZSk7Ci0jZWxzZQotI2lmZGVmIE9TMgotICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiTUFYV0xEPXVubGltaXRlZCIpOwotI2VuZGlmIC8qIE9TMiAqLwotI2Vu ZGlmIC8qIE1BWFdMRCAqLwotCi0jaWZkZWYgTVNFTkRNQVgKLSAgICBzcHJpbnRmKGxpbmUsIk1T RU5ETUFYPSVkIixNU0VORE1BWCk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogTVNFTkRNQVggKi8KLQotI2lmZGVmIE1BWERE SVIKLSAgICBzcHJpbnRmKGxpbmUsIk1BWERESVI9JWQiLE1BWERESVIpOyAvKiBTQUZFICovCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIE1BWERE SVIgKi8KLQotI2lmZGVmIE1BWEROVU1TCi0gICAgc3ByaW50ZihsaW5lLCJNQVhETlVNUz0lZCIs TUFYRE5VTVMpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LGxpbmUpOwotI2VuZGlmIC8qIE1BWEROVU1TICovCi0KLSNpZmRlZiBVTklYCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJVTklYIik7Ci0jZW5kaWYgLyogVU5JWCAqLwotCi0j aWZkZWYgVk1TCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJWTVMiKTsKLSNp ZmRlZiBfX1ZNU19WRVIKLSAgICBzcHJpbnRmKGxpbmUsIl9fVk1TX1ZFUj0lZCIsX19WTVNfVkVS KTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsK LSNlbmRpZiAvKiBfX1ZNU19WRVIgKi8KLSNpZmRlZiBWTVNWNzAKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIlZNU1Y3MCIpOwotI2VuZGlmIC8qIFZNU1Y3MCAqLwotI2lmZGVm IE9MRF9WTVMKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk9MRF9WTVMiKTsK LSNlbmRpZiAvKiBPTERfVk1TICovCi0jaWZkZWYgdm1zCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJ2bXMiKTsKLSNlbmRpZiAvKiB2bXMgKi8KLSNpZmRlZiBWTVNWNjAKLSAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlZNU1Y2MCIpOwotI2VuZGlmIC8qIFZN U1Y2MCAqLwotI2lmZGVmIFZNU1Y4MAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiVk1TVjgwIik7Ci0jZW5kaWYgLyogVk1TVjgwICovCi0jaWZkZWYgVk1TU0hBUkUKLSAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlZNU1NIQVJFIik7Ci0jZW5kaWYgLyogVk1T U0hBUkUgKi8KLSNpZmRlZiBOT1ZNU1NIQVJFCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJOT1ZNU1NIQVJFIik7Ci0jZW5kaWYgLyogTk9WTVNTSEFSRSAqLwotI2VuZGlmIC8q IFZNUyAqLwotCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksImRhdGFnZW5lcmFsIik7Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNpZmRl ZiBhcG9sbG8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksImFwb2xsbyIpOwot I2VuZGlmIC8qIGFwb2xsbyAqLwotI2lmZGVmIGFlZ2lzCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJhZWdpcyIpOwotI2VuZGlmIC8qIGFlZ2lzICovCi0jaWZkZWYgQTk4Ngot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQTk4NiIpOwotI2VuZGlmIC8qIEE5 ODYgKi8KLSNpZmRlZiBBTUlHQQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi QU1JR0EiKTsKLSNlbmRpZiAvKiBBTUlHQSAqLwotI2lmZGVmIENPTlZFWDkKLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNPTlZFWDkiKTsKLSNlbmRpZiAvKiBDT05WRVg5ICov Ci0jaWZkZWYgQ09OVkVYMTAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNP TlZFWDEwIik7Ci0jZW5kaWYgLyogQ09OVkVYOSAqLwotI2lmZGVmIE1BQwotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiTUFDIik7Ci0jZW5kaWYgLyogTUFDICovCi0jaWZkZWYg QVVYCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJBVVgiKTsKLSNlbmRpZiAv KiBBVVggKi8KLQotI2lmZGVmIE9TMgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiT1MyIik7Ci0jaWZkZWYgTlQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks Ik5UIik7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE9TSwot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiT1M5Iik7Ci0jZW5kaWYgLyogT1NL ICovCi0KLSNpZmRlZiBNU0RPUwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi TVNET1MiKTsKLSNlbmRpZiAvKiBNU0RPUyAqLwotCi0jaWZkZWYgRElSRU5UCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJESVJFTlQiKTsKLSNlbmRpZiAvKiBESVJFTlQgKi8K LQotI2lmZGVmIFNESVJFTlQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNE SVJFTlQiKTsKLSNlbmRpZiAvKiBTRElSRU5UICovCi0KLSNpZmRlZiBORElSCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJORElSIik7Ci0jZW5kaWYgLyogTkRJUiAqLwotCi0j aWZkZWYgWE5ESVIKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlhORElSIik7 Ci0jZW5kaWYgLyogWE5ESVIgKi8KLQotI2lmZGVmIFNBVkVEVUlECi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJTQVZFRFVJRCIpOwotI2VuZGlmIC8qIFNBVkVEVUlEICovCi0K LSNpZmRlZiBSRU5BTUUKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlJFTkFN RSIpOwotI2VuZGlmIC8qIFJFTkFNRSAqLwotCi0jaWZkZWYgQ0tfVE1QRElSCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19UTVBESVIiKTsKLSNlbmRpZiAvKiBDS19UTVBE SVIgKi8KLQotI2lmZGVmIE5PQ0NUUkFQCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJOT0NDVFJBUCIpOwotI2VuZGlmIC8qIE5PQ0NUUkFQICovCi0KLSNpZmRlZiBOT0NPVEZN QwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9DT1RGTUMiKTsKLSNlbmRp ZiAvKiBOT0NPVEZNQyAqLwotCi0jaWZkZWYgTk9GUklMTFMKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIk5PRlJJTExTIik7Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lm ZGVmIFBBUlNFTlNFCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJQQVJTRU5T RSIpOwotI2VuZGlmIC8qIFBBUlNFTlNFICovCi0KLSNpZmRlZiBUSU1FSAotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiVElNRUgiKTsKLSNlbmRpZiAvKiBUSU1FSCAqLwotCi0j aWZkZWYgTk9USU1FSAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVElNRUgi KTsKLSNlbmRpZiAvKiBOT1RJTUVIICovCi0KLSNpZmRlZiBTWVNUSU1FSAotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1lTVElNRUgiKTsKLSNlbmRpZiAvKiBTWVNUSU1FSCAq LwotCi0jaWZkZWYgTk9TWVNUSU1FSAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiU1lTVElNRUgiKTsKLSNlbmRpZiAvKiBOT1NZU1RJTUVIICovCi0KLSNpZmRlZiBTWVNUSU1F QkgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNZU1RJTUVCSCIpOwotI2Vu ZGlmIC8qIFNZU1RJTUVCSCAqLwotCi0jaWZkZWYgTk9TWVNUSU1FQkgKLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIlNZU1RJTUVCSCIpOwotI2VuZGlmIC8qIE5PU1lTVElNRUJI ICovCi0KLSNpZmRlZiBVVElNRUgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IlVUSU1FSCIpOwotI2VuZGlmIC8qIFVUSU1FSCAqLwotCi0jaWZkZWYgU1lTVVRJTUVICi0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTWVNVVElNRUgiKTsKLSNlbmRpZiAvKiBT WVNVVElNRUggKi8KLQotI2lmZGVmIENLX05FRURfU0lHCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJDS19ORUVEX1NJRyIpOwotI2VuZGlmIC8qIENLX05FRURfU0lHICovCi0K LSNpZmRlZiBDS19UVFlGRAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tf VFRZRkQiKTsKLSNlbmRpZiAvKiBDS19UVFlGRCAqLwotCi0jaWZkZWYgTkVUQ09OTgotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTkVUQ09OTiIpOwotI2VuZGlmIC8qIE5FVENP Tk4gKi8KLQotI2lmZGVmIFRDUFNPQ0tFVAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiVENQU09DS0VUIik7Ci0jaWZkZWYgTk9UQ1BPUFRTCi0gICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJOT1RDUE9QVFMiKTsKLSNlbmRpZiAvKiBOT1RDUE9QVFMgKi8KLSNp ZmRlZiBDS19ETlNfU1JWCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19E TlNfU1JWIik7Ci0jZW5kaWYgLyogQ0tfRE5TX1NSViAqLwotI2lmZGVmIE5PX0ROU19TUlYKLSAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PX0ROU19TUlYiKTsKLSNlbmRpZiAv KiBOT19ETlNfU1JWICovCi0jaWZkZWYgQ0tHSE5MSE9TVAotICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiQ0tHSE5MSE9TVCIpOwotI2VuZGlmIC8qIENLR0hOTEhPU1QgKi8KLSNp ZmRlZiBOT0xJU1RFTgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9MSVNU RU4iKTsKLSNlbmRpZiAvKiBOT0xJU1RFTiAqLwotI2lmZGVmIFNPTF9TT0NLRVQKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNPTF9TT0NLRVQiKTsKLSNlbmRpZiAvKiBTT0xf U09DS0VUICovCi0jaWZkZWYgU09fT09CSU5MSU5FCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJTT19PT0JJTkxJTkUiKTsKLSNlbmRpZiAvKiBTT19PT0JJTkxORSAqLwotI2lm ZGVmIFNPX0RPTlRST1VURQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU09f RE9OVFJPVVRFIik7Ci0jZW5kaWYgLyogU09fRE9OVFJPVVRFICovCi0jaWZkZWYgU09fS0VFUEFM SVZFCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTT19LRUVQQUxJVkUiKTsK LSNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8KLSNpZmRlZiBTT19MSU5HRVIKLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNPX0xJTkdFUiIpOwotI2VuZGlmIC8qIFNPX0xJTkdF UiAqLwotI2lmZGVmIFRDUF9OT0RFTEFZCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJUQ1BfTk9ERUxBWSIpOwotI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCi0jaWZkZWYgU09f U05EQlVGCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTT19TTkRCVUYiKTsK LSNlbmRpZiAvKiBTT19TTkRCVUYgKi8KLSNpZmRlZiBTT19SQ1ZCVUYKLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIlNPX1JDVkJVRiIpOwotI2VuZGlmIC8qIFNPX1JDVkJVRiAq LwotI2lmZGVmIGhfYWRkcgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiaF9h ZGRyIik7Ci0jZW5kaWYgLyogaF9hZGRyICovCi0jaWZkZWYgSEFERFJMSVNUCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJIQUREUkxJU1QiKTsKLSNlbmRpZiAvKiBIQUREUkxJ U1QgKi8KLSNpZmRlZiBDS19TT0NLUwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiQ0tfU09DS1MiKTsKLSNpZmRlZiBDS19TT0NLUzUKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIkNLX1NPQ0tTNSIpOwotI2VuZGlmIC8qIENLX1NPQ0tTNSAqLwotI2lmZGVm IENLX1NPQ0tTX05TCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19TT0NL U19OUyIpOwotI2VuZGlmIC8qIENLX1NPQ0tTX05TICovCi0jZW5kaWYgLyogQ0tfU09DS1MgKi8K LSNpZmRlZiBSTE9HQ09ERQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiUkxP R0NPREUiKTsKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2lmZGVmIE5FVENNRAotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTkVUQ01EIik7Ci0jZW5kaWYgLyogTkVUQ01EICov Ci0jaWZkZWYgTk9ORVRDTUQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5P TkVUQ01EIik7Ci0jZW5kaWYgLyogTk9ORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5FVFBUWSIpOwotI2VuZGlmIC8qIE5FVFBUWSAq LwotI2lmZGVmIENLX0VOVklST05NRU5UCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJDS19FTlZJUk9OTUVOVCIpOwotI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCi0jZW5k aWYgLyogVENQU09DS0VUICovCi0jaWZkZWYgVE5DT0RFCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJUTkNPREUiKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNpZmRlZiBDS19G T1JXQVJEX1gKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX0ZPUldBUkRf WCIpOwotI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLwotI2lmZGVmIFROX0NPTVBPUlQKLSAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlROX0NPTVBPUlQiKTsKLSNlbmRpZiAvKiBU Tl9DT01QT1JUICovCi0jaWZkZWYgTVVMVElORVQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIk1VTFRJTkVUIik7Ci0jZW5kaWYgLyogTVVMVElORVQgKi8KLSNpZmRlZiBERUNf VENQSVAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkRFQ19UQ1BJUCIpOwot I2VuZGlmIC8qIERFQ19UQ1BJUCAqLwotI2lmZGVmIFRDUFdBUkUKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIlRDUFdBUkUiKTsKLSNlbmRpZiAvKiBUQ1BXQVJFICovCi0jaWZk ZWYgVUNYNTAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlVDWDUwIik7Ci0j ZW5kaWYgLyogVUNYNTAgKi8KLSNpZmRlZiBDTVVfVENQSVAKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIkNNVV9UQ1BJUCIpOwotI2VuZGlmIC8qIENNVV9UQ1BJUCAqLwotI2lm ZGVmIFRUTEVCVUYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlRUTEVCVUYi KTsKLSNlbmRpZiAvKiBUVExFQlVGICovCi0jaWZkZWYgTkVUTEVCVUYKLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIk5FVExFQlVGIik7Ci0jZW5kaWYgLyogTkVUTEVCVUYgKi8K LSNpZmRlZiBJS1NfT1BUSU9OCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJJ S1NfT1BUSU9OIik7Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotI2lmZGVmIElLU0RCCi0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJJS1NEQiIpOwotI2VuZGlmIC8qIElLU0RC ICovCi0jaWZkZWYgSUtTRENPTkYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IklLU0RDT05GIik7Ci0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSNpZmRlZiBDS19MT0dJTgotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfTE9HSU4iKTsKLSNlbmRpZiAvKiBD S19MT0dJTiAqLwotI2lmZGVmIENLX1BBTQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiQ0tfUEFNIik7Ci0jZW5kaWYgLyogQ0tfUEFNICovCi0jaWZkZWYgQ0tfU0hBRE9XCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19TSEFET1ciKTsKLSNlbmRpZiAv KiBDS19TSEFET1cgKi8KLSNpZmRlZiBDT05HU1BECi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJDT05HU1BEIik7Ci0jZW5kaWYgLyogQ09OR1NQRCAqLwotI2lmZGVmIFNVTlgy NQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1VOWDI1Iik7Ci0jZW5kaWYg LyogU1VOWDI1ICovCi0jaWZkZWYgSUJNWDI1Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJJQk1YMjUiKTsKLSNlbmRpZiAvKiBJQk1YMjUgKi8KLSNpZmRlZiBIUFgyNQotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSFBYMjUiKTsKLSNlbmRpZiAvKiBIUFgy NSAqLwotI2lmZGVmIERFQ05FVAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi REVDTkVUIik7Ci0jZW5kaWYgLyogREVDTkVUICovCi0jaWZkZWYgU1VQRVJMQVQKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNVUEVSTEFUIik7Ci0jZW5kaWYgLyogU1VQRVJM QVQgKi8KLSNpZmRlZiBOUElQRQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi TlBJUEUiKTsKLSNlbmRpZiAvKiBOUElQRSAqLwotI2lmZGVmIENLX05FVEJJT1MKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX05FVEJJT1MiKTsKLSNlbmRpZiAvKiBDS19O RVRCSU9TICovCi0jaWZkZWYgQVRUNzMwMAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiQVRUNzMwMCIpOwotI2VuZGlmIC8qIEFUVDczMDAgKi8KLSNpZmRlZiBBVFQ2MzAwCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJBVFQ2MzAwIik7Ci0jZW5kaWYgLyog QVRUNjMwMCAqLwotI2lmZGVmIEhEQlVVQ1AKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIkhEQlVVQ1AiKTsKLSNlbmRpZiAvKiBIREJVVUNQICovCi0jaWZkZWYgVVNFVFRZTE9D SwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVVNFVFRZTE9DSyIpOwotI2Vu ZGlmIC8qIFVTRVRUWUxPQ0sgKi8KLSNpZmRlZiBVU0VfVVVfTE9DSwotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiVVNFX1VVX0xPQ0siKTsKLSNlbmRpZiAvKiBVU0VfVVVfTE9D SyAqLwotI2lmZGVmIEhBVkVfTE9DS0RFVgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiSEFWRV9MT0NLREVWIik7Ci0jZW5kaWYgLyogSEFWRV9MT0NLREVWICovCi0jaWZkZWYg SEFWRV9CQVVEQk9ZCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJIQVZFX0JB VURCT1kiKTsKLSNlbmRpZiAvKiBIQVZFX0JBVURCT1kgKi8KLSNpZmRlZiBIQVZFX09QRU5QVFkK LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkhBVkVfT1BFTlBUWSIpOwotI2Vu ZGlmIC8qIEhBVkVfT1BFTlBUWSAqLwotI2lmZGVmIFRUUFRZQ01ECi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJUVFBUWUNNRCIpOwotI2VuZGlmIC8qIFRUUFRZQ01EICovCi0j aWZkZWYgTk9VVUNQCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT1VVQ1Ai KTsKLSNlbmRpZiAvKiBOT1VVQ1AgKi8KLSNpZmRlZiBMT05HRk4KLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIkxPTkdGTiIpOwotI2VuZGlmIC8qIExPTkdGTiAqLwotI2lmZGVm IFJEQ0hLCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJSRENISyIpOwotI2Vu ZGlmIC8qIFJEQ0hLICovCi0jaWZkZWYgU0VMRUNUCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJTRUxFQ1QiKTsKLSNlbmRpZiAvKiBTRUxFQ1QgKi8KLSNpZmRlZiBVU0xFRVAK LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlVTTEVFUCIpOwotI2VuZGlmIC8q IFVTTEVFUCAqLwotI2lmZGVmIE5BUAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiTkFQIik7Ci0jZW5kaWYgLyogTkFQICovCi0jaWZkZWYgTkFQSEFDSwotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiTkFQSEFDSyIpOwotI2VuZGlmIC8qIE5BUEhBQ0sgKi8K LSNpZmRlZiBDS19QT0xMCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19Q T0xMIik7Ci0jZW5kaWYgLyogQ0tfUE9MTCAqLwotI2lmZGVmIE5PSUVYVEVOCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT0lFWFRFTiIpOwotI2VuZGlmIC8qIE5PSUVYVEVO ICovCi0jaWZkZWYgRVhDRUxBTgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi RVhDRUxBTiIpOwotI2VuZGlmIC8qIEVYQ0VMQU4gKi8KLSNpZmRlZiBJTlRFUkxBTgotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSU5URVJMQU4iKTsKLSNlbmRpZiAvKiBJTlRF UkxBTiAqLwotI2lmZGVmIE5PRklMRUgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIk5PRklMRUgiKTsKLSNlbmRpZiAvKiBOT0ZJTEVIICovCi0jaWZkZWYgTk9TWVNJT0NUTEgK LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PU1lTSU9DVExIIik7Ci0jZW5k aWYgLyogTk9TWVNJT0NUTEggKi8KLSNpZmRlZiBEQ0xQT1BFTgotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiRENMUE9QRU4iKTsKLSNlbmRpZiAvKiBEQ0xQT1BFTiAqLwotI2lm ZGVmIE5PU0VUQlVGCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT1NFVEJV RiIpOwotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0jaWZkZWYgTk9YRkVSCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT1hGRVIiKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNp ZmRlZiBOT0NVUlNFUwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9DVVJT RVMiKTsKLSNlbmRpZiAvKiBOT0NVUlNFUyAqLwotI2lmZGVmIE5PU0VSVkVSCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT1NFUlZFUiIpOwotI2VuZGlmIC8qIE5PU0VSVkVS ICovCi0jaWZkZWYgTk9QQVRURVJOUwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiTk9QQVRURVJOUyIpOwotI2Vsc2UKLSNpZmRlZiBQQVRURVJOUwotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiUEFUVEVSTlMiKTsKLSNlbmRpZiAvKiBQQVRURVJOUyAqLwot I2VuZGlmIC8qIE5PUEFUVEVSTlMgKi8KLSNpZmRlZiBOT0NLRVhFQwotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiTk9DS0VYRUMiKTsKLSNlbHNlCi0jaWZkZWYgQ0tFWEVDCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS0VYRUMiKTsKLSNlbmRpZiAvKiBD S0VYRUMgKi8KLSNlbmRpZiAvKiBOT0NLRVhFQyAqLwotI2lmZGVmIE5PQVVUT0RMCi0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT0FVVE9ETCIpOwotI2VuZGlmIC8qIE5PQVVU T0RMICovCi0jaWZkZWYgTk9NU0VORAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiTk9NU0VORCIpOwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLSNpZmRlZiBOT0ZEWkVSTwotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9GRFpFUk8iKTsKLSNlbmRpZiAvKiBO T0ZEWkVSTyAqLwotI2lmZGVmIE5PUE9QRU4KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIk5PUE9QRU4iKTsKLSNlbmRpZiAvKiBOT1BPUEVOICovCi0jaWZkZWYgTk9QQVJUSUFM Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT1BBUlRJQUwiKTsKLSNlbmRp ZiAvKiBOT1BBUlRJQUwgKi8KLSNpZmRlZiBOT0tWRVJCUwotICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiTk9LVkVSQlMiKTsKLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotI2lmZGVm IE5PU0VUUkVVCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT1NFVFJFVSIp OwotI2VuZGlmIC8qIE5PU0VUUkVVICovCi0jaWZkZWYgTENLRElSCi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJMQ0tESVIiKTsKLSNlbmRpZiAvKiBMQ0tESVIgKi8KLSNpZmRl ZiBBQ1VDTlRSTAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQUNVQ05UUkwi KTsKLSNlbmRpZiAvKiBBQ1VDTlRSTCAqLwotI2lmZGVmIEJTRDQKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIkJTRDQiKTsKLSNlbmRpZiAvKiBCU0Q0ICovCi0jaWZkZWYgQlNE NDQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkJTRDQ0Iik7Ci0jZW5kaWYg LyogQlNENDQgKi8KLSNpZmRlZiBCU0Q0MQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiQlNENDEiKTsKLSNlbmRpZiAvKiBCU0Q0MSAqLwotI2lmZGVmIEJTRDQzCi0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJCU0Q0MyIpOwotI2VuZGlmIC8qIEJTRDQzICov Ci0jaWZkZWYgQlNEMjkKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkJTRDI5 Iik7Ci0jZW5kaWYgLyogQlNEMjkgKi8KLSNpZmRlZiBCU0RJCi0gICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJCU0RJIik7Ci0jZW5kaWYgLyogQlNESSAqLwotI2lmZGVmIF9fYnNk aV9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX2JzZGlfXyIpOwotI2Vu ZGlmIC8qIF9fYnNkaV9fICovCi0jaWZkZWYgX19OZXRCU0RfXwotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiX19OZXRCU0RfXyIpOwotI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8K LSNpZmRlZiBfX09wZW5CU0RfXwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi X19PcGVuQlNEX18iKTsKLSNlbmRpZiAvKiBfX09wZW5CU0RfXyAqLwotI2lmZGVmIF9fRnJlZUJT RF9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX0ZyZWVCU0RfXyIpOwot I2VuZGlmIC8qIF9fRnJlZUJTRF9fICovCi0jaWZkZWYgRlJFRUJTRDQKLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIkZSRUVCU0Q0Iik7Ci0jZW5kaWYgLyogRlJFRUJTRDQgKi8K LSNpZmRlZiBGUkVFQlNEOAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiRlJF RUJTRDgiKTsKLSNlbmRpZiAvKiBGUkVFQlNEOCAqLwotI2lmZGVmIEZSRUVCU0Q5Ci0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJGUkVFQlNEOSIpOwotI2VuZGlmIC8qIEZSRUVC U0Q5ICovCi0jaWZkZWYgX19saW51eF9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJfX2xpbnV4X18iKTsKLSNlbmRpZiAvKiBfX2xpbnV4X18gKi8KLSNpZmRlZiBMSU5VWF9I SV9TUEQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkxJTlVYX0hJX1NQRCIp OwotI2VuZGlmIC8qIExJTlVYX0hJX1NQRCAqLwotI2lmZGVmIExZTlhPUwotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiTFlOWE9TIik7Ci0jZW5kaWYgLyogTFlOWE9TICovCi0j aWZkZWYgVjcKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlY3Iik7Ci0jZW5k aWYgLyogVjcgKi8KLSNpZmRlZiBBSVgzNzAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIkFJWDM3MCIpOwotI2VuZGlmIC8qIEFJWDM3MCAqLwotI2lmZGVmIFJUQUlYCi0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJSVEFJWCIpOwotI2VuZGlmIC8qIFJUQUlY ICovCi0jaWZkZWYgSFBVWAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSFBV WCIpOwotI2VuZGlmIC8qIEhQVVggKi8KLSNpZmRlZiBIUFVYOQotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiSFBVWDkiKTsKLSNlbmRpZiAvKiBIUFVYOSAqLwotI2lmZGVmIEhQ VVgxMAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSFBVWDEwIik7Ci0jZW5k aWYgLyogSFBVWDEwICovCi0jaWZkZWYgSFBVWDEwMDAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIkhQVVgxMDAwIik7Ci0jZW5kaWYgLyogSFBVWDEwMDAgKi8KLSNpZmRlZiBI UFVYMTEwMAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSFBVWDExMDAiKTsK LSNlbmRpZiAvKiBIUFVYMTEwMCAqLwotI2lmZGVmIEhQVVhQUkU2NQotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiSFBVWFBSRTY1Iik7Ci0jZW5kaWYgLyogSFBVWFBSRTY1ICov Ci0jaWZkZWYgREdVWAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiREdVWCIp OwotI2VuZGlmIC8qIERHVVggKi8KLSNpZmRlZiBER1VYNDMwCi0gICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJER1VYNDMwIik7Ci0jZW5kaWYgLyogREdVWDQzMCAqLwotI2lmZGVm IERHVVg1NDAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkRHVVg1NDAiKTsK LSNlbmRpZiAvKiBER1VYNTQwICovCi0jaWZkZWYgREdVWDU0MwotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiREdVWDU0MyIpOwotI2VuZGlmIC8qIERHVVg1NDMgKi8KLSNpZmRl ZiBER1VYNTQ0MTAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkRHVVg1NDQx MCIpOwotI2VuZGlmIC8qIERHVVg1NDQxMCAqLwotI2lmZGVmIERHVVg1NDQxMQotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiREdVWDU0NDExIik7Ci0jZW5kaWYgLyogREdVWDU0 NDExICovCi0jaWZkZWYgc29ueV9uZXdzCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJzb255X25ld3MiKTsKLSNlbmRpZiAvKiBzb255X25ld3MgKi8KLSNpZmRlZiBDSUUKLSAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNJRSIpOwotI2VuZGlmIC8qIENJRSAq LwotI2lmZGVmIFhFTklYCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJYRU5J WCIpOwotI2VuZGlmIC8qIFhFTklYICovCi0jaWZkZWYgU0NPX1hFTklYCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTQ09fWEVOSVgiKTsKLSNlbmRpZiAvKiBTQ09fWEVOSVgg Ki8KLSNpZmRlZiBJU0lJSQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSVNJ SUkiKTsKLSNlbmRpZiAvKiBJU0lJSSAqLwotI2lmZGVmIEkzODZJWAotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiSTM4NklYIik7Ci0jZW5kaWYgLyogSTM4NklYICovCi0jaWZk ZWYgUlRVCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJSVFUiKTsKLSNlbmRp ZiAvKiBSVFUgKi8KLSNpZmRlZiBQUk9WWDEKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIlBST1ZYMSIpOwotI2VuZGlmIC8qIFBST1ZYMSAqLwotI2lmZGVmIFBZUkFNSUQKLSAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlBZUkFNSUQiKTsKLSNlbmRpZiAvKiBQ WVJBTUlEICovCi0jaWZkZWYgVE9XRVIxCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJUT1dFUjEiKTsKLSNlbmRpZiAvKiBUT1dFUjEgKi8KLSNpZmRlZiBVVEVLCi0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJVVEVLIik7Ci0jZW5kaWYgLyogVVRFSyAqLwot I2lmZGVmIFpJTE9HCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJaSUxPRyIp OwotI2VuZGlmIC8qIFpJTE9HICovCi0jaWZkZWYgVFJTMTYKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIlRSUzE2Iik7Ci0jZW5kaWYgLyogVFJTMTYgKi8KLSNpZmRlZiBNSU5J WAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTUlOSVgiKTsKLSNlbmRpZiAv KiBNSU5JWCAqLwotI2lmZGVmIE1JTklYMgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiTUlOSVgyIik7Ci0jZW5kaWYgLyogTUlOSVgyICovCi0jaWZkZWYgTUlOSVgzCi0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNSU5JWDMiKTsKLSNlbmRpZiAvKiBNSU5J WDMgKi8KLSNpZmRlZiBNSU5JWDMxNQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiTUlOSVgzMTUiKTsKLSNlbmRpZiAvKiBNSU5JWDMxNSAqLwotI2lmZGVmIEM3MAotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQzcwIik7Ci0jZW5kaWYgLyogQzcwICovCi0j aWZkZWYgQUlYUFMyCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJBSVhQUzIi KTsKLSNlbmRpZiAvKiBBSVhQUzIgKi8KLSNpZmRlZiBBSVhSUwotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiQUlYUlMiKTsKLSNlbmRpZiAvKiBBSVhSUyAqLwotI2lmZGVmIFVU U1YKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlVUU1YiKTsKLSNlbmRpZiAv KiBVVFNWICovCi0jaWZkZWYgQVRUU1YKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIkFUVFNWIik7Ci0jZW5kaWYgLyogQVRUU1YgKi8KLSNpZmRlZiBTVlIzCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTVlIzIik7Ci0jZW5kaWYgLyogU1ZSMyAqLwotI2lm ZGVmIFNWUjQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNWUjQiKTsKLSNl bmRpZiAvKiBTVlI0ICovCi0jaWZkZWYgREVMTF9TVlI0Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJERUxMX1NWUjQiKTsKLSNlbmRpZiAvKiBERUxMX1NWUjQgKi8KLSNpZmRl ZiBJQ0xfU1ZSNAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSUNMX1NWUjQi KTsKLSNlbmRpZiAvKiBJQ0xfU1ZSNCAqLwotI2lmZGVmIE9TRgotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiT1NGIik7Ci0jZW5kaWYgLyogT1NGICovCi0jaWZkZWYgT1NGMQot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiT1NGMSIpOwotI2VuZGlmIC8qIE9T RjEgKi8KLSNpZmRlZiBfX09TRgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi X19PU0YiKTsKLSNlbmRpZiAvKiBfX09TRiAqLwotI2lmZGVmIF9fT1NGX18KLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fT1NGX18iKTsKLSNlbmRpZiAvKiBfX09TRl9fICov Ci0jaWZkZWYgX19vc2ZfXwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19v c2ZfXyIpOwotI2VuZGlmIC8qIF9fb3NmX18gKi8KLSNpZmRlZiBfX09TRjEKLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fT1NGMSIpOwotI2VuZGlmIC8qIF9fT1NGMSAqLwot I2lmZGVmIF9fT1NGMV9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX09T RjFfXyIpOwotI2VuZGlmIC8qIF9fT1NGMV9fICovCi0jaWZkZWYgUFRYCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJQVFgiKTsKLSNlbmRpZiAvKiBQVFggKi8KLSNpZmRlZiBQ T1NJWAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiUE9TSVgiKTsKLSNlbmRp ZiAvKiBQT1NJWCAqLwotI2lmZGVmIEJTRDQ0T1JQT1NJWAotICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiQlNENDRPUlBPU0lYIik7Ci0jZW5kaWYgLyogQlNENDRPUlBPU0lYICov Ci0jaWZkZWYgU1ZPUlBPU0lYCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJT Vk9SUE9TSVgiKTsKLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLSNpZmRlZiBTVlI0T1JQT1NJWAot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1ZSNE9SUE9TSVgiKTsKLSNlbmRp ZiAvKiBTVlI0T1JQT1NJWCAqLwotI2lmZGVmIE9TMk9SVk1TCi0gICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJPUzJPUlZNUyIpOwotI2VuZGlmIC8qIE9TMk9SVk1TICovCi0jaWZk ZWYgT1MyT1JVTklYCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJPUzJPUlVO SVgiKTsKLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSNpZmRlZiBWTVNPUlVOSVgKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlZNU09SVU5JWCIpOwotI2VuZGlmIC8qIFZNU09S VU5JWCAqLwotI2lmZGVmIFZNUzY0QklUCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJWTVM2NEJJVCIpOwkvKiBWTVMgb24gQWxwaGEgb3IgSUE2NCAqLwotI2VuZGlmIC8qIFZN UzY0QklUICovCi0jaWZkZWYgVk1TSTY0Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJWTVNJNjQiKTsgLyogVk1TIG9uIElBNjQgKi8KLSNlbmRpZiAvKiBWTVNJNjQgKi8KLSNp ZmRlZiBfUE9TSVhfU09VUkNFCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJf UE9TSVhfU09VUkNFIik7Ci0jZW5kaWYgLyogX1BPU0lYX1NPVVJDRSAqLwotI2lmZGVmIF9YT1BF Tl9TT1VSQ0UKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9YT1BFTl9TT1VS Q0UiKTsKLSNlbmRpZgotI2lmZGVmIF9BTExfU09VUkNFCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJfQUxMX1NPVVJDRSIpOwotI2VuZGlmCi0jaWZkZWYgX1NWSUQzCi0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfU1ZJRDMiKTsKLSNlbmRpZiAvKiBfU1ZJ RDMgKi8KLSNpZmRlZiBQbGFuOQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi UGxhbjkiKTsKLSNlbmRpZiAvKiBQbGFuOSAqLwotI2lmZGVmIFNPTEFSSVMKLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNPTEFSSVMiKTsKLSNpZmRlZiBTT0xBUklTMjQKLSAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNPTEFSSVMyNCIpOwotI2VuZGlmIC8q IFNPTEFSSVMyNCAqLwotI2lmZGVmIFNPTEFSSVMyNQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiU09MQVJJUzI1Iik7Ci0jZW5kaWYgLyogU09MQVJJUzI1ICovCi0jaWZkZWYg U09MQVJJUzI2Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTT0xBUklTMjYi KTsKLSNlbmRpZiAvKiBTT0xBUklTMjYgKi8KLSNpZmRlZiBTT0xBUklTNwotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiU09MQVJJUzciKTsKLSNlbmRpZiAvKiBTT0xBUklTNyAq LwotI2lmZGVmIFNPTEFSSVM4Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJT T0xBUklTOCIpOwotI2VuZGlmIC8qIFNPTEFSSVM4ICovCi0jaWZkZWYgU09MQVJJUzkKLSAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNPTEFSSVM5Iik7Ci0jZW5kaWYgLyogU09M QVJJUzkgKi8KLSNpZmRlZiBTT0xBUklTMTAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIlNPTEFSSVMxMCIpOwotI2VuZGlmIC8qIFNPTEFSSVMxMCAqLwotI2VuZGlmIC8qIFNP TEFSSVMgKi8KLQotI2lmZGVmIFNVTk9TNAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiU1VOT1M0Iik7Ci0jZW5kaWYgLyogU1VOT1M0ICovCi0jaWZkZWYgU1VONFM1Ci0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTVU40UzUiKTsKLSNlbmRpZiAvKiBTVU40 UzUgKi8KLSNpZmRlZiBJUklYCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJJ UklYIik7Ci0jZW5kaWYgLyogSVJJWCAqLwotI2lmZGVmIEVOQ09SRQotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiRU5DT1JFIik7Ci0jZW5kaWYgLyogRU5DT1JFICovCi0jaWZk ZWYgdWx0cml4Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJ1bHRyaXgiKTsK LSNlbmRpZgotI2lmZGVmIHN4YUU1MAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwic3hhRTUwIik7Ci0jZW5kaWYKLSNpZmRlZiBtaXBzCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJtaXBzIik7Ci0jZW5kaWYKLSNpZmRlZiBNSVBTCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNSVBTIik7Ci0jZW5kaWYKLSNpZmRlZiB2YXgKLSAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksInZheCIpOwotI2VuZGlmCi0jaWZkZWYgVkFY Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJWQVgiKTsKLSNlbmRpZgotI2lm ZGVmIGFscGhhCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJhbHBoYSIpOwot I2VuZGlmCi0jaWZkZWYgQUxQSEEKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IkFMUEhBIik7Ci0jZW5kaWYKLSNpZmRlZiBfX0FMUEhBCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJfX0FMUEhBIik7Ci0jZW5kaWYKLSNpZmRlZiBfX2FscGhhCi0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX2FscGhhIik7Ci0jZW5kaWYKLSNpZmRlZiBf X0FYUAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19BWFAiKTsKLSNlbmRp ZgotI2lmZGVmIEFYUAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQVhQIik7 Ci0jZW5kaWYKLSNpZmRlZiBheHAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks ImF4cCIpOwotI2VuZGlmCi0jaWZkZWYgX19BTFBIQV9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJfX0FMUEhBX18iKTsKLSNlbmRpZgotI2lmZGVmIF9fYWxwaGFfXwotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19hbHBoYV9fIik7Ci0jZW5kaWYKLSNp ZmRlZiBzdW4KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksInN1biIpOwotI2Vu ZGlmCi0jaWZkZWYgc3VuMwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwic3Vu MyIpOwotI2VuZGlmCi0jaWZkZWYgc3VuMzg2Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJzdW4zODYiKTsKLSNlbmRpZgotI2lmZGVmIF9TVU4KLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIl9TVU4iKTsKLSNlbmRpZgotI2lmZGVmIHN1bjQKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksInN1bjQiKTsKLSNlbmRpZgotI2lmZGVmIHNwYXJj Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJzcGFyYyIpOwotI2VuZGlmCi0j aWZkZWYgX0NSQVkKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9DUkFZIik7 Ci0jZW5kaWYgLyogX0NSQVkgKi8KLSNpZmRlZiBORVhUMzMKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIk5FWFQzMyIpOwotI2VuZGlmCi0jaWZkZWYgTkVYVAotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTkVYVCIpOwotI2VuZGlmCi0jaWZkZWYgTmVYVAot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTmVYVCIpOwotI2VuZGlmCi0jaWZk ZWYgTUFDSAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTUFDSCIpOwotI2Vu ZGlmCi0KLSNpZmRlZiBNQUNPU1gKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks Ik1BQ09TWCIpOwotI2VuZGlmCi0jaWZkZWYgTUFDT1NYMTAKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIk1BQ09TWDEwIik7Ci0jZW5kaWYKLSNpZmRlZiBNQUNPU1gxMDMKLSAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1BQ09TWDEwZSIpOwotI2VuZGlmCi0j aWZkZWYgQ09NTUVOVAotLyogbm90IHVzZWQgKi8KLSNpZmRlZiBNQUNPU1gxMDMKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1BQ09TWDEwMyIpOwotI2VuZGlmCi0jZW5kaWYJ LyogQ09NTUVOVCAqLwotCi0jaWZkZWYgc2dpCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJzZ2kiKTsKLSNlbmRpZgotI2lmZGVmIE1fU1lTNQotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiTV9TWVM1Iik7Ci0jZW5kaWYKLSNpZmRlZiBfX1NZU1RFTV9GSVZF Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX1NZU1RFTV9GSVZFIik7Ci0j ZW5kaWYKLSNpZmRlZiBzeXNWCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJz eXNWIik7Ci0jZW5kaWYKLSNpZmRlZiBNX1hFTklYICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTQ08gWGVuaXggViBhbmQgVU5JWC8zODYgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIk1fWEVOSVgiKTsKLSNlbmRpZgotI2lmZGVmIE1fVU5JWCAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNDTyBVTklYICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJNX1VOSVgiKTsKLSNlbmRpZgotI2lmZGVmIF9NX1VOSVggICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNDTyBVTklYIDMuMnY0ID0gT0RUIDIuMCAqLwotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiX01fVU5JWCIpOwotI2VuZGlmCi0jaWZkZWYgQ0tfU0NPVjUK LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1NDT1Y1Iik7Ci0jZW5kaWYK LSNpZmRlZiBTQ09fT1NSNTA0Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJT Q09fT1NSNTA0Iik7Ci0jZW5kaWYKLSNpZmRlZiBNX0lBNjQKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIk1fSUE2NCIpOwotI2VuZGlmCi0jaWZkZWYgX01fSUE2NAotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX01fSUE2NCIpOwotI2VuZGlmCi0jaWZkZWYg aWE2NAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiaWE2NCIpOwotI2VuZGlm Ci0jaWZkZWYgX2lhNjQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9pYTY0 Iik7Ci0jZW5kaWYKLSNpZmRlZiBfaWE2NF8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIl9pYTY0XyIpOwotI2VuZGlmCi0jaWZkZWYgX19pYTY0Ci0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJfX2lhNjQiKTsKLSNlbmRpZgotI2lmZGVmIE1fSTY4NgotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTV9JNjg2Iik7Ci0jZW5kaWYKLSNpZmRl ZiBfTV9JNjg2Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfTV9JNjg2Iik7 Ci0jZW5kaWYKLSNpZmRlZiBpNjg2Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJpNjg2Iik7Ci0jZW5kaWYKLSNpZmRlZiBNX0k1ODYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIk1fSTU4NiIpOwotI2VuZGlmCi0jaWZkZWYgX01fSTU4NgotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX01fSTU4NiIpOwotI2VuZGlmCi0jaWZkZWYgaTU4 NgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiaTU4NiIpOwotI2VuZGlmCi0j aWZkZWYgTV9JNDg2Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNX0k0ODYi KTsKLSNlbmRpZgotI2lmZGVmIF9NX0k0ODYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIl9NX0k0ODYiKTsKLSNlbmRpZgotI2lmZGVmIGk0ODYKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksImk0ODYiKTsKLSNlbmRpZgotI2lmZGVmIE1fSTM4NgotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTV9JMzg2Iik7Ci0jZW5kaWYKLSNpZmRlZiBf TV9JMzg2Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfTV9JMzg2Iik7Ci0j ZW5kaWYKLSNpZmRlZiBpMzg2Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJp Mzg2Iik7Ci0jZW5kaWYKLSNpZmRlZiBfX2kzODYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIl9faTM4NiIpOwotI2VuZGlmCi0jaWZkZWYgX194ODYKLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIl9feDg2Iik7Ci0jZW5kaWYKLSNpZmRlZiBfX2FtZDY0Ci0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX2FtZDY0Iik7Ci0jZW5kaWYKLSNp ZmRlZiBfSUxQMzIKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9JTFAzMiIp OwotI2VuZGlmCi0jaWZkZWYgX0lMUDY0Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJfSUxQNjQiKTsKLSNlbmRpZgotI2lmZGVmIF9MUDMyCi0gICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJfTFAzMiIpOwotI2VuZGlmCi0jaWZkZWYgX0xQNjQKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9MUDY0Iik7Ci0jZW5kaWYKLSNpZmRlZiBfX0xQ MzJfXwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19MUDMyX18iKTsKLSNl bmRpZgotI2lmZGVmIF9fTFA2NF9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJfX0xQNjRfXyIpOwotI2VuZGlmCi0jaWZkZWYgX1hHUDRfMgotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiX1hHUDRfMiIpOwotI2VuZGlmCi0jaWZkZWYgX19wcGNfXwotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19wcGNfXyIpOwotI2VuZGlmCi0jaWZk ZWYgX19wcGMzMl9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX3BwYzMy X18iKTsKLSNlbmRpZgotI2lmZGVmIF9fcHBjNjRfXwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiX19wcGM2NF9fIik7Ci0jZW5kaWYKLSNpZmRlZiBDS182NEJJVAotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfNjRCSVQiKTsKLSNlbmRpZgotI2lmZGVm IGkyODYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksImkyODYiKTsKLSNlbmRp ZgotI2lmZGVmIE1fSTI4NgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTV9J Mjg2Iik7Ci0jZW5kaWYKLSNpZmRlZiBfX3NwYXJjCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJfX3NwYXJjIik7Ci0jZW5kaWYKLSNpZmRlZiBfX3NwYXJjdjgKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fc3BhcmN2OCIpOwotI2VuZGlmCi0jaWZkZWYg X19zcGFyY3Y5Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX3NwYXJjdjki KTsKLSNlbmRpZgotI2lmZGVmIG1jNjgwMDAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIm1jNjgwMDAiKTsKLSNlbmRpZgotI2lmZGVmIG1jNjgwMTAKLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIm1jNjgwMTAiKTsKLSNlbmRpZgotI2lmZGVmIG1jNjgwMjAK LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIm1jNjgwMjAiKTsKLSNlbmRpZgot I2lmZGVmIG1jNjgwMzAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIm1jNjgw MzAiKTsKLSNlbmRpZgotI2lmZGVmIG1jNjgwNDAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIm1jNjgwNDAiKTsKLSNlbmRpZgotI2lmZGVmIE1fNjgwMDAKLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1fNjgwMDAiKTsKLSNlbmRpZgotI2lmZGVmIE1fNjgw MTAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1fNjgwMTAiKTsKLSNlbmRp ZgotI2lmZGVmIE1fNjgwMjAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1f NjgwMjAiKTsKLSNlbmRpZgotI2lmZGVmIE1fNjgwMzAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIk1fNjgwMzAiKTsKLSNlbmRpZgotI2lmZGVmIE1fNjgwNDAKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1fNjgwNDAiKTsKLSNlbmRpZgotI2lmZGVmIG02 OGsKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIm02OGsiKTsKLSNlbmRpZgot I2lmZGVmIG04OGsKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIm04OGsiKTsK LSNlbmRpZgotI2lmZGVmIHBkcDExCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJwZHAxMSIpOwotI2VuZGlmCi0jaWZkZWYgaUFQWAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiaUFQWCIpOwotI2VuZGlmCi0jaWZkZWYgaHB1eAotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiaHB1eCIpOwotI2VuZGlmCi0jaWZkZWYgX19ocHV4Ci0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX2hwdXgiKTsKLSNlbmRpZgotI2lmZGVm IF9faHA5MDAwczgwMAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19ocDkw MDBzODAwIik7Ci0jZW5kaWYKLSNpZmRlZiBfX2hwOTAwMHM3MDAKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIl9faHA5MDAwczcwMCIpOwotI2VuZGlmCi0jaWZkZWYgX19ocDkw MDBzNTAwCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX2hwOTAwMHM1MDAi KTsKLSNlbmRpZgotI2lmZGVmIF9faHA5MDAwczMwMAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiX19ocDkwMDBzMzAwIik7Ci0jZW5kaWYKLSNpZmRlZiBfX2hwOTAwMHMyMDAK LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9faHA5MDAwczIwMCIpOwotI2Vu ZGlmCi0jaWZkZWYgQUlYCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJBSVgi KTsKLSNlbmRpZgotI2lmZGVmIF9BSVhGUwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiX0FJWEZTIik7Ci0jZW5kaWYKLSNpZmRlZiB1MzcwCi0gICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJ1MzcwIik7Ci0jZW5kaWYKLSNpZmRlZiB1M2IKLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksInUzYiIpOwotI2VuZGlmCi0jaWZkZWYgdTNiMgotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwidTNiMiIpOwotI2VuZGlmCi0jaWZkZWYg bXVsdGltYXgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIm11bHRpbWF4Iik7 Ci0jZW5kaWYKLSNpZmRlZiBiYWxhbmNlCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJiYWxhbmNlIik7Ci0jZW5kaWYKLSNpZmRlZiBpYm1ydAotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiaWJtcnQiKTsKLSNlbmRpZgotI2lmZGVmIF9JQk1SVAotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX0lCTVJUIik7Ci0jZW5kaWYKLSNpZmRlZiBp Ym1yczYwMDAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksImlibXJzNjAwMCIp OwotI2VuZGlmCi0jaWZkZWYgX0FJWAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiX0FJWCIpOwotI2VuZGlmIC8qIF9BSVggKi8KLSNpZmRlZiBfSUJNUjIKLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9JQk1SMiIpOwotI2VuZGlmCi0jaWZkZWYgVU5JWFdB UkUKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlVOSVhXQVJFIik7Ci0jZW5k aWYKLSNpZmRlZiBRTlgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlFOWCIp OwotI2lmZGVmIF9fUU5YX18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9f UU5YX18iKTsKLSNpZmRlZiBfXzE2QklUX18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIl9fMTZCSVRfXyIpOwotI2VuZGlmCi0jaWZkZWYgQ0tfUU5YMTYKLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1FOWDE2Iik7Ci0jZW5kaWYKLSNpZmRlZiBfXzMy QklUX18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fMzJCSVRfXyIpOwot I2VuZGlmCi0jaWZkZWYgQ0tfUU5YMzIKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIkNLX1FOWDMyIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBfX1FOWF9fICovCi0jZW5kaWYgLyog UU5YICovCi0KLSNpZmRlZiBRTlg2Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJRTlg2Iik7Ci0jZW5kaWYgLyogUU5YNiAqLwotCi0jaWZkZWYgTkVVVFJJTk8KLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5FVVRSSU5PIik7Ci0jZW5kaWYgLyogTkVVVFJJ Tk8gKi8KLQotI2lmZGVmIF9fU1RSSUNUX0JTRF9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJfX1NUUklDVF9CU0RfXyIpOwotI2VuZGlmCi0jaWZkZWYgX19TVFJJQ1RfQU5T SV9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX1NUUklDVF9BTlNJX18i KTsKLSNlbmRpZgotI2lmZGVmIF9BTlNJX0NfU09VUkNFCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJfQU5TSV9DX1NPVVJDRSIpOwotI2VuZGlmCi0jaWZkZWYgX19TVERDX18K LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fU1REQ19fIik7Ci0jZW5kaWYK LSNpZmRlZiBjcGx1c3BsdXMKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksImNw bHVzcGx1cyIpOwotI2VuZGlmCi0jaWZkZWYgX19ERUNDCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJfX0RFQ0MiKTsKLSNpZmRlZiBfX0RFQ0NfVkVSCi0gICAgc3ByaW50Zihs aW5lLCJfX0RFQ0NfVkVSPSVkIixfX0RFQ0NfVkVSKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBfX0RFQ0NfVkVSICovCi0j ZW5kaWYgLyogX19ERUNDICovCi0jaWZkZWYgX19DUlRMX1ZFUgotICAgIHNwcmludGYobGluZSwi X19DUlRMX1ZFUj0lZCIsX19DUlRMX1ZFUik7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogX19DUlRMX1ZFUiAqLwotI2lmZGVm IF9fR05VQ19fICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdjYyBpbiBhbnNpIG1vZGUgKi8K LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fR05VQ19fIik7Ci0jZW5kaWYK LSNpZmRlZiBHTlVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnY2MgaW4gdHJhZGl0 aW9uYWwgbW9kZSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiR05VQyIp OwotI2VuZGlmCi0jaWZkZWYgX19FR0NTX18gICAgICAgICAgICAgICAgICAgICAgICAgLyogZWdj cyBpbiBhbnNpIG1vZGUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9f RUdDU19fIik7Ci0jZW5kaWYKLSNpZmRlZiBfX2VnY3NfXyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBlZ2NzIGluIGFuc2kgbW9kZSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiX19lZ2NzX18iKTsKLSNlbmRpZgotI2lmZGVmIF9fV0FUQ09NQ19fCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX1dBVENPTUNfXyIpOwotI2VuZGlmCi0jaWZkZWYg Q0tfQU5TSUMKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX0FOU0lDIik7 Ci0jZW5kaWYKLSNpZmRlZiBDS19BTlNJTElCUwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiQ0tfQU5TSUxJQlMiKTsKLSNlbmRpZgotI2lmZGVmIENLQ09OSU5UQjRDQgotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tDT05JTlRCNENCIik7Ci0jZW5kaWYg LyogQ0tDT05JTlRCNENCICovCi0jaWZkZWYgTk9URVJNQ0FQCi0gICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJOT1RFUk1DQVAiKTsKLSNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KLSNp ZmRlZiBfX0dMSUJDX18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fR0xJ QkNfXyIpOwotI2VuZGlmCi0jaWZkZWYgX1NDX0pPQl9DT05UUk9MCi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJfU0NfSk9CX0NPTlRST0wiKTsKLSNlbmRpZgotI2lmZGVmIF9Q T1NJWF9KT0JfQ09OVFJPTAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX1BP U0lYX0pPQl9DT05UUk9MIik7Ci0jZW5kaWYKLSNpZmRlZiBTSUdfSQotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiU0lHX0kiKTsKLSNlbmRpZiAvKiBTSUdfSSAqLwotI2lmZGVm IFNJR19WCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTSUdfViIpOwotI2Vu ZGlmIC8qIFNJR19WICovCi0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0gICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJDS19QT1NJWF9TSUciKTsKLSNlbmRpZgotI2lmZGVmIFNWUjNKQwot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1ZSM0pDIik7Ci0jZW5kaWYKLSNp ZmRlZiBfMzg2QlNECi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfMzg2QlNE Iik7Ci0jZW5kaWYKLSNpZmRlZiBfQlNECi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJfQlNEIik7Ci0jZW5kaWYKLSNpZmRlZiBVU0VfTUVNQ1BZCi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJVU0VfTUVNQ1BZIik7Ci0jZW5kaWYgLyogVVNFX01FTUNQWSAq LwotI2lmZGVmIFVTRV9MU1RBVAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi VVNFX0xTVEFUIik7Ci0jZW5kaWYgLyogVVNFX0xTVEFUICovCi0jaWZkZWYgVEVSTUlPWAotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVEVSTUlPWCIpOwotI2VuZGlmIC8qIFRF Uk1JT1ggKi8KLSNpZmRlZiBTVEVSTUlPWAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiU1RFUk1JT1giKTsKLSNlbmRpZiAvKiBTVEVSTUlPWCAqLwotI2lmZGVmIENLX0NVUlNF UwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfQ1VSU0VTIik7Ci0jZW5k aWYgLyogQ0tfQ1VSU0VTICovCi0jaWZkZWYgQ0tfTkVXVEVSTQotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiQ0tfTkVXVEVSTSIpOwotI2VuZGlmIC8qIENLX05FV1RFUk0gKi8K LSNpZmRlZiBDS19XUkVGUkVTSAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi Q0tfV1JFRlJFU0giKTsKLSNlbmRpZiAvKiBDS19XUkVGUkVTSCAqLwotI2lmZGVmIENLX1BDVF9C QVIKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1BDVF9CQVIiKTsKLSNl bmRpZiAvKiBDS19QQ1RfQkFSICovCi0jaWZkZWYgQ0tfRFRSQ0QKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIkNLX0RUUkNEIik7Ci0jZW5kaWYgLyogQ0tfRFRSQ0QgKi8KLSNp ZmRlZiBDS19EVFJDVFMKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX0RU UkNUUyIpOwotI2VuZGlmIC8qIENLX0RUUkNUUyAqLwotI2lmZGVmIENLX1JUU0NUUwotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfUlRTQ1RTIik7Ci0jZW5kaWYgLyogQ0tf UlRTQ1RTICovCi0jaWZkZWYgUE9TSVhfQ1JUU0NUUwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiUE9TSVhfQ1JUU0NUUyIpOwotI2VuZGlmIC8qIFBPU0lYX0NSVFNDVFMgKi8K LSNpZmRlZiBGSVhDUlRTQ1RTCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJG SVhDUlRTQ1RTIik7Ci0jZW5kaWYgLyogRklYQ1JUU0NUUyAqLwotI2lmZGVmIEhXUEFSSVRZCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJIV1BBUklUWSIpOwotI2VuZGlmIC8q IEhXUEFSSVRZICovCi0jaWZkZWYgQ0tfU1lTSU5JCi0jaWZkZWYgQ0tfSU5JX0EKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX0lOSV9BIik7Ci0gICAgY2ttYWttc2cobGlu ZSxMSU5CVUZTSVosIkNLX1NZU0lOST1cIiIsQ0tfU1lTSU5JLCJcIiIsTlVMTCk7Ci0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2Vsc2UKLSNpZmRlZiBDS19JTklf QgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfSU5JX0IiKTsKLSAgICBj a21ha21zZyhsaW5lLExJTkJVRlNJWiwiQ0tfU1lTSU5JPVwiIixDS19TWVNJTkksIlwiIixOVUxM KTsKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZWxzZQotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfU1lTSU5JIik7Ci0jZW5kaWYgLyog Q0tfSU5JX0IgKi8KLSNlbmRpZiAvKiBDS19JTklfQSAqLwotI2VuZGlmIC8qIENLX0RTWVNJTkkg Ki8KLSNpZmRlZiBDS19EU1lTSU5JCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJDS19EU1lTSU5JIik7Ci0jZW5kaWYgLyogQ0tfRFNZU0lOSSAqLwotI2lmZGVmIENLX1RUR1dT SVoKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1RUR1dTSVoiKTsKLSNl bmRpZiAvKiBDS19UVEdXU0laICovCi0jaWZkZWYgQ0tfTkFXUwotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiQ0tfTkFXUyIpOwotI2VuZGlmIC8qIENLX05BV1MgKi8KLSNpZmRl ZiBNRE1IVVAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1ETUhVUCIpOwot I2VuZGlmIC8qIE1ETUhVUCAqLwotI2lmZGVmIEhVUF9DTE9TRV9QT1NJWAotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiSFVQX0NMT1NFX1BPU0lYIik7Ci0jZW5kaWYgLyogSFVQ X0NMT1NFX1BPU0lYICovCi0jaWZkZWYgTk9fSFVQX0NMT1NFX1BPU0lYCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT19IVVBfQ0xPU0VfUE9TSVgiKTsKLSNlbmRpZiAvKiBO T19IVVBfQ0xPU0VfUE9TSVggKi8KLSNpZmRlZiBEQ01EQlVGCi0gICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJEQ01EQlVGIik7Ci0jZW5kaWYgLyogRENNREJVRiAqLwotI2lmZGVm IENLX1JFQ0FMTAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfUkVDQUxM Iik7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0jaWZkZWYgQlJPV1NFUgotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiQlJPV1NFUiIpOwotI2VuZGlmIC8qIEJST1dTRVIgKi8K LSNpZmRlZiBDTFNPUE4KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNMU09Q TiIpOwotI2VuZGlmIC8qIENMU09QTiAqLwotI2lmZGVmIFNUUkFUVVMKLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIlNUUkFUVVMiKTsKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0j aWZkZWYgX19WT1NfXwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19WT1Nf XyIpOwotI2VuZGlmIC8qIF9fVk9TX18gKi8KLSNpZmRlZiBTVFJBVFVTWDI1Ci0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTVFJBVFVTWDI1Iik7Ci0jZW5kaWYgLyogU1RSQVRV U1gyNSAqLwotI2lmZGVmIE9TMk1PVVNFCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJPUzJNT1VTRSIpOwotI2VuZGlmIC8qIE9TMk1PVVNFICovCi0jaWZkZWYgQ0tfUkVYWAot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfUkVYWCIpOwotI2VuZGlmIC8q IENLX1JFWFggKi8KLSNpZmRlZiBDS19USU1FUlMKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIkNLX1RJTUVSUyIpOwotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotI2lmZGVmIFRU U1BETElTVAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVFRTUERMSVNUIik7 Ci0jZW5kaWYgLyogVFRTUERMSVNUICovCi0jaWZkZWYgQ0tfUEVSTVMKLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1BFUk1TIik7Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8K LSNpZmRlZiBDS1RVTklORwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tU VU5JTkciKTsKLSNlbmRpZiAvKiBDS1RVTklORyAqLwotI2lmZGVmIE5FV0ZUUAotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTkVXRlRQIik7Ci0jZW5kaWYgLyogTkVXRlRQICov Ci0jaWZkZWYgU1lTRlRQCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTWVNG VFAiKTsKLSNlbmRpZiAvKiBTWVNGVFAgKi8KLSNpZmRlZiBOT0ZUUAotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiTk9GVFAiKTsKLSNlbmRpZiAvKiBOT0ZUUCAqLwotI2lmZGVm IENLSFRUUAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tIVFRQIik7Ci0j ZW5kaWYgLyogQ0tIVFRQICovCi0jaWZkZWYgTk9IVFRQCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJOT0hUVFAiKTsKLSNlbmRpZiAvKiBOT0hUVFAgKi8KLSNpZmRlZiBDS1JP T1QKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLUk9PVCIpOwotI2VuZGlm IC8qIENLUk9PVCAqLwotI2lmZGVmIENLUkVBTFBBVEgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIkNLUkVBTFBBVEgiKTsKLSNlbmRpZiAvKiBDS1JFQUxQQVRIICovCi0jaWZk ZWYgU1RSRUFNSU5HCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTVFJFQU1J TkciKTsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSNpZmRlZiBVTlBSRUZJWFpFUk8KLSAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlVOUFJFRklYWkVSTyIpOwotI2VuZGlmIC8q IFVOUFJFRklYWkVSTyAqLwotI2lmZGVmIENLUkVHRVgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIkNLUkVHRVgiKTsKLSNlbmRpZiAvKiBDS1JFR0VYICovCi0jaWZkZWYgWlhS RVdJTkQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlpYUkVXSU5EIik7Ci0j ZW5kaWYgLyogWlhSRVdJTkQgKi8KLSNpZmRlZiBDS1NZU0xPRwotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiQ0tTWVNMT0ciKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotI2lm ZGVmIFNZU0xPR0xFVkVMCi0gICAgc3ByaW50ZihsaW5lLCJTWVNMT0dMRVZFTD0lZCIsU1lTTE9H TEVWRUwpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxp bmUpOwotI2VuZGlmIC8qIFNZU0xPR0xFVkVMICovCi0jaWZkZWYgTk9TRVhQCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT1NFWFAiKTsKLSNlbmRpZiAvKiBOT1NFWFAgKi8K LSNpZmRlZiBDS0xFQVJOCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS0xF QVJOIik7Ci0jZWxzZQotI2lmZGVmIE5PTE9FQVJOCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJOT0xPRUFSTiIpOwotI2VuZGlmIC8qIE5PTE9FQVJOICovCi0jZW5kaWYgLyog Q0tMRUFSTiAqLwotCi0jaWZkZWYgTk9GTE9BVAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiTk9GTE9BVCIpOwotI2Vsc2UKLSNpZmRlZiBGTkZMT0FUCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJGTkZMT0FUIik7Ci0jZW5kaWYgLyogRk5GTE9BVCAqLwot I2lmZGVmIENLRkxPQVQKLSNpZmRlZiBHRlRJTUVSCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJHRlRJTUVSIik7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotI2lmZGVmIENLRkxP QVRfUwotICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLCJDS0ZMT0FUPSIsQ0tGTE9BVF9TLE5V TEwsTlVMTCk7Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2Vs c2UKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLRkxPQVQiKTsKLSNlbmRp ZiAvKiBDS0ZMT0FUX1MgKi8KLSNlbmRpZiAvKiBDS0ZMT0FUICovCi0jZW5kaWYgLyogTk9GTE9B VCAqLwotCi0jaWZkZWYgU1NICi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJT U0giKTsKLSNlbmRpZiAvKiBTU0ggKi8KLSNpZmRlZiBORVRETEwKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIk5FVERMTCIpOwotI2VuZGlmIC8qIE5FVERMTCAqLwotI2lmZGVm IE5FVEZJTEUKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5FVEZJTEUiKTsK LSNlbmRpZiAvKiBORVRGSUxFICovCi0jaWZkZWYgQ0tfVEFQSQotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiQ0tfVEFQSSIpOwotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSNpZmRl ZiBDS19TU0wKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1NTTCIpOwot I2lmZGVmIE9QRU5TU0xfVkVSU0lPTl9URVhUCi0gICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVos Ci0JICAgICAiT1BFTlNTTF9WRVJTSU9OX1RFWFQ9IiwiXCIiLE9QRU5TU0xfVkVSU0lPTl9URVhU LCJcIiIpOwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRp ZgkvKiBPUEVOU1NMX1ZFUlNJT05fVEVYVCAqLwotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgIGRl YnVnKEYxMDEsImluaXRvcHRsaXN0IG5vcHRsaXN0IiwiIixub3B0bGlzdCk7Ci0gICAgc2hfc29y dChvcHRsaXN0LE5VTEwsbm9wdGxpc3QsMCwwLDApOwotfQotCi1pbnQKLXNob2ZlYSgpIHsKLSAg ICBpbnQgaTsKLSAgICBpbnQgZmxhZyA9IDA7Ci0gICAgaW50IGxpbmVzID0gMTsKLSNpZmRlZiBG TkZMT0FUCi0gICAgZXh0ZXJuIGludCBmcF9kaWdpdHMsIGZwX3JvdW5kaW5nOwotI2VuZGlmIC8q IEZORkxPQVQgKi8KLSAgICBleHRlcm4gaW50IGJ5dGVvcmRlcjsKLSAgICBwcmludGYoIiVzXG4i LHZlcnNpbyk7Ci0gICAgaWYgKGluc2VydmVyKQotICAgICAgcmV0dXJuKDEpOwotCi0gICAgZGVi dWcoRjEwMSwic2hvZmVhIE5PUFRMSVNUIiwiIixOT1BUTElTVCk7Ci0gICAgaW5pdG9wdGxpc3Qo KTsKLSAgICBkZWJ1ZyhGMTAxLCJzaG9mZWEgbm9wdGxpc3QiLCIiLG5vcHRsaXN0KTsKLSNpZmRl ZiBPUzIKLSNpZmRlZiBOVAotI2lmZGVmIF9NX0FMUEhBCi0gICAgcHJpbnRmKCJNaWNyb3NvZnQg V2luZG93cyBPcGVyYXRpbmcgU3lzdGVtcyBmb3IgQWxwaGEgQ1BVcy5cbiIpOwotI2Vsc2UgLyog X01fQUxQSEEgKi8KLSNpZmRlZiBfTV9QUEMKLSAgICBwcmludGYoIk1pY3Jvc29mdCBXaW5kb3dz IE9wZXJhdGluZyBTeXN0ZW1zIGZvciBQb3dlclBDIENQVXMuXG4iKTsKLSNlbHNlIC8qIF9NX1BQ QyAqLwotI2lmZGVmIF9NX01SWDAwMAotICAgIHByaW50ZigiTWljcm9zb2Z0IFdpbmRvd3MgT3Bl cmF0aW5nIFN5c3RlbXMgZm9yIE1JUFMgQ1BVcy5cbiIpOwotI2Vsc2UgLyogX01fTVJYMDAwICov Ci0jaWZkZWYgX01fSVg4NgotICAgIHByaW50ZigiTWljcm9zb2Z0IFdpbmRvd3MgT3BlcmF0aW5n IFN5c3RlbXMgZm9yIDMyLWJpdCBJbnRlbCBDUFVzLlxuIik7Ci0jZWxzZSAvKiBfTV9JWDg2ICov Ci0gICAgVU5LTk9XTiBXSU5ET1dTIFBMQVRGT1JNCi0jZW5kaWYgLyogX01fSVg4NiAqLwotI2Vu ZGlmIC8qIF9NX01SWDAwMCAqLwotI2VuZGlmIC8qIF9NX1BQQyAqLwotI2VuZGlmIC8qIF9NX0FM UEhBICovCi0jZWxzZSAvKiBOVCAqLwotI2lmZGVmIE1fSTI4NgotICAgIHByaW50ZigiSUJNIE9T LzIgMTYtYml0LlxuIik7Ci0jZWxzZQotICAgIHByaW50ZigiSUJNIE9TLzIgMzItYml0LlxuIik7 Ci0jZW5kaWYgLyogTV9JMjg2ICovCi0jZW5kaWYgLyogTlQgKi8KLSAgICBsaW5lcysrOwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgIHByaW50ZigiXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9y b3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQot ICAgIHByaW50ZigiTWFqb3Igb3B0aW9uYWwgZmVhdHVyZXMgaW5jbHVkZWQ6XG4iKTsKLSAgICBp ZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBl bHNlIGxpbmVzID0gMDsgfQotCi0gICAgaWYgKHNpemVvZihDS19PRkZfVCkgPT0gOCkgewotCXBy aW50ZigiIExhcmdlIGZpbGVzIGFuZCBsYXJnZSBpbnRlZ2VycyAoNjQgYml0cylcbiIpOwotICAg ICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgewotCSAgICBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsKLQl9Ci0gICAgfQotI2lmZGVmIE5FVENPTk4KLSAg ICBwcmludGYoIiBOZXR3b3JrIHN1cHBvcnQgKHR5cGUgU0hPVyBORVQgZm9yIGZ1cnRoZXIgaW5m bylcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgp KSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jaWZkZWYgSUtTX09QVElPTgotICAgIHBy aW50ZigiIFRlbG5ldCBLZXJtaXQgT3B0aW9uXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9y b3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQot I2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgIHBy aW50ZigiIFRlbG5ldCBBdXRoZW50aWNhdGlvbiBPcHRpb25cbiIpOwotICAgIGlmICgrK2xpbmVz ID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMg PSAwOyB9Ci0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBLUkI0Ci0jaWZkZWYgS1JCNQotICAg IHByaW50ZigiIEtlcmJlcm9zKFRNKSBJViBhbmQgS2VyYmVyb3MgViBhdXRoZW50aWNhdGlvblxu Iik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbHNlIC8qIEtSQjUgKi8KLSAgICBwcmludGYo IiBLZXJiZXJvcyhUTSkgSVYgYXV0aGVudGljYXRpb25cbiIpOwotICAgIGlmICgrK2xpbmVzID4g Y21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAw OyB9Ci0jZW5kaWYgLyogS1JCNSAqLwotI2Vsc2UgLyogS1JCNCAqLwotI2lmZGVmIEtSQjUKLSAg ICBwcmludGYoIiBLZXJiZXJvcyhUTSkgViBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgaWYgKCsr bGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBs aW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogS1JCNCAqLwotI2VuZGlm IC8qIENLX0tFUkJFUk9TICovCi0jaWZkZWYgQ0tfU1JQCi0gICAgcHJpbnRmKCIgU1JQKFRNKSAo U2VjdXJlIFJlbW90ZSBQYXNzd29yZCkgYXV0aGVudGljYXRpb25cbiIpOwotICAgIGlmICgrK2xp bmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGlu ZXMgPSAwOyB9Ci0jZW5kaWYgLyogQ0tfU1JQICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgcHJpbnRm KCIgU2VjdXJlIFNvY2tldHMgTGF5ZXIgKFNTTClcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 Ci0gICAgcHJpbnRmKCIgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpXG4iKTsKLSAgICBp ZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBl bHNlIGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIFNTSEJVSUxUSU4K LSAgICBwcmludGYoIiBTZWN1cmUgU2hlbGwgKFNTSCkgW2ludGVybmFsXVxuIik7Ci0gICAgaWYg KCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxz ZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZkZWYgU1NIQ01ECi0g ICAgcHJpbnRmKCIgU2VjdXJlIFNoZWxsIChTU0gpIFtleHRlcm5hbF1cbiIpOwotICAgIGlmICgr K2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2Ug bGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogU1NIQ01EICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgot ICAgIHByaW50ZigiIFRlbG5ldCBFbmNyeXB0aW9uIE9wdGlvblxuIik7Ci0gICAgaWYgKCsrbGlu ZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5l cyA9IDA7IH0KLSNpZmRlZiBDS19ERVMKLSAgICBwcmludGYoIiBUZWxuZXQgREVTIEVuY3J5cHRp b25cbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgp KSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogQ0tfREVTICovCi0jaWZk ZWYgQ0tfQ0FTVAotICAgIHByaW50ZigiIFRlbG5ldCBDQVNUIEVuY3J5cHRpb25cbiIpOwotICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogQ0tfQ0FTVCAqLwotCi0jaWZkZWYgQ0tfS0VS QkVST1MKLSNpZmRlZiBLUkI1Ci0jaWZkZWYgQUxMT1dfS1JCXzNERVNfRU5DUllQVAotICAgIHBy aW50ZigiIEtlcmJlcm9zIDNERVMvQUVTIFRlbG5ldCBFbmNyeXB0aW9uXG4iKTsKLSAgICBpZiAo KytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNl IGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIEFMTE9XX0tSQl8zREVTX0VOQ1JZUFQgKi8KLSNlbmRp ZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQotI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2lmZGVmIENLX0ZP UldBUkRfWAotICAgIHByaW50ZigiIFggV2luZG93cyBmb3J3YXJkaW5nXG4iKTsKLSAgICBpZiAo KytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNl IGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLwotI2lmZGVmIFROX0NPTVBP UlQKLSAgICBwcmludGYoIiBUZWxuZXQgUmVtb3RlIENvbSBQb3J0IENvbnRyb2wgT3B0aW9uXG4i KTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSNpZmRl ZiBDS19TT0NLUwotI2lmZGVmIENLX1NPQ0tTNQotICAgIHByaW50ZigiIFNPQ0tTIDVcbiIpOwot ICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4o MSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZWxzZSAvKiBDS19TT0NLUzUgKi8KLSAgICBwcmludGYo IiBTT0NLUyA0XG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIENLX1NPQ0tT NSAqLwotI2VuZGlmIC8qIENLX1NPQ0tTICovCi0jaWZkZWYgTkVXRlRQCi0gICAgcHJpbnRmKCIg QnVpbHQtaW4gRlRQIGNsaWVudFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAv KiBORVdGVFAgKi8KLSNpZmRlZiBDS0hUVFAKLSAgICBwcmludGYoIiBCdWlsdC1pbiBIVFRQIGNs aWVudFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBDS0hUVFAgKi8KLSNl bmRpZiAvKiBORVRDT05OICovCi0KLSNpZmRlZiBDS19SVFNDVFMKLSAgICBwcmludGYoIiBIYXJk d2FyZSBmbG93IGNvbnRyb2xcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyog Q0tfUlRTQ1RTICovCi0KLSNpZmRlZiBDS19YWVoKLSNpZmRlZiBYWVpfSU5URVJOQUwKLSAgICBw cmludGYoIiBCdWlsdC1pbiBYWVpNT0RFTSBwcm90b2NvbHNcbiIpOwotI2Vsc2UKLSAgICBwcmlu dGYoIiBFeHRlcm5hbCBYWVpNT0RFTSBwcm90b2NvbCBzdXBwb3J0XG4iKTsKLSNlbmRpZiAvKiBY WVpfSU5URVJOQUwgKi8KLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIENLX1hZWiAq LwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICBwcmludGYoIiBMYXRpbi0xIChXZXN0IEV1cm9wZWFu KSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9y b3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQot I2lmZGVmIExBVElOMgotICAgIHByaW50ZigiIExhdGluLTIgKEVhc3QgRXVyb3BlYW4pIGNoYXJh Y3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYg LyogTEFUSU4yICovCi0jaWZkZWYgQ1lSSUxMSUMKLSAgICBwcmludGYoIiBDeXJpbGxpYyAoUnVz c2lhbiwgVWtyYWluaWFuLCBldGMpIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOwotICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSNpZmRlZiBHUkVFSwot ICAgIHByaW50ZigiIEdyZWVrIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOwotICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVs c2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogR1JFRUsgKi8KLSNpZmRlZiBIRUJSRVcKLSAgICBw cmludGYoIiBIZWJyZXcgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvblxuIik7Ci0gICAgaWYgKCsr bGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBs aW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBIRUJSRVcgKi8KLSNpZmRlZiBLQU5KSQotICAgIHByaW50 ZigiIEphcGFuZXNlIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOwotICAgIGlmICgrK2xp bmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGlu ZXMgPSAwOyB9Ci0jZW5kaWYgLyogS0FOSkkgKi8KLSNpZmRlZiBVTklDT0RFCi0gICAgcHJpbnRm KCIgVW5pY29kZSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uXG4iKTsKLSAgICBpZiAoKytsaW5l cyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVz ID0gMDsgfQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSNpZmRlZiBDS09VTkkKLSAgICBpZiAoaXN1 bmljb2RlKCkpCi0gICAgICBwcmludGYoIiBVbmljb2RlIHN1cHBvcnQgZm9yIElTTy0yMDIyIFRl cm1pbmFsIEVtdWxhdGlvblxuIik7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCIgVW5pY29kZSB0 cmFuc2xhdGlvbiBmb3IgVGVybWluYWwgQ2hhcmFjdGVyLVNldHNcbiIpOwotICAgIGlmICgrK2xp bmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGlu ZXMgPSAwOyB9Ci0jZW5kaWYgLyogQ0tPVU5JICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0j aWZkZWYgTkVUUFRZCi0gICAgcHJpbnRmKCIgUHNldWRvdGVybWluYWwgY29udHJvbFxuIik7Ci0g ICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigx KTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBORVRQVFkgKi8KLQotI2lmZGVmIENLX1JF RElSCi0gICAgcHJpbnRmKCIgUkVESVJFQ1QgY29tbWFuZFxuIik7Ci0gICAgaWYgKCsrbGluZXMg PiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9 IDA7IH0KLSNlbmRpZiAvKiBDS19SRURJUiAqLwotCi0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgcHJp bnRmKCIgUkVTRU5EIGNvbW1hbmRcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYg LyogQ0tfUkVTRU5EICovCi0KLSNpZm5kZWYgTk9YRkVSCi0jaWZkZWYgQ0tfQ1VSU0VTCi0gICAg cHJpbnRmKCIgRnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXlcbiIpOwotICAgIGlmICgr K2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2Ug bGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0jZW5kaWYgLyogTk9YRkVSICov Ci0KLSNpZmRlZiBDS19TUEVFRAotICAgIHByaW50ZigiIENvbnRyb2wtY2hhcmFjdGVyIHVucHJl Zml4aW5nXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIENLX1NQRUVEICov Ci0KLSNpZmRlZiBTVFJFQU1JTkcKLSAgICBwcmludGYoIiBTdHJlYW1pbmdcbiIpOwotICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVs c2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0KLSNpZmRlZiBDS19BVVRP REwKLSAgICBwcmludGYoIiBBdXRvZG93bmxvYWRcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 Ci0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0KLSNpZmRlZiBPUzJNT1VTRQotICAgIHByaW50Zigi IE1vdXNlIHN1cHBvcnRcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogT1My TU9VU0UgKi8KLQotI2lmZGVmIENLX1JFWFgKLSAgICBwcmludGYoIiBSRVhYIHNjcmlwdCBsYW5n dWFnZSBpbnRlcmZhY2VcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogQ0tf UkVYWCAqLwotCi0jaWZkZWYgSUtTRAotI2lmZGVmIENLX0xPR0lOCi0gICAgcHJpbnRmKCIgSW50 ZXJuZXQgS2VybWl0IFNlcnZpY2Ugd2l0aCB1c2VyIGxvZ2luIHN1cHBvcnRcbiIpOwotI2Vsc2Ug LyogQ0tfTE9HSU4gKi8KLSAgICBwcmludGYoIiBJbnRlcm5ldCBLZXJtaXQgU2VydmljZSB3aXRo b3V0IHVzZXIgbG9naW4gc3VwcG9ydFxuIik7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICBp ZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBl bHNlIGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotICAgIHByaW50ZigiXG4iKTsK LSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHByaW50ZigiTWFqb3Igb3B0aW9uYWwgZmVhdHVy ZXMgbm90IGluY2x1ZGVkOlxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsg aWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLQotICAgIGlmIChz aXplb2YoQ0tfT0ZGX1QpIDw9IDQpIHsKLQlwcmludGYoIiBObyBsYXJnZSBmaWxlcyBvciBsYXJn ZSBpbnRlZ2Vyc1xuIik7Ci0gICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7Ci0J ICAgIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOwotCX0KLSAgICB9 Ci0KLSNpZmRlZiBOT1hGRVIKLSAgICBwcmludGYoIiBObyBmaWxlLXRyYW5zZmVyIHByb3RvY29s c1xuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkp IHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbHNlCi0jaWZu ZGVmIENLX0NVUlNFUwotI2lmbmRlZiBNQUMKLSAgICBwcmludGYoIiBObyBmdWxsc2NyZWVuIGZp bGUgdHJhbnNmZXIgZGlzcGxheVxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFn ID0gMTsKLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLQotI2lmZGVm IE5PU0VSVkVSCi0gICAgcHJpbnRmKCIgTm8gc2VydmVyIG1vZGVcbiIpOwotICAgIGlmICgrK2xp bmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGlu ZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQotI2lmbmRl ZiBDS19TUEVFRAotICAgIHByaW50ZigiIE5vIGNvbnRyb2wtY2hhcmFjdGVyIHVucHJlZml4aW5n XG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIENL X1NQRUVEICovCi0KLSNpZm5kZWYgU1RSRUFNSU5HCi0gICAgcHJpbnRmKCIgTm8gc3RyZWFtaW5n XG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIFNU UkVBTUlORyAqLwotCi0jaWZuZGVmIENLX0FVVE9ETAotICAgIHByaW50ZigiIE5vIGF1dG9kb3du bG9hZFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAv KiBDS19BVVRPREwgKi8KLQotI2lmbmRlZiBDS19YWVoKLSAgICBwcmludGYoIiBObyBidWlsdC1p biBYWVpNT0RFTSBwcm90b2NvbHNcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxh ZyA9IDE7Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0KLSNpZmRlZiBOT0ZMT0FUCi0gICAgcHJpbnRm KCIgTm8gZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpY1xuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBj bWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7 IH0KLSAgICBmbGFnID0gMTsKLSAgICBwcmludGYoIiBObyBTLUV4cHJlc3Npb25zIChMSVNQIGlu dGVycHJldGVyKVxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFh c2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNl bHNlCi0jaWZkZWYgTk9TRVhQCi0gICAgcHJpbnRmKCIgTm8gUy1FeHByZXNzaW9ucyAoTElTUCBp bnRlcnByZXRlcilcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0j ZW5kaWYJLyogTk9TRVhQICovCi0jZW5kaWYJLyogTk9GTE9BVCAqLwotCi0jaWZkZWYgTk9UTE9H Ci0gICAgcHJpbnRmKCIgTm8gdHJhbnNhY3Rpb24gbG9nXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+ IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0g MDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIE5PVExPRyAqLwotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi0jaWZkZWYgTk9ERUJVRwotICAgIHByaW50ZigiIE5vIGRlYnVnZ2luZ1xuIik7Ci0g ICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigx KTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBOT0RFQlVHICov Ci0KLSNpZmRlZiBOT0hFTFAKLSAgICBwcmludGYoIiBObyBidWlsdC1pbiBoZWxwXG4iKTsKLSAg ICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEp OyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIE5PSEVMUCAqLwot Ci0jaWZkZWYgTk9MT0NBTAotICAgIHByaW50ZigiIE5vIG1ha2luZyBjb25uZWN0aW9uc1xuIik7 Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbHNlCi0jaWZuZGVmIE5F VENPTk4KLSAgICBwcmludGYoIiBObyBuZXR3b3JrIHN1cHBvcnRcbiIpOwotICAgIGlmICgrK2xp bmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGlu ZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZWxzZSAvKiBORVRDT05OICovCi0jaWZuZGVmIElL U19PUFRJT04KLSAgICBwcmludGYoIiBObyBUZWxuZXQgS2VybWl0IE9wdGlvblxuIik7Ci0gICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsg ZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBJS1NfT1BUSU9OICov Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0jaWZkZWYgTk9TU0gKLSAgICBwcmludGYoIiBObyBT ZWN1cmUgU2hlbGwgKFNTSClcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyog Tk9TU0ggKi8KLSNpZm5kZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICBwcmludGYoIiBObyBLZXJi ZXJvcyhUTSkgYXV0aGVudGljYXRpb25cbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3Mg LSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAg cHJpbnRmKCIgTm8gU1JQKFRNKSAoU2VjdXJlIFJlbW90ZSBQYXNzd29yZCkgcHJvdG9jb2xcbiIp OwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIgTm8gU2VjdXJlIFNvY2tldHMg TGF5ZXIgKFNTTCkgcHJvdG9jb2xcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJp bnRmKCIgTm8gVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIHByb3RvY29sXG4iKTsKLSAg ICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEp OyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHByaW50ZigiIE5vIGVuY3J5cHRpb25cbiIpOwotICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZWxzZSAvKiBDS19BVVRIRU5USUNB VElPTiAqLwotI2lmbmRlZiBDS19LRVJCRVJPUwotICAgIHByaW50ZigiIE5vIEtlcmJlcm9zKFRN KSBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsg aWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0g MTsKLSNlbHNlIC8qIENLX0tFUkJFUk9TICovCi0jaWZuZGVmIEtSQjQKLSAgICBwcmludGYoIiBO byBLZXJiZXJvcyhUTSkgSVYgYXV0aGVudGljYXRpb25cbiIpOwotICAgIGlmICgrK2xpbmVzID4g Y21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAw OyB9Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogS1JCNCAqLwotI2lmbmRlZiBLUkI1Ci0gICAg cHJpbnRmKCIgTm8gS2VyYmVyb3MoVE0pIFYgYXV0aGVudGljYXRpb25cbiIpOwotICAgIGlmICgr K2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2Ug bGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8q IENLX0tFUkJFUk9TICovCi0jaWZuZGVmIENLX1NSUAotICAgIHByaW50ZigiIE5vIFNSUChUTSkg KFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQpIGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAgICBpZiAoKyts aW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxp bmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIENLX1NSUCAqLwotI2lmbmRlZiBD S19TU0wKLSAgICBwcmludGYoIiBObyBTZWN1cmUgU29ja2V0cyBMYXllciAoU1NMKSBwcm90b2Nv bFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkp IHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBwcmludGYoIiBObyBUcmFuc3BvcnQg TGF5ZXIgU2VjdXJpdHkgKFRMUykgcHJvdG9jb2xcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZuZGVmIENLX0VOQ1JZUFRJ T04KLSAgICBwcmludGYoIiBObyBUZWxuZXQgRW5jcnlwdGlvbiBPcHRpb25cbiIpOwotICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVs c2UgbGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZWxzZSAvKiBDS19FTkNSWVBUSU9OICov Ci0jaWZuZGVmIE9TMgotI2lmbmRlZiBDS19ERVMKLSAgICBwcmludGYoIiBObyBUZWxuZXQgREVT IGVuY3J5cHRpb25cbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0j ZW5kaWYgLyogQ0tfREVTICovCi0jaWZuZGVmIENLX0NBU1QKLSAgICBwcmludGYoIiBObyBUZWxu ZXQgQ0FTVCBlbmNyeXB0aW9uXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykg eyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcg PSAxOwotI2VuZGlmIC8qIENLX0NBU1QgKi8KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBDS19L RVJCRVJPUwotI2lmZGVmIEtSQjUKLSNpZm5kZWYgQUxMT1dfS1JCXzNERVNfRU5DUllQVAotICAg IHByaW50ZigiIE5vIEtlcmJlcm9zIDNERVMvQUVTIFRlbG5ldCBFbmNyeXB0aW9uXG4iKTsKLSAg ICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEp OyBlbHNlIGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIEFMTE9XX0tSQl8zREVTX0VOQ1JZUFQgKi8K LSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICov Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNpZm5kZWYgQ0tfRk9SV0FSRF9YCi0g ICAgcHJpbnRmKCIgTm8gWCBXaW5kb3dzIGZvcndhcmRpbmdcbiIpOwotICAgIGlmICgrK2xpbmVz ID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMg PSAwOyB9Ci0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0jaWZuZGVmIFROX0NPTVBPUlQKLSAg ICBwcmludGYoIiBObyBUZWxuZXQgUmVtb3RlIENvbSBQb3J0IENvbnRyb2wgT3B0aW9uXG4iKTsK LSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDEpOyBlbHNlIGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSNpZm5kZWYg Q0tfU09DS1MKLSAgICBwcmludGYoIiBObyBTT0NLU1xuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBj bWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7 IH0KLSNlbmRpZiAvKiBDS19TT0NLUyAqLwotI2lmbmRlZiBORVdGVFAKLSAgICBwcmludGYoIiBO byBidWlsdC1pbiBGVFAgY2xpZW50XG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0g MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotI2VuZGlm IC8qIE5FV0ZUUCAqLwotI2lmZGVmIE5PSFRUUAotICAgIHByaW50ZigiIE5vIGJ1aWx0LWluIEhU VFAgY2xpZW50XG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIE5PSFRUUCAq LwotCi0jaWZkZWYgTk9ESUFMCi0gICAgcHJpbnRmKCIgTm8gRElBTCBjb21tYW5kXG4iKTsKLSAg ICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEp OyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2Vsc2UKLSNpZmRlZiBNSU5JRElB TAotICAgIHByaW50ZigiIFN1cHBvcnQgZm9yIG1vc3QgbW9kZW0gdHlwZXMgZXhjbHVkZWRcbiIp OwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogTUlOSURJ QUwgKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5k ZWYgQ0tfUlRTQ1RTCi0jaWZuZGVmIE1BQwotICAgIHByaW50ZigiIE5vIGhhcmR3YXJlIGZsb3cg Y29udHJvbFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRp ZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBDS19SVFNDVFMgKi8KLQotI2lmZGVmIE5PWE1JVAotICAg IHByaW50ZigiIE5vIFRSQU5TTUlUIGNvbW1hbmRcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogTk9YTUlUICovCi0KLSNpZmRlZiBOT1NDUklQVAot ICAgIHByaW50ZigiIE5vIFNDUklQVCBjb21tYW5kXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNt ZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsg fQotICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIE5PU0NSSVBUICovCi0KLSNpZmRlZiBOT1NQTAot ICAgIHByaW50ZigiIE5vIHNjcmlwdCBwcm9ncmFtbWluZyBmZWF0dXJlc1xuIik7Ci0gICAgaWYg KCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxz ZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZk ZWYgTk9DU0VUUwotICAgIHByaW50ZigiIE5vIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIp OwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZWxzZQotCi0jaWZuZGVm IExBVElOMgotICAgIHByaW50ZigiIE5vIExhdGluLTIgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlv blxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkp IHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBM QVRJTjIgKi8KLQotI2lmZGVmIE5PR1JFRUsKLSAgICBwcmludGYoIiBObyBHcmVlayBjaGFyYWN0 ZXItc2V0IHRyYW5zbGF0aW9uXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykg eyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcg PSAxOwotI2VuZGlmIC8qIE5PR1JFRUsgKi8KLQotI2lmZGVmIE5PSEVCUkVXCi0gICAgcHJpbnRm KCIgTm8gSGVicmV3IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOwotICAgIGlmICgrK2xp bmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGlu ZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogTk9IRUJSRVcgKi8KLQotI2lmZGVm IE5PVU5JQ09ERQotICAgIHByaW50ZigiIE5vIFVuaWNvZGUgY2hhcmFjdGVyLXNldCB0cmFuc2xh dGlvblxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAv KiBOT1VOSUNPREUgKi8KLQotI2lmZGVmIE5PQ1lSSUwKLSAgICBwcmludGYoIiBObyBDeXJpbGxp YyBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9y b3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQot ICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIE5PQ1lSSUwgKi8KLQotI2lmbmRlZiBLQU5KSQotICAg IHByaW50ZigiIE5vIEthbmppIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOwotICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVs c2UgbGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogS0FOSkkgKi8KLSNlbmRp ZiAvKiBOT0NTRVRTICovCi0KLSNpZmRlZiBOT0NNREwKLSAgICBwcmludGYoIiBObyBjb21tYW5k LWxpbmUgYXJndW1lbnRzXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAx OwotI2VuZGlmIC8qIE5PQ01ETCAqLwotCi0jaWZkZWYgTk9QVVNICi0gICAgcHJpbnRmKCIgTm8g ZXNjYXBlIHRvIHN5c3RlbVxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsg aWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0g MTsKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmZGVmIE5PSkMKLSNpZmRlZiBVTklYCi0gICAg cHJpbnRmKCIgTm8gVU5JWCBqb2IgY29udHJvbFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRf cm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0K LSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogTk9KQyAqLwotCi0j aWZkZWYgTk9TRVRLRVkKLSAgICBwcmludGYoIiBObyBTRVQgS0VZIGNvbW1hbmRcbiIpOwotICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogTk9TRVRLRVkgKi8K LQotI2lmbmRlZiBDS19SRURJUgotICAgIHByaW50ZigiIE5vIFJFRElSRUNUIG9yIFBJUEUgY29t bWFuZFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAv KiBDS19SRURJUiAqLwotCi0jaWZkZWYgVU5JWAotI2lmbmRlZiBORVRQVFkKLSAgICBwcmludGYo IiBObyBwc2V1ZG90ZXJtaW5hbCBjb250cm9sXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9y b3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQot ICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQot I2lmbmRlZiBDS19SRVNFTkQKLSAgICBwcmludGYoIiBObyBSRVNFTkQgY29tbWFuZFxuIik7Ci0g ICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigx KTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBDS19SRVNFTkQg Ki8KLQotI2lmZGVmIE9TMgotI2lmZGVmIF9fMzJCSVRfXwotI2lmbmRlZiBPUzJNT1VTRQotICAg IHByaW50ZigiIE5vIE1vdXNlIHN1cHBvcnRcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0g ICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogX18zMkJJVF9fICovCi0jZW5kaWYgLyogT1MyICovCi0j ZW5kaWYgLyogT1MyTU9VU0UgKi8KLQotI2lmZGVmIE9TMgotI2lmbmRlZiBOVAotI2lmbmRlZiBD S19SRVhYCi0gICAgcHJpbnRmKCIgTm8gUkVYWCBzY3JpcHQgbGFuZ3VhZ2UgaW50ZXJmYWNlXG4i KTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIENLX1JF WFggKi8KLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIElLU0QK LSAgICBwcmludGYoIiBObyBJbnRlcm5ldCBLZXJtaXQgU2VydmljZVxuIik7Ci0gICAgaWYgKCsr bGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBs aW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICBpZiAo ZmxhZyA9PSAwKSB7Ci0gICAgICAgIHByaW50ZigiIE5vbmVcbiIpOwotICAgICAgICBpZiAoKyts aW5lcyA+IGNtZF9yb3dzIC0gMykKLSAgICAgICAgICB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4o MSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgfQotICAgIHByaW50ZigiXG4iKTsKLSAgICBpZiAo KytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNl IGxpbmVzID0gMDsgfQotCi0jaWZkZWYgQ0tfVVRTTkFNRQotICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 Ci0gICAgcHJpbnRmKCJIb3N0IGluZm86XG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dz IC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAg IHByaW50ZigiIE1hY2hpbmU6ICAgICVzXG4iLHVubV9tY2hbMF0gPyB1bm1fbWNoIDogIih1bmtu b3duKSIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgp KSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIgTW9kZWw6ICAgICAg JXNcbiIsdW5tX21vZFswXSA/IHVubV9tb2QgOiAiKHVua25vd24pIik7Ci0gICAgaWYgKCsrbGlu ZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5l cyA9IDA7IH0KLSAgICBwcmludGYoIiBPUzogICAgICAgICAlc1xuIix1bm1fbmFtWzBdID8gdW5t X25hbSA6ICIodW5rbm93bikiKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHByaW50Zigi IE9TIFJlbGVhc2U6ICVzXG4iLHVubV9yZWxbMF0gPyB1bm1fcmVsIDogIih1bmtub3duKSIpOwot ICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4o MSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIgT1MgVmVyc2lvbjogJXNcbiIsdW5t X3ZlclswXSA/IHVubV92ZXIgOiAiKHVua25vd24pIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRf cm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0K LSAgICBwcmludGYoIlxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYg KCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBDS19V VFNOQU1FICovCi0KLS8qCi0gIFByaW50IGNvbXBpbGUtdGltZSAoLUQpIG9wdGlvbnMsIGFzIHdl bGwgYXMgQyBwcmVwcm9jZXNzb3IKLSAgcHJlZGVmaW5lZCBzeW1ib2xzIHRoYXQgbWlnaHQgYWZm ZWN0IHVzLi4uCi0qLwotI2lmZGVmIEtUQVJHRVQKLSAgICB7Ci0gICAgICAgIGNoYXIgKiBzOyAg ICAgICAgICAgICAgICAgICAgICAgLyogTWFrZWZpbGUgdGFyZ2V0ICovCi0gICAgICAgIHMgPSBL VEFSR0VUOwotICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICAgICAgaWYgKCEqcykgcyA9ICIo dW5rbm93bikiOwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIGlmICgrK2xpbmVzID4g Y21kX3Jvd3MgLSAzKSB7Ci0gICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBl bHNlIGxpbmVzID0gMDsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoIlRhcmdldDogJXNcbiIs IHMpOwotICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgewotICAgICAgICAgICAg aWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7Ci0gICAgICAgIH0KLSAg ICB9Ci0jZW5kaWYgLyogS1RBUkdFVCAqLwotCi0jaWZkZWYgX19WRVJTSU9OX18KLSNpZmRlZiBf X0dOVUNfXwotICAgIHByaW50ZigiR0NDIHZlcnNpb246ICVzXG4iLCBfX1ZFUlNJT05fXyk7Ci0j ZWxzZQotICAgIHByaW50ZigiQ29tcGlsZXIgdmVyc2lvbjogJXNcbiIsIF9fVkVSU0lPTl9fKTsK LSNlbmRpZiAvKiBfX0dOVUNfXyAqLwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyog X19WRVJTSU9OX18gKi8KLQotI2lmZGVmIF9fREFURV9fICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEdOVSBhbmQgb3RoZXIgQU5TSSAqLwotI2lmZGVmIF9fVElNRV9fCi0gICAgcHJpbnRmKCJD b21waWxlZCAlcyAlcywgb3B0aW9uczpcbiIsIF9fREFURV9fLCBfX1RJTUVfXyk7Ci0jZWxzZQot ICAgIHByaW50ZigiQ29tcGlsZWQgJXMsIG9wdGlvbnM6XG4iLCBfX0RBVEVfXyk7Ci0jZW5kaWYg LyogX19USU1FX18gKi8KLSNlbHNlIC8qICFfX0RBVEVfXyAqLwotICAgIHByaW50ZigiQ29tcGls ZXIgb3B0aW9uczpcbiIpOwotI2VuZGlmIC8qIF9fREFURV9fICovCi0gICAgaWYgKCsrbGluZXMg PiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9 IDA7IH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBub3B0bGlzdDsgaSsrKSAgICAgIC8qIFByaW50 IHNvcnRlZCBvcHRpb24gbGlzdCAqLwotICAgICAgaWYgKCFwcnRvcHQoJmxpbmVzLG9wdGxpc3Rb aV0pKQotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIXBydG9wdCgmbGluZXMsIiIpKSBy ZXR1cm4oMCk7ICAvKiBTdGFydCBhIG5ldyBzZWN0aW9uICovCi0KLS8qIFNpemVzIG9mIGRhdGEg dHlwZXMgKi8KLQotICAgIGNrbWFrbXNnKGxpbmUsCi0gICAgICAgICAgICAgTElOQlVGU0laLAot ICAgICAgICAgICAgICJieXRlIG9yZGVyOiAiLAotICAgICAgICAgICAgIGJ5dGVvcmRlciA/ICJs aXR0bGUiIDogImJpZyIsCi0gICAgICAgICAgICAgIiBlbmRpYW4iLAotICAgICAgICAgICAgIE5V TEwKLSAgICAgICAgICAgICApOwotICAgIHsKLS8qIFdoZXRoZXIgdG8gdXNlICVkIG9yICVsZCB3 aXRoIHNpemVvZiBpcyBhIHBvcnRhYmlsaXR5IGlzc3VlLCBzby4uLiAqLwotCWludCBzaXplID0g MDsKLQotCWlmICghcHJ0b3B0KCZsaW5lcyxsaW5lKSkgcmV0dXJuKDApOwotCWlmICghcHJ0b3B0 KCZsaW5lcywiIikpIHJldHVybigwKTsgIC8qIFN0YXJ0IGEgbmV3IHNlY3Rpb24gKi8KLQotCXNp emUgPSAoaW50KXNpemVvZihpbnQpOwotCXNwcmludGYobGluZSwic2l6ZW9mczogaW50PSVkIixz aXplKTsgLyogU0FGRSAqLwotCWlmICghcHJ0b3B0KCZsaW5lcyxsaW5lKSkgcmV0dXJuKDApOwot Ci0Jc2l6ZSA9IChpbnQpc2l6ZW9mKGxvbmcpOwotCXNwcmludGYobGluZSwibG9uZz0lZCIsc2l6 ZSk7IC8qIFNBRkUgKi8KLQlpZiAoIXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsKLQot I2lmbmRlZiBPUzIKLQkvKiBXaW5kb3dzIGRvZXNuJ3QgaGF2ZSBvZmZfdCAqLwotCXNpemUgPSAo aW50KXNpemVvZihvZmZfdCk7Ci0Jc3ByaW50ZihsaW5lLCJvZmZfdD0lZCIsc2l6ZSk7IC8qIFNB RkUgKi8KLQlpZiAoIXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsKLSNlbmRpZiAvKiBP UzIgKi8KLQotCXNpemUgPSAoaW50KXNpemVvZihDS19PRkZfVCk7Ci0Jc3ByaW50ZihsaW5lLCJD S19PRkZfVD0lZCIsc2l6ZSk7IC8qIFNBRkUgKi8KLQlpZiAoIXBydG9wdCgmbGluZXMsbGluZSkp IHJldHVybigwKTsKLQotI2lmZGVmIEJJR0JVRk9LCi0Jc2l6ZSA9IChpbnQpc2l6ZW9mKHNpemVf dCk7Ci0Jc3ByaW50ZihsaW5lLCJzaXplX3Q9JWQiLHNpemUpOyAvKiBTQUZFICovCi0JaWYgKCFw cnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogQklHQlVGT0sgKi8KLQot CXNpemUgPSAoaW50KXNpemVvZihzaG9ydCk7Ci0Jc3ByaW50ZihsaW5lLCJzaG9ydD0lZCIsc2l6 ZSk7IC8qIFNBRkUgKi8KLQlpZiAoIXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsKLQot CXNpemUgPSAoaW50KXNpemVvZihjaGFyKTsKLQlzcHJpbnRmKGxpbmUsImNoYXI9JWQiLHNpemUp OyAvKiBTQUZFICovCi0JaWYgKCFwcnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7Ci0KLQlz aXplID0gKGludClzaXplb2YoY2hhciAqKTsKLQlzcHJpbnRmKGxpbmUsImNoYXIqPSVkIixzaXpl KTsgLyogU0FGRSAqLwotCWlmICghcHJ0b3B0KCZsaW5lcyxsaW5lKSkgcmV0dXJuKDApOwotCi0J c2l6ZSA9IChpbnQpc2l6ZW9mKGZsb2F0KTsKLQlzcHJpbnRmKGxpbmUsImZsb2F0PSVkIixzaXpl KTsgLyogU0FGRSAqLwotCWlmICghcHJ0b3B0KCZsaW5lcyxsaW5lKSkgcmV0dXJuKDApOwotCi0J c2l6ZSA9IChpbnQpc2l6ZW9mKGRvdWJsZSk7Ci0Jc3ByaW50ZihsaW5lLCJkb3VibGU9JWQiLHNp emUpOyAvKiBTQUZFICovCi0JaWYgKCFwcnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7Ci0g ICAgfQotCi0jaWZkZWYgRk5GTE9BVAotICAgIGlmICghcHJ0b3B0KCZsaW5lcywiIikpIHJldHVy bigwKTsgIC8qIFN0YXJ0IGEgbmV3IHNlY3Rpb24gKi8KLSAgICBpZiAoIXBydG9wdCgmbGluZXMs ImZsb2F0aW5nLXBvaW50OiIpKSByZXR1cm4oMCk7Ci0gICAgc3ByaW50ZihsaW5lLCJwcmVjaXNp b249JWQiLGZwX2RpZ2l0cyk7IC8qIFNBRkUgKi8KLSAgICBpZiAoIXBydG9wdCgmbGluZXMsbGlu ZSkpIHJldHVybigwKTsKLSAgICBzcHJpbnRmKGxpbmUsInJvdW5kaW5nPSVkIixmcF9yb3VuZGlu Zyk7IC8qIFNBRkUgKi8KLSAgICBpZiAoIXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsK LSNlbmRpZiAvKiBGTkZMT0FUICovCi0KLSAgICBwcnRvcHQoJmxpbmVzLCIiKTsKLSAgICByZXR1 cm4oMCk7Ci19Ci0jZW5kaWYgLyogTk9TSE9XICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KCmRpZmYg LS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzNi5jIGIv Y2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czYuYwpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ5OTBjNi4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzNi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIw MDkgKzAsMCBAQAotI2luY2x1ZGUgImNrY3N5bS5oIgotI2lmbmRlZiBOT0lDUAotCi0vKgotICBB dXRob3JzOgotICAgIEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAotICAgICAgVGhl IEtlcm1pdCBQcm9qZWN0LCBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5Ci0gICAg SmVmZnJleSBFIEFsdG1hbiA8amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4KLSAgICAgIFNl Y3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQotCi0gIENvcHlyaWdodCAoQykgMTk4 NSwgMjAxMSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5 IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0 IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21h aS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0qLwotCi0vKiBJbmNs dWRlcyAqLwotCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0jaW5jbHVkZSAiY2tjYXNjLmgiCi0jaW5j bHVkZSAiY2tja2VyLmgiCi0jaW5jbHVkZSAiY2t1dXNyLmgiCi0jaW5jbHVkZSAiY2tjeGxhLmgi Ci0jaW5jbHVkZSAiY2tjbmV0LmgiICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBzeW1i b2xzICovCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLSNpZm5kZWYgTk9TVEFUCi0jaWZkZWYgVk1T Ci0vKiAyMDEwLTAzLTA5IFNNUy4gIFZBWCBDIG5lZWRzIGhlbHAgdG8gZmluZCAic3lzIi4gIEl0 J3MgZWFzaWVyIG5vdCB0byB0cnkuICovCi0jaW5jbHVkZSA8c3RhdC5oPgotI2Vsc2UgLyogZGVm IFZNUyAqLwotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYgLyogZGVmIFZNUyBbZWxzZV0g Ki8KLSNlbmRpZiAvKiBOT1NUQVQgKi8KLQotI2lmZGVmIFZNUwotI2lmbmRlZiBUQ1BTT0NLRVQK LSNpbmNsdWRlIDxlcnJuby5oPgotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIFZN UyAqLwotCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSNkZWZpbmUgZmdldHMoc3RyaW5nYnVmLG1heCxm ZCkgZGdfZmdldHMoc3RyaW5nYnVmLG1heCxmZCkKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwot Ci0jaWZkZWYgUU5YNgotI2RlZmluZSByZWFkYmxvY2sga3JlYWRibG9jawotI2VuZGlmIC8qIFFO WDYgKi8KLQotLyogRXh0ZXJuYWwgS2VybWl0IFZhcmlhYmxlcywgc2VlIGNrbWFpbi5jIGZvciBk ZXNjcmlwdGlvbi4gKi8KLQotZXh0ZXJuIHh4X3N0cnAgeHhzdHJpbmc7Ci0KLWV4dGVybiBpbnQg bG9jYWwsIHhpdHN0YSwgYmluYXJ5LCBwYXJpdHksIGVzY2FwZSwgZmxvdywgY21kX3Jvd3MsIHR1 cm4sCi0gIHR1cm5jaCwgZHVwbGV4LCBja3hlY2gsIHNlc2xvZywgZGZsb2MsIGNuZmxnLCB0bGV2 ZWwsIHBmbGFnLCBtc2dmbGcsIG1kbXR5cCwKLSAgemluY250LCBxdWlldCwgcmVwYXJzLCB0ZWNo bywgbmV0d29yaywgbnp4b3B0cywgd2hhdCwgZmlsZXBlZWssIHJlY3Vyc2l2ZTsKLQotZXh0ZXJu IGludCB4YXNrbW9yZSwgdHRfcm93cywgdHRfY29scywgY21kX2NvbHMsIGdfbWF0Y2hkb3QsIGRp cmFjdGl2ZSwKLSAgeGNtZHNyYywgbnNjYW5maWxlLCByZWxpYWJsZSwgbm9saW5rcywgY21mbGdz OwotCi0jaWZkZWYgVk1TT1JVTklYCi1leHRlcm4gaW50IHpnZnNfZGlyLCB6Z2ZzX2xpbms7Ci0j ZW5kaWYgLyogVk1TT1JVTklYICovCi0KLSNpZmRlZiBDS19JRlJPCi0gIGV4dGVybiBpbnQgcmVt b25seTsKLSNlbmRpZiAvKiBDS19JRlJPICovCi0KLSNpZmRlZiBPUzIKLWV4dGVybiBpbnQgU3Rh cnRlZEZyb21EaWFsZXIgOwotZXh0ZXJuIGludCB2bW9kZTsKLWV4dGVybiBpbnQgazk1c3Rkb3V0 OwotI2lmbmRlZiBOVAotI2RlZmluZSBJTkNMX05PUE0KLSNkZWZpbmUgSU5DTF9WSU8gICAgICAg ICAgICAgICAgICAgICAgICAvKiBOZWVkZWQgZm9yIGNrb2Nvbi5oICovCi0jaW5jbHVkZSA8b3My Lmg+Ci0jdW5kZWYgQ09NTUVOVAotI2Vsc2UKLSNkZWZpbmUgQVBJUkVUIFVMT05HCi0jaW5jbHVk ZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHRhcGkuaD4KLSNpbmNsdWRlICJja250YXAuaCIKLSNl bmRpZiAvKiBOVCAqLwotI2luY2x1ZGUgImNrb2Nvbi5oIgotI2VuZGlmIC8qIE9TMiAqLwotCi1l eHRlcm4gbG9uZyB2ZXJudW0sIHNwZWVkOwotZXh0ZXJuIGNoYXIgKnZlcnNpbywgKnByb3R2LCAq Y2t4diwgKmNrenYsICpmbnN2LCAqY29ubnYsICpkZnR0eSwgKmNtZHY7Ci1leHRlcm4gY2hhciAq ZGlhbHYsICpsb2dpbnYsICpmb3JfZGVmW10sICp3aGlsX2RlZltdLCAqeGlmX2RlZltdLCAqc3df ZGVmW107Ci1leHRlcm4gY2hhciAqZm96X2RlZltdOwotZXh0ZXJuIGNoYXIgKmNreHN5cywgKmNr enN5czsKLSNpZm5kZWYgT1MyCi1leHRlcm4gY2hhciAqRElSQ01EOwotI2lmbmRlZiBVTklYCi1l eHRlcm4gY2hhciAqREVMQ01EOwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBPUzIgKi8K LWV4dGVybiBjaGFyIHR0bmFtZVtdLCBmaWxuYW1bXTsKLWV4dGVybiBDSEFSIHNzdGF0ZSwgZmVv bDsKLWV4dGVybiBjaGFyICp6aW5wdHI7Ci0KLSNpZmRlZiBVTklYCi1leHRlcm4gY2hhciAqKiBt dGNoczsgICAgICAgICAgICAgICAgICAgLyogenhwYW5kKCkgZmlsZSBsaXN0ICovCi0jZW5kaWYg LyogVU5JWCAqLwotCi0jaWZuZGVmIE5PWEZFUgotZXh0ZXJuIGludCBvb3B0cywgb21vZGUsIG9u YW1lLCBvcGF0aDsgIC8qIE8tUGFja2V0IG9wdGlvbnMgKi8KLQotZXh0ZXJuIGludCBzdGRpbmYs IHNuZHNyYywgc2l6ZSwgcnBzaXosIHVycHNpeiwgZm5jbnYsIGZucnBhdGgsIGRpc3BsYSwKLSAg c3Rkb3VmLCBpc2d1ZXN0LCBwa3Rsb2csIG5maWxzLCBrZWVwLCBtYXhycHMsIGZibGtzaXosIGZy ZWNsLCBmcmVjZm0sCi0gIGF0Y2FwciwgYXRkaXNvLCBzcHNpemYsIHNwc2l6LCBzcHNpenIsIHNw bWF4LCB3c2xvdHIsIHByZWZpeGluZywKLSAgZm5jYWN0LCBmbnNwYXRoLCBucHJvdG9zLCBnX3By b3RvLCBnX3VycHNpeiwgZ19zcHNpemYsCi0gIGdfc3BzaXosIGdfc3BzaXpyLCBnX3NwbWF4LCBn X3dzbG90ciwgZ19wcmVmaXhpbmcsIGdfZm5jYWN0LCBnX2ZuY252LAotICBnX2Zuc3BhdGgsIGdf Zm5ycGF0aCwgeGZyeGxhLCBnX3hmcnhsYTsKLQotZXh0ZXJuIGNoYXIgKmNtYXJnLCAqY21hcmcy OwotCi0jaWZuZGVmIE5PTVNFTkQgICAgICAgICAgICAgICAgICAgICAgICAgLyogTXVsdGlwbGUg U0VORCAqLwotZXh0ZXJuIGNoYXIgKm1zZmlsZXNbXTsKLSNlbmRpZiAvKiBOT01TRU5EICovCi1l eHRlcm4gY2hhciBmc3BlY1tdOyAgICAgICAgICAgICAgICAgICAgLyogTW9zdCByZWNlbnQgZmls ZXNwZWMgKi8KLWV4dGVybiBpbnQgZnNwZWNsZW47Ci0KLSNpZmRlZiBDS19UTVBESVIKLWV4dGVy biBpbnQgZl90bXBkaXI7ICAgICAgICAgICAgICAgICAgICAvKiBEaXJlY3RvcnkgY2hhbmdlZCB0 ZW1wb3JhcmlseSAqLwotZXh0ZXJuIGNoYXIgc2F2ZGlyW107ICAgICAgICAgICAgICAgICAgIC8q IEZvciBzYXZpbmcgY3VycmVudCBkaXJlY3RvcnkgKi8KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8K LQotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgcHJvdG9zW107ICAgICAgICAgIC8qIEZpbGUgdHJhbnNm ZXIgcHJvdG9jb2xzICovCi1leHRlcm4gc3RydWN0IGNrX3AgcHRhYltOUFJPVE9TXTsKLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIERDTURCVUYgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIERlY2xhcmF0aW9ucyBmcm9tIGNtZCBwYWNrYWdlICovCi1leHRlcm4gY2hhciAqY21kYnVm LCAqYXRtYnVmOyAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXJzICovCi0jZWxzZQotZXh0ZXJu IGNoYXIgY21kYnVmW10sIGF0bWJ1ZltdOyAgICAgICAgIC8qIENvbW1hbmQgYnVmZmVycyAqLwot I2VuZGlmIC8qIERDTURCVUYgKi8KLQotZXh0ZXJuIGludCBub3B1c2g7Ci0KLSNpZm5kZWYgTk9T UEwKLWludCBhc2tmbGFnID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBBU0stY2xhc3Mg Y29tbWFuZCBhY3RpdmUgKi8KLWludCBlY2hvc3RhcnMgPSAwOwkJCS8qIEFTS1Egc2hvdWxkIGVj aG8gYXN0ZXJpc2tzICovCi1leHRlcm4gY2hhciAqKmFfcHRyW107Ci1leHRlcm4gaW50IGFfZGlt W107Ci1leHRlcm4gY2hhciAqKm1feGFyZ1tdOwotZXh0ZXJuIGludCBuX3hhcmdbXTsKLWV4dGVy biBzdHJ1Y3QgbXRhYiAqbWFjdGFiOwotZXh0ZXJuIGludCBubWFjOwotZXh0ZXJuIGxvbmcgY2tf YWxhcm07Ci1leHRlcm4gY2hhciBhbHJtX2RhdGVbXSwgYWxybV90aW1lW107Ci1leHRlcm4gaW50 IHhfaWZudW07Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotZXh0ZXJuIGludCBpbnNlcnZlcjsgICAg ICAgICAgICAgICAgICAgIC8qIEkgYW0gSUtTRCAqLwotZXh0ZXJuIGludCBiYWNrZ3JkOyAgICAg ICAgICAgICAgICAgICAgIC8qIEtlcm1pdCBleGVjdXRpbmcgaW4gYmFja2dyb3VuZCAqLwotZXh0 ZXJuIGNoYXIgcHNhdmVbXTsgICAgICAgICAgICAgICAgICAgIC8qIEZvciBzYXZpbmcgJiByZXN0 b3JpbmcgcHJvbXB0ICovCi1leHRlcm4gY2hhciAqdHA7ICAgICAgICAgICAgICAgICAgICAgICAg LyogVGVtcG9yYXJ5IGJ1ZmZlciAqLwotCi1pbnQgcmVhZGJsb2NrID0gNDA5NjsgICAgICAgICAg ICAgICAgICAgLyogUkVBRCBidWZmZXIgc2l6ZSAqLwotQ0hBUiAqIHJlYWRidWYgPSBOVUxMOyAg ICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gcmVhZCBidWZmZXIgKi8KLWludCByZWFkc2l6 ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgY2hhcnMgYWN0dWFsbHkg cmVhZCAqLwotaW50IGdldGNtZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVC1j bGFzcyBjb21tYW5kIHdhcyBnaXZlbiAqLwotCi1leHRlcm4gaW50IHpjaGtvZCwgemNoa2lkOwot Ci0vKiAgQyBLIFUgVSBTIDYgLS0gICJVc2VyIEludGVyZmFjZSIgZm9yIFVuaXggS2VybWl0IChQ YXJ0IDYpICAqLwotCi1zdHJ1Y3Qga2V5dGFiIGRlbHRhYltdID0geyAgICAgICAgICAgICAgLyog REVMRVRFIENvbW1hbmQgT3B0aW9ucyAqLwotICAgIHsgIi9hbGwiLCAgICAgICAgICAgREVMX0FM TCwgIENNX0lOViB9LAotICAgIHsgIi9hZnRlciIsICAgICAgICAgREVMX0FGVCwgIENNX0FSRyB9 LAotICAgIHsgIi9hc2siLCAgICAgICAgICAgREVMX0FTSywgIDAgfSwKLSAgICB7ICIvYmVmb3Jl IiwgICAgICAgIERFTF9CRUYsICBDTV9BUkcgfSwKLSAgICB7ICIvZGlyZWN0b3JpZXMiLCAgIERF TF9ESVIsICAwIH0sCi0gICAgeyAiL2RvdGZpbGVzIiwgICAgICBERUxfRE9ULCAgMCB9LAotICAg IHsgIi9leGNlcHQiLCAgICAgICAgREVMX0VYQywgIENNX0FSRyB9LAotICAgIHsgIi9oZWFkaW5n IiwgICAgICAgREVMX0hERywgIDAgfSwKLSAgICB7ICIvbCIsICAgICAgICAgICAgIERFTF9MSVMs ICBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiL2xhcmdlci10aGFuIiwgICBERUxfTEFSLCAgQ01f QVJHIH0sCi0gICAgeyAiL2xpc3QiLCAgICAgICAgICBERUxfTElTLCAgMCB9LAotICAgIHsgIi9s b2ciLCAgICAgICAgICAgREVMX0xJUywgIENNX0lOViB9LAotICAgIHsgIi9ub2FzayIsICAgICAg ICAgREVMX05BUywgIDAgfSwKLSAgICB7ICIvbm9kb3RmaWxlcyIsICAgIERFTF9OT0QsICAwIH0s Ci0gICAgeyAiL25vaGVhZGluZyIsICAgICBERUxfTk9ILCAgMCB9LAotICAgIHsgIi9ub2wiLCAg ICAgICAgICAgREVMX05PTCwgIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICIvbm9saXN0IiwgICAg ICAgIERFTF9OT0wsICAwIH0sCi0gICAgeyAiL25vbG9nIiwgICAgICAgICBERUxfTk9MLCAgQ01f SU5WIH0sCi0gICAgeyAiL25vcGFnZSIsICAgICAgICBERUxfTk9QLCAgMCB9LAotICAgIHsgIi9u b3QtYWZ0ZXIiLCAgICAgREVMX05BRiwgIENNX0FSRyB9LAotICAgIHsgIi9ub3QtYmVmb3JlIiwg ICAgREVMX05CRiwgIENNX0FSRyB9LAotICAgIHsgIi9ub3Qtc2luY2UiLCAgICAgREVMX05BRiwg IENNX0lOVnxDTV9BUkcgfSwKLSAgICB7ICIvcGFnZSIsICAgICAgICAgIERFTF9QQUcsICAwIH0s Ci0gICAgeyAiL3F1aWV0IiwgICAgICAgICBERUxfUVVJLCAgQ01fSU5WIH0sCi0gICAgeyAiL3Jl Y3Vyc2l2ZSIsICAgICBERUxfUkVDLCAgMCB9LAotICAgIHsgIi9zaW11bGF0ZSIsICAgICAgREVM X1NJTSwgIDAgfSwKLSAgICB7ICIvc2luY2UiLCAgICAgICAgIERFTF9BRlQsICBDTV9BUkd8Q01f SU5WIH0sCi0gICAgeyAiL3NtYWxsZXItdGhhbiIsICBERUxfU01BLCAgQ01fQVJHIH0sCi0gICAg eyAiL3N1bW1hcnkiLCAgICAgICBERUxfU1VNLCAgMCB9LAotICAgIHsgIi90cmVlIiwgICAgICAg ICAgREVMX0FMTCwgIDAgfSwKLSAgICB7ICIvdHlwZSIsICAgICAgICAgIERFTF9UWVAsICBDTV9B UkcgfSwKLSAgICB7ICIvdmVyYm9zZSIsICAgICAgIERFTF9WUkIsICBDTV9JTlYgfQotfTsKLWlu dCBuZGVsdGFiID0gc2l6ZW9mKGRlbHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotCi0vKiAv UVVJRVQtL1ZFUkJPU0UgKC9MSVNULS9OT0xJU1QpICgvTE9HLS9OT0xPRykgdGFibGUgKi8KLQot c3RydWN0IGtleXRhYiBxdnN3dGFiW10gPSB7Ci0gICAgeyAiL2wiLCAgICAgICAgICAgREVMX0xJ UywgIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICIvbGlzdCIsICAgICAgICBERUxfTElTLCAgMCB9 LAotICAgIHsgIi9sb2ciLCAgICAgICAgIERFTF9MSVMsICBDTV9JTlYgfSwKLSAgICB7ICIvbm9s IiwgICAgICAgICBERUxfTk9MLCAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgIi9ub2xpc3QiLCAg ICAgIERFTF9OT0wsICAwIH0sCi0gICAgeyAiL25vbG9nIiwgICAgICAgREVMX05PTCwgIENNX0lO ViB9LAotICAgIHsgIi9xdWlldCIsICAgICAgIERFTF9RVUksICBDTV9JTlYgfSwKLSAgICB7ICIv dmVyYm9zZSIsICAgICBERUxfVlJCLCAgQ01fSU5WIH0KLX07Ci1pbnQgbnF2c3d0YWIgPSBzaXpl b2YocXZzd3RhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotCi1zdGF0aWMgc3RydWN0IGtleXRh YiByZW5hbXN3W10gPSB7Ci0gICAgeyAiL2NvbGxpc2lvbiIsICAgUkVOX09WVywgIENNX0FSRyB9 LAotI2lmbmRlZiBOT1VOSUNPREUKLSAgICB7ICIvY29udmVydCIsICAgICBSRU5fWExBLCAgQ01f QVJHIH0sCi0jZW5kaWYJLyogTk9VTklDT0RFICovCi0gICAgeyAiL2ZpeHNwYWNlcyIsICAgUkVO X1NQQSwgIENNX0FSRyB9LAotICAgIHsgIi9sIiwgICAgICAgICAgIERFTF9MSVMsICBDTV9JTlZ8 Q01fQUJSIH0sCi0gICAgeyAiL2xpc3QiLCAgICAgICAgREVMX0xJUywgIDAgICAgICB9LAotICAg IHsgIi9sb2ciLCAgICAgICAgIERFTF9MSVMsICBDTV9JTlYgfSwKLSAgICB7ICIvbG93ZXIiLCAg ICAgICBSRU5fTE9XLCAgQ01fQVJHIH0sCi0gICAgeyAiL25vbCIsICAgICAgICAgREVMX05PTCwg IENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICIvbm9saXN0IiwgICAgICBERUxfTk9MLCAgMCAgICAg IH0sCi0gICAgeyAiL25vbG9nIiwgICAgICAgREVMX05PTCwgIENNX0lOViB9LAotICAgIHsgIi9x dWlldCIsICAgICAgIERFTF9RVUksICBDTV9JTlYgfSwKLSAgICB7ICIvcmVwbGFjZSIsICAgICBS RU5fUlBMLCAgQ01fQVJHIH0sCi0gICAgeyAiL3NpbXVsYXRlIiwgICAgREVMX1NJTSwgIDAgICAg ICB9LAotICAgIHsgIi91cHBlciIsICAgICAgIFJFTl9VUFAsICBDTV9BUkcgfSwKLSAgICB7ICIv dmVyYm9zZSIsICAgICBERUxfVlJCLCAgQ01fSU5WIH0KLX07Ci1zdGF0aWMgaW50IG5yZW5hbXN3 ID0gc2l6ZW9mKHJlbmFtc3cpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKLQotc3RhdGljIHN0cnVj dCBrZXl0YWIgcmVuYW1zZXRbXSA9IHsKLSAgICB7ICJjb2xsaXNpb24iLCAgICBSRU5fT1ZXLCAg MCB9LAotICAgIHsgImxpc3QiLCAgICAgICAgIERFTF9MSVMsICAwIH0KLX07Ci1zdGF0aWMgaW50 IG5yZW5hbXNldCA9IHNpemVvZihyZW5hbXNldCkvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotCi0v KiBBcmdzIGZvciBSRU5BTUUgL0xPV0VSOiBhbmQgL1VQUEVSOiAqLwotCi1zdGF0aWMgc3RydWN0 IGtleXRhYiByX3VwcGVyW10gPSB7Ci0gICAgeyAiYWxsIiwgICAxLCAwIH0sCi0gICAgeyAibG93 ZXIiLCAwLCAwIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHJfbG93ZXJbXSA9IHsKLSAg ICB7ICJhbGwiLCAgIDEsIDAgfSwKLSAgICB7ICJ1cHBlciIsIDAsIDAgfQotfTsKLQotLyogQXJn cyBmb3IgUkVOQU1FIC9DT0xMSVNJT04uLi4gKi8KLQotI2RlZmluZSBSRU5YX0ZBSUwgMAotI2Rl ZmluZSBSRU5YX09WV1IgMQotI2RlZmluZSBSRU5YX1NLSVAgMgotCi1zdGF0aWMgc3RydWN0IGtl eXRhYiByX2NvbGxpc2lvbltdID0gewotICAgIHsgImZhaWwiLCAgICAgIFJFTlhfRkFJTCwgMCB9 LAotICAgIHsgIm92ZXJ3cml0ZSIsIFJFTlhfT1ZXUiwgMCB9LAotICAgIHsgInByb2NlZWQiLCAg IFJFTlhfU0tJUCwgQ01fSU5WIH0sCi0gICAgeyAic2tpcCIsICAgICAgUkVOWF9TS0lQLCAwIH0K LX07Ci1zdGF0aWMgaW50IG5yX2NvbGxpc2lvbiA9IHNpemVvZihyX2NvbGxpc2lvbikvc2l6ZW9m KHN0cnVjdCBrZXl0YWIpOwotCi1zdHJ1Y3Qga2V5dGFiIGNvcHl0YWJbXSA9IHsKLSAgICB7ICIv YXBwZW5kIiwgICAgICA5OTgsICAgICAgMCB9LAotI2lmbmRlZiBOT1NQTAotICAgIHsgIi9mcm9t YjY0IiwgICAgIDk5NywgICAgICAwIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB7ICIvbCIs ICAgICAgICAgICBERUxfTElTLCAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgIi9saXN0IiwgICAg ICAgIERFTF9MSVMsICAwIH0sCi0gICAgeyAiL2xvZyIsICAgICAgICAgREVMX0xJUywgIENNX0lO ViB9LAotICAgIHsgIi9ub2wiLCAgICAgICAgIERFTF9OT0wsICBDTV9JTlZ8Q01fQUJSIH0sCi0g ICAgeyAiL25vbGlzdCIsICAgICAgREVMX05PTCwgIDAgfSwKLSAgICB7ICIvbm9sb2ciLCAgICAg ICBERUxfTk9MLCAgQ01fSU5WIH0sCi0gICAgeyAiL292ZXJ3cml0ZSIsICAgOTk0LCAgICAgIENN X0FSRyB9LAotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICIvcHJlc2VydmUiLCAgICA5OTUsICAgICAg MCB9LAotI2VuZGlmCS8qIE5PWEZFUiAqLwotICAgIHsgIi9xdWlldCIsICAgICAgIERFTF9RVUks ICBDTV9JTlYgfSwKLSAgICB7ICIvc3dhcC1ieXRlcyIsICA5OTksICAgICAgMCB9LAotI2lmbmRl ZiBOT1NQTAotICAgIHsgIi90b2I2NCIsICAgICAgIDk5NiwgICAgICAwIH0sCi0jZW5kaWYgLyog Tk9TUEwgKi8KLSAgICB7ICIvdmVyYm9zZSIsICAgICBERUxfVlJCLCAgQ01fSU5WIH0KLX07Ci1p bnQgbmNvcHl0YWIgPSBzaXplb2YoY29weXRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotCi0j ZGVmaW5lIE9WV19BTFdBWVMgMAotI2RlZmluZSBPVldfTkVWRVIgIDEKLSNkZWZpbmUgT1ZXX09M REVSICAyCi0jZGVmaW5lIE9WV19ORVdFUiAgMwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBvdnd0 YWJbXSA9IHsKLSAgICB7ICJhbHdheXMiLCBPVldfQUxXQVlTLCAwIH0sCi0gICAgeyAibmV2ZXIi LCAgT1ZXX05FVkVSLCAwIH0sCi0gICAgeyAibmV3ZXIiLCAgT1ZXX05FV0VSLCAwIH0sCi0gICAg eyAib2xkZXIiLCAgT1ZXX09MREVSLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5vdnd0YWIgPSA0Owot Ci0jaWZuZGVmIE5PWEZFUgotc3RhdGljIHN0cnVjdCBrZXl0YWIgZ2V0dGFiW10gPSB7ICAgICAg IC8qIEdFVCBvcHRpb25zICovCi0gICAgeyAiL2FzLW5hbWUiLCAgICAgICAgIFNORF9BU04sIENN X0FSRyB9LAotICAgIHsgIi9iaW5hcnkiLCAgICAgICAgICBTTkRfQklOLCAwIH0sCi0jaWZkZWYg Q0FMSUJSQVRFCi0gICAgeyAiL2NhbGlicmF0ZSIsICAgICAgIFNORF9DQUwsIENNX0lOViB9LAot I2VuZGlmIC8qIENBTElCUkFURSAqLwotI2lmZGVmIFBJUEVTRU5ECi0gICAgeyAiL2NvbW1hbmQi LCAgICAgICAgIFNORF9DTUQsIENNX1BTSCB9LAotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0gICAg eyAiL2RlbGV0ZSIsICAgICAgICAgIFNORF9ERUwsIDAgfSwKLSAgICB7ICIvZXhjZXB0IiwgICAg ICAgICAgU05EX0VYQywgQ01fQVJHIH0sCi0gICAgeyAiL2ZpbGVuYW1lcyIsICAgICAgIFNORF9O QU0sIENNX0FSRyB9LAotI2lmZGVmIFBJUEVTRU5ECi0gICAgeyAiL2ZpbHRlciIsICAgICAgICAg IFNORF9GTFQsIENNX0FSR3xDTV9QU0ggfSwKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotI2lmZGVm IFZNUwotICAgIHsgIi9pbWFnZSIsICAgICAgICAgICBTTkRfSU1HLCAwIH0sCi0gICAgeyAiL2xh YmVsZWQiLCAgICAgICAgIFNORF9MQkwsIDAgfSwKLSNlbHNlCi0gICAgeyAiL2ltYWdlIiwgICAg ICAgICAgIFNORF9CSU4sIENNX0lOViB9LAotI2VuZGlmIC8qIFZNUyAqLwotI2lmZGVmIENLX1RN UERJUgotICAgIHsgIi9tb3ZlLXRvIiwgICAgICAgICBTTkRfTU9WLCBDTV9BUkcgfSwKLSNlbmRp ZiAvKiBDS19UTVBESVIgKi8KLSAgICB7ICIvcGF0aG5hbWVzIiwgICAgICAgU05EX1BUSCwgQ01f QVJHIH0sCi0gICAgeyAiL3BpcGVzIiwgICAgICAgICAgIFNORF9QSVAsIENNX0FSR3xDTV9QU0gg fSwKLSAgICB7ICIvcXVpZXQiLCAgICAgICAgICAgU05EX1NISCwgMCB9LAotI2lmZGVmIENLX1JF U0VORAotICAgIHsgIi9yZWNvdmVyIiwgICAgICAgICBTTkRfUkVTLCAwIH0sCi0jZW5kaWYgLyog Q0tfUkVTRU5EICovCi0gICAgeyAiL3JlY3Vyc2l2ZSIsICAgICAgIFNORF9SRUMsIDAgfSwKLSAg ICB7ICIvcmVuYW1lLXRvIiwgICAgICAgU05EX1JFTiwgQ01fQVJHIH0sCi0jaWZkZWYgQ09NTUVO VAotICAgIHsgIi9zbWFsbGVyLXRoYW4iLCAgICBTTkRfU01BLCBDTV9BUkcgfSwKLSNlbmRpZiAv KiBDT01NRU5UICovCi0gICAgeyAiL3N1YmRpcmVjdG9yaWVzIiwgIFNORF9SRUMsIENNX0lOViB9 LAotICAgIHsgIi90ZXh0IiwgICAgICAgICAgICBTTkRfVFhULCAwIH0sCi0gICAgeyAiL3RyYW5z cGFyZW50IiwgICAgIFNORF9YUEEsIDAgfQotfTsKLSNkZWZpbmUgTkdFVFRBQiBzaXplb2YoZ2V0 dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikKLXN0YXRpYyBpbnQgbmdldHRhYiA9IE5HRVRUQUI7 Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHJjdnRhYltdID0geyAgICAgICAvKiBSRUNFSVZFIG9w dGlvbnMgKi8KLSAgICB7ICIvYXMtbmFtZSIsICAgICAgICAgU05EX0FTTiwgQ01fQVJHIH0sCi0g ICAgeyAiL2JpbmFyeSIsICAgICAgICAgIFNORF9CSU4sIDAgfSwKLSNpZmRlZiBDQUxJQlJBVEUK LSAgICB7ICIvY2FsaWJyYXRlIiwgICAgICAgU05EX0NBTCwgQ01fSU5WIH0sCi0jZW5kaWYgLyog Q0FMSUJSQVRFICovCi0jaWZkZWYgUElQRVNFTkQKLSAgICB7ICIvY29tbWFuZCIsICAgICAgICAg U05EX0NNRCwgQ01fUFNIIH0sCi0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSAgICB7ICIvZXhjZXB0 IiwgICAgICAgICAgU05EX0VYQywgQ01fQVJHIH0sCi0gICAgeyAiL2ZpbGVuYW1lcyIsICAgICAg IFNORF9OQU0sIENNX0FSRyB9LAotI2lmZGVmIFBJUEVTRU5ECi0gICAgeyAiL2ZpbHRlciIsICAg ICAgICAgIFNORF9GTFQsIENNX0FSR3xDTV9QU0ggfSwKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwot I2lmZGVmIFZNUwotICAgIHsgIi9pbWFnZSIsICAgICAgICAgICBTTkRfSU1HLCAwIH0sCi0gICAg eyAiL2xhYmVsZWQiLCAgICAgICAgIFNORF9MQkwsIDAgfSwKLSNlbHNlCi0gICAgeyAiL2ltYWdl IiwgICAgICAgICAgIFNORF9CSU4sIENNX0lOViB9LAotI2VuZGlmIC8qIFZNUyAqLwotI2lmZGVm IENLX1RNUERJUgotICAgIHsgIi9tb3ZlLXRvIiwgICAgICAgICBTTkRfTU9WLCBDTV9BUkcgfSwK LSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLSAgICB7ICIvcGF0aG5hbWVzIiwgICAgICAgU05EX1BU SCwgQ01fQVJHIH0sCi0gICAgeyAiL3BpcGVzIiwgICAgICAgICAgIFNORF9QSVAsIENNX0FSR3xD TV9QU0ggfSwKLSNpZmRlZiBDS19YWVoKLSAgICB7ICIvcHJvdG9jb2wiLCAgICAgICAgU05EX1BS TywgQ01fQVJHIH0sCi0jZWxzZQotICAgIHsgIi9wcm90b2NvbCIsICAgICAgICBTTkRfUFJPLCBD TV9BUkd8Q01fSU5WIH0sCi0jZW5kaWYgLyogQ0tfWFlaICovCi0gICAgeyAiL3F1aWV0IiwgICAg ICAgICAgIFNORF9TSEgsIDAgfSwKLSAgICB7ICIvcmVjdXJzaXZlIiwgICAgICAgU05EX1JFQywg MCB9LAotICAgIHsgIi9yZW5hbWUtdG8iLCAgICAgICBTTkRfUkVOLCBDTV9BUkcgfSwKLSAgICB7 ICIvdGV4dCIsICAgICAgICAgICAgU05EX1RYVCwgMCB9LAotICAgIHsgIi90cmFuc3BhcmVudCIs ICAgICBTTkRfWFBBLCAwIH0KLX07Ci0jZGVmaW5lIE5SQ1ZUQUIgc2l6ZW9mKHJjdnRhYikvc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpCi1zdGF0aWMgaW50IG5yY3Z0YWIgPSBOUkNWVEFCOwotI2VuZGlm IC8qIE5PWEZFUiAqLwotCi0vKiBXQUlUIHRhYmxlICovCi0KLSNkZWZpbmUgV0FJVF9GSUwgOTk3 Ci0jZGVmaW5lIFdBSVRfTURNIDk5OAotCi1zdHJ1Y3Qga2V5dGFiIHdhaXR0YWJbXSA9IHsKLSAg ICB7ICJjZCIsICAgICAgICAgICAgQk1fRENELCAgIENNX0lOViB9LCAvKiAoQ2FycmllciBEZXRl Y3QpICovCi0gICAgeyAiY3RzIiwgICAgICAgICAgIEJNX0NUUywgICBDTV9JTlYgfSwgLyogKENs ZWFyIFRvIFNlbmQpICAqLwotICAgIHsgImRzciIsICAgICAgICAgICBCTV9EU1IsICAgQ01fSU5W IH0sIC8qIChEYXRhIFNldCBSZWFkeSkgKi8KLSAgICB7ICJmaWxlIiwgICAgICAgICAgV0FJVF9G SUwsIDAgfSwgICAgICAvKiBOZXcgY2F0ZWdvcnkgc2VsZWN0b3Iga2V5d29yZHMgKi8KLSAgICB7 ICJtb2RlbS1zaWduYWxzIiwgV0FJVF9NRE0sIDAgfSwgICAgICAvKiAuLi4gKi8KLSAgICB7ICJy aSIsICAgICAgICAgICAgQk1fUk5HLCAgIENNX0lOViB9ICAvKiAoUmluZyBJbmRpY2F0b3IpICov Ci19OwotaW50IG53YWl0dGFiID0gKHNpemVvZih3YWl0dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKSk7Ci0KLS8qIE1vZGVtIHNpZ25hbCB0YWJsZSAqLwotCi1zdHJ1Y3Qga2V5dGFiIG1zdGFi W10gPSB7Ci0gICAgeyAiY2QiLCAgICBCTV9EQ0QsIDAgfSwgICAgICAgICAgICAgLyogQ2Fycmll ciBEZXRlY3QgKi8KLSAgICB7ICJjdHMiLCAgIEJNX0NUUywgMCB9LCAgICAgICAgICAgICAvKiBD bGVhciBUbyBTZW5kICAqLwotICAgIHsgImRzciIsICAgQk1fRFNSLCAwIH0sICAgICAgICAgICAg IC8qIERhdGEgU2V0IFJlYWR5ICovCi0gICAgeyAicmkiLCAgICBCTV9STkcsIDAgfSAgICAgICAg ICAgICAgLyogUmluZyBJbmRpY2F0b3IgKi8KLX07Ci1pbnQgbm1zID0gKHNpemVvZihtc3RhYikg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0jZGVmaW5lIFdGX01PRCAxCi0jZGVmaW5lIFdG X0RFTCAyCi0jZGVmaW5lIFdGX0NSRSAzCi0KLXN0cnVjdCBrZXl0YWIgd2Zzd2lbXSA9IHsgICAg ICAgICAgICAgICAvKiBXQUlUIEZJTEUgc3dpdGNoZXMgKi8KLSAgICB7ICJjcmVhdGlvbiIsICAg ICBXRl9DUkUsIDAgfSwgICAgICAvKiBXYWl0IGZvciBmaWxlIHRvIGJlIGNyZWF0ZWQgKi8KLSAg ICB7ICJkZWxldGlvbiIsICAgICBXRl9ERUwsIDAgfSwgICAgICAvKiBXYWl0IGZvciBmaWxlIHRv IGJlIGRlbGV0ZWQgKi8KLSAgICB7ICJtb2RpZmljYXRpb24iLCBXRl9NT0QsIDAgfSAgICAgICAv KiBXYWl0IGZvciBmaWxlIHRvIGJlIG1vZGlmaWVkICovCi19OwotaW50IG53ZnN3aSA9IChzaXpl b2Yod2Zzd2kpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotI2lmbmRlZiBOT1NQTAotc3Ry dWN0IGtleXRhYiBhc2d0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIEFzc2lnbm1lbnQgb3BlcmF0 b3JzIGZvciAiLiIgKi8KLSAgICB7ICI6Oj0iLCAyLCAwIH0sICAgICAgICAgICAgICAgICAgICAv KiBBU1NJR04gYW5kIEVWQUxVQVRFICovCi0gICAgeyAiOj0iLCAgMSwgMCB9LCAgICAgICAgICAg ICAgICAgICAgLyogQVNTSUdOICovCi0gICAgeyAiPSIsICAgMCwgMCB9ICAgICAgICAgICAgICAg ICAgICAgLyogREVGSU5FICovCi19OwotaW50IG5hc2d0YWIgPSAoc2l6ZW9mKGFzZ3RhYikgLyBz aXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIG9wbnRhYltdID0gewotI2lm bmRlZiBOT1BVU0gKLSAgICB7ICIhcmVhZCIsICBPUE5fUElfUiwgQ01fSU5WIH0sCi0gICAgeyAi IXdyaXRlIiwgT1BOX1BJX1csIENNX0lOViB9LAotI2VuZGlmIC8qIE5PUFVTSCAqLwotICAgIHsg ImFwcGVuZCIsIE9QTl9GSV9BLCAwIH0sCi0gICAgeyAiaG9zdCIsICAgT1BOX05FVCwgIDAgfSwK LSNpZmRlZiBPUzIKLSAgICB7ICJsaW5lIiwgICBPUE5fU0VSLCAgQ01fSU5WIH0sCi0gICAgeyAi cG9ydCIsICAgT1BOX1NFUiwgIDAgfSwKLSNlbHNlCi0gICAgeyAibGluZSIsICAgT1BOX1NFUiwg IDAgfSwKLSAgICB7ICJwb3J0IiwgICBPUE5fU0VSLCAgQ01fSU5WIH0sCi0jZW5kaWYgLyogT1My ICovCi0gICAgeyAicmVhZCIsICAgT1BOX0ZJX1IsIDAgfSwKLSAgICB7ICJ3cml0ZSIsICBPUE5f RklfVywgMCB9Ci19OwotaW50IG5vcG4gPSAoc2l6ZW9mKG9wbnRhYikgLyBzaXplb2Yoc3RydWN0 IGtleXRhYikpOwotCi0vKiBJRiBjb25kaXRpb25zICovCi0KLSNkZWZpbmUgIFhYSUZDTyAwICAg ICAgIC8qIElGIENPVU5UICovCi0jZGVmaW5lICBYWElGRVIgMSAgICAgICAvKiBJRiBFUlJPUkxF VkVMICovCi0jZGVmaW5lICBYWElGRVggMiAgICAgICAvKiBJRiBFWElTVCAqLwotI2RlZmluZSAg WFhJRkZBIDMgICAgICAgLyogSUYgRkFJTFVSRSAqLwotI2RlZmluZSAgWFhJRlNVIDQgICAgICAg LyogSUYgU1VDQ0VTUyAqLwotI2RlZmluZSAgWFhJRk5PIDUgICAgICAgLyogSUYgTk9UICovCi0j ZGVmaW5lICBYWElGREUgNiAgICAgICAvKiBJRiBERUZJTkVEICovCi0jZGVmaW5lICBYWElGRVEg NyAgICAgICAvKiBJRiBFUVVBTCAoc3RyaW5ncykgKi8KLSNkZWZpbmUgIFhYSUZBRSA4ICAgICAg IC8qIElGID0gKG51bWJlcnMpICovCi0jZGVmaW5lICBYWElGTFQgOSAgICAgICAvKiBJRiA8IChu dW1iZXJzKSAqLwotI2RlZmluZSAgWFhJRkdUIDEwICAgICAgLyogSUYgPiAobnVtYmVycykgKi8K LSNkZWZpbmUgIFhYSUZMTCAxMSAgICAgIC8qIElGIExleGljYWxseSBMZXNzIFRoYW4gKHN0cmlu Z3MpICovCi0jZGVmaW5lICBYWElGTEcgMTIgICAgICAvKiBJRiBMZXhpY2FsbHkgR3JlYXRlciBU aGFuIChzdHJpbmdzKSAqLwotI2RlZmluZSAgWFhJRkVPIDEzICAgICAgLyogSUYgRU9GIChSRUFE IGZpbGUpICovCi0jZGVmaW5lICBYWElGQkcgMTQgICAgICAvKiBJRiBCQUNLR1JPVU5EICovCi0j ZGVmaW5lICBYWElGTlUgMTUgICAgICAvKiBJRiBOVU1FUklDICovCi0jZGVmaW5lICBYWElGRkcg MTYgICAgICAvKiBJRiBGT1JFR1JPVU5EICovCi0jZGVmaW5lICBYWElGREkgMTcgICAgICAvKiBJ RiBESVJFQ1RPUlkgKi8KLSNkZWZpbmUgIFhYSUZORSAxOCAgICAgIC8qIElGIE5FV0VSICovCi0j ZGVmaW5lICBYWElGUk8gMTkgICAgICAvKiBJRiBSRU1PVEUtT05MWSAqLwotI2RlZmluZSAgWFhJ RkFMIDIwICAgICAgLyogSUYgQUxBUk0gKi8KLSNkZWZpbmUgIFhYSUZTRCAyMSAgICAgIC8qIElG IFNUQVJURUQtRlJPTS1ESUFMRVIgKi8KLSNkZWZpbmUgIFhYSUZUUiAyMiAgICAgIC8qIElGIFRS VUUgKi8KLSNkZWZpbmUgIFhYSUZOVCAyMyAgICAgIC8qIElGIEZBTFNFICovCi0jZGVmaW5lICBY WElGVE0gMjQgICAgICAvKiBJRiBURVJNSU5BTC1NQUNSTyAqLwotI2RlZmluZSAgWFhJRkVNIDI1 ICAgICAgLyogSUYgRU1VTEFUSU9OICovCi0jZGVmaW5lICBYWElGT1AgMjYgICAgICAvKiBJRiBP UEVOICovCi0jZGVmaW5lICBYWElGTEUgMjcgICAgICAvKiBJRiA8PSAqLwotI2RlZmluZSAgWFhJ RkdFIDI4ICAgICAgLyogSUYgPj0gKi8KLSNkZWZpbmUgIFhYSUZJUCAyOSAgICAgIC8qIElGIElO UEFUSCAqLwotI2RlZmluZSAgWFhJRlRBIDMwICAgICAgLyogSUYgVEFQSSAqLwotI2RlZmluZSAg WFhJRk1BIDMxICAgICAgLyogSUYgTUFUQ0ggKi8KLSNkZWZpbmUgIFhYSUZGTCAzMiAgICAgIC8q IElGIEZMQUcgKi8KLSNkZWZpbmUgIFhYSUZBQiAzMyAgICAgIC8qIElGIEFCU09MVVRFICovCi0j ZGVmaW5lICBYWElGQVYgMzQgICAgICAvKiBJRiBBVkFJTEFCTEUgKi8KLSNkZWZpbmUgIFhYSUZB VCAzNSAgICAgIC8qIElGIEFTS1RJTUVPVVQgKi8KLSNkZWZpbmUgIFhYSUZSRCAzNiAgICAgIC8q IElGIFJFQURBQkxFICovCi0jZGVmaW5lICBYWElGV1IgMzcgICAgICAvKiBJRiBXUklURUFCTEUg Ki8KLSNkZWZpbmUgIFhYSUZBTiAzOCAgICAgIC8qIElGIC4uLiBBTkQgLi4uICovCi0jZGVmaW5l ICBYWElGT1IgMzkgICAgICAvKiBJRiAuLi4gT1IgLi4uICovCi0jZGVmaW5lICBYWElGTFAgNDAg ICAgICAvKiBJRiBsZWZ0IHBhcmVudGhlc2lzICovCi0jZGVmaW5lICBYWElGUlAgNDEgICAgICAv KiBJRiByaWdodCBwYXJlbnRoZXNpcyAqLwotI2RlZmluZSAgWFhJRk5RIDQyICAgICAgLyogSUYg IT0gKD09ICJOT1QgPSIpICovCi0jZGVmaW5lICBYWElGUVUgNDMgICAgICAvKiBJRiBRVUlFVCAq LwotI2RlZmluZSAgWFhJRkNLIDQ0ICAgICAgLyogSUYgQy1LRVJNSVQgKi8KLSNkZWZpbmUgIFhY SUZLOSA0NSAgICAgIC8qIElGIEstOTUgKi8KLSNkZWZpbmUgIFhYSUZNUyA0NiAgICAgIC8qIElG IE1TLUtFUk1JVCAqLwotI2RlZmluZSAgWFhJRldJIDQ3ICAgICAgLyogSUYgV0lMRCAqLwotI2Rl ZmluZSAgWFhJRkxPIDQ4ICAgICAgLyogSUYgTE9DQUwgKi8KLSNkZWZpbmUgIFhYSUZDTSA0OSAg ICAgIC8qIElGIENPTU1BTkQgKi8KLSNkZWZpbmUgIFhYSUZGUCA1MCAgICAgIC8qIElGIEZMT0FU ICovCi0jZGVmaW5lICBYWElGSUsgNTEgICAgICAvKiBJRiBJS1MgKi8KLSNkZWZpbmUgIFhYSUZL QiA1MiAgICAgIC8qIElGIEtCSElUICovCi0jZGVmaW5lICBYWElGS0cgNTMgICAgICAvKiBJRiBL RVJCQU5HICovCi0jZGVmaW5lICBYWElGVkUgNTQgICAgICAvKiBJRiBWRVJTSU9OICovCi0jZGVm aW5lICBYWElGREMgNTUgICAgICAvKiBJRiBERUNMQVJFRCAqLwotI2RlZmluZSAgWFhJRkdVIDU2 ICAgICAgLyogSUYgR1VJICovCi0jZGVmaW5lICBYWElGTE4gNTcJLyogSUYgTElOSyAqLwotI2Rl ZmluZSAgWFhJRkRCIDU4CS8qIElGIERFQlVHICovCi0KLXN0cnVjdCBrZXl0YWIgaWZ0YWJbXSA9 IHsgICAgICAgICAgICAgICAvKiBJRiBjb21tYW5kcyAqLwotICAgIHsgIiEiLCAgICAgICAgICBY WElGTk8sIDAgfSwKLSAgICB7ICIhPSIsICAgICAgICAgWFhJRk5RLCAwIH0sCi0gICAgeyAiJiYi LCAgICAgICAgIFhYSUZBTiwgMCB9LAotICAgIHsgIigiLCAgICAgICAgICBYWElGTFAsIDAgfSwK LSAgICB7ICIpIiwgICAgICAgICAgWFhJRlJQLCAwIH0sCi0gICAgeyAiPCIsICAgICAgICAgIFhY SUZMVCwgMCB9LAotICAgIHsgIjw9IiwgICAgICAgICBYWElGTEUsIDAgfSwKLSAgICB7ICI9Iiwg ICAgICAgICAgWFhJRkFFLCAwIH0sCi0gICAgeyAiPT0iLCAgICAgICAgIFhYSUZBRSwgQ01fSU5W IH0sCi0gICAgeyAiPiIsICAgICAgICAgIFhYSUZHVCwgMCB9LAotICAgIHsgIj49IiwgICAgICAg ICBYWElGR0UsIDAgfSwKLSAgICB7ICJhYnNvbHV0ZSIsICAgWFhJRkFCLCAwIH0sCi0gICAgeyAi YWxhcm0iLCAgICAgIFhYSUZBTCwgMCB9LAotICAgIHsgImFuZCIsICAgICAgICBYWElGQU4sIDAg fSwKLSAgICB7ICJhc2t0aW1lb3V0IiwgWFhJRkFULCAwIH0sCi0gICAgeyAiYXZhaWxhYmxlIiwg IFhYSUZBViwgMCB9LAotICAgIHsgImJhY2tncm91bmQiLCBYWElGQkcsIDAgfSwKLSAgICB7ICJj LWtlcm1pdCIsICAgWFhJRkNLLCAwIH0sCi0gICAgeyAiY29tbWFuZCIsICAgIFhYSUZDTSwgMCB9 LAotICAgIHsgImNvdW50IiwgICAgICBYWElGQ08sIDAgfSwKLSAgICB7ICJkY2wiLCAgICAgICAg WFhJRkRDLCBDTV9JTlYgfSwKLSAgICB7ICJkZWJ1ZyIsICAgICAgWFhJRkRCLCAwIH0sCi0gICAg eyAiZGVjbGFyZWQiLCAgIFhYSUZEQywgMCB9LAotICAgIHsgImRlZmluZWQiLCAgICBYWElGREUs IDAgfSwKLSNpZmRlZiBDS19UTVBESVIKLSAgICB7ICJkaXJlY3RvcnkiLCAgWFhJRkRJLCAwIH0s Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0gICAgeyAiZW11bGF0aW9uIiwgIFhYSUZFTSwgMCB9 LAotI2lmZGVmIENPTU1FTlQKLSAgICB7ICJlb2YiLCAgICAgICAgWFhJRkVPLCAwIH0sCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgIHsgImVxdWFsIiwgICAgICBYWElGRVEsIDAgfSwKLSAgICB7 ICJlcnJvciIsICAgICAgWFhJRkZBLCBDTV9JTlYgfSwKLSAgICB7ICJleGlzdCIsICAgICAgWFhJ RkVYLCAwIH0sCi0gICAgeyAiZmFpbHVyZSIsICAgIFhYSUZGQSwgMCB9LAotICAgIHsgImZhbHNl IiwgICAgICBYWElGTlQsIDAgfSwKLSAgICB7ICJmbGFnIiwgICAgICAgWFhJRkZMLCAwIH0sCi0j aWZkZWYgQ0tGTE9BVAotICAgIHsgImZsb2F0IiwgICAgICBYWElGRlAsIDAgfSwKLSNlbmRpZiAv KiBDS0ZMT0FUICovCi0gICAgeyAiZm9yZWdyb3VuZCIsIFhYSUZGRywgMCB9LAotI2lmZGVmIE9T MgotICAgIHsgImd1aSIsICAgICAgICBYWElGR1UsIDAgfSwKLSNlbHNlCi0gICAgeyAiZ3VpIiwg ICAgICAgIFhYSUZHVSwgQ01fSU5WIH0sCi0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgSUtTRAot ICAgIHsgImlrc2QiLCAgICAgICBYWElGSUssIDAgfSwKLSNlbHNlCi0gICAgeyAiaWtzZCIsICAg ICAgIFhYSUZJSywgQ01fSU5WIH0sCi0jZW5kaWYgLyogSUtTRCAqLwotICAgIHsgImludGVnZXIi LCAgICBYWElGTlUsIENNX0lOViB9LAotICAgIHsgImstOTUiLCAgICAgICBYWElGSzksIDAgfSwK LSAgICB7ICJrYmhpdCIsICAgICAgWFhJRktCLCAwIH0sCi0jaWZkZWYgVU5JWAotICAgIHsgImtl cmJhbmciLCAgICBYWElGS0csIDAgfSwKLSNlbHNlCi0gICAgeyAia2VyYmFuZyIsICAgIFhYSUZL RywgQ01fSU5WIH0sCi0jZW5kaWYgLyogVU5JWCAqLwotICAgIHsgImxndCIsICAgICAgICBYWElG TEcsIDAgfSwKLSNpZmRlZiBVTklYCi0gICAgeyAibGluayIsICAgICAgIFhYSUZMTiwgMCB9LAot I2VuZGlmIC8qIFVOSVggKi8KLSAgICB7ICJsbHQiLCAgICAgICAgWFhJRkxMLCAwIH0sCi0gICAg eyAibG9jYWwiLCAgICAgIFhYSUZMTywgMCB9LAotICAgIHsgIm1hdGNoIiwgICAgICBYWElGTUEs IDAgfSwKLSAgICB7ICJtcy1rZXJtaXQiLCAgWFhJRk1TLCBDTV9JTlYgfSwKLSNpZmRlZiBaRkNE QVQKLSAgICB7ICJuZXdlciIsICAgICAgWFhJRk5FLCAwIH0sCi0jZW5kaWYgLyogWkZDREFUICov Ci0gICAgeyAibm90IiwgICAgICAgIFhYSUZOTywgMCB9LAotICAgIHsgIm51bWVyaWMiLCAgICBY WElGTlUsIDAgfSwKLSAgICB7ICJvayIsICAgICAgICAgWFhJRlNVLCBDTV9JTlYgfSwKLSAgICB7 ICJvcGVuIiwgICAgICAgWFhJRk9QLCAwIH0sCi0gICAgeyAib3IiLCAgICAgICAgIFhYSUZPUiwg MCB9LAotICAgIHsgInF1aWV0IiwgICAgICBYWElGUVUsIDAgfSwKLSAgICB7ICJyZWFkYWJsZSIs ICAgWFhJRlJELCAwIH0sCi0gICAgeyAicmVtb3RlLW9ubHkiLFhYSUZSTywgMCB9LAotICAgIHsg InN0YXJ0ZWQtZnJvbS1kaWFsZXIiLFhYSUZTRCwgQ01fSU5WIH0sCi0gICAgeyAic3VjY2VzcyIs ICAgIFhYSUZTVSwgMCB9LAotICAgIHsgInRhcGkiLCAgICAgICBYWElGVEEsIDAgfSwKLSNpZmRl ZiBPUzIKLSAgICB7ICJ0ZXJtaW5hbC1tYWNybyIsIFhYSUZUTSwgMCB9LAotI2Vsc2UKLSAgICB7 ICJ0ZXJtaW5hbC1tYWNybyIsIFhYSUZUTSwgQ01fSU5WIH0sCi0jZW5kaWYgLyogT1MyICovCi0g ICAgeyAidHJ1ZSIsICAgICAgIFhYSUZUUiwgMCB9LAotICAgIHsgInZlcnNpb24iLCAgICBYWElG VkUsIDAgfSwKLSAgICB7ICJ3aWxkIiwgICAgICAgWFhJRldJLCAwIH0sCi0gICAgeyAid3JpdGVh YmxlIiwgIFhYSUZXUiwgMCB9LAotICAgIHsgInx8IiwgICAgICAgICBYWElGT1IsIDAgfSwKLSAg ICB7ICIiLCAwLCAwIH0KLX07Ci1pbnQgbmlmID0gKHNpemVvZihpZnRhYikgLyBzaXplb2Yoc3Ry dWN0IGtleXRhYikpIC0gMTsKLQotc3RydWN0IGtleXRhYiBpb3RhYltdID0geyAgICAgICAgICAg ICAgIC8qIEtleXdvcmRzIGZvciBJRiBPUEVOICovCi0gICAgeyAiIXJlYWQtZmlsZSIsICAgICAg WlJGSUxFLCBDTV9JTlYgfSwKLSAgICB7ICIhd3JpdGUtZmlsZSIsICAgICBaV0ZJTEUsIENNX0lO ViB9LAotICAgIHsgImFwcGVuZC1maWxlIiwgICAgIFpXRklMRSwgQ01fSU5WIH0sCi0gICAgeyAi Y29ubmVjdGlvbiIsICAgICAgODg4OCwgICAwIH0sCi0jaWZkZWYgQ0tMT0dESUFMCi0gICAgeyAi Y3gtbG9nIiwgICAgICAgICAgNzc3NywgICAwIH0sCi0jZW5kaWYgLyogQ0tMT0dESUFMICovCi0g ICAgeyAiZGVidWctbG9nIiwgICAgICAgWkRGSUxFLCAwIH0sCi0gICAgeyAiZXJyb3IiLCAgICAg ICAgICAgOTk5OSwgICAwIH0sCi0gICAgeyAicGFja2V0LWxvZyIsICAgICAgWlBGSUxFLCAwIH0s Ci0gICAgeyAicmVhZC1maWxlIiwgICAgICAgWlJGSUxFLCAwIH0sCi0gICAgeyAic2NyZWVuIiwg ICAgICAgICAgWlNURElPLCAwIH0sCi0gICAgeyAic2Vzc2lvbi1sb2ciLCAgICAgWlNGSUxFLCAw IH0sCi0gICAgeyAidHJhbnNhY3Rpb24tbG9nIiwgWlRGSUxFLCAwIH0sCi0gICAgeyAid3JpdGUt ZmlsZSIsICAgICAgWldGSUxFLCAwIH0KLX07Ci1pbnQgbmlvdCA9IChzaXplb2YoaW90YWIpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0vKiBWYXJpYWJs ZXMgYW5kIHByb3RvdHlwZXMgKi8KLQotX1BST1RPVFlQKHN0YXRpYyBpbnQgZG95bWRpciwoaW50 KSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCByZW5hbWVvbmUsKGNoYXIgKixjaGFyICosCi0JCQkJ aW50LGludCxpbnQsaW50LGludCxpbnQsaW50LGludCxpbnQsaW50LGludCkpOwotCi0jaWZkZWYg TkVUQ09OTgotZXh0ZXJuIGludCBubmV0ZGlyOyAgICAgICAgICAgICAgICAgICAgIC8qIEhvdyBt YW55IG5ldHdvcmsgZGlyZWN0b3JpZXMgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0jaWZkZWYg Q0tfU0VDVVJJVFkKLV9QUk9UT1RZUChpbnQgY2tfa3JiNF9pc19pbnN0YWxsZWQsKHZvaWQpKTsK LV9QUk9UT1RZUChpbnQgY2tfa3JiNV9pc19pbnN0YWxsZWQsKHZvaWQpKTsKLV9QUk9UT1RZUChp bnQgY2tfbnRsbV9pc19pbnN0YWxsZWQsKHZvaWQpKTsKLV9QUk9UT1RZUChpbnQgY2tfc3JwX2lz X2luc3RhbGxlZCwodm9pZCkpOwotX1BST1RPVFlQKGludCBja19zc2xlYXlfaXNfaW5zdGFsbGVk LCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IGNrX3NzaF9pc19pbnN0YWxsZWQsKHZvaWQpKTsKLV9Q Uk9UT1RZUChpbnQgY2tfY3J5cHRfaXNfaW5zdGFsbGVkLCh2b2lkKSk7Ci0jZWxzZQotI2RlZmlu ZSBja19rcmI0X2lzX2luc3RhbGxlZCgpICgwKQotI2RlZmluZSBja19rcmI1X2lzX2luc3RhbGxl ZCgpICgwKQotI2RlZmluZSBja19udGxtX2lzX2luc3RhbGxlZCgpICgwKQotI2RlZmluZSBja19z cnBfaXNfaW5zdGFsbGVkKCkgKDApCi0jZGVmaW5lIGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSAo MCkKLSNkZWZpbmUgY2tfc3NoX2lzX2luc3RhbGxlZCgpICgwKQotI2RlZmluZSBja19jcnlwdF9p c19pbnN0YWxsZWQoKSAoMCkKLSNlbmRpZiAvKiBDS19TRUNVUklUWSAqLwotCi0jZGVmaW5lIEFW X0tSQjQgICAxCi0jZGVmaW5lIEFWX0tSQjUgICAyCi0jZGVmaW5lIEFWX05UTE0gICAzCi0jZGVm aW5lIEFWX1NSUCAgICA0Ci0jZGVmaW5lIEFWX1NTTCAgICA1Ci0jZGVmaW5lIEFWX0NSWVBUTyA2 Ci0jZGVmaW5lIEFWX1NTSCAgICA3Ci0KLXN0cnVjdCBrZXl0YWIgYXZhaWx0YWJbXSA9IHsgICAg ICAgICAgICAgLyogQXZhaWxhYmxlIGF1dGhlbnRpY2F0aW9uIHR5cGVzICovCi0gICAgeyAiY3J5 cHRvIiwgICAgIEFWX0NSWVBUTywgQ01fSU5WIH0sIC8qIGFuZCBlbmNyeXB0aW9uICovCi0gICAg eyAiZW5jcnlwdGlvbiIsIEFWX0NSWVBUTywgMCB9LAotICAgIHsgIms0IiwgICAgICAgICBBVl9L UkI0LCAgIENNX0lOViB9LAotICAgIHsgIms1IiwgICAgICAgICBBVl9LUkI1LCAgIENNX0lOViB9 LAotICAgIHsgImtlcmJlcm9zNCIsICBBVl9LUkI0LCAgIDAgfSwKLSAgICB7ICJrZXJiZXJvczUi LCAgQVZfS1JCNSwgICAwIH0sCi0gICAgeyAia3JiNCIsICAgICAgIEFWX0tSQjQsICAgQ01fSU5W IH0sCi0gICAgeyAia3JiNSIsICAgICAgIEFWX0tSQjUsICAgQ01fSU5WIH0sCi0gICAgeyAibnRs bSIsICAgICAgIEFWX05UTE0sICAgMCB9LAotICAgIHsgInNycCIsICAgICAgICBBVl9TUlAsICAg IDAgfSwKLSAgICB7ICJzc2giLCAgICAgICAgQVZfU1NILCAgICAwIH0sCi0gICAgeyAic3NsIiwg ICAgICAgIEFWX1NTTCwgICAgMCB9LAotICAgIHsgInRscyIsICAgICAgICBBVl9TU0wsICAgIDAg fSwKLSAgICB7ICIiLCAgICAgICAgICAgMCwgICAgICAgICAwIH0KLX07Ci1pbnQgYXZhaWx0YWJu ID0gc2l6ZW9mKGF2YWlsdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYiktMTsKLQotI2lmbmRlZiBO T0RJQUwKLV9QUk9UT1RZUChzdGF0aWMgaW50IGRkY3Z0LCAoY2hhciAqLCBGSUxFICosIGludCkg KTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IGRuY3Z0LCAoaW50LCBpbnQsIGludCwgaW50KSApOwot X1BST1RPVFlQKGNoYXIgKiBnZXRkbmFtZSwgKHZvaWQpICk7Ci0KLXN0YXRpYyBpbnQgcGFydGlh bCAgPSAwOyAgICAgICAgICAgICAgICAvKiBGb3IgcGFydGlhbCBkaWFsICovCi1zdGF0aWMgY2hh ciAqZHNjb3B5ID0gTlVMTDsKLWludCBkaWFsdHlwZSA9IC0xOwotCi1jaGFyICpkaWFsbnVtID0g KGNoYXIgKikwOyAgICAgICAgICAgICAgLyogUmVtZW1iZXIgRElBTCBudW1iZXIgZm9yIFJFRElB TCAqLwotaW50IGRpcmxpbmUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpYWwgZGly ZWN0b3J5IGxpbmUgbnVtYmVyICovCi1leHRlcm4gY2hhciAqIGRpYWxkaXJbXTsgICAgICAgICAg ICAgICAgLyogRGlhbCBkaXJlY3RvcnkgZmlsZSBuYW1lcyAqLwotZXh0ZXJuIGludCBkaWFsZHB5 OyAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgRElTUExBWSBvbi9vZmYgKi8KLWV4dGVybiBp bnQgbmRpYWxkaXI7ICAgICAgICAgICAgICAgICAgICAvKiBIb3cgbWFueSBkaWFsIGRpcmVjdG9y aWVzICovCi1leHRlcm4gaW50IG50b2xsZnJlZTsgICAgICAgICAgICAgICAgICAgLyogVG9sbC1m cmVlIGNhbGwgaW5mbyAqLwotZXh0ZXJuIGludCBuZGlhbHB4eDsgICAgICAgICAgICAgICAgICAg IC8qIExpc3Qgb2YgUEJYIGV4Y2hhbmdlcyAqLwotZXh0ZXJuIGNoYXIgKmRpYWx0ZmNbXTsKLWNo YXIgKiBtYXRjaHB4eCA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBQQlggZXhjaGFuZ2UgdGhh dCBtYXRjaGVkICovCi1leHRlcm4gaW50IG5sb2NhbGFjOyAgICAgICAgICAgICAgICAgICAgLyog TG9jYWwgYXJlYS1jb2RlIGxpc3QgKi8KLWV4dGVybiBjaGFyICogZGlhbGxjYWNbXTsKLWV4dGVy biBpbnQgdHR0YXBpOwotI2lmZGVmIENLX1RBUEkKLWV4dGVybiBpbnQgdGFwaWNvbnY7ICAgICAg ICAgICAgICAgICAgICAvKiBUQVBJIENvbnZlcnNpb25zICovCi1leHRlcm4gaW50IHRhcGlwYXNz OyAgICAgICAgICAgICAgICAgICAgLyogVEFQSSBQYXNzdGhyb3VnaCAqLwotI2VuZGlmIC8qIENL X1RBUEkgKi8KLWV4dGVybiBpbnQgZGlhbGF0bW87Ci1leHRlcm4gY2hhciAqIGRpYWxucHIsICog ZGlhbHNmeDsKLWV4dGVybiBjaGFyICogZGlhbGl4cCwgKiBkaWFsaXhzLCAqIGRpYWxtYWM7Ci1l eHRlcm4gY2hhciAqIGRpYWxsZHAsICogZGlhbGxkcywgKiBkaWFsdGZwOwotZXh0ZXJuIGNoYXIg KiBkaWFscHhpLCAqIGRpYWxweG8sICogZGlhbGxhYzsKLWV4dGVybiBjaGFyICogZGlhbGxjcCwg KiBkaWFsbGNzLCAqIGRpYWxsY2M7Ci1leHRlcm4gY2hhciAqIGRpYWxweHhbXTsKLQotZXh0ZXJu IGludCBkaWFsY25mOyAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgQ09ORklSTUFUSU9OICov Ci1pbnQgZGlhbGZsZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBGT1JDRS1M T05HLURJU1RBTkNFICovCi1pbnQgZGlhbHNydCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAg LyogRElBTCBTT1JUIE9OICovCi1pbnQgZGlhbHJzdHIgPSA2OyAgICAgICAgICAgICAgICAgICAg ICAgLyogRElBTCBSRVNUUklDVElPTiAqLwotaW50IGRpYWx0ZXN0ID0gMDsgICAgICAgICAgICAg ICAgICAgICAgIC8qIERJQUwgVEVTVCAqLwotaW50IGRpYWxjb3VudCA9IDA7ICAgICAgICAgICAg ICAgICAgICAgIC8qIFx2KGRpYWxjb3VudCkgKi8KLQotZXh0ZXJuIGludCBkaWFsc3RhOyAgICAg ICAgICAgICAgICAgICAgIC8qIERpYWwgc3RhdHVzICovCi1pbnQgZGlhbHJ0ciA9IC0xLCAgICAg ICAgICAgICAgICAgICAgICAgLyogRGlhbCByZXRyaWVzICovCi0gICAgZGlhbGludCA9IDEwOyAg ICAgICAgICAgICAgICAgICAgICAgLyogRGlhbCByZXRyeSBpbnRlcnZhbCAqLwotZXh0ZXJuIGxv bmcgZGlhbGNhcGFzOyAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGNhcGFiaWxpdGllcyAqLwot ZXh0ZXJuIGludCBkaWFsY3Z0OyAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgQ09OVkVSVC1E SVJFQ1RPUlkgKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQotI2lmbmRlZiBOT1NQTAotI2RlZmlu ZSBJRkNPTkRMRU4gMjU2Ci1pbnQgaWZjLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogSUYgY2FzZSAqLwotICAgIG5vdCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEZsYWcgZm9yIElGIE5PVCAqLwotICAgIGlmYXJncyA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIENvdW50IG9mIElGIGNvbmRpdGlvbiB3b3JkcyAqLwotY2hhciBpZmNvbmRbSUZDT05E TEVOXTsgICAgICAgICAgICAgICAgIC8qIElGIGNvbmRpdGlvbiB0ZXh0ICovCi1jaGFyICppZmNw OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBJRiBjb25kaXRpb24g dGV4dCAqLwotZXh0ZXJuIGludCB2YXJldmFsOwotI2lmZGVmIERDTURCVUYKLWV4dGVybiBpbnQK LSAqaWZjbWQsICAqY291bnQsICAqaWZ0ZXN0LCAqaW50aW1lLAotICAgICppbnBjYXMsICp0YWtl cnIsICptZXJyb3IsICp4cXVpZXQsICp4dmFyZXY7Ci0jZWxzZQotZXh0ZXJuIGludCBpZmNtZFtd OyAgICAgICAgICAgICAgICAgICAgIC8qIExhc3QgY29tbWFuZCB3YXMgSUYgKi8KLWV4dGVybiBp bnQgaWZ0ZXN0W107ICAgICAgICAgICAgICAgICAgICAvKiBMYXN0IElGIHdhcyB0cnVlICovCi1l eHRlcm4gaW50IGNvdW50W107ICAgICAgICAgICAgICAgICAgICAgLyogRm9yIElGIENPVU5ULCBv bmUgZm9yIGVhY2ggY21kbHZsICovCi1leHRlcm4gaW50IGludGltZVtdOyAgICAgICAgICAgICAg ICAgICAgLyogRGl0dG8gZm9yIG90aGVyIHN0YWNrYWJsZXMuLi4gKi8KLWV4dGVybiBpbnQgaW5w Y2FzW107Ci1leHRlcm4gaW50IHRha2VycltdOwotZXh0ZXJuIGludCBtZXJyb3JbXTsKLWV4dGVy biBpbnQgeHF1aWV0W107Ci1leHRlcm4gaW50IHh2YXJldltdOwotI2VuZGlmIC8qIERDTURCVUYg Ki8KLSNlbHNlCi1leHRlcm4gaW50IHRha2VycltdOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNp ZmRlZiBEQ01EQlVGCi1leHRlcm4gY2hhciAqbGluZTsgICAgICAgICAgICAgICAgICAgICAgLyog Q2hhcmFjdGVyIGJ1ZmZlciBmb3IgYW55dGhpbmcgKi8KLWV4dGVybiBjaGFyICp0bXBidWY7Ci0j ZWxzZQotZXh0ZXJuIGNoYXIgbGluZVtdLCB0bXBidWZbXTsKLSNlbmRpZiAvKiBEQ01EQlVGICov Ci1leHRlcm4gY2hhciAqbHA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBs aW5lIGJ1ZmZlciAqLwotCi1pbnQgY3dkZiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQ1dEIGhhcyBiZWVuIGRvbmUgKi8KLQotLyogRmxhZ3MgZm9yIEVOQUJMRS9ESVNBQkxFICov Ci1leHRlcm4gaW50IGVuX2N3ZCwgZW5fY3B5LCBlbl9kZWwsIGVuX2RpciwgZW5fZmluLAotICAg ZW5fZ2V0LCBlbl9ob3MsIGVuX3JlbiwgZW5fc2VuLCBlbl9zZXQsIGVuX3NwYSwgZW5fdHlwLCBl bl93aG8sIGVuX2J5ZSwKLSAgIGVuX2FzZywgZW5fcXVlLCBlbl9yZXQsIGVuX21haSwgZW5fcHJp LCBlbl9ta2QsIGVuX3JtZCwgZW5feGl0LCBlbl9lbmE7Ci0KLWV4dGVybiBGSUxFICp0ZmlsZVtd OyAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHBvaW50ZXJzIGZvciBUQUtFIGNvbW1hbmQgKi8K LWV4dGVybiBjaGFyICp0Zm5hbVtdOyAgICAgICAgICAgICAgICAgICAvKiBOYW1lcyBvZiBUQUtF IGZpbGVzICovCi1leHRlcm4gaW50IHRmbGluZVtdOyAgICAgICAgICAgICAgICAgICAgLyogVEFL RS1maWxlIGxpbmUgbnVtYmVyICovCi0KLWV4dGVybiBpbnQgc3VjY2VzczsgICAgICAgICAgICAg ICAgICAgICAvKiBDb21tYW5kIHN1Y2Nlc3MvZmFpbHVyZSBmbGFnICovCi1leHRlcm4gaW50IGNt ZGx2bDsgICAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBwb3NpdGlvbiBpbiBjb21tYW5k IHN0YWNrICovCi0KLSNpZm5kZWYgTk9TUEwKLWV4dGVybiBpbnQgbWFjbHZsOyAgICAgICAgICAg ICAgICAgICAgICAvKiBNYWNybyB0byBleGVjdXRlICovCi1leHRlcm4gY2hhciAqbWFjeFtdOyAg ICAgICAgICAgICAgICAgICAgLyogSW5kZXggb2YgY3VycmVudCBtYWNybyAqLwotZXh0ZXJuIGNo YXIgKm1ydmFsW107ICAgICAgICAgICAgICAgICAgIC8qIE1hY3JvIHJldHVybiB2YWx1ZSAqLwot ZXh0ZXJuIGNoYXIgKm1hY3BbXTsgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbWFj cm8gKi8KLWV4dGVybiBpbnQgbWFjYXJnY1tdOyAgICAgICAgICAgICAgICAgICAvKiBBUkdDIGZy b20gbWFjcm8gaW52b2NhdGlvbiAqLwotCi0jaWZkZWYgQ09NTUVOVAotZXh0ZXJuIGNoYXIgKm1f bGluZVtdOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotZXh0ZXJuIGNoYXIgKm1fYXJnW01BQ0xF VkVMXVtOQVJHU107ICAgIC8qIFN0YWNrIG9mIG1hY3JvIGFyZ3VtZW50cyAqLwotZXh0ZXJuIGNo YXIgKmdfdmFyW107ICAgICAgICAgICAgICAgICAgIC8qIEdsb2JhbCB2YXJpYWJsZXMgJWEsICVi LCBldGMgKi8KLQotI2lmZGVmIERDTURCVUYKLWV4dGVybiBzdHJ1Y3QgY21kcHRyICpjbWRzdGs7 ICAgICAgICAgICAvKiBUaGUgY29tbWFuZCBzdGFjayBpdHNlbGYgKi8KLSNlbHNlCi1leHRlcm4g c3RydWN0IGNtZHB0ciBjbWRzdGtbXTsgICAgICAgICAgLyogVGhlIGNvbW1hbmQgc3RhY2sgaXRz ZWxmICovCi0jZW5kaWYgLyogRENNREJVRiAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNkZWZp bmUgeHN5c3RlbShzKSB6c3lzY21kKHMpCi0KLXN0YXRpYyBpbnQgeCwgeSwgeiA9IDA7Ci1zdGF0 aWMgY2hhciAqcywgKnA7Ci0KLSNpZmRlZiBPUzIKLV9QUk9UT1RZUCggaW50IG9zMnNldHRpdGxl LCAoY2hhciAqLCBpbnQpICk7Ci0jZW5kaWYgLyogT1MyICovCi0KLWV4dGVybiBzdHJ1Y3Qga2V5 dGFiIHllc25vW10sIG9ub2ZmW10sIGZudGFiW107Ci1leHRlcm4gaW50IG55ZXNubywgbmZudGFi OwotCi0jaWZuZGVmIE5PU1BMCi0KLS8qIERvIHRoZSBBU0ssIEFTS1EsIEdFVE9LLCBhbmQgUkVB RCBjb21tYW5kcyAqLwotCi1pbnQgYXNrdGltZWRvdXQgPSAwOwotCi0jZGVmaW5lIEFTS19QVVAg MQotI2RlZmluZSBBU0tfVE1PIDIKLSNkZWZpbmUgQVNLX0dVSSAzCi0jZGVmaW5lIEFTS19RVUkg NAotI2RlZmluZSBBU0tfREVGIDUKLSNkZWZpbmUgQVNLX0VDSCA2Ci0KLXN0YXRpYyBzdHJ1Y3Qg a2V5dGFiIGFza3RhYltdID0gewotICAgIHsgICIvZGVmYXVsdCIsIEFTS19ERUYsIENNX0FSRyB9 LAotICAgIHsgICIvZ3VpIiwgICAgIEFTS19HVUksICAgICAgCi0jaWZkZWYgS1VJCi0gICAgICAg ICAgIDAKLSNlbHNlIC8qIEtVSSAqLwotICAgICAgICAgICBDTV9JTlYKLSNlbmRpZiAvKiBLVUkg Ki8KLSAgICB9LAotICAgIHsgIi9wb3B1cCIsICAgIEFTS19QVVAsICAgCi0jaWZkZWYgT1MyCi0g ICAgICAgICAgIDAKLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICAgICBDTV9JTlYKLSNlbmRpZiAv KiBPUzIgKi8KLSAgICB9LAotICAgIHsgIi9xdWlldCIsICAgIEFTS19RVUksIDAgfSwKLSAgICB7 ICIvdGltZW91dCIsICBBU0tfVE1PLCBDTV9BUkcgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1z dGF0aWMgaW50IG5hc2t0YWIgPSBzaXplb2YoYXNrdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikt MTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgYXNrcXRhYltdID0gewotICAgIHsgIi9kZWZhdWx0 IiwgIEFTS19ERUYsIENNX0FSRyB9LAotICAgIHsgIi9lY2hvIiwgICAgIEFTS19FQ0gsIENNX0FS RyB9LAotICAgIHsgIi9ndWkiLCAgICAgIEFTS19HVUksICAgICAgCi0jaWZkZWYgS1VJCi0gICAg ICAgICAgIDAKLSNlbHNlIC8qIEtVSSAqLwotICAgICAgICAgICBDTV9JTlYKLSNlbmRpZiAvKiBL VUkgKi8KLSAgICB9LAotICAgIHsgIi9ub2VjaG8iLCAgIEFTS19RVUksIENNX0lOViB9LAotICAg IHsgIi9wb3B1cCIsICAgIEFTS19QVVAsICAgCi0jaWZkZWYgT1MyCi0gICAgICAgICAgIDAKLSNl bHNlIC8qIE9TMiAqLwotICAgICAgICAgICBDTV9JTlYKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9 LAotICAgIHsgIi9xdWlldCIsICAgIEFTS19RVUksIDAgfSwKLSAgICB7ICIvdGltZW91dCIsICBB U0tfVE1PLCBDTV9BUkcgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5hc2tx dGFiID0gc2l6ZW9mKGFza3F0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKS0xOwotCi1pbnQKLWRv YXNrKGN4KSBpbnQgY3g7IHsKLSAgICBleHRlcm4gaW50IGFza3RpbWVyLCB0aW1lbGltaXQ7Ci0j aWZkZWYgQ0tfUkVDQUxMCi0gICAgZXh0ZXJuIGludCBvbl9yZWNhbGw7Ci0jZW5kaWYgLyogQ0tf UkVDQUxMICovCi0gICAgaW50IGVjaG9jaGFyID0gMDsKLSAgICBpbnQgcG9wdXBmbGcgPSAwOwot ICAgIGludCBndWlmbGcgPSAwOwotICAgIGludCBub21zZyA9IDA7Ci0gICAgaW50IG15dGltZXIg PSAwOwotI2lmZGVmIENLX0FQQwotICAgIGV4dGVybiBpbnQgYXBjYWN0aXZlLCBhcGNzdGF0dXM7 Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0KLSAgICBjaGFyIGRmYnVmWzEwMjRdOwkJCS8qIEJ1ZmZl ciBmb3IgZGVmYXVsdCBhbnN3ZXIgKi8KLSAgICBjaGFyICogZGZhbnN3ZXIgPSBOVUxMOwkJLyog UG9pbnRlciB0byBpdCAqLwotCi0gICAgY2hhciB2bmFtYnVmW1ZOQU1MKzFdOyAgICAgICAgICAg ICAgLyogQnVmZmVyIGZvciB2YXJpYWJsZSBuYW1lcyAqLwotICAgIGNoYXIgKnZucCA9IE5VTEw7 ICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gc2FtZSAqLwotICAgIAotICAgIGRmYnVm WzBdID0gTlVMOwotICAgIHZuYW1idWZbMF0gPSBOVUw7Ci0KLSNpZmRlZiBDS19BUEMKLSAgICBp ZiAoIGFwY2FjdGl2ZSAhPSBBUENfSU5BQ1RJVkUgJiYgKGFwY3N0YXR1cyAmIEFQQ19OT0lOUCkg KSB7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX0FQ QyAqLwotCi0gICAgbXl0aW1lciA9IGFza3RpbWVyOyAgICAgICAgICAgICAgICAgLyogSW5oZXJp dCBnbG9iYWwgQVNLIHRpbWVyICovCi0gICAgZWNob3N0YXJzID0gMDsJCQkvKiBGb3IgQVNLUSAq LwotCi0gICAgaWYgKGN4ID09IFhYQVNLIHx8IGN4ID09IFhYQVNLUSkgewotICAgICAgICBzdHJ1 Y3QgRkRCIHN3LCBmbDsKLSAgICAgICAgaW50IGdldHZhbDsKLSAgICAgICAgY2hhciBjOwotICAg ICAgICBpZiAoY3ggPT0gWFhBU0tRKSAgICAgICAgICAgICAgIC8qIERvbid0IGxvZyBBU0tRIHJl c3BvbnNlICovCi0gICAgICAgICAgZGVib2sgPSAwOwotICAgICAgICBjbWZkYmkoJnN3LCAgICAg ICAgICAgICAgICAgICAgIC8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KLSAgICAg ICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAg ICAgICAgIlZhcmlhYmxlIG5hbWUgb3Igc3dpdGNoIiwKLSAgICAgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAiIiwgICAgICAg ICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkgICAgICAgKChjeCA9PSBY WEFTSykgPyBuYXNrdGFiIDogbmFza3F0YWIpLCAvKiBUYWJsZSBzaXplICovCi0gICAgICAgICAg ICAgICA0LCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQg PSBjbXN3aSAqLwotICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgIC8qIFBy b2Nlc3NpbmcgZnVuY3Rpb24gKi8KLQkgICAgICAgKChjeCA9PSBYWEFTSykgPyBhc2t0YWIgOiBh c2txdGFiKSwgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAgICAgJmZsICAgICAgICAg ICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAgICAgICk7 Ci0gICAgICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAgICAgLyogQW55dGhpbmcgdGhh dCBkb2Vzbid0IG1hdGNoICovCi0gICAgICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAg ICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAv KiBobHBtc2cgKi8KLSAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBk ZWZhdWx0ICovCi0gICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogYWRk dGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAg ICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotICAgICAgICAgICAgICAgMCwgICAgICAgICAg ICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0gICAgICAgICAgICAgICBO VUxMLAotICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgIE5VTEwKLSAgICAgICAg ICAgICAgICk7Ci0gICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgLyogUGFy c2UgMCBvciBtb3JlIHN3aXRjaGVzICovCi0gICAgICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAg ICAgICAgICAgLyogUGFyc2Ugc29tZXRoaW5nICovCi0gICAgICAgICAgICBpZiAoeCA8IDApCi0g ICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAh PSBfQ01LRVkpIC8qIEJyZWFrIG91dCBpZiBub3QgYSBzd2l0Y2ggKi8KLSAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICBjID0gY21nYnJrKCk7Ci0gICAgICAgICAgICBpZiAoKGdldHZh bCA9IChjID09ICc6JyB8fCBjID09ICc9JykpICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7 Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBh cmd1bWVudFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAg ICAgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxu Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewotCSAgICAgIGNhc2UgQVNLX1FVSToKLQkJ bm9tc2cgPSAxOwotCQlpZiAoY3ggPT0gWFhBU0tRKQotCQkgIGVjaG9zdGFycyA9IDA7Ci0JCWJy ZWFrOwotICAgICAgICAgICAgICBjYXNlIEFTS19QVVA6Ci0gICAgICAgICAgICAgICAgcG9wdXBm bGcgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICAgIGNhc2UgQVNLX0dVSToKLQkJ Z3VpZmxnID0gMTsKLQkJYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgQVNLX1RNTzogewotICAg ICAgICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oInNlY29uZHMiLCIxIiwxMCwmeCx4eHN0cmlu ZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAg ICAgaWYgKHggPCAwKQotICAgICAgICAgICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgICAgICAg ICAgIG15dGltZXIgPSB4OwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgY2FzZSBBU0tfRUNIOiB7Ci0gICAgICAgICAgICAgICAgICBpZiAo KHkgPSBjbWZsZCgiQ2hhcmFjdGVyIHRvIGVjaG8iLCIqIiwmcyx4eHN0cmluZykpIDwgMCkKLSAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotCQkgIGVjaG9jaGFyID0gKnM7Ci0gICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXNlIEFT S19ERUY6IHsKLSAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtZmxkKCJUZXh0IHRvIHN1cHBs eSBpZiByZXBseSBpcyBlbXB0eSIsCi0JCQkJICIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAg ICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0JCSAgY2tzdHJuY3B5KGRmYnVmLHMsMTAyNCk7Ci0J CSAgZGZhbnN3ZXIgPSBkZmJ1ZjsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybigtMik7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSAgICAgICAgLyogSGF2ZSB2YXJpYWJsZSBuYW1lLCBtYWtlIGNvcHkuICov Ci0gICAgICAgIGNrc3RybmNweSh2bmFtYnVmLGNtcmVzdWx0LnNyZXN1bHQsVk5BTUwpOwotICAg ICAgICB2bnAgPSB2bmFtYnVmOwotICAgICAgICBpZiAodm5hbWJ1ZlswXSA9PSBDTURRICYmCi0g ICAgICAgICAgICAodm5hbWJ1ZlsxXSA9PSAnJScgfHwgdm5hbWJ1ZlsxXSA9PSAnJicpKQotICAg ICAgICAgIHZucCsrOwotICAgICAgICB5ID0gMDsKLSAgICAgICAgaWYgKCp2bnAgPT0gJyUnIHx8 ICp2bnAgPT0gJyYnKSB7Ci0gICAgICAgICAgICBpZiAoKHkgPSBwYXJzZXZhcih2bnAsJngsJnop KSA8IDApCi0JICAgICAgcmV0dXJuKHkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChjeCAh PSBYWEdPSyAmJiBjeCAhPSBYWFJEQkwpIHsgLyogR2V0IHZhcmlhYmxlIG5hbWUgKi8KLSAgICAg ICAgaWYgKCh5ID0gY21mbGQoIlZhcmlhYmxlIG5hbWUiLCIiLCZzLE5VTEwpKSA8IDApIHsKLSAg ICAgICAgICAgIGlmICh5ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VmFyaWFi bGUgbmFtZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAg ICAgICAgIH0gZWxzZSByZXR1cm4oeSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY3B5KHZu YW1idWYscyxWTkFNTCk7ICAgICAvKiBNYWtlIGEgY29weS4gKi8KLSAgICAgICAgdm5wID0gdm5h bWJ1ZjsKLSAgICAgICAgaWYgKHZuYW1idWZbMF0gPT0gQ01EUSAmJgotICAgICAgICAgICAgKHZu YW1idWZbMV0gPT0gJyUnIHx8IHZuYW1idWZbMV0gPT0gJyYnKSkKLSAgICAgICAgICB2bnArKzsK LSAgICAgICAgeSA9IDA7Ci0gICAgICAgIGlmICgqdm5wID09ICclJyB8fCAqdm5wID09ICcmJykg ewotICAgICAgICAgICAgaWYgKCh5ID0gcGFyc2V2YXIodm5wLCZ4LCZ6KSkgPCAwKQotICAgICAg ICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGN4ID09IFhYUkVB IHx8IGN4ID09IFhYUkRCTCkgeyAgLyogUkVBRCBvciBSRUFEQkxPQ0sgY29tbWFuZCAqLwotICAg ICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApICAgICAgICAgIC8qIEdldCBjb25maXJtYXRpb24g Ki8KLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGlmIChjaGtmbihaUkZJTEUpIDwgMSkg eyAgICAgICAgLyogRmlsZSBvcGVuPyAqLwotICAgICAgICAgICAgcHJpbnRmKCI/UmVhZCBmaWxl IG5vdCBvcGVuXG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKCEocyA9IChjaGFyICopcmVhZGJ1ZikpIHsgICAgICAgICAgIC8qIFdo ZXJlIHRvIHJlYWQgaW50by4gKi8KLSAgICAgICAgICAgIHByaW50ZigiP09vcHMsIG5vIFJFQUQg YnVmZmVyIVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICB9 Ci0gICAgICAgIHkgPSB6c2lubChaUkZJTEUsIHMsIHJlYWRibG9jayk7IC8qIFJlYWQgYSBsaW5l LiAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJyZWFkIHpzaW5sIixzLHkpOwotICAgICAgICBpZiAo eSA8IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIE9uIEVPRiBvciBvdGhlciBlcnJvciwgKi8K LSAgICAgICAgICAgIHpjbG9zZShaUkZJTEUpOyAgICAgICAgICAgICAvKiBjbG9zZSB0aGUgZmls ZSwgKi8KLSAgICAgICAgICAgIGRlbG1hYyh2bnAsMCk7ICAgICAgICAgICAgICAvKiBkZWxldGUg dGhlIHZhcmlhYmxlLCAqLwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsgICAgICAg IC8qIGFuZCByZXR1cm4gZmFpbHVyZS4gKi8KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBSZWFkIHdhcyBPSy4gKi8KLSAgICAgICAgICAgIHJlYWRzaXplID0gKGlu dCkgc3RybGVuKHMpOwotICAgICAgICAgICAgc3VjY2VzcyA9IChhZGRtYWModm5wLHMpIDwgMCA/ IDAgOiAxKTsgLyogRGVmaW5lIHZhcmlhYmxlICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJy ZWFkIGFkZG1hYyIsdm5wLHN1Y2Nlc3MpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOyAg ICAgICAgICAgIC8qIFJldHVybiBzdWNjZXNzLiAqLwotICAgICAgICB9Ci0gICAgfQotCi0gICAg LyogQVNLLCBBU0tRLCBHRVRPSywgb3IgR0VUQyAqLwotCi0gICAgaWYgKGN4ID09IFhYR09LKSB7 CQkJLyogR0VUT0sgY2FuIHRha2Ugc3dpdGNoZXMgKi8KLSAgICAgICAgc3RydWN0IEZEQiBzdywg Zmw7Ci0gICAgICAgIGludCBnZXR2YWw7Ci0gICAgICAgIGNoYXIgYzsKLSAgICAgICAgY21mZGJp KCZzdywgICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVz ICovCi0gICAgICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8K LSAgICAgICAgICAgICAgICJWYXJpYWJsZSBuYW1lIG9yIHF1ZXN0aW9uIHByb21wdCIsCi0gICAg ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAg ICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICov Ci0gICAgICAgICAgICAgICBuYXNrdGFiLCAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJp YyBkYXRhIDE6IHRibCBzaXplICovCi0gICAgICAgICAgICAgICA0LCAgICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotICAgICAgICAgICAg ICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAg ICAgICAgICAgICAgIGFza3RhYiwgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICov Ci0gICAgICAgICAgICAgICAmZmwgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBu ZXh0IEZEQiAqLwotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgY21mZGJpKCZmbCwgICAgICAg ICAgICAgICAgICAgICAvKiBBbnl0aGluZyB0aGF0IGRvZXNuJ3QgbWF0Y2ggKi8KLSAgICAgICAg ICAgICAgIF9DTVRYVCwgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAg ICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLwotICAgICAgICAgICAgICAg IiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAg ICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICov Ci0gICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJp YyBkYXRhIDIgKi8KLSAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICBOVUxMLAot ICAgICAgICAgICAgICAgTlVMTAotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgd2hpbGUgKDEp IHsgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSAwIG9yIG1vcmUgc3dpdGNoZXMgKi8KLSAg ICAgICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcg Ki8KLSAgICAgICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAg ICAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkgLyogQnJlYWsgb3V0IGlmIG5v dCBhIHN3aXRjaCAqLwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGMgPSBjbWdi cmsoKTsKLSAgICAgICAgICAgIGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkg JiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9U aGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgICAg ICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFnZXR2YWwgJiYg KGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1RoaXMg c3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4o LTkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0 KSB7Ci0gICAgICAgICAgICAgIGNhc2UgQVNLX1BVUDoKLSAgICAgICAgICAgICAgICBwb3B1cGZs ZyA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0JICAgICAgY2FzZSBBU0tfR1VJOgotCQln dWlmbGcgPSAxOwotCQlicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBBU0tfVE1POiB7Ci0gICAg ICAgICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgic2Vjb25kcyIsIjEiLDEwLCZ4LHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAg ICBpZiAoeCA8IDApCi0gICAgICAgICAgICAgICAgICAgIHggPSAwOwotICAgICAgICAgICAgICAg ICAgbXl0aW1lciA9IHg7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICBjYXNlIEFTS19ERUY6IHsKLSAgICAgICAgICAgICAgICAgIGlmICgo eSA9IGNtZmxkKCJUZXh0IHRvIHN1cHBseSBpZiByZXBseSBpcyBlbXB0eSIsCi0JCQkJICIiLCZz LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0JCSAgY2tz dHJuY3B5KGRmYnVmLHMsMTAyNCk7Ci0JCSAgZGZhbnN3ZXIgPSBkZmJ1ZjsKLSAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0JICAgICAgY2FzZSBBU0tfUVVJOgotCQlu b21zZyA9IDE7Ci0JCWJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oLTIpOwot ICAgICAgICAgICAgfQotCX0KLQlwID0gY21yZXN1bHQuc3Jlc3VsdDsKLSAgICB9IGVsc2UKLSAg ICAgIGlmICgoeSA9IGNtdHh0KAotIlByb21wdCxcblwKLSBlbmNsb3NlIGluIHsgYnJhY2VzIH0g b3IgXCIgcXVvdGVzIFwiIHRvIHByZXNlcnZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cCi0gc3Bh Y2VzLCBwcmVjZWRlIHF1ZXN0aW9uIG1hcmsgd2l0aCBiYWNrc2xhc2ggKFxcKS4iLAotICAgICAg ICAgICAgICAgICAgICIiLCZwLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICByZXR1cm4oeSk7Ci0K LSAgICBpZiAoIXApIHAgPSAiIjsKLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGlm IChwb3B1cGZsZykgeyAgICAgICAgICAgICAgICAgICAgIC8qIFBvcHVwIHJlcXVlc3RlZCAqLwot ICAgICAgICBpbnQgbGVuID0gLTE7Ci0gICAgICAgIGNrc3RybmNweSh0bXBidWYsYnJzdHJpcChw KSxUTVBCVUZTSVopOwotICAgICAgICBwID0gdG1wYnVmOwotICAgICAgICBpZiAoY3ggPT0gWFhB U0sgfHwgY3ggPT0gWFhBU0tRKSB7Ci0gICAgICAgICAgICBpZiAoY3ggPT0gWFhBU0spCi0gICAg ICAgICAgICAgIGxlbiA9IHBvcHVwX3JlYWR0ZXh0KHZtb2RlLE5VTEwscCxsaW5lLExJTkJVRlNJ WixteXRpbWVyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgbGVuID0gcG9wdXBf cmVhZHBhc3Modm1vZGUsTlVMTCxwLGxpbmUsTElOQlVGU0laLG15dGltZXIpOwotICAgICAgICAg ICAgYXNrdGltZWRvdXQgPSAoIGxlbiA8IDAgJiYgbXl0aW1lciApOwotICAgICAgICB9IGVsc2Ug aWYgKGN4ID09IFhYR09LKSB7Ci0JICAgIHByaW50ZigiP1NvcnJ5LCBHRVRPSyAvUE9QVVAgbm90 IGltcGxlbWVudGVkIHlldFxuIik7Ci0JICAgIHRpbWVsaW1pdCA9IDA7Ci0JICAgIHJldHVybigt OSk7Ci0JfQotICAgICAgICBpZiAobGVuID49IDApIHsKLQkgICAgeSA9IGFkZG1hYyh2bnAsKGNo YXIgKilsaW5lKTsgLyogQWRkIGl0IHRvIHRoZSBtYWNybyB0YWJsZS4gKi8KLSAgICAgICAgfSBl bHNlIGlmICggYXNrdGltZWRvdXQgJiYgZGZhbnN3ZXIgKSB7Ci0gICAgICAgICAgICB5ID0gYWRk bWFjKHZucCxkZmFuc3dlcik7CSAgICAvKiBBZGQgaXQgdG8gdGhlIG1hY3JvIHRhYmxlLiAqLwot ICAgICAgICAgICAgYXNrdGltZWRvdXQgPSAwOwotICAgICAgICAgICAgbGVuID0gMDsKLSAgICAg ICAgfQotICAgICAgICB0aW1lbGltaXQgPSAwOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9ICgo bGVuID49IDApICYmICh5ID49IDApKSAmJiAhYXNrdGltZWRvdXQpOwotICAgIH0KLSNpZmRlZiBL VUkKLSAgICBpZiAoZ3VpZmxnKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBHVUkgcmVxdWVz dGVkICovCi0gICAgICAgIGludCByYywgbjsKLQljaGFyICogczE7Ci0JczEgPSB0bXBidWY7Ci0J biA9IFRNUEJVRlNJWi0xOwotCXp6c3RyaW5nKGJyc3RyaXAocCksJnMxLCZuKTsKLSAgICAgICAg cCA9IHRtcGJ1ZjsKLSAgICAgICAgaWYgKGN4ID09IFhYQVNLIHx8IGN4ID09IFhYQVNLUSkgewot ICAgICAgICAgICAgcmMgPSBndWlfdHh0X2RpYWxvZyhOVUxMLHAsKGN4ID09IFhYQVNLKSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSxMSU5CVUZTSVosZGZhbnN3ZXIsbXl0 aW1lcik7Ci0gICAgICAgICAgICBhc2t0aW1lZG91dCA9IChyYyA9PSAtMSAmJiBteXRpbWVyKTsK LSAgICAgICAgICAgIGlmIChyYyA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgeSA9IGFkZG1hYyh2 bnAsKGNoYXIgKilsaW5lKTsgLyogQWRkIGl0IHRvIHRoZSBtYWNybyB0YWJsZS4gKi8KLSAgICAg ICAgICAgIH0gZWxzZSBpZiAoIGFza3RpbWVkb3V0ICYmIGRmYW5zd2VyICkgewotICAgICAgICAg ICAgICAgIHkgPSBhZGRtYWModm5wLGRmYW5zd2VyKTsgLyogQWRkIGRlZmF1bHQgdG8gbWFjcm8g dGFibGUuICovCi0gICAgICAgICAgICAgICAgYXNrdGltZWRvdXQgPSAwOwotICAgICAgICAgICAg ICAgIHJjID0gMTsKLSAgICAgICAgICAgIH0KLQkgICAgdGltZWxpbWl0ID0gMDsKLQkgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAocmMgPT0gMSAmJiAoeSA+PSAwKSkgJiYgIWFza3RpbWVkb3V0KTsKLQl9 IGVsc2UgaWYgKGN4ID09IFhYR09LKSB7Ci0JICAgIGludCB4OwotCSAgICB4ID0gbG9va3VwKHll c25vLGRmYW5zd2VyLG55ZXNubyxOVUxMKTsKLQkgICAgaWYgKHggIT0gMSkgeCA9IDI7Ci0JICAg IHJjID0gdXFfb2soTlVMTCwgcCwgMywgTlVMTCwgeCk7Ci0JICAgIHJldHVybihzdWNjZXNzID0g KHJjID09IDEpKTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIEtVSSAqLwotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAg ICAgICAgICAgIC8qIEVudGVyIENCUkVBSyBtb2RlICovCi0gICAgY21zYXZwKHBzYXZlLFBST01Q VEwpOyAgICAgICAgICAgICAgLyogU2F2ZSBvbGQgcHJvbXB0ICovCi0gICAgY21zZXRwKGJyc3Ry aXAocCkpOyAgICAgICAgICAgICAgICAgLyogTWFrZSBuZXcgcHJvbXB0ICovCi0KLXJlcHJvbXB0 OgotICAgIGlmIChjeCA9PSBYWEFTS1EpIHsgICAgICAgICAgICAgICAgIC8qIEZvciBBU0tRLCAq LwotICAgICAgICBjbWluaSgwKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vLWVjaG8gbW9k ZS4gKi8KLQlpZiAoZWNob2NoYXIpCi0JICBlY2hvc3RhcnMgPSBlY2hvY2hhcjsKLSAgICB9IGVs c2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3Igb3RoZXJzLCByZWd1bGFyIGVj aG9pbmcuICovCi0gICAgICAgIGNtaW5pKGNreGVjaCk7Ci0JZWNob3N0YXJzID0gMDsKLSAgICB9 Ci0gICAgYXNrZmxhZyA9IDE7Ci0gICAgeCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVGhpcyBtZWFucyB0byByZXBhcnNlLiAqLwotICAgIGNtZmxncyA9IDA7Ci0gICAgaWYg KHBmbGFnKQotICAgICAgcHJvbXB0KHh4c3RyaW5nKTsgICAgICAgICAgICAgICAgIC8qIElzc3Vl IHByb21wdC4gKi8KLQotICAgIGFza3RpbWVkb3V0ID0gMDsgICAgICAgICAgICAgICAgICAgIC8q IEhhbmRsZSB0aW1lZCByZXNwb25zZXMuICovCi0gICAgdGltZWxpbWl0ID0gbXl0aW1lcjsKLXJl cGFyc2U6Ci0gICAgY21yZXMoKTsKLSAgICBpZiAoY3ggPT0gWFhHT0spIHsgICAgICAgICAgICAg ICAgICAvKiBHRVRPSyAqLwotI2lmZGVmIENLX1JFQ0FMTAotICAgICAgICBvbl9yZWNhbGwgPSAw OwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotICAgICAgICBhc2tmbGFnID0gMDsKLQkvKiBHRVRP SyB1c2VzIGtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgeCA9IGNta2V5KHllc25vLG55ZXNubywi IixkZmFuc3dlcix4eHN0cmluZyk7Ci0gICAgICAgIGlmICh4IDwgMCkgeyAgICAgICAgICAgICAg ICAgICAgLyogUGFyc2UgZXJyb3IgKi8KLSAgICAgICAgICAgIGlmICh4ID09IC0xMCkgewotCQlj aGFyICogZHM7Ci0JCWRzID0gZGZhbnN3ZXIgPyBkZmFuc3dlciA6ICJObyI7Ci0JCWlmICghbm9t c2cpCi0JCSAgcHJpbnRmKCI/VGltZWQgb3V0LCBhc3N1bWluZyBcIiVzXCIiLGRzKTsKLQkJcHJp bnRmKCJcbiIpOwotICAgICAgICAgICAgICAgIGFza3RpbWVkb3V0ID0gMTsKLQkJeCA9IGxvb2t1 cCh5ZXNubyxkcyxueWVzbm8sTlVMTCk7Ci0JCWlmICh4ICE9IDEpIHggPSAwOwotICAgICAgICAg ICAgICAgIGdvdG8gZ29rZG9uZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSAtMykgeyAg ICAgICAvKiBObyBhbnN3ZXI/ICovCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJQbGVhc2UgcmVz cG9uZCBZZXMgb3IgTm9cbiIpOyAvKiBNYWtlIHRoZW0gYW5zd2VyICovCi0gICAgICAgICAgICAg ICAgY21pbmkoY2t4ZWNoKTsKLSAgICAgICAgICAgICAgICBnb3RvIHJlcHJvbXB0OwotICAgICAg ICAgICAgfSBlbHNlIGlmICh4ID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgZ290byByZXBhcnNl OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgIGdvdG8gcmVwcm9tcHQ7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKGNtY2ZtKCkgPCAwKSAgICAgICAgICAgICAgICAvKiBHZXQgY29u ZmlybWF0aW9uICovCi0gICAgICAgICAgZ290byByZXBhcnNlOwotICBnb2tkb25lOgotICAgICAg ICBhc2tmbGFnID0gMDsKLSAgICAgICAgY21zZXRwKHBzYXZlKTsgICAgICAgICAgICAgICAgICAv KiBSZXN0b3JlIHByb21wdCAqLwotI2lmZGVmIFZNUwotICAgICAgICBpZiAoY21kbHZsID4gMCkg ICAgICAgICAgICAgICAgIC8qIEluIFZNUyBhbmQgbm90IGF0IHRvcCBsZXZlbCwgKi8KLSAgICAg ICAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAvKiAgcmVzdG9yZSBjb25zb2xlIGFn YWluLiAqLwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICB0aW1lbGltaXQgPSAwOwotICAgICAg ICByZXR1cm4oeCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBzdWNjZXNzIG9yIGZh aWx1cmUgKi8KLSAgICB9IGVsc2UgaWYgKGN4ID09IFhYR0VUQyAgICAgICAgICAgICAvKiBHRVRD ICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICB8fCBjeCA9PSBYWEdFVEsgICAgICAgICAg Lyogb3IgR0VUS0VZQ09ERSAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgKSB7 ICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVEMgKi8KLSAgICAgICAgY2hhciB0bXBbMTZdOwot ICAgICAgICBjb25iaW4oKGNoYXIpZXNjYXBlKTsgICAgICAgICAgIC8qIFB1dCBrZXlib2FyZCBp biByYXcgbW9kZSAqLwotI2lmbmRlZiBOT1NFVEtFWQotI2lmZGVmIE9TMgotICAgICAgICBpZiAo Y3ggPT0gWFhHRVRLKSB7ICAgICAgICAgICAgIC8qIEdFVEtFWUNPREUgKi8KLSAgICAgICAgICAg IGV4dGVybiBpbnQgb3MyZ2tzOwotICAgICAgICAgICAgaW50IHQ7Ci0gICAgICAgICAgICB0ID0g b3MyZ2tzOyAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYga3ZlcmIgcmVjb2duaXRpb24gKi8K LSAgICAgICAgICAgIG9zMmdrcyA9IDA7Ci0gICAgICAgICAgICB4ID0gY29uZ2tzKHRpbWVsaW1p dCk7ICAgICAgLyogUmVhZCBhIGtleSBldmVudCwgYmxvY2tpbmcgKi8KLSAgICAgICAgICAgIG9z MmdrcyA9IHQ7ICAgICAgICAgICAgICAgICAvKiBQdXQgYmFjayBrdmVyYiByZWNvZ25pdGlvbiAq LwotICAgICAgICB9IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVEMgKi8KLSNl bmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotICAgICAgICB7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJHRVRDIGNvbmNoayIsIiIsY29uY2hrKCkpOwotICAgICAgICAgICAg eCA9IGNvbmluYyh0aW1lbGltaXQpOyAgICAgIC8qIEp1c3QgcmVhZCBvbmUgY2hhcmFjdGVyICov Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJHRVRDIGNvbmluYyIsIiIseCk7Ci0gICAgICAgIH0K LSAgICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAvKiBQdXQga2V5Ym9hcmQg YmFjayBpbiBjYnJlYWsgbW9kZSAqLwotICAgICAgICBpZiAoeCA+IC0xKSB7Ci0gICAgICAgICAg ICBpZiAoeGNtZHNyYyA9PSAwKQotICAgICAgICAgICAgICBwcmludGYoIlxyXG4iKTsKLSNpZmRl ZiBPUzIKLSAgICAgICAgICAgIGlmIChjeCA9PSBYWEdFVEspIHsgICAgICAgICAvKiBHRVRLRVlD T0RFICovCi0gICAgICAgICAgICAgICAgc3ByaW50Zih0bXAsIiVkIix4KTsgICAgLyogU0FGRSAq LwotICAgICAgICAgICAgfSBlbHNlIHsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAg ICB0bXBbMF0gPSAoY2hhcikgKHggJiAweGZmKTsKLSAgICAgICAgICAgICAgICB0bXBbMV0gPSBO VUw7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAg ICAgICB5ID0gYWRkbWFjKHZucCx0bXApOyAgICAgICAgLyogQWRkIGl0IHRvIHRoZSBtYWNybyB0 YWJsZS4gKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImdldGMvZ2V0ayBhZGRtYWMiLHZucCx5 KTsKLSAgICAgICAgfSBlbHNlIHkgPSAtMTsKLSAgICAgICAgY21zZXRwKHBzYXZlKTsgICAgICAg ICAgICAgICAgICAvKiBSZXN0b3JlIG9sZCBwcm9tcHQuICovCi0gICAgICAgIGlmICh4IDwgLTEp IHsKLSAgICAgICAgICAgIGFza3RpbWVkb3V0ID0gMTsKLSAgICAgICAgICAgIGlmICghcXVpZXQg JiYgIW5vbXNnKQotICAgICAgICAgICAgICBwcmludGYoIj9UaW1lZCBvdXQiKTsKLQkgICAgcHJp bnRmKCJcbiIpOwotICAgICAgICB9Ci0gICAgICAgIHRpbWVsaW1pdCA9IDA7Ci0gICAgICAgIHJl dHVybihzdWNjZXNzID0gKCh5IDwgMCA/IDAgOiAxKSAmJiAoYXNrdGltZWRvdXQgPT0gMCkpKTsK LSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBU0sgb3IgQVNLUSAq LwotI2lmZGVmIENLX1JFQ0FMTAotICAgICAgICBvbl9yZWNhbGwgPSAwOwkJCS8qIERvbid0IHB1 dCByZXNwb25zZSBpbiByZWNhbGwgYnVmICovCi0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0JYXNr ZmxhZyA9IDE7CQkJLyogQVNLW1FdIGFsd2F5cyBnb2VzIHRvIHRlcm1pbmFsICovCi0gICAgICAg IHkgPSBjbWRncXVvKCk7ICAgICAgICAgICAgICAgICAgLyogR2V0IGN1cnJlbnQgcXVvdGluZyAq LwotICAgICAgICBjbWRzcXVvKDApOyAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIHF1 b3RpbmcgKi8KLSAgICAgICAgd2hpbGUgKHggPT0gLTEpIHsgICAgICAgICAgICAgICAvKiBQcm9t cHQgdGlsbCB0aGV5IGFuc3dlciAqLwotICAgICAgICAgICAgeCA9IGNtdHh0KCJQbGVhc2UgcmVz cG9uZC4iLGRmYW5zd2VyLCZzLE5VTEwpOwotICAgICAgICAgICAgZGVidWcoRjExMSwiQVNLIGNt dHh0IixzLHgpOwotICAgICAgICAgICAgY21yZXMoKTsKLSAgICAgICAgfQotICAgICAgICBjbWRz cXVvKHkpOyAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgcHJldmlvdXMgcXVvdGluZyAq LwotICAgICAgICBpZiAoY3ggPT0gWFhBU0tRKSAgICAgICAgICAgICAgIC8qIEFTS1EgbXVzdCBl Y2hvIENSTEYgaGVyZSAqLwotICAgICAgICAgIHByaW50ZigiXHJcbiIpOwotCWlmICh4ID09IC0x MCAmJiBkZmFuc3dlcikgewkvKiBEb24ndCBmYWlsIG9uIHRpbWVvdXQgaWYgKi8KLQkgICAgcyA9 IGRmYW5zd2VyOwkJLyogYSBkZWZhdWx0IHdhcyBzcGVjaWZpZWQgKi8KLQkgICAgYXNrdGltZWRv dXQgPSAwOwkJLyogYW5kIGRvbid0IGZhaWwgKi8KLQkgICAgeCA9IDA7Ci0JfQotICAgICAgICBp ZiAoeCA8IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIElmIGNtdHh0IHBhcnNlIGVycm9yLCAq LwotICAgICAgICAgICAgY21zZXRwKHBzYXZlKTsgICAgICAgICAgICAgIC8qIHJlc3RvcmUgb3Jp Z2luYWwgcHJvbXB0ICovCi0jaWZkZWYgVk1TCi0gICAgICAgICAgICBpZiAoY21kbHZsID4gMCkg ICAgICAgICAgICAgLyogSW4gVk1TIGFuZCBub3QgYXQgdG9wIGxldmVsLCAqLwotICAgICAgICAg ICAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgIC8qICByZXN0b3JlIGNvbnNvbGUgYWdhaW4u ICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgICAgICAgICBpZiAoeCA9PSAtMTApIHsJCS8qIFRp bWVkIG91dCB3aXRoIG5vIHJlc3BvbnNlICovCi0JCWlmICghbm9tc2cpCi0JCSAgcHJpbnRmKCI/ VGltZWQgb3V0Iik7Ci0JCXByaW50ZigiXG4iKTsKLSAgICAgICAgICAgICAgICBhc2t0aW1lZG91 dCA9IDE7Ci0JCWlmIChkZmFuc3dlcikJCS8qIFN1cHBseSBkZWZhdWx0IGFuc3dlciBpZiBhbnkg Ki8KLQkJICBzID0gZGZhbnN3ZXI7Ci0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHggPSAwOwkv KiAod2FzICJ4ID0gLTk7IikgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRpbWVsaW1p dCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4oeCk7ICAgICAgICAgICAgICAgICAgLyogYW5kIHJl dHVybiBjbXR4dCdzIGVycm9yIGNvZGUuICovCi0gICAgICAgIH0KLSAgICAgICAgaWYgKCFzIHx8 ICpzID09IE5VTCkgewkJLyogSWYgdXNlciB0eXBlZCBhIGJhcmUgQ1IsICovCi0gICAgICAgICAg ICBjbXNldHAocHNhdmUpOyAgICAgICAgICAgICAgLyogUmVzdG9yZSBvbGQgcHJvbXB0LCAqLwot ICAgICAgICAgICAgZGVsbWFjKHZucCwwKTsgICAgICAgICAgICAgIC8qIGRlbGV0ZSB2YXJpYWJs ZSBpZiBpdCBleGlzdHMsICovCi0jaWZkZWYgVk1TCi0gICAgICAgICAgICBpZiAoY21kbHZsID4g MCkgICAgICAgICAgICAgLyogSW4gVk1TIGFuZCBub3QgYXQgdG9wIGxldmVsLCAqLwotICAgICAg ICAgICAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgIC8qICByZXN0b3JlIGNvbnNvbGUgYWdh aW4uICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgICAgICAgICB0aW1lbGltaXQgPSAwOwotICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsgICAgICAgIC8qIGFuZCByZXR1cm4uICovCi0g ICAgICAgIH0KLSAgICAgICAgeSA9IGFkZG1hYyh2bnAscyk7ICAgICAgICAgICAgICAvKiBBZGQg aXQgdG8gdGhlIG1hY3JvIHRhYmxlLiAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJhc2sgYWRkbWFj Iix2bnAseSk7Ci0gICAgICAgIGNtc2V0cChwc2F2ZSk7ICAgICAgICAgICAgICAgICAgLyogUmVz dG9yZSBvbGQgcHJvbXB0LiAqLwotI2lmZGVmIFZNUwotICAgICAgICBpZiAoY21kbHZsID4gMCkg ICAgICAgICAgICAgICAgIC8qIEluIFZNUyBhbmQgbm90IGF0IHRvcCBsZXZlbCwgKi8KLSAgICAg ICAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAvKiAgcmVzdG9yZSBjb25zb2xlIGFn YWluLiAqLwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICB0aW1lbGltaXQgPSAwOwotICAgICAg ICByZXR1cm4oc3VjY2VzcyA9ICh5IDwgMCA/IDAgOiAxKSAmJiAoYXNrdGltZWRvdXQgPT0gMCkp OwotICAgIH0KLX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PU1BMCi1pbnQKLWRv aW5jcihjeCkgaW50IGN4OyB7ICAgICAgICAgICAgICAgICAgICAvKiBJTkNSRU1FTlQsIERFQ1JF TUVOVCAqLwotICAgIGNoYXIgdm5hbWJ1ZltWTkFNTCsxXTsgICAgICAgICAgICAgIC8qIEJ1ZmZl ciBmb3IgdmFyaWFibGUgbmFtZXMgKi8KLSAgICBpbnQgZXZhbCA9IDA7Ci0gICAgQ0tfT0ZGX1Qg eDsKLSAgICBldmFsID0gKGN4ID09IFhYX0RFQ1IgfHwgY3ggPT0gWFhfSU5DUik7Ci0KLSAgICBp ZiAoKHkgPSBjbWZsZCgiVmFyaWFibGUgbmFtZSIsIiIsJnMsIGV2YWwgPyB4eHN0cmluZyA6IE5V TEwpKSA8IDApIHsKLSAgICAgICAgaWYgKHkgPT0gLTMpIHsKLSAgICAgICAgICAgIHByaW50Zigi P1ZhcmlhYmxlIG5hbWUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAg ICAgICAgfSBlbHNlIHJldHVybih5KTsKLSAgICB9Ci0gICAgY2tzdHJuY3B5KHZuYW1idWYscyxW TkFNTCk7Ci0gICAgaWYgKCh5ID0gY21udW13KCJieSBhbW91bnQiLCIxIiwxMCwmeCx4eHN0cmlu ZykpIDwgMCkKLSAgICAgIHJldHVybih5KTsKLSAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0g ICAgICByZXR1cm4oeSk7Ci0KLSAgICB6ID0gKGN4ID09IFhYX0lOQ1IgfHwgY3ggPT0gWFhJTkMp ID8gMSA6IDA7IC8qIEluY3JlbWVudCBvciBkZWNyZW1lbnQ/ICovCi0KLSAgICBpZiAoaW5jdmFy KHZuYW1idWYseCx6KSA8IDApIHsKLSAgICAgICAgcHJpbnRmKCI/VmFyaWFibGUgJXMgbm90IGRl ZmluZWQgb3Igbm90IG51bWVyaWNcbiIsdm5hbWJ1Zik7Ci0gICAgICAgIHJldHVybihzdWNjZXNz ID0gMCk7Ci0gICAgfQotICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci19Ci0KLS8qIFVzZWQgYnkg ZG91bmRlZigpICovCi1zdGF0aWMgaW50Ci14eHVuZGVmKHMsdmVyYm9zZSxzaW11bGF0ZSkgY2hh ciAqIHM7IGludCB2ZXJib3NlLCBzaW11bGF0ZTsgewotICAgIGludCByYyA9IDA7Ci0gICAgaWYg KCFzKSByZXR1cm4oMCk7Ci0gICAgaWYgKCpzID09IENNRFEgJiYgKihzKzEpID09ICclJykgewot ICAgICAgICBjaGFyIGMgPSAqKHMrMiksICogcCA9IE5VTEw7Ci0gICAgICAgIGlmIChjID49ICcw JyAmJiBjIDw9ICc5JykgewotICAgICAgICAgICAgaWYgKG1hY2x2bCA8IDApCi0gICAgICAgICAg ICAgIHAgPSBnX3ZhcltjXTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcCA9IG1f YXJnW21hY2x2bF1bYyAtICcwJ107Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAo aXN1cHBlcihjKSkgYyArPSAoJ2EnLSdBJyk7Ci0gICAgICAgICAgICBpZiAoYyA+PSAnYScgJiYg YyA8PSAneicpCi0gICAgICAgICAgICAgIHAgPSBnX3ZhcltjXTsKLSAgICAgICAgfQotICAgICAg ICBpZiAoIXApIHJldHVybigtMSk7Ci0gICAgfQotICAgIGlmICh2ZXJib3NlKQotICAgICAgcHJp bnRmKCIgJXMgIixzKTsKLSAgICBpZiAoc2ltdWxhdGUpIHsKLSAgICAgICAgcHJpbnRmKCIoU0VM RUNURUQpXG4iKTsKLSAgICB9IGVsc2UgaWYgKCh4ID0gZGVsbWFjKHMsMSkpID4gLTEpIHsgLyog RnVsbCBuYW1lIHJlcXVpcmVkICovCi0gICAgICAgIHJjID0gMTsKLSAgICAgICAgaWYgKHZlcmJv c2UpIHByaW50ZigiKE9LKVxuIik7Ci0gICAgfSBlbHNlIGlmICh2ZXJib3NlKQotICAgICAgcHJp bnRmKCIoRkFJTEVEKVxuIik7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotLyogRG8gdGhlIChfKURF RklORSwgKF8pQVNTSUdOLCBhbmQgVU5ERUZJTkUgY29tbWFuZHMgKi8KLQotI2RlZmluZSBVTkRf TUFUIDEKLSNkZWZpbmUgVU5EX1ZSQiAyCi0jZGVmaW5lIFVORF9FWEMgMwotI2RlZmluZSBVTkRf U0lNIDMKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgdW5kZWZzd2lbXSA9IHsKLSAgICB7ICIvbGlz dCIsICAgICBVTkRfVlJCLCAwIH0sCi0jaWZkZWYgQ09NTUVOVAotICAgIHsgIi9leGNlcHQiLCAg IFVORF9FWEMsIENNX0FSRyB9LAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB7ICIvbWF0Y2hp bmciLCBVTkRfTUFULCAwIH0sCi0gICAgeyAiL3NpbXVsYXRlIiwgVU5EX1NJTSwgMCB9LAotICAg IHsgIi92ZXJib3NlIiwgIFVORF9WUkIsIENNX0lOViB9Ci19Owotc3RhdGljIGludCBudW5kZWZz d2kgPSBzaXplb2YodW5kZWZzd2kpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotCi0jZGVmaW5l IFVOREVGTUFYIDY0Ci1zdGF0aWMgY2hhciAqKiB1bmRlZmxpc3QgPSBOVUxMOwotaW50Ci1kb3Vu ZGVmKGN4KSBpbnQgY3g7IHsgICAgICAgICAgICAgICAgICAgLyogVU5ERUYsIF9VTkRFRiAqLwot ICAgIGludCBpLCBqLCBuLCByYyA9IDAsIGFycmF5bXNnID0gMDsKLSAgICBpbnQgZG9tYXRjaCA9 IDAsIHZlcmJvc2UgPSAwLCBlcnJvcnMgPSAwLCBzaW11bGF0ZSA9IDAsIGZsYWcgPSAwOwotICAg IGNoYXIgKnZucCwgdm5idWZbNF07Ci0jaWZkZWYgQ09NTUVOVAotICAgIGNoYXIgKmV4Y2VwdCA9 IE5VTEw7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHN0cnVjdCBGREIgc3csIGZsOwotICAg IGludCBnZXR2YWw7Ci0gICAgY2hhciBjOwotCi0gICAgaWYgKCF1bmRlZmxpc3QpIHsgICAgICAg ICAgICAgICAgICAgLyogQWxsb2NhdGUgbGlzdCBpZiBuZWNlc3NhcnkgKi8KLSAgICAgICAgdW5k ZWZsaXN0ID0gKGNoYXIgKiopbWFsbG9jKFVOREVGTUFYICogc2l6ZW9mKGNoYXIgKikpOwotICAg ICAgICBpZiAoIXVuZGVmbGlzdCkgewotICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9j YXRpb24gZmFpbHVyZVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0g ICAgICAgIGZvciAoaSA9IDA7IGkgPCBVTkRFRk1BWDsgaSsrKQotICAgICAgICAgIHVuZGVmbGlz dFtpXSA9IE5VTEw7Ci0gICAgfQotICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KLSAgICAgICAgICAgX0NNS0VZ LCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAiVmFyaWFibGUg bmFtZSBvciBzd2l0Y2giLAotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICBudW5kZWZzd2ksICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotICAgICAgICAgICA0 LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0g Y21zd2kgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBQcm9j ZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgIHVuZGVmc3dpLCAgICAgICAgICAgICAgICAg ICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAmZmwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAgKTsKLSAgICBjbWZk YmkoJmZsLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbnl0aGluZyB0aGF0IGRvZXNuJ3Qg bWF0Y2ggKi8KLSAgICAgICAgICAgX0NNRkxELCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29k ZSAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAq LwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8K LSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcg ZGF0YSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRs IG51bWVyaWMgZGF0YSAxICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLSAgICAgICAgICAgKGN4ID09IFhYVU5ERUYp ID8gTlVMTCA6IHh4c3RyaW5nLAotICAgICAgICAgICBOVUxMLAotICAgICAgICAgICBOVUxMCi0g ICAgICAgICAgICk7Ci0gICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyog UGFyc2UgMCBvciBtb3JlIHN3aXRjaGVzICovCi0gICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAg ICAgICAgICAgICAgLyogUGFyc2Ugc29tZXRoaW5nICovCi0gICAgICAgIGlmICh4IDwgMCkKLSAg ICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkp ICAgLyogQnJlYWsgb3V0IGlmIG5vdCBhIHN3aXRjaCAqLwotICAgICAgICAgIGJyZWFrOwotICAg ICAgICBjID0gY21nYnJrKCk7Ci0gICAgICAgIGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMg PT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgIHByaW50 ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwotICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1 bHQpIHsKLSAgICAgICAgICBjYXNlIFVORF9NQVQ6IGRvbWF0Y2ggID0gMTsgYnJlYWs7Ci0gICAg ICAgICAgY2FzZSBVTkRfU0lNOiBzaW11bGF0ZSA9IDE7IC8qIGZhbGwgdGhydSBvbiBwdXJwb3Nl ICovCi0gICAgICAgICAgY2FzZSBVTkRfVlJCOiB2ZXJib3NlICA9IDE7IGJyZWFrOwotCi0jaWZk ZWYgQ09NTUVOVAotICAgICAgICAgIGNhc2UgVU5EX0VYQzoKLSAgICAgICAgICAgIGlmICghZ2V0 dmFsKSBicmVhazsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJQYXR0ZXJuIiwiIiwmcyx4 eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAg ICAgICAgICAgICAgIHByaW50ZigiP1BhdHRlcm4gcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAg ICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGdvdG8g eGdldHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYWtlc3RyKCZleGNlcHQsY21yZXN1 bHQuc3Jlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0K LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQot ICAgIH0KLSAgICBuID0gMDsKLSAgICBtYWtlc3RyKCYodW5kZWZsaXN0W24rK10pLGNtcmVzdWx0 LnNyZXN1bHQpOwotICAgIGZvciAoaSA9IDE7IGkgPCBVTkRFRk1BWDsgaSsrKSB7Ci0gICAgICAg IHggPSBjbWZsZCgiTWFjcm8gb3IgdmFyaWFibGUgbmFtZSIsIiIsJnMsCi0gICAgICAgICAgICAg ICAgICAoKGN4ID09IFhYVU5ERUYpID8gTlVMTCA6IHh4c3RyaW5nKQotICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgIGlmICgoeSA9IGNtY2Zt KCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgIH0gZWxzZSBpZiAoeSA8IDApIHsKLSAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAg ICAgfQotICAgICAgICBtYWtlc3RyKCYodW5kZWZsaXN0W24rK10pLHMpOwotICAgIH0KLSAgICAv KiBOb3cgd2UgaGF2ZSBhIGxpc3Qgb2YgbiB2YXJpYWJsZXMgb3IgcGF0dGVybnMgdG8gdW5kZWZp bmUgKi8KLQotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgZmxhZyA9IDA7 Ci0gICAgICAgIGlmICghKHZucCA9IHVuZGVmbGlzdFtpXSkpCi0gICAgICAgICAgY29udGludWU7 Ci0gICAgICAgIGlmICh2bnBbMF0gPT0gQ01EUSAmJiAodm5wWzFdID09ICclJyB8fCB2bnBbMV0g PT0gJyYnKSkgewotICAgICAgICAgICAgZmxhZysrOwotICAgICAgICAgICAgdm5wKys7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKCFkb21hdGNoKSB7ICAgICAgICAgICAgICAgICAvKiBQYXR0ZXJu IG1hdGNoIG5vdCByZXF1ZXN0ZWQgKi8KLSAgICAgICAgICAgIGlmIChmbGFnKSB7Ci0gICAgICAg ICAgICAgICAgaWYgKCh5ID0gcGFyc2V2YXIodm5wLCZ4LCZ6KSkgPCAwKSB7Ci0gICAgICAgICAg ICAgICAgICAgIHZucC0tOwotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgcHJpbnRm KCIgJXMuLi5lcnJvclxuIix2bnApOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdm5wLS07Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICB4ID0geHh1bmRlZih2bnAsdmVyYm9zZSxzaW11bGF0ZSk7Ci0gICAgICAgICAg ICBpZiAoeCA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF4ICYmICFzaW11bGF0ZSkgZXJy b3JzKys7Ci0gICAgICAgICAgICAgICAgcmMgKz0geDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8qIFBhdHRlcm4gbWF0Y2ggcmVxdWVz dGVkICovCi0KLSAgICAgICAgaWYgKCFmbGFnKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJdCdz IGEgbWFjcm8gKi8KLSAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBubWFjOyBqKyspIHsKLSAg ICAgICAgICAgICAgICBpZiAoY2ttYXRjaCh2bnAsbWFjdGFiW2pdLmt3ZCwwLDEpKSB7Ci0gICAg ICAgICAgICAgICAgICAgIHggPSB4eHVuZGVmKG1hY3RhYltqXS5rd2QsdmVyYm9zZSxzaW11bGF0 ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4ID4gLTEpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHJjICs9IHg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXgpIGVycm9ycysr OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc2ltdWxh dGUpCi0gICAgICAgICAgICAgICAgICAgICAgai0tOyAgICAgICAgICAgICAgLyogQmVjYXVzZSBt YWN0YWIgc2hpZnRlZCB1cCAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgfSBlbHNlIGlmICh2bnBbMF0gPT0gJyUnKSB7ICAgICAvKiBJdCdzIGEgXCV4IHZhcmlh YmxlICovCi0gICAgICAgICAgICB2bmJ1ZlswXSA9IENNRFE7Ci0gICAgICAgICAgICB2bmJ1Zlsx XSA9ICclJzsKLSAgICAgICAgICAgIHZuYnVmWzNdID0gTlVMOwotICAgICAgICAgICAgZm9yIChq ID0gJzAnOyBqIDw9ICd6JzsgaisrKSB7IC8qIDAuLjkgYS4ueiAqLwotICAgICAgICAgICAgICAg IHZuYnVmWzJdID0gajsKLSAgICAgICAgICAgICAgICBpZiAoY2ttYXRjaCh2bnAsJnZuYnVmWzFd LDAsMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IHh4dW5kZWYodm5idWYsdmVyYm9zZSxz aW11bGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4ID4gLTEpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmICgheCkgZXJyb3JzKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy YyArPSB4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGlmIChqID09ICc5JykgaiA9IChpbnQpJ2EnIC0gMTsgLyogOSAtPiBhICovCi0g ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodm5wWzBdID09ICcmJykgewotICAgICAg ICAgICAgaWYgKCFhcnJheW1zZyAmJiAhcXVpZXQpIHsKLSAgICAgICAgICAgICAgICBwcmludGYo Ij9VTkRFRklORSAvTUFUQ0ggY2FuJ3QgYmUgdXNlZCB3aXRoIGFycmF5cy5cbiIpOwotICAgICAg ICAgICAgICAgIHByaW50ZigiKFR5cGUgSEVMUCBBUlJBWSB0byBzZWUgb3RoZXIgbWV0aG9kcy4p XG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFycmF5bXNnKys7Ci0gICAgICAgICAg ICBlcnJvcnMrKzsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAodmVyYm9zZSkKLSAgICAgIHBy aW50ZigidW5kZWZpbmVkOiAlZCwgZXJyb3JzOiAlZFxuIixyYyxlcnJvcnMpOwotCi0gICAgZm9y IChpID0gMDsgaSA8IFVOREVGTUFYOyBpKyspIHsgICAgLyogQ2hlY2sgdGhlbSBhbGwgKi8KLSAg ICAgICAgaWYgKHVuZGVmbGlzdFtpXSkgeyAgICAgICAgICAgICAvKiBpbiBjYXNlIHdlIHdlcmUg aW50ZXJydXB0ZWQgKi8KLSAgICAgICAgICAgIGZyZWUodW5kZWZsaXN0W2ldKTsgICAgICAgICAv KiBwcmV2aW91c2x5Li4uICovCi0gICAgICAgICAgICB1bmRlZmxpc3RbaV0gPSBOVUxMOwotICAg ICAgICB9Ci0gICAgfQotICAgIHJldHVybihzdWNjZXNzID0gKGVycm9ycyA9PSAwKSA/IDEgOiAw KTsKLX0KLQotaW50Ci1kb2RlZihjeCkgaW50IGN4OyB7Ci0gICAgZXh0ZXJuIGludCB4eGRvdDsK LSAgICBleHRlcm4gY2hhciBwcHZuYW1idWZbXTsKLSAgICBpbnQgZG9ldmFsID0gMDsKLSAgICBj aGFyIHZuYW1idWZbVk5BTUwrMV07ICAgICAgICAgICAgICAvKiBCdWZmZXIgZm9yIHZhcmlhYmxl IG5hbWVzICovCi0gICAgY2hhciAqdm5wOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9p bnRlciB0byBzYW1lICovCi0gICAgaW50IGssIG15ZG90OwotICAgIG15ZG90ID0geHhkb3Q7ICAg ICAgICAgICAgICAgICAgICAgIC8qIENvcHkgKi8KLSAgICB4eGRvdCA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBhbmQgcmVzZXQgKi8KLS8qCi0gIEluIGNhc2Ugd2UgZ290IGhlcmUg ZnJvbSBhIGNvbW1hbmQgdGhhdCBiZWdpbnMgbGlrZSAiLlwlYSIsIGNta2V5KCkgaGFzCi0gIGFs cmVhZHkgZXZhbHVhdGVkIFwlYSwgYnV0IHdlIGRvbid0IHdhbnQgdGhhdCwgc28gd2UgcmV0cmll dmUgdGhlIHZhcmlhYmxlCi0gIG5hbWUgZnJvbSBhIHNwZWNpYWwgcHJlLWV2YWx1YXRpb24gYnVm ZmVyIGluIHRoZSBjb21tYW5kIG1vZHVsZSwgYW5kIHdlCi0gIHVuZG8gdGhlICJ1bmdldCB3b3Jk IiB0aGF0IHdvdWxkIGJlIGRvbmUgYmVjYXVzZSBvZiB0aGUgdG9rZW4sIGJlY2F1c2UgaWYKLSAg dGhlIHZhcmlhYmxlIHdhcyBkZWZpbmVkLCBpdCB3aWxsIHVuZ2V0IGl0cyB2YWx1ZSByYXRoZXIg dGhhbiBpdHMgbmFtZS4KLSovCi0gICAgcyA9IE5VTEw7Ci0KLSAgICBpZiAobXlkb3QgJiYgcHB2 bmFtYnVmWzBdID09ICcuJyAmJiBwcHZuYW1idWZbMV0pIHsKLSAgICAgICAgcyA9IHBwdm5hbWJ1 ZisxOwotICAgICAgICB1bnVuZ3coKTsKLSAgICB9Ci0gICAgaWYgKCFzKSB7Ci0gICAgICAgIGlm IChjeCA9PSBYWERGWCB8fCBjeCA9PSBYWEFTWCkKLSAgICAgICAgICAvKiBFdmFsdWF0ZSB2YXJp YWJsZSBuYW1lICovCi0gICAgICAgICAgeSA9IGNtZmxkKCJNYWNybyBvciB2YXJpYWJsZSBuYW1l IiwiIiwmcyx4eHN0cmluZyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAvKiBEb24ndCBldmFs dWF0ZSB0aGUgdmFyaWFibGUgbmFtZSAqLwotICAgICAgICAgIHkgPSBjbWZsZCgiTWFjcm8gb3Ig dmFyaWFibGUgbmFtZSIsIiIsJnMsTlVMTCk7Ci0gICAgICAgIGlmICh5IDwgMCkgewotICAgICAg ICAgICAgaWYgKHkgPT0gLTMpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9WYXJpYWJsZSBu YW1lIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAg ICAgfSBlbHNlIHJldHVybih5KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBrID0gc3RybGVuKHMp OwotICAgIGlmIChrID4gVk5BTUwpIHsKLSAgICAgICAgcHJpbnRmKCI/TmFtZSB0b28gbG9uZzog XCIlc1wiXG4iLHMpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBja3N0cm5jcHko dm5hbWJ1ZixzLFZOQU1MKTsKLSAgICB2bmFtYnVmW1ZOQU1MXSA9IE5VTDsKLSAgICB2bnAgPSB2 bmFtYnVmOwotICAgIGlmICh2bmFtYnVmWzBdID09IENNRFEgJiYgKHZuYW1idWZbMV0gPT0gJyUn IHx8IHZuYW1idWZbMV0gPT0gJyYnKSkgdm5wKys7Ci0gICAgaWYgKCp2bnAgPT0gJyUnIHx8ICp2 bnAgPT0gJyYnKSB7Ci0gICAgICAgIGlmICgoeSA9IHBhcnNldmFyKHZucCwmeCwmeikpIDwgMCkg cmV0dXJuKHkpOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgaWYgKGN4ID09IFhYVU5ERUYpIHsg ICAgICAgICAgICAvKiBVbmRlZmluZSAqLwotICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoIlRl eHQgdG8gYmUgaWdub3JlZCIsIiIsJnMsTlVMTCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAg ICAgZGVsbWFjKHZucCwwKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGRlYnVnKEYxMDEsImRvZGVmIHBh cnNldmFyIHgiLCIiLHgpOwotICAgICAgICBpZiAobXlkb3QpIHsKLSAgICAgICAgICAgIGlmICgo ZG9ldmFsID0gY21rZXkoYXNndGFiLG5hc2d0YWIsIm9wZXJhdG9yIiwiPSIsTlVMTCkpIDwgMCkK LSAgICAgICAgICAgICAgcmV0dXJuKGRvZXZhbCk7Ci0gICAgICAgICAgICBpZiAoZG9ldmFsID4g MCkgICAgICAgICAgICAgLyogVHlwZSBvZiBhc3NpZ25tZW50ICovCi0gICAgICAgICAgICAgIGN4 ID0gWFhBU1M7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHkgPT0gMSkgeyAgICAgICAgICAgICAg ICAgICAvKiBTaW1wbGUgdmFyaWFibGUgKi8KLSAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJE ZWZpbml0aW9uIG9mIHZhcmlhYmxlIiwiIiwmcyxOVUxMKSkgPCAwKQotICAgICAgICAgICAgICBy ZXR1cm4oeSk7Ci0gICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKLSAgICAgICAgICAgIGRlYnVn KEYxMTAsInh4ZGVmIHZhciBuYW1lIix2bnAsMCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ4 eGRlZiB2YXIgZGVmIixzLDApOwotICAgICAgICB9IGVsc2UgaWYgKHkgPT0gMikgeyAgICAgICAg ICAgIC8qIEFycmF5IGVsZW1lbnQgKi8KLSAgICAgICAgICAgIGlmICgoeSA9IGFycmF5bmFtKHZu cCwmeCwmeikpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAgICAgaWYgKHggPT0gOTYpIHsKLSAg ICAgICAgICAgICAgICBwcmludGYoIj9Bcmd1bWVudCB2ZWN0b3IgYXJyYXkgaXMgcmVhZC1vbmx5 XG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgaWYgKGNoa2FycmF5KHgseikgPCAwKSByZXR1cm4oLTIpOwotICAgICAgICAgICAgaWYg KCh5ID0gY210eHQoIkRlZmluaXRpb24gb2YgYXJyYXkgZWxlbWVudCIsIiIsJnMsTlVMTCkpIDwg MCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgZGVidWcoRjExMCwieHhk ZWYgYXJyYXkgcmVmIix2bnAsMCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ4eGRlZiBhcnJh eSBkZWYiLHMsMCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBNYWNybyAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgaWYgKGN4ID09IFhY VU5ERUYpIHsgICAgICAgICAgICAvKiBVbmRlZmluZSAqLwotICAgICAgICAgICAgaWYgKCh5ID0g Y210eHQoIlRleHQgdG8gYmUgaWdub3JlZCIsIiIsJnMsTlVMTCkpIDwgMCkgcmV0dXJuKHkpOwot ICAgICAgICAgICAgZGVsbWFjKHZucCwwKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGlmIChteWRvdCkg ewotICAgICAgICAgICAgaWYgKChkb2V2YWwgPSBjbWtleShhc2d0YWIsbmFzZ3RhYiwib3BlcmF0 b3IiLCI9IixOVUxMKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oZG9ldmFsKTsKLSAgICAg ICAgICAgIGlmIChkb2V2YWwgPiAwKQotICAgICAgICAgICAgICBjeCA9IFhYQVNTOwotICAgICAg ICB9Ci0gICAgICAgIGlmICgoeSA9IGNtdHh0KCJEZWZpbml0aW9uIG9mIG1hY3JvIiwiIiwmcyxO VUxMKSkgPCAwKSByZXR1cm4oeSk7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgaWYgKGRlYmxvZykg ewotICAgICAgICAgICAgZGVidWcoRjExMCwieHhkZWYgbWFjcm8gbmFtZSIsdm5wLDApOwotICAg ICAgICAgICAgZGVidWcoRjAxMCwieHhkZWYgbWFjcm8gZGVmIixzLDApOwotICAgICAgICB9Ci0j ZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgcyA9IGJyc3RyaXAocyk7Ci0gICAgfQotICAgIGlm ICgqcyA9PSBOVUwpIHsgICAgICAgICAgICAgICAgICAgIC8qIE5vIGFyZyBnaXZlbiwgdW5kZWZp bmUgKi8KLSAgICAgICAgZGVsbWFjKHZucCwxKTsgICAgICAgICAgICAgICAgICAvKiBzaWxlbnRs eS4uLiAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOyAgICAgICAgICAgIC8qIGV2ZW4g aWYgaXQgZG9lc24ndCBleGlzdC4uLiAqLwotICAgIH0KLSAgICAvKiBEZWZpbmluZyBhIG5ldyBt YWNybyBvciB2YXJpYWJsZSAqLwotCi0gICAgaWYgKGN4ID09IFhYQVNTIHx8IGN4ID09IFhYQVNY KSB7ICAgLyogQVNTSUdOIHJhdGhlciB0aGFuIERFRklORT8gKi8KLSAgICAgICAgaW50IHQ7Ci0g ICAgICAgIHQgPSBMSU5CVUZTSVotMTsKLSAgICAgICAgbHAgPSBsaW5lOyAgICAgICAgICAgICAg ICAgICAgICAvKiBJZiBzbywgZXhwYW5kIGl0cyB2YWx1ZSBub3cgKi8KLSAgICAgICAgenpzdHJp bmcocywmbHAsJnQpOwotICAgICAgICBzID0gbGluZTsKLSAgICB9Ci0gICAgaWYgKGRvZXZhbCA9 PSAyKSB7ICAgICAgICAgICAgICAgICAgLyogQXJpdGhtZXRpYyBldmFsdWF0aW9uIHdhbnRlZCB0 b28/ICovCi0gICAgICAgIGNrc3RybmNweShsaW5lLGV2YWxhKHMpLExJTkJVRlNJWik7Ci0gICAg ICAgIGxpbmVbTElOQlVGU0laXSA9IE5VTDsKLSAgICB9Ci0gICAgLyogZGVidWcoRjExMSwiY2Fs bGluZyBhZGRtYWMiLHMsKGludClzdHJsZW4ocykpOyAqLwotCi0gICAgeSA9IGFkZG1hYyh2bnAs cyk7ICAgICAgICAgICAgICAgICAgLyogQWRkIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSB0YWJsZS4g Ki8KLSAgICBpZiAoeSA8IDApIHsKLSAgICAgICAgcHJpbnRmKCI/JXMgZmFpbGVkXG4iLChjeCA9 PSBYWEFTUyB8fCBjeCA9PSBYWEFTWCkgPwotICAgICAgICAgICAgICAgIkFTU0lHTiIgOiAiREVG SU5FIik7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgfSBlbHNlIGlmIChjeCA9 PSBYWEFTWCB8fCBjeCA9PSBYWERGWCkgLyogRm9yIF9BU0cgb3IgX0RFRiwgKi8KLSAgICAgIHJl dHVybigxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb24ndCBjaGFuZ2Ugc3VjY2Vz cyB2YXJpYWJsZSAqLwotICAgIGVsc2UKLSAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci19Ci0j ZW5kaWYgLyogTk9TUEwgKi8KLQotCi0jaWZuZGVmIE5PRElBTAotLyoKLSAgIEwgVSBEIEkgQSBM ICAtLSAgTG9va3VwIHVwIGRpYWxpbmcgZGlyZWN0b3J5IGVudHJ5LgotCi0gICBDYWxsIHdpdGgg c3RyaW5nIHRvIGxvb2sgdXAgYW5kIGZpbGUgZGVzY3JpcHRvciBvZiBvcGVuIGRpYWxpbmcgZGly ZWN0b3J5Ci0gICBmaWxlLiAgT24gc3VjY2VzcywgcmV0dXJucyBudW1iZXIgb2YgbWF0Y2hlcyBm b3VuZCwgd2l0aCBudW1iZXJzIHN0b3JlZAotICAgaW4gYW4gYXJyYXkgYWNjZXNzaWJsZSB2aWEg Z2V0ZG51bSgpLgotKi8KLXN0YXRpYyBjaGFyICpkbl9wW01BWEROVU1TICsgMV07ICAgICAgICAv KiBEaWFsIE51bWJlciBwb2ludGVycyAqLwotc3RhdGljIGNoYXIgKmRuX3AyW01BWEROVU1TICsg MV07ICAgICAgIC8qIENvbnZlcnRlZCBkaWFsIG51bWJlciBwb2ludGVycyAqLwotc3RhdGljIGlu dCBkbl94W01BWEROVU1TICsgMV07ICAgICAgICAgIC8qIFR5cGUgb2YgY2FsbCAqLwotc3RhdGlj IGludCBkbmNvdW50ID0gMDsKLWNoYXIgKiBkX25hbWUgPSBOVUxMOyAgICAgICAgICAgICAgICAg ICAvKiBEaWFsIG5hbWUgcG9pbnRlciAqLwotCi1jaGFyICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogR2V0IGRpYWwgZGlyZWN0b3J5IGVudHJ5IG5hbWUgKi8KLWdldGRuYW1l KCkgewotICAgIHJldHVybihkX25hbWUgPyBkX25hbWUgOiAiIik7Ci19Ci0KLWNoYXIgKgotZ2V0 ZG51bShuKSBpbnQgbjsgeyAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBkaWFsIG51bWJlciBu IGZyb20gZGlyZWN0b3J5ICovCi0gICAgaWYgKG4gPCAwIHx8IG4gPiBkbmNvdW50IHx8IG4gPiBN QVhETlVNUykKLSAgICAgIHJldHVybigiIik7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKGRuX3Bb bl0pOwotfQotCi1jaGFyICogICAgICAgICAgICAgICAgICAvKiBDaGVjayBhcmVhIGNvZGUgZm9y IHNwdXJpb3VzIGxlYWRpbmcgZGlnaXQgKi8KLWNoa19hYyhpLGJ1ZikgaW50IGk7IGNoYXIgYnVm W107IHsKLSAgICBjaGFyICpwOwotICAgIGlmICghYnVmKQotICAgICAgcmV0dXJuKCIiKTsKLSAg ICBwID0gKGNoYXIgKikgYnVmOyAgICAgICAgICAgICAgICAgICAvKiBDb3VudHJ5IHdlIGFyZSBj YWxsaW5nOiAqLwotICAgIGlmIChpID09ICA0NCB8fCAgICAgICAgICAgICAgICAgICAgIC8qIFVL ICovCi0gICAgICAgIGkgPT0gIDQ5IHx8ICAgICAgICAgICAgICAgICAgICAgLyogR2VybWFueSAq LwotICAgICAgICBpID09ICAzOSB8fCAgICAgICAgICAgICAgICAgICAgIC8qIEl0YWx5ICovCi0g ICAgICAgIGkgPT0gIDMxIHx8ICAgICAgICAgICAgICAgICAgICAgLyogTmV0aGVybGFuZHMgKi8K LSAgICAgICAgaSA9PSAzNTEgfHwgICAgICAgICAgICAgICAgICAgICAvKiBQb3J0dWdhbCAqLwot ICAgICAgICBpID09ICA1NSB8fCAgICAgICAgICAgICAgICAgICAgIC8qIEJyYXppbCAqLwotICAg ICAgICBpID09IDk3MiB8fCAgICAgICAgICAgICAgICAgICAgIC8qIElzcmFlbCAqLwotICAgICAg ICBpID09ICA0MSB8fCAgICAgICAgICAgICAgICAgICAgIC8qIFN3aXR6ZXJsYW5kICovCi0gICAg ICAgIGkgPT0gIDQzIHx8ICAgICAgICAgICAgICAgICAgICAgLyogQXVzdHJpYSAqLwotICAgICAg ICBpID09ICA0MiB8fCAgICAgICAgICAgICAgICAgICAgIC8qIEN6ZWNoIFJlcHVibGljICovCi0g ICAgICAgIGkgPT0gIDM2IHx8ICAgICAgICAgICAgICAgICAgICAgLyogSHVuZ2FyeSAqLwotICAg ICAgICBpID09ICAzMCB8fCAgICAgICAgICAgICAgICAgICAgIC8qIEdyZWVjZSAqLwotICAgICAg ICBpID09IDM1MiB8fCAgICAgICAgICAgICAgICAgICAgIC8qIEx1eGVtYm91cmcgKi8KLSAgICAg ICAgaSA9PSAgNDggfHwgICAgICAgICAgICAgICAgICAgICAvKiBQb2xhbmQgKi8KLSAgICAgICAg aSA9PSAgMjcgfHwgICAgICAgICAgICAgICAgICAgICAvKiBTb3V0aCBBZnJpY2EgKi8KLSAgICAg ICAgaSA9PSAgMzMgfHwgICAgICAgICAgICAgICAgICAgICAvKiBGcmFuY2UgKGFzIG9mIDE5OTcp ICovCi0gICAgICAgIGkgPT0gIDM1OCAgICAgICAgICAgICAgICAgICAgICAgLyogRmlubGFuZCAo ZGl0dG8pICovCi0gICAgICAgICkgewotICAgICAgICBpZiAoYnVmWzBdID09ICcwJykKLSAgICAg ICAgICBwKys7Ci0gICAgfQotICAgIHJldHVybihwKTsKLX0KLQotLyogQ2FsbCBJcyBMb25nIERp c3RhbmNlIC0tIEV4cGFuZCB0aGlzIHRvIGNvdmVyIDEwLWRpZ2l0IGxvY2FsIGRpYWxpbmcgZXRj ICovCi0vKgotICAgc3JjICA9IGFyZWEgY29kZSBvZiBjYWxsZXIKLSAgIGRlc3QgPSBhcmVhIGNv ZGUgb2YgY2FsbGVlCi0gICBSZXR1cm5zOgotICAgICAwIGlmIGNhbGwgaXMgbG9jYWwKLSAgICAg MSBpZiBjYWxsIGlzIGxvbmcgZGlzdGFuY2UKLSAgICAgMiBpZiBjYWxsIGlzIGxvY2FsIGJ1dCBh cmVhIGNvZGUgbXVzdCBiZSBkaWFsZWQgYW55d2F5Ci0qLwotc3RhdGljIGludAotY2FsbGlzbGQo c3JjLCBkZXN0KSBjaGFyICogc3JjLCAqIGRlc3Q7IHsKLSAgICBpbnQgaTsKLSAgICBpZiAoZGlh bGZsZCkgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3JjZSBsb25nIGRpc3RhbmNlPyAqLwot ICAgICAgcmV0dXJuKDEpOwotICAgIGlmICghc3RyY21wKHNyYyxkZXN0KSkgeyAgICAgICAgICAg IC8qIEFyZWEgY29kZXMgYXJlIHRoZSBzYW1lICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBu bG9jYWxhYzsgaSsrKSAgLyogSXMgQUMgaW4gdGhlIGxjLWFyZWEtY29kZXMgbGlzdD8gKi8KLSAg ICAgICAgICBpZiAoIXN0cmNtcChzcmMsZGlhbGxjYWNbaV0pKQotICAgICAgICAgICAgcmV0dXJu KDIpOyAgICAgICAgICAgICAgICAgIC8qIFllcyBzbyBtdXN0IGJlIGRpYWxlZCAqLwotICAgICAg ICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHNvIGRvbid0IGRpYWwgaXQu ICovCi0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBubG9jYWxhYzsgaSsrKSAgICAgIC8qIEFD cyBub3QgdGhlIHNhbWUgc28gbG9vayBpbiBsaXN0ICovCi0gICAgICBpZiAoIXN0cmNtcChkZXN0 LGRpYWxsY2FjW2ldKSkgICAgLyogTWF0Y2ggKi8KLSAgICAgICAgcmV0dXJuKDIpOyAgICAgICAg ICAgICAgICAgICAgICAvKiBTbyBsb2NhbCBjYWxsIHdpdGggYXJlYSBjb2RlICovCi0gICAgcmV0 dXJuKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGxvY2FsIHNvIGxvbmctZGlz dGFuY2UgKi8KLX0KLQotY2hhciBwZHNmeFs2NF0gPSB7IE5VTCwgTlVMIH07Ci0KLSNpZm5kZWYg Tk9TUEwKLXN0YXRpYyBjaGFyICoKLXhkaWFsKHMpIGNoYXIgKnM7IHsgICAgICAgICAgICAgICAg ICAgICAvKiBSdW4gZGlhbCBzdHJpbmcgdGhydSBtYWNybyAqLwotICAgIGludCB4LCBtOwotICAg IGNoYXIgKiBzMjsKLSAgICBzMiA9IE5VTEw7Ci0gICAgbWFrZXN0cigmczIscyk7CQkJLyogQ29w eSB0aGUgYXJndW1lbnQgKi8KLSAgICBpZiAoIWRpYWxtYWMpICAgICAgICAgICAgICAgICAgICAg ICAvKiBEaWFsIG1hY3JvIG5hbWUgZ2l2ZW4/ICovCi0gICAgICByZXR1cm4oTlVMTCk7Ci0gICAg aWYgKCh4ID0gbXhsb29rKG1hY3RhYixkaWFsbWFjLG5tYWMpKSA8IDApIC8qIElzIHRoZSBtYWNy byBkZWZpbmVkPyAqLwotICAgICAgcmV0dXJuKE5VTEwpOwotICAgIG0gPSBtYWNsdmw7Ci0gICAg eCA9IGRvZG8oeCxzMiwwKTsJCQkvKiBTZXQgdXAgdGhlIG1hY3JvICovCi0gICAgaWYgKHMyKSBm cmVlKHMyKTsKLSAgICBpZiAoeCA+IDApIHsKLSAgICAgICAgd2hpbGUgKG1hY2x2bCA+IG0pICAg ICAgICAgICAgICAvKiBFeGVjdXRlIHRoZSBwYXJzZXIgKi8KLSAgICAgICAgICBwYXJzZXIoMSk7 Ci0gICAgICAgIHJldHVybihtcnZhbFttYWNsdmwrMV0pOyAgICAgICAgLyogUmV0dXJuIHRoZSBy ZXN1bHQgKi8KLSAgICB9Ci0gICAgcmV0dXJuKE5VTEwpOwotfQotI2VuZGlmIC8qIE5PU1BMICov Ci0KLXN0YXRpYyBpbnQKLWRuY3Z0KGssY3gsIHByZWZpeCwgc3VmZml4KQotICAgIGludCBrLCBj eCwgcHJlZml4LCBzdWZmaXg7IHsgICAgICAgIC8qIERpYWwgTnVtYmVyIENvbnZlcnQgKi8KLSAg ICBpbnQgaSwgaiwgbiwgd2hhdDsgICAgICAgICAgICAgICAgICAvKiBjeCBpcyB0b3AtbGV2ZWwg Y29tbWFuZCBpbmRleCAqLwotICAgIGNoYXIgKnNzOyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHByZWZpeCAtIGFkZCBwcmVmaXhlcz8gKi8KLSAgICBjaGFyICpwLCAqcDIsICpweG87ICAg ICAgICAgICAgICAgICAvKiBzdWZmaXggLSBhZGQgc3VmZml4ZXM/ICovCi0gICAgY2hhciAqbGFj OwotICAgIGNoYXIgKm5wcjsKLSAgICBjaGFyICpzZng7Ci0gICAgLyogY2hhciAqcHNmeDsgKi8K LSAgICBjaGFyIGNjYnVmWzEyOF07Ci0gICAgaW50IGNjOwotICAgIGNoYXIgYWNidWZbMjRdOwot ICAgIGNoYXIgKmFjcHRyOwotICAgIGNoYXIgb3V0YnVmWzI1Nl07Ci0vKgotICBGaXJzdCBwYXNz IGZvciBzdHJpY3QgKHB1bmN0dWF0aW9uLWJhc2VkKSBpbnRlcnByZXRhdGlvbi4KLSAgSWYgaXQg ZmFpbHMsIHdlIHRyeSB0aGUgbG9vc2VyIChsZW5ndGgtYmFzZWQpIG9uZS4KLSovCi0gICAgZGlh bHR5cGUgPSAtMTsKLSAgICB3aGF0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBU eXBlIG9mIGNhbGwgKi8KLSAgICBzID0gZG5fcFtrXTsgICAgICAgICAgICAgICAgICAgICAgICAv KiBOdW1iZXIgdG8gYmUgY29udmVydGVkLiAqLwotICAgIGRlYnVnKEYxMTEsImRuY3Z0IixzLGsp OwotICAgIGlmIChkbl9wMltrXSkgewotICAgICAgICBmcmVlKGRuX3AyW2tdKTsKLSAgICAgICAg ZG5fcDJba10gPSBOVUxMOwotICAgIH0KLSAgICBpZiAoIXMpIHsKLSAgICAgICAgcHJpbnRmKCJF cnJvciAtIE5vIHBob25lIG51bWJlciB0byBjb252ZXJ0XG4iKTsKLSAgICAgICAgcmV0dXJuKC0x KTsKLSAgICB9Ci0gICAgaWYgKChpbnQpc3RybGVuKHMpID4gMjAwKSB7Ci0gICAgICAgIGNrc3Ry bmNweShvdXRidWYscyw0MCk7Ci0gICAgICAgIHByaW50ZigiP1RvbyBsb25nOiBcIiVzLi4uXCJc biIsb3V0YnVmKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgbnByID0gKHByZWZp eCAmJiBkaWFsbnByKSA/IGRpYWxucHIgOiAiIjsKLSAgICBzZnggPSAoc3VmZml4ICYmIGRpYWxz ZngpID8gZGlhbHNmeCA6ICIiOwotICAgIC8qIGlmIChwYXJ0aWFsKSBwc2Z4ID0gZGlhbHNmeCA/ IGRpYWxzZnggOiAiIjsgKi8KLSAgICBweG8gPSAocHJlZml4ICYmIGRpYWxweG8pID8gZGlhbHB4 byA6ICIiOwotICAgIGxhYyA9IGRpYWxsYWMgPyBkaWFsbGFjIDogIiI7ICAgICAgIC8qIExvY2Fs IGFyZWEgY29kZSAqLwotCi0gICAgb3V0YnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAgICAg LyogSW5pdGlhbGl6ZSBjb252ZXJzaW9uIGJ1ZmZlciAqLwotICAgIHNzID0gczsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIG9yaWdpbmFsIHN0cmluZyAqLwotCi0gICAg aWYgKCpzICE9ICcrJykgeyAgICAgICAgICAgICAgICAgICAgLyogTGl0ZXJhbCBudW1iZXIgKi8K LSAgICAgICAgZG5feFtrXSA9IEROX1VOSzsgICAgICAgICAgICAgICAvKiBTb3J0IGtleSBpcyAi dW5rbm93biIuICovCi0gICAgICAgIGNrbWFrbXNnKG91dGJ1ZiwyNTYsICAgICAgICAgICAgLyog U2FuZHdpY2ggaXQgYmV0d2VlbiAqLwotICAgICAgICAgICAgICAgICBweG8sbnByLHMsc2Z4ICAg ICAgICAgIC8qIERJQUwgUFJFRklYIGFuZCBTVUZGSVggKi8KLSAgICAgICAgICAgICAgICApOwot I2lmZGVmIENLX1RBUEkKLSAgICAgICAgaWYgKHR0dGFwaSAmJiAgICAgICAgICAgICAgICAgICAv KiBUQVBJIGRvZXMgaXRzIG93biBjb252ZXJzaW9ucyAqLwotICAgICAgICAgICAgIXRhcGlwYXNz ICYmICAgICAgICAgICAgICAgIC8qIGlmIG5vdCBpbiBwYXNzdGhydSBtb2RlICovCi0gICAgICAg ICAgICB0YXBpY29udiA9PSBDS19BVVRPIHx8ICAgICAgLyogYW5kIFRBUEkgY29udmVyc2lvbnMg YXJlIEFVVE8gKi8KLSAgICAgICAgICAgIHRhcGljb252ID09IENLX09OICAgICAgICAgICAvKiBP UiBpZiBUQVBJIGNvbnZlcnNpb25zIGFyZSBPTiAqLwotICAgICAgICAgICAgKSB7Ci0gICAgICAg ICAgICBjaGFyICogcCA9IE5VTEw7Ci0gICAgICAgICAgICBkaWFsdHlwZSA9IC0yOwotICAgICAg ICAgICAgaWYgKCFja3RhcGlDb252ZXJ0UGhvbmVOdW1iZXIoZG5fcFtrXSwgJnApKQotICAgICAg ICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgbWFrZXN0cigmZG5fcDJba10sIHApOwot ICAgICAgICAgICAgaWYgKHApIGZyZWUocCk7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAg ICAgIH0gZWxzZQotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSAgICAgICAgICBtYWtlc3RyKCZkbl9w MltrXSwgb3V0YnVmKTsgICAvKiBOb3QgVEFQSSAqLwotICAgICAgICBkaWFsdHlwZSA9IHdoYXQ7 Ci0gICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgLyogRG9uZS4gKi8KLSAg ICB9Ci0gICAgaSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9ydGFibGUg bnVtYmVyICovCi0gICAgcysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGlw dG9lIHBhc3QgdGhlIHBsdXMgc2lnbiAqLwotICAgIGNjYnVmWzBdID0gTlVMOyAgICAgICAgICAg ICAgICAgICAgIC8qIERvIGNvdW50cnkgY29kZSBmaXJzdCAqLwotCi0gICAgaWYgKCFkaWFsbGNj KSB7ICAgICAgICAgICAgICAgICAgICAgLyogRG8gd2Uga25vdyBvdXIgb3duPyAqLwotICAgICAg ICBpZiAoY3ggIT0gWFhMT09LKQotICAgICAgICAgIHByaW50ZigiRXJyb3IgLSBwcmlvciBTRVQg RElBTCBDT1VOVFJZLUNPREUgY29tbWFuZCByZXF1aXJlZFxuIik7Ci0gICAgICAgIHJldHVybigt MSk7Ci0gICAgfQotCi0gICAgLyogUGFyc2UgdGhlIG51bWJlciAqLwotCi0gICAgd2hpbGUgKDEp IHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHRoZSBjb3VudHJ5IGNvZGUgKi8KLSAg ICAgICAgd2hpbGUgKCpzID09IEhUIHx8ICpzID09IFNQKQotICAgICAgICAgIHMrKzsKLSAgICAg ICAgaWYgKCFzKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgaW4gc3RhbmRhcmQgZm9y bWF0ICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICgqcyA9PSAnKCcpIHsgICAgICAg ICAgICAgICAgLyogQmVnaW5uaW5nIG9mIGFyZWEgY29kZSAgKi8KLSAgICAgICAgICAgIHMrKzsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIHBhc3QgcGFyZW50aGVzaXMgICAqLwotICAg ICAgICAgICAgY2NidWZbaV0gPSBOVUw7ICAgICAgICAgICAgIC8qIEVuZCBvZiBjb3VudHJ5IGNv ZGUgKi8KLSAgICAgICAgICAgIGlmICghcykgeyAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBm b3IgZW5kIG9mIHN0cmluZyAqLwotICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgLSBwaG9u ZSBudW1iZXIgZW5kcyBwcmVtYXR1cmVseTogXCIlc1wiXG4iLHNzKTsKLSAgICAgICAgICAgICAg ICByZXR1cm4oLTEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29sbGVjdCBjb3VudHJ5IGNvZGUg Ki8KLSAgICAgICAgICAgIGlmIChpc2RpZ2l0KCpzKSkKLSAgICAgICAgICAgICAgY2NidWZbaSsr XSA9ICpzOyAgICAgICAgICAvKiBjb3B5IHRoaXMgY2hhcmFjdGVyICovCi0gICAgICAgICAgICBz Kys7Ci0gICAgICAgICAgICBpZiAoISpzIHx8IGkgPiAxMjcpICAgICAgICAgLyogd2F0Y2ggb3V0 IGZvciBtZW1vcnkgbGVhayAqLwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg IH0KLSAgICBjYyA9IGF0b2koY2NidWYpOyAgICAgICAgICAgICAgICAgICAvKiBOdW1lcmljIHZl cnNpb24gb2YgY291bnRyeSBjb2RlICovCi0KLSAgICBpID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBOb3cgZ2V0IGFyZWEgY29kZSAqLwotICAgIGFjYnVmWzBdID0gTlVMOyAg ICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgYXJlYS1jb2RlIGJ1ZmZlciAqLwotICAg IGFjcHRyID0gYWNidWY7ICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBwb2ludGVyLiAqLwot ICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIHdoaWxlICgqcyA9PSBIVCB8fCAqcyA9PSBTUCkgICAg LyogSWdub3JlIHdoaXRlc3BhY2UgKi8KLSAgICAgICAgICBzKys7Ci0gICAgICAgIGlmICghcykg ICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RyaW5nIGZpbmlzaGVkICovCi0gICAgICAgICAg YnJlYWs7Ci0gICAgICAgIGlmICgqcyA9PSAnKScpIHsgICAgICAgICAgICAgICAgLyogRW5kIG9m IGFyZWEgY29kZSAgKi8KLSAgICAgICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAgICAgICAv KiBTa2lwIHBhc3QgcGFyZW50aGVzaXMgICAqLwotICAgICAgICAgICAgYWNidWZbaV0gPSBOVUw7 ICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSBhcmVhLWNvZGUgYnVmZmVyICovCi0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJ0 IG9mIGFyZWEgY29kZSAqLwotICAgICAgICAgICAgaWYgKGlzZGlnaXQoKnMpKSAgICAgICAgICAg IC8qIElmIGl0J3MgYSBkaWdpdCwgKi8KLSAgICAgICAgICAgICAgYWNidWZbaSsrXSA9ICpzOyAg ICAgICAgICAvKiBjb3B5IHRoaXMgY2hhcmFjdGVyICovCi0gICAgICAgICAgICBzKys7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gbmV4dCAqLwotICAgICAgICAgICAgaWYgKCEq cyB8fCBpID4gMjMpICAgICAgICAgIC8qIFdhdGNoIG91dCBmb3Igb3ZlcmZsb3cgKi8KLSAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLS8qCi0gICBIZXJlIHdlIHN0cmlw IGFueSBsZWFkaW5nIDAgZm9yIGNvdW50cmllcyB0aGF0IHdlIGtub3cgaGF2ZQotICAgMCBhcyBh IGxvbmctZGlzdGFuY2UgcHJlZml4IGFuZCBkbyBub3QgaGF2ZSBhbnkgYXJlYSBjb2RlcyB0aGF0 Ci0gICBzdGFydCB3aXRoIDAgKGZvcm1lcmx5IGFsc28gZGl0dG8gZm9yICI5IiBpbiBGaW5sYW5k Li4uKQotKi8KLSAgICBpID0gYXRvaShjY2J1Zik7Ci0gICAgYWNwdHIgPSBjaGtfYWMoaSxhY2J1 Zik7Ci0KLSAgICB3aGlsZSAoKnMgPT0gSFQgfHwgKnMgPT0gU1ApICAgICAgICAvKiBTa2lwIHdo aXRlc3BhY2UgKi8KLSAgICAgIHMrKzsKLQotLyogcHJpbnRmKCJTPVslc10sIEFDUFRSPVslc11c biIscyxhY3B0cik7ICovCi0KLSAgICBpZiAoKnMgJiYgKmFjcHRyKSB7ICAgICAgICAgICAgICAg ICAvKiBBcmVhIGNvZGUgd2FzIGRlbGltaXRlZCAqLwotCi0gICAgICAgIHdoaWxlICgqcyA9PSAn LScgfHwgKnMgPT0gJy4nKSAgLyogU2tpcCBwYXN0IGdyYXR1aXRpb3VzIHB1bmN0dWF0aW9uICov Ci0gICAgICAgICAgcysrOwotICAgICAgICBpZiAoISpzKSBzLS07ICAgICAgICAgICAgICAgICAg IC8qIEJ1dCBub3QgdG8gZW5kIG9mIHN0cmluZyAqLwotCi0gICAgICAgIGlmIChzdHJjbXAoZGlh bGxjYyxjY2J1ZikpIHsgICAgLyogT3V0IG9mIGNvdW50cnk/ICovCi0gICAgICAgICAgICBpZiAo IWRpYWxpeHApIHsgICAgICAgICAgICAgLyogTmVlZCBpbnRsLXByZWZpeCAqLwotICAgICAgICAg ICAgICAgIGlmIChjeCAhPSBYWExPT0spCi0gICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9y IC0gTm8gaW50ZXJuYXRpb25hbCBkaWFsaW5nIHByZWZpeCBkZWZpbmVkXG4iKTsKLSAgICAgICAg ICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hhdCA9IGRu X3hba10gPSBETl9JTlRMOwotICAgICAgICAgICAgcCAgPSAocHJlZml4ICYmIGRpYWxpeHApID8g ZGlhbGl4cCA6ICIiOyAvKiBJbnRsLXByZWZpeCAqLwotICAgICAgICAgICAgcDIgPSAoc3VmZml4 ICYmIGRpYWxpeHMpID8gZGlhbGl4cyA6ICIiOyAvKiBJbnRsLXN1ZmZpeCAqLwotCi0gICAgICAg ICAgICAvKiBGb3JtIHRoZSBmaW5hbCBwaG9uZSBudW1iZXIgKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgICAgICBzcHJpbnRmKHBkc2Z4LCIlcyVzIixwMixzZngpOyAvKiBVTlNBRkUgKi8KLSAg ICAgICAgICAgIHNwcmludGYob3V0YnVmLAotICAgICAgICAgICAgICAgICAgICAiJXMlcyVzJXMl cyVzJXMlcyIsCi0gICAgICAgICAgICAgICAgICAgIHB4byxucHIscCxjY2J1ZixhY3B0cixzLHAy LHNmeAotICAgICAgICAgICAgICAgICAgICApOwotI2Vsc2UKLSAgICAgICAgICAgIGNrbWFrbXNn KHBkc2Z4LDY0LHAyLHNmeCxOVUxMLE5VTEwpOwotICAgICAgICAgICAgY2ttYWt4bXNnKG91dGJ1 ZiwyNTYscHhvLG5wcixwLGNjYnVmLGFjcHRyLHMscDIsc2Z4LAotICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgICAg ICB9IGVsc2UgaWYgKCh4ID0gY2FsbGlzbGQobGFjLGFjcHRyKSkgPj0gMSkgeyAvKiBJbi1jb3Vu dHJ5IExEICovCi0gICAgICAgICAgICBpZiAoIWRpYWxsYWMgJiYgY3ggIT0gWFhMT09LKSB7IC8q IERvbid0IGtub3cgbXkgb3duIGFyZWEgY29kZSAqLwotICAgICAgICAgICAgICAgIGlmIChjYyA9 PSAxKQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCJXQVJOSU5HIC0gUHJpb3IgU0VUIERJQUwg QVJFQS1DT0RFIG5lZWRlZFxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeCA9 PSAyKSB7ICAgICAgICAgICAgICAgLyogTG9jYWwgY2FsbCB3aXRoIGFyZWEgY29kZSAqLwotICAg ICAgICAgICAgICAgIHdoYXQgPSBkbl94W2tdID0gRE5fTE9DQUw7ICAgICAgLyogTG9jYWwtY2Fs bCAqLwotICAgICAgICAgICAgICAgIHAgID0gKHByZWZpeCAmJiBkaWFsbGNwKSA/IGRpYWxsY3Ag OiAiIjsgLyogbG9jYWwtcHJlZml4ICovCi0gICAgICAgICAgICAgICAgcDIgPSAoc3VmZml4ICYm IGRpYWxsY3MpID8gZGlhbGxjcyA6ICIiOyAvKiBsb2NhbC1zdWZmaXggKi8KLSAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2hhdCA9IGRuX3hba10gPSBETl9MT05HOyAgICAg ICAvKiBMb25nLWRpc3RhbmNlICovCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG50 b2xsZnJlZTsgaSsrKSB7IC8qIEJ1dCB0b2xsLWZyZWUgdG9vPyAqLwotICAgICAgICAgICAgICAg ICAgICBpZiAoIXN0cmNtcChhY3B0cixkaWFsdGZjW2ldKSkgewotICAgICAgICAgICAgICAgICAg ICAgICAgd2hhdCA9IGRuX3hba10gPSBETl9GUkVFOwotICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgaWYgKHdoYXQgPT0gRE5fRlJFRSkgeyAgLyogVG9sbC1mcmVlIGNhbGwgKi8KLSAg ICAgICAgICAgICAgICAgICAgcCA9IChwcmVmaXggJiYgZGlhbHRmcCkgPyBkaWFsdGZwIDoKLSAg ICAgICAgICAgICAgICAgICAgICAgICgocHJlZml4ICYmIGRpYWxsZHApID8gZGlhbGxkcCA6ICIi KTsKLSAgICAgICAgICAgICAgICAgICAgcDIgPSAiIjsgICAgICAgICAgICAvKiBubyBzdWZmaXgg Ki8KLSAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5v cm1hbCBsb25nIGRpc3RhbmNlICovCi0gICAgICAgICAgICAgICAgICAgIHAgID0gKHByZWZpeCAm JiBkaWFsbGRwKSA/IGRpYWxsZHAgOiAiIjsgLyogbGQtcHJlZml4ICovCi0gICAgICAgICAgICAg ICAgICAgIHAyID0gKHN1ZmZpeCAmJiBkaWFsbGRzKSA/IGRpYWxsZHMgOiAiIjsgLyogbGQtc3Vm Zml4ICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyog Rm9ybSB0aGUgbnVtYmVyIHRvIGJlIGRpYWxlZCAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAg ICAgIHNwcmludGYob3V0YnVmLCIlcyVzJXMlcyVzJXMlcyIsCi0gICAgICAgICAgICAgICAgICAg IHB4byxucHIscCxhY3B0cixzLHAyLHNmeAotICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgc3ByaW50ZihwZHNmeCwiJXMlcyIscDIsc2Z4KTsKLSNlbHNlCi0gICAgICAgICAgICBj a21ha3htc2cob3V0YnVmLDI1NiwKLSAgICAgICAgICAgICAgICAgICAgICBweG8sbnByLHAsYWNw dHIscyxwMixzZngsCi0gICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMKTsKLSAgICAgICAgICAgIGNrbWFrbXNnKHBkc2Z4LDY0LHAyLHNmeCxOVUxMLE5VTEwpOwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTYW1lIGNvdW50cnksIHNhbWUgYXJlYSBjb2RlICovCi0gICAgICAgICAgICB3aGF0 ID0gZG5feFtrXSA9IEROX0xPQ0FMOyAgLyogU28gaXQncyBhIGxvY2FsIGNhbGwuICovCi0gICAg ICAgICAgICBpZiAoIXByZWZpeCB8fCAhKGRpYWxweG8gfHwgbmRpYWxweHgpKSB7IC8qIE5vdCBk aWFsaW5nIGZyb20gUEJYICovCi0gICAgICAgICAgICAgICAgcCAgPSAocHJlZml4ICYmIGRpYWxs Y3ApID8gZGlhbGxjcCA6ICIiOyAvKiBsb2NhbC1wcmVmaXggKi8KLSAgICAgICAgICAgICAgICBw MiA9IChzdWZmaXggJiYgZGlhbGxjcykgPyBkaWFsbGNzIDogIiI7IC8qIGxvY2FsLXN1ZmZpeCAq LwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSAyKQotICAgICAgICAg ICAgICAgICAgc3ByaW50ZihvdXRidWYsIiVzJXMlcyVzJXMlcyIsbnByLHAsYWNwdHIscyxwMixz ZngpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHNwcmludGYob3V0 YnVmLCIlcyVzJXMlcyVzIixucHIscCxzLHAyLHNmeCk7Ci0gICAgICAgICAgICAgICAgc3ByaW50 ZihwZHNmeCwiJXMlcyIscDIsc2Z4KTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKHggPT0g MikKLSAgICAgICAgICAgICAgICAgIGNrbWFreG1zZyhvdXRidWYsMjU2LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5wcixwLGFjcHRyLHMscDIsc2Z4LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAg ICBlbHNlCi0gICAgICAgICAgICAgICAgICBja21ha3htc2cob3V0YnVmLDI1NiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBucHIscCxzLHAyLHNmeCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgICAg ICAgICBja21ha21zZyhwZHNmeCw2NCxwMixzZngsTlVMTCxOVUxMKTsKLSNlbmRpZiAvKiBDT01N RU5UICovCi0KLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBEaWFs aW5nIGZyb20gYSBQQlggYW5kIG5vdCBUQVBJICovCi0gICAgICAgICAgICAgICAgaWYgKG5kaWFs cHh4KSB7ICAgICAgICAgLyogSXMgaXQgaW50ZXJuYWw/ICovCi0jaWZkZWYgQ09NTUVOVAotICAg ICAgICAgICAgICAgICAgICBpID0gKGludCkgc3RybGVuKGRpYWxweHgpOwotICAgICAgICAgICAg ICAgICAgICBqID0gKGludCkgc3RybGVuKHMpOwotICAgICAgICAgICAgICAgICAgICB4ID0gLTE7 Ci0gICAgICAgICAgICAgICAgICAgIGlmIChqID4gaSkKLSAgICAgICAgICAgICAgICAgICAgICB4 ID0gY2tzdHJjbXAoZGlhbHB4eCxzLGksMCk7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICBp bnQga3g7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAtMTsKLSAgICAgICAgICAgICAgICAgICAg aiA9IChpbnQpIHN0cmxlbihzKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChreCA9IDA7IGt4 IDwgbmRpYWxweHg7IGt4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAoaW50KSBz dHJsZW4oZGlhbHB4eFtreF0pOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPiBpKQot ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh4ID0gY2tzdHJjbXAoZGlhbHB4eFtreF0s cyxpLDApKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYg KCF4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogaWNwLCBidWZbMzJdOwotICAg ICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmbWF0Y2hweHgsZGlhbHB4eFtreF0pOwotICAg ICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZG5jdnQgbWF0Y2hweHgiLG1hdGNocHh4 LGt4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoYXQgPSBkbl94W2t4XSA9IEROX0lOVEVS TjsgICAvKiBJbnRlcm5hbCBjYWxsLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgcyArPSBp OwotICAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwtY2FsbCBwcmVmaXggKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgIGljcCA9IGRpYWxweGk7Ci0jaWZuZGVmIE5PU1BMCi0gICAg ICAgICAgICAgICAgICAgICAgICBpZiAoaWNwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCppY3AgPT0gJ1xcJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyIGMsICpicDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG47Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAqKGljcCsxKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGlzdXBwZXIoYykpIGMgPSB0b2xvd2VyKGMpOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAndicgfHwgYyA9PSAnZicpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAzMjsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJwID0gYnVmOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgenpzdHJpbmcoaWNwLCZicCwmbik7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpY3AgPSBidWY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg ICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAocHJl Zml4ICYmIGljcCkgPyBpY3AgOiAiIjsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAg ICAgICAgICBzcHJpbnRmKG91dGJ1ZiwiJXMlcyVzJXMiLG5wcixwLHMsc2Z4KTsKLSNlbHNlCi0g ICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhvdXRidWYsMjU2LG5wcixwLHMsc2Z4KTsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAg ICAgICAgLyogRXh0ZXJuYWwgbG9jYWwgY2FsbCAqLwotICAgICAgICAgICAgICAgICAgICAgICAg LyogbG9jYWwtcHJlZml4ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBwICA9IChwcmVmaXgg JiYgZGlhbGxjcCkgPyBkaWFsbGNwIDogIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBs b2NhbC1zdWZmaXggKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHAyID0gKHByZWZpeCAmJiBk aWFsbGNzKSA/IGRpYWxsY3MgOiAiIjsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAg ICAgICAgICBpZiAoeCA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG91 dGJ1ZiwiJXMlcyVzJXMlcyVzJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRpYWxweG8gPyBkaWFscHhvIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnByLHAsYWNwdHIscyxwMixzZngpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQot ICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG91dGJ1ZiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiJXMlcyVzJXMlcyVzIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkaWFscHhvID8gZGlhbHB4byA6ICIiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5wcixwLHMscDIsc2Z4Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAyKQot ICAgICAgICAgICAgICAgICAgICAgICAgICBja21ha3htc2cob3V0YnVmLCAyNTYsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxweG8gPyBkaWFscHhvIDogIiIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5wcixwLGFjcHRyLHMscDIsc2Z4LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwp OwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg ICBja21ha3htc2cob3V0YnVmLCAyNTYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkaWFscHhvID8gZGlhbHB4byA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnByLHAscyxwMixzZngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg fQotICAgICAgICB9Ci0KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBBcmVhIGNvZGUgd2FzIG5vdCBkZWxpbWl0ZWQgKi8KLQotICAgICAgICBjaGFyIHhidWZbMjU2 XTsgICAgICAgICAgICAgICAgIC8qIENvbXBhcmlzb24gYmFzZWQgb25seSBvbiBsZW5ndGggKi8K LSAgICAgICAgY2hhciB5YnVmWzI1Nl07Ci0gICAgICAgIGludCB4LCBqOwotCi0gICAgICAgIHMg PSBzczsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHsKLSAgICAgICAgICAg IGlmICghKnMpIGJyZWFrOwotICAgICAgICAgICAgd2hpbGUgKCFpc2RpZ2l0KCpzKSkgeyAgICAg IC8qIFBheSBhdHRlbnRpb24gb25seSB0byBkaWdpdHMgKi8KLSAgICAgICAgICAgICAgICBzKys7 Ci0gICAgICAgICAgICAgICAgaWYgKCEqcykgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICB4YnVmW2ldID0gKnMrKzsKLSAgICAgICAgfQotICAgICAgICB4YnVmW2ldID0gTlVMOwot Ci0gICAgICAgIHggPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIExEICov Ci0gICAgICAgIG4gPSAwOwotICAgICAgICBpZiAoIWRpYWxmbGQpIHsgICAgICAgICAgICAgICAg IC8qIElmIExEIG5vdCBmb3JjZWQgKi8KLSAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBubG9j YWxhYzsgaisrKSB7IC8qIGNoZWNrIGxvY2FsIEFDIGxpc3Q/ICovCi0gICAgICAgICAgICAgICAg Y2ttYWttc2coeWJ1ZiwyNTYsZGlhbGxjYyxkaWFsbGNhY1tqXSxOVUxMLE5VTEwpOwotICAgICAg ICAgICAgICAgIG4gPSAoaW50KSBzdHJsZW4oeWJ1Zik7Ci0gICAgICAgICAgICAgICAgaWYgKG4g PiAwICYmICFja3N0cmNtcCh4YnVmLHlidWYsbiwwKSkgewotICAgICAgICAgICAgICAgICAgICB4 ID0gMjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHggPT0gMSkgeyAgICAgICAgICAgICAgIC8qIE9y IGV4YWN0IG1hdGNoIHdpdGggbG9jYWwgQ0MrQUM/ICovCi0gICAgICAgICAgICAgICAgY2ttYWtt c2coeWJ1ZiwyNTYsZGlhbGxjYyxsYWMsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICBuID0g KGludCkgc3RybGVuKHlidWYpOwotICAgICAgICAgICAgICAgIGlmIChuID4gMCAmJiAhY2tzdHJj bXAoeGJ1Zix5YnVmLG4sMCkpCi0gICAgICAgICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgICAgICBpZiAoeCA9PSAwIHx8IHggPT0gMikgeyAgICAgICAgIC8q IExvY2FsIGNhbGwgKi8KLSAgICAgICAgICAgIGludCB4eCxreDsgICAgICAgICAgICAgICAgICAv KiBCZWdpbiAxIERlYyAyMDAxLi4uICovCi0gICAgICAgICAgICAvKiBBY2NvdW50IGZvciBQQlgg aW50ZXJuYWwgY2FsbHMgKi8KLSAgICAgICAgICAgIGlmIChuZGlhbHB4eCkgewotICAgICAgICAg ICAgICAgIHh4ID0gLTE7Ci0gICAgICAgICAgICAgICAgaiA9IChpbnQpIHN0cmxlbih5YnVmKTsK LSAgICAgICAgICAgICAgICBmb3IgKGt4ID0gMDsga3ggPCBuZGlhbHB4eDsga3grKykgewotICAg ICAgICAgICAgICAgICAgICBpID0gKGludCkgc3RybGVuKGRpYWxweHhba3hdKTsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKGogPj0gaSkKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoISh4eCA9 IGNrc3RyY21wKGRpYWxweHhba3hdLCZ4YnVmW2pdLGksMCkpKQotICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg ICAgaWYgKCF4eCkgewotICAgICAgICAgICAgICAgIGNoYXIgKiBpY3AsIGJ1ZlszMl07Ci0gICAg ICAgICAgICAgICAgbWFrZXN0cigmbWF0Y2hweHgsZGlhbHB4eFtreF0pOwotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsImRuY3Z0IG1hdGNocHh4IixtYXRjaHB4eCxreCk7Ci0gICAgICAgICAg ICAgICAgd2hhdCA9IGRuX3hba3hdID0gRE5fSU5URVJOOyAvKiBJbnRlcm5hbCBjYWxsLiAqLwot ICAgICAgICAgICAgICAgIHMgPSB4YnVmICsgaiArIGk7Ci0gICAgICAgICAgICAgICAgaWNwID0g ZGlhbHB4aTsgICAgICAgICAgLyogSW50ZXJuYWwtY2FsbCBwcmVmaXggKi8KLSNpZm5kZWYgTk9T UEwKLSAgICAgICAgICAgICAgICBpZiAoaWNwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgq aWNwID09ICdcXCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYywgKmJwOwotICAg ICAgICAgICAgICAgICAgICAgICAgaW50IG47Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0g KihpY3ArMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXN1cHBlcihjKSkgYyA9IHRv bG93ZXIoYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAndicgfHwgYyA9PSAn ZicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMzI7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnAgPSBidWY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgenpz dHJpbmcoaWNwLCZicCwmbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNwID0gYnVm OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgICAgICAgcCA9IChw cmVmaXggJiYgaWNwKSA/IGljcCA6ICIiOwotICAgICAgICAgICAgICAgIGNrbWFrbXNnKG91dGJ1 ZiwyNTYsbnByLHAscyxzZngpOwotICAgICAgICAgICAgICAgIC8qIEVuZCAxIERlYyAyMDAxLi4u ICovCi0KLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBOb3QgUEJY IGludGVybmFsICovCi0KLSAgICAgICAgICAgICAgICBkbl94W2tdID0gRE5fTE9DQUw7Ci0gICAg ICAgICAgICAgICAgcCA9IChwcmVmaXggJiYgZGlhbGxjcCkgPyBkaWFsbGNwIDogIiI7Ci0gICAg ICAgICAgICAgICAgcDIgPSAoc3VmZml4ICYmIGRpYWxsY3MpID8gZGlhbGxjcyA6ICIiOwotICAg ICAgICAgICAgICAgIHMgPSAoY2hhciAqKSAoeGJ1ZiArICgoeCA9PSAwKSA/IG4gOiAoaW50KXN0 cmxlbihkaWFsbGNjKSkpOwotICAgICAgICAgICAgICAgIGNrbWFreG1zZyhvdXRidWYsMjU2LAot ICAgICAgICAgICAgICAgICAgICAgICAgICBweG8sbnByLHAscyxwMixzZngsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAg ICAgICAgICBja21ha21zZyhwZHNmeCw2NCxwMixzZngsTlVMTCxOVUxMKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgbG9jYWwg Ki8KLSAgICAgICAgICAgIG4gPSBja3N0cm5jcHkoeWJ1ZixkaWFsbGNjLDI1Nik7Ci0gICAgICAg ICAgICBpZiAobiA+IDAgJiYgIWNrc3RyY21wKHhidWYseWJ1ZixuLDApKSB7IC8qIExvbmcgZGlz dGFuY2UgKi8KLSAgICAgICAgICAgICAgICBkbl94W2tdID0gRE5fTE9ORzsKLSAgICAgICAgICAg ICAgICBwID0gKHByZWZpeCAmJiBkaWFsbGRwKSA/IGRpYWxsZHAgOiAiIjsKLSAgICAgICAgICAg ICAgICBwMiA9IChzdWZmaXggJiYgZGlhbGxkcykgPyBkaWFsbGRzIDogIiI7Ci0gICAgICAgICAg ICAgICAgcyA9IHhidWYgKyBuOwotICAgICAgICAgICAgICAgIHdoaWxlICgqcyA9PSAnLScgfHwg KnMgPT0gJy4nKQotICAgICAgICAgICAgICAgICAgcysrOwotI2lmZGVmIENPTU1FTlQKLSAgICAg ICAgICAgICAgICBzcHJpbnRmKG91dGJ1ZiwiJXMlcyVzJXMlcyVzIixweG8sbnByLHAscyxwMixz ZngpOwotICAgICAgICAgICAgICAgIHNwcmludGYocGRzZngsIiVzJXMiLHAyLHNmeCk7Ci0jZWxz ZQotICAgICAgICAgICAgICAgIGNrbWFreG1zZyhvdXRidWYsMjU2LAotICAgICAgICAgICAgICAg ICAgICAgICAgICBweG8sbnByLHAscyxwMixzZngsCi0gICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgIGNrbWFrbXNn KHBkc2Z4LDY0LHAyLHNmeCxOVUxMLE5VTEwpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZG5feFtrXSA9IEROX0lOVEw7ICAgICAg LyogSW50ZXJuYXRpb25hbCAqLwotICAgICAgICAgICAgICAgIGlmICghZGlhbGl4cCkgewotICAg ICAgICAgICAgICAgICAgICBpZiAoY3ggIT0gWFhMT09LKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBwcmludGYoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciAtIE5vIGludGVy bmF0aW9uYWwgZGlhbGluZyBwcmVmaXggZGVmaW5lZFxuIgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHAgPSAo cHJlZml4ICYmIGRpYWxpeHApID8gZGlhbGl4cCA6ICIiOwotICAgICAgICAgICAgICAgIHAyID0g KHN1ZmZpeCAmJiBkaWFsaXhzKSA/IGRpYWxpeHMgOiAiIjsKLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgICAgICAgICAgc3ByaW50ZihvdXRidWYsIiVzJXMlcyVzJXMlcyIscHhvLG5wcixwLHhidWYs cDIsc2Z4KTsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHBkc2Z4LCIlcyVzIixwMixzZngpOwot I2Vsc2UKLSAgICAgICAgICAgICAgICBja21ha3htc2cob3V0YnVmLDI1NiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgcHhvLG5wcixwLHhidWYscDIsc2Z4LAotICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAgICAg Y2ttYWttc2cocGRzZngsNjQscDIsc2Z4LE5VTEwsTlVMTCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotI2lmZGVmIENLX1RBUEkKLSAgICBp ZiAodHR0YXBpICYmICAgICAgICAgICAgICAgICAgICAgICAvKiBUQVBJIHBlcmZvcm1zIHRoZSBj b252ZXJzaW9ucyAqLwotICAgICAgICAhdGFwaXBhc3MgJiYKLSAgICAgICAgdGFwaWNvbnYgPT0g Q0tfQVVUTyB8fAotICAgICAgICB0YXBpY29udiA9PSBDS19PTgotICAgICAgICApIHsKLSAgICAg ICAgcCA9IE5VTEw7Ci0gICAgICAgIGRpYWx0eXBlID0gLTI7Ci0gICAgICAgIGlmICghY2t0YXBp Q29udmVydFBob25lTnVtYmVyKGRuX3Bba10sJnApKQotICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgIG1ha2VzdHIoJmRuX3AyW2tdLCBwKTsKLSAgICAgICAgaWYgKHApIGZyZWUocCk7Ci0g ICAgICAgIHJldHVybigwKTsKLSAgICB9IGVsc2UgewotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSAg ICAgICAgbWFrZXN0cigmZG5fcDJba10sIG91dGJ1Zik7Ci0jaWZkZWYgQ0tfVEFQSQotICAgIH0K LSNlbmRpZiAvKiBDS19UQVBJICovCi0gICAgZGlhbHR5cGUgPSB3aGF0OwotICAgIHJldHVybigw KTsKLX0KLQotc3RhdGljIGludAotZGRjdnQocywgZiwgbikgY2hhciAqIHM7IEZJTEUgKiBmOyBp bnQgbjsgeyAvKiBEaWFsIERpcmVjdG9yeSBDb252ZXJ0ICovCi0gICAgY2hhciBsaW5lYnVmWzEw MjRdLCAqczI7ICAgICAgICAgICAgLyogQnVmZmVycyBhbmQgcG9pbnRlcnMgKi8KLSNpZmRlZiBW TVMKLSAgICBjaGFyICogdGVtcCA9IE5VTEw7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgY2hhciAq aW5mb1s4XTsgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlcnMgdG8gd29yZHMgZnJvbSBl bnRyeSAqLwotICAgIEZJTEUgKiBmMiA9IE5VTEw7Ci0gICAgaW50IHgsIHJjOwotICAgIHJjID0g LTE7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJkZGN2dCBmaWxlIixzLDApOwotCi0gICAgaWYgKCFzIHx8 ICFmKSAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gZmlsZW5hbWUgb3IgZmlsZSAqLwotICAg ICAgcmV0dXJuKC0xKTsKLSAgICBpZiAoISpzKQotCi0gICAgZmNsb3NlKGYpOwotICAgIHpuZXdu KHMsJnMyKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHMyID0gYWRkcmVzcyBvZiBzdGF0aWMg YnVmZmVyICovCi0gICAgZGVidWcoRjExMCwiZGRjdnQgbmV3bmFtZSIsczIsMCk7Ci0KLSNpZmRl ZiBWTVMKLSAgICAvKiBJbiBWTVMsIHpuZXduKCkgcmV0dXJucyB0aGUgc2FtZSBmaWxlIG5hbWUg d2l0aCBhIG5ldyB2ZXJzaW9uIG51bWJlciAqLwotICAgIG1ha2VzdHIoJnRlbXAscyk7ICAgICAg ICAgICAgICAgICAgIC8qIFN3YXAgLSBvdGhlcndpc2UgdGhlIG5ldyAqLwotICAgIHMgPSBzMjsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZlcnNpb24gaGFzIHRoZSBvbGRlciB2ZXJz aW9uICovCi0gICAgczIgPSB0ZW1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVy Li4uICovCi0gICAgZGVidWcoRjExMCwiZGRjdnQgYWZ0ZXIgc3dhcCBzIixzLDApOwotICAgIGRl YnVnKEYxMTAsImRkY3Z0IGFmdGVyIHN3YXAgczIiLHMyLDApOwotICAgIG1ha2VzdHIoJihkaWFs ZGlyW25dKSxzKTsgICAgICAgICAgIC8qIE5ldyBmaWxlIGdldHMgbmV3IHZlcnNpb24gbnVtYmVy ICovCi0gICAgZGVidWcoRjExMCwiZGRjdnQgYWZ0ZXIgbWFrZXN0ciBzMiIsczIsMCk7Ci0gICAg ZGVidWcoRjExMSwiZGRjdnQgZGlhbGRpcltuXSIsZGlhbGRpcltuXSxuKTsKLSNlbHNlCi0gICAg aWYgKHpyZW5hbWUocyxzMikgPCAwKSB7ICAgICAgICAgICAgLyogTm90IFZNUyAtIHJlbmFtZSBv bGQgZmlsZSAqLwotICAgICAgICBwZXJyb3IoczIpOyAgICAgICAgICAgICAgICAgICAgIC8qIHRv IG5ldyAod2llcmQpIG5hbWUuICovCi0gICAgICAgIGdvdG8gZGRleGl0OwotICAgIH0KLSNlbmRp ZiAvKiBWTVMgKi8KLSAgICBkZWJ1ZyhGMTEwLCJkZGN2dCBzMiAob2xkKSIsczIsMCk7Ci0gICAg aWYgKChmID0gZm9wZW4oczIsInIiKSkgPT0gTlVMTCkgeyAgLyogUmVvcGVuIG9sZCBmaWxlIHdp dGggd2llcmQgbmFtZSAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJkZGN2dCBzMiBvcGVuIGVycm9y Iixja19lcnJzdHIoKSwwKTsKLSAgICAgICAgZGlybGluZSA9IDA7ICAgICAgICAgICAgICAgICAg ICAvKiAob3IgaW4gVk1TLCBvbGQgdmVyc2lvbikgKi8KLSAgICAgICAgcGVycm9yKHMyKTsKLSAg ICAgICAgZ290byBkZGV4aXQ7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImRkY3Z0IGZvcGVuKHMy KSBPSyIsczIsMCk7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJkZGN2dCBzIChuZXcpIixzLDApOwotICAg IGlmICgoZjIgPSBmb3BlbihzLCJ3IikpID09IE5VTEwpIHsgIC8qIENyZWF0ZSBuZXcgZmlsZSB3 aXRoIG9sZCBuYW1lICovCi0gICAgICAgIGRlYnVnKEYxMTAsImRkY3Z0IHMgb3BlbiBlcnJvciIs Y2tfZXJyc3RyKCksMCk7Ci0gICAgICAgIHBlcnJvcihzKTsgICAgICAgICAgICAgICAgICAgICAg LyogKG9yIGluIFZNUywgbmV3IHZlcnNpb24pICovCi0gICAgICAgIGdvdG8gZGRleGl0OwotICAg IH0KLSAgICBkZWJ1ZyhGMTEwLCJkZGN2dCBmb3BlbihzKSBPSyIscywwKTsKLQotICAgIHByaW50 ZigiXG5TYXZpbmcgb2xkIGRpcmVjdG9yeSBhcyAlcy5cbkNvbnZlcnRpbmcgJXMuLi4iLHMyLHMp OwotICAgIGZwcmludGYoZjIsIjsgJXMgLSBLZXJtaXQgZGlhbGluZyBkaXJlY3RvcnlcbiIsIHMp OwotICAgIGZwcmludGYoZjIsIiUtMTZzICUtMjBzIDsgJTVzICUtNnMgOyAlc1xuIiwKLSAgICAg ICAgICAgICAgICI7IE5hbWUiLCJOdW1iZXIiLCJTcGVlZCIsIlBhcml0eSIsIkNvbW1lbnQiCi0g ICAgICAgICAgICAgICApOwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgbGluZWJ1ZlswXSA9 IE5VTDsgICAgICAgICAgICAgICAvKiBSZWFkIGEgbGluZSAqLwotICAgICAgICBpZiAoZmdldHMo bGluZWJ1ZiwxMDIzLGYpID09IE5VTEwpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlYnVn KEYxMTAsImRkY3Z0IGxpbmVidWYiLGxpbmVidWYsMCk7Ci0gICAgICAgIGlmICghbGluZWJ1Zlsw XSkgeyAgICAgICAgICAgICAgLyogRW1wdHkgbGluZSAqLwotICAgICAgICAgICAgZnByaW50Zihm MiwiXG4iKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHggPSAo aW50KSBzdHJsZW4obGluZWJ1Zik7ICAgICAgLyogU3RyaXAgbGluZSB0ZXJtaW5hdG9yLCAqLwot ICAgICAgICB3aGlsZSAoeC0tID4gMCkgeyAgICAgICAgICAgICAgIC8qIGlmIGFueS4gKi8KLSAg ICAgICAgICAgIGlmIChsaW5lYnVmW3hdIDw9IFNQKQotICAgICAgICAgICAgICBsaW5lYnVmW3hd ID0gTlVMOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg fQotICAgICAgICB4d29yZHMobGluZWJ1Ziw1LGluZm8sMSk7ICAgICAgIC8qIFBhcnNlIGl0IHRo ZSBvbGQgd2F5ICovCi0gICAgICAgIGZvciAoeCA9IDE7IHggPCA2OyB4KyspCi0gICAgICAgICAg aWYgKCFpbmZvW3hdKSBpbmZvW3hdID0gIiI7Ci0gICAgICAgIGZwcmludGYoZjIsIiUtMTZzICUt MjBzIDsgJTVzICUtNnMgJXNcbiIsCi0gICAgICAgICAgICAgICBpbmZvWzFdLGluZm9bMl0saW5m b1szXSxpbmZvWzRdLGluZm9bNV0KLSAgICAgICAgICAgICAgICk7Ci0gICAgfQotICAgIHByaW50 ZigiIE9LXG5cbiIpOwotICAgIHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFN1Y2Nlc3MgKi8KLSAgZGRleGl0OgotICAgIGlmIChmKSBmY2xvc2UoZik7Ci0gICAgaWYgKGYy KSBmY2xvc2UoZjIpOwotI2lmZGVmIFZNUwotICAgIGlmICh0ZW1wKSBmcmVlKHRlbXApOwotI2Vu ZGlmIC8qIFZNUyAqLwotICAgIHJldHVybihyYyk7Ci19Ci0KLWludCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBzID0gbmFtZSB0byBsb29rIHVwICAgKi8KLSNpZmRlZiBD S19BTlNJQyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjeCA9IGluZGV4IG9mIGNvbW1hbmQg Ki8KLWx1ZGlhbChjaGFyICpzLCBpbnQgY3gpICAgICAgICAgICAgICAgICAvKiAoRElBTCwgTE9P S1VQLCBldGMpICAgKi8KLSNlbHNlCi1sdWRpYWwocywgY3gpIGNoYXIgKnM7IGludCBjeDsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogbHVkaWFsICovIHsKLQotICAgIGludCBkZCwgbjEsIG4y LCBuMywgaSwgaiwgdDsgICAgICAgIC8qIFdvcmtlcnMgKi8KLSAgICBpbnQgb2xkZGlyLCBuZXdk aXIsIG9sZGVudHJ5LCBuZXdlbnRyeTsKLSAgICBpbnQgcGFzcyA9IDA7Ci0gICAgaW50IG9sZGZs ZyA9IDA7Ci0gICAgaW50IGFtYmlndW91cyA9IDA7ICAgICAgICAgICAgICAgICAgLyogRmxhZyBm b3IgbG9va3VwIHdhcyBhbWJpZ3VvdXMgKi8KLSAgICBjaGFyICppbmZvWzddOyAgICAgICAgICAg ICAgICAgICAgICAvKiBQb2ludGVycyB0byB3b3JkcyBmcm9tIGVudHJ5ICovCi0gICAgY2hhciAq cHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBlbGVtZW50IG9mIGFy cmF5ICovCi0gICAgRklMRSAqIGY7Ci0gICAgY2hhciAqbGluZTsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRmlsZSBpbnB1dCBidWZmZXIgKi8KLQotLyogI2RlZmluZSBMVURFQlVHICovCi0K LSNpZmRlZiBMVURFQlVHCi1pbnQgenogPSAxOwotI2VuZGlmIC8qIExVREVCVUcgKi8KLQotICAg IGlmICghcyB8fCBuZGlhbGRpciA8IDEpICAgICAgICAgICAgIC8qIFZhbGlkYXRlIGFyZ3VtZW50 cyAqLwotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmICgobjEgPSAoaW50KSBzdHJsZW4ocykp IDwgMSkgICAgIC8qIExlbmd0aCBvZiBzdHJpbmcgdG8gbG9vayB1cCAqLwotICAgICAgcmV0dXJu KC0xKTsKLQotICAgIGlmICghKGxpbmUgPSBtYWxsb2MoMTAyNCkpKSAgICAgICAgIC8qIEFsbG9j YXRlIGlucHV0IGJ1ZmZlciAqLwotICAgICAgcmV0dXJuKC0xKTsKLQotI2lmZGVmIExVREVCVUcK LWlmICh6eikgcHJpbnRmKCJMVURJQUwgMSBzWyVzXSwgbjE9JWRcbiIscyxuMSk7Ci0jZW5kaWYg LyogTFVERUJVRyAqLwotCi0gICAgcGFzcyA9IDA7Ci0gIGx1X2FnYWluOgotICAgIGYgPSBOVUxM OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpYWwgZGlyZWN0b3J5IGZpbGUgZGVzY3Jp cHRvciAqLwotICAgIHQgPSBkbmNvdW50ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIERpYWwt bnVtYmVyIG1hdGNoIGNvdW50ICovCi0gICAgZGQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRGlyZWN0b3J5IGNvdW50ZXIgKi8KLSAgICBvbGRkaXIgPSAwOwotICAgIG5ld2Rp ciA9IDA7Ci0vKgotICBXZSBuZWVkIHRvIHJlY29nbml6ZSBib3RoIG9sZC0gYW5kIG5ldy1zdHls ZSBkaXJlY3Rvcmllcy4KLSAgQnV0IHdlIGNhbid0IGFsbG93IG9sZC1zdHlsZSBhbmQgbmV3LXN0 eWxlIGVudHJpZXMgaW4gdGhlIHNhbWUKLSAgZGlyZWN0b3J5IGJlY2F1c2UgdGhlcmUgaXMgbm8g d2F5IHRvIHRlbGwgZm9yIHN1cmUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgotICBhbiBvbGQtc3R5 bGUgZW50cnkgbGlrZSB0aGlzOgotCi0gICAgZm9vICA1NTUxMjEyICA5NjAwCi0KLSAgYW5kIGEg bmV3LXN0eWxlIGxpdGVyYWwgZW50cnkgbGlrZSB0aGlzOgotCi0gICAgZm9vICA1NTUgOTYwMAot Ci0gIEkuZS4gaXMgdGhlICI5NjAwIiBhIHNwZWVkLCBvciBwYXJ0IG9mIHRoZSBwaG9uZSBudW1i ZXI/Ci0qLwotICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIG1h a2Ugb25lIHBhc3MgKi8KLSAgICAgICAgaWYgKCFmKSB7ICAgICAgICAgICAgICAgICAgICAgICAv KiBEaXJlY3Rvcnkgbm90IG9wZW4gKi8KLSAgICAgICAgICAgIGlmIChkZCA+PSBuZGlhbGRpcikg ICAgICAgICAvKiBObyBkaXJlY3RvcmllcyBsZWZ0PyAqLwotICAgICAgICAgICAgICBicmVhazsg ICAgICAgICAgICAgICAgICAgIC8qIERvbmUuICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJs dWRpYWwgZGlhbGRpcltkZF0iLGRpYWxkaXJbZGRdLGRkKTsKLSAgICAgICAgICAgIGlmICgoZiA9 IGZvcGVuKGRpYWxkaXJbZGRdLCJyIikpID09IE5VTEwpIHsgLyogT3BlbiBpdCAqLwotICAgICAg ICAgICAgICAgIHBlcnJvcihkaWFsZGlyW2RkXSk7ICAgIC8qIENhbid0LCBwcmludCBtZXNzYWdl IHNheWluZyB3aHkgKi8KLSAgICAgICAgICAgICAgICBpZiAobGluZSkgewotICAgICAgICAgICAg ICAgICAgICBmcmVlKGxpbmUpOwotICAgICAgICAgICAgICAgICAgICBsaW5lID0gTlVMTDsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGQrKzsgICAgICAgICAgICAgICAgICAg LyogR28gb24gdG8gbmV4dCBvbmUsIGlmIGFueS4uLiAqLwotICAgICAgICAgICAgICAgIGNvbnRp bnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGlybGluZSA9IDA7ICAgICAgICAgICAg ICAgIC8qIERpcmVjdG9yeSBmaWxlIGxpbmUgbnVtYmVyICovCi0gICAgICAgICAgICBpZiAoZGlh bGRweSAmJiAhcGFzcykKLSAgICAgICAgICAgICAgcHJpbnRmKCJPcGVuaW5nOiAlcy4uLlxuIixk aWFsZGlyW2RkXSk7Ci0gICAgICAgICAgICBkZCsrOwotICAgICAgICAgICAgaWYgKCFvbGRmbGcp IG9sZGRpciA9IDA7Ci0gICAgICAgICAgICBuZXdkaXIgPSAwOwotICAgICAgICB9Ci0gICAgICAg IG9sZGVudHJ5ID0gMDsKLSAgICAgICAgbmV3ZW50cnkgPSAwOwotICAgICAgICBsaW5lWzBdID0g TlVMOwotICAgICAgICBpZiAoZ2V0bmN0KGxpbmUsMTAyMyxmLDEpIDwgMCkgeyAvKiBSZWFkIGEg bGluZSAqLwotICAgICAgICAgICAgaWYgKGYpIHsgICAgICAgICAgICAgICAgICAgIC8qIGYgY2Fu IGJlIGNsb2JiZXJlZCEgKi8KLSAgICAgICAgICAgICAgICBmY2xvc2UoZik7ICAgICAgICAgICAg ICAvKiBDbG9zZSB0aGUgZmlsZSAqLwotICAgICAgICAgICAgICAgIGYgPSBOVUxMOyAgICAgICAg ICAgICAgIC8qIEluZGljYXRlIG5leHQgb25lIG5lZWRzIG9wZW5pbmcgKi8KLSAgICAgICAgICAg ICAgICBvbGRmbGcgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0g ICAgICAgIH0KLSAgICAgICAgaWYgKCFsaW5lWzBdKSAgICAgICAgICAgICAgICAgICAvKiBFbXB0 eSBsaW5lICovCi0gICAgICAgICAgY29udGludWU7Ci0jaWZkZWYgTFVERUJVRwotaWYgKHp6KSBw cmludGYoIkxVRElBTCAyIHNbJXNdXG4iLHMpOwotI2VuZGlmIC8qIExVREVCVUcgKi8KLQotICAg ICAgICAvKiBNYWtlIGEgY29weSBhbmQgcGFyc2UgaXQgdGhlIG9sZCB3YXkgKi8KLSAgICAgICAg LyogQSBjb3B5IGlzIG5lZWRlZCBiZWNhdXNlIHh3b3JkcygpIHBva2VzIE5VTHMgaW50byB0aGUg c3RyaW5nICovCi0KLSAgICAgICAgaWYgKChwcCA9IG1hbGxvYygoaW50KXN0cmxlbihsaW5lKSAr IDEpKSkgewotICAgICAgICAgICAgc3RyY3B5KHBwLGxpbmUpOyAgICAgICAgICAgIC8qIHNhZmUg Ki8KLSAgICAgICAgICAgIHh3b3JkcyhwcCw1LGluZm8sMCk7ICAgICAgICAvKiBQYXJzZSBpdCB0 aGUgb2xkIHdheSAqLwotCi0jaWZkZWYgTFVERUJVRwotaWYgKHp6KSBwcmludGYoIkxVRElBTCAz IHNbJXNdXG4iLHMpOwotI2VuZGlmIC8qIExVREVCVUcgKi8KLQotICAgICAgICAgICAgaWYgKCFp bmZvWzFdKQotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICgqaW5mb1sx XSA9PSAnOycpIHsgICAgICAvKiBJZiBmdWxsLWxpbmUgY29tbWVudCwgKi8KLSAgICAgICAgICAg ICAgICBuZXdkaXIgPSAxOyAgICAgICAgICAgICAvKiAob25seSBuZXcgZGlyZWN0b3JpZXMgaGF2 ZSB0aGVtKSAqLwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgIC8qIGtl ZXAgcmVhZGluZy4gKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghaW5mb1syXSkK LSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoKmluZm9bMl0gPT0gJysn KQotICAgICAgICAgICAgICBuZXdlbnRyeSA9IDE7Ci0gICAgICAgICAgICBpZiAoaW5mb1s0XSkg ewotICAgICAgICAgICAgICAgIGlmICgoKmluZm9bNF0gPT0gJz0nKSB8fAotICAgICAgICAgICAg ICAgICAgICAhY2tzdHJjbXAoaW5mb1s0XSwibm9uZSIsIDQsMCkgfHwKLSAgICAgICAgICAgICAg ICAgICAgIWNrc3RyY21wKGluZm9bNF0sImV2ZW4iLCA0LDApIHx8Ci0gICAgICAgICAgICAgICAg ICAgICFja3N0cmNtcChpbmZvWzRdLCJzcGFjZSIsNSwwKSB8fAotICAgICAgICAgICAgICAgICAg ICAhY2tzdHJjbXAoaW5mb1s0XSwibWFyayIsIDQsMCkgfHwKLSAgICAgICAgICAgICAgICAgICAg IWNrc3RyY21wKGluZm9bNF0sIm9kZCIsICAzLDApCi0gICAgICAgICAgICAgICAgICAgICkKLSAg ICAgICAgICAgICAgICAgIG9sZGVudHJ5ID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgICAgICBpZiAocHApIHsKLSAgICAgICAgICAgIGZyZWUocHApOwotICAgICAgICAgICAgcHAg PSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogQ2hlY2sgY29uc2lzdGVuY3kgKi8KLQot ICAgICAgICBpZiAoKG9sZGVudHJ5IHx8IG9sZGRpcikgJiYgKG5ld2VudHJ5IHx8IG5ld2Rpcikp IHsKLSAgICAgICAgICAgIHByaW50ZigKLSJcbkVSUk9SOiBZb3Ugc2VlbSB0byBoYXZlIG9sZC0g YW5kIG5ldy1mb3JtYXQgZW50cmllcyBtaXhlZCBpbiB5b3VyXG4iKTsKLSAgICAgICAgICAgIHBy aW50ZigKLSJkaWFsaW5nIGRpcmVjdG9yeS4gIFlvdSdsbCBoYXZlIHRvIGVkaXQgaXQgYnkgaGFu ZCB0byBjb252ZXJ0IGl0IHRvIHRoZVxuIik7Ci0jaWZuZGVmIE5PSEVMUAotICAgICAgICAgICAg cHJpbnRmKCJuZXcgZm9ybWF0LiAgVHlwZSBIRUxQIERJQUwgZm9yIGZ1cnRoZXIgaW5mb3JtYXRp b24uXG5cbiIpOwotI2Vsc2UKLSAgICAgICAgICAgIHByaW50ZigibmV3IGZvcm1hdC5cblxuIik7 Ci0jZW5kaWYgLyogTk9IRUxQICovCi0gICAgICAgICAgICBpZiAobGluZSkgewotICAgICAgICAg ICAgICAgIGZyZWUobGluZSk7Ci0gICAgICAgICAgICAgICAgbGluZSA9IE5VTEw7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh b2xkZGlyICYmIG9sZGVudHJ5KSB7Ci0gICAgICAgICAgICBpbnQgY29udmVydCA9IDA7Ci0gICAg ICAgICAgICBvbGRkaXIgPSAxOwotICAgICAgICAgICAgaWYgKGRpYWxjdnQgPT0gMikgeyAgICAg ICAgIC8qIDIgPT0gQVNLICovCi0gICAgICAgICAgICAgICAgc3ByaW50Zih0bXBidWYsCi0iV0FS TklORzogT2xkLXN0eWxlIGRpYWxpbmcgZGlyZWN0b3J5IGRldGVjdGVkOlxuJXMiLCBsaW5lKTsK LQkJY29udmVydCA9IHVxX29rKHRtcGJ1ZiwKLQkJCQkiU2hhbGwgSSBjb252ZXJ0IGl0IGZvciB5 b3U/ICIsMyxOVUxMLDApOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgIGNvbnZl cnQgPSBkaWFsY3Z0OwotICAgICAgICAgICAgaWYgKGNvbnZlcnQpIHsKLSAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJsdWRpYWwgY2FsbGluZyBkZGN2dCIsZGlhbGRpcltkZC0xXSxkZCk7Ci0g ICAgICAgICAgICAgICAgaWYgKGRkY3Z0KGRpYWxkaXJbZGQtMV0sZixkZC0xKSA8IDApIHsKLSAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwibHVkaWFsIGRkY3Z0IGZhaWxlZCIsZGlhbGRp cltkZC0xXSxkZCk7Ci0gICAgICAgICAgICAgICAgICAgIG9sZGZsZyA9IDE7Ci0gICAgICAgICAg ICAgICAgICAgIHByaW50ZigKLSIgIFNvcnJ5LCBjYW4ndCBjb252ZXJ0LiIpOwotICAgICAgICAg ICAgICAgICAgICBwcmludGYoCi0iICBXaWxsIGlnbm9yZSBzcGVlZCBhbmQgcGFyaXR5IGZpZWxk cywgY29udGludWluZy4uLlxuXG4iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgICAgICBvbGRkaXIgPSBuZXdkaXIgPSAwOwotICAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTExLCJsdWRpYWwgZGRjdnQgb2siLGRpYWxkaXJbZGQtMV0sZGQpOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZC0tOwotICAgICAgICAgICAgICAgIGYgPSBOVUxM OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICAgICBpZiAoZGlhbGN2dCA9PSAyKQotICAgICAgICAgICAgICAgICAgcHJpbnRmKAot IiAgT0ssIHdpbGwgaWdub3JlIHNwZWVkIGFuZCBwYXJpdHkgZmllbGRzLCBjb250aW51aW5nLi4u XG5cbiIpOwotICAgICAgICAgICAgICAgIG9sZGRpciA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLQotI2lmZGVmIExVREVCVUcKLWlmICh6eikgcHJpbnRmKCJMVURJQUwgWFggc1slc10s IG4xPSVkXG4iLHMsbjEpOwotI2VuZGlmIC8qIExVREVCVUcgKi8KLQotICAgICAgICAvKiBOb3cg cGFyc2UgYWdhaW4gZm9yIHJlYWwgKi8KLQotICAgICAgICBpZiAob2xkZW50cnkpICAgICAgICAg ICAgICAgICAgIC8qIFBhcnNlIGl0IHRoZSBvbGQgd2F5ICovCi0gICAgICAgICAgeHdvcmRzKGxp bmUsNSxpbmZvLDApOwotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFBhcnNlIGl0IHRoZSBuZXcgd2F5ICovCi0gICAgICAgICAgeHdvcmRzKGxpbmUsMixpbmZvLDEp OwotCi0jaWZkZWYgTFVERUJVRwotaWYgKHp6KSBwcmludGYoIkxVRElBTCBZWSBzWyVzXSwgbjE9 JWRcbiIscyxuMSk7Ci1pZiAoenopIHByaW50ZigiJXMgWyVzXVxuIixpbmZvWzFdLGluZm9bMl0p OwotI2VuZGlmIC8qIExVREVCVUcgKi8KLQotICAgICAgICBpZiAoaW5mb1sxXSkgeyAgICAgICAg ICAgICAgICAgIC8qIEZpcnN0IHdvcmQgaXMgZW50cnkgbmFtZSAqLwotICAgICAgICAgICAgaWYg KChuMyA9IChpbnQpIHN0cmxlbihpbmZvWzFdKSkgPCAxKSAvKiBJdHMgbGVuZ3RoICovCi0gICAg ICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgLyogSWYgbm8gZmlyc3Qgd29yZCwg a2VlcCByZWFkaW5nLiAqLwotICAgICAgICAgICAgaWYgKG4zIDwgbjEpICAgICAgICAgICAgICAg IC8qIFNlYXJjaCBuYW1lIGlzIGxvbmdlciAqLwotICAgICAgICAgICAgICBjb250aW51ZTsgICAg ICAgICAgICAgICAgIC8qIENhbid0IHBvc3NpYmx5IG1hdGNoICovCi0gICAgICAgICAgICBpZiAo YW1iaWd1b3VzICYmIG4zICE9IG4xKQotICAgICAgICAgICAgICBjb250aW51ZTsKLQotI2lmZGVm IExVREVCVUcKLWlmICh6eikgcHJpbnRmKCJNQVRDSElORzogWyVzXSBbJXNdLCBuMT0lZFxuIixz LGluZm9bMV0sbjEpOwotI2VuZGlmIC8qIExVREVCVUcgKi8KLQotICAgICAgICAgICAgaWYgKGNr c3RyY21wKHMsaW5mb1sxXSxuMSwwKSkgLyogQ2FzZWxlc3Mgc3RyaW5nIGNvbXBhcmlzb24gKi8K LSAgICAgICAgICAgICAgY29udGludWU7Ci0KLSNpZmRlZiBMVURFQlVHCi1pZiAoenopIHByaW50 ZigiTUFUQ0ggT0s6IFslc10gWyVzXSwgbjE9JWRcbiIscyxpbmZvWzFdLG4xKTsKLSNlbmRpZiAv KiBMVURFQlVHICovCi0KLSAgICAgICAgICAgIGlmICghaW5mb1syXSkgICAgICAgICAgICAgICAv KiBObyBwaG9uZSBudW1iZXIgZ2l2ZW4gKi8KLSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg ICAgICAgICBpZiAoKG4yID0gKGludCkgc3RybGVuKGluZm9bMl0pKSA8IDEpIC8qIExlbmd0aCBv ZiBwaG9uZSBudW1iZXIgKi8KLSAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAg ICAvKiBJZ25vcmUgZW1wdHkgcGhvbmUgbnVtYmVycyAqLwotCi0gICAgICAgICAgICAvKiBHb3Qg b25lICovCi0KLSAgICAgICAgICAgIGlmICghKHBwID0gKGNoYXIgKiltYWxsb2MobjIgKyAxKSkp IHsgLyogQWxsb2NhdGUgc3RvcmFnZSBmb3IgaXQgKi8KLSAgICAgICAgICAgICAgICBwcmludGYo Ij9pbnRlcm5hbCBlcnJvciAtIGx1ZGlhbCBtYWxsb2MgMVxuIik7Ci0gICAgICAgICAgICAgICAg aWYgKGxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZShsaW5lKTsKLSAgICAgICAgICAg ICAgICAgICAgbGluZSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IGRuY291bnQgPSAwOwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBzdHJjcHkocHAsaW5mb1syXSk7ICAgICAgICAgLyogc2FmZSAqLwotCi0g ICAgICAgICAgICBpZiAoZG5jb3VudCA+IE1BWEROVU1TKSB7Ci0gICAgICAgICAgICAgICAgcHJp bnRmKCJXYXJuaW5nOiAlZCBtYXRjaGVzIGZvdW5kLCAlZCBtYXhcbiIsCi0gICAgICAgICAgICAg ICAgICAgICAgIGRuY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgIE1BWEROVU1TCi0gICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgZG5jb3VudCA9IE1BWEROVU1T OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZG5f cFtkbmNvdW50KytdID0gcHA7ICAgICAgIC8qIEFkZCBwb2ludGVyIHRvIGFycmF5LiAqLwotICAg ICAgICAgICAgaWYgKGRuY291bnQgPT0gMSkgeyAgICAgICAgIC8qIEZpcnN0IG9uZS4uLiAqLwot ICAgICAgICAgICAgICAgIGlmIChkX25hbWUpIGZyZWUoZF9uYW1lKTsKLSAgICAgICAgICAgICAg ICBpZiAoIShkX25hbWUgPSAoY2hhciAqKW1hbGxvYyhuMyArIDEpKSkgeyAvKiBTYXZlIGl0cyBu YW1lICovCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP2ludGVybmFsIGVycm9yIC0gbHVk aWFsIG1hbGxvYyAyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUpIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGZyZWUobGluZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBs aW5lID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBk bmNvdW50ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgdCA9IG4zOyAgICAgICAgICAgICAgICAgLyogQW5kIGl0 cyBsZW5ndGggKi8KLSAgICAgICAgICAgICAgICBzdHJjcHkoZF9uYW1lLGluZm9bMV0pOyAvKiBz YWZlICovCi0gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogU2Vjb25k IG9yIHN1YnNlcXVlbnQgb25lICovCi0KLSNpZmRlZiBMVURFQlVHCi0gICAgICAgICAgICAgICAg aWYgKHp6KQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCJkX25hbWU9WyVzXSxpbmZvWzFdPSVz LHQ9WyVkXVxuIixkX25hbWUsaW5mb1sxXSx0KTsKLSNlbmRpZiAvKiBMVURFQlVHICovCi0KLSAg ICAgICAgICAgICAgICBpZiAoKGludCkgc3RybGVuKGluZm9bMV0pID09IHQpIC8qIExlbmd0aHMg Y29tcGFyZSAqLwotICAgICAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcChkX25hbWUsaW5mb1sx XSx0LDApKSAvKiBDYXNlbGVzcyBjb21wYXJlIE9LICovCi0gICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOwotCi0gICAgICAgICAgICAgICAgLyogTmFtZSBnaXZlbiBieSB1c2VyIG1hdGNoZXMg ZW50cmllcyB3aXRoIGRpZmZlcmVudCBuYW1lcyAqLwotCi0gICAgICAgICAgICAgICAgaWYgKGFt YmlndW91cykgICAgICAgICAgLyogQmVlbiBoZXJlIGJlZm9yZSAqLwotICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBhbWJpZ3VvdXMgPSAxOyAgICAgICAgICAvKiBO b3cgYW4gZXhhY3QgbWF0Y2ggaXMgcmVxdWlyZWQgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGog PSAwOyBqIDwgZG5jb3VudDsgaisrKSB7IC8qIENsZWFuIG91dCBwcmV2aW91cyBsaXN0ICovCi0g ICAgICAgICAgICAgICAgICAgIGlmIChkbl9wW2pdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBmcmVlKGRuX3Bbal0pOwotICAgICAgICAgICAgICAgICAgICAgICAgZG5fcFtqXSA9IE5VTEw7 Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgcGFzcysrOyAgICAgICAgICAgICAgICAgLyogU2Vjb25kIHBhc3MuLi4gKi8KLSAgICAgICAg ICAgICAgICBnb3RvIGx1X2FnYWluOyAgICAgICAgICAvKiBEbyBpdCBhbGwgb3ZlciBhZ2Fpbi4g Ki8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobGluZSkgZnJlZShs aW5lKTsKLSAgICBpZiAoZG5jb3VudCA9PSAwICYmIGFtYmlndW91cykgewotICAgICAgICBwcmlu dGYoIiBMb29rdXA6IFwiJXNcIiAtIGFtYmlndW91cyVzXG4iLAotICAgICAgICAgICAgICAgcywK LSAgICAgICAgICAgICAgIGN4ID09IFhYTE9PSyA/ICIiIDogIiAtIGRpYWxpbmcgc2tpcHBlZCIK LSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotICAgIHJldHVy bihkbmNvdW50KTsKLX0KLQotY2hhciAqCi1wbmN2dChzKSBjaGFyICpzOyB7ICAgICAgICAgICAg ICAgICAgICAgLyogUGhvbmUgbnVtYmVyIGNvbnZlcnNpb24gKi8KLSAgICBjaGFyICpwID0gTlVM TDsgICAgICAgICAgICAgICAgICAgICAvKiAoanVzdCBhIHdyYXBwZXIgZm9yIGRuY3Z0KCkgKi8K LSAgICBjaGFyICpxID0gTlVMTDsKLSAgICBzdGF0aWMgY2hhciBwbmJ1ZlsxMjhdOwotICAgIG1h a2VzdHIoJnAsZG5fcFswXSk7ICAgICAgICAgICAgICAgIC8qIFNhdmUgdGhlc2UgaW4gY2FzZSB0 aGV5IGFyZSAqLwotICAgIG1ha2VzdHIoJnEsZG5fcDJbMF0pOyAgICAgICAgICAgICAgIC8qIGJl aW5nIHVzZWQgKi8KLSAgICBtYWtlc3RyKCZkbl9wWzBdLHMpOyAgICAgICAgICAgICAgICAvKiBD b3B5IHRoZSBhcmd1bWVudCBzdHJpbmcgdG8gaGVyZSAqLwotICAgIGRuY3Z0KDAsWFhMT09LLDEs MSk7ICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgaXQgKi8KLSAgICBpZiAoIWRuX3AyWzBdKSAg ICAgICAgICAgICAgICAgICAgICAvKiBQdXQgcmVzdWx0IHdoZXJlIGNhbiByZXR1cm4gaXQgKi8K LSAgICAgIHBuYnVmWzBdID0gTlVMOwotICAgIGVsc2UKLSAgICAgIGNrc3RybmNweShwbmJ1Zixk bl9wMlswXSwxMjcpOwotICAgIG1ha2VzdHIoJmRuX3BbMF0scCk7ICAgICAgICAgICAgICAgIC8q IFJlc3RvcmUgdGhlc2UgKi8KLSAgICBtYWtlc3RyKCZkbl9wMlswXSxxKTsKLSAgICBtYWtlc3Ry KCZwLE5VTEwpOyAgICAgICAgICAgICAgICAgICAvKiBGcmVlIHRoZXNlICovCi0gICAgbWFrZXN0 cigmcSxOVUxMKTsKLSAgICByZXR1cm4oKGNoYXIgKilwbmJ1Zik7Ci19Ci0KLWludAotZG9kaWFs KGN4KSBpbnQgY3g7IHsgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgb3IgUkVESUFMICovCi0g ICAgaW50IGkgPSAwLCB4ID0gMDsgICAgICAgICAgICAgICAgICAgLyogV29ya2VycyAqLwotICAg IGludCBzcGFyaXR5ID0gLTE7ICAgICAgICAgICAgICAgICAgIC8qIEZvciBzYXZpbmcgZ2xvYmFs IHBhcml0eSB2YWx1ZSAqLwotICAgIGludCBwcmV2aW91cyA9IDA7Ci0gICAgaW50IGxlbiA9IDA7 Ci0gICAgaW50IGxpdGVyYWwgPSAwOwotICAgIGludCBmbG93c2F2ZTsKLSAgICBpbnQgbHVmb3Vu ZCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBEaWQgYW55IGxvb2t1cCBzdWNjZWVkPyAqLwot ICAgIGludCBwcmVmaXggPSAxOwotICAgIGludCBwb3N0Zml4ID0gMTsKLSAgICBpbnQgd2FzYWxw aGEgPSAwOwotICAgIGludCB4cmVkaWFsID0gMDsKLSAgICBpbnQgYnJhY2VzID0gMDsKLQotICAg IGNoYXIgKnAgPSBOVUxMLCAqczMgPSBOVUxMLCAqIHNhdiA9IE5VTEw7Ci0gICAgaW50IGogPSAw LCB0ID0gMCwgbiA9IDA7Ci0gICAgaW50IHhyZXRyaWVzLCB4bGNjOwotCi0jaWZkZWYgQ09NTUVO VAotICAgIGRlYnVnKEYxMDEsImRvZGlhbCBjeCIsIiIsY3gpOwotICAgIGRlYnVnKEYxMTEsImRv ZGlhbCBkaWFsbGNjIixkaWFsbGNjLGRpYWxsY2MpOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQot ICAgIHhyZXRyaWVzID0gZGlhbHJ0cjsgICAgICAgICAgICAgICAgIC8qIElmIHJldHJpZXMgbm90 IHNldCwgKi8KLSAgICBpZiAoZGlhbGxjYykgeyAgICAgICAgICAgICAgICAgICAgICAvKiBjaG9v c2UgZGVmYXVsdCBiYXNlZCBvbiAqLwotICAgICAgICB4bGNjID0gYXRvaShkaWFsbGNjKTsgICAg ICAgICAgIC8qIGxvY2FsIGNvdW50cnkgY29kZS4gKi8KLSAgICAgICAgaWYgKHhyZXRyaWVzIDwg MCkgewotICAgICAgICAgICAgc3dpdGNoICh4bGNjKSB7Ci0gICAgICAgICAgICAgIGNhc2UgMTog eHJldHJpZXMgPSAxMDsgYnJlYWs7IC8qIE5vIHJlc3RyaWN0aW9ucyBpbiBOQU5QICovCi0gICAg ICAgICAgICAgICAgLyogQWRkIG90aGVyIGNvdW50cnkgY29kZXMgaGVyZSAqLwotICAgICAgICAg ICAgICAgIC8qIHRoYXQgYXJlIGtub3duIHRvIGhhdmUgbm8gcmVzdHJpY3Rpb25zIG9uIHJlZGlh bGluZy4gKi8KLSAgICAgICAgICAgICAgZGVmYXVsdDogeHJldHJpZXMgPSAxOwotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChjeCA9PSBYWFBESUEpIHsgICAgICAgICAg ICAgICAgIC8qIFNob3J0Y3V0Li4uICovCi0gICAgICAgIGN4ID0gWFhESUFMOwotICAgICAgICBw YXJ0aWFsID0gMTsKLSAgICAgICAgZGVidWcoRjEwMCwiUERJQUwgc2V0cyBwYXJ0aWFsPTEiLCIi LDApOwotICAgICAgICBwb3N0Zml4ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdCBh ZGQgcG9zdGZpeCAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhcnRpYWwgPSAwOwotICAgICAg ICBkZWJ1ZyhGMTAwLCJESUFMIHNldHMgcGFydGlhbD0wIiwiIiwwKTsKLSAgICB9Ci0gICAgcHJl dmlvdXMgPSBkaWFsc3RhOyAgICAgICAgICAgICAgICAgLyogU3RhdHVzIG9mIHByZXZpb3VzIGNh bGwsIGlmIGFueSAqLwotICAgIGlmIChwcmV2aW91cyA9PSBESUFfUEFSVCkgewotICAgICAgICBw cmVmaXggPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdCBhZGQgcHJlZml4ICovCi0g ICAgfQotICAgIHMgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxp emUgdXNlcidzIGRpYWwgc3RyaW5nICovCi0gICAgaWYgKGN4ID09IFhYUkVEKSB7ICAgICAgICAg ICAgICAgICAgLyogUkVESUFMIG9yLi4uICovCi0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwg MCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgfSBlbHNlIGlmIChjeCA9PSBYWEFOU1cpIHsg ICAgICAgICAgLyogQU5TV0VSIG9yIC4uLiAqLwotICAgICAgICBpZiAoKHkgPSBjbW51bSgidGlt ZW91dCAoc2Vjb25kcykiLCIwIiwxMCwmeCx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgIGRpYWxhdG1vID0geDsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBESUFMIG9yIExPT0tVUCAqLwotICAgICAgICBpZiAobmRpYWxkaXIgPiAw KQotICAgICAgICAgIHMzID0gIk51bWJlciB0byBkaWFsIG9yIGVudHJ5IGZyb20gZGlhbCBkaXJl Y3RvcnkiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgczMgPSAiTnVtYmVyIHRvIGRpYWwiOwot ICAgICAgICBpZiAoKHggPSBjbXR4dChzMywgZGlhbG51bSA/IGRpYWxudW0gOiAiIiwmcyx4eHN0 cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmIChzKSB7Ci0gICAg ICAgICAgICBsZW4gPSAoaW50KSBzdHJsZW4ocyk7Ci0gICAgICAgICAgICBja3N0cm5jcHkodG1w YnVmLHMsVE1QQlVGU0laKTsgLyogU2F2ZSBsaXRlcmFsIGNvcHkgKi8KLSNpZmRlZiBDT01NRU5U Ci0gICAgICAgICAgICBpZiAobGVuID4gMSkgeyAgICAgICAgICAgICAgLyogU3RyaXAgb3V0ZXIg YnJhY2VzIGlmIGdpdmVuICovCi0gICAgICAgICAgICAgICAgaWYgKCpzID09ICd7JykgewotICAg ICAgICAgICAgICAgICAgICBpZiAoc1tsZW4tMV0gPT0gJ30nKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBzW2xlbi0xXSA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHMrKzsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSAyOwotICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgIHMgPSBi cnN0cmlwKHMpOyAgICAgICAgICAgICAvKiBTdHJpcCBvdXRlciBicmFjZXMgb3IgcXVvdGVzICov Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGN4ICE9 IFhYTE9PSykgeyAgICAgICAgICAgICAgICAgLyogTm90IExPT0tVUCAqLwotI2lmZGVmIElLU0QK LSAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBkaWFs aW5nIGlzIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgQ0tfVEFQSQotICAgICAgICBp ZiAodHR0YXBpICYmICF0YXBpcGFzcykgewotICAgICAgICAgIDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNraXAgdGhlIG1vZGVtIHRlc3QgaWYgVEFQSSAqLwotICAgICAgICB9IGVs c2UKLSNlbmRpZiAvKiBDS19UQVBJICovCi0gICAgICAgIGlmIChtZG10eXAgPCAxICYmICFkaWFs dGVzdCkgewotICAgICAgICAgICAgaWYgKG5ldHdvcmsKLSNpZmRlZiBUTl9DT01QT1JUCi0gICAg ICAgICAgICAgICAgICYmICFpc3RuY29tcG9ydCgpCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwot ICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgIHByaW50ZigiUGxlYXNlIFNFVCBIT1NU IGZpcnN0LCBhbmQgdGhlbiBTRVQgTU9ERU0gVFlQRVxuIik7Ci0gICAgICAgICAgICBlbHNlCi0g ICAgICAgICAgICAgIHByaW50ZigiU29ycnksIHlvdSBtdXN0IFNFVCBNT0RFTSBUWVBFIGZpcnN0 XG4iKTsKLSAgICAgICAgICAgIGRpYWxzdGEgPSBESUFfTk9NTzsKLSAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFsb2NhbCAmJiAhZGlhbHRl c3QpIHsKLSAgICAgICAgICAgIHByaW50ZigiU29ycnksIHlvdSBtdXN0IFNFVCAlcyBvciBTRVQg SE9TVCBmaXJzdFxuIiwKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAiUE9SVCIKLSNl bHNlCi0gICAgICAgICAgICAgICAgICAgIkxJTkUiCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGRpYWxzdGEgPSBESUFfTk9MSTsKLSAgICAgICAg ICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCghbmV0d29y ayAKLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgICAgICAgIHx8IGlzdG5jb21wb3J0KCkKLSNl bmRpZiAvKiBUTl9DT01QT1JUICovCi0gICAgICAgICAgICAgICkgJiYgIWRpYWx0ZXN0ICYmCi0j aWZkZWYgQ0tfVEFQSQotICAgICAgICAgICAgICF0dHRhcGkgJiYKLSNlbmRpZiAvKiBDS19UQVBJ ICovCi0gICAgICAgICAgICAoc3BlZWQgPCAwTCkKLSNpZmRlZiBVTklYCi0gICAgICAgICAgICAm JiAoc3RyY21wKHR0bmFtZSwiL2Rldi9udWxsIikpCi0jZWxzZQotI2lmZGVmIE9TSwotICAgICAg ICAgICAgJiYgKHN0cmNtcCh0dG5hbWUsIi9uaWwiKSkKLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRp ZiAvKiBVTklYICovCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgIHByaW50ZigiXG5Tb3Jy eSwgeW91IG11c3QgU0VUIFNQRUVEIGZpcnN0XG4iKTsKLSAgICAgICAgICAgIGRpYWxzdGEgPSBE SUFfTk9TUDsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgaWYgKGN4ICE9IFhYQU5TVykgewotICAgICAgICBmb3IgKGogPSAwOyBqIDwgTUFY RE5VTVM7IGorKykgeyAvKiBJbml0aWFsaXplIGRpYWwtbnVtYmVyIGxpc3QgKi8KLSAgICAgICAg ICAgIGlmICghZGlhbG51bSkgeyAgICAgICAgICAgICAvKiBGaXJzdCB0aW1lIGRpYWxpbmcgKi8K LSAgICAgICAgICAgICAgICBkbl9wW2pdID0gTlVMTDsgICAgICAgICAvKiBpbml0aWFsaXplIGFs bCBwb2ludGVycy4gKi8KLSAgICAgICAgICAgICAgICBkbl9wMltqXSA9IE5VTEw7Ci0gICAgICAg ICAgICB9IGVsc2UgaWYgKGRuX3Bbal0pIHsgICAgICAgLyogTm90IHRoZSBmaXJzdCB0aW1lLCAq LwotICAgICAgICAgICAgICAgIGZyZWUoZG5fcFtqXSk7ICAgICAgICAgIC8qIGZyZWUgcHJldmlv dXMsIGlmIGFueSwgKi8KLSAgICAgICAgICAgICAgICBkbl9wW2pdID0gTlVMTDsgICAgICAgICAv KiB0aGVuIHNldCB0byBOVUxMLiAqLwotICAgICAgICAgICAgICAgIGlmIChkbl9wMltqXSkKLSAg ICAgICAgICAgICAgICAgIGZyZWUoZG5fcDJbal0pOwotICAgICAgICAgICAgICAgIGRuX3AyW2pd ID0gTlVMTDsKLSAgICAgICAgICAgIH0gZWxzZSBicmVhazsgICAgICAgICAgICAgICAvKiBBbHJl YWR5IE5VTEwgKi8KLSAgICAgICAgfQotICAgICAgICBpZiAobGVuID09IDApCi0gICAgICAgICAg cyA9IE5VTEw7Ci0gICAgICAgIGlmICghcykKLSAgICAgICAgICBzID0gZGlhbG51bTsKLSAgICAg ICAgaWYgKCFzKSB7Ci0gICAgICAgICAgICBpZiAoY3ggPT0gWFhMT09LKQotICAgICAgICAgICAg ICBwcmludGYoIj9Mb29rdXAgd2hhdD9cbiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg ICAgICBwcmludGYoIiVzXG4iLCAoY3ggPT0gWFhSRUQpID8KLSAgICAgICAgICAgICAgICAgICAi P05vIERJQUwgY29tbWFuZCBnaXZlbiB5ZXQiIDoKLSAgICAgICAgICAgICAgICAgICAiP1lvdSBt dXN0IHNwZWNpZnkgYSBudW1iZXIgdG8gZGlhbCIKLSAgICAgICAgICAgICAgICAgICApOwotICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotCi0gICAgLyogTm93IHdlIGhhdmUgdGhl ICJyYXciIGRpYWwgb3IgbG9va3VwIHN0cmluZyBhbmQgcyBpcyBub3QgTlVMTCAqLwotCi0gICAg ICAgIG1ha2VzdHIoJmRzY29weSxzKTsgICAgICAgICAgICAgLyogUHV0IGl0IGluIGEgc2FmZSBw bGFjZSAqLwotICAgICAgICBzID0gZHNjb3B5OwotICAgICAgICBuID0gMDsKLQotICAgICAgICBk ZWJ1ZyhGMTExLCJkb2RpYWwiLHMsbmRpYWxkaXIpOwotCi0gICAgICAgIHdhc2FscGhhID0gMDsK LSAgICAgICAgaWYgKGlzYWxwaGEoKnMpKSB7Ci0gICAgICAgICAgICB3YXNhbHBoYSA9IDE7Ci0g ICAgICAgICAgICBpZiAobmRpYWxkaXIgPiAwKSB7ICAgICAgICAgLyogRG8gd2UgaGF2ZSBhIGRp YWxpbmcgZGlyZWN0b3J5PyAqLwotICAgICAgICAgICAgICAgIG4gPSBsdWRpYWwocyxjeCk7ICAg ICAgIC8qIExvb2sgdXAgd2hhdCB0aGUgdXNlciB0eXBlZCAqLwotICAgICAgICAgICAgICAgIGlm IChuID09IDApCi0gICAgICAgICAgICAgICAgICBwcmludGYoIiBMb29rdXA6IFwiJXNcIiAtIG5v dCBmb3VuZCVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIHMsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgY3ggPT0gWFhMT09LID8gIiIgOiAiIC0gZGlhbGluZyBhcyBnaXZlblxuIgot ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJkb2RpYWwiLHMsbik7Ci0gICAgICAgICAgICBpZiAobiA8IDAgJiYgY3ggIT0g WFhMT09LKSB7IC8qIEVycm9yIG91dCBpZiB0aGV5IHdhbnRlZCB0byBkaWFsICovCi0gICAgICAg ICAgICAgICAgaWYgKG4gPT0gLTEpICAgICAgICAgICAgLyogLTIgbWVhbnMgbHVkaWFsIGFscmVh ZHkgZ2F2ZSBtc2cgKi8KLSAgICAgICAgICAgICAgICAgIHByaW50ZigiIExvb2t1cDogZmF0YWwg ZXJyb3IgLSBkaWFsaW5nIHNraXBwZWRcbiIpOwotICAgICAgICAgICAgICAgIGRpYWxzdGEgPSBE SUFfRElSOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBpZiAobiA+IDApICAgICAgICAgICAgICAgICAgLyogQSBzdWNjZXNzZnVsIGxvb2t1 cCAqLwotICAgICAgICAgICAgICBsdWZvdW5kID0gMTsKLSAgICAgICAgfSBlbHNlIGlmICgqcyA9 PSAnPScpIHsgICAgICAgICAvKiBJZiBudW1iZXIgc3RhcnRzIHdpdGggPSBzaWduICovCi0gICAg ICAgICAgICBzKys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RyaXAgaXQgKi8KLSAgICAg ICAgICAgIGxpdGVyYWwgPSAxOyAgICAgICAgICAgICAgICAvKiByZW1lbWJlciB0aGlzICovCi0g ICAgICAgICAgICB3aGlsZSAoKnMgPT0gU1ApIHMrKzsgICAgICAgLyogYW5kIHRoZW4gYWxzbyBh bnkgbGVhZGluZyBzcGFjZXMgKi8KLSAgICAgICAgfSBlbHNlIGlmICh0bXBidWZbMF0gPT0gJ3sn ICYmIHRtcGJ1ZlsxXSA9PSAneycpIHsKLSAgICAgICAgICAgIG1ha2VsaXN0KHRtcGJ1Zixkbl9w LE1BWEROVU1TKTsKLSAgICAgICAgICAgIG1ha2VzdHIoJmRzY29weSx0bXBidWYpOwotICAgICAg ICAgICAgcyA9IHRtcGJ1ZjsKLSAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBNQVhETlVNUzsg bisrKSAvKiAoaGF2ZSB0byBjb3VudCBob3cgbWFueSkgKi8KLSAgICAgICAgICAgICAgaWYgKCFk bl9wW25dKSBicmVhazsKLSAgICAgICAgICAgIGJyYWNlcyA9IDE7Ci0gICAgICAgIH0KLSAgICAg ICAgaWYgKGN4ID09IFhYTE9PSyAmJiAhd2FzYWxwaGEgJiYgIWJyYWNlcykgewotICAgICAgICAg ICAgLyogV2UndmUgYmVlbiB0b2xkIHRvIGxvb2t1cCBhIG51bWJlciBvciBhIHF1b3RlZCBuYW1l ICovCi0gICAgICAgICAgICBjaGFyICpwOwotICAgICAgICAgICAgbiA9IDA7Ci0gICAgICAgICAg ICBwID0gbGl0ZXJhbCA/IHMgOiBwbmN2dChkc2NvcHkpOwotICAgICAgICAgICAgaWYgKCFwKSBw ID0gIiI7Ci0gICAgICAgICAgICBpZiAoKnApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIiVz ICA9PiAlc1xuIiwgZHNjb3B5LCBwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9CYWQg cGhvbmUgbnVtYmVyXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIFNhdmUgRElBTCBvciBzdWNjZXNz ZnVsIExPT0tVUCBzdHJpbmcgZm9yIGZ1dHVyZSBESUFMIG9yIFJFRElBTCAqLwotICAgICAgICAv KiBCdXQgZG9uJ3Qgc2F2ZSBwaWVjZXMgb2YgcGFydGlhbCBkaWFsIC4uLiAqLwotCi0gICAgICAg IGRlYnVnKEYxMDEsIkRJQUwgc2F2ZSBkaWFsbnVtIHBhcnRpYWwiLCIiLHBhcnRpYWwpOwotICAg ICAgICBkZWJ1ZyhGMTAxLCJESUFMIHNhdmUgZGlhbG51bSBwcmV2aW91cyIsIiIscHJldmlvdXMp OwotICAgICAgICBpZiAoKGN4ID09IFhYRElBTCAmJiBwYXJ0aWFsID09IDAgJiYgcHJldmlvdXMg IT0gRElBX1BBUlQpIHx8Ci0gICAgICAgICAgICAoY3ggPT0gWFhMT09LICYmIG4gPiAwKSkgewot ICAgICAgICAgICAgbWFrZXN0cigmZGlhbG51bSxkc2NvcHkpOwotICAgICAgICAgICAgaWYgKCFx dWlldCAmJiBkc2NvcHkgJiYgIWRpYWxudW0pCi0gICAgICAgICAgICAgIHByaW50ZigiV0FSTklO RyAtIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmU6IHJlZGlhbCBudW1iZXJcbiIpOwotICAgICAg ICB9Ci0gICAgICAgIGlmIChuID4gMCkgewotICAgICAgICAgICAgaWYgKCFxdWlldCAmJiAhYmFj a2dyZCAmJiAhYnJhY2VzIC8qICYmIGRpYWxkcHkgKi8gKSB7Ci0gICAgICAgICAgICAgICAgaWYg KCFzdHJjbXAoZF9uYW1lLHMpKQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgTG9va3VwOiBc IiVzXCIgLSBleGFjdCBtYXRjaFxuIixzKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg ICAgICAgICAgICBwcmludGYoIiBMb29rdXA6IFwiJXNcIiAtIHVuaXF1ZWx5IG1hdGNoZXMgXCIl c1wiXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIHMsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgZF9uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGlmICgoY3ggPT0gWFhMT09LKSB8fAotICAgICAgICAgICAgICAgICgobiA+ IDEpICYmICFxdWlldCAmJiAhYmFja2dyZCAvKiAmJiBkaWFsZHB5ICovICkpIHsKLSAgICAgICAg ICAgICAgICBwcmludGYoIiAlZCB0ZWxlcGhvbmUgbnVtYmVyJXNmb3VuZCBmb3IgXCIlc1wiJXNc biIsCi0gICAgICAgICAgICAgICAgICAgICAgIG4sCi0gICAgICAgICAgICAgICAgICAgICAgIChu ID09IDEpID8gIiAiIDogInMgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgcywKLSAgICAgICAg ICAgICAgICAgICAgICAgKG4gPiAwKSA/ICI6IiA6ICIuIgotICAgICAgICAgICAgICAgICAgICAg ICApOwotICAgICAgICAgICAgICAgIHMzID0gZ2V0ZG5hbWUoKTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsgICAvKiBDb252ZXJ0ICovCi0gICAg ICAgICAgICAgICAgZG5feFtpXSA9IC0xOwotICAgICAgICAgICAgICAgIGlmIChkbmN2dChpLGN4 LHByZWZpeCxwb3N0Zml4KSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN4ICE9IFhY TE9PSykgewotICAgICAgICAgICAgICAgICAgICAgICAgZGlhbHN0YSA9IERJQV9ESVI7Ci0gICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRpYWxzcnQg JiYgbiA+IDEpIHsgICAgIC8qIFNvcnQgaW50byBvcHRpbWFsIG9yZGVyICovCi0gICAgICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IG4tMTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZv ciAoaiA9IGkrMTsgaiA8IG47IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRu X3hbal0gPCBkbl94W2ldKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGRuX3hb al07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5feFtqXSA9IGRuX3hbaV07Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgZG5feFtpXSA9IHQ7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgcCA9IGRuX3Bbal07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5fcFtq XSA9IGRuX3BbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5fcFtpXSA9IHA7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGRuX3AyW2pdOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRuX3AyW2pdID0gZG5fcDJbaV07Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgZG5fcDJbaV0gPSBwOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg ICAgaWYgKChjeCA9PSBYWExPT0spIHx8Ci0gICAgICAgICAgICAgICAgKChuID4gMSkgJiYgIXF1 aWV0ICYmICFiYWNrZ3JkIC8qICYmIGRpYWxkcHkgKi8gKSkgewotICAgICAgICAgICAgICAgIGlu dCBubiA9IG47Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICAgICAgY2hhciAqIHA7Ci0jZW5k aWYgLyogTk9TUEwgKi8KLSAgICAgICAgICAgICAgICBpZiAoY3ggIT0gWFhMT09LKQotICAgICAg ICAgICAgICAgICAgaWYgKG4gPiAxMikgbm4gPSAxMjsKLSAgICAgICAgICAgICAgICBmb3IgKGkg PSAwOyBpIDwgbm47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiUzZC4gJS0x MnMgICUtMjBzID0+ICAlLTIwcyAgKCVkKVxuIixpKzEsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICBzMywgZG5fcFtpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRuX3AyW2ldID8g ZG5fcDJbaV0gOiAiKHByb2Nlc3NpbmcgZmFpbGVkKSIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICBkbl94W2ldCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY3ggIT0gWFhMT09LICYmIG4gIT0gbm4pCi0gICAg ICAgICAgICAgICAgICBwcmludGYoIkFuZCAlZCBtb3JlLi4uXG4iLCBuIC0gbm4pOwotICAgICAg ICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKG4gPT0gMCkgeyAgICAgICAgICAgIC8qIE5vdCBm b3VuZCBpbiBkaXJlY3RvcnkgKi8KLSAgICAgICAgICAgIG1ha2VzdHIoJihkbl9wWzBdKSxsaXRl cmFsID8gcyA6IGRzY29weSk7Ci0gICAgICAgICAgICBtYWtlc3RyKCZkX25hbWUsbGl0ZXJhbCA/ IHMgOiBkc2NvcHkpOwotICAgICAgICAgICAgZG5jb3VudCA9IDE7Ci0gICAgICAgICAgICBuID0g MTsKLSAgICAgICAgICAgIGlmIChkbmN2dCgwLGN4LHByZWZpeCxwb3N0Zml4KSA8IDApIHsgLyog SW4gY2FzZSB0aGV5IHR5cGVkIGEgKi8KLSAgICAgICAgICAgICAgICBkaWFsc3RhID0gRElBX0RJ UjsgICAgICAvKiBwb3J0YWJsZS1mb3JtYXQgbnVtYmVyIC4uLiAqLwotICAgICAgICAgICAgICAg IHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotI2lmbmRlZiBOT05FVAot I2lmZGVmIE5FVENPTk4KLSAgICAgICAgLyogSXQncyBub3QgZ29vZCB0aGF0IHRoZSBuZXR3b3Jr cyBkaXJlY3RvcnkgZGVwZW5kcyBvbiBOT1QtTk9ESUFMLi4gKi8KLSAgICAgICAgaWYgKGN4ID09 IFhYTE9PSyAmJiBkc2NvcHkpIHsgICAvKiBOZXR3b3JrcyBoZXJlIHRvby4uLiAqLwotICAgICAg ICAgICAgZXh0ZXJuIGNoYXIgKm5oX3BbXSwgKm5oX3AyW10sICpuX25hbWU7Ci0gICAgICAgICAg ICBleHRlcm4gY2hhciAqbmhfcHhbNF1bTUFYRE5VTVMrMV07Ci0gICAgICAgICAgICBuID0gLTE7 Ci0gICAgICAgICAgICBpZiAobm5ldGRpciA+IDApIHsgICAgICAgICAgLyogRG8gd2UgaGF2ZSBh IG5ldHdvcmsgZGlyZWN0b3J5PyAqLwotICAgICAgICAgICAgICAgIGRpcmxpbmUgPSAwOwotICAg ICAgICAgICAgICAgIG4gPSBsdW5ldChkc2NvcHkpOyAgICAgIC8qIExvb2sgdXAgd2hhdCB0aGUg dXNlciB0eXBlZCAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG4gPiAtMSkgewot ICAgICAgICAgICAgICAgIGludCBrOwotICAgICAgICAgICAgICAgIGlmIChuID4gMCkgICAgICAg ICAgICAgIC8qIEEgc3VjY2Vzc2Z1bCBsb29rdXAgKi8KLSAgICAgICAgICAgICAgICAgIGx1Zm91 bmQgPSAxOwotICAgICAgICAgICAgICAgIGlmIChjeCA9PSBYWExPT0sgJiYgbiA9PSAwKQotICAg ICAgICAgICAgICAgICAgcHJpbnRmKCIgTG9va3VwOiBcIiVzXCIgLSBub3QgZm91bmRcbiIsZHNj b3B5KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBwcmludGYoIiVz ICVkIG5ldHdvcmsgZW50ciVzIGZvdW5kIGZvciBcIiVzXCIlc1xuIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICBjeCA9PSBYWExPT0sgPyAiIExvb2t1cDoiIDogIiIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAobiA9PSAxKSA/ICJ5IiA6 ICJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRzY29weSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAobiA+IDApID8gIjoiIDogIi4iCi0gICAgICAgICAgICAgICAgICAgICAgICAg KTsKLQotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQotICAgICAg ICAgICAgICAgICAgICBwcmludGYoIiUzZC4gJS0xMnMgPT4gJS05cyAlcyIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICBpKzEsbl9uYW1lLG5oX3AyW2ldLG5oX3BbaV0pOwotICAgICAgICAg ICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgNDsgaysrKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBpZiAobmhfcHhba11baV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIiAlcyIsbmhfcHhba11baV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBORVRDT05OICovCi0jZW5kaWYgLyogTk9O RVQgKi8KLSAgICAgICAgaWYgKGN4ID09IFhYTE9PSykKLSAgICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IGx1Zm91bmQpOwotICAgIH0gLyogY3ggIT0gWFhBTlNXICovCi0KLSNpZmRlZiBWTVMKLSAg ICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgLyogU28gQ3RybC1DL1kgd2lsbCB3b3JrICov Ci0jZW5kaWYgLyogVk1TICovCi0vKgotICBTb21lIG1vZGVtcyBkbyBub3QgcmVhY3Qgd2VsbCB0 byBwYXJpdHkuICBBbHNvLCBpZiB3ZSBhcmUgZGlhbGluZyB0aHJvdWdoIGEKLSAgVENQL0lQIFRF TE5FVCBtb2RlbSBzZXJ2ZXIsIHBhcml0eSBjYW4gYmUgZmF0YWxseSBtaXNpbnRlcnByZXRlZCBh cyBURUxORVQKLSAgbmVnb3RpYXRpb25zLgotCi0gIFRoaXMgc2hvdWxkIHdvcmsgZXZlbiBpZiB0 aGUgdXNlciBpbnRlcnJ1cHRzIHRoZSBESUFMIGNvbW1hbmQsIGJlY2F1c2UgdGhlCi0gIERJQUwg bW9kdWxlIGhhcyBpdHMgb3duIGludGVycnVwdCBoYW5kbGVyLiAgQlVULi4uIGlmLCBmb3Igc29t ZSByZWFzb24sIGEKLSAgZGlhbGluZyBkZXZpY2UgYWN0dWFsbHkgKnJlcXVpcmVzKiBwYXJpdHkg KGUuZy4gQ0NJVFQgVi4yNWJpcyBzYXlzIHRoYXQgZXZlbgotICBwYXJpdHkgc2hvdWxkIGJlIHVz ZWQpLCB0aGlzIG1pZ2h0IHByZXZlbnQgc3VjY2Vzc2Z1bCBkaWFsaW5nLiAgRm9yIHRoYXQKLSAg cmVhc29uLCB3ZSBkb24ndCBkbyB0aGlzIGZvciBWLjI1YmlzIG1vZGVtcy4KLSovCi0gICAgc3Bh cml0eSA9IHBhcml0eTsgICAgICAgICAgICAgICAgICAgLyogU2F2ZSBjdXJyZW50IHBhcml0eSAq LwotICAgIGlmICgoZGlhbGNhcGFzICYgQ0tEX1YyNSkgPT0gMCkgICAgIC8qIElmIG5vdCBWLjI1 YmlzLi4uICAqLwotICAgICAgcGFyaXR5ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNl dCBwYXJpdHkgdG8gTk9ORSAqLwotCi0gICAgZmxvd3NhdmUgPSBmbG93OwotLyoKLSAgVGhlc2Ug bW9kZW1zIHVzZSBzb21lIGtpbmQgb2Ygc2NyZXd5IGZsb3cgY29udHJvbCB3aGlsZSBpbiBjb21t YW5kIG1vZGUsCi0gIGFuZCBkbyBub3QgcHJlc2VudCBDVFMgYXMgdGhleSBzaG91bGQuICBTbyBp ZiBSVFMvQ1RTIGlzIHNldCAob3IgZXZlbiBpZgotICBpdCBpc24ndCkgZGlzYWJsZSBmbG93IGNv bnRyb2wgZHVyaW5nIGRpYWxpbmcuCi0qLwotI2lmbmRlZiBNSU5JRElBTAotICAgIGlmIChtZG10 eXAgPT0gbl9BVFQxOTEwIHx8IG1kbXR5cCA9PSBuX0FUVDE5MDApIHsKLSAgICAgICAgZmxvdyA9 IEZMT19OT05FOyAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIG5vdCBlbm91Z2ggKi8KLSNpZmRl ZiBDS19UVFNFVEZMT1cKLSAgICAgICAgdHRzZXRmbG93KEZMT19OT05FKTsgICAgICAgICAgICAv KiBSZWFsbHkgdHVybiBpdCBvZmYgKi8KLSNlbmRpZiAvKiBDS19UVFNFVEZMT1cgKi8KLSAgICB9 Ci0jZW5kaWYgLyogTUlOSURJQUwgKi8KLSAgICBpZiAoIW5ldHdvcmsKLSNpZmRlZiBUTl9DT01Q T1JUCi0gICAgICAgIHx8IGlzdG5jb21wb3J0KCkKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0g ICAgICAgICApIHsKLSAgICAgICAgaW50IHg7Ci0gICAgICAgIGlmICgoeCA9IHR0Z21kbSgpKSA+ IC0xKSB7Ci0gICAgICAgICAgICBpZiAoIXggJiYgbXNnZmxnKSB7Ci0gICAgICAgICAgICAgICAg cHJpbnRmKAotIldBUk5JTkcgLSBObyBtb2RlbSBzaWduYWxzIGRldGVjdGVkLiAgSXMgeW91ciBt b2RlbSB0dXJuZWQgb24/ICBJZiBub3QsXG5cCi11c2UgQ3RybC1DIHRvIGludGVycnVwdCBkaWFs aW5nLCB0dXJuIG9uIHlvdXIgbW9kZW0sIHRoZW4gJXMuXG4iLAotICAgICAgICAgICAgICAgICAg ICAgICBjeCA9PSBYWEFOU1cgPwotICAgICAgICAgICAgICAgICAgICAgICAiQU5TV0VSIGFnYWlu IiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICJSRURJQUwiCi0gICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmxvdyA9PSBGTE9fUlRTQykg ewotICAgICAgICAgICAgICAgIGlmICghKHggJiBCTV9DVFMpKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGlmIChtc2dmbGcpCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAotIldBUk5JTkcg LSBTRVQgRkxPVyBSVFMvQ1RTIGlzIGluIGVmZmVjdCBidXQgbW9kZW0ncyBDVFMgc2lnbmFsIGlz IG9mZi5cblwKLURpc2FibGluZyBmbG93IGNvbnRyb2wgdGVtcG9yYXJpbHkgJXMuLi5cbiIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4ID09IFhYQU5TVyA/Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJ3aGlsZSB3YWl0aW5nIGZvciBjYWxsIiA6Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJkdXJpbmcgZGlhbGluZyIKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvdyA9IEZMT19OT05FOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY3ggPT0g WFhBTlNXKSB7ICAgICAgICAgICAgICAgICAvKiBBTlNXRVIgKi8KLSAgICAgICAgc3VjY2VzcyA9 IGNrZGlhbCgiIiwwLDAsMSwwKTsKLSAgICAgICAgZ290byBkaWFsZmluOwotICAgIH0KLQotLyog RWRpdCAxOTIgYWRkcyB0aGUgYWJpbGl0eSB0byBkaWFsIHJlcGVhdGVkbHkuICovCi0KLSAgICBp ID0gMDsKLSAgICBkaWFsY291bnQgPSAwOwotICAgIGRvIHsKLSAgICAgICAgaWYgKGkgPiAwKSBw cmludGYoIlxuRGlhbCBhdHRlbXB0ICVkIG9mICVkLi4uXG4iLCBpKzEsIHhyZXRyaWVzKTsKLSAg ICAgICAgZGlhbGNvdW50ID0gaSsxOwotICAgICAgICBzdWNjZXNzID0gMDsKLSAgICAgICAgLyog QW5kIHRoZSBhYmlsaXR5IHRvIGRpYWwgYWx0ZXJuYXRlIG51bWJlcnMuICovCi0gICAgICAgIC8q IExvb3AgdG8gZGlhbCBlYWNoIGluIGEgbGlzdCBvZiBudW1iZXJzIGZvciB0aGUgc2FtZSBuYW1l Li4uICovCi0gICAgICAgIGZvciAoaiA9IDA7IGogPCBuICYmICFzdWNjZXNzOyBqKyspIHsgLyog dW50aWwgb25lIGFuc3dlcnMuICovCi0gICAgICAgICAgICBzID0gZG5fcDJbal07ICAgICAgICAg ICAgICAgLyogTmV4dCBudW1iZXIgaW4gbGlzdCAqLwotICAgICAgICAgICAgaWYgKGRuX3hbal0g Pj0gZGlhbHJzdHIpIHsgIC8qIERpYWwgcmVzdHJpY3Rpb24gKi8KLSAgICAgICAgICAgICAgICBw cmludGYoIlJlc3RyaWN0ZWQ6ICVzLCBza2lwcGluZy4uLlxuIixkbl9wW2pdKTsKLSAgICAgICAg ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHhyZWRpYWwgPSAo aSA9PSAwICYmIGogPT0gMCkgPyAwIDogMTsKLSAgICAgICAgICAgIGlmICghcykgcyA9IGRuX3Bb al07Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgIHNhdiA9IHM7Ci0gICAgICAgICAgICBw ID0geGRpYWwocyk7ICAgICAgICAgICAgICAgLyogQXBwbHkgRElBTCBtYWNybyBub3cgKi8KLSAg ICAgICAgICAgIGlmIChwKSBpZiAoKnApIHMgPSBwOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLQkg ICAgLyogRGlhbCBjb25maXJtYXRpb24gKi8KLQkgICAgLyogTk9URTogdGhlIHVxX3h4eCgpIGNh bGxzIGFsbG93IGZvciBhIEdVSSBkaWFsb2cgKi8KLQotICAgICAgICAgICAgaWYgKGkgPT0gMCAm JiBkaWFsY25mKSB7Ci0JCWNoYXIgbXNnYnVmWzEyOF07Ci0JCWNrbWFrbXNnKG1zZ2J1ZiwxMjgs IkRpYWxpbmcgIixzLE5VTEwsTlVMTCk7Ci0JCXggPSB1cV9vayhtc2didWYsIklzIHRoaXMgbnVt YmVyIGNvcnJlY3Q/ICIsMyxOVUxMLDApOwotICAgICAgICAgICAgICAgIGlmICgheCkgewotCi0j aWZuZGVmIENPTU1FTlQKLQkJICAgIHggPSB1cV90eHQoCQkvKiBBbGxvdyBHVUkgZGlhbG9nICov Ci0jaWZkZWYgT1MyCi0iIFBsZWFzZSBlbnRlciB0aGUgY29ycmVjdCBudW1iZXIsXHJcbiBvciBw cmVzcyBFbnRlciB0byBza2lwLiIsCi0jZWxzZQotIiBQbGVhc2UgZW50ZXIgdGhlIGNvcnJlY3Qg bnVtYmVyLFxyXG4gb3IgcHJlc3MgUmV0dXJuIHRvIHNraXAuIiwKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3JyZWN0ZWQgcGhvbmUgbnVtYmVyOiAi LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCi0JCQkgICAgICAgTlVMTCwKLQkJ CSAgICAgICBhdG1idWYsCi0JCQkgICAgICAgQVRNQkwsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1VRX1RJ TUVPVVQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCQkgICAgaWYgKHggJiYg YXRtYnVmWzBdKSB7IC8qIFRoZXkgZ2F2ZSBhIG5ldyBvbmUgKi8KLQkJCXMgPSBhdG1idWY7Ci0J CQltYWtlc3RyKCYoZG5fcDJbal0pLCBzKTsKLQkJICAgIH0JCQkKLQotI2Vsc2UgIC8qIENPTU1F TlQgKi8KLQotI2lmZGVmIENLX1JFQ0FMTAotICAgICAgICAgICAgICAgICAgICBleHRlcm4gaW50 IG9uX3JlY2FsbDsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSAgICAgICAgICAgICAgICAgICAg Y21zYXZwKHBzYXZlLFBST01QVEwpOwotICAgICAgICAgICAgICAgICAgICBjbXNldHAoCi0jaWZk ZWYgT1MyCi0iIFBsZWFzZSBlbnRlciB0aGUgY29ycmVjdCBudW1iZXIsXHJcbiBvciBwcmVzcyBF bnRlciB0byBza2lwOiAiCi0jZWxzZQotIiBQbGVhc2UgZW50ZXIgdGhlIGNvcnJlY3QgbnVtYmVy LFxyXG4gb3IgcHJlc3MgUmV0dXJuIHRvIHNraXA6ICIKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIGNtaW5pKGNreGVj aCk7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYg KHBmbGFnKSBwcm9tcHQoTlVMTCk7Ci0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgICAgICAgICAgICAg ICAgIG9uX3JlY2FsbCA9IDA7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0gICAgICAgICAgICAg ICAgICAgIHkgPSBjbWRncXVvKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNtZHNxdW8oMCk7Ci0g ICAgICAgICAgICAgICAgICAgIHdoaWxlICh4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICAg ICAgeCA9IGNtdHh0KCJDb3JyZWN0ZWQgcGhvbmUgbnVtYmVyIiwiIiwmcyxOVUxMKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGNtcmVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgaWYgKChpbnQpIHN0cmxlbihzKSA8IDEpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGNtc2V0cChwc2F2ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYo ZG5fcDJbal0pLCBzKTsKLSAgICAgICAgICAgICAgICAgICAgY21kc3F1byh5KTsKLSAgICAgICAg ICAgICAgICAgICAgY21zZXRwKHBzYXZlKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRpYWx0ZXN0KSB7ICAg ICAgICAgICAgIC8qIEp1c3QgdGVzdGluZyAqLwotICAgICAgICAgICAgICAgIGlmIChpICsgaiA9 PSAwKQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcblRFU1RJTkcuLi5cbiIpOwotICAgICAg ICAgICAgICAgIGlmIChkaWFsbWFjKQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgTnVtYmVy OiBcIiVzXCIgPT4gXCIlc1wiXG4iLHNhdixzKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg ICAgICAgICAgICAgICBwcmludGYoIiBOdW1iZXI6IFwiJXNcIlxuIixzKTsKLSAgICAgICAgICAg ICAgICBkaWFsc3RhID0gRElBX0JVU1k7Ci0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IDA7Ci0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHdoYXQgfD0gV19ESUFMSU5HOwot ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBja2RpYWwocyxpLGoscGFydGlhbCA/IDMgOiAwLCB4 cmVkaWFsKTsgLyogRGlhbCBpdCAqLwotICAgICAgICAgICAgICAgIHdoYXQgJj0gfihXX0RJQUxJ TkcpOwotICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgewotICAgICAgICAgICAgICAgICAg ICBpZiAoZGlhbHN0YSA8IDggfHwgIC8qIEJyZWFrIG91dCBpZiB1bnJlY292ZXJhYmxlIGVycm9y ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBkaWFsc3RhICA9PSBESUFfSU5UUiB8fAotICAg ICAgICAgICAgICAgICAgICAgICAgZGlhbHN0YSAgPT0gRElBX0VSUiAgfHwKLSAgICAgICAgICAg ICAgICAgICAgICAgIHByZXZpb3VzID09IERJQV9QQVJUCi0gICAgICAgICAgICAgICAgICAgICAg ICApCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzdWNjZXNzKSAgICAgICAgICAgICAg ICAgICAgLyogU3VjY2VlZGVkLCBsZWF2ZSB0aGUgb3V0ZXIgbG9vcCAqLwotICAgICAgICAgIGJy ZWFrOwotICAgICAgICBpZiAoZGlhbHN0YSA8IDggfHwgICAgICAgICAgICAgIC8qIEJyZWFrIG91 dCBpZiB1bnJlY292ZXJhYmxlIGVycm9yICovCi0gICAgICAgICAgICBkaWFsc3RhID09IERJQV9J TlRSIHx8ICAgICAgLyogSW50ZXJydXB0ZWQgKi8KLSAgICAgICAgICAgIGRpYWxzdGEgPT0gRElB X05PRFQgfHwgICAgICAvKiBObyBkaWFsdG9uZSAqLwotICAgICAgICAgICAgZGlhbHN0YSA9PSBE SUFfTk9BQyB8fCAgICAgIC8qIEFjY2VzcyBmb3JiaWRkZW4gKi8KLSAgICAgICAgICAgIGRpYWxz dGEgPT0gRElBX0JMQ0sgfHwgICAgICAvKiBCbGFja2xpc3RlZCAqLwotICAgICAgICAgICAgZGlh bHN0YSA9PSBESUFfRElSICB8fCAgICAgIC8qIERpYWxpbmcgZGlyZWN0b3J5IGVycm9yICovCi0g ICAgICAgICAgICBkaWFsc3RhID09IERJQV9FUlIgIHx8ICAgICAgLyogTW9kZW0gY29tbWFuZCBl cnJvciAqLwotICAgICAgICAgICAgcHJldmlvdXMgPT0gRElBX1BBUlQpCi0gICAgICAgICAgYnJl YWs7Ci0gICAgICAgIGlmICgrK2kgPj0geHJldHJpZXMpICAgICAgICAgICAgLyogQnJlYWsgb3V0 IGlmIHRvbyBtYW55IHRyaWVzICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICghYmFj a2dyZCAmJiAhcXVpZXQpIHsKLSAgICAgICAgICAgIGlmIChkaWFsaW50ID4gNSkKLSAgICAgICAg ICAgICAgcHJpbnRmKAotIlxuV2lsbCByZWRpYWwgaW4gJWQgc2Vjb25kJXMtIHByZXNzIGFueSBr ZXkgdG8gcmVkaWFsIGltbWVkaWF0ZWx5LlxuIiwKLSAgICAgICAgICAgICAgICAgICAgIGRpYWxp bnQsCi0gICAgICAgICAgICAgICAgICAgICBkaWFsaW50ID09IDEgPyAiICIgOiAicyAiCi0gICAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgcHJpbnRmKCJDdHJsLUMgdG8gY2FuY2Vs Li4uXG4iKTsKLSAgICAgICAgfQotICAgICAgICB4ID0gZGlhbGludDsgICAgICAgICAgICAgICAg ICAgIC8qIFJlZGlhbCBpbnRlcnZhbCAqLwotICAgICAgICB3aGlsZSAoeC0tID4gMCkgewotICAg ICAgICAgICAgaWYgKCh5ID0gY29uY2hrKCkpID4gMCkgeyAgIC8qIERpZCB0aGV5IHR5cGUgc29t ZXRoaW5nPyAqLwotICAgICAgICAgICAgICAgIHdoaWxlICh5LS0pIGNvbmluYygwKTsgIC8qIFll cywgYWJzb3JiIGl0ICovCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAg LyogQW5kIHdha2UgdXAgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNsZWVwKDEpOyAg ICAgICAgICAgICAgICAgICAvKiBObyBpbnRlcnJ1cHQsIHNsZWVwIGEgc2VjICovCi0gICAgICAg IH0KLSAgICB9IHdoaWxlICghc3VjY2Vzcyk7Ci0KLSAgZGlhbGZpbjoKLQotICAgIGlmIChjeCAh PSBYWExPT0spIHsKLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAgIGJsZWVwKChzaG9y dCkgQlBfRkFJTCk7Ci0gICAgICAgIGVsc2UgaWYgKCFxdWlldCkKLSAgICAgICAgICBibGVlcCgo c2hvcnQpIEJQX05PVEUpOwotI2lmZGVmIE9TMgotICAgICAgICBzZXRpbnQoKTsgICAgICAgICAg ICAgICAgICAgICAgIC8qIEZpeCBPUy8yIGludGVycnVwdHMgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LSAgICAgICAgaWYgKHNwYXJpdHkgPiAtMSkKLSAgICAgICAgICBwYXJpdHkgPSBzcGFyaXR5OyAg ICAgICAgICAgICAvKiBSZXN0b3JlIHBhcml0eSBpZiB3ZSBzYXZlZCBpdCAqLwotICAgICAgICBm bG93ID0gZmxvd3NhdmU7Ci0jaWZkZWYgT1MyCi0gICAgICAgIHR0cmVzKCk7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogUmVzdG9yZSBESUFMIGRldmljZSAqLwotI2VuZGlmIC8qIE9TMiAqLwot I2lmZGVmIFZNUwotICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgIC8qIFJl c3RvcmUgY29uc29sZSAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2lmZGVmIE9TMgotICAgICAgICB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBzZXNzaW9uIHRpdGxlICovCi0g ICAgICAgICAgICBjaGFyICogcCwgbmFtZVs3Ml07ICAgICAgICAgLyogaW4gd2luZG93IGxpc3Qu ICovCi0gICAgICAgICAgICBjaGFyICogcTsKLSAgICAgICAgICAgIGlmIChjeCA9PSBYWEFOU1cp IHsKLSAgICAgICAgICAgICAgICBxID0gIkluY29taW5nIGNhbGwiOwotICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoZF9uYW1lKQotICAgICAgICAgICAgICAgICAgcSA9 IGRfbmFtZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChkaWFsbnVtKQotICAgICAgICAgICAg ICAgICAgcSA9IGRpYWxudW07Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodHRuYW1lWzBdKQot ICAgICAgICAgICAgICAgICAgcSA9IHR0bmFtZTsKLSAgICAgICAgICAgICAgICBlbHNlIHEgPSAi IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHAgPSBuYW1lOwotICAgICAgICAgICAgaWYg KHN1Y2Nlc3MpIHsKLSAgICAgICAgICAgICAgICBzdHJuY3B5KG5hbWUscSw0OCk7Ci0gICAgICAg ICAgICAgICAgd2hpbGUgKCpwKSB7ICAgICAgICAgICAgLyogVXBwZXJjYXNlIGl0IGZvciBlbXBo YXNpcy4gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzbG93ZXIoKnApKQotICAgICAgICAg ICAgICAgICAgICAgICpwID0gdG91cHBlcigqcCk7Ci0gICAgICAgICAgICAgICAgICAgIHArKzsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgbmFt ZVswXSA9IE5VTCA7Ci0gICAgICAgICAgICBvczJzZXR0aXRsZSgoY2hhciAqKSBuYW1lLCBUUlVF KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLSAgICBpZiAoY3ggIT0gWFhM T09LKSB7Ci0gICAgICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgICAgICBpZiAocmVsaWFibGUg PT0gU0VUX0FVVE8pIHsgLyogSXQncyBub3QgYSByZWxpYWJsZSBjb25uZWN0aW9uLiAqLwotICAg ICAgICAgICAgICAgIHJlbGlhYmxlID0gU0VUX09GRjsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJkb2RpYWwgcmVsaWFibGUiLCIiLHJlbGlhYmxlKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfSBlbHNlIHsKLSNpZm5kZWYgTk9ISU5UUwotICAgICAgICAgICAgZXh0ZXJuIGludCBoaW50 czsKLSAgICAgICAgICAgIGlmIChoaW50cyAmJiAhcXVpZXQgJiYgZGlhbHN0YSAhPSA5KSB7IC8q IDkgPT0gVXNlciBpbnRlcnJ1cHRlZCAqLwotICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgZGlh bG1odSwgZGlhbGhuZywgZGlhbGRweTsKLSAgICAgICAgICAgICAgICBleHRlcm4gY2hhciAqIGRp YWxtc2dbXTsKLSAgICAgICAgICAgICAgICBwcmludGYoIlxuKioqKioqKioqKioqKioqKioqKioq KioqKlxuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJESUFMLWNsYXNzIGNvbW1hbmQgZmFp bGVkLlxuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJNb2RlbSB0eXBlOiAgJXNcbiIsIGdt ZG10eXAoKSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJEZXZpY2U6ICAgICAgJXNcbiIsIHR0 bmFtZSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJTcGVlZDogICAgICAgJWxkXG4iLCBzcGVl ZCk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJEaWFsIHN0YXR1czogJWQiLGRpYWxzdGEpOwot ICAgICAgICAgICAgICAgIGlmIChkaWFsc3RhIDwgMzUgJiYgZGlhbG1zZ1tkaWFsc3RhXSkKLSAg ICAgICAgICAgICAgICAgIHByaW50ZigiIFslc10iLGRpYWxtc2dbZGlhbHN0YV0pOwotICAgICAg ICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoZGlhbHN0YSA9PSBE SUFfVElNTyB8fAotICAgICAgICAgICAgICAgICAgICBkaWFsc3RhID09IERJQV9OUkRZIHx8Ci0g ICAgICAgICAgICAgICAgICAgKGRpYWxzdGEgPiAxMyAmJiBkaWFsc3RhICE9IERJQV9CVVNZICYm IGRpYWxzdGEgIT0gRElBX05PQU4pCi0gICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAg ICAgICAgICAgICBzd2l0Y2ggKGRpYWxzdGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNl IERJQV9USU1POgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAotIiAuIFNFVCBESUFM IFRJTUVPVVQgdG8gYSBncmVhdGVyIHZhbHVlIGFuZCB0cnkgYWdhaW4uXG4iCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRElBX05SU1A6Ci0gICAgICAgICAgICAgICAgICAg ICAgY2FzZSBESUFfTlJEWToKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIERJQV9OT0lOOgot ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAotIiAuIElzIHRoZSBtb2RlbSB0dXJuZWQg b24/XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigKLSIgLiBBcmUgeW91IHVzaW5nIHRoZSByaWdodCBjb21tdW5pY2F0 aW9uIHBvcnQ/XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRElBX05P RFQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCi0iIC4gSXMgdGhlIG1vZGVtIGNv bm5lY3RlZCB0byB0aGUgdGVsZXBob25lIGxpbmU/XG4iCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBp ZiAobWRtdHlwID09IG5fR0VORVJJQykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KAotIiAuIFBsZWFzZSBjaG9vc2UgYSBzcGVjaWZpYyBtb2RlbSB0eXBlIHdpdGggU0VUIE1PREVN IFRZUEUgYW5kIHRyeSBhZ2Fpbi5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAotIiAgICBTRVQgTU9ERU0gVFlQRSA/ IHRvIHNlZSB0aGUgbGlzdCBvZiBrbm93biBtb2RlbSB0eXBlcy5cbiIKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKAotIiAuIEFyZSB5b3Ugc3VyZSB5b3UgaGF2ZSBjaG9z ZW4gdGhlIGFwcHJvcHJpYXRlIG1vZGVtIHR5cGU/XG4iCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBp ZiAoc3BlZWQgPiAxOTIwMEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKLSIg LiBNYXliZSB0aGUgaW50ZXJmYWNlIHNwZWVkICglbGQpIGlzIHRvbyBmYXN0OlxuIiwgc3BlZWQK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKAotIiAgICBTRVQgU1BFRUQgdG8gYSBsb3dlciBzcGVlZCBhbmQgdHJ5IGFnYWlu LlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoCi0iICAgIFNFVCBTUEVFRCA/IHRvIHNlZSB0aGUgbGlzdCBvZiB2YWxp ZCBzcGVlZHMuXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoZGlhbGhuZykgewotICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGRpYWxtaHUpCi0gICAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigKLSIgLiBTRVQgTU9ERU0gSEFOR1VQLU1FVEhPRCBSUzIzMiBhbmQgdHJ5IGFnYWlu LlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAotIiAuIFNF VCBNT0RFTSBIQU5HVVAtTUVUSE9EIE1PREVNLUNPTU1BTkQgYW5kIHRyeSBhZ2Fpbi5cbiIKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoCi0iIC4gSWYgdGhhdCBkb2Vzbid0IHdvcmssIHRyeSBhZ2FpbiB3aXRoIFNFVCBE SUFMIEhBTkdVUCBPRkYuXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigKLSIgLiBHaXZlIGEgSEFOR1VQIG9yIFNFVCBESUFMIEhBTkdVUCBPTiBjb21tYW5kIGFuZCB0 cnkgYWdhaW4uXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIWRpYWxkcHkpCi0gICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKAotIiAuIFVzZSBTRVQgRElBTCBESVNQTEFZIE9OIHRvIHdh dGNoIHRoZSBkaWFsb2cgYmV0d2VlbiBLZXJtaXQgYW5kIG1vZGVtLlxuIgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIH0KLSNpZm5kZWYgTk9TSE9XCi0g ICAgICAgICAgICAgICAgcHJpbnRmKAotIiAuIFNIT1cgQ09NTVVOSUNBVElPTlMsIFNIT1cgTU9E RU0sIFNIT1cgRElBTCB0byBzZWUgY3VycmVudCBzZXR0aW5ncy5cbiIKLSAgICAgICAgICAgICAg ICAgICAgICAgKTsKLSNlbmRpZiAvKiBOT1NIT1cgKi8KLQotI2lmbmRlZiBOT0hFTFAKLSAgICAg ICAgICAgICAgICBwcmludGYoCi0iIC4gSEVMUCBTRVQgTU9ERU0sIEhFTFAgU0VUIERJQUwsIGFu ZCBIRUxQIERJQUwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCi0gICAgICAgICAgICAgICAgICAg ICAgICk7Ci0jZW5kaWYgLyogTk9IRUxQICovCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIoVXNl IFNFVCBISU5UUyBPRkYgdG8gc3VwcHJlc3MgZnV0dXJlIGhpbnRzLilcbiIpOwotICAgICAgICAg ICAgICAgIHByaW50ZigiKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4iKTsKLSAgICAgICAg ICAgIH0KLSNlbmRpZiAvKiBOT0hJTlRTICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu KHN1Y2Nlc3MpOwotfQotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0vKiAgRCBPIFQgWSBQIEUgIC0t ICBUeXBlIChkaXNwbGF5KSBhIGZpbGUgd2l0aCB2YXJpb3VzIG9wdGlvbnMuLi4gICovCi0KLSNp ZmRlZiBCSUdCVUZPSwotI2RlZmluZSBUWVBCVUZMIDE2Mzg0Ci0jZWxzZQotI2RlZmluZSBUWVBC VUZMIDI1NgotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0KLWludCB0eXBfbGluZXMgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAvKiBcdih0eV9sbikgKi8KLWludCB0eXBfbXRjaHMgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAvKiBcdih0eV9sbSkgKi8KLXN0YXRpYyBpbnQgdHlwX2ludCA9IDA7 ICAgICAgICAgICAgICAgICAvKiBGbGFnIGlmIFRZUEUgaW50ZXJydXB0ZWQgKi8KLQotI2lmZGVm IFVOSUNPREUKLWV4dGVybiBpbnQgZmNoYXJzZXQsIGZpbGVvcmRlciwgYnl0ZW9yZGVyLCB1Y3Nv cmRlcjsKLSNkZWZpbmUgVFlQWEJVRkwgVFlQQlVGTCtUWVBCVUZMK1RZUEJVRkwrNAotc3RhdGlj IGNoYXIgKiBtcCA9IE5VTEw7Ci1zdGF0aWMgY2hhciAqIG1idWYgPSBOVUxMOwotc3RhdGljIGxv bmcgeG4gPSAwTDsKLQotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1zdG9yZWNoYXIoY2hh ciBjKQotI2Vsc2UKLXN0b3JlY2hhcihjKSBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsKLSAgICBpZiAoIW1wKSByZXR1cm4oLTEpOwotICAgIGlmICgrK3huID4gVFlQWEJVRkwpCi0g ICAgICByZXR1cm4oLTEpOwotICAgIGRlYnVnKEYxMTEsInN0b3JlY2hhciB4biIsY2tpdG9hKChp bnQpYykseG4pOwotICAgICptcCsrID0gYzsKLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyog VU5JQ09ERSAqLwotCi1zdGF0aWMgRklMRSAqIG9mcCA9IE5VTEw7ICAgICAgICAgICAgICAgLyog Rm9yIC9PVVRQVVQ6IGZpbGUgKi8KLQotc3RhdGljIGludAotdHlwZWxpbmUoYnVmLGxlbixvdXRj cyxvZnApIGNoYXIgKiBidWY7IGludCBsZW4sIG91dGNzOyBGSUxFICogb2ZwOyB7Ci0gICAgcmVn aXN0ZXIgaW50IGk7Ci0KLSAgICBkZWJ1ZyhGMDExLCJ0eXBlbGluZSBidWYiLGJ1ZixsZW4pOwot ICAgIC8qIGRlYnVnKEYxMDEsInR5cGVsaW5lIG91dGNzIiwiIixvdXRjcyk7ICovCi0KLSNpZmRl ZiBPUzIKLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIFVOSUNPREUKLSAgICAvKiBJbiBLOTUgb25s eSwgdGhlIGJ1ZmZlciBpcyBndWFyYW50ZWVkIHRvIGJlIGluIFVDUy0yIGlmIG91dGNzID49IDAu ICovCi0gICAgLyogTGVuIGlzIGl0cyBsZW5ndGggaW4gYnl0ZXMuICBUaGVyZSBpcyBubyBsaW5l IHRlcm1pbmF0b3IuICovCi0gICAgLyogb3V0Y3MgaXMgdGhlIGZpbGUgY2hhcmFjdGVyLXNldCBu dW1iZXIgKEZDX3h4eCkgb2YgdGhlIHRhcmdldCBzZXQgKi8KLSAgICAvKiB0aGF0IHdhcyByZXF1 ZXN0ZWQgYnkgdGhlIHVzZXIuICovCi0gICAgaWYgKCFpbnNlcnZlciAmJiAhazk1c3Rkb3V0KSB7 Ci0gICAgICAgIGV4dGVybiBpbnQgd2hlcmV4W10sIHdoZXJleVtdOwotICAgICAgICBleHRlcm4g dW5zaWduZWQgY2hhciBjb2xvcmNtZDsKLQotICAgICAgICBWc2NybldydFVDUzJTdHJBdHQoIFZD TUQsICh1bnNpZ25lZCBzaG9ydCAqKWJ1ZiwgbGVuLzIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICB3aGVyZXlbVkNNRF0sIHdoZXJleFtWQ01EXSwgJmNvbG9yY21kKTsKLSAgICAgICAgcHJp bnRmKCJcclxuIik7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogVU5JQ09E RSAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotLyogSW4gVW5p eCwgVk1TLCBldGMsIHRoZSBsaW5lIGhhcyBhbHJlYWR5IGJlZW4gY29udmVydGVkIHRvIHRoZSBk ZXNpcmVkICAqLwotLyogY2hhcmFjdGVyLXNldCwgaWYgb25lIHdhcyBnaXZlbi4gIE9SLi4uIG9u IGFsbCBwbGF0Zm9ybXMsIGluY2x1ZGluZyBpbiAqLwotLyogSzk1LCB3ZSBkb24ndCBrbm93IHRo ZSBjaGFyYWN0ZXIgc2V0LiAgSW4gZWl0aGVyIGNhc2Ugd2UgZHVtcCB0aGUgbGluZSAqLwotLyog Ynl0ZSBieSBieXRlIGluIGNhc2UgaXQgY29udGFpbnMgTlVMcyAocHJpbnRmKCkgd291bGQgdHJ1 bmNhdGUpLiAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkr KykKLSAgICAgIHB1dGNoYXIoYnVmW2ldKTsKLSNlbHNlCi0gICAgZm9yIChpID0gMDsgaSA8IGxl bjsgaSsrKSB7Ci0gICAgICAgIGlmIChvZnAgPT0gc3Rkb3V0KSB7Ci0gICAgICAgICAgICBwdXRj aGFyKGJ1ZltpXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXRjKGJ1ZltpXSxv ZnApOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIElL U0QKLSAgICBpZiAoaW5zZXJ2ZXIpIHsKLSNpZmRlZiBVTklDT0RFCi0gICAgICAgIGlmIChvdXRj cyA9PSBGQ19VQ1MyKSB7Ci0gICAgICAgICAgICBpZiAob2ZwID09IHN0ZG91dCkgewotICAgICAg ICAgICAgICAgIHB1dGNoYXIoTlVMKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgcHV0YyhOVUwsb2ZwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8q IFVOSUNPREUgKi8KLSAgICAgICAgaWYgKG9mcCA9PSBzdGRvdXQpIHsKLSAgICAgICAgICAgIHB1 dGNoYXIoJ1xyJyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXRjKCdccicsb2Zw KTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgVU5JQ09ERQot ICAgIGlmIChvdXRjcyA9PSBGQ19VQ1MyKSB7Ci0gICAgICAgIGlmIChvZnAgPT0gc3Rkb3V0KSB7 Ci0gICAgICAgICAgICBwdXRjaGFyKE5VTCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICBwdXRjKE5VTCxvZnApOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIFVOSUNPREUgKi8K LSAgICBpZiAob2ZwID09IHN0ZG91dCkgewotICAgICAgICBwdXRjaGFyKCdcbicpOwotICAgIH0g ZWxzZSB7Ci0gICAgICAgIHB1dGMoJ1xuJyxvZnApOwotICAgIH0KLSAgICBmZmx1c2goc3Rkb3V0 KTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLXN0YXRpYyBpbnQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBHZXQgdHJhbnNsYXRlZCBsaW5lICovCi10eXBlZ2V0bGluZShpbmNzLCBvdXRj cywgYnVmLCBuKSBpbnQgaW5jcywgb3V0Y3MsIG47IGNoYXIgKiBidWY7IHsKLSAgICBpbnQgeCA9 IDAsIGMwLCBjMSwgbGVuID0gMCwgY291bnQgPSAwLCBlb2YgPSAwLCB4bGF0ZSA9IDA7Ci0jaWZk ZWYgVU5JQ09ERQotICAgIGludCB4eG4gPSAtMTsKLSAgICBpbnQgeXluID0gLTk7Ci0gICAgeG4g PSAwTDsKLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyAmJiB0eXBfbGluZXMgPT0gMCkg ewotICAgICAgICBkZWJ1ZyhGMTAxLCJ0eXBlZ2V0bGluZSBpbmNzIiwiIixpbmNzKTsKLSAgICAg ICAgZGVidWcoRjEwMSwidHlwZWdldGxpbmUgb3V0Y3MiLCIiLG91dGNzKTsKLSAgICAgICAgZGVi dWcoRjEwMSwidHlwZWdldGxpbmUgZmVvbCIsIiIsZmVvbCk7Ci0gICAgICAgIGRlYnVnKEYxMDEs InR5cGVnZXRsaW5lIGJ5dGVvcmRlciIsIiIsYnl0ZW9yZGVyKTsKLSAgICAgICAgZGVidWcoRjEw MSwidHlwZWdldGxpbmUgdWNzb3JkZXIgIiwiIix1Y3NvcmRlcik7Ci0gICAgICAgIGRlYnVnKEYx MTEsInR5cGVnZXRsaW5lIGZpbGVvcmRlciIsIjEiLGZpbGVvcmRlcik7Ci0gICAgfQotI2VuZGlm IC8qIERFQlVHICovCi0KLSAgICBpZiAoaW5jcyA8IDApICAgICAgICAgICAgICAgICAgICAgICAv KiBTaG91bGRuJ3QgaGFwcGVuICovCi0gICAgICByZXR1cm4oLTIpOwotCi0gICAgaWYgKG91dGNz ID09IC0xKSAgICAgICAgICAgICAgICAgICAgLyogQ2FuIGhhcHBlbiAqLwotICAgICAgb3V0Y3Mg PSBpbmNzOwotCi0gICAgaWYgKGluY3MgIT0gb3V0Y3MgfHwgaW5jcyA9PSBGQ19VQ1MyKSB7IC8q IFNlZSBpZiB3ZSBzaG91bGQgdHJhbnNsYXRlICovCi0gICAgICAgIHhsYXRlID0gMTsKLSAgICAg ICAgaWYgKCFtYnVmKSB7ICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBidWZmZXIgaWYg bm90IGFsbG9jYXRlZCAqLwotICAgICAgICAgICAgbWJ1ZiA9IChjaGFyICopbWFsbG9jKFRZUFhC VUZMKzEpOyAvKiB5ZXQgKi8KLSAgICAgICAgICAgIGlmICghbWJ1ZikgewotICAgICAgICAgICAg ICAgIHByaW50ZigiV0FSTklORzogVHJhbnNsYXRpb24gYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVy ZS5cbiIpOwotICAgICAgICAgICAgICAgIHByaW50ZigiVHJhbnNsYXRpb24gd2lsbCBiZSBza2lw cGVkLi4uXG4iKTsKLSAgICAgICAgICAgICAgICB4bGF0ZSA9IDA7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHhsYXRlKSB7ICAgICAgICAgICAgICAgICAgICAgICAg LyogVHJhbnNsYXRpbmcuLi4gKi8KLSAgICAgICAgbXAgPSBtYnVmOyAgICAgICAgICAgICAgICAg ICAgICAvKiBSZXNldCB3b3JraW5nIGJ1ZmZlciBwb2ludGVyICovCi0vKgotICBIZXJlIHdlIGNh bGwgeGduYnl0ZSgpIGluIGEgbG9vcCwgaGF2aW5nIGl0IHJldHVybiBVQ1MtMiBieXRlcy4gIElu IEs5NSwgd2UKLSAgdXNlIFVDUy0yIGRpcmVjdGx5LiAgRWxzZXdoZXJlLCB3ZSBmZWVkIHRoZSBV Q1MtMiBieXRlcyBpbnRvIHhwbmJ5dGUoKSB0bwotICBjb252ZXJ0IHRoZW0gdG8gdGhlIGRlc2ly ZWQgdGFyZ2V0IGNoYXJhY3RlciBzZXQuICBCdXQgc2luY2Ugd2UgYXJlIHVzaW5nCi0gIFVDUy0y LCB3ZSBoYXZlIHNldmVyYWwgc291cmNlcyBmb3IgY29uZnVzaW9uOiAoMSkgeGduYnl0ZSgpIG1p Z2h0IHJldHVybiBpbgotICBMRSBvciBCRSBieXRlIG9yZGVyLCB3aXRoIG5vIGV4cGxpY2l0IGlu ZGljYXRpb24gb2Ygd2hhdCB0aGUgb3JkZXIgaXM7IGJ1dAotICAoMikgeHBuYnl0ZSgpIHdhbnRz IEJFOyBidXQgKDMpIFdpbmRvd3Mgd2FudHMgTEUuCi0qLwotICAgICAgICB3aGlsZSAoMSkgewot ICAgICAgICAgICAgaWYgKHR5cF9pbnQpICAgICAgICAgICAgICAgIC8qIFF1aXQgaWYgaW50ZXJy dXB0ZWQgKi8KLSAgICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgYzAgPSB4Z25i eXRlKEZDX1VDUzIsaW5jcyxOVUxMKTsgLyogQ29udmVydCB0byBVQ1MtMiAqLwotICAgICAgICAg ICAgZGVidWcoRjAwMCwidHlwZWdldGxpbmUgYzAiLCIiLGMwKTsKLSAgICAgICAgICAgIGlmIChj MCA8IDApIHsgICAgICAgICAgICAgICAvKiBFT0YgKi8KLSAgICAgICAgICAgICAgICBlb2YrKzsK LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGMxID0g eGduYnl0ZShGQ19VQ1MyLGluY3MsTlVMTCk7IC8qIENvbnZlcnQgdG8gVUNTLTIgKi8KLSAgICAg ICAgICAgIGRlYnVnKEYwMDAsInR5cGVnZXRsaW5lIGMxIiwiIixjMSk7Ci0gICAgICAgICAgICBp ZiAoYzEgPCAwKSB7ICAgICAgICAgICAgICAgLyogRU9GICovCi0gICAgICAgICAgICAgICAgZW9m Kys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0jaWZkZWYgREVCVUcK LSAgICAgICAgICAgIGlmIChkZWJsb2cgJiYgdHlwX2xpbmVzID09IDApIHsKLSAgICAgICAgICAg ICAgICBpZiAoY291bnQgPT0gMCkgLyogQ2hlY2sgZmlsZW9yZGVyIGFmdGVyIEJPTSAqLwotICAg ICAgICAgICAgICAgICAgZGVidWcoRjExMSwidHlwZWdldGxpbmUgZmlsZW9yZGVyIiwiMiIsZmls ZW9yZGVyKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgQ09N TUVOVAotLyogTm93IHdlIGhhdmUgdGhlIHR3byBVQ1MtMiBieXRlcy4gIFdoaWNoIG9yZGVyIGFy ZSB0aGV5IGluPyAqLwotCi0gICAgICAgICAgICBpZiAoZmlsZW9yZGVyID4gMCkgeyAgICAgICAg LyogTGl0dGxlIEVuZGlhbiAqLwotICAgICAgICAgICAgICAgIGludCB0OyAgICAgICAgICAgICAg ICAgIC8qIFNvIHN3YXAgdGhlbSAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR5cGVn ZXRsaW5lIHN3YXBwaW5nIiwiIiwwKTsKLSAgICAgICAgICAgICAgICB0ID0gYzE7Ci0gICAgICAg ICAgICAgICAgYzEgPSBjMDsKLSAgICAgICAgICAgICAgICBjMCA9IHQ7Ci0gICAgICAgICAgICB9 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgaWYgKGMwID09IDAgJiYgYzEgPT0g MHgwRCkgIC8qIE5vdyBzZWUgaWYgd2UgaGF2ZSBFT0wgKi8KLSAgICAgICAgICAgICAgeXluID0g eG47Ci0KLSAgICAgICAgICAgIGlmIChjMCA9PSAwICYmIGMxID09IDB4MEEpICAvKiBOb3cgc2Vl IGlmIHdlIGhhdmUgRU9MICovCi0gICAgICAgICAgICAgIHh4biA9IHhuOwotCi0gICAgICAgICAg ICBjb3VudCsrOyAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgYnl0ZSAqLwotCi0vKiBHaXZl IHRoZSB0d28gYnl0ZXMgdG8geHBuYnl0ZSgpIGluIEJFIG9yZGVyICovCi0KLSAgICAgICAgICAg IGlmICgoeCA9IHhwbmJ5dGUoYzAsVENfVUNTMixvdXRjcyxzdG9yZWNoYXIpKSA8IDApIHJldHVy bigtMSk7Ci0gICAgICAgICAgICBpZiAoKHggPSB4cG5ieXRlKGMxLFRDX1VDUzIsb3V0Y3Msc3Rv cmVjaGFyKSkgPCAwKSByZXR1cm4oLTEpOwotCi0gICAgICAgICAgICBpZiAoeHhuID4gLTEpIHsg ICAgICAgICAgICAgLyogSGF2ZSBlbmQgb2YgbGluZT8gKi8KLSAgICAgICAgICAgICAgICB4biA9 IHh4bjsKLSAgICAgICAgICAgICAgICBpZiAoeXluID09IHh4biAtIDIpICAgICAvKiBBZGp1c3Qg Zm9yIENSTEYgKi8KLSAgICAgICAgICAgICAgICAgIHhuID0geXluOwotICAgICAgICAgICAgICAg IGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIEFuZCBicmVhayBvdXQgb2YgbG9vcC4gKi8KLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtYnVmW3huXSA9IE5VTDsKLSAgICAgICAg aWYgKHhuID4gbikgICAgICAgICAgICAgICAgICAgICAvKiBDYW4gdHJ1bmNhdGUgaGVyZS4uLiAq LwotICAgICAgICAgIHhuID0gbjsKLSAgICAgICAgbWVtY3B5KGJ1ZixtYnVmLHhuKTsKLSAgICAg ICAgZGVidWcoRjAxMSwidHlwZWdldGxpbmUgeGxhdGUiLGJ1Zix4bik7Ci0gICAgICAgIHJldHVy bigoZW9mICYmICh4biA9PSAwKSkgPyAtMSA6IHhuKTsKLSAgICB9Ci0jZW5kaWYgLyogVU5JQ09E RSAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBXZSBjYW4ndCB1c2UgdGhpcyBiZWNhdXNlLCBz dHVwaWRseSwgenNpbmwoKSBkb2Vzbid0IHJldHVybiBhIGxlbmd0aC4gKi8KLSAgICAvKiBJdCBj b3VsZCBiZSBjaGFuZ2VkIGJ1dCB0aGVuIHdlJ2QgaGF2ZSB0byBjaGFuZ2UgYWxsIGNrP2Zpby5j IG1vZHVsZXMgKi8KLSAgICB4ID0genNpbmwoWklGSUxFLGJ1ZixuKTsKLSNlbHNlCi0gICAgLyog U28gaW5zdGVhZCwgd2UgY29weSB6c2lubCgpIHRvIGhlcmUuLi4gKi8KLSAgICAvKiBCdXQgbm90 ZTogVGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBoYW5kbGUgVUNTLTIgYWxpZ25tZW50IHByb3Bl cmx5OyAgKi8KLSAgICAvKiB0aGF0J3Mgd2hhdCB0aGUgY29kZSBpbiB0aGUgZmlyc3Qgc2VjdGlv biBvZiB0aGlzIHJvdXRpbmUgaXMgZm9yLiAqLwotICAgIC8qIEJ1dCBpdCBkb2VzIHRvbGVyYXRl IGZpbGVzIHRoYXQgY29udGFpbiBOVUxzLiAqLwotICAgIHsKLSAgICAgICAgaW50IGE7Ci0gICAg ICAgIGNoYXIgKnM7Ci0KLSAgICAgICAgcyA9IGJ1ZjsKLSAgICAgICAgYSA9IC0xOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IGNoYXJhY3Rlciwgbm9uZSB5ZXQuICovCi0gICAg ICAgIGRlYnVnKEYxMDEsInR5cGVnZXRsaW5lIHpzaW5sIHNpbXVsYXRpb24iLCIiLG4pOwotICAg ICAgICB3aGlsZSAobi0tKSB7ICAgICAgICAgICAgICAgICAgIC8qIFVwIHRvIGdpdmVuIGxlbmd0 aCAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIGludCBvbGQgPSAwOwotICAgICAgICAg ICAgaWYgKGZlb2wpICAgICAgICAgICAgICAgICAgIC8qIFByZXZpb3VzIGNoYXJhY3RlciAqLwot ICAgICAgICAgICAgICBvbGQgPSBhOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAg IGlmICh6Y2hpbihaSUZJTEUsJmEpIDwgMCkgeyAvKiBSZWFkIGEgY2hhcmFjdGVyIGZyb20gdGhl IGZpbGUgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0eXBlZ2V0bGluZSB6Y2hpbiBm YWlsIiwiIixjb3VudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IDApCi0gICAgICAg ICAgICAgICAgICB4ID0gLTE7ICAgICAgICAgICAgICAgLyogRU9GIG9yIG90aGVyIGVycm9yICov Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg ICAgY291bnQrKzsKLSAgICAgICAgICAgIGlmIChmZW9sKSB7ICAgICAgICAgICAgICAgICAvKiBT aW5nbGUtY2hhcmFjdGVyIGxpbmUgdGVybWluYXRvciAqLwotICAgICAgICAgICAgICAgIGlmIChh ID09IGZlb2wpCi0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgICAgICAvKiBDUkxGIGxpbmUgdGVybWluYXRvciAqLwotI2lmZGVmIENP TU1FTlQKLS8qIERlYnVnIGxvZyBzaG93cyB0aGF0IGluIFdpbmRvd3MsIDxDUj48TEY+IGlzIHJl dHVybmVkIGFzIDxMRj4uICovCi0vKiBBcHBhcmVudGx5IHdlJ3JlIG5vdCByZWFkaW5nIHRoZSBm aWxlIGluIGJpbmFyeSBtb2RlLiAqLwotCi0gICAgICAgICAgICAgICAgaWYgKGEgPT0gJ1wwMTUn KSAgICAgICAgLyogQ1IsIGdldCBuZXh0IGNoYXJhY3RlciAqLwotICAgICAgICAgICAgICAgICAg Y29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZCA9PSAnXDAxNScpIHsgICAgLyogUHJl dmlvdXMgY2hhcmFjdGVyIHdhcyBDUiAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoYSA9PSAn XDAxMicpIHsgIC8qIFRoaXMgb25lIGlzIExGLCBzbyB3ZSBoYXZlIGEgbGluZSAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAg ICAgICAgICAgLyogTm90IExGLCBkZXBvc2l0IENSICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAqcysrID0gJ1wwMTUnOwotICAgICAgICAgICAgICAgICAgICAgICAgbi0tOwotICAgICAgICAg ICAgICAgICAgICAgICAgbGVuKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIGlmIChhID09IExGKSB7Ci0gICAgICAgICAg ICAgICAgICAgIGlmIChzW2xlbl0gPT0gQ1IpIHsgLyogVGhpcyBwcm9iYWJseSB3b24ndCBoYXBw ZW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHNbbGVuXSA9IE5VTDsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHMtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbi0tOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAq cyA9IGE7ICAgICAgICAgICAgICAgICAgICAgLyogRGVwb3NpdCBjaGFyYWN0ZXIgKi8KLSAgICAg ICAgICAgIHMrKzsKLSAgICAgICAgICAgIGxlbisrOwotICAgICAgICB9Ci0gICAgICAgICpzID0g J1wwJzsgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlIHRoZSBzdHJpbmcgKi8KLSAg ICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHJldHVybih4IDwgMCA/IC0xIDogbGVuKTsK LX0KLQotCi0jaWZuZGVmIE1BQwotU0lHVFlQCi0jaWZkZWYgQ0tfQU5TSUMKLXR5dHJhcChpbnQg Zm9vKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUWVBFIGludGVycnVwdCB0cmFwICovCi0j ZWxzZQotdHl0cmFwKGZvbykgaW50IGZvbzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdHl0 cmFwICovIHsKLSNpZmRlZiBfX0VNWF9fCi0gICAgc2lnbmFsKFNJR0lOVCwgU0lHX0FDSyk7Ci0j ZW5kaWYKLSAgICBkZWJ1ZyhGMTAwLCJ0eXBlIHR5dHJhcCBTSUdJTlQiLCIiLDApOwotICAgIHR5 cF9pbnQgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIChOZWVkIGFyZyBmb3IgQU5TSSBD KSAqLwotICAgIFNJR1JFVFVSTjsKLX0KLSNlbmRpZiAvKiBNQUMgKi8KLQotaW50Ci1kb3R5cGUo ZmlsZSwgcGFnaW5nLCBmaXJzdCwgaGVhZCwgcGF0LCB3aWR0aCwgcHJlZml4LCBpbmNzLCBvdXRj cywgb3V0ZmlsZSwgeikKLSAgICBjaGFyICogZmlsZSwgKiBwYXQsICogcHJlZml4OyBpbnQgcGFn aW5nLCBmaXJzdCwgaGVhZCwgd2lkdGgsIGluY3MsIG91dGNzOwotICAgIGNoYXIgKiBvdXRmaWxl OyBpbnQgejsKLS8qIGRvdHlwZSAqLyB7Ci0gICAgZXh0ZXJuIENLX09GRl9UIGZmYzsKLSAgICBj aGFyIGJ1ZltUWVBCVUZMKzJdOwotICAgIGNoYXIgKiBzID0gTlVMTDsKLSAgICBpbnQgcmMgPSAx LCBsaW5lcyA9IDAsIHVjczIgPSAwOwotICAgIGNoYXIgKiogdGFpbCA9IE5VTEw7Ci0gICAgaW50 ICogdGxlbiA9IE5VTEw7Ci0gICAgaW50IHRhaWxpbmcgPSAwLCBjb3VudGluZyA9IDA7Ci0gICAg aW50IHgsIGMsIG4sIGksIGosIGsgPSAwOwotICAgIGludCBudW1iZXIgPSAwLCBzYXZlLCBsZW4s IHBmeGxlbiA9IDAsIGV2YWxwZnggPSAxOwotI2lmZGVmIFVOSUNPREUKLSAgICBpbnQgdWNzYm9t X3NhdjsKLSAgICBleHRlcm4gaW50IHVjc2JvbTsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0jaWZk ZWYgTlQKLSAgICBpbnQgZ3VpID0gMDsKLSNlbmRpZiAvKiBOVCAqLwotCi0jaWZuZGVmIE1BQwot I2lmZGVmIE9TMgotI2lmZGVmIE5UCi0gICAgU0lHVFlQICgqIG9sZHNpZykoaW50KTsgICAgICAg ICAgICAgLyogRm9yIHNhdmluZyBvbGQgaW50ZXJydXB0IHRyYXAuICovCi0jZWxzZSAvKiBOVCAq LwotICAgIFNJR1RZUCAoKiB2b2xhdGlsZSBvbGRzaWcpKGludCk7Ci0jZW5kaWYgLyogTlQgKi8K LSNlbHNlIC8qIE9TMiAqLwotICAgIFNJR1RZUCAoKiBvbGRzaWcpKCk7Ci0jZW5kaWYgLyogT1My ICovCi0jZW5kaWYgLyogTUFDICovCi0KLSNpZmRlZiBLVUkKLSAgICBpZiAob3V0ZmlsZSA9PSAo Y2hhciAqKTEpIHsKLSAgICAgICAgZ3VpID0gMTsKLSAgICAgICAgb3V0ZmlsZSA9ICIiOwotICAg IH0KLSNlbmRpZiAvKiBLVUkgKi8KLQotICAgIGlmICghZmlsZSkgZmlsZSA9ICIiOwotICAgIGlm ICghKmZpbGUpIHJldHVybigtMik7Ci0KLSAgICBpZiAob2ZwICE9IHN0ZG91dCkgeyAgICAgICAg ICAgICAgICAvKiBJbiBjYXNlIG9mIHByZXZpb3VzIGludGVycnVwdGlvbiAqLwotICAgICAgICBp ZiAob2ZwKSBmY2xvc2Uob2ZwKTsKLSAgICAgICAgb2ZwID0gc3Rkb3V0OwotICAgIH0KLSAgICBp ZiAoIW91dGZpbGUpIG91dGZpbGUgPSAiIjsKLSAgICBpZiAob3V0ZmlsZVswXSkgewotICAgICAg ICBvZnAgPSBmb3BlbihvdXRmaWxlLCJ3Iik7ICAgICAgIC8qIE9wZW4gb3V0cHV0IGZpbGUgKi8K LSAgICAgICAgaWYgKCFvZnApIHsKLSAgICAgICAgICAgIHByaW50ZigiP0Nhbid0IG9wZW4gb3V0 cHV0IGZpbGUgJXM6ICVzXG4iLG91dGZpbGUsY2tfZXJyc3RyKCkpOwotICAgICAgICAgICAgb2Zw ID0gc3Rkb3V0OwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgIH0KLSAg ICBudW1iZXIgPSB6OwotICAgIGlmIChudW1iZXIgJiYgcHJlZml4KSBwcmVmaXggPSBOVUxMOwot Ci0jaWZkZWYgVU5JQ09ERQotICAgIHVjc2JvbV9zYXYgPSB1Y3Nib207ICAgICAgICAgICAgICAg IC8qIFdlIGFyZSBub3QgY3JlYXRpbmcgYSBmaWxlICovCi0gICAgdWNzYm9tID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogRG8gbm90IHVzZSBCT00gYnl0ZXMgKi8KLSNlbmRpZiAvKiBV TklDT0RFICovCi0KLSAgICB0eXBfaW50ID0gMDsKLQotICAgIHNhdmUgPSBiaW5hcnk7ICAgICAg ICAgICAgICAgICAgICAgIC8qIFNhdmUgZmlsZSB0eXBlICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJk b3R5cGUgaW5jcyIsIiIsaW5jcyk7Ci0gICAgZGVidWcoRjEwMSwiZG90eXBlIG91dGNzIiwiIixv dXRjcyk7Ci0KLSNpZmRlZiBVTklDT0RFCi0gICAgZGVidWcoRjExMSwiZG90eXBlIGZpbGVvcmRl ciIsIkEiLGZpbGVvcmRlcik7Ci0jaWZkZWYgT1MyCi0gICAgaWYgKCFpbnNlcnZlciAmJiAhazk1 c3Rkb3V0KQotICAgICAgb3V0Y3MgPSBGQ19VQ1MyOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAg aWYgKG91dGNzID09IEZDX1VDUzIpICAgICAgICAgICAgICAgLyogT3V0cHV0IGlzIFVDUy0yPyAq LwotICAgICAgdWNzMiA9IDE7Ci0gICAgaWYgKGZpbGVvcmRlciA8IDApCi0gICAgICBmaWxlb3Jk ZXIgPSB1Y3NvcmRlcjsKLSAgICBkZWJ1ZyhGMTExLCJkb3R5cGUgZmlsZW9yZGVyIiwiQiIsZmls ZW9yZGVyKTsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSNpZmRlZiBDS19UVEdXU0laCi0jaWZk ZWYgT1MyCi0gICAgdHRnY3dzeigpOwotI2Vsc2UgLyogT1MyICovCi0gICAgLyogQ2hlY2sgd2hl dGhlciB3aW5kb3cgc2l6ZSBjaGFuZ2VkICovCi0gICAgaWYgKHR0Z3dzaXooKSA+IDApIHsKLSAg ICAgICAgaWYgKHR0X3Jvd3MgPiAwICYmIHR0X2NvbHMgPiAwKSB7Ci0gICAgICAgICAgICBjbWRf cm93cyA9IHR0X3Jvd3M7Ci0gICAgICAgICAgICBjbWRfY29scyA9IHR0X2NvbHM7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJkb3R5cGUgY21kX3Jvd3MiLCIiLGNtZF9yb3dzKTsKLSAgICAgICAg ICAgIGRlYnVnKEYxMDEsImRvdHlwZSBjbWRfY29scyIsIiIsY21kX2NvbHMpOwotICAgICAgICB9 Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLQotICAg IGlmIChwcmVmaXgpCi0gICAgICBwZnhsZW4gPSBzdHJsZW4ocHJlZml4KTsKLQotICAgIGlmIChw YWdpbmcgPCAwKSB7ICAgICAgICAgICAgICAgICAgIC8qIENvdW50IG9ubHksIGRvbid0IHByaW50 ICovCi0gICAgICAgIGNvdW50aW5nID0gMTsKLSAgICAgICAgcHJlZml4ID0gTlVMTDsKLSAgICAg ICAgd2lkdGggPSAwOwotICAgICAgICBwYWdpbmcgPSAwOwotICAgIH0KLSAgICBpZiAodWNzMikg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDcnVkZS4uLiAqLwotICAgICAgd2lkdGggKj0g MjsKLQotI2lmZGVmIE9TMgotICAgIGlmICgqZmlsZSkgewotICAgICAgICBja3N0cm5jcHkoYnVm LCBmaWxlLCBUWVBCVUZMKTsgIC8qIENoYW5nZSAvIHRvIFwuICovCi0gICAgICAgIHAgPSBidWY7 Ci0gICAgICAgIHdoaWxlICgqcCkgewotICAgICAgICAgICAgaWYgKCpwID09ICcvJykgKnAgPSAn XFwnOwotICAgICAgICAgICAgcCsrOwotICAgICAgICB9Ci0gICAgICAgIGZpbGUgPSBidWY7Ci0g ICAgfSBlbHNlIHsKLSAgICAgICAgcmMgPSAwOwotICAgICAgICBnb3RvIHhkb3R5cGU7Ci0gICAg fQotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKHpjaGtpKGZpbGUpID09IC0yKSB7ICAgICAg ICAgICAgLyogSXQncyBhIGRpcmVjdG9yeSAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJkb3R5cGUg emNoa2kgZmFpbHVyZSIsZmlsZSwtMik7Ci0gICAgICAgIGlmICh4Y21kc3JjID09IDApIHsKLSAg ICAgICAgICAgIHByaW50ZigiP05vdCBhIHJlZ3VsYXIgZmlsZTogXCIlc1wiXG4iLGZpbGUpOwot ICAgICAgICAgICAgcmMgPSAtOTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgcmMgPSAwOwot ICAgICAgICBnb3RvIHhkb3R5cGU7Ci0gICAgfQotICAgIGlmICghem9wZW5pKFpJRklMRSwgZmls ZSkpIHsgICAgICAgIC8qIE5vdCBhIGRpcmVjdG9yeSwgb3BlbiBpdCAqLwotICAgICAgICBkZWJ1 ZyhGMTExLCJkb3R5cGUgem9wZW5pIGZhaWx1cmUiLGZpbGUsMCk7Ci0gICAgICAgIGlmICh4Y21k c3JjID09IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiP0Nhbid0IG9wZW4gZmlsZTogXCIlc1wi XG4iLGZpbGUpOwotICAgICAgICAgICAgcmMgPSAtOTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg ICAgcmMgPSAwOwotICAgICAgICBnb3RvIHhkb3R5cGU7Ci0gICAgfQotCi0jaWZuZGVmIEFNSUdB Ci0jaWZuZGVmIE1BQwotICAgIGVycm5vID0gMDsKLSAgICBvbGRzaWcgPSBzaWduYWwoU0lHSU5U LCB0eXRyYXApOyAgICAvKiBTYXZlIGN1cnJlbnQgaW50ZXJydXB0IHRyYXAuICovCi0gICAgLyog ZGVidWcoRjExMSwidHlwZSBTSUdJTlQgdHJhcCBzZXQiLGNraXRvYShlcnJubyksb2xkc2lnKTsg Ki8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBBTUlHQSAqLwotCi0gICAgaWYgKHBhZ2lu ZyA+IC0xKSAgICAgICAgICAgICAgICAgICAgLyogTW9yZS1wcm9tcHRpbmcgKi8KLSAgICAgIHhh c2ttb3JlID0gcGFnaW5nOwotCi0gICAgYmluYXJ5ID0gMDsKLQotICAgIGlmIChoZWFkIDwgMCkg eyAgICAgICAgICAgICAgICAgICAgIC8qICJ0YWlsIiB3YXMgcmVxdWVzdGVkICovCi0gICAgICAg IHRhaWxpbmcgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogU2V0IGZsYWcgKi8KLSAgICAgICAg aGVhZCA9IDAgLSBoZWFkOyAgICAgICAgICAgICAgICAvKiBHZXQgYWJzb2x1dGUgbnVtYmVyIG9m IGxpbmVzICovCi0gICAgICAgIGlmICghY291bnRpbmcpIHsKLSAgICAgICAgICAgIHRhaWwgPSAo Y2hhciAqKikgbWFsbG9jKGhlYWQgKiBzaXplb2YoY2hhciAqKSk7IC8qIEFsbG9jYXRlIGxpc3Qg Ki8KLSAgICAgICAgICAgIGlmICghdGFpbCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP01l bW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOwotICAgICAgICAgICAgICAgIGdvdG8geGRvdHlw ZTsKLQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGxlbiA9IChpbnQgKikgbWFsbG9jKGhl YWQgKiBzaXplb2YoaW50KSk7Ci0gICAgICAgICAgICBpZiAoIXRsZW4pIHsKLSAgICAgICAgICAg ICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKLSAgICAgICAgICAg ICAgICBnb3RvIHhkb3R5cGU7Ci0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBoZWFkOyBpKyspIHsgLyogSW5pdGlhbGl6ZSBlYWNoIHBvaW50ZXIgaW4gbGlzdC4g Ki8KLSAgICAgICAgICAgICAgICB0YWlsW2ldID0gTlVMTDsKLSAgICAgICAgICAgICAgICB0bGVu W2ldID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICB0eXBfbGluZXMg PSAwOwotICAgIHR5cF9tdGNocyA9IDA7Ci0KLSNpZmRlZiBVTklDT0RFCi0gICAgaWYgKG91dGNz ID4gLTEgJiYgKGluY3MgIT0gb3V0Y3MgfHwgaW5jcyA9PSBGQ19VQ1MyKSkgeyAvKiBUcmFuc2xh dGluZz8gKi8KLSAgICAgICAgZmZjID0gKENLX09GRl9UKTA7Ci0gICAgICAgIGluaXR4bGF0ZShp bmNzLG91dGNzKTsgICAgICAgICAgLyogU2V0IHVwIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyAqLwot ICAgIH0gZWxzZQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICAgIG91dGNzID0gLTE7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBNZWFucyB3ZSBkb24ndCBrbm93IHRoZSBjaGFyc2V0ICovCi0K LSAgICBkZWJ1ZyhGMTAxLCJkb3R5cGUgZmZjIiwiIixmZmMpOwotICAgIGRlYnVnKEYxMDEsImRv dHlwZSBvdXRjcyAyIiwiIixvdXRjcyk7Ci0jaWZkZWYgVU5JQ09ERQotICAgIGRlYnVnKEYxMTEs ImRvdHlwZSBmaWxlb3JkZXIiLCJDIixmaWxlb3JkZXIpOwotI2VuZGlmIC8qIFVOSUNPREUgKi8K LQotICAgIC8qIEFsbG93IHRoZSBidWZmZXIgdG8gY29udGFpbiBOVUxzICovCi0KLSAgICBmb3Ig KG4gPSBmaXJzdDsKLSAgICAgICAgIChsZW4gPSB0eXBlZ2V0bGluZShpbmNzLG91dGNzLGJ1ZixU WVBCVUZMKSkgPiAtMTsKLSAgICAgICAgIGxpbmVzKysKLSAgICAgICAgICkgewotICAgICAgICBk ZWJ1ZyhGMDExLCJkb3R5cGUgbGluZSIsYnVmLGxlbik7Ci0jaWZuZGVmIE1BQwotICAgICAgICBp ZiAodHlwX2ludCkgeyAgICAgICAgICAgICAgICAgIC8qIEludGVycnVwdGVkPyAqLwotICAgICAg ICAgICAgdHlwX2ludCA9IDA7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0eXBlIGludGVycnVw dGVkIGxpbmUiLCIiLGxpbmVzKTsKLSAgICAgICAgICAgIHByaW50ZigiXkMuLi5cbiIpOyAgICAg ICAgICAvKiBQcmludCBtZXNzYWdlICovCi0gICAgICAgICAgICBpZiAob2ZwICE9IHN0ZG91dCkg eyAgICAgICAgLyogQ2xvc2UgYW55IG91dHB1dCBmaWxlICovCi0gICAgICAgICAgICAgICAgaWYg KG9mcCkgZmNsb3NlKG9mcCk7Ci0gICAgICAgICAgICAgICAgb2ZwID0gc3Rkb3V0OwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgZ290byB4eGRvdHlwZTsKLSAgICAgICAgfQotI2VuZGlmIC8q IE1BQyAqLwotICAgICAgICB0eXBfbGluZXMrKzsgICAgICAgICAgICAgICAgICAgIC8qIEZvciBc dih0eV9sbikgKi8KLSAgICAgICAgaWYgKHBhdCkgICAgICAgICAgICAgICAgICAgICAgICAvKiBN YXRjaGluZz8gKi8KLSAgICAgICAgICBpZiAoIWNrbWF0Y2gocGF0LGJ1ZiwxLDErNCkpICAvKiBM aW5lIG1hdGNoZXMgcGF0dGVybj8gKi8KLSAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAg ICAgICAgICAvKiBObywgc2tpcCBpdCAqLwotICAgICAgICB0eXBfbXRjaHMrKzsKLQotICAgICAg ICBpZiAoaGVhZCA+IDAgJiYgIXRhaWxpbmcgJiYgbGluZXMgPT0gaGVhZCkgLyogSGFuZGxlIC9I RUFEOm4gKi8KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBidWZbVFlQQlVGTCsxXSA9IE5V TDsgICAgICAgICAgIC8qIEp1c3QgaW4gY2FzZS4uLiAqLwotICAgICAgICBpZiAocHJlZml4KSB7 ICAgICAgICAgICAgICAgICAgIC8qIEFkZCBzcGVjaWZpZWQgcHJlZml4IHRvIGVhY2ggbGluZSAq LwotICAgICAgICAgICAgY2hhciBwYnVmWzY0XTsKLSAgICAgICAgICAgIGNoYXIgKiBwcDsKLSAg ICAgICAgICAgIHBwID0gcHJlZml4OwotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgaWYgKGV2 YWxwZngpIHsgICAgICAgICAgICAgIC8qIFByZWZpeCBpcyBhIHZhcmlhYmxlPyAqLwotICAgICAg ICAgICAgICAgIGludCBuID0gNjM7ICAgICAgICAgICAgIC8qIE1heWJlIC0gZXZhbHVhdGUgaXQg YW5kIHNlZSAqLwotICAgICAgICAgICAgICAgIGNoYXIgKiBwID0gcGJ1ZjsKLSAgICAgICAgICAg ICAgICB6enN0cmluZyhwcmVmaXgsJnAsJm4pOyAvKiBJZiB0aGVyZSBpcyBubyBjaGFuZ2UgKi8K LSAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChwcmVmaXgscGJ1ZikpIHsgLyogaXQncyBub3Qg YSB2YXJpYWJsZSAqLwotICAgICAgICAgICAgICAgICAgICBldmFscGZ4ID0gMDsgICAgICAgIC8q IFNvIGRvbid0IGRvIHRoaXMgYWdhaW4uICovCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsgICAg ICAgICAgICAgICAgLyogSXQgd2FzIGEgdmFyaWFibGUgKi8KLSAgICAgICAgICAgICAgICAgICAg cHAgPSBwYnVmOyAgICAgICAgICAvKiBTbyBzdWJzdGl0dXRlIGl0cyB2YWx1ZSAqLwotICAgICAg ICAgICAgICAgICAgICBwZnhsZW4gPSA2MyAtIG47ICAgIC8qIGFuZCBnZXQgaXRzIG5ldyBsZW5n dGggKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwg Ki8KLSAgICAgICAgICAgIGlmIChsZW4gKyBwZnhsZW4gKyAyIDwgVFlQQlVGTCkgewotICAgICAg ICAgICAgICAgIC8qIFNoaWZ0IHJpZ2h0IHRvIG1ha2Ugcm9vbSBmb3IgcHJlZml4ICovCi0gICAg ICAgICAgICAgICAgbWVtY3B5KChjaGFyICopbGluZStwZnhsZW4sKGNoYXIgKilidWYsbGVuKTsK LSAgICAgICAgICAgICAgICBsc2V0KChjaGFyICopbGluZSxwcCxwZnhsZW4sU1ApOwotICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsImRvdHlwZSBwcmVmaXgiLGxpbmUscGZ4bGVuKTsKLSAgICAg ICAgICAgICAgICBsZW4gKz0gcGZ4bGVuOwotICAgICAgICAgICAgICAgIG1lbWNweSgoY2hhciAq KWJ1ZiwoY2hhciAqKWxpbmUsbGVuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm IChudW1iZXIpIHsgICAgICAgICAgICAvKiBMaW5lIG51bWJlcnMgKi8KLSAgICAgICAgICAgIGlu dCB4OwotICAgICAgICAgICAgc3ByaW50ZihsaW5lLCIlNGQuICIsdHlwX2xpbmVzKTsKLSAgICAg ICAgICAgIHggPSBzdHJsZW4obGluZSk7Ci0gICAgICAgICAgICBsZW4gKz0geDsKLSAgICAgICAg ICAgIGlmIChsZW4gPCBMSU5CVUZTSVopIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkoKGNoYXIg KikmbGluZVt4XSwoY2hhciAqKWJ1ZixsZW4pOwotICAgICAgICAgICAgICAgIG1lbWNweSgoY2hh ciAqKWJ1ZiwoY2hhciAqKWxpbmUsbGVuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg ICAgICBpZiAod2lkdGggPiAwICYmIHdpZHRoIDw9IFRZUEJVRkwpIHsgLyogVHJ1bmNhdGUgYXQg Z2l2ZW4gd2lkdGguICovCi0gICAgICAgICAgICBjaGFyICogb2J1ZiA9IGxpbmU7ICAgICAgICAg LyogQnV0IHRvIGRvIHRoYXQgZmlyc3Qgd2UgbXVzdCAqLwotICAgICAgICAgICAgaW50IGksayx6 OyAgICAgICAgICAgICAgICAgIC8qIGV4cGFuZCB0YWJzOyBhc3N1bWUgZXZlcnkgOCBjb2xzLiAq LwotICAgICAgICAgICAgbGluZVswXSA9IE5VTDsKLSAgICAgICAgICAgIGZvciAoaSA9IDAsIGsg PSAwOyBpIDwgd2lkdGg7IGsrKykgeyAvKiBDaGFyYWN0ZXIgbG9vcC4uLiAqLwotICAgICAgICAg ICAgICAgIGlmICghYnVmW2tdKSAgICAgICAgICAgIC8qIE5vIG1vcmUgY2hhcnMgaW4gdGhpcyBs aW5lLCBkb25lLiAqLwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg aWYgKGJ1ZltrXSAhPSAnXHQnKSB7ICAgLyogSWYgaXQncyBub3QgYSB0YWIgKi8KLSAgICAgICAg ICAgICAgICAgICAgaWYgKGkgPj0gTElOQlVGU0laKSAvKiBDaGVjayBmb3Igb3ZlcmZsb3cgKi8K LSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgb2J1Zltp KytdID0gYnVmW2tdOyAvKiBhbmQgdGhlbiBkZXBvc2l0IGl0LiAqLwotICAgICAgICAgICAgICAg ICAgICBvYnVmW2ldID0gTlVMOyAgICAgIC8qIEtlZXAgaXQgbnVsbC10ZXJtaW5hdGVkICovCi0g ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICB6ID0gOCAtIChpICUgOCk7ICAgICAgICAvKiBJdCdzIGEgdGFiLCBleHBhbmQgaXQu ICovCi0gICAgICAgICAgICAgICAgaWYgKHogPT0gMCkgeiA9IDg7Ci0gICAgICAgICAgICAgICAg Zm9yIChqID0gMDsgaiA8IHogJiYgaSA8IExJTkJVRlNJWjsgaisrKSB7Ci0jaWZkZWYgVU5JQ09E RQotICAgICAgICAgICAgICAgICAgICBpZiAodWNzMiAmJiAhdWNzb3JkZXIpCi0gICAgICAgICAg ICAgICAgICAgICAgb2J1ZltpKytdID0gTlVMOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICAg ICAgICAgICAgICAgICAgb2J1ZltpKytdID0gJyAnOwotI2lmZGVmIFVOSUNPREUKLSAgICAgICAg ICAgICAgICAgICAgaWYgKHVjczIgJiYgdWNzb3JkZXIpCi0gICAgICAgICAgICAgICAgICAgICAg b2J1ZltpKytdID0gTlVMOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgb2J1ZltpKytdID0gTlVMOwotICAgICAgICAgICAgICAgIG9idWZb aV0gPSBOVUw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvYnVmW3dpZHRoXSA9IE5VTDsg ICAgICAgICAgLyogTm93IHRydW5jYXRlIGF0IGdpdmVuIHdpZHRoLiAqLwotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgICAgIC8qIFRoaXMgZG9lc24ndCB3b3JrIGZvciBVQ1MtMiBiZWNhdXNlIGl0 IGNvbnRhaW5zIE5VTHMgKi8KLSAgICAgICAgICAgIGNrc3RybmNweShidWYsb2J1ZixUWVBCVUZM KTsgLyogYW5kIGNvcHkgaXQgYmFjayAoYWdhaW4/KSAqLwotI2Vsc2UKLSAgICAgICAgICAgIG1l bWNweSgoY2hhciAqKWJ1ZiwoY2hhciAqKW9idWYsaSk7IC8qIENvcHkgaXQgYmFjayAqLwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIGxlbiA9IChpID4gd2lkdGgpID8gd2lkdGgg OiBpOyAvKiBTcGFyZSB1cyBhbm90aGVyIHN0cmxlbigpLi4uICovCi0gICAgICAgIH0KLSAgICAg ICAgaWYgKHRhaWxpbmcpIHsgICAgICAgICAgICAgICAgICAvKiBJZiAvVEFJTDpuLi4uICovCi0g ICAgICAgICAgICBrID0gbGluZXMgJSBoZWFkOyAgICAgICAgICAgLyogc2F2ZSB0aGlzIGxpbmUg aW4gY2lyY3VsYXIgYnVmZmVyICovCi0gICAgICAgICAgICBpZiAoIWNvdW50aW5nKSB7Ci0gICAg ICAgICAgICAgICAgaWYgKHRhaWxba10pIGZyZWUodGFpbFtrXSk7Ci0gICAgICAgICAgICAgICAg dGFpbFtrXSA9IG1hbGxvYyhsZW4rMik7Ci0gICAgICAgICAgICAgICAgaWYgKCF0YWlsW2tdKSB7 Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVc biIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIHhkb3R5cGU7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIG1lbWNweSh0YWlsW2tdLGJ1ZixsZW4pOwotICAgICAgICAgICAg ICAgIHRsZW5ba10gPSBsZW47Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvdW50aW5nKSAgICAgICAgICAgICAgICAgICAv KiBJZiBvbmx5IGNvdW50aW5nICovCi0gICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAg ICAgICAgLyogd2UncmUgZG9uZSB3aXRoIHRoaXMgbGluZSAqLwotCi0gICAgICAgIGlmIChwYWdp bmcpIHsgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheWluZyB0aGlzIGxpbmUuLi4gKi8KLSAg ICAgICAgICAgIGludCB1OwotICAgICAgICAgICAgdSA9IGxlbjsgICAgICAgICAgICAgICAgICAg IC8qIExlbmd0aCBpbiBCWVRFUyAqLwotICAgICAgICAgICAgaWYgKHVjczIpICAgICAgICAgICAg ICAgICAgIC8qIElmIG91dHB1dHRpbmcgaW4gVUNTLTIgKi8KLSAgICAgICAgICAgICAgdSAvPSAy OyAgICAgICAgICAgICAgICAgICAvKiBjb252ZXJ0IGxlbmd0aCB0byBDSEFSQUNURVJTICovCi0g ICAgICAgICAgICB4ID0gKHUgLyBjbWRfY29scykgKyAxOyAgICAgLyogQ3J1ZGVseSBhbGxvdyBm b3Igd3JhcCAqLwotICAgICAgICAgICAgaWYgKGNtZF9yb3dzID4gMCAmJiBjbWRfY29scyA+IDAp Ci0gICAgICAgICAgICAgIG4gKz0geDsgICAgICAgICAgICAgICAgICAgLyogVGhpcyBhc3N1bWVz IHRlcm1pbmFsIHdpbGwgd3JhcCAqLwotICAgICAgICB9Ci0jaWZkZWYgS1VJCi0gICAgICAgIGlm ICggZ3VpICkgewotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9y dCAqIHVjaCA9ICh1bnNpZ25lZCBzaG9ydCAqKWJ1ZjsKLSAgICAgICAgICAgIGZvciAoIGk9MDsg aTxsZW4vMjsgaSsrKQotICAgICAgICAgICAgICAgIGd1aV90ZXh0X3BvcHVwX2FwcGVuZCh1Y2hb aV0pOwotCQkJZ3VpX3RleHRfcG9wdXBfYXBwZW5kKENSKTsKLQkJCWd1aV90ZXh0X3BvcHVwX2Fw cGVuZChMRik7Ci0gICAgICAgIH0gCi0gICAgICAgIGVsc2UKLSNlbmRpZiAvKiBLVUkgKi8KLSAg ICAgICAgdHlwZWxpbmUoYnVmLGxlbixvdXRjcyxvZnApOyAgICAvKiBQcmludCBsaW5lLCBsZW5n dGggYmFzZWQgKi8KLSNpZmRlZiBDS19UVEdXU0laCi0gICAgICAgIGRlYnVnKEYxMDEsImRvdHlw ZSBuIiwiIixuKTsKLSAgICAgICAgaWYgKHBhZ2luZyA+IDAgJiYgb2ZwID09IHN0ZG91dCkgeyAv KiBQYXVzZSBhdCBlbmQgb2Ygc2NyZWVuICovCi0gICAgICAgICAgICBpZiAoY21kX3Jvd3MgPiAw ICYmIGNtZF9jb2xzID4gMCkgewotICAgICAgICAgICAgICAgIGlmIChuID4gY21kX3Jvd3MgLSAz KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKQotICAgICAgICAgICAgICAg ICAgICAgIGdvdG8geGRvdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg ICAgICAgICAgICAgIG4gPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICB9Ci0KLSAgeGRvdHlwZToKLSAg ICBpZiAoY291bnRpbmcpIHsKLSAgICAgICAgZnByaW50ZihvZnAsCi0gICAgICAgICAgICAgICAg IiVzOiAlZCBsaW5lJXNcbiIsZmlsZSx0eXBfbGluZXMsdHlwX2xpbmVzID09IDEgPyAiIiA6ICJz Iik7Ci0gICAgICAgIGlmIChwYXQpCi0gICAgICAgICAgZnByaW50ZihvZnAsCi0gICAgICAgICAg ICAgICAgICAiJXM6ICVkIG1hdGNoJXNcbiIscGF0LHR5cF9tdGNocyx0eXBfbXRjaHMgPT0gMSA/ ICIiIDogImVzIik7Ci0gICAgICAgIGdvdG8geHhkb3R5cGU7Ci0gICAgfQotICAgIGlmICh0YWls aW5nICYmIHRhaWwpIHsgICAgICAgICAgICAgIC8qIFR5cGluZyB0YWlsIG9mIGZpbGU/ICovCi0g ICAgICAgIGlmIChsaW5lcyA8IGhlYWQpIHsgICAgICAgICAgICAgLyogWWVzLCBzaG93IHRoZSBs aW5lcyB3ZSBzYXZlZCAqLwotICAgICAgICAgICAgayA9IDA7ICAgICAgICAgICAgICAgICAgICAg IC8qIFNob3cgYWxsIGxpbmVzICovCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogTW9yZSBsaW5lcyB0aGFuIHRhaWwgbnVtYmVyICovCi0gICAgICAgICAgICBsaW5l cyA9IGs7ICAgICAgICAgICAgICAgICAgLyogTGFzdCBsaW5lIHRvIHNob3cgKi8KLSAgICAgICAg ICAgIGsrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCBsaW5lIHRvIHNob3cgKi8K LSAgICAgICAgICAgIGlmIChrID49IGhlYWQpCi0gICAgICAgICAgICAgIGsgPSAwOwotICAgICAg ICB9Ci0gICAgICAgIG4gPSBmaXJzdDsgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGxp bmUgY291bnRlciAqLwotICAgICAgICBmb3IgKGkgPSBrIDs7IGkrKykgeyAgICAgICAgICAgIC8q IExvb3AgdGhydSBjaXJjdWxhciBidWZmZXIgKi8KLSNpZm5kZWYgTUFDCi0gICAgICAgICAgICBp ZiAodHlwX2ludCkgeyAgICAgICAgICAgICAgLyogSW50ZXJydXB0ZWQ/ICovCi0gICAgICAgICAg ICAgICAgcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgLyogUHJpbnQgbWVzc2FnZSAqLwotICAgICAg ICAgICAgICAgIGdvdG8geHhkb3R5cGU7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogTUFDICov Ci0gICAgICAgICAgICBqID0gaSAlIGhlYWQ7ICAgICAgICAgICAgICAgLyogSW5kZXggb2YgdGhp cyBsaW5lICovCi0gICAgICAgICAgICBzID0gdGFpbFtqXTsgICAgICAgICAgICAgICAgLyogUG9p bnQgdG8gbGluZSB0byBkaXNwbGF5ICovCi0gICAgICAgICAgICBpZiAoIXMpICAgICAgICAgICAg ICAgICAgICAgLyogKHNob3VsZG4ndCBoYXBwZW4uLi4pICovCi0gICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgaWYgKHBhZ2luZykgeyAgICAgICAgICAgICAgIC8qIENydWRlbHkgYWxs b3cgZm9yIGxpbmUgd3JhcCAqLwotICAgICAgICAgICAgICAgIHggPSB0bGVuW2pdOwotICAgICAg ICAgICAgICAgIGlmICh1Y3MyKSB4IC89IDI7Ci0gICAgICAgICAgICAgICAgeCA9IHggLyBjbWRf Y29scyArIDE7Ci0gICAgICAgICAgICAgICAgaWYgKGNtZF9yb3dzID4gMCAmJiBjbWRfY29scyA+ IDApCi0gICAgICAgICAgICAgICAgICBuICs9IHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICB0eXBlbGluZShzLHRsZW5bal0sb3V0Y3Msb2ZwKTsgLyogRGlzcGxheSB0aGlzIGxpbmUgKi8K LSAgICAgICAgICAgIGlmIChwYWdpbmcgJiYgb2ZwID09IHN0ZG91dCkgeyAvKiBQYXVzZSBhdCBl bmQgb2Ygc2NyZWVuICovCi0gICAgICAgICAgICAgICAgaWYgKGNtZF9yb3dzID4gMCAmJiBjbWRf Y29scyA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG4gPiBjbWRfcm93cyAtIDMpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKQotICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0YWlsW2pdID0gTlVMTDsKLSAg ICAgICAgICAgIGZyZWUocyk7ICAgICAgICAgICAgICAgICAgICAvKiBGcmVlIHRoZSBsaW5lICov Ci0gICAgICAgICAgICBpZiAoaSAlIGhlYWQgPT0gbGluZXMpICAgICAgLyogV2hlbiB0byBzdG9w ICovCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGZyZWUoKGNoYXIg Kil0YWlsKTsgICAgICAgICAgICAgLyogRnJlZSB0aGUgbGlzdCAqLwotICAgICAgICB0YWlsID0g TlVMTDsKLSAgICAgICAgaWYgKHRsZW4pIGZyZWUoKGNoYXIgKil0bGVuKTsKLSAgICAgICAgdGxl biA9IE5VTEw7Ci0gICAgfQotCi0vKiBDb21lIGhlcmUgd2hlbiBmaW5pc2hlZCBvciBvbiBTSUdJ TlQgKi8KLQotICB4eGRvdHlwZToKLSNpZm5kZWYgQU1JR0EKLSNpZm5kZWYgTUFDCi0gICAgc2ln bmFsKFNJR0lOVCxvbGRzaWcpOyAgICAgICAgICAgICAgLyogUHV0IG9sZCBzaWduYWwgYWN0aW9u IGJhY2suICovCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogQU1JR0EgKi8KLSAgICBpZiAo dGFpbGluZyAmJiB0YWlsKSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWFkOyBpKyspIHsg ICAgLyogRnJlZSBlYWNoIGxpbmUuICovCi0gICAgICAgICAgICBpZiAodGFpbFtpXSkKLSAgICAg ICAgICAgICAgZnJlZSh0YWlsW2ldKTsKLSAgICAgICAgfQotICAgICAgICBmcmVlKChjaGFyICop dGFpbCk7ICAgICAgICAgICAgIC8qIEZyZWUgbGlzdCBwb2ludGVyICovCi0gICAgICAgIGlmICh0 bGVuKQotICAgICAgICAgIGZyZWUoKGNoYXIgKil0bGVuKTsKLSAgICB9Ci0gICAgeCA9IHpjbG9z ZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgLyogRG9uZSwgY2xvc2UgdGhlIGlucHV0IGZpbGUg Ki8KLSAgICBpZiAob2ZwICE9IHN0ZG91dCkgeyAgICAgICAgICAgICAgICAvKiBDbG9zZSBhbnkg b3V0cHV0IGZpbGUgKi8KLSAgICAgICAgaWYgKG9mcCkgZmNsb3NlKG9mcCk7Ci0gICAgICAgIG9m cCA9IHN0ZG91dDsKLSAgICB9Ci0gICAgYmluYXJ5ID0gc2F2ZTsgICAgICAgICAgICAgICAgICAg ICAgLyogUmVzdG9yZSB0ZXh0L2JpbmFyeSBtb2RlICovCi0jaWZkZWYgVU5JQ09ERQotICAgIHVj c2JvbSA9IHVjc2JvbV9zYXY7ICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgQk9NIHVzYWdlICov Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0jaWZkZWYgS1VJCi0gICAgaWYgKCBndWkgKQotICAg ICAgICBndWlfdGV4dF9wb3B1cF93YWl0KC0xKTsgICAgICAgIC8qIFdhaXQgZm9yIHVzZXIgdG8g Y2xvc2UgdGhlIGRpYWxvZyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgIHJldHVybihyYyk7Ci19 Ci0KLS8qIEdSRVAgY29tbWFuZCAqLwotCi0jZGVmaW5lIEdSRVBfQ0FTRSAgMCAgICAgICAgICAg ICAgICAgICAgLyogL0NBU0UgKi8KLSNkZWZpbmUgR1JFUF9DT1VOICAxICAgICAgICAgICAgICAg ICAgICAvKiAvQ09VTlQgKi8KLSNkZWZpbmUgR1JFUF9ET1RGICAyICAgICAgICAgICAgICAgICAg ICAvKiAvRE9URklMRVMgKi8KLSNkZWZpbmUgR1JFUF9OQU1FICAzICAgICAgICAgICAgICAgICAg ICAvKiAvTkFNRU9OTFkgKi8KLSNkZWZpbmUgR1JFUF9OT0JLICA0ICAgICAgICAgICAgICAgICAg ICAvKiAvTk9CQUNLVVAgKi8KLSNkZWZpbmUgR1JFUF9OT0RPICA1ICAgICAgICAgICAgICAgICAg ICAvKiAvTk9ET1RGSUxFUyAqLwotI2RlZmluZSBHUkVQX05PTEkgIDYgICAgICAgICAgICAgICAg ICAgIC8qIC9OT0xJU1QgKi8KLSNkZWZpbmUgR1JFUF9OT01BICA3ICAgICAgICAgICAgICAgICAg ICAvKiAvSU5WRVJUID0gL05PTUFUQ0ggKi8KLSNkZWZpbmUgR1JFUF9OT1BBICA4ICAgICAgICAg ICAgICAgICAgICAvKiAvTk9QQUdFICovCi0jZGVmaW5lIEdSRVBfTlVNUyAgOSAgICAgICAgICAg ICAgICAgICAgLyogL0xJTkVOVU1CRVJTICovCi0jZGVmaW5lIEdSRVBfUEFHRSAxMCAgICAgICAg ICAgICAgICAgICAgLyogL1BBR0UgKi8KLSNkZWZpbmUgR1JFUF9SRUNVIDExICAgICAgICAgICAg ICAgICAgICAvKiAvUkVDVVJTSVZFICovCi0jZGVmaW5lIEdSRVBfVFlQRSAxMiAgICAgICAgICAg ICAgICAgICAgLyogL1RZUEU6ICovCi0jZGVmaW5lIEdSRVBfT1VUUCAxMyAgICAgICAgICAgICAg ICAgICAgLyogL09VVFBVVEZJTEU6ICovCi0jZGVmaW5lIEdSRVBfRVhDUCAxNAkJCS8qIC9FWENF UFQ6ICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGdyZXB0YWJbXSA9IHsKLSAgICB7ICIvY291 bnQiLCAgICAgICAgR1JFUF9DT1VOLCBDTV9BUkcgfSwKLSAgICB7ICIvZG90ZmlsZXMiLCAgICAg R1JFUF9ET1RGLCAwIH0sCi0gICAgeyAiL2V4Y2VwdCIsICAgICAgIEdSRVBfRVhDUCwgQ01fQVJH IH0sCi0gICAgeyAiL2xpbmVudW1iZXJzIiwgIEdSRVBfTlVNUywgMCB9LAotICAgIHsgIi9uYW1l b25seSIsICAgICBHUkVQX05BTUUsIDAgfSwKLSAgICB7ICIvbm9iYWNrdXBmaWxlcyIsR1JFUF9O T0JLLCAwIH0sCi0gICAgeyAiL25vY2FzZSIsICAgICAgIEdSRVBfQ0FTRSwgMCB9LAotICAgIHsg Ii9ub2RvdGZpbGVzIiwgICBHUkVQX05PRE8sIDAgfSwKLSAgICB7ICIvbm9saXN0IiwgICAgICAg R1JFUF9OT0xJLCAwIH0sCi0gICAgeyAiL25vbWF0Y2giLCAgICAgIEdSRVBfTk9NQSwgMCB9LAot ICAgIHsgIi9ub3BhZ2UiLCAgICAgICBHUkVQX05PUEEsIDAgfSwKLSAgICB7ICIvb3V0cHV0Iiwg ICAgICAgR1JFUF9PVVRQLCBDTV9BUkcgfSwKLSAgICB7ICIvcGFnZSIsICAgICAgICAgR1JFUF9Q QUdFLCAwIH0sCi0gICAgeyAiL3F1aWV0IiwgICAgICAgIEdSRVBfTk9MSSwgQ01fSU5WIH0sCi0j aWZkZWYgUkVDVVJTSVZFCi0gICAgeyAiL3JlY3Vyc2l2ZSIsICAgIEdSRVBfUkVDVSwgMCB9LAot I2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgIHsgIi90eXBlIiwgICAgICAgICBHUkVQX1RZUEUs IENNX0FSRyB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmdyZXB0YWIgPSAg c2l6ZW9mKGdyZXB0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKS0xOwotCi1zdGF0aWMgY2hhciAq IGdyZXBfZXhjZXB0ID0gTlVMTDsKLQotaW50Ci1kb2dyZXAoKSB7Ci0gICAgaW50IG1hdGNoLCB4 LCB5LCBmYywgZ2V0dmFsLCBtYyA9IDAsIGNvdW50ID0gMCwgYmlnY291bnQgPSAwOwotICAgIGlu dCBmbGluZSA9IDAsIHNsaW5lID0gMCwgd2lsZCA9IDAsIGxlbiA9IDA7Ci0gICAgaW50IHhtb2Rl ID0gLTEsIHNjYW4gPSAwOwotICAgIGNoYXIgYywgbmFtZVtDS01BWFBBVEgrMV0sIG91dGZpbGVb Q0tNQVhQQVRIKzFdLCAqcCwgKnMsICpjdiA9IE5VTEw7Ci0gICAgRklMRSAqIGZwID0gTlVMTDsK LQotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN3aXRjaCB2YWx1 ZXMgYW5kIGRlZmF1bHRzICovCi0gICAgICBncl9jb3VuID0gMCwKLSAgICAgIGdyX25hbWUgPSAw LAotICAgICAgZ3Jfbm9iayA9IDAsCi0gICAgICBncl9jYXNlID0gMSwKLSAgICAgIGdyX25vbGkg PSAwLAotICAgICAgZ3Jfbm9tYSA9IDAsCi0gICAgICBncl9udW1zID0gMCwKLSAgICAgIGdyX2V4 Y3AgPSAwLAotICAgICAgZ3JfcGFnZSA9IHhhc2ttb3JlOwotCi0gICAgc3RydWN0IEZEQiBzdywg Zmw7Ci0KLSAgICBnX21hdGNoZG90ID0gbWF0Y2hkb3Q7ICAgICAgICAgICAgICAvKiBTYXZlIGds b2JhbCBtYXRjaGRvdCBzZXR0aW5nICovCi0gICAgb3V0ZmlsZVswXSA9IE5VTDsKLSAgICBtYWtl c3RyKCZncmVwX2V4Y2VwdCxOVUxMKTsKLQotICAgIGlmIChvZnAgIT0gc3Rkb3V0KSB7ICAgICAg ICAgICAgICAgIC8qIEluIGNhc2Ugb2YgcHJldmlvdXMgaW50ZXJydXB0aW9uICovCi0gICAgICAg IGlmIChvZnApIGZjbG9zZShvZnApOwotICAgICAgICBvZnAgPSBzdGRvdXQ7Ci0gICAgfQotICAg IGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IEZEQiAtIGNvbW1h bmQgc3dpdGNoZXMgKi8KLSAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAgICAgICAgICAv KiBmY29kZSAqLwotICAgICAgICAgICAiU3RyaW5nIG9yIHBhdHRlcm4gdG8gc2VhcmNoIGZvciwg b3Igc3dpdGNoIiwKLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBk ZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRk dGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgbmdyZXB0YWIsICAgICAgICAgICAgICAgICAg ICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLSAgICAgICAgICAgNCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dp ICovCi0gICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2lu ZyBmdW5jdGlvbiAqLwotICAgICAgICAgICBncmVwdGFiLCAgICAgICAgICAgICAgICAgICAgIC8q IEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgJmZsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICk7Ci0gICAgY21mZGJpKCZm bCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW55dGhpbmcgdGhhdCBkb2Vzbid0IG1hdGNo ICovCi0gICAgICAgICAgIF9DTUZMRCwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8K LSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KLSAg ICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAg ICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEg Ki8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0gICAgICAgICAgIHh4c3RyaW5nLAkJCS8qIHh4c3Ry aW5nICovCi0gICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgKTsK LSAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSAwIG9yIG1v cmUgc3dpdGNoZXMgKi8KLSAgICAgICAgeCA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgICAgICAv KiBQYXJzZSBzb21ldGhpbmcgKi8KLSAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgIHJldHVy bih4KTsKLSAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkgICAvKiBCcmVhayBv dXQgaWYgbm90IGEgc3dpdGNoICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGMgPSBjbWdi cmsoKTsKLSAgICAgICAgaWYgKChnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAh KGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0 Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkp OwotICAgICAgICB9Ci0gICAgICAgIGlmICgoY21yZXN1bHQubnJlc3VsdCAhPSBHUkVQX0NPVU4p ICYmICFnZXR2YWwgJiYKLSAgICAgICAgICAgIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAg ICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsK LSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChjbXJl c3VsdC5ucmVzdWx0KSB7Ci0gICAgICAgICAgY2FzZSBHUkVQX0NPVU46IHsKLSAgICAgICAgICAg ICAgZ3JfY291bisrOwotICAgICAgICAgICAgICBpZiAoZ2V0dmFsKSB7Ci0gICAgICAgICAgICAg ICAgICBpZiAoKHggPSBjbWZsZCgiVmFyaWFibGUgZm9yIHJlc3VsdCIsIiIsJnMsTlVMTCkpIDwg MCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICAgICAgbWFr ZXN0cigmY3Yscyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgfQotICAgICAgICAgIGNhc2UgR1JFUF9DQVNFOiBncl9jYXNlPTA7IGJyZWFrOwotICAg ICAgICAgIGNhc2UgR1JFUF9OQU1FOiBncl9uYW1lKys7IGdyX25vbGk9MDsgYnJlYWs7Ci0gICAg ICAgICAgY2FzZSBHUkVQX05PQks6IGdyX25vYmsrKzsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH UkVQX05PTEk6IGdyX25vbGkrKzsgZ3JfbmFtZT0wOyBncl9udW1zPTA7IGJyZWFrOwotICAgICAg ICAgIGNhc2UgR1JFUF9OT01BOiBncl9ub21hKys7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR1JF UF9OT1BBOiBncl9wYWdlPTA7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR1JFUF9OVU1TOiBncl9u dW1zKys7IGdyX25vbGk9MDsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHUkVQX1BBR0U6IGdyX3Bh Z2UrKzsgZ3Jfbm9saT0wOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdSRVBfTk9ETzoKLSAgICAg ICAgICAgIG1hdGNoZG90ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug R1JFUF9ET1RGOgotICAgICAgICAgICAgbWF0Y2hkb3QgPSAxOwotICAgICAgICAgICAgYnJlYWs7 Ci0jaWZkZWYgUkVDVVJTSVZFCi0gICAgICAgICAgY2FzZSBHUkVQX1JFQ1U6Ci0gICAgICAgICAg ICByZWN1cnNpdmUgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogUkVDVVJTSVZF ICovCi0gICAgICAgICAgY2FzZSBHUkVQX1RZUEU6IHsKLSAgICAgICAgICAgICAgZXh0ZXJuIHN0 cnVjdCBrZXl0YWIgdHh0YmluW107Ci0gICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHR4dGJp biwzLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAg ICAgICAgICAgICAgaWYgKHggPT0gMikgeyAgICAgICAgICAgICAvKiBBTEwgKi8KLSAgICAgICAg ICAgICAgICAgIHhtb2RlID0gLTE7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgLyogVEVYVCBvciBCSU5BUlkgb25seSAqLwotICAgICAgICAgICAgICAgICAgeG1vZGUg PSB4OwotICAgICAgICAgICAgICAgICAgc2NhbiA9IDE7Ci0gICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgR1JFUF9PVVRQOiAg ICAgICAgICAgICAgIC8qIFNlbmQgb3V0cHV0IHRvIGZpbGUgKi8KLSAgICAgICAgICAgIGlmICgo eCA9IGNtb2ZpKCJGaWxlIGZvciBHUkVQJ2QgbGluZXMiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQot ICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICBja3N0cm5jcHkob3V0ZmlsZSxz LENLTUFYUEFUSCk7Ci0gICAgICAgICAgICBicmVhazsKLQkgIGNhc2UgR1JFUF9FWENQOgkJLyog RXhjZXB0aW9uIHBhdHRlcm4gKi8KLQkgICAgaWYgKGdldHZhbCkgewotCQlpZiAoKHggPSBjbWZs ZCgiRXhjZXB0aW9uIHBhdHRlcm4iLAotCQkJICAgICAgICIiLAotCQkJICAgICAgICZzLAotCQkJ ICAgICAgIHh4c3RyaW5nCi0JCQkgICAgICAgKSkgPCAwKQotCQkgIHJldHVybih4KTsKLQkJZ3Jf ZXhjcCsrOwotCQltYWtlc3RyKCZncmVwX2V4Y2VwdCxzKTsKLQkgICAgfQotICAgICAgICB9Ci0g ICAgfQotICAgIGlmIChvdXRmaWxlWzBdKSB7Ci0gICAgICAgIG9mcCA9IGZvcGVuKG91dGZpbGUs InciKTsgICAgICAgLyogT3BlbiBvdXRwdXQgZmlsZSAqLwotICAgICAgICBpZiAoIW9mcCkgewot ICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3Qgb3BlbiBvdXRwdXQgZmlsZSAlczogJXNcbiIsb3V0 ZmlsZSxja19lcnJzdHIoKSk7Ci0gICAgICAgICAgICBvZnAgPSBzdGRvdXQ7Ci0gICAgICAgICAg ICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIGdyX3BhZ2UgPSAwOwotICAgIH0KLSAg ICBzID0gY21yZXN1bHQuc3Jlc3VsdDsKLSAgICBzID0gYnJzdHJpcChzKTsgICAgICAgICAgICAg ICAgICAgICAvKiBTdHJpcCBicmFjZXMgZnJvbSBwYXR0ZXJuICovCi0gICAgaWYgKCEqcykgewot ICAgICAgICBwcmludGYoIj9QYXR0ZXJuIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgcmV0dXJuKC05 KTsKLSAgICB9Ci0gICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7ICAgICAgLyogU2F2 ZSBwYXR0ZXJuICovCi0gICAgaWYgKCh4ID0gY21pZmkoIkZpbGUocykgdG8gc2VhcmNoIiwiIiwm cywmd2lsZCx4eHN0cmluZykpIDwgMCkgewotICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAg ICAgICAgcHJpbnRmKCI/RmlsZSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVkXG4iKTsKLSAgICAgICAg ICAgIHggPSAtOTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4oeCk7Ci0gICAgfQotICAgIHMg PSBicnN0cmlwKHMpOyAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmlwIGJyYWNlcyBmcm9tIGZp bGVuYW1lICovCi0jaWZuZGVmIFpYUkVXSU5ECi0gICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZT SVopOwotI2VuZGlmIC8qIFpYUkVXSU5EICovCi0gICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQot ICAgICAgcmV0dXJuKHkpOwotCi0gICAgaWYgKGdyX3BhZ2UgPiAtMSkKLSAgICAgIHhhc2ttb3Jl ID0gZ3JfcGFnZTsgICAgICAgICAgICAgICAvKiBQYWdpbmcuLi4gKi8KLQotICAgIHAgPSB0bXBi dWY7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHBhdHRlcm4gKi8KLSNpZmRl ZiBDT01NRU5UCi0vKiBOb3cgdGhpcyBpcyBkb25lIGluIGNrbWF0Y2ggKi8KLSAgICBpZiAoKnAg PT0gJ14nKSB7ICAgICAgICAgICAgICAgICAgICAvKiAnXicgYW5jaG9ycyBwYXR0ZXJuIHRvIGJl Z2lubmluZyAqLwotICAgICAgICBwKys7Ci0gICAgfSBlbHNlIGlmICgqcCAhPSAnKicpIHsgICAg ICAgICAgICAgLyogT3RoZXJ3aXNlIHByZXBlbmQgaW1wbGllZCAnKicgKi8KLSAgICAgICAgdG1w YnVmWzBdID0gJyonOwotICAgICAgICBwID0gdG1wYnVmOwotICAgIH0KLSAgICB4ID0gc3RybGVu KHApOyAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgbGVuZ3RoIG9mIHJlc3VsdCAqLwotICAg IGlmICh4ID4gMCAmJiB4IDwgVE1QQlVGU0laKSB7ICAgICAgIC8qICckJyBhdCBlbmQgYW5jaG9y cyBwYXR0ZXJuIHRvIGVuZCAqLwotICAgICAgICBpZiAocFt4LTFdID09ICckJykgewotICAgICAg ICAgICAgcFt4LTFdID0gTlVMOwotICAgICAgICB9IGVsc2UgaWYgKHBbeC0xXSAhPSAnKicpIHsK LSAgICAgICAgICAgIHBbeF0gPSAnKic7Ci0gICAgICAgICAgICBwW3grMV0gPSBOVUw7Ci0gICAg ICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGRlYnVnKEYxMTEsImdyZXAg cGF0IixwLHgpOwotCi0jaWZkZWYgWlhSRVdJTkQKLSAgICBmYyA9IHp4cmV3aW5kKCk7ICAgICAg ICAgICAgICAgICAgICAvKiBSZXdpbmQgdGhlIGZpbGUgbGlzdCAqLwotI2Vsc2UKLSAgICB7Ci0g ICAgICAgIGludCBmbGFncyA9IFpYX0ZJTE9OTFk7ICAgICAgICAgLyogRXhwYW5kIGZpbGUgbGlz dCAqLwotICAgICAgICBpZiAobWF0Y2hkb3QpICBmbGFncyB8PSBaWF9NQVRDSERPVDsKLSAgICAg ICAgaWYgKHJlY3Vyc2l2ZSkgZmxhZ3MgfD0gWlhfUkVDVVJTRTsKLSAgICAgICAgZmMgPSBuenhw YW5kKGxpbmUsZmxhZ3MpOwotICAgIH0KLSNlbmRpZiAvKiBaWFJFV0lORCAqLwotI2lmZGVmIFVO SVgKLSAgICBzaF9zb3J0KG10Y2hzLE5VTEwsZmMsMCwwLGZpbGVjYXNlKTsKLSNlbmRpZiAvKiBV TklYICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJncmVwIGNtZF9yb3dzIiwiIixjbWRfcm93cyk7Ci0g ICAgZGVidWcoRjEwMSwiZ3JlcCBjbWRfY29scyIsIiIsY21kX2NvbHMpOwotCi0gICAgd2hpbGUg KDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9vcCBmb3IgZWFjaCBmaWxlICovCi0g ICAgICAgIHpuZXh0KG5hbWUpOyAgICAgICAgICAgICAgICAgICAgLyogR2V0IG5leHQgZmlsZSAq LwotICAgICAgICBpZiAoIW5hbWVbMF0pICAgICAgICAgICAgICAgICAgIC8qIE5vIG1vcmUsIGRv bmUgKi8KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGdyX25vYmspICAgICAgICAgICAg ICAgICAgICAvKiBTa2lwcGluZyBiYWNrdXAgZmlsZXM/ICovCi0gICAgICAgICAgaWYgKGNrbWF0 Y2goIiouflsxLTldKn4iLG5hbWUsMSwxKSkgLyogQmFja3VwIGZpbGU/ICovCi0gICAgICAgICAg ICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgLyogWWVzLCBza2lwICovCi0gICAgICAgIGlm IChzY2FuKSB7ICAgICAgICAgICAgICAgICAgICAgLyogL1RZUEU6IGdpdmVuPyAqLwotICAgICAg ICAgICAgc3dpdGNoIChzY2FuZmlsZShuYW1lLCZ5LG5zY2FuZmlsZSkpIHsgLyogWWVzLCBzY2Fu IHRoZSBmaWxlICovCi0gICAgICAgICAgICAgIGNhc2UgRlRfQklOOgotICAgICAgICAgICAgICAg IGlmICh4bW9kZSAhPSAxKQotICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRlRfVEVYVDoKLSAgICAgICAgICAgICAg Y2FzZSBGVF83QklUOgotICAgICAgICAgICAgICBjYXNlIEZUXzhCSVQ6Ci0jaWZkZWYgVU5JQ09E RQotICAgICAgICAgICAgICBjYXNlIEZUX1VURjg6Ci0gICAgICAgICAgICAgIGNhc2UgRlRfVUNT MjoKLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgICAgICAgICAgICAgaWYgKHhtb2RlICE9IDAp Ci0gICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgICAgICBmcCA9IGZvcGVuKG5hbWUsInIiKTsgICAgICAgICAgIC8qIE9wZW4gKi8KLSAgICAg ICAgaWYgKCFmcCkgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCAqLwotICAgICAgICAg IGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgKi8KLSAgICAgICAgY291bnQg PSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBNYXRjaCBjb3VudCwgdGhpcyBmaWxlICovCi0g ICAgICAgIGZsaW5lID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogTGluZSBjb3VudCwgdGhp cyBmaWxlICovCi0gICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgLyogTG9v cCBmb3IgZWFjaCBsaW5lICovCi0gICAgICAgICAgICBpZiAoZmdldHMobGluZSxMSU5CVUZTSVos ZnApID09IE5VTEwpIHsgLyogR2V0IG5leHQgbGluZSAqLwotICAgICAgICAgICAgICAgIGZjbG9z ZShmcCk7Ci0gICAgICAgICAgICAgICAgZnAgPSBOVUxMOwotCQlkZWJ1ZyhGMTAwLCJHUkVQIEVP RiIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBmbGluZSsrOyAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhpcyBsaW5lICovCi0g ICAgICAgICAgICBsaW5lW0xJTkJVRlNJWl0gPSBOVUw7ICAgICAgLyogTWFrZSBzdXJlIGl0J3Mg dGVybWluYXRlZCAqLwotCSAgICBkZWJ1ZyhGMTExLCJHUkVQIixsaW5lLGZsaW5lKTsKLSAgICAg ICAgICAgIGxlbiA9IChpbnQpc3RybGVuKGxpbmUpOyAgICAvKiBHZXQgbGVuZ3RoICovCi0gICAg ICAgICAgICB3aGlsZSAobGVuID4gMCAmJiAobGluZVtsZW4tMV0gPT0gJ1xuJyB8fCBsaW5lW2xl bi0xXSA9PSAnXHInKSkKLSAgICAgICAgICAgICAgbGluZVstLWxlbl0gPSBOVUw7ICAgICAgICAv KiBDaG9wIG9mZiB0ZXJtaW5hdG9ycyAqLwotICAgICAgICAgICAgbWF0Y2ggPSBja21hdGNoKHAs bGluZSxncl9jYXNlLDErNCk7IC8qIE1hdGNoIGFnYWluc3QgcGF0dGVybiAqLwotCSAgICBpZiAo bWF0Y2ggJiYgZ3JfZXhjcCkgewotCQlpZiAoY2ttYXRjaChncmVwX2V4Y2VwdCxsaW5lLGdyX2Nh c2UsMSs0KSkKLQkJICAgIG1hdGNoID0gMDsKLQkgICAgfQotICAgICAgICAgICAgaWYgKGdyX25v bWEpICAgICAgICAgICAgICAgIC8qIEludmVydCBtYXRjaCBzZW5zZSBpZiByZXF1ZXN0ZWQgKi8K LSAgICAgICAgICAgICAgbWF0Y2ggPSAhbWF0Y2g7Ci0gICAgICAgICAgICBpZiAobWF0Y2gpIHsg ICAgICAgICAgICAgICAgLyogSGF2ZSBhIG1hdGNoaW5nIGxpbmUgKi8KLSAgICAgICAgICAgICAg ICBtYysrOyAgICAgICAgICAgICAgICAgICAvKiBUb3RhbCBtYXRjaCBjb3VudCAqLwotICAgICAg ICAgICAgICAgIGNvdW50Kys7ICAgICAgICAgICAgICAgIC8qIE1hdGNoIGNvdW50IHRoaXMgZmls ZSAqLwotICAgICAgICAgICAgICAgIGlmIChncl9uYW1lKSB7ICAgICAgICAgIC8qIERvbid0IGNh cmUgaG93IG1hbnkgbGluZXMgbWF0Y2ggKi8KLSAgICAgICAgICAgICAgICAgICAgZmNsb3NlKGZw KTsgICAgICAgICAvKiBDbG9zZSB0aGUgZmlsZSAqLwotICAgICAgICAgICAgICAgICAgICBmcCA9 IE5VTEw7ICAgICAgICAgIC8qIGFuZCBxdWl0IHRoZSBsaW5lLXJlYWRpbmcgbG9vcC4gKi8KLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIGlmIChncl9jb3VuIHx8IGdyX25vbGkpIC8qIE5vdCBsaXN0aW5nIGVhY2ggbGluZSAqLwot ICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgIC8qIHNvIGRvbid0IHByaW50 IGFueXRoaW5nIG5vdy4gKi8KLSAgICAgICAgICAgICAgICBpZiAod2lsZCkgewkJLyogSWYgc2Vh cmNoaW5nIG11bHRpcGxlIGZpbGVzICovCi0gICAgICAgICAgICAgICAgICAgIGZwcmludGYob2Zw LCIlczoiLG5hbWUpOyAvKiBwcmludCBmaWxlbmFtZS4gKi8KLSAgICAgICAgICAgICAgICAgICAg bGVuICs9IChpbnQpc3RybGVuKG5hbWUpICsgMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgaWYgKGdyX251bXMpIHsgICAgICAgICAgLyogSWYgbGluZSBudW1iZXJzIHdhbnRl ZCAqLwotICAgICAgICAgICAgICAgICAgICBjaGFyIG5idWZbMzJdOwotICAgICAgICAgICAgICAg ICAgICBsZW4gKz0gY2ttYWttc2cobmJ1ZiwzMixja2l0b2EoZmxpbmUpLCI6IixOVUxMLE5VTEwp OwotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG9mcCwiJXMiLG5idWYpOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY21kX3Jvd3MgPiAwICYmIGNtZF9jb2xzID4g MCkKLSAgICAgICAgICAgICAgICAgIHNsaW5lICs9IChsZW4gLyBjbWRfY29scykgKyAxOwotICAg ICAgICAgICAgICAgIGZwcmludGYob2ZwLCIlc1xuIixsaW5lKTsgLyogUHJpbnQgdGhlIGxpbmUu ICovCi0gICAgICAgICAgICAgICAgaWYgKHNsaW5lID4gY21kX3Jvd3MgLSAzKSB7Ci0gICAgICAg ICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKSBnb3RvIHhncmVwOyBlbHNlIHNsaW5lID0gMDsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KCFncl9ub2xpKSB7CQkJLyogSWYgbm90IG5vdCBsaXN0aW5nLi4uICovCi0gICAgICAgICAgICB4 ID0gMDsKLSAgICAgICAgICAgIGlmIChncl9jb3VuKSB7ICAgICAgICAgICAgICAvKiBTaG93IG1h dGNoIGNvdW50IG9ubHkgKi8KLSAgICAgICAgICAgICAgICBmcHJpbnRmKG9mcCwiJXM6JWRcbiIs bmFtZSxjb3VudCk7Ci0gICAgICAgICAgICAgICAgeCsrOwotICAgICAgICAgICAgfSBlbHNlIGlm IChncl9uYW1lICYmIGNvdW50ID4gMCkgeyAvKiBTaG93IG5hbWUgb25seSAqLwotICAgICAgICAg ICAgICAgIGZwcmludGYob2ZwLCIlc1xuIixuYW1lKTsKLSAgICAgICAgICAgICAgICB4Kys7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeCA+IDApIHsKLSAgICAgICAgICAgICAgICBp ZiAoKytzbGluZSA+IGNtZF9yb3dzIC0gMykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWFz a21vcmUoKSkgZ290byB4Z3JlcDsgZWxzZSBzbGluZSA9IDA7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJpZ2NvdW50ICs9IGNvdW50OyAgICAg ICAgICAgICAgLyogT3ZlcmFsbCBjb3VudCAqLwotICAgIH0KLSAgeGdyZXA6Ci0jaWZuZGVmIE5P U1BMCi0gICAgaWYgKGdyX2NvdW4gJiYgY3YpIHsgICAgICAgICAgICAgICAgLyogL0NPVU5UOmJs YWggKi8KLSAgICAgICAgYWRkbWFjKGN2LGNraXRvYShiaWdjb3VudCkpOyAgICAvKiBzZXQgdGhl IHZhcmlhYmxlICovCi0gICAgICAgIG1ha2VzdHIoJmN2LE5VTEwpOyAgICAgICAgICAgICAgLyog ZnJlZSB0aGlzICovCi0gICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgaWYgKGZwKSBmY2xv c2UoZnApOyAgICAgICAgICAgICAgICAgLyogY2xvc2UgaW5wdXQgZmlsZSBpZiBzdGlsbCBvcGVu ICovCi0gICAgaWYgKG9mcCAhPSBzdGRvdXQpIHsgICAgICAgICAgICAgICAgLyogQ2xvc2UgYW55 IG91dHB1dCBmaWxlICovCi0gICAgICAgIGlmIChvZnApIGZjbG9zZShvZnApOwotICAgICAgICBv ZnAgPSBzdGRvdXQ7Ci0gICAgfQotICAgIHJldHVybihzdWNjZXNzID0gbWMgPyAxIDogMCk7Ci19 Ci0KLS8qIFN5c3RlbS1pbmRlcGVuZGVudCBkaXJlY3RvcnkgKi8KLQotc3RhdGljIGNoYXIgKiog ZGlybGlzdCA9IE5VTEw7Ci1zdGF0aWMgaW50IG5kaXJsaXN0ID0gMDsKLQotc3RhdGljIFZPSUQK LWZyZWVkaXJsaXN0KCkgewotICAgIGlmIChkaXJsaXN0KSB7Ci0gICAgICAgIGludCBpOwotICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgbmRpcmxpc3Q7IGkrKykgewotICAgICAgICAgICAgaWYgKGRp cmxpc3RbaV0pCi0gICAgICAgICAgICAgIGZyZWUoZGlybGlzdFtpXSk7Ci0gICAgICAgIH0KLSAg ICAgICAgZnJlZSgoY2hhciAqKWRpcmxpc3QpOwotICAgICAgICBkaXJsaXN0ID0gTlVMTDsKLSAg ICB9Ci0gICAgbmRpcmxpc3QgPSAwOwotfQotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBkaXJzd3Rh YltdID0geyAgICAgLyogRElSRUNUT1JZIGNvbW1hbmQgc3dpdGNoZXMgKi8KLSAgICB7ICIvYWZ0 ZXIiLCAgICAgICBESVJfQUZULCBDTV9BUkcgfSwKLSAgICB7ICIvYWxsIiwgICAgICAgICBESVJf QUxMLCAwIH0sCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiL2FycmF5IiwgICAgICAgRElSX0FSUiwg Q01fQVJHIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB7ICIvYXNjZW5kaW5nIiwgICBESVJf QVNDLCAwIH0sCi0gICAgeyAiL2JhY2t1cCIsICAgICAgRElSX0JVUCwgMCB9LAotICAgIHsgIi9i ZWZvcmUiLCAgICAgIERJUl9CRUYsIENNX0FSRyB9LAotICAgIHsgIi9icmllZiIsICAgICAgIERJ Ul9CUkYsIDAgfSwKLSAgICB7ICIvY291bnQiLCAgICAgICBESVJfQ09VLCBDTV9BUkcgfSwKLSAg ICB7ICIvZGVzY2VuZGluZyIsICBESVJfRFNDLCBDTV9JTlYgfSwKLSAgICB7ICIvZGlyZWN0b3Jp ZXMiLCBESVJfRElSLCAwIH0sCi0gICAgeyAiL2RvdGZpbGVzIiwgICAgRElSX0RPVCwgMCB9LAot ICAgIHsgIi9lbmdsaXNoZGF0ZSIsIERJUl9EQVQsIDAgfSwKLSAgICB7ICIvZXhjZXB0IiwgICAg ICBESVJfRVhDLCBDTV9BUkcgfSwKLSAgICB7ICIvZmlsZXMiLCAgICAgICBESVJfRklMLCAwIH0s Ci0gICAgeyAiL2hlYWRpbmciLCAgICAgRElSX0hERywgMCB9LAotICAgIHsgIi9pc29kYXRlIiwg ICAgIERJUl9JU08sIDAgfSwKLSAgICB7ICIvbGFyZ2VyLXRoYW4iLCBESVJfTEFSLCBDTV9BUkcg fSwKLSNpZmRlZiBDS1NZTUxJTksKLSAgICB7ICIvZm9sbG93bGlua3MiLCBESVJfTE5LLCAwIH0s Ci0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0gICAgeyAiL21lc3NhZ2UiLCAgICAgRElSX01TRywg Q01fQVJHIH0sCi0gICAgeyAiL25vYmFja3VwZmlsZXMiLERJUl9OT0IsIDAgfSwKLSAgICB7ICIv bm9kb3RmaWxlcyIsICBESVJfTk9ELCAwIH0sCi0jaWZkZWYgQ0tTWU1MSU5LCi0gICAgeyAiL25v Zm9sbG93bGlua3MiLERJUl9OTEssIDAgfSwKLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLSAgICB7 ICIvbm9oZWFkaW5nIiwgICBESVJfTk9ILCAwIH0sCi0jaWZkZWYgQ0tTWU1MSU5LCi0gICAgeyAi L25vbGlua3MiLCAgICAgRElSX05PTCwgMCB9LAotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotICAg IHsgIi9ub21lc3NhZ2UiLCAgIERJUl9OT00sIDAgfSwKLSNpZmRlZiBDS19UVEdXU0laCi0gICAg eyAiL25vcGFnZSIsICAgICAgRElSX05PUCwgMCB9LAotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8K LSNpZmRlZiBSRUNVUlNJVkUKLSAgICB7ICIvbm9yZWN1cnNpdmUiLCBESVJfTk9SLCAwIH0sCi0j ZWxzZQotI2lmZGVmIFZNUwotICAgIHsgIi9ub3JlY3Vyc2l2ZSIsIERJUl9OT1IsIDAgfSwKLSNl bHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICB7ICIvbm9yZWN1cnNpdmUiLCBESVJfTk9SLCAw IH0sCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAv KiBSRUNVUlNJVkUgKi8KLSAgICB7ICIvbm9zb3J0IiwgICAgICBESVJfTk9TLCAwIH0sCi0gICAg eyAiL25vdC1hZnRlciIsICAgRElSX05BRiwgQ01fQVJHIH0sCi0gICAgeyAiL25vdC1iZWZvcmUi LCAgRElSX05CRiwgQ01fQVJHIH0sCi0gICAgeyAiL25vdC1zaW5jZSIsICAgRElSX05BRiwgQ01f SU5WfENNX0FSRyB9LAotICAgIHsgIi9ub3hmZXJtb2RlIiwgIERJUl9OT1QsIDAgfSwKLSAgICB7 ICIvb3V0cHV0IiwgICAgICBESVJfT1VULCBDTV9BUkcgfSwKLSNpZmRlZiBDS19UVEdXU0laCi0g ICAgeyAiL3BhZ2UiLCAgICAgICAgRElSX1BBRywgMCB9LAotI2VuZGlmIC8qIENLX1RUR1dTSVog Ki8KLSNpZmRlZiBSRUNVUlNJVkUKLSAgICB7ICIvcmVjdXJzaXZlIiwgICBESVJfUkVDLCAwIH0s Ci0jZWxzZQotI2lmZGVmIFZNUwotICAgIHsgIi9yZWN1cnNpdmUiLCAgIERJUl9SRUMsIDAgfSwK LSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICB7ICIvcmVjdXJzaXZlIiwgICBESVJfUkVD LCAwIH0sCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRp ZiAvKiBSRUNVUlNJVkUgKi8KLSAgICB7ICIvcmV2ZXJzZSIsICAgICBESVJfRFNDLCAwIH0sCi0g ICAgeyAiL3NpbmNlIiwgICAgICAgRElSX0FGVCwgQ01fQVJHfENNX0lOViB9LAotICAgIHsgIi9z bWFsbGVyLXRoYW4iLERJUl9TTUEsIENNX0FSRyB9LAotICAgIHsgIi9zb3J0IiwgICAgICAgIERJ Ul9TUlQsIENNX0FSRyB9LAotICAgIHsgIi9zdW1tYXJ5IiwgICAgIERJUl9TVU0sIDAgfSwKLSAg ICB7ICIvdG9wIiwgICAgICAgICBESVJfVE9QLCBDTV9BUkcgfSwKLSAgICB7ICIvdHlwZSIsICAg ICAgICBESVJfQklOLCBDTV9BUkcgfSwKLSAgICB7ICIveGZlcm1vZGUiLCAgICBESVJfVFlQLCAw IH0sCi0gICAgeyAiL3ZlcmJvc2UiLCAgICAgRElSX1ZSQiwgMCB9LAotICAgIHsgIiIsMCwwIH0K LX07Ci1zdGF0aWMgaW50IG5kaXJzd3RhYiA9IChzaXplb2YoZGlyc3d0YWIpIC8gc2l6ZW9mKHN0 cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGRpcnNvcnRbXSA9IHsg ICAgICAvKiBESVJFQ1RPUlkgL1NPUlQ6IG9wdGlvbnMgKi8KLSAgICB7ICJkYXRlIiwgICAgICAg ICBESVJTX0RULCAwIH0sCi0gICAgeyAibmFtZSIsICAgICAgICAgRElSU19OTSwgMCB9LAotICAg IHsgInNpemUiLCAgICAgICAgIERJUlNfU1osIDAgfQotfTsKLXN0YXRpYyBpbnQgbmRpcnNvcnQg PSAoc2l6ZW9mKGRpcnNvcnQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RhdGljIGlu dCBkaXJfZGF0ZSA9IC0xOyAgICAgICAgICAgICAgIC8qIE9wdGlvbiBkZWZhdWx0cyAoLTEgbWVh bnMgbm9uZSkgKi8KLXN0YXRpYyBpbnQgZGlyX3BhZ2UgPSAtMTsKLXN0YXRpYyBpbnQgZGlyX3Zl cmIgPSAgMTsKLXN0YXRpYyBpbnQgZGlyX21zZyAgPSAtMTsKLSNpZmRlZiBWTVMKLXN0YXRpYyBp bnQgZGlyX3NvcnQgPSAtMTsgICAgICAgICAgICAgICAvKiBOYW1lcyBhcmUgYWxyZWFkeSBzb3J0 ZWQgaW4gVk1TICovCi1zdGF0aWMgaW50IGRpcl9ydnJzID0gLTE7Ci0jZWxzZQotc3RhdGljIGlu dCBkaXJfc29ydCA9ICAxOyAgICAgICAgICAgICAgIC8qIFNvcnQgYnkgZGVmYXVsdCAqLwotc3Rh dGljIGludCBkaXJfcnZycyA9ICAwOyAgICAgICAgICAgICAgIC8qIE5vdCBpbiByZXZlcnNlICov Ci0jZW5kaWYgLyogVk1TICovCi1zdGF0aWMgaW50IGRpcl9za2V5ID0gRElSU19OTTsgICAgICAg ICAgLyogQnkgbmFtZSAqLwotI2lmZGVmIFJFQ1VSU0lWRQotc3RhdGljIGludCBkaXJfcmVjdSA9 IC0xOwotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotc3RhdGljIGludCBkaXJfbW9kZSA9IC0xOwot c3RhdGljIGludCBkaXJfc2hvdyA9IC0xOyAgICAgICAgICAgICAgIC8qIFNob3cgYWxsIGZpbGVz IGJ5IGRlZmF1bHQgKi8KLWludCBkaXJfZG90cyA9ICAtMTsJCQkvKiBFeGNlcHQgZG90IGZpbGVz ICovCi1pbnQgZGlyX2JhY2sgPSAgMTsKLWludCBkaXJfaGVhZCA9ICAwOwotc3RhdGljIGNoYXIg KiBkaXJtc2cgPSBOVUxMOwotc3RhdGljIGludCBkaXJtc2dsZW4gPSAwOwotCi0jaWZuZGVmIE5P U0hPVwotVk9JRAotc2hvd2Rpcm9wdHMoKSB7Ci0gICAgaW50IHggPSAwOwotICAgIGV4dGVybiBp bnQgb3B0bGluZXM7Ci0gICAgcHJ0b3B0KCZvcHRsaW5lcywiRElSRUNUT1JZIik7Ci0gICAgaWYg KGRpcl9zaG93ID4gMCkgewotICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLChkaXJfc2hvdyA9PSAx KSA/ICIvRklMRVMiIDoKLSAgICAgICAgICAgICAgICgoZGlyX3Nob3cgPT0gMikgPyAiL0RJUkVD VE9SSUVTIiA6ICIvQUxMIikpOwotICAgICAgICB4Kys7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg cHJ0b3B0KCZvcHRsaW5lcywiL0FMTCIpOwotICAgICAgICB4Kys7Ci0gICAgfQotICAgIGlmIChk aXJfdmVyYiA+IC0xKSB7Ci0gICAgICAgIHBydG9wdCgmb3B0bGluZXMsZGlyX3ZlcmIgPyAiL1ZF UkJPU0UiIDogIi9CUklFRiIpOwotICAgICAgICB4Kys7Ci0gICAgfQotICAgIGlmIChkaXJfcGFn ZSA+IC0xKSB7Ci0gICAgICAgIHBydG9wdCgmb3B0bGluZXMsZGlyX3BhZ2UgPyAiL1BBR0UiIDog Ii9OT1BBR0UiKTsKLSAgICAgICAgeCsrOwotICAgIH0KLSAgICBpZiAoZGlyX2RhdGUgPiAtMSkg ewotICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLGRpcl9kYXRlID8gIi9FTkdMSVNIREFURSIgOiAi L0lTT0RBVEUiKTsKLSAgICAgICAgeCsrOwotICAgIH0KLSAgICBpZiAoZGlyX2RvdHMgPiAtMSkg ewotICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLGRpcl9kb3RzID8gIi9ET1RGSUxFUyIgOiAiL05P RE9URklMRVMiKTsKLSAgICAgICAgeCsrOwotICAgIH0KLSAgICBpZiAoZGlyX2JhY2sgPiAtMSkg ewotICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLGRpcl9iYWNrID8gIi9CQUNLVVAiIDogIi9OT0JB Q0tVUCIpOwotICAgICAgICB4Kys7Ci0gICAgfQotICAgIGlmIChkaXJfaGVhZCA+IC0xKSB7Ci0g ICAgICAgIHBydG9wdCgmb3B0bGluZXMsZGlyX2hlYWQgPyAiL0hFQURJTkciIDogIi9OT0hFQURJ TkciKTsKLSAgICAgICAgeCsrOwotICAgIH0KLSNpZmRlZiBSRUNVUlNJVkUKLSAgICBpZiAoZGly X3JlY3UgPiAtMSkgewotICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLGRpcl9yZWN1ID8gIi9SRUNV UlNJVkUiIDogIi9OT1JFQ1VSU0lWRSIpOwotICAgICAgICB4Kys7Ci0gICAgfQotI2VuZGlmIC8q IFJFQ1VSU0lWRSAqLwotICAgIGlmIChkaXJfbW9kZSA+IC0xKSB7Ci0gICAgICAgIHBydG9wdCgm b3B0bGluZXMsZGlyX21vZGUgPyAiL1hGRVJNT0RFIiA6ICIvTk9YRkVSTU9ERSIpOwotICAgICAg ICB4Kys7Ci0gICAgfQotICAgIGlmIChkaXJfc29ydCA9PSAwKSB7Ci0gICAgICAgIHgrKzsKLSAg ICAgICAgcHJ0b3B0KCZvcHRsaW5lcywiL05PU09SVCAiKTsKLSAgICB9IGVsc2UgaWYgKGRpcl9z b3J0ID4gMCkgewotICAgICAgICB4Kys7Ci0gICAgICAgIGlmIChkaXJfc2tleSA9PSBESVJTX05N KSBzID0gIi9TT1JUOk5BTUUiOwotICAgICAgICBlbHNlIGlmIChkaXJfc2tleSA9PSBESVJTX1Na KSBzID0gIi9TT1JUOlNJWkUiOwotICAgICAgICBlbHNlIGlmIChkaXJfc2tleSA9PSBESVJTX0RU KSBzID0gIi9TT1JUOkRBVEUiOwotICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLHMpOwotICAgIH0K LSAgICBpZiAoZGlyX3J2cnMgPiAtMSkgewotICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLGRpcl9y dnJzID8gIi9SRVZFUlNFIiA6ICIvQVNDRU5ESU5HIik7Ci0gICAgICAgIHgrKzsKLSAgICB9Ci0g ICAgaWYgKGRpcl9tc2cgPiAtMSkgewotICAgICAgICBpZiAoZGlyX21zZyA9PSAwKSB7Ci0gICAg ICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLCIvTk9NRVNTQUdFIik7Ci0gICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICBja21ha21zZyh0bXBidWYsVE1QQlVGU0laLCIvTUVTU0FHRTp7IixkaXJt c2csIn0iLE5VTEwpOwotICAgICAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcyx0bXBidWYpOwotICAg ICAgICB9Ci0gICAgICAgIHgrKzsKLSAgICB9Ci0gICAgaWYgKCF4KSBwcnRvcHQoJm9wdGxpbmVz LCIobm8gb3B0aW9ucyBzZXQpIik7Ci0gICAgcHJ0b3B0KCZvcHRsaW5lcywiIik7Ci19Ci0jZW5k aWYgLyogTk9TSE9XICovCi0KLWludAotc2V0ZGlyb3B0cygpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNldCBESVJFQ1RPUlkgb3B0aW9uIGRlZmF1bHRzICovCi0gICAgaW50IHhiID0g LTEsIHh2ID0gLTEsIHhwID0gLTEsIHhkID0gLTEsIHhoID0gLTEsIHhmID0gLTE7Ci0gICAgaW50 IHhrID0gLTEsIHhyID0gLTEsIHhzID0gLTEsIHh4ID0gLTEsIHhtID0gLTEsIHhhID0gLTEsIHhn ID0gLTE7Ci0gICAgaW50IGdldHZhbDsKLSAgICBjaGFyIGM7Ci0gICAgd2hpbGUgKDEpIHsKLSAg ICAgICAgaWYgKCh5ID0gY21zd2koZGlyc3d0YWIsbmRpcnN3dGFiLCJTd2l0Y2giLCIiLHh4c3Ry aW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoeSA9PSAtMykKLSAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAg fQotICAgICAgICBjID0gY21nYnJrKCk7Ci0gICAgICAgIGlmICgoZ2V0dmFsID0gKGMgPT0gJzon IHx8IGMgPT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAg IHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwotICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWdldHZhbCAmJiAo Y21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRj aCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAg ICAgICB9Ci0gICAgICAgIHN3aXRjaCAoeSkgewotICAgICAgICAgIGNhc2UgRElSX0JSRjogeHYg PSAwOyBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9WUkI6IHh2ID0gMTsgYnJlYWs7Ci0gICAg ICAgICAgY2FzZSBESVJfUEFHOiB4cCA9IDE7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX05P UDogeHAgPSAwOyBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9JU086IHhkID0gMDsgYnJlYWs7 Ci0gICAgICAgICAgY2FzZSBESVJfREFUOiB4ZCA9IDE7IGJyZWFrOwotICAgICAgICAgIGNhc2Ug RElSX0hERzogeGggPSAxOyBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9OT0g6IHhoID0gMDsg YnJlYWs7Ci0gICAgICAgICAgY2FzZSBESVJfRE9UOiB4ZiA9IDE7IGJyZWFrOwotICAgICAgICAg IGNhc2UgRElSX05PRDogeGYgPSAwOyBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9BTEw6IHhh ID0gMzsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBESVJfRElSOiB4YSA9IDI7IGJyZWFrOwotICAg ICAgICAgIGNhc2UgRElSX0ZJTDogeGEgPSAxOyBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9T UlQ6Ci0gICAgICAgICAgICB4ID0gRElSU19OTTsKLSAgICAgICAgICAgIGlmIChnZXR2YWwpCi0g ICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KGRpcnNvcnQsbmRpcnNvcnQsIlNvcnQga2V5Iiwi bmFtZSIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAg ICAgICAgeGsgPSB4OwotICAgICAgICAgICAgeHMgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSBESVJfTk9TOiB4cyA9IDA7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElS X0FTQzogeHggPSAwOyBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9EU0M6IHh4ID0gMTsgYnJl YWs7Ci0gICAgICAgICAgY2FzZSBESVJfUkVDOiB4ciA9IDE7IGJyZWFrOwotICAgICAgICAgIGNh c2UgRElSX05PUjogeHIgPSAwOyBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9UWVA6IHhtID0g MTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBESVJfTk9UOiB4bSA9IDA7IGJyZWFrOwotICAgICAg ICAgIGNhc2UgRElSX0JVUDogeGIgPSAxOyBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9OT0I6 IHhiID0gMDsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBESVJfTk9NOiB4ZyA9IDA7IGJyZWFrOwot ICAgICAgICAgIGNhc2UgRElSX01TRzoKLSAgICAgICAgICAgIGlmIChnZXR2YWwpCi0gICAgICAg ICAgICAgIGlmICgoeCA9IGNtZmxkKCJNZXNzYWdlIHRvIGFwcGVuZCB0byBlYWNoIGxpbmUiLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICkpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgICAgICB4ZyA9IDE7Ci0gICAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLGJyc3Ry aXAocyksVE1QQlVGU0laKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6 Ci0gICAgICAgICAgICBwcmludGYoIj9UaGlzIG9wdGlvbiBjYW4gbm90IGJlIHNldFxuIik7Ci0g ICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgICAgICAgICAgICAgIC8qIEdldCBjb25maXJtYXRpb24gKi8KLSAgICAgIHJl dHVybih4KTsKLSAgICBpZiAoeHYgPiAtMSkgZGlyX3ZlcmIgPSB4djsgICAgICAgICAvKiBDb25m aXJtZWQsIHNhdmUgZGVmYXVsdHMgKi8KLSAgICBpZiAoeHAgPiAtMSkgZGlyX3BhZ2UgPSB4cDsK LSAgICBpZiAoeGQgPiAtMSkgZGlyX2RhdGUgPSB4ZDsKLSAgICBpZiAoeGggPiAtMSkgZGlyX2hl YWQgPSB4aDsKLSAgICBpZiAoeHMgPiAtMSkgZGlyX3NvcnQgPSB4czsKLSAgICBpZiAoeGsgPiAt MSkgZGlyX3NrZXkgPSB4azsKLSAgICBpZiAoeHggPiAtMSkgZGlyX3J2cnMgPSB4eDsKLSAgICBp ZiAoeGYgPiAtMSkgZGlyX2RvdHMgPSB4ZjsKLSAgICBpZiAoeGEgPiAtMSkgZGlyX3Nob3cgPSB4 YTsKLSAgICBpZiAoeG0gPiAtMSkgZGlyX21vZGUgPSB4bTsKLSAgICBpZiAoeGIgPiAtMSkgZGly X2JhY2sgPSB4YjsKLSNpZmRlZiBSRUNVUlNJVkUKLSAgICBpZiAoeHIgPiAtMSkgZGlyX3JlY3Ug PSB4cjsKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSAgICBpZiAoeGcgPiAtMSkgZGlyX21zZyAg PSB4ZzsKLSAgICBpZiAoeGcgPiAwKQotICAgICAgbWFrZXN0cigmZGlybXNnLHRtcGJ1Zik7Ci0g ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLX0KLQotaW50Ci1kb215ZGlyKGN4KSBpbnQgY3g7IHsJ CQkvKiBJbnRlcm5hbCBESVJFQ1RPUlkgY29tbWFuZCAqLwotICAgIGV4dGVybiBjaGFyICptb250 aHNbXTsKLSNpZmRlZiBWTVMKLSAgICBfUFJPVE9UWVAoIGNoYXIgKiB6cmVsbmFtZSwgKGNoYXIg KixjaGFyICopICk7Ci0gICAgY2hhciAqIGNkcCA9IE5VTEw7Ci0jZW5kaWYgLyogVk1TICovCi0K LSAgICBjaGFyIG5hbWVbQ0tNQVhQQVRIKzFdLCBvdXRmaWxlW0NLTUFYUEFUSCsxXSwgKnAgPSBO VUxMLCBjID0gTlVMOwotICAgIGNoYXIgbGluZWJ1ZltDS01BWFBBVEgrMjU2XTsKLSAgICBjaGFy ICogbXN0ciA9IE5VTEwsICogZHN0ciA9IE5VTEwsICogczIgPSBOVUxMLCAqIGN2ID0gTlVMTDsK LSAgICBDS19PRkZfVCBsZW4gPSAoQ0tfT0ZGX1QpMCwgbmJ5dGVzID0gKENLX09GRl9UKTA7Ci0g ICAgQ0tfT0ZGX1QgbWluc2l6ZSA9IChDS19PRkZfVCktMSwgbWF4c2l6ZSA9IChDS19PRkZfVCkt MTsKLSAgICBsb25nIG5kaXJzID0gMCwgbmZpbGVzID0gMCwgbm1hdGNoZXMgPSAwOwotICAgIGlu dCB2ZXJib3NlID0gMCwgd2lsZCA9IDAsIHBhZ2UgPSAwLCBuID0gMCwgZW5nZGF0ZSA9IDAsIHN1 bW1hcnkgPSAwOwotICAgIGludCBoZWFkaW5nID0gMCwgeHNvcnQgPSAwLCByZXZlcnNlID0gMCwg c29ydGJ5ID0gMCwgbXNnID0gMDsKLSAgICBpbnQgaywgaSA9IDAsIHggPSAwLCBueCA9IDAsIHNr ZXkgPSAwLCBkbGVuID0gMCwgaXRzYWRpciA9IDA7Ci0gICAgaW50IHNob3cgPSAzLCB4ZmVybW9k ID0gMCwgYmFja3VwID0gMSwgcmMgPSAwLCBnZXR2YWwgPSAwOwotICAgIGludCB0b3VjaCA9IDA7 Ci0gICAgaW50IGZzID0gMDsKLSAgICBpbnQgbXVsdGlwbGUgPSAwOwotICAgIGludCBjbWlmbjEg PSAxLCBjbWlmbjIgPSAwOwotICAgIGludCBkaXJfdG9wID0gMCwgZGlyX2NvdSA9IDA7Ci0gICAg aW50IGRvbnRzaG93bGlua3MgPSAwOwotICAgIGludCBkb250Zm9sbG93bGlua3MgPSAwOwotICAg IGludCBhcnJheWluZGV4ID0gLTE7Ci0gICAgc3RydWN0IEZEQiBzdywgZmksIGZsOwotICAgIGNo YXIgZGJ1ZlszMl0sIHhidWZbMzJdOwotCi0jaWZuZGVmIE5PU1BMCi0gICAgY2hhciBhcnJheSA9 IE5VTDsKLSAgICBjaGFyICoqIGFwID0gTlVMTDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIGNo YXIKLSAgICAgICogZGlyX2FmdCA9IE5VTEwsCi0gICAgICAqIGRpcl9iZWYgPSBOVUxMLAotICAg ICAgKiBkaXJfbmFmID0gTlVMTCwKLSAgICAgICogZGlyX25iZiA9IE5VTEwsCi0gICAgICAqIGRp cl9leGMgPSBOVUxMOwotICAgIGNoYXIgKiB4bGlzdFsxNl07Ci0KLSAgICBkZWJ1ZyhGMTAxLCJk b215ZGlyIGN4IiwiIixjeCk7Ci0KLSAgICBnX21hdGNoZG90ID0gbWF0Y2hkb3Q7ICAgICAgICAg ICAgICAvKiBTYXZlIGdsb2JhbCBtYXRjaGRvdCBzZXR0aW5nICovCi0jaWZkZWYgQ09NTUVOVAot ICAgIG5vbGlua3MgPSAyOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIChpdCBzaG91bGQgYWxy ZWFkeSBiZSAyKSAqLwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLSAgICBvdXRmaWxlWzBdID0gTlVM OyAgICAgICAgICAgICAgICAgICAvKiBObyBvdXRwdXQgZmlsZSB5ZXQgKi8KLQotICAgIGlmIChv ZnAgIT0gc3Rkb3V0KSB7ICAgICAgICAgICAgICAgIC8qIEluIGNhc2Ugb2YgcHJldmlvdXMgaW50 ZXJydXB0aW9uICovCi0gICAgICAgIGlmIChvZnApIGZjbG9zZShvZnApOwotICAgICAgICBvZnAg PSBzdGRvdXQ7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB4bGlzdFtpXSA9 IE5VTEw7Ci0KLSAgICBkaXJfdG9wID0gMDsKLSAgICBuYW1lWzBdID0gTlVMOwotICAgIGZyZWVk aXJsaXN0KCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEluIGNhc2Ugbm90IGZyZWVkIGxhc3Qg dGltZSAqLwotICAgIHBhZ2UgICAgICA9IGRpcl9wYWdlID4gLTEgPyBkaXJfcGFnZSA6IHhhc2tt b3JlOyAvKiBTZXQgb3B0aW9uIGRlZmF1bHRzICovCi0gICAgZW5nZGF0ZSAgID0gZGlyX2RhdGUg PiAtMSA/IGRpcl9kYXRlIDogMDsKLSAgICB2ZXJib3NlICAgPSBkaXJfdmVyYiA+IC0xID8gZGly X3ZlcmIgOiAxOwotICAgIGhlYWRpbmcgICA9IGRpcl9oZWFkID4gLTEgPyBkaXJfaGVhZCA6IDA7 Ci0gICAgeHNvcnQgICAgID0gZGlyX3NvcnQgPiAtMSA/IGRpcl9zb3J0IDogMDsKLSAgICBzb3J0 YnkgICAgPSBkaXJfc2tleSA+IC0xID8gZGlyX3NrZXkgOiAwOwotICAgIHJldmVyc2UgICA9IGRp cl9ydnJzID4gLTEgPyBkaXJfcnZycyA6IDA7Ci0gICAgbXNnICAgICAgID0gZGlyX21zZyAgPiAt MSA/IGRpcl9tc2cgIDogMDsKLSNpZmRlZiBVTklYT1JPU0sKLSAgICBpZiAoZGlyX2RvdHMgPiAt MSkgbWF0Y2hkb3QgPSBkaXJfZG90czsKLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSAgICB4ZmVy bW9kICAgPSBkaXJfbW9kZSA+IC0xID8gZGlyX21vZGUgOiAwOwotICAgIGJhY2t1cCAgICA9IGRp cl9iYWNrID4gLTEgPyBkaXJfYmFjayA6IDE7Ci0jaWZkZWYgUkVDVVJTSVZFCi0gICAgcmVjdXJz aXZlID0gZGlyX3JlY3UgPiAtMSA/IGRpcl9yZWN1IDogMDsKLSNlbmRpZiAvKiBSRUNVUlNJVkUg Ki8KLSAgICBzaG93ICAgICAgPSBkaXJfc2hvdyA+IC0xID8gZGlyX3Nob3cgOiAzOwotCi0gICAg aWYgKGN4ID09IFhYV0RJUikgewkJCS8qIFdESVJFQ1RPUlkgKi8KLQlkZWJ1ZyhGMTAwLCJkb215 ZGlyIFdESVJFQ1RPUlkiLCIiLDApOwotCXJldmVyc2UgPSAxOwkJCS8qIFJldmVyc2UgY2hyb25v bG9naWNhbCBvcmRlciAqLwotCXhzb3J0ID0gMTsKLQlzb3J0YnkgPSBESVJTX0RUOwotICAgIH0g ZWxzZSBpZiAoY3ggPT0gWFhIRElSKSB7CQkvKiBIRElSRUNUT1JZICovCi0JZGVidWcoRjEwMCwi ZG9teWRpciBIRElSRUNUT1JZIiwiIiwwKTsKLQlyZXZlcnNlID0gMTsJCQkvKiBSZXZlcnNlIG9y ZGVyIGJ5IHNpemUgKi8KLQl4c29ydCA9IDE7Ci0Jc29ydGJ5ID0gRElSU19TWjsKLSAgICB9IGVs c2UgaWYgKGN4ID09IFhYVE9VQykgewotCXRvdWNoID0gMTsKLQl2ZXJib3NlID0gMDsKLSAgICB9 CQotCi0jaWZkZWYgQ0tfVFRHV1NJWgotI2lmZGVmIE9TMgotICAgIHR0Z2N3c3ooKTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFNjcmVlbiBsZW5ndGggZm9yIG1vcmUtcHJvbXB0aW5nICov Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICAvKiBDaGVjayB3aGV0aGVyIHdpbmRvdyBzaXplIGNoYW5n ZWQgKi8KLSAgICBpZiAodHRnd3NpeigpID4gMCkgewotICAgICAgICBpZiAodHRfcm93cyA+IDAg JiYgdHRfY29scyA+IDApIHsKLSAgICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93czsKLSAgICAg ICAgICAgIGNtZF9jb2xzID0gdHRfY29sczsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBP UzIgKi8KLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0KLSAgICBkaXJhY3RpdmUgPSAxOwotICAg IGNtaWZuMSA9IG5vbGlua3MgfCAxOyAgICAgICAgICAgICAgIC8qIDEgPSBmaWxlcyBvciBkaXJl Y3RvcmllcyAqLwotICAgIGNtaWZuMiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAg PSBub3QgZGlyZWN0b3JpZXMgb25seSAqLwotCi0gIGFnYWluOgotCi0gICAgY21mZGJpKCZzdywg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAq LwotICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0g ICAgICAgICAgICJFbnRlciBvciBSZXR1cm4gdG8gY29uZmlybSB0aGUgY29tbWFuZCwgb3JcblwK LSBmaWxlIHNwZWNpZmljYXRpb24sIG9yIHN3aXRjaCIsCi0gICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIG5kaXJz d3RhYiwgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXpl ICovCi0gICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAg ICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgZGlyc3d0YWIs ICAgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICZmaSAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAg ICAgICApOwotICAgIGNtZmRiaSgmZmksICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDJuZCBG REIgLSBmaWxlc3BlYyB0byBtYXRjaCAqLwotICAgICAgICAgICBfQ01JRkksICAgICAgICAgICAg ICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICJGaWxlIHNwZWNpZmljYXRpb24iLCAg ICAgICAgLyogaGxwbXNnICovCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICAgICAgICAgIisiLCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGZpbGVzcGVjIGlzIHdpbGRjYXJkICov Ci0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhhdCBtYXRjaGVz IGFsbCBmaWxlcy4uLiAqLwotI2lmZGVmIFZNUwotICAgICAgICAgICAiKi4qIiwKLSNlbHNlCi0g ICAgICAgICAgICIqIiwKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAq LwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmlu ZyBkYXRhICovCi0gICAgICAgICAgIGNtaWZuMSwKLSAgICAgICAgICAgY21pZm4yLCAgICAgICAg ICAgICAgICAgICAgICAvKiAxID0gb25seSBkaXJzOyAwIGZpbGVzIG9yIGRpcnMgKi8KLSAgICAg ICAgICAgeHhzdHJpbmcsCi0gICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICZmbAotICAgICAg ICAgICApOwotICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueXRo aW5nIHRoYXQgZG9lc24ndCBtYXRjaCAqLwotICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAg ICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLSAgICAgICAgICAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotICAgICAgICAg ICB4eHN0cmluZywKLSAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgTlVMTAotICAgICAgICAg ICApOwotICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIDAg b3IgbW9yZSBzd2l0Y2hlcyAqLwotICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAg ICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJkb215ZGlyIGNt ZmRiIiwiIix4KTsKLSAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgIHJldHVybih4KTsgCi0g ICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpICAgLyogQnJlYWsgb3V0IGlmIG5v dCBhIHN3aXRjaCAqLwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjID0gY21nYnJrKCk7Ci0g ICAgICAgIGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShjbWdrd2Zs Z3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMg bm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAg ICAgfQotCWsgPSBjbXJlc3VsdC5ucmVzdWx0OwotICAgICAgICBpZiAoIWdldHZhbCAmJgotCSAg ICAoY21na3dmbGdzKCkgJiBDTV9BUkcpICYmIGsgIT0gRElSX1RPUCAmJiBrICE9IERJUl9DT1Up IHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50 XG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNo IChrKSB7Ci0gICAgICAgICAgY2FzZSBESVJfQ09VOiB7Ci0gICAgICAgICAgICAgIGRpcl9jb3Ur KzsKLSAgICAgICAgICAgICAgaWYgKGdldHZhbCkgewotICAgICAgICAgICAgICAgICAgaWYgKCh4 ID0gY21mbGQoIlZhcmlhYmxlIGZvciByZXN1bHQiLCIiLCZzLE5VTEwpKSA8IDApCi0gICAgICAg ICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmN2LHMp OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg ICAgICAgICBjYXNlIERJUl9CUkY6IHZlcmJvc2UgPSAwOyBicmVhazsKLSAgICAgICAgICBjYXNl IERJUl9WUkI6IHZlcmJvc2UgPSAxOyBicmVhazsKLSNpZmRlZiBDS19UVEdXU0laCi0gICAgICAg ICAgY2FzZSBESVJfUEFHOiBwYWdlID0gMTsgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBESVJf Tk9QOiBwYWdlID0gMDsgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotICAgICAg ICAgIGNhc2UgRElSX0lTTzogZW5nZGF0ZSA9IDA7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElS X0RBVDogZW5nZGF0ZSA9IDE7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX0hERzogaGVhZGlu ZyA9IDE7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX05PSDogaGVhZGluZyA9IDA7IGJyZWFr OwotI2lmZGVmIFVOSVhPUk9TSwotICAgICAgICAgIGNhc2UgRElSX0RPVDogbWF0Y2hkb3QgPSAx OyBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9OT0Q6IG1hdGNoZG90ID0gMDsgYnJlYWs7Ci0j ZW5kaWYgLyogVU5JWE9ST1NLICovCi0gICAgICAgICAgY2FzZSBESVJfQUxMOgotICAgICAgICAg ICAgc2hvdyA9IDM7Ci0gICAgICAgICAgICBjbWlmbjEgfD0gMTsKLSAgICAgICAgICAgIGNtaWZu MiA9IDA7Ci0gICAgICAgICAgICBnb3RvIGFnYWluOwotICAgICAgICAgIGNhc2UgRElSX0RJUjoK LSAgICAgICAgICAgIHNob3cgPSAyOwotICAgICAgICAgICAgY21pZm4xIHw9IDE7Ci0gICAgICAg ICAgICBjbWlmbjIgPSAxOwotICAgICAgICAgICAgZ290byBhZ2FpbjsKLSAgICAgICAgICBjYXNl IERJUl9GSUw6Ci0gICAgICAgICAgICBzaG93ID0gMTsKLSAgICAgICAgICAgIGNtaWZuMSAmPSB+ KDEpOwotICAgICAgICAgICAgY21pZm4yID0gMDsKLSAgICAgICAgICAgIGdvdG8gYWdhaW47Ci0g ICAgICAgICAgY2FzZSBESVJfU1JUOgotICAgICAgICAgICAgeCA9IERJUlNfTk07Ci0gICAgICAg ICAgICBpZiAoYyA9PSAnOicgfHwgYyA9PSAnPScpCi0gICAgICAgICAgICAgIGlmICgoeCA9IGNt a2V5KGRpcnNvcnQsbmRpcnNvcnQsIlNvcnQga2V5IiwibmFtZSIseHhzdHJpbmcpKSA8IDApCi0g ICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgeHNvcnQgPSAxOwotICAgICAg ICAgICAgc29ydGJ5ID0geDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBE SVJfQlVQOiBiYWNrdXAgID0gMTsgZnMrKzsgICBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9O T0I6IGJhY2t1cCAgPSAwOyBmcysrOyAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBESVJfTk9T OiB4c29ydCA9IDA7ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9BU0M6IHJldmVyc2Ug PSAwOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX0RTQzogcmV2ZXJzZSA9IDE7ICAgYnJl YWs7Ci0jaWZkZWYgUkVDVVJTSVZFCi0gICAgICAgICAgY2FzZSBESVJfUkVDOiByZWN1cnNpdmUg PSAxOyBkaXJhY3RpdmUgPSAxOyBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9OT1I6IHJlY3Vy c2l2ZSA9IDA7IGRpcmFjdGl2ZSA9IDA7IGJyZWFrOwotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwot ICAgICAgICAgIGNhc2UgRElSX1RZUDogeGZlcm1vZCA9IDE7ICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSBESVJfTk9UOiB4ZmVybW9kID0gMDsgICBicmVhazsKLQotI2lmZGVmIENLU1lNTElOSwot ICAgICAgICAgIGNhc2UgRElSX0xOSzogICAgICAgICAgICAgICAgIC8qIEZvbGxvdyBsaW5rcyAq LwotI2lmZGVmIENPTU1FTlQKLQkgICAgLyogQSBjb21tYW5kIHN3aXRjaCBzaG91bGRuJ3QgYmUg c2V0dGluZyBhIGdsb2JhbCB2YWx1ZSEgKi8KLSAgICAgICAgICAgIG5vbGlua3MgPSAwOwotI2Vu ZGlmCS8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIGNtaWZuMSAmPSB+KDIpOwotCSAgICBkb250 Zm9sbG93bGlua3MgPSAwOwotICAgICAgICAgICAgZ290byBhZ2FpbjsKLSAgICAgICAgICBjYXNl IERJUl9OTEs6ICAgICAgICAgICAgICAgICAvKiBEb24ndCBmb2xsb3cgbGlua3MgKi8KLSNpZmRl ZiBDT01NRU5UCi0gICAgICAgICAgICBub2xpbmtzID0gMjsKLSNlbmRpZgkvKiBDT01NRU5UICov Ci0gICAgICAgICAgICBjbWlmbjEgJj0gfigyKTsKLQkgICAgZG9udGZvbGxvd2xpbmtzID0gMTsK LSAgICAgICAgICAgIGdvdG8gYWdhaW47Ci0JICBjYXNlIERJUl9OT0w6CQkJLyogRG9uJ3Qgc2hv dyBsaW5rcyBhdCBhbGwgKi8KLQkgICAgZG9udHNob3dsaW5rcyA9IDE7Ci0JICAgIGdvdG8gYWdh aW47Ci0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0KLSAgICAgICAgICBjYXNlIERJUl9OT006IG1z ZyAgICAgPSAwOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX01TRzoKLSAgICAgICAgICAg IGlmIChjID09ICc6JyB8fCBjID09ICc9JykKLSAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQo Ik1lc3NhZ2UgdG8gYXBwZW5kIHRvIGVhY2ggbGluZSIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIG1zZyA9IDE7 Ci0gICAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLGJyc3RyaXAocyksVE1QQlVGU0laKTsKLSAg ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBESVJfU01BOgotICAgICAgICAgIGNh c2UgRElSX0xBUjogewotCSAgICAgIENLX09GRl9UIHk7Ci0JICAgICAgaWYgKCFnZXR2YWwpIGJy ZWFrOwotCSAgICAgIGlmICgoeCA9IGNtbnVtdygiRmlsZSBzaXplIGluIGJ5dGVzIiwiMCIsMTAs JnkseHhzdHJpbmcpKSA8IDApCi0JCXJldHVybih4KTsKLQkgICAgICBmcysrOwotCSAgICAgIHNo b3cgPSAxOwotCSAgICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewotCQljYXNlIERJUl9T TUE6IG1pbnNpemUgPSB5OyBicmVhazsKLQkJY2FzZSBESVJfTEFSOiBtYXhzaXplID0geTsgYnJl YWs7Ci0JICAgICAgfQotCSAgICAgIGJyZWFrOwotCSAgfQotCSAgY2FzZSBESVJfVE9QOgotCSAg ICBkaXJfdG9wID0gMTA7Ci0JICAgIGlmICghZ2V0dmFsKSBicmVhazsKLQkgICAgICBpZiAoKHgg PSBjbW51bSgiSG93IG1hbnkgbGluZXMgdG8gc2hvdyIsIjEwIiwxMCwmeSx4eHN0cmluZykpPCAw KQotCQlyZXR1cm4oeCk7Ci0JICAgICAgZGlyX3RvcCA9IHk7Ci0JICAgICAgYnJlYWs7Ci0KLSNp Zm5kZWYgTk9TUEwKLSAgICAgICAgICBjYXNlIERJUl9BUlI6Ci0gICAgICAgICAgICBpZiAoYyAh PSAnOicgJiYgYyAhPSAnPScpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9BcnJheSBuYW1l IHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIkFycmF5IG5hbWUgKGEgc2luZ2xlIGxldHRl ciB3aWxsIGRvKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICZzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHgg PT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QXJyYXkgbmFtZSByZXF1aXJl ZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAg fSBlbHNlCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBpZiAoISpzKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/QXJyYXkgbmFtZSBy ZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIHMyID0gczsKLSAgICAgICAgICAgIGlmICgqcyA9PSBDTURRKSBzKys7Ci0g ICAgICAgICAgICBpZiAoKnMgPT0gJyYnKSBzKys7Ci0gICAgICAgICAgICBpZiAoIWlzYWxwaGEo KnMpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/QmFkIGFycmF5IG5hbWUgLSBcIiVzXCJc biIsczIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBhcnJheSA9ICpzKys7Ci0gICAgICAgICAgICBpZiAoaXN1cHBlcihhcnJheSkpIGFy cmF5ID0gdG9sb3dlcihhcnJheSk7Ci0gICAgICAgICAgICBpZiAoKnMgJiYgKCpzICE9ICdbJyB8 fCAqKHMrMSkgIT0gJ10nKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP0JhZCBhcnJheSBu YW1lIC0gXCIlc1wiXG4iLHMyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAg ICBjYXNlIERJUl9BRlQ6Ci0gICAgICAgICAgY2FzZSBESVJfQkVGOgotICAgICAgICAgIGNhc2Ug RElSX05BRjoKLSAgICAgICAgICBjYXNlIERJUl9OQkY6Ci0gICAgICAgICAgICBpZiAoIWdldHZh bCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWRhdGUoIkZpbGUtdGltZSIsIiIsJnMs MCx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAg ICAgICAgICAgICAgICAgIHByaW50ZigiP0RhdGUtdGltZSByZXF1aXJlZFxuIik7Ci0gICAgICAg ICAgICAgICAgICAgIHJjID0gLTk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg ICAgICAgICByYyA9IHg7Ci0gICAgICAgICAgICAgICAgZ290byB4ZG9teWRpcjsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGZzKys7Ci0gICAgICAgICAgICBzd2l0Y2ggKGspIHsKLSAgICAg ICAgICAgICAgY2FzZSBESVJfQUZUOiBtYWtlc3RyKCZkaXJfYWZ0LHMpOyBicmVhazsKLSAgICAg ICAgICAgICAgY2FzZSBESVJfQkVGOiBtYWtlc3RyKCZkaXJfYmVmLHMpOyBicmVhazsKLSAgICAg ICAgICAgICAgY2FzZSBESVJfTkFGOiBtYWtlc3RyKCZkaXJfbmFmLHMpOyBicmVhazsKLSAgICAg ICAgICAgICAgY2FzZSBESVJfTkJGOiBtYWtlc3RyKCZkaXJfbmJmLHMpOyBicmVhazsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX0VYQzoKLSAg ICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtZmxk KCJQYXR0ZXJuIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgIGlmICh4 ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1BhdHRlcm4gcmVxdWlyZWRc biIpOwotICAgICAgICAgICAgICAgICAgICByYyA9IC05OwotICAgICAgICAgICAgICAgIH0gZWxz ZQotICAgICAgICAgICAgICAgICAgcmMgPSB4OwotICAgICAgICAgICAgICAgIGdvdG8geGRvbXlk aXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcysrOwotICAgICAgICAgICAgbWFrZXN0 cigmZGlyX2V4YyxzKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBESVJf U1VNOgotICAgICAgICAgICAgc3VtbWFyeSA9IDE7IGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBE SVJfQklOOiB7Ci0gICAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIHR4dGJpbltdOwot ICAgICAgICAgICAgICBleHRlcm4gaW50IHhmaWxldHlwZTsKLSAgICAgICAgICAgICAgaWYgKCFn ZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0eHRiaW4sMywiIiwi YWxsIix4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgICAgcmMgPSB4OwotICAgICAg ICAgICAgICAgICAgZ290byB4ZG9teWRpcjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICBpZiAoeCA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgICB4ZmlsZXR5cGUgPSAtMTsKLSAgICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIHhmaWxldHlwZSA9IHg7Ci0gICAg ICAgICAgICAgICAgICBmcyA9IDE7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgRElSX09VVDoKLSAgICAgICAgICAgIGlm ICgoeCA9IGNtb2ZpKCJGaWxlIGZvciBkaXJlY3RvcnkgbGlzdGluZyIsIiIsJnMseHhzdHJpbmcp KSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIGNrc3RybmNweShv dXRmaWxlLHMsQ0tNQVhQQVRIKzEpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBk ZWZhdWx0OgotICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIG5vdCBpbXBsZW1lbnRlZCB5ZXQg LSBcIiVzXCJcbiIsIGF0bWJ1Zik7Ci0gICAgICAgICAgICBnb3RvIHhkb215ZGlyOwotICAgICAg ICB9Ci0gICAgfQotICAgIGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0la KTsgLyogU2FmZSBjb3B5IG9mIGZpbGVzcGVjICovCi0KLS8qIF5eXiBTVEFSVCBNVUxUSVBMRSAq LwotICAgIAotICAgIHdoaWxlICghdG91Y2gpIHsKLQl4ID0gY21mbGQoIkFub3RoZXIgZmlsZXNw ZWMgb3IgRW50ZXIiLCIiLCZzLHh4c3RyaW5nKTsKLQlpZiAoeCA9PSAtMykKLQkgIGJyZWFrOwot CWlmICh4IDwgMCkKLQkgIHJldHVybih4KTsKLQlja3N0cm5jYXQobGluZSwiLCIsTElOQlVGU0la KTsKLQlja3N0cm5jYXQobGluZSxzLExJTkJVRlNJWik7Ci0JbXVsdGlwbGUrKzsKLSAgICB9Ci0g ICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwieyIsbGluZSwifSIsTlVMTCk7Ci0gICAgY2tz dHJuY3B5KGxpbmUsdG1wYnVmLExJTkJVRlNJWik7Ci0gICAgY21yZXN1bHQubnJlc3VsdCA9IDE7 Ci0gICAgY21yZXN1bHQuZmNvZGUgPSBfQ01JRkk7Ci0KLS8qIF5eXiBFTkQgTVVMVElQTEUgKi8K LQotICAgIHMgPSBsaW5lOwotCi0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSAgICAgICAgICAg ICAgLyogR2V0IGNvbmZpcm1hdGlvbiAqLwotICAgICAgcmV0dXJuKHgpOwotCi0vKgotICBDb21t YW5kIGlzIFRPVUNIIGFuZCBmaWxlIGRvZXNuJ3QgZXhpc3QuCi0qLwotICAgIGlmICh0b3VjaCkg ewkJCS8qIFRPVUNIICovCi0JaWYgKChjbXJlc3VsdC5mY29kZSA9PSBfQ01JRkkgJiYgemNoa2ko cykgPT0gKENLX09GRl9UKS0xKSkgewotCSAgICBGSUxFICogZnA7Ci0JICAgIHMgPSBicnN0cmlw KHMpOwotCSAgICBpZiAoIWlzd2lsZChzKSkgewotI2lmZGVmIFVOSVgKLQkJaWYgKHNbMF0gPT0g J34nKQotCQkgIHMgPSB0aWxkZV9leHBhbmQocyk7Ci0jZW5kaWYJLyogVU5JWCAqLwotCQlmcCA9 IGZvcGVuKHMsInciKTsJLyogQ3JlYXRlIGZpbGUgKi8KLQkJaWYgKCFmcCkgewotCQkgICAgcHJp bnRmKCI/VE9VQ0ggJXM6ICVzXG4iLHMsY2tfZXJyc3RyKCkpOwotCQkgICAgcmMgPSAtOTsKLQkJ ICAgIGdvdG8geGRvbXlkaXI7Ci0JCX0KLQkJZmNsb3NlKGZwKTsKLQkJY3ggPSBYWERJUjsJCS8q IE5vdyBtYXliZSBsaXN0IGl0LiAqLwotCQltdWx0aXBsZSsrOwkJLyogRm9yY2UgbmV3IGRpcmVj dG9yeSBzY2FuICovCi0JICAgIH0KLQl9Ci0gICAgfSBlbHNlCi0KLSAgICBpZiAoY21yZXN1bHQu ZmNvZGUgIT0gX0NNSUZJKSB7ICAgICAvKiBOb3RoaW5nIG1hdGNoZWQgKi8KLQkvKgotCSAgTm90 ZSAtIHRoaXMgbmV2ZXIgZ2V0cyBleGVjdXRlZCBiZWNhdXNlIGFmdGVyIHRoZSAiYmVnaW4KLQkg IG11bHRpcGxlIiBoYWNrIGFib3ZlLCB0aGUgcmVzdWx0IGlzIGFsd2F5cyBfQ01JRkkpLgotCSov Ci0gICAgICAgIGNoYXIgKiBtOwotCWlmICgqcyA9PSAnLycpCi0jaWZkZWYgVU5JWE9ST1NLCi0J ICBtID0gImRvZXMgbm90IG1hdGNoIHN3aXRjaCBvciBuYW1lIG9mIGFjY2Vzc2libGUgZmlsZSI7 Ci0jZWxzZQotI2lmZGVmIE9TMgotCW0gPSAiZG9lcyBub3QgbWF0Y2ggc3dpdGNoIG9yIG5hbWUg b2YgYWNjZXNzaWJsZSBmaWxlIjsKLSNlbHNlCi0JbSA9ICJubyBzd2l0Y2hlcyBtYXRjaCI7Ci0j ZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVU5JWE9ST1NYICovCi0JZWxzZQotCSAgbSA9ICJu b3QgZm91bmQgb3Igbm90IGFjY2Vzc2libGUiOwotCXByaW50ZigiXCIlc1wiIC0gJXNcbiIscyxt KTsKLQlyYyA9IC05OwotCWdvdG8geGRvbXlkaXI7Ci0gICAgfQotI2lmZGVmIENPTU1FTlQKLSAg ICAvKiBUaGlzIGNhbid0IGJlIHJpZ2h0IGJlY2F1c2UgaXQncyBiYXNlZCBvbiBfQ01DRk0gKi8K LSAgICB3aWxkID0gY21yZXN1bHQubnJlc3VsdDsgICAgICAgICAgICAvKiBXaWxkY2FyZCB3YXMg Z2l2ZW4/ICovCi0gICAgZGVidWcoRjExMSwiZG9teWRpciBjbWlmaTIiLHMsd2lsZCk7Ci0jZWxz ZQotICAgIHdpbGQgPSAwOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQotICAgIGlmIChvdXRmaWxl WzBdKSB7CQkJLyogSWYgYW4gb3V0cHV0IGZpbGUgd2FzIHNwZWNpZmllZCAqLwotICAgICAgICBv ZnAgPSBmb3BlbihvdXRmaWxlLCJ3Iik7ICAgICAgIC8qIG9wZW4gaXQgKi8KLSAgICAgICAgaWYg KCFvZnApIHsKLSAgICAgICAgICAgIHByaW50ZigiP0Nhbid0IG9wZW4gb3V0cHV0IGZpbGUgJXM6 ICVzXG4iLG91dGZpbGUsY2tfZXJyc3RyKCkpOwotICAgICAgICAgICAgb2ZwID0gc3Rkb3V0Owot ICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBwYWdlID0gMDsKLSAg ICB9Ci0KLSNpZmRlZiBPUzIKLSAgICBpZiAoIXdpbGQpIHsKLSAgICAgICAgaWYgKHpjaGtpKHMp ID09IC0yKSB7ICAgICAgICAgICAvKiBGb3VuZCBhIGRpcmVjdG9yeSAqLwotICAgICAgICAgICAg cCA9IHMgKyAoaW50KXN0cmxlbihzKSAtIDE7IC8qIFllcyAqLwotICAgICAgICAgICAgaWYgKCpw ID09ICdcXCcgfHwgKnAgPT0gJy8nKQotICAgICAgICAgICAgICBzdHJjYXQocywgIioiKTsKLSAg ICAgICAgICAgIGVsc2UgaWYgKCpwID09ICc6JykKLSAgICAgICAgICAgICAgc3RyY2F0KHMsICIu LyoiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgc3RyY2F0KHMsICIvKiIpOwot ICAgICAgICAgICAgd2lsZCA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIE5vdyBpdCdzIHdpbGQg Ki8KLSAgICAgICAgfQotICAgIH0KLSNlbHNlCi0gICAgaWYgKCF3aWxkKSBpZiAoaXNkaXIocykp IHsgICAgICAgICAgLyogSXMgaXQgYSBkaXJlY3Rvcnk/ICovCi0gICAgICAgIHAgPSBzICsgKGlu dClzdHJsZW4ocykgLSAxOyAgICAgLyogWWVzICovCi0jaWZkZWYgVk1TCi0gICAgICAgIHsKLSAg ICAgICAgICAgIC8qIENvbnZlcnQgZnJvbSBGT08uRElSOzEgdG8gW3guRk9PXSBpZiBuZWNlc3Nh cnkgKi8KLSAgICAgICAgICAgIGNoYXIgYnVmW0NLTUFYUEFUSCsxXTsKLSAgICAgICAgICAgIGRl YnVnKEYwMDAsImRvbXlkaXIgZGlyZWN0b3J5IDAiLHMsKnApOwotICAgICAgICAgICAgaWYgKGN2 dGRpcihzLGJ1ZixDS01BWFBBVEgpID4gMCkKLSAgICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUs YnVmLExJTkJVRlNJWik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgZGVi dWcoRjAwMCwiZG9teWRpciBkaXJlY3RvcnkgMSIscywqcCk7Ci0jaWZkZWYgVk1TCi0gICAgICAg IGlmICgqcCA9PSAnXScgfHwgKnAgPT0gJz4nIHx8ICpwID09ICc6JykKLSAgICAgICAgICBzdHJj YXQocywgIiouKiIpOwotI2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgICAgICBpZiAoKnAg PT0gJzonKQotICAgICAgICAgIHN0cmNhdChzLCAiKyIpOwotICAgICAgICBlbHNlCi0gICAgICAg ICAgc3RyY2F0KHMsICI6KyIpOwotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0gICAgICAgIGlmICgq cCA9PSAnPicpCi0gICAgICAgICAgc3RyY2F0KHMsICIqIik7Ci0gICAgICAgIGVsc2UKLSAgICAg ICAgICBzdHJjYXQocywgIj4qIik7Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIGRh dGFnZW5lcmFsICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgICAgIHdpbGQgPSAxOyAgICAgICAg ICAgICAgICAgICAgICAgLyogTm93IGl0J3Mgd2lsZCAqLwotICAgICAgICBkZWJ1ZyhGMDAwLCJk b215ZGlyIGRpcmVjdG9yeSAyIixzLCpwKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSNp ZmRlZiBaWFJFV0lORAotLyogY21pZmkoKSBhbHJlYWR5IGNhbGxlZCBuenhwYW5kIHNvIHdlIGNh biBqdXN0IHJlLXVzZSB0aGUgc2FtZSBsaXN0LiAqLwotICAgIGlmICghbXVsdGlwbGUpIHsKLQl4 ID0genhyZXdpbmQoKTsJCQkvKiBSZXdpbmQgdGhlIGxpc3QgKi8KLQlkZWJ1ZyhGMTExLCJkb215 ZGlyIHp4cmV3aW5kIixzLHgpOwotICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyogWlhSRVdJTkQgKi8K LS8qCi0gIEluIGNhc2Ugd2UgZ2F2ZSBtdWx0aXBsZSBmaWxlc3BlY3MgdGhleSBhcmUgbm93IGlu IHthLGIsY30gbGlzdCBmb3JtYXQuCi0gIFdoaWNoIGlzIGEgdmFsaWQgd2lsZGNhcmQuICBXZSBw YXNzIGl0IHRvIG56eHBhbmQoKSB0byBnZXQgYmFjayB0aGUgbGlzdAotICBvZiBmaWxlcyB0aGF0 IG1hdGNoLiAgVGhpcyBpcyBmaW5lIGZvciBESVJFQ1RPUlkgYnV0IGl0J3Mgbm90IGZpbmQgZm9y Ci0gIFRPVUNIIGJlY2F1c2Ugd2Ugd2FudCBUT1VDSCB0byBzZWUgdGhvc2UgbmFtZXMgc28gaXQg Y2FuIGNyZWF0ZSB0aGUgZmlsZXMuCi0gIFNvIGZvciBub3cgYXQgbGVhc3QsIGlmIFRPVUNIIGlz IHRvIGJlIHVzZWQgdG8gY3JlYXRlIGZpbGVzIC0tIGFzIG9wcG9zZWQKLSAgdG8gY2hhbmdpbmcg dGhlIHRpbWVzdGFtcHMgb2YgZXhpc3RpbmcgZmlsZXMgLS0gaXQgY2FuIG9ubHkgZG8gb25lIGZp bGUKLSAgYXQgYSB0aW1lLgotKi8KLQluenhvcHRzID0gKHNob3cgPT0gWlhfRElST05MWSkgPyBa WF9ESVJPTkxZIDoKLQkgIChzaG93ID09IFpYX0ZJTE9OTFkgPyBaWF9GSUxPTkxZIDogMCk7Ci0J aWYgKG1hdGNoZG90KSAgbnp4b3B0cyB8PSBaWF9NQVRDSERPVDsKLQlpZiAocmVjdXJzaXZlKSBu enhvcHRzIHw9IFpYX1JFQ1VSU0U7Ci0JeCA9IG56eHBhbmQocyxuenhvcHRzKTsgICAgICAgICAg ICAgLyogRXhwYW5kIGZpbGUgbGlzdCAqLwotCWRlYnVnKEYxMTEsImRvbXlkaXIgbnp4cGFuZCIs cyx4KTsKLSNpZmRlZiBaWFJFV0lORAotICAgIH0KLSNlbmRpZiAvKiBaWFJFV0lORCAqLwotCi0j aWZuZGVmIE5PU1BMCi0gICAgaWYgKGFycmF5KSB7Ci0gICAgICAgIGludCBuLCB4eDsKLSAgICAg ICAgbiA9ICh4IDwgMCkgPyAwIDogeDsKLSAgICAgICAgaWYgKCh4eCA9IGRjbGFycmF5KGFycmF5 LG4pKSA8IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiP0FycmF5IGRlY2xhcmF0aW9uIGZhaWx1 cmVcbiIpOwotICAgICAgICAgICAgcmMgPSAtOTsKLSAgICAgICAgICAgIGdvdG8geGRvbXlkaXI7 Ci0gICAgICAgIH0KLQlhcnJheWluZGV4ID0geHg7Ci0gICAgICAgIGFwID0gYV9wdHJbeHhdOwkJ CS8qIFBvaW50ZXIgdG8gbGlzdCBvZiBlbGVtZW50cyAqLwotICAgICAgICBpZiAoYXApCQkJCS8q IFNldCBlbGVtZW50IDAgdG8gZGltZW5zaW9uICovCi0gICAgICAgICAgbWFrZXN0cigmKGFwWzBd KSwiMCIpOwkvKiB3aGljaCBzbyBmYXIgaXMgemVybyAqLwotICAgICAgICBpZiAobiA8IDEpIHsJ CQkvKiBObyBmaWxlcyBtYXRjaGVkLCBkb25lLiAqLwotICAgICAgICAgICAgcmMgPSAwOwotICAg ICAgICAgICAgZ290byB4ZG9teWRpcjsKLSAgICAgICAgfQotICAgIH0gZWxzZQotI2VuZGlmIC8q IE5PU1BMICovCi0gICAgICBpZiAoIXRvdWNoICYmIHggPCAxKSB7Ci0jaWZkZWYgQ0tST09UCi0g ICAgICAgICAgZXh0ZXJuIGludCBja3Jvb3RlcnI7Ci0gICAgICAgICAgaWYgKGNrcm9vdGVycikK LSAgICAgICAgICAgIHByaW50ZigiP09mZiBsaW1pdHM6ICVzXG4iLHMpOwotICAgICAgICAgIGVs c2UKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAgICAgICAgICAgIGlmICh4ID09IDAgJiYgaXNkaXIo cykpCi0gICAgICAgICAgICAgIHByaW50ZigiP0VtcHR5IGRpcmVjdG9yeSAtIFwiJXNcIlxuIiwg cyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50ZigiPyVzICVzIG1hdGNo IC0gXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICAgKHggPT0gMCkgPyAiTm8iIDogIlRv byBtYW55IiwKLSAgICAgICAgICAgICAgICAgICAgIChzaG93ID09IDIpID8gImRpcmVjdG9yaWVz IiA6ICJmaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICBicnN0cmlwKHMpCi0gICAgICAgICAg ICAgICAgICAgICApOwotICAgICAgICAgIHJjID0gLTk7Ci0gICAgICAgICAgZ290byB4ZG9teWRp cjsKLSAgICB9Ci0gICAgbnggPSB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVt ZW1iZXIgaG93IG1hbnkgZmlsZXMgKi8KLSAgICBpZiAobnggPCAyKSB4c29ydCA9IDA7CQkvKiBT a2lwIHNvcnRpbmcgaWYgbm9uZSBvciBvbmUgKi8KLQotICAgIGlmIChtc2cpIHsKLSAgICAgICAg bWFrZXN0cigmZGlybXNnLHRtcGJ1Zik7Ci0gICAgICAgIGRpcm1zZ2xlbiA9IHN0cmxlbih0bXBi dWYpOwotICAgIH0KLQotI2lmZGVmIFZNUwotICAgIGNkcCA9IHpndGRpcigpOyAgICAgICAgICAg ICAgICAgICAgIC8qIEdldCBjdXJyZW50IGRpcmVjdG9yeSAqLwotICAgIGRlYnVnKEYxMTAsImRv bXlkaXIgVk1TIHpndGRpciIsY2RwLDApOwotI2VuZGlmIC8qIFZNUyAqLwotCi0gICAgaWYgKHhz b3J0ICYmIHZlcmJvc2UpIHsgICAgICAgICAgICAgLyogSWYgc29ydGluZywgYWxsb2NhdGUgc3Bh Y2UgKi8KLSAgICAgICAgaWYgKCEoZGlybGlzdCA9IChjaGFyICoqKSBtYWxsb2MoKHggKyAxKSAq IHNpemVvZihjaGFyICoqKSkpKSB7Ci0gICAgICAgICAgICBpZiAoIXF1aWV0KSB7Ci0gICAgICAg ICAgICAgICAgcHJpbnRmKCIqIFdhcm5pbmc6IEZhaWx1cmUgdG8gYWxsb2NhdGUgbWVtb3J5IGZv ciBzb3J0aW5nLlxuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIqIFdpbGwgcHJvY2VlZCB3 aXRob3V0IHNvcnRpbmcuLi5cbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeHNvcnQg PSAwOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMDEsImRvbXlkaXIgc29ydCBtYWxsb2Mi LCIiLHhzb3J0KTsKLSAgICB9Ci0KLSAgICAvKiBEaXNwbGF5IHRoZSBsaXN0aW5nICovCi0KLSNp Zm5kZWYgTk9TUEwKLSAgICBpZiAoYXJyYXkpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBT dG9yaW5nIGluc3RlYWQgb2YgcHJpbnRpbmcgKi8KLSAgICAgIGhlYWRpbmcgPSAwOwotI2VuZGlm IC8qIE5PU1BMICovCi0KLSAgICBpZiAoaGVhZGluZykgeyAgICAgICAgICAgICAgICAgICAgICAv KiBJZiAvSEVBRElORyBwcmludCBoZWFkaW5nICovCi0gICAgICAgIHpmbnFmcChzLFRNUEJVRlNJ Wix0bXBidWYpOwotICAgICAgICBmcHJpbnRmKG9mcCwiXG5EaXJlY3Rvcnkgb2YgJXNcblxuIix0 bXBidWYpOwotICAgICAgICBuICs9IDM7Ci0gICAgfQotICAgIGlmIChwYWdlID4gLTEpICAgICAg ICAgICAgICAgICAgICAgIC8qIFBhZ2luZyAqLwotICAgICAgeGFza21vcmUgPSBwYWdlOwotCi0g ICAgaWYgKCF2ZXJib3NlICYmICF0b3VjaCkgewkJLyogL0JSSUVGICovCi0gICAgICAgIGlmIChv dXRmaWxlWzBdKSB7ICAgICAgICAgICAgICAgLyogVG8gZmlsZSAgKi8KLSAgICAgICAgICAgIGlu dCBrID0gMDsKLSAgICAgICAgICAgIHpuZXh0KG5hbWUpOwotICAgICAgICAgICAgd2hpbGUgKG5h bWVbMF0pIHsgICAgICAgICAgIC8qIE9uZSBsaW5lIHBlciBmaWxlICovCi0gICAgICAgICAgICAg ICAgaysrOwotICAgICAgICAgICAgICAgIGlmIChmcykgaWYgKGZpbGVzZWxlY3QobmFtZSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcl9hZnQsZGlyX2JlZixkaXJf bmFmLGRpcl9uYmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5z aXplLG1heHNpemUsIWJhY2t1cCwxNix4bGlzdCkgPCAxKSB7Ci0gICAgICAgICAgICAgICAgICAg IHpuZXh0KG5hbWUpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgZnByaW50ZihvZnAsIiVzXG4iLG5hbWUpOwotICAgICAg ICAgICAgICAgIHpuZXh0KG5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhl YWRpbmcpCi0gICAgICAgICAgICAgIGZwcmludGYob2ZwLCJGaWxlczogJWRcblxuIixrKTsKLSAg ICAgICAgICAgIHJjID0gMTsKLSAgICAgICAgICAgIGdvdG8geGRvbXlkaXI7Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICByYyA9IHhmaWxoZWxwKHgsIiIsIiIsbiwwLDEsCi0JCQkgIGRp cl9hZnQsZGlyX2JlZixkaXJfbmFmLGRpcl9uYmYsCi0JCQkgIG1pbnNpemUsbWF4c2l6ZSwhYmFj a3VwLDE2LHhsaXN0KTsKLSAgICAgICAgICAgIGlmIChyYyA8IDApCi0gICAgICAgICAgICAgIGdv dG8geGRvbXlkaXI7Ci0gICAgICAgICAgICBpZiAoaGVhZGluZyAmJiByYyA+IDApCi0gICAgICAg ICAgICAgIGZwcmludGYob2ZwLCJGaWxlczogJWRcblxuIix4KTsgLyogKE1pZ2h0IHNjcm9sbCBh IGxpbmUgb3IgMikgKi8KLSAgICAgICAgICAgIHJjID0gMTsKLSAgICAgICAgICAgIGdvdG8geGRv bXlkaXI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbmRpcnMgPSBuZmlsZXMgPSAwTDsJCS8qIElu aXRpYWxpemUgY291bnRlcnMgKi8KLSAgICBuYnl0ZXMgPSAoQ0tfT0ZGX1QpMDsKLQotICAgIGlm IChkaXJfZXhjKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhdmUgZXhjZXB0aW9uIGxpc3Q/ ICovCi0gICAgICBtYWtlbGlzdChkaXJfZXhjLHhsaXN0LDE2KTsJLyogWWVzLCBjb252ZXJ0IHRv IGFycmF5ICovCi0KLSAgICBkaXJhY3RpdmUgPSAxOwotICAgIHpuZXh0KG5hbWUpOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEdldCBuZXh0IGZpbGUgKi8KLSAgICB3aGlsZSAobmFtZVswXSkg eyAgICAgICAgICAgICAgICAgICAvKiBMb29wIGZvciBlYWNoIGZpbGUgKi8KLSAgICAgICAgaWYg KGZzKSBpZiAoZmlsZXNlbGVjdChuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBkaXJfYWZ0 LGRpcl9iZWYsZGlyX25hZixkaXJfbmJmLAotICAgICAgICAgICAgICAgICAgICAgICBtaW5zaXpl LG1heHNpemUsIWJhY2t1cCwxNix4bGlzdCkgPCAxKSB7Ci0gICAgICAgICAgICB6bmV4dChuYW1l KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGxlbiA9IHpnZXRm cyhuYW1lKTsgICAgICAgICAgICAgLyogR2V0IGZpbGUgbGVuZ3RoICovCi0gICAgICAgIGRlYnVn KEYxMTEsImRvbXlkaXIgemdldGZzIixuYW1lLGxlbik7Ci0jaWZkZWYgVk1TT1JVTklYCi0gICAg ICAgIGl0c2FkaXIgPSB6Z2ZzX2RpcjsgICAgICAgICAgICAgLyogU2VlIGlmIGl0J3MgYSBkaXJl Y3RvcnkgKi8KLSNlbHNlCi0gICAgICAgIGl0c2FkaXIgPSAobGVuID09IChDS19PRkZfVCktMiB8 fCBpc2RpcihuYW1lKSk7Ci0jZW5kaWYgLyogVk1TT1VOSVggKi8KLSAgICAgICAgZGVidWcoRjEx MSwiZG9teWRpciBpdHNhZGlyIixuYW1lLGl0c2FkaXIpOwotICAgICAgICBpZiAoKGl0c2FkaXIg JiYgKHNob3cgPT0gMSkpIHx8ICghaXRzYWRpciAmJiAoc2hvdyA9PSAyKSkpIHsKLSAgICAgICAg ICAgIHpuZXh0KG5hbWUpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAg ICAgLyogR2V0IGhlcmUgd2hlbiB3ZSBrbm93IHdlIGhhdmUgc2VsZWN0ZWQgdGhpcyBmaWxlICov Ci0KLSAgICAgICAgbm1hdGNoZXMrKzsKLSAgICAgICAgaWYgKGl0c2FkaXIpIHsgICAgICAgICAg ICAgICAgICAvKiBBY2N1bXVsYXRlIHRvdGFscyBmb3Igc3VtbWFyeSAqLwotICAgICAgICAgICAg bmRpcnMrKzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5maWxlcysrOwotICAgICAg ICAgICAgbmJ5dGVzICs9IGxlbjsKLSAgICAgICAgfQotCWRzdHIgPSBOVUxMOwotCWlmIChjeCA9 PSBYWFRPVUMpIHsJCS8qIENvbW1hbmQgd2FzIFRPVUNILCBub3QgRElSRUNUT1JZICovCi0JICAg IGNoYXIgKiBmaWxlbmFtZTsKLQkgICAgc3RydWN0IHphdHRyIHh4OwotCSAgICBkc3RyID0gY2tj dnRkYXRlKCIiLDApOwotCSAgICB4eC5kYXRlLnZhbCA9IGRzdHI7Ci0JICAgIHh4LmRhdGUubGVu ID0gKGludClzdHJsZW4oeHguZGF0ZS52YWwpOwotCSAgICB4eC5scHJvdGVjdC5sZW4gPSAwOwot CSAgICBkZWJ1ZyhGMTEwLCJkb215ZGlyIHRvdWNoIixuYW1lLDApOwotCSAgICBkZWJ1ZyhGMTEw LCJkb215ZGlyIHRvdWNoIixkc3RyLDApOwotCSAgICBpZiAoenN0aW1lKG5hbWUsJnh4LDApIDwg MCkgewotCQlwcmludGYoIj9UT1VDSCAlczogJXNcbiIsbmFtZSxja19lcnJzdHIoKSk7Ci0JCXJj ID0gLTk7Ci0JCWdvdG8geGRvbXlkaXI7Ci0JICAgIH0KLQkgICAgaWYgKCF2ZXJib3NlKSB7CQkv KiBObyBsaXN0aW5nIHNvIHNraXAgZGV0YWlsICovCi0JCXpuZXh0KG5hbWUpOwotCQljb250aW51 ZTsKLQkgICAgfQotCX0KLSAgICAgICAgaWYgKHN1bW1hcnkpIHsJCQkvKiBTdW1tYXJ5IG9ubHks IG5vIGRldGFpbCAqLwotICAgICAgICAgICAgem5leHQobmFtZSk7Ci0gICAgICAgICAgICBjb250 aW51ZTsKLSAgICAgICAgfQotCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgIGlmIChhcnJheSkgewot ICAgICAgICAgICAgZGVidWcoRjExMSwiZG9teWRpciBhcnJheSIsbmFtZSxuZmlsZXMpOwotICAg ICAgICAgICAgaWYgKGFwKQotICAgICAgICAgICAgICBtYWtlc3RyKCYoYXBbbm1hdGNoZXNdKSxu YW1lKTsKLSAgICAgICAgICAgIHpuZXh0KG5hbWUpOwotICAgICAgICAgICAgY29udGludWU7Ci0g ICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0vKgotICBOT1RFOiBUaGUgc3ByaW50Zidz IGluIHRoaXMgcm91dGluZSBzaG91bGQgYmUgc2FmZS4gIFRoZXkgaW52b2x2ZQotICBwZXJtaXNz aW9uIHN0cmluZ3MsIGRhdGUvdGltZSBzdHJpbmdzLCBhbmQgZmlsZW5hbWVzLCBhbGwgb2Ygd2hp Y2ggaGF2ZQotICBrbm93biBtYXhpbXVtIGxlbmd0aHM7IG5vbmUgb2YgdGhlc2UgaXRlbXMgaXMg aW5wdXQgZnJvbSB1c2Vycy4gIFRoZQotICBkZXN0aW5hdGlvbiBidWZmZXJzIGFyZSBsYXJnZSBl bm91Z2ggdG8gaG9sZCBtYXhpbXVtIHNpemVzIGZvciBhbnkgYW5kCi0gIGFsbCBpdGVtcy4gIE5P VEUgMjogSWYgY29tbWFuZCB3YXMgVE9VQ0gsIGRzdHIgd2FzIGFscmVhZHkgc2V0IGp1c3QKLSAg YWJvdmUuCi0qLwotCWlmICghZHN0cikgewkJCS8qIEdldCBmaWxlJ3MgbW9kaWZpY2F0aW9uIGRh dGUvdGltZSAqLwotCSAgICBkc3RyID0gemZjZGF0KG5hbWUpOwotCSAgICBkZWJ1ZyhGMTExLCJk b215ZGlyIHpjZmRhdCIsZHN0ciwwKTsKLQl9Ci0gICAgICAgIGlmICghZHN0cikgZHN0ciA9ICIi OwotICAgICAgICB7Ci0vKgotICBOb3RlIHRoYXQgemZjZGF0KCkgYWx3YXlzIHJldHVybnMgIiIg b3IgeXl5eW1tZGQgaGg6bW06c3MsIHNvIGFueSB3YXJuaW5ncwotICBhYm91dCBwb3NzaWJsZSBv dXQtb2YtYm91bmRzIGRzdHJbXSBhcnJheSByZWZzIGRvIG5vdCBhcHBseS4gIFRoaXMgYmxvY2sg b2YKLSAgY29kZSBpcyB0byBzdGlmbGUgdGhlIHdhcm5pbmdzIGFuZCBhbHNvIGFsbG93cyBmb3Ig YW55IG91dC1vZi1zcGVjCi0gIHpmY2RhdCgpIGltcGxlbWVudGF0aW9ucy4KLSovCi0gICAgICAg ICAgICBpbnQgeDsKLSAgICAgICAgICAgIGNoYXIgKiBwID0gIjAwMDAwMDAwIDAwOjAwOjAwIjsK LSAgICAgICAgICAgIHggPSBja3N0cm5jcHkoeGJ1Zixkc3RyLDMyKTsKLSAgICAgICAgICAgIGlm ICh4IDwgMTcpIGNrc3RybmNweSgmeGJ1Zlt4XSxwK3gsMzIteCk7Ci0gICAgICAgICAgICBkc3Ry ID0geGJ1ZjsKLSAgICAgICAgfQotICAgICAgICBpZiAoZW5nZGF0ZSkgeyAgICAgICAgICAgICAg ICAgIC8qIEVuZ2xpc2ggZGF0ZSByZXF1ZXN0ZWQ/ICovCi0gICAgICAgICAgICBzaG9ydCBtb250 aCwgZGF5LCB5ZWFyLCBob3VyLCBtaW51dGUsIHNlY29uZHM7Ci0gICAgICAgICAgICBtb250aCA9 IChkc3RyWzRdLTQ4KSoxMCArIChkc3RyWzVdLTQ4KTsKLSAgICAgICAgICAgIG1zdHIgID0gKG1v bnRoID4gMCAmJiBtb250aCA8PSAxMikgPyBtb250aHNbbW9udGgtMV0gOiAieHh4IjsKLSAgICAg ICAgICAgIGRheSAgID0gKGRzdHJbNl0tNDgpKjEwICsgKGRzdHJbN10tNDgpOwotICAgICAgICAg ICAgeWVhciAgPSAoKChkc3RyWzBdLTQ4KSoxMCArCi0gICAgICAgICAgICAgICAgICAgICAgKGRz dHJbMV0tNDgpKSoxMCArCi0gICAgICAgICAgICAgICAgICAgICAgKGRzdHJbMl0tNDgpKSoxMCAr Ci0gICAgICAgICAgICAgICAgICAgICAgKGRzdHJbM10tNDgpOwotICAgICAgICAgICAgaG91ciAg PSAoZHN0cls5XS00OCkqMTAgKyAoZHN0clsxMF0tNDgpOwotICAgICAgICAgICAgbWludXRlID0g KGRzdHJbMTJdLTQ4KSoxMCArIChkc3RyWzEzXS00OCk7Ci0gICAgICAgICAgICBzZWNvbmRzID0g KGRzdHJbMTVdLTQ4KSoxMCArIChkc3RyWzE2XS00OCk7Ci0gICAgICAgICAgICBzcHJpbnRmKGRi dWYsICAgICAgICAgICAgICAgLyogU0FGRSAqLwotICAgICAgICAgICAgICAgICAgICAiJTJkLSVz LSU0ZCAlMDJkOiUwMmQ6JTAyZCIsCi0gICAgICAgICAgICAgICAgICAgIGRheSxtc3RyLHllYXIs aG91cixtaW51dGUsc2Vjb25kcwotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg ZHN0ciA9IGRidWY7Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyog SVNPIGRhdGUgKi8KLSAgICAgICAgICAgIGRidWZbMF0gPSBkc3RyWzBdOyAgICAgICAgICAvKiB5 eXl5ICovCi0gICAgICAgICAgICBkYnVmWzFdID0gZHN0clsxXTsKLSAgICAgICAgICAgIGRidWZb Ml0gPSBkc3RyWzJdOwotICAgICAgICAgICAgZGJ1ZlszXSA9IGRzdHJbM107Ci0gICAgICAgICAg ICBkYnVmWzRdID0gJy0nOwotICAgICAgICAgICAgZGJ1Zls1XSA9IGRzdHJbNF07ICAgICAgICAg IC8qIG1tIChudW1lcmljKSAqLwotICAgICAgICAgICAgZGJ1Zls2XSA9IGRzdHJbNV07Ci0gICAg ICAgICAgICBkYnVmWzddID0gJy0nOwotICAgICAgICAgICAgZGJ1Zls4XSA9IGRzdHJbNl07ICAg ICAgICAgIC8qIGRkICovCi0gICAgICAgICAgICBkYnVmWzldID0gZHN0cls3XTsKLSAgICAgICAg ICAgIHN0cmNweShkYnVmKzEwLGRzdHIrOCk7ICAgICAvKiBoaDptbTpzcyAqLwotICAgICAgICAg ICAgZHN0ciA9IGRidWY7Ci0gICAgICAgIH0KLSAgICAgICAgZGxlbiA9IHN0cmxlbihkYnVmKTsg ICAgICAgICAgICAvKiBMZW5ndGggb2YgZGF0ZSAqLwotICAgICAgICBuYW1lW0NLTUFYUEFUSF0g PSBOVUw7Ci0jaWZkZWYgQ0tfUEVSTVMKLSNpZmRlZiBWTVNPUlVOSVgKLSAgICAgICAgcCA9IHpp cGVybShuYW1lKTsgICAgICAgICAgICAgICAvKiBHZXQgcGVybWlzc2lvbnMgKi8KLSAgICAgICAg ZGVidWcoRjExMCwiemlwZXJtIHBlcm1zIixwLDApOwotI2Vsc2UKLSAgICAgICAgcCA9IHpncGVy bShuYW1lKTsKLSAgICAgICAgZGVidWcoRjExMCwiemdwZXJtIHBlcm1zIixwLDApOwotI2VuZGlm IC8qIFZNU09SVU5JWCAqLwotI2Vsc2UKLSAgICAgICAgcCA9IE5VTEw7Ci0gICAgICAgIGRlYnVn KEYxMTAsIk5VTEwgcGVybXMiLHAsMCk7Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLQotI2lmZGVm IFZNUwotICAgICAgICAvKiBHZXQgcmVsYXRpdmUgbmFtZSB0byBzYXZlIHNwYWNlIC0tIFZNUyBm dWxsbmFtZXMgYXJlIGxvbmcuLi4gKi8KLSAgICAgICAgY2tzdHJuY3B5KG5hbWUsenJlbG5hbWUo bmFtZSxjZHApLENLTUFYUEFUSCk7Ci0jZW5kaWYgLyogVk1TICovCi0KLSAgICAgICAgaWYgKGl0 c2FkaXIgJiYgbGVuIDwgKENLX09GRl9UKTApIHsgLyogRGlyZWN0b3J5ICovCi0jaWZkZWYgVk1T Ci0gICAgICAgICAgICBzcHJpbnRmKGxpbmVidWYsIiUtMjJzJS0xMHMgICVzICAlcyIscCwiPERJ Uj4iLGRzdHIsbmFtZSk7Ci0jZWxzZQotICAgICAgICAgICAgaWYgKHApCi0gICAgICAgICAgICAg IHNwcmludGYobGluZWJ1ZiwiJTEwcyUtMTBzICAlcyAgJXMiLHAsIjxESVI+Iixkc3RyLG5hbWUp OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBzcHJpbnRmKGxpbmVidWYsIiUtMTBz ICAlcyAgJXMiLCAiPERJUj4iLCBkc3RyLCBuYW1lKTsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWd1bGFyIGZpbGUgKi8KLSNp ZmRlZiBWTVMKLSAgICAgICAgICAgIHNwcmludGYobGluZWJ1ZiwiJS0yMnMlMTBzICAlcyAgJXMi LCBwLCBja2ZzdG9hKGxlbiksIGRzdHIsIG5hbWUpOwotI2Vsc2UKLSAgICAgICAgICAgIGlmIChw KQotICAgICAgICAgICAgICBzcHJpbnRmKGxpbmVidWYsIiUxMHMlMTBzICAlcyAgJXMiLCBwLCBj a2ZzdG9hKGxlbiksIGRzdHIsIG5hbWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg ICBzcHJpbnRmKGxpbmVidWYsIiUxMHMgICVzICAlcyIsIGNrZnN0b2EobGVuKSwgZHN0ciwgbmFt ZSk7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgICAgIH0KLSNpZmRlZiBVTklYCi0jaWZkZWYgQ0tT WU1MSU5LCi0gICAgICAgIGlmICh6Z2ZzX2xpbmspIHsJCS8qIElmIGl0J3MgYSBzeW1saW5rICov Ci0JICAgIGlmIChkb250c2hvd2xpbmtzKSB7CS8qIElmIC9OT0xJTktTIGRvbid0IHNob3cgaXQg Ki8KLQkJem5leHQobmFtZSk7Ci0JCWNvbnRpbnVlOwotCSAgICB9Ci0JfQotICAgICAgICBpZiAo emdmc19saW5rICYmICFkb250Zm9sbG93bGlua3MpIHsgLyogU3ltbGluayBhbmQgZm9sbG93aW5n IGxpbmtzICovCi0gICAgICAgICAgICBpbnQgbiwgbTsJCQkvKiBTaG93IHdoYXQgdGhlIGxpbmsg cG9pbnRzIHRvICovCi0gICAgICAgICAgICBleHRlcm4gY2hhciBsaW5rbmFtZVtdOwotICAgICAg ICAgICAgbiA9IHN0cmxlbihsaW5lYnVmKTsKLSAgICAgICAgICAgIG0gPSBzdHJsZW4obGlua25h bWUpICsgbjsKLSAgICAgICAgICAgIGlmIChtIDwgQ0tNQVhQQVRIICsgNTgpCi0gICAgICAgICAg ICAgIHN0cmNweShsaW5lYnVmK24sICIgLT4gIik7IC8qIHNhZmUgKGNoZWNrZWQpICovCi0gICAg ICAgICAgICBpZiAobSArIDQgPCBDS01BWFBBVEggLSA1OCkKLSAgICAgICAgICAgICAgc3RyY3B5 KGxpbmVidWYrbis0LCBsaW5rbmFtZSk7IC8qIHNhZmUgKGNoZWNrZWQpICovCi0gICAgICAgIH0g ZWxzZQotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAg aWYgKHhmZXJtb2QpIHsgICAgICAgICAgICAgICAgICAvKiBTaG93IHRyYW5zZmVyIG1vZGUgKi8K LSAgICAgICAgICAgIGludCBpLCB4LCB5OwotICAgICAgICAgICAgY2hhciAqIHMgPSAiIjsKLSAg ICAgICAgICAgIHkgPSAtMTsKLSAgICAgICAgICAgIHggPSBzY2FuZmlsZShuYW1lLCZ5LG5zY2Fu ZmlsZSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICAgICAgY2FzZSBGVF9U RVhUOiBzID0gIiAoVCkiOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBGVF83QklUOiBzID0g IiAoVCkoN0JJVCkiOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBGVF84QklUOiBzID0gIiAo VCkoOEJJVCkiOyBicmVhazsKLSNpZmRlZiBVTklDT0RFCi0gICAgICAgICAgICAgIGNhc2UgRlRf VVRGODogcyA9ICIgKFQpKFVURjgpIjsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRlRfVUNT MjoKLSAgICAgICAgICAgICAgICBzID0geSA/ICIgKFQpKFVDUzJMRSkiIDogIiAoVCkoVUNTMkJF KSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotICAgICAg ICAgICAgICBjYXNlIEZUX0JJTjogIHMgPSAiIChCKSI7IGJyZWFrOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgaWYgKCEqcykgewotICAgICAgICAgICAgICAgIHMgPSBiaW5hcnkgPyAiIChC KSIgOiAiIChUKSI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKnMpIHsKLSAgICAg ICAgICAgICAgICBpbnQgbjsKLSAgICAgICAgICAgICAgICBuID0gc3RybGVuKGxpbmVidWYpOwot ICAgICAgICAgICAgICAgIGlmIChuICsgNCA8IENLTUFYUEFUSCAtIDU4KQotICAgICAgICAgICAg ICAgICAgc3RyY3B5KGxpbmVidWYrbiwgcyk7IC8qIHNhZmUgKGNoZWNrZWQpICovCi0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1zZyAmJiBkaXJtc2cpIHsKLSAgICAgICAg ICAgIGludCBuOwotICAgICAgICAgICAgbiA9IHN0cmxlbihsaW5lYnVmKTsKLSAgICAgICAgICAg IGlmIChuICsgZGlybXNnbGVuICsgMiA8IENLTUFYUEFUSCkKLSAgICAgICAgICAgICAgc3ByaW50 ZigoY2hhciAqKShsaW5lYnVmK24pLCIgJXMiLCBkaXJtc2cpOyAvKiBTQUZFICovCi0gICAgICAg IH0KLSAgICAgICAgaWYgKHhzb3J0KSB7CQkJLyogU29ydGluZyAtIHNhdmUgbGluZSAqLwotICAg ICAgICAgICAgaSA9IHN0cmxlbihsaW5lYnVmKTsKLSAgICAgICAgICAgIGlmICgobmRpcmxpc3Qg Pj0gbngpIHx8Ci0gICAgICAgICAgICAgICAgIShkaXJsaXN0W25kaXJsaXN0XSA9IChjaGFyICop bWFsbG9jKGkrMSkpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRp b24gZXJyb3IgLSB0cnkgL05PU09SVFxuIik7Ci0gICAgICAgICAgICAgICAgcmMgPSAtOTsKLSAg ICAgICAgICAgICAgICBnb3RvIHhkb215ZGlyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg c3RyY3B5KGRpcmxpc3RbbmRpcmxpc3RdLGxpbmVidWYpOyAvKiBzYWZlICovCi0gICAgICAgICAg ICBuZGlybGlzdCsrOwotICAgICAgICB9Ci0gICAgICAgIHpuZXh0KG5hbWUpOyAgICAgICAgICAg ICAgICAgICAgLyogUGVlayBhaGVhZCB0byBuZXh0IGZpbGUgKi8KLSAgICAgICAgaWYgKCF4c29y dCkgewotCSAgICBpZiAoIXRvdWNoIHx8ICh0b3VjaCAmJiB2ZXJib3NlKSkKLQkgICAgICBmcHJp bnRmKG9mcCwiJXNcbiIsbGluZWJ1Zik7Ci0gICAgICAgICAgICBpZiAocGFnZSAmJiAobmFtZVsw XSB8fCBoZWFkaW5nKSkgeyAvKiBJZiAvUEFHRSAqLwotICAgICAgICAgICAgICAgIGlmIChjbWRf Y29scyA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHggPSBzdHJsZW4obGluZWJ1Zik7 Ci0gICAgICAgICAgICAgICAgICAgIGludCB5OwotICAgICAgICAgICAgICAgICAgICB5ID0gKHgg JSBjbWRfY29scykgPyAxIDogMDsKLSAgICAgICAgICAgICAgICAgICAgbiArPSB4IC8gY21kX2Nv bHMgKyB5OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG4r KzsKLSAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgQ0tfVFRHV1NJWgotICAgICAgICAgICAgICAg IGlmIChuID4gKGNtZF9yb3dzIC0gMykpIHsgLyogRG8gbW9yZS1wcm9tcHRpbmcgKi8KLSAgICAg ICAgICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IHJjID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRvbXlkaXI7Ci0gICAgICAg ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgIG4gPSAwOwotICAgICAg ICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSAgICB9Ci0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGFycmF5KSB7Ci0gICAgICAgIGlm IChhcCkKLSAgICAgICAgICBtYWtlc3RyKCYoYXBbMF0pLGNraXRvYShubWF0Y2hlcykpOwotICAg ICAgICByYyA9IDE7Ci0gICAgICAgIGdvdG8geGRvbXlkaXI7Ci0gICAgfQotI2VuZGlmIC8qIE5P U1BMICovCi0gICAgaWYgKHhzb3J0KSB7Ci0JaW50IG5hbWVwb3M7Ci0gICAgICAgIHNrZXkgPSAw OwotI2lmZGVmIFZNUwotCW5hbWVwb3MgPSBkbGVuICsgMzU7Ci0gICAgICAgIHN3aXRjaCAoc29y dGJ5KSB7Ci0gICAgICAgICAgY2FzZSBESVJTX05NOiBza2V5ID0gbmFtZXBvczsgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSBESVJTX0RUOiBza2V5ID0gMzM7IGJyZWFrOwotICAgICAgICAgIGNhc2Ug RElSU19TWjogc2tleSA9IDIxOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBpZiAocCkgewot CSAgICBuYW1lcG9zID0gZGxlbiArIDI0OwotICAgICAgICAgICAgc3dpdGNoIChzb3J0YnkpIHsK LSAgICAgICAgICAgICAgY2FzZSBESVJTX05NOiBza2V5ID0gbmFtZXBvczsgYnJlYWs7Ci0gICAg ICAgICAgICAgIGNhc2UgRElSU19EVDogc2tleSA9IDIyOyBicmVhazsKLSAgICAgICAgICAgICAg Y2FzZSBESVJTX1NaOiBza2V5ID0gMTA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7 Ci0JICAgIG5hbWVwb3MgPSBkbGVuICsgMTQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKHNvcnRieSkg ewotICAgICAgICAgICAgICBjYXNlIERJUlNfTk06IHNrZXkgPSBuYW1lcG9zOyBicmVhazsKLSAg ICAgICAgICAgICAgY2FzZSBESVJTX0RUOiBza2V5ID0gMTI7IGJyZWFrOwotICAgICAgICAgICAg ICBjYXNlIERJUlNfU1o6IHNrZXkgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5k aWYgLyogVk1TICovCi0gICAgICAgIHNoX3NvcnQoZGlybGlzdCxOVUxMLG5kaXJsaXN0LHNrZXks cmV2ZXJzZSxmaWxlY2FzZSk7Ci0JaWYgKGRpcl90b3AgPiAwICYmIGRpcl90b3AgPCBuZGlybGlz dCkKLQkgIG5kaXJsaXN0ID0gZGlyX3RvcDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG5kaXJs aXN0OyBpKyspIHsKLSAgICAgICAgICAgIGZwcmludGYob2ZwLCIlc1xuIixkaXJsaXN0W2ldKTsK LSAgICAgICAgICAgIGlmIChwYWdlICYmIChpIDwgbmRpcmxpc3QgLTEgfHwgaGVhZGluZykpIHsg LyogSWYgL1BBR0UgKi8KLSAgICAgICAgICAgICAgICBpZiAoY21kX2NvbHMgPiAwKSB7Ci0gICAg ICAgICAgICAgICAgICAgIGludCB4ID0gc3RybGVuKGRpcmxpc3RbaV0pOwotICAgICAgICAgICAg ICAgICAgICBpbnQgeTsKLSAgICAgICAgICAgICAgICAgICAgeSA9ICh4ICUgY21kX2NvbHMpID8g MSA6IDA7Ci0gICAgICAgICAgICAgICAgICAgIG4gKz0gKChpbnQpc3RybGVuKGRpcmxpc3RbaV0p IC8gY21kX2NvbHMpICsgeTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgICAgICBuKys7Ci0gICAgICAgICAgICAgICAgfQotI2lmZGVmIENLX1RUR1dTSVoKLSAgICAg ICAgICAgICAgICBpZiAobiA+IChjbWRfcm93cyAtIDMpKSB7IC8qIERvIG1vcmUtcHJvbXB0aW5n ICovCi0gICAgICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhkb215ZGly OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBuID0g MDsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGhlYWRpbmcgfHwgc3VtbWFyeSkgewot I2lmZGVmIENLRkxPQVQKLSAgICAgICAgQ0tGTE9BVCBnbTsKLSNlbmRpZiAvKiBDS0ZMT0FUICov Ci0gICAgICAgIGZwcmludGYob2ZwLCJcbiVsZCBkaXJlY3RvciVzLCAlbGQgZmlsZSVzLCAlcyBi eXRlJXMiLAotICAgICAgICAgICAgICAgbmRpcnMsCi0gICAgICAgICAgICAgICAobmRpcnMgPT0g MSkgPyAieSIgOiAiaWVzIiwKLSAgICAgICAgICAgICAgIG5maWxlcywKLSAgICAgICAgICAgICAg IChuZmlsZXMgPT0gMSkgPyAiIiA6ICJzIiwKLQkgICAgICAgY2tmc3RvYShuYnl0ZXMpLAotICAg ICAgICAgICAgICAgKG5ieXRlcyA9PSAxKSA/ICIiIDogInMiCi0gICAgICAgICAgICAgICApOwot I2lmZGVmIENLRkxPQVQKLSAgICAgICAgZ20gPSAoKENLRkxPQVQpIG5ieXRlcyApIC8gMTAwMDAw MC4wOwotICAgICAgICBpZiAoZ20gPiAxMDAwLjApCi0gICAgICAgICAgZnByaW50ZihvZnAsIiAo JTAuMmZHQikiLChnbSAvIDEwMDAuMCkpOwotICAgICAgICBlbHNlIGlmIChnbSA+PSAwLjAxKQot ICAgICAgICAgIGZwcmludGYob2ZwLCIgKCUwLjJmTUIpIixnbSk7Ci0jZW5kaWYgLyogQ0tGTE9B RCAqLwotICAgICAgICBmcHJpbnRmKG9mcCwiXG5cbiIpOwotICAgIH0gZWxzZSBpZiAoZGlyX2Nv dSAmJiAhY3YpIHsKLQlmcHJpbnRmKG9mcCwiXG4gRmlsZXM6ICVsZFxuXG4iLG5maWxlcyk7Ci0g ICAgfQotICB4ZG9teWRpcjoKLSNpZm5kZWYgTk9TUEwKLSAgICBpZiAoZGlyX2NvdSAmJiBjdikg eyAgICAgICAgICAgICAgICAvKiAvQ09VTlQ6dmFyICovCi0gICAgICAgIGFkZG1hYyhjdixja2l0 b2EobmZpbGVzKSk7CS8qIHNldCB0aGUgdmFyaWFibGUgKi8KLSAgICAgICAgbWFrZXN0cigmY3Ys TlVMTCk7ICAgICAgICAgICAgICAvKiBmcmVlIHRoaXMgKi8KLSAgICB9Ci0gICAgaWYgKGFwKSB7 CQkJCS8qIElmIHdlIGhhdmUgYSByZXN1bHQgYXJyYXkgKi8KLQlpZiAoYV9kaW1bYXJyYXlpbmRl eF0gPiBubWF0Y2hlcykgLyogYnV0IGl0IHdhcyBub3QgZmlsbGVkICovCi0JICBhX2RpbVthcnJh eWluZGV4XSA9IG5tYXRjaGVzOyAgIC8qIGFkanVzdCBkaW1lbnNpb24gKi8KLSAgICB9Ci0jZW5k aWYJLyogTk9TUEwgKi8KLSAgICBpZiAoZ19tYXRjaGRvdCA+IC0xKSB7Ci0gICAgICAgIG1hdGNo ZG90ID0gZ19tYXRjaGRvdDsgICAgICAgICAgLyogUmVzdG9yZSB0aGVzZS4uLiAqLwotICAgICAg ICBnX21hdGNoZG90ID0gLTE7Ci0gICAgfQotICAgIGZyZWVkaXJsaXN0KCk7Ci0gICAgaWYgKG9m cCAhPSBzdGRvdXQpIHsgICAgICAgICAgICAgICAgLyogQ2xvc2UgYW55IG91dHB1dCBmaWxlICov Ci0gICAgICAgIGlmIChvZnApIGZjbG9zZShvZnApOwotICAgICAgICBvZnAgPSBzdGRvdXQ7Ci0g ICAgfQotICAgIGlmIChyYyA+IDApCi0gICAgICBzdWNjZXNzID0gMTsKLSAgICByZXR1cm4ocmMp OwotfQotCi1pbnQKLWRvZGlyKGN4KSBpbnQgY3g7IHsgICAgICAgICAgICAgICAgICAgICAvKiBE byB0aGUgRElSRUNUT1JZIGNvbW1hbmQgKi8KLSAgICBjaGFyICpkYyAsICptc2c7Ci0KLSNpZmRl ZiBPUzIKLSAgICByZXR1cm4oZG9teWRpcihjeCkpOwotI2Vsc2UgLyogT1MyICovCi0gICAgaWYg KG5vcHVzaAotI2lmZGVmIERPTVlESVIgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1aWxk cyB0aGF0IGRvbXlkaXIoKSBieSBkZWZhdWx0ICovCi0gICAgICAgIHx8IChjeCA9PSBYWERJUiAg fHwgY3ggPT0gWFhMRElSIHx8IGN4ID09IFhYV0RJUiB8fAotCSAgICBjeCA9PSBYWEhESVIgfHwg Y3ggPT0gWFhUT1VDKQotI2VuZGlmIC8qIERPTVlESVIgKi8KLSAgICAgICAgKQotICAgICAgcmV0 dXJuKGRvbXlkaXIoY3gpKTsJCS8qIEJ1aWx0LWluIGRpcmVjdG9yeSBjb21tYW5kICovCi0KLSAg ICAvKiBVc2UgdGhlIHN5c3RlbSdzIGRpcmVjdG9yeSBjb21tYW5kLiAqLwotCi0gICAgbXNnID0g KGN4ID09IFhYTFMpID8KLSAgICAgICJBcmd1bWVudHMgZm9yIGxzIiA6Ci0gICAgICAgICJEaXJl Y3RvcnkgYW5kL29yIGZpbGUgc3BlY2lmaWNhdGlvbiI7Ci0gICAgaWYgKCh4ID0gY210eHQobXNn LCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotCi0gICAgY2tzdHJuY3B5 KHRtcGJ1ZixzLFRNUEJVRlNJWik7ICAgICAgLyogQ29weSB0aGUgZmlsZXNwZWMgKi8KLSAgICBz ID0gdG1wYnVmOwotCi0gICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0KLSAg ICBscCA9IGxpbmU7Ci0gICAgaWYgKCEoZGMgPSBnZXRlbnYoIkNLX0RJUiIpKSkKLSAgICAgIGRj ID0gRElSQ01EOwotICAgIGNrbWFrbXNnKGxwLExJTkJVRlNJWixkYywiICIscyxOVUxMKTsKLSAg ICBkZWJ1ZyhGMTEwLCJESVIiLGxpbmUsMCk7Ci0jaWZkZWYgVk1TCi0gICAgY29ucmVzKCk7Ci0j ZW5kaWYgLyogVk1TICovCi0gICAgeCA9IHpzaGNtZChsaW5lKTsKLSNpZmRlZiBWTVMKLSAgICBj b25jYigoY2hhcillc2NhcGUpOwotI2VuZGlmIC8qIFZNUyAqLwotICAgIHJldHVybihzdWNjZXNz ID0gKHggPCAxKSA/IDAgOiAxKTsKLSNlbmRpZiAvKiBPUzIgKi8KLX0KLQotI2lmbmRlZiBOT1NF UlZFUgotI2lmbmRlZiBOT0ZSSUxMUwotLyogRG8gdGhlIEVOQUJMRSBhbmQgRElTQUJMRSBjb21t YW5kcyAqLwotCi1pbnQKLWRvZW5hYmxlKHkseCkgaW50IHksIHg7IHsKLSNpZmRlZiBDS19MT0dJ TgotICAgIGlmIChpc2d1ZXN0KSAgICAgICAgICAgICAgICAgICAgICAgIC8qIElLU0Q6IERvbid0 IGxldCBndWVzdHMgKi8KLSAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAv KiBlbmFibGUgYW55dGhpbmcgdGhhdCdzIGRpc2FibGVkICovCi0jZW5kaWYgLyogQ0tfTE9HSU4g Ki8KLSAgICBzd2l0Y2ggKHgpIHsKLSAgICAgIGNhc2UgRU5fQUxMOgotICAgICAgICBlbl9jd2Qg PSBlbl9jcHkgPSBlbl9kZWwgPSBlbl9kaXIgPSBlbl9maW4gPSBlbl9nZXQgPSB5OwotICAgICAg ICBlbl9yZW4gPSBlbl9zZW4gPSBlbl9zZXQgPSBlbl9zcGEgPSBlbl90eXAgPSBlbl9yZXQgPSB5 OwotICAgICAgICBpZiAoIWluc2VydmVyKQotICAgICAgICAgIGVuX3dobyA9IGVuX21haSA9IGVu X3ByaSA9IHk7Ci0gICAgICAgIGVuX21rZCA9IGVuX3JtZCA9IHk7Ci0gICAgICAgIGVuX3hpdCA9 IHk7Ci0jaWZuZGVmIGRhdGFnZW5lcmFsCi0gICAgICAgIGVuX2J5ZSA9IHk7Ci0jZW5kaWYgLyog ZGF0YWdlbmVyYWwgKi8KLSNpZm5kZWYgTk9QVVNICi0gICAgICAgIGlmICghbm9wdXNoICYmICFp bnNlcnZlcikKLSAgICAgICAgICBlbl9ob3MgPSB5OwotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2lm bmRlZiBOT1NQTAotICAgICAgICBlbl9hc2cgPSBlbl9xdWUgPSB5OwotI2VuZGlmIC8qIE5PU1BM ICovCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEVOX0JZRToKLSNpZm5kZWYgZGF0YWdl bmVyYWwKLS8qCi0gIEluIERhdGEgR2VuZXJhbCBBT1MvVlMgS2VybWl0IGNhbid0IGxvZyBvdXQg aXRzIHN1cGVyaW9yIHByb2Nlc3MuCi0qLwotICAgICAgICBlbl9ieWUgPSB5OwotI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCi0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFTl9DUFk6Ci0gICAg ICAgIGVuX2NweSA9IHk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFTl9DV0Q6Ci0gICAg ICAgIGVuX2N3ZCA9IHk7Ci0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgeSA9 PSAwKSB7Ci0gICAgICAgICAgICBmbnJwYXRoID0gUEFUSF9PRkY7Ci0gICAgICAgICAgICBmbnNw YXRoID0gUEFUSF9PRkY7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgIGJy ZWFrOwotICAgICAgY2FzZSBFTl9ERUw6ICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGV0aW5n IG9mIGZpbGVzICovCi0gICAgICAgIGVuX2RlbCA9IHk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg Y2FzZSBFTl9ESVI6Ci0gICAgICAgIGVuX2RpciA9IHk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg Y2FzZSBFTl9GSU46Ci0gICAgICAgIGVuX2ZpbiA9IHk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg Y2FzZSBFTl9HRVQ6Ci0gICAgICAgIGVuX2dldCA9IHk7Ci0gICAgICAgIGJyZWFrOwotI2lmbmRl ZiBOT1BVU0gKLSAgICAgIGNhc2UgRU5fSE9TOgotICAgICAgICBpZiAoIW5vcHVzaCkKLSAgICAg ICAgIGVuX2hvcyA9IHk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PUFVTSCAqLwotICAg ICAgY2FzZSBFTl9SRU46Ci0gICAgICAgIGVuX3JlbiA9IHk7Ci0gICAgICAgIGJyZWFrOwotICAg ICAgY2FzZSBFTl9TRU46Ci0gICAgICAgIGVuX3NlbiA9IHk7Ci0gICAgICAgIGJyZWFrOwotICAg ICAgY2FzZSBFTl9TRVQ6Ci0gICAgICAgIGVuX3NldCA9IHk7Ci0gICAgICAgIGJyZWFrOwotICAg ICAgY2FzZSBFTl9TUEE6Ci0gICAgICAgIGVuX3NwYSA9IHk7Ci0gICAgICAgIGJyZWFrOwotICAg ICAgY2FzZSBFTl9UWVA6Ci0gICAgICAgIGVuX3R5cCA9IHk7Ci0gICAgICAgIGJyZWFrOwotICAg ICAgY2FzZSBFTl9XSE86Ci0gICAgICAgIGVuX3dobyA9IHk7Ci0gICAgICAgIGJyZWFrOwotI2lm bmRlZiBOT1NQTAotICAgICAgY2FzZSBFTl9BU0c6Ci0gICAgICAgIGVuX2FzZyA9IHk7Ci0gICAg ICAgIGJyZWFrOwotICAgICAgY2FzZSBFTl9RVUU6Ci0gICAgICAgIGVuX3F1ZSA9IHk7Ci0gICAg ICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICBjYXNlIEVOX1JFVDoKLSAgICAg ICAgZW5fZGVsID0geTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVOX01BSToKLSNpZmRl ZiBDS19MT0dJTgotICAgICAgICBpZiAoaXNndWVzdCAmJiB5KSB7Ci0gICAgICAgICAgICBwcmlu dGYoIj9Tb3JyeSwgbm90IHZhbGlkIGZvciBndWVzdHNcbiIpOwotICAgICAgICAgICAgcmV0dXJu KC05KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgICAgIGVuX21haSA9 IHk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFTl9QUkk6Ci0jaWZkZWYgQ0tfTE9HSU4K LSAgICAgICAgaWYgKGlzZ3Vlc3QgJiYgeSkgewotICAgICAgICAgICAgcHJpbnRmKCI/U29ycnks IG5vdCB2YWxpZCBmb3IgZ3Vlc3RzXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgICAgICBlbl9wcmkgPSB5OwotICAgICAg ICBicmVhazsKLSAgICAgIGNhc2UgRU5fTUtEOgotICAgICAgICBlbl9ta2QgPSB5OwotICAgICAg ICBicmVhazsKLSAgICAgIGNhc2UgRU5fUk1EOgotICAgICAgICBlbl9ybWQgPSB5OwotICAgICAg ICBicmVhazsKLSAgICAgIGNhc2UgRU5fWElUOgotICAgICAgICBlbl94aXQgPSB5OwotICAgICAg ICBicmVhazsKLSAgICAgIGNhc2UgRU5fRU5BOgotICAgICAgICBpZiAoKCh5ICYgMSkgJiYgIShl bl9lbmEgJiAxKSkgfHwKLSAgICAgICAgICAgICgoeSAmIDIpICYmICEoZW5fZW5hICYgMikpKSB7 Ci0gICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgRElTQUJMRSBFTkFCTEUgY2FuIG5vdCBiZSB1 bmRvbmVcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgIGVuX2VuYSA9IHk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0gICAgcmV0dXJuKDEpOwot fQotI2VuZGlmIC8qIE5PRlJJTExTICovCi0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQotI2lmbmRl ZiBOT0ZSSUxMUwotCi1zdGF0aWMgaW50IGRlbF9saXMgPSAwOwotc3RhdGljIGludCBkZWxfZG90 ID0gMDsKLXN0YXRpYyBpbnQgZGVsX2hkZyA9IDA7Ci1zdGF0aWMgaW50IGRlbF9wYWcgPSAtMTsK LXN0YXRpYyBpbnQgZGVsX2FzayA9IDA7Ci0KLSNpZm5kZWYgTk9TSE9XCi1WT0lECi1zaG93ZGVs b3B0cygpIHsKLSAgICBpbnQgeCA9IDA7Ci0gICAgZXh0ZXJuIGludCBvcHRsaW5lczsKLSAgICBw cnRvcHQoJm9wdGxpbmVzLCIiKTsKLSAgICBwcnRvcHQoJm9wdGxpbmVzLCJERUxFVEUiKTsKLSAg ICBpZiAoZGVsX2FzayA+IC0xKSB7Ci0gICAgICAgIHBydG9wdCgmb3B0bGluZXMsIGRlbF9hc2sg PyAiL0FTSyIgOiAiL05PQVNLIik7Ci0gICAgICAgIHgrKzsKLSAgICB9Ci0jaWZkZWYgVU5JWE9S T1NLCi0gICAgaWYgKGRlbF9kb3QgPiAtMSkgewotICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLCBk ZWxfZG90ID8gIi9ET1RGSUxFUyIgOiAiL05PRE9URklMRVMiKTsKLSAgICAgICAgeCsrOwotICAg IH0KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSAgICBpZiAoZGVsX2xpcyA+IC0xKSB7Ci0gICAg ICAgIHBydG9wdCgmb3B0bGluZXMsIGRlbF9saXMgPyAiL0xJU1QiIDogIi9OT0xJU1QiKTsKLSAg ICAgICAgeCsrOwotICAgIH0KLSAgICBpZiAoZGVsX2hkZyA+IC0xKSB7Ci0gICAgICAgIHBydG9w dCgmb3B0bGluZXMsIGRlbF9oZGcgPyAiL0hFQURJTkciIDogIi9OT0hFQURJTkciKTsKLSAgICAg ICAgeCsrOwotICAgIH0KLSNpZm5kZWYgQ0tfVFRHV1NJWgotICAgIGlmIChkZWxfcGFnID4gLTEp IHsKLSAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcywgZGVsX3BhZyA/ICIvUEFHRSIgOiAiL05PUEFH RSIpOwotICAgICAgICB4Kys7Ci0gICAgfQotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICBp ZiAoIXgpIHBydG9wdCgmb3B0bGluZXMsIihubyBvcHRpb25zIHNldCkiKTsKLSAgICBwcnRvcHQo Jm9wdGxpbmVzLCIiKTsKLX0KLSNlbmRpZiAvKiBOT1NIT1cgKi8KLQotCi1pbnQKLXNldGRlbG9w dHMoKSB7Ci0gICAgaW50IHhfbGlzID0gLTEsIHhfcGFnID0gLTEsIHhfZG90ID0gLTEsIHhfaGRn ID0gLTEsIHhfYXNrID0gLTE7Ci0gICAgaW50IGdldHZhbCA9IDA7Ci0gICAgY2hhciBjOwotICAg IHdoaWxlICgxKSB7Ci0gICAgICAgIGlmICgoeSA9IGNtc3dpKGRlbHRhYixuZGVsdGFiLCJTd2l0 Y2giLCIiLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoeSA9PSAtMykKLSAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHJldHVybih5 KTsKLSAgICAgICAgfQotICAgICAgICBjID0gY21nYnJrKCk7Ci0gICAgICAgIGlmICgoZ2V0dmFs ID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsK LSAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1l bnRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBpZiAo IWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICBwcmludGYo Ij9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICByZXR1 cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoeSkgewotICAgICAgICAgIGNhc2Ug REVMX0RPVDoKLSAgICAgICAgICAgIHhfZG90ID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgIGNhc2UgREVMX05PRDoKLSAgICAgICAgICAgIHhfZG90ID0gMDsKLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIGNhc2UgREVMX0hERzoKLSAgICAgICAgICAgIHhfaGRnID0gMTsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgREVMX0xJUzoKLSAgICAgICAgICAg IHhfbGlzID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgREVMX05PTDoK LSAgICAgICAgICAgIHhfbGlzID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmbmRlZiBDS19U VEdXU0laCi0gICAgICAgICAgY2FzZSBERUxfUEFHOgotICAgICAgICAgICAgeF9wYWcgPSAxOwot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBERUxfTk9QOgotICAgICAgICAgICAg eF9wYWcgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwot ICAgICAgICAgIGNhc2UgREVMX1FVSToKLSAgICAgICAgICAgIHhfbGlzID0gMDsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgREVMX1ZSQjoKLSAgICAgICAgICAgIHhfbGlzID0g MTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgREVMX0FTSzoKLSAgICAgICAg ICAgIHhfYXNrID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgREVMX05B UzoKLSAgICAgICAgICAgIHhfYXNrID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg IGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgdGhpcyBvcHRpb24gY2FuIG5v dCBiZSBzZXRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgIH0K LSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApICAgICAgICAgICAgICAvKiBHZXQgY29uZmlybWF0 aW9uICovCi0gICAgICByZXR1cm4oeCk7Ci0gICAgaWYgKHhfcGFnID4gLTEpIGRlbF9wYWcgPSB4 X3BhZzsKLSAgICBpZiAoeF9kb3QgPiAtMSkgZGVsX2RvdCA9IHhfZG90OwotICAgIGlmICh4X2hk ZyA+IC0xKSBkZWxfaGRnID0geF9oZGc7Ci0gICAgaWYgKHhfbGlzID4gLTEpIGRlbF9saXMgPSB4 X2xpczsKLSAgICBpZiAoeF9hc2sgPiAtMSkgZGVsX2FzayA9IHhfYXNrOwotICAgIHJldHVybihz dWNjZXNzID0gMSk7Ci19Ci0KLSNpZmRlZiBPUzIKLXN0YXRpYyBjaGFyICoqIHhtdGNocyA9IE5V TEw7Ci1zdGF0aWMgaW50IHhtdGNobiA9IDA7Ci0jZW5kaWYgLyogT1MyICovCi0KLWludAotZG9k ZWwoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFTEVURSAqLwotICAgIGlu dCBpLCBqLCBrLCB4OwotICAgIGludCBmcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE5lZWQgdG8gY2FsbCBmaWxlc2VsZWN0KCkgKi8KLSAgICBpbnQgbGVuID0gMDsKLSAgICBpbnQg YmFkID0gMDsKLSAgICBpbnQgZ2V0dmFsID0gMCwgYXNraW5nID0gMDsKLSAgICBpbnQgc2ltdWxh dGUgPSAwLCByYyA9IDA7Ci0gICAgQ0tfT0ZGX1QgbWluc2l6ZSA9IC0xTCwgbWF4c2l6ZSA9IC0x TDsKLSAgICBpbnQgaGF2ZW5hbWUgPSAwLCBjb25maXJtZWQgPSAwOwotICAgIGludCBxZmxhZyA9 IDA7Ci0gICAgaW50IHN1bW1hcnkgPSAwOwotICAgIGludCBkZWxkaXJzID0gMDsKLSAgICBpbnQg ZGVsdHJlZSA9IDA7Ci0gICAgaW50IGl0c2FkaXIgPSAwOwotICAgIGludCBhcmdpc2RpciA9IDA7 Ci0gICAgaW50IHhtb2RlID0gLTEsIHNjYW4gPSAwLCBza2lwID0gMDsKLSNpZmRlZiBDT01NRU5U Ci0gICAgaW50IHBhc3MgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBjaGFyIGM7Ci0g ICAgY2hhciAqIGRlbGRlZiA9ICIiOwotICAgIGNoYXIgc2FmZWJ1ZltDS01BWFBBVEgrMV07Ci0g ICAgc3RydWN0IEZEQiBzdywgZmksIGZsOwotICAgIGNoYXIKLSAgICAgICogZGVsX2FmdCA9IE5V TEwsCi0gICAgICAqIGRlbF9iZWYgPSBOVUxMLAotICAgICAgKiBkZWxfbmFmID0gTlVMTCwKLSAg ICAgICogZGVsX25iZiA9IE5VTEwsCi0gICAgICAqIGRlbF9leGMgPSBOVUxMOwotICAgIGludAot ICAgICAgeF9saXMgPSAwLAotICAgICAgLyogeF9kb3QgPSAtMSwgKi8KLSAgICAgIHhfaGRnID0g MDsKLQotICAgIGNoYXIgKiBkeGxpc3RbOF07Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsr KSBkeGxpc3RbaV0gPSBOVUxMOwotCi0gICAgZ19tYXRjaGRvdCA9IG1hdGNoZG90OwotCi0gICAg aWYgKGRlbF9saXMgPiAtMSkgeF9saXMgICAgPSBkZWxfbGlzOwotICAgIGlmIChkZWxfZG90ID4g LTEpIG1hdGNoZG90ID0gZGVsX2RvdDsKLSAgICBpZiAoZGVsX2hkZyA+IC0xKSB4X2hkZyAgICA9 IGRlbF9oZGc7Ci0gICAgaWYgKGRlbF9wYWcgPiAtMSkgeGFza21vcmUgPSBkZWxfcGFnOwotICAg IGlmIChkZWxfYXNrID4gLTEpIGFza2luZyAgID0gZGVsX2FzazsKLQotICAgIGRpcmFjdGl2ZSA9 IDE7Ci0gICAgbm9saW5rcyA9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQnkgZGVmYXVs dCBkb24ndCBmb2xsb3cgbGlua3MgKi8KLQotICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KLSAgICAgICAgICAg X0NNS0VZLCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAiRmls ZSBzcGVjaWZpY2F0aW9uO1xuIG9yIHN3aXRjaCIsCi0gICAgICAgICAgICIiLCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIG5kZWx0YWIs ICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICov Ci0gICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJp YyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAg ICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgZGVsdGFiLCAgICAg ICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICZmaSAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAgICAg ICApOwotICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueXRoaW5n IHRoYXQgZG9lc24ndCBtYXRjaCAqLwotICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAg ICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotICAgICAgICAgICB4 eHN0cmluZywKLSAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgTlVMTAotICAgICAgICAgICAp OwotICBhZ2FpbjoKLSAgICBjbWZkYmkoJmZpLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAy bmQgRkRCIC0gZmlsZSB0byBkZWxldGUgKi8KLSAgICAgICAgICAgX0NNSUZJLCAgICAgICAgICAg ICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAiRmlsZShzKSB0byBkZWxldGUiLCAg ICAgICAgIC8qIGhscG1zZyAqLwotICAgICAgICAgICBkZWxkZWYsICAgICAgICAgICAgICAgICAg ICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICBub2xpbmtzIHwgZGVsZGlycywg ICAgICAgICAgIC8qIDAgPSBmaWxlcywgMSA9IGZpbGVzIG9yIGRpcnMgKi8KLSAgICAgICAgICAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxID0gZGlycyBvbmx5ICovCi0gICAgICAg ICAgIHh4c3RyaW5nLAotICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAmZmwKLSAgICAgICAg ICAgKTsKLSAgICB3aGlsZSAoIWhhdmVuYW1lICYmICFjb25maXJtZWQpIHsKLSAgICAgICAgeCA9 IGNtZmRiKCZzdyk7ICAgICAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KLSAgICAg ICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciAqLwotICAgICAgICAg ICAgaWYgKHggPT0gLTMpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHgg PT0gLTIgfHwgeCA9PSAtOSkKLSAgICAgICAgICAgICAgcHJpbnRmKCI/RG9lcyBub3QgbWF0Y2gg c3dpdGNoIG9yIGZpbGVuYW1lOiBcIiVzXCJcbiIsYXRtYnVmKTsKLSAgICAgICAgICAgIHJldHVy bih4KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKSAg IC8qIEJyZWFrIG91dCBpZiBub3QgYSBzd2l0Y2ggKi8KLSAgICAgICAgICBicmVhazsKLSAgICAg ICAgYyA9IGNtZ2JyaygpOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgYnJlYWsgY2hhcmFjdGVy ICovCi0gICAgICAgIGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShj bWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNo IGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwotICAgICAgICAgICAgcmMgPSAtOTsKLSAg ICAgICAgICAgIGdvdG8geGRlbGV0ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWdldHZhbCAm JiAoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3 aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICByYyA9IC05OwotICAg ICAgICAgICAgZ290byB4ZGVsZXRlOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoayA9IGNt cmVzdWx0Lm5yZXN1bHQpIHsKLSAgICAgICAgICBjYXNlIERFTF9BRlQ6Ci0gICAgICAgICAgY2Fz ZSBERUxfQkVGOgotICAgICAgICAgIGNhc2UgREVMX05BRjoKLSAgICAgICAgICBjYXNlIERFTF9O QkY6Ci0gICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoKHgg PSBjbWRhdGUoIkZpbGUtdGltZSIsIiIsJnMsMCx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAg ICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0RhdGUt dGltZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAg ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgIHJjID0geDsKLSAgICAgICAgICAgICAg ICBnb3RvIHhkZWxldGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcysrOwotICAgICAg ICAgICAgZGVsdHJlZSA9IDA7Ci0gICAgICAgICAgICBzd2l0Y2ggKGspIHsKLSAgICAgICAgICAg ICAgY2FzZSBERUxfQUZUOiBtYWtlc3RyKCZkZWxfYWZ0LHMpOyBicmVhazsKLSAgICAgICAgICAg ICAgY2FzZSBERUxfQkVGOiBtYWtlc3RyKCZkZWxfYmVmLHMpOyBicmVhazsKLSAgICAgICAgICAg ICAgY2FzZSBERUxfTkFGOiBtYWtlc3RyKCZkZWxfbmFmLHMpOyBicmVhazsKLSAgICAgICAgICAg ICAgY2FzZSBERUxfTkJGOiBtYWtlc3RyKCZkZWxfbmJmLHMpOyBicmVhazsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgREVMX0RPVDoKLSAgICAgICAg ICAgIG1hdGNoZG90ID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgREVM X05PRDoKLSAgICAgICAgICAgIG1hdGNoZG90ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgIGNhc2UgREVMX0FMTDoKLSAgICAgICAgICAgIGZzID0gMDsKLSNpZmRlZiBWTVMKLSAg ICAgICAgICAgIGRlbGRlZiA9ICIqLioiOyAgICAgICAgICAgICAvKiBVTklYLCBXaW5kb3dzLCBP Uy8yICovCi0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgICAgICAgICBkZWxkZWYgPSAi KyI7ICAgICAgICAgICAgICAgLyogQU9TL1ZTICovCi0jZWxzZQotICAgICAgICAgICAgZGVsZGVm ID0gIioiOyAgICAgICAgICAgICAgIC8qIFVOSVgsIFdpbmRvd3MsIE9TLzIsIFZNUy4uLiAqLwot I2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgICAgICAgICBk ZWx0cmVlID0gMTsKLSAgICAgICAgICAgIG5vbGlua3MgPSAyOwotICAgICAgICAgICAgbWF0Y2hk b3QgPSAxOwotICAgICAgICAgICAgcmVjdXJzaXZlID0gMTsgICAgICAgICAgICAgIC8qIEZhbGwg dGhyb3VnaCBwdXJwb3NlbHkuLi4gKi8KLSAgICAgICAgICBjYXNlIERFTF9ESVI6Ci0gICAgICAg ICAgICBkZWxkaXJzID0gMTsKLSAgICAgICAgICAgIGdvdG8gYWdhaW47Ci0gICAgICAgICAgY2Fz ZSBERUxfRVhDOgotICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAg aWYgKCh4ID0gY21mbGQoIlBhdHRlcm4iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAg ICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/UGF0 dGVybiByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAg ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgIHJjID0geDsKLSAgICAgICAgICAgICAg ICBnb3RvIHhkZWxldGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcysrOwotICAgICAg ICAgICAgZGVsdHJlZSA9IDA7Ci0gICAgICAgICAgICBtYWtlc3RyKCZkZWxfZXhjLHMpOwotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBERUxfSERHOgotICAgICAgICAgICAgeF9o ZGcgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgUkVDVVJTSVZFCi0gICAgICAgICAg Y2FzZSBERUxfUkVDOgotICAgICAgICAgICAgcmVjdXJzaXZlID0gMTsKLSAgICAgICAgICAgIGJy ZWFrOwotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgICAgICAgIGNhc2UgREVMX0xJUzoKLSAg ICAgICAgICAgIHhfbGlzID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug REVMX1NVTToKLSAgICAgICAgICAgIHN1bW1hcnkgPSAxOwotICAgICAgICAgICAgeF9saXMgPSAw OwotICAgICAgICAgICAgeF9oZGcgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSBERUxfTk9MOgotICAgICAgICAgICAgeF9saXMgPSAwOwotICAgICAgICAgICAgYnJlYWs7 Ci0jaWZuZGVmIENLX1RUR1dTSVoKLSAgICAgICAgICBjYXNlIERFTF9QQUc6Ci0gICAgICAgICAg ICB4YXNrbW9yZSA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERFTF9O T1A6Ci0gICAgICAgICAgICB4YXNrbW9yZSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRp ZiAvKiBDS19UVEdXU0laICovCi0gICAgICAgICAgY2FzZSBERUxfUVVJOgotICAgICAgICAgICAg cWZsYWcgPSAxOwotICAgICAgICAgICAgeF9saXMgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSBERUxfVlJCOgotICAgICAgICAgICAgeF9saXMgPSAxOwotICAgICAgICAg ICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIERFTF9TTUE6Ci0gICAgICAgICAgY2FzZSBERUxf TEFSOgotICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgaWYgKCh4 ID0gY21udW0oIkZpbGUgc2l6ZSBpbiBieXRlcyIsIjAiLDEwLCZ5LHh4c3RyaW5nKSkgPCAwKQot ICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICBmcysrOwotICAgICAgICAgICAg ZGVsdHJlZSA9IDA7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKLSAg ICAgICAgICAgICAgY2FzZSBERUxfU01BOiBtaW5zaXplID0geTsgYnJlYWs7Ci0gICAgICAgICAg ICAgIGNhc2UgREVMX0xBUjogbWF4c2l6ZSA9IHk7IGJyZWFrOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIERFTF9TSU06Ci0gICAgICAgICAgICBz aW11bGF0ZSA9IDE7Ci0gICAgICAgICAgICB4X2xpcyA9IDE7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgICBjYXNlIERFTF9BU0s6Ci0gICAgICAgICAgICBhc2tpbmcgPSAxOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBERUxfTkFTOgotICAgICAgICAgICAgYXNraW5n ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgREVMX1RZUDogewotICAg ICAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRhYiB0eHRiaW5bXTsKLSAgICAgICAgICAgICAg aWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0eHRiaW4s MywiIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAg ICAgICAgICAgIGlmICh4ID09IDIpIHsgICAgICAgICAgICAgLyogQUxMICovCi0gICAgICAgICAg ICAgICAgICB4bW9kZSA9IC0xOwotICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAg ICAgIC8qIFRFWFQgb3IgQklOQVJZIG9ubHkgKi8KLSAgICAgICAgICAgICAgICAgIHhtb2RlID0g eDsKLSAgICAgICAgICAgICAgICAgIHNjYW4gPSAxOwotICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg ICAgcHJpbnRmKCI/Tm90IGltcGxlbWVudGVkIHlldCAtIFwiJXNcIlxuIixhdG1idWYpOwotICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocWZsYWcgJiYg KGNtcmVzdWx0LmZjb2RlID09IF9DTUZMRCkpIHsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMCk7Ci0gICAgfQotICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01JRkkp IHsKLSAgICAgICAgaWYgKCphdG1idWYpIHsKLQkgICAgaW50IHg7Ci0gICAgICAgICAgICBpZiAo aXN3aWxkKGF0bWJ1ZikgJiYgbnp4cGFuZChhdG1idWYsbnp4b3B0cykgPT0gMCkKLSAgICAgICAg ICAgICAgcHJpbnRmKCI/Tm8gZmlsZXMgbWF0Y2g6ICVzXG4iLGJyc3RyaXAoYXRtYnVmKSk7Ci0g ICAgICAgICAgICBlbHNlIGlmICgoeCA9IHpjaGtpKGF0bWJ1ZikpID09IC0xKQotCSAgICAgIHBy aW50ZigiP0ZpbGUgbm90IGZvdW5kOiAlc1xuIixicnN0cmlwKGF0bWJ1ZikpOwotCSAgICBlbHNl IGlmICh4ID09IC0yKQotCSAgICAgIHByaW50ZigiP05vdCBhIHJlZ3VsYXIgZmlsZTogJXNcbiIs YXRtYnVmKTsKLQkgICAgZWxzZQotICAgICAgICAgICAgICAvKiBwcmludGYoIj9Ob3QgYSBkZWxl dGFibGUgZmlsZTogJXNcbiIsYXRtYnVmKTsgKi8KLSAgICAgICAgICAgICAgZ290byB0cnlhbnl3 YXk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludGYoIj9BIGZpbGUgc3BlY2lm aWNhdGlvbiBpcyByZXF1aXJlZFxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKC05KTsK LSAgICB9Ci0gIHRyeWFueXdheToKLSAgICBja3N0cm5jcHkodG1wYnVmLGNtcmVzdWx0LnNyZXN1 bHQsVE1QQlVGU0laKTsgLyogU2FmZSBjb3B5IG9mIGZpbGVzcGVjICovCi0gICAgaWYgKGRlbGRp cnMpIHsKLSAgICAgICAgY2tzdHJuY3B5KHNhZmVidWYsY21yZXN1bHQuc3Jlc3VsdCxDS01BWFBB VEgpOwotI2lmZGVmIFZNU09SVU5JWAotICAgICAgICBsZW4gPSB6Z2V0ZnModG1wYnVmKTsgICAg ICAgICAgIC8qIElzIGl0IGEgZGlyZWN0b3J5IG5hbWU/ICovCi0gICAgICAgIGFyZ2lzZGlyID0g emdmc19kaXI7ICAgICAgICAgICAgLyogVGhlbiBiZWNhdXNlIG9mIGhvdyB6eHBhbmQoKSAqLwot ICAgICAgICBpZiAoYXJnaXNkaXIgJiYgemdmc19saW5rKSAgICAgIC8qIHdvcmtzLCB3ZSBoYXZl IHRvIGFkZCBpdCB0byAqLwotICAgICAgICAgIGFyZ2lzZGlyID0gMDsgICAgICAgICAgICAgICAg IC8qIHRoZSBsaXN0LiAqLwotICAgICAgICBpZiAoaXRzYWRpcikKLSAgICAgICAgICBsZW4gPSAt MjsKLSNlbHNlCi0gICAgICAgIGxlbiA9IHpjaGtpKHRtcGJ1Zik7Ci0gICAgICAgIGlmIChsZW4g PCAwKQotICAgICAgICAgIGFyZ2lzZGlyID0gaXNkaXIodG1wYnVmKTsKLSNlbmRpZiAvKiBWTVNP UlVOSVggKi8KLSAgICB9Ci0gICAgZGVidWcoRjExMCwiREVMRVRFIGZpbGUiLHRtcGJ1ZiwwKTsK LSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0KLSNpZmRlZiBJ S1NECi0jaWZkZWYgQ0tfTE9HSU4KLSAgICBpZiAoaW5zZXJ2ZXIgJiYgaXNndWVzdCkgewotICAg ICAgICBwcmludGYoIj9Tb3JyeSwgREVMRVRFIHVuYXZhaWxhYmxlIHRvIGd1ZXN0c1xuIik7Ci0g ICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jZW5kaWYg LyogSUtTRCAqLwotCi0jaWZuZGVmIE9TMk9SVU5JWAotICAgIGlmIChzaW11bGF0ZSkgewotICAg ICAgICBwcmludGYoIj9Tb3JyeSwgL1NJTVVMQVRFIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBs YXRmb3JtXG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyT1JV TklYICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogKG5vdCBuZWVkZWQpICovCi0gICAgaWYg KCFpc3dpbGQodG1wYnVmKSkgewotICAgICAgICBjaGFyICptOwotICAgICAgICBlcnJubyA9IDA7 Ci0gICAgICAgIHggPSB6Y2hraSh0bXBidWYpOwotICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAg ICAgICAgIHN3aXRjaCAoeCkgewotICAgICAgICAgICAgICBjYXNlIC0yOiBtID0gIk5vdCBhIHJl Z3VsYXIgZmlsZSI7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIC0xOiBtID0gIkZpbGUgbm90 IGZvdW5kIG9yIG5vdCBhY2Nlc3NpYmxlIjsgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6 IG0gPSBlcnJubyA/IGNrX2VycnN0cigpIDogIkNhbid0IGRlbGV0ZSI7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBwcmludGYoIj8lczogXCIlc1wiXG4iLG0sdG1wYnVmKTsKLSAgICAgICAg ICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot Ci0gICAgbWFrZWxpc3QoZGVsX2V4YyxkeGxpc3QsOCk7Ci0KLS8qIHRtcGJ1ZltdIGhhcyB0aGUg bmFtZSAtIG5vdyBkbyBhbnkgbmVlZGVkIGNvbnZlcnNpb25zIG9uIGl0ICovCi0KLSNpZmRlZiBP UzIKLSAgICB7ICAgLyogTG93ZXIgbGV2ZWwgZnVuY3Rpb25zIGNoYW5nZSAvIHRvIFwsIG5vdCBn b29kIGZvciBDTUQuRVhFLiAqLwotICAgICAgICBjaGFyICpwID0gdG1wYnVmOwotICAgICAgICB3 aGlsZSAoKnApIHsgICAgICAgICAgICAgICAgICAgIC8qIENoYW5nZSB0aGVtIGJhY2sgdG8gXCAq LwotICAgICAgICAgICAgaWYgKCpwID09ICcvJykgKnAgPSAnXFwnOwotICAgICAgICAgICAgcCsr OwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgVk1TCi0gICAg aWYgKGlzd2lsZCh0bXBidWYpKSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAvKiBEb2VzIG5v dCBoYW5kbGUgJy4nIGFzIHZlcnNpb24gc2VwYXJhdG9yICovCi0gICAgICAgIGNoYXIgKnAgPSB0 bXBidWY7Ci0gICAgICAgIHggPSAwOwotICAgICAgICB3aGlsZSAoKnApIHsKLSAgICAgICAgICAg IGlmICgqcCA9PSAnOycpIHsKLSAgICAgICAgICAgICAgICB4ID0gMTsKLSAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICBwKys7Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKCF4KSBja3N0cm5jYXQodG1wYnVmLCI7KiIsVE1QQlVGU0laKTsKLSNl bHNlCi0gICAgICAgIGogPSAwOyB4ID0gMDsgICAgICAgICAgICAgICAgICAgLyogZm9yIGVuZF9k b3QgYW5kIG51bWJlciBvZiBkb3RzICovCi0gICAgICAgIGkgPSBzdHJsZW4odG1wYnVmKTsKLSAg ICAgICAgaWYgKHRtcGJ1ZltpXSA9PSAnOycpIHsKLSAgICAgICAgICAgIGNrc3RybmNhdCh0bXBi dWYsIjAiLFRNUEJVRlNJWik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodG1w YnVmW2ktLV0gPT0gJy4nKQotICAgICAgICAgICAgICBqKys7Ci0gICAgICAgICAgICBmb3IgKDsg aSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBpZiAodG1wYnVmW2ldID09ICc7JyB8fCB0 bXBidWZbaV0gPT0gJzonIHx8Ci0gICAgICAgICAgICAgICAgICAgIHRtcGJ1ZltpXSA9PSAnXScg fHwgdG1wYnVmW2ldID09ICc+JykKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgIGVsc2UgaWYgKHRtcGJ1ZltpXSA9PSAnLicpCi0gICAgICAgICAgICAgICAgICB4Kys7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodG1wYnVmW2ldICE9ICc7JykgeyAgICAg LyogZG90IG1heSBoYXZlIGJlZW4gdXNlZCAqLwotICAgICAgICAgICAgICAgIGlmIChqKSB7ICAg ICAgICAgICAgICAgIC8qIGxhc3QgY2hhciBpcyBkb3QgKi8KLSAgICAgICAgICAgICAgICAgIGlm ICh4KSAgICAgICAgICAgICAgICAvKiBzZWNvbmQgaXMgdmVyc2lvbiBzZXBhcmF0b3IgKi8KLSAg ICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRtcGJ1ZiwiMCIsVE1QQlVGU0laKTsKLSAgICAg ICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAvKiAnZm9vLicgKi8KLSAgICAgICAg ICAgICAgICAgICAgY2tzdHJuY2F0KHRtcGJ1ZiwiOzAiLFRNUEJVRlNJWik7Ci0gICAgICAgICAg ICAgICAgfSBlbHNlIGlmICh4ID09IDEpICAgICAgLyogbGFja2luZyBhIHZlcnNpb24gc2VwYXJh dG9yICovCi0gICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG1wYnVmLCI7MCIsVE1QQlVGU0la KTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh4ID09IDApICAgICAgICAvKiB4ID09IDIgaGFz IGEgdmVyc2lvbiAqLwotICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRtcGJ1ZiwiLio7MCIs VE1QQlVGU0laKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLSAgICB9Ci0jZW5kaWYgLyogVk1TICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJkb2RlbCB0bXBi dWYiLHRtcGJ1ZiwwKTsgLyogRmlsZW5hbWUgKi8KLQotI2lmbmRlZiBPUzJPUlVOSVggICAgICAg ICAgICAgICAgICAgICAgIC8qIE5vIGJ1aWx0LWluIERFTEVURSBjb2RlLi4uICovCi0gICAgLyog Q29uc3RydWN0IHN5c3RlbSBjb21tYW5kLiAqLwotICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0la LERFTENNRCwiICIsdG1wYnVmLE5VTEwpOwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICBpZiAoYXNr aW5nKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXliZSBvdmVyd3JpdGUgaW4gVk1TICov Ci0gICAgICAgIGlmICh4X2xpcykgICAgICAgICAgICAgICAgICAgICAgLyogaWYgb3B0aW9ucyBh cmUgbmVlZGVkLi4uICovCi0gICAgICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosREVMQ01E LCIgL2NvbmZpcm0vbG9nICIsdG1wYnVmLE5VTEwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg Y2ttYWttc2cobGluZSxMSU5CVUZTSVosREVMQ01ELCIgL2NvbmZpcm0gIix0bXBidWYsTlVMTCk7 Ci0gICAgfSBlbHNlIGlmICh4X2xpcykKLSAgICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLERF TENNRCwiIC9sb2cgIix0bXBidWYsTlVMTCk7Ci0gICAgY29ucmVzKCk7Ci0jZW5kaWYgLyogVk1T ICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJkb2RlbCBsaW5lIixsaW5lLDApOwotI2VuZGlmIC8qIE9T Mk9SVU5JWCAqLwotCi0jaWZkZWYgTUFDCi0gICAgc3VjY2VzcyA9ICh6ZGVsZXQodG1wYnVmKSA9 PSAwKTsKLQotI2Vsc2UgIC8qICFNQUMgLi4uICovCi0KLSNpZmRlZiBPUzJPUlVOSVgKLSAgICB7 Ci0gICAgICAgIGludCBmaWxlc3BhY2UgPSAwOwotICAgICAgICBpbnQgY291bnQgPSAwOwotICAg ICAgICBpbnQgbGluZXMgPSAwOwotICAgICAgICBpbnQgbiA9IDA7Ci0KLSAgICAgICAgcyA9IHRt cGJ1ZjsKLQotI2lmZGVmIENLX1RUR1dTSVoKLSNpZmRlZiBPUzIKLSAgICAgICAgdHRnY3dzeigp OwotI2Vsc2UgLyogT1MyICovCi0gICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2luZG93IHNpemUg Y2hhbmdlZCAqLwotICAgICAgICBpZiAodHRnd3NpeigpID4gMCkgewotICAgICAgICAgICAgaWYg KHR0X3Jvd3MgPiAwICYmIHR0X2NvbHMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgY21kX3Jvd3Mg PSB0dF9yb3dzOwotICAgICAgICAgICAgICAgIGNtZF9jb2xzID0gdHRfY29sczsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENLX1RUR1dTSVog Ki8KLQotICAgICAgICBpZiAoeF9oZGcgPiAwICYmICFzdW1tYXJ5KSB7Ci0gICAgICAgICAgICBw cmludGYoIkRlbGV0aW5nICVzLi4uJXNcbiIsIHMsIHNpbXVsYXRlID8gIiAoU0lNVUxBVElPTiki IDogIiIpOwotICAgICAgICAgICAgbiArPSAyOwotICAgICAgICB9Ci0jaWZkZWYgWlhSRVdJTkQK LSAgICAgICAgeiA9IHp4cmV3aW5kKCk7ICAgICAgICAgICAgICAgICAvKiBSZXdpbmQgZmlsZSBs aXN0ICovCi0jZWxzZQotICAgICAgICBpZiAoIWRlbGRpcnMpCi0gICAgICAgICAgbnp4b3B0cyA9 IFpYX0ZJTE9OTFk7Ci0gICAgICAgIGlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJT RTsKLSAgICAgICAgaWYgKG1hdGNoZG90KSAgbnp4b3B0cyB8PSBaWF9NQVRDSERPVDsKLSAgICAg ICAgZXJybm8gPSAwOwotICAgICAgICB6ID0gbnp4cGFuZChzLG56eG9wdHMpOyAgICAgICAgIC8q IEV4cGFuZCBmaWxlIGxpc3QgKi8KLSNlbmRpZiAvKiBaWFJFV0lORCAqLwotICAgICAgICBkZWJ1 ZyhGMTExLCJkb2RlbCIscyx6KTsKLQotICAgICAgICAvKiBJZiBkZWxldGluZyBkaXJlY3Rvcmll cywgc29ydCBpbiByZXZlcnNlIG9yZGVyICovCi0gICAgICAgIC8qIHNvIHdlIGRlbGV0ZSB0aGUg ZmlsZXMgZmlyc3QsIHRoZW4gdGhlIGRpcmVjdG9yeS4gKi8KLQotI2lmZGVmIE9TMgotICAgICAg ICAvKiBJbiBLOTUsIHdlIGhhdmUgbm8gbXRjaHMgYXJyYXksIG5vciBhbnkgY29udHJvbCBvdmVy ICovCi0gICAgICAgIC8qIHRoZSBvcmRlciBpbiB3aGljaCB6bmV4dCgpIHJldHVybnMgZmlsZW5h bWVzLCBzbyB3ZSAgKi8KLSAgICAgICAgLyogbXVzdCBjb3B5IHRoZSBhcnJheSBhbmQgc29ydCBp dC4gKi8KLSAgICAgICAgewotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICBpZiAoeG10 Y2hzKSB7ICAgICAgICAgICAgICAgLyogRnJlZSBwcmV2aW91cyBsaXN0IGluIGNhc2UgKi8KLSAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2RlbCBmcmVlaW5nIHByZXZpb3VzIGxpc3QiLCIi LHhtdGNobik7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHhtdGNobjsgaSsrKSAv KiBpdCB3YXNuJ3QgZnJlZWQgbGFzdCB0aW1lLiAqLwotICAgICAgICAgICAgICAgICAgaWYgKHht dGNoc1tpXSkKLSAgICAgICAgICAgICAgICAgICAgZnJlZSh4bXRjaHNbaV0pOwotICAgICAgICAg ICAgICAgIGZyZWUoeG10Y2hzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHhtdGNobiA9 IDA7Ci0gICAgICAgICAgICB4bXRjaHMgPSAoY2hhciAqKiltYWxsb2MoeiAqIChzaXplb2YoY2hh ciAqKikpKTsgLyogTWFrZSBuZXcgb25lICovCi0gICAgICAgICAgICBpZiAoIXhtdGNocykgewot ICAgICAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOwot ICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBm b3IgKGkgPSAwOyBpIDwgejsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgeG10Y2hzW2ldID0gTlVM TDsKLSAgICAgICAgICAgICAgICB6bmV4dCh0bXBidWYpOwotICAgICAgICAgICAgICAgIGlmICgh KnRtcGJ1ZikKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIG1ha2Vz dHIoJih4bXRjaHNbaV0pLHRtcGJ1Zik7Ci0gICAgICAgICAgICAgICAgaWYgKCF4bXRjaHNbaV0p IHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVy ZVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHhtdGNobiA9IGkgLSAxOwotICAgICAgICAgICAg ICAgICAgICByYyA9IC05OwotICAgICAgICAgICAgICAgICAgICBnb3RvIHhkZWxldGU7Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIGRlYnVnKEYxMTEsImRvZGVsIGFkZCIs eG10Y2hzW2ldLGkpOyAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeG10Y2huID0gaTsK LSAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvZGVsIHhtdGNobiIsIiIseG10Y2huKTsKLSAgICAg ICAgICAgIHNoX3NvcnQoeG10Y2hzLE5VTEwseiwwLGRlbGRpcnMsMCk7Ci0gICAgICAgIH0KLSNl bHNlCi0jaWZkZWYgVU5JWAotICAgICAgICBzaF9zb3J0KG10Y2hzLE5VTEwseiwwLGRlbGRpcnMs ZmlsZWNhc2UpOwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgICAg ICBpZiAoeiA+IDApIHsKLSAgICAgICAgICAgIGludCBpOwotI2lmZGVmIE9TMgotICAgICAgICAg ICAgaW50IGl4ID0gMDsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAx OwotICAgICAgICAgICAgaWYgKHhfaGRnID4gMCkKLSAgICAgICAgICAgICAgcHJpbnRmKCJcbiIp OwotCi0gICAgICAgICAgICB3aGlsZSAoCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAg aXggPCB4bXRjaG4KLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgMQotI2VuZGlmIC8qIE9TMiAq LwotICAgICAgICAgICAgICAgICAgICkgeyAgICAgICAgICAgICAgICAgIC8qIExvb3AgZm9yIGFs bCBmaWxlcyAqLwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgIGNrc3RybmNweSh0bXBidWYs eG10Y2hzW2l4KytdLFRNUEJVRlNJWik7Ci0jZWxzZQotICAgICAgICAgICAgICAgIHpuZXh0KHRt cGJ1Zik7ICAgICAgICAgIC8qIEdldCBuZXh0IGZpbGUgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAg ICAgICAgICAgICAgICBpZiAoISp0bXBidWYpIHsgICAgICAgICAvKiBObyBtb3JlICovCi0gICAg ICAgICAgICAgICAgICAgIGlmIChkZWxkaXJzICYmIHJlY3Vyc2l2ZSAmJiBhcmdpc2Rpcikgewot ICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixzYWZlYnVmLFRNUEJVRlNJ Wik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmdpc2RpciA9IDA7ICAgLyogKG9ubHkgZG8g dGhpcyBvbmNlKSAqLwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2tpcCA9 IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCFkZWx0cmVlKSB7Ci0gICAgICAgICAgICAgICAgICAg IGlmIChmcykKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXNlbGVjdCh0bXBidWYsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX2FmdCxkZWxfYmVmLGRlbF9u YWYsZGVsX25iZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5zaXpl LG1heHNpemUsMCw4LGR4bGlzdCkgPCAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHNr aXArKzsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGlmICghc2tpcCAmJiBzY2FuICYmIGl0c2FkaXIpIHsKLSAgICAgICAgICAgICAg ICAgICAgc2tpcCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXNr aXAgJiYgc2NhbikgewotICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2NhbmZpbGUodG1w YnVmLCZ5LG5zY2FuZmlsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX0JJTjoK LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4bW9kZSAhPSAxKQotICAgICAgICAgICAgICAg ICAgICAgICAgICBza2lwKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICAgICAgICBjYXNlIEZUX1RFWFQ6Ci0gICAgICAgICAgICAgICAgICAgICAgY2Fz ZSBGVF83QklUOgotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfOEJJVDoKLSNpZmRlZiBV TklDT0RFCi0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBGVF9VVEY4OgotICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgRlRfVUNTMjoKLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgICAgICAg ICAgICAgICAgICAgICBpZiAoeG1vZGUgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg c2tpcCsrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGlmICghc2tpcCAmJiBhc2tpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50 IHg7Ci0gICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLCIgRGVsZXRl ICIsdG1wYnVmLCI/ICIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBnZXR5ZXNubyhs aW5lLDMpOwotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICAgICAg ICAgICAgICBjYXNlIDA6IGNvbnRpbnVlOyAgICAgICAgICAgLyogbm8gKi8KLSAgICAgICAgICAg ICAgICAgICAgICBjYXNlIDE6IGJyZWFrOyAgICAgICAgICAgICAgLyogeWVzICovCi0gICAgICAg ICAgICAgICAgICAgICAgY2FzZSAyOiBnb3RvIHhkZWxldGU7ICAgICAgIC8qIHF1aXQgKi8KLSAg ICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IGFza2luZyA9IDA7IGJyZWFrOyAgLyogZ28gKi8K LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBWTVNPUlVO SVgKLSAgICAgICAgICAgICAgICBsZW4gPSB6Z2V0ZnModG1wYnVmKTsgICAvKiBHZXQgbGVuZ3Ro IGFuZCBhY2Nlc3NpYmlsaXR5ICovCi0gICAgICAgICAgICAgICAgaXRzYWRpciA9IHpnZnNfZGly OwotICAgICAgICAgICAgICAgIGlmIChpdHNhZGlyICYmIHpnZnNfbGluaykgeyAvKiBUcmVhdCBs aW5rcyB0byBkaXJlY3RvcmllcyAqLwotICAgICAgICAgICAgICAgICAgICBpdHNhZGlyID0gMDsg ICAgICAgIC8qIGFzIHJlZ3VsYXIgZmlsZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNj YW4pICAgICAgICAgICAvKiBCdXQgbm90IGlmIC9UWVBFOiB3YXMgZ2l2ZW4gKi8KLSAgICAgICAg ICAgICAgICAgICAgICBza2lwKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IGlmIChpdHNhZGlyKSAgICAgICAgICAgIC8qIChlbXVsYXRlIG5vbi1Vbml4IGNvZGUpICovCi0g ICAgICAgICAgICAgICAgICBsZW4gPSAtMjsKLSNlbHNlCi0gICAgICAgICAgICAgICAgbGVuID0g emNoa2kodG1wYnVmKTsgICAgLyogR2V0IGFjY2Vzc2liaWxpdHkgKi8KLSAgICAgICAgICAgICAg ICBpZiAobGVuIDwgMCkgICAgICAgICAgICAvKiBTZWUgaWYgaXQncyBhIGRpcmVjdG9yeSAqLwot ICAgICAgICAgICAgICAgICAgaXRzYWRpciA9IGlzZGlyKHRtcGJ1Zik7Ci0jZW5kaWYgLyogVk1T T1JVTklYICovCi0KLSAgICAgICAgICAgICAgICBpZiAoc2tpcCkgewotI2lmZGVmIENPTU1FTlQg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvbyB2ZXJib3NlICovCi0gICAgICAgICAgICAg ICAgICAgIGlmICh4X2xpcyA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzKys7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAlcyAoU0tJUFBFRClcbiIsdG1wYnVm KTsKLSNpZmRlZiBDS19UVEdXU0laCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytuID4g Y21kX3Jvd3MgLSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkg Z290byB4ZGVsZXRlOyBlbHNlIG4gPSAwOwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICAg ICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAg ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZGVidWco RjExMSwiREVMRVRFIGxlbiIsdG1wYnVmLGxlbik7Ci0gICAgICAgICAgICAgICAgaWYgKHNpbXVs YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbGVzcGFjZSArPSBsZW47Ci0gICAgICAgICAg ICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4X2xpcyA+IDApIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzKys7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIiAlcyAoU0VMRUNURUQpXG4iLHRtcGJ1Zik7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IHh4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4ID0gYXNrbW9yZSgpOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgheHgpIGdvdG8geGRlbGV0ZTsgZWxzZSBu ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVuID49IDAgfHwgIWl0c2FkaXIpIHsgLyogUmVn dWxhciBmaWxlICovCi0gICAgICAgICAgICAgICAgICAgIHpkZWxldCh0bXBidWYpOyAgICAgICAg ICAgICAgICAvKiBvciBzeW1saW5rLCBldGMuLi4gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYg KHpjaGtpKHRtcGJ1ZikgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3BhY2Ug Kz0gbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGlmICh4X2xpcyA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBs aW5lcysrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICVzIChPSylcbiIs dG1wYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIGdvdG8g eGRlbGV0ZTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhZCsrOwotICAg ICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBpZiAoeF9saXMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMrKzsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAlcyAoRkFJTEVEOiAlcylcbiIs dG1wYnVmLGNrX2VycnN0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhc2tt b3JlKCkpIGdvdG8geGRlbGV0ZTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoLyog cGFzcyA+IDAgJiYgKi8gZGVsZGlycyAmJiBpdHNhZGlyKSB7Ci0gICAgICAgICAgICAgICAgICAg IC8qIEl0J3MgYSBkaXJlY3RvcnkgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHpybWRpcih0 bXBidWYpID4gLTEpIHsgLyogT25seSB3b3JrcyBpZiBlbXB0eSAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4X2xpcyA+IDAp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcysrOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHByaW50ZigiICVzIChPSylcbiIsdG1wYnVmKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIGdvdG8geGRlbGV0ZTsgZWxzZSBuID0gMDsKLSAg ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwOwotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHhfbGlzID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzKys7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMgKEZBSUxFRDogJXMpXG4i LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBidWYsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNrX2VycnN0cigpKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIGdvdG8geGRlbGV0ZTsgZWxzZSBuID0gMDsKLSAgICAg ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoeF9saXMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzKys7 Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc2Rpcih0bXBidWYpKQotICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiICVzIChGQUlMRUQ6IGRpcmVjdG9yeSlcbiIsdG1wYnVmKTsKLSAgICAg ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICVzIChG QUlMRUQ6IG5vdCBhIHJlZ3VsYXIgZmlsZSlcbiIsdG1wYnVmKTsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFz a21vcmUoKSkgZ290byB4ZGVsZXRlOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4X2hkZyA+IDApIHsKLSAgICAgICAgICAgICAg ICBpZiAobGluZXMgPiAwKQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAg ICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpCi0gICAgICAgICAgICAgICAgICBpZiAo IWFza21vcmUoKSkgZ290byB4ZGVsZXRlOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgICAgIHBy aW50ZigiJWQgZmlsZSVzICVzZGVsZXRlZCwgJWQgYnl0ZSVzICVzZnJlZWQlc1xuIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICE9 IDEgPyAicyIgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgc2ltdWxhdGUgPyAid291bGQg YmUgIiA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3BhY2UsCi0gICAgICAgICAg ICAgICAgICAgICAgIGZpbGVzcGFjZSAhPSAxID8gInMiIDogIiIsCi0gICAgICAgICAgICAgICAg ICAgICAgIHNpbXVsYXRlID8gIndvdWxkIGJlICIgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgc2ltdWxhdGUgPyAiIChtYXliZSkiIDogIiIKLSAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgheF9saXMgJiYgIXN1Y2Nlc3MgJiYgIXF1 aWV0KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/REVMRVRFIGZhaWxlZCBmb3IgJWQgZmls ZSVzIFwKLSh1c2UgREVMRVRFIC9MSVNUIHRvIHNlZSBkZXRhaWxzKVxuIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgYmFkLCBiYWQgPT0gMSA/ICIiIDogInMiCi0gICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoeF9saXMgPiAwKSB7Ci0g ICAgICAgICAgICBpZiAoZXJybm8pCi0gICAgICAgICAgICAgIHByaW50ZigiPyVzOiAlc1xuIixj a19lcnJzdHIoKSwgdG1wYnVmKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJp bnRmKCI/Q2FuJ3QgZGVsZXRlOiAlc1xuIix0bXBidWYpOwotICAgICAgICB9Ci0gICAgfQotI2Vs c2UgLyogT1MyT1JVTklYICovCi0jaWZuZGVmIFZNUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogT3RoZXJzIC0gbGV0IHRoZSBzeXN0ZW0gZG8gaXQuICovCi0gICAgeHN5c3RlbShsaW5l KTsKLSAgICB4ID0gbnp4cGFuZCh0bXBidWYsbnp4b3B0cyk7Ci0gICAgc3VjY2VzcyA9ICh4ID4g MCkgPyAwIDogMTsKLSAgICBpZiAoeF9oZGcgPiAwKQotICAgICAgcHJpbnRmKCIlcyAtICVzZGVs ZXRlZFxuIiwgdG1wYnVmLCBzdWNjZXNzID8gIiIgOiAibm90ICIpOwotI2Vsc2UKLSAgICBpZiAo YXNraW5nKQotICAgICAgcHJpbnRmKCJcbiIpOwotICAgIHggPSB4c3lzdGVtKGxpbmUpOyAgICAg ICAgICAgICAgICAgIC8qIHpzaGNtZCByZXR1cm5zIDEgZm9yIHN1Y2Nlc3MgKi8KLSAgICBzdWNj ZXNzID0gKHggPiAwKSA/IDEgOiAwOwotICAgIGlmICh4X2hkZyA+IDAgJiYgIWFza2luZykKLSAg ICAgIHByaW50ZigiJXMgLSAlc2RlbGV0ZWRcbiIsIHRtcGJ1Ziwgc3VjY2VzcyA/ICIiIDogIm5v dCAiKTsKLSAgICBjb25jYigoY2hhcillc2NhcGUpOwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlm IC8qIE9TMk9SVU5JWCAqLwotI2VuZGlmIC8qIE1BQyAqLwotICB4ZGVsZXRlOgotICAgIGlmIChn X21hdGNoZG90ID4gLTEpIHsKLSAgICAgICAgbWF0Y2hkb3QgPSBnX21hdGNoZG90OyAgICAgICAg ICAvKiBSZXN0b3JlIHRoZXNlLi4uICovCi0gICAgICAgIGdfbWF0Y2hkb3QgPSAtMTsKLSAgICB9 Ci0jaWZkZWYgT1MyCi0gICAgaWYgKHhtdGNocykgewotICAgICAgICBpbnQgaTsKLSAgICAgICAg ZGVidWcoRjEwMSwiZG9kZWwgZnJlZWluZyBsaXN0IiwiIix4bXRjaG4pOwotICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgeG10Y2huOyBpKyspCi0gICAgICAgICAgaWYgKHhtdGNoc1tpXSkgZnJlZSh4 bXRjaHNbaV0pOwotICAgICAgICBmcmVlKHhtdGNocyk7Ci0gICAgICAgIHhtdGNocyA9IE5VTEw7 Ci0gICAgICAgIHhtdGNobiA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgIGRlYnVn KEYxMDEsImRvZGVsIHJlc3VsdCIsIiIscmMpOwotICAgIHJldHVybigocmMgPCAwKSA/IHJjIDog c3VjY2Vzcyk7Ci19Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lmbmRlZiBOT1NQTCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBFTFNFIGNvbW1hbmQgKi8KLV9QUk9UT1RZUCgg Vk9JRCBwdXNocWNtZCwgKGNoYXIgKikgKTsKLQotaW50Ci1kb2Vsc2UoKSB7Ci0gICAgaWYgKCFp ZmNtZFtjbWRsdmxdKSB7Ci0gICAgICAgIHByaW50ZigiP0VMU0UgZG9lc24ndCBmb2xsb3cgSUZc biIpOwotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLSNpZmRlZiBDT01NRU5UCi0vKgotICBX cm9uZy4gIFRoaXMgcHJldmVudHMgSUYuLkVMU0UgSUYuLi5FTFNFIElGLi4uRUxTRSBJRi4uLkVM U0UuLi4KLSAgZnJvbSB3b3JraW5nLgotKi8KLSAgICBpZmNtZFtjbWRsdmxdID0gMDsKLSNlbmRp ZiAvKiBDT01NRU5UICovCi0gICAgaWYgKCFpZnRlc3RbY21kbHZsXSkgeyAgICAgICAgICAgICAg LyogSWYgSUYgd2FzIGZhbHNlIGRvIEVMU0UgcGFydCAqLwotICAgICAgICBpZiAobWFjbHZsID4g LTEgfHwgdGxldmVsID4gLTEpIHsgLyogSW4gbWFjcm8gb3IgY29tbWFuZCBmaWxlICovCi0gICAg ICAgICAgICBkZWJ1ZyhGMTAwLCJkb2Vsc2UgcHVzaGluZyIsIiIsMCk7Ci0jaWZuZGVmIENPTU1F TlQKLSAgICAgICAgICAgIHB1c2hjbWQoTlVMTCk7ICAgICAgICAgICAgICAvKiBzYXZlIHJlc3Qg b2YgY29tbWFuZC4gKi8KLSNlbHNlCi0gICAgICAgICAgICAvKiBUaGlzIGZpeGVzIGNlcnRhaW4g b2JzY3VyZSBwcm9ibGVtcyAqLwotICAgICAgICAgICAgLyogYnV0IGJyZWFrcyBtYW55IG90aGVy IGNvbnN0cnVjdGlvbnMgdGhhdCBtdXN0IHdvcmsuICovCi0gICAgICAgICAgICBwdXNocWNtZChO VUxMKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogSWYgaW50ZXJhY3RpdmUsICovCi0gICAgICAgICAgICBjbWluaShja3hl Y2gpOyAgICAgICAgICAgICAgLyoganVzdCBzdGFydCBhIG5ldyBjb21tYW5kICovCi0gICAgICAg ICAgICBwcmludGYoIlxuIik7ICAgICAgICAgICAgICAgLyogKGxpa2UgaW4gTVMtRE9TIEtlcm1p dCkgKi8KLSAgICAgICAgICAgIGlmIChwZmxhZykgcHJvbXB0KHh4c3RyaW5nKTsKLSAgICAgICAg fQotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbmRpdGlvbiBp cyBmYWxzZSAqLwotICAgICAgICBpZiAoKHkgPSBjbXR4dCgiY29tbWFuZCB0byBiZSBpZ25vcmVk IiwiIiwmcyxOVUxMKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsgICAgICAgICAgICAgICAg ICAgIC8qIEdvYmJsZSB1cCByZXN0IG9mIGxpbmUgKi8KLSAgICB9Ci0gICAgcmV0dXJuKDApOwot fQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9TUEwKLWludAotZG9zd2l0Y2goKSB7 Ci0gICAgY2hhciAqbHAsICphcDsgICAgICAgICAgICAgICAgICAgICAgLyogTWFjcm8gYXJndW1l bnQgcG9pbnRlciAqLwotICAgIGludCBsZW4gPSAwLCB4LCB5LCBwcCA9IDA7Ci0gICAgY2hhciBi cmJ1ZlszXTsKLQotICAgIC8qIEdldCB2YXJpYWJsZSBuYW1lICovCi0KLSAgICB0bXBidWZbMF0g PSBOVUw7Ci0gICAgYnJidWZbMF0gPSAneyc7Ci0gICAgYnJidWZbMV0gPSAnfSc7Ci0gICAgYnJi dWZbMl0gPSBOVUw7Ci0KLSAgICB5ID0gY21mbGQoIlZhcmlhYmxlIG5hbWUiLCIiLCZzLHh4c3Ry aW5nKTsKLSAgICBkZWJ1ZyhGMTExLCJkb3N3aXRjaCBjbWZsZCIscyx5KTsKLSAgICBpZiAoeSA8 IDApIHsKLSAgICAgICAgaWYgKHkgPT0gLTMpCQkJLyogQmVjYXVzZSBicnN0cmlwKCkgd3JpdGVz ICovCi0gICAgICAgICAgcyA9IGJyYnVmOwkJCS8qIGludG8gaXRzIGFyZ3VtZW50LiAqLwotICAg ICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJk b3N3aXRjaCBBIixzLDApOwotICAgIGlmICghc3RyY21wKHMsIigiKSkgewotICAgICAgICBwcCsr OwotICAgICAgICBpZiAoKHkgPSBjbWZsZCgiVmFyaWFibGUgbmFtZSIsIiIsJnMseHhzdHJpbmcp KSA8IDApIHsKLSAgICAgICAgICAgIGlmICh5ID09IC0zKQotICAgICAgICAgICAgICBzID0gYnJi dWY7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLQkgICAgZGVi dWcoRjExMCwiZG9zd2l0Y2ggQiIscywwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBsZW4gPSBj a3N0cm5jcHkodG1wYnVmLGJyc3RyaXAocyksVE1QQlVGU0laKTsKLSAgICBpZiAodG1wYnVmWzBd ID09IENNRFEpIHsKLSAgICAgICAgaWYgKGNoa3ZhcihzKSA8IDEpIHsKLSAgICAgICAgICAgIHBy aW50ZigiP1ZhcmlhYmxlIG5hbWUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05 KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocHAgPiAwKSB7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBJZiBvcGVuIHBhcmVuIGdpdmVuIHBhcnNlIGNsb3NpbmcgKi8KLSAgICAgICAgaWYg KCh5ID0gY21mbGQoIkNsb3NpbmcgcGFyZW50aGVzaXMiLCIiLCZzLE5VTEwpKSA8IDApCi0gICAg ICAgICAgcmV0dXJuKHkpOwotICAgICAgICBpZiAoc3RyY21wKGF0bWJ1ZiwiKSIpKSB7Ci0gICAg ICAgICAgICBwcmludGYoIj9DbG9zaW5nIHBhcmVudGhlc2lzIHJlcXVpcmVkXG4iKTsKLSAgICAg ICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbHAgPSBsaW5lOwotICAg IHggPSBja3N0cm5jcHkobHAsIl9zd2l0eCAiLExJTkJVRlNJWik7IC8qIF9zd2l0eCArIHNwYWNl ICovCi0gICAgbHAgKz0geDsKLSAgICBhcCA9IGxwOwotICAgIGRlYnVnKEYwMTAsIlNXSVRDSCBh IixsaW5lLDApOwotCi0jaWZkZWYgQ09NTUVOVAotICAgIHggPSBja21ha21zZyhscCxMSU5CVUZT SVoteCx0bXBidWYsIiAiLE5VTEwsTlVMTCk7IC8qIHZhcmlhYmxlIG5hbWUgKyBTUCAqLwotI2Vs c2UKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2YXJpYWJsZSBu YW1lICsgU1AgKi8KLSAgICAgICAgY2hhciAqIHAgPSB0bXBidWY7Ci0JaWYgKGxlbiA+IDApIHsK LQkgICAgaWYgKHRtcGJ1ZlswXSA9PSAnKCcgJiYgdG1wYnVmW2xlbi0xXSA9PSAnKScpIHsKLQkJ dG1wYnVmW2xlbi0xXSA9IE5VTDsKLQkJcCsrOwotCSAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg eCA9IGNrbWFrbXNnKGxwLExJTkJVRlNJWi14LCJ7IixicnN0cmlwKHApLCJ9IiwiICIpOwotICAg IH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgZGVidWcoRjAxMCwiU1dJVENIIGIiLGxpbmUs MCk7Ci0gICAgbHAgKz0geDsKLQotICAgIC8qIEdldCBib2R5ICovCi0KLSAgICBpZiAoKHkgPSBj bXR4dCgic2VyaWVzIG9mIGNhc2VzIiwiIiwmcyxOVUxMKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAg aWYgKCh5ID0gKGludClzdHJsZW4ocykpIDwgMSkgcmV0dXJuKC0yKTsKLSAgICBpZiAoc1swXSAh PSAneycgJiYgc1t5LTFdICE9ICd9JykgeyAvKiBTdXBwbHkgYnJhY2VzIGlmIG1pc3NpbmcgKi8K LSAgICAgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwieyAiLHMsIiB9IixOVUxMKTsKLSAg ICAgICAgcyA9IHRtcGJ1ZjsKLSAgICB9Ci0gICAgaWYgKGxpdGNtZCgmcywmbHAsKExJTkJVRlNJ WiAtIChscCAtIChjaGFyICopbGluZSkgLSAyKSkgPCAwKSB7Ci0gICAgICAgIHByaW50ZigiP1Vu YmFsYW5jZWQgYnJhY2VzXG4iKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBkZWJ1 ZyhGMDEwLCJTV0lUQ0ggYyIsbGluZSwwKTsKLQotICAgIHggPSBtbG9vayhtYWN0YWIsIl9zd2l0 eCIsbm1hYyk7ICAgIC8qIExvb2sgdXAgU1dJVENIIG1hY3JvIGRlZmluaXRpb24gKi8KLSAgICBp ZiAoeCA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgdGhlcmU/ICovCi0gICAg ICAgIGFkZG1tYWMoIl9zd2l0eCIsc3dfZGVmKTsgICAgICAgLyogUHV0IGl0IGJhY2suICovCi0g ICAgICAgIGlmICgoeCA9IG1sb29rKG1hY3RhYiwiX3N3aXR4IixubWFjKSkgPCAwKSB7IC8qIExv b2sgaXQgdXAgYWdhaW4uICovCi0gICAgICAgICAgICBwcmludGYoIj9TV0lUQ0ggbWFjcm8gZGVm aW5pdGlvbiBnb25lIVxuIik7IC8qIFNob3VsZG4ndCBoYXBwZW4uICovCi0gICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICB9Ci0gICAgfQotICAgIGRlYnVnKEYwMTAsIlNX SVRDSCBjb21tYW5kIixsaW5lLDApOyAvKiBFeGVjdXRlIHRoZSBTV0lUQ0ggbWFjcm8uICovCi0g ICAgc3VjY2VzcyA9IGRvZG8oeCxhcCxjbWRzdGtbY21kbHZsXS5jY2ZsZ3MgfCBDRl9JTUFDKTsK LSAgICBkZWJ1ZyhGMTAxLCJTV0lUQ0ggc3RhdHVzIiwiIixzdWNjZXNzKTsKLSAgICByZXR1cm4o c3VjY2Vzcyk7Ci19Ci0KLWludAotZG9mb3IoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRoZSBGT1IgY29tbWFuZC4gKi8KLSAgICBpbnQgaSwgZngsIGZ5LCBmejsgICAgICAg ICAgICAgICAgICAvKiBsb29wIHZhcmlhYmxlcyAqLwotICAgIGNoYXIgKmFwLCAqZGk7ICAgICAg ICAgICAgICAgICAgICAgIC8qIG1hY3JvIGFyZ3VtZW50IHBvaW50ZXIgKi8KLSAgICBpbnQgcHAg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJlbiBsZXZlbCAqLwotICAgIGludCBt dXN0cXVvdGUgPSAwOwotCi0gICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotICAgICAgICBp ZiAoKHkgPSBjbWZsZCgiVmFyaWFibGUgbmFtZSIsIiIsJnMsTlVMTCkpIDwgMCkgewotICAgICAg ICAgICAgaWYgKHkgPT0gLTMpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9WYXJpYWJsZSBu YW1lIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAg ICAgfSBlbHNlCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgfQotICAgICAgICBp ZiAoc3RyY21wKHMsIigiKSkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgcHArKzsKLSAgICB9 Ci0jaWZkZWYgQ09NTUVOVAotICAgIGlmICgoeSA9IHBhcnNldmFyKHMsJngsJnopKSA8IDApICAg IC8qIENoZWNrIHZhcmlhYmxlLiAqLwotICAgICAgcmV0dXJuKHkpOwotI2Vsc2UKLSAgICBpZiAo KnMgPT0gQ01EUSkgICAgICAgICAgICAgICAgICAgICAvKiBJZiBsb29wIHZhcmlhYmxlIHN0YXJ0 cyB3aXRoICovCi0gICAgICBtdXN0cXVvdGUrKzsgICAgICAgICAgICAgICAgICAgICAgLyogYmFj a3NsYXNoLCBtdXN0cXVvdGUgaXMgPiAwLiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAg IGxwID0gbGluZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1aWxkIGEgY29weSBvZiB0 aGUgY29tbWFuZCAqLwotICAgIGNrc3RybmNweShscCwiX2ZvcnggIixMSU5CVUZTSVopOwotICAg IGxwICs9IChpbnQpc3RybGVuKGxpbmUpOyAgICAgICAgICAgIC8qICJfZm9yIiBtYWNyby4gKi8K LSAgICBhcCA9IGxwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIHBvaW50ZXIg dG8gbWFjcm8gYXJncy4gKi8KLQotICAgIGlmICgqcyA9PSBDTURRKSBzKys7ICAgICAgICAgICAg ICAgIC8qIFNraXAgcGFzdCBiYWNrc2xhc2ggaWYgYW55LiAqLwotICAgIHdoaWxlICgoKmxwKysg PSAqcysrKSkgOyAgICAgICAgICAgIC8qIGNvcHkgaXQgKi8KLSAgICBscC0tOyAqbHArKyA9IFNQ OyAgICAgICAgICAgICAgICAgICAvKiBhZGQgYSBzcGFjZSAqLwotCi0gICAgaWYgKCh5ID0gY21u dW0oImluaXRpYWwgdmFsdWUiLCIiLDEwLCZmeCx4eHN0cmluZykpIDwgMCkgewotICAgICAgICBp ZiAoeSA9PSAtMykgcmV0dXJuKC0yKTsKLSAgICAgICAgZWxzZSByZXR1cm4oeSk7Ci0gICAgfQot ICAgIGRlYnVnKEYxMDEsImRvZm9yIGZ4IiwiIixmeCk7Ci0gICAgcyA9IGF0bWJ1ZjsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ29weSB0aGUgYXRvbSBidWZmZXIgKi8KLQotICAgIGlmICgo aW50KXN0cmxlbihzKSA8IDEpIGdvdG8gYmFkZm9yOwotLyoKLSAgSW4gZWRpdCAxOTIsIHdlIGNo YW5nZSB0aGUgbG9vcCB2YXJpYWJsZXMgdG8gYmUgZXZhbHVhdGVkIGF0IGxvb3AgZW50cnksCi0g IG5vdCBlYWNoIHRpbWUgdGhyb3VnaCB0aGUgbG9vcC4gIFRoaXMgd2FzIHJlcXVpcmVkIGluIG9y ZGVyIHRvIGFsbG93Ci0gIFx2KGFyZ2MpIHRvIGJlIHVzZWQgYXMgYSBsb29wIHZhcmlhYmxlLCBv ciBpbiBhIGxvb3AtdmFyaWFibGUgZXhwcmVzc2lvbi4KLSAgVGh1cywgd2UgY2FuJ3QgaGF2ZSBG T1IgbG9vcHMgdGhhdCBtb2RpZnkgdGhlaXIgb3duIGV4aXQgY29uZGl0aW9ucyBieQotICBjaGFu Z2luZyB0aGUgZmluYWwgdmFsdWUgb3IgdGhlIGluY3JlbWVudC4gIFRoZSBwcm9ibGVtIHdpdGgg XHYoYXJnYykgd2FzCi0gIHRoYXQgaXQgaXMgb24gdGhlIG1hY3JvIHN0YWNrOyBhZnRlciBlbnRy eSBpbnRvIHRoZSBfZm9yeCBtYWNybywgaXQgaXMgYXQKLSAgdGhlIHdyb25nIHBsYWNlLgotKi8K LSAgICBzcHJpbnRmKHRtcGJ1ZiwiJWQiLGZ4KTsgICAgICAgICAgICAvKiAoU0FGRSkgU3Vic3Rp dHV0ZSBhY3R1YWwgdmFsdWUgKi8KLSAgICBzID0gdG1wYnVmOwotICAgIHdoaWxlICgoKmxwKysg PSAqcysrKSkgOyAgICAgICAgICAgIC8qICh3aGF0IHRoZXkgYWN0dWFsbHkgdHlwZWQpICovCi0g ICAgbHAtLTsgKmxwKysgPSBTUDsKLSNpZmRlZiBERUJVRwotICAgICpscCA9IE5VTDsKLSAgICBk ZWJ1ZyhGMTEwLCJGT1IgQSIsbGluZSwwKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotCi0gICAgaWYg KCh5ID0gY21udW0oImZpbmFsIHZhbHVlIiwiIiwxMCwmZnkseHhzdHJpbmcpKSA8IDApIHsKLSAg ICAgICAgaWYgKHkgPT0gLTMpIHJldHVybigtMik7Ci0gICAgICAgIGVsc2UgcmV0dXJuKHkpOwot ICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJkb2ZvciBmeSIsIiIsZnkpOwotICAgIHMgPSBhdG1idWY7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhbWUgZGVhbCAqLwotICAgIGlmICgoaW50KXN0 cmxlbihzKSA8IDEpCi0gICAgICBnb3RvIGJhZGZvcjsKLQotICAgIHNwcmludGYodG1wYnVmLCIl ZCIsZnkpOyAgICAgICAgICAgIC8qIFNBRkUgKi8KLSAgICBzID0gdG1wYnVmOwotICAgIHdoaWxl ICgoKmxwKysgPSAqcysrKSkgOwotICAgIGxwLS07Ci0gICAgKmxwKysgPSBTUDsKLSNpZmRlZiBE RUJVRwotICAgICpscCA9IE5VTDsKLSAgICBkZWJ1ZyhGMTEwLCJGT1IgQiIsbGluZSwwKTsKLSNl bmRpZiAvKiBERUJVRyAqLwotCi0gICAgeF9pZm51bSA9IDE7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogSW5jcmVtZW50IG9yIHBhcmVudGhlc2lzICovCi0gICAgZGkgPSAoZnggPCBmeSkgPyAi MSIgOiAiLTEiOyAgICAgICAgLyogRGVmYXVsdCBpbmNyZW1lbnQgKi8KLSAgICBpZiAoKHkgPSBj bW51bSgiaW5jcmVtZW50IixkaSwxMCwmZnoseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgZGVi dWcoRjExMSwiZG9mb3IgaW5jcmVtZW50IixhdG1idWYseSk7Ci0gICAgICAgIHhfaWZudW0gPSAw OwotICAgICAgICBpZiAoeSA9PSAtMykgeyAgICAgICAgICAgICAgICAgIC8qIFByZW1hdHVyZSB0 ZXJtaW5hdGlvbiAqLwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfSBlbHNlIGlm ICh5ID09IC0yKSB7ICAgICAgICAgICAvKiBNYXliZSBjbG9zaW5nIHBhcmVuICovCi0gICAgICAg ICAgICBpZiAoIXN0cmNtcChhdG1idWYsIikiKSkgewotICAgICAgICAgICAgICAgIHBwLS07ICAg ICAgICAgICAgICAgICAgIC8qIENvdW50IGl0ICovCi0gICAgICAgICAgICAgICAgcyA9IGRpOyAg ICAgICAgICAgICAgICAgLyogc3VwcGx5IGRlZmF1bHQgaW50ZXJ2YWwgKi8KLSAgICAgICAgICAg ICAgICBmeiA9IGF0b2kocyk7Ci0gICAgICAgICAgICB9IGVsc2UgICAgICAgICAgICAgICAgICAg ICAgLyogTm90IGNsb3NpbmcgcGFyZW4sIGludmFsaWQgKi8KLSAgICAgICAgICAgICAgcmV0dXJu KHkpOwotICAgICAgICB9IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyIGVy cm9yICovCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE51bWJlciAqLwotICAgICAgICB4X2lmbnVtID0gMDsKLSAgICAgICAg ZGVidWcoRjEwMSwiZG9mb3IgZnoiLCIiLGZ6KTsKLSAgICAgICAgcyA9IGF0bWJ1ZjsgICAgICAg ICAgICAgICAgICAgICAvKiBVc2UgaXQgKi8KLSAgICB9Ci0gICAgaWYgKChpbnQpc3RybGVuKHMp IDwgMSkKLSAgICAgIGdvdG8gYmFkZm9yOwotCi0gICAgc3ByaW50Zih0bXBidWYsIiVkIixmeik7 ICAgICAgICAgICAgLyogKFNBRkUpIFNhbWUgZGVhbCAqLwotICAgIHMgPSB0bXBidWY7Ci0gICAg d2hpbGUgKCgqbHArKyA9ICpzKyspKSA7Ci0gICAgbHAtLTsgKmxwKysgPSBTUDsKLQotI2lmZGVm IERFQlVHCi0gICAgKmxwID0gTlVMOwotICAgIGRlYnVnKEYxMTAsIkZPUiBDIixsaW5lLDApOwot I2VuZGlmIC8qIERFQlVHICovCi0KLSAgICAvKiBJbnNlcnQgdGhlIGFwcHJvcHJpYXRlIGNvbXBh cmlzb24gb3BlcmF0b3IgKi8KLSAgICBpZiAoZnogPCAwKQotICAgICAgKmxwKysgPSAnPCc7Ci0g ICAgZWxzZQotICAgICAgKmxwKysgPSAnPic7Ci0gICAgKmxwKysgPSBTUDsKLQotI2lmZGVmIERF QlVHCi0gICAgKmxwID0gTlVMOwotICAgIGRlYnVnKEYxMTAsIkZPUiBEIixsaW5lLDApOwotI2Vu ZGlmIC8qIERFQlVHICovCi0KLSAgICBpZiAocHAgPiAwKSB7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBJZiBvcGVuIHBhcmVuIGdpdmVuIHBhcnNlIGNsb3NpbmcgKi8KLSAgICAgICAgaWYgKCh5 ID0gY21mbGQoIkNsb3NpbmcgcGFyZW50aGVzaXMiLCIiLCZzLE5VTEwpKSA8IDApCi0gICAgICAg ICAgcmV0dXJuKHkpOwotICAgICAgICBpZiAoc3RyY21wKGF0bWJ1ZiwiKSIpKSB7Ci0gICAgICAg ICAgICBwcmludGYoIj9DbG9zaW5nIHBhcmVudGhlc2lzIHJlcXVpcmVkXG4iKTsKLSAgICAgICAg ICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCh5ID0gY210eHQoIkNv bW1hbmQgdG8gZXhlY3V0ZSIsIiIsJnMsTlVMTCkpIDwgMCkgcmV0dXJuKHkpOwotICAgIGlmICgo eSA9IChpbnQpc3RybGVuKHMpKSA8IDEpIHJldHVybigtMik7Ci0gICAgaWYgKHNbMF0gIT0gJ3sn ICYmIHNbeS0xXSAhPSAnfScpIHsgLyogU3VwcGx5IGJyYWNlcyBpZiBtaXNzaW5nICovCi0gICAg ICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosInsgIixzLCIgfSIsTlVMTCk7Ci0gICAgICAg IHMgPSB0bXBidWY7Ci0gICAgfQotICAgIGlmIChsaXRjbWQoJnMsJmxwLChMSU5CVUZTSVogLSAo bHAgLSAoY2hhciAqKWxpbmUpIC0gMikpIDwgMCkgewotICAgICAgICBwcmludGYoIj9VbmJhbGFu Y2VkIGJyYWNlc1xuIik7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jaWZkZWYgREVCVUcK LSAgICAqbHAgPSBOVUw7Ci0gICAgZGVidWcoRjExMCwiRk9SIEUiLGxpbmUsMCk7Ci0jZW5kaWYg LyogREVCVUcgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIFRvbyBzdHJpY3QgKi8KLSAgICBpZiAo ZnogPT0gMCkgewotICAgICAgICBwcmludGYoIj9aZXJvIGluY3JlbWVudCBub3QgYWxsb3dlZFxu Iik7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotLyoK LSAgSW4gdmVyc2lvbiA4LjAgd2UgZGVjaWRlZCB0byBhbGxvdyBtYWNybyBuYW1lcyBhbnlwbGFj ZSBhIG51bWVyaWMtdmFsZWQKLSAgdmFyaWFibGUgY291bGQgYXBwZWFyLiAgQnV0IHRoaXMgY2F1 c2VkIHRyb3VibGUgZm9yIHRoZSBGT1IgbG9vcHMgYmVjYXVzZQotICB0aGUgcXVvdGluZyBpbiBm b3JfZGVmW10gYXNzdW1lZCBhIFwlaS1zdHlsZSBsb29wIHZhcmlhYmxlLiAgV2UgYWNjb3VudAot ICBmb3IgdGhpcyBoZXJlIGluIHRoZSBpZiAobXVzdHF1b3RlKS4uLmVsc2UgbG9naWMgYnkgaW52 b2tpbmcgc2VwYXJhdGUKLSAgRk9SIG1hY3JvIGRlZmluaXRpb25zIGluIHRoZSB0d28gY2FzZXMu Ci0qLwotICAgIGlmIChtdXN0cXVvdGUpIHsgICAgICAgICAgICAgICAgICAgIC8qIFwlaS1zdHls ZSBsb29wIHZhcmlhYmxlICovCi0gICAgICAgIHggPSBtbG9vayhtYWN0YWIsIl9mb3J4IixubWFj KTsgLyogTG9vayB1cCBGT1IgbWFjcm8gZGVmaW5pdGlvbiAqLwotICAgICAgICBpZiAoeCA8IDAp IHsgICAgICAgICAgICAgICAgICAgIC8qIE5vdCB0aGVyZT8gKi8KLSAgICAgICAgICAgIGFkZG1t YWMoIl9mb3J4Iixmb3JfZGVmKTsgICAvKiBQdXQgaXQgYmFjay4gKi8KLSAgICAgICAgICAgIGlm ICgoeCA9IG1sb29rKG1hY3RhYiwiX2ZvcngiLG5tYWMpKSA8IDApIHsgLyogTG9vayBpdCB1cCBh Z2Fpbi4gKi8KLSAgICAgICAgICAgICAgICBwcmludGYoIj9GT1IgbWFjcm8gZGVmaW5pdGlvbiBn b25lIVxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIExvb3AgdmFyaWFibGUgaXMgYSBtYWNybyAqLwotICAgICAgICB4ID0gbWxvb2sobWFjdGFi LCJfZm9yeiIsbm1hYyk7Ci0gICAgICAgIGlmICh4IDwgMCkgewotICAgICAgICAgICAgYWRkbW1h YygiX2ZvcnoiLGZvel9kZWYpOwotICAgICAgICAgICAgaWYgKCh4ID0gbWxvb2sobWFjdGFiLCJf Zm9yeiIsbm1hYykpIDwgMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP0ZPUiBtYWNybyBk ZWZpbml0aW9uIGdvbmUhXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDAp OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGRlYnVnKEYwMTAsIkZPUiBj b21tYW5kIixsaW5lLDApOyAgIC8qIEV4ZWN1dGUgdGhlIEZPUiBtYWNyby4gKi8KLSAgICByZXR1 cm4oc3VjY2VzcyA9IGRvZG8oeCxhcCxjbWRzdGtbY21kbHZsXS5jY2ZsZ3MgfCBDRl9JTUFDKSk7 Ci0KLWJhZGZvcjoKLSAgICBwcmludGYoIj9JbmNvbXBsZXRlIEZPUiBjb21tYW5kXG4iKTsKLSAg ICByZXR1cm4oLTIpOwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLQotI2lmbmRlZiBOT1NQTAot Ci0vKiAgVCBPIEQgMiBTIEUgQyAgLS0gIENvbnZlcnQgdGltZSBvZiBkYXkgYXMgaGg6bW06c3Mg dG8gc2VjcyBzaW5jZSBtaWRuaXRlICovCi0vKgotICBDYWxsIHdpdGggYSBzdHJpbmcgaGg6bW0g b3IgaGg6bW06c3MuCi0gIFJldHVybnMgYSAwIHRvIDg2NDAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVn YXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuCi0qLwotbG9uZwotdG9kMnNlYyh0KSBjaGFyICogdDsg ewotICAgIGxvbmcgdDI7Ci0gICAgbG9uZyBoaCA9IDBMLCBtbSA9IDBMLCBzcyA9IDBMOwotCi0g ICAgaWYgKCF0KSB0ID0gIiI7Ci0gICAgaWYgKCEqdCkKLSAgICAgIHJldHVybigtM0wpOwotICAg IGRlYnVnKEYxMTAsInRvZDJzZWMiLHQsMCk7Ci0KLSAgICBpZiAoaXNkaWdpdCgqdCkpICAgICAg ICAgICAgICAgICAgICAvKiBHZXQgaG91cnMgZnJvbSBhcmd1bWVudCAqLwotICAgICAgaGggPSAq dCsrIC0gJzAnOwotICAgIGVsc2UKLSAgICAgIHJldHVybigtMUwpOwotICAgIGlmIChpc2RpZ2l0 KCp0KSkKLSAgICAgIGhoID0gaGggKiAxMCArICp0KysgLSAnMCc7Ci0jaWZkZWYgQ09NTUVOVAot ICAgIGlmIChoaCA+IDI0TCkKLSAgICAgIHJldHVybigtMUwpOwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLSAgICBpZiAoKnQgPT0gJzonKQotICAgICAgdCsrOwotICAgIGVsc2UgaWYgKCEqdCkKLSAg ICAgIGdvdG8geHRvZDJzZWM7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKC0xTCk7Ci0KLSAgICBp ZiAoaXNkaWdpdCgqdCkpICAgICAgICAgICAgICAgICAgICAvKiBNaW51dGVzICovCi0gICAgICBt bSA9ICp0KysgLSAnMCc7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKC0xTCk7Ci0gICAgaWYgKGlz ZGlnaXQoKnQpKQotICAgICAgbW0gPSBtbSAqIDEwICsgKnQrKyAtICcwJzsKLSAgICBpZiAobW0g PiA2MEwpCi0gICAgICByZXR1cm4oLTFMKTsKLSAgICBpZiAoKnQgPT0gJzonKQotICAgICAgdCsr OwotICAgIGVsc2UgaWYgKCEqdCkKLSAgICAgIGdvdG8geHRvZDJzZWM7Ci0gICAgZWxzZQotICAg ICAgcmV0dXJuKC0xTCk7Ci0KLSAgICBpZiAoaXNkaWdpdCgqdCkpICAgICAgICAgICAgICAgICAg ICAvKiBTZWNvbmRzICovCi0gICAgICBzcyA9ICp0KysgLSAnMCc7Ci0gICAgZWxzZQotICAgICAg cmV0dXJuKC0xTCk7Ci0gICAgaWYgKGlzZGlnaXQoKnQpKQotICAgICAgc3MgPSBzcyAqIDEwICsg KnQrKyAtICcwJzsKLSAgICBpZiAoc3MgPiA2MEwpCi0gICAgICByZXR1cm4oLTFMKTsKLQotICAg IGlmICgqdCA+IDMyKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHRyYWlsaW5nIGp1bmsg YWxsb3dlZCAqLwotICAgICAgcmV0dXJuKC0xTCk7Ci0KLSAgeHRvZDJzZWM6Ci0KLSAgICB0MiA9 IGhoICogMzYwMEwgKyBtbSAqIDYwTCArIHNzOyAgICAvKiBTZWNvbmRzIHNpbmNlIG1pZG5pZ2h0 IGZyb20gYXJnICovCi0gICAgZGVidWcoRjEwMSwidG9kMnNlYyB0MiIsIiIsdDIpOwotCi0gICAg cmV0dXJuKHQyKTsKLX0KLQotaW50IHdhaXRpbnRlcnZhbCA9IDE7Ci0KLSNpZmRlZiBPTERXQUlU Ci0jdW5kZWYgT0xEV0FJVAotI2VuZGlmIC8qIE9MRFdBSVQgKi8KLQotaW50IGtiY2hhciA9IE5V TDsKLQotaW50Ci1kb3BhdXMoY3gpIGludCBjeDsgewotICAgIGxvbmcgeno7Ci0gICAgZXh0ZXJu IGludCBzbGVlcGNhbjsKLQotI2lmZGVmIE9MRFdBSVQKLSAgICB6eiA9IC0xTDsKLSAgICB4X2lm bnVtID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBpbnRlcm5hbCBjb21w bGFpbnRzICovCi0gICAgaWYgKGN4ID09IFhYV0FJKQotICAgICAgeSA9IGNtbnVtKCJzZWNvbmRz IHRvIHdhaXQsIG9yIHRpbWUgb2YgZGF5IGhoOm1tOnNzIiwiMSIsMTAsJngseHhzdHJpbmcpOwot ICAgIGVsc2UgaWYgKGN4ID09IFhYUEFVKQotICAgICAgeSA9IGNtbnVtKCJzZWNvbmRzIHRvIHBh dXNlLCBvciB0aW1lIG9mIGRheSBoaDptbTpzcyIsCi0gICAgICAgICAgICAgICAgIjEiLDEwLCZ4 LHh4c3RyaW5nKTsKLSAgICBlbHNlCi0gICAgICB5ID0gY21udW0oIm1pbGxpc2Vjb25kcyB0byBz bGVlcCwgb3IgdGltZSBvZiBkYXkgaGg6bW06c3MiLAotICAgICAgICAgICAgICAgICIxMDAiLDEw LCZ4LHh4c3RyaW5nKTsKLSAgICB4X2lmbnVtID0gMDsKLSAgICBpZiAoeSA8IDApIHsKLSAgICAg ICAgaWYgKHkgPT0gLTIpIHsgICAgICAgICAgICAgICAgICAvKiBJbnZhbGlkIG51bWJlciBvciBl eHByZXNzaW9uICovCi0gICAgICAgICAgICBjaGFyICpwID0gdG1wYnVmOyAgICAgICAgICAgLyog UmV0cmlldmUgc3RyaW5nIGZyb20gYXRtYnVmICovCi0gICAgICAgICAgICBpbnQgbiA9IFRNUEJV RlNJWjsKLSAgICAgICAgICAgICpwID0gTlVMOwotICAgICAgICAgICAgenpzdHJpbmcoYXRtYnVm LCZwLCZuKTsgICAgIC8qIEV2YWx1YXRlIGluIGNhc2UgaXQncyBhIHZhcmlhYmxlICovCi0gICAg ICAgICAgICB6eiA9IHRvZDJzZWModG1wYnVmKTsgICAgICAgLyogQ29udmVydCB0byBzZWNzIHNp bmNlIG1pZG5pZ2h0ICovCi0gICAgICAgICAgICBpZiAoenogPCAwTCkgewotICAgICAgICAgICAg ICAgIHByaW50ZigiP051bWJlciwgZXhwcmVzc2lvbiwgb3IgdGltZSBvZiBkYXkgcmVxdWlyZWRc biIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgIGNoYXIgbm93WzMyXTsgICAgICAgICAgIC8qIEN1cnJlbnQgdGltZSAq LwotICAgICAgICAgICAgICAgIGNoYXIgKnA7Ci0gICAgICAgICAgICAgICAgbG9uZyB0bm93Owot ICAgICAgICAgICAgICAgIHAgPSBub3c7Ci0gICAgICAgICAgICAgICAgenRpbWUoJnApOwotICAg ICAgICAgICAgICAgIHRub3cgPSBhdG9sKHArMTEpICogMzYwMEwgKyBhdG9sKHArMTQpICogNjBM ICsgYXRvbChwKzE3KTsKLSAgICAgICAgICAgICAgICBpZiAoenogPCB0bm93KSAgICAgICAgICAv KiBVc2VyJ3MgdGltZSBiZWZvcmUgbm93ICovCi0gICAgICAgICAgICAgICAgICB6eiArPSA4NjQw MEw7ICAgICAgICAgLyogU28gbWFrZSBpdCB0b21vcnJvdyAqLwotICAgICAgICAgICAgICAgIHp6 IC09IHRub3c7ICAgICAgICAgICAgIC8qIFNlY29uZHMgZnJvbSBub3cuICovCi0gICAgICAgICAg ICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHJldHVybih5KTsKLSAgICB9Ci0gICAgaWYg KHggPCAwKSB4ID0gMDsKLSAgICBzd2l0Y2ggKGN4KSB7Ci0gICAgICBjYXNlIFhYUEFVOiAgICAg ICAgICAgICAgICAgICAgICAgLyogUEFVU0UgKi8KLSAgICAgIGNhc2UgWFhNU0w6ICAgICAgICAg ICAgICAgICAgICAgICAvKiBNU0xFRVAgKi8KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBYWFdBSTogICAgICAgICAg ICAgICAgICAgICAgIC8qIFdBSVQgKi8KLSAgICAgICAgeiA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBNb2RlbSBzaWduYWwgbWFzayAqLwotICAgICAgICB3aGlsZSAoMSkgeyAgICAg ICAgICAgICAgICAgICAgIC8qIFJlYWQgemVybyBvciBtb3JlIHNpZ25hbCBuYW1lcyAqLwotICAg ICAgICAgICAgeSA9IGNta2V5KG1zdGFiLG5tcywibW9kZW0gc2lnbmFsIiwiIix4eHN0cmluZyk7 Ci0gICAgICAgICAgICBpZiAoeSA9PSAtMykgYnJlYWs7ICAgICAgICAgLyogLTMgbWVhbnMgdGhl eSB0eXBlZCBDUiAqLwotICAgICAgICAgICAgaWYgKHkgPCAwKSByZXR1cm4oeSk7ICAgICAgIC8q IE90aGVyIG5lZ2F0aXZlcyBhcmUgZXJyb3JzICovCi0gICAgICAgICAgICB6IHw9IHk7ICAgICAg ICAgICAgICAgICAgICAgLyogT1IgdGhlIGJpdCBpbnRvIHRoZSBzaWduYWwgbWFzayAqLwotICAg ICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAg ICBicmVhazsKLQotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNo b3VsZG4ndCBoYXBwZW4gKi8KLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0KLS8qIENvbW1h bmQgaXMgZW50ZXJlZCwgbm93IGRvIGl0LiAqLwotCi0gICAgaWYgKHp6ID4gLTFMKSB7ICAgICAg ICAgICAgICAgICAgICAgLyogVGltZSBvZiBkYXkgZ2l2ZW4/ICovCi0gICAgICAgIHggPSB6ejsK LSAgICAgICAgaWYgKHp6ICE9IChsb25nKSB4KSB7Ci0gICAgICAgICAgICBwcmludGYoCi0iU29y cnksIGFyaXRobWV0aWMgb3ZlcmZsb3cgLSBoaDptbTpzcyBub3QgdXNhYmxlIG9uIHRoaXMgcGxh dGZvcm0uXG4iCi0gICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7 Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGN4ID09IFhYTVNMKSB7ICAgICAgICAgICAgICAg ICAgLyogTWlsbGlzZWNvbmQgc2xlZXAgKi8KLSAgICAgICAgbXNsZWVwKHp6IDwgMCA/IHggOiB4 ICogMTAwMCk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgfQotICAgIGlmIChj eCA9PSBYWFBBVSAmJiAhc2xlZXBjYW4pIHsgICAgIC8qIFNMRUVQIENBTkNFTExBVElPTiBpcyBP RkYgKi8KLSAgICAgICAgc2xlZXAoeCk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0g ICAgfQotCi0gICAgLyogV0FJVCwgb3IgZWxzZSBTTEVFUCB3aXRoIGNhbmNlbGxhdGlvbiBhbGxv d2VkLi4uICovCi0KLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBT bGVlcCBsb29wICovCi0gICAgICAgIGludCBtZG1zaWc7Ci0gICAgICAgIGlmIChzbGVlcGNhbikg eyAgICAgICAgICAgICAgICAgLyogS2V5Ym9hcmQgY2FuY2VsbGF0aW9uIGFsbG93ZWQ/ICovCi0g ICAgICAgICAgICBpZiAoeSA9IGNvbmNoaygpKSB7ICAgICAgICAgLyogRGlkIHRoZXkgdHlwZSBz b21ldGhpbmc/ICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgIHdoaWxlICh5LS0p IGNvbmluYygwKTsgIC8qIFllcywgZ29iYmxlIGl0IGFsbCB1cCAqLwotI2Vsc2UKLSAgICAgICAg ICAgICAgICAvKiBUaGVyZSBpcyBhIGRlYmF0ZSBvdmVyIHdoZXRoZXIgUEFVU0Ugc2hvdWxkIGFi c29yYiAgICAqLwotICAgICAgICAgICAgICAgIC8qIGl0cyBjYW5jZWxsaW5nIGNoYXJhY3Rlcihz KS4gIFRoZXJlIGFyZSBzZXZlcmFsICAgICAgICovCi0gICAgICAgICAgICAgICAgLyogcmVhc29u cyB3aHkgaXQgc2hvdWxkIGdvYmJsZSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyOiAgKi8KLSAgICAg ICAgICAgICAgICAvKiAoMSkgTVMtRE9TIEtlcm1pdCBkb2VzIGl0ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIC8qICgyKSBpZiBub3QsIHN1YnNlcXVlbnQg UEFVU0UgY29tbWFuZHMgd2lsbCB0ZXJtaW5hdGUgICovCi0gICAgICAgICAgICAgICAgLyogICAg IGltbWVkaWF0ZWx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAg ICAgICAgICAgICAgICAvKiAoMykgaWYgbm90LCBzdWJzZXF1ZW50IEFTSyBjb21tYW5kcyB3aWxs IHVzZSBpdCBhcyAgICAqLwotICAgICAgICAgICAgICAgIC8qICAgICB2YWxpZCBpbnB1dC4gIElm IFwxMywgdGhlbiBpdCB3aWxsIGdldCBubyBpbnB1dCAgICovCi0gICAgICAgICAgICAgICAgLyog KDQpIGlmIG5vdCwgdGhlbiB0aGUgY2hhcmFjdGVyIGFwcGVhcnMgb24gdGhlIGNvbW1hbmQgKi8K LSAgICAgICAgICAgICAgICAvKiAgICAgbGluZSBhZnRlciBhbGwgZW5jbG9zaW5nIG1hY3JvcyBh cmUgY29tcGxldGUuICAgICAqLwotICAgICAgICAgICAgICAgIGtiY2hhciA9IGNvbmluYygwKTsg ICAgIC8qIEdvYmJsZSBvbmUgdXAgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAg ICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogQW5kIHF1aXQgUEFVU2luZyBvciBXQUlU aW5nICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGN4ID09IFhYV0FJ KSB7ICAgICAgICAgICAgICAvKiBXQUlUICh6ID09IG1vZGVtIHNpZ25hbCBtYXNrKSAqLwotICAg ICAgICAgICAgZGVidWcoRjEwMSwiV0FJVCB4IiwiIix4KTsKLSAgICAgICAgICAgIGlmICh6ID4g MCkgeyAgICAgICAgICAgICAgICAvKiBMb29raW5nIGZvciBhbnkgbW9kZW0gc2lnbmFscz8gKi8K LSAgICAgICAgICAgICAgICBtZG1zaWcgPSB0dGdtZG0oKTsgICAgICAvKiBZZXMsIGdldCB0aGVt ICovCi0gICAgICAgICAgICAgICAgaWYgKG1kbXNpZyA8IDApICAgICAgICAgLyogRmFpbGVkICov Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICAgICAgICAg IGlmICgobWRtc2lnICYgeikgPT0geikgIC8qIEdvdCB3aGF0IHdlIHdhbnRlZD8gKi8KLSAgICAg ICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7ICAvKiBTdWNjZWVkICovCi0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBpZiAoeCA9PSAwKSAgICAgICAgICAgICAgICAgLyogV0FJVCAw IGFuZCBkaWRuJ3QgZ2V0IG91ciBzaWduYWxzICovCi0gICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICB9Ci0gICAgICAgIHNsZWVwKDEpOyAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gaW50 ZXJydXB0LCBzbGVlcCBvbmUgc2Vjb25kICovCi0gICAgfSB3aGlsZSAoLS14ID4gMCk7Ci0KLSAg ICBpZiAoY3ggPT0gWFhXQUkpICAgICAgICAgICAgICAgICAgICAvKiBJZiBXQUlUIGFuZCBsb29w IGV4aGF1c3RlZCAqLwotICAgICAgc3VjY2VzcyA9ICh6ID09IDApOyAgICAgICAgICAgICAgIC8q IEZhaWwuICovCi0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICov Ci0gICAgICBzdWNjZXNzID0gKHggPT0gMCk7ICAgICAgICAgICAgICAgLyogU2V0IFNVQ0NFU1Mv RkFJTFVSRSBmb3IgUEFVU0UuICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MpOwotCi0jZWxzZSAgLyog TmV3IGNvZGUgdXNlcyBjaGFpbmVkIEZEQnMgYW5kIGFsbG93cyBGSUxFIHdhaXRzLi4uICovCi0K LSAgICBjaGFyICogbSA9ICIiOyAgICAgICAgICAgICAgICAgICAgICAvKiBIZWxwIG1lc3NhZ2Ug Ki8KLSAgICBzdHJ1Y3QgRkRCIG51LCBmbDsgICAgICAgICAgICAgICAgICAvKiBQYXJzZSBmdW5j dGlvbiBkZXNjcmlwdG9yIGJsb2NrcyAqLwotICAgIGludCBmaWxld2FpdCA9IDA7Ci0gICAgaW50 IG1kbXNpZyA9IDAsIGZzID0gMDsKLSAgICBjaGFyIGZpbGVkYXRlWzMyXTsKLQotICAgIGtiY2hh ciA9IDA7Ci0KLSAgICBzd2l0Y2ggKGN4KSB7Ci0gICAgICBjYXNlIFhYV0FJOiBtID0gInNlY29u ZHMgdG8gd2FpdCwgb3IgdGltZSBvZiBkYXkgaGg6bW06c3MiOyBicmVhazsKLSAgICAgIGNhc2Ug WFhQQVU6IG0gPSAic2Vjb25kcyB0byBwYXVzZSwgb3IgdGltZSBvZiBkYXkgaGg6bW06c3MiOyBi cmVhazsKLSAgICAgIGNhc2UgWFhNU0w6IG0gPSAibWlsbGlzZWNvbmRzIHRvIHNsZWVwLCBvciB0 aW1lIG9mIGRheSBoaDptbTpzcyI7IGJyZWFrOwotICAgIH0KLSAgICB6eiA9IC0xTDsKLSAgICBj bWZkYmkoJm51LAotICAgICAgICAgICBfQ01OVU0sICAgICAgICAgICAgICAgICAgICAgIC8qIE51 bWJlciAqLwotICAgICAgICAgICBtLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhlbHAg bWVzc2FnZSAqLwotICAgICAgICAgICAoY3ggPT0gWFhNU0wpID8gIjEwMCIgOiAiMSIsIC8qIERl ZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOL0Eg Ki8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOL0EgKi8KLSAg ICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOL0EgKi8KLSAgICAgICAg ICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICov Ci0gICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgLyogTi9BICovCi0gICAg ICAgICAgICZmbCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV4dCAqLwotICAgICAgICAg ICApOwotICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWUgb2Yg ZGF5ICovCi0gICAgICAgICAgIF9DTUZMRCwgICAgICAgICAgICAgICAgICAgICAgLyogRmllbGQg Ki8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8K LSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0g ICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRh dGEgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBu dW1lcmljIGRhdGEgMSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0gICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAg ICAgICAgICAgICAgLyogcHJvY2Vzc2luZyBmdW5jICovCi0gICAgICAgICAgIE5VTEwsICAgICAg ICAgICAgICAgICAgICAgICAgLyogTi9BICovCi0gICAgICAgICAgIE5VTEwgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTm8gbmV4dCAqLwotICAgICAgICAgICApOwotICAgIHggPSBjbWZkYigm bnUpOyAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIGEgbnVtYmVyIG9yIGEgZmllbGQgKi8K LSAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgaWYgKHggPT0gLTMpCi0gICAgICAgICAgeCA9IC0y OwotICAgICAgICByZXR1cm4oeCk7Ci0gICAgfQotICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUp IHsKLSAgICAgIGNhc2UgX0NNTlVNOiAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgKi8K LSAgICAgICAgeCA9IGNtcmVzdWx0Lm5yZXN1bHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz ZSBfQ01GTEQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpZWxkICovCi0gICAgICAgIHp6ID0g dG9kMnNlYyhjbXJlc3VsdC5zcmVzdWx0KTsgLyogQ29udmVydCB0byBzZWNzIHNpbmNlIG1pZG5p Z2h0ICovCi0gICAgICAgIGlmICh6eiA8IDBMKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9OdW1i ZXIsIGV4cHJlc3Npb24sIG9yIHRpbWUgb2YgZGF5IHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAg IHJldHVybigtOSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjaGFyIG5vd1szMl07 ICAgICAgICAgICAgICAgLyogQ3VycmVudCB0aW1lICovCi0gICAgICAgICAgICBjaGFyICpwOwot ICAgICAgICAgICAgbG9uZyB0bm93OwotICAgICAgICAgICAgcCA9IG5vdzsKLSAgICAgICAgICAg IHp0aW1lKCZwKTsKLSAgICAgICAgICAgIHRub3cgPSBhdG9sKHArMTEpICogMzYwMEwgKyBhdG9s KHArMTQpICogNjBMICsgYXRvbChwKzE3KTsKLSAgICAgICAgICAgIGlmICh6eiA8IHRub3cpICAg ICAgICAgICAgICAvKiBVc2VyJ3MgdGltZSBiZWZvcmUgbm93ICovCi0gICAgICAgICAgICAgIHp6 ICs9IDg2NDAwTDsgICAgICAgICAgICAgLyogU28gbWFrZSBpdCB0b21vcnJvdyAqLwotICAgICAg ICAgICAgenogLT0gdG5vdzsgICAgICAgICAvKiBTZWNvbmRzIGZyb20gbm93LiAqLwotICAgICAg ICB9Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsIlBBVVNFL1dBSVQvTVNMRUVQIHp6IiwiIix6eik7 Ci0gICAgc3dpdGNoIChjeCkgewotICAgICAgY2FzZSBYWFBBVTogICAgICAgICAgICAgICAgICAg ICAgIC8qIFBBVVNFICovCi0gICAgICBjYXNlIFhYTVNMOiAgICAgICAgICAgICAgICAgICAgICAg LyogTVNMRUVQICovCi0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwot ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgWFhXQUk6ICAgICAgICAgICAgICAgICAgICAgICAv KiBXQUlUICovCi0gICAgICAgIHogPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTW9k ZW0gc2lnbmFsIG1hc2sgKi8KLSAgICAgICAgeSA9IGNta2V5KHdhaXR0YWIsbndhaXR0YWIsIiIs IiIseHhzdHJpbmcpOwotICAgICAgICBpZiAoeSA8IDApIHsKLSAgICAgICAgICAgIGlmICh5ID09 IC0zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAg ICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg fSBlbHNlCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgfQotICAgICAgICBpZiAo eSA9PSBXQUlUX0ZJTCkgeyAgICAgICAgICAgIC8qIEZJTEUgKi8KLSAgICAgICAgICAgIGludCB3 aWxkID0gMDsKLSAgICAgICAgICAgIGlmICgoeiA9IGNta2V5KHdmc3dpLG53ZnN3aSwiZXZlbnQi LCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgICAg ICBmaWxld2FpdCA9IHo7Ci0gICAgICAgICAgICBpZiAoZmlsZXdhaXQgPT0gV0ZfTU9EIHx8IGZp bGV3YWl0ID09IFdGX0RFTCkKLSAgICAgICAgICAgICAgeiA9IGNtaWZpKCJGaWxlbmFtZSIsIiIs JnMsJndpbGQseHhzdHJpbmcpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB6ID0g Y21mbGQoIkZpbGVuYW1lIiwiIiwmcyx4eHN0cmluZyk7Ci0gICAgICAgICAgICBpZiAoeiA8IDAp Ci0gICAgICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgICAgIGlmICh3aWxkIHx8ICgoZmls ZXdhaXQgPT0gV0ZfQ1JFKSAmJiBpc3dpbGQocykpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRm KCI/V2lsZGNhcmRzIG5vdCB2YWxpZCBoZXJlXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4o LTkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJV RlNJWik7Ci0gICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAg IHJldHVybih6KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKHkgIT0g V0FJVF9NRE0pIHsgICAgIC8qIEEgbW9kZW0gc2lnbmFsICovCi0gICAgICAgICAgICB6IHw9IHk7 ICAgICAgICAgICAgICAgICAgICAgLyogT1IgdGhlIGJpdCBpbnRvIHRoZSBzaWduYWwgbWFzayAq LwotICAgICAgICB9Ci0gICAgICAgIGlmICghZmlsZXdhaXQpIHsgICAgICAgICAgICAgICAgLyog TW9kZW0gc2lnbmFscy4uLiAqLwotICAgICAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAg ICAgIC8qIEdldCB6ZXJvIG9yIG1vcmUgc2lnbmFsIG5hbWVzICovCi0gICAgICAgICAgICAgICAg eSA9IGNta2V5KG1zdGFiLG5tcywibW9kZW0gc2lnbmFsIiwiIix4eHN0cmluZyk7Ci0gICAgICAg ICAgICAgICAgaWYgKHkgPT0gLTMpIGJyZWFrOyAgICAgLyogLTMgbWVhbnMgdGhleSB0eXBlZCBD UiAqLwotICAgICAgICAgICAgICAgIGlmICh5IDwgMCkgcmV0dXJuKHkpOyAgIC8qIE90aGVyIG5l Z2F0aXZlcyBhcmUgZXJyb3JzICovCi0gICAgICAgICAgICAgICAgeiB8PSB5OyAgICAgICAgICAg ICAgICAgLyogT1IgdGhlIGJpdCBpbnRvIHRoZSBzaWduYWwgbWFzayAqLwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU2hvdWxkbid0IGhhcHBlbiAqLwotICAgICAgICByZXR1cm4oLTIpOwotICAg IH0gLyogc3dpdGNoIChjeCkgKi8KLQotLyogQ29tbWFuZCBpcyBlbnRlcmVkLCBub3cgZG8gaXQu ICovCi0KLSAgICBpZiAoenogPiAtMUwpIHsgICAgICAgICAgICAgICAgICAgICAvKiBUaW1lIG9m IGRheSBnaXZlbj8gKi8KLSAgICAgICAgeCA9IHp6OwotICAgICAgICBpZiAoenogIT0gKGxvbmcp IHgpIHsKLSAgICAgICAgICAgIHByaW50ZigKLSJTb3JyeSwgYXJpdGhtZXRpYyBvdmVyZmxvdyAt IGhoOm1tOnNzIG5vdCB1c2FibGUgb24gdGhpcyBwbGF0Zm9ybS5cbiIKLSAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBp ZiAoc2xlZXBjYW4pCi0gICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgICAgLyog RW5zdXJlIHNpbmdsZS1jaGFyIHdha2V1cCAqLwotCi0gICAgaWYgKGN4ID09IFhYTVNMKSB7ICAg ICAgICAgICAgICAgICAgLyogTWlsbGlzZWNvbmQgc2xlZXAgKi8KLSAgICAgICAgbXNsZWVwKHp6 IDwgMCA/IHggOiB4ICogMTAwMCk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAg fQotICAgIGlmIChjeCA9PSBYWFBBVSAmJiAhc2xlZXBjYW4pIHsgICAgIC8qIFNMRUVQIENBTkNF TExBVElPTiBpcyBPRkYgKi8KLSAgICAgICAgc2xlZXAoeCk7Ci0gICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7Ci0gICAgfQotICAgIGlmIChmaWxld2FpdCkgeyAgICAgICAgICAgICAgICAgICAg IC8qIEZJTEUuLi4gKi8KLSAgICAgICAgZnMgPSB6Y2hraSh0bXBidWYpOyAgICAgICAgICAgICAv KiBDaGVjayBpZiBmaWxlIGV4aXN0cyAqLwotICAgICAgICBzd2l0Y2ggKGZpbGV3YWl0KSB7Ci0g ICAgICAgICAgY2FzZSBXRl9ERUw6Ci0gICAgICAgICAgICBpZiAoZnMgPT0gLTEpCi0gICAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICBjYXNlIFdGX01PRDoKLSAgICAgICAgICAgIGlmIChmcyA9PSAtMSkgewotICAgICAgICAgICAg ICAgIHByaW50ZigiP0ZpbGUgZG9lcyBub3QgZXhpdDogJXNcbiIsdG1wYnVmKTsKLSAgICAgICAg ICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcyA9IHpmY2Rh dCh0bXBidWYpOyAgICAgICAgIC8qIEdldCBjdXJyZW50IG1vZGlmaWNhdGlvbiBkYXRlICovCi0g ICAgICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICAgICAgICAgIGlmIChja3N0cm5jcHkoZmls ZWRhdGUscywzMikgIT0gMTcpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9DYW4ndCBnZXQg bW9kaWZpY2F0aW9uIHRpbWU6ICVzXG4iLHRtcGJ1Zik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu KC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug V0ZfQ1JFOgotICAgICAgICAgICAgaWYgKGZzID4gLTEpCi0gICAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBk byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2xsaW5nIGxvb3AgKi8KLSAg ICAgICAgaWYgKHNsZWVwY2FuKSB7ICAgICAgICAgICAgICAgICAvKiBLZXlib2FyZCBjYW5jZWxs YXRpb24gYWxsb3dlZD8gKi8KLSAgICAgICAgICAgIGlmICgoeSA9IGNvbmNoaygpKSA+IDApIHsg ICAvKiBEaWQgdGhleSB0eXBlIHNvbWV0aGluZz8gKi8KLSAgICAgICAgICAgICAgICBrYmNoYXIg PSBjb25pbmMoMCk7ICAgICAvKiBZZXMsIGdldCBmaXJzdCBjaGFyIHRoZXkgdHlwZWQgKi8KLSAg ICAgICAgICAgICAgICBkZWJ1ZyhGMDAwLCJXQUlUIGtiY2hhciIsIiIsa2JjaGFyKTsKLSNpZmRl ZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgd2hpbGUgKC0teSA+IDApICAgICAgICAgLyogR29i YmxlIHRoZSByZXN0IHVwICovCi0gICAgICAgICAgICAgICAgICBjb25pbmMoMCk7Ci0jZW5kaWYg LyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7ICAgIC8q IEFuZCBxdWl0IFBBVVNpbmcgb3IgV0FJVGluZyAqLwotICAgICAgICAgICAgfQotICAgICAgICB9 Ci0gICAgICAgIGlmIChmaWxld2FpdCA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoY3ggPT0gWFhX QUkpIHsgICAgICAgICAgLyogV0FJVCBmb3IgbW9kZW0gc2lnbmFscyAqLwotICAgICAgICAgICAg ICAgIGlmICh6ICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbWRtc2lnID0gdHRnbWRtKCk7 ICAvKiBHZXQgdGhlbS4gKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiV0FJVCB0 dGdtZG0iLCIiLG1kbXNpZyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZG1zaWcgPCAwKSAg ICAgLyogRmFpbHVyZSB0byBnZXQgdGhlbT8gKi8KLSAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDApOyAvKiBGYWlsLiAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoKG1k bXNpZyAmIHopID09IHopIC8qIEdvdCBkZXNpcmVkIG9uZXM/ICovCi0gICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsgLyogU3VjY2VlZC4gKi8KLSAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKHggPT0gMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogRklMRS4uLiAqLwotICAgICAgICAgICAgZnMgPSB6Y2hraSh0bXBidWYpOyAgICAgICAg IC8qIEdldCBmaWxlIHN0YXR1cyAqLwotICAgICAgICAgICAgaWYgKGZpbGV3YWl0ID09IFdGX01P RCkgeyAgIC8qIFdhaXQgZm9yIG1vZGlmaWNhdGlvbiAqLwotICAgICAgICAgICAgICAgIGlmIChm cyA9PSAtMSkgICAgICAgICAgIC8qIEZhaWx1cmUgdG8gZ2V0IHN0YXR1cyAqLwotICAgICAgICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsgIC8qIHNvIFdBSVQgZmFpbHMuICovCi0gICAg ICAgICAgICAgICAgcyA9IHpmY2RhdCh0bXBidWYpOyAgICAgLyogR2V0IGN1cnJlbnQgbW9kaWZp Y2F0aW9uIHRpbWUgKi8KLSAgICAgICAgICAgICAgICBpZiAoIXMpIHMgPSAiIjsgICAgICAgICAv KiBBbmQgY29tcGFyZSB3aXRoIHRoZSB0aW1lICovCi0gICAgICAgICAgICAgICAgaWYgKHN0cmNt cChzLGZpbGVkYXRlKSkgLyogd2hlbiB0aGUgV0FJVCBzdGFydGVkICovCi0gICAgICAgICAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxld2Fp dCA9PSBXRl9ERUwpIHsgLyogV2FpdCBmb3IgZGVsZXRpb24gKi8KLSAgICAgICAgICAgICAgICBp ZiAoZnMgPT0gLTEpICAgICAgICAgICAvKiBJZiBmaWxlIGRvZXNuJ3QgZXhpc3QsICovCi0gICAg ICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOyAgLyogc3VjY2VlZC4gKi8KLSAgICAg ICAgICAgIH0gZWxzZSBpZiAoZmlsZXdhaXQgPT0gV0ZfQ1JFKSB7IC8qIFdhaXQgZm9yIGNyZWF0 aW9uICovCi0gICAgICAgICAgICAgICAgaWYgKGZzICE9IC0xKSAgICAgICAgICAgLyogSWYgZmls ZSBleGlzdHMgKi8KLSAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7ICAvKiBz dWNjZWVkLiAqLwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICh4IDwgMSkg ICAgICAgICAgICAgICAgICAgICAgLyogU0xFRVAvV0FJVC9QQVVTRSAwICovCi0gICAgICAgICAg YnJlYWs7Ci0gICAgICAgIHNsZWVwKHdhaXRpbnRlcnZhbCk7ICAgICAgICAgICAgLyogTm8gaW50 ZXJydXB0LCBzbGVlcCAqLwotICAgICAgICB4IC09IHdhaXRpbnRlcnZhbDsgICAgICAgICAgICAg IC8qIERlZHVjdCBzbGVlcCB0aW1lICovCi0gICAgfSB3aGlsZSAoeCA+IDApOwotCi0gICAgaWYg KGN4ID09IFhYV0FJKSAgICAgICAgICAgICAgICAgICAgLyogV0FJVCB0aW1lIGV4cGlyZWQgKi8K LSAgICAgIHN1Y2Nlc3MgPSAoeiA9PSAwKTsgICAgICAgICAgICAgICAvKiBTdWNjZWVkIGlmIG5v IG1vZGVtIHNpZ25hbHMgKi8KLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBGb3IgU0xFRVAgb3IgUEFVU0UsIHN1Y2Nlc3MgKi8KLSAgICAgIHN1Y2Nlc3MgPSAoeCA9 PSAwKTsgICAgICAgICAgICAgICAvKiBkZXBlbmRzIG9uIHdoZXRoZXIgaXQgd2FzICovCi0gICAg cmV0dXJuKHN1Y2Nlc3MpOyAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJydXB0ZWQgZnJvbSB0 aGUga2V5Ym9hcmQuICovCi0jZW5kaWYgLyogT0xEV0FJVCAqLwotfQotI2VuZGlmIC8qIE5PU1BM ICovCi0KLSNpZmRlZiBPUzJPUlVOSVgKLV9QUk9UT1RZUChpbnQgemNtcGZuLChjaGFyICosIGNo YXIgKikpOwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotCi0jaWZuZGVmIE5PRlJJTExTCi0jaWZk ZWYgTlQKLWludCAKLWRvbGluaygpIHsKLSAgICAvKiBQYXJzZSBhIGZpbGUgb3IgYSBkaXJlY3Rv cnkgbmFtZSAqLwotICAgIGludCBpLCB4LCB6LCBsaXN0aW5nID0gMCwgaGF2ZW5hbWUgPSAwLCB3 aWxkID0gMCwgcmMgPSAxOwotICAgIHN0cnVjdCBGREIgc3csIGZpOwotCi0gICAgY21mZGJpKCZz dywgICAgICAgICAgICAgICAgICAgICAgICAgLyogMm5kIEZEQiAtIG9wdGlvbmFsIC9QQUdFIHN3 aXRjaCAqLwotICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2Rl ICovCi0gICAgICAgICAgICJGaWxlbmFtZSBvciBzd2l0Y2giLCAgICAgICAgLyogaGxwbXNnICov Ci0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwot ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBk YXRhICovCi0gICAgICAgICAgIG5xdnN3dGFiLCAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwg bnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0gICAgICAgICAgIDQsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotICAgICAg ICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24g Ki8KLSAgICAgICAgICAgcXZzd3RhYiwgICAgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRh YmxlICovCi0gICAgICAgICAgICZmaSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRl ciB0byBuZXh0IEZEQiAqLwotICAgICAgICAgICApOwotCi0gICAgY21mZGJpKCZmaSwgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMXN0IEZEQiAtIGZpbGUgdG8gdHlwZSAqLwotICAgICAgICAg ICBfQ01JRkksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICIiLCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAg IDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8K LSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmlj IGRhdGEgMiAqLwotICAgICAgICAgICB4eHN0cmluZywKLSAgICAgICAgICAgTlVMTCwKLSAgICAg ICAgICAgTlVMTAotICAgICAgICAgICApOwotCi0gICAgd2hpbGUgKCFoYXZlbmFtZSkgewotICAg ICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAq LwotICAgICAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yICovCi0g ICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7Ci0g ICAgICAgICAgY2FzZSBfQ01LRVk6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1 bHQpIHsKLSAgICAgICAgICAgICAgY2FzZSBERUxfTElTOgotICAgICAgICAgICAgICBjYXNlIERF TF9WUkI6Ci0gICAgICAgICAgICAgICAgbGlzdGluZyA9IDE7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgIGNhc2UgREVMX05PTDoKLSAgICAgICAgICAgICAgY2FzZSBERUxf UVVJOgotICAgICAgICAgICAgICAgIGxpc3RpbmcgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBfQ01J Rkk6Ci0gICAgICAgICAgICBzID0gY21yZXN1bHQuc3Jlc3VsdDsKLSAgICAgICAgICAgIGhhdmVu YW1lID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg ICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHdpbGQgPSBjbXJlc3VsdC5u cmVzdWx0OyAgICAgICAgICAgIC8qIFNvdXJjZSBzcGVjaWZpY2F0aW9uIHdpbGQ/ICovCi0KLSAg ICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7ICAgICAgICAvKiBNYWtlIGEgc2FmZSBjb3B5 IG9mIHNvdXJjZSBuYW1lICovCi0gICAgcyA9IGxpbmU7Ci0KLSAgICBpZiAoIXdpbGQpCi0gICAg ICB3aWxkID0gaXN3aWxkKGxpbmUpOwotCi0gICAgcCA9IHRtcGJ1ZjsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUGxhY2UgZm9yIG5ldyBuYW1lICovCi0gICAgaWYgKCh4ID0gY21vZmkod2ls ZCA/ICJUYXJnZXQgZGlyZWN0b3J5IiA6ICJOZXcgbmFtZSIsCi0gICAgICAgICAgICAgICAgICAg IiIsJnMseHhzdHJpbmcpKSA8IDApIHsgLyogR2V0IG5ldyBuYW1lICovCi0gICAgICAgIGlmICh4 ID09IC0zKSB7Ci0gICAgICAgICAgICBwcmludGYoIj8lcyByZXF1aXJlZFxuIiwgd2lsZCA/ICJU YXJnZXQgZGlyZWN0b3J5IiA6ICJOZXcgbmFtZSIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsK LSAgICAgICAgfSBlbHNlIHJldHVybih4KTsKLSAgICB9Ci0gICAgY2tzdHJuY3B5KHAscyxUTVBC VUZTSVopOyAgICAgICAgICAgLyogTWFrZSBhIHNhZmUgY29weSBvZiB0aGUgbmV3IG5hbWUgKi8K LSAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLQotICAgIGlmICghd2lsZCkg eyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEp1c3Qgb25lICovCi0gICAgICAgIGlmIChsaXN0 aW5nKSBwcmludGYoIiVzID0+ICVzICIsbGluZSxwKTsKLSAgICAgICAgaWYgKHpsaW5rKGxpbmUs cCkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAobGlzdGluZykgcHJpbnRmKCIoRkFJTEVEOiAlc1xu Iixja19lcnJzdHIoKSk7Ci0gICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICBpZiAobGlzdGluZykgcHJpbnRmKCIoT0spXG4iKTsKLSAgICAgICAgfQotICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IHJjKTsKLSAgICB9Ci0gICAgaWYgKCFpc2RpcihwKSkgeyAg ICAgICAgICAgICAgICAgICAgLyogTXVsdGlwbGUgKi8KLSAgICAgICAgcHJpbnRmKCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBpZiB0YXJnZXQgaXMgbm90IGEgZGlyZWN0b3J5ICovCi0iP011 bHRpcGxlIHNvdXJjZSBmaWxlcyBub3QgYWxsb3dlZCBpZiB0YXJnZXQgaXMgbm90IGEgZGlyZWN0 b3J5LlxuIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotI2lmZGVmIENPTU1FTlQKLSAg ICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaG93IGZ1bGwgcGF0aCBv ZiB0YXJnZXQgKi8KLSAgICAgICAgY2hhciBidWZbQ0tNQVhQQVRIXTsgICAgICAgICAgICAvKiAo dG9vIG11Y2gpICovCi0gICAgICAgIGlmICh6Zm5xZnAocCxDS01BWFBBVEgsYnVmKSkKLSAgICAg ICAgICBja3N0cm5jcHkodG1wYnVmLGJ1ZixUTVBCVUZTSVopOwotICAgIH0KLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLSNpZmRlZiBWTVMKLSAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBMZXQgQ3RybC1DIHdvcmsuICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgZGVi dWcoRjExMCwiZG9saW5rIGxpbmUiLGxpbmUsMCk7Ci0KLSNpZmRlZiBaWFJFV0lORAotICAgIHog PSB6eHJld2luZCgpOyAgICAgICAgICAgICAgICAgICAgIC8qIFJld2luZCBmaWxlIGxpc3QgKi8K LSNlbHNlCi0gICAgeiA9IG56eHBhbmQocywwKTsgICAgICAgICAgICAgICAgICAgLyogRXhwYW5k IGZpbGUgbGlzdCAqLwotI2VuZGlmIC8qIFpYUkVXSU5EICovCi0gICAgZGVidWcoRjExMSwiZG9s aW5rIHAiLHAseik7Ci0KLSNpZmRlZiBVTklYCi0gICAgaWYgKHdpbGQgJiYgeiA+IDEpCi0gICAg ICBzaF9zb3J0KG10Y2hzLE5VTEwseiwwLDAsZmlsZWNhc2UpOyAvKiBBbHBoYWJldGl6ZSB0aGUg ZmlsZW5hbWUgbGlzdCAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotICAgIHdoaWxlICh6LS0gPiAw KSB7Ci0gICAgICAgIGlmICghKHogPT0gMCAmJiAhd2lsZCkpCi0gICAgICAgICAgem5leHQobGlu ZSk7Ci0gICAgICAgIGlmICghbGluZVswXSkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYg KGxpc3RpbmcpIHByaW50ZigiJXMgPT4gJXMgIixsaW5lLHApOwotICAgICAgICBpZiAoemxpbmso bGluZSxwKSA8IDApIHsKLSAgICAgICAgICAgIGlmIChsaXN0aW5nKSBwcmludGYoIihGQUlMRUQ6 ICVzXG4iLGNrX2VycnN0cigpKTsKLSAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgIGlmIChsaXN0aW5nKSBwcmludGYoIihPSylcbiIpOwotICAgICAgICB9 Ci0gICAgfQotI2lmZGVmIFZNUwotICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7Ci0jZW5kaWYgLyog Vk1TICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MgPSByYyk7Ci19Ci0jZW5kaWYgLyogTlQgKi8KLQot I2lmZGVmIFpDT1BZCi1pbnQKLWRvY29weSgpIHsKLSAgICBpbnQgaSwgeCwgbGlzdGluZyA9IDAs IG5vbGlzdCA9IDAsIGhhdmVuYW1lID0gMCwgZ2V0dmFsOwotICAgIGNoYXIgYzsKLSAgICBzdHJ1 Y3QgRkRCIHN3LCBmaTsKLSAgICBpbnQgb3ZlcndyaXRlID0gT1ZXX0FMV0FZUzsKLSAgICBpbnQg dGFyZ2V0aXNkaXIgPSAwOwotICAgIGludCB0YXJnZXRsZW4gPSAwOwotICAgIGludCBhcHBlbmRp bmcgPSAwOwotICAgIGludCBwcmVzZXJ2ZSA9IDA7Ci0gICAgaW50IHN3YXBwaW5nID0gMDsKLSAg ICBpbnQgZnJvbWI2NCA9IDA7Ci0gICAgaW50IHRvYjY0ID0gMDsKLSAgICBpbnQgd2lsZCA9IDA7 Ci0gICAgaW50IHJjID0gMTsKLQotICAgIGNoYXIgbmV3bmFtZVtDS01BWFBBVEhdLCAqIG5tOwot ICAgIG5tID0gbmV3bmFtZTsKLQotICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDFzdCBGREIgLSBzd2l0Y2hlcyAqLwotICAgICAgICAgICBfQ01LRVksICAgICAgICAg ICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICJGaWxlbmFtZSBvciBzd2l0Y2gi LCAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIG5jb3B5dGFiLCAgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0gICAgICAg ICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6 IDQgPSBjbXN3aSAqLwotICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAgIC8q IFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgY29weXRhYiwgICAgICAgICAgICAg ICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICZmaSAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAgICAgICApOwotICAg IGNtZmRiaSgmZmksICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDJuZCBGREIgLSBmaWxlIHRv IGNvcHkgKi8KLSAgICAgICAgICAgX0NNSUZJLCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29k ZSAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAq LwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8K LSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcg ZGF0YSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRs IG51bWVyaWMgZGF0YSAxICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsCi0gICAg ICAgICAgIE5VTEwsCi0gICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgKTsKLQotICAgIHdoaWxl ICghaGF2ZW5hbWUpIHsKLSAgICAgICAgeCA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgICAgICAv KiBQYXJzZSBzb21ldGhpbmcgKi8KLSAgICAgICAgaWYgKHggPCAwKSAgICAgICAgICAgICAgICAg ICAgICAvKiBFcnJvciAqLwotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgc3dpdGNoIChj bXJlc3VsdC5mY29kZSkgewotICAgICAgICAgIGNhc2UgX0NNS0VZOgotCSAgICBjID0gY21nYnJr KCk7ICAgICAgICAgICAgICAgICAgIC8qIEdldCBicmVhayBjaGFyYWN0ZXIgKi8KLQkgICAgaWYg KChnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAhKGNtZ2t3ZmxncygpICYgQ01f QVJHKSkgewotCQlwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50 XG4iKTsKLQkJcmMgPSAtOTsKLQkJcmV0dXJuKHJjKTsKLQkgICAgfQotCSAgICBpZiAoIWdldHZh bCAmJiAoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0JCXByaW50ZigiP1RoaXMgc3dpdGNoIHJl cXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLQkJcmMgPSAtOTsKLQkJcmV0dXJuKHJjKTsKLQkgICAg fQotICAgICAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7Ci0gICAgICAgICAgICAg IGNhc2UgREVMX0xJUzoKLSAgICAgICAgICAgICAgY2FzZSBERUxfVlJCOgotCQlub2xpc3QgPSAw OwotICAgICAgICAgICAgICAgIGxpc3RpbmcgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICBjYXNlIERFTF9OT0w6Ci0gICAgICAgICAgICAgIGNhc2UgREVMX1FVSToK LQkJbm9saXN0ID0gMTsKLSAgICAgICAgICAgICAgICBsaXN0aW5nID0gMDsKLSAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSA5OTk6Ci0gICAgICAgICAgICAgICAgc3dh cHBpbmcgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDk5 ODoKLSAgICAgICAgICAgICAgICBhcHBlbmRpbmcgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFr OwotCSAgICAgIGNhc2UgOTk1OgotCQlwcmVzZXJ2ZSA9IDE7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0JICAgICAgY2FzZSA5OTQ6Ci0JCWlmICgoeCA9IGNta2V5KG92d3RhYixub3Z3dGFiLAot CQkJICAgICAgICJXaGVuIHRvIG92ZXJ3cml0ZSBleGlzdGluZyBkZXN0aW5hdGlvbiBmaWxlIiwK LQkJCSAgICAgICAiIix4eHN0cmluZykpIDwgMCkKLQkJICByZXR1cm4oeCk7Ci0JCW92ZXJ3cml0 ZSA9IHg7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAg ICAgIGNhc2UgOTk3OgotICAgICAgICAgICAgICAgIGZyb21iNjQgPSAxOwotICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDk5NjoKLSAgICAgICAgICAgICAgICB0b2I2 NCA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgX0NNSUZJOgotICAg ICAgICAgICAgcyA9IGNtcmVzdWx0LnNyZXN1bHQ7Ci0gICAgICAgICAgICBoYXZlbmFtZSA9IDE7 Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0 dXJuKC0yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB3aWxkID0gY21yZXN1bHQubnJlc3VsdDsK LSAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7ICAgICAgICAvKiBNYWtlIGEgc2FmZSBj b3B5IG9mIHNvdXJjZSBuYW1lICovCi0gICAgcyA9IGxpbmU7Ci0gICAgcCA9IHRtcGJ1ZjsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUGxhY2UgZm9yIG5ldyBuYW1lICovCi0KLSAgICAvKiBH ZXQgZGVzdGluYXRpb24gbmFtZSAqLwotICAgIGlmICgoeCA9IGNtb2ZpKCJkZXN0aW5hdGlvbiBu YW1lIGFuZC9vciBkaXJlY3RvcnkiLAotI2lmZGVmIFVOSVgKLSAgICAgICAgICAgICAgICAgICAi LiIKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIiIKLSNlbmRpZiAvKiBVTklYICovCi0gICAg ICAgICAgICAgICAgICAgLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgIGlmICh4ID09IC0z KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9OYW1lIGZvciBkZXN0aW5hdGlvbiBmaWxlIHJlcXVp cmVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0gZWxzZSByZXR1cm4o eCk7Ci0gICAgfQotICAgIGNrc3RybmNweShwLHMsVE1QQlVGU0laKTsgICAgICAgICAgIC8qIFNh ZmUgY29weSBvZiBkZXN0aW5hdGlvbiBuYW1lICovCi0gICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeSk7Ci0gICAgaWYgKGFwcGVuZGluZyAmJiBzd2FwcGluZykgewotICAgICAgICBw cmludGYoIj9Tb3JyeSwgL0FQUEVORCBhbmQgL1NXQVAgY29uZmxpY3RcbiIpOwotICAgICAgICBy ZXR1cm4oLTkpOwotICAgIH0KLSNpZmRlZiBDT01NRU5UCi0vKgotICBUaGlzIHVucmVhc29uYWJs eSBwcmV2ZW50ZWQgIkNPUFkgL0FQUEVORCAqLiogYmlnZmlsZSIgZnJvbSBjb25jYXRlbmF0aW5n Ci0gIGEgYnVuY2ggb2YgZmlsZXMgaW50byBvbmUgYmlnIGZpbGUuCi0qLwotICAgIGlmIChhcHBl bmRpbmcgJiYgd2lsZCkgewotICAgICAgICBwcmludGYoIj9Tb3JyeSwgL0FQUEVORCBjYW4gYmUg dXNlZCBvbmx5IHdpdGggc2luZ2xlIGZpbGVzXG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAg ICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHRhcmdldGlzZGlyID0gaXNkaXIocCk7Ci0g ICAgeCA9IHN0cmxlbihwKTsKLSAgICBpZiAodGFyZ2V0aXNkaXIpIHsKLSNpZmRlZiBVTklYT1JP U0sKLSAgICAgICAgaWYgKHBbeC0xXSAhPSAnLycpIHsKLSAgICAgICAgICAgIGNrc3RybmNhdChw LCIvIixUTVBCVUZTSVopOwotICAgICAgICAgICAgeCsrOwotICAgICAgICB9Ci0jZWxzZQotI2lm ZGVmIE9TMgotICAgICAgICBpZiAocFt4LTFdICE9ICcvJykgewotICAgICAgICAgICAgY2tzdHJu Y2F0KHAsIi8iLFRNUEJVRlNJWik7Ci0gICAgICAgICAgICB4Kys7Ci0gICAgICAgIH0KLSNlbHNl Ci0jaWZkZWYgU1RSQVRVUwotICAgICAgICBpZiAocFt4LTFdICE9ICc+JykgewotICAgICAgICAg ICAgY2tzdHJuY2F0KHAsIj4iLFRNUEJVRlNJWik7Ci0gICAgICAgICAgICB4Kys7Ci0gICAgICAg IH0KLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICAgICAgaWYgKHBbeC0xXSAhPSAnOicp IHsKLSAgICAgICAgICAgIGNrc3RybmNhdChwLCI6IixUTVBCVUZTSVopOwotICAgICAgICAgICAg eCsrOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBpZiAocFt4LTFdICE9ICcvJykgewotICAg ICAgICAgICAgY2tzdHJuY2F0KHAsIi8iLFRNUEJVRlNJWik7Ci0gICAgICAgICAgICB4Kys7Ci0g ICAgICAgIH0KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8K LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSAgICB9Ci0gICAgdGFy Z2V0bGVuID0geDsKLQotICAgIGlmICghYXBwZW5kaW5nKSB7CQkJLyogSWYgL0FQUEVORCBub3Qg Z2l2ZW4gKi8KLQlpZiAod2lsZCAmJiAhdGFyZ2V0aXNkaXIpIHsJLyogTm8gd2lsZGNhcmRzIGFs bG93ZWQgKi8KLQkgICAgcHJpbnRmKAkJCS8qIGlmIHRhcmdldCBpcyBub3QgYSBkaXJlY3Rvcnkg Ki8KLSI/TXVsdGlwbGUgc291cmNlIGZpbGVzIG5vdCBhbGxvd2VkIGlmIHRhcmdldCBpcyBub3Qg YSBkaXJlY3RvcnkuXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0gICAgfQotCi0jaWZkZWYg Vk1TCi0gICAgY29ucmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGV0IEN0cmwt QyB3b3JrLiAqLwotI2VuZGlmIC8qIFZNUyAqLwotICAgIGRlYnVnKEYxMTAsImRvY29weSBsaW5l IixsaW5lLDApOwotICAgIGRlYnVnKEYxMTAsImRvY29weSBwIixwLDApOwotICAgIGRlYnVnKEYx MTAsImRvY29weSBubSIsbm0sMCk7Ci0KLSNpZmRlZiBaWFJFV0lORAotICAgIHogPSB6eHJld2lu ZCgpOyAgICAgICAgICAgICAgICAgICAgIC8qIFJld2luZCBmaWxlIGxpc3QgKi8KLSNlbHNlCi0g ICAgeiA9IG56eHBhbmQocywwKTsgICAgICAgICAgICAgICAgICAgLyogRXhwYW5kIGZpbGUgbGlz dCAqLwotI2VuZGlmIC8qIFpYUkVXSU5EICovCi0KLSNpZmRlZiBVTklYCi0gICAgaWYgKHdpbGQp Ci0gICAgICBzaF9zb3J0KG10Y2hzLE5VTEwseiwwLDAsZmlsZWNhc2UpOyAvKiBBbHBoYWJldGl6 ZSB0aGUgZmlsZW5hbWUgbGlzdCAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmZGVmIElLU0QK LSAgICBpZiAoIXRhcmdldGlzZGlyICYmIHpjaGtpKHApID4gLTEpIHsgLyogRGVzdGluYXRpb24g ZmlsZSBleGlzdHM/ICovCi0gICAgICAgIGlmIChpbnNlcnZlciAmJiAoIUVOQUJMRUQoZW5fZGVs KQotI2lmZGVmIENLX0xPR0lOCi0gICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNndWVzdAot I2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgKSkgewotICAg ICAgICAgICAgcHJpbnRmKCI/U29ycnksIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzIGlzIGRp c2FibGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICB9Ci0j ZW5kaWYgLyogSUtTRCAqLwotCi0gICAgaWYgKHRvYjY0ICYmIGZyb21iNjQpIHsgICAgICAgICAg ICAgLyogVG8gYW5kIGZyb20gQjY0ID0gbm8gY29udmVyc2lvbiAqLwotICAgICAgICB0b2I2NCA9 IDA7Ci0gICAgICAgIGZyb21iNjQgPSAwOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJDT1BZIGRl c3QiLHAsMCk7Ci0KLSAgICB3aGlsZSAoeiA+IDApIHsKLQotICAgICAgICB6bmV4dChsaW5lKTsK LSAgICAgICAgaWYgKCFsaW5lWzBdKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGVycm5v ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgZXJybm8gKi8KLQotCWlmICh0YXJn ZXRpc2RpcikgewotCSAgICB6c3RyaXAobGluZSwmbm0pOwotCSAgICBja21ha21zZyhuZXduYW1l LENLTUFYUEFUSCxwLG5tLE5VTEwsTlVMTCk7Ci0JICAgIG5tID0gbmV3bmFtZTsKLQl9IGVsc2Ug ewotCSAgICBubSA9IHA7Ci0JfQotCWlmIChvdmVyd3JpdGUpIHsJCS8qIE92ZXJ3cml0ZSBjaGVj a2luZz8gKi8KLQkgICAgaWYgKHpjaGtpKG5tKSA+PSAoQ0tfT0ZGX1QpMCkgeyAvKiBEZXN0aW5h dGlvbiBmaWxlIGV4aXN0cz8gKi8KLQotCQljaGFyIGQxWzIwXSwgKiBkMjsKLQkJY2hhciAqIG4x LCAqIG4yOwotCQlpbnQgaSwgc2tpcCA9IDA7Ci0KLQkJaSA9IHN0cmxlbihsaW5lKTsJLyogSXNv bGF0ZSBzb3VyY2UgZmlsZW5hbWUgKi8KLQkJZm9yICg7IGkgPj0gMDsgaS0tKSB7Ci0JCSAgICBp ZiAoSVNESVJTRVAobGluZVtpXSkpIHsKLQkJCW4xID0gJmxpbmVbaSsxXTsKLQkJCWJyZWFrOwot CQkgICAgfQotCQl9Ci0JCWRlYnVnKEYxMTAsIkNPUFkgbjEiLCBuMSwgMCk7Ci0JCWkgPSBzdHJs ZW4obm0pOwkJLyogQW5kIGRlc3RpbmF0aW9uIGZpbGVuYW1lICovCi0JCWZvciAoOyBpID49IDA7 IGktLSkgewotCQkgICAgaWYgKElTRElSU0VQKG5tW2ldKSkgewotCQkJbjIgPSAmbm1baSsxXTsK LQkJCWJyZWFrOwotCQkgICAgfQotCQl9Ci0JCWRlYnVnKEYxMTAsIkNPUFkgbjIiLCBuMiwgMCk7 Ci0JCWlmICghc3RyY21wKG4xLG4yKSkgeyAgICAgICAgICAJICAvKiBTYW1lIG5hbWU/ICovCi0J CSAgICBpZiAob3ZlcndyaXRlID09IE9WV19ORVZFUikgeyAvKiBOZXZlciBvdmVyd3JpdGU/ICov Ci0JCQlpZiAobGlzdGluZykJICAgICAgICAgIC8qIFNraXAgKi8KLQkJCSAgaWYgKGxpc3Rpbmcp IHByaW50ZigiJXMgPT4gJXMgKFNLSVBQRUQpXG4iLGxpbmUsbm0pOwotCQkJY29udGludWU7Ci0J CSAgICB9Ci0JCSAgICBja3N0cm5jcHkoZDEsemZjZGF0KGxpbmUpLDIwKTsgLyogU291cmNlIGZp bGUgdGltZXN0YW1wICovCi0JCSAgICBkMiA9IHpmY2RhdChubSk7CSAgICAgICAvKiBUaW1lc3Rh bXAgb2YgZGVzdCBmaWxlICovCi0JCSAgICB4ID0gc3RyY21wKGQxLGQyKTsJICAgICAgIC8qIENv bXBhcmUgdGhlbSAqLwotCQkgICAgaWYgKCgob3ZlcndyaXRlID09IE9WV19ORVdFUikgJiYgKHgg PCAwKSkgfHwKLQkJCSgob3ZlcndyaXRlID09IE9WV19PTERFUikgJiYgKHggPiAwKSkpIHsKLQkJ CWlmIChsaXN0aW5nKQotCQkJICBpZiAobGlzdGluZykgcHJpbnRmKCIlcyA9PiAlcyAoU0tJUFBF RClcbiIsbGluZSxubSk7Ci0JCQljb250aW51ZTsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0JfQot ICAgICAgICBpZiAobGlzdGluZykgcHJpbnRmKCIlcyA9PiAlcyAiLGxpbmUsbm0pOwotCi0gICAg ICAgIC8qIFN0cmFpZ2h0IGNvcHkgKi8KLSAgICAgICAgaWYgKCFzd2FwcGluZyAmJiAhYXBwZW5k aW5nICYmICFmcm9tYjY0ICYmICF0b2I2NCkgewotICAgICAgICAgICAgZGVidWcoRjExMCwiQ09Q WSB6Y29weSIsbGluZSwwKTsKLQotICAgICAgICAgICAgaWYgKCh4ID0gemNvcHkobGluZSxwKSkg PCAwKSB7IC8qIExldCB6Y29weSgpIGRvIGl0LiAqLwotCQlkZWJ1ZyhGMTExLCJDT1BZIG5vdCBP SyIsbGluZSx4KTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICAgICAg ICAgIGNhc2UgLTI6Ci0JCSAgICBpZiAobGlzdGluZykKLQkJICAgICAgcHJpbnRmKCIoRkFJTEVE OiBOb3QgYSByZWd1bGFyIGZpbGUpXG4iKTsKLQkJICAgIGVsc2UgaWYgKCFub2xpc3QpCi0JCSAg ICAgIHByaW50ZigiP05vdCBhIHJlZ3VsYXIgZmlsZSAtICVzXG4iLGxpbmUpOwotICAgICAgICAg ICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgICAgY2FzZSAtMzoKLQkJICAgIGlmIChsaXN0aW5nKQotCQkgICAgICBwcmludGYoIihG QUlMRUQ6IE5vdCBmb3VuZCBvciBub3QgYWNjZXNzaWJsZSlcbiIpOwotCQkgICAgZWxzZSBpZiAo IW5vbGlzdCkKLQkJICAgICAgcHJpbnRmKCI/Tm90IGZvdW5kIG9yIG5vdCBhY2Nlc3NpYmxlIC0g JXNcbiIsbGluZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIC00OgotCQkgICAgaWYgKGxpc3Rp bmcpCi0JCSAgICAgIHByaW50ZigiKEZBSUxFRDogUGVybWlzc2lvbiBkZW5pZWQpXG4iKTsKLQkJ ICAgIGVsc2UgaWYgKCFub2xpc3QpCi0JCSAgICAgIHByaW50ZigiP1Blcm1pc3Npb24gZGVuaWVk IC0gJXNcbiIsbGluZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIC01OgotCQkgICAgaWYgKGxp c3RpbmcpCi0JCSAgICAgIHByaW50ZigiKFNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBz YW1lIGZpbGUpXG4iKTsKLQkJICAgIGVsc2UgaWYgKCFub2xpc3QpCi0JCSAgICAgIHByaW50ZigK LQkJCSAgIj9Tb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlIC0gJXNcbiIs Ci0JCQkgIGxpbmUKLQkJCSAgKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgICBjYXNlIC02OgotCQkgICAgaWYgKGxpc3RpbmcpCi0JCSAgICAgIHByaW50Zigi KEZBSUxFRDogSW5wdXQvT3V0cHV0IGVycm9yKVxuIik7Ci0JCSAgICBlbHNlIGlmICghbm9saXN0 KQotCQkgICAgICBwcmludGYoIj9JbnB1dC9PdXRwdXQgZXJyb3IgLSAlc1xuIixsaW5lKTsKLSAg ICAgICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgIGNhc2UgLTc6Ci0JCSAgICBpZiAobGlzdGluZykKLQkJICAgICAgcHJp bnRmKCIoRkFJTEVEOiAlcyAtICVzKVxuIixwLGNrX2VycnN0cigpKTsKLQkJICAgIGVsc2UgaWYg KCFub2xpc3QpCi0JCSAgICAgIHByaW50ZigiPyVzIC0gJXNcbiIsY2tfZXJyc3RyKCkscCk7Ci0g ICAgICAgICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICBkZWZhdWx0OgotCQkgICAgaWYgKGxpc3RpbmcpCi0JCSAgICAgIHBy aW50ZigiKEZBSUxFRDogJXMpXG4iLGNrX2VycnN0cigpKTsKLQkJICAgIGVsc2UgaWYgKCFub2xp c3QpCi0JCSAgICAgIHByaW50ZigiPyVzXG4iLGNrX2VycnN0cigpKTsKLSAgICAgICAgICAgICAg ICAgICAgcmMgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7CQkJ LyogUmVndWxhciBjb3B5IHN1Y2NlZWRlZCAqLwotCQlkZWJ1ZyhGMTEwLCJDT1BZIE9LLi4iLG5l d25hbWUsMCk7Ci0jaWZuZGVmIE5PWEZFUgotCQlpZiAocHJlc2VydmUpIHsJCS8qIEhhbmRsZSAv UFJFU0VSVkUgKi8KLQkJICAgIGNoYXIgKiBwc3RyID0gIiI7CS8qIEZpbGUgcGVybWlzc2lvbnMg c3RyaW5nICovCi0JCSAgICBzdHJ1Y3QgemF0dHIgeHg7CS8qIEZpbGUgYXR0cmlidXRlIHN0cnVj dHVyZSAqLwotCQkgICAgZXh0ZXJuIGNoYXIgKiBja3N5c2lkOwotCi0JCSAgICBpbml0YXR0cigm eHgpOwkvKiBJbml0aWFsaXplIHRoZSBzdHJ1Y3QgKi8KLQotCQkgICAgeHguc3lzdGVtaWQudmFs ID0gY2tzeXNpZDsgLyogU2V0IG91ciBzeXN0ZW0gSUQgKi8KLQkJICAgIHh4LnN5c3RlbWlkLmxl biA9IChpbnQpc3RybGVuKGNrc3lzaWQpOwotI2lmZGVmIENLX1BFUk1TCi0JCSAgICBwc3RyID0g emdwZXJtKGxpbmUpOyAvKiBHZXQgc291cmNlIGZpbGUncyBwZXJtaXNzaW9ucyAqLwotI2VuZGlm IC8qIENLX1BFUk1TICovCi0JCSAgICB4eC5scHJvdGVjdC52YWwgPSBwc3RyOwotCQkgICAgeHgu bHByb3RlY3QubGVuID0gKGludClzdHJsZW4ocHN0cik7Ci0JCSAgICB4eC5kYXRlLnZhbCA9IHpm Y2RhdChsaW5lKTsJLyogU291cmNlIGZpbGUncyB0aW1lc3RhbXAgKi8KLQkJICAgIHh4LmRhdGUu bGVuID0gKGludClzdHJsZW4oeHguZGF0ZS52YWwpOwotCQkgICAgaWYgKHpzdGltZShubSwmeHgs MCkgPCAwKSB7Ci0JCQlwcmludGYoIj9DT1BZIC9QUkVTRVJWRSAlczogJXNcbiIsbm0sY2tfZXJy c3RyKCkpOwotCQkJcmMgPSAtOTsKLQkJICAgIH0KLQkJfQotI2VuZGlmCS8qIE5PWEZFUiAqLwot CQlpZiAobGlzdGluZyAmJiByYyA+IC0xKQotCQkgIHByaW50ZigiKE9LKVxuIik7Ci0gICAgICAg ICAgICB9Ci0KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTcGVj aWFsIG9wdGlvbnMgKi8KLQotICAgICAgICAgICAgaW50IHByZXYsIHksIHggPSAwOyAgICAgICAg IC8qIFZhcmlhYmxlcyBuZWVkZWQgZm9yIHRoZW0gKi8KLSAgICAgICAgICAgIGludCBpLCB0Owot ICAgICAgICAgICAgY2hhciBpYnVmWzEwMF07Ci0gICAgICAgICAgICBjaGFyIG9idWZbMjAwXTsK LSAgICAgICAgICAgIEZJTEUgKiBpbiA9IE5VTEw7Ci0gICAgICAgICAgICBGSUxFICogb3V0ID0g TlVMTDsKLQotICAgICAgICAgICAgaWYgKChpbiA9IGZvcGVuKGxpbmUsInIiKSkgPT0gTlVMTCkg eyAvKiBPcGVuIGlucHV0IGZpbGUgKi8KLSAgICAgICAgICAgICAgICBpZiAobGlzdGluZykKLQkJ ICBwcmludGYoIihGQUlMRUQ6ICVzKVxuIixja19lcnJzdHIoKSk7Ci0JCWVsc2UgaWYgKCFub2xp c3QpCi0JCSAgcHJpbnRmKCI/JXMgLSAlcylcbiIsY2tfZXJyc3RyKCksbGluZSk7Ci0gICAgICAg ICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKHRhcmdldGlzZGlyKSB7ICAgICAgICAgIC8qIFRhcmdldCBpcyBk aXJlY3RvcnkgKi8KLSAgICAgICAgICAgICAgICBjaGFyICogYnVmID0gTlVMTDsgICAgICAvKiBz byBhcHBlbmQgdGhpcyBmaWxlbmFtZSB0byBpdCAqLwotICAgICAgICAgICAgICAgIHpzdHJpcChs aW5lLCZidWYpOwotICAgICAgICAgICAgICAgIHBbdGFyZ2V0bGVuXSA9IE5VTDsKLSAgICAgICAg ICAgICAgICBpZiAoYnVmKQotICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHAsYnVmLFRNUEJV RlNJWik7Ci0gICAgICAgICAgICB9Ci0jaWZkZWYgT1MyT1JVTklYCi0gICAgICAgICAgICBpZiAo emNtcGZuKGxpbmUscCkpIHsgICAgICAgLyogSW5wdXQgYW5kIG91dHB1dCBhcmUgc2FtZSBmaWxl PyAqLwotICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nKQotICAgICAgICAgICAgICAgICAgcHJp bnRmKCIoRkFJTEVEOiBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGlkZW50aWNhbClcbiIpOwotCQll bHNlIGlmICghbm9saXN0KQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/U291cmNlIGFuZCBk ZXN0aW5hdGlvbiBpZGVudGljYWwgLSAlc1xuIiwgbGluZSk7IAotICAgICAgICAgICAgICAgIHJj ID0gMDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAv KiBPUzJPUlVOSVggKi8KLSAgICAgICAgICAgIGlmICgob3V0ID0gZm9wZW4ocCwgKGFwcGVuZGlu ZyA/ICJhIiA6ICJ3IikpKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZmNsb3NlKGluKTsK LSAgICAgICAgICAgICAgICBpZiAobGlzdGluZykKLQkJICBwcmludGYoIihGQUlMRUQ6ICVzIC0g JXMpXG4iLHAsY2tfZXJyc3RyKCkpOwotCQllbHNlIGlmICghbm9saXN0KQotCQkgIHByaW50Zigi PyVzIC0gJXNcbiIscCxja19lcnJzdHIoKSk7Ci0gICAgICAgICAgICAgICAgcmMgPSAwOwotICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotI2lmbmRlZiBOT1NQTAotICAg ICAgICAgICAgaWYgKHRvYjY0KSB7ICAgICAgICAgICAgICAgIC8qIENvbnZlcnRpbmcgdG8gQmFz ZS02NCAqLwotCi0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiQ09QWSB0b2I2NCIsbGluZSww KTsKLQotICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgIC8qIExvb3AuLi4g Ki8KLSAgICAgICAgICAgICAgICAgICAgcHJldiA9IHg7Ci0gICAgICAgICAgICAgICAgICAgIGlm ICgoeCA9IGZyZWFkKGlidWYsMSw1NCxpbikpIDwgMSkgeyAvKiBFT0YgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChsaXN0aW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIihPSylcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgJSAzKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBpZiAobGlzdGluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCIoRkFJTEVEOiBQaGFzZSBlcnJvciBhdCAlZClcbiIscHJldik7Ci0JCQllbHNlIGlm ICghbm9saXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9QaGFzZSBlcnJv ciBhdCAlZFxuIixwcmV2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgIGlmIChzd2FwcGluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHggJiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIihGQUlMRUQ6IFN3YXAgZXJyb3IpXG4i KTsKLQkJCSAgICBlbHNlIGlmICghbm9saXN0KQotCQkJICAgICAgcHJpbnRmKCI/U3dhcCBlcnJv clxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHg7IGkrPTIpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ID0gaWJ1ZltpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpYnVmW2ldID0gaWJ1ZltpKzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlidWZb aSsxXSA9IHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gYjh0b2I2NChpYnVmLHgsb2J1ZiwxODAp KSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nKQotICAgICAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIihGQUlMRUQ6IEVuY29kaW5nIGVycm9yKVxuIik7Ci0J CQllbHNlIGlmICghbm9saXN0KQotCQkJICBwcmludGYoIj9FbmNvZGluZyBlcnJvclxuIik7Ci0g ICAgICAgICAgICAgICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBmcHJpbnRm KG91dCwiJXNcbiIsb2J1Zik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB9IGVs c2UgaWYgKGZyb21iNjQpIHsgICAgICAgLyogQ29udmVydGluZyBmcm9tIEJhc2UgNjQgKi8KLQot ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIkNPUFkgZnJvbWI2NCIsbGluZSwwKTsKLQotICAg ICAgICAgICAgICAgIGlmICgob3V0ID0gZm9wZW4ocCxhcHBlbmRpbmcgPyAiYSIgOiAidyIpKSA9 PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZjbG9zZShpbik7Ci0gICAgICAgICAgICAg ICAgICAgIGlmIChsaXN0aW5nKQotCQkgICAgICBwcmludGYoIihGQUlMRUQ6ICVzIC0gJXMpXG4i LHAsY2tfZXJyc3RyKCkpOwotCQkgICAgZWxzZSBpZiAoIW5vbGlzdCkKLQkJICAgICAgcHJpbnRm KCI/JXMgLSAlc1xuIixwLGNrX2VycnN0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAw OwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgeCA9IDE7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHgpIHsKLSAgICAgICAg ICAgICAgICAgICAgeCA9IGZyZWFkKGlidWYsMSw4MCxpbik7Ci0gICAgICAgICAgICAgICAgICAg IGlmICgoeSA9IGI2NHRvYjgoaWJ1Zix4LG9idWYsODApKSA8IDApIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChsaXN0aW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo IihGQUlMRUQ6IERlY29kaW5nIGVycm9yKVxuIik7Ci0JCQllbHNlIGlmICghbm9saXN0KQotCQkJ ICBwcmludGYoIj9EZWNvZGluZyBlcnJvclxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy YyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoc3dhcHBpbmcpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGlmICh4ICYgMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChs aXN0aW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIoRkFJTEVEOiBT d2FwIGVycm9yKVxuIik7Ci0JCQkgICAgZWxzZSBpZiAoIW5vbGlzdCkKLQkJCSAgICAgIHByaW50 ZigiP1N3YXAgZXJyb3JcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB5OyBpKz0yKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IG9idWZbaV07Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgb2J1ZltpXSA9IG9idWZbaSsxXTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvYnVmW2krMV0gPSB0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5ID4gMCkgewotICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGZ3cml0ZShvYnVmLDEseSxvdXQpIDwgMSkgewotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCIoRkFJTEVEOiAlcyAtICVzKVxuIixwLGNrX2VycnN0cigpKTsKLQkJ CSAgICBlbHNlIGlmICghbm9saXN0KQotCQkJICAgICAgcHJpbnRmKCI/JXMgLSAlc1xuIixwLGNr X2VycnN0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IDA7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0g ZWxzZQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICAgICAgICAgIGlmIChzd2FwcGluZykgeyAg ICAgICAgICAgICAvKiBTd2FwcGluZyBieXRlcyAqLwotCi0gICAgICAgICAgICAgICAgQ0hBUiBj WzNdOwotICAgICAgICAgICAgICAgIGNbMl0gPSBOVUw7Ci0KLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJDT1BZIHN3YXBwaW5nIixsaW5lLDApOwotCi0gICAgICAgICAgICAgICAgd2hpbGUg KDEpIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IGZyZWFkKChjaGFyICopYywxLDIsaW4pOwot ICAgICAgICAgICAgICAgICAgICBpZiAoeCA8IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IGlmIChsaXN0aW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIihPSylcbiIp OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoeCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjWzFdID0gY1swXTsK LSAgICAgICAgICAgICAgICAgICAgICAgIGNbMF0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBwcmludGYoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIihXQVJOSU5HOiBPZGQg Ynl0ZSBjb3VudCkiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGlzdGluZykgcHJp bnRmKCJcbiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlm IChmcHJpbnRmKG91dCwiJWMlYyIsY1sxXSxjWzBdKSA9PSBFT0YpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChsaXN0aW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo IihGQUlMRUQ6ICVzIC0gJXMpXG4iLHAsY2tfZXJyc3RyKCkpOwotCQkJZWxzZSBpZiAoIW5vbGlz dCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/JXMgLSAlc1xuIixwLGNrX2Vy cnN0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg fQotCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGFwcGVuZGluZykgeyAgICAgLyogQXBwZW5kaW5n IHRvIHRhcmdldCBmaWxlICovCi0KLSAgICAgICAgICAgICAgICBjaGFyIGM7Ci0KLSAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJDT1BZIGFwcGVuZGluZyIsbGluZSwwKTsKLQotICAgICAgICAg ICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBmcmVhZCgmYywxLDEs aW4pOwotICAgICAgICAgICAgICAgICAgICBpZiAoeCA8IDEpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChsaXN0aW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIihP SylcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGZ3cml0ZSgmYywxLDEsb3V0KSA8IDEpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nKQotICAgICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoIihGQUlMRUQ6ICVzIC0gJXMpXG4iLHAsY2tfZXJyc3RyKCkpOwotCQkJ ZWxzZSBpZiAoIW5vbGlzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/JXMg LSAlc1xuIixwLGNrX2VycnN0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsK LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG91dCkgZmNs b3NlKG91dCk7Ci0gICAgICAgICAgICBpZiAoaW4pIGZjbG9zZShpbik7Ci0gICAgICAgIH0KLSNp ZmRlZiBWTVNPUlVOSVgKLSAgICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsKLSNlbmRpZiAvKiBW TVNPUlVOSVggKi8KLSAgICB9Ci0gICAgaWYgKHJjID4gLTEpIHN1Y2Nlc3MgPSByYzsKLSAgICBy ZXR1cm4ocmMpOwotfQotI2VuZGlmIC8qIFpDT1BZICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8K LQotI2lmbmRlZiBOT0NTRVRTCi0jaWZuZGVmIE5PVU5JQ09ERQotc3RhdGljIHN0cnVjdCBrZXl0 YWIgKiB4ZmNzdGFiID0gTlVMTDsJLyogRm9yIFJFTkFNRSAvQ09OVkVSVDogKi8KLXN0YXRpYyBj aGFyIGN2dGJ1ZmluW0NLTUFYUEFUSCs4XSA9IHsgTlVMLCBOVUwgfTsKLXN0YXRpYyBjaGFyIGN2 dGJ1Zm91dFtDS01BWFBBVEgrOF0gPSB7IE5VTCwgTlVMIH07Ci1zdGF0aWMgY2hhciAqIHBjdnRi dWZpbiA9IE5VTEw7Ci1zdGF0aWMgY2hhciAqIHBjdnRidWZvdXQgPSBOVUxMOwotCi1zdGF0aWMg aW50CQkJCS8qIElucHV0IGZ1bmN0aW9uIHhnbmJ5dGUoKSAqLwotY3Z0Zm5pbigpIHsKLSAgICBD SEFSIGM7Ci0gICAgYyA9ICpwY3Z0YnVmaW4rKzsKLSAgICByZXR1cm4oYyA/IGMgOiAtMSk7Ci19 Ci0KLV9QUk9UT1RZUChpbnQgY3Z0Zm5vdXQsKGNoYXIpKTsJCS8qIE91dHB1dCBmdW5jdGlvbiBm b3IgeHBuYnl0ZSgpICovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY3Z0Zm5vdXQoY2hhciBjKQot I2Vsc2UKLWN2dGZub3V0KGMpIGNoYXIgYzsKLSNlbmRpZgkvKiBDS19BTlNJQyAqLwotewotICAg IGlmIChwY3Z0YnVmb3V0IC0gY3Z0YnVmb3V0ID49IENLTUFYUEFUSCkKLSAgICAgIHJldHVybigt MSk7Ci0gICAgKnBjdnRidWZvdXQrKyA9IGM7Ci0gICAgKnBjdnRidWZvdXQgPSBOVUw7Ci0gICAg cmV0dXJuKDEpOwotfQotCi0vKiBDb252ZXJ0IGEgc3RyaW5nIGZyb20gYW55IGNoYXJzZXQgdG8g YW55IG90aGVyIGNoYXJzZXQgKi8KLQotY2hhciAqCi1jdnRzdHJpbmcocyxjc2luLGNzb3V0KSBj aGFyICogczsgaW50IGNzaW4sIGNzb3V0OyB7Ci0gICAgaW50IGM7Ci0gICAgZXh0ZXJuIENLX09G Rl9UIGZmYzsKLQotICAgIGNrc3RybmNweShjdnRidWZpbixzLENLTUFYUEFUSCk7CS8qIFB1dCBp dCBpbiBhIHB1YmxpYyBwbGFjZSAqLwotICAgIHBjdnRidWZpbiA9IGN2dGJ1ZmluOwkJLyogd2l0 aCBwdWJsaWMgcG9pbnRlcnMgKi8KLSAgICBwY3Z0YnVmb3V0ID0gY3Z0YnVmb3V0OwotICAgICpw Y3Z0YnVmb3V0ID0gTlVMOwotCi0gICAgaWYgKGNzaW4gPT0gY3NvdXQpCQkJLyogSWYgdGhlIHR3 byBzZXRzIGFyZSB0aGUgc2FtZSAqLwotICAgICAgcmV0dXJuKChjaGFyICopY3Z0YnVmaW4pOwkJ LyogZG9uJ3QgYm90aGVyIGNvbnZlcnRpbmcgKi8KLQotICAgIGluaXR4bGF0ZShjc2luLGNzb3V0 KTsJCS8qIEluaXRpYWxpemUgdGhlIHRyYW5zbGF0b3IgKi8KLQotICAgIHdoaWxlICgoYyA9IHhn bmJ5dGUoRkNfVUNTMixjc2luLGN2dGZuaW4pKSA+IC0xKSB7IC8qIExvb3AgdGhydSBzdHJpbmcg Ki8KLQlpZiAoeHBuYnl0ZShjLFRDX1VDUzIsY3NvdXQsY3Z0Zm5vdXQpIDwgMCkgewotCSAgICBm ZmMgPSAoQ0tfT0ZGX1QpMDsKLQkgICAgcmV0dXJuKCIiKTsKLQl9Ci0gICAgfQotICAgIC8qIGZm YyBpcyB0b3VjaGVkIGJ5IHhnbmJ5dGUoKSBidXQgdGhpcyBpcyBub3QgZmlsZSB0cmFuc2ZlciAq LwotICAgIC8qIHNvIHdlIGhhdmUgdG8gdW5kbyBpdCAqLwotICAgIGZmYyA9IChDS19PRkZfVCkw OwotICAgIHJldHVybigoY2hhciAqKWN2dGJ1Zm91dCk7Ci19Ci0jZW5kaWYgLyogTk9VTklDT0RF ICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZuZGVmIE5PUkVOQU1FCi0jaWZuZGVmIE5P RlJJTExTCi0jaWZkZWYgWlJFTkFNRQotCi0vKiBUaGUgUkVOQU1FIGNvbW1hbmQgLSBleHBhbmRl ZCBhbmQgaW1wcm92ZWQgaW4gOC4wLjIxMiBBcHJpbCAyMDA2ICovCi0KLXN0YXRpYyBjaGFyICog cmVuX3N1Yls0XSA9IHsgTlVMTCxOVUxMLE5VTEwsTlVMTCB9OyAvKiBGb3IgUkVOQU1FIC9SRVBM QUNFICovCi0KLWludCByZW5fbGlzdCA9IDA7CQkgICAgICAgIC8qIERlZmF1bHQgbGlzdGluZyBh Y3Rpb24gZm9yIFJFTkFNRSAqLwotaW50IHJlbl9jb2xsID0gUkVOWF9PVldSOwkJLyogRGVmYXVs dCBjb2xsaXNpb24gYWN0aW9uICovCi0KLWludAotc2hvcmVuYW1lKCkgewotICAgIGNoYXIgKiBz OwotICAgIHN3aXRjaCAocmVuX2NvbGwpIHsKLSAgICAgIGNhc2UgUkVOWF9GQUlMOiBzID0gImZh aWwiOyBicmVhazsKLSAgICAgIGNhc2UgUkVOWF9PVldSOiBzID0gIm92ZXJ3cml0ZSI7IGJyZWFr OwotICAgICAgY2FzZSBSRU5YX1NLSVA6IHMgPSAicHJvY2VlZCI7IGJyZWFrOwotICAgIH0KLSAg ICBwcmludGYoIiByZW5hbWUgY29sbGlzaW9uOiAlc1xuIixzKTsKLSAgICBwcmludGYoIiByZW5h bWUgbGlzdDogICAgICAlc1xuIixzaG93b2ZmKHJlbl9saXN0KSk7Ci0gICAgcmV0dXJuKDEpOwot fQotCi1pbnQKLXNldHJlbmFtZSgpIHsJCQkJLyogUGFyc2UgU0VUIFJFTkFNRSBvcHRpb25zICov Ci0gICAgaW50IHgsIHk7Ci0gICAgaWYgKCh4ID0gY21rZXkocmVuYW1zZXQsbnJlbmFtc2V0LCIi LCIiLCB4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICBzd2l0Y2ggKHgpIHsK LSAgICAgIGNhc2UgUkVOX09WVzoJCQkvKiBDT0xMSVNJT04gKi8KLQlpZiAoKHggPSBjbWtleShy X2NvbGxpc2lvbixucl9jb2xsaXNpb24sIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJu KHgpOwotCWlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLQkgIHJldHVybih5KTsKLQlyZW5fY29sbCA9 IHg7Ci0JYnJlYWs7Ci0gICAgICBjYXNlIERFTF9MSVM6CQkJLyogTElTVCAqLwotCXJldHVybihz ZXRvbigmcmVuX2xpc3QpKTsKLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLX0KLQot LyogUmV2ZXJzZSBhIHN0cmluZyAtIEFzc3VtZXMgYSBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIgc2V0 ICovCi0KLWludAotZ25pcnRzKHMxLCBzMiwgbGVuKSBjaGFyICogczEsICogczI7IGludCBsZW47 IHsKLSAgICBpbnQgbiwgbSA9IDA7Ci0gICAgaWYgKCFzMSkJCQkJLyogTnVsbCBzb3VyY2UgcG9p bnRlciwgZmFpbCAqLwotICAgICAgcmV0dXJuKDApOwotICAgIG4gPSAoaW50KSBzdHJsZW4oczEp OwotICAgIGlmIChuID4gbGVuLTEpCQkJLyogU291cmNlIGxvbmdlciB0aGFuIGRlc3QsIGZhaWwg Ki8KLSAgICAgIHJldHVybigwKTsKLSAgICBzMltuLS1dID0gTlVMOwkJCS8qIERlcG9zaXQgbnVs bCBieXRlIGF0IGVuZCBvZiBkZXN0ICovCi0gICAgZm9yICg7IG4gPj0gMDsgbi0tKSB7CQkvKiBD b3B5IHRoZSByZXN0IGJhY2t3YXJkcyAqLwotCSpzMisrID0gczFbbl07Ci0JbSsrOwotICAgIH0K LSAgICByZXR1cm4obSk7Ci19Ci0KLS8qCi0gIHIgZSBuIGEgbSBlIG8gbiBlCi0KLSAgV29ya2Vy IGZ1bmN0aW9uIHRvIHJlbmFtZSBvbmUgZmlsZSBmb3IgZG9yZW5hbSgpIChiZWxvdykuCi0gICAg b2xkICAgICAgICA9IG5hbWUgb2YgZmlsZSBvciBkaXJlY3RvcnkgdG8gYmUgcmVuYW1lZAotICAg IG5ldyAgICAgICAgPSBuZXcgbmFtZSAobm90IHJlcXVpcmVkIGZvciAvVVBQRVIsIC9MT1dFUiwg YW5kIC9SRVBMQUNFKQotICAgIHJlcGxhY2luZyAgPSAxIGlmIGRvaW5nIHN0cmluZyByZXBsYWNl bWVudCBvbiB0aGUgbmFtZSAgCi0gICAgY2FzaW5nICAgICA9IDEgaWYgY29udmVydGluZyBuYW1l IHRvIGxvd2VyY2FzZSwgMiBpZiB0byB1cHBlcmNhc2UKLSAgICBhbGwgICAgICAgID0gaWYgZG9p bmcgY2FzZSBjb252ZXJzaW9uIG9uIGFsbCBuYW1lcywgbm90IGp1c3QgbW9ub2Nhc2Ugb25lcwot ICAgIGNvbnZlcnRpbmcgPSAxIGlmIGNvbnZlcnRpbmcgY2hhcmFjdGVyIHNldHMKLSAgICBjc2V0 MSAgICAgID0gY2hhcmFjdGVyIHNldCB0byBjb252ZXJ0IGZyb20gKEZpbGUgQ2hhcmFjdGVyIFNl dCBpbmRleCkKLSAgICBjc2V0MiAgICAgID0gY2hhcmFjdGVyIHNldCB0byBjb252ZXJ0IHRvIChk aXR0bywgc2VlIGNrP3hsYS5oKQotICAgIGxpc3RpbmcgICAgPSAxIHRvIHNob3cgcmVzdWx0cyBv ZiByZW5hbWUKLSAgICBub2xpc3QgICAgID0gMSB0byBiZSBjb21wbGV0ZWx5IHNpbGVudCAoZG9u J3QgZXZlbiBwcmludCBlcnJvciBtZXNzYWdlcykKLSAgICBvcCAgICAgICAgID0gMSBtZWFucyBz aW11bGF0ZSwgMiBtZWFucyBjaGVjayBmb3IgY29sbGlzaW9uLCAwIG1lYW5zIHJlbmFtZQotICAg IHNpemUgICAgICAgPSBsZW5ndGggb2YgcmVzdWx0IGJ1ZmZlci4KLSAgICBjb2xsaXNpb24gID0g YWN0aW9uIHRvIHRha2UgaWYgZGVzdGluYXRpb24gZmlsZSBhbHJlYWR5IGV4aXN0czoKLSAgICAg ICAgICAgICAgICAgMCA9IGZhaWwKLSAgICAgICAgICAgICAgICAgMSA9IG92ZXJ3cml0ZSBhbmQg c3VjY2VlZAotICAgICAgICAgICAgICAgICAyID0gc2tpcCBhbmQgc3VjY2VlZAotICBSZXR1cm5z OgotICAgICAwOiBvbiBmYWlsdXJlIHRvIHJlbmFtZSBvciB3aGVuIGEgZm9yYmlkZGVuIGNvbGxp c2lvbiB3b3VsZCBoYXZlIG9jY3VycmVkLgotICAgICAxOiBvbiBzdWNjZXNzIChmaWxlIHdhcyBy ZW5hbWVkIG9yIGRpZCBub3QgbmVlZCB0byBiZSByZW5hbWVkKS4KLSAgTm90ZToKLSAgICAgSWYg dGhpcyBjb2RlIGlzIGV2ZXIgYnVpbHQgb24gYW55IHBsYXRmb3JtIHRoYXQgaXMgbm90IFVuaXgs IFdpbmRvd3MsCi0gICAgIFZNUywgb3IgT1MvMiwgdGhpcyByb3V0aW5lIG1pZ2h0IG5lZWQgc29t ZSBhZGp1c3RtZW50LgotKi8KLQotLyogT3Bjb2RlcyBmb3Igb3AuLi4gKi8KLSNkZWZpbmUgUkVO X09QX1NJTSAxCQkJLyogU2ltdWxhdGUgKi8KLSNkZWZpbmUgUkVOX09QX0NISyAyCQkJLyogQ2hl Y2sgZm9yIGNvbGxpc2lvbnMgKi8KLQotc3RhdGljIGludAotcmVuYW1lb25lKG9sZCxuZXcsCi0J ICByZXBsYWNpbmcsY2FzaW5nLGFsbCxjb252ZXJ0aW5nLGNzZXQxLGNzZXQyLAotCSAgbGlzdGlu Zyxub2xpc3Qsb3Asc2l6ZSxjb2xsaXNpb24pCi0gICAgY2hhciAqIG9sZCwgKiBuZXc7Ci0gICAg aW50IHJlcGxhY2luZyxjYXNpbmcsYWxsLGNvbnZlcnRpbmcsY3NldDEsY3NldDIsCi0gICAgbGlz dGluZyxub2xpc3Qsb3Asc2l6ZSxjb2xsaXNpb247Ci17Ci0gICAgY2hhciBidWZbQ0tNQVhQQVRI XTsJCS8qIFRlbXBvcmFyeSBmaWxlbmFtZSBidWZmZXIgKi8KLSAgICBjaGFyIG91dFtDS01BWFBB VEhdOwkJLyogQnVmZmVyIGZvciBuZXcgbmFtZSAqLwotICAgIGNoYXIgZGlyW0NLTUFYUEFUSF07 CQkvKiBEZXN0aW5hdGlvbiBkaXJlY3RvcnkgKi8KLSAgICBjaGFyIHBhdFtDS01BWFBBVEhdOwkJ LyogUGF0aCBzZWdtZW50IG9uIG9sZCBmaWxlbmFtZSAqLwotCi0gICAgY2hhciAqIGRlc3RkaXI7 CQkJLyogRGVzdGluYXRpb24gZGlyZWN0b3J5LCBpZiBhbnkgKi8KLSAgICBjaGFyICogc3JjcGF0 aDsJCQkvKiBTb3VyY2UgcGF0aCwgaWYgYW55ICovCi0gICAgaW50IHJjID0gMSwgZmxhZyA9IDAs IHNraXAgPSAwOwkvKiBDb250cm9sICovCi0gICAgaW50IGhvbm9yY2FzZSA9IDAsIHJlcGxhY2Vk ID0gMDsKLSAgICBpbnQgYW5jaG9yID0gMDsJCQkvKiAxID0gYmVnaW5uaW5nLCAyID0gZW5kICov Ci0gICAgaW50IG9jY3VyID0gMDsJCQkvKiBPY2N1cnJlbmNlICovCi0gICAgaW50IG1pbnVzID0g MDsJCQkvKiBPY2N1cnJlbmNlIGlzIG5lZ2F0aXZlICovCi0gICAgaW50IGFsbGJ1dCA9IDA7CQkJ LyogT2NjdXJyZW5jZSBpcyAiYWxsIGJ1dCIgKi8KLSAgICBpbnQgYXJnMmlzZmlsZSA9IDA7CQkJ LyogQXJnMiAoIm5ldyIpIGlzIGEgZmlsZW5hbWUgKi8KLSAgICAKLSAgICBkZWJ1ZyhGMTEwLCJS RU5BTUVPTkUgb2xkIixvbGQsMCk7Ci0gICAgZGVidWcoRjExMCwiUkVOQU1FT05FIG5ldyIsbmV3 LDApOwotICAgIGRlYnVnKEYxMTAsIlJFTkFNRU9ORSByZW5fc3ViWzBdIixyZW5fc3ViWzBdLDAp OwotICAgIGRlYnVnKEYxMTAsIlJFTkFNRU9ORSByZW5fc3ViWzFdIixyZW5fc3ViWzFdLDApOwot ICAgIGRlYnVnKEYxMTAsIlJFTkFNRU9ORSByZW5fc3ViWzJdIixyZW5fc3ViWzJdLDApOwotCi0g ICAgaWYgKG9wID09IFJFTl9PUF9TSU0gJiYgIW5vbGlzdCkJLyogRm9yIGNvbnZlbmllbmNlICov Ci0gICAgICBsaXN0aW5nID0gMTsKLSNpZm5kZWYgTk9TUEwKLSAgICBob25vcmNhc2UgPSBpbnBj YXNbY21kbHZsXTsJCS8qIEluaGVyaXQgU0VUIENBU0UgdmFsdWUgKi8KLSNlbHNlCi0jaWZkZWYg VU5JWAotICAgIGhvbm9yY2FzZSA9IDE7Ci0jZWxzZQotICAgIGhvbm9yY2FzZSA9IDA7Ci0jZW5k aWYJLyogVU5JWCAqLwotI2VuZGlmCS8qIE5PU1BMICovCi0KLSAgICBpZiAoIW9sZCkgb2xkID0g IiI7CQkJLyogSW4gY2FzZSBvZiBiYWQgYXJncyAqLwotICAgIGlmICghbmV3KSBuZXcgPSAiIjsK LSAgICBpZiAoISpvbGQpIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgY2tzdHJuY3B5KG91dCxu ZXcsQ0tNQVhQQVRIKTsJLyogU28gd2UgZG9uJ3Qgd3JpdGUgaW50byAqLwotICAgIG5ldyA9IG91 dDsJCQkJLyogb3VyIGFyZ3VtZW50Li4uICovCi0gICAgc2l6ZSA9IENLTUFYUEFUSDsKLQotICAg IHBhdFswXSA9IE5VTDsJCQkvKiBBc3N1bWUgbm8gcGF0aCBpbiBzb3VyY2UgZmlsZS4uICovCi0g ICAgc3JjcGF0aCA9IHBhdDsKLSAgICB7Ci0JaW50IG47CQkJCS8qIElmIHRoZSBvbGQgbmFtZSBp bmNsdWRlcyBhIHBhdGggKi8KLQluID0gKGludClzdHJsZW4ob2xkKSAtIDE7CS8qIHB1dCBpdCBp biBhIHNlcGFyYXRlIHBsYWNlLiAgICAgKi8KLQlmb3IgKDsgbiA+PSAwOyBuLS0pIHsJCS8qIFdl IGFyZSByZW5hbWluZyB0aGUgZmlsZSBvbmx5LiAgKi8KLQkgICAgaWYgKElTRElSU0VQKG9sZFtu XSkpIHsKLQkJY2tzdHJuY3B5KHBhdCxvbGQsQ0tNQVhQQVRIKTsKLQkJcGF0W24rMV0gPSBOVUw7 Ci0JCW9sZCA9IG9sZCtuKzE7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotICAgIH0KLSAgICBkZWJ1 ZyhGMTEwLCJSRU5BTUVPTkUgb2xkIDIiLG9sZCwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJSRU5BTUVP TkUgcGF0IDIiLHBhdCwwKTsKLQotICAgIGRpclswXSA9IE5VTDsJCQkvKiBBc3N1bWUgbm8gZGVz dGluYXRpb24gZGlyZWN0b3J5ICovCi0gICAgZGVzdGRpciA9IGRpcjsKLSAgICBpZiAoKm5ldykg ewkJCQkvKiBJZiBBcmcyIGdpdmVuICovCi0JaWYgKGlzZGlyKG5ldykpIHsJCS8qIElmIGl0J3Mg YSBkaXJlY3RvcnkgKi8KLQkgICAgY2tzdHJuY3B5KGRpcixuZXcsQ0tNQVhQQVRIKTsgLyogcHV0 IGl0IGhlcmUgKi8KLQl9IGVsc2UgewkJCS8qIG90aGVyd2lzZSAqLwotCSAgICBhcmcyaXNmaWxl Kys7CQkvKiBmbGFnIHRoYXQgaXQncyBhIGZpbGVuYW1lICovCi0JfSAgICAKLSAgICB9Ci0gICAg aWYgKCFjYXNpbmcgJiYgIXJlcGxhY2luZyAmJiAhY29udmVydGluZykgewotCWlmICghKm5ldykK LQkgIHJldHVybihzdWNjZXNzID0gMCk7Ci0JaWYgKCFhcmcyaXNmaWxlKSB7CQkvKiBEZXN0aW5h dGlvbiBpcyBhIGRpcmVjdG9yeT8gKi8KLQkgICAgaWYgKCFpc2RpcihvbGQpKSB7CQkvKiBhbmQg c291cmNlIGlzIG5vdD8gKi8KLSNpZm5kZWYgVk1TCi0JCWludCBuLCB4ID0gMDsJCS8qIENvbmNh dGVuYXRlIHRoZW0gKi8KLQkJaWYgKChuID0gc3RybGVuKG5ldykpID4gMCkgLyogc28gd2UgY2Fu IGNoZWNrIGZvciAqLwotCQkgIGlmIChJU0RJUlNFUChuZXdbbi0xXSkpICAvKiBjb2xsaXNpb25z LiAqLwotCQkgICAgeCsrOwotCQlja21ha21zZyhidWYsc2l6ZSxuZXcseCA/ICIiIDogIi8iLCBv bGQsICIiKTsKLSNlbHNlCi0JCWNrbWFrbXNnKGJ1ZixzaXplLG5ldywgb2xkLCBOVUxMLCBOVUxM KTsKLSNlbmRpZgkvKiBWTVMgKi8KLQkJZGVidWcoRjExMCwiUkVOQU1FT05FIG5ldyBuZXciLG5l dywwKTsJCQotCQluZXcgPSBidWY7Ci0JCXNpemUgPSBDS01BWFBBVEg7Ci0JICAgIH0KLQl9Ci0g ICAgfSBlbHNlIGlmICgqbmV3KSB7CQkJLyogRGlyZWN0b3J5IHRvIG1vdmUgZmlsZSB0byAqLwot CWludCBuLCB4ID0gMDsJCQkvKiBhZnRlciBjaGFuZ2luZyBpdHMgbmFtZSAqLwotCWlmICghaXNk aXIobmV3KSkKLQkgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jaWZuZGVmIFZNUwotCWlmICgobiA9 IHN0cmxlbihuZXcpKSA+IDApCi0JICBpZiAoSVNESVJTRVAobmV3W24tMV0pKQotCSAgICB4Kys7 Ci0JY2ttYWttc2coZGlyLENLTUFYUEFUSCxuZXcseCA/ICIiIDogIi8iLCAiIiwgIiIpOwotI2Vs c2UKLQlja3N0cm5jcHkoZGlyLG5ldyxDS01BWFBBVEgpOwotI2VuZGlmCS8qIFZNUyAqLwotICAg IH0KLQotI2lmbmRlZiBOT0NTRVRTCi0jaWZuZGVmIE5PVU5JQ09ERQotICAgIGlmIChjb252ZXJ0 aW5nKSB7Ci0JbmV3ID0gY3Z0c3RyaW5nKG9sZCxjc2V0MSxjc2V0Mik7Ci0gICAgfQotI2VuZGlm CS8qIE5PVU5JQ09ERSAqLwotI2VuZGlmCS8qIE5PQ1NFVFMgKi8KLQotICAgIGlmIChyZXBsYWNp bmcpIHsJCQkvKiBSZXBsYWNpbmcgc3RyaW5ncyAqLwotCWludCB0b2RvID0gMDsKLQlpbnQgbGVu MCwgbGVuMSwgbGVuMjsKLQljaGFyIGMsICpwLCAqcywgKmJwWzNdOwotCi0JYnBbMF0gPSBvbGQ7 CQkJLyogT3JpZ2luYWwgbmFtZSAqLwotCWJwWzFdID0gcmVuX3N1YlswXTsJCS8qIFN0cmluZyB0 byBiZSByZXBsYWNlZCAqLwotCWJwWzJdID0gcmVuX3N1YlsxXTsJCS8qIFdoYXQgdG8gcmVwbGFj ZSBpdCB3aXRoICovCi0JaWYgKCFicFsyXSkgYnBbMl0gPSAiIjsKLQotCWxlbjAgPSAoaW50KXN0 cmxlbihicFswXSk7CS8qIGxlbmd0aCBvZiBvcmlnaW5hbCBmaWxlbmFtZSAqLwotCWxlbjEgPSAo aW50KXN0cmxlbihicFsxXSk7CS8qIGxlbmd0aCBvZiB0YXJnZXQgc3Vic3RyaW5nICovCi0JbGVu MiA9IChpbnQpc3RybGVuKGJwWzJdKTsJLyogTGVuZ3RoIG9mIHJlcGxhY2VtZW50IHN0cmluZyAq LwotCi0JaWYgKHJlbl9zdWJbMl0pIHsJCS8qIE9wdGlvbmFsIG9wdGlvbnMgKi8KLQkgICAgcCA9 IHJlbl9zdWJbMl07Ci0JICAgIHdoaWxlICgoYyA9ICpwKyspKSB7Ci0JCXN3aXRjaCAoYykgewot CQkgIGNhc2UgJ14nOgotCQkgICAgYW5jaG9yID0gMTsgb2NjdXIgPSAwOyBtaW51cyA9IDA7IGFs bGJ1dCA9IDA7IGJyZWFrOwotCQkgIGNhc2UgJyQnOgotCQkgICAgYW5jaG9yID0gMjsgb2NjdXIg PSAwOyBtaW51cyA9IDA7IGFsbGJ1dCA9IDA7IGJyZWFrOwotCQkgIGNhc2UgJ0EnOiBob25vcmNh c2UgPSAxOyBtaW51cyA9IDA7IGFsbGJ1dCA9IDA7IGJyZWFrOwotCQkgIGNhc2UgJ2EnOiBob25v cmNhc2UgPSAwOyBtaW51cyA9IDA7IGFsbGJ1dCA9IDA7IGJyZWFrOwotCQkgIGNhc2UgJy0nOiBt aW51cyA9IDE7IGJyZWFrOwotCQkgIGNhc2UgJ34nOiBhbGxidXQgPSAxOyBicmVhazsKLQkJICBk ZWZhdWx0OgotCQkgICAgaWYgKGlzZGlnaXQoYykpIHsKLQkJCW9jY3VyID0gYyAtICcwJzsKLQkJ CWlmIChtaW51cykgb2NjdXIgPSAwIC0gb2NjdXI7Ci0JCQlhbmNob3IgPSAwOwotCQkgICAgfQot CQkgICAgbWludXMgPSAwOwotCQl9Ci0JICAgIH0KLQl9Ci0JaWYgKGFuY2hvcikgewkJCS8qIEFu Y2hvcmVkIHJlcGxhY2VtZW50Li4uICovCi0JICAgIHkgPSBsZW4wIC0gbGVuMTsKLQkgICAgaWYg KHkgPiAwKSB7Ci0JCWludCB4OwotCQlzd2l0Y2ggKGFuY2hvcikgewotCQkgIGNhc2UgMToJCS8q IEFuY2hvcmVkIGF0IGJlZ2lubmluZyAqLwotCQkgICAgaWYgKCFja3N0cmNtcChicFsxXSxicFsw XSxsZW4xLGhvbm9yY2FzZSkpIHsKLQkJCXggPSBja3N0cm5jcHkobmV3LGJwWzJdLHNpemUpOwot CQkJKFZPSUQpIGNrc3RybmNweShuZXcreCxicFswXStsZW4xLHNpemUteCk7Ci0JCQlyZXBsYWNl ZCA9IDE7Ci0JCSAgICB9Ci0JCSAgICBicmVhazsKLQkJICBjYXNlIDI6CQkvKiBBbmNob3JlZCBh dCBlbmQgKi8KLQkJICAgIGlmICghY2tzdHJjbXAoYnBbMV0sYnBbMF0reSxsZW4xLGhvbm9yY2Fz ZSkpIHsKLQkJCXggPSBja3N0cm5jcHkobmV3LGJwWzBdLHkrMSk7Ci0JCQkoVk9JRCkgY2tzdHJu Y3B5KG5ldyt5LGJwWzJdLHNpemUteCk7Ci0JCQlyZXBsYWNlZCA9IDE7Ci0JCSAgICB9Ci0JCSAg ICBicmVhazsKLQkJfQotCSAgICB9Ci0JICAgIGlmICghcmVwbGFjZWQpIHsKLQkJY2tzdHJuY3B5 KG5ldyxvbGQsc2l6ZSk7IC8qIEtlZXAgb2xkIG5hbWUgKi8KLQkJcmVwbGFjZWQgPSAxOwotCSAg ICB9Ci0JfSBlbHNlIHsJCQkvKiBSZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyAqLwotCSAgICBpbnQg aiwgbiA9IDA7CQkvKiBvciBhIHBhcnRpY3VsYXIgb2NjdXJyZW5jZSAqLwotCSAgICBjaGFyIGM7 Ci0JICAgIGludCB4ID0gMDsKLQkgICAgY2hhciAqIHMwID0gTlVMTCwgKiBzMSA9IE5VTEwsICog czIgPSBOVUxMOwotCSAgICBwID0gbmV3OwkJCS8qIFBvaW50ZXIgdG8gbmV3IG5hbWUgKi8KLQot CSAgICBpZiAob2NjdXIgPCAwKSB7CQkvKiBudGggb2NjdXJyZW5jZSBmcm9tIHRoZSByaWdodCAq LwotCQlvY2N1ciA9IDAgLSBvY2N1cjsKLQkJczAgPSAoY2hhciAqKW1hbGxvYyhsZW4wKzEpOyAv KiBSZXZlcnNlIG9yaWdpbmFsIHN0cmluZyAqLwotCQlpZiAoczApIHsKLQkJICAgIChWT0lEKSBn bmlydHMoYnBbMF0sczAsbGVuMCsxKTsKLQkJICAgIGJwWzBdID0gczA7Ci0JCX0gZWxzZSByZXR1 cm4oMCk7IAotCQlzMSA9IChjaGFyICopbWFsbG9jKGxlbjErMSk7IC8qIFJldmVyc2UgdGFyZ2V0 IHN0cmluZyAqLwotCQlpZiAoczEpIHsKLQkJICAgIChWT0lEKSBnbmlydHMoYnBbMV0sczEsbGVu MSsxKTsKLQkJICAgIGJwWzFdID0gczE7Ci0JCX0gZWxzZSByZXR1cm4oMCk7IAotCQlzMiA9IChj aGFyICopbWFsbG9jKGxlbjIrMSk7IC8qIFJldmVyc2UgcmVwbGFjZW1lbnQgc3RyaW5nICovCi0J CWlmIChzMikgewotCQkgICAgKFZPSUQpIGduaXJ0cyhicFsyXSxzMixsZW4yKzEpOwotCQkgICAg YnBbMl0gPSBzMjsKLQkJfSBlbHNlIHJldHVybigwKTsgCi0JCWRlYnVnKEYxMTEsIlJFTkFNRU9O RSBzMCIsczAsbGVuMCk7Ci0JCWRlYnVnKEYxMTEsIlJFTkFNRU9ORSBzMSIsczEsbGVuMSk7Ci0J CWRlYnVnKEYxMTEsIlJFTkFNRU9ORSBzMiIsczIsbGVuMik7Ci0JICAgIH0KLQkgICAgcyA9IGJw WzBdOwkJCS8qIFBvaW50ZXIgdG8gb2xkIG5hbWUgKi8KLQkgICAgcCA9IG5ldzsJCQkvKiBQb2lu dGVyIHRvIG5ldyBuYW1lICovCi0JICAgIGogPSBsZW4wIC0gbGVuMSArIDE7CS8qIEhvdyBtdWNo IHRvIHNjYW4gKi8KLQkgICAgd2hpbGUgKGotLSA+IDApIHsJCS8qIEZvciBlYWNoIGNoYXJhY3Rl ci4uLiAqLwotCQlpZiAoIWNrc3RyY21wKGJwWzFdLHMsbGVuMSxob25vcmNhc2UpKSB7IC8qIE1h dGNoPyAqLwotCQkgICAgbisrOwkJLyogT2NjdXJyZW5jZSBjb3VudGVyICovCi0JCSAgICB0b2Rv ID0gKG9jY3VyID09IDApIHx8Ci0JCQkoIWFsbGJ1dCAmJiBuID09IG9jY3VyKSB8fAotCQkJKGFs bGJ1dCAmJiBuICE9IG9jY3VyKTsKLQkJICAgIGlmICghdG9kbykgewkvKiBEZXNpcmVkIG9jY3Vy cmVuY2U/ICovCi0JCQlzaXplIC09IGNrc3RybmNweShwLGJwWzFdLHNpemUpOyAvKiBOby4uLiAq LwotCQkJcCArPSBsZW4xOwkvKiBDb3B5IHRhcmdldCBzdHJpbmcgKi8KLQkJCXMgKz0gbGVuMTsJ LyogaW5zdGVhZCBvZiByZXBsYWNlbWVudCBzdHJpbmcgKi8KLQkJCWNvbnRpbnVlOwotCQkgICAg fQotCQkgICAgaWYgKGxlbjIpIHsJCS8qIElmIHJlcGxhY2VtZW50IHN0cmluZyBub3QgZW1wdHkg Ki8KLQkJCXNpemUgLT0gY2tzdHJuY3B5KHAsYnBbMl0sc2l6ZSk7IC8qIENvcHkgaXQgKi8KLQkJ CXAgKz0gbGVuMjsKLQkJICAgIH0KLQkJICAgIHMgKz0gbGVuMTsJCS8qIEFkdmFuY2Ugc291cmNl IHBvc2l0aW9uICovCi0JCX0gZWxzZSB7CQkvKiBObyBtYXRjaCAqLwotCQkgICAgKnArKyA9ICpz Kys7CS8qIGp1c3QgY29weSB0aGlzIGNoYXJhY3RlciAqLwotCQkgICAgc2l6ZS0tOwotCQl9Ci0J ICAgIH0KLQkgICAgd2hpbGUgKCgqcCsrID0gKnMrKykpOwkvKiBEb25lIGNvcHkgdGhlIHJlc3Qg Ki8KLQkgICAgcmVwbGFjZWQgPSAxOwkJLyogUmVtZW1iZXIgd2UgY2hhbmdlZCB0aGUgbmFtZSAq LwotCSAgICBpZiAoczApIHsJCQkvKiBXZXJlIHdlIGRvaW5nICJhbGwgYnV0Ij8gKi8KLQkJZGVi dWcoRjExMCwiUkVOQU1FT05FIG5ldzEiLG5ldywwKTsKLQkJeCA9IChpbnQpc3RybGVuKG5ldyk7 CS8qIFVucmV2ZXJzZSB0aGUgcmVzdWx0ICovCi0JCWlmICgocCA9IChjaGFyICopbWFsbG9jKHgr MikpKSB7Ci0JCSAgICAoVk9JRCkgZ25pcnRzKG5ldyxwLHgrMik7Ci0JCSAgICBkZWJ1ZyhGMTEw LCJSRU5BTUVPTkUgbmV3MiIsbmV3LDApOwotCQkgICAgY2tzdHJuY3B5KG5ldyxwLHgrMik7Ci0J CSAgICBmcmVlKHApOwotCQl9Ci0JCWlmIChzMCkgZnJlZShzMCk7CS8qIEZyZWUgdGhlIHRlbXBv cmFyeSBzdHJpbmdzICovCi0JCWlmIChzMSkgZnJlZShzMSk7Ci0JCWlmIChzMikgZnJlZShzMik7 Ci0JCWRlYnVnKEYxMTAsIlJFTkFNRU9ORSBuZXczIixuZXcsMCk7Ci0JICAgIH0KLQl9Ci0gICAg fQotICAgIGlmIChjYXNpbmcpIHsJCQkvKiBDaGFuZ2luZyBjYXNlPyAqLwotCWNoYXIgYywgKiB0 OwkJCS8qIFNlZSBpZiBtaXhlZCBjYXNlLiAqLwotCWlmICghcmVwbGFjZWQpCi0JICBja3N0cm5j cHkobmV3LG9sZCxzaXplKTsJLyogQ29weSBvbGQgbmFtZSB0byBuZXcgbmFtZSAqLwotCXQgPSBu ZXc7Ci0Jd2hpbGUgKChjID0gKnQrKykpIHsKLQkgICAgaWYgKGlzbG93ZXIoYykpIGZsYWcgfD0g MTsgLyogSGF2ZSBhIGxvd2VyY2FzZSBsZXR0ZXIgKi8KLQkgICAgZWxzZSBpZiAoaXN1cHBlcihj KSkgZmxhZyB8PSAyOyAvKiBIYXZlIGFuIHVwcGVyY2FzZSBsZXR0ZXIgKi8KLQkgICAgaWYgKGZs YWcgPT0gMykgYnJlYWs7CS8qIEhhdmUgYSBtaXhlZC1jYXNlIG5hbWUgKi8KLQl9Ci0JaWYgKGFs bCB8fCBmbGFnIDwgMykgewkvKiBOb3Qgc2tpcHBpbmcgb3Igbm90IG1peGVkIGNhc2UgKi8KLQkg ICAgaWYgKGNhc2luZyA9PSAxICYmIGZsYWcgIT0gMSkgLyogQ2hhbmdlIGNhc2UgdG8gbG93ZXIg Ki8KLQkgICAgICAoVk9JRCkgY2tsb3dlcihuZXcpOwotCSAgICBlbHNlIGlmIChjYXNpbmcgPT0g MiAmJiBmbGFnICE9IDIpIC8qIENoYW5nZSBjYXNlIHRvIHVwcGVyICovCi0JICAgICAgKFZPSUQp IGNrdXBwZXIobmV3KTsKLQl9Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsIlhYWCAxIG5ldyIsbmV3 LDApOwotICAgIGRlYnVnKEYxMTAsIlhYWCAxIG9sZCIsb2xkLDApOwotICAgIGRlYnVnKEYxMTAs IlhYWCAxIHNyY3BhdGgiLHNyY3BhdGgsMCk7Ci0gICAgZGVidWcoRjExMCwiWFhYIDEgZGVzdGRp ciIsZGVzdGRpciwwKTsKLQotICAgIGlmICgqZGVzdGRpciAmJiAhYXJnMmlzZmlsZSkgewkvKiBN b3Zpbmcgd2l0aG91dCByZW5hbWluZyAqLwotCWNrc3RybmNhdChzcmNwYXRoLG9sZCxDS01BWFBB VEgpOwotCW9sZCA9IHNyY3BhdGg7Ci0JbmV3ID0gZGVzdGRpcjsKLSAgICB9IGVsc2UgaWYgKCpk ZXN0ZGlyIHx8ICpzcmNwYXRoKSB7CS8qIFdlcmUgdGhlcmUgYW55IHBhdGhuYW1lcz8gKi8KLQlj aGFyIHRtcFtDS01BWFBBVEhdOwotCWNrbWFrbXNnKHRtcCxDS01BWFBBVEgsc3JjcGF0aCxvbGQs TlVMTCxOVUxMKTsKLQlja3N0cm5jcHkob2xkLHRtcCxDS01BWFBBVEgpOwotCWlmICgqZGVzdGRp cikgewkJCS8qIERpcmVjdG9yeS10by1tb3ZlLXRvIGdpdmVuPyAqLwotCSAgICBja3N0cm5jYXQo ZGVzdGRpcixuZXcsQ0tNQVhQQVRIKTsKLQkgICAgbmV3ID0gZGVzdGRpcjsKLQl9IGVsc2UgaWYg KCpzcmNwYXRoICYmICFhcmcyaXNmaWxlKSB7IC8qIE9yIHdhcyB0aGVyZSBhIHNvdXJjZSBwYXRo PyAqLwotCSAgICBja3N0cm5jYXQoc3JjcGF0aCxuZXcsQ0tNQVhQQVRIKTsKLQkgICAgbmV3ID0g c3JjcGF0aDsKLQl9Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsIlhYWCAyIixuZXcsMCk7Ci0KLSAg ICBza2lwID0gMDsJCQkJLyogQ2FuIHdlIHNraXAgdGhpcyBvbmU/ICovCi0jaWZkZWYgQ09NTUVO VAotICAgIGlmIChjYXNpbmcgJiYgIXJlcGxhY2VkKSB7Ci0Jc2tpcCA9ICgoKGFsbCA9PSAwKSAm JiAoZmxhZyA9PSAzKSkgfHwgKGZsYWcgPT0gY2FzaW5nKSkgPyAxIDogMDsKLQlpZiAoIXNraXAg JiYgZGVzdGRpcikgc2tpcCA9IDA7Ci0gICAgfQotI2VuZGlmCS8qIENPTU1FTlQgKi8KLSAgICBp ZiAoIXNraXApIHsKLQlpZiAoIWNrc3RyY21wKG9sZCxuZXcsLTEsMSkpCi0JICBza2lwID0gMTsK LSAgICB9Ci0gICAgaWYgKG9wID09IDAgJiYgIXNraXAgJiYgKGNvbGxpc2lvbiAhPSBSRU5YX09W V1IpKSB7Ci0JaWYgKHpjaGtpKG5ldykgPiAoQ0tfT0ZGX1QpLTEpIHsgLyogTmV3IGZpbGUgYWxy ZWFkeSBleGlzdHM/ICAqLwotCSAgICBzd2l0Y2ggKGNvbGxpc2lvbikgewkvKiBZZXMsIHRha2Ug c3BlY2lmaWVkIGFjdGlvbiAqLwotCSAgICAgIGNhc2UgUkVOWF9TS0lQOgkJLyogU2tpcCB0aGlz IG9uZSBhbmQgcHJvY2VlZCAgKi8KLQkJc2tpcCA9IDI7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2Ug UkVOWF9GQUlMOgkJLyogT3IgZmFpbC4gKi8KLQkJc2tpcCA9IDM7Ci0JCWlmICghbGlzdGluZyAm JiAhbm9saXN0KQotCQkgIHByaW50ZigiP0ZpbGUgYWxyZWFkeSBleGlzdHM6ICVzXG4iLG5ldyk7 Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsIlJFTkFNRU9ORSBuZXciLG5ldyww KTsKLSAgICBkZWJ1ZyhGMTAxLCJSRU5BTUVPTkUgZmxhZyIsIiIsZmxhZyk7CQotICAgIGRlYnVn KEYxMDEsIlJFTkFNRU9ORSBza2lwIiwiIixza2lwKTsJCi0gICAgZGVidWcoRjEwMCwiUkVOQU1F T05FIC0tLS0tLS0tLS0tLS0tLS0iLCIiLDApOwotCi0gICAgaWYgKHNraXAgPT0gMykgewotCWlm IChsaXN0aW5nKSBwcmludGYoIiVzID0+ICVzIChTS0lQUEVEOiAlcyBhbHJlYWR5IGV4aXN0cylc biIsCi0JCQkgICAgb2xkLG5ldyxuZXcpOwotCXJjID0gMDsKLSAgICB9IGVsc2UgaWYgKHNraXAp IHsJCQkvKiBTa2lwcGluZyB0aGlzIG9uZSAqLwotCWlmIChsaXN0aW5nKSBwcmludGYoIiVzID0+ ICVzICglcylcbiIsCi0JCQkgICAgb2xkLG5ldywKLQkJCSAgICAoc2tpcCA9PSAyKSA/ICJDT0xM SVNJT046IFNLSVBQRUQiIDogIlNLSVBQRUQiKTsKLSAgICB9IGVsc2UgewkJCQkvKiBIYXZlIHRv IHJlbmFtZSB0aGlzIG9uZSAqLwotCWlmIChvcCA9PSBSRU5fT1BfQ0hLKSB7CQkvKiBDaGVja2lu ZyBmb3IgY29sbGlzaW9ucyAqLwotCSAgICByZXR1cm4oKHpjaGtpKG5ldykgPiAoQ0tfT0ZGX1Qp LTEpID8gMCA6IDEgKTsKLQl9IGVsc2UgaWYgKG9wID09IFJFTl9PUF9TSU0pIHsJLyogU2ltdWxh dGluZyAqLwotCSAgICBpZiAobGlzdGluZykgcHJpbnRmKCIlcyA9PiAlcyAoU0lNVUxBVEVEKVxu IixvbGQsbmV3KTsKLQl9IGVsc2UgewkJCS8qIFJlYWxseSByZW5hbWluZyAqLwotCSAgICBpZiAo bGlzdGluZykgcHJpbnRmKCIlcyA9PiAlcyAiLG9sZCxuZXcpOwotCSAgICBpZiAoenJlbmFtZShv bGQsbmV3KSA8IDApIHsKLQkJcmMgPSAwOwotCQlpZiAobGlzdGluZykKLQkJICBwcmludGYoIihG QUlMRUQ6ICVzKVxuIixja19lcnJzdHIoKSk7Ci0JCWVsc2UgaWYgKCFub2xpc3QpCi0JCSAgcHJp bnRmKCI/JXNcbiIsY2tfZXJyc3RyKCkpOwotCSAgICB9IGVsc2UgewotCQlpZiAobGlzdGluZykg cHJpbnRmKCIoT0spXG4iKTsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3Mg PSByYyk7ICAvKiBTdWNjZWVkcyBhbHNvIGlmIG5vdGhpbmcgbmVlZGVkIHRvIGJlIHJlbmFtZWQg Ki8KLX0KLQotaW50Ci1kb3JlbmFtKCkgewotI2lmbmRlZiBOT0NTRVRTCi0jaWZuZGVmIE5PVU5J Q09ERQotICAgIGV4dGVybiBpbnQgbmZpbGM7Ci0gICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZmNz dGFiW107Ci0gICAgZXh0ZXJuIHN0cnVjdCBjc2luZm8gZmNzaW5mb1tdOwotI2VuZGlmCS8qIE5P VU5JQ09ERSAqLwotI2VuZGlmCS8qIE5PQ1NFVFMgKi8KLSAgICBpbnQgY3NldDEgPSAwLCBjc2V0 MiA9IDA7Ci0KLSAgICBpbnQgaSwgeCwgeiwgZm4sIGxpc3RpbmcgPSAwLCBoYXZlbmFtZSA9IDAs IHdpbGQgPSAwLCByYyA9IDEsIG5vYXJnID0gMDsKLSAgICBpbnQgbm9saXN0ID0gMCwgYWxsID0g MCwgY2FzaW5nID0gMCwgcmVwbGFjaW5nID0gMCwgZ2V0dmFsID0gMCwgc2ltID0gMDsKLSAgICBp bnQgY29udmVydGluZyA9IDAsIGNvbGxpc2lvbiA9IDA7Ci0KLSAgICBjaGFyIGM7Ci0gICAgc3Ry dWN0IEZEQiBzdywgZmk7Ci0KLSAgICBjb2xsaXNpb24gPSByZW5fY29sbDsJCS8qIEluaGVyaXQg U0VUIFJFTkFNRSBDT0xMSVNJT04gKi8KLSAgICBsaXN0aW5nID0gcmVuX2xpc3Q7CQkJLyogSW5o ZXJlaXQgU0VUIFJFTkFNRSBMSVNUICovCi0KLSAgICBpZiAocmVuX3N1YlswXSkgbWFrZXN0cigm KHJlbl9zdWJbMF0pLE5VTEwpOwotICAgIGlmIChyZW5fc3ViWzFdKSBtYWtlc3RyKCYocmVuX3N1 YlsxXSksTlVMTCk7Ci0gICAgaWYgKHJlbl9zdWJbMl0pIG1ha2VzdHIoJihyZW5fc3ViWzJdKSxO VUxMKTsKLSAgICBsaW5lWzBdID0gTlVMOwotICAgIHRtcGJ1ZlswXSA9IE5VTDsKLQotICAgIGNt ZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDFzdCBGREIgLSBzd2l0Y2hlcyAq LwotICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0g ICAgICAgICAgICJGaWxlbmFtZSBvciBzd2l0Y2giLCAgICAgICAgLyogaGxwbXNnICovCi0gICAg ICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAg ICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICov Ci0gICAgICAgICAgIG5yZW5hbXN3LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6 ZSAqLwotICAgICAgICAgICA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51 bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAg ICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgIHJlbmFtc3cs ICAgICAgICAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAmZmkg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAg ICAgICAgKTsKLQotICAgIGNtZmRiaSgmZmksICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDJu ZCBGREIgLSBmaWxlIG9yIGRpcmVjdG9yeSBuYW1lICovCi0gICAgICAgICAgIF9DTUlGSSwgICAg ICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgMywgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBGbGFncyAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDAgPSBQYXJzZSBmaWxlIG9yIGRpcmVjdG9yeSBuYW1lcyAqLwotICAg ICAgICAgICB4eHN0cmluZywKLSAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgTlVMTAotICAg ICAgICAgICApOwotCi0gICAgaWYgKGNtZmxncyA9PSAxKSB7Ci0JcHJpbnRmKCI/RmlsZSBvciBk aXJlY3RvcnkgbmFtZSByZXF1aXJlZFxuIik7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgd2hp bGUgKCFoYXZlbmFtZSkgewotCW5vYXJnID0gMDsKLSAgICAgICAgeCA9IGNtZmRiKCZzdyk7ICAg ICAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KLQlpZiAoeCA9PSAtMykgewkJCS8q IFRoZXkgaGl0IEVudGVyIHByZW1hdHVyZWx5ICovCi0JICAgIHByaW50ZigiP0NvbW1hbmQgaW5j b21wbGV0ZVxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfSBlbHNlIGlmICh4IDwgMCkgewkJLyog T3RoZXIgZXJyb3IgKi8KLQkgICAgaWYgKHggPT0gLTEpCi0JICAgICAgcmV0dXJuKHgpOwotICAg ICAgICAgICAgaWYgKGlzd2lsZChhdG1idWYpICYmIG56eHBhbmQoYXRtYnVmLG56eG9wdHMpID09 IDApCi0gICAgICAgICAgICAgIHByaW50ZigiP05vIGZpbGVzIG1hdGNoOiAlc1xuIixicnN0cmlw KGF0bWJ1ZikpOwotICAgICAgICAgICAgZWxzZSBpZiAoemNoa2koYXRtYnVmKSA9PSAtMSkKLQkg ICAgICBwcmludGYoIj9GaWxlIG5vdCBmb3VuZDogJXNcbiIsYnJzdHJpcChhdG1idWYpKTsKLQkg ICAgZWxzZQotCSAgICAgIHByaW50ZigiP0Vycm9yIHdpdGggc3dpdGNoIG9yIGZpbGVuYW1lOiAl c1xuIixicnN0cmlwKGF0bWJ1ZikpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLQlmbiA9IGNtcmVz dWx0Lm5yZXN1bHQ7CQkvKiBGb3IgYnJldml0eSAqLwotICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0 LmZjb2RlKSB7CS8qIEhhbmRsZSBlYWNoIGtpbmQgb2YgZmllbGQgKi8KLSAgICAgICAgICBjYXNl IF9DTUtFWToJCQkvKiBLZXl3b3JkIChzd2l0Y2gpICovCi0gICAgICAgICAgICBjID0gY21nYnJr KCk7Ci0gICAgICAgICAgICBpZiAoKGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9JykpICYm ICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhp cyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICAgICAg cmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZ2V0dmFsICYmIChj bWdrd2ZsZ3MoKSAmIENNX0FSRykpCi0JICAgICAgbm9hcmcgPSAxOwkJLyogUmVtZW1iZXIgYXJn IGlzIG1pc3NpbmcgKi8KLSAgICAgICAgICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewkv KiBIYW5kbGUgdGhlIHN3aXRjaCAqLwotICAgICAgICAgICAgICBjYXNlIERFTF9MSVM6CQkvKiAv TElTVCAqLwotICAgICAgICAgICAgICBjYXNlIERFTF9WUkI6CQkvKiAvVkVSQk9TRSAqLwotICAg ICAgICAgICAgICAgIGxpc3RpbmcgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICBjYXNlIERFTF9OT0w6CQkvKiAvTk9MSVNUICovCi0gICAgICAgICAgICAgIGNhc2Ug REVMX1FVSToJCS8qIC9RVUlFVCAqLwotCQlub2xpc3QgPSAxOwotICAgICAgICAgICAgICAgIGxp c3RpbmcgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIERF TF9TSU06CQkvKiAvU0lNVUxBVEUgKi8KLSAgICAgICAgICAgICAgICBzaW0gPSAxOwotICAgICAg ICAgICAgICAgIGJyZWFrOwotCSAgICAgIGNhc2UgUkVOX1VQUDoJCS8qIC9VUFBFUjogKi8KLQkg ICAgICBjYXNlIFJFTl9MT1c6CQkvKiAvTE9XRVIgKi8KLQkJYWxsID0gMTsKLQkJaWYgKCFub2Fy ZykgewotCQkgICAgaWYgKCh4ID0gY21rZXkoKGZuID09IFJFTl9VUFApID8gcl91cHBlciA6IHJf bG93ZXIsCi0JCQkJICAgMiwgIiIsImFsbCIseHhzdHJpbmcpKSA8IDApIHsKLQkJCWlmICh4ID09 IC0zKQotCQkJICB4ID0gMTsKLQkJCWVsc2UKLQkJCSAgcmV0dXJuKHgpOwotCQkgICAgfQotCQkg ICAgYWxsID0geDsKLQkJfQotCQkvKiAwID0gZG9uJ3QgY29udmVydDsgMSA9IGNvbnZlcnQgdG8g bG93ZXI7IDIgPSB0byB1cHBlciAqLwotCQljYXNpbmcgPSAoZm4gPT0gUkVOX1VQUCkgPyAyIDog MTsKLQkJY29udmVydGluZyA9IDA7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgUkVOX09WVzoJCS8q IC9DT0xMSVNJT04gKi8KLQkJaWYgKCFub2FyZykgewotCQkgICAgaWYgKCh4ID0gY21rZXkocl9j b2xsaXNpb24sCi0JCQkJICAgbnJfY29sbGlzaW9uLCIiLCJvdmVyd3JpdGUiLHh4c3RyaW5nKSk8 MCkgewotCQkJaWYgKHggPT0gLTMpCi0JCQkgIHggPSBSRU5YX09WV1I7Ci0JCQllbHNlCi0JCQkg IHJldHVybih4KTsKLQkJICAgIH0KLQkJICAgIGNvbGxpc2lvbiA9IHg7Ci0JCX0KLQkJYnJlYWs7 Ci0JICAgICAgY2FzZSBSRU5fUlBMOgkJLyogL1JFUExBQ0U6ICovCi0JCWlmIChub2FyZykgewot CQkgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwotCQkg ICAgcmV0dXJuKC05KTsKLQkJfQotCQlpZiAoKHggPSBjbWZsZCgiU3RyaW5nIHRvIHJlbW92ZSwg b3Ige3tTdHJpbmcxfXtTdHJpbmcyfX0iLAotCQkJICAgICAgICIiLCZzLHh4c3RyaW5nKSkgPCAw KSB7Ci0JCSAgICBpZiAoeCA9PSAtMykgewotCQkJcHJpbnRmKCI/VGFyZ2V0IHN0cmluZyByZXF1 aXJlZFxuIik7Ci0JCQl4ID0gLTk7Ci0JCSAgICB9Ci0JCSAgICByZXR1cm4oeCk7Ci0JCX0KLQkJ aWYgKHNbMF0pIHsKLQkJICAgIGlmIChzWzBdID09ICd7JyAmJiBzWzFdID09ICd7JykgLyogR2V0 IHRoZSBsaXN0ICovCi0JCSAgICAgIG1ha2VsaXN0KHMscmVuX3N1YiwzKTsKLQkJICAgIGVsc2UK LQkJICAgICAgbWFrZXN0cigmKHJlbl9zdWJbMF0pLHMpOwotCQl9Ci0JCWNvbnZlcnRpbmcgPSAw OwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgUkVOX1NQQToJCS8qIC9GSVhTUEFDRVM6ICovCi0J CWlmICghbm9hcmcpCi0JCSAgaWYgKCh4ID0gY21mbGQoIkNoYXJhY3RlciBvciBzdHJpbmcgdG8g cmVwbGFjZSBzcGFjZXMgd2l0aCIsCi0JCQkJICJfIiwmcyx4eHN0cmluZykpIDwgMCkKLQkJICAg IGlmICh4ID09IC0zKQotCQkgICAgICBzID0gIl8iOwotCQkgICAgZWxzZQotCQkgICAgICByZXR1 cm4oeCk7Ci0JCW1ha2VzdHIoJihyZW5fc3ViWzBdKSwiICIpOwotCQltYWtlc3RyKCYocmVuX3N1 YlsxXSksbm9hcmcgPyAiXyIgOiBicnN0cmlwKHMpKTsKLQkJbWFrZXN0cigmKHJlbl9zdWJbM10p LE5VTEwpOwotCQljb252ZXJ0aW5nID0gMDsKLQkJYnJlYWs7Ci0KLSNpZm5kZWYgTk9DU0VUUwot I2lmbmRlZiBOT1VOSUNPREUKLQkgICAgICBjYXNlIFJFTl9YTEE6CQkvKiAvQ09OVkVSVDpjc2V0 MTpjc2V0MiAqLwotCQlpZiAoIXhmY3N0YWIpIHsJCS8qIE1ha2UgYSBjb3B5IG9mIHRoZSBmaWxl IGNoYXJzZXQgKi8KLQkJICAgIGludCBpLCB4OwkJLyogdGFibGUgd2l0aCBDTV9BUkcgc2V0IGZv ciBlYWNoICovCi0JCSAgICB4ID0gKG5maWxjICsgMSkgKiBzaXplb2Yoc3RydWN0IGtleXRhYik7 Ci0JCSAgICB4ZmNzdGFiID0gKHN0cnVjdCBrZXl0YWIgKiltYWxsb2MoeCk7Ci0JCSAgICBpZiAo IXhmY3N0YWIpIHsKLQkJCXByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOwot CQkJcmV0dXJuKC05KTsKLQkJICAgIH0KLQkJICAgIGZvciAoaSA9IDA7IGkgPCBuZmlsYzsgaSsr KSB7Ci0JCQl4ZmNzdGFiW2ldLmt3ZCA9IGZjc3RhYltpXS5rd2Q7Ci0JCQl4ZmNzdGFiW2ldLmt3 dmFsID0gZmNzdGFiW2ldLmt3dmFsOwotCQkJeGZjc3RhYltpXS5mbGdzID0gZmNzdGFiW2ldLmZs Z3MgfCBDTV9BUkc7Ci0JCSAgICB9Ci0JCX0KLQkJaWYgKCh4ID0gY21zd2koeGZjc3RhYixuZmls YywKLQkJCSAgICAgICAiQ2hhcmFjdGVyLXNldCBvZiBvbGQgbmFtZSIsIiIseHhzdHJpbmcpKSA8 IDApIHsKLQkJICAgIGlmICh4ID09IC0zKSB7Ci0JCQlwcmludGYoIj9QYWlyIG9mIGNoYXJhY3Rl ci1zZXQgbmFtZXMgcmVxdWlyZWRcbiIpOwotCQkJcmV0dXJuKC05KTsKLQkJICAgIH0gZWxzZQot CQkgICAgICByZXR1cm4oeCk7Ci0JCX0KLQkJY3NldDEgPSB4OwotCQljID0gY21nYnJrKCk7Ci0J CWlmICghZ2V0dmFsKSB7Ci0JCSAgICBwcmludGYoIj9TZWNvbmRjaGFyYWN0ZXItc2V0IG5hbWUg cmVxdWlyZWRcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCQlpZiAoKHggPSBjbWtleShm Y3N0YWIsbmZpbGMsCi0JCQkgICAgICAgIkNoYXJhY3Rlci1zZXQgb2YgbmV3IG5hbWUiLCIiLHh4 c3RyaW5nKSkgPCAwKSB7Ci0JCSAgICBpZiAoeCA9PSAtMykgewotCQkJcHJpbnRmKCI/U2Vjb25k IGNoYXJhY3Rlci1zZXQgbmFtZSByZXF1aXJlZFxuIik7Ci0JCQlyZXR1cm4oLTkpOwotCQkgICAg fSBlbHNlCi0JCSAgICAgIHJldHVybih4KTsKLQkJfQotCQljc2V0MiA9IHg7Ci0JCWlmIChjYXNp bmcpCi0JCSAgY2FzaW5nID0gMDsKLQkJaWYgKHJlbl9zdWJbMF0pCi0JCSAgbWFrZXN0cigmKHJl bl9zdWJbMF0pLE5VTEwpOwotCQlpZiAocmVuX3N1YlsxXSkKLQkJICBtYWtlc3RyKCYocmVuX3N1 YlsxXSksTlVMTCk7Ci0JCWlmIChyZW5fc3ViWzJdKQotCQkgIG1ha2VzdHIoJihyZW5fc3ViWzJd KSxOVUxMKTsKLQkJY29udmVydGluZyA9IDE7Ci0JCWJyZWFrOwotI2VuZGlmCS8qIE5PVU5JQ09E RSAqLwotI2VuZGlmCS8qIE5PQ1NFVFMgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgIGNhc2UgX0NNSUZJOgkJCS8qIEZpbGUgb3IgZGlyZWN0b3J5IG5hbWUg Ki8KLSAgICAgICAgICAgIHMgPSBjbXJlc3VsdC5zcmVzdWx0OwotICAgICAgICAgICAgaGF2ZW5h bWUgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLQkgICAgcHJp bnRmKCI/RmlsZSBvciBkaXJlY3RvcnkgbmFtZSByZXF1aXJlZFxuIik7Ci0JICAgIHJldHVybigt OSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGhhdmVuYW1lKSB7Ci0JY2tzdHJuY3B5KGxp bmUscyxMSU5CVUZTSVopOwkvKiBNYWtlIGEgc2FmZSBjb3B5IG9mIHNvdXJjZSBuYW1lICovCi0g ICAgfSBlbHNlIHsKLQlwcmludGYoIj9JbnRlcm5hbCBlcnJvclxuIik7Ci0JcmV0dXJuKC05KTsJ CQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCi0gICAgfQotICAgIHdpbGQgPSBjbXJlc3VsdC5ucmVz dWx0OyAgICAgICAgICAgIC8qIFNvdXJjZSBzcGVjaWZpY2F0aW9uIHdpbGQ/ICovCi0gICAgaWYg KCF3aWxkKQotICAgICAgd2lsZCA9IGlzd2lsZChsaW5lKTsKLQotICAgIGRlYnVnKEYxMTEsIlJF TkFNRSBXSUxEIixsaW5lLHdpbGQpOwotCi0gICAgcCA9IHRtcGJ1ZjsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUGxhY2UgZm9yIG5ldyBuYW1lICovCi0gICAgcFswXSA9IE5VTDsKLSAgICBy ZXBsYWNpbmcgPSByZW5fc3ViWzBdID8gMSA6IDA7Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgaWYg KCEoY2FzaW5nIHx8IHJlcGxhY2luZyB8fCBjb252ZXJ0aW5nKSkgewotCWlmICgoeCA9IGNtb2Zp KHdpbGQgPyAiVGFyZ2V0IGRpcmVjdG9yeSIgOiAiTmV3IG5hbWUiLAotCQkgICAgICAgIiIsJnMs eHhzdHJpbmcpKSA8IDApIHsgLyogR2V0IG5ldyBuYW1lICovCi0JICAgIGlmICh4ID09IC0zKSB7 Ci0JCXByaW50ZigiPyVzIHJlcXVpcmVkXG4iLAotCQkgICAgICAgd2lsZCA/ICJUYXJnZXQgZGly ZWN0b3J5IiA6ICJOZXcgbmFtZSIpOwotCQlyZXR1cm4oLTkpOwotCSAgICB9IGVsc2UgcmV0dXJu KHgpOwotCX0KLQlja3N0cm5jcHkocCxzLFRNUEJVRlNJWik7CS8qIE1ha2UgYSBzYWZlIGNvcHkg b2YgdGhlIG5ldyBuYW1lICovCi0gICAgfQotI2Vsc2UKLSAgICBpZiAoKHggPSBjbW9maSh3aWxk ID8gIlRhcmdldCBkaXJlY3RvcnkiIDogIk5ldyBuYW1lIiwKLQkJICAgIiIsJnMseHhzdHJpbmcp KSA8IDApIHsgLyogR2V0IG5ldyBuYW1lICovCi0JaWYgKHggPT0gLTMpIHsKLQkgICAgaWYgKGNh c2luZyB8fCByZXBsYWNpbmcgfHwgY29udmVydGluZykgewotCQlzID0gIiI7Ci0JICAgIH0gZWxz ZSB7Ci0JCXByaW50ZigiPyVzIHJlcXVpcmVkXG4iLAotCQkgICAgICAgd2lsZCA/ICJUYXJnZXQg ZGlyZWN0b3J5IiA6ICJOZXcgbmFtZSIpOwotCQlyZXR1cm4oLTkpOwotCSAgICB9Ci0JfSBlbHNl IHJldHVybih4KTsKLSAgICB9Ci0gICAgY2tzdHJuY3B5KHAscyxUTVBCVUZTSVopOwkJLyogTWFr ZSBhIHNhZmUgY29weSBvZiB0aGUgbmV3IG5hbWUgKi8KLSNlbmRpZgkvKiBDT01NRU5UICovCi0K LSAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsJLyogQ29uZmlybSB0aGUgY29t bWFuZCAqLwotCi0jaWZkZWYgQ09NTUVOVAotI2lmbmRlZiBOT1VOSUNPREUKLSAgICBpZiAoY29u dmVydGluZykgewotCXByaW50ZigiIEZyb206ICVzXG4iLGZjc2luZm9bY3NldDFdLmtleXdvcmQp OwotCXByaW50ZigiIFRvOiAgICVzXG4iLGZjc2luZm9bY3NldDJdLmtleXdvcmQpOwotICAgIH0K LSNlbmRpZgkvKiBOT1VOSUNPREUgKi8KLSAgICBpZiAoY2FzaW5nKSB7Ci0JcHJpbnRmKCJDQVNJ Tkc6ICVzXG4iLCAoY2FzaW5nID09IDEpID8gIkxPV0VSIiA6ICJVUFBFUiIpOwotICAgIH0KLSAg ICBpZiAocmVwbGFjaW5nKSB7Ci0JcHJpbnRmKCJSRVBMQUNJTkc6ICclcycgd2l0aCAnJXMnXG4i LAotCSAgICAgICByZW5fc3ViWzBdLAotCSAgICAgICByZW5fc3ViWzFdID8gcmVuX3N1YlsxXSA6 ICIiKTsKLSAgICB9Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCi0gICAgcyA9IGxpbmU7Ci0gICAg aWYgKCF3aWxkKQkJCQkvKiBKdXN0IG9uZSAqLwotICAgICAgcmV0dXJuKHN1Y2Nlc3MgPQotCSAg ICAgcmVuYW1lb25lKHMscCwKLQkJICAgICAgIHJlcGxhY2luZyxjYXNpbmcsYWxsLGNvbnZlcnRp bmcsY3NldDEsY3NldDIsCi0JCSAgICAgICBsaXN0aW5nLG5vbGlzdCxzaW0sVE1QQlVGU0laLGNv bGxpc2lvbikpOwotCi0gICAgaWYgKCFjYXNpbmcgJiYgIXJlcGxhY2luZyAmJiAhY29udmVydGlu ZykgewkvKiBNdWx0aXBsZSBmaWxlcyAqLwotCWlmICghaXNkaXIocCkpIHsKLQkgICAgcHJpbnRm KAkJCS8qIGlmIHRhcmdldCBpcyBub3QgYSBkaXJlY3RvcnkgKi8KLSI/TXVsdGlwbGUgc291cmNl IGZpbGVzIG5vdCBhbGxvd2VkIGlmIHRhcmdldCBpcyBub3QgYSBkaXJlY3RvcnkuXG4iKTsKLQkg ICAgcmV0dXJuKC05KTsKLQl9Ci0gICAgfQotI2lmZGVmIENPTU1FTlQKLSAgICBlbHNlIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaG93IGZ1bGwgcGF0aCBvZiB0YXJnZXQgKi8K LSAgICAgICAgY2hhciBidWZbQ0tNQVhQQVRIXTsgICAgICAgICAgICAvKiAodG9vIG11Y2gpICov Ci0gICAgICAgIGlmICh6Zm5xZnAocCxDS01BWFBBVEgsYnVmKSkKLSAgICAgICAgICBja3N0cm5j cHkodG1wYnVmLGJ1ZixUTVBCVUZTSVopOwotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0K LSNpZmRlZiBWTVMKLSAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBM ZXQgQ3RybC1DIHdvcmsuICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgZGVidWcoRjExMCwiZG9y ZW5hbWUgbGluZSIsbGluZSwwKTsKLQotI2lmZGVmIFpYUkVXSU5ECi0gICAgeiA9IHp4cmV3aW5k KCk7ICAgICAgICAgICAgICAgICAgICAgLyogUmV3aW5kIGZpbGUgbGlzdCAqLwotI2Vsc2UKLSAg ICB6ID0gbnp4cGFuZChzLDApOyAgICAgICAgICAgICAgICAgICAvKiBFeHBhbmQgZmlsZSBsaXN0 ICovCi0jZW5kaWYgLyogWlhSRVdJTkQgKi8KLSAgICBkZWJ1ZyhGMTExLCJkb3JlbmFtZSBwIixw LHopOwotCi0jaWZkZWYgVU5JWAotICAgIGlmICh3aWxkICYmIHogPiAxKQotICAgICAgc2hfc29y dChtdGNocyxOVUxMLHosMCwwLGZpbGVjYXNlKTsgLyogQWxwaGFiZXRpemUgdGhlIGZpbGVuYW1l IGxpc3QgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSAgICAvKiBGb3IgL0NPTExJU0lPTjpGQUlM IG1ha2UgYSBzaWxlbnQgcGFzcyB0byBzZWUgaWYgdGhlcmUgd291bGQgYmUgYW55ICovCi0KLSAg ICBpZiAoY29sbGlzaW9uID09IFJFTlhfRkFJTCkgewotCWludCBuID0gMDsKLQljaGFyIGxpbmVb Q0tNQVhQQVRIKzJdOwotCXdoaWxlICh6LS0gPiAwKSB7Ci0JICAgIGlmICghKHogPT0gMCAmJiAh d2lsZCkpCi0JICAgICAgem5leHQobGluZSk7Ci0JICAgIGlmICghbGluZVswXSkKLQkgICAgICBi cmVhazsKLQkgICAgaWYgKCFyZW5hbWVvbmUoKGNoYXIgKilsaW5lLHAsCi0JCQkgICByZXBsYWNp bmcsY2FzaW5nLGFsbCxjb252ZXJ0aW5nLGNzZXQxLGNzZXQyLAotCQkJICAgMCwxLFJFTl9PUF9D SEssVE1QQlVGU0laLFJFTlhfRkFJTCkpCi0JICAgICAgbisrOwotCX0KLQlpZiAobiA+IDApIHsK LQkgICAgcHJpbnRmKCI/RmFpbGVkOiAlZCBmaWxlJXMgd291bGQgYmUgb3ZlcndyaXR0ZW5cbiIs Ci0JCSAgIG4sIChuICE9IDEpID8gInMiIDogIiIpOwotI2lmZGVmIFZNUwotCSAgICBjb25jYigo Y2hhcillc2NhcGUpOwotI2VuZGlmIC8qIFZNUyAqLwotCSAgICByZXR1cm4oc3VjY2VzcyA9IDAp OwotCX0KLQkvKiBHZXQgdGhlIGZpbGUgbGlzdCBiYWNrLiAqLwotI2lmZGVmIFpYUkVXSU5ECi0J eiA9IHp4cmV3aW5kKCk7Ci0jZWxzZQotCXogPSBuenhwYW5kKHMsMCk7Ci0jZW5kaWYgLyogWlhS RVdJTkQgKi8KLSAgICB9Ci0gICAgd2hpbGUgKHotLSA+IDAgJiYgcmMgPiAwKSB7Ci0JY2hhciBs aW5lW0NLTUFYUEFUSCsyXTsKLSAgICAgICAgaWYgKCEoeiA9PSAwICYmICF3aWxkKSkKLSAgICAg ICAgICB6bmV4dChsaW5lKTsKLSAgICAgICAgaWYgKCFsaW5lWzBdKQotICAgICAgICAgIGJyZWFr OwotCXJjID0gcmVuYW1lb25lKChjaGFyICopbGluZSxwLCAKLQkJICAgICAgIHJlcGxhY2luZyxj YXNpbmcsYWxsLGNvbnZlcnRpbmcsY3NldDEsY3NldDIsCi0JCSAgICAgICBsaXN0aW5nLG5vbGlz dCxzaW0sVE1QQlVGU0laLGNvbGxpc2lvbik7Ci0gICAgfQotI2lmZGVmIFZNUwotICAgIGNvbmNi KChjaGFyKWVzY2FwZSk7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MgPSBy Yyk7Ci19Ci0jZW5kaWYgLyogWlJFTkFNRSAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0jZW5k aWYgLyogTk9SRU5BTUUgKi8KLQotI2lmbmRlZiBOT1NQTAotCi0vKiBEbyB0aGUgUkVUVVJOIGNv bW1hbmQgKi8KLQotaW50Ci1kb3JldHVybihzKSBjaGFyICpzOyB7Ci0gICAgaW50IHg7Ci0gICAg ZXh0ZXJuIGludCB0cmFfYXNnOwotICAgIGNoYXIgKiBsaW5lLCAqIGxwOwotCi0gICAgaWYgKGNt ZGx2bCA8IDEpIHsKLSAgICAgICAgcHJpbnRmKCJcbj9DYW4ndCByZXR1cm4gZnJvbSBsZXZlbCAl ZFxuIixtYWNsdmwpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLSAgICBs aW5lID0gbWFsbG9jKExJTkJVRlNJWik7Ci0gICAgaWYgKGxpbmUgPT0gTlVMTCkKLSAgICAgIHJl dHVybihzdWNjZXNzID0gMCk7Ci0gICAgbHAgPSBsaW5lOyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRXhwYW5kIHJldHVybiB2YWx1ZSBub3cgKi8KLSAgICB4ID0gTElOQlVGU0laLTE7Ci0g ICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgZGVidWcoRjExMCwiUkVUVVJOIHMiLHMsMCk7Ci0gICAg aWYgKHp6c3RyaW5nKHMsJmxwLCZ4KSA+IC0xKSB7Ci0gICAgICAgIHMgPSBsaW5lOwotICAgICAg ICBkZWJ1ZyhGMTEwLCJSRVRVUk4genpzdHJpbmciLHMsMCk7Ci0gICAgfQotCi0gICAgLyogUG9w IGZyb20gYWxsIEZPUi9XSElMRS9TV0lUQ0gvWElGcyAqLwotICAgIHdoaWxlICgobWFjbHZsID4g MCkgJiYKLSAgICAgICAgICAgKG1fYXJnW21hY2x2bC0xXVswXSkgJiYKLSAgICAgICAgICAgKGNt ZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfTUQpICYmCi0gICAgICAgICAgICghc3RybmNtcChtX2Fy Z1ttYWNsdmwtMV1bMF0sIl94aWYiLDQpIHx8Ci0gICAgICAgICAgICAhc3RybmNtcChtX2FyZ1tt YWNsdmwtMV1bMF0sIl9mb3IiLDQpIHx8Ci0gICAgICAgICAgICAhc3RybmNtcChtX2FyZ1ttYWNs dmwtMV1bMF0sIl9zd2kiLDQpIHx8Ci0gICAgICAgICAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwt MV1bMF0sIl93aGkiLDQpKSkgewotICAgICAgICBkZWJ1ZyhGMTExLCJSRVRVUk4gSUYvRk9SL1dI SS9TV0kgcG9wIixtX2FyZ1ttYWNsdmwtMV1bMF0sbWFjbHZsKTsKLSAgICAgICAgZG9ndGEoWFhQ VEEpOyAgICAgICAgICAgICAgICAgICAvKiBQdXQgYXJncyBiYWNrICovCi0gICAgICAgIHBvcGNs dmwoKTsgICAgICAgICAgICAgICAgICAgICAgLyogUG9wIHVwIHR3byBsZXZlbHMgKi8KLSAgICAg ICAgcG9wY2x2bCgpOwotICAgIH0KLSAgICBpZiAodHJhX2FzZykgeyAgICAgICAgICAgICAgICAg ICAgICAvKiBJZiB0cmFjaW5nIHNob3cgcmV0dXJuIHZhbHVlICovCi0gICAgICAgIGlmICgqcykK LSAgICAgICAgICBwcmludGYoIjw8PCAlczogXCIlc1wiXG4iLCBtX2FyZ1ttYWNsdmxdWzBdLCBz KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByaW50ZigiPDw8ICVzOiAobnVsbClcbiIsIG1f YXJnW21hY2x2bF1bMF0pOwotICAgIH0KLSAgICBwb3BjbHZsKCk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBQb3AgZnJvbSBlbmNsb3NpbmcgVEFLRSBvciBtYWNybyAqLwotICAgIGRlYnVn KEYxMTEsIlJFVFVSTiB0b2xldmVsIixzLG1hY2x2bCk7Ci0gICAgaWYgKCFzKSBzID0gIiI7Ci0g ICAgaWYgKCEqcykgcyA9IE5VTEw7Ci0gICAgbWFrZXN0cigmKG1ydmFsW21hY2x2bCsxXSkscyk7 ICAgICAgLyogU2V0IHRoZSBSRVRVUk4gdmFsdWUgKi8KLSAgICBmcmVlKGxpbmUpOwotICAgIHJl dHVybihzdWNjZXNzID0gMSk7ICAgICAgICAgICAgICAgIC8qIE1hY3JvIHN1Y2NlZWRzIGlmIHdl IFJFVFVSTiAqLwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9TUEwKLS8qIERv IHRoZSBPUEVOIGNvbW1hbmQgKi8KLQotaW50Ci1kb29wZW4oKSAgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogT1BFTiB7IGFwcGVuZCwgcmVhZCwgd3JpdGUgfSAqLwotICAgIGludCB4 LCB5LCB6ID0gMDsgY2hhciAqczsKLSAgICBzdGF0aWMgc3RydWN0IGZpbGluZm8gZmNiOyAgICAg ICAgICAvKiAobXVzdCBiZSBzdGF0aWMpICovCi0gICAgaWYgKCh4ID0gY21rZXkob3BudGFiLG5v cG4sIm1vZGUiLCIiLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgIGlmICh4ID09IC0zKSB7Ci0g ICAgICAgICAgICBwcmludGYoIj9Nb2RlIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgIHJldHVy bigtOSk7Ci0gICAgICAgIH0gZWxzZSByZXR1cm4oeCk7Ci0gICAgfQotICAgIHN3aXRjaCAoeCkg ewotICAgICAgY2FzZSBPUE5fRklfUjogICAgICAgICAgICAgICAgICAgIC8qIE9sZCBmaWxlIChS RUFEKSAqLwotICAgICAgICBpZiAoY2hrZm4oWlJGSUxFKSA+IDApIHsKLSAgICAgICAgICAgIHBy aW50ZigiP1JlYWQgZmlsZSBhbHJlYWR5IG9wZW5cbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0y KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHogPSBjbWlmaSgiRmlsZSB0byByZWFkIiwiIiwm cywmeSx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgaWYgKHogPT0gLTMpIHsKLSAgICAg ICAgICAgICAgICBwcmludGYoIj9JbnB1dCBmaWxlbmFtZSByZXF1aXJlZFxuIik7Ci0gICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0gZWxzZSByZXR1cm4oeik7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKHkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE5vIHdpbGRjYXJkcyBhbGxvd2VkICovCi0gICAgICAgICAgICBwcmludGYoIlxuP1BsZWFzZSBz cGVjaWZ5IGEgc2luZ2xlIGZpbGVcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAg ICAgfQotICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgICAgIGlmICgo aW50KXN0cmxlbihsaW5lKSA8IDEpIHJldHVybigtMik7Ci0gICAgICAgIGlmICgoeiA9IGNtbnVt KCJidWZmZXIgc2l6ZSIsIjQwOTYiLDEwLCZ5LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJl dHVybih6KTsKLSAgICAgICAgaWYgKHkgPCAxKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9Qb3Np dGl2ZSBudW1iZXIgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAg ICAgfQotICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApIHJldHVybih6KTsKLSAgICAgICAg cmVhZGJsb2NrID0geTsKLSAgICAgICAgaWYgKHJlYWRidWYpCi0gICAgICAgICAgZnJlZSgoY2hh ciAqKXJlYWRidWYpOwotICAgICAgICBpZiAoIShyZWFkYnVmID0gKENIQVIgKikgbWFsbG9jKHJl YWRibG9jaysxKSkpIHsKLSAgICAgICAgICAgIHByaW50ZigiP0Nhbid0IGFsbG9jYXRlIHJlYWQg YnVmZmVyXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSB6b3BlbmkoWlJGSUxFLGxpbmUpKTsKLQotI2lmbmRlZiBNQUMKLSNp Zm5kZWYgTk9QVVNICi0gICAgICBjYXNlIE9QTl9QSV9SOiAgICAgICAgICAgICAgICAgICAgLyog UGlwZS9Qcm9jZXNzICghUkVBRCkgKi8KLSAgICAgICAgaWYgKG5vcHVzaCkgewotICAgICAgICAg ICAgcHJpbnRmKCI/UmVhZCBmcm9tIHBpcGUgZGlzYWJsZWRcbiIpOwotICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3M9MCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNoa2ZuKFpSRklMRSkgPiAw KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9SZWFkIGZpbGUgYWxyZWFkeSBvcGVuXG4iKTsKLSAg ICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY210eHQo IlN5c3RlbSBjb21tYW5kIHRvIHJlYWQgZnJvbSIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLSAg ICAgICAgICAgIGlmICh5ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/Q29tbWFu ZCBuYW1lIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAg ICAgICAgfSBlbHNlIHJldHVybih5KTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jcHkobGlu ZSxicnN0cmlwKHMpLExJTkJVRlNJWik7Ci0gICAgICAgIGlmICghbGluZVswXSkgcmV0dXJuKC0y KTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGlm ICghcmVhZGJ1ZikgewotICAgICAgICAgICAgaWYgKCEocmVhZGJ1ZiA9IChDSEFSICopIG1hbGxv YyhyZWFkYmxvY2srMSkpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3QgYWxsb2Nh dGUgcmVhZCBidWZmZXJcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSB6eGNtZChaUkZJTEUs bGluZSkpOwotCi0gICAgICBjYXNlIE9QTl9QSV9XOiAgICAgICAgICAgICAgICAgICAgLyogV3Jp dGUgdG8gcGlwZSAqLwotICAgICAgICBpZiAobm9wdXNoKSB7Ci0gICAgICAgICAgICBwcmludGYo Ij9Xcml0ZSB0byBwaXBlIGRpc2FibGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNz PTApOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjaGtmbihaV0ZJTEUpID4gMCkgewotICAgICAg ICAgICAgcHJpbnRmKCI/V3JpdGUgZmlsZSBhbHJlYWR5IG9wZW5cbiIpOwotICAgICAgICAgICAg cmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHkgPSBjbXR4dCgiU3lzdGVtIGNv bW1hbmQgdG8gd3JpdGUgdG8iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICBp ZiAoeSA9PSAtMykgewotICAgICAgICAgICAgICAgIHByaW50ZigiP0NvbW1hbmQgbmFtZSByZXF1 aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0gZWxz ZSByZXR1cm4oeSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY3B5KGxpbmUsYnJzdHJpcChz KSxMSU5CVUZTSVopOwotICAgICAgICBpZiAoIWxpbmVbMF0pIHJldHVybigtMik7Ci0gICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBzdWNjZXNzID0genhj bWQoWldGSUxFLGxpbmUpOwotICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbXNnZmxnKQotICAgICAg ICAgIHByaW50ZigiQ2FuJ3Qgb3BlbiBwcm9jZXNzIGZvciB3cml0aW5nOiAlc1xuIixsaW5lKTsK LSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2VuZGlmIC8q IE1BQyAqLwotCi0gICAgICBjYXNlIE9QTl9GSV9XOiAgICAgICAgICAgICAgICAgICAgLyogTmV3 IGZpbGUgKFdSSVRFKSAqLwotICAgICAgY2FzZSBPUE5fRklfQTogICAgICAgICAgICAgICAgICAg IC8qIChBUFBFTkQpICovCi0gICAgICAgIGlmICgoeiA9IGNtb2ZpKCJOYW1lIG9mIGxvY2FsIGZp bGUgdG8gY3JlYXRlIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgaWYgKHog PT0gLTMpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9GaWxlbmFtZSByZXF1aXJlZFxuIik7 Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0gZWxzZSByZXR1cm4o eik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHogPT0gMikgewotICAgICAgICAgICAgcHJpbnRm KCI/U29ycnksICVzIGlzIGEgZGlyZWN0b3J5IG5hbWVcbiIscyk7Ci0gICAgICAgICAgICByZXR1 cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjaGtmbihaV0ZJTEUpID4gMCkgewotICAg ICAgICAgICAgcHJpbnRmKCI/V3JpdGUvQXBwZW5kIGZpbGUgYWxyZWFkeSBvcGVuXG4iKTsKLSAg ICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICAgICAgZmNiLmJzID0gZmNiLmNz ID0gZmNiLnJsID0gZmNiLmZtdCA9IGZjYi5vcmcgPSBmY2IuY2MgPSBmY2IudHlwID0gMDsKLSAg ICAgICAgZmNiLmxibG9wdHMgPSAwOwotICAgICAgICBmY2IuZHNwID0gKHggPT0gT1BOX0ZJX1cp ID8gWFlGWl9OIDogWFlGWl9BOyAvKiBDcmVhdGUgb3IgQXBwZW5kICovCi0gICAgICAgIGNrc3Ry bmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAgaWYgKChpbnQpc3RybGVuKGxpbmUpIDwg MSkgcmV0dXJuKC0yKTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7 Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gem9wZW5vKFpXRklMRSxsaW5lLE5VTEwsJmZjYikp OwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICAgIGNhc2UgT1BOX1NFUjogICAgICAgICAgICAgICAg ICAgICAvKiBPUEVOIFBPUlQgb3IgTElORSAqLwotICAgICAgY2FzZSBPUE5fTkVUOiB7ICAgICAg ICAgICAgICAgICAgIC8qIE9QRU4gSE9TVCAqLwotICAgICAgICAgIGV4dGVybiBpbnQgZGlkc2V0 bGluLCB0dG5wcm90bzsKLSAgICAgICAgICBpZiAoeCA9PSBPUE5fTkVUKSB7Ci0gICAgICAgICAg ICAgIHogPSB0dG5wcm90bzsKLSAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9OT05FOwotICAg ICAgICAgIH0KLSAgICAgICAgICBpZiAoKHkgPSBzZXRsaW4oKHggPT0gT1BOX1NFUikgPyBYWUxJ TkUgOiBYWUhPU1QsIDEsIDApKSA8IDApIHsKLSAgICAgICAgICAgICAgaWYgKHggPT0gT1BOX05F VCkKLSAgICAgICAgICAgICAgICB0dG5wcm90byA9IHo7Ci0gICAgICAgICAgICAgIHN1Y2Nlc3Mg PSAwOwotICAgICAgICAgIH0KLSAgICAgICAgICBkaWRzZXRsaW4rKzsKLSAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICB9Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0gICAgICBkZWZhdWx0Ogot ICAgICAgICBwcmludGYoIj9Ob3QgaW1wbGVtZW50ZWQiKTsKLSAgICAgICAgcmV0dXJuKC0yKTsK LSAgICB9Ci19Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1hGRVIKLS8qICBEIE8g WCBHIEUgVCAgLS0gIEdFVCBjb21tYW5kIHBhcnNlciB3aXRoIHN3aXRjaGVzICAqLwotCi0jaWZk ZWYgQ0tfTEFCRUxFRAotaW50IGdfbGZfb3B0cyA9IC0xOwotZXh0ZXJuIGludCBsZl9vcHRzOwot I2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLQotaW50Ci1kb3hnZXQoY3gpIGludCBjeDsgewotICAg IGV4dGVybiBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIHZhcmlhYmxl cyB3ZSBuZWVkICovCi0jaWZkZWYgUkVDVVJTSVZFCi0gICAgICByZWN1cnNpdmUsCi0jZW5kaWYg LyogUkVDVVJTSVZFICovCi0gICAgICB4ZmVybW9kZSwgZmRpc3BsYSwgcHJvdG9jb2wsIHVzZXBp cGVzLAotICAgICAgZ19iaW5hcnksIGdfeGZlcm1vZGUsIGdfZGlzcGxhLCBnX3JwYXRoLCBnX3Vz ZXBpcGVzOwotICAgIGV4dGVybiBjaGFyICogcmN2X21vdmU7ICAgICAgICAgICAgIC8qIERpcmVj dG9yeSB0byBtb3ZlIG5ldyBmaWxlcyB0byAqLwotICAgIGV4dGVybiBjaGFyICogcmN2X3JlbmFt ZTsgICAgICAgICAgIC8qIFdoYXQgdG8gcmVuYW1lIG5ldyBmaWxlcyB0byAqLwotICAgIGV4dGVy biBjaGFyICogcmN2ZXhjZXB0W107ICAgICAgICAgIC8qIFJFQ0VJVkUgLyBHRVQgZXhjZXB0aW9u IGxpc3QgKi8KLSAgICBpbnQgb3BrdCAgPSAgMDsgICAgICAgICAgICAgICAgICAgICAvKiBGbGFn IGZvciBPLVBhY2tldCBuZWVkZWQgKi8KLQotI2lmZGVmIFBJUEVTRU5ECi0gICAgZXh0ZXJuIGlu dCBwaXBlc2VuZDsKLSAgICBleHRlcm4gY2hhciAqIHJjdmZpbHRlcjsKLSNlbmRpZiAvKiBQSVBF U0VORCAqLwotICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIHJwYXRodGFiW107Ci0gICAgZXh0ZXJu IGludCBucnBhdGh0YWI7Ci0gICAgZXh0ZXJuIENLX09GRl9UIGNhbGlicmF0ZTsKLSAgICBpbnQg YXNuYW1lID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBoYXZlIGFzLW5hbWUg Ki8KLSAgICBpbnQga29ubHkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBLZXJtaXQtb25s eSBmdW5jdGlvbiAqLwotICAgIGludCBjLCBpLCBuLCBjb25maXJtZWQgPSAwOyAgICAgICAgIC8q IFdvcmtlcnMgKi8KLSAgICBpbnQgZ2V0dmFsID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBX aGV0aGVyIHRvIGdldCBzd2l0Y2ggdmFsdWUgKi8KLSAgICBpbnQgcmN2Y21kID0gMDsgICAgICAg ICAgICAgICAgICAgICAvKiBXaGV0aGVyIGl0IGlzIHRoZSBSRUNFSVZFIGNvbW1hbmQgKi8KLSAg ICBpbnQgbWdldCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIGl0IGlzIHRo ZSBNR0VUIGNvbW1hbmQgKi8KLSAgICBzdHJ1Y3Qgc3RyaW5naW50IHB2W1NORF9NQVgrMV07ICAg IC8qIFRlbXBvcmFyeSBhcnJheSBmb3Igc3dpdGNoIHZhbHVlcyAqLwotICAgIHN0cnVjdCBGREIg c3csIGZsLCBjbTsgICAgICAgICAgICAgIC8qIEZEQnMgZm9yIGVhY2ggcGFyc2UgZnVuY3Rpb24g Ki8KLSAgICBjaGFyICogY21kc3RyID0gInRoaXMgY29tbWFuZCI7Ci0KLSNpZmRlZiBORVdGVFAK LSAgICBpZiAoY3ggPT0gWFhHRVQgfHwgY3ggPT0gWFhSRUdFVCB8fCBjeCA9PSBYWE1HRVQgfHwg Y3ggPT0gWFhSRVRSKSB7Ci0gICAgICAgIGV4dGVybiBpbnQgZnRwZ2V0OwotICAgICAgICBleHRl cm4gaW50IGZ0cGlzb3BlbigpOwotICAgICAgICBpZiAoKGZ0cGdldCA9PSAxKSB8fCAoKGZ0cGdl dCA9PSAyKSAmJiBmdHBpc29wZW4oKSkpIHsKLQkgICAgaW50IHg7Ci0JICAgIHggPSBkb2Z0cGdl dChjeCwwKTsKLQkgICAgZGVidWcoRjEwMSwiZG9mdHBnZXQgcmV0dXJuIiwiIix4KTsKLQkgICAg aWYgKHggPiAtMSkKLQkgICAgICBzdWNjZXNzID0geDsKLQkgICAgZGVidWcoRjEwMSwiZG9mdHBn ZXQgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7Ci0JICAgIHJldHVybih4KTsKLQl9Ci0gICAgfQotI2Vu ZGlmIC8qIE5FV0ZUUCAqLwotCi0gICAgZGVidWcoRjEwMSwieGdldCBjeCIsIiIsY3gpOwotCi0g ICAgb29wdHMgPSAtMTsKLSAgICBvbW9kZSA9IC0xOwotCi0gICAgZm9yIChpID0gMDsgaSA8PSBT TkRfTUFYOyBpKyspIHsgICAgLyogSW5pdGlhbGl6ZSBzd2l0Y2ggdmFsdWVzICovCi0gICAgICAg IHB2W2ldLnN2YWwgPSBOVUxMOwotICAgICAgICBwdltpXS5pdmFsID0gLTE7Ci0gICAgICAgIHB2 W2ldLnd2YWwgPSAoQ0tfT0ZGX1QpLTE7Ci0gICAgfQotICAgIC8qIFByZXNldCBzd2l0Y2ggdmFs dWVzIGJhc2VkIG9uIHRvcC1sZXZlbCBjb21tYW5kIHRoYXQgY2FsbGVkIHVzICovCi0KLSAgICBz d2l0Y2ggKGN4KSB7Ci0gICAgICBjYXNlIFhYUkVDOiAgICAgICAgICAgICAgICAgICAgICAgLyog UkVDRUlWRSAqLwotICAgICAgICBjbWRzdHIgPSAiUkVDRUlWRSI7Ci0gICAgICAgIHJjdmNtZCA9 IDE7IGJyZWFrOwotICAgICAgY2FzZSBYWEdFVDogICAgICAgICAgICAgICAgICAgICAgIC8qIEdF VCAqLwotICAgICAgICBjbWRzdHIgPSAiR0VUIjsKLSAgICAgICAga29ubHkgPSAxOwotICAgICAg ICBicmVhazsKLSNpZmRlZiBDS19SRVNFTkQKLSAgICAgIGNhc2UgWFhSRUdFVDogICAgICAgICAg ICAgICAgICAgICAvKiBSRUdFVCAqLwotICAgICAgICBjbWRzdHIgPSAiUkVHRVQiOwotICAgICAg ICBrb25seSA9IDE7Ci0gICAgICAgIHB2W1NORF9CSU5dLml2YWwgPSAxOyAgICAgICAgICAgLyog SW1wbGllcyAvQklOQVJZICovCi0gICAgICAgIHB2W1NORF9SRVNdLml2YWwgPSAxOyBicmVhazsK LSNlbmRpZiAvKiBDS19SRVNFTkQgKi8KLSAgICAgIGNhc2UgWFhSRVRSOiAgICAgICAgICAgICAg ICAgICAgICAvKiBSRVRSSUVWRSAqLwotICAgICAgICBjbWRzdHIgPSAiUkVUUklFVkUiOwotICAg ICAgICBrb25seSA9IDE7Ci0gICAgICAgIHB2W1NORF9ERUxdLml2YWwgPSAxOyBicmVhazsKLSNp ZmRlZiBQSVBFU0VORAotICAgICAgY2FzZSBYWENSRUM6ICAgICAgICAgICAgICAgICAgICAgIC8q IENSRUNFSVZFICovCi0gICAgICAgIGNtZHN0ciA9ICJDUkVDRUlWRSI7Ci0gICAgICAgIGtvbmx5 ID0gMTsKLSAgICAgICAgcmN2Y21kID0gMTsKLSAgICAgICAgcHZbU05EX0NNRF0uaXZhbCA9IDE7 IGJyZWFrOwotICAgICAgY2FzZSBYWENHRVQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIENHRVQg Ki8KLSAgICAgICAgY21kc3RyID0gIkNHRVQiOwotICAgICAgICBrb25seSA9IDE7Ci0gICAgICAg IHB2W1NORF9DTURdLml2YWwgPSAxOyBicmVhazsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotI2lm bmRlZiBOT01HRVQKLSAgICAgIGNhc2UgWFhNR0VUOiAgICAgICAgICAgICAgICAgICAgICAvKiBN R0VUICovCi0gICAgICAgIGNtZHN0ciA9ICJNR0VUIjsKLSAgICAgICAga29ubHkgPSAxOwotICAg ICAgICBtZ2V0ID0gMTsgYnJlYWs7Ci0jZW5kaWYgLyogTk9NR0VUICovCi0gICAgfQotICAgIGRl YnVnKEYxMTEsInhnZXQgcmN2Y21kIixjbWRzdHIscmN2Y21kKTsKLSAgICBkZWJ1ZyhGMTAxLCJ4 Z2V0IGtvbmx5IiwiIixrb25seSk7Ci0KLSNpZmRlZiBDS19YWVoKLSAgICBpZiAoIXJjdmNtZCAm JiBwcm90b2NvbCAhPSBQUk9UT19LKSB7Ci0gICAgICAgIHByaW50ZigiP1NvcnJ5LCAlcyB3b3Jr cyBvbmx5IHdpdGggS2VybWl0IHByb3RvY29sXG4iLGNtZHN0cik7Ci0gICAgICAgIHJldHVybigt OSk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1hZWiAqLwotCi0gICAgLyogU2V0IHVwIGNoYWluZWQg cGFyc2UgZnVuY3Rpb25zLi4uICovCi0KLSAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICovCi0gICAgICAgICAgIF9D TUtFWSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgcmN2Y21k ID8KLSAgICAgICAgICAgIk9wdGlvbmFsIG5hbWUvdGVtcGxhdGUgdG8gc3RvcmUgaW5jb21pbmcg ZmlsZXMgdW5kZXIsIG9yIHN3aXRjaCIgOgotICAgICAgICAgICAiUmVtb3RlIGZpbGVuYW1lLCBv ciBzd2l0Y2giLCAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgcmN2Y21kID8gbnJjdnRh YiA6IG5nZXR0YWIsICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLSAgICAg ICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEg MjogNCA9IGNtc3dpICovCi0gICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAg LyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICByY3ZjbWQgPyByY3Z0YWIgOiBn ZXR0YWIsICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgJmZsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICk7Ci0g ICAgaWYgKHJjdmNtZCB8fCBtZ2V0KSAgICAgICAgICAgICAgICAgLyogUkVDRUlWRSBvciBNR0VU ICovCi0gICAgICBjbWZkYmkoJmZsLAotICAgICAgICAgICBfQ01UWFQsICAgICAgICAgICAgICAg ICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgIHJjdmNtZCA/ICAgICAgICAgICAgICAgICAg ICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICAgIk91dHB1dCBmaWxlbmFtZSBvciBDb21tYW5k IiA6IC8qIE91dHB1dCBmaWxlbmFtZSAqLwotICAgICAgICAgICAgICJGaWxlKHMpIHRvIEdFVCIs ICAgICAgICAgICAgICAvKiBGaWxlcyB3ZSBhcmUgYXNraW5nIGZvciAqLwotICAgICAgICAgICAi IiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIs ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAg ICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAx ICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDIgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgQ0tfWFlaCi0gICAgICAgICAg IChwcm90b2NvbCA9PSBQUk9UT19YIHx8IHByb3RvY29sID09IFBST1RPX1hDKSA/Ci0gICAgICAg ICAgICAgeHhzdHJpbmcgOgotICAgICAgICAgICAgIChyY3ZjbWQgPyAoeHhfc3RycCkwICA6IHh4 c3RyaW5nKQotI2Vsc2UKLSAgICAgICAgICAgcmN2Y21kID8gKHh4X3N0cnApMCAgOiB4eHN0cmlu ZyAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0jZW5kaWYgLyogQ0tfWFlaICovCi0jZWxzZSAg LyogQ09NTUVOVCAqLwotCSAgIHh4c3RyaW5nCQkJLyogQWx3YXlzIGV2YWx1YXRlIC0gZmRjIDIw MDYvMDIvMDEgKi8KLSNlbmRpZgkvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgLAotICAgICAg ICAgICBOVUxMLAotICAgICAgICAgICAmY20KLSAgICAgICAgICAgKTsKLSAgICBlbHNlCi0gICAg ICBjbWZkYmkoJmZsLCAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtb3RlIGZpbGVuYW1lIG9y IGNvbW1hbmQgKi8KLSAgICAgICAgICAgX0NNRkxELCAgICAgICAgICAgICAgICAgICAgICAvKiBm Y29kZSAqLwotICAgICAgICAgICAiUmVtb3RlIGZpbGVuYW1lIiwgICAgICAgICAgIC8qIGhscG1z ZyAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQg Ki8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJp bmcgZGF0YSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFk ZHRsIG51bWVyaWMgZGF0YSAxICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsCi0g ICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICZjbQotICAgICAgICAgICApOwotICAgIGNtZmRi aSgmY20sICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbmZpcm1hdGlvbiAqLwotICAgICAg ICAgICBfQ01DRk0sICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAg ICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAg ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEg Ki8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMiAqLwotICAgICAgICAgICBOVUxMLAotICAgICAgICAgICBOVUxMLAotICAgICAg ICAgICBOVUxMCi0gICAgICAgICAgICk7Ci0KLSAgICAvKiAoU2VlIGRveHNlbmQoKSBmb3IgZnVs bGVyIGNvbW1lbnRhcnkpICovCi0KLSAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQYXJzZSAwIG9yIG1vcmUgc3dpdGNoZXMgKi8KLSAgICAgICAgeCA9IGNtZmRiKCZz dyk7ICAgICAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KLSAgICAgICAgZGVidWco RjEwMSwieGdldCBjbWZkYiIsIiIseCk7Ci0gICAgICAgIGlmICh4IDwgMCkgICAgICAgICAgICAg ICAgICAgICAgLyogRXJyb3IgKi8KLSAgICAgICAgICBnb3RvIHhnZXR4OyAgICAgICAgICAgICAg ICAgICAvKiBvciByZXBhcnNlIG5lZWRlZCAqLwotICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUg IT0gX0NNS0VZKSAgIC8qIEJyZWFrIG91dCBpZiBub3QgYSBzd2l0Y2ggKi8KLSAgICAgICAgICBi cmVhazsKLSAgICAgICAgYyA9IGNtZ2JyaygpOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgYnJl YWsgY2hhcmFjdGVyICovCi0gICAgICAgIGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0g Jz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgIHByaW50Zigi P1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwotICAgICAgICAgICAg eCA9IC05OwotICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgfQotICAgICAgICBpZiAo IWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICBwcmludGYo Ij9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICB4ID0g LTk7Ci0gICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICB9Ci0gICAgICAgIG4gPSBjbXJl c3VsdC5ucmVzdWx0OyAgICAgICAgICAgLyogTnVtZXJpYyByZXN1bHQgPSBzd2l0Y2ggdmFsdWUg Ki8KLSAgICAgICAgZGVidWcoRjEwMSwieGdldCBzd2l0Y2giLCIiLG4pOwotCi0gICAgICAgIHN3 aXRjaCAobikgeyAgICAgICAgICAgICAgICAgICAgLyogUHJvY2VzcyB0aGUgc3dpdGNoICovCi0j aWZkZWYgUElQRVNFTkQKLSAgICAgICAgICBjYXNlIFNORF9DTUQ6ICAgICAgICAgICAgICAgICAv KiBUaGVzZSB0YWtlIG5vIGFyZ3MgKi8KLSAgICAgICAgICAgIGlmIChub3B1c2gpIHsKLSAgICAg ICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgc3lzdGVtIGNvbW1hbmQgYWNjZXNzIGlzIGRpc2Fi bGVkXG4iKTsKLSAgICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byB4 Z2V0eDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmN2ZmlsdGVyKSB7Ci0gICAgICAgICAgICAg ICAgcHJpbnRmKAotIj9Tb3JyeSwgbm8gR0VUIC9DT01NQU5EIHdoZW4gUkVDRUlWRSBGSUxURVIg c2VsZWN0ZWRcbiIpOwotICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICBn b3RvIHhnZXR4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJjdmNtZCkKLSAgICAg ICAgICAgICAgc3cuaGxwbXNnID0gIkNvbW1hbmQsIG9yIHN3aXRjaCI7IC8qIENoYW5nZSBoZWxw IG1lc3NhZ2UgKi8KLSAgICAgICAgICAgIC8qIEZhbGwgdGhydS4uLiAqLwotI2VuZGlmIC8qIFBJ UEVTRU5EICovCi0KLSAgICAgICAgICBjYXNlIFNORF9SRUM6ICAgICAgICAgICAgICAgICAvKiAv UkVDVVJTSVZFICovCi0gICAgICAgICAgICBwdltTTkRfUFRIXS5pdmFsID0gUEFUSF9SRUw7IC8q IEltcGxpZXMgcmVsYXRpdmUgcGF0aG5hbWVzICovCi0gICAgICAgICAgICBwdltuXS5pdmFsID0g MTsgICAgICAgICAgICAgLyogU2V0IHRoZSByZWN1cnNpdmUgZmxhZyAqLwotICAgICAgICAgICAg YnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNORF9SRVM6ICAgICAgICAgICAgICAgICAvKiAvUkVD T1ZFUiAqLwotICAgICAgICAgICAgcHZbU05EX0JJTl0uaXZhbCA9IDE7ICAgICAgIC8qIEltcGxp ZXMgL0JJTkFSWSAqLwotICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7ICAgICAgICAgICAgIC8q IFNldCB0aGUgcmVzZW5kIGZsYWcgKi8KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg Y2FzZSBTTkRfREVMOiAgICAgICAgICAgICAgICAgLyogL0RFTEVURSAqLwotICAgICAgICAgIGNh c2UgU05EX1NISDogICAgICAgICAgICAgICAgIC8qIC9RVUlFVCAqLwotICAgICAgICAgIGNhc2Ug U05EX0NBTDogICAgICAgICAgICAgICAgIC8qIC9DQUxJQlJBVEUgKi8KLSAgICAgICAgICBjYXNl IFNORF9YUEE6ICAgICAgICAgICAgICAgICAvKiAvVFJBTlNQQVJFTlQgKi8KLSAgICAgICAgICAg IHB2W25dLml2YWwgPSAxOyAgICAgICAgICAgICAvKiBKdXN0IHNldCB0aGUgYXBwcm9wcmlhdGUg ZmxhZyAqLwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNORF9QSVA6ICAg ICAgICAgICAgICAgICAvKiAvUElQRVM6e09OLE9GRn0gKi8KLSAgICAgICAgICAgIGlmICghZ2V0 dmFsKSB7Ci0gICAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7Ci0gICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWtleShvbm9mZiwy LCIiLCJvbiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAg ICAgICAgICBpZiAoIW5vcHVzaCkKLSAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IHg7Ci0gICAg ICAgICAgICBicmVhazsKLQotICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgbW9kZXMgLSBlYWNo IHVuZG9lcyB0aGUgb3RoZXJzICovCi0KLSAgICAgICAgICBjYXNlIFNORF9CSU46ICAgICAgICAg ICAgICAgICAvKiBCaW5hcnkgKi8KLSAgICAgICAgICBjYXNlIFNORF9UWFQ6ICAgICAgICAgICAg ICAgICAvKiBUZXh0ICovCi0gICAgICAgICAgY2FzZSBTTkRfSU1HOiAgICAgICAgICAgICAgICAg LyogSW1hZ2UgKi8KLSAgICAgICAgICBjYXNlIFNORF9MQkw6ICAgICAgICAgICAgICAgICAvKiBM YWJlbGVkICovCi0gICAgICAgICAgICBwdltTTkRfQklOXS5pdmFsID0gMDsgICAgICAgLyogVW5z ZXQgYWxsICovCi0gICAgICAgICAgICBwdltTTkRfVFhUXS5pdmFsID0gMDsKLSAgICAgICAgICAg IHB2W1NORF9JTUddLml2YWwgPSAwOwotICAgICAgICAgICAgcHZbU05EX0xCTF0uaXZhbCA9IDA7 Ci0gICAgICAgICAgICBwdltuXS5pdmFsID0gMTsgICAgICAgICAgICAgLyogU2V0IHRoZSByZXF1 ZXN0ZWQgb25lICovCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU05EX0VY QzogICAgICAgICAgICAgICAgIC8qIEV4Y2x1ZGVzICovCi0gICAgICAgICAgICBpZiAoIWdldHZh bCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiUGF0dGVybiIsIiIsJnMseHhz dHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAg ICAgICAgICAgICBwcmludGYoIj9QYXR0ZXJuIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAg ICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBnb3RvIHhn ZXR4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwpIGZyZWUocHZb bl0uc3ZhbCk7Ci0gICAgICAgICAgICB5ID0gc3RybGVuKHMpOwotICAgICAgICAgICAgaWYgKHkg PiAyNTYpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9QYXR0ZXJuIHRvbyBsb25nIC0gMjU2 IG1heFxuIik7Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8g eGdldHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdltuXS5zdmFsID0gbWFsbG9jKHkr MSk7Ci0gICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkgewotICAgICAgICAgICAgICAgIHN0cmNw eShwdltuXS5zdmFsLHMpOyAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgICAgICBwdltuXS5pdmFs ID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWZkZWYgQ09NTUVO VAotICAgICAgICAgIC8qIE5vdCBpbXBsZW1lbnRlZCAqLwotICAgICAgICAgIGNhc2UgU05EX1BS STogICAgICAgICAgICAgICAgIC8qIEdFVCB0byBwcmludGVyICovCi0gICAgICAgICAgICBwdltu XS5pdmFsID0gMTsKLSAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKLSAgICAgICAgICAg IGlmICgoeCA9IGNtZmxkKCJQcmludCBvcHRpb25zIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAg ICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgICAgIHB2W25dLnN2YWwgPSBtYWxsb2Mo KGludClzdHJsZW4ocykrMSk7Ci0gICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkKLSAgICAgICAg ICAgICAgc3RyY3B5KHB2W25dLnN2YWwscyk7ICAgICAvKiBzYWZlICovCi0gICAgICAgICAgICBi cmVhazsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgICAgICBjYXNlIFNORF9NT1Y6ICAg ICAgICAgICAgICAgICAvKiBNT1ZFIGFmdGVyICovCi0gICAgICAgICAgY2FzZSBTTkRfUkVOOiAg ICAgICAgICAgICAgICAgLyogUkVOQU1FIGFmdGVyICovCi0gICAgICAgICAgICBpZiAoIWdldHZh bCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWZsZChuID09IFNORF9NT1YgPwotICAg ICAgICAgICAiZGV2aWNlIGFuZC9vciBkaXJlY3RvcnkgZm9yIHNvdXJjZSBmaWxlIGFmdGVyIHNl bmRpbmciIDoKLSAgICAgICAgICAgIm5ldyBuYW1lIGZvciBzb3VyY2UgZmlsZSBhZnRlciBzZW5k aW5nIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBuID09IFNORF9NT1YgPyB4 eHN0cmluZyA6IE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICkpIDwgMCkgewotICAg ICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Zigi JXNcbiIsIG4gPT0gU05EX01PViA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAiP0Rlc3Rp bmF0aW9uIHJlcXVpcmVkIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAiP05ldyBuYW1l IHJlcXVpcmVkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAg ICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBnb3RvIHhn ZXR4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwpIHsKLSAgICAg ICAgICAgICAgICBmcmVlKHB2W25dLnN2YWwpOwotICAgICAgICAgICAgICAgIHB2W25dLnN2YWwg PSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7Ci0gICAg ICAgICAgICB5ID0gc3RybGVuKHMpOwotICAgICAgICAgICAgaWYgKHkgPiAwKSB7Ci0gICAgICAg ICAgICAgICAgcHZbbl0uc3ZhbCA9IG1hbGxvYyh5KzEpOwotICAgICAgICAgICAgICAgIGlmIChw dltuXS5zdmFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmNweShwdltuXS5zdmFsLHMpOyAv KiBzYWZlICovCi0gICAgICAgICAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg Y2FzZSBTTkRfQVNOOiAgICAgICAgICAgICAgICAgLyogQXMtbmFtZSAqLwotICAgICAgICAgICAg aWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgaWYgKG1nZXQpIHsKLSAgICAgICAgICAg ICAgICBwcmludGYoIj9Tb3JyeSwgYXMtbmFtZSBub3QgYWxsb3dlZCB3aXRoIE1HRVRcbiIpOwot ICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKAotI2lmZGVmIENPTU1FTlQKLQkJKHggPSBjbWZs ZCgiTmFtZSB0byBzdG9yZSBpdCB1bmRlciIsIiIsJnMsTlVMTCkpCi0jZWxzZQotCQkoeCA9IGNt ZmxkKCJOYW1lIHRvIHN0b3JlIGl0IHVuZGVyIiwiIiwmcyx4eHN0cmluZykpCi0jZW5kaWYJLyog Q09NTUVOVCAqLwotCQk8IDApCi0gICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgICAg ICBzID0gYnJzdHJpcChzKTsKLSAgICAgICAgICAgIGlmICgoeSA9IHN0cmxlbihzKSkgPiAwKSB7 Ci0gICAgICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7Ci0gICAg ICAgICAgICAgICAgcHZbbl0uc3ZhbCA9IG1hbGxvYyh5KzEpOwotICAgICAgICAgICAgICAgIGlm IChwdltuXS5zdmFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmNweShwdltuXS5zdmFsLHMp OyAvKiBzYWZlICovCi0gICAgICAgICAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWZkZWYg UElQRVNFTkQKLSAgICAgICAgICBjYXNlIFNORF9GTFQ6ICAgICAgICAgICAgICAgICAvKiBGaWx0 ZXIgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInhnZXQgL2ZpbHRlciBnZXR2YWwiLCIiLGdl dHZhbCk7Ci0gICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAo KHggPSBjbWZsZCgiRmlsdGVyIHByb2dyYW0gdG8gcmVjZWl2ZSB0aHJvdWdoIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICIiLCZzLE5VTEwpKSA8IDApIHsKLSAgICAgICAgICAgICAgICBp ZiAoeCA9PSAtMykKLSAgICAgICAgICAgICAgICAgIHMgPSAiIjsKLSAgICAgICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgaWYgKCpzKSBzID0gYnJzdHJpcChzKTsKLSAgICAgICAgICAgIHkgPSBzdHJsZW4ocyk7 Ci0gICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgeTsgeCsrKSB7ICAgLyogTWFrZSBzdXJlIHRo ZXkgaW5jbHVkZWQgIlx2KC4uLikiICovCi0gICAgICAgICAgICAgICAgaWYgKHNbeF0gIT0gJ1xc JykgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHNbeCsxXSA9PSAndicpIGJyZWFrOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHggPT0geSkgewotICAgICAgICAgICAgICAg IHByaW50ZigKLSAgICAgICAgICAgICAgICAiP0ZpbHRlciBtdXN0IGNvbnRhaW4gYSByZXBsYWNl bWVudCB2YXJpYWJsZSBmb3IgZmlsZW5hbWUuXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKLSAgICAgICAgICAgIGlm IChwdltuXS5zdmFsKSB7Ci0gICAgICAgICAgICAgICAgZnJlZShwdltuXS5zdmFsKTsKLSAgICAg ICAgICAgICAgICBwdltuXS5zdmFsID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGlmICgoeSA9IHN0cmxlbihzKSkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChwdltuXS5z dmFsID0gbWFsbG9jKHkrMSkpKQotICAgICAgICAgICAgICAgICAgc3RyY3B5KHB2W25dLnN2YWws cyk7IC8qIHNhZmUgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlm IC8qIFBJUEVTRU5EICovCi0KLSAgICAgICAgICBjYXNlIFNORF9QVEg6ICAgICAgICAgICAgICAg ICAvKiBQYXRobmFtZXMgKi8KLSAgICAgICAgICAgIGlmICghZ2V0dmFsKSB7Ci0gICAgICAgICAg ICAgICAgcHZbbl0uaXZhbCA9IFBBVEhfUkVMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkocnBhdGh0YWIsbnJwYXRodGFi LCIiLCJvbiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAg ICAgICAgICBwdltuXS5pdmFsID0geDsgICAgICAgICAgICAgLyogRGl0dG8gKi8KLSAgICAgICAg ICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTTkRfTkFNOiAgICAgICAgICAgICAgICAgLyog RmlsZW5hbWVzICovCi0gICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAg ICBpZiAoKHggPSBjbWtleShmbnRhYixuZm50YWIsIiIsImNvbnZlcnRlZCIseHhzdHJpbmcpKSA8 IDApCi0gICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgICAgICBwdltuXS5pdmFsID0g eDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTTkRfUFJPOiAgICAgICAg ICAgICAgICAgLyogUHJvdG9jb2wgdG8gdXNlICovCi0gICAgICAgICAgICBpZiAoIWdldHZhbCkg YnJlYWs7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWtleShwcm90b3MsbnByb3RvcywiRmlsZS10 cmFuc2ZlciBwcm90b2NvbCIsIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmlu ZykpIDwgMCkgewotICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKQotICAgICAgICAgICAgICAg ICAgeCA9IDA7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgZ290byB4 Z2V0eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInhnZXQgL3Byb3Rv IixhdG1idWYseCk7Ci0gICAgICAgICAgICBwdltuXS5pdmFsID0geDsKLSAgICAgICAgICAgIGlm IChrb25seSAmJiB4ICE9IFBST1RPX0spIHsKLSAgICAgICAgICAgICAgICBwcmludGYoCi0iP1Nv cnJ5LCB0aGlzIGNvbW1hbmQgd29ya3Mgb25seSB3aXRoIEtlcm1pdCBwcm90b2NvbFxuIgotICAg ICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAg ICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0K LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBzd2l0 Y2ggdmFsdWUgLSAlZFxuIixjbXJlc3VsdC5ucmVzdWx0KTsKLSAgICAgICAgICAgIHggPSAtOTsK LSAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVidWcoRjEw MSwieGdldCBjbXJlc3VsdCBmY29kZSIsIiIsY21yZXN1bHQuZmNvZGUpOwotCi0gICAgY21hcmcg PSBsaW5lOyAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBzdHJpbmcgcG9pbnRl cnMgKi8KLSAgICBjbWFyZzIgPSB0bXBidWY7Ci0gICAgYXNuYW1lID0gMDsKLSAgICBsaW5lWzBd ID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgYnVmZmVycy4gKi8KLSAgICB0bXBi dWZbMF0gPSBOVUw7Ci0KLSAgICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7ICAgICAgICAgICAv KiBIb3cgZGlkIHdlIGdldCBvdXQgb2Ygc3dpdGNoIGxvb3AgKi8KLSAgICAgIGNhc2UgX0NNRkxE OiAgICAgICAgICAgICAgICAgICAgICAvKiAoMykgUmVtb3RlIGZpbGVzcGVjICovCi0gICAgICAg IGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0laKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgICBjYXNlIF9DTVRYVDogICAgICAgICAgICAgICAgICAgICAgLyogKDQpIEFzLW5h bWUgKi8KLSAgICAgICAgaWYgKHJjdmNtZCkgewotICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1 ZixjbXJlc3VsdC5zcmVzdWx0LFRNUEJVRlNJWik7Ci0gICAgICAgICAgICBpZiAoKGludClzdHJs ZW4odG1wYnVmKSA+IDApCi0gICAgICAgICAgICAgIGFzbmFtZSA9IDE7Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICBja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJ Wik7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgX0NNQ0ZNOiAgICAgICAgICAgICAgICAgICAgICAv KiAoNikgQ29uZmlybWF0aW9uICovCi0gICAgICAgIGNvbmZpcm1lZCA9IDE7Ci0gICAgICAgIGJy ZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBmdW5jdGlv biBjb2RlOiAlZFxuIixjbXJlc3VsdC5mY29kZSk7Ci0gICAgICAgIHggPSAtOTsKLSAgICAgICAg Z290byB4Z2V0eDsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwieGdldCBzdHJpbmciLGNtYXJnLDAp OwotICAgIGRlYnVnKEYxMDEsInhnZXQgY29uZmlybWVkIiwiIixjb25maXJtZWQpOwotCi0gICAg Y21hcmcgPSBicnN0cmlwKGNtYXJnKTsgICAgICAgICAgICAgLyogU3RyaXAgYW55IGJyYWNlcyAq LwotCi0gICAgaWYgKCFjb25maXJtZWQpIHsgICAgICAgICAgICAgICAgICAgLyogQ1Igbm90IHR5 cGVkIHlldCwgZ2V0IG1vcmUgZmllbGRzICovCi0gICAgICAgIGlmIChwdltTTkRfQ01EXS5pdmFs ID4gMCkgewotICAgICAgICAgICAgZGVidWcoRjEwMCwieGdldCBjYWxsaW5nIGNtdHh0IiwiIiww KTsKLSAgICAgICAgICAgIHggPSBjbXR4dCgiTG9jYWwgY29tbWFuZCB0byBwaXBlIGludG8iLCIi LCZzLE5VTEwpOwotICAgICAgICAgICAgaWYgKHggPCAwICYmIHggIT0gLTMpIGdvdG8geGdldHg7 Ci0gICAgICAgICAgICBpZiAoeCAhPSAtMykgewotICAgICAgICAgICAgICAgIGNrc3RybmNweSh0 bXBidWYscyxUTVBCVUZTSVopOwotICAgICAgICAgICAgICAgIGFzbmFtZSA9IDE7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoIXJjdmNtZCkgewotI2lmZGVmIFZNUwotICAgICAg ICAgICAgLyogY21vZmkoKSBmYWlscyBpZiB5b3UgZ2l2ZSBpdCBhIGRpcmVjdG9yeSBuYW1lICov Ci0gICAgICAgICAgICB4ID0gY21mbGQoIk5hbWUgb3IgZGlyZWN0b3J5IGZvciBpbmNvbWluZyBm aWxlIiwiIiwmcyxOVUxMKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInhnZXQgY21mbGQiLHMs eCk7Ci0jZWxzZQotICAgICAgICAgICAgeCA9IGNtb2ZpKCJOYW1lIG9yIGRpcmVjdG9yeSBmb3Ig aW5jb21pbmcgZmlsZSIsIiIsJnMsTlVMTCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJ4Z2V0 IGNtb2ZpIixzLHgpOwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICAgICAgaWYgKHggPCAwICYm IHggIT0gLTMpIGdvdG8geGdldHg7Ci0gICAgICAgICAgICBpZiAoeCAhPSAtMykgewotICAgICAg ICAgICAgICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVopOwotICAgICAgICAgICAgICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgZ290byB4Z2V0eDsKLSAgICAgICAgICAgICAgICBhc25h bWUgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIC8qIEFycml2ZSBo ZXJlIHdpdGggY21hcmcgYW5kIGNtYXJnMiBhbGwgc2V0ICovCi0KLSAgICBkZWJ1ZyhGMTExLCJ4 Z2V0IGFzbmFtZSIsY21hcmcyLGFzbmFtZSk7Ci0gICAgaWYgKCFhc25hbWUpIHsKLSAgICAgICAg aWYgKHB2W1NORF9BU05dLnN2YWwpCi0gICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixwdltTTkRf QVNOXS5zdmFsLFRNUEJVRlNJWik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB0bXBidWZbMF0g PSBOVUw7Ci0gICAgfQotICAgIGNtYXJnMiA9IGJyc3RyaXAoY21hcmcyKTsgICAgICAgICAgIC8q IFN0cmlwIG91dGVyIGJyYWNlcyBpZiBhbnkuICovCi0gICAgZGVidWcoRjExMCwieGdldCBjbWFy ZyIsY21hcmcsMCk7Ci0gICAgZGVidWcoRjExMCwieGdldCBjbWFyZzIiLGNtYXJnMiwwKTsKLQot ICAgIGlmICghKmNtYXJnICYmCi0gICAgICAgIChjeCA9PSBYWEdFVCB8fCBjeCA9PSBYWFJFR0VU IHx8IGN4ID09IFhYQ0dFVCB8fCBjeCA9PSBYWE1HRVQpKSB7Ci0gICAgICAgIHByaW50ZigiP0Eg cmVtb3RlIGZpbGUgc3BlY2lmaWNhdGlvbiBpcyByZXF1aXJlZFxuIik7Ci0gICAgICAgIHggPSAt OTsKLSAgICAgICAgZ290byB4Z2V0eDsKLSAgICB9Ci0jaWZkZWYgUElQRVNFTkQKLSAgICBpZiAo cHZbU05EX0NNRF0uaXZhbCA+IDApIHsgICAgICAgICAvKiAvQ09NTUFORCBzZXRzIHBpcGVzZW5k IGZsYWcgKi8KLSAgICAgICAgeCA9IC05OwotICAgICAgICBpZiAoISpjbWFyZzIpIHsKLSAgICAg ICAgICAgIHByaW50ZigiP0NvbW1hbmQgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgZ290byB4 Z2V0eDsKLSAgICAgICAgfSBlbHNlIGlmIChub3B1c2gpIHsKLSAgICAgICAgICAgIHByaW50Zigi P1NvcnJ5LCBzeXN0ZW0gY29tbWFuZCBhY2Nlc3MgaXMgZGlzYWJsZWRcbiIpOwotICAgICAgICAg ICAgZ290byB4Z2V0eDsKLSAgICAgICAgfSBlbHNlIGlmIChyY3ZmaWx0ZXIpIHsKLSAgICAgICAg ICAgIHByaW50ZigiP1NvcnJ5LCBubyBHRVQgL0NPTU1BTkQgd2hpbGUgUkVDRUlWRSBGSUxURVIg c2VsZWN0ZWRcbiIpOwotICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgfSBlbHNlCi0g ICAgICAgICAgcGlwZXNlbmQgPSAxOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJ4Z2V0IC9DT01N QU5EIHBpcGVzZW5kIiwiIixwaXBlc2VuZCk7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotI2lm ZGVmIENLX1JFU0VORAotICAgIGlmIChwdltTTkRfUkVTXS5pdmFsID4gMCkgeyAgICAgICAgIC8q IFJFR0VUIG9yIEdFVCAvUkVDT1ZFUiAqLwotI2lmZGVmIFJFQ1VSU0lWRQotICAgICAgICBpZiAo cHZbU05EX1JFQ10uaXZhbCA+IDApIHsgICAgIC8qIFJFQ1VSU0lWRSAqLwotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgICAgIHByaW50ZigiP1Vuc3VwcG9ydGVkIG9wdGlvbiBjb21iaW5hdGlvbjog L1JFQ09WRVIgL1JFQ1VSU0lWRVxuIik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAg ICBnb3RvIHhnZXR4OwotI2Vsc2UKLSAgICAgICAgICAgIG9wa3QgPSAxOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSAgICAgICAgfQotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgICAgICBpZiAo cHZbU05EX0RFTF0uaXZhbCA+IDApIHsgICAgIC8qIC9ERUxFVEUgKi8KLSNpZmRlZiBDT01NRU5U Ci0gICAgICAgICAgICBwcmludGYoIj9VbnN1cHBvcnRlZCBvcHRpb24gY29tYmluYXRpb246IC9S RUNPVkVSIC9ERUxFVEVcbiIpOwotICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgZ290 byB4Z2V0eDsKLSNlbHNlCi0gICAgICAgICAgICBvcGt0ID0gMTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0KLSAgICBpZiAo cHZbU05EX0VYQ10uaXZhbCA+IDApICAgICAgICAgICAvKiAvRVhDRVBUICovCi0gICAgICBtYWtl bGlzdChwdltTTkRfRVhDXS5zdmFsLHJjdmV4Y2VwdCxOU05ERVhDRVBUKTsKLQotI2lmZGVmIElL U19PUFRJT04KLSAgICBpZiAoIXJjdmNtZAotI2lmZGVmIENLX1hZWgotICAgICAgICAgJiYgcHJv dG9jb2wgPT0gUFJPVE9fSwotI2VuZGlmIC8qIENLX1hZWiAqLwotICAgICAgICAgKSB7Ci0gICAg ICAgIGlmICghaWtzX3dhaXQoS0VSTUlUX1JFUV9TVEFSVCwxKSkgewotICAgICAgICAgICAgcHJp bnRmKAotICAgICAgICAgICAgICAiP0EgS2VybWl0IFNlcnZlciBpcyBub3QgYXZhaWxhYmxlIHRv IHByb2Nlc3MgdGhpcyBjb21tYW5kXG4iKTsKLSAgICAgICAgICAgIHggPSAtOTsgICAgICAgICAg ICAgICAgICAgICAvKiBjb3JyZWN0IHRoZSByZXR1cm4gY29kZSAqLwotICAgICAgICAgICAgZ290 byB4Z2V0eDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0KLSNp ZmRlZiBDS19YWVoKLSAgICB7Ci0gICAgICAgIGludCBwbywgcGc7ICAgICAgICAgICAgICAgICAg ICAgLyogKGZvciBjbGFyaXR5KSAqLwotICAgICAgICBwbyA9IHB2W1NORF9QUk9dLml2YWw7ICAg ICAgICAgIC8qIC9QUk9UT0NPTCBvcHRpb24gKi8KLSAgICAgICAgcGcgPSBwcm90b2NvbDsgICAg ICAgICAgICAgICAgICAvKiBQcm90b2NvbCBnbG9iYWwgICovCi0gICAgICAgIGlmICgocmN2Y21k ICYmICEqY21hcmcyKSAmJiAgICAgLyogSWYgbm8gYXMtbmFtZSB3YXMgZ2l2ZW4gKi8KLSAgICAg ICAgICAgIC8qIGFuZCAvUFJPVE9DT0wgaXMgWE1PREVNIG9yIGdsb2JhbCBwcm90b2NvbCBpcyBY TU9ERU0uLi4gKi8KLSAgICAgICAgICAgICgocG8gPCAgMCAmJiAocGcgPT0gUFJPVE9fWCB8fCBw ZyA9PSBQUk9UT19YQykpIHx8Ci0gICAgICAgICAgICAgKHBvID4gLTEgJiYgKHBvID09IFBST1RP X1ggfHwgcG8gPT0gUFJPVE9fWEMpKSkKLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgcHJp bnRmKAotIlNvcnJ5LCB5b3UgbXVzdCBzcGVjaWZ5IGEgbmFtZSB3aGVuIHJlY2VpdmluZyBhIGZp bGUgd2l0aCBYTU9ERU0gcHJvdG9jb2xcbiIKLSAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgeCA9IC05OwotICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgfQotICAgIH0K LSNlbmRpZiAvKiBDS19YWVogKi8KLQotI2lmZGVmIFJFQ1VSU0lWRQotICAgIGlmIChwdltTTkRf UkVDXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIFJFQ1VSU0lWRSAqLwotICAgICAgICByZWN1cnNp dmUgPSAxOwotICAgICAgICBwdltTTkRfUFRIXS5pdmFsID0gUEFUSF9SRUw7ICAgIC8qIEltcGxp ZXMgcmVsYXRpdmUgcGF0aG5hbWVzIHRvbyAqLwotICAgIH0KLSNlbmRpZiAvKiBSRUNVUlNJVkUg Ki8KLQotICAgIGlmIChwdltTTkRfUElQXS5pdmFsID4gLTEpIHsKLSAgICAgICAgZ191c2VwaXBl cyA9IHVzZXBpcGVzOwotICAgICAgICB1c2VwaXBlcyA9IHB2W1NORF9QSVBdLml2YWw7Ci0gICAg fQotCi0gICAgLyogU2F2ZSBnbG9iYWwgcHJvdG9jb2wgcGFyYW1ldGVycyAqLwotCi0gICAgZ19w cm90byA9IHByb3RvY29sOwotI2lmZGVmIENLX0xBQkVMRUQKLSAgICBnX2xmX29wdHMgPSBsZl9v cHRzOyAgICAgICAgICAgICAgICAvKiBTYXZlIGxhYmVsZWQgdHJhbnNmZXIgb3B0aW9ucyAqLwot I2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLSAgICBnX3VycHNpeiA9IHVycHNpejsgICAgICAgICAg ICAgICAgICAvKiBSZWNlaXZlIHBhY2tldCBsZW5ndGggKi8KLSAgICBnX3Nwc2l6ZiA9IHNwc2l6 ZjsgICAgICAgICAgICAgICAgICAvKiBTZW5kIHBhY2tldCBsZW5ndGggZmxhZyAqLwotICAgIGdf c3BzaXogPSBzcHNpejsgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgcGFja2V0IGxlbmd0aCAq LwotICAgIGdfc3BzaXpyID0gc3BzaXpyOyAgICAgICAgICAgICAgICAgIC8qIGV0YyBldGMgKi8K LSAgICBnX3NwbWF4ID0gc3BtYXg7Ci0gICAgZ193c2xvdHIgPSB3c2xvdHI7Ci0gICAgZ19wcmVm aXhpbmcgPSBwcmVmaXhpbmc7Ci0gICAgZ19mbmNhY3QgPSBmbmNhY3Q7Ci0gICAgZ19mbmNudiA9 IGZuY252OwotICAgIGdfZm5zcGF0aCA9IGZuc3BhdGg7Ci0gICAgZ19mbnJwYXRoID0gZm5ycGF0 aDsKLSAgICBnX3hmcnhsYSA9IHhmcnhsYTsKLQotICAgIGlmIChwdltTTkRfUFJPXS5pdmFsID4g LTEpIHsgICAgICAgIC8qIENoYW5nZSBhY2NvcmRpbmcgdG8gc3dpdGNoICovCi0gICAgICAgIHBy b3RvY29sID0gcHZbU05EX1BST10uaXZhbDsKLSAgICAgICAgaWYgKHB0YWJbcHJvdG9jb2xdLnJw a3RsZW4gPiAtMSkgICAvKiBjb3BpZWQgZnJvbSBpbml0cHJvdG8oKSAqLwotICAgICAgICAgICAg dXJwc2l6ID0gcHRhYltwcm90b2NvbF0ucnBrdGxlbjsKLSAgICAgICAgaWYgKHB0YWJbcHJvdG9j b2xdLnNwa3RmbGcgPiAtMSkKLSAgICAgICAgICAgIHNwc2l6ZiA9IHB0YWJbcHJvdG9jb2xdLnNw a3RmbGc7Ci0gICAgICAgIGlmIChwdGFiW3Byb3RvY29sXS5zcGt0bGVuID4gLTEpIHsKLSAgICAg ICAgICAgIHNwc2l6ID0gcHRhYltwcm90b2NvbF0uc3BrdGxlbjsKLSAgICAgICAgICAgIGlmIChz cHNpemYpCi0gICAgICAgICAgICAgICAgc3BzaXpyID0gc3BtYXggPSBzcHNpejsKLSAgICAgICAg fQotICAgICAgICBpZiAocHRhYltwcm90b2NvbF0ud2luc2l6ZSA+IC0xKQotICAgICAgICAgICAg d3Nsb3RyID0gcHRhYltwcm90b2NvbF0ud2luc2l6ZTsKLSAgICAgICAgaWYgKHB0YWJbcHJvdG9j b2xdLnByZWZpeCA+IC0xKQotICAgICAgICAgICAgcHJlZml4aW5nID0gcHRhYltwcm90b2NvbF0u cHJlZml4OwotICAgICAgICBpZiAocHRhYltwcm90b2NvbF0uZm5jYSA+IC0xKQotICAgICAgICAg ICAgZm5jYWN0ICA9IHB0YWJbcHJvdG9jb2xdLmZuY2E7Ci0gICAgICAgIGlmIChwdGFiW3Byb3Rv Y29sXS5mbmNuID4gLTEpCi0gICAgICAgICAgICBmbmNudiAgID0gcHRhYltwcm90b2NvbF0uZm5j bjsKLSAgICAgICAgaWYgKHB0YWJbcHJvdG9jb2xdLmZuc3AgPiAtMSkKLSAgICAgICAgICAgIGZu c3BhdGggPSBwdGFiW3Byb3RvY29sXS5mbnNwOwotICAgICAgICBpZiAocHRhYltwcm90b2NvbF0u Zm5ycCA+IC0xKQotICAgICAgICAgICAgZm5ycGF0aCA9IHB0YWJbcHJvdG9jb2xdLmZucnA7Ci0g ICAgfQotICAgIGRlYnVnKEYxMDEsInhnZXQgcHJvdG9jb2wiLCIiLHByb3RvY29sKTsKLSAgICBk ZWJ1ZyhGMTExLCJ4Z2V0IGNtYXJnMiIsY21hcmcyLHhmZXJtb2RlKTsKLQotICAgIGdfeGZlcm1v ZGUgPSB4ZmVybW9kZTsKLSAgICBnX2JpbmFyeSA9IGJpbmFyeTsKLSAgICBpZiAocHZbU05EX0JJ Tl0uaXZhbCA+IDApIHsgICAgICAgICAvKiBDaGFuZ2UgYWNjb3JkaW5nIHRvIHN3aXRjaCAqLwot ICAgICAgICB4ZmVybW9kZSA9IFhNT0RFX007Ci0gICAgICAgIGJpbmFyeSA9IFhZRlRfQjsgICAg ICAgICAgICAgICAgLyogRklMRSBUWVBFIEJJTkFSWSAqLwotICAgICAgICBvbW9kZSA9IEdNT0Rf QklOOyAgICAgICAgICAgICAgIC8qIE8tUGFja2V0IG1vZGUgKi8KLSAgICAgICAgZGVidWcoRjEw MSwiZG94Z2V0IC9CSU5BUlkgeGZlcm1vZGUiLCIiLHhmZXJtb2RlKTsKLSAgICB9IGVsc2UgaWYg KHB2W1NORF9UWFRdLml2YWwgPiAwKSB7ICAvKiBEaXR0byBmb3IgL1RFWFQgKi8KLSAgICAgICAg eGZlcm1vZGUgPSBYTU9ERV9NOwotICAgICAgICBiaW5hcnkgPSBYWUZUX1Q7Ci0gICAgICAgIG9t b2RlID0gR01PRF9UWFQ7Ci0gICAgICAgIGRlYnVnKEYxMDEsImRveGdldCAvVEVYVCB4ZmVybW9k ZSIsIiIseGZlcm1vZGUpOwotICAgIH0gZWxzZSBpZiAocHZbU05EX0lNR10uaXZhbCA+IDApIHsK LSAgICAgICAgeGZlcm1vZGUgPSBYTU9ERV9NOwotI2lmZGVmIFZNUwotICAgICAgICBiaW5hcnkg PSBYWUZUX0k7Ci0jZWxzZQotICAgICAgICBiaW5hcnkgPSBYWUZUX0I7Ci0jZW5kaWYgLyogVk1T ICovCi0gICAgICAgIG9tb2RlID0gR01PRF9UWFQ7Ci0gICAgICAgIGRlYnVnKEYxMDEsImRveGdl dCAvSU1BR0UgeGZlcm1vZGUiLCIiLHhmZXJtb2RlKTsKLSAgICB9Ci0jaWZkZWYgQ0tfTEFCRUxF RAotICAgIGVsc2UgaWYgKHB2W1NORF9MQkxdLml2YWwgPiAwKSB7Ci0gICAgICAgIHhmZXJtb2Rl ID0gWE1PREVfTTsKLSAgICAgICAgYmluYXJ5ID0gWFlGVF9MOwotICAgICAgICBvbW9kZSA9IEdN T0RfTEJMOwotICAgICAgICBkZWJ1ZyhGMTAxLCJkb3hnZXQgL0xBQkVMRUQgeGZlcm1vZGUiLCIi LHhmZXJtb2RlKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotICAgIGRlYnVnKEYx MDEsInhnZXQgYmluYXJ5IiwiIixiaW5hcnkpOwotICAgIGRlYnVnKEYxMDEsInhnZXQgb21vZGUi LCIiLG9tb2RlKTsKLQotICAgIGlmIChwdltTTkRfWFBBXS5pdmFsID4gMCkgICAgICAgICAgIC8q IC9UUkFOU1BBUkVOVCAqLwotICAgICAgeGZyeGxhID0gMDsgICAgICAgICAgICAgICAgICAgICAg IC8qIERvbid0IHRyYW5zbGF0ZSBjaGFyYWN0ZXIgc2V0cyAqLwotCi0jaWZkZWYgUElQRVNFTkQK LSAgICBpZiAocHZbU05EX0ZMVF0uaXZhbCA+IDApCi0gICAgICBtYWtlc3RyKCZyY3ZmaWx0ZXIs cHZbU05EX0ZMVF0uc3ZhbCk7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotI2lmZGVmIENLX1RN UERJUgotICAgIGlmIChwdltTTkRfTU9WXS5pdmFsID4gMCkgewotICAgICAgICBpbnQgbGVuOwot ICAgICAgICBjaGFyICogcCA9IHB2W1NORF9NT1ZdLnN2YWw7Ci0jaWZkZWYgQ0tfTE9HSU4KLSAg ICAgICAgaWYgKGlzZ3Vlc3QpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCAvTU9WRS1U TyBub3QgYXZhaWxhYmxlIHRvIGd1ZXN0c1xuIik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAg ICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAg ICAgICAgbGVuID0gc3RybGVuKHApOwotICAgICAgICBpZiAoIWlzZGlyKHApKSB7ICAgICAgICAg ICAgICAgIC8qIENoZWNrIGRpcmVjdG9yeSAqLwotI2lmZGVmIENLX01LRElSCi0gICAgICAgICAg ICBjaGFyICogcyA9IE5VTEw7Ci0gICAgICAgICAgICBzID0gKGNoYXIgKiltYWxsb2MobGVuICsg NCk7Ci0gICAgICAgICAgICBpZiAocykgewotICAgICAgICAgICAgICAgIHN0cmNweShzLHApOyAg ICAgICAgICAgIC8qIHNhZmUgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgICAgICAgICAgICAg IGlmIChzW2xlbi0xXSAhPSAnOicpIHsgc1tsZW4rK10gPSAnOic7IHNbbGVuXSA9IE5VTDsgfQot I2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoc1tsZW4tMV0gIT0gJy8nKSB7IHNbbGVuKytdID0g Jy8nOyBzW2xlbl0gPSBOVUw7IH0KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotICAgICAgICAg ICAgICAgIHNbbGVuKytdID0gJ1gnOwotICAgICAgICAgICAgICAgIHNbbGVuXSA9IE5VTDsKLSAg ICAgICAgICAgICAgICB4ID0gem1rZGlyKHMpOwotICAgICAgICAgICAgICAgIGZyZWUocyk7Ci0g ICAgICAgICAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Zigi P0Nhbid0IGNyZWF0ZSBcIiVzXCJcbiIscCk7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAtOTsK LSAgICAgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgcHJpbnRmKCI/RGlyZWN0b3J5IFwiJXNcIiBu b3QgZm91bmRcbiIscCk7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICBnb3RvIHhn ZXR4OwotI2VuZGlmIC8qIENLX01LRElSICovCi0gICAgICAgIH0KLSAgICAgICAgemZucWZwKHAs TElOQlVGU0laLGxpbmUpOwotICAgICAgICBtYWtlc3RyKCZyY3ZfbW92ZSxsaW5lKTsKLSAgICB9 Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0KLSAgICBpZiAocHZbU05EX1JFTl0uaXZhbCA+IDAp IHsgICAgICAgICAvKiAvUkVOQU1FLVRPOm5hbWUgKi8KLSAgICAgICAgY2hhciAqIHAgPSBwdltT TkRfUkVOXS5zdmFsOwotI2lmZGVmIENLX0xPR0lOCi0gICAgICAgIGlmIChpc2d1ZXN0KSB7Ci0g ICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgL1JFTkFNRS1UTyBub3QgYXZhaWxhYmxlIHRvIGd1 ZXN0c1xuIik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICBnb3RvIHhnZXR4Owot ICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICAgICAgaWYgKCFwKSBwID0gIiI7 Ci0gICAgICAgIGlmICghKnApIHsKLSAgICAgICAgICAgIHByaW50ZigiP05ldyBuYW1lIHJlcXVp cmVkIGZvciAvUkVOQU1FXG4iKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdv dG8geGdldHg7Ci0gICAgICAgIH0KLSAgICAgICAgcCA9IGJyc3RyaXAocCk7Ci0gICAgICAgIG1h a2VzdHIoJnJjdl9yZW5hbWUscCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsInhnZXQgcmN2X3JlbmFt ZSIsIiIsMCk7Ci0gICAgfQotCi0jaWZkZWYgQ0FMSUJSQVRFCi0gICAgaWYgKHB2W1NORF9DQUxd Lml2YWwgPiAwKQotICAgICAgY2FsaWJyYXRlID0gKENLX09GRl9UKTE7Ci0jZW5kaWYgLyogQ0FM SUJSQVRFICovCi0gICAgZ19kaXNwbGEgPSBmZGlzcGxhOwotICAgIGlmIChwdltTTkRfU0hIXS5p dmFsID4gMCkKLSAgICAgIGZkaXNwbGEgPSAwOwotICAgIGRlYnVnKEYxMDEsInhnZXQgZGlzcGxh eSIsIiIsZmRpc3BsYSk7Ci0KLSAgICBpZiAocHZbU05EX05BTV0uaXZhbCA+IC0xKSB7ICAgICAg ICAvKiAvRklMRU5BTUVTICovCi0gICAgICAgIGdfZm5jbnYgPSBmbmNudjsgICAgICAgICAgICAg ICAgLyogU2F2ZSBnbG9iYWwgdmFsdWUgKi8KLSAgICAgICAgZm5jbnYgPSBwdltTTkRfTkFNXS5p dmFsOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCBmbmNudiIsIiIsZm5jbnYpOwotICAgICAg ICAvKiBXZSBzaG91bGQgYWxzbyBoYW5kbGUgTyBwYWNrZXQgZmlsZW5hbWUgb3B0aW9uIGhlcmUg Ki8KLSAgICAgICAgLyogYnV0IHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIHNpbmNlIFdIQVRBTUkg YWxyZWFkeSBoYW5kbGVzIGl0ICovCi0gICAgfQotICAgIGlmIChwdltTTkRfUFRIXS5pdmFsID4g LTEpIHsgICAgICAgIC8qIFBBVEhOQU1FUyAqLwotICAgICAgICBnX3JwYXRoID0gZm5ycGF0aDsg ICAgICAgICAgICAgIC8qIFNhdmUgZ2xvYmFsIHZhbHVlcyAqLwotICAgICAgICBmbnJwYXRoID0g cHZbU05EX1BUSF0uaXZhbDsKLSAgICAgICAgZGVidWcoRjEwMSwieHNlbmQgZm5ycGF0aCIsIiIs Zm5ycGF0aCk7Ci0jaWZuZGVmIE5aTFRPUgotICAgICAgICBpZiAoZm5ycGF0aCAhPSBQQVRIX09G RikgewotICAgICAgICAgICAgZ19mbmNudiA9IGZuY252OwotICAgICAgICAgICAgZm5jbnYgPSBY WUZOX0w7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCBmbmNudiIsIiIsZm5jbnYpOwot ICAgICAgICB9Ci0gICAgICAgIC8qIFdlIHNob3VsZCBhbHNvIGhhbmRsZSBPIHBhY2tldCBwYXRo bmFtZSBvcHRpb24gaGVyZSAqLwotICAgICAgICAvKiBidXQgd2UgZG9uJ3QgcmVhbGx5IG5lZWQg dG8gc2luY2UgV0hBVEFNSSBhbHJlYWR5IGhhbmRsZXMgaXQgKi8KLSNlbmRpZiAvKiBOWkxUT1Ig Ki8KLSAgICB9Ci0KLSAgICAvKiBTZXQgcHJvdG9jb2wgc3RhcnQgc3RhdGUgKi8KLQotICAgIGlm IChvcGt0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVuZGVkIEdFVCBPcHRpb25z Ki8KLSAgICAgICAgc3N0YXRlID0gKENIQVIpICdvJzsKLSAgICAgICAgb29wdHMgPSAwOwotICAg ICAgICBpZiAocHZbU05EX0RFTF0uaXZhbCA+IDApIG9vcHRzIHw9IEdPUFRfREVMOyAvKiBHRVQg L0RFTEVURSAqLwotICAgICAgICBpZiAocHZbU05EX1JFU10uaXZhbCA+IDApIG9vcHRzIHw9IEdP UFRfUkVTOyAvKiBHRVQgL1JFQ09WRVIgKi8KLSAgICAgICAgaWYgKHB2W1NORF9SRUNdLml2YWwg PiAwKSBvb3B0cyB8PSBHT1BUX1JFQzsgLyogR0VUIC9SRUNVUlNJVkUgKi8KLSAgICB9IGVsc2Ug aWYgKHJjdmNtZCkKLSAgICAgIHNzdGF0ZSA9IChDSEFSKSAndic7ICAgICAgICAgICAgICAvKiBS RUNFSVZFIG9yIENSRUNFSVZFICovCi0gICAgZWxzZSBpZiAocHZbU05EX0RFTF0uaXZhbCA+IDAp Ci0gICAgICBzc3RhdGUgPSAoQ0hBUikgJ2gnOyAgICAgICAgICAgICAgLyogR0VUIC9ERUxFVEUg KD0gUkVUUklFVkUpICovCi0gICAgZWxzZSBpZiAocHZbU05EX1JFU10uaXZhbCA+IDApCi0gICAg ICBzc3RhdGUgPSAoQ0hBUikgJ2onOyAgICAgICAgICAgICAgLyogR0VUIC9SRUNPVkVSICg9IFJF R0VUKSAqLwotICAgIGVsc2UKLSAgICAgIHNzdGF0ZSA9IChDSEFSKSAncic7ICAgICAgICAgICAg ICAvKiBSZWd1bGFyIEdFVCAqLwotICAgIGdldGNtZCA9IDE7Ci0gICAgZGVidWcoRjAwMCwieGdl dCBzc3RhdGUiLCIiLHNzdGF0ZSk7Ci0jaWZkZWYgTUFDCi0gICAgd2hhdCA9IFdfUkVDVjsKLSAg ICBzY3JjcmVhdGUoKTsKLSNlbmRpZiAvKiBNQUMgKi8KLSAgICBpZiAobG9jYWwpIHsKLSAgICAg ICAgaWYgKHB2W1NORF9TSEhdLml2YWwgIT0gMCkKLSAgICAgICAgICBkaXNwbGEgPSAxOwotCWlm IChwcm90b2NvbCA9PSBQUk9UT19LKQkvKiBmZGMgMjAwNzAxMDggKi8KLQkgIHR0Zmx1aSgpOwot ICAgIH0KLSAgICB4ID0gMDsKLSNpZmRlZiBQSVBFU0VORAotICAgIGlmIChwaXBlc2VuZCkKLSAg ICAgIGdvdG8geGdldHg7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotI2lmZGVmIENLX1RNUERJ UgotLyoKLSAgY21hcmcyIGlzIGFsc28gYWxsb3dlZCB0byBiZSBhIGRldmljZSBvciBkaXJlY3Rv cnkgbmFtZTsKLSAgZXZlbiB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSB0aGF0IGRvZXNuJ3QgZXhp c3QuCi0qLwotICAgIHkgPSBzdHJsZW4oY21hcmcyKTsKLSAgICBkZWJ1ZyhGMTExLCJ4Z2V0IHN0 cmxlbihjbWFyZzIpIixjbWFyZzIseSk7Ci0gICAgaWYgKCh5ID4gMCkgJiYKLSNpZmRlZiBPUzIK LSAgICAgICAgKChpc2FscGhhKGNtYXJnMlswXSkgJiYKLSAgICAgICAgIGNtYXJnMlsxXSA9PSAn OicgJiYKLSAgICAgICAgIGNtYXJnMlsyXSA9PSBOVUwpIHx8Ci0gICAgICAgIChjbWFyZ1t5LTFd ID09ICcvJyB8fCBjbWFyZ1t5LTFdID09ICdcXCcpIHx8Ci0gICAgICAgIGlzZGlyKGNtYXJnMikp Ci0jZWxzZQotI2lmZGVmIFVOSVhPUk9TSwotICAgICAgICAoY21hcmcyW3ktMV0gPT0gJy8nIHx8 IGlzZGlyKGNtYXJnMikpCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICAgICAoY21hcmcyW3ktMV0g PT0gJ10nIHx8IGNtYXJnMlt5LTFdID09ICc+JyB8fCBpc2RpcihjbWFyZzIpKQotI2Vsc2UKLSNp ZmRlZiBTVFJBVFVTCi0gICAgICAgIChjbWFyZzJbeS0xXSA9PSAnPicgfHwgaXNkaXIoY21hcmcy KSkKLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICAgICAgKGNtYXJnMlt5LTFdID09ICc6 JyB8fCBjbWFyZ1swXSA9PSAnOicgfHwgaXNkaXIoY21hcmcyKSkKLSNlbHNlCi0gICAgICAgIGlz ZGlyKGNtYXJnMikKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFNUUkFUVVMg Ki8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSNlbmRpZiAvKiBP UzIgKi8KLSAgICAgICAgKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsImRveGdldCBSRUNFSVZFIGNt YXJnMiBkaXNrIG9yIGRpciIsY21hcmcyLDApOwotICAgICAgICBpZiAoIWZfdG1wZGlyKSB7Ci0g ICAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICAgIHMgPSB6Z3RkaXIoKTsKLSAgICAgICAgICAg IGlmIChzKSB7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KHNhdmRpcixzLFRNUERJUkxFTik7 IC8qIHJlbWVtYmVyIG9sZCBkaXNrL2RpciAqLwotICAgICAgICAgICAgICAgIGZfdG1wZGlyID0g MTsgICAvKiBhbmQgdGhhdCB3ZSBkaWQgdGhpcyAqLwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICBwcmludGYoIj9DYW4ndCBnZXQgY3VycmVudCBkaXJlY3RvcnlcbiIpOwot ICAgICAgICAgICAgICAgIGNtYXJnMiA9ICIiOwotICAgICAgICAgICAgICAgIGZfdG1wZGlyID0g MDsKLSAgICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byB4Z2V0eDsK LSAgICAgICAgICAgIH0KLSNpZmRlZiBDS19NS0RJUgotICAgICAgICAgICAgeCA9IHpjaGtpKGNt YXJnMik7ICAgICAgICAgIC8qIERvZXMgYXMtbmFtZSBleGlzdD8gKi8KLSAgICAgICAgICAgIGlm ICh4ID09IC0xKSB7ICAgICAgICAgICAgICAvKiBEb2Vzbid0IGV4aXN0ICovCi0gICAgICAgICAg ICAgICAgY2hhciAqIHAgPSBOVUxMOyAgICAgICAgLyogVHJ5IHRvIGNyZWF0ZSBpdCAqLwotICAg ICAgICAgICAgICAgIHggPSBzdHJsZW4oY21hcmcyKTsKLSAgICAgICAgICAgICAgICBpZiAoKHAg PSAoY2hhciAqKW1hbGxvYyh4KzQpKSkgewotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHAs IiVzJXMiLGNtYXJnMiwieC54Iik7IC8qIFNBRkUgKHByZWNoZWNrZWQpICovCi0gICAgICAgICAg ICAgICAgICAgIHggPSB6bWtkaXIocCk7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUocCk7Ci0g ICAgICAgICAgICAgICAgICAgIGlmICh4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCI/Q2FuJ3QgY3JlYXRlICVzXG4iLGNtYXJnMik7Ci0gICAgICAgICAgICAgICAgICAg ICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2VuZGlm IC8qIENLX01LRElSICovCi0gICAgICAgICAgICBpZiAoIXpjaGRpcihjbWFyZzIpKSB7ICAgICAg LyogY2hhbmdlIHRvIGdpdmVuIGRpc2svZGlyZWN0b3J5LCAqLwotICAgICAgICAgICAgICAgIHBy aW50ZigiP0Nhbid0IGFjY2VzcyAlc1xuIixjbWFyZzIpOwotICAgICAgICAgICAgICAgIHggPSAt OTsKLSAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgY21hcmcyID0gIiI7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfVE1QRElSICov Ci0KLSAgICBja3N0cm5jcHkoZnNwZWMsY21hcmcsQ0tNQVhQQVRIKTsgICAvKiBOb3RlIC0gdGhp cyBpcyBhIFJFTU9URSBmaWxlc3BlYyAqLwotICAgIGRlYnVnKEYxMTEsInhnZXQgZnNwZWMiLGZz cGVjLGZzcGVjbGVuKTsKLSAgICBkZWJ1ZyhGMTEwLCJ4Z2V0IGNtYXJnMiIsY21hcmcyLDApOwot Ci0gIHhnZXR4OgotICAgIGZvciAoaSA9IDA7IGkgPCBTTkRfTUFYOyBpKyspCi0gICAgICBpZiAo cHZbaV0uc3ZhbCkKLSAgICAgICAgZnJlZShwdltpXS5zdmFsKTsKLSAgICByZXR1cm4oeCk7Ci19 Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9TUEwKLQotLyoKLSAgRCBPIEcgVCBB ICAtLSAgRG8gX0dFVEFSR1Mgb3IgX1BVVEFSR1MgQ29tbWFuZC4KLQotICBVc2VkIGJ5IFhJRiwg Rk9SLCBXSElMRSwgYW5kIFNXSVRDSCwgZWFjaCBvZiB3aGljaCBhcmUgaW1wbGVtZW50ZWQgYXMK LSAgMi1sZXZlbCBtYWNyb3M7IHRoZSBmaXJzdCBsZXZlbCBkZWZpbmVzIHRoZSBtYWNybywgdGhl IHNlY29uZCBydW5zIGl0LgotICBUaGlzIHJvdXRpbmUgaGlkZXMgdGhlIGZhY3QgdGhhdCB0aGV5 IGFyZSBtYWNyb3MgYnkgaW1wb3J0aW5nIHRoZQotICBtYWNybyBhcmd1bWVudHMgKGlmIGFueSkg ZnJvbSB0d28gbGV2ZWxzIHVwLCB0byBtYWtlIHRoZW0gYXZhaWxhYmxlCi0gIGluIHRoZSBJRiwg Rk9SLCBTV0lUQ0gsIGFuZCBXSElMRSBjb21tYW5kcyB0aGVtc2VsdmVzOyBmb3IgZXhhbXBsZSBh cwotICBsb29wIGluZGljZXMsIGV0YywgYW5kIHdpdGhpbiB0aGUgSUYvRk9SL1dISUxFL1NXSVRD SCBib2R5IGl0c2VsZi4KLSAgX1BVVEFSR1MgaXMgaW4gY2FzZSB3ZSBjaGFuZ2VkIGFueSBvZiB0 aGVzZSB2YXJpYWJsZXMgb3IgdXNlZCBTSElGVAotICBvbiB0aGVtLCBzbyB0aGUgbmV3IHZhbHVl cyB3b24ndCBiZSBsb3N0IGFzIHdlIHBvcCB1cCB0aGUgc3RhY2suCi0qLwotaW50Ci1kb2d0YShj eCkgaW50IGN4OyB7Ci0gICAgaW50IGksIG47Ci0gICAgY2hhciBjLCAqcCwgIG1idWZbNF07Ci0g ICAgZXh0ZXJuIGludCB0b3BhcmdjLCBjbWRpbnQ7Ci0gICAgZXh0ZXJuIGNoYXIgKiogdG9weGFy ZzsKLQotICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIHJldHVybih5KTsKLSAgICBk ZWJ1ZyhGMTAxLCJkb2d0YSBjeCIsIiIsY3gpOwotICAgIGRlYnVnKEYxMDEsImRvZ3RhIG1hY2x2 bCIsIiIsbWFjbHZsKTsKLSAgICBpZiAoY3ggPT0gWFhHVEEpIHsKLSAgICAgICAgZGVidWcoRjEw MSwiZG9ndGEgX0dFVEFSR1MgbWFjbHZsIiwiIixtYWNsdmwpOwotICAgIH0gZWxzZSBpZiAoY3gg PT0gWFhQVEEpIHsKLSAgICAgICAgZGVidWcoRjEwMSwiZG9ndGEgX1BVVEFSR1MgbWFjbHZsIiwi IixtYWNsdmwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotICAg IGlmIChtYWNsdmwgPCAxKQotICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQotICAgIC8qIE1h a2UgbmV3IGNvcGllcyBvZiBtYWNybyBhcmd1bWVudHMgLyUwLi45ICovCi0KLSAgICBtYnVmWzBd ID0gJyUnOyBtYnVmWzFdID0gJzAnOyBtYnVmWzJdID0gTlVMOyAvKiBBcmd1bWVudCBuYW1lIGJ1 ZiAqLwotCi0gICAgaWYgKGN4ID09IFhYUFRBKSB7ICAgICAgICAgICAgICAgICAgLyogR28gTk9J TlQgYmVjYXVzZSBfUFVUQVJHUyAqLwotICAgICAgICBpZiAoY21kaW50KSAgICAgICAgICAgICAg ICAgICAgIC8qIHRlbXBvcmFyaWx5IGNoYW5nZXMgbWFjbHZsLiAqLwotICAgICAgICAgIGNvbm5v aSgpOyAgICAgICAgICAgICAgICAgICAgIC8qIEludGVycnVwdHMgT0ZGLiAqLwotICAgIH0KLSAg ICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeyAgICAgICAgICAvKiBGb3IgYWxsIGFyZ3MgKi8K LSAgICAgICAgYyA9IChjaGFyKSAoaSArICcwJyk7ICAgICAgICAgICAvKiBNYWtlIG5hbWUgKi8K LSAgICAgICAgbWJ1ZlsxXSA9IChjaGFyKSBjOyAgICAgICAgICAgICAvKiBJbnNlcnQgZGlnaXQg Ki8KLSAgICAgICAgaWYgKGN4ID09IFhYR1RBKSB7ICAgICAgICAgICAgICAvKiBHZXQgYXJnIGZy b20gbGV2ZWwtbWludXMtMiAqLwotICAgICAgICAgICAgaWYgKG1hY2x2bCA9PSAxKSBwID0gZ192 YXJbY107IC8qIElmIGF0IGxldmVsIDEgdXNlIGdsb2JhbHMgMC4uOSAqLwotICAgICAgICAgICAg ZWxzZSBwID0gbV9hcmdbbWFjbHZsLTJdW2ldOyAgIC8qIE90aGVyd2lzZSB0aGV5J3JlIG9uIHRo ZSBzdGFjayAqLwotICAgICAgICAgICAgYWRkbWFjKG1idWYscCk7Ci0jaWZkZWYgQ09NTUVOVAot ICAgICAgICAgICAgaWYgKG1hY2x2bCA+IDEpCi0gICAgICAgICAgICAgIG1ha2VzdHIoJihtX2xp bmVbbWFjbHZsXSksbV9saW5lW21hY2x2bC0yXSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAg ICAgICB9IGVsc2UgaWYgKGN4ID09IFhYUFRBKSB7ICAgICAgIC8qIFB1dCBhcmdzIGxldmVsKzIg Ki8KLSAgICAgICAgICAgIG1hY2x2bCAtPSAyOyAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIGdy b3NzLCBpdCdzIGJlY2F1c2Ugd2UncmUgKi8KLSAgICAgICAgICAgIGFkZG1hYyhtYnVmLG1fYXJn W21hY2x2bCsyXVtpXSk7IC8qIGFkZGluZyBtYWNyb3MgdHdvIGxldmVscyB1cCAqLwotICAgICAg ICAgICAgbWFjbHZsICs9IDI7ICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGFkZG1hYygpIHVz ZXMgbWFjbHZsLiAqLwotICAgICAgICAgICAgY291bnRbY21kbHZsIC0gMl0gID0gY291bnRbY21k bHZsXTsKLSAgICAgICAgICAgIGludGltZVtjbWRsdmwgLSAyXSA9IGludGltZVtjbWRsdmxdOwot ICAgICAgICAgICAgaW5wY2FzW2NtZGx2bCAtIDJdID0gaW5wY2FzW2NtZGx2bF07Ci0gICAgICAg ICAgICB0YWtlcnJbY21kbHZsIC0gMl0gPSB0YWtlcnJbY21kbHZsXTsKLSAgICAgICAgICAgIG1l cnJvcltjbWRsdmwgLSAyXSA9IG1lcnJvcltjbWRsdmxdOwotICAgICAgICAgICAgeHF1aWV0W2Nt ZGx2bCAtIDJdID0geHF1aWV0W2NtZGx2bF07Ci0gICAgICAgICAgICB4dmFyZXZbY21kbHZsIC0g Ml0gPSB4dmFyZXZbY21kbHZsXTsKLSAgICAgICAgfSBlbHNlIHJldHVybihzdWNjZXNzID0gMCk7 ICAgICAvKiBCYWQgY2FsbCB0byB0aGlzIHJvdXRpbmUgKi8KLSAgICB9Ci0gICAgaWYgKGN4ID09 IFhYUFRBKSB7ICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBpbnRlcnJ1cHRzIGlmIHdlICov Ci0gICAgICAgIGlmIChjbWRpbnQpICAgICAgICAgICAgICAgICAgICAgLyogdHVybmVkIHRoZW0g b2ZmIGFib3ZlLiAqLwotICAgICAgICAgIGNvbmludCh0cmFwLHN0cHRyYXApOwotICAgIH0KLSAg ICAvKiBOb3cgdGFrZSBjYXJlIG9mIHRoZSBhcmd1bWVudCB2ZWN0b3IgYXJyYXkgXCZfW10sIFx2 KHJldHVybiksICovCi0gICAgLyogYW5kIFx2KGFyZ2MpIGJ5IGp1c3QgY29weWluZyB0aGUgcG9p bnRlcnMuICovCi0KLSAgICBpZiAoY3ggPT0gWFhHVEEpIHsgICAgICAgICAgICAgICAgICAvKiBH RVRBUkdTIGZyb20gMiBsZXZlbHMgdXAgKi8KLSAgICAgICAgaWYgKG1hY2x2bCA9PSAxKSB7Ci0g ICAgICAgICAgICBhX3B0clswXSA9IHRvcHhhcmc7ICAgICAgICAgLyogXCZfW10gYXJyYXkgKi8K LSAgICAgICAgICAgIGFfZGltWzBdID0gdG9wYXJnYyAtIDE7ICAgICAvKiBEaW1lbnNpb24gZG9l c24ndCBpbmNsdWRlIFswXSAqLwotICAgICAgICAgICAgbV94YXJnW21hY2x2bF0gPSB0b3B4YXJn OwotICAgICAgICAgICAgbl94YXJnW21hY2x2bF0gPSB0b3BhcmdjOyAgIC8qIEJ1dCBcdihhcmdj KSBkb2VzIGluY2x1ZGUgXCUwICovCi0gICAgICAgICAgICBtYWNhcmdjW21hY2x2bF0gPSB0b3Bh cmdjOwotICAgICAgICAgICAgbWFrZXN0cigmKG1ydmFsW21hY2x2bCsxXSksbXJ2YWxbMF0pOyAv KiAoc2VlIHZubG9vaygpKSAqLwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYV9wdHJb MF0gPSBtX3hhcmdbbWFjbHZsLTJdOwotICAgICAgICAgICAgYV9kaW1bMF0gPSBuX3hhcmdbbWFj bHZsLTJdOwotICAgICAgICAgICAgbV94YXJnW21hY2x2bF0gPSBtX3hhcmdbbWFjbHZsLTJdOwot ICAgICAgICAgICAgbl94YXJnW21hY2x2bF0gPSBuX3hhcmdbbWFjbHZsLTJdOwotICAgICAgICAg ICAgbWFjYXJnY1ttYWNsdmxdID0gbl94YXJnW21hY2x2bC0yXTsKLSAgICAgICAgICAgIG1ha2Vz dHIoJihtcnZhbFttYWNsdmwrMV0pLG1ydmFsW21hY2x2bC0xXSk7IC8qIChzZWUgdm5sb29rKCkp ICovCi0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFBVVEFSR1MgMiBsZXZlbHMgdXAgKi8KLSAgICAgICAgaWYgKG1hY2x2bCA+IDEpIHsKLSAg ICAgICAgICAgIGFfcHRyWzBdID0gbV94YXJnW21hY2x2bF07Ci0gICAgICAgICAgICBtX3hhcmdb bWFjbHZsLTJdID0gbV94YXJnW21hY2x2bF07Ci0gICAgICAgICAgICBhX2RpbVswXSA9IG5feGFy Z1ttYWNsdmxdOwotICAgICAgICAgICAgbl94YXJnW21hY2x2bC0yXSA9IG5feGFyZ1ttYWNsdmxd OwotICAgICAgICAgICAgbWFjYXJnY1ttYWNsdmwtMl0gPSBuX3hhcmdbbWFjbHZsXTsKLSAgICAg ICAgfQotICAgIH0KLSAgICByZXR1cm4oMSk7ICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwg Y29tbWFuZCAtIGRvbid0IGNoYW5nZSBzdWNjZXNzICovCi19Ci0jZW5kaWYgLyogTk9TUEwgKi8K LQotI2lmbmRlZiBOT1NQTAotLyoKLSAgRG8gdGhlIEdPVE8gYW5kIFtfXUZPUldBUkQgY29tbWFu ZHMuCi0gIHMgPSBMYWJlbCB0byBzZWFyY2ggZm9yLCBjeCA9IGZ1bmN0aW9uIGNvZGU6IFhYR09U TywgWFhGV0QsIG9yIFhYWEZXRC4KLSovCi0KLWludAotZG9nb3RvKHMsIGN4KSBjaGFyICpzOyBp bnQgY3g7IHsKLSAgICBpbnQgaSwgaiwgeCwgeSwgeiwgYmM7Ci0gICAgaW50IGVtcHR5ID0gMCwg c3RvcGZsZyA9IDA7Ci0gICAgY2hhciAqIGNtZDsgICAgICAgICAgICAgICAgICAgICAgICAgLyog TmFtZSBvZiB0aGlzIGNvbW1hbmQgKi8KLSAgICBjaGFyIHRtcGxibFtMQkxTSVorMV0sICpscDsJ ICAgICAgICAvKiBDdXJyZW50IGxhYmVsIGZyb20gY29tbWFuZCBzdHJlYW0gKi8KLSAgICBjaGFy IHRtcDJbTEJMU0laKzFdOwkJLyogU1dJVENIIGxhYmVsIGNvbnZlcnNpb24gYnVmZmVyICovCi0g ICAgY2hhciB0bXAzW0xCTFNJWisxXTsJCS8qIFRhcmdldCBsYWJlbCAqLwotCi0gICAgc3RvcGZs ZyA9IChjeCA9PSBYWFhGV0QpOyAgICAgICAgICAgLyogX0ZPUldBUkQgKHVzZWQgaW4gU1dJVENI KSAqLwotICAgIGJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJyYWNlIGNv dW50ZXIgKi8KLQotICAgIGNtZCA9IChjeCA9PSBYWEdPVE8pID8gIkdPVE8iIDogKChjeCA9PSBY WEZXRCkgPyAiRk9SV0FSRCIgOiAiX0ZPUldBUkQiKTsKLSAgICBpZiAoIXMpIHMgPSAiIjsKLSAg ICBpZiAoISpzKSBlbXB0eSA9IDE7Ci0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsK LSAgICAgICAgZGVidWcoRjExMSwiR09UTyBjb21tYW5kIixjbWQsY3gpOwotICAgICAgICBkZWJ1 ZyhGMTAxLCJHT1RPIGNtZGx2bCIsIiIsY21kbHZsKTsKLSAgICAgICAgZGVidWcoRjEwMSwiR09U TyBtYWNsdmwiLCIiLG1hY2x2bCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIkdPVE8gdGxldmVsIiwi Iix0bGV2ZWwpOwotICAgICAgICBkZWJ1ZyhGMTExLCJHT1RPIHRhcmdldCIscyxlbXB0eSk7Ci0g ICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgZGVidWcoRjExMCxjbWQscywwKTsKLSAgICB4 ID0gY2tzdHJuY3B5KHRtcDMrMSxzLExCTFNJWik7Ci0gICAgZGVidWcoRjEwMSwiR09UTyB0YXJn ZXQgbGVuIiwiIix4KTsKLSAgICBkZWJ1ZyhGMTAxLCJHT1RPIHRhcmdldCBhdCB4IiwiIixzW3hd KTsKLSAgICBpZiAoc1t4XSkgewotCWRlYnVnKEYxMDAsIkdPVE8gdGFyZ2V0IG92ZXJmbG93Iiwi IiwwKTsKLQlwcmludGYoIj9HT1RPIHRhcmdldCBvciBTV0lUQ0ggY2FzZSBsYWJlbCB0b28gbG9u Z1xuIik7Ci0JaWYgKHN0b3BmbGcpIGRvc3RvcCgpOwkJLyogSWYgaW4gU1dJVENIIHJldHVybiB0 byBwcm9tcHQgKi8KLQlyZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLSAgICBzID0gdG1wMysx OwotICAgIGlmICgqcyAhPSAnOicpIHsgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgY29weSBv ZiBsYWJlbCAqLwotICAgICAgICB0bXAzWzBdID0gJzonOyAgICAgICAgICAgICAgICAgIC8qIGd1 YXJhbnRlZWQgdG8gc3RhcnQgd2l0aCAiOiIgKi8KLSAgICAgICAgcy0tOwotICAgIH0KLSAgICBp ZiAoIXN0b3BmbGcgJiYgIWVtcHR5KSB7Ci0gICAgICAgIGlmIChzWzFdID09ICcuJyB8fCBzWzFd ID09IFNQIHx8IHNbMV0gPT0gTlVMKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9CYWQgbGFiZWwg c3ludGF4IC0gJyVzJ1xuIixzKTsKLQkgICAgaWYgKHN0b3BmbGcpIGRvc3RvcCgpOwkvKiBJZiBp biBTV0lUQ0ggcmV0dXJuIHRvIHByb21wdCAqLwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY21kbHZsID09IDApIHsKLSAgICAgICAg cHJpbnRmKCI/U29ycnksICVzIG9ubHkgd29ya3MgaW4gYSBjb21tYW5kIGZpbGUgb3IgbWFjcm9c biIsY21kKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9Ci0gICAgeSA9IHN0 cmxlbihzKTsgICAgICAgICAgICAgICAgICAgICAgLyogeSA9IGxlbmd0aCBvZiB0YXJnZXQgbGFi ZWwgKi8KLSAgICBkZWJ1ZyhGMTExLGNtZCxzLHkpOwotCi0gICAgd2hpbGUgKGNtZGx2bCA+IDAp IHsgICAgICAgICAgICAgICAgLyogQXMgbG9uZyBhcyBub3QgYXQgdG9wIGxldmVsLi4uICovCi0g ICAgICAgIGlmIChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01EX01EKSB7IC8qIEdPVE8gaW5zaWRl IG1hY3JvICovCi0gICAgICAgICAgICBpbnQgaSwgbSwgZmxhZzsKLSAgICAgICAgICAgIGNoYXIg KnhwLCAqdHA7Ci0KLSAgICAgICAgICAgIC8qIEdPVE86IHJld2luZCB0aGUgbWFjcm87IEZPUldB UkQ6IHN0YXJ0IGF0IGN1cnJlbnQgcG9zaXRpb24gKi8KLQotICAgICAgICAgICAgbHAgPSAoY3gg PT0gWFhHT1RPKSA/IG1hY3hbbWFjbHZsXSA6IG1hY3BbbWFjbHZsXTsKLSAgICAgICAgICAgIG0g PSAoaW50KXN0cmxlbihscCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJHT1RPIGluIG1hY3Jv IixscCxtKTsKLQotICAgICAgICAgICAgZmxhZyA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIGZs YWcgZm9yIHZhbGlkIGxhYmVsIHBvc2l0aW9uICovCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBp IDwgbTsgaSsrLGxwKyspIHsgLyogc2VhcmNoIGZvciBsYWJlbCBpbiBtYWNybyBib2R5ICovCi0g ICAgICAgICAgICAgICAgaWYgKCpscCA9PSAneycpICAgICAgICAgLyogQnV0IG9ubHkgYXQgdGhp cyBsZXZlbCAqLwotICAgICAgICAgICAgICAgICAgYmMrKzsgICAgICAgICAgICAgICAgIC8qIEFu eXRoaW5nIGluc2lkZSBicmFjZXMgaXMgb2ZmICovCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAo KmxwID09ICd9JykgICAgLyogbGltaXRzLiAqLwotICAgICAgICAgICAgICAgICAgYmMtLTsKLSAg ICAgICAgICAgICAgICBpZiAoc3RvcGZsZyAmJiBiYyA+IDApICAvKiBUaGlzIGlzIGdvb2QgZm9y IFNXSVRDSCAqLwotICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgIC8qIGJ1 dCBpbnRlcmZlcmVzIHdpdGggV0hJTEUsIGV0Yy4gKi8KLSAgICAgICAgICAgICAgICBpZiAoKmxw ID09ICcsJykgewotICAgICAgICAgICAgICAgICAgICBmbGFnID0gMTsKLSAgICAgICAgICAgICAg ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChm bGFnKSB7ICAgICAgICAgICAgIC8qIElmIGluIHZhbGlkIGxhYmVsIHBvc2l0aW9uICovCi0gICAg ICAgICAgICAgICAgICAgIGlmICgqbHAgPT0gU1ApICAgICAgLyogZWF0IGxlYWRpbmcgc3BhY2Vz ICovCi0gICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg IGlmICgqbHAgIT0gJzonKSB7ICAgLyogTG9vayBmb3IgbGFiZWwgaW50cm9kdWNlciAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDA7ICAgICAgIC8qIHRoaXMgaXNuJ3QgaXQgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAvKiBrZWVwIGxvb2tpbmcg Ki8KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBpZiAoIWZsYWcpICAgICAgICAgICAgICAvKiBXZSBkb24ndCBoYXZlIGEgbGFiZWwgKi8K LSAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAvKiAgc28ga2VlcCBsb29r aW5nLi4uICovCi0gICAgICAgICAgICAgICAgeHAgPSBscDsgdHAgPSB0bXBsYmw7ICAgLyogQ29w eSB0aGUgbGFiZWwgZnJvbSB0aGUgbWFjcm8gKi8KLSAgICAgICAgICAgICAgICBqID0gMDsgICAg ICAgICAgICAgICAgICAvKiB0byBtYWtlIGl0IG51bGwtdGVybWluYXRlZCAqLwotICAgICAgICAg ICAgICAgIHdoaWxlICgoKnRwID0gKnhwKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaisr ID4gTEJMU0laLTEpIHsgLyogaiA9IGxlbmd0aCBvZiB3b3JkIGZyb20gbWFjcm8gKi8KLQkJCXBy aW50ZigiP0dPVE8gdGFyZ2V0IG9yIFNXSVRDSCBjYXNlIGxhYmVsIHRvbyBsb25nXG4iKTsKLQkJ CWlmIChzdG9wZmxnKSBkb3N0b3AoKTsgLyogUmV0dXJuIHRvIHByb21wdCAqLwotCQkJcmV0dXJu KHN1Y2Nlc3MgPSAwKTsKLQkJICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCEqdHAgfHwg KnRwID09ICcsJykgLyogTG9vayBmb3IgZW5kIG9mIHdvcmQgKi8KLSAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB0cCsrLCB4cCsrOyAgICAvKiBO ZXh0IGNoYXJhY3RlciAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAqdHAg PSBOVUw7ICAgICAgICAgICAgICAvKiBJbiBjYXNlIHdlIHN0b3BwZWQgZWFybHkgKi8KLSAgICAg ICAgICAgICAgICAvKiBOb3cgZG8gY2FzZWxlc3Mgc3RyaW5nIGNvbXBhcmlzb24sIHVzaW5nIGxv bmdlc3QgbGVuZ3RoICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwibWFjcm8gR09UTyBs YWJlbCIscyx5KTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJtYWNybyB0YXJnZXQgbGFi ZWwiLHRtcGxibCxqKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RvcGZsZykgeyAgICAgICAgICAv KiBBbGxvdyB2YXJpYWJsZXMgYXMgU1dJVENIIGxhYmVscyAqLwotICAgICAgICAgICAgICAgICAg ICBpbnQgbiA9IExCTFNJWiAtIDE7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwID0gdG1w MjsKLSAgICAgICAgICAgICAgICAgICAgenpzdHJpbmcodG1wbGJsLCZwLCZuKTsKLQkJICAgIGlm IChuIDwgMCkgewotCQkJcHJpbnRmKCI/R09UTyB0YXJnZXQgb3IgU1dJVENIIGNhc2UgbGFiZWwg dG9vIGxvbmdcbiIpOwotCQkJaWYgKHN0b3BmbGcpIGRvc3RvcCgpOyAvKiBSZXR1cm4gdG8gcHJv bXB0ICovCi0JCQlyZXR1cm4oMCk7Ci0JCSAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNrc3Ry bmNweSh0bXBsYmwsdG1wMixMQkxTSVopOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJHT1RPIHMiLHMseSk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEx MSwiR09UTyB0bXBsYmwiLHRtcGxibCxqKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJH T1RPIGVtcHR5Iixja2l0b2Eoc3RvcGZsZyksZW1wdHkpOwotCi0gICAgICAgICAgICAgICAgaWYg KGVtcHR5KSB7CQkgICAvKiBFbXB0eSB0YXJnZXQgKi8KLQkJICAgIHogPSAoIXN0cmNtcChzLCI6 IikgJiYgLyogU3RyaW5nIGlzIGVtcHR5ICovCi0JCQkgLyogYW5kIExhYmVsIGlzICI6IiBvciAi OioiLi4uICovCi0JCQkgKCFzdHJjbXAodG1wbGJsLCI6IikgfHwgIXN0cmNtcCh0bXBsYmwsIjoq IikpKQotCQkJPyAwIDogMTsKLQkJICAgIGRlYnVnKEYxMTEsIkdPVE8iLCJBIix6KTsKLSAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3BmbGcpIHsKLSAgICAgICAgICAgICAgICAgICAgeiA9 IGNrbWF0Y2godG1wbGJsLHMsaW5wY2FzW2NtZGx2bF0sMSkgPyAwIDogMTsKLQkJICAgIGRlYnVn KEYxMTEsIkdPVE8iLCJCIix6KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgICAgICB6ID0gKHN0b3BmbGcgJiYgaW5wY2FzW2NtZGx2bF0pID8KLSAgICAgICAgICAg ICAgICAgICAgICBzdHJjbXAocyx0bXBsYmwpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNr c3RyY21wKHMsdG1wbGJsLCh5ID4gaikgPyB5IDogaiwgMCk7Ci0JCSAgICBkZWJ1ZyhGMTExLCJH T1RPIiwiQyIseik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgheikg ewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KHN0b3BmbGcgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAhY2tzdHJjbXAoIjpkZWZhdWx0 Iix0bXBsYmwsKDggPiBqKSA/IDggOiBqLCAwKSkgewotICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJHT1RPIERFRkFVTFQiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmbGFnID0gMDsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEx LCJHT1RPIG1hY3JvIGkiLGNtZCxpKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIkdPVE8gbWFj cm8gbSIsY21kLG0pOwotICAgICAgICAgICAgaWYgKGkgPj0gbSkgeyAgICAgICAgICAgICAgIC8q IERpZG4ndCBmaW5kIHRoZSBsYWJlbCAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIkdP VE8gZmFpbGVkIGNtZGx2bCIsIiIsY21kbHZsKTsKLSNpZmRlZiBDT01NRU5UCi0JCS8qIE1PVkVE IFRPIEFGVEVSIFBPUENMVkwgQUJPVVQgMjAgTElORVMgRE9XTiA1IEFVRyAyMDAyICovCi0JCSAg IGlmIChzdG9wZmxnKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSAgICAgICAgICAgICAgICBpZiAoKG1hY2x2bCA+IDApICYmCi0gICAgICAgICAg ICAgICAgICAgICAgIChtX2FyZ1ttYWNsdmwtMV1bMF0pICYmCi0gICAgICAgICAgICAgICAgICAg ICAgIChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01EX01EKSAmJgotICAgICAgICAgICAgICAgICAg ICAgICAoIXN0cm5jbXAobV9hcmdbbWFjbHZsLTFdWzBdLCJfeGlmIiw0KSB8fAotICAgICAgICAg ICAgICAgICAgICAgICAgIXN0cm5jbXAobV9hcmdbbWFjbHZsLTFdWzBdLCJfZm9yIiw0KSB8fAot ICAgICAgICAgICAgICAgICAgICAgICAgIXN0cm5jbXAobV9hcmdbbWFjbHZsLTFdWzBdLCJfc3dp Iiw0KSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIXN0cm5jbXAobV9hcmdbbWFjbHZsLTFd WzBdLCJfd2hpIiw0KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9ndGEoWFhQVEEpOyAgICAg ICAvKiBSZXN0b3JlIGFyZ3MgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiR09U TyBpbiBYSUYvRk9SL1dISS9TV0kgcG9wcGluZyIsIiIsY21kbHZsKTsKLSAgICAgICAgICAgICAg ICAgICAgcG9wY2x2bCgpOyAgICAgICAgICAvKiBQb3AgYW4gZXh0cmEgbGV2ZWwgKi8KLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiR09UTyBwb3BwaW5nIiwi IixjbWRsdmwpOwotICAgICAgICAgICAgICAgIGlmICghcG9wY2x2bCgpKSB7ICAgICAgIC8qIHBv cCB1cCB0byBuZXh0IGhpZ2hlciBsZXZlbCAqLwotICAgICAgICAgICAgICAgICAgICBwcmludGYo Ij9MYWJlbCAnJXMnIG5vdCBmb3VuZFxuIixzKTsgLyogaWYgbm9uZSAqLwotICAgICAgICAgICAg ICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgIC8qIFF1aXQgKi8KLSAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKHN0b3BmbGcpIHsJLyogU1dJVENIIG5vIGNhc2UgbGFiZWwgbWF0Y2ggKi8KLQkJ ICAgIHJldHVybigwKTsJCS8qIGFuZCBubyBERUZBVUxUIGxhYmxlLiAqLwotCQl9IGVsc2Ugewot CQkgICAgY29udGludWU7ICAgICAgICAvKiBvdGhlcndpc2UgbG9vayBhZ2FpbiAqLwotCQl9Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJHT1RPIGZvdW5kIG1hY3JvIGxh YmVsIix0bXBsYmwsMCk7Ci0gICAgICAgICAgICBtYWNwW21hY2x2bF0gPSBscDsgICAgICAgICAg Lyogc2V0IG1hY3JvIGJ1ZmZlciBwb2ludGVyICovCi0gICAgICAgICAgICByZXR1cm4oMSk7Ci0g ICAgICAgIH0gZWxzZSBpZiAoY21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9URikgewotICAgICAg ICAgICAgeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIEdPVE8gaXNzdWVkIGluIHRha2Ug ZmlsZSAqLwotICAgICAgICAgICAgZGVidWcoRjExMSwiR09UTyBpbiBUQUtFIGZpbGUiLGNtZCxj eCk7Ci0gICAgICAgICAgICBpZiAoY3ggPT0gWFhHT1RPKSB7ICAgICAgICAgLyogSWYgR09UTywg YnV0IG5vdCBGT1JXQVJELCAqLwotICAgICAgICAgICAgICAgIHJld2luZCh0ZmlsZVt0bGV2ZWxd KTsgIC8qIHNlYXJjaCBmaWxlIGZyb20gYmVnaW5uaW5nICovCi0gICAgICAgICAgICAgICAgdGZs aW5lW3RsZXZlbF0gPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKCEgZmVv Zih0ZmlsZVt0bGV2ZWxdKSkgewotI2lmZGVmIENPTU1FTlQKLS8qIFRoaXMgaXMgd3JvbmcgLSBp dCBsZXRzIHVzIGp1bXAgdG8gbGFiZWxzIGluc2lkZSBpbmZlcmlvciBibG9ja3MgKi8KLSAgICAg ICAgICAgICAgICB0ZmxpbmVbdGxldmVsXSsrOwotICAgICAgICAgICAgICAgIGlmIChmZ2V0cyhs aW5lLExJTkJVRlNJWix0ZmlsZVt0bGV2ZWxdKSA9PSBOVUxMKSAvKiBHZXQgbGluZSAqLwotI2Vs c2UKLSAgICAgICAgICAgICAgICBpZiAoZ2V0bmN0KGxpbmUsTElOQlVGU0laLHRmaWxlW3RsZXZl bF0sMCkgPCAwKQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgIGJyZWFr OyAgICAgICAgICAgICAgICAvKiBJZiBubyBtb3JlLCBkb25lLCBsYWJlbCBub3QgZm91bmQgKi8K LSAgICAgICAgICAgICAgICBscCA9IGxpbmU7ICAgICAgICAgICAgICAvKiBHb3QgbGluZSAqLwot ICAgICAgICAgICAgICAgIHdoaWxlICgqbHAgPT0gU1AgfHwgKmxwID09IEhUKQotICAgICAgICAg ICAgICAgICAgbHArKzsgICAgICAgICAgICAgICAgIC8qIFN0cmlwIGxlYWRpbmcgd2hpdGVzcGFj ZSAqLwotICAgICAgICAgICAgICAgIGlmICgqbHAgIT0gJzonKSBjb250aW51ZTsgLyogQ2hlY2sg Zm9yIGxhYmVsIGludHJvZHVjZXIgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoKihscCsxKSA9 PSBTUCkgeyAvKiBSZW1vdmUgc3BhY2UgYmV0d2VlbiA6IGFuZCBuYW1lICovCi0gICAgICAgICAg ICAgICAgICAgICoobHArMSkgPSAnOic7Ci0gICAgICAgICAgICAgICAgICAgIGxwKys7ICAgICAg ICAgICAgICAgLyogU3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlICovCi0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIHRwID0gbHA7ICAgICAgICAgICAgICAgIC8qIEdldCBlbmQgb2Yg d29yZCAqLwotICAgICAgICAgICAgICAgIGogPSAwOwotICAgICAgICAgICAgICAgIHdoaWxlICgq dHApIHsgICAgICAgICAgIC8qIEFuZCBudWxsLXRlcm1pbmF0ZSBpdCAqLwotICAgICAgICAgICAg ICAgICAgICBpZiAoKnRwIDwgMzMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICp0cCA9IE5V TDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgdHArKywgaisrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo IWNrc3RyY21wKGxwLHMsKHkgPiBqKSA/IHkgOiBqLDApKSB7IC8qIENhc2VsZXNzIGNvbXBhcmUg Ki8KLSAgICAgICAgICAgICAgICAgICAgeCA9IDE7ICAgICAgICAgICAgICAvKiBHb3QgaXQgKi8K LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiBkb25lLiAqLwotICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcGZsZyAmJgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIWNrc3RyY21wKCI6ZGVmYXVsdCIsdG1wbGJsLCg4ID4gaikgPyA4IDogaiwwKSkgewot ICAgICAgICAgICAgICAgICAgICB4ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHggPT0gMCkg eyAgICAgICAgICAgICAgIC8qIElmIG5vdCBmb3VuZCwgcHJpbnQgbWVzc2FnZSAqLwotICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsIkdPVE8gZmFpbGVkIGF0IGNtZGx2bCIsIiIsY21kbHZsKTsK LSAgICAgICAgICAgICAgICBpZiAoc3RvcGZsZykKLSAgICAgICAgICAgICAgICAgIHJldHVybigw KTsKLSAgICAgICAgICAgICAgICBpZiAoIXBvcGNsdmwoKSkgeyAgICAgICAvKiBwb3AgdXAgdG8g bmV4dCBoaWdoZXIgbGV2ZWwgKi8KLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/TGFiZWwg JyVzJyBub3QgZm91bmRcbiIscyk7IC8qIGlmIG5vbmUgKi8KLSAgICAgICAgICAgICAgICAgICAg cmV0dXJuKDApOyAgICAgICAgICAvKiBxdWl0ICovCi0gICAgICAgICAgICAgICAgfSBlbHNlIGNv bnRpbnVlOyAgICAgICAgLyogb3RoZXJ3aXNlIGxvb2sgYWdhaW4gKi8KLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIHJldHVybih4KTsgICAgICAgICAgICAgICAgICAvKiBTZW5kIGJhY2sgcmV0 dXJuIGNvZGUgKi8KLSAgICAgICAgfQotICAgIH0KLSAgICBwcmludGYoIj9TdGFjayBwcm9ibGVt IGluIEdPVE8gJXNcbiIscyk7IC8qIFNob3VsZG4ndCBzZWUgdGhpcyAqLwotICAgIHJldHVybigw KTsKLX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0vKiBGaW5pc2ggcGFyc2luZyBhbmQgZG8gdGhl IElGLCBYSUYsIGFuZCBXSElMRSBjb21tYW5kcyAqLwotCi0jaWZuZGVmIE5PU1BMCi0KLS8qICBD IEggSyBWIEEgUiAgLS0gIENoZWNrIChpZiBpdCdzIGEpIFZhcmlhYmxlICAqLwotCi0KLSNpZmRl ZiBPTERDSEtWQVIKLS8qCi0gIENydWRlIGFuZCBkaXNndXN0aW5nLCBidXQgbmVlZGVkIGZvciBP Uy8yLCBET1MsIGFuZCBXaW5kb3dzLCB3aGVyZSBmaWxlbmFtZXMKLSAgaGF2ZSBiYWNrc2xhc2hl cyBpbiB0aGVtLiAgSG93IGRvIHdlIGtub3cgaWYgYSBiYWNrc2xhc2ggaW4gYSBmaWxlbmFtZSBp cyBhCi0gIGRpcmVjdG9yeSBzZXBhcmF0b3IsIG9yIGlmIGl0J3MgYSBLZXJtaXQgYmFja3NsYXNo PyAgVGhpcyByb3V0aW5lIGRvZXMgYQotICByb3VnaCBzeW50YXggY2hlY2sgb2YgdGhlIG5leHQg ZmV3IGNoYXJhY3RlcnMgYW5kIGlmIGl0IGxvb2tzIGxpa2UgaXQgTUlHSFQKLSAgYmUgYSB2YXJp YWJsZSwgdGhlbiBpdCB0cmllcyB0byBldmFsdWF0ZSBpdCwgYW5kIGlmIHRoZSByZXN1bHQgaXMg bm90IGVtcHR5LAotICB3ZSBzYXkgaXQncyBhIHZhcmlhYmxlLCBhbHRob3VnaCBzb21ldGltZXMg aXQgbWlnaHQgbm90IGJlIC0tIHNvbWUgY2FzZXMgYXJlCi0gIHRydWx5IGFtYmlndW91cy4gIEZv ciBleGFtcGxlIHRoZXJlIG1pZ2h0IGEgRE9TIGRpcmVjdG9yeSBjYWxsZWQgXCVhLCBhbmQKLSAg d2UgYWxzbyBoYXZlIGEgdmFyaWFibGUgd2l0aCB0aGUgc2FtZSBuYW1lLiAgVGhpcyBpcyBhbGwg Zm9yIHRoZSBzYWtlIG9mIG5vdAotICBoYXZpbmcgdG8gdGVsbCBQQyB1c2VycyB0aGF0IHRoZXkg aGF2ZSB0byBkb3VibGUgYWxsIGJhY2tzbGFzaGVzIGluIGZpbGUKLSAgYW5kIGRpcmVjdG9yeSBu YW1lcy4KLSovCi0jZWxzZQotLyoKLSAgU29tZXdoYXQgbGVzcyBjcnVkZSAmIGRpc2d1c3Rpbmcu ICBUaGUgcHJldmlvdXMgbWV0aG9kIHdhcyBub25kZXRlcm1pbmlzdGljCi0gIGFuZCAod29yc2Up IGl0IGludGVyZmVyZWQgd2l0aCBtYWNybyBhcmd1bWVudCBwYXNzaW5nLiAgU28gbm93IHdlIG9u bHkKLSAgY2hlY2sgdGhlIHN5bnRheCBvZiBiYWNrc2xhc2gtaXRlbXMgdG8gc2VlIGlmIHRoZXkg YXJlIHZhcmlhYmxlcywgYnV0IHdlCi0gIGRvIE5PVCBjaGVjayB0aGVpciB2YWx1ZXMuCi0qLwot I2VuZGlmIC8qIE9MRENIS1ZBUiAqLwotLyoKLSAgQ2FsbCB3aXRoIGEgc3RyaW5nIHBvaW50ZXIg cG9pbnRpbmcgYXQgdGhlIGJhY2tzbGFzaCBvZiB0aGUgcHVycG9ydGVkCi0gIHZhcmlhYmxlLiAg UmV0dXJucyAxIGlmIGl0IGhhcyB0aGUgc3ludGF4IG9mIGEgdmFyaWFibGUsIDAgaWYgbm90Lgot Ki8KLWludAotY2hrdmFyKHMpIGNoYXIgKnM7IHsKLSAgICBpbnQgeiA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSZXR1cm4gY29kZSAtIGFzc3VtZSBmYWlsdXJlLiAqLwotICAgIGlm ICghcykgcyA9ICIiOyAgICAgICAgICAgICAgICAgICAgIC8qIFdhdGNoIG91ciBmb3IgbnVsbCBw b2ludGVycy4gKi8KLSAgICBpZiAoISpzKSByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAvKiBF bXB0eSBhcmcgc28gbm90IGEgdmFyaWFibGUuICovCi0gICAgaWYgKCpzID09IENNRFEpIHsgICAg ICAgICAgICAgICAgICAgLyogT2JqZWN0IGJlZ2lucyB3aXRoIGJhY2tzbGFzaC4gKi8KLSAgICAg ICAgY2hhciBjOwotICAgICAgICBjID0gc1sxXTsgICAgICAgICAgICAgICAgICAgICAgIC8qIENo YXJhY3RlciBmb2xsb3dpbmcgYmFja3NsYXNoLiAqLwotICAgICAgICBpZiAoYykgewotICAgICAg ICAgICAgaW50IHQgPSAwOwotICAgICAgICAgICAgaWYgKGMgPT0gQ01EUSkgICAgICAgICAgICAg IC8qIFF1b3RlZCBiYWNrc2xhc2ggKi8KLSAgICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAg ICAgICAgYyA9IChjaGFyKSAoaXNsb3dlcihjKSA/IHRvdXBwZXIoYykgOiBjKTsgLyogT3RoZXJ3 aXNlLi4uICovCi0gICAgICAgICAgICBpZiAoYyA9PSAnJScpIHsgICAgICAgICAgICAgLyogU2lt cGxlIHZhcmlhYmxlICovCi0jaWZkZWYgT0xEQ0hLVkFSCi0gICAgICAgICAgICAgICAgdCA9IDE7 Ci0jZWxzZQotICAgICAgICAgICAgICAgIHJldHVybigxKTsKLSNlbmRpZiAvKiBPTERDSEtWQVIg Ki8KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnJicpIHsgICAgICAvKiBBcnJheSAqLwot ICAgICAgICAgICAgICAgIGlmICghc1syXSkgcmV0dXJuKDApOwotICAgICAgICAgICAgICAgIGlm IChzWzNdID09ICdbJykKLSAgICAgICAgICAgICAgICAgIHQgPSBja2luZGV4KCJdIixzLDQsMCwx KTsKLSNpZm5kZWYgT0xEQ0hLVkFSCi0gICAgICAgICAgICAgICAgcmV0dXJuKCh0ID4gMCkgPyAx IDogMCk7Ci0jZW5kaWYgLyogT0xEQ0hLVkFSICovCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGMg PT0gJyQnIHx8ICAgICAgLyogRW52aXJvbm1lbnQgdmFyaWFibGUgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgYyA9PSAnVicgfHwgICAgICAvKiBCdWlsdC1pbiB2YXJpYWJsZSAqLwotICAgICAg ICAgICAgICAgICAgICAgICBjID09ICdNJykgeyAgICAgIC8qIE1hY3JvIG5hbWUgKi8KLSAgICAg ICAgICAgICAgICB0ID0gKHNbMl0gPT0gJygnKTsKLSNpZm5kZWYgT0xEQ0hLVkFSCi0gICAgICAg ICAgICAgICAgcmV0dXJuKCh0ID4gMCkgPyAxIDogMCk7Ci0jZW5kaWYgLyogT0xEQ0hLVkFSICov Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ0YnKSB7ICAgICAgLyogRnVuY3Rpb24gcmVm ZXJlbmNlICovCi0gICAgICAgICAgICAgICAgLyogRG9uJ3QgYWN0dWFsbHkgY2FsbCBpdCAtIGl0 IG1pZ2h0IGhhdmUgc2lkZSBlZmZlY3RzICovCi0gICAgICAgICAgICAgICAgaW50IHg7Ci0gICAg ICAgICAgICAgICAgaWYgKCh4ID0gY2tpbmRleCgiKCIscywzLDAsMSkpKSAvKiBKdXN0IGNoZWNr IHN5bnRheCAqLwotICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY2tpbmRleCgiKSIscyx4LDAs MSkpKQotICAgICAgICAgICAgICAgICAgICB6ID0gMTsKLSAgICAgICAgICAgICAgICAvKiBJbnNl cnQgYSBiZXR0ZXIgc3ludGF4IGNoZWNrIGhlcmUgaWYgbmVjZXNzYXJ5ICovCi0gICAgICAgICAg ICB9Ci0jaWZkZWYgT0xEQ0hLVkFSCi0gICAgICAgICAgICBpZiAodCkgewotICAgICAgICAgICAg ICAgIHQgPSAyNTU7ICAgICAgICAgICAgICAgIC8qIFRoaXMgbGV0cyB1cyB0ZXN0IFx2KHh4eCkg Ki8KLSAgICAgICAgICAgICAgICBscCA9IGxpbmU7ICAgICAgICAgICAgICAvKiBhbmQgZXZlbiBc Zi4uLih4eHgpICovCi0gICAgICAgICAgICAgICAgenpzdHJpbmcocywmbHAsJnQpOyAgICAgLyog RXZhbHVhdGUgaXQsIHdoYXRldmVyIGl0IGlzLiAqLwotICAgICAgICAgICAgICAgIHQgPSBzdHJs ZW4obGluZSk7ICAgICAgIC8qIEdldCBpdHMgbGVuZ3RoLiAqLwotICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsImNoa3ZhciIsbGluZSx0KTsKLSAgICAgICAgICAgICAgICB6ID0gdCA+IDA7ICAg ICAgICAgICAgICAvKiBJZiBsZW5ndGggPiAwLCBpdCdzIGRlZmluZWQgKi8KLSAgICAgICAgICAg IH0KLSNlbmRpZiAvKiBPTERDSEtWQVIgKi8KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4o eik7Ci19Ci0KLS8qICBCIE8gTyBMIEUgWCBQICAtLSAgRXZhbHVhdGUgYSBCb29sZWFuIGV4cHJl c3Npb24gICovCi0KLSNkZWZpbmUgQk9PTExFTiAxMDI0Ci1zdGF0aWMgY2hhciBib29sdmFsW0JP T0xMRU5dOwotCi1pbnQKLWJvb2xleHAoY3gpIGludCBjeDsgewotICAgIGludCB4LCB5LCB6OyBj aGFyICpzLCAqcDsKLSAgICBpbnQgcGFyZW5zID0gMCwgcGNvdW50ID0gMCwgZWNvdW50ID0gMDsK LSAgICBjaGFyICpxLCAqYng7Ci0gICAgc3RydWN0IEZEQiBrdywgbnU7Ci0jaWZkZWYgRk5GTE9B VAotICAgIHN0cnVjdCBGREIgZmw7Ci0gICAgQ0tGTE9BVCBmMSA9IDAuMCwgZjIgPSAwLjA7Ci0g ICAgaW50IGYxZmxhZyA9IDAsIGYyZmxhZyA9IDA7Ci0jZW5kaWYgLyogRk5GTE9BVCAqLwotI2lm ZGVmIE9TMgotICAgIGV4dGVybiBpbnQga2V5bWFjOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAg bm90ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3Igd2hldGhlciAi Tk9UIiB3YXMgc2VlbiAqLwotICAgIHogPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEluaXRpYWwgSUYgY29uZGl0aW9uICovCi0gICAgaWZhcmdzID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ291bnQgb2YgSUYgY29uZGl0aW9uIHdvcmRzICovCi0gICAgYnggPSBi b29sdmFsOyAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBib29sZWFuIHZhbHVl ICovCi0gICAgKmJ4ID0gTlVMOwotCi0gIGlmYWdhaW46Ci0gICAgY21mZGJpKCZrdywgICAgICAg ICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLwotICAg ICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAg ICAgICJOdW1iZXIsIG51bWVyaWMtdmFsdWVkIHZhcmlhYmxlLCBCb29sZWFuIGV4cHJlc3Npb24s IG9yIGtleXdvcmQiLAotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBh ZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICBuaWYsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotICAgICAgICAgICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gc2ls ZW50ICovCi0gICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vz c2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICBpZnRhYiwgICAgICAgICAgICAgICAgICAgICAg IC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgJm51ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICk7Ci0gICAgY21mZGJp KCZudSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMm5kIEZEQiAtIEFuIGludGVnZXIgKi8K LSAgICAgICAgICAgX0NNTlVNLCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAg ICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLwotICAgICAg ICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgKi8KLSAgICAgICAg ICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwot ICAgICAgICAgICAwLAotICAgICAgICAgICAwLAotICAgICAgICAgICB4eHN0cmluZywKLSAgICAg ICAgICAgTlVMTCwKLSNpZmRlZiBGTkZMT0FUCi0gICAgICAgICAgICZmbAotI2Vsc2UKLSAgICAg ICAgICAgTlVMTAotI2VuZGlmIC8qIEZORkxPQVQgKi8KLSAgICAgICAgICAgKTsKLSNpZmRlZiBG TkZMT0FUCi0gICAgY21mZGJpKCZmbCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQSBmbG9h dGluZy1wb2ludCBudW1iZXIgKi8KLSAgICAgICAgICAgX0NNRkxELCAgICAgICAgICAgICAgICAg ICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGhscG1zZyAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBh ZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLSAgICAgICAgICAgeHhz dHJpbmcsCi0gICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgKTsK LSNlbmRpZiAvKiBGTkZMT0FUICovCi0gICAgeCA9IGNtZmRiKCZrdyk7ICAgICAgICAgICAgICAg ICAgICAgLyogUGFyc2UgYSBrZXl3b3JkIG9yIGEgbnVtYmVyICovCi0gICAgZGVidWcoRjExMSwi Ym9vbHZhbCBjbWZkYiIsIiIseCk7Ci0gICAgaWYgKHggPCAwKSB7Ci0gICAgICAgIGlmICh4ID09 IC0zKQotICAgICAgICAgIHggPSAtMjsKLSAgICAgICAgcmV0dXJuKHgpOwotICAgIH0KLSAgICBk ZWJ1ZyhGMTExLCJib29sdmFsIHN3aXRjaCIsIiIsY21yZXN1bHQuZmNvZGUpOwotICAgIHN3aXRj aCAoY21yZXN1bHQuZmNvZGUpIHsgICAgICAgICAgIC8qIFdoYXQgZGlkIHdlIGdldD8gKi8KLSAg ICAgIGNhc2UgX0NNRkxEOiB7CQkJLyogQSAiZmllbGQiICovCi0JICBpbnQgaTsKLQkgIGNoYXIg KiBzOwotCSAgcyA9IGNtcmVzdWx0LnNyZXN1bHQ7Ci0vKgotICBDLUtlcm1pdCA5LjA6IFRoaXMg YWxsb3dzIGEgbWFjcm8gbmFtZSB0byBzZXJ2ZSBhcyBhbgotICBJRiBjb25kaXRpb24gd2l0aG91 dCBoYXZpbmcgdG8gZW5jbG9zZSBpdCBpbiBcbSguLi4pLgotKi8KLQkgIGlmICgKLSNpZmRlZiBG TkZMT0FUCSAgCi0JICAgICAgIWlzZmxvYXQoY21yZXN1bHQuc3Jlc3VsdCwwKSAvKiBOb3QgYSBu dW1iZXIgKi8KLSNlbHNlCi0JICAgICAgIWNoa251bShjbXJlc3VsdC5zcmVzdWx0KSAvKiBOb3Qg YSBudW1iZXIgKi8KLSNlbmRpZgkvKiBGTkZMT0FUICovCi0JICAgICAgKSB7Ci0JICAgICAgaSA9 IG1sb29rKG1hY3RhYixjbXJlc3VsdC5zcmVzdWx0LG5tYWMpOyAvKiBMb29rIGl0IHVwICovCi0J ICAgICAgaWYgKGkgPiAtMSkJCS8qIGluIHRoZSBtYWNybyB0YWJsZSAqLwotCQlzID0gbWFjdGFi W3hdLm12YWw7CS8qIGFuZCBnZXQgaXRzIHZhbHVlICovCi0JICAgICAgZWxzZQkJCS8qIE90aGVy d2lzZSBpZiBubyBzdWNoIG1hY3JvICovCi0JCXMgPSAiMCI7CQkvKiBldmFsdWF0ZSBhcyBGQUxT RS4gKi8KLQkgIH0KLSNpZmRlZiBGTkZMT0FUCi0gICAgICAgIGlmIChpc2Zsb2F0KHMsMCkpIHsJ CS8qIEEgZmxvYXRpbmctcG9pbnQgbnVtYmVyPyAqLwotICAgICAgICAgICAgZjEgPSBmbG9hdHZh bDsgICAgICAgICAgICAgIC8qIFllcywgZ2V0IGl0cyB2YWx1ZSAqLwotICAgICAgICAgICAgZjFm bGFnID0gMTsgICAgICAgICAgICAgICAgIC8qIHJlbWVtYmVyIHdlIGRpZCB0aGlzICovCi0gICAg ICAgICAgICBpZmMgPSA5OTk5OyAgICAgICAgICAgICAgICAgLyogU2V0IHNwZWNpYWwgImlmLWNv ZGUiICovCi0gICAgICAgIH0KLSNlbHNlCi0JaWYgKGNoa251bShzKSkgewotCSAgICBjbXJlc3Vs dC5ucmVzdWx0ID0gYXRvaShzKTsKLQkgICAgaWZjID0gOTk5OTsKLQkgICAgYnJlYWs7Ci0JfQot I2VuZGlmIC8qIEZORkxPQVQgKi8KLQllbHNlCi0JICByZXR1cm4oLTIpOwotICAgICAgfQotICAg ICAgY2FzZSBfQ01OVU06ICAgICAgICAgICAgICAgICAgICAgIC8qIEEgbnVtYmVyLi4uICovCi0g ICAgICAgIGlmYyA9IDk5OTk7ICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHNwZWNpYWwgImlm LWNvZGUiICovCi0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBfQ01LRVk6ICAgICAgICAgICAg ICAgICAgICAgIC8qIEEga2V5d29yZCAqLwotICAgICAgICBpZmMgPSBjbXJlc3VsdC5ucmVzdWx0 OyAgICAgICAgIC8qIEdldCBpZi1jb2RlICovCi0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs dDoKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0gICAgc3dpdGNoIChpZmMpIHsgICAgICAg ICAgICAgICAgICAgICAgLyogc2V0IHogPSAxIGZvciB0cnVlLCAwIGZvciBmYWxzZSAqLwotICAg ICAgY2FzZSA5OTk5OiAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciAqLwotI2lmZGVm IEZORkxPQVQKLSAgICAgICAgaWYgKGYxZmxhZykgewotICAgICAgICAgICAgeiA9IChmMSA9PSAw LjApID8gMCA6IDE7Ci0gICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIEZORkxPQVQgKi8KLSAgICAg ICAgeiA9IChjbXJlc3VsdC5ucmVzdWx0ID09IDApID8gMCA6IDE7Ci0gICAgICAgIGJyZWFrOwot ICAgICAgY2FzZSBYWElGTFA6ICAgICAgICAgICAgICAgICAgICAgIC8qIExlZnQgcGFyZW4gKi8K LSAgICAgICAgaWYgKHBjb3VudCA9PSAwICYmIGlmYXJncyA+IDApCi0gICAgICAgICAgcmV0dXJu KC0yKTsKLSAgICAgICAgcGFyZW5zID0gMTsKLSAgICAgICAgcGNvdW50Kys7Ci0gICAgICAgIGlm YXJncysrOwotICAgICAgICAqYngrKyA9ICcoJzsKLSAgICAgICAgZ290byBpZmFnYWluOwotICAg ICAgY2FzZSBYWElGUlA6ICAgICAgICAgICAgICAgICAgICAgIC8qIFJpZ2h0IHBhcmVuICovCi0g ICAgICAgIGlmICghcGFyZW5zKQotICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIGlmICgt LXBjb3VudCA8IDApCi0gICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgaWZhcmdzKys7Ci0g ICAgICAgICpieCsrID0gJyknOwotICAgICAgICAqYnggPSBOVUw7Ci0gICAgICAgIGlmIChwY291 bnQgPT0gMCkKLSAgICAgICAgICBnb3RvIGlmZW5kOwotICAgICAgICBnb3RvIGlmYWdhaW47Ci0g ICAgICBjYXNlIFhYSUZBTjogICAgICAgICAgICAgICAgICAgICAgLyogQU5EICgmJikgKi8KLSAg ICAgICAgaWZhcmdzKys7Ci0gICAgICAgIGlmICghZWNvdW50KQotICAgICAgICAgIHJldHVybigt Mik7Ci0gICAgICAgICpieCsrID0gJyYnOwotICAgICAgICBnb3RvIGlmYWdhaW47Ci0gICAgICBj YXNlIFhYSUZPUjogICAgICAgICAgICAgICAgICAgICAgLyogT1IgKHx8KSAqLwotICAgICAgICBp ZmFyZ3MrKzsKLSAgICAgICAgaWYgKCFlY291bnQpCi0gICAgICAgICAgcmV0dXJuKC0yKTsKLSAg ICAgICAgKmJ4KysgPSAnfCc7Ci0gICAgICAgIGdvdG8gaWZhZ2FpbjsKLSAgICAgIGNhc2UgWFhJ Rk5POiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBOT1QgWyBOT1QgWyBOT1QgLi4uIF0gXSAq LwotICAgICAgICBpZiAoYnggPiBib29sdmFsKSB7ICAgICAgICAgICAgIC8qIGV2YWxhKCkgZG9l c24ndCBsaWtlIGNhc2NhZGVkICovCi0gICAgICAgICAgICBpZiAoKihieC0xKSA9PSAnIScpIHsg ICAgICAgLyogdW5hcnkgb3BlcmF0b3JzLi4uICovCi0gICAgICAgICAgICAgICAgKihieC0xKSA9 IE5VTDsgICAgICAgICAgLyogU28gaGVyZSwgdHdvIHdyb25ncyBtYWtlIGEgcmlnaHQuICovCi0g ICAgICAgICAgICAgICAgYngtLTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgKmJ4KysgPSAnISc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAqYngrKyA9ICchJzsKLSAgICAgICAgfQotICAgICAgICBpZmFyZ3MrKzsKLSAgICAgICAg Z290byBpZmFnYWluOwotICAgICAgY2FzZSBYWElGVFI6ICAgICAgICAgICAgICAgICAgICAgIC8q IElGIFRSVUUgKi8KLSAgICAgICAgeiA9IDE7Ci0gICAgICAgIGRlYnVnKEYxMDEsImlmIHRydWUi LCIiLHopOwotICAgICAgICBpZmFyZ3MgKz0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl IFhYSUZOVDogICAgICAgICAgICAgICAgICAgICAgLyogSUYgRkFMU0UgKi8KLSAgICAgICAgeiA9 IDA7Ci0gICAgICAgIGRlYnVnKEYxMDEsImlmIHRydWUiLCIiLHopOwotICAgICAgICBpZmFyZ3Mg Kz0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhYSUZTVTogICAgICAgICAgICAgICAg ICAgICAgLyogSUYgU1VDQ0VTUyAqLwotICAgICAgICB6ID0gKCBzdWNjZXNzICE9IDAgKSA/IDEg OiAwOwotICAgICAgICBkZWJ1ZyhGMTAxLCJpZiBzdWNjZXNzIiwiIix6KTsKLSAgICAgICAgaWZh cmdzICs9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBYWElGRkE6ICAgICAgICAgICAg ICAgICAgICAgIC8qIElGIEZBSUxVUkUgKi8KLSAgICAgICAgeiA9ICggc3VjY2VzcyA9PSAwICkg PyAxIDogMDsKLSAgICAgICAgZGVidWcoRjEwMSwiaWYgZmFpbHVyZSIsIiIseik7Ci0gICAgICAg IGlmYXJncyArPSAxOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBYWElGREU6ICAgICAg ICAgICAgICAgICAgICAgIC8qIElGIERFRklORUQgKi8KLSAgICAgICAgaWYgKCh4ID0gY21mbGQo Ik1hY3JvIG9yIHZhcmlhYmxlIG5hbWUiLCIiLCZzLE5VTEwpKSA8IDApCi0gICAgICAgICAgcmV0 dXJuKCh4ID09IC0zKSA/IC0yIDogeCk7Ci0KLSAgICAgICAgaWYgKCpzID09IENNRFEpIHsKLSAg ICAgICAgICAgIGNoYXIgKiBscDsKLSAgICAgICAgICAgIGNoYXIgbGluZVsyNTZdOwotICAgICAg ICAgICAgaW50IHQsIHg7Ci0gICAgICAgICAgICBpZiAoKihzKzEpID09ICdmJyB8fCAqKHMrMSkg PT0gJ0YnKSB7IC8qIEJ1aWx0LWluIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICAgZXh0ZXJu IHN0cnVjdCBrZXl0YWIgZm5jdGFiW107Ci0gICAgICAgICAgICAgICAgZXh0ZXJuIGludCBuZnVu Y3M7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscysyLDI1Nik7Ci0gICAgICAgICAg ICAgICAgaWYgKGxpbmVbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgbHAgPSBja3N0cmNocihs aW5lLCcoJyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChscCkgKmxwID0gTlVMOwotICAgICAg ICAgICAgICAgICAgICB4ID0gbG9va3VwKGZuY3RhYixsaW5lLG5mdW5jcywmdCk7Ci0gICAgICAg ICAgICAgICAgICAgIHogPSB4ID4gLTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsImlmIGRlZmluZWQgZnVuY3Rpb24iLGxpbmUseik7Ci0gICAgICAgICAg ICB9IGVsc2UgaWYgKCoocysxKSA9PSAndicgfHwgKihzKzEpID09ICdWJykgeyAvKiA4LjAuMjAw ICovCi0gICAgICAgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdmFydGFiW107Ci0gICAg ICAgICAgICAgICAgZXh0ZXJuIGludCBudmFyczsKLSAgICAgICAgICAgICAgICB6ID0gMDsKLSAg ICAgICAgICAgICAgICBpZiAoKihzKzIpID09ICcoJykgewotICAgICAgICAgICAgICAgICAgICBj a3N0cm5jcHkobGluZSxzKzMsMjU2KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVbMF0p IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxwID0gY2tzdHJjaHIobGluZSwnKScpOwotICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGxwKSAqbHAgPSBOVUw7Ci0gICAgICAgICAgICAgICAg ICAgICAgICB4ID0gbG9va3VwKHZhcnRhYixsaW5lLG52YXJzLCZ0KTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHogPSB4ID4gLTE7Ci0JCQlpZiAoeikgewkvKiA4LjAuMjAzICovCi0JCQkgICAg aW50IHQ7CS8qIEl0IG11c3QgaGF2ZSBhIHZhbHVlIHRvIHN1Y2NlZWQgKi8KLQkJCSAgICB0ID0g MjU1OwkvKiBhcyBpbiBDLUtlcm1pdCA2LjAgYW5kIDcuMCAqLwotCQkJICAgIGxwID0gbGluZTsJ LyogKHRoaXMgd2FzIGJyb2tlbiBpbiA4LjAuMjAwLTIwMSkgKi8KLQkJCSAgICB6enN0cmluZyhz LCZscCwmdCk7Ci0JCQkgICAgdCA9IHN0cmxlbihsaW5lKTsKLQkJCSAgICB6ID0gbGluZVswXSA/ IDEgOiAwOwotCQkJfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImlmIGRlZmluZWQgdmFyaWFibGUiLGxpbmUseik7 Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHogPSBjaGt2YXIocyk7ICAg ICAgICAgIC8qIFN0YXJ0cyB3aXRoIGJhY2tzbGFzaCAqLwotICAgICAgICAgICAgICAgIGlmICh6 ID4gMCkgeyAgICAgICAgICAgIC8qIFllcy4uLiAqLwotICAgICAgICAgICAgICAgICAgICB0ID0g MjU1OyAgICAgICAgICAgIC8qIHRoYW4gYnVmZmVyIHNvIGlmIHp6c3RyaW5nIGZhaWxzICAqLwot ICAgICAgICAgICAgICAgICAgICBscCA9IGxpbmU7ICAgICAgICAgIC8qIGNoZWNrIGZvciB0aGF0 IC0tIG92ZXJmbG93IG1lYW5zICovCi0gICAgICAgICAgICAgICAgICAgIGxpbmVbMF0gPSBOVUw7 ICAgICAgLyogdGhlIHF1YW50aXR5IGlzIGRlZmluZWQuICovCi0gICAgICAgICAgICAgICAgICAg IHggPSB6enN0cmluZyhzLCZscCwmdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoeCA8IDAg JiYgdCAhPSAyNTUpIHx8ICFsaW5lWzBdKQotICAgICAgICAgICAgICAgICAgICAgIHogPSAwOwot ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJpZiBkZWZpbmVkIHp6c3RyaW5nIixsaW5l LHopOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJpZiBkZWZpbmVkIHp6c3RyaW5n IHQiLCIiLHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgIHogPSAobXhsb29rKG1hY3RhYixzLG5tYWMpID4gLTEpOyAvKiBM b29rIGZvciBleGFjdCBtYXRjaCAqLwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMTEsImlm IGRlZmluZWQgZmluYWwiLHMseik7Ci0gICAgICAgIGlmYXJncyArPSAyOwotICAgICAgICBicmVh azsKLQotICAgICAgY2FzZSBYWElGREM6IHsgICAgICAgICAgICAgICAgICAgIC8qIElGIERFQ0xB UkVEICovCi0gICAgICAgICAgY2hhciAqIGxwOwotICAgICAgICAgIGNoYXIgbGluZVszMl07Ci0g ICAgICAgICAgaW50IGosIGssIHQsIHg7Ci0gICAgICAgICAgaWYgKCh4ID0gY21mbGQoIkFycmF5 IG5hbWUiLCIiLCZzLE5VTEwpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oKHggPT0gLTMpID8g LTIgOiB4KTsKLSAgICAgICAgICBpZiAoKnMgPT0gQ01EUSkgewotICAgICAgICAgICAgICBpZiAo KihzKzEpICE9ICcmJykgewotICAgICAgICAgICAgICAgICAgdCA9IDMxOwotICAgICAgICAgICAg ICAgICAgbHAgPSBsaW5lOwotICAgICAgICAgICAgICAgICAgbGluZVswXSA9IE5VTDsKLSAgICAg ICAgICAgICAgICAgIHggPSB6enN0cmluZyhzLCZscCwmdCk7Ci0gICAgICAgICAgICAgICAgICBz ID0gbGluZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICB6ID0gMDsK LSAgICAgICAgICBpZiAoKHggPSBhcnJheWJvdW5kcyhzLCZqLCZrKSkgPiAtMSkgewotICAgICAg ICAgICAgICBpZiAoYV9wdHJbeF0pIHsKLSAgICAgICAgICAgICAgICAgIGlmIChqIDwgMSkKLSAg ICAgICAgICAgICAgICAgICAgeiA9IDE7Ci0gICAgICAgICAgICAgICAgICBlbHNlIGlmIChqIDw9 IGFfZGltW3hdKQotICAgICAgICAgICAgICAgICAgICB6ID0gMTsKLSAgICAgICAgICAgICAgICAg IGlmICh6ID09IDEgJiYgayA+IGFfZGltW3hdKQotICAgICAgICAgICAgICAgICAgICB6ID0gMDsK LSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgIH0K LSAgICAgIGNhc2UgWFhJRkJHOiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBCQUNLR1JPVU5E ICovCi0gICAgICBjYXNlIFhYSUZGRzogICAgICAgICAgICAgICAgICAgICAgLyogSUYgRk9SRUdS T1VORCAqLwotICAgICAgICBiZ2NoaygpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNr IGJhY2tncm91bmQgc3RhdHVzICovCi0gICAgICAgIGlmIChpZmMgPT0gWFhJRkZHKSAgICAgICAg ICAgICAgLyogRm9yZWdyb3VuZCAqLwotICAgICAgICAgIHogPSBwZmxhZyA/IDEgOiAwOwotICAg ICAgICBlbHNlIHogPSBwZmxhZyA/IDAgOiAxOyAgICAgICAgIC8qIEJhY2tncm91bmQgKi8KLSAg ICAgICAgaWZhcmdzICs9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhYSUZDTzog ICAgICAgICAgICAgICAgICAgICAgLyogSUYgQ09VTlQgKi8KLSAgICAgICAgeiA9ICggLS1jb3Vu dFtjbWRsdmxdID4gMCApOwotICAgICAgICBpZiAoY3ggPT0gWFhXSEkpIGNvdW50W2NtZGx2bF0g Kz0gMjsgLyogRG9uJ3QgYXNrLi4uICovCi0gICAgICAgIGRlYnVnKEYxMDEsImlmIGNvdW50Iiwi Iix6KTsKLSAgICAgICAgaWZhcmdzICs9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNl IFhYSUZFWDogICAgICAgICAgICAgICAgICAgICAgLyogSUYgRVhJU1QgKi8KLSNpZmRlZiBDS19U TVBESVIKLSAgICAgIGNhc2UgWFhJRkRJOiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBESVJF Q1RPUlkgKi8KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLSAgICAgIGNhc2UgWFhJRkFCOiAgICAg ICAgICAgICAgICAgICAgICAvKiBJRiBBQlNPTFVURSAqLwotICAgICAgY2FzZSBYWElGTE46CQkJ LyogSUYgTElOSyAqLwotICAgICAgICBpZiAoKHggPSBjbWZsZCgKLSAgICAgICAgICAgICAgICAg ICAgICAgKChpZmMgPT0gWFhJRkRJKSA/ICJEaXJlY3RvcnkgbmFtZSIgOiAiRmlsZSIpLAotICAg ICAgICAgICAgICAgICAgICAgICAiIiwmcywKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCAgICAgICAgICAgICAvKiBUaGlzIGFsbG93cyBcJ3MgaW4gZmlsZW5hbWVzICov Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZwotI2VuZGlmIC8qIE9TMiAq LwotICAgICAgICAgICAgICAgICAgICAgICApKSA8IDApIHsKLSAgICAgICAgICAgIGlmICh4ID09 IC0zKSB7Ci0gICAgICAgICAgICAgICAgZXh0ZXJuIGludCBjbWZsZ3M7Ci0gICAgICAgICAgICAg ICAgaWYgKGNtZmxncyA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0ZpbGUg b3IgZGlyZWN0b3J5IG5hbWUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1 cm4oLTkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSByZXR1cm4oeCk7 Ci0gICAgICAgIH0KLSAgICAgICAgcyA9IGJyc3RyaXAocyk7Ci0jaWZkZWYgVU5JWAotCWlmIChp ZmMgPT0gWFhJRkxOKSB7Ci0JICAgIHogPSBpc2FsaW5rKHMpOwotCX0gZWxzZQotI2VuZGlmCS8q IFVOSVggKi8KLSAgICAgICAgaWYgKGlmYyA9PSBYWElGQUIpIHsKLSAgICAgICAgICAgIHogPSBp c2Fic29sdXRlKHMpOwotICAgICAgICB9IGVsc2UgaWYgKGlmYyA9PSBYWElGRVgpIHsKLSAgICAg ICAgICAgIHogPSAoemdldGZzKHMpID4gLTFMKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImlm IGV4aXN0IDEiLCIiLHopOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgaWYgKCF6KSB7ICAgICAg ICAgICAgICAgICAgIC8qIEZpbGUgbm90IGZvdW5kLiAqLwotICAgICAgICAgICAgICAgIGludCB0 OyAgICAgICAgICAgICAgICAgIC8qIFRyeSBleHBhbmRpbmcgdmFyaWFibGVzICovCi0gICAgICAg ICAgICAgICAgdCA9IExJTkJVRlNJWi0xOyAgICAgICAgLyogYW5kIGxvb2tpbmcgYWdhaW4uICov Ci0gICAgICAgICAgICAgICAgbHAgPSBsaW5lOwotICAgICAgICAgICAgICAgIHp6c3RyaW5nKHMs JmxwLCZ0KTsKLSAgICAgICAgICAgICAgICBzID0gbGluZTsKLSAgICAgICAgICAgICAgICB6ID0g KCB6Y2hraShzKSA+IC0xTCApOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImlmIGV4aXN0 IDIiLCIiLHopOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIENLX1RN UERJUgotICAgICAgICB9IGVsc2UgewotI2lmZGVmIFZNUwotICAgICAgICAgICAgeiA9ICh6Y2hr aShzKSA9PSAtMikKLSNlbHNlCi0vKiBCZWNhdXNlIHRoaXMgZG9lc24ndCBjYXRjaCAkRElTSzE6 W0ZPT11CTEFILkRJUjsxICovCi0gICAgICAgICAgICB6ID0gaXNkaXIocykKLSNpZmRlZiBPUzIK LSAgICAgICAgICAgICAgfHwgKGlzYWxwaGEoc1swXSkgJiYgc1sxXSA9PSAnOicgJiYgc1syXSA9 PSBOVUwpCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgICAgICAgICAg IDsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImlmIGRpcmVjdG9yeSAxIiwiIix6KTsKLQotICAg ICAgICAgICAgaWYgKCF6KSB7CQkJLyogRmlsZSBub3QgZm91bmQuICovCi0gICAgICAgICAgICAg ICAgaW50IHQ7ICAgICAgICAgICAgICAgICAgLyogVHJ5IGV4cGFuZGluZyB2YXJpYWJsZXMgKi8K LSAgICAgICAgICAgICAgICB0ID0gTElOQlVGU0laLTE7ICAgICAgICAvKiBhbmQgbG9va2luZyBh Z2Fpbi4gKi8KLSAgICAgICAgICAgICAgICBscCA9IGxpbmU7Ci0gICAgICAgICAgICAgICAgenpz dHJpbmcocywmbHAsJnQpOwotICAgICAgICAgICAgICAgIHMgPSBsaW5lOwotICAgICAgICAgICAg ICAgIHogPSBpc2RpcihzKQotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgfHwgKGlzYWxw aGEoc1swXSkgJiYgc1sxXSA9PSAnOicgJiYgc1syXSA9PSBOVUwpCi0jZW5kaWYgLyogT1MyICov Ci0gICAgICAgICAgICAgICAgICAgIDsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJpZiBk aXJlY3RvcnkgMiIsIiIseik7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfVE1QRElSICov Ci0gICAgICAgIH0KLSAgICAgICAgaWZhcmdzICs9IDI7Ci0gICAgICAgIGJyZWFrOwotCi0gICAg ICBjYXNlIFhYSUZFUTogICAgICAgICAgICAgICAgICAgICAgLyogSUYgRVFVQUwgKHN0cmluZyBj b21wYXJpc29uKSAqLwotICAgICAgY2FzZSBYWElGTEw6ICAgICAgICAgICAgICAgICAgICAgIC8q IElGIExleGljYWxseSBMZXNzIFRoYW4gKi8KLSAgICAgIGNhc2UgWFhJRkxHOiAgICAgICAgICAg ICAgICAgICAgICAvKiBJZiBMZXhpY2FsbHkgR3JlYXRlciBUaGFuICovCi0gICAgICAgIGlmICgo eCA9IGNtZmxkKCJmaXJzdCB3b3JkIG9yIHZhcmlhYmxlIG5hbWUiLCIiLCZzLHh4c3RyaW5nKSkg PCAwKSB7Ci0gICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgIHByaW50 ZigiP1RleHQgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAg ICAgICAgICB9IGVsc2UgcmV0dXJuKHgpOwotICAgICAgICB9Ci0gICAgICAgIHMgPSBicnN0cmlw KHMpOyAgICAgICAgICAgICAgICAgLyogU3RyaXAgYnJhY2VzICovCi0gICAgICAgIHggPSAoaW50 KXN0cmxlbihzKTsKLSAgICAgICAgaWYgKHggPiBMSU5CVUZTSVotMSkgewotICAgICAgICAgICAg cHJpbnRmKCI/SUY6IHN0cmluZ3MgdG9vIGxvbmdcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0y KTsKLSAgICAgICAgfQotICAgICAgICBscCA9IGxpbmU7ICAgICAgICAgICAgICAgICAgICAgIC8q IGxwIHBvaW50cyB0byBmaXJzdCBzdHJpbmcgKi8KLSAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxM SU5CVUZTSVopOwotICAgICAgICBpZiAoKHkgPSBjbWZsZCgic2Vjb25kIHdvcmQgb3IgdmFyaWFi bGUgbmFtZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgIGlmICh5ID09IC0z KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VGV4dCByZXF1aXJlZFxuIik7Ci0gICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0gZWxzZSByZXR1cm4oeSk7Ci0gICAg ICAgIH0KLSAgICAgICAgcyA9IGJyc3RyaXAocyk7Ci0gICAgICAgIHkgPSAoaW50KXN0cmxlbihz KTsKLSAgICAgICAgaWYgKHggKyB5ICsgMiA+IExJTkJVRlNJWikgewotICAgICAgICAgICAgcHJp bnRmKCI/SUY6IHN0cmluZ3MgdG9vIGxvbmdcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsK LSAgICAgICAgfQotICAgICAgICB0cCA9IGxwICsgeCArIDI7ICAgICAgICAgICAgICAgIC8qIHRw IHBvaW50cyB0byBzZWNvbmQgc3RyaW5nICovCi0gICAgICAgIHN0cmNweSh0cCxzKTsgICAgICAg ICAgICAgICAgICAgLyogc2FmZSAoY2hlY2tlZCkgKi8KLSAgICAgICAgeCA9IGNrc3RyY21wKGxw LHRwLC0xLGlucGNhc1tjbWRsdmxdKTsgLyogVXNlIGxvbmdlc3QgbGVuZ3RoICovCi0gICAgICAg IHN3aXRjaCAoaWZjKSB7Ci0gICAgICAgICAgY2FzZSBYWElGRVE6ICAgICAgICAgICAgICAgICAg LyogSUYgRVFVQUwgKHN0cmluZyBjb21wYXJpc29uKSAqLwotICAgICAgICAgICAgeiA9ICh4ID09 IDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBYWElGTEw6ICAgICAgICAg ICAgICAgICAgLyogSUYgTGV4aWNhbGx5IExlc3MgVGhhbiAqLwotICAgICAgICAgICAgeiA9ICh4 IDwgMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFhYSUZMRzogICAgICAg ICAgICAgICAgICAvKiBJZiBMZXhpY2FsbHkgR3JlYXRlciBUaGFuICovCi0gICAgICAgICAgICB6 ID0gKHggPiAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVn KEYxMDEsIklGIEVRIHJlc3VsdCIsIiIseik7Ci0gICAgICAgIGlmYXJncyArPSAzOwotICAgICAg ICBicmVhazsKLQotICAgICAgY2FzZSBYWElGVkU6ICAgICAgICAgICAgICAgICAgICAgIC8qIElG IFZFUlNJT04gKi8KLSAgICAgIGNhc2UgWFhJRkFFOiAgICAgICAgICAgICAgICAgICAgICAvKiBJ RiAoYXJpdGhtZXRpY2FsbHkpID0gKi8KLSAgICAgIGNhc2UgWFhJRk5ROiAgICAgICAgICAgICAg ICAgICAgICAvKiBJRiAhPSAobm90IGFyaXRobWV0aWNhbGx5IGVxdWFsKSAqLwotICAgICAgY2Fz ZSBYWElGTFQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIElGIDwgICovCi0gICAgICBjYXNlIFhY SUZMRTogICAgICAgICAgICAgICAgICAgICAgLyogSUYgPD0gKi8KLSAgICAgIGNhc2UgWFhJRkdF OiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiA+PSAqLwotICAgICAgY2FzZSBYWElGR1Q6IHsg ICAgICAgICAgICAgICAgICAgIC8qIElGID4gICovCi0KLQkgIC8qIEp1bHkgMjAwNiAtIGNvbnZl cnRlZCB0byB1c2UgQ0tfT0ZGX1QgcmF0aGVyIHRoYW4gaW50IHRvICovCi0gICAgICAgICAgLyog YWxsb3cgbG9uZyBpbnRlZ2VycyBvbiBwbGF0Zm9ybXMgdGhhdCBoYXZlIGNrX29mZl90ID4gMzIg Yml0cyAqLwotCSAgaW50IHh4OwotCSAgQ0tfT0ZGX1QgbjEgPSAoQ0tfT0ZGX1QpMCwgbjIgPSAo Q0tfT0ZGX1QpMDsKLSAgICAgICAgaWYgKGlmYyA9PSBYWElGVkUpIHsKLSAgICAgICAgICAgIG4x ID0gKENLX09GRl9UKSB2ZXJudW07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB4ID0g Y21mbGQoImZpcnN0IG51bWJlciBvciB2YXJpYWJsZSBuYW1lIiwiIiwmcyx4eHN0cmluZyk7Ci0g ICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1F1YW50 aXR5IHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKHggPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJ4eGlmZ3QgY21mbGQiLCIiLHgpOwotICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUs cyxMSU5CVUZTSVopOwotICAgICAgICAgICAgbHAgPSBicnN0cmlwKGxpbmUpOwotICAgICAgICAg ICAgZGVidWcoRjExMCwieHhpZmd0IGV4cDEiLGxwLDApOwotCi0vKiBUaGUgZm9sbG93aW5nIGJp dCBpcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCB2ZXJzaW9ucyBvZiBNUy1ET1MgS2VybWl0 ICovCi0KLSAgICAgICAgICAgIGlmICghY2tzdHJjbXAobHAsImNvdW50Iiw1LDApKSB7Ci0gICAg ICAgICAgICAgICAgbjEgPSAoQ0tfT0ZGX1QpY291bnRbY21kbHZsXTsKLSAgICAgICAgICAgIH0g ZWxzZSBpZiAoIWNrc3RyY21wKGxwLCJ2ZXJzaW9uIiw3LDApKSB7Ci0gICAgICAgICAgICAgICAg bjEgPSAoQ0tfT0ZGX1QpIHZlcm51bTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21w KGxwLCJhcmdjIiw0LDApKSB7Ci0gICAgICAgICAgICAgICAgbjEgPSAoQ0tfT0ZGX1QpIG1hY2Fy Z2NbbWFjbHZsXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0KLS8qIEVuZCBvZiBjb21wYXRpYmls aXR5IGJpdCAqLwotCi0jaWZkZWYgRk5GTE9BVAotICAgICAgICAgICAgICAgIGlmIChpc2Zsb2F0 KGxwLDApID4gMSkgeyAvKiBBbGxvdyBmbG9hdGluZy1wb2ludCBjb21wYXJpc29ucyAqLwotICAg ICAgICAgICAgICAgICAgICBmMSA9IGZsb2F0dmFsOwotICAgICAgICAgICAgICAgICAgICBmMWZs YWcgPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIEZORkxPQVQgKi8KLSAg ICAgICAgICAgICAgICAgIGlmIChjaGtudW0obHApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg bjEgPSBja2F0b2ZzKGxwKTsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAvKiBDaGVjayBmb3IgYXJpdGhtZXRpYyBleHByZXNzaW9uICovCi0gICAgICAgICAgICAgICAg ICAgICAgcSA9IGV2YWxhKGxwKTsgICAgLyogY21udW0oKSBkb2VzIHRoaXMgYnV0IC4uLiAqLwot ICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGtudW0ocSkpIHsJLyogd2UncmUgbm90IHVzaW5n IGNtbnVtKCkuICovCi0JCQkgIG4xID0gY2thdG9mcyhxKTsKLQkJICAgICAgfSBlbHNlIHsKLQkJ CSAgcHJpbnRmKCI/VmFsdWUgbm90IG51bWVyaWMgLSAlcyIsIGxwKTsKLQkJCSAgcmV0dXJuKC05 KTsKLQkJICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgICAgIHkgPSBjbWZsZCgibnVtYmVyIG9yIHZhcmlhYmxlIG5hbWUiLCIiLCZzLHh4 c3RyaW5nKTsKLSAgICAgICAgaWYgKHkgPT0gLTMpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1F1 YW50aXR5IHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKHkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIHMgPSBicnN0cmlwKHMpOwot ICAgICAgICBpZiAoISpzKSByZXR1cm4oLTIpOwotICAgICAgICBpZiAoaWZjID09IFhYSUZWRSkg ewotICAgICAgICAgICAgdHAgPSBsaW5lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg eCA9IChpbnQpc3RybGVuKGxwKTsKLSAgICAgICAgICAgIHRwID0gbGluZSArIHggKyAyOwotICAg ICAgICB9Ci0gICAgICAgIGNrc3RybmNweSh0cCxzLExJTkJVRlNJWi14LTIpOwotICAgICAgICBk ZWJ1ZyhGMTEwLCJ4eGlmZ3QgZXhwMiIsdHAsMCk7Ci0gICAgICAgIGlmICghY2tzdHJjbXAodHAs ImNvdW50Iiw1LDApKSB7Ci0gICAgICAgICAgICBuMiA9IChDS19PRkZfVCkgY291bnRbY21kbHZs XTsKLSAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAodHAsInZlcnNpb24iLDcsMCkpIHsKLSAg ICAgICAgICAgIG4yID0gKENLX09GRl9UKSB2ZXJudW07Ci0gICAgICAgIH0gZWxzZSBpZiAoIWNr c3RyY21wKHRwLCJhcmdjIiw0LDApKSB7Ci0gICAgICAgICAgICBuMiA9IChDS19PRkZfVCkgbWFj YXJnY1ttYWNsdmxdOwotICAgICAgICB9IGVsc2UgewotI2lmZGVmIEZORkxPQVQKLSAgICAgICAg ICAgIGlmIChpc2Zsb2F0KHRwLDApID4gMSkgewotICAgICAgICAgICAgICAgIGYyID0gZmxvYXR2 YWw7Ci0gICAgICAgICAgICAgICAgZjJmbGFnID0gMTsKLSAgICAgICAgICAgIH0gZWxzZQotI2Vu ZGlmIC8qIEZORkxPQVQgKi8KLSAgICAgICAgICAgIGlmIChjaGtudW0odHApKSB7Ci0gICAgICAg ICAgICAgICAgbjIgPSBja2F0b2ZzKHRwKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAgICAgcSA9IGV2YWxhKHRwKTsKLQkJaWYgKGNoa251bShxKSkgewkvKiB3ZSdyZSBub3Qg dXNpbmcgY21udW0oKS4gKi8KLQkJICAgIG4yID0gY2thdG9mcyhxKTsKLQkJfSBlbHNlIHsKLQkJ ICAgIHByaW50ZigiP1ZhbHVlIG5vdCBudW1lcmljIC0gJXMiLCB0cCk7Ci0JCSAgICByZXR1cm4o LTkpOwotCQl9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgeHggPSAoaWZjID09 IFhYSUZWRSkgPyBYWElGR0UgOiBpZmM7Ci0KLSNpZmRlZiBGTkZMT0FUCi0gICAgICAgIGlmIChm MWZsYWcgJiYgIWYyZmxhZykgewotICAgICAgICAgICAgZjIgPSAoQ0tGTE9BVCluMjsKLSAgICAg ICAgICAgIGYyZmxhZyA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGYyZmxhZyAmJiAhZjFm bGFnKQotICAgICAgICAgIGYxID0gKENLRkxPQVQpbjE7Ci0gICAgICAgIGlmIChmMWZsYWcpCi0g ICAgICAgICAgeiA9ICgoZjEgPCAgZjIgJiYgeHggPT0gWFhJRkxUKQotICAgICAgICAgICAgICAg fHwgKGYxICE9IGYyICYmIHh4ID09IFhYSUZOUSkKLSAgICAgICAgICAgICAgIHx8IChmMSA8PSBm MiAmJiB4eCA9PSBYWElGTEUpCi0gICAgICAgICAgICAgICB8fCAoZjEgPT0gZjIgJiYgeHggPT0g WFhJRkFFKQotICAgICAgICAgICAgICAgfHwgKGYxID49IGYyICYmIHh4ID09IFhYSUZHRSkKLSAg ICAgICAgICAgICAgIHx8IChmMSA+ICBmMiAmJiB4eCA9PSBYWElGR1QpKTsKLSAgICAgICAgZWxz ZQotI2VuZGlmIC8qIEZORkxPQVQgKi8KLSAgICAgICAgICB6ID0gKChuMSA8ICBuMiAmJiB4eCA9 PSBYWElGTFQpCi0gICAgICAgICAgICAgICB8fCAobjEgIT0gbjIgJiYgeHggPT0gWFhJRk5RKQot ICAgICAgICAgICAgICAgfHwgKG4xIDw9IG4yICYmIHh4ID09IFhYSUZMRSkKLSAgICAgICAgICAg ICAgIHx8IChuMSA9PSBuMiAmJiB4eCA9PSBYWElGQUUpCi0gICAgICAgICAgICAgICB8fCAobjEg Pj0gbjIgJiYgeHggPT0gWFhJRkdFKQotICAgICAgICAgICAgICAgfHwgKG4xID4gIG4yICYmIHh4 ID09IFhYSUZHVCkpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ4eGlmZ2UgeiIsIiIseik7Ci0gICAg ICAgIGlmIChpZmMgPT0gWFhJRlZFKQotICAgICAgICAgIGlmYXJncyArPSAyOwotICAgICAgICBl bHNlCi0gICAgICAgICAgaWZhcmdzICs9IDM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0g ICAgICBjYXNlIFhYSUZOVTogICAgICAgICAgICAgICAgICAgICAgLyogSUYgTlVNRVJJQyAqLwot ICAgICAgICB4ID0gY21mbGQoInZhcmlhYmxlIG5hbWUgb3IgY29uc3RhbnQiLCIiLCZzLE5VTEwp OwotICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgZXh0ZXJuIGludCBjbWZsZ3M7 Ci0gICAgICAgICAgICBpZiAoY21mbGdzID09IDEpIHsKLSAgICAgICAgICAgICAgICBwcmludGYo Ij9RdWFudGl0eSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh4IDwgMCkKLSAgICAgICAgICByZXR1cm4o eCk7Ci0gICAgICAgIHggPSBMSU5CVUZTSVotMTsKLSAgICAgICAgbHAgPSBsaW5lOwotICAgICAg ICB6enN0cmluZyhzLCZscCwmeCk7Ci0gICAgICAgIGxwID0gbGluZTsKLSAgICAgICAgZGVidWco RjExMCwieHhpZm51IHF1YW50aXR5IixscCwwKTsKLSAgICAgICAgeiA9IGNoa251bShscCk7Ci0j aWZkZWYgQ09NTUVOVAotLyoKLSAgVGhpcyB3b3JrcywgYnV0IGl0J3Mgbm90IHdpc2UgLS0gSUYg TlVNRVJJQyBpcyBtb3N0bHkgdXNlZCB0byBzZWUgaWYgYQotICBzdHJpbmcgcmVhbGx5IGRvZXMg Y29udGFpbiBvbmx5IG51bWVyaWMgY2hhcmFjdGVycy4gIElmIHRoZXkgd2FudCB0byBmb3JjZQot ICBldmFsdWF0aW9uLCB0aGV5IGNhbiB1c2UgXGZldmFsKCkgb24gdGhlIGFyZ3VtZW50IHN0cmlu Zy4KLSovCi0gICAgICAgIGlmICgheikgeyAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGEg bnVtYmVyICovCi0gICAgICAgICAgICB4X2lmbnVtID0gMTsgICAgICAgICAgICAgICAgLyogQXZv aWQgImV2YWwiIGVycm9yIG1lc3NhZ2VzICovCi0gICAgICAgICAgICBxID0gZXZhbGEobHApOyAg ICAgICAgICAgICAgLyogTWF5YmUgaXQncyBhbiBleHByZXNzaW9uICovCi0gICAgICAgICAgICB6 ID0gY2hrbnVtKHEpOyAgICAgICAgICAgICAgLyogdGhhdCBldmFsdWF0ZXMgdG8gYSBudW1iZXIg Ki8KLSAgICAgICAgICAgIHhfaWZudW0gPSAwOyAgICAgICAgICAgICAgICAvKiBQdXQgZXZhbCBt ZXNzYWdlcyBiYWNrIHRvIG5vcm1hbCAqLwotICAgICAgICAgICAgaWYgKHopIGRlYnVnKEYxMTAs Inh4aWZudSBleHAiLGxwLDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAg ICAgICBkZWJ1ZyhGMTAxLCJ4eGlmbnUgY2hrbnVtIiwiIix6KTsKLSAgICAgICAgaWZhcmdzICs9 IDI7Ci0gICAgICAgIGJyZWFrOwotCi0jaWZkZWYgWkZDREFUCi0gICAgICBjYXNlIFhYSUZORTog eyAgICAgICAgICAgICAgICAgICAgLyogSUYgTkVXRVIgKi8KLSAgICAgICAgY2hhciBkMVsyMF0s ICogZDI7ICAgICAgICAgICAgICAvKiBCdWZmZXJzIGZvciAyIGRhdGVzICovCi0gICAgICAgIGlm ICgoeiA9IGNtaWZpKCJGaXJzdCBmaWxlIiwiIiwmcywmeSx4eHN0cmluZykpIDwgMCkKLSAgICAg ICAgICByZXR1cm4oeik7Ci0gICAgICAgIGNrc3RybmNweShkMSx6ZmNkYXQocyksMjApOwotICAg ICAgICBpZiAoKHogPSBjbWlmaSgiU2Vjb25kIGZpbGUiLCIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAw KQotICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgZDIgPSB6ZmNkYXQocyk7Ci0gICAgICAg IGlmICgoaW50KXN0cmxlbihkMSkgIT0gMTcgfHwgKGludClzdHJsZW4oZDIpICE9IDE3KSB7Ci0g ICAgICAgICAgICBwcmludGYoIj9GYWlsdXJlIHRvIGdldCBmaWxlIGRhdGVcbiIpOwotICAgICAg ICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTEwLCJ4eGlmbmV3 ZXIgZDEiLGQxLDApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJ4eGlmbmV3ZXIgZDIiLGQyLDApOwot ICAgICAgICB6ID0gKHN0cmNtcChkMSxkMikgPiAwKSA/IDEgOiAwOwotICAgICAgICBkZWJ1ZyhG MTAxLCJ4eGlmbmV3ZXIiLCIiLHopOwotICAgICAgICBpZmFyZ3MgKz0gMjsKLSAgICAgICAgYnJl YWs7Ci0gICAgICB9Ci0jZW5kaWYgLyogWkZDREFUICovCi0KLSNpZmRlZiBDS19JRlJPCi0gICAg ICBjYXNlIFhYSUZSTzogICAgICAgICAgICAgICAgICAgICAgLyogUkVNT1RFLU9OTFkgYWR2aXNv cnkgKi8KLSAgICAgICAgaWZhcmdzKys7Ci0jaWZkZWYgTk9MT0NBTAotICAgICAgICB6ID0gMTsK LSNlbHNlCi0gICAgICAgIHogPSByZW1vbmx5OwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICAg ICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfSUZSTyAqLwotCi0gICAgICBjYXNlIFhYSUZBTDogICAg ICAgICAgICAgICAgICAgICAgLyogQUxBUk0gKi8KLSAgICAgICAgaWZhcmdzKys7Ci0gICAgICAg IGRlYnVnKEYxMDEsIklGIEFMQVJNIGNrX2FsYXJtIiwiIixja19hbGFybSk7Ci0gICAgICAgIGRl YnVnKEYxMTAsIklGIEFMQVJNIGFscm1fZGF0ZSIsYWxybV9kYXRlLDApOwotICAgICAgICBkZWJ1 ZyhGMTEwLCJJRiBBTEFSTSBhbHJtX3RpbWUiLGFscm1fdGltZSwwKTsKLQotICAgICAgICBpZiAo Y2tfYWxhcm0gPCAxTCB8fCBhbHJtX2RhdGVbMF0gPCAnMCcgfHwgYWxybV90aW1lWzBdIDwgJzAn KSB7Ci0gICAgICAgICAgICB6ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogQUxBUk0gbm90 IFNFVCAqLwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgIC8qIHNvIElG IEFMQVJNIGZhaWxzICovCi0gICAgICAgIH0KLSAgICAgICAgLyogR2V0IGN1cnJlbnQgZGF0ZSBh bmQgdGltZSAqLwotICAgICAgICBja3N0cm5jcHkodG1wYnVmLGNrY3Z0ZGF0ZSgiIiwxKSxUTVBC VUZTSVopOwotICAgICAgICBzID0gdG1wYnVmOwotICAgICAgICBzWzhdID0gTlVMOwotICAgICAg ICB6ID0gKGludCkgc3RybmNtcCh0bXBidWYsYWxybV9kYXRlLDgpOyAvKiBDb21wYXJlIGRhdGVz ICovCi0gICAgICAgIGRlYnVnKEYxMDEsIklGIEFMQVJNIGRhdGUgeiIsIiIseik7Ci0gICAgICAg IGlmICh6ID09IDApIHsgICAgICAgICAgICAgICAgICAgLyogRGF0ZXMgYXJlIHRoZSBzYW1lICov Ci0gICAgICAgICAgICAvKiBDb21wYXJlIHRpbWVzICovCi0gICAgICAgICAgICB6ID0gKHRvZDJz ZWModG1wYnVmKzkpID49IGF0b2woYWxybV90aW1lKSkgPyAxIDogLTE7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJJRiBBTEFSTSB0aW1lIHoiLCIiLHopOwotICAgICAgICB9Ci0gICAgICAgIHRt cGJ1ZlswXSA9IE5VTDsgICAgICAgICAgICAgICAgLyogeiA+PSAwIGlmIGFsYXJtIGlzIHBhc3Nl ZCAqLwotICAgICAgICB6ID0gKCh6ID49IDApID8gMSA6IDApOyAgICAgICAgIC8qIHogPCAgMCBv dGhlcndpc2UgKi8KLSAgICAgICAgZGVidWcoRjEwMSwiSUYgQUxBUk0gZmluYWwgeiIsIiIseik7 Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhYSUZPUDogICAgICAgICAgICAgICAgICAg ICAgLyogSUYgT1BFTiAqLwotICAgICAgICBpZiAoKHggPSBjbWtleShpb3RhYixuaW90LCJmaWxl IG9yIGxvZyIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAg ICBpZiAoeCA9PSA5OTk5IHx8IHggPT0gWlNURElPKSB7Ci0gICAgICAgICAgICBiZ2NoaygpOyAg ICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgYmFja2dyb3VuZCBzdGF0dXMgKi8KLSAgICAgICAg ICAgIHogPSBwZmxhZyA/IDEgOiAwOwotICAgICAgICB9IGVsc2UgaWYgKHggPT0gODg4OCkgewot ICAgICAgICAgICAgeiA9IGxvY2FsID8gdHRjaGsoKSA+IC0xIDogMDsKLSNpZmRlZiBDS0xPR0RJ QUwKLSAgICAgICAgfSBlbHNlIGlmICh4ID09IDc3NzcpIHsKLSAgICAgICAgICAgIGV4dGVybiBp bnQgZGlhbG9nOwotICAgICAgICAgICAgeiA9IGRpYWxvZyA/IDEgOiAwOwotI2VuZGlmIC8qIENL TE9HRElBTCAqLwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICB6ID0gKGNoa2ZuKHgpID4gMCkg PyAxIDogMDsKLSAgICAgICAgaWZhcmdzICs9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBj YXNlIFhYSUZTRDogICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnRlZC1Gcm9tLURpYWxlciAq LwotI2lmZGVmIE9TMgotICAgICAgICB6ID0gU3RhcnRlZEZyb21EaWFsZXI7Ci0jZWxzZQotICAg ICAgICB6ID0gMDsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh c2UgWFhJRlRNOiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hbC1NYWNybyAqLwotI2lm ZGVmIE9TMgotICAgICAgICB6ID0gY21kc3RrW2NtZGx2bF0uY2NmbGdzICYgQ0ZfS01BQzsKLSNl bHNlCi0gICAgICAgIHogPSAwOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICBicmVhazsKLQot ICAgICAgY2FzZSBYWElGRU06ICAgICAgICAgICAgICAgICAgICAgIC8qIEVtdWxhdGlvbiBpcyBh Y3RpdmUgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgeiA9IDE7Ci0jZWxzZQotICAgICAgICB6ID0g MDsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgWFhJRklL OiAgICAgICAgICAgICAgICAgICAgICAvKiBSdW5uaW5nIGFzIElLU0Q/ICovCi0gICAgICAgIHog PSBpbnNlcnZlcjsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgWFhJRlRBOiAgICAgICAg ICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIGlzIFRBUEkgKi8KLSAgICAgICAgeiA9IDA7Ci0j aWZuZGVmIE5PRElBTAotI2lmZGVmIENLX1RBUEkKLSAgICAgICAgaWYgKGxvY2FsICYmICFuZXR3 b3JrICYmIHR0dGFwaSkKLSAgICAgICAgICB6ID0gMTsKLSNlbmRpZiAvKiBDS19UQVBJICovCi0j ZW5kaWYgLyogTk9ESUFMICovCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhYSUZNQTog ICAgICAgICAgICAgICAgICAgICAgLyogSUYgTUFUQ0ggKi8KLSAgICAgICAgeCA9IGNtZmxkKCJT dHJpbmcgb3IgdmFyaWFibGUiLCIiLCZzLHh4c3RyaW5nKTsKLSAgICAgICAgaWYgKHggPT0gLTMp IHsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgY21mbGdzOwotICAgICAgICAgICAgaWYgKGNtZmxn cyA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/U3RyaW5nIHJlcXVpcmVkXG4iKTsK LSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs c2UgaWYgKHggPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgY2tzdHJuY3B5KGxp bmUscyxMSU5CVUZTSVopOwotICAgICAgICBzID0gYnJzdHJpcChsaW5lKTsKLSAgICAgICAgZGVi dWcoRjExMCwieHhpZm1hIHN0cmluZyIsbGluZSwwKTsKLSAgICAgICAgeCA9IGNtZmxkKCJQYXR0 ZXJuIiwiIiwmcCx4eHN0cmluZyk7Ci0gICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAg ICBleHRlcm4gaW50IGNtZmxnczsKLSAgICAgICAgICAgIGlmIChjbWZsZ3MgPT0gMSkgewotICAg ICAgICAgICAgICAgIHByaW50ZigiP1BhdHRlcm4gcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAg ICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoeCA8IDAp Ci0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBja3N0cm5jcHkodG1wYnVmLHAsVE1QQlVG U0laKTsKLSAgICAgICAgcCA9IGJyc3RyaXAodG1wYnVmKTsKLSAgICAgICAgZGVidWcoRjExMCwi eHhpZm1hIHBhdHRlcm4iLHRtcGJ1ZiwwKTsKLSAgICAgICAgeiA9IGNrbWF0Y2gocCxzLGlucGNh c1tjbWRsdmxdLDEpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBYWElGRkw6IHsgICAg ICAgICAgICAgICAgICAgIC8qIElGIEZMQUcgKi8KLSAgICAgICAgICBleHRlcm4gaW50IG9vZmxh ZzsKLSAgICAgICAgICB6ID0gb29mbGFnOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAg ICAgY2FzZSBYWElGQVY6IHsgICAgICAgICAgICAgICAgICAgIC8qIElGIEFWQUlMQUJMRSAqLwot ICAgICAgICAgIGlmICgoeCA9IGNta2V5KGF2YWlsdGFiLGF2YWlsdGFibiwiIiwiIix4eHN0cmlu ZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICBzd2l0Y2ggKHgpIHsK LSAgICAgICAgICAgIGNhc2UgQVZfS1JCNDoKLSAgICAgICAgICAgICAgeiA9IGNrX2tyYjRfaXNf aW5zdGFsbGVkKCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBVl9L UkI1OgotICAgICAgICAgICAgICB6ID0gY2tfa3JiNV9pc19pbnN0YWxsZWQoKTsKLSAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFWX1NSUDoKLSAgICAgICAgICAgICAgeiA9 IGNrX3NycF9pc19pbnN0YWxsZWQoKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICBjYXNlIEFWX1NTTDoKLSAgICAgICAgICAgICAgeiA9IGNrX3NzbGVheV9pc19pbnN0YWxsZWQo KTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFWX05UTE06Ci0gICAg ICAgICAgICAgIHogPSBja19udGxtX2lzX2luc3RhbGxlZCgpOwotICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgIGNhc2UgQVZfQ1JZUFRPOgotICAgICAgICAgICAgICB6ID0gY2tfY3J5 cHRfaXNfaW5zdGFsbGVkKCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz ZSBBVl9TU0g6Ci0gICAgICAgICAgICAgIHogPSBja19zc2hfaXNfaW5zdGFsbGVkKCk7Ci0gICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgeiA9 IDA7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBY WElGQVQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIElGIEFTS1RJTUVPVVQgKi8KLSAgICAgICAg eiA9IGFza3RpbWVkb3V0OwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBYWElGUkQ6ICAg ICAgICAgICAgICAgICAgICAgIC8qIElGIFJFQURBQkxFICovCi0gICAgICBjYXNlIFhYSUZXUjog ICAgICAgICAgICAgICAgICAgICAgLyogSUYgV1JJVEVBQkxFICovCi0gICAgICAgIGlmICgoeCA9 IGNtZmxkKCJGaWxlIG9yIGRpcmVjdG9yeSBuYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAg IiIsCi0gICAgICAgICAgICAgICAgICAgICAgICZzLAotI2lmZGVmIE9TMgotICAgICAgICAgICAg ICAgICAgICAgICBOVUxMICAgICAgICAgICAgIC8qIFRoaXMgYWxsb3dzIFwncyBpbiBmaWxlbmFt ZXMgKi8KLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCi0jZW5kaWYgLyog T1MyICovCi0gICAgICAgICAgICAgICAgICAgICAgICkpIDwgMCkgewotICAgICAgICAgICAgaWYg KHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICBleHRlcm4gaW50IGNtZmxnczsKLSAgICAgICAg ICAgICAgICBpZiAoY21mbGdzID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/ RmlsZSBvciBkaXJlY3RvcnkgbmFtZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAg IHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHJldHVy bih4KTsKLSAgICAgICAgfQotICAgICAgICBzID0gYnJzdHJpcChzKTsKLS8qCi0gIHpjaGtbaW9d KCkgZG8gbm90IGRvIHdoYXQgd2Ugd2FudCBoZXJlIGZvciBkaXJlY3Rvcmllcywgc28gd2Ugc2V0 Ci0gIGEgZ2xvYmFsIGZsYWcgdGVsbGluZyBpdCB0byBiZWhhdmUgc3BlY2lhbGx5IGluIHRoaXMg Y2FzZS4gIE90aGV3aXNlCi0gIHdlJ2QgaGF2ZSB0byBjaGFuZ2UgdGhlIEFQSSBhbmQgY2hhbmdl IGFsbCBjaz9maW8uYyBtb2R1bGVzIGFjY29yZGluZ2x5LgotKi8KLSAgICAgICAgeSA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUcnktYWdhaW4gY29udHJvbCAqLwotI2lmZGVmIE9T MgotICBpZnJkYWdhaW46Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIGlmIChpZmMgPT0gWFhJ RlJEKSB7ICAgICAgICAgICAgLyogSUYgUkVBREFCTEUgKi8KLSAgICAgICAgICAgIHpjaGtpZCA9 IDE7Ci0gICAgICAgICAgICB6ID0gemNoa2kocykgPiAtMTsKLSAgICAgICAgICAgIHpjaGtpZCA9 IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoaWZjID09IFhYSUZXUikgeyAgICAgLyogSUYgV1JJVEVB QkxFICovCi0gICAgICAgICAgICB6Y2hrb2QgPSAxOwotICAgICAgICAgICAgeiA9IHpjaGtvKHMp ID4gLTE7Ci0gICAgICAgICAgICB6Y2hrb2QgPSAwOwotICAgICAgICB9Ci0jaWZkZWYgT1MyCi0g ICAgICAgIGlmICgheiAmJiAheSkgeyAgICAgICAgICAgICAgICAgLyogRmlsZSBub3QgZm91bmQu ICovCi0gICAgICAgICAgICBpbnQgdDsgICAgICAgICAgICAgICAgICAgICAgLyogVHJ5IGV4cGFu ZGluZyB2YXJpYWJsZXMgKi8KLSAgICAgICAgICAgIHQgPSBMSU5CVUZTSVotMTsgICAgICAgICAg ICAvKiBhbmQgbG9va2luZyBhZ2Fpbi4gKi8KLSAgICAgICAgICAgIGxwID0gbGluZTsKLSAgICAg ICAgICAgIHp6c3RyaW5nKHMsJmxwLCZ0KTsKLSAgICAgICAgICAgIHMgPSBsaW5lOwotICAgICAg ICAgICAgeiA9IHpjaGtvKHMpID4gLTE7Ci0gICAgICAgICAgICB5Kys7Ci0gICAgICAgICAgICBn b3RvIGlmcmRhZ2FpbjsKLSAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICBpZmFy Z3MgKz0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhYSUZRVTogICAgICAgICAgICAg ICAgICAgICAgLyogSUYgUVVJRVQgKi8KLSAgICAgICAgeiA9IHF1aWV0ID8gMSA6IDA7Ci0gICAg ICAgIGRlYnVnKEYxMDEsImlmIHF1aWV0IiwiIix6KTsKLSAgICAgICAgaWZhcmdzICs9IDE7Ci0g ICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhYSUZXSTogICAgICAgICAgICAgICAgICAgICAg LyogV0lMRCAqLwotICAgICAgICBpZiAoKHggPSBjbWZsZCgiRmlsZSBzcGVjaWZpY2F0aW9uIiwi Iiwmcyx4eHN0cmluZykpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICB6ID0gaXN3aWxkKHMpOwot ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBYWElGQ0s6ICAgICAgICAgICAgICAgICAgICAg IC8qIEMtS0VSTUlUICovCi0jaWZkZWYgT1MyCi0gICAgICAgIHogPSAwOwotI2Vsc2UKLSAgICAg ICAgeiA9IDE7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNl IFhYSUZLOTogICAgICAgICAgICAgICAgICAgICAgLyogSy05NSAqLwotI2lmZGVmIE9TMgotICAg ICAgICB6ID0gMTsKLSNlbHNlCi0gICAgICAgIHogPSAwOwotI2VuZGlmIC8qIE9TMiAqLwotICAg ICAgICBicmVhazsKLQotICAgICAgY2FzZSBYWElGR1U6ICAgICAgICAgICAgICAgICAgICAgIC8q IEdVSSAqLwotI2lmZGVmIEtVSQotICAgICAgICB6ID0gMTsKLSNlbHNlCi0gICAgICAgIHogPSAw OwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBYWElGTVM6 ICAgICAgICAgICAgICAgICAgICAgIC8qIE1TLUtFUk1JVCAqLwotICAgICAgICB6ID0gMDsKLSAg ICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgWFhJRkxPOiAgICAgICAgICAgICAgICAgICAgICAv KiBJRiBMT0NBTCAqLwotICAgICAgICB6ID0gbG9jYWwgPyAxIDogMDsKLSAgICAgICAgYnJlYWs7 Ci0KLSAgICAgIGNhc2UgWFhJRkNNOiB7ICAgICAgICAgICAgICAgICAgICAvKiBJRiBDT01NQU5E ICovCi0gICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgY21kdGFiW107Ci0gICAgICAgICAg ZXh0ZXJuIGludCBuY21kOwotICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJXb3JkIiwiIiwmcyx4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICB6ID0gbG9v a3VwKGNtZHRhYixzLG5jbWQsJnkpOwotICAgICAgICAgIHogPSAoeiA9PSAtMiB8fCB6ID4gLTEp ID8gMSA6IDA7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0jaWZkZWYgQ0tGTE9BVAotICAg ICAgY2FzZSBYWElGRlA6ICAgICAgICAgICAgICAgICAgICAgIC8qIElGIEZMT0FUICovCi0gICAg ICAgIGlmICgoeCA9IGNtZmxkKCJOdW1iZXIiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAg ICAgIGlmICh4ICE9IC0zKSAgICAgICAgICAgICAgICAgIC8qIGUuZy4gZW1wdHkgdmFyaWFibGUg Ki8KLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgeiA9IGlzZmxvYXQocywwKTsKLSAg ICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tGTE9BVCAqLwotCi0gICAgICBjYXNlIFhYSUZLQjog ICAgICAgICAgICAgICAgICAgICAgLyogS0JISVQgKi8KLSAgICAgICAgeiA9IGNvbmNoaygpOwot ICAgICAgICBpZiAoeiA8IDApIHogPSAwOwotICAgICAgICBpZiAoeiA+IDEpIHogPSAxOwotICAg ICAgICBicmVhazsKLQotICAgICAgY2FzZSBYWElGS0c6IHsgICAgICAgICAgICAgICAgICAgIC8q IEtFUkJBTkcgKi8KLSAgICAgICAgICBleHRlcm4gaW50IGNmaWxlZjsKLSNpZmRlZiBDT01NRU5U Ci0gICAgICAgICAgeiA9ICh4Y21kc3JjID09IDApID8gMCA6IChjZmlsZWYgJiYgY21kbHZsID09 IDEpOwotI2Vsc2UKLSAgICAgICAgICB6ID0gKHhjbWRzcmMgPT0gMCkgPyAwIDogKGNmaWxlZiAm JiB0bGV2ZWwgPT0gMCk7Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotICAgICAgICAgIGJyZWFrOwot ICAgICAgfQotCi0gICAgICBjYXNlIFhYSUZEQjogewkJCS8qIElGIERFQlVHIC0gMjAxMC8wMy8x NiAqLwotICAgICAgICAgIGV4dGVybiBpbnQgZGVibXNnOwotICAgICAgICAgIHogPSBkZWJtc2c7 Ci0JICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNob3VsZG4ndCBoYXBwZW4gKi8KLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9 IC8qIGVuZCBvZiBzd2l0Y2ggKi8KLQotICAgIGlmICh6KQotICAgICAgKmJ4KysgPSAnMSc7Ci0g ICAgZWxzZQotICAgICAgKmJ4KysgPSAnMCc7Ci0gICAgKmJ4ID0gTlVMOwotICAgIGlmIChieCA+ IGJvb2x2YWwgKyBCT09MTEVOIC0gMikgewotICAgICAgICBwcmludGYoIj9Cb29sZWFuIGV4cHJl c3Npb24gdG9vIGxvbmciKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgZWNvdW50 Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhwcmVzc2lvbiBjb3VudGVyICovCi0g ICAgZGVidWcoRjEwMSwiYm9vbGV4cCBwYXJlbnMiLCIiLHBhcmVucyk7Ci0gICAgZGVidWcoRjEw MSwiYm9vbGV4cCBwY291bnQiLCIiLHBjb3VudCk7Ci0gICAgaWYgKHBhcmVucyAmJiBwY291bnQg PiAwKQotICAgICAgZ290byBpZmFnYWluOwotCi0gIGlmZW5kOiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTm8gbW9yZSAtIGRvbmUgKi8KLSAgICAqYnggPSBOVUw7Ci0gICAgeiA9 IGF0b2koZXZhbHgoYm9vbHZhbCkpOwotICAgIGRlYnVnKEYxMTEsImJvb2xleHAgYm9vbHZhbCIs Ym9vbHZhbCx6KTsKLSAgICByZXR1cm4oeik7Ci19Ci0KLS8qICBEIE8gSSBGICAtLSAgRG8gdGhl IElGIGNvbW1hbmQgICovCi0KLWludAotZG9pZihjeCkgaW50IGN4OyB7Ci0gICAgaW50IHgsIHks IHo7IGNoYXIgKnMsICpwOwotICAgIGNoYXIgKnE7Ci0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGlu dCBrZXltYWM7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJkb2lmIGN4Iiwi IixjeCk7Ci0KLSAgICB6ID0gYm9vbGV4cChjeCk7ICAgICAgICAgICAgICAgICAgICAvKiBFdmFs dWF0ZSB0aGUgY29uZGl0aW9uKHMpICovCi0gICAgZGVidWcoRjAxMCwiZG9pZiBjbWRidWYiLGNt ZGJ1ZiwwKTsKLSAgICBkZWJ1ZyhGMTAxLCJkb2lmIGJvb2xleHAiLCIiLHopOwotICAgIGlmICh6 IDwgMCkKLSAgICAgIHJldHVybih6KTsKLQotICAgIGlmIChjeCA9PSBYWElGKSB7ICAgICAgICAg ICAgICAgICAgIC8qIEFsbG93IElGIHRvIGhhdmUgWElGIHNlbWFudGljcy4gKi8KLSAgICAgICAg Y2hhciAqIHA7Ci0gICAgICAgIHAgPSBjbXBlZWsoKTsKLSAgICAgICAgaWYgKCFwKSBwID0gIiI7 Ci0gICAgICAgIHdoaWxlICgqcCkgewotICAgICAgICAgICAgaWYgKCpwID09IFNQIHx8ICpwID09 IEhUKQotICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICgqcCA9PSAneycpCi0gICAgICAgICAgY3gg PSBYWElGWDsKLSAgICB9Ci0gICAgc3dpdGNoIChjeCkgeyAgICAgICAgICAgICAgICAgICAgICAg LyogU2VwYXJhdGUgaGFuZGxpbmcgZm9yIElGIGFuZCBYSUYgKi8KLQotICAgICAgY2FzZSBYWEFT U0VSOiAgICAgICAgICAgICAgICAgICAgIC8qIEFuZCBBU1NFUlQgKi8KLSAgICAgICAgaWYgKCh4 ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSB6KTsKLQotICAgICAgY2FzZSBYWElGOiAgICAgICAgICAgICAgICAgICAgICAgIC8q IFRoaXMgaXMgSUYuLi4gKi8KLSAgICAgICAgaWZjbWRbY21kbHZsXSA9IDE7ICAgICAgICAgICAg ICAvKiBXZSBqdXN0IGNvbXBsZXRlZCBhbiBJRiBjb21tYW5kICovCi0gICAgICAgIGRlYnVnKEYx MDEsImRvaWYgY29uZGl0aW9uIiwiIix6KTsKLSAgICAgICAgaWYgKHopIHsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBDb25kaXRpb24gaXMgdHJ1ZSAqLwotICAgICAgICAgICAgaWZ0ZXN0W2Nt ZGx2bF0gPSAxOyAgICAgICAgIC8qIFJlbWVtYmVyIHRoYXQgSUYgc3VjY2VlZGVkICovCi0gICAg ICAgICAgICBpZiAobWFjbHZsID4gLTEpIHsgICAgICAgICAgLyogSW4gbWFjcm8sICovCi0gICAg ICAgICAgICAgICAgcHVzaGNtZChOVUxMKTsgICAgICAgICAgLyogc2F2ZSByZXN0IG9mIGNvbW1h bmQuICovCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHRsZXZlbCA+IC0xKSB7ICAgLyogSW4gdGFr ZSBmaWxlLCAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsICJkb2lmOiBwdXNoaW5nIGNv bW1hbmQiLCAiIiwgMCk7Ci0gICAgICAgICAgICAgICAgcHVzaGNtZChOVUxMKTsgICAgICAgICAg Lyogc2F2ZSByZXN0IG9mIGNvbW1hbmQuICovCi0gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgLyogSWYgaW50ZXJhY3RpdmUsICovCi0gICAgICAgICAgICAgICAgY21pbmko Y2t4ZWNoKTsgICAgICAgICAgLyoganVzdCBzdGFydCBhIG5ldyBjb21tYW5kICovCi0gICAgICAg ICAgICAgICAgcHJpbnRmKCJcbiIpOyAgICAgICAgICAgLyogKGxpa2UgaW4gTVMtRE9TIEtlcm1p dCkgKi8KLSAgICAgICAgICAgICAgICBpZiAocGZsYWcpIHByb21wdCh4eHN0cmluZyk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29u ZGl0aW9uIGlzIGZhbHNlICovCi0gICAgICAgICAgICBpZnRlc3RbY21kbHZsXSA9IDA7ICAgICAg ICAgLyogUmVtZW1iZXIgY29tbWFuZCBmYWlsZWQuICovCi0gICAgICAgICAgICBpZiAoKHkgPSBj bXR4dCgiY29tbWFuZCB0byBiZSBpZ25vcmVkIiwiIiwmcyxOVUxMKSkgPCAwKQotICAgICAgICAg ICAgICByZXR1cm4oeSk7ICAgICAgICAgICAgICAgIC8qIEdvYmJsZSB1cCByZXN0IG9mIGxpbmUg Ki8KLSAgICAgICAgfQotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2UgWFhJRlg6IHsg ICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIFhJRiAoRXh0ZW5kZWQgSUYpICovCi0gICAg ICAgICAgY2hhciAqcDsKLSAgICAgICAgICBjaGFyIGVbNV07Ci0gICAgICAgICAgaW50IGk7Ci0g ICAgICAgICAgaWYgKCh5ID0gY210eHQoIk9iamVjdCBjb21tYW5kIiwiIiwmcyxOVUxMKSkgPCAw KQotICAgICAgICAgICAgcmV0dXJuKHkpOyAgICAgICAgICAgICAgICAgIC8qIEdldCBvYmplY3Qg Y29tbWFuZC4gKi8KLSAgICAgICAgICBwID0gczsKLSAgICAgICAgICBscCA9IGxpbmU7Ci0gICAg ICAgICAgZGVidWcoRjExMCwiZG9pZiBUSEVOIHBhcnQiLHMsLTU0KTsKLSAgICAgICAgICBpZiAo bGl0Y21kKCZwLCZscCxMSU5CVUZTSVogLSAxKSA8IDApIHsgLyogUXVvdGUgVEhFTi1wYXJ0ICov Ci0gICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGRlYnVn KEYxMTEsImRvaWYgVEhFTiBwYXJ0IDIiLGxpbmUseik7Ci0KLSAgICAgICAgICB3aGlsZSAoKnAg PT0gU1ApIHArKzsgICAgICAgICAvKiBTdHJpcCB0cmFpbGluZyBzcGFjZXMgKi8KLSAgICAgICAg ICBpZmNtZFtjbWRsdmxdID0gMDsgICAgICAgICAgICAvKiBBc3N1bWUgRUxTRSBwYXJ0IGluIHNh bWUgbGluZSAqLwotICAgICAgICAgIGlmdGVzdFtjbWRsdmxdID0geiA/IDEgOiAwOwotICAgICAg ICAgIGlmICgqcCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIEF0IGVuZD8gKi8KLSAgICAgICAg ICAgICAgaWYgKCF6KSB7ICAgICAgICAgICAgICAgICAvKiBObywgdXNlIEVMU0UtcGFydCwgaWYg YW55ICovCi0gICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSBlW2ldID0g KnArKzsKLSAgICAgICAgICAgICAgICAgIGlmIChja3N0cmNtcChlLCJlbHNlIiw0LDApKSAvKiBT ZWUgaWYgd2UgaGF2ZSBhbiBFTFNFICovCi0gICAgICAgICAgICAgICAgICAgIHJldHVybigtMik7 ICAgICAgICAgLyogU29tZXRoaW5nIGVsc2UgLSBlcnJvci4gKi8KLSAgICAgICAgICAgICAgICAg IGRlYnVnKEYwMTAsImRvaWYgRUxTRSBsaW5lIDEiLHAsMCk7Ci0gICAgICAgICAgICAgICAgICB3 aGlsZSAoKnAgPT0gU1ApIHArKzsgLyogU2tpcCBzcGFjZXMgKi8KLSAgICAgICAgICAgICAgICAg IGlmICgqcCAhPSAneycpIHsgICAgICAvKiBCcmFjZSBFTFNFIHBhcnQgaWYgbmVjZXNzYXJ5ICov Ci0gICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwieyIscCwi IH0iLE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgIHAgPSB0bXBidWY7Ci0gICAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjAxMCwiZG9pZiBFTFNFIGxpbmUgMiIscCwwKTsKLSAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGxwID0gbGluZTsgICAgICAgICAgICAvKiBX cml0ZSBvdmVyIFRIRU4gcGFydC4uLiAqLwotICAgICAgICAgICAgICAgICAgKmxwID0gTlVMOyAg ICAgICAgICAgIC8qIHdpdGggRUxTRSBwYXJ0LiAqLwotICAgICAgICAgICAgICAgICAgaWYgKGxp dGNtZCgmcCwmbHAsTElOQlVGU0laIC0gMikgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg cmV0dXJuKC0yKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIHdoaWxl ICgqcCA9PSBTUCkgcCsrOyAvKiBTdHJpcCB0cmFpbGluZyBzcGFjZXMgKi8KLSAgICAgICAgICAg ICAgICAgIGlmICgqcCkgcmV0dXJuKC0yKTsgICAvKiBTaG91bGQgYmUgbm90aGluZyBoZXJlLiAq LwotICAgICAgICAgICAgICAgICAgZGVidWcoRjAxMCwiZG9pZiBFTFNFIGxpbmUgMyIsbGluZSww KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgIC8qIEF0IGVuZCwgdHJlYXQgbGlrZSBhbiBJRiBjb21tYW5kICovCi0gICAgICAgICAgICAg IGlmICgheikgbGluZVswXSA9IE5VTDsgICAgLyogQ29uZGl0aW9uIG5vdCB0cnVlIGFuZCBubyBF TFNFICovCi0gICAgICAgICAgICAgIGlmY21kW2NtZGx2bF0gPSAxOyAgICAgICAgLyogQWxsb3cg RUxTRSBvbiBuZXh0IGxpbmUgKi8KLSAgICAgICAgICAgICAgZGVidWcoRjEwMSwiSUYgY29uZGl0 aW9uIiwiIix6KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGxpbmVbMF0pIHsKLSAgICAg ICAgICAgICAgeCA9IG1sb29rKG1hY3RhYiwiX3hpZiIsbm1hYyk7IC8qIEdldCBpbmRleCBvZiAi X3hpZiIgbWFjcm8uICovCi0gICAgICAgICAgICAgIGlmICh4IDwgMCkgeyAgICAgICAgICAgICAg ICAgICAgICAvKiBOb3QgdGhlcmU/ICovCi0gICAgICAgICAgICAgICAgICBhZGRtbWFjKCJfeGlm Iix4aWZfZGVmKTsgICAgICAvKiBQdXQgaXQgYmFjay4gKi8KLSAgICAgICAgICAgICAgICAgIGlm IChtbG9vayhtYWN0YWIsIl94aWYiLG5tYWMpIDwgMCkgeyAvKiBMb29rIGl0IHVwIGFnYWluLiAq LwotICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1hJRiBtYWNybyBnb25lIVxuIik7Ci0g ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBkb2RvKHgsbGluZSxjbWRzdGtb Y21kbHZsXS5jY2ZsZ3MgfCBDRl9JTUFDKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJu KDApOwotICAgICAgfQotICAgICAgY2FzZSBYWFdISTogeyAgICAgICAgICAgICAgICAgICAgIC8q IFdISUxFIENvbW1hbmQgKi8KLSAgICAgICAgICBwID0gY21kYnVmOyAgICAgICAgICAgICAgICAg ICAvKiBDYXB0dXJlIElGIGNvbmRpdGlvbiAqLwotICAgICAgICAgIGlmY29uZFswXSA9IE5VTDsg ICAgICAgICAgICAgIC8qIGZyb20gY29tbWFuZCBidWZmZXIgKi8KLSAgICAgICAgICB3aGlsZSAo KnAgPT0gU1ApIHArKzsKLSAgICAgICAgICB3aGlsZSAoKnAgIT0gU1ApIHArKzsKLSAgICAgICAg ICBpZmNwID0gaWZjb25kOwotICAgICAgICAgIGlmY3AgKz0gY2tzdHJuY3B5KGlmY3AsInsgXFxm bGl0KGlmICggbm90ICIsSUZDT05ETEVOKTsKLSNpZmRlZiBDT01NRU5UCi0vKgotICBUaGlzIGRv ZXNuJ3Qgd29yayBiZWNhdXNlIGl0IGJyZWFrcyBvbiB0aGUgZmlyc3QgbGVmdCBicmFjZSwgd2hp Y2ggZG9lcwotICBub3QgbmVjZXNzYXJpbHkgc3RhcnQgdGhlIGNvbW1hbmQgbGlzdCwgZS5nLiAi d2hpbGUgZXF1YWwgXCVhIHtcMzV9Ii4KLSovCi0gICAgICAgICAgd2hpbGUgKCpwICE9ICd7JyAm JiAqcCAhPSBOVUwpICppZmNwKysgPSAqcCsrOwotICAgICAgICAgIHAgPSAiICkgZ290byBfLi5i b3QpIH0gIjsKLSAgICAgICAgICB3aGlsZSAoKmlmY3ArKyA9ICpwKyspIDsKLSNlbHNlCi0vKgot ICBUaGUgY29tbWFuZCBwYXJzZXIgc2V0cyBjbWJwdHIgdG8gdGhlIHNwb3Qgd2hlcmUgaXQgbGVm dCBvZmYgcGFyc2luZyBpbgotICB0aGUgY29tbWFuZCBidWZmZXIuCi0qLwotICAgICAgICAgIHsK LSAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBjbWJwdHI7Ci0gICAgICAgICAgICAgIGlmIChj bWJwdHIpIHsKLSAgICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgY21icHRyICYmICpwICE9IE5V TCkKLSAgICAgICAgICAgICAgICAgICAgKmlmY3ArKyA9ICpwKys7Ci0gICAgICAgICAgICAgICAg ICBwID0gIiApIGdvdG8gXy4uYm90KSB9ICI7Ci0gICAgICAgICAgICAgICAgICB3aGlsZSAoKCpp ZmNwKysgPSAqcCsrKSkgOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg ICAgcHJpbnRmKCI/SW50ZXJuYWwgZXJyb3IgcGFyc2luZyBXSElMRSBjb25kaXRpb25cbiIpOwot ICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAg IH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgICAgICBkZWJ1ZyhGMTEwLCJXSElMRSBj bWQiLGlmY29uZCwwKTsKLQotICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJPYmplY3QgY29tbWFu ZCIsIiIsJnMsTlVMTCkpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih5KTsgICAgICAgICAgICAg ICAgICAvKiBHZXQgb2JqZWN0IGNvbW1hbmQuICovCi0gICAgICAgICAgcCA9IHM7Ci0gICAgICAg ICAgbHAgPSBsaW5lOwotICAgICAgICAgIGlmIChsaXRjbWQoJnAsJmxwLExJTkJVRlNJWiAtIDIp IDwgMCkgeyAvKiBRdW90ZSBvYmplY3QgY29tbWFuZCAqLwotICAgICAgICAgICAgICByZXR1cm4o LTIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBkZWJ1ZyhGMTAxLCJXSElMRSBib2R5IixsaW5l LC01NCk7Ci0gICAgICAgICAgaWYgKGxpbmVbMF0pIHsKLSAgICAgICAgICAgICAgY2hhciAqcDsK LSAgICAgICAgICAgICAgeCA9IG1sb29rKG1hY3RhYiwiX3doaWxlIixubWFjKTsgLyogaW5kZXgg b2YgIl93aGlsZSIgbWFjcm8uICovCi0gICAgICAgICAgICAgIGlmICh4IDwgMCkgeyAgICAgICAg ICAgICAgLyogTm90IHRoZXJlPyAqLwotICAgICAgICAgICAgICAgICAgYWRkbW1hYygiX3doaWxl Iix3aGlsX2RlZik7IC8qIFB1dCBpdCBiYWNrLiAqLwotICAgICAgICAgICAgICAgICAgaWYgKG1s b29rKG1hY3RhYiwiX3doaWxlIixubWFjKSA8IDApIHsgLyogTG9vayBpdCB1cCBhZ2FpbiAqLwot ICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1dISUxFIG1hY3JvIGRlZmluaXRpb24gZ29u ZSFcbiIpOwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgcCA9IG1hbGxv YygoaW50KXN0cmxlbihpZmNvbmQpICsgKGludClzdHJsZW4obGluZSkgKyAyKTsKLSAgICAgICAg ICAgICAgaWYgKHApIHsKLSAgICAgICAgICAgICAgICAgIHN0cmNweShwLGlmY29uZCk7ICAgICAv KiBzYWZlIChwcmVjaGVja2VkKSAqLwotICAgICAgICAgICAgICAgICAgc3RyY2F0KHAsbGluZSk7 ICAgICAgIC8qIHNhZmUgKHByZWNoZWNrZWQpICovCi0gICAgICAgICAgICAgICAgICBkZWJ1ZyhG MDEwLCJXSElMRSBkb2RvIixwLDApOwotICAgICAgICAgICAgICAgICAgZG9kbyh4LHAsY21kc3Rr W2NtZGx2bF0uY2NmbGdzIHwgQ0ZfSU1BQyk7Ci0gICAgICAgICAgICAgICAgICBmcmVlKHApOwot ICAgICAgICAgICAgICAgICAgcCA9IE5VTEw7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgICBwcmludGYoIj9DYW4ndCBhbGxvY2F0ZSBzdG9yYWdlIGZvciBXSElMRSBj b21tYW5kIik7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybigwKTsKLSAgICAgIH0KLSAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotfQotI2VuZGlmIC8qIE5P U1BMICovCi0KLS8qIFNldCB1cCBhIFRBS0UgY29tbWFuZCBmaWxlICovCi0KLWludAotZG90YWtl KHMpIGNoYXIgKnM7IHsKLSNpZm5kZWYgTk9TUEwKLSAgICBleHRlcm4gaW50IHRyYV9jbWQ7Ci0j ZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGV4dGVy biBpbnQgdGVybV9pbzsKLSAgICBpbnQgdGVybV9pb19zYXYgPSB0ZXJtX2lvOwotI2VuZGlmIC8q IE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICBpbnQgc2xlbjsKLQotICAgIGRlYnVn KEYxMTAsImRvdGFrZSIscywwKTsKLSAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICBpZiAoISpzKSBy ZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIHNsZW4gPSBzdHJsZW4ocyk7Ci0gICAgZGVidWcoRjEw MSwiZG90YWtlIGxlbiIsIiIsc2xlbik7Ci0KLSAgICBpZiAoKHRmaWxlWysrdGxldmVsXSA9IGZv cGVuKHMsInIiKSkgPT0gTlVMTCkgewotICAgICAgICBwZXJyb3Iocyk7Ci0gICAgICAgIGRlYnVn KEYxMTAsImRvdGFrZSBmYWlsIixzLDApOwotICAgICAgICB0bGV2ZWwtLTsKLSAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICB0ZmxpbmVbdGxldmVsXSA9 IDA7ICAgICAgICAgICAgIC8qIExpbmUgY291bnRlciAqLwotI2lmZGVmIFZNUwotICAgICAgICBj b25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvIEN0cmwtQyB3aWxsIHdvcmsgKi8K LSNlbmRpZiAvKiBWTVMgKi8KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgICAgICB0 ZXJtX2lvID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIERpc2FibGUgVGVybWluYWwgRW11bGF0 b3IgSS9PICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmbmRl ZiBOT1NQTAotICAgICAgICBjbWRsdmwrKzsgICAgICAgICAgICAgICAgICAgICAgIC8qIEVudGVy aW5nIGEgbmV3IGNvbW1hbmQgbGV2ZWwgKi8KLSAgICAgICAgZGVidWcoRjExMSwiQ01EICtGIixz LGNtZGx2bCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsImRvdGFrZSBjbWRsdmwiLCIiLGNtZGx2bCk7 Ci0gICAgICAgIGRlYnVnKEYxMDEsImRvdGFrZSB0bGV2ZWwiLCIiLHRsZXZlbCk7Ci0gICAgICAg IGlmIChjbWRsdmwgPiBDTURTVEtMKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJkb3Rha2Ug c3RhY2sgb3ZlcmZsb3ciLCIiLDApOwotICAgICAgICAgICAgY21kbHZsLS07Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTExLCJDTUQqLUYiLHMsY21kbHZsKTsKLSAgICAgICAgICAgIGZjbG9zZSh0Zmls ZVt0bGV2ZWwtLV0pOwotICAgICAgICAgICAgcHJpbnRmKCI/VEFLRSBmaWxlcyBhbmQvb3IgRE8g Y29tbWFuZHMgbmVzdGVkIHRvbyBkZWVwbHlcbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodGZuYW1bdGxldmVsXSkgeyAgICAgICAg ICAgIC8qIENvcHkgdGhlIGZpbGVuYW1lICovCi0gICAgICAgICAgICBmcmVlKHRmbmFtW3RsZXZl bF0pOwotICAgICAgICAgICAgdGZuYW1bdGxldmVsXSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAg ICAgaWYgKCh0Zm5hbVt0bGV2ZWxdID0gbWFsbG9jKHN0cmxlbihzKSArIDEpKSkgewotICAgICAg ICAgICAgc3RyY3B5KHRmbmFtW3RsZXZlbF0scyk7ICAgIC8qIHNhZmUgKi8KLSAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIp OwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotICAgICAgICBp ZmNtZFtjbWRsdmxdID0gMDsgICAgICAgICAgICAgIC8qIFNldCB2YXJpYWJsZXMgZm9yIHRoaXMg Y21kIGZpbGUgKi8KLSAgICAgICAgaWZ0ZXN0W2NtZGx2bF0gPSAwOwotICAgICAgICBjb3VudFtj bWRsdmxdICA9IGNvdW50W2NtZGx2bC0xXTsgIC8qIEluaGVyaXQgdGhpcyAqLwotICAgICAgICBp bnRpbWVbY21kbHZsXSA9IGludGltZVtjbWRsdmwtMV07IC8qIEluaGVyaXQgdGhpcyAqLwotICAg ICAgICBpbnBjYXNbY21kbHZsXSA9IGlucGNhc1tjbWRsdmwtMV07IC8qIEluaGVyaXQgdGhpcyAq LwotICAgICAgICB0YWtlcnJbY21kbHZsXSA9IHRha2VycltjbWRsdmwtMV07IC8qIEluaGVyaXQg dGhpcyAqLwotICAgICAgICBtZXJyb3JbY21kbHZsXSA9IG1lcnJvcltjbWRsdmwtMV07IC8qIElu aGVyaXQgdGhpcyAqLwotICAgICAgICB4cXVpZXRbY21kbHZsXSA9IHF1aWV0OwotICAgICAgICB4 dmFyZXZbY21kbHZsXSA9IHZhcmV2YWw7Ci0gICAgICAgIHhjbWRzcmMgPSBDTURfVEY7Ci0gICAg ICAgIGNtZHN0a1tjbWRsdmxdLnNyYyA9IENNRF9URjsgICAgLyogU2F5IHdlJ3JlIGluIGEgVEFL RSBmaWxlICovCi0gICAgICAgIGNtZHN0a1tjbWRsdmxdLmx2bCA9IHRsZXZlbDsgICAgLyogbmVz dGVkIGF0IHRoaXMgbGV2ZWwgKi8KLSAgICAgICAgY21kc3RrW2NtZGx2bF0uY2NmbGdzID0gY21k c3RrW2NtZGx2bC0xXS5jY2ZsZ3M7Ci0jZWxzZQotICAgICAgICB0YWtlcnJbdGxldmVsXSA9IHRh a2Vyclt0bGV2ZWwtMV07IC8qIEluaGVyaXQgdGhpcyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0g ICAgfQotI2lmbmRlZiBOT1NQTAotICAgIGlmICh0cmFfY21kKQotICAgICAgcHJpbnRmKCJbJWRd ICtGOiBcIiVzXCJcbiIsY21kbHZsLHMpOwotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIE5P TE9DQUwKLSNpZmRlZiBPUzIKLSAgICB0ZXJtX2lvID0gdGVybV9pb19zYXY7Ci0jZW5kaWYgLyog T1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIHJldHVybigxKTsKLX0KLSNlbmRpZiAv KiBOT0lDUCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2t1dXM3LmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr dXVzNy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTc0YWI2Li4wMDAwMDAwCi0t LSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXM3LmMKKysrIC9k ZXYvbnVsbApAQCAtMSwxNTMyMyArMCwwIEBACi0jaW5jbHVkZSAiY2tjc3ltLmgiCi0KLS8qICBD IEsgVSBVIFMgNyAtLSAgIlVzZXIgSW50ZXJmYWNlIiBmb3IgQy1LZXJtaXQsIHBhcnQgNyAgKi8K LQotLyoKLSAgQXV0aG9yczoKLSAgICBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwK LSAgICAgIFRoZSBLZXJtaXQgUHJvamVjdCwgQ29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsg Q2l0eQotICAgIEplZmZyZXkgRSBBbHRtYW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+ Ci0gICAgICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkKLQotICBDb3B5cmln aHQgKEMpIDE5ODUsIDIwMTEsCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBp biB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRo ZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGlu IHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotKi8K LQotLyoKLSAgVGhpcyBmaWxlIGNyZWF0ZWQgZnJvbSBwYXJ0cyBvZiBja3V1czMuYywgd2hpY2gg YmVjYW1lIHRvbyBiaWcgZm9yCi0gIE1hcmsgV2lsbGlhbXMgQ29oZXJlbnQgY29tcGlsZXIgdG8g aGFuZGxlLgotKi8KLQotLyoKLSAgRGVmaW5pdGlvbnMgaGVyZSBzdXBlcnNlZGUgdGhvc2UgZnJv bSBzeXN0ZW0gaW5jbHVkZSBmaWxlcy4KLSovCi0jaW5jbHVkZSAiY2tjZGViLmgiICAgICAgICAg ICAgICAgICAgICAgLyogRGVidWdnaW5nICYgY29tcGlsZXIgdGhpbmdzICovCi0jaW5jbHVkZSAi Y2tjYXNjLmgiICAgICAgICAgICAgICAgICAgICAgLyogQVNDSUkgY2hhcmFjdGVyIHN5bWJvbHMg Ki8KLSNpbmNsdWRlICJja2NrZXIuaCIgICAgICAgICAgICAgICAgICAgICAvKiBLZXJtaXQgYXBw bGljYXRpb24gZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlICJja2N4bGEuaCIgICAgICAgICAgICAg ICAgICAgICAvKiBDaGFyYWN0ZXIgc2V0IHRyYW5zbGF0aW9uICovCi0jaW5jbHVkZSAiY2tjbmV0 LmgiICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBzeW1ib2xzICovCi0jaW5jbHVkZSAi Y2t1dXNyLmgiICAgICAgICAgICAgICAgICAgICAgLyogVXNlciBpbnRlcmZhY2Ugc3ltYm9scyAq LwotI2luY2x1ZGUgImNrdWNtZC5oIgotI2luY2x1ZGUgImNrY2xpYi5oIgotCi0jaWZkZWYgVk1T Ci0jaWZuZGVmIFRDUFNPQ0tFVAotI2luY2x1ZGUgPGVycm5vLmg+Ci0jZW5kaWYgLyogVENQU09D S0VUICovCi0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTlQKLSNkZWZp bmUgSU5DTF9OT1BNCi0jZGVmaW5lIElOQ0xfVklPICAgICAgICAgICAgICAgICAgICAgICAgLyog TmVlZGVkIGZvciBja29jb24uaCAqLwotI2RlZmluZSBJTkNMX0RPU01PRFVMRU1HUgotI2luY2x1 ZGUgPG9zMi5oPgotI3VuZGVmIENPTU1FTlQKLSNlbHNlIC8qIE5UICovCi0jZGVmaW5lIEFQSVJF VCBVTE9ORwotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx0YXBpLmg+Ci0jaW5jbHVk ZSAiY2tud2luLmgiCi0jaW5jbHVkZSAiY2tudGFwLmgiCi0jZW5kaWYgLyogTlQgKi8KLSNpbmNs dWRlICJja293aW4uaCIKLSNpbmNsdWRlICJja29jb24uaCIKLSNpbmNsdWRlICJja29kaXIuaCIK LSNpZmRlZiBPUzJNT1VTRQotI2luY2x1ZGUgImNrb2tleS5oIgotI2VuZGlmIC8qIE9TMk1PVVNF ICovCi0jaWZkZWYgS1VJCi0jaW5jbHVkZSAiaWt1aS5oIgotI2VuZGlmIC8qIEtVSSAqLwotI2lm ZGVmIHB1dGNoYXIKLSN1bmRlZiBwdXRjaGFyCi0jZW5kaWYgLyogcHV0Y2hhciAqLwotI2RlZmlu ZSBwdXRjaGFyKHgpIGNvbm9jKHgpCi1leHRlcm4gaW50IG1za2tleXM7Ci1leHRlcm4gaW50IG1z a3JlbmFtZTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0j aW5jbHVkZSAiY2t1YXRoLmgiCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNpZmRl ZiBDS19TU0wKLSNpbmNsdWRlICJja19zc2wuaCIKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRl ZiBTU0hCVUlMVElOCi0jaW5jbHVkZSAiY2tvc3NoLmgiCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAq LwotI2lmZGVmIFNUUkFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmF0dXMgQ29t cHV0ZXIsIEluYy4gIFZPUyAqLwotI2lmZGVmIHB1dGNoYXIKLSN1bmRlZiBwdXRjaGFyCi0jZW5k aWYgLyogcHV0Y2hhciAqLwotI2RlZmluZSBwdXRjaGFyKHgpIGNvbm9jKHgpCi0jaWZkZWYgZ2V0 Y2hhcgotI3VuZGVmIGdldGNoYXIKLSNlbmRpZiAvKiBnZXRjaGFyICovCi0jZGVmaW5lIGdldGNo YXIoeCkgY29uaW5jKDApCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotCi1jaGFyICogc2xtc2cgPSBO VUxMOwotCi1zdGF0aWMgaW50IHgsIHkgPSAwLCB6Owotc3RhdGljIGNoYXIgKnM7Ci0KLWV4dGVy biBDSEFSIGZlb2w7Ci1leHRlcm4gaW50IGdfbWF0Y2hkb3QsIGhpbnRzLCB4Y21kc3JjLCByY2Rh Y3RpdmU7Ci0KLWV4dGVybiBjaGFyICoga19pbmZvX2RpcjsKLQotI2lmZGVmIENLX0xPR0lOCi0j aWZkZWYgQ0tfUEFNCi1pbnQgZ290ZW1wdHlwYXNzd2QgPSAwOyAgIC8qIGRpc3Rpbmd1aXNoIGVt cHR5IHBhc3N3ZCBmcm9tIG5vbmUgZ2l2ZW4gKi8KLSNlbmRpZiAvKiBDS19QQU0gKi8KLSNlbmRp ZiAvKiBDS19MT0dJTiAqLwotCi0jaWZuZGVmIE5PU1BMCi1leHRlcm4gaW50IG5tYWM7Ci1leHRl cm4gc3RydWN0IG10YWIgKm1hY3RhYjsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5P WEZFUgotI2lmZGVmIENLX1NQRUVECi1leHRlcm4gc2hvcnQgY3RscFtdOyAgICAgICAgICAgICAg ICAgICAgLyogQ29udHJvbC1jaGFyIHByZWZpeGluZyB0YWJsZSAqLwotI2VuZGlmIC8qIENLX1NQ RUVEICovCi0KLSNpZmRlZiBQSVBFU0VORAotZXh0ZXJuIGNoYXIgKiBzbmRmaWx0ZXIsICogZ19z ZmlsdGVyOwotZXh0ZXJuIGNoYXIgKiByY3ZmaWx0ZXIsICogZ19yZmlsdGVyOwotI2VuZGlmIC8q IFBJUEVTRU5EICovCi0KLWV4dGVybiBjaGFyICogc25kX21vdmU7Ci1leHRlcm4gY2hhciAqIHNu ZF9yZW5hbWU7Ci1leHRlcm4gY2hhciAqIGdfc25kX21vdmU7Ci1leHRlcm4gY2hhciAqIGdfc25k X3JlbmFtZTsKLWV4dGVybiBjaGFyICogcmN2X21vdmU7Ci1leHRlcm4gY2hhciAqIHJjdl9yZW5h bWU7Ci1leHRlcm4gY2hhciAqIGdfcmN2X21vdmU7Ci1leHRlcm4gY2hhciAqIGdfcmN2X3JlbmFt ZTsKLQotI2lmZGVmIFBBVFRFUk5TCi1leHRlcm4gY2hhciAqYmlucGF0dGVybnNbXSwgKnR4dHBh dHRlcm5zW107Ci1leHRlcm4gaW50IHBhdHRlcm5zOwotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0K LWV4dGVybiBjaGFyICogcmVtZGVzdDsKLSNpZmRlZiBDS19UTVBESVIKLWNoYXIgKiBkbGRpciA9 IE5VTEw7Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0KLWV4dGVybiBzdHJ1Y3QgY2tfcCBwdGFi W107Ci0KLWV4dGVybiBpbnQgcHJvdG9jb2wsIHJlbWZpbGUsIHJlbXBpcGUsIHJlbWFwcGQsIHJl bGlhYmxlLCB4cmVsaWFibGUsIGZtYXNrLAotICBmbmNudiwgZnJlY2wsIG1heHJwcywgd3Nsb3Ry LCBiaWdzYnNpeiwgYmlncmJzaXosIHVycHNpeiwgcnBzaXosIHNwc2l6LAotICBiY3RyLCBucGFk LCB0aW1lZiwgdGltaW50LCBzcHNpenIsIHNwc2l6ZiwgbWF4c3BzLCBzcG1heCwgbmZpbHMsIGRp c3BsYSwKLSAgYXRjYXByLCBwa3R0aW0sIHJ0aW1vLCBmbmNhY3QsIG15cGFkbiwgZmRpc3BsYSwg Zl9zYXZlLCBwa3RwYXVzLCBzZXRyZWxpYWJsZSwKLSAgZm5ycGF0aCwgZm5zcGF0aCwgYXRlbmNp LCBhdGVuY28sIGF0ZGF0aSwgYXRkYXRvLCBhdGxlbmksIGF0bGVubywgYXRibGtpLAotICBhdGJs a28sIGF0dHlwaSwgYXR0eXBvLCBhdHNpZGksIGF0c2lkbywgYXRzeXNpLCBhdHN5c28sIGF0ZGlz aSwgYXRkaXNvOwotCi1leHRlcm4gaW50IHN0YXRoYWNrOwotCi1leHRlcm4gaW50IGF0ZnJtaSwg YXRmcm1vOwotI2lmZGVmIFNUUkFUVVMKLWV4dGVybiBpbnQgYXRjcmVpLCBhdGNyZW8sIGF0YWN0 aSwgYXRhY3RvOwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNpZmRlZiBDS19QRVJNUwotZXh0ZXJu IGludCBhdGxwcmksIGF0bHBybywgYXRncHJpLCBhdGdwcm87Ci0jZW5kaWYgLyogQ0tfUEVSTVMg Ki8KLQotZXh0ZXJuIENIQVIKLSAgc3N0YXRlLCBlb2wsIHNlb2wsIHN0Y2hyLCBteXN0Y2gsIG15 cGFkYywgcGFkY2gsIGN0bHEsIG15Y3RscTsKLQotI2lmZGVmIElLU0QKLWV4dGVybiBpbnQgaW5z ZXJ2ZXI7Ci0jaWZkZWYgSUtTRENPTkYKLWV4dGVybiBpbnQgaWtzZGNmOwotI2VuZGlmIC8qIElL U0RDT05GICovCi0jZW5kaWYgLyogSUtTRCAqLwotCi1leHRlcm4gY2hhciAqY21hcmcsICpjbWFy ZzI7Ci0KLSNpZm5kZWYgTk9GUklMTFMKLWV4dGVybiBjaGFyIG9wdGJ1ZltdOyAgICAgICAgICAg ICAgICAgICAvKiBCdWZmZXIgZm9yIE1BSUwgb3IgUFJJTlQgb3B0aW9ucyAqLwotZXh0ZXJuIGlu dCBycHJpbnRmOyAgICAgICAgICAgICAgICAgICAgIC8qIFJFTU9URSBQUklOVCBmbGFnICovCi0j ZW5kaWYgLyogTk9GUklMTFMgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIENLX1RS SUdHRVIKLWV4dGVybiBjaGFyICogdHRfdHJpZ2dlcltdOwotI2VuZGlmIC8qIENLX1RSSUdHRVIg Ki8KLQotZXh0ZXJuIGludCB0Y3NfdHJhbnNwOwotI2lmZGVmIFBDVEVSTQotZXh0ZXJuIGludCB0 dF9wY3Rlcm07Ci0jZW5kaWYgLyogUENURVJNICovCi0jaWZkZWYgTlQKLWV4dGVybiBpbnQgdHRf dnRudDsKLSNlbmRpZiAvKiBOVCAqLwotCi0jaWZkZWYgU1NIQlVJTFRJTgotaW50IHNsX3NzaF94 ZncgPSAwOwotaW50IHNsX3NzaF94Zndfc2F2ZWQgPSAwOwotaW50IHNsX3NzaF92ZXIgPSAwOwot aW50IHNsX3NzaF92ZXJfc2F2ZWQgPSAwOwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLQotI2lm ZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi1leHRlcm4gaW50IGF1dGhfdHlwZV91c2VyW107Ci1pbnQg c2xfYXV0aF90eXBlX3VzZXJbQVVUSFRZUExTVFNaXSA9IHtBVVRIVFlQRV9OVUxMLCBBVVRIVFlQ RV9OVUxMfTsKLWludCBzbF9hdXRoX3NhdmVkID0gMDsKLWludCBzbF90b3B0X2Ffc3UgPSAwOwot aW50IHNsX3RvcHRfYV9zX3NhdmVkID0gMDsKLWludCBzbF90b3B0X2FfY20gPSAwOwotaW50IHNs X3RvcHRfYV9jX3NhdmVkID0gMDsKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2lm ZGVmIENLX0VOQ1JZUFRJT04KLWV4dGVybiBpbnQgY3hfdHlwZTsKLWludCBzbF9jeF90eXBlID0g MDsKLWludCBzbF9jeF9zYXZlZCA9IDA7Ci1pbnQgc2xfdG9wdF9lX3N1ID0gMDsKLWludCBzbF90 b3B0X2Vfc20gPSAwOwotaW50IHNsX3RvcHRfZV9zX3NhdmVkID0gMDsKLWludCBzbF90b3B0X2Vf Y3UgPSAwOwotaW50IHNsX3RvcHRfZV9jbSA9IDA7Ci1pbnQgc2xfdG9wdF9lX2Nfc2F2ZWQgPSAw OwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLWV4dGVybiBjaGFyIHVpZGJ1ZltdOwotc3Rh dGljIGludCB1aWRmbGFnID0gMDsKLWNoYXIgc2xfdWlkYnVmW1VJREJVRkxFTl0gPSB7IE5VTCwg TlVMIH07Ci1pbnQgIHNsX3VpZF9zYXZlZCA9IDA7Ci0jaWZkZWYgVE5DT0RFCi1pbnQgIHNsX3Ru X3dhaXQgPSAwOwotaW50ICBzbF90bl9zYXZlZCA9IDA7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0K LSNpZmRlZiBUTkNPREUKLWV4dGVybiBpbnQgdG5fd2FpdF9mbGc7Ci0jZW5kaWYgLyogVE5DT0RF ICovCi0KLVZPSUQKLXNscmVzdG9yKCkgewotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAg aW50IHg7Ci0gICAgaWYgKHNsX2F1dGhfc2F2ZWQpIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8 IEFVVEhUWVBMU1RTWjsgeCsrKQotICAgICAgICAgIGF1dGhfdHlwZV91c2VyW3hdID0gc2xfYXV0 aF90eXBlX3VzZXJbeF07Ci0gICAgICAgIHNsX2F1dGhfc2F2ZWQgPSAwOwotICAgIH0KLSAgICBp ZiAoc2xfdG9wdF9hX3Nfc2F2ZWQpIHsKLSAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxP UFRfQVVUSEVOVElDQVRJT04pID0gc2xfdG9wdF9hX3N1OwotICAgICAgICBzbF90b3B0X2Ffc19z YXZlZCA9IDA7Ci0gICAgfQotICAgIGlmIChzbF90b3B0X2FfY19zYXZlZCkgewotICAgICAgICBU RUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gc2xfdG9wdF9hX2Nt OwotICAgICAgICBzbF90b3B0X2FfY19zYXZlZCA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIENLX0FV VEhFTlRJQ0FUSU9OICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIGlmIChzbF9jeF9zYXZl ZCkgewotICAgICAgICBjeF90eXBlID0gc2xfY3hfdHlwZTsKLSAgICAgICAgc2xfY3hfc2F2ZWQg PSAwOwotICAgIH0KLSAgICBpZiAoc2xfdG9wdF9lX3Nfc2F2ZWQpIHsKLSAgICAgICAgVEVMT1BU X0RFRl9TX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgID0gc2xfdG9wdF9lX3N1OwotICAgICAg ICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBzbF90b3B0X2Vfc207 Ci0gICAgICAgIHNsX3RvcHRfZV9zX3NhdmVkID0gMDsKLSAgICB9Ci0gICAgaWYgKHNsX3RvcHRf ZV9jX3NhdmVkKSB7Ci0gICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0VOQ1JZUFRJ T04pICA9IHNsX3RvcHRfZV9jdTsKLSAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BU X0VOQ1JZUFRJT04pID0gc2xfdG9wdF9lX2NtOwotICAgICAgICBzbF90b3B0X2VfY19zYXZlZCA9 IDA7Ci0gICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICBpZiAoc2xfdWlkX3Nh dmVkKSB7Ci0gICAgICAgIGNrc3RybmNweSh1aWRidWYsc2xfdWlkYnVmLFVJREJVRkxFTik7Ci0g ICAgICAgIHNsX3VpZF9zYXZlZCA9IDA7Ci0gICAgfQotI2lmZGVmIFROQ09ERQotICAgIGlmIChz bF90bl9zYXZlZCkgewotICAgICAgICB0bl93YWl0X2ZsZyA9IHNsX3RuX3dhaXQ7Ci0gICAgICAg IHNsX3RuX3NhdmVkID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogVE5DT0RFICovCi0jaWZkZWYgU1NI QlVJTFRJTgotICAgIGlmIChzbF9zc2hfeGZ3X3NhdmVkKSB7Ci0gICAgICAgIHNzaF94ZncgPSBz bF9zc2hfeGZ3OwotICAgICAgICBzbF9zc2hfeGZ3X3NhdmVkID0gMDsKLSAgICB9Ci0gICAgaWYg KHNsX3NzaF92ZXJfc2F2ZWQpIHsKLSAgICAgICAgc3NoX3ZlciA9IHNsX3NzaF92ZXI7Ci0gICAg ICAgIHNsX3NzaF92ZXJfc2F2ZWQgPSAwOwotICAgIH0KLSNlbmRpZiAvKiBTU0hCVUlMVElOICov Ci19Ci0KLWludCBvbGRwbGV4ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBEdXBsZXgg aG9sZGVyIGFyb3VuZCBuZXR3b3JrICovCi0KLSNpZm5kZWYgTk9JQ1AKLSNpZmRlZiBMT0NVUwot ZXh0ZXJuIGludCBsb2N1cywgYXV0b2xvY3VzOwotI2VuZGlmIC8qIExPQ1VTICovCi0jaWZuZGVm IE5PRElBTAotZXh0ZXJuIGludCBkaWFsc3RhOwotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0vKiBO b3RlOiBnY2MgLVdhbGwgd2FudHMgYnJhY2VzIGFyb3VuZCBlYWNoIGtleXdvcmQgdGFibGUgZW50 cnkuICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHBzbHRhYltdID0geyAgICAgICAvKiBTRVQg TElORS9QT1JUIGNvbW1hbmQgb3B0aW9ucyAqLwotICAgIHsgIi9jb25uZWN0IiwgU0xfQ05YLCAw IH0sCi0jaWZkZWYgT1MyT1JWTVMKLSAgICB7ICIvbm9zaGFyZSIsIFNMX05TSCwgMCB9LAotI2Vu ZGlmIC8qIE9TMk9SVk1TICovCi0gICAgeyAiL3NlcnZlciIsICBTTF9TUlYsIDAgfSwKLSNpZmRl ZiBPUzJPUlZNUwotICAgIHsgIi9zaGFyZSIsICAgU0xfU0hSLCAwIH0sCi0jZW5kaWYgLyogT1My T1JWTVMgKi8KLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5wc2x0YWIgPSBzaXpl b2YocHNsdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOwotCi0jaWZkZWYgTkVUQ09OTgot c3RhdGljIHN0cnVjdCBrZXl0YWIgc2h0YWJbXSA9IHsgICAgICAgIC8qIFNFVCBIT1NUIGNvbW1h bmQgb3B0aW9ucyAqLwotI2lmZGVmIE5FVENNRAotICAgIC8qIChDT01NQU5EIGlzIGFsc28gYSBu ZXR3b3JrIHR5cGUpICovCi0gICAgeyAiL2NvbW1hbmQiLCAgICAgIFNMX0NNRCwgICAgQ01fSU5W IH0sCi0jZW5kaWYgLyogTkVUQ01EICovCi0gICAgeyAiL2Nvbm5lY3QiLCAgICAgIFNMX0NOWCwg ICAgMCB9LAotICAgIHsgIi9uZXR3b3JrLXR5cGUiLCBTTF9ORVQsICAgIENNX0FSRyB9LAotICAg IHsgIi9ub3dhaXQiLCAgICAgICBTTF9OT1dBSVQsIDAgfSwKLSNpZm5kZWYgTk9TUEwKLSNpZmRl ZiBDS19BVVRIRU5USUNBVElPTgotICAgIHsgIi9wYXNzd29yZCIsICAgICBTTF9QU1csICAgIENN X0FSRyB9LAotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0jZW5kaWYgLyogTk9TUEwg Ki8KLSNpZmRlZiBORVRDTUQKLSAgICB7ICIvcGlwZSIsICAgICAgICAgU0xfQ01ELCAgICAwIH0s Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgeyAiL3B0eSIsICAgICAg ICAgIFNMX1BUWSwgICAgMCB9LAotI2VuZGlmIC8qIE5FVFBUWSAqLwotICAgIHsgIi9zZXJ2ZXIi LCAgICAgICBTTF9TUlYsICAgIDAgfSwKLSAgICB7ICIvdGltZW91dCIsICAgICAgU0xfVE1PLCAg ICBDTV9BUkcgfSwKLSAgICB7ICIvdXNlcmlkIiwgICAgICAgU0xfVUlELCAgICBDTV9BUkcgfSwK LSAgICB7ICIvd2FpdCIsICAgICAgICAgU0xfV0FJVCwgICAwIH0sCi0gICAgeyAiIiwgMCwgMCB9 Ci19Owotc3RhdGljIGludCBuc2h0YWIgPSBzaXplb2Yoc2h0YWIpL3NpemVvZihzdHJ1Y3Qga2V5 dGFiKSAtIDE7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNodGVsdGFiW10gPSB7ICAgICAvKiBU RUxORVQgY29tbWFuZCBvcHRpb25zICovCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICB7 ICIvYXV0aCIsICAgICAgICAgU0xfQVVUSCwgICBDTV9BUkcgfSwKLSNlbmRpZiAvKiBDS19BVVRI RU5USUNBVElPTiAqLwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICB7ICIvZW5jcnlwdCIsICAg ICAgU0xfRU5DLCAgICBDTV9BUkcgfSwKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAg eyAiL25vd2FpdCIsICAgICAgIFNMX05PV0FJVCwgMCB9LAotI2lmbmRlZiBOT1NQTAotI2lmZGVm IENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgeyAiL3Bhc3N3b3JkIiwgICAgIFNMX1BTVywgICAgQ01f QVJHIH0sCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNlbmRpZiAvKiBOT1NQTCAq LwotICAgIHsgIi90aW1lb3V0IiwgICAgICBTTF9UTU8sICAgIENNX0FSRyB9LAotICAgIHsgIi91 c2VyaWQiLCAgICAgICBTTF9VSUQsICAgIENNX0FSRyB9LAotICAgIHsgIi93YWl0IiwgICAgICAg ICBTTF9XQUlULCAgIDAgfSwKLSAgICB7ICIiLCAwICwwIH0KLX07Ci1zdGF0aWMgaW50IG5zaHRl bHRhYiA9IHNpemVvZihzaHRlbHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKLQotI2lm ZGVmIFJMT0dDT0RFCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzaHJsZ3RhYltdID0geyAgICAgLyog U0VUIEhPU1QgUkxPR0lOIGNvbW1hbmQgb3B0aW9ucyAqLwotI2lmZGVmIENLX0tFUkJFUk9TCi0j aWZkZWYgQ0tfRU5DUllQVElPTgotICAgIHsgIi9lbmNyeXB0IiwgICAgICBTTF9FTkMsIDAgfSwK LSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgeyAiL2s0IiwgICAgICAgICAgIFNMX0tS QjQsIENNX0lOViB9LAotICAgIHsgIi9rNSIsICAgICAgICAgICBTTF9LUkI1LCBDTV9JTlYgfSwK LSAgICB7ICIva2VyYmVyb3M0IiwgICAgU0xfS1JCNCwgMCB9LAotICAgIHsgIi9rZXJiZXJvczUi LCAgICBTTF9LUkI1LCAwIH0sCi0gICAgeyAiL2tlcmJlcm9zX2l2IiwgIFNMX0tSQjQsIENNX0lO ViB9LAotICAgIHsgIi9rZXJiZXJvc192IiwgICBTTF9LUkI1LCBDTV9JTlYgfSwKLSAgICB7ICIv a3JiNCIsICAgICAgICAgU0xfS1JCNCwgQ01fSU5WIH0sCi0gICAgeyAiL2tyYjUiLCAgICAgICAg IFNMX0tSQjUsIENNX0lOViB9LAotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0gICAgeyAiIiwg MCAsMCB9Ci19Owotc3RhdGljIGludCBuc2hybGd0YWIgPSBzaXplb2Yoc2hybGd0YWIpL3NpemVv ZihzdHJ1Y3Qga2V5dGFiKS0xOwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0KLWV4dGVybiBzdHJ1 Y3Qga2V5dGFiIG5ldGNtZFtdOwotZXh0ZXJuIGludCBubmV0czsKLSNpZm5kZWYgTk9ESUFMCi1l eHRlcm4gaW50IGRpcmxpbmU7Ci1leHRlcm4gaW50IG5uZXRkaXI7ICAgICAgICAgICAgICAgICAg ICAgLyogTmV0d29yayBzZXJ2aWNlcyBkaXJlY3RvcnkgKi8KLWV4dGVybiBjaGFyICpuZXRkaXJb XTsKLV9QUk9UT1RZUCggVk9JRCBuZHJlc2V0LCAodm9pZCkgKTsKLWNoYXIgKm5oX3BbTUFYRE5V TVMgKyAxXTsgICAgICAgICAgICAgICAvKiBOZXR3b3JrIGRpcmVjdG9yeSBlbnRyeSBwb2ludGVy cyAqLwotY2hhciAqbmhfcDJbTUFYRE5VTVMgKyAxXTsgICAgICAgICAgICAgIC8qIE5ldHdvcmsg ZGlyZWN0b3J5IGVudHJ5IG5ldHR5cGUgKi8KLWNoYXIgKm5oX3B4WzRdW01BWEROVU1TICsgMV07 ICAgICAgICAgICAvKiBOZXR3b3JrLXNwZWNpZmljIHN0dWZmLi4uICovCi0jZW5kaWYgLyogTk9E SUFMICovCi1pbnQgbmhjb3VudCA9IDA7Ci1pbnQgbmRpbml0ZWQgPSAwOwotY2hhciAqIG5fbmFt ZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgbmFtZSBwb2ludGVyICovCi0j ZW5kaWYgLyogTkVUQ09OTiAqLwotCi1fUFJPVE9UWVAoaW50IHJlbXR4dCwgKGNoYXIgKiopICk7 Ci1fUFJPVE9UWVAoVk9JRCBybXNnLCAodm9pZCkgKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IHJl bWNmbSwgKHZvaWQpICk7Ci0KLWV4dGVybiBpbnQgbm9wdXNoOwotCi1pbnQgbWRtc2F2ID0gLTE7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2F2ZSBtb2RlbSB0eXBlIGFyb3VuZCBuZXR3b3Jr ICovCi1leHRlcm4gaW50IGlzZ3Vlc3Q7ICAgICAgICAgICAgICAgICAgICAgLyogR2xvYmFsIGZs YWcgZm9yIGFub255bW91cyBsb2dpbiAqLwotCi1leHRlcm4geHhfc3RycCB4eHN0cmluZzsKLQot ZXh0ZXJuIGludCBzdWNjZXNzLCBiaW5hcnksIGJfc2F2ZSwgY2t3YXJuLCBtc2dmbGcsIHF1aWV0 LCBjbWFzaywgcGZsYWcsIGxvY2FsLAotICBuZXR0eXBlLCBlc2NhcGUsIG1kbXR5cCwgZHVwbGV4 LCBkZmxvYywgbmV0d29yaywgY2R0aW1vLCBhdXRvZmxvdywgdG5sbSwKLSAgc29zaSwgdGxldmVs LCBsZl9vcHRzLCBiYWNrZ3JkLCBmbG93LCBkZWJzZXMsIHBhcml0eSwgdHRucHJvdG8sIGNreGVj aCwKLSAgeF9pZm51bSwgY21mbGdzLCBoYXZlbGluZSwgY3h0eXBlLCBjeGZsb3dbXSwgbWFjbHZs OwotCi0jaWZkZWYgRENNREJVRgotZXh0ZXJuIHN0cnVjdCBjbWRwdHIgKmNtZHN0azsgICAgICAg ICAgIC8qIFRoZSBjb21tYW5kIHN0YWNrIGl0c2VsZiAqLwotI2Vsc2UKLWV4dGVybiBzdHJ1Y3Qg Y21kcHRyIGNtZHN0a1tdOyAgICAgICAgICAvKiBUaGUgY29tbWFuZCBzdGFjayBpdHNlbGYgKi8K LSNlbmRpZiAvKiBEQ01EQlVGICovCi1leHRlcm4gRklMRSAqIHRmaWxlW107Ci1leHRlcm4gY2hh ciAqIG1hY3BbXTsKLQotZXh0ZXJuIGNoYXIgcHNhdmVbXTsgICAgICAgICAgICAgICAgICAgIC8q IEZvciBzYXZpbmcgJiByZXN0b3JpbmcgcHJvbXB0ICovCi1leHRlcm4gaW50IHNwcm1sZW4sIHJw cm1sZW47Ci0KLSNpZmRlZiBPUzIKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHN0cm1rZXl0YWJbXSA9 IHsKLSAgICB7ICJjbGVhciIsICAgMCwgMCB9LAotICAgIHsgImRlZmF1bHQiLCAxLCAwIH0KLX07 Ci1zdGF0aWMgaW50IG5zdHJta2V5dGFiID0gc2l6ZW9mKHN0cm1rZXl0YWIpL3NpemVvZihzdHJ1 Y3Qga2V5dGFiKTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgc3RybXN3aXRhYltdID0gewotICAg IHsgIi9saXRlcmFsIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuc3RybXN3aXRhYiA9IHNpemVv ZihzdHJtc3dpdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5 dGFiIG5vcm1yZXZbXSA9IHsKLSAgICB7ICJkYXJrLWRpc3BsYXkiLCAwLCAwIH0sCi0gICAgeyAi bGlnaHQtZGlzcGxheSIsIDEsIDAgfSwKLSAgICB7ICJub3JtYWwiLCAgIDAsIDAgfSwKLSAgICB7 ICJyZXZlcnNlIiwgIDEsIDAgfQotfTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgcHJubXRhYltd ID0gewotICAgIHsgImF1dG8iLCAxLCAwIH0sCi0gICAgeyAiY29weSIsIDIsIDAgfSwKLSAgICB7 ICJvZmYiLCAgMCwgMCB9LAotICAgIHsgIm9uIiwgICAxLCBDTV9JTlYgfSwgICAgICAgICAgICAg IC8qIENvbXBhdGliaWxpdHkgd2l0aCBYUFJJTlQgdmVyc2lvbiAqLwotICAgIHsgInVzZXIiLCAz LCAwIH0sCi0gICAgeyAidHJhbnNwYXJlbnQiLCAzLCBDTV9JTlYgfSAgICAgICAgLyogbm90IHJl YWxseSB0cmFuc3BhcmVudCAqLwotfTsKLXN0YXRpYyBpbnQgbnBybm10YWIgPSBzaXplb2YocHJu bXRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotCi1leHRlcm4gaW50IHR0X2RpZmZfdXBkOwot Ci0jaWZkZWYgTlQKLSNkZWZpbmUgc3RyaWNtcCBfc3RyaWNtcAotZXh0ZXJuIGludCB0dF9hdHRy X2J1ZzsKLSNlbmRpZiAvKiBOVCAqLwotZXh0ZXJuIGludCB0dF9yb3dzW10sIHR0X2NvbHNbXTsK LWV4dGVybiBpbnQgdHRfY29sc191c3I7Ci1leHRlcm4gaW50IHR0X3N6Y2huZ1tWTlVNXTsKLWlu dCB0dF9tb2RlY2hnID0gVFZDX0VOQTsKLWV4dGVybiBpbnQgdHRfdXJsX2hpbGl0ZSwgdHRfdXJs X2hpbGl0ZV9hdHRyOwotZXh0ZXJuIHN0cnVjdCBfdnRHIEdbNF07Ci1leHRlcm4gaW50IHByaW9y aXR5OwotZXh0ZXJuIGJvb2wgc2VuZF9jMTsKLWludCBzZW5kX2MxX3VzciA9IEZBTFNFOwotZXh0 ZXJuIGludCBzZ3Jjb2xvcnM7Ci1leHRlcm4gaW50IG1hcmdpbmJlbGwsIG1hcmdpbmJlbGxjb2w7 Ci1leHRlcm4gaW50IGF1dG9zY3JvbGwsIHd5X2F1dG9wYWdlOwotZXh0ZXJuIGludCB0dF9zYWM7 Ci1leHRlcm4gaW50IGRlY19ucmMsIGRlY19sYW5nLCBkZWNfa2JkOwotI2Vsc2UgLyogT1MyICov Ci1leHRlcm4gaW50IHR0X3Jvd3MsIHR0X2NvbHM7Ci0jZW5kaWYgLyogIE9TMiAqLwotCi1leHRl cm4gaW50IHR0X2VzY2FwZTsKLWV4dGVybiBsb25nIHNwZWVkOwotCi1leHRlcm4gY2hhciAqZGZ0 dHk7Ci0KLWV4dGVybiBjaGFyICp0cCwgKmxwOyAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3Jh cnkgYnVmZmVyICYgcG9pbnRlcnMgKi8KLWV4dGVybiBjaGFyIHR0bmFtZVtdOwotCi0jaWZkZWYg Q0tfVEFQSQotaW50IHR0dGFwaSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzIExp bmUgVEFQST8gKi8KLXN0cnVjdCBrZXl0YWIgKiB0YXBpbGluZXRhYiA9IE5VTEw7Ci1zdHJ1Y3Qg a2V5dGFiICogX3RhcGlsaW5ldGFiID0gTlVMTDsKLWludCBudGFwaWxpbmUgPSAwOwotI2VuZGlm IC8qIENLX1RBUEkgKi8KLQotI2lmZGVmIE5FVENPTk4gICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE5ldHdvcmsgaXRlbXMgKi8KLQotI2lmZGVmIEFOWVgyNQotZXh0ZXJuIGludCByZXZjYWxs LCBjbG9zZ3IsIGN1ZGF0YSwgbngyNTsKLWV4dGVybiBjaGFyIHVkYXRhW107Ci1leHRlcm4gc3Ry dWN0IGtleXRhYiB4MjV0YWJbXTsKLSNpZm5kZWYgSUJNWDI1Ci1leHRlcm4gaW50IG5wYWR4MzsK LWV4dGVybiBDSEFSIHBhZHBhcm1zW107Ci1leHRlcm4gc3RydWN0IGtleXRhYiBwYWR4M3RhYltd OwotI2VuZGlmIC8qIElCTVgyNSAqLwotI2VuZGlmIC8qIEFOWVgyNSAqLwotCi0jaWZkZWYgT1My Ci1leHRlcm4gYm9vbCB0dHNoYXJlOwotI2lmbmRlZiBOVAotZXh0ZXJuIGJvb2wgdHRzbGlwLHR0 cHBwOwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgTlBJUEUKLWV4 dGVybiBjaGFyIHBpcGVuYW1lW107Ci0jZW5kaWYgLyogTlBJUEUgKi8KLQotI2lmZGVmIFRDUFNP Q0tFVAotc3RhdGljIHN0cnVjdCBrZXl0YWIgdGNwcmF3dGFiW10gPSB7ICAgIC8qIFNFVCBIT1NU IG9wdGlvbnMgKi8KLSAgICB7ICIvZGVmYXVsdCIsICAgIE5QX0RFRkFVTFQsICAgIENNX0lOViB9 LAotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBS TE9HQ09ERQotICAgIHsgIi9lazRsb2dpbiIsICAgIE5QX0VLNExPR0lOLCAgICAwIH0sCi0gICAg eyAiL2VrNWxvZ2luIiwgICAgTlBfRUs1TE9HSU4sICAgIDAgfSwKLSAgICB7ICIvazRsb2dpbiIs ICAgICBOUF9LNExPR0lOLCAgICAgMCB9LAotICAgIHsgIi9rNWxvZ2luIiwgICAgIE5QX0s1TE9H SU4sICAgICAwIH0sCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBLUkI1X1UyVQotICAg IHsgIi9rNXVzZXIydXNlciIsIE5QX0s1VTJVLCAgICAgICAwIH0sCi0jZW5kaWYgLyogS1JCNV9V MlUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FU SU9OICovCi0gICAgeyAiL25vLXRlbG5ldC1pbml0IiwgTlBfTk9ORSwgICAwIH0sCi0gICAgeyAi L25vbmUiLCAgICAgICBOUF9OT05FLCAgIENNX0lOViB9LAotICAgIHsgIi9yYXctc29ja2V0Iiwg TlBfVENQUkFXLCAwIH0sCi0jaWZkZWYgUkxPR0NPREUKLSAgICB7ICIvcmxvZ2luIiwgICAgIE5Q X1JMT0dJTiwgMCB9LAotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgQ0tfU1NMCi0gICAg eyAiL3NzbCIsICAgICAgICBOUF9TU0wsICAgIDAgfSwKLSAgICB7ICIvc3NsLXJhdyIsICAgIE5Q X1NTTF9SQVcsIDAgfSwKLSAgICB7ICIvc3NsLXRlbG5ldCIsIE5QX1NTTF9URUxORVQsIDAgfSwK LSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICB7ICIvdGVsbmV0IiwgICAgIE5QX1RFTE5FVCwgMCB9 LAotI2lmZGVmIENLX1NTTAotICAgIHsgIi90bHMiLCAgICAgICAgTlBfVExTLCAgICAwIH0sCi0g ICAgeyAiL3Rscy1yYXciLCAgICBOUF9UTFNfUkFXLCAwIH0sCi0gICAgeyAiL3Rscy10ZWxuZXQi LCBOUF9UTFNfVEVMTkVULCAwIH0sCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgeyAiIiwgMCwg MCB9Ci19Owotc3RhdGljIGludCBudGNwcmF3ID0gKHNpemVvZih0Y3ByYXd0YWIpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLSNpZmRlZiBSTE9HQ09ERQotX1BST1RPVFlQKCBpbnQg cmxvZ19uYXdzLCAodm9pZCkgKTsKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLwotCi0jaWZkZWYgU1VQRVJMQVQKLWV4dGVybiBjaGFyIHNsYXRfcHdkWzE4XTsK LSNlbmRpZiAvKiBTVVBFUkxBVCAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmZGVmIENP TU1FTlQKLSNpZm5kZWYgTk9TRVRLRVkKLWV4dGVybiBLRVkgKmtleW1hcDsKLSNpZm5kZWYgT1My Ci0jZGVmaW5lIG1hcGtleSh4KSBrZXltYXBbeF0KLSNlbmRpZiAvKiBPUzIgKi8KLWV4dGVybiBN QUNSTyAqbWFjcm90YWI7Ci0jaWZuZGVmIE5PS1ZFUkJTCi1leHRlcm4gc3RydWN0IGtleXRhYiBr dmVyYnNbXTsKLWV4dGVybiBpbnQgbmt2ZXJiczsKLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotI2Vu ZGlmIC8qIE5PU0VUS0VZICovCi0jZWxzZQotI2lmbmRlZiBOT1NFVEtFWQotZXh0ZXJuIEtFWSAq a2V5bWFwOwotZXh0ZXJuIE1BQ1JPICptYWNyb3RhYjsKLSNpZm5kZWYgTk9LVkVSQlMKLWV4dGVy biBzdHJ1Y3Qga2V5dGFiIGt2ZXJic1tdOwotZXh0ZXJuIGludCBua3ZlcmJzOwotI2VuZGlmIC8q IE5PS1ZFUkJTICovCi0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLSNlbmRpZiAvKiBDT01NRU5UICov Ci0KLSNpZmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBVVRPRE9XTkxP QUQgcGFyYW1ldGVycyAqLwotZXh0ZXJuIGludCAgICBhZGxfa21vZGUsIGFkbF96bW9kZTsgICAg IC8qIE1hdGNoIFBhY2tldCB0byBzaWduYWwgZG93bmxvYWQgKi8KLWV4dGVybiBjaGFyICogYWRs X2tzdHI7ICAgICAgICAgICAgICAgICAvKiBLRVJNSVQgRG93bmxvYWQgU3RyaW5nICovCi1leHRl cm4gY2hhciAqIGFkbF96c3RyOyAgICAgICAgICAgICAgICAgLyogWk1PREVNIERvd25sb2FkIFN0 cmluZyAqLwotZXh0ZXJuIGludCBhZGxfa2MwLCBhZGxfemMwOyAgICAgICAgICAgIC8qIFByb2Nl c3MgQURMIEMwcyBpbiBlbXVsYXRpb24gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotLyogS2V5d29y ZCB0YWJsZXMgLi4uICovCi0KLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIG9ub2ZmW10sIHJsdGFiW107 Ci1leHRlcm4gaW50IG5ybHQ7Ci0KLSNpZm5kZWYgTk9DU0VUUwotc3RhdGljIHN0cnVjdCBrZXl0 YWIgZmRmbHRhYltdID0gewotICAgIHsgIjdiaXQtY2hhcmFjdGVyLXNldCIsIDcsIDAgfSwKLSAg ICB7ICI4Yml0LWNoYXJhY3Rlci1zZXQiLCA4LCAwIH0KLX07Ci1zdGF0aWMgaW50IG5mZGZsdCA9 IChzaXplb2YoZmRmbHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotI2VuZGlmIC8qIE5P Q1NFVFMgKi8KLQotLyogU0VUIEZJTEUgcGFyYW1ldGVycyAqLwotCi1zdGF0aWMgc3RydWN0IGtl eXRhYiBmaWx0YWJbXSA9IHsKLSNpZm5kZWYgTk9YRkVSCi0jaWZkZWYgUEFUVEVSTlMKLSAgICB7 ICJiaW5hcnktcGF0dGVybnMiLCAgIFhZRklCUCwgIDAgfSwKLSNlbmRpZiAvKiBQQVRURVJOUyAq LwotICAgIHsgImJ5dGVzaXplIiwgICAgICAgICBYWUZJTFMsICAgMCB9LAotI2lmbmRlZiBOT0NT RVRTCi0gICAgeyAiY2hhcmFjdGVyLXNldCIsICAgIFhZRklMQywgICAwIH0sCi0jZW5kaWYgLyog Tk9DU0VUUyAqLwotICAgIHsgImNvbGxpc2lvbiIsICAgICAgICBYWUZJTFgsICAgMCB9LAotICAg IHsgImRlZmF1bHQiLCAgICAgICAgICBYWUZfREZMVCwgMCB9LAotICAgIHsgImRlc3RpbmF0aW9u IiwgICAgICBYWUZJTFksICAgMCB9LAotICAgIHsgImRpc3BsYXkiLCAgICAgICAgICBYWUZJTEQs ICAgQ01fSU5WIH0sCi0jaWZkZWYgQ0tfVE1QRElSCi0gICAgeyAiZG93bmxvYWQtZGlyZWN0b3J5 IiwgWFlGSUxHLCAwIH0sCi0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0jZW5kaWYgLyogTk9YRkVS ICovCi0gICAgeyAiZW5kLW9mLWxpbmUiLCAgICAgIFhZRklMQSwgICAwIH0sCi0gICAgeyAiZW9s IiwgICAgICAgICAgICAgIFhZRklMQSwgICBDTV9JTlYgfSwKLSNpZmRlZiBDS19DVFJMWgotICAg IHsgImVvZiIsICAgICAgICAgICAgICBYWUZJTFYsICAgMCB9LAotI2VuZGlmIC8qIENLX0NUUkxa ICovCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgImZhc3Rsb29rdXBzIiwgICAgICA5OTk3LCAgICAg Q01fSU5WIH0sCi0gICAgeyAiaW5jb21wbGV0ZSIsICAgICAgIFhZRklMSSwgICAwIH0sCi0jaWZu ZGVmIGRhdGFnZW5lcmFsCi0gICAgeyAiaW5zcGVjdGlvbiIsICAgICAgIFhZRl9JTlNQLCBDTV9J TlYgfSwKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2lmZGVmIENLX0xBQkVMRUQKLSAgICB7 ICJsYWJlbCIsICAgICAgICAgICAgWFlGSUxMLCAwIH0sCi0jZW5kaWYgLyogQ0tfTEFCRUxFRCAq LwotCi0jaWZkZWYgVU5JWAotI2lmZGVmIERZTkFNSUMKLSAgICB7ICJsaXN0c2l6ZSIsICAgICAg ICAgWFlGX0xTSVosIDAgfSwKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0jZW5kaWYgLyogVU5JWCAq LwotCi0gICAgeyAibmFtZXMiLCAgICAgICAgICAgIFhZRklMTiwgMCB9LAotI2lmZGVmIFVOSVgK LSAgICB7ICJvdXRwdXQiLCAgICAgICAgICAgWFlGSUxILCAwIH0sCi0jZW5kaWYgLyogVU5JWCAq LwotI2lmZGVmIFBBVFRFUk5TCi0gICAgeyAicGF0dGVybnMiLCAgICAgICAgIFhZRklQQSwgMCB9 LAotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0jaWZkZWYgQ09NTUVOVCAvKiBOb3QgaW1wbGVtZW50 ZWQgKGJ1dCBzZWUgQ0hNT0QpICovCi0gICAgeyAicGVybWlzc2lvbnMiLCAgICAgIFhZRl9QUk0s IENNX0lOViB9LAotICAgIHsgInByb3RlY3Rpb24iLCAgICAgICBYWUZfUFJNLCAwIH0sCi0jZW5k aWYgLyogQ09NTUVOdCAqLwotI2lmZGVmIFZNUwotICAgIHsgInJlY29yZC1sZW5ndGgiLCAgICBY WUZJTFIsIDAgfSwKLSNlbmRpZiAvKiBWTVMgKi8KLSNpZm5kZWYgZGF0YWdlbmVyYWwKLSAgICB7 ICJzY2FuIiwgICAgICAgICAgICAgWFlGX0lOU1AsIDAgfSwKLSNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLwotCi0jaWZkZWYgVU5JWAotI2lmZGVmIERZTkFNSUMKLSAgICB7ICJzdHJpbmdzcGFjZSIs ICAgICAgWFlGX1NTUEEsIDAgfSwKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0jZW5kaWYgLyogVU5J WCAqLwotCi0jaWZkZWYgUEFUVEVSTlMKLSAgICB7ICJ0IiwgICAgICAgICAgICAgICAgWFlGSUxU LCBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAidGV4dC1wYXR0ZXJucyIsICAgIFhZRklUUCwgMCB9 LAotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgeyAidHlw ZSIsICAgICAgICAgICAgIFhZRklMVCwgMCB9LAotI2lmZGVmIFVOSUNPREUKLSAgICB7ICJ1Y3Mi LCAgICAgICAgICAgICAgWFlGSUxVLCAwIH0sCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotI2lmbmRl ZiBOT1hGRVIKLSAgICB7ICJ3YXJuaW5nIiwgICAgICAgICAgWFlGSUxXLCBDTV9JTlYgfQotI2Vu ZGlmIC8qIE5PWEZFUiAqLwotfTsKLXN0YXRpYyBpbnQgbmZpbHAgPSAoc2l6ZW9mKGZpbHRhYikg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIHBhdGh0YWJbXSA9IHsK LSAgICB7ICJhYnNvbHV0ZSIsICBQQVRIX0FCUywgIDAgICAgICB9LAotICAgIHsgIm5vbmUiLCAg ICAgIFBBVEhfT0ZGLCAgQ01fSU5WIH0sCi0gICAgeyAib2ZmIiwgICAgICAgUEFUSF9PRkYsICAw ICAgICAgfSwKLSAgICB7ICJvbiIsICAgICAgICBQQVRIX0FCUywgIENNX0lOViB9LAotICAgIHsg InJlbGF0aXZlIiwgIFBBVEhfUkVMLCAgMCAgICAgIH0KLX07Ci1pbnQgbnBhdGh0YWIgPSAoc2l6 ZW9mKHBhdGh0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiBy cGF0aHRhYltdID0gewotICAgIHsgImFic29sdXRlIiwgIFBBVEhfQUJTLCAgMCAgICAgIH0sCi0g ICAgeyAiYXV0byIsICAgICAgUEFUSF9BVVRPLCAwICAgICAgfSwKLSAgICB7ICJub25lIiwgICAg ICBQQVRIX09GRiwgIENNX0lOViB9LAotICAgIHsgIm9mZiIsICAgICAgIFBBVEhfT0ZGLCAgMCAg ICAgIH0sCi0gICAgeyAib24iLCAgICAgICAgUEFUSF9BQlMsICBDTV9JTlYgfSwKLSAgICB7ICJy ZWxhdGl2ZSIsICBQQVRIX1JFTCwgIDAgICAgICB9Ci19OwotaW50IG5ycGF0aHRhYiA9IChzaXpl b2YocnBhdGh0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotI2lmZGVmIENLX0NUUkxa Ci1zdHJ1Y3Qga2V5dGFiIGVvZnRhYltdID0geyAgICAgICAgICAgICAgLyogRU9GIGRldGVjdGlv biBtZXRob2QgKi8KLSAgICB7ICJjdHJsLXoiLCAgICAgICAgICAxLCAwICAgICAgfSwKLSAgICB7 ICJsZW5ndGgiLCAgICAgICAgICAwLCAwICAgICAgfSwKLSAgICB7ICJub2N0cmwteiIsICAgICAg ICAwLCBDTV9JTlYgfQotfTsKLSNlbmRpZiAvKiBDS19DVFJMWiAqLwotCi1zdHJ1Y3Qga2V5dGFi IGZ0dGFiW10gPSB7ICAgICAgICAgICAgICAgLyogRmlsZSB0eXBlcyBmb3IgU0VUIEZJTEUgVFlQ RSAqLwotICAgIHsgImFzY2lpIiwgICAgIFhZRlRfVCwgQ01fSU5WIH0sCi0jaWZkZWYgVk1TCi0g ICAgeyAiYiIsICAgICAgICAgWFlGVF9CLCBDTV9JTlZ8Q01fQUJSIH0sCi0jZW5kaWYgLyogVk1T ICovCi0gICAgeyAiYmluYXJ5IiwgICAgWFlGVF9CLCAwIH0sCi0jaWZkZWYgVk1TCi0gICAgeyAi YmxvY2siLCAgICAgWFlGVF9JLCBDTV9JTlYgfSwKLSAgICB7ICJpbWFnZSIsICAgICBYWUZUX0ks IDAgfSwKLSNlbmRpZiAvKiBWTVMgKi8KLSNpZmRlZiBDS19MQUJFTEVECi0gICAgeyAibGFiZWxl ZCIsICAgWFlGVF9MLCAwIH0sCi0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotI2lmZGVmIE1BQwot ICAgIHsgIm1hY2JpbmFyeSIsIFhZRlRfTSwgMCB9LAotI2VuZGlmIC8qIE1BQyAqLwotICAgIHsg InRleHQiLCAgICAgIFhZRlRfVCwgMCB9Ci19OwotaW50IG5mdHR5cCA9IChzaXplb2YoZnR0YWIp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgcmZ0dGFi W10gPSB7ICAgICAgIC8qIEZpbGUgdHlwZXMgZm9yIFJFTU9URSBTRVQgRklMRSAqLwotICAgIHsg ImFzY2lpIiwgICAgIFhZRlRfVCwgQ01fSU5WIH0sCi0gICAgeyAiYmluYXJ5IiwgICAgWFlGVF9C LCAwIH0sCi0jaWZkZWYgVk1TCi0gICAgeyAibGFiZWxlZCIsICAgWFlGVF9MLCAwIH0sCi0jZWxz ZQotI2lmZGVmIE9TMgotICAgIHsgImxhYmVsZWQiLCAgIFhZRlRfTCwgMCB9LAotI2VuZGlmIC8q IE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotICAgIHsgInRleHQiLCAgICAgIFhZRlRfVCwgMCB9 Ci19Owotc3RhdGljIGludCBucmZ0dHlwID0gKHNpemVvZihyZnR0YWIpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpKTsKLQotI2lmZGVmIE9TMk9SVU5JWAotI2RlZmluZSBaT0ZfQkxLICAwCi0jZGVm aW5lIFpPRl9OQkxLIDEKLSNkZWZpbmUgWk9GX0JVRiAgMgotI2RlZmluZSBaT0ZfTkJVRiAzCi1z dGF0aWMgc3RydWN0IGtleXRhYiB6b2Z0YWJbXSA9IHsKLSAgICB7ICJibG9ja2luZyIsICAgIFpP Rl9CTEssICAwIH0sCi0gICAgeyAiYnVmZmVyZWQiLCAgICBaT0ZfQlVGLCAgMCB9LAotICAgIHsg Im5vbmJsb2NraW5nIiwgWk9GX05CTEssIDAgfSwKLSAgICB7ICJ1bmJ1ZmZlcmVkIiwgIFpPRl9O QlVGLCAwIH0KLX07Ci1zdGF0aWMgaW50IG56b2Z0YWIgPSAoc2l6ZW9mKHpvZnRhYikgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpOwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotCi1leHRlcm4gaW50 IHF1ZXJ5OyAgICAgICAgICAgICAgICAgICAgICAgLyogR2xvYmFsIGZsYWcgZm9yIFFVRVJZIGFj dGl2ZSAqLwotCi0jaWZuZGVmIE5PU1BMCi0jaWZuZGVmIE5PWEZFUgotc3RhdGljIHN0cnVjdCBr ZXl0YWIgdmFydHlwW10gPSB7ICAgICAgIC8qIFZhcmlhYmxlIHR5cGVzIGZvciBSRU1PVEUgUVVF UlkgKi8KLSAgICB7ICJnbG9iYWwiLCAgIChpbnQpICdHJywgQ01fSU5WIH0sCi0gICAgeyAia2Vy bWl0IiwgICAoaW50KSAnSycsIDAgfSwKLSAgICB7ICJzeXN0ZW0iLCAgIChpbnQpICdTJywgMCB9 LAotICAgIHsgInVzZXIiLCAgICAgKGludCkgJ0cnLCAwIH0KLX07Ci1zdGF0aWMgaW50IG52YXJ0 eXAgPSAoc2l6ZW9mKHZhcnR5cCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotI2VuZGlmIC8q IE5PWEZFUiAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBDS19USU1FUlMKLXN0YXRp YyBzdHJ1Y3Qga2V5dGFiIHRpbW90YWJbXSA9IHsgICAgICAvKiBUaW1lciB0eXBlcyAqLwotICAg IHsgImR5bmFtaWMiLCAxLCAwIH0sCi0gICAgeyAiZml4ZWQiLCAgIDAsIDAgfQotfTsKLSNlbmRp ZiAvKiBDS19USU1FUlMgKi8KLQotI2lmZGVmIERDTURCVUYKLWV4dGVybiBjaGFyICphdHhidWYs ICphdG1idWY7ICAgICAgICAgICAvKiBBdG9tIGJ1ZmZlciAqLwotZXh0ZXJuIGNoYXIgKmNtZGJ1 ZjsgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgYnVmZmVyICovCi1leHRlcm4gY2hhciAq bGluZSwgKnRtcGJ1ZjsgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIGJ1ZmZlcnMgZm9yIGFueXRo aW5nICovCi1leHRlcm4gaW50ICppbnRpbWU7ICAgICAgICAgICAgICAgICAgICAgLyogSU5QVVQg VElNRU9VVCAqLwotCi0jZWxzZSAgLyogTm90IERDTURCVUYgLi4uICovCi0KLWV4dGVybiBjaGFy IGF0eGJ1ZltdLCBhdG1idWZbXTsgICAgICAgICAvKiBBdG9tIGJ1ZmZlciAqLwotZXh0ZXJuIGNo YXIgY21kYnVmW107ICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgYnVmZmVyICovCi1leHRl cm4gY2hhciBsaW5lW10sIHRtcGJ1ZltdOyAgICAgICAgICAgLyogQ2hhcmFjdGVyIGJ1ZmZlciBm b3IgYW55dGhpbmcgKi8KLWV4dGVybiBpbnQgaW50aW1lW107Ci0KLSNlbmRpZiAvKiBEQ01EQlVG ICovCi0KLSNpZm5kZWYgTk9DU0VUUwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZmNzdGFiW107ICAg ICAgICAgIC8qIEZvciBTRVQgRklMRSBDSEFSQUNURVItU0VUICovCi1leHRlcm4gc3RydWN0IGNz aW5mbyBmY3NpbmZvW107ICAgICAgICAgLyogRmlsZSBjaGFyYWN0ZXIgc2V0IGluZm8uICovCi1l eHRlcm4gc3RydWN0IGtleXRhYiB0dGNzdGFiW107Ci1leHRlcm4gaW50IG5maWxjLCBmY2hhcnNl dCwgdGNoYXJzZXQsIG50ZXJtYywgdGNzciwgdGNzbCwgZGNzZXQ3LCBkY3NldDg7Ci0jaWZkZWYg Q0tPVU5JCi1leHRlcm4gaW50IHR0X3V0Zjg7Ci0jZW5kaWYgLyogQ0tPVU5JICovCi0jaWZkZWYg T1MyCi1fUFJPVE9UWVAoIGludCBvczJzZXRjcCwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IG9z MmdldGNwLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggdm9pZCBvczJkZWJ1Z29mZiwgKHZvaWQpICk7 Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi1leHRlcm4gaW50IGNt ZGx2bDsgICAgICAgICAgICAgICAgICAgICAgLyogT3ZlcmFsbCBjb21tYW5kIGxldmVsICovCi0K LSNpZm5kZWYgTk9TUEwKLSNpZmRlZiBEQ01EQlVGCi1leHRlcm4gaW50ICppbnBjYXM7ICAgICAg ICAgICAgICAgICAgICAgLyogSU5QVVQgQ0FTRSBzZXR0aW5nIG9uIGNtZCBzdGFjayAqLwotI2Vs c2UKLWV4dGVybiBpbnQgaW5wY2FzW107Ci0jZW5kaWYgLyogRENNREJVRiAqLwotI2VuZGlmIC8q IE5PU1BMICovCi0KLSNpZmRlZiBDS19DVVJTRVMKLSNpZm5kZWYgVk1TCi1fUFJPVE9UWVAoaW50 IHRnZXRlbnQsKGNoYXIgKiwgY2hhciAqKSk7Ci0jZWxzZQotI2lmZGVmIF9fREVDQwotX1BST1RP VFlQKGludCB0Z2V0ZW50LChjaGFyICosIGNoYXIgKikpOwotI2VuZGlmIC8qIF9fREVDQyAqLwot I2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi0jaWZuZGVmIE5PWE1J VAotI2RlZmluZSBYTUlURiAwICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBUUkFOU01J VCB2YWx1ZXMgKi8KLSNkZWZpbmUgWE1JVEwgMSAgICAgICAgICAgICAgICAgICAgICAgICAvKiAo TG9jYWwgdG8gdGhpcyBtb2R1bGUpICovCi0jZGVmaW5lIFhNSVRQIDIKLSNkZWZpbmUgWE1JVEUg MwotI2RlZmluZSBYTUlUWCA0Ci0jZGVmaW5lIFhNSVRTIDUKLSNkZWZpbmUgWE1JVFcgNgotI2Rl ZmluZSBYTUlUVCA3Ci0KLSNkZWZpbmUgWE1CVUZMIDUwCi1leHRlcm4gaW50IHhtaXRmLCB4bWl0 bCwgeG1pdHAsIHhtaXR4LCB4bWl0cywgeG1pdHcsIHhtaXR0OwotY2hhciB4bWl0YnVmW1hNQlVG TCsxXSA9IHsgTlVMIH07ICAgICAgIC8qIFRSQU5TTUlUIGVvZiBzdHJpbmcgKi8KLQotc3RydWN0 IGtleXRhYiB4bWl0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIFNFVCBUUkFOU01JVCAqLwotICAg IHsgImVjaG8iLCAgICAgICAgICBYTUlUWCwgMCB9LAotICAgIHsgImVvZiIsICAgICAgICAgICBY TUlURSwgMCB9LAotICAgIHsgImZpbGwiLCAgICAgICAgICBYTUlURiwgMCB9LAotICAgIHsgImxp bmVmZWVkIiwgICAgICBYTUlUTCwgMCB9LAotICAgIHsgImxvY2tpbmctc2hpZnQiLCBYTUlUUywg MCB9LAotICAgIHsgInBhdXNlIiwgICAgICAgICBYTUlUVywgMCB9LAotICAgIHsgInByb21wdCIs ICAgICAgICBYTUlUUCwgMCB9LAotICAgIHsgInRpbWVvdXQiLCAgICAgICBYTUlUVCwgMCB9Ci19 OwotaW50IG54bWl0ID0gKHNpemVvZih4bWl0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsK LSNlbmRpZiAvKiBOT1hNSVQgKi8KLQotLyogRm9yIFNFVCBGSUxFIENPTExJU0lPTiAqLwotLyog U29tZSBvZiB0aGUgZm9sbG93aW5nIG1heSBiZSBwb3NzaWJsZSBmb3Igc29tZSBDLUtlcm1pdCBp bXBsZW1lbnRhdGlvbnMgKi8KLS8qIGJ1dCBub3Qgb3RoZXJzLiAgVGhvc2UgdGhhdCBhcmUgbm90 IHBvc3NpYmxlIGZvciB5b3VyIGltcGxlbWVudGF0aW9uICovCi0vKiBzaG91bGQgYmUgaWZkZWYn ZCBvdXQuICovCi0KLXN0cnVjdCBrZXl0YWIgY29seHRhYltdID0geyAvKiBTRVQgRklMRSBDT0xM SVNJT04gb3B0aW9ucyAqLwotI2lmbmRlZiBNQUMKLSAgICB7ICJhcHBlbmQiLCAgICBYWUZYX0Es IDAgfSwgICAgICAgICAvKiBhcHBlbmQgdG8gb2xkIGZpbGUgKi8KLSNlbmRpZiAvKiBNQUMgKi8K LSNpZmRlZiBDT01NRU5UCi0gICAgeyAiYXNrIiwgICAgICAgWFlGWF9RLCAwIH0sICAgICAgICAg LyogYXNrIHdoYXQgdG8gZG8gKG5vdCBpbXBsZW1lbnRlZCkgKi8KLSNlbmRpZgotICAgIHsgImJh Y2t1cCIsICAgIFhZRlhfQiwgMCB9LCAgICAgICAgIC8qIHJlbmFtZSBvbGQgZmlsZSAqLwotI2lm bmRlZiBNQUMKLSAgICAvKiBUaGlzIGNyYXNoZXMgTWFjIEtlcm1pdC4gKi8KLSAgICB7ICJkaXNj YXJkIiwgICBYWUZYX0QsIENNX0lOViB9LAkvKiBkb24ndCBhY2NlcHQgbmV3IGZpbGUgKi8KLSAg ICB7ICJuby1zdXBlcnNlZGUiLCBYWUZYX0QsIENNX0lOViB9LCAvKiBkaXR0byAoTVNLIGNvbXBh dGliaWxpdHkpICovCi0jZW5kaWYgLyogTUFDICovCi0gICAgeyAib3ZlcndyaXRlIiwgWFlGWF9Y LCAwIH0sICAgICAgICAgLyogb3ZlcndyaXRlIHRoZSBvbGQgZmlsZSAqLwotICAgIHsgInJlamVj dCIsICAgIFhZRlhfRCwgMCB9LAkJLyogKGJldHRlciB3b3JkIHRoYW4gZGlzY2FyZCkgKi8KLSAg ICB7ICJyZW5hbWUiLCAgICBYWUZYX1IsIDAgfSwgICAgICAgICAvKiByZW5hbWUgdGhlIGluY29t aW5nIGZpbGUgKi8KLSNpZm5kZWYgTUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBU aGlzIGNyYXNoZXMgTWFjIEtlcm1pdC4gKi8KLSAgICB7ICJ1cGRhdGUiLCAgICBYWUZYX1UsIDAg fSwgICAgICAgICAvKiByZXBsYWNlIGlmIG5ld2VyICovCi0jZW5kaWYgLyogTUFDICovCi0gICAg eyAiIiwgMCwgMCB9Ci19OwotaW50IG5jb2x4ID0gKHNpemVvZihjb2x4dGFiKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiByZmlsdGFiW10gPSB7 ICAgICAgLyogZm9yIFJFTU9URSBTRVQgRklMRSAqLwotI2lmbmRlZiBOT0NTRVRTCi0gICAgeyAi Y2hhcmFjdGVyLXNldCIsIFhZRklMQywgMCB9LAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICB7 ICJjb2xsaXNpb24iLCAgICAgWFlGSUxYLCAwIH0sCi0gICAgeyAiaW5jb21wbGV0ZSIsICAgIFhZ RklMSSwgMCB9LAotICAgIHsgIm5hbWVzIiwgICAgICAgICBYWUZJTE4sIDAgfSwKLSAgICB7ICJy ZWNvcmQtbGVuZ3RoIiwgWFlGSUxSLCAwIH0sCi0gICAgeyAidHlwZSIsICAgICAgICAgIFhZRklM VCwgMCB9Ci19OwotaW50IG5yZmlscCA9IChzaXplb2YocmZpbHRhYikgLyBzaXplb2Yoc3RydWN0 IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIGVvbHRhYltdID0geyAgICAgICAgICAgICAgLyog RmlsZSBlb2YgZGVsaW1pdGVycyAqLwotICAgIHsgImNyIiwgICAgICAgIFhZRkFfQywgMCB9LAot ICAgIHsgImNybGYiLCAgICAgIFhZRkFfMiwgMCB9LAotICAgIHsgImxmIiwgICAgICAgIFhZRkFf TCwgMCB9Ci19Owotc3RhdGljIGludCBuZW9sdGFiID0gKHNpemVvZihlb2x0YWIpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiBmbnRhYltdID0geyAgICAgICAgICAg ICAgIC8qIEZpbGUgbmFtaW5nICovCi0gICAgeyAiY29udmVydGVkIiwgWFlGTl9DLCAwICAgICAg fSwKLSAgICB7ICJsaXRlcmFsIiwgICBYWUZOX0wsIDAgICAgICB9LAotICAgIHsgInN0YW5kYXJk IiwgIFhZRk5fQywgQ01fSU5WIH0KLX07Ci1pbnQgbmZudGFiID0gKHNpemVvZihmbnRhYikgLyBz aXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0jaWZuZGVmIE5PTE9DQUwKLS8qIFRlcm1pbmFsIHBh cmFtZXRlcnMgdGFibGUgKi8KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRybXRhYltdID0gewotI2lm ZGVmIE9TMgotICAgIHsgImFuc3dlcmJhY2siLCAgICBYWVRBTlMsICAgIDAgfSwKLSNlbmRpZiAv KiBPUzIgKi8KLSNpZmRlZiBDS19BUEMKLSAgICB7ICJhcGMiLCAgICAgICAgICAgWFlUQVBDLCAg ICAwIH0sCi0jZW5kaWYgLyogQ0tfQVBDICovCi0jaWZkZWYgT1MyCi0gICAgeyAiYXJyb3cta2V5 cyIsICAgIFhZVEFSUiwgICAgMCB9LAotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIE5UCi0gICAg eyAiYXQiLCAgICAgICAgICAgIFhZVEFUVFIsICAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgImF0 dCIsICAgICAgICAgICBYWVRBVFRSLCAgIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJhdHRyIiwg ICAgICAgICAgWFlUQVRUUiwgICBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiYXR0ci1idWciLCAg ICAgIFhZVEFUVEJVRywgQ01fSU5WIH0sCi0jZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBPUzIKLSAg ICB7ICJhdHRyaWJ1dGUiLCAgICAgWFlUQVRUUiwgICAwIH0sCi0jZW5kaWYgLyogT1MyICovCi0j aWZkZWYgQ0tfQVBDCi0jaWZkZWYgQ0tfQVVUT0RMCi0gICB7ICJhdXRvZG93bmxvYWQiLCAgIFhZ VEFVVE9ETCwgMCwgfSwKLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSNlbmRpZiAvKiBDS19BUEMg Ki8KLSNpZmRlZiBPUzIKLSAgICB7ICJhdXRvcGFnZSIsICAgICAgWFlUQVBBR0UsICAwIH0sCi0g ICAgeyAiYXV0b3Njcm9sbCIsICAgIFhZVEFTQ1JMLCAgMCB9LAotICAgIHsgImJlbGwiLCAgICAg ICAgICBYWVRCRUwsICAgIENNX0lOViB9LAotI2VuZGlmIC8qIE9TMiAqLwotICAgIHsgImJ5dGVz aXplIiwgICAgICBYWVRCWVQsICAgIDAgfSwKLSNpZm5kZWYgTk9DU0VUUwotICAgIHsgImNoYXJh Y3Rlci1zZXQiLCBYWVRDUywgICAgIDAgfSwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jaWZkZWYg T1MyCi0gICAgeyAiY29kZS1wYWdlIiwgICAgIFhZVENQRywgICAgMCB9LAotICAgIHsgImNvbG9y IiwgICAgICAgICBYWVRDT0wsICAgIDAgfSwKLSAgICB7ICJjb250cm9scyIsICAgICAgWFlUQ1RS TCwgICAwIH0sCi0jZW5kaWYgLyogT1MyICovCi0gICAgeyAiY3ItZGlzcGxheSIsICAgIFhZVENS RCwgICAgMCB9LAotI2lmZGVmIE9TMgotICAgIHsgImN1cnNvciIsICAgICAgICBYWVRDVVIsICAg IDAgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB7ICJkZWJ1ZyIsICAgICAgICAgWFlUREVCLCAg ICAwIH0sCi0jaWZkZWYgT1MyCi0gICAgeyAiZGctdW5peC1tb2RlIiwgIFhZVFVOWCwgICAgMCB9 LAotI2VuZGlmIC8qIE9TMiAqLwotICAgIHsgImVjaG8iLCAgICAgICAgICBYWVRFQywgICAgIDAg fSwKLSAgICB7ICJlc2NhcGUtY2hhcmFjdGVyIiwgWFlURVNDLCAwIH0sCi0jaWZkZWYgT1MyCi0j aWZkZWYgUENGT05UUwotICAgIHsgImZvbnQiLCAgICAgICAgICBYWVRGT04sICAgIDAgfSwKLSNl bHNlCi0jaWZkZWYgS1VJCi0gICAgeyAiZm9udCIsICAgICAgICAgIFhZVEZPTiwgICAgMCB9LAot I2VuZGlmIC8qIEtVSSAqLwotI2VuZGlmIC8qIFBDRk9OVFMgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LSAgICB7ICJoZWlnaHQiLCAgICAgICAgWFlUSElHLCAgICAwIH0sCi0jaWZkZWYgQ0tUSURMRQot ICAgIHsgImlkbGUtYWN0aW9uIiwgICBYWVRJQUNULCAgIDAgfSwKLSAgICB7ICJpZGxlLWxpbWl0 IiwgICAgWFlUSVRNTywgICBDTV9JTlYgfSwKLSAgICB7ICJpZGxlLXNlbmQiLCAgICAgWFlUSURM RSwgICBDTV9JTlYgfSwKLSAgICB7ICJpZGxlLXRpbWVvdXQiLCAgWFlUSVRNTywgICAwIH0sCi0j ZW5kaWYgLyogQ0tUSURMRSAqLwotI2lmZGVmIE9TMgotI2lmbmRlZiBOT0NTRVRTCi0gICAgeyAi a2JkLWZvbGxvd3MtZ2wvZ3IiLCBYWVRLQkRHTCwgMCB9LAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8K LSAgICB7ICJrZXkiLCAgICAgICAgICAgWFlUS0VZLCAgICAwIH0sCi0gICAgeyAia2V5Ym9hcmQt bW9kZSIsIFhZVEtCTU9ELCAgMCB9LAotICAgIHsgImtleXBhZC1tb2RlIiwgICBYWVRLUEQsICAg IDAgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB7ICJsZi1kaXNwbGF5IiwgICAgWFlUTEZELCAg ICAwIH0sCi0jaWZuZGVmIE5PQ1NFVFMKLSNpZmRlZiBPUzIKLSNpZm5kZWYgS1VJCi0gICAgeyAi bGluZS1zcGFjaW5nIiwgIFhZVExTUCwgICAgQ01fSU5WIH0sCi0gICAgeyAibG9jYWwtY2hhcmFj dGVyLXNldCIsIFhZVExDUywgIDAgfSwKLSNlbHNlCi0gICAgeyAibGluZS1zcGFjaW5nIiwgIFhZ VExTUCwgICAgMCB9LAotICAgIHsgImxvY2FsLWNoYXJhY3Rlci1zZXQiLCBYWVRMQ1MsICBDTV9J TlYgfSwKLSNlbmRpZiAvKiBLVUkgKi8KLSNlbHNlCi0gICAgeyAibG9jYWwtY2hhcmFjdGVyLXNl dCIsIFhZVExDUywgIENNX0lOViB9LAotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PQ1NF VFMgKi8KLSAgICB7ICJsb2NraW5nLXNoaWZ0IiwgWFlUU08sICAgICAwIH0sCi0jaWZkZWYgT1My Ci0gICAgeyAibWFyZ2luLWJlbGwiLCAgIFhZVE1CRUwsICAgMCB9LAotI2VuZGlmIC8qIE9TMiAq LwotI2lmZGVmIE9TMk1PVVNFCi0gICAgeyAibW91c2UiLCAgICAgICAgIFhZVE1PVSwgICAgQ01f SU5WIH0sCi0jZW5kaWYgLyogT1MyTU9VU0UgKi8KLSAgICB7ICJuZXdsaW5lLW1vZGUiLCAgWFlU TkwsICAgICAwIH0sCi0jaWZkZWYgT1MyCi0gICAgeyAib3V0cHV0LXBhY2luZyIsIFhZVFBBQywg ICAgMCB9LAotI2lmZGVmIFBDVEVSTQotICAgIHsgInBjdGVybSIsICAgICAgICBYWVRQQ1RFUk0s IDAgfSwKLSNlbmRpZiAvKiBQQ1RFUk0gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBPUzJP UlVOSVgKLSAgICB7ICJwcmludCIsICAgICAgICAgWFlUUFJOLCAgICAwIH0sCi0jZW5kaWYgLyog T1MyT1JVTklYICovCi0jaWZuZGVmIE5PQ1NFVFMKLSNpZmRlZiBPUzIKLSAgICB7ICJyZW1vdGUt Y2hhcmFjdGVyLXNldCIsIFhZVFJDUywgIDAgfSwKLSNlbHNlCi0gICAgeyAicmVtb3RlLWNoYXJh Y3Rlci1zZXQiLCBYWVRSQ1MsICBDTV9JTlYgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAv KiBOT0NTRVRTICovCi0jaWZkZWYgT1MyCi0gICAgeyAicm9sbC1tb2RlIiwgICAgICAgWFlUUk9M LCAwIH0sCi0gICAgeyAicyIsICAgICAgICAgICAgICAgWFlUVVBELCBDTV9BQlJ8Q01fSU5WIH0s Ci0gICAgeyAic2MiLCAgICAgICAgICAgICAgWFlUVVBELCBDTV9BQlJ8Q01fSU5WIH0sCi0gICAg eyAic2NyIiwgICAgICAgICAgICAgWFlUVVBELCBDTV9BQlJ8Q01fSU5WIH0sCi0gICAgeyAic2Ny ZWUiLCAgICAgICAgICAgWFlUVVBELCBDTV9BQlJ8Q01fSU5WIH0sCi0gICAgeyAic2NyZWVuIiwg ICAgICAgICAgWFlUVVBELCBDTV9BQlJ8Q01fSU5WIH0sCi0gICAgeyAic2NyZWVuLSIsICAgICAg ICAgWFlUVVBELCBDTV9BQlJ8Q01fSU5WIH0sCi0gICAgeyAic2NyZWVuLW1vZGUiLCAgICAgWFlU U0NOTSwgICAwIH0sCi0gICAgeyAic2NyZWVuLW9wdGltaXplIiwgWFlUT1BUSSwgICAwIH0sCi0g ICAgeyAic2NyZWVuLXVwZGF0ZSIsICAgWFlUVVBELCAgICAwIH0sCi0gICAgeyAic2Nyb2xsYmFj ayIsICAgICAgWFlTQ1JTLCAgICAwIH0sCi0gICAgeyAic2VuZC1kYXRhIiwgICAgICAgICBYWVRT RU5ELCAwIH0sCi0gICAgeyAic2VuZC1lbmQtb2YtYmxvY2siLCBYWVRTRU9CLCAwIH0sCi0gICAg eyAic2dyLWNvbG9ycyIsICAgICAgICAgICAgWFlUU0dSQywgIDAgfSwKLSAgICB7ICJzbmktY2gu Y29kZSIsICAgICAgICAgICBYWVRTTklDQywgMCB9LAotICAgIHsgInNuaS1maXJtd2FyZS12ZXJz aW9ucyIsIFhZVFNOSUZWLCAwIH0sCi0gICAgeyAic25pLWxhbmd1YWdlIiwgICAgICAgICAgWFlU VlRMTkcsIDAgfSwKLSAgICB7ICJzbmktcGFnZW1vZGUiLCAgICAgICAgICBYWVRTTklQTSwgQ01f SU5WIH0sCi0gICAgeyAic25pLXNjcm9sbG1vZGUiLCAgICAgICAgICAgICAgWFlUU05JU00sIENN X0lOViB9LAotICAgIHsgInNwYWNpbmctYXR0cmlidXRlLWNoYXJhY3RlciIsIFhZVFNBQywgICBD TV9JTlYgfSwKLSAgICB7ICJzdGF0dXNsaW5lIiwgICAgICAgICAgICAgICAgICBYWVRTVEFULCAg MCB9LAotICAgIHsgInRyYSIsICAgICAgICAgICAgICAgICAgICAgICAgIFhZVENUUywgICBDTV9J TlZ8Q01fQUJSIH0sCi0gICAgeyAidHJhbnNtaXQtdGltZW91dCIsICAgICAgICAgICAgWFlUQ1RT LCAgIDAgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE9TMk9SVU5JWAotICAgIHsgInRy YW5zcGFyZW50LXByaW50IiwgWFlUUFJOLCAgIENNX0lOViB9LAotI2VuZGlmIC8qIE9TMk9SVU5J WCAqLwotCi0jaWZkZWYgQ0tfVFJJR0dFUgotICAgIHsgInRyaWdnZXIiLCAgICAgICAgICAgWFlU UklHR0VSLDAgfSwKLSNlbmRpZiAvKiBDS19UUklHR0VSICovCi0jaWZkZWYgT1MyCi0gICAgeyAi dHlwZSIsICAgICAgICAgICAgICBYWVRUWVAsICAgMCB9LAotI2Vsc2UKLSAgICB7ICJ0eXBlIiwg ICAgICAgICAgICAgIFhZVFRZUCwgICBDTV9JTlYgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lm bmRlZiBOT0NTRVRTCi0jaWZkZWYgVU5JQ09ERQotI2lmZGVmIENLT1VOSQotICAgIHsgInVuaWNv ZGUiLCAgICAgICAgICAgWFlUVU5JLCAgIENNX0lOViB9LAotI2VuZGlmIC8qIENLT1VOSSAqLwot I2VuZGlmIC8qIFVOSUNPREUgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jaWZkZWYgT1MyCi0g ICAgeyAidW5peC1tb2RlIiwgICAgICAgICBYWVRVTlgsICAgQ01fSU5WIH0sCi0gICAgeyAidXJs LWhpZ2hsaWdodCIsICAgICBYWVRVUkxISSwgMCB9LAotI2lmZGVmIE5UCi0gICAgeyAidmlkZW8t Y2hhbmdlIiwgICAgICBYWVRWQ0gsICAgMCB9LAotI2VuZGlmIC8qIE5UICovCi0gICAgeyAidnQt bGFuZ3VhZ2UiLCAgICAgICBYWVRWVExORywgMCB9LAotICAgIHsgInZ0LW5yYy1tb2RlIiwgICAg ICAgWFlUVlROUkMsIDAgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB7ICJ3aWR0aCIsICAgICAg ICAgICAgIFhZVFdJRCwgICAwIH0sCi0jaWZkZWYgT1MyCi0gICAgeyAid3JhcCIsICAgICAgICAg ICAgICBYWVRXUlAsICAgMCB9LAotI2VuZGlmIC8qIE9TMiAqLwotICAgIHsgIiIsIDAsIDAgfQot fTsKLWludCBudHJtID0gKHNpemVvZih0cm10YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAt IDE7Ci0KLSNpZmRlZiBPUzIKLXN0cnVjdCBrZXl0YWIgdGVybWN0cmxbXSA9IHsgICAgLyogU0VU IFRFUk0gQ09OVFJPTFMgKi8KLSAgICB7ICI3IiwgICAgICA3LCAwIH0sCi0gICAgeyAiOCIsICAg ICAgOCwgMCB9Ci19OwotaW50IG50ZXJtY3RybCA9IChzaXplb2YodGVybWN0cmwpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiBjdXJvbnRhYltdID0geyAgICAvKiBT RVQgVEVSTSBDVVJTT1IgKi8KLSNpZmRlZiBLVUkKLSAgICB7ICJub2JsaW5rIiwgMiwgMCB9LAot I2Vsc2UKLSAgICB7ICJub2JsaW5rIiwgMiwgQ01fSU5WIH0sCi0jZW5kaWYgLyogS1VJICovCi0g ICAgeyAib2ZmIiwgICAgIDAsIDAgfSwKLSAgICB7ICJvbiIsICAgICAgMSwgMCB9Ci19OwotaW50 IG5jdXJvbiA9IChzaXplb2YoY3Vyb250YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQot c3RydWN0IGtleXRhYiByb2xsdGFiW10gPSB7ICAgLyogU2V0IFRFUk0gUm9sbCBPcHRpb25zICov Ci0gICAgeyAiaW5zZXJ0IiwgICAgVFRSX0lOU0VSVCwgMCAgICAgIH0sCi0gICAgeyAia2V5c3Ry b2tlcyIsVFRSX0tFWVMsICAgMCAgICAgIH0sCi0gICAgeyAib2ZmIiwgICAgICAgVFRSX09WRVIs ICAgQ01fSU5WIH0sCi0gICAgeyAib24iLCAgICAgICAgVFRSX0lOU0VSVCwgQ01fSU5WIH0sCi0g ICAgeyAib3ZlcndyaXRlIiwgVFRSX09WRVIsICAgMCAgICAgIH0KLX07Ci1pbnQgbnJvbGwgPSAo c2l6ZW9mKHJvbGx0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRh YiByb2xsa2V5dGFiW10gPSB7CQkvKiBTZXQgVEVSTSBST0xMIEtFWVNUUk9LRVMgKi8KLSAgICB7 ICJpZ25vcmUiLCAgICAgICAgICAgIFRUUktfSUdOLCAwIH0sCi0gICAgeyAicmVzdG9yZS1hbmQt c2VuZCIsICBUVFJLX1JTVCwgMCB9LAotICAgIHsgInNlbmQiLCAgICAgICAgICAgICAgVFRSS19T TkQsIDAgfQotfTsKLWludCBucm9sbGtleSA9IChzaXplb2Yocm9sbGtleXRhYikgLyBzaXplb2Yo c3RydWN0IGtleXRhYikpOwotCi0jZGVmaW5lIFRUX0dSX0FMTCA0Ci0jZGVmaW5lIFRUX0dSX0cw ICAwCi0jZGVmaW5lIFRUX0dSX0cxICAxCi0jZGVmaW5lIFRUX0dSX0cyICAyCi0jZGVmaW5lIFRU X0dSX0czICAzCi0jZGVmaW5lIFRUX0dSX0tCRCA0Ci1zdHJ1Y3Qga2V5dGFiIGdyYXBoc2V0dGFi W10gPSB7ICAvKiBERUMgVlQgR3JhcGhpYyBTZXRzICovCi0gICAgeyAiYWxsIiwgICAgICBUVF9H Ul9BTEwsIDAgfSwKLSAgICB7ICJnMCIsICAgICAgIFRUX0dSX0cwLCAgMCB9LAotICAgIHsgImcx IiwgICAgICAgVFRfR1JfRzEsICAwIH0sCi0gICAgeyAiZzIiLCAgICAgICBUVF9HUl9HMiwgIDAg fSwKLSAgICB7ICJnMyIsICAgICAgIFRUX0dSX0czLCAgMCB9LAotICAgIHsgImtleWJvYXJkIiwg VFRfR1JfS0JELCAwIH0KLX07Ci1pbnQgbmdyYXBoc2V0ID0gKHNpemVvZihncmFwaHNldHRhYikg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotI2VuZGlmIC8qIE9TMiAqLwotCi1zdHJ1Y3Qga2V5 dGFiIGFkbHRhYltdID0geyAgICAgICAgICAgICAgLyogQXV0b2Rvd25sb2FkIE9wdGlvbnMgKi8K LSAgICB7ICJhc2siLCAgICAgVEFEX0FTSywgMCB9LAotICAgIHsgImVycm9yIiwgICBUQURfRVJS LCAwIH0sCi0jaWZkZWYgT1MyCi0gICAgeyAia2VybWl0IiwgIFRBRF9LLCAgIDAgfSwKLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICB7ICJvZmYiLCAgICAgVEFEX09GRiwgMCB9LAotICAgIHsgIm9uIiwg ICAgICBUQURfT04sICAwIH0sCi0jaWZkZWYgT1MyCi0gICAgeyAiem1vZGVtIiwgIFRBRF9aLCAg IDAgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1pbnQgbmFkbHRh YiA9IChzaXplb2YoYWRsdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdHJ1 Y3Qga2V5dGFiIGFkbGVycnRhYltdID0geyAgICAgICAgICAgLyogQXV0b2Rvd25sb2FkIEVycm9y IE9wdGlvbnMgKi8KLSAgICB7ICJjb250aW51ZSIsIDAsIDAgfSwKLSAgICB7ICJnbyIsICAgICAg IDAsIENNX0lOViB9LAotICAgIHsgInN0b3AiLCAgICAgMSwgMCB9Ci19OwotaW50IG5hZGxlcnJ0 YWIgPSAoc2l6ZW9mKGFkbGVycnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0jaWZk ZWYgT1MyCi1zdHJ1Y3Qga2V5dGFiIGFkbHh0YWJbXSA9IHsgICAgICAgICAgICAgLyogQXV0b2Rv d25sb2FkIE9wdGlvbnMgKi8KLSAgICB7ICJjMC1jb25mbGljdHMiLCAgICAgVEFEX1hfQzAsICAg ICAwIH0sCi0gICAgeyAiZGV0ZWN0aW9uLW1ldGhvZCIsIFRBRF9YX0RFVEVDVCwgMCB9LAotICAg IHsgInN0cmluZyIsICAgICAgICAgICBUQURfWF9TVFIsICAgIDAgfQotfTsKLWludCBuYWRseHRh YiA9IChzaXplb2YoYWRseHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qg a2V5dGFiIGFkbGR0YWJbXSA9IHsgICAgICAgICAgICAgLyogQXV0by1kbCBEZXRlY3Rpb24gTWV0 aG9kcyAqLwotICAgIHsgInBhY2tldCIsICAgICAgICAgICBBRExfUEFDSywgICAgIDAgfSwKLSAg ICB7ICJzdHJpbmciLCAgICAgICAgICAgQURMX1NUUiwgICAgICAwIH0KLX07Ci1pbnQgbmFkbGR0 YWIgPSAoc2l6ZW9mKGFkbGR0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0 IGtleXRhYiBhZGxjMHRhYltdID0geyAgICAgICAgICAgIC8qIEF1dG8tZGwgRGV0ZWN0aW9uIE1l dGhvZHMgKi8KLSAgICB7ICJpZ25vcmVkLWJ5LWVtdWxhdG9yIiwgICAgMCwgICAgICAwIH0sCi0g ICAgeyAicHJvY2Vzc2VkLWJ5LWVtdWxhdG9yIiwgIDEsICAgICAgMCB9Ci19OwotaW50IG5hZGxj MHRhYiA9IChzaXplb2YoYWRsYzB0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotI2lm bmRlZiBOT0NTRVRTCi1zdHJ1Y3Qga2V5dGFiIHZ0bGFuZ3RhYltdID0gewotICAgIHsgImJlbGdp YW4iLCAgICAgICAgVlRMX0JFTEdJQU4gLCAwIH0sCi0gICAgeyAiYnJpdGlzaCIsICAgICAgICBW VExfQlJJVElTSCAsIDAgfSwKLSAgICB7ICJjYW5hZGlhbiIsICAgICAgIFZUTF9DQU5BRElBTiwg MCB9LAotICAgIHsgImN6ZWNoIiwgICAgICAgICAgVlRMX0NaRUNIICAgLCAwIH0sCi0gICAgeyAi ZGFuaXNoIiwgICAgICAgICBWVExfREFOSVNIICAsIDAgfSwKLSAgICB7ICJkdXRjaCIsICAgICAg ICAgIFZUTF9EVVRDSCAgICwgMCB9LAotICAgIHsgImZpbm5pc2giLCAgICAgICAgVlRMX0ZJTk5J U0ggLCAwIH0sCi0gICAgeyAiZnJlbmNoIiwgICAgICAgICBWVExfRlJFTkNIICAsIDAgfSwKLSAg ICB7ICJmcmVuY2gtY2FuYWRpYW4iLFZUTF9GUl9DQU4gICwgMCB9LAotICAgIHsgImdlcm1hbiIs ICAgICAgICAgVlRMX0dFUk1BTiAgLCAwIH0sCi0gICAgeyAiZ3JlZWsiLCAgICAgICAgICBWVExf R1JFRUsgICAsIDAgfSwKLSAgICB7ICJoZWJyZXciLCAgICAgICAgIFZUTF9IRUJSRVcgICwgMCB9 LAotICAgIHsgImh1bmdhcmlhbiIsICAgICAgVlRMX0hVTkdBUklBLCAwIH0sCi0gICAgeyAiaXRh bGlhbiIsICAgICAgICBWVExfSVRBTElBTiAsIDAgfSwKLSAgICB7ICJsYXRpbi1hbWVyaWNhbiIs IFZUTF9MQVRJTl9BTSwgMCB9LAotICAgIHsgIm5vcnRoLWFtZXJpY2FuIiwgVlRMX05PUlRIX0FN LCAwIH0sCi0gICAgeyAibm9yd2VnaWFuIiwgICAgICBWVExfTk9SV0VHSUEsIDAgfSwKLSAgICB7 ICJwb2xpc2giLCAgICAgICAgIFZUTF9QT0xJU0ggICwgMCB9LAotICAgIHsgInBvcnR1Z2VzZSIs ICAgICAgVlRMX1BPUlRVR0VTLCAwIH0sCi0gICAgeyAicm9tYW5pYW4iLCAgICAgICBWVExfUk9N QU5JQU4sIDAgfSwKLSAgICB7ICJydXNzaWFuIiwgICAgICAgIFZUTF9SVVNTSUFOICwgMCB9LAot ICAgIHsgInNjcyIsICAgICAgICAgICAgVlRMX1NDUyAgICAgLCBDTV9JTlYgfSwKLSAgICB7ICJz bG92YWsiLCAgICAgICAgIFZUTF9TTE9WQUsgICwgMCB9LAotICAgIHsgInNwYW5pc2giLCAgICAg ICAgVlRMX1NQQU5JU0ggLCAwIH0sCi0gICAgeyAic3dlZGlzaCIsICAgICAgICBWVExfU1dFRElT SCAsIDAgfSwKLSAgICB7ICJzd2lzcy1mcmVuY2giLCAgIFZUTF9TV19GUiAgICwgMCB9LAotICAg IHsgInN3aXNzLWdlcm1hbiIsICAgVlRMX1NXX0dSICAgLCAwIH0sCi0gICAgeyAidHVya2lzaC1m IiwgICAgICBWVExfVFVSS19GICAsIENNX0lOViB9LAotICAgIHsgInR1cmtpc2gtcSIsICAgICAg VlRMX1RVUktfUSAgLCBDTV9JTlYgfQotfTsKLWludCBudnRsYW5ndGFiID0gKHNpemVvZih2dGxh bmd0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0j ZW5kaWYgLyogT1MyICovCi0KLXN0cnVjdCBrZXl0YWIgY3JkdGFiW10gPSB7ICAgICAgICAgICAg ICAvKiBDYXJyaWFnZS1yZXR1cm4gZGlzcGxheSAqLwotICAgIHsgImNybGYiLCAgICAgICAgMSwg MCB9LAotICAgIHsgIm5vcm1hbCIsICAgICAgMCwgMCB9Ci19OwotZXh0ZXJuIGludCB0dF9jcmQ7 ICAgICAgICAgICAgICAgICAgICAgIC8qIENhcnJpYWdlLXJldHVybiBkaXNwbGF5IHZhcmlhYmxl ICovCi1leHRlcm4gaW50IHR0X2xmZDsJCQkvKiBMaW5lZmVlZCBkaXNwbGF5IHZhcmlhYmxlICov Ci0KLSNpZmRlZiBDS19BUEMKLWV4dGVybiBpbnQgYXBjc3RhdHVzLCBhcGNhY3RpdmU7Ci1zdGF0 aWMgc3RydWN0IGtleXRhYiBhcGN0YWJbXSA9IHsgICAgICAgLyogVGVybWluYWwgQVBDIHBhcmFt ZXRlcnMgKi8KLSAgICB7ICAibm8taW5wdXQiLCBBUENfT058QVBDX05PSU5QLDAgfSwKLSAgICB7 ICJvZmYiLCAgICAgICBBUENfT0ZGLCAgMCB9LAotICAgIHsgIm9uIiwgICAgICAgIEFQQ19PTiwg ICAwIH0sCi0gICAgeyAidW5jaGVja2VkIiwgQVBDX09OfEFQQ19VTkNILCAwIH0sCi0gICAgeyAi dW5jaGVja2VkLW5vLWlucHV0IiwgQVBDX09OfEFQQ19OT0lOUHxBUENfVU5DSCwgMCB9Ci19Owot aW50IG5hcGN0YWIgPSAoc2l6ZW9mKGFwY3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwot I2VuZGlmIC8qIENLX0FQQyAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotZXh0ZXJuIGludCBh dXRvZGwsIGFkbF9lcnIsIGFkbF9hc2s7Ci0KLXN0cnVjdCBrZXl0YWIgYmVsdGFiW10gPSB7ICAg ICAgICAgICAgICAvKiBUZXJtaW5hbCBiZWxsIG1vZGUgKi8KLSNpZmRlZiBPUzIKLSAgICB7ICJh dWRpYmxlIiwgWFlCX0FVRCwgIDAgfSwKLSAgICB7ICJub25lIiwgICAgWFlCX05PTkUsIDAgfSwK LSNlbHNlCi0gICAgeyAiYXVkaWJsZSIsIFhZQl9BVUQsICBDTV9JTlYgfSwKLSAgICB7ICJub25l IiwgICAgWFlCX05PTkUsIENNX0lOViB9LAotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIE9TMgot ICAgIHsgIm9mZiIsICAgICBYWUJfTk9ORSwgQ01fSU5WIH0sCi0gICAgeyAib24iLCAgICAgIFhZ Ql9BVUQsICBDTV9JTlYgfSwKLSNlbHNlCi0gICAgeyAib2ZmIiwgICAgIFhZQl9OT05FLCAwIH0s Ci0gICAgeyAib24iLCAgICAgIFhZQl9BVUQsICAwIH0sCi0jZW5kaWYgLyogT1MyICovCi0jaWZk ZWYgT1MyCi0gICAgeyAidmlzaWJsZSIsIFhZQl9WSVMsICAwIH0sCi0jZW5kaWYgLyogT1MyICov Ci0gICAgeyAiIiwgMCwgMCB9Ci19OwotaW50IG5iZWx0YWIgPSBzaXplb2YoYmVsdGFiKS9zaXpl b2Yoc3RydWN0IGtleXRhYikgLSAxOwotCi1pbnQgdHRfdW5pY29kZSA9IDE7ICAgICAgICAgICAg ICAgICAgICAgLyogVXNlIFVuaWNvZGUgaWYgcG9zc2libGUgKi8KLSNpZmRlZiBDS1RJRExFCi1p bnQgdHRfaWRsZXNuZF90bW8gPSAwOyAgICAgICAgICAgICAgICAgLyogSWRsZSBTZW5kIFRpbWVv dXQsIGRpc2FibGVkICovCi1jaGFyICogdHRfaWRsZXNuZF9zdHIgPSBOVUxMOyAgICAgICAgICAg LyogSWRsZSBTZW5kIFN0cmluZywgbm9uZSAqLwotY2hhciAqIHR0X2lkbGVzdHIgPSBOVUxMOwot ZXh0ZXJuIGludCB0dF9pZGxlYWN0LCB0dF9pZGxlbGltaXQ7Ci0jZW5kaWYgLyogQ0tUSURMRSAq LwotCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PTE9DQUwKLS8qCi0gIE9TLzIgc2VyaWFsIGNvbW11 bmljYXRpb24gZGV2aWNlcy4KLSovCi1zdHJ1Y3Qga2V5dGFiIG9zMmRldnRhYltdID0gewotICAg IHsgIjEiLCAgICAxLCBDTV9JTlYgfSwgICAgICAgICAgICAgICAgICAgICAgLyogSW52aXNpYmxl IHN5bm9ueW1zLCBsaWtlICovCi0gICAgeyAiMiIsICAgIDIsIENNX0lOViB9LCAgICAgICAgICAg ICAgICAgICAgICAvKiAic2V0IHBvcnQgMSIgKi8KLSAgICB7ICIzIiwgICAgMywgQ01fSU5WIH0s Ci0gICAgeyAiNCIsICAgIDQsIENNX0lOViB9LAotICAgIHsgIjUiLCAgICA1LCBDTV9JTlYgfSwK LSAgICB7ICI2IiwgICAgNiwgQ01fSU5WIH0sCi0gICAgeyAiNyIsICAgIDcsIENNX0lOViB9LAot ICAgIHsgIjgiLCAgICA4LCBDTV9JTlYgfSwKLSAgICB7ICJjb20xIiwgMSwgMCB9LCAgICAgICAg ICAgICAgICAgICAvKiBSZWFsIGRldmljZSBuYW1lcyAqLwotICAgIHsgImNvbTIiLCAyLCAwIH0s Ci0gICAgeyAiY29tMyIsIDMsIDAgfSwKLSAgICB7ICJjb200IiwgNCwgMCB9LAotICAgIHsgImNv bTUiLCA1LCAwIH0sCi0gICAgeyAiY29tNiIsIDYsIDAgfSwKLSAgICB7ICJjb203IiwgNywgMCB9 LAotICAgIHsgImNvbTgiLCA4LCAwIH0sCi0jaWZkZWYgT1MyT05MWQotICAgIHsgInNsaXBjb20x IiwgMSwgMCB9LCAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHVzZSB3aXRoIFNMSVAgZHJp dmVyICovCi0gICAgeyAic2xpcGNvbTIiLCAyLCAwIH0sICAgICAgICAgICAgICAgICAgICAgICAv KiBzaGFyZWQgYWNjZXNzICovCi0gICAgeyAic2xpcGNvbTMiLCAzLCAwIH0sCi0gICAgeyAic2xp cGNvbTQiLCA0LCAwIH0sCi0gICAgeyAic2xpcGNvbTUiLCA1LCAwIH0sCi0gICAgeyAic2xpcGNv bTYiLCA2LCAwIH0sCi0gICAgeyAic2xpcGNvbTciLCA3LCAwIH0sCi0gICAgeyAic2xpcGNvbTgi LCA4LCAwIH0sCi0gICAgeyAicHBwY29tMSIsIDEsIDAgfSwgICAgICAgICAgICAgICAgICAgICAg ICAvKiBGb3IgdXNlIHdpdGggUFBQIGRyaXZlciAqLwotICAgIHsgInBwcGNvbTIiLCAyLCAwIH0s ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hhcmVkIGFjY2VzcyAqLwotICAgIHsgInBwcGNv bTMiLCAzLCAwIH0sCi0gICAgeyAicHBwY29tNCIsIDQsIDAgfSwKLSAgICB7ICJwcHBjb201Iiwg NSwgMCB9LAotICAgIHsgInBwcGNvbTYiLCA2LCAwIH0sCi0gICAgeyAicHBwY29tNyIsIDcsIDAg fSwKLSAgICB7ICJwcHBjb204IiwgOCwgMCB9Ci0jZW5kaWYgLyogT1MyT05MWSAqLwotfTsKLWlu dCBub3MyZGV2ID0gKHNpemVvZihvczJkZXZ0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAt IDE7Ci0KLSNpZmRlZiBPUzJPTkxZCi1zdHJ1Y3Qga2V5dGFiIG9zMnBwcHRhYltdID0gewotICAg IHsgIjAiLCAgICAwLCBDTV9JTlYgfSwKLSAgICB7ICIxIiwgICAgMSwgQ01fSU5WIH0sICAgICAg ICAgICAgICAgICAgICAgIC8qIEludmlzaWJsZSBzeW5vbnltcywgbGlrZSAqLwotICAgIHsgIjIi LCAgICAyLCBDTV9JTlYgfSwgICAgICAgICAgICAgICAgICAgICAgLyogInNldCBwb3J0IDEiICov Ci0gICAgeyAiMyIsICAgIDMsIENNX0lOViB9LAotICAgIHsgIjQiLCAgICA0LCBDTV9JTlYgfSwK LSAgICB7ICI1IiwgICAgNSwgQ01fSU5WIH0sCi0gICAgeyAiNiIsICAgIDYsIENNX0lOViB9LAot ICAgIHsgIjciLCAgICA3LCBDTV9JTlYgfSwKLSAgICB7ICI4IiwgICAgOCwgQ01fSU5WIH0sCi0g ICAgeyAiOSIsICAgIDksIENNX0lOViB9LAotICAgIHsgInBwcDAiLCAwLCAwIH0sCi0gICAgeyAi cHBwMSIsIDEsIDAgfSwgICAgICAgICAgICAgICAgICAgLyogRm9yIHVzZSB3aXRoIFBQUCBkcml2 ZXIgKi8KLSAgICB7ICJwcHAyIiwgMiwgMCB9LCAgICAgICAgICAgICAgICAgICAvKiBzaGFyZWQg YWNjZXNzICovCi0gICAgeyAicHBwMyIsIDMsIDAgfSwKLSAgICB7ICJwcHA0IiwgNCwgMCB9LAot ICAgIHsgInBwcDUiLCA1LCAwIH0sCi0gICAgeyAicHBwNiIsIDYsIDAgfSwKLSAgICB7ICJwcHA3 IiwgNywgMCB9LAotICAgIHsgInBwcDgiLCA4LCAwIH0sCi0gICAgeyAicHBwOSIsIDksIDAgfQot fTsKLWludCBub3MycHBwID0gKHNpemVvZihvczJwcHB0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpKTsKLSNlbmRpZiAvKiBPUzJPTkxZICovCi0KLS8qCi0gIFRlcm1pbmFsIHBhcmFtZXRlcnMg dGhhdCBjYW4gYmUgc2V0IGJ5IFNFVCBjb21tYW5kcy4KLSAgVXNlZCBieSB0aGUgY2s/Y29uLmMg dGVybWluYWwgZW11bGF0b3IgY29kZS4KLSAgRm9yIG5vdywgb25seSB1c2VkIGZvciAjaWZkZWYg T1MyLiAgU2hvdWxkIGFkZCB0aGVzZSBmb3IgTWFjaW50b3NoLgotKi8KLWludCB0dF9hcnJvdyA9 IFRUS19OT1JNOyAgICAgICAgICAgICAgICAvKiBBcnJvdyBrZXkgbW9kZTogbm9ybWFsIChjdXJz b3IpICovCi1pbnQgdHRfa2V5cGFkID0gVFRLX05PUk07ICAgICAgICAgICAgICAgLyogS2V5cGFk IG1vZGU6IG5vcm1hbCAobnVtZXJpYykgKi8KLWludCB0dF9zaGlmdF9rZXlwYWQgPSAwOyAgICAg ICAgICAgICAgICAvKiBLZXlwYWQgU2hpZnQgbW9kZTogT2ZmICovCi1pbnQgdHRfd3JhcCA9IDE7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYWwgd3JhcCwgMSA9IE9uICovCi1pbnQg dHRfdHlwZSA9IFRUX1ZUMjIwOyAgICAgICAgICAgICAgICAgLyogVGVybWluYWwgdHlwZSwgaW5p dGlhbGx5IFZUMjIwICovCi1pbnQgdHRfdHlwZV9tb2RlID0gVFRfVlQyMjA7ICAgICAgICAgICAg LyogVGVybWluYWwgdHlwZSBzZXQgYnkgaG9zdCBjb21tYW5kICovCi1pbnQgdHRfY3Vyc29yID0g MDsgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYWwgY3Vyc29yLCAwID0gVW5kZXJsaW5l ICovCi1pbnQgdHRfY3Vyc29yX3VzciA9IDA7ICAgICAgICAgICAgICAgICAgLyogVXNlcnMgVGVy bWluYWwgY3Vyc29yIHR5cGUgKi8KLWludCB0dF9jdXJzb3JlbmFfdXNyID0gMTsgICAgICAgICAg ICAgICAvKiBVc2VycyBUZXJtaW5hbCBjdXJzb3IgZW5hYmxlZCAqLwotaW50IHR0X2N1cnNvcl9i bGluayA9IDE7ICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIEN1cnNvciBCbGluayAqLwotaW50 IHR0X2Fuc3dlciA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIGFuc3dlcmJh Y2sgKGRpc2FibGVkKSAqLwotaW50IHR0X3NjcnNpemVbVk5VTV0gPSB7NTEyLDUxMiw1MTIsMX07 IC8qIFRlcm1pbmFsIHNjcm9sbGJhY2sgYnVmZmVyIHNpemUgKi8KLWludCB0dF9yb2xsW1ZOVU1d ID0gezEsMSwxLDF9OyAgICAgICAgICAvKiBUZXJtaW5hbCByb2xsIChvbikgKi8KLWludCB0dF9y a2V5c1tWTlVNXSA9IHsxLDEsMSwxfTsJCS8qIFRlcm1pbmFsIHJvbGwga2V5cyAoc2VuZCkgKi8K LWludCB0dF9wYWNpbmcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hbCBvdXRw dXQtcGFjaW5nIChub25lKSAqLwotaW50IHR0X2N0c3RtbyA9IDE1OyAgICAgICAgICAgICAgICAg ICAgIC8qIFRlcm1pbmFsIHRyYW5zbWl0LXRpbWVvdXQgKi8KLWludCB0dF9jb2RlcGFnZSA9IC0x OyAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hbCBjb2RlLXBhZ2UgKi8KLWludCB0dF91cGRh dGUgPSAxMDA7ICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hbCBzY3JlZW4tdXBkYXRlIGlu dGVydmFsICovCi1pbnQgdHRfdXBkbW9kZSA9IFRUVV9GQVNUOyAgICAgICAgICAgICAgLyogVGVy bWluYWwgc2NyZWVuLXVwZGF0ZSBtb2RlIEZBU1QgKi8KLWV4dGVybiBpbnQgdXBkbW9kZTsKLSNp Zm5kZWYgS1VJCi1pbnQgdHRfc3RhdHVzW1ZOVU1dID0gezEsMSwwLDB9OyAgICAgICAgLyogVGVy bWluYWwgc3RhdHVzIGxpbmUgZGlzcGxheWVkICovCi1pbnQgdHRfc3RhdHVzX3VzcltWTlVNXSA9 IHsxLDEsMCwwfTsKLSNlbHNlICAvKiBLVUkgKi8KLWV4dGVybiBDS0ZMT0FUIGZsb2F0dmFsOwot Q0tGTE9BVCB0dF9saW5lc3BhY2luZ1tWTlVNXSA9IHsxLjAsMS4wLDEuMCwxLjB9OwotI2lmZGVm IEs5NUcKLWludCB0dF9zdGF0dXNbVk5VTV0gPSB7MSwxLDAsMH07ICAgICAgICAvKiBUZXJtaW5h bCBzdGF0dXMgbGluZSBkaXNwbGF5ZWQgKi8KLWludCB0dF9zdGF0dXNfdXNyW1ZOVU1dID0gezEs MSwwLDB9OwotI2Vsc2UgLyogSzk1RyAqLwotaW50IHR0X3N0YXR1c1tWTlVNXSA9IHswLDAsMCww fTsgICAgICAgIC8qIFRlcm1pbmFsIHN0YXR1cyBsaW5lIGRpc3BsYXllZCAqLwotaW50IHR0X3N0 YXR1c191c3JbVk5VTV0gPSB7MCwwLDAsMH07Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8q IEtVSSAqLwotaW50IHR0X3NlbmRkYXRhID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIExldCBo b3N0IHJlYWQgdGVybWluYWwgZGF0YSAqLwotZXh0ZXJuIGludCB3eV9ibG9ja2VuZDsgICAgICAg ICAgICAgICAgIC8qIFRlcm1pbmFsIFNlbmQgRGF0YSBFT0IgdHlwZSAqLwotaW50IHR0X2hpZGF0 dHIgPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIEF0dHJpYnV0ZXMgYXJlIGhpZGRlbiAqLwot Ci1leHRlcm4gdW5zaWduZWQgY2hhciBjb2xvcm5vcm1hbCwgY29sb3JzZWxlY3QsCi1jb2xvcnVu ZGVybGluZSwgY29sb3JzdGF0dXMsIGNvbG9yaGVscCwgY29sb3Jib3JkZXIsCi1jb2xvcmdyYXBo aWMsIGNvbG9yZGVidWcsIGNvbG9ycmV2ZXJzZSwgY29sb3JpdGFsaWM7Ci0KLWV4dGVybiBpbnQg dHJ1ZWJsaW5rLCB0cnVldW5kZXJsaW5lLCB0cnVlcmV2ZXJzZSwgdHJ1ZWl0YWxpYywgdHJ1ZWRp bTsKLQotZXh0ZXJuIGludCBiZ2ksIGZnaTsKLWV4dGVybiBpbnQgc2NybmluaXRpYWxpemVkW107 Ci0KLXN0cnVjdCBrZXl0YWIgYXVkaWJsZXRhYltdID0geyAgICAgICAgICAvKiBUZXJtaW5hbCBC ZWxsIEF1ZGlibGUgbW9kZSAqLwotICAgIHsgImJlZXAiLCAgICAgICAgICBYWUJfQkVFUCwgMCB9 LCAgIC8qIFZhbHVlcyBPUmQgd2l0aCBiZWxsIG1vZGUgKi8KLSAgICB7ICJzeXN0ZW0tc291bmRz IiwgWFlCX1NZUywgIDAgfQotfTsKLWludCBuYXVkaWJsZXRhYiA9IHNpemVvZihhdWRpYmxldGFi KS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLXN0cnVjdCBrZXl0YWIgYWttdGFiW10gPSB7ICAg ICAgICAgICAgICAvKiBBcnJvdyBrZXkgbW9kZSAqLwotICAgIHsgImFwcGxpY2F0aW9uIiwgVFRL X0FQUEwsIDAgfSwKLSAgICB7ICJjdXJzb3IiLCAgICAgIFRUS19OT1JNLCAwIH0KLX07Ci1zdHJ1 Y3Qga2V5dGFiIGtwbXRhYltdID0geyAgICAgICAgICAgICAgLyogS2V5cGFkIG1vZGUgKi8KLSAg ICB7ICJhcHBsaWNhdGlvbiIsIFRUS19BUFBMLCAwIH0sCi0gICAgeyAibnVtZXJpYyIsICAgICBU VEtfTk9STSwgMCB9Ci19OwotCi1zdHJ1Y3Qga2V5dGFiIHR0Y29sbW9kZXRhYltdID0gewotICAg IHsgImN1cnJlbnQtY29sb3IiLCAwLCAwIH0sCi0gICAgeyAiZGVmYXVsdC1jb2xvciIsIDEsIDAg fQotfTsKLWludCBuY29sbW9kZSA9IHNpemVvZih0dGNvbG1vZGV0YWIpL3NpemVvZihzdHJ1Y3Qg a2V5dGFiKTsKLQotI2RlZmluZSBUVENPTE5PUiAgMAotI2RlZmluZSBUVENPTFJFViAgMQotI2Rl ZmluZSBUVENPTFVORCAgMgotI2RlZmluZSBUVENPTFNUQSAgMwotI2RlZmluZSBUVENPTEhMUCAg NAotI2RlZmluZSBUVENPTEJPUiAgNQotI2RlZmluZSBUVENPTFNFTCAgNgotI2RlZmluZSBUVENP TERFQiAgNwotI2RlZmluZSBUVENPTEdSUCAgOAotI2RlZmluZSBUVENPTElUQSAgOQotI2RlZmlu ZSBUVENPTFJFUyAgMTAKLSNkZWZpbmUgVFRDT0xFUkEgIDExCi0KLXN0cnVjdCBrZXl0YWIgdHR5 Y29sdGFiW10gPSB7ICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIFNjcmVlbiBjb2xvcmlu ZyAqLwotICAgIHsgImJvcmRlciIsICAgICAgICAgICAgIFRUQ09MQk9SLCAwIH0sICAgICAgLyog U2NyZWVuIGJvcmRlciBjb2xvciAqLwotICAgIHsgImRlYnVnLXRlcm1pbmFsIiwgICAgIFRUQ09M REVCLCAwIH0sICAgICAgLyogRGVidWcgY29sb3IgKi8KLSAgICB7ICJlcmFzZSIsICAgICAgICAg ICAgICBUVENPTEVSQSwgMCB9LCAgICAgIC8qIEVyYXNlIG1vZGUgKi8KLSAgICB7ICJncmFwaGlj IiwgICAgICAgICAgICBUVENPTEdSUCwgMCB9LCAgICAgIC8qIEdyYXBoaWMgQ29sb3IgKi8KLSAg ICB7ICJoZWxwLXRleHQiLCAgICAgICAgICBUVENPTEhMUCwgMCB9LCAgICAgIC8qIEhlbHAgc2Ny ZWVucyAqLwotICAgIHsgIml0YWxpYyIsICAgICAgICAgICAgIFRUQ09MSVRBLCAwIH0sICAgICAg LyogSXRhbGljIENvbG9yICovCi0gICAgeyAibm9ybWFsIiwgICAgICAgICAgICAgVFRDT0xOT1Is IENNX0lOViB9LCAvKiBOb3JtYWwgc2NyZWVuIHRleHQgKi8KLSAgICB7ICJyZXNldC1vbi1lc2Nb MG0iLCAgICBUVENPTFJFUywgMCB9LCAgICAgIC8qIFJlc2V0IG9uIEVTQyBbIDAgbSAqLwotICAg IHsgInJldmVyc2UtdmlkZW8iLCAgICAgIFRUQ09MUkVWLCAwIH0sICAgICAgLyogUmV2ZXJzZSB2 aWRlbyAqLwotICAgIHsgInN0YXR1cy1saW5lIiwgICAgICAgIFRUQ09MU1RBLCAwIH0sICAgICAg LyogU3RhdHVzIGxpbmUgKi8KLSAgICB7ICJzZWxlY3Rpb24iLCAgICAgICAgICBUVENPTFNFTCwg MCB9LCAgICAgIC8qIFNlbGVjdGlvbiBjb2xvciAqLwotICAgIHsgInRlcm1pbmFsLXNjcmVlbiIs ICAgIFRUQ09MTk9SLCAwIH0sICAgICAgLyogQmV0dGVyIG5hbWUgdGhhbiAibm9ybWFsIiAqLwot ICAgIHsgInVuZGVybGluZWQtdGV4dCIsICAgIFRUQ09MVU5ELCAwIH0gICAgICAgLyogVW5kZXJs aW5lZCB0ZXh0ICovCi19OwotaW50IG5jb2xvcnMgPSAoc2l6ZW9mKHR0eWNvbHRhYikgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpOwotCi0jZGVmaW5lIFRUQVRUTk9SICAwCi0jZGVmaW5lIFRUQVRU QkxJICAxCi0jZGVmaW5lIFRUQVRUUkVWICAyCi0jZGVmaW5lIFRUQVRUVU5EICAzCi0jZGVmaW5l IFRUQVRUUFJPICA0Ci0jZGVmaW5lIFRUQVRUQkxEICA1Ci0jZGVmaW5lIFRUQVRURElNICA2Ci0j ZGVmaW5lIFRUQVRUSU5WICA3Ci0jZGVmaW5lIFRUQVRUSVRBICA4Ci0jZGVmaW5lIFRUQVRURE9O RSA5Ci0KLXN0cnVjdCBrZXl0YWIgdHR5YXR0cnRhYltdID0gewotICAgIHsgImJsaW5rIiwgICAg IFRUQVRUQkxJLCAwIH0sCi0gICAgeyAiZGltIiwgICAgICAgVFRBVFRESU0sIDAgfSwKLSAgICB7 ICJpdGFsaWMiLCAgICBUVEFUVElUQSwgMCB9LAotICAgIHsgInByb3RlY3RlZCIsIFRUQVRUUFJP LCAwIH0sCi0gICAgeyAicmV2ZXJzZSIsICAgVFRBVFRSRVYsIDAgfSwKLSAgICB7ICJ1bmRlcmxp bmUiLCBUVEFUVFVORCwgMCB9Ci19OwotaW50IG5hdHRyaWIgPSAoc2l6ZW9mKHR0eWF0dHJ0YWIp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiB0dHlwcm90YWJbXSA9 IHsKLSAgICB7ICJibGluayIsICAgICAgIFRUQVRUQkxJLCAgMCB9LAotICAgIHsgImJvbGQiLCAg ICAgICAgVFRBVFRCTEQsICAwIH0sCi0gICAgeyAiZGltIiwgICAgICAgICBUVEFUVERJTSwgIDAg fSwKLSAgICB7ICJkb25lIiwgICAgICAgIFRUQVRURE9ORSwgQ01fSU5WIH0sCi0gICAgeyAiaW52 aXNpYmxlIiwgICBUVEFUVElOViwgIDAgfSwKLSAgICB7ICJpdGFsaWMiLCAgICAgIFRUQVRUSVRB LCAgMCB9LAotICAgIHsgIm5vcm1hbCIsICAgICAgVFRBVFROT1IsICAwIH0sCi0gICAgeyAicmV2 ZXJzZSIsICAgICBUVEFUVFJFViwgIDAgfSwKLSAgICB7ICJ1bmRlcmxpbmVkIiwgIFRUQVRUVU5E LCAgMCB9Ci0KLX07Ci1pbnQgbnByb3RlY3QgPSAoc2l6ZW9mKHR0eXByb3RhYikgLyBzaXplb2Yo c3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIHR0eXNlb2J0YWJbXSA9IHsKLSAgICB7 ICJjcmxmX2V0eCIsICAxLCAwIH0sCi0gICAgeyAidXNfY3IiLCAgICAgMCwgMCB9Ci19OwotCi1z dHJ1Y3Qga2V5dGFiIHR0eWNscnRhYltdID0geyAgICAgICAgICAgLyogQ29sb3JzICovCi0gICAg eyAiYmxhY2siLCAgICAgICAgIDAsIDAgICAgICB9LAotICAgIHsgImJsdWUiLCAgICAgICAgICAx LCAwICAgICAgfSwKLSAgICB7ICJicm93biIsICAgICAgICAgNiwgMCAgICAgIH0sCi0gICAgeyAi Y3lhbiIsICAgICAgICAgIDMsIDAgICAgICB9LAotICAgIHsgImRhcmtncmF5IiwgICAgICA4LCBD TV9JTlYgfSwKLSAgICB7ICJkZ3JheSIsICAgICAgICAgOCwgMCAgICAgIH0sCi0gICAgeyAiZ3Jl ZW4iLCAgICAgICAgIDIsIDAgICAgICB9LAotICAgIHsgImxibHVlIiwgICAgICAgICA5LCBDTV9J TlYgfSwKLSAgICB7ICJsY3lhbiIsICAgICAgICAxMSwgQ01fSU5WIH0sCi0gICAgeyAibGdyYXki LCAgICAgICAgIDcsIENNX0lOViB9LAotICAgIHsgImxncmVlbiIsICAgICAgIDEwLCBDTV9JTlYg fSwKLSAgICB7ICJsaWdodGJsdWUiLCAgICAgOSwgMCAgICAgIH0sCi0gICAgeyAibGlnaHRjeWFu IiwgICAgMTEsIDAgICAgICB9LAotICAgIHsgImxpZ2h0Z3JheSIsICAgICA3LCAwICAgICAgfSwK LSAgICB7ICJsaWdodGdyZWVuIiwgICAxMCwgMCAgICAgIH0sCi0gICAgeyAibGlnaHRtYWdlbnRh IiwgMTMsIDAgICAgICB9LAotICAgIHsgImxpZ2h0cmVkIiwgICAgIDEyLCAwICAgICAgfSwKLSAg ICB7ICJsbWFnZW50YSIsICAgICAxMywgQ01fSU5WIH0sCi0gICAgeyAibHJlZCIsICAgICAgICAg MTIsIENNX0lOViB9LAotICAgIHsgIm1hZ2VudGEiLCAgICAgICA1LCAwICAgICAgfSwKLSAgICB7 ICJyZWQiLCAgICAgICAgICAgNCwgMCAgICAgIH0sCi0gICAgeyAid2hpdGUiLCAgICAgICAgMTUs IDAgICAgICB9LAotICAgIHsgInllbGxvdyIsICAgICAgIDE0LCAwICAgICAgfQotfTsKLWludCBu Y2xycyA9IChzaXplb2YgKHR0eWNscnRhYikgLyBzaXplb2YgKHN0cnVjdCBrZXl0YWIpKTsKLQot c3RydWN0IGtleXRhYiB0dHljdXJ0YWJbXSA9IHsKLSAgICB7ICJmdWxsIiwgICAgICAgIFRUQ19C TE9DSywgMCB9LAotICAgIHsgImhhbGYiLCAgICAgICAgVFRDX0hBTEYsICAwIH0sCi0gICAgeyAi dW5kZXJsaW5lIiwgICBUVENfVUxJTkUsIDAgfQotfTsKLWludCBuY3Vyc29ycyA9IDM7Ci0KLXN0 cnVjdCBrZXl0YWIgdHR5cHRhYltdID0gewotICAgIHsgImFhYSIsICAgICAgVFRfQUFBLCAgICAg Q01fSU5WIH0sICAgICAvKiBBbm5BcmJvciAqLwotICAgIHsgImFkbTNhIiwgICAgVFRfQURNM0Es ICAgMCB9LCAgICAgICAgICAvKiBMU0kgQURNLTNBICovCi0gICAgeyAiYWRtNSIsICAgICBUVF9B RE01LCAgICAwIH0sICAgICAgICAgIC8qIExTSSBBRE0tNSAqLwotICAgIHsgImFpeHRlcm0iLCAg VFRfQUlYVEVSTSwgMCB9LCAgICAgICAgICAvKiBJQk0gQUlYdGVybSAqLwotICAgIHsgImFubmFy Ym9yIiwgVFRfQUFBLCAgICAgMCB9LCAgICAgICAgICAvKiBBbm5BcmJvciAqLwotICAgIHsgImFu c2ktYmJzIiwgVFRfQU5TSSwgICAgMCB9LCAgICAgICAgICAvKiBBTlNJLlNZUyAoQkJTKSAqLwot ICAgIHsgImF0Mzg2IiwgICAgVFRfQVQzODYsICAgMCB9LCAgICAgICAgICAvKiBVbml4d2FyZSBB TlNJICovCi0gICAgeyAiYXZhdGFyLzArIixUVF9BTlNJLCAgICAwIH0sICAgICAgICAgIC8qIEFW QVRBUi8wKyAqLwotICAgIHsgImJhODAiLCAgICAgVFRfQkE4MCwgICAgMCB9LCAgICAgICAgICAv KiBOaXhkb3JmIEJBODAgKi8KLSAgICB7ICJiZSIsICAgICAgIFRUX0JFT1MsICAgIENNX0lOVnxD TV9BQlIgfSwKLSAgICB7ICJiZW9zLWFuc2kiLFRUX0JFT1MsICAgIENNX0lOViB9LCAgICAgLyog QmVPUyBBTlNJICovCi0gICAgeyAiYmV0ZXJtIiwgICBUVF9CRU9TLCAgICAwIH0sICAgICAgICAg IC8qIEJlT1MgVGVybWluYWwgKGFzIG9mIFBSMiApICovCi0gICAgeyAiZDIwMCIsICAgICBUVF9E RzIwMCwgICBDTV9JTlZ8Q01fQUJSIH0sIC8qIERhdGEgR2VuZXJhbCBEQVNIRVIgMjAwICovCi0g ICAgeyAiZDIxMCIsICAgICBUVF9ERzIxMCwgICBDTV9JTlZ8Q01fQUJSIH0sIC8qIERhdGEgR2Vu ZXJhbCBEQVNIRVIgMjEwICovCi0gICAgeyAiZDIxNyIsICAgICBUVF9ERzIxNywgICBDTV9JTlZ8 Q01fQUJSIH0sIC8qIERhdGEgR2VuZXJhbCBEQVNIRVIgMjE3ICovCi0gICAgeyAiZGcyMDAiLCAg ICBUVF9ERzIwMCwgICAwIH0sICAgICAgICAgIC8qIERhdGEgR2VuZXJhbCBEQVNIRVIgMjAwICov Ci0gICAgeyAiZGcyMTAiLCAgICBUVF9ERzIxMCwgICAwIH0sICAgICAgICAgIC8qIERhdGEgR2Vu ZXJhbCBEQVNIRVIgMjEwICovCi0gICAgeyAiZGcyMTciLCAgICBUVF9ERzIxNywgICAwIH0sICAg ICAgICAgIC8qIERhdGEgR2VuZXJhbCBEQVNIRVIgMjE3ICovCi0gICAgeyAiaDE1MDAiLCAgICBU VF9IWkwxNTAwLCBDTV9JTlYgfSwgICAgIC8qIEhhemVsdGluZSAxNTAwICovCi0gICAgeyAiaDE5 IiwgICAgICBUVF9IMTksICAgICBDTV9JTlYgfSwgICAgIC8qIEhlYXRoLTE5ICovCi0gICAgeyAi aGVhdGgxOSIsICBUVF9IMTksICAgICAwIH0sICAgICAgICAgIC8qIEhlYXRoLTE5ICovCi0gICAg eyAiaGZ0IiwgICAgICBUVF9IRlQsICAgICAwIH0sICAgICAgICAgIC8qIElCTSBIaWdoIEZ1bmN0 aW9uIFRlcm1pbmFsICovCi0gICAgeyAiaHAyNjIxYSIsICBUVF9IUDI2MjEsICAwIH0sICAgICAg ICAgIC8qIEhQIDI2MjFBICovCi0gICAgeyAiaHB0ZXJtIiwgICBUVF9IUFRFUk0sICAwIH0sICAg ICAgICAgIC8qIEhQIFRFUk0gKi8KLSAgICB7ICJoejE1MDAiLCAgIFRUX0haTDE1MDAsIDAgfSwg ICAgICAgICAgLyogSGF6ZWx0aW5lIDE1MDAgKi8KLSAgICB7ICJpYm0zMTUxIiwgIFRUX0lCTTMx LCAgIDAgfSwgICAgICAgICAgLyogSUJNIDMxMDEteHgsMzE2MSAqLwotICAgIHsgImxpbnV4Iiwg ICAgVFRfTElOVVgsICAgMCB9LCAgICAgICAgICAvKiBMaW51eCAqLwotICAgIHsgInFhbnNpIiwg ICAgVFRfUUFOU0ksICAgMCB9LCAgICAgICAgICAvKiBRTlggQU5TSSAqLwotICAgIHsgInFueCIs ICAgICAgVFRfUU5YLCAgICAgMCB9LCAgICAgICAgICAvKiBRTlggQ29uc29sZSAqLwotICAgIHsg InNjb2Fuc2kiLCAgVFRfU0NPQU5TSSwgMCB9LCAgICAgICAgICAvKiBTQ08gQU5TSSAqLwotICAg IHsgInNuaS05NzgwMSIsVFRfOTc4MDEsICAgMCB9LCAgICAgICAgICAvKiBTTkkgOTc4MDEgKi8K LSAgICB7ICJzdW4iLCAgICAgIFRUX1NVTiwgICAgIDAgfSwgICAgICAgICAgLyogU1VOIENvbnNv bGUgKi8KLS8qCi0gIFRoZSBpZGVhIG9mIE5PTkUgaXMgdG8gbGV0IHRoZSBjb25zb2xlIGRyaXZl ciBoYW5kbGUgdGhlIGVzY2FwZSBzZXF1ZW5jZXMsCi0gIHdoaWNoLCBpbiB0aGVvcnkgYXQgbGVh c3QsIHdvdWxkIGdpdmUgbm90IG9ubHkgQU5TSSBlbXVsYXRpb24sIGJ1dCBhbHNvIGFueQotICBv dGhlciBraW5kIG9mIGVtdWxhdGlvbiB0aGF0IG1pZ2h0IGJlIHByb3ZpZGVkIGJ5IGFsdGVybmF0 aXZlIGNvbnNvbGUKLSAgZHJpdmVycywgaWYgYW55IGV4aXN0ZWQuCi0KLSAgRm9yIHRoaXMgdG8g d29yaywgY2tvY29uLmMgd291bGQgbmVlZCB0byBiZSBtb2RpZmllZCB0byBtYWtlIGhpZ2hlci1s ZXZlbAotICBjYWxscywgbGlrZSBWaW9XcnRUVFkoKSwgRG9zV3JpdGUoKSwgb3IgKHNpbXBseSkg d3JpdGUoKSwgcmF0aGVyIHRoYW4KLSAgVmlvV3J0KkNlbGwoKSBhbmQgc2ltaWxhciwgYW5kIGl0 IHdvdWxkIGFsc28gaGF2ZSB0byBnaXZlIHVwIGl0cyByb2xsYmFjawotICBmZWF0dXJlLCBhbmQg aXRzIHN0YXR1cyBsaW5lIGFuZCBoZWxwIHNjcmVlbnMgd291bGQgYWxzbyBoYXZlIHRvIGJlCi0g IGZvcmdvdHRlbiBvciBlbHNlIGRvbmUgaW4gYW4gQU5TSSB3YXkuCi0KLSAgQXMgbWF0dGVycyBz dGFuZCwgd2UgYWxyZWFkeSBoYXZlIHBlcmZlY3RseSBnb29kIEFOU0kgZW11bGF0aW9uIGJ1aWx0 IGluLAotICBhbmQgdGhlcmUgYXJlIG5vIGFsdGVybmF0aXZlIGNvbnNvbGUgZHJpdmVycyBhdmFp bGFibGUsIHNvIHRoZXJlIGlzIG5vIHBvaW50Ci0gIGluIGhhdmluZyBhIHRlcm1pbmFsIHR5cGUg b2YgTk9ORSwgc28gaXQgaXMgY29tbWVudGVkIG91dC4gIEhvd2V2ZXIsIHNob3VsZAotICB5b3Ug dW5jb21tZW50IGl0LCBpdCB3aWxsIHdvcmsgbGlrZSBhICJnbGFzcyB0dHkiIC0tIG5vIGVzY2Fw ZSBzZXF1ZW5jZQotICBpbnRlcnByZXRhdGlvbiBhdCBhbGw7IHNvbWV3aGF0IHNpbWlsYXIgdG8g ZGVidWcgbW9kZSwgZXhjZXB0IHdpdGhvdXQgdGhlCi0gIGRlYnVnZ2luZyAobm8gaGlnaGxpZ2h0 aW5nIG9mIGNvbnRyb2wgY2hhcnMgb3IgZXNjYXBlIHNlcXVlbmNlcyk7IGhlbHAKLSAgc2NyZWVu cywgc3RhdHVzIGxpbmUsIGFuZCByb2xsYmFjayB3aWxsIHN0aWxsIHdvcmsuCi0qLwotI2lmZGVm IE9TMlBNCi0jaWZkZWYgQ09NTUVOVAotICAgIHsgInRlazQwMTQiLCBUVF9URUs0MCwgIDAgfSwK LSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogT1MyUE0gKi8KLSAgICB7ICJ0dHkiLCAg ICAgVFRfTk9ORSwgICAwIH0sCi0gICAgeyAidHZpOTEwKyIsIFRUX1RWSTkxMCwgMCB9LAotICAg IHsgInR2aTkyNSIsICBUVF9UVkk5MjUsIDAgfSwKLSAgICB7ICJ0dmk5NTAiLCAgVFRfVFZJOTUw LCAwIH0sCi0gICAgeyAidmM0MDQiLCAgIFRUX1ZDNDQwNCwgMCB9LAotICAgIHsgInZjNDQwNCIs ICBUVF9WQzQ0MDQsIENNX0lOViB9LAotICAgIHsgInZpcDc4MDkiLCBUVF9WSVA3ODA5LDAgfSwK LSAgICB7ICJ2dDEwMCIsICAgVFRfVlQxMDAsICAwIH0sCi0gICAgeyAidnQxMDIiLCAgIFRUX1ZU MTAyLCAgMCB9LAotICAgIHsgInZ0MjIwIiwgICBUVF9WVDIyMCwgIDAgfSwKLSAgICB7ICJ2dDIy MHBjIiwgVFRfVlQyMjBQQywwIH0sCi0gICAgeyAidnQzMjAiLCAgIFRUX1ZUMzIwLCAgMCB9LAot ICAgIHsgInZ0MzIwcGMiLCBUVF9WVDMyMFBDLDAgfSwKLSAgICB7ICJ2dDUyIiwgICAgVFRfVlQ1 MiwgICAwIH0sCi0jaWZkZWYgTlQKLSAgICB7ICJ2dG50IiwgICAgVFRfVlROVCwgICAwIH0sCi0j ZWxzZSAvKiBOVCAqLwotICAgIHsgInZ0bnQiLCAgICBUVF9WVE5ULCAgQ01fSU5WIH0sCi0jZW5k aWYgLyogTlQgKi8KLSAgICB7ICJ3eTE2MCIsICAgVFRfV1kxNjAsICAwIH0sCi0gICAgeyAid3kz MCIsICAgIFRUX1dZMzAsICAgMCB9LAotICAgIHsgInd5MzcwIiwgICBUVF9XWTM3MCwgIDAgfSwK LSAgICB7ICJ3eTUwIiwgICAgVFRfV1k1MCwgICAwIH0sCi0gICAgeyAid3k2MCIsICAgIFRUX1dZ NjAsICAgMCB9LAotICAgIHsgInd5c2UzMCIsICBUVF9XWTMwLCAgIENNX0lOViB9LAotICAgIHsg Ind5c2UzNzAiLCBUVF9XWTM3MCwgIENNX0lOViB9LAotICAgIHsgInd5c2U1MCIsICBUVF9XWTUw LCAgIENNX0lOViB9LAotICAgIHsgInd5c2U2MCIsICBUVF9XWTYwLCAgIENNX0lOViB9Ci19Owot aW50IG50dHlwID0gKHNpemVvZih0dHlwdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0K LXN0cnVjdCBrZXl0YWIgdHRrZXl0YWJbXSA9IHsKLSAgICB7ICJhYWEiLCAgICAgICBUVF9BQUEs ICAgICAgICBDTV9JTlYgfSwgICAgICAgIC8qIEFubkFyYm9yICovCi0gICAgeyAiYWRtM2EiLCAg ICAgVFRfQURNM0EsICAgICAgMCB9LCAgICAgICAgICAgICAvKiBMU0kgQURNLTNBICovCi0gICAg eyAiYWRtNSIsICAgICAgVFRfQURNNSwgICAgICAgMCB9LCAgICAgICAgICAgICAvKiBMU0kgQURN LTUgKi8KLSAgICB7ICJhaXh0ZXJtIiwgICBUVF9BSVhURVJNLCAgICAwIH0sICAgICAgICAgICAg IC8qIElCTSBBSVh0ZXJtICovCi0gICAgeyAiYW5uYXJib3IiLCAgVFRfQUFBLCAgICAgICAgMCB9 LCAgICAgICAgICAgICAvKiBBbm5BcmJvciAqLwotICAgIHsgImFuc2ktYmJzIiwgIFRUX0FOU0ks ICAgICAgIDAgfSwgICAgICAgICAgICAgLyogQU5TSS5TWVMgKEJCUykgKi8KLSAgICB7ICJhdDM4 NiIsICAgICBUVF9BVDM4NiwgICAgICAwIH0sICAgICAgICAgICAgIC8qIFVuaXh3YXJlIEFOU0kg Ki8KLSAgICB7ICJhdmF0YXIvMCsiLCBUVF9BTlNJLCAgICAgICAwIH0sICAgICAgICAgICAgIC8q IEFWQVRBUi8wKyAqLwotICAgIHsgImJhODAiLCAgICAgIFRUX0JBODAsICAgICAgIDAgfSwgICAg ICAgICAgICAgLyogTml4ZG9yZiBCQTgwICovCi0gICAgeyAiYmUiLCAgICAgICAgVFRfQkVPUywg ICAgICAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgImJlb3MtYW5zaSIsIFRUX0JFT1MsICAgICAg IENNX0lOViB9LCAgICAgICAgLyogQmVPUyBBTlNJICovCi0gICAgeyAiYmV0ZXJtIiwgICAgVFRf QkVPUywgICAgICAgMCB9LCAgICAgICAgICAgICAvKiBCZU9TIFRlcm1pbmFsIChEUjIpICovCi0g ICAgeyAiZDIwMCIsICAgICAgVFRfREcyMDAsICAgICAgQ01fSU5WfENNX0FCUiB9LCAvKiBERyBE QVNIRVIgMjAwICovCi0gICAgeyAiZDIxMCIsICAgICAgVFRfREcyMTAsICAgICAgQ01fSU5WfENN X0FCUiB9LCAvKiBERyBEQVNIRVIgMjEwICovCi0gICAgeyAiZDIxNyIsICAgICAgVFRfREcyMTcs ICAgICAgQ01fSU5WfENNX0FCUiB9LCAvKiBERyBEQVNIRVIgMjE3ICovCi0gICAgeyAiZGcyMDAi LCAgICAgVFRfREcyMDAsICAgICAgMCB9LCAgICAgICAgICAgICAvKiBERyBEQVNIRVIgMjAwICov Ci0gICAgeyAiZGcyMTAiLCAgICAgVFRfREcyMTAsICAgICAgMCB9LCAgICAgICAgICAgICAvKiBE RyBEQVNIRVIgMjEwICovCi0gICAgeyAiZGcyMTciLCAgICAgVFRfREcyMTcsICAgICAgMCB9LCAg ICAgICAgICAgICAvKiBERyBEQVNIRVIgMjE3ICovCi0gICAgeyAiZW1hY3MiLCAgICAgVFRfS0JN X0VNQUNTLCAgMCB9LCAgICAgICAgICAgICAvKiBFbWFjcyBtb2RlICovCi0gICAgeyAiaDE5Iiwg ICAgICAgVFRfSDE5LCAgICAgICAgQ01fSU5WIH0sICAgICAgICAvKiBIZWF0aC0xOSAqLwotICAg IHsgImhlYXRoMTkiLCAgIFRUX0gxOSwgICAgICAgIDAgfSwgICAgICAgICAgICAgLyogSGVhdGgt MTkgKi8KLSAgICB7ICJoZWJyZXciLCAgICBUVF9LQk1fSEVCUkVXLCAwIH0sICAgICAgICAgICAg IC8qIEhlYnJldyBtb2RlICovCi0gICAgeyAiaGZ0IiwgICAgICAgVFRfSEZULCAgICAgICAgMCB9 LCAgICAgICAgICAgICAvKiBJQk0gSGlnaCBGdW5jdGlvbiBUZXJtICovCi0gICAgeyAiaHAyNjIx YSIsICAgVFRfSFAyNjIxLCAgICAgMCB9LCAgICAgICAgICAgICAvKiBIUCAyNjIxQSAqLwotICAg IHsgImhwdGVybSIsICAgIFRUX0hQVEVSTSwgICAgIDAgfSwgICAgICAgICAgICAgLyogSFAgVEVS TSAqLwotICAgIHsgImh6MTUwMCIsICAgIFRUX0haTDE1MDAsICAgIDAgfSwgICAgICAgICAgICAg LyogSGF6ZWx0aW5lIDE1MDAgKi8KLSAgICB7ICJpYm0zMTUxIiwgICBUVF9JQk0zMSwgICAgICAw IH0sICAgICAgICAgICAgIC8qIElCTSAzMTAxLXh4LDMxNjEgKi8KLSAgICB7ICJsaW51eCIsICAg ICBUVF9MSU5VWCwgICAgICAwIH0sICAgICAgICAgICAgIC8qIExpbnV4ICovCi0gICAgeyAicWFu c2kiLCAgICAgVFRfUUFOU0ksICAgICAgMCB9LCAgICAgICAgICAgICAvKiBRTlggQU5TSSAqLwot ICAgIHsgInFueCIsICAgICAgIFRUX1FOWCwgICAgICAgIDAgfSwgICAgICAgICAgICAgLyogUU5Y ICovCi0gICAgeyAicnVzc2lhbiIsICAgVFRfS0JNX1JVU1NJQU4sMCB9LCAgICAgICAgICAgICAv KiBSdXNzaWFuIG1vZGUgKi8KLSAgICB7ICJzY29hbnNpIiwgICBUVF9TQ09BTlNJLCAgICAwIH0s ICAgICAgICAgICAgIC8qIFNDTyBBTlNJICovCi0gICAgeyAic25pLTk3ODAxIiwgVFRfOTc4MDEs ICAgICAgMCB9LCAgICAgICAgICAgICAvKiBTTkkgOTc4MDEgKi8KLSAgICB7ICJzdW4iLCAgICAg ICBUVF9TVU4sICAgICAgICAwIH0sICAgICAgICAgICAgIC8qIFNVTiBDb25zb2xlICovCi0jaWZk ZWYgT1MyUE0KLSNpZmRlZiBDT01NRU5UCi0gICAgeyAidGVrNDAxNCIsICAgVFRfVEVLNDAsICAg ICAgMCB9LAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBPUzJQTSAqLwotICAgIHsg InR0eSIsICAgICAgIFRUX05PTkUsICAgICAgIDAgfSwKLSAgICB7ICJ0dmk5MTArIiwgICBUVF9U Vkk5MTAsICAgICAwIH0sCi0gICAgeyAidHZpOTI1IiwgICAgVFRfVFZJOTI1LCAgICAgMCB9LAot ICAgIHsgInR2aTk1MCIsICAgIFRUX1RWSTk1MCwgICAgIDAgfSwKLSAgICB7ICJ2YzQwNCIsICAg ICBUVF9WQzQ0MDQsICAgICAwIH0sCi0gICAgeyAidmM0NDA0IiwgICAgVFRfVkM0NDA0LCAgICAg Q01fSU5WIH0sCi0gICAgeyAidmlwNzgwOSIsICAgVFRfVklQNzgwOSwgICAgMCB9LAotICAgIHsg InZ0MTAwIiwgICAgIFRUX1ZUMTAwLCAgICAgIDAgfSwKLSAgICB7ICJ2dDEwMiIsICAgICBUVF9W VDEwMiwgICAgICAwIH0sCi0gICAgeyAidnQyMjAiLCAgICAgVFRfVlQyMjAsICAgICAgMCB9LAot ICAgIHsgInZ0MjIwcGMiLCAgIFRUX1ZUMjIwUEMsICAgIDAgfSwKLSAgICB7ICJ2dDMyMCIsICAg ICBUVF9WVDMyMCwgICAgICAwIH0sCi0gICAgeyAidnQzMjBwYyIsICAgVFRfVlQzMjBQQywgICAg MCB9LAotICAgIHsgInZ0NTIiLCAgICAgIFRUX1ZUNTIsICAgICAgIDAgfSwKLSAgICB7ICJ2dG50 IiwgICAgICBUVF9WVE5ULCAgICAgICBDTV9JTlYgfSwKLSAgICB7ICJ3cCIsICAgICAgICBUVF9L Qk1fV1AsICAgICAwIH0sICAgICAgICAgICAgIC8qIFdvcmQgUGVyZmVjdCBtb2RlICovCi0gICAg eyAid3kxNjAiLCAgICAgVFRfV1kxNjAsICAgICAgMCB9LAotICAgIHsgInd5MzAiLCAgICAgIFRU X1dZMzAsICAgICAgIDAgfSwKLSAgICB7ICJ3eTM3MCIsICAgICBUVF9XWTM3MCwgICAgICAwIH0s Ci0gICAgeyAid3k1MCIsICAgICAgVFRfV1k1MCwgICAgICAgMCB9LAotICAgIHsgInd5NjAiLCAg ICAgIFRUX1dZNjAsICAgICAgIDAgfSwKLSAgICB7ICJ3eXNlMzAiLCAgICBUVF9XWTMwLCAgICAg ICBDTV9JTlYgfSwKLSAgICB7ICJ3eXNlMzcwIiwgICBUVF9XWTM3MCwgICAgICBDTV9JTlYgfSwK LSAgICB7ICJ3eXNlNTAiLCAgICBUVF9XWTUwLCAgICAgICBDTV9JTlYgfSwKLSAgICB7ICJ3eXNl NjAiLCAgICBUVF9XWTYwLCAgICAgICBDTV9JTlYgfQotfTsKLWludCBudHRrZXkgPSAoc2l6ZW9m KHR0a2V5dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNpZm5kZWYgTk9TRVRLRVkK LXN0cnVjdCBrZXl0YWIga2Jtb2R0YWJbXSA9IHsKLSAgICB7ICJlbWFjcyIsICAgS0JNX0VNLCAw ICAgICAgfSwKLSAgICB7ICJlbmdsaXNoIiwgS0JNX0VOLCBDTV9JTlYgfSwKLSAgICB7ICJoZWJy ZXciLCAgS0JNX0hFLCAwICAgICAgfSwKLSAgICB7ICJub3JtYWwiLCAgS0JNX0VOLCAwICAgICAg fSwKLSAgICB7ICJub25lIiwgICAgS0JNX0VOLCBDTV9JTlYgfSwKLSAgICB7ICJydXNzaWFuIiwg S0JNX1JVLCAwICAgICAgfSwKLSAgICB7ICJ3cCIsICAgICAgS0JNX1dQLCAwICAgICAgfQotfTsK LWludCBua2Jtb2R0YWIgPSAoc2l6ZW9mKGtibW9kdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFi KSk7Ci0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLWludCB0 dF9pbnBhY2luZyA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBpbnB1dC1wYWNpbmcgKG5vbmUp ICovCi0KLXN0cnVjdCBrZXl0YWIgcHJ0eXRhYltdID0geyAvKiBPUy8yIFByaW9yaXR5IExldmVs cyAqLwotICAgIHsgImZvcmVncm91bmQtc2VydmVyIiwgWFlQX1NSViwgMCAgICAgICB9LAotICAg IHsgImlkbGUiLCAgICAgICAgICAgICAgWFlQX0lETEUsIENNX0lOViB9LAotICAgIHsgInJlZ3Vs YXIiLCAgICAgICAgICAgWFlQX1JFRywgMCAgICAgICB9LAotICAgIHsgInRpbWUtY3JpdGljYWwi LCAgICAgWFlQX1JUUCwgMCAgICAgICB9Ci19OwotaW50IG5wcnR5ID0gKHNpemVvZihwcnR5dGFi KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBO VAotc3RydWN0IGtleXRhYiB3aW45NXRhYltdID0geyAvKiBXaW45NSB3b3JrLWFyb3VuZHMgKi8K LSAgICB7ICI4LjMtZmlsZW5hbWVzIiwgICAgICAgICBYWVc4XzMsICAgIDAgfSwKLSAgICB7ICJh bHQtZ3IiLCAgICAgICAgICAgICAgICBYWVdBR1IsICAgIDAgfSwKLSAgICB7ICJob3Jpem9udGFs LXNjYW4tbGluZS1zdWJzdGl0dXRpb25zIiwgWFlXSFNMLCAwIH0sCi0gICAgeyAia2V5Ym9hcmQt dHJhbnNsYXRpb24iLCAgWFlXS0VZLCAgICAwIH0sCi0gICAgeyAibHVjaWRhLXN1YnN0aXR1dGlv bnMiLCAgWFlXTFVDLCAgICAwIH0sCi0gICAgeyAib3ZlcmxhcHBlZC1pbyIsICAgICAgICAgWFlX T0lPLCAgICAwIH0sCi0gICAgeyAicG9wdXBzIiwgICAgICAgICAgICAgICAgWFlXUE9QVVAsICAw IH0sCi0gICAgeyAic2VsZWN0LWJ1ZyIsICAgICAgICAgICAgWFlXU0VMRUNULCAwIH0KLX07Ci1p bnQgbndpbjk1ID0gKHNpemVvZih3aW45NXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwot I2VuZGlmIC8qIE5UICovCi0KLSNpZmRlZiBPUzJNT1VTRQotZXh0ZXJuIGludCB3aWRlcmVzdWx0 OwotaW50IHR0X21vdXNlID0gMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIG1v dXNlIG9uL29mZiAqLwotCi1zdHJ1Y3Qga2V5dGFiIG1vdXNldGFiW10gPSB7ICAgICAgICAgICAg LyogTW91c2UgaXRlbXMgKi8KLSAgICB7ICJhY3RpdmF0ZSIsIFhZTV9PTiwgICAgIDAgfSwKLSAg ICB7ICJidXR0b24iLCAgIFhZTV9CVVRUT04sIDAgfSwKLSAgICB7ICJjbGVhciIsICAgIFhZTV9D TEVBUiwgIDAgfSwKLSAgICB7ICJkZWJ1ZyIsICAgIFhZTV9ERUJVRywgIDAgfQotfTsKLWludCBu bXRhYiA9IChzaXplb2YobW91c2V0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0cnVj dCBrZXl0YWIgbW91c2VidXR0b250YWJbXSA9IHsgICAgICAvKiBldmVudCBidXR0b24gKi8KLSAg ICB7ICIxIiwgICAgICAgICAgICAgWFlNX0IxLCAwIH0sCi0gICAgeyAiMiIsICAgICAgICAgICAg IFhZTV9CMiwgMCB9LAotICAgIHsgIjMiLCAgICAgICAgICAgICBYWU1fQjMsIDAgfSwKLSAgICB7 ICJvbmUiLCAgICAgICAgICAgWFlNX0IxLCBDTV9JTlYgfSwKLSAgICB7ICJ0aHJlZSIsICAgICAg ICAgWFlNX0IzLCBDTV9JTlYgfSwKLSAgICB7ICJ0d28iLCAgICAgICAgICAgWFlNX0IyLCBDTV9J TlYgfQotfTsKLWludCBubWJ0YWIgPSAoc2l6ZW9mKG1vdXNlYnV0dG9udGFiKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0cnVjdCBrZXl0YWIgbW91c2Vtb2R0YWJbXSA9IHsgICAgICAg ICAvKiBldmVudCBidXR0b24ga2V5IG1vZGlmaWVyICovCi0gICAgeyAiYWx0IiwgICAgICAgICAg ICAgIFhZTV9BTFQsICAgMCB9LAotICAgIHsgImFsdC1zaGlmdCIsICAgICAgICBYWU1fU0hJRlR8 WFlNX0FMVCwgMCB9LAotICAgIHsgImN0cmwiLCAgICAgICAgICAgICBYWU1fQ1RSTCwgIDAgfSwK LSAgICB7ICJjdHJsLWFsdCIsICAgICAgICAgWFlNX0NUUkx8WFlNX0FMVCwgMCB9LAotICAgIHsg ImN0cmwtYWx0LXNoaWZ0IiwgICBYWU1fQ1RSTHxYWU1fU0hJRlR8WFlNX0FMVCwgMCB9LAotICAg IHsgImN0cmwtc2hpZnQiLCAgICAgICBYWU1fQ1RSTHxYWU1fU0hJRlQsIDAgfSwKLSAgICB7ICJu b25lIiwgICAgICAgICAgICAgMCwgMCB9LAotICAgIHsgInNoaWZ0IiwgICAgICAgICAgICBYWU1f U0hJRlQsIDAgfQotfTsKLWludCBubW10YWIgPSAoc2l6ZW9mKG1vdXNlbW9kdGFiKSAvIHNpemVv ZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0cnVjdCBrZXl0YWIgbWNsaWNrdGFiW10gPSB7ICAgICAg ICAgICAvKiBldmVudCBidXR0b24gY2xpY2sgbW9kaWZpZXIgKi8KLSAgICB7ICJjbGljayIsICAg ICAgICBYWU1fQzEsICAgMCB9LAotICAgIHsgImRyYWciLCAgICAgICAgIFhZTV9EUkFHLCAwIH0s Ci0gICAgeyAiZG91YmxlLWNsaWNrIiwgWFlNX0MyLCAgIDAgfQotfTsKLWludCBubWN0YWIgPSAo c2l6ZW9mKG1jbGlja3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0jaWZuZGVmIE5P S1ZFUkJTCi1leHRlcm4gaW50IG5rdmVyYnM7Ci1leHRlcm4gc3RydWN0IGtleXRhYiBrdmVyYnNb XTsKLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotI2VuZGlmIC8qIE9TMk1PVVNFICovCi0KLS8qICNp ZmRlZiBWTVMgKi8KLXN0cnVjdCBrZXl0YWIgZmJ0YWJbXSA9IHsgICAgICAgICAgICAgICAvKiBC aW5hcnkgcmVjb3JkIHR5cGVzIGZvciBWTVMgKi8KLSAgICB7ICJmaXhlZCIsICAgICBYWUZUX0Is IDAgfSwgICAgICAgICAvKiBGaXhlZCBpcyBub3JtYWwgZm9yIGJpbmFyeSAqLwotICAgIHsgInVu ZGVmaW5lZCIsIFhZRlRfVSwgMCB9ICAgICAgICAgIC8qIFVuZGVmaW5lZCBpZiB0aGV5IGFzayBm b3IgaXQgKi8KLX07Ci1pbnQgbmZidHlwID0gKHNpemVvZihmYnRhYikgLyBzaXplb2Yoc3RydWN0 IGtleXRhYikpOwotLyogI2VuZGlmICovCi0KLSNpZmRlZiBWTVMKLXN0cnVjdCBrZXl0YWIgbGJs dGFiW10gPSB7ICAgICAgICAgICAgICAvKiBMYWJlbGVkIEZpbGUgaW5mbyAqLwotICAgIHsgImFj bCIsICAgICAgICAgTEJMX0FDTCwgMCB9LAotICAgIHsgImJhY2t1cC1kYXRlIiwgTEJMX0JDSywg MCB9LAotICAgIHsgIm5hbWUiLCAgICAgICAgTEJMX05BTSwgMCB9LAotICAgIHsgIm93bmVyIiwg ICAgICAgTEJMX09XTiwgMCB9LAotICAgIHsgInBhdGgiLCAgICAgICAgTEJMX1BUSCwgMCB9Ci19 OwotaW50IG5sYmxwID0gKHNpemVvZihsYmx0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsK LSNlbHNlCi0jaWZkZWYgT1MyCi1zdHJ1Y3Qga2V5dGFiIGxibHRhYltdID0geyAgICAgICAgICAg ICAgLyogTGFiZWxlZCBGaWxlIGluZm8gKi8KLSAgICB7ICJhcmNoaXZlIiwgICBMQkxfQVJDLCAw IH0sCi0gICAgeyAiZXh0ZW5kZWQiLCAgTEJMX0VYVCwgMCB9LAotICAgIHsgImhpZGRlbiIsICAg IExCTF9ISUQsIDAgfSwKLSAgICB7ICJyZWFkLW9ubHkiLCBMQkxfUk8sICAwIH0sCi0gICAgeyAi c3lzdGVtIiwgICAgTEJMX1NZUywgMCB9Ci19OwotaW50IG5sYmxwID0gKHNpemVvZihsYmx0YWIp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBW TVMgKi8KLQotI2lmZGVmIENLX0NVUlNFUwotI2lmZGVmIENLX1BDVF9CQVIKLXN0YXRpYyBzdHJ1 Y3Qga2V5dGFiIGZkZnRhYltdID0geyAgICAgICAvKiBTRVQgRklMRSBESVNQTEFZIEZVTEwgb3B0 aW9ucyAqLwotICAgIHsgInRoZXJtb21ldGVyIiwgICAgMSwgMCwgfSwKLSAgICB7ICJuby10aGVy bW9tZXRlciIsIDAsIDAgIH0KLX07Ci1leHRlcm4gaW50IHRoZXJtb21ldGVyOwotI2VuZGlmIC8q IENLX1BDVF9CQVIgKi8KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLQotc3RhdGljIHN0cnVjdCBr ZXl0YWIgZmR0YWJbXSA9IHsgICAgICAgIC8qIFNFVCBGSUxFIERJU1BMQVkgb3B0aW9ucyAqLwot I2lmZGVmIE1BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hY2ludG9zaCAqLwot ICAgIHsgImZ1bGxzY3JlZW4iLCBYWUZEX1IsICAgICAgMCB9LCAgIC8qIEZ1bGwtc2NyZWVuIGJ1 dCBub3QgY3Vyc2VzICovCi0gICAgeyAibm9uZSIsICAgICAgIFhZRkRfTiwgICAgICAwIH0sCi0g ICAgeyAib2ZmIiwgICAgICAgIFhZRkRfTiwgQ01fSU5WIH0sCi0gICAgeyAib24iLCAgICAgICAg IFhZRkRfUiwgQ01fSU5WIH0sCi0gICAgeyAicXVpZXQiLCAgICAgIFhZRkRfTiwgQ01fSU5WIH0s Ci0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IE1hYyAqLwot ICAgIHsgImJyaWVmIiwgWFlGRF9CLCAwIH0sICAgICAgICAgICAgIC8qIEJyaWVmICovCi0gICAg eyAiY3J0IiwgWFlGRF9TLCAwIH0sICAgICAgICAgICAgICAgLyogQ1JUIGRpc3BsYXkgKi8KLSNp ZmRlZiBDS19DVVJTRVMKLSNpZmRlZiBDT01NRU5UCi0gICAgeyAiY3Vyc2VzIiwgICAgIFhZRkRf QywgIENNX0lOViB9LCAgLyogRnVsbC1zY3JlZW4sIGN1cnNlcyAqLwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLSAgICB7ICJmdWxsc2NyZWVuIiwgWFlGRF9DLCAgMCB9LCAgICAgICAvKiBGdWxsLXNj cmVlbiwgd2hhdGV2ZXIgdGhlIG1ldGhvZCAqLwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotI2lm ZGVmIEtVSQotICAgIHsgImd1aSIsICAgIFhZRkRfRywgMCB9LCAgICAgICAgICAgIC8qIEdVSSAq LwotI2VuZGlmIC8qIEtVSSAqLyAgICAgICAgCi0gICAgeyAibm9uZSIsICAgWFlGRF9OLCAwICAg ICAgfSwgICAgICAgLyogTm8gZGlzcGxheSAqLwotICAgIHsgIm9mZiIsICAgIFhZRkRfTiwgQ01f SU5WIH0sICAgICAgIC8qIERpdHRvICovCi0gICAgeyAib24iLCAgICAgWFlGRF9SLCBDTV9JTlYg fSwgICAgICAgLyogT24gPSBTZXJpYWwgKi8KLSAgICB7ICJxdWlldCIsICBYWUZEX04sIENNX0lO ViB9LCAgICAgICAvKiBObyBkaXNwbGF5ICovCi0gICAgeyAic2VyaWFsIiwgWFlGRF9SLCAwICAg ICAgfSwgICAgICAgLyogU2VyaWFsICovCi0jZW5kaWYgLyogTUFDICovCi0gICAgeyAiIiwgMCwg MCB9Ci19OwotaW50IG5mZHRhYiA9IChzaXplb2YoZmR0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpKSAtIDE7Ci0KLXN0cnVjdCBrZXl0YWIgcnNydGFiW10gPSB7ICAgICAgICAgICAgICAvKiBG b3IgUkVNT1RFIFNFVCBSRUNFSVZFICovCi0gICAgeyAicGFja2V0LWxlbmd0aCIsIFhZTEVOLCAg MCB9LAotICAgIHsgInRpbWVvdXQiLCAgICAgICBYWVRJTU8sIDAgfQotfTsKLWludCBucnNydGFi ID0gKHNpemVvZihyc3J0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotLyogU2VuZC9S ZWNlaXZlIFBhcmFtZXRlcnMgKi8KLQotc3RydWN0IGtleXRhYiBzcnRhYltdID0gewotICAgIHsg ImJhY2t1cCIsIFhZQlVQLCAwIH0sCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICB7ICJjaGFyYWN0ZXIt c2V0LXNlbGVjdGlvbiIsIFhZQ1NFVCwgMCB9LAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICB7 ICJjb250cm9sLXByZWZpeCIsIFhZUUNUTCwgMCB9LAotI2lmZGVmIENLWFhDSEFSCi0gICAgeyAi ZG91YmxlLWNoYXJhY3RlciIsIFhZREJMLCAwIH0sCi0jZW5kaWYgLyogQ0tYWENIQVIgKi8KLSAg ICB7ICJlbmQtb2YtcGFja2V0IiwgWFlFT0wsIDAgfSwKLSNpZmRlZiBQSVBFU0VORAotICAgIHsg ImZpbHRlciIsIFhZRkxUUiwgMCB9LAotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0jaWZkZWYgQ0tY WENIQVIKLSAgICB7ICJpZ25vcmUtY2hhcmFjdGVyIiwgWFlJR04sIDAgfSwKLSNlbmRpZiAvKiBD S1hYQ0hBUiAqLwotICAgIHsgImktcGFja2V0cyIsIDk5MywgMCB9LAotICAgIHsgIm1vdmUtdG8i LCBYWU1PVkUsIDAgfSwKLSAgICB7ICJuZWdvdGlhdGlvbi1zdHJpbmctbWF4LWxlbmd0aCIsIFhZ SU5JTCwgQ01fSU5WIH0sCi0gICAgeyAicGFja2V0LWxlbmd0aCIsIFhZTEVOLCAwIH0sCi0gICAg eyAicGFkLWNoYXJhY3RlciIsIFhZUEFEQywgMCB9LAotICAgIHsgInBhZGRpbmciLCBYWU5QQUQs IDAgfSwKLSAgICB7ICJwYXRobmFtZXMiLCBYWUZQQVRILCAwIH0sCi0gICAgeyAicGF1c2UiLCBY WVBBVVMsIDAgfSwKLSNpZmRlZiBDS19QRVJNUwotICAgIHsgInBlcm1pc3Npb25zIiwgOTk0LCAw fSwJCS8qIDIwNiAqLwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0gICAgeyAicXVvdGUiLCBYWVFD VEwsIENNX0lOViB9LCAgICAgICAgLyogPSBDT05UUk9MLVBSRUZJWCAqLwotICAgIHsgInJlbmFt ZS10byIsIFhZUkVOQU1FLCAwIH0sCi0gICAgeyAic3RhcnQtb2YtcGFja2V0IiwgWFlNQVJLLCAw IH0sCi0gICAgeyAidGltZW91dCIsIFhZVElNTywgMCB9LAotI2lmZGVmIFZNUwotICAgIHsgInZl cnNpb24tbnVtYmVycyIsIDg4NywgMCB9LCAgICAgIC8qIFZNUyB2ZXJzaW9uIG51bWJlcnMgKi8K LSNlbmRpZiAvKiBWTVMgKi8KLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1pbnQgbnNydGFiID0gKHNp emVvZihzcnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotI2lmZGVmIFVOSUNP REUKLSNkZWZpbmUgVUNTX0JPTSAxCi0jZGVmaW5lIFVDU19CWVQgMgotc3RhdGljIHN0cnVjdCBr ZXl0YWIgdWNzdGFiW10gPSB7Ci0gICAgeyAiYm9tIiwgICAgICAgIFVDU19CT00sIDAgfSwKLSAg ICB7ICJieXRlLW9yZGVyIiwgVUNTX0JZVCwgMCB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLWlu dCBudWNzdGFiID0gKHNpemVvZih1Y3N0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7 Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGJvdGFiW10gPSB7Ci0gICAgeyAiYmlnLWVuZGlhbiIs ICAgIDAsIDAgfSwKLSAgICB7ICJsaXR0bGUtZW5kaWFuIiwgMSwgMCB9Ci19Owotc3RhdGljIGlu dCBuYm90YWIgPSAyOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotLyogUkVNT1RFIFNFVCAqLwot Ci1zdHJ1Y3Qga2V5dGFiIHJtc3RhYltdID0gewotICAgIHsgImF0dHJpYnV0ZXMiLCAgWFlBVFRS LCAwICAgICAgfSwKLSAgICB7ICJibG9jay1jaGVjayIsIFhZQ0hLVCwgMCAgICAgIH0sCi0gICAg eyAiZmlsZSIsICAgICAgICBYWUZJTEUsIDAgICAgICB9LAotICAgIHsgImluY29tcGxldGUiLCAg WFlJRkQsICBDTV9JTlYgfSwgIC8qID0gUkVNT1RFIFNFVCBGSUxFIElOQ09NUExFVEUgKi8KLSAg ICB7ICJtYXRjaCIsICAgICAgIFhZTUFUQ0gsMCAgICAgIH0sCi0gICAgeyAicmVjZWl2ZSIsICAg ICBYWVJFQ1YsIDAgICAgICB9LAotICAgIHsgInJldHJ5IiwgICAgICAgWFlSRVRSLCAwICAgICAg fSwKLSAgICB7ICJzZXJ2ZXIiLCAgICAgIFhZU0VSViwgMCAgICAgIH0sCi0gICAgeyAidHJhbnNm ZXIiLCAgICBYWVhGRVIsIDAgICAgICB9LAotICAgIHsgIndpbmRvdyIsICAgICAgWFlXSU5ELCAw ICAgICAgfSwKLSAgICB7ICJ4ZmVyIiwgICAgICAgIFhZWEZFUiwgQ01fSU5WIH0KLX07Ci1pbnQg bnJtcyA9IChzaXplb2Yocm1zdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0cnVj dCBrZXl0YWIgYXR0cnRhYltdID0gewotI2lmZGVmIFNUUkFUVVMKLSAgICB7ICJhY2NvdW50Iiwg ICAgICAgQVRfQUNDVCwgMCB9LAotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSAgICB7ICJhbGwiLCAg ICAgICAgICAgQVRfWEFMTCwgMCB9LAotI2lmZGVmIENPTU1FTlQKLSAgICB7ICJibG9ja3NpemUi LCAgICAgQVRfQkxLUywgMCB9LCAgICAvKiAobm90IHVzZWQpICovCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotI2lmbmRlZiBOT0NTRVRTCi0gICAgeyAiY2hhcmFjdGVyLXNldCIsIEFUX0VOQ08sIDAg fSwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jaWZkZWYgU1RSQVRVUwotICAgIHsgImNyZWF0b3Ii LCAgICAgICBBVF9DUkVBLCAwIH0sCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotICAgIHsgImRhdGUi LCAgICAgICAgICBBVF9EQVRFLCAwIH0sCi0gICAgeyAiZGlzcG9zaXRpb24iLCAgIEFUX0RJU1As IDAgfSwKLSAgICB7ICJlbmNvZGluZyIsICAgICAgQVRfRU5DTywgQ01fSU5WIH0sCi0gICAgeyAi Zm9ybWF0IiwgICAgICAgIEFUX1JFQ0YsIENNX0lOViB9LAotICAgIHsgImxlbmd0aCIsICAgICAg ICBBVF9MRU5LLCAwIH0sCi0gICAgeyAib2ZmIiwgICAgICAgICAgIEFUX0FMTE4sIDAgfSwKLSAg ICB7ICJvbiIsICAgICAgICAgICAgQVRfQUxMWSwgMCB9LAotI2lmZGVmIENPTU1FTlQKLSAgICB7 ICJvcy1zcGVjaWZpYyIsICAgQVRfU1lTUCwgMCB9LCAgICAvKiAobm90IHVzZWQgYnkgVU5JWCBv ciBWTVMpICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmZGVmIENLX1BFUk1TCi0gICAgeyAi cHJvdGVjdGlvbiIsICAgIEFUX0xQUk8sIDAgfSwKLSAgICB7ICJwZXJtaXNzaW9ucyIsICAgQVRf TFBSTywgQ01fSU5WIH0sCi0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLSAgICB7ICJyZWNvcmQtZm9y bWF0IiwgQVRfUkVDRiwgMCB9LAotICAgIHsgInN5c3RlbS1pZCIsICAgICBBVF9TWVNJLCAwIH0s Ci0gICAgeyAidHlwZSIsICAgICAgICAgIEFUX0ZUWVAsIDAgfQotfTsKLWludCBuYXRyID0gKHNp emVvZihhdHRydGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7IC8qIGhvdyBtYW55IGF0dHJp YnV0ZXMgKi8KLQotI2lmZGVmIENLVElETEUKLXN0cnVjdCBrZXl0YWIgaWRsYWN0c1tdID0gewot ICAgIHsgImV4aXQiLCAgICAgICBJRExFX0VYSVQsIDAgfSwKLSAgICB7ICJoYW5ndXAiLCAgICAg SURMRV9IQU5HLCAwIH0sCi0gICAgeyAib3V0cHV0IiwgICAgIElETEVfT1VULCAgMCB9LAotICAg IHsgInJldHVybiIsICAgICBJRExFX1JFVCwgIDAgfSwKLSNpZmRlZiBUTkNPREUKLSAgICB7ICJ0 ZWxuZXQtbm9wIiwgSURMRV9UTk9QLCAwIH0sCi0gICAgeyAidGVsbmV0LWF5dCIsIElETEVfVEFZ VCwgMCB9LAotI2VuZGlmIC8qIFROQ09ERSAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsKLWludCBu aWRsYWN0cyA9IChzaXplb2YoaWRsYWN0cykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsK LSNlbmRpZiAvKiBDS1RJRExFICovCi0KLSNpZm5kZWYgTk9TUEwKLWV4dGVybiBpbnQgaW5kZWYs IGluZWNobywgaW5zaWxlbmNlLCBpbmJ1ZnNpemUsIGluYXV0b2RsLCBpbmludHI7Ci0jaWZkZWYg Q0tGTE9BVAotZXh0ZXJuIENLRkxPQVQgaW5zY2FsZTsKLSNlbmRpZgkvKiBDS0ZMT0FUICovCi1l eHRlcm4gY2hhciAqIGlucGJ1ZiwgKiBpbnBicDsKLSNpZmRlZiBPUzIKLWV4dGVybiBpbnQgaW50 ZXJtOwotI2VuZGlmIC8qIE9TMiAqLwotc3RydWN0IGtleXRhYiBpbnB0YWJbXSA9IHsgICAgICAg ICAgICAgIC8qIFNFVCBJTlBVVCBwYXJhbWV0ZXJzICovCi0jaWZkZWYgQ0tfQVVUT0RMCi0gICAg eyAiYXV0b2Rvd25sb2FkIiwgICAgSU5fQURMLCAwIH0sCi0jZW5kaWYgLyogQ0tfQVVUT0RMICov Ci0gICAgeyAiYnVmZmVyLWxlbmd0aCIsICAgSU5fQlVGLCAwIH0sCi0gICAgeyAiY2FuY2VsbGF0 aW9uIiwgICAgSU5fQ0FOLCAwIH0sCi0gICAgeyAiY2FzZSIsICAgICAgICAgICAgSU5fQ0FTLCAw IH0sCi0gICAgeyAiZGVmYXVsdC10aW1lb3V0IiwgSU5fREVGLCBDTV9JTlYgfSwgLyogVGhlcmUg aXMgbm8gZGVmYXVsdCB0aW1lb3V0ICovCi0gICAgeyAiZWNobyIsICAgICAgICAgICAgSU5fRUNI LCAwIH0sCi0jaWZkZWYgT1MyCi0gICAgeyAicGFjaW5nIiwgICAgICAgICAgSU5fUEFDLCBDTV9J TlYgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB7ICJzY2FsZS1mYWN0b3IiLCAgICBJTl9TQ0Es IDAgfSwKLSAgICB7ICJzaWxlbmNlIiwgICAgICAgICBJTl9TSUwsIDAgfSwKLSNpZmRlZiBPUzIK LSAgICB7ICJ0ZXJtaW5hbCIsICAgICAgICBJTl9UUk0sIDAgfSwKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICB7ICJ0aW1lb3V0LWFjdGlvbiIsICBJTl9USU0sIDAgfQotfTsKLWludCBuaW5wID0gKHNp emVvZihpbnB0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiBp bnRpbXRbXSA9IHsgICAgICAgICAgICAgIC8qIFNFVCBJTlBVVCBUSU1FT1VUIHBhcmFtZXRlcnMg Ki8KLSAgICB7ICJwcm9jZWVkIiwgMCwgMCB9LCAgICAgICAgICAgICAgICAvKiAwID0gcHJvY2Vl ZCAqLwotICAgIHsgInF1aXQiLCAgICAxLCAwIH0gICAgICAgICAgICAgICAgIC8qIDEgPSBxdWl0 ICovCi19OwotCi1zdHJ1Y3Qga2V5dGFiIGluY2FzdFtdID0geyAgICAgICAgICAgICAgLyogU0VU IElOUFVUIENBU0UgcGFyYW1ldGVycyAqLwotICAgIHsgImlnbm9yZSIsICAwLCAwIH0sICAgICAg ICAgICAgICAgIC8qIDAgPSBpZ25vcmUgKi8KLSAgICB7ICJvYnNlcnZlIiwgMSwgMCB9ICAgICAg ICAgICAgICAgICAvKiAxID0gb2JzZXJ2ZSAqLwotfTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1z dHJ1Y3Qga2V5dGFiIG5hYmx0YWJbXSA9IHsgICAgICAgICAgICAgLyogRm9yIGFueSBjb21tYW5k IHRoYXQgbmVlZHMgKi8KLSAgICB7ICJkaXNhYmxlZCIsIDAsIDAgfSwKLSAgICB7ICJlbmFibGVk IiwgIDEsIDAgfSwKLSAgICB7ICJvZmYiLCAgICAgIDAsIENNX0lOViB9LCAgICAgICAgICAvKiB0 aGVzZSBrZXl3b3Jkcy4uLiAqLwotICAgIHsgIm9uIiwgICAgICAgMSwgQ01fSU5WIH0KLX07Ci1p bnQgbm5hYmx0YWIgPSBzaXplb2YobmFibHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYik7Ci0K LSNpZmRlZiBPUzIKLXN0cnVjdCBrZXl0YWIgdHZjdGFiW10gPSB7ICAgICAgICAgICAgICAvKiBT RVQgVEVSTSBWSURFTy1DSEFOR0UgKi8KLSAgICB7ICJkaXNhYmxlZCIsICAgICBUVkNfRElTLCAw IH0sCi0gICAgeyAiZW5hYmxlZCIsICAgICAgVFZDX0VOQSwgMCB9LAotI2lmZGVmIE5UCi0gICAg eyAid2luOTUtc2FmZSIsICAgVFZDX1c5NSwgMCB9LAotI2VuZGlmIC8qIE5UICovCi0gICAgeyAi IiwgMCwgMCB9Ci19OwotaW50IG50dmN0YWIgPSAoc2l6ZW9mKHR2Y3RhYikgLyBzaXplb2Yoc3Ry dWN0IGtleXRhYikpIC0gMTsKLQotc3RydWN0IGtleXRhYiBtc2t0YWJbXSA9IHsgLyogU0VUIE1T LURPUyBLRVJNSVQgY29tcGF0aWJpbGl0aWVzICovCi0jaWZkZWYgQ09NTUVOVAotICAgIHsgImNv bG9yIiwgICAgTVNLX0NPTE9SLCAgMCB9LAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB7ICJm aWxlLXJlbmFtaW5nIiwgTVNLX1JFTiwgMCB9LAotICAgIHsgImtleWNvZGVzIiwgTVNLX0tFWVMs ICAgMCB9Ci19OwotaW50IG5tc2sgPSAoc2l6ZW9mKG1za3RhYikgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIHNjcm51cGRbXSA9IHsgICAgICAgICAgICAgLyogU0VU IFRFUk1JTkFMIFNDUkVFTi1VUERBVEUgKi8KLSAgICB7ICJmYXN0IiwgICBUVFVfRkFTVCwgICAw IH0sCi0gICAgeyAic21vb3RoIiwgVFRVX1NNT09USCwgMCB9Ci19OwotaW50IG5zY3JudXBkID0g KHNpemVvZihzY3JudXBkKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNpZmRlZiBQQ0ZP TlRTCi0vKiBUaGlzIGRlZmluaXRpb24gb2YgdGhlIHRlcm1fZm9udFtdIHRhYmxlIGlzIG9ubHkg Zm9yICAgICAqLwotLyogdGhlIE9TLzIgRnVsbCBTY3JlZW4gU2Vzc2lvbiBhbmQgaXMgbm90IHVz ZWQgb24gV2luZG93cyAqLwotc3RydWN0IGtleXRhYiB0ZXJtX2ZvbnRbXSA9IHsgICAgICAgICAg IC8qIFNFVCBURVJNSU5BTCBGT05UICovCi0jaWZkZWYgQ09NTUVOVAotICAgIHsgImNwMTExIiwg VFRGXzExMSwgMCB9LAotICAgIHsgImNwMTEyIiwgVFRGXzExMiwgMCB9LAotICAgIHsgImNwMTEz IiwgVFRGXzExMywgMCB9LAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB7ICJjcDQzNyIsIFRU Rl80MzcsIDAgfSwKLSAgICB7ICJjcDg1MCIsIFRURl84NTAsIDAgfSwKLSNpZmRlZiBDT01NRU5U Ci0gICAgeyAiY3A4NTEiLCBUVEZfODUxLCAwIH0sCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAg IHsgImNwODUyIiwgVFRGXzg1MiwgMCB9LAotI2lmZGVmIENPTU1FTlQKLSAgICB7ICJjcDg1MyIs IFRURl84NTMsIDAgfSwKLSAgICB7ICJjcDg2MCIsIFRURl84NjAsIDAgfSwKLSAgICB7ICJjcDg2 MSIsIFRURl84NjEsIDAgfSwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgeyAiY3A4NjIiLCBU VEZfODYyLCAwIH0sCi0jaWZkZWYgQ09NTUVOVAotICAgIHsgImNwODYzIiwgVFRGXzg2MywgMCB9 LAotICAgIHsgImNwODY0IiwgVFRGXzg2NCwgMCB9LAotICAgIHsgImNwODY1IiwgVFRGXzg2NSwg MCB9LAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB7ICJjcDg2NiIsIFRURl84NjYsIDAgfSwK LSNpZmRlZiBDT01NRU5UCi0gICAgeyAiY3A4ODAiLCBUVEZfODgwLCAwIH0sCi0gICAgeyAiY3A4 ODEiLCBUVEZfODgxLCAwIH0sCi0gICAgeyAiY3A4ODIiLCBUVEZfODgyLCAwIH0sCi0gICAgeyAi Y3A4ODMiLCBUVEZfODgzLCAwIH0sCi0gICAgeyAiY3A4ODQiLCBUVEZfODg0LCAwIH0sCi0gICAg eyAiY3A4ODUiLCBUVEZfODg1LCAwIH0sCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHsgImRl ZmF1bHQiLFRURl9ST00sMCB9Ci19OwotaW50IG50ZXJtZm9udCA9IChzaXplb2YodGVybV9mb250 KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci1pbnQgdHRfZm9udCA9IFRURl9ST007ICAgICAg ICAgICAgICAgICAgLyogVGVybWluYWwgc2NyZWVuIGZvbnQgKi8KLSNlbHNlIC8qIFBDRk9OVFMg Ki8KLSNpZmRlZiBOVAotI2lmZGVmIEtVSQotc3RydWN0IGtleXRhYiAqIHRlcm1fZm9udCA9IE5V TEw7Ci1zdHJ1Y3Qga2V5dGFiICogX3Rlcm1fZm9udCA9IE5VTEw7Ci1jaGFyICogdHRfZmFjZW5h bWUgPSBOVUxMOwotaW50IG50ZXJtZm9udCA9IDA7Ci1pbnQgdHRfZm9udCA9IDA7Ci1pbnQgdHRf Zm9udF9zaXplID0gMDsKLSNlbmRpZiAvKiBLVUkgKi8KLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlm IC8qIFBDRk9OVFMgKi8KLQotc3RydWN0IGtleXRhYiBhbmJrdGFiW10gPSB7ICAgICAgICAgICAg IC8qIEZvciBhbnkgY29tbWFuZCB0aGF0IG5lZWRzICovCi0gICAgeyAibWVzc2FnZSIsIDIsIDAg fSwgICAgICAgICAgICAgICAgLyogdGhlc2Uga2V5d29yZHMuLi4gKi8KLSAgICB7ICJvZmYiLCAg ICAgMCwgMCB9LAotICAgIHsgIm9uIiwgICAgICAxLCAwIH0sCi0gICAgeyAidW5zYWZlLW1lc3Nh ZzAiLCA5OSwgQ01fSU5WIH0sCi0gICAgeyAidW5zYWZlLW1lc3NhZ2UiLCAzLCAgQ01fSU5WIH0K LX07Ci1pbnQgbmFuc2JrID0gKHNpemVvZihhbmJrdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFi KSk7Ci0KLWludCB3aW45NV9wb3B1cCA9IDE7Ci0jaWZkZWYgTlQKLSNpZmRlZiBLVUkKLWludCB3 aW45NWx1Y2lkYSA9IDA7Ci1pbnQgd2luOTVoc2wgPSAxOwotI2Vsc2UgLyogS1VJICovCi1pbnQg d2luOTVsdWNpZGEgPSAxOwotaW50IHdpbjk1aHNsID0gMTsKLSNlbmRpZiAvKiBLVUkgKi8KLSNl bHNlIC8qIE5UICovCi1pbnQgd2luOTVsdWNpZGEgPSAwOwotaW50IHdpbjk1aHNsID0gMTsKLSNl bmRpZiAvKiBOVCAqLwotI2lmZGVmIE5UCi1pbnQgd2luOTVhbHRnciAgPSAwOwotZXh0ZXJuIGlu dCB3aW45NXNlbGVjdGJ1ZzsKLWV4dGVybiBpbnQgd2luOTVfOF8zOwotCi0jaWZkZWYgQ09NTUVO VAotZXh0ZXJuIENIQVIgKCp4bHJbTUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSkoQ0hBUik7Ci1l eHRlcm4gc3RydWN0IGtleXRhYiB0Y3N0YWJbXTsKLWV4dGVybiBpbnQgbnRjczsKLSNlbmRpZiAv KiBDT01NRU5UICovCi1leHRlcm4gaW50IG1heG93LCBtYXhvd191c3I7IG93d2FpdDsgICAgLyog T3ZlcmxhcHBlZCBJL08gdmFyaWFibGVzICovCi0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBP UzIgKi8KLQotCi0vKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIGJyb2tlbiBvdXQgb2YgZG9wcm0o KSB0byBnaXZlIGNvbXBpbGVycyBhIGJyZWFrLiAqLwotCi0vKiAgUyBFIFQgTyBOICAtLSAgUGFy c2Ugb24vb2ZmIChkZWZhdWx0IG9uKSwgc2V0IHBhcmFtZXRlciB0byByZXN1bHQgICovCi0KLWlu dAotc2V0b24ocHJtKSBpbnQgKnBybTsgewotICAgIGludCB4LCB5OwotICAgIGlmICgoeSA9IGNt a2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICpwcm0gPSB5OwotICAgIHJldHVybigx KTsKLX0KLQotLyogIFMgRSBUIE8gTiBBIFUgVCBPIC0tICBQYXJzZSBvbi9vZmYvYXV0byAoZGVm YXVsdCBhdXRvKSAmIHNldCByZXN1bHQgKi8KLQotc3RydWN0IGtleXRhYiBvbm9mZmF1dFtdID0g ewotICAgIHsgImF1dG8iLCBTRVRfQVVUTywgMCB9LCAgICAgICAgICAgIC8qIDIgKi8KLSAgICB7 ICJvZmYiLCAgU0VUX09GRiwgIDAgfSwgICAgICAgICAgICAvKiAwICovCi0gICAgeyAib24iLCAg IFNFVF9PTiwgICAwIH0gICAgICAgICAgICAgLyogMSAqLwotfTsKLQotaW50Ci1zZXRvbmF1dChw cm0pIGludCAqcHJtOyB7Ci0gICAgaW50IHgsIHk7Ci0gICAgaWYgKCh5ID0gY21rZXkob25vZmZh dXQsMywiIiwiYXV0byIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICBpZiAoKHggPSBj bWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAqcHJtID0geTsKLSAgICByZXR1cm4oMSk7Ci19 Ci0KLS8qICBTIEUgVCBOIFUgTSAgLS0gIFNldCBwYXJhbWV0ZXIgdG8gcmVzdWx0IG9mIGNtbnVt KCkgcGFyc2UuICAqLwotLyoKLSBDYWxsIHdpdGggcG9pbnRlciB0byBpbnRlZ2VyIHZhcmlhYmxl IHRvIGJlIHNldCwKLSAgIHggPSBudW1iZXIgZnJvbSBjbnVtIHBhcnNlLCB5ID0gcmV0dXJuIGNv ZGUgZnJvbSBjbW51bSwKLSAgIG1heCA9IG1heGltdW0gdmFsdWUgdG8gYWNjZXB0LCAtMSBpZiBu byBtYXhpbXVtLgotIFJldHVybnMgLTkgb24gZmFpbHVyZSwgYWZ0ZXIgcHJpbnRpbmcgYSBtZXNz YWdlLCBvciAxIG9uIHN1Y2Nlc3MuCi0qLwotaW50Ci1zZXRudW0ocHJtLHgseSxtYXgpIGludCB4 LCB5LCAqcHJtLCBtYXg7IHsKLSAgICBkZWJ1ZyhGMTAxLCJzZXRudW0iLCIiLHkpOwotICAgIGlm ICh5ID09IC0zKSB7Ci0gICAgICAgIHByaW50ZigiXG4/VmFsdWUgcmVxdWlyZWRcbiIpOwotICAg ICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAoeSA9PSAtMikgewotICAgICAgICBwcmlu dGYoIiVzP05vdCBhIG51bWJlcjogJXNcbiIsY21mbGdzID09IDEgPyAiIiA6ICJcbiIsIGF0eGJ1 Zik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGlmICh5IDwgMCkgcmV0dXJuKHkp OwotICAgIGlmIChtYXggPiAtMSAmJiB4ID4gbWF4KSB7Ci0gICAgICAgIHByaW50ZigiP1NvcnJ5 LCAlZCBpcyB0aGUgbWF4aW11bVxuIixtYXgpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0K LSAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAqcHJtID0geDsKLSAg ICByZXR1cm4oMSk7Ci19Ci0KLS8qICBTIEUgVCBDIEMgIC0tICBTZXQgcGFyYW1ldGVyIHZhciB0 byBhbiBBU0NJSSBjb250cm9sIGNoYXJhY3RlciB2YWx1ZS4gICovCi0vKgotICBQYXJzZXMgYSBu dW1iZXIsIG9yIGEgbGl0ZXJhbCBjb250cm9sIGNoYXJhY3Rlciwgb3IgYSBjYXJldCAoXikgZm9s bG93ZWQKLSAgYnkgYW4gQVNDSUkgY2hhcmFjdGVyIHdob3NlIHZhbHVlIGlzIDYzLTk1IG9yIDk3 LTEyMiwgdGhlbiBnZXRzIGNvbmZpcm1hdGlvbiwKLSAgdGhlbiBzZXRzIHRoZSBwYXJhbWV0ZXIg dG8gdGhlIGNvZGUgdmFsdWUgb2YgdGhlIGNoYXJhY3RlciBnaXZlbi4gIElmIHRoZXJlCi0gIGFy ZSBhbnkgcGFyc2UgZXJyb3JzLCB0aGV5IGFyZSByZXR1cm5lZCwgb3RoZXJ3aXNlIG9uIHN1Y2Nl c3MgMSBpcyByZXR1cm5lZC4KLSovCi1pbnQKLXNldGNjKGRmbHQsdmFyKSBjaGFyICpkZmx0OyBp bnQgKnZhcjsgewotICAgIGludCB4LCB5OwotICAgIHVuc2lnbmVkIGludCBjOwotICAgIGNoYXIg KmhscG1zZyA9ICJDb250cm9sIGNoYXJhY3RlcixcblwKLSBudW1lcmljIEFTQ0lJIHZhbHVlLFxu XAotIG9yIGluIF5YIG5vdGF0aW9uLFxuXAotIG9yIHByZWNlZGVkIGJ5IGEgYmFja3NsYXNoIGFu ZCBlbnRlcmVkIGxpdGVyYWxseSI7Ci0KLSAgICAvKiBUaGlzIGlzIGEgaGFjayB0byB0dXJuIG9m ZiBjb21wbGFpbnRzIGZyb20gZXhwcmVzc2lvbiBldmFsdWF0b3IuICovCi0gICAgeF9pZm51bSA9 IDE7Ci0gICAgeSA9IGNtbnVtKGhscG1zZywgZGZsdCwgMTAsICZ4LCB4eHN0cmluZyk7IC8qIFBh cnNlIGEgbnVtYmVyICovCi0gICAgeF9pZm51bSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEFsbG93IGNvbXBsYWludHMgYWdhaW4gKi8KLSAgICBpZiAoeSA8IDApIHsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSBmYWlsZWQgKi8KLSAgICAgICAgaWYgKHkgIT0g LTIpICAgICAgICAgICAgICAgICAgICAvKiBSZXBhcnNlIG5lZWRlZCBvciBzb21lc3VjaCAqLwot ICAgICAgICAgIHJldHVybih5KTsgICAgICAgICAgICAgICAgICAgIC8qIFBhc3MgZmFpbHVyZSBi YWNrIHVwIHRoZSBjaGFpbiAqLwotICAgIH0KLSAgICAvKiBSZWFsIGNvbnRyb2wgY2hhcmFjdGVy IG9yIGxpdGVyYWwgOC1iaXQgY2hhcmFjdGVyLi4uICovCi0KLSAgICBmb3IgKGMgPSBzdHJsZW4o YXRtYnVmKSAtIDE7IGMgPiAwOyBjLS0pIC8qIFRyaW0gKi8KLSAgICAgIGlmIChhdG1idWZbY10g PT0gU1ApIGF0bWJ1ZltjXSA9IE5VTDsKLQotICAgIGlmICh5IDwgMCkgeyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEl0IHdhcyBub3QgYSBudW1iZXIgKi8KLSAgICAgICAgaWYgKCgoYyA9IGF0 bWJ1ZlswXSkpICYmICFhdG1idWZbMV0pIHsgLyogTGl0ZXJhbCBjaGFyYWN0ZXI/ICovCi0gICAg ICAgICAgICBjICY9IDB4ZmY7Ci0gICAgICAgICAgICBpZiAoKChjID4gMzEpICYmIChjIDwgMTI3 KSkgfHwgKGMgPiAyNTUpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJcbj8lZDogT3V0IG9m IHJhbmdlIC0gbXVzdCBiZSAwLTMxIG9yIDEyNy0yNTVcbiIsYyk7Ci0gICAgICAgICAgICAgICAg cmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCh5 ID0gY21jZm0oKSkgPCAwKSAgLyogQ29uZmlybSAqLwotICAgICAgICAgICAgICAgICAgcmV0dXJu KHkpOwotICAgICAgICAgICAgICAgICp2YXIgPSBjOyAgICAgICAgICAgICAgIC8qIFNldCB0aGUg dmFyaWFibGUgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0gZWxzZSBpZiAoYXRtYnVmWzBdID09ICdeJyAmJiAhYXRtYnVmWzJdKSB7IC8qIE9y IF5YIG5vdGF0aW9uPyAqLwotICAgICAgICAgICAgYyA9IGF0bWJ1ZlsxXTsKLSAgICAgICAgICAg IGlmIChpc2xvd2VyKChjaGFyKSBjKSkgICAgICAvKiBVcHBlcmNhc2UgbG93ZXJjYXNlIGxldHRl cnMgKi8KLSAgICAgICAgICAgICAgYyA9IHRvdXBwZXIoYyk7Ci0gICAgICAgICAgICBpZiAoYyA+ IDYyICYmIGMgPCA5NikgeyAgICAgLyogQ2hlY2sgcmFuZ2UgKi8KLSAgICAgICAgICAgICAgICBp ZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAg ICAgICAgICAgICAgKnZhciA9IGN0bChjKTsgICAgICAgICAgLyogT0sgKi8KLSAgICAgICAgICAg ICAgICByZXR1cm4oMSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBy aW50ZigiP05vdCBhIGNvbnRyb2wgY2hhcmFjdGVyIC0gJXNcbiIsIGF0bWJ1Zik7Ci0gICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTb21ldGhpbmcgaWxsZWdhbCB3YXMgdHlwZWQgKi8KLSAg ICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgLSAlc1xuIiwgYXRtYnVmKTsKLSAgICAgICAgICAg IHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCgoeCA+IDMxKSAmJiAoeCA8 IDEyNykpIHx8ICh4ID4gMjU1KSkgeyAvKiBUaGV5IHR5cGVkIGEgbnVtYmVyICovCi0gICAgICAg IHByaW50ZigiXG4/JWQ6IE91dCBvZiByYW5nZSAtIG11c3QgYmUgMC0zMSBvciAxMjctMjU1XG4i LHgpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAoKHkgPSBjbWNmbSgpKSA8 IDApICAgICAgICAgICAgICAvKiBJbiByYW5nZSwgY29uZmlybSAqLwotICAgICAgcmV0dXJuKHkp OwotICAgICp2YXIgPSB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCB2YXJpYWJs ZSAqLwotICAgIHJldHVybigxKTsKLX0KLQotI2lmbmRlZiBOT1NQTCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFRoZSBTT1JUIGNvbW1hbmQuLi4gKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0 YWIgc3J0c3d0YWJbXSA9IHsgICAgIC8qIFNPUlQgY29tbWFuZCBzd2l0Y2hlcyAqLwotICAgIHsg Ii9jYXNlIiwgICAgU1JUX0NBUywgQ01fQVJHIH0sCi0gICAgeyAiL2tleSIsICAgICBTUlRfS0VZ LCBDTV9BUkcgfSwKLSAgICB7ICIvbnVtZXJpYyIsIFNSVF9OVU0sIDAgfSwKLSAgICB7ICIvcmFu Z2UiLCAgIFNSVF9STkcsIENNX0FSRyB9LAotICAgIHsgIi9yZXZlcnNlIiwgU1JUX1JFViwgMCB9 Ci19Owotc3RhdGljIGludCBuc3J0c3d0YWIgPSBzaXplb2Yoc3J0c3d0YWIpL3NpemVvZihzdHJ1 Y3Qga2V5dGFiKTsKLQotZXh0ZXJuIGNoYXIgKiphX3B0cltdOyAgICAgICAgICAgICAgICAgIC8q IEFycmF5IHBvaW50ZXJzICovCi1leHRlcm4gaW50IGFfZGltW107ICAgICAgICAgICAgICAgICAg ICAgLyogQXJyYXkgZGltZW5zaW9ucyAqLwotCi1pbnQKLWRvc29ydCgpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBEbyB0aGUgU09SVCBjb21tYW5kICovCi0gICAgY2hhciBjLCAq cCA9IE5VTEwsICoqIGFwLCAqKiB4cCA9IE5VTEw7Ci0gICAgc3RydWN0IEZEQiBzdywgZmwsIGNt OwotICAgIGludCBoaSwgbG87Ci0gICAgaW50IHhuID0gMCwgeHIgPSAtMSwgeGsgPSAtMSwgeGMg PSAtMSwgeHMgPSAwOwotICAgIGludCBnZXR2YWwgPSAwLCByYW5nZVsyXSwgY29uZmlybWVkID0g MDsKLQotICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IEZE QiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KLSAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAg ICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAiQXJyYXkgbmFtZSBvciBzd2l0Y2giLAot ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAg ICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0 YSAqLwotICAgICAgICAgICBuc3J0c3d0YWIsICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51 bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotICAgICAgICAgICA0LCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLSAgICAgICAg ICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICov Ci0gICAgICAgICAgIHNydHN3dGFiLCAgICAgICAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJs ZSAqLwotICAgICAgICAgICAmZmwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIg dG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAgKTsKLSAgICBjbWZkYmkoJmZsLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBBbnl0aGluZyB0aGF0IGRvZXNuJ3QgbWF0Y2ggKi8KLSAgICAgICAg ICAgX0NNRkxELCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAi QXJyYXkgbmFtZSIsICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLwotICAgICAgICAgICAiIiwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICov Ci0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJp YyBkYXRhIDIgKi8KLSAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgTlVMTCwKLSAgICAgICAg ICAgJmNtCi0gICAgICAgICAgICk7Ci0gICAgY21mZGJpKCZjbSwgICAgICAgICAgICAgICAgICAg ICAgICAgLyogT3IgcHJlbWF0dXJlIGNvbmZpcm1hdGlvbiAqLwotICAgICAgICAgICBfQ01DRk0s ICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLSAgICAgICAg ICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAq LwotICAgICAgICAgICBOVUxMLAotICAgICAgICAgICBOVUxMLAotICAgICAgICAgICBOVUxMCi0g ICAgICAgICAgICk7Ci0KLSAgICByYW5nZVswXSA9IC0xOwotICAgIHJhbmdlWzFdID0gLTE7Ci0K LSAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSAwIG9yIG1v cmUgc3dpdGNoZXMgKi8KLSAgICAgICAgeCA9IGNtZmRiKCZzdyk7Ci0gICAgICAgIGlmICh4IDwg MCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBf Q01LRVkpICAgLyogQnJlYWsgb3V0IGlmIG5vdCBhIHN3aXRjaCAqLwotICAgICAgICAgIGJyZWFr OwotICAgICAgICBjID0gY21nYnJrKCk7Ci0gICAgICAgIGdldHZhbCA9IChjID09ICc6JyB8fCBj ID09ICc9Jyk7Ci0gICAgICAgIGlmIChnZXR2YWwgJiYgIShjbXJlc3VsdC5rZmxhZ3MgJiBDTV9B UkcpKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFy Z3VtZW50c1xuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAg IHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewotICAgICAgICAgIGNhc2UgU1JUX1JFVjoKLSAg ICAgICAgICAgIHhyID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgU1JU X0tFWToKLSAgICAgICAgICAgIGlmIChnZXR2YWwpIHsKLSAgICAgICAgICAgICAgICBpZiAoKHkg PSBjbW51bSgiQ29sdW1uIGZvciBjb21wYXJpc29uICgxLWJhc2VkKSIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIjEiLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAg ICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIHhrID0geCAtIDE7Ci0gICAgICAgICAg ICB9IGVsc2UKLSAgICAgICAgICAgICAgeGsgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgY2FzZSBTUlRfQ0FTOgotICAgICAgICAgICAgaWYgKGdldHZhbCkgewotICAgICAgICAg ICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkKLSAg ICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICB4YyA9IHk7Ci0gICAg ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgeGMgPSAxOwotICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgY2FzZSBTUlRfUk5HOiAgICAgICAgICAgICAgICAgLyogL1JBTkdFICovCi0g ICAgICAgICAgICBpZiAoZ2V0dmFsKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBidWZbMzJdOwot ICAgICAgICAgICAgICAgIGNoYXIgYnVmMlsxNl07Ci0gICAgICAgICAgICAgICAgaW50IGk7Ci0g ICAgICAgICAgICAgICAgY2hhciAqIHAsICogcTsKLSAgICAgICAgICAgICAgICBpZiAoKHkgPSBj bWZsZCgibG93OmhpZ2ggZWxlbWVudCIsIjEiLCZzLE5VTEwpKSA8IDApCi0gICAgICAgICAgICAg ICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7Ci0gICAgICAg ICAgICAgICAgY2tzdHJuY3B5KGJ1ZixzLDMyKTsKLSAgICAgICAgICAgICAgICBwID0gYnVmOwot ICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7ICpwICYmIGkgPCAyOyBpKyspIHsgLyogR2V0IGxv dyBhbmQgaGlnaCAqLwotICAgICAgICAgICAgICAgICAgICBxID0gcDsgICAgICAgICAgICAgIC8q IFN0YXJ0IG9mIHRoaXMgcGllY2UgKi8KLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpwKSB7 ICAgICAgICAvKiBGaW5kIGVuZCBvZiB0aGlzIHBpZWNlICovCi0gICAgICAgICAgICAgICAgICAg ICAgICBpZiAoKnAgPT0gJzonKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnAgPSBO VUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgIHkgPSAxNTsgICAgICAgICAgICAgLyogRXZhbHVhdGUgdGhpcyBwaWVjZSAqLwotICAgICAg ICAgICAgICAgICAgICBzID0gYnVmMjsKLSAgICAgICAgICAgICAgICAgICAgenpzdHJpbmcocSwm cywmeSk7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSBldmFseChidWYyKTsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKHMpIGlmICgqcykgY2tzdHJuY3B5KGJ1ZjIscywxNik7Ci0gICAgICAgICAg ICAgICAgICAgIGlmICghcmRpZ2l0cyhidWYyKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCI/Tm90IG51bWVyaWM6ICVzXG4iLGJ1ZjIpOwotICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICByYW5nZVtpXSA9IGF0b2koYnVmMik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBTUlRfTlVNOiAgICAgICAgICAg ICAgICAgLyogL05VTUVSSUMgKi8KLSAgICAgICAgICAgIHhuID0gMTsKLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAg ICB9Ci0gICAgfQotICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsKLSAgICAgIGNhc2UgX0NN Q0ZNOgotICAgICAgICBjb25maXJtZWQgPSAxOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug X0NNRkxEOgotICAgICAgICBja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJ Wik7IC8qIFNhZmUgY29weSBvZiBuYW1lICovCi0gICAgICAgIHMgPSBsaW5lOwotICAgICAgICBi cmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByaW50ZigiP1VuZXhwZWN0ZWQgZnVuY3Rp b24gY29kZTogJWRcbiIsY21yZXN1bHQuZmNvZGUpOwotICAgICAgICByZXR1cm4oLTkpOwotICAg IH0KLSAgICBpZiAoY29uZmlybWVkKSB7Ci0gICAgICAgIHByaW50ZigiP0FycmF5IG5hbWUgcmVx dWlyZWRcbiIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBja21ha21zZyh0bXBi dWYsVE1QQlVGU0laLAotICAgICAgICAgICAgICJTZWNvbmQgYXJyYXkgdG8gc29ydCBhY2NvcmRp bmcgdG8gIixzLE5VTEwsTlVMTCk7Ci0gICAgaWYgKCh4ID0gY21mbGQodG1wYnVmLCIiLCZwLE5V TEwpKSA8IDApCi0gICAgICBpZiAoeCAhPSAtMykKLSAgICAgICAgcmV0dXJuKHgpOwotICAgIHRt cGJ1ZlswXSA9IE5VTDsKLSAgICBja3N0cm5jcHkodG1wYnVmLHAsVE1QQlVGU0laKTsKLSAgICBw ID0gdG1wYnVmOwotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgICAgICAgICAgICAgIC8qIEdl dCBjb25maXJtYXRpb24gKi8KLSAgICAgIHJldHVybih4KTsKLQotICAgIHggPSBhcnJheWJvdW5k cyhzLCZsbywmaGkpOyAgICAgICAgIC8qIEdldCBhcnJheSBpbmRleCAmIGJvdW5kcyAqLwotICAg IGlmICh4IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrICovCi0gICAgICAg IHByaW50ZigiP0JhZCBhcnJheSBuYW1lOiAlc1xuIixzKTsKLSAgICAgICAgcmV0dXJuKC05KTsK LSAgICB9Ci0gICAgaWYgKGxvID4gLTEpIHJhbmdlWzBdID0gbG87ICAgICAgICAgLyogU2V0IHJh bmdlICovCi0gICAgaWYgKGhpID4gLTEpIHJhbmdlWzFdID0gaGk7Ci0gICAgYXAgPSBhX3B0clt4 XTsgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHBvaW50ZXIgdG8gYXJyYXkgZWxlbWVudCBs aXN0ICovCi0gICAgaWYgKCFhcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sg Ki8KLSAgICAgICAgcHJpbnRmKCI/QXJyYXkgbm90IGRlY2xhcmVkOiAlc1xuIiwgcyk7Ci0gICAg ICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGlmIChyYW5nZVswXSA8IDApICAgICAgICAgICAg ICAgICAgIC8qIFN0YXJ0aW5nIGVsZW1lbnQgKi8KLSAgICAgIHJhbmdlWzBdID0gMTsKLSAgICBp ZiAocmFuZ2VbMV0gPCAwKSAgICAgICAgICAgICAgICAgICAvKiBGaW5hbCBlbGVtZW50ICovCi0g ICAgICByYW5nZVsxXSA9IGFfZGltW3hdOwotICAgIGlmIChyYW5nZVsxXSA+IGFfZGltW3hdKSB7 Ci0gICAgICAgIHByaW50ZigiP3JhbmdlICVkOiVkIGV4Y2VlZHMgYXJyYXkgZGltZW5zaW9uICVk XG4iLAotICAgICAgICAgICAgICAgcmFuZ2VbMF0scmFuZ2VbMV0sYV9kaW1beF0KLSAgICAgICAg ICAgICAgICk7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGFwICs9IHJhbmdlWzBd OwotICAgIHhzID0gcmFuZ2VbMV0gLSByYW5nZVswXSArIDE7ICAgICAgIC8qIE51bWJlciBvZiBl bGVtZW50cyB0byBzb3J0ICovCi0gICAgaWYgKHhzIDwgMSkgeyAgICAgICAgICAgICAgICAgICAg ICAgLyogQ2hlY2sgKi8KLSAgICAgICAgcHJpbnRmKCI/QmFkIHJhbmdlOiAlZDolZFxuIixyYW5n ZVswXSxyYW5nZVsxXSk7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGlmICh4ayA8 IDApIHhrID0gMDsgICAgICAgICAgICAgICAgIC8qIEtleSBwb3NpdGlvbiAqLwotICAgIGlmICh4 ciA8IDApIHhyID0gMDsgICAgICAgICAgICAgICAgIC8qIFJldmVyc2UgZmxhZyAqLwotICAgIGlm ICh4bikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWVyaWMgZmxhZyAqLwotICAg ICAgeGMgPSAyOwotICAgIGVsc2UgaWYgKHhjIDwgMCkgICAgICAgICAgICAgICAgICAgIC8qIE5v dCBudW1lcmljICovCi0gICAgICB4YyA9IGlucGNhc1tjbWRsdmxdOyAgICAgICAgICAgICAgLyog c28gYWxwaGEgY2FzZSBvcHRpb24gKi8KLQotICAgIGlmICgqcCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFBhcmFsbGVsIGFycmF5IGdpdmVuPyAqLwotICAgICAgICB5ID0geGFycmF5 KHApOyAgICAgICAgICAgICAgICAgIC8qIFllcywgZ2V0IGl0cyBpbmRleC4gKi8KLSAgICAgICAg aWYgKHkgPCAwKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9CYWQgYXJyYXkgbmFtZTogJXNcbiIs IHApOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoeSAh PSB4KSB7ICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZSAyIGFycmF5cyBhcmUgZGlmZmVyZW50 ICAqLwotICAgICAgICAgICAgeHAgPSBhX3B0clt5XTsgICAgICAgICAgICAgIC8qIFBvaW50ZXIg dG8gMm5kIGFycmF5IGVsZW1lbnQgbGlzdCAqLwotICAgICAgICAgICAgaWYgKCF4cCkgewotICAg ICAgICAgICAgICAgIHByaW50ZigiP0FycmF5IG5vdCBkZWNsYXJlZDogJXNcbiIsIHApOwotICAg ICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo YV9kaW1beV0gPCByYW5nZVsxXSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP0FycmF5ICVz IHNtYWxsZXIgdGhhbiAlc1xuIiwgcCwgcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHhwICs9IHJhbmdlWzBdOyAgICAgICAgICAgICAv KiBTZXQgYmFzZSB0byBzYW1lIGFzIDFzdCBhcnJheSAqLwotICAgICAgICB9Ci0gICAgfQotICAg IHNoX3NvcnQoYXAseHAseHMseGsseHIseGMpOyAgICAgICAgIC8qIFNvcnQgdGhlIGFycmF5KHMp ICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsgICAgICAgICAgICAgICAgLyogQWx3YXlzIHN1 Y2NlZWRzICovCi19Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIg cHVyZ3RhYltdID0geyAgICAgIC8qIFBVUkdFIGNvbW1hbmQgc3dpdGNoZXMgKi8KLSAgICB7ICIv YWZ0ZXIiLCAgICAgICAgUFVfQUZULCAgQ01fQVJHIH0sCi0gICAgeyAiL2FzayIsICAgICAgICAg IFBVX0FTSywgIDAgfSwKLSAgICB7ICIvYmVmb3JlIiwgICAgICAgUFVfQkVGLCAgQ01fQVJHIH0s Ci0gICAgeyAiL2RlbGV0ZSIsICAgICAgIFBVX0RFTEUsIENNX0lOViB9LAotI2lmZGVmIFVOSVhP Uk9TSwotICAgIHsgIi9kb3RmaWxlcyIsICAgICBQVV9ET1QsICAwIH0sCi0jZW5kaWYgLyogVU5J WE9ST1NLICovCi0gICAgeyAiL2V4Y2VwdCIsICAgICAgIFBVX0VYQywgIENNX0FSRyB9LAotICAg IHsgIi9oZWFkaW5nIiwgICAgICBQVV9IREcsICAwIH0sCi0gICAgeyAiL2tlZXAiLCAgICAgICAg IFBVX0tFRVAsIENNX0FSRyB9LAotICAgIHsgIi9sYXJnZXItdGhhbiIsICBQVV9MQVIsICBDTV9B UkcgfSwKLSAgICB7ICIvbGlzdCIsICAgICAgICAgUFVfTElTVCwgMCB9LAotICAgIHsgIi9sb2ci LCAgICAgICAgICBQVV9MSVNULCBDTV9JTlYgfSwKLSAgICB7ICIvbm9hc2siLCAgICAgICAgUFVf TkFTSywgMCB9LAotICAgIHsgIi9ub2RlbGV0ZSIsICAgICBQVV9OT0RFLCBDTV9JTlYgfSwKLSNp ZmRlZiBVTklYT1JPU0sKLSAgICB7ICIvbm9kb3RmaWxlcyIsICAgUFVfTk9ET1QsMCB9LAotI2Vu ZGlmIC8qIFVOSVhPUk9TSyAqLwotICAgIHsgIi9ub2hlYWRpbmciLCAgICBQVV9OT0gsICAwIH0s Ci0gICAgeyAiL25vbCIsICAgICAgICAgIFBVX05PTEksIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7 ICIvbm9saXN0IiwgICAgICAgUFVfTk9MSSwgMCB9LAotICAgIHsgIi9ub2xvZyIsICAgICAgICBQ VV9OT0xJLCBDTV9JTlYgfSwKLSNpZmRlZiBDS19UVEdXU0laCi0gICAgeyAiL25vcGFnZSIsICAg ICAgIFBVX05PUEEsIDAgfSwKLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0gICAgeyAiL25vdC1h ZnRlciIsICAgIFBVX05BRiwgIENNX0FSRyB9LAotICAgIHsgIi9ub3QtYmVmb3JlIiwgICBQVV9O QkYsICBDTV9BUkcgfSwKLSAgICB7ICIvbm90LXNpbmNlIiwgICAgUFVfTkFGLCAgQ01fSU5WfENN X0FSRyB9LAotI2lmZGVmIENLX1RUR1dTSVoKLSAgICB7ICIvcGFnZSIsICAgICAgICAgUFVfUEFH RSwgMCB9LAotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICB7ICIvcXVpZXQiLCAgICAgICAg UFVfUVVJRSwgQ01fSU5WIH0sCi0jaWZkZWYgUkVDVVJTSVZFCi0gICAgeyAiL3JlY3Vyc2l2ZSIs ICAgIFBVX1JFQ1UsIDAgfSwKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSAgICB7ICIvc2luY2Ui LCAgICAgICAgUFVfQUZULCAgQ01fQVJHfENNX0lOViB9LAotICAgIHsgIi9zaW11bGF0ZSIsICAg ICBQVV9OT0RFLCAwIH0sCi0gICAgeyAiL3NtYWxsZXItdGhhbiIsIFBVX1NNQSwgIENNX0FSRyB9 LAotICAgIHsgIi92ZXJib3NlIiwgICAgICBQVV9WRVJCLCBDTV9JTlYgfQotfTsKLXN0YXRpYyBp bnQgbnB1cmd0YWIgPSBzaXplb2YocHVyZ3RhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotCi0K LQotCi0KLWludAotYmt1cG51bShzLGkpIGNoYXIgKiBzOyBpbnQgKmk7IHsKLSAgICBpbnQgayA9 IDAsIHBvcyA9IDA7Ci0gICAgY2hhciAqIHAgPSBOVUxMLCAqcTsKLSAgICAqaSA9IHBvczsKLSAg ICBpZiAoIXMpIHMgPSAiIjsKLSAgICBpZiAoISpzKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBp ZiAoKGsgPSBzdHJsZW4ocykpIDwgNSkKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAoc1tr LTFdICE9ICd+JykKLSAgICAgIHJldHVybigtMSk7Ci0gICAgcG9zID0gayAtIDI7Ci0gICAgcSA9 IHMgKyBwb3M7Ci0gICAgd2hpbGUgKHEgPj0gcyAmJiBpc2RpZ2l0KCpxKSkgewotICAgICAgICBw ID0gcS0tOwotICAgICAgICBwb3MtLTsKLSAgICB9Ci0gICAgaWYgKCFwKQotICAgICAgcmV0dXJu KC0xKTsKLSAgICBpZiAocSA8IHMrMikKLSAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKCpxICE9 ICd+JyB8fCAqKHEtMSkgIT0gJy4nKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBwb3MtLTsKLSAg ICAqaSA9IHBvczsKLSAgICBkZWJ1ZyhGMTExLCJia3VwbnVtIixzK3Bvcyxwb3MpOwotICAgIHJl dHVybihhdG9pKHApKTsKLX0KLQotI2lmZGVmIENLUFVSR0UKLS8qIFByZXNlbnRseSBvbmx5IGZv ciBVTklYIGJlY2F1c2Ugd2UgbmVlZCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBmaWxlIGFycmF5LiAq LwotLyogTm90IG5lZWRlZCBmb3IgVk1TIGFueXdheSwgYmVjYXVzZSB3ZSBkb24ndCBtYWtlIGJh Y2t1cCBmaWxlcyB0aGVyZS4gKi8KLQotI2RlZmluZSBNQVhLRUVQIDMyICAgICAgICAgICAgICAg ICAgICAgIC8qIEJpZ2dlc3QgL0tFRVA6IHZhbHVlICovCi0KLXN0YXRpYyBpbnQKLSAgcHVfa2Vl cCA9IDAsIHB1X2xpc3QgPSAwLCBwdV9kb3QgPSAwLCBwdV9hc2sgPSAwLCBwdV9oZGcgPSAwOwot Ci0jaWZkZWYgQ0tfVFRHV1NJWgotc3RhdGljIGludCBwdV9wYWdlID0gLTE7Ci0jZWxzZQotc3Rh dGljIGludCBwdV9wYWdlID0gMDsKLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0KLSNpZm5kZWYg Tk9TSE9XCi1WT0lECi1zaG93cHVyZ29wdHMoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyog U0hPVyBQVVJHRSBjb21tYW5kIG9wdGlvbnMgKi8KLSAgICBpbnQgeCA9IDA7Ci0gICAgZXh0ZXJu IGludCBvcHRsaW5lczsKLSAgICBwcnRvcHQoJm9wdGxpbmVzLCJQVVJHRSIpOwotICAgIGlmIChw dV9hc2sgPiAtMSkgewotICAgICAgICB4Kys7Ci0gICAgICAgIHBydG9wdCgmb3B0bGluZXMsIHB1 X2FzayA/ICIvQVNLIiA6ICIvTk9BU0siKTsKLSAgICB9Ci0jaWZkZWYgVU5JWE9ST1NLCi0gICAg aWYgKHB1X2RvdCA+IC0xKSB7Ci0gICAgICAgIHgrKzsKLSAgICAgICAgcHJ0b3B0KCZvcHRsaW5l cywgcHVfZG90ID8gIi9ET1RGSUxFUyIgOiAiL05PRE9URklMRVMiKTsKLSAgICB9Ci0jZW5kaWYg LyogVU5JWE9ST1NLICovCi0gICAgaWYgKHB1X2tlZXAgPiAtMSkgewotICAgICAgICB4Kys7Ci0g ICAgICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosIi9LRUVQOiIsY2tpdG9hKHB1X2tlZXAp LE5VTEwsTlVMTCk7Ci0gICAgICAgIHBydG9wdCgmb3B0bGluZXMsdG1wYnVmKTsKLSAgICB9Ci0g ICAgaWYgKHB1X2xpc3QgPiAtMSkgewotICAgICAgICB4Kys7Ci0gICAgICAgIHBydG9wdCgmb3B0 bGluZXMsIHB1X2xpc3QgPyAiL0xJU1QiIDogIi9OT0xJU1QiKTsKLSAgICB9Ci0gICAgaWYgKHB1 X2hkZyA+IC0xKSB7Ci0gICAgICAgIHgrKzsKLSAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcywgcHVf aGRnID8gIi9IRUFESU5HIiA6ICIvTk9IRUFESU5HIik7Ci0gICAgfQotI2lmZGVmIENLX1RUR1dT SVoKLSAgICBpZiAocHVfcGFnZSA+IC0xKSB7Ci0gICAgICAgIHgrKzsKLSAgICAgICAgcHJ0b3B0 KCZvcHRsaW5lcywgcHVfcGFnZSA/ICIvUEFHRSIgOiAiL05PUEFHRSIpOwotICAgIH0KLSNlbmRp ZiAvKiBDS19UVEdXU0laICovCi0gICAgaWYgKCF4KSBwcnRvcHQoJm9wdGxpbmVzLCIobm8gb3B0 aW9ucyBzZXQpIik7Ci0gICAgcHJ0b3B0KCZvcHRsaW5lcywiIik7Ci19Ci0jZW5kaWYgLyogTk9T SE9XICovCi0KLWludAotc2V0cHVyZ29wdHMoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFNldCBQVVJHRSBjb21tYW5kIG9wdGlvbnMgKi8KLSAgICBpbnQgYywgeiwgZ2V0dmFsID0gMDsK LSAgICBpbnQKLSAgICAgIHhfa2VlcCAgPSAtMSwgeF9saXN0ID0gLTEsIHhfcGFnZSA9IC0xLAot ICAgICAgeF9oZGcgICA9IC0xLCB4X2FzayAgPSAtMSwgeF9kb3QgID0gLTE7Ci0KLSAgICB3aGls ZSAoMSkgewotICAgICAgICBpZiAoKHkgPSBjbXN3aShwdXJndGFiLG5wdXJndGFiLCJTd2l0Y2gi LCIiLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoeSA9PSAtMykKLSAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHJldHVybih5KTsK LSAgICAgICAgfQotICAgICAgICBjID0gY21nYnJrKCk7Ci0gICAgICAgIGlmICgoZ2V0dmFsID0g KGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAg ICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRc biIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWdl dHZhbCAmJiAoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9U aGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICByZXR1cm4o LTkpOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoeSkgewotICAgICAgICAgIGNhc2UgUFVf S0VFUDoKLSAgICAgICAgICAgIHogPSAxOwotICAgICAgICAgICAgaWYgKGMgPT0gJzonIHx8IGMg PT0gJz0nKQotICAgICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiSG93IG1hbnkgYmFja3VwIGZp bGVzIHRvIGtlZXAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIsMTAsJnoseHhz dHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgaWYg KHogPCAwIHx8IHogPiBNQVhLRUVQKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/UGxlYXNl IHNwZWNpZnkgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAlZFxuIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgTUFYS0VFUAotICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAg IHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4X2tlZXAgPSB6OwotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBQVV9MSVNUOgotICAgICAgICAgIGNhc2Ug UFVfVkVSQjoKLSAgICAgICAgICAgIHhfbGlzdCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICBjYXNlIFBVX1FVSUU6Ci0gICAgICAgICAgY2FzZSBQVV9OT0xJOgotICAgICAgICAg ICAgeF9saXN0ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIENLX1RUR1dTSVoKLSAg ICAgICAgICBjYXNlIFBVX1BBR0U6Ci0gICAgICAgICAgICB4X3BhZ2UgPSAxOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBQVV9OT1BBOgotICAgICAgICAgICAgeF9wYWdlID0g MDsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICAgICAg ICBjYXNlIFBVX0hERzoKLSAgICAgICAgICAgIHhfaGRnID0gMTsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgIGNhc2UgUFVfTk9IOgotICAgICAgICAgICAgeF9oZGcgPSAwOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBQVV9BU0s6Ci0gICAgICAgICAgICB4X2FzayA9 IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFBVX05BU0s6Ci0gICAgICAg ICAgICB4X2FzayA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSNpZmRlZiBVTklYT1JPU0sKLSAg ICAgICAgICBjYXNlIFBVX0RPVDoKLSAgICAgICAgICAgIHhfZG90ID0gMTsKLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIGNhc2UgUFVfTk9ET1Q6Ci0gICAgICAgICAgICB4X2RvdCA9IDA7 Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSAgICAgICAgICBk ZWZhdWx0OgotICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBvcHRpb24gY2FuIG5vdCBiZSBzZXRc biIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApICAgICAgICAgICAgICAvKiBHZXQgY29uZmlybWF0aW9uICovCi0g ICAgICByZXR1cm4oeCk7Ci0gICAgaWYgKHhfa2VlcCA+IC0xKSAgICAgICAgICAgICAgICAgICAg LyogU2V0IFBVUkdFIGRlZmF1bHRzLiAqLwotICAgICAgcHVfa2VlcCA9IHhfa2VlcDsKLSAgICBp ZiAoeF9saXN0ID4gLTEpCi0gICAgICBwdV9saXN0ID0geF9saXN0OwotI2lmZGVmIENLX1RUR1dT SVoKLSAgICBpZiAoeF9wYWdlID4gLTEpCi0gICAgICBwdV9wYWdlID0geF9wYWdlOwotI2VuZGlm IC8qIENLX1RUR1dTSVogKi8KLSAgICBpZiAoeF9oZGcgPiAtMSkKLSAgICAgIHB1X2hkZyA9IHhf aGRnOwotICAgIGlmICh4X2FzayA+IC0xKQotICAgICAgcHVfYXNrID0geF9hc2s7Ci0gICAgaWYg KHhfZG90ID4gLTEpCi0gICAgICBwdV9kb3QgPSB4X2RvdDsKLSAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwotfQotCi1pbnQKLWRvcHVyZ2UoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBEbyB0aGUgUFVSR0UgY29tbWFuZCAqLwotICAgIGV4dGVybiBjaGFyICoqIG10Y2hzOwotICAg IGV4dGVybiBpbnQgeGFza21vcmUsIGNtZF9yb3dzLCByZWN1cnNpdmU7Ci0gICAgaW50IHNpbXVs YXRlID0gMCwgYXNraW5nID0gMDsKLSAgICBpbnQgbGlzdGluZyA9IDAsIHBhZ2luZyA9IC0xLCBs aW5lcyA9IDAsIGRlbGV0aW5nID0gMSwgZXJyb3JzID0gMDsKLSAgICBzdHJ1Y3QgRkRCIHN3LCBz ZiwgY207Ci0gICAgaW50IGcsIGksIGosIGssIG0gPSAwLCBuLCB4LCB5LCB6LCBkb25lID0gMCwg Y291bnQgPSAwLCBmbGFncyA9IDA7Ci0gICAgaW50IHRva2VlcCA9IDAsIGdldHZhbCA9IDAsIGhh dmVuYW1lID0gMCwgY29uZmlybWVkID0gMDsKLSAgICBpbnQgeHhbTUFYS0VFUCsxXTsgICAgICAg ICAgICAgICAgICAvKiBBcnJheSBvZiBudW1iZXJzIHRvIGtlZXAgKi8KLSAgICBpbnQgbWluID0g LTE7Ci0gICAgaW50IHhfaGRnID0gMCwgZnMgPSAwLCByYyA9IDA7Ci0gICAgQ0tfT0ZGX1QgbWlu c2l6ZSA9IC0xTCwgbWF4c2l6ZSA9IC0xTDsKLSAgICBjaGFyIG5hbWVidWZbQ0tNQVhQQVRIKzRd OwotICAgIGNoYXIgYmFzZWJ1ZltDS01BWFBBVEgrNF07Ci0gICAgY2hhcgotICAgICAgKiBwdV9h ZnQgPSBOVUxMLAotICAgICAgKiBwdV9iZWYgPSBOVUxMLAotICAgICAgKiBwdV9uYWYgPSBOVUxM LAotICAgICAgKiBwdV9uYmYgPSBOVUxMLAotICAgICAgKiBwdV9leGMgPSBOVUxMOwotICAgIGNo YXIgKiBweGxpc3RbOF07ICAgICAgICAgICAgICAgICAgIC8qIEV4Y2VwdGlvbiBsaXN0ICovCi0K LSAgICBpZiAocHVfa2VlcCA+IC0xKSAgICAgICAgICAgICAgICAgICAvKiBTZXQgUFVSR0UgZGVm YXVsdHMuICovCi0gICAgICB0b2tlZXAgPSBwdV9rZWVwOwotICAgIGlmIChwdV9saXN0ID4gLTEp Ci0gICAgICBsaXN0aW5nID0gcHVfbGlzdDsKLSNpZmRlZiBDS19UVEdXU0laCi0gICAgaWYgKHB1 X3BhZ2UgPiAtMSkKLSAgICAgIHBhZ2luZyA9IHB1X3BhZ2U7Ci0jZW5kaWYgLyogQ0tfVFRHV1NJ WiAqLwotCi0gICAgZm9yIChpID0gMDsgaSA8PSBNQVhLRUVQOyBpKyspICAgICAgLyogQ2xlYXIg dGhpcyBudW1iZXIgYnVmZmVyICovCi0gICAgICB4eFtpXSA9IDA7Ci0gICAgZm9yIChpID0gMDsg aSA8IDg7IGkrKykgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGVzZS4uLiAqLwotICAgICAg cHhsaXN0W2ldID0gTlVMTDsKLQotICAgIGdfbWF0Y2hkb3QgPSBtYXRjaGRvdDsgICAgICAgICAg ICAgIC8qIFNhdmUgdGhlc2UuLi4gKi8KLQotICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDFzdCBGREIgLSBQVVJHRSBzd2l0Y2hlcyAqLwotICAgICAgICAgICBfQ01L RVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICJGaWxlbmFt ZSBvciBzd2l0Y2giLCAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIG5wdXJn dGFiLCAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXpl ICovCi0gICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAg ICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgcHVyZ3RhYiwg ICAgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICZzZiAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAg ICAgICApOwotICAgIGNtZmRiaSgmc2YsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDJuZCBG REIgLSBmaWxlc3BlYyB0byBwdXJnZSAqLwotICAgICAgICAgICBfQ01JRkksICAgICAgICAgICAg ICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICIiLAotICAgICAgICAgICAiIiwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0g ICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBk YXRhIDIgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsCi0gICAgICAgICAgIE5VTEwsCi0gICAgICAg ICAgICZjbQotICAgICAgICAgICApOwotICAgIGNtZmRiaSgmY20sICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE9yIHByZW1hdHVyZSBjb25maXJtYXRpb24gKi8KLSAgICAgICAgICAgX0NNQ0ZN LCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAiIiwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLwotICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0gICAgICAg ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIg Ki8KLSAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgTlVMTAot ICAgICAgICAgICApOwotCi0gICAgd2hpbGUgKCFoYXZlbmFtZSAmJiAhY29uZmlybWVkKSB7Ci0g ICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAgICAgICAgICAgLyogUGFyc2Ugc29tZXRoaW5n ICovCi0gICAgICAgIGlmICh4IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgKi8K LSAgICAgICAgICAgIHJjID0geDsKLSAgICAgICAgICAgIGdvdG8geHB1cmdlOwotICAgICAgICB9 IGVsc2UgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUtFWSkgewotICAgICAgICAgICAgY2hhciBj OwotICAgICAgICAgICAgYyA9IGNtZ2JyaygpOwotICAgICAgICAgICAgaWYgKChnZXR2YWwgPSAo YyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotICAg ICAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1l bnRcbiIpOwotICAgICAgICAgICAgICAgIHJjID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byB4 cHVyZ2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWdldHZhbCAmJiAoY21na3dm bGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2gg cmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwotICAgICAgICAgICAgICAgIHJjID0gLTk7Ci0gICAg ICAgICAgICAgICAgZ290byB4cHVyZ2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzd2l0 Y2ggKGsgPSBjbXJlc3VsdC5ucmVzdWx0KSB7Ci0gICAgICAgICAgICAgIGNhc2UgUFVfS0VFUDoK LSAgICAgICAgICAgICAgICB6ID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnOicgfHwg YyA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIkhvdyBtYW55 IGJhY2t1cCBmaWxlcyB0byBrZWVwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIjEiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy YyA9IHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhwdXJnZTsKLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoeiA8IDAg fHwgeiA+IE1BWEtFRVApIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/UGxlYXNlIHNw ZWNpZnkgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIE1BWEtFRVAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICAgICAgICAgIHJjID0gLTk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8geHB1cmdlOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0b2tlZXAgPSB6OwotICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFBVX0xJU1Q6Ci0gICAgICAgICAgICAgICAg bGlzdGluZyA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug UFVfTk9MSToKLSAgICAgICAgICAgICAgICBsaXN0aW5nID0gMDsKLSAgICAgICAgICAgICAgICBi cmVhazsKLSNpZmRlZiBDS19UVEdXU0laCi0gICAgICAgICAgICAgIGNhc2UgUFVfUEFHRToKLSAg ICAgICAgICAgICAgICBwYWdpbmcgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICBjYXNlIFBVX05PUEE6Ci0gICAgICAgICAgICAgICAgcGFnaW5nID0gMDsKLSAgICAg ICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0gICAgICAgICAgICAg IGNhc2UgUFVfREVMRToKLSAgICAgICAgICAgICAgICBkZWxldGluZyA9IDE7Ci0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgUFVfTk9ERToKLSAgICAgICAgICAgICAg ICBkZWxldGluZyA9IDA7Ci0gICAgICAgICAgICAgICAgc2ltdWxhdGUgPSAxOwotICAgICAgICAg ICAgICAgIGxpc3RpbmcgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICBjYXNlIFBVX0FTSzoKLSAgICAgICAgICAgICAgICBhc2tpbmcgPSAxOwotICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFBVX05BU0s6Ci0gICAgICAgICAgICAgICAg YXNraW5nID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBQ VV9BRlQ6Ci0gICAgICAgICAgICAgIGNhc2UgUFVfQkVGOgotICAgICAgICAgICAgICBjYXNlIFBV X05BRjoKLSAgICAgICAgICAgICAgY2FzZSBQVV9OQkY6Ci0gICAgICAgICAgICAgICAgaWYgKCh4 ID0gY21kYXRlKCJGaWxlLXRpbWUiLCIiLCZzLDAseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiP0RhdGUtdGltZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByYyA9 IC05OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBy YyA9IHg7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8geHB1cmdlOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICBmcysrOwotICAgICAgICAgICAgICAgIHN3aXRjaCAoaykgewot ICAgICAgICAgICAgICAgICAgY2FzZSBQVV9BRlQ6IG1ha2VzdHIoJnB1X2FmdCxzKTsgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICBjYXNlIFBVX0JFRjogbWFrZXN0cigmcHVfYmVmLHMpOyBicmVh azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgUFVfTkFGOiBtYWtlc3RyKCZwdV9uYWYscyk7IGJy ZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBQVV9OQkY6IG1ha2VzdHIoJnB1X25iZixzKTsg YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICBjYXNlIFBVX1NNQToKLSAgICAgICAgICAgICAgY2FzZSBQVV9MQVI6Ci0gICAgICAg ICAgICAgICAgaWYgKCh4ID0gY21udW0oIkZpbGUgc2l6ZSBpbiBieXRlcyIsIjAiLDEwLCZ5LHh4 c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJjID0geDsKLSAgICAgICAgICAg ICAgICAgICAgZ290byB4cHVyZ2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IGZzKys7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7Ci0gICAg ICAgICAgICAgICAgICBjYXNlIFBVX1NNQTogbWluc2l6ZSA9IHk7IGJyZWFrOwotICAgICAgICAg ICAgICAgICAgY2FzZSBQVV9MQVI6IG1heHNpemUgPSB5OyBicmVhazsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgUFVfRE9UOgot ICAgICAgICAgICAgICAgIG1hdGNoZG90ID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgY2FzZSBQVV9OT0RPVDoKLSAgICAgICAgICAgICAgICBtYXRjaGRvdCA9IDA7 Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgUFVfRVhDOgotICAg ICAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJQYXR0ZXJuIiwiIiwmcyx4eHN0cmluZykpIDwg MCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/UGF0dGVybiByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAg ICAgICAgICByYyA9IC05OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg ICAgICAgICAgICByYyA9IHg7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8geHB1cmdlOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcysrOwotICAgICAgICAgICAgICAgIG1h a2VzdHIoJnB1X2V4YyxzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg Y2FzZSBQVV9IREc6Ci0gICAgICAgICAgICAgICAgeF9oZGcgPSAxOwotICAgICAgICAgICAgICAg IGJyZWFrOwotI2lmZGVmIFJFQ1VSU0lWRQotICAgICAgICAgICAgICBjYXNlIFBVX1JFQ1U6ICAg ICAgICAgICAgIC8qIC9SRUNVUlNJVkUgKi8KLSAgICAgICAgICAgICAgICByZWN1cnNpdmUgPSAy OwotICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgICAg ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHByaW50ZigiP05vdCBpbXBsZW1lbnRl ZCB5ZXQgLSBcIiVzXCJcbiIsYXRtYnVmKTsKLSAgICAgICAgICAgICAgICByYyA9IC05OwotICAg ICAgICAgICAgICAgIGdvdG8geHB1cmdlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug aWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUlGSSkgewotICAgICAgICAgICAgaGF2ZW5hbWUgPSAx OwotICAgICAgICB9IGVsc2UgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUNGTSkgewotICAgICAg ICAgICAgY29uZmlybWVkID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJjID0g LTI7Ci0gICAgICAgICAgICBnb3RvIHhwdXJnZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo aGF2ZW5hbWUpIHsKLSNpZmRlZiBDS1JFR0VYCi0gICAgICAgIGNrbWFrbXNnKGxpbmUsTElOQlVG U0laLGNtcmVzdWx0LnNyZXN1bHQsIi5+WzEtOV0qfiIsTlVMTCxOVUxMKTsKLSNlbHNlCi0gICAg ICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLGNtcmVzdWx0LnNyZXN1bHQsIi5+Kn4iLE5VTEws TlVMTCk7Ci0jZW5kaWYgLyogQ0tSRUdFWCAqLwotICAgIH0gZWxzZSB7Ci0jaWZkZWYgQ0tSRUdF WAotICAgICAgICBja3N0cm5jcHkobGluZSwiKi5+WzEtOV0qfiIsTElOQlVGU0laKTsKLSNlbHNl Ci0gICAgICAgIGNrc3RybmNweShsaW5lLCIqLn4qfiIsTElOQlVGU0laKTsKLSNlbmRpZiAvKiBD S1JFR0VYICovCi0gICAgfQotICAgIGlmICghY29uZmlybWVkKSB7Ci0gICAgICAgIGlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkgewotICAgICAgICAgICAgcmMgPSB4OwotICAgICAgICAgICAgZ290byB4 cHVyZ2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogUGFyc2UgZmluaXNoZWQgLSBub3cgYWN0 aW9uICovCi0KLSNpZmRlZiBDS19MT0dJTgotICAgIGlmIChpc2d1ZXN0KSB7Ci0gICAgICAgIHBy aW50ZigiP0ZpbGUgZGVsZXRpb24gYnkgZ3Vlc3RzIG5vdCBwZXJtaXR0ZWQuXG4iKTsKLSAgICAg ICAgcmMgPSAtOTsKLSAgICAgICAgZ290byB4cHVyZ2U7Ci0gICAgfQotI2VuZGlmIC8qIENLX0xP R0lOICovCi0KLSNpZmRlZiBDS19UVEdXU0laCi0gICAgaWYgKHBhZ2luZyA8IDApICAgICAgICAg ICAgICAgICAgICAgLyogL1tOT11QQUdFIG5vdCBnaXZlbiAqLwotICAgICAgcGFnaW5nID0geGFz a21vcmU7ICAgICAgICAgICAgICAgIC8qIHNvIHVzZSBwcmV2YWlsaW5nICovCi0jZW5kaWYgLyog Q0tfVFRHV1NJWiAqLwotCi0gICAgbGluZXMgPSAwOwotICAgIGlmICh4X2hkZyA+IDApIHsKLSAg ICAgICAgcHJpbnRmKCJQdXJnaW5nICVzLCBrZWVwaW5nICVkLi4uJXNcbiIsCi0gICAgICAgICAg ICAgICBzLAotICAgICAgICAgICAgICAgdG9rZWVwLAotICAgICAgICAgICAgICAgc2ltdWxhdGUg PyAiIChTSU1VTEFUSU9OKSIgOiAiIik7Ci0gICAgICAgIGxpbmVzICs9IDI7Ci0gICAgfQotICAg IGZsYWdzID0gWlhfRklMT05MWTsKLSAgICBpZiAocmVjdXJzaXZlKSBmbGFncyB8PSBaWF9SRUNV UlNFOwotICAgIG4gPSBuenhwYW5kKGxpbmUsZmxhZ3MpOyAgICAgICAgICAgIC8qIEdldCBsaXN0 IG9mIGJhY2t1cCBmaWxlcyAqLwotICAgIGlmICh0b2tlZXAgPCAxKSB7ICAgICAgICAgICAgICAg ICAgIC8qIERlbGV0aW5nIGFsbCBvZiB0aGVtLi4uICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkg PCBuOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChmcykgaWYgKGZpbGVzZWxlY3QobXRjaHNbaV0s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1X2FmdCxwdV9iZWYscHVfbmFm LHB1X25iZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluc2l6ZSxtYXhz aXplLDAsOCxweGxpc3QpIDwgMSkgewotICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nID4gMCkg ewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAlcyAoU0tJUFBFRClcbiIsbXRjaHNbaV0p OwotI2lmZGVmIENLX1RUR1dTSVoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2luZykKLSAg ICAgICAgICAgICAgICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgewotICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgZ290byB4cHVyZ2U7IGVsc2UgbGlu ZXMgPSAwOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19UVEdXU0laICov Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKGFza2luZykgewotICAgICAgICAgICAgICAgIGludCB4Owot ICAgICAgICAgICAgICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosIiBEZWxldGUgIixtdGNo c1tpXSwiPyIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgeCA9IGdldHllc25vKHRtcGJ1ZiwxKTsK LSAgICAgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgMDog Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICBjYXNlIDE6IGJyZWFrOwotICAgICAgICAgICAg ICAgICAgY2FzZSAyOiBnb3RvIHhwdXJnZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICB4ID0gZGVsZXRpbmcgPyB6ZGVsZXQobXRjaHNbaV0pIDogMDsKLSAg ICAgICAgICAgIGlmICh4ID4gLTEpIHsKLSAgICAgICAgICAgICAgICBpZiAobGlzdGluZykKLSAg ICAgICAgICAgICAgICAgIHByaW50ZigiICVzICglcylcbiIsIG10Y2hzW2ldLGRlbGV0aW5nID8g Ik9LIiA6ICJTRUxFQ1RFRCIpOwotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGVycm9ycysrOwotICAgICAgICAgICAgICAgIGlm IChsaXN0aW5nKQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMgKEZBSUxFRClcbiIsIG10 Y2hzW2ldKTsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBDS19UVEdXU0laCi0gICAgICAgICAgICBp ZiAobGlzdGluZyAmJiBwYWdpbmcpCi0gICAgICAgICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgZ290byB4cHVyZ2U7 IGVsc2UgbGluZXMgPSAwOwotICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfVFRHV1NJWiAq LwotICAgICAgICB9Ci0gICAgICAgIGdvdG8geHB1cmdlOwotICAgIH0KLSAgICBpZiAobiA8IHRv a2VlcCkgeyAgICAgICAgICAgICAgICAgICAvKiBOb3QgZGVsZXRpbmcgYW55ICovCi0gICAgICAg IGNvdW50ID0gMDsKLSAgICAgICAgaWYgKGxpc3RpbmcpCi0gICAgICAgICAgcHJpbnRmKCIgTWF0 Y2hlcyA9ICVkOiBOb3QgZW5vdWdoIHRvIHB1cmdlLlxuIixuKTsKLSAgICAgICAgZ290byB4cHVy Z2U7Ci0gICAgfQotCi0gICAgLyogR2VuZXJhbCBjYXNlIC0gZGVsZXRlIHNvbWUgYnV0IG5vdCBv dGhlcnMgKi8KLQotICAgIHNoX3NvcnQobXRjaHMsTlVMTCxuLDAsMCxmaWxlY2FzZSk7IC8qIEFs cGhhYmV0aXplIHRoZSBsaXN0IChFU1NFTlRJQUwpICovCi0KLSAgICBnID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiBjdXJyZW50IGdyb3VwICovCi0gICAgZm9y IChpID0gMDsgaSA8IG47IGkrKykgeyAgICAgICAgICAgLyogR28gdGhydSBzb3J0ZWQgZmlsZSBs aXN0ICovCi0gICAgICAgIHggPSB6bmV4dChuYW1lYnVmKTsgICAgICAgICAgICAgLyogR2V0IG5l eHQgZmlsZSAqLwotICAgICAgICBpZiAoeCA8IDEgfHwgIW5hbWVidWZbMF0gfHwgaSA9PSBuIC0g MSkgLyogTm8gbW9yZT8gKi8KLSAgICAgICAgICBkb25lID0gMTsgICAgICAgICAgICAgICAgICAg ICAvKiBOT1RFOiAnZG9uZScgbXVzdCBiZSAwIG9yIDEgb25seSAqLwotICAgICAgICBpZiAoZnMp IGlmIChmaWxlc2VsZWN0KG5hbWVidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHVfYWZ0LHB1X2JlZixwdV9uYWYscHVfbmJmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1pbnNpemUsbWF4c2l6ZSwwLDgscHhsaXN0KSA8IDEpIHsKLSAgICAgICAgICAgIGlmIChs aXN0aW5nID4gMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiICVzIChTS0lQUEVEKVxuIixu YW1lYnVmKTsKLSAgICAgICAgICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykKLSAg ICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKSBnb3RvIHhwdXJnZTsgZWxzZSBsaW5lcyA9 IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg ICAgICBpZiAoeCA+IDApCi0gICAgICAgICAgaWYgKChtID0gYmt1cG51bShuYW1lYnVmLCZ6KSkg PCAwKSAvKiBUaGlzIGZpbGUncyBiYWNrdXAgbnVtYmVyLiAqLwotICAgICAgICAgICAgY29udGlu dWU7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCB0b2tlZXA7IGorKykgeyAgLyogSW5zZXJ0IGlu IGxpc3QuICovCi0gICAgICAgICAgICBpZiAobSA+IHh4W2pdKSB7Ci0gICAgICAgICAgICAgICAg Zm9yIChrID0gdG9rZWVwIC0gMTsgayA+IGo7IGstLSkKLSAgICAgICAgICAgICAgICAgIHh4W2td ID0geHhbay0xXTsKLSAgICAgICAgICAgICAgICB4eFtqXSA9IG07Ci0gICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLyogTmV3IGdyb3VwPyAq LwotICAgICAgICBpZiAoZG9uZSB8fCAoaSA+IDAgJiYgY2tzdHJjbXAobmFtZWJ1ZixiYXNlYnVm LHosMSkpKSB7Ci0gICAgICAgICAgICBpZiAoaSArIGRvbmUgLSBnID4gdG9rZWVwKSB7IC8qIERv IHdlIGhhdmUgZW5vdWdoIHRvIHB1cmdlPyAqLwotICAgICAgICAgICAgICAgIG1pbiA9IHh4W3Rv a2VlcC0xXTsgICAgIC8qIFllcywgbG93ZXN0IGJhY2t1cCBudW1iZXIgdG8ga2VlcCAqLwotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvcHVyZ2UgZ3JvdXAiLGJhc2VidWYsbWluKTsKLSAg ICAgICAgICAgICAgICBmb3IgKGogPSBnOyBqIDwgaSArIGRvbmU7IGorKykgeyAvKiBHbyB0aHJv dWdoIHRoaXMgZ3JvdXAgKi8KLSAgICAgICAgICAgICAgICAgICAgeCA9IGJrdXBudW0obXRjaHNb al0sJnopOyAgICAvKiBHZXQgZmlsZSBiYWNrdXAgbnVtYmVyICovCi0gICAgICAgICAgICAgICAg ICAgIGlmICh4ID4gMCAmJiB4IDwgbWluKSB7ICAgICAgLyogQmVsb3cgbWluaW11bT8gKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgIHggPSBkZWxldGluZyA/IHpkZWxldChtdGNoc1tqXSkgOiAw OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPCAwKSBlcnJvcnMrKzsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIiAlcyAoJXMpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRj aHNbal0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHggPCAwKSA/ICJFUlJP UiIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGluZyA/ICJERUxF VEVEIiA6ICJTRUxFQ1RFRCIpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAobGlzdGluZykgLyogTm90IGJlbG93IG1pbmltdW0gLSBrZWVwIHRoaXMgb25lICov Ci0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMgKEtFUFQpXG4iLG10Y2hzW2pdKTsK LSNpZmRlZiBDS19UVEdXU0laCi0gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nICYmIHBh Z2luZykKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykg ewotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgZ290byB4cHVyZ2U7 IGVsc2UgbGluZXMgPSAwOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19U VEdXU0laICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0 aW5nICYmIHBhZ2luZykgeyAvKiBOb3QgZW5vdWdoIHRvIHB1cmdlICovCi0gICAgICAgICAgICAg ICAgcHJpbnRmKCIgJXMufip+IChLRVBUKVxuIixiYXNlYnVmKTsKLSNpZmRlZiBDS19UVEdXU0la Ci0gICAgICAgICAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIGdvdG8geHB1cmdlOyBlbHNlIGxpbmVzID0gMDsK LSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotICAgICAgICAgICAg fQotICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHRva2VlcDsgaisrKSAvKiBDbGVhciB0aGUg YmFja3VwIG51bWJlciBsaXN0ICovCi0gICAgICAgICAgICAgIHh4W2pdID0gMDsKLSAgICAgICAg ICAgIGcgPSBpOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgZ3JvdXAgcG9pbnRl ciAqLwotICAgICAgICB9Ci0gICAgICAgIGlmIChkb25lKSAgICAgICAgICAgICAgICAgICAgICAg LyogTm8gbW9yZSBmaWxlcywgZG9uZS4gKi8KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgc3Ry bmNweShiYXNlYnVmLG5hbWVidWYseik7ICAgICAvKiBTZXQgYmFzZW5hbWUgb2YgdGhpcyBmaWxl ICovCi0gICAgICAgIGJhc2VidWZbel0gPSBOVUw7Ci0gICAgfQotICB4cHVyZ2U6ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1vbiBleGl0IHBvaW50ICovCi0gICAgaWYgKGdf bWF0Y2hkb3QgPiAtMSkgewotICAgICAgICBtYXRjaGRvdCA9IGdfbWF0Y2hkb3Q7ICAgICAgICAg IC8qIFJlc3RvcmUgdGhlc2UuLi4gKi8KLSAgICAgICAgZ19tYXRjaGRvdCA9IC0xOwotICAgIH0K LSAgICBpZiAocmMgPCAwKSByZXR1cm4ocmMpOyAgICAgICAgICAgICAvKiBQYXJzZSBlcnJvciAq LwotICAgIGlmICh4X2hkZykKLSAgICAgIHByaW50ZigiRmlsZXMgcHVyZ2VkOiAlZCVzXG4iLAot ICAgICAgICAgICAgIGNvdW50LAotICAgICAgICAgICAgIGRlbGV0aW5nID8gIiIgOiAiIChub3Qg cmVhbGx5KSIKLSAgICAgICAgICAgICApOwotICAgIHJldHVybihzdWNjZXNzID0gY291bnQgPiAw ID8gMSA6IChlcnJvcnMgPiAwKSA/IDAgOiAxKTsKLX0KLSNlbmRpZiAvKiBDS1BVUkdFICovCi0K LSNpZm5kZWYgTk9YRkVSCi0jaWZuZGVmIE5PTE9DQUwKLWludAotZG94ZGlzKHdoaWNoKSBpbnQg d2hpY2g7IHsJCS8qIDEgPSBLZXJtaXQsIDIgPSBGVFAgKi8KLSAgICBleHRlcm4gaW50IG5vbG9j YWw7Ci0gICAgaW50IHgsIHkgPSAwLCB6OwotI2lmZGVmIE5FV0ZUUAotICAgIGV4dGVybiBpbnQg ZnRwX2RpczsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotI2lmZGVmIENPTU1FTlQKLSAgICBjaGFy ICpzOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIGlmICgoeCA9IGNta2V5KGZkdGFiLG5m ZHRhYiwiZmlsZSB0cmFuc2ZlciBkaXNwbGF5IHN0eWxlIiwiIiwKLSAgICAgICAgICAgICAgICAg ICB4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSNpZmRlZiBDS19QQ1RfQkFSCi0g ICAgaWYgKCh5ID0gY21rZXkoZmRmdGFiLDIsIiIsInRoZXJtb21ldGVyIix4eHN0cmluZykpIDwg MCkKLSAgICAgIHJldHVybih5KTsKLSNlbmRpZiAvKiBDS19QQ1RfQkFSICovCi0gICAgaWYgKCh6 ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7Ci0jaWZkZWYgQ0tfQ1VSU0VTCi0gICAgaWYgKHgg PT0gWFlGRF9DKSB7ICAgICAgICAgICAgICAgICAgLyogRlVMTFNDUkVFTiAqLwotI2lmZGVmIENP TU1FTlQKLSNpZm5kZWYgTVlDVVJTRVMKLSAgICAgICAgZXh0ZXJuIGNoYXIgKiB0cm1idWY7ICAg ICAgICAgICAvKiBSZWFsIGN1cnNlcyAqLwotICAgICAgICBpbnQgejsKLSNlbmRpZiAvKiBNWUNV UlNFUyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgICAgICBpZiAobm9sb2NhbCkgICAg ICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gaW4gdGhpcyBjYXNlICovCi0JICByZXR1 cm4oc3VjY2VzcyA9IDEpOwotCi0jaWZkZWYgQ09NTUVOVAotI2lmbmRlZiBNWUNVUlNFUwotI2lm bmRlZiBWTVMKLSAgICAgICAgcyA9IGdldGVudigiVEVSTSIpOwotICAgICAgICBkZWJ1ZyhGMTEw LCJkb3hkaXMgVEVSTSIscywwKTsKLSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgIGZ4 ZGluaXQoeCk7Ci0gICAgICAgIGlmICgqcyAmJiB0cm1idWYpIHsgICAgICAgICAgICAgLyogRG9u J3QgY2FsbCB0Z2V0ZW50ICovCi0gICAgICAgICAgICB6ID0gdGdldGVudCh0cm1idWYscyk7ICAg ICAgLyogaWYgdHJtYnVmIG5vdCBhbGxvY2F0ZWQgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEs ImRveGRpcyB0Z2V0ZW50IixzLHopOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgeiA9 IDA7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb3hkaXMgdGdldGVudCBza2lwcGVkIixzLDAp OwotICAgICAgICB9Ci0gICAgICAgIGlmICh6IDwgMSkgewotICAgICAgICAgICAgcHJpbnRmKCJT b3JyeSwgdGVybWluYWwgdHlwZSB1bmtub3duOiBcIiVzXCJcbiIscyk7Ci0gICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYg LyogTVlDVVJTRVMgKi8KLSNlbHNlCi0gICAgICAgIGZ4ZGluaXQoeCk7Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0jaWZkZWYgQ0tfUENUX0JBUgotICAgICAgICB0aGVybW9tZXRlciA9IHk7Ci0j ZW5kaWYgLyogQ0tfUENUX0JBUiAqLwotCi0gICAgICAgIGxpbmVbMF0gPSAnXDAnOyAgICAgICAg ICAgICAgICAgLyogKFdoYXQncyB0aGlzIGZvcj8pICovCi0gICAgfQotI2VuZGlmIC8qIENLX0NV UlNFUyAqLwotICAgIGlmICh3aGljaCA9PSAxKQkJCS8qIEl0J3MgT0suICovCi0gICAgICBmZGlz cGxhID0geDsKLSNpZmRlZiBORVdGVFAKLSAgICBlbHNlIGlmICh3aGljaCA9PSAyKQotICAgICAg ZnRwX2RpcyA9IHg7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLX0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLWludAot c2V0ZmlsKHJtc2ZsZykgaW50IHJtc2ZsZzsgewotI2lmZGVmIENPTU1FTlQKLSAgICBleHRlcm4g aW50IGVuX2RlbDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZuZGVmIE5PWEZFUgotICAgIGlm IChybXNmbGcpIHsKLSAgICAgICAgaWYgKCh5ID0gY21rZXkocmZpbHRhYixucmZpbHAsIlJlbW90 ZSBmaWxlIHBhcmFtZXRlciIsIiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkg PCAwKSB7Ci0gICAgICAgICAgICBpZiAoeSA9PSAtMykgewotICAgICAgICAgICAgICAgIHByaW50 ZigiP1JlbW90ZSBmaWxlIHBhcmFtZXRlciByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAg cmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0gZWxzZSByZXR1cm4oeSk7Ci0gICAgICAgIH0KLSAg ICB9IGVsc2UgewotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAgICBpZiAoKHkgPSBjbWtleShm aWx0YWIsbmZpbHAsIkZpbGUgcGFyYW1ldGVyIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAg ICByZXR1cm4oeSk7Ci0jaWZuZGVmIE5PWEZFUgotICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8K LSAgICBzd2l0Y2ggKHkpIHsKLSNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBOb3QgbmVlZGVkICovCi0gICAgICBjYXNlIFhZRklMQjogICAgICAgICAgICAgICAgICAg ICAgLyogQmxvY2tzaXplICovCi0gICAgICAgIGlmICgoeSA9IGNtbnVtKCJmaWxlIGJsb2NrIHNp emUiLGNraXRvYShEQkxLU0laKSwxMCwmeix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAg ICBpZiAocm1zZmxnKSB7Ci0gICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMzExIiwg Y2tpdG9hKHopLCAiIik7Ci0gICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZibGtzaXogPSB6OwotICAgICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmbmRl ZiBOT1hGRVIKLSAgICAgIGNhc2UgWFlGSUxTOiAgICAgICAgICAgICAgICAgICAgICAvKiBCeXRl IHNpemUgKi8KLSAgICAgICAgaWYgKCh5ID0gY21udW0oImZpbGUgYnl0ZSBzaXplICg3IG9yIDgp IiwiOCIsMTAsJnoseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICBpZiAoeiAhPSA3ICYmIHogIT0gOCkgewotICAgICAgICAgICAgcHJpbnRmKCJcbj9UaGUgY2hv aWNlcyBhcmUgNyBhbmQgOFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGlmICh6 ID09IDcpIGZtYXNrID0gMDE3NzsKLSAgICAgICAgZWxzZSBpZiAoeiA9PSA4KSBmbWFzayA9IDAz Nzc7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSNpZm5kZWYgTk9DU0VUUwotICAg ICAgY2FzZSBYWUZJTEM6IHsgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBzZXQgKi8K LSAgICAgICAgICBjaGFyICogY3NldG5hbWUgPSBOVUxMOwotICAgICAgICAgIGV4dGVybiBpbnQK LSAgICAgICAgICAgIHJfY3NldCwgc19jc2V0LCBhZmNzZXRbXTsgICAvKiBTRU5EIENIQVJBQ1RF Ui1TRVQgQVVUTyBvciBNQU5VQUwgKi8KLQotICAgICAgICAgIHN0cnVjdCBGREIga3csIGZsOwot ICAgICAgICAgIGNtZmRiaSgma3csICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IEZEQiAtIGNv bW1hbmQgc3dpdGNoZXMgKi8KLSAgICAgICAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAg ICAvKiBmY29kZSAqLwotICAgICAgICAgICAgICAgICBybXNmbGcgPyAic2VydmVyIGNoYXJhY3Rl ci1zZXQgbmFtZSIgOiAiIiwgIC8qIGhlbHAgKi8KLSAgICAgICAgICAgICAgICAgIiIsICAgICAg ICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgbmZp bGMsICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8K LSAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmlj IGRhdGEgMjogMCA9IGtleXdvcmQgKi8KLSAgICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAg ICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICAgIGZjc3Rh YiwgICAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAgICAgICBy bXNmbGcgPyAmZmwgOiBOVUxMICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAg ICAgKTsKLSAgICAgICAgICBjbWZkYmkoJmZsLCAgICAgICAgICAgICAgICAgICAvKiBBbnl0aGlu ZyB0aGF0IGRvZXNuJ3QgbWF0Y2ggKi8KLSAgICAgICAgICAgICAgICAgX0NNRkxELCAgICAgICAg ICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAg ICAgIC8qIGhscG1zZyAqLwotICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAg IC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAv KiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0gICAgICAgICAgICAgICAgIDAsICAg ICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLSAgICAgICAgICAg ICAgICAgeHhzdHJpbmcsCi0gICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAg IE5VTEwKLSAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICBpZiAoKHggPSBjbWZkYigma3cp KSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgaWYgKGNtcmVzdWx0LmZj b2RlID09IF9DTUtFWSkgewotICAgICAgICAgICAgICB4ID0gY21yZXN1bHQubnJlc3VsdDsKLSAg ICAgICAgICAgICAgY3NldG5hbWUgPSBmY3NpbmZvW3hdLmtleXdvcmQ7Ci0gICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5C VUZTSVopOwotICAgICAgICAgICAgICBjc2V0bmFtZSA9IGxpbmU7Ci0gICAgICAgICAgfQotICAg ICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOwotICAgICAgICAgIGlmIChy bXNmbGcpIHsKLSAgICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjMyMCIsIGNzZXRu YW1lLCAiIik7Ci0gICAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotICAgICAgICAg IH0KLSAgICAgICAgICBmY2hhcnNldCA9IHg7Ci0gICAgICAgICAgaWYgKHNfY3NldCA9PSBYTU9E RV9BKSAgICAgICAgLyogSWYgU0VORCBDSEFSQUNURVItU0VUIGlzIEFVVE8gKi8KLSAgICAgICAg ICAgIGlmICh4ID4gLTEgJiYgeCA8PSBNQVhGQ1NFVFMpCi0gICAgICAgICAgICAgIGlmIChhZmNz ZXRbeF0gPiAtMSAmJiBhZmNzZXRbeF0gPD0gTUFYVENTRVRTKQotICAgICAgICAgICAgICAgIHRj aGFyc2V0ID0gYWZjc2V0W3hdOyAvKiBQaWNrIGNvcnJlc3BvbmRpbmcgeGZlciBjaGFyc2V0ICov Ci0gICAgICAgICAgc2V0eGxhdHlwZSh0Y2hhcnNldCxmY2hhcnNldCk7IC8qIFRyYW5zbGF0aW9u IHR5cGUgKi8KLSAgICAgICAgICAvKiBJZiBJIHNheSBTRVQgRklMRSBDSEFSQUNURVItU0VUIGJs YWgsIEkgd2FudCB0byBiZSBibGFoISAqLwotICAgICAgICAgIHJfY3NldCA9IFhNT0RFX007ICAg ICAgICAgICAgIC8qIERvbid0IHN3aXRjaCBpbmNvbWluZyBzZXQhICovCi0gICAgICAgICAgeCA9 IGZjc2luZm9bZmNoYXJzZXRdLnNpemU7ICAgLyogQWxzbyBzZXQgZGVmYXVsdCB4LWJpdCBjaGFy c2V0ICovCi0gICAgICAgICAgaWYgKHggPT0gMTI4KSAgICAgICAgICAgICAgICAgLyogNy1iaXQu Li4gKi8KLSAgICAgICAgICAgIGRjc2V0NyA9IGZjaGFyc2V0OwotICAgICAgICAgIGVsc2UgaWYg KHggPT0gMjU2KSAgICAgICAgICAgIC8qIDgtYml0Li4uICovCi0gICAgICAgICAgICBkY3NldDgg PSBmY2hhcnNldDsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICBjYXNlIFhZRklMRDog ICAgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSAqLwotICAgICAgICByZXR1cm4oZG94ZGlz KDEpKTsJCS8qIDEgPT0ga2VybWl0ICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2VuZGlmIC8q IE5PWEZFUiAqLwotCi0gICAgICBjYXNlIFhZRklMQTogICAgICAgICAgICAgICAgICAgICAgLyog RW5kLW9mLWxpbmUgKi8KLSNpZmRlZiBOTENIQVIKLSAgICAgICAgcyA9ICIiOwotICAgICAgICBp ZiAoTkxDSEFSID09IDAxNSkKLSAgICAgICAgICBzID0gImNyIjsKLSAgICAgICAgZWxzZSBpZiAo TkxDSEFSID09IDAxMikKLSAgICAgICAgICBzID0gImxmIjsKLSAgICAgICAgaWYgKCh4ID0gY21r ZXkoZW9sdGFiLCBuZW9sdGFiLAotICAgICAgICAgICAgICAgICAgICAgICAibG9jYWwgdGV4dC1m aWxlIGxpbmUgdGVybWluYXRvciIscyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4o eCk7Ci0jZWxzZQotICAgICAgICBpZiAoKHggPSBjbWtleShlb2x0YWIsIG5lb2x0YWIsCi0gICAg ICAgICAgICAgICAgICAgICAgICJsb2NhbCB0ZXh0LWZpbGUgbGluZSB0ZXJtaW5hdG9yIiwiY3Js ZiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotI2VuZGlmIC8qIE5MQ0hB UiAqLwotICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApIHJldHVybih6KTsKLSAgICAgICAg ZmVvbCA9IChDSEFSKSB4OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0jaWZuZGVm IE5PWEZFUgotICAgICAgY2FzZSBYWUZJTE46ICAgICAgICAgICAgICAgICAgICAgIC8qIE5hbWVz ICovCi0gICAgICAgIGlmICgoeCA9IGNta2V5KGZudGFiLG5mbnRhYiwiaG93IHRvIGhhbmRsZSBm aWxlbmFtZXMiLCJjb252ZXJ0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykp IDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHopOwotICAgICAgICBpZiAocm1zZmxnKSB7Ci0gICAgICAgICAgICBzc3RhdGUg PSBzZXRnZW4oJ1MnLCAiMzAxIiwgY2tpdG9hKDEgLSB4KSwgIiIpOwotICAgICAgICAgICAgcmV0 dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdGFiW3By b3RvY29sXS5mbmNuID0geDsgICAgLyogU2V0IHN0cnVjdHVyZSAqLwotICAgICAgICAgICAgZm5j bnYgPSB4OyAgICAgICAgICAgICAgICAgIC8qIFNldCB2YXJpYWJsZSAqLwotICAgICAgICAgICAg Zl9zYXZlID0geDsgICAgICAgICAgICAgICAgIC8qIEFuZCBzZXQgInBlcm1hbmVudCIgdmFyaWFi bGUgKi8KLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgIH0KLQotICAg ICAgY2FzZSBYWUZJTFI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY29yZCBsZW5ndGggKi8K LSAgICAgICAgaWYgKCh5ID0gY21udW0oImZpbGUgcmVjb3JkIGxlbmd0aCIsCi0gICAgICAgICAg ICAgICAgICAgICAgIGNraXRvYShETFJFQ0wpLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQotICAgICAg ICAgIHJldHVybih5KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7 Ci0gICAgICAgIGlmIChybXNmbGcpIHsKLSAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycs ICIzMTIiLCBja2l0b2EoeiksICIiKTsKLSAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUp OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZnJlY2wgPSB6OwotICAgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgfQotCi0jaWZkZWYgQ09NTUVOVAotICAgICAg Y2FzZSBYWUZJTE86ICAgICAgICAgICAgICAgICAgICAgIC8qIE9yZ2FuaXphdGlvbiAqLwotICAg ICAgICBpZiAoKHggPSBjbWtleShmb3JndGFiLG5mb3JnLCJmaWxlIG9yZ2FuaXphdGlvbiIsInNl cXVlbnRpYWwiLAotICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKLSAgICAg ICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkp OwotICAgICAgICBpZiAocm1zZmxnKSB7Ci0gICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1Mn LCAiMzE0IiwgY2tpdG9hKHgpLCAiIik7Ci0gICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRl KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvcmcgPSB4OwotICAgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQot I2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBuZWVkZWQgKi8K LSAgICAgIGNhc2UgWFlGSUxGOiAgICAgICAgICAgICAgICAgICAgICAvKiBGb3JtYXQgKi8KLSAg ICAgICAgaWYgKCh4ID0gY21rZXkoZnJlY3RhYixuZnJlYywiZmlsZSByZWNvcmQgZm9ybWF0Iiwi c3RyZWFtIiwKLSAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCi0gICAgICAg ICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsK LSAgICAgICAgaWYgKHJtc2ZsZykgewotICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywg IjMxMyIsIGNraXRvYSh4KSwgIiIpOwotICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmcmVjZm0gPSB4OwotICAgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQot I2lmZGVmIENPTU1FTlQKLSAgICAgIGNhc2UgWFlGSUxQOiAgICAgICAgICAgICAgICAgICAgICAv KiBQcmludGVyIGNhcnJpYWdlIGNvbnRyb2wgKi8KLSAgICAgICAgaWYgKCh4ID0gY21rZXkoZmNj dGFiLG5mY2MsImZpbGUgY2FycmlhZ2UgY29udHJvbCIsIm5ld2xpbmUiLAotICAgICAgICAgICAg ICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBpZiAocm1zZmxnKSB7 Ci0gICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMzE1IiwgY2tpdG9hKHgpLCAiIik7 Ci0gICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgIGZjY3RybCA9IHg7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwot ICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0g ICAgICBjYXNlIFhZRklMVDogICAgICAgICAgICAgICAgICAgICAgLyogVHlwZSAqLwotICAgICAg ICBpZiAoKHggPSBjbWtleShybXNmbGcgPyByZnR0YWIgIDogZnR0YWIsCi0gICAgICAgICAgICAg ICAgICAgICAgIHJtc2ZsZyA/IG5yZnR0eXAgOiBuZnR0eXAsCi0gICAgICAgICAgICAgICAgICAg ICAgICJ0eXBlIG9mIGZpbGUgdHJhbnNmZXIiLCJ0ZXh0Iix4eHN0cmluZykpIDwgMCkKLSAgICAg ICAgICByZXR1cm4oeCk7Ci0KLSNpZmRlZiBWTVMKLSAgICAgICAgLyogQWxsb3cgVk1TIHVzZXJz IHRvIGNob29zZSByZWNvcmQgZm9ybWF0IGZvciBiaW5hcnkgZmlsZXMgKi8KLSAgICAgICAgaWYg KCh4ID09IFhZRlRfQikgJiYgKHJtc2ZsZyA9PSAwKSkgewotICAgICAgICAgICAgaWYgKCh4ID0g Y21rZXkoZmJ0YWIsbmZidHlwLCJWTVMgcmVjb3JkIGZvcm1hdCIsImZpeGVkIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4o eCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgaWYgKCh5ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGJpbmFyeSA9IHg7Ci0gICAgICAgIGJfc2F2ZSA9 IHg7Ci0jaWZkZWYgTUFDCi0gICAgICAgICh2b2lkKSBtYWNfc2V0ZmlsZGZsZyhiaW5hcnkpOwot I2VuZGlmIC8qIE1BQyAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICAgICAgaWYgKHJtc2ZsZykgewot ICAgICAgICAgICAgLyogQWxsb3cgZm9yIExBQkVMRUQgaW4gVk1TICYgT1MvMiAqLwotICAgICAg ICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjMwMCIsIGNraXRvYSh4KSwgIiIpOwotICAgICAg ICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyog Tk9YRkVSICovCi0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotI2lmbmRlZiBOT1hG RVIKLSAgICAgICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAg ICAgY2FzZSBYWUZJTFg6ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbGxpc2lvbiBBY3Rpb24g Ki8KLSAgICAgICAgaWYgKCh4ID0gY21rZXkoY29seHRhYixuY29seCwiRmlsZW5hbWUgY29sbGlz aW9uIGFjdGlvbiIsImJhY2t1cCIsCi0gICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeSk7Ci0jaWZkZWYgQ0tfTE9HSU4KLSAgICAgICAgaWYgKGlzZ3Vlc3QpIHsKLSAg ICAgICAgICAgIC8qIERvbid0IGxldCBndWVzdHMgY2hhbmdlIGV4aXN0aW5nIGZpbGVzICovCi0g ICAgICAgICAgICBwcmludGYoIj9UaGlzIGNvbW1hbmQgbm90IHZhbGlkIGZvciBndWVzdHNcbiIp OwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLX0xPR0lO ICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAvKiBOb3QgYXBwcm9wcmlhdGUgLSBESVNBQkxF IERFTEVURSBvbmx5IHJlZmVycyB0byBzZXJ2ZXIgKi8KLSAgICAgICAgaWYgKCh4ID09IFhZRlhf WCB8fCB4ID09IFhZRlhfQiB8fCB4ID09IFhZRlhfVSB8fCB4ID09IFhZRlhfQSkgJiYKLSAgICAg ICAgICAgICghRU5BQkxFRChlbl9kZWwpKSkgewotICAgICAgICAgICAgcHJpbnRmKCI/U29ycnks IGZpbGUgZGVsZXRpb24gaXMgZGlzYWJsZWQuXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGZuY2FjdCA9IHg7Ci0g ICAgICAgIHB0YWJbcHJvdG9jb2xdLmZuY2EgPSB4OwotICAgICAgICBpZiAocm1zZmxnKSB7Ci0g ICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMzAyIiwgY2tpdG9hKGZuY2FjdCksICIi KTsKLSAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgaWYgKGZuY2FjdCA9PSBYWUZYX1IpIGNrd2FybiA9IDE7IC8qIEZJTEUgV0FS TklORyBpbXBsaWNhdGlvbnMgKi8KLSAgICAgICAgICAgIGlmIChmbmNhY3QgPT0gWFlGWF9YKSBj a3dhcm4gPSAwOyAvKiAuLi4gKi8KLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0g ICAgICAgIH0KLQotICAgICAgY2FzZSBYWUZJTFc6ICAgICAgICAgICAgICAgICAgICAgIC8qIFdh cm5pbmcvV3JpdGUtUHJvdGVjdCAqLwotICAgICAgICBpZiAoKHggPSBzZXRvbigmY2t3YXJuKSkg PCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmIChja3dhcm4pCi0gICAgICAgICAgZm5jYWN0ID0g WFlGWF9SOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZm5jYWN0ID0gWFlGWF9YOwotICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0jaWZkZWYgQ0tfTEFCRUxFRAotICAgICAgY2FzZSBY WUZJTEw6ICAgICAgICAgICAgICAgICAgICAgIC8qIExBQkVMRUQgRklMRSBwYXJhbWV0ZXJzICov Ci0gICAgICAgIGlmICgoeCA9IGNta2V5KGxibHRhYixubGJscCwiTGFiZWxlZCBmaWxlIGZlYXR1 cmUiLCIiLAotICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKLSAgICAgICAg ICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoc3VjY2VzcyA9IHNldG9uKCZ5KSkgPCAwKQotICAg ICAgICAgIHJldHVybihzdWNjZXNzKTsKLSAgICAgICAgaWYgKHkpICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTZXQgb3IgcmVzZXQgdGhlIHNlbGVjdGVkIGJpdCAqLwotICAgICAgICAgIGxm X29wdHMgfD0geDsgICAgICAgICAgICAgICAgIC8qIGluIHRoZSBvcHRpb25zIGJpdG1hc2suICov Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsZl9vcHRzICY9IH54OwotICAgICAgICByZXR1cm4o c3VjY2Vzcyk7Ci0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotCi0gICAgICBjYXNlIFhZRklMSTog eyAgICAgICAgICAgICAgICAgICAgLyogSU5DT01QTEVURSAqLwotICAgICAgICAgIGV4dGVybiBz dHJ1Y3Qga2V5dGFiIGlmZGF0YWJbXTsKLSAgICAgICAgICBleHRlcm4gaW50IGtlZXA7Ci0gICAg ICAgICAgaWYgKCh5ID0gY21rZXkoaWZkYXRhYiwzLCIiLCJhdXRvIix4eHN0cmluZykpIDwgMCkg cmV0dXJuKHkpOwotICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwot ICAgICAgICAgIGlmIChybXNmbGcpIHsKLSAgICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdT JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzMTAiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeSA9PSAwID8gIjAiIDogKHkgPT0gMSA/ICIxIiA6ICIyIiksCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAga2VlcCA9IHk7Ci0gICAgICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7Ci0gICAgICAgICAgfQotICAgICAgfQotCi0jaWZkZWYgQ0tfVE1QRElSCi0gICAg ICBjYXNlIFhZRklMRzogeyAgICAgICAgICAgICAgICAgICAgLyogRG93bmxvYWQgZGlyZWN0b3J5 ICovCi0gICAgICAgICAgaW50IHg7Ci0gICAgICAgICAgY2hhciAqczsKLSNpZmRlZiBaRk5RRlAK LSAgICAgICAgICBzdHJ1Y3QgemZuZnAgKiBmbnA7Ci0jZW5kaWYgLyogWkZOUUZQICovCi0jaWZk ZWYgTUFDCi0gICAgICAgICAgY2hhciB0ZW1wWzM0XTsKLSNlbmRpZiAvKiBNQUMgKi8KLQotI2lm ZGVmIEdFTURPUwotICAgICAgICAgIGlmICgoeCA9IGNtZGlyKCJOYW1lIG9mIGxvY2FsIGRpcmVj dG9yeSwgb3IgY2FycmlhZ2UgcmV0dXJuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiIiwm cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkgPCAwICkgewotICAgICAgICAgICAg ICBpZiAoeCAhPSAtMykKLSAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgfQot I2Vsc2UKLSNpZmRlZiBPUzIKLSAgICAgICAgICBpZiAoKHggPSBjbWRpcigiTmFtZSBvZiBQQyBk aXNrIGFuZC9vciBkaXJlY3RvcnksXG5cCi0gICAgICAgb3IgcHJlc3MgdGhlIEVudGVyIGtleSB0 byB1c2UgY3VycmVudCBkaXJlY3RvcnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICIiLCZz LHh4c3RyaW5nKSkgPCAwICkgewotICAgICAgICAgICAgICBpZiAoeCAhPSAtMykKLSAgICAgICAg ICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgfQotI2Vsc2UKLSNpZmRlZiBNQUMKLSAgICAg ICAgICB4ID0gY2tzdHJuY3B5KHRlbXAsemhvbWUoKSwzMik7Ci0gICAgICAgICAgaWYgKHggPiAw KSBpZiAodGVtcFt4LTFdICE9ICc6JykgeyB0ZW1wW3hdID0gJzonOyB0ZW1wW3grMV0gPSBOVUw7 IH0KLSAgICAgICAgICBpZiAoKHggPSBjbXR4dCgiTmFtZSBvZiBNYWNpbnRvc2ggdm9sdW1lIGFu ZC9vciBmb2xkZXIsXG5cCi0gb3IgcHJlc3MgdGhlIFJldHVybiBrZXkgZm9yIHRoZSBkZXNrdG9w IG9uIHRoZSBib290IGRpc2siLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAsJnMsIHh4 c3RyaW5nKSkgPCAwICkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSNlbHNlCi0gICAgICAgICAg aWYgKCh4ID0gY21kaXIoIk5hbWUgb2YgbG9jYWwgZGlyZWN0b3J5LCBvciBjYXJyaWFnZSByZXR1 cm4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAmcywgeHhzdHJpbmcpKSA8IDAgKSB7 Ci0gICAgICAgICAgICAgIGlmICh4ICE9IC0zKQotICAgICAgICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgICB9Ci0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYg LyogR0VNRE9TICovCi0gICAgICAgICAgZGVidWcoRjExMCwiZG93bmxvYWQgZGlyIixzLDApOwot Ci0jaWZuZGVmIE1BQwotICAgICAgICAgIGlmICh4ID09IDIpIHsKLSAgICAgICAgICAgICAgcHJp bnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkIGluIGRpcmVjdG9yeSBuYW1lXG4iKTsKLSAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogTUFDICovCi0KLSNp ZmRlZiBaRk5RRlAKLSAgICAgICAgICBpZiAoKGZucCA9IHpmbnFmcChzLFRNUEJVRlNJWiAtIDEs dG1wYnVmKSkpIHsKLSAgICAgICAgICAgICAgaWYgKGZucC0+ZnBhdGgpCi0gICAgICAgICAgICAg ICAgaWYgKChpbnQpIHN0cmxlbihmbnAtPmZwYXRoKSA+IDApCi0gICAgICAgICAgICAgICAgICBz ID0gZm5wLT5mcGF0aDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZGVidWcoRjExMCwiZG93bmxv YWQgemZucWZwIixzLDApOwotI2VuZGlmIC8qIFpGTlFGUCAqLwotCi0gICAgICAgICAgY2tzdHJu Y3B5KGxpbmUscyxMSU5CVUZTSVopOyAgLyogTWFrZSBhIHNhZmUgY29weSAqLwotI2lmbmRlZiBN QUMKLSAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApICAgICAgICAvKiBHZXQgY29uZmly bWF0aW9uICovCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0jZW5kaWYgLyogTUFDICovCi0KLSNp ZmRlZiBDS19MT0dJTgotICAgICAgICBpZiAoaXNndWVzdCkgewotICAgICAgICAgICAgLyogRG9u J3QgbGV0IGd1ZXN0cyBjaGFuZ2UgZXhpc3RpbmcgZmlsZXMgKi8KLSAgICAgICAgICAgIHByaW50 ZigiP1RoaXMgY29tbWFuZCBub3QgdmFsaWQgZm9yIGd1ZXN0c1xuIik7Ci0gICAgICAgICAgICBy ZXR1cm4oLTkpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICAgICAgICB4 ID0gc3RybGVuKHMpOwotCi0gICAgICAgICAgaWYgKHgpIHsKLSNpZmRlZiBkYXRhZ2VuZXJhbAkJ CS8qIEFPUy9WUyAqLwotICAgICAgICAgICAgICBpZiAoc1t4LTFdID09ICc6JykgICAgICAgIC8q IGhvbWRpciBlbmRzIGluIGNvbG9uLCAqLwotICAgICAgICAgICAgICAgIHNbeC0xXSA9IE5VTDsg ICAgICAgICAgIC8qIGFuZCAiZGlyIiBkb2Vzbid0IGxpa2UgdGhhdC4uLiAqLwotI2Vsc2UKLSNp ZmRlZiBPUzJPUlVOSVgJCQkvKiBVbml4IG9yIEstOTUuLi4gKi8KLQkgICAgICBpZiAoKHggPCAo TElOQlVGU0laIC0gMikpICYmIC8qIEFkZCB0cmFpbGluZyBkaXJzZXAgKi8KLQkJICAoc1t4LTFd ICE9ICcvJykpIHsJLyogaWYgbm9uZSBwcmVzZW50LiAgKi8KLQkJICBzW3hdID0gJy8nOwkJLyog Tm90ZSB0aGF0IFdpbmRvd3MgcGF0aCBoYXMgKi8KLQkJICBzW3grMV0gPSBOVUw7CQkvKiBiZWVu IGNhbm9uaWNhbGl6ZWQgdG8gZm9yd2FyZCAqLwotCSAgICAgIH0gICAgICAgICAgICAgICAgCQkv KiBzbGFzaGVzIGF0IHRoaXMgcG9pbnQuICovCi0jZW5kaWYgLyogT1MyT1JVTklYICovCi0jZW5k aWYgLyogZGF0YWdlbmVyYWwgKi8KLSAgICAgICAgICAgICAgbWFrZXN0cigmZGxkaXIscyk7Ci0g ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtYWtlc3RyKCZkbGRpcixOVUxMKTsgICAgICAg LyogZGxkaXIgaXMgTlVMTCB3aGVuIG5vdCBhc3NpZ25lZCAqLwotCi0gICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLSAgICAgIGNh c2UgWFlGSUxZOgotICAgICAgICByZXR1cm4oc2V0ZGVzdCgpKTsKLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotI2lmZGVmIENLX0NUUkxaCi0gICAgICBjYXNlIFhZRklMVjogeyAgICAgICAgICAgICAg ICAgICAgLyogRU9GICovCi0gICAgICAgICAgZXh0ZXJuIGludCBlb2ZtZXRob2Q7Ci0gICAgICAg ICAgaWYgKCh4ID0gY21rZXkoZW9mdGFiLDMsImVuZC1vZi1maWxlIGRldGVjdGlvbiBtZXRob2Qi LCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAg ICAgcmV0dXJuKHgpOwotICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAg ICAgIHJldHVybih5KTsKLSAgICAgICAgICBlb2ZtZXRob2QgPSB4OwotICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0jZW5kaWYgLyogQ0tfQ1RSTFogKi8KLQotI2lmbmRl ZiBOT1hGRVIKLSNpZmRlZiBVTklYCi0gICAgICBjYXNlIFhZRklMSDogeyAgICAgICAgICAgICAg ICAgICAgLyogT1VUUFVUICovCi0gICAgICAgICAgZXh0ZXJuIGludCB6b2ZidWZmZXIsIHpvYnVm c2l6ZSwgem9mYmxvY2s7Ci0jaWZkZWYgRFlOQU1JQwotICAgICAgICAgIGV4dGVybiBjaGFyICog em91dGJ1ZmZlcjsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSAgICAgICAgICBpZiAoKHggPSBj bWtleSh6b2Z0YWIsbnpvZnRhYiwib3V0cHV0IGZpbGUgd3JpdGluZyBtZXRob2QiLCIiLAotICAg ICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICAgIGlmICh4ID09IFpPRl9CVUYgfHwgeCA9PSBaT0ZfTkJVRikgewotICAg ICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgib3V0cHV0IGJ1ZmZlciBzaXplIiwiMzI3NjgiLDEw LCZ6LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAg ICAgICAgaWYgKHogPCAxKSB7Ci0gICAgICAgICAgICAgICAgICBwcmludGYoIj9CYWQgc2l6ZSAt ICVkXG4iLCB6KTsKLSAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAg IH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eSk7Ci0gICAgICAgICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgICBjYXNlIFpPRl9CVUY6Ci0g ICAgICAgICAgICBjYXNlIFpPRl9OQlVGOgotICAgICAgICAgICAgICB6b2ZidWZmZXIgPSAoeCA9 PSBaT0ZfQlVGKTsKLSAgICAgICAgICAgICAgem9idWZzaXplID0gejsKLSAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFpPRl9CTEs6Ci0gICAgICAgICAgICBjYXNlIFpPRl9O QkxLOgotICAgICAgICAgICAgICB6b2ZibG9jayA9ICh4ID09IFpPRl9CTEspOwotICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICB9Ci0jaWZkZWYgRFlOQU1JQwotICAgICAgICAgIGlmICh6 b3V0YnVmZmVyKSBmcmVlKHpvdXRidWZmZXIpOwotICAgICAgICAgIGlmICghKHpvdXRidWZmZXIg PSAoY2hhciAqKW1hbGxvYyh6KSkpIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCJNRU1PUlkgQUxM T0NBVElPTiBFUlJPUiAtIEZBVEFMXG4iKTsKLSAgICAgICAgICAgICAgZG9leGl0KEJBRF9FWElU LC0xKTsKLSAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHpvYnVmc2l6ZSA9IHo7Ci0jZWxz ZQotICAgICAgICAgIGlmICh6IDw9IE9CVUZTSVpFKSB7Ci0gICAgICAgICAgICAgIHpvYnVmc2l6 ZSA9IHo7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnks ICVkIGlzIHRvbyBiaWcgLSAlZCBpcyB0aGUgbWF4aW11bVxuIix6LE9CVUZTSVpFKTsKLSAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwot ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0jZW5kaWYgLyogVU5JWCAq LwotCi0jaWZkZWYgUEFUVEVSTlMKLSAgICAgIGNhc2UgWFlGSUJQOiAgICAgICAgICAgICAgICAg ICAgICAvKiBCSU5BUlktUEFUVEVSTiAqLwotICAgICAgY2FzZSBYWUZJVFA6IHsgICAgICAgICAg ICAgICAgICAgIC8qIFRFWFQtUEFUVEVSTiAqLwotICAgICAgICAgIGNoYXIgKiB0bXBbRlRQQVRU RVJOU107Ci0gICAgICAgICAgaW50IGksIG4gPSAwOwotICAgICAgICAgIHdoaWxlIChuIDwgRlRQ QVRURVJOUykgewotICAgICAgICAgICAgICB0bXBbbl0gPSBOVUxMOwotICAgICAgICAgICAgICBp ZiAoKHggPSBjbWZsZCgiUGF0dGVybiIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsK LSAgICAgICAgICAgICAgcyA9IGJyc3RyaXAobGluZSk7Ci0gICAgICAgICAgICAgIG1ha2VzdHIo Jih0bXBbbisrXSkscyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICh4ID09IC0zKSB4ID0g Y21jZm0oKTsKLSAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IG47IGkrKykgewotICAgICAgICAg ICAgICBpZiAoeCA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoeSA9PSBYWUZJQlApCi0g ICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksdG1wW2ldKTsKLSAg ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKHR4dHBh dHRlcm5zW2ldKSx0bXBbaV0pOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGZyZWUo dG1wW2ldKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHkgPT0gWFlGSUJQKSAgICAgICAg ICAgICAgLyogTnVsbC10ZXJtaW5hdGUgdGhlIGxpc3QgKi8KLSAgICAgICAgICAgIG1ha2VzdHIo JihiaW5wYXR0ZXJuc1tpXSksTlVMTCk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWFr ZXN0cigmKHR4dHBhdHRlcm5zW2ldKSxOVUxMKTsKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAg ICB9Ci0KLSAgICAgIGNhc2UgWFlGSVBBOiAgICAgICAgICAgICAgICAgICAgICAvKiBQQVRURVJO UyAqLwotICAgICAgICBpZiAoKHggPSBzZXRvbmF1dCgmcGF0dGVybnMpKSA8IDApCi0gICAgICAg ICAgcmV0dXJuKHgpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotI2VuZGlmIC8qIFBB VFRFUk5TICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBVTklDT0RFCi0gICAgICBj YXNlIFhZRklMVTogeyAgICAgICAgICAgICAgICAgICAgLyogVUNTICovCi0gICAgICAgICAgZXh0 ZXJuIGludCB1Y3NvcmRlciwgdWNzYm9tLCBieXRlb3JkZXI7Ci0gICAgICAgICAgaWYgKCh4ID0g Y21rZXkodWNzdGFiLG51Y3N0YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICBy ZXR1cm4oeCk7Ci0gICAgICAgICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgICBjYXNlIFVDU19C WVQ6Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KGJvdGFiLG5ib3RhYiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIkJ5dGUgb3JkZXIiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBieXRlb3JkZXIgPyAibGl0dGxlLWVuZGlhbiIgOiAiYmlnLWVuZGlhbiIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKLSAgICAgICAgICAgICAgICAgICApIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAg ICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgIHVjc29yZGVyID0geTsKLSAgICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICAgIGNhc2UgVUNTX0JPTToKLSAgICAg ICAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKQot ICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgdWNzYm9t ID0geTsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICAgIGRl ZmF1bHQ6Ci0gICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgfQotICAgICAgfQot I2VuZGlmIC8qIFVOSUNPREUgKi8KLQotI2lmbmRlZiBkYXRhZ2VuZXJhbAotICAgICAgY2FzZSBY WUZfSU5TUDogeyAgICAgICAgICAgICAgICAgIC8qIFNDQU4gKElOU1BFQ1RJT04pICovCi0gICAg ICAgICAgZXh0ZXJuIGludCBmaWxlcGVlaywgbnNjYW5maWxlOwotICAgICAgICAgIGlmICgoeCA9 IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVy bih4KTsKLSAgICAgICAgICBpZiAoeSkgewotICAgICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgi SG93IG11Y2ggdG8gc2NhbiIsY2tpdG9hKFNDQU5GSUxFQlVGKSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTAsJnoseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJu KHkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0gICAg ICAgICAgICByZXR1cm4oeSk7Ci0jaWZkZWYgVk1TCi0gICAgICAgICAgZmlsZXBlZWsgPSAwOwot ICAgICAgICAgIG5zY2FuZmlsZSA9IDA7Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK LSNlbHNlCi0gICAgICAgICAgZmlsZXBlZWsgPSB4OwotICAgICAgICAgIG5zY2FuZmlsZSA9IHo7 Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAg IH0KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotCi0gICAgICBjYXNlIFhZRl9ERkxUOgotICAg ICAgICB5ID0gMDsKLSNpZm5kZWYgTk9DU0VUUwotICAgICAgICBpZiAoKHkgPSBjbWtleShmZGZs dGFiLG5mZGZsdCwiIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0g ICAgICAgIGlmICh5ID09IDcgfHwgeSA9PSA4KSB7Ci0gICAgICAgICAgICBpZiAoeSA9PSA3KQot ICAgICAgICAgICAgICBzID0gZmNzaW5mb1tkY3NldDddLmtleXdvcmQ7Ci0gICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgIHMgPSBmY3NpbmZvW2Rjc2V0OF0ua2V5d29yZDsKLSAgICAgICAg ICAgIGlmICgoeCA9IGNta2V5KGZjc3RhYixuZmlsYywiY2hhcmFjdGVyLXNldCIscyx4eHN0cmlu ZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICB9Ci0gICAgICAgIGNr c3RybmNweShsaW5lLGZjc2luZm9beF0ua2V5d29yZCxMSU5CVUZTSVopOwotICAgICAgICBzID0g bGluZTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwg MCkKLSAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgIHN3aXRjaCAoeSkgewotI2lmbmRlZiBO T0NTRVRTCi0gICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgaWYgKGZjc2luZm9beF0uc2l6 ZSAhPSAxMjgpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzIC0gTm90IGEgNy1iaXQgc2V0 XG4iLHMpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBkY3NldDcgPSB4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA4 OgotICAgICAgICAgICAgaWYgKGZjc2luZm9beF0uc2l6ZSAhPSAyNTYpIHsKLSAgICAgICAgICAg ICAgICBwcmludGYoIiVzIC0gTm90IGFuIDgtYml0IHNldFxuIixzKTsKLSAgICAgICAgICAgICAg ICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGNzZXQ4ID0geDsKLSAg ICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICAgICAgICBkZWZhdWx0 OgotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOwotCi0jaWZuZGVmIE5PWEZFUgotICAgICAgY2FzZSA5OTk3OiAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEZBU1RMT09LVVBTICovCi0gICAgICAgIHJldHVybihzdWNjZXNzID0g c2V0b24oJnN0YXRoYWNrKSk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBVTklYCi0j aWZkZWYgRFlOQU1JQwotICAgICAgY2FzZSBYWUZfTFNJWjogeyAgICAgICAgICAgICAgICAgIC8q IExJU1RTSVpFICovCi0gICAgICAgICAgaW50IHp6OwotICAgICAgICAgIHkgPSBjbW51bSgiTWF4 aW11bSBudW1iZXIgb2YgZmlsZW5hbWVzIiwiIiwxMCwmeCx4eHN0cmluZyk7Ci0gICAgICAgICAg aWYgKCh4ID0gc2V0bnVtKCZ6eix4LHksLTEpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgICAgaWYgKHpzZXRmaWwoenosMykgPCAwKSB7Ci0gICAgICAgICAgICAgIHByaW50 ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOwotICAgICAgICAgICAgICByZXR1cm4o LTkpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAg fQotICAgICAgY2FzZSBYWUZfU1NQQTogeyAgICAgICAgICAgICAgICAgIC8qIFNUUklOR1NQQUNF ICovCi0gICAgICAgICAgaW50IHp6OwotICAgICAgICAgIHkgPSBjbW51bSgiTnVtYmVyIG9mIGNo YXJhY3RlcnMgZm9yIGZpbGVuYW1lIGxpc3QiLAotICAgICAgICAgICAgICAgICAgICAiIiwxMCwm eCx4eHN0cmluZyk7Ci0gICAgICAgICAgaWYgKCh4ID0gc2V0bnVtKCZ6eix4LHksLTEpKSA8IDAp Ci0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgaWYgKHpzZXRmaWwoenosMSkgPCAw KSB7Ci0gICAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIp OwotICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotCi0jZW5kaWYgLyogRFlOQU1JQyAqLwotI2VuZGlm IC8qIFVOSVggKi8KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRmKCI/dW5leHBlY3Rl ZCBmaWxlIHBhcmFtZXRlclxuIik7Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotfQotCi0j aWZkZWYgVU5JWAotI2lmbmRlZiBOT1BVVEVOVgotI2lmZGVmIEJJR0JVRk9LCi0jZGVmaW5lIE5Q VVRFTlZTIDQwOTYKLSNlbHNlCi0jZGVmaW5lIE5QVVRFTlZTIDEyOAotI2VuZGlmCS8qIEJJR0JV Rk9LICovCi0vKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbXVzdCBiZSBzdGF0aWMsIG5vdCBhdXRv bWF0aWMgKi8KLQotc3RhdGljIGNoYXIgKiBwdXRlbnZzW05QVVRFTlZTXTsJLyogQXJyYXkgb2Yg ZW52aXJvbm1lbnQgdmFyIHN0cmluZ3MgKi8KLXN0YXRpYyBpbnQgbnB1dGVudnMgPSAtMTsJCS8q IFBvaW50ZXIgaW50byBhcnJheSAqLwotLyoKLSAgSWYgYW55b25lIGV2ZXIgbm90aWNlcyB0aGUg bGltaXRhdGlvbiBvbiB0aGUgbnVtYmVyIG9mIFBVVEVOVnMsIHRoZSBsaXN0Ci0gIGNhbiBiZSBt YWRlIGR5bmFtaWMsIHdlIGNhbiByZWN5Y2xlIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBuYW1lLCBl dGMuCi0qLwotaW50Ci1kb3B1dGVudihzMSwgczIpIGNoYXIgKiBzMTsgY2hhciAqIHMyOyB7Ci0g ICAgY2hhciAqIHMsICogdCA9IHRtcGJ1ZjsJCS8qIENyZWF0ZSBvciBhbHRlciBlbnZpcm9ubWVu dCB2YXIgKi8KLQotICAgIGlmIChucHV0ZW52cyA9PSAtMSkgewkJLyogVGFibGUgbm90IHVzZWQg eWV0ICovCi0JaW50IGk7CQkJCS8qIEluaXRpYWxpemUgdGhlIHBvaW50ZXJzICovCi0JZm9yIChp ID0gMDsgaSA8IE5QVVRFTlZTOyBpKyspCi0JICBwdXRlbnZzW2ldID0gTlVMTDsKLQlucHV0ZW52 cyA9IDA7Ci0gICAgfQotICAgIGlmICghczEpIHJldHVybigxKTsJCQkvKiBOb3RoaW5nIHRvIGRv ICovCi0gICAgaWYgKCEqczEpIHJldHVybigxKTsJCS8qIGRpdHRvICovCi0KLSAgICBpZiAoY2tp bmRleCgiPSIsczEsMCwwLDApKSB7CS8qIERvZXMgdGhlIG5hbWUgY29udGFpbiBhbiAnPSc/ICov Ci0JcHJpbnRmKAkJCQkvKiBwdXRlbnYoKSBkb2VzIG5vdCBhbGxvdyB0aGlzLiAqLwotCSAvKiBU aGlzIGFsc28gY2F0Y2hlcyB0aGUgJ3B1dGVudiBuYW1lPXZhbHVlJyBjYXNlICovCi0gICAgICAg ICAiP1BVVEVOViAtIEVxdWFsIHNpZ24gaW4gdmFyaWFibGUgbmFtZSAtICdoZWxwIHB1dGVudicg Zm9yIGluZm8uXG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgbnB1dGVudnMr KzsJCQkJLyogUG9pbnQgdG8gbmV4dCBmcmVlIHN0cmluZyAqLwotCi0gICAgZGVidWcoRjExMSwi ZG9wdXRlbnYgczEiLHMxLG5wdXRlbnZzKTsKLSAgICBkZWJ1ZyhGMTExLCJkb3B1dGVudiBzMiIs czIsbnB1dGVudnMpOwotCi0gICAgaWYgKG5wdXRlbnZzID4gTlBVVEVOVlMgLSAxKSB7CS8qIE5v dGljZSB0aGUgZW5kICovCi0JcHJpbnRmKCI/UFVURU5WIC0gc3RhdGljIGJ1ZmZlciBzcGFjZSBl eGhhdXN0ZWRcbiIpOwotCXJldHVybigtOSk7Ci0gICAgfQotICAgIC8qIFF1b3RlcyBhcmUgbm90 IG5lZWRlZCBidXQgd2UgYWxsb3cgdGhlbSBmb3IgZmFtaWxpYXJpdHkgKi8KLSAgICAvKiBidXQg dGhlbiB3ZSBzdHJpcCB0aGVtLCBzbyBzeW50YXggaXMgc2FtZSBhcyBmb3IgVW5peCBzaGVsbCAq LwotCi0gICAgaWYgKHMyKSB7Ci0JczIgPSBicnN0cmlwKHMyKTsKLSAgICB9IGVsc2UgewotCXMy ID0gKGNoYXIgKikiIjsKLSAgICB9Ci0gICAgY2ttYWttc2codCxUTVBCVUZTSVosczEsIj0iLHMy LE5VTEwpOwotICAgIGRlYnVnKEYxMTEsImRvcHV0ZW52Iix0LG5wdXRlbnZzKTsKLSAgICAoVk9J RCkgbWFrZXN0cigmKHB1dGVudnNbbnB1dGVudnNdKSx0KTsgLyogTWFrZSBhIHNhZmUgcGVybWFu YW5lbnQgY29weSAqLwotICAgIGlmICghcHV0ZW52c1tucHV0ZW52c10pIHsKLQlwcmludGYoIj9Q VVRFTlYgLSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKLQlyZXR1cm4oLTkpOwotICAg IH0KLSAgICBpZiAocHV0ZW52KHB1dGVudnNbbnB1dGVudnNdKSkgewotCXByaW50ZigiP1BVVEVO ViAtICVzXG4iLGNrX2VycnN0cigpKTsKLQlyZXR1cm4oLTkpOwotICAgIH0gZWxzZSByZXR1cm4o c3VjY2VzcyA9IDEpOwotfQotI2VuZGlmCS8qIE5PUFVURU5WICovCi0jZW5kaWYJLyogVU5JWCAq LwotCi1pbnQKLXNldHRybXR5cCgpIHsKLSNpZmRlZiBPUzIKLSNpZmRlZiBUTkNPREUKLSAgICBl eHRlcm4gaW50IHR0bnVtOyAgICAgICAgICAgICAgICAgICAgLyogTGFzdCBUZWxuZXQgVGVybWlu YWwgVHlwZSBzZW50ICovCi0gICAgZXh0ZXJuIGludCB0dG51bWVuZDsgICAgICAgICAgICAgICAg IC8qIEhhcyBlbmQgb2YgbGlzdCBiZWVuIGZvdW5kICovCi0jZW5kaWYgLyogVE5DT0RFICovCi0g ICAgaWYgKCh4ID0gY21rZXkodHR5cHRhYixudHR5cCwiIiwidnQyMjAiLHh4c3RyaW5nKSkgPCAw KQotICAgICAgcmV0dXJuKHgpOwotICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIHJl dHVybih5KTsKLSAgICBzZXR0ZXJtdHlwZSh4LDEpOwotI2lmZGVmIFROQ09ERQotICAgIC8qIFNv IHdlIHNlbmQgdGhlIGNvcnJlY3QgdGVybWluYWwgbmFtZSB0byB0aGUgaG9zdCBpZiBpdCBhc2tz IGZvciBpdCAqLwotICAgIHR0bnVtID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExh c3QgVGVsbmV0IFRlcm1pbmFsIFR5cGUgc2VudCAqLwotICAgIHR0bnVtZW5kID0gMDsgICAgICAg ICAgICAgICAgICAgICAgIC8qIGVuZCBvZiBsaXN0IG5vdCBmb3VuZCAqLwotI2VuZGlmIC8qIFRO Q09ERSAqLwotICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0jZWxzZSAgLyogTm90IE9TMiAqLwot I2lmZGVmIFVOSVgKLSAgICBleHRlcm4gaW50IGZ4ZF9pbml0ZWQ7Ci0gICAgeCA9IGNtdHh0KCJU ZXJtaW5hbCB0eXBlIG5hbWUsIGNhc2Ugc2Vuc2l0aXZlIiwiIiwmcyxOVUxMKTsKLSNpZmRlZiBO T1BVVEVOVgotICAgIHN1Y2Nlc3MgPSAxOwotI2Vsc2UKLSAgICBzdWNjZXNzID0gZG9wdXRlbnYo IlRFUk0iLHMpOwkvKiBTZXQgdGhlIFRFUk0gdmFyaWFibGUgKi8KLSNpZmRlZiBDS19DVVJTRVMK LSAgICBmeGRfaW5pdGVkID0gMDsJICAgICAgIC8qIEZvcmNlIHJlaW5pdGlhbGl6YXRpb24gb2Yg Y3Vyc2VzIGRhdGFiYXNlICovCi0gICAgKHZvaWQpZG94ZGlzKDApOwkJICAgICAvKiBSZS1pbml0 aWFsaXplIGZpbGUgdHJhbnNmZXIgZGlzcGxheSAqLwotICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7 CQkvKiBGaXggY29tbWFuZCB0ZXJtaW5hbCAqLwotI2VuZGlmCS8qIENLX0NVUlNFUyAqLwotI2Vu ZGlmCS8qIE5PUFVURU5WICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MpOwotI2Vsc2UKLSAgICBwcmlu dGYoCi0iXG4gU29ycnksIHRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdCBkb2VzIG5vdCBzdXBwb3J0 IHRoZSBTRVQgVEVSTUlOQUwgVFlQRVxuIik7Ci0gICAgcHJpbnRmKAotIiBjb21tYW5kLiAgVHlw ZSBcImhlbHAgc2V0IHRlcm1pbmFsXCIgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG4iKTsKLSAg ICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmCS8qIFVOSVggKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLX0KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0vKiBNUy1ET1MgS0VSTUlUIGNv bXBhdGliaWxpdHkgbW9kZXMgKi8KLWludAotc2V0bXNrKCkgewotICAgIGlmICgoeSA9IGNta2V5 KG1za3RhYixubXNrLCJNUy1ET1MgS2VybWl0IGNvbXBhdGliaWxpdHkgbW9kZSIsCi0gICAgICAg ICAgICAgICAgICAgICJrZXljb2RlcyIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLQotICAg IHN3aXRjaCAoIHkgKSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgY2FzZSBNU0tfQ09MT1I6Ci0g ICAgICAgIHJldHVybihzZXRvbigmbXNrY29sb3JzKSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgY2FzZSBNU0tfS0VZUzoKLSAgICAgICAgcmV0dXJuKHNldG9uKCZtc2trZXlzKSk7Ci0g ICAgICBjYXNlIE1TS19SRU46Ci0gICAgICAgIHJldHVybihzZXRvbigmbXNrcmVuYW1lKSk7Ci0g ICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2hvdWxkbid0IGdldCBo ZXJlLiAqLwotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLX0KLSNlbmRpZiAvKiBPUzIgKi8K LQotI2lmZGVmIENLVElETEUKLXN0YXRpYyBjaGFyIGlhY3RidWZbMTMyXTsKLQotY2hhciAqCi1n ZXRpYWN0KCkgewotICAgIHN3aXRjaCAodHRfaWRsZWFjdCkgewotICAgICAgY2FzZSBJRExFX1JF VDogIHJldHVybigicmV0dXJuIik7Ci0gICAgICBjYXNlIElETEVfRVhJVDogcmV0dXJuKCJleGl0 Iik7Ci0gICAgICBjYXNlIElETEVfSEFORzogcmV0dXJuKCJoYW5ndXAiKTsKLSNpZmRlZiBUTkNP REUKLSAgICAgIGNhc2UgSURMRV9UTk9QOiByZXR1cm4oIlRlbG5ldCBOT1AiKTsKLSAgICAgIGNh c2UgSURMRV9UQVlUOiByZXR1cm4oIlRlbG5ldCBBWVQiKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8K LQotICAgICAgY2FzZSBJRExFX09VVDogewotICAgICAgICAgIGludCBjLCBrLCBuOwotICAgICAg ICAgIGNoYXIgKiBwLCAqIHEsICogdDsKLSAgICAgICAgICBrID0gY2tzdHJuY3B5KGlhY3RidWYs Im91dHB1dCAiLDEzMik7Ci0gICAgICAgICAgbiA9IGs7Ci0gICAgICAgICAgcSA9ICZpYWN0YnVm W2tdOwotICAgICAgICAgIHAgPSB0dF9pZGxlc3RyOwotICAgICAgICAgIGlmICghcCkgcCA9ICIi OwotICAgICAgICAgIGlmICghKnApIHJldHVybigib3V0cHV0IE5VTCIpOwotICAgICAgICAgIHdo aWxlICgoYyA9ICpwKyspICYmIG4gPCAxMzEpIHsKLSAgICAgICAgICAgICAgYyAmPSAweGZmOwot ICAgICAgICAgICAgICBpZiAoYyA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAobiA+ IDEzMCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAqcSsrID0gJ1xcJzsKLSAgICAgICAgICAg ICAgICAgICpxKysgPSAnXFwnOwotICAgICAgICAgICAgICAgICAgKnEgPSBOVUw7Ci0gICAgICAg ICAgICAgICAgICBuICs9IDI7Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGMgPiAzMiAmJiBj IDwgMTI3KSB8fCBjID4gMTU5KSB7Ci0gICAgICAgICAgICAgICAgICAqcSsrID0gYzsKLSAgICAg ICAgICAgICAgICAgICpxID0gTlVMOwotICAgICAgICAgICAgICAgICAgbisrOwotICAgICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgaWYgKG4gPiAoMTMxIC0gNikpCi0gICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgc3ByaW50ZihxLCJcXHsl ZH0iLGMpOwotICAgICAgICAgICAgICAgICAgayA9IHN0cmxlbihxKTsKLSAgICAgICAgICAgICAg ICAgIHEgKz0gazsKLSAgICAgICAgICAgICAgICAgIG4gKz0gazsKLSAgICAgICAgICAgICAgICAg ICpxID0gTlVMOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgICpxID0g TlVMOwotI2lmZGVmIE9TMgotICAgICAgICAgIGsgPSB0dF9jb2xzW1ZURVJNXTsKLSNlbHNlCi0g ICAgICAgICAgayA9IHR0X2NvbHM7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgaWYgKG4g PiBrIC0gNTIpIHsKLSAgICAgICAgICAgICAgbiA9IGsgLSA1MjsKLSAgICAgICAgICAgICAgaWFj dGJ1ZltuLTJdID0gJy4nOwotICAgICAgICAgICAgICBpYWN0YnVmW24tMV0gPSAnLic7Ci0gICAg ICAgICAgICAgIGlhY3RidWZbbl0gPSBOVUw7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVy bihpYWN0YnVmKTsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6IHJldHVybigidW5rbm93biIpOwot ICAgIH0KLX0KLSNlbmRpZiAvKiBDS1RJRExFICovCi0KLSNpZm5kZWYgTk9DU0VUUwotVk9JRAot c2V0bGNsY2hhcnNldCh4KSBpbnQgeDsgewotICAgIGludCBpOwotICAgIHRjc2wgPSB5OyAgICAg ICAgICAgICAgICAgICAvKiBMb2NhbCBjaGFyYWN0ZXIgc2V0ICovCi0jaWZkZWYgT1MyCi0gICAg Zm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgICBHW2ldLmluaXQgPSBUUlVFOwotICAg ICAgICB4ID0gR1tpXS5kZXNpZ25hdGlvbjsKLSAgICAgICAgR1tpXS5jMSA9ICh4ICE9IHRjc2wp ICYmIGNzX2lzX3N0ZCh4KTsKLSAgICAgICAgeCA9IEdbaV0uZGVmX2Rlc2lnbmF0aW9uOwotICAg ICAgICBHW2ldLmRlZl9jMSA9ICh4ICE9IHRjc2wpICYmIGNzX2lzX3N0ZCh4KTsKLSAgICB9Ci0j ZW5kaWYgLyogT1MyICovCi19Ci0KLVZPSUQKLXNldHJlbWNoYXJzZXQoeCwgeikgaW50IHgsIHo7 IHsKLSAgICBpbnQgaTsKLQotI2lmZGVmIEtVSQotICAgIEt1aVNldFByb3BlcnR5KCBLVUlfVEVS TV9SRU1DSEFSU0VULCAobG9uZykgeCwgKGxvbmcpIHogKSA7Ci0jZW5kaWYgLyogS1VJICovCi0j aWZkZWYgVU5JQ09ERQotICAgIGlmICh4ID09IFRYX1RSQU5TUCkKLSNlbHNlIC8qIFVOSUNPREUg Ki8KLSAgICBpZiAoeCA9PSBGQ19UUkFOU1ApCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotICAgIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUUkFOU1BBUkVOVD8gKi8KLSNpZm5kZWYgT1My Ci0gICAgICAgIHRjc3IgPSB0Y3NsOyAgICAgICAgICAgIC8qIE1ha2UgYm90aCBzZXRzIHRoZSBz YW1lICovCi0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBDS09VTkkKLSAgICAgICAgdHRfdXRmOCA9 IDA7ICAgICAgICAgICAgLyogVHVybiBvZmYgVVRGOCBmbGFnICovCi0gICAgICAgIHRjc3IgPSB0 Y3NsID0gZGVjX2tiZCA9IFRYX1RSQU5TUDsgLyogTm8gdHJhbnNsYXRpb24gKi8KLSAgICAgICAg dGNzX3RyYW5zcCA9IDE7Ci0KLSAgICAgICAgaWYgKCFjc19pc19ucmModGNzbCkpIHsKLSAgICAg ICAgICAgIEdbMF0uZGVmX2Rlc2lnbmF0aW9uID0gR1swXS5kZXNpZ25hdGlvbiA9IFRYX0FTQ0lJ OwotICAgICAgICAgICAgR1swXS5pbml0ID0gVFJVRTsKLSAgICAgICAgICAgIEdbMF0uZGVmX2Mx ID0gR1swXS5jMSA9IEZBTFNFOwotICAgICAgICAgICAgR1swXS5zaXplID0gY3M5NDsKLSAgICAg ICAgICAgIEdbMF0ubmF0aW9uYWwgPSBGQUxTRTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGkg PSBjc19pc19ucmModGNzbCkgPyAwIDogMTsgaSA8IDQ7IGkrKykgewotICAgICAgICAgICAgR1tp XS5kZWZfZGVzaWduYXRpb24gPSBHW2ldLmRlc2lnbmF0aW9uID0gdGNzbDsKLSAgICAgICAgICAg IEdbaV0uaW5pdCA9IFRSVUU7Ci0gICAgICAgICAgICBHW2ldLmRlZl9jMSA9IEdbaV0uYzEgPSBG QUxTRTsKLSAgICAgICAgICAgIHN3aXRjaCAoY3Nfc2l6ZShHW2ldLmRlc2lnbmF0aW9uKSkgeyAv KiA5NCwgOTYsIG9yIDEyOCAqLwotICAgICAgICAgICAgY2FzZSAxMjg6Ci0gICAgICAgICAgICBj YXNlIDk2OgotICAgICAgICAgICAgICAgIEdbaV0uc2l6ZSA9IEdbaV0uZGVmX3NpemUgPSBjczk2 OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA5NDoKLSAgICAgICAg ICAgICAgICBHW2ldLnNpemUgPSBHW2ldLmRlZl9zaXplID0gY3M5NDsKLSAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgR1tpXS5zaXpl ID0gR1tpXS5kZWZfc2l6ZSA9IGNzbWI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBHW2ldLm5hdGlvbmFsID0gY3NfaXNfbnJjKHgpOwotICAgICAg ICB9Ci0jZWxzZSAvKiBDS09VTkkgKi8KLSAgICAgICAgdGNzciA9IHRjc2w7ICAgICAgICAgICAg LyogTWFrZSBib3RoIHNldHMgdGhlIHNhbWUgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7 IGkrKykgewotICAgICAgICAgICAgR1tpXS5kZWZfZGVzaWduYXRpb24gPSBHW2ldLmRlc2lnbmF0 aW9uID0gRkNfVFJBTlNQOwotICAgICAgICAgICAgR1tpXS5pbml0ID0gRkFMU0U7Ci0gICAgICAg ICAgICBHW2ldLnNpemUgPSBHW2ldLmRlZl9zaXplID0gY3M5NjsKLSAgICAgICAgICAgIEdbaV0u YzEgPSBHW2ldLmRlZl9jMSA9IEZBTFNFOwotICAgICAgICAgICAgR1tpXS5ydG9pID0gTlVMTDsK LSAgICAgICAgICAgIEdbaV0uaXRvbCA9IE5VTEw7Ci0gICAgICAgICAgICBHW2ldLmx0b2kgPSBO VUxMOwotICAgICAgICAgICAgR1tpXS5pdG9yID0gTlVMTDsKLSAgICAgICAgICAgIEdbaV0ubmF0 aW9uYWwgPSBGQUxTRTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLT1VOSSAqLwotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2lmZGVmIE9TMgotI2lmZGVmIENLT1VO SQotICAgIGVsc2UgaWYgKHggPT0gVFhfVVRGOCkgewotICAgICAgICB0Y3NfdHJhbnNwID0gMDsK LSAgICAgICAgdHRfdXRmOCA9IDE7ICAgICAgICAgICAgLyogVHVybiBpdCBvbiBpZiB3ZSBhcmUg VVRGOCAqLwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIENLT1VOSSAqLwotICAg IGVsc2UgewotICAgICAgICB0Y3NfdHJhbnNwID0gMDsKLSAgICAgICAgdGNzciA9IHg7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZW1vdGUgY2hhcmFjdGVyIHNldCAqLwotI2lmZGVmIENLT1VO SQotICAgICAgICB0dF91dGY4ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIFVU RjggZmxhZyAqLwotI2VuZGlmIC8qIENLT1VOSSAqLwotCi0gICAgICAgIGlmICh6ID09IFRUX0dS X0FMTCkgewotICAgICAgICAgICAgaW50IGk7Ci0jaWZkZWYgVU5JQ09ERQotICAgICAgICAgICAg ZGVjX2tiZCA9IHg7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IDQ7IGkrKykgewotICAgICAgICAgICAgICAgIEdbaV0uaW5pdCA9IFRSVUU7Ci0gICAg ICAgICAgICAgICAgaWYgKCBpID09IDAgJiYgIWNzX2lzX25yYyh4KSApIHsKLSAgICAgICAgICAg ICAgICAgICAgR1swXS5kZXNpZ25hdGlvbiA9IEdbMF0uZGVmX2Rlc2lnbmF0aW9uID0gRkNfVVNB U0NJSTsKLSAgICAgICAgICAgICAgICAgICAgR1swXS5zaXplID0gR1swXS5kZWZfc2l6ZSA9IGNz OTQ7Ci0gICAgICAgICAgICAgICAgICAgIEdbMF0ubmF0aW9uYWwgPSAxOwotICAgICAgICAgICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEdbaV0uZGVmX2Rlc2lnbmF0aW9uID0g R1tpXS5kZXNpZ25hdGlvbiA9IHg7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY3Nfc2l6 ZSh4KSkgeyAgICAgICAvKiA5NCwgOTYsIG9yIDEyOCAqLwotICAgICAgICAgICAgICAgICAgICBj YXNlIDEyODoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSA5NjoKLSAgICAgICAgICAgICAgICAg ICAgICAgIEdbaV0uc2l6ZSA9IEdbaV0uZGVmX3NpemUgPSBjczk2OwotICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgOTQ6Ci0gICAgICAgICAg ICAgICAgICAgICAgICBHW2ldLnNpemUgPSBHW2ldLmRlZl9zaXplID0gY3M5NDsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg ICAgICAgICAgICAgICAgICAgICAgR1tpXS5zaXplID0gR1tpXS5kZWZfc2l6ZSA9IGNzbWI7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICBHW2ldLm5hdGlvbmFsID0gY3NfaXNfbnJjKHgpOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBHW2ldLmMxID0gR1tpXS5kZWZfYzEgPSB4ICE9IHRj c2wgJiYgY3NfaXNfc3RkKHgpOwotICAgICAgICAgICAgfQotI2lmZGVmIFVOSUNPREUKLSAgICAg ICAgfSBlbHNlIGlmICh6ID09IFRUX0dSX0tCRCkgeyAgICAvKiBLZXlib2FyZCBvbmx5ICovCi0g ICAgICAgICAgICBkZWNfa2JkID0geDsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU3BlY2lmaWMgR24gKi8KLSAgICAgICAg ICAgIEdbel0uZGVmX2Rlc2lnbmF0aW9uID0gR1t6XS5kZXNpZ25hdGlvbiA9IHg7Ci0gICAgICAg ICAgICBHW3pdLmluaXQgPSBUUlVFOwotICAgICAgICAgICAgc3dpdGNoIChjc19zaXplKHgpKSB7 ICAgICAgIC8qIDk0LCA5Niwgb3IgMTI4ICovCi0gICAgICAgICAgICBjYXNlIDEyODoKLSAgICAg ICAgICAgIGNhc2UgOTY6Ci0gICAgICAgICAgICAgICAgR1t6XS5zaXplID0gR1t6XS5kZWZfc2l6 ZSA9IGNzOTY7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDk0Ogot ICAgICAgICAgICAgICAgIEdbel0uc2l6ZSA9IEdbel0uZGVmX3NpemUgPSBjczk0OwotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBH W3pdLnNpemUgPSBHW3pdLmRlZl9zaXplID0gY3NtYjsKLSAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEdbel0uYzEgPSBHW3pdLmRlZl9jMSA9IHggIT0g dGNzbCAmJiBjc19pc19zdGQoeCk7Ci0gICAgICAgICAgICBHW3pdLm5hdGlvbmFsID0gY3NfaXNf bnJjKHgpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UgLyogbm90IE9TMiAqLwotICAgIHRjc3Ig PSB4OyAgICAgICAgICAgICAgICAgICAvKiBSZW1vdGUgY2hhcmFjdGVyIHNldCAqLwotI2VuZGlm IC8qIE9TMiAqLwotfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotVk9JRAotc2V0Y21hc2soeCkg aW50IHg7IHsKLSAgICBpZiAoeCA9PSA3KSB7Ci0gICAgICAgIGNtYXNrID0gMDE3NzsKLSAgICB9 IGVsc2UgaWYgKHggPT0gOCkgewotICAgICAgICBjbWFzayA9IDAzNzc7Ci0gICAgICAgIHBhcml0 eSA9IDA7Ci0gICAgfQotI2lmZGVmIEtVSSAgICAgIAotICAgIEt1aVNldFByb3BlcnR5KEtVSV9U RVJNX0NNQVNLLHgsMCk7Ci0jZW5kaWYgLyogS1VJICovCi19Ci0KLSNpZmRlZiBDS19BVVRPREwK LVZPSUQKLXNldGF1dG9kbCh4LHkpIGludCB4LHk7IHsKLSAgICBhdXRvZGwgPSB4OwotICAgIGFk bF9hc2sgPSB5OwotI2lmZGVmIEtVSSAgICAgIAotICAgIEt1aVNldFByb3BlcnR5KEtVSV9URVJN X0FVVE9ET1dOTE9BRCx4Pyh5PzI6MSk6MCwwKTsKLSNlbmRpZiAvKiBLVUkgKi8KLX0KLSNlbmRp ZiAvKiBDS19BVVRPREwgKi8KLQotI2lmZGVmIE9TMgotVk9JRAotc2V0dXJsaGwoaW50IHgpIHsK LSAgICB0dF91cmxfaGlsaXRlID0geDsKLSNpZmRlZiBLVUkgICAgICAKLSAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfVEVSTV9VUkxfSElHSExJR0hULHgsMCk7Ci0jZW5kaWYgLyogS1VJICovCi19Ci0K LVZPSUQKLXNldGFwcmludChpbnQgeCkgewotICAgIGV4dGVybiBpbnQgYXByaW50OwotICAgIGFw cmludCA9IHg7Ci0jaWZkZWYgS1VJCi0gICAgS3VpU2V0UHJvcGVydHkoS1VJX1RFUk1fUFJJTlRF UkNPUFkseCwwKTsKLSNlbmRpZiAvKiBLVUkgKi8KLX0KLSNlbmRpZiAvKiBPUzIgKi8KLQotaW50 Ci1zZXR0cm0oKSB7Ci0gICAgaW50IGkgPSAwOwotI2lmZGVmIE9TMgotICAgIGV4dGVybiBpbnQg Y29sb3JyZXNldCwgdXNlcl9lcmFzZW1vZGU7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgaWYgKCh5 ID0gY21rZXkodHJtdGFiLG50cm0sIiIsICIiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0j aWZkZWYgTUFDCi0gICAgcHJpbnRmKCJcbj9Tb3JyeSwgbm90IGltcGxlbWVudGVkIHlldC4gIFBs ZWFzZSB1c2UgdGhlIFNldHRpbmdzIG1lbnUuXG4iKTsKLSAgICByZXR1cm4oLTkpOwotI2Vsc2UK LSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgIGlmICgoeSA9IGNtY2Zt KCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFuZCBkaXNh YmxlZC5cclxuIik7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgfQotI2VuZGlm IC8qIElLU0QgKi8KLQotICAgIHN3aXRjaCAoeSkgewotICAgICAgY2FzZSBYWVRCWVQ6ICAgICAg ICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBCWVRFU0laRSAqLwotICAgICAgICBpZiAo KHkgPSBjbW51bSgiYnl0ZXNpemUgZm9yIHRlcm1pbmFsIGNvbm5lY3Rpb24iLCI4IiwxMCwmeCwK LSAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJu KHkpOwotICAgICAgICBpZiAoeCAhPSA3ICYmIHggIT0gOCkgewotICAgICAgICAgICAgcHJpbnRm KCJcbj9UaGUgY2hvaWNlcyBhcmUgNyBhbmQgOFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHkpOwotICAgICAgICBzZXRjbWFzayh4KTsKLSNpZmRlZiBPUzIKLSAgICAgICAgaWYgKElT OTc4MDEodHRfdHlwZV9tb2RlKSkKLSAgICAgICAgICBTTklfYml0bW9kZSh4KTsKLSNlbmRpZiAv KiBPUzIgKi8KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgY2FzZSBYWVRT TzogICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBMT0NLSU5HLVNISUZUICov Ci0gICAgICAgIHJldHVybihzZXRvbigmc29zaSkpOwotCi0gICAgICBjYXNlIFhZVE5MOiAgICAg ICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk1JTkFMIE5FV0xJTkUtTU9ERSAqLwotICAgICAg ICByZXR1cm4oc2V0b24oJnRubG0pKTsKLQotI2lmZGVmIE9TMgotICAgICAgY2FzZSBYWVRDT0w6 Ci0gICAgICAgIGlmICgoeCA9IGNta2V5KHR0eWNvbHRhYixuY29sb3JzLCIiLCJ0ZXJtaW5hbCIs eHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBlbHNlIGlmICh4 ID09IFRUQ09MUkVTKSB7Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbWtleSh0dGNvbG1vZGV0YWIs bmNvbG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwiZGVmYXVsdC1jb2xvciIs eHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgIGlm ICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAg ICAgY29sb3JyZXNldCA9IHk7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAg ICAgICB9IGVsc2UgaWYgKHggPT0gVFRDT0xFUkEpIHsKLSAgICAgICAgICAgIGlmICgoeSA9IGNt a2V5KHR0Y29sbW9kZXRhYixuY29sbW9kZSwiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICJjdXJyZW50LWNvbG9yIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkp OwotICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICByZXR1 cm4oeik7Ci0gICAgICAgICAgICB1c2VyX2VyYXNlbW9kZSA9IHk7Ci0gICAgICAgICAgICByZXR1 cm4oc3VjY2Vzcz0xKTsKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAv KiBObyBwYXJzZSBlcnJvciAqLwotICAgICAgICAgICAgaW50IGZnID0gMCwgYmcgPSAwOwotICAg ICAgICAgICAgZmcgPSBjbWtleSh0dHljbHJ0YWIsIG5jbHJzLAotICAgICAgICAgICAgICAgICAg ICAgICAoeCA9PSBUVENPTEJPUiA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAiY29sb3IgZm9y IHNjcmVlbiBib3JkZXIiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICJmb3JlZ3JvdW5kIGNv bG9yIGFuZCB0aGVuIGJhY2tncm91bmQgY29sb3IiKSwKLSAgICAgICAgICAgICAgICAgICAgICAg ImxncmF5IiwgeHhzdHJpbmcpOwotICAgICAgICAgICAgaWYgKGZnIDwgMCkKLSAgICAgICAgICAg ICAgcmV0dXJuKGZnKTsKLSAgICAgICAgICAgIGlmICh4ICE9IFRUQ09MQk9SKSB7Ci0gICAgICAg ICAgICAgICAgaWYgKChiZyA9IGNta2V5KHR0eWNscnRhYixuY2xycywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImJhY2tncm91bmQgY29sb3IiLCJibHVlIix4eHN0cmluZykpIDwg MCkKLSAgICAgICAgICAgICAgICAgIHJldHVybihiZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAg ICAgICAgICAgIHN3aXRjaCAoeCkgewotICAgICAgICAgICAgICBjYXNlIFRUQ09MTk9SOgotICAg ICAgICAgICAgICAgIGNvbG9ybm9ybWFsID0gZmcgfCBiZyA8PCA0OwotICAgICAgICAgICAgICAg IGZnaSA9IGZnICYgMHgwODsKLSAgICAgICAgICAgICAgICBiZ2kgPSBiZyAmIDB4MDg7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVFRDT0xSRVY6Ci0gICAgICAg ICAgICAgICAgY29sb3JyZXZlcnNlID0gZmcgfCBiZyA8PCA0OwotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICBjYXNlIFRUQ09MSVRBOgotICAgICAgICAgICAgICAgIGNvbG9y aXRhbGljID0gZmcgfCBiZyA8PCA0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICBjYXNlIFRUQ09MVU5EOgotICAgICAgICAgICAgICAgIGNvbG9ydW5kZXJsaW5lID0gZmcg fCBiZyA8PCA0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFRU Q09MR1JQOgotICAgICAgICAgICAgICAgIGNvbG9yZ3JhcGhpYyA9IGZnIHwgYmcgPDwgNDsKLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUVENPTERFQjoKLSAgICAg ICAgICAgICAgICBjb2xvcmRlYnVnID0gZmcgfCBiZyA8PCA0OwotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICBjYXNlIFRUQ09MU1RBOgotICAgICAgICAgICAgICAgIGNvbG9y c3RhdHVzID0gZmcgfCBiZyA8PCA0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICBjYXNlIFRUQ09MSExQOgotICAgICAgICAgICAgICAgIGNvbG9yaGVscCA9IGZnIHwgYmcg PDwgNDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUVENPTEJP UjoKLSAgICAgICAgICAgICAgICBjb2xvcmJvcmRlciA9IGZnOwotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICBjYXNlIFRUQ09MU0VMOgotICAgICAgICAgICAgICAgIGNvbG9y c2VsZWN0ID0gZmcgfCBiZyA8PCA0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHByaW50ZigiJXMgLSBpbnZhbGlkXG4iLGNt ZGJ1Zik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNjcm5pbml0aWFsaXplZFtWVEVSTV0gPSAw OwotICAgICAgICAgICAgVnNjcm5Jbml0KFZURVJNKTsKLSAgICAgICAgfQotICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFhZVENVUjogeyAgICAgICAgICAgICAgICAg ICAgLyogU0VUIFRFUk1JTkFMIENVUlNPUiAqLwotICAgICAgICAgIGV4dGVybiBpbnQgY3Vyc29y ZW5hW107Ci0gICAgICAgICAgZXh0ZXJuIGludCBjdXJzb3JvbltdIDsgICAgICAgLyogQ3Vyc29y IHN0YXRlIG9uL29mZiAgICAgICAqLwotICAgICAgICAgIGlmICgoeCA9IGNta2V5KHR0eWN1cnRh YixuY3Vyc29ycywiIiwidW5kZXJsaW5lIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJl dHVybih4KTsKLSAgICAgICAgICBpZiAoKHogPSBjbWtleShjdXJvbnRhYixuY3Vyb24sIiIsIm9u Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICB0dF9jdXJzb3IgPSB0dF9j dXJzb3JfdXNyID0geDsKLSAgICAgICAgICBpZiAoIHogPT0gMiApIHsKLSAgICAgICAgICAgICAg Y3Vyc29yZW5hW1ZURVJNXSA9IHR0X2N1cnNvcmVuYV91c3IgPSAxOwotICAgICAgICAgICAgICB0 dF9jdXJzb3JfYmxpbmsgPSAwOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGN1 cnNvcmVuYVtWVEVSTV0gPSB0dF9jdXJzb3JlbmFfdXNyID0gejsvKiB0dXJuIGN1cnNvciBvbi9v ZmYgKi8KLSAgICAgICAgICAgICAgdHRfY3Vyc29yX2JsaW5rID0gMTsKLSAgICAgICAgICB9Ci0g ICAgICAgICAgY3Vyc29yb25bVlRFUk1dID0gRkFMU0U7IC8qIEZvcmNlIG5ld2N1cnNvciB0byBy ZXN0b3JlIHRoZSBjdXJzb3IgKi8KLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAg ICAgfQotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgICBjYXNlIFhZVFRZUDogICAgICAgICAgICAg ICAgICAgICAgLyogU0VUIFRFUk1JTkFMIFRZUEUgKi8KLSAgICAgICAgcmV0dXJuKHNldHRybXR5 cCgpKTsKLQotI2lmZGVmIE9TMgotICAgICAgY2FzZSBYWVRBUlI6ICAgICAgICAgICAgICAgICAg ICAgIC8qIFNFVCBURVJNSU5BTCBBUlJPVy1LRVlTICovCi0gICAgICAgIGlmICgoeCA9IGNta2V5 KGFrbXRhYiwyLCIiLCIiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgo eSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICB0dF9hcnJvdyA9IHg7ICAgICAg ICAgICAgICAgICAgIC8qIFRUS19OT1JNIC8gVFRLX0FQUEw7IHNlZSBja3V1c3IuaCAqLwotICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFhZVEtQRDogICAgICAgICAg ICAgICAgICAgICAgLyogU0VUIFRFUk1JTkFMIEtFWVBBRC1NT0RFICovCi0gICAgICAgIGlmICgo eCA9IGNta2V5KGtwbXRhYiwyLCIiLCIiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAg ICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICB0dF9rZXlwYWQg PSB4OyAgICAgICAgICAgICAgICAgIC8qIFRUS19OT1JNIC8gVFRLX0FQUEw7IHNlZSBja3V1c3Iu aCAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFhZVFVOWDog eyAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk0gVU5JWC1NT0RFIChERykgKi8KLSAgICAg ICAgZXh0ZXJuIGludCBkZ3VuaXgsZGd1bml4X3VzcjsKLSAgICAgICAgeCA9IHNldG9uKCZkZ3Vu aXgpOwotICAgICAgICBkZ3VuaXhfdXNyID0gZGd1bml4OwotICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICB9Ci0gICAgICBjYXNlIFhZVEtCTU9EOiB7ICAgICAgICAgICAgICAgICAgLyogU0VUIFRF Uk0gS0VZQk9BUkQgTU9ERSAqLwotICAgICAgICAgIGV4dGVybiBpbnQgdHRfa2JfbW9kZTsKLSAg ICAgICAgICBpZiAoKHggPSBjbWtleShrYm1vZHRhYiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICBua2Jtb2R0YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm5vcm1hbCIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgInNwZWNpYWwga2V5Ym9hcmQgbW9kZSBmb3IgdGVybWluYWwgZW11 bGF0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykKLSAgICAgICAgICAg ICAgICkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAgIHR0X2tiX21vZGUgPSB4OwotICAgICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgWFlUV1JQOiAg ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgV1JBUCAqLwotICAgICAgICByZXR1 cm4oc2V0b24oJnR0X3dyYXApKTsKLQotICAgICAgY2FzZSBYWVNDUlM6Ci0gICAgICAgIGlmICgo eSA9IGNtbnVtKCJDT05ORUNUIHNjcm9sbGJhY2sgYnVmZmVyIHNpemUsIGxpbmVzIiwiMjAwMCIs MTAsJngsCi0gICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAg IHJldHVybih5KTsKLSAgICAgICAgLyogVGhlIG1heCBudW1iZXIgb2YgbGluZXMgaXMgdGhlIFJB TSAgKi8KLSAgICAgICAgLyogd2UgY2FuIGFjdHVhbGx5IGRlZGljYXRlIHRvIGEgICAgICAgKi8K LSAgICAgICAgLyogc2Nyb2xsYmFjayBidWZmZXIgZ2l2ZW4gdGhlIG1heGltdW0gKi8KLSAgICAg ICAgLyogcHJvY2VzcyBtZW1vcnkgc3BhY2Ugb2YgNTEyTUIgICAgICAgKi8KLSAgICAgICAgaWYg KHggPCAyNTYgfHwgeCA+IDIwMDAwMDBMKSB7Ci0gICAgICAgICAgICBwcmludGYoIlxuP1RoZSBz aXplIG11c3QgYmUgYmV0d2VlbiAyNTYgYW5kIDIsMDAwLDAwMC5cbiIpOwotICAgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHkgPSBjbWNmbSgp KSA8IDApIHJldHVybih5KTsKLSAgICAgICAgdHRfc2Nyc2l6ZVtWVEVSTV0gPSB4OwotICAgICAg ICBWc2NybkluaXQoVlRFUk0pOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotI2VuZGlm IC8qIE9TMiAqLwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgIGNhc2UgWFlUQ1M6IHsgICAgICAg ICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCAqLwotICAgICAgICBp bnQgZW9sOwotICAgICAgICAgIC8qIHNldCB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0IDxyZW1vdGU+ IDxsb2NhbD4gKi8KLSAgICAgICAgaWYgKCh4ID0gY21rZXkoCi0jaWZkZWYgQ0tPVU5JCi0gICAg ICAgICAgICAgICAgICAgICAgIHR4cnRhYixudHhydGFiLAotI2Vsc2UgIC8qIENLT1VOSSAqLwot ICAgICAgICAgICAgICAgICAgICAgICB0dGNzdGFiLG50ZXJtYywKLSNlbmRpZiAvKiBDS09VTkkg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgInJlbW90ZSB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0 IiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0KLSNpZmRlZiBVTklD T0RFCi0gICAgICAgIGlmICh4ID09IFRYX1RSQU5TUAotI2lmZGVmIENLT1VOSQotICAgICAgICAg ICAgfHwgeCA9PSBUWF9VVEY4Ci0jZW5kaWYgLyogQ0tPVU5JICovCi0gICAgICAgICAgICkgewot ICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApICAgIC8qIENvbmZpcm0gdGhlIGNv bW1hbmQgKi8KLSAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSNpZmRlZiBPUzIKLSAgICAg ICAgICAgIGlmICggaXN1bmljb2RlKCkgJiYgeCA9PSBUWF9UUkFOU1AgKSB7Ci0gICAgICAgICAg ICAgICAgLyogSWYgd2UgYXJlIGluIHVuaWNvZGUgZGlzcGxheSBtb2RlIHRoZW4gdHJhbnNwYXJl bnQKLSAgICAgICAgICAgICAgICAgKiBvbmx5IGFmZmVjdHMgdGhlIG91dHB1dCBkaXJlY3Rpb24u ICBXZSBuZWVkIHRvIGtub3cKLSAgICAgICAgICAgICAgICAgKiB0aGUgYWN0dWFsIHJlbW90ZSBj aGFyYWN0ZXIgc2V0IGluIG9yZGVyIHRvIHBlcmZvcm0KLSAgICAgICAgICAgICAgICAgKiB0aGUg dGNzciAtPiB1Y3MyIHRyYW5zbGF0aW9uIGZvciBkaXNwbGF5LgotICAgICAgICAgICAgICAgICAq LwotICAgICAgICAgICAgICAgIHggPSB5ID0gdGNzbDsKLSAgICAgICAgICAgIH0gZWxzZQotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIHkgPSB4OwotICAgICAgICB9Ci0jZWxzZSAv KiBVTklDT0RFICovCi0gICAgICAgIGlmICh4ID09IEZDX1RSQU5TUCkgewotICAgICAgICAgICAg aWYgKCh5ID0gY21jZm0oKSkgPCAwKSAgICAgIC8qIENvbmZpcm0gdGhlIGNvbW1hbmQgKi8KLSAg ICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICB5ID0geDsKLSAgICAgICAgfQot I2VuZGlmIC8qIFVOSUNPREUgKi8KLQotICAgICAgICAvKiBOb3QgdHJhbnNwYXJlbnQgb3IgVVRG OCwgc28gZ2V0IGxvY2FsIHNldCB0byB0cmFuc2xhdGUgaXQgaW50byAqLwotICAgICAgICBzID0g IiI7Ci0jaWZkZWYgT1MyCi0gICAgICAgIHkgPSBvczJnZXRjcCgpOyAgICAgICAgICAgICAgICAg LyogRGVmYXVsdCBpcyBjdXJyZW50IGNvZGUgcGFnZSAqLwotICAgICAgICBzd2l0Y2ggKHkpIHsK LSAgICAgICAgICBjYXNlIDQzNzogcyA9ICJjcDQzNyI7IGJyZWFrOwotICAgICAgICAgIGNhc2Ug ODUwOiBzID0gImNwODUwIjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA4NTI6IHMgPSAiY3A4NTIi OyBicmVhazsKLSAgICAgICAgICBjYXNlIDg1NzogcyA9ICJjcDg1NyI7IGJyZWFrOwotICAgICAg ICAgIGNhc2UgODU4OiBzID0gImNwODU4IjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA4NjI6IHMg PSAiY3A4NjIiOyBicmVhazsKLSAgICAgICAgICBjYXNlIDg2NjogcyA9ICJjcDg2NiI7IGJyZWFr OwotICAgICAgICAgIGNhc2UgODY5OiBzID0gImNwODY5IjsgYnJlYWs7Ci0gICAgICAgICAgY2Fz ZSAxMjUwOiBzID0gImNwMTI1MCI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgMTI1MTogcyA9ICJj cDEyNTEiOyBicmVhazsKLSAgICAgICAgICBjYXNlIDEyNTI6IHMgPSAiY3AxMjUyIjsgYnJlYWs7 Ci0gICAgICAgICAgY2FzZSAxMjUzOiBzID0gImNwMTI1MyI7IGJyZWFrOwotICAgICAgICAgIGNh c2UgMTI1NDogcyA9ICJjcDEyNTQiOyBicmVhazsKLSAgICAgICAgICBjYXNlIDEyNTU6IHMgPSAi Y3AxMjU1IjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMjU2OiBzID0gImNwMTI1NiI7IGJyZWFr OwotICAgICAgICAgIGNhc2UgMTI1NzogcyA9ICJjcDEyNTciOyBicmVhazsKLSAgICAgICAgICBj YXNlIDEyNTg6IHMgPSAiY3AxMjU4IjsgYnJlYWs7Ci0gICAgICAgIH0KLSNpZmRlZiBQQ0ZPTlRT Ci0vKgotICAgSWYgdGhlIHVzZXIgaGFzIGxvYWRlZCBhIGZvbnQgd2l0aCBTRVQgVEVSTUlOQUwg Rk9OVCB0aGVuIHdlIHdhbnQKLSAgIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBjb2RlIHBhZ2UgdG8g dGhlIGZvbnQgdGhhdCB3YXMgbG9hZGVkLgotKi8KLSAgICAgICAgaWYgKHR0X2ZvbnQgIT0gVFRG X1JPTSkgewotICAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IG50ZXJtZm9udDsgeSsrICkgewot ICAgICAgICAgICAgICAgIGlmICh0ZXJtX2ZvbnRbeV0ua3d2YWwgPT0gdHRfZm9udCkgewotICAg ICAgICAgICAgICAgICAgICBzID0gdGVybV9mb250W3ldLmt3ZDsKLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0j ZW5kaWYgLyogUENGT05UUyAqLwotI2Vsc2UgIC8qIE5vdCBLOTUuLi4gKi8KLSAgICAgICAgcyA9 IGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQ7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICAgICAg aWYgKCh5ID0gY21rZXkoCi0jaWZkZWYgQ0tPVU5JCi0gICAgICAgICAgICAgICAgICAgICAgIHR4 cnRhYixudHhydGFiLAotI2Vsc2UgLyogQ0tPVU5JICovCi0gICAgICAgICAgICAgICAgICAgICAg IHR0Y3N0YWIsbnRlcm1jLAotI2VuZGlmIC8qIENLT1VOSSAqLwotICAgICAgICAgICAgICAgICAg ICAgICAibG9jYWwgY2hhcmFjdGVyLXNldCIscyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICBy ZXR1cm4oeSk7Ci0KLSNpZmRlZiBVTklDT0RFCi0gICAgICAgIGlmICh5ID09IFRYX1VURjgpIHsK LSAgICAgICAgICAgIHByaW50ZigiP1VURjggbWF5IG5vdCBiZSB1c2VkIGFzIGEgbG9jYWwgY2hh cmFjdGVyIHNldC5cclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0j ZW5kaWYgLyogVU5JQ09ERSAqLwotI2lmZGVmIE9TMgotICAgICAgICBpZiAoKHogPSBjbWtleShn cmFwaHNldHRhYixuZ3JhcGhzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICJERUMgVlQgaW50 ZXJtZWRpYXRlIGdyYXBoaWMgc2V0IiwiYWxsIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAg IHJldHVybih6KTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgaWYgKChlb2wgPSBjbWNmbSgp KSA8IDApCi0gICAgICAgICAgICByZXR1cm4oZW9sKTsgLyogQ29uZmlybSB0aGUgY29tbWFuZCAq LwotCi0gICAgICAgIC8qIEVuZCBvZiBjb21tYW5kIHBhcnNpbmcgLSBhY3Rpb25zIGJlZ2luICov Ci0gICAgICAgIHNldGxjbGNoYXJzZXQoeSk7Ci0gICAgICAgIHNldHJlbWNoYXJzZXQoeCx6KTsK LSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRT ICovCi0KLSNpZm5kZWYgTk9DU0VUUwotICAgICAgY2FzZSBYWVRMQ1M6ICAgICAgICAgICAgICAg ICAgICAgIC8qIFNFVCBURVJNSU5BTCBMT0NBTC1DSEFSQUNURVItU0VUICovCi0gICAgICAgIC8q IHNldCB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0IDxsb2NhbD4gKi8KLSAgICAgICAgcyA9IGdldGRj c2V0KCk7ICAgICAgICAgICAgICAgICAvKiBHZXQgZGlzcGxheSBjaGFyYWN0ZXItc2V0IG5hbWUg Ki8KLSAgICAgICAgaWYgKCh5ID0gY21rZXkoCi0jaWZkZWYgQ0tPVU5JCi0gICAgICAgICAgICAg ICAgICAgICAgIHR4cnRhYixudHhydGFiLAotI2Vsc2UgLyogQ0tPVU5JICovCi0gICAgICAgICAg ICAgICAgICAgICAgIGZjc3RhYixuZmlsYywKLSNlbmRpZiAvKiBDS09VTkkgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgImxvY2FsIGNoYXJhY3Rlci1zZXQiLHMseHhzdHJpbmcpKSA8IDApCi0g ICAgICAgICAgcmV0dXJuKHkpOwotCi0jaWZkZWYgVU5JQ09ERQotICAgICAgICAgIGlmICh5ID09 IFRYX1VURjgpIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCI/VVRGOCBtYXkgbm90IGJlIHVzZWQg YXMgYSBsb2NhbCBjaGFyYWN0ZXIgc2V0LlxyXG4iKTsKLSAgICAgICAgICAgICAgcmV0dXJuKC05 KTsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotICAgICAgICAgIGlmICgoeiA9 IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOyAvKiBDb25maXJtIHRoZSBjb21tYW5kICovCi0KLSAg ICAgICAgICAvKiBFbmQgb2YgY29tbWFuZCBwYXJzaW5nIC0gYWN0aW9uIGJlZ2lucyAqLwotCi0g ICAgICAgIHNldGxjbGNoYXJzZXQoeSk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0j ZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZuZGVmIE5PQ1NFVFMKLSNpZmRlZiBVTklDT0RFCi0g ICAgICBjYXNlIFhZVFVOSTogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk1JTkFMIFVO SUNPREUgKi8KLSAgICAgICAgcmV0dXJuKHNldG9uKCZ0dF91bmljb2RlKSk7Ci0jZW5kaWYgLyog VU5JQ09ERSAqLwotCi0gICAgICBjYXNlIFhZVFJDUzogICAgICAgICAgICAgICAgICAgICAgLyog U0VUIFRFUk1JTkFMIFJFTU9URS1DSEFSQUNURVItU0VUICovCi0gICAgICAgIC8qIHNldCB0ZXJt aW5hbCBjaGFyYWN0ZXItc2V0IDxyZW1vdGU+IDxHcmFwaGljLXNldD4gKi8KLSAgICAgICAgaWYg KCh4ID0gY21rZXkoCi0jaWZkZWYgQ0tPVU5JCi0gICAgICAgICAgICAgICAgdHhydGFiLCBudHhy dGFiLAotI2Vsc2UgLyogQ0tPVU5JICovCi0gICAgICAgICAgICAgICAgdHRjc3RhYixudGVybWMs Ci0jZW5kaWYgLyogQ0tPVU5JICovCi0gICAgICAgICAgICAgICAgICAgICAgICJyZW1vdGUgdGVy bWluYWwgY2hhcmFjdGVyLXNldCIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJu KHgpOwotCi0jaWZkZWYgVU5JQ09ERQotICAgICAgICBpZiAoeCA9PSBUWF9UUkFOU1AKLSNpZmRl ZiBDS09VTkkKLSAgICAgICAgICAgIHx8IHggPT0gVFhfVVRGOAotI2VuZGlmIC8qIENLT1VOSSAq LwotICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSAg ICAvKiBDb25maXJtIHRoZSBjb21tYW5kICovCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeSk7 Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICBpZiAoIGlzdW5pY29kZSgpICYmIHggPT0gVFhfVFJB TlNQICkgewotICAgICAgICAgICAgICAgIC8qIElmIHdlIGFyZSBpbiB1bmljb2RlIGRpc3BsYXkg bW9kZSB0aGVuIHRyYW5zcGFyZW50Ci0gICAgICAgICAgICAgICAgICogb25seSBhZmZlY3RzIHRo ZSBvdXRwdXQgZGlyZWN0aW9uLiAgV2UgbmVlZCB0byBrbm93Ci0gICAgICAgICAgICAgICAgICog dGhlIGFjdHVhbCByZW1vdGUgY2hhcmFjdGVyIHNldCBpbiBvcmRlciB0byBwZXJmb3JtCi0gICAg ICAgICAgICAgICAgICogdGhlIHRjc3IgLT4gdWNzMiB0cmFuc2xhdGlvbiBmb3IgZGlzcGxheS4K LSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICB4ID0gdGNzbDsKLSAgICAgICAg ICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgfQotI2Vsc2UgLyogVU5JQ09ERSAqLwot ICAgICAgICBpZiAoeCA9PSBGQ19UUkFOU1ApIHsKLSAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgp KSA8IDApICAgICAgICAvKiBDb25maXJtIHRoZSBjb21tYW5kICovCi0gICAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgICAgIGVsc2Ugewot I2lmZGVmIE9TMgotICAgICAgICAgIGlmICgoeiA9IGNta2V5KGdyYXBoc2V0dGFiLG5ncmFwaHNl dCwKLSAgICAgICAgICAgICAgICAgICAgICAiREVDIFZUIGludGVybWVkaWF0ZSBncmFwaGljIHNl dCIsImFsbCIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeik7Ci0jZW5kaWYg LyogT1MyICovCi0gICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSAgICAgICAgLyogQ29u ZmlybSB0aGUgY29tbWFuZCAqLwotICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICB9Ci0g ICAgICAgIC8qIENvbW1hbmQgcGFyc2luZyBlbmRzIGhlcmUgKi8KLQotICAgICAgICBzZXRyZW1j aGFyc2V0KHgseik7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0jZW5kaWYgLyogTk9D U0VUUyAqLwotCi0gICAgICBjYXNlIFhZVEVDOiAgICAgICAgICAgICAgICAgICAgICAgLyogU0VU IFRFUk1JTkFMIEVDSE8gKi8KLSAgICAgICAgaWYgKCh4ID0gY21rZXkocmx0YWIsbnJsdCwid2hp Y2ggc2lkZSBlY2hvcyBkdXJpbmcgQ09OTkVDVCIsCi0gICAgICAgICAgICAgICAgICAgICAgICJy ZW1vdGUiLCB4eHN0cmluZykpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApIHJldHVybih5KTsKLSNpZmRlZiBORVRDT05OCi0gICAgICAgIG9sZHBsZXggPSB4 OwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSAgICAgICAgZHVwbGV4ID0geDsKLSAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgY2FzZSBYWVRFU0M6ICAgICAgICAgICAgICAgICAg ICAgIC8qIFNFVCBURVJNIEVTQyAqLwotICAgICAgICBpZiAoKHggPSBjbWtleShuYWJsdGFiLG5u YWJsdGFiLCIiLCJlbmFibGVkIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICB0dF9l c2NhcGUgPSB4OwotICAgICAgICByZXR1cm4oMSk7Ci0KLSAgICAgIGNhc2UgWFlUQ1JEOiAgICAg ICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgQ1ItRElTUExBWSAqLwotICAgICAgICBp ZiAoKHggPSBjbWtleShjcmR0YWIsMiwiIiwgIm5vcm1hbCIsIHh4c3RyaW5nKSkgPCAwKSByZXR1 cm4oeCk7Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAg ICB0dF9jcmQgPSB4OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNl IFhZVExGRDogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk1JTkFMIExGLURJU1BMQVkg Ki8KLSAgICAgICAgaWYgKCh4ID0gY21rZXkoY3JkdGFiLDIsIiIsICJub3JtYWwiLCB4eHN0cmlu ZykpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVy bih5KTsKLSAgICAgICAgdHRfbGZkID0geDsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK LQotI2lmZGVmIE9TMgotICAgICAgY2FzZSBYWVRBTlM6IHsgICAgICAgICAgICAgICAgICAgIC8q IFNFVCBURVJNSU5BTCBBTlNXRVJCQUNLICovCi0vKgotICBOT1RFOiBXZSBsZXQgdGhlbSBlbmFi bGUgYW5kIGRpc2FibGUgdGhlIGFuc3dlcmJhY2sgc2VxdWVuY2UsIGJ1dCB3ZQotICBkbyBOT1Qg bGV0IHRoZW0gY2hhbmdlIGl0LCBhbmQgd2UgZGVmaW5pdGVseSBkbyBub3QgbGV0IHRoZSBob3N0 IHNldCBpdC4KLSAgVGhpcyBpcyBhIHNlY3VyaXR5IGZlYXR1cmUuCi0KLSAgQXMgb2YgMS4xLjgg d2UgYWxsb3cgdGhlIFNFVCBURVJNIEFOU1dFUkJBQ0sgTUVTU0FHRSA8c3RyaW5nPiB0byBiZQot ICB1c2VkIGp1c3QgYXMgTVMtRE9TIEtlcm1pdCBkb2VzLiAgQzAgYW5kIEMxIGNvbnRyb2xzIGFz IHdlbGwgYXMgREVMCi0gIGFyZSBub3QgYWxsb3dlZCB0byBiZSB1c2VkIGFzIGNoYXJhY3RlcnMu ICBUaGV5IGFyZSB0cmFuc2xhdGVkIHRvCi0gIHVuZGVyc2NvcmUuICBUaGlzIG1heSBub3QgYmUg c2V0IGJ5IEFQQy4KLSovCi0gICAgICAgICAgaWYgKCh4ID0gY21rZXkoYW5ia3RhYixuYW5zYmss IiIsICJvZmYiLCB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAg ICAgICBpZiAoeCA8IDIpIHsKLSAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQot ICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgdHRfYW5zd2VyID0geDsK LSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICB9IGVsc2UgaWYg KCB4ID09IDIgfHwgeCA9PSAzKSB7Ci0gICAgICAgICAgICAgIGludCBsZW4gPSAwOwotICAgICAg ICAgICAgICBleHRlcm4gaW50IHNhZmVhbnN3ZXJiazsKLSAgICAgICAgICAgICAgZXh0ZXJuIGNo YXIgdXNlcmFuc3dlcmJrW107Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJBbnN3ZXJi YWNrIGV4dGVuc2lvbiIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0 dXJuKHkpOwotICAgICAgICAgICAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCB8fAotICAg ICAgICAgICAgICAgICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVzICYg QVBDX1VOQ0gpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAg ICAgICAgICBsZW4gPSBzdHJsZW4ocyk7Ci0gICAgICAgICAgICAgIGlmICh4ID09IDIpIHsKLSAg ICAgICAgICAgICAgICAgIC8qIFNhZmUgQW5zd2VyYmFjaydzIGRvbid0IGhhdmUgQzAvQzEgY2hh cnMgKi8KLSAgICAgICAgICAgICAgICAgIGZvciAoeiA9IDA7IHogPCBsZW47IHorKykgewotICAg ICAgICAgICAgICAgICAgICAgIGlmICgoc1t6XSAmIDB4N0YpIDw9IFNQIHx8IChzW3pdICYgMHg3 RikgPT0gREVMKQotICAgICAgICAgICAgICAgICAgICAgICAgdXNlcmFuc3dlcmJrW3pdID0gJ18n OwotICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHVz ZXJhbnN3ZXJia1t6XSA9IHNbel07Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICB1c2VyYW5zd2VyYmtbel0gPSAnXDAnOwotICAgICAgICAgICAgICAgICAgc2FmZWFuc3dl cmJrID0gMSA7ICAgIC8qIFRSVUUgKi8KLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAgIGNrc3RybmNweSh1c2VyYW5zd2VyYmsscyw2MCk7IC8qIChzZWUgY2tvY29uLmMp ICovCi0gICAgICAgICAgICAgICAgICBzYWZlYW5zd2VyYmsgPSAwOyAgICAgLyogRkFMU0UgKi8K LSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB1cGRhbnN3ZXJiaygpOwotICAgICAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVm IENLX0FQQwotICAgICAgY2FzZSBYWVRBUEM6Ci0gICAgICAgIGlmICgoeSA9IGNta2V5KGFwY3Rh YixuYXBjdGFiLAotICAgICAgICAgICAgICAgICAgICAgICAiYXBwbGljYXRpb24gcHJvZ3JhbSBj b21tYW5kIGV4ZWN1dGlvbiIsIiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAw KQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9D QUwgfHwKLSAgICAgICAgICAgIChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSAmJiAhKGFwY3N0YXR1 cyAmIEFQQ19VTkNIKSkpCi0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAg YXBjc3RhdHVzID0geTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotI2lmZGVmIENL X0FVVE9ETAotICAgICAgY2FzZSBYWVRBVVRPREw6ICAgICAgICAgICAgICAgICAgIC8qIEFVVE9E T1dOTE9BRCAqLwotICAgICAgICBpZiAoKHkgPSBjbWtleShhZGx0YWIsbmFkbHRhYiwiQXV0by1k b3dubG9hZCBvcHRpb25zIiwiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8 IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAgICAg ICBjYXNlIFRBRF9PTjoKLSAgICAgICAgICBjYXNlIFRBRF9PRkY6Ci0gICAgICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAg IHNldGF1dG9kbCh5LDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBUQURf QVNLOgotICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICBy ZXR1cm4oeCk7Ci0gICAgICAgICAgICBzZXRhdXRvZGwoVEFEX09OLDEpOwotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgY2FzZSBUQURfRVJSOgotICAgICAgICAgICAgaWYgKCh5ID0gY21r ZXkoYWRsZXJydGFiLG5hZGxlcnJ0YWIsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAg ICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAg ICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIGFkbF9lcnIgPSB5OwotICAgICAgICAg ICAgYnJlYWs7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgY2FzZSBUQURfSzoKLSAgICAgICAgICAg IGlmICgoeSA9IGNta2V5KGFkbHh0YWIsbmFkbHh0YWIsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQot ICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAg ICAgICAgICAgY2FzZSBUQURfWF9DMDoKLSAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShh ZGxjMHRhYixuYWRsYzB0YWIsIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBy b2Nlc3NlZC1ieS1lbXVsYXRvciIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICBy ZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAg ICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICAgIGFkbF9rYzAgPSB5OwotICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFRBRF9YX0RFVEVDVDoKLSAg ICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShhZGxkdGFiLG5hZGxkdGFiLCIiLCJwYWNrZXQi LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAg ICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgICAgICAgICBhZGxfa21vZGUgPSB5OwotICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICBjYXNlIFRBRF9YX1NUUjoKLSAgICAgICAgICAgICAgICBpZiAoKHkg PSBjbXR4dCgiS2VybWl0IHN0YXJ0IHN0cmluZyIsIktFUk1JVCBSRUFEWSBUTyBTRU5ELi4uIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcyx4eHN0cmluZykpIDwgMCkKLSAgICAg ICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICBmcmVlKGFkbF9rc3RyKTsK LSAgICAgICAgICAgICAgICBhZGxfa3N0ciA9IHN0cmR1cChzKTsKLSAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2Fz ZSBUQURfWjoKLSAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KGFkbHh0YWIsbmFkbHh0YWIsIiIs IiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAg IHN3aXRjaCAoeSkgewotICAgICAgICAgICAgICBjYXNlIFRBRF9YX0MwOgotICAgICAgICAgICAg ICAgIGlmICgoeSA9IGNta2V5KGFkbGMwdGFiLG5hZGxjMHRhYiwiIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAicHJvY2Vzc2VkLWJ5LWVtdWxhdG9yIix4eHN0cmluZykpIDwgMCkK LSAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICBpZiAoKHggPSBj bWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAg ICAgYWRsX3pjMCA9IHk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh c2UgVEFEX1hfREVURUNUOgotICAgICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KGFkbGR0YWIs bmFkbGR0YWIsIiIsInBhY2tldCIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICBy ZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAg ICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICAgIGFkbF96bW9kZSA9IHk7Ci0g ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVEFEX1hfU1RSOgotICAg ICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCIiLCJyelxcezEzfSIsJnMseHhzdHJpbmcpKSA8 IDApCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgZnJlZShh ZGxfenN0cik7Ci0gICAgICAgICAgICAgICAgYWRsX3pzdHIgPSBzdHJkdXAocyk7Ci0gICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAgICAgfQotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0j ZW5kaWYgLyogQ0tfQVVUT0RMICovCi0jZW5kaWYgLyogQ0tfQVBDICovCi0KLSNpZmRlZiBPUzIK LSAgICAgIGNhc2UgWFlUQkVMOgotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldGJlbGwoKSk7 Ci0KLSAgICAgIGNhc2UgWFlUTUJFTDogICAgICAgICAgICAgICAgICAgICAvKiBNQVJHSU4tQkVM TCAqLwotICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8 IDApIHJldHVybih5KTsKLSAgICAgICAgaWYgKHkpIHsgICAgICAgICAgICAgICAgICAgICAgICAv KiBPTiAqLwotICAgICAgICAgICAgaWYgKCh6ID0gY21udW0oIkNvbHVtbiBhdCB3aGljaCB0byBz ZXQgbWFyZ2luIGJlbGwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIjcyIiwxMCwmeCx4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICB9Ci0gICAg ICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOwotICAgICAgICBtYXJnaW5iZWxs ID0geTsKLSAgICAgICAgbWFyZ2luYmVsbGNvbCA9IHg7Ci0gICAgICAgIHJldHVybihzdWNjZXNz ID0gMSk7Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBDS1RJRExFCi0gICAgICBjYXNlIFhZ VElETEU6ICAgICAgICAgICAgICAgICAgICAgLyogSURMRS1TRU5EICovCi0gICAgICBjYXNlIFhZ VElUTU86ICAgICAgICAgICAgICAgICAgICAgLyogSURMRS1USU1FT1VUICovCi0gICAgICAgIGlm ICgoeiA9IGNtbnVtKCJzZWNvbmRzIG9mIGlkbGUgdGltZSB0byB3YWl0LCBvciAwIHRvIGRpc2Fi bGUiLAotICAgICAgICAgICAgICAgICAgICAgICAiMCIsMTAsJngseHhzdHJpbmcpKSA8IDApCi0g ICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICBpZiAoeSA9PSBYWVRJRExFKSB7Ci0gICAgICAg ICAgICBpZiAoKHkgPSBjbXR4dCgic3RyaW5nIHRvIHNlbmQsIG1heSBjb250YWluIGt2ZXJicyBh bmQgdmFyaWFibGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXHYobmV3bGluZSki LCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAg ICB0dF9pZGxlc25kX3RtbyA9IHg7ICAgICAgICAgLyogKG9sZCkgKi8KLSAgICAgICAgICAgIHR0 X2lkbGVsaW1pdCA9IHg7ICAgICAgICAgICAvKiAobmV3KSAqLwotICAgICAgICAgICAgbWFrZXN0 cigmdHRfaWRsZXN0cixicnN0cmlwKHMpKTsgLyogKG5ldykgKi8KLSAgICAgICAgICAgIHR0X2lk bGVzbmRfc3RyID0gdHRfaWRsZXN0cjsgLyogKG9sZCkgKi8KLSAgICAgICAgICAgIHR0X2lkbGVh Y3QgPSBJRExFX09VVDsgICAgICAvKiAobmV3KSAqLwotICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0g ICAgICAgICAgICB0dF9pZGxlbGltaXQgPSB4OwotICAgICAgICB9Ci0jaWZkZWYgT1MyCi0gICAg ICAgIHB1dGVycm9yKFZURVJNKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKLQotICAgICAgY2FzZSBYWVRJQUNUOiB7ICAgICAgICAgICAgICAgICAgIC8q IFNFVCBURVJNIElETEUtQUNUSU9OICovCi0gICAgICAgICAgaWYgKCh5ID0gY21rZXkoaWRsYWN0 cyxuaWRsYWN0cywiIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih5KTsK LSAgICAgICAgICBpZiAoeSA9PSBJRExFX09VVCkgewotICAgICAgICAgICAgICBpZiAoKHggPSBj bXR4dCgic3RyaW5nIHRvIHNlbmQsIG1heSBjb250YWluIGt2ZXJicyBhbmQgdmFyaWFibGVzIgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgbWFrZXN0cigmdHRfaWRsZXN0 cixicnN0cmlwKHMpKTsgLyogKG5ldykgKi8KLSAgICAgICAgICAgICAgdHRfaWRsZXNuZF9zdHIg PSB0dF9pZGxlc3RyOyAvKiAob2xkKSAqLwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgICAgfQotICAgICAgICAgIHR0X2lkbGVhY3QgPSB5OwotICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMSk7Ci0gICAgICB9Ci0jZW5kaWYgLyogQ0tUSURMRSAqLwotCi0gICAgICBjYXNl IFhZVERFQjogICAgICAgICAgICAgICAgICAgICAgLyogVEVSTUlOQUwgREVCVUcgKi8KLSAgICAg ICAgeSA9IHNldG9uKCZ4KTsgICAgICAgICAgICAgICAgICAvKiBHbyBwYXJzZSBPTiBvciBPRkYg Ki8KLSAgICAgICAgaWYgKHkgPiAwKSAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHN1 Y2NlZWRlZD8gKi8KLSAgICAgICAgICBzZXRkZWJzZXMoeCk7Ci0gICAgICAgIHJldHVybih5KTsK LQotI2lmZGVmIE9TMgotICAgICAgY2FzZSBYWVRBU0NSTDogICAgICAgICAgICAgICAgICAgIC8q IFNFVCBURVJNSU5BTCBBVVRPU0NST0xMICovCi0gICAgICAgICAgeSA9IHNldG9uKCZhdXRvc2Ny b2xsKTsKLSAgICAgICAgICByZXR1cm4oeSk7Ci0KLSAgICAgIGNhc2UgWFlUQVBBR0U6ICAgICAg ICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgQVVUT1BBR0UgKi8KLSAgICAgICAgICB5ID0g c2V0b24oJnd5X2F1dG9wYWdlKTsKLSAgICAgICAgICByZXR1cm4oeSk7Ci0KLSAgICAgIGNhc2Ug WFlUUk9MOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgUk9MTCAqLwotICAg ICAgICBpZiAoKHkgPSBjbWtleShyb2xsdGFiLG5yb2xsLCJzY3JvbGxiYWNrIG1vZGUiLCJpbnNl cnQiLHh4c3RyaW5nKSk8MCkKLQkgIHJldHVybih5KTsKLQlpZiAoeSA9PSBUVFJfS0VZUykgewot CSAgICBpZiAoKHggPSBjbWtleShyb2xsa2V5dGFiLG5yb2xsa2V5LCIiLCJzZW5kIix4eHN0cmlu ZykpPDApCi0JICAgICAgcmV0dXJuKHgpOwotCSAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApIHJl dHVybih6KTsKLQkgICAgdHRfcmtleXNbVlRFUk1dID0geDsKLQl9IGVsc2UgewotCSAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLQkgICAgdHRfcm9sbFtWVEVSTV0gPSB5Owot CX0KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgY2FzZSBYWVRDVFM6ICAg ICAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBUUkFOU01JVC1USU1FT1VUICovCi0g ICAgICAgIHkgPSBjbW51bSgiTWF4aW11bSBzZWNvbmRzIHRvIGFsbG93IENUUyBvZmYgZHVyaW5n IENPTk5FQ1QiLAotICAgICAgICAgICAgICAgICAgIjUiLDEwLCZ4LHh4c3RyaW5nKTsKLSAgICAg ICAgcmV0dXJuKHNldG51bSgmdHRfY3RzdG1vLHgseSwxMDAwMCkpOwotCi0gICAgICBjYXNlIFhZ VENQRzogeyAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk1JTkFMIENPREUtUEFHRSAqLwot ICAgICAgICBpbnQgaTsKLSAgICAgICAgaW50IGNwID0gLTE7Ci0gICAgICAgIHkgPSBjbW51bSgi UEMgY29kZSBwYWdlIHRvIHVzZSBkdXJpbmcgdGVybWluYWwgZW11bGF0aW9uIiwKLSAgICAgICAg ICAgICAgICAgIGNraXRvYShvczJnZXRjcCgpKSwxMCwmeCx4eHN0cmluZyk7Ci0gICAgICAgIGlm ICgoeCA9IHNldG51bSgmY3AseCx5LDExMDAwKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlm IChvczJzZXRjcChjcCkgIT0gMSkgewotI2lmZGVmIE5UCi0gICAgICAgICAgICBpZiAoaXNXaW45 NSgpKQotICAgICAgICAgICAgICBwcmludGYoCi0gICAgICAgICAgICAgICAgICJTb3JyeSwgV2lu ZG93cyA5NSBkb2VzIG5vdCBzdXBwb3J0IGNvZGUgcGFnZSBzd2l0Y2hpbmdcbiIpOwotICAgICAg ICAgICAgZWxzZQotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICAgIHByaW50ZigKLSAgICAg ICAgICAgICAgICAgIlNvcnJ5LCAlZCBpcyBub3QgYSB2YWxpZCBjb2RlIHBhZ2UgZm9yIHRoaXMg c3lzdGVtLlxuIixjcCk7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAg LyogRm9yY2UgdGhlIHRlcm1pbmFsIGNoYXJhY3Rlci1zZXRzIGNvbnZlcnNpb25zIHRvIGJlIHVw ZGF0ZWQgKi8KLSAgICAgICAgZm9yICggaSA9IDA7IGkgPCA0OyBpKysgKQotICAgICAgICAgIEdb aV0uaW5pdCA9IFRSVUU7Ci0gICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0KLSAgICAgIGNhc2Ug WFlUUEFDOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgT1VUUFVULVBBQ0lO RyAqLwotICAgICAgICB5ID0gY21udW0oCi0gICAgICAgICAgICJQYXVzZSBiZXR3ZWVuIHNlbmRp bmcgZWFjaCBjaGFyYWN0ZXIgZHVyaW5nIENPTk5FQ1QsIG1pbGxpc2Vjb25kcyIsCi0gICAgICAg ICAgICAgICAgICAiLTEiLDEwLCZ4LHh4c3RyaW5nKTsKLSAgICAgICAgcmV0dXJuKHNldG51bSgm dHRfcGFjaW5nLHgseSwxMDAwMCkpOwotCi0jaWZkZWYgT1MyTU9VU0UKLSAgICAgIGNhc2UgWFlU TU9VOiB7ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgTU9VU0UgKi8KLSAgICAg ICAgICBpbnQgb2xkX21vdSA9IHR0X21vdXNlOwotICAgICAgICAgIGlmICgoeCA9IHNldG9uKCZ0 dF9tb3VzZSkpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICBpZiAodHRf bW91c2UgIT0gb2xkX21vdSkKLSAgICAgICAgICAgIGlmICh0dF9tb3VzZSkKLSAgICAgICAgICAg ICAgb3MyX21vdXNlb24oKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgb3MyX21v dXNlb2ZmKCk7Ci0gICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgfQotI2VuZGlmIC8qIE9TMk1P VVNFICovCi0jZW5kaWYgLyogT1MyICovCi0KLSAgICAgIGNhc2UgWFlUV0lEOiB7Ci0gICAgICAg ICAgaWYgKCh5ID0gY21udW0oCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgICAgICAg Im51bWJlciBvZiBjb2x1bW5zIGluIGRpc3BsYXkgd2luZG93IGR1cmluZyBDT05ORUNUIiwKLSNl bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm51bWJlciBvZiBjb2x1bW5zIG9uIHlvdXIg c2NyZWVuIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAiODAi LDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotI2lmZGVmIE9TMgotICAgICAgICAg IHJldHVybihzdWNjZXNzID0gb3MyX3NldHRlcm13aWR0aCh4KSk7Ci0jZWxzZSAgLyogTm90IE9T LzIgKi8KLSAgICAgICAgICB0dF9jb2xzID0geDsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgfQotCi0gICAgICBjYXNlIFhZVEhJRzoKLSAg ICAgICAgaWYgKCh5ID0gY21udW0oCi0jaWZkZWYgT1MyCi0gIm51bWJlciBvZiByb3dzIGluIGRp c3BsYXkgd2luZG93IGR1cmluZyBDT05ORUNULCBub3QgaW5jbHVkaW5nIHN0YXR1cyBsaW5lIiwK LSB0dF9zdGF0dXNbVlRFUk1dPyIyNCI6IjI1IiwKLSNlbHNlCi0gIjI0IiwibnVtYmVyIG9mIHJv d3Mgb24geW91ciBzY3JlZW4iLAotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAg ICAgICAxMCwmeCx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotCi0jaWZkZWYgT1MyCi0gICAgICAg IHJldHVybiAoc3VjY2VzcyA9IG9zMl9zZXR0ZXJtaGVpZ2h0KHgpKTsKLSNlbHNlICAvKiBOb3Qg T1MvMiAqLwotICAgICAgICB0dF9yb3dzID0geDsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE9TMgotICAgICAgY2FzZSBYWVRQUk46IHsg ICAgICAgICAgICAgICAgICAgIC8qIFByaW50IE1vZGUgKi8KLSAgICAgICAgICBleHRlcm4gYm9v bCB4cHJpbnQsIGFwcmludCwgY3ByaW50LCB1cHJpbnQ7Ci0gICAgICAgICAgaWYgKCh5ID0gY21r ZXkocHJubXRhYixucHJubXRhYiwiIiwib2ZmIiwgeHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsK LSAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgICBz d2l0Y2ggKHkpIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgaWYgKGNwcmlu dCB8fCB1cHJpbnQgfHwgYXByaW50IHx8IHhwcmludCkKLSAgICAgICAgICAgICAgICBwcmludGVy b2ZmKCk7Ci0gICAgICAgICAgICAgIGNwcmludCA9IHhwcmludCA9IHVwcmludCA9IDA7Ci0gICAg ICAgICAgICAgIHNldGFwcmludCgwKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICBjYXNlIDE6Ci0gICAgICAgICAgICAgIGlmICghKGNwcmludCB8fCB1cHJpbnQgfHwgYXByaW50 IHx8IHhwcmludCkpCi0gICAgICAgICAgICAgICAgcHJpbnRlcm9uKCk7Ci0gICAgICAgICAgICAg IHNldGFwcmludCgxKTsKLSAgICAgICAgICAgICAgY3ByaW50ID0geHByaW50ID0gdXByaW50ID0g MDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAg ICAgIGlmICghKGNwcmludCB8fCB1cHJpbnQgfHwgYXByaW50IHx8IHhwcmludCkpCi0gICAgICAg ICAgICAgICAgcHJpbnRlcm9uKCk7Ci0gICAgICAgICAgICAgIGNwcmludCA9IDE7Ci0gICAgICAg ICAgICAgIHNldGFwcmludCgwKTsKLQkgICAgICB4cHJpbnQgPSB1cHJpbnQgPSAwOwotICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgaWYgKCEo Y3ByaW50IHx8IHVwcmludCB8fCBhcHJpbnQgfHwgeHByaW50KSkKLSAgICAgICAgICAgICAgICBw cmludGVyb24oKTsKLSAgICAgICAgICAgICAgdXByaW50ID0gMTsKLSAgICAgICAgICAgICAgc2V0 YXByaW50KDApOwotICAgICAgICAgICAgICB4cHJpbnQgPSBjcHJpbnQgPSAwOwotICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgfQot I2Vsc2UKLSNpZmRlZiBYUFJJTlQKLSAgICAgIGNhc2UgWFlUUFJOOiB7Ci0gICAgICAgICAgZXh0 ZXJuIGludCB0dF9wcmludDsKLSAgICAgICAgICBpZiAoKHggPSBzZXRvbigmdHRfcHJpbnQpKSA8 IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLSAgICAgIH0KLSNlbmRpZiAvKiBYUFJJTlQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lm ZGVmIE9TMgotICAgICAgY2FzZSBYWVRTQ05NOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCBkZWNz Y25tLCBkZWNzY25tX3VzcjsKLSAgICAgICAgICBpZiAoKHkgPSBjbWtleShub3JtcmV2LDQsIiIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgZGVjc2NubV91c3I/InJldmVyc2UiOiJub3JtYWwi LAotICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKQotICAgICAgICAgICAgICAgKSA8 IDApCi0gICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeCk7Ci0gICAgICAgICAgZGVjc2NubV91c3IgPSB5OwotICAgICAgICAgIGlm IChkZWNzY25tICE9IGRlY3Njbm1fdXNyKQotICAgICAgICAgICAgZmxpcHNjcmVlbihWVEVSTSk7 Ci0gICAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLSAgICBjYXNlIFhZVE9QVEk6Ci0gICAgICAg IGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsdHRfZGlmZl91cGQ/Im9uIjoib2ZmIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICB0dF9kaWZmX3VwZCA9IHk7 Ci0gICAgICAgIHJldHVybigxKTsKLSAgICBjYXNlIFhZVFVQRDogewotICAgICAgICBpbnQgbW9k ZSwgZGVsYXk7Ci0gICAgICAgIGlmICgobW9kZSA9IGNta2V5KHNjcm51cGQsbnNjcm51cGQsIiIs ImZhc3QiLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICByZXR1cm4obW9kZSk7Ci0gICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB5ID0gY21udW0oCi0gICAgICAgICAgICAiUGF1c2Ug YmV0d2VlbiBGQVNUIHNjcmVlbiB1cGRhdGVzIGluIENPTk5FQ1QgbW9kZSwgbWlsbGlzZWNvbmRz IiwKLSAgICAgICAgICAgICAgICAgICAgICAiMTAwIiwxMCwmeCx4eHN0cmluZwotICAgICAgICAg ICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBpZiAoeCA8IDAgfHwgeCA+IDEwMDAgKSB7Ci0g ICAgICAgICAgICAgICAgcHJpbnRmKAotICAgICAgICAgICAgIlxuP1RoZSB1cGRhdGUgcmF0ZSBt dXN0IGJlIGJldHdlZW4gMCBhbmQgMTAwMCBtaWxsaXNlY29uZHMuXG4iCi0gICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwot Ci0gICAgICAgICAgICB1cGRtb2RlID0gdHRfdXBkbW9kZSA9IG1vZGU7Ci0gICAgICAgICAgICBy ZXR1cm4oc2V0bnVtKCZ0dF91cGRhdGUseCx5LDEwMDAwKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g ICAgY2FzZSBYWVRDVFJMOgotICAgICAgICAgIGlmICgoeCA9IGNta2V5KHRlcm1jdHJsLG50ZXJt Y3RybCwiIiwiNyIseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwot ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkK LSAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgc3dpdGNoICggeCAp IHsKLSAgICAgICAgICAgICAgY2FzZSA4OgotICAgICAgICAgICAgICAgICAgc2VuZF9jMSA9IHNl bmRfYzFfdXNyID0gVFJVRTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICBjYXNlIDc6Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICBzZW5k X2MxID0gc2VuZF9jMV91c3IgPSBGQUxTRTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gVFJV RSk7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBQQ0ZPTlRTCi0gICAgICBjYXNlIFhZVEZP TjoKLSAgICAgICAgaWYgKCAhSXNPUzJGdWxsU2NyZWVuKCkgKSB7Ci0gICAgICAgICAgICBwcmlu dGYoCi0gICAgICAgICJcbj9TRVQgVEVSTUlOQUwgRk9OVCBpcyBvbmx5IHN1cHBvcnRlZCBpbiBG dWxsIFNjcmVlbiBzZXNzaW9ucy5cbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBG QUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHggPSBjbWtleSh0ZXJtX2ZvbnQsbnRl cm1mb250LCIiLCJkZWZhdWx0Iix4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAoICFvczJMb2FkUENGb250cygpICkgewotICAg ICAgICAgICAgICAgIHR0X2ZvbnQgPSB4OwotICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gVFJVRSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigK LSAgICAgICJcbj9QQ0ZPTlRTLkRMTCBpcyBub3QgYXZhaWxhYmxlIGluIENLRVJNSVQgZXhlY3V0 YWJsZSBkaXJlY3RvcnkuXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IEZB TFNFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSNlbHNlIC8q IFBDRk9OVFMgKi8KLSNpZmRlZiBOVAotI2lmZGVmIEtVSQotICAgIGNhc2UgWFlURk9OOgotICAg ICAgICByZXR1cm4oc2V0Z3VpZm9udCgpKTsgICAgICAgICAgIC8qIGNrdXVzMy5jICovCi0jZW5k aWYgLyogS1VJICovCi0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBQQ0ZPTlRTICovCi0KLSAg ICAgIGNhc2UgWFlUVkNIOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCBwaGVpZ2h0LCBtYXJnaW5i b3QsIGNtZF9yb3dzLCBjbWRfY29sczsKLSAgICAgICAgICBpZiAoKHggPSBjbWtleSh0dmN0YWIs bnR2Y3RhYiwiIixpc1dpbjk1KCk/Indpbjk1LXNhZmUiOiJlbmFibGVkIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAg ICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSNpZm5kZWYgS1VJCi0g ICAgICAgICAgaWYgKHggIT0gdHRfbW9kZWNoZykgewotICAgICAgICAgICAgICBzd2l0Y2ggKHgp IHsKLSAgICAgICAgICAgICAgICBjYXNlIFRWQ19ESVM6Ci0gICAgICAgICAgICAgICAgICAvKiBX aGVuIGRpc2FibGVkIHRoZSBoZWlnaHRzIG9mIGFsbCBvZiB0aGUgdmlydHVhbCBzY3JlZW5zICov Ci0gICAgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGVxdWFsIHRvIHRoZSBwaHlzaWNhbCBoZWln aHQgb2YgdGhlIGNvbnNvbGUgICAgICovCi0gICAgICAgICAgICAgICAgICAvKiB3aW5kb3cgYW5k IG1heSBub3QgYmUgY2hhbmdlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAg ICAgICAgICAgICAvKiBUaGUgd2lkdGggb2YgdGhlIHdpbmRvdyBtYXkgbm90IGJlIGFsdGVyZWQu ICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICB0dF9tb2RlY2hnID0gVFZDX0VOQTsg ICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSAqLwotICAgICAgICAgICAgICAgICAgaWYgKG1h cmdpbmJvdCA+IHBoZWlnaHQtKHR0X3N0YXR1c1tWVEVSTV0/MTowKSkKLSAgICAgICAgICAgICAg ICAgICAgbWFyZ2luYm90ID0gcGhlaWdodC0odHRfc3RhdHVzW1ZURVJNXT8xOjApOwotICAgICAg ICAgICAgICAgICAgdHRfc3pjaG5nW1ZDTURdID0gMSA7Ci0gICAgICAgICAgICAgICAgICB0dF9y b3dzW1ZDTURdID0gcGhlaWdodDsKLSAgICAgICAgICAgICAgICAgIFZzY3JuSW5pdChWQ01EKTsK LSAgICAgICAgICAgICAgICAgIFNldENvbHMoVkNNRCk7Ci0gICAgICAgICAgICAgICAgICBjbWRf cm93cyA9IHk7Ci0KLSAgICAgICAgICAgICAgICAgIHR0X3N6Y2huZ1tWVEVSTV0gPSAyIDsKLSAg ICAgICAgICAgICAgICAgIHR0X3Jvd3NbVlRFUk1dID0gcGhlaWdodCAtICh0dF9zdGF0dXNbVlRF Uk1dPzE6MCk7Ci0gICAgICAgICAgICAgICAgICBWc2NybkluaXQoVlRFUk0pOwotCi0gICAgICAg ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgVFZDX0VOQToKLSAgICAg ICAgICAgICAgICAgIC8qIFdoZW4gZW5hYmxlZCB0aGUgcGh5c2ljYWwgaGVpZ2h0IG9mIHRoZSBj b25zb2xlIHdpbmRvd3MgKi8KLSAgICAgICAgICAgICAgICAgIC8qIHNob3VsZCBiZSBhZGp1c3Rl ZCB0byB0aGUgaGVpZ2h0IG9mIHRoZSB2aXJ0dWFsIHNjcmVlbiAgKi8KLSAgICAgICAgICAgICAg ICAgIC8qIFRoZSB3aWR0aCBtYXkgYmUgc2V0IHRvIGFueXRoaW5nLiAgICAgICAgICAgICAgICAg ICAgICAgKi8KLSAgICAgICAgICAgICAgICAgIC8qIG5vdGhpbmcgdG8gZG8gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgIGJyZWFr OwotCi0gICAgICAgICAgICAgIGNhc2UgVFZDX1c5NToKLSAgICAgICAgICAgICAgICAgIC8qIFdp bjk1LXNhZmUgbW9kZSBhbGxvd3MgdGhlIHBoeXNpY2FsIGhlaWdodCB0byBjaGFuZ2UgICAgKi8K LSAgICAgICAgICAgICAgICAgIC8qIGJ1dCByZXN0cmljdHMgaXQgdG8gYSB3aWR0aCBvZiA4MCBh bmQgYSBoZWlnaHQgZXF1YWwgdG8gKi8KLSAgICAgICAgICAgICAgICAgIC8qIDI1LCA0Mywgb3Ig NTAuICBNdXN0IGJlIGFkanVzdGVkIG5vdy4gICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg ICAgICAgICAgIC8qIFRoZSB2aXJ0dWFsIGhlaWdodHMgbXVzdCBiZSBlcXVhbCB0byB0aGUgYWJv dmUuICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgIGlmIChwaGVpZ2h0ICE9IDI1ICYmIHBo ZWlnaHQgIT0gNDMgJiYgcGhlaWdodCAhPSA1MCkgewotICAgICAgICAgICAgICAgICAgICAgIGlm IChwaGVpZ2h0IDwgMjUpCi0gICAgICAgICAgICAgICAgICAgICAgICB5ID0gMjU7Ci0gICAgICAg ICAgICAgICAgICAgICAgZWxzZSBpZiAocGhlaWdodCA8IDQzKQotICAgICAgICAgICAgICAgICAg ICAgICAgeSA9IDQzOwotICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg ICAgICAgICAgIHkgPSA1MDsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg ICAgICAgICB5ID0gcGhlaWdodDsKLQotICAgICAgICAgICAgICAgICAgdHRfbW9kZWNoZyA9IFRW Q19FTkE7IC8qIFRlbXBvcmFyeSAqLwotCi0gICAgICAgICAgICAgICAgICB0dF9zemNobmdbVkNN RF0gPSAxOwotICAgICAgICAgICAgICAgICAgdHRfcm93c1tWQ01EXSA9IHk7Ci0gICAgICAgICAg ICAgICAgICB0dF9jb2xzW1ZDTURdID0gODA7Ci0gICAgICAgICAgICAgICAgICBWc2NybkluaXQo VkNNRCk7Ci0gICAgICAgICAgICAgICAgICBTZXRDb2xzKFZDTUQpOwotICAgICAgICAgICAgICAg ICAgY21kX3Jvd3MgPSB5OwotICAgICAgICAgICAgICAgICAgY21kX2NvbHMgPSA4MDsKLQotICAg ICAgICAgICAgICAgICAgbWFyZ2luYm90ID0geS0odHRfc3RhdHVzW1ZURVJNXT8xOjApOwotICAg ICAgICAgICAgICAgICAgdHRfc3pjaG5nW1ZURVJNXSA9IDI7Ci0gICAgICAgICAgICAgICAgICB0 dF9yb3dzW1ZURVJNXSA9IHkgLSAodHRfc3RhdHVzW1ZURVJNXT8xOjApOwotICAgICAgICAgICAg ICAgICAgdHRfY29sc1tWVEVSTV0gPSA4MDsKLSAgICAgICAgICAgICAgICAgIFZzY3JuSW5pdChW VEVSTSk7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICB0dF9tb2RlY2hnID0geDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKLSNlbHNlCi0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRp ZiAvKiBLVUkgKi8KLSAgICAgIH0KLSAgICAgIGNhc2UgWFlUU1RBVDogewotICAgICAgICAgIGV4 dGVybiBpbnQgbWFyZ2luYm90OwotICAgICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIs Im9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAgIGlmICgoeCA9IGNtY2Zt KCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICAgIGlmICh5ICE9IHR0X3N0YXR1c1tWVEVSTV0g fHwgeSAhPSB0dF9zdGF0dXNfdXNyW1ZURVJNXSkgewotICAgICAgICAgICAgICAvKiBNaWdodCBu ZWVkIHRvIGZpeHVwIHRoZSBtYXJnaW5zICovCi0gICAgICAgICAgICAgIGlmICggbWFyZ2luYm90 ID09IFZzY3JuR2V0SGVpZ2h0KFZURVJNKS0odHRfc3RhdHVzW1ZURVJNXT8xOjApICkKLSAgICAg ICAgICAgICAgICBpZiAoeSkgewotICAgICAgICAgICAgICAgICAgICBtYXJnaW5ib3QtLTsKLSAg ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtYXJnaW5ib3QrKzsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHR0X3N0YXR1c191c3JbVlRFUk1dID0g dHRfc3RhdHVzW1ZURVJNXSA9IHk7Ci0gICAgICAgICAgICAgIGlmICh5KSB7Ci0gICAgICAgICAg ICAgICAgICAgIHR0X3N6Y2huZ1tWVEVSTV0gPSAyOwotICAgICAgICAgICAgICAgICAgICB0dF9y b3dzW1ZURVJNXS0tOwotICAgICAgICAgICAgICAgICAgICBWc2NybkluaXQoVlRFUk0pOyAgLyog SGVpZ2h0IHNldCBoZXJlICovCi0jaWZkZWYgVE5DT0RFCi0gICAgICAgICAgICAgICAgICAgIGlm IChURUxPUFRfTUUoVEVMT1BUX05BV1MpKQotICAgICAgICAgICAgICAgICAgICAgIHRuX3NuYXdz KCk7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0jaWZkZWYgUkxPR0NPREUKLSAgICAgICAgICAgICAg ICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfTkFXUykpCi0gICAgICAgICAgICAgICAgICAgICAg cmxvZ19uYXdzKCk7Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBTU0hCVUlMVElOCi0g ICAgICAgICAgICAgICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX05BV1MpKQotICAgICAgICAg ICAgICAgICAgICAgIHNzaF9zbmF3cygpOwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSAgICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIHR0X3N6Y2huZ1tWVEVSTV0gPSAx OwotICAgICAgICAgICAgICAgICAgdHRfcm93c1tWVEVSTV0rKzsKLSAgICAgICAgICAgICAgICAg IFZzY3JuSW5pdChWVEVSTSk7ICAgICAvKiBIZWlnaHQgc2V0IGhlcmUgKi8KLSNpZmRlZiBUTkNP REUKLSAgICAgICAgICAgICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX05BV1MpKQotICAgICAg ICAgICAgICAgICAgICB0bl9zbmF3cygpOwotI2VuZGlmIC8qIFROQ09ERSAqLwotI2lmZGVmIFJM T0dDT0RFCi0gICAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9OQVdTKSkKLSAg ICAgICAgICAgICAgICAgICAgcmxvZ19uYXdzKCk7Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNp ZmRlZiBTU0hCVUlMVElOCi0gICAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9O QVdTKSkKLSAgICAgICAgICAgICAgICAgICAgc3NoX3NuYXdzKCk7Ci0jZW5kaWYgLyogU1NIQlVJ TFRJTiAqLwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybigx KTsKLSAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE5UCi0gICAgICBjYXNlIFhZ VEFUVEJVRzoKLSAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5n KSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHgpOwotICAgICAgICB0dF9hdHRyX2J1ZyA9IHk7Ci0gICAgICAgIHJldHVybigxKTsKLSNlbmRp ZiAvKiBOVCAqLwotCi0jaWZkZWYgT1MyCi0gICAgICBjYXNlIFhZVFNHUkM6Ci0gICAgICAgIGlm ICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwot ICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgc2dyY29s b3JzID0geTsKLSAgICAgICAgcmV0dXJuKDEpOwotCi0gICAgICBjYXNlIFhZVFNFTkQ6Ci0gICAg ICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1 cm4oeSk7Ci0gICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAg ICAgICAgdHRfc2VuZGRhdGEgPSB5OwotICAgICAgICAgIHJldHVybigxKTsKLQotICAgICAgY2Fz ZSBYWVRTRU9COgotICAgICAgICAgIGlmICgoeSA9IGNta2V5KHR0eXNlb2J0YWIsMiwiIiwidXNf Y3IiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgICAgd3lfYmxvY2tlbmQgPSB5OwotICAgICAgICAg IHJldHVybigxKTsKLQotICAgICAgY2FzZSBYWVRVUkxISTogewotICAgICAgICAgIGludCBkb25l ID0gMCwgYXR0ciA9IFZUX0NIQVJfQVRUUl9OT1JNQUw7Ci0KLSAgICAgICAgICBpZiAoKHggPSBj bWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4o eCk7Ci0gICAgICAgICAgaWYgKHgpIHsKLSAgICAgICAgICAgICAgeiA9IDA7Ci0gICAgICAgICAg ICAgIHdoaWxlICghZG9uZSkgewotICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkodHR5 cHJvdGFiLG5wcm90ZWN0LCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgej8i ZG9uZSI6InJldmVyc2UiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgICAgICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAgICAgICAgICAgICAg ICAgY2FzZSBUVEFUVERPTkU6Ci0gICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IFRSVUU7Ci0g ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVFRB VFRCTEk6Ci0gICAgICAgICAgICAgICAgICAgICAgYXR0ciB8PSBWVF9DSEFSX0FUVFJfQkxJTks7 Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug VFRBVFRSRVY6Ci0gICAgICAgICAgICAgICAgICAgICAgYXR0ciB8PSBWVF9DSEFSX0FUVFJfUkVW RVJTRTsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg Y2FzZSBUVEFUVElUQToKLSAgICAgICAgICAgICAgICAgICAgICBhdHRyIHw9IFZUX0NIQVJfQVRU Ul9JVEFMSUM7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICAgIGNhc2UgVFRBVFRVTkQ6Ci0gICAgICAgICAgICAgICAgICAgICAgYXR0ciB8PSBWVF9DSEFS X0FUVFJfVU5ERVJMSU5FOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgICAgICBjYXNlIFRUQVRUQkxEOgotICAgICAgICAgICAgICAgICAgICAgIGF0dHIgfD0g VlRfQ0hBUl9BVFRSX0JPTEQ7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgICAgIGNhc2UgVFRBVFRESU06Ci0gICAgICAgICAgICAgICAgICAgICAgYXR0ciB8 PSBWVF9DSEFSX0FUVFJfRElNOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgICBjYXNlIFRUQVRUSU5WOgotICAgICAgICAgICAgICAgICAgICAgIGF0dHIg fD0gVlRfQ0hBUl9BVFRSX0lOVklTSUJMRTsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgICAgY2FzZSBUVEFUVE5PUjoKLSAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIHogPSAxOyAg ICAgICAgICAgICAgICAvKiBPbmUgYXR0cmlidXRlIGhhcyBiZWVuIGNob3NlbiAqLwotICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkg cmV0dXJuKHopOwotICAgICAgICAgIHNldHVybGhsKHgpOwotICAgICAgICAgIGlmICh4KQotICAg ICAgICAgICAgdHRfdXJsX2hpbGl0ZV9hdHRyID0gYXR0cjsKLSAgICAgICAgICByZXR1cm4oMSk7 Ci0gICAgICB9Ci0gICAgICBjYXNlIFhZVEFUVFI6Ci0gICAgICAgIGlmICgoeCA9IGNta2V5KHR0 eWF0dHJ0YWIsbmF0dHJpYiwiIiwidW5kZXJsaW5lIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAg ICByZXR1cm4oeCk7Ci0gICAgICAgIHN3aXRjaCAoeCkgewotICAgICAgICAgIGNhc2UgVFRBVFRC TEk6Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcp KSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHgpOwotICAgICAgICAgICAgdHJ1ZWJsaW5rID0geTsKLSNpZm5kZWYgS1VJCi0gICAgICAg ICAgICBpZiAoICF0cnVlYmxpbmsgJiYgdHJ1ZXVuZGVybGluZSApIHsKLSAgICAgICAgICAgICAg ICB0cnVldW5kZXJsaW5lID0gMDsKLSAgICAgICAgICAgICAgICBwcmludGYoIldhcm5pbmc6IFVu ZGVybGluZSBiZWluZyBzaW11bGF0ZWQgYnkgY29sb3IuXG4iKTsKLSAgICAgICAgICAgIH0KLQot I2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFRU QVRURElNOgotICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3Ry aW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp IHJldHVybih4KTsKLSAgICAgICAgICAgIHRydWVkaW0gPSB5OwotICAgICAgICAgICAgYnJlYWs7 Ci0KLSAgICAgICAgICBjYXNlIFRUQVRUUkVWOgotICAgICAgICAgICAgaWYgKCh5ID0gY21rZXko b25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgICAgIHRydWVyZXZlcnNl ID0geTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBUVEFUVFVORDoKLSAg ICAgICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkg cmV0dXJuKHkpOwotICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7 Ci0gICAgICAgICAgICB0cnVldW5kZXJsaW5lID0geTsKLSNpZm5kZWYgS1VJCi0gICAgICAgICAg ICBpZiAoIXRydWVibGluayAmJiB0cnVldW5kZXJsaW5lKSB7Ci0gICAgICAgICAgICAgICAgdHJ1 ZWJsaW5rID0gMTsKLSAgICAgICAgICAgICAgICBwcmludGYoIldhcm5pbmc6IFRydWUgYmxpbmsg bW9kZSBpcyBhY3RpdmUuXG4iKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBLVUkgKi8KLSAg ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBUVEFUVElUQToKLSAgICAgICAgICAg ICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4o eSk7Ci0gICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAg ICAgICAgICAgICB0cnVlaXRhbGljID0geTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg ICAgY2FzZSBUVEFUVFBSTzogeyAgICAgIC8qIFNldCBkZWZhdWx0IFByb3RlY3RlZCBDaGFyYWN0 ZXIgYXR0cmlidXRlICovCi0gICAgICAgICAgICAgIGV4dGVybiB2dGF0dHJpYiBXUGF0dHJpYjsg ICAgLyogY3VycmVudCBXUCBNb2RlIEF0dHJpYiAqLwotICAgICAgICAgICAgICBleHRlcm4gdnRh dHRyaWIgZGVmV1BhdHRyaWI7IC8qIGRlZmF1bHQgV1AgTW9kZSBBdHRyaWIgKi8KLSAgICAgICAg ICAgICAgdnRhdHRyaWIgd3BhID0gezAsMCwwLDAsMCwxLDAsMCwwLDAsMH07ICAgLyogUHJvdGVj dGVkICovCi0gICAgICAgICAgICAgIGludCBkb25lID0gMDsKLQotICAgICAgICAgICAgICB4ID0g MDsKLSAgICAgICAgICAgICAgd2hpbGUgKCFkb25lKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAo KHkgPSBjbWtleSh0dHlwcm90YWIsbnByb3RlY3QsIiIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB4PyJkb25lIjoiZGltIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgc3dpdGNoICh5KSB7Ci0gICAgICAg ICAgICAgICAgICAgIGNhc2UgVFRBVFROT1I6Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVFRBVFRCTEk6ICAgICAgLyogQmxpbmtpbmcgZG9l c24ndCB3b3JrICovCi0gICAgICAgICAgICAgICAgICAgICAgd3BhLmJsaW5raW5nID0gVFJVRTsK LSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBU VEFUVFJFVjoKLSAgICAgICAgICAgICAgICAgICAgICB3cGEucmV2ZXJzZWQgPSBUUlVFOwotICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFRUQVRU SVRBOgotICAgICAgICAgICAgICAgICAgICAgIHdwYS5pdGFsaWMgPSBUUlVFOwotICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFRUQVRUVU5EOgot ICAgICAgICAgICAgICAgICAgICAgIHdwYS51bmRlcmxpbmVkID0gVFJVRTsKLSAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUVEFUVEJMRDoKLSAg ICAgICAgICAgICAgICAgICAgICB3cGEuYm9sZCA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVFRBVFRESU06Ci0gICAgICAgICAg ICAgICAgICAgICAgd3BhLmRpbSA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVFRBVFRJTlY6Ci0gICAgICAgICAgICAgICAgICAg ICAgd3BhLmludmlzaWJsZSA9IFRSVUUgOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICBjYXNlIFRUQVRURE9ORToKLSAgICAgICAgICAgICAgICAgICAg ICBkb25lID0gVFJVRTsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIHggPSAxOyAgICAgICAgICAgICAgICAvKiBPbmUg YXR0cmlidXRlIGhhcyBiZWVuIGNob3NlbiAqLwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICAgICAgICBXUGF0 dHJpYiA9IGRlZldQYXR0cmliID0gd3BhOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKDEpOwotCi0gICAgICBjYXNlIFhZVEtFWTog eyAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk1JTkFMIEtFWSAqLwotICAgICAgICAgIGlu dCB0LCB4LCB5OwotICAgICAgICAgIGludCBjbGVhciA9IDAsIGRlZmx0ID0gMDsKLSAgICAgICAg ICBpbnQgY29uZmlybWVkID0gMDsKLSAgICAgICAgICBpbnQgZmxhZyA9IDA7Ci0gICAgICAgICAg aW50IGtjID0gLTE7ICAgICAgICAgICAgICAgICAgLyogS2V5IGNvZGUgKi8KLSAgICAgICAgICBp bnQgbGl0c3RyID0gMDsgICAgICAgICAgICAgICAvKiBMaXRlcmFsIFN0cmluZz8gKi8KLSAgICAg ICAgICBjaGFyICpzID0gTlVMTDsgICAgICAgICAgICAgICAvKiBLZXkgYmluZGluZyAqLwotI2lm bmRlZiBOT0tWRVJCUwotICAgICAgICAgIGNoYXIgKnAgPSBOVUxMOyAgICAgICAgICAgICAgIC8q IFdvcmtlciAqLwotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0gICAgICAgICAgY29uX2V2ZW50IGRl ZmV2dDsKLSAgICAgICAgICBleHRlcm4gaW50IG9zMmdrczsKLSAgICAgICAgICBleHRlcm4gaW50 IG1za2tleXM7Ci0gICAgICAgICAgZXh0ZXJuIGludCBpbml0dmlrOwotICAgICAgICAgIHN0cnVj dCBGREIga3csc3csbnUsY207Ci0KLSAgICAgICAgICBkZWZldnQudHlwZSA9IGVycm9yOwotCi0g ICAgICAgICAgaWYgKCh0ID0gY21rZXkodHRrZXl0YWIsbnR0a2V5LCIiLCIiLHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgICAgcmV0dXJuKHQpOwotICAgICAgICAgIGNtZmRiaSgmbnUsICAgICAg ICAgICAgICAgICAgIC8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KLSAgICAgICAg ICAgICAgICAgX0NNTlVNLCAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAg ICAgICAiL2xpdGVyYWwsIGtleWNvZGUsIG9yIGFjdGlvbiIsCi0gICAgICAgICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgICAiIiwg ICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgICAg ICAgIDEwLCAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHJhZGl4 ICovCi0gICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDI6IDAgKi8KLSAgICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAg ICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICAgIE5VTEwsICAgICAg ICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAgICAgICAmc3cgICAg ICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAgICAg ICAgKTsgICAgICAgICAgICAgICAgICAgICAvKiAgKi8KLSAgICAgICAgICBjbWZkYmkoJnN3LCAg ICAgICAgICAgICAgICAgICAvKiBTZWNvbmQgRkRCIC0gc3dpdGNoZXMgKi8KLSAgICAgICAgICAg ICAgICAgX0NNS0VZLCAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAgICAg ICAiIiwKLSAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0 ICovCi0gICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3Ry aW5nIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgbnN0cm1zd2l0YWIsICAgICAgICAgICAvKiBh ZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLSAgICAgICAgICAgICAgICAgNCwgICAg ICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0g ICAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5j dGlvbiAqLwotICAgICAgICAgICAgICAgICBzdHJtc3dpdGFiLCAgICAgICAgICAgIC8qIEtleXdv cmQgdGFibGUgKi8KLSAgICAgICAgICAgICAgICAgJmt3ICAgICAgICAgICAgICAgICAgICAvKiBQ b2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgY21m ZGJpKCZrdywgICAgICAgICAgICAgICAgICAgLyogVGhpcmQgRkRCIC0gY29tbWFuZCBzd2l0Y2hl cyAqLwotICAgICAgICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgIC8qIGZjb2RlICov Ci0gICAgICAgICAgICAgICAgICIvbGl0ZXJhbCwga2V5Y29kZSwgb3IgYWN0aW9uIiwKLSAgICAg ICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAg ICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8K LSAgICAgICAgICAgICAgICAgbnN0cm1rZXl0YWIsICAgICAgICAgICAvKiBhZGR0bCBudW1lcmlj IGRhdGEgMTogdGJsIHNpemUgKi8KLSAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotICAgICAgICAgICAgICAgICB4eHN0cmlu ZywgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgICAg ICAgc3RybWtleXRhYiwgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAg ICAgICAgICZjbSAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwot ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgIGNtZmRiaSgmY20sICAgICAgICAgICAgICAg ICAgIC8qIEZpbmFsIEZEQiAtIENvbmZpcm1hdGlvbiAqLwotICAgICAgICAgICAgICAgICBfQ01D Rk0sICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICAgICAgICIiLAotICAg ICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAg ICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAq LwotICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVy aWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLSAgICAgICAgICAg ICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0g ICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAq LwotICAgICAgICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8g bmV4dCBGREIgKi8KLSAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICB3aGlsZSAoa2MgPCAw KSB7Ci0gICAgICAgICAgICAgIHggPSBjbWZkYigmbnUpOyAgICAgICAgICAgLyogUGFyc2Ugc29t ZXRoaW5nICovCi0gICAgICAgICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgICAgICByZXR1 cm4oeCk7Ci0KLSAgICAgICAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgewotICAgICAg ICAgICAgICAgIGNhc2UgX0NNQ0ZNOgotICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgUHJlc3Mg a2V5IHRvIGJlIGRlZmluZWQ6ICIpOwotICAgICAgICAgICAgICAgICAgY29uYmluKChjaGFyKWVz Y2FwZSk7IC8qIFB1dCB0ZXJtaW5hbCBpbiBiaW5hcnkgbW9kZSAqLwotICAgICAgICAgICAgICAg ICAgb3MyZ2tzID0gMDsgICAgICAgICAgIC8qIFR1cm4gb2ZmIEt2ZXJiIHByZXByb2Nlc3Npbmcg Ki8KLSAgICAgICAgICAgICAgICAgIGtjID0gY29uZ2tzKDApOyAgICAgICAvKiBHZXQgY2hhcmFj dGVyIG9yIHNjYW4gY29kZSAqLwotICAgICAgICAgICAgICAgICAgb3MyZ2tzID0gMTsgICAgICAg ICAgIC8qIFR1cm4gb24gS3ZlcmIgcHJlcHJvY2Vzc2luZyAqLwotICAgICAgICAgICAgICAgICAg Y29uY2IoKGNoYXIpZXNjYXBlKTsgIC8qIFJlc3RvcmUgdGVybWluYWwgdG8gY2JyZWFrIG1vZGUg Ki8KLSAgICAgICAgICAgICAgICAgIGlmIChrYyA8IDApIHsgICAgICAgICAvKiBDaGVjayBmb3Ig ZXJyb3IgKi8KLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9FcnJvciByZWFkaW5nIGtl eVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgc2hva2V5Y29kZShrYyx0KTsgICAgIC8qIFNob3cgY3Vy cmVudCBkZWZpbml0aW9uICovCi0gICAgICAgICAgICAgICAgICBmbGFnID0gMTsgICAgICAgICAg ICAgLyogUmVtZW1iZXIgaXQncyBhIG11bHRpbGluZSBjb21tYW5kICovCi0gICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIF9DTU5VTToKLSAgICAgICAgICAgICAg ICAgIGtjID0gY21yZXN1bHQubnJlc3VsdDsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgIGNhc2UgX0NNS0VZOgotICAgICAgICAgICAgICAgICAgaWYgKGNtcmVzdWx0 LmZkYmFkZHIgPT0gJnN3KSB7IC8qIFN3aXRjaCAqLwotICAgICAgICAgICAgICAgICAgICAgIGlm IChjbXJlc3VsdC5ucmVzdWx0ID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXRzdHIg PSAxOwotICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbXJlc3VsdC5mZGJhZGRyID09ICZr dykgeyAvKiBLZXl3b3JkICovCi0gICAgICAgICAgICAgICAgICAgICAgaWYgKGNtcmVzdWx0Lm5y ZXN1bHQgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyID0gMTsKLSAgICAgICAg ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZsdCA9IDE7Ci0g ICAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGVhcikK LSAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFya2V5bWFwKHQpOwotICAgICAgICAgICAgICAg ICAgICAgIGVsc2UgaWYgKGRlZmx0KQotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdGtl eW1hcCh0KTsKLSAgICAgICAgICAgICAgICAgICAgICBpbml0dmlrID0gMTsKLSAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg IH0KLSAgICAgICAgICB9Ci0KLSAgICAvKiBOb3JtYWwgU0VUIFRFUk1JTkFMIEtFWSA8dGVybWlu YWw+IDxzY2FuY29kZT4gPHZhbHVlPiBjb21tYW5kLi4uICovCi0KLSAgICAgICAgICBpZiAobXNr a2V5cykKLSAgICAgICAgICAgIGtjID0gbXNrdG9jayhrYyk7Ci0KLSAgICAgICAgICBpZiAoa2Mg PCAwIHx8IGtjID49IEtNU0laRSkgewotICAgICAgICAgICAgICBwcmludGYoIj9rZXkgY29kZSBt dXN0IGJlIGJldHdlZW4gMCBhbmQgJWRcbiIsIEtNU0laRSAtIDEpOwotICAgICAgICAgICAgICBy ZXR1cm4oLTkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2MgPT0gZXNjYXBlKSB7Ci0g ICAgICAgICAgICAgIHByaW50ZigiU29ycnksICVkIGlzIHRoZSBDT05ORUNULW1vZGUgZXNjYXBl IGNoYXJhY3RlclxuIixrYyk7Ci0gICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAg fQotICAgICAgICAgIHdpZGVyZXN1bHQgPSAtMTsKLSAgICAgICAgICBpZiAoZmxhZykgewotICAg ICAgICAgICAgICBjbXNhdnAocHNhdmUsUFJPTVBUTCk7Ci0gICAgICAgICAgICAgIGNtc2V0cCgi IEVudGVyIG5ldyBkZWZpbml0aW9uOiAiKTsKLSAgICAgICAgICAgICAgY21pbmkoY2t4ZWNoKTsK LSAgICAgICAgICB9Ci0gICAgICAgIGRlZl9hZ2FpbjoKLSAgICAgICAgICBpZiAoZmxhZykgcHJv bXB0KE5VTEwpOwotICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJrZXkgZGVmaW5pdGlvbixcblwK LSBvciBDdHJsLUMgdG8gY2FuY2VsIHRoaXMgY29tbWFuZCxcblwKLSBvciBFbnRlciB0byByZXN0 b3JlIGRlZmF1bHQgZGVmaW5pdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiIsJnMs TlVMTCkpIDwgMCkgewotICAgICAgICAgICAgICBpZiAoZmxhZykgICAgICAgICAgICAgICAgIC8q IEhhbmRsZSBwYXJzZSBlcnJvcnMgKi8KLSAgICAgICAgICAgICAgICBnb3RvIGRlZl9hZ2FpbjsK LSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAg ICB9Ci0gICAgICAgICAgcyA9IGJyc3RyaXAocyk7Ci0jaWZuZGVmIE5PS1ZFUkJTCi0gICAgICAg ICAgcCA9IHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2F2ZSB0aGlzIHBsYWNlICovCi0j ZW5kaWYgLyogTk9LVkVSQlMgKi8KLS8qCi0gIElmIHRoZSBkZWZpbml0aW9uIGluY2x1ZGVkIGFu eSBcS3ZlcmJzLCBxdW90ZSB0aGUgYmFja3NsYXNoIHNvIHRoZSBcS3ZlcmIKLSAgd2lsbCBzdGls bCBiZSBpbiB0aGUgZGVmaW5pdGlvbiB3aGVuIHRoZSBrZXkgaXMgcHJlc3NlZC4gIFdlIGRvbid0 IGRvIHRoaXMKLSAgaW4genpzdHJpbmcoKSwgYmVjYXVzZSBcS3ZlcmJzIGFyZSB2YWxpZCBvbmx5 IGluIHRoaXMgY29udGV4dCBhbmQgbm93aGVyZQotICBlbHNlLgotCi0gIFdlIHVzZSB0aGlzIGNv ZGUgYWN0aXZlIGZvciBhbGwgdmVyc2lvbnMgdGhhdCBzdXBwb3J0IFNFVCBLRVksIGV2ZW4gaWYg dGhleQotICBkb24ndCBzdXBwb3J0IFxLdmVyYnMsIGJlY2F1c2Ugb3RoZXJ3aXNlIFxLIHdvdWxk IGJlaGF2ZSBkaWZmZXJlbnRseSBmb3IKLSAgZGlmZmVyZW50IHZlcnNpb25zLgotKi8KLSAgICAg ICAgICBmb3IgKHggPSAwLCB5ID0gMDsgc1t4XTsgeCsrLCB5KyspIHsgLyogQ29udmVydCBcSyB0 byBcXEsgKi8KLSAgICAgICAgICAgICAgaWYgKCh4ID4gMCkgJiYKLSAgICAgICAgICAgICAgICAg IChzW3hdID09ICdLJyB8fCBzW3hdID09ICdrJykKLSAgICAgICAgICAgICAgICAgICkgeyAgICAg ICAgICAgICAgICAgICAvKiBIYXZlIEsgKi8KLQotICAgICAgICAgICAgICAgICAgaWYgKCh4ID09 IDEgJiYgc1t4LTFdID09IENNRFEpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgKHggPiAxICYm IHNbeC0xXSA9PSBDTURRICYmIHNbeC0yXSAhPSBDTURRKSkgewotICAgICAgICAgICAgICAgICAg ICAgIGxpbmVbeSsrXSA9IENNRFE7IC8qIE1ha2UgaXQgXFxLICovCi0gICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICBpZiAoeCA+IDEgJiYgc1t4LTFdID09ICd7JyAmJiBzW3gt Ml0gPT0gQ01EUSkgewotICAgICAgICAgICAgICAgICAgICAgIGxpbmVbeS0xXSA9IENNRFE7IC8q IEhhdmUgXHtLICovCi0gICAgICAgICAgICAgICAgICAgICAgbGluZVt5KytdID0gJ3snOyAgLyog TWFrZSBpdCBcXHtLICovCi0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgbGluZVt5XSA9IHNbeF07Ci0gICAgICAgICAgfQotICAgICAgICAgIGxpbmVb eSsrXSA9IE5VTDsgICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSAqLwotICAgICAgICAgIHMgPSBs aW5lICsgeSArIDE7ICAgICAgICAgICAgIC8qIFBvaW50IHRvIGFmdGVyIGl0ICovCi0gICAgICAg ICAgeCA9IExJTkJVRlNJWiAtIChpbnQpIHN0cmxlbihsaW5lKSAtIDE7IC8qIEdldCByZW1haW5p bmcgc3BhY2UgKi8KLSAgICAgICAgICBpZiAoKHggPCAoTElOQlVGU0laIC8gMikpIHx8Ci0gICAg ICAgICAgICAgICh6enN0cmluZyhsaW5lLCAmcywgJngpIDwgMCkpIHsgLyogRXhwYW5kIHZhcmlh YmxlcywgZXRjLiAqLwotICAgICAgICAgICAgICBwcmludGYoIj9LZXkgZGVmaW5pdGlvbiB0b28g bG9uZ1xuIik7Ci0gICAgICAgICAgICAgIGlmIChmbGFnKSBjbXNldHAocHNhdmUpOwotICAgICAg ICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBzID0gbGluZSArIHkg KyAxOyAgICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQuICovCi0KLSNpZm5kZWYgTk9LVkVS QlMKLS8qCi0gIFNwZWNpYWwgY2FzZTogc2VlIGlmIHRoZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRo IGEgXEt2ZXJiLgotICBJZiBpdCBkb2VzLCBwb2ludCB0byBpdCB3aXRoIHAsIG90aGVyd2lzZSBz ZXQgcCB0byBOVUxMLgotKi8KLSAgICAgICAgICBwID0gczsKLSAgICAgICAgICBpZiAoKnArKyA9 PSBDTURRKSB7Ci0gICAgICAgICAgICAgIGlmICgqcCA9PSAneycpIHArKzsKLSAgICAgICAgICAg ICAgcCA9ICgqcCA9PSAnaycgfHwgKnAgPT0gJ0snKSA/IHAgKyAxIDogTlVMTDsKLSAgICAgICAg ICB9Ci0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLQotICAgICAgICAgIHN3aXRjaCAoc3RybGVuKHMp KSB7ICAgICAgICAgIC8qIEFjdGlvbiBkZXBlbmRzIG9uIGxlbmd0aCAqLwotICAgICAgICAgICAg Y2FzZSAwOiAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIGluZGl2aWR1YWwga2V5IGRlZiAq LwotICAgICAgICAgICAgICBkZWxldGVrZXltYXAodCxrYyk7Ci0gICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICBpZiAoIWxpdHN0cikgewotICAg ICAgICAgICAgICAgICAgZGVmZXZ0LnR5cGUgPSBrZXk7ICAgIC8qIFNpbmdsZSBjaGFyYWN0ZXIg Ki8KLSAgICAgICAgICAgICAgICAgIGRlZmV2dC5rZXkuc2NhbmNvZGUgPSAqczsKLSAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OiAg ICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHN0cmluZyAqLwotI2lmbmRlZiBOT0tWRVJC UwotICAgICAgICAgICAgICBpZiAocCkgewotICAgICAgICAgICAgICAgICAgeSA9IHhsb29rdXAo a3ZlcmJzLHAsbmt2ZXJicywmeCk7IC8qIExvb2sgaXQgdXAgKi8KLSAgICAgICAgICAgICAgICAg IC8qIE5lZWQgZXhhY3QgbWF0Y2ggKi8KLSAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInNl dCBrZXkga3ZlcmIgbG9va3VwIiwwLHkpOwotICAgICAgICAgICAgICAgICAgaWYgKHkgPiAtMSkg ewotICAgICAgICAgICAgICAgICAgICAgIGRlZmV2dC50eXBlID0ga3ZlcmI7Ci0gICAgICAgICAg ICAgICAgICAgICAgZGVmZXZ0Lmt2ZXJiLmlkID0geTsKLSAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5P S1ZFUkJTICovCi0gICAgICAgICAgICAgIGlmIChsaXRzdHIpIHsKLSAgICAgICAgICAgICAgICAg IGRlZmV2dC50eXBlID0gbGl0ZXJhbDsKLSAgICAgICAgICAgICAgICAgIGRlZmV2dC5saXRlcmFs LnN0cmluZyA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4ocykrMSk7Ci0gICAgICAgICAgICAgICAg ICBpZiAoZGVmZXZ0LmxpdGVyYWwuc3RyaW5nKQotICAgICAgICAgICAgICAgICAgICBzdHJjcHko ZGVmZXZ0LmxpdGVyYWwuc3RyaW5nLCBzKTsgLyogc2FmZSAqLwotICAgICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgICAgZGVmZXZ0LnR5cGUgPSBtYWNybzsKLSAgICAgICAgICAg ICAgICAgIGRlZmV2dC5tYWNyby5zdHJpbmcgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKHMpKzEp OwotICAgICAgICAgICAgICAgICAgaWYgKGRlZmV2dC5tYWNyby5zdHJpbmcpCi0gICAgICAgICAg ICAgICAgICAgIHN0cmNweShkZWZldnQubWFjcm8uc3RyaW5nLCBzKTsgLyogc2FmZSAqLwotICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAg ICBpbnNlcnRrZXltYXAodCwga2MsIGRlZmV2dCk7Ci0gICAgICAgICAgaWYgKGZsYWcpCi0gICAg ICAgICAgICBjbXNldHAocHNhdmUpOwotICAgICAgICAgIGluaXR2aWsgPSAxOyAgICAgICAgICAg ICAgICAgIC8qIFVwZGF0ZSBWSUsgdGFibGUgKi8KLSAgICAgICAgICByZXR1cm4oMSk7Ci0gICAg ICB9Ci0KLSNpZmRlZiBQQ1RFUk0KLSAgICAgIGNhc2UgWFlUUENURVJNOiAgICAgICAgICAgICAg ICAgICAvKiBQQ1RFUk0gS2V5Ym9hcmQgTW9kZSAqLwotICAgICAgICBpZiAoKHggPSBzZXRvbigm dHRfcGN0ZXJtKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 Ci0jZW5kaWYgLyogUENURVJNICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBDS19UUklH R0VSCi0gICAgICBjYXNlIFhZVFJJR0dFUjoKLSAgICAgICAgaWYgKCh5ID0gY210eHQoIlN0cmlu ZyB0byB0cmlnZ2VyIGF1dG9tYXRpYyByZXR1cm4gdG8gY29tbWFuZCBtb2RlIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkp OwotICAgICAgICBtYWtlbGlzdChzLHR0X3RyaWdnZXIsVFJJR0dFUlMpOwotICAgICAgICByZXR1 cm4oMSk7Ci0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotCi0jaWZkZWYgT1MyCi0gICAgICBjYXNl IFhZVFNBQzoKLSAgICAgICAgaWYgKCh5ID0gY21udW0oIkFTQ0lJIHZhbHVlIHRvIHVzZSBmb3Ig c3BhY2luZyBhdHRyaWJ1dGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIjMyIiwxMCwmeCx4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICB0dF9zYWMgPSB4OwotICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFhZVEtCREdMOiB7ICAgICAgLyogU0VUIFRF Uk0gS0JELUZPTExPV1MtR0wvR1IgKi8KLSAgICAgICAgICBleHRlcm4gaW50IHR0X2tiX2dsZ3I7 ICAgICAgICAvKiBmcm9tIGNrb2NvMy5jICovCi0gICAgICAgICAgaWYgKCh4ID0gc2V0b24oJnR0 X2tiX2dsZ3IpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotI2lmbmRlZiBOT0NTRVRTCi0gICAgICBjYXNlIFhZ VFZUTE5HOiAgICAgICAgLyogU0VUIFRFUk0gREVDLUxBTkdVQUdFICovCi0gICAgICAgIGlmICgo eSA9IGNta2V5KHZ0bGFuZ3RhYixudnRsYW5ndGFiLCJWVCBsYW5ndWFnZSIsCi0gICAgICAgICAg ICAgICAgICAgICAgIElTOTc4MDEodHRfdHlwZV9tb2RlKT8iZ2VybWFuIjoibm9ydGgtYW1lcmlj YW4iLAotICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICBy ZXR1cm4oeSk7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCi0g ICAgICAgIC8qIEEgcmVhbCBWVCB0ZXJtaW5hbCB3b3VsZCB1c2UgdGhlIGxhbmd1YWdlIHRvIHNl dCB0aGUgICAqLwotICAgICAgICAvKiBkZWZhdWx0IGtleWJvYXJkIGxhbmd1YWdlIGZvciBib3Ro IDgtYml0IG11bHRpbmF0aW9uYWwgKi8KLSAgICAgICAgLyogYW5kIDctYml0IG5hdGlvbmFsIG1v ZGVzLiAgRm9yIDgtYml0IG1vZGUgaXQgd291bGQgICAgICovCi0gICAgICAgIC8qIHNldCB0aGUg dGVybWluYWwgY2hhcmFjdGVyLXNldCB0byB0aGUgSVNPIHNldCBpZiBpdCAgICAqLwotICAgICAg ICAvKiBpcyBub3QgYWxyZWFkeSBzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKi8KLSAgICAgICAgLyogTGF0aW4tMSBjYW4gYmUgcmVwbGFjZWQgYnkgREVDIE11bHRpbmF0 aW9uYWwgICAgICAgICAgICovCi0gICAgICAgIHN3aXRjaCAoeSkgewotICAgICAgICAgIGNhc2Ug VlRMX05PUlRIX0FNOiAgLyogTm9ydGggQW1lcmljYW4gKi8KLSAgICAgICAgICAgIC8qIE11bHRp bmF0aW9uYWw6IExhdGluLTEgICAqLwotICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgVVNf QVNDSUkgICovCi0gICAgICAgICAgICBkZWNfbGFuZyA9IHk7Ci0gICAgICAgICAgICBkZWNfbnJj ID0gVFhfQVNDSUk7Ci0gICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8xOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBWVExfQlJJVElTSCA6Ci0gICAgICAgICAgICAvKiBN dWx0aW5hdGlvbmFsOiBMYXRpbi0xICAgKi8KLSAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAg IFVLX0FTQ0lJICAqLwotICAgICAgICAgICAgZGVjX2xhbmcgPSB5OwotICAgICAgICAgICAgZGVj X25yYyA9IFRYX0JSSVRJU0g7Ci0gICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8xOwotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBWVExfRlJFTkNIICA6Ci0gICAgICAgICAg Y2FzZSBWVExfQkVMR0lBTiA6Ci0gICAgICAgICAgY2FzZSBWVExfQ0FOQURJQU46Ci0gICAgICAg ICAgICAvKiBNdWx0aW5hdGlvbmFsOiBMYXRpbi0xICAgKi8KLSAgICAgICAgICAgIC8qIE5hdGlv bmFsOiAgICAgIEZSX0FTQ0lJICAqLwotICAgICAgICAgICAgZGVjX2xhbmcgPSB5OwotICAgICAg ICAgICAgZGVjX25yYyA9IFRYX0ZSRU5DSDsKLSAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5 XzE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFZUTF9GUl9DQU4gIDoKLSAg ICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6IExhdGluLTEgICAqLwotICAgICAgICAgICAgLyog TmF0aW9uYWw6ICAgICAgRkNfQVNDSUkgICovCi0gICAgICAgICAgICBkZWNfbGFuZyA9IHk7Ci0g ICAgICAgICAgICBkZWNfbnJjID0gVFhfQ05fRlJFTkNIOwotICAgICAgICAgICAgZGVjX2tiZCA9 IFRYXzg4NTlfMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVlRMX0RBTklT SCAgOgotICAgICAgICAgIGNhc2UgVlRMX05PUldFR0lBOgotICAgICAgICAgICAgLyogTXVsdGlu YXRpb25hbDogTGF0aW4tMSAgICovCi0gICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBOT19B U0NJSSAgKi8KLSAgICAgICAgICAgIGRlY19sYW5nID0geTsKLSAgICAgICAgICAgIGRlY19ucmMg PSBUWF9OT1JXRUdJQU47Ci0gICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8xOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBWVExfRklOTklTSCA6Ci0gICAgICAgICAgICAv KiBNdWx0aW5hdGlvbmFsOiBMYXRpbi0xICAgKi8KLSAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAg ICAgIEZJX0FTQ0lJICAqLwotICAgICAgICAgICAgZGVjX2xhbmcgPSB5OwotICAgICAgICAgICAg ZGVjX25yYyA9IFRYX0ZJTk5JU0g7Ci0gICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8xOwot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBWVExfR0VSTUFOICA6Ci0gICAgICAg ICAgICAvKiBNdWx0aW5hdGlvbmFsOiBMYXRpbi0xICAgKi8KLSAgICAgICAgICAgIC8qIE5hdGlv bmFsOiAgICAgIEdSX0FTQ0lJICAqLwotICAgICAgICAgICAgZGVjX2xhbmcgPSB5OwotICAgICAg ICAgICAgZGVjX25yYyA9IFRYX0dFUk1BTjsKLSAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5 XzE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFZUTF9EVVRDSCAgIDoKLSAg ICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6IExhdGluLTEgICAqLwotICAgICAgICAgICAgLyog TmF0aW9uYWw6ICAgICAgRFVfQVNDSUkgICovCi0gICAgICAgICAgICBkZWNfbGFuZyA9IHk7Ci0g ICAgICAgICAgICBkZWNfbnJjID0gVFhfRFVUQ0g7Ci0gICAgICAgICAgICBkZWNfa2JkID0gVFhf ODg1OV8xOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBWVExfSVRBTElBTiA6 Ci0gICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFsOiBMYXRpbi0xICAgKi8KLSAgICAgICAgICAg IC8qIE5hdGlvbmFsOiAgICAgIElUX0FTQ0lJICAqLwotICAgICAgICAgICAgZGVjX2xhbmcgPSB5 OwotICAgICAgICAgICAgZGVjX25yYyA9IFRYX0lUQUxJQU47Ci0gICAgICAgICAgICBkZWNfa2Jk ID0gVFhfODg1OV8xOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBWVExfU1df RlIgICA6Ci0gICAgICAgICAgY2FzZSBWVExfU1dfR1IgICA6Ci0gICAgICAgICAgICAvKiBNdWx0 aW5hdGlvbmFsOiBMYXRpbi0xICAgKi8KLSAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIENI X0FTQ0lJICAqLwotICAgICAgICAgICAgZGVjX2xhbmcgPSB5OwotICAgICAgICAgICAgZGVjX25y YyA9IFRYX1NXSVNTOwotICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMTsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVlRMX1NXRURJU0ggOgotICAgICAgICAgICAgLyog TXVsdGluYXRpb25hbDogTGF0aW4tMSAgICovCi0gICAgICAgICAgICAvKiBOYXRpb25hbDogICAg ICBTV19BU0NJSSAgKi8KLSAgICAgICAgICAgIGRlY19sYW5nID0geTsKLSAgICAgICAgICAgIGRl Y19ucmMgPSBUWF9TV0VESVNIOwotICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMTsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVlRMX1NQQU5JU0ggOgotICAgICAgICAg ICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4tMSAgICovCi0gICAgICAgICAgICAvKiBOYXRpb25h bDogICAgICBTUF9BU0NJSSAgKi8KLSAgICAgICAgICAgIGRlY19sYW5nID0geTsKLSAgICAgICAg ICAgIGRlY19ucmMgPSBUWF9TUEFOSVNIOwotICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlf MTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVlRMX1BPUlRVR0VTOgotICAg ICAgICAgICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4tMSAgICovCi0gICAgICAgICAgICAvKiBO YXRpb25hbDogICAgICBQb3J0dWdlc2UgQVNDSUkgICovCi0gICAgICAgICAgICBkZWNfbGFuZyA9 IHk7Ci0gICAgICAgICAgICBkZWNfbnJjID0gVFhfUE9SVFVHVUVTRTsKLSAgICAgICAgICAgIGRl Y19rYmQgPSBUWF84ODU5XzE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFZU TF9IRUJSRVcgIDoKLSAgICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6IExhdGluLUhlYnJldyAv IERFQy1IZWJyZXcgICovCi0gICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBERUMgNy1iaXQg SGVicmV3ICAqLwotICAgICAgICAgICAgZGVjX2xhbmcgPSB5OwotICAgICAgICAgICAgZGVjX25y YyA9IFRYX0hFNzsKLSAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5Xzg7Ci0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICBjYXNlIFZUTF9HUkVFSyAgIDoKLSAgICAgICAgICAgIC8qIE11 bHRpbmF0aW9uYWw6IExhdGluLUdyZWVrIC8gREVDLUdyZWVrICAgKi8KLSAgICAgICAgICAgIC8q IE5hdGlvbmFsOiAgICAgIERFQyBHcmVlayBOUkMgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg IC8qIGlzIEVMT1Q5MjcgZXF1aXZhbGVudCB0byBERUMgR3JlZWs/Pz8/ICAgKi8KLSAgICAgICAg ICAgIGRlY19sYW5nID0geTsKLSAgICAgICAgICAgIGRlY19ucmMgPSBUWF9FTE9UOTI3OwotICAg ICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfNzsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmZGVm IENPTU1FTlQKLSAgICAgICAgICBjYXNlIFZUTF9UVVJLX1EgIDoKLSAgICAgICAgICBjYXNlIFZU TF9UVVJLX0YgIDoKLSAgICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6IExhdGluLVR1cmtpc2gg LyBERUMtVHVya2lzaCAgICovCi0gICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBERUMgNy1i aXQgVHVya2lzaCAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgICAgICAgIGNhc2UgVlRMX0hVTkdBUklBOgotICAgICAgICAgICAgLyog TXVsdGluYXRpb25hbDogTGF0aW4tMiAgICovCi0gICAgICAgICAgICAvKiBOYXRpb25hbDogICAg ICBubyBuYXRpb25hbCBtb2RlICAqLwotICAgICAgICAgICAgZGVjX2xhbmcgPSB5OwotICAgICAg ICAgICAgZGVjX25yYyA9IFRYX0hVTkdBUklBTjsKLSAgICAgICAgICAgIGRlY19rYmQgPSBUWF84 ODU5XzI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFZUTF9TTE9WQUsgIDoK LSAgICAgICAgICBjYXNlIFZUTF9DWkVDSCAgIDoKLSAgICAgICAgICBjYXNlIFZUTF9QT0xJU0gg IDoKLSAgICAgICAgICBjYXNlIFZUTF9ST01BTklBTjoKLSAgICAgICAgICAgIC8qIE11bHRpbmF0 aW9uYWw6IExhdGluLTIgICAqLwotICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgbm8gbmF0 aW9uYWwgbW9kZSAgKi8KLSAgICAgICAgICAgIGRlY19sYW5nID0geTsKLSAgICAgICAgICAgIGRl Y19ucmMgPSBUWF9BU0NJSTsKLSAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzI7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFZUTF9SVVNTSUFOIDoKLSAgICAgICAgICAg IC8qIE11bHRpbmF0aW9uYWw6IExhdGluLUN5cmlsbGljIC8gS09JLTggICAqLwotICAgICAgICAg ICAgLyogTmF0aW9uYWw6ICAgICAgREVDIFJ1c3NpYW4gTlJDICAqLwotICAgICAgICAgICAgZGVj X2xhbmcgPSB5OwotICAgICAgICAgICAgZGVjX25yYyA9IFRYX0tPSTc7Ci0gICAgICAgICAgICBk ZWNfa2JkID0gVFhfODg1OV81OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBW VExfTEFUSU5fQU06Ci0gICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFsOiBub3QgbGlzdGVkIGlu IHRhYmxlICAgKi8KLSAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIG5vdCBsaXN0ZWQgaW4g dGFibGUgICovCi0gICAgICAgICAgICBkZWNfbGFuZyA9IHk7Ci0gICAgICAgICAgICBkZWNfbnJj ID0gVFhfQVNDSUk7Ci0gICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8xOwotICAgICAgICAg ICAgYnJlYWs7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgIGNhc2UgVlRMX1NDUyAgICAgOgot ICAgICAgICAgICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4tMiAgICovCi0gICAgICAgICAgICAv KiBOYXRpb25hbDogICAgICBTQ1MgTlJDICAgKi8KLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoSVM5NzgwMSh0dF90eXBlX21vZGUp KSB7Ci0gICAgICAgICAgICBTTklfYml0bW9kZShjbWFzayA9PSAwMzc3ID8gOCA6IDcpOwotICAg ICAgICB9Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0jZW5kaWYgLyogTk9DU0VUUyAq LwotCi0gICAgICBjYXNlIFhZVFZUTlJDOiB7ICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk0g REVDLU5SQy1NT0RFICovCi0gICAgICAgICAgZXh0ZXJuIGludCBkZWNucmNtX3VzciwgZGVjbnJj bTsgICAgICAgIC8qIGZyb20gY2tvY28zLmMgKi8KLSAgICAgICAgICBpZiAoKHggPSBzZXRvbigm ZGVjbnJjbV91c3IpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgZGVj bnJjbSA9IGRlY25yY21fdXNyOwotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAg ICB9Ci0gICAgICBjYXNlIFhZVFNOSVBNOiB7ICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk0g U05JLVBBR0VNT0RFICovCi0gICAgICAgICAgZXh0ZXJuIGludCBzbmlfcGFnZW1vZGUsIHNuaV9w YWdlbW9kZV91c3I7Ci0gICAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4 c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeCk7Ci0gICAgICAgICAgc25pX3BhZ2Vtb2RlX3VzciA9IHNuaV9wYWdlbW9kZSA9 IHk7Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLSAgICAgIGNhc2Ug WFlUU05JU006IHsgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTSBTTkktU0NST0xMTU9ERSAq LwotICAgICAgICAgIGV4dGVybiBpbnQgc25pX3Njcm9sbF9tb2RlLCBzbmlfc2Nyb2xsX21vZGVf dXNyOwotICAgICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykp IDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHgpOwotICAgICAgICAgIHNuaV9zY3JvbGxfbW9kZV91c3IgPSBzbmlfc2Nyb2xsX21vZGUgPSB5 OwotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0gICAgICBjYXNlIFhZ VFNOSUNDOiB7ICAvKiBTRVQgVEVSTSBTTkktQ0guQ09ERSAqLwotICAgICAgICAgIGV4dGVybiBp bnQgc25pX2NoY29kZV91c3I7Ci0gICAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwi b24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgICAgc25pX2NoY29kZV91c3IgPSB5OwotICAgICAg ICAgIFNOSV9jaGNvZGUoeSk7Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAg IH0KLSAgICAgIGNhc2UgWFlUU05JRlY6IHsgIC8qIFNFVCBURVJNIFNOSS1GSVJNV0FSRS1WRVJT SU9OUyAqLwotICAgICAgICAgIGV4dGVybiBDSEFSIHNuaV9rYmRfZmlybXdhcmVbXSwgc25pX3Rl cm1fZmlybXdhcmVbXTsKLSAgICAgICAgICBDSEFSIGtiZFs3XSx0ZXJtWzddOwotCi0gICAgICAg ICAgaWYgKCh4ID0gY21mbGQoIktleWJvYXJkIEZpcm13YXJlIFZlcnNpb24iLHNuaV9rYmRfZmly bXdhcmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJnMsIHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgIGlmICgoaW50KXN0cmxlbihzKSAhPSA2KSB7 Ci0gICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5IC0gdGhlIGZpcm13YXJlIHZlcnNpb24gbXVz dCBiZSA2IGRpZ2l0cyBsb25nXG4iKTsKLSAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAg ICAgICB9Ci0gICAgICAgICAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotICAgICAgICAgICAg ICBpZiAoIWlzZGlnaXQoc1tpXSkpIHsKLSAgIHByaW50ZigiP1NvcnJ5IC0gdGhlIGZpcm13YXJl IHZlcnNpb24gY2FuIG9ubHkgY29udGFpbiBkaWdpdHMgWzAtOV1cbiIpOwotICAgICAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAg ICBja3N0cm5jcHkoa2JkLHMsNyk7Ci0KLSAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiVGVybWlu YWwgRmlybXdhcmUgVmVyc2lvbiIsc25pX3Rlcm1fZmlybXdhcmUsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgJnMsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAg ICAgICAgIGlmICgoaW50KXN0cmxlbihzKSAhPSA2KSB7Ci0gICAgICAgICAgICAgIHByaW50Zigi P1NvcnJ5IC0gdGhlIGZpcm13YXJlIHZlcnNpb24gbXVzdCBiZSA2IGRpZ2l0cyBsb25nXG4iKTsK LSAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZm9yIChp ID0gMDsgaSA8IDY7IGkrKykgewotICAgICAgICAgICAgICBpZiAoIWlzZGlnaXQoc1tpXSkpIHsK LSAgIHByaW50ZigiP1NvcnJ5IC0gdGhlIGZpcm13YXJlIHZlcnNpb24gY2FuIG9ubHkgY29udGFp biBkaWdpdHMgWzAtOV1cbiIpOwotICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAg ICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgY2tzdHJuY3B5KHRlcm0scyw3KTsK LSAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLQotICAgICAgICAg IGNrc3RybmNweShzbmlfa2JkX2Zpcm13YXJlLGtiZCw3KTsKLSAgICAgICAgICBja3N0cm5jcHko c25pX3Rlcm1fZmlybXdhcmUsdGVybSw3KTsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEp OwotICAgIH0KLQotICAgIGNhc2UgWFlUTFNQOiB7ICAgICAgICAgICAgICAvKiBTRVQgVEVSTSBM SU5FLVNQQUNJTkcgKi8KLSAgICAgICAgaWYgKCh4ID0gY21mbGQoIkxpbmUgU3BhY2luZyIsIjEi LCZzLCB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmIChp c2Zsb2F0KHMsMCkgPCAxKSB7CQkvKiAoc2V0cyBmbG9hdHZhbCkgKi8KLSAgICAgICAgICAgIHBy aW50ZigiP0ludGVnZXIgb3IgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHJlcXVpcmVkXG4iKTsKLSAg ICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZsb2F0dmFsIDwg MS4wIHx8IGZsb2F0dmFsID4gMy4wKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9WYWx1ZSBtdXN0 IHdpdGhpbiB0aGUgcmFuZ2UgMS4wIGFuZCAzLjAgKGluY2x1c2l2ZSlcbiIpOwotICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp IHJldHVybih4KTsKLSNpZmRlZiBLVUkKLSAgICAgICAgdHRfbGluZXNwYWNpbmdbVkNNRF0gPSB0 dF9saW5lc3BhY2luZ1tWVEVSTV0gPSBmbG9hdHZhbDsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKLSNlbHNlIC8qIEtVSSAqLwotICAgICAgICBwcmludGYoIj9Tb3JyeSwgTGluZS1zcGFj aW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIEs5NUcuRVhFLlxuIik7Ci0gICAgICAgIHJldHVybihz dWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogS1VJICovCi0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwot Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2hvdWxkbid0IGdl dCBoZXJlLiAqLwotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLSNlbmRpZiAvKiBNQUMgKi8K LSNpZmRlZiBDT01NRU5UCi0gICAgLyoKLSAgICAgIFRoaXMgd2FzIHN1cHBvc2VkIHRvIHNodXQg dXAgcGlja3kgY29tcGlsZXJzIGJ1dCBpbnN0ZWFkIGl0IG1ha2VzCi0gICAgICBtb3N0IGNvbXBp bGVycyBjb21wbGFpbiBhYm91dCAic3RhdGVtZW50IG5vdCByZWFjaGVkIi4KLSAgICAqLwotICAg IHJldHVybigtMik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmZGVmIE9TMgotICAgIHJldHVy bigtMik7Ci0jZW5kaWYgLyogT1MyICovCi19Ci0KLSNpZmRlZiBPUzIKLWludAotc2V0dGl0bGUo dm9pZCkgewotICAgIGV4dGVybiBjaGFyIHVzZXJ0aXRsZVtdOwotICAgIGlmICgoeSA9IGNtdHh0 KCJ0aXRsZSB0ZXh0IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih5KTsKLSNp ZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgIHByaW50ZigiP1NvcnJ5LCBj b21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAg ICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgIHMgPSBicnN0cmlwKHMpOwotICAgIGNrc3RybmNw eSh1c2VydGl0bGUscyw2NCk7Ci0gICAgb3Myc2V0dGl0bGUoIiIsMSk7Ci0gICAgcmV0dXJuKDEp OwotfQotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBkaWFsZXJ0YWJbXSA9IHsgICAgLyogSzk1IERp YWxlciB0eXBlcyAqLwotICAgICJiYWNrc3BhY2UiLCAgICAgICAgMCwgMCwKLSAgICAiZW50ZXIi LCAgICAgICAgICAgIDEsIDAKLX07Ci1zdGF0aWMgaW50IG5kaWFsZXIgPSAyOwotCi1pbnQKLXNl dGRpYWxlcih2b2lkKSB7Ci0gICAgaW50IHQsIHgsIHk7Ci0gICAgaW50IGNsZWFyID0gMCwgZGVm bHQgPSAwOwotICAgIGludCBrYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtleSBj b2RlICovCi0gICAgY2hhciAqcyA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgLyogS2V5IGJp bmRpbmcgKi8KLSNpZm5kZWYgTk9LVkVSQlMKLSAgICBjaGFyICpwID0gTlVMTDsgICAgICAgICAg ICAgICAgICAgICAvKiBXb3JrZXIgKi8KLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotICAgIGNvbl9l dmVudCBkZWZldnQ7Ci0gICAgZXh0ZXJuIGludCBvczJna3M7Ci0gICAgZXh0ZXJuIGludCBtc2tr ZXlzOwotICAgIGV4dGVybiBpbnQgaW5pdHZpazsKLQotICAgIGRlZmV2dC50eXBlID0gZXJyb3I7 Ci0KLSAgICBpZiAoKCB4ID0gY21rZXkoZGlhbGVydGFiLCBuZGlhbGVyLAotICAgICAgICAgICAg ICAgICAgICAiS2VybWl0LTk1IGRpYWxlciB3b3JrLWFyb3VuZHMiLAotICAgICAgICAgICAgICAg ICAgICAiIiwgeHhzdHJpbmcpKSA8IDAgKQotICAgICAgcmV0dXJuKHgpOwotICAgIHN3aXRjaCAo eCkgewotICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhY2tzcGFj ZSAqLwotICAgICAgICBrYyA9IDI2NDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDE6ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRW50ZXIgKi8KLSAgICAgICAga2MgPSAyNjk7Ci0g ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRmKCJJbGxlZ2FsIHZh bHVlIGluIHNldGRpYWxlcigpXG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAg aWYgKCh5ID0gY210eHQoIktleSBkZWZpbml0aW9uIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAg ICAgIHJldHVybih5KTsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAg ICAgcHJpbnRmKCI/U29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgcyA9IGJyc3Ry aXAocyk7Ci0jaWZuZGVmIE5PS1ZFUkJTCi0gICAgcCA9IHM7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU2F2ZSB0aGlzIHBsYWNlICovCi0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLS8q Ci0gIElmIHRoZSBkZWZpbml0aW9uIGluY2x1ZGVkIGFueSBcS3ZlcmJzLCBxdW90ZSB0aGUgYmFj a3NsYXNoIHNvIHRoZSBcS3ZlcmIKLSAgd2lsbCBzdGlsbCBiZSBpbiB0aGUgZGVmaW5pdGlvbiB3 aGVuIHRoZSBrZXkgaXMgcHJlc3NlZC4gIFdlIGRvbid0IGRvIHRoaXMKLSAgaW4genpzdHJpbmco KSwgYmVjYXVzZSBcS3ZlcmJzIGFyZSB2YWxpZCBvbmx5IGluIHRoaXMgY29udGV4dCBhbmQgbm93 aGVyZQotICBlbHNlLgotCi0gIFdlIHVzZSB0aGlzIGNvZGUgYWN0aXZlIGZvciBhbGwgdmVyc2lv bnMgdGhhdCBzdXBwb3J0IFNFVCBLRVksIGV2ZW4gaWYgdGhleQotICBkb24ndCBzdXBwb3J0IFxL dmVyYnMsIGJlY2F1c2Ugb3RoZXJ3aXNlIFxLIHdvdWxkIGJlaGF2ZSBkaWZmZXJlbnRseSBmb3IK LSAgZGlmZmVyZW50IHZlcnNpb25zLgotKi8KLSAgICBmb3IgKHggPSAwLCB5ID0gMDsgc1t4XTsg eCsrLCB5KyspIHsgLyogQ29udmVydCBcSyB0byBcXEsgKi8KLSAgICAgICAgaWYgKCh4ID4gMCkg JiYKLSAgICAgICAgICAgIChzW3hdID09ICdLJyB8fCBzW3hdID09ICdrJykKLSAgICAgICAgICAg ICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXZlIEsgKi8KLQotICAgICAgICAgICAg aWYgKCh4ID09IDEgJiYgc1t4LTFdID09IENNRFEpIHx8Ci0gICAgICAgICAgICAgICAgKHggPiAx ICYmIHNbeC0xXSA9PSBDTURRICYmIHNbeC0yXSAhPSBDTURRKSkgewotICAgICAgICAgICAgICAg IGxpbmVbeSsrXSA9IENNRFE7ICAgICAgIC8qIE1ha2UgaXQgXFxLICovCi0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBpZiAoeCA+IDEgJiYgc1t4LTFdID09ICd7JyAmJiBzW3gtMl0gPT0gQ01E USkgewotICAgICAgICAgICAgICAgIGxpbmVbeS0xXSA9IENNRFE7ICAgICAgIC8qIEhhdmUgXHtL ICovCi0gICAgICAgICAgICAgICAgbGluZVt5KytdID0gJ3snOyAgICAgICAgLyogTWFrZSBpdCBc XHtLICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbGluZVt5XSA9IHNbeF07 Ci0gICAgfQotICAgIGxpbmVbeSsrXSA9IE5VTDsgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1p bmF0ZSAqLwotICAgIHMgPSBsaW5lICsgeSArIDE7ICAgICAgICAgICAgICAgICAgIC8qIFBvaW50 IHRvIGFmdGVyIGl0ICovCi0gICAgeCA9IExJTkJVRlNJWiAtIChpbnQpIHN0cmxlbihsaW5lKSAt IDE7IC8qIENhbGN1bGF0ZSByZW1haW5pbmcgc3BhY2UgKi8KLSAgICBpZiAoKHggPCAoTElOQlVG U0laIC8gMikpIHx8Ci0gICAgICAgICh6enN0cmluZyhsaW5lLCAmcywgJngpIDwgMCkpIHsgLyog RXhwYW5kIHZhcmlhYmxlcywgZXRjLiAqLwotICAgICAgICBwcmludGYoIj9LZXkgZGVmaW5pdGlv biB0b28gbG9uZ1xuIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIHMgPSBsaW5l ICsgeSArIDE7ICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdC4gKi8KLQotI2lm bmRlZiBOT0tWRVJCUwotLyoKLSAgU3BlY2lhbCBjYXNlOiBzZWUgaWYgdGhlIGRlZmluaXRpb24g c3RhcnRzIHdpdGggYSBcS3ZlcmIuCi0gIElmIGl0IGRvZXMsIHBvaW50IHRvIGl0IHdpdGggcCwg b3RoZXJ3aXNlIHNldCBwIHRvIE5VTEwuCi0qLwotICAgIHAgPSBzOwotICAgIGlmICgqcCsrID09 IENNRFEpIHsKLSAgICAgICAgaWYgKCpwID09ICd7JykgcCsrOwotICAgICAgICBwID0gKCpwID09 ICdrJyB8fCAqcCA9PSAnSycpID8gcCArIDEgOiBOVUxMOwotICAgIH0KLSNlbmRpZiAvKiBOT0tW RVJCUyAqLwotCi0gICAgLyogQ2xlYXIgdGhlIGRlZmluaXRpb24gZm9yIFNFVCBLRVkgKi8KLSAg ICBpZiAobWFjcm90YWJba2NdKSB7ICAgICAgICAgICAgICAgICAvKiBQb3NzaWJseSBmcmVlIG9s ZCBtYWNybyBmcm9tIGtleS4gKi8KLSAgICAgICAgZnJlZSgoY2hhciAqKW1hY3JvdGFiW2tjXSk7 Ci0gICAgICAgIG1hY3JvdGFiW2tjXSA9IE5VTEw7Ci0gICAgfQotICAgIGtleW1hcFtrY10gPSAo S0VZKSBrYzsKLQotICAgIC8qIE5vdyByZXByb2dyYW0gdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGFs bCB0ZXJtaW5hbCB0eXBlcyAqLwotICAgIC8qIHJlbWVtYmVyIHRvIHRyZWF0IFd5c2UgYW5kIFRl bGV2aWRlbyB0ZXJtaW5hbHMgc3BlY2lhbCAqLwotICAgIC8qIGJlY2F1c2Ugb2YgdGhlaXIgdXNl IG9mIEt2ZXJicyBmb3IgQmFja3NwYWNlIGFuZCBFbnRlciAqLwotICAgIGZvciAodCA9IDA7IHQg PD0gVFRfTUFYOyB0KyspIHsKLSAgICAgICAgaWYgKCBJU0RHMjAwKHQpICYmIGtjID09IDI2NCkg ewotICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiB1ZGtma2V5c1tdIDsKLSAgICAgICAgICAgIGlm IChrYyA9PSAyNjQpIHsgICAgICAgICAgICAvKiBcS2RnYnMgKi8KLSAgICAgICAgICAgICAgICBp ZiAodWRrZmtleXNbODNdKQotICAgICAgICAgICAgICAgICAgZnJlZSh1ZGtma2V5c1s4M10pOwot ICAgICAgICAgICAgICAgIHVka2ZrZXlzWzgzXSA9IHN0cmR1cChzKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfSBlbHNlIGlmIChJU1dZU0UodCkgfHwgSVNUVkkodCkpIHsKLSAgICAgICAgICAg IGV4dGVybiBjaGFyICogdWRrZmtleXNbXSA7Ci0gICAgICAgICAgICBpZiAoa2MgPT0gMjY0KSB7 ICAgICAgICAgICAgLyogXEt3eWJzIG9yIFxLdHZpYnMgKi8KLSAgICAgICAgICAgICAgICBpZiAo dWRrZmtleXNbMzJdKQotICAgICAgICAgICAgICAgICAgZnJlZSh1ZGtma2V5c1szMl0pOwotICAg ICAgICAgICAgICAgIHVka2ZrZXlzWzMyXSA9IHN0cmR1cChzKTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGlmIChrYyA9PSAyNjkpIHsgICAgICAgICAgICAvKiBcS3d5ZW50ZXIgYW5kIFxL d3lyZXR1cm4gKi8KLSAgICAgICAgICAgICAgICBpZiAodWRrZmtleXNbMzldKSAgICAgICAvKiBc S3R2aWVudGVyIGFuZCBcS3R2aXJldHVybiAqLwotICAgICAgICAgICAgICAgICAgZnJlZSh1ZGtm a2V5c1szOV0pOwotICAgICAgICAgICAgICAgIHVka2ZrZXlzWzM5XSA9IHN0cmR1cChzKTsKLSAg ICAgICAgICAgICAgICBpZiAodWRrZmtleXNbNDldKQotICAgICAgICAgICAgICAgICAgZnJlZSh1 ZGtma2V5c1s0OV0pOwotICAgICAgICAgICAgICAgIHVka2ZrZXlzWzQ5XSA9IHN0cmR1cChzKTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3Ry bGVuKHMpKSB7ICAgICAgICAvKiBBY3Rpb24gZGVwZW5kcyBvbiBsZW5ndGggKi8KLSAgICAgICAg ICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBpbmRpdmlkdWFsIGtleSBk ZWYgKi8KLSAgICAgICAgICAgICAgICBkZWxldGVrZXltYXAodCxrYyk7Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBkZWZldnQu dHlwZSA9IGtleTsgICAgICAvKiBTaW5nbGUgY2hhcmFjdGVyICovCi0gICAgICAgICAgICAgICAg ZGVmZXZ0LmtleS5zY2FuY29kZSA9ICpzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBzdHJpbmcgKi8K LSNpZm5kZWYgTk9LVkVSQlMKLSAgICAgICAgICAgICAgICBpZiAocCkgewotICAgICAgICAgICAg ICAgICAgICB5ID0geGxvb2t1cChrdmVyYnMscCxua3ZlcmJzLCZ4KTsgLyogTG9vayBpdCB1cCAq LwotICAgICAgICAgICAgICAgICAgICAvKiBFeGFjdCBtYXRjaCByZXEnZCAqLwotICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzZXQga2V5IGt2ZXJiIGxvb2t1cCIsMCx5KTsKLSAgICAg ICAgICAgICAgICAgICAgaWYgKHkgPiAtMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVm ZXZ0LnR5cGUgPSBrdmVyYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmV2dC5rdmVyYi5p ZCA9IHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotICAgICAgICAg ICAgICAgIGRlZmV2dC50eXBlID0gbWFjcm87Ci0gICAgICAgICAgICAgICAgZGVmZXZ0Lm1hY3Jv LnN0cmluZyA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4ocykrMSk7Ci0gICAgICAgICAgICAgICAg aWYgKGRlZmV2dC5tYWNyby5zdHJpbmcpCi0gICAgICAgICAgICAgICAgICBzdHJjcHkoZGVmZXZ0 Lm1hY3JvLnN0cmluZywgcyk7IC8qIHNhZmUgKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGluc2VydGtleW1hcCggdCwga2MsIGRlZmV2dCApIDsK LSAgICAgICAgICAgIGluaXR2aWsgPSAxOyAgICAgICAgICAgICAgICAvKiBVcGRhdGUgVklLIHRh YmxlICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKDEpOwotfQotI2VuZGlmIC8qIE9T MiAqLwotCi0jaWZkZWYgTlQKLWludAotc2V0d2luOTUoIHZvaWQgKSB7Ci0gICAgaW50IHgsIHks IHo7Ci0KLSAgICBpZiAoKCB5ID0gY21rZXkod2luOTV0YWIsIG53aW45NSwKLSAgICAgICAgICAg ICAgICAgICAgIldpbmRvd3MgOTUgc3BlY2lmaWMgd29yay1hcm91bmRzIiwKLSAgICAgICAgICAg ICAgICAgICAgImtleWJvYXJkLXRyYW5zbGF0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgeHhz dHJpbmcpKSA8IDAgKQotICAgICAgICByZXR1cm4gKHkpOwotICAgIHN3aXRjaCAoeSkgewotICAg ICAgY2FzZSBYWVdQT1BVUDoKLSAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwicG9wdXBz IGFyZSB1c2VkIHRvIHByb21wdCB0aGUgdXNlciBmb3IgZGF0YSIsCi0gICAgICAgICAgICAgICAg ICAgICAgICJvbiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgd2luOTVfcG9wdXAg PSB5OwotICAgICAgICByZXR1cm4oMSk7Ci0KLSAgICAgIGNhc2UgWFlXOF8zOgotICAgICAgICBp ZiAoKHkgPSBjbWtleShvbm9mZiwyLCI4LjMgRkFUIGZpbGUgbmFtZXMiLCJvZmYiLHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIHdpbjk1XzhfMyA9IHk7Ci0gICAgICAgIHJldHVybigx KTsKLQotICAgICAgY2FzZSBYWVdTRUxFQ1Q6Ci0gICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2Zm LDIsIlwic2VsZWN0KClcIiBmYWlscyBvbiB3cml0ZSIsIm9mZiIsCi0gICAgICAgICAgICAgeHhz dHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgd2luOTVzZWxlY3RidWcgPSB5OwotICAgICAg ICByZXR1cm4oMSk7Ci0KLSAgICAgIGNhc2UgWFlXQUdSOgotICAgICAgICBpZiAoKHkgPSBjbWtl eShvbm9mZiwyLCJSaWdodC1BbHQgaXMgQWx0LUdyIiwib2ZmIix4eHN0cmluZykpIDwgMCkKLSAg ICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHgpOwotICAgICAgICB3aW45NWFsdGdyID0geTsKLSAgICAgICAgcmV0dXJuKDEpOwotCi0gICAg ICBjYXNlIFhZV09JTzoKLSAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiVXNlIE92ZXJs YXBwZWQgSS9PIiwib24iLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAg ICAgICAgaWYgKHkpIHsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtbnVtKCJNYXhpbXVtIG51bWJl ciBvZiBvdXRzdGFuZGluZyBJL08gcmVxdWVzdHMiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIjEwIiwxMCwmeix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwot ICAgICAgICAgICAgaWYgKHogPCAxIHx8IHogPiA3KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRm KAotIj9NYXhpbXVtIG91dHN0YW5kaW5nIEkvTyByZXF1ZXN0cyBtdXN0IGJlIGJldHdlZW4gMSBh bmQgNy5cbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0gZWxzZQotICAgICAgICAgIHogPSAxOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApIHJldHVybih4KTsKLSAgICAgICAgb3d3YWl0ID0gIXk7Ci0gICAgICAgIG1heG93ID0g bWF4b3dfdXNyID0gejsKLSAgICAgICAgcmV0dXJuKDEpOwotCi0gICAgICBjYXNlIFhZV0tFWToK LSNpZm5kZWYgQ09NTUVOVAotICAgICAgICBwcmludGYoIlxuP1wiS2V5Ym9hcmQtVHJhbnNsYXRp b25cIiBpcyBubyBsb25nZXIgcmVxdWlyZWQuXG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSNl bHNlIC8qIENPTU1FTlQgKi8KLSAgICAgICAgaWYgKCggeiA9IGNta2V5KHRjc3RhYiwgbnRjcywK LSAgICAgICAgICAgICAgICAgICAgICAgICJLZXlib2FyZCBDaGFyYWN0ZXIgU2V0IiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICJsYXRpbjEtaXNvIiwKLSAgICAgICAgICAgICAgICAgICAgICAg IHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybiAoeik7Ci0gICAgICAgIGlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0KLSAgICAgICAgd2luOTVrY3Np ID0gejsKLSAgICAgICAgd2luOTVrbDIgPSAod2luOTVrY3NpID09IFRDXzJMQVRJTik7Ci0KLSAg ICAgICAgaWYgKHdpbjk1a2NzaSA9PSBUQ19UUkFOU1ApIHsKLSAgICAgICAgICAgIHdpbjk1a2Nz ID0gTlVMTDsKLSAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBVTklDT0RFCi0gICAgICAgICAgICB3 aW45NWtjcyA9IHhsclt3aW45NWtjc2ldW3R4MmZjKHRjc2wpXTsKLSNlbHNlIC8qIFVOSUNPREUg Ki8KLSAgICAgICAgICAgIHdpbjk1a2NzID0geGxyW3dpbjk1a2NzaV1bdGNzbF07Ci0jZW5kaWYg LyogVU5JQ09ERSAqLwotICAgICAgICB9Ci0gICAgICAgIHJldHVybigxKTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLSAgICAgIGNhc2UgWFlXTFVDOgotICAgICAgICBpZiAoKHkgPSBjbWtleShv bm9mZiwyLCJVbmljb2RlLXRvLUx1Y2lkYS1Db25zb2xlIHN1YnN0aXR1dGlvbnMiLAotICAgICAg ICAgICAgICAgICAgICAgICAib24iLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5 KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIHdp bjk1bHVjaWRhID0geTsKLSAgICAgICAgcmV0dXJuKDEpOwotCi0gICAgICBjYXNlIFhZV0hTTDoK LQlpZiAoKHkgPSBjbWtleShvbm9mZiwyLCJIb3Jpem9udGFsIFNjYW4gTGluZSBzdWJzdGl0dXRp b25zIiwKLQkJICAgICAgICJvbiIseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeSk7Ci0JaWYg KCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0Jd2luOTVoc2wgPSB5OwotCXJldHVybigx KTsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRmKCJJbGxlZ2FsIHZhbHVlIGluIHNl dHdpbjk1KClcbiIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLX0KLSNlbmRpZiAvKiBO VCAqLwotCi0jaWZkZWYgT1MyCi1pbnQKLXNldHBydHkgKAotI2lmZGVmIENLX0FOU0lDCi0gICAg dm9pZAotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBzZXRwcnR5ICovICkgewotICAgIGludCB4 LCB5LCB6OwotCi0gICAgaWYgKCggeSA9IGNta2V5KHBydHl0YWIsIG5wcnR5LAotICAgICAgICAg ICAgICAgICAgICAicHJpb3JpdHkgbGV2ZWwgb2YgdGVybWluYWwgYW5kIGNvbW11bmljYXRpb24g dGhyZWFkcyIsCi0gICAgICAgICAgICAgICAgICAgICJmb3JlZ3JvdW5kLXNlcnZlciIsCi0gICAg ICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwICkKLSAgICAgIHJldHVybiAoeSk7Ci0KLSAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICByZXR1cm4gKHgpOwotI2lmZGVmIElLU0QK LSAgICBpZiAoaW5zZXJ2ZXIgJiYKLSNpZmRlZiBJS1NEQ09ORgotICAgICAgICAgaWtzZGNmCi0j ZWxzZQotICAgICAgICAgMQotI2VuZGlmIC8qIElLU0RDT05GICovCi0gICAgKSB7Ci0gICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBwcmludGYoIj9Tb3Jy eSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 Ci0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICBwcmlvcml0eSA9IHk7Ci0gICAgcmV0dXJu KFRSVUUpOwotfQotI2VuZGlmIC8qIE9TMiAqLwotCi1pbnQKLXNldGJlbGwoKSB7Ci0gICAgaW50 IHksIHg7Ci0jaWZkZWYgT1MyCi0gICAgaW50IHo7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICBp ZiAoKHkgPSBjbWtleShiZWx0YWIsbmJlbHRhYiwKLSNpZmRlZiBPUzIKLSAgICAgICAgImhvdyBj b25zb2xlIGFuZCB0ZXJtaW5hbCBiZWxscyBzaG91bGRcbmJlIGdlbmVyYXRlZCIsICJhdWRpYmxl IiwKLSNlbHNlCi0gICAgICAgICJXaGV0aGVyIEtlcm1pdCBzaG91bGQgcmluZyB0aGUgdGVybWlu YWwgYmVsbCAoYmVlcCkiLCAib24iLAotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAg ICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLQotI2lmZGVmIElLU0QK LSAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeSk7Ci0gICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsK LSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwot Ci0gICAgc3dpdGNoICh5KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEJFTEwgKi8K LSAgICAgIGNhc2UgWFlCX05PTkU6Ci0jaWZkZWYgT1MyCi0gICAgICBjYXNlIFhZQl9WSVM6Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAg ICByZXR1cm4oeCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIHR0X2JlbGwgPSB5OwotI2Vsc2UKLSAg ICAgICAgdHRfYmVsbCA9IDA7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIGJyZWFrOwotCi0g ICAgICBjYXNlIFhZQl9BVUQ6Ci0jaWZkZWYgT1MyCi0gICAgICAgIGlmICgoeCA9IGNta2V5KGF1 ZGlibGV0YWIsIG5hdWRpYmxldGFiLAotICAgICAgICAgICAgICAgImhvdyBhdWRpYmxlIGNvbnNv bGUgYW5kIHRlcm1pbmFsXG5iZWxscyBzaG91bGQgYmUgZ2VuZXJhdGVkIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgImJlZXAiLHh4c3RyaW5nKSk8MCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeik7Ci0gICAg ICAgIHR0X2JlbGwgPSB5IHwgeDsKLSNlbHNlCi0gICAgICAgIC8qIFRoaXMgbGV0cyBDLUtlcm1p dCBhY2NlcHQgYnV0IGlnbm9yZSB0cmFpbGluZyBLOTUga2V5d29yZHMgKi8KLSAgICAgICAgaWYg KCh4ID0gY210eHQoIkNvbmZpcm0gd2l0aCBjYXJyaWFnZSByZXR1cm4iLCIiLCZzLHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgdHRfYmVsbCA9IDE7Ci0jZW5k aWYgLyogT1MyICovCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4oMSk7Ci19Ci0K LSNpZmRlZiBPUzJNT1VTRQotaW50Ci1zZXRtb3UoCi0jaWZkZWYgQ0tfQU5TSUMKLSAgICAgICB2 b2lkCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSAvKiBzZXRtb3UgKi8gKSB7Ci0gICAgZXh0ZXJu IGludCBpbml0dmlrOwotICAgIGludCBidXR0b24gPSAwLCBldmVudCA9IDA7Ci0gICAgY2hhciAq IHA7Ci0KLSAgICBpZiAoKHkgPSBjbWtleShtb3VzZXRhYixubXRhYiwiIiwiIix4eHN0cmluZykp IDwgMCkKLSAgICAgIHJldHVybih5KTsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIp IHsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIHBy aW50ZigiP1NvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKLSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0gICAgaWYgKHkgPT0gWFlN X09OKSB7ICAgICAgICAgICAgICAgICAgLyogTU9VU0UgQUNUSVZBVElPTiAqLwotICAgICAgICBp bnQgb2xkX21vdSA9IHR0X21vdXNlOwotICAgICAgICBpZiAoKHggPSBzZXRvbigmdHRfbW91c2Up KSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICh0dF9tb3VzZSAhPSBv bGRfbW91KQotICAgICAgICAgIGlmICh0dF9tb3VzZSkKLSAgICAgICAgICAgIG9zMl9tb3VzZW9u KCk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3MyX21vdXNlb2ZmKCk7Ci0gICAgICAg IHJldHVybigxKTsKLSAgICB9Ci0KLSAgICBpZiAoeSA9PSBYWU1fREVCVUcpIHsgICAgICAgICAg ICAgICAvKiBNT1VTRSBERUJVRyAqLwotICAgICAgICBleHRlcm4gaW50IE1vdXNlRGVidWc7Ci0g ICAgICAgIGlmICgoeCA9IHNldG9uKCZNb3VzZURlYnVnKSkgPCAwKQotICAgICAgICAgICAgcmV0 dXJuKHgpOwotICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotCi0gICAgaWYgKHkgPT0gWFlNX0NM RUFSKSB7ICAgICAgICAgICAgICAgLyogUmVzZXQgTW91c2UgRGVmYXVsdHMgKi8KLSAgICAgICAg aWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIG1vdXNlbWFwaW5pdCgt MSwtMSk7Ci0gICAgICAgIGluaXR2aWsgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogVXBkYXRl IFZJSyBUYWJsZSAqLwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgaWYgKHkgIT0gWFlN X0JVVFRPTikgeyAgICAgICAgICAgICAgLyogU2hvdWxkbid0IGhhcHBlbi4gKi8KLSAgICAgICAg cHJpbnRmKCJJbnRlcm5hbCBwYXJzaW5nIGVycm9yXG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsK LSAgICB9Ci0KLSAgICAvKiBNT1VTRSBFVkVOVCAuLi4gKi8KLQotICAgIGlmICgoYnV0dG9uID0g Y21rZXkobW91c2VidXR0b250YWIsbm1idGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgIkJ1 dHRvbiBudW1iZXIiLCIxIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAw KQotICAgICAgcmV0dXJuKGJ1dHRvbik7Ci0KLSAgICBpZiAoKHkgPSAgY21rZXkobW91c2Vtb2R0 YWIsbm1tdGFiLAotICAgICAgICAgICAgICAgICAgICAiS2V5Ym9hcmQgbW9kaWZpZXIiLCJub25l IiwKLSAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oeSk7 Ci0KLSAgICBldmVudCB8PSB5OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPUiBpbiB0aGUg Yml0cyAqLwotCi0gICAgaWYgKCh5ID0gIGNta2V5KG1jbGlja3RhYixubWN0YWIsIiIsImNsaWNr Iix4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih5KTsKLQotICAgIC8qIFR3byBiaXRzIGFy ZSBhc3NpZ25lZCwgaWYgbmVpdGhlciBhcmUgc2V0IHRoZW4gaXQgaXMgYnV0dG9uIG9uZSAqLwot Ci0gICAgZXZlbnQgfD0geTsgICAgICAgICAgICAgICAgIC8qIE9SIGluIHRoZSBiaXQgKi8KLQot ICAgIHdpZGVyZXN1bHQgPSAtMTsKLQotICAgIGlmICgoeSA9IGNtdHh0KCJkZWZpbml0aW9uLFxu XAotb3IgQ3RybC1DIHRvIGNhbmNlbCB0aGlzIGNvbW1hbmQsXG5cCi1vciBFbnRlciB0byByZXN0 b3JlIGRlZmF1bHQgZGVmaW5pdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgIiIsJnMsTlVMTCkp IDwgMCkgewotICAgICAgICByZXR1cm4oeSk7Ci0gICAgfQotICAgIHMgPSBicnN0cmlwKHMpOwot ICAgIHAgPSBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgdGhpcyBwbGFj ZSAqLwotLyoKLSAgSWYgdGhlIGRlZmluaXRpb24gaW5jbHVkZWQgYW55IFxLdmVyYnMsIHF1b3Rl IHRoZSBiYWNrc2xhc2ggc28gdGhlIFxLdmVyYgotICB3aWxsIHN0aWxsIGJlIGluIHRoZSBkZWZp bml0aW9uIHdoZW4gdGhlIGtleSBpcyBwcmVzc2VkLiAgV2UgZG9uJ3QgZG8gdGhpcwotICBpbiB6 enN0cmluZygpLCBiZWNhdXNlIFxLdmVyYnMgYXJlIHZhbGlkIG9ubHkgaW4gdGhpcyBjb250ZXh0 IGFuZCBub3doZXJlCi0gIGVsc2UuICBUaGlzIGNvZGUgY29waWVkIGZyb20gU0VUIEtFWSwgcS52 LiBmb3IgYWRkdCdsIGNvbW1lbnRhcnkuCi0qLwotICAgIGZvciAoeCA9IDAsIHkgPSAwOyBzW3hd OyB4KyssIHkrKykgeyAvKiBDb252ZXJ0IFxLIHRvIFxcSyAqLwotICAgICAgICBpZiAoKHggPiAw KSAmJgotICAgICAgICAgICAgKHNbeF0gPT0gJ0snIHx8IHNbeF0gPT0gJ2snKQotICAgICAgICAg ICAgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhdmUgSyAqLwotCi0gICAgICAgICAg ICBpZiAoKHggPT0gMSAmJiBzW3gtMV0gPT0gQ01EUSkgfHwKLSAgICAgICAgICAgICAgICAoeCA+ IDEgJiYgc1t4LTFdID09IENNRFEgJiYgc1t4LTJdICE9IENNRFEpKSB7Ci0gICAgICAgICAgICAg ICAgbGluZVt5KytdID0gQ01EUTsgICAgICAgLyogTWFrZSBpdCBcXEsgKi8KLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGlmICh4ID4gMSAmJiBzW3gtMV0gPT0gJ3snICYmIHNbeC0yXSA9PSBD TURRKSB7Ci0gICAgICAgICAgICAgICAgbGluZVt5LTFdID0gQ01EUTsgICAgICAgLyogSGF2ZSBc e0sgKi8KLSAgICAgICAgICAgICAgICBsaW5lW3krK10gPSAneyc7ICAgICAgICAvKiBNYWtlIGl0 IFxce0sgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBsaW5lW3ldID0gc1t4 XTsKLSAgICB9Ci0gICAgbGluZVt5KytdID0gTlVMOyAgICAgICAgICAgICAgICAgICAgLyogVGVy bWluYXRlICovCi0gICAgcyA9IGxpbmUgKyB5ICsgMTsgICAgICAgICAgICAgICAgICAgLyogUG9p bnQgdG8gYWZ0ZXIgaXQgKi8KLSAgICB4ID0gTElOQlVGU0laIC0gKGludCkgc3RybGVuKGxpbmUp IC0gMTsgLyogQ2FsY3VsYXRlIHJlbWFpbmluZyBzcGFjZSAqLwotICAgIGlmICgoeCA8IChMSU5C VUZTSVogLyAyKSkgfHwKLSAgICAgICAgKHp6c3RyaW5nKGxpbmUsICZzLCAmeCkgPCAwKSkgeyAv KiBFeHBhbmQgdmFyaWFibGVzLCBldGMuICovCi0gICAgICAgIHByaW50ZigiP0tleSBkZWZpbml0 aW9uIHRvbyBsb25nXG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgcyA9IGxp bmUgKyB5ICsgMTsgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0LiAqLwotCi0j aWZuZGVmIE5PS1ZFUkJTCi0vKgotICBTcGVjaWFsIGNhc2U6IHNlZSBpZiB0aGUgZGVmaW5pdGlv biBzdGFydHMgd2l0aCBhIFxLdmVyYi4KLSAgSWYgaXQgZG9lcywgcG9pbnQgdG8gaXQgd2l0aCBw LCBvdGhlcndpc2Ugc2V0IHAgdG8gTlVMTC4KLSovCi0gICAgcCA9IHM7Ci0gICAgaWYgKCpwKysg PT0gQ01EUSkgewotICAgICAgICBpZiAoKnAgPT0gJ3snKSBwKys7Ci0gICAgICAgIHAgPSAoKnAg PT0gJ2snIHx8ICpwID09ICdLJykgPyBwICsgMSA6IE5VTEw7Ci0gICAgfQotI2Vsc2UKLSAgICBw ID0gTlVMTDsKLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotCi0gICAgLyogZnJlZSB0aGUgb2xkIGRl ZmluaXRpb24gaWYgbmVjZXNzYXJ5ICovCi0gICAgaWYgKG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRd LnR5cGUgPT0gbWFjcm8pIHsKLSAgICAgICAgZnJlZSggbW91c2VtYXBbYnV0dG9uXVtldmVudF0u bWFjcm8uc3RyaW5nKTsKLSAgICAgICAgbW91c2VtYXBbYnV0dG9uXVtldmVudF0ubWFjcm8uc3Ry aW5nID0gTlVMTDsKLSAgICB9Ci0gICAgc3dpdGNoIChzdHJsZW4ocykpIHsgICAgICAgICAgICAg ICAgLyogQWN0aW9uIGRlcGVuZHMgb24gbGVuZ3RoICovCi0gICAgICBjYXNlIDA6ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogUmVzZXQgdG8gZGVmYXVsdCBiaW5kaW5nICovCi0gICAgICAg IG1vdXNlbWFwaW5pdCggYnV0dG9uLCBldmVudCApOwotICAgICAgICBicmVhazsKLSAgICAgIGNh c2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaW5nbGUgY2hhcmFjdGVyICovCi0g ICAgICAgICAgICBtb3VzZW1hcFtidXR0b25dW2V2ZW50XS50eXBlID0ga2V5OwotICAgICAgICBt b3VzZW1hcFtidXR0b25dW2V2ZW50XS5rZXkuc2NhbmNvZGUgPSAqczsKLSAgICAgICAgYnJlYWs7 Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHN0 cmluZyAqLwotI2lmbmRlZiBOT0tWRVJCUwotICAgICAgICBpZiAocCkgewotICAgICAgICAgICAg eSA9IHhsb29rdXAoa3ZlcmJzLHAsbmt2ZXJicywmeCk7IC8qIExvb2sgaXQgdXAgKi8KLSAgICAg ICAgICAgIGRlYnVnKEYxMDEsInNldCBtb3VzZSBrdmVyYiBsb29rdXAiLDAseSk7IC8qIG5lZWQg ZXhhY3QgbWF0Y2ggKi8KLSAgICAgICAgICAgIGlmICh5ID4gLTEpIHsKLSAgICAgICAgICAgIC8q IEFzc2lnbiB0aGUga3ZlcmIgdG8gdGhlIGV2ZW50ICovCi0gICAgICAgICAgICBtb3VzZW1hcFti dXR0b25dW2V2ZW50XS50eXBlID0ga3ZlcmI7Ci0gICAgICAgICAgICBtb3VzZW1hcFtidXR0b25d W2V2ZW50XS5rdmVyYi5pZCA9IEZfS1ZFUkIgfCB5OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotCi0gICAgICAgLyog T3RoZXJ3aXNlLCBpdCdzIGEgbWFjcm8sIHNvIGFzc2lnbiB0aGUgbWFjcm8gdG8gdGhlIGV2ZW50 ICovCi0gICAgICAgbW91c2VtYXBbYnV0dG9uXVtldmVudF0udHlwZSA9IG1hY3JvOwotICAgICAg IG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLm1hY3JvLnN0cmluZyA9IChNQUNSTykgbWFsbG9jKHN0 cmxlbihzKSsxKTsKLSAgICAgICBpZiAobW91c2VtYXBbYnV0dG9uXVtldmVudF0ubWFjcm8uc3Ry aW5nKQotICAgICAgICAgc3RyY3B5KChjaGFyICopIG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLm1h Y3JvLnN0cmluZywgcyk7IC8qIHNhZmUgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlu aXR2aWsgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBWSUsgVGFibGUgKi8K LSAgICBpZiAoIChidXR0b24gPT0gWFlNX0IzKSAmJiAobW91c2VidXR0b25jb3VudCgpIDwgMykg JiYgIXF1aWV0ICkKLSAgICB7Ci0gICAgICAgIHByaW50ZigiP1dhcm5pbmc6IHRoaXMgbWFjaGlu ZSBkb2VzIG5vdCBoYXZlIGEgdGhyZWUgYnV0dG9uIG1vdXNlLlxuIik7Ci0gICAgICAgIHJldHVy bigwKTsKLSAgICB9Ci0gICAgcmV0dXJuKDEpOwotfQotI2VuZGlmIC8qIE9TMk1PVVNFICovCi0j ZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PWEZFUgotaW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBTRU5EL1JFQ0VJVkUgKi8KLXNldHNyKHh4LCBy bXNmbGcpIGludCB4eDsgaW50IHJtc2ZsZzsgewotICAgIGlmICh4eCA9PSBYWVJFQ1YpCi0gICAg ICBja3N0cm5jcHkobGluZSwiUGFyYW1ldGVyIGZvciBpbmJvdW5kIHBhY2tldHMiLExJTkJVRlNJ Wik7Ci0gICAgZWxzZQotICAgICAgY2tzdHJuY3B5KGxpbmUsIlBhcmFtZXRlciBmb3Igb3V0Ym91 bmQgcGFja2V0cyIsTElOQlVGU0laKTsKLQotICAgIGlmIChybXNmbGcpIHsKLSAgICAgICAgaWYg KCh5ID0gY21rZXkocnNydGFiLG5yc3J0YWIsbGluZSwiIix4eHN0cmluZykpIDwgMCkgewotICAg ICAgICAgICAgaWYgKHkgPT0gLTMpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9SZW1vdGUg cmVjZWl2ZSBwYXJhbWV0ZXIgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigt OSk7Ci0gICAgICAgICAgICB9IGVsc2UgcmV0dXJuKHkpOwotICAgICAgICB9Ci0gICAgfSBlbHNl IHsKLSAgICAgICAgaWYgKCh5ID0gY21rZXkoc3J0YWIsbnNydGFiLGxpbmUsIiIseHhzdHJpbmcp KSA8IDApIHJldHVybih5KTsKLSAgICB9Ci0gICAgc3dpdGNoICh5KSB7Ci0gICAgICBjYXNlIFhZ UUNUTDogICAgICAgICAgICAgICAgICAgICAgLyogQ09OVFJPTC1QUkVGSVggKi8KLSAgICAgICAg aWYgKCh4ID0gY21udW0oIkFTQ0lJIHZhbHVlIG9mIGNvbnRyb2wgcHJlZml4IiwiIiwxMCwmeSx4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHkgPiAzMiAmJiB5IDwgNjMpIHx8 ICh5ID4gOTUgJiYgeSA8IDEyNykpIHsKLSAgICAgICAgICAgIGlmICh4eCA9PSBYWVJFQ1YpCi0g ICAgICAgICAgICAgIGN0bHEgPSAoQ0hBUikgeTsgICAgICAgICAgLyogUkVDRUlWRSBwcmVmaXgs IHVzZSB3aXRoIGNhdXRpb24hICovCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIG15 Y3RscSA9IChDSEFSKSB5OyAgICAgICAgLyogU0VORCBwcmVmaXgsIE9LIHRvIGNoYW5nZSAqLwot ICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgIHByaW50ZigiP0lsbGVnYWwgdmFsdWUgZm9yIHByZWZpeCBjaGFyYWN0ZXJcbiIpOwot ICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIFhZRU9MOgot ICAgICAgICBpZiAoKHkgPSBzZXRjYygiMTMiLCZ6KSkgPCAwKQotICAgICAgICAgICAgcmV0dXJu KHkpOwotICAgICAgICBpZiAoeiA+IDMxKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNvcnJ5LCB0 aGUgbGVnYWwgdmFsdWVzIGFyZSAwLTMxXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0g ICAgICAgIH0KLSAgICAgICAgaWYgKHh4ID09IFhZUkVDVikKLSAgICAgICAgICBlb2wgPSAoQ0hB UikgejsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHNlb2wgPSAoQ0hBUikgejsKLSAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSB5KTsKLQotICAgICAgY2FzZSBYWUxFTjoKLSAgICAgICAgeSA9IGNt bnVtKCJNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGEgcGFja2V0IiwiOTAiLDEwLCZ4 LAotICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpOwotICAgICAgICBpZiAoeHggPT0gWFlSRUNW KSB7ICAgICAgICAgICAgIC8qIFJlY2VpdmUuLi4gKi8KLSAgICAgICAgICAgIGlmICgoeSA9IHNl dG51bSgmeix4LHksbWF4cnBzKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAg ICAgICAgICBpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgewotICAgICAgICAgICAgICAgIHByaW50 ZigiP1NvcnJ5LCB0aGlzIGNvbW1hbmQgZG9lcyBub3QgYXBwbHkgdG8gJXMgcHJvdG9jb2wuXG4i LAotICAgICAgICAgICAgICAgICAgICAgICBwdGFiW3Byb3RvY29sXS5wX25hbWUKLSAgICAgICAg ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIlVzZSBTRVQgU0VORCBQ QUNLRVQtTEVOR1RIIGZvciBYWVpNT0RFTVxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05 KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh6IDwgMTApIHsKLSAgICAgICAgICAg ICAgICBwcmludGYoIlNvcnJ5LCAxMCBpcyB0aGUgbWluaW11bVxuIik7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChybXNmbGcpIHsK LSAgICAgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiNDAxIiwgY2tpdG9hKHopLCAi Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LKSB7Ci0gICAg ICAgICAgICAgICAgICAgIGlmICh6ID4gTUFYUlApIHogPSBNQVhSUDsKLSAgICAgICAgICAgICAg ICAgICAgeSA9IGFkanBrbCh6LHdzbG90cixiaWdyYnNpeik7Ci0gICAgICAgICAgICAgICAgICAg IGlmICh5ICE9IHopIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVycHNpeiA9IHk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBpZiAoIXhjbWRzcmMpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChtc2dmbGcpIHByaW50ZigKLSIgQWRqdXN0aW5nIHJlY2VpdmUgcGFja2V0LWxlbmd0 aCB0byAlZCBmb3IgJWQgd2luZG93IHNsb3RzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeSwgd3Nsb3RyKTsKLSAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICB1cnBzaXogPSB5OwotICAgICAgICAgICAgICAgICAgICBwdGFi W3Byb3RvY29sXS5ycGt0bGVuID0gdXJwc2l6OwotICAgICAgICAgICAgICAgICAgICBycHNpeiA9 ICAoeSA+IDk0KSA/IDk0IDogeTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotI2lmZGVmIENL X1hZWgotICAgICAgICAgICAgICAgICAgICBpZiAoKHByb3RvY29sID09IFBST1RPX1ggfHwgcHJv dG9jb2wgPT0gUFJPVE9fWEMpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgeiAhPSAxMjgg JiYgeiAhPSAxMDI0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBi YWQgcGFja2V0IGxlbmd0aCBmb3IgWE1PREVNLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIlBsZWFzZSB1c2UgMTI4IG9yIDEwMjQuXG4iKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19Y WVogKi8KLSAgICAgICAgICAgICAgICAgICAgdXJwc2l6ID0gcnBzaXogPSB6OwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTZW5kLi4uICovCi0gICAgICAgICAgICBpZiAoKHkgPSBzZXRudW0oJnoseCx5 LG1heHNwcykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgaWYg KHogPCAxMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiU29ycnksIDEwIGlzIHRoZSBtaW5p bXVtXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0spIHsKLSAgICAgICAgICAgICAgICBpZiAo eiA+IE1BWFNQKSB6ID0gTUFYU1A7Ci0gICAgICAgICAgICAgICAgc3BzaXogPSB6OyAgICAgICAg ICAgICAgLyogU2V0IGl0ICovCi0gICAgICAgICAgICAgICAgeSA9IGFkanBrbChzcHNpeix3c2xv dHIsYmlnc2JzaXopOwotICAgICAgICAgICAgICAgIGlmICh5ICE9IHNwc2l6ICYmICF4Y21kc3Jj KQotICAgICAgICAgICAgICAgICAgaWYgKG1zZ2ZsZykKLSAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCJBZGp1c3RpbmcgcGFja2V0IHNpemUgdG8gJWQgZm9yICVkIHdpbmRvdyBzbG90c1xuIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHksd3Nsb3RyKTsKLSAgICAgICAgICAgIH0gZWxz ZQotICAgICAgICAgICAgICB5ID0gejsKLSNpZmRlZiBDS19YWVoKLSAgICAgICAgICAgIGlmICgo cHJvdG9jb2wgPT0gUFJPVE9fWCB8fCBwcm90b2NvbCA9PSBQUk9UT19YQykgJiYKLSAgICAgICAg ICAgICAgICAgeiAhPSAxMjggJiYgeiAhPSAxMDI0KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRm KCJTb3JyeSwgYmFkIHBhY2tldCBsZW5ndGggZm9yIFhNT0RFTS5cbiIpOwotICAgICAgICAgICAg ICAgIHByaW50ZigiUGxlYXNlIHVzZSAxMjggb3IgMTAyNC5cbiIpOwotICAgICAgICAgICAgICAg IHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0gICAgICAg ICAgICBzcHNpeiA9IHNwbWF4ID0gc3BzaXpyID0geTsgLyogU2V0IGl0IGFuZCBmbGFnIHRoYXQg aXQgd2FzIHNldCAqLwotICAgICAgICAgICAgc3BzaXpmID0gMTsgICAgICAgICAgICAgICAgIC8q IHRvIGFsbG93IG92ZXJyaWRpbmcgU2VuZC1Jbml0LiAqLwotICAgICAgICAgICAgcHRhYltwcm90 b2NvbF0uc3BrdGZsZyA9IHNwc2l6ZjsKLSAgICAgICAgICAgIHB0YWJbcHJvdG9jb2xdLnNwa3Rs ZW4gPSBzcHNpejsKLSAgICAgICAgfQotICAgICAgICBpZiAocGZsYWcgJiYgcHJvdG9jb2wgPT0g UFJPVE9fSyAmJiAheGNtZHNyYykgewotICAgICAgICAgICAgaWYgKHogPiA5NCAmJiAhcmVsaWFi bGUgJiYgbXNnZmxnKSB7Ci0gICAgICAgICAgICAgICAgLyogcHJpbnRmKCJFeHRlbmRlZC1sZW5n dGggcGFja2V0cyByZXF1ZXN0ZWQuXG4iKTsgKi8KLSAgICAgICAgICAgICAgICBpZiAoYmN0ciA8 IDIgJiYgeiA+IDIwMCkgcHJpbnRmKCJcCi1SZW1lbWJlciB0byBTRVQgQkxPQ0sgMiBvciAzIGZv ciBsb25nIHBhY2tldHMuXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzcGVl ZCA8PSAwTCkgc3BlZWQgPSB0dGdzcGQoKTsKLSNpZmRlZiBDT01NRU5UCi0vKgotICBLZXJtaXQg ZG9lcyB0aGlzIG5vdyBpdHNlbGYuCi0qLwotICAgICAgICAgICAgaWYgKHNwZWVkIDw9IDBMICYm IHogPiAyMDAgJiYgbXNnZmxnKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJcCi1NYWtlIHN1 cmUgeW91ciB0aW1lb3V0IGludGVydmFsIGlzIGxvbmcgZW5vdWdoIGZvciAlZC1ieXRlIHBhY2tl dHMuXG4iLHopOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAg fQotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHkpOwotCi0gICAgICBjYXNlIFhZTUFSSzoKLSNp ZmRlZiBET09NU0RBWQotLyoKLSAgUHJpbnRhYmxlIHN0YXJ0LW9mLXBhY2tldCB3b3JrcyBmb3Ig VU5JWCBhbmQgVk1TIG9ubHkhCi0qLwotICAgICAgICB4X2lmbnVtID0gMTsKLSAgICAgICAgeSA9 IGNtbnVtKCJDb2RlIGZvciBwYWNrZXQtc3RhcnQgY2hhcmFjdGVyIiwiMSIsMTAsJngseHhzdHJp bmcpOwotICAgICAgICB4X2lmbnVtID0gMDsKLSAgICAgICAgaWYgKCh5ID0gc2V0bnVtKCZ6LHgs eSwxMjYpKSA8IDApIHJldHVybih5KTsKLSNlbHNlCi0gICAgICAgIGlmICgoeSA9IHNldGNjKCIx IiwmeikpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih5KTsKLSNlbmRpZiAvKiBET09NU0RBWSAq LwotICAgICAgICBpZiAoeHggPT0gWFlSRUNWKQotICAgICAgICAgIHN0Y2hyID0gKENIQVIpIHo7 Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbXlzdGNoID0gKENIQVIpIHo7Ci0jaWZkZWYg SUtTX09QVElPTgotICAgICAgICAgICAgLyogSWYgSUtTIG5lZ290aWF0aW9uIGluIHVzZSAgICov Ci0gICAgICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkgfHwgVEVMT1BUX01FKFRF TE9QVF9LRVJNSVQpKQotICAgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9TT1ApOyAgICAgIC8q IFJlcG9ydCBjaGFuZ2UgdG8gb3RoZXIgc2lkZSAqLwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8K LSAgICAgICAgfQotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHkpOwotCi0gICAgICBjYXNlIFhZ TlBBRDogICAgICAgICAgICAgICAgICAgICAgLyogUEFERElORyAqLwotICAgICAgICB5ID0gY21u dW0oIkhvdyBtYW55IHBhZGRpbmcgY2hhcmFjdGVycyBmb3IgaW5ib3VuZCBwYWNrZXRzIiwiMCIs MTAsJngsCi0gICAgICAgICAgICAgICAgICB4eHN0cmluZyk7Ci0gICAgICAgIGlmICgoeSA9IHNl dG51bSgmeix4LHksOTQpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgaWYgKHh4ID09IFhZUkVD VikKLSAgICAgICAgICBteXBhZG4gPSAoQ0hBUikgejsKLSAgICAgICAgZWxzZQotICAgICAgICAg IG5wYWQgPSAoQ0hBUikgejsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSB5KTsKLQotICAgICAg Y2FzZSBYWVBBREM6ICAgICAgICAgICAgICAgICAgICAgIC8qIFBBRC1DSEFSQUNURVIgKi8KLSAg ICAgICAgaWYgKCh5ID0gc2V0Y2MoIjAiLCZ6KSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGlm ICh4eCA9PSBYWVJFQ1YpIG15cGFkYyA9IHo7IGVsc2UgcGFkY2ggPSB6OwotICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IHkpOwotCi0gICAgICBjYXNlIFhZVElNTzogICAgICAgICAgICAgICAgICAg ICAgLyogVElNRU9VVCAqLwotICAgICAgICBpZiAoeHggPT0gWFlSRUNWKSB7Ci0gICAgICAgICAg ICB5ID0gY21udW0oIlBhY2tldCB0aW1lb3V0IGludGVydmFsIixja2l0b2EoVVJUSU1FKSwxMCwm eCx4eHN0cmluZyk7Ci0gICAgICAgICAgICBpZiAoKHkgPSBzZXRudW0oJnoseCx5LDk0KSkgPCAw KSByZXR1cm4oeSk7Ci0KLSAgICAgICAgICAgIGlmIChybXNmbGcpIHsgICAgICAgICAgICAgICAv KiBSRU1PVEUgU0VUIFJFQ0VJVkUgVElNRU9VVCAqLwotICAgICAgICAgICAgICAgIHNzdGF0ZSA9 IHNldGdlbignUycsICI0MDIiLCBja2l0b2EoeiksICIiKTsKLSAgICAgICAgICAgICAgICByZXR1 cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAvKiBTRVQgUkVDRUlWRSBUSU1FT1VUICovCi0gICAgICAgICAgICAgICAgcGt0dGltID0gejsg ICAgICAgICAgICAgLyogICBWYWx1ZSB0byBwdXQgaW4gbXkgbmVnb3RpYXRpb24gKi8KLSAgICAg ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIHBhY2tldCBmb3Igb3RoZXIg S2VybWl0IHRvIHVzZSAqLwotCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogU0VUIFNFTkQgVElNRU9VVCAqLwotI2lmZGVmIENLX1RJTUVSUwotICAgICAgICAgICAg ZXh0ZXJuIGludCBydHRmbGcsIG1pbnRpbWUsIG1heHRpbWU7Ci0gICAgICAgICAgICBpbnQgdG1p biA9IDAsIHRtYXggPSAwOwotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotICAgICAgICAgICAgeSA9 IGNtbnVtKCJQYWNrZXQgdGltZW91dCBpbnRlcnZhbCIsY2tpdG9hKERNWVRJTSksMTAsJngseHhz dHJpbmcpOwotICAgICAgICAgICAgaWYgKHkgPT0gLTMpIHsgICAgICAgICAgICAgIC8qIFRoZXkg Y2FuY2VsbGVkIGEgcHJldmlvdXMgKi8KLSAgICAgICAgICAgICAgICB4ID0gRE1ZVElNOyAgICAg ICAgICAgICAvKiBTRVQgU0VORCBjb21tYW5kLCBzbyByZXN0b3JlICovCi0gICAgICAgICAgICAg ICAgdGltZWYgPSAwOyAgICAgICAgICAgICAgLyogYW5kIHR1cm4gb2ZmIHRoZSBvdmVycmlkZSBm bGFnICovCi0gICAgICAgICAgICAgICAgeSA9IGNtY2ZtKCk7Ci0gICAgICAgICAgICB9Ci0jaWZk ZWYgQ0tfVElNRVJTCi0gICAgICAgICAgICBpZiAoeSA8IDApIHJldHVybih5KTsKLSAgICAgICAg ICAgIGlmICh4IDwgMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP091dCBvZiByYW5nZSAt ICVkXG4iLHgpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBpZiAoKHogPSBjbWtleSh0aW1vdGFiLDIsIiIsImR5bmFtaWMiLHh4c3RyaW5n KSkgPCAwKSByZXR1cm4oeik7Ci0gICAgICAgICAgICBpZiAoeikgewotICAgICAgICAgICAgICAg IGlmICgoeSA9IGNtbnVtKCJNaW5pbXVtIHRpbWVvdXQgdG8gYWxsb3ciLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICIxIiwxMCwmdG1pbix4eHN0cmluZykpIDwgMCkKLSAgICAgICAg ICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICBpZiAodG1pbiA8IDEpIHsKLSAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/T3V0IG9mIHJhbmdlIC0gJWRcbiIsdG1pbik7Ci0g ICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJNYXhpbXVtIHRpbWVvdXQgdG8gYWxsb3ciLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiwxMCwmdG1heCx4eHN0cmluZykpIDwgMCkK LSAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICAvKiAwIG1lYW5z IGxldCBLZXJtaXQgY2hvb3NlLCA8IDAgbWVhbnMgbm8gbWF4aW11bSAqLwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgICAgICBydHRmbGcgPSB6OyAgICAgICAgICAgICAgICAgLyogUm91bmQt dHJpcCB0aW1lciBmbGFnICovCi0gICAgICAgICAgICB6ID0geDsKLSNlbHNlCi0gICAgICAgICAg ICBpZiAoKHkgPSBzZXRudW0oJnoseCx5LDk0KSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4o eSk7Ci0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0gICAgICAgICAgICB0aW1lZiA9IDE7ICAgICAg ICAgICAgICAgICAgLyogVHVybiBvbiB0aGUgb3ZlcnJpZGUgZmxhZyAqLwotICAgICAgICAgICAg dGltaW50ID0gcnRpbW8gPSB6OyAgICAgICAgIC8qIE92ZXJyaWRlIHZhbHVlIGZvciBtZSB0byB1 c2UgKi8KLSNpZmRlZiBDS19USU1FUlMKLSAgICAgICAgICAgIGlmIChydHRmbGcpIHsgICAgICAg ICAgICAgICAvKiBMb3dlciBhbmQgdXBwZXIgYm91bmRzICovCi0gICAgICAgICAgICAgICAgbWlu dGltZSA9IHRtaW47Ci0gICAgICAgICAgICAgICAgbWF4dGltZSA9IHRtYXg7Ci0gICAgICAgICAg ICB9Ci0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKLQotICAgICAgY2FzZSBYWUZQQVRIOiAgICAgICAgICAgICAgICAgICAgIC8q IFBBVEhOQU1FUyAqLwotICAgICAgICBpZiAoeHggPT0gWFlSRUNWKSB7Ci0gICAgICAgICAgICB5 ID0gY21rZXkocnBhdGh0YWIsbnJwYXRodGFiLCIiLCJhdXRvIix4eHN0cmluZyk7Ci0gICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICB5ID0gY21rZXkocGF0aHRhYixucGF0aHRhYiwiIiwib2Zm Iix4eHN0cmluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHkgPCAwKSByZXR1cm4oeSk7Ci0K LSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmICh4 eCA9PSBYWVJFQ1YpIHsgICAgICAgICAgICAgLyogU0VUIFJFQ0VJVkUgUEFUSE5BTUVTICovCi0g ICAgICAgICAgICBmbnJwYXRoID0geTsKLSAgICAgICAgICAgIHB0YWJbcHJvdG9jb2xdLmZucnAg PSBmbnJwYXRoOwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNF VCBTRU5EIFBBVEhOQU1FUyAqLwotICAgICAgICAgICAgZm5zcGF0aCA9IHk7Ci0gICAgICAgICAg ICBwdGFiW3Byb3RvY29sXS5mbnNwID0gZm5zcGF0aDsKLSAgICAgICAgfQotICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOyAgICAgICAgICAgIC8qIE5vdGU6IDAgPSBPTiwgMSA9IE9GRiAqLwot ICAgICAgICAvKiBJbiBvdGhlciB3b3JkcywgT04gPSBsZWF2ZSBwYXRobmFtZXMgT04sIE9GRiA9 IHRha2UgdGhlbSBvZmYuICovCi0KLSAgICAgIGNhc2UgWFlQQVVTOiAgICAgICAgICAgICAgICAg ICAgICAvKiBTRVQgU0VORC9SRUNFSVZFIFBBVVNFICovCi0gICAgICAgIHkgPSBjbW51bSgiTWls bGlzZWNvbmRzIHRvIHBhdXNlIGJldHdlZW4gcGFja2V0cyIsIjAiLDEwLCZ4LHh4c3RyaW5nKTsK LSAgICAgICAgaWYgKCh5ID0gc2V0bnVtKCZ6LHgseSwxNTAwMCkpIDwgMCkKLSAgICAgICAgICBy ZXR1cm4oeSk7Ci0gICAgICAgIHBrdHBhdXMgPSB6OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwotCi0jaWZkZWYgQ0tYWENIQVIgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFNF TkQvUkVDRUlWRSBJR05PUkUvRE9VQkxFICovCi0gICAgICBjYXNlIFhZSUdOOgotICAgICAgY2Fz ZSBYWURCTDogewotICAgICAgICAgIGludCBpLCB6ejsKLSAgICAgICAgICBzaG9ydCAqcDsKLSAg ICAgICAgICBleHRlcm4gc2hvcnQgZGJsdFtdOwotICAgICAgICAgIGV4dGVybiBpbnQgZGJsZmxh ZywgaWduZmxhZzsKLQotICAgICAgICAgIC8qIE1ha2Ugc3BhY2UgZm9yIGEgdGVtcG9yYXJ5IGNv cHkgb2YgdGhlIGlnbm9yZS9kb3VibGUgdGFibGUgKi8KLQotICAgICAgICAgIHp6ID0geTsKLSNp ZmRlZiBDT01NRU5UCi0gICAgICAgICAgaWYgKHp6ID09IFhZSUdOICYmIHh4ID09IFhZU0VORCkg ewotICAgICAgICAgICAgICBibGFoIGJsYWggd2hvIGNhcmVzCi0gICAgICAgICAgfQotICAgICAg ICAgIGlmICh6eiA9PSBYWURCTCAmJiB4eCA9PSBYWVJFQ1YpIHsKLSAgICAgICAgICAgICAgYmxh aCBibGFoCi0gICAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICBwID0g KHNob3J0ICopbWFsbG9jKDI1NiAqIHNpemVvZihzaG9ydCkpOwotICAgICAgICAgIGlmICghcCkg ewotICAgICAgICAgICAgICBwcmludGYoIj9JbnRlcm5hbCBlcnJvciAtIG1hbGxvYyBmYWlsdXJl XG4iKTsKLSAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAg Zm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSBwW2ldID0gZGJsdFtpXTsgLyogQ29weSBjdXJyZW50 IHRhYmxlICovCi0KLSAgICAgICAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgICAvKiBD b2xsZWN0IGEgbGlzdCBvZiBudW1iZXJzICovCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICAg IHhfaWZudW0gPSAxOyAgICAgICAgICAgICAgLyogVHVybiBvZmYgY29tcGxhaW50cyBmcm9tIGV2 YWwoKSAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgICAgIGlmICgoeCA9IGNtbnVt KHp6ID09IFhZREJMID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoYXJhY3RlciB0 byBkb3VibGUiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoYXJhY3RlciB0byBp Z25vcmUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwxMCwmeSx4eHN0cmluZwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSA8IDApIHsKLSNpZm5kZWYgTk9TUEwKLSAg ICAgICAgICAgICAgICAgIHhfaWZudW0gPSAwOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAg ICAgICAgICAgICBpZiAoeCA9PSAtMykgICAgICAgICAgLyogRG9uZSAqLwotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGlmICh4ID09IC0yKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgaWYgKHApIHsgZnJlZShwKTsgcCA9IE5VTEw7IH0KLSAgICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJTRVQgUy9SIERPVUJMRS9JR05PUkUgYXRtYnVmIixhdG1i dWYsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcChhdG1idWYsIm5vbmUi LDQsMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIWNrc3RyY21wKGF0bWJ1Ziwibm9u IiwzLDApIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICFja3N0cmNtcChhdG1idWYsIm5v IiwyLDApIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICFja3N0cmNtcChhdG1idWYsIm4i LDEsMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAw KSAvKiBHZXQgY29uZmlybWF0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMjU2OyB5 KyspCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJsdFt5XSAmPSAoenogPT0gWFlEQkwp ID8gMSA6IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6eiA9PSBYWURCTCkgZGJs ZmxhZyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6eiA9PSBYWUlHTikgaWdu ZmxhZyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 Ci0gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICI/UGxlYXNlIHNwZWNpZnkg YSBudW1iZXIgb3IgdGhlIHdvcmQgTk9ORVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICBmcmVlKHApOwotICAgICAgICAgICAgICAg ICAgICAgIHAgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotI2lmbmRlZiBOT1NQTAotICAgICAgICAg ICAgICB4X2lmbnVtID0gMDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgICAgICBpZiAo eSA8IDAgfHwgeSA+IDI1NSkgewotICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/UGxlYXNlIGVu dGVyIGEgY2hhcmFjdGVyIGNvZGUgaW4gcmFuZ2UgMC0yNTVcbiIpOwotICAgICAgICAgICAgICAg ICAgZnJlZShwKTsKLSAgICAgICAgICAgICAgICAgIHAgPSBOVUxMOwotICAgICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBwW3ldIHw9ICh6 eiA9PSBYWURCTCkgPyAyIDogMTsKLSAgICAgICAgICAgICAgaWYgKHp6ID09IFhZREJMKSBkYmxm bGFnID0gMTsKLSAgICAgICAgICAgICAgaWYgKHp6ID09IFhZSUdOKSBpZ25mbGFnID0gMTsKLSAg ICAgICAgICB9IC8qIEVuZCBvZiB3aGlsZSBsb29wICovCi0KLSAgICAgICAgICBpZiAoKHggPSBj bWNmbSgpKSA8IDApIHJldHVybih4KTsKLS8qCi0gIEdldCBoZXJlIG9ubHkgaWYgdGhleSBoYXZl IG1hZGUgbm8gbWlzdGFrZXMuICBDb3B5IHRlbXBvcmFyeSB0YWJsZSBiYWNrIHRvCi0gIHBlcm1h bmVudCBvbmUsIHRoZW4gZnJlZSB0ZW1wb3JhcnkgdGFibGUgYW5kIHJldHVybiBzdWNjZXNzZnVs bHkuCi0qLwotICAgICAgICAgIGlmIChwKSB7Ci0gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg PCAyNTY7IGkrKykgZGJsdFtpXSA9IHBbaV07Ci0gICAgICAgICAgICAgIGZyZWUocCk7Ci0gICAg ICAgICAgICAgIHAgPSBOVUxMOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOwotICAgICAgfQotI2VuZGlmIC8qIENLWFhDSEFSICovCi0KLSNpZmRlZiBQSVBFU0VO RAotICAgICAgY2FzZSBYWUZMVFI6IHsgICAgICAgICAgICAgICAgICAgIC8qIFNFVCB7IFNFTkQs IFJFQ0VJVkUgfSBGSUxURVIgKi8KLSAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgoeHggPT0gWFlT RU5EKSA/Ci0gICAgICAgICAgICAgICAgIkZpbHRlciBwcm9ncmFtIGZvciBzZW5kaW5nIGZpbGVz IC1cblwKLSB1c2UgXFx2KGZpbGVuYW1lKSB0byBzdWJzdGl0dXRlIGZpbGVuYW1lIiA6Ci0gICAg ICAgICAgICAgICAgIkZpbHRlciBwcm9ncmFtIGZvciByZWNlaXZpbmcgZmlsZXMgLVxuXAotIHVz ZSBcXHYoZmlsZW5hbWUpIHRvIHN1YnN0aXR1dGUgZmlsZW5hbWUiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICIiLCZzLE5VTEwpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAg ICAgICAgaWYgKCEqcykgeyAgICAgICAgICAgICAgICAgICAgLyogUmVtb3ZpbmcgYSBmaWx0ZXIu Li4gKi8KLSAgICAgICAgICAgICAgaWYgKHh4ID09IFhZU0VORCAmJiBzbmRmaWx0ZXIpIHsKLSAg ICAgICAgICAgICAgICAgIG1ha2VzdHIoJmdfc2ZpbHRlcixOVUxMKTsKLSAgICAgICAgICAgICAg ICAgIG1ha2VzdHIoJnNuZGZpbHRlcixOVUxMKTsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChy Y3ZmaWx0ZXIpIHsKLSAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmdfcmZpbHRlcixOVUxMKTsK LSAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnJjdmZpbHRlcixOVUxMKTsKLSAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFkZGluZyBhIGZpbHRlci4uLiAqLwotICAgICAg ICAgIHMgPSBicnN0cmlwKHMpOyAgICAgICAgICAgICAgIC8qIFN0cmlwIGFueSBicmFjZXMgKi8K LSAgICAgICAgICB5ID0gc3RybGVuKHMpOwotICAgICAgICAgIGlmICh4eCA9PSBYWVNFTkQpIHsg ICAgICAgICAgIC8qIEZvciBTRU5EIGZpbHRlci4uLiAqLwotICAgICAgICAgICAgICBmb3IgKHgg PSAwOyB4IDwgeTsgeCsrKSB7IC8qIG1ha2Ugc3VyZSB0aGV5IGluY2x1ZGVkICJcdiguLi4pIiAq LwotICAgICAgICAgICAgICAgICAgaWYgKHNbeF0gIT0gJ1xcJykgY29udGludWU7Ci0gICAgICAg ICAgICAgICAgICBpZiAoc1t4KzFdID09ICd2JykgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgaWYgKHggPT0geSkgewotICAgICAgICAgICAgICAgICAgcHJpbnRmKAotICAg ICAgICAgICAgICAiP0ZpbHRlciBtdXN0IGNvbnRhaW4gYSByZXBsYWNlbWVudCB2YXJpYWJsZSBm b3IgZmlsZW5hbWUuXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg ICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAg ICAgaWYgKHh4ID09IFhZU0VORCkgewotICAgICAgICAgICAgICBtYWtlc3RyKCZzbmRmaWx0ZXIs cyk7Ci0gICAgICAgICAgICAgIG1ha2VzdHIoJmdfc2ZpbHRlcixzKTsKLSAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICBtYWtlc3RyKCZyY3ZmaWx0ZXIscyk7Ci0gICAgICAgICAgICAg IG1ha2VzdHIoJmdfcmZpbHRlcixzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCi0gICAgICBjYXNl IFhZSU5JTDoKLSAgICAgICAgeSA9IGNtbnVtKCJNYXggbGVuZ3RoIGZvciBwcm90b2NvbCBpbml0 IHN0cmluZyIsIi0xIiwxMCwmeCx4eHN0cmluZyk7Ci0gICAgICAgIGlmICgoeSA9IHNldG51bSgm eix4LHksLTEpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBpZiAoeHggPT0g WFlTRU5EKQotICAgICAgICAgIHNwcm1sZW4gPSB6OwotICAgICAgICBlbHNlCi0gICAgICAgICAg cnBybWxlbiA9IHo7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGNhc2Ug OTkzOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCBzZW5kaXBrdHM7Ci0gICAgICAgICAgaWYgKHh4 ID09IFhZU0VORCkgewotICAgICAgICAgICAgICBpZiAoKHggPSBzZXRvbigmc2VuZGlwa3RzKSkg PCAwKQotICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAg cmV0dXJuKDEpOwotICAgICAgfQotI2lmZGVmIENLX1BFUk1TCi0gICAgICBjYXNlIDk5NDoKLQlz d2l0Y2goeHgpIHsKLQkgIGNhc2UgWFlTRU5EOgotCSAgICBpZiAoKHggPSBzZXRvbigmYXRscHJv KSkgPCAwKSByZXR1cm4oeCk7Ci0JICAgIGF0Z3BybyA9IGF0bHBybzsKLQkgICAgcmV0dXJuKDEp OwotCSAgY2FzZSBYWVJFQ1Y6Ci0JICAgIGlmICgoeCA9IHNldG9uKCZhdGxwcmkpKSA8IDApIHJl dHVybih4KTsKLQkgICAgYXRncHJpID0gYXRscHJpOwotCSAgICByZXR1cm4oMSk7Ci0JICBkZWZh dWx0OgotCSAgICByZXR1cm4oLTIpOwotCX0KLSNlbmRpZiAvKiBDS19QRVJNUyAqLwotCi0jaWZu ZGVmIE5PQ1NFVFMKLSAgICAgIGNhc2UgWFlDU0VUOiB7ICAgICAgICAgICAgICAgICAgICAvKiBD SEFSQUNURVItU0VULVNFTEVDVElPTiAqLwotICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFi IHhmcm10YWJbXTsKLSAgICAgICAgICBleHRlcm4gaW50IHJfY3NldCwgc19jc2V0OwotICAgICAg ICAgIGlmICgoeSA9IGNta2V5KHhmcm10YWIsMiwiIiwiYXV0b21hdGljIix4eHN0cmluZykpIDwg MCkKLSAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8 IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgaWYgKHh4ID09IFhZU0VORCkK LSAgICAgICAgICAgIHNfY3NldCA9IHk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcl9j c2V0ID0geTsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotI2VuZGlm IC8qIE5PQ1NFVFMgKi8KLQotICAgICAgY2FzZSBYWUJVUDoKLSAgICAgICAgaWYgKCh5ID0gY21r ZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsK LSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmICh4 eCA9PSBYWVNFTkQpIHsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgc2tpcGJ1cDsKLSAgICAgICAg ICAgIHNraXBidXAgPSAoeSA9PSAwKSA/IDEgOiAwOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZigKLSI/UGxlYXNl IHVzZSBTRVQgRklMRSBDT0xMSVNJT04gdG8gY2hvb3NlIHRoZSBkZXNpcmVkIGFjdGlvblxuIik7 Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgWFlNT1ZF OgotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgeSA9IGNtZGlyKCJEaXJlY3RvcnkgdG8gbW92ZSBm aWxlKHMpIHRvIGFmdGVyIHN1Y2Nlc3NmdWwgdHJhbnNmZXIiLAotICAgICAgICAgICAgICAgICAg IiIsJnMseHhzdHJpbmcpOwotI2Vsc2UKLSAgICAgICAgeSA9IGNtdHh0KCJEaXJlY3RvcnkgdG8g bW92ZSBmaWxlKHMpIHRvIGFmdGVyIHN1Y2Nlc3NmdWwgdHJhbnNmZXIiLAotCQkgICIiLCZzLHh4 c3RyaW5nKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgICAgaWYgKHkgPCAwICYmIHkg IT0gLTMpCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBja3N0cm5jcHkobGluZSxzLExJ TkJVRlNJWik7Ci0gICAgICAgIHMgPSBicnN0cmlwKGxpbmUpOwotCi0jaWZkZWYgQ09NTUVOVAot CS8qIE9ubHkgbmVlZGVkIGZvciBjbWRpcigpICovCi0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQotCS8q IENoZWNrIGRpcmVjdG9yeSBleGlzdGVuY2UgaWYgYWJzb2x1dGUgKi8KLQkvKiBUSElTIE1FQU5T IElUIENBTidUIElOQ0xVREUgQU5ZIERFRkVSUkVEIFZBUklBQkxFUyEgKi8KLQlpZiAocykgaWYg KCpzKSB7Ci0JICAgIGlmIChpc2Fic29sdXRlKHMpICYmICFpc2RpcihzKSkgewotCQlwcmludGYo Ij9EaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgLSAlc1xuIixzKTsKLQkJcmV0dXJuKC05KTsKLQkg ICAgfQotCX0KLSAgICAgICAgaWYgKHh4ID09IFhZU0VORCkgewotICAgICAgICAgICAgaWYgKCpz KSB7Ci0jaWZkZWYgQ09NTUVOVAotCQkvKiBBbGxvdyBpdCB0byBiZSByZWxhdGl2ZSAqLwotICAg ICAgICAgICAgICAgIHpmbnFmcChzLExJTkJVRlNJWixsaW5lKTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgICAgICAgICAgbWFrZXN0cigmc25kX21vdmUsbGluZSk7Ci0gICAgICAgICAg ICAgICAgbWFrZXN0cigmZ19zbmRfbW92ZSxsaW5lKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgbWFrZXN0cigmc25kX21vdmUsTlVMTCk7Ci0gICAgICAgICAgICAgICAg bWFrZXN0cigmZ19zbmRfbW92ZSxOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgIGlmICgqcykgewotI2lmZGVmIENPTU1FTlQKLQkJLyogQWxsb3cgaXQg dG8gYmUgcmVsYXRpdmUgKi8KLSAgICAgICAgICAgICAgICB6Zm5xZnAocyxMSU5CVUZTSVosbGlu ZSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgIG1ha2VzdHIoJnJjdl9t b3ZlLGxpbmUpOwotICAgICAgICAgICAgICAgIG1ha2VzdHIoJmdfcmN2X21vdmUsbGluZSk7Ci0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1ha2VzdHIoJnJjdl9tb3ZlLE5V TEwpOwotICAgICAgICAgICAgICAgIG1ha2VzdHIoJmdfcmN2X21vdmUsTlVMTCk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAg Y2FzZSBYWVJFTkFNRToKLSAgICAgICAgeSA9IGNtdHh0KCJUZW1wbGF0ZSB0byByZW5hbWUgZmls ZShzKSB0byBhZnRlciBzdWNjZXNzZnVsIHRyYW5zZmVyIiwKLSAgICAgICAgICAgICAgICAgICIi LCZzLE5VTEwpOwkJLyogTk9URTogbm8geHhzdHJpbmcgKi8KLSAgICAgICAgaWYgKHkgPCAwICYm IHkgIT0gLTMpCQkvKiBFdmFsdWF0aW9uIGlzIGRlZmVycmVkICovCi0gICAgICAgICAgcmV0dXJu KHkpOwotICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgICAgIHMgPSBi cnN0cmlwKGxpbmUpOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAg cmV0dXJuKHgpOwotICAgICAgICBpZiAoeHggPT0gWFlTRU5EKSB7Ci0gICAgICAgICAgICBpZiAo KnMpIHsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZzbmRfcmVuYW1lLHMpOwotICAgICAgICAg ICAgICAgIG1ha2VzdHIoJmdfc25kX3JlbmFtZSxzKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgbWFrZXN0cigmc25kX3JlbmFtZSxOVUxMKTsKLSAgICAgICAgICAgICAg ICBtYWtlc3RyKCZnX3NuZF9yZW5hbWUsTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKnMpIHsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZy Y3ZfcmVuYW1lLHMpOwotICAgICAgICAgICAgICAgIG1ha2VzdHIoJmdfcmN2X3JlbmFtZSxzKTsK LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigmcmN2X3JlbmFt ZSxOVUxMKTsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZnX3Jjdl9yZW5hbWUsTlVMTCk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQot I2lmZGVmIFZNUwotICAgICAgY2FzZSA4ODc6CQkJCS8qIFZFUlNJT04tTlVNQkVSUyAqLwotICAg ICAgICBpZiAoeHggPT0gWFlTRU5EKSB7Ci0gICAgICAgICAgICBleHRlcm4gaW50IHZtc3N2ZXJz aW9uczsKLSAgICAgICAgICAgIHJldHVybihzZXRvbigmdm1zc3ZlcnNpb25zKSk7Ci0gICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICBleHRlcm4gaW50IHZtc3J2ZXJzaW9uczsKLSAgICAgICAg ICAgIHJldHVybihzZXRvbigmdm1zcnZlcnNpb25zKSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBW TVMgKi8KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU0VUIFNFTkQvUkVDRUlWRS4u LiAqLwotfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PWE1JVAotaW50Ci1zZXR4 bWl0KCkgewotICAgIGlmICgoeSA9IGNta2V5KHhtaXRhYixueG1pdCwiIiwiIix4eHN0cmluZykp IDwgMCkgcmV0dXJuKHkpOwotICAgIHN3aXRjaCAoeSkgewotICAgICAgY2FzZSBYTUlURTogICAg ICAgICAgICAgICAgICAgICAgIC8qIEVPRiAqLwotICAgICAgICB5ID0gY210eHQoIkNoYXJhY3Rl cnMgdG8gc2VuZCBhdCBlbmQgb2YgZmlsZSxcblwKLSBVc2UgYmFja3NsYXNoIGNvZGVzIGZvciBj b250cm9sIGNoYXJhY3RlcnMiLCIiLCZzLHh4c3RyaW5nKTsKLSAgICAgICAgaWYgKHkgPCAwKSBy ZXR1cm4oeSk7Ci0gICAgICAgIGlmICgoaW50KXN0cmxlbihzKSA+IFhNQlVGTCkgewotICAgICAg ICAgICAgcHJpbnRmKCI/VG9vIG1hbnkgY2hhcmFjdGVycywgJWQgbWF4aW11bVxuIixYTUJVRkwp OwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jcHko eG1pdGJ1ZixzLFhNQlVGTCk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAg IGNhc2UgWE1JVEY6ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxsICovCi0gICAgICAgIHkg PSBjbW51bSgiTnVtZXJpYyBjb2RlIGZvciBibGFuay1saW5lIGZpbGwgY2hhcmFjdGVyIiwiMCIs MTAsJngsCi0gICAgICAgICAgICAgICAgICB4eHN0cmluZyk7Ci0gICAgICAgIGlmICgoeSA9IHNl dG51bSgmeix4LHksMTI3KSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIHhtaXRmID0gejsKLSAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIGNhc2UgWE1JVEw6ICAgICAgICAgICAg ICAgICAgICAgICAvKiBMaW5lZmVlZCAqLwotICAgICAgICByZXR1cm4oc2V0b24oJnhtaXRsKSk7 Ci0gICAgICBjYXNlIFhNSVRTOiAgICAgICAgICAgICAgICAgICAgICAgLyogTG9ja2luZy1TaGlm dCAqLwotICAgICAgICByZXR1cm4oc2V0b24oJnhtaXRzKSk7Ci0gICAgICBjYXNlIFhNSVRQOiAg ICAgICAgICAgICAgICAgICAgICAgLyogUHJvbXB0ICovCi0gICAgICAgIHkgPSBjbW51bSgiTnVt ZXJpYyBjb2RlIGZvciBob3N0J3MgcHJvbXB0IGNoYXJhY3RlciwgMCBmb3Igbm9uZSIsCi0gICAg ICAgICAgICAgICAgICAiMTAiLDEwLCZ4LHh4c3RyaW5nKTsKLSAgICAgICAgaWYgKCh5ID0gc2V0 bnVtKCZ6LHgseSwxMjcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgeG1pdHAgPSB6OwotICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgY2FzZSBYTUlUWDogICAgICAgICAgICAg ICAgICAgICAgIC8qIEVjaG8gKi8KLSAgICAgICAgcmV0dXJuKHNldG9uKCZ4bWl0eCkpOwotICAg ICAgY2FzZSBYTUlUVzogICAgICAgICAgICAgICAgICAgICAgIC8qIFBhdXNlICovCi0gICAgICAg IHkgPSBjbW51bSgiTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBwYXVzZSBiZXR3ZWVuIGJpbmFy eSBjaGFyYWN0ZXJzXG5cCi1vciB0ZXh0IGxpbmVzIGR1cmluZyB0cmFuc21pc3Npb24iLCIwIiwx MCwmeCx4eHN0cmluZyk7Ci0gICAgICAgIGlmICgoeSA9IHNldG51bSgmeix4LHksMTAwMCkpIDwg MCkgcmV0dXJuKHkpOwotICAgICAgICB4bWl0dyA9IHo7Ci0gICAgICAgIHJldHVybihzdWNjZXNz ID0gMSk7Ci0gICAgICBjYXNlIFhNSVRUOiAgICAgICAgICAgICAgICAgICAgICAgLyogVGltZW91 dCAqLwotICAgICAgICB5ID0gY21udW0oIlNlY29uZHMgdG8gd2FpdCBmb3IgZWFjaCBjaGFyYWN0 ZXIgdG8gZWNobyIsCi0gICAgICAgICAgICAgICAgICAiMSIsMTAsJngseHhzdHJpbmcpOwotICAg ICAgICBpZiAoKHkgPSBzZXRudW0oJnoseCx5LDEwMDApKSA8IDApIHJldHVybih5KTsKLSAgICAg ICAgeG1pdHQgPSB6OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgZGVmYXVs dDoKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogTk9YTUlUICovCi0K LSNpZm5kZWYgTk9YRkVSCi0vKiAgRCBPIFIgTSBUICAtLSAgRG8gYSByZW1vdGUgY29tbWFuZCAg Ki8KLQotVk9JRAotcm1zZygpIHsKLSAgICBpZiAocGZsYWcgJiYgIXF1aWV0ICYmIGZkaXNwbGEg IT0gWFlGRF9OKQotICAgICAgcHJpbnRmKAotI2lmZGVmIENLX05FRURfU0lHCi0gICAgICAgIiBU eXBlIHlvdXIgZXNjYXBlIGNoYXJhY3RlciwgJXMsIGZvbGxvd2VkIGJ5IFggb3IgRSB0byBjYW5j ZWwuXG4iLAotICAgICAgIGRiY2hyKGVzY2FwZSkKLSNlbHNlCi0gICAgICAgIiBQcmVzcyB0aGUg WCBvciBFIGtleSB0byBjYW5jZWwuXG4iCi0jZW5kaWYgLyogQ0tfTkVFRF9TSUcgKi8KLSAgICAg ICk7Ci19Ci0KLXN0YXRpYyBpbnQgeHpjbWQgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBHbG9i YWwgY29weSBvZiBSRU1PVEUgY21kIGluZGV4ICovCi0KLS8qICBSIEUgTSBDIEYgTSAgLS0gIENv bmZpcm0gYSBSRU1PVEUgY29tbWFuZCAgKi8KLS8qCi0gIExpa2UgY21jZm0oKSwgYnV0IGFsbG93 cyBmb3IgYSByZWRpcmVjdGlvbiBpbmRpY2F0b3Igb24gdGhlIGVuZCwKLSAgbGlrZSAiPiBmaWxl bmFtZSIgb3IgInwgY29tbWFuZCIuICBSZXR1cm5zIHdoYXQgY21jZm0oKSB3b3VsZCBoYXZlCi0g IHJldHVybmVkOiAtMSBpZiByZXBhcnNlIG5lZWRlZCwgZXRjIGV0YyBibGFoIGJsYWguICBPbiBz dWNjZXNzLAotICByZXR1cm5zIDEgd2l0aDoKLQotICAgIGNoYXIgKiByZW1kZXN0IGNvbnRhaW5p bmcgdGhlIG5hbWUgb2YgdGhlIGZpbGUgb3IgY29tbWFuZC4KLSAgICBpbnQgcmVtZmlsZSBzZXQg dG8gMSBpZiB0aGVyZSBpcyB0byBiZSBhbnkgcmVkaXJlY3Rpb24uCi0gICAgaW50IHJlbWFwcGQg c2V0IHRvIDEgaWYgb3V0cHV0IGZpbGUgaXMgdG8gYmUgYXBwZW5kZWQgdG8uCi0gICAgaW50IHJl bXBpcGUgc2V0IHRvIDEgaWYgcmVtZGVzdCBpcyBhIGNvbW1hbmQsIDAgaWYgaXQgaXMgYSBmaWxl LgotKi8KLXN0YXRpYyBpbnQKLXJlbWNmbSgpIHsKLSAgICBpbnQgeDsKLSAgICBjaGFyICpzOwot ICAgIGNoYXIgYzsKLQotICAgIHJlbWZpbGUgPSAwOwotICAgIHJlbXBpcGUgPSAwOwotICAgIHJl bWFwcGQgPSAwOwotCi0gICAgaWYgKCh4ID0gY210eHQoCi0gICAgICAgICAgICAgIj4gZmlsZW5h bWUsIHwgY29tbWFuZCxcblwKLW9yIHR5cGUgY2FycmlhZ2UgcmV0dXJuIHRvIGNvbmZpcm0gdGhl IGNvbW1hbmQiLAotICAgICAgICAgICAgICAgICAgICIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAg ICAgcmV0dXJuKHgpOwotICAgIGlmIChyZW1kZXN0KSB7Ci0gICAgICAgIGZyZWUocmVtZGVzdCk7 Ci0gICAgICAgIHJlbWRlc3QgPSBOVUxMOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJyZW1jZm0g bG9jYWwiLCIiLGxvY2FsKTsKLSAgICBkZWJ1ZyhGMTEwLCJyZW1jZm0gcyIscywwKTsKLSAgICBk ZWJ1ZyhGMTAxLCJyZW1jZm0gY21kIiwiIix4emNtZCk7Ci0vKiAKLSAgVGhpcyBjaGVjayB3YXMg YWRkZWQgaW4gQy1LZXJtaXQgNi4wIG9yIDcuMCBidXQgaXQgdHVybnMgb3V0IHRvIGJlCi0gIHVu aGVscGZ1bCBpbiB0aGUgc2l0dWF0aW9uIHdoZXJlIHRoZSByZW1vdGUgaXMgcnVubmluZyBhIHNj cmlwdCB0aGF0IHNlbmRzCi0gIFJFTU9URSBjb21tYW5kcyB0byB0aGUgbG9jYWwgd29ya3N0YXRp b24uICBXaGF0IGhhcHBlbnMgaXMsIHRoZSBsb2NhbAotICBzZXJ2ZXIgZXhlY3V0ZXMgdGhlIGNv bW1hbmQgYW5kIHNlbmRzIHRoZSByZXN1bHQgYmFjayBhcyBzY3JlZW4gdGV4dCwgd2hpY2gKLSAg aXMgaW5kaWNhdGVkIGJ5IHVzaW5nIGFuIFggcGFja2V0IGluc3RlYWQgb2YgYW4gRiBwYWNrZXQg YXMgdGhlIGZpbGUKLSAgaGVhZGVyLiAgVGhlcmUgYXJlIHR3byBwYXJ0cyB0byB0aGlzOiBleGVj dXRpbmcgdGhlIGNvbW1hbmQgdW5kZXIgY29udHJvbAotICBvZiB0aGUgcmVtb3RlIEtlcm1pdCwg d2hpY2ggaXMgZGVzaXJhYmxlIChhbmQgaW4gZmFjdCBzb21lIGJpZyBhcHBsaWNhdGlvbnMKLSAg ZGVwZW5kIG9uIGl0LCBhbmQgdGhlcmVmb3JlIG5ldmVyIGluc3RhbGxlZCBhbnkgbmV3IEMtS2Vy bWl0IHZlcnNpb25zIGFmdGVyCi0gIDVBKSwgYW5kIGRpc3BsYXlpbmcgdGhlIHJlc3VsdC4gIENv bW1lbnRpbmcgb3V0IHRoZSBjaGVjayBhbGxvd3MgdGhlCi0gIGNvbW1hbmQgdG8gYmUgZXhlY3V0 ZWQsIGJ1dCB0aGUgcmVzdWx0IGlzIHN0aWxsIHNlbnQgYmFjayB0byB0aGUgcmVtb3RlIGluCi0g IGEgZmlsZSB0cmFuc2Zlciwgd2hlcmUgaXQgdmFuaXNoZXMgaW50byB0aGUgZXRoZXIuICBBY3R1 YWxseSBpdCdzIG9uIHRoZQotICBjb21tdW5pY2F0aW9uIGNvbm5lY3Rpb24sIG1peGVkIGluIHdp dGggdGhlIHBhY2tldHMuICBQcmV0dHkgYW1hemluZyB0aGF0Ci0gIHRoZSBmaWxlIHRyYW5zZmVy IHN0aWxsIHdvcmtzLCByaWdodD8KLSovCi0jaWZkZWYgQ09NTUVOVAotICAgIGlmICghKnMpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHJlZGlyZWN0aW9uIGluZGljYXRvciAqLwot ICAgICAgICBpZiAoIWxvY2FsICYmCi0gICAgICAgICAgICAoeHpjbWQgPT0gWFpESVIgfHwgeHpj bWQgPT0gWFpUWVAgfHwKLSAgICAgICAgICAgICB4emNtZCA9PSBYWlhJVCB8fCB4emNtZCA9PSBY WlNQQSB8fAotICAgICAgICAgICAgIHh6Y21kID09IFhaSExQIHx8IHh6Y21kID09IFhaUFdEIHx8 Ci0gICAgICAgICAgICAgeHpjbWQgPT0gWFpMR0kgfHwgeHpjbWQgPT0gWFpMR08gfHwKLSAgICAg ICAgICAgICB4emNtZCA9PSBYWldITyB8fCB4emNtZCA9PSBYWkhPUykpIHsKLSAgICAgICAgICAg IHByaW50ZigiP1wiJXNcIiBoYXMgbm8gZWZmZWN0IGluIHJlbW90ZSBtb2RlXG4iLGNtZGJ1Zik7 Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICByZXR1 cm4oMSk7Ci0gICAgfQotI2VuZGlmCS8qIENPTU1FTlQgKi8KLSAgICBjID0gKnM7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBXZSBoYXZlIHNvbWV0aGluZyAqLwotICAgIGlmIChjICE9 ICc+JyAmJiBjICE9ICd8JykgeyAgICAgICAgIC8qIElzIGl0ID4gb3IgfCA/ICovCi0gICAgICAg IHByaW50ZigiP05vdCBjb25maXJtZWRcbiIpOyAgICAgLyogTm8gKi8KLSAgICAgICAgcmV0dXJu KC05KTsKLSAgICB9Ci0gICAgcysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog U2VlIHdoYXQgZm9sbG93cyAqLwotICAgIGlmIChjID09ICc+JyAmJiAqcyA9PSAnPicpIHsgICAg ICAgIC8qIEFsbG93IGZvciAiPj4iIHRvbyAqLwotICAgICAgICBzKys7Ci0gICAgICAgIHJlbWFw cGQgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogQXBwZW5kIHRvIG91dHB1dCBmaWxlICovCi0g ICAgfQotICAgIHdoaWxlICgqcyA9PSBTUCB8fCAqcyA9PSBIVCkgcysrOyAgIC8qIFN0cmlwIGlu dGVydmVuaW5nIHdoaXRlc3BhY2UgKi8KLSAgICBpZiAoISpzKSB7Ci0gICAgICAgIHByaW50Zigi PyVzIG1pc3NpbmdcbiIsIGMgPT0gJz4nID8gIkZpbGVuYW1lIiA6ICJDb21tYW5kIik7Ci0gICAg ICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGlmIChjID09ICc+JyAmJiB6Y2hrbyhzKSA8IDAp IHsgICAgIC8qIENoZWNrIGFjY2Vzc2liaWxpdHkgKi8KLSAgICAgICAgcHJpbnRmKCI/QWNjZXNz IGRlbmllZCAtICVzXG4iLCBzKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgcmVt ZmlsZSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGdsb2JhbCByZXN1bHRzICov Ci0gICAgcmVtcGlwZSA9IChjID09ICd8Jyk7Ci0gICAgaWYgKHJlbXBpcGUKLSNpZm5kZWYgTk9Q VVNICi0gICAgICAgICYmIG5vcHVzaAotI2VuZGlmIC8qIE5PUFVTSCAqLwotICAgICAgICApIHsK LSAgICAgICAgcHJpbnRmKCI/U29ycnksIGFjY2VzcyB0byBleHRlcm5hbCBjb21tYW5kcyBpcyBk aXNhYmxlZC5cbiIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBtYWtlc3RyKCZy ZW1kZXN0LHMpOwotI2lmbmRlZiBOT0RFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAgICAgICBk ZWJ1ZyhGMTAxLCJyZW1jZm0gcmVtZmlsZSIsIiIscmVtZmlsZSk7Ci0gICAgICAgIGRlYnVnKEYx MDEsInJlbWNmbSByZW1hcHBkIiwiIixyZW1hcHBkKTsKLSAgICAgICAgZGVidWcoRjEwMSwicmVt Y2ZtIHJlbXBpcGUiLCIiLHJlbXBpcGUpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJyZW1jZm0gcmVt ZGVzdCIscmVtZGVzdCwgMCk7Ci0gICAgfQotI2VuZGlmIC8qIE5PREVCVUcgKi8KLSAgICByZXR1 cm4oMSk7Ci19Ci0KLS8qICBSIEUgTSBUIFggVCAgLS0gIExpa2UgcmVtY2ZtKCkuLi4gICovCi0v KgotICAgLi4uIGJ1dCBmb3IgUkVNT1RFIGNvbW1hbmRzIHRoYXQgZW5kIHdpdGggY210eHQoKS4K LSAgIEhlcmUgd2UgbXVzdCBkZWNpcGhlciBicmFjZXMgdG8gZGlzY292ZXIgd2hldGhlciB0aGUg dHJhaWxpbmcKLSAgIHJlZGlyZWN0aW9uIGluZGljYXRvciBpcyBpbnRlbmRlZCBmb3IgbG9jYWwg dXNlLCBvciB0byBiZSBzZW50IG91dAotICAgdG8gdGhlIHNlcnZlciwgYXMgaW46Ci0KLSAgICAg cmVtb3RlIGhvc3QgYmxhaCBibGFoID4gZmlsZSAgICAgICAgICAgICAgICAgVGhpcyBlbmQKLSAg ICAgcmVtb3RlIGhvc3QgeyBibGFoIGJsYWggfSA+IGZpbGUgICAgICAgICAgICAgVGhpcyBlbmQK LSAgICAgcmVtb3RlIGhvc3QgeyBibGFoIGJsYWggPiBmaWxlIH0gICAgICAgICAgICAgVGhhdCBl bmQKLSAgICAgcmVtb3RlIGhvc3QgeyBibGFoIGJsYWggPiBmaWxlIH0gPiBmaWxlICAgICAgQm90 aCBlbmRzCi0KLSAgIFBpcGVzIHRvbzoKLQotICAgICByZW1vdGUgaG9zdCBibGFoIGJsYWggfCBj bWQgICAgICAgICAgICAgICAgICBUaGlzIGVuZAotICAgICByZW1vdGUgaG9zdCB7IGJsYWggYmxh aCB9IHwgY21kICAgICAgICAgICAgICBUaGlzIGVuZAotICAgICByZW1vdGUgaG9zdCB7IGJsYWgg YmxhaCB8IGNtZCB9ICAgICAgICAgICAgICBUaGF0IGVuZAotICAgICByZW1vdGUgaG9zdCB7IGJs YWggYmxhaCB8IGNtZCB9IHwgY21kICAgICAgICBCb3RoIGVuZHMKLQotICAgT3IgYm90aDoKLQot ICAgICByZW1vdGUgaG9zdCBibGFoIGJsYWggfCBjbWQgPiBmaWxlICAgICAgICAgICBUaGlzIGVu ZCwgZXRjIGV0Yy4uLgotCi0gICBOb3RlOiB0aGlzIHJlYWxseSBvbmx5IG1ha2VzIHNlbnNlIGZv ciBSRU1PVEUgSE9TVCwgYnV0IHdoeSBiZSBwaWNreT8KLSAgIENhbGwgYWZ0ZXIgY2FsbGluZyBj bXR4dCgpLCB3aXRoIHBvaW50ZXIgdG8gc3RyaW5nIHRoYXQgY210eHQoKSBwYXJzZWQsCi0gICBh cyBpbiAicmVtdHh0KCZzKTsiLgotCi0gICBSZXR1cm5zOgotICAgIDEgb24gc3VjY2VzcyB3aXRo IGJyYWNlcyAmIHJlZGlyZWN0aW9uIHRoaW5ncyByZW1vdmVkICYgcG9pbnRlciB1cGRhdGVkLAot ICAgLTkgb24gZmFpbHVyZSAoYmFkIGluZGlyZWN0aW9uKSwgYWZ0ZXIgcHJpbnRpbmcgZXJyb3Ig bWVzc2FnZS4KLSovCi1pbnQKLXJlbXR4dChwKSBjaGFyICoqIHA7IHsKLSAgICBpbnQgaSwgeCwg YnBvcywgcHBvczsKLSAgICBjaGFyIGMsICpzLCAqcTsKLQotICAgIHJlbWZpbGUgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgZ2xvYmFsIHJlc3VsdHMgKi8KLSAgICBy ZW1waXBlID0gMDsKLSAgICByZW1hcHBkID0gMDsKLSAgICBpZiAocmVtZGVzdCkgewotICAgICAg ICBmcmVlKHJlbWRlc3QpOwotICAgICAgICByZW1kZXN0ID0gTlVMTDsKLSAgICB9Ci0gICAgcyA9 ICpwOwotICAgIGlmICghcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHJlZGly ZWN0aW9uIGluZGljYXRvciAqLwotICAgICAgcyA9ICIiOwotI2lmZGVmIENPTU1FTlQKLSAgICBp ZiAoISpzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXR0byAqLwotICAgICAgICBp ZiAoIWxvY2FsICYmCi0gICAgICAgICAgICAoeHpjbWQgPT0gWFpESVIgfHwgeHpjbWQgPT0gWFpU WVAgfHwKLSAgICAgICAgICAgICB4emNtZCA9PSBYWlhJVCB8fCB4emNtZCA9PSBYWlNQQSB8fAot ICAgICAgICAgICAgIHh6Y21kID09IFhaSExQIHx8IHh6Y21kID09IFhaUFdEIHx8Ci0gICAgICAg ICAgICAgeHpjbWQgPT0gWFpMR0kgfHwgeHpjbWQgPT0gWFpMR08gfHwKLSAgICAgICAgICAgICB4 emNtZCA9PSBYWldITyB8fCB4emNtZCA9PSBYWkhPUykpIHsKLSAgICAgICAgICAgIHByaW50Zigi P1wiJXNcIiBoYXMgbm8gZWZmZWN0IGluIHJlbW90ZSBtb2RlXG4iLGNtZGJ1Zik7Ci0gICAgICAg ICAgICBpZiAoaGludHMpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIkhpbnQ6IFRyeSBhZ2Fp biB3aXRoIGFuIG91dHB1dCByZWRpcmVjdG9yLlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICByZXR1cm4oMSk7Ci0g ICAgfQotI2VuZGlmCS8qIENPTU1FTlQgKi8KLSAgICBicG9zID0gLTE7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBQb3NpdGlvbiBvZiA+IChicmFja2V0KSAqLwotICAgIHBwb3MgPSAtMTsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvc2l0aW9uIG9mIHwgKHBpcGUpICovCi0gICAg eCA9IHN0cmxlbihzKTsgICAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIGNtdHh0KCkg c3RyaW5nICovCi0KLSAgICBmb3IgKGkgPSB4LTE7IGkgPj0gMDsgaS0tKSB7ICAgICAgICAvKiBT ZWFyY2ggcmlnaHQgdG8gbGVmdC4gKi8KLSAgICAgICAgYyA9IHNbaV07Ci0gICAgICAgIGlmIChj ID09ICd9JykgICAgICAgICAgICAgICAgICAgLyogQnJlYWsgb24gZmlyc3QgcmlnaHQgYnJhY2Ug Ki8KLSAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBsb29r IGF0IGNvbnRlbnRzIG9mIGJyYWNlcyAqLwotICAgICAgICBlbHNlIGlmIChjID09ICc+JykgICAg ICAgICAgICAgIC8qIFJlY29yZCBwb3NpdGlvbiBvZiA+ICovCi0gICAgICAgICAgYnBvcyA9IGk7 Ci0gICAgICAgIGVsc2UgaWYgKGMgPT0gJ3wnKSAgICAgICAgICAgICAgLyogYW5kIG9mIHwgKi8K LSAgICAgICAgICBwcG9zID0gaTsKLSAgICB9Ci0gICAgaWYgKGJwb3MgPCAwICYmIHBwb3MgPCAw KSB7ICAgICAgICAgLyogTm8gcmVkaXJlY3RvcnMuICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAg ICBpZiAoIWxvY2FsICYmCi0gICAgICAgICAgICAoeHpjbWQgPT0gWFpESVIgfHwgeHpjbWQgPT0g WFpUWVAgfHwKLSAgICAgICAgICAgICB4emNtZCA9PSBYWlhJVCB8fCB4emNtZCA9PSBYWlNQQSB8 fAotICAgICAgICAgICAgIHh6Y21kID09IFhaSExQIHx8IHh6Y21kID09IFhaUFdEIHx8Ci0gICAg ICAgICAgICAgeHpjbWQgPT0gWFpMR0kgfHwgeHpjbWQgPT0gWFpMR08gfHwKLSAgICAgICAgICAg ICB4emNtZCA9PSBYWldITyB8fCB4emNtZCA9PSBYWkhPUykpIHsKLSAgICAgICAgICAgIHByaW50 ZigiP1wiJXNcIiBoYXMgbm8gZWZmZWN0IGluIHJlbW90ZSBtb2RlXG4iLGNtZGJ1Zik7Ci0gICAg ICAgICAgICBpZiAoaGludHMpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIkhpbnQ6IFRyeSBh Z2FpbiB3aXRoIGFuIG91dHB1dCByZWRpcmVjdG9yLlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotICAg ICAgICBzID0gYnJzdHJpcChzKTsgICAgICAgICAgICAgICAgIC8qIFJlbW92ZSBvdXRlciBicmFj ZXMgaWYgYW55LiAqLwotICAgICAgICAqcCA9IHM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFBvaW50IHRvIHJlc3VsdCAqLwotICAgICAgICByZXR1cm4oMSk7ICAgICAgICAgICAgICAgICAg ICAgIC8qIGFuZCByZXR1cm4uICovCi0gICAgfQotICAgIHJlbWZpbGUgPSAxOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEl0J3MgfCBvciA+ICovCi0gICAgaSA9IC0xOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogR2V0IGxlZnRtb3N0IHN5bWJvbCAqLwotICAgIGlmIChicG9zID4g LTEpICAgICAgICAgICAgICAgICAgICAgIC8qIEJyYWNrZXQgKi8KLSAgICAgIGkgPSBicG9zOwot ICAgIGlmIChwcG9zID4gLTEgJiYgKHBwb3MgPCBicG9zIHx8IGJwb3MgPCAwKSkgeyAvKiBvciBw aXBlICovCi0gICAgICAgIGkgPSBwcG9zOwotICAgICAgICByZW1waXBlID0gMTsKLSAgICB9Ci0g ICAgaWYgKHJlbXBpcGUKLSNpZm5kZWYgTk9QVVNICi0gICAgICAgICYmIG5vcHVzaAotI2VuZGlm IC8qIE5PUFVTSCAqLwotICAgICAgICApIHsKLSAgICAgICAgcHJpbnRmKCI/U29ycnksIGFjY2Vz cyB0byBleHRlcm5hbCBjb21tYW5kcyBpcyBkaXNhYmxlZC5cbiIpOwotICAgICAgICByZXR1cm4o LTkpOwotICAgIH0KLSAgICBjID0gc1tpXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b3B5IG9mIHN5bWJvbCAqLwotCi0gICAgaWYgKGMgPT0gJz4nICYmIHNbaSsxXSA9PSAnPicpICAg ICAgLyogIj4+IiBmb3IgYXBwZW5kPyAqLwotICAgICAgcmVtYXBwZCA9IDE7ICAgICAgICAgICAg ICAgICAgICAgLyogSXQncyBub3QganVzdCBhIGZsYWcgaXQncyBhIG51bWJlciAqLwotCi0gICAg cSA9IHMgKyBpICsgMSArIHJlbWFwcGQ7ICAgICAgICAgICAgLyogUG9pbnQgcGFzdCBzeW1ib2wg aW4gc3RyaW5nICovCi0gICAgd2hpbGUgKCpxID09IFNQIHx8ICpxID09IEhUKSBxKys7ICAgLyog YW5kIGFueSBpbnRlcnZlbmluZyB3aGl0ZXNwYWNlICovCi0gICAgaWYgKCEqcSkgewotICAgICAg ICBwcmludGYoIj8lcyBtaXNzaW5nXG4iLCBjID09ICc+JyA/ICJGaWxlbmFtZSIgOiAiQ29tbWFu ZCIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAoYyA9PSAnPicgJiYgemNo a28ocSkgPCAwKSB7ICAgICAvKiAoRG9lc24ndCB3b3JrIGZvciB8IGNtZCA+IGZpbGUpICovCi0g ICAgICAgIHByaW50ZigiP0FjY2VzcyBkZW5pZWQgLSAlc1xuIiwgcSk7Ci0gICAgICAgIHJldHVy bigtOSk7Ci0gICAgfQotICAgIG1ha2VzdHIoJnJlbWRlc3QscSk7ICAgICAgICAgICAgICAgIC8q IENyZWF0ZSB0aGUgZGVzdGluYXRpb24gc3RyaW5nICovCi0gICAgcSA9IHMgKyBpIC0gMTsgICAg ICAgICAgICAgICAgICAgICAgLyogUG9pbnQgYmVmb3JlIHN5bWJvbCAqLwotICAgIHdoaWxlIChx ID4gcyAmJiAoKnEgPT0gU1AgfHwgKnEgPT0gSFQpKSAvKiBTdHJpcCB0cmFpbGluZyB3aGl0ZXNw YWNlICovCi0gICAgICBxLS07Ci0gICAgKihxKzEpID0gTlVMOyAgICAgICAgICAgICAgICAgICAg ICAgLyogVGVybWluYXRlIHRoZSBzdHJpbmcuICovCi0gICAgcyA9IGJyc3RyaXAocyk7ICAgICAg ICAgICAgICAgICAgICAgLyogUmVtb3ZlIGFueSBicmFjZXMgKi8KLSAgICAqcCA9IHM7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgcmV0dXJuIHZhbHVlICovCi0KLSNpZm5kZWYg Tk9ERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgZGVidWcoRjEwMSwicmVtdHh0IHJl bWZpbGUiLCIiLHJlbWZpbGUpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJyZW10eHQgcmVtYXBwZCIs IiIscmVtYXBwZCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInJlbXR4dCByZW1waXBlIiwiIixyZW1w aXBlKTsKLSAgICAgICAgZGVidWcoRjExMCwicmVtdHh0IHJlbWRlc3QiLHJlbWRlc3QsIDApOwot ICAgICAgICBkZWJ1ZyhGMTEwLCJyZW10eHQgY29tbWFuZCIscywwKTsKLSAgICB9Ci0jZW5kaWYg LyogTk9ERUJVRyAqLwotCi0gICAgcmV0dXJuKDEpOwotfQotCi1pbnQKLXBsb2dpbih4eCkgaW50 IHh4OyB7Ci0gICAgY2hhciAqcDEgPSBOVUxMLCAqcDIgPSBOVUxMLCAqcDMgPSBOVUxMOwotICAg IGludCBwc2F2ZWQgPSAwLCByYyA9IDA7Ci0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgZXh0ZXJuIGlu dCBvbl9yZWNhbGw7ICAgICAgICAgICAgICAgLyogYXJvdW5kIFBhc3N3b3JkIHByb21wdGluZyAq LwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotICAgIGRlYnVnKEYxMDEsInBsb2dpbiBsb2NhbCIs IiIsbG9jYWwpOwotCi0gICAgaWYgKCFsb2NhbCB8fCAobmV0d29yayAmJiB0dGNoaygpIDwgMCkp IHsKLSAgICAgICAgcHJpbnRmKCI/Tm8gY29ubmVjdGlvblxuIik7Ci0gICAgICAgIHJldHVybigt OSk7Ci0gICAgfQotICAgIGlmICgoeCA9IGNtZmxkKCJVc2VyIElEIiwiIiwmcyx4eHN0cmluZykp IDwgMCkgeyAvKiBHZXQgVXNlciBJRCAqLwotICAgICAgICBpZiAoeCAhPSAtMykgcmV0dXJuKHgp OwotICAgIH0KLSAgICB5ID0gc3RybGVuKHMpOwotICAgIGlmICh5ID4gMCkgewotICAgICAgICBp ZiAoKHAxID0gbWFsbG9jKHkgKyAxKSkgPT0gTlVMTCkgewotICAgICAgICAgICAgcHJpbnRmKCI/ SW50ZXJuYWwgZXJyb3I6IG1hbGxvY1xuIik7Ci0gICAgICAgICAgICByYyA9IC05OwotICAgICAg ICAgICAgZ290byBYWlhMR0k7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHN0cmNweShwMSxz KTsgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgaWYgKChyYyA9IGNtZmxkKCJQ YXNzd29yZCIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgaWYgKHJjICE9IC0zKSBn b3RvIFhaWExHSTsKLSAgICAgICAgeSA9IHN0cmxlbihzKTsKLSAgICAgICAgaWYgKHkgPiAwKSB7 Ci0gICAgICAgICAgICBpZiAoKHAyID0gbWFsbG9jKHkgKyAxKSkgPT0gTlVMTCkgewotICAgICAg ICAgICAgICAgIHByaW50ZigiP0ludGVybmFsIGVycm9yOiBtYWxsb2NcbiIpOwotICAgICAgICAg ICAgICAgIHJjID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byBYWlhMR0k7Ci0gICAgICAgICAg ICB9IGVsc2UKLSAgICAgICAgICAgICAgc3RyY3B5KHAyLHMpOyAgICAgICAgICAgICAvKiBzYWZl ICovCi0gICAgICAgICAgICBpZiAoKHJjID0gY21mbGQoIkFjY291bnQiLCIiLCZzLHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgICAgICBpZiAocmMgIT0gLTMpIGdvdG8gWFpYTEdJOwotICAgICAg ICAgICAgeSA9IHN0cmxlbihzKTsKLSAgICAgICAgICAgIGlmICh5ID4gMCkgewotICAgICAgICAg ICAgICAgIGlmICgocDMgPSBtYWxsb2MoeSArIDEpKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAg ICAgICAgIHByaW50ZigiP0ludGVybmFsIGVycm9yOiBtYWxsb2NcbiIpOwotICAgICAgICAgICAg ICAgICAgICByYyA9IC05OwotICAgICAgICAgICAgICAgICAgICBnb3RvIFhaWExHSTsKLSAgICAg ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgIHN0cmNweShwMyxzKTsgICAgICAg ICAvKiBzYWZlICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKChy YyA9IHJlbXR4dCgmcykpIDwgMCkgICAgICAgICAgLyogQ29uZmlybSAmIGhhbmRsZSByZWRpcmVj dG9ycyAqLwotICAgICAgZ290byBYWlhMR0k7Ci0KLSAgICBpZiAoIXAxKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBObyBVc2VyaWQgc3BlY2lmaWVkLi4uICovCi0gICAgICAgIGRlYm9r ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgbG9nIHRoaXMgKi8KLSAgICAgICAg LyogUHJvbXB0IGZvciB1c2VybmFtZSwgcGFzc3dvcmQsIGFuZCBhY2NvdW50ICovCi0jaWZkZWYg Q0tfUkVDQUxMCi0gICAgICAgIG9uX3JlY2FsbCA9IDA7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICov Ci0gICAgICAgIGNtc2F2cChwc2F2ZSxQUk9NUFRMKTsgICAgICAgICAgLyogU2F2ZSBvbGQgcHJv bXB0ICovCi0gICAgICAgIHBzYXZlZCA9IDE7Ci0gICAgICAgIGRlYnVnKEYxMTAsIlJFTU9URSBM T0dJTiBzYXZlZCIscHNhdmUsMCk7Ci0KLSAgICAgICAgY21zZXRwKCJVc2VybmFtZTogIik7ICAg ICAgICAgICAvKiBNYWtlIG5ldyBwcm9tcHQgKi8KLSAgICAgICAgY29uY2IoKGNoYXIpZXNjYXBl KTsgICAgICAgICAgICAvKiBQdXQgY29uc29sZSBpbiBjYnJlYWsgbW9kZSAqLwotICAgICAgICBj bWluaSgxKTsKLSAgICAgICAgcHJvbXB0KHh4c3RyaW5nKTsKLSAgICAgICAgcmMgPSAtOTsKLSAg ICAgICAgZm9yICh4ID0gLTE7IHggPCAwOyApIHsgICAgICAgICAvKiBQcm9tcHQgdGlsbCB0aGV5 IGFuc3dlciAqLwotICAgICAgICAgICAgY21yZXMoKTsgICAgICAgICAgICAgICAgICAgIC8qIFJl c2V0IHRoZSBwYXJzZXIgKi8KLSAgICAgICAgICAgIHggPSBjbXR4dCgiIiwiIiwmcyxOVUxMKTsg ICAvKiBHZXQgYSBsaXRlcmFsIGxpbmUgb2YgdGV4dCAqLwotICAgICAgICB9Ci0gICAgICAgIHkg PSBzdHJsZW4ocyk7Ci0gICAgICAgIGlmICh5IDwgMSkgewotICAgICAgICAgICAgcHJpbnRmKCI/ Q2FuY2VsZWRcbiIpOwotICAgICAgICAgICAgZ290byBYWlhMR0k7Ci0gICAgICAgIH0KLSAgICAg ICAgaWYgKChwMSA9IG1hbGxvYyh5ICsgMSkpID09IE5VTEwpIHsKLSAgICAgICAgICAgIHByaW50 ZigiP0ludGVybmFsIGVycm9yOiBtYWxsb2NcbiIpOwotICAgICAgICAgICAgZ290byBYWlhMR0k7 Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHN0cmNweShwMSxzKTsgICAgICAgICAgICAgICAg IC8qIHNhZmUgKi8KLQotICAgICAgICBjbXNldHAoIlBhc3N3b3JkOiAiKTsgICAgICAgICAgIC8q IE1ha2UgbmV3IHByb21wdCAqLwotICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAg ICAgIC8qIFB1dCBjb25zb2xlIGluIGNicmVhayBtb2RlICovCi0gICAgICAgIGNtaW5pKDApOyAg ICAgICAgICAgICAgICAgICAgICAgLyogTm8gZWNobyAqLwotICAgICAgICBwcm9tcHQoeHhzdHJp bmcpOwotICAgICAgICBkZWJvayA9IDA7Ci0gICAgICAgIGZvciAoeCA9IC0xOyB4IDwgMCAmJiB4 ICE9IC0zOyApIHsgLyogR2V0IGFuc3dlciAqLwotICAgICAgICAgICAgY21yZXMoKTsgICAgICAg ICAgICAgICAgICAgIC8qIFJlc2V0IHRoZSBwYXJzZXIgKi8KLSAgICAgICAgICAgIHggPSBjbXR4 dCgiIiwiIiwmcyxOVUxMKTsgICAvKiBHZXQgbGl0ZXJhbCBsaW5lIG9mIHRleHQgKi8KLSAgICAg ICAgfQotICAgICAgICBpZiAoKHAyID0gbWFsbG9jKChpbnQpc3RybGVuKHMpICsgMSkpID09IE5V TEwpIHsKLSAgICAgICAgICAgIHByaW50ZigiP0ludGVybmFsIGVycm9yOiBtYWxsb2NcbiIpOwot ICAgICAgICAgICAgZ290byBYWlhMR0k7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHN0cmNw eShwMixzKTsgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgcHJpbnRmKCJcclxu Iik7Ci0gICAgICAgIGlmICgocmMgPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgZ290byBYWlhM R0k7Ci0gICAgfQotICAgIHNzdGF0ZSA9IHNldGdlbignSScscDEscDIscDMpOyAgICAgIC8qIEdl dCBoZXJlIHdpdGggYXQgbGVhc3QgdXNlciBJRCAqLwotICAgIHJjID0gMDsKLQotICBYWlhMR0k6 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1vbiBleGl0IHBvaW50ICovCi0g ICAgaWYgKHBzYXZlZCkKLSAgICAgIGNtc2V0cChwc2F2ZSk7ICAgICAgICAgICAgICAgICAgICAv KiBSZXN0b3JlIG9yaWdpbmFsIHByb21wdCAqLwotICAgIGlmIChwMykgeyBmcmVlKHAzKTsgcDMg PSBOVUxMOyB9ICAgIC8qIEZyZWUgbWFsbG9jJ2Qgc3RvcmFnZSAqLwotICAgIGlmIChwMikgeyBm cmVlKHAyKTsgcDIgPSBOVUxMOyB9Ci0gICAgaWYgKHAxKSB7IGZyZWUocDEpOyBwMSA9IE5VTEw7 IH0KLSAgICBpZiAocmMgPiAtMSkgewotICAgICAgICBpZiAobG9jYWwgJiYgcmMgPiAtMSkgICAg ICAgICAgIC8qIElmIGxvY2FsLCBmbHVzaCB0dHkgaW5wdXQgYnVmZmVyICovCi0gICAgICAgICAg dHRmbHVpKCk7Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19Ci0KLSNpZmRlZiBPUzIKLSNpZm5k ZWYgTk9MT0NBTAotaW50Ci1kb3JtdCh4eCkgaW50IHh4OyB7Ci0gICAgaW50IHJjID0gMDsKLSAg ICBleHRlcm4gaW50IHRlcm1faW87Ci0gICAgaW50IHRlcm1faW9fc2F2ID0gdGVybV9pbzsKLSNp ZmRlZiBORVdGVFAKLSAgICBleHRlcm4gaW50IGZ0cGdldCwgZnRwaXNvcGVuKCk7Ci0gICAgaWYg KChmdHBnZXQgPT0gMSkgfHwgKChmdHBnZXQgPT0gMikgJiYgZnRwaXNvcGVuKCkpKQotICAgICAg cmV0dXJuKGRvZnRwcm10KHh4LDApKTsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSAgICB0ZXJtX2lv ID0gMDsKLSAgICByYyA9IHh4ZG9ybXQoeHgpOwotICAgIHRlcm1faW8gPSB0ZXJtX2lvX3NhdjsK LSAgICByZXR1cm4gcmM7Ci19Ci0KLQotaW50Ci14eGRvcm10KHh4KSBpbnQgeHg7Ci0jZWxzZSAv KiBOT0xPQ0FMICovCi1pbnQKLWRvcm10KHh4KSBpbnQgeHg7Ci0jZW5kaWYgLyogTk9MT0NBTCAq LwotI2Vsc2UgLyogT1MyICovCi1pbnQKLWRvcm10KHh4KSBpbnQgeHg7Ci0jZW5kaWYgLyogT1My ICovCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVNT1RFIGNv bW1hbmRzICovCi0gICAgaW50IHgsIHksIHJldGNvZGU7Ci0gICAgY2hhciAqcywgc2J1Zls1MF0s ICpzMjsKLQotI2lmZGVmIE5FV0ZUUAotICAgIGV4dGVybiBpbnQgZnRwZ2V0LCBmdHBpc29wZW4o KTsKLSAgICBpZiAoKGZ0cGdldCA9PSAxKSB8fCAoKGZ0cGdldCA9PSAyKSAmJiBmdHBpc29wZW4o KSkpCi0gICAgICByZXR1cm4oZG9mdHBybXQoeHgsMCkpOwotI2VuZGlmIC8qIE5FV0ZUUCAqLwot Ci0gICAgcmVtZmlsZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgdGhlc2Ug Ki8KLSAgICByZW1waXBlID0gMDsKLSAgICByZW1hcHBkID0gMDsKLQotICAgIGlmICh4eCA8IDAp IHJldHVybih4eCk7ICAgICAgICAgICAgIC8qIFJFTU9URSB3aGF0PyAqLwotCi0gICAgeHpjbWQg PSB4eDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSBnbG9iYWwgY29weSBvZiBhcmcg Ki8KLQotICAgIGlmICh4eCA9PSBYWlNFVCkgeyAgICAgICAgICAgICAgICAgIC8qIFJFTU9URSBT RVQgKi8KLSAgICAgICAgaWYgKCh5ID0gY21rZXkocm1zdGFiLG5ybXMsIiIsIiIseHhzdHJpbmcp KSA8IDApIHsKLSAgICAgICAgICAgIGlmICh5ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgcHJp bnRmKCI/UGFyYW1ldGVyIG5hbWUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVy bigtOSk7Ci0gICAgICAgICAgICB9IGVsc2UgcmV0dXJuKHkpOwotICAgICAgICB9Ci0gICAgICAg IHJldHVybihkb3BybSh5LDEpKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHh4KSB7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBPdGhlcnMuLi4gKi8KLQotICAgICAgY2FzZSBYWkNEVToKLSAgICAg ICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIHByaW50ZigiP1Nv cnJ5LCBSRU1PVEUgQ0RVUCBub3Qgc3VwcG9ydGVkIHlldFxuIik7Ci0gICAgICAgIHJldHVybigt OSk7Ci0KLSAgICAgIGNhc2UgWFpDV0Q6ICAgICAgICAgICAgICAgICAgICAgICAvKiBDV0QgKENE KSAqLwotICAgICAgICBpZiAoKHggPSBjbXR4dCgiUmVtb3RlIGRpcmVjdG9yeSBuYW1lIiwiIiwm cyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeCA9 IHJlbXR4dCgmcykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGRlYnVnKEYx MTEsIlhaQ1dEOiAiLHMseCk7Ci0gICAgICAgICpzYnVmID0gTlVMOwotICAgICAgICBzMiA9IHNi dWY7Ci0vKgotICBUaGUgZm9sbG93aW5nIGlzIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBzaW5jZSB0 aGUgZGlzYXBwZWFyYW5jZSBvZiB0aGUKLSAgREVDU1lTVEVNLTIwIGZyb20gdGhlIHBsYW5ldCwg bm8ga25vd24gY29tcHV0ZXIgcmVxdWlyZXMgYSBwYXNzd29yZCBmb3IKLSAgY2hhbmdpbmcgZGly ZWN0b3J5LgotKi8KLSNpZmRlZiBESVJQV0RQUgotICAgICAgICBpZiAoKnMgIT0gTlVMKSB7ICAg ICAgICAgICAgICAgIC8qIElmIGRpcmVjdG9yeSBuYW1lIGdpdmVuLCAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldCBwYXNzd29yZCBvbiBzZXBhcmF0ZSBs aW5lLiAqLwotICAgICAgICAgICAgaWYgKHRsZXZlbCA+IC0xKSB7ICAgICAgICAgIC8qIEZyb20g dGFrZSBmaWxlLi4uICovCi0KLSAgICAgICAgICAgICAgICBpZiAoZmdldHMoc2J1Ziw1MCx0Zmls ZVt0bGV2ZWxdKSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgZmF0YWwoInRha2UgZmlsZSBl bmRzIHByZW1hdHVyZWx5IGluICdyZW1vdGUgY3dkJyIpOwotICAgICAgICAgICAgICAgIGRlYnVn KEYxMTAsIiBwc3dkIGZyb20gdGFrZSBmaWxlIixzMiwwKTsKLSAgICAgICAgICAgICAgICBmb3Ig KHggPSAoaW50KXN0cmxlbihzYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgIHggPiAwICYmIChz YnVmW3gtMV0gPT0gTkwgfHwgc2J1Zlt4LTFdID09IENSKTsKLSAgICAgICAgICAgICAgICAgICAg IHgtLSkKLSAgICAgICAgICAgICAgICAgIHNidWZbeC0xXSA9ICdcMCc7Ci0KLSAgICAgICAgICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBGcm9tIHRlcm1pbmFsLi4uICovCi0KLSAg ICAgICAgICAgICAgICBwcmludGYoIiBQYXNzd29yZDogIik7ICAvKiBnZXQgYSBwYXNzd29yZCAq LwotI2lmZGVmIElLU0QKLSAgICAgICAgICAgICAgICBpZiAoIWxvY2FsICYmIGluc2VydmVyKSB7 Ci0gICAgICAgICAgICAgICAgICAgIHggPSBjb25pbmMoMCk7Ci0gICAgICAgICAgICAgICAgfSBl bHNlCi0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgeCA9 IGlzX2FfdHR5KDApID8gY29uaW5jKDApIDogLyogd2l0aCBubyBlY2hvIC4uLiAqLwotICAgICAg ICAgICAgICAgICAgICBnZXRjaGFyKCk7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgICAgICAg ICB4ID0gZ2V0Y2hhcigpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIHdoaWxl ICgoeCAhPSBOTCkgJiYgKHggIT0gQ1IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoeCAm PSAwMTc3KSA9PSAnPycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiPyBQYXNz d29yZCBvZiByZW1vdGUgZGlyZWN0b3J5XG4gUGFzc3dvcmQ6ICIpOwotICAgICAgICAgICAgICAg ICAgICAgICAgczIgPSBzYnVmOwotICAgICAgICAgICAgICAgICAgICAgICAgKnNidWYgPSBOVUw7 Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSBFU0MpIC8qIE1pbmkgY29tbWFu ZCBsaW5lIGVkaXRvci4uLiAqLwotICAgICAgICAgICAgICAgICAgICAgIGJsZWVwKEJQX1dBUk4p OwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh4ID09IEJTIHx8IHggPT0gMDE3NykKLSAg ICAgICAgICAgICAgICAgICAgICBzMi0tOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh4 ID09IDAyNSkgeyAgICAgICAgLyogQ3RybC1VICovCi0gICAgICAgICAgICAgICAgICAgICAgICBz MiA9IHNidWY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqc2J1ZiA9IE5VTDsKLSAgICAgICAg ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgKnMyKysgPSB4OwotCi0g ICAgICAgICAgICAgICAgICAgIC8qIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgKi8KLSNpZmRlZiBJ S1NECi0gICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWwgJiYgaW5zZXJ2ZXIpIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgIHggPSBjb25pbmMoMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZQotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAg eCA9IGlzX2FfdHR5KDApID8gY29uaW5jKDApIDogLyogd2l0aCBubyBlY2hvIC4uLiAqLwotICAg ICAgICAgICAgICAgICAgICAgIGdldGNoYXIoKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICAg ICAgICAgICAgICB4ID0gZ2V0Y2hhcigpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAqczIgPSBOVUw7Ci0gICAgICAgICAgICAgICAgcHV0Y2hh cignXG4nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMyID0gc2J1ZjsKLSAgICAgICAg fSBlbHNlIHMyID0gIiI7Ci0jZW5kaWYgLyogRElSUFdEUFIgKi8KLQotICAgICAgICBkZWJ1ZyhG MTEwLCIgcGFzc3dvcmQiLHMyLDApOwotCXJjZGFjdGl2ZSA9IDE7Ci0gICAgICAgIHNzdGF0ZSA9 IHNldGdlbignQycscyxzMiwiIik7Ci0gICAgICAgIHJldGNvZGUgPSAwOwotICAgICAgICBicmVh azsKLQotICAgICAgY2FzZSBYWkRFTDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog RGVsZXRlICovCi0gICAgICAgIGlmICgoeCA9IGNtdHh0KCJOYW1lIG9mIHJlbW90ZSBmaWxlKHMp IHRvIGRlbGV0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICIiLCZzLHh4c3RyaW5nKSkgPCAw KSB7Ci0gICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgIHByaW50Zigi P05hbWUgb2YgcmVtb3RlIGZpbGUocykgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgIHJl dHVybigtOSk7Ci0gICAgICAgICAgICB9IGVsc2UgcmV0dXJuKHgpOwotICAgICAgICB9Ci0gICAg ICAgIGlmICgoeCA9IHJlbXR4dCgmcykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAg ICAgIGlmIChsb2NhbCkgdHRmbHVpKCk7ICAgICAgICAgICAgLyogSWYgbG9jYWwsIGZsdXNoIHR0 eSBpbnB1dCBidWZmZXIgKi8KLSAgICAgICAgcmV0Y29kZSA9IHNzdGF0ZSA9IHJmaWxvcChzLCdF Jyk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhaRElSOiAgICAgICAgICAgICAgICAg ICAgICAgLyogRGlyZWN0b3J5ICovCi0gICAgICAgIGlmICgoeCA9IGNtdHh0KCJSZW1vdGUgZGly ZWN0b3J5IG9yIGZpbGUgc3BlY2lmaWNhdGlvbiIsIiIsJnMsCi0gICAgICAgICAgICAgICAgICAg ICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh4 ID0gcmVtdHh0KCZzKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKGxv Y2FsKSB0dGZsdWkoKTsgICAgICAgICAgICAvKiBJZiBsb2NhbCwgZmx1c2ggdHR5IGlucHV0IGJ1 ZmZlciAqLwotICAgICAgICBybXNnKCk7Ci0gICAgICAgIHJldGNvZGUgPSBzc3RhdGUgPSBzZXRn ZW4oJ0QnLHMsIiIsIiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBYWkhMUDogICAg ICAgICAgICAgICAgICAgICAgIC8qIEhlbHAgKi8KLSAgICAgICAgaWYgKCh4ID0gcmVtY2ZtKCkp IDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ0gnLCIiLCIiLCIiKTsK LSAgICAgICAgcmV0Y29kZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhaSE9T OiAgICAgICAgICAgICAgICAgICAgICAgLyogSG9zdCAqLwotICAgICAgICBpZiAoKHggPSBjbXR4 dCgiQ29tbWFuZCBmb3IgcmVtb3RlIHN5c3RlbSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAg ICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHggPSByZW10eHQoJnMpKSA8IDApCi0gICAg ICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHkgPSAoaW50KXN0cmxlbihzKSkgPCAxKQot ICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVop OwotICAgICAgICBjbWFyZyA9IGxpbmU7Ci0gICAgICAgIHJtc2coKTsKLSAgICAgICAgcmV0Y29k ZSA9IHNzdGF0ZSA9ICdjJzsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZm5kZWYgTk9GUklMTFMKLSAg ICAgIGNhc2UgWFpLRVI6Ci0gICAgICAgIGlmICgoeCA9IGNtdHh0KCJDb21tYW5kIGZvciByZW1v dGUgS2VybWl0IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgIGlmICgoeCA9IHJlbXR4dCgmcykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgIGlmICgoaW50KXN0cmxlbihzKSA8IDEpICB7Ci0gICAgICAgICAgICBpZiAoeCA9PSAt MykgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1JlbW90ZSBLZXJtaXQgY29tbWFuZCByZXF1 aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0gZWxz ZSByZXR1cm4oeCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZT SVopOwotICAgICAgICBjbWFyZyA9IGxpbmU7Ci0gICAgICAgIHJldGNvZGUgPSBzc3RhdGUgPSAn ayc7Ci0gICAgICAgIHJtc2coKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgWFpMR0k6 ICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2dpbiAqLwotCXJjZGFjdGl2ZSA9IDE7CQkJLyog U3VwcHJlc3MgIkxvZ2dlZCBpbiIgbXNnIGlmIHF1aWV0ICovCi0gICAgICAgIHJldHVybihwbG9n aW4oWFhSRU0pKTsKLQotICAgICAgY2FzZSBYWkxHTzogeyAgICAgICAgICAgICAgICAgICAgIC8q IExvZ291dCAqLwotICAgICAgICAgIGV4dGVybiBpbnQgYnllX2FjdGl2ZTsKLSAgICAgICAgICBp ZiAoKHggPSByZW1jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgICAgc3N0YXRlID0gc2V0 Z2VuKCdJJywiIiwiIiwiIik7Ci0gICAgICAgICAgcmV0Y29kZSA9IDA7Ci0gICAgICAgICAgYnll X2FjdGl2ZSA9IDE7ICAgICAgICAgICAgICAgLyogQ2xvc2UgY29ubmVjdGlvbiB3aGVuIGRvbmUg Ki8KLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBYWlBSSTogICAgICAg ICAgICAgICAgICAgICAgIC8qIFByaW50ICovCi0gICAgICAgIGlmICghYXRkaXNvIHx8ICFhdGNh cHIpIHsgICAgICAgLyogRGlzcG9zaXRpb24gYXR0cmlidXRlIG9mZj8gKi8KLSAgICAgICAgICAg IHByaW50ZigiP0Rpc3Bvc2l0aW9uIEF0dHJpYnV0ZSBpcyBPZmZcbiIpOwotICAgICAgICAgICAg cmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAgICBjbWFyZyA9ICIiOwotICAgICAgICBjbWFy ZzIgPSAiIjsKLSAgICAgICAgaWYgKCh4ID0gY21pZmkoIkxvY2FsIGZpbGUocykgdG8gcHJpbnQg b24gcmVtb3RlIHByaW50ZXIiLCIiLCZzLCZ5LAotICAgICAgICAgICAgICAgICAgICAgICB4eHN0 cmluZykpIDwgMCkgewotICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAg ICBwcmludGYoIj9OYW1lIG9mIGxvY2FsIGZpbGUocykgcmVxdWlyZWRcbiIpOwotICAgICAgICAg ICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOyAgICAvKiBN YWtlIGEgc2FmZSBjb3B5IG9mIGZpbGVuYW1lICovCi0gICAgICAgICpvcHRidWYgPSBOVUw7ICAg ICAgICAgICAgICAgICAgLyogV2lwZSBvdXQgYW55IG9sZCBvcHRpb25zICovCi0gICAgICAgIGlm ICgoeCA9IGNtdHh0KCJPcHRpb25zIGZvciByZW1vdGUgcHJpbnQgY29tbWFuZCIsIiIsJnMseHhz dHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHggPSByZW10 eHQoJnMpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKGludClzdHJs ZW4ob3B0YnVmKSA+IDk0KSB7IC8qIE1ha2Ugc3VyZSB0aGlzIGlzIGxlZ2FsICovCi0gICAgICAg ICAgICBwcmludGYoIj9PcHRpb24gc3RyaW5nIHRvbyBsb25nXG4iKTsKLSAgICAgICAgICAgIHJl dHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY3B5KG9wdGJ1ZixzLE9QVEJVRkxF Tik7ICAvKiBNYWtlIGEgc2FmZSBjb3B5IG9mIG9wdGlvbnMgKi8KLSAgICAgICAgbmZpbHMgPSAt MTsgICAgICAgICAgICAgICAgICAgICAvKiBFeHBhbmQgZmlsZSBsaXN0IGludGVybmFsbHkgKi8K LSAgICAgICAgY21hcmcgPSBsaW5lOyAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBmaWxl IGxpc3QuICovCi0gICAgICAgIHJwcmludGYgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogUkVN T1RFIFBSSU5UIG1vZGlmaWVyIGZvciBTRU5EICovCi0gICAgICAgIHNzdGF0ZSA9ICdzJzsgICAg ICAgICAgICAgICAgICAgLyogU2V0IHN0YXJ0IHN0YXRlIHRvIFNFTkQgKi8KLSAgICAgICAgaWYg KGxvY2FsKSBkaXNwbGEgPSAxOwotICAgICAgICByZXRjb2RlID0gMDsKLSAgICAgICAgYnJlYWs7 Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotICAgICAgY2FzZSBYWlNQQTogICAgICAgICAgICAg ICAgICAgICAgIC8qIFNwYWNlICovCi0gICAgICAgIGlmICgoeCA9IGNtdHh0KCJDb25maXJtLCBv ciByZW1vdGUgZGlyZWN0b3J5IG5hbWUiLAotICAgICAgICAgICAgICAgICAgICAgICAiIiwmcyx4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeCA9IHJl bXR4dCgmcykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIHJldGNvZGUgPSBz c3RhdGUgPSBzZXRnZW4oJ1UnLHMsIiIsIiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2Fz ZSBYWk1TRzogICAgICAgICAgICAgICAgICAgICAgIC8qIE1lc3NhZ2UgKi8KLSAgICAgICAgaWYg KCh4ID0gY210eHQoIlNob3J0IHRleHQgbWVzc2FnZSBmb3Igc2VydmVyIiwiIiwmcyx4eHN0cmlu ZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeCA9IHJlbXR4dCgm cykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIHJldGNvZGUgPSBzc3RhdGUg PSBzZXRnZW4oJ00nLHMsIiIsIiIpOwotICAgICAgICBicmVhazsKLQotI2lmbmRlZiBOT0ZSSUxM UwotICAgICAgY2FzZSBYWlRZUDogICAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgKi8KLSAg ICAgICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSBmaWxlIHNwZWNpZmljYXRpb24iLCIiLCZzLHh4 c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKChpbnQpc3Ry bGVuKHMpIDwgMSkgewotICAgICAgICAgICAgcHJpbnRmKCI/UmVtb3RlIGZpbGVuYW1lIHJlcXVp cmVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KCh4ID0gcmVtdHh0KCZzKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgcm1z ZygpOwotICAgICAgICByZXRjb2RlID0gc3N0YXRlID0gcmZpbG9wKHMsJ1QnKTsKLSAgICAgICAg YnJlYWs7Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotICAgICAg Y2FzZSBYWldITzoKLSAgICAgICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSB1c2VyIG5hbWUsIG9y IGNhcnJpYWdlIHJldHVybiIsCi0gICAgICAgICAgICAgICAgICAgICAgICIiLCZzLHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh4ID0gcmVtdHh0KCZz KSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgcmV0Y29kZSA9IHNzdGF0ZSA9 IHNldGdlbignVycscywiIiwiIik7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PRlJJTExT ICovCi0KLSAgICAgIGNhc2UgWFpQV0Q6ICAgICAgICAgICAgICAgICAgICAgICAvKiBQV0QgKi8K LSAgICAgICAgaWYgKCh4ID0gcmVtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBzc3Rh dGUgPSBzZXRnZW4oJ0EnLCIiLCIiLCIiKTsKLSAgICAgICAgcmV0Y29kZSA9IDA7Ci0gICAgICAg IGJyZWFrOwotCi0jaWZuZGVmIE5PU1BMCi0gICAgICBjYXNlIFhaUVVFOiB7ICAgICAgICAgICAg ICAgICAgICAgLyogUXVlcnkgKi8KLSAgICAgICAgICBjaGFyIGJ1ZlsyXTsKLSAgICAgICAgICBl eHRlcm4gY2hhciBxdWVyeWJ1ZltdLCAqIHFidWZwOwotICAgICAgICAgIGV4dGVybiBpbnQgcWJ1 Zm47Ci0gICAgICAgICAgaWYgKCh5ID0gY21rZXkodmFydHlwLG52YXJ0eXAsIiIsIiIseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgaWYgKCh4ID0gY210 eHQoeSA9PSAnRicgPyAiUmVtb3RlIGZ1bmN0aW9uIGludm9jYXRpb24iIDoKLSAgICAgICAgICAg ICAgICAgICAgICAgICAoJ0snID8gIlJlbW90ZSB2YXJpYWJsZSBuYW1lIG9yIGZ1bmN0aW9uIjoK LSAgICAgICAgICAgICAgICAgICAgICAgICAiUmVtb3RlIHZhcmlhYmxlIG5hbWUiKSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAmcywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAoeSA9PSAnSycpID8geHhzdHJpbmcgOiBOVUxMCi0gICAg ICAgICAgICAgICAgICAgICAgICAgKSkgPCAwKSAgICAgICAgLyogRG9uJ3QgZXZhbHVhdGUgKi8K LSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICBpZiAoKHggPSByZW10eHQoJnMpKSA8 IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgcXVlcnkgPSAxOyAgICAgICAg ICAgICAgICAgICAgLyogUVVFUlkgaXMgYWN0aXZlICovCi0gICAgICAgICAgcWJ1ZnAgPSBxdWVy eWJ1ZjsgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBxdWVyeSByZXNwb25zZSBidWZmZXIgKi8K LSAgICAgICAgICBxYnVmbiA9IDA7Ci0gICAgICAgICAgcXVlcnlidWZbMF0gPSBOVUw7Ci0gICAg ICAgICAgYnVmWzBdID0gKGNoYXIpICh5ICYgMTI3KTsKLSAgICAgICAgICBidWZbMV0gPSBOVUw7 Ci0gICAgICAgICAgcmV0Y29kZSA9IHNzdGF0ZSA9IHNldGdlbignVicsIlEiLChjaGFyICopYnVm LHMpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIFhaQVNHOiB7ICAg ICAgICAgICAgICAgICAgICAgLyogQXNzaWduICovCi0gICAgICAgICAgY2hhciBidWZbVk5BTUxd OwotICAgICAgICAgIGlmICgoeSA9IGNtZmxkKCJSZW1vdGUgdmFyaWFibGUgbmFtZSIsIiIsJnMs TlVMTCkpIDwgMCkgLyogTm8gZXZhbCAqLwotICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICAgIGlmICgoaW50KXN0cmxlbihzKSA+PSBWTkFNTCkgewotICAgICAgICAgICAgICBwcmludGYo Ij9Ub28gbG9uZ1xuIik7Ci0gICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgfQot ICAgICAgICAgIGNrc3RybmNweShidWYscyxWTkFNTCk7Ci0gICAgICAgICAgaWYgKCh4ID0gY210 eHQoIkFzc2lnbm1lbnQgZm9yIHJlbW90ZSB2YXJpYWJsZSIsCi0gICAgICAgICAgICAgICAgICAg IiIsJnMseHhzdHJpbmcpKSA8IDApIC8qIEV2YWx1YXRlIHRoaXMgb25lICovCi0gICAgICAgICAg ICByZXR1cm4oeCk7Ci0gICAgICAgICAgaWYgKCh4ID0gcmVtdHh0KCZzKSkgPCAwKQotICAgICAg ICAgICAgcmV0dXJuKHgpOwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFNlcnZlciBjb21tYW5kcyBj YW4ndCBiZSBsb25nIHBhY2tldHMuICBJbiBwcmluY2lwbGUgdGhlcmUncyBubyByZWFzb24KLSAg d2h5IHRoZXkgc2hvdWxkbid0IGJlLCBleGNlcHQgdGhhdCB3ZSBkb24ndCBrbm93IGF0IHRoaXMg cG9pbnQgaWYgdGhlCi0gIHNlcnZlciBpcyBjYXBhYmxlIG9mIGFjY2VwdGluZyBsb25nIHBhY2tl dHMgYmVjYXVzZSB3ZSBoYXZlbid0IHN0YXJ0ZWQKLSAgdGhlIHByb3RvY29sIHlldC4gIEluIHBy YWN0aWNlLCBhbGxvd2luZyBhIGxvbmcgcGFja2V0IGhlcmUgYnJlYWtzIGEgbG90Ci0gIG9mIGFz c3VtcHRpb25zLCBjYXVzZXMgYnVmZmVyIG92ZXJydW5zIGFuZCBjcmFzaGVzLCBldGMuICBUbyBi ZSBmaXhlZAotICBsYXRlci4gIChCdXQgc2luY2UgdGhpcyBpcyBjb21tZW50ZWQgb3V0LCBldmlk ZW50bHkgSSBmaXhlZCBpdCBsYXRlci4uLikKLSovCi0gICAgICAgICAgaWYgKChpbnQpc3RybGVu KHMpID4gODUpIHsgICAgLyogQWxsb3cgZm9yIGVuY29kaW5nIGV4cGFuc2lvbiAqLwotICAgICAg ICAgICAgICBwcmludGYoIj9Tb3JyeSwgdmFsdWUgaXMgdG9vIGxvbmcgLSA4NSBjaGFyYWN0ZXJz IG1heFxuIik7Ci0gICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgfQotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSAgICAgICAgICByZXRjb2RlID0gc3N0YXRlID0gc2V0Z2VuKCdWJywi UyIsKGNoYXIgKilidWYscyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0jZW5kaWYgLyog Tk9TUEwgKi8KLQotICAgICAgY2FzZSBYWkNQWTogeyAgICAgICAgICAgICAgICAgICAgIC8qIENP UFkgKi8KLSAgICAgICAgICBjaGFyIGJ1ZltUTVBCVUZTSVpdOwotICAgICAgICAgIGJ1ZltUTVBC VUZTSVotMV0gPSAnXDAnOwotICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJOYW1lIG9mIHJlbW90 ZSBmaWxlIHRvIGNvcHkiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgIGlm ICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgICBwcmludGYoIj9OYW1lIG9mIHJlbW90ZSBm aWxlIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgICB9Ci0gICAgICAgICAgY2tzdHJuY3B5KGJ1ZixzLFRNUEJVRlNJWik7Ci0gICAg ICAgICAgaWYgKCh4ID0gY21mbGQoIk5hbWUgb2YgcmVtb3RlIGRlc3RpbmF0aW9uIGZpbGUgb3Ig ZGlyZWN0b3J5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiIiwmcywgeHhzdHJpbmcpKSA8 IDApIHsKLSAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgIHBy aW50ZigiP05hbWUgb2YgcmVtb3RlIGZpbGUgb3IgZGlyZWN0b3J5IHJlcXVpcmVkXG4iKTsKLSAg ICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgIH0gZWxzZSByZXR1cm4o eCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVop OwotICAgICAgICAgIGlmICgoeCA9IHJlbWNmbSgpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4o eCk7Ci0gICAgICAgICAgaWYgKGxvY2FsKSB0dGZsdWkoKTsgICAgICAgICAgLyogSWYgbG9jYWws IGZsdXNoIHR0eSBpbnB1dCBidWZmZXIgKi8KLSAgICAgICAgICByZXRjb2RlID0gc3N0YXRlID0g c2V0Z2VuKCdLJyxidWYsdG1wYnVmLCIiKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAg ICAgIGNhc2UgWFpSRU46IHsgICAgICAgICAgICAgICAgICAgICAvKiBSZW5hbWUgKi8KLSAgICAg ICAgICBjaGFyIGJ1ZltUTVBCVUZTSVpdOwotICAgICAgICAgIGJ1ZltUTVBCVUZTSVotMV0gPSAn XDAnOwotICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJOYW1lIG9mIHJlbW90ZSBmaWxlIHRvIHJl bmFtZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDApIHsK LSAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgIHByaW50Zigi P05hbWUgb2YgcmVtb3RlIGZpbGUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgICAgcmV0 dXJuKC05KTsKLSAgICAgICAgICAgICAgfSBlbHNlIHJldHVybih4KTsKLSAgICAgICAgICB9Ci0g ICAgICAgICAgY2tzdHJuY3B5KGJ1ZixzLFRNUEJVRlNJWik7Ci0gICAgICAgICAgaWYgKCh4ID0g Y21mbGQoIk5ldyBuYW1lIG9mIHJlbW90ZSBmaWxlIiwiIiwmcywgeHhzdHJpbmcpKSA8IDApIHsK LSAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgIHByaW50Zigi P05hbWUgb2YgcmVtb3RlIGZpbGUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgICAgcmV0 dXJuKC05KTsKLSAgICAgICAgICAgICAgfSBlbHNlIHJldHVybih4KTsKLSAgICAgICAgICB9Ci0g ICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7Ci0gICAgICAgICAgaWYgKCh4 ID0gcmVtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICBpZiAo bG9jYWwpIHR0Zmx1aSgpOyAgICAgICAgICAvKiBJZiBsb2NhbCwgZmx1c2ggZGV2aWNlIGJ1ZmZl ciAqLwotICAgICAgICAgIHJldGNvZGUgPSBzc3RhdGUgPSBzZXRnZW4oJ1InLGJ1Zix0bXBidWYs IiIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBYWk1LRDogICAgICAg ICAgICAgICAgICAgICAgIC8qIG1rZGlyICovCi0gICAgICBjYXNlIFhaUk1EOiAgICAgICAgICAg ICAgICAgICAgICAgLyogcm1kaXIgKi8KLSAgICAgICAgaWYgKCh4ID0gY210eHQoKHh4ID09IFha TUtEKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICJOYW1lIG9mIHJlbW90ZSBkaXJlY3Rvcnkg dG8gY3JlYXRlIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICJOYW1lIG9mIHJlbW90ZSBkaXJl Y3RvcnkgdG8gZGVsZXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAg ICAgICAgICAgICAgICZzLAotICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZwotICAgICAg ICAgICAgICAgICAgICAgICApKSA8IDApIHsKLSAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0g ICAgICAgICAgICAgICAgcHJpbnRmKCI/TmFtZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0gZWxzZSByZXR1cm4oeCk7Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKCh4ID0gcmVtdHh0KCZzKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgaWYgKGxvY2FsKSB0dGZsdWkoKTsgICAgICAgICAgICAvKiBJZiBsb2NhbCwgZmx1 c2ggdHR5IGlucHV0IGJ1ZmZlciAqLwotICAgICAgICByZXRjb2RlID0gc3N0YXRlID0gcmZpbG9w KHMsIChjaGFyKSh4eCA9PSBYWk1LRCA/ICdtJyA6ICdkJykpOwotICAgICAgICBicmVhazsKLQot ICAgICAgY2FzZSBYWlhJVDogICAgICAgICAgICAgICAgICAgICAgIC8qIEV4aXQgKi8KLSAgICAg ICAgaWYgKCh4ID0gcmVtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBzc3RhdGUgPSBz ZXRnZW4oJ1gnLCIiLCIiLCIiKTsKLSAgICAgICAgcmV0Y29kZSA9IDA7Ci0gICAgICAgIGJyZWFr OwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoKHggPSByZW1jZm0oKSkgPCAwKSByZXR1 cm4oeCk7Ci0gICAgICAgIHByaW50ZigiP05vdCBpbXBsZW1lbnRlZCAtICVzXG4iLGNtZGJ1Zik7 Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotICAgIGlmIChsb2NhbCAmJiByZXRjb2RlID4g LTEpICAgICAgICAgIC8qIElmIGxvY2FsLCBmbHVzaCB0dHkgaW5wdXQgYnVmZmVyICovCi0gICAg ICB0dGZsdWkoKTsKLSAgICByZXR1cm4ocmV0Y29kZSk7Ci19Ci0KLQotLyogIFIgRiBJIEwgTyBQ ICAtLSAgUmVtb3RlIEZpbGUgT3BlcmF0aW9uICAqLwotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMK LXJmaWxvcChjaGFyICogcywgY2hhciB0KQotI2Vsc2UKLXJmaWxvcChzLHQpIGNoYXIgKnMsIHQ7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHJmaWxvcCAqLyB7Ci0gICAgaWYgKCpzID09IE5V TCkgewotICAgICAgICBwcmludGYoIj9GaWxlIHNwZWNpZmljYXRpb24gcmVxdWlyZWRcbiIpOwot ICAgICAgICByZXR1cm4oKENIQVIpIDApOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJyZmlsb3Ai LHMsdCk7Ci0gICAgcmV0dXJuKHNldGdlbih0LHMsIiIsIiIpKTsKLX0KLSNlbmRpZiAvKiBOT1hG RVIgKi8KLQotI2lmZGVmIEFOWVgyNQotaW50Ci1zZXR4MjUoKSB7Ci0gICAgaWYgKCh5ID0gY21r ZXkoeDI1dGFiLG54MjUsIlguMjUgY2FsbCBvcHRpb25zIiwiIix4eHN0cmluZykpIDwgMCkKLSAg ICAgIHJldHVybih5KTsKLSAgICBzd2l0Y2ggKHkpIHsKLSAgICAgIGNhc2UgWFlVREFUOgotICAg ICAgICBpZiAoKHogPSBjbWtleShvbm9mZiwyLCJYLjI1IGNhbGwgdXNlciBkYXRhIiwiIix4eHN0 cmluZykpCi0gICAgICAgICAgICA8IDApIHJldHVybih6KTsKLSAgICAgICAgaWYgKHogPT0gMCkg ewotICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7Ci0gICAgICAg ICAgICBjdWRhdGEgPSAwOyAgICAgICAgICAgICAvKiBkaXNhYmxlIGNhbGwgdXNlciBkYXRhICov Ci0gICAgICAgICAgICByZXR1cm4gKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgfQotICAgICAgICBp ZiAoKHggPSBjbXR4dCgiWC4yNSBjYWxsIHVzZXIgZGF0YSBzdHJpbmciLCIiLCZzLHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKChpbnQpc3RybGVuKHMp ID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiAoLTMpOwotICAgICAgICB9IGVsc2UgaWYgKChp bnQpc3RybGVuKHMpID4gTUFYQ1VEQVRBKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGUgbGVu Z3RoIG11c3QgYmUgPiAwIGFuZCA8PSAlZFxuIixNQVhDVURBVEEpOwotICAgICAgICAgICAgcmV0 dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVy bih5KTsKLSAgICAgICAgY2tzdHJuY3B5KHVkYXRhLHMsTUFYQ1VEQVRBKTsKLSAgICAgICAgY3Vk YXRhID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBYLjI1IGNhbGwgdXNlciBkYXRhIHNwZWNp ZmllZCAqLwotICAgICAgICByZXR1cm4gKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIGNhc2UgWFlDTE9T OgotICAgICAgICBpZiAoKHogPSBjbWtleShvbm9mZiwyLCJYLjI1IGNsb3NlZCB1c2VyIGdyb3Vw IGNhbGwiLCIiLHh4c3RyaW5nKSkKLSAgICAgICAgICAgIDwgMCkgcmV0dXJuKHopOwotICAgICAg ICBpZiAoeiA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApIHJldHVy bih6KTsKLSAgICAgICAgICAgIGNsb3NnciA9IC0xOyAgICAgICAgICAgICAgICAvKiBkaXNhYmxl IGNsb3NlZCB1c2VyIGdyb3VwICovCi0gICAgICAgICAgICByZXR1cm4gKHN1Y2Nlc3MgPSAxKTsK LSAgICAgICAgfQotICAgICAgICBpZiAoKHkgPSBjbW51bSgiMCA8PSBjdWcgaW5kZXggPj0gOTki LCIiLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAg aWYgKHggPCAwIHx8IHggPiA5OSkgewotICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMg YXJlIDAgPD0gY3VnIGluZGV4ID49IDk5XG4iKTsKLSAgICAgICAgICAgIHJldHVybigtMik7Ci0g ICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAg ICAgIGNsb3NnciA9IHg7ICAgICAgICAgICAgICAgICAgICAgLyogY2xvc2VkIHVzZXIgZ3JvdXAg c2VsZWN0ZWQgKi8KLSAgICAgICAgcmV0dXJuIChzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGNhc2Ug WFlSRVZDOgotICAgICAgICBpZigoeiA9IGNta2V5KG9ub2ZmLDIsIlguMjUgcmV2ZXJzZSBjaGFy Z2UgY2FsbCIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHopOwotICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgcmV2Y2FsbCA9IHo7 Ci0gICAgICAgIHJldHVybiAoc3VjY2VzcyA9IDEpOwotICAgIH0KLX0KLQotI2lmbmRlZiBJQk1Y MjUKLWludAotc2V0cGFkcCgpIHsKLSAgICBpZiAoKHkgPSBjbWtleShwYWR4M3RhYixucGFkeDMs IlBBRCBYLjMgcGFyYW1ldGVyIG5hbWUiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJu KHkpOwotICAgIHggPSB5OwotICAgIHN3aXRjaCAoeCkgewotICAgICAgY2FzZSBQQURfQlJFQUtf Q0hBUkFDVEVSOgotICAgICAgICBpZiAoKHkgPSBjbW51bSgiUEFEIGJyZWFrIGNoYXJhY3RlciB2 YWx1ZSIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAg ICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgICBjYXNlIFBBRF9FU0NBUEU6Ci0gICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQgZXNjYXBl IiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBpZiAoeiAhPSAw ICYmIHogIT0gMSkgewotICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJlIDAgb3Ig MVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgo eSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug UEFEX0VDSE86Ci0gICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQgZWNobyIsIiIsMTAsJnoseHhz dHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgaWYgKHogIT0gMCAmJiB6ICE9IDEpIHsK LSAgICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9yIDFcbiIpOwotICAgICAg ICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8 IDApIHJldHVybih5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFBBRF9EQVRBX0ZPUldB UkRfQ0hBUjoKLSAgICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCBkYXRhIGZvcndhcmQgY2hhciIs IiIsMTAsJnoseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBp ZiAoeiAhPSAwICYmIHogIT0gMikgewotICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMg YXJlIDAgb3IgMlxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAg ICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBicmVhazsKLSAg ICAgIGNhc2UgUEFEX0RBVEFfRk9SV0FSRF9USU1FT1VUOgotICAgICAgICBpZiAoKHkgPSBjbW51 bSgiUEFEIGRhdGEgZm9yd2FyZCB0aW1lb3V0IiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkKLSAg ICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgaWYgKHogPCAwIHx8IHogPiAyNTUpIHsKLSAg ICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9yIDEgPD0gdGltZW91dCA8PSAy NTVcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl IFBBRF9GTE9XX0NPTlRST0xfQllfUEFEOgotICAgICAgICBpZiAoKHkgPSBjbW51bSgiUEFEIHBh ZCBmbG93IGNvbnRyb2wiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVy bih5KTsKLSAgICAgICAgaWYgKHogIT0gMCAmJiB6ICE9IDEpIHsKLSAgICAgICAgICAgIHByaW50 ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9yIDFcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsK LSAgICAgICAgfQotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFBBRF9TVVBQUkVTU0lPTl9PRl9TSUdOQUxTOgotICAg ICAgICBpZiAoKHkgPSBjbW51bSgiUEFEIHNlcnZpY2UiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAw KSByZXR1cm4oeSk7Ci0gICAgICAgIGlmICh6ICE9IDAgJiYgeiAhPSAxKSB7Ci0gICAgICAgICAg ICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUgMCBvciAxXG4iKTsKLSAgICAgICAgICAgIHJldHVy bigtMik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFBBRF9CUkVBS19BQ1RJT046Ci0gICAg ICAgIGlmICgoeSA9IGNtbnVtKCJQQUQgYnJlYWsgYWN0aW9uIiwiIiwxMCwmeix4eHN0cmluZykp IDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBpZiAoeiAhPSAwICYmIHogIT0gMSAmJiB6ICE9IDIg JiYgeiAhPSA1ICYmIHogIT0gOCAmJiB6ICE9IDIxKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9U aGUgY2hvaWNlcyBhcmUgMCwgMSwgMiwgNSwgOCBvciAyMVxuIik7Ci0gICAgICAgICAgICByZXR1 cm4oLTIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHkpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBQQURfU1VQUFJFU1NJT05fT0ZfREFU QToKLSAgICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCBkYXRhIGRlbGl2ZXJ5IiwiIiwxMCwmeix4 eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBpZiAoeiAhPSAwICYmIHogIT0gMSkg ewotICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJlIDAgb3IgMVxuIik7Ci0gICAg ICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBQQURfUEFERElO R19BRlRFUl9DUjoKLSAgICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCBjcnBhZCIsIiIsMTAsJnos eHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgaWYgKHogPCAwIHx8IHogPiA3KSB7 Ci0gICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUgMCBvciAxIDw9IGNycGFkIDw9 IDdcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh c2UgUEFEX0xJTkVfRk9MRElORzoKLSAgICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCBsaW5lZm9s ZCIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgaWYgKHogPCAw IHx8IHogPiAyNTUpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9y IDEgPD0gbGluZWZvbGQgPD0gMjU1XG4iKTsKLSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAg IGJyZWFrOwotCi0gICAgICBjYXNlIFBBRF9MSU5FX1NQRUVEOgotICAgICAgICBpZiAoKHkgPSBj bW51bSgiUEFEIGJhdWRyYXRlIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwot ICAgICAgICBpZiAoeiA8IDAgfHwgeiA+IDE4KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGUg Y2hvaWNlcyBhcmUgMCA8PSBiYXVkcmF0ZSA8PSAxOFxuIik7Ci0gICAgICAgICAgICByZXR1cm4o LTIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkp OwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBQQURfRkxPV19DT05UUk9MX0JZX1VTRVI6 Ci0gICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQgdGVybWluYWwgZmxvdyBjb250cm9sIiwiIiwx MCwmeix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgaWYg KHogIT0gMCAmJiB6ICE9IDEpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFy ZSAwIG9yIDFcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg ICAgIGNhc2UgUEFEX0xGX0FGVEVSX0NSOgotICAgICAgICBpZiAoKHkgPSBjbW51bSgiUEFEIGNy cGFkIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBpZiAoeiA8 IDAgfHwgeiA9PSAzIHx8IHogPiA3KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNl cyBhcmUgMCwgMSwgMiwgNCwgNSwgNiBvciA3XG4iKTsKLSAgICAgICAgICAgIHJldHVybigtMik7 Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0g ICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFBBRF9QQURESU5HX0FGVEVSX0xGOgotICAgICAg ICBpZiAoKHkgPSBjbW51bSgiUEFEIGxmcGFkIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkgcmV0 dXJuKHkpOwotICAgICAgICBpZiAoeiA8IDAgfHwgeiA+IDcpIHsKLSAgICAgICAgICAgIHByaW50 ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9yIDEgPD0gbGZwYWQgPD0gN1xuIik7Ci0gICAgICAgICAg ICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkg cmV0dXJuKHkpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBQQURfRURJVElORzoKLSAg ICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCBlZGl0IGNvbnRyb2wiLCIiLDEwLCZ6LHh4c3RyaW5n KSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGlmICh6ICE9IDAgJiYgeiAhPSAxKSB7Ci0gICAg ICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUgMCBvciAxXG4iKTsKLSAgICAgICAgICAg IHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFBBRF9DSEFSX0RFTEVURV9D SEFSOgotICAgICAgICBpZiAoKHkgPSBjbW51bSgiUEFEIGNoYXIgZGVsZXRlIGNoYXIiLCIiLDEw LCZ6LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBpZiAo eiA8IDAgfHwgeiA+IDEyNykgewotICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJl IDAgb3IgMSA8PSBjaGFyZGVsZXRlIDw9IDEyN1xuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTIp OwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwot ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBQQURfQlVGRkVSX0RFTEVURV9DSEFSOgotICAg ICAgICBpZiAoKHkgPSBjbW51bSgiUEFEIGJ1ZmZlciBkZWxldGUgY2hhciIsIiIsMTAsJnoseHhz dHJpbmcpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGlmICh6IDwgMCB8 fCB6ID4gMTI3KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUgMCBvciAx IDw9IGJ1ZmZlcmRlbGV0ZSA8PSAxMjdcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAg ICAgICAgfQotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAg ICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgUEFEX0JVRkZFUl9ESVNQTEFZX0NIQVI6Ci0gICAgICAg IGlmICgoeSA9IGNtbnVtKCJQQUQgZGlzcGxheSBsaW5lIGNoYXIiLCIiLDEwLCZ6LHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBpZiAoeiA8IDAgfHwgeiA+ IDEyNykgewotICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJlIDAgb3IgMSA8PSBk aXNwbGF5bGluZSA8PSAxMjdcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAg fQotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgYnJl YWs7Ci0gICAgfQotICAgIHBhZHBhcm1zW3hdID0gejsKLSAgICByZXR1cm4oc3VjY2VzcyA9IDEp OwotfQotI2VuZGlmIC8qIElCTVgyNSAqLwotI2VuZGlmIC8qIEFOWVgyNSAqLwotCi0jaWZuZGVm IE5PWEZFUgotaW50Ci1zZXRhdChybXNmbGcpIGludCBybXNmbGc7IHsKLSAgICBpbnQgeHg7Ci0g ICAgaWYgKCh5ID0gY21rZXkoYXR0cnRhYixuYXRyLCJGaWxlIEF0dHJpYnV0ZSBwYWNrZXRzIiwi Iix4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih5KTsKLSAgICBpZiAoeSA9PSBBVF9YQUxM KSB7ICAgICAgICAgICAgICAgICAvKiBBVFRSSUJVVEVTIEFMTCBPTiBvciBBTEwgT0ZGICovCi0g ICAgICAgIGlmICgoeiA9IHNldG9uKCZ4eCkpIDwgMCkgcmV0dXJuKHopOwotICAgICAgICBpZiAo cm1zZmxnKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBjb21tYW5kIG5vdCBhdmFpbGFi bGVcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgIGF0ZW5jaSA9IHh4OyAgICAgICAgICAgICAgICAvKiBFbmNvZGluZyBpbiAqLwotICAg ICAgICAgICAgYXRlbmNvID0geHg7ICAgICAgICAgICAgICAgIC8qIEVuY29kaW5nIG91dCAqLwot ICAgICAgICAgICAgYXRkYXRpID0geHg7ICAgICAgICAgICAgICAgIC8qIERhdGUgaW4gKi8KLSAg ICAgICAgICAgIGF0ZGF0byA9IHh4OyAgICAgICAgICAgICAgICAvKiBEYXRlIG91dCAqLwotICAg ICAgICAgICAgYXRkaXNpID0geHg7ICAgICAgICAgICAgICAgIC8qIERpc3Bvc2l0aW9uIGluL291 dCAqLwotICAgICAgICAgICAgYXRkaXNvID0geHg7Ci0gICAgICAgICAgICBhdGxlbmkgPSB4eDsg ICAgICAgICAgICAgICAgLyogTGVuZ3RoIGluL291dCAoYm90aCBraW5kcykgKi8KLSAgICAgICAg ICAgIGF0bGVubyA9IHh4OwotICAgICAgICAgICAgYXRibGtpID0geHg7ICAgICAgICAgICAgICAg IC8qIEJsb2Nrc2l6ZSBpbi9vdXQgKi8KLSAgICAgICAgICAgIGF0YmxrbyA9IHh4OwotICAgICAg ICAgICAgYXR0eXBpID0geHg7ICAgICAgICAgICAgICAgIC8qIEZpbGUgdHlwZSBpbi9vdXQgKi8K LSAgICAgICAgICAgIGF0dHlwbyA9IHh4OwotICAgICAgICAgICAgYXRzaWRpID0geHg7ICAgICAg ICAgICAgICAgIC8qIFN5c3RlbSBJRCBpbi9vdXQgKi8KLSAgICAgICAgICAgIGF0c2lkbyA9IHh4 OwotICAgICAgICAgICAgYXRzeXNpID0geHg7ICAgICAgICAgICAgICAgIC8qIFN5c3RlbS1kZXBl bmRlbnQgcGFyYW1zIGluL291dCAqLwotICAgICAgICAgICAgYXRzeXNvID0geHg7Ci0jaWZkZWYg Q0tfUEVSTVMgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvdGVjdGlvbiAqLwotICAgICAg ICAgICAgYXRscHJpID0geHg7ICAgICAgICAgICAgICAgIC8qIExvY2FsIGluICovCi0gICAgICAg ICAgICBhdGxwcm8gPSB4eDsgICAgICAgICAgICAgICAgLyogTG9jYWwgb3V0ICovCi0gICAgICAg ICAgICBhdGdwcmkgPSB4eDsgICAgICAgICAgICAgICAgLyogR2VuZXJpYyBpbiAqLwotICAgICAg ICAgICAgYXRncHJvID0geHg7ICAgICAgICAgICAgICAgIC8qIEdlbmVyaWMgb3V0ICovCi0jZW5k aWYgLyogQ0tfUEVSTVMgKi8KLSNpZmRlZiBTVFJBVFVTCi0gICAgICAgICAgICBhdGZybWkgPSB4 eDsgICAgICAgICAgICAgICAgLyogRm9ybWF0IGluL291dCAqLwotICAgICAgICAgICAgYXRmcm1v ID0geHg7Ci0gICAgICAgICAgICBhdGNyZWkgPSB4eDsgICAgICAgICAgICAgICAgLyogQ3JlYXRv ciBpZCBpbi9vdXQgKi8KLSAgICAgICAgICAgIGF0Y3JlbyA9IHh4OwotICAgICAgICAgICAgYXRh Y3RpID0geHg7ICAgICAgICAgICAgICAgIC8qIEFjY291bnQgaW4vb3V0ICovCi0gICAgICAgICAg ICBhdGFjdG8gPSB4eDsKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0gICAgICAgIH0KLSAgICAgICAg cmV0dXJuKHopOwotICAgIH0gZWxzZSBpZiAoeSA9PSBBVF9BTExZIHx8IHkgPT0gQVRfQUxMTikg eyAvKiBBVFRSSUJVVEVTIE9OIG9yIE9GRiAqLwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8 IDApIHJldHVybih4KTsKLSAgICAgICAgYXRjYXByID0gKHkgPT0gQVRfQUxMWSkgPyAxIDogMDsK LSAgICAgICAgaWYgKHJtc2ZsZykgewotICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywg IjEzMiIsIGF0Y2FwciA/ICIxIiA6ICIwIiwgIiIpOwotICAgICAgICAgICAgcmV0dXJuKChpbnQp IHNzdGF0ZSk7Ci0gICAgICAgIH0gZWxzZSByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIH0KLSAg ICAvKiBPdGhlcndpc2UsIGl0J3MgYW4gaW5kaXZpZHVhbCBhdHRyaWJ1dGUgdGhhdCB3YW50cyB0 dXJuaW5nIG9mZi9vbiAqLwotCi0gICAgaWYgKCh6ID0gY21rZXkob25vZmYsMiwiIiwiIix4eHN0 cmluZykpIDwgMCkgcmV0dXJuKHopOwotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHgpOwotCi0vKiBUaGVyZSBhcmUgYmV0dGVyIHdheXMgdG8gZG8gdGhpcy4uLiAqLwotLyogVGhl IHJlYWwgcHJvYmxlbSBpcyB0aGF0IHdlJ3JlIG5vdCBzZXBhcmF0aW5nIHRoZSBpbiBhbmQgb3V0 IGNhc2VzICovCi0vKiBhbmQgc28gd2UgaGF2ZSB0byBhcmJpdHJhcmlseSBwaWNrIHRoZSAiaW4i IGNhc2UsIGkuZSB0ZWxsIHRoZSByZW1vdGUgKi8KLS8qIHNlcnZlciB0byBpZ25vcmUgaW5jb21p bmcgYXR0cmlidXRlcyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUsIHJhdGhlciAqLwotLyogdGhhbiB0 ZWxsaW5nIGl0IG5vdCB0byBzZW5kIHRoZW0uICBUaGUgcHJvdG9jb2wgZG9lcyBub3QgKHlldCkg ZGVmaW5lICovCi0vKiBjb2RlcyBmb3IgImluLWFuZC1vdXQtYXQtdGhlLXNhbWUtdGltZSIuICov Ci0KLSAgICBzd2l0Y2ggKHkpIHsKLSNpZmRlZiBDS19QRVJNUwotLyogV2UncmUgbHVtcGluZyBs b2NhbCBhbmQgZ2VuZXJpYyBwcm90ZWN0aW9uIHRvZ2V0aGVyIGZvciBub3cuLi4gKi8KLSAgICAg IGNhc2UgQVRfTFBSTzoKLSAgICAgIGNhc2UgQVRfR1BSTzoKLSAgICAgICAgaWYgKHJtc2ZsZykg ewotICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjE0MyIsIHogPyAiMSIgOiAiMCIs ICIiKTsKLSAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotICAgICAgICB9Ci0gICAg ICAgIGF0bHByaSA9IGF0bHBybyA9IGF0Z3ByaSA9IGF0Z3BybyA9IHo7IGJyZWFrOwotI2VuZGlm IC8qIENLX1BFUk1TICovCi0gICAgICBjYXNlIEFUX0RJU1A6Ci0gICAgICAgIGlmIChybXNmbGcp IHsKLSAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIxNDIiLCB6ID8gIjEiIDogIjAi LCAiIik7Ci0gICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgfQotICAg ICAgICBhdGRpc2kgPSBhdGRpc28gPSB6OyBicmVhazsKLSAgICAgIGNhc2UgQVRfRU5DTzoKLSAg ICAgICAgaWYgKHJtc2ZsZykgewotICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjE0 MSIsIHogPyAiMSIgOiAiMCIsICIiKTsKLSAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUp OwotICAgICAgICB9Ci0gICAgICAgIGF0ZW5jaSA9IGF0ZW5jbyA9IHo7IGJyZWFrOwotICAgICAg Y2FzZSBBVF9EQVRFOgotICAgICAgICBpZiAocm1zZmxnKSB7Ci0gICAgICAgICAgICBzc3RhdGUg PSBzZXRnZW4oJ1MnLCAiMTM1IiwgeiA/ICIxIiA6ICIwIiwgIiIpOwotICAgICAgICAgICAgcmV0 dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXRkYXRpID0gYXRkYXRvID0g ejsgYnJlYWs7Ci0gICAgICBjYXNlIEFUX0xFTkI6Ci0gICAgICBjYXNlIEFUX0xFTks6Ci0gICAg ICAgIGlmIChybXNmbGcpIHsKLSAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIxMzMi LCB6ID8gIjEiIDogIjAiLCAiIik7Ci0gICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsK LSAgICAgICAgfQotICAgICAgICBhdGxlbmkgPSBhdGxlbm8gPSB6OyBicmVhazsKLSAgICAgIGNh c2UgQVRfQkxLUzoKLSAgICAgICAgaWYgKHJtc2ZsZykgewotICAgICAgICAgICAgc3N0YXRlID0g c2V0Z2VuKCdTJywgIjEzOSIsIHogPyAiMSIgOiAiMCIsICIiKTsKLSAgICAgICAgICAgIHJldHVy bigoaW50KSBzc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGF0YmxraSA9IGF0YmxrbyA9IHo7 IGJyZWFrOwotICAgICAgY2FzZSBBVF9GVFlQOgotICAgICAgICBpZiAocm1zZmxnKSB7Ci0gICAg ICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMTM0IiwgeiA/ICIxIiA6ICIwIiwgIiIpOwot ICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXR0 eXBpID0gYXR0eXBvID0gejsgYnJlYWs7Ci0jaWZkZWYgU1RSQVRVUwotICAgICAgY2FzZSBBVF9D UkVBOgotICAgICAgICBpZiAocm1zZmxnKSB7Ci0gICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4o J1MnLCAiMTM2IiwgeiA/ICIxIiA6ICIwIiwgIiIpOwotICAgICAgICAgICAgcmV0dXJuKChpbnQp IHNzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXRjcmVpID0gYXRjcmVvID0gejsgYnJlYWs7 Ci0gICAgICBjYXNlIEFUX0FDQ1Q6Ci0gICAgICAgIGlmIChybXNmbGcpIHsKLSAgICAgICAgICAg IHNzdGF0ZSA9IHNldGdlbignUycsICIxMzciLCB6ID8gIjEiIDogIjAiLCAiIik7Ci0gICAgICAg ICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBhdGFjdGkgPSBh dGFjdG8gPSB6OyBicmVhazsKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0gICAgICBjYXNlIEFUX1NZ U0k6Ci0gICAgICAgIGlmIChybXNmbGcpIHsKLSAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbign UycsICIxNDUiLCB6ID8gIjEiIDogIjAiLCAiIik7Ci0gICAgICAgICAgICByZXR1cm4oKGludCkg c3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBhdHNpZGkgPSBhdHNpZG8gPSB6OyBicmVhazsK LSAgICAgIGNhc2UgQVRfUkVDRjoKLSAgICAgICAgaWYgKHJtc2ZsZykgewotICAgICAgICAgICAg c3N0YXRlID0gc2V0Z2VuKCdTJywgIjE0NiIsIHogPyAiMSIgOiAiMCIsICIiKTsKLSAgICAgICAg ICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGF0ZnJtaSA9IGF0 ZnJtbyA9IHo7IGJyZWFrOwotICAgICAgY2FzZSBBVF9TWVNQOgotICAgICAgICBpZiAocm1zZmxn KSB7Ci0gICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMTQ3IiwgeiA/ICIxIiA6ICIw IiwgIiIpOwotICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgIH0KLSAg ICAgICAgYXRzeXNpID0gYXRzeXNvID0gejsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAg ICBwcmludGYoIj9Ob3QgYXZhaWxhYmxlXG4iKTsKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9 Ci0gICAgcmV0dXJuKDEpOwotfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PU1BM Ci1pbnQKLXNldGlucCgpIHsKLSAgICBpZiAoKHkgPSBjbWtleShpbnB0YWIsbmlucCwiIiwiIix4 eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgIHN3aXRjaCAoeSkgewotI2lmZGVmIE9TMgot ICAgICAgY2FzZSBJTl9QQUM6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBJTlBVVCBQQUNJ TkcgKi8KLSAgICAgICAgeiA9IGNtbnVtKCJtaWxsaXNlY29uZHMiLCIwIiwxMCwmeCx4eHN0cmlu Zyk7Ci0gICAgICAgIHJldHVybihzZXRudW0oJnR0X2lucGFjaW5nLHgseiwxMDAwKSk7Ci0gICAg ICBjYXNlIElOX1RSTTogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIElOUFVUIFRFUk1JTkFM ICovCi0gICAgICAgIHJldHVybihzZXRvbigmaW50ZXJtKSk7Ci0jZW5kaWYgLyogT1MyICovCi0g ICAgICBjYXNlIElOX0RFRjogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIElOUFVUIERFRkFV TFQtVElNRU9VVCAqLwotICAgICAgICB6ID0gY21udW0oIlBvc2l0aXZlIG51bWJlciIsIiIsMTAs JngseHhzdHJpbmcpOwotICAgICAgICByZXR1cm4oc2V0bnVtKCZpbmRlZix4LHosOTQpKTsKLSNp ZmRlZiBDS0ZMT0FUCi0gICAgICBjYXNlIElOX1NDQTogICAgICAgICAgICAgICAgICAgICAgLyog U0VUIElOUFVUIFNDQUxFLUZBQ1RPUiAqLwotCWlmICgoeCA9IGNtZmxkKCJOdW1iZXIgc3VjaCBh cyAyIG9yIDAuNSIsIjEuMCIsJnMsIHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHgpOwotICAg ICAgICBpZiAoaXNmbG9hdChzLDApKSB7CQkvKiBBIGZsb2F0aW5nLXBvaW50IG51bWJlcj8gKi8K LSAgICAgICAgICAgIGV4dGVybiBjaGFyICogaW5wc2NhbGU7Ci0JICAgIGluc2NhbGUgPSBmbG9h dHZhbDsJCS8qIFllcywgZ2V0IGl0cyB2YWx1ZSAqLwotCSAgICBtYWtlc3RyKCZpbnBzY2FsZSxz KTsJLyogU2F2ZSBpdCBhcyBcdihpbnNjYWxlKSAqLwotCSAgICByZXR1cm4oc3VjY2VzcyA9IDEp OwotCX0gZWxzZSB7Ci0JICAgIHJldHVybigtMik7Ci0JfQotI2VuZGlmCS8qIENLRkxPQVQgKi8K LSAgICAgIGNhc2UgSU5fVElNOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgSU5QVVQgVElN RU9VVC1BQ1RJT04gKi8KLSAgICAgICAgaWYgKCh6ID0gY21rZXkoaW50aW10LDIsIiIsIiIseHhz dHJpbmcpKSA8IDApIHJldHVybih6KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeCk7Ci0gICAgICAgIGludGltZVtjbWRsdmxdID0gejsKLSAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKLSAgICAgIGNhc2UgSU5fQ0FTOiAgICAgICAgICAgICAgICAgICAgICAvKiBT RVQgSU5QVVQgQ0FTRSAqLwotICAgICAgICBpZiAoKHogPSBjbWtleShpbmNhc3QsMiwiIiwiIix4 eHN0cmluZykpIDwgMCkgcmV0dXJuKHopOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp IHJldHVybih4KTsKLSAgICAgICAgaW5wY2FzW2NtZGx2bF0gPSB6OwotICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOwotICAgICAgY2FzZSBJTl9FQ0g6ICAgICAgICAgICAgICAgICAgICAgIC8q IFNFVCBJTlBVVCBFQ0hPICovCi0gICAgICAgIHJldHVybihzZXRvbigmaW5lY2hvKSk7Ci0gICAg ICBjYXNlIElOX1NJTDogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIElOUFVUIFNJTEVOQ0Ug Ki8KLSAgICAgICAgeiA9IGNtbnVtKCJTZWNvbmRzIG9mIGluYWN0aXZpdHkgYmVmb3JlIElOUFVU IGZhaWxzIiwiIiwxMCwmeCwKLSAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKTsKLSAgICAgICAg cmV0dXJuKHNldG51bSgmaW5zaWxlbmNlLHgseiwtMSkpOwotCi0gICAgICBjYXNlIElOX0JVRjog ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIElOUFVUIEJVRkZFUi1TSVpFICovCi0gICAgICAg IGlmICgoeiA9IGNtbnVtKCJOdW1iZXIgb2YgYnl0ZXMgaW4gSU5QVVQgYnVmZmVyIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgY2tpdG9hKElOUEJVRlNJWiksMTAsJngsIHh4c3RyaW5nKSkgPCAw KQotICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeSk7Ci0gICAgICAgIGluYnVmc2l6ZSA9IDA7Ci0gICAgICAgIGlmIChpbnBidWYpIHsK LSAgICAgICAgICAgIGZyZWUoaW5wYnVmKTsKLSAgICAgICAgICAgIGlucGJ1ZiA9IE5VTEw7Ci0g ICAgICAgICAgICBpbnBicCA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCEocyA9IChj aGFyICopbWFsbG9jKHggKyAxKSkpCi0gICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICBpbnBi dWYgPSBzOwotICAgICAgICBpbnBicCA9IHM7Ci0gICAgICAgIGluYnVmc2l6ZSA9IHg7Ci0gICAg ICAgIGZvciAoeCA9IDA7IHggPD0gaW5idWZzaXplOyB4KyspCi0gICAgICAgICAgaW5wYnVmW3hd ID0gTlVMOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0jaWZkZWYgQ0tfQVVUT0RM Ci0gICAgICBjYXNlIElOX0FETDogICAgICAgICAgICAgICAgICAgICAgLyogQVVUT0RPV05MT0FE ICovCi0gICAgICAgIHJldHVybihzZXRvbigmaW5hdXRvZGwpKTsKLSNlbmRpZiAvKiBDS19BVVRP REwgKi8KLQotICAgICAgY2FzZSBJTl9DQU46ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBJ TlBVVCBJTlRFUlJVUFRTICovCi0gICAgICAgIHJldHVybihzZXRvbigmaW5pbnRyKSk7Ci0gICAg fQotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgTkVUQ09O TgotVk9JRAotbmRyZXNldCgpIHsKLSNpZm5kZWYgTk9ESUFMICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBUaGlzIGRlcGVuZHMgb24gRElBTC4uLiAqLwotICAgIGludCBpPTAsIGo9MDsKLSAg ICBpZiAoIW5kaW5pdGVkKSAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBmcmVlIGdhcmJh Z2UuLi4gKi8KLSAgICAgIHJldHVybjsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbmhjb3VudDsgaSsr KSB7ICAgICAvKiBDbGVhbiBvdXQgcHJldmlvdXMgbGlzdCAqLwotICAgICAgICBpZiAobmhfcFtp XSkKLSAgICAgICAgICBmcmVlKG5oX3BbaV0pOwotICAgICAgICBuaF9wW2ldID0gTlVMTDsKLSAg ICAgICAgaWYgKG5oX3AyW2ldKQotICAgICAgICAgIGZyZWUobmhfcDJbaV0pOwotICAgICAgICBu aF9wMltpXSA9IE5VTEw7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKLSAgICAg ICAgICAgIGlmIChuaF9weFtqXVtpXSkKLSAgICAgICAgICAgICAgZnJlZShuaF9weFtqXVtpXSk7 Ci0gICAgICAgICAgICBuaF9weFtqXVtpXSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k aWYgLyogTk9ESUFMICovCi19Ci0KLVZPSUQKLW5kaW5pdCgpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBOZXQgZGlyZWN0b3J5IHBvaW50ZXJzICovCi0jaWZuZGVmIE5PRElBTCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBkZXBlbmRzIG9uIERJQUwuLi4gKi8KLSAg ICBpbnQgaSwgajsKLSAgICBpZiAobmRpbml0ZWQrKykgICAgICAgICAgICAgICAgICAgICAvKiBE b24ndCBkbyB0aGlzIG1vcmUgdGhhbiBvbmNlLiAqLwotICAgICAgcmV0dXJuOwotICAgIGZvciAo aSA9IDA7IGkgPCBNQVhERElSOyBpKyspIHsgICAgIC8qIEluaXQgYWxsIHBvaW50ZXJzIHRvIE5V TEwgKi8KLSAgICAgICAgbmV0ZGlyW2ldID0gTlVMTDsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsg aSA8IE1BWEROVU1TOyBpKyspIHsKLSAgICAgICAgbmhfcFtpXSA9IE5VTEw7Ci0gICAgICAgIG5o X3AyW2ldID0gTlVMTDsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IDQ7IGorKykKLSAgICAgICAg ICBuaF9weFtqXVtpXSA9IE5VTEw7Ci0gICAgfQotI2VuZGlmIC8qIE5PRElBTCAqLwotfQotCi0j aWZuZGVmIE5PRElBTAotI2lmZGVmIE5FVENPTk4KLVZPSUQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBHZXQgbmV0IGRlZmF1bHRzIGZyb20gZW52aXJvbm1lbnQgKi8KLWdl dG5ldGVudigpIHsKLSAgICBjaGFyICpwID0gTlVMTDsKLQotICAgIG1ha2VzdHIoJnAsZ2V0ZW52 KCJLX05FVF9ESVJFQ1RPUlkiKSk7IC8qIERpYWxpbmcgZGlyZWN0b3JpZXMgKi8KLSAgICBpZiAo cCkgewotICAgICAgICBpbnQgaTsKLSAgICAgICAgeHdvcmRzKHAsTUFYRERJUixuZXRkaXIsMCk7 Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBNQVhERElSOyBpKyspIHsgLyogRmlsbCBpbiBhbnkg Z2Fwcy4uLiAqLwotICAgICAgICAgICAgaWYgKCFuZXRkaXJbaSsxXSkKLSAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIG5ldGRpcltpXSA9IG5ldGRp cltpKzFdOwotICAgICAgICAgICAgZGVidWcoRjExMSwibmV0ZGlyW2ldIixuZXRkaXJbaV0saSk7 Ci0gICAgICAgIH0KLSAgICAgICAgbm5ldGRpciA9IGk7Ci0gICAgfQotfQotI2VuZGlmIC8qIE5F VENPTk4gKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWx1 bmV0KGNoYXIgKnMpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzID0gbmFtZSB0byBsb29r IHVwICAgKi8KLSNlbHNlCi1sdW5ldChzKSBjaGFyICpzOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0vKiBsdW5ldCAqLyB7Ci0jaWZuZGVmIE5PRElBTCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogVGhpcyBkZXBlbmRzIG9uIERJQUwuLi4gKi8KLSAgICBpbnQgbiwgbjEsIHQsIGRkID0gMDsK LSAgICBpbnQgYW1iaWd1b3VzID0gMDsKLSAgICBGSUxFICogZjsKLSAgICBjaGFyICpsaW5lID0g TlVMTDsKLSAgICBleHRlcm4gaW50IGRpYWxkcHk7Ci0gICAgaW50IG5ldGRweSA9IGRpYWxkcHk7 Ci0gICAgY2hhciAqaW5mb1s4XTsKLQotICAgIG5oY291bnQgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNldCB0aGlzIGJlZm9yZSByZXR1cm5pbmcgKi8KLQotICAgIGlmICghcyB8fCBu bmV0ZGlyIDwgMSkgICAgICAgICAgICAgIC8qIFZhbGlkYXRlIGFyZ3VtZW50cyAqLwotICAgICAg cmV0dXJuKC0xKTsKLQotICAgIGlmIChpc2RpZ2l0KCpzKSB8fCAqcyA9PSAnKicgfHwgKnMgPT0g Jy4nKQotICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKChuMSA9IChpbnQpIHN0cmxlbihzKSkg PCAxKSAgICAgLyogTGVuZ3RoIG9mIHN0cmluZyB0byBsb29rIHVwICovCi0gICAgICByZXR1cm4o LTEpOwotCi0gICAgaWYgKCEobGluZSA9IG1hbGxvYygxMDI0KSkpICAgICAgICAgLyogQWxsb2Nh dGUgaW5wdXQgYnVmZmVyICovCi0gICAgICByZXR1cm4oLTEpOwotCi0gIGx1X2FnYWluOgotICAg IGYgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgZGlyZWN0b3J5 IGZpbGUgZGVzY3JpcHRvciAqLwotICAgIHQgPSBuaGNvdW50ID0gMDsgICAgICAgICAgICAgICAg ICAgIC8qIE1hdGNoIGNvdW50ICovCi0gICAgZGQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRGlyZWN0b3J5IGNvdW50ZXIgKi8KLQotICAgIGRpcmxpbmUgPSAwOwotICAgIHdo aWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIG1ha2Ugb25lIHBhc3MgKi8K LSAgICAgICAgaWYgKCFmKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXJlY3Rvcnkgbm90 IG9wZW4gKi8KLSAgICAgICAgICAgIGlmIChkZCA+PSBubmV0ZGlyKSAgICAgICAgICAvKiBObyBk aXJlY3RvcmllcyBsZWZ0PyAqLwotICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg ICAgIC8qIERvbmUuICovCi0gICAgICAgICAgICBpZiAoKGYgPSBmb3BlbihuZXRkaXJbZGRdLCJy IikpID09IE5VTEwpIHsgLyogT3BlbiBpdCAqLwotICAgICAgICAgICAgICAgIHBlcnJvcihuZXRk aXJbZGRdKTsgICAgIC8qIENhbid0LCBwcmludCBtZXNzYWdlIHNheWluZyB3aHkgKi8KLSAgICAg ICAgICAgICAgICBkZCsrOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAg IC8qIEJ1dCBnbyBvbiB0byBuZXh0IG9uZS4gKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGlmIChuZXRkcHkpCi0gICAgICAgICAgICAgIHByaW50ZigiT3BlbmluZyAlcy4uLlxuIixuZXRk aXJbZGRdKTsKLSAgICAgICAgICAgIGRkKys7Ci0gICAgICAgIH0KLSAgICAgICAgbGluZVswXSA9 IE5VTDsKLSAgICAgICAgaWYgKGdldG5jdChsaW5lLDEwMjMsZiwxKSA8IDApIHsgLyogUmVhZCBh IGxpbmUgKi8KLSAgICAgICAgICAgIGlmIChmKSB7ICAgICAgICAgICAgICAgICAgICAvKiBmIGNh biBiZSBjbG9iYmVyZWQhICovCi0gICAgICAgICAgICAgICAgZmNsb3NlKGYpOyAgICAgICAgICAg ICAgLyogQ2xvc2UgdGhlIGZpbGUgKi8KLSAgICAgICAgICAgICAgICBmID0gTlVMTDsgICAgICAg ICAgICAgICAvKiBJbmRpY2F0ZSBuZXh0IG9uZSBuZWVkcyBvcGVuaW5nICovCi0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWxpbmVb MF0pICAgICAgICAgICAgICAgICAgIC8qIEVtcHR5IGxpbmUgKi8KLSAgICAgICAgICBjb250aW51 ZTsKLQotICAgICAgICB4d29yZHMobGluZSw3LGluZm8sMCk7ICAgICAgICAgIC8qIFBhcnNlIGl0 ICovCi0KLSAgICAgICAgaWYgKCFpbmZvWzFdIHx8ICFpbmZvWzJdIHx8ICFpbmZvWzNdKSAvKiBS ZXF1aXJlZCBmaWVsZHMgKi8KLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCppbmZv WzFdID09ICc7JykgICAgICAgICAgICAvKiBGdWxsLWxpbmUgY29tbWVudCAqLwotICAgICAgICAg IGNvbnRpbnVlOwotICAgICAgICBpZiAoKG4gPSAoaW50KSBzdHJsZW4oaW5mb1sxXSkpIDwgMSkg LyogTGVuZ3RoIG9mIG5hbWUtdGFnICovCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm IChuIDwgbjEpICAgICAgICAgICAgICAgICAgICAgLyogU2VhcmNoIG5hbWUgaXMgbG9uZ2VyICov Ci0gICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgICAgLyogQ2FuJ3QgcG9zc2li bHkgbWF0Y2ggKi8KLSAgICAgICAgaWYgKGFtYmlndW91cyAmJiBuICE9IG4xKQotICAgICAgICAg IGNvbnRpbnVlOwotICAgICAgICBpZiAoY2tzdHJjbXAocyxpbmZvWzFdLG4xLDApKSAgIC8qIENv bXBhcmUgdXNpbmcgbGVuZ3RoIG9mICovCi0gICAgICAgICAgY29udGludWU7ICAgICAgICAgICAg ICAgICAgICAgLyogc2VhcmNoIHN0cmluZyBzLiAqLwotCi0gICAgICAgIC8qIEhhdmUgYSBtYXRj aCAqLwotCi0gICAgICAgIG1ha2VzdHIoJihuaF9wW25oY291bnRdKSwgaW5mb1szXSk7ICAgIC8q IGFkZHJlc3MgKi8KLSAgICAgICAgbWFrZXN0cigmKG5oX3AyW25oY291bnRdKSxpbmZvWzJdKTsg ICAgLyogbmV0IHR5cGUgKi8KLSAgICAgICAgbWFrZXN0cigmKG5oX3B4WzBdW25oY291bnRdKSxp bmZvWzRdKTsgLyogbmV0LXNwZWNpZmljIHN0dWZmLi4uICovCi0gICAgICAgIG1ha2VzdHIoJihu aF9weFsxXVtuaGNvdW50XSksaW5mb1s1XSk7Ci0gICAgICAgIG1ha2VzdHIoJihuaF9weFsyXVtu aGNvdW50XSksaW5mb1s2XSk7Ci0gICAgICAgIG1ha2VzdHIoJihuaF9weFszXVtuaGNvdW50XSks aW5mb1s3XSk7Ci0KLSAgICAgICAgbmhjb3VudCsrOyAgICAgICAgICAgICAgICAgICAgICAvKiBD b3VudCB0aGlzIG1hdGNoICovCi0gICAgICAgIGlmIChuaGNvdW50ID4gTUFYRE5VTVMpIHsgICAg ICAgLyogV2F0Y2ggb3V0IGZvciB0b28gbWFueSAqLwotICAgICAgICAgICAgcHJpbnRmKCJXYXJu aW5nOiAlZCBtYXRjaGVzIGZvdW5kLCAlZCBtYXhcbiIsCi0gICAgICAgICAgICAgICAgICAgbmhj b3VudCwKLSAgICAgICAgICAgICAgICAgICBNQVhETlVNUwotICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgICAgICBuaGNvdW50ID0gTUFYRE5VTVM7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgfQotICAgICAgICBpZiAobmhjb3VudCA9PSAxKSB7ICAgICAgICAgICAgIC8qIEZpcnN0 IG9uZSAtIHNhdmUgZW50cnkgbmFtZSAqLwotICAgICAgICAgICAgaWYgKG5fbmFtZSkgeyAgICAg ICAgICAgICAgIC8qIEZyZWUgdGhlIG9uZSBmcm9tIGJlZm9yZSBpZiBhbnkgKi8KLSAgICAgICAg ICAgICAgICBmcmVlKG5fbmFtZSk7Ci0gICAgICAgICAgICAgICAgbl9uYW1lID0gTlVMTDsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghKG5fbmFtZSA9IChjaGFyICopbWFsbG9jKG4g KyAxKSkpIHsgLyogQWxsb2NhdGUgbmV3IHN0b3JhZ2UgKi8KLSAgICAgICAgICAgICAgICBwcmlu dGYoIj9tZW1vcnkgYWxsb2NhdGlvbiBlcnJvciAtIGx1bmV0OjNcbiIpOwotICAgICAgICAgICAg ICAgIGlmIChsaW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUobGluZSk7Ci0gICAgICAg ICAgICAgICAgICAgIGxpbmUgPSBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBuaGNvdW50ID0gMDsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgdCA9IG47ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVy IGl0cyBsZW5ndGggKi8KLSAgICAgICAgICAgIHN0cmNweShuX25hbWUsaW5mb1sxXSk7ICAgICAv KiBzYWZlICovCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2Vj b25kIG9yIHN1YnNlcXVlbnQgb25lICovCi0gICAgICAgICAgICBpZiAoKGludCkgc3RybGVuKGlu Zm9bMV0pID09IHQpIC8qIExlbmd0aHMgY29tcGFyZSAqLwotICAgICAgICAgICAgICBpZiAoIWNr c3RyY21wKG5fbmFtZSxpbmZvWzFdLHQsMCkpIC8qIENhc2VsZXNzIGNvbXBhcmUgT0sgKi8KLSAg ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLyogTmFtZSBnaXZlbiBieSB1 c2VyIG1hdGNoZXMgZW50cmllcyB3aXRoIGRpZmZlcmVudCBuYW1lcyAqLwotCi0gICAgICAgICAg ICBpZiAoYW1iaWd1b3VzKSAgICAgICAgICAgICAgLyogQmVlbiBoZXJlIGJlZm9yZSAqLwotICAg ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgYW1iaWd1b3VzID0gMTsgICAgICAgICAg ICAgIC8qIE5vdyBhbiBleGFjdCBtYXRjaCBpcyByZXF1aXJlZCAqLwotICAgICAgICAgICAgbmRy ZXNldCgpOyAgICAgICAgICAgICAgICAgIC8qIENsZWFyIG91dCBwcmV2aW91cyBsaXN0ICovCi0g ICAgICAgICAgICBnb3RvIGx1X2FnYWluOyAgICAgICAgICAgICAgLyogRG8gaXQgYWxsIG92ZXIg YWdhaW4uICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGxpbmUpIHsKLSAgICAgICAgZnJl ZShsaW5lKTsKLSAgICAgICAgbGluZSA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChuaGNvdW50ID09 IDAgJiYgYW1iaWd1b3VzKQotICAgICAgcHJpbnRmKCI/XCIlc1wiIC0gYW1iaWd1b3VzIGluIG5l dHdvcmsgZGlyZWN0b3J5XG4iLHMpOwotI2Vsc2UKLSAgICBuaGNvdW50ID0gMDsKLSNlbmRpZiAv KiBOT0RJQUwgKi8KLSAgICByZXR1cm4obmhjb3VudCk7Ci19Ci0jZW5kaWYgLyogTkVUQ09OTiAq LwotCi0jaWZuZGVmIE5PTE9DQUwKLS8qICBDIEwgUyBDIE8gTiBOIFggIC0tICBDbG9zZSBjb25u ZWN0aW9uICAqLwotCi1pbnQKLWNsc2Nvbm54KGFzaykgaW50IGFzazsgewotICAgIGludCB4LCBy YyA9IDA7Ci0jaWZkZWYgTkVXRlRQCi0gICAgZXh0ZXJuIGludCBmdHBnZXQsIGZ0cGlzb3Blbigp OwotICAgIGlmICgoZnRwZ2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmICFsb2NhbCAmJiBm dHBpc29wZW4oKSkpCi0gICAgICByZXR1cm4oc3VjY2VzcyA9IGZ0cGJ5ZSgpKTsKLSNlbmRpZiAv KiBORVdGVFAgKi8KLSAgICBkZWJ1ZyhGMTAxLCJjbHNjb25ueCBsb2NhbCIsIiIsbG9jYWwpOwot ICAgIGlmIChsb2NhbCkgewotICAgICAgICB4ID0gYXNrID8gaHVwb2soMSkgOiAxOyAgICAgICAg IC8qIE1ha2Ugc3VyZSBpdCdzIE9LIHRvIGNsb3NlICovCi0gICAgICAgIGlmICgheCkgewotICAg ICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImNsc2Nvbm54IGh1cG9r IHNheXMgbm8iLCIiLHJjKTsKLSAgICAgICAgICAgIHJldHVybihyYyk7Ci0gICAgICAgIH0KLSAg ICAgICAgdHRmbHVpKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBhd2F5IGJ1ZmZl cmVkIHVwIGp1bmsgKi8KLSNpZm5kZWYgTk9ESUFMCi0jaWZkZWYgT1MyT05MWQotLyogRG9uJ3Qg aGFuZ3VwIGEgbGluZSB0aGF0IGlzIHNoYXJlZCB3aXRoIHRoZSBTTElQIG9yIFBQUCBkcml2ZXIg Ki8KLSAgICAgICAgaWYgKCF0dHNsaXAgJiYgIXR0cHBwKQotI2VuZGlmIC8qIE9TMk9OTFkgKi8K LSAgICAgICAgICBtZG1odXAoKTsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSAgICAgICAgaWYgKG5l dHdvcmsgJiYgbXNnZmxnKQotICAgICAgICAgIHByaW50ZigiIENsb3NpbmcgY29ubmVjdGlvblxu Iik7Ci0gICAgICAgIHR0Y2xvcygwKTsgICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2Ugb2xk IGNvbm5lY3Rpb24sIGlmIGFueSAqLwotICAgICAgICByYyA9IDE7Ci0gICAgICAgIHsKLSAgICAg ICAgICAgIGV4dGVybiBpbnQgd2FzY2xvc2VkLCB3aHljbG9zZWQ7Ci0gICAgICAgICAgICBpZiAo d2FzY2xvc2VkKSB7Ci0gICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfQ0xPUzsKLSNpZm5k ZWYgTk9TUEwKLSAgICAgICAgICAgICAgICBpZiAobm1hYykgeyAgICAgICAgICAgICAvKiBBbnkg bWFjcm9zIGRlZmluZWQ/ICovCi0gICAgICAgICAgICAgICAgICAgIGludCBrOyAgICAgICAgICAg ICAgLyogWWVzICovCi0gICAgICAgICAgICAgICAgICAgIC8qIHByaW50ZigiT05fQ0xPU0UgQ0xT Q09OTlhcbiIpOyAqLwotICAgICAgICAgICAgICAgICAgICB3YXNjbG9zZWQgPSAwOwotICAgICAg ICAgICAgICAgICAgICBrID0gbWxvb2sobWFjdGFiLCJvbl9jbG9zZSIsbm1hYyk7ICAvKiBMb29r IHRoaXMgdXAgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj0gMCkgeyAgICAgICAgICAg ICAgICAgICAgICAgLyogSWYgZm91bmQsICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo ZG9kbyhrLGNraXRvYSh3aHljbG9zZWQpLDApID4gLTEpIC8qIHNldCBpdCB1cCwgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAgICAgICAgLyogYW5k IGV4ZWN1dGUgaXQgKi8KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K LSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgICAgICAgIHdoeWNsb3NlZCA9IFdDX1JFTU87 Ci0gICAgICAgICAgICAgICAgd2FzY2xvc2VkID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotICAgIH0KLSNpZmRlZiBWTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPciBt YXliZSAjaWZuZGVmIFVOSVg/ICovCi0gICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTmVlZCB0byBkbyB0aGlzIGluIFZNUyB0byAqLwotICAgICAgICB0dGNsb3MoMCk7 ICAgICAgICAgICAgICAgICAgICAgIC8qIGZyZWUgdGhlIHR0eSBjaGFubmVsIG51bWJlciAqLwot ICAgICAgICByYyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9idGFpbmVkIGluIHR0 b3BlbigpIG9yIGVsc2UgKi8KLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBzdWJzZXF1ZW50IHR0b3BlbidzIHdvbid0IHdvcmsgKi8KLSNlbmRpZiAvKiBWTVMgKi8K LSAgICBkb2xvZ2VuZCgpOwotICAgIGhhdmVsaW5lID0gMDsKLSAgICBpZiAobWRtdHlwIDwgMCkg eyAgICAgICAgICAgICAgICAgICAvKiBTd2l0Y2hpbmcgZnJvbSBuZXQgdG8gYXN5bmM/ICovCi0g ICAgICAgIGlmIChtZG1zYXYgPiAtMSkgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBtb2RlbSB0 eXBlIGZyb20gbGFzdCAqLwotICAgICAgICAgIG1kbXR5cCA9IG1kbXNhdjsgICAgICAgICAgICAg IC8qIFNFVCBNT0RFTSBjb21tYW5kLCBpZiBhbnkuICovCi0gICAgICAgIGVsc2UKLSAgICAgICAg ICBtZG10eXAgPSAwOwotICAgICAgICBtZG1zYXYgPSAtMTsKLSAgICB9Ci0gICAgaWYgKG5ldHdv cmspCi0gICAgICBuZXR3b3JrID0gMDsKLSNpZmRlZiBORVRDT05OCi0gICAgaWYgKG9sZHBsZXgg PiAtMSkgeyAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBwcmV2aW91cyBkdXBsZXggc2V0dGlu Zy4gKi8KLSAgICAgICAgZHVwbGV4ID0gb2xkcGxleDsKLSAgICAgICAgb2xkcGxleCA9IC0xOwot ICAgIH0KLSNlbmRpZiAvKiBORVRDT05OICovCi0jaWZuZGVmIE1BQwotICAgIGNrc3RybmNweSh0 dG5hbWUsZGZ0dHksVFROQU1MRU4pOyAgIC8qIFJlc3RvcmUgZGVmYXVsdCBjb21tdW5pY2F0aW9u ICovCi0jZW5kaWYgLyogTUFDICovCi0gICAgbG9jYWwgPSBkZmxvYzsgICAgICAgICAgICAgICAg ICAgICAgLyogZGV2aWNlIGFuZCBsb2NhbC9yZW1vdGUgc3RhdHVzICovCi0gICAgaWYgKGxvY2Fs KSB7Ci0gICAgICAgIGN4dHlwZSA9IENYVF9ESVJFQ1Q7ICAgICAgICAgICAgLyogU29tZXRoaW5n IHJlYXNvbmFibGUgKi8KLSAgICAgICAgc3BlZWQgPSB0dGdzcGQoKTsgICAgICAgICAgICAgICAv KiBHZXQgdGhlIGN1cnJlbnQgc3BlZWQgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBjeHR5cGUg PSBDWFRfUkVNT1RFOwotICAgICAgICBzcGVlZCA9IC0xTDsKLSAgICB9Ci0jaWZuZGVmIE5PWEZF UgotICAgIGlmICh4cmVsaWFibGUgPiAtMSAmJiAhc2V0cmVsaWFibGUpIHsKLSAgICAgICAgcmVs aWFibGUgPSB4cmVsaWFibGU7Ci0gICAgICAgIGRlYnVnKEYxMDEsImNsc2Nvbm54IHJlbGlhYmxl IEEiLCIiLHJlbGlhYmxlKTsKLSAgICB9IGVsc2UgaWYgKCFzZXRyZWxpYWJsZSkgewotICAgICAg ICByZWxpYWJsZSA9IFNFVF9BVVRPOwotICAgICAgICBkZWJ1ZyhGMTAxLCJjbHNjb25ueCByZWxp YWJsZSBCIiwiIixyZWxpYWJsZSk7Ci0gICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHNl dGZsb3coKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldmVydCBmbG93IGNvbnRyb2wg Ki8KLSAgICByZXR1cm4ocmMpOwotfQotCi1pbnQKLWNsc2tjb25ueCh4KSBpbnQgeDsgeyAgICAg ICAgICAgICAgICAgICAvKiBDbG9zZSBLZXJtaXQgY29ubmVjdGlvbiBvbmx5ICovCi0gICAgaW50 IHQsIHJjOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKG5vdCBGVFApICovCi0jaWZkZWYg TkVXRlRQCi0gICAgZXh0ZXJuIGludCBmdHBnZXQ7Ci0gICAgdCA9IGZ0cGdldDsKLSAgICBmdHBn ZXQgPSAwOwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotICAgIHJjID0gY2xzY29ubngoeCk7Ci0jaWZk ZWYgTkVXRlRQCi0gICAgZnRwZ2V0ID0gdDsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSAgICByZXR1 cm4ocmMpOwotfQotCi0vKiBNYXkgMjAwMjogc2V0bGluKCkgZGVjb21wb3NpdGlvbiBzdGFydHMg aGVyZSAuLi4gKi8KLQotI2lmZGVmIE9TMgotI2RlZmluZSBTUlZCVUZTSVogUElQRU5BTUwKLSNl bHNlIC8qIE9TMiAqLwotI2RlZmluZSBTUlZCVUZTSVogNjMKLSNlbmRpZiAvKiBPUzIgKi8KLSNk ZWZpbmUgSE9TVE5BTUxFTiAxNSo2NQotCi1pbnQgbmV0c2F2ZSA9IC0xOwotc3RhdGljIGNoYXIg KiB0bXBzdHJpbmcgPSBOVUxMOwotc3RhdGljIGNoYXIgKiB0bXB1c3JpZCA9IE5VTEw7Ci0KLSNp ZmRlZiBTU0hDTUQKLWNoYXIgKiBzc2hjbWQgPSBOVUxMOwotY2hhciAqIGRlZnNzaGNtZCA9ICJz c2ggLWUgbm9uZSI7Ci0jZWxzZQotI2lmZGVmIFNTSEJVSUxUSU4KLWNoYXIgKiBzc2hyY21kID0g TlVMTDsKLWNoYXIgKiBzc2h0bXBjbWQgPSBOVUxMOwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8K LSNlbmRpZiAvKiBTU0hDTUQgKi8KLQotLyogYyB4IF8gZiBhIGkgbCAgLS0gIENvbW1vbiBlcnJv ciBleGl0IHJvdXRpbmUgZm9yIGN4X25ldCwgY3hfbGluZSAqLwotCi1pbnQKLWN4X2ZhaWwobXNn LCB0ZXh0KSBpbnQgbXNnOyBjaGFyICogdGV4dDsgewotICAgIG1ha2VzdHIoJnNsbXNnLHRleHQp OwkJLyogRm9yIHRoZSByZWNvcmQgKG9yIEdVSSkgKi8KLSAgICBpZiAobXNnKQkJCQkvKiBOb3Qg R1VJLCBub3QgcXVpZXQsIGV0YyAqLwotICAgICAgcHJpbnRmKCI/JXNcbiIsdGV4dCk7CQkvKiBQ cmludCBlcnJvciBtZXNzYWdlICovCi0gICAgc2xyZXN0b3IoKTsJCQkJLyogUmVzdG9yZSBMSU5F L0hPU1QgdG8ga25vd24gc3RhdGUgKi8KLSAgICByZXR1cm4obXNnID8gLTkgOiAoc3VjY2VzcyA9 IDApKTsJLyogUmV0dXJuIGFwcHJvcHJpYXRlIGNvZGUgKi8KLX0KLQotI2lmZGVmIE5FVENPTk4K LS8qIGMgeCBfIG4gZSB0ICAtLSAgTWFrZSBhIG5ldHdvcmsgY29ubmVjdGlvbiAqLwotCi0vKgot ICBDYWxsIHdpdGg6Ci0gICAgbmV0ICAgICAgPSBuZXR3b3JrIHR5cGUKLSAgICBwcm90b2NvbCA9 IHByb3RvY29sIHR5cGUKLSAgICBob3N0ICAgICA9IHN0cmluZyBwb2ludGVyIHRvIGhvc3QgbmFt ZS4KLSAgICBzdmMgICAgICA9IHN0cmluZyBwb2ludGVyIHRvIHNlcnZpY2Ugb3IgcG9ydCBvbiBo b3N0LgotICAgIHVzZXJuYW1lID0gdXNlcm5hbWUgZm9yIGNvbm5lY3Rpb24KLSAgICBwYXNzd29y ZCA9IHBhc3N3b3JkIGZvciBjb25uZWN0aW9uCi0gICAgY29tbWFuZCAgPSBjb21tYW5kIHRvIGV4 ZWN1dGUKLSAgICBwYXJhbTEgICA9IFRlbG5ldDogQXV0aGVudGljYXRpb24gdHlwZQotICAgICAg ICAgICAgICAgU1NIOiAgICBWZXJzaW9uCi0gICAgcGFyYW0yICAgPSBUZWxuZXQ6IEVuY3J5cHRp b24gdHlwZQotICAgICAgICAgICAgICAgU1NIOiAgICBDb21tYW5kIGFzIFN1YnN5c3RlbQotICAg IHBhcmFtMyAgID0gVGVsbmV0OiAxIHRvIHdhaXQgZm9yIG5lZ290aWF0aW9ucywgMCBvdGhlcndp c2UKLSAgICAgICAgICAgICAgIFNTSDogICAgWDExIEZvcndhcmRpbmcKLSAgICBjeCAgICAgICA9 IDEgdG8gYXV0b21hdGljYWxseSBlbnRlciBDb25uZWN0IG1vZGUsIDAgb3RoZXJ3aXNlLgotICAg IHN4ICAgICAgID0gMSB0byBhdXRvbWF0aWNhbGx5IGVudGVyIFNlcnZlciBtb2RlLCAwIG90aGVy d2lzZS4KLSAgICBmbGFnICAgICA9IGlmIG5vIGhvc3QgbmFtZSBnaXZlbiwgMSA9IGNsb3NlIGN1 cnJlbnQgY29ubmVjdGlvbiwgMCA9IHJlc3VtZQotICAgIGd1aSAgICAgID0gMSBpZiBjYWxsZWQg ZnJvbSBHVUkgZGlhbG9nLCAwIG90aGVyd2lzZS4KLSAgUmV0dXJuczoKLSAgICAxIG9uIHN1Y2Nl c3MKLSAgICAwIG9uIGZhaWx1cmUgYW5kIG5vIG1lc3NhZ2UgcHJpbnRlZCwgc2xtc2cgc2V0IHRv IGZhaWx1cmUgbWVzc2FnZS4KLSAgIC05IG9uIGZhaWx1cmUgYW5kIG1lc3NhZ2UgcHJpbnRlZCwg ZGl0dG8uCi0qLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWN4X25ldCggaW50IG5ldCwgaW50IHBy b3RvY29sLCBjaGFyICogeGhvc3QsIGNoYXIgKiBzdmMsIAotICAgICAgICBjaGFyICogdXNlcm5h bWUsIGNoYXIgKiBwYXNzd29yZCwgY2hhciAqIGNvbW1hbmQsCi0gICAgICAgIGludCBwYXJhbTEs IGludCBwYXJhbTIsIGludCBwYXJhbTMsIGludCBjeCwgaW50IHN4LCBpbnQgZmxhZywgaW50IGd1 aSkKLSNlbHNlIC8qIENLX0FOU0lDICovCi1jeF9uZXQobmV0LCBwcm90b2NvbCwgeGhvc3QsIHN2 YywKLSAgICAgICB1c2VybmFtZSwgcGFzc3dvcmQsIGNvbW1hbmQsCi0gICAgICAgcGFyYW0xLCBw YXJhbTIsIHBhcmFtMywgY3gsIHN4LCBmbGFnLCBndWkpCi0gICAgY2hhciAqIHhob3N0LCAqIHN2 YywgKiB1c2VybmFtZSwgKnBhc3N3b3JkLCAqY29tbWFuZDsgCi0gICAgaW50IG5ldCwgcHJvdG9j b2wsIGN4LCBzeCwgZmxhZywgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgZ3VpOyAKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotLyogY3hfbmV0ICovIHsKLQotICAgIGludCBpLCBuLCB4LCBtc2c7Ci0g ICAgaW50IF9sb2NhbCA9IC0xOwotCi0gICAgZXh0ZXJuIGNoYXIgcHdidWZbXSwgKiBnX3Bzd2Q7 Ci0gICAgZXh0ZXJuIGludCBwd2ZsZywgcHdjcnlwdCwgZ19wZmxnLCBnX3BjcHQsIG5vbG9jYWw7 Ci0KLSAgICBjaGFyIHNydmJ1ZltTUlZCVUZTSVorMV07CQkvKiBTZXJ2aWNlICovCi0gICAgY2hh ciBob3N0YnVmW0hPU1ROQU1MRU5dOwkJLyogSG9zdCBidWZmZXIgdG8gbWFuaXB1bGF0ZSAqLwot ICAgIGNoYXIgaG9zdG5hbWVbSE9TVE5BTUxFTl07CQkvKiBDb3B5IG9mIGhvc3QgcGFyYW1ldGVy ICovCi0gICAgY2hhciAqIGhvc3QgPSBob3N0YnVmOwkJLyogUG9pbnRlciB0byBjb3B5IG9mIGhv c3QgcGFyYW0gKi8KLQotICAgIGlmICgheGhvc3QpIHhob3N0ID0gIiI7CQkvKiBXYXRjaCBvdXQg Zm9yIG51bGwgcG9pbnRlcnMgKi8KLSAgICBpZiAoIXN2Yykgc3ZjID0gIiI7Ci0gICAgY2tzdHJu Y3B5KGhvc3QseGhvc3QsSE9TVE5BTUxFTik7CS8qIEF2b2lkIGJ1ZmZlciBjb25mdXNpb24gKi8K LQotICAgIGRlYnVnKEYxMTAsImN4X25ldCBob3N0Iixob3N0LDApOwotICAgIGRlYnVnKEYxMTEs ImN4X25ldCBzZXJ2aWNlIixzdmMsU1JWQlVGU0laKTsKLSAgICBkZWJ1ZyhGMTAxLCJjeF9uZXQg bmV0d29yayB0eXBlIiwiIixuZXQpOwotCi0gICAgbXNnID0gKGd1aSA9PSAwKSAmJiBtc2dmbGc7 CQkvKiBXaGV0aGVyIHRvIHByaW50IG1lc3NhZ2VzICovCi0KLSNpZm5kZWYgTk9ESUFMCi0gICAg ZGVidWcoRjEwMSwiY3hfbmV0IG5uZXRkaXIiLCIiLG5uZXRkaXIpOwotICAgIHggPSAwOwkJCQkv KiBMb29rIHVwIGluIG5ldHdvcmsgZGlyZWN0b3J5ICovCi0gICAgaWYgKCpob3N0ID09ICc9Jykg ewkJCS8qIElmIG51bWJlciBzdGFydHMgd2l0aCA9IHNpZ24gKi8KLQlob3N0Kys7CQkJCS8qIHN0 cmlwIGl0ICovCi0Jd2hpbGUgKCpob3N0ID09IFNQKSBob3N0Kys7CS8qIGFuZCBhbnkgbGVhZGlu ZyBzcGFjZXMgKi8KLQlkZWJ1ZyhGMTEwLCJjeF9uZXQgaG9zdCAyIixob3N0LDApOwotCW5oY291 bnQgPSAwOwotICAgIH0gZWxzZSBpZiAoKmhvc3QpIHsJCQkvKiBXZSB3YW50IHRvIGxvb2sgaXQg dXAuICovCi0JaWYgKG5uZXRkaXIgPiAwKQkJLyogSWYgdGhlcmUgaXMgYSBkaXJlY3RvcnkuLi4g Ki8KLQkgIHggPSBsdW5ldChob3N0KTsJCS8qIChzZXRzIG5oY291bnQpICovCi0JZWxzZQkJCQkv KiBvdGhlcndpc2UgKi8KLQkgIG5oY291bnQgPSAwOwkJCS8qIHdlIGRpZG4ndCBmaW5kIGFueSB0 aGVyZSAqLwotCWlmICh4IDwgMCkJCQkvKiBJbnRlcm5hbCBlcnJvcj8gKi8KLQkgIHJldHVybihj eF9mYWlsKG1zZywiTmV0d29yayBkaXJlY3RvcnkgbG9va3VwIGVycm9yIikpOwotCWRlYnVnKEYx MTEsImN4X25ldCBsdW5ldCBuaGNvdW50Iixob3N0LG5oY291bnQpOwotICAgIH0KLSNlbmRpZiAv KiBOT0RJQUwgKi8KLQotICAgIC8qIE5ldyBjb25uZWN0aW9uIHdhbnRlZC4gIE1ha2UgYSBjb3B5 IG9mIHRoZSBob3N0IG5hbWUvYWRkcmVzcy4uLiAqLwotCi0gICAgaWYgKGNsc2tjb25ueCgxKSA8 IDApCQkvKiBDbG9zZSBjdXJyZW50IEtlcm1pdCBjb25uZWN0aW9uICovCi0gICAgICByZXR1cm4o Y3hfZmFpbChtc2csIkVycm9yIGNsb3NpbmcgcHJldmlvdXMgY29ubmVjdGlvbiIpKTsKLQotICAg IGlmICgqaG9zdCkgewkJCS8qIFRoZXkgZ2F2ZSBhIGhvc3RuYW1lICovCi0JX2xvY2FsID0gMTsJ CQkvKiBOZXR3b3JrIGNvbm5lY3Rpb24gYWx3YXlzIGxvY2FsICovCi0JaWYgKG1kbXNhdiA8IDAp Ci0JICBtZG1zYXYgPSBtZG10eXA7CQkvKiBSZW1lbWJlciBvbGQgbW9kZW0gdHlwZSAqLwotCW1k bXR5cCA9IC1uZXQ7CQkJLyogU3BlY2lhbCBjb2RlIGZvciBuZXR3b3JrICovCi0gICAgfSBlbHNl IHsJCQkJLyogVGhleSBqdXN0IHNhaWQgInNldCBob3N0IiAqLwotCWhvc3QgPSBkZnR0eTsJCQkv KiBTbyBnbyBiYWNrIHRvIG5vcm1hbCAqLwotCV9sb2NhbCA9IGRmbG9jOwkJCS8qIGRlZmF1bHQg dHR5LCBsb2NhdGlvbiwgKi8KLQlpZiAoZmxhZykgewkJCS8qIENsb3NlIGN1cnJlbnQgY29ubmVj dGlvbiAqLwotCSAgICBzZXRmbG93KCk7CQkJLyogTWF5YmUgY2hhbmdlIGZsb3cgY29udHJvbCAq LwotCSAgICBoYXZlbGluZSA9IDE7CQkvKiAoKiBpcyB0aGlzIHJpZ2h0PyAqKSAqLwotCSAgICBk b2xvZ2VuZCgpOwotI2lmbmRlZiBOT0RJQUwKLQkgICAgZGlhbHN0YSA9IERJQV9VTks7Ci0jZW5k aWYgLyogTk9ESUFMICovCi0jaWZkZWYgTE9DVVMKLQkgICAgaWYgKGF1dG9sb2N1cykgewotCQlz ZXRsb2N1cygxLDEpOwotCSAgICB9Ci0jZW5kaWYgLyogTE9DVVMgKi8KLSAgICAgICAgICAgIC8q IFhYWCAtIElzIHRoaXMgcmlnaHQ/ICovCi0JICAgIC8qIFNob3VsZCB3ZSBiZSByZXR1cm5pbmcg d2l0aG91dCBkb2luZyBhbnl0aGluZyA/ICovCi0JICAgIC8qIFllcyBpdCdzIHJpZ2h0IC0tIHdl IGNsb3NlZCB0aGUgb2xkIGNvbm5lY3Rpb24ganVzdCBhYm92ZS4gKi8KLQkgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsgICAgICAgIAotCX0KLSAgICB9Ci0gICAgc3VjY2VzcyA9IDA7Ci0gICAgaWYg KGhvc3QgIT0gbGluZSkgICAgICAgICAgICAgICAgICAgLyogbGluZVtdIGlzIGEgZ2xvYmFsICov Ci0gICAgICBja3N0cm5jcHkobGluZSxob3N0LExJTkJVRlNJWik7Ci0gICAgY2tzdHJuY3B5KGhv c3RuYW1lLGhvc3QsSE9TVE5BTUxFTik7Ci0gICAgY2tzdHJuY3B5KHNydmJ1ZixzdmMsU1JWQlVG U0laKzEpOwotCi0jaWZuZGVmIE5PRElBTAotICAgIGlmICgobmhjb3VudCA+IDEpICYmIG1zZykg ewotCWludCBrOwotCXByaW50ZigiJWQgZW50ciVzIGZvdW5kIGZvciBcIiVzXCIlc1xuIiwKLQkg ICAgICAgbmhjb3VudCwKLQkgICAgICAgKG5oY291bnQgPT0gMSkgPyAieSIgOiAiaWVzIiwKLQkg ICAgICAgcywKLQkgICAgICAgKG5oY291bnQgPiAwKSA/ICI6IiA6ICIuIgotCSAgICAgICApOwot CWZvciAoaSA9IDA7IGkgPCBuaGNvdW50OyBpKyspIHsKLQkJcHJpbnRmKCIlM2QuICUtMTJzID0+ ICUtOXMgJXMiLAotCQkgICAgICAgaSsxLG5fbmFtZSxuaF9wMltpXSxuaF9wW2ldKTsKLQkgICAg Zm9yIChrID0gMDsgayA8IDQ7IGsrKykgeyAvKiBBbHNvIGxpc3QgbmV0LXNwZWNpZmljIGl0ZW1z ICovCi0JCWlmIChuaF9weFtrXVtpXSkgICAgICAvKiBmcmVlIGZvcm1hdC4uLiAqLwotCQkgIHBy aW50ZigiICVzIixuaF9weFtrXVtpXSk7Ci0JCWVsc2UKLQkJICBicmVhazsKLQkgICAgfQotCSAg ICBwcmludGYoIlxuIik7Ci0JfQotICAgIH0KLSAgICBpZiAobmhjb3VudCA9PSAwKQotICAgICAg biA9IDE7Ci0gICAgZWxzZQotICAgICAgbiA9IG5oY291bnQ7Ci0jZWxzZQotICAgIG4gPSAxOwot ICAgIG5oY291bnQgPSAwOwotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0gICAgZm9yIChpID0gMDsg aSA8IG47IGkrKykgewkJLyogTG9vcCBmb3IgZWFjaCBlbnRyeSBmb3VuZCAqLwotCWRlYnVnKEYx MDEsImN4X25ldCBsb29wIGkiLCIiLGkpOwotI2lmbmRlZiBOT0RJQUwKLQlpZiAobmhjb3VudCA+ IDApIHsJCS8qIElmIHdlIGZvdW5kIGF0IGxlYXN0IG9uZSBlbnRyeS4uLiAqLwotCSAgICBja3N0 cm5jcHkobGluZSxuaF9wW2ldLExJTkJVRlNJWik7IC8qIENvcHkgY3VycmVudCBlbnRyeSAqLwot CSAgICBpZiAobG9va3VwKG5ldGNtZCxuaF9wMltpXSxubmV0cywmeCkgPiAtMSkgeyAvKiBOZXQg dHlwZSAqLwotCQlpbnQgeHg7Ci0JCXh4ID0gbmV0Y21kW3hdLmt3dmFsOwotCQkvKiBVc2VyIHNw ZWNpZmllZCBTU0ggc28gZG9uJ3QgbGV0IG5ldCBkaXJlY3Rvcnkgb3ZlcnJpZGUgKi8KLQkJaWYg KG5ldCAhPSBORVRfU1NIIHx8IHh4ICE9IE5FVF9UQ1BCKSB7Ci0JCSAgICBuZXQgPSB4eDsKLQkJ ICAgIG1kbXR5cCAgPSAwIC0gbmV0OwotCQl9Ci0JICAgIH0gZWxzZSB7Ci0JCW1ha2VzdHIoJnNs bXNnLCJOZXR3b3JrIHR5cGUgbm90IHN1cHBvcnRlZCIpOwotCQlpZiAobXNnKQotCQkgIHByaW50 ZigiRXJyb3IgLSBuZXR3b3JrIHR5cGUgXCIlc1wiIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkgbmhf cDJbaV0KLQkJICAgICAgICAgKTsKLQkJY29udGludWU7Ci0JICAgIH0KLQkgICAgc3dpdGNoIChu ZXQpIHsJCS8qIE5ldC1zcGVjaWZpYyBkaXJlY3RvcnkgdGhpbmdzICovCi0jaWZkZWYgU1NIQlVJ TFRJTgotCSAgICAgIGNhc2UgTkVUX1NTSDoJCS8qIFNTSCAqLwotICAgICAgICAgICAgICAgIC8q IEFueSBTU0ggc3BlY2lmaWMgbmV0d29yayBkaXJlY3Rvcnkgc3R1ZmY/ICovCi0gICAgICAgICAg ICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogTkVUX1NTSCAqLwotI2VuZGlmIC8qIFNT SEJVSUxUSU4gKi8KLQotCSAgICAgIGNhc2UgTkVUX1RDUEI6IHsJCS8qIFRDUC9JUCBURUxORVQs UkxPR0lOLC4uLiAqLwotI2lmZGVmIFRDUFNPQ0tFVAotCQkgIGNoYXIgKnE7Ci0JCSAgaW50IGZs YWcgPSAwOwotCi0JCSAgLyogRXh0cmFjdCAiOnNlcnZpY2UiLCBpZiBhbnksIGZyb20gaG9zdCBz dHJpbmcgKi8KLQkJICBkZWJ1ZyhGMTEwLCJjeF9uZXQgc2VydmljZSAxIixsaW5lLDApOwotCQkg IGZvciAocSA9IGxpbmU7ICgqcSAhPSAnXDAnKSAmJiAoKnEgIT0gJzonKTsgcSsrKQotCQkgICAg OwotCQkgIGlmICgqcSA9PSAnOicpIHsgKnErKyA9IE5VTDsgZmxhZyA9IDE7IH0KLQkJICBkZWJ1 ZyhGMTExLCJjeF9uZXQgc2VydmljZSAyIixsaW5lLGZsYWcpOwotCi0JCSAgLyogR2V0IHNlcnZp Y2UsIGlmIGFueSwgZnJvbSBkaXJlY3RvcnkgZW50cnkgKi8KLQotCQkgIGlmICghKnNydmJ1Zikg ewotCQkgICAgICBpZiAobmhfcHhbMF1baV0pIHsKLQkJCSAgY2tzdHJuY3B5KHNydmJ1ZixuaF9w eFswXVtpXSxTUlZCVUZTSVopOwotCQkJICBkZWJ1ZyhGMTEwLCJjeF9uZXQgc2VydmljZSAzIixz cnZidWYsMCk7Ci0JCSAgICAgIH0KLQkJICAgICAgaWYgKGZsYWcpIHsKLQkJCSAgY2tzdHJuY3B5 KHNydmJ1ZixxLFNSVkJVRlNJWik7Ci0JCQkgIGRlYnVnKEYxMTAsImN4X25ldCBzZXJ2aWNlIDQi LHNydmJ1ZiwwKTsKLQkJICAgICAgfQotCQkgIH0KLQkJICBja3N0cm5jcHkoaG9zdG5hbWUsbGlu ZSxIT1NUTkFNTEVOKTsKLQotCQkgIC8qIElmIHdlIGhhdmUgYSBzZXJ2aWNlLCBhcHBlbmQgdG8g aG9zdCBuYW1lL2FkZHJlc3MgKi8KLQkJICBpZiAoKnNydmJ1ZikgewotCQkgICAgICBja3N0cm5j YXQobGluZSwgIjoiLCBMSU5CVUZTSVopOwotCQkgICAgICBja3N0cm5jYXQobGluZSwgc3J2YnVm LCBMSU5CVUZTSVopOwotCQkgICAgICBkZWJ1ZyhGMTEwLCJjeF9uZXQgc2VydmljZSA1IixsaW5l LDApOwotCQkgIH0KLSNpZmRlZiBSTE9HQ09ERQotCQkgIC8qIElmIG5vIHNlcnZpY2UgZ2l2ZW4g YnV0IGNvbW1hbmQgd2FzIFJMT0dJTiAqLwotCQkgIGVsc2UgaWYgKHR0bnByb3RvID09IE5QX1JM T0dJTikgeyAvKiBhZGQgdGhpcy4uLiAqLwotCQkgICAgICBja3N0cm5jYXQobGluZSwgIjpsb2dp biIsTElOQlVGU0laKTsKLQkJICAgICAgZGVidWcoRjExMCwiY3hfbmV0IHNlcnZpY2UgNiIsbGlu ZSwwKTsKLQkJICB9Ci0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSNpZmRlZiBDS19LRVJCRVJP UwotCQkgIGVsc2UgaWYgKHR0bnByb3RvID09IE5QX0s0TE9HSU4gfHwKLQkJCSAgIHR0bnByb3Rv ID09IE5QX0s1TE9HSU4pIHsgLyogYWRkIHRoaXMuLi4gKi8KLQkJICAgICAgY2tzdHJuY2F0KGxp bmUsICI6a2xvZ2luIixMSU5CVUZTSVopOwotCQkgICAgICBkZWJ1ZyhGMTEwLCJjeF9uZXQgc2Vy dmljZSA3IixsaW5lLDApOwotCQkgIH0KLQkJICBlbHNlIGlmICh0dG5wcm90byA9PSBOUF9FSzRM T0dJTiB8fAotCQkJICAgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsgLyogYWRkIHRoaXMuLi4g Ki8KLQkJICAgICAgY2tzdHJuY2F0KGxpbmUsICI6ZWtsb2dpbiIsTElOQlVGU0laKTsKLQkJICAg ICAgZGVidWcoRjExMCwiY3hfbmV0IHNlcnZpY2UgOCIsbGluZSwwKTsKLQkJICB9Ci0jZW5kaWYg LyogQ0tfS0VSQkVST1MgKi8KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2VuZGlm IC8qIFJMT0dDT0RFICovCi0JCSAgZWxzZSB7CQkvKiBPdGhlcndpc2UsIGFkZCAiOnRlbG5ldCIu ICovCi0JCSAgICAgIGNrc3RybmNhdChsaW5lLCAiOnRlbG5ldCIsIExJTkJVRlNJWik7Ci0JCSAg ICAgIGRlYnVnKEYxMTAsImN4X25ldCBzZXJ2aWNlIDkiLGxpbmUsMCk7Ci0JCSAgfQotCQkgIGlm ICh1c2VybmFtZSkgewkvKiBUaGlzIGlzIGEgcGFyYW1ldGVyLi4uICovCi0JCSAgICAgIGNrc3Ry bmNweSh1aWRidWYsdXNlcm5hbWUsVUlEQlVGTEVOKTsKLQkJICAgICAgdWlkZmxhZyA9IDE7Ci0J CSAgfQotCQkgIC8qIEZpZnRoIGZpZWxkLCBpZiBhbnksIGlzIHVzZXIgSUQgKGZvciBybG9naW4p ICovCi0KLQkJICBpZiAobmhfcHhbMV1baV0gJiYgIXVpZGZsYWcpCi0JCSAgICBja3N0cm5jcHko dWlkYnVmLHVzZXJuYW1lLFVJREJVRkxFTik7Ci0jaWZkZWYgUkxPR0NPREUKLQkJICBpZiAoSVNf UkxPR0lOKCkgJiYgIXVpZGJ1ZlswXSkKLQkJICAgIHJldHVybihjeF9mYWlsKG1zZywiVXNlcm5h bWUgcmVxdWlyZWQiKSk7Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KLQkJICBicmVhazsKLQkgICAgICB9Ci0JICAgICAgY2FzZSBORVRfUElQRToJCS8qIFBp cGUgKi8KLSNpZmRlZiBOUElQRQotCQlpZiAoIXBpcGVuYW1lWzBdKSB7IC8qIFVzZXIgZGlkbid0 IGdpdmUgYSBwaXBlbmFtZSAqLwotCQkgICAgaWYgKG5oX3B4WzBdW2ldKSB7IC8qIEJ1dCBkaXJl Y3RvcnkgZW50cnkgaGFzIG9uZSAqLwotCQkJaWYgKHN0cmNtcChwaXBlbmFtZSwiXFxwaXBlXFwi KSkgewotCQkJICAgIGNrc3RybmNweShwaXBlbmFtZSwiXFxwaXBlXFwiLExJTkJVRlNJWik7Ci0J CQkgICAgY2tzdHJuY2F0KHNydmJ1ZixuaF9weFswXVtpXSxQSVBFTkFNTC02KTsKLQkJCX0gZWxz ZSB7Ci0JCQkgICAgY2tzdHJuY3B5KHBpcGVuYW1lLG5oX3B4WzBdW2ldLFBJUEVOQU1MKTsKLQkJ CX0KLQkJCWRlYnVnKEYxMTAsImN4X25ldCBwaXBlbmVtZSIscGlwZW5hbWUsMCk7Ci0JCSAgICB9 Ci0JCX0KLSNlbmRpZiAvKiBOUElQRSAqLwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgTkVUX1NM QVQ6ICAgICAgICAgICAgLyogTEFUIC8gQ1RFUk0gKi8KLSNpZmRlZiBTVVBFUkxBVAotCQlpZiAo IXNsYXRfcHdkWzBdKSB7IC8qIFVzZXIgZGlkbid0IGdpdmUgYSBwYXNzd29yZCAqLwotCQkgICAg aWYgKG5oX3B4WzBdW2ldKSB7IC8qIEJ1dCBkaXJlY3RvcnkgZW50cnkgaGFzIG9uZSAqLwotCQkJ Y2tzdHJuY3B5KHNsYXRfcHdkLG5oX3B4WzBdW2ldLDE4KTsKLQkJCWRlYnVnKEYxMTAsImN4X25l dCBTdXBlckxBVCBwYXNzd29yZCIsc2xhdF9wd2QsMCk7Ci0JCSAgICB9Ci0JCX0KLSNlbmRpZiAv KiBTVVBFUkxBVCAqLwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgTkVUX1NYMjU6ICAgICAgICAv KiBYLjI1IGtleXdvcmQgcGFyYW1ldGVycyAqLwotCSAgICAgIGNhc2UgTkVUX0lYMjU6Ci0JICAg ICAgY2FzZSBORVRfVlgyNTogewotI2lmZGVmIEFOWVgyNQotCQkgIGludCBrOyAgICAgICAgICAg IC8qIEN5Y2xlIHRocm91Z2ggdGhlIGZvdXIgZmllbGRzICovCi0JCSAgZm9yIChrID0gMDsgayA8 IDQ7IGsrKykgewotCQkgICAgICBpZiAoIW5oX3B4W2tdW2ldKSAvKiBCYWlsIG91dCBpZiBub25l IGxlZnQgKi8KLQkJCWJyZWFrOwotCQkgICAgICBpZiAoIWNrc3RyY21wKG5oX3B4W2tdW2ldLCJj dWc9Iiw0LDApKSB7Ci0JCQkgIGNsb3NnciA9IGF0b2kobmhfcHhba11baV0rNCk7Ci0JCQkgIGRl YnVnKEYxMDEsIlgyNSBDVUciLCIiLGNsb3Nncik7Ci0JCSAgICAgIH0gZWxzZSBpZiAoIWNrc3Ry Y21wKG5oX3B4W2tdW2ldLCJjdWQ9Iiw0LDApKSB7Ci0JCQkgIGN1ZGF0YSA9IDE7Ci0JCQkgIGNr c3RybmNweSh1ZGF0YSxuaF9weFtrXVtpXSs0LE1BWENVREFUQSk7Ci0JCQkgIGRlYnVnKEYxMTAs IlgyNSBDVUQiLGN1ZGF0YSwwKTsKLQkJICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAobmhfcHhb a11baV0sInJldj0iLDQsMCkpIHsKLQkJCSAgcmV2Y2FsbCA9ICFja3N0cmNtcChuaF9weFtrXVtp XSs0LCI9b24iLDMsMCk7Ci0JCQkgIGRlYnVnKEYxMDEsIlgyNSBSRVYiLCIiLHJldmNhbGwpOwot I2lmbmRlZiBJQk1YMjUKLQkJICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAobmhfcHhba11baV0s InBhZD0iLDQsMCkpIHsKLQkJCSAgaW50IHgzcGFyLCB4M3ZhbDsKLQkJCSAgY2hhciAqczEsICpz MjsKLQkJCSAgczEgPSBzMiA9IG5oX3B4W2tdW2ldKzQ7IC8qIFBBRCBwYXJhbWV0ZXJzICovCi0J CQkgIHdoaWxlICgqczIpIHsgICAgICAgICAgICAvKiBQaWNrIHRoZW0gYXBhcnQgKi8KLQkJCSAg ICAgIGlmICgqczIgPT0gJzonKSB7Ci0JCQkJICAqczIgPSBOVUw7Ci0JCQkJICB4M3BhciA9IGF0 b2koczEpOwotCQkJCSAgczEgPSArK3MyOwotCQkJCSAgY29udGludWU7Ci0JCQkgICAgICB9IGVs c2UgaWYgKCpzMiA9PSAnLCcpIHsKLQkJCQkgICpzMiA9IE5VTDsKLQkJCQkgIHgzdmFsID0gYXRv aShzMSk7Ci0JCQkJICBzMSA9ICsrczI7Ci0JCQkJICBkZWJ1ZyhGMTExLCJYMjUgUEFEIix4M3Bh cix4M3ZhbCk7Ci0JCQkJICBpZiAoeDNwYXIgPiAtMSAmJgotCQkJCSAgICAgIHgzcGFyIDw9IE1B WFBBRFBBUk1TKQotCQkJCSAgICBwYWRwYXJtc1t4M3Bhcl0gPSB4M3ZhbDsKLQkJCQkgIGNvbnRp bnVlOwotCQkJICAgICAgfSBlbHNlCi0JCQkJczIrKzsKLQkJCSAgfQotI2VuZGlmIC8qIElCTVgy NSAqLwotCQkgICAgICB9Ci0JCSAgfQotI2VuZGlmIC8qIEFOWVgyNSAqLwotCQkgIGJyZWFrOwot CSAgICAgIH0KLQkgICAgICBkZWZhdWx0OgkJCS8qIE5vdGhpbmcgc3BlY2lhbCBmb3Igb3RoZXIg bmV0cyAqLwotCQlicmVhazsKLQkgICAgfQotCX0gZWxzZQotI2VuZGlmIC8qIE5PRElBTCAqLwot CXsJCQkJLyogTm8gZGlyZWN0b3J5IGVudHJpZXMgZm91bmQuICovCi0JICAgIGNrc3RybmNweShs aW5lLGhvc3RuYW1lLExJTkJVRlNJWik7IC8qIFB1dCB0aGlzIGJhY2suLi4gKi8KLQkgICAgLyog SWYgdGhlIHVzZXIgZ2F2ZSBhIFRDUCBzZXJ2aWNlICovCi0JICAgIGlmIChuZXQgPT0gTkVUX1RD UEIgfHwgbmV0ID09IE5FVF9TU0gpCi0JICAgICAgaWYgKCpzcnZidWYpIHsJCS8qIEFwcGVuZCBp dCB0byBob3N0IG5hbWUvYWRkcmVzcyAqLwotCQkgIGNrc3RybmNhdChsaW5lLCAiOiIsIExJTkJV RlNJWik7Ci0JCSAgY2tzdHJuY2F0KGxpbmUsIHNydmJ1ZixMSU5CVUZTSVopOwotCSAgICAgIH0K LQl9Ci0JLyoKLQkgICBHZXQgaGVyZSB3aXRoIGhvc3QgbmFtZS9hZGRyZXNzIGFuZCBhbGwgbmV0 LXNwZWNpZmljCi0JICAgcGFyYW1ldGVycyBzZXQsIHJlYWR5IHRvIG9wZW4gdGhlIGNvbm5lY3Rp b24uCi0JKi8KLQltZG10eXAgPSAtbmV0OwkJCS8qIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBkb25l ICovCi0JCQkJCS8qIGFscmVhZHkgYnV0IGp1c3QgaW4gY2FzZSAuLi4gKi8KLQotCWRlYnVnKEYx MTAsImN4X25ldCBuZXQgbGluZVtdIGJlZm9yZSB0dG9wZW4iLGxpbmUsMCk7Ci0JZGVidWcoRjEw MSwiY3hfbmV0IG5ldCBtZG10eXAgYmVmb3JlIHR0b3BlbiIsIiIsbWRtdHlwKTsKLQlkZWJ1ZyhG MTAxLCJjeF9uZXQgbmV0IHR0bnByb3RvIiwiIix0dG5wcm90byk7Ci0KLSNpZmRlZiBTU0hCVUlM VElOCi0gICAgICAgIGlmIChuZXQgPT0gTkVUX1NTSCkgewotICAgICAgICAgICAgbWFrZXN0cigm c3NoX2hzdCxob3N0bmFtZSk7ICAgICAgICAvKiBTdGFzaCBldmVyeXRoaW5nICovCi0gICAgICAg ICAgICBpZiAodXNlcm5hbWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNsX3VpZF9zYXZlZCkg ewotICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc2xfdWlkYnVmLHVpZGJ1ZixVSURCVUZM RU4pOwotICAgICAgICAgICAgICAgICAgICBzbF91aWRfc2F2ZWQgPSAxOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBja3N0cm5jcHkodWlkYnVmLHVzZXJuYW1lLFVJREJVRkxF Tik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3J2YnVmWzBdKSB7Ci0gICAgICAg ICAgICAgICAgbWFrZXN0cigmc3NoX3BydCxzcnZidWYpOwotICAgICAgICAgICAgfSBlbHNlCi0g ICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3BydCxOVUxMKTsKLQotICAgICAgICAgICAgaWYg KGNvbW1hbmQpIHsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfY21kLGJyc3RyaXAoY29t bWFuZCkpOwotICAgICAgICAgICAgICAgIHNzaF9jYXMgPSBwYXJhbTI7Ci0gICAgICAgICAgICB9 IGVsc2UKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfY21kLE5VTEwpOwotCi0gICAgICAg ICAgICBpZiAocGFyYW0xID4gLTEpIHsKLSNpZm5kZWYgU1NIVEVTVAotICAgICAgICAgICAgICAg IGlmICghc2xfc3NoX3Zlcl9zYXZlZCkgewotICAgICAgICAgICAgICAgICAgICBzbF9zc2hfdmVy ID0gc3NoX3ZlcjsKLSAgICAgICAgICAgICAgICAgICAgc2xfc3NoX3Zlcl9zYXZlZCA9IDE7Ci0g ICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIFNTSFRFU1QgKi8KLSAgICAgICAgICAgICAgICBz c2hfdmVyID0gcGFyYW0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBhcmFtMyA+ IC0xKSB7Ci0jaWZuZGVmIFNTSFRFU1QKLSAgICAgICAgICAgICAgICBpZiAoIXNsX3NzaF94Zndf c2F2ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xfc3NoX3hmdyA9IHNzaF94Znc7Ci0gICAg ICAgICAgICAgICAgICAgIHNsX3NzaF94Zndfc2F2ZWQgPSAxOwotICAgICAgICAgICAgICAgIH0K LSNlbmRpZiAvKiBTU0hURVNUICovCi0gICAgICAgICAgICAgICAgc3NoX3hmdyA9IHBhcmFtMzsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBORVRfU1NIICovCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVmIFRDUFNPQ0tFVAot CSAgaWYgKG5ldCA9PSBORVRfVENQQikgewotICAgICAgICAgICAgc3dpdGNoIChwcm90b2NvbCkg ewotI2lmZGVmIENLX1NTTAotI2lmZGVmIENPTU1FTlQKLS8qCi0gIEplZmYncyB2ZXJzaW9uIGZy b20gMzAgRGVjIDIwMDYgLSBkb2Vzbid0IHdvcmsgLSBTU0wvVExTX1JBVyBzdGlsbAotICBzdGFy dCBUZWxuZXQgbmVnb3Rpb25zIGlmIGEgMHhmZiBieXRlIGNvbWVzIGluLgotKi8KLQkgICAgICBj YXNlIE5QX1NTTF9SQVc6Ci0gICAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9TU0xfUkFXOwot CQlkZWJ1ZyhGMTAxLCJOUF9TU0xfUkFXIHR0bnByb3RvIiwiIix0dG5wcm90byk7Ci0gICAgICAg ICAgICAgICAgc3NsX29ubHlfZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgdGxzX29ubHlfZmxh ZyA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLQkgICAgICBjYXNlIE5QX1RMU19SQVc6 Ci0JCSAgdHRucHJvdG8gPSBOUF9UTFNfUkFXOwotCQkgIGRlYnVnKEYxMDEsIk5QX1RMU19SQVcg dHRucHJvdG8iLCIiLHR0bnByb3RvKTsKLQkJICBzc2xfb25seV9mbGFnID0gMDsKLQkJICB0bHNf b25seV9mbGFnID0gMTsKLQkJICBicmVhazsKLQotCSAgICAgIGNhc2UgTlBfU1NMOgotICAgICAg ICAgICAgICAgIHR0bnByb3RvID0gTlBfU1NMOwotCQlkZWJ1ZyhGMTAxLCJOUF9TU0wgdHRucHJv dG8iLCIiLHR0bnByb3RvKTsKLSAgICAgICAgICAgICAgICBzc2xfb25seV9mbGFnID0gMTsKLSAg ICAgICAgICAgICAgICB0bHNfb25seV9mbGFnID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsK LQotCSAgICAgIGNhc2UgTlBfVExTOgotICAgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfVExT OwotCQlkZWJ1ZyhGMTAxLCJOUF9UTFMgdHRucHJvdG8iLCIiLHR0bnByb3RvKTsKLSAgICAgICAg ICAgICAgICBzc2xfb25seV9mbGFnID0gMDsKLSAgICAgICAgICAgICAgICB0bHNfb25seV9mbGFn ID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotCSAgICAgIGNhc2UgTlBfU1NMX1RFTE5F VDoKLSAgICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX1RFTE5FVDsKLQkJZGVidWcoRjEwMSwi TlBfU1NMX1RFTE5FVCB0dG5wcm90byIsIiIsdHRucHJvdG8pOwotICAgICAgICAgICAgICAgIHNz bF9vbmx5X2ZsYWcgPSAxOwotICAgICAgICAgICAgICAgIHRsc19vbmx5X2ZsYWcgPSAwOwotICAg ICAgICAgICAgICAgIGJyZWFrOwotCi0JICAgICAgY2FzZSBOUF9UTFNfVEVMTkVUOgotICAgICAg ICAgICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOwotCQlkZWJ1ZyhGMTAxLCJOUF9UTFNfVEVM TkVUIHR0bnByb3RvIiwiIix0dG5wcm90byk7Ci0gICAgICAgICAgICAgICAgc3NsX29ubHlfZmxh ZyA9IDA7Ci0gICAgICAgICAgICAgICAgdGxzX29ubHlfZmxhZyA9IDE7Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0jZWxzZQotLyogZmRjIHZlcnNpb24gb2YgNCBEZWMgMjAwNiB3b3JrcyBPSyAq LwotCSAgICAgIGNhc2UgTlBfU1NMX1JBVzoKLQkgICAgICBjYXNlIE5QX1NTTDoKLQkJc3NsX3Jh d19mbGFnID0gKHByb3RvY29sID09IE5QX1NTTF9SQVcpID8gMSA6IDA7Ci0gICAgICAgICAgICAg ICAgdHRucHJvdG8gPSBwcm90b2NvbDsKLQkJZGVidWcoRjEwMSxwcm90b2NvbD09TlBfU1NMID8K LQkJICAgICAgIk5QX1NTTCB0dG5wcm90byIgOgotCQkgICAgICAiTlBfU1NMX1JBVyB0dG5wcm90 byIsCi0JCSAgICAgICIiLHR0bnByb3RvKTsKLSAgICAgICAgICAgICAgICBzc2xfb25seV9mbGFn ID0gMTsKLSAgICAgICAgICAgICAgICB0bHNfb25seV9mbGFnID0gMDsKLSAgICAgICAgICAgICAg ICBicmVhazsKLQotCSAgICAgIGNhc2UgTlBfVExTOgotCSAgICAgIGNhc2UgTlBfVExTX1JBVzoK LQkJdGxzX3Jhd19mbGFnID0gKHByb3RvY29sID09IE5QX1NTTF9SQVcpID8gMSA6IDA7Ci0gICAg ICAgICAgICAgICAgdHRucHJvdG8gPSBwcm90b2NvbDsKLQkJZGVidWcoRjEwMSxwcm90b2NvbD09 TlBfVExTID8KLQkJICAgICAgIk5QX1RMUyB0dG5wcm90byIgOgotCQkgICAgICAiTlBfVExTX1JB VyB0dG5wcm90byIsCi0JCSAgICAgICIiLHR0bnByb3RvKTsKLSAgICAgICAgICAgICAgICBzc2xf b25seV9mbGFnID0gMDsKLSAgICAgICAgICAgICAgICB0bHNfb25seV9mbGFnID0gMTsKLSAgICAg ICAgICAgICAgICBicmVhazsKLQotCSAgICAgIGNhc2UgTlBfU1NMX1RFTE5FVDoKLQkJc3NsX3Jh d19mbGFnID0gMDsKLSAgICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX1RFTE5FVDsKLQkJZGVi dWcoRjEwMSwiTlBfU1NMX1RFTE5FVCB0dG5wcm90byIsIiIsdHRucHJvdG8pOwotICAgICAgICAg ICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAxOwotICAgICAgICAgICAgICAgIHRsc19vbmx5X2ZsYWcg PSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0JICAgICAgY2FzZSBOUF9UTFNfVEVMTkVU OgotCQl0bHNfcmF3X2ZsYWcgPSAwOwotICAgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfVEVM TkVUOwotCQlkZWJ1ZyhGMTAxLCJOUF9UTFNfVEVMTkVUIHR0bnByb3RvIiwiIix0dG5wcm90byk7 Ci0gICAgICAgICAgICAgICAgc3NsX29ubHlfZmxhZyA9IDA7Ci0gICAgICAgICAgICAgICAgdGxz X29ubHlfZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYJLyogQ09NTUVO VCAqLwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0JICAgICAgY2FzZSBOUF9OT05FOgotCSAgICAg IGNhc2UgTlBfVENQUkFXOgotCSAgICAgIGNhc2UgTlBfUkxPR0lOOgotCSAgICAgIGNhc2UgTlBf SzRMT0dJTjoKLQkgICAgICBjYXNlIE5QX0s1TE9HSU46Ci0JICAgICAgY2FzZSBOUF9FSzRMT0dJ TjoKLQkgICAgICBjYXNlIE5QX0VLNUxPR0lOOgotCSAgICAgIGNhc2UgTlBfVEVMTkVUOgotCSAg ICAgIGNhc2UgTlBfS0VSTUlUOgotCSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgdHRu cHJvdG8gPSBwcm90b2NvbDsKLSNpZmRlZiBDS19TU0wKLSNpZmRlZiBDT01NRU5UCi0JCS8qIEpl ZmYgdmVyc2lvbiBmcm9tIDMwIERlYyAyMDA2ICovCi0gICAgICAgICAgICAgICAgc3NsX29ubHlf ZmxhZyA9IDA7Ci0gICAgICAgICAgICAgICAgdGxzX29ubHlfZmxhZyA9IDA7Ci0jZWxzZQotCQkv KiBmZGMgdmVyc2lvbiBmcm9tIDQgRGVjIDIwMDYgKi8KLQkJc3NsX3Jhd19mbGFnID0gMDsKLQkJ dGxzX3Jhd19mbGFnID0gMDsKLSAgICAgICAgICAgICAgICBzc2xfb25seV9mbGFnID0gMDsKLSAg ICAgICAgICAgICAgICB0bHNfb25seV9mbGFnID0gMDsKLSNlbmRpZgkvKiBDT01NRU5UICovCi0j ZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9 Ci0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICAgICAgICAgIGlmICgodHRucHJvdG8gPT0g TlBfVEVMTkVUIHx8IHR0bnByb3RvID09IE5QX0tFUk1JVCkgJiYKLQkJcGFyYW0xID4gLTEpIHsK LQkgICAgaWYgKCFzbF9hdXRoX3NhdmVkKSB7Ci0JCWludCB4OwotCQlmb3IgKHggPSAwOyB4IDwg QVVUSFRZUExTVFNaOyB4KyspCi0JCSAgc2xfYXV0aF90eXBlX3VzZXJbeF0gPSBhdXRoX3R5cGVf dXNlclt4XTsKLQkJc2xfYXV0aF9zYXZlZCA9IDE7Ci0JICAgIH0KLQkgICAgaWYgKCFzbF90b3B0 X2Ffc19zYXZlZCkgewotCQlzbF90b3B0X2Ffc3UgPSBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9Q VF9BVVRIRU5USUNBVElPTik7Ci0JCXNsX3RvcHRfYV9zX3NhdmVkID0gMTsKLQkgICAgfQotCSAg ICBpZiAoIXNsX3RvcHRfYV9jX3NhdmVkKSB7Ci0JCXNsX3RvcHRfYV9jbSA9IFRFTE9QVF9ERUZf Q19NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTik7Ci0JCXNsX3RvcHRfYV9jX3NhdmVkID0g MTsKLQkgICAgfQotCSAgICBzd2l0Y2ggKHBhcmFtMSkgewotCSAgICAgIGNhc2UgQVVUSFRZUEVf QVVUTzoKLQkJYXV0aF90eXBlX3VzZXJbMF0gPSBBVVRIVFlQRV9BVVRPOwotCQlURUxPUFRfREVG X1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19SUTsKLQkJVEVMT1BUX0RF Rl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX1JROwotCQlicmVhazsK LQkgICAgICBjYXNlIEFVVEhUWVBFX05VTEw6Ci0JCWF1dGhfdHlwZV91c2VyWzBdID0gQVVUSFRZ UEVfTlVMTDsKLQkJVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0g VE5fTkdfUkY7Ci0JCVRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikg PSBUTl9OR19SRjsKLQkJYnJlYWs7Ci0jaWZkZWYgQ0tfU1JQCi0JICAgICAgY2FzZSBBVVRIVFlQ RV9TUlA6Ci0JCWF1dGhfdHlwZV91c2VyWzBdID0gQVVUSFRZUEVfU1JQOwotCQlhdXRoX3R5cGVf dXNlclsxXSA9IEFVVEhUWVBFX05VTEw7Ci0JCVRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0FV VEhFTlRJQ0FUSU9OKSA9IFROX05HX01VOwotCQlURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRf QVVUSEVOVElDQVRJT04pID0gVE5fTkdfTVU7Ci0JCWJyZWFrOwotI2VuZGlmIC8qIENLX1NSUCAq LwotI2lmZGVmIENLX1NTTAotCSAgICAgIGNhc2UgQVVUSFRZUEVfU1NMOgotCQlhdXRoX3R5cGVf dXNlclswXSA9IEFVVEhUWVBFX1NTTDsKLQkJYXV0aF90eXBlX3VzZXJbMV0gPSBBVVRIVFlQRV9O VUxMOwotCQlURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9O R19NVTsKLQkJVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFRO X05HX01VOwotCQlicmVhazsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBOVAotCSAgICAg IGNhc2UgQVVUSFRZUEVfTlRMTToKLQkJYXV0aF90eXBlX3VzZXJbMF0gPSBBVVRIVFlQRV9OVExN OwotCQlhdXRoX3R5cGVfdXNlclsxXSA9IEFVVEhUWVBFX05VTEw7Ci0JCVRFTE9QVF9ERUZfU19V X01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX01VOwotCQlURUxPUFRfREVGX0Nf TUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdfTVU7Ci0JCWJyZWFrOwotI2Vu ZGlmIC8qIE5UICovCi0jaWZkZWYgQ0tfS0VSQkVST1MKLQkgICAgICBjYXNlIEFVVEhUWVBFX0tF UkJFUk9TX1Y0OgotCQlhdXRoX3R5cGVfdXNlclswXSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y0Owot CQlhdXRoX3R5cGVfdXNlclsxXSA9IEFVVEhUWVBFX05VTEw7Ci0JCVRFTE9QVF9ERUZfU19VX01P REUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX01VOwotCQlURUxPUFRfREVGX0NfTUVf TU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdfTVU7Ci0JCWJyZWFrOwotCi0JICAg ICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNToKLQkJYXV0aF90eXBlX3VzZXJbMF0gPSBBVVRI VFlQRV9LRVJCRVJPU19WNTsKLQkJYXV0aF90eXBlX3VzZXJbMV0gPSBBVVRIVFlQRV9OVUxMOwot CQlURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19NVTsK LQkJVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX01V OwotCQlicmVhazsKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCSAgICB9Ci0JfQotCS8qCi0J ICAgSWYgdGhlIHVzZXIgcmVxdWlyZXMgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgS2VyYmVyb3MgY29u bmVjdGlvbiwKLQkgICBtYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIFRHVC4KLQkqLwotCW1ha2Vz dHIoJnNsbXNnLCJBdXRoZW50aWNhdGlvbiBmYWlsdXJlIik7Ci0JaWYgKCh0dG5wcm90byA9PSBO UF9URUxORVQgfHwgdHRucHJvdG8gPT0gTlBfS0VSTUlUKSAmJgotCSAgICAobGluZVswXSA9PSAn KicgJiYKLQkgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9 PSBUTl9OR19NVSB8fAotCSAgICAgbGluZVswXSAhPSAnKicgJiYKLQkgICAgIFRFTE9QVF9ERUZf Q19NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPT0gVE5fTkdfTVUpCi0JICAgICkgewot I2lmZGVmIENLX0tFUkJFUk9TCi0JICAgIGlmICggYXV0aF90eXBlX3VzZXJbMF0gPT0gQVVUSFRZ UEVfS0VSQkVST1NfVjQgKSB7Ci0JCWV4dGVybiBpbnQga3JiNF9hdXRvZ2V0OwotCQlpZiAoIWNr X2tyYjRfaXNfaW5zdGFsbGVkKCkpCi0JCSAgcmV0dXJuKGN4X2ZhaWwobXNnLAotCSAgICAgICJS ZXF1aXJlZCBhdXRoZW50aWNhdGlvbiBtZXRob2QgKEtlcmJlcm9zIDQpIGlzIG5vdCBpbnN0YWxs ZWQiKSk7Ci0jaWZkZWYgQ09NTUVOVAotCQkvKiBUaGlzIGNvZGUgcmVzdWx0cyBpbiBmYWxzZSBm YWlsdXJlcyB3aGVuIHVzaW5nICovCi0JCS8qIGtlcmJlcm9zIHRvIG1hY2hpbmVzIGluIHJlYWxt cyBvdGhlciB0aGFuIHRoZSAgKi8KLQkJLyogZGVmYXVsdCBzaW5jZSB3ZSBkb24ndCBrbm93IHRo ZSByZWFsbSBvZiB0aGUgICAqLwotCQkvKiBvdGhlciBtYWNoaW5lIHVudGlsIHBlcmZvcm0gdGhl IHJldmVyc2UgRE5TICAgICovCi0JCS8qIGxvb2t1cC4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi8KLQkJZWxzZSBpZiAobGluZVswXSAhPSAnKicgJiYgIWNrX2tyYjRf aXNfdGd0X3ZhbGlkKCkgJiYKLQkJCSAgICgha3JiNF9hdXRvZ2V0IHx8Ci0JCQkgICAga3JiNF9h dXRvZ2V0ICYmICFja19rcmI0X2F1dG9nZXRfVEdUKE5VTEwpKSkgewotCQkgICAgcmV0dXJuKGN4 X2ZhaWwobXNnLAotCQkJICAgIktlcmJlcm9zIDQ6IFRpY2tldCBHZXR0aW5nIFRpY2tldCBub3Qg dmFsaWQiKSk7Ci0JCX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgIH0gZWxzZSBpZiAoYXV0 aF90eXBlX3VzZXJbMF0gPT0gQVVUSFRZUEVfS0VSQkVST1NfVjUpIHsKLQkJZXh0ZXJuIGludCBr cmI1X2F1dG9nZXQ7Ci0JCWlmICghY2tfa3JiNV9pc19pbnN0YWxsZWQoKSkgewotCQkgICAgcmV0 dXJuKGN4X2ZhaWwobXNnLAotCSAgICJSZXF1aXJlZCBhdXRoZW50aWNhdGlvbiBtZXRob2QgKEtl cmJlcm9zIDUpIGlzIG5vdCBpbnN0YWxsZWQiKSk7Ci0JCX0KLSNpZmRlZiBDT01NRU5UCi0JCS8q IFRoaXMgY29kZSByZXN1bHRzIGluIGZhbHNlIGZhaWx1cmVzIHdoZW4gdXNpbmcgKi8KLQkJLyog a2VyYmVyb3MgdG8gbWFjaGluZXMgaW4gcmVhbG1zIG90aGVyIHRoYW4gdGhlICAqLwotCQkvKiBk ZWZhdWx0IHNpbmNlIHdlIGRvbid0IGtub3cgdGhlIHJlYWxtIG9mIHRoZSAgICovCi0JCS8qIG90 aGVyIG1hY2hpbmUgdW50aWwgcGVyZm9ybSB0aGUgcmV2ZXJzZSBETlMgICAgKi8KLQkJLyogbG9v a3VwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCQllbHNlIGlm IChsaW5lWzBdICE9ICcqJyAmJiAhY2tfa3JiNV9pc190Z3RfdmFsaWQoKSAmJgotCQkJICAgKCFr cmI1X2F1dG9nZXQgfHwKLQkJCSAgICBrcmI1X2F1dG9nZXQgJiYgIWNrX2tyYjVfYXV0b2dldF9U R1QoTlVMTCkpKSB7Ci0JCSAgICByZXR1cm4oY3hfZmFpbChtc2csCi0JCQkgIktlcmJlcm9zIDU6 IFRpY2tldCBHZXR0aW5nIFRpY2tldCBub3QgdmFsaWQuIikpOwotCQl9Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCSAgICB9Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNpZmRlZiBOVAotCSAg ICBpZiAoYXV0aF90eXBlX3VzZXJbMF0gPT0gQVVUSFRZUEVfTlRMTSkgewotCQlpZiAoIWNrX250 bG1faXNfaW5zdGFsbGVkKCkpIHsKLQkJICAgIHJldHVybihjeF9mYWlsKG1zZywKLQkJICAgIlJl cXVpcmVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAoTlRMTSkgaXMgbm90IGluc3RhbGxlZCIpKTsK LQkJfSBlbHNlIGlmIChsaW5lWzBdICE9ICcqJyAmJiAhY2tfbnRsbV9pc192YWxpZCgwKSkgewot CQkgICAgcmV0dXJuKGN4X2ZhaWwobXNnLCJOVExNOiBDcmVkZW50aWFscyBhcmUgdW5hdmFpbGFi bGUuIikpOwotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotI2lmZGVmIENLX1NTTAotCSAg ICBpZiAoYXV0aF90eXBlX3VzZXJbMF0gPT0gQVVUSFRZUEVfU1NMKSB7Ci0JCWlmICghY2tfc3Ns ZWF5X2lzX2luc3RhbGxlZCgpKSB7Ci0JCSAgICByZXR1cm4oY3hfZmFpbChtc2csCi0JCSAgICAg IlJlcXVpcmVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAoU1NMKSBpcyBub3QgaW5zdGFsbGVkIikp OwotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBDS19TUlAKLQkgICAg aWYgKGF1dGhfdHlwZV91c2VyWzBdID09IEFVVEhUWVBFX1NSUCkgewotCQlpZiAoIWNrX3NycF9p c19pbnN0YWxsZWQoKSkgewotCQkgICAgcmV0dXJuKGN4X2ZhaWwobXNnLAotCQkgICAgICJSZXF1 aXJlZCBhdXRoZW50aWNhdGlvbiBtZXRob2QgKFNSUCkgaXMgbm90IGluc3RhbGxlZCIpKTsKLQkJ fQotCSAgICB9Ci0jZW5kaWYgLyogQ0tfU1JQICovCi0JfQotI2VuZGlmIC8qIENLX0FVVEhFTlRJ Q0FUSU9OICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotCWlmICgodHRucHJvdG8gPT0gTlBfVEVM TkVUIHx8IHR0bnByb3RvID09IE5QX0tFUk1JVCkgJiYKLQkgICAgIHBhcmFtMiA+IC0xKSB7Ci0J ICAgIGlmICghc2xfY3hfc2F2ZWQpIHsKLQkJc2xfY3hfdHlwZSA9IGN4X3R5cGU7Ci0JCXNsX2N4 X3NhdmVkID0gMTsKLQkgICAgfQotCSAgICBpZiAoIXNsX3RvcHRfZV9zX3NhdmVkKSB7Ci0JCXNs X3RvcHRfZV9zdSA9IFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pOwotCQlz bF90b3B0X2Vfc20gPSBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTik7Ci0J CXNsX3RvcHRfZV9zX3NhdmVkID0gMTsKLQkgICAgfQotCSAgICBpZiAoIXNsX3RvcHRfZV9jX3Nh dmVkKSB7Ci0JCXNsX3RvcHRfZV9jdSA9IFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0VOQ1JZ UFRJT04pOwotCQlzbF90b3B0X2VfY20gPSBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfRU5D UllQVElPTik7Ci0JCXNsX3RvcHRfZV9jX3NhdmVkID0gMTsKLQkgICAgfQotCSAgICBjeF90eXBl ID0gcGFyYW0yOwotCSAgICBpZiAoY3hfdHlwZSA9PSBDWF9BVVRPKSB7Ci0JCVRFTE9QVF9ERUZf U19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUlE7Ci0JCVRFTE9QVF9ERUZfU19N RV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JROwotCQlURUxPUFRfREVGX0NfVV9N T0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JROwotCQlURUxPUFRfREVGX0NfTUVfTU9E RShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SUTsKLQkgICAgfSBlbHNlIGlmIChjeF90eXBl ID09IENYX05PTkUpIHsKLQkJVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikg PSBUTl9OR19SRjsKLQkJVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0g VE5fTkdfUkY7Ci0JCVRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5f TkdfUkY7Ci0JCVRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05H X1JGOwotCSAgICB9IGVsc2UgewotCQlURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9FTkNSWVBU SU9OKSA9IFROX05HX01VOwotCQlURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfRU5DUllQVElP TikgPSBUTl9OR19NVTsKLQkJVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikg PSBUTl9OR19NVTsKLQkJVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0g VE5fTkdfTVU7Ci0JICAgIH0KLQl9Ci0JaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8IHR0 bnByb3RvID09IE5QX0VLNUxPR0lOIHx8Ci0JICAgICh0dG5wcm90byA9PSBOUF9URUxORVQgfHwg dHRucHJvdG8gPT0gTlBfS0VSTUlUKSAmJgotCSAgICAoKGxpbmVbMF0gPT0gJyonICYmCi0JICAg ICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPT0gVE5fTkdfTVUgJiYK LQkgICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPT0gVE5fTkdf TVUpIHx8Ci0JICAgICAobGluZVswXSAhPSAnKicgJiYKLQkgICAgICBURUxPUFRfREVGX0NfVV9N T0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19NVSAmJgotCSAgICAgIFRFTE9QVF9ERUZf Q19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19NVSkpCi0JICAgICkgewotCSAg ICBpZiAoIWNrX2NyeXB0X2lzX2luc3RhbGxlZCgpKSB7Ci0JCXJldHVybihjeF9mYWlsKG1zZywK LQkJICAiUmVxdWlyZWQgRW5jcnlwdGlvbiBtZXRob2RzIGFyZSBub3QgaW5zdGFsbGVkIikpOwot CSAgICB9Ci0JfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBSTE9HQ09ERQot I2lmZGVmIENLX0tFUkJFUk9TCi0jaWZkZWYgS1JCNAotCWlmICh0dG5wcm90byA9PSBOUF9LNExP R0lOIHx8IHR0bnByb3RvID09IE5QX0VLNExPR0lOKSB7Ci0JICAgIGV4dGVybiBpbnQga3JiNF9h dXRvZ2V0OwotCSAgICBjaGFyIHRndFsyNTZdOwotCSAgICBjaGFyICogcmVhbG07Ci0KLQkgICAg LyogV2UgZG9uJ3QgaGF2ZSB0aGUgZnVsbCBob3N0bmFtZSBhdCB5ZXQgc28gICovCi0JICAgIC8q IHdlIGRvIGEgRE5TIGxvb2t1cCBiZWZvcmUgY2FsbGluZyB0dG9wZW4oKSAqLyAKLQotCSAgICBy ZWFsbSA9IGNrX2tyYjRfcmVhbG1vZmhvc3QoY2tnZXRmcWhvc3RuYW1lKGhvc3RuYW1lKSk7Ci0J ICAgIGNrbWFrbXNnKHRndCwyNTYsImtyYnRndC4iLHJlYWxtLCJAIixyZWFsbSk7Ci0JICAgIGlm ICghY2tfa3JiNF9pc19pbnN0YWxsZWQoKSkgewotCQlyZXR1cm4oY3hfZmFpbChtc2csCi0JCSAi UmVxdWlyZWQgYXV0aGVudGljYXRpb24gbWV0aG9kIChLZXJiZXJvcyA0KSBpcyBub3QgaW5zdGFs bGVkIgotCQkJICAgICAgICkpOwotCSAgICB9IGVsc2UgewotCQlpZiAoKGNrX2tyYjRfdGt0X2lz dmFsaWQodGd0KSA8PSAwKSAmJgotCQkgICAgKCFrcmI0X2F1dG9nZXQgfHwKLQkJICAgICBrcmI0 X2F1dG9nZXQgJiYgIWNrX2tyYjRfYXV0b2dldF9UR1QocmVhbG0pKSkgewotCQkgICAgcmV0dXJu KGN4X2ZhaWwobXNnLAotCQkJICAgIktlcmJlcm9zIDQ6IFRpY2tldCBHZXR0aW5nIFRpY2tldCBu b3QgdmFsaWQiKSk7Ci0JCX0KLQkgICAgfQotCX0KLSNlbmRpZiAvKiBLUkI0ICovCi0jaWZkZWYg S1JCNQotCWlmICh0dG5wcm90byA9PSBOUF9LNUxPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxP R0lOIHx8Ci0JICAgIHR0bnByb3RvID09IE5QX0s1VTJVKQotCXsKLQkgICAgZXh0ZXJuIGludCBr cmI1X2F1dG9nZXQ7Ci0JICAgIGNoYXIgdGd0WzI1Nl07Ci0JICAgIGNoYXIgKiByZWFsbTsKLQot CSAgICAvKiBNdXN0IGdldCBmdWxsIGhvc3RuYW1lIGJlZm9yZSBjYWxsaW5nIHR0b3BlbigpICov Ci0KLQkgICAgcmVhbG0gPSBja19rcmI1X3JlYWxtb2Zob3N0KGNrZ2V0ZnFob3N0bmFtZShob3N0 bmFtZSkpOwotCSAgICBja21ha21zZyh0Z3QsMjU2LCJrcmJ0Z3QvIixyZWFsbSwiQCIscmVhbG0p OwotCi0JICAgIGlmICghY2tfa3JiNV9pc19pbnN0YWxsZWQoKSkgewotCQlyZXR1cm4oY3hfZmFp bChtc2csCi0gICAgICAgICAgICAgICAgICJSZXF1aXJlZCBhdXRoZW50aWNhdGlvbiBtZXRob2Qg KEtlcmJlcm9zIDUpIG5vdCBpbnN0YWxsZWQiKSk7Ci0JICAgIH0gZWxzZSBpZiAoISgoY2tfa3Ji NV90a3RfaXN2YWxpZChOVUxMLHRndCkgPiAwKSB8fAotCQkJICBja19rcmI1X2lzX3RndF92YWxp ZCgpKSAmJgotCQkgICAgICAgKCFrcmI1X2F1dG9nZXQgfHwKLQkJCWtyYjVfYXV0b2dldCAmJiAh Y2tfa3JiNV9hdXRvZ2V0X1RHVChyZWFsbSkpKSB7Ci0JCXJldHVybihjeF9mYWlsKG1zZywKLQkJ ICAgICAgICJLZXJiZXJvcyA1OiBUaWNrZXQgR2V0dGluZyBUaWNrZXQgbm90IHZhbGlkLiIpKTsK LQkgICAgfQotCX0KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8K LSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotCi0jaWZuZGVmIE5PU1BMCi0jaWZkZWYgUkxPR0NPREUK LQlpZiAodXNlcm5hbWUpIHsKLQkgICAgaWYgKCFzbF91aWRfc2F2ZWQpIHsKLQkJY2tzdHJuY3B5 KHNsX3VpZGJ1Zix1aWRidWYsVUlEQlVGTEVOKTsKLQkJc2xfdWlkX3NhdmVkID0gMTsKLQkgICAg fQotCSAgICBja3N0cm5jcHkodWlkYnVmLHVzZXJuYW1lLFVJREJVRkxFTik7Ci0JICAgIHVpZGZs YWcgPSAxOwotCX0KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2lmZGVmIFROQ09ERQotCWlmICgh c2xfdG5fc2F2ZWQpIHsKLQkgICAgc2xfdG5fd2FpdCA9IHRuX3dhaXRfZmxnOwotCSAgICBzbF90 bl9zYXZlZCA9IDE7Ci0JfQotCXRuX3dhaXRfZmxnID0gcGFyYW0zOwotI2VuZGlmIC8qIFROQ09E RSAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0JfSAvKiBpZiAobmV0ID09IE5FVF9UQ1BCKSAqLwot I2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0jaWZuZGVmIE5PU1BMCi0jaWZkZWYgQ0tfU0VDVVJJ VFkKLQlpZiAocGFzc3dvcmQpIHsKLQkgICAgaWYgKHBhc3N3b3JkWzBdKSB7Ci0JCWNrc3RybmNw eShwd2J1ZixwYXNzd29yZCxQV0JVRkwrMSk7Ci0JCXB3ZmxnID0gMTsKLQkJcHdjcnlwdCA9IDA7 Ci0JICAgIH0gZWxzZQotCQlwd2ZsZyA9IDA7Ci0JfQotI2VuZGlmIC8qIENLX1NFQ1VSSVRZICov Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotCS8qIFRyeSB0byBvcGVuIC0gbmV0d29yayAqLwotCWNr c3RybmNweSh0dG5hbWUsbGluZSxUVE5BTUxFTik7Ci0JeSA9IHR0b3BlbihsaW5lLCAmX2xvY2Fs LCBtZG10eXAsIDAgKTsKLQotI2lmbmRlZiBOT0hUVFAKLQkvKiAgSWYgdGhlIGNvbm5lY3Rpb24g ZmFpbGVkIGFuZCB3ZSBhcmUgdXNpbmcgYW4gSFRUUCBQcm94eQotCSAqICBhbmQgdGhlIHJlYXNv biBmb3IgdGhlIGZhaWx1cmUgd2FzIGFuIGF1dGhlbnRpY2F0aW9uCi0JICogIGVycm9yLCB0aGVu IHdlIG5lZWQgdG8gZ2l2ZSB0aGUgdXNlciB0byBhYmlsaXR5IHRvCi0JICogIGVudGVyIGEgdXNl cm5hbWUgYW5kIHBhc3N3b3JkLCBqdXN0IGxpa2UgYSBicm93c2VyLgotCSAqCi0JICogIEkgdHJp ZWQgdG8gZG8gYWxsIG9mIHRoaXMgd2l0aGluIHRoZSBuZXRvcGVuKCkgY2FsbAotCSAqICBidXQg aXQgaXMgbXVjaCB0b28gbXVjaCB3b3JrLgotCSAqLwotCXdoaWxlICh5IDwgMCAmJiB0Y3BfaHR0 cF9wcm94eSAhPSBOVUxMICkgewotCi0JICAgIGlmICh0Y3BfaHR0cF9wcm94eV9lcnJubyA9PSA0 MDEgfHwKLQkJdGNwX2h0dHBfcHJveHlfZXJybm8gPT0gNDA3ICkgewotCQljaGFyIHVpZFtVSURC VUZMRU5dOwotCQljaGFyIHB3ZFsyNTZdOwotICAgICAgICAgICAgICAgIHN0cnVjdCB0eHRib3gg dGJbMl07Ci0gICAgICAgICAgICAgICAgaW50IG9rOwotCi0gICAgICAgICAgICAgICAgdGJbMF0u dF9idWYgPSB1aWQ7Ci0gICAgICAgICAgICAgICAgdGJbMF0udF9sZW4gPSBVSURCVUZMRU47Ci0g ICAgICAgICAgICAgICAgdGJbMF0udF9sYmwgPSAiUHJveHkgVXNlcmlkOiAiOwotICAgICAgICAg ICAgICAgIHRiWzBdLnRfZGZsdCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgdGJbMF0udF9lY2hv ID0gMTsKLSAgICAgICAgICAgICAgICB0YlsxXS50X2J1ZiA9IHB3ZDsKLSAgICAgICAgICAgICAg ICB0YlsxXS50X2xlbiA9IDI1NjsKLSAgICAgICAgICAgICAgICB0YlsxXS50X2xibCA9ICJQcm94 eSBQYXNzcGhyYXNlOiAiOwotICAgICAgICAgICAgICAgIHRiWzFdLnRfZGZsdCA9IE5VTEw7Ci0g ICAgICAgICAgICAgICAgdGJbMV0udF9lY2hvID0gMjsKLQotICAgICAgICAgICAgICAgIG9rID0g dXFfbXR4dCgiUHJveHkgU2VydmVyIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkXG4iLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMiwgdGIpOwotCi0JCWlmIChvayAmJiB1aWRb MF0pIHsKLQkJICAgIGNoYXIgKiBwcm94eV91c2VyLCAqIHByb3h5X3B3ZDsKLQotCQkgICAgcHJv eHlfdXNlciA9IHRjcF9odHRwX3Byb3h5X3VzZXI7Ci0JCSAgICBwcm94eV9wd2QgID0gdGNwX2h0 dHBfcHJveHlfcHdkOwotCi0JCSAgICB0Y3BfaHR0cF9wcm94eV91c2VyID0gdWlkOwotCQkgICAg dGNwX2h0dHBfcHJveHlfcHdkID0gcHdkOwotCi0JCSAgICBja3N0cm5jcHkodHRuYW1lLGxpbmUs VFROQU1MRU4pOwotCQkgICAgeSA9IHR0b3BlbihsaW5lLCAmX2xvY2FsLCBtZG10eXAsIDApOwot CQkgICAgbWVtc2V0KHB3ZCwwLHNpemVvZihwd2QpKTsKLQkJICAgIHRjcF9odHRwX3Byb3h5X3Vz ZXIgPSBwcm94eV91c2VyOwotCQkgICAgdGNwX2h0dHBfcHJveHlfcHdkID0gcHJveHlfcHdkOwot CQl9IGVsc2UKLQkJICBicmVhazsKLQkgICAgfSBlbHNlCi0JICAgICAgYnJlYWs7Ci0JfQotI2Vu ZGlmIC8qIE5PSFRUUCAqLwotCWlmICh5IDwgMCkgewotCSAgICBzbHJlc3RvcigpOwotCSAgICBt YWtlc3RyKCZzbG1zZywiTmV0d29yayBjb25uZWN0aW9uIGZhaWx1cmUiKTsKLSNpZmRlZiBWTVMK LQkgICAgaWYgKG1zZyAmJiBoaW50cyAmJiAheGNtZHNyYyAmJiBJU19STE9HSU4oKSkgewotCQlt YWtlc3RyKCZzbG1zZywiUkxPR0lOIGZhaWx1cmUiKTsKLQkJaWYgIChzb2NrZXRfZXJybm8gPT0g RUFDQ0VTKSB7Ci0JCSAgICBwcmludGYoIioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOwot CQkgICAgcHJpbnRmKAotCSAgICJIaW50OiBSTE9HSU4gcmVxdWlyZXMgcHJpdmlsZWdlcyB0byBv cGVuIGFuIG91dGJvdW5kIHBvcnQuXG4iKTsKLQkJICAgIHByaW50ZigKLQkJICAgICIoVXNlIFNF VCBISU5UUyBPRkYgdG8gc3VwcHJlc3MgZnV0dXJlIGhpbnRzLilcbiIpOwotCQkgICAgcHJpbnRm KCIqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKLQkJfQotCSAgICB9Ci0jZWxzZSAgLyog Tm90IFZNUy4uLiAqLwotCSAgICBpZiAoZXJybm8pIHsKLQkJaW50IHg7Ci0JCWRlYnVnKEYxMTEs InNldCBob3N0IGxpbmUsIGVycm5vIiwiIixlcnJubyk7Ci0JCW1ha2VzdHIoJnNsbXNnLGNrX2Vy cnN0cigpKTsKLQkJaWYgKG1zZykgewotI2lmZGVmIE9TMgotCQkgICAgcHJpbnRmKCJDYW4ndCBj b25uZWN0IHRvICVzXG4iLGxpbmUpOwotI2Vsc2UgLyogT1MyICovCi0jaWZkZWYgVU5JWAotCQkg ICAgaWYgKGhpbnRzICYmICF4Y21kc3JjICYmIElTX1JMT0dJTigpKSB7Ci0JCQltYWtlc3RyKCZz bG1zZywiUkxPR0lOIGZhaWx1cmUiKTsKLQkJCXByaW50ZigiKioqKioqKioqKioqKioqKioqKioq KioqKlxuIik7Ci0JCQlwcmludGYoCi0JICJIaW50OiBSTE9HSU4gcmVxdWlyZXMgcHJpdmlsZWdl cyB0byBvcGVuIGFuIG91dGJvdW5kIHBvcnQuXG4iKTsKLQkJCXByaW50ZigKLQkgIihVc2UgU0VU IEhJTlRTIE9GRiB0byBzdXBwcmVzcyBmdXR1cmUgaGludHMuKVxuIik7Ci0JCQlwcmludGYoIioq KioqKioqKioqKioqKioqKioqKioqKipcbiIpOwotCQkgICAgfQotI2VuZGlmIC8qIFVOSVggKi8K LSNlbmRpZiAvKiBPUzIgKi8KLQkJfSBlbHNlIHByaW50ZigiQ2FuJ3QgY29ubmVjdCB0byAlc1xu IixsaW5lKTsKLQkgICAgfSBlbHNlCi0jZW5kaWYgLyogVk1TICovCi0JICAgICAgaWYgKG1zZykg cHJpbnRmKCJDYW4ndCBvcGVuIGNvbm5lY3Rpb24gdG8gJXNcbiIsbGluZSk7Ci0JICAgIGNvbnRp bnVlOwotCX0gZWxzZSB7Ci0JICAgIHN1Y2Nlc3MgPSAxOwotI2lmbmRlZiBOT0RJQUwKLQkgICAg ZGlhbHN0YSA9IERJQV9VTks7Ci0jZW5kaWYgLyogTk9ESUFMICovCi0JICAgIHN3aXRjaCAobmV0 KSB7Ci0JICAgICAgY2FzZSBORVRfVENQQToKLQkgICAgICBjYXNlIE5FVF9UQ1BCOgotCQljeHR5 cGUgPSBDWFRfVENQSVA7Ci0jaWZkZWYgQ09NTUVOVAotLyogVGhpcyB3b3JrcyBidXQgaXQgbWVz c2VzIHVwIGludGVyYWN0aXZlIGFub255bW91cyBsb2dpbiAqLwotI2lmbmRlZiBOT1hGRVIKLSNp ZmRlZiBJS1NfT1BUSU9OCi0JCS8qIElmIHdlIGhhdmUgY29ubmVjdGVkIHRvIGFuIEludGVybmV0 IEtlcm1pdCBzZXJ2aWNlICovCi0JCS8qIGFuZCBhIC9VU0VSOiBzd2l0Y2ggd2FzIGdpdmVuLCB0 aGVuIGxvZyBpbi4gKi8KLQotCQlpZiAoVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkgfHwgVEVMT1BU X01FKFRFTE9QVF9LRVJNSVQpKSB7Ci0JCSAgICBkZWJ1ZyhGMTExLCJjeF9uZXQgSUtTRCAvVVNF UjoiLHVpZGJ1ZixoYXZldXNlcik7Ci0JCSAgICBpZiAoaGF2ZXVzZXIgLyogJiYgY3ggPT0gMCAq LyApIHsgLyogL1VTRVI6IGdpdmVuICovCi0JCQljaGFyICogcHN3ID0gcHdidWY7IC8qIERvIHdl IGhhdmUgYSBwYXNzd29yZD8gKi8KLQkJCWlmICghKnBzdykgeyAgICAgICAgLyogTm8uLi4gKi8K LQkJCSAgICBpZiAoIXN0cmNtcCh1aWRidWYsImFub255bW91cyIpIHx8Ci0JCQkJIXN0cmNtcCh1 aWRidWYsImZ0cCIpKSB7Ci0JCQkJZXh0ZXJuIGNoYXIgbXlob3N0W107Ci0JCQkJY2hhciAqIHUg PSAoY2hhciAqKXNsX3VpZGJ1ZjsKLQkJCQljaGFyICogaCA9IChjaGFyICopbXlob3N0OwotCQkJ CWlmICghKnUpIHUgPSAibm9ib2R5IjsKLQkJCQlpZiAoISpoKSBoID0gIm5vd2hlcmUiOwotCQkJ CWNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosdSwiQCIsaCxOVUxMKTsKLQkJCQlwc3cgPSB0bXBi dWY7Ci0JCQkJZGVidWcoRjExMCwiY3hfbmV0IElLU0QgYW5vbiIscHN3LDApOwotCQkJICAgIH0g ZWxzZSB7Ci0JCQkJcmVhZHBhc3MoIiBQYXNzd29yZDogIixwd2J1ZixQV0JVRkwpOwotCQkJICAg IH0KLQkJCX0KLQkJCXNzdGF0ZSA9IHNldGdlbignSScsdWlkYnVmLHBzdywiIik7Ci0JCSAgICB9 Ci0JCX0KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotCQlicmVhazsKLQkgICAgICBjYXNlIE5FVF9TU0g6Ci0JCWN4dHlw ZSA9IENYVF9TU0g7Ci0JCWR1cGxleCA9IDA7ICAgICAgICAgLyogUmVtb3RlIGVjaG8gKi8KLQkJ YnJlYWs7Ci0JICAgICAgY2FzZSBORVRfU0xBVDoKLQkJY3h0eXBlID0gQ1hUX0xBVDsKLQkJYnJl YWs7Ci0JICAgICAgY2FzZSBORVRfU1gyNToKLQkgICAgICBjYXNlIE5FVF9JWDI1OgotCSAgICAg IGNhc2UgTkVUX0hYMjU6Ci0JICAgICAgY2FzZSBORVRfVlgyNToKLQkJY3h0eXBlID0gQ1hUX1gy NTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSBORVRfQklPUzoKLQkJY3h0eXBlID0gQ1hUX05FVEJJ T1M7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgTkVUX0ZJTEU6Ci0JICAgICAgY2FzZSBORVRfUElQ RToKLQkgICAgICBjYXNlIE5FVF9DTUQ6Ci0JICAgICAgY2FzZSBORVRfRExMOgotCSAgICAgIGNh c2UgTkVUX1BUWToKLQkJY3h0eXBlID0gQ1hUX1BJUEU7Ci0JCWJyZWFrOwotCSAgICAgIGRlZmF1 bHQ6Ci0JCWN4dHlwZSA9IENYVF9QSVBFOwotCQlicmVhazsKLQkgICAgfQotCSAgICBicmVhazsK LQl9Ci0gICAgfSAvKiBmb3ItbG9vcCAqLwotICAgIHMgPSBsaW5lOwotCi0gICAgZGVidWcoRjEw MSwiY3hfbmV0IHBvc3QgdHRvcGVuIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwotICAgIGlmICghc3Vj Y2VzcykgewotICAgICAgICBsb2NhbCA9IGRmbG9jOyAgICAgICAgICAgICAgICAgIC8qIEdvIGJh Y2sgdG8gbm9ybWFsICovCi0jaWZuZGVmIE1BQwotICAgICAgICBja3N0cm5jcHkodHRuYW1lLGRm dHR5LFRUTkFNTEVOKTsgLyogUmVzdG9yZSBkZWZhdWx0IHR0eSBuYW1lICovCi0jZW5kaWYgLyog TUFDICovCi0gICAgICAgIHNwZWVkID0gdHRnc3BkKCk7Ci0gICAgICAgIG5ldHdvcmsgPSAwOyAg ICAgICAgICAgICAgICAgICAgLyogTm8gbmV0d29yayBjb25uZWN0aW9uIGFjdGl2ZSAqLwotICAg ICAgICBoYXZlbGluZSA9IDA7Ci0gICAgICAgIGlmIChtZG10eXAgPCAwKSB7ICAgICAgICAgICAg ICAgLyogU3dpdGNoaW5nIGZyb20gbmV0IHRvIGFzeW5jPyAqLwotICAgICAgICAgICAgaWYgKG1k bXNhdiA+IC0xKSAgICAgICAgICAgIC8qIFJlc3RvcmUgbW9kZW0gdHlwZSBmcm9tIGxhc3QgKi8K LSAgICAgICAgICAgICAgbWRtdHlwID0gbWRtc2F2OyAgICAgICAgICAvKiBTRVQgTU9ERU0gY29t bWFuZCwgaWYgYW55LiAqLwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBtZG10eXAg PSAwOwotICAgICAgICAgICAgbWRtc2F2ID0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu KDApOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gZmFpbHVyZSAqLwotICAgIH0KLSAg ICBpZiAoX2xvY2FsID4gLTEpIGxvY2FsID0gX2xvY2FsOyAgICAvKiBPcGVuZWQgb2ssIHNldCBs b2NhbC9yZW1vdGUuICovCi0gICAgbWFrZXN0cigmc2xtc2csTlVMTCk7Ci0gICAgbmV0d29yayA9 IChtZG10eXAgPCAwKTsgICAgICAgICAgICAgLyogUmVtZW1iZXIgY29ubmVjdGlvbiB0eXBlLiAq LwotICAgIGNrc3RybmNweSh0dG5hbWUscyxUVE5BTUxFTik7ICAgICAgIC8qIENvcHkgbmFtZSBp bnRvIHJlYWwgcGxhY2UuICovCi0gICAgZGVidWcoRjExMCwiY3hfbmV0IG9rIix0dG5hbWUsMCk7 Ci0gICAgZGVidWcoRjEwMSwiY3hfbmV0IG5ldHdvcmsiLCIiLG5ldHdvcmspOwotI2lmbmRlZiBO T1hGRVIKLSAgICBpZiAoKHJlbGlhYmxlICE9IFNFVF9PRkYgfHwgIXNldHJlbGlhYmxlKSkgLyog QXNzdW1lIG5vdCByZWxpYWJsZS4gKi8KLSAgICAgIHJlbGlhYmxlID0gU0VUX09GRjsKLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLSAgICBpZiAoIW5ldHdvcmsgfHwgaXN0bmNvbXBvcnQoKSkJCi0gICAg ICBzcGVlZCA9IHR0Z3NwZCgpOyAgICAgICAgICAgICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHNw ZWVkLiAqLwotICAgIGRlYnVnKEYxMDEsImN4X25ldCBsb2NhbCIsIiIsbG9jYWwpOwotICAgIGlm IChuZXR3b3JrKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsImN4X25ldCBuZXQiLCIiLG5ldCk7Ci0j aWZuZGVmIE5PWEZFUgotICAgICAgICAvKiBGb3JjZSBwcmVmaXhpbmcgb2YgMjU1IG9uIFRDUC9J UCBjb25uZWN0aW9ucy4uLiAqLwotICAgICAgICBpZiAobmV0ID09IE5FVF9UQ1BCCi0jaWZkZWYg U1NIQlVJTFRJTgotICAgICAgICAgICAgIHx8IG5ldCA9PSBORVRfU1NICi0jZW5kaWYgLyogU1NI QlVJTFRJTiAqLwotICAgICAgICAgICAgICkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwiY3hf bmV0IHJlbGlhYmxlIEEiLCIiLHJlbGlhYmxlKTsKLSNpZmRlZiBDS19TUEVFRAotICAgICAgICAg ICAgY3RscFsodW5zaWduZWQpMjU1XSA9IDE7Ci0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLSAgICAg ICAgICAgIGlmICgocmVsaWFibGUgIT0gU0VUX09GRiB8fCAhc2V0cmVsaWFibGUpKSB7Ci0jaWZk ZWYgVE5fQ09NUE9SVAotICAgICAgICAgICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7ICAgIC8q IFRlbG5ldCBjb21tdW5pY2F0aW9uIHBvcnQgKi8KLSAgICAgICAgICAgICAgICAgICAgcmVsaWFi bGUgPSBTRVRfT0ZGOyAvKiBUcmFuc3BvcnQgaXMgbm90IHJlbGlhYmxlICovCi0gICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsImN4X25ldCByZWxpYWJsZSBpc3RuY29tcG9ydCgpIiwiIiwx KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZWxpYWJs ZSA9IFNFVF9PTjsgIC8qIFRyYW5zcG9ydCBpcyByZWxpYWJsZSBlbmQgdG8gZW5kICovCi0gICAg ICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImN4X25ldCByZWxpYWJsZSBpc3RuY29tcG9ydCgp IiwiIiwwKTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIHJlbGlh YmxlID0gU0VUX09OOyAgICAgIC8qIFRyYW5zcG9ydCBpcyByZWxpYWJsZSBlbmQgdG8gZW5kICov Ci0jZW5kaWYgLyogaWZkZWYgVE5fQ09NUE9SVCAqLwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgZGVidWcoRjEwMSwiY3hfbmV0IHJlbGlhYmxlIEIiLCIiLHJlbGlhYmxlKTsKLSAgICAgICAg fSBlbHNlIGlmIChuZXQgPT0gTkVUX1NYMjUgfHwKLSAgICAgICAgICAgICAgICAgICBuZXQgPT0g TkVUX1ZYMjUgfHwKLSAgICAgICAgICAgICAgICAgICBuZXQgPT0gTkVUX0lYMjUgfHwKLSAgICAg ICAgICAgICAgICAgICBuZXQgPT0gTkVUX0hYMjUpIHsKLSAgICAgICAgICAgIGR1cGxleCA9IDE7 ICAgICAgICAgICAgICAgICAvKiBMb2NhbCBlY2hvIGZvciBYLjI1ICovCi0gICAgICAgICAgICBp ZiAocmVsaWFibGUgIT0gU0VUX09GRiB8fCAhc2V0cmVsaWFibGUpCi0gICAgICAgICAgICAgIHJl bGlhYmxlID0gU0VUX09OOyAgICAgICAgLyogVHJhbnNwb3J0IGlzIHJlbGlhYmxlIGVuZCB0byBl bmQgKi8KLSAgICAgICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIH0KLSNpZm5kZWYgTk9Y RkVSCi0gICAgZGVidWcoRjEwMSwiY3hfbmV0IHJlbGlhYmxlIiwiIixyZWxpYWJsZSk7Ci0jZW5k aWYgLyogTk9YRkVSICovCi0jaWZkZWYgT1MyCi0gICAgaWYgKG1kbXR5cCA8PSAwKSAgICAgICAg ICAgICAgICAgICAgLyogTmV0d29yayBvciBEaXJlY3QgQ29ubmVjdGlvbiAqLwotICAgICAgRGlh bGVyU2VuZChPUFRfS0VSTUlUX0NPTk5FQ1QsIDApOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gIHhj eF9uZXQ6Ci0KLSAgICBzZXRmbG93KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQg YXBwcm9wcmlhdGUgZmxvdyBjb250cm9sICovCi0KLSAgICBoYXZlbGluZSA9IDE7Ci0jaWZkZWYg Q0tMT0dESUFMCi0gICAgZG9sb2duZXQoKTsKLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLQotI2lm bmRlZiBOT1NQTAotICAgIGlmIChsb2NhbCkgewotICAgICAgICBpZiAobm1hYykgeyAgICAgICAg ICAgICAgICAgICAgIC8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KLSAgICAgICAgICAgIGludCBr OyAgICAgICAgICAgICAgICAgICAgICAvKiBZZXMgKi8KLSAgICAgICAgICAgIGsgPSBtbG9vayht YWN0YWIsIm9uX29wZW4iLG5tYWMpOyAgIC8qIExvb2sgdGhpcyB1cCAqLwotICAgICAgICAgICAg aWYgKGsgPj0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgZm91bmQsICovCi0gICAg ICAgICAgICAgICAgaWYgKGRvZG8oayx0dG5hbWUsMCkgPiAtMSkgICAgICAvKiBzZXQgaXQgdXAs ICovCi0gICAgICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgICAgICAvKiBh bmQgZXhlY3V0ZSBpdCAqLwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotI2VuZGlm IC8qIE5PU1BMICovCi0KLSAgICBpZiAobG9jYWwgJiYgKGN4IHx8IHN4KSkgeyAgICAgICAgICAv KiAvQ09OTkVDVCBvciAvU0VSVkVSIHN3aXRjaCBnaXZlbiAqLwotICAgICAgICBpZiAoY3gpIHsg ICAgICAgICAgICAgICAgICAgICAgIC8qIC9DT05ORUNUICovCi0JICAgIGlmICghZ3VpKSB7Ci0J CS8qIENvbW1hbmQgd2FzIGNvbmZpcm1lZCBzbyB3ZSBjYW4gcHJlLXBvcCBjb21tYW5kIGxldmVs LiAgKi8KLQkJLyogVGhpcyBpcyBzbyBDT05ORUNUIG1vZHVsZSB3b24ndCB0aGluayB3ZSdyZSBl eGVjdXRpbmcgYSAqLwotCQkvKiBzY3JpcHQgaWYgQ09OTkVDVCB3YXMgdGhlIGZpbmFsIGNvbW1h bmQgaW4gdGhlIHNjcmlwdC4gICovCi0JCWlmIChjbWRsdmwgPiAwKQotCQkgIHByZXBvcCgpOwot CSAgICB9Ci0jaWZuZGVmIE5PRElBTAotICAgICAgICAgICAgZGlhbHN0YSA9IERJQV9VTks7Ci0j ZW5kaWYgLyogTk9ESUFMICovCi0jaWZkZWYgTE9DVVMKLSAgICAgICAgICAgIGlmIChhdXRvbG9j dXMpIHsKLQkJc2V0bG9jdXMoMSwxKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBMT0NVUyAq LwotICAgICAgICAgICAgc3VjY2VzcyA9IGRvY29uZWN0KDAsIGNtZGx2bCA9PSAwID8gMSA6IDAp OwotICAgICAgICAgICAgaWYgKHR0Y2hrKCkgPCAwKQotICAgICAgICAgICAgICBkb2xvZ2VuZCgp OwotCSAgICBkZWJ1ZyhGMTAxLCJjeF9uZXQgcG9zdCBkb2NvbmVjdCBzdWNjZXNzIiwiIixzdWNj ZXNzKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzKTsKLSNpZm5kZWYgTk9YRkVSCi0gICAg ICAgIH0gZWxzZSBpZiAoc3gpIHsgICAgICAgICAgICAgICAgLyogL1NFUlZFUiAqLwotICAgICAg ICAgICAgc3N0YXRlID0gJ3gnOwotI2lmZGVmIE1BQwotICAgICAgICAgICAgd2hhdCA9IFdfUkVD VjsKLSAgICAgICAgICAgIHNjcmNyZWF0ZSgpOwotI2VuZGlmIC8qIE1BQyAqLwotICAgICAgICAg ICAgaWYgKGxvY2FsKSBkaXNwbGEgPSAxOwotI2lmZGVmIEFNSUdBCi0gICAgICAgICAgICByZXFv ZmYoKTsgICAgICAgICAgICAgICAgICAgLyogTm8gRE9TIHJlcXVlc3RvcnMgd2hpbGUgc2VydmVy ICovCi0jZW5kaWYgLyogQU1JR0EgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgfQot ICAgIH0KLSNpZm5kZWYgTk9ESUFMCi0gICAgZGlhbHN0YSA9IERJQV9VTks7Ci0jZW5kaWYgLyog Tk9ESUFMICovCi0jaWZkZWYgTE9DVVMKLSAgICBpZiAoYXV0b2xvY3VzKSB7Ci0gICAgICAgIHNl dGxvY3VzKDEsMSk7Ci0gICAgfQotI2VuZGlmIC8qIExPQ1VTICovCi0gICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKLX0KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLS8qIGMgeCBfIHMgZSByIGkgYSBs ICAtLSAgTWFrZSBhIHNlcmlhbCBjb25uZWN0aW9uICovCi0KLS8qCi0gIENhbGwgd2l0aDoKLSAg ICBkZXZpY2UgID0gc3RyaW5nIHBvaW50ZXIgdG8gZGV2aWNlIG5hbWUuCi0gICAgY3ggICAgICA9 IDEgdG8gYXV0b21hdGljYWxseSBlbnRlciBDb25uZWN0IG1vZGUsIDAgb3RoZXJ3aXNlLgotICAg IHN4ICAgICAgPSAxIHRvIGF1dG9tYXRpY2FsbHkgZW50ZXIgU2VydmVyIG1vZGUsIDAgb3RoZXJ3 aXNlLgotICAgIHNociAgICAgPSAxIGlmIGRldmljZSBzaG91bGQgYmUgb3BlbmVkIGluIHNoYXJl YWJsZSBtb2RlLCAwIG90aGVyd2lzZS4KLSAgICBmbGFnICAgID0gaWYgbm8gZGV2IG5hbWUgZ2l2 ZW46IDEgPSBjbG9zZSBjdXJyZW50IGNvbm5lY3Rpb24sIDAgPSByZXN1bWUuCi0gICAgZ3VpICAg ICA9IDEgaWYgY2FsbGVkIGZyb20gR1VJIGRpYWxvZywgMCBvdGhlcndpc2UuCi0gIFJldHVybnM6 Ci0gICAgMSBvbiBzdWNjZXNzCi0gICAgMCBvbiBmYWlsdXJlIGFuZCBubyBtZXNzYWdlIHByaW50 ZWQsIHNsbXNnIHNldCB0byBmYWlsdXJlIG1lc3NhZ2UuCi0gICAtOSBvbiBmYWlsdXJlIGFuZCBt ZXNzYWdlIHByaW50ZWQsIGRpdHRvLgotKi8KLQotLyogdGhlc2UgYXJlIGJpdCBmbGFncyAqLwot I2RlZmluZSBDWF9UQVBJIDEKLSNkZWZpbmUgQ1hfUFBQICAyCi0jZGVmaW5lIENYX1NMSVAgNAot Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotY3hfc2VyaWFsKGNoYXIgKmRldmljZSwgCi0gICAgICAg ICAgaW50IGN4LCBpbnQgc3gsIGludCBzaHIsIGludCBmbGFnLCBpbnQgZ3VpLCBpbnQgc3BlY2lh bCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi1jeF9zZXJpYWwoZGV2aWNlLCBjeCwgc3gsIHNociwg ZmxhZywgZ3VpLCBzcGVjaWFsKQotICAgIGNoYXIgKiBkZXZpY2U7IGludCBjeCwgc3gsIHNociwg ZmxhZywgZ3VpLCBzcGVjaWFsOyAKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogY3hfc2VyaWFs ICovIHsKLSAgICBpbnQgaSwgbiwgeCwgeSwgbXNnOwotICAgIGludCBfbG9jYWwgPSAtMTsKLSAg ICBjaGFyICpzOwotCi0gICAgZGVidWcoRjExMCwiY3hfc2VyaWFsIGRldmljZSIsZGV2aWNlLDAp OwotICAgIHMgPSBkZXZpY2U7Ci0gICAgbXNnID0gKGd1aSA9PSAwKSAmJiBtc2dmbGc7CQkvKiBX aGV0aGVyIHRvIHByaW50IG1lc3NhZ2VzICovCi0gICAgc3VjY2VzcyA9IDA7Ci0KLSNpZm5kZWYg Tk9ESUFMCi0gICAgZGlhbHN0YSA9IERJQV9VTks7Ci0jZW5kaWYgLyogTk9ESUFMICovCi0gICAg ZGVidWcoRjEwMSwiY3hfc2VyaWFsIG1kbXR5cCIsIiIsbWRtdHlwKTsKLSAgICBpZiAoY2xza2Nv bm54KDEpIDwgMCkJCS8qIENsb3NlIHRoZSBLZXJtaXQgY29ubmVjdGlvbiAqLwotICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICBpZiAoKnMpIHsJCQkJLyogVGhleSBnYXZlIGEgZGV2aWNl IG5hbWUgKi8KLQlfbG9jYWwgPSAtMTsJCQkvKiBMZXQgdHRvcGVuIGRlY2lkZSBhYm91dCBpdCAq LwotICAgIH0gZWxzZSB7CQkJCS8qIFRoZXkganVzdCBzYWlkICJzZXQgbGluZSIgKi8KLQlzID0g ZGZ0dHk7CQkJLyogc28gZ28gYmFjayB0byBub3JtYWwgdHR5ICovCi0JX2xvY2FsID0gZGZsb2M7 CQkJLyogYW5kIG1vZGUuICovCi0gICAgfQotI2lmZGVmIFZNUwotICAgIHsKLQlleHRlcm4gaW50 IG9rX3RvX3NoYXJlOwotCW9rX3RvX3NoYXJlID0gc2hyOwotICAgIH0KLSNlbmRpZiAvKiBWTVMg Ki8KLQotI2lmZGVmIE9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE11c3Qgd2Fp dCB1bnRpbCBhZnRlciB0dGNsb3MoKSAqLwotI2lmZGVmIE5UICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHRvIGNoYW5nZSB0aGVzZSBzZXR0aW5ncyAgICAgICAqLwotI2lmZGVmIENL X1RBUEkKLSAgICB0dHRhcGkgPSBzcGVjaWFsICYgQ1hfVEFQSTsKLSNlbmRpZiAvKiBDS19UQVBJ ICovCi0jZWxzZQotICAgIHR0c2xpcCA9IHNwZWNpYWwgJiBDWF9TTElQOwotICAgIHR0cHBwICA9 IHNwZWNpYWwgJiBDWF9QUFA7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICB0dHNoYXJlID0gc2hyOwkJ CS8qIFNoYXJlYWJsZSBkZXZpY2UgPyAqLwotICAgIGRlYnVnKEYxMTAsIk9TMiBTRVQgUE9SVCBm aW5hbCBzIixzLCIiKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIC8qIE9wZW4gdGhlIG5ldyBs aW5lICovICAgICAgICAKLQotICAgIGNrc3RybmNweSh0dG5hbWUscyxUVE5BTUxFTik7Ci0gICAg aWYgKCh5ID0gdHRvcGVuKHMsJl9sb2NhbCxtZG10eXAsY2R0aW1vKSkgPiAtMSkgewotCWN4dHlw ZSA9IChtZG10eXAgPiAwKSA/IENYVF9NT0RFTSA6IENYVF9ESVJFQ1Q7Ci0jaWZuZGVmIE5PRElB TAotCWRpYWxzdGEgPSBESUFfVU5LOwotI2lmZGVmIENLX1RBUEkKLQkvKiBpZiB0aGUgbGluZSBp cyBhIHRhcGkgZGV2aWNlLCB0aGVuIHdlIG5lZWQgdG8gYXV0by1leGVjdXRlICovCi0JLyogU0VU IE1PREVNIFRZUEUgVEFQSSAtIHdoaWNoIHdlIGRvIHRoZSBlcXVpdmFsZW50IG9mIGhlcmUuICAq LwotCWlmICh0dHRhcGkpIHsKLQkgICAgZXh0ZXJuIGludCB1c2VybWRtOwotCSAgICB1c2VybWRt ID0gMDsKLQkgICAgaW5pdG1kbSgzOCk7CQkvKiBGcm9tIGNrdWRpYS5jIG5fVEFQSSA9PSAzOCAq LwotCX0KLSNlbmRpZiAvKiBDS19UQVBJICovCi0jZW5kaWYgLyogTk9ESUFMICovCi0Jc3VjY2Vz cyA9IDE7Ci0gICAgfSBlbHNlIHsJCQkJLyogRmFpbGVkICovCi0jaWZkZWYgT1MyT05MWQotCWlm ICghc3RyY21wKHMsZGZ0dHkpKSAgIC8qIERvIG5vdCBnZW5lcmF0ZSBhbiBlcnJvciB3aXRoIGRm dHR5ICovCi0JICA7Ci0JZWxzZSBpZiAoeSA9PSAtNiAmJiB0dHNsaXApIHsKLQkgICAgbWFrZXN0 cigmc2xtc2csIkNhbid0IGFjY2VzcyBTTElQIGRyaXZlciIpOwotCSAgICBpZiAobXNnKSBwcmlu dGYoIj8lc1xuIixzbG1zZyk7Ci0JfSBlbHNlIGlmICh5ID09IC02ICYmIHR0cHBwKSB7Ci0JICAg IG1ha2VzdHIoJnNsbXNnLCJDYW4ndCBhY2Nlc3MgUFBQIGRyaXZlciIpOwotCSAgICBpZiAobXNn KSBwcmludGYoIj8lc1xuIixzbG1zZyk7Ci0JfSBlbHNlCi0jZW5kaWYgLyogT1MyT05MWSAqLwot CSAgaWYgKHkgPT0gLTIpIHsKLQkgICAgICBtYWtlc3RyKCZzbG1zZywiVGltZWQgb3V0IC0gbm8g Y2FycmllciIpOwotCSAgICAgIGlmIChtc2cpIHsKLQkJICBwcmludGYoIj8lc1xuIixzbG1zZyk7 Ci0JCSAgaWYgKGhpbnRzKSB7Ci0JCSAgICAgIHByaW50ZigiXG4qKioqKioqKioqKioqKioqKioq KioqKioqXG4iKTsKLQkJICAgICAgcHJpbnRmKAotCQkgICAgICAgIkhJTlQgKFVzZSBTRVQgSElO VFMgT0ZGIHRvIHN1cHByZXNzIGZ1dHVyZSBoaW50cyk6XG4iKTsKLQkJICAgICAgcHJpbnRmKAot CQkJICAiVHJ5IFNFVCBDQVJSSUVSIE9GRiBhbmQgU0VUIExJTkUgYWdhaW4sIG9yIGVsc2VcbiIp OwotCQkgICAgICBwcmludGYoIlNFVCBNT0RFTSwgU0VUIExJTkUsIGFuZCB0aGVuIERJQUwuXG4i KTsKLQkJICAgICAgcHJpbnRmKCIqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiIpOwotCQkg IH0KLQkgICAgICB9Ci0JICB9IGVsc2UgaWYgKHkgPT0gLTMpIHsKLQkgICAgICBtYWtlc3RyKCZz bG1zZywiQWNjZXNzIHRvIGxvY2sgZGVuaWVkIik7Ci0JICAgICAgaWYgKG1zZykgewotI2lmZGVm IFVOSVgKLQkJICBwcmludGYoCi0JCSAgICJTb3JyeSwgd3JpdGUgYWNjZXNzIHRvIFVVQ1AgbG9j a2ZpbGUgZGlyZWN0b3J5IGRlbmllZC5cbiIpOwotI2lmbmRlZiBOT0hJTlRTCi0JCSAgaWYgKGhp bnRzKSB7Ci0JCSAgICAgIHByaW50ZigiXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsK LQkJICAgICAgcHJpbnRmKAotCQkgICAgICAgIkhJTlQgKFVzZSBTRVQgSElOVFMgT0ZGIHRvIHN1 cHByZXNzIGZ1dHVyZSBoaW50cyk6XG4iKTsKLQkJICAgICAgcHJpbnRmKAotCSAgIlBsZWFzZSBy ZWFkIHRoZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZpbGUsICVzY2t1aW5zLnR4dCxcbiIs Ci0JICAgICAgICAgICAgICAgICAgICAga19pbmZvX2RpciA/IGtfaW5mb19kaXIgOiAiIgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCQkgICAgICBwcmludGYoCi0JICAib3IgdGhl IFVOSVggYXBwZW5kaXggb2YgdGhlIG1hbnVhbCwgXCJVc2luZyBDLUtlcm1pdFwiXG4iCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0JCSAgICAgIHByaW50ZigKLSAgICAgICAgICAi b3IgdmlzaXQgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sIFxuIgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCQkgICAgICBwcmludGYoIioqKioqKioq KioqKioqKioqKioqKioqKipcblxuIik7Ci0JCSAgfQotI2VuZGlmIC8qIE5PSElOVFMgKi8KLSNl bHNlCi0JCSAgcHJpbnRmKCJTb3JyeSwgYWNjZXNzIHRvIGxvY2sgZGVuaWVkOiAlc1xuIixzKTsK LSNlbmRpZiAvKiBVTklYICovCi0JICAgICAgfQotCSAgfSBlbHNlIGlmICh5ID09IC00KSB7Ci0J ICAgICAgbWFrZXN0cigmc2xtc2csIkFjY2VzcyB0byBkZXZpY2UgZGVuaWVkIik7Ci0JICAgICAg aWYgKG1zZykgewotCQkgIHByaW50ZigiU29ycnksIGFjY2VzcyB0byBkZXZpY2UgZGVuaWVkOiAl c1xuIixzKTsKLSNpZmRlZiBVTklYCi0jaWZuZGVmIE5PSElOVFMKLQkJICBpZiAoaGludHMpIHsK LQkJICAgICAgcHJpbnRmKCJcbioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOwotCQkgICAg ICBwcmludGYoCi0JCSAgICAgICJISU5UIChVc2UgU0VUIEhJTlRTIE9GRiB0byBzdXBwcmVzcyBm dXR1cmUgaGludHMpOlxuIik7Ci0JCSAgICAgIHByaW50ZigKLQkgICAgIlBsZWFzZSByZWFkIHRo ZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZpbGUsICVzY2t1aW5zLnR4dCxcbiIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGtfaW5mb19kaXIgPyBrX2luZm9fZGlyIDogIiIKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQkJICAgICAgcHJpbnRmKAotCSAgICAib3Ig dGhlIFVOSVggYXBwZW5kaXggb2YgdGhlIG1hbnVhbCwgXCJVc2luZyBDLUtlcm1pdFwiLlxuIgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCQkgICAgICBwcmludGYoIioqKioqKioq KioqKioqKioqKioqKioqKipcblxuIik7Ci0JCSAgfQotI2VuZGlmIC8qIE5PSElOVFMgKi8KLSNl bmRpZiAvKiBVTklYICovCi0JICAgICAgfQotCSAgfSBlbHNlIGlmICh5ID09IC01KSB7Ci0JICAg ICAgbWFrZXN0cigmc2xtc2csIkRldmljZSBpcyBpbiB1c2Ugb3IgdW5hdmFpbGFibGUiKTsKLQkg ICAgICBpZiAobXNnKQotI2lmZGVmIFZNUwotCQlwcmludGYoCi0JCSAgIlNvcnJ5LCBkZXZpY2Ug aXMgaW4gdXNlIG9yIG90aGVyd2lzZSB1bmF2YWlsYWJsZTogJXNcbiIscyk7Ci0jZWxzZQotCSAg ICAgIHByaW50ZigiU29ycnksIGRldmljZSBpcyBpbiB1c2U6ICVzXG4iLHMpOwotI2VuZGlmIC8q IFZNUyAqLwotCSAgfSBlbHNlIHsJCQkvKiBPdGhlciBlcnJvci4gKi8KLQkgICAgICBtYWtlc3Ry KCZzbG1zZywiRGV2aWNlIG9wZW4gZmFpbGVkIik7Ci0JICAgICAgaWYgKAotI2lmZGVmIFZNUwot CQkgIDEKLSNlbHNlCi0JCSAgZXJybm8KLSNlbmRpZiAvKiBWTVMgKi8KLQkJICApIHsKLQkJICBp bnQgeDsJCS8qIEZpbmQgYSBzYWZlLCBsb25nIGJ1ZmZlciAqLwotCQkgIG1ha2VzdHIoJnNsbXNn LGNrX2VycnN0cigpKTsKLSNpZm5kZWYgVk1TCi0JCSAgZGVidWcoRjExMSwiY3hfc2VyaWFsIHNl cmlhbCBlcnJubyIsc2xtc2csZXJybm8pOwotI2VuZGlmIC8qIFZNUyAqLwotCQkgIGlmIChtc2cp Ci0JCSAgICBwcmludGYoIkNvbm5lY3Rpb24gdG8gJXMgZmFpbGVkOiAlc1xuIixzLHNsbXNnKTsK LQkgICAgICB9IGVsc2UgaWYgKG1zZykKLQkJcHJpbnRmKCJTb3JyeSwgY2FuJ3Qgb3BlbiBjb25u ZWN0aW9uOiAlc1xuIixzKTsKLQkgIH0KLSAgICB9Ci0gICAgbmV0d29yayA9IDA7CQkJLyogTm8g bmV0d29yayBjb25uZWN0aW9uIGFjdGl2ZSAqLwotICAgIHNwZWVkID0gdHRnc3BkKCk7Ci0gICAg aWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIGxvY2FsID0gZGZsb2M7ICAgICAgICAgICAgICAgICAg LyogR28gYmFjayB0byBub3JtYWwgKi8KLSNpZm5kZWYgTUFDCi0gICAgICAgIGNrc3RybmNweSh0 dG5hbWUsZGZ0dHksVFROQU1MRU4pOyAvKiBSZXN0b3JlIGRlZmF1bHQgdHR5IG5hbWUgKi8KLSNl bmRpZiAvKiBNQUMgKi8KLSAgICAgICAgaGF2ZWxpbmUgPSAwOwotICAgICAgICBpZiAobWRtdHlw IDwgMCkgeyAgICAgICAgICAgICAgIC8qIFN3aXRjaGluZyBmcm9tIG5ldCB0byBhc3luYz8gKi8K LSAgICAgICAgICAgIGlmIChtZG1zYXYgPiAtMSkgICAgICAgICAgICAvKiBSZXN0b3JlIG1vZGVt IHR5cGUgZnJvbSBsYXN0ICovCi0gICAgICAgICAgICAgIG1kbXR5cCA9IG1kbXNhdjsgICAgICAg ICAgLyogU0VUIE1PREVNIGNvbW1hbmQsIGlmIGFueS4gKi8KLSAgICAgICAgICAgIGVsc2UKLSAg ICAgICAgICAgICAgbWRtdHlwID0gMDsKLSAgICAgICAgICAgIG1kbXNhdiA9IC0xOwotICAgICAg ICB9Ci0gICAgICAgIHJldHVybihtc2cgPyAtOSA6IDApOwkJLyogUmV0dXJuIGZhaWx1cmUgKi8K LSAgICB9Ci0gICAgaWYgKF9sb2NhbCA+IC0xKQotICAgICAgbG9jYWwgPSBfbG9jYWw7CQkJLyog T3BlbmVkIG9rLCBzZXQgbG9jYWwvcmVtb3RlLiAqLwotICAgIG1ha2VzdHIoJnNsbXNnLE5VTEwp OwkJLyogRXJhc2UgU0VUIExJTkUgbWVzc2FnZSAqLwotICAgIGNrc3RybmNweSh0dG5hbWUscyxU VE5BTUxFTik7ICAgICAgIC8qIENvcHkgbmFtZSBpbnRvIHJlYWwgcGxhY2UuICovCi0gICAgZGVi dWcoRjExMCwiY3hfc2VyaWFsIG9rIix0dG5hbWUsMCk7Ci0jaWZuZGVmIE5PWEZFUgotICAgIGlm ICgocmVsaWFibGUgIT0gU0VUX09GRiB8fCAhc2V0cmVsaWFibGUpKSAvKiBBc3N1bWUgbm90IHJl bGlhYmxlLiAqLwotICAgICAgcmVsaWFibGUgPSBTRVRfT0ZGOwotI2VuZGlmIC8qIE5PWEZFUiAq LwotCi0gIHhjeF9zZXJpYWw6Ci0gICAgc2V0ZmxvdygpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU2V0IGFwcHJvcHJpYXRlIGZsb3cgY29udHJvbCAqLwotICAgIGhhdmVsaW5lID0gMTsK LSNpZmRlZiBDS0xPR0RJQUwKLSAgICAgIGRvbG9nbGluZSgpOwotI2VuZGlmIC8qIENLTE9HRElB TCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGxvY2FsKSB7Ci0gICAgICAgIGlmIChubWFj KSB7ICAgICAgICAgICAgICAgICAgICAgLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLwotICAgICAg ICAgICAgaW50IGs7ICAgICAgICAgICAgICAgICAgICAgIC8qIFllcyAqLwotICAgICAgICAgICAg ayA9IG1sb29rKG1hY3RhYiwib25fb3BlbiIsbm1hYyk7ICAgLyogTG9vayB0aGlzIHVwICovCi0g ICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBmb3Vu ZCwgKi8KLSAgICAgICAgICAgICAgICBpZiAoZG9kbyhrLHR0bmFtZSwwKSA+IC0xKSAgICAgIC8q IHNldCBpdCB1cCwgKi8KLSAgICAgICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAg ICAgICAgIC8qIGFuZCBleGVjdXRlIGl0ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIGlmIChsb2NhbCAmJiAoY3ggfHwgc3gpKSB7 ICAgICAgICAgIC8qIC9DT05ORUNUIG9yIC9TRVJWRVIgc3dpdGNoIGdpdmVuICovCi0gICAgICAg IGV4dGVybiBpbnQgY2FycmllcjsKLSAgICAgICAgaWYgKGNhcnJpZXIgIT0gQ0FSX09GRikgewkv KiBMb29raW5nIGZvciBjYXJyaWVyPyAqLwotICAgICAgICAgICAgLyogT3BlbigpIHR1cm5zIG9u IERUUiAtLSB3YWl0IHVwIHRvIGEgc2Vjb25kIGZvciBDRCB0byBjb21lIHVwICovCi0gICAgICAg ICAgICBpbnQgaSwgeDsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7ICAv KiBXQUlUIDEgQ0QuLi4gKi8KLSAgICAgICAgICAgICAgICB4ID0gdHRnbWRtKCk7Ci0gICAgICAg ICAgICAgICAgaWYgKHggPCAwIHx8IHggJiBCTV9EQ0QpCi0gICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICBtc2xlZXAoMTAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotICAgICAgICBpZiAoY3gpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIC9DT05ORUNUICov Ci0gICAgICAgICAgICAvKiBDb21tYW5kIHdhcyBjb25maXJtZWQgc28gd2UgY2FuIHByZS1wb3Ag Y29tbWFuZCBsZXZlbC4gKi8KLSAgICAgICAgICAgIC8qIFRoaXMgaXMgc28gQ09OTkVDVCBtb2R1 bGUgd29uJ3QgdGhpbmsgd2UncmUgZXhlY3V0aW5nIGEgKi8KLSAgICAgICAgICAgIC8qIHNjcmlw dCBpZiBDT05ORUNUIHdhcyB0aGUgZmluYWwgY29tbWFuZCBpbiB0aGUgc2NyaXB0LiAqLwotCi0g ICAgICAgICAgICBpZiAoY21kbHZsID4gMCkKLSAgICAgICAgICAgICAgcHJlcG9wKCk7Ci0jaWZu ZGVmIE5PRElBTAotICAgICAgICAgICAgZGlhbHN0YSA9IERJQV9VTks7Ci0jZW5kaWYgLyogTk9E SUFMICovCi0jaWZkZWYgTE9DVVMKLSAgICAgICAgICAgIGlmIChhdXRvbG9jdXMpIHsKLSAgICAg ICAgICAgICAgICBzZXRsb2N1cygxLDEpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIExPQ1VT ICovCi0gICAgICAgICAgICBzdWNjZXNzID0gZG9jb25lY3QoMCwgY21kbHZsID09IDAgPyAxIDog MCk7Ci0gICAgICAgICAgICBpZiAodHRjaGsoKSA8IDApCi0gICAgICAgICAgICAgIGRvbG9nZW5k KCk7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2Vzcyk7Ci0jaWZuZGVmIE5PWEZFUgotICAgICAg ICB9IGVsc2UgaWYgKHN4KSB7ICAgICAgICAgICAgICAgIC8qIC9TRVJWRVIgKi8KLSAgICAgICAg ICAgIHNzdGF0ZSA9ICd4JzsKLSNpZmRlZiBNQUMKLSAgICAgICAgICAgIHdoYXQgPSBXX1JFQ1Y7 Ci0gICAgICAgICAgICBzY3JjcmVhdGUoKTsKLSNlbmRpZiAvKiBNQUMgKi8KLSAgICAgICAgICAg IGlmIChsb2NhbCkgZGlzcGxhID0gMTsKLSNpZmRlZiBBTUlHQQotICAgICAgICAgICAgcmVxb2Zm KCk7ICAgICAgICAgICAgICAgICAgIC8qIE5vIERPUyByZXF1ZXN0b3JzIHdoaWxlIHNlcnZlciAq LwotI2VuZGlmIC8qIEFNSUdBICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgICAgIH0KLSAg ICB9Ci0jaWZuZGVmIE5PRElBTAotICAgIGRpYWxzdGEgPSBESUFfVU5LOwotI2VuZGlmIC8qIE5P RElBTCAqLwotI2lmZGVmIExPQ1VTCi0gICAgaWYgKGF1dG9sb2N1cykgewotICAgICAgICBzZXRs b2N1cygxLDEpOwotICAgIH0KLSNlbmRpZiAvKiBMT0NVUyAqLwotICAgIHJldHVybihzdWNjZXNz ID0gMSk7Ci19Ci0KLQotLyogUyBFIFQgTCBJIE4gLS0gcGFyc2UgbmFtZSBvZiBhbmQgdGhlbiBv cGVuIGNvbW11bmljYXRpb24gZGV2aWNlLiAqLwotLyoKLSAgQ2FsbCB3aXRoOgotICAgIHh4ID09 IFhZTElORSBmb3IgYSBzZXJpYWwgKHR0eSkgbGluZSwgWFlIT1NUIGZvciBhIG5ldHdvcmsgaG9z dCwKLSAgICB6eiA9PSAwIG1lYW5zIGlmIHVzZXIgZG9lc24ndCBnaXZlIGEgZGV2aWNlIG5hbWUs IGNvbnRpbnVlIGN1cnJlbnQKLSAgICAgICAgICAgIGFjdGl2ZSBjb25uZWN0aW9uIChpZiBhbnkp OwotICAgIHp6ICE9IDAgbWVhbnMgaWYgdXNlciBkb2Vzbid0IGdpdmUgYSBkZXZpY2UgbmFtZSwg dGhlbiBjbG9zZSB0aGUKLSAgICAgICAgICAgIGN1cnJlbnQgY29ubmVjdGlvbiBhbmQgcmVzdG9y ZSB0aGUgZGVmYXVsdCBjb21tdW5pY2F0aW9uIGRldmljZS4KLSAgICBmYyA9PSAwIHRvIGp1c3Qg bWFrZSB0aGUgY29ubmVjdGlvbiwgMSB0byBhbHNvIENPTk5FQ1QgKGUuZy4gInRlbG5ldCIpLgot Ki8KLWludAotc2V0bGluKHh4LCB6eiwgZmMpIAotICAgIGludCB4eCwgenosIGZjOyAKLXsKLSAg ICBleHRlcm4gY2hhciBwd2J1ZltdLCAqIGdfcHN3ZDsKLSAgICBleHRlcm4gaW50IHB3ZmxnLCBw d2NyeXB0LCBnX3BmbGcsIGdfcGNwdCwgbm9sb2NhbDsKLSAgICBpbnQgd2FpdDsKLSAgICAvKiBp bnQgdG5fd2FpdF9zdjsgKi8KLSAgICBpbnQgbXluZXQ7Ci0gICAgaW50IF9sb2NhbCA9IC0xOwot ICAgIGludCBjLCBpLCBoYXZlc3dpdGNoID0gMDsKLSAgICBpbnQgaGF2ZXVzZXIgPSAwOwotICAg IGludCBnZXR2YWwgPSAwOwotICAgIGludCB3aWxkID0gMDsgICAgICAgICAgICAgICAgICAgICAg IC8qIEZpbGVzcGVjIGhhcyB3aWxkY2FyZHMgKi8KLSAgICBpbnQgY3ggPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDb25uZWN0IGFmdGVyICovCi0gICAgaW50IHN4ID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQmVjb21lIHNlcnZlciBhZnRlciAqLwotICAgIGludCBhX3R5 cGUgPSAtMTsgICAgICAgICAgICAgICAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIHR5cGUgKi8KLSAg ICBpbnQgZV90eXBlID0gLTE7ICAgICAgICAgICAgICAgICAgICAvKiBUZWxuZXQgL0VOQ1JZUFQg dHlwZSAqLwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICBpbnQgZW5jcnlwdCA9IDA7ICAgICAg ICAgICAgICAgICAgICAvKiBFbmNyeXB0ZWQ/ICovCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LwotICAgIGludCBzaHIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNoYXJlIHNlcmlh bCBkZXZpY2UgKi8KLSAgICBpbnQgY29uZmlybWVkID0gMDsgICAgICAgICAgICAgICAgICAvKiBD b21tYW5kIGhhcyBiZWVuIGVudGVyZWQgKi8KLSAgICBzdHJ1Y3QgRkRCIHN3LCB0eCwgbng7Ci0j aWZkZWYgT1MyCi0gICAgc3RydWN0IEZEQiBmbDsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGNo YXIgKiBzczsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBpbnQgcmF3ZmxnID0gMDsKLSNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KLQotICAgIGNoYXIgc3J2YnVmW1NSVkJVRlNJWisxXTsKLQotI2lmZGVm IE9TMgotI2lmZGVmIE5UCi0gICAgaW50IHh4dGFwaSA9IDA7Ci0jZWxzZQotICAgIGludCB4eHNs aXAgPSAwLCB4eHBwcCA9IDA7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQot ICAgIGludCBkb3NzaCA9IDA7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJzZXRsaW4gZmMiLCIiLGZjKTsK LSAgICBkZWJ1ZyhGMTAxLCJzZXRsaW4genoiLCIiLHp6KTsKLSAgICBkZWJ1ZyhGMTAxLCJzZXRs aW4geHgiLCIiLHh4KTsKLQotI2lmZGVmIFNTSENNRAotICAgIGlmICh4eCA9PSBYWFNTSCkgeyAg ICAgICAgICAgICAgICAgIC8qIFNTSCBiZWNvbWVzIFBUWSBTU0ggLi4uICovCi0gICAgICAgIGRv c3NoID0gMTsKLSAgICAgICAgeHggPSBYWUhPU1Q7Ci0gICAgfSBlbHNlIGlmICghY2tzdHJjbXAo InNzaCAiLGxpbmUsNCwwKSkgeyAvKiAyMDEwLzAzLzAxICovCi0gICAgICAgIGRvc3NoID0gMTsK LSAgICAgICAgeHggPSBYWUhPU1Q7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInNldGxpbiBkb3Nz aCIsIiIsZG9zc2gpOwotI2VuZGlmIC8qIFNTSENNRCAqLwotCi0jaWZkZWYgVE5DT0RFCi0gICAg LyogdG5fd2FpdF9zdiA9IHRuX3dhaXRfZmxnOyAqLwotICAgIHdhaXQgPSB0bl93YWl0X2ZsZzsK LSNlbHNlCi0gICAgLyogdG5fd2FpdF9zdiA9IDA7ICovCi0gICAgd2FpdCA9IDA7Ci0jZW5kaWYg LyogVE5DT0RFICovCi0KLSAgICBteW5ldCA9IG5ldHR5cGU7Ci0KLSAgICBpZiAobm9sb2NhbCkg ewotICAgICAgICBtYWtlc3RyKCZzbG1zZywiTWFraW5nIGNvbm5lY3Rpb25zIGlzIGRpc2FibGVk Iik7Ci0gICAgICAgIHByaW50ZigiP1NvcnJ5LCBtYWtpbmcgY29ubmVjdGlvbnMgaXMgZGlzYWJs ZWRcbiIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAobmV0c2F2ZSA+IC0x KQotICAgICAgbmV0dHlwZSA9IG5ldHNhdmU7Ci0KLSAgICBpZiAoZmMgIT0gMCB8fCB6eiA9PSAw KSAgICAgICAgICAgICAvKiBQcmVzZXQgL0NPTk5FQ1Qgc3dpdGNoICovCi0gICAgICBjeCA9IDE7 Ci0KLSAgICBkZWJ1ZyhGMTAxLCJzZXRsaW4gY3giLCIiLGN4KTsKLQotICAgICpzcnZidWYgPSBO VUw7Ci0KLSAgICBsaW5lWzBdID0gTlVMOwotICAgIHMgPSBsaW5lOwotCi0jaWZkZWYgTkVUQ09O TgotI2lmZGVmIENLX1NFQ1VSSVRZCi0gICAgaWYgKHRtcHN0cmluZykKLSAgICAgICAgbWFrZXN0 cigmdG1wc3RyaW5nLE5VTEwpOwotI2VuZGlmIC8qIENLX1NFQ1VSSVRZICovCi0gICAgaWYgKHRt cHVzcmlkKQotICAgICAgICBtYWtlc3RyKCZ0bXB1c3JpZCxOVUxMKTsKLSNlbmRpZiAvKiBORVRD T05OICovCi0KLSAgICBhdXRvZmxvdyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFi bGUgYXV0b21hdGljIGZsb3cgc2V0dGluZyAqLwotCi0gICAgaWYgKHh4ID09IFhZSE9TVCkgeyAg ICAgICAgICAgICAgICAgLyogU0VUIEhPU1QgPGhvc3RuYW1lPiAqLwotI2lmbmRlZiBORVRDT05O Ci0gICAgICAgIG1ha2VzdHIoJnNsbXNnLCJOZXR3b3JrIGNvbm5lY3Rpb25zIG5vdCBzdXBwb3J0 ZWQiKTsKLSAgICAgICAgcHJpbnRmKCI/JXNcbiIsc2xtc2cpOwotICAgICAgICByZXR1cm4oLTkp OwotI2Vsc2UgLyogTkVUQ09OTiAqLwotI2lmbmRlZiBOT1BVU0gKLSAgICAgICAgaWYgKChteW5l dCA9PSBORVRfQ01EIHx8IG15bmV0ID09IE5FVF9QVFkgfHwgZG9zc2gpICYmIG5vcHVzaCkgewot ICAgICAgICAgICAgbWFrZXN0cigmc2xtc2csIkFjY2VzcyB0byBleHRlcm5hbCBjb21tYW5kcyBp cyBkaXNhYmxlZCIpOwotICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIGFjY2VzcyB0byBleHRl cm5hbCBjb21tYW5kcyBpcyBkaXNhYmxlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwot ICAgICAgICB9Ci0jZW5kaWYgLyogTk9QVVNIICovCi0KLSNpZmRlZiBTU0hDTUQKLSAgICAgICAg aWYgKGRvc3NoKSB7ICAgICAgICAgICAgICAgICAgICAvKiBTU0ggY29ubmVjdGlvbiB2aWEgcHR5 ICovCi0gICAgICAgICAgICBpbnQgazsKLQkgICAgZXh0ZXJuIGludCB0dHlmZDsJCS8qIDIwMTAv MDMvMDEgKi8KLSAgICAgICAgICAgIGsgPSBja3N0cm5jcHkobGluZSwgc3NoY21kID8gc3NoY21k IDogZGVmc3NoY21kLCBMSU5CVUZTSVopOwotICAgICAgICAgICAgZGVidWcoRjExMSwic2V0bGlu IHNzaGNtZCAxIixsaW5lLGspOwotICAgICAgICAgICAgaWYgKCh4ID0gY210eHQoIk9wdGlvbmFs IHN3aXRjaGVzIGFuZCBob3N0bmFtZSIsIiIsJnMseHhzdHJpbmcpKTwwKQotICAgICAgICAgICAg ICByZXR1cm4oeCk7Ci0KLSAgICAgICAgICAgIC8qIDIwMTAtMDMtMzAgKi8KLQkgICAgaWYgKCEq cyAmJiB0dHlmZCA8IDAgJiYgIWNrc3RyY21wKCJzc2ggIix0dG5hbWUsNCwwKSkgeyAKLQkJeCA9 IGNrc3RybmNweShsaW5lLHR0bmFtZSxMSU5CVUZTSVopOwotCSAgICB9IGVsc2UgewotCQlpZiAo ISpzKSB7Ci0JCSAgICBwcmludGYoIj9TU0ggdG8gd2hlcmU/XG4iKTsKLQkJICAgIHJldHVybigt OSk7Ci0JCX0KLQkJaWYgKGsgPCBMSU5CVUZTSVopIHsKLQkJICAgIGxpbmVbaysrXSA9IFNQOwot CQkgICAgbGluZVtrXSA9IE5VTDsKLQkJICAgIGRlYnVnKEYxMTEsInNldGxpbiBzc2hjbWQgMiIs bGluZSxrKTsKLQkJfSBpZiAoayA8IExJTkJVRlNJWikgewotCQkgICAgY2tzdHJuY3B5KCZsaW5l W2tdLHMsTElOQlVGU0laLWspOwotCQkgICAgZGVidWcoRjExMSwic2V0bGluIHNzaGNtZCAzIixs aW5lLGspOwotCQl9IGVsc2UgewotCQkgICAgcHJpbnRmKCI/VG9vIGxvbmdcbiIpOwotCQkgICAg cmV0dXJuKC05KTsKLQkJfQotCSAgICB9Ci0JICAgIHggPSBjeF9uZXQoIE5FVF9QVFksICAgICAg ICAgICAgICAgIC8qIG5ldHdvcmsgdHlwZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgMCwg ICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKG5vdCB1c2VkKSAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgbGluZSwgICAgICAgICAgICAgICAgICAgLyogaG9zdCAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgLyogc2VydmljZSAobm90 IHVzZWQpICovCi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAg ICAvKiB1c2VybmFtZSAobm90IHVzZWQpICovCi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxM LCAgICAgICAgICAgICAgICAgICAvKiBwYXNzd29yZCAobm90IHVzZWQpICovCi0gICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIChub3QgdXNl ZCkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC0xLC0xLC0xLCAgICAgICAgICAgICAgIC8q IHBhcmFtcyAxLTMgKG5vdCB1c2VkKSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAg ICAgICAgICAgICAgICAgICAgLyogY29ubmVjdCBpbW1lZGlhdGVseSAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgc3gsICAgICAgICAgICAgICAgICAgICAgLyogc2VydmVyPyAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgenosICAgICAgICAgICAgICAgICAgICAgLyogY2xvc2UgY3VycmVu dD8gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgIC8q IG5vdCBndWkgKi8KLQkgICAgZGVidWcoRjExMSwic2V0bGluIGN4X25ldCIsbGluZSx4KTsKLQkg ICAgcmV0dXJuKHgpOwotICAgICAgICB9Ci0jZW5kaWYgLyogU1NIQ01EICovCi0KLS8qCi0gIEhl cmUgd2UgcGFyc2Ugb3B0aW9uYWwgc3dpdGNoZXMgYW5kIHRoZW4gdGhlIGhvc3RuYW1lIG9yIHdo YXRldmVyLAotICB3aGljaCBkZXBlbmRzIG9uIHRoZSBuZXR3b3JrIHR5cGUuICBUaGUgdHJpY2t5 IHBhcnQgaXMsIHRoZSBuZXR3b3JrIHR5cGUKLSAgY2FuIGJlIHNldCBieSBhIHN3aXRjaC4KLSov Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgIG1ha2VzdHIoJmdfcHN3ZCxwd2J1Zik7ICAgICAgICAg LyogU2F2ZSBnbG9iYWwgcHdidWYgKi8KLSAgICAgICAgZ19wZmxnID0gcHdmbGc7ICAgICAgICAg ICAgICAgICAvKiBhbmQgZmxhZyAqLwotICAgICAgICBnX3BjcHQgPSBwd2NyeXB0OwotI2VuZGlm IC8qIE5PU1BMICovCi0KLSAgICAgICAgY29uZmlybWVkID0gMDsKLSAgICAgICAgaGF2ZXN3aXRj aCA9IDA7Ci0jaWZkZWYgTkVURklMRQotICAgICAgICBpZiAobXluZXQgIT0gTkVUX0ZJTEUpIHsK LSNlbmRpZiAvKiBORVRGSUxFICovCi0gICAgICAgICAgICBzcyA9IChteW5ldCA9PSBORVRfQ01E IHx8IG15bmV0ID09IE5FVF9QVFkpID8KLSAgICAgICAgICAgICAgIkNvbW1hbmQsIG9yIHN3aXRj aCIgOgotICAgICAgICAgICAgICAgIChteW5ldCA9PSBORVRfVENQQSB8fCBteW5ldCA9PSBORVRf VENQQgotICAgICAgICAgICAgICAgICAgfHwgbXluZXQgPT0gTkVUX1NTSCkgPwotICAgICAgICAg ICAgICAgICAgIkhvc3RuYW1lLCBpcC1hZGRyZXNzLCBvciBzd2l0Y2giIDoKLSAgICAgICAgICAg ICAgICAgICAgIkhvc3Qgb3Igc3dpdGNoIjsKLSAgICAgICAgICAgIGlmIChmYykgewotICAgICAg ICAgICAgICAgIGlmIChteW5ldCA9PSBORVRfVENQQiAmJgotICAgICAgICAgICAgICAgICAgICAo dHRucHJvdG8gPT0gTlBfVEVMTkVUIHx8IHR0bnByb3RvID09IE5QX0tFUk1JVCkpIHsKLSAgICAg ICAgICAgICAgICAgICAgaWYgKG5zaHRlbHRhYikgewotICAgICAgICAgICAgICAgICAgICAgICAg aGF2ZXN3aXRjaCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgY21mZGJpKCZzdyxfQ01LRVks c3MsIiIsIiIsbnNodGVsdGFiLDQseHhzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNodGVsdGFiLCZueCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICB9Ci0jaWZkZWYgUkxPR0NPREUKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChteW5ldCA9PSBO RVRfVENQQiAmJiB0dG5wcm90byA9PSBOUF9STE9HSU4pIHsKLSAgICAgICAgICAgICAgICAgICAg aWYgKG5zaHJsZ3RhYikgewotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZXN3aXRjaCsrOwot ICAgICAgICAgICAgICAgICAgICAgICAgY21mZGJpKCZzdyxfQ01LRVksc3MsIiIsIiIsbnNocmxn dGFiLDQseHhzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hybGd0YWIs Jm54KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAv KiBSTE9HQ09ERSAqLwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBoYXZl c3dpdGNoKys7Ci0gICAgICAgICAgICAgICAgY21mZGJpKCZzdyxfQ01LRVksc3MsIiIsIiIsbnNo dGFiLDQseHhzdHJpbmcsc2h0YWIsJm54KTsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBORVRGSUxF Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBORVRGSUxFICovCi0gICAgICAgIGlmIChteW5ldCA9PSBO RVRfVENQQiB8fCBteW5ldCA9PSBORVRfU0xBVCB8fAotCSAgICBteW5ldCA9PSBORVRfU1NIICB8 fCBteW5ldCA9PSBORVRfREVDKSB7Ci0gICAgICAgICAgICBjbWZkYmkoJm54LF9DTUZMRCwiSG9z dCIsIiIsIiIsMCwwLHh4c3RyaW5nLE5VTEwsTlVMTCk7Ci0jaWZkZWYgTkVURklMRQotICAgICAg ICB9IGVsc2UgaWYgKG15bmV0ID09IE5FVF9GSUxFKSB7Ci0gICAgICAgICAgICBjbWZkYmkoJm54 LF9DTUlGSSwiRmlsZW5hbWUiLCIiLCIiLDAsMCx4eHN0cmluZyxOVUxMLE5VTEwpOwotI2VuZGlm IC8qIE5FVEZJTEUgKi8KLSNpZmRlZiBQVFlPUlBJUEUKLSAgICAgICAgfSBlbHNlIGlmIChteW5l dCA9PSBORVRfQ01EIHx8IG15bmV0ID09IE5FVF9QVFkpIHsKLSAgICAgICAgICAgIGNtZmRiaSgm bngsX0NNVFhULCJDb21tYW5kIiwiIiwiIiwwLDAseHhzdHJpbmcsTlVMTCxOVUxMKTsKLSNlbmRp ZiAvKiBQVFlPUlBJUEUgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNtZmRiaSgm bngsX0NNVFhULCJIb3N0IiwiIiwiIiwwLDAseHhzdHJpbmcsTlVMTCxOVUxMKTsKLSAgICAgICAg fQotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgeCA9IGNtZmRiKGhhdmVzd2l0Y2gg PyAmc3cgOiAmbngpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwic2V0bGluIGNtZmRiIiwiIix4 KTsKLSAgICAgICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgICAgaWYgKHggIT0gLTMpCi0g ICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAg ICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg ICAgIGNvbmZpcm1lZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAh PSBfQ01LRVkpIHsgICAgLyogTm90IGEgc3dpdGNoICovCi0gICAgICAgICAgICAgICAgY2tzdHJu Y3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOyAvKiBTYXZlIHRoZSBkYXRhICov Ci0gICAgICAgICAgICAgICAgcyA9IGxpbmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIHRoYXQg d2FzIHBhcnNlZC4uLiAqLwotICAgICAgICAgICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSA9PSBf Q01JRkkpIHsKLSAgICAgICAgICAgICAgICAgICAgd2lsZCA9IGNtcmVzdWx0Lm5yZXN1bHQ7Ci0g ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01UWFQpIHsKLSAg ICAgICAgICAgICAgICAgICAgY29uZmlybWVkID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogYW5kIGJyZWFrIG91dCBvZiB0 aGlzIGxvb3AgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGMgPSBjbWdicmsoKTsgICAg ICAgICAgICAgICAvKiBIYXZlIHN3aXRjaCAtIGdldCBicmVhayBjaGFyYWN0ZXIgKi8KLSAgICAg ICAgICAgIGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9Jyk7IC8qIE11c3QgcGFyc2UgYW4g YWd1bWVudD8gKi8KLSAgICAgICAgICAgIGlmIChnZXR2YWwgJiYgIShjbXJlc3VsdC5rZmxhZ3Mg JiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBu b3QgdGFrZSBhcmd1bWVudHNcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBDTV9B UkcpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4g YXJndW1lbnRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsgLyogSXQncyBhIHN3aXRj aC4uICovCi0gICAgICAgICAgICAgIGNhc2UgU0xfQ05YOiAgICAgICAgICAgICAgLyogL0NPTk5F Q1QgKi8KLSAgICAgICAgICAgICAgICBjeCA9IDE7Ci0gICAgICAgICAgICAgICAgc3ggPSAwOwot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFNMX1NSVjogICAgICAg ICAgICAgIC8qIC9TRVJWRVIgKi8KLSAgICAgICAgICAgICAgICBjeCA9IDA7Ci0gICAgICAgICAg ICAgICAgc3ggPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIE5FVENNRAotICAg ICAgICAgICAgICBjYXNlIFNMX0NNRDogICAgICAgICAgICAgIC8qIC9DT01NQU5EICovCi0gICAg ICAgICAgICAgICAgbmV0c2F2ZSA9IG15bmV0OwotICAgICAgICAgICAgICAgIG15bmV0ID0gTkVU X0NNRDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRl ZiBORVRQVFkKLSAgICAgICAgICAgICAgY2FzZSBTTF9QVFk6ICAgICAgICAgICAgICAvKiAvUFRZ ICovCi0gICAgICAgICAgICAgICAgbmV0c2F2ZSA9IG15bmV0OwotICAgICAgICAgICAgICAgIG15 bmV0ID0gTkVUX1BUWTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBORVRQVFkg Ki8KLSAgICAgICAgICAgICAgY2FzZSBTTF9ORVQ6ICAgICAgICAgICAgICAvKiAvTkVUV09SSy1U WVBFICovCi0gICAgICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkobmV0Y21kLG5uZXRzLCIiLCIi LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAg ICAgICAgIG15bmV0ID0geDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotI2lmZGVmIENLX1NF Q1VSSVRZCi0gICAgICAgICAgICAgIGNhc2UgU0xfUFNXOiAgICAgICAgICAgICAgLyogL1BBU1NX T1JEOiAqLwotICAgICAgICAgICAgICAgIGlmICghZ2V0dmFsKQotICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVib2sgPSAwOwotICAgICAgICAgICAgICAgIGlmICgo eCA9IGNtZmxkKCJQYXNzd29yZCIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIo JnRtcHN0cmluZywiIik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gKGludClzdHJsZW4ocykpID4gUFdCVUZMKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzbG1zZywiSW50ZXJuYWwgZXJyb3IiKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCB0b28gbG9uZyAtIG1heCA9 ICVkXG4iLFBXQlVGTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnRtcHN0cmlu ZyxzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYg LyogQ0tfU0VDVVJJVFkgKi8KLQotICAgICAgICAgICAgICBjYXNlIFNMX1VJRDogICAgICAgICAg ICAgIC8qIC9VU0VSSUQ6ICovCi0gICAgICAgICAgICAgICAgaWYgKCFnZXR2YWwpCi0gICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiVXNlcmlk IiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAt MykgewotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmdG1wdXNyaWQsIiIpOwotICAg ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7Ci0gICAgICAgICAgICAgICAgICAgIGlm ICgoeCA9IChpbnQpc3RybGVuKHMpKSA+IDYzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt YWtlc3RyKCZzbG1zZywiSW50ZXJuYWwgZXJyb3IiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiP1NvcnJ5LCB0b28gbG9uZyAtIG1heCA9ICVkXG4iLDYzKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgbWFrZXN0cigmdG1wdXNyaWQscyk7Ci0gICAgICAgICAgICAgICAgICAgIGhh dmV1c2VyID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0K LSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotI2lmZGVmIENLX1NSUAotICAgICAgICAgICAgICBj YXNlIFNMX1NSUDoKLSAgICAgICAgICAgICAgICBhX3R5cGUgPSBBVVRIVFlQRV9TUlA7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfU1JQICovCi0jaWZkZWYgQ0tfU1NMCi0g ICAgICAgICAgICAgIGNhc2UgU0xfU1NMOgotICAgICAgICAgICAgICAgIGFfdHlwZSA9IEFVVEhU WVBFX1NTTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNp ZmRlZiBOVAotICAgICAgICAgICAgICBjYXNlIFNMX05UTE06Ci0gICAgICAgICAgICAgICAgYV90 eXBlID0gQVVUSFRZUEVfTlRMTTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBO VCAqLwotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgICAgICAgICAgIGNhc2UgU0xfS1JCNDoKLSAg ICAgICAgICAgICAgICBhX3R5cGUgPSBBVVRIVFlQRV9LRVJCRVJPU19WNDsKLSAgICAgICAgICAg ICAgICBpZiAodHRucHJvdG8gPT0gTlBfUkxPR0lOKQotICAgICAgICAgICAgICAgICAgdHRucHJv dG8gPQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICAgICAgZW5jcnlwdCA/ IE5QX0VLNExPR0lOIDoKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAg ICAgICAgICAgTlBfSzRMT0dJTjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0dG5wcm90byA9 PSBOUF9LNUxPR0lOKQotICAgICAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9LNExPR0lOOwot I2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0dG5wcm90byA9 PSBOUF9FSzVMT0dJTikKLSAgICAgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfRUs0TE9HSU47 Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICBjYXNlIFNMX0tSQjU6Ci0gICAgICAgICAgICAgICAgYV90eXBlID0gQVVUSFRZ UEVfS0VSQkVST1NfVjU7Ci0gICAgICAgICAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX1JMT0dJ TikKLSAgICAgICAgICAgICAgICAgIHR0bnByb3RvID0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0g ICAgICAgICAgICAgICAgICAgIGVuY3J5cHQgPyBOUF9FSzVMT0dJTiA6Ci0jZW5kaWYgLyogQ0tf RU5DUllQVElPTiAqLwotICAgICAgICAgICAgICAgICAgICAgIE5QX0s1TE9HSU47Ci0gICAgICAg ICAgICAgICAgZWxzZSBpZiAodHRucHJvdG8gPT0gTlBfSzRMT0dJTikKLSAgICAgICAgICAgICAg ICAgIHR0bnByb3RvID0gTlBfSzVMT0dJTjsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAg ICAgICAgICAgZWxzZSBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pCi0gICAgICAgICAgICAg ICAgICB0dG5wcm90byA9IE5QX0VLNUxPR0lOOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8K LSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotICAgICAg ICAgICAgICBjYXNlIFNMX0FVVEg6IHsKLSAgICAgICAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qg a2V5dGFiIGF1dHlwdGFiW107Ci0gICAgICAgICAgICAgICAgICBleHRlcm4gaW50IG5hdXR5cDsK LSAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KGF1dHlwdGFiLG5hdXR5cCwidHlwZSBv ZiBhdXRoZW50aWNhdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXV0 b21hdGljIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwot ICAgICAgICAgICAgICAgICAgYV90eXBlID0geDsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNpZmRlZiBD S19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgIGNhc2UgU0xfRU5DOgotICAgICAgICAgICAgICAg IHN3aXRjaCAodHRucHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgTlBfSzRMT0dJTjoK LSAgICAgICAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9FSzRMT0dJTjsKLSAgICAgICAgICAg ICAgICAgICAgZW5jcnlwdCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgY2FzZSBOUF9LNUxPR0lOOgotICAgICAgICAgICAgICAgICAgICB0dG5wcm90 byA9IE5QX0VLNUxPR0lOOwotICAgICAgICAgICAgICAgICAgICBlbmNyeXB0ID0gMTsKLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIE5QX0tFUk1JVDoK LSAgICAgICAgICAgICAgICAgIGNhc2UgTlBfVEVMTkVUOiB7Ci0gICAgICAgICAgICAgICAgICAg ICAgc3RhdGljIHN0cnVjdCBrZXl0YWIgKiB0bmV0YmwgPSBOVUxMOwotICAgICAgICAgICAgICAg ICAgICAgIHN0YXRpYyBpbnQgbnRuZXRibCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgeCA9 IGNrX2dldF9jcnlwdF90YWJsZSgmdG5ldGJsLCZudG5ldGJsKTsKLSAgICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJja19nZXRfY3J5cHRfdGFibGUgeCIsIiIseCk7Ci0gICAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfZ2V0X2NyeXB0X3RhYmxlIG4iLCIiLG50bmV0Ymwp OwotICAgICAgICAgICAgICAgICAgICAgIGlmICh4IDwgMSB8fCAhdG5ldGJsIHx8IG50bmV0Ymwg PCAxKSAvKiBEaWRuJ3QgZ2V0IGl0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gMDsK LSAgICAgICAgICAgICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZXN0cigmc2xtc2csIkludGVybmFsIGVycm9yIik7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiP09vcHMsIHR5cGVzIG5vdCBsb2FkZWRcbiIpOwotICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0bmV0YmwsbnRuZXRibCwidHlwZSBvZiBl bmNyeXB0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXV0b21h dGljIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgICAgICAgICAgICAgICBlX3R5cGUgPSB4OwotICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAg IGNhc2UgU0xfV0FJVDoKLSAgICAgICAgICAgICAgICB3YWl0ID0gMTsKLSAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBTTF9OT1dBSVQ6Ci0gICAgICAgICAgICAgICAg d2FpdCA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLQotI2lmZGVmIE5FVEZJTEUKLSAgICAgICAgaWYgKG15bmV0ID09IE5FVF9GSUxFKSB7ICAg ICAgICAvKiBQYXJzZWQgYnkgY21pZmkoKSAqLwotCSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp CS8qIE5lZWRzIGNvbmZpcm1hdGlvbiAqLwotCSAgICAgIHJldHVybih4KTsKLQkgICAgeCA9IGN4 X25ldChteW5ldCwJCS8qIG5ldHR5cGUgKi8KLQkJICAgICAgIDAsCQkvKiBwcm90b2NvbCAobm90 IHVzZWQpICovCi0JCSAgICAgICBsaW5lLAkJLyogaG9zdCAqLwotCQkgICAgICAgIiIsCQkvKiBw b3J0ICovCi0JCSAgICAgICBOVUxMLAkJLyogYWx0ZXJuYXRlIHVzZXJuYW1lICovCi0JCSAgICAg ICBOVUxMLAkJLyogcGFzc3dvcmQgKi8KLQkJICAgICAgIE5VTEwsCQkvKiBjb21tYW5kIHRvIGV4 ZWN1dGUgKi8KLQkJICAgICAgIDAsCQkvKiBwYXJhbTEgKi8KLQkJICAgICAgIDAsCQkvKiBwYXJh bTIgKi8KLQkJICAgICAgIDAsCQkvKiBwYXJhbTMgKi8KLQkJICAgICAgIGN4LAkJLyogZW50ZXIg Q09OTkVDVCBtb2RlICovCi0JCSAgICAgICBzeCwJCS8qIGVudGVyIFNFUlZFUiBtb2RlICovCi0J CSAgICAgICB6eiwJCS8qIGNsb3NlIGNvbm5lY3Rpb24gaWYgb3BlbiAqLwotCQkgICAgICAgMAkJ LyogZ3VpICovCi0JCSAgICAgICApOwotICAgICAgICB9Ci0jZW5kaWYgLyogTkVURklMRSAqLwot Ci0jaWZkZWYgTkVUQ01ECi0gICAgICAgIGlmIChteW5ldCA9PSBORVRfQ01EIHx8IG15bmV0ID09 IE5FVF9QVFkpIHsKLSAgICAgICAgICAgIGNoYXIgKnAgPSBOVUxMOwotICAgICAgICAgICAgaWYg KCFjb25maXJtZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKHggPSBjbXR4dCgiUmVzdCBvZiBj b21tYW5kIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgICAgICAgICBpZiAoKnMpIHsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJu Y2F0KGxpbmUsIiAiLExJTkJVRlNJWik7Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChs aW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcyA9 IGxpbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBzID09IGxpbmUgLSBzbyB3ZSBt dXN0IHByb3RlY3QgdGhlIGxpbmUgYnVmZmVyICovCi0gICAgICAgICAgICBzID0gYnJzdHJpcChz KTsKLSAgICAgICAgICAgIG1ha2VzdHIoJnAscyk7Ci0gICAgICAgICAgICBja3N0cm5jcHkobGlu ZSxwLExJTkJVRlNJWik7Ci0gICAgICAgICAgICBtYWtlc3RyKCZwLE5VTEwpOwotCi0gICAgICAg ICAgICB4ID0gY3hfbmV0KCBteW5ldCwgICAgICAgICAgICAgICAgICAvKiBuZXR0eXBlICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2Nv bCAobm90IHVzZWQpICovCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lLCAgICAgICAgICAg ICAgICAgICAvKiBob3N0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAvKiBwb3J0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAg ICAgICAgICAgICAgICAvKiBhbHRlcm5hdGUgdXNlcm5hbWUgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgIC8qIHBhc3N3b3JkICovCi0gICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHRvIGV4ZWN1 dGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8q IHBhcmFtMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAg ICAgLyogcGFyYW0yICovCi0gICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAg ICAgICAgICAvKiBwYXJhbTMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGN4LCAgICAgICAg ICAgICAgICAgICAgIC8qIGVudGVyIENPTk5FQ1QgbW9kZSAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgc3gsICAgICAgICAgICAgICAgICAgICAgLyogZW50ZXIgU0VSVkVSIG1vZGUgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgIHp6LCAgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGNv bm5lY3Rpb24gaWYgb3BlbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAg ICAgICAgICAgICAgLyogZ3VpICovCi0gICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICB9Ci0jZW5kaWYgLyogTkVUQ01EICovCi0KLSNpZmRlZiBOUElQRSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBOYW1lZCBwaXBlICovCi0gICAgICAgIGlmIChteW5ldCA9PSBORVRfUElQ RSkgeyAgICAgICAgLyogTmVlZHMgYmFja3NsYXNoIHR3aWRkbGluZyAqLwotICAgICAgICAgICAg aWYgKGxpbmVbMF0pIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RyY21wKGxpbmUsIioiKSkgeyAg ICAvKiBJZiByZW1vdGUsIGJlZ2luIHdpdGggKi8KLSAgICAgICAgICAgICAgICAgICAgY2hhciAq IHAgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZwLGxpbmUpOyAgICAgIAot ICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSwiXFxcXCIsTElOQlVGU0laKTsgLyog c2VydmVyIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KGxpbmUscCxMSU5C VUZTSVopOwotICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZwLE5VTEwpOyAgICAgIAotICAg ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVbMF09J1wwJzsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2tzdHJuY2F0KGxpbmUsIlxccGlw ZVxcIiwgTElOQlVGU0laKTsgLyogTWFrZSBwaXBlIG5hbWUgKi8KLSAgICAgICAgICAgICAgICBj a3N0cm5jYXQobGluZSxwaXBlbmFtZSwgTElOQlVGU0laKTsgLyogQWRkIG5hbWUgb2YgcGlwZSAq LwotCi0gICAgICAgICAgICAgICAgeCA9IGN4X25ldChteW5ldCwJLyogbmV0dHlwZSAqLwotCQkJ ICAgMCwJCS8qIHByb3RvY29sIChub3QgdXNlZCkgKi8KLQkJCSAgIGxpbmUsCS8qIGhvc3QgKi8K LQkJCSAgICIiLAkJLyogcG9ydCAqLwotCQkJICAgTlVMTCwJLyogYWx0ZXJuYXRlIHVzZXJuYW1l ICovCi0JCQkgICBOVUxMLAkvKiBwYXNzd29yZCAqLwotCQkJICAgTlVMTCwJLyogY29tbWFuZCB0 byBleGVjdXRlICovCi0JCQkgICAwLAkJLyogcGFyYW0xICovCi0JCQkgICAwLAkJLyogcGFyYW0y ICovCi0JCQkgICAwLAkJLyogcGFyYW0zICovCi0JCQkgICBjeCwJCS8qIGVudGVyIENPTk5FQ1Qg bW9kZSAqLwotCQkJICAgc3gsCQkvKiBlbnRlciBTRVJWRVIgbW9kZSAqLwotCQkJICAgenosCQkv KiBjbG9zZSBjb25uZWN0aW9uIGlmIG9wZW4gKi8KLQkJCSAgIDAJCS8qIGd1aSAqLwotCQkJICAg KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE5QSVBFICovCi0KLSNpZmRl ZiBTVVBFUkxBVAotICAgICAgICBpZiAobXluZXQgPT0gTkVUX1NMQVQpIHsgICAgICAgIC8qIE5l ZWRzIHBhc3N3b3JkLCBldGMuICovCi0gICAgICAgICAgICBzbGF0X3B3ZFswXSA9IE5VTDsgICAg ICAgICAgLyogRXJhc2UgYW55IHByZXZpb3VzIHBhc3N3b3JkICovCi0gICAgICAgICAgICBkZWJv ayA9IDA7Ci0gICAgICAgICAgICBpZiAoKmxpbmUpIHsJCS8qIElmIHRoZXkgZ2F2ZSBhIGhvc3Qg bmFtZS4uLiAqLwotICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKAotICAgICAgICAgICAg ICAgICAgICAgInBhc3N3b3JkLFxuIG9yIGNhcnJpYWdlIHJldHVybiBpZiBubyBwYXNzd29yZCBy ZXF1aXJlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eHhzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSA8IDAgJiYgeCAhPSAt MykKLSAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgICBja3N0cm5j cHkoc2xhdF9wd2QscywxOCk7IC8qIFNldCB0aGUgcGFzc3dvcmQsIGlmIGFueSAqLwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7IC8q IENvbmZpcm0gdGhlIGNvbW1hbmQgKi8KLQotICAgICAgICAgICAgeCA9IGN4X25ldChteW5ldCwJ CS8qIG5ldHR5cGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMCwJCS8qIHByb3RvY29sIChu b3QgdXNlZCkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgbGluZSwJCS8qIGhvc3QgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgIiIsCQkvKiBwb3J0ICovCi0gICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsCQkvKiBhbHRlcm5hdGUgdXNlcm5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgTlVMTCwJCS8qIHBhc3N3b3JkICovCi0gICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCQkv KiBjb21tYW5kIHRvIGV4ZWN1dGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMCwJCS8qIHBh cmFtMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAwLAkJLyogcGFyYW0yICovCi0gICAgICAg ICAgICAgICAgICAgICAgIDAsCQkvKiBwYXJhbTMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg Y3gsCQkvKiBlbnRlciBDT05ORUNUIG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgc3gs CQkvKiBlbnRlciBTRVJWRVIgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgICB6eiwJCS8q IGNsb3NlIGNvbm5lY3Rpb24gaWYgb3BlbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAwCQkv KiBndWkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfQotI2VuZGlmIC8q IFNVUEVSTEFUICovCi0KLSNpZmRlZiBERUNORVQKLSAgICAgICAgaWYgKG15bmV0ID09IE5FVF9E RUMpIHsgIAotICAgICAgICAgICAgaWYgKCFsaW5lWzBdKSB7ICAgICAgICAgICAgICAgICAgIC8q IElmIHRoZXkgZ2F2ZSBhIGhvc3QgbmFtZS4uLiAqLwotICAgICAgICAgICAgICAgIHByaW50Zigi P2hvc3RuYW1lIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTMpOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7 IC8qIENvbmZpcm0gdGhlIGNvbW1hbmQgKi8KLQotICAgICAgICAgICAgeCA9IGN4X25ldChteW5l dCwJCS8qIG5ldHR5cGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMCwJCS8qIHByb3RvY29s IChub3QgdXNlZCkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgbGluZSwJCS8qIGhvc3QgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIiIsCQkvKiBwb3J0ICovCi0gICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsCQkvKiBhbHRlcm5hdGUgdXNlcm5hbWUgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwJCS8qIHBhc3N3b3JkICovCi0gICAgICAgICAgICAgICAgICAgICAgIE5VTEws CQkvKiBjb21tYW5kIHRvIGV4ZWN1dGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMCwJCS8q IHBhcmFtMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAwLAkJLyogcGFyYW0yICovCi0gICAg ICAgICAgICAgICAgICAgICAgIDAsCQkvKiBwYXJhbTMgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgY3gsCQkvKiBlbnRlciBDT05ORUNUIG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg c3gsCQkvKiBlbnRlciBTRVJWRVIgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgICB6eiwJ CS8qIGNsb3NlIGNvbm5lY3Rpb24gaWYgb3BlbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAw CQkvKiBndWkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfQotI2VuZGlm IC8qIERFQ05FVCAqLwotCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAgICBpZiAobXluZXQgPT0g TkVUX1NTSCkgewkJLyogU1NIIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgICAgIGludCBrLCBoYXZl aG9zdCA9IDAsIHRyaXBzID0gMDsKLSAgICAgICAgICAgIGludCAgICB0bXB2ZXIgPSAtMSwgdG1w eGZ3ID0gLTEsIHRtcHNzaF9jYXM7Ci0jaWZuZGVmIFNTSFRFU1QKLSAgICAgICAgICAgIGV4dGVy biBpbnQgc2xfc3NoX3hmdywgc2xfc3NoX3hmd19zYXZlZDsKLSAgICAgICAgICAgIGV4dGVybiBp bnQgc2xfc3NoX3Zlciwgc2xfc3NoX3Zlcl9zYXZlZDsKLSNlbmRpZiAvKiBTU0hURVNUICovCi0g ICAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRhYiBzc2hvcG5zd1tdOwotICAgICAgICAgICAg ZXh0ZXJuIGludCBuc3Nob3Buc3c7Ci0gICAgICAgICAgICBleHRlcm4gY2hhciAqc3NoX3RtcGNt ZCwgKnNzaF90bXBwb3J0OwotICAgICAgICAgICAgc3RydWN0IEZEQiBzdywga3csIGZsOwotCi0g ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzZXRsaW4gU1NIIHNlcnZpY2UgMCIsc3J2YnVmLDApOwot ICAgICAgICAgICAgZGVidWcoRjExMCwic2V0bGluIFNTSCBob3N0IHMgMiIscywwKTsKLSAgICAg ICAgICAgIGlmICgqcykgeyAgICAgICAgICAgLyogSWYgdGhleSBnYXZlIGEgaG9zdCBuYW1lLi4u ICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwic2V0bGluIFNTSCBob3N0IHMgMSIscyww KTsKLSAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgICAg IG1ha2VzdHIoJnNsbXNnLCJJbmNvbWluZyBjb25uZWN0aW9ucyBub3Qgc3VwcG9ydGVkIik7Ci0g ICAgICAgICAgICAgICAgICAgIHByaW50ZigKLSAgICAgIj9Tb3JyeSwgaW5jb21pbmcgY29ubmVj dGlvbnMgbm90IHN1cHBvcnRlZCBmb3IgU1NILlxuIgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9ob3N0bmFtZSByZXF1aXJlZFxu Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0zKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg ICAgICAgLyogUGFyc2UgWyBwb3J0IF0gWyBzd2l0Y2hlcyBdICovCi0gICAgICAgICAgICBjbWZk YmkoJmt3LCAgICAgICAgICAgICAgICAgLyogU3dpdGNoZXMgKi8KLSAgICAgICAgICAgICAgICAg ICAgX0NNS0VZLAotICAgICAgICAgICAgICAgICAgICAiUG9ydCBudW1iZXIgb3Igc2VydmljZSBu YW1lLFxub3Igc3dpdGNoIiwKLSAgICAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAg ICAgICAgICIiLAotICAgICAgICAgICAgICAgICAgICBuc3Nob3Buc3csCi0gICAgICAgICAgICAg ICAgICAgIDQsCi0gICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nLAotICAgICAgICAgICAgICAg ICAgICBzc2hvcG5zdywKLSAgICAgICAgICAgICAgICAgICAgJmZsCi0gICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICBjbWZkYmkoJmZsLCAgICAgICAgICAgICAgICAgLyogUG9ydCBu dW1iZXIgb3Igc2VydmljZSBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgIF9DTUZMRCwKLSAg ICAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAgICAgICIiLAotICAgICAgICAg ICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAg ICAgMCwKLSAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAg IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgIHRyaXBzID0gMDsgICAgICAgICAgICAgICAgICAvKiBFeHBsYWluZWQgYmVs b3cgKi8KLSAgICAgICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAvKiBQYXJzZSBw b3J0IGFuZCBzd2l0Y2hlcyAqLwotICAgICAgICAgICAgICAgIHkgPSBjbWZkYigma3cpOyAgICAg ICAgIC8qIEdldCBhIGZpZWxkICovCi0gICAgICAgICAgICAgICAgaWYgKHkgPT0gLTMpICAgICAg ICAgICAgLyogVXNlciB0eXBlZCBDUiBzbyBxdWl0IGZyb20gbG9vcCAqLwotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoeSA8IDApICAgICAgICAgICAgICAv KiBPdGhlciBwYXJzZSBlcnJvciwgcGFzcyBpdCBiYWNrICovCi0gICAgICAgICAgICAgICAgICAg IHJldHVybih5KTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7IC8q IEZpZWxkIG9yIEtleXdvcmQ/ICovCi0gICAgICAgICAgICAgICAgY2FzZSBfQ01GTEQ6ICAgICAg ICAgICAgICAvKiBGaWVsZCAqLwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3J2YnVm LGNtcmVzdWx0LnNyZXN1bHQsU1JWQlVGU0laKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgY2FzZSBfQ01LRVk6ICAgICAgICAgICAgLyogS2V5d29yZCAqLwot ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsgLyogV2hpY2gg b25lPyAqLwotICAgICAgICAgICAgICAgICAgICBjYXNlIFNTSFNXX1BXRDoKLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmICghY21nYnJrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYm9rID0gMDsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgoeSA9IGNtZmxkKCJQYXNzd29yZCIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA9PSAtMykgewotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZ0bXBzdHJpbmcsIiIpOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybih5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBicnN0 cmlwKHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IChpbnQpc3RybGVu KHMpKSA+IFBXQlVGTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3Ry KCZzbG1zZywiSW50ZXJuYWwgZXJyb3IiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCI/U29ycnksIHRvbyBsb25nIC0gbWF4ID0gJWRcbiIsUFdCVUZMKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmdG1wc3Ry aW5nLHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU1NIU1dfVVNSOiAgICAgICAgICAg ICAvKiAvVVNFUjogKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY21nYnJrKCkpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJl cyBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05 KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm ICgoeSA9IGNtZmxkKCJVc2VybmFtZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcyA9 IGJyc3RyaXAocyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZ0bXB1c3JpZCxz KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj YXNlIFNTSFNXX1ZFUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJO dW1iZXIiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6IDwgMSB8fCB6ID4g MikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP091dCBvZiByYW5nZTog JWRcbiIseik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAg ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcHZlciA9IHo7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz ZSBTU0hTV19DTUQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU1NIU1dfU1VCOgotICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21mbGQoIlRleHQiLCIiLCZzLHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBtYWtlc3RyKCZzc2hfdG1wY21kLHMpOwotICAgICAgICAgICAgICAgICAgICAg ICAgdG1wc3NoX2NhcyA9IChjbXJlc3VsdC5ucmVzdWx0ID09IFNTSFNXX1NVQik7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0hTV19Y MTE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJv biIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkp OwotICAgICAgICAgICAgICAgICAgICAgICAgdG1weGZ3ID0geTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodHJpcHMrKyA9PSAwKSB7ICAgICAvKiBBZnRl ciBmaXJzdCB0aW1lIHRocm91Z2ggKi8KLSAgICAgICAgICAgICAgICAgICAgY21mZGJpKCZrdywg ICAgICAgICAvKiBvbmx5IHBhcnNlIHN3aXRjaGVzLCBub3QgcG9ydC4gKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQ01LRVksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN3 aXRjaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNzaG9wbnN3LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgeHhzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Nob3Buc3csCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh5 ID0gY21jZm0oKSkgPCAwKSAgICAgIC8qIEdldCBjb25maXJtYXRpb24gKi8KLSAgICAgICAgICAg ICAgICByZXR1cm4oeSk7Ci0KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNldGxpbiBwcmUtY3hf bmV0IGxpbmUiLGxpbmUsMCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzZXRsaW4gcHJlLWN4 X25ldCBzcnZidWYiLHNydmJ1ZiwwKTsKLSAgICAgICAgICAgIHggPSBjeF9uZXQoIG15bmV0LCAg ICAgICAgICAgICAgICAgIC8qIG5ldHR5cGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIDAs ICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sIChub3QgdXNlZCkgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgIGxpbmUsICAgICAgICAgICAgICAgICAgIC8qIGhvc3QgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgIHNydmJ1ZiwgICAgICAgICAgICAgICAgIC8qIHBvcnQgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgIHRtcHVzcmlkLCAgICAgICAgICAgICAgIC8qIGFsdGVybmF0 ZSB1c2VybmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdG1wc3RyaW5nLCAgICAgICAg ICAgICAgLyogcGFzc3dvcmQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHNzaF90bXBjbWQs ICAgICAgICAgICAgIC8qIGNvbW1hbmQgdG8gZXhlY3V0ZSAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgdG1wdmVyLCAgICAgICAgICAgICAgICAgLyogcGFyYW0xIC0gc3NoIHZlcnNpb24gKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIHRtcHNzaF9jYXMsICAgICAgICAgICAgIC8qIHBhcmFt MiAtIHNzaCBjYXMgICovCi0gICAgICAgICAgICAgICAgICAgICAgICB0bXB4ZncsICAgICAgICAg ICAgICAgICAvKiBwYXJhbTMgLSBzc2ggeDExZndkICovCi0gICAgICAgICAgICAgICAgICAgICAg ICBjeCwgICAgICAgICAgICAgICAgICAgICAvKiBlbnRlciBDT05ORUNUIG1vZGUgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgIHN4LCAgICAgICAgICAgICAgICAgICAgIC8qIGVudGVyIFNFUlZF UiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgICB6eiwgICAgICAgICAgICAgICAgICAg ICAvKiBjbG9zZSBjb25uZWN0aW9uIGlmIG9wZW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAg IDAgICAgICAgICAgICAgICAgICAgICAgIC8qIGd1aSAqLwotICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgIGlmICh0bXB1c3JpZCkKLSAgICAgICAgICAgICAgICBtYWtlc3Ry KCZ0bXB1c3JpZCxOVUxMKTsKLSAgICAgICAgICAgIGlmIChzc2hfdG1wY21kKQotICAgICAgICAg ICAgICAgIG1ha2VzdHIoJnNzaF90bXBjbWQsTlVMTCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBT U0hCVUlMVElOICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICAgICAgaWYgKG15bmV0ID09IE5F VF9UQ1BCKSB7ICAgICAgICAvKiBUQ1AvSVAgY29ubmVjdGlvbiAqLwotICAgICAgICAgICAgZGVi dWcoRjExMCwic2V0bGluIHNlcnZpY2UgMCIsc3J2YnVmLDApOwotICAgICAgICAgICAgZGVidWco RjExMCwic2V0bGluIGhvc3QgcyAyIixzLDApOwotICAgICAgICAgICAgaWYgKCpzKSB7CQkJLyog SWYgdGhleSBnYXZlIGEgaG9zdCBuYW1lLi4uICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjEx MCwic2V0bGluIGhvc3QgcyAxIixzLDApOwotI2lmZGVmIE5PTElTVEVOCi0gICAgICAgICAgICAg ICAgaWYgKCpzID09ICcqJykgewotICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzbG1zZywi SW5jb21pbmcgY29ubmVjdGlvbnMgbm90IHN1cHBvcnRlZCIpOwotICAgICAgICAgICAgICAgICAg ICBwcmludGYoCi0gICAgICI/U29ycnksIGluY29taW5nIGNvbm5lY3Rpb25zIG5vdCBzdXBwb3J0 ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIEtlcm1pdC5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAg fQotI2VuZGlmIC8qIE5PTElTVEVOICovCi0jaWZkZWYgUkxPR0NPREUKLSAgICAgICAgICAgICAg ICAvKiBBbGxvdyBhIHVzZXJuYW1lIGlmIHJsb2dpbiBpcyByZXF1ZXN0ZWQgKi8KLSAgICAgICAg ICAgICAgICBpZiAobXluZXQgPT0gTkVUX1RDUEIgJiYKLSAgICAgICAgICAgICAgICAgICAgKHR0 bnByb3RvID09IE5QX1JMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9LNUxPR0lOIHx8Ci0gICAgICAg ICAgICAgICAgICAgICB0dG5wcm90byA9PSBOUF9FSzVMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9L NExPR0lOIHx8Ci0gICAgICAgICAgICAgICAgICAgICB0dG5wcm90byA9PSBOUF9FSzRMT0dJTgot ICAgICAgICAgICAgICAgICAgICApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCB5OwotICAg ICAgICAgICAgICAgICAgICB1aWRmbGFnID0gMDsKLSAgICAgICAgICAgICAgICAgICAgLyogQ2hl Y2sgZm9yICJob3N0OnNlcnZpY2UiICovCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIDsgKCpz ICE9ICdcMCcpICYmICgqcyAhPSAnOicpOyBzKyspIDsKLSAgICAgICAgICAgICAgICAgICAgaWYg KCpzKSB7ICAgLyogU2VydmljZSwgc2F2ZSBpdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAg KnMgPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3J2YnVmLCsrcyxT UlZCVUZTSVopOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgIC8qIE5v IDpzZXJ2aWNlLCB0aGVuIHVzZSBkZWZhdWx0LiAqLwotI2lmZGVmIFZNUwotICAgICAgICAgICAg ICAgICAgICAgICAgc3dpdGNoICh0dG5wcm90bykgewotICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIE5QX1JMT0dJTjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHko c3J2YnVmLCI1MTMiLFNSVkJVRlNJWik7IC8qICJsb2dpbiIgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBOUF9LNExP R0lOOgotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE5QX0s1TE9HSU46Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHNydmJ1ZiwiNTQzIixTUlZCVUZTSVopOyAv KiAia2xvZ2luIiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIE5QX0VLNExPR0lOOgotICAgICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIE5QX0VLNUxPR0lOOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNr c3RybmNweShzcnZidWYsIjIxMDUiLFNSVkJVRlNJWik7IC8qICJla2xvZ2luIiAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot I2Vsc2UgLyogVk1TICovCi0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR0bnByb3Rv KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTlBfUkxPR0lOOgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzcnZidWYsImxvZ2luIixTUlZCVUZTSVopOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIE5QX0s0TE9HSU46Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTlBf SzVMT0dJTjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3J2YnVmLCJr bG9naW4iLFNSVkJVRlNJWik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTlBfRUs0TE9HSU46Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgTlBfRUs1TE9HSU46Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KHNydmJ1ZiwiZWtsb2dpbiIsU1JWQlVGU0laKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAv KiBWTVMgKi8KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAo IWNvbmZpcm1lZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGNtZmxkKCJVc2VyaWQg b24gcmVtb3RlIHN5c3RlbSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlk YnVmLCZzLHh4c3RyaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5IDwgMCAmJiB5 ICE9IC0zKQotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBpZiAoKGludClzdHJsZW4ocykgPiA2MykgewotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1ha2VzdHIoJnNsbXNnLCJJbnRlcm5hbCBlcnJvciIpOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiU29ycnksIHRvbyBsb25nXG4iKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmdG1wdXNyaWQscyk7Ci0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgLyogVEVMTkVU IG9yIFNFVCBIT1NUICovCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSAgICAgICAgICAgICAgICAg ICAgLyogQ2hlY2sgZm9yICJob3N0OnNlcnZpY2UiICovCi0gICAgICAgICAgICAgICAgICAgIGZv ciAoIDsgKCpzICE9ICdcMCcpICYmICgqcyAhPSAnOicpOyBzKyspIDsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKCpzKSB7ICAgLyogU2VydmljZSwgc2F2ZSBpdCAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgKnMgPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3J2 YnVmLCsrcyxTUlZCVUZTSVopOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFjb25m aXJtZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIDpzZXJ2aWNlLCBsZXQgdGhl bSB0eXBlIG9uZS4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqbGluZSAhPSAnKicp IHsgLyogTm90IGluY29taW5nICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG15 bmV0ID09IE5FVF9UQ1BCICYmIHR0bnByb3RvID09IE5QX0tFUk1JVCkgewotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRDUCBzZXJ2aWNlIG5hbWUgb3IgbnVtYmVyIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtlcm1pdCIs JnMseHhzdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA8IDAg JiYgeCAhPSAtMykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0jaWZkZWYgUkxPR0NPREUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KG15bmV0ID09IE5FVF9UQ1BCICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0dG5wcm90byA9PSBOUF9STE9HSU4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCh4ID0gY21mbGQoCi0gICJUQ1Agc2VydmljZSBuYW1lIG9yIG51bWJlcixcbiBv ciBjYXJyaWFnZSByZXR1cm4gZm9yIHJsb2dpbiAoNTEzKSIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2dpbiIsJnMseHhzdHJpbmcpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA8IDAgJiYgeCAhPSAtMykKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0jaWZkZWYgQ0tfQVVUSEVOVElD QVRJT04KLSNpZmRlZiBDS19LRVJCRVJPUwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAobXluZXQgPT0gTkVUX1RDUEIgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh0dG5wcm90byA9PSBOUF9LNExPR0lOIHx8Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0dG5wcm90byA9PSBOUF9LNUxPR0lOKSkgewotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgKLSAgIlRDUCBzZXJ2aWNl IG5hbWUgb3IgbnVtYmVyLFxuIG9yIGNhcnJpYWdlIHJldHVybiBmb3Iga2xvZ2luICg1NDMpIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtsb2dpbiIs JnMseHhzdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA8IDAg JiYgeCAhPSAtMykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChteW5ldCA9PSBORVRfVENQ QiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR0bnByb3RvID09 IE5QX0VLNExPR0lOIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICgoeCA9IGNtZmxkKAotICAiVENQIHNlcnZpY2UgbmFtZSBvciBudW1iZXIsXG4gb3Ig Y2FycmlhZ2UgcmV0dXJuIGZvciBla2xvZ2luICgyMTA1KSIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJla2xvZ2luIiwmcyx4eHN0cmluZykKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDwgMCAmJiB4ICE9IC0zKQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSNlbmRpZiAvKiBDS19LRVJC RVJPUyAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0jZW5kaWYgLyogUkxPR0NP REUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3Qgc2V0IGEgZGVmYXVsdCB2YWx1ZSBpbiB0aGlz IGNhbGwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgeW91IGRvIHRo ZW4gaXQgd2lsbCBwcmV2ZW50IGVudHJpZXMgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGluIHRoZSBuZXR3b3JrIGRpcmVjdG9yeSBmcm9tIGFjY2Vzc2luZyAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbHRlcm5hdGUgcG9ydHMuICAgICAgICAg ICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo KHggPSBjbWZsZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlRDUCBzZXJ2aWNlIG5hbWUgb3IgbnVtYmVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIiIsJnMseHhzdHJpbmcpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKSA8IDAgJiYgeCAhPSAtMykKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLyogSW5jb21pbmcgY29ubmVjdGlv biAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJUQ1Agc2Vy dmljZSBuYW1lIG9yIG51bWJlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIiIsJnMseHhzdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApIDwgMCAmJiB4ICE9IC0zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCpzKSAgICAgICAgIC8qIElmIHRoZXkgZ2F2ZSBhIHNlcnZpY2UsICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIGNrc3RybmNweShzcnZidWYscyxTUlZCVUZTSVopOyAvKiBjb3B5IGl0 ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzZXRsaW4gc2VydmljZSAw LjUiLHNydmJ1ZiwwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIFJMT0dDT0RFCi0g ICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0gICAgICAgICAgICAgICAg aWYgKCFjb25maXJtZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciAqIGRlZnByb3RvOwot ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR0bnByb3RvKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgY2FzZSBOUF9STE9HSU46Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZwcm90byA9 ICIvcmxvZ2luIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgTlBfSzRMT0dJTjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZnBy b3RvID0gIi9rNGxvZ2luIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgTlBfSzVMT0dJTjoKLSAgICAgICAgICAgICAgICAgICAgICAg IGRlZnByb3RvID0gIi9rNWxvZ2luIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTlBfRUs0TE9HSU46Ci0gICAgICAgICAgICAgICAg ICAgICAgICBkZWZwcm90byA9ICIvZWs0bG9naW4iOwotICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBOUF9FSzVMT0dJTjoKLSAgICAgICAg ICAgICAgICAgICAgICAgIGRlZnByb3RvID0gIi9lazVsb2dpbiI7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIE5QX0tFUk1JVDoKLSAg ICAgICAgICAgICAgICAgICAgICBjYXNlIE5QX1RFTE5FVDoKLSAgICAgICAgICAgICAgICAgICAg ICAgIGRlZnByb3RvID0gIi90ZWxuZXQiOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAg IGRlZnByb3RvID0gIi9kZWZhdWx0IjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0Y3ByYXd0YWIsbnRjcHJhdywiU3dpdGNoIixkZWZw cm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDAp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ICE9IC0zKQotICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwot ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmF3 ZmxnID0geDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVidWco RjExMCwic2V0bGluIHByZS1jeF9uZXQgbGluZSIsbGluZSwwKTsKLSAgICAgICAgICAgIGRlYnVn KEYxMTAsInNldGxpbiBwcmUtY3hfbmV0IHNydmJ1ZiIsc3J2YnVmLDApOwotICAgICAgICAgICAg eCA9IGN4X25ldCggbXluZXQsICAgICAgICAgICAgICAgICAgLyogbmV0dHlwZSAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgcmF3ZmxnICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8s Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lLCAgICAgICAgICAgICAgICAgICAvKiBob3N0 ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBzcnZidWYsICAgICAgICAgICAgICAgICAvKiBw b3J0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICB0bXB1c3JpZCwgICAgICAgICAgICAgICAv KiBhbHRlcm5hdGUgdXNlcm5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcHN0cmlu ZywgICAgICAgICAgICAgIC8qIHBhc3N3b3JkICovCi0gICAgICAgICAgICAgICAgICAgICAgICBO VUxMLCAgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHRvIGV4ZWN1dGUgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgIGFfdHlwZSwgICAgICAgICAgICAgICAgIC8qIHBhcmFtMSAtIHRlbG5l dCBhdXRodHlwZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZV90eXBlLCAgICAgICAgICAg ICAgICAgLyogcGFyYW0yIC0gdGVsbmV0IGVuY3R5cGUgICovCi0gICAgICAgICAgICAgICAgICAg ICAgICB3YWl0LCAgICAgICAgICAgICAgICAgICAvKiBwYXJhbTMgLSB0ZWxuZXQgd2FpdCAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgY3gsICAgICAgICAgICAgICAgICAgICAgLyogZW50ZXIg Q09OTkVDVCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBzeCwgICAgICAgICAgICAg ICAgICAgICAvKiBlbnRlciBTRVJWRVIgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAg enosICAgICAgICAgICAgICAgICAgICAgLyogY2xvc2UgY29ubmVjdGlvbiBpZiBvcGVuICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAvKiBndWkgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KLQotI2lmZGVmIENLX1NFQ1VSSVRZCi0gICAgICAgIGlmICh0bXBzdHJpbmcpCi0gICAg ICAgICAgICBtYWtlc3RyKCZ0bXBzdHJpbmcsTlVMTCk7Ci0jZW5kaWYgLyogQ0tfU0VDVVJJVFkg Ki8KLSAgICAgICAgaWYgKHRtcHVzcmlkKQotICAgICAgICAgICAgbWFrZXN0cigmdG1wdXNyaWQs TlVMTCk7Ci0JZGVidWcoRjExMSwic2V0bGluIGN4X25ldCIsbGluZSx4KTsKLQlyZXR1cm4oeCk7 Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotICAgIH0KLQotLyogU2VyaWFsIHR0eSBkZXZpY2UsIHBv c3NpYmx5IG1vZGVtLCBjb25uZWN0aW9uLi4uICovCi0KLSNpZmRlZiBPUzIKLS8qCi0gIFVzZXIg Y2FuIHR5cGU6Ci0gICAgQ09NMS4uQ09NOCA9IFJlZ3VsYXIgQ09NIHBvcnQKLSAgICAxLi44ICAg ICAgID0gU3lub255bSBmb3IgQ09NMS4uQ09NOCwgaXMgdHJhbnNsYXRlZCB0byBDT00xLi5DT004 Ci0gICAgX24gICAgICAgICA9IChuIGlzIGEgbnVtYmVyKSA9IG9wZW4gZmlsZSBoYW5kbGUKLSAg ICBzdHJpbmcgICAgID0gYW55IHRleHQgc3RyaW5nID0gbmFtZSBvZiBzb21lIG90aGVyIGtpbmQg b2YgZGV2aWNlLAotICAgICAgICAgICAgICAgICB0YWtlbiBsaXRlcmFsbHksIGFzIGdpdmVuLgot Ki8KLSAgICBzID0gIkNvbW11bmljYXRpb24gZGV2aWNlIG5hbWUiOwotCi0jaWZkZWYgQ0tfVEFQ SQotICAgIGlmIChUQVBJQXZhaWwpCi0gICAgICBja3RhcGlCdWlsZExpbmVUYWJsZSgmdGFwaWxp bmV0YWIsICZfdGFwaWxpbmV0YWIsICZudGFwaWxpbmUpOwotICAgIGlmICghKHRhcGlsaW5ldGFi ICYmIF90YXBpbGluZXRhYiAmJiBudGFwaWxpbmUgPiAwKSAmJgotCXh4ID09IFhZVEFQSV9MSU4g KSB7Ci0JbWFrZXN0cigmc2xtc2csIlRBUEkgZGV2aWNlIG5vdCBjb25maWd1cmVkIik7Ci0JcHJp bnRmKCJcbk5vIFRBUEkgTGluZSBEZXZpY2VzIGFyZSBjb25maWd1cmVkIGZvciB0aGlzIHN5c3Rl bVxuIik7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKHh4ID09IFhZVEFQSV9MSU4pIHsJ CS8qIERlZmF1bHQgKGZpcnN0KSBUQVBJIGxpbmUgKi8KLQlzID0gInRhcGkiOwkJCS8qICh3aGF0 ZXZlciBpdCBpcykgKi8KLSAgICB9IGVsc2UgewkJCQkvKiBRdWVyeSB0aGUgdXNlciAqLwotI2Vu ZGlmIC8qIENLX1RBUEkgKi8KLQotLyogTm93IHBhcnNlIG9wdGlvbmFsIHN3aXRjaGVzIGFuZCB0 aGVuIGRldmljZSBuYW1lICovCi0KLQljb25maXJtZWQgPSAwOwotCWNtZmRiaSgmc3csX0NNS0VZ LCJEZXZpY2UgbmFtZSwgb3Igc3dpdGNoIiwKLQkgICAgICAgIiIsIiIsbnBzbHRhYiw0LHh4c3Ry aW5nLHBzbHRhYiwmZmwpOwotCWNtZmRiaSgmZmwsX0NNRkxELCIiLGRmdHR5LCIiLDAsMCx4eHN0 cmluZyxOVUxMLE5VTEwpOwotCXdoaWxlICgxKSB7Ci0JICAgIHggPSBjbWZkYigmc3cpOwotCSAg ICBkZWJ1ZyhGMTAxLCJzZXRsaW4gY21mZGIiLCIiLHgpOwotCSAgICBpZiAoeCA8IDApCi0JICAg ICAgaWYgKHggIT0gLTMpCi0JCXJldHVybih4KTsKLQkgICAgaWYgKHggPT0gLTMpIHsKLQkJaWYg KCh4ID0gY21jZm0oKSkgPCAwKSB7Ci0JCSAgICByZXR1cm4oeCk7Ci0JCX0gZWxzZSB7Ci0JCSAg ICBjb25maXJtZWQgPSAxOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkgICAgfQotCSAgICBpZiAoY21y ZXN1bHQuZmNvZGUgPT0gX0NNRkxEKSB7Ci0JCXMgPSBjbXJlc3VsdC5zcmVzdWx0OwotCQlicmVh azsKLQkgICAgfSBlbHNlIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01LRVkpIHsKLQkJc3dpdGNo IChjbXJlc3VsdC5ucmVzdWx0KSB7Ci0JCSAgY2FzZSBTTF9DTlg6CQkvKiAvQ09OTkVDVCAqLwot CQkgICAgY3ggPSAxOwotCQkgICAgc3ggPSAwOwotCQkgICAgYnJlYWs7Ci0JCSAgY2FzZSBTTF9T UlY6CQkvKiAvU0VSVkVSICovCi0JCSAgICBjeCA9IDA7Ci0JCSAgICBzeCA9IDE7Ci0JCSAgICBi cmVhazsKLQkJICBjYXNlIFNMX1NIUjoJCS8qIC9TSEFSRSAqLwotCQkgICAgc2hyID0gMTsKLQkJ ICAgIGJyZWFrOwotCQkgIGNhc2UgU0xfTlNIOgkJLyogL05PU0hBUkUgKi8KLQkJICAgIHNociA9 IDA7Ci0JCSAgICBicmVhazsKLQkJfQotCSAgICB9Ci0JfQotI2lmZGVmIENLX1RBUEkKLSAgICB9 Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotCi0gICAgZGVidWcoRjExMCwiT1MyIFNFVCBQT1JUIHMi LHMsMCk7Ci0gICAgeSA9IGxvb2t1cChvczJkZXZ0YWIscyxub3MyZGV2LCZ4KTsgLyogTG9vayB1 cCBpbiBrZXl3b3JkIHRhYmxlICovCi0gICAgZGVidWcoRjEwMSwiT1MyIFNFVCBQT1JUIHgiLCIi LHgpOwotICAgIGRlYnVnKEYxMDEsIk9TMiBTRVQgUE9SVCB5IiwiIix5KTsKLSAgICBpZiAoKHkg PiAtMSkgJiYgKHggPj0gMCAmJiB4IDwgOCkpIHsgLyogVXNlciB0eXBlZCBhIGRpZ2l0IDEuLjgg Ki8KLQlzID0gb3MyZGV2dGFiW3grOF0ua3dkOwkJLyogU3Vic3RpdGl0ZSBpdHMgcmVhbCBuYW1l ICovCi0jaWZkZWYgTlQKLQl4eHRhcGkgPSAwOwotI2Vsc2UgLyogTlQgKi8KLQl4eHNsaXAgPSB4 eHBwcCA9IDA7Ci0jZW5kaWYgLyogTlQgKi8KLQlkZWJ1ZyhGMTEwLCJPUzIgU0VUIFBPUlQgc3Vi c3QgcyIscywiIik7Ci0jaWZuZGVmIE5UCi0gICAgfSBlbHNlIGlmICgoeSA+LTEpICYmICh4ID49 IDE2ICYmIHggPCAyNCkpIHsgLyogU0xJUCBhY2Nlc3MgKi8KLQlzID0gb3MyZGV2dGFiW3gtOF0u a3dkOwkJLyogU3Vic3RpdGl0ZSBpdHMgcmVhbCBuYW1lICovCi0JZGVidWcoRjExMCwiT1MyIFNF VCBQT1JUIFNMSVAgc3Vic3QgcyIscywiIik7Ci0JeHhzbGlwID0gMTsKLQl4eHBwcCAgPSAwOwot ICAgIH0gZWxzZSBpZiAoKHkgPi0xKSAmJiAoeCA+PSAyNCAmJiB4IDwgMzIpKSB7IC8qIFBQUCBh Y2Nlc3MgKi8KLQlzID0gb3MyZGV2dGFiW3gtMTZdLmt3ZDsJLyogU3Vic3RpdGl0ZSBpdHMgcmVh bCBuYW1lICovCi0JZGVidWcoRjExMCwiT1MyIFNFVCBQT1JUIFBQUCBzdWJzdCBzIixzLCIiKTsK LQl4eHBwcCA9IDE7Ci0JeHhzbGlwID0gMDsKLQlpZiAoKHkgPSBjbWtleShvczJwcHB0YWIsCi0J CSAgICAgICBub3MycHBwLAotCQkgICAgICAgIlBQUCBkcml2ZXIgaW50ZXJmYWNlIiwKLQkJICAg ICAgICJwcHAwIiwKLQkJICAgICAgIHh4c3RyaW5nKQotCSAgICAgKSA8IDApCi0JICByZXR1cm4o eSk7Ci0JZGVidWcoRjEwMSwiT1MyIFNFVCBQT1JUIFBQUCBJTlRFUkZBQ0UgeSIsIiIseSk7Ci0J eHhwcHAgPSAoeSAlIDEwKSArIDE7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICB9IGVsc2UgaWYgKCpz ID09ICdfJykgewkJLyogVXNlciB1c2VkICJfIiBwcmVmaXggKi8KLQlzKys7CQkJCS8qIFJlbW92 ZSBpdCAqLwotCS8qIFJlc3QgbXVzdCBiZSBudW1lcmljICovCi0JZGVidWcoRjExMCwiT1MyIFNF VCBQT1JUIEhBTkRMRSBfc3Vic3QgcyIscywwKTsKLQlpZiAoIXJkaWdpdHMocykpIHsKLQkgICAg bWFrZXN0cigmc2xtc2csIkludmFsaWQgZmlsZSBoYW5kbGUiKTsKLQkgICAgcHJpbnRmKCI/SW52 YWxpZCBmb3JtYXQgZm9yIGZpbGUgaGFuZGxlXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0j aWZkZWYgTlQKLQl4eHRhcGkgPSAwOwotI2Vsc2UgLyogTlQgKi8KLQl4eHNsaXAgPSB4eHBwcCA9 IDA7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICB9IGVsc2UgewkJCQkvKiBBIG5vcm1hbCBDT014IHBv cnQgb3IgYSBzdHJpbmcgKi8KLQlzID0gYnJzdHJpcChzKTsJCQkvKiBTdHJpcCBicmFjZXMgaWYg YW55ICovCi0jaWZkZWYgTlQKLSNpZmRlZiBDS19UQVBJCi0JLyogV2luZG93cyBUQVBJIHN1cHBv cnQgLSBMb29rIHVwIGluIGtleXdvcmQgdGFibGUgKi8KLQlpZiAodGFwaWxpbmV0YWIgJiYgX3Rh cGlsaW5ldGFiICYmIG50YXBpbGluZSA+IDApIHsKLQkgICAgaWYgKCFja3N0cmNtcChzLCJ0YXBp Iiw0LDApKSB7Ci0KLQkJLyogRmluZCBvdXQgd2hhdCB0aGUgbG93ZXN0IG51bWJlcmVkIFRBUEkg ZGV2aWNlIGlzICovCi0JCS8qIGFuZCB1c2UgaXQgYXMgdGhlIGRlZmF1bHQuICAgICAgICAgICAg ICAgICAgICAgICAqLwotCQlpbnQgaiA9IDk5OTksIGsgPSAtMTsKLQkJZm9yIChpID0gMDsgaSA8 IG50YXBpbGluZTsgaSsrKSB7Ci0JCSAgICBpZiAodGFwaWxpbmV0YWJbaV0ua3d2YWwgPCBqKSB7 Ci0JCQlqID0gdGFwaWxpbmV0YWJbaV0ua3d2YWw7Ci0JCQlrID0gaTsKLQkJICAgIH0KLQkJfQot CQlpZiAoayA+PSAwKQotCQkgIHMgPSBfdGFwaWxpbmV0YWJba10ua3dkOwotCQllbHNlCi0JCSAg cyA9ICIiOwotCi0JCWlmICgoeSA9IGNta2V5KF90YXBpbGluZXRhYixudGFwaWxpbmUsCi0JCQkg ICAgICAgIlRBUEkgZGV2aWNlIG5hbWUiLHMseHhzdHJpbmcpKSA8IDApCi0JCSAgcmV0dXJuKHkp OwotCi0JCXh4dGFwaSA9IDE7Ci0KLQkJLyogR2V0IHRoZSBub24gVW5kZXJzY29yZWQgc3RyaW5n ICovCi0JCWZvciAoaSA9IDA7IGkgPCBudGFwaWxpbmU7IGkrKyApIHsKLQkJICAgIGlmICh0YXBp bGluZXRhYltpXS5rd3ZhbCA9PSB5KSB7Ci0JCQlzID0gdGFwaWxpbmV0YWJbaV0ua3dkOwotCQkJ YnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfSBlbHNlCi0JICAgICAgeHh0YXBpID0gMDsKLQl9 Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotI2Vsc2UgLyogTlQgKi8KLQkvKiBub3QgT1MvMiBTTElQ IG9yIFBQUCAqLwotCXh4c2xpcCA9IHh4cHBwID0gMDsKLSNlbmRpZiAvKiBOVCAqLwotICAgIH0K LSAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsJLyogQ29weSB0byBhIHNhZmUgcGxh Y2UgKi8KLSAgICBzID0gdG1wYnVmOwotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAg IHJldHVybih4KTsKLQotI2Vsc2UgLyogIU9TMiAqLwotCi0gICAgY21mZGJpKCZzdyxfQ01LRVks IkRldmljZSBuYW1lLCBvciBzd2l0Y2giLAotCSAgICIiLCIiLG5wc2x0YWIsNCx4eHN0cmluZyxw c2x0YWIsJnR4KTsKLSAgICBjbWZkYmkoJnR4LF9DTVRYVCwiIixkZnR0eSwiIiwwLDAseHhzdHJp bmcsTlVMTCxOVUxMKTsKLSAgICB3aGlsZSAoIWNvbmZpcm1lZCkgewotCXggPSBjbWZkYigmc3cp OwotCWRlYnVnKEYxMDEsInNldGxpbiBjbWZkYiIsIiIseCk7Ci0JaWYgKHggPCAwKQotCSAgaWYg KHggIT0gLTMpCi0JICAgIHJldHVybih4KTsKLQlpZiAoeCA9PSAtMykgewotCSAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApIHsKLQkJcmV0dXJuKHgpOwotCSAgICB9IGVsc2UgewotCQljb25maXJt ZWQgPSAxOwotCQlicmVhazsKLQkgICAgfQotCX0KLQlzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7 Ci0JICBjYXNlIF9DTVRYVDoKLQkgICAgY2tzdHJuY3B5KHRtcGJ1ZixjbXJlc3VsdC5zcmVzdWx0 LFRNUEJVRlNJWik7Ci0JICAgIHMgPSB0bXBidWY7Ci0JICAgIGRlYnVnKEYxMTAsInNldGxpbiBD TVRYVCIsdG1wYnVmLDApOwotCSAgICBjb25maXJtZWQgPSAxOwotCSAgICBicmVhazsKLQkgIGNh c2UgX0NNS0VZOgkJCS8qIFN3aXRjaCAqLwotCSAgICBkZWJ1ZyhGMTAxLCJzZXRsaW4gQ01LRVki LHRtcGJ1ZixjbXJlc3VsdC5ucmVzdWx0KTsKLQkgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0 KSB7Ci0JICAgICAgY2FzZSBTTF9DTlg6CQkvKiAvQ09OTkVDVCAqLwotCQljeCA9IDE7Ci0JCXN4 ID0gMDsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSBTTF9TUlY6CQkvKiAvU0VSVkVSICovCi0JCWN4 ID0gMDsKLQkJc3ggPSAxOwotCQlicmVhazsKLSNpZmRlZiBWTVMKLQkgICAgICBjYXNlIFNMX1NI UjoJCS8qIC9TSEFSRSAqLwotCQlzaHIgPSAxOwotCQlicmVhazsKLQkgICAgICBjYXNlIFNMX05T SDoJCS8qIC9OT1NIQVJFICovCi0JCXNociA9IDA7Ci0JCWJyZWFrOwotI2VuZGlmIC8qIFZNUyAq LwotCSAgICB9Ci0JICAgIGNvbnRpbnVlOwotCSAgZGVmYXVsdDoKLQkgICAgZGVidWcoRjEwMSwi c2V0bGluIGJhZCBjbWZkYiByZXN1bHQiLCIiLGNtcmVzdWx0LmZjb2RlKTsKLQkgICAgbWFrZXN0 cigmc2xtc2csIkludGVybmFsIGVycm9yIik7Ci0JICAgIHByaW50ZigiP0ludGVybmFsIHBhcnNp bmcgZXJyb3JcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogT1My ICovCi0gICAgaWYgKCFjb25maXJtZWQpCi0gICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0J cmV0dXJuKHgpOwotCi0gICAgZGVidWcoRjExMCwic2V0bGluIHByZS1jeF9zZXJpYWwgcyIscyww KTsKLSAgICBkZWJ1ZyhGMTEwLCJzZXRsaW4gcHJlLWN4X3NlcmlhbCBsaW5lIixsaW5lLDApOwot ICAgIHggPSBjeF9zZXJpYWwocyxjeCxzeCxzaHIsenosMCwKLSNpZmRlZiBPUzIKLSNpZmRlZiBO VAotICAgICAgICAgICAgICAgICAgICh4eHRhcGkgPyBDWF9UQVBJIDogMCkKLSNlbHNlCi0gICAg ICAgICAgICAgICAgICAgKHh4c2xpcCA/IENYX1NMSVAgOiAwKSB8ICh4eHBwcCA/IENYX1BQUCA6 IDApCi0jZW5kaWYgLyogTlQgKi8KLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAg IDAKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICApOwotICAgIGRlYnVnKEYx MTEsInNldGxpbiBjeF9zZXJpYWwiLGxpbmUseCk7Ci0gICAgcmV0dXJuKHgpOwotfQotI2VuZGlm IC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIENLQ0hBTk5FTElPCi0vKgotICBDLUxpYnJhcnkgYmFz ZWQgZmlsZS1pL28gcGFja2FnZSBmb3Igc2NyaXB0cy4gIFRoaXMgc2hvdWxkIGJlIHBvcnRhYmxl IHRvCi0gIGFsbCBDLUtlcm1pdCB2ZXJzaW9ucyBzaW5jZSBpdCB1c2VzIHRoZSBzYW1lIEFQSXMg d2UgaGF2ZSBhbHdheXMgdXNlZCBmb3IKLSAgcHJvY2Vzc2luZyBjb21tYW5kIGZpbGVzLiAgVGhl IGVudGlyZSBjaGFubmVsIGkvbyBwYWNrYWdlIGlzIGNvbnRhaW5lZAotICBoZXJlaW4sIGFwYXJ0 IGZyb20gc29tZSBrZXl3b3JkIHRhYmxlIGVudHJpZXMgaW4gdGhlIG1haW4ga2V5d29yZCB0YWJs ZQotICBhbmQgdGhlIGhlbHAgdGV4dCBpbiB0aGUgSEVMUCBjb21tYW5kIG1vZHVsZS4KLQotICBP biBwbGF0Zm9ybXMgbGlrZSBWTVMgYW5kIFZPUywgdGhpcyBwYWNrYWdlIGhhbmRsZXMgb25seSBV TklYLXN0eWxlCi0gIHN0cmVhbSBmaWxlcy4gIElmIGRlc2lyZWQsIGl0IGNhbiBiZSByZXBsYWNl ZCBmb3IgdGhvc2UgcGxhdGZvcm1zIGJ5Ci0gIDwjPmlmZGVmJ2luZyBvdXQgdGhpcyBjb2RlIGFu ZCBhZGRpbmcgdGhlIGVxdWl2YWxlbnQgcmVwbGFjZW1lbnQgcm91dGluZXMKLSAgdG8gdGhlIGNr P2Zpby5jIG1vZHVsZSwgZS5nLiBmb3IgUk1TLWJhc2VkIGZpbGUgaS9vIGluIGNrdmZpby5jLgot Ki8KLSNpZm5kZWYgTk9TVEFUCi0jaWZkZWYgVk1TCi0vKiAyMDEwLTAzLTA5IFNNUy4gIFZBWCBD IG5lZWRzIGhlbHAgdG8gZmluZCAic3lzIi4gIEl0J3MgZWFzaWVyIG5vdCB0byB0cnkuICovCi0j aW5jbHVkZSA8c3RhdC5oPgotI2Vsc2UgLyogZGVmIFZNUyAqLwotI2luY2x1ZGUgPHN5cy9zdGF0 Lmg+Ci0jZW5kaWYgLyogZGVmIFZNUyBbZWxzZV0gKi8KLSNlbmRpZiAvKiBOT1NUQVQgKi8KLQot I2lmZGVmIE5MQ0hBUgotc3RhdGljIGludCB6X2x0ID0gMTsgICAgICAgICAgICAgICAgICAgIC8q IExlbmd0aCBvZiBsaW5lIHRlcm1pbmF0b3IgKi8KLSNlbHNlCi1zdGF0aWMgaW50IHpfbHQgPSAy OwotI2VuZGlmIC8qIE5MQ0hBUiAqLwotCi1zdHJ1Y3QgY2t6X2ZpbGUgeyAgICAgICAgICAgICAg ICAgICAgICAgLyogQy1LZXJtaXQgZmlsZSBzdHJ1Y3QgKi8KLSAgICBGSUxFICogel9mcDsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBJbmNsdWRlcyB0aGUgQy1MaWIgZmlsZSBzdHJ1Y3QgKi8K LSAgICB1bnNpZ25lZCBpbnQgel9mbGFnczsgICAgICAgICAgICAgICAvKiBQbHVzIEMtS2VybWl0 IG1vZGUgZmxhZ3MsICovCi0gICAgQ0tfT0ZGX1Qgel9ubGluZTsJCQkvKiBjdXJyZW50IGxpbmUg bnVtYmVyIGlmIGtub3duLCAqLwotICAgIGNoYXIgel9uYW1lW0NLTUFYUEFUSCsyXTsgICAgICAg ICAgIC8qIGFuZCB0aGUgZmlsZSdzIG5hbWUuICovCi19Owotc3RhdGljIHN0cnVjdCBja3pfZmls ZSAqKiB6X2ZpbGUgPSBOVUxMOyAvKiBBcnJheSBvZiBDLUtlcm1pdCBmaWxlIHN0cnVjdHMgKi8K LXN0YXRpYyBpbnQgel9pbml0ZWQgPSAwOyAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBhcnJh eSBpbml0aWFsaXplZCAqLwotaW50IHpfbWF4Y2hhbiA9IFpfTUFYQ0hBTjsgICAgICAgICAgICAg IC8qIE1heCBudW1iZXIgb2YgQy1LZXJtaXQgY2hhbm5lbHMgKi8KLWludCB6X29wZW5tYXggPSBD S01BWE9QRU47ICAgICAgICAgICAgICAvKiBNYXggbnVtYmVyIG9mIG9wZW4gZmlsZXMgb3ZlcmFs bCAqLwotaW50IHpfbm9wZW4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhvdyBtYW55 IGNoYW5uZWxzIHByZXNlbnRseSBvcGVuICovCi1pbnQgel9lcnJvciA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogTW9zdCByZWNlbnQgZXJyb3IgKi8KLWludCB6X2ZpbGNvdW50ID0gLTE7 ICAgICAgICAgICAgICAgICAgICAvKiBNb3N0IHJlY2VudCBGSUxFIENPVU5UIHJlc3VsdCAqLwot Ci0jZGVmaW5lIFJEX0xJTkUgMCAgICAgICAgICAgICAgICAgICAgICAgLyogRklMRSBSRUFEIG9w dGlvbnMgKi8KLSNkZWZpbmUgUkRfQ0hBUiAxCi0jZGVmaW5lIFJEX1NJWkUgMgotI2RlZmluZSBS RF9UUklNIDgJCQkvKiBMaWtlIFNub2JvbCAmVFJJTSA9IDEgKi8KLSNkZWZpbmUgUkRfVU5UQSA5 CQkJLyogVW50YWJpZnkgKi8KLQotI2RlZmluZSBXUl9MSU5FIFJEX0xJTkUgICAgICAgICAgICAg ICAgIC8qIEZJTEUgV1JJVEUgb3B0aW9ucyAqLwotI2RlZmluZSBXUl9DSEFSIFJEX0NIQVIKLSNk ZWZpbmUgV1JfU0laRSBSRF9TSVpFCi0jZGVmaW5lIFdSX1NUUkkgMwotI2RlZmluZSBXUl9MUEFE IDQKLSNkZWZpbmUgV1JfUlBBRCA1Ci0KLSNpZmRlZiBVTklYCi1leHRlcm4gaW50IGNrbWF4Zmls ZXM7ICAgICAgICAgICAgICAgICAgLyogRmlsbGVkIGluIGJ5IHN5c2luaXQoKS4gKi8KLSNlbmRp ZiAvKiBVTklYICovCi0KLS8qIFNlZSBja2NrZXIuaCBmb3IgZXJyb3IgbnVtYmVycyAqLwotLyog U2VlIGNrY2RlYi5oIGZvciBaX01BWENIQU4gYW5kIENLTUFYT1BFTiBkZWZpbml0aW9ucyAqLwot LyogTk9URTogRm9yIFZNUyB3ZSBtaWdodCBiZSBhYmxlIHRvIGZpbGwgaW4gY2ttYXhmaWxlcyAq LwotLyogZnJvbSBGSUxMTSBhbmQgQ0hBTk5FTENOVCAtLSBmaW5kIG91dCBhYm91dCB0aGVzZS4u LiAqLwotCi1zdGF0aWMgY2hhciAqIGZvcG5hcmdzW10gPSB7ICAgICAgICAgICAgLyogTW9kZSBj b21iaW5hdGlvbnMgZm9yIGZvcGVuKCkgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogQWxsIGNv bWJpbmF0aW9ucyBvZiByd2EgKi8KLSAgICAiIiwgICJyIiwgICJ3IiwgICJydyIsICAiYSIsICAi cmEiLCAgIndhIiwgICJyd2EiLCAvKiBUZXh0IG1vZGUgKi8KLSAgICAiYiIsICJyYiIsICJ3YiIs ICJyd2IiLCAiYWIiLCAicmFiIiwgIndhYiIsICJyd2FiIiAvKiBCaW5hcnkgbW9kZSAqLwotI2Vs c2UKLSAgICAvKiBDb21iaW5hdGlvbnMgYW5kIHN5bnRheCBwZXJtaXR0ZWQgYnkgQyBsaWJyYXJp ZXMuLi4gKi8KLSAgICAiIiwgICJyIiwgICJ3IiwgICJyKyIsICAiYSIsICAiIiwgICAiYSIsICAi IiwgLyogVGV4dCBtb2RlICovCi0jaWZkZWYgT1MyCi0gICAgIiIsICAicmIiLCAid2IiLCAiciti IiwgImFiIiwgIiIsICAgImFiIiwgIiIgLyogQmluYXJ5IG1vZGVzIGZvciBLOTUgKi8KLSNlbHNl Ci0jaWZkZWYgVk1TCi0gICAgIiIsICAicmIiLCAid2IiLCAicitiIiwgImFiIiwgIiIsICAgImFi IiwgIiIgLyogQmluYXJ5IG1vZGVzIGZvciBWTVMgKi8KLSNlbHNlCi0gICAgIiIsICAiciIsICAg InciLCAicisiLCAgImEiLCAgIiIsICAgImEiLCAgIiIgLyogQmluYXJ5IG1vZGVzIGZvciBVTklY ICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotfTsKLXN0YXRpYyBpbnQgbmZvcG5hcmdzID0gc2l6ZW9mKGZvcG5hcmdzKSAvIHNpemVv ZihjaGFyICopOwotCi1jaGFyICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog RXJyb3IgbWVzc2FnZXMgKi8KLWNrZmVycm9yKG4pIGludCBuOyB7Ci0gICAgc3dpdGNoIChuKSB7 Ci0gICAgICBjYXNlIEZYX05FUjogcmV0dXJuKCJObyBlcnJvciIpOwotICAgICAgY2FzZSBGWF9T WVM6IHJldHVybihja19lcnJzdHIoKSk7Ci0gICAgICBjYXNlIEZYX0VPRjogcmV0dXJuKCJFbmQg b2YgZmlsZSIpOwotICAgICAgY2FzZSBGWF9OT1A6IHJldHVybigiRmlsZSBub3Qgb3BlbiIpOwot ICAgICAgY2FzZSBGWF9DSE46IHJldHVybigiQ2hhbm5lbCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAg IGNhc2UgRlhfUk5HOiByZXR1cm4oIlBhcmFtZXRlciBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgIGNh c2UgRlhfTk1GOiByZXR1cm4oIlRvbyBtYW55IGZpbGVzIG9wZW4iKTsKLSAgICAgIGNhc2UgRlhf Rk9QOiByZXR1cm4oIk9wZXJhdGlvbiBjb25mbGljdHMgd2l0aCBPUEVOIG1vZGUiKTsKLSAgICAg IGNhc2UgRlhfTllJOiByZXR1cm4oIk9QRU4gbW9kZSBub3Qgc3VwcG9ydGVkIik7Ci0gICAgICBj YXNlIEZYX0JPTTogcmV0dXJuKCJJbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIE9QRU4gbW9kZXMiKTsK LSAgICAgIGNhc2UgRlhfQUNDOiByZXR1cm4oIkFjY2VzcyBkZW5pZWQiKTsKLSAgICAgIGNhc2Ug RlhfRk5GOiByZXR1cm4oIkZpbGUgbm90IGZvdW5kIik7Ci0gICAgICBjYXNlIEZYX09GTDogcmV0 dXJuKCJCdWZmZXIgb3ZlcmZsb3ciKTsKLSAgICAgIGNhc2UgRlhfTE5VOiByZXR1cm4oIkN1cnJl bnQgbGluZSBudW1iZXIgdW5rbm93biIpOwotICAgICAgY2FzZSBGWF9ST086IHJldHVybigiT2Zm IGxpbWl0cyIpOwotICAgICAgY2FzZSBGWF9VTks6IHJldHVybigiT3BlcmF0aW9uIGZhaWxzIC0g cmVhc29uIHVua25vd24iKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybigiRXJyb3IgbnVtYmVyIG91 dCBvZiByYW5nZSIpOwotICAgIH0KLX0KLQotLyoKLSAgWiBfIE8gUCBFIE4gLS0gIE9wZW4gYSBm aWxlIGZvciB0aGUgcmVxdWVzdGVkIHR5cGUgb2YgYWNjZXNzLgotCi0gIENhbGwgd2l0aDoKLSAg ICBuYW1lOiAgTmFtZSBvZiBmaWxlIHRvIGJlIG9wZW5lZC4KLSAgICBmbGFnczogQW55IGNvbWJp bmF0aW9uIG9mIEZNX3h4eCB2YWx1ZXMgZXhjZXB0IEZNX0VPRiAoY2tja2VyLmgpLgotICBSZXR1 cm5zOgotICAgID49IDAgb24gc3VjY2VzczogVGhlIGFzc2lnbmVkIGNoYW5uZWwgbnVtYmVyCi0g ICAgPCAgMCBvbiBmYWlsdXJlOiBBIG5lZ2F0aXZlIEZYX3h4eCBlcnJvciBjb2RlIChja2NrZXIu aCkuCi0qLwotaW50Ci16X29wZW4obmFtZSwgZmxhZ3MpIGNoYXIgKiBuYW1lOyBpbnQgZmxhZ3M7 IHsKLSAgICBpbnQgaSwgbjsKLSAgICBGSUxFICogdDsKLSAgICBjaGFyICogbW9kZTsKLSAgICBk ZWJ1ZyhGMTExLCJ6X29wZW4iLG5hbWUsZmxhZ3MpOwotICAgIGlmICghbmFtZSkgbmFtZSA9ICIi OyAgICAgICAgICAgICAgIC8qIENoZWNrIG5hbWUgYXJndW1lbnQgKi8KLSAgICBpZiAoIW5hbWVb MF0pCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX0JGTik7Ci0gICAgaWYgKGZsYWdzICYgRk1f Q01EKSAgICAgICAgICAgICAgICAgLyogT3BlbmluZyBwaXBlcyBub3QgaW1wbGVtZW50ZWQgeWV0 ICovCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX05ZSSk7ICAgICAgICAgLyogKGFuZCBub3Qg cG9ydGFibGUgZWl0aGVyKSAqLwotICAgIGRlYnVnKEYxMDEsInpfb3BlbiBuZm9wbmFyZ3MiLCIi LG5mb3BuYXJncyk7Ci0gICAgaWYgKGZsYWdzIDwgMCB8fCBmbGFncyA+PSBuZm9wbmFyZ3MpIC8q IFJhbmdlIGNoZWNrIGZsYWdzICovCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX1JORyk7Ci0g ICAgbW9kZSA9IGZvcG5hcmdzW2ZsYWdzXTsgICAgICAgICAgICAgLyogR2V0IGZvcGVuKCkgYXJn ICovCi0gICAgZGVidWcoRjExMSwiel9vcGVuIGZvcGVuIGFyZ3MiLG1vZGUsZmxhZ3MpOwotICAg IGlmICghbW9kZVswXSkgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBpbGxlZ2Fs IGNvbWJpbmF0aW9ucyAqLwotICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9CT00pOwotICAgIGlm ICghel9pbml0ZWQpIHsgICAgICAgICAgICAgICAgICAgIC8qIElmIGZpbGUgc3RydWN0cyBub3Qg aW5pdGVkICovCi0gICAgICAgIGRlYnVnKEYxMDEsInpfb3BlbiB6X21heGNoYW4gMSIsIiIsel9t YXhjaGFuKTsKLSNpZmRlZiBVTklYCi0gICAgICAgIGRlYnVnKEYxMDEsInpfb3BlbiBja21heGZp bGVzIiwiIixja21heGZpbGVzKTsKLSAgICAgICAgaWYgKGNrbWF4ZmlsZXMgPiAwKSB7ICAgICAg ICAgICAvKiBTZXQgaW4gY2s/dGlvLmM6IHN5c2luaXQoKSAqLwotICAgICAgICAgICAgaW50IHg7 Ci0gICAgICAgICAgICB4ID0gY2ttYXhmaWxlcyAtIFpORklMUyAtIDU7Ci0gICAgICAgICAgICBp ZiAoeCA+IHpfbWF4Y2hhbikgICAgICAgICAgLyogc3lzY29uZigpIHZhbHVlIGdyZWF0ZXIgdGhh biAqLwotICAgICAgICAgICAgICB6X21heGNoYW4gPSB4OyAgICAgICAgICAgIC8qIHZhbHVlIGZy b20gaGVhZGVyIGZpbGVzLiAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwiel9vcGVuIHpfbWF4 Y2hhbiAyIiwiIix6X21heGNoYW4pOwotICAgICAgICB9Ci0jZW5kaWYgLyogVU5JWCAqLwotICAg ICAgICBpZiAoel9tYXhjaGFuIDwgWl9NSU5DSEFOKSAgICAgIC8qIEFsbG9jYXRlIGF0IGxlYXN0 IHRoaXMgbWFueS4gKi8KLSAgICAgICAgICB6X21heGNoYW4gPSBaX01JTkNIQU47Ci0gICAgICAg IGRlYnVnKEYxMDEsInpfb3BlbiB6X21heGNoYW4gMyIsIiIsel9tYXhjaGFuKTsKLSAgICAgICAg LyogTm90ZTogVGhpcyBjb3VsZCBiZSBhIHByZXR0eSBiaWcgY2h1bmsgb2YgbWVtb3J5ICovCi0g ICAgICAgIC8qIGlmIHpfbWF4Y2hhbiBpcyBhIGJpZyBudW1iZXIuICBJZiB0aGlzIGJlY29tZXMg YSBwcm9ibGVtICovCi0gICAgICAgIC8qIHdlJ2xsIG5lZWQgdG8gbWFsbG9jIGFuZCBmcmVlIGVh Y2ggZWxlbWVudCBhdCBvcGVuL2Nsb3NlIHRpbWUgKi8KLSNpZmRlZiBDT01NRU5UCi0JLyogTWF5 IDIwMDYgLSBpdCdzIHRpbWUgLSBpbiBjdXJyZW50IExpbnV4IHRoaXMgYWJvdXQgM01CICovCi0g ICAgICAgIGlmICghKHpfZmlsZSA9IChzdHJ1Y3QgY2t6X2ZpbGUgKikKLSAgICAgICAgICAgICAg bWFsbG9jKHNpemVvZihzdHJ1Y3QgY2t6X2ZpbGUpICogKHpfbWF4Y2hhbiArIDEpKSkpCi0gICAg ICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OTUYpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwg el9tYXhjaGFuOyBpKyspIHsKLSAgICAgICAgICAgIHpfZmlsZVtpXS56X2ZwID0gTlVMTDsKLSAg ICAgICAgICAgIHpfZmlsZVtpXS56X2ZsYWdzID0gMDsKLSAgICAgICAgICAgIHpfZmlsZVtpXS56 X25saW5lID0gMDsKLSAgICAgICAgICAgICooel9maWxlW2ldLnpfbmFtZSkgPSAnXDAnOwotICAg ICAgICB9Ci0jZWxzZQotCS8qIE5ldyBlY29ub21pY2FsIHdheSwgYWxsb2NhdGUgc3RvcmFnZSBm b3IgZWFjaCBjaGFubmVsIGFzIG5lZWRlZCAqLwotCWlmICghel9maWxlKSB7Ci0JICAgIHpfZmls ZSA9IChzdHJ1Y3QgY2t6X2ZpbGUgKiopbWFsbG9jKCh6X21heGNoYW4gKyAxKSAqCi0JCQkJCQlz aXplb2Yoc3RydWN0IGNrel9maWxlICopKTsKLQkgICAgaWYgKCF6X2ZpbGUpCi0JICAgICAgcmV0 dXJuKHpfZXJyb3IgPSBGWF9OTUYpOwotCSAgICBmb3IgKGkgPSAwOyBpIDwgel9tYXhjaGFuOyBp KyspCi0JICAgICAgel9maWxlW2ldID0gTlVMTDsKLQl9Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwot ICAgICAgICB6X2luaXRlZCA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHdlIGlu aXRpYWxpemVkICovCi0gICAgfQotICAgIGZvciAobiA9IC0xLCBpID0gMDsgaSA8IHpfbWF4Y2hh bjsgaSsrKSB7IC8qIEZpbmQgYSBmcmVlIGNoYW5uZWwgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgIGlmICghel9maWxlW2ldLnpfZnApIHsKLSAgICAgICAgICAgIG4gPSBpOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlmICghel9maWxlW2ldKSB7Ci0J ICAgIHpfZmlsZVtpXSA9IChzdHJ1Y3QgY2t6X2ZpbGUgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qg Y2t6X2ZpbGUpKTsKLQkgICAgaWYgKCF6X2ZpbGVbaV0pCi0JICAgICAgcmV0dXJuKHpfZXJyb3Ig PSBGWF9OTUYpOwotICAgICAgICAgICAgbiA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgfQotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQotICAgIH0KLSAgICBpZiAobiA8IDAgfHwgbiA+ PSB6X21heGNoYW4pICAgICAgICAvKiBBbnkgZnJlZSBjaGFubmVscz8gKi8KLSAgICAgIHJldHVy bih6X2Vycm9yID0gRlhfTk1GKTsgICAgICAgICAvKiBObywgZmFpbC4gKi8KLSAgICBlcnJubyA9 IDA7Ci0KLSAgICB6X2ZpbGVbbl0tPnpfZmxhZ3MgPSAwOwkJLyogSW4gY2FzZSBvZiBmYWlsdXJl Li4uICovCi0gICAgel9maWxlW25dLT56X2ZwID0gTlVMTDsJCS8qIFNldCBmaWxlIHBvaW50ZXIg dG8gTlVMTCAqLwotCi0gICAgdCA9IGZvcGVuKG5hbWUsIG1vZGUpOyAgICAgICAgICAgICAgLyog VHJ5IHRvIG9wZW4gdGhlIGZpbGUuICovCi0gICAgaWYgKCF0KSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRmFpbGVkLi4uICovCi0gICAgICAgIGRlYnVnKEYxMTEsInpfb3BlbiBlcnJv ciIsbmFtZSxlcnJubyk7Ci0jaWZkZWYgRU1GSUxFCi0gICAgICAgIGlmIChlcnJubyA9PSBFTUZJ TEUpCi0gICAgICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OTUYpOwotI2VuZGlmIC8qIEVNRklM RSAqLwotCWZyZWUoel9maWxlW25dKTsKLQl6X2ZpbGVbbl0gPSBOVUxMOwotICAgICAgICByZXR1 cm4oel9lcnJvciA9IChlcnJubyA/ICBGWF9TWVMgOiBGWF9VTkspKTsgLyogUmV0dXJuIGVycm9y IGNvZGUgKi8KLSAgICB9Ci0jaWZkZWYgTlQKLSNpZmRlZiBPX1NFUVVFTlRJQUwKLSAgICBpZiAo dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYWNoaW5nIGhpbnQgZm9yIE5UICov Ci0gICAgICBfc2V0bW9kZShfZmlsZW5vKHQpLE9fU0VRVUVOVElBTCk7Ci0jZW5kaWYgLyogT19T RVFVRU5USUFMICovCi0jZW5kaWYgLyogTlQgKi8KLSAgICB6X25vcGVuKys7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBPcGVuLCBjb3VudCBpdC4gKi8KLSAgICB6X2ZpbGVbbl0tPnpfZnAg PSB0OwkJLyogU3Rhc2ggdGhlIGZpbGUgcG9pbnRlciAqLwotICAgIHpfZmlsZVtuXS0+el9mbGFn cyA9IGZsYWdzOwkJLyogYW5kIHRoZSBmbGFncyAqLwotICAgIHpfZmlsZVtuXS0+el9ubGluZSA9 IDA7CQkvKiBDdXJyZW50IGxpbmUgbnVtYmVyIGlzIDAgKi8KLSAgICB6X2Vycm9yID0gMDsKLSAg ICB6Zm5xZnAobmFtZSxDS01BWFBBVEgsel9maWxlW25dLT56X25hbWUpOyAvKiBhbmQgdGhlIGZp bGUncyBmdWxsIG5hbWUgKi8KLSAgICByZXR1cm4obik7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZXR1cm4gdGhlIGNoYW5uZWwgbnVtYmVyICovCi19Ci0KLWludAotel9jbG9zZShjaGFu bmVsKSBpbnQgY2hhbm5lbDsgeyAgICAgICAgIC8qIENsb3NlIGZpbGUgb24gZ2l2ZW4gY2hhbm5l bCAqLwotICAgIGludCB4OwotICAgIEZJTEUgKiB0OwotICAgIGlmICghel9pbml0ZWQpICAgICAg ICAgICAgICAgICAgICAgIC8qIENhbGxlZCBiZWZvcmUgYW55IGZpbGVzIGFyZSBvcGVuPyAqLwot ICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwotICAgIGlmIChjaGFubmVsID49IHpfbWF4 Y2hhbikgICAgICAgICAgIC8qIENoYW5uZWwgb3V0IG9mIHJhbmdlPyAqLwotICAgICAgcmV0dXJu KHpfZXJyb3IgPSBGWF9DSE4pOwotICAgIGlmICghel9maWxlW2NoYW5uZWxdKQotICAgICAgcmV0 dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwotICAgIGlmICghKHQgPSB6X2ZpbGVbY2hhbm5lbF0tPnpf ZnApKSAgICAvKiBDaGFubmVsIHdhc24ndCBvcGVuPyAqLwotICAgICAgcmV0dXJuKHpfZXJyb3Ig PSBGWF9OT1ApOwotICAgIGVycm5vID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNl dCBlcnJubyAwIHRvIGdldCBhIGdvb2QgcmVhZGluZyAqLwotICAgIHggPSBmY2xvc2UodCk7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFRyeSB0byBjbG9zZSAqLwotICAgIGlmICh4ID09IEVPRikg ICAgICAgICAgICAgICAgICAgICAgIC8qIE9uIGZhaWx1cmUgKi8KLSAgICAgIHJldHVybih6X2Vy cm9yID0gRlhfU1lTKTsgICAgICAgICAvKiBpbmRpY2F0ZSBzeXN0ZW0gZXJyb3IuICovCi0gICAg el9ub3Blbi0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2VkIE9LLCBkZWNyZW1l bnQgb3BlbiBjb3VudCAqLwotICAgIHpfZmlsZVtjaGFubmVsXS0+el9mcCA9IE5VTEw7CS8qIFNl dCBmaWxlIHBvaW50ZXIgdG8gTlVMTCAqLwotICAgIHpfZmlsZVtjaGFubmVsXS0+el9ubGluZSA9 IDA7CS8qIEN1cnJlbnQgbGluZSBudW1iZXIgaXMgMCAqLwotICAgIHpfZmlsZVtjaGFubmVsXS0+ el9mbGFncyA9IDA7CS8qIFNldCBmbGFncyB0byAwICovCi0gICAgKih6X2ZpbGVbY2hhbm5lbF0t PnpfbmFtZSkgPSAnXDAnOwkvKiBDbGVhciBuYW1lICovCi0gICAgZnJlZSh6X2ZpbGVbY2hhbm5l bF0pOwotICAgIHpfZmlsZVtjaGFubmVsXSA9IE5VTEw7Ci0gICAgcmV0dXJuKHpfZXJyb3IgPSAw KTsKLX0KLQotLyoKLSAgWiBfIE8gVSBUICAtLSAgT3V0cHV0IHN0cmluZyB0byBjaGFubmVsLgot Ci0gIENhbGwgd2l0aDoKLSAgICBjaGFubmVsOiAgICAgQ2hhbm5lbCBudW1iZXIgdG8gd3JpdGUg dG8uCi0gICAgczogICAgICAgICAgIFN0cmluZyB0byB3cml0ZS4KLSAgICBsZW5ndGggPiAtMTog SG93IG1hbnkgY2hhcmFjdGVycyBvZiBzIHRvIHdyaXRlLgotICAgIGxlbmd0aCA8IDA6ICBXcml0 ZSBlbnRpcmUgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nLgotICAgIGZsYWdzID09IDA6ICBTdXBwbHkg bGluZSB0ZXJtaW5hdGlvbi4KLSAgICBmbGFncyA+ICAwOiAgRG9uJ3Qgc3VwcGx5IGxpbmUgdGVy bWluYXRpb24uCi0gICAgZmxhZ3MgPCAgMDogIFdyaXRlICdsZW5ndGgnIE5VTCBjaGFyYWN0ZXJz LgotICBTcGVjaWFsIGNhc2U6Ci0gICAgSWYgZmxhZ3MgPiAtMSBhbmQgcyBpcyBlbXB0eSBvciBO VUxMIGFuZCBsZW5ndGggPT0gMSwgd3JpdGUgMSBOVUwuCi0gIFJldHVybnM6Ci0gICAgTnVtYmVy IG9mIGNoYXJhY3RlcnMgd3JpdHRlbiB0byBjaGFubmVsIG9uIHN1Y2Nlc3MsIG9yCi0gICAgbmVn YXRpdmUgRlhfeHh4IGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSovCi1pbnQKLXpfb3V0KGNoYW5u ZWwscyxsZW5ndGgsZmxhZ3MpIGludCBjaGFubmVsLCBmbGFncywgbGVuZ3RoOyBjaGFyICogczsg ewotICAgIEZJTEUgKiB0OwotICAgIGludCB4LCBuOwotICAgIGNoYXIgYyA9ICdcMCc7Ci0KLSAg ICBpZiAoIXMpIHMgPSAiIjsgICAgICAgICAgICAgICAgICAgICAvKiBHdWFyZCBhZ2FpbnN0IG51 bGwgcG9pbnRlciAqLwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAgICAgICBk ZWJ1ZyhGMTExLCJ6X291dCIscyxjaGFubmVsKTsKLSAgICAgICAgZGVidWcoRjEwMSwiel9vdXQg bGVuZ3RoIiwiIixsZW5ndGgpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ6X291dCBmbGFncyIsIiIs ZmxhZ3MpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIGlmICghel9pbml0ZWQpICAg ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgaS9vIGluaXRlZD8gKi8KLSAgICAgIHJldHVybih6 X2Vycm9yID0gRlhfTk9QKTsKLSAgICBpZiAoY2hhbm5lbCA+PSB6X21heGNoYW4pICAgICAgICAg ICAvKiBDaGFubmVsIGluIHJhbmdlPyAqLwotICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9DSE4p OwotICAgIGlmICghel9maWxlW2NoYW5uZWxdKQotICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9O T1ApOwotICAgIGlmICghKHQgPSB6X2ZpbGVbY2hhbm5lbF0tPnpfZnApKSAgICAvKiBGaWxlIG9w ZW4/ICovCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7Ci0gICAgaWYgKCEoKHpfZmls ZVtjaGFubmVsXS0+el9mbGFncykgJiAoRk1fV1JJfEZNX0FQUCkpKSAvKiBJbiB3cml0ZSBtb2Rl PyAqLwotICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9GT1ApOwotICAgIG4gPSBsZW5ndGg7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJpbmcgdG8gd3JpdGUgKi8KLSAg ICBpZiAobiA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWdhdGl2ZSBtZWFucyBn ZXQgaXQgb3Vyc2VsdmVzICovCi0gICAgICAgIGlmIChmbGFncyA8IDApICAgICAgICAgICAgICAg ICAgLyogRXhjZXB0IHdoZW4gdG9sZCB0byB3cml0ZSBOVUxzIGluICovCi0gICAgICAgICAgcmV0 dXJuKHpfZXJyb3IgPSBGWF9STkcpOyAgICAgLyogd2hpY2ggY2FzZSBhcmdzIGFyZSBpbmNvbnNp c3RlbnQgKi8KLSAgICAgICAgbiA9IHN0cmxlbihzKTsgICAgICAgICAgICAgICAgICAvKiBHZXQg bGVuZ3RoIG9mIHN0cmluZyBhcmcgKi8KLSAgICB9Ci0gICAgZXJybm8gPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUmVzZXQgZXJybm8gKi8KLSAgICBkZWJ1ZyhGMTAxLCJ6X291dCBu IiwiIixuKTsKLSAgICBpZiAoZmxhZ3MgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBXcml0 aW5nIE5VTHMuLi4gKi8KLSAgICAgICAgaW50IGk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBu OyBpKyspIHsKLSAgICAgICAgICAgIHggPSBmd3JpdGUoJmMsMSwxLHQpOwotICAgICAgICAgICAg aWYgKHggPCAxKQotICAgICAgICAgICAgICByZXR1cm4oel9lcnJvciA9IChlcnJubyA/IEZYX1NZ UyA6IEZYX1VOSykpOwotICAgICAgICB9Ci0gICAgICAgIHpfZmlsZVtjaGFubmVsXS0+el9ubGlu ZSA9IC0xOyAgIC8qIEN1cnJlbnQgbGluZSBubyBsb25nZXIga25vd24gKi8KLSAgICAgICAgel9l cnJvciA9IDA7Ci0gICAgICAgIHJldHVybihpKTsKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBXcml0aW5nIHN0cmluZyBhcmcgKi8KLSAgICAgICAgaWYgKG4gPT0g MSAmJiAhc1swXSkgICAgICAgICAgICAvKiBXcml0aW5nIG9uZSBjaGFyIGJ1dCBpdCdzIE5VTCAq LwotICAgICAgICAgIHggPSBmd3JpdGUoJmMsMSwxLHQpOwotICAgICAgICBlbHNlICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFdyaXRpbmcgbm9uLU5VTCBjaGFyIG9yIHN0cmluZyAqLwot ICAgICAgICAgIHggPSBmd3JpdGUocywxLG4sdCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInpfb3V0 IGZ3cml0ZSIsY2tpdG9hKHgpLGVycm5vKTsKLSAgICAgICAgaWYgKHggPCBuKSAgICAgICAgICAg ICAgICAgICAgICAvKiBGYWlsdXJlIHRvIHdyaXRlIHJlcXVlc3RlZCBhbW91bnQgKi8KLSAgICAg ICAgICByZXR1cm4oel9lcnJvciA9IChlcnJubyA/IEZYX1NZUyA6IEZYX1VOSykpOyAvKiBSZXR1 cm4gZXJyb3IgKi8KLSAgICAgICAgaWYgKGZsYWdzID09IDApIHsgICAgICAgICAgICAgICAvKiBJ ZiBzdXBwbHlpbmcgbGluZSB0ZXJtaW5hdGlvbiAqLwotICAgICAgICAgICAgaWYgKGZ3cml0ZSgi XG4iLDEsMSx0KSkgICAgIC8qIGRvIHRoYXQgICovCi0gICAgICAgICAgICAgIHggKz0gel9sdDsg ICAgICAgICAgICAgICAgLyogY291bnQgdGhlIHRlcm1pbmF0b3IgKi8KLSAgICAgICAgICAgIGlm ICh6X2ZpbGVbY2hhbm5lbF0tPnpfbmxpbmUgPiAtMSkgLyogY291bnQgdGhpcyBsaW5lICovCi0g ICAgICAgICAgICAgIHpfZmlsZVtjaGFubmVsXS0+el9ubGluZSsrOwotICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgel9maWxlW2NoYW5uZWxdLT56X25saW5lID0gLTE7IC8qIEN1cnJlbnQg bGluZSBubyBsb25nZXIga25vd24gKi8KLSAgICAgICAgfQotICAgIH0KLSAgICB6X2Vycm9yID0g MDsKLSAgICByZXR1cm4oeCk7Ci19Ci0KLSNkZWZpbmUgWl9JTkJVRkxFTiA2NAotCi0vKgotICBa IF8gSSBOICAtLSAgTXVsdGljaGFubmVsIGkvbyBmaWxlIGlucHV0IGZ1bmN0aW9uLgotCi0gIENh bGwgd2l0aDoKLSAgICBjaGFubmVsIG51bWJlciB0byByZWFkIGZyb20uCi0gICAgcyA9IGFkZHJl c3Mgb2YgZGVzdGluYXRpb24gYnVmZmVyLgotICAgIGJ1ZmxlbiA9IGRlc3RpbmF0aW9uIGJ1ZmZl ciBsZW5ndGguCi0gICAgbGVuZ3RoID0gTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQsIG11c3QgYmUg PCBidWZsZW4uCi0gICAgZmxhZ3M6IDAgPSByZWFkIGEgbGluZTsgbm9uemVybyA9IHJlYWQgdGhl IGdpdmVuIG51bWJlciBvZiBieXRlcy4KLSAgUmV0dXJuczoKLSAgICBOdW1iZXIgb2YgYnl0ZXMg cmVhZCBpbnRvIGJ1ZmZlciBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCi0gICAgQSB0ZXJtaW5h dGluZyBOVUwgaXMgZGVwb3NpdGVkIGFmdGVyIHRoZSBsYXN0IGJ5dGUgdGhhdCB3YXMgcmVhZC4K LSovCi1pbnQKLXpfaW4oY2hhbm5lbCxzLGJ1ZmxlbixsZW5ndGgsZmxhZ3MpCi0gaW50IGNoYW5u ZWwsIGJ1ZmxlbiwgbGVuZ3RoLCBmbGFnczsgY2hhciAqIHM7Ci0vKiB6X2luICovIHsKLSAgICBp bnQgaSwgaiwgeDsKLSAgICBGSUxFICogdDsKLSAgICBjaGFyICogcDsKLQotICAgIGlmICghel9p bml0ZWQpICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGV2ZXJ5dGhpbmcuLi4gKi8KLSAg ICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKLSAgICBpZiAoY2hhbm5lbCA+PSB6X21heGNo YW4pCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX0NITik7Ci0gICAgaWYgKCF6X2ZpbGVbY2hh bm5lbF0pCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7Ci0gICAgaWYgKCEodCA9IHpf ZmlsZVtjaGFubmVsXS0+el9mcCkpCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7Ci0g ICAgaWYgKCEoKHpfZmlsZVtjaGFubmVsXS0+el9mbGFncykgJiBGTV9SRUEpKQotICAgICAgcmV0 dXJuKHpfZXJyb3IgPSBGWF9GT1ApOwotICAgIGlmICghcykgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIENoZWNrIGRlc3RpbmF0aW9uICovCi0gICAgIHJldHVybih6X2Vycm9yID0gRlhf Uk5HKTsKLSAgICBzWzBdID0gTlVMOwotICAgIGlmIChsZW5ndGggPT0gMCkgICAgICAgICAgICAg ICAgICAgIC8qIFJlYWQgMCBieXRlcyAtIGVhc3kuICovCi0gICAgICByZXR1cm4oel9lcnJvciA9 IDApOwotICAgIGRlYnVnKEYxMDEsInpfaW4gY2hhbm5lbCIsIiIsY2hhbm5lbCk7Ci0gICAgZGVi dWcoRjEwMSwiel9pbiBidWZsZW4iLCIiLGJ1Zmxlbik7Ci0gICAgZGVidWcoRjEwMSwiel9pbiBs ZW5ndGgiLCIiLGxlbmd0aCk7Ci0gICAgZGVidWcoRjEwMSwiel9pbiBmbGFncyIsIiIsZmxhZ3Mp OwotICAgIGlmIChsZW5ndGggPCAwIHx8IGJ1ZmxlbiA8IDApICAgICAgIC8qIENoZWNrIGxlbmd0 aCBhcmdzICovCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX1JORyk7Ci0gICAgaWYgKGJ1Zmxl biA8PSBsZW5ndGgpCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX1JORyk7Ci0gICAgZXJybm8g PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgZXJybm8gKi8KLSAgICBpZiAo ZmxhZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIGJsb2NrIG9yIGJ5dGUgKi8K LQlpbnQgbjsJCQkJLyogMjAwNTA5MTIgKi8KLQluID0gbGVuZ3RoOwkJCS8qIDIwMDUwOTEyICov Ci0JaSA9IDA7CQkJCS8qIDIwMDUwOTEyICovCi0Jd2hpbGUgKG4gPiAwKSB7CQkJLyogMjAwNTA5 MTIgKi8KLQkgICAgaSA9IGZyZWFkKHMsMSxuLHQpOwkJLyogMjAwNTA5MTIgKi8KLSNpZmRlZiBE RUJVRwotCSAgICBpZiAoZGVibG9nKSB7Ci0JCWRlYnVnKEYxMTEsInpfaW4gYmxvY2siLHMsaSk7 Ci0JCWRlYnVnKEYxMDEsInpfaW4gYmxvY2sgZXJybm8iLCIiLGVycm5vKTsKLQkJZGVidWcoRjEw MSwiel9pbiBibG9jayBmZXJyb3IiLCIiLGZlcnJvcih0KSk7Ci0JCWRlYnVnKEYxMDEsInpfaW4g YmxvY2sgZmVvZiIsIiIsZmVvZih0KSk7Ci0JICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCSAg ICBpZiAoaSA9PSAwKSBicmVhazsJCS8qIDIwMDUwOTEyICovCi0JICAgIHMgKz0gaTsJCQkvKiAy MDA1MDkxMiAqLwotCSAgICBuIC09IGk7CQkJLyogMjAwNTA5MTIgKi8KLQl9Ci0JLyogQ3VycmVu dCBsaW5lIG5vIGxvbmdlciBrbm93biAqLwotICAgICAgICB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxp bmUgPSAoQ0tfT0ZGX1QpLTE7Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUmVhZCBsaW5lICovCi0jaWZuZGVmIENPTU1FTlQKLSAgICAgICAgLyogVGhpcyBtZXRo b2QgaXMgdXNlZCBiZWNhdXNlIGl0J3Mgc2ltcGxlciB0aGFuIHRoZSBvdGhlcnMgKi8KLSAgICAg ICAgLyogYW5kIGFsc28gbWFyZ2luYWxseSBmYXN0ZXIuICovCi0gICAgICAgIGRlYnVnKEYxMDEs InpfaW4gZ2V0YyBsb29wIiwiIixDS0ZURUxMKHQpKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8 IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoKHggPSBnZXRjKHQpKSA9PSBFT0YpIHsK LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6X2luIGdldGMgZXJyb3IiLCIiLENLRlRFTEwo dCkpOwotICAgICAgICAgICAgICAgIHNbaV0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc1tpXSA9IHg7Ci0gICAgICAgICAgICBpZiAo c1tpXSA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgc1tpXSA9ICdcMCc7Ci0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjEx MSwiel9pbiBsaW5lIGJ5dGUgbG9vcCIsY2tpdG9hKGVycm5vKSxpKTsKLSAgICAgICAgZGVidWco RjExMSwiel9pbiBsaW5lIGdvdCIscyx6X2ZpbGVbY2hhbm5lbF0tPnpfbmxpbmUpOwotICAgICAg ICBpZiAoel9maWxlW2NoYW5uZWxdLT56X25saW5lID4gLTEpCi0gICAgICAgICAgel9maWxlW2No YW5uZWxdLT56X25saW5lKys7Ci0jZWxzZQotI2lmZGVmIENPTU1FTlQyCi0gICAgICAgIC8qIFN0 cmFpZ2h0Zm9yd2FyZCBidXQgc3RybGVuKCkgc2xvd3MgaXQgZG93bi4gKi8KLSAgICAgICAgc1sw XSA9ICdcMCc7Ci0gICAgICAgIGkgPSAwOwotICAgICAgICBpZiAoZmdldHMocyxsZW5ndGgsdCkp IHsKLSAgICAgICAgICAgIGkgPSBzdHJsZW4ocyk7Ci0gICAgICAgICAgICBpZiAoaSA+IDAgJiYg c1tpLTFdID09ICdcbicpIGktLTsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTExLCJ6X2lu IGxpbmUgZmdldHMiLGNraXRvYShlcnJubyksaSk7Ci0gICAgICAgIGlmICh6X2ZpbGVbY2hhbm5l bF0tPnpfbmxpbmUgPiAtMSkKLSAgICAgICAgICB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxpbmUrKzsK LSNlbHNlCi0gICAgICAgIC8qIFRoaXMgaXMgYSBkby1pdC15b3Vyc2VsZiBmZ2V0cygpIHdpdGgg aXRzIG93biByZWFkYWhlYWQgYW5kICovCi0gICAgICAgIC8qIHB1dGJhY2suICBJdCdzIGEgYml0 IGZhc3RlciB0aGFuIHJlYWwgZmdldHMoKSBidXQgbm90IGVub3VnaCAqLwotICAgICAgICAvKiB0 byBqdXN0aWZ5IHRoZSBhZGRlZCBjb21wbGV4aXR5IG9yIHRoZSByaXNrIG9mIHRoZSBmdGVsbCgp IGFuZCAqLwotICAgICAgICAvKiBmc2VlaygpIGNhbGxzIGZhaWxpbmcuICovCi0gICAgICAgIGlu dCBrLCBmbGFnID0gMDsKLSAgICAgICAgQ0tfT0ZGX1QgcG9zOwotICAgICAgICBmb3IgKGkgPSAw OyAhZmxhZyAmJiBpIDw9IChsZW5ndGggLSBaX0lOQlVGTEVOKTsgaSArPSBaX0lOQlVGTEVOKSB7 Ci0gICAgICAgICAgICBrID0gKChsZW5ndGggLSBpKSA8IFpfSU5CVUZMRU4pID8gbGVuZ3RoIC0g aSA6IFpfSU5CVUZMRU47Ci0gICAgICAgICAgICBpZiAoKHggPSBmcmVhZChzK2ksMSxrLHQpKSA8 IDEpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgc1tpK3hdID0gJ1wwJzsKLSAg ICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB4OyBqKyspIHsKLSAgICAgICAgICAgICAgICBpZiAo c1tpK2pdID09ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgc1tpK2pdID0gJ1wwJzsKLSAg ICAgICAgICAgICAgICAgICAgZmxhZyArKzsKLSAgICAgICAgICAgICAgICAgICAgcG9zID0gQ0tG VEVMTCh0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA+IC0xKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBwb3MgLT0gKHggLSBqIC0gMSk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICB4ID0gQ0tGU0VFSyh0LCBwb3MsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBq OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybih6X2Vycm9yID0gRlhfU1lTKTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHpf ZmlsZVtjaGFubmVsXS0+el9ubGluZSA+IC0xKQotICAgICAgICAgIHpfZmlsZVtjaGFubmVsXS0+ el9ubGluZSsrOwotICAgICAgICBkZWJ1ZyhGMTExLCJ6X2luIGxpbmUgY2h1bmsgbG9vcCIsY2tp dG9hKGVycm5vKSxpKTsKLSNlbmRpZiAvKiBDT01NRU5UMiAqLwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLSAgICB9Ci0gICAgZGVidWcoRjExMSwiel9pbiBpIixja2l0b2EoZXJybm8pLGkpOwotICAg IGlmIChpIDwgMCkgaSA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIE5VTC10ZXJtaW5hdGUgcmVz dWx0ICovCi0gICAgc1tpXSA9ICdcMCc7Ci0gICAgaWYgKGkgPiAwKSB7Ci0gICAgICAgIHpfZXJy b3IgPSAwOwotICAgICAgICByZXR1cm4oaSk7Ci0gICAgfQotICAgIGlmIChpID09IDAgJiYgZmVv Zih0KSkgICAgICAgICAgICAgIC8qIEVPRiBvbiByZWFkaW5nPyAqLwotICAgICAgcmV0dXJuKHpf ZXJyb3IgPSBGWF9FT0YpOyAgICAgICAgIC8qIFJldHVybiBFT0YgY29kZSAqLwotICAgIHJldHVy bihlcnJubyA/ICh6X2Vycm9yID0gLTEpIDogaSk7IC8qIFJldHVybiBsZW5ndGggb3Igc3lzdGVt IGVycm9yICovCi19Ci0KLWludAotel9mbHVzaChjaGFubmVsKSBpbnQgY2hhbm5lbDsgeyAgICAg ICAgIC8qIEZsdXNoIG91dHB1dCBjaGFubmVsICovCi0gICAgRklMRSAqIHQ7Ci0gICAgaW50IHg7 Ci0gICAgaWYgKCF6X2luaXRlZCkgICAgICAgICAgICAgICAgICAgICAgLyogUmVndWxhciBjaGVj a3MgKi8KLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKLSAgICBpZiAoY2hhbm5lbCA+ PSB6X21heGNoYW4pCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX0NITik7Ci0gICAgaWYgKCF6 X2ZpbGVbY2hhbm5lbF0pCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7Ci0gICAgaWYg KCEodCA9IHpfZmlsZVtjaGFubmVsXS0+el9mcCkpCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZY X05PUCk7Ci0gICAgaWYgKCEoKHpfZmlsZVtjaGFubmVsXS0+el9mbGFncykgJiAoRk1fV1JJfEZN X0FQUCkpKSAvKiBXcml0ZSBhY2Nlc3M/ICovCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX0ZP UCk7Ci0gICAgZXJybm8gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgZXJy bm8gKi8KLSAgICB4ID0gZmZsdXNoKHQpOyAgICAgICAgICAgICAgICAgICAgICAvKiBUcnkgdG8g Zmx1c2ggKi8KLSAgICByZXR1cm4oeCA/ICh6X2Vycm9yID0gRlhfU1lTKSA6IDApOyAvKiBSZXR1 cm4gc3lzdGVtIGVycm9yIG9yIDAgaWYgT0sgKi8KLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMK LXpfc2VlayhpbnQgY2hhbm5lbCwgQ0tfT0ZGX1QgcG9zKQkvKiBNb3ZlIGZpbGUgcG9pbnRlciB0 byBieXRlICovCi0jZWxzZQotel9zZWVrKGNoYW5uZWwscG9zKSBpbnQgY2hhbm5lbDsgQ0tfT0ZG X1QgcG9zOyAvKiAoc2VlayB0byBnaXZlbiBwb3NpdGlvbikgKi8KLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotewotICAgIGludCBpLCB4ID0gMCwgcmM7Ci0gICAgRklMRSAqIHQ7Ci0gICAgaWYgKCF6 X2luaXRlZCkgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2suLi4gKi8KLSAgICAgIHJldHVy bih6X2Vycm9yID0gRlhfTk9QKTsKLSAgICBpZiAoY2hhbm5lbCA+PSB6X21heGNoYW4pCi0gICAg ICByZXR1cm4oel9lcnJvciA9IEZYX0NITik7Ci0gICAgaWYgKCF6X2ZpbGVbY2hhbm5lbF0pCi0g ICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7Ci0gICAgaWYgKCEodCA9IHpfZmlsZVtjaGFu bmVsXS0+el9mcCkpCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7Ci0gICAgaWYgKHBv cyA8IDBMKSB7Ci0gICAgICAgIHggPSAyOwotICAgICAgICBwb3MgPSAocG9zID09IC0yKSA/IC0x TCA6IDBMOwotICAgIH0KLSAgICBlcnJubyA9IDA7Ci0gICAgcmMgPSBDS0ZTRUVLKHQscG9zLHgp OwkJLyogVHJ5IHRvIHNlZWsgKi8KLSAgICBkZWJ1ZyhGMTExLCJ6X3NlZWsiLGNraXRvYShlcnJu bykscmMpOwotICAgIGlmIChyYyA8IDApICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9LPyAq LwotICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9TWVMpOyAvKiBOby4gKi8KLSAgICB6X2ZpbGVb Y2hhbm5lbF0tPnpfbmxpbmUgPSAoKHBvcyB8fCB4KSA/IC0xIDogMCk7Ci0gICAgcmV0dXJuKHpf ZXJyb3IgPSAwKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXpfbGluZShpbnQgY2hhbm5l bCwgQ0tfT0ZGX1QgcG9zKSAgICAgICAgICAgLyogTW92ZSBmaWxlIHBvaW50ZXIgdG8gbGluZSAq LwotI2Vsc2UKLXpfbGluZShjaGFubmVsLHBvcykgaW50IGNoYW5uZWw7IENLX09GRl9UIHBvczsg LyogKHNlZWsgdG8gZ2l2ZW4gcG9zaXRpb24pICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSAgICBpbnQgaSwgbGVuLCB4ID0gMDsKLSAgICBDS19PRkZfVCBjdXJyZW50ID0gKENLX09GRl9U KTAsIHByZXYgPSAoQ0tfT0ZGX1QpLTEsIG9sZCA9IChDS19PRkZfVCktMTsKLSAgICBGSUxFICog dDsKLSAgICBjaGFyIHRtcGJ1ZlsyNTZdOwotICAgIGlmICghel9pbml0ZWQpICAgICAgICAgICAg ICAgICAgICAgIC8qIENoZWNrLi4uICovCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7 Ci0gICAgaWYgKGNoYW5uZWwgPj0gel9tYXhjaGFuKQotICAgICAgcmV0dXJuKHpfZXJyb3IgPSBG WF9DSE4pOwotICAgIGlmICghel9maWxlW2NoYW5uZWxdKQotICAgICAgcmV0dXJuKHpfZXJyb3Ig PSBGWF9OT1ApOwotICAgIGlmICghKHQgPSB6X2ZpbGVbY2hhbm5lbF0tPnpfZnApKQotICAgICAg cmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwotICAgIGRlYnVnKEYxMDEsInpfbGluZSBwb3MiLCIi LHBvcyk7Ci0gICAgaWYgKHBvcyA8IDBMKSB7ICAgICAgICAgICAgICAgICAgICAgLyogRU9GIHdh bnRlZCAqLwotICAgICAgICBDS19PRkZfVCBuOwotICAgICAgICBuID0gel9maWxlW2NoYW5uZWxd LT56X25saW5lOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ6X2xpbmUgbiIsIiIsbik7Ci0gICAgICAg IGlmIChuIDwgMCB8fCBwb3MgPCAwKSB7Ci0gICAgICAgICAgICByZXdpbmQodCk7Ci0gICAgICAg ICAgICBuID0gMDsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAg ICAgICAgIC8qIFRoaXMgY291bGQgdGFrZSBhIHdoaWxlLi4uICovCi0gICAgICAgICAgICBpZiAo KHggPSBnZXRjKHQpKSA9PSBFT0YpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg aWYgKHggPT0gJ1xuJykgewotICAgICAgICAgICAgICAgIG4rKzsKLSAgICAgICAgICAgICAgICBp ZiAocG9zID09IC0yKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9sZCA9IHByZXY7Ci0gICAgICAg ICAgICAgICAgICAgIHByZXYgPSBDS0ZURUxMKHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTAxLCJ6X2xpbmUgb2xkIiwiIixv bGQpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ6X2xpbmUgcHJldiIsIiIscHJldik7Ci0gICAgICAg IGlmIChwb3MgPT0gLTIpIHsKLSAgICAgICAgICAgIGlmICgoeCA9IHpfc2VlayhjaGFubmVsLG9s ZCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHpfZXJyb3IgPSB4KTsKLSAgICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgICAgbi0tOwotICAgICAgICB9Ci0gICAgICAgIHpfZmlsZVtjaGFu bmVsXS0+el9ubGluZSA9IG47Ci0gICAgICAgIHJldHVybih6X2Vycm9yID0gMCk7Ci0gICAgfQot ICAgIGlmIChwb3MgPT0gMEwpIHsgICAgICAgICAgICAgICAgICAgIC8qIFJld2luZCB3YW50ZWQg Ki8KLSAgICAgICAgel9maWxlW2NoYW5uZWxdLT56X25saW5lID0gMEw7Ci0gICAgICAgIHJld2lu ZCh0KTsKLSAgICAgICAgZGVidWcoRjEwMCwiel9saW5lIHJld2luZCIsIiIsMCk7Ci0gICAgICAg IHJldHVybigwTCk7Ci0gICAgfQotICAgIHRtcGJ1ZlsyNTVdID0gTlVMOyAgICAgICAgICAgICAg ICAgIC8qIE1ha2Ugc3VyZSBidWYgaXMgTlVMIHRlcm1pbmF0ZWQgKi8KLSAgICBjdXJyZW50ID0g el9maWxlW2NoYW5uZWxdLT56X25saW5lOyAgLyogQ3VycmVudCBsaW5lICovCi0gICAgLyoKLSAg ICAgIElmIG5lY2Vzc2FyeSB0aGUgZm9sbG93aW5nIGNvdWxkIGJlIG9wdGltaXplZCwgZS5nLiBm b3IgcG9zaXRpb25pbmcKLSAgICAgIHRvIGEgcHJldmlvdXMgbGluZSBpbiBhIGxhcmdlIGZpbGUg d2l0aG91dCBzdGFydGluZyBvdmVyLgotICAgICovCi0gICAgaWYgKGN1cnJlbnQgPCAwIHx8IHBv cyA8IGN1cnJlbnQpIHsgLyogTm90IGtub3duIG9yIGJlaGluZCB1cy4uLiAqLwotICAgICAgICBk ZWJ1ZyhGMTAxLCJ6X2xpbmUgcmV3aW5kaW5nIiwiIixwb3MpOwotICAgICAgICBpZiAoKHggPSB6 X3NlZWsoY2hhbm5lbCwgMEwpKSA8IDApIC8qIFJld2luZCAqLwotICAgICAgICAgIHJldHVybih6 X2Vycm9yID0geCk7Ci0gICAgICAgIGlmIChwb3MgPT0gMCkgICAgICAgICAgICAgICAgICAgLyog SWYgMHRoIGxpbmUgd2FudGVkIHdlJ3JlIGRvbmUgKi8KLSAgICAgICAgICByZXR1cm4oel9lcnJv ciA9IDApOwotICAgICAgICBjdXJyZW50ID0gMDsKLSAgICB9Ci0gICAgd2hpbGUgKGN1cnJlbnQg PCBwb3MpIHsgICAgICAgICAgICAgLyogU2VhcmNoIGZvciBzcGVjaWZpZWQgbGluZSAqLwotICAg ICAgICBpZiAoZmdldHModG1wYnVmLDI1NSx0KSkgewotICAgICAgICAgICAgbGVuID0gc3RybGVu KHRtcGJ1Zik7Ci0gICAgICAgICAgICBpZiAobGVuID4gMCAmJiB0bXBidWZbbGVuLTFdID09ICdc bicpIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50Kys7Ci0gICAgICAgICAgICAgICAgZGVidWco RjExMSwiel9saW5lIHJlYWQiLGNraXRvYShsZW4pLGN1cnJlbnQpOwotICAgICAgICAgICAgfSBl bHNlIGlmIChsZW4gPT0gMCkgewotICAgICAgICAgICAgICAgIHJldHVybih6X2Vycm9yID0gRlhf VU5LKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHpfZmls ZVtjaGFubmVsXS0+el9ubGluZSA9IC0xTDsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInpfbGlu ZSBwcmVtYXR1cmUgRU9GIiwiIixjdXJyZW50KTsKLSAgICAgICAgICAgIHJldHVybih6X2Vycm9y ID0gRlhfRU9GKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxp bmUgPSBjdXJyZW50OwotICAgIGRlYnVnKEYxMDEsInpfbGluZSByZXN1bHQiLCIiLGN1cnJlbnQp OwotICAgIHpfZXJyb3IgPSAwOwotICAgIHJldHVybihjdXJyZW50KTsKLX0KLQotY2hhciAqCi16 X2dldG5hbWUoY2hhbm5lbCkgaW50IGNoYW5uZWw7IHsgICAgICAgLyogUmV0dXJuIG5hbWUgb2Yg ZmlsZSBvbiBjaGFubmVsICovCi0gICAgRklMRSAqIHQ7Ci0gICAgaWYgKCF6X2luaXRlZCkgewot ICAgICAgICB6X2Vycm9yID0gRlhfTk9QOwotICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgfQot ICAgIGlmIChjaGFubmVsID49IHpfbWF4Y2hhbikgewotICAgICAgICB6X2Vycm9yID0gRlhfQ0hO OwotICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIGlmICghel9maWxlW2NoYW5uZWxd KSB7Ci0gICAgICAgIHpfZXJyb3IgPSBGWF9OT1A7Ci0gICAgICAgIHJldHVybihOVUxMKTsKLSAg ICB9Ci0gICAgaWYgKCEodCA9IHpfZmlsZVtjaGFubmVsXS0+el9mcCkpIHsKLSAgICAgICAgel9l cnJvciA9IEZYX05PUDsKLSAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICByZXR1cm4o KGNoYXIgKikoel9maWxlW2NoYW5uZWxdLT56X25hbWUpKTsKLX0KLQotaW50Ci16X2dldG1vZGUo Y2hhbm5lbCkgaW50IGNoYW5uZWw7IHsgICAgICAgLyogUmV0dXJuIE9QRU4gbW9kZXMgb2YgY2hh bm5lbCAqLwotICAgIEZJTEUgKiB0OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgaWYg ZmlsZSBub3Qgb3BlbiAqLwotI2lmbmRlZiBOT1NUQVQKLSNpZmRlZiBOVAotICAgIHN0cnVjdCBf c3RhdCBzdGF0YnVmOwotI2Vsc2UgLyogTlQgKi8KLSAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOwot I2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogTk9TVEFUICovCi0gICAgaW50IHg7Ci0gICAgaWYg KCF6X2luaXRlZCkKLSAgICAgIHJldHVybigwKTsKLSAgICBpZiAoY2hhbm5lbCA+PSB6X21heGNo YW4pCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX0NITik7Ci0gICAgaWYgKCF6X2ZpbGVbY2hh bm5lbF0pCi0gICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKCEodCA9IHpfZmlsZVtjaGFubmVsXS0+ el9mcCkpCi0gICAgICByZXR1cm4oMCk7Ci0gICAgeCA9IHpfZmlsZVtjaGFubmVsXS0+el9mbGFn czsKLSAgICBpZiAoZmVvZih0KSkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIG1pZ2h0 IG5vdCB3b3JrIGZvciAqLwotICAgICAgICB4IHw9IEZNX0VPRjsgICAgICAgICAgICAgICAgICAg IC8qIG91dHB1dCBmaWxlcyAqLwotI2lmbmRlZiBOT1NUQVQKLSAgICAvKiBCdXQgdGhpcyBkb2Vz IGlmIHdlIGNhbiB1c2UgaXQuICovCi0gICAgfSBlbHNlIGlmIChzdGF0KHpfZmlsZVtjaGFubmVs XS0+el9uYW1lLCZzdGF0YnVmKSA+IC0xKSB7Ci0gICAgICAgIGlmIChDS0ZURUxMKHQpID09IHN0 YXRidWYuc3Rfc2l6ZSkKLSAgICAgICAgICB4IHw9IEZNX0VPRjsKLSNlbmRpZiAvKiBOT1NUQVQg Ki8KLSAgICB9Ci0gICAgcmV0dXJuKHgpOwotfQotCi1DS19PRkZfVAotel9nZXRwb3MoY2hhbm5l bCkgaW50IGNoYW5uZWw7IHsgICAgICAgIC8qIEdldCBmaWxlIHBvaW50ZXIgcG9zaXRpb24gKi8K LSAgICBGSUxFICogdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvbiB0aGlzIGNoYW5u ZWwgKi8KLSAgICBDS19PRkZfVCB4OwotICAgIGlmICghel9pbml0ZWQpCi0gICAgICByZXR1cm4o el9lcnJvciA9IEZYX05PUCk7Ci0gICAgaWYgKGNoYW5uZWwgPj0gel9tYXhjaGFuKQotICAgICAg cmV0dXJuKHpfZXJyb3IgPSBGWF9DSE4pOwotICAgIGlmICghel9maWxlW2NoYW5uZWxdKQotICAg ICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwotICAgIGlmICghKHQgPSB6X2ZpbGVbY2hhbm5l bF0tPnpfZnApKQotICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwotICAgIHggPSBDS0ZU RUxMKHQpOwotICAgIHJldHVybigoeCA8IDBMKSA/ICh6X2Vycm9yID0gRlhfU1lTKSA6IHgpOwot fQotCi1DS19PRkZfVAotel9nZXRsaW5lKGNoYW5uZWwpIGludCBjaGFubmVsOyB7ICAgICAgIC8q IEdldCBjdXJyZW50IGxpbmUgbnVtYmVyICovCi0gICAgRklMRSAqIHQ7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogaW4gZmlsZSBvbiB0aGlzIGNoYW5uZWwgKi8KLSAgICBDS19PRkZfVCBy YzsKLSAgICBpZiAoIXpfaW5pdGVkKQotICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwot ICAgIGlmIChjaGFubmVsID49IHpfbWF4Y2hhbikKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhf Q0hOKTsKLSAgICBpZiAoIXpfZmlsZVtjaGFubmVsXSkKLSAgICAgIHJldHVybih6X2Vycm9yID0g RlhfTk9QKTsKLSAgICBpZiAoISh0ID0gel9maWxlW2NoYW5uZWxdLT56X2ZwKSkKLSAgICAgIHJl dHVybih6X2Vycm9yID0gRlhfTk9QKTsKLSAgICBkZWJ1ZyhGMTAxLCJ6X2dldGxpbmUiLCIiLHpf ZmlsZVtjaGFubmVsXS0+el9ubGluZSk7Ci0gICAgcmMgPSB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxp bmU7Ci0gICAgcmV0dXJuKChyYyA8IDApID8gKHpfZXJyb3IgPSBGWF9MTlUpIDogcmMpOwotfQot Ci1pbnQKLXpfZ2V0Zm51bShjaGFubmVsKSBpbnQgY2hhbm5lbDsgeyAgICAgICAvKiBHZXQgZmls ZSBudW1iZXIgLyBoYW5kbGUgKi8KLSAgICBGSUxFICogdDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBmb3IgZmlsZSBvbiB0aGlzIGNoYW5uZWwgKi8KLSAgICBpZiAoIXpfaW5pdGVkKQot ICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwotICAgIGlmIChjaGFubmVsID49IHpfbWF4 Y2hhbikKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfQ0hOKTsKLSAgICBpZiAoIXpfZmlsZVtj aGFubmVsXSkKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKLSAgICBpZiAoISh0ID0g el9maWxlW2NoYW5uZWxdLT56X2ZwKSkKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsK LSAgICB6X2Vycm9yID0gMDsKLSAgICByZXR1cm4oZmlsZW5vKHQpKTsKLX0KLQotLyoKLSAgTGlu ZS1vcmllbnRlZCBjb3VudHMgYW5kIHNlZWtzIGFyZSBhcyBkdW1iIGFzIHRoZXkgY2FuIGJlIGF0 IHRoZSBtb21lbnQuCi0gIExhdGVyIHdlIGNhbiBzcGVlZCB0aGVtIHVwIGJ5IGJ1aWxkaW5nIGxp dHRsZSBpbmRleGVzLgotKi8KLUNLX09GRl9UCi16X2NvdW50KGNoYW5uZWwsIHdoYXQpIGludCBj aGFubmVsLCB3aGF0OyB7IC8qIENvdW50IGJ5dGVzIG9yIGxpbmVzIGluIGZpbGUgKi8KLSAgICBG SUxFICogdDsKLSAgICBpbnQgaSwgeDsKLSAgICBDS19PRkZfVCBwb3MsIGNvdW50ID0gKENLX09G Rl9UKTA7Ci0gICAgaWYgKCF6X2luaXRlZCkgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sg c3R1ZmYuLi4gKi8KLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKLSAgICBpZiAoY2hh bm5lbCA+PSB6X21heGNoYW4pCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX0NITik7Ci0gICAg aWYgKCF6X2ZpbGVbY2hhbm5lbF0pCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7Ci0g ICAgaWYgKCEodCA9IHpfZmlsZVtjaGFubmVsXS0+el9mcCkpCi0gICAgICByZXR1cm4oel9lcnJv ciA9IEZYX05PUCk7Ci0gICAgcG9zID0gQ0tGVEVMTCh0KTsJCQkvKiBTYXZlIGN1cnJlbnQgZmls ZSBwb2ludGVyICovCi0gICAgZXJybm8gPSAwOwotICAgIHpfZXJyb3IgPSAwOwotICAgIGlmICh3 aGF0ID09IFJEX0NIQVIpIHsgICAgICAgICAgICAgIC8qIFNpemUgaW4gYnl0ZXMgcmVxdWVzdGVk ICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBpZiAoIUNLRlNFRUsodCwwTCwyKSkgewkJLyog U2VlayB0byBlbmQgKi8KLSAgICAgICAgICAgIGNvdW50ID0gQ0tGVEVMTCh0KTsJCS8qIEdldCBm aWxlIHBvaW50ZXIgKi8KLSAgICAgICAgICAgIENLRlNFRUsodCxwb3MsMCk7CQkvKiBSZXN0b3Jl IGZpbGUgZmlsZSBwb2ludGVyICovCi0gICAgICAgICAgICByZXR1cm4oY291bnQpOwotICAgICAg ICB9IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZhbGxiYWNrIGluIGNhc2Ugc2Vl ayBmYWlscyAqLwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLSAgICAgICAgICByZXR1cm4oemdldGZz KHpfZmlsZVtjaGFubmVsXS0+el9uYW1lKSk7Ci0gICAgfQotICAgIHJld2luZCh0KTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIExpbmUgY291bnQgcmVxdWVzdGVkIC0gcmV3aW5kLiAqLwot ICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IGxpbmVzLiAq LwotICAgICAgICBpZiAoKHggPSBnZXRjKHQpKSA9PSBFT0YpICAgICAgIC8qIFN0dXBpZCBieXRl IGxvb3AgKi8KLSAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAvKiBidXQg aXQgd29ya3MgYXMgd2VsbCBhcyBhbnl0aGluZyAqLwotICAgICAgICBpZiAoeCA9PSAnXG4nKSAg ICAgICAgICAgICAgICAgIC8qIGVsc2UuLi4gKi8KLSAgICAgICAgICBjb3VudCsrOwotICAgIH0K LSAgICB4ID0gQ0tGU0VFSyh0LHBvcywwKTsJCS8qIFJlc3RvcmUgZmlsZSBwb2ludGVyICovCi0g ICAgcmV0dXJuKGNvdW50KTsKLX0KLQotLyogVXNlciBpbnRlcmZhY2UgZm9yIGdlbmVyYWxpemVk IGNoYW5uZWwtb3JpZW50ZWQgZmlsZSBpL28gKi8KLQotc3RydWN0IGtleXRhYiBmY3RhYltdID0g eyAgICAgICAgICAgICAgIC8qIEZJTEUgc3ViY29tbWFuZHMgKi8KLSAgICB7ICJjbG9zZSIsICAg ICAgRklMX0NMUywgMCB9LAotICAgIHsgImNvdW50IiwgICAgICBGSUxfQ09VLCAwIH0sCi0gICAg eyAiZmx1c2giLCAgICAgIEZJTF9GTFUsIDAgfSwKLSAgICB7ICJsaXN0IiwgICAgICAgRklMX0xJ UywgMCB9LAotICAgIHsgIm9wZW4iLCAgICAgICBGSUxfT1BOLCAwIH0sCi0gICAgeyAicmVhZCIs ICAgICAgIEZJTF9SRUEsIDAgfSwKLSAgICB7ICJyZXdpbmQiLCAgICAgRklMX1JFVywgMCB9LAot ICAgIHsgInNlZWsiLCAgICAgICBGSUxfU0VFLCAwIH0sCi0gICAgeyAic3RhdHVzIiwgICAgIEZJ TF9TVEEsIDAgfSwKLSAgICB7ICJ3cml0ZSIsICAgICAgRklMX1dSSSwgMCB9Ci19OwotaW50IG5m Y3RhYiA9IChzaXplb2YgKGZjdGFiKSAvIHNpemVvZiAoc3RydWN0IGtleXRhYikpOwotCi1zdGF0 aWMgc3RydWN0IGtleXRhYiBmY3N3dGFiW10gPSB7ICAgICAgLyogT1BFTiBtb2RlcyAqLwotICAg IHsgIi9hcHBlbmQiLCAgICBGTV9BUFAsICAwIH0sCi0gICAgeyAiL2JpbmFyeSIsICAgIEZNX0JJ TiwgIDAgfSwKLSNpZmRlZiBDT01NRU5UCi0gICAgeyAiL2NvbW1hbmQiLCAgIEZNX0NNRCwgIDAg fSwgICAgICAgLyogTm90IGltcGxlbWVudGVkICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAg IHsgIi9yZWFkIiwgICAgICBGTV9SRUEsICAwIH0sCi0gICAgeyAiL3dyaXRlIiwgICAgIEZNX1dS SSwgIDAgfQotfTsKLXN0YXRpYyBpbnQgbmZjc3d0YWIgPSAoc2l6ZW9mIChmY3N3dGFiKSAvIHNp emVvZiAoc3RydWN0IGtleXRhYikpOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBmY2xrd3RhYltd ID0geyAgICAgLyogQ0xPU0Ugb3B0aW9ucyAqLwotICAgIHsgImFsbCIsICAgICAgICAxLCAgICAg ICAwIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZzZWt3dGFiW10gPSB7ICAgICAvKiBT RUVLIHN5bWJvbHMgKi8KLSAgICB7ICJlb2YiLCAgICAgICAgMSwgICAgICAgMCB9LAotICAgIHsg Imxhc3QiLCAgICAgICAyLCAgICAgICAwIH0KLX07Ci1zdGF0aWMgaW50IG5mc2Vrd3RhYiA9IChz aXplb2YgKGZzZWt3dGFiKSAvIHNpemVvZiAoc3RydWN0IGtleXRhYikpOwotCi0jZGVmaW5lIFNF RV9MSU5FICBSRF9MSU5FICAgICAgICAgICAgICAgLyogU0VFSyBvcHRpb25zICovCi0jZGVmaW5l IFNFRV9DSEFSICBSRF9DSEFSCi0jZGVmaW5lIFNFRV9SRUwgICAzCi0jZGVmaW5lIFNFRV9BQlMg ICA0Ci0jZGVmaW5lIFNFRV9GSU5EICA1Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZza3N3dGFi W10gPSB7Ci0gICAgeyAiL2Fic29sdXRlIiwgIFNFRV9BQlMsICAwIH0sCi0gICAgeyAiL2J5dGUi LCAgICAgIFNFRV9DSEFSLCAwIH0sCi0gICAgeyAiL2NoYXJhY3RlciIsIFNFRV9DSEFSLCBDTV9J TlYgfSwKLSAgICB7ICIvZmluZCIsICAgICAgU0VFX0ZJTkQsIENNX0FSRyB9LAotICAgIHsgIi9s aW5lIiwgICAgICBTRUVfTElORSwgMCB9LAotICAgIHsgIi9yZWxhdGl2ZSIsICBTRUVfUkVMLCAg MCB9Ci19Owotc3RhdGljIGludCBuZnNrc3d0YWIgPSAoc2l6ZW9mIChmc2tzd3RhYikgLyBzaXpl b2YgKHN0cnVjdCBrZXl0YWIpKTsKLQotI2RlZmluZSBDT1VfTElORSAgUkRfTElORSAgICAgICAg ICAgICAgIC8qIENPVU5UIG9wdGlvbnMgKi8KLSNkZWZpbmUgQ09VX0NIQVIgIFJEX0NIQVIKLSNk ZWZpbmUgQ09VX0xJUyAgIDMKLSNkZWZpbmUgQ09VX05PTCAgIDQKLQotc3RhdGljIHN0cnVjdCBr ZXl0YWIgZmNvc3d0YWJbXSA9IHsKLSAgICB7ICIvYnl0ZXMiLCAgICAgQ09VX0NIQVIsIDAgICAg ICB9LAotICAgIHsgIi9jaGFyYWN0ZXJzIixDT1VfQ0hBUiwgQ01fSU5WIH0sCi0gICAgeyAiL2xp bmVzIiwgICAgIENPVV9MSU5FLCAwICAgICAgfSwKLSAgICB7ICIvbGlzdCIsICAgICAgQ09VX0xJ UywgIDAgICAgICB9LAotICAgIHsgIi9ub2xpc3QiLCAgICBDT1VfTk9MLCAgMCAgICAgIH0sCi0g ICAgeyAiL3F1aWV0IiwgICAgIENPVV9OT0wsICBDTV9JTlYgfQotfTsKLXN0YXRpYyBpbnQgbmZj b3N3dGFiID0gKHNpemVvZiAoZmNvc3d0YWIpIC8gc2l6ZW9mIChzdHJ1Y3Qga2V5dGFiKSk7Ci0K LXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZyZHRhYltdID0geyAgICAgICAvKiBSRUFEIHR5cGVzICov Ci0gICAgeyAiL2Jsb2NrIiwgICAgIFJEX1NJWkUsIENNX0lOVnxDTV9BUkcgfSwKLSAgICB7ICIv Ynl0ZSIsICAgICAgUkRfQ0hBUiwgQ01fSU5WIH0sCi0gICAgeyAiL2NoYXJhY3RlciIsIFJEX0NI QVIsIDAgICAgICB9LAotICAgIHsgIi9saW5lIiwgICAgICBSRF9MSU5FLCAwICAgICAgfSwKLSAg ICB7ICIvc2l6ZSIsICAgICAgUkRfU0laRSwgQ01fQVJHIH0sCi0gICAgeyAiL3RyaW0iLCAgICAg IFJEX1RSSU0sIDAgICAgICB9LAotICAgIHsgIi91bnRhYmlmeSIsICBSRF9VTlRBLCAwICAgICAg fQotfTsKLXN0YXRpYyBpbnQgbmZyZHRhYiA9IChzaXplb2YgKGZyZHRhYikgLyBzaXplb2YgKHN0 cnVjdCBrZXl0YWIpKTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZndydGFiW10gPSB7ICAgICAg IC8qIFdSSVRFIHR5cGVzICovCi0gICAgeyAiL2Jsb2NrIiwgICAgIFdSX1NJWkUsIENNX0lOVnxD TV9BUkcgfSwKLSAgICB7ICIvYnl0ZSIsICAgICAgV1JfQ0hBUiwgQ01fSU5WIH0sCi0gICAgeyAi L2NoYXJhY3RlciIsIFdSX0NIQVIsIDAgICAgICB9LAotICAgIHsgIi9saW5lIiwgICAgICBXUl9M SU5FLCAwICAgICAgfSwKLSAgICB7ICIvbHBhZCIsICAgICAgV1JfTFBBRCwgQ01fQVJHIH0sCi0g ICAgeyAiL3JwYWQiLCAgICAgIFdSX1JQQUQsIENNX0FSRyB9LAotICAgIHsgIi9zaXplIiwgICAg ICBXUl9TSVpFLCBDTV9BUkcgfSwKLSAgICB7ICIvc3RyaW5nIiwgICAgV1JfU1RSSSwgMCAgICAg IH0KLX07Ci1zdGF0aWMgaW50IG5md3J0YWIgPSAoc2l6ZW9mIChmd3J0YWIpIC8gc2l6ZW9mIChz dHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0YXRpYyBjaGFyIGJsYW5rc1tdID0gIlwwNDBcMDQwXDA0MFww NDAiOyAvKiBTb21lIGJsYW5rcyBmb3IgZm9ybWF0dGluZyAqLwotc3RhdGljIGNoYXIgKiBzZWVr X3RhcmdldCA9IE5VTEw7Ci0KLWludAotZG9maWxlKG9wKSBpbnQgb3A7IHsgICAgICAgICAgICAg ICAgICAgIC8qIERvIHRoZSBGSUxFIGNvbW1hbmQgKi8KLSAgICBjaGFyIHZuYW1idWZbVk5BTUxd OyAgICAgICAgICAgICAgICAvKiBCdWZmZXIgZm9yIHZhcmlhYmxlIG5hbWVzICovCi0gICAgY2hh ciAqdm5wID0gTlVMTDsgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBzYW1lICovCi0g ICAgY2hhciB6ZmlsbmFtW0NLTUFYUEFUSCsyXTsKLSAgICBjaGFyICogcCwgKiBtOwotICAgIHN0 cnVjdCBGREIgZmwsIHN3LCBudTsKLSAgICBDS19PRkZfVCB6OwotICAgIGludCByc2l6ZSwgZmls bW9kZSA9IDAsIHJlbGF0aXZlID0gLTEsIGVvZmZsZyA9IDA7Ci0gICAgaW50IHJjLCB4LCB5LCBj eCwgbiwgZ2V0dmFsLCBkdW1teSwgY29uZmlybWVkLCBsaXN0aW5nID0gLTE7Ci0gICAgaW50IGNo YXJmbGFnID0gMCwgc2l6ZWZsYWcgPSAwOwotICAgIGludCBwYWQgPSAzMiwgd3JfbHBhZCA9IDAs IHdyX3JwYWQgPSAwLCByZF90cmltID0gMCwgcmRfdW50YWIgPSAwOwotCi0gICAgbWFrZXN0cigm c2Vla190YXJnZXQsTlVMTCk7Ci0KLSAgICBpZiAob3AgPT0gWFhGSUxFKSB7ICAgICAgICAgICAg ICAgICAvKiBGSUxFIGNvbW1hbmQgd2FzIGdpdmVuICovCi0gICAgICAgIC8qIEdldCBzdWJjb21t YW5kICovCi0gICAgICAgIGlmICgoY3ggPSBjbWtleShmY3RhYixuZmN0YWIsIk9wZXJhdGlvbiIs IiIseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgIGlmIChjeCA9PSAtMykgewotICAgICAg ICAgICAgICAgIHByaW50ZigiP0ZpbGUgb3BlcmF0aW9uIHJlcXVpcmVkXG4iKTsKLSAgICAgICAg ICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oY3gpOwot ICAgICAgICB9Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2hv cnRoYW5kIGNvbW1hbmQgd2FzIGdpdmVuICovCi0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAg ICAgICBjYXNlIFhYRl9DTDogY3ggPSBGSUxfQ0xTOyBicmVhazsgLyogRkNMT1NFICovCi0gICAg ICAgICAgY2FzZSBYWEZfRkw6IGN4ID0gRklMX0ZMVTsgYnJlYWs7IC8qIEZGTFVTSCAqLwotICAg ICAgICAgIGNhc2UgWFhGX0xJOiBjeCA9IEZJTF9MSVM7IGJyZWFrOyAvKiBGTElTVCAqLwotICAg ICAgICAgIGNhc2UgWFhGX09QOiBjeCA9IEZJTF9PUE47IGJyZWFrOyAvKiBldGMuLi4gKi8KLSAg ICAgICAgICBjYXNlIFhYRl9SRTogY3ggPSBGSUxfUkVBOyBicmVhazsKLSAgICAgICAgICBjYXNl IFhYRl9SVzogY3ggPSBGSUxfUkVXOyBicmVhazsKLSAgICAgICAgICBjYXNlIFhYRl9TRTogY3gg PSBGSUxfU0VFOyBicmVhazsKLSAgICAgICAgICBjYXNlIFhYRl9TVDogY3ggPSBGSUxfU1RBOyBi cmVhazsKLSAgICAgICAgICBjYXNlIFhYRl9XUjogY3ggPSBGSUxfV1JJOyBicmVhazsKLSAgICAg ICAgICBjYXNlIFhYRl9DTzogY3ggPSBGSUxfQ09VOyBicmVhazsKLSAgICAgICAgICBkZWZhdWx0 OiByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHN3aXRjaCAoY3gpIHsgICAgICAg ICAgICAgICAgICAgICAgIC8qIERvIHJlcXVlc3RlZCBzdWJjb21tYW5kICovCi0gICAgICBjYXNl IEZJTF9PUE46ICAgICAgICAgICAgICAgICAgICAgLyogT1BFTiAqLwotICAgICAgICBjbWZkYmko JnN3LCAgICAgICAgICAgICAgICAgICAgIC8qIFN3aXRjaGVzICovCi0gICAgICAgICAgICAgICBf Q01LRVksICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgICAgICJWYXJp YWJsZSBvciBzd2l0Y2giLCAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAiIiwgICAgICAg ICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgICAgIG5m Y3N3dGFiLCAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUg Ki8KLSAgICAgICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0gICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAg ICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAgZmNzd3Rh YiwgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgICAgICZm bCAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAg ICAgICAgICApOwotICAgICAgICBjbWZkYmkoJmZsLCAgICAgICAgICAgICAgICAgICAgIC8qIEFu eXRoaW5nIHRoYXQgZG9lc24ndCBtYXRjaCAqLwotICAgICAgICAgICAgICAgX0NNRkxELCAgICAg ICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICAgICAiVmFyaWFibGUiLCAgICAg ICAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAg ICIiLAotICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg ICBOVUxMLAotICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgIE5VTEwKLSAgICAg ICAgICAgICAgICk7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICB4ID0gY21mZGIo JnN3KTsgICAgICAgICAgICAgLyogUGFyc2Ugc29tZXRoaW5nICovCi0gICAgICAgICAgICBpZiAo eCA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAg ICAgICBwcmludGYoIj9WYXJpYWJsZSBuYW1lIGFuZCBmaWxlIG5hbWUgcmVxdWlyZWRcbiIpOwot ICAgICAgICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjbXJlc3Vs dC5mY29kZSA9PSBfQ01GTEQpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZWxz ZSBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNS0VZKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBj OwotICAgICAgICAgICAgICAgIGMgPSBjbWdicmsoKTsKLSAgICAgICAgICAgICAgICBpZiAoKGdl dHZhbCA9Ci0gICAgICAgICAgICAgICAgICAgICAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAh KGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9U aGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAg ICAgICAgICAgICAgIC8qIFVuY29tbWVudCBpZiB3ZSBhZGQgYW55IHN3aXRjaGVzIGhlcmUgdGhh dCB0YWtlIGFyZ3MgKi8KLSAgICAgICAgICAgICAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdz KCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNo IHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05 KTsgICAgICAgICAvKiAobm9uZSBkby4uLikgKi8KLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYg LyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgIGZpbG1vZGUgfD0gY21yZXN1bHQubnJlc3Vs dDsgLyogT1IgaW4gdGhlIGZpbGUgbW9kZSAqLwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg ICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICAgICAgLyogTm90IGEgc3dpdGNoIC0g Z2V0IHRoZSBzdHJpbmcgKi8KLSAgICAgICAgY2tzdHJuY3B5KHZuYW1idWYsY21yZXN1bHQuc3Jl c3VsdCxWTkFNTCk7Ci0gICAgICAgIGlmICghdm5hbWJ1ZlswXSB8fCBjaGtudW0odm5hbWJ1Zikp IHsgLyogKGlmIHRoZXJlIGlzIG9uZS4uLikgKi8KLSAgICAgICAgICAgIHByaW50ZigiP1Zhcmlh YmxlIG5hbWUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAg fQotICAgICAgICB2bnAgPSB2bmFtYnVmOyAgICAgICAgICAgICAgICAgIC8qIENoZWNrIHZhcmlh YmxlLW5hbWUgc3ludGF4ICovCi0gICAgICAgIGlmICh2bmFtYnVmWzBdID09IENNRFEgJiYKLSAg ICAgICAgICAgICh2bmFtYnVmWzFdID09ICclJyB8fCB2bmFtYnVmWzFdID09ICcmJykpCi0gICAg ICAgICAgdm5wKys7Ci0gICAgICAgIHkgPSAwOwotICAgICAgICBpZiAoKnZucCA9PSAnJScgfHwg KnZucCA9PSAnJicpIHsKLSAgICAgICAgICAgIGlmICgoeSA9IHBhcnNldmFyKHZucCwmeCwmZHVt bXkpKSA8IDApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9TeW50YXggZXJyb3IgaW4gdmFy aWFibGUgbmFtZVxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotCS8qIEFzc2lnbiBhIG5lZ2F0aXZlIGNoYW5uZWwgbnVtYmVyIGluIGNh c2Ugd2UgZmFpbCAqLwotCWFkZG1hYyh2bmFtYnVmLCItMSIpOwotCi0gICAgICAgIGlmICghKGZp bG1vZGUgJiBGTV9SV0EpKSAgICAgICAgLyogSWYgbm8gYWNjZXNzIG1vZGUgc3BlY2lmaWVkICov Ci0gICAgICAgICAgZmlsbW9kZSB8PSBGTV9SRUE7ICAgICAgICAgICAgLyogZGVmYXVsdCB0byAv UkVBRC4gKi8KLQotICAgICAgICB5ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5v dyBwYXJzZSB0aGUgZmlsZW5hbWUgKi8KLSAgICAgICAgaWYgKChmaWxtb2RlICYgRk1fUldBKSA9 PSBGTV9XUkkpIHsKLQkgICAgeCA9IGNtb2ZpKCJOYW1lIG9mIG5ldyBmaWxlIiwiIiwmcyx4eHN0 cmluZyk7Ci0JfSBlbHNlIGlmICgoZmlsbW9kZSAmIEZNX1JXQSkgPT0gRk1fUkVBKSB7Ci0JICAg IHggPSBjbWlmaSgiTmFtZSBvZiBleGlzdGluZyBmaWxlIiwiIiwmcywmeSx4eHN0cmluZyk7Ci0J fSBlbHNlIHsKLSAgICAgICAgICAgIHggPSBjbWlvZmkoIkZpbGVuYW1lIiwiIiwmcywmeSx4eHN0 cmluZyk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJmb3BlbiAvYXBwZW5kIHgiLHMseCk7Ci0J fQotICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAg ICAgICAgICAgICAgcHJpbnRmKCI/RmlsZW5hbWUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAg ICAgIHggPSAtOTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAg ICAgfQotICAgICAgICBpZiAoeSkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHdpbGRj YXJkcyAqLwotICAgICAgICAgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkIGhlcmVc biIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZmls bW9kZSAmIChGTV9BUFB8Rk1fV1JJKSkgeyAvKiBDaGVjayBvdXRwdXQgYWNjZXNzICovCi0jaWZu ZGVmIFZNUwotICAgICAgICAgICAgaWYgKHpjaGtvKHMpIDwgMCkgeyAgICAgICAgICAvKiBhbmQg c2V0IGVycm9yIGNvZGUgaWYgZGVuaWVkICovCi0gICAgICAgICAgICAgICAgel9lcnJvciA9IEZY X0FDQzsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9Xcml0ZSBhY2Nlc3MgZGVuaWVkIC0gXCIl c1wiXG4iLHMpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0j ZW5kaWYgLyogVk1TICovCi0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY3B5KHpmaWxuYW0scyxD S01BWFBBVEgpOyAvKiBJcyBPSyAtIG1ha2Ugc2FmZSBjb3B5ICovCi0gICAgICAgIGlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkgICAgICAgICAgLyogR2V0IGNvbmZpcm1hdGlvbiBvZiBjb21tYW5kICov Ci0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKG4gPSB6X29wZW4oemZpbG5hbSxm aWxtb2RlKSkgPCAwKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9PUEVOIGZhaWxlZCAtICVzOiAl c1xuIix6ZmlsbmFtLGNrZmVycm9yKG4pKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAg ICAgIH0KLSAgICAgICAgYWRkbWFjKHZuYW1idWYsY2tpdG9hKG4pKTsgICAgICAvKiBBc3NpZ24g Y2hhbm5lbCBudW1iZXIgdG8gdmFyaWFibGUgKi8KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLQotICAgICAgY2FzZSBGSUxfUkVXOiAgICAgICAgICAgICAgICAgICAgIC8qIFJFV0lORCAq LwotICAgICAgICBpZiAoKHggPSBjbW51bSgiQ2hhbm5lbCBudW1iZXIiLCIiLDEwLCZuLCB4eHN0 cmluZykpIDwgMCkgewotICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAg ICBwcmludGYoIj9DaGFubmVsIG51bWJlciByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAg eCA9IC05OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICB9 Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0J aWYgKG4gPT0gLTkpIHJldHVybihzdWNjZXNzID0gMCk7Ci0JaWYgKG4gPT0gLTgpIHJldHVybihz dWNjZXNzID0gMSk7Ci0KLSAgICAgICAgaWYgKChyYyA9IHpfc2VlayhuLDBMKSkgPCAwKSB7Ci0g ICAgICAgICAgICBwcmludGYoIj9SRVdJTkQgZmFpbGVkIC0gQ2hhbm5lbCAlZDogJXNcbiIsbixj a2ZlcnJvcihyYykpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIEZJTF9DTFM6ICAgICAgICAgICAg ICAgICAgICAgLyogQ0xPU0UgKi8KLSNpZmRlZiBDT01NRU5UCQkJCS8qIGZkYyAyMDEwMDgwNCAt IGJhZCBpZGVhICovCi0gICAgICAgICB7Ci0JICAgIGludCBpLCBqLCBrOwkJLyogU3VwcGx5IGRl ZmF1bHQgaWYgb25seSBvbmUgb3BlbiAqLwotCSAgICBzID0gIiI7Ci0JICAgIGZvciAoayA9IDAs IGogPSAwLCBpID0gMDsgaSA8IHpfbWF4Y2hhbjsgaSsrKSB7Ci0JCWlmICh6X2ZpbGUpCi0JCSAg aWYgKHpfZmlsZVtpXSkKLQkJICAgIGlmICh6X2ZpbGVbaV0tPnpfZnApIHsgaysrOyBqID0gaTsg fQotCSAgICB9Ci0JICAgIGlmIChrID09IDEpIHMgPSBja2l0b2Eoaik7Ci0JIH0KLSNlbmRpZgkv KiBDT01NRU5UICovCi0gICAgICAgICAgY21mZGJpKCZudSwgICAgICAgICAgICAgICAgICAgLyog U2Vjb25kIEZEQiAtIGNoYW5uZWwgbnVtYmVyICovCi0gICAgICAgICAgICAgICAgIF9DTU5VTSwg ICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgICAgICAgIkNoYW5uZWwgbnVt YmVyIG9yIEFMTCIsIC8qIEhlbHAgbWVzc2FnZSAqLwotICAgICAgICAgICAgICAgICBzLAkJCS8q IGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAvKiBh ZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAgICAgICAxMCwgICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiByYWRpeCAqLwotICAgICAgICAgICAgICAgICAw LCAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiAwICovCi0gICAg ICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlv biAqLwotICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQg dGFibGUgKi8KLSAgICAgICAgICAgICAgICAgJnN3CQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAq LwotICAgICAgICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8g bmV4dCBGREIgKi8KLQkgY21mZGJpKCZzdywJCQkvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRj aGVzICovCi0gICAgICAgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgLyogZmNvZGUg Ki8KLSAgICAgICAgICAgICAgICAgIiIsCQkJLyogaGVscCBtZXNzYWdlICovCi0JCSAiIiwJCQkv KiBEZWZhdWx0ICovCi0JCSAiIiwJCQkvKiBObyBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAg ICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAx OiB0Ymwgc2l6ZSAqLwotICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLSAgICAgICAgICAgICAgICAgeHhz dHJpbmcsICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAg ICAgICAgIGZjbGt3dGFiLCAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAqLwotCQkgTlVM TAkJCS8qIExhc3QgaW4gY2hhaW4gKi8KLSAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgeCA9 IGNtZmRiKCZudSk7ICAgICAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KLSAgICAg ICAgaWYgKHggPCAwKSB7Ci0gICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAg ICAgIHByaW50ZigiP0NoYW5uZWwgbnVtYmVyIG9yIEFMTCByZXF1aXJlZFxuIik7Ci0gICAgICAg ICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuKHgpOwot ICAgICAgICB9Ci0gICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01OVU0pCi0gICAgICAg ICAgbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7Ci0gICAgICAgIGVsc2UgaWYgKGNtcmVzdWx0LmZjb2Rl ID09IF9DTUtFWSkKLSAgICAgICAgICBuID0gLTE7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0JaWYgKG4gPT0gLTkpIHJldHVybihzdWNjZXNz ID0gMCk7Ci0JaWYgKG4gPT0gLTgpIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgICAgcmMg PSAxOwotICAgICAgICBpZiAobiA8IDApIHsKLSAgICAgICAgICAgIGludCBjb3VudCA9IDA7Ci0g ICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB6X21heGNoYW47 IGkrKykgewotICAgICAgICAgICAgICAgIHggPSB6X2Nsb3NlKGkpOwotICAgICAgICAgICAgICAg IGlmICh4ID09IEZYX1NZUykgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9DTE9TRSBm YWlsZWQgLSBDaGFubmVsICVkOiAlc1xuIixuLGNrZmVycm9yKHgpKTsKLSAgICAgICAgICAgICAg ICAgICAgcmMgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA+IC0xKQotICAgICAg ICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlYnVnKEYx MDEsIkZJTEUgQ0xPU0UgQUxMIiwiIixjb3VudCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKHggPSB6 X2Nsb3NlKG4pKSA8IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiP0NMT1NFIGZhaWxlZCAtIENo YW5uZWwgJWQ6ICVzXG4iLG4sY2tmZXJyb3IoeCkpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsK LSAgICAgICAgfQotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHJjKTsKLQotICAgICAgY2FzZSBG SUxfUkVBOiAgICAgICAgICAgICAgICAgICAgIC8qIFJFQUQgKi8KLSAgICAgIGNhc2UgRklMX1dS STogICAgICAgICAgICAgICAgICAgICAvKiBXUklURSAqLwotICAgICAgICByc2l6ZSA9IDA7Ci0g ICAgICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAgLyogU3dpdGNoZXMgKi8KLSAg ICAgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAg ICAgICAgICAgIkNoYW5uZWwgb3Igc3dpdGNoIiwgICAgIC8qIGhscG1zZyAqLwotICAgICAgICAg ICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAg ICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAg ICAgICAgICAgICAgKGN4ID09IEZJTF9SRUEpID8gbmZyZHRhYiA6IG5md3J0YWIsCi0gICAgICAg ICAgICAgICA0LCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6 IDQgPSBjbXN3aSAqLwotICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgIC8q IFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgICAgIChjeCA9PSBGSUxfUkVBKSA/ IGZyZHRhYiA6IGZ3cnRhYiwgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAgICAgJm51 ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAg ICAgICAgICk7Ci0gICAgICAgIGNtZmRiaSgmbnUsICAgICAgICAgICAgICAgICAgICAgLyogQ2hh bm5lbCBudW1iZXIgKi8KLSAgICAgICAgICAgICAgIF9DTU5VTSwgICAgICAgICAgICAgICAgICAv KiBmY29kZSAqLwotICAgICAgICAgICAgICAgIkNoYW5uZWwiLAotICAgICAgICAgICAgICAgIiIs ICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICIiLCAg ICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAg ICAgMTAsICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiByYWRp eCAqLwotICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51 bWVyaWMgZGF0YSAyOiAwICovCi0gICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAg ICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAgTlVMTCwgICAgICAg ICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgICAgIE5VTEwgICAg ICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICAg ICApOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAg ICAgLyogUGFyc2Ugc29tZXRoaW5nICovCi0gICAgICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAg ICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9D aGFubmVsIG51bWJlciByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAtOTsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTU5VTSkgLyogQ2hhbm5l bCBudW1iZXIgKi8KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbHNlIGlmIChj bXJlc3VsdC5mY29kZSA9PSBfQ01LRVkpIHsgLyogU3dpdGNoICovCi0gICAgICAgICAgICAgICAg Y2hhciBjOwotICAgICAgICAgICAgICAgIGMgPSBjbWdicmsoKTsKLSAgICAgICAgICAgICAgICBp ZiAoKGdldHZhbCA9Ci0gICAgICAgICAgICAgICAgICAgICAoYyA9PSAnOicgfHwgYyA9PSAnPScp KSAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgaWYgKCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotICAgICAgICAgICAg ICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0g ICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewotICAgICAgICAgICAgICAgICAg Y2FzZSBXUl9MSU5FOgotICAgICAgICAgICAgICAgICAgICBjaGFyZmxhZyA9IDA7Ci0gICAgICAg ICAgICAgICAgICAgIHNpemVmbGFnID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcnNpemUgPSAw OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgV1Jf Q0hBUjoKLSAgICAgICAgICAgICAgICAgICAgcnNpemUgPSAxOwotICAgICAgICAgICAgICAgICAg ICBjaGFyZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHNpemVmbGFnID0gMTsKLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFdSX1NJWkU6Ci0g ICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtbnVtKCJCeXRlcyIsIiIsMTAsJnJzaXplLCB4 eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9OdW1iZXIgcmVxdWlyZWRcbiIp OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAg ICAgICAgICAgfQotCQkgICAgaWYgKHJzaXplID4gTElOQlVGU0laKSB7Ci0JCQlwcmludGYoIj9N YXhpbXVtIEZSRUFEL0ZXUklURSBzaXplIGlzICVkXG4iLExJTkJVRlNJWik7Ci0JCQlyc2l6ZSA9 IDA7Ci0JCQlyZXR1cm4oLTkpOwotCQkgICAgfQotICAgICAgICAgICAgICAgICAgICBjaGFyZmxh ZyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHNpemVmbGFnID0gMTsKLSAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFdSX1NUUkk6Ci0gICAgICAgICAg ICAgICAgICAgIHJzaXplID0gMTsKLSAgICAgICAgICAgICAgICAgICAgY2hhcmZsYWcgPSAwOwot ICAgICAgICAgICAgICAgICAgICBzaXplZmxhZyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBXUl9MUEFEOgotICAgICAgICAgICAgICAgICAg Y2FzZSBXUl9SUEFEOgotICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbW51bSgiTnVtZXJp YyBBU0NJSSBjaGFyYWN0ZXIgdmFsdWUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiMzIiLDEwLCZwYWQsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAg IHJldHVybih4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNtcmVzdWx0Lm5yZXN1bHQgPT0g V1JfTFBBRCkKLSAgICAgICAgICAgICAgICAgICAgICB3cl9scGFkID0gMTsKLSAgICAgICAgICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgIHdyX3JwYWQgPSAxOwotICAgICAg ICAgICAgICAgICAgICBicmVhazsKLQkJICBjYXNlIFJEX1RSSU06Ci0JCSAgICByZF90cmltID0g MTsKLQkJICAgIGJyZWFrOwotCQkgIGNhc2UgUkRfVU5UQToKLQkJICAgIHJkX3VudGFiID0gMTsK LQkJICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJGSUxFIFJFQUQgcnNpemUgMiIsIiIscnNpemUpOwotICAgICAgICAgICAgfSBlbHNlCi0g ICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0gd2hpbGUKLSAgICAgICAgICAoY21y ZXN1bHQuZmNvZGUgPT0gX0NNS0VZKTsKLQotICAgICAgICBuID0gY21yZXN1bHQubnJlc3VsdDsg ICAgICAgICAgIC8qIENoYW5uZWwgKi8KLSAgICAgICAgZGVidWcoRjEwMSwiRklMRSBSRUFEL1dS SVRFIGNoYW5uZWwiLCIiLG4pOwotCi0gICAgICAgIGlmIChjeCA9PSBGSUxfV1JJKSB7ICAgICAg ICAgICAgLyogV1JJVEUgKi8KLSAgICAgICAgICAgIGludCBsZW4gPSAwOwotICAgICAgICAgICAg aWYgKCh4ID0gY210eHQoIlRleHQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAg ICByZXR1cm4oeCk7Ci0JICAgIGlmIChuID09IC05KSByZXR1cm4oc3VjY2VzcyA9IDApOwotCSAg ICBpZiAobiA9PSAtOCkgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgICAgICAgY2tzdHJu Y3B5KGxpbmUscyxMSU5CVUZTSVopOyAvKiBNYWtlIGEgc2FmZSBjb3B5ICovCi0gICAgICAgICAg ICBzID0gbGluZTsKLSAgICAgICAgICAgIHMgPSBicnN0cmlwKHMpOyAgICAgICAgICAgICAvKiBT dHJpcCBicmFjZXMgKi8KLSAgICAgICAgICAgIGlmIChjaGFyZmxhZykgeyAgICAgICAgICAgICAv KiBXcml0ZSBvbmUgY2hhciAqLwotICAgICAgICAgICAgICAgIGxlbiA9IDE7ICAgICAgICAgICAg ICAgIC8qIFNvIGxlbmd0aCA9IDEgKi8KLSAgICAgICAgICAgICAgICByc2l6ZSA9IDE7ICAgICAg ICAgICAgICAvKiBEb24ndCBzdXBwbHkgdGVybWluYXRvciAqLwotICAgICAgICAgICAgfSBlbHNl IGlmICghc2l6ZWZsYWcpIHsgICAgIC8qIFdyaXRlIGEgc3RyaW5nICovCi0gICAgICAgICAgICAg ICAgbGVuID0gLTE7ICAgICAgICAgICAgICAgLyogU28gbGVuZ3RoIGlzIHVuc3BlY2lmaWVkICov Ci0gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgYSBibG9j ayBvZiBnaXZlbiBzaXplICovCi0gICAgICAgICAgICAgICAgaW50IGksIGssIHh4OwotICAgICAg ICAgICAgICAgIGlmIChyc2l6ZSA+IFRNUEJVRlNJWikgewotICAgICAgICAgICAgICAgICAgICB6 X2Vycm9yID0gRlhfT0ZMOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9CdWZmZXIgb3Zl cmZsb3dcbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBsZW4gPSByc2l6ZTsgICAgICAgICAgICAvKiByc2l6ZSBp cyByZWFsbHkgbGVuZ3RoICovCi0gICAgICAgICAgICAgICAgcnNpemUgPSAxOyAgICAgICAgICAg ICAgLyogRG9uJ3Qgc3VwcGx5IGEgdGVybWluYXRvciAqLwotICAgICAgICAgICAgICAgIHh4ID0g c3RybGVuKHMpOyAgICAgICAgIC8qIFNpemUgb2YgZ2l2ZW4gc3RyaW5nICovCi0gICAgICAgICAg ICAgICAgaWYgKHh4ID49IGxlbikgeyAgICAgICAgLyogQmlnZ2VyIG9yIGVxdWFsICovCi0gICAg ICAgICAgICAgICAgICAgIHNbbGVuXSA9IE5VTDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KHdyX2xwYWQpIHsgICAvKiBTbWFsbGVyLCBsZWZ0LXBhZGRpbmcgcmVxdWVzdGVkICovCi0gICAg ICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW4gLSB4eDsgaSsrKSAvKiBNdXN0IG1h a2UgYSBjb3B5ICovCi0gICAgICAgICAgICAgICAgICAgICAgdG1wYnVmW2ldID0gcGFkOwotICAg ICAgICAgICAgICAgICAgICBja3N0cm5jcHkodG1wYnVmK2kscyxUTVBCVUZTSVotaSk7Ci0gICAg ICAgICAgICAgICAgICAgIHRtcGJ1ZltsZW5dID0gTlVMOwotICAgICAgICAgICAgICAgICAgICBz ID0gdG1wYnVmOyAgICAgICAgIC8qIFJlZGlyZWN0IHdyaXRlIHNvdXJjZSAqLwotICAgICAgICAg ICAgICAgIH0gZWxzZSBpZiAod3JfcnBhZCkgeyAgIC8qIFNtYWxsZXIgd2l0aCByaWdodC1wYWRk aW5nICovCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHh4OyBpIDwgbGVuOyBpKyspCi0g ICAgICAgICAgICAgICAgICAgICAgc1tpXSA9IHBhZDsKLSAgICAgICAgICAgICAgICAgICAgc1ts ZW5dID0gTlVMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGlmICgocmMgPSB6X291dChuLHMsbGVuLHJzaXplKSkgPCAwKSB7IC8qIFRyeSB0byB3cml0ZSAq LwotICAgICAgICAgICAgICAgIHByaW50ZigiP0NoYW5uZWwgJWQgV1JJVEUgZXJyb3I6ICVzXG4i LG4sY2tmZXJyb3IocmMpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAg ICAgfQotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZJTF9SRUEg UkVBRCAqLwotICAgICAgICAgICAgY29uZmlybWVkID0gMDsKLSAgICAgICAgICAgIHZuYW1idWZb MF0gPSBOVUw7Ci0gICAgICAgICAgICB4ID0gY21mbGQoIlZhcmlhYmxlIG5hbWUiLCIiLCZzLE5V TEwpOwotICAgICAgICAgICAgZGVidWcoRjExMSwiRklMRSBSRUFEIGNtZmxkIixzLHgpOwotICAg ICAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gLTMgfHwgISpz KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg ICAgICAgICAgICAgICAgICBjb25maXJtZWQrKzsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAg ICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNr c3RybmNweSh2bmFtYnVmLHMsVk5BTUwpOwotICAgICAgICAgICAgZGVidWcoRjExMSwiRklMRSBS RUFEIHZuYW1idWYiLHZuYW1idWYsY29uZmlybWVkKTsKLSAgICAgICAgICAgIGlmICh2bmFtYnVm WzBdKSB7ICAgICAgICAgICAvKiBWYXJpYWJsZSBuYW1lIGdpdmVuLCBjaGVjayBpdCAqLwotICAg ICAgICAgICAgICAgIGlmICghY29uZmlybWVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBj bWNmbSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoeCA8IDApCi0gICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg ICAgICAgICAgY29uZmlybWVkKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IHZucCA9IHZuYW1idWY7Ci0gICAgICAgICAgICAgICAgaWYgKHZuYW1idWZbMF0gPT0gQ01EUSAm JgotICAgICAgICAgICAgICAgICAgICAodm5hbWJ1ZlsxXSA9PSAnJScgfHwgdm5hbWJ1ZlsxXSA9 PSAnJicpKQotICAgICAgICAgICAgICAgICAgdm5wKys7Ci0gICAgICAgICAgICAgICAgeSA9IDA7 Ci0gICAgICAgICAgICAgICAgaWYgKCp2bnAgPT0gJyUnIHx8ICp2bnAgPT0gJyYnKSB7Ci0gICAg ICAgICAgICAgICAgICAgIGlmICgoeSA9IHBhcnNldmFyKHZucCwmeCwmZHVtbXkpKSA8IDApIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1N5bnRheCBlcnJvciBpbiB2YXJpYWJs ZSBuYW1lXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTExLCJGSUxFIFJFQUQgdmFyaWFibGUiLHZuYW1idWYsY29uZmlybWVkKTsK LQotICAgICAgICAgICAgaWYgKCFjb25maXJtZWQpCi0gICAgICAgICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0KLQkgICAgaWYgKG4gPT0g LTkpIHJldHVybihzdWNjZXNzID0gMCk7Ci0JICAgIGlmIChuID09IC04KSByZXR1cm4oc3VjY2Vz cyA9IDEpOwotCi0gICAgICAgICAgICBsaW5lWzBdID0gTlVMOyAgICAgICAgICAgICAgLyogQ2xl YXIgZGVzdGluYXRpb24gYnVmZmVyICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgaWYg KHJzaXplID49IExJTkJVRlNJWikgICAgIC8qIERvbid0IG92ZXJydW4gaXQgKi8KLSAgICAgICAg ICAgICAgcnNpemUgPSBMSU5CVUZTSVogLSAxOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQotICAg ICAgICAgICAgaWYgKHJzaXplID09IDApIHsJCS8qIFJlYWQgYSBsaW5lICovCi0JCXJjID0gel9p bihuLGxpbmUsTElOQlVGU0laLExJTkJVRlNJWi0xLDApOwotICAgICAgICAgICAgfSBlbHNlIHsK LQkJcmMgPSB6X2luKG4sbGluZSxMSU5CVUZTSVoscnNpemUsMSk7IC8qIFJlYWQgYSBibG9jayAq LwotCSAgICB9Ci0gICAgICAgICAgICBpZiAocmMgPCAwKSB7ICAgICAgICAgICAgICAgLyogRXJy b3IuLi4gKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJGSUxFIFJFQUQgZXJyb3IiLCIi LHJjKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJGSUxFIFJFQUQgZXJybm8iLCIiLGVy cm5vKTsKLSAgICAgICAgICAgICAgICBpZiAocmMgPT0gRlhfRU9GKSB7ICAgICAvKiBFT0YgLSBm YWlsIGJ1dCBubyBlcnJvciBtZXNzYWdlICovCi0gICAgICAgICAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgLyog T3RoZXIgZXJyb3IgLSBmYWlsIGFuZCBwcmludCBtc2cgKi8KLSAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCI/UkVBRCBlcnJvcjogJXNcbiIsY2tmZXJyb3IocmMpKTsKLSAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0JICAg IGlmIChyc2l6ZSA9PSAwKSB7CQkvKiBGUkVBRCAvTElORSBwb3N0cHJvY2Vzc2luZyAqLwotCQlp ZiAocmRfdHJpbSkgewkJLyogVHJpbSAqLwotCQkgICAgaW50IGksIGs7Ci0JCSAgICBrID0gc3Ry bGVuKGxpbmUpOwotCQkgICAgaWYgKGsgPiAwKSB7Ci0JCQlmb3IgKGkgPSBrLTE7IGkgPiAwOyBp LS0pIHsKLQkJCSAgICBpZiAobGluZVtpXSA9PSBTUCB8fCBsaW5lW2ldID09ICdcdCcpCi0JCQkg ICAgICBsaW5lW2ldID0gTlVMOwotCQkJICAgIGVsc2UKLQkJCSAgICAgIGJyZWFrOwotCQkJfQot CQkgICAgfQotCQl9Ci0JCWlmIChyZF91bnRhYikgewkJLyogVW50YWJpZnkgKi8KLQkJICAgIGlm ICh1bnRhYmlmeShsaW5lLHRtcGJ1ZixUTVBCVUZTSVopID4gLTEpCi0JCSAgICAgIGNrc3RybmNw eShsaW5lLHRtcGJ1ZixMSU5CVUZTSVopOwotCQl9Ci0JICAgIH0KLSAgICAgICAgICAgIGRlYnVn KEYxMTAsIkZJTEUgUkVBRCBkYXRhIixsaW5lLDApOwotICAgICAgICAgICAgaWYgKHZuYW1idWZb MF0pICAgICAgICAgICAgIC8qIFJlYWQgT0sgLSBJZiB2YXJpYWJsZSBuYW1lIGdpdmVuICovCi0g ICAgICAgICAgICAgIGFkZG1hYyh2bmFtYnVmLGxpbmUpOyAgICAgLyogQXNzaWduIHJlc3VsdCB0 byB2YXJpYWJsZSAqLwotICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIC8q IG90aGVyd2lzZSAqLwotICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLGxpbmUpOyAgICAgIC8q IGp1c3QgcHJpbnQgaXQgKi8KLSAgICAgICAgfQotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEp OwotCi0gICAgICBjYXNlIEZJTF9TRUU6ICAgICAgICAgICAgICAgICAgICAgLyogU0VFSyAqLwot ICAgICAgY2FzZSBGSUxfQ09VOiAgICAgICAgICAgICAgICAgICAgIC8qIENPVU5UICovCi0gICAg ICAgIHJzaXplID0gUkRfQ0hBUjsgICAgICAgICAgICAgICAgLyogRGVmYXVsdHMgdG8gL0JZVEUg Ki8KLSAgICAgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAvKiBTd2l0Y2hlcyAq LwotICAgICAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0g ICAgICAgICAgICAgICAiQ2hhbm5lbCBvciBzd2l0Y2giLCAgICAgLyogaGxwbXNnICovCi0gICAg ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAg ICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICov Ci0gICAgICAgICAgICAgICAoKGN4ID09IEZJTF9TRUUpID8gbmZza3N3dGFiIDogbmZjb3N3dGFi KSwKLSAgICAgICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0gICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAg ICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAgKChjeCA9 PSBGSUxfU0VFKSA/IGZza3N3dGFiIDogZmNvc3d0YWIpLAotICAgICAgICAgICAgICAgJm51ICAg ICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAg ICAgICk7Ci0gICAgICAgIGNtZmRiaSgmbnUsICAgICAgICAgICAgICAgICAgICAgLyogQ2hhbm5l bCBudW1iZXIgKi8KLSAgICAgICAgICAgICAgIF9DTU5VTSwgICAgICAgICAgICAgICAgICAvKiBm Y29kZSAqLwotICAgICAgICAgICAgICAgIkNoYW5uZWwiLAotICAgICAgICAgICAgICAgIiIsICAg ICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAgICAg MTAsICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiByYWRpeCAq LwotICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVy aWMgZGF0YSAyOiAwICovCi0gICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAg LyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAg ICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgICAgIE5VTEwgICAgICAg ICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICAgICAp OwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAg LyogUGFyc2Ugc29tZXRoaW5nICovCi0gICAgICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAg ICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9DaGFu bmVsIG51bWJlciByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAtOTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTU5VTSkgLyogQ2hhbm5lbCBu dW1iZXIgKi8KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbHNlIGlmIChjbXJl c3VsdC5mY29kZSA9PSBfQ01LRVkpIHsgLyogU3dpdGNoICovCi0gICAgICAgICAgICAgICAgY2hh ciBjOwotICAgICAgICAgICAgICAgIGMgPSBjbWdicmsoKTsKLSAgICAgICAgICAgICAgICBpZiAo KGdldHZhbCA9Ci0gICAgICAgICAgICAgICAgICAgICAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAm JiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYo Ij9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg aWYgKGN4ID09IEZJTF9TRUUpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjbXJlc3Vs dC5ucmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBTRUVfUkVMOiByZWxhdGl2 ZSA9IDE7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU0VFX0FCUzogcmVsYXRp dmUgPSAwOyBicmVhazsKLQkJICAgICAgY2FzZSBTRUVfRklORDogewotCQkJICBpZiAoZ2V0dmFs KSB7Ci0JCQkgICAgICB5ID0gY21mbGQoInN0cmluZyBvciBwYXR0ZXJuIiwiIiwmcyx4eHN0cmlu Zyk7Ci0JCQkgICAgICBpZiAoeSA8IDApCi0JCQkJcmV0dXJuKHkpOwotCQkJICAgICAgbWFrZXN0 cigmc2Vla190YXJnZXQsYnJzdHJpcChzKSk7Ci0JCQkgICAgICBicmVhazsKLQkJCSAgfQotCQkg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcnNpemUgPSBjbXJlc3VsdC5u cmVzdWx0OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm IChjeCA9PSBGSUxfQ09VKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY21yZXN1bHQu bnJlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09VX0xJUzogbGlzdGluZyA9 IDE7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09VX05PTDogbGlzdGluZyA9 IDA7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJzaXplID0gY21yZXN1 bHQubnJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZQotICAgICAgICAgIChjbXJlc3VsdC5mY29kZSA9 PSBfQ01LRVkpOwotCi0gICAgICAgIG4gPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgICAgICAgLyog Q2hhbm5lbCAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJGSUxFIFNFRUsvQ09VTlQgY2hhbm5lbCIs IiIsbik7Ci0gICAgICAgIGlmIChjeCA9PSBGSUxfQ09VKSB7Ci0gICAgICAgICAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLQkgICAgaWYgKG4gPT0g LTkpIHJldHVybihzdWNjZXNzID0gMCk7Ci0JICAgIGlmIChuID09IC04KSByZXR1cm4oc3VjY2Vz cyA9IDEpOwotCi0gICAgICAgICAgICB6X2ZpbGNvdW50ID0gel9jb3VudChuLHJzaXplKTsKLSAg ICAgICAgICAgIGlmICh6X2ZpbGNvdW50IDwgMCkgewotICAgICAgICAgICAgICAgIHJjID0gel9m aWxjb3VudDsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9DT1VOVCBlcnJvcjogJXNcbiIsY2tm ZXJyb3IocmMpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgaWYgKGxpc3RpbmcgPCAwKQotICAgICAgICAgICAgICBsaXN0aW5nID0gIXhj bWRzcmM7Ci0gICAgICAgICAgICBpZiAobGlzdGluZykKLSAgICAgICAgICAgICAgcHJpbnRmKCIg JWxkICVzJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICB6X2ZpbGNvdW50LAotICAgICAgICAg ICAgICAgICAgICAgKChyc2l6ZSA9PSBSRF9DSEFSKSA/ICJieXRlIiA6ICJsaW5lIiksCi0gICAg ICAgICAgICAgICAgICAgICAoKHpfZmlsY291bnQgPT0gMUwpID8gIiIgOiAicyIpCi0gICAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAoel9maWxjb3Vu dCA+IC0xKSA/IDEgOiAwKTsKLSAgICAgICAgfQotCW0gPSAocnNpemUgPT0gUkRfQ0hBUikgPwot CSAgICAiTnVtYmVyIG9mIGJ5dGVzO1xuIG9yIGtleXdvcmQiIDoKLQkgICAgIk51bWJlciBvZiBs aW5lcztcbiBvciBrZXl3b3JkIjsKLSAgICAgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAg ICAgICAvKiBTRUVLIHN5bWJvbGljIHRhcmdldHMgKEVPRikgKi8KLSAgICAgICAgICAgICAgIF9D TUtFWSwgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAgICAgbSwKLSAg ICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAg IC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgICAgICBuZnNla3d0YWIsICAgICAg ICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRhYmxlIHNpemUgKi8KLSAgICAgICAg ICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjog NCA9IGNtc3dpICovCi0gICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgLyog UHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAgZnNla3d0YWIsICAgICAgICAg ICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgICAgICZudSAgICAgICAgICAg ICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICAgICApOwot ICAgICAgICBjbWZkYmkoJm51LCAgICAgICAgICAgICAgICAgICAgIC8qIEJ5dGUgb3IgbGluZSBu dW1iZXIgKi8KLSAgICAgICAgICAgICAgIF9DTU5VVywgICAgICAgICAgICAgICAgICAvKiBmY29k ZSAqLwotICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAg ICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgICAgICAxMCwgICAgICAg ICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHJhZGl4ICovCi0gICAgICAg ICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6 IDAgKi8KLSAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAvKiBQcm9jZXNz aW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAg LyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAg ICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAgICAgICk7Ci0gICAgICAg IHggPSBjbWZkYigmc3cpOyAgICAgICAgICAgICAgICAgLyogUGFyc2Ugc29tZXRoaW5nICovCi0g ICAgICAgIGlmICh4IDwgMCkgewotICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAg ICAgICAgICBwcmludGYoIj9DaGFubmVsIG51bWJlciBvciBFT0YgcmVxdWlyZWRcbiIpOwotICAg ICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNTlVXKSB7Ci0g ICAgICAgICAgICB6ID0gY21yZXN1bHQud3Jlc3VsdDsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAs IkZJTEUgU0VFSyBhdG1idWYiLGF0bWJ1ZiwwKTsKLSAgICAgICAgICAgIGlmIChyZWxhdGl2ZSA8 IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoY3ggPT0gRklMX1NFRSAmJiAoYXRtYnVmWzBdID09 ICcrJyB8fCBhdG1idWZbMF0gPT0gJy0nKSkKLSAgICAgICAgICAgICAgICAgIHJlbGF0aXZlID0g MTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICByZWxhdGl2ZSA9IDA7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NN S0VZKSB7Ci0gICAgICAgICAgICBlb2ZmbGcgPSBjbXJlc3VsdC5ucmVzdWx0OwotICAgICAgICAg ICAgcmVsYXRpdmUgPSAwOwotICAgICAgICAgICAgeSA9IDAgLSBlb2ZmbGc7Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLQlp ZiAobiA9PSAtOSkgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQlpZiAobiA9PSAtOCkgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKLSAgICAgICAgeSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZWN5Y2xlIHRoaXMgKi8KLSAgICAgICAgel9mbHVzaChuKTsKLSAgICAgICAgZGVidWcoRjEwMSwi RklMRSBTRUVLIHJlbGF0aXZlIiwiIixyZWxhdGl2ZSk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIkZJ TEUgU0VFSyByc2l6ZSIsIiIscnNpemUpOwotCi0gICAgICAgIGlmIChyc2l6ZSA9PSBSRF9DSEFS KSB7ICAgICAgICAgLyogU2VlayB0byBieXRlIHBvc2l0aW9uICovCi0gICAgICAgICAgICBpZiAo cmVsYXRpdmUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgQ0tfT0ZGX1QgcG9zOwotICAgICAgICAg ICAgICAgIHBvcyA9IHpfZ2V0cG9zKG4pOwotICAgICAgICAgICAgICAgIGlmIChwb3MgPCAoQ0tf T0ZGX1QpMCkgewotICAgICAgICAgICAgICAgICAgICByYyA9IHBvczsKLSAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCI/UmVsYXRpdmUgU0VFSyBmYWlsZWQ6ICVzXG4iLGNrZmVycm9yKHJjKSk7 Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgIHogKz0gcG9zOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICBpZiAoeiA8IDAgJiYgIWVvZmZsZykgeyAvKiBOZWdhdGl2ZSBhcmcgYnV0IG5vdCByZWxh dGl2ZSAqLwotICAgICAgICAgICAgICAgICAgICB5ID0gMDsgICAgICAgICAgICAgIC8qIFJlbWVt YmVyIHRoaXMgd2FzIGJhZCAqLwotICAgICAgICAgICAgICAgICAgICB6ID0gMDsgICAgICAgICAg ICAgIC8qIGJ1dCBzdWJzdGl0dXRlIDAgKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJGSUxFIFNFRUsgL0NIQVIgeiIsIiIseik7Ci0g ICAgICAgICAgICBpZiAoeiA8IDAgJiYgIWVvZmZsZykgewotICAgICAgICAgICAgICAgIHpfZXJy b3IgPSBGWF9STkc7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGlmICgocmMgPSB6X3NlZWsobix6KSkgPCAwKSB7Ci0gICAg ICAgICAgICAgICAgaWYgKHJjID09IEZYX0VPRikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAg ICAgICAgICAgICBwcmludGYoIj9TRUVLIC9CWVRFIGZhaWxlZCAtIENoYW5uZWwgJWQ6ICVzXG4i LG4sY2tmZXJyb3IocmMpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAg ICAgfQotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlZWsgdG8g bGluZSAqLwotICAgICAgICAgICAgaWYgKHJlbGF0aXZlID4gMCkgewotICAgICAgICAgICAgICAg IENLX09GRl9UIHBvczsKLSAgICAgICAgICAgICAgICBwb3MgPSB6X2dldGxpbmUobik7Ci0gICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiRklMRSBTRUVLIC9MSU5FIHBvcyIsIiIscG9zKTsKLSAg ICAgICAgICAgICAgICBpZiAocG9zIDwgMCkgewotICAgICAgICAgICAgICAgICAgICByYyA9IHBv czsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/UmVsYXRpdmUgU0VFSyBmYWlsZWQ6ICVz XG4iLGNrZmVycm9yKHJjKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHogKz0gcG9zOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgZGVidWcoRjEwMSwiRklMRSBTRUVLIC9MSU5FIHoiLCIiLHopOwotICAgICAg ICAgICAgZGVidWcoRjEwMSwiRklMRSBTRUVLIC9MSU5FIGVvZmZsZyIsIiIsZW9mZmxnKTsKLSAg ICAgICAgICAgIGlmICh6IDwgMCAmJiAhZW9mZmxnKSB7Ci0gICAgICAgICAgICAgICAgel9lcnJv ciA9IEZYX1JORzsKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgaWYgKChyYyA9IHpfbGluZShuLHopKSA8IDApIHsKLSAgICAg ICAgICAgICAgICBpZiAocmMgPT0gRlhfRU9GKSByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAg ICAgICAgICAgIHByaW50ZigiP1NFRUsgL0xJTkUgZmFpbGVkIC0gQ2hhbm5lbCAlZDogJXNcbiIs bixja2ZlcnJvcihyYykpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLQkvKgotCSAgTm93LCBoYXZpbmcgc291Z2h0IHRvIHRoZSBkZXNpcmVk IHN0YXJ0aW5nIHNwb3QsIGlmIGEgL0ZJTkQ6Ci0JICB0YXJnZXQgd2FzIHNwZWNpZmllZCwgbG9v ayBmb3IgaXQgbm93LgotCSovCi0JaWYgKHNlZWtfdGFyZ2V0KSB7Ci0JICAgIGludCBmbGFnID0g MCwgaXNwYXQgPSAwLCBtYXRjaHJlc3VsdCA9IDA7Ci0JICAgIHdoaWxlICghZmxhZykgewotCQl5 ID0gel9pbihuLGxpbmUsTElOQlVGU0laLExJTkJVRlNJWi0xLDApOwotCQlpZiAoeSA8IDApIHsK LQkJICAgIHkgPSAwOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkJaWYgKGlzcGF0dGVybihzZWVrX3Rh cmdldCkpIHsKLQkJICAgIG1hdGNocmVzdWx0ID0gY2ttYXRjaChzZWVrX3RhcmdldCxsaW5lLGlu cGNhc1tjbWRsdmxdLDErNCk7Ci0JCX0gZWxzZSB7Ci0JCSAgICAvKiBUaGlzIGlzIGZhc3RlciAq LwotCQkgICAgbWF0Y2hyZXN1bHQgPSBja2luZGV4KHNlZWtfdGFyZ2V0LGxpbmUsMCwwLGlucGNh c1tjbWRsdmxdKTsKLQkJfQotCQlpZiAobWF0Y2hyZXN1bHQpIHsKLQkJICAgIGZsYWcgPSAxOwot CQkgICAgYnJlYWs7Ci0JCX0KLQkgICAgfQotCSAgICBpZiAoZmxhZykgewotCQlkZWJ1ZyhGMTEx LCJGU0VFSyBIQVZFIE1BVENIIixzZWVrX3RhcmdldCx6X2dldGxpbmUobikpOwotCQkvKiBCYWNr IHVwIHRvIGJlZ2lubmluZyBvZiBsaW5lIHdoZXJlIHRhcmdldCBmb3VuZCAqLwotCQlpZiAoKHkg PSB6X2xpbmUobix6X2dldGxpbmUobiktMSkpIDwgMCkgewotCQkgICAgaWYgKHJjID09IEZYX0VP RikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQkJICAgIHByaW50ZigiP1NFRUsgL0xJTkUgZmFpbGVk IC0gQ2hhbm5lbCAlZDogJXNcbiIsCi0JCQkgICBuLGNrZmVycm9yKHJjKSk7Ci0JCSAgICByZXR1 cm4oLTkpOwotCQl9Ci0JCWRlYnVnKEYxMDEsIkZTRUVLIExJTkUiLCIiLHkpOwotCSAgICB9Ci0J fQotICAgICAgICByZXR1cm4oc3VjY2VzcyA9ICh5IDwgMCkgPyAwIDogMSk7Ci0KLSAgICAgIGNh c2UgRklMX0xJUzogeyAgICAgICAgICAgICAgICAgICAvKiBMSVNUIG9wZW4gZmlsZXMgKi8KLSNp ZmRlZiBDS19UVEdXU0laCi0gICAgICAgICAgZXh0ZXJuIGludCBjbWRfcm93cywgY21kX2NvbHM7 Ci0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotICAgICAgICAgIGV4dGVybiBpbnQgeGFza21vcmU7 Ci0gICAgICAgICAgaW50IGksIHgsIG4gPSAwLCBwYWdpbmcgPSAwOwotICAgICAgICAgIGNoYXIg KiBzOwotCi0gICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgcmV0 dXJuKHgpOwotCi0jaWZkZWYgQ0tfVFRHV1NJWgotICAgICAgICAgIGlmIChjbWRfcm93cyA+IDAg JiYgY21kX2NvbHMgPiAwKQotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICAgICAgICAgIHBh Z2luZyA9IHhhc2ttb3JlOwotCi0gICAgICAgICAgcHJpbnRmKCJTeXN0ZW0gb3BlbiBmaWxlIGxp bWl0OiU1ZFxuIiwgel9vcGVubWF4KTsKLSAgICAgICAgICBwcmludGYoIk1heGltdW0gZm9yIEZJ TEUgT1BFTjogJTVkXG4iLCB6X21heGNoYW4pOwotICAgICAgICAgIHByaW50ZigiRmlsZXMgY3Vy cmVudGx5IG9wZW46ICAlNWRcblxuIiwgel9ub3Blbik7Ci0gICAgICAgICAgbiA9IDQ7Ci0gICAg ICAgICAgZm9yIChpID0gMDsgaSA8IHpfbWF4Y2hhbjsgaSsrKSB7Ci0gICAgICAgICAgICAgIHMg PSB6X2dldG5hbWUoaSk7ICAgICAgICAgLyogR290IG9uZT8gKi8KLSAgICAgICAgICAgICAgaWYg KHMpIHsgICAgICAgICAgICAgICAgICAvKiBZZXMgKi8KLSAgICAgICAgICAgICAgICAgIGNoYXIg bVs4XTsKLSAgICAgICAgICAgICAgICAgIG1bMF0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgICBw cmludGYoIiUyZC4gJXMiLGkscyk7IC8qIFByaW50IG5hbWUgKi8KLSAgICAgICAgICAgICAgICAg IG4rKzsgICAgICAgICAgICAgICAgICAgLyogQ291bnQgaXQgKi8KLSAgICAgICAgICAgICAgICAg IHggPSB6X2dldG1vZGUoaSk7ICAgICAgLyogR2V0IG1vZGVzICYgcHJpbnQgdGhlbSAqLwotICAg ICAgICAgICAgICAgICAgaWYgKHggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKHgg JiBGTV9SRUEpIGNrc3RybmNhdChtLCJSIiw4KTsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAo eCAmIEZNX1dSSSkgY2tzdHJuY2F0KG0sIlciLDgpOwotICAgICAgICAgICAgICAgICAgICAgIGlm ICh4ICYgRk1fQVBQKSBja3N0cm5jYXQobSwiQSIsOCk7Ci0gICAgICAgICAgICAgICAgICAgICAg aWYgKHggJiBGTV9CSU4pIGNrc3RybmNhdChtLCJCIiw4KTsKLSAgICAgICAgICAgICAgICAgICAg ICBpZiAobVswXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICglcykiLG0pOwot ICAgICAgICAgICAgICAgICAgICAgIGlmICh4ICYgRk1fRU9GKQotICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCIgW0VPRl0iKTsKLSAgICAgICAgICAgICAgICAgICAgICBlbHNlCQkvKiBB bmQgZmlsZSBwb3NpdGlvbiB0b28gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi ICVzIixja2ZzdG9hKHpfZ2V0cG9zKGkpKSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICBwcmludGYoIlxuIik7Ci0jaWZkZWYgQ0tfVFRHV1NJWgotICAgICAgICAgICAg ICAgICAgaWYgKHBhZ2luZyA+IDApIHsgICAgIC8qIFBhdXNlIGF0IGVuZCBvZiBzY3JlZW4gKi8K LSAgICAgICAgICAgICAgICAgICAgICBpZiAobiA+IGNtZF9yb3dzIC0gMykgewotICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG4gPSAwOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0gICAgICAgICAgICAgIH0KLSAg ICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLQotICAg ICAgY2FzZSBGSUxfRkxVOiAgICAgICAgICAgICAgICAgICAgIC8qIEZMVVNIICovCi0gICAgICAg IGlmICgoeCA9IGNtbnVtKCJDaGFubmVsIG51bWJlciIsIiIsMTAsJm4sIHh4c3RyaW5nKSkgPCAw KSB7Ci0gICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgIHByaW50Zigi P0NoYW5uZWwgbnVtYmVyIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICB4ID0gLTk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIH0KLSAgICAgICAg aWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLQlpZiAobiA9PSAt OSkgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQlpZiAobiA9PSAtOCkgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLSAgICAgICAgaWYgKChyYyA9IHpfZmx1c2gobikpIDwgMCkgewotICAgICAgICAgICAgcHJp bnRmKCI/RkxVU0ggZmFpbGVkIC0gQ2hhbm5lbCAlZDogJXNcbiIsbixja2ZlcnJvcihyYykpOwot ICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOwotCi0gICAgICBjYXNlIEZJTF9TVEE6ICAgICAgICAgICAgICAgICAgICAgLyogU1RB VFVTICovCi0JewotCSAgICBpbnQgaSwgaiwgazsJCS8qIFN1cHBseSBkZWZhdWx0IGlmIG9ubHkg b25lIG9wZW4gKi8KLQkgICAgcyA9ICIiOwotCSAgICBmb3IgKGsgPSAwLCBqID0gMCwgaSA9IDA7 IGkgPCB6X21heGNoYW47IGkrKykgewotCQlpZiAoel9maWxlKQotCQkgIGlmICh6X2ZpbGVbaV0p Ci0JCSAgICBpZiAoel9maWxlW2ldLT56X2ZwKSB7IGsrKzsgaiA9IGk7IH0KLQkgICAgfQotCSAg ICBpZiAoayA9PSAxKSBzID0gY2tpdG9hKGopOwotCX0KLSAgICAgICAgaWYgKCh4ID0gY21udW0o IkNoYW5uZWwgbnVtYmVyIixzLDEwLCZuLCB4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAg aWYgKHggPT0gLTMpIHsKLQkJaWYgKHpfbm9wZW4gPiAxKSB7Ci0JCSAgICBwcmludGYoIj8lZCBm aWxlcyBvcGVuIC0gcGxlYXNlIHN1cHBseSBjaGFubmVsIG51bWJlclxuIiwKLQkJCSAgIHpfbm9w ZW4pOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotICAgICAgICAgICAgfSBlbHNlCi0JICAgICAg cmV0dXJuKHgpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAg ICAgICAgICByZXR1cm4oeSk7Ci0JaWYgKCghel9maWxlIHx8IHpfbm9wZW4gPT0gMCkgJiYgeCA9 PSAtMykgewotCSAgICBwcmludGYoIk5vIGZpbGVzIG9wZW5cbiIpOwotCSAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOwotCX0KLSAgICAgICAgcCA9IGJsYW5rcyArIDM7ICAgICAgICAgICAgICAgICAv KiBUcmlja3kgZm9ybWF0dGluZy4uLiAqLwotICAgICAgICBpZiAobiA8IDEwMDApIHAtLTsKLSAg ICAgICAgaWYgKG4gPCAxMDApIHAtLTsKLSAgICAgICAgaWYgKG4gPCAxMCkgcC0tOwotICAgICAg ICBpZiAoKHJjID0gel9nZXRtb2RlKG4pKSA8IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiQ2hh bm5lbCAlZDolcyVzXG4iLG4scCxja2ZlcnJvcihyYykpOwotICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKLSAgICAgICAgfSBlbHNlIGlmICghcmMpIHsKLSAgICAgICAgICAgIHByaW50 ZigiQ2hhbm5lbCAlZDolc05vdCBvcGVuXG4iLG4scCk7Ci0gICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ0tfT0ZGX1QgeHg7Ci0g ICAgICAgICAgICBzID0gel9nZXRuYW1lKG4pOwotICAgICAgICAgICAgaWYgKCFzKSBzID0gIihu YW1lIHVua25vd24pIjsKLSAgICAgICAgICAgIHByaW50ZigiQ2hhbm5lbCAlZDolc09wZW5cbiIs bixwKTsKLSAgICAgICAgICAgIHByaW50ZigiIEZpbGU6ICAgICAgICAlc1xuIE1vZGVzOiAgICAg ICIscyk7Ci0gICAgICAgICAgICBpZiAocmMgJiBGTV9SRUEpIHByaW50ZigiIC9SRUFEIik7Ci0g ICAgICAgICAgICBpZiAocmMgJiBGTV9XUkkpIHByaW50ZigiIC9XUklURSIpOwotICAgICAgICAg ICAgaWYgKHJjICYgRk1fQVBQKSBwcmludGYoIiAvQVBQRU5EIik7Ci0gICAgICAgICAgICBpZiAo cmMgJiBGTV9CSU4pIHByaW50ZigiIC9CSU5BUlkiKTsKLSAgICAgICAgICAgIGlmIChyYyAmIEZN X0NNRCkgcHJpbnRmKCIgL0NPTU1BTkQiKTsKLSAgICAgICAgICAgIGlmIChyYyAmIEZNX0VPRikg cHJpbnRmKCIgW0VPRl0iKTsKLSAgICAgICAgICAgIHByaW50ZigiXG4gU2l6ZTogICAgICAgICVz XG4iLGNrZnN0b2Eoel9jb3VudChuLFJEX0NIQVIpKSk7Ci0gICAgICAgICAgICBwcmludGYoIiBB dCBieXRlOiAgICAgJXNcbiIsY2tmc3RvYSh6X2dldHBvcyhuKSkpOwotICAgICAgICAgICAgeHgg PSB6X2dldGxpbmUobik7Ci0gICAgICAgICAgICBpZiAoeHggPiAoQ0tfT0ZGX1QpLTEpCi0gICAg ICAgICAgICAgIHByaW50ZigiIEF0IGxpbmU6ICAgICAlc1xuIixja2ZzdG9hKHh4KSk7Ci0gICAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICB9Ci0gICAgICBkZWZhdWx0Ogot ICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLX0KLSNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLwot Ci0jaWZuZGVmIE5PU0VUS0VZCi0vKiBTYXZlIEtleSBtYXBzIGFuZCBpbiBPUy8yIE1vdXNlIG1h cHMgKi8KLWludAotc2F2a2V5cyhuYW1lLGRpc3ApIGNoYXIgKiBuYW1lOyBpbnQgZGlzcDsgewot ICAgIGNoYXIgKnRwOwotICAgIHN0YXRpYyBzdHJ1Y3QgZmlsaW5mbyB4eDsKLSAgICBpbnQgc2F2 ZmlsLCBpLCBqLCBrOwotICAgIGNoYXIgYnVmWzEwMjRdOwotCi0gICAgemNsb3NlKFpNRklMRSk7 Ci0KLSAgICBpZiAoZGlzcCkgewotICAgICAgICB4eC5icyA9IDA7IHh4LmNzID0gMDsgeHgucmwg PSAwOyB4eC5vcmcgPSAwOyB4eC5jYyA9IDA7Ci0gICAgICAgIHh4LnR5cCA9IDA7IHh4LmRzcCA9 IFhZRlpfQTsgeHgub3Nfc3BlY2lmaWMgPSAiIjsKLSAgICAgICAgeHgubGJsb3B0cyA9IDA7Ci0g ICAgICAgIHNhdmZpbCA9IHpvcGVubyhaTUZJTEUsbmFtZSxOVUxMLCZ4eCk7Ci0gICAgfSBlbHNl IHNhdmZpbCA9IHpvcGVubyhaTUZJTEUsbmFtZSxOVUxMLE5VTEwpOwotCi0gICAgaWYgKHNhdmZp bCkgewotI2lmZGVmIE9TMgotICAgICAgICB6dGltZSgmdHApOwotICAgICAgICB6c291dChaTUZJ TEUsICI7IEtlcm1pdCA5NSBTQVZFIEtFWU1BUCBmaWxlOiAiKTsKLSAgICAgICAgenNvdXRsKFpN RklMRSx0cCk7Ci0gICAgICAgIGlmIChtc2trZXlzKSB7Ci0gICAgICAgICAgICB6c291dGwoWk1G SUxFLAotICAgICAgICAgImlmIGVxIFwiXFx2KHByb2dyYW0pXCIgXCJDLUtlcm1pdFwiIHNldCBt c2tlcm1pdCBrZXljb2RlcyBvbiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgenNv dXRsKFpNRklMRSwKLSAgICAgICAgICJpZiBOT1QgZXEgXCJcXHYocHJvZ3JhbSlcIiBcIkMtS2Vy bWl0XCIgc3RvcCAxIEMtS2VybWl0IHJlcXVpcmVkLiIpOwotICAgICAgICAgICAgenNvdXRsKFpN RklMRSwic2V0IG1za2VybWl0IGtleWNvZGVzIG9mZiIpOwotICAgICAgICB9Ci0gICAgICAgIHpz b3V0bChaTUZJTEUsIiIpOwotI2Vsc2UgLyogT1MyICovCi0gICAgICAgIHp0aW1lKCZ0cCk7Ci0g ICAgICAgIHpzb3V0KFpNRklMRSwgIjsgQy1LZXJtaXQgU0FWRSBLRVlNQVAgZmlsZTogIik7Ci0g ICAgICAgIHpzb3V0bChaTUZJTEUsdHApOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgICAgIHpz b3V0bChaTUZJTEUsIjsgQ2xlYXIgcHJldmlvdXMga2V5Ym9hcmQgbWFwcGluZ3MgIik7Ci0gICAg ICAgIHpzb3V0bChaTUZJTEUsInNldCBrZXkgY2xlYXIiKTsKLSNpZmRlZiBPUzIKLSAgICAgICAg Zm9yIChrID0gMDsgayA8IG50dGtleTsgaysrKSB7Ci0gICAgICAgICAgICBpZiAoIXR0a2V5dGFi W2tdLmZsZ3MpIHsKLSAgICAgICAgICAgICAgICBja21ha21zZyhidWYsMTAyNCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAic2V0IHRlcm1pbmFsIGtleSAiLAotICAgICAgICAgICAgICAgICAg ICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiIGNsZWFy IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgICAgICB6c291dGwoWk1GSUxFLGJ1Zik7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgenNvdXRsKFpNRklMRSwiIik7 Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IEtNU0laRTsgaSsrKSB7Ci0gICAgICAgICAgICBp ZiAobWFjcm90YWJbaV0pIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKChjaGFy ICopbWFjcm90YWJbaV0pOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgIGNrbWFrbXNnKGJ1 ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAxMDI0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICJzZXQga2V5IFxcIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBja2l0b2EobXNra2V5 cyA/IGNrdG9tc2soaSkgOiBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiICIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0j ZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICBja21ha21zZyhidWYsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgMTAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAic2V0IGtleSBc XCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKGkpLAotICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYg LyogT1MyICovCi0gICAgICAgICAgICAgICAgenNvdXQoWk1GSUxFLGJ1Zik7Ci0KLSAgICAgICAg ICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAg Y2hhciBjaCA9IG1hY3JvdGFiW2ldW2pdOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPD0g U1AgfHwgY2ggPj0gREVMIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJy0nIHx8 IGNoID09ICcsJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoID09ICd7JyB8fCBjaCA9 PSAnfScgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnOycgfHwgY2ggPT0gJz8n IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJy4nIHx8IGNoID09ICdcJycgfHwK LSAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnXFwnIHx8IGNoID09ICcvJyB8fAotICAg ICAgICAgICAgICAgICAgICAgICAgIGNoID09ICcjJykgewotICAgICAgICAgICAgICAgICAgICAg ICAgY2ttYWttc2coYnVmLDEwMjQsIlxceyIsY2tpdG9hKChpbnQpY2gpLCJ9IixOVUxMKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHpzb3V0KFpNRklMRSxidWYpOwotICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coYnVmLDEwMjQs Y2tjdG9hKChjaGFyKWNoKSxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICB6c291dChaTUZJTEUsYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIH0KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICBja21ha21zZyhidWYsMTAyNCwiXHQ7 ICIsa2V5bmFtZShpKSxOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgIHpzb3V0bChaTUZJTEUs YnVmKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgenNvdXRsKFpNRklMRSwiIik7Ci0jZW5kaWYg LyogT1MyICovCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCBrZXltYXBbaV0gIT0gaSApIHsKLSNp Zm5kZWYgTk9LVkVSQlMKLSAgICAgICAgICAgICAgICBpZiAoSVNfS1ZFUkIoa2V5bWFwW2ldKSkg ewotICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbmt2ZXJiczsgaisrKQotICAg ICAgICAgICAgICAgICAgICAgIGlmIChrdmVyYnNbal0ua3d2YWwgPT0gKGtleW1hcFtpXSAmIH5G X0tWRVJCKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICBpZiAoaiAhPSBua3ZlcmJzKSB7Ci0jaWZkZWYgT1MyCi0jaWZkZWYgQ09NTUVOVAotICAg ICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICJzZXQga2V5IFxcJWQgXFxLJXNcdDsg JXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2trZXlzID8gY2t0b21zayhp KSA6IGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt2ZXJic1tqXS5rd2QsIGtl eW5hbWUoaSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbHNlCi0gICAg ICAgICAgICAgICAgICAgICAgICBja21ha3htc2coYnVmLCAgLyogMTIgc3RyaW5nIGFyZ3MgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDI0LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJzZXQga2V5IFxcIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBja2l0b2EobXNra2V5cyA/IGNrdG9tc2soaSkgOiBpKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiIFxcSyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAga3ZlcmJzW2pdLmt3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiXHQ7ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5bmFtZShpKSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgICAg ICAgICB6c291dGwoWk1GSUxFLGJ1Zik7Ci0jZWxzZQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAg ICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAic2V0IGtleSBcXCVkIFxcSyVzIiwgaSwga3Zl cmJzW2pdLmt3ZCk7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coYnVm LDEwMjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0IGtleSBcXCIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2l0b2EoaSksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiIFxcSyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBrdmVyYnNbal0ua3dkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHpzb3V0bChaTUZJ TEUsYnVmKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg fSBlbHNlCi0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLSAgICAgICAgICAgICAgICAgIHsKLSNpZmRl ZiBPUzIKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihidWYs ICJzZXQga2V5IFxcJWQgXFx7JWR9XHQ7ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1za2tleXMgPyBja3RvbXNrKGkpIDogaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGtleW1hcFtpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleW5hbWUoaSkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZWxzZQotICAgICAgICAgICAgICAg ICAgICAgIGNrbWFreG1zZyhidWYsICAgIC8qIDggc3RyaW5nIGFyZ3MgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgInNldCBrZXkgXFwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2l0b2Eo bXNra2V5cyA/IGNrdG9tc2soaSkgOiBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIiBcXHsiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2l0b2Eoa2V5bWFw W2ldKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn1cdDsgIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAga2V5bmFtZShpKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgICB6c291dGwoWk1GSUxFLGJ1Zik7Ci0jZWxz ZQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgInNl dCBrZXkgXFwlZCBcXHslZH0iLCBpLCBrZXltYXBbaV0pOwotI2Vsc2UKLSAgICAgICAgICAgICAg ICAgICAgICBja21ha3htc2coYnVmLDEwMjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgInNldCBrZXkgXFwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShp KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFxceyIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2tpdG9hKGtleW1hcFtpXSksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIn0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAg ICAgICAgICAgICAgICAgICB6c291dGwoWk1GSUxFLGJ1Zik7Ci0jZW5kaWYgLyogT1MyICovCi0g ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNpZmRlZiBPUzIK LSAgICAgICAgLyogT1MvMiBhbHNvIGhhcyB0aGUgU0VUIFRFUk1JTkFMIEtFWSA8dGVybXR5cGU+ IGRlZmluZXMgKi8KLSAgICAgICAgZm9yIChrID0gMDsgayA8IG50dGtleTsgaysrKSB7Ci0gICAg ICAgICAgICBleHRlcm4gc3RydWN0IGtleW5vZGUgKiB0dGtleW1hcFtdOwotICAgICAgICAgICAg c3RydWN0IGtleW5vZGUgKiBwbm9kZSA9IE5VTEw7Ci0KLSAgICAgICAgICAgIGlmICh0dGtleXRh YltrXS5mbGdzKSAgICAgICAvKiBEb24ndCBwcm9jZXNzIENNX0lOViBvciBDTV9BQlIgKi8KLSAg ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHpzb3V0bChaTUZJTEUsIiIpOwot ICAgICAgICAgICAgY2ttYWttc2coYnVmLDEwMjQsIjsgU0VUIFRFUk1JTkFMIEtFWSAiLHR0a2V5 dGFiW2tdLmt3ZCxOVUxMLE5VTEwpOwotICAgICAgICAgICAgenNvdXRsKFpNRklMRSxidWYpOwot Ci0gICAgICAgICAgICBmb3IgKHBub2RlID0gdHRrZXltYXBbdHRrZXl0YWJba10ua3d2YWxdOwot ICAgICAgICAgICAgICAgICBwbm9kZTsKLSAgICAgICAgICAgICAgICAgcG5vZGUgPSBwbm9kZS0+ bmV4dAotICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBub2Rl LT5kZWYudHlwZSkgewotICAgICAgICAgICAgICAgICAgY2FzZSBrZXk6Ci0jaWZkZWYgQ09NTUVO VAotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgInNldCB0ZXJtaW5hbCBrZXkgJXMg XFwlZCBcXHslZH1cdDsgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0a2V5dGFi W2tdLmt3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2trZXlzID8gY2t0b21zayhw bm9kZS0+a2V5KSA6IHBub2RlLT5rZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5v ZGUtPmRlZi5rZXkuc2NhbmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5bmFt ZShwbm9kZS0+a2V5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZWxzZQotICAg ICAgICAgICAgICAgICAgICBja21ha3htc2coYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXQgdGVybWluYWwg a2V5ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGtleXRhYltrXS5rd2QsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFxcIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNraXRvYShtc2trZXlzID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBja3RvbXNrKHBub2RlLT5rZXkpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwbm9kZS0+a2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg XFx7IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShwbm9kZS0+ZGVmLmtl eS5zY2FuY29kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifVx0OyAiLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5bmFtZShwbm9kZS0+a2V5KSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAg ICAgICB6c291dGwoWk1GSUxFLGJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgY2FzZSBrdmVyYjoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChqID0g MDsgaiA8IG5rdmVyYnM7IGorKykKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoa3ZlcmJzW2pd Lmt3dmFsID09IChwbm9kZS0+ZGVmLmt2ZXJiLmlkICYgfkZfS1ZFUkIpKQotICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChqICE9IG5rdmVyYnMp IHsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1Ziwg InNldCB0ZXJtaW5hbCBrZXkgJXMgXFwlZCBcXEslc1x0OyAlcyIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbXNra2V5cyA/IGNrdG9tc2socG5vZGUtPmtleSkgOiBwbm9kZS0+a2V5LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrdmVyYnNbal0ua3dkLCBrZXluYW1lKHBub2Rl LT5rZXkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZWxzZQotICAgICAg ICAgICAgICAgICAgICAgICAgY2ttYWt4bXNnKGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxMDI0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXQg dGVybWluYWwga2V5ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRrZXl0 YWJba10ua3dkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgXFwiLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShtc2trZXlzID8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2t0b21zayhwbm9kZS0+a2V5KSA6Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBub2RlLT5rZXkpLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgXFxLIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBrdmVyYnNbal0ua3dkLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJcdDsgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlu YW1lKHBub2RlLT5rZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEws TlVMTCxOVUxMLE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHpzb3V0bChaTUZJTEUs YnVmKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgIGNhc2UgbWFjcm86IHsKLSAgICAgICAgICAgICAgICAgICAgICBp bnQgbGVuID0gc3RybGVuKChjaGFyICopcG5vZGUtPmRlZi5tYWNyby5zdHJpbmcpOwotI2lmZGVm IENPTU1FTlQKLSAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1Ziwic2V0IHRlcm1pbmFs IGtleSAlcyBcXCVkICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGtleXRhYltr XS5rd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2trZXlzID8gY2t0b21zayhw bm9kZS0+a2V5KSA6IHBub2RlLT5rZXkpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICBj a21ha3htc2coYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldCB0ZXJtaW5hbCBrZXkgIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0dGtleXRhYltrXS5rd2QsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIiBcXCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tp dG9hKG1za2tleXMgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3Rv bXNrKHBub2RlLT5rZXkpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cG5vZGUtPmtleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgICAgICAgICAgICAgICAgIHpzb3V0KFpNRklMRSxidWYpOwotCi0gICAgICAgICAg ICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgY2ggPSBwbm9kZS0+ZGVmLm1hY3JvLnN0cmluZ1tqXTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGNoIDw9IFNQIHx8IGNoID49IERFTCB8fAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoID09ICctJyB8fCBjaCA9PSAnLCcgfHwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAneycgfHwgY2ggPT0gJ30nIHx8Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJzsnIHx8IGNoID09ICc/JyB8fAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoID09ICcuJyB8fCBjaCA9PSAnXCcnIHx8Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJ1xcJyB8fCBjaCA9PSAnLycgfHwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnIycpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNrbWFrbXNnKGJ1ZiwxMDI0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlxceyIsY2tpdG9hKChpbnQpY2gpLCJ9IixOVUxMKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHpzb3V0KFpNRklMRSxidWYpOwotICAgICAgICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tt YWttc2coYnVmLDEwMjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj a2N0b2EoKGNoYXIpY2gpLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHpzb3V0KFpNRklMRSxidWYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGJ1 ZiwxMDI0LCJcdDsgIixrZXluYW1lKHBub2RlLT5rZXkpLE5VTEwsTlVMTCk7Ci0gICAgICAgICAg ICAgICAgICAgICAgenNvdXRsKFpNRklMRSxidWYpOwotICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgY2FzZSBsaXRlcmFs OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbigoY2hhciAqKXBub2Rl LT5kZWYubGl0ZXJhbC5zdHJpbmcpOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgICAg ICAgICBzcHJpbnRmKGJ1Ziwic2V0IHRlcm1pbmFsIGtleSAlcyAvbGl0ZXJhbCBcXCVkICIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGtleXRhYltrXS5rd2QsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtc2trZXlzID8gY2t0b21zayhwbm9kZS0+a2V5KSA6IHBub2Rl LT5rZXkpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICBja21ha3htc2coYnVmLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgInNldCB0ZXJtaW5hbCBrZXkgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0dGtleXRhYltrXS5rd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAv bGl0ZXJhbCBcXCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKG1za2tl eXMgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3RvbXNrKHBub2Rl LT5rZXkpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5vZGUtPmtl eSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgICB6c291dChaTUZJTEUsYnVm KTsKLQotICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW47IGorKykgewot ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNoID0gcG5vZGUtPmRlZi5saXRlcmFsLnN0 cmluZ1tqXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoIDw9IFNQIHx8IGNoID49 IERFTCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID09ICctJyB8fCBjaCA9 PSAnLCcgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAneycgfHwgY2gg PT0gJ30nIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJzsnIHx8IGNo ID09ICc/JyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID09ICcuJyB8fCBj aCA9PSAnXCcnIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJ1xcJyB8 fCBjaCA9PSAnLycgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnIycp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGJ1ZiwxMDI0LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxceyIsY2tpdG9hKChpbnQpY2gp LCJ9IixOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpzb3V0KFpNRklMRSxi dWYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2ttYWttc2coYnVmLDEwMjQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBja2N0b2EoKGNoYXIpY2gpLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHpzb3V0KFpNRklMRSxidWYpOwotICAgICAgICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgICAgIGNrbWFrbXNnKGJ1ZiwxMDI0LCJcdDsgIixrZXluYW1lKHBub2RlLT5rZXkpLE5VTEws TlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgenNvdXRsKFpNRklMRSxidWYpOwotICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgY2FzZSBlc2M6Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgICAgICBzcHJp bnRmKGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgInNldCB0ZXJtaW5hbCBrZXkgJXMgL2xp dGVyYWwgXFwlZCBcXHslZH1cXHslZH1cdDsgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHR0a2V5dGFiW2tdLmt3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2trZXlz ID8gY2t0b21zayhwbm9kZS0+a2V5KSA6IHBub2RlLT5rZXksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgSVNERzIwMCh0dGtleXRhYltrXS5rd3ZhbCkgPyAzMCA6IDI3LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBub2RlLT5kZWYuZXNjLmtleSAmIH5GX0VTQywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBrZXluYW1lKHBub2RlLT5rZXkpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIGNrbWFreG1zZyhidWYs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDI0LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgInNldCB0ZXJtaW5hbCBrZXkgIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg L2xpdGVyYWwgXFwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKG1za2tl eXMgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrdG9tc2socG5vZGUt PmtleSkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBub2RlLT5rZXkp LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBcXHsiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2tpdG9hKElTREcyMDAodHRrZXl0YWJba10ua3d2YWwpID8gMzAgOiAy NyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifVxceyIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBja2l0b2EocG5vZGUtPmRlZi5lc2Mua2V5ICYgfkZfRVNDKSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9XHQ7ICIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBrZXluYW1lKHBub2RlLT5rZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCxOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgenNvdXRsKFpNRklMRSxidWYpOwot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgY3NpOgot I2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsCi0gICAgICAg ICAgICAgICAgICAgICAgICJzZXQgdGVybWluYWwga2V5ICVzIC9saXRlcmFsIFxcJWQgXFx7Mjd9 W1xceyVkfVx0OyAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRrZXl0YWJba10u a3dkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1za2tleXMgPyBja3RvbXNrKHBub2Rl LT5rZXkpIDogcG5vZGUtPmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbm9kZS0+ ZGVmLmNzaS5rZXkgJiB+Rl9DU0ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5bmFt ZShwbm9kZS0+a2V5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZWxzZQotICAg ICAgICAgICAgICAgICAgICBja21ha3htc2coYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXQgdGVybWluYWwg a2V5ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGtleXRhYltrXS5rd2QsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC9saXRlcmFsIFxcIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNraXRvYShtc2trZXlzID8KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBja3RvbXNrKHBub2RlLT5rZXkpIDoKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwbm9kZS0+a2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIgXFx7Mjd9W1xceyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2l0 b2EocG5vZGUtPmRlZi5jc2kua2V5ICYgfkZfQ1NJKSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJ9XHQ7ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXluYW1lKHBu b2RlLT5rZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEws TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgICAgICAgICAgICAgIHpzb3V0bChaTUZJTEUsYnVmKTsKLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgICAgICB6c291dGwoWk1GSUxFLCIiKTsKLSAg ICAgICAgenNvdXRsKFpNRklMRSwiOyBFbmQiKTsKLSAgICAgICAgemNsb3NlKFpNRklMRSk7Ci0g ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAwKTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLQotI2RlZmlu ZSBTVl9TQ1JMIDAKLSNkZWZpbmUgU1ZfSElTVCAxCi0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9M T0NBTAotc3RhdGljIHN0cnVjdCBrZXl0YWIgdHJtdHJtb3B0W10gPSB7Ci0gICAgeyAic2Nyb2xs YmFjayIsIFNWX1NDUkwsIDAgfQotfTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jZW5kaWYgLyog T1MyICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGNtZHRybW9wdFtdID0gewotI2lmZGVmIENL X1JFQ0FMTAotICAgIHsgImhpc3RvcnkiLCAgICBTVl9ISVNULCAwIH0sCi0jZW5kaWYgLyogQ0tf UkVDQUxMICovCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PTE9DQUwKLSAgICB7ICJzY3JvbGxiYWNr IiwgU1ZfU0NSTCwgMCB9LAotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5jbWR0cm1vcHQgPSAoc2l6ZW9mIChj bWR0cm1vcHQpIC8gc2l6ZW9mIChzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi0jaWZkZWYgT1MyCi0j aWZuZGVmIE5PTE9DQUwKLV9QUk9UT1RZUChpbnQgc2F2c2NyYmssIChpbnQsIGNoYXIgKiwgaW50 KSk7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgQ0tf UkVDQUxMCi1fUFJPVE9UWVAoaW50IHNhdmhpc3RvcnksIChjaGFyICosIGludCkpOwotI2VuZGlm IC8qIENLX1JFQ0FMTCAqLwotCi1pbnQKLWRvc2F2ZSh4eCkgaW50IHh4OyB7Ci0gICAgaW50IHgs IHkgPSAwLCBkaXNwOwotICAgIGNoYXIgKiBzID0gTlVMTDsKLSAgICBleHRlcm4gc3RydWN0IGtl eXRhYiBkaXNwdGJbXTsKLSNpZmRlZiBaRk5RRlAKLSAgICBzdHJ1Y3QgemZuZnAgKiBmbnA7Ci0j ZW5kaWYgLyogWkZOUUZQICovCi0KLSNpZm5kZWYgTk9TRVRLRVkKLSAgICBpZiAoeHggPT0gWFNL RVkpIHsgICAgICAgICAgICAgICAgICAvKiBTQVZFIEtFWU1BUC4uICovCi0gICAgICAgIHogPSBj bW9maSgiTmFtZSBvZiBLZXJtaXQgY29tbWFuZCBmaWxlIiwia2V5bWFwLmtzYyIsJnMseHhzdHJp bmcpOwotICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLSAgICAgICAgc3dpdGNo ICh4eCkgewotICAgICAgICAgIGNhc2UgWFNDTUQ6ICAgICAgICAgICAgICAgICAgIC8qIFNBVkUg Q09NTUFORC4uICovCi0gICAgICAgICAgICBpZiAoKHkgPSBjbWtleShjbWR0cm1vcHQsIG5jbWR0 cm1vcHQsICJXaGF0IHRvIHNhdmUiLAotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgInNjcm9sbGJhY2siLAotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJo aXN0b3J5IiwKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4 c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBicmVh azsKLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9MT0NBTAotICAgICAgICAgIGNhc2UgWFNURVJNOiAg ICAgICAgICAgICAgICAgIC8qIFNBVkUgVEVSTUlOQUwuLiAqLwotICAgICAgICAgICAgaWYgKCh5 ID0gY21rZXkodHJtdHJtb3B0LDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiV2hhdCB0 byBzYXZlIiwic2Nyb2xsYmFjayIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVy bih5KTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSAgICAgICAgfQotICAgICAgICB6ID0gY21vZmkoIkZpbGVuYW1lIiwKLSAgICAg ICAgICAgICAgICAgICgoeSA9PSBTVl9TQ1JMKSA/ICJzY3JvbGxiay50eHQiIDogImhpc3Rvcnku dHh0IiksCi0gICAgICAgICAgICAgICAgICAmcywKLSAgICAgICAgICAgICAgICAgIHh4c3RyaW5n Ci0gICAgICAgICAgICAgICAgICApOwotI2lmbmRlZiBOT1NFVEtFWQotICAgIH0KLSNlbmRpZiAv KiBOT1NFVEtFWSAqLwotICAgIGlmICh6IDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IENoZWNrIG91dHB1dC1maWxlIHBhcnNlIHJlc3VsdHMgKi8KLSAgICAgIHJldHVybih6KTsKLSAg ICBpZiAoeiA9PSAyKSB7Ci0gICAgICAgIHByaW50ZigiP1NvcnJ5LCAlcyBpcyBhIGRpcmVjdG9y eSBuYW1lXG4iLHMpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSNpZmRlZiBaRk5RRlAK LSAgICBpZiAoKGZucCA9IHpmbnFmcChzLFRNUEJVRlNJWiAtIDEsdG1wYnVmKSkpIHsvKiBDb252 ZXJ0IHRvIGZ1bGwgcGF0aG5hbWUgKi8KLSAgICAgICAgaWYgKGZucC0+ZnBhdGgpCi0gICAgICAg ICAgaWYgKChpbnQpIHN0cmxlbihmbnAtPmZwYXRoKSA+IDApCi0gICAgICAgICAgICBzID0gZm5w LT5mcGF0aDsKLSAgICB9Ci0jZW5kaWYgLyogWkZOUUZQICovCi0KLSAgICBja3N0cm5jcHkobGlu ZSxzLExJTkJVRlNJWik7ICAgICAgICAvKiBNYWtlIHNhZmUgY29weSBvZiBwYXRobmFtZSAqLwot ICAgIHMgPSBsaW5lOwotI2lmZGVmIE1BQwotICAgIHogPSAwOwotI2Vsc2UKLSAgICAvKiBHZXQg TkVXL0FQUEVORCBkaXNwb3NpdGlvbiAqLwotICAgIGlmICgoeiA9IGNta2V5KGRpc3B0YiwyLCJE aXNwb3NpdGlvbiIsIm5ldyIseHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oeik7Ci0jZW5k aWYgLyogTUFDICovCi0gICAgZGlzcCA9IHo7Ci0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSAg ICAgICAgICAgICAgLyogR2V0IGNvbmZpcm1hdGlvbiAqLwotICAgICAgcmV0dXJuKHgpOwotCi0g ICAgc3dpdGNoICh4eCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogRG8gYWN0aW9uLi4gKi8K LSNpZm5kZWYgTk9TRVRLRVkKLSAgICAgIGNhc2UgWFNLRVk6ICAgICAgICAgICAgICAgICAgICAg ICAvKiBTQVZFIEtFWU1BUCAqLwotICAgICAgICByZXR1cm4gKHNhdmtleXMocyxkaXNwKSk7Ci0j ZW5kaWYgLyogTk9TRVRLRVkgKi8KLQotICAgICAgY2FzZSBYU0NNRDogICAgICAgICAgICAgICAg ICAgICAgIC8qIFNBVkUgQ09NTUFORC4uICovCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PTE9DQUwK LSAgICAgICAgaWYgKHkgPT0gU1ZfU0NSTCkgICAgICAgICAgICAgICAvKiAuLiBTQ1JPTExCQUNL ICovCi0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzYXZzY3JiayhWQ01ELHMsZGlzcCkpOwot I2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNpZm5kZWYgTk9SRUNBTEwK LSAgICAgICAgaWYgKHkgPT0gU1ZfSElTVCkgICAgICAgICAgICAgICAvKiAuLiBISVNUT1JZICov Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzYXZoaXN0b3J5KHMsZGlzcCkpOwotI2VuZGlm IC8qIE5PUkVDQUxMICovCi0gICAgICAgIGJyZWFrOwotCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5P TE9DQUwKLSAgICAgIGNhc2UgWFNURVJNOiAgICAgICAgICAgICAgICAgICAgICAvKiBTQVZFIFRF Uk1JTkFMIFNDUk9MTEJBQ0sgKi8KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzYXZzY3JiayhW VEVSTSxzLGRpc3ApKTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jZW5kaWYgLyogT1MyICovCi0g ICAgfQotICAgIHN1Y2Nlc3MgPSAwOwotICAgIHJldHVybigtMik7Ci19Ci0KLS8qCi0gIFIgRSBB IEQgVCBFIFggVAotCi0gIFJlYWQgdGV4dCB3aXRoIGEgY3VzdG9tIHByb21wdCBpbnRvIGdpdmVu IGJ1ZmZlciB1c2luZyBjb21tYW5kIHBhcnNlciBidXQKLSAgd2l0aCBubyBlY2hvaW5nIG9yIGVu dHJ5IGludG8gcmVjYWxsIGJ1ZmZlci4KLSovCi1pbnQKLXJlYWR0ZXh0KHBybXB0LCBidWZmZXIs IGJ1ZnNpeikgY2hhciAqIHBybXB0OyBjaGFyICogYnVmZmVyOyBpbnQgYnVmc2l6OyB7Ci0jaWZk ZWYgQ0tfUkVDQUxMCi0gICAgZXh0ZXJuIGludCBvbl9yZWNhbGw7ICAgICAgICAgICAgICAgLyog QXJvdW5kIFBhc3N3b3JkIHByb21wdGluZyAqLwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotICAg IGludCByYzsKLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGV4dGVybiBpbnQgdm1v ZGU7Ci0gICAgZXh0ZXJuIGludCBzdGFydGZsYWdzOwotICAgIGludCB2bW9kZV9zYXYgPSB2bW9k ZTsKLQotICAgIGlmICghcHJtcHQpIHBybXB0ID0gIiI7Ci0KLSAgICBpZiAod2luOTVfcG9wdXAg JiYgIShzdGFydGZsYWdzICYgOTYpCi0jaWZkZWYgSUtTRAotICAgICAgICAgJiYgIWluc2VydmVy Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAgKQotICAgICAgcmV0dXJuKHBvcHVwX3JlYWR0 ZXh0KHZtb2RlLE5VTEwscHJtcHQsYnVmZmVyLGJ1ZnNpeiwwKSk7Ci0KLSAgICBpZiAodm1vZGUg PT0gVlRFUk0pIHsKLSAgICAgICAgdm1vZGUgPSBWQ01EOwotICAgICAgICBWc2NybklzRGlydHko VlRFUk0pOwotICAgICAgICBWc2NybklzRGlydHkoVkNNRCk7Ci0gICAgfQotI2VuZGlmIC8qIE9T MiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIENLX1JFQ0FMTAotICAgIG9uX3Jl Y2FsbCA9IDA7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0gICAgY21zYXZwKHBzYXZlLFBST01Q VEwpOyAgICAgICAgICAgICAgLyogU2F2ZSBvbGQgcHJvbXB0ICovCi0gICAgY21zZXRwKHBybXB0 KTsgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSBuZXcgcHJvbXB0ICovCi0gICAgY29uY2Io KGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAgICAgLyogUHV0IGNvbnNvbGUgaW4gY2JyZWFrIG1v ZGUgKi8KLSAgICBjbWluaSgxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgZWNo byBtb2RlICovCi0gICAgaWYgKHBmbGFnKSBwcm9tcHQoeHhzdHJpbmcpOyAgICAgICAgLyogSXNz dWUgcHJvbXB0IGlmIGF0IHRvcCBsZXZlbCAqLwotICAgIGNtcmVzKCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFJlc2V0IHRoZSBwYXJzZXIgKi8KLSAgICBmb3IgKHJjID0gLTE7IHJj IDwgMDsgKSB7ICAgICAgICAgICAvKiBQcm9tcHQgdGlsbCB0aGV5IGFuc3dlciAqLwotICAgICAg ICByYyA9IGNtdHh0KCIiLCIiLCZzLE5VTEwpOyAgICAgIC8qIEdldCBhIGxpdGVyYWwgbGluZSBv ZiB0ZXh0ICovCi0gICAgICAgIGNtcmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVz ZXQgdGhlIHBhcnNlciBhZ2FpbiAqLwotICAgIH0KLSAgICBja3N0cm5jcHkoYnVmZmVyLHMsYnVm c2l6KTsKLSAgICBjbXNldHAocHNhdmUpOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3Jl IG9yaWdpbmFsIHByb21wdCAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICBp ZiAodm1vZGUgIT0gdm1vZGVfc2F2KSB7Ci0gICAgICAgIHZtb2RlID0gVlRFUk07Ci0gICAgICAg IFZzY3JuSXNEaXJ0eShWQ01EKTsKLSAgICAgICAgVnNjcm5Jc0RpcnR5KFZURVJNKTsKLSAgICB9 Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIHJldHVybigwKTsK LX0KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0vKiBBIGdlbmVyYWwgZnVuY3Rpb24gdG8gYWxsb3cg YSBQYXNzd29yZCBvciBvdGhlciBpbmZvcm1hdGlvbiAgKi8KLS8qIHRvIGJlIHJlYWQgZnJvbSB0 aGUgY29tbWFuZCBwcm9tcHQgd2l0aG91dCBpdCBnb2luZyBpbnRvICAgICAqLwotLyogdGhlIHJl Y2FsbCBidWZmZXIgb3IgYmVpbmcgZWNobydkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICov Ci0KLWludAotcmVhZHBhc3MocHJtcHQsIGJ1ZmZlciwgYnVmc2l6KSBjaGFyICogcHJtcHQ7IGNo YXIgKiBidWZmZXI7IGludCBidWZzaXo7IHsKLSAgICBpbnQgeDsKLSNpZmRlZiBOT0lDUAotICAg IGlmICghcHJtcHQpIHBybXB0ID0gIiI7Ci0gICAgcHJpbnRmKCIlcyIsIHBybXB0KTsKLSNpZmRl ZiBDT01NRU5UCi0gICAgLyogU29tZSBsaW5rZXJzIHdvbid0IGFsbG93IHRoaXMgYmVjYXVzZSBp dCdzIHVuc2FmZSAqLwotICAgIGdldHMoYnVmZmVyKTsKLSNlbHNlICAvKiBDT01NRU5UICovCi0g ICAgewotICAgICAgICBpbnQgYywgaTsgY2hhciAqIHA7Ci0gICAgICAgIHAgPSBidWZmZXI7Ci0g ICAgICAgIGZvciAoaSA9IDA7IGkgPCBidWZzaXotMTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAo KGMgPSBnZXRjaGFyKCkpID09IEVPRikKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICBpZiAoYyA8IFNQKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGJ1ZmZlcltp XSA9IGM7Ci0gICAgICAgIH0KLSAgICAgICAgYnVmZmVyW2ldID0gTlVMOwotICAgIH0KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0gICAgcmV0dXJuKDEpOwotI2Vsc2UgIC8qIE5PSUNQICovCi0jaWZk ZWYgQ0tfUkVDQUxMCi0gICAgZXh0ZXJuIGludCBvbl9yZWNhbGw7ICAgICAgICAgICAgICAgLyog YXJvdW5kIFBhc3N3b3JkIHByb21wdGluZyAqLwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotICAg IGludCByYzsKLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGV4dGVybiBpbnQgdm1v ZGU7Ci0gICAgZXh0ZXJuIGludCBzdGFydGZsYWdzOwotICAgIGludCB2bW9kZV9zYXYgPSB2bW9k ZTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgQ0tTWVNM T0cKLSAgICBpbnQgc2F2bG9nOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgaWYgKCFwcm1w dCkgcHJtcHQgPSAiIjsKLSNpZm5kZWYgTk9MT0NBTAotICAgIGRlYm9rID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIERvbid0IGxvZyAqLwotI2lmZGVmIE9TMgotICAgIGlmICh3aW45 NV9wb3B1cCAmJiAhKHN0YXJ0ZmxhZ3MgJiA5NikKLSNpZmRlZiBJS1NECi0gICAgICAgICAmJiAh aW5zZXJ2ZXIKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICApIHsKLSAgICAgICAgeCA9IHBv cHVwX3JlYWRwYXNzKHZtb2RlLE5VTEwscHJtcHQsYnVmZmVyLGJ1ZnNpeiwwKTsKLSAgICAgICAg ZGVib2sgPSAxOwotICAgICAgICByZXR1cm4oeCk7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwot I2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIENLU1lTTE9HCi0gICAgc2F2bG9nID0gY2t4 c3lzbG9nOyAgICAgICAgICAgICAgICAgLyogU2F2ZSBhbmQgdHVybiBvZmYgc3lzbG9nZ2luZyAq LwotICAgIGNreHN5c2xvZyA9IDA7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZm5kZWYgTk9M T0NBTAotI2lmZGVmIE9TMgotICAgIGlmICh2bW9kZSA9PSBWVEVSTSkgewotICAgICAgICB2bW9k ZSA9IFZDTUQ7Ci0gICAgICAgIFZzY3JuSXNEaXJ0eShWVEVSTSk7Ci0gICAgICAgIFZzY3JuSXNE aXJ0eShWQ01EKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAq LwotI2lmZGVmIENLX1JFQ0FMTAotICAgIG9uX3JlY2FsbCA9IDA7Ci0jZW5kaWYgLyogQ0tfUkVD QUxMICovCi0gICAgY21zYXZwKHBzYXZlLFBST01QVEwpOyAgICAgICAgICAgICAgLyogU2F2ZSBv bGQgcHJvbXB0ICovCi0gICAgY21zZXRwKHBybXB0KTsgICAgICAgICAgICAgICAgICAgICAgLyog TWFrZSBuZXcgcHJvbXB0ICovCi0gICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAg ICAgLyogUHV0IGNvbnNvbGUgaW4gY2JyZWFrIG1vZGUgKi8KLSAgICBjbWluaSgwKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBhbmQgbm8tZWNobyBtb2RlICovCi0gICAgaWYgKHBmbGFn KSBwcm9tcHQoeHhzdHJpbmcpOyAgICAgICAgLyogSXNzdWUgcHJvbXB0IGlmIGF0IHRvcCBsZXZl bCAqLwotICAgIGNtcmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHRo ZSBwYXJzZXIgKi8KLSAgICBmb3IgKHJjID0gLTE7IHJjIDwgMDsgKSB7ICAgICAgICAgICAvKiBQ cm9tcHQgdGlsbCB0aGV5IGFuc3dlciAqLwotICAgICAgICByYyA9IGNtdHh0KCIiLCIiLCZzLE5V TEwpOyAgICAgIC8qIEdldCBhIGxpdGVyYWwgbGluZSBvZiB0ZXh0ICovCi0gICAgICAgIGNtcmVz KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIHBhcnNlciBhZ2FpbiAqLwot ICAgIH0KLSAgICBja3N0cm5jcHkoYnVmZmVyLHMsYnVmc2l6KTsKLSAgICBwcmludGYoIlxyXG4i KTsgICAgICAgICAgICAgICAgICAgICAvKiBFY2hvIGEgQ1JMRiAqLwotICAgIGNtc2V0cChwc2F2 ZSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgb3JpZ2luYWwgcHJvbXB0ICovCi0g ICAgY21pbmkoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBlY2hvIG1v ZGUgKi8KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGlmICh2bW9kZSAhPSB2bW9k ZV9zYXYpIHsKLSAgICAgICAgdm1vZGUgPSBWVEVSTTsKLSAgICAgICAgVnNjcm5Jc0RpcnR5KFZD TUQpOwotICAgICAgICBWc2NybklzRGlydHkoVlRFUk0pOwotICAgIH0KLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBja3hzeXNsb2cg PSBzYXZsb2c7ICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHN5c2xvZ2dpbmcgKi8KLSNlbmRp ZiAvKiBDS1NZU0xPRyAqLwotICAgIGRlYm9rID0gMTsKLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYg LyogTk9JQ1AgKi8KLX0KLQotI2lmbmRlZiBOT0lDUAotc3RydWN0IGtleXRhYiBhdXRodGFiW10g PSB7ICAgICAgICAgICAgIC8qIEF2YWlsYWJsZSBhdXRoZW50aWNhdGlvbiB0eXBlcyAqLwotI2lm ZGVmIENLX0tFUkJFUk9TCi0gICAgeyAiazQiLCAgICAgICAgQVVUSF9LUkI0LCBDTV9JTlYgfSwK LSAgICB7ICJrNSIsICAgICAgICBBVVRIX0tSQjUsIENNX0lOViB9LAotICAgIHsgImtlcmJlcm9z NCIsIEFVVEhfS1JCNCwgMCAgICAgIH0sCi0gICAgeyAia2VyYmVyb3M1IiwgQVVUSF9LUkI1LCAw ICAgICAgfSwKLSAgICB7ICJrcmI0IiwgICAgICBBVVRIX0tSQjQsIENNX0lOViB9LAotICAgIHsg ImtyYjUiLCAgICAgIEFVVEhfS1JCNSwgQ01fSU5WIH0sCi0jZW5kaWYgLyogQ0tfS0VSQkVST1Mg Ki8KLSNpZmRlZiBOVAotICAgIHsgIm50bG0iLCAgICAgIEFVVEhfTlRMTSwgMCB9LAotI2VuZGlm IC8qIE5UICovCi0jaWZkZWYgQ0tfU1JQCi0gICAgeyAic3JwIiwgICAgICAgQVVUSF9TUlAsICAw IH0sCi0jZW5kaWYgLyogQ0tfU1JQICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgeyAic3NsIiwgICAg ICAgQVVUSF9TU0wsICAwIH0sCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgeyAiIiwgICAgICAg ICAgMCwgICAgICAgICAwIH0KLX07Ci1pbnQgYXV0aHRhYm4gPSBzaXplb2YoYXV0aHRhYikvc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpLTE7Ci0KLSNpZmRlZiBDS19LRVJCRVJPUwotc3RydWN0IGtleXRh YiBrZXJidGFiW10gPSB7ICAgICAgICAgICAgIC8qIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIHR5 cGVzICovCi0gICAgeyAiazQiLCAgICAgICAgQVVUSF9LUkI0LCBDTV9JTlYgfSwKLSAgICB7ICJr NSIsICAgICAgICBBVVRIX0tSQjUsIENNX0lOViB9LAotICAgIHsgImtlcmJlcm9zNCIsIEFVVEhf S1JCNCwgMCAgICAgIH0sCi0gICAgeyAia2VyYmVyb3M1IiwgQVVUSF9LUkI1LCAwICAgICAgfSwK LSAgICB7ICJrcmI0IiwgICAgICBBVVRIX0tSQjQsIENNX0lOViB9LAotICAgIHsgImtyYjUiLCAg ICAgIEFVVEhfS1JCNSwgQ01fSU5WIH0KLX07Ci1pbnQga2VyYnRhYm4gPSBzaXplb2Yoa2VyYnRh Yikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBrcmJfc190 YmxbXSA9IHsgICAgLyogQVVUSEVOVElDQVRFIGNvbW1hbmQgc3dpdGNoZXM6ICovCi0gICAgeyAi L2NhY2hlIiwgICBLUkJfU19DQSwgQ01fQVJHIH0KLX07Ci1zdGF0aWMgaW50IGtyYl9zX24gPSBz aXplb2Yoa3JiX3NfdGJsKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLXN0YXRpYyBzdHJ1Y3Qg a2V5dGFiIGtyYl92X3RibFtdID0geyAgICAvKiBLRVJCRVJPUyB2ZXJzaW9uIHZhbHVlczogKi8K LSAgICB7ICI0IiwgICAgNCwgMCB9LAotICAgIHsgIjUiLCAgICA1LCAwIH0sICAgICAgICAgICAg ICAgICAgIC8qIChhZGQgb3RoZXJzIGFzIG5lZWRlZC4uLikgKi8KLSAgICB7ICJhdXRvIiwgMCwg MCB9ICAgICAgICAgICAgICAgICAgICAvKiBOb3RlOiAwID0gYXV0byAqLwotfTsKLXN0YXRpYyBp bnQga3JiX3ZfbiA9IHNpemVvZihrcmJfdl90YmwpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKLQot c3RhdGljIHN0cnVjdCBrZXl0YWIga3JiX2FfdGJsW10gPSB7ICAgIC8qIEtFUkJFUk9TIGFjdGlv bnM6ICovCi0gICAgeyAiZGVzdHJveSIsICAgICAgICAgICBLUkJfQV9ERSwgMCB9LAotICAgIHsg ImluaXRpYWxpemUiLCAgICAgICAgS1JCX0FfSU4sIDAgfSwKLSAgICB7ICJsaXN0LWNyZWRlbnRp YWxzIiwgIEtSQl9BX0xDLCAwIH0KLX07Ci1zdGF0aWMgaW50IGtyYl9hX24gPSBzaXplb2Yoa3Ji X2FfdGJsKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGty YjRfaV90YmxbXSA9IHsgICAvKiBLRVJCRVJPUyA0IElOSVRJQUxJWkUgc3dpdGNoZXM6ICovCi0g ICAgeyAiL2JyaWVmIiwgICAgICAgICAgICBLUkJfSV9CUiwgMCB9LCAgICAgIC8qIC9CUklFRiAg ICAgICAqLwotICAgIHsgIi9pbnN0YW5jZSIsICAgICAgICAgS1JCX0lfSU4sIENNX0FSRyB9LCAv KiAvSU5TVEFOQ0U6ICAgKi8KLSAgICB7ICIvbGlmZXRpbWUiLCAgICAgICAgIEtSQl9JX0xGLCBD TV9BUkcgfSwgLyogL0xJRkVUSU1FOiAgICovCi0gICAgeyAiL25vdC1wcmVhdXRoIiwgICAgICBL UkJfSV9OUEEsIDAgfSwgICAgIC8qIC9OT1QtUFJFQVVUSCAqLwotICAgIHsgIi9wYXNzd29yZCIs ICAgICAgICAgS1JCX0lfUFcsIENNX0FSRyB9LCAvKiAvUEFTU1dPUkQ6ICAgKi8KLSNpZmRlZiBP UzIKLSAgICB7ICIvcG9wdXAiLCAgICAgICAgICAgIEtSQl9JX1BPUCwgMCB9LCAgICAgLyogL1BP UFVQICAgICAgICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgeyAiL3ByZWF1dGgiLCAgICAgICAg ICBLUkJfSV9QQSwgMCB9LCAgICAgIC8qIC9QUkVBVVRIICAgICAqLwotICAgIHsgIi9yZWFsbSIs ICAgICAgICAgICAgS1JCX0lfUkwsIENNX0FSRyB9LCAvKiAvUkVBTE06ICAgICAgKi8KLSAgICB7 ICIvdmVyYm9zZSIsICAgICAgICAgIEtSQl9JX1ZCLCAwIH0sICAgICAgLyogL1ZFUkJPU0UgICAg ICovCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBrcmI0X2lfbiA9IHNpemVvZihr cmI0X2lfdGJsKS9zaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOwotCi1zdGF0aWMgc3RydWN0IGtl eXRhYiBrcmI1X2lfdGJsW10gPSB7ICAgLyogS0VSQkVST1MgNSBJTklUSUFMSVpFIHN3aXRjaGVz OiAqLwotICAgIHsgIi9hZGRyZXNzZXMiLCAgICAgICAgS1JCX0lfQURSLCBDTV9BUkcgfSwKLSAg ICB7ICIvZm9yd2FyZGFibGUiLCAgICAgIEtSQl9JX0ZXLCAgMCB9LCAgICAgICAgIC8qIC9GT1JX QVJEQUJMRSAqLwotICAgIHsgIi9pbnN0YW5jZSIsICAgICAgICAgS1JCX0lfSU4sIENNX0FSRyB9 LCAvKiAvSU5TVEFOQ0U6ICAgKi8KLSAgICB7ICIvazQiLCAgICAgICAgICAgICAgIEtSQl9JX0s0 LCAgQ01fSU5WIH0sIC8qIC9LRVJCRVJPUzQgICAqLwotICAgIHsgIi9rZXJiZXJvczQiLCAgICAg ICAgS1JCX0lfSzQsICAwIH0sICAgICAgLyogL0tFUkJFUk9TNCAgICovCi0gICAgeyAiL2tyYjQi LCAgICAgICAgICAgICBLUkJfSV9LNCwgIENNX0lOViB9LCAvKiAvS0VSQkVST1M0ICAgKi8KLSAg ICB7ICIvbGlmZXRpbWUiLCAgICAgICAgIEtSQl9JX0xGLCAgQ01fQVJHIH0sIC8qIC9MSUZFVElN RTogICAqLwotICAgIHsgIi9uby1hZGRyZXNzZXMiLCAgICAgS1JCX0lfTkFELCAwIH0sICAgICAg LyogL05PLUFERFJFU1NFUyAqLwotICAgIHsgIi9uby1rNCIsICAgICAgICAgICAgS1JCX0lfTks0 LCBDTV9JTlYgfSwvKiAvTk8tS0VSQkVST1M0ICovCi0gICAgeyAiL25vLWtlcmJlcm9zNCIsICAg ICBLUkJfSV9OSzQsIDAgfSwgICAgIC8qIC9OTy1LRVJCRVJPUzQgKi8KLSAgICB7ICIvbm8ta3Ji NCIsICAgICAgICAgIEtSQl9JX05LNCwgQ01fSU5WIH0sLyogL05PLUtFUkJFUk9TNCAqLwotICAg IHsgIi9ub3QtZm9yd2FyZGFibGUiLCAgS1JCX0lfTkZXLCAwIH0sICAgICAgICAgLyogL05PVC1G T1JXQVJEQUJMRSAqLwotICAgIHsgIi9ub3QtcHJveGlhYmxlIiwgICAgS1JCX0lfTlBSLCAwIH0s ICAgICAvKiAvTk9ULVBST1hJQUJMRSAgICovCi0gICAgeyAiL3Bhc3N3b3JkIiwgICAgICAgICBL UkJfSV9QVywgIENNX0FSRyB9LCAvKiAvUEFTU1dPUkQ6ICAgKi8KLSNpZmRlZiBPUzIKLSAgICB7 ICIvcG9wdXAiLCAgICAgICAgICAgIEtSQl9JX1BPUCwgMCB9LCAgICAgLyogL1BPUFVQICAgICAg ICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgeyAiL3Bvc3RkYXRlIiwgICAgICAgICBLUkJfSV9Q RCwgQ01fQVJHIH0sIC8qIC9QT1NUREFURTogICAqLwotICAgIHsgIi9wciIsICAgICAgICAgICAg ICAgS1JCX0lfUFIsIENNX0lOVnxDTV9BQlIgfSwgLyogdG8gYWxsb3cgZm9yICovCi0gICAgeyAi L3BybyIsICAgICAgICAgICAgICBLUkJfSV9QUiwgQ01fSU5WfENNX0FCUiB9LCAvKiBkaWZmZXJl bnQgc3BlbGxpbmdzICovCi0gICAgeyAiL3Byb3giLCAgICAgICAgICAgICBLUkJfSV9QUiwgQ01f SU5WfENNX0FCUiB9LAotICAgIHsgIi9wcm94aWFibGUiLCAgICAgICAgS1JCX0lfUFIsIDAgfSwg ICAgICAvKiAvUFJPWElBQkxFICAgKi8KLSAgICB7ICIvcHJveHlhYmxlIiwgICAgICAgIEtSQl9J X1BSLCBDTV9JTlYgfSwgLyogL1BST1hZQUJMRSAgICovCi0gICAgeyAiL3JlYWxtIiwgICAgICAg ICAgICBLUkJfSV9STCwgQ01fQVJHIH0sIC8qIC9SRUFMTTogICAgICAqLwotICAgIHsgIi9yZW5l dyIsICAgICAgICAgICAgS1JCX0lfUk4sIDAgfSwgICAgICAgICAgLyogL1JFTkVXICAgICAgICov Ci0gICAgeyAiL3JlbmV3YWJsZSIsICAgICAgICBLUkJfSV9SQiwgQ01fQVJHIH0sIC8qIC9SRU5F V0FCTEU6ICAqLwotICAgIHsgIi9zZXJ2aWNlIiwgICAgICAgICAgS1JCX0lfU1IsIENNX0FSRyB9 LCAvKiAvU0VSVklDRTogICAgKi8KLSAgICB7ICIvdmFsaWRhdGUiLCAgICAgICAgIEtSQl9JX1ZB LCAwIH0sICAgICAgICAgIC8qIC9WQUxJREFURSAgICAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsK LXN0YXRpYyBpbnQga3JiNV9pX24gPSBzaXplb2Yoa3JiNV9pX3RibCkvc2l6ZW9mKHN0cnVjdCBr ZXl0YWIpIC0gMTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIga2xjdGFiW10gPSB7ICAgICAgIC8q IExpc3QgQ3JlZGVudGlhbHMgc3dpdGNoZXMqLwotICAgIHsgIi9hZGRyZXNzZXMiLCAgWFlLTENB RCwgMCB9LAotICAgIHsgIi9lbmNyeXB0aW9uIiwgWFlLTENFTiwgMCB9LAotICAgIHsgIi9mbGFn cyIsICAgICAgWFlLTENGTCwgMCB9Ci19Owotc3RhdGljIGludCBua2xjdGFiID0gc2l6ZW9mKGts Y3RhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotCi1leHRlcm4gaW50IGtyYl9hY3Rpb247Ci1l eHRlcm4gc3RydWN0IGtyYl9vcF9kYXRhIGtyYl9vcDsKLQotZXh0ZXJuIHN0cnVjdCBrcmI1X2xp c3RfY3JlZF9kYXRhIGtyYjVfbGM7Ci1leHRlcm4gc3RydWN0IGtyYjVfaW5pdF9kYXRhIGtyYjVf aW5pdDsKLWV4dGVybiBjaGFyICoga3JiNV9kX3ByaW5jaXBhbDsgICAgICAgICAvKiBEZWZhdWx0 IHByaW5jaXBhbCAqLwotZXh0ZXJuIGNoYXIgKiBrcmI1X2RfaW5zdGFuY2U7Ci1leHRlcm4gY2hh ciAqIGtyYjVfZF9yZWFsbTsgICAgICAgICAgICAgLyogRGVmYXVsdCByZWFsbSAqLwotZXh0ZXJu IGNoYXIgKiBrcmI1X2RfY2M7ICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgY3JlZGVudGlhbHMg Y2FjaGUgKi8KLWV4dGVybiBjaGFyICoga3JiNV9kX3NydjsgICAgICAgICAgICAgICAvKiBEZWZh dWx0IHNlcnZpY2UgbmFtZSAqLwotZXh0ZXJuIGludCAgICBrcmI1X2RfbGlmZXRpbWU7ICAgICAg ICAgIC8qIERlZmF1bHQgbGlmZXRpbWUgKi8KLWV4dGVybiBpbnQgICAga3JiNV9kX2ZvcndhcmRh YmxlOwotZXh0ZXJuIGludCAgICBrcmI1X2RfcHJveGlhYmxlOwotZXh0ZXJuIGludCAgICBrcmI1 X2RfcmVuZXdhYmxlOwotZXh0ZXJuIGludCAgICBrcmI1X2F1dG9nZXQ7Ci1leHRlcm4gaW50ICAg IGtyYjVfYXV0b2RlbDsKLWV4dGVybiBpbnQgICAga3JiNV9kX2dldGs0OwotZXh0ZXJuIGludCAg ICBrcmI1X2Rfbm9fYWRkcmVzc2VzOwotZXh0ZXJuIGludCAgICBrcmI1X2NoZWNrYWRkcnM7Ci1l eHRlcm4gY2hhciAqIGtyYjVfZF9hZGRyc1tdOwotZXh0ZXJuIGNoYXIgKiBrNV9rZXl0YWI7ICAg ICAgICAgICAgICAgIC8qIEtleXRhYiBmaWxlICovCi0KLWV4dGVybiBzdHJ1Y3Qga3JiNF9pbml0 X2RhdGEga3JiNF9pbml0OwotZXh0ZXJuIGNoYXIgKiBrcmI0X2RfcHJpbmNpcGFsOyAgICAgICAg IC8qIERlZmF1bHQgcHJpbmNpcGFsICovCi1leHRlcm4gY2hhciAqIGtyYjRfZF9yZWFsbTsgICAg ICAgICAgICAgLyogRGVmYXVsdCByZWFsbSAqLwotZXh0ZXJuIGNoYXIgKiBrcmI0X2Rfc3J2OyAg ICAgICAgICAgICAgIC8qIERlZmF1bHQgc2VydmljZSBuYW1lICovCi1leHRlcm4gaW50ICAgIGty YjRfZF9saWZldGltZTsgICAgICAgICAgLyogRGVmYXVsdCBsaWZldGltZSAqLwotZXh0ZXJuIGlu dCAgICBrcmI0X2RfcHJlYXV0aDsKLWV4dGVybiBjaGFyICoga3JiNF9kX2luc3RhbmNlOwotZXh0 ZXJuIGludCAgICBrcmI0X2F1dG9nZXQ7Ci1leHRlcm4gaW50ICAgIGtyYjRfYXV0b2RlbDsKLWV4 dGVybiBpbnQgICAga3JiNF9jaGVja2FkZHJzOwotZXh0ZXJuIGNoYXIgKiBrNF9rZXl0YWI7ICAg ICAgICAgICAgICAgIC8qIEtleXRhYiBmaWxlICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8K LQotI2lmbmRlZiBOT1NIT1cKLWludAotc2hvX2lrcygpIHsKLSNpZmRlZiBJS1NEQ09ORgotI2lm ZGVmIENLX0xPR0lOCi0gICAgZXh0ZXJuIGludCBja3hzeXNsb2csIGNreHd0bXAsIGNreGFub247 Ci0jaWZkZWYgVU5JWAotICAgIGV4dGVybiBpbnQgY2t4cHJpdjsKLSNlbmRpZiAvKiBVTklYICov Ci0jaWZkZWYgQ0tfUEVSTVMKLSAgICBleHRlcm4gaW50IGNreHBlcm1zOwotI2VuZGlmIC8qIENL X1BFUk1TICovCi0gICAgZXh0ZXJuIGNoYXIgKiBhbm9uZmlsZSwgKiB1c2VyZmlsZSwgKiBhbm9u cm9vdDsKLSNpZmRlZiBPUzIKLSAgICBleHRlcm4gY2hhciAqIGFub25hY2N0OwotI2VuZGlmIC8q IE9TMiAqLwotI2lmZGVmIE5UCi0gICAgZXh0ZXJuIGNoYXIgKiBpa3NfZG9tYWluOwotI2VuZGlm IC8qIE5UICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNpZmRlZiBDS1dUTVAKLSAgICBleHRl cm4gY2hhciAqIHd0bXBmaWxlOwotI2VuZGlmIC8qIENLV1RNUCAqLwotI2lmZGVmIElLU0RCCi0g ICAgZXh0ZXJuIGNoYXIgKiBkYmZpbGU7Ci0gICAgZXh0ZXJuIGludCBkYmVuYWJsZWQ7Ci0jZW5k aWYgLyogSUtTREIgKi8KLSNpZmRlZiBDS19MT0dJTgotICAgIGV4dGVybiBpbnQgbG9naW50aW1v OwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgZXh0ZXJuIGludCBzcnZjZG1zZywgc3VjY2Vz cywgaWtzZGNmLCBub2luaXQsIGFyZ194OwotICAgIGV4dGVybiBjaGFyICogY2Rtc2dmaWxlW10s ICogY2Rtc2dzdHIsICprZXJtcmM7Ci0gICAgY2hhciAqIGJhbm5lcmZpbGUgPSBOVUxMOwotICAg IGNoYXIgKiBoZWxwZmlsZSA9IE5VTEw7Ci0gICAgZXh0ZXJuIGludCB4ZmVybG9nOwotICAgIGV4 dGVybiBjaGFyICogeGZlcmZpbGU7Ci0gICAgaW50IGk7Ci0KLSAgICBpZiAoaXNndWVzdCkgewot ICAgICAgICBwcmludGYoIj9Db21tYW5kIGRpc2FibGVkXHJcbiIpOwotICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDApOwotICAgIH0KLQotICAgIHByaW50ZigiSUtTIFNldHRpbmdzXHJcbiIpOwot I2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgT1MyCi0gICAgcHJpbnRmKCIgIEFub255bW91cyBBY2Nv dW50OiAgICVzXHJcbiIsYW5vbmFjY3Q/YW5vbmFjY3Q6Ijxub25lPiIpOwotI2VuZGlmIC8qIE9T MiAqLwotICAgIHByaW50ZigiICBBbm9ueW1vdXMgSW5pdGZpbGU6ICAlc1xyXG4iLGFub25maWxl P2Fub25maWxlOiI8bm9uZT4iKTsKLSAgICBwcmludGYoIiAgQW5vbnltb3VzIExvZ2luOiAgICAg JWRcclxuIixja3hhbm9uKTsKLSAgICBwcmludGYoIiAgQW5vbnltb3VzIFJvb3Q6ICAgICAgJXNc clxuIixhbm9ucm9vdD9hbm9ucm9vdDoiPG5vbmU+Iik7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8K LSAgICBwcmludGYoIiAgQmFubmVyZmlsZTogICAgICAgICAgJXNcclxuIixiYW5uZXJmaWxlP2Jh bm5lcmZpbGU6Ijxub25lPiIpOwotICAgIHByaW50ZigiICBDRGZpbGU6ICAgICAgICAgICAgICAl c1xyXG4iLGNkbXNnZmlsZVswXT9jZG1zZ2ZpbGVbMF06Ijxub25lPiIpOwotICAgIGZvciAoIGk9 MTtpPDE2ICYmIGNkbXNnZmlsZVtpXTtpKysgKQotICAgICAgICBwcmludGYoIiAgQ0RmaWxlOiAg ICAgICAgICAgICAgJXNcclxuIixjZG1zZ2ZpbGVbaV0pOwotICAgIHByaW50ZigiICBDRE1lc3Nh Z2U6ICAgICAgICAgICAlZFxyXG4iLHNydmNkbXNnKTsKLSNpZmRlZiBJS1NEQgotICAgIHByaW50 ZigiICBEQmZpbGU6ICAgICAgICAgICAgICAlc1xyXG4iLGRiZmlsZT9kYmZpbGU6Ijxub25lPiIp OwotICAgIHByaW50ZigiICBEQmVuYWJsZWQ6ICAgICAgICAgICAlZFxyXG4iLGRiZW5hYmxlZCk7 Ci0jZW5kaWYgLyogSUtTREIgKi8KLSNpZmRlZiBDS19MT0dJTgotI2lmZGVmIE5UCi0gICAgcHJp bnRmKCIgIERlZmF1bHQtZG9tYWluOiAgICAgICVzXHJcbiIsaWtzX2RvbWFpbj9pa3NfZG9tYWlu OiIuIik7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgIHByaW50 ZigiICBIZWxwZmlsZTogICAgICAgICAgICAlc1xyXG4iLGhlbHBmaWxlP2hlbHBmaWxlOiI8bm9u ZT4iKTsKLSAgICBwcmludGYoIiAgSW5pdGZpbGU6ICAgICAgICAgICAgJXNcclxuIixrZXJtcmM/ a2VybXJjOiI8bm9uZT4iKTsKLSAgICBwcmludGYoIiAgTm8tSW5pdGZpbGU6ICAgICAgICAgJWRc clxuIixub2luaXQpOwotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgQ0tfUEVSTQotICAgIHByaW50 ZigiICBQZXJtaXNzaW9uIGNvZGU6ICAgICAlMGRcclxuIixja3hwZXJtcyk7Ci0jZW5kaWYgLyog Q0tfUEVSTSAqLwotI2lmZGVmIFVOSVgKLSAgICBwcmludGYoIiAgUHJpdmlsZWdlZCBMb2dpbjog ICAgJWRcclxuIixja3hwcml2KTsKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogQ0tfTE9H SU4gKi8KLSAgICBwcmludGYoIiAgU2VydmVyLW9ubHk6ICAgICAgICAgJWRcclxuIixhcmdfeCk7 Ci0gICAgcHJpbnRmKCIgIFN5c2xvZzogICAgICAgICAgICAgICVkXHJcbiIsY2t4c3lzbG9nKTsK LSAgICBwcmludGYoIiAgVGltZW91dCAoc2Vjb25kcyk6ICAgJWRcclxuIixsb2dpbnRpbW8pOwot ICAgIHByaW50ZigiICBVc2VyZmlsZTogICAgICAgICAgICAlc1xyXG4iLHVzZXJmaWxlP3VzZXJm aWxlOiI8bm9uZT4iKTsKLSNpZmRlZiBDS19MT0dJTgotI2lmZGVmIENLV1RNUAotICAgIHByaW50 ZigiICBXdG1wbG9nOiAgICAgICAgICAgICAlZFxyXG4iLGNreHd0bXApOwotICAgIHByaW50Zigi ICBXdG1wZmlsZTogICAgICAgICAgICAlc1xyXG4iLHd0bXBmaWxlP3d0bXBmaWxlOiI8bm9uZT4i KTsKLSNlbmRpZiAvKiBDS1dUTVAgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgIHByaW50 ZigiICBYZmVyZmlsZTogICAgICAgICAgICAlc1xyXG4iLHhmZXJmaWxlP3hmZXJmaWxlOiI8bm9u ZT4iKTsKLSAgICBwcmludGYoIiAgWGZlcmxvZzogICAgICAgICAgICAgJWRcclxuIix4ZmVybG9n KTsKLSNlbHNlIC8qIElLU0RDT05GICovCi0gICAgcHJpbnRmKCI/Tm90aGluZyB0byBzaG93Llxy XG4iKTsKLSNlbmRpZiAvKiBJS1NEQ09ORiAqLwotICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci19 Ci0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotaW50Ci1zaG9fYXV0aChjeCkgaW50IGN4OyB7 Ci0gICAgZXh0ZXJuIGludCBhdXRoX3R5cGVfdXNlcltdLCBjbWRfcm93czsKLSAgICBpbnQgaTsK LSAgICBjaGFyICogcDsKLSAgICBpbnQga3YgPSAwLCBhbGwgPSAwLCBuID0gMDsKLQotI2lmZGVm IElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIgJiYgaXNndWVzdCkgewotICAgICAgICBwcmludGYoIj9T b3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0g MCk7Ci0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICBpZiAoY3gpIHsKLSAgICAgICAga3Yg PSBjeDsKLSAgICB9IGVsc2UgaWYgKGF1dGhfdHlwZV91c2VyWzBdICE9IEFVVEhUWVBFX0FVVE8p IHsKLSAgICAgICAga3YgPSBhdXRoX3R5cGVfdXNlclswXTsKLSAgICB9IGVsc2UgewotICAgICAg ICBhbGwgPSAxOwotICAgICAgICBrdiA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y0OwotICAgIH0KLSAg ICB3aGlsZSAoa3YpIHsKLSAgICAgICAgc3dpdGNoIChrdikgewotICAgICAgICAgIGNhc2UgQVVU SFRZUEVfS0VSQkVST1NfVjQ6Ci0gICAgICAgICAgICBrdiA9IGFsbCA/IEFVVEhUWVBFX0tFUkJF Uk9TX1Y1IDogMDsKLSAgICAgICAgICAgIGlmIChja19rcmI0X2lzX2luc3RhbGxlZCgpKSB7Ci0g ICAgICAgICAgICAgICAgcHJpbnRmKCIgQXV0aGVudGljYXRpb246ICAgICAgS2VyYmVyb3MgNFxu Iik7Ci0gICAgICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAgICAgcHJpbnRmKCIgQXV0aGVudGljYXRpb246ICAgICAgS2VyYmVyb3MgNCAobm90IGlu c3RhbGxlZClcbiIpOwotICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICAgICAgY29u dGludWU7Ci0gICAgICAgICAgICB9Ci0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAgICAgICAgIHBy aW50ZigiIEtleXRhYiBmaWxlOiAgICAgICAgICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAg IGs0X2tleXRhYiA/IGs0X2tleXRhYiA6ICIobm9uZSkiKTsKLSAgICAgICAgICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0g ICAgICAgICAgICBpZiAoa3JiX2FjdGlvbiA8IDApIHsKLSAgICAgICAgICAgICAgICBwID0gIihu b25lKSI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAocCA9ICIi LCBpID0gMDsgaSA8IGtyYl9hX247IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoa3Ji X2FjdGlvbiA9PSBrcmJfYV90YmxbaV0ua3d2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IHAgPSBrcmJfYV90YmxbaV0ua3dkOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBwcmludGYoIiBBY3Rpb246ICAgICAgICAgICAgICAlc1xuIiwgcCk7Ci0gICAg ICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDAp OyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgRGVmYXVsdCBsaWZldGltZSAgICAg JWRcbiIsa3JiNF9kX2xpZmV0aW1lKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBw cmludGYoIiBMaWZldGltZTogICAgICAgICAgICAlZCAobWludXRlcylcbiIsa3JiNF9pbml0Lmxp ZmV0aW1lKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBEZWZhdWx0 IHByZWF1dGg6ICAgICAlZFxuIixrcmI0X2RfcHJlYXV0aCk7Ci0gICAgICAgICAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwot ICAgICAgICAgICAgcHJpbnRmKCIgUHJlYXV0aDogICAgICAgICAgICAgJWRcbiIsa3JiNF9pbml0 LnByZWF1dGgpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIERlZmF1 bHQgcHJpbmNpcGFsOiAgIFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAgICAga3JiNF9kX3By aW5jaXBhbCA/IGtyYjRfZF9wcmluY2lwYWwgOiAiIik7Ci0gICAgICAgICAgICBpZiAoKytuID4g Y21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAg ICAgICAgICAgcHJpbnRmKCIgUHJpbmNpcGFsOiAgICAgICAgICAgXCIlc1wiXG4iLAotICAgICAg ICAgICAgICAgICAgICBrcmI0X2luaXQucHJpbmNpcGFsID8ga3JiNF9pbml0LnByaW5jaXBhbCA6 ICIiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBEZWZhdWx0IHJl YWxtOiAgICAgICBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAgIGtyYjRfZF9yZWFsbSA/ IGtyYjRfZF9yZWFsbSA6ICIiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmlu dGYoIiBSZWFsbTogICAgICAgICAgICAgICBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAg IGtyYjRfaW5pdC5yZWFsbSA/IGtyYjRfaW5pdC5yZWFsbSA6ICIiKTsKLSAgICAgICAgICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9 IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBEZWZhdWx0IGluc3RhbmNlOiAgICBcIiVzXCJcbiIs Ci0gICAgICAgICAgICAgICAgICAgIGtyYjRfZF9pbnN0YW5jZSA/IGtyYjRfZF9pbnN0YW5jZSA6 ICIiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBJbnN0YW5jZTog ICAgICAgICAgICBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAgIGtyYjRfaW5pdC5pbnN0 YW5jZSA/IGtyYjRfaW5pdC5pbnN0YW5jZSA6ICIiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAg ICAgICAgICBwcmludGYoIiBBdXRvLUdldCBUR1RzOiAgICAgICAlZFxuIixrcmI0X2F1dG9nZXQp OwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIEF1dG8tRGVzdHJveSBU R1RzOiAgICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBrcmI0X2F1dG9kZWw9PUtSQl9ERUxf Tk8/Im5ldmVyIjoKLSAgICAgICAgICAgICAgICAgICAga3JiNF9hdXRvZGVsPT1LUkJfREVMX0NM PyJvbi1jbG9zZSI6Im9uLWV4aXQiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBw cmludGYoIiBDaGVjayBJUCBBZGRyZXNzZXM6ICAlZFxuIixrcmI0X2NoZWNrYWRkcnMpOwotICAg ICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigw KTsgZWxzZSBuID0gMDsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBwcmludGYoIiBQYXNz d29yZDogICAgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICBrcmI0X2luaXQucGFzc3dv cmQgID8ga3JiNF9pbml0LnBhc3N3b3JkICA6ICIiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0gICAgICAgICAgICBw cmludGYoIlxuIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjU6Ci0gICAgICAgICAgICBrdiA9IGFsbCA/IEFV VEhUWVBFX1NTTCA6IDA7Ci0gICAgICAgICAgICBpZiAoY2tfa3JiNV9pc19pbnN0YWxsZWQoKSkg ewotICAgICAgICAgICAgICAgIGlmIChja19nc3NhcGlfaXNfaW5zdGFsbGVkKCkpCi0gICAgICAg ICAgICAgICAgICAgIHByaW50ZigiIEF1dGhlbnRpY2F0aW9uOiAgICAgIEtlcmJlcm9zIDUgcGx1 cyBHU1NBUElcbiIpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCIgQXV0aGVudGljYXRpb246ICAgICAgS2VyYmVyb3MgNVxuIik7Ci0gICAgICAgICAg ICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRm KCIgQXV0aGVudGljYXRpb246ICAgICAgS2VyYmVyb3MgNSAobm90IGluc3RhbGxlZClcbiIpOwot ICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg ICAgICB9Ci0KLSNpZmRlZiBDS19LRVJCRVJPUwotICAgICAgICAgICAgcHJpbnRmKCIgQ2FjaGUg ZmlsZTogICAgICAgICAgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIGtyYl9vcC5jYWNoZSA/ IGtyYl9vcC5jYWNoZSA6ICIobm9uZSkiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAg ICBwcmludGYoIiBEZWZhdWx0IGNhY2hlOiAgICAgICAlc1xuIiwKLSAgICAgICAgICAgICAgICAg ICAga3JiNV9kX2NjID8ga3JiNV9kX2NjIDogIihub25lKSIpOwotICAgICAgICAgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsK LSAgICAgICAgICAgIHByaW50ZigiIEtleXRhYiBmaWxlOiAgICAgICAgICVzXG4iLAotICAgICAg ICAgICAgICAgICAgICAgIGs1X2tleXRhYiA/IGs1X2tleXRhYiA6ICIobm9uZSkiKTsKLSAgICAg ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7 IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBpZiAoa3JiX2FjdGlvbiA8IDApIHsKLSAgICAgICAg ICAgICAgICBwID0gIihub25lKSI7Ci0gICAgICAgICAgICB9IGVsc2UgIHsKLSAgICAgICAgICAg ICAgICBmb3IgKHAgPSAiIiwgaSA9IDA7IGkgPCBrcmJfYV9uOyBpKyspIHsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKGtyYl9hY3Rpb24gPT0ga3JiX2FfdGJsW2ldLmt3dmFsKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBwID0ga3JiX2FfdGJsW2ldLmt3ZDsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCIgQWN0aW9uOiAgICAgICAgICAgICAg JXNcbiIsIHApOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLQotICAgICAgICAgICAgcHJpbnRmKCIgRGVm YXVsdCBmb3J3YXJkYWJsZSAgJWRcbiIsa3JiNV9kX2ZvcndhcmRhYmxlKTsKLSAgICAgICAgICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2Ug biA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBGb3J3YXJkYWJsZTogICAgICAgICAlZFxuIixr cmI1X2luaXQuZm9yd2FyZGFibGUpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHBy aW50ZigiIERlZmF1bHQgbGlmZXRpbWUgICAgICVkXG4iLGtyYjVfZF9saWZldGltZSk7Ci0gICAg ICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDAp OyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgTGlmZXRpbWU6ICAgICAgICAgICAg JWQgKG1pbnV0ZXMpXG4iLGtyYjVfaW5pdC5saWZldGltZSk7Ci0gICAgICAgICAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwot ICAgICAgICAgICAgcHJpbnRmKCIgUG9zdGRhdGU6ICAgICAgICAgICAgXCIlc1wiXG4iLAotICAg ICAgICAgICAgICAgICAgICBrcmI1X2luaXQucG9zdGRhdGUgPyBrcmI1X2luaXQucG9zdGRhdGU6 ICIiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBEZWZhdWx0IHBy b3hpYWJsZTogICAlZFxuIixrcmI1X2RfcHJveGlhYmxlKTsKLSAgICAgICAgICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0g ICAgICAgICAgICBwcmludGYoIiBQcm94aWFibGU6ICAgICAgICAgICAlZFxuIixrcmI1X2luaXQu cHJveGlhYmxlKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBSZW5l dzogICAgICAgICAgICAgICAlZFxuIixrcmI1X2luaXQucmVuZXcpOwotICAgICAgICAgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0g MDsKLSAgICAgICAgICAgIHByaW50ZigiIERlZmF1bHQgcmVuZXdhYmxlOiAgICVkIChtaW51dGVz KVxuIixrcmI1X2RfcmVuZXdhYmxlKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBw cmludGYoIiBSZW5ld2FibGU6ICAgICAgICAgICAlZCAobWludXRlcylcbiIsa3JiNV9pbml0LnJl bmV3YWJsZSk7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgU2Vydmlj ZTogICAgICAgICAgICAgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICBrcmI1X2luaXQu c2VydmljZSA/IGtyYjVfaW5pdC5zZXJ2aWNlIDogIiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAg ICAgICAgICAgIHByaW50ZigiIFZhbGlkYXRlOiAgICAgICAgICAgICVkXG4iLGtyYjVfaW5pdC52 YWxpZGF0ZSk7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgRGVmYXVs dCBwcmluY2lwYWw6ICAgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICBrcmI1X2RfcHJp bmNpcGFsID8ga3JiNV9kX3ByaW5jaXBhbCA6ICIiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAg ICAgICAgICBwcmludGYoIiBQcmluY2lwYWw6ICAgICAgICAgICBcIiVzXCJcbiIsCi0gICAgICAg ICAgICAgICAgICAgIGtyYjVfaW5pdC5wcmluY2lwYWwgPyBrcmI1X2luaXQucHJpbmNpcGFsIDog IiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIERlZmF1bHQgaW5z dGFuY2U6ICAgIFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAgICAga3JiNV9kX2luc3RhbmNl ID8ga3JiNV9kX2luc3RhbmNlIDogIiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAg IHByaW50ZigiIERlZmF1bHQgcmVhbG06ICAgICAgIFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAg ICAgICAga3JiNV9kX3JlYWxtID8ga3JiNV9kX3JlYWxtIDogIiIpOwotICAgICAgICAgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0g MDsKLSAgICAgICAgICAgIHByaW50ZigiIFJlYWxtOiAgICAgICAgICAgICAgIFwiJXNcIlxuIiwK LSAgICAgICAgICAgICAgICAgICAga3JiNV9pbml0LnJlYWxtID8ga3JiNV9pbml0LnJlYWxtIDog IiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIEF1dG8tR2V0IFRH VHM6ICAgICAgICVkXG4iLGtyYjVfYXV0b2dldCk7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAg ICAgICAgcHJpbnRmKCIgQXV0by1EZXN0cm95IFRHVHM6ICAgJXNcbiIsCi0gICAgICAgICAgICAg ICAgICAgIGtyYjVfYXV0b2RlbD09S1JCX0RFTF9OTz8ibmV2ZXIiOgotICAgICAgICAgICAgICAg ICAgICBrcmI1X2F1dG9kZWw9PUtSQl9ERUxfQ0w/Im9uLWNsb3NlIjoib24tZXhpdCIpOwotICAg ICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigw KTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIERlZmF1bHQgZ2V0IEs0IFRHVHM6 ICVkXG4iLGtyYjVfZF9nZXRrNCk7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJp bnRmKCIgR2V0IEs0IFRHVHM6ICVkXG4iLGtyYjVfaW5pdC5nZXRrNCk7Ci0gICAgICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgQ2hlY2sgSVAgQWRkcmVzc2VzOiAgJWRcbiIsa3Ji NV9jaGVja2FkZHJzKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBO byBJUCBBZGRyZXNzZXM6ICAlZFxuIixrcmI1X2Rfbm9fYWRkcmVzc2VzKTsKLSAgICAgICAgICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2Ug biA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBJUC1BZGRyZXNzZXM6ICAgICAgICAiKTsKLSAg ICAgICAgICAgIGlmIChrcmI1X2luaXQuYWRkcnMgJiYga3JiNV9pbml0LmFkZHJzWzBdKSB7Ci0g ICAgICAgICAgICAgICAgZm9yIChpID0gMDsga3JiNV9pbml0LmFkZHJzW2ldOyBpKyspIHsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIs Iik7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMiLGtyYjVfaW5pdC5hZGRyc1tpXSk7 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChrcmI1X2RfYWRkcnNb MF0pIHsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwO2kgPCBLUkI1X05VTV9PRl9BRERSUyAm JiBrcmI1X2RfYWRkcnNbaV07aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpKQotICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiLCIpOwotICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIiVzIixrcmI1X2RfYWRkcnNbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIodXNlIGRlZmF1bHQpIik7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwot I2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHByaW50ZigiIFBhc3N3b3JkOiAgICAgICAgICAg IFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAgICAga3JiNV9pbml0LnBhc3N3b3JkICA/IGty YjVfaW5pdC5wYXNzd29yZCAgOiAiIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotICAgICAgICAgICAgcHJpbnRmKCJc biIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIENLX1NT TAotICAgICAgICAgIGNhc2UgQVVUSFRZUEVfU1NMOgotICAgICAgICAgICAga3YgPSBhbGwgPyBB VVRIVFlQRV9TUlAgOiAwOwotICAgICAgICAgICAgaWYgKGNrX3NzbGVheV9pc19pbnN0YWxsZWQo KSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiIEF1dGhlbnRpY2F0aW9uOiAgICAgIFNTTC9U TFMgKCVzKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNTTGVheV92ZXJzaW9uKFNTTEVB WV9WRVJTSU9OKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYg KCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgQXV0aGVudGljYXRpb246ICAgICAgU1NML1RMUyAo bm90IGluc3RhbGxlZClcbiIpOwotICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICAg ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIiBSU0EgQ2Vy dHMgZmlsZTogJXNcbiIsc3NsX3JzYV9jZXJ0X2ZpbGU/Ci0gICAgICAgICAgICAgICAgICBzc2xf cnNhX2NlcnRfZmlsZToiKG5vbmUpIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAg cHJpbnRmKCIgUlNBIENlcnRzIENoYWluIGZpbGU6ICVzXG4iLHNzbF9yc2FfY2VydF9jaGFpbl9m aWxlPwotICAgICAgICAgICAgICAgICAgc3NsX3JzYV9jZXJ0X2NoYWluX2ZpbGU6Iihub25lKSIp OwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIFJTQSBLZXkgZmlsZTog JXNcbiIsc3NsX3JzYV9rZXlfZmlsZT8KLSAgICAgICAgICAgICAgICAgIHNzbF9yc2Ffa2V5X2Zp bGU6Iihub25lKSIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIERT QSBDZXJ0cyBmaWxlOiAlc1xuIixzc2xfZHNhX2NlcnRfZmlsZT8KLSAgICAgICAgICAgICAgICAg IHNzbF9kc2FfY2VydF9maWxlOiIobm9uZSkiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAg ICAgICBwcmludGYoIiBEU0EgQ2VydHMgQ2hhaW4gZmlsZTogJXNcbiIsc3NsX2RzYV9jZXJ0X2No YWluX2ZpbGU/Ci0gICAgICAgICAgICAgICAgICBzc2xfZHNhX2NlcnRfY2hhaW5fZmlsZToiKG5v bmUpIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgREggS2V5IGZp bGU6ICVzXG4iLHNzbF9kaF9rZXlfZmlsZT8KLSAgICAgICAgICAgICAgICAgIHNzbF9kaF9rZXlf ZmlsZToiKG5vbmUpIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCIg REggUGFyYW0gZmlsZTogJXNcbiIsc3NsX2RoX3BhcmFtX2ZpbGU/Ci0gICAgICAgICAgICAgICAg ICBzc2xfZGhfcGFyYW1fZmlsZToiKG5vbmUpIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAg ICAgICAgcHJpbnRmKCIgQ1JMIGZpbGU6ICVzXG4iLHNzbF9jcmxfZmlsZT8KLSAgICAgICAgICAg ICAgICAgIHNzbF9jcmxfZmlsZToiKG5vbmUpIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAg ICAgICAgcHJpbnRmKCIgQ1JMIGRpcjogJXNcbiIsc3NsX2NybF9kaXI/Ci0gICAgICAgICAgICAg ICAgICAgIHNzbF9jcmxfZGlyOiIobm9uZSkiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAg ICAgICBwcmludGYoIiBSYW5kb20gZmlsZTogJXNcbiIsc3NsX3JuZF9maWxlPwotICAgICAgICAg ICAgICAgICAgc3NsX3JuZF9maWxlOiIobm9uZSkiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAg ICAgICAgICBwcmludGYoIiBWZXJpZnkgZmlsZTogJXNcbiIsc3NsX3ZlcmlmeV9maWxlPwotICAg ICAgICAgICAgICAgICAgc3NsX3ZlcmlmeV9maWxlOiIobm9uZSkiKTsKLSAgICAgICAgICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9 IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBWZXJpZnkgZGlyOiAlc1xuIixzc2xfdmVyaWZ5X2Rp cj8KLSAgICAgICAgICAgICAgICAgIHNzbF92ZXJpZnlfZGlyOiIobm9uZSkiKTsKLSAgICAgICAg ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVs c2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBDaXBoZXIgbGlzdDogJXNcbiIsc3NsX2Np cGhlcl9saXN0ID8gc3NsX2NpcGhlcl9saXN0IDogCi0JCSAgICBERUZBVUxUX0NJUEhFUl9MSVNU KTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBpZiAoc3NsX2NvbiA9PSBOVUxMKSB7 Ci0gICAgICAgICAgICAgICAgU1NMX2xpYnJhcnlfaW5pdCgpOwotICAgICAgICAgICAgICAgIHNz bF9jdHggPSAoU1NMX0NUWCAqKQotICAgICAgICAgICAgICAgICAgU1NMX0NUWF9uZXcoKFNTTF9N RVRIT0QgKilUTFN2MV9tZXRob2QoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNzbF9jdHggIT0g TlVMTCkKLSAgICAgICAgICAgICAgICAgIHNzbF9jb249IChTU0wgKikgU1NMX25ldyhzc2xfY3R4 KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzc2xfY29uICE9IE5VTEwpIHsKLSAg ICAgICAgICAgICAgICBDSEFSICogcCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgaW50IGk7Ci0K LSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyA7IGkrKykgewotICAgICAgICAgICAgICAgICAg ICBwID0gKENIQVIgKikgU1NMX2dldF9jaXBoZXJfbGlzdChzc2xfY29uLGkpOwotICAgICAgICAg ICAgICAgICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAlc1xuIixwKTsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCIgQ2VydHMgT0s/ICVzXG4iLHNzbF9j ZXJ0c29rX2ZsYWc/ICJ5ZXMiIDogIm5vIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jv d3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAg ICAgcHJpbnRmKCIgRGVidWcgbW9kZTogJXNcbiIsIHNzbF9kZWJ1Z19mbGFnID8gIm9uIiA6ICJv ZmYiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBWZXJib3NlIG1v ZGU6ICVzXG4iLCBzc2xfdmVyYm9zZV9mbGFnID8gIm9uIiA6ICJvZmYiKTsKLSAgICAgICAgICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2Ug biA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBWZXJpZnkgbW9kZTogJXNcbiIsCi0gICAgICAg ICAgICAgICAgICAgIHNzbF92ZXJpZnlfZmxhZyA9PSBTU0xfVkVSSUZZX05PTkUgPyAibm9uZSIg OgotICAgICAgICAgICAgICAgICAgICBzc2xfdmVyaWZ5X2ZsYWcgPT0gU1NMX1ZFUklGWV9QRUVS ID8gInBlZXItY2VydCIgOgotICAgICAgICAgICAgICAgICAgICAiZmFpbC1pZi1uby1wZWVyLWNl cnQiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBTU0wgb25seT8g JXNcbiIsIHNzbF9vbmx5X2ZsYWcgPyAieWVzIiA6ICJubyIpOwotICAgICAgICAgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsK LSAgICAgICAgICAgIHByaW50ZigiIFRMUyBvbmx5PyAlc1xuIiwgdGxzX29ubHlfZmxhZyA/ICJ5 ZXMiIDogIm5vIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotI2VuZGlmIC8qIENLX1NTTCAqLwotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBBVVRIVFlQRV9OVExNOgotICAgICAgICAg ICAga3YgPSAwOwotICAgICAgICAgICAgaWYgKGNrX250bG1faXNfaW5zdGFsbGVkKCkpIHsKLSAg ICAgICAgICAgICAgICBwcmludGYoIiBBdXRoZW50aWNhdGlvbjogICAgICBOVExNXG4iKTsKLSAg ICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgICAgIHByaW50ZigiIE5vIG9wdGlvbnNc biIpOwotICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgIHByaW50ZigiIEF1dGhlbnRpY2F0aW9uOiAgICAgIE5UTE0gKG5vdCBpbnN0YWxs ZWQpXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVl OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBu ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgQVVUSFRZUEVfU1JQOgot ICAgICAgICAgICAga3YgPSBhbGwgPyBBVVRIVFlQRV9OVExNIDogMDsKLSAgICAgICAgICAgIGlm IChja19zcnBfaXNfaW5zdGFsbGVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2tfa3J5cHRv X2lzX2luc3RhbGxlZCgpKQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBBdXRoZW50aWNh dGlvbjogICAgICBTUlAgcGx1cyBLcnlwdG8gQVBJXG4iKTsKLSAgICAgICAgICAgICAgICBlbHNl Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiIEF1dGhlbnRpY2F0aW9uOiAgICAgIFNSUFxu Iik7Ci0gICAgICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgICAgICBwcmludGYoIiBObyBv cHRpb25zXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICBwcmludGYoIiBBdXRoZW50aWNhdGlvbjogICAgICBTUlAgKG5vdCBp bnN0YWxsZWQpXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgICAgIGNv bnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAg ICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl dHVybihzdWNjZXNzID0gMSk7Ci19Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNl bmRpZiAvKiBOT1NIT1cgKi8KLQotI2lmZGVmIENLX0tFUkJFUk9TCi0KLS8qICBDIFAgXyBBIFUg VCBIICAtLSAgQVVUSEVOVElDQVRFIGNvbW1hbmQgcGFyc2luZyAgKi8KLQotaW50Ci1jcF9hdXRo KCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZF9QYXJzZSBBVVRIRU5U SUNBVEUgKi8KLSAgICBpbnQgYywgaSwgbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3Jr ZXJzICovCi0gICAgaW50IHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJu IGNvZGUgKi8KLSAgICBpbnQgZ2V0dmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJz aW5nIGhlbHBlcnMgKi8KLSAgICBpbnQgdG1wYXV0aCA9IDA7ICAgICAgICAgICAgICAgICAgICAv KiBUZW1wb3JhcnkgYXV0aGVudGljYXRpb24gdHlwZSAqLwotICAgIGludCBrdiA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBLZXJiZXJvcyB2ZXJzaW9uICovCi0gICAg aW50IHRtcF9hY3Rpb24gPSAtMTsgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IEtlcmJlcm9z IGFjdGlvbiAqLwotICAgIGludCB0bXBfa2xjID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIFRl bXBvcmFyeSBsaXN0LWNyZWRlbnRpYWxzICovCi0gICAgY2hhciB0bXBobHBbMjU2XTsgICAgICAg ICAgICAgICAgICAgLyogRm9yIGJ1aWxkaW5nIGhlbHAgbWVzc2FnZSAqLwotICAgIGNoYXIgKiBw OwotICAgIGNoYXIgKiB0bXBwc3dkICA9IE5VTEw7ICAgICAgICAgICAgIC8qIFBhc3N3b3JkICov Ci0gICAgY2hhciAqIHRtcHByaW56ID0gTlVMTDsgICAgICAgICAgICAgLyogUHJpbmNpcGFsICov Ci0gICAgY2hhciAqIHRtcHJlYWxtID0gTlVMTDsgICAgICAgICAgICAgLyogUmVhbG0gKi8KLSAg ICBjaGFyICogdG1wY2FjaGUgPSBOVUxMOyAgICAgICAgICAgICAvKiBDYWNoZSBmaWxlICovCi0g ICAgY2hhciAqIHRtcGluc3QgID0gTlVMTDsgICAgICAgICAgICAgLyogSzQgSW5zdGFuY2UgKi8K LSAgICBjaGFyICogdG1wYWRkcnNbS1JCNV9OVU1fT0ZfQUREUlNdOwotI2lmZGVmIENLX1JFQ0FM TAotICAgIGV4dGVybiBpbnQgb25fcmVjYWxsOyAgICAgICAgICAgICAgIC8qIGFyb3VuZCBQYXNz d29yZCBwcm9tcHRpbmcgKi8KLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSAgICBzdHJ1Y3Qgc3Ry aW5naW50IHB2W0tSQl9JX01BWCsxXTsgICAvKiBUZW1wb3JhcnkgYXJyYXkgZm9yIHN3aXRjaCB2 YWx1ZXMgKi8KLSAgICBzdHJ1Y3QgRkRCIGt3LCBzdywgZmw7ICAgICAgICAgICAgICAvKiBGREJz IGZvciBlYWNoIHBhcnNlIGZ1bmN0aW9uICovCi0KLSAgICBrcmJfYWN0aW9uID0gLTE7ICAgICAg ICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIEtlcmJlcm9zIGFjdGlvbi4gKi8KLSAgICB0bXBf YWN0aW9uID0gLTE7ICAgICAgICAgICAgICAgICAgICAvKiBBbmQgb3VyIGxvY2FsIGNvcHkuICov Ci0gICAgZm9yIChpID0gMDsgaSA8IEtSQjVfTlVNX09GX0FERFJTOyBpKyspCi0gICAgICB0bXBh ZGRyc1tpXSA9IE5VTEw7Ci0KLSAgICBpZiAoKHkgPSBjbWtleShrZXJidGFiLGtlcmJ0YWJuLCJh dXRoZW50aWNhdGlvbiB0eXBlIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgIHsKLSAgICAgICAg ICBpZiAoeSA9PSAtMykKLSAgICAgICAgICAgIHByaW50ZigiP0F1dGhlbnRpY2F0aW9uIHR5cGUg bm90IHNwZWNpZmllZCAtIG5vdGhpbmcgaGFwcGVuc1xuIik7Ci0gICAgICAgICAgcmV0dXJuKHkp OwotICAgICAgfQotICAgIHRtcGF1dGggPSB5OwotICAgIGRlYnVnKEYxMDEsImtlcmJlcm9zIGF1 dGhlbnRpY2F0aW9uIiwiIix0bXBhdXRoKTsKLSAgICBzd2l0Y2ggKHRtcGF1dGgpIHsKLSAgICAg IGNhc2UgQVVUSF9LUkI0OiBrdiA9IDQ7IGJyZWFrOyAgICAvKiBEb24ndCBhc3N1bWUgdmFsdWVz IGFyZSB0aGUgc2FtZSAqLwotICAgICAgY2FzZSBBVVRIX0tSQjU6IGt2ID0gNTsgYnJlYWs7Ci0g ICAgICBkZWZhdWx0OgotICAgICAgICBwcmludGYoIj9BdXRoZW50aWNhdGlvbiB0eXBlIG5vdCBz dXBwb3J0ZWQ6IFwiJXNcIlxuIixhdG1idWYpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0K LQotICAgIC8qIEZyb20gaGVyZSBkb3duIGlzIEtlcmJlcm9zICovCi0gICAgaW5pX2tlcmIoKTsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgSW5pdCBkYXRhIHRvIGRlZmF1bHRzICov Ci0KLSAgICBpZiAoa3YgPT0gNCkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgSzQgZGVm YXVsdHMgKi8KLSAgICAgICAgaWYgKGtyYjRfZF9yZWFsbSkKLSAgICAgICAgICBtYWtlc3RyKCZ0 bXByZWFsbSxrcmI0X2RfcmVhbG0pOwotICAgICAgICBpZiAoa3JiNF9kX3ByaW5jaXBhbCkKLSAg ICAgICAgICBtYWtlc3RyKCZ0bXBwcmlueixrcmI0X2RfcHJpbmNpcGFsKTsKLSAgICAgICAgaWYg KGtyYjRfZF9pbnN0YW5jZSkKLSAgICAgICAgICBtYWtlc3RyKCZ0bXBpbnN0LGtyYjRfZF9pbnN0 YW5jZSk7Ci0gICAgfSBlbHNlIGlmIChrdiA9PSA1KSB7ICAgICAgICAgICAgICAgLyogU2V0IEs1 IGRlZmF1bHRzICovCi0gICAgICAgIGlmIChrcmI1X2RfY2MpCi0gICAgICAgICAgbWFrZXN0cigm dG1wY2FjaGUsa3JiNV9kX2NjKTsKLSAgICAgICAgaWYgKGtyYjVfZF9yZWFsbSkKLSAgICAgICAg ICBtYWtlc3RyKCZ0bXByZWFsbSxrcmI1X2RfcmVhbG0pOwotICAgICAgICBpZiAoa3JiNV9kX3By aW5jaXBhbCkKLSAgICAgICAgICBtYWtlc3RyKCZ0bXBwcmlueixrcmI1X2RfcHJpbmNpcGFsKTsK LSAgICAgICAgaWYgKGtyYjVfZF9pbnN0YW5jZSkKLSAgICAgICAgICBtYWtlc3RyKCZ0bXBpbnN0 LGtyYjVfZF9pbnN0YW5jZSk7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPD0gS1JCX0lfTUFY OyBpKyspIHsgIC8qIEluaXRpYWxpemUgc3dpdGNoIHZhbHVlcyAqLwotICAgICAgICBwdltpXS5z dmFsID0gTlVMTDsgICAgICAgICAgICAgIC8qIHRvIG51bGwgcG9pbnRlcnMgKi8KLSAgICAgICAg cHZbaV0uaXZhbCA9IDA7ICAgICAgICAgICAgICAgICAvKiBhbmQgMCBpbnQgdmFsdWVzICovCi0g ICAgICAgIHB2W2ldLnd2YWwgPSAoQ0tfT0ZGX1QpLTE7CS8qIGFuZCAtMSB3aWRlIHZhbHVlcyAq LwotICAgIH0KLSAgICBpZiAoa3YgPT0gNCkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBLZXJi ZXJvcyA0ICovCi0gICAgICAgIHB2W0tSQl9JX0xGXS5pdmFsID0ga3JiNF9kX2xpZmV0aW1lOwot ICAgICAgICBwdltLUkJfSV9QQV0uaXZhbCA9IGtyYjRfZF9wcmVhdXRoOwotCi0gICAgICAgIGlm ICgobiA9IGNta2V5KGtyYl9hX3RibCxrcmJfYV9uLCJLZXJiZXJvcyA0IGFjdGlvbiIsIiIseHhz dHJpbmcpKSA8IDApCi0gICAgICAgICAgewotICAgICAgICAgICAgICBpZiAobiA9PSAtMykKLSAg ICAgICAgICAgICAgICBwcmludGYoIj9BY3Rpb24gbm90IHNwZWNpZmllZCAtIG5vdGhpbmcgaGFw cGVucy5cbiIpOwotICAgICAgICAgICAgICByZXR1cm4obik7Ci0gICAgICAgICAgfQotICAgIH0g ZWxzZSBpZiAoa3YgPT0gNSkgeyAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIDUgKi8KLSAgICAg ICAgcHZbS1JCX0lfRlddLml2YWwgPSBrcmI1X2RfZm9yd2FyZGFibGU7Ci0gICAgICAgIHB2W0tS Ql9JX1BSXS5pdmFsID0ga3JiNV9kX3Byb3hpYWJsZTsKLSAgICAgICAgcHZbS1JCX0lfTEZdLml2 YWwgPSBrcmI1X2RfbGlmZXRpbWU7Ci0gICAgICAgIHB2W0tSQl9JX1JCXS5pdmFsID0ga3JiNV9k X3JlbmV3YWJsZTsKLSAgICAgICAgcHZbS1JCX0lfSzRdLml2YWwgPSBrcmI1X2RfZ2V0azQ7Ci0g ICAgICAgIHB2W0tSQl9JX05BRF0uaXZhbCA9IGtyYjVfZF9ub19hZGRyZXNzZXM7Ci0KLSAgICAg ICAgLyogTWFrZSBoZWxwIG1lc3NhZ2UgdGhhdCBzaG93cyBzd2l0Y2hlcyBhbmQgYWN0aW9uIGtl eXdvcmRzICovCi0gICAgICAgIGNrc3RybmNweSh0bXBobHAsIktlcmJlcm9zIDUgYWN0aW9uLCBv bmUgb2YgdGhlIGZvbGxvd2luZzpcbiAiLDI1Nik7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBr cmJfYV9uOyBpKyspIHsKLSAgICAgICAgICAgIGNrc3RybmNhdCh0bXBobHAsa3JiX2FfdGJsW2ld Lmt3ZCxzaXplb2YodG1waGxwKSk7Ci0gICAgICAgICAgICBpZiAoaSA9PSBrcmJfYV9uIC0gMSkK LSAgICAgICAgICAgICAgY2tzdHJuY2F0KHRtcGhscCwiXG5vciBzd2l0Y2giLHNpemVvZih0bXBo bHApKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgY2tzdHJuY2F0KHRtcGhscCwi ICAgIixzaXplb2YodG1waGxwKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogU2V0IHVwIGZpcnN0 IHNldCBvZiBjaGFpbmVkIEZEQidzICovCi0KLSAgICAgICAgY21mZGJpKCZzdywgICAgICAgICAg ICAgICAgICAgICAvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICovCi0gICAgICAgICAg ICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgICAg IHRtcGhscCwgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0IChub25lKSAqLwotICAgICAgICAgICAg ICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAg ICAgICAgICAgICBrcmJfc19uLCAgICAgICAgICAgICAgICAgLyogU3dpdGNoIHRhYmxlIHNpemUg Ki8KLSAgICAgICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0gICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAg ICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAga3JiX3Nf dGJsLCAgICAgICAgICAgICAgIC8qIFN3aXRjaCB0YWJsZSAqLwotICAgICAgICAgICAgICAgJmt3 ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAg ICAgICAgICk7Ci0gICAgICAgIGNtZmRiaSgma3csICAgICAgICAgICAgICAgICAgICAgLyogU2Vj b25kIEZEQiAtIGFjdGlvbiBrZXl3b3JkcyAqLwotICAgICAgICAgICAgICAgX0NNS0VZLCAgICAg ICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICAgICAiS2VyYmVyb3MgYWN0aW9u IiwgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAg ICAgICAgLyogZGVmYXVsdCAobm9uZSkgKi8KLSAgICAgICAgICAgICAgICIiLCAgICAgICAgICAg ICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAgICAga3JiX2Ff biwgICAgICAgICAgICAgICAgIC8qIFN3aXRjaCB0YWJsZSBzaXplICovCi0gICAgICAgICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtIGRhdGEgKDAgPSBOT1Qgc3dp dGNoKSAqLwotICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgIC8qIFByb2Nl c3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgICAgIGtyYl9hX3RibCwgICAgICAgICAgICAg ICAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAg ICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAobm9uZSkgKi8KLSAgICAgICAgICAgICAgICk7 Ci0KLSAgICAgICAgLyogUGFyc2UgKi8KLQotICAgICAgICB3aGlsZSAoMSkgeyAgICAgICAgICAg ICAgICAgICAgIC8qIFBhcnNlIDAgb3IgbW9yZSBzd2l0Y2hlcyAqLwotICAgICAgICAgICAgcmMg PSBjbWZkYigmc3cpOyAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLwotICAgICAgICAg ICAgZGVidWcoRjEwMSwia2VyYmVyb3MgY21mZGIgMSByYyIsIiIscmMpOwotICAgICAgICAgICAg aWYgKHJjIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgKi8KLSAgICAgICAg ICAgICAgICBpZiAocmMgPT0gLTMpCi0gICAgICAgICAgICAgICAgICBwcmludGYoIj9BY3Rpb24g bm90IHNwZWNpZmllZCAtIG5vdGhpbmcgaGFwcGVucy5cbiIpOwotICAgICAgICAgICAgICAgIHJl dHVybihyYyk7ICAgICAgICAgICAgIC8qIG9yIHJlcGFyc2UgbmVlZGVkICovCi0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBpZiAoY21yZXN1bHQuZmRiYWRkciAhPSAmc3cpIC8qIEJyZWFrIG91 dCBpZiBub3QgYSBzd2l0Y2ggKi8KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj ID0gY21nYnJrKCk7ICAgICAgICAgICAgICAgLyogSGF2ZSBzd2l0Y2ggLSBnZXQgYnJlYWsgY2hh cmFjdGVyICovCi0gICAgICAgICAgICBnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpOyAv KiBNdXN0IHBhcnNlIGFuIGFndW1lbnQ/ICovCi0gICAgICAgICAgICBpZiAoZ2V0dmFsICYmICEo Y21yZXN1bHQua2ZsYWdzICYgQ01fQVJHKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1Ro aXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYXJndW1lbnRzXG4iKTsKLSAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOyAgICAgICAgICAgICAvKiBPSyBiZWNhdXNlIG5vdGhpbmcgbWFsbG9jJ2QgeWV0 ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdz KCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVx dWlyZXMgYW4gYXJndW1lbnRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBuID0gY21yZXN1bHQubnJlc3VsdDsgICAgICAgLyogTnVt ZXJpYyByZXN1bHQgPSBzd2l0Y2ggdmFsdWUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImtl cmJlcm9zIGNvbW1hbmQgc3dpdGNoIiwiIixuKTsKLQotICAgICAgICAgICAgc3dpdGNoIChuKSB7 ICAgICAgICAgICAgICAgIC8qIEhhbmRsZSB0aGUgc3dpdGNoICovCi0gICAgICAgICAgICAgIGNh c2UgS1JCX1NfQ0E6ICAgICAgICAgICAgLyogL0NBQ0hFOjxmaWxlbmFtZT4gKi8KLSAgICAgICAg ICAgICAgICBwID0ga3JiNV9kX2NjID8ga3JiNV9kX2NjIDogIiI7Ci0gICAgICAgICAgICAgICAg aWYgKCh5ID0gY21vZmkoIk5hbWUgb2YgY2FjaGUgZmlsZSIscCwmcyx4eHN0cmluZykpIDwgMCkg ewotICAgICAgICAgICAgICAgICAgICBpZiAoeSA9PSAtMykKLSAgICAgICAgICAgICAgICAgICAg ICBzID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg ICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWFrZXN0 cigmdG1wY2FjaGUscyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBzd2l0Y2ggdmFsdWUg LSBpbnRlcm5hbCBlcnJvclxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsgICAgICAg ICAgICAgLyogKGlmKSBub3RoaW5nIG1hbGxvYydkIHlldC4gKi8KLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotICAgICAgICBpZiAoY21yZXN1bHQuZmRiYWRkciAhPSAma3cpIHsgIC8qIENoZWNr aW5nLi4uICovCi0gICAgICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIHJlc3VsdCAtIGludGVy bmFsIGVycm9yXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7ICAgICAgICAgICAgICAgICAv KiBOb3RoaW5nIG1hbGxvYydkIHlldC4gKi8KLSAgICAgICAgfQotICAgICAgICBuID0gY21yZXN1 bHQubnJlc3VsdDsgICAgICAgICAgIC8qIEdldCBrZXl3b3JkIHZhbHVlICovCi0gICAgfSBlbHNl IHsKLSAgICAgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBLZXJiZXJvcyB2ZXJzaW9uIC0gSW50ZXJu YWwgZXJyb3JcbiIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAx LCJrZXJiZXJvcyBhY3Rpb24iLCIiLG4pOwotICAgIHN3aXRjaCAobikgewotICAgICAgY2FzZSBL UkJfQV9JTjogICAgICAgICAgICAgICAgICAgIC8qIElOSVRJQUxJWkUgKi8KLSAgICAgIGNhc2Ug S1JCX0FfREU6ICAgICAgICAgICAgICAgICAgICAvKiBERVNUUk9ZICovCi0gICAgICBjYXNlIEtS Ql9BX0xDOiAgICAgICAgICAgICAgICAgICAgLyogTElTVC1DUkVERU5USUFMUyAqLwotICAgICAg ICB0bXBfYWN0aW9uID0gbjsgICAgICAgICAgICAgICAgIC8qIE9LLCBzZXQgKi8KLSAgICAgICAg YnJlYWs7Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IE9L LCBwdW50LiAqLwotICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIGFjdGlvbiAtIGludGVybmFs IGVycm9yXG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKHRtcF9hY3Rp b24gPT0gS1JCX0FfSU4pIHsgICAgICAgLyogQWN0aW9uIGlzIElOSVRJQUxJWkUgKi8KLSAgICAg ICAgaW50IHg7Ci0gICAgICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAgLyogSU5J VElBTElaRSBzd2l0Y2hlcyAqLwotICAgICAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAg ICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICAgICAiUHJpbmNpcGFsLFxuIG9yIG9wdGlvbmFs IElOSVRJQUxJWkUgc3dpdGNoKGVzKSIsIC8qIGhscG1zZyAqLwotICAgICAgICAgICAgICAgIiIs ICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKG5vbmUpICovCi0gICAgICAgICAgICAg ICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAg ICAgICAgICAgIGt2ID09IDQgPyAga3JiNF9pX24gOiBrcmI1X2lfbiwgLyogU3dpdGNoIHRhYmxl IHNpemUgKi8KLSAgICAgICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0 bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0gICAgICAgICAgICAgICB4eHN0cmluZywg ICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAg a3YgPT0gNCA/ICBrcmI0X2lfdGJsIDoga3JiNV9pX3RibCwgICAgICAvKiBTd2l0Y2ggdGFibGUg Ki8KLSAgICAgICAgICAgICAgICZmbCAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRv IG5leHQgRkRCICovCi0gICAgICAgICAgICAgICApOwotICAgICAgICBjbWZkYmkoJmZsLCAgICAg ICAgICAgICAgICAgICAgIC8qIDNyZCBGREIgLSBjb21tYW5kIHRvIHNlbmQgZnJvbSAqLwotICAg ICAgICAgICAgICAgX0NNRkxELCAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAg ICAgICAgICAiUHJpbmNpcGFsIiwgICAgICAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAg ICAgICBrdiA9PSA0ID8ga3JiNF9kX3ByaW5jaXBhbCA6IGtyYjVfZF9wcmluY2lwYWwsIC8qIHBy aW5jaXBhbCAqLwotICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGFk ZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLSAgICAgICAgICAgICAgIDAsICAgICAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotICAgICAgICAgICAgICAg eHhzdHJpbmcsCi0gICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgTlVMTAotICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAv KiBQYXJzZSBJTklUIHN3aXRjaGVzIG9yIHByaW5jaXBhbCAqLwotICAgICAgICAgICAgcmMgPSBj bWZkYigmc3cpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwia2VyYmVyb3MgY21mZGIgMiByYyIs IiIscmMpOwotICAgICAgICAgICAgaWYgKHJjIDwgMCkgewotICAgICAgICAgICAgICAgIGlmIChy YyA9PSAtMykKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiP1ByaW5jaXBhbCBuYW1lIHJlcXVp cmVkXG4iKTsKLSAgICAgICAgICAgICAgICBnb3RvIGtlcmJ4OwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgZGVidWcoRjEwMSwia2VyYmVyb3MgY21mZGIgMiBmY29kZSIsIiIsY21yZXN1bHQu ZmNvZGUpOwotICAgICAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkgLyogTm90 IGEgc3dpdGNoLCBxdWl0IHN3aXRjaCBsb29wICovCi0gICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgYyA9IGNtZ2JyaygpOyAgICAgICAgICAgICAgIC8qIFN3aXRjaCAtIGdldCBicmVh ayBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImtlcmJlcm9zIGNtZmRiIDIg Y21nYnJrIiwiIixjKTsKLSAgICAgICAgICAgIGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9 Jyk7Ci0gICAgICAgICAgICBpZiAoZ2V0dmFsICYmICEoY21yZXN1bHQua2ZsYWdzICYgQ01fQVJH KSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2Ug YXJndW1lbnRzXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOyAgICAgICAgICAgICAv KiBPSyBiZWNhdXNlIG5vdGhpbmcgbWFsbG9jJ2QgeWV0ICovCi0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAg ICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwot ICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBu ID0gY21yZXN1bHQubnJlc3VsdDsgICAgICAgLyogTnVtZXJpYyByZXN1bHQgPSBzd2l0Y2ggdmFs dWUgKi8KLSAgICAgICAgICAgIHN3aXRjaCAobikgewotICAgICAgICAgICAgICAvKiBUaGVzZSBk b24ndCB0YWtlIGFyZ3MuLi4gKi8KLSAgICAgICAgICAgICAgY2FzZSBLUkJfSV9QQTogICAgICAg ICAgICAvKiAvUFJFQVVUSCAqLwotICAgICAgICAgICAgICBjYXNlIEtSQl9JX0ZXOiAgICAgICAg ICAgIC8qIC9GT1JXQVJEQUJMRSAqLwotICAgICAgICAgICAgICBjYXNlIEtSQl9JX1BSOiAgICAg ICAgICAgIC8qIC9QUk9YSUFCTEUgKi8KLSAgICAgICAgICAgICAgY2FzZSBLUkJfSV9STjogICAg ICAgICAgICAvKiAvUkVORVcgKi8KLSAgICAgICAgICAgICAgY2FzZSBLUkJfSV9WQTogICAgICAg ICAgICAvKiAvVkFMSURBVEUgKi8KLSAgICAgICAgICAgICAgY2FzZSBLUkJfSV9OUEE6ICAgICAg ICAgICAvKiAvTk9ULVBSRUFVVEggKi8KLSAgICAgICAgICAgICAgY2FzZSBLUkJfSV9ORlc6ICAg ICAgICAgICAvKiAvTk9ULUZPUldBUkRBQkxFICovCi0gICAgICAgICAgICAgIGNhc2UgS1JCX0lf TlBSOiAgICAgICAgICAgLyogL05PVC1QUk9YSUFCTEUgKi8KLSAgICAgICAgICAgICAgY2FzZSBL UkJfSV9WQjogICAgICAgICAgICAvKiAvVkVSQk9TRSAqLwotICAgICAgICAgICAgICBjYXNlIEtS Ql9JX0JSOiAgICAgICAgICAgIC8qIC9CUklFRiAqLwotICAgICAgICAgICAgICBjYXNlIEtSQl9J X0s0OiAgICAgICAgICAgIC8qIC9LRVJCRVJPUzQgKi8KLSAgICAgICAgICAgICAgY2FzZSBLUkJf SV9OSzQ6ICAgICAgICAgICAvKiAvTk8tS0VSQkVST1M0ICovCi0gICAgICAgICAgICAgIGNhc2Ug S1JCX0lfUE9QOiAgICAgICAgICAgLyogL1BPUFVQICovCi0gICAgICAgICAgICAgIGNhc2UgS1JC X0lfTkFEOiAgICAgICAgICAgLyogL05PLUFERFJFU1NFUyAqLwotICAgICAgICAgICAgICAgIGlm IChnZXR2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9l cyBub3QgdGFrZSBhIHZhbHVlXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAtOTsKLSAg ICAgICAgICAgICAgICAgICAgZ290byBrZXJieDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgc3dpdGNoIChuKSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEtSQl9JX05QQToK LSAgICAgICAgICAgICAgICAgICAgcHZbS1JCX0lfUEFdLml2YWwgPSAwOwotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgS1JCX0lfTkZXOgotICAgICAg ICAgICAgICAgICAgICBwdltLUkJfSV9GV10uaXZhbCA9IDA7Ci0gICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBLUkJfSV9OUFI6Ci0gICAgICAgICAgICAg ICAgICAgIHB2W0tSQl9JX1BSXS5pdmFsID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICBjYXNlIEtSQl9JX1ZCOgotICAgICAgICAgICAgICAgICAgICBw dltLUkJfSV9CUl0uaXZhbCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgY2FzZSBLUkJfSV9OSzQ6Ci0gICAgICAgICAgICAgICAgICAgIHB2W0tSQl9J X0s0XS5pdmFsID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAv KiBUaGVzZSBkbyB0YWtlIGFyZ3VtZW50cyAqLwotCi0gICAgICAgICAgICAgIGNhc2UgS1JCX0lf UkI6ICAgICAgICAgICAgLyogL1JFTkVXQUJMRTo8bWludXRlcz4gKi8KLSAgICAgICAgICAgICAg ICBwdltuXS5pdmFsID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgaWYgKChyYyA9IGNtbnVtKCJNaW51dGVzIixja2l0b2Eoa3JiNV9pbml0 LnJlbmV3YWJsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLCZ5LCB4eHN0 cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgIGdvdG8ga2VyYng7Ci0gICAgICAgICAgICAg ICAgcHZbbl0uaXZhbCA9IHk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg ICAgY2FzZSBLUkJfSV9MRjogICAgICAgICAgICAvKiAvTElGRVRJTUU6PG1pbnV0ZXM+ICovCi0g ICAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDA7Ci0gICAgICAgICAgICAgICAgLyogRGVmYXVs dCBpcyBwcmV2aW91cyB2YWx1ZSAqLwotICAgICAgICAgICAgICAgIHNwcmludGYodG1wYnVmLCIl ZCIsICAgIC8qIFNBRkUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGt2ID09IDQgPwotICAg ICAgICAgICAgICAgICAgICAgICAga3JiNF9pbml0LmxpZmV0aW1lIDoKLSAgICAgICAgICAgICAg ICAgICAgICAgIGtyYjVfaW5pdC5saWZldGltZQotICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYg KChyYyA9IGNtbnVtKCJNaW51dGVzIix0bXBidWYsMTAsJnksIHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgICAgICAgICAgZ290byBrZXJieDsKLSAgICAgICAgICAgICAgICBwdltuXS5pdmFsID0g eTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBjYXNlIEtSQl9JX1BE OiAgICAgICAgICAgIC8qIC9QT1NUREFURTo8dGltZXN0YW1wPiAqLwotICAgICAgICAgICAgICAg IGlmIChwdltuXS5zdmFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUocHZbbl0uc3ZhbCk7 Ci0gICAgICAgICAgICAgICAgICAgIHB2W25dLnN2YWwgPSBOVUxMOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAg aWYgKChyYyA9IGNtZGF0ZSgiZGF0ZS10aW1lIiwiIiwmcywwLHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgICAgICAgICAgZ290byBrZXJieDsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCYocHZb bl0uc3ZhbCkscyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgY2Fz ZSBLUkJfSV9TUjogICAgICAgICAgICAvKiAvU0VSVklDRTo8bmFtZT4gKi8KLSAgICAgICAgICAg ICAgICBpZiAocHZbbl0uc3ZhbCkgewotICAgICAgICAgICAgICAgICAgICBmcmVlKHB2W25dLnN2 YWwpOwotICAgICAgICAgICAgICAgICAgICBwdltuXS5zdmFsID0gTlVMTDsKLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAg ICAgIGlmICgocmMgPSBjbWZsZCgiU2VydmljZS1uYW1lIiwiIiwmcyx4eHN0cmluZykpIDwgMCkK LSAgICAgICAgICAgICAgICAgIGdvdG8ga2VyYng7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigm KHB2W25dLnN2YWwpLHMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAg IGNhc2UgS1JCX0lfUkw6ICAgICAgICAgICAgLyogL1JFQUxNOjxuYW1lPiAqLwotICAgICAgICAg ICAgICAgIGlmIChwdltuXS5zdmFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUocHZbbl0u c3ZhbCk7Ci0gICAgICAgICAgICAgICAgICAgIHB2W25dLnN2YWwgPSBOVUxMOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgaWYgKGt2ID09IDQpCi0gICAgICAgICAgICAgICAgICBwID0ga3JiNF9kX3JlYWxtID8g a3JiNF9kX3JlYWxtIDogIiI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg ICAgcCA9IGtyYjVfZF9yZWFsbSA/IGtyYjVfZF9yZWFsbSA6ICIiOwotICAgICAgICAgICAgICAg IGlmICgocmMgPSBjbWZsZCgiUmVhbG0iLHAsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAg ICAgICAgICBnb3RvIGtlcmJ4OwotICAgICAgICAgICAgICAgIG1ha2VzdHIoJihwdltuXS5zdmFs KSxzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBjYXNlIEtSQl9J X0lOOiAgICAgICAgICAgIC8qIC9JTlNUQU5DRTo8bmFtZT4gKi8KLSAgICAgICAgICAgICAgICBp ZiAocHZbbl0uc3ZhbCkgewotICAgICAgICAgICAgICAgICAgICBmcmVlKHB2W25dLnN2YWwpOwot ICAgICAgICAgICAgICAgICAgICBwdltuXS5zdmFsID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgICAgIGlm IChrdiA9PSA0KQotICAgICAgICAgICAgICAgICAgICBwID0ga3JiNF9kX2luc3RhbmNlID8ga3Ji NF9kX2luc3RhbmNlIDogIiI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg ICAgICBwID0ga3JiNV9kX2luc3RhbmNlID8ga3JiNV9kX2luc3RhbmNlIDogIiI7Ci0gICAgICAg ICAgICAgICAgaWYgKChyYyA9IGNtZmxkKCJJbnN0YW5jZSIscCwmcyx4eHN0cmluZykpIDwgMCkK LSAgICAgICAgICAgICAgICAgIGdvdG8ga2VyYng7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigm KHB2W25dLnN2YWwpLHMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAg IGNhc2UgS1JCX0lfUFc6ICAgICAgICAgICAgLyogL1BBU1NXT1JEOjxwYXNzd29yZD4gKi8KLSAg ICAgICAgICAgICAgICBkZWJvayA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwp IHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZShwdltuXS5zdmFsKTsKLSAgICAgICAgICAgICAg ICAgICAgcHZbbl0uc3ZhbCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIGlmICghZ2V0dmFsKSBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoKHJjID0gY21mbGQo IlBhc3N3b3JkIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgIGlmIChy YyAhPSAtMykKLSAgICAgICAgICAgICAgICAgICAgZ290byBrZXJieDsKLSAgICAgICAgICAgICAg ICBtYWtlc3RyKCYocHZbbl0uc3ZhbCkscyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg ICAgICAgICAgICAgY2FzZSBLUkJfSV9BRFI6ICAgICAgICAgICAvKiAvQUREUkVTU0VTOns8YWRk cmVzcy1saXN0Pn0gKi8KLSAgICAgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkgewotICAgICAg ICAgICAgICAgICAgICBmcmVlKHB2W25dLnN2YWwpOwotICAgICAgICAgICAgICAgICAgICBwdltu XS5zdmFsID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFn ZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmICgocmMgPSBjbWZsZCgiTGlzdCBvZiBJ UCBhZGRyZXNzZXMiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgZ290 byBrZXJieDsKLSAgICAgICAgICAgICAgICBtYWtlbGlzdChzLHRtcGFkZHJzLEtSQjVfTlVNX09G X0FERFJTKTsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgS1JCNV9OVU1fT0ZfQURE UlMgJiYgdG1wYWRkcnNbaV07IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5ldF9h ZGRyKHRtcGFkZHJzW2ldKSA9PSAweGZmZmZmZmZmKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoImludmFsaWQgaXAgYWRkcmVzczogJXNcbiIsdG1wYWRkcnNbaV0pOwotICAgICAg ICAgICAgICAgICAgICAgICAgcmMgPSAtOTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g a2VyYng7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgcHZbS1JCX0lfTkFEXS5pdmFsID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsK LQotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHByaW50ZigiP1VuZXhw ZWN0ZWQgc3dpdGNoIHZhbHVlIC0gaW50ZXJuYWwgZXJyb3JcbiIpOwotICAgICAgICAgICAgICAg IHJjID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byBrZXJieDsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNRkxEKSB7Ci0gICAgICAg ICAgICBwcmludGYoIj9VbmV4ZWN0ZWQgcmVzdWx0IC0gaW50ZXJuYWwgZXJyb3JcbiIpOwotICAg ICAgICAgICAgcmMgPSAtOTsKLSAgICAgICAgICAgIGdvdG8ga2VyYng7Ci0gICAgICAgIH0KLSAg ICAgICAgLyogY21yZXN1bHQuc3Jlc3VsdCBtYXkgYmUgb2YgdGhlIGZvcm0gUFJJTkNJUEFMQFJF QUxNICovCi0gICAgICAgIGkgPSBja2luZGV4KCJAIixjbXJlc3VsdC5zcmVzdWx0LDAsMCwwKTsK LSAgICAgICAgaWYgKGkgIT0gMCkgewotICAgICAgICAgICAgbWFrZXN0cigmdG1wcmVhbG0sJmNt cmVzdWx0LnNyZXN1bHRbaV0pOwotICAgICAgICAgICAgY21yZXN1bHQuc3Jlc3VsdFtpLTFdID0g J1wwJzsKLSAgICAgICAgfQotICAgICAgICBtYWtlc3RyKCZ0bXBwcmlueixjbXJlc3VsdC5zcmVz dWx0KTsgLyogUHJpbmNpcGFsICh1c2VyKSAqLwotCi0gICAgICAgIGlmICgocmMgPSBjbWNmbSgp KSA8IDApIHsgICAgICAgLyogTm93IGdldCBjb25maXJtYXRpb24gKi8KLSAgICAgICAgICAgIGlm IChyYyA9PSAtMykgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1ByaW5jaXBhbCBuYW1lIHJl cXVpcmVkXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdvdG8ga2VyYng7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKCF0bXBwcmlueiB8fCAhdG1wcHJpbnpbMF0pIHsKLSAgICAgICAg ICAgIHByaW50ZigiP1ByaW5jaXBhbCBuYW1lIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgIGdv dG8ga2VyYng7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFwdltLUkJfSV9STl0uaXZhbCAmJiAh cHZbS1JCX0lfVkFdLml2YWwpIHsKLSAgICAgICAgICAgIC8qIERvbid0IHVzZSBhIHBhc3N3b3Jk IGlmIFZhbGlkYXRpbmcgb3IgUmVuZXdpbmcgKi8KLSAgICAgICAgICAgIGlmIChwdltLUkJfSV9Q V10uc3ZhbCkgeyAgICAvKiBJZiB0aGV5IGdhdmUgYSAvUEFTU1dPUkQgc3dpdGNoICovCi0gICAg ICAgICAgICAgICAgbWFrZXN0cigmdG1wcHN3ZCxwdltLUkJfSV9QV10uc3ZhbCk7IC8qIHVzZSB0 aGlzIHZhbHVlICovCi0gICAgICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAg LyogUGFzc3dvcmQgcHJvbXB0aW5nIGhhcyBiZWVuIG1vdmVkIHRvIGNrX2tyYls0NV1faW5pdFRH VCgpICovCi0gICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3 aXNlIG11c3QgcHJvbXB0IGZvciBpdCAqLwotICAgICAgICAgICAgICAgIGNoYXIgcHJtcHRbODBd OwotICAgICAgICAgICAgICAgIGlmIChwdltLUkJfSV9STF0uc3ZhbCkKLSAgICAgICAgICAgICAg ICAgIHNwcmludGYocHJtcHQsIiVzQCVzJ3MgUGFzc3dvcmQ6ICIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIHRtcHByaW56LHB2W0tSQl9JX1JMXS5zdmFsKTsKLSAgICAgICAgICAgICAgICBl bHNlIGlmICh0bXByZWFsbSkKLSAgICAgICAgICAgICAgICAgIHNwcmludGYocHJtcHQsIiVzQCVz J3MgUGFzc3dvcmQ6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHByaW56LHRtcHJl YWxtKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBzcHJpbnRmKHBy bXB0LCIlcydzIFBhc3N3b3JkOiAiLHRtcHByaW56KTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAg ICAgICBpZiAocHZbS1JCX0lfUE9QXS5pdmFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIg cGFzc3dkWzgwXT0iIjsKLSAgICAgICAgICAgICAgICAgICAgcmVhZHBhc3MocHJtcHQscGFzc3dk LDgwKTsKLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmdG1wcHN3ZCxwYXNzd2QpOwotICAg ICAgICAgICAgICAgICAgICBtZW1zZXQocGFzc3dkLDAsODApOwotICAgICAgICAgICAgICAgIH0g ZWxzZQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIHsKLSNpZmRlZiBDS19SRUNB TEwKLSAgICAgICAgICAgICAgICAgICAgb25fcmVjYWxsID0gMDsKLSNlbmRpZiAvKiBDS19SRUNB TEwgKi8KLSAgICAgICAgICAgICAgICAgICAgY21zYXZwKHBzYXZlLFBST01QVEwpOyAvKiBTYXZl IG9sZCBwcm9tcHQgKi8KLSAgICAgICAgICAgICAgICAgICAgY21zZXRwKHBybXB0KTsgICAgICAv KiBNYWtlIG5ldyBwcm9tcHQgKi8KLSAgICAgICAgICAgICAgICAgICAgY29uY2IoKGNoYXIpZXNj YXBlKTsgLyogUHV0IGNvbnNvbGUgaW4gY2JyZWFrIG1vZGUgKi8KLSAgICAgICAgICAgICAgICAg ICAgY21pbmkoMCk7ICAgICAgICAgICAvKiBhbmQgbm8tZWNobyBtb2RlICovCi0gICAgICAgICAg ICAgICAgICAgIC8qIElzc3VlIHByb21wdCBpZiBhdCB0b3AgbGV2ZWwgKi8KLSAgICAgICAgICAg ICAgICAgICAgaWYgKHBmbGFnKSBwcm9tcHQoeHhzdHJpbmcpOwotICAgICAgICAgICAgICAgICAg ICBjbXJlcygpOyAgICAgICAgICAgIC8qIFJlc2V0IHRoZSBwYXJzZXIgKi8KLSAgICAgICAgICAg ICAgICAgICAgZm9yIChyYyA9IC0xOyByYyA8IDA7ICkgeyAvKiBQcm9tcHQgdGlsbCB0aGV5IGFu c3dlciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IGEgbGl0ZXJhbCBsaW5lIG9m IHRleHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gY210eHQoIiIsIiIsJnMsTlVM TCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbXJlcygpOyAgICAgICAgLyogUmVzZXQgdGhl IHBhcnNlciBhZ2FpbiAqLwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgIG1ha2VzdHIoJnRtcHBzd2Qscyk7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4i KTsgICAgICAgLyogRWNobyBhIENSTEYgKi8KLSAgICAgICAgICAgICAgICAgICAgY21zZXRwKHBz YXZlKTsgICAgICAvKiBSZXN0b3JlIG9yaWdpbmFsIHByb21wdCAqLwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAg ICAvKiBDaGVjayBmb3IgcGFzc3dvcmQgKi8KLSAgICAgICAgICAgIGlmICh0bXBwc3dkKQotICAg ICAgICAgICAgICBpZiAoKnRtcHBzd2QpCi0gICAgICAgICAgICAgICAgeCA9IDE7Ci0gICAgICAg ICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9QYXNzd29yZCByZXF1aXJl ZFxuIik7Ci0gICAgICAgICAgICAgICAgZ290byBrZXJieDsKLSAgICAgICAgICAgIH0KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGt2ID09IDUgJiYgdG1w X2FjdGlvbiA9PSBLUkJfQV9MQykgeyAvKiBMSVNULUNSRURFTlRJQUxTICovCi0gICAgICAgIHRt cF9rbGMgPSAwOwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgaWYgKCh4ID0gY21r ZXkoa2xjdGFiLG5rbGN0YWIsIlN3aXRjaCIsIiIseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAg ICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgICAgICBpZiAoKHJjID0gY21j Zm0oKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgIGdvdG8ga2VyYng7Ci0gICAgICAgICAg ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByYyA9IHg7Ci0gICAgICAgICAgICAg ICAgICAgIGdvdG8ga2VyYng7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg ICAgICAgICAgdG1wX2tsYyB8PSB4OwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgocmMgPSBj bWNmbSgpKSA8IDApICAgICAgLyogREVTVFJPWSwganVzdCBjb25maXJtICovCi0gICAgICAgIGdv dG8ga2VyYng7Ci0KLS8qIERvbmUgLSBNb3ZlIGNvbmZpcm1lZCBkYXRhIHRvIGZpbmFsIGxvY2F0 aW9ucyAqLwotCi0gICAga3JiX2FjdGlvbiA9IHRtcF9hY3Rpb247ICAgICAgICAgICAgLyogQWN0 aW9uIHJlcXVlc3RlZCAqLwotICAgIGtyYl9vcC52ZXJzaW9uID0ga3Y7ICAgICAgICAgICAgICAg IC8qIEtlcmJlcm9zIHZlcnNpb24gKi8KLSAgICBrcmJfb3AuY2FjaGUgPSB0bXBjYWNoZTsgICAg ICAgICAgICAvKiBDYWNoZSBmaWxlICovCi0gICAgdG1wY2FjaGUgPSBOVUxMOyAgICAgICAgICAg ICAgICAgICAgLyogU28gd2UgZG9uJ3QgZnJlZSBpdCAqLwotCi0gICAgc3dpdGNoIChrcmJfYWN0 aW9uKSB7Ci0gICAgICBjYXNlIEtSQl9BX0lOOiAgICAgICAgICAgICAgICAgICAgLyogSU5JVElB TElaRSAqLwotICAgICAgICBpZiAoa3YgPT0gNSkgewotICAgICAgICAgICAga3JiNV9pbml0LmZv cndhcmRhYmxlID0gcHZbS1JCX0lfRlddLml2YWw7Ci0gICAgICAgICAgICBrcmI1X2luaXQucHJv eGlhYmxlICAgPSBwdltLUkJfSV9QUl0uaXZhbDsKLSAgICAgICAgICAgIGtyYjVfaW5pdC5saWZl dGltZSAgICA9IHB2W0tSQl9JX0xGXS5pdmFsOwotICAgICAgICAgICAga3JiNV9pbml0LnJlbmV3 ICAgICAgID0gcHZbS1JCX0lfUk5dLml2YWw7Ci0gICAgICAgICAgICBrcmI1X2luaXQucmVuZXdh YmxlICAgPSBwdltLUkJfSV9SQl0uaXZhbDsKLSAgICAgICAgICAgIGtyYjVfaW5pdC52YWxpZGF0 ZSAgICA9IHB2W0tSQl9JX1ZBXS5pdmFsOwotCi0gICAgICAgICAgICAvKiBIZXJlIHdlIGp1c3Qg cmVhc3NpZ24gdGhlIHBvaW50ZXJzIGFuZCB0aGVuIHNldCB0aGVtIHRvIE5VTEwgKi8KLSAgICAg ICAgICAgIC8qIHNvIHRoZXkgd29uJ3QgYmUgZnJlZWQgYmVsb3cuICovCi0KLSAgICAgICAgICAg IGtyYjVfaW5pdC5wb3N0ZGF0ZSA9IHB2W0tSQl9JX1BEXS5zdmFsOyBwdltLUkJfSV9QRF0uc3Zh bCA9IE5VTEw7Ci0gICAgICAgICAgICBrcmI1X2luaXQuc2VydmljZSAgPSBwdltLUkJfSV9TUl0u c3ZhbDsgcHZbS1JCX0lfU1JdLnN2YWwgPSBOVUxMOwotICAgICAgICAgICAgaWYgKHB2W0tSQl9J X1JMXS5zdmFsKSB7Ci0gICAgICAgICAgICAgICAga3JiNV9pbml0LnJlYWxtICA9IHB2W0tSQl9J X1JMXS5zdmFsOyBwdltLUkJfSV9STF0uc3ZhbCA9IE5VTEw7Ci0gICAgICAgICAgICB9IGVsc2Ug aWYgKHRtcHJlYWxtKSB7Ci0gICAgICAgICAgICAgICAga3JiNV9pbml0LnJlYWxtID0gdG1wcmVh bG07IHRtcHJlYWxtID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwdltL UkJfSV9JTl0uc3ZhbCkgewotICAgICAgICAgICAgICAgIGtyYjVfaW5pdC5pbnN0YW5jZSA9IHB2 W0tSQl9JX0lOXS5zdmFsOwotICAgICAgICAgICAgICAgIHB2W0tSQl9JX0lOXS5zdmFsID0gTlVM TDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIHRtcGluc3QgKSB7Ci0gICAgICAgICAgICAgICAg a3JiNV9pbml0Lmluc3RhbmNlID0gdG1waW5zdDsKLSAgICAgICAgICAgICAgICB0bXBpbnN0ID0g TlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0bXBwcmlueikgewotICAgICAg ICAgICAgICAgIGtyYjVfaW5pdC5wcmluY2lwYWwgPSB0bXBwcmluejsKLSAgICAgICAgICAgICAg ICB0bXBwcmlueiA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBrcmI1X2luaXQu cGFzc3dvcmQgPSB0bXBwc3dkOwotICAgICAgICAgICAgdG1wcHN3ZCA9IE5VTEw7Ci0KLSAgICAg ICAgICAgIGtyYjVfaW5pdC5nZXRrNCA9IHB2W0tSQl9JX0s0XS5pdmFsOwotICAgICAgICAgICAg aWYgKGtyYjVfaW5pdC5nZXRrNCkgewotICAgICAgICAgICAgICAgIGtyYjRfaW5pdC5saWZldGlt ZSA9IHB2W0tSQl9JX0xGXS5pdmFsOwotICAgICAgICAgICAgICAgIGlmIChrcmI1X2luaXQucmVh bG0pCi0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRfaW5pdC5yZWFsbSxrcmI1X2lu aXQucmVhbG0pOwotICAgICAgICAgICAgICAgIGtyYjRfaW5pdC5wcmVhdXRoICA9IGtyYjRfZF9w cmVhdXRoOwotICAgICAgICAgICAgICAgIGtyYjRfaW5pdC52ZXJib3NlICA9IHB2W0tSQl9JX0JS XS5pdmFsID8gMCA6IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGtyYjVfaW5pdC5wcmluY2lwYWwp Ci0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRfaW5pdC5wcmluY2lwYWwsa3JiNV9p bml0LnByaW5jaXBhbCk7Ci0gICAgICAgICAgICAgICAgaWYgKGtyYjVfaW5pdC5wcmluY2lwYWwp Ci0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRfaW5pdC5wYXNzd29yZCxrcmI1X2lu aXQucGFzc3dvcmQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAga3JiNV9pbml0Lm5vX2Fk ZHJlc3NlcyA9IHB2W0tSQl9JX05BRF0uaXZhbDsKLSAgICAgICAgICAgIGlmICh0bXBhZGRyc1sw XSkgewotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBLUkI1X05VTV9PRl9BRERSUzsg aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrcmI1X2luaXQuYWRkcnNbaV0pIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGZyZWUoa3JiNV9pbml0LmFkZHJzW2ldKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGtyYjVfaW5pdC5hZGRyc1tpXSA9IE5VTEw7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAga3JiNV9pbml0LmFkZHJzW2ldID0gdG1wYWRk cnNbaV07Ci0gICAgICAgICAgICAgICAgICAgIHRtcGFkZHJzW2ldID0gTlVMTDsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoa3YgPT0gNCkgeyAg ICAgICAgICAgLyogU2FtZSBkZWFsIGZvciBLZXJiZXJvcyA0ICovCi0gICAgICAgICAgICBrcmI0 X2luaXQubGlmZXRpbWUgPSBwdltLUkJfSV9MRl0uaXZhbDsKLSAgICAgICAgICAgIGlmIChwdltL UkJfSV9STF0uc3ZhbCkgewotICAgICAgICAgICAgICAgIGtyYjRfaW5pdC5yZWFsbSAgPSBwdltL UkJfSV9STF0uc3ZhbDsKLSAgICAgICAgICAgICAgICBwdltLUkJfSV9STF0uc3ZhbCA9IE5VTEw7 Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCB0bXByZWFsbSApIHsKLSAgICAgICAgICAgICAgICBr cmI0X2luaXQucmVhbG0gID0gdG1wcmVhbG07Ci0gICAgICAgICAgICAgICAgdG1wcmVhbG0gPSBO VUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHB2W0tSQl9JX0lOXS5zdmFsKSB7 Ci0gICAgICAgICAgICAgICAga3JiNF9pbml0Lmluc3RhbmNlID0gcHZbS1JCX0lfSU5dLnN2YWw7 Ci0gICAgICAgICAgICAgICAgcHZbS1JCX0lfSU5dLnN2YWwgPSBOVUxMOwotICAgICAgICAgICAg fSBlbHNlIGlmICggdG1waW5zdCApIHsKLSAgICAgICAgICAgICAgICBrcmI0X2luaXQuaW5zdGFu Y2UgPSB0bXBpbnN0OwotICAgICAgICAgICAgICAgIHRtcGluc3QgPSBOVUxMOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAga3JiNF9pbml0LnByZWF1dGggID0gcHZbS1JCX0lfUEFdLml2YWw7 Ci0gICAgICAgICAgICBrcmI0X2luaXQudmVyYm9zZSAgPSBwdltLUkJfSV9CUl0uaXZhbCA/IDAg OiAxOwotCi0gICAgICAgICAgICBpZiAodG1wcHJpbnopIHsKLSAgICAgICAgICAgICAgICBrcmI0 X2luaXQucHJpbmNpcGFsID0gdG1wcHJpbno7Ci0gICAgICAgICAgICAgICAgdG1wcHJpbnogPSBO VUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAga3JiNF9pbml0LnBhc3N3b3JkID0gdG1w cHN3ZDsKLSAgICAgICAgICAgIHRtcHBzd2QgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGJy ZWFrOwotICAgICAgY2FzZSBLUkJfQV9MQzogICAgICAgICAgICAgICAgICAgIC8qIExpc3QgQ3Jl ZGVudGlhbHMgKi8KLSAgICAgICAga3JiNV9sYy5lbmNyeXB0aW9uID0gdG1wX2tsYyAmIFhZS0xD RU47Ci0gICAgICAgIGtyYjVfbGMuZmxhZ3MgPSB0bXBfa2xjICYgWFlLTENGTDsKLSAgICAgICAg a3JiNV9sYy5hZGRyICA9IHRtcF9rbGMgJiBYWUtMQ0FEOwotICAgICAgICBicmVhazsKLSAgICB9 Ci0KLS8qIENvbW1vbiBleGl0IC0gRnJlZSB0ZW1wb3Jhcnkgc3RvcmFnZSAqLwotCi0gIGtlcmJ4 OgotICAgIGZvciAoaSA9IDA7IGkgPD0gS1JCX0lfTUFYOyBpKyspIHsgIC8qIEZyZWUgbWFsbG9j J2Qgc3dpdGNoIGRhdGEgKi8KLSAgICAgICAgaWYgKHB2W2ldLnN2YWwpCi0gICAgICAgICAgZnJl ZShwdltpXS5zdmFsKTsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IEtSQjVfTlVNX09GX0FE RFJTOyBpKyspIHsKLSAgICAgICAgaWYgKHRtcGFkZHJzW2ldKQotICAgICAgICAgIGZyZWUodG1w YWRkcnNbaV0pOwotICAgIH0KLSAgICBpZiAodG1wcHJpbnopIGZyZWUodG1wcHJpbnopOyAgICAg ICAvKiBBbmQgdGhlc2UgdG9vLiAqLwotICAgIGlmICh0bXBwc3dkKSAgZnJlZSh0bXBwc3dkKTsK LSAgICBpZiAodG1wY2FjaGUpIGZyZWUodG1wY2FjaGUpOwotICAgIGlmICh0bXByZWFsbSkgZnJl ZSh0bXByZWFsbSk7Ci0gICAgaWYgKHRtcGluc3QpICBmcmVlKHRtcGluc3QpOwotCi0gICAgcmV0 dXJuKHJjKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHRoZSByZXR1cm4gY29k ZSAqLwotfQotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0KLSNpZmRlZiBDS19MT0dJTgotaW50 Ci0jaWZkZWYgQ0tfQU5TSUMKLWNreGxvZ2luKENIQVIgKiB1c2VyaWQsIENIQVIgKiBwYXNzd2Qs IENIQVIgKiBhY2N0LCBpbnQgcHJvbXB0b2spCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotY2t4bG9n aW4odXNlcmlkLCBwYXNzd2QsIGFjY3QsIHByb21wdG9rKQotICBDSEFSICogdXNlcmlkOyBDSEFS ICogcGFzc3dkOyBDSEFSICogYWNjdDsgaW50IHByb21wdG9rOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi0vKiBja3hsb2dpbiAqLyB7Ci0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgZXh0ZXJuIGludCBv bl9yZWNhbGw7ICAgICAgICAgICAgICAgLyogYXJvdW5kIFBhc3N3b3JkIHByb21wdGluZyAqLwot I2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotI2lmZGVmIENPTU1FTlQKLSAgICBleHRlcm4gaW50IGd1 ZXN0OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBpbnQgcnByb21wdCA9IDA7ICAgICAgICAg ICAgICAgICAgICAvKiBSZXN0b3JlIHByb21wdCAqLwotI2lmZGVmIENLU1lTTE9HCi0gICAgaW50 IHNhdmxvZzsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCi0gICAgZXh0ZXJuIGludCB3aGF0LCBz cnZjZG1zZzsKLQotICAgIGludCB4ID0gMCwgb2sgPSAwLCByYyA9IDA7Ci0gICAgQ0hBUiAqIF91 ID0gTlVMTCwgKiBfcCA9IE5VTEwsICogX2EgPSBOVUxMOwotCi0gICAgZGVidWcoRjExMSwiY2t4 bG9naW4gdXNlcmlkIix1c2VyaWQscHJvbXB0b2spOwotICAgIGRlYnVnKEYxMTAsImNreGxvZ2lu IHBhc3N3ZCIscGFzc3dkLDApOwotCi0gICAgaXNndWVzdCA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogR2xvYmFsICJhbm9ueW1vdXMiIGZsYWcgKi8KLQotICAgIGlmICghdXNlcmlkKSB1 c2VyaWQgPSAoQ0hBUiAqKSIiOwotICAgIGlmICghcGFzc3dkKSBwYXNzd2QgPSAoQ0hBUiAqKSIi OwotCi0gICAgZGVidWcoRjExMSwiY2t4bG9naW4gdXNlcmlkIix1c2VyaWQsd2hhdCk7Ci0KLSNp ZmRlZiBDS19SRUNBTEwKLSAgICBvbl9yZWNhbGwgPSAwOwotI2VuZGlmIC8qIENLX1JFQ0FMTCAq LwotCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBzYXZsb2cgPSBja3hzeXNsb2c7ICAgICAgICAgICAg ICAgICAvKiBTYXZlIGFuZCB0dXJuIG9mZiBzeXNsb2dnaW5nICovCi0jZW5kaWYgLyogQ0tTWVNM T0cgKi8KLQotICAgIGlmICgoISp1c2VyaWQgfHwgISpwYXNzd2QpICYmICAgICAgIC8qIE5lZWQg dG8gcHJvbXB0IGZvciBtaXNzaW5nIGluZm8gKi8KLSAgICAgICAgcHJvbXB0b2spIHsKLSAgICAg ICAgY21zYXZwKHBzYXZlLFBST01QVEwpOyAgICAgICAgICAvKiBTYXZlIG9sZCBwcm9tcHQgKi8K LSAgICAgICAgZGVidWcoRjExMCwiY2t4bG9naW4gc2F2ZWQiLHBzYXZlLDApOwotICAgICAgICBy cHJvbXB0ID0gMTsKLSAgICB9Ci0gICAgaWYgKCEqdXNlcmlkKSB7Ci0gICAgICAgIGlmICghcHJv bXB0b2spCi0gICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICBjbXNldHAoIlVzZXJuYW1lOiAi KTsgICAgICAgICAgIC8qIE1ha2UgbmV3IHByb21wdCAqLwotICAgICAgICBjb25jYigoY2hhcill c2NhcGUpOyAgICAgICAgICAgIC8qIFB1dCBjb25zb2xlIGluIGNicmVhayBtb2RlICovCi0gICAg ICAgIGNtaW5pKDEpOwotCi0vKiBGbHVzaCB0eXBlYWhlYWQgKi8KLQotI2lmZGVmIElLU19PUFRJ T04KLSAgICAgICAgZGVidWcoRjEwMSwKLSAgICAgICAgICAgICAgImNreGxvZ2luIFRFTE9QVF9T QihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQiLAotICAgICAgICAgICAgICAiIiwKLSAg ICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydAotICAg ICAgICAgICAgICApOwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLQotICAgICAgICB3aGlsZSAo dHRjaGsoKSA+IDApIHsKLSAgICAgICAgICAgIHggPSB0dGluYygwKTsKLSAgICAgICAgICAgIGRl YnVnKEYxMDEsImNreGxvZ2luIGZsdXNoIHVzZXIgeCIsIiIseCk7Ci0gICAgICAgICAgICBpZiAo eCA8IDApCi0gICAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQsMCk7ICAgICAgLyogQ29ubmVj dGlvbiBsb3N0ICovCi0jaWZkZWYgVE5DT0RFCi0gICAgICAgICAgICBpZiAoc3N0ZWxuZXQpIHsK LSAgICAgICAgICAgICAgICBpZiAoeCA9PSBJQUMpIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9 IHRuX2Rvb3AoKENIQVIpKHggJiAweGZmKSxja3hlY2gsdHRpbmMpOwotICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJja3hsb2dpbiB1c2VyIHRuX2Rvb3AiLCIiLHgpOwotI2lmZGVmIElL U19PUFRJT04KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwKLSAgICAgICAgICAgICAg ICAgICAgICAiY2t4bG9naW4gdXNlciBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1l X3N0YXJ0IiwKLSAgICAgICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICAgICAg ICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0Ci0gICAgICAgICAgICAg ICAgICAgICAgKTsKLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0KLSAgICAgICAgICAgICAgICAg ICAgaWYgKHggPCAwKQotICAgICAgICAgICAgICAgICAgICAgIGdvdG8gWENLWExPRzsKLSAgICAg ICAgICAgICAgICAgICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAx OiBja3hlY2ggPSAxOyBicmVhazsgLyogVHVybiBvbiBlY2hvaW5nICovCi0gICAgICAgICAgICAg ICAgICAgICAgY2FzZSAyOiBja3hlY2ggPSAwOyBicmVhazsgLyogVHVybiBvZmYgZWNob2luZyAq LwotI2lmZGVmIElLU19PUFRJT04KLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAg ICAgICAgICAgICAgICAvKiBJS1MgZXZlbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm ICghVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAvKiBlbHNlIGZhbGwgdGhydS4u LiAqLwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSAgICAgICAgICAgICAgICAgICAgICBjYXNl IDY6ICAgICAgICAgICAgICAgICAgICAvKiBMb2dvdXQgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gWENLWExPRzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICAgICAgfQotICAgICAg ICBpZiAocGZsYWcpIHByb21wdCh4eHN0cmluZyk7ICAgIC8qIElzc3VlIHByb21wdCBpZiBhdCB0 b3AgbGV2ZWwgKi8KLSAgICAgICAgY21yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXNldCB0aGUgcGFyc2VyICovCi0gICAgICAgIGZvciAoeCA9IC0xOyB4IDwgMDspIHsgICAgICAg ICAgLyogUHJvbXB0IHRpbGwgdGhleSBhbnN3ZXIgKi8KLSAgICAgICAgICAgIC8qIEdldCBhIGxp dGVyYWwgbGluZSBvZiB0ZXh0ICovCi0gICAgICAgICAgICB4PWNtdHh0KCJZb3VyIHVzZXJuYW1l LCBvciBcImZ0cFwiLCBvciBcImFub255bW91c1wiIiwiIiwmcyxOVUxMKTsKLSAgICAgICAgICAg IGlmICh4ID09IC00IHx8IHggPT0gLTEwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJcclxu JXNMb2dpbiBjYW5jZWxsZWRcbiIsCi0JCSAgICAgICB4ID09IC0xMCA/ICJUaW1lZCBvdXQ6ICIg OiAiIik7Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICAgICAgICAgICAgICBja3hzeXNsb2cgPSBzYXZs b2c7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgICAgICAgICBkb2V4aXQoR09PRF9F WElULDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNzdGF0ZSkgICAgICAgICAg ICAgICAgIC8qIERpZCBhIHBhY2tldCBjb21lIGluc3RlYWQ/ICovCi0gICAgICAgICAgICAgIGdv dG8gWENLWExPRzsKLSAgICAgICAgICAgIGNtcmVzKCk7ICAgICAgICAgICAgICAgICAgICAvKiBS ZXNldCB0aGUgcGFyc2VyIGFnYWluICovCi0gICAgICAgIH0KLSAgICAgICAgaWYgKChfdSA9IChD SEFSICopbWFsbG9jKChpbnQpc3RybGVuKHMpICsgMSkpID09IE5VTEwpIHsKLSAgICAgICAgICAg IHByaW50ZigiP0ludGVybmFsIGVycm9yOiBtYWxsb2NcbiIpOwotICAgICAgICAgICAgZ290byBY Q0tYTE9HOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RyY3B5KChjaGFyICopX3Us cyk7ICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgIHVzZXJpZCA9IF91OwotICAgICAgICB9 Ci0gICAgfQotICAgIG9rID0genZ1c2VyKChjaGFyICopdXNlcmlkKTsgICAgICAgIC8qIFZlcmlm eSB1c2VybmFtZSAqLwotICAgIGRlYnVnKEYxMTEsImNreGxvZ2luIHp2dXNlciIsdXNlcmlkLG9r KTsKLQotICAgIGlmICghKnBhc3N3ZCAmJiBwcm9tcHRvawotI2lmZGVmIENPTU1FTlQKLSAgICAg ICAgJiYgZ3Vlc3QKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICkgewotICAgICAgICBj aGFyIHBybXB0WzgwXTsKLQotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgIHNhdmxvZyA9IGNreHN5 c2xvZzsgICAgICAgICAgICAgLyogU2F2ZSBhbmQgdHVybiBvZmYgc3lzbG9nZ2luZyAqLwotICAg ICAgICBja3hzeXNsb2cgPSAwOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0KLS8qIEZsdXNoIHR5 cGVhaGVhZCBhZ2FpbiAqLwotCi0gICAgICAgIHdoaWxlICh0dGNoaygpID4gMCkgewotICAgICAg ICAgICAgeCA9IHR0aW5jKDApOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiY2t4bG9naW4gZmx1 c2ggdXNlciB4IiwiIix4KTsKLSNpZmRlZiBUTkNPREUKLSAgICAgICAgICAgIGlmIChzc3RlbG5l dCkgewotICAgICAgICAgICAgICAgIGlmICh4ID09IElBQykgewotICAgICAgICAgICAgICAgICAg ICB4ID0gdG5fZG9vcCgoQ0hBUikoeCAmIDB4ZmYpLGNreGVjaCx0dGluYyk7Ci0gICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsImNreGxvZ2luIHBhc3MgdG5fZG9vcCIsIiIseCk7Ci0jaWZk ZWYgSUtTX09QVElPTgotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLAotICAgICAgICAg ICAgICAgICAgICAgICJja3hsb2dpbiBwYXNzIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJt aXQubWVfc3RhcnQiLAotICAgICAgICAgICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAg ICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQKLSAgICAgICAg ICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSAgICAgICAgICAgICAg ICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgICAgICAgICAgIGdvdG8gWENLWExPRzsKLSAg ICAgICAgICAgICAgICAgICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2Fz ZSAxOiBja3hlY2ggPSAxOyBicmVhazsgLyogVHVybiBvbiBlY2hvaW5nICovCi0gICAgICAgICAg ICAgICAgICAgICAgY2FzZSAyOiBja3hlY2ggPSAwOyBicmVhazsgLyogVHVybiBvZmYgZWNob2lu ZyAqLwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgIC8q IElLUyBldmVudCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFURUxPUFRfU0IoVEVM T1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KQotICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsgICAgICAgICAgICAgICAgIC8qIGVsc2UgZmFsbCB0aHJ1Li4uICovCi0gICAgICAgICAg ICAgICAgICAgICAgY2FzZSA2OiAgICAgICAgICAgICAgICAgICAgLyogTG9nb3V0ICovCi0gICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIFhDS1hMT0c7Ci0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogVE5DT0RFICovCi0g ICAgICAgIH0KLSAgICAgICAgaWYgKCFzdHJjbXAoKGNoYXIgKil1c2VyaWQsImFub255bW91cyIp IHx8Ci0gICAgICAgICAgICAhc3RyY21wKChjaGFyICopdXNlcmlkLCJmdHAiKSkgewotICAgICAg ICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgICAgZ290byBYQ0tYTE9HOwotICAgICAgICAgICAg Y2tzdHJuY3B5KHBybXB0LCJFbnRlciBlLW1haWwgYWRkcmVzcyBhcyBQYXNzd29yZDogIiw4MCk7 Ci0gICAgICAgIH0gZWxzZSBpZiAoKnVzZXJpZCAmJiBzdHJsZW4oKGNoYXIgKil1c2VyaWQpIDwg NjApIHsKLSNpZmRlZiBOVAotICAgICAgICAgICAgZXh0ZXJuIENIQVIgKiBwUmVmZXJlbmNlRG9t YWluTmFtZTsKLSAgICAgICAgICAgIGlmIChwUmVmZXJlbmNlRG9tYWluTmFtZSkKLSAgICAgICAg ICAgICAgY2ttYWt4bXNnKHBybXB0LAotICAgICAgICAgICAgICAgICAgICAgICA4MCwKLSAgICAg ICAgICAgICAgICAgICAgICAgIkVudGVyICIsCi0gICAgICAgICAgICAgICAgICAgICAgIHBSZWZl cmVuY2VEb21haW5OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAiXFxcXCIsCi0gICAgICAg ICAgICAgICAgICAgICAgIHVzZXJpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIidzIFBhc3N3 b3JkOiAiLAotICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCxOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBlbHNlCi0j ZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAgICAgY2ttYWttc2cocHJtcHQsODAsIkVudGVyICIs KGNoYXIgKil1c2VyaWQsIidzIFBhc3N3b3JkOiAiLE5VTEwpOwotICAgICAgICB9IGVsc2UKLSAg ICAgICAgICBja3N0cm5jcHkocHJtcHQsIkVudGVyIFBhc3N3b3JkOiAiLDgwKTsKLSAgICAgICAg Y21zZXRwKHBybXB0KTsgICAgICAgICAgICAgICAgICAvKiBNYWtlIG5ldyBwcm9tcHQgKi8KLSAg ICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAvKiBQdXQgY29uc29sZSBpbiBj YnJlYWsgbW9kZSAqLwotICAgICAgICBpZiAoc3RyY21wKChjaGFyICopdXNlcmlkLCJhbm9ueW1v dXMiKSAmJgotICAgICAgICAgICAgc3RyY21wKChjaGFyICopdXNlcmlkLCJmdHAiKSkgeyAvKiBh bmQgaWYgbm90IGFub255bW91cyAqLwotICAgICAgICAgICAgZGVib2sgPSAwOwotICAgICAgICAg ICAgY21pbmkoMCk7ICAgICAgICAgICAgICAgICAgIC8qIGFuZCBuby1lY2hvIG1vZGUgKi8KLSAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNtaW5pKDEpOwotICAgICAgICB9Ci0gICAgICAg IGlmIChwZmxhZykgcHJvbXB0KHh4c3RyaW5nKTsgICAgLyogSXNzdWUgcHJvbXB0IGlmIGF0IHRv cCBsZXZlbCAqLwotICAgICAgICBjbXJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJl c2V0IHRoZSBwYXJzZXIgKi8KLSAgICAgICAgZm9yICh4ID0gLTE7IHggPCAwOykgeyAgICAgICAg ICAvKiBQcm9tcHQgdGlsbCB0aGV5IGFuc3dlciAqLwotI2lmZGVmIENLX1BBTQotCSAgICBnb3Rl bXB0eXBhc3N3ZD0wOwotI2VuZGlmIC8qIENLX1BBTSAqLwotICAgICAgICAgICAgeCA9IGNtdHh0 KCIiLCIiLCZzLE5VTEwpOyAgIC8qIEdldCBhIGxpdGVyYWwgbGluZSBvZiB0ZXh0ICovCi0gICAg ICAgICAgICBpZiAoeCA9PSAtNCB8fCB4ID09IC0xMCkgewotICAgICAgICAgICAgICAgIHByaW50 ZigiXHJcbiVzTG9naW4gY2FuY2VsbGVkXG4iLAotCQkgICAgICAgeCA9PSAtMTAgPyAiVGltZWQg b3V0OiAiIDogIiIpOwotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICAgICAgY2t4c3lzbG9n ID0gc2F2bG9nOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgICAgICAgICAgZG9leGl0 KEdPT0RfRVhJVCwwKTsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBDS19QQU0KLQkgICAgaWYgKCEq cykKLQkgICAgICBnb3RlbXB0eXBhc3N3ZCA9IDE7Ci0jZW5kaWYgLyogQ0tfUEFNICovCi0gICAg ICAgICAgICBpZiAoc3N0YXRlKSAgICAgICAgICAgICAgICAgLyogSW4gY2FzZSBvZiBhIEtlcm1p dCBwYWNrZXQgKi8KLSAgICAgICAgICAgICAgZ290byBYQ0tYTE9HOwotICAgICAgICAgICAgY21y ZXMoKTsgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHRoZSBwYXJzZXIgYWdhaW4gKi8KLSAg ICAgICAgfQotICAgICAgICBwcmludGYoIlxyXG4iKTsgICAgICAgICAgICAgICAgIC8qIEVjaG8g YSBDUkxGICovCi0gICAgICAgIGlmICgoX3AgPSAoQ0hBUiAqKW1hbGxvYygoaW50KXN0cmxlbihz KSArIDEpKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9JbnRlcm5hbCBlcnJvcjog bWFsbG9jXG4iKTsKLSAgICAgICAgICAgIGdvdG8gWENLWExPRzsKLSAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgIHN0cmNweSgoY2hhciAqKV9wLHMpOyAgICAgICAvKiBzYWZlICovCi0gICAg ICAgICAgICBwYXNzd2QgPSBfcDsKLSAgICAgICAgfQotICAgIH0KLSNpZmRlZiBDS19QQU0KLSAg ICBlbHNlIHsKLSAgICAgICAgY21yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNl dCB0aGUgcGFyc2VyICovCi0KLSAgICAgICAgLyogV2UgcmVzdG9yZSB0aGUgcHJvbXB0IG5vdyBi ZWNhdXNlIHRoZSBQQU0gZW5naW5lIHdpbGwgY2FsbCAgKi8KLSAgICAgICAgLyogcmVhZHBhc3Mo KSB3aGljaCB3aWxsIG92ZXJ3cml0ZSBwc2F2ZS4gKi8KLSAgICAgICAgaWYgKHJwcm9tcHQpIHsK LSAgICAgICAgICAgIGNtc2V0cChwc2F2ZSk7ICAgICAgICAgICAgICAvKiBSZXN0b3JlIG9yaWdp bmFsIHByb21wdCAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwiY2t4bG9naW4gcmVzdG9yZWQi LHBzYXZlLDApOwotICAgICAgICAgICAgcnByb21wdCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0j ZW5kaWYgLyogQ0tfUEFNICovCi0KLSNpZmRlZiBDS1NZU0xPRwotICAgIGNreHN5c2xvZyA9IHNh dmxvZzsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCi0gICAgaWYgKG9rKSB7Ci0gICAgICAgIG9r ID0genZwYXNzKChjaGFyICopcGFzc3dkKTsgICAgLyogQ2hlY2sgcGFzc3dvcmQgKi8KLSAgICAg ICAgZGVidWcoRjEwMSwiY2t4bG9naW4genZwYXNzIiwiIixvayk7Ci0jaWZkZWYgQ0tfUEFNCi0g ICAgfSBlbHNlIHsKLQkvKiBGYWtlIHBhbSBwYXNzd29yZCBmYWlsdXJlIGZvciBub25leGlzdGVu dCB1c2VycyAqLwotCXNsZWVwKDEpOwotCXByaW50ZigiQXV0aGVudGljYXRpb24gZmFpbHVyZVxu Iik7Ci0jZW5kaWYJLyogQ0tfUEFNICovCi0gICAgfQotCi0gICAgaWYgKG9rID4gMCAmJiBpc2d1 ZXN0KSB7Ci0jaWZuZGVmIE5PUFVTSAotICAgICAgICBub3B1c2ggPSAxOwotI2VuZGlmIC8qIE5P UFVTSCAqLwotICAgICAgICBzcnZjZG1zZyA9IDE7Ci0gICAgfQotICAgIHJjID0gb2s7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCB0aGUgcmV0dXJuIGNvZGUgKi8KLSAgICBpZiAo KGNoYXIgKil1aWRidWYgIT0gKGNoYXIgKil1c2VyaWQpCi0gICAgICBja3N0cm5jcHkodWlkYnVm LChjaGFyICopdXNlcmlkLFVJREJVRkxFTik7IC8qIFJlbWVtYmVyIHVzZXJuYW1lICovCi0KLSAg WENLWExPRzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tb24gZXhpdCAqLwot I2lmZGVmIENLU1lTTE9HCi0gICAgY2t4c3lzbG9nID0gc2F2bG9nOyAgICAgICAgICAgICAgICAg LyogSW4gY2FzZSBvZiBHT1RPIGFib3ZlICovCi0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICBp ZiAocnByb21wdCkgewotICAgICAgICBjbXNldHAocHNhdmUpOyAgICAgICAgICAgICAgICAgIC8q IFJlc3RvcmUgb3JpZ2luYWwgcHJvbXB0ICovCi0gICAgICAgIGRlYnVnKEYxMTAsImNreGxvZ2lu IHJlc3RvcmVkIixwc2F2ZSwwKTsKLSAgICB9Ci0gICAgaWYgKF91IHx8IF9wIHx8IF9hKSB7Ci0g ICAgICAgIGlmIChfdSkgZnJlZShfdSk7Ci0gICAgICAgIGlmIChfcCkgZnJlZShfcCk7Ci0gICAg ICAgIGlmIChfYSkgZnJlZShfYSk7Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19Ci0KLWludAot Y2t4bG9nb3V0KCkgewotICAgIGRvZXhpdChHT09EX0VYSVQsMCk7ICAgICAgICAgICAgICAgIC8q IGRvZXhpdCBjYWxscyB6dmxvZ291dCAqLwotICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIG5vdCByZWFjaGVkICovCi19Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQot I2VuZGlmIC8qIE5PSUNQICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja3V1c3IuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2t1dXNyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNzdmZTYuLjAw MDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3Iu YworKysgL2Rldi9udWxsCkBAIC0xLDEzMzc2ICswLDAgQEAKLSNpZmRlZiBTU0hURVNUCi0jZGVm aW5lIFNTSEJVSUxUSU4KLSNlbmRpZiAvKiBTU0hURVNUICovCi0KLSNpbmNsdWRlICJja2NzeW0u aCIKLWNoYXIgKnVzZXJ2ID0gIlVzZXIgSW50ZXJmYWNlIDkuMC4yOTksIDkgSnVuIDIwMTEiOwot Ci0vKiAgQyBLIFUgVSBTIFIgLS0gICJVc2VyIEludGVyZmFjZSIgZm9yIEMtS2VybWl0IChQYXJ0 IDEpICAqLwotCi0vKgotICBBdXRob3JzOgotICAgIEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJp YS5lZHU+LAotICAgICAgVGhlIEtlcm1pdCBQcm9qZWN0LCBDb2x1bWJpYSBVbml2ZXJzaXR5LCBO ZXcgWW9yayBDaXR5Ci0gICAgSmVmZnJleSBFIEFsdG1hbiA8amFsdG1hbkBzZWN1cmUtZW5kcG9p bnRzLmNvbT4KLSAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQotCi0g IENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2 ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQu ICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0 IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lv bnMuCi0qLwotCi0vKgotICBPcmlnaW5hbGx5IHRoZSBlbnRpcmUgdXNlciBpbnRlcmZhY2Ugd2Fz IGluIG9uZSBtb2R1bGUsIGNrdXVzci5jLiAgT3ZlcgotICB0aGUgeWVhcnMgaXQgaGFzIGJlZW4g c3BsaXQgaW50byBtYW55IG1vZHVsZXM6IGNrdXVzMi5jLCBja3V1czMuYywgLi4uLAotICBja3V1 czcuYy4gIGNrdXVzMi5jIGNvbnRhaW5zIHRoZSBIRUxQIGNvbW1hbmQgcGFyc2VyIGFuZCBoZWxw LXRleHQgc3RyaW5nczsKLSAgY2t1dXN5LmMgY29udGFpbnMgdGhlIFVOSVgtc3R5bGUgY29tbWFu ZC1saW5lIGludGVyZmFjZTsgY2t1dXN4LmMgY29udGFpbnMKLSAgcm91dGluZXMgbmVlZGVkIGJ5 IGJvdGggdGhlIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIHRoZSBpbnRlcmFjdGl2ZQotICBj b21tYW5kIHBhcnNlci4KLSovCi0KLS8qCi0gIFRoZSBja3V1cyouYyBtb2R1bGVzIGRlcGVuZCBv biB0aGUgZXhpc3RlbmNlIG9mIEMgbGlicmFyeSBmZWF0dXJlcyBsaWtlCi0gIGZvcGVuLCBmZ2V0 cywgZmVvZiwgKGYpcHJpbnRmLCBhcmd2L2FyZ2MsIGV0Yy4gIE90aGVyIGZ1bmN0aW9ucyB0aGF0 IGFyZQotICBsaWtlbHkgdG8gdmFyeSBhbW9uZyBkaWZmZXJlbnQgcGxhdGZvcm1zIC0tIGxpa2Ug c2V0dGluZyB0ZXJtaW5hbCBtb2RlcyBvcgotICBpbnRlcnJ1cHRzIC0tIGFyZSBpbnZva2VkIHZp YSBjYWxscyB0byBmdW5jdGlvbnMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUKLSAgc3lzdGVtLSBk ZXBlbmRlbnQgbW9kdWxlcywgY2s/W2Z0XWlvLmMuICBUaGUgY29tbWFuZCBsaW5lIHBhcnNlciBw cm9jZXNzZXMKLSAgYW55IGFyZ3VtZW50cyBmb3VuZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhcyBw YXNzZWQgdG8gbWFpbigpIHZpYSBhcmd2L2FyZ2MuCi0gIFRoZSBpbnRlcmFjdGl2ZSBwYXJzZXIg dXNlcyB0aGUgZmFjaWxpdGllcyBvZiB0aGUgY21kIHBhY2thZ2UgKGRldmVsb3BlZCBmb3IKLSAg dGhpcyBwcm9ncmFtLCBidXQgdXNhYmxlIGJ5IGFueSBwcm9ncmFtKS4gIEFueSBjb21tYW5kIHBh cnNlciBtYXkgYmUKLSAgc3Vic3RpdHV0ZWQgZm9yIHRoaXMgb25lLiAgVGhlIG9ubHkgcmVxdWly ZW1lbnRzIGZvciB0aGUgS2VybWl0IGNvbW1hbmQKLSAgcGFyc2VyIGFyZSB0aGVzZToKLQotICAu IFNldCBwYXJhbWV0ZXJzIHZpYSBnbG9iYWwgdmFyaWFibGVzIGxpa2UgZHVwbGV4LCBzcGVlZCwg dHRuYW1lLCBldGMuICBTZWUKLSAgICBja2NtYWkuYyBmb3IgdGhlIGRlY2xhcmF0aW9ucyBhbmQg ZGVzY3JpcHRpb25zIG9mIHRoZXNlIHZhcmlhYmxlcy4KLQotICAuIElmIGEgY29tbWFuZCBjYW4g YmUgZXhlY3V0ZWQgd2l0aG91dCB0aGUgdXNlIG9mIEtlcm1pdCBwcm90b2NvbCwgdGhlbgotICAg IGV4ZWN1dGUgdGhlIGNvbW1hbmQgZGlyZWN0bHkgYW5kIHNldCB0aGUgdmFyaWFibGUgc3N0YXRl IHRvIDAuIEV4YW1wbGVzCi0gICAgaW5jbHVkZSAnc2V0JyBjb21tYW5kcywgbG9jYWwgZGlyZWN0 b3J5IGxpc3RpbmdzLCB0aGUgJ2Nvbm5lY3QnIGNvbW1hbmQuCi0KLSAgLiBJZiBhIGNvbW1hbmQg cmVxdWlyZXMgdGhlIEtlcm1pdCBwcm90b2NvbCwgc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVz OgotCi0gICAgIHNzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGRhdGEK LSAgICAgICAneCcgKGVudGVyIHNlcnZlciBtb2RlKSAgICAgICAgICAgIChub25lKQotICAgICAg ICdyJyAoc2VuZCBhICdnZXQnIGNvbW1hbmQpICAgICAgICAgY21hcmcsIGNtYXJnMgotICAgICAg ICd2JyAoZW50ZXIgcmVjZWl2ZSBtb2RlKSAgICAgICAgICAgY21hcmcyCi0gICAgICAgJ2cnIChz ZW5kIGEgZ2VuZXJpYyBjb21tYW5kKSAgICAgICBjbWFyZwotICAgICAgICdzJyAoc2VuZCBmaWxl cykgICAgICAgICAgICAgICAgICAgbmZpbHMsIGNtYXJnICYgY21hcmcyIE9SIGNtbGlzdAotICAg ICAgICdjJyAoc2VuZCBhIHJlbW90ZSBob3N0IGNvbW1hbmQpICAgY21hcmcKLQotICAgICBjbWxp c3QgaXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyaW5ncy4KLSAgICAgY21hcmcsIGNtYXJn MiBhcmUgcG9pbnRlcnMgdG8gc3RyaW5ncy4KLSAgICAgbmZpbHMgaXMgYW4gaW50ZWdlci4KLQot ICAgICBjbWFyZyBjYW4gYmUgYSBmaWxlbmFtZSBzdHJpbmcgKHBvc3NpYmx5IHdpbGQpLCBvcgot CWEgcG9pbnRlciB0byBhIHByZWZhYnJpY2F0ZWQgZ2VuZXJpYyBjb21tYW5kIHN0cmluZywgb3IK LQlhIHBvaW50ZXIgdG8gYSBob3N0IGNvbW1hbmQgc3RyaW5nLgotICAgICBjbWFyZzIgaXMgYW4g ImFzLW5hbWUiIC0gdGhlIG5hbWUgdG8gc2VuZCBmaWxlKHMpIHVuZGVyLCBvcgotCXRoZSBuYW1l IHVuZGVyIHdoaWNoIHRvIHN0b3JlIGluY29taW5nIGZpbGUocyk7IG11c3Qgbm90IGJlIHdpbGQu Ci0JQSBudWxsIG9yIGVtcHR5IHZhbHVlIG1lYW5zIHRvIHVzZSB0aGUgZmlsZSdzIG93biBuYW1l LgotICAgICBjbWxpc3QgaXMgYSBsaXN0IG9mIGZpbGVuYW1lcywgc3VjaCBhcyBwYXNzZWQgdmlh IGFyZ3YuCi0gICAgIG5maWxzIGlzIGFuIGludGVnZXIsIGludGVycHJldGVkIGFzIGZvbGxvd3M6 Ci0gICAgICAgLTE6IGZpbGVzcGVjIChwb3NzaWJseSB3aWxkKSBpbiBjbWFyZywgbXVzdCBiZSBl eHBhbmRlZCBpbnRlcm5hbGx5LgotCTA6IHNlbmQgZnJvbSBzdGRpbiAoc3RhbmRhcmQgaW5wdXQp LgotICAgICAgID4wOiBudW1iZXIgb2YgZmlsZXMgdG8gc2VuZCwgZnJvbSBjbWxpc3QuCi0KLSAg VGhlIHNjcmVlbigpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBzY3JlZW4gZHVyaW5n IGZpbGUgdHJhbnNmZXIuCi0gIFRoZSB0bG9nKCkgZnVuY3Rpb24gd3JpdGVzIHRvIGEgdHJhbnNh Y3Rpb24gbG9nLgotICBUaGUgZGVidWcoKSBmdW5jdGlvbiB3cml0ZXMgdG8gYSBkZWJ1Z2dpbmcg bG9nLgotICBUaGUgaW50bXNnKCkgYW5kIGNoa2ludCgpIGZ1bmN0aW9ucyBwcm92aWRlIHRoZSB1 c2VyIGkvbyBmb3IgaW50ZXJydXB0aW5nCi0gICAgZmlsZSB0cmFuc2ZlcnMuCi0qLwotCi0vKiBJ bmNsdWRlcyAqLwotCi0jaWZkZWYgTVVMVElORVQKLSNkZWZpbmUgTVVMVElORVRfT0xEX1NUWUxF CQkvKiBMZWF2ZSBzZWxlY3QgcHJvdG90eXBlIHVuZGVmaW5lZCAqLwotI2VuZGlmIC8qIE1VTFRJ TkVUICovCi0KLSNpbmNsdWRlICJja2NkZWIuaCIKLSNpbmNsdWRlICJja2Nhc2MuaCIKLSNpbmNs dWRlICJja2NrZXIuaCIKLSNpbmNsdWRlICJja2NuZXQuaCIJCQkvKiBOZXR3b3JrIHN5bWJvbHMg Ki8KLSNpbmNsdWRlICJja3V1c3IuaCIKLSNpbmNsdWRlICJja2N4bGEuaCIKLQotaW50IGdfZm5j YWN0ID0gLTE7CQkJLyogTmVlZGVkIGZvciBOT0lDUCBidWlsZHMgKi8KLWludCBub2luaXQgPSAw OwkJCQkvKiBGbGFnIGZvciBza2lwcGluZyBpbml0IGZpbGUgKi8KLWludCBuc2NhbmZpbGUgPSBT Q0FORklMRUJVRjsKLQotaW50IHJjZGFjdGl2ZSA9IDA7CQkJLyogUkNEIGFjdGl2ZSAqLwotaW50 IGtlZXBhbGxjaGFycyA9IDA7CQkJLyogU2VlIGNtZmxkKCkgKi8KLQotaW50IGxvY3VzID0gMTsJ CQkJLyogQ3VycmVudCBMT0NVUyBpcyBMT0NBTCAqLwotI2lmZGVmIE9TMgotaW50IGF1dG9sb2N1 cyA9IDI7CQkJLyogQXV0b21hdGljIExPQ1VTIHN3aXRjaGluZzogQVNLICovCi0jZWxzZSAvKiBP UzIgKi8KLWludCBhdXRvbG9jdXMgPSAxOwkJCS8qIEF1dG9tYXRpYyBMT0NVUyBzd2l0Y2hpbmcg ZW5hYmxlZCAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIE5PSUNQCi0jaWZkZWYgQ0tM RUFSTgotI2lmZGVmIFZNUwotI2luY2x1ZGUgPHRpbWUuaD4JCQkvKiBGb3IgQ0tMRUFSTiAqLwot I2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIENLTEVBUk4gKi8KLSNpZmRlZiBPUzIKLSNpZm5k ZWYgTlQKLSNkZWZpbmUgSU5DTF9OT1BNCi0jZGVmaW5lIElOQ0xfVklPCQkJLyogTmVlZGVkIGZv ciBja29jb24uaCAqLwotI2luY2x1ZGUgPG9zMi5oPgotI3VuZGVmIENPTU1FTlQKLSNlbHNlCi0j ZGVmaW5lIEFQSVJFVCBVTE9ORwotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx0YXBp Lmg+Ci0jaW5jbHVkZSAiY2tud2luLmgiCi0jaW5jbHVkZSAiY2tudGFwLmgiCQkJLyogQ0tfVEFQ SSBkZWZpbml0aW9uICovCi0jZW5kaWYgLyogTlQgKi8KLSNpbmNsdWRlICJja293aW4uaCIKLSNp bmNsdWRlICJja29jb24uaCIKLWV4dGVybiBpbnQgdGNwX2F2YWlsOwotZXh0ZXJuIGJvb2wgdmll d29ubHk7Ci1leHRlcm4gaW50IGs5NXN0ZG91dDsKLWV4dGVybiBpbnQgdHRfc2Nyb2xsOwotI2lm bmRlZiBOT1RFUk0KLWV4dGVybiB0dF9zdGF0dXNbVk5VTV07Ci0jZW5kaWYgLyogTk9URVJNICov Ci1pbnQgZGlzcGxheV9kZW1vID0gMTsKLSNpbmNsdWRlICJja29zc2guaCIKLSNpZmRlZiBLVUkK LSNpbmNsdWRlICJpa3VpLmgiCi0jZW5kaWYgLyogS1VJICovCi0jZW5kaWYgLyogT1MyICovCi0K LWludCBvcHRsaW5lcyA9IDA7Ci1pbnQgZGlkc2V0bGluID0gMDsKLQotI2lmZGVmIE5FV0ZUUAot ZXh0ZXJuIGludCBmdHBnZXQsIGZ0cGlzb3BlbigpLCBkb2Z0cHJlcygpOwotX1BST1RPVFlQKGlu dCBkb2Z0cHR5cCwoaW50KSk7Ci1fUFJPVE9UWVAoVk9JRCBkb2Z0cGdsb2JhbHR5cGUsKGludCkp OwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCi0jaWZkZWYgVk1TCi1leHRlcm4gaW50IGJhdGNoOwot I2VuZGlmIC8qIFZNUyAqLwotCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSNpbmNsdWRlIDxwYWNrZXRz OmNvbW1vbi5oPgotI2RlZmluZSBmZ2V0cyhzdHJpbmdidWYsbWF4LGZkKSBkZ19mZ2V0cyhzdHJp bmdidWYsbWF4LGZkKQotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0KLWV4dGVybiBpbnQgeGNt ZHNyYywgaGludHMsIGNtZmxncywgd2h5Y2xvc2VkOwotCi1jaGFyICogaGxwdG9rID0gTlVMTDsK LQotI2lmZGVmIENLX1RUR1dTSVoJCQkvKiBXaGV0aGVyIHRvIHVzZSBtb3JlLXByb21wdGluZyAq LwotaW50IHhhc2ttb3JlID0gMTsJCQkvKiBNb21lbnRhcnkgc2V0dGluZyAqLwotaW50IHNhdmVh c2sgID0gMTsJCQkvKiBQZXJtYW5lbnQgc2V0dGluZyAqLwotI2Vsc2UKLWludCB4YXNrbW9yZSA9 IDA7Ci1pbnQgc2F2ZWFzayAgPSAwOwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLQotI2lmbmRl ZiBOT0NTRVRTCi1leHRlcm4gaW50IG5maWxjOwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZmNzdGFi W107Ci1leHRlcm4gaW50IGZjaGFyc2V0OwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotY2hhciAq IGdfcHN3ZCA9IE5VTEw7Ci1pbnQgZ19wY3B0ID0gLTE7Ci1pbnQgZ19wZmxnID0gLTE7Ci0KLWV4 dGVybiBpbnQgY21kX3Jvd3MsIGNtZF9jb2xzOwotCi0jaWZkZWYgQ0tST09UCi1leHRlcm4gaW50 IGNrcm9vdGVycjsKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotZXh0ZXJuIGludCBpbnNlcnZlciwg ZmlsZXBlZWs7Ci0KLSNpZmRlZiBDS0xFQVJOCi1GSUxFICogbGVhcm5mcCA9IE5VTEw7Ci1jaGFy ICogbGVhcm5maWxlID0gTlVMTDsKLWludCBsZWFybmluZyA9IDA7Ci0jZW5kaWYgLyogQ0tMRUFS TiAqLwotCi0jaWZuZGVmIE5PWEZFUgotZXh0ZXJuIGludCBhdGNhcHIsIGF0ZGlzbywgbmZpbHMs IG1vdmluZywgcHJvdG9jb2wsIHNlbmRtb2RlLCBlcGt0ZmxnLCBzaXplLAotICBzbmRzcmMsIHNl cnZlciwgZGlzcGxhLCBmbmNudiwgZm5zcGF0aCwgZm5ycGF0aCwgeGZlcm1vZGUsIHVycHNpeiwK LSAgc3BzaXpmLCBzcHNpeiwgc3BzaXpyLCBzcG1heCwgd3Nsb3RyLCBwcmVmaXhpbmcsIGZuY2Fj dCwgcmVsaWFibGUsCi0gIHNldHJlbGlhYmxlOwotCi0jaWZkZWYgSUtTRENPTkYKLWV4dGVybiBp bnQgaWtzZGNmOwotI2VuZGlmIC8qIElLU0RDT05GICovCi0KLSNpZmRlZiBDS19MT0dJTgotZXh0 ZXJuIGludCBpc2d1ZXN0OwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0KLWV4dGVybiBDS19PRkZf VCBzZW5kc3RhcnQ7Ci0KLWV4dGVybiBjaGFyICpjbWFyZywgKmNtYXJnMiwgKipjbWxpc3QsICpk ZnR0eTsKLQotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZm50YWJbXTsgZXh0ZXJuIGludCBuZm50YWI7 Ci1leHRlcm4gc3RydWN0IGNrX3AgcHRhYltOUFJPVE9TXTsKLQotaW50IHNuZGNtZCA9IDA7CQkv KiBMYXN0IGNvbW1hbmQgd2FzIGEgU0VORC1jbGFzcyBjb21tYW5kLiAqLwotCi1pbnQgZ194ZmVy bW9kZSA9IC0xOwotaW50IGdfcHJvdG8gID0gLTE7Ci1pbnQgZ191cnBzaXogPSAtMTsKLWludCBn X3Nwc2l6ZiA9IC0xOwotaW50IGdfc3BzaXogID0gLTE7Ci1pbnQgZ19zcHNpenIgPSAtMTsKLWlu dCBnX3NwbWF4ICA9IC0xOwotaW50IGdfd3Nsb3RyID0gLTE7Ci1pbnQgZ19wcmVmaXhpbmcgPSAt MTsKLWludCBnX2ZuY252ICA9IC0xOwotaW50IGdfZm5zcGF0aCA9IC0xOwotaW50IGdfZm5ycGF0 aCA9IC0xOwotaW50IGdfZm5hY3QgID0gLTE7Ci1pbnQgZ19kaXNwbGEgPSAtMTsKLWludCBnX3Nw YXRoICA9IC0xOwotaW50IGdfcnBhdGggID0gLTE7Ci1jaGFyICogZ19zZmlsdGVyID0gTlVMTDsK LWNoYXIgKiBnX3JmaWx0ZXIgPSBOVUxMOwotCi1leHRlcm4gaW50IHBhdHRlcm5zOwotI2lmZGVm IFBBVFRFUk5TCi1leHRlcm4gY2hhciAqdHh0cGF0dGVybnNbXSwgKmJpbnBhdHRlcm5zW107Ci1p bnQgZ19wYXR0ZXJucyA9IC0xOwotI2VuZGlmIC8qIFBBVFRFUk5TICovCi1pbnQgZ19za2lwYnVw ID0gLTE7Ci0KLSNpZmRlZiBQSVBFU0VORAotZXh0ZXJuIGludCB1c2VwaXBlcywgcGlwZXNlbmQ7 Ci1leHRlcm4gY2hhciAqIHNuZGZpbHRlcjsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCi0jaWZu ZGVmIE5PU1BMCi1leHRlcm4gaW50IHNuZHhsbywgc25keGhpLCBzbmR4aW47Ci0jZW5kaWYgLyog Tk9TUEwgKi8KLQotZXh0ZXJuIGNoYXIgZnNwZWNbXTsJCQkvKiBNb3N0IHJlY2VudCBmaWxlc3Bl YyAqLwotZXh0ZXJuIGludCBmc3BlY2xlbjsJCQkvKiBMZW5ndGggb2YgZnNwZWNbXSBidWZmZXIg Ki8KLQotI2lmbmRlZiBOT0ZSSUxMUwotZXh0ZXJuIGludCBybWFpbGY7CQkJLyogTUFJTCBjb21t YW5kIGl0ZW1zICovCi1leHRlcm4gY2hhciBvcHRidWZbXTsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAq LwotCi1leHRlcm4gaW50Ci0gIGVuX2NweSwgZW5fY3dkLCBlbl9kZWwsIGVuX2RpciwgZW5fZmlu LCBlbl9nZXQsIGVuX2J5ZSwgZW5fbWFpLCBlbl9wcmksCi0gIGVuX2hvcywgZW5fcmVuLCBlbl9z ZW4sIGVuX3NwYSwgZW5fc2V0LCBlbl90eXAsIGVuX3dobywgZW5fcmV0LCBlbl94aXQsCi0gIGVu X21rZCwgZW5fcm1kLCBlbl9hc2c7Ci0KLSNpZm5kZWYgTk9NU0VORAkJCQkvKiBNdWx0aXBsZSBT RU5EICovCi1leHRlcm4gY2hhciAqbXNmaWxlc1tdOwotaW50IGZpbGVzaW5saXN0ID0gMDsJCQkv KiBBbmQgQUREIC4uLiAqLwotZXh0ZXJuIHN0cnVjdCBmaWxlbGlzdCAqIGZpbGVoZWFkOwotZXh0 ZXJuIHN0cnVjdCBmaWxlbGlzdCAqIGZpbGV0YWlsOwotZXh0ZXJuIHN0cnVjdCBmaWxlbGlzdCAq IGZpbGVuZXh0OwotZXh0ZXJuIGludCBhZGRsaXN0OwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQot c3RhdGljIHN0cnVjdCBrZXl0YWIgYWRkdGFiW10gPSB7Ci0jaWZkZWYgUEFUVEVSTlMKLSAgICB7 ICJiaW5hcnktcGF0dGVybnMiLCBBRERfQklOLCAwIH0sCi0jZW5kaWYgLyogUEFUVEVSTlMgKi8K LSNpZm5kZWYgTk9NU0VORAotICAgIHsgInNlbmQtbGlzdCIsIEFERF9TTkQsIDAgfSwKLSNlbmRp ZiAvKiBOT01TRU5EICovCi0jaWZkZWYgUEFUVEVSTlMKLSAgICB7ICJ0ZXh0LXBhdHRlcm5zIiwg QUREX1RYVCwgMCB9LAotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0gICAgeyAiIiwgMCwgMCB9Ci19 Owotc3RhdGljIGludCBuYWRkdGFiID0gc2l6ZW9mKGFkZHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpIC0gMTsKLQotI2lmbmRlZiBOT0NTRVRTCi1zdHJ1Y3Qga2V5dGFiIGFzc29jdGFiW10gPSB7 Ci0gICAgeyAiZmlsZS1jaGFyYWN0ZXItc2V0IiwgICAgIEFTU09DX0ZDLCAwIH0sCi0gICAgeyAi dHJhbnNmZXItY2hhcmFjdGVyLXNldCIsIEFTU09DX1RDLCAwIH0sCi0gICAgeyAieGZlci1jaGFy YWN0ZXItc2V0IiwgICAgIEFTU09DX1RDLCBDTV9JTlYgfQotfTsKLXN0YXRpYyBpbnQgbmFzc29j ID0gc2l6ZW9mKGFzc29jdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci1leHRlcm4gaW50IGFm Y3NldFtNQVhGQ1NFVFMrMV07CQkvKiBDaGFyYWN0ZXItc2V0IGFzc29jaWF0aW9ucyAqLwotZXh0 ZXJuIGludCBheGNzZXRbTUFYVENTRVRTKzFdOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lm bmRlZiBBRERDTUQKLSNpZm5kZWYgTk9NU0VORAotI2RlZmluZSBBRERDTUQKLSNlbmRpZiAvKiBO T01TRU5EICovCi0jaWZuZGVmIEFERENNRAotI2lmZGVmIFBBVFRFUk5TCi0jZGVmaW5lIEFERENN RAotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0jZW5kaWYgLyogQUREQ01EICovCi0jZW5kaWYgLyog QUREQ01EICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLS8qIEV4dGVybmFsIEtlcm1pdCBWYXJp YWJsZXMsIHNlZSBja21haW4uYyBmb3IgZGVzY3JpcHRpb24uICovCi0KLWV4dGVybiB4eF9zdHJw IHh4c3RyaW5nOwotZXh0ZXJuIGxvbmcgeHZlcm51bTsKLQotZXh0ZXJuIGludCBsb2NhbCwgeGl0 c3RhLCBiaW5hcnksIG1zZ2ZsZywgZXNjYXBlLCBkdXBsZXgsIHF1aWV0LCB0bGV2ZWwsCi0gIHBm bGFnLCB6aW5jbnQsIGNreGVjaCwgY2Fycmllciwgd2hhdCwgbm9wdXNoLCBoYXZlbGluZSwgYnll X2FjdGl2ZTsKLSNpZmRlZiBUTkNPREUKLWV4dGVybiBpbnQgZGVic2VzOwotZXh0ZXJuIGNoYXIg dG5fbXNnW107Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLWludCBzbGVlcGNhbiA9IDE7Ci1pbnQg Z19iaW5hcnkgPSAtMTsKLWludCBnX3JlY3Vyc2l2ZSA9IC0xOwotaW50IGdfbWF0Y2hkb3QgPSAt MTsKLWV4dGVybiBpbnQgbm9saW5rczsKLQotZXh0ZXJuIGxvbmcgdmVybnVtOwotZXh0ZXJuIGNo YXIgKnZlcnNpbywgKmNvcHlyaWdodFtdOwotZXh0ZXJuIGNoYXIgKmNreHN5czsKLSNpZm5kZWYg Tk9IRUxQCi1leHRlcm4gY2hhciAqaW50cm90eHRbXTsKLWV4dGVybiBjaGFyICpuZXdzdHh0W107 Ci0jZW5kaWYgLyogTk9IRUxQICovCi0KLSNpZm5kZWYgT1MyCi0jaWZuZGVmIFVOSVgKLWV4dGVy biBjaGFyICpQV0RDTUQ7Ci0jZW5kaWYgLyogVU5JWCAqLwotZXh0ZXJuIGNoYXIgKldIT0NNRDsK LSNlbmRpZiAvKiBPUzIgKi8KLQotZXh0ZXJuIGNoYXIgdHRuYW1lW107Ci0KLWV4dGVybiBDSEFS IHNzdGF0ZTsKLQotZXh0ZXJuIGludCBuZXR3b3JrOwkJCS8qIEhhdmUgYWN0aXZlIG5ldHdvcmsg Y29ubmVjdGlvbiAqLwotZXh0ZXJuIGludCBuZXR0eXBlOwkJCS8qIFR5cGUgb2YgbmV0d29yayAq LwotZXh0ZXJuIGludCB0dG5wcm90bzsgICAgICAgICAgICAgICAgICAgIC8qIE5FVF9UQ1BCIHBy b3RvY29sICovCi0KLSNpZm5kZWYgTk9ESUFMCi1leHRlcm4gaW50IGRpYWxzdGEsIGRpYWxhdG1v LCBkaWFsY29uLCBkaWFsY3E7IC8qIERJQUwgc3RhdHVzLCBldGMuICovCi0jZW5kaWYgLyogTk9E SUFMICovCi0KLSNpZmRlZiBDS19BUEMKLWV4dGVybiBpbnQgYXBjYWN0aXZlLCBhcGNzdGF0dXM7 Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0KLSNpZm5kZWYgTk9QVVNICi0jaWZuZGVmIE5PRlJJTExT Ci1leHRlcm4gY2hhciBlZGl0b3JbXTsKLWV4dGVybiBjaGFyIGVkaXRvcHRzW107Ci1leHRlcm4g Y2hhciBlZGl0ZmlsZVtdOwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0jZW5kaWYgLyogTk9QVVNI ICovCi0KLSNpZmRlZiBCUk9XU0VSCi1leHRlcm4gY2hhciBicm93c2VyW107CQkJLyogV2ViIGJy b3dzZXIgYXBwbGljYXRpb24gKi8KLWV4dGVybiBjaGFyIGJyb3dzb3B0c1tdOwkJLyogV2ViIGJy b3dzZXIgb3B0aW9ucyAqLwotZXh0ZXJuIGNoYXIgYnJvd3N1cmxbXTsJCQkvKiBNb3N0IHJlY2Vu dCBVUkwgKi8KLSNlbmRpZiAvKiBCUk9XU0VSICovCi0jaWZuZGVmIE5PRlRQCi1jaGFyIGZ0cGFw cFtDS01BWFBBVEgrMV0gPSB7IE5VTCwgTlVMIH07IC8qIGZ0cCBleGVjdXRhYmxlICovCi1jaGFy IGZ0cG9wdHNbMTI4XSA9IHsgTlVMLCBOVUwgfTsJLyogZnRwIGNvbW1hbmQtbGluZSBvcHRpb25z ICovCi0jZW5kaWYgLyogTk9GVFAgKi8KLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIG9ub2ZmW107CQkv KiBPbi9PZmYga2V5d29yZCB0YWJsZSAqLwotCi0jaWZkZWYgQ0tfVE1QRElSCi1pbnQgZl90bXBk aXIgPSAwOwkJCS8qIERpcmVjdG9yeSBjaGFuZ2VkIHRlbXBvcmFyaWx5ICovCi1jaGFyIHNhdmRp cltUTVBESVJMRU5dOwkJCS8qIEZvciBzYXZpbmcgY3VycmVudCBkaXJlY3RvcnkgKi8KLSNlbmRp ZiAvKiBDS19UTVBESVIgKi8KLQotaW50IGFjdGl2ZWNtZCA9IC0xOwkJCS8qIEtleXdvcmQgaW5k ZXggb2YgYWN0aXZlIGNvbW1hbmQgKi8KLWludCBkb2NvbnggPSAtMTsJCQkvKiBDT05ORUNULWNs YXNzIGNvbW1hbmQgYWN0aXZlICovCi1pbnQgb29mbGFnID0gMDsJCQkJLyogVXNlci1zZXR0YWJs ZSBvbi9vZmYgZmxhZyAqLwotCi1pbnQgcmNmbGFnID0gMDsJCQkJLyogUG9pbnRlciB0byBob21l IGRpcmVjdG9yeSBzdHJpbmcgKi8KLWludCByZXBhcnMsCQkJCS8qIFJlcGFyc2UgbmVlZGVkICov Ci0gICAgdGVjaG8gPSAwOwkJCQkvKiBUYWtlIGVjaG8gKi8KLWludCBzZWNobyA9IDE7CQkJCS8q IFNDUklQVCBlY2hvICovCi0KLWludCB4aXR3YXJuID0JCQkvKiBXYXJuIGFib3V0IG9wZW4gY29u bmVjdGlvbiBvbiBleGl0ICovCi0jaWZkZWYgTk9XQVJOCi0wCi0jZWxzZQotMQotI2VuZGlmIC8q IE5PV0FSTiAqLwotOwotCi1zdHJ1Y3Qga2V5dGFiIG9ub2Zmc3dbXSA9IHsKLSAgICB7ICIvb2Zm IiwgMCwgMCB9LAotICAgIHsgIi9vbiIsICAxLCAwIH0KLX07Ci0KLSNpZmRlZiBDS0VYRUMKLXN0 cnVjdCBrZXl0YWIgcmVkaXJzd1tdID0gewotICAgIHsgIi9yZWRpcmVjdCIsIDEsIDAgfQotfTsK LSNlbmRpZiAvKiBDS0VYRUMgKi8KLQotI2lmbmRlZiBOT1hNSVQKLS8qIFZhcmlhYmxlcyBmb3Ig VFJBTlNNSVQgY29tbWFuZCAqLwotCi1pbnQgeG1pdHggPSAxOwkJCS8qIFdoZXRoZXIgdG8gZWNo byBkdXJpbmcgVFJBTlNNSVQgKi8KLWludCB4bWl0ZiA9IDA7CQkJLyogQ2hhcmFjdGVyIHRvIGZp bGwgZW1wdHkgbGluZXMgKi8KLWludCB4bWl0bCA9IDA7CQkJLyogMCA9IERvbid0IHNlbmQgbGlu ZWZlZWQgdG9vICovCi1pbnQgeG1pdHAgPSBMRjsJCQkvKiBIb3N0IGxpbmUgcHJvbXB0ICovCi1p bnQgeG1pdHMgPSAwOwkJCS8qIFVzZSBzaGlmdC1pbi9zaGlmdC1vdXQsIDAgPSBubyAqLwotaW50 IHhtaXR3ID0gMDsJCQkvKiBNaWxsaXNlY29uZHMgdG8gcGF1c2UgZHVyaW5nIFRSQU5TTUlUICov Ci1pbnQgeG1pdHQgPSAxOwkJCS8qIFNlY29uZHMgdG8gd2FpdCBmb3IgZWFjaCBjaGFyIHRvIGVj aG8gKi8KLWludCB4bWl0YSA9IDE7CQkJLyogQWN0aW9uIHVwb24gdGltZW91dCAqLwotCi0jZGVm aW5lIFhNSV9CSU4gMQotI2RlZmluZSBYTUlfVFhUIDIKLSNkZWZpbmUgWE1JX0NNRCAzCi0jZGVm aW5lIFhNSV9UUkEgNAotI2RlZmluZSBYTUlfVlJCIDUKLSNkZWZpbmUgWE1JX1FVSSA2Ci0jZGVm aW5lIFhNSV9OT1cgNwotI2RlZmluZSBYTUlfTk9FIDgKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIg eG1pdHN3W10gPSB7CS8qIFRSQU5TTUlUIGNvbW1hbmQgb3B0aW9ucyAqLwotICAgIHsgIi9iaW5h cnkiLCAgICAgICAgICBYTUlfQklOLCAwIH0sCi0jaWZkZWYgUElQRVNFTkQKLSAgICB7ICIvY29t bWFuZCIsICAgICAgICAgWE1JX0NNRCwgQ01fSU5WfENNX1BTSCB9LAotI2VuZGlmIC8qIFBJUEVT RU5EICovCi0gICAgeyAiL25vZWNobyIsICAgICAgICAgIFhNSV9OT0UsIDAgfSwKLSAgICB7ICIv bm93YWl0IiwgICAgICAgICAgWE1JX05PVywgMCB9LAotI2lmZGVmIFBJUEVTRU5ECi0gICAgeyAi L3BpcGUiLCAgICAgICAgICAgIFhNSV9DTUQsIDAgfSwKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwot I2lmZGVmIENPTU1FTlQKLSAgICB7ICIvcXVpZXQiLCAgICAgICAgICAgWE1JX1FVSSwgMCB9LAot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB7ICIvdGV4dCIsICAgICAgICAgICAgWE1JX1RYVCwg MCB9LAotICAgIHsgIi90cmFuc3BhcmVudCIsICAgICBYTUlfVFJBLCAwIH0sCi0jaWZkZWYgQ09N TUVOVAotICAgIHsgIi92ZXJib3NlIiwgICAgICAgICBYTUlfVlJCLCAwIH0sCi0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsKLSNkZWZpbmUgTlhNSVRTVyBzaXplb2Yo eG1pdHN3KS9zaXplb2Yoc3RydWN0IGtleXRhYikgLSAxCi1zdGF0aWMgaW50IG54bWl0c3cgPSBO WE1JVFNXOwotCi0jZW5kaWYgLyogTk9YTUlUICovCi0KLS8qIERlY2xhcmF0aW9ucyBmcm9tIGNr P2Zpby5jIG1vZHVsZSAqLwotCi1leHRlcm4gY2hhciAqU1BBQ01ELCAqU1BBQ00yOwkJLyogU1BB Q0UgY29tbWFuZHMgKi8KLQotLyogQ29tbWFuZC1vcmllbnRlZCBpdGVtcyAqLwotCi0jaWZkZWYg RENNREJVRgotZXh0ZXJuIGNoYXIgKmNtZGJ1ZjsJCQkvKiBDb21tYW5kIGJ1ZmZlcnMgKi8KLWV4 dGVybiBjaGFyICphdG1idWY7Ci1leHRlcm4gY2hhciAqbGluZTsJCQkvKiBDaGFyYWN0ZXIgYnVm ZmVyIGZvciBhbnl0aGluZyAqLwotZXh0ZXJuIGNoYXIgKnRtcGJ1ZjsJCQkvKiBTaG9ydCB0ZW1w b3Jhcnkgc3RyaW5nIGJ1ZmZlciAqLwotZXh0ZXJuIGludCAqaWZjbWQ7Ci1leHRlcm4gaW50ICpp bnRpbWU7Ci1leHRlcm4gaW50ICppbnBjYXM7Ci0jZWxzZQotZXh0ZXJuIGNoYXIgY21kYnVmW107 CQkJLyogQ29tbWFuZCBidWZmZXJzICovCi1leHRlcm4gY2hhciBhdG1idWZbXTsKLWV4dGVybiBj aGFyIGxpbmVbXTsJCQkvKiBDaGFyYWN0ZXIgYnVmZmVyIGZvciBhbnl0aGluZyAqLwotZXh0ZXJu IGNoYXIgdG1wYnVmW107CQkJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLwotZXh0ZXJuIGludCBpZmNt ZFtdOwotZXh0ZXJuIGludCBpbnRpbWVbXTsKLWV4dGVybiBpbnQgaW5wY2FzW107Ci0jZW5kaWYg LyogRENNREJVRiAqLwotCi0jaWZuZGVmIE5PU1BMCi1leHRlcm4gY2hhciAqIHByc3RyaW5nW107 Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotY2hhciAqbHA7CQkJCS8qIFBvaW50ZXIgdG8gbGluZSBi dWZmZXIgKi8KLQotI2lmbmRlZiBOT1NQTAotaW50IHZhcmV2YWwgPSAxOwkJCS8qIEV2YWx1YXRp b24gbWV0aG9kICovCi1pbnQgdW5rbWFjcm8gPSAwOwkJCS8qIEZsYWcgZm9yIGluIE9OX1VOS05P V05fQ09NTUFORCAqLwotaW50IG9sZGV2YWwgPSAwOwotY2hhciBldmFsYnVmWzMzXTsJCQkvKiBF VkFMVUFURSByZXN1bHQgKi8KLWV4dGVybiBjaGFyICogaW5wYnVmOwkJCS8qIEJ1ZmZlciBmb3Ig SU5QVVQgYW5kIFJFSU5QVVQgKi8KLWNoYXIgKmlucGJwOwkJCQkvKiBBbmQgcG9pbnRlciB0byBz YW1lICovCi1pbnQgbV9mb3VuZDsJCQkJLyogTUlOUFVUIHJlc3VsdCAqLwotaW50IGlfYWN0aXZl ID0gMDsJCQkvKiBJTlBVVCBjb21tYW5kIGlzIGFjdGl2ZSAqLwotY2hhciAqbXNbTUlOUE1BWF07 CQkJLyogUG9pbnRlcnMgdG8gTUlOUFVUIHN0cmluZ3MgKi8KLXN0YXRpYyBpbnQgbXBpbml0ZWQg PSAwOwkJLyogRmxhZyB0aGV5IGhhdmUgYmVlbiBpbml0aWFsaXplZCAqLwotc3RhdGljIGludCBt cFtNSU5QTUFYXTsJCQkvKiBhbmQgTUlOUFVUIGZsYWdzICovCi1leHRlcm4gaW50IGZuZGlhZ3Ms IGZuZXJyb3IsIGZuc3VjY2VzczsJLyogRnVuY3Rpb24gZGlhZ25vc3RpY3MgKi8KLSNpZm5kZWYg Tk9TRVhQCi1jaGFyICogbGFzdHNleHAgPSBOVUxMOwkJCS8qIFMtRXhwcmVzc2lvbnMgKi8KLWNo YXIgKiBzZXhwdmFsID0gTlVMTDsKLWludCBzZXhwZWNobyA9IFNFVF9BVVRPOwotI2VuZGlmIC8q IE5PU0VYUCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLWNoYXIgcHNhdmVbUFJPTVBUTF0gPSB7 IE5VTCB9OwkJLyogRm9yIHNhdmluZyAmIHJlc3RvcmluZyBwcm9tcHQgKi8KLQotZXh0ZXJuIGlu dCBzdWNjZXNzOwkJCS8qIENvbW1hbmQgc3VjY2Vzcy9mYWlsdXJlIGZsYWcgKi8KLWV4dGVybiBp bnQgY21kbHZsOwkJCS8qIEN1cnJlbnQgcG9zaXRpb24gaW4gY29tbWFuZCBzdGFjayAqLwotCi0j aWZuZGVmIE5PU1BMCi1pbnQJCQkJCS8qIFNFVCBJTlBVVCBwYXJhbWV0ZXJzLiAqLwotLyogTm90 ZSwgSU5QVVQgVElNRU9VVCwgaW50aW1lW10sIGlzIG9uIHRoZSBjb21tYW5kLWxldmVsIHN0YWNr LiAqLwotICBpbmJ1ZnNpemUgPSAwLAkJCS8qIElOUFVUIGJ1ZmZlciBzaXplICovCi0gIGluZGVm ID0gMSwJCQkJLyogZGVmYXVsdCB0aW1lb3V0LCBzZWNvbmRzICovCi0gIGluZWNobyA9IDEsCQkJ CS8qIDEgPSBlY2hvIG9uICovCi0gIGluYXV0b2RsID0gMCwJCQkJLyogSU5QVVQgYXV0b2Rvd25s b2FkICovCi0gIGluaW50ciA9IDEsCQkJCS8qIElOUFVUIGludGVycnVwaW9uIGFsbG93ZWQgKi8K LSAgaW5zaWxlbmNlID0gMDsJCQkvKiAwID0gbm8gc2lsZW5jZSBjb25zdHJhaW50ICovCi0KLSNp ZmRlZiBDS0ZMT0FUCi1DS0ZMT0FUIGluc2NhbGUgPSAxLjA7CQkJLyogVGltZW91dCBzY2FsZSBm YWN0b3IgKi8KLSNlbmRpZgkvKiBDS0ZMT0FUICovCi0KLSNpZmRlZiBPUzIKLWludCBpbnRlcm0g PSAxOwkJCQkvKiBUZXJtaW5hbCBlbXVsYXRvciBkaXNwbGF5cyBpbnB1dCAqLwotI2VuZGlmIC8q IE9TMiAqLwotaW50IG1hY2x2bCA9IC0xOwkJCS8qIE1hY3JvIG5lc3RpbmcgbGV2ZWwgKi8KLWlu dCBtZWNobyA9IDA7CQkJCS8qIE1hY3JvIGVjaG8sIDAgPSBkb24ndCAqLwotY2hhciB2YXJuYW1b Nl07CQkJCS8qIEZvciB2YXJpYWJsZSBuYW1lcyAqLwotZXh0ZXJuIGludCBtYWNhcmdjW107CQkJ LyogQVJHQyBmcm9tIG1hY3JvIGludm9jYXRpb24gKi8KLQotZXh0ZXJuIGNoYXIgKm1fYXJnW01B Q0xFVkVMXVtOQVJHU107CS8qIFN0YWNrIG9mIG1hY3JvIGFyZ3VtZW50cyAqLwotZXh0ZXJuIGNo YXIgKm1ydmFsW107Ci0KLWV4dGVybiBjaGFyICoqYV9wdHJbXTsJCQkvKiBBcnJheSBwb2ludGVy cyAqLwotZXh0ZXJuIGludCBhX2RpbVtdOwkJCS8qIEFycmF5IGRpbWVuc2lvbnMgKi8KLWV4dGVy biBpbnQgYV9saW5rW107Ci0KLSNpZmRlZiBEQ01EQlVGCi1leHRlcm4gc3RydWN0IGNtZHB0ciAq Y21kc3RrOwkJLyogVGhlIGNvbW1hbmQgc3RhY2sgaXRzZWxmICovCi0jZWxzZQotZXh0ZXJuIHN0 cnVjdCBjbWRwdHIgY21kc3RrW107CQkvKiBUaGUgY29tbWFuZCBzdGFjayBpdHNlbGYgKi8KLSNl bmRpZiAvKiBEQ01EQlVGICovCi0KLWxvbmcgY2tfYWxhcm0gPSAwOwkJCS8qIFNFVCBBTEFSTSB2 YWx1ZSAqLwotY2hhciBhbHJtX2RhdGVbMjRdID0geyAnICcsJyAnLCcgJywnICcsJyAnLCcgJywn ICcsJyAnLCcgJyB9OwotY2hhciBhbHJtX3RpbWVbMjRdID0geyAnICcsJyAnLCcgJywnICcsJyAn LCcgJywnICcgfTsKLQotc3RydWN0IGtleXRhYiBpbnB1dHN3W10gPSB7Ci0gICAgeyAiL2NsZWFy IiwgICBJTlBTV19DTFIsIDAgfSwKLSAgICB7ICIvY291bnQiLCAgIElOUFNXX0NPVSwgQ01fQVJH IH0sCi0gICAgeyAiL25vbWF0Y2giLCBJTlBTV19OT00sIDAgfSwKLSAgICB7ICIvbm93cmFwIiwg IElOUFNXX05PVywgMCB9Ci19Owotc3RhdGljIGludCBuaW5wdXRzdyA9IHNpemVvZihpbnB1dHN3 KS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLS8qIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIHJl Y29uY2lsZWQgd2l0aCB0aGUgYWJvdmUgKi8KLQotI2lmZGVmIENPTU1FTlQJCQkJLyogSU5QVVQg c3dpdGNoZXMgbm90IHVzZWQgeWV0Li4uICovCi1zdGF0aWMgc3RydWN0IGtleXRhYiBpbnN3dGFi W10gPSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgIHsgIi9hc3NpZ24iLCAgICAgICBJTl9BU0csIENN X0FSRyB9LAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB7ICIvYXV0b2Rvd25sb2FkIiwgSU5f QURMLCBDTV9BUkcgfSwKLSAgICB7ICIvY2FzZSIsICAgICAgICAgSU5fQ0FTLCBDTV9BUkcgfSwK LSAgICB7ICIvZWNobyIsICAgICAgICAgSU5fRUNILCBDTV9BUkcgfSwKLSAgICB7ICIvaW50ZXJy dXB0cyIsICAgSU5fTk9JLCBDTV9BUkcgfSwKLSAgICB7ICIvc2lsZW5jZSIsICAgICAgSU5fU0lM LCBDTV9BUkcgfSwKLSNpZmRlZiBDT01NRU5UCi0gICAgeyAiL3BhdHRlcm4iLCAgICAgIElOX1BB VCwgQ01fQVJHIH0sCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsK LXN0YXRpYyBpbnQgbmluc3d0YWIgPSAoc2l6ZW9mKGluc3d0YWIpIC8gc2l6ZW9mKHN0cnVjdCBr ZXl0YWIpKSAtIDE7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0KLSNlbmRpZiAvKiBOT1NQTCAq LwotCi1zdGF0aWMgaW50IHgsIHksIHogPSAwOwkJCS8qIExvY2FsIHdvcmtlcnMgKi8KLXN0YXRp YyBjaGFyICpzOwotCi0jaWZkZWYgQ0tfTUlOUFVUCi1zdGF0aWMgY2hhciBjMWNoYXJzW10gPSB7 CQkvKiBDMSBjb250cm9sIGNoYXJzIGVzY2VwdCBOVUwgKi8KLSAgICAwMDEsMDAyLDAwMywwMDQs MDA1LDAwNiwwMDcsMDEwLDAxMSwwMTIsMDEzLDAxNCwwMTUsMDE2LDAxNywwMjAsCi0gICAgMDIx LDAyMiwwMjMsMDI0LDAyNSwwMjYsMDI3LDAzMCwwMzEsMDMyLDAzMywwMzQsMDM1LDAzNiwwMzcK LX07Ci0jZW5kaWYgLyogQ0tfTUlOUFVUICovCi0KLSNkZWZpbmUgeHN5c3RlbShzKSB6c3lzY21k KHMpCi0KLS8qIFRvcC1MZXZlbCBJbnRlcmFjdGl2ZSBDb21tYW5kIEtleXdvcmQgVGFibGUgKi8K LS8qIEtleXdvcmRzIG11c3QgYmUgaW4gbG93ZXJjYXNlIGFuZCBpbiBhbHBoYWJldGljYWwgb3Jk ZXIuICovCi0KLXN0cnVjdCBrZXl0YWIgY21kdGFiW10gPSB7Ci0jaWZuZGVmIE5PUFVTSAotICAg IHsgIiEiLAkgICBYWFNIRSwgQ01fSU5WfENNX1BTSCB9LCAvKiBTaGVsbCBlc2NhcGUgKi8KLSNl bHNlCi0gICAgeyAiISIsCSAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0ggfSwKLSNlbmRpZiAvKiBO T1BVU0ggKi8KLSAgICB7ICIjIiwgICAgCSAgIFhYQ09NLCBDTV9JTlYgfSwJLyogQ29tbWVudCAq LwotI2lmbmRlZiBOT1NQTAotICAgIHsgIigiLCAgICAgICAgICAgWFhTRVhQLENNX0lOViB9LAkv KiBTLUV4cHJlc3Npb24gKi8KLSAgICB7ICIuIiwgICAgICAgICAgIFhYREVGLCBDTV9JTlYgfSwJ LyogQXNzaWdubWVudCAqLwotICAgIHsgIjoiLCAgICAgICAgICAgWFhMQkwsIENNX0lOViB9LAkv KiBMYWJlbCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZkZWYgQ0tfUkVESVIKLSNpZm5kZWYg Tk9QVVNICi0gICAgeyAiPCIsICAgICAgICAgICBYWEZVTiwgQ01fSU5WfENNX1BTSCB9LCAvKiBS RURJUkVDVCAqLwotI2Vsc2UKLSAgICB7ICI8IiwgICAgICAgICAgIFhYTk9UQVYsIENNX0lOVnxD TV9QU0ggfSwgLyogUkVESVJFQ1QgKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNlbmRpZiAvKiBD S19SRURJUiAqLwotI2lmbmRlZiBOT1BVU0gKLSAgICB7ICJAIiwgICAgICAgICAgIFhYU0hFLCBD TV9JTlZ8Q01fUFNIIH0sIC8qIERDTCBlc2NhcGUgKi8KLSNlbHNlCi0gICAgeyAiQCIsICAgICAg ICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fUFNIIH0sIC8qIERDTCBlc2NhcGUgKi8KLSNlbmRpZiAv KiBOT1BVU0ggKi8KLQotI2lmZGVmIENLX1JFQ0FMTAotICAgIHsgIl4iLCAgICAgICAgICAgWFhS RURPLENNX0lOVnxDTV9OT1IgfSwgLyogU3lub255bSBmb3IgUkVETyAqLwotI2VuZGlmIC8qIENL X1JFQ0FMTCAqLwotI2lmbmRlZiBOT1NQTAotICAgIHsgIl9hc2ciLCAgICAgICAgWFhBU1gsICAg Q01fSU5WIH0sCS8qIFVzZWQgaW50ZXJuYWxseSBieSBGT1IsIGV0YyAqLwotICAgIHsgIl9hc3Np Z24iLCAgICAgWFhBU1gsICAgQ01fSU5WIH0sCS8qIFVzZWQgaW50ZXJuYWxseSBieSBGT1IsIGV0 YyAqLwotICAgIHsgIl9kZWNyZW1lbnQiLCAgWFhfREVDUiwgQ01fSU5WIH0sCi0gICAgeyAiX2Rl ZmluZSIsICAgICBYWERGWCwgICBDTV9JTlYgfSwJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IEZPUiwg ZXRjICovCi0gICAgeyAiX2V2YWx1YXRlIiwgICBYWF9FVkFMLCBDTV9JTlYgfSwKLSAgICB7ICJf Zm9yd2FyZCIsICAgIFhYWEZXRCwgIENNX0lOViB9LAkvKiBVc2VkIGludGVybmFsbHkgYnkgU1dJ VENIICAgKi8KLSAgICB7ICJfZ2V0YXJncyIsICAgIFhYR1RBLCAgIENNX0lOViB9LAkvKiBVc2Vk IGludGVybmFsbHkgYnkgRk9SLCBldGMgKi8KLSAgICB7ICJfaW5jcmVtZW50IiwgIFhYX0lOQ1Is IENNX0lOViB9LAotICAgIHsgIl9wdXRhcmdzIiwgICAgWFhQVEEsICAgQ01fSU5WIH0sCS8qIFVz ZWQgaW50ZXJuYWxseSBieSBGT1IsIGV0YyAqLwotICAgIHsgIl91bmRlZmluZSIsICAgWFhVTkRG WCwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIHsgImFib3V0IiwgICAgICAg WFhWRVIsICAgQ01fSU5WIH0sCS8qIFN5bm9ueW0gZm9yIFZFUlNJT04gKi8KLSNpZm5kZWYgTk9T UEwKLSNpZmRlZiBORVdGVFAKLSAgICB7ICJhY2NvdW50IiwgICAgIFhYQUNDVCwgIENNX0lOViB9 LCAvKiAoRlRQKSBBY2NvdW50ICovCi0jZW5kaWYgLyogTkVXRlRQICovCi0jaWZkZWYgQUREQ01E Ci0gICAgeyAiYWRkIiwgICAgICAgICBYWEFERCwgMCB9LAkvKiBBREQgKi8KLSNlbmRpZiAvKiBB RERDTUQgKi8KLSNpZm5kZWYgTk9ESUFMCi0gICAgeyAiYW5zd2VyIiwgICAgICBYWEFOU1csIENN X0xPQyB9LAkvKiBBTlNXRVIgdGhlIHBob25lICovCi0jZWxzZQotICAgIHsgImFuc3dlciIsICAg ICAgWFhOT1RBViwgQ01fSU5WfENNX0xPQyB9LCAvKiBBTlNXRVIgdGhlIHBob25lICovCi0jZW5k aWYgLyogTk9ESUFMICovCi0gICAgeyAiYXBjIiwgICAgICAgICBYWEFQQywgMCB9LAkvKiBBcHBs aWNhdGlvbiBQcm9ncmFtIENvbW1hbmQgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJhcnJheSIs ICAgICAgIFhYQVJSQVksIDAgfSwJLyogQXJyYXkgb3BlcmF0aW9ucyAqLwotI2VuZGlmIC8qIE5P U1BMICovCi0gICAgeyAiYXNjaWkiLCAgICAgICBYWEFTQywgQ01fSU5WIH0sCS8qID09IFNFVCBG SUxFIFRZUEUgVEVYVCAqLwotICAgIHsgImFzZyIsICAgICAgICAgWFhBU1MsIENNX0lOViB9LAkv KiBJbnZpc2libGUgc3lub255bSBmb3IgQVNTSUdOICovCi0gICAgeyAiYXNrIiwgICAgICAgICBY WEFTSywgMCB9LAkvKiBBU0sgZm9yIHRleHQsIGFzc2lnbiB0byB2YXJpYWJsZSAqLwotICAgIHsg ImFza3EiLCAgICAgICAgWFhBU0tRLDAgfSwJLyogQVNLIHF1aWV0bHkgKG5vIGVjaG8pICovCi0j aWZuZGVmIE5PU1BMCi0gICAgeyAiYXNzIiwgICAgICAgICBYWEFTUywgQ01fSU5WfENNX0FCUiB9 LCAvKiBBU1NJR04gKi8KLSAgICB7ICJhc3NlcnQiLCAgICAgIFhYQVNTRVIsIENNX0lOViB9LAkv KiBBU1NFUlQgKi8KLSAgICB7ICJhc3NpZ24iLCAgICAgIFhYQVNTLCAwIH0sCS8qIEFTU0lHTiAq LwotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIE5PWEZFUgotI2lmbmRlZiBOT0NTRVRTCi0g ICAgeyAiYXNzb2NpYXRlIiwgICBYWEFTU09DLCAwIH0sCS8qIEFTU09DSUFURSAqLwotI2Vsc2UK LSAgICB7ICJhc3NvY2lhdGUiLCAgIFhYTk9UQVYsIENNX0lOViB9LAkvKiBBU1NPQ0lBVEUgKi8K LSNlbmRpZiAvKiBOT0NTRVRTICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZkZWYgQ0tfS0VS QkVST1MKLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgIHsgImF1dGhlbnRpY2F0ZSIsWFhB VVRILCAwIH0sCS8qIEF1dGhlbnRpY2F0aW9uICovCi0jZWxzZQotICAgIHsgImF1dGhlbnRpY2F0 ZSIsWFhBVVRILCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2Vu ZGlmIC8qIENLX0tFUkJFUk9TICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9GUklM TFMKLSAgICB7ICJiYWNrIiwgICAgICAgIFhYQkFDSywgMCB9LAkvKiBCQUNLIHRvIHByZXZpb3Vz IGRpcmVjdG9yeSAqLwotI2Vsc2UKLSAgICB7ICJiYWNrIiwgICAgICAgIFhYTk9UQVYsQ01fSU5W IH0sCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSAgICB7ICJiZWVwIiwgICAgICAgIFhYQkVFUCxD TV9JTlYgfSwJLyogQkVFUCAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJiaW5hcnkiLCAgICAg IFhYQklOLCBDTV9JTlYgfSwJLyogPT0gU0VUIEZJTEUgVFlQRSBCSU5BUlkgKi8KLSNlbmRpZiAv KiBOT1hGRVIgKi8KLSNpZm5kZWYgTk9GUklMTFMKLSAgICB7ICJidWciLCAgICAgICAgIFhYQlVH LCBDTV9JTlYgfSwJLyogQlVHIHJlcG9ydCBpbnN0cnVjdGlvbnMgKi8KLSNlbHNlCi0gICAgeyAi YnVnIiwgICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwot I2lmZGVmIEJST1dTRVIKLSAgICB7ICJicm93c2UiLCAgICAgIFhYQlJPV1MsIENNX1BTSHxDTV9M T0MgfSwgLyogQlJPV1NFIChzdGFydCBicm93c2VyKSAqLwotI2Vsc2UKLSAgICB7ICJicm93c2Ui LCAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0h8Q01fTE9DIH0sCi0jZW5kaWYgLyogQlJPV1NF UiAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJieWUiLCAgICAgICAgIFhYQllFLCAwIH0sCS8q IEJZRSB0byByZW1vdGUgc2VydmVyICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZuZGVmIE5P TE9DQUwKLSAgICB7ICJjIiwgICAgICAgICAgIFhYQ09OLCBDTV9JTlZ8Q01fQUJSfENNX0xPQyB9 LCAvKiAoQ09OTkVDVCkgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZuZGVmIE5PRlJJTExT Ci0gICAgeyAiY2F0IiwgICAgICAgICBYWENBVCwgQ01fSU5WIH0sCS8qIEludmlzaWJsZSBzeW5v bnltIGZvciBUWVBFICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSNpZm5kZWYgTk9TUEwKLQot I2lmbmRlZiBOT1hGRVIKLSAgICB7ICJjYXV0aW91cyIsICAgIFhYQ0FVLCBDTV9JTlYgfSwKLSNl bmRpZiAvKiBOT1hGRVIgKi8KLQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICB7ICJjZCIsICAg ICAgICAgIFhYQ1dELCAwIH0sCS8qIENoYW5nZSBEaXJlY3RvcnkgKi8KLSAgICB7ICJjZHVwIiwg ICAgICAgIFhYQ0RVUCwgQ01fSU5WIH0sCS8qIENoYW5nZSBEaXJlY3RvcnkgVXAgKi8KLQotI2lm bmRlZiBOT1hGRVIKLSNpZmRlZiBQSVBFU0VORAotICAgIHsgImNnZXQiLCAgICAgICAgWFhDR0VU LCBDTV9JTlZ8Q01fUFNIIH0sIC8qIENHRVQgKi8KLSNlbHNlCi0gICAgeyAiY2dldCIsICAgICAg ICBYWE5PVEFWLCBDTV9JTlZ8Q01fUFNIIH0sIC8qIENHRVQgKi8KLSNlbmRpZiAvKiBQSVBFU0VO RCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHsgImNoIiwgICAgICAgICAgWFhDSEssICAg Q01fSU5WfENNX0FCUiB9LAotICAgIHsgImNoZWNrIiwgICAgICAgWFhDSEssICAgMCB9LAkvKiBD SEVDSyBmb3IgYSBmZWF0dXJlICovCi0jaWZkZWYgQ0tfUEVSTVMKLSNpZmRlZiBVTklYCi0gICAg eyAiY2htb2QiLCAgICAgICBYWENITU9ELCAwIH0sCS8qIENITU9EICovCi0jZWxzZQotICAgIHsg ImNobW9kIiwgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogVU5JWCAqLwotI2Vs c2UKLSAgICB7ICJjaG1vZCIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIENL X1BFUk1TICovCi0jaWZkZWYgQ0tST09UCi0gICAgeyAiY2hyb290IiwgICAgICBYWENIUlQsICBD TV9JTlYgfSwJLyogQ0hST09UICovCi0jZW5kaWYgLyogQ0tST09UICovCi0gICAgeyAiY2tlcm1p dCIsICAgICBYWEtFUk1JLCBDTV9JTlYgfSwJLyogQ0tFUk1JVCAobGlrZSBLRVJNSVQpICovCi0g ICAgeyAiY2wiLCAgICAgICAgICBYWENMTywgICBDTV9BQlJ8Q01fSU5WIH0sCi0jaWZuZGVmIE5P RlJJTExTCi0gICAgeyAiY2xlYXIiLCAgICAgICBYWENMRSwgMCB9LAkvKiBDTEVBUiBpbnB1dCBh bmQvb3IgZGV2aWNlIGJ1ZmZlciAqLwotI2Vsc2UKLSAgICB7ICJjbGVhciIsICAgICAgIFhYTk9U QVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PRlJJTExTICovCi0gICAgeyAiY2xvc2UiLAkgICAg IFhYQ0xPLCAwIH0sCS8qIENMT1NFIGEgbG9nIG9yIG90aGVyIGZpbGUgKi8KLSAgICB7ICJjbHMi LCAgICAgICAgIFhYQ0xTLCBDTV9JTlYgfSwJLyogQ2xlYXIgU2NyZWVuIChDTFMpICovCi0gICAg eyAiY29tbWVudCIsICAgICBYWENPTSwgQ01fSU5WIH0sCS8qIEludHJvZHVjZSBhIGNvbW1lbnQg Ki8KLSNpZm5kZWYgTk9MT0NBTAotICAgIHsgImNvbm5lY3QiLCAgICAgWFhDT04sIENNX0xPQyB9 LAkvKiBCZWdpbiB0ZXJtaW5hbCBjb25uZWN0aW9uICovCi0jZWxzZQotICAgIHsgImNvbm5lY3Qi LCAgICAgWFhOT1RBViwgQ01fTE9DIH0sCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIHsgImNv bnRpbnVlIiwgICAgWFhDT05ULCAgQ01fSU5WIH0sCS8qIENPTlRJTlVFICovCi0jaWZuZGVmIE5P RlJJTExTCi0jaWZkZWYgWkNPUFkKLSAgICB7ICJjbyIsICAgICAgICAgIFhYQ1BZLCBDTV9JTlZ8 Q01fQUJSIH0sCi0gICAgeyAiY29wIiwgICAgICAgICBYWENQWSwgQ01fSU5WfENNX0FCUiB9LAot ICAgIHsgImNvcHkiLCAgICAgICAgWFhDUFksIDAgfSwJLyogQ09QWSBhIGZpbGUgKi8KLSNlbHNl Ci0gICAgeyAiY29weSIsICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBaQ09Q WSAqLwotICAgIHsgImNvcHlyaWdodCIsICAgWFhDUFIsIENNX0lOViB9LAkvKiBDT1BZUklHSFQg Ki8KLSNpZmRlZiBaQ09QWQotICAgIHsgImNwIiwgICAgICAgICAgWFhDUFksIENNX0lOViB9LAkv KiBDT1BZIGEgZmlsZSAqLwotI2VuZGlmIC8qIFpDT1BZICovCi0jaWZuZGVmIE5PTE9DQUwKLSNp Zm5kZWYgT1MyCi0gICAgeyAiY3EiLCAgICAgICAgICBYWENRLCBDTV9JTlZ8Q01fTE9DIH0sIC8q IENRIChjb25uZWN0IHF1aWV0bHkpICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9M T0NBTCAqLwotI2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBQSVBFU0VORAotICAgIHsgImNyZWNlaXZl IiwgICAgWFhDUkVDLENNX0lOVnxDTV9QU0ggfSwgLyogUkVDRUlWRSB0byBhIGNvbW1hbmQgKi8K LSAgICB7ICJjc2VuZCIsICAgICAgIFhYQ1NFTixDTV9JTlZ8Q01fUFNIIH0sIC8qIFNFTkQgZnJv bSBjb21tYW5kICovCi0jZWxzZQotICAgIHsgImNyZWNlaXZlIiwgICAgWFhOT1RBVixDTV9JTlZ8 Q01fUFNIIH0sCi0gICAgeyAiY3NlbmQiLCAgICAgICBYWE5PVEFWLENNX0lOVnxDTV9QU0ggfSwK LSNlbmRpZiAvKiBQSVBFU0VORCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2VuZGlmIC8qIE5P RlJJTExTICovCi0KLSAgICB7ICJjd2QiLAkgICAgIFhYQ1dELCAgIENNX0lOViB9LAkvKiBUcmFk aXRpb25hbCBzeW5vbnltIGZvciBjZCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiZGF0ZSIs ICAgICAgICBYWERBVEUsICAwIH0sCS8qIERBVEUgKi8KLSAgICB7ICJkY2wiLCAgICAgICAgIFhY RENMLCAgIENNX0lOViB9LAkvKiBERUNMQVJFIGFuIGFycmF5IChzZWUgQVJSQVkpICovCi0gICAg eyAiZGVidWciLCAgICAgICBYWERFQlVHLCAwIH0sCS8qIFByaW50IGEgZGVidWdnaW5nIG1zZyBb OS4wXSAgKi8KLSAgICB7ICJkZWNsYXJlIiwgICAgIFhYRENMLCAgIENNX0lOViB9LAkvKiBERUNM QVJFIGFuIGFycmF5IChzZWUgQVJSQVkpICovCi0gICAgeyAiZGVjcmVtZW50IiwgICBYWERFQywg ICAwIH0sCS8qIERFQ1JFTUVOVCBhIG51bWVyaWMgdmFyaWFibGUgKi8KLSAgICB7ICJkZWZpbmUi LCAgICAgIFhYREVGLCAgIDAgfSwJLyogREVGSU5FIGEgbWFjcm8gb3IgdmFyaWFibGUgICAqLwot I2Vsc2UKLSAgICB7ICJkYXRlIiwgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotICAgIHsgImRj bCIsICAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0gICAgeyAiZGVjbGFyZSIsICAgICBYWE5P VEFWLCBDTV9JTlYgfSwKLSAgICB7ICJkZWNyZW1lbnQiLCAgIFhYTk9UQVYsIENNX0lOViB9LAot ICAgIHsgImRlZmluZSIsICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TUEwg Ki8KLQotI2lmbmRlZiBOT0ZSSUxMUwotICAgIHsgImRlbGV0ZSIsICAgICAgWFhERUwsIDAgfSwJ LyogREVMRVRFIGEgZmlsZSAqLwotI2Vsc2UKLSAgICB7ICJkZWxldGUiLCAgICAgIFhYTk9UQVYs IENNX0lOViB9LAotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSNpZm5kZWYgTk9ESUFMCi0gICAg eyAiZGlhbCIsICAgICAgICBYWERJQUwsICBDTV9MT0MgfSwJLyogRElBTCBhIHBob25lIG51bWJl ciAqLwotI2Vsc2UKLSAgICB7ICJkaWFsIiwgICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9MT0Mg fSwKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQotI2lmZGVmIE5UCi0gICAgeyAiZGlhbGVyIiwgICAg ICBYWERJQUxFUiwgQ01fSU5WIH0sIC8qIEs5NSBEaWFsZXIgKi8KLSNlbmRpZiAvKiBOVCAqLwot Ci0gICAgeyAiZGlyZWN0b3J5IiwgICBYWERJUiwgMCB9LAkvKiBESVJFQ1RPUlkgb2YgZmlsZXMg Ki8KLQotI2lmbmRlZiBOT0ZSSUxMUwotI2lmbmRlZiBOT1NFUlZFUgotICAgIHsgImRpc2FibGUi LCAgICAgWFhESVMsIDAgfSwJLyogRElTQUJMRSBhIHNlcnZlciBmdW5jdGlvbiAqLwotI2Vsc2UK LSAgICB7ICJkaXNhYmxlIiwgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PU0VS VkVSICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgIHsgImRv IiwgICAgICAgICAgWFhETywgIDAgfSwJLyogRE8gKGV4ZWN1dGUpIGEgbWFjcm8gKi8KLSNlbHNl Ci0gICAgeyAiZG8iLCAgICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1NQ TCAqLwotCi0gICAgeyAiZSIsICAgICAgICAgICBYWEVYSSwgQ01fSU5WfENNX0FCUiB9LAotCi0j aWZuZGVmIE5PRlJJTExTCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgImUtcGFja2V0IiwgICAgWFhF UlIsIENNX0lOViB9LAkvKiBTZW5kIGFuIEVycm9yLVBhY2tldCAqLwotI2VuZGlmIC8qIE5PWEZF UiAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSAgICB7ICJlY2hvIiwgICAgICAgIFhYRUNI LCAwIH0sCS8qIEVDSE8gdGV4dCAqLwotCi0jaWZuZGVmIE5PRlJJTExTCi0jaWZuZGVmIE5PUFVT SAotICAgIHsgImVkaXQiLCAgICAgICAgWFhFRElULCBDTV9QU0ggfSwJLyogRURJVCAqLwotI2Vs c2UKLSAgICB7ICJlZGl0IiwgICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0ggfSwgLyogRURJ VCAqLwotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSAgICB7 ICJlaWdodGJpdCIsICAgIFhYRUlHSFQsIENNX0lOViB9LAkvKiBFSUdIVEJJVCAqLwotCi0jaWZu ZGVmIE5PU1BMCi0gICAgeyAiZWxzZSIsICAgICAgICBYWEVMUywgQ01fSU5WIH0sCS8qIEVMU0Ug cGFydCBvZiBJRiBzdGF0ZW1lbnQgKi8KLSNlbHNlCi0gICAgeyAiZWxzZSIsICAgICAgICBYWE5P VEFWLCBDTV9JTlYgfSwJLyogRUxTRSBwYXJ0IG9mIElGIHN0YXRlbWVudCAqLwotI2VuZGlmIC8q IE5PU1BMICovCi0KLSNpZm5kZWYgTk9TRVJWRVIKLSNpZm5kZWYgTk9GUklMTFMKLSAgICB7ICJl bmFibGUiLCAgICAgIFhYRU5BLCAgMCB9LAkvKiBFTkFCTEUgYSBzZXJ2ZXIgZnVuY3Rpb24gKi8K LSNlbHNlCi0gICAgeyAiZW5hYmxlIiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAv KiBOT0ZSSUxMUyAqLwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0KLSNpZm5kZWYgTk9TUEwKLSAg ICB7ICJlbmQiLCAgICAgICAgIFhYRU5ELCAgMCB9LAkvKiBFTkQgY29tbWFuZCBmaWxlIG9yIG1h Y3JvICovCi0jZWxzZQotICAgIHsgImVuZCIsICAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0j ZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIHsgImVyYXNlIiwgICAgICAgWFhERUwsIENNX0lOViB9 LAkvKiBTeW5vbnltIGZvciBERUxFVEUgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgIHsgImV2YWx1 YXRlIiwgICAgWFhFVkFMLCAwIH0sCS8qIEVWQUxVQVRFICovCi0jZWxzZQotICAgIHsgImV2YWx1 YXRlIiwgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIHsg ImV4IiwgICAgICAgICAgWFhFWEksIENNX0lOVnxDTV9BQlIgfSwgLyogTGV0ICJleCIgc3RpbGwg YmUgRVhJVCAqLwotCi0jaWZkZWYgQ0tFWEVDCi0gICAgeyAiZXhlYyIsICAgICAgICBYWEVYRUMs IENNX0lOVnxDTV9MT0MgfSwgLyogZXhlYygpICovCi0jZWxzZQotICAgIHsgImV4ZWMiLCAgICAg ICAgWFhOT1RBViwgQ01fSU5WfENNX0xPQyB9LAotI2VuZGlmIC8qIENLRVhFQyAqLwotCi0gICAg eyAiZXhpdCIsCSAgIFhYRVhJLCAwIH0sCQkvKiBFWElUIGZyb20gQy1LZXJtaXQgKi8KLSAgICB7 ICJleHRlbmRlZC1vcHRpb25zIiwgWFhYT1BUUyxDTV9JTlZ8Q01fSExQIH0sIC8qIEV4dGVuZGVk LU9wdGlvbnMgKi8KLQotI2lmZGVmIE9TMgotICAgIHsgImV4dHByb2MiLCAgICAgWFhDT00sIENN X0lOViB9LAkvKiBEdW1teSBjb21tYW5kIGZvciBPUy8yICovCi0jZW5kaWYgLyogT1MyICovCi0K LSNpZm5kZWYgTk9YRkVSCi0gICAgeyAiZiIsICAgICAgICAgICBYWEZJTiwgQ01fSU5WfENNX0FC UiB9LCAvKiBJbnZpc2libGUgYWJicmV2IGZvciBGSU4gKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8K LQotI2lmbmRlZiBOT1NQTAotICAgIHsgImZhaWwiLCAgICAgICAgWFhGQUlMLCBDTV9JTlYgfSwJ LyogRkFJTCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgImZhc3QiLCAgICAgICAgWFhGQVNU LCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIENLQ0hBTk5FTElPCi0g ICAgeyAiZmNsb3NlIiwgICAgICBYWEZfQ0wsIENNX0lOViB9LAkvKiBGQ0xPU0UgKi8KLSAgICB7 ICJmY291bnQiLCAgICAgIFhYRl9DTywgQ01fSU5WIH0sCS8qIEZDT1VOVCAqLwotICAgIHsgImZm bHVzaCIsICAgICAgWFhGX0ZMLCBDTV9JTlYgfSwJLyogRkZMVVNIICovCi0jZW5kaWYgLyogQ0tD SEFOTkVMSU8gKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJmaSIsICAgICAgICAgIFhYRklO LCBDTV9JTlZ8Q01fQUJSIH0sIC8qIEZJTklTSCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0j aWZkZWYgQ0tDSEFOTkVMSU8KLSAgICB7ICJmaWxlIiwgICAgICAgIFhYRklMRSwgMCB9LAkvKiBG SUxFICovCi0jZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0j aWZuZGVmIE5PWEZFUgotICAgIHsgImZpbiIsICAgICAgICAgWFhGSU4sIENNX0lOVnxDTV9BQlIg fSwgLyogRklOSVNIICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgVU5JWE9ST1NL Ci0gICAgeyAiZmluZCIsICAgICAgICBYWEdSRVAsIDAgfSwJLyogRklORCAoZ3JlcCkgKi8KLSNl bHNlCi0gICAgeyAiZmluZCIsICAgICAgICBYWEdSRVAsQ01fSU5WIH0sCi0jZW5kaWYgLyogVU5J WE9ST1NLICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAiZmluaXNoIiwgICAgICBYWEZJTiwg MCB9LAkvKiBGSU5JU0ggKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIFRDUFNPQ0tF VAotICAgIHsgImZpcmV3YWxsIiwgICAgWFhGSVJFVywgQ01fSU5WfENNX0hMUCB9LAotI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLwotCi0jaWZkZWYgQ0tDSEFOTkVMSU8KLSAgICB7ICJmbGlzdCIsICAg ICAgIFhYRl9MSSwgQ01fSU5WIH0sCS8qIEZMSVNUICovCi0gICAgeyAiZm9wZW4iLCAgICAgICBY WEZfT1AsIENNX0lOViB9LAkvKiBGT1BFTiAqLwotI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCi0K LSNpZm5kZWYgTk9TUEwKLSAgICB7ICJmbyIsICAgICAgICAgIFhYRk9SLCBDTV9JTlZ8Q01fQUJS IH0sIC8qIEludmlzaWJsZSBhYmJyZXYgZm9yLi4uICovCi0gICAgeyAiZm9yIiwgICAgICAgICBY WEZPUiwgMCB9LAkvKiBGT1IgbG9vcCAqLwotICAgIHsgImZvcndhcmQiLCAgICAgWFhGV0QsIENN X0lOViB9LAkvKiBGT1JXQVJEICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9GUklM TFMKLSAgICB7ICJmb3QiLAkgICBYWERJUiwgQ01fSU5WIH0sCS8qICJmb3QiID0gImRpciIgKGZv ciBDaHJpcykgKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZkZWYgQ0tDSEFOTkVMSU8K LSAgICB7ICJmcmVhZCIsICAgICAgWFhGX1JFLCBDTV9JTlYgfSwJLyogRlJFQUQgKi8KLSAgICB7 ICJmcmV3aW5kIiwgICAgWFhGX1JXLCBDTV9JTlYgfSwJLyogRlJFV0lORCAqLwotICAgIHsgImZz ZWVrIiwgICAgICBYWEZfU0UsIENNX0lOViB9LAkvKiBGU0VFSyAqLwotICAgIHsgImZzdGF0dXMi LCAgICBYWEZfU1QsIENNX0lOViB9LAkvKiBGU1RBVFVTICovCi0jZW5kaWYgLyogQ0tDSEFOTkVM SU8gKi8KLQotI2lmZGVmIFRDUFNPQ0tFVAotI2lmbmRlZiBOT0ZUUAotI2lmZGVmIFNZU0ZUUAot I2lmbmRlZiBOT1BVU0gKLSAgICB7ICJmdHAiLAkgICBYWEZUUCwgICBDTV9JTlZ8Q01fUFNIfENN X0xPQyB9LCAvKiBTeXN0ZW0gRlRQICovCi0jZWxzZQotICAgIHsgImZ0cCIsCSAgIFhYTk9UQVYs IENNX0lOVnxDTV9QU0h8Q01fTE9DIH0sCi0jZW5kaWYgLyogTk9QVVNIICovCi0jZWxzZSAgLyog U1lTRlRQICovCi0gICAgeyAiZnRwIiwJICAgWFhGVFAsICAgMCB9LAkvKiBCdWlsdC1pbiBGVFAg Ki8KLSNlbmRpZiAvKiBTWVNGVFAgKi8KLSNlbHNlICAvKiBOT0ZUUCAqLwotICAgIHsgImZ0cCIs CSAgIFhYTk9UQVYsIENNX0lOViB9LAkvKiBObyBGVFAgKi8KLSNlbmRpZiAvKiBOT0ZUUCAqLwot I2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiZnVuY3Rpb24i LCAgICBYWEZVTkMsIENNX0lOVnxDTV9ITFAgfSwgLyogKGZvciBIRUxQIEZVTkNUSU9OKSAqLwot I2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBDS0NIQU5ORUxJTwotICAgIHsgImZ3cml0ZSIs ICAgICAgWFhGX1dSLCBDTV9JTlYgfSwJLyogRldSSVRFICovCi0jZW5kaWYgLyogQ0tDSEFOTkVM SU8gKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJnIiwgICAgICAgICAgIFhYR0VULCBDTV9J TlZ8Q01fQUJSIH0sIC8qIEludmlzaWJsZSBhYmJyZXYgZm9yIEdFVCAqLwotI2lmbmRlZiBOT1NQ TAotICAgIHsgImdlIiwgICAgICAgICAgWFhHRVQsIENNX0lOVnxDTV9BQlIgfSwgLyogRGl0dG8g Ki8KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHsgImdldCIsICAgICAgICAgWFhHRVQsIDAgfSwJ LyogR0VUICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiZ2V0 YyIsICAgICAgICBYWEdFVEMsIDAgfSwJLyogR0VUQyAqLwotI2lmZGVmIE9TMgotICAgIHsgImdl dGtleWNvZGUiLCAgWFhHRVRLLCAwIH0sCS8qIEdFVEtFWUNPREUgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSNpZm5kZWYgTk9GUklMTFMKLSAgICB7ICJnZXRvayIsICAgICAgIFhYR09LLCAwIH0sCS8q IEdFVE9LIChhc2sgZm9yIFllcy9Oby9PSykgKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2Vu ZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiZ290byIsICAgICAgICBYWEdP VE8sMCB9LAkvKiBHT1RPIGxhYmVsIGluIHRha2UgZmlsZSBvciBtYWNybyAqLwotI2VuZGlmIC8q IE5PU1BMICovCi0jaWZkZWYgVU5JWE9ST1NLCi0gICAgeyAiZ3JlcCIsICAgICAgICBYWEdSRVAs MCB9LAkvKiBHUkVQIChmaW5kKSAqLwotI2Vsc2UKLSAgICB7ICJncmVwIiwgICAgICAgIFhYR1JF UCxDTV9JTlYgfSwJLyogR1JFUCAoZmluZCkgKi8KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSAg ICB7ICJoIiwgICAgICAgICAgIFhYSExQLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIEludmlzaWJsZSBz eW5vbnltIGZvciBIRUxQICovCi0gICAgeyAiaGUiLCAgICAgICAgICBYWEhMUCwgQ01fSU5WfENN X0FCUiB9LCAvKiBJbnZpc2libGUgc3lub255bSBmb3IgSEVMUCAqLwotI2lmbmRlZiBOT0ZSSUxM UwotICAgIHsgImhlYWQiLCAgICAgICAgWFhIRUFELCAwIH0sCi0jZW5kaWYgLyogTk9GUklMTFMg Ki8KLSNpZm5kZWYgTk9MT0NBTAotICAgIHsgImhhbmd1cCIsICAgICAgWFhIQU4sIENNX0xPQyB9 LAkvKiBIQU5HVVAgdGhlIGNvbm5lY3Rpb24gKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAg eyAiaGRpcmVjdG9yeSIsICBYWEhESVIsICBDTV9JTlYgfSwJLyogRElSIHNvcnRlZCBieSBzaXpl IGJpZ2dlc3QgZmlyc3QgKi8KLSAgICB7ICJIRUxQIiwgICAgICAgIFhYSExQLCAwIH0sCS8qIERp c3BsYXkgSEVMUCB0ZXh0ICovCi0jaWZuZGVmIE5PSFRUUAotI2lmZGVmIFRDUFNPQ0tFVAotICAg IHsgImh0dHAiLCAgICAgICAgWFhIVFRQLCAwIH0sCS8qIEhUVFAgb3BlcmF0aW9ucyAqLwotI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIE5PSFRUUCAqLwotI2lmbmRlZiBOT1NQTAot ICAgIHsgImkiLCAgICAgICAgICAgWFhJTlAsIENNX0lOVnxDTV9BQlIgfSwgLyogSW52aXNpYmxl IHN5bm9ueW0gZm9yIElOUFVUICovCi0gICAgeyAiaWYiLCAgICAgICAgICBYWElGLCAgMCB9LAkg ICAgIC8qIElGICggY29uZGl0aW9uICkgY29tbWFuZCAqLwotI2lmZGVmIFRDUFNPQ0tFVAotICAg IHsgImlrc2QiLCAgICAgICAgWFhJS1NELCBDTV9JTlYgfSwJICAgICAvKiBNYWtlIGNvbm5lY3Rp b24gdG8gSUtTRCAqLwotI2Vsc2UKLSAgICB7ICJpa3NkIiwgICAgICAgIFhYTk9UQVYsIENNX0lO ViB9LAotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotICAgIHsgImluIiwgICAgICAgICAgWFhJTlAs IENNX0lOVnxDTV9BQlIgfSwgLyogSW52aXNpYmxlIHN5bm9ueW0gZm9yIElOUFVUICovCi0gICAg eyAiaW5jcmVtZW50IiwgICBYWElOQywgMCB9LAkvKiBJbmNyZW1lbnQgYSBudW1lcmljIHZhcmlh YmxlICovCi0gICAgeyAiaW5wdXQiLCAgICAgICBYWElOUCwgMCB9LAkvKiBJTlBVVCB0ZXh0IGZy b20gY29tbSBkZXZpY2UgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PSEVMUAot ICAgIHsgImludCIsICAgICAgICAgWFhJTlQsIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJpbnRy IiwgICAgICAgIFhYSU5ULCBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiSU5UUk8iLCAgICAgICBY WElOVCwgMCB9LAotICAgIHsgImludHJvZHVjdGlvbiIsWFhJTlQsIENNX0lOViB9LAkvKiBQcmlu dCBpbnRyb2R1Y3RvcnkgdGV4dCAqLwotI2Vsc2UKLSAgICB7ICJpbnRybyIsICAgICAgIFhYTk9U QVYsIENNX0lOViB9LAotICAgIHsgImludHJvZHVjdGlvbiIsWFhOT1RBViwgQ01fSU5WIH0sCi0j ZW5kaWYgLyogTk9IRUxQICovCi0KLSNpZmRlZiBPUzIKLSAgICB7ICJrOTUiLCAgICAgICAgIFhY S0VSTUksIENNX0lOViB9LAkvKiBIbW1tIHdoYXQncyB0aGlzLi4uICovCi0jZW5kaWYgLyogT1My ICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJrY2QiLCAgICAgICAgIFhYS0NELCAgIDAgICAg ICB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICB7ICJrZXJtaXQiLCAgICAgIFhYS0VSTUks IENNX0lOViB9LAotCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PS1ZFUkJTCi0gICAgeyAia3ZlcmIi LCAgICAgICBYWEtWUkIsIENNX0lOVnxDTV9ITFAgfSwgLyogS2V5Ym9hcmQgdmVyYiAqLwotI2Vu ZGlmIC8qIE5PS1ZFUkJTICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9GUklMTFMK LSAgICB7ICJsIiwgICAgICAgICAgIFhYTE9HLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIEludmlzaWJs ZSBzeW5vbnltIGZvciBsb2cgKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0gICAgeyAibGNk IiwgICAgICAgICBYWExDV0QsIENNX0lOViB9LAotICAgIHsgImxjZHVwIiwgICAgICAgWFhMQ0RV LCBDTV9JTlYgfSwKLSAgICB7ICJsY3dkIiwgICAgICAgIFhYTENXRCwgQ01fSU5WIH0sCi0gICAg eyAibGRlbGV0ZSIsICAgICBYWExERUwsIENNX0lOViB9LAotICAgIHsgImxkaXJlY3RvcnkiLCAg WFhMRElSLCBDTV9JTlYgfSwKLQotI2lmZGVmIENLTEVBUk4KLSAgICB7ICJsZWFybiIsICAgICAg IFhYTEVBUk4sIDAgfSwJLyogTEVBUk4gLSBhdXRvbWF0aWMgc2NyaXB0IHdyaXRpbmcgKi8KLSNl bHNlCi0gICAgeyAibGVhcm4iLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBD S0xFQVJOICovCi0KLSAgICB7ICJsaSIsICAgICAgICAgIFhYTE5PVVQsIENNX0lOVnxDTV9BQlIg fSwKLSAgICB7ICJMSUNFTlNFIiwgICAgIFhYQ1BSLCAwIH0sCS8qIExJQ0VOU0UgKi8KLQotI2lm bmRlZiBOT1NQTAotICAgIHsgImxpbmVvdXQiLCAgICAgWFhMTk9VVCwgMCB9LAkvKiBMSU5FT1VU ID0gT1VUUFVUICsgZW9sICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIE5UCi0gICAg eyAibGluayIsICAgICAgICBYWExJTkssIDAgfSwgICAgICAgLyogTElOSyBzb3VyY2UgZGVzdGlu YXRpb24gKi8KLSNlbmRpZiAvKiBOVCAqLwotCi0gICAgeyAibG1rZGlyIiwgICAgICBYWExNS0Qs IENNX0lOViB9LAotICAgIHsgImxtdiIsICAgICAgICAgWFhMUkVOLCBDTV9JTlYgfSwKLQotI2lm bmRlZiBOT0ZSSUxMUwotICAgIHsgImxvIiwgICAgICAgICAgWFhMT0csICBDTV9JTlZ8Q01fQUJS IH0sIC8qIEludmlzaWJsZSBzeW5vbnltIGZvciBsb2cgKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAq LwotCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAibG9jYWwiLCAgICAgICBYWExPQ0FMLCBDTV9JTlYg fSwJLyogTE9DQUwgdmFyaWFibGUgZGVjbGFyYXRpb24gKi8KLSNlbHNlCi0gICAgeyAibG9jYWwi LCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgeyAi bG9jdXMiLCAgICAgICBYWExPQ1UsIENNX0lOVnxDTV9ITFAgfSwgLyogImhlbHAgbG9jdXMiICov Ci0KLSAgICB7ICJsb2ciLCAgCSAgICAgWFhMT0csIDAgfSwJLyogT3BlbiBhIGxvZyBmaWxlICov Ci0KLSAgICB7ICJsb2dpbiIsICAgICAgIFhYTE9HSU4sICAwIH0sCS8qIChSRU1PVEUpIExPR0lO IHRvIHNlcnZlciBvciBJS1NEICovCi0gICAgeyAibG9nb3V0IiwgICAgICBYWExPR09VVCwgMCB9 LAkvKiBMT0dPVVQgZnJvbSBzZXJ2ZXIgb3IgSUtTRCAqLwotCi0jaWZuZGVmIE5PRlJJTExTCi0j aWZuZGVmIE5PRElBTAotICAgIHsgImxvb2t1cCIsICAgICAgWFhMT09LLCAgMCB9LAkvKiBMT09L VVAgKi8KLSNlbHNlCi0gICAgeyAibG9va3VwIiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNl bmRpZiAvKiBOT0RJQUwgKi8KLQotICAgIHsgImxwd2QiLCAgICAgICAgWFhMUFdELCBDTV9JTlYg fSwKLSAgICB7ICJscmVuYW1lIiwgICAgIFhYTFJFTiwgQ01fSU5WIH0sCi0gICAgeyAibHJtZGly IiwgICAgICBYWExSTUQsIENNX0lOViB9LAotCi0jaWZkZWYgVU5JWE9ST1NLCi0gICAgeyAibHMi LCAgICAgICAgICBYWExTLCAgQ01fSU5WfENNX1BTSCB9LCAvKiBVTklYIGxzIGNvbW1hbmQgKi8K LSNlbHNlCi0gICAgeyAibHMiLCAgICAgICAgICBYWERJUiwgQ01fSU5WIH0sCS8qIEludmlzaWJs ZSBzeW5vbnltIGZvciBESVIgKi8KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSNpZm5kZWYgTk9Y RkVSCi0gICAgeyAibWFpbCIsICAgICAgICBYWE1BSSwgMCB9LAkvKiBTZW5kIGEgZmlsZSBhcyBl LW1haWwgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNpZm5kZWYgTk9IRUxQCi0gICAgeyAibWFu dWFsIiwgICAgICBYWE1BTiwgQ01fUFNIIH0sCS8qIE1BTihVQUwpICovCi0jZWxzZQotICAgIHsg Im1hbnVhbCIsICAgICAgWFhOT1RBViwgQ01fSU5WfENNX1BTSCB9LAotI2VuZGlmIC8qIE5PSEVM UCAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0jaWZkZWYgQ0tfTUtESVIKLSAgICB7ICJtZCIs ICAgICAgICAgIFhYTUtESVIsIENNX0lOViB9LAkvKiBTeW5vbnltIGZvciBNS0RJUiAqLwotI2Vu ZGlmIC8qIENLX01LRElSICovCi0gICAgeyAibWVzc2FnZSIsICAgICBYWE1TRywgMCB9LAkvKiBQ cmludCBkZWJ1Z2dpbmcgbWVzc2FnZSAqLwotI2lmZGVmIENLX01JTlBVVAotICAgIHsgIm1pbnB1 dCIsICAgICAgWFhNSU5QLCAwIH0sCS8qIE1JTlBVVCAqLwotI2Vsc2UKLSAgICB7ICJtaW5wdXQi LCAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIENLX01JTlBVVCAqLwotI2lmbmRl ZiBOT01TRU5ECi0gICAgeyAibWdldCIsICAgICAgICBYWE1HRVQsIDAgfSwJLyogTUdFVCAqLwot I2Vsc2UKLSAgICB7ICJtZ2V0IiwgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8q IE5PTVNFTkQgKi8KLSNpZmRlZiBDS19NS0RJUgotICAgIHsgIm1rZGlyIiwgICAgICAgWFhNS0RJ UiwgMCB9LAkvKiBNS0RJUiAqLwotI2Vsc2UKLSAgICB7ICJta2RpciIsICAgICAgIFhYTk9UQVYs IENNX0lOViB9LAotI2VuZGlmIC8qIENLX01LRElSICovCi0KLSNpZm5kZWYgTk9YRkVSCi0jaWZu ZGVmIE5PTVNFTkQKLSAgICB7ICJtbW92ZSIsICAgICAgIFhYTU1PVkUsIDAgfSwJLyogTU1PVkUg Ki8KLSNlbHNlCi0gICAgeyAibW1vdmUiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRp ZiAvKiBOT01TRU5EICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9GUklMTFMK LSAgICB7ICJtb3JlIiwgICAgICAgIFhYTU9SRSwgQ01fSU5WIH0sCS8qIE1PUkUgKi8KLSNlbmRp ZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgIm1vdmUiLCAgICAgICAg WFhNT1ZFLCAwIH0sCS8qIE1PVkUgICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYg Tk9TUEwKLSAgICB7ICJtcGF1c2UiLCAgICAgIFhYTVNMLCBDTV9JTlYgfSwJLyogTWlsbGlzZWNv bmQgc2xlZXAgKi8KLSNlbHNlCi0gICAgeyAibXBhdXNlIiwgICAgICBYWE5PVEFWLCBDTV9JTlYg fSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PWEZFUgotI2lmbmRlZiBOT01TRU5E Ci0gICAgeyAibXB1dCIsICAgICAgICBYWE1TRSwgQ01fSU5WIH0sCS8qIE1QVVQgPSBNU0VORCAq LwotICAgIHsgIm1zIiwgICAgICAgICAgWFhNU0UsIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJt c2VuZCIsICAgICAgIFhYTVNFLCAwIH0sCS8qIE11bHRpcGxlIFNFTkQgKi8KLSNlbHNlCi0gICAg eyAibXB1dCIsICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSAgICB7ICJtc2VuZCIsICAgICAg IFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLSNlbmRpZiAvKiBOT1hG RVIgKi8KLSAgICB7ICJtc2ciLCAgICAgICAgIFhYTVNHLCBDTV9JTlYgfSwJLyogUHJpbnQgZGVi dWdnaW5nIG1lc3NhZ2UgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJtc2xlZXAiLCAgICAgIFhY TVNMLCAwIH0sCS8qIE1pbGxpc2Vjb25kIHNsZWVwICovCi0jZWxzZQotICAgIHsgIm1zbGVlcCIs ICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9G UklMTFMKLSAgICB7ICJtdiIsICAgICAgICAgIFhYUkVOLCBDTV9JTlYgfSwJLyogU3lub255bSBm b3IgcmVuYW1lICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSNpZm5kZWYgTk9IRUxQCi0gICAg eyAibmV3cyIsICAgICAgICBYWE5FVywgQ01fSU5WIH0sCS8qIERpc3BsYXkgTkVXUyBvZiBuZXcg ZmVhdHVyZXMgKi8KLSNlbHNlCi0gICAgeyAibmV3cyIsICAgICAgICBYWE5PVEFWLCBDTV9JTlYg fSwKLSNlbmRpZiAvKiBOT0hFTFAgKi8KLSAgICB7ICJub2xvY2FsIiwgICAgIFhYTkxDTCwgQ01f SU5WIH0sCS8qIERpc2FibGUgU0VUIExJTkUgLyBTRVQgSE9TVCAqLwotICAgIHsgIm5vcHVzaCIs ICAgICAgWFhOUFNILCBDTV9JTlYgfSwJLyogRGlzYWJsZSBQVVNIIGNvbW1hbmQvZmVhdHVyZXMg Ki8KLSNpZmRlZiBPUzIKLSAgICB7ICJub3Njcm9sbCIsICAgIFhYTlNDUiwgQ01fSU5WIH0sICAv KiBEaXNhYmxlIHNjcm9sbCBvcGVyYXRpb25zICovCi0jZW5kaWYgLyogT1MyICovCi0jaWZuZGVm IE5PU1BMCi0gICAgeyAibyIsICAgICAgICAgICBYWE9VVCwgQ01fSU5WfENNX0FCUiB9LCAvKiBJ bnZpc2libGUgc3lub255bSBmb3IgT1VUUFVUICovCi0gICAgeyAib3BlbiIsICAgICAgICBYWE9Q RSwgMCB9LAkvKiBPUEVOIGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZyAqLwotI2Vsc2UKLSAg ICB7ICJvcGVuIiwgICAgICAgIFhYT1BFLCBDTV9JTlYgfSwJLyogT1BFTiAqLwotI2VuZGlmIC8q IE5PU1BMICovCi0jaWZuZGVmIE5PSEVMUAotICAgIHsgIm9wdGlvbnMiLCAgICAgWFhPUFRTLENN X0lOVnxDTV9ITFAgfSwgLyogT3B0aW9ucyAqLwotI2VuZGlmIC8qIE5PSEVMUCAqLwotICAgIHsg Im9yaWVudGF0aW9uIiwgWFhPUklFLCAwIH0sCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAib3V0cHV0 IiwgICAgICBYWE9VVCwgMCB9LAkvKiBPVVRQVVQgdGV4dCB0byBjb21tIGRldmljZSAqLwotI2Vs c2UKLSAgICB7ICJvdXRwdXQiLCAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5P U1BMICovCi0jaWZkZWYgQU5ZWDI1Ci0jaWZuZGVmIElCTVgyNQotICAgIHsgInBhZCIsICAgICAg ICAgWFhQQUQsIENNX0xPQyB9LAkvKiBYLjMgUEFEIGNvbW1hbmRzICovCi0jZW5kaWYgLyogSUJN WDI1ICovCi0jZW5kaWYgLyogQU5ZWDI1ICovCi0KLSNpZmRlZiBORVdGVFAKLSAgICB7ICJwYXNz aXZlIiwgICAgIFhYUEFTViwgQ01fSU5WIH0sCS8qIChGVFApIFBBU1NJVkUgKi8KLSNlbmRpZiAv KiBORVdGVFAgKi8KLQotI2lmbmRlZiBOT0hFTFAKLSAgICB7ICJwYXR0ZXJucyIsICAgIFhYUEFU LENNX0lOVnxDTV9ITFAgfSwgLyogUGF0dGVybiBzeW50YXggKi8KLSNlbmRpZiAvKiBOT0hFTFAg Ki8KLQotI2lmbmRlZiBOT1NQTAotICAgIHsgInBhdXNlIiwgICAgICAgWFhQQVUsIDAgfSwJLyog U2xlZXAgZm9yIHNwZWNpZmllZCBpbnRlcnZhbCAqLwotI2Vsc2UKLSAgICB7ICJwYXVzZSIsICAg ICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIE5PRElB TAotICAgIHsgInBkaWFsIiwgICAgICAgWFhQRElBLCAgQ01fTE9DIH0sCS8qIFBESUFMIChwYXJ0 aWFsIGRpYWwpICovCi0jZWxzZQotICAgIHsgInBkaWFsIiwgICAgICAgWFhOT1RBViwgQ01fSU5W fENNX0xPQyB9LAotI2VuZGlmIC8qIE5PRElBTCAqLwotI2lmZGVmIFRDUFNPQ0tFVAotI2lmbmRl ZiBOT1BVU0gKLSAgICB7ICJwaW5nIiwgICAgICAgIFhYUE5HLCBDTV9JTlZ8Q01fUFNIfENNX0xP QyB9LCAvKiBQSU5HICovCi0jZWxzZQotICAgIHsgInBpbmciLCAgICAgICAgWFhOT1RBViwgQ01f SU5WfENNX1BTSHxDTV9MT0MgfSwKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KLSNpZmRlZiBORVRDTUQKLSNpZm5kZWYgTk9QVVNICi0gICAgeyAicGlwZSIsICAg ICAgICBYWFBJUEUsIENNX1BTSCB9LAkvKiBQSVBFICovCi0jZWxzZQotICAgIHsgInBpcGUiLCAg ICAgICAgWFhOT1RBViwgQ01fSU5WfENNX1BTSCB9LCAvKiBQSVBFICovCi0jZW5kaWYgLyogTk9Q VVNIICovCi0jZW5kaWYgLyogTkVUQ01EICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJwb3Ai LCAgICAgICAgIFhYRU5ELCBDTV9JTlYgfSwJLyogSW52aXNpYmxlIHN5bm9ueW0gZm9yIEVORCAq LwotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIE5PRlJJTExTCi0gICAgeyAicHJpbnQiLCAg ICAgICBYWFBSSSwgMCB9LAkvKiBQUklOVCBhIGZpbGUgbG9jYWxseSAqLwotI2VuZGlmIC8qIE5P RlJJTExTICovCi0KLSAgICB7ICJwcm9tcHQiLCAgICAgIFhYUFJPTVAsIENNX0lOViB9LAkvKiBH byBpbnRlcmFjdGl2ZSAoZnJvbSBzY3JpcHQpICovCi0KLSNpZm5kZWYgTk9YRkVSCi0jaWZkZWYg Q0tfUkVTRU5ECi0gICAgeyAicHNlbmQiLCAgICAgICBYWFBTRU4sIENNX0lOViB9LAkvKiBQU0VO RCAqLwotI2Vsc2UKLSAgICB7ICJwc2VuZCIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2Vu ZGlmIC8qIENLX1JFU0VORCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgTkVUUFRZ Ci0gICAgeyAicHR5IiwgICAgICAgICBYWFBUWSwgQ01fUFNIIH0sCS8qIFBUWSAqLwotI2Vsc2UK LSAgICB7ICJwdHkiLCAgICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0ggfSwKLSNlbmRpZiAv KiBORVRQVFkgKi8KLQotI2lmbmRlZiBOT1BVU0gKLSAgICB7ICJwdSIsICAgICAgICAgIFhYU0hF LCBDTV9JTlZ8Q01fQUJSfENNX1BTSCB9LCAvKiBQVSA9IFBVU0ggKi8KLSNlbmRpZiAvKiBOT1BV U0ggKi8KLQotI2lmZGVmIENLUFVSR0UKLSAgICB7ICJwdXJnZSIsICAgICAgIFhYUFVSR0UsIDAg fSwJLyogUFVSR0UgKHJlYWwpICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgIHsgInB1cmdlIiwg ICAgICAgWFhQVVJHRSwgMCB9LAkvKiBQVVJHRSAoZmFrZSkgKi8KLSNlbHNlCi0gICAgeyAicHVy Z2UiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAv KiBDS1BVUkdFICovCi0KLSNpZm5kZWYgTk9QVVNICi0gICAgeyAicHVzaCIsICAgICAgICBYWFNI RSwgQ01fUFNIIH0sCS8qIFBVU0ggY29tbWFuZCAobGlrZSBSVU4sICEpICovCi0jZWxzZQotICAg IHsgInB1c2giLCAgICAgICAgWFhOT1RBViwgQ01fSU5WfENNX1BTSCB9LAotI2VuZGlmIC8qIE5P UFVTSCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgInB1dCIsICAgICAgICAgWFhTRU4sIENN X0lOViB9LAkvKiBQVVQgPSBTRU5EICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBV TklYCi0jaWZuZGVmIE5PUFVURU5WCi0gICAgeyAicHV0ZW52IiwgICAgICBYWFBVVEUsIENNX0lO ViB9LAkvKiBQVVRFTlYgKi8KLSNlbmRpZgkvKiBOT1BVVEVOViAqLwotI2VuZGlmCS8qIFVOSVgg Ki8KLQotICAgIHsgInB3ZCIsICAgICAgICAgWFhQV0QsIDAgfSwJLyogUHJpbnQgV29ya2luZyBE aXJlY3RvcnkgKi8KLSAgICB7ICJxIiwgICAgICAgICAgIFhYUVVJLCBDTV9JTlZ8Q01fQUJSIH0s IC8qIEludmlzaWJsZSBzeW5vbnltIGZvciBRVUlUICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAg eyAicXVlcnkiLCAgICAgICBYWFJRVUUsQ01fSU5WIH0sCS8qICg9IFJFTU9URSBRVUVSWSkgKi8K LSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotICAgIHsgInF1aXQiLCAgICAgICAgWFhRVUksIDAgfSwJ LyogUVVJVCBmcm9tIHByb2dyYW0gPSBFWElUICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAi ciIsICAgICAgICAgICBYWFJFQywgQ01fSU5WfENNX0FCUiB9LCAvKiBJbnYgc3lub255bSBmb3Ig UkVDRUlWRSAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIHsg InJhc2ciLCAgICAgICAgWFhSQVNHLCBDTV9JTlYgfSwJLyogUkVNT1RFIEFTU0lHTiAqLwotICAg IHsgInJhc3NpZ24iLCAgICAgWFhSQVNHLCBDTV9JTlYgfSwJLyogZGl0dG8gKi8KLSAgICB7ICJy Y2QiLCAgICAgICAgIFhYUkNXRCwgQ01fSU5WIH0sCS8qIFJFTU9URSBDRCAqLwotICAgIHsgInJj ZHVwIiwgICAgICAgWFhSQ0RVUCxDTV9JTlYgfSwJLyogUkVNT1RFIENEICovCi0gICAgeyAicmNv cHkiLCAgICAgICBYWFJDUFksIENNX0lOViB9LAkvKiBSRU1PVEUgQ09QWSAqLwotICAgIHsgInJj d2QiLCAgICAgICAgWFhSQ1dELCBDTV9JTlYgfSwJLyogUkVNT1RFIENXRCAqLwotICAgIHsgInJk ZWxldGUiLCAgICAgWFhSREVMLCBDTV9JTlYgfSwJLyogUkVNT1RFIERFTEVURSAqLwotICAgIHsg InJkaXJlY3RvcnkiLCAgWFhSRElSLCBDTV9JTlYgfSwJLyogUkVNT0RFIERJUkVDVE9SWSAqLwot I2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAicmVhZCIsICAgICAg ICBYWFJFQSwgMCB9LAkvKiBSRUFEIGEgbGluZSBmcm9tIGEgZmlsZSAqLwotI2Vsc2UKLSAgICB7 ICJyZWFkIiwgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0K LSNpZm5kZWYgTk9YRkVSCi0gICAgeyAicmVjZWl2ZSIsICAgICBYWFJFQywgMCB9LAkvKiBSRUNF SVZFIGZpbGVzICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9ESUFMCi0gICAg eyAicmVkIiwgICAgICAgICBYWFJFRCwgQ01fSU5WfENNX0FCUnxDTV9MT0MgfSwgLyogSW52IHN5 biBmb3IgUkVESUFMICovCi0gICAgeyAicmVkaSIsICAgICAgICBYWFJFRCwgQ01fSU5WfENNX0FC UnxDTV9MT0MgfSwgLyogZGl0dG8gKi8KLSAgICB7ICJyZWRpYWwiLCAgICAgIFhYUkVELCBDTV9M T0MgfSwJLyogUkVESUFMIGxhc3QgRElBTCBudW1iZXIgKi8KLSNlbHNlCi0gICAgeyAicmVkIiwg ICAgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fTE9DIH0sCi0gICAgeyAicmVkaSIsICAgICAgICBY WE5PVEFWLCBDTV9JTlZ8Q01fTE9DIH0sCi0gICAgeyAicmVkaWFsIiwgICAgICBYWE5PVEFWLCBD TV9JTlZ8Q01fTE9DIH0sCi0jZW5kaWYgLyogTk9ESUFMICovCi0KLSNpZmRlZiBDS19SRURJUgot I2lmZGVmIE9TMgotI2lmbmRlZiBOT1BVU0gKLSAgICB7ICJyZWRpcmVjdCIsICAgIFhYRlVOLCBD TV9JTlZ8Q01fUFNIIH0sIC8qIFJFRElSRUNUICovCi0jZWxzZQotICAgIHsgInJlZGlyZWN0Iiwg ICAgWFhOT1RBViwgQ01fSU5WfENNX1BTSCB9LAotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2Vsc2Ug LyogT1MyICovCi0jaWZuZGVmIE5PUFVTSAotICAgIHsgInJlZGlyZWN0IiwgICAgWFhGVU4sIENN X1BTSCB9LAkvKiBSRURJUkVDVCAqLwotI2Vsc2UKLSAgICB7ICJyZWRpcmVjdCIsICAgIFhYTk9U QVYsIENNX0lOVnxDTV9QU0ggfSwKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbmRpZiAvKiBDS19SRURJUiAqLwotCi0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgeyAicmVk byIsICAgICAgICBYWFJFRE8sICBDTV9OT1IgfSwJLyogUkVETyAqLwotI2Vsc2UKLSAgICB7ICJy ZWRvIiwgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwot Ci0jaWZuZGVmIE5PWEZFUgotI2lmZGVmIENLX1JFU0VORAotICAgIHsgInJlZ2V0IiwgICAgICAg WFhSRUdFVCwgMCB9LAkvKiBSRUdFVCAqLwotI2Vsc2UKLSAgICB7ICJyZWdldCIsICAgICAgIFhY Tk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAicmVpbnB1dCIsICAgICBYWFJFSSwgQ01fSU5W IH0sCS8qIFJFSU5QVVQgKGZyb20gSU5QVVQgYnVmZmVyKSAqLwotI2Vsc2UKLSAgICB7ICJyZWlu cHV0IiwgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5k ZWYgTk9YRkVSCi0jaWZkZWYgQUREQ01ECi0gICAgeyAicmVtIiwgICAgICAgICBYWFJFTSwgQ01f SU5WfENNX0FCUiB9LAotICAgIHsgInJlbW8iLCAgICAgICAgWFhSRU0sIENNX0lOVnxDTV9BQlIg fSwKLSNlbmRpZiAvKiBBRERDTUQgKi8KLSAgICB7ICJyZW1vdGUiLAkgICAgIFhYUkVNLCAwIH0s CS8qIFNlbmQgUkVNT1RFIGNvbW1hbmQgdG8gc2VydmVyICovCi0jZW5kaWYgLyogTk9YRkVSICov Ci0KLSNpZmRlZiBBRERDTUQKLSAgICB7ICJyZW1vdmUiLCAgICAgIFhYUkVNViwwIH0sCS8qIFJF TU9WRSAoc29tZXRoaW5nIGZyb20gYSBsaXN0KSAqLwotI2Vsc2UKLSAgICB7ICJyZW1vdmUiLCAg ICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIEFERENNRCAqLwotCi0jaWZuZGVmIE5P RlJJTExTCi0jaWZuZGVmIE5PUkVOQU1FCi0gICAgeyAicmVuYW1lIiwgICAgICBYWFJFTiwgMCB9 LAkvKiBSRU5BTUUgYSBsb2NhbCBmaWxlICovCi0jZWxzZQotICAgIHsgInJlbmFtZSIsICAgICAg WFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9SRU5BTUUgKi8KLSAgICB7ICJyZXBsYXki LCAgICAgIFhYVFlQLCBDTV9JTlYgfSwJLyogUkVQTEFZIChmb3Igbm93LCBqdXN0IHR5cGUpICov Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBDS19SRVNF TkQKLSAgICB7ICJyZXAiLCAgICAgICAgIFhYVFlQLCBDTV9JTlZ8Q01fQUJSIH0sICAvKiBSRVBM QVkgYWJicmV2aWF0aW9uICovCi0gICAgeyAicmVwdXQiLCAgICAgICBYWFJTRU4sIENNX0lOViB9 LAkgICAgICAvKiBSRVBVVCA9IFJFU0VORCAqLwotICAgIHsgInJlcyIsICAgICAgICAgWFhSU0VO LCBDTV9JTlZ8Q01fQUJSIH0sIC8qIFJFU0VORCAqLwotICAgIHsgInJlc2UiLCAgICAgICAgWFhS U0VOLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIFJFU0VORCAqLwotICAgIHsgInJlc2VuZCIsICAgICAg WFhSU0VOLCAwIH0sCS8qIFJFU0VORCAqLwotI2Vsc2UKLSAgICB7ICJyZXB1dCIsICAgICAgIFhY Tk9UQVYsIENNX0lOViB9LAotICAgIHsgInJlcyIsICAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0s Ci0gICAgeyAicmVzZSIsICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSAgICB7ICJyZXNlbmQi LCAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotI2VuZGlm IC8qIE5PWEZFUiAqLwotCi0gICAgeyAicmVzZXQiLCAgICAgICBYWFJFU0VULCBDTV9JTlYgfSwJ LyogUkVTRVQgKi8KLQotI2lmZGVmIENLX1JFU0VORAotI2lmbmRlZiBOT1NQTAotICAgIHsgInJl dCIsICAgICAgICAgWFhSRVQsIENNX0lOVnxDTV9BQlIgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwot I2VuZGlmIC8qIENLX1JFU0VORCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgInJldHJpZXZl IiwgICAgWFhSRVRSLCBDTV9JTlYgfSwJLyogUkVUUklFVkUgKi8KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotI2lmbmRlZiBOT1NQTAotICAgIHsgInJldHVybiIsICAgICAgWFhSRVQsIDAgfSwJLyog UkVUVVJOIGZyb20gYSBmdW5jdGlvbiAqLwotI2Vsc2UKLSAgICB7ICJyZXR1cm4iLCAgICAgIFhY Tk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9YRkVSCi0g ICAgeyAicmV4aXQiLCAgICAgICBYWFJYSVQsIENNX0lOViB9LAkvKiBSRU1PVEUgRVhJVCAqLwot I2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgQ0tfUkVYWAotI2lmbmRlZiBOT1BVU0gKLSAg ICB7ICJyZXh4IiwgICAgICAgIFhYUkVYWCwgQ01fUFNIIH0sCS8qIEV4ZWN1dGUgYSBSZXh4IGNv bW1hbmQgKi8KLSNlbHNlCi0gICAgeyAicmV4eCIsICAgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01f UFNIIH0sCi0jZW5kaWYgLyogTk9QVVNIICovCi0jZW5kaWYgLyogQ0tfUkVYWCAqLwotCi0jaWZu ZGVmIE5PWEZFUgotICAgIHsgInJoZWxwIiwgICAgICAgWFhSSExQLCBDTV9JTlYgfSwJLyogUkVN T1RFIEhFTFAgKi8KLSAgICB7ICJyaG9zdCIsICAgICAgIFhYUkhPUywgQ01fSU5WIH0sCS8qIFJF TU9URSBIT1NUICovCi0gICAgeyAicmtlcm1pdCIsICAgICBYWFJLRVIsIENNX0lOViB9LAkvKiBS RU1PVEUgS0VSTUlUICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQK LSAgICB7ICJybG9naW4iLCAgICAgIFhYUkxPRywgQ01fTE9DIH0sCS8qIE1ha2UgYW4gUmxvZ2lu IGNvbm5lY3Rpb24gKi8KLSNlbHNlCi0gICAgeyAicmxvZ2luIiwgICAgICBYWE5PVEFWLCBDTV9J TlZ8Q01fTE9DIH0sCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLSNpZm5kZWYgTk9GUklMTFMK LSAgICB7ICJybSIsICAgICAgICAgIFhYREVMLCBDTV9JTlYgfSwJLyogSW52aXNpYmxlIHN5bm9u eW0gZm9yIGRlbGV0ZSAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSNpZmRlZiBDS19NS0RJ UgotICAgIHsgInJtZGlyIiwgICAgICAgWFhSTURJUiwgMCB9LAkvKiBSTURJUiAqLwotI2Vsc2UK LSAgICB7ICJybWRpciIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIENLX01L RElSICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAicm1lc3NhZ2UiLCAgICBYWFJNU0csIENN X0lOViB9LAkvKiBSRU1PVEUgTUVTU0FHRSAqLwotICAgIHsgInJta2RpciIsICAgICAgWFhSTUtE LCBDTV9JTlYgfSwJLyogUkVNT1RFIE1LRElSICovCi0gICAgeyAicm1zZyIsICAgICAgICBYWFJN U0csIENNX0lOViB9LAkvKiBSRU1PVEUgTUVTU0FHRSAqLwotI2lmbmRlZiBOT1NQTAotICAgIHsg InJvYnVzdCIsICAgICAgWFhST0IsICBDTV9JTlYgfSwKLSNlbHNlCi0gICAgeyAicm9idXN0Iiwg ICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHsgInJwcmlu dCIsICAgICAgWFhSUFJJLCBDTV9JTlYgfSwgIC8qIFJFTU9URSBQUklOVCAqLwotICAgIHsgInJw d2QiLCAgICAgICAgWFhSUFdELCBDTV9JTlYgfSwJLyogUkVNT1RFIFBXRCAqLwotICAgIHsgInJx dWVyeSIsICAgICAgWFhSUVVFLCBDTV9JTlYgfSwJLyogUkVNT1RFIFFVRVJZICovCi0jZW5kaWYg LyogTk9YRkVSICovCi0KLSNpZmRlZiBDS19SRUNBTEwKLSAgICB7ICJyciIsICAgICAgICAgIFhY UkVETywgQ01fSU5WfENNX05PUiB9LAotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotCi0jaWZuZGVm IE5PWEZFUgotICAgIHsgInJyZW5hbWUiLCAgICBYWFJSRU4sIENNX0lOViB9LAkvKiBSRU1PVEUg UkVOQU1FICovCi0gICAgeyAicnJtZGlyIiwgICAgIFhYUlJNRCwgQ01fSU5WIH0sCS8qIFJFTU9U RSBSRU1ESVIgKi8KLSAgICB7ICJyc2V0IiwgICAgICAgWFhSU0VULCBDTV9JTlYgfSwJLyogUkVN T1RFIFNFVCAqLwotICAgIHsgInJzcGFjZSIsICAgICBYWFJTUEEsIENNX0lOViB9LAkvKiBSRU1P VEUgU1BBQ0UgKi8KLSAgICB7ICJydHlwZSIsICAgICAgWFhSVFlQLCBDTV9JTlYgfSwJLyogUkVN T1RFIFRZUEUgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT1BVU0gKLSAgICB7 ICJydW4iLCAgICAgICAgIFhYU0hFLCBDTV9QU0ggfSwJLyogUlVOIGEgcHJvZ3JhbSBvciBjb21t YW5kICovCi0jZWxzZQotICAgIHsgInJ1biIsICAgICAgICAgWFhOT1RBViwgQ01fSU5WfENNX1BT SCB9LAotI2VuZGlmIC8qIE5PUFVTSCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgInJ3aG8i LCAgICAgICAgWFhSV0hPLCBDTV9JTlYgfSwJLyogUkVNT1RFIFdITyAqLwotICAgIHsgInMiLCAg ICAgICAgICAgWFhTRU4sIENNX0lOVnxDTV9BQlIgfSwgLyogSW52aXNpYmxlIHN5bm9ueW0gZm9y IHNlbmQgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT1NFVEtFWQotI2lmZGVm IE9TMgotICAgIHsgInNhdmUiLAkgICBYWFNBVkUsIDAgfSwJCS8qIFNBVkUgc29tZXRoaW5nICov Ci0jZWxzZQotICAgIHsgInNhdmUiLAkgICBYWFNBVkUsIENNX0lOViB9LAotI2VuZGlmIC8qIE9T MiAqLwotI2Vsc2UKLSAgICB7ICJzYXZlIiwJICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYg LyogTk9TRVRLRVkgKi8KLQotI2lmbmRlZiBOT1NDUklQVAotICAgIHsgInNjIiwgCSAgIFhYTE9H SSwgQ01fSU5WfENNX0FCUnxDTV9MT0MgfSwKLSAgICB7ICJzY3IiLAkgICBYWExPR0ksIENNX0lO VnxDTV9BQlJ8Q01fTE9DIH0sCi0jZW5kaWYgLyogTk9TQ1JJUFQgKi8KLSAgICB7ICJzY3JlZW4i LCAgICAgIFhYU0NSTiwgMCB9LAkvKiBTQ1JFRU4gYWN0aW9ucyAqLwotI2lmbmRlZiBOT1NDUklQ VAotICAgIHsgInNjcmlwdCIsCSAgIFhYTE9HSSwgQ01fTE9DIH0sCS8qIEV4cGVjdC1TZW5kLXN0 eWxlIHNjcmlwdCBsaW5lICovCi0jZWxzZQotICAgIHsgInNjcmlwdCIsCSAgIFhYTk9UQVYsIENN X0lOVnxDTV9MT0MgfSwKLSNlbmRpZiAvKiBOT1NDUklQVCAqLwotCi0gICAgeyAic2VhcmNoIiwg ICAgWFhHUkVQLENNX0lOViB9LAkvKiBTeW5vbnltIGZvciBHUkVQIGFuZCBGSU5EICovCi0KLSNp Zm5kZWYgTk9YRkVSCi0gICAgeyAic2VuZCIsCSAgIFhYU0VOLCAwIH0sCQkvKiBTZW5kIChhKSBm aWxlKHMpICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgeyAic2VydmVyIiwJICAgWFhTRVIsIDAg fSwJCS8qIEJlIGEgU0VSVkVSICovCi0jZWxzZQotICAgIHsgInNlcnZlciIsCSAgIFhYTk9UQVYs IENNX0lOViB9LAotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0K LSAgICB7ICJzZXQiLAkgICBYWFNFVCwgMCB9LAkJLyogU0VUIHBhcmFtZXRlcnMgKi8KLQotI2lm bmRlZiBOT1NQTAotI2lmbmRlZiBOT1NFWFAKLSAgICB7ICJzZXhwcmVzc2lvbiIsIFhYU0VYUCwg Q01fSU5WfENNX0hMUCB9LCAvKiBTRVhQUiAqLwotI2VuZGlmIC8qIE5PU0VYUCAqLwotCi0jaWZk ZWYgU0ZUUF9CVUlMVElOCi0gICAgeyAic2Z0cCIsICAgICAgICBYWFNGVFAsIDAgfSwgICAvKiBT RlRQICovCi0jZW5kaWYgLyogU0ZUUF9CVUlMVElOICovCi0KLSNpZm5kZWYgTk9TSE9XCi0gICAg eyAic2giLCAgICAgICAgICBYWFNITywgQ01fSU5WfENNX0FCUiB9LCAvKiBTSE9XIHBhcmFtZXRl cnMgKi8KLSNlbmRpZiAvKiBOT1NIT1cgKi8KLSAgICB7ICJzaGlmdCIsICAgICAgIFhYU0hJRlQs IDAgfSwJLyogU0hJRlQgYXJncyAqLwotI2Vsc2UKLSAgICB7ICJzaGlmdCIsICAgICAgIFhYTk9U QVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9TSE9XCi0gICAg eyAic2hvdyIsIAkgICBYWFNITywgMCB9LAkJLyogU0hPVyBwYXJhbWV0ZXJzICovCi0jZWxzZQot ICAgIHsgInNob3ciLCAJICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TSE9XICov Ci0KLSNpZmRlZiBORVdGVFAKLSAgICB7ICJzaXRlIiwgICAgICAgIFhYU0lURSwgQ01fSU5WIH0s CS8qIChGVFApIFNJVEUgKi8KLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotI2lmZGVmIFNTSEJVSUxU SU4KLSAgICB7ICJza2VybWl0IiwgICBYWFNLUk0sIDAgfSwgICAgIC8qIFNLRVJNSVQgKi8KLSNl bmRpZiAvKiBTU0hCVUlMVElOICovCi0KLSNpZm5kZWYgTk9TUEwKLSNpZm5kZWYgTk9GUklMTFMK LSAgICB7ICJzbGVlcCIsICAgICAgIFhYUEFVLCBDTV9JTlYgfSwJLyogU0xFRVAgZm9yIHNwZWNp ZmllZCBpbnRlcnZhbCAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0jZW5kaWYgLyogTk9TUEwg Ki8KLQotI2lmbmRlZiBOT1NQTAotICAgIHsgInNvcnQiLCAgICAgICAgWFhTT1JULCBDTV9JTlYg fSwJLyogKHNlZSBBUlJBWSkgKi8KLSNlbHNlCi0gICAgeyAic29ydCIsICAgICAgICBYWE5PVEFW LCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE1BQwotI2lmbmRlZiBO T0ZSSUxMUwotICAgIHsgInNwIiwgICAgICAgICAgWFhTUEEsIENNX0lOVnxDTV9BQlIgfSwKLSAg ICB7ICJzcGEiLCAgICAgICAgIFhYU1BBLCBDTV9JTlZ8Q01fQUJSIH0sCi0jZW5kaWYgLyogTk9G UklMTFMgKi8KLSAgICB7ICJzcGFjZSIsICAgICAgIFhYU1BBLCAwIH0sCS8qIFNob3cgYXZhaWxh YmxlIGRpc2sgU1BBQ0UgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwot I2lmbmRlZiBOT1BVU0gKLSAgICB7ICJzcGF3biIsICAgICAgIFhYU0hFLCBDTV9JTlZ8Q01fUFNI IH0sIC8qIFN5bm9ueW0gZm9yIFBVU0gsIFJVTiAqLwotI2Vsc2UKLSAgICB7ICJzcGF3biIsICAg ICAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0ggfSwgLyogU3lub255bSBmb3IgUFVTSCwgUlVOICov Ci0jZW5kaWYgLyogTk9QVVNIICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lmZGVmIEFO WVNTSAotICAgIHsgInNzaCIsICAgICAgICAgWFhTU0gsIDAgfSwKLSNlbmRpZiAvKiBBTllTU0gg Ki8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJzdGEiLCAgICAgICAgIFhYU1RBLCBDTV9JTlZ8 Q01fQUJSIH0sCi0gICAgeyAic3RhdCIsICAgICAgICBYWFNUQSwgQ01fSU5WfENNX0FCUiB9LAot ICAgIHsgInN0YXRpc3RpY3MiLCAgWFhTVEEsIDAgfSwJLyogRGlzcGxheSBmaWxlIHRyYW5zZmVy IHN0YXRzICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSAgICB7ICJzdGF0dXMiLCAgICAgIFhY U1RBVFVTLDAgfSwJLyogU2hvdyBzdGF0dXMgb2YgcHJldmlvdXMgY29tbWFuZCAqLwotCi0jaWZu ZGVmIE5PU1BMCi0gICAgeyAic3RvcCIsICAgICAgICBYWFNUTywgICAwIH0sCS8qIFNUT1AgYWxs IHRha2UgZmlsZXMgYW5kIG1hY3JvcyAqLwotICAgIHsgInN1Y2NlZWQiLCAgICAgWFhTVUNDLCAg Q01fSU5WIH0sCS8qIFNVQ0NFRUQgKi8KLSNlbHNlCi0gICAgeyAic3RvcCIsICAgICAgICBYWE5P VEFWLCBDTV9JTlYgfSwKLSAgICB7ICJzdWNjZWVkIiwgICAgIFhYTk9UQVYsIENNX0lOViB9LAot I2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9GUklMTFMKLSAgICB7ICJTVVBQT1JUIiwg ICAgIFhYQlVHLCAwIH0sCS8qIFRlY2ggc3VwcG9ydCBpbnN0cnVjdGlvbnMgKi8KLSNlbHNlCi0g ICAgeyAic3VwcG9ydCIsICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT0ZSSUxM UyAqLwotCi0jaWZuZGVmIE5PSkMKLSAgICB7ICJzdXNwZW5kIiwgICAgIFhYU1VTLCBDTV9QU0gg fSwJLyogU1VTUEVORCBDLUtlcm1pdCAoVU5JWCBvbmx5KSAqLwotI2Vsc2UKLSAgICB7ICJzdXNw ZW5kIiwgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0ggfSwKLSNlbmRpZiAvKiBOT0pDICovCi0K LSNpZm5kZWYgTk9TUEwKLSAgICB7ICJzd2l0Y2giLCAgICAgIFhYU1dJVCwgMCB9LAkvKiBTV0lU Q0ggKi8KLSNlbHNlCi0gICAgeyAic3dpdGNoIiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNl bmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgQ0tfVEFQSQotICAgIHsgInRhIiwJICAgWFhUQUss IENNX0lOVnxDTV9BQlIgfSwgLyogKGJlY2F1c2Ugb2YgVEFQSSkgKi8KLSNlbmRpZiAvKiBDS19U QVBJICovCi0KLSNpZm5kZWYgTk9GUklMTFMKLSAgICB7ICJ0YWlsIiwgICAgICAgIFhYVEFJTCwg MCB9LAkvKiBEaXNwbGF5IGVuZCBvZiBhIGxvY2FsIGZpbGUgKi8KLSNlbmRpZiAvKiBOT0ZSSUxM UyAqLwotCi0gICAgeyAidGFrZSIsCSAgIFhYVEFLLCAwIH0sCQkvKiBUQUtFIGNvbW1hbmRzIGZy b20gYSBmaWxlICovCi0KLSNpZmRlZiBDS19UQVBJCi0gICAgeyAidGFwaSIsCSAgIFhYVEFQSSwg Q01fTE9DIH0sCS8qIE1pY3Jvc29mdCBUQVBJIGNvbW1hbmRzICovCi0jZWxzZQotICAgIHsgInRh cGkiLAkgICBYWE5PVEFWLCBDTV9JTlZ8Q01fTE9DIH0sCi0jZW5kaWYgLyogQ0tfVEFQSSAqLwot Ci0jaWZuZGVmIE5PRlJJTExTCi0jaWZkZWYgVENQU09DS0VUCi0gICAgeyAidGVsIiwgICAgICAg ICBYWFRFTCwgQ01fSU5WfENNX0FCUnxDTV9MT0MgfSwKLSAgICB7ICJ0ZWxuZXQiLCAgICAgIFhY VEVMLCBDTV9MT0MgfSwJLyogVEVMTkVUIChUQ1AvSVAgb25seSkgKi8KLSAgICB7ICJ0ZWxvcHQi LCAgICAgIFhYVEVMT1AsIENNX0lOViB9LAkvKiBURUxPUFQgKGRpdHRvKSAqLwotI2Vsc2UKLSAg ICB7ICJ0ZWwiLCAgICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9MT0MgfSwKLSAgICB7ICJ0ZWxu ZXQiLCAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9MT0MgfSwKLSAgICB7ICJ0ZWxvcHQiLCAgICAg IFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2lmZGVmIE9TMgot ICAgIHsgInRlcm1pbmFsIiwgICAgWFhURVJNLCBDTV9JTlZ8Q01fTE9DIH0sIC8qID09IFNFVCBU RVJNSU5BTCBUWVBFICovCi0jZWxzZQotICAgIHsgInRlcm1pbmFsIiwgICAgWFhURVJNLCBDTV9J TlYgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2lmbmRlZiBO T1hGRVIKLSAgICB7ICJ0ZXh0IiwgICAgICAgIFhYQVNDLCBDTV9JTlYgfSwJLyogPT0gU0VUIEZJ TEUgVFlQRSBURVhUICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgeyAidG91Y2giLCAgICAg ICBYWFRPVUMsIDAgfSwJLyogVE9VQ0ggKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJ0cmFjZSIs ICAgICAgIFhYVFJBQ0UsIDAgfSwJLyogVFJBQ0UgKi8KLSNlbHNlCi0gICAgeyAidHJhY2UiLCAg ICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5P Q1NFVFMKLSAgICB7ICJ0cmFuc2xhdGUiLCAgIFhYWExBLCAwIH0sCS8qIFRSQU5TTEFURSBsb2Nh bCBmaWxlIGNoYXIgc2V0cyAqLwotI2Vsc2UKLSAgICB7ICJ0cmFuc2xhdGUiLCAgIFhYTk9UQVYs IENNX0lOViB9LAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lmbmRlZiBOT1hNSVQKLSAgICB7 ICJ0cmFuc21pdCIsICAgIFhYVFJBLCAwIH0sCS8qIFNlbmQgKHVwbG9hZCkgYSBmaWxlLCBubyBw cm90b2NvbCAqLwotI2Vsc2UKLSAgICB7ICJ0cmFuc21pdCIsICAgIFhYTk9UQVYsIENNX0lOViB9 LAotI2VuZGlmIC8qIE5PWE1JVCAqLwotCi0jaWZuZGVmIE5PRlJJTExTCi0gICAgeyAidHlwZSIs ICAgICAgICBYWFRZUCwgMCB9LAkvKiBEaXNwbGF5IGEgbG9jYWwgZmlsZSAqLwotI2VuZGlmIC8q IE5PRlJJTExTICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJ1bmRjbCIsICAgICAgIFhYVU5E Q0wsIENNX0lOViB9LAotICAgIHsgInVuZGVjbGFyZSIsICAgWFhVTkRDTCwgMCB9LAkvKiBVTkRF Q0xBUkUgYW4gYXJyYXkgKi8KLSAgICB7ICJ1bmRlZmluZSIsICAgIFhYVU5ERUYsIDAgfSwJLyog VU5ERUZJTkUgYSB2YXJpYWJsZSBvciBtYWNybyAqLwotI2Vsc2UKLSAgICB7ICJ1bmRjbCIsICAg ICAgIFhYTk9UQVYsIENNX0lOViB9LAotICAgIHsgInVuZGVjbGFyZSIsICAgWFhOT1RBViwgQ01f SU5WIH0sCi0gICAgeyAidW5kZWZpbmUiLCAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAv KiBOT1NQTCAqLwotCi0jaWZkZWYgTkVXRlRQCi0gICAgeyAidXNlciIsICAgICAgICBYWFVTRVIs ICBDTV9JTlYgfSwgLyogKEZUUCkgVVNFUiAqLwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCi0gICAg eyAidmVyc2lvbiIsICAgICBYWFZFUiwgMCB9LAkvKiBWRVJTSU9OLW51bWJlciBkaXNwbGF5ICov Ci0KLSNpZmRlZiBPUzIKLSAgICB7ICJ2aWV3b25seSIsICAgIFhYVklFVywgQ01fTE9DIH0sCS8q IFZJRVdPTkxZIFRlcm1pbmFsIE1vZGUgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIHsgInZv aWQiLCAgICAgICAgWFhWT0lELCAwIH0sCS8qIFZPSUQgKi8KLQotI2lmbmRlZiBOT1NQTAotICAg IHsgIndhaXQiLCAgICAgICAgWFhXQUksIDAgfSwJLyogV0FJVCAqLwotI2Vsc2UKLSAgICB7ICJ3 YWl0IiwgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAg ICB7ICJ3ZGlyZWN0b3J5IiwgIFhYV0RJUiwgIENNX0lOViB9LAkvKiBMaWtlIFRPUFMtMjAsIHJl dmVyc2UgY2hyb24gb3JkZXIgKi8KLSAgICB7ICJ3ZXJtaXQiLCAgICAgIFhYS0VSTUksIENNX0lO ViB9LAotCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgIndoZXJlIiwgICAgICAgWFhXSEVSRSwgMCB9 LAkvKiBXSEVSRSAoZGlkIG15IGZpbGUgZ28/KSAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0j aWZuZGVmIE5PU1BMCi0gICAgeyAid2hpbGUiLCAgICAgICBYWFdISSwgMCB9LAkvKiBXSElMRSBs b29wICovCi0jZWxzZQotICAgIHsgIndoaWxlIiwgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0j ZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBPUzIKLSNpZm5kZWYgTUFDCi0jaWZuZGVmIE5P RlJJTExTCi0gICAgeyAid2hvIiwgICAgICAgICBYWFdITywgQ01fUFNIIH0sCS8qIFdITydzIGxv Z2dlZCBpbj8gKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIE5PSEVMUAotICAgIHsgIndpbGRjYXJkcyIsICAgWFhX SUxELENNX0lOVnxDTV9ITFAgfSwgLyogV2lsZGNhcmQgc3ludGF4ICovCi0jZW5kaWYgLyogTk9I RUxQICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJ3ciIsICAgICAgICAgIFhYV1JJLCBDTV9J TlZ8Q01fQUJSIH0sCi0gICAgeyAid3JpIiwgICAgICAgICBYWFdSSSwgQ01fSU5WfENNX0FCUiB9 LAotICAgIHsgIndyaXQiLCAgICAgICAgWFhXUkksIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJ3 cml0ZSIsICAgICAgIFhYV1JJLCAwIH0sCS8qIFdSSVRFIGNoYXJhY3RlcnMgdG8gYSBmaWxlICov Ci0gICAgeyAid3JpdGUtbGluZSIsICBYWFdSTCwgQ01fSU5WIH0sCS8qIFdSSVRFIGEgbGluZSB0 byBhIGZpbGUgKi8KLSAgICB7ICJ3cml0ZWxuIiwgICAgIFhYV1JMLCBDTV9JTlYgfSwJLyogUGFz Y2FsaXNjaCBzeW5vbnltIGZvciB3cml0ZS1saW5lICovCi0jZWxzZQotICAgIHsgIndyIiwgICAg ICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0gICAgeyAid3JpIiwgICAgICAgICBYWE5PVEFWLCBD TV9JTlYgfSwKLSAgICB7ICJ3cml0IiwgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotICAgIHsg IndyaXRlIiwgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0gICAgeyAid3JpdGUtbGluZSIsICBY WE5PVEFWLCBDTV9JTlYgfSwKLSAgICB7ICJ3cml0ZWxuIiwgICAgIFhYTk9UQVYsIENNX0lOViB9 LAotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9GUklMTFMKLSAgICB7ICJ4ZWNobyIs ICAgICAgIFhYWEVDSCwwIH0sCS8qIFhFQ0hPICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQot I2lmbmRlZiBOT1NQTAotICAgIHsgInhpZiIsICAgICAgICAgWFhJRlgsIENNX0lOViB9LAkvKiBF eHRlbmRlZCBJRiBjb21tYW5kIChvYnNvbGV0ZSkgKi8KLSNlbHNlCi0gICAgeyAieGlmIiwgICAg ICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5P Q1NFVFMKLSAgICB7ICJ4bGF0ZSIsICAgICAgIFhYWExBLCBDTV9JTlYgfSwJLyogU3lub255bSBm b3IgVFJBTlNMQVRFICovCi0jZWxzZQotICAgIHsgInhsYXRlIiwgICAgICAgWFhOT1RBViwgQ01f SU5WIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZuZGVmIE5PWE1JVAotICAgIHsgInht IiwgICAgICAgICAgWFhUUkEsIENNX0lOVnxDTV9BQlIgfSwgLyogQXZvaWQgY29uZmxpY3Qgd2l0 aCBYTUVTU0FHRSAqLwotI2Vsc2UKLSAgICB7ICJ4bSIsICAgICAgICAgIFhYTk9UQVYsIENNX0lO VnxDTV9BQlIgfSwgLyogU3lub255bSBmb3IgVFJBTlNNSVQgKi8KLSNlbmRpZiAvKiBOT1hNSVQg Ki8KLQotICAgIHsgInhtZXNzYWdlIiwgICAgWFhYTVNHLCAwIH0sCS8qIFByaW50IGRlYnVnZ2lu ZyBtZXNzYWdlICovCi0KLSNpZm5kZWYgTk9YTUlUCi0gICAgeyAieG1pdCIsICAgICAgICBYWFRS QSwgQ01fSU5WIH0sCS8qIFN5bm9ueW0gZm9yIFRSQU5TTUlUICovCi0jZWxzZQotICAgIHsgInht aXQiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9YTUlUICovCi0KLSNp Zm5kZWYgT1MyCi0jaWZuZGVmIE5PSkMKLSAgICB7ICJ6IiwgICAgICAgICAgIFhYU1VTLCBDTV9J TlZ8Q01fUFNIIH0sIC8qIFN5bm9ueW0gZm9yIFNVU1BFTkQgKi8KLSNlbHNlCi0gICAgeyAieiIs ICAgICAgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fUFNIIH0sCi0jZW5kaWYgLyogTk9KQyAqLwot I2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAieyIsICAgICAgICAgICBY WE1BQ1JPLCBDTV9JTlYgfSwJLyogSW1tZWRpYXRlIG1hY3JvICovCi0jZW5kaWYgLyogTk9TUEwg Ki8KLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1pbnQgbmNtZCA9IChzaXplb2YoY21kdGFiKSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi0vKiBOT1RFOiBUb2tlbnMgbXVzdCBhbHNvIGJl IGVudGVyZWQgYWJvdmUgaW50byBjbWR0YWJbXS4gKi8KLQotY2hhciB0b2t0YWJbXSA9IHsKLSNp Zm5kZWYgTk9QVVNICi0gICAgJyEnLAkJCQkvKiBTaGVsbCBlc2NhcGUgKi8KLSNlbmRpZiAvKiBO T1BVU0ggKi8KLSAgICAnIycsCQkJCS8qIENvbW1lbnQgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAn KCcsCQkJCS8qIFMtRXhwcmVzc2lvbiAqLwotICAgICcuJywJCQkJLyogQXNzaWdubWVudCAqLwot I2VuZGlmIC8qIE5PU1BMICovCi0gICAgJzsnLAkJCQkvKiBDb21tZW50ICovCi0jaWZuZGVmIE5P U1BMCi0gICAgJzonLAkJCQkvKiBMYWJlbCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVm IE5PUFVTSAotI2lmZGVmIENLX1JFRElSCi0gICAgJzwnLAkJCQkvKiBSRURJUkVDVCAqLwotI2Vu ZGlmIC8qIENLX1JFRElSICovCi0gICAgJ0AnLAkJCQkvKiBEQ0wgZXNjYXBlICovCi0jZW5kaWYg LyogTk9QVVNIICovCi0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgJ14nLAkJCQkvKiBDb21tYW5kIHJl Y2FsbCAqLwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotI2lmbmRlZiBOT1NQTAotICAgICd7JywJ CQkJLyogSW1tZWRpYXRlIG1hY3JvICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAnXDAnCQkJ CS8qIEVuZCBvZiB0aGlzIHN0cmluZyAqLwotfTsKLWludCB4eGRvdCA9IDA7CQkJCS8qIFVzZWQg d2l0aCAiLiIgdG9rZW4gKi8KLQotc3RydWN0IGtleXRhYiB5ZXNub1tdID0gewkJLyogWWVzL05v IGtleXdvcmQgdGFibGUgKi8KLSAgICB7ICJubyIsICAgIDAsIDAgfSwKLSAgICB7ICJvayIsICAg IDEsIDAgfSwKLSAgICB7ICJ5ZXMiLCAgIDEsIDAgfQotfTsKLWludCBueWVzbm8gPSAoc2l6ZW9m KHllc25vKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLS8qIFNhdmUga2V5d29yZCB0YWJs ZSAqLwotCi1zdHJ1Y3Qga2V5dGFiIHNhdnRhYltdID0gewotI2lmZGVmIE9TMgotICAgIHsgImNv bW1hbmQiLCAgWFNDTUQsIDAgfSwKLSNlbHNlCi0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgeyAiY29t bWFuZCIsICBYU0NNRCwgMCB9LAotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotI2VuZGlmIC8qIE9T MiAqLwotI2lmbmRlZiBOT1NFVEtFWQotICAgIHsgImtleW1hcCIsICAgWFNLRVksIDAgfSwKLSNl bmRpZiAvKiBOT1NFVEtFWSAqLwotI2lmZGVmIE9TMgotICAgIHsgInRlcm1pbmFsIiwgWFNURVJN LCAwIH0sCi0jZW5kaWYgLyogT1MyICovCi0gICAgeyAiIiwgMCwgMCB9Ci19OwotaW50IG5zYXYg PSAoc2l6ZW9mKHNhdnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotLyogUGFy YW1ldGVyIGtleXdvcmQgdGFibGUgKi8KLQotc3RydWN0IGtleXRhYiBwcm10YWJbXSA9IHsKLSAg ICB7ICJhbGFybSIsICAgICAgICAgICAgWFlBTFJNLCAgMCB9LAotI2lmZGVmIENPTU1FTlQJCQkJ LyogU0VUIEFOU1dFUiBub3QgaW1wbGVtZW50ZWQgeWV0ICovCi0jaWZuZGVmIE5PRElBTAotICAg IHsgImFuc3dlciIsICAgICAgICAgICBYWUFOU1dFUiwwIH0sCi0jZW5kaWYgLyogTk9ESUFMICov Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHsgImFzay10aW1lciIsICAgICAgICBYWVRJTUVS LCAwIH0sCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgImF0dHJpYnV0ZXMiLCAgICAgICBYWUFUVFIs ICAwIH0sCi0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAg ICB7ICJhdXRoZW50aWNhdGlvbiIsICAgWFlBVVRILCAgMCB9LAotI2Vsc2UgIC8qIENLX0FVVEhF TlRJQ0FUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgeyAiYXV0aGVudGljYXRpb24iLCAgIFhZ QVVUSCwgIDAgfSwKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNB VElPTiAqLwotICAgIHsgImIiLAkJICBYWUJBQ0ssICBDTV9JTlZ8Q01fQUJSfENNX1BTSCB9LAot ICAgIHsgImJhIiwJCSAgWFlCQUNLLCAgQ01fSU5WfENNX0FCUnxDTV9QU0ggfSwKLSNpZmRlZiBW TVMKLSAgICB7ICJiYWNrZ3JvdW5kIiwgICAgICAgWFlCQUNLLCAgQ01fSU5WfENNX1BTSCB9LAot ICAgIHsgImJhdGNoIiwgICAgICAgICAgICBYWUJBQ0ssICBDTV9QU0ggfSwKLSNlbHNlCi0gICAg eyAiYmFja2dyb3VuZCIsICAgICAgIFhZQkFDSywgIENNX1BTSCB9LAotICAgIHsgImJhdGNoIiwg ICAgICAgICAgICBYWUJBQ0ssICBDTV9JTlZ8Q01fUFNIIH0sCi0jZW5kaWYgLyogVk1TICovCi0j aWZuZGVmIE5PTE9DQUwKLSAgICB7ICJiYXVkIiwJICAgICAgICAgIFhZU1BFRSwgIENNX0lOVnxD TV9MT0MgfSwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgeyAiYmVsbCIsICAgICAgICAgICAg IFhZQkVMTCwgIDAgfSwKLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAiYmxvY2stY2hlY2siLCAgCSAg WFlDSEtULCAgMCB9LAotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2lmZGVmIE9TMgotI2lmZGVmIEJQ UklOVAotICAgIHsgImJwcmludGVyIiwgICAgICAgICBYWUJEQ1AsICBDTV9JTlYgfSwKLSNlbmRp ZiAvKiBCUFJJTlQgKi8KLSNlbmRpZiAvKiAgT1MyICovCi0jaWZkZWYgQlJPV1NFUgotICAgIHsg ImJyb3dzZXIiLCAgICAgICAgICBYWUJST1dTRSxDTV9QU0h8Q01fTE9DIH0sCi0jZW5kaWYgLyog QlJPV1NFUiAqLwotI2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBEWU5BTUlDCi0gICAgeyAiYnVmZmVy cyIsICAgICAgICAgIFhZQlVGLCAgIDAgfSwKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0jZW5kaWYg LyogTk9YRkVSICovCi0jaWZuZGVmIE5PTE9DQUwKLSNpZm5kZWYgTUFDCi0gICAgeyAiY2Fycmll ci13YXRjaCIsICAgIFhZQ0FSUiwgIENNX0xPQyB9LAotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlm IC8qIE5PTE9DQUwgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJjYXNlIiwgICAgICAgICAgICAg WFlDQVNFLCAgMCB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgeyAiY2QiLCAgICAgICAgICAg ICAgIFhZQ0QsICAgIDAgfSwKLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAiY2wiLCAgICAgICAgICAg ICAgIFhZQ0xFQVIsIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJjbGUiLCAgICAgICAgICAgICAg WFlDTEVBUiwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgImNsZWEiLCAgICAgICAgICAgICBYWUNM RUFSLCBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiY2xlYXIiLCAgICAgICAgICAgIFhZQ0xFQVIs IENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJjbGVhci1jaGFubmVsIiwgICAgWFlDTEVBUiwgMCB9 LAotICAgIHsgImNsZWFyY2hhbm5lbCIsICAgICBYWUNMRUFSLCBDTV9JTlYgfSwKLSNlbmRpZiAv KiBOT1hGRVIgKi8KLSNpZm5kZWYgTk9MT0NBTAotICAgIHsgImNsb3NlLW9uLWRpc2Nvbm5lY3Qi LCBYWURJU0MsIENNX0lOVnxDTV9MT0MgfSwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgeyAi Y21kIiwgICAgICAgICAgICAgIFhZQ01ELCAgIENNX0lOViB9LAotICAgIHsgImNvbW1hbmQiLCAg ICAgICAgICBYWUNNRCwgICAwIH0sCi0jaWZkZWYgQ0tfU1BFRUQKLSAgICB7ICJjb24iLCAgICAg ICAgICAgICAgWFlRQ1RMLCAgQ01fSU5WfENNX0FCUiB9LAotI2VuZGlmIC8qIENLX1NQRUVEICov Ci0gICAgeyAiY29uc29sZSIsICAgICAgICAgIFhZQ01ELCAgIENNX0lOViB9LAotI2lmZGVmIENL X1NQRUVECi0gICAgeyAiY29udHJvbC1jaGFyYWN0ZXIiLFhZUUNUTCwgIDAgfSwKLSNlbmRpZiAv KiBDS19TUEVFRCAqLwotI2lmbmRlZiBOT1NQTAotICAgIHsgImNvdW50IiwgICAgICAgICAgICBY WUNPVU4sICAwIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAi ZCIsCQkgIFhZREVMQSwgIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJkZSIsCQkgIFhZREVMQSwg IENNX0lOVnxDTV9BQlIgfSwKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICB7ICJkZWJ1ZyIsICAg ICAgICAgICAgWFlERUJVLCAgMCB9LAotI2lmZGVmIFZNUwotICAgIHsgImRlZmF1bHQiLCAgICAg ICAgICBYWURGTFQsICAwIH0sCi0jZWxzZQotI2lmbmRlZiBNQUMKLSAgICB7ICJkZWZhdWx0Iiwg ICAgICAgICAgWFlERkxULCAgQ01fSU5WIH0sCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyog Vk1TICovCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgImRlbGF5IiwJICAgIAkgIFhZREVMQSwgIDAg fSwKLSAgICB7ICJkZXN0aW5hdGlvbiIsCSAgWFlERVNULCAgMCB9LAotI2VuZGlmIC8qIE5PWEZF UiAqLwotI2lmbmRlZiBOT0RJQUwKLSAgICB7ICJkaSIsCQkgIFhZRElBTCwgIENNX0lOVnxDTV9B QlJ8Q01fTE9DIH0sCi0gICAgeyAiZGlhIiwJCSAgWFlESUFMLCAgQ01fSU5WfENNX0FCUnxDTV9M T0MgfSwKLSAgICB7ICJkaWFsIiwgICAgICAgICAgICAgWFlESUFMLCAgQ01fTE9DIH0sCi0jZW5k aWYgLyogTk9ESUFMICovCi0jaWZkZWYgT1MyCi0gICAgeyAiZGlhbGVyIiwJCSAgWFlETFIsICAg Q01fSU5WIH0sCi0jZW5kaWYgLyogT1MyICovCi0jaWZuZGVmIE5PTE9DQUwKLSAgICB7ICJkaXNj b25uZWN0IiwgICAgICAgWFlESVNDLCAgQ01fTE9DIH0sCi0gICAgeyAiZHVwbGV4IiwJICAgIAkg IFhZRFVQTCwgIENNX0xPQyB9LAotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZm5kZWYgTk9QVVNI Ci0jaWZuZGVmIE5PRlJJTExTCi0gICAgeyAiZWRpdG9yIiwgICAgICAgICAgIFhZRURJVCwgIENN X1BTSCB9LAotI2VuZGlmIC8qICBOT0ZSSUxMUyAqLwotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2lm ZGVmIENLX0NUUkxaCi0gICAgeyAiZW9mIiwgICAgICAgICAgICAgIFhZRU9GLCAgIENNX0lOViB9 LAotI2VuZGlmIC8qIENLX0NUUkxaICovCi0jaWZuZGVmIE5PTE9DQUwKLSAgICB7ICJlc2NhcGUt Y2hhcmFjdGVyIiwgWFlFU0MsICAgQ01fTE9DIH0sCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lm bmRlZiBOT1NQTAotICAgIHsgImV2YWx1YXRlIiwgICAgICAgICBYWUVWQUwsICBDTV9JTlYgfSwK LSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHsgImV4aXQiLAkJICBYWUVYSVQsICAwIH0sCi0jaWZu ZGVmIE5PWEZFUgotI2lmZGVmIENLX1hZWgotI2lmbmRlZiBOT1BVU0gKLSNpZm5kZWYgWFlaX0lO VEVSTkFMCi0gICAgeyAiZXh0ZXJuYWwtcHJvdG9jb2wiLFhZRVhUUk4sIDAgfSwKLSNlbmRpZgkv KiBYWVpfSU5URVJOQUwgKi8KLSNlbmRpZgkvKiBOT1BVU0ggKi8KLSNlbmRpZgkvKiBDS19YWVog Ki8KLSAgICB7ICJmLWFjay1idWciLCAgICAgICAgWFlGQUNLQiwgQ01fSU5WIH0sCi0gICAgeyAi Zi1hY2stcGF0aCIsICAgICAgIFhZRkFDS1AsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PWEZFUiAq LwotICAgIHsgImZpbGUiLCAJICAJICBYWUZJTEUsICAwIH0sCi0gICAgeyAiZmwiLCAgICAgICAg ICAgCSAgWFlGTE9XLCAgQ01fSU5WfENNX0FCUiB9LAotI2lmbmRlZiBOT1NQTAotICAgIHsgImZs YWciLCAgICAgICAgICAgICBYWUZMQUcsICAwIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZmRl ZiBUQ1BTT0NLRVQKLSNpZm5kZWYgU1lTRlRQCi0jaWZuZGVmIE5PRlRQCi0gICAgeyAiZnQiLCAg IAkgICAgICAgICAgWFlGVFBYLCAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgImZ0cCIsICAJICAg ICAgICAgIFhZRlRQWCwgIDAgfSwKLSNlbmRpZiAvKiBOT0ZUUCAqLwotI2VuZGlmIC8qIFNZU0ZU UCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2lmZGVmIEJST1dTRVIKLSAgICB7ICJmdHAt Y2xpZW50IiwgICAgICAgWFlGVFAsICAgQ01fUFNIIH0sCi0jZW5kaWYgLyogQlJPV1NFUiAqLwot ICAgIHsgImZsb3ctY29udHJvbCIsIAkgIFhZRkxPVywgIDAgfSwKLSNpZm5kZWYgTk9TUEwKLSAg ICB7ICJmdW5jdGlvbiIsICAgICAgICAgWFlGVU5DLCAgMCB9LAotI2VuZGlmIC8qIE5PU1BMICov Ci0jaWZkZWYgTkVXRlRQCi0gICAgeyAiZ2V0LXB1dC1yZW1vdGUiLCAgIFhZR1BSLCAgIDAgfSwK LSNlbmRpZiAvKiBORVdGVFAgKi8KLSNpZmRlZiBLVUkKLSAgICB7ICJndWkiLCAgICAgICAgICAg ICAgWFlHVUksICAgMCB9LAotI2VuZGlmIC8qIEtVSSAqLwotICAgIHsgImhhbmRzaGFrZSIsICAg IAkgIFhZSEFORCwgIDAgfSwKLSAgICB7ICJoaW50cyIsICAgICAgICAgICAgWFlISU5UUywgMCB9 LAotI2lmZGVmIE5FVENPTk4KLSAgICB7ICJob3N0IiwgICAgICAgICAgICAgWFlIT1NULCAgQ01f TE9DIH0sCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2lmbmRlZiBOT1NQTAotICAgIHsgImkiLAkJ ICBYWUlOUFUsICBDTV9JTlZ8Q01fQUJSIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZmRlZiBJ S1NECi0gICAgeyAiaWtzIiwgICAgICAgICAgICAgIFhZSUtTLCAgIDAgfSwKLSNlbHNlCi0gICAg eyAiaWtzIiwgICAgICAgICAgICAgIFhZSUtTLCAgIENNX0lOViB9LAotI2VuZGlmIC8qIElLU0Qg Ki8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJpbiIsCQkgIFhZSU5QVSwgIENNX0lOVnxDTV9BQlIg fSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJpbmNvbXBsZXRl IiwgICAJICBYWUlGRCwgICBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNpZm5kZWYg Tk9TUEwKLSAgICB7ICJpbnB1dCIsICAgICAgICAgICAgWFlJTlBVLCAgMCB9LAotI2VuZGlmIC8q IE5PU1BMICovCi0jaWZuZGVmIE5PU0VUS0VZCi0gICAgeyAia2V5IiwJCSAgWFlLRVksICAgMCB9 LAotI2VuZGlmIC8qIE5PU0VUS0VZICovCi0gICAgeyAibCIsICAgICAgICAgICAgICAgIFhZTElO RSwgIENNX0lOVnxDTV9BQlIgfSwKLSNpZm5kZWYgTk9DU0VUUwotICAgIHsgImxhbmd1YWdlIiwg ICAgICAgICBYWUxBTkcsICAwIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotI2lmbmRlZiBOT0xP Q0FMCi0gICAgeyAibGluZSIsICAgICAgICAgICAgIFhZTElORSwgIENNX0xPQyB9LAotICAgIHsg ImxvY2FsLWVjaG8iLAkgIFhZTENMRSwgIENNX0lOVnxDTV9MT0MgfSwKLSNlbmRpZiAvKiBOT0xP Q0FMICovCi0jaWZkZWYgTE9DVVMKLSAgICB7ICJsb2N1cyIsICAgICAgICAgICAgWFlMT0NVUywg MCB9LAotI2VuZGlmIC8qIExPQ1VTICovCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAibG9naW4iLAkJ ICBYWUxPR0lOLCBDTV9MT0MgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT1NQTAot ICAgIHsgIm1hY3JvIiwgICAgICAgICAgICBYWU1BQ1IsICAwIH0sCi0jZW5kaWYgLyogTk9TUEwg Ki8KLSAgICB7ICJtYXRjaCIsICAgICAgICAgICAgWFlNQVRDSCwgMCB9LAotI2lmZGVmIENPTU1F TlQKLSNpZmRlZiBWTVMKLSAgICB7ICJtZXNzYWdlcyIsICAgICAgICAgWFlNU0dTLCAgMCB9LAot I2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZm5kZWYgTk9ESUFMCi0g ICAgeyAibW9kZW0iLAkJICBYWU1PRE0sICBDTV9MT0MgfSwKLSNlbmRpZiAvKiBOT0RJQUwgKi8K LSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMk1PVVNFCi0gICAgeyAibW91c2UiLAkJICBYWU1P VVNFLCAwIH0sCi0jZW5kaWYgLyogT1MyTU9VU0UgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0j aWZkZWYgT1MyCi0gICAgeyAibXNrZXJtaXQiLCAgICAgICAgIFhZTVNLLCAgIDAgfSwKLSNlbmRp ZiAvKiBPUzIgKi8KLSNpZmRlZiBORVRDT05OCi0gICAgeyAibmV0d29yayIsICAgICAgICAgIFhZ TkVULCAgIENNX0xPQyB9LAotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNpZm5kZWYgTk9TUEwKLSAg ICB7ICJvdXRwdXQiLCAgICAgICAgICAgWFlPVVRQLCAgMCB9LAotI2VuZGlmIC8qIE5PU1BMICov Ci0gICAgeyAib3B0aW9ucyIsICAgICAgICAgIFhZT1BUUywgIDAgfSwKLSAgICB7ICJwYXVzZSIs ICAgICAgICAgICAgWFlTTEVFUCwgQ01fSU5WIH0sCi0jaWZkZWYgQU5ZWDI1Ci0jaWZuZGVmIElC TVgyNQotICAgIHsgInBhZCIsICAgICAgICAgICAgICBYWVBBRCwgICBDTV9MT0MgfSwKLSNlbmRp ZiAvKiBJQk1YMjUgKi8KLSNlbmRpZiAvKiBBTllYMjUgKi8KLSAgICB7ICJwYXJpdHkiLAkgICAg CSAgWFlQQVJJLCAgMCB9LAotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgeyAicG9y dCIsICAgICAgICAgICAgIFhZTElORSwgIENNX0xPQyB9LAotI2Vsc2UKLSAgICB7ICJwb3J0Iiwg ICAgICAgICAgICAgWFlMSU5FLCAgQ01fSU5WfENNX0xPQyB9LAotI2VuZGlmIC8qIE9TMiAqLwot I2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZm5kZWYgTk9GUklMTFMKLSAgICB7ICJwciIsICAgCSAg ICAJICBYWVBST00sICBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAicHJpbnRlciIsICAgICAgICAg IFhZUFJUUiwgIDAgfSwKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2lmZGVmIE9TMgotICAgIHsg InByaW9yaXR5IiwgICAgICAgICBYWVBSVFksICAwIH0sCi0jZW5kaWYgLyogT1MyICovCi0jaWZk ZWYgQ0tfU1BFRUQKLSAgICB7ICJwcmVmaXhpbmciLCAgICAgICAgWFlQUkVGSVgsIDAgfSwKLSNl bmRpZiAvKiBDS19TUEVFRCAqLwotI2lmbmRlZiBOT0ZSSUxMUwotICAgIHsgInByb21wdCIsCSAg ICAJICBYWVBST00sICAwIH0sCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSNpZm5kZWYgTk9YRkVS Ci0gICAgeyAicHJvdG9jb2wiLAkgIFhZUFJPVE8sIDAgfSwKLSNlbmRpZiAvKiBOT1hGRVIgKi8K LSAgICB7ICJxIiwJCSAgWFlRVUlFLCAgQ01fSU5WfENNX0FCUiB9LAotI2lmbmRlZiBOT1hGRVIK LSAgICB7ICJxOGZsYWciLCAgICAgICAgICAgWFlROEZMRywgQ01fSU5WIH0sCi0jZW5kaWYgLyog Tk9YRkVSICovCi0jaWZkZWYgUU5YCi0gICAgeyAicW54LXBvcnQtbG9jayIsICAgIFhZUU5YUEws IDAgfSwKLSNlbHNlCi0gICAgeyAicW54LXBvcnQtbG9jayIsICAgIFhZUU5YUEwsIENNX0lOViB9 LAotI2VuZGlmIC8qIFFOWCAqLwotICAgIHsgInF1aWV0IiwJCSAgWFlRVUlFLCAgMCB9LAotI2lm bmRlZiBOT1hGRVIKLSAgICB7ICJyZWMiLCAgICAgICAgICAgICAgWFlSRUNWLCAgQ01fSU5WfENN X0FCUiB9LAotICAgIHsgInJlY2VpdmUiLCAgICAgICAgICBYWVJFQ1YsICAwIH0sCi0gICAgeyAi cmVjdiIsICAgICAgICAgICAgIFhZUkVDViwgIENNX0lOViB9LAotI2VuZGlmIC8qIE5PWEZFUiAq LwotICAgIHsgInJlbGlhYmxlIiwgICAgICAgICBYWVJFTFksICAwIH0sCi0gICAgeyAicmVuYW1l IiwgICAgICAgICAgIFhZX1JFTiwgIDAgfSwKLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAicmVwZWF0 IiwgICAgICAgICAgIFhZUkVQVCwgIDAgfSwKLSAgICB7ICJyZXRyeS1saW1pdCIsICAgICAgWFlS RVRSLCAgMCB9LAotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2lmZGVmIENLUk9PVAotICAgIHsgInJv b3QiLCAgICAgICAgICAgICBYWVJPT1QsICAwIH0sCi0jZW5kaWYgLyogQ0tST09UICovCi0jaWZu ZGVmIE5PU0NSSVBUCi0gICAgeyAic2NyaXB0IiwJCSAgWFlTQ1JJLCAgQ01fTE9DIH0sCi0jZW5k aWYgLyogTk9TQ1JJUFQgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAic2VuZCIsICAgICAgICAg ICAgIFhZU0VORCwgIDAgfSwKLSNpZm5kZWYgTk9MT0NBTAotI2lmbmRlZiBOT1NFUlZFUgotICAg IHsgInNlciIsICAgICAgICAgICAgICBYWVNFUlYsICBDTV9JTlZ8Q01fQUJSIH0sCi0jZW5kaWYg LyogTk9TRVJWRVIgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICB7ICJzZXJpYWwiLCAgICAg ICAgICAgWFlTRVJJQUwsQ01fTE9DIH0sCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmbmRlZiBO T1NFUlZFUgotICAgIHsgInNlcnZlciIsICAgICAgICAgICBYWVNFUlYsICAwIH0sCi0jZW5kaWYg LyogTk9TRVJWRVIgKi8KLSNpZmRlZiBTRVNMSU1JVAotI2lmbmRlZiBOT0xPQ0FMCi0gICAgeyAi c2Vzc2lvbi1sIiwgICAgICAgIFhZU0VTUywgIENNX0lOVnxDTV9BQlIgfSwKLSNlbmRpZiAvKiBO T0xPQ0FMICovCi0gICAgeyAic2Vzc2lvbi1saW1pdCIsICAgIFhZTElNSVQsIENNX0lOVnxDTV9M T0MgfSwgLyogU2Vzc2lvbiBMaW1pdCAqLwotI2VuZGlmIC8qIFNFU0xJTUlUICovCi0KLSNpZm5k ZWYgTk9MT0NBTAotICAgIHsgInNlc3Npb24tbG9nIiwgICAgICBYWVNFU1MsICBDTV9MT0MgfSwK LSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9TUEwKLSNpZm5kZWYgTk9TRVhQCi0g ICAgeyAic2V4cHJlc3Npb24iLCAgICAgIFhZU0VYUCwgIENNX0lOViB9LAotI2VuZGlmIC8qIE5P U0VYUCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICB7ICJzbGVlcCIsICAgICAgICAgICAg WFlTTEVFUCwgMCB9LAotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICB7ICJzcGVlZCIsCSAgICAgICAg ICBYWVNQRUUsICBDTV9MT0MgfSwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRlZiBBTllT U0gKLSAgICB7ICJzc2giLAkgICAgICAgICAgWFlTU0gsICAgMCB9LAotI2VuZGlmIC8qIEFOWVNT SCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAic3RhcnR1cC1maWxlIiwgICAgIFhZU1RBUlRV UCwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZk ZWYgSFdQQVJJVFkKLSAgICB7ICJzdG9wLWJpdHMiLCAgICAgICAgWFlTVE9QLCBDTV9MT0MgfSwK LSNlbHNlCi0jaWZkZWYgVE5fQ09NUE9SVAotICAgIHsgInN0b3AtYml0cyIsICAgICAgICBYWVNU T1AsIENNX0xPQyB9LAotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSNlbmRpZiAvKiBIV1BBUklU WSAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBTVFJF QU1JTkcKLSAgICB7ICJzdHJlYW1pbmciLCAgICAgICAgWFlTVFJFQU0sIDAgfSwKLSNlbmRpZiAv KiBTVFJFQU1JTkcgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0pDCi0gICAg eyAic3VzcGVuZCIsICAgICAgICAgIFhZU1VTUCwgIENNX1BTSCB9LAotI2VuZGlmIC8qIE5PSkMg Ki8KLSNpZmRlZiBDS1NZU0xPRwotICAgIHsgInN5c2xvZyIsICAgICAgICAgICBYWVNZU0wsICBD TV9JTlYgfSwKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgIHsgInRha2UiLCAgICAgICAgICAg ICBYWVRBS0UsICAwIH0sCi0KLSNpZmRlZiBDS19UQVBJCi0gICAgeyAidGFwaSIsICAgICAgICAg ICAgIFhZVEFQSSwgIENNX0xPQyB9LAotI2VuZGlmIC8qIENLX1RBUEkgKi8KLQotI2lmbmRlZiBO T1RDUE9QVFMKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICB7ICJ0Y3AiLCAgICAgICAgICAgICAgWFlU Q1AsICAgQ01fTE9DIH0sCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogTk9UQ1BP UFRTICovCi0KLSNpZmRlZiBUTkNPREUKLSAgICB7ICJ0ZWwiLCAgICAgICAgICAgICAgWFlURUws ICAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgInRlbG5ldCIsICAgICAgICAgICBYWVRFTCwgICAw IH0sCi0gICAgeyAidGVsb3B0IiwgICAgICAgICAgIFhZVEVMT1AsIDAgfSwKLSNlbmRpZiAvKiBU TkNPREUgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgIHsgInRlbXAtZGlyZWN0b3J5IiwgICBYWVRN UERJUiwwIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgeyAi dGVybWluYWwiLCAgICAgICAgIFhZVEVSTSwgIENNX0xPQyB9LAotI2VuZGlmIC8qIE5PTE9DQUwg Ki8KLQotI2lmZGVmIE9TMgotICAgIHsgInRpdGxlIiwJCSAgWFlUSVRMRSwgQ01fTE9DIH0sCi0j ZW5kaWYgLyogT1MyICovCi0jaWZkZWYgVExPRwotICAgIHsgInRyYW5zYWN0aW9uLWxvZyIsICBY WVRMT0csICAwIH0sCi0jZW5kaWYgLyogVExPRyAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJ0 cmFuc2ZlciIsICAgICAgICAgWFlYRkVSLCAgMCB9LAotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2lm bmRlZiBOT1hNSVQKLSAgICB7ICJ0cmFuc21pdCIsICAgICAgICAgWFlYTUlULCAgMCB9LAotI2Vu ZGlmIC8qIE5PWE1JVCAqLwotI2lmbmRlZiBOT1hGRVIKLSNpZm5kZWYgTk9DU0VUUwotICAgIHsg InVua25vd24tY2hhci1zZXQiLCBYWVVOQ1MsICAwIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAqLwot I2lmbmRlZiBOT1NQTAotICAgIHsgInZhcmlhYmxlLWV2YWx1YXRpb24iLCBYWVZBUkVWLCBDTV9J TlYgfSwKLSNlbmRpZgkvKiBOT1NQTCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHsgIndh aXQiLCAgICAgICAgICAgICBYWVNMRUVQLCBDTV9JTlYgfSwKLSNpZm5kZWYgTk9QVVNICi0jaWZk ZWYgVU5JWAotICAgIHsgIndpbGRjYXJkLWV4cGFuc2lvbiIsIFhZV0lMRCwgMCB9LAotI2VuZGlm IC8qIFVOSVggKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNpZmRlZiBOVAotICAgIHsgInciLCAg ICAgICAgICAgICAgICBYWVdJTkQsICBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAid2kiLCAgICAg ICAgICAgICAgIFhZV0lORCwgIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJ3aW4iLCAgICAgICAg ICAgICAgWFlXSU5ELCAgQ01fSU5WfENNX0FCUiB9LAotI2VuZGlmIC8qIE5UICovCi0gICAgeyAi d2luZG93LXNpemUiLCAgICAgIFhZV0lORCwgIDAgfSwKLSNpZmRlZiBOVAotICAgIHsgIndpbjk1 IiwgICAgICAgICAgICBYWVdJTjk1LCAwIH0sCi0jZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBBTllY MjUKLSAgICB7ICJ4LjI1IiwgICAgICAgICAgICAgWFlYMjUsICAgQ01fTE9DIH0sCi0gICAgeyAi eDI1IiwgICAgICAgICAgICAgIFhZWDI1LCAgIENNX0lOVnxDTV9MT0MgfSwKLSNlbmRpZiAvKiBB TllYMjUgKi8KLSAgICB7ICJ4ZmVyIiwgICAgICAgICAgICAgWFlYRkVSLCAgQ01fSU5WIH0sCi0j aWZuZGVmIE5PWE1JVAotICAgIHsgInhtaXQiLCAgICAgICAgICAgICBYWVhNSVQsICBDTV9JTlYg fSwKLSNlbmRpZiAvKiBOT1hNSVQgKi8KLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1pbnQgbnBybSA9 IChzaXplb2YocHJtdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOyAvKiBIb3cgbWFu eSAqLwotCi1zdHJ1Y3Qga2V5dGFiIHNjbnRhYltdID0gewkJLyogU2NyZWVuIGNvbW1hbmRzICov Ci0gICAgeyAiY2xlYXIiLCAgIFNDTl9DTFIsIDAgfSwKLSAgICB7ICJjbGVvbCIsICAgU0NOX0NM RSwgMCB9LAotICAgIHsgIm1vdmUtdG8iLCBTQ05fTU9WLCAwIH0KLX07Ci1pbnQgbnNjbnRhYiA9 IChzaXplb2Yoc2NudGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7IC8qIEhvdyBtYW55ICov Ci0KLSNpZmRlZiBBTllTU0gJCQkJLyogU1NIIGNvbW1hbmQgdGFibGUgKi8KLSNpZmRlZiBTU0hC VUlMVElOCi1pbnQgICAgc3NoX3BmX2xjbF9uID0gMCwKLSAgICAgICBzc2hfcGZfcm10X24gPSAw Owotc3RydWN0IHNzaF9wZiBzc2hfcGZfbGNsWzMyXSA9IHsgMCwgTlVMTCwgMCB9OyAvKiBTU0gg UG9ydCBGb3J3YXJkaW5nICovCi1zdHJ1Y3Qgc3NoX3BmIHNzaF9wZl9ybXRbMzJdID0geyAwLCBO VUxMLCAwIH07IC8qIHN0cnVjdHMuLi4gKi8KLWV4dGVybiBjaGFyICogc3NoX2hzdCwgKiBzc2hf Y21kLCAqIHNzaF9wcnQ7Ci1leHRlcm4gaW50ICAgIHNzaF92ZXIsICAgc3NoX3hmdzsKLWNoYXIg KiBzc2hfdG1wdWlkID0gTlVMTCwgKnNzaF90bXBjbWQgPSBOVUxMLCAqc3NoX3RtcHBvcnQgPSBO VUxMLAotICAgICAqIHNzaF90bXBzdHIgPSBOVUxMOwotCi1pbnQKLSBzc2hrX3R5cGUgPSBTU0hL VF8yRCwJCQkvKiBTU0ggS0VZIENSRUFURSAvVFlQRTp4ICovCi0gc3Noa19iaXRzID0gMTAyNCwJ CQkvKiBTU0ggS0VZIENSRUFURSAvQklUUzpuICovCi0gc3Noa19kaW4gID0gU0tERl9PU1NILAkJ CS8qIFNTSCBLRVkgRElTUExBWSAvSU4tRk9STUFUOiAqLwotIHNzaGtfZG91dCA9IFNLREZfT1NT SDsJCQkvKiBTU0ggS0VZIERJU1BMQVkgL09VVC1GT1JNQVQ6ICovCi0KLWNoYXIKLSAqIHNzaGsx X2NvbW1lbnQgPSBOVUxMLAkJLyogU1NIIFYxIENPTU1FTlQgKi8KLSAqIHNzaGtwX29sZCA9IE5V TEwsCQkJLyogT2xkIGtleSBwYXNzcGhyYXNlICovCi0gKiBzc2hrcF9uZXcgPSBOVUxMLAkJCS8q IE5ldyBrZXkgcGFzc3BocmFzZSAqLwotICogc3Noa2NfcGFzcyA9IE5VTEwsCQkJLyogS0VZIENS RUFURSAvUEFTUzp4eHggKi8KLSAqIHNzaGtjX2NvbW0gPSBOVUxMLAkJCS8qIEtFWSBDUkVBVEUg L1YxLVJTQS1DT01NRU5UOnh4eCAqLwotICogc3NoZF9maWxlID0gTlVMTCwJCQkvKiBESVNQTEFZ IGZpbGUgKi8KLSAqIHNzaGtfZmlsZSA9IE5VTEw7CQkJLyogU1NIIENSRUFURSBLRVkgZmlsZSAq LwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzc2hjbHJbXSA9IHsKLSAgICB7ICJsb2NhbC1wb3J0 LWZvcndhcmQiLCAgU1NIQ19MUEYsIDAgfSwKLSAgICB7ICJyZW1vdGUtcG9ydC1mb3J3YXJkIiwg U1NIQ19SUEYsIDAgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5zc2hjbHIg PSAoc2l6ZW9mKHNzaGNscikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotc3RydWN0 IGtleXRhYiBzc2hvcG5zd1tdID0gewotICAgIHsgIi9jb21tYW5kIiwgICAgICAgIFNTSFNXX0NN RCwgQ01fQVJHIH0sCi0gICAgeyAiL3Bhc3N3b3JkIiwgICAgICAgU1NIU1dfUFdELCBDTV9BUkcg fSwKLSAgICB7ICIvc3Vic3lzdGVtIiwgICAgICBTU0hTV19TVUIsIENNX0FSRyB9LAotICAgIHsg Ii91c2VyIiwgICAgICAgICAgIFNTSFNXX1VTUiwgQ01fQVJHIH0sCi0gICAgeyAiL3ZlcnNpb24i LCAgICAgICAgU1NIU1dfVkVSLCBDTV9BUkcgfSwKLSAgICB7ICIveDExLWZvcndhcmRpbmciLCBT U0hTV19YMTEsIENNX0FSRyB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLWludCBuc3Nob3Buc3cg PSAoc2l6ZW9mKHNzaG9wbnN3KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdGF0 aWMgc3RydWN0IGtleXRhYiBzc2hrd3RhYltdID0gewotICAgIHsgImFkZCIsICAgICAgICAgICAg ICAgICBYU1NIX0FERCwgMCB9LAotICAgIHsgImFnZW50IiwgICAgICAgICAgICAgICBYU1NIX0FH VCwgMCB9LAotICAgIHsgImNsZWFyIiwgICAgICAgICAgICAgICBYU1NIX0NMUiwgMCB9LAotICAg IHsgImZvcndhcmQtbG9jYWwtcG9ydCIsICBYU1NIX0ZMUCwgQ01fSU5WIH0sCi0gICAgeyAiZm9y d2FyZC1yZW1vdGUtcG9ydCIsIFhTU0hfRlJQLCBDTV9JTlYgfSwKLSAgICB7ICJrZXkiLCAgICAg ICAgICAgICAgICAgWFNTSF9LRVksIDAgfSwKLSAgICB7ICJvcGVuIiwgICAgICAgICAgICAgICAg WFNTSF9PUE4sIDAgfSwKLSAgICB7ICJ2MiIsICAgICAgICAgICAgICAgICAgWFNTSF9WMiwgIDAg fSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5zc2hjbWQgPSAoc2l6ZW9mKHNz aGt3dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdGF0aWMgc3RydWN0IGtl eXRhYiBzc2gydGFiW10gPSB7Ci0gICAgeyAicmVrZXkiLCBYU1NIMl9SS0UsIDAgfSwKLSAgICB7 ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5zc2gydGFiID0gKHNpemVvZihzc2gydGFiKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGFkZGZ3ZFtd ID0gewkvKiBTRVQgU1NIIEFERCBjb21tYW5kIHRhYmxlICovCi0gICAgeyAibG9jYWwtcG9ydC1m b3J3YXJkIiwgIFNTSEZfTENMLCAwIH0sCi0gICAgeyAicmVtb3RlLXBvcnQtZm9yd2FyZCIsIFNT SEZfUk1ULCAwIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuYWRkZndkID0g KHNpemVvZihhZGRmd2QpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0YXRpYyBz dHJ1Y3Qga2V5dGFiIHNzaGFnZW50W10gPSB7CS8qIFNFVCBTU0ggQUdFTlQgY29tbWFuZCB0YWJs ZSAqLwotICAgIHsgImFkZCIsICAgIFNTSEFfQURELCAwIH0sCi0gICAgeyAiZGVsZXRlIiwgU1NI QV9ERUwsIDAgfSwKLSAgICB7ICJsaXN0IiwgICBTU0hBX0xTVCwgMCB9LAotICAgIHsgIiIsIDAs IDAgfQotfTsKLXN0YXRpYyBpbnQgbnNzaGFnZW50ID0gKHNpemVvZihzc2hhZ2VudCkgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgc3NoYWd0c3db XSA9IHsJLyogU0VUIFNTSCBBR0VOVCBMSVNUIHN3aXRjaCB0YWJsZSAqLwotICAgIHsgIi9maW5n ZXJwcmludCIsIFNTSEFTV19GUCwgMCB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBp bnQgbnNzaGFndHN3ID0gKHNpemVvZihzc2hhZ3RzdykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikp IC0gMTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgc3Noa2V5W10gPSB7CS8qIFNFVCBTU0ggS0VZ IGNvbW1hbmQgdGFibGUgKi8KLSAgICB7ICJjaGFuZ2UtcGFzc3BocmFzZSIsICBTU0hLX1BBU1Ms IDAgfSwKLSAgICB7ICJjcmVhdGUiLCAgICAgICAgICAgICBTU0hLX0NSRUEsIDAgfSwKLSAgICB7 ICJkaXNwbGF5IiwgICAgICAgICAgICBTU0hLX0RJU1AsIDAgfSwKLSAgICB7ICJ2MSIsICAgICAg ICAgICAgICAgICBTU0hLX1YxLCAgIDAgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMg aW50IG5zc2hrZXkgPSAoc2l6ZW9mKHNzaGtleSkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0g MTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgc3Noa3YxW10gPSB7CS8qIFNFVCBTU0ggS0VZIFYx IGNvbW1hbmQgdGFibGUgKi8KLSAgICB7ICJzZXQtY29tbWVudCIsICAxLCAwIH0KLX07Ci0KLXN0 YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaGtwc3dbXSA9IHsJLyogU0VUIFNTSCBLRVkgUEFTU1BIUkFT RSB0YWJsZSAqLwotICAgIHsgIi9uZXctcGFzc3BocmFzZSIsICAyLCBDTV9BUkcgfSwKLSAgICB7 ICIvb2xkLXBhc3NwaHJhc2UiLCAgMSwgQ01fQVJHIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5 dGFiIHNzaGtjcmVhW10gPSB7CS8qIFNTSCBLRVkgQ1JFQVRFIHRhYmxlICovCi0gICAgeyAiL2Jp dHMiLCAgICAgICAgICAgU1NIS0NfQkksIENNX0FSRyB9LAotICAgIHsgIi9wYXNzcGhyYXNlIiwg ICAgIFNTSEtDX1BQLCBDTV9BUkcgfSwKLSAgICB7ICIvdHlwZSIsICAgICAgICAgICBTU0hLQ19U WSwgQ01fQVJHIH0sCi0gICAgeyAiL3YxLXJzYS1jb21tZW50IiwgU1NIS0NfMVIsIENNX0FSRyB9 Ci19Owotc3RhdGljIGludCBuc3Noa2NyZWEgPSAoc2l6ZW9mKHNzaGtjcmVhKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaGtjdHlbXSA9IHsJLyog U1NIIEtFWSBDUkVBVEUgL1RZUEU6eHh4ICovCi0gICAgeyAic3JwIiwgICAgU1NIS1RfU1JQLCAw IH0sCi0gICAgeyAidjEtcnNhIiwgU1NIS1RfMVIsIDAgfSwKLSAgICB7ICJ2Mi1kc2EiLCBTU0hL VF8yRCwgMCB9LAotICAgIHsgInYyLXJzYSIsIFNTSEtUXzJSLCAwIH0KLX07Ci1zdGF0aWMgaW50 IG5zc2hrY3R5ID0gKHNpemVvZihzc2hrY3R5KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0K LXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaGRzd2lbXSA9IHsJLyogU0VUIFNTSCBLRVkgRElTUExB WSAvc3dpdGNoZXMgKi8KLSAgICB7ICIvZm9ybWF0IiwgU1NIS0RfT1VULCBDTV9BUkcgfQotfTsK LXN0YXRpYyBpbnQgbnNzaGRzd2kgPSAoc2l6ZW9mKHNzaGRzd2kpIC8gc2l6ZW9mKHN0cnVjdCBr ZXl0YWIpKTsKLQotI2lmZGVmIENPTU1FTlQKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaGRpZm10 W10gPSB7CS8qIFNTSCBLRVkgRElTUExBWSAvSU4tRk9STUFUOiAqLwotICAgIHsgIm9wZW5zc2gi LCBTS0RGX09TU0gsIDAgfSwKLSAgICB7ICJzc2guY29tIiwgU0tERl9TU0hDLCAwIH0KLX07Ci1z dGF0aWMgaW50IG5zc2hkaWZtdCA9IChzaXplb2Yoc3NoZGlmbXQpIC8gc2l6ZW9mKHN0cnVjdCBr ZXl0YWIpKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNz aGRvZm10W10gPSB7CS8qIFNTSCBLRVkgRElTUExBWSAvSU4tRk9STUFUOiAqLwotICAgIHsgImZp bmdlcnByaW50IiwgU0tERl9GSU5HLCAwIH0sCi0gICAgeyAiaWV0ZiIsICAgICAgICBTS0RGX0lF VEYsIDAgfSwKLSAgICB7ICJvcGVuc3NoIiwgICAgIFNLREZfT1NTSCwgMCB9LAotICAgIHsgInNz aC5jb20iLCAgICAgU0tERl9TU0hDLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5zc2hkb2ZtdCA9IChz aXplb2Yoc3NoZG9mbXQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RhdGljIHN0cnVj dCBrZXl0YWIgc3Noa2VybWl0W10gPSB7IC8qIFNLRVJNSVQgKi8KLSAgICB7ICJvcGVuIiwgICAg ICAgU0tSTV9PUE4sIDAgfQotfTsKLXN0YXRpYyBpbnQgbnNzaGtlcm1pdCA9IChzaXplb2Yoc3No a2VybWl0KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0cnVjdCBrZXl0YWIgc3Noa3Jt b3Buc3dbXSA9IHsKLSAgICB7ICIvcGFzc3dvcmQiLCAgICAgICBTU0hTV19QV0QsIENNX0FSRyB9 LAotICAgIHsgIi91c2VyIiwgICAgICAgICAgIFNTSFNXX1VTUiwgQ01fQVJHIH0sCi0gICAgeyAi L3ZlcnNpb24iLCAgICAgICAgU1NIU1dfVkVSLCBDTV9BUkcgfSwKLSAgICB7ICIiLCAwLCAwIH0K LX07Ci1pbnQgbnNzaGtybW9wbnN3ID0gKHNpemVvZihzc2hrcm1vcG5zdykgLyBzaXplb2Yoc3Ry dWN0IGtleXRhYikpIC0gMTsKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0KLSNpZmRlZiBTRlRQ X0JVSUxUSU4KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNmdHBrd3RhYltdID0geyAgICAvKiBTRlRQ ICovCi0gICAgeyAgImNkIiwgICAgICAgIFNGVFBfQ0QsICAgIDAgfSwKLSAgICB7ICAiY2hncnAi LCAgICAgU0ZUUF9DSEdSUCwgMCB9LAotICAgIHsgICJjaG1vZCIsICAgICBTRlRQX0NITU9ELCAw IH0sCi0gICAgeyAgImNob3duIiwgICAgIFNGVFBfQ0hPV04sIDAgfSwKLSAgICB7ICAiZGVsZXRl IiwgICAgU0ZUUF9STSwgICAgMCB9LAotICAgIHsgICJkaXIiLCAgICAgICBTRlRQX0RJUiwgICAw IH0sCi0gICAgeyAgImdldCIsICAgICAgIFNGVFBfR0VULCAgIDAgfSwKLSAgICB7ICAibWtkaXIi LCAgICAgU0ZUUF9NS0RJUiwgMCB9LAotICAgIHsgICJvcGVuIiwgICAgICBTRlRQX09QTiwgICAw IH0sCi0gICAgeyAgInB1dCIsICAgICAgIFNGVFBfUFVULCAgIDAgfSwKLSAgICB7ICAicHdkIiwg ICAgICAgU0ZUUF9QV0QsICAgMCB9LAotICAgIHsgICJyZW5hbWUiLCAgICBTRlRQX1JFTiwgICAw IH0sCi0gICAgeyAgInJtIiwgICAgICAgIFNGVFBfUk0sICAgIENNX0lOViB9LAotICAgIHsgICJy bWRpciIsICAgICBTRlRQX1JNRElSLCAwIH0sCi0gICAgeyAgInN5bWxpbmsiLCAgIFNGVFBfTElO SywgIDAgfSwKLSAgICB7ICAidmVyc2lvbiIsICAgU0ZUUF9WRVIsICAgMCB9Ci19Owotc3RhdGlj IGludCBuc2Z0cGt3dGFiID0gKHNpemVvZihzZnRwa3d0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpKTsKLSNlbmRpZiAvKiBTRlRQX0JVSUxUSU4gKi8KLSNlbmRpZiAvKiBBTllTU0ggKi8KLQot I2lmZGVmIE5FVENPTk4KLXN0cnVjdCBrZXl0YWIgbmV0a2V5W10gPSB7CQkvKiBTRVQgTkVUV09S SyB0YWJsZSAqLwotICAgIHsgImRpcmVjdG9yeSIsIFhZTkVUX0QsICAwIH0sCi0gICAgeyAidHlw ZSIsICAgICAgWFlORVRfVCwgIDAgfQotfTsKLWludCBubmV0a2V5ID0gKHNpemVvZihuZXRrZXkp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiBuZXRjbWRbXSA9IHsK LS8qCi0gIFRoZXNlIGFyZSB0aGUgbmV0d29yayB0eXBlcy4KLSovCi0jaWZkZWYgTkVUQ01ECi0g ICAgeyAiY29tbWFuZCIsICAgICAgIE5FVF9DTUQsICBDTV9JTlYgfSwgLyogQ29tbWFuZCAqLwot I2VuZGlmIC8qIE5FVENNRCAqLwotCi0jaWZkZWYgREVDTkVUCQkJCS8qIERFQ25ldCAvIFBBVEhX T1JLUyAqLwotICAgIHsgImRlY25ldCIsICAgICAgICBORVRfREVDLCAgMCB9LAotI2VuZGlmIC8q IERFQ05FVCAqLwotCi0jaWZkZWYgTkVURExMCi0gICAgeyAiZGxsIiwgICAgICAgICAgIE5FVF9E TEwsICBDTV9JTlYgfSwgLyogRExMIHRvIGJlIGxvYWRlZCAqLwotI2VuZGlmIC8qIE5FVERMTCAq LwotCi0jaWZkZWYgTkVURklMRQotICAgIHsgImZpbGUiLCAgICAgICAgICAgTkVUX0ZJTEUsIENN X0lOViB9LCAvKiBGSUxFIChyZWFsIGNydWRlKSAqLwotI2VuZGlmIC8qIE5FVEZJTEUgKi8KLQot I2lmZGVmIE5QSVBFCQkJCS8qIE5hbWVkIFBpcGVzICovCi0gICAgeyAibmFtZWQtcGlwZSIsICAg ICBORVRfUElQRSwgIDAgfSwKLSNlbmRpZiAvKiBOUElQRSAqLwotCi0jaWZkZWYgQ0tfTkVUQklP UwotICAgIHsgIm5ldGJpb3MiLCAgICAgICAgTkVUX0JJT1MsICAwIH0sCS8qIE5FVEJJT1MgKi8K LSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0KLSNpZmRlZiBERUNORVQJCQkJLyogREVDbmV0IC8g UEFUSFdPUktTIChhbGlhcykgKi8KLSAgICB7ICJwYXRod29ya3MiLCAgICAgTkVUX0RFQywgIENN X0lOViB9LAotI2VuZGlmIC8qIERFQ05FVCAqLwotCi0jaWZkZWYgTkVUQ01ECi0gICAgeyAicGlw ZSIsICAgICAgICAgIE5FVF9DTUQsICAwIH0sCS8qIFBpcGUgKi8KLSNlbmRpZiAvKiBORVRDTUQg Ki8KLQotI2lmZGVmIE5FVFBUWQotICAgIHsgInBzZXVkb3Rlcm1pbmFsIixORVRfUFRZLCAwIH0s CS8qIFBzZXVkb3Rlcm1pbmFsICovCi0jZW5kaWYgLyogTkVUUFRZICovCi0KLSNpZmRlZiBORVRQ VFkKLSAgICB7ICJwdHkiLCAgICAgICAgICBORVRfUFRZLCAgQ01fSU5WIH0sIC8qIEludiBzeW4g Zm9yIHBzZXVkb3Rlcm0gKi8KLSNlbmRpZiAvKiBORVRQVFkgKi8KLQotI2lmZGVmIFNTSEJVSUxU SU4KLSAgICB7ICJzc2giLCAgICAgICAgICBORVRfU1NILCAgMCB9LAotI2VuZGlmIC8qIFNTSEJV SUxUSU4gKi8KLQotI2lmZGVmIFNVUEVSTEFUCi0gICAgeyAic3VwZXJsYXQiLCAgICAgTkVUX1NM QVQsIDAgfSwJLyogTWVyaWRpYW4gVGVjaG5vbG9naWVzJyBTdXBlckxBVCAqLwotI2VuZGlmIC8q IFNVUEVSTEFUICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQJCQkvKiBUQ1AvSVAgc29ja2V0cyBsaWJy YXJ5ICovCi0gICAgeyAidGNwL2lwIiwgICAgICAgTkVUX1RDUEIsIDAgfSwKLSNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KLSNpZmRlZiBTVVBFUkxBVAotICAgIHsgInRlczMyIiwgICAgICAgIE5FVF9T TEFULCAwIH0sCS8qIEVtdWx1eCBURVMzMiAqLwotI2VuZGlmIC8qIFNVUEVSTEFUICovCi0jaWZk ZWYgQU5ZWDI1CQkJCS8qIFguMjUgKi8KLSNpZmRlZiBTVU5YMjUKLSAgICB7ICJ4IiwgICAgICAg ICAgICBORVRfU1gyNSwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgInguMjUiLCAgICAgICAgIE5F VF9TWDI1LCAwIH0sCi0gICAgeyAieDI1IiwgICAgICAgICAgTkVUX1NYMjUsIENNX0lOViB9LAot I2Vsc2UKLSNpZmRlZiBTVFJBVFVTWDI1Ci0gICAgeyAieCIsICAgICAgICAgICAgTkVUX1ZYMjUs IENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJ4LjI1IiwgICAgICAgICBORVRfVlgyNSwgMCB9LAot ICAgIHsgIngyNSIsICAgICAgICAgIE5FVF9WWDI1LCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBTVFJB VFVTWDI1ICovCi0jZW5kaWYgLyogU1VOWDI1ICovCi0jaWZkZWYgSUJNWDI1Ci0gICAgeyAieCIs ICAgICAgICAgICAgTkVUX0lYMjUsIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJ4LjI1IiwgICAg ICAgICBORVRfSVgyNSwgQ01fSU5WIH0sCi0gICAgeyAieDI1IiwgICAgICAgICAgTkVUX0lYMjUs IENNX0lOViB9LAotI2VuZGlmIC8qIElCTVgyNSAqLwotI2lmZGVmIEhQWDI1Ci0gICAgeyAieCIs ICAgICAgICAgICAgTkVUX0lYMjUsIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJ4LjI1IiwgICAg ICAgICBORVRfSVgyNSwgMCB9LAotICAgIHsgIngyNSIsICAgICAgICAgIE5FVF9JWDI1LCBDTV9J TlYgfSwKLSNlbmRpZiAvKiBIUFgyNSAqLwotI2VuZGlmIC8qIEFOWVgyNSAqLwotICAgIHsgIiIs IDAsIDAgfQotfTsKLWludCBubmV0cyA9IChzaXplb2YobmV0Y21kKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSk7Ci0KLSNpZm5kZWYgTk9UQ1BPUFRTCi0jaWZkZWYgVENQU09DS0VUCi0KLS8qIFRD UCBvcHRpb25zICovCi0KLXN0cnVjdCBrZXl0YWIgdGNwb3B0W10gPSB7Ci0gICAgeyAiYWRkcmVz cyIsICAgWFlUQ1BfQUREUkVTUywgMCB9LAotI2lmZGVmIENLX0ROU19TUlYKLSAgICB7ICJkbnMt c2VydmljZS1yZWNvcmRzIiwgWFlUQ1BfRE5TX1NSViwgMCB9LAotI2VuZGlmIC8qIENLX0ROU19T UlYgKi8KLSNpZmRlZiBTT19ET05UUk9VVEUKLSAgICB7ICJkb250cm91dGUiLCAgIFhZVENQX0RP TlRST1VURSwgMCB9LAotI2VuZGlmIC8qIFNPX0RPTlRST1VURSAqLwotI2lmbmRlZiBOT0hUVFAK LSAgICB7ICJodHRwLXByb3h5IiwgWFlUQ1BfSFRUUF9QUk9YWSwgMCB9LAotI2VuZGlmIC8qIE5P SFRUUCAqLwotI2lmZGVmIFNPX0tFRVBBTElWRQotICAgIHsgImtlZXBhbGl2ZSIsIFhZVENQX0tF RVBBTElWRSwgMCB9LAotI2VuZGlmIC8qIFNPX0tFRVBBTElWRSAqLwotI2lmZGVmIFNPX0xJTkdF UgotICAgIHsgImxpbmdlciIsIFhZVENQX0xJTkdFUiwgMCB9LAotI2VuZGlmIC8qIFNPX0xJTkdF UiAqLwotI2lmZGVmIFRDUF9OT0RFTEFZCi0gICAgeyAibmFnbGUiLCAgWFlUQ1BfTkFHTEUsICAg IENNX0lOViB9LAotICAgIHsgIm5vZGVsYXkiLCBYWVRDUF9OT0RFTEFZLCAwIH0sCi0jZW5kaWYg LyogVENQX05PREVMQVkgKi8KLSAgICB7ICJyZXZlcnNlLWRucy1sb29rdXAiLCBYWVRDUF9SRE5T LCAwIH0sCi0jaWZkZWYgU09fUkNWQlVGCi0gICAgeyAicmVjdmJ1ZiIsIFhZVENQX1JFQ1ZCVUYs IDAgfSwKLSNlbmRpZiAvKiBTT19SQ1ZCVUYgKi8KLSNpZmRlZiBTT19TTkRCVUYKLSAgICB7ICJz ZW5kYnVmIiwgWFlUQ1BfU0VOREJVRiwgMCB9LAotI2VuZGlmIC8qIFNPX1NOREJVRiAqLwotI2lm ZGVmIE5UCi0jaWZkZWYgQ0tfU09DS1MKLSAgICB7ICJzb2Nrcy1zZXJ2ZXIiLCBYWVRDUF9TT0NL U19TVlIsIDAgfSwKLSNlbmRpZiAvKiBDS19TT0NLUyAqLwotI2VuZGlmIC8qIE5UICovCi0jaWZk ZWYgVk1TCi0jaWZkZWYgREVDX1RDUElQCi0gICAgeyAidWN4LXBvcnQtYnVnIiwgWFlUQ1BfVUNY LCAwIH0sCi0jZW5kaWYgLyogREVDX1RDUElQICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgeyAi IiwwLDAgfQotfTsKLWludCBudGNwb3B0ID0gKHNpemVvZih0Y3BvcHQpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpKTsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBOT1RDUE9QVFMg Ki8KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNpZmRlZiBPUzIKLS8qIEs5NSBNYW51YWwgQ2hh cHRlciBUYWJsZSAtLSBLZWVwIHRoZXNlIHR3byB0YWJsZXMgaW4gc3luYyEgKi8KLQotc3RhdGlj IGNoYXIgKiBsaW5rdGJsW10gPSB7CQkvKiBJbnRlcm5hbCBsaW5rcyBpbiBrOTUuaHRtICovCi0g ICAgIiN0b3AiLAkJCQkvKiAwMCAqLwotICAgICIjd2hhdCIsCQkJCS8qIDAxICovCi0gICAgIiNp bnN0YWxsIiwJCQkJLyogMDIgKi8KLSAgICAiI3N0YXJ0IiwJCQkJLyogMDMgKi8KLSAgICAiI2Rp YWxlciIsCQkJCS8qIDA0ICovCi0gICAgIiNlbnRyaWVzIiwJCQkJLyogMDUgKi8KLSAgICAiI2Nv bW1hbmQiLAkJCQkvKiAwNiAqLwotICAgICIjdGVybWluYWwiLAkJCS8qIDA3ICovCi0gICAgIiN0 cmFuc2ZlciIsCQkJLyogMDggKi8KLSAgICAiI2hvc3Rtb2RlIgkJCQkvKiAwOSAqLwotfTsKLQot c3RhdGljIHN0cnVjdCBrZXl0YWIgY2hhcHRibFtdID0gewotICAgIHsgIkNvbW1hbmQtU2NyZWVu IiwgICAgIDYsIDAgfSwKLSAgICB7ICJDb250ZW50cyIsICAgICAgICAgICAwLCAwIH0sCi0gICAg eyAiRGlhbGVyLUVudHJpZXMiLCAgICAgNSwgMCB9LAotICAgIHsgIkZpbGUtVHJhbnNmZXIiLCAg ICAgIDgsIDAgfSwKLSAgICB7ICJHZXR0aW5nLVN0YXJ0ZWQiLCAgICAzLCAwIH0sCi0gICAgeyAi SG9zdC1Nb2RlIiwgICAgICAgICAgOSwgMCB9LAotICAgIHsgIkluc3RhbGxhdGlvbiIsICAgICAg IDIsIDAgfSwKLSAgICB7ICJUZXJtaW5hbC1FbXVsYXRpb24iLCA3LCAwIH0sCi0gICAgeyAiVXNp bmctVGhlLURpYWxlciIsICAgNCwgMCB9LAotICAgIHsgIldoYXQtSXMtSzk1IiwgICAgICAgIDEs IDAgfSwKLSAgICB7ICIiLCAgICAgICAgICAgICAgICAgICAwLCAwIH0KLX07Ci1zdGF0aWMgaW50 IG5jaGFwdGJsID0gKHNpemVvZihjaGFwdGJsKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDEp OwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIE5PWEZFUgotLyogUmVtb3RlIENvbW1hbmQg VGFibGUgKi8KLQotc3RydWN0IGtleXRhYiByZW1jbWRbXSA9IHsKLSNpZm5kZWYgTk9TUEwKLSAg ICB7ICJhcyIsICAgICAgICBYWkFTRywgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgImFzZyIsICAg ICAgIFhaQVNHLCBDTV9JTlYgfSwKLSAgICB7ICJhc3NpZ24iLCAgICBYWkFTRywgMCB9LAotI2Vu ZGlmIC8qIE5PU1BMICovCi0gICAgeyAiY2QiLCAgICAgICAgWFpDV0QsIDAgfSwKLSAgICB7ICJj ZHVwIiwgICAgICBYWkNEVSwgQ01fSU5WIH0sCi0gICAgeyAiY29weSIsICAgICAgWFpDUFksIDAg fSwKLSAgICB7ICJjd2QiLCAgICAgICBYWkNXRCwgQ01fSU5WIH0sCi0gICAgeyAiZGVsZXRlIiwg ICAgWFpERUwsIDAgfSwKLSAgICB7ICJkaXJlY3RvcnkiLCBYWkRJUiwgMCB9LAotICAgIHsgImUi LCAgICAgICAgIFhaWElULCBDTV9BQlJ8Q01fSU5WIH0sCi0gICAgeyAiZXJhc2UiLCAgICAgWFpE RUwsIENNX0lOViB9LAotICAgIHsgImV4aXQiLCAgICAgIFhaWElULCAwIH0sCi0gICAgeyAiaGVs cCIsICAgICAgWFpITFAsIDAgfSwKLSNpZm5kZWYgTk9QVVNICi0gICAgeyAiaG9zdCIsICAgICAg WFpIT1MsIDAgfSwKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNpZm5kZWYgTk9GUklMTFMKLSAgICB7 ICJrZXJtaXQiLCAgICBYWktFUiwgMCB9LAotICAgIHsgImwiLCAgICAgICAgIFhaTEdJLCBDTV9B QlJ8Q01fSU5WIH0sCi0gICAgeyAibG8iLCAgICAgICAgWFpMR0ksIENNX0FCUnxDTV9JTlYgfSwK LSAgICB7ICJsb2ciLCAgICAgICBYWkxHSSwgQ01fQUJSfENNX0lOViB9LAotICAgIHsgImxvZ2lu IiwgICAgIFhaTEdJLCAwIH0sCi0gICAgeyAibG9nb3V0IiwgICAgWFpMR08sIDAgfSwKLSAgICB7 ICJtZXNzYWdlIiwgICBYWk1TRywgMCB9LAotICAgIHsgIm1rZGlyIiwgICAgIFhaTUtELCAwIH0s Ci0gICAgeyAicHJpbnQiLCAgICAgWFpQUkksIDAgfSwKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwot ICAgIHsgInB3ZCIsICAgICAgIFhaUFdELCAwIH0sCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAicXVl cnkiLAkgICBYWlFVRSwgMCB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgeyAicmVuYW1lIiwg ICAgWFpSRU4sIDAgfSwKLSAgICB7ICJybWRpciIsICAgICBYWlJNRCwgMCB9LAotICAgIHsgInNl dCIsICAgICAgIFhaU0VULCAwIH0sCi0gICAgeyAic3BhY2UiLAkgICBYWlNQQSwgMCB9LAotI2lm bmRlZiBOT0ZSSUxMUwotICAgIHsgInR5cGUiLCAgICAgIFhaVFlQLCAwIH0sCi0gICAgeyAid2hv IiwgICAgICAgWFpXSE8sIDAgfSwKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotICAgIHsgIiIsIDAs IDB9Ci19OwotaW50IG5ybXQgPSAoc2l6ZW9mKHJlbWNtZCkgLyBzaXplb2Yoc3RydWN0IGtleXRh YikpIC0gMTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotc3RydWN0IGtleXRhYiBsb2d0YWJbXSA9 IHsKLSNpZmRlZiBDS0xPR0RJQUwKLSAgICB7ICJjb25uZWN0aW9ucyIsICBMT0dNLCBDTV9JTlYg fSwKLSAgICB7ICJjeCIsICAgICAgICAgICBMT0dNLCAwIH0sCi0jZW5kaWYgLyogQ0tMT0dESUFM ICovCi0jaWZkZWYgREVCVUcKLSAgICB7ICJkZWJ1Z2dpbmciLCAgICBMT0dELCAwIH0sCi0jZW5k aWYgLyogREVCVUcgKi8KLSAgICB7ICJwYWNrZXRzIiwgICAgICBMT0dQLCAwIH0sCi0jaWZuZGVm IE5PTE9DQUwKLSAgICB7ICJzZXNzaW9uIiwgICAgICBMT0dTLCAwIH0sCi0jZW5kaWYgLyogTk9M T0NBTCAqLwotI2lmZGVmIFRMT0cKLSAgICB7ICJ0cmFuc2FjdGlvbnMiLCBMT0dULCAwIH0sCi0j ZW5kaWYgLyogVExPRyAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsKLWludCBubG9nID0gKHNpemVv Zihsb2d0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0cnVjdCBrZXl0YWIg d3JpdGFiW10gPSB7Ci0jaWZuZGVmIE5PU1BMCi0gICAgeyAiYXBwZW5kLWZpbGUiLCAgICAgTE9H VywgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB7ICJkZWJ1Zy1sb2ciLCAgICAg ICBMT0dELCAwIH0sCi0gICAgeyAiZXJyb3IiLCAgICAgICAgICAgTE9HRSwgMCB9LAotI2lmbmRl ZiBOT1NQTAotICAgIHsgImZpbGUiLCAgICAgICAgICAgIExPR1csIDAgfSwKLSNlbmRpZiAvKiBO T1NQTCAqLwotICAgIHsgInBhY2tldC1sb2ciLCAgICAgIExPR1AsIDAgfSwKLSAgICB7ICJzY3Jl ZW4iLCAgICAgICAgICBMT0dYLCAwIH0sCi0jaWZuZGVmIE5PTE9DQUwKLSAgICB7ICJzZXNzaW9u LWxvZyIsICAgICBMT0dTLCAwIH0sCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIHsgInN5cyRv dXRwdXQiLCAgICAgIExPR1gsIENNX0lOViB9LAotICAgIHsgInQiLCAgICAgICAgICAgICAgIExP R1QsIENNX0FCUnxDTV9JTlYgfSwgLyogQmVjYXVzZSBvZiBhIHR5cG8gaW4gKi8KLSAgICB7ICJ0 ciIsICAgICAgICAgICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sIC8qIHRoZSBib29rLi4uICov Ci0gICAgeyAidHJhIiwgICAgICAgICAgICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LAotICAgIHsg InRyYW4iLCAgICAgICAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKLSAgICB7ICJ0cmFucyIs ICAgICAgICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sCi0gICAgeyAidHJhbnNhIiwgICAgICAg ICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LAotICAgIHsgInRyYW5zYWMiLCAgICAgICAgIExPR1Qs IENNX0FCUnxDTV9JTlYgfSwKLSAgICB7ICJ0cmFuc2FjdCIsICAgICAgICBMT0dULCBDTV9BQlJ8 Q01fSU5WIH0sCi0gICAgeyAidHJhbnNhY3RpIiwgICAgICAgTE9HVCwgQ01fQUJSfENNX0lOViB9 LAotICAgIHsgInRyYW5zYWN0aW8iLCAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKLSAgICB7 ICJ0cmFuc2FjdGlvbiIsICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sCi0gICAgeyAidHJhbnNh Y3Rpb24tbG9nIiwgTE9HVCwgMCB9LAotICAgIHsgInRyYW5zYWN0aW9ucyIsICAgIExPR1QsIENN X0lOViB9Ci19OwotaW50IG53cmkgPSAoc2l6ZW9mKHdyaXRhYikgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBjbHJ0YWJbXSA9IHsJLyogS2V5d29yZHMg Zm9yIENMRUFSIGNvbW1hbmQgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJhbGFybSIsICAgICAg ICAgICAgQ0xSX0FMUiwgICAgICAgICAwIH0sCi0jaWZkZWYgQ0tfQVBDCi0gICAgeyAiYXBjIiwg ICAgICAgICAgICAgIENMUl9BUEMsICAgICAgICAgMCB9LAotI2VuZGlmIC8qIENLX0FQQyAqLwot I2lmZGVmIFBBVFRFUk5TCi0gICAgeyAiYmluYXJ5LXBhdHRlcm5zIiwgIENMUl9CSU4sICAgICAg ICAgMCB9LAotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0gICAgeyAiYm90aCIsICAgICAgICAgICAg IENMUl9ERVZ8Q0xSX0lOUCwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZmRlZiBP UzIKLSAgICB7ICJjb21tYW5kLXNjcmVlbiIsICAgQ0xSX0NNRCwgICAgICAgICAwIH0sCi0jZW5k aWYgLyogT1MyICovCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiZGV2aWNlIiwgICAgICAgICAgIENM Ul9ERVYsICAgICAgICAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgImRldmljZS1hbmQtaW5wdXQi LCBDTFJfREVWfENMUl9JTlAsIDAgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHsgImRldmlj ZS1idWZmZXIiLCAgICBDTFJfREVWLCAgICAgICAgIDAgfSwKLSNpZm5kZWYgTk9ESUFMCi0gICAg eyAiZGlhbC1zdGF0dXMiLCAgICAgIENMUl9ESUEsCSAwIH0sCi0jZW5kaWYgLyogTk9ESUFMICov Ci0jaWZuZGVmIE5PU1BMCi0gICAgeyAiaW5wdXQtYnVmZmVyIiwgICAgIENMUl9JTlAsICAgICAg ICAgMCB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgeyAia2V5Ym9hcmQtYnVmZmVyIiwgIENM Ul9LQkQsICAgICAgICAgMCB9LAotICAgIHsgInNlbmQtbGlzdCIsICAgICAgICBDTFJfU0ZMLCAg ICAgICAgIDAgfSwKLSNpZmRlZiBPUzIKLSAgICB7ICJzY3IiLCAgICAgICAgICAgICAgQ0xSX1ND TCwgICAgICAgICBDTV9JTlZ8Q01fQUJSIH0sCi0jZW5kaWYgLyogT1MyICovCi0gICAgeyAic2Ny ZWVuIiwgICAgICAgICAgIENMUl9TQ1IsICAgICAgICAgMCB9LAotI2lmZGVmIE9TMgotICAgIHsg InNjcm9sbGJhY2siLCAgICAgICBDTFJfU0NMLCAgICAgICAgIENNX0lOViB9LAotICAgIHsgInRl cm1pbmFsLXNjcmVlbiIsICBDTFJfVFJNLCAgICAgICAgIDAgfSwKLSNlbmRpZiAvKiBPUzIgKi8K LSNpZmRlZiBQQVRURVJOUwotICAgIHsgInRleHQtcGF0dGVybnMiLCAgICBDTFJfVFhULCAgICAg ICAgIDAgfSwKLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsKLWlu dCBuY2xlYXIgPSAoc2l6ZW9mKGNscnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsK LQotc3RydWN0IGtleXRhYiBjbHN0YWJbXSA9IHsJCS8qIEtleXdvcmRzIGZvciBDTE9TRSBjb21t YW5kICovCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiIXJlYWQiLCAgICAgICAgICAgTE9HUiwgQ01f SU5WIH0sCi0gICAgeyAiIXdyaXRlIiwgICAgICAgICAgTE9HVywgQ01fSU5WIH0sCi0jaWZuZGVm IE5PUFVTSAotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVm IE5PU1BMCi0gICAgeyAiYXBwZW5kLWZpbGUiLCAgICAgTE9HVywgQ01fSU5WIH0sCi0jZW5kaWYg LyogTk9TUEwgKi8KLSNpZm5kZWYgTk9MT0NBTAotICAgIHsgImNvbm5lY3Rpb24iLCAgICAgIDk5 OTksIDAgfSwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgQ0tMT0dESUFMCi0gICAgeyAi Y3gtbG9nIiwgICAgICAgICAgTE9HTSwgMCB9LAotI2VuZGlmIC8qIENLTE9HRElBTCAqLwotI2lm ZGVmIERFQlVHCi0gICAgeyAiZGVidWctbG9nIiwgICAgICAgTE9HRCwgMCB9LAotI2VuZGlmIC8q IERFQlVHICovCi0gICAgeyAiaG9zdCIsICAgICAgICAgICAgOTk5OSwgQ01fSU5WIH0sIC8qIFN5 bm9ueW0gZm9yIENMT1NFIENPTk5FQ1RJT04gKi8KLSAgICB7ICJsaW5lIiwgICAgICAgICAgICA5 OTk5LCBDTV9JTlYgfSwgLyogU3lub255bSBmb3IgQ0xPU0UgQ09OTkVDVElPTiAqLwotICAgIHsg InAiLCAgICAgICAgICAgICAgIExPR1AsIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJwYWNrZXQt bG9nIiwgICAgICBMT0dQLCAwIH0sCi0gICAgeyAicG9ydCIsICAgICAgICAgICAgOTk5OSwgQ01f SU5WIH0sIC8qIFN5bm9ueW0gZm9yIENMT1NFIENPTk5FQ1RJT04gKi8KLSNpZm5kZWYgTk9TUEwK LSAgICB7ICJyZWFkLWZpbGUiLCAgICAgICBMT0dSLCAwIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8K LSNpZm5kZWYgTk9MT0NBTAotICAgIHsgInNlc3Npb24tbG9nIiwgICAgIExPR1MsIDAgfSwKLSNl bmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgVExPRwotICAgIHsgInQiLCAgICAgICAgICAgICAg IExPR1QsIENNX0FCUnxDTV9JTlYgfSwgLyogQmVjYXVzZSBvZiBhIHR5cG8gaW4gKi8KLSAgICB7 ICJ0ciIsICAgICAgICAgICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sIC8qIHRoZSBib29rLi4u ICovCi0gICAgeyAidHJhIiwgICAgICAgICAgICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LAotICAg IHsgInRyYW4iLCAgICAgICAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKLSAgICB7ICJ0cmFu cyIsICAgICAgICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sCi0gICAgeyAidHJhbnNhIiwgICAg ICAgICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LAotICAgIHsgInRyYW5zYWMiLCAgICAgICAgIExP R1QsIENNX0FCUnxDTV9JTlYgfSwKLSAgICB7ICJ0cmFuc2FjdCIsICAgICAgICBMT0dULCBDTV9B QlJ8Q01fSU5WIH0sCi0gICAgeyAidHJhbnNhY3RpIiwgICAgICAgTE9HVCwgQ01fQUJSfENNX0lO ViB9LAotICAgIHsgInRyYW5zYWN0aW8iLCAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKLSAg ICB7ICJ0cmFuc2FjdGlvbiIsICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sCi0gICAgeyAidHJh bnNhY3Rpb24tbG9nIiwgTE9HVCwgMCB9LAotICAgIHsgInRyYW5zYWN0aW9ucyIsICAgIExPR1Qs IENNX0lOViB9LAotI2VuZGlmIC8qIFRMT0cgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJ3cml0 ZS1maWxlIiwgICAgICBMT0dXLCAwIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB7ICIiLCAw LCAwIH0KLX07Ci1pbnQgbmNscyA9IChzaXplb2YoY2xzdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKSkgLSAxOwotCi0vKiBTSE9XIGNvbW1hbmQgYXJndW1lbnRzICovCi0KLSNpZm5kZWYgTk9T SE9XCi1zdHJ1Y3Qga2V5dGFiIHNob3RhYltdID0gewotI2lmbmRlZiBOT1NQTAotICAgIHsgImFs YXJtIiwgICAgICAgIFNIQUxSTSwgMCB9LAotICAgIHsgImFyZyIsICAgICAgICAgIFNIQVJHLCBD TV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiYXJndW1lbnRzIiwgICAgU0hBUkcsIDAgfSwKLSAgICB7 ICJhcmdzIiwgICAgICAgICBTSEFSRywgQ01fSU5WIH0sCi0gICAgeyAiYXJyYXlzIiwgICAgICAg U0hBUlIsIDAgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICB7 ICJhc3NvY2lhdGlvbnMiLCBTSEFTU09DLCAwIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0j aWZuZGVmIE5PWEZFUgotICAgIHsgImF0dHJpYnV0ZXMiLCAgIFNIQVRULCAwIH0sCi0jZW5kaWYg LyogTk9YRkVSICovCi0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgIHsgImF1dGhlbnRp Y2F0aW9uIiwgU0hPQVVUSCwgQ01fSU5WIH0sCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04g Ki8KLQotI2lmbmRlZiBOT1BVU0gKLSNpZmRlZiBCUk9XU0VSCi0gICAgeyAiYnJvd3NlciIsICAg ICAgU0hCUk9XU0UsIENNX1BTSHxDTV9MT0MgfSwKLSNlbmRpZiAvKiAgQlJPV1NFUiAqLwotI2Vu ZGlmIC8qIE5PUFVTSCAqLwotICAgIHsgImNkIiwgICAgICAgICAgIFNIQ0QsIDAgfSwKLSAgICB7 ICJjaGFyYWN0ZXItc2V0cyIsIFNIQ1NFLCAwIH0sCi0gICAgeyAiY21kIiwgICAgICAgICAgU0hD TUQsIENNX0lOViB9LAotI2lmbmRlZiBOT0xPQ0FMCi0gICAgeyAiY29tIiwgICAgICAgICAgU0hD T00sIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJjb21tIiwgICAgICAgICBTSENPTSwgQ01fSU5W fENNX0FCUiB9LAotICAgIHsgImNvbW11bmljYXRpb25zIiwgU0hDT00sIDAgfSwKLSNlbmRpZiAv KiBOT0xPQ0FMICovCi0gICAgeyAiY29tbWFuZCIsICAgICAgU0hDTUQsIDAgfSwKLSAgICB7ICJj b25uZWN0aW9uIiwgICBTSENPTk5YLCAwIH0sCi0jaWZkZWYgQ0tfU1BFRUQKLSAgICB7ICJjb250 cm9sLXByZWZpeGluZyIsIFNIQ1RMLCAwIH0sCi0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLSNpZmRl ZiBDS0xPR0RJQUwKLSAgICB7ICJjeCIsICAgICAgICAgICBTSENPTk5YLCBDTV9JTlYgfSwKLSNl bmRpZiAvKiBDS0xPR0RJQUwgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJjb3VudCIsICAgICAg ICBTSENPVSwgMCB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgeyAiZCIsICAgICAgICAgICAg U0hESUEsIENNX0lOVnxDTV9BQlIgfSwKLSNpZmRlZiBWTVMKLSAgICB7ICJkZWZhdWx0IiwgICAg ICBTSERGTFQsIDAgfSwKLSNlbHNlCi0gICAgeyAiZGVmYXVsdCIsICAgICAgU0hERkxULCBDTV9J TlYgfSwKLSNlbmRpZiAvKiBWTVMgKi8KLSNpZm5kZWYgTk9ESUFMCi0gICAgeyAiZGlhbCIsICAg ICAgICAgU0hESUEsIENNX0xPQyB9LAotI2VuZGlmIC8qIE5PRElBTCAqLwotICAgIHsgImRvdWJs ZS9pZ25vcmUiLFNIREJMLCAwIH0sCi0jaWZuZGVmIE5PUFVTSAotI2lmbmRlZiBOT0ZSSUxMUwot ICAgIHsgImVkaXRvciIsICAgICAgIFNIRURJVCwgQ01fUFNIIH0sCi0jZW5kaWYgLyogIE5PRlJJ TExTICovCi0jZW5kaWYgLyogTk9QVVNIICovCi0jaWZuZGVmIE5PTE9DQUwKLSAgICB7ICJlc2Nh cGUiLCAgICAgICBTSEVTQywgQ01fTE9DIH0sCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIHsg ImV4aXQiLCAgICAgICAgIFNIRVhJLCAwIH0sCi0gICAgeyAiZXh0ZW5kZWQtb3B0aW9ucyIsIFNI WE9QVCwgQ01fSU5WIH0sCi0gICAgeyAiZmVhdHVyZXMiLCAgICAgU0hGRUEsIDAgfSwKLSAgICB7 ICJmaWxlIiwgICAgICAgICBTSEZJTCwgMCB9LAotI2lmbmRlZiBOT0xPQ0FMCi0gICAgeyAiZmxv dy1jb250cm9sIiwgU0hPRkxPLCAwIH0sCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmZGVmIEJS T1dTRVIKLSAgICB7ICJmdHAiLCAgICAgICAgICBTSE9GVFAsIENNX1BTSHxDTV9MT0MgfSwKLSNl bHNlCi0jaWZuZGVmIE5PRlRQCi0jaWZuZGVmIFNZU0ZUUAotI2lmZGVmIFRDUFNPQ0tFVAotICAg IHsgImZ0cCIsICAgICAgICAgIFNIT0ZUUCwgMCB9LAkvKiAoYnVpbHQtaW4gZnRwKSAqLwotI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIFNZU0ZUUCAqLwotI2VuZGlmIC8qIE5PRlRQ ICovCi0jZW5kaWYgLyogQlJPV1NFUiAqLwotI2lmbmRlZiBOT1NQTAotICAgIHsgImZ1bmN0aW9u cyIsICAgIFNIRlVOLCAwIH0sCi0gICAgeyAiZ2xvYmFscyIsICAgICAgU0hWQVIsIDAgfSwKLSNl bmRpZiAvKiBOT1NQTCAqLwotI2lmZGVmIEtVSQotICAgIHsgImd1aSIsICAgICAgICAgIFNIT0dV SSwgMCB9LAotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENLX1JFQ0FMTAotICAgIHsgImhpc3Rv cnkiLCAgICAgIFNISElTVE9SWSwgMCB9LAotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotICAgIHsg Imlnbm9yZS9kb3VibGUiLFNIREJMLCBDTV9JTlYgfSwKLSAgICB7ICJpa3NkIiwgICAgICAgICBT SE9JS1MsIENNX0lOViB9LAotI2lmbmRlZiBOT1NQTAotICAgIHsgImlucHV0IiwgICAgICAgIFNI SU5QLCAwIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9TRVRLRVkKLSAgICB7ICJr IiwgICAgICAgICAgICBTSEtFWSwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgImtleSIsICAgICAg ICAgIFNIS0VZLCAwIH0sCi0jaWZuZGVmIE5PS1ZFUkJTCi0gICAgeyAia3ZlcmJzIiwgICAgICAg U0hLVkIsIDAgfSwKLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotI2VuZGlmIC8qIE5PU0VUS0VZICov Ci0jaWZkZWYgQ0tfTEFCRUxFRAotICAgIHsgImxhYmVsZWQtZmlsZS1pbmZvIiwgU0hMQkwsIDAg fSwKLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICB7ICJsYW5n dWFnZXMiLCAgICBTSExORywgMCB9LAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICB7ICJsb2dz IiwgICAgICAgICBTSExPRywgMCB9LAotI2lmbmRlZiBOT1NQTAotICAgIHsgIm1hY3JvcyIsICAg ICAgIFNITUFDLCAwIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9ESUFMCi0gICAg eyAibW9kZW0iLCAgICAgICAgU0hNT0QsIENNX0xPQyB9LAotI2Vsc2UKLSAgICB7ICJtb2RlbS1z aWduYWxzIixTSENPTSwgQ01fSU5WfENNX0xPQyB9LAotI2VuZGlmIC8qIE5PRElBTCAqLwotI2lm bmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyTU9VU0UKLSAgICB7ICJtb3VzZSIsICAgICAgICBTSE1P VSwgQ01fTE9DIH0sCi0jZW5kaWYgLyogT1MyTU9VU0UgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICov Ci0jaWZkZWYgTkVUQ09OTgotICAgIHsgIm5ldHdvcmsiLCAgICAgIFNITkVULCBDTV9MT0MgfSwK LSNlbHNlCi0gICAgeyAibmV0d29yayIsICAgICAgU0hORVQsIENNX0lOVnxDTV9MT0MgfSwKLSNl bmRpZiAvKiBORVRDT05OICovCi0gICAgeyAib3B0aW9ucyIsICAgICAgU0hPUFRTLCAwIH0sCi0j aWZuZGVmIE5PU1BMCi0gICAgeyAib3V0cHV0IiwgICAgICAgU0hPVVRQLCBDTV9JTlYgfSwKLSNl bmRpZiAvKiBOT1NQTCAqLwotI2lmZGVmIEFOWVgyNQotI2lmbmRlZiBJQk1YMjUKLSAgICB7ICJw YWQiLCAgICAgICAgICBTSFBBRCwgIENNX0xPQyB9LAotI2VuZGlmIC8qIElCTVgyNSAqLwotI2Vu ZGlmIC8qIEFOWVgyNSAqLwotICAgIHsgInBhcmFtZXRlcnMiLCAgIFNIUEFSLCAgQ01fSU5WIH0s Ci0jaWZkZWYgUEFUVEVSTlMKLSAgICB7ICJwYXR0ZXJucyIsICAgICBTSE9QQVQsIDAgfSwKLSNl bmRpZiAvKiBQQVRURVJOUyAqLwotICAgIHsgInByaW50ZXIiLCAgICAgIFNIUFJULCAgMCB9LAot I2lmZGVmIENLX1NQRUVECi0gICAgeyAicHJlZml4aW5nIiwgICAgU0hDVEwsICBDTV9JTlYgfSwK LSNlbmRpZiAvKiBDS19TUEVFRCAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJwcm90b2NvbCIs ICAgICBTSFBSTywgIDAgfSwKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICB7ICJyZW5hbWUiLCAg ICAgICBTSE9SRU4sIDAgfSwKLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJzY3JpcHRzIiwgICAgICBT SFNDUiwgIENNX0xPQyB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgeyAic2VuZC1saXN0Iiwg ICAgU0hTRkwsICAwIH0sCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgeyAic2VydmVyIiwgICAgICAg U0hTRVIsICAwIH0sCi0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSNpZm5kZWYgTk9TRVhQCi0gICAg eyAic2V4cHJlc3Npb24iLCAgU0hTRVhQLCAwIH0sCi0jZW5kaWYgLyogTk9TRVhQICovCi0jaWZk ZWYgQU5ZU1NICi0gICAgeyAic3NoIiwgICAgICAgICAgU0hPU1NILCAwIH0sCi0jZW5kaWYgLyog QU5ZU1NIICovCi0gICAgeyAic3RhY2siLCAgICAgICAgU0hTVEssICAwIH0sCi0gICAgeyAic3Rh dHVzIiwgICAgICAgU0hTVEEsICAwIH0sCi0jaWZkZWYgU1RSRUFNSU5HCi0gICAgeyAic3RyZWFt aW5nIiwgICAgU0hPU1RSLCAwIH0sCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0jaWZuZGVmIE5P TE9DQUwKLSNpZmRlZiBPUzIKLSAgICB7ICJ0YWJzIiwgICAgICAgICAgU0hUQUIsIENNX0lOVnxD TV9MT0MgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBDS19UQVBJCi0gICAgeyAidGFwaSIs ICAgICAgICAgIFNIVEFQSSwgQ01fTE9DIH0sCi0gICAgeyAidGFwaS1jb21tIiwgICAgIFNIVEFQ SV9DLCBDTV9JTlZ8Q01fTE9DIH0sCi0gICAgeyAidGFwaS1sb2NhdGlvbiIsIFNIVEFQSV9MLCBD TV9JTlZ8Q01fTE9DIH0sCi0gICAgeyAidGFwaS1tb2RlbSIsICAgIFNIVEFQSV9NLCBDTV9JTlZ8 Q01fTE9DIH0sCi0jZW5kaWYgLyogQ0tfVEFQSSAqLwotICAgIHsgInRjcCIsICAgICAgICAgICBT SFRDUCwgIENNX0xPQyB9LAotI2lmZGVmIFROQ09ERQotICAgIHsgInRlbCIsICAgICAgICAgICBT SFRFTCwgIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJ0ZWxuZXQiLCAgICAgICAgU0hURUwsICAw IH0sCi0gICAgeyAidGVsb3B0IiwgICAgICAgIFNIVE9QVCwgMCB9LAotI2VuZGlmIC8qIFROQ09E RSAqLwotICAgIHsgInRlcm1pbmFsIiwgICAgICBTSFRFUiwgIENNX0xPQyB9LAotI2VuZGlmIC8q IE5PTE9DQUwgKi8KLSNpZm5kZWYgTk9YTUlUCi0gICAgeyAidHIiLCAgICAgICAgICAgIFNIWE1J LCBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAidHJhIiwgICAgICAgICAgIFNIWE1JLCBDTV9JTlZ8 Q01fQUJSIH0sCi0gICAgeyAidHJhbiIsICAgICAgICAgIFNIWE1JLCBDTV9JTlZ8Q01fQUJSIH0s Ci0gICAgeyAidHJhbnMiLCAgICAgICAgIFNIWE1JLCBDTV9JTlZ8Q01fQUJSIH0sCi0jZW5kaWYg LyogTk9YTUlUICovCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgInRyYW5zZmVyIiwgICAgICBTSE9Y RkVSLCAwIH0sCi0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZuZGVmIE5PWE1JVAotICAgIHsgInRy YW5zbWl0IiwgICAgICBTSFhNSSwgMCB9LAotI2VuZGlmIC8qIE5PWE1JVCAqLwotI2lmZGVmIENL X1RSSUdHRVIKLSAgICB7ICJ0cmlnZ2VyIiwgICAgICAgU0hUUklHLCBDTV9MT0MgfSwKLSNlbmRp ZiAvKiBDS19UUklHR0VSICovCi0jaWZuZGVmIE5PU0VUS0VZCi0jaWZuZGVmIE5PS1ZFUkJTCi0j aWZkZWYgT1MyCi0gICAgeyAidWRrIiwgICAgICAgICAgIFNIVURLLCBDTV9MT0MgfSwKLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotI2VuZGlmIC8qIE5PU0VUS0VZICov Ci0jaWZuZGVmIE5PU1BMCi0gICAgeyAidmFyaWFibGVzIiwgICAgIFNIQlVJLCAwIH0sCi0jZW5k aWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9GUklMTFMKLSAgICB7ICJ2ZXJzaW9ucyIsICAgICAg U0hWRVIsIDAgfSwKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2lmZGVmIE9TMgotICAgIHsgInZz Y3JuIiwgICAgICAgICBTSFZTQ1JOLCBDTV9JTlZ8Q01fTE9DIH0sCi0jZW5kaWYgLyogT1MyICov Ci0gICAgeyAieGZlciIsICAgICAgICAgIFNIT1hGRVIsICBDTV9JTlYgfSwKLSNpZm5kZWYgTk9Y TUlUCi0gICAgeyAieG1pdCIsICAgICAgICAgIFNIWE1JLCAgICBDTV9JTlYgfSwKLSNlbmRpZiAv KiBOT1hNSVQgKi8KLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1pbnQgbnNobyA9IChzaXplb2Yoc2hv dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotI2VuZGlmIC8qIE5PU0hPVyAqLwot Ci0jaWZkZWYgQU5ZWDI1Ci0jaWZuZGVmIElCTVgyNQotc3RydWN0IGtleXRhYiBwYWR0YWJbXSA9 IHsgICAgICAgICAgICAgIC8qIFBBRCBjb21tYW5kcyAqLwotICAgIHsgImNsZWFyIiwgICAgICBY WVBBREwsIDAgfSwKLSAgICB7ICJpbnRlcnJ1cHQiLCAgWFlQQURJLCAwIH0sCi0gICAgeyAicmVz ZXQiLCAgICAgIFhZUEFEUiwgMCB9LAotICAgIHsgInN0YXR1cyIsICAgICBYWVBBRFMsIDAgfQot fTsKLWludCBucGFkYyA9IChzaXplb2YocGFkdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7 Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0jZW5kaWYgLyogQU5ZWDI1ICovCi0KLSNpZm5kZWYgTk9T RVJWRVIKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGttc3RhYltdID0gewotICAgIHsgImJvdGgiLCAg ICAzLCAwIH0sCi0gICAgeyAibG9jYWwiLCAgIDEsIDAgfSwKLSAgICB7ICJyZW1vdGUiLCAgMiwg MCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBlbmF0YWJbXSA9IHsJLyogRU5BQkxFIGNv bW1hbmRzICovCi0gICAgeyAiYWxsIiwgICAgICAgIEVOX0FMTCwgIDAgfSwKLSNpZm5kZWYgTk9T UEwKLSAgICB7ICJhcyIsICAgICAgICAgRU5fQVNHLCAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsg ImFzZyIsICAgICAgICBFTl9BU0csICBDTV9JTlYgfSwKLSAgICB7ICJhc3NpZ24iLCAgICAgRU5f QVNHLCAgMCB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIGRhdGFnZW5lcmFsCi0gICAg eyAiYnllIiwgICAgICAgIEVOX0JZRSwgIDAgfSwKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwot ICAgIHsgImNkIiwgICAgICAgICBFTl9DV0QsICAwIH0sCi0jaWZkZWYgWkNPUFkKLSAgICB7ICJj b3B5IiwgICAgICAgRU5fQ1BZLCAgMCB9LAotI2VuZGlmIC8qIFpDT1BZICovCi0gICAgeyAiY3dk IiwgICAgICAgIEVOX0NXRCwgIENNX0lOViB9LAotICAgIHsgImRlbGV0ZSIsICAgICBFTl9ERUws ICAwIH0sCi0gICAgeyAiZGlyZWN0b3J5IiwgIEVOX0RJUiwgIDAgfSwKLSAgICB7ICJlbmFibGUi LCAgICAgRU5fRU5BLCAgQ01fSU5WIH0sCi0gICAgeyAiZXhpdCIsICAgICAgIEVOX1hJVCwgIDAg fSwKLSAgICB7ICJmaW5pc2giLCAgICAgRU5fRklOLCAgMCB9LAotICAgIHsgImdldCIsICAgICAg ICBFTl9HRVQsICAwIH0sCi0gICAgeyAiaG9zdCIsICAgICAgIEVOX0hPUywgIDAgfSwKLSAgICB7 ICJtYWlsIiwgICAgICAgRU5fTUFJLCAgMCB9LAotICAgIHsgIm1rZGlyIiwgICAgICBFTl9NS0Qs ICAwIH0sCi0gICAgeyAicHJpbnQiLCAgICAgIEVOX1BSSSwgIDAgfSwKLSNpZm5kZWYgTk9TUEwK LSAgICB7ICJxdWVyeSIsICAgICAgRU5fUVVFLCAgMCB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0g ICAgeyAicmVuYW1lIiwgICAgIEVOX1JFTiwgIDAgfSwKLSAgICB7ICJyZXRyaWV2ZSIsICAgRU5f UkVULCAgQ01fSU5WIH0sCi0gICAgeyAicm1kaXIiLCAgICAgIEVOX1JNRCwgIDAgfSwKLSAgICB7 ICJzZW5kIiwgICAgICAgRU5fU0VOLCAgMCB9LAotICAgIHsgInNldCIsICAgICAgICBFTl9TRVQs ICAwIH0sCi0gICAgeyAic3BhY2UiLCAgICAgIEVOX1NQQSwgIDAgfSwKLSAgICB7ICJ0eXBlIiwg ICAgICAgRU5fVFlQLCAgMCB9LAotICAgIHsgIndobyIsICAgICAgICBFTl9XSE8sICAwIH0KLX07 Ci1zdGF0aWMgaW50IG5lbmEgPSAoc2l6ZW9mKGVuYXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRh YikpOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0KLXN0cnVjdCBrZXl0YWIgdHh0YmluW10gPSB7 Ci0gICAgeyAiYWxsIiwgICAgICAgIDIsIDAgfSwKLSAgICB7ICJiaW5hcnkiLCAgICAgMSwgMCB9 LAotICAgIHsgInRleHQiLCAgICAgICAwLCAwIH0KLX07Ci0KLSNpZm5kZWYgTk9YRkVSCi1zdGF0 aWMgc3RydWN0IGtleXRhYiBzbmR0YWJbXSA9IHsJLyogU0VORCBjb21tYW5kIG9wdGlvbnMgKi8K LSAgICB7ICIvYWZ0ZXIiLCAgICAgICAgICAgU05EX0FGVCwgQ01fQVJHIH0sCi0jaWZuZGVmIE5P U1BMCi0gICAgeyAiL2FycmF5IiwgICAgICAgICAgIFNORF9BUlIsIENNX0FSRyB9LAotI2VuZGlm IC8qIE5PU1BMICovCi0gICAgeyAiL2FzLW5hbWUiLCAgICAgICAgIFNORF9BU04sIENNX0FSRyB9 LAotICAgIHsgIi9iIiwgICAgICAgICAgICAgICBTTkRfQklOLCBDTV9JTlZ8Q01fQUJSIH0sCi0g ICAgeyAiL2JlZm9yZSIsICAgICAgICAgIFNORF9CRUYsIENNX0FSRyB9LAotICAgIHsgIi9iaW5h cnkiLCAgICAgICAgICBTTkRfQklOLCAwIH0sCi0jaWZkZWYgQ0FMSUJSQVRFCi0gICAgeyAiL2Mi LCAgICAgICAgICAgICAgIFNORF9DTUQsIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICIvY2FsaWJy YXRlIiwgICAgICAgU05EX0NBTCwgQ01fSU5WfENNX0FSRyB9LAotI2VuZGlmIC8qIENBTElCUkFU RSAqLwotICAgIHsgIi9jb21tYW5kIiwgICAgICAgICBTTkRfQ01ELCBDTV9QU0ggfSwKLSAgICB7 ICIvZGVsZXRlIiwgICAgICAgICAgU05EX0RFTCwgMCB9LAotI2lmZGVmIFVOSVhPUk9TSwotICAg IHsgIi9kb3RmaWxlcyIsICAgICAgICBTTkRfRE9ULCAwIH0sCi0jZW5kaWYgLyogVU5JWE9ST1NL ICovCi0gICAgeyAiL2V4Y2VwdCIsICAgICAgICAgIFNORF9FWEMsIENNX0FSRyB9LAotI2lmZGVm IFBJUEVTRU5ECi0gICAgeyAiL2ZpbHRlciIsICAgICAgICAgIFNORF9GTFQsIENNX0FSR3xDTV9Q U0ggfSwKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotICAgIHsgIi9maWxlbmFtZXMiLCAgICAgICBT TkRfTkFNLCBDTV9BUkcgfSwKLSNpZmRlZiBDS1NZTUxJTksKLSAgICB7ICIvZm9sbG93bGlua3Mi LAkgIFNORF9MTkssIDAgfSwKLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLSNpZmRlZiBWTVMKLSAg ICB7ICIvaW1hZ2UiLCAgICAgICAgICAgU05EX0lNRywgMCB9LAotI2Vsc2UKLSAgICB7ICIvaW1h Z2UiLCAgICAgICAgICAgU05EX0JJTiwgQ01fSU5WIH0sCi0jZW5kaWYgLyogVk1TICovCi0jaWZk ZWYgQ0tfTEFCRUxFRAotICAgIHsgIi9sYWJlbGVkIiwgICAgICAgICBTTkRfTEJMLCAwIH0sCi0j ZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotICAgIHsgIi9sYXJnZXItdGhhbiIsICAgICBTTkRfTEFS LCBDTV9BUkcgfSwKLSAgICB7ICIvbGlzdGZpbGUiLCAgICAgICAgU05EX0ZJTCwgQ01fQVJHIH0s Ci0jaWZuZGVmIE5PRlJJTExTCi0gICAgeyAiL21haWwiLCAgICAgICAgICAgIFNORF9NQUksIENN X0FSRyB9LAotI2VuZGlmIC8qIE5PRlJJTExTICovCi0jaWZkZWYgQ0tfVE1QRElSCi0gICAgeyAi L21vdmUtdG8iLCAgICAgICAgIFNORF9NT1YsIENNX0FSRyB9LAotI2VuZGlmIC8qIENLX1RNUERJ UiAqLwotICAgIHsgIi9ub2JhY2t1cGZpbGVzIiwgICBTTkRfTk9CLCAwIH0sCi0jaWZkZWYgVU5J WE9ST1NLCi0gICAgeyAiL25vZG90ZmlsZXMiLCAgICAgIFNORF9OT0QsIDAgfSwKLSNlbmRpZiAv KiBVTklYT1JPU0sgKi8KLSNpZmRlZiBDS1NZTUxJTksKLSAgICB7ICIvbm9mb2xsb3dsaW5rcyIs CSAgU05EX05MSywgMCB9LAotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotICAgIHsgIi9ub3QtYWZ0 ZXIiLCAgICAgICBTTkRfTkFGLCBDTV9BUkcgfSwKLSAgICB7ICIvbm90LWJlZm9yZSIsICAgICAg U05EX05CRSwgQ01fQVJHIH0sCi0gICAgeyAiL3BhdGhuYW1lcyIsICAgICAgIFNORF9QVEgsIENN X0FSRyB9LAotICAgIHsgIi9wcmludCIsICAgICAgICAgICBTTkRfUFJJLCBDTV9BUkcgfSwKLSNp ZmRlZiBDS19YWVoKLSAgICB7ICIvcHJvdG9jb2wiLCAgICAgICAgU05EX1BSTywgQ01fQVJHIH0s Ci0jZWxzZQotICAgIHsgIi9wcm90b2NvbCIsICAgICAgICBTTkRfUFJPLCBDTV9BUkd8Q01fSU5W IH0sCi0jZW5kaWYgLyogQ0tfWFlaICovCi0gICAgeyAiL3F1aWV0IiwgICAgICAgICAgIFNORF9T SEgsIDAgfSwKLSAgICB7ICIvcmVjb3ZlciIsICAgICAgICAgU05EX1JFUywgMCB9LAotI2lmZGVm IFJFQ1VSU0lWRQotLyogU3lzdGVtcyB3aGVyZSB3ZSBkbyByZWN1cnNpb24gKi8KLSAgICB7ICIv cmVjdXJzaXZlIiwgICAgICAgU05EX1JFQywgMCB9LAotI2Vsc2UKLSNpZmRlZiBWTVMKLS8qIFN5 c3RlbXMgdGhhdCBkbyByZWN1cnNpb24gdGhlbXNlbHZlcyB3aXRob3V0IG91ciBhc3Npc3RhbmNl ICovCi0vKiBpZiB3ZSBnaXZlIHRoZW0gdGhlIHJpZ2h0IGtpbmQgb2Ygd2lsZGNhcmQgKi8KLSAg ICB7ICIvcmVjdXJzaXZlIiwgICAgICAgU05EX1JFQywgMCB9LAotI2Vsc2UKLSNpZmRlZiBkYXRh Z2VuZXJhbAotICAgIHsgIi9yZWN1cnNpdmUiLCAgICAgICBTTkRfUkVDLCAwIH0sCi0jZWxzZQot ICAgIHsgIi9yZWN1cnNpdmUiLCAgICAgICBTTkRfUkVDLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwot ICAgIHsgIi9yZW5hbWUtdG8iLCAgICAgICBTTkRfUkVOLCBDTV9BUkcgfSwKLSAgICB7ICIvc2lu Y2UiLCAgICAgICAgICAgU05EX0FGVCwgQ01fSU5WfENNX0FSRyB9LAotICAgIHsgIi9zbWFsbGVy LXRoYW4iLCAgICBTTkRfU01BLCBDTV9BUkcgfSwKLSAgICB7ICIvc3RhcnRpbmctYXQiLCAgICAg U05EX1NUQSwgQ01fQVJHIH0sCi0jaWZuZGVmIE5PRlJJTExTCi0gICAgeyAiL3N1IiwgICAgICAg ICAgICAgIFNORF9BU04sIENNX0FSR3xDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiL3N1YiIsICAg ICAgICAgICAgIFNORF9BU04sIENNX0FSR3xDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiL3N1Ympl Y3QiLCAgICAgICAgIFNORF9BU04sIENNX0FSRyB9LAotI2VuZGlmIC8qIE5PRlJJTExTICovCi0j aWZkZWYgUkVDVVJTSVZFCi0gICAgeyAiL3N1YmRpcmVjdG9yaWVzIiwgIFNORF9SRUMsIENNX0lO ViB9LAotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgIHsgIi90ZXh0IiwgICAgICAgICAgICBT TkRfVFhULCAwIH0sCi0gICAgeyAiL3RyYW5zcGFyZW50IiwgICAgIFNORF9YUEEsIDAgfSwKLSAg ICB7ICIvdHlwZSIsICAgICAgICAgICAgU05EX1RZUCwgQ01fQVJHIH0KLX07Ci0jZGVmaW5lIE5T TkRUQUIgc2l6ZW9mKHNuZHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpCi1zdGF0aWMgaW50IG5z bmR0YWIgPSBOU05EVEFCOwotCi0jaWZuZGVmIE5PTVNFTkQKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFi IG1zbmR0YWJbXSA9IHsJLyogTVNFTkQgb3B0aW9ucyAqLwotICAgIHsgIi9hZnRlciIsICAgICAg ICAgICBTTkRfQUZULCBDTV9BUkcgfSwKLSAgICB7ICIvYmVmb3JlIiwgICAgICAgICAgU05EX0JF RiwgQ01fQVJHIH0sCi0gICAgeyAiL2JpbmFyeSIsICAgICAgICAgIFNORF9CSU4sIDAgfSwKLSAg ICB7ICIvZGVsZXRlIiwgICAgICAgICAgU05EX0RFTCwgMCB9LAotICAgIHsgIi9leGNlcHQiLCAg ICAgICAgICBTTkRfRVhDLCBDTV9BUkcgfSwKLSAgICB7ICIvZmlsZW5hbWVzIiwgICAgICAgU05E X05BTSwgQ01fQVJHIH0sCi0jaWZkZWYgQ0tTWU1MSU5LCi0gICAgeyAiL2ZvbGxvd2xpbmtzIiwJ ICBTTkRfTE5LLCAwIH0sCi0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0jaWZkZWYgVk1TCi0gICAg eyAiL2ltYWdlIiwgICAgICAgICAgIFNORF9JTUcsIDAgfSwKLSNlbHNlCi0gICAgeyAiL2ltYWdl IiwgICAgICAgICAgIFNORF9CSU4sIENNX0lOViB9LAotI2VuZGlmIC8qIFZNUyAqLwotI2lmZGVm IENLX0xBQkVMRUQKLSAgICB7ICIvbGFiZWxlZCIsICAgICAgICAgU05EX0xCTCwgMCB9LAotI2Vu ZGlmIC8qIENLX0xBQkVMRUQgKi8KLSAgICB7ICIvbGFyZ2VyLXRoYW4iLCAgICAgU05EX0xBUiwg Q01fQVJHIH0sCi0gICAgeyAiL2xpc3QiLCAgICAgICAgICAgIFNORF9GSUwsIENNX0FSRyB9LAot I2lmbmRlZiBOT0ZSSUxMUwotICAgIHsgIi9tYWlsIiwgICAgICAgICAgICBTTkRfTUFJLCBDTV9B UkcgfSwKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2lmZGVmIENLX1RNUERJUgotICAgIHsgIi9t b3ZlLXRvIiwgICAgICAgICBTTkRfTU9WLCBDTV9BUkcgfSwKLSNlbmRpZiAvKiBDS19UTVBESVIg Ki8KLSNpZmRlZiBDS1NZTUxJTksKLSAgICB7ICIvbm9mb2xsb3dsaW5rcyIsCVNORF9OTEssIDAg fSwKLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLSAgICB7ICIvbm90LWFmdGVyIiwgICAgICAgU05E X05BRiwgQ01fQVJHIH0sCi0gICAgeyAiL25vdC1iZWZvcmUiLCAgICAgIFNORF9OQkUsIENNX0FS RyB9LAotICAgIHsgIi9wYXRobmFtZXMiLCAgICAgICBTTkRfUFRILCBDTV9BUkcgfSwKLSAgICB7 ICIvcHJpbnQiLCAgICAgICAgICAgU05EX1BSSSwgQ01fQVJHIH0sCi0jaWZkZWYgQ0tfWFlaCi0g ICAgeyAiL3Byb3RvY29sIiwgICAgICAgIFNORF9QUk8sIENNX0FSRyB9LAotI2VuZGlmIC8qIENL X1hZWiAqLwotICAgIHsgIi9xdWlldCIsICAgICAgICAgICBTTkRfU0hILCAwIH0sCi0gICAgeyAi L3JlY292ZXIiLCAgICAgICAgIFNORF9SRVMsIDAgfSwKLSAgICB7ICIvcmVuYW1lLXRvIiwgICAg ICAgU05EX1JFTiwgQ01fQVJHIH0sCi0gICAgeyAiL3NpbmNlIiwgICAgICAgICAgIFNORF9BRlQs IENNX0lOVnxDTV9BUkcgfSwKLSAgICB7ICIvc21hbGxlci10aGFuIiwgICAgU05EX1NNQSwgQ01f QVJHIH0sCi0gICAgeyAiL3N0YXJ0aW5nLWF0IiwgICAgIFNORF9TVEEsIENNX0FSRyB9LAotI2lm bmRlZiBOT0ZSSUxMUwotICAgIHsgIi9zdWJqZWN0IiwgICAgICAgICBTTkRfQVNOLCBDTV9BUkcg fSwKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotICAgIHsgIi90ZXh0IiwgICAgICAgICAgICBTTkRf VFhULCAwIH0sCi0gICAgeyAiL3RyYW5zcGFyZW50IiwgICAgIFNORF9YUEEsIDAgfSwKLSAgICB7 ICIvdHlwZSIsICAgICAgICAgICAgU05EX1RZUCwgQ01fQVJHIH0KLX07Ci0jZGVmaW5lIE5NU05E VEFCIHNpemVvZihtc25kdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikKLXN0YXRpYyBpbnQgbm1z bmR0YWIgPSBOTVNORFRBQjsKLSNlbmRpZiAvKiBOT01TRU5EICovCi0jZW5kaWYgLyogTk9YRkVS ICovCi0KLS8qIENPTk5FQ1QgY29tbWFuZCBzd2l0Y2hlcyAqLwotCi0jZGVmaW5lIENPTk5fSUkg IDAJLyogSWRsZSBpbnRlcnZhbCAqLwotI2RlZmluZSBDT05OX0lTICAxCS8qIElkbGUgc3RyaW5n ICovCi0jZGVmaW5lIENPTk5fSUwgIDIJLyogSWRsZSBsaW1pdCAqLwotI2RlZmluZSBDT05OX05W ICAzCS8qIE5vbi1WZXJib3NlICovCi0jZGVmaW5lIENPTk5fVEwgIDQJLyogVGltZSBsaW1pdCAq LwotI2RlZmluZSBDT05OX1RTICA1CS8qIFRyaWdnZXIgc3RyaW5nICovCi0jZGVmaW5lIENPTk5f QVMgIDYJLyogQXN5bmNocm9ub3VzICovCi0jZGVmaW5lIENPTk5fU1kgIDcJLyogU3luY2hyb25v dXMgKi8KLSNkZWZpbmUgQ09OTl9NQVggNwkvKiBOdW1iZXIgb2YgQ09OTkVDVCBzd2l0Y2hlcyAq LwotCi0jaWZuZGVmIE5PTE9DQUwKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGNvbm50YWJbXSA9IHsK LSNpZmRlZiBPUzIKLSAgICB7ICIvYXN5bmNocm9ub3VzIiwgICAgQ09OTl9BUywgQ01fSU5WIH0s Ci0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgWExJTUlUUwotICAgIHsgIi9pZGxlLWludGVydmFs IiwgICBDT05OX0lJLCBDTV9BUkcgfSwKLSAgICB7ICIvaWRsZS1saW1pdCIsICAgICAgQ09OTl9J TCwgQ01fQVJHIH0sCi0gICAgeyAiL2lkbGUtc3RyaW5nIiwgICAgIENPTk5fSVMsIENNX0FSRyB9 LAotICAgIHsgIi9xdWlldGx5IiwgICAgICAgICBDT05OX05WLCBDTV9JTlYgfSwKLSNlbHNlCi0g ICAgeyAiL3F1aWV0bHkiLCAgICAgICAgIENPTk5fTlYsIDAgfSwKLSNlbmRpZiAvKiBYTElNSVRT ICovCi0jaWZkZWYgT1MyCi0gICAgeyAiL3N5bmNocm9ub3VzIiwgICAgIENPTk5fU1ksIENNX0lO ViB9LAotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIFhMSU1JVFMKLSAgICB7ICIvdGltZS1saW1p dCIsICAgICAgQ09OTl9UTCwgQ01fQVJHIH0sCi0jZW5kaWYgLyogWExJTUlUUyAqLwotI2lmZGVm IENLX1RSSUdHRVIKLSAgICB7ICIvdHJpZ2dlciIsICAgICAgICAgQ09OTl9UUywgQ01fQVJHIH0s Ci0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotICAgIHsgIiIsMCwwIH0KLX07Ci0jZGVmaW5lIE5D T05OVEFCIHNpemVvZihjb25udGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikKLXN0YXRpYyBpbnQg bmNvbm50YWIgPSBOQ09OTlRBQjsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9Y RkVSCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzdGF0dGFiW10gPSB7CS8qIFNUQVRJU1RJQ1MgY29t bWFuZCBzd2l0Y2hlcyAqLwotICAgIHsgIi9icmllZiIsICAgMSwgMCB9LAotICAgIHsgIi92ZXJi b3NlIiwgMCwgMCB9Ci19OwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PU1BMCi0j aWZkZWYgQ09NTUVOVAotc3RydWN0IG10YWIgbWFjdGFiW01BQ19NQVhdID0gewkJLyogUHJlaW5p dGlhbGl6ZWQgbWFjcm8gdGFibGUgKi8KLSAgICB7IE5VTEwsIE5VTEwsIDAgfQotfTsKLSNlbHNl Ci1zdHJ1Y3QgbXRhYiAqbWFjdGFiOwkJCS8qIER5bmFtaWNhbGx5IGFsbG9jYXRlZCBtYWNybyB0 YWJsZSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLWludCBubWFjID0gMDsKLQotc3RydWN0IGtl eXRhYiBtYWNrZXlbTUFDX01BWF07CQkvKiBNYWNybyBuYW1lcyBhcyBjb21tYW5kIGtleXdvcmRz ICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1NQTAotI2lmZGVmICBPUzIKLXN0 cnVjdCBrZXl0YWIgYmVlcHRhYltdID0gewkJLyogQmVlcCBvcHRpb25zICovCi0gICAgeyAiZXJy b3IiLCBCUF9GQUlMLCAwIH0sCi0gICAgeyAiaW5mb3JtYXRpb24iLCBCUF9OT1RFLCAwIH0sCi0g ICAgeyAid2FybmluZyIsIEJQX1dBUk4sIDAgfQotfTsKLWludCBuYmVlcHRhYiA9IHNpemVvZihi ZWVwdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLS8qIENMRUFSIENPTU1NQU5ELVNDUkVF TiBvcHRpb25zICovCi0KLSNkZWZpbmUgQ0xSX0NfQUxMIDAKLSNkZWZpbmUgQ0xSX0NfQk9MIDEK LSNkZWZpbmUgQ0xSX0NfQk9TIDIKLSNkZWZpbmUgQ0xSX0NfRU9MIDMKLSNkZWZpbmUgQ0xSX0Nf RU9TIDQKLSNkZWZpbmUgQ0xSX0NfTElOIDUKLSNkZWZpbmUgQ0xSX0NfU0NSIDYKLQotc3RydWN0 IGtleXRhYiBjbHJjbWR0YWJbXSA9IHsKLSAgICB7ICJhbGwiLCAgICAgICAgQ0xSX0NfQUxMLCAw IH0sCi0gICAgeyAiYm9sIiwgICAgICAgIENMUl9DX0JPTCwgMCB9LAotICAgIHsgImJvcyIsICAg ICAgICBDTFJfQ19CT1MsIDAgfSwKLSAgICB7ICJlb2wiLCAgICAgICAgQ0xSX0NfRU9MLCAwIH0s Ci0gICAgeyAiZW9zIiwgICAgICAgIENMUl9DX0VPUywgMCB9LAotICAgIHsgImxpbmUiLCAgICAg ICBDTFJfQ19MSU4sIDAgfSwKLSAgICB7ICJzY3JvbGxiYWNrIiwgQ0xSX0NfU0NSLCAwIH0KLX07 Ci1pbnQgbmNscmNtZCA9IHNpemVvZihjbHJjbWR0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsK LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgQ09NTUVOVAot LyogTm90IHVzZWQgYXQgcHJlc2VudCAqLwotc3RhdGljIHN0cnVjdCBrZXl0YWIgcGFnZXRhYltd ID0gewotICAgIHsgIi9tb3JlIiwgICAxLCBDTV9JTlYgfSwKLSAgICB7ICIvbm9wYWdlIiwgMCwg MCB9LAotICAgIHsgIi9wYWdlIiwgICAxLCAwIH0KLX07Ci1pbnQgbnBhZ2V0YWIgPSBzaXplb2Yo cGFnZXRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQot I2RlZmluZSBUWVBfTk9QICAwCQkJLyogL05PUEFHRSAqLwotI2RlZmluZSBUWVBfUEFHICAxCQkJ LyogL1BBR0UgKi8KLSNkZWZpbmUgVFlQX0hFQSAgMgkJCS8qIC9IRUFEOm4gKi8KLSNkZWZpbmUg VFlQX1RBSSAgMwkJCS8qIC9UQUlMOm4gKi8KLSNkZWZpbmUgVFlQX1BBVCAgNAkJCS8qIC9NQVRD SDpwYXR0ZXJuICovCi0jZGVmaW5lIFRZUF9XSUQgIDUJCQkvKiAvV0lEVEg6Y29scyAqLwotI2Rl ZmluZSBUWVBfQ09VICA2CQkJLyogL0NPVU5UICovCi0jZGVmaW5lIFRZUF9PVVQgIDcJCQkvKiAv T1VUUFVUOmZpbGUgKi8KLSNkZWZpbmUgVFlQX1BGWCAgOAkJCS8qIC9QUkVGSVg6c3RyaW5nICov Ci0jaWZkZWYgVU5JQ09ERQotI2RlZmluZSBUWVBfWElOICA5CQkJLyogL1RSQU5TTEFURS1GUk9N OmNoYXJzZXQgKi8KLSNkZWZpbmUgVFlQX1hVVCAxMAkJCS8qIC9UUkFOU0xBVEUtVE86Y2hhcnNl dCAqLwotI2RlZmluZSBUWVBfWFBBIDExCQkJLyogL1RSQU5TUEFSRU5UICovCi0jZW5kaWYgLyog VU5JQ09ERSAqLwotI2lmZGVmIEtVSQotI2RlZmluZSBUWVBfR1VJIDEyCQkJLyogL0dVSTp0aXRs ZSAqLwotI2RlZmluZSBUWVBfSElHIDEzCQkJLyogL0hFSUdIVDpyb3dzICovCi0jZW5kaWYgLyog S1VJICovCi0jZGVmaW5lIFRZUF9OVU0gMTQJCQkvKiAvTlVNQkVSICovCi0KLXN0YXRpYyBzdHJ1 Y3Qga2V5dGFiIHR5cGV0YWJbXSA9IHsJLyogVFlQRSBjb21tYW5kIHN3aXRjaGVzICovCi0gICAg eyAiL2NvdW50IiwgICAgICAgICAgVFlQX0NPVSwgMCB9LAotI2lmZGVmIFVOSUNPREUKLSAgICB7 ICIvY2hhcmFjdGVyLXNldCIsICBUWVBfWElOLCBDTV9BUkcgfSwKLSNlbmRpZiAvKiBVTklDT0RF ICovCi0jaWZkZWYgS1VJCi0gICAgeyAiL2d1aSIsICAgICAgICAgICAgVFlQX0dVSSwgQ01fQVJH IH0sCi0jZW5kaWYgLyogS1VJICovCi0gICAgeyAiL2hlYWQiLCAgICAgICAgICAgVFlQX0hFQSwg Q01fQVJHIH0sCi0jaWZkZWYgS1VJCi0gICAgeyAiL2hlaWdodCIsICAgICAgICAgVFlQX0hJRywg Q01fQVJHIH0sCi0jZW5kaWYgLyogS1VJICovCi0gICAgeyAiL21hdGNoIiwgICAgICAgICAgVFlQ X1BBVCwgQ01fQVJHIH0sCi0jaWZkZWYgQ0tfVFRHV1NJWgotICAgIHsgIi9tb3JlIiwgICAgICAg ICAgIFRZUF9QQUcsIENNX0lOViB9LAotICAgIHsgIi9ub3BhZ2UiLCAgICAgICAgIFRZUF9OT1As IDAgfSwKLSAgICB7ICIvbnVtYmVyIiwgICAgICAgICBUWVBfTlVNLCAwIH0sCi0gICAgeyAiL291 dHB1dCIsICAgICAgICAgVFlQX09VVCwgQ01fQVJHIH0sCi0gICAgeyAiL3BhZ2UiLCAgICAgICAg ICAgVFlQX1BBRywgMCB9LAotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICB7ICIvcHJlZml4 IiwgICAgICAgICBUWVBfUEZYLCBDTV9BUkcgfSwKLSAgICB7ICIvdGFpbCIsICAgICAgICAgICBU WVBfVEFJLCBDTV9BUkcgfSwKLSNpZmRlZiBVTklDT0RFCi0gICAgeyAiL3RyYW5zbGF0ZS10byIs ICAgVFlQX1hVVCwgQ01fQVJHIH0sCi0gICAgeyAiL3RyYW5zcGFyZW50IiwgICAgVFlQX1hQQSwg MCB9LAotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICB7ICIvd2lkdGgiLCAgICAgICAgICBUWVBf V0lELCBDTV9BUkcgfSwKLSNpZmRlZiBVTklDT0RFCi0gICAgeyAiL3hsYXRlLXRvIiwgICAgICAg VFlQX1hVVCwgQ01fSU5WfENNX0FSRyB9LAotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICB7ICIi LCAwLCAwIH0KLX07Ci1pbnQgbnR5cGV0YWIgPSBzaXplb2YodHlwZXRhYikvc2l6ZW9mKHN0cnVj dCBrZXl0YWIpIC0gMTsKLQotaW50IHR5cF9wYWdlID0gLTE7CQkJLyogVFlQRSAvW05PXVBBR0Ug ZGVmYXVsdCAqLwotaW50IHR5cF93aWQgID0gLTE7Ci0KLSNpZm5kZWYgTk9TUEwKLSNkZWZpbmUg VFJBX0FMTCA5OTkJCQkvKiBUUkFDRSBjb21tYW5kICovCi0jZGVmaW5lIFRSQV9BU0cgMAotI2Rl ZmluZSBUUkFfQ01EIDEKLQotaW50IHRyYV9hc2cgPSAwOwotaW50IHRyYV9jbWQgPSAwOwotCi1z dGF0aWMgc3RydWN0IGtleXRhYiB0cmFjZXRhYltdID0gewkvKiBUUkFDRSBvcHRpb25zICovCi0g ICAgeyAiYWxsIiwgICAgICAgICAgICBUUkFfQUxMLCAwIH0sCi0gICAgeyAiYXNzaWdubWVudHMi LCAgICBUUkFfQVNHLCAwIH0sCi0gICAgeyAiY29tbWFuZC1sZXZlbCIsICBUUkFfQ01ELCAwIH0K LX07Ci1zdGF0aWMgaW50IG50cmFjZXRhYiA9IHNpemVvZih0cmFjZXRhYikvc2l6ZW9mKHN0cnVj dCBrZXl0YWIpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9TSE9XCi1WT0lECi1z aG93dHlwb3B0cygpIHsKLSAgICBwcmludGYoIiBUWVBFICIpOwotICAgIGlmICh0eXBfcGFnZSA+ IC0xKSB7Ci0JcHJ0b3B0KCZvcHRsaW5lcyx0eXBfcGFnZSA/ICIvUEFHRSIgOiAiL05PUEFHRSIp OwotICAgIH0gZWxzZQotICAgICAgcHJ0b3B0KCZvcHRsaW5lcywiKG5vIG9wdGlvbnMgc2V0KSIp OwotICAgIGlmICh0eXBfd2lkID4gLTEpIHsKLQlja21ha21zZyh0bXBidWYsVE1QQlVGU0laLCIv V0lEVEg6Iixja2l0b2EodHlwX3dpZCksTlVMTCxOVUxMKTsKLQlwcnRvcHQoJm9wdGxpbmVzLHRt cGJ1Zik7Ci0gICAgfQotICAgIHBydG9wdCgmb3B0bGluZXMsIiIpOwotfQotI2VuZGlmIC8qIE5P U0hPVyAqLwotCi0jaWZkZWYgTE9DVVMKLS8qIGlzYXV0byA9PSAxIGlmIGxvY3VzIGlzIGJlaW5n IHN3aXRjaGVkIGF1dG9tYXRpY2FsbHkgKi8KLQotVk9JRAotc2V0bG9jdXMoeCwgaXNhdXRvKSBp bnQgeCwgaXNhdXRvOyB7Ci0gICAgZXh0ZXJuIGludCBxdWl0dGluZzsKLSAgICBpZiAoeCkgeCA9 IDE7Ci0gICAgaWYgKHggJiYgbG9jdXMpIHJldHVybjsKLSAgICBpZiAoIXggJiYgIWxvY3VzKSBy ZXR1cm47Ci0gICAgLyogR2V0IGhlcmUgaWYgaXQgYWN0dWFsbHkgbmVlZHMgdG8gYmUgY2hhbmdl ZCAqLwotI2lmZGVmIE9TMgotICAgIGlmIChpc2F1dG8gJiYJCQkvKiBBdXRvbWF0aWNhbGx5IHN3 aXRjaGluZyAqLwotCSFxdWl0dGluZyAmJgkJCS8qIG5vdCBleGl0aW5nICovCi0JYXV0b2xvY3Vz ID09IDIpIHsJCS8qIGFuZCBBVVRPTE9DVVMgaXMgc2V0IHRvIEFTSyAqLwotCWNoYXIgbG9jbXNn WzMwMF07Ci0JY2ttYWttc2cobG9jbXNnLDMwMCwKLQkJICJTd2l0Y2hpbmcgTG9jdXMgdG8gIiwK LQkJIHggPyAiTE9DQUwiIDogIlJFTU9URSIsCi0JCSAiIGZvciBmaWxlIG1hbmFnZW1lbnQgY29t bWFuZHNcbiIKLSAgICAgICAgICAgICAgICAgInN1Y2ggYXMgQ0QsIERJUkVDVE9SWSwgREVMRVRF LCBSRU5BTUUuICBUeXBlIEhFTFAgU0VUXG4iCi0gICAgICAgICAgICAgICAgICJMT0NVUyBhdCB0 aGUgSy05NT4gcHJvbXB0IGZvciBmdXJ0aGVyIGluZm8uICBVc2UgdGhlXG4iCi0jaWZkZWYgS1VJ Ci0gICAgICAgICAgICAgICAgICAiQWN0aW9ucyBtZW51IG9yIFNFVCBMT0NVUyBjb21tYW5kIHRv IGRpc2FibGUgYXV0b21hdGljXG4iCi0gICAgICAgICAgICAgICAgICAiTG9jdXMgc3dpdGNoaW5n IG9yIHRvIGRpc2FibGUgdGhlc2UgcXVlcmllcy4iLAotI2Vsc2UgLyogS1VJICovCi0gICAgICAg ICAgICAgICAgICAiU0VUIExPQ1VTIGNvbW1hbmQgdG8gZGlzYWJsZSBhdXRvbWF0aWMgbG9jdXMg c3dpdGNoaW5nXG4iCi0gICAgICAgICAgICAgICAgICAib3IgdG8gZGlzYWJsZSB0aGVzZSBxdWVy aWVzLiIsCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICAgICAgICBOVUxMKTsKLQlpZiAo dXFfb2sobG9jbXNnLCJPSyB0byBzd2l0Y2ggTG9jdXM/IiwzLE5VTEwsMSkpIHsKLQkgICAgbG9j dXMgPSB4OwotI2lmZGVmIEtVSQotCSAgICBLdWlTZXRQcm9wZXJ0eShLVUlfTE9DVVMseCwwKTsK LSNlbmRpZiAvKiBLVUkgKi8KLQkgICAgcmV0dXJuOwotCX0KLSAgICB9IGVsc2UgewotI2VuZGlm IC8qIE9TMiAqLwotICAgICAgICBpZiAoaXNhdXRvICYmIG1zZ2ZsZyAmJiAhcXVpdHRpbmcpCi0g ICAgICAgICAgcHJpbnRmKCJTd2l0Y2hpbmcgTE9DVVMgZm9yIGZpbGUtbWFuYWdlbWVudCBjb21t YW5kcyB0byAlcyAlcy5cbiIsCi0JCSB4ID8gIkxPQ0FMIiA6ICJSRU1PVEUiLAotCQkgIihIRUxQ IExPQ1VTIGZvciBpbmZvKSIKLQkJICk7Ci0JbG9jdXMgPSB4OwotI2lmZGVmIE9TMgotI2lmZGVm IEtVSQotCUt1aVNldFByb3BlcnR5KEtVSV9MT0NVUyx4LDApOwotI2VuZGlmIC8qIEtVSSAqLwot ICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLX0KLQotVk9JRAotc2V0YXV0b2xvY3VzKHgpIGludCB4 OyB7Ci0gICAgYXV0b2xvY3VzID0geDsKLSNpZmRlZiBLVUkKLSAgICBLdWlTZXRQcm9wZXJ0eShL VUlfQVVUT19MT0NVUyx4LDApOwotI2VuZGlmIC8qIEtVSSAqLwotfQotI2VuZGlmIC8qIExPQ1VT ICovCi0KLWludAotc2V0dHlwb3B0cygpIHsJCQkJLyogU2V0IFRZUEUgb3B0aW9uIGRlZmF1bHRz ICovCi0gICAgaW50IHhwID0gLTE7Ci0gICAgaW50IGMsIGdldHZhbDsKLSAgICB3aGlsZSAoMSkg ewotCWlmICgoeSA9IGNtc3dpKHR5cGV0YWIsbnR5cGV0YWIsIlN3aXRjaCIsIiIseHhzdHJpbmcp KSA8IDApIHsKLQkgICAgaWYgKHkgPT0gLTMpCi0JICAgICAgYnJlYWs7Ci0JICAgIGVsc2UKLQkg ICAgICByZXR1cm4oeSk7Ci0JfQotCWMgPSBjbWdicmsoKTsKLQlpZiAoKGdldHZhbCA9IChjID09 ICc6JyB8fCBjID09ICc9JykpICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0JICAgIHBy aW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwotCSAgICBy ZXR1cm4oLTkpOwotCX0KLQlzd2l0Y2ggKHkpIHsKLQkgIGNhc2UgVFlQX05PUDogeHAgPSAwOyBi cmVhazsKLQkgIGNhc2UgVFlQX1BBRzogeHAgPSAxOyBicmVhazsKLQkgIGNhc2UgVFlQX1dJRDoK LQkgICAgaWYgKGdldHZhbCkKLQkgICAgICBpZiAoKHggPSBjbW51bSgiQ29sdW1uIGF0IHdoaWNo IHRvIHRydW5jYXRlIiwKLQkJCSAgICAgY2tpdG9hKGNtZF9jb2xzKSwxMCwmeSx4eHN0cmluZykp IDwgMCkKLQkJcmV0dXJuKHgpOwotCSAgICB0eXBfd2lkID0geTsKLQkgICAgYnJlYWs7Ci0KLSAg ICAgICAgICBkZWZhdWx0OgotCSAgICBwcmludGYoIj9Tb3JyeSwgdGhpcyBvcHRpb24gY2FuIG5v dCBiZSBzZXRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSAgICB9Ci0gICAgaWYgKCh4ID0g Y21jZm0oKSkgPCAwKQkJLyogR2V0IGNvbmZpcm1hdGlvbiAqLwotICAgICAgcmV0dXJuKHgpOwot ICAgIGlmICh4cCA+IC0xKSB0eXBfcGFnZSA9IHhwOwkJLyogQ29uZmlybWVkLCBzYXZlIGRlZmF1 bHRzICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLX0KLQotLyogRm9yd2FyZCBkZWNsYXJh dGlvbnMgb2YgZnVuY3Rpb25zIGxvY2FsIHRvIHRoaXMgbW9kdWxlICovCi0KLSNpZmRlZiBVTklY Ci1fUFJPVE9UWVAgKGludCBkb3VjaG1vZCwgKCB2b2lkICkgKTsKLSNlbmRpZiAvKiBVTklYICov Ci0jaWZkZWYgQ0tQVVJHRQotX1BST1RPVFlQIChpbnQgZG9wdXJnZSwgICggdm9pZCApICk7Ci0j ZW5kaWYgLyogQ0tQVVJHRSAqLwotI2lmbmRlZiBOT1NQTAotX1BST1RPVFlQIChpbnQgZG91bmRl ZiwgICggaW50ICApICk7Ci1fUFJPVE9UWVAgKGludCBkb2FzaywgICAgKCBpbnQgICkgKTsKLV9Q Uk9UT1RZUCAoaW50IGRvZGVmLCAgICAoIGludCAgKSApOwotX1BST1RPVFlQIChpbnQgZG9lbHNl LCAgICggdm9pZCApICk7Ci1fUFJPVE9UWVAgKGludCBkb2ZvciwgICAgKCB2b2lkICkgKTsKLSNl bmRpZiAvKiBOT1NQTCAgKi8KLSNpZm5kZWYgTk9ESUFMCi1fUFJPVE9UWVAgKGludCBkb2RpYWws ICAgKCBpbnQgICkgKTsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLV9QUk9UT1RZUCAoaW50IGRvZGVs LCAgICAoIHZvaWQgKSApOwotX1BST1RPVFlQIChpbnQgZG9wYXVzLCAgICggaW50ICApICk7Ci0j aWZuZGVmIE5PUFVTSAotI2lmZGVmIFRDUFNPQ0tFVAotX1BST1RPVFlQIChpbnQgZG9waW5nLCAg ICggdm9pZCApICk7Ci1fUFJPVE9UWVAgKGludCBkb2Z0cCwgICAgKCB2b2lkICkgKTsKLSNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNpZm5kZWYgTk9SRU5BTUUK LSNpZm5kZWYgTk9GUklMTFMKLV9QUk9UT1RZUCAoaW50IGRvcmVuYW0sICAoIHZvaWQgKSApOwot I2VuZGlmIC8qIE5PRlJJTExTICovCi0jZW5kaWYgLyogTk9SRU5BTUUgKi8KLSNpZmRlZiBaQ09Q WQotX1BST1RPVFlQIChpbnQgZG9jb3B5LCAgICggdm9pZCApICk7Ci0jZW5kaWYgLyogWkNPUFkg Ki8KLSNpZmRlZiBOVAotX1BST1RPVFlQIChpbnQgZG9saW5rLCAgICggdm9pZCApKTsKLSNlbmRp ZiAvKiBOVCAqLwotI2lmZGVmIENLX1JFWFgKLV9QUk9UT1RZUCAoaW50IGRvcmV4eCwgICAoIHZv aWQgKSApOwotI2VuZGlmIC8qIENLX1JFWFggKi8KLQotI2lmZGVmIFROQ09ERQotc3RhdGljIHN0 cnVjdCBrZXl0YWIgdGVsY21kW10gPSB7Ci0gICAgeyAiYWJvcnQiLCBUTl9BQk9SVCwgQ01fSU5W IH0sCS8qIEVtb3Rpb25hbGx5IHRvbmVkIC0gZG9uJ3Qgc2hvdyAqLwotICAgIHsgImFvIiwgICAg VE5fQU8sICAgIDAgfSwKLSAgICB7ICJheXQiLCAgIFROX0FZVCwgICAwIH0sCi0gICAgeyAiYnJl YWsiLCBCUkVBSywgICAgMCB9LAotICAgIHsgImNhbmNlbCIsVE5fQUJPUlQsIDAgfSwKLSAgICB7 ICJkbWFyayIsIFROX0RNLCAgICAwIH0sCi0gICAgeyAiZG8iLCAgICBETywgICAgICAgMCB9LAot ICAgIHsgImRvbnQiLCAgRE9OVCwgICAgIDAgfSwKLSAgICB7ICJlYyIsICAgIFROX0VDLCAgICAw IH0sCi0gICAgeyAiZWwiLCAgICBUTl9FTCwgICAgMCB9LAotICAgIHsgImVvZiIsICAgVE5fRU9G LCAgIDAgfSwKLSAgICB7ICJlb3IiLCAgIFROX0VPUiwgICAwIH0sCi0jaWZkZWYgQ0tfS0VSQkVS T1MKLSNpZmRlZiBLUkI1Ci0jZGVmaW5lIFROX0ZXRCAxCi0gICAgeyAiZm9yd2FyZCIsIFROX0ZX RCwgQ01fSU5WIH0sCi0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICov Ci0gICAgeyAiZ2EiLCAgICBUTl9HQSwgICAgMCB9LAotICAgIHsgImlwIiwgICAgVE5fSVAsICAg IDAgfSwKLSAgICB7ICJub3AiLCAgIFROX05PUCwgICAwIH0sCi0gICAgeyAic2FrIiwgICBUTl9T QUssICAgQ01fSU5WIH0sCi0gICAgeyAic2IiLCAgICBTQiwgICAgICAgMCB9LAotICAgIHsgInNl IiwgICAgU0UsICAgICAgIDAgfSwKLSAgICB7ICJzdXNwIiwgIFROX1NVU1AsICAwIH0sCi0gICAg eyAid2lsbCIsICBXSUxMLCAgICAgMCB9LAotICAgIHsgIndvbnQiLCAgV09OVCwgICAgIDAgfQot fTsKLXN0YXRpYyBpbnQgbnRlbGNtZCA9IChzaXplb2YodGVsY21kKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSk7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRub3B0c1tdID0gewotI2lmZGVmIENL X0FVVEhFTlRJQ0FUSU9OCi0gICAgeyAiYXV0aCIsICAgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OLCAg IDAgfSwKLSNlbHNlCi0gICAgeyAiYXV0aCIsICAgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OLCAgIENN X0lOViB9LAotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0gICAgeyAiYmluYXJ5Iiwg VEVMT1BUX0JJTkFSWSwgMCB9LAotI2lmZGVmIFROX0NPTVBPUlQKLSAgICB7ICJjIiwgICAgICBU RUxPUFRfQ09NUE9SVCwgQ01fSU5WfENNX0FCUn0sCi0gICAgeyAiY28iLCAgICAgVEVMT1BUX0NP TVBPUlQsIENNX0lOVnxDTV9BQlJ9LAotICAgIHsgImNvbSIsICAgIFRFTE9QVF9DT01QT1JULCBD TV9JTlZ8Q01fQUJSfSwKLSAgICB7ICJjb20tcG9ydC1jb250cm9sIiwgVEVMT1BUX0NPTVBPUlQs IDAgfSwKLSAgICB7ICJjb21wb3J0LWNvbnRyb2wiLCBURUxPUFRfQ09NUE9SVCwgQ01fSU5WfSwK LSNlbHNlICAvKiBUTl9DT01QT1JUICovCi0gICAgeyAiY29tLXBvcnQtY29udHJvbCIsIFRFTE9Q VF9DT01QT1JULCBDTV9JTlYgfSwKLSAgICB7ICJjb21wb3J0LWNvbnRyb2wiLCBURUxPUFRfQ09N UE9SVCwgQ01fSU5WfSwKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0gICAgeyAiZWNobyIsIFRF TE9QVF9FQ0hPLCAwIH0sCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIHsgImVuY3J5cHQiLCBU RUxPUFRfRU5DUllQVElPTiwgMCB9LAotI2Vsc2UKLSAgICB7ICJlbmNyeXB0IiwgVEVMT1BUX0VO Q1JZUFRJT04sIENNX0lOViB9LAotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBD S19GT1JXQVJEX1gKLSAgICB7ICJmb3J3YXJkLXgiLCBURUxPUFRfRk9SV0FSRF9YLCAwIH0sCi0j ZWxzZQotICAgIHsgImZvcndhcmQteCIsIFRFTE9QVF9GT1JXQVJEX1gsIENNX0lOViB9LAotI2Vu ZGlmIC8qIENLX0ZPUldBUkRfWCAqLwotI2lmZGVmIElLU19PUFRJT04KLSAgICB7ICJrZXJtaXQi LCBURUxPUFRfS0VSTUlULCAwIH0sCi0jZWxzZQotICAgIHsgImtlcm1pdCIsIFRFTE9QVF9LRVJN SVQsIENNX0lOViB9LAotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSAgICB7ICJsZmxvdyIsICBU RUxPUFRfTEZMT1csIENNX0lOViB9LAotICAgIHsgImxvZ291dCIsIFRFTE9QVF9MT0dPVVQsIENN X0lOViB9LAotI2lmZGVmIENLX05BV1MKLSAgICB7ICJuYXdzIiwgVEVMT1BUX05BV1MsIDAgfSwK LSNlbHNlCi0gICAgeyAibmF3cyIsIFRFTE9QVF9OQVdTLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBD S19OQVdTICovCi0jaWZkZWYgQ0tfRU5WSVJPTk1FTlQKLSAgICB7ICJuZXctZW52aXJvbm1lbnQi LCBURUxPUFRfTkVXRU5WSVJPTiwgIDAgfSwKLSNlbHNlCi0gICAgeyAibmV3LWVudmlyb25tZW50 IiwgVEVMT1BUX05FV0VOVklST04sICBDTV9JTlYgfSwKLSNlbmRpZiAvKiBDS19FTlZJUk9OTUVO VCAqLwotICAgIHsgInByYWdtYS1oZWFydGJlYXQiLFRFTE9QVF9QUkFHTUFfSEVBUlRCRUFULCAg Q01fSU5WIH0sCi0gICAgeyAicHJhZ21hLWxvZ29uIiwgICAgVEVMT1BUX1BSQUdNQV9MT0dPTiwg IENNX0lOViB9LAotICAgIHsgInByYWdtYS1zc3BpIiwgICAgIFRFTE9QVF9TU1BJX0xPR09OLCAg Q01fSU5WIH0sCi0gICAgeyAic2FrIiwgICBURUxPUFRfSUJNX1NBSywgQ01fSU5WIH0sCi0jaWZk ZWYgQ0tfU05ETE9DCi0gICAgeyAic2VuZC1sb2NhdGlvbiIsICAgVEVMT1BUX1NORExPQywgIDAg fSwKLSNlbHNlCi0gICAgeyAic2VuZC1sb2NhdGlvbiIsICAgVEVMT1BUX1NORExPQywgIENNX0lO ViB9LAotI2VuZGlmIC8qIENLX1NORExPQyAqLwotICAgIHsgInNnYSIsIFRFTE9QVF9TR0EsIDAg fSwKLSNpZmRlZiBDS19TU0wKLSAgICB7ICJzdGFydC10bHMiLCAgICAgICBURUxPUFRfU1RBUlRf VExTLCAgMCB9LAotI2Vsc2UKLSAgICB7ICJzdGFydC10bHMiLCAgICAgICBURUxPUFRfU1RBUlRf VExTLCAgQ01fSU5WIH0sCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgeyAidHR5cGUiLCBURUxP UFRfVFRZUEUsIDAgfSwKLSNpZmRlZiBDS19FTlZJUk9OTUVOVAotICAgIHsgInhkaXNwbGF5LWxv Y2F0aW9uIiwgVEVMT1BUX1hESVNQTE9DLCAwIH0sCi0jZWxzZQotICAgIHsgInhkaXNwbGF5LWxv Y2F0aW9uIiwgVEVMT1BUX1hESVNQTE9DLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBDS19FTlZJUk9O TUVOVCAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnRub3B0cyA9IChzaXpl b2YodG5vcHRzKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdGF0aWMgc3RydWN0 IGtleXRhYiB0bnNib3B0c1tdID0gewotI2lmZGVmIENLX05BV1MKLSAgICB7ICJuYXdzIiwgVEVM T1BUX05BV1MsIDAgfSwKLSNlbmRpZiAvKiBDS19OQVdTICovCi0gICAgeyAiIiwgMCwgMCB9Ci19 Owotc3RhdGljIGludCBudG5zYm9wdHMgPSAoc2l6ZW9mKHRuc2JvcHRzKSAvIHNpemVvZihzdHJ1 Y3Qga2V5dGFiKSkgLSAxOwotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0jaWZkZWYgVENQU09DS0VU Ci0jaWZuZGVmIE5PUFVTSAotI2lmZGVmIFNZU0ZUUAotaW50Ci1kb2Z0cCgpIHsJCQkJLyogKEV4 dGVybmFsKSBGVFAgY29tbWFuZCAqLwotICAgIGNoYXIgKnAsICpmOwkJCS8qIChTZWUgZG94ZnRw KCkgZm9yIGludGVybmFsIG9uZSkgKi8KLSAgICBpbnQgeDsKLQotICAgIGlmIChuZXR3b3JrKQkJ CS8qIElmIHdlIGhhdmUgYSBjdXJyZW50IGNvbm5lY3Rpb24gKi8KLSAgICAgIGNrc3RybmNweShs aW5lLHR0bmFtZSxMSU5CVUZTSVopOwkvKiBnZXQgdGhlIGhvc3QgbmFtZSAqLwotICAgIGVsc2Ug KmxpbmUgPSAnXDAnOwkJCS8qIGFzIGRlZmF1bHQgaG9zdCAqLwotICAgIGZvciAocCA9IGxpbmU7 ICpwOyBwKyspCQkvKiBSZW1vdmUgIjpzZXJ2aWNlIiBmcm9tIGVuZC4gKi8KLSAgICAgIGlmICgq cCA9PSAnOicpIHsgKnAgPSAnXDAnOyBicmVhazsgfQotICAgIGlmICgoeCA9IGNtdHh0KCJJUCBo b3N0IG5hbWUgb3IgbnVtYmVyIiwgbGluZSwgJnMsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0 dXJuKHgpOwotICAgIGlmIChub3B1c2gpIHsKLSAgICAgICAgcHJpbnRmKCI/U29ycnksIEZUUCBj b21tYW5kIGRpc2FibGVkXG4iKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9 Ci0vKiBDb25zdHJ1Y3QgRlRQIGNvbW1hbmQgKi8KLSNpZmRlZiBWTVMKLSNpZmRlZiBNVUxUSU5F VAkJCQkvKiBUR1YgTXVsdGlOZXQgKi8KLSAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWiwibXVs dGluZXQgZnRwICIscyxOVUxMLE5VTEwpOwotI2Vsc2UKLSAgICBja21ha21zZyhsaW5lLExJTkJV RlNJWiwiZnRwICIscyxOVUxMLE5VTEwpOwotI2VuZGlmIC8qIE1VTFRJTkVUICovCi0jZWxzZQkJ CQkJLyogTm90IFZNUyAqLwotI2lmZGVmIE9TMk9SVU5JWAotI2lmbmRlZiBOT0ZUUAotICAgIGYg PSBmdHBhcHA7Ci0gICAgaWYgKCFmKSBmID0gIiI7Ci0gICAgaWYgKCFmWzBdKSBmID0gImZ0cCI7 Ci0gICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosZiwiICIscyxOVUxMKTsKLSNpZmRlZiBPUzIK LSAgICBwID0gbGluZSArIHN0cmxlbihmdHBhcHApOwotICAgIHdoaWxlIChwICE9IGxpbmUpIHsK LSAgICAgICAgaWYgKCpwID09ICcvJykgKnAgPSAnXFwnOwotICAgICAgICBwLS07Ci0gICAgfQot I2VuZGlmIC8qIE9TMiAqLwotI2Vsc2UgLyogTk9GVFAgKi8KLSAgICBja21ha21zZyhsaW5lLExJ TkJVRlNJWiwiZnRwICIscyxOVUxMLE5VTEwpOwotI2VuZGlmIC8qIE5PRlRQICovCi0jZWxzZSAv KiBPUzJPUlVOSVggKi8KLSAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWiwiZnRwICIscyxOVUxM LE5VTEwpOwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotI2VuZGlmIC8qIFZNUyAqLwotICAgIGNv bnJlcygpOwkJCQkvKiBNYWtlIGNvbnNvbGUgbm9ybWFsICAqLwotI2lmZGVmIERFQ19UQ1BJUAot ICAgIHByaW50ZigiXG4iKTsJCQkvKiBQcmV2ZW50IHByb21wdC1zdG9tcGluZyAqLwotI2VuZGlm IC8qIERFQ19UQ1BJUCAqLwotICAgIHggPSB6c2hjbWQobGluZSk7Ci0gICAgY29uY2IoKGNoYXIp ZXNjYXBlKTsKLSAgICByZXR1cm4oc3VjY2VzcyA9IHgpOwotfQotI2VuZGlmIC8qIFNZU0ZUUCAq LwotCi1pbnQKLWRvcGluZygpIHsJCQkJLyogUElORyBjb21tYW5kICovCi0gICAgY2hhciAqcDsJ CQkJLyoganVzdCBydW5zIHBpbmcgcHJvZ3JhbSAqLwotICAgIGludCB4OwotCi0gICAgaWYgKG5l dHdvcmspCQkJLyogSWYgd2UgaGF2ZSBhIGN1cnJlbnQgY29ubmVjdGlvbiAqLwotICAgICAgY2tz dHJuY3B5KGxpbmUsdHRuYW1lLExJTkJVRlNJWik7CS8qIGdldCB0aGUgaG9zdCBuYW1lICovCi0g ICAgZWxzZSAqbGluZSA9ICdcMCc7CQkJLyogYXMgZGVmYXVsdCBob3N0IHRvIGJlIHBpbmdlZC4g Ki8KLSAgICBmb3IgKHAgPSBsaW5lOyAqcDsgcCsrKQkJLyogUmVtb3ZlICI6c2VydmljZSIgZnJv bSBlbmQuICovCi0gICAgICBpZiAoKnAgPT0gJzonKSB7ICpwID0gJ1wwJzsgYnJlYWs7IH0KLSAg ICBpZiAoKHggPSBjbXR4dCgiSVAgaG9zdCBuYW1lIG9yIG51bWJlciIsIGxpbmUsICZzLCB4eHN0 cmluZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICBpZiAobm9wdXNoKSB7Ci0gICAgICAg IHByaW50ZigiP1NvcnJ5LCBQSU5HIGNvbW1hbmQgZGlzYWJsZWRcbiIpOwotICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLQotICAgIC8qIENvbnN0cnVjdCBQSU5HIGNvbW1hbmQg Ki8KLSNpZmRlZiBWTVMKLSNpZmRlZiBNVUxUSU5FVAkJCQkvKiBUR1YgTXVsdGlOZXQgKi8KLSAg ICBja21ha21zZyhsaW5lLExJTkJVRlNJWiwibXVsdGluZXQgcGluZyAiLHMsIiAvbnVtPTEiLE5V TEwpOwotI2Vsc2UKLSAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWiwicGluZyAiLHMsIiA1NiAx IixOVUxMKTsgLyogT3RoZXIgVk1TIFRDUC9JUCdzICovCi0jZW5kaWYgLyogTVVMVElORVQgKi8K LSNlbHNlCQkJCQkvKiBOb3QgVk1TICovCi0gICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosInBp bmcgIixzLE5VTEwsTlVMTCk7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgY29ucmVzKCk7CQkJCS8q IE1ha2UgY29uc29sZSBub3JtYWwgICovCi0jaWZkZWYgREVDX1RDUElQCi0gICAgcHJpbnRmKCJc biIpOwkJCS8qIFByZXZlbnQgcHJvbXB0LXN0b21waW5nICovCi0jZW5kaWYgLyogREVDX1RDUElQ ICovCi0gICAgeCA9IHpzaGNtZChsaW5lKTsKLSAgICBjb25jYigoY2hhcillc2NhcGUpOwotICAg IHJldHVybihzdWNjZXNzID0geCk7Ci19Ci0jZW5kaWYgLyogTk9QVVNIICovCi0jZW5kaWYgLyog VENQU09DS0VUICovCi0KLXN0YXRpYyBWT0lECi1kb2VuZCh4KSBpbnQgeDsgewotI2lmbmRlZiBO T1NQTAotICAgIC8qIFBvcCBmcm9tIGFsbCBGT1IvV0hJTEUvWElGL1NXSVRDSCdzICovCi0gICAg ZGVidWcoRjEwMSwiZG9lbmQgbWFjbHZsIDEiLCIiLG1hY2x2bCk7Ci0gICAgd2hpbGUgKChtYWNs dmwgPiAwKSAmJgotCSAgIChtX2FyZ1ttYWNsdmwtMV1bMF0pICYmCi0JICAgKGNtZHN0a1tjbWRs dmxdLnNyYyA9PSBDTURfTUQpICYmCi0JICAgKCFzdHJuY21wKG1fYXJnW21hY2x2bC0xXVswXSwi X3hpZiIsNCkgfHwKLQkgICAgIXN0cm5jbXAobV9hcmdbbWFjbHZsLTFdWzBdLCJfZm9yIiw0KSB8 fAotCSAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl93aGkiLDQpIHx8Ci0JICAgICFz dHJuY21wKG1fYXJnW21hY2x2bC0xXVswXSwiX3N3aSIsNCkpKSB7Ci0JZGVidWcoRjExMCwiRU5E IHBvcHBpbmciLG1fYXJnW21hY2x2bC0xXVswXSwwKTsKLQlkb2d0YShYWFBUQSk7CQkJLyogUHV0 IGFyZ3MgYmFjayAqLwotCXBvcGNsdmwoKTsJCQkvKiBQb3AgdXAgdHdvIGxldmVscyAqLwotCXBv cGNsdmwoKTsKLQlkZWJ1ZyhGMTAxLCJkb2VuZCBtYWNsdmwgMiIsIiIsbWFjbHZsKTsKLSAgICB9 Ci0gICAgaWYgKG1hY2x2bCA+IC0xKSB7Ci0JaWYgKG1ydmFsW21hY2x2bF0pCQkvKiBGcmVlIHBy ZXZpb3VzIHJldHZhbCBpZiBhbnkgKi8KLQkgIGZyZWUobXJ2YWxbbWFjbHZsXSk7Ci0JbXJ2YWxb bWFjbHZsXSA9IG1hbGxvYygxNik7CS8qIFJvb20gZm9yIHVwIHRvIDE1IGRpZ2l0cyAqLwotCWlm IChtcnZhbFttYWNsdmxdKQkJLyogUmVjb3JkIGN1cnJlbnQgcmV0dmFsICovCi0JICBja21ha21z ZyhtcnZhbFttYWNsdmxdLDE2LGNraXRvYSh4KSxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgfQotI2Vu ZGlmIC8qIE5PU1BMICovCi0gICAgcG9wY2x2bCgpOwkJCQkvKiBOb3cgcG9wIG91dCBvZiBtYWNy byBvciBUQUtFIGZpbGUgKi8KLSNpZm5kZWYgTk9TUEwKLSNpZmRlZiBERUJVRwotICAgIGlmIChk ZWJsb2cpIHsKLQlkZWJ1ZyhGMTAxLCJFTkQgbWFjbHZsIDMiLCIiLG1hY2x2bCk7Ci0JZGVidWco RjExMSwiRU5EIG1ydmFsW21hY2x2bF0iLG1ydmFsW21hY2x2bF0sbWFjbHZsKTsKLQlkZWJ1ZyhG MTExLCJFTkQgbXJ2YWxbbWFjbHZsKzFdIixtcnZhbFttYWNsdmwrMV0sbWFjbHZsKzEpOwotICAg IH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi19Ci0KLSNpZmRlZiBD S1JPT1QKLWludAotZG9jaHJvb3QoKSB7Ci0gICAgaWYgKCh4ID0gY21kaXIoIk5hbWUgb2YgbmV3 IHJvb3QgZGlyZWN0b3J5IiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewotCWlmICh4ID09IC0zKSB7 Ci0JICAgIHByaW50ZigiP0RpcmVjdG9yeSBuYW1lIHJlcXVpcmVkXG4iKTsKLQkgICAgcmV0dXJu KC05KTsKLQl9Ci0JcmV0dXJuKHgpOwotICAgIH0KLSAgICBja3N0cm5jcHkobGluZSxzLExJTkJV RlNJWik7Ci0gICAgcyA9IGxpbmU7Ci0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eCk7Ci0gICAgcyA9IGJyc3RyaXAocyk7Ci0gICAgeCA9IHpzZXRyb290KHMpOwotICAgIGlmICh4 IDwgMCkgewotCWNoYXIgKiBtID0gTlVMTDsKLQlzd2l0Y2ggKHgpIHsKLQkgIGNhc2UgLTE6Ci0J ICBjYXNlIC0yOiBtID0gIk5vdCBhIGRpcmVjdG9yeSI7IGJyZWFrOwotCSAgY2FzZSAtMzogbSA9 ICJJbnRlcm5hbCBlcnJvciI7IGJyZWFrOwotCSAgY2FzZSAtNDogbSA9ICJBY2Nlc3MgZGVuaWVk IjsgYnJlYWs7Ci0JICBjYXNlIC01OiBtID0gIk9mZiBsaW1pdHMiOyBicmVhazsKLQl9Ci0JaWYg KG0pIHByaW50ZigiJXM6IFwiJXNcIlxuIiwgbSwgcyk7Ci0JcmV0dXJuKG0gPyAtOSA6IC0yKTsK LSAgICB9IGVsc2UgewotCW5vcHVzaCA9IDE7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9 Ci19Ci0jZW5kaWYgLyogQ0tST09UICovCi0KLSNpZm5kZWYgTk9YRkVSCi1zdGF0aWMgY2hhciAq IGFzbmJ1ZiA9IE5VTEw7CQkvKiBBcy1uYW1lIGJ1ZmZlciBwb2ludGVyICovCi0KLWNoYXIgc25k eG5hbVtdID0geyAiX2FycmF5X3hfIiB9OwkvKiAod2l0aCByZXBsYWNlYWJsZSB4ISkgKi8KLQot LyoKLSAgVGhlIG5ldyBTRU5EIGNvbW1hbmQsIHJlcGxhY2luZyBCU0VORCwgQ1NFTkQsIFBTRU5E LCBldGMgZXRjLgotICBDYWxsIHdpdGggY3ggPSB0b3AtbGV2ZWwga2V5d29yZCB2YWx1ZS4gIFJl dHVybnM6Ci0gICAgPCAwICBPbiBwYXJzZSBlcnJvci4KLSAgICAwICAgIE9uIG90aGVyIHR5cGUg b2YgZmFpbHVyZSAoZS5nLiByZXF1ZXN0ZWQgb3BlcmF0aW9uIG5vdCBhbGxvd2VkKS4KLSAgICAx ICAgIE9uIHN1Y2Nlc3Mgd2l0aCBzc3RhdGUgc2V0IHRvICdzJyBzbyBwcm90b2NvbCB3aWxsIGJl Z2luLgotKi8KLQotLyogIEQgTyBYIFMgRSBOIEQgIC0tICBQYXJzZSBTRU5EIGFuZCByZWxhdGVk IGNvbW1hbmRzIHdpdGggc3dpdGNoZXMgICovCi0KLWludAotZG94c2VuZChjeCkgaW50IGN4OyB7 Ci0gICAgaW50IGMsIGksIG4sIHdpbGQsIGNvbmZpcm1lZCA9IDA7CS8qIFdvcmtlcnMgKi8KLSAg ICBpbnQgeCwgeTsJCQkJLyogb2YgdGhlIHdvcmxkLi4uICovCi0gICAgaW50IGdldHZhbCA9IDA7 CQkJLyogV2hldGhlciB0byBnZXQgc3dpdGNoIHZhbHVlICovCi0gICAgZXh0ZXJuIGNoYXIgKiBz bmRfbW92ZTsJCS8qIERpcmVjdG9yeSB0byBtb3ZlIHNlbnQgZmlsZXMgdG8gKi8KLSAgICBleHRl cm4gY2hhciAqIHNuZF9yZW5hbWU7CQkvKiBXaGF0IHRvIHJlbmFtZSBzZW50IGZpbGVzIHRvICov Ci0gICAgZXh0ZXJuIGNoYXIgKiBmaWxlZmlsZTsJCS8qIEZpbGUgY29udGFpbmluZyBmaWxlbmFt ZXMgdG8gc2VuZCAqLwotICAgIGV4dGVybiBpbnQgeGZpbGV0eXBlOwkJLyogU2VuZCBvbmx5IHRl eHQgKG9yIGJpbmFyeSkgZmlsZXMgKi8KLSAgICBleHRlcm4gc3RydWN0IGtleXRhYiBwYXRodGFi W107CS8qIFBBVEhOQU1FUyBvcHRpb24ga2V5d29yZHMgKi8KLSAgICBleHRlcm4gaW50IG5wYXRo dGFiOwkJLyogSG93IG1hbnkgb2YgdGhlbSAqLwotICAgIGV4dGVybiBpbnQgcmVjdXJzaXZlOwkJ LyogUmVjdXJzaXZlIGRpcmVjdG9yeSB0cmF2ZXJzYWwgKi8KLSAgICBleHRlcm4gaW50IHJwcmlu dGY7CQkJLyogUkVNT1RFIFBSSU5UIGZsYWcgKi8KLSAgICBleHRlcm4gaW50IGZkaXNwbGE7CQkJ LyogVFJBTlNGRVIgRElTUExBWSBzZXR0aW5nICovCi0gICAgZXh0ZXJuIGludCBza2lwYnVwOwkJ CS8qIFNraXAgYmFja3VwIGZpbGVzIHdoZW4gc2VuZGluZyAqLwotICAgIHN0cnVjdCBzdHJpbmdp bnQgcHZbU05EX01BWCsxXTsJLyogVGVtcG9yYXJ5IGFycmF5IGZvciBzd2l0Y2ggdmFsdWVzICov Ci0gICAgc3RydWN0IEZEQiBzZiwgc3csIGZsLCBjbTsJCS8qIEZEQnMgZm9yIGVhY2ggcGFyc2Ug ZnVuY3Rpb24gKi8KLSAgICBpbnQgbWxpc3QgPSAwOwkJCS8qIEZsYWcgZm9yIE1TRU5EIG9yIE1N T1ZFICovCi0gICAgY2hhciAqIG07CQkJCS8qIEZvciBtYWtpbmcgaGVscCBtZXNzYWdlcyAqLwot ICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIHByb3Rvc1tdOwkvKiBGaWxlIHRyYW5zZmVyIHByb3Rv Y29scyAqLwotICAgIGV4dGVybiBpbnQgeGZyeGxhLCBnX3hmcnhsYSwgbnByb3RvczsKLSAgICBl eHRlcm4gY2hhciBzbmRiZWZvcmVbXSwgc25kYWZ0ZXJbXSwgKnNuZGV4Y2VwdFtdOyAvKiBTZWxl Y3Rpb24gY3JpdGVyaWEgKi8KLSAgICBleHRlcm4gY2hhciBzbmRuYmVmb3JlW10sIHNuZG5hZnRl cltdOwotICAgIGV4dGVybiBDS19PRkZfVCBzbmRzbWFsbGVyLCBzbmRsYXJnZXIsIGNhbGlicmF0 ZTsKLSNpZm5kZWYgTk9TUEwKLSAgICBpbnQgcmFuZ2VbMl07CQkJLyogQXJyYXkgcmFuZ2UgKi8K LSAgICBjaGFyICoqIGFwID0gTlVMTDsJCQkvKiBBcnJheSBwb2ludGVyICovCi0gICAgaW50IGFy cmF5eCA9IC0xOwkJCS8qIEFycmF5IGluZGV4ICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lm ZGVmIE5FV0ZUUAotICAgIGlmICgoZnRwZ2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmIGZ0 cGlzb3BlbigpKSkgewotCWlmIChjeCA9PSBYWE1BSSkgewotCSAgICBwcmludGYoIj9Tb3JyeSwg Tm8gTUFJTCB3aXRoIEZUUFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCXJldHVybihkb2Z0 cHB1dChjeCwwKSk7Ci0gICAgfQotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCi0gICAgZm9yIChpID0g MDsgaSA8PSBTTkRfTUFYOyBpKyspIHsJLyogSW5pdGlhbGl6ZSBzd2l0Y2ggdmFsdWVzICovCi0J cHZbaV0uc3ZhbCA9IE5VTEw7CQkvKiB0byBudWxsIHBvaW50ZXJzICovCi0JcHZbaV0uaXZhbCA9 IC0xOwkJLyogYW5kIC0xIGludCB2YWx1ZXMgKi8KLQlwdltpXS53dmFsID0gKENLX09GRl9UKS0x OwkvKiBhbmQgLTEgd2lkZSB2YWx1ZXMgKi8KLSAgICB9Ci0jaWZuZGVmIE5PU1BMCi0gICAgcmFu Z2VbMF0gPSAtMTsKLSAgICByYW5nZVsxXSA9IC0xOwotICAgIHNuZHhpbiA9IC0xOwkJCS8qIEFy cmF5IGluZGV4ICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICBzbmRhcnJheSA9IE5VTEw7CQkJ LyogQXJyYXkgcG9pbnRlciAqLwotCi0jaWZkZWYgVU5JWE9ST1NLCi0gICAgZ19tYXRjaGRvdCA9 IG1hdGNoZG90OwkJLyogTWF0Y2ggZG90IGZpbGVzICovCi0jZW5kaWYgLyogVU5JWE9ST1NLICov Ci0gICAgZ19yZWN1cnNpdmUgPSByZWN1cnNpdmU7CQkvKiBSZWN1cnNpdmUgc2VuZGluZyAqLwot ICAgIHJlY3Vyc2l2ZSA9IDA7CQkJLyogU2F2ZSBnbG9iYWwgdmFsdWUsIHNldCBsb2NhbCAqLwot ICAgIGRlYnVnKEYxMDEsInhzZW5kIGVudHJ5IGZuY252IiwiIixmbmNudik7Ci0KLSAgICAvKiBQ cmVzZXQgc3dpdGNoIHZhbHVlcyBiYXNlZCBvbiB0b3AtbGV2ZWwgY29tbWFuZCB0aGF0IGNhbGxl ZCB1cyAqLwotCi0gICAgc3dpdGNoIChjeCkgewotICAgICAgY2FzZSBYWE1TRToJCQkvKiBNU0VO RCAqLwotCW1saXN0ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIFhYQ1NFTjoJCQkvKiBDU0VORCAq LwotCXB2W1NORF9DTURdLml2YWwgPSAxOyBicmVhazsKLSAgICAgIGNhc2UgWFhNTU9WRToJCQkv KiBNTU9WRSAqLwotCW1saXN0ID0gMTsKLSAgICAgIGNhc2UgWFhNT1ZFOgkJCS8qIE1PVkUgKi8K LQlwdltTTkRfREVMXS5pdmFsID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIFhYUlNFTjoJCQkvKiBS RVNFTkQgKi8KLQlwdltTTkRfQklOXS5pdmFsID0gMTsJCS8qIEltcGxpZXMgL0JJTkFSWSAqLwot CXB2W1NORF9SRVNdLml2YWwgPSAxOyBicmVhazsKLSAgICAgIGNhc2UgWFhNQUk6CQkJLyogTUFJ TCAqLwotCXB2W1NORF9NQUldLml2YWwgPSAxOyBicmVhazsKLSAgICB9Ci0KLSAgICAvKiBTZXQg dXAgY2hhaW5lZCBwYXJzZSBmdW5jdGlvbnMuLi4gKi8KLQotICAgIGNtZmRiaSgmc3csCQkJCS8q IEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KLQkgICBfQ01LRVksCQkJLyogZmNvZGUg Ki8KLQkgICAiRmlsZW5hbWUsIG9yIHN3aXRjaCIsCS8qIGhscG1zZyAqLwotCSAgICIiLAkJCQkv KiBkZWZhdWx0ICovCi0JICAgIiIsCQkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0jaWZkZWYg Tk9NU0VORAotCSAgIG5zbmR0YWIsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXpl ICovCi0jZWxzZQotCSAgIG1saXN0ID8gbm1zbmR0YWIgOiBuc25kdGFiLAkvKiBhZGR0bCBudW1l cmljIGRhdGEgMTogdGJsIHNpemUgKi8KLSNlbmRpZiAvKiBOT01TRU5EICovCi0JICAgNCwJCQkJ LyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotCSAgIHh4c3RyaW5nLAkJCS8q IFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSNpZmRlZiBOT01TRU5ECi0JICAgc25kdGFiLAkJCS8q IEtleXdvcmQgdGFibGUgKi8KLSNlbHNlCi0JICAgbWxpc3QgPyBtc25kdGFiIDogc25kdGFiLAot I2VuZGlmIC8qIE5PTVNFTkQgKi8KLQkgICAmc2YJCQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAq LwotCSAgICk7Ci0gICAgY21mZGJpKCZzZiwJCQkJLyogMm5kIEZEQiAtIGZpbGUgdG8gc2VuZCAq LwotCSAgIF9DTUlGSSwJCQkvKiBmY29kZSAqLwotCSAgICJGaWxlKHMpIHRvIHNlbmQiLAkJLyog aGxwbXNnICovCi0JICAgIiIsCQkJCS8qIGRlZmF1bHQgKi8KLQkgICAiIiwJCQkJLyogYWRkdGwg c3RyaW5nIGRhdGEgKi8KLQkgICBub2xpbmtzLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICov Ci0JICAgMCwJCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLQkgICB4eHN0cmluZywKLQkg ICBOVUxMLAotCSAgIG1saXN0ID8gJmNtIDogJmZsCi0JICAgKTsKLSAgICBjbWZkYmkoJmZsLAkJ CQkvKiAzcmQgRkRCIC0gY29tbWFuZCB0byBzZW5kIGZyb20gKi8KLQkgICBfQ01GTEQsCQkJLyog ZmNvZGUgKi8KLQkgICAiQ29tbWFuZCIsCQkJLyogaGxwbXNnICovCi0JICAgIiIsCQkJCS8qIGRl ZmF1bHQgKi8KLQkgICAiIiwJCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkgICAwLAkJCQkv KiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotCSAgIDAsCQkJCS8qIGFkZHRsIG51bWVyaWMgZGF0 YSAyICovCi0JICAgeHhzdHJpbmcsCi0JICAgTlVMTCwKLQkgICAmY20KLQkgICApOwotICAgIGNt ZmRiaSgmY20sCQkJCS8qIDR0aCBGREIgLSBDb25maXJtYXRpb24gKi8KLQkgICBfQ01DRk0sCQkJ LyogZmNvZGUgKi8KLQkgICAiIiwJCQkJLyogaGxwbXNnICovCi0JICAgIiIsCQkJCS8qIGRlZmF1 bHQgKi8KLQkgICAiIiwJCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkgICAwLAkJCQkvKiBh ZGR0bCBudW1lcmljIGRhdGEgMSAqLwotCSAgIDAsCQkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAy ICovCi0JICAgTlVMTCwKLQkgICBOVUxMLAotCSAgIE5VTEwKLQkgICApOwotCi0gICAgd2hpbGUg KDEpIHsJCQkJLyogUGFyc2UgMCBvciBtb3JlIHN3aXRjaGVzICovCi0JeCA9IGNtZmRiKCZzdyk7 CQkJLyogUGFyc2Ugc29tZXRoaW5nICovCi0JZGVidWcoRjEwMSwieHNlbmQgY21mZGIiLCIiLHgp OwotCWlmICh4IDwgMCkJCQkvKiBFcnJvciAqLwotCSAgZ290byB4c2VuZHg7CQkJLyogb3IgcmVw YXJzZSBuZWVkZWQgKi8KLQlpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKQkvKiBCcmVhayBv dXQgaWYgbm90IGEgc3dpdGNoICovCi0JICBicmVhazsKLS8qCi0gIFRoZXkgZ2F2ZSBhIHN3aXRj aCwgYnV0IGxldCdzIHNlZSBob3cgdGhleSB0ZXJtaW5hdGVkIGl0LgotICBJZiB0aGV5IGVuZGVk IGl0IHdpdGggOiBvciA9LCB0aGVuIHdlIG11c3QgcGFyc2UgYSB2YWx1ZS4KLSAgSWYgdGhleSBl bmRlZCBpdCB3aXRoIGFueXRoaW5nIGVsc2UsIHRoZW4gd2UgbXVzdCBOT1QgcGFyc2UgYSB2YWx1 ZS4KLSovCi0JYyA9IGNtZ2JyaygpOwkJCS8qIEdldCBicmVhayBjaGFyYWN0ZXIgKi8KLQlnZXR2 YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpOyAvKiB0byBzZWUgaG93IHRoZXkgZW5kZWQgdGhl IHN3aXRjaCAqLwotCWlmIChnZXR2YWwgJiYgIShjbXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7 Ci0JICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYXJndW1lbnRzXG4iKTsK LQkgICAgeCA9IC05OwotCSAgICBnb3RvIHhzZW5keDsKLQl9Ci0JaWYgKCFnZXR2YWwgJiYgKGNt Z2t3ZmxncygpICYgQ01fQVJHKSkgewotCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJl cyBhbiBhcmd1bWVudFxuIik7Ci0JICAgIHggPSAtOTsKLQkgICAgZ290byB4c2VuZHg7Ci0JfQot CW4gPSBjbXJlc3VsdC5ucmVzdWx0OwkJLyogTnVtZXJpYyByZXN1bHQgPSBzd2l0Y2ggdmFsdWUg Ki8KLQlkZWJ1ZyhGMTAxLCJ4c2VuZCBzd2l0Y2giLCIiLG4pOwotCi0Jc3dpdGNoIChuKSB7CQkJ LyogUHJvY2VzcyB0aGUgc3dpdGNoICovCi0JICBjYXNlIFNORF9DTUQ6CQkJLyogVGhlc2UgdGFr ZSBubyBhcmdzICovCi0JICAgIGlmIChub3B1c2gpIHsKLQkJcHJpbnRmKCI/U29ycnksIHN5c3Rl bSBjb21tYW5kIGFjY2VzcyBpcyBkaXNhYmxlZFxuIik7Ci0JCXggPSAtOTsKLQkJZ290byB4c2Vu ZHg7Ci0JICAgIH0KLSNpZmRlZiBQSVBFU0VORAotCSAgICBlbHNlIGlmIChzbmRmaWx0ZXIpIHsK LQkJcHJpbnRmKAotIj9Tb3JyeSwgbm8gU0VORCAvQ09NTUFORCBvciBDU0VORCB3aGVuIFNFTkQg RklMVEVSIHNlbGVjdGVkXG4iKTsKLQkJeCA9IC05OwotCQlnb3RvIHhzZW5keDsKLQkgICAgfQot I2VuZGlmIC8qIFBJUEVTRU5EICovCi0JICAgIHN3LmhscG1zZyA9ICJDb21tYW5kLCBvciBzd2l0 Y2giOyAvKiBDaGFuZ2UgaGVscCBtZXNzYWdlICovCi0JICAgIHB2W25dLml2YWwgPSAxOwkJLyog SnVzdCBzZXQgdGhlIGZsYWcgKi8KLQkgICAgcHZbU05EX0FSUl0uaXZhbCA9IDA7Ci0JICAgIGJy ZWFrOwotCi0JICBjYXNlIFNORF9SRUM6CQkJLyogL1JFQ1VSU0lWRSAqLwotCSAgICByZWN1cnNp dmUgPSAyOwkJLyogU2V0IHRoZSByZWFsIHZhcmlhYmxlICovCi0JICAgIHB2W1NORF9QVEhdLml2 YWwgPSBQQVRIX1JFTDsgLyogR2l2ZSB0aGVtIHJlbGF0aXZlIHBhdGhuYW1lcyAqLwotCSAgICBw dltuXS5pdmFsID0gMTsJCS8qIEp1c3Qgc2V0IHRoZSBmbGFnICovCi0JICAgIGJyZWFrOwotCi0J ICBjYXNlIFNORF9SRVM6CQkJLyogL1JFQ09WRVIgKHJlc2VuZCkgKi8KLQkgICAgcHZbU05EX0FS Ul0uaXZhbCA9IDA7Ci0JICAgIHB2W1NORF9CSU5dLml2YWwgPSAxOwkvKiBJbXBsaWVzIC9CSU5B UlkgKi8KLQkgIGNhc2UgU05EX05PQjoJCQkvKiAvTk9CQUNLVVAgKi8KLQkgIGNhc2UgU05EX0RF TDoJCQkvKiAvREVMRVRFICovCi0JICBjYXNlIFNORF9TSEg6CQkJLyogL1FVSUVUICovCi0JICAg IHB2W25dLml2YWwgPSAxOwkJLyogSnVzdCBzZXQgdGhlIGZsYWcgKi8KLQkgICAgYnJlYWs7Ci0K LSNpZmRlZiBVTklYT1JPU0sKLS8qIExpa2UgcmVjdXJzaXZlLCB0aGVzZSBhcmUgc2V0IGltbWVk aWF0ZWx5IGJlY2F1c2UgdGhleSBhZmZlY3QgY21pZmkoKSAqLwotCSAgY2FzZSBTTkRfRE9UOgkJ CS8qIC9ET1RGSUxFUyAqLwotCSAgICBtYXRjaGRvdCA9IDE7Ci0JICAgIGJyZWFrOwotCSAgY2Fz ZSBTTkRfTk9EOgkJCS8qIC9OT0RPVEZJTEVTICovCi0JICAgIG1hdGNoZG90ID0gMDsKLQkgICAg YnJlYWs7Ci0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0KLQkgIC8qIEZpbGUgdHJhbnNmZXIgbW9k ZXMgLSBlYWNoIHVuZG9lcyB0aGUgb3RoZXJzICovCi0KLQkgIGNhc2UgU05EX0JJTjoJCQkvKiBC aW5hcnkgKi8KLQkgIGNhc2UgU05EX1RYVDoJCQkvKiBUZXh0ICovCi0JICBjYXNlIFNORF9JTUc6 CQkJLyogSW1hZ2UgKi8KLQkgIGNhc2UgU05EX0xCTDoJCQkvKiBMYWJlbGVkICovCi0JICAgIHB2 W1NORF9CSU5dLml2YWwgPSAwOwotCSAgICBwdltTTkRfVFhUXS5pdmFsID0gMDsKLQkgICAgcHZb U05EX0lNR10uaXZhbCA9IDA7Ci0JICAgIHB2W1NORF9MQkxdLml2YWwgPSAwOwotCSAgICBwdltu XS5pdmFsID0gMTsKLQkgICAgYnJlYWs7Ci0KLSNpZmRlZiBDS1NZTUxJTksKLQkgIGNhc2UgU05E X0xOSzoKLQkgIGNhc2UgU05EX05MSzoKLQkgICAgbm9saW5rcyA9IChuID09IFNORF9OTEspID8g MiA6IDA7Ci0JICAgIGNtZmRiaSgmc2YsCQkJLyogUmVkbyBjbWlmaSgpICovCi0JCSAgIF9DTUlG SSwJCS8qIGZjb2RlICovCi0JCSAgICJGaWxlKHMpIHRvIHNlbmQiLAkvKiBobHBtc2cgKi8KLQkJ ICAgIiIsCQkJLyogZGVmYXVsdCAqLwotCQkgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAq LwotCQkgICBub2xpbmtzLAkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLQkJICAgMCwJCQkv KiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotCQkgICB4eHN0cmluZywKLQkJICAgTlVMTCwKLQkJ ICAgbWxpc3QgPyAmY20gOiAmZmwKLQkJICAgKTsKLQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tT WU1MSU5LICovCi0KLQkgIGNhc2UgU05EX0VYQzoJCQkvKiBFeGNsdWRlcyAqLwotCSAgICBpZiAo IWdldHZhbCkgYnJlYWs7Ci0JICAgIGlmICgoeCA9IGNtZmxkKCJQYXR0ZXJuIiwiIiwmcyx4eHN0 cmluZykpIDwgMCkgewotCQlpZiAoeCA9PSAtMykgewotCQkgICAgcHJpbnRmKCI/UGF0dGVybiBy ZXF1aXJlZFxuIik7Ci0JCSAgICB4ID0gLTk7Ci0JCX0KLQkJZ290byB4c2VuZHg7Ci0JICAgIH0K LQkgICAgaWYgKHB2W25dLnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7Ci0JICAgIHkgPSBzdHJsZW4o cyk7Ci0JICAgIGlmICh5ID4gMjU2KSB7Ci0JCXByaW50ZigiP1BhdHRlcm4gdG9vIGxvbmcgLSAy NTYgbWF4XG4iKTsKLQkJeCA9IC05OwotCQlnb3RvIHhzZW5keDsKLQkgICAgfQotCSAgICBwdltu XS5zdmFsID0gbWFsbG9jKHkrMSk7Ci0JICAgIGlmIChwdltuXS5zdmFsKSB7Ci0JCXN0cmNweShw dltuXS5zdmFsLHMpOwkvKiBzYWZlICovCi0JCXB2W25dLml2YWwgPSAxOwotCSAgICB9Ci0JICAg IGJyZWFrOwotCi0JICBjYXNlIFNORF9NT1Y6CQkJLyogTU9WRSBhZnRlciAqLwotCSAgY2FzZSBT TkRfUkVOOgkJCS8qIFJFTkFNRSBhZnRlciAqLwotCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0J ICAgIGlmICgoeCA9IGNtZmxkKG4gPT0gU05EX01PViA/Ci0JICAgImRldmljZSBhbmQvb3IgZGly ZWN0b3J5IGZvciBzb3VyY2UgZmlsZSBhZnRlciBzZW5kaW5nIiA6Ci0JICAgIm5ldyBuYW1lIGZv ciBzb3VyY2UgZmlsZSBhZnRlciBzZW5kaW5nIiwKLQkJCSAgICIiLAotCQkJICAgJnMsCi0JCQkg ICBuID09IFNORF9NT1YgPyB4eHN0cmluZyA6IE5VTEwKLQkJCSAgICkpIDwgMCkgewotCQlpZiAo eCA9PSAtMykgewotCQkgICAgcHJpbnRmKCIlc1xuIiwgbiA9PSBTTkRfTU9WID8KLQkJCSAgICI/ RGVzdGluYXRpb24gcmVxdWlyZWQiIDoKLQkJCSAgICI/TmV3IG5hbWUgcmVxdWlyZWQiCi0JCQkg ICApOwotCQkgICAgeCA9IC05OwotCQl9Ci0JCWdvdG8geHNlbmR4OwotCSAgICB9Ci0JICAgIGlm IChwdltuXS5zdmFsKSBmcmVlKHB2W25dLnN2YWwpOwotCSAgICBzID0gYnJzdHJpcChzKTsKLQkg ICAgeSA9IHN0cmxlbihzKTsKLQkgICAgaWYgKHkgPiAwKSB7Ci0JCXB2W25dLnN2YWwgPSBtYWxs b2MoeSsxKTsKLQkJaWYgKHB2W25dLnN2YWwpIHsKLQkJICAgIHN0cmNweShwdltuXS5zdmFsLHMp OyAvKiBzYWZlICovCi0JCSAgICBwdltuXS5pdmFsID0gMTsKLQkJfQotCSAgICB9Ci0JICAgIGJy ZWFrOwotCi0JICBjYXNlIFNORF9TTUE6CQkJLyogU21hbGxlciAvIGxhcmdlciB0aGFuICovCi0J ICBjYXNlIFNORF9MQVI6IHsKLQkgICAgICBDS19PRkZfVCB3OwotCSAgICAgIGlmICghZ2V0dmFs KSBicmVhazsKLQkgICAgICBpZiAoKHggPSBjbW51bXcoIlNpemUgaW4gYnl0ZXMiLCIwIiwxMCwm dyx4eHN0cmluZykpIDwgMCkKLQkJZ290byB4c2VuZHg7Ci0JICAgICAgcHZbbl0ud3ZhbCA9IHc7 Ci0JICAgICAgYnJlYWs7Ci0JICB9Ci0JICBjYXNlIFNORF9BRlQ6CQkJLyogU2VuZCAvQUZURVI6 ZGF0ZS10aW1lICovCi0JICBjYXNlIFNORF9CRUY6CQkJLyogU2VuZCAvQkVGT1JFOmRhdGUtdGlt ZSAqLwotCSAgY2FzZSBTTkRfTkFGOgkJCS8qIFNlbmQgL05PVC1BRlRFUjpkYXRlLXRpbWUgKi8K LQkgIGNhc2UgU05EX05CRToJCQkvKiBTZW5kIC9OT1QtQkVGT1JFOmRhdGUtdGltZSAqLwotCSAg ICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0JICAgIGlmICgoeCA9IGNtZGF0ZSgiRmlsZSBkYXRlLXRp bWUiLCIiLCZzLDAseHhzdHJpbmcpKSA8IDApIHsKLQkJaWYgKHggPT0gLTMpIHsKLQkJICAgIHBy aW50ZigiP0RhdGUtdGltZSByZXF1aXJlZFxuIik7Ci0JCSAgICB4ID0gLTk7Ci0JCX0KLQkJZ290 byB4c2VuZHg7Ci0JICAgIH0KLQkgICAgaWYgKHB2W25dLnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7 Ci0JICAgIHB2W25dLnN2YWwgPSBtYWxsb2MoKGludClzdHJsZW4ocykrMSk7Ci0JICAgIGlmIChw dltuXS5zdmFsKSB7Ci0JCXN0cmNweShwdltuXS5zdmFsLHMpOwkvKiBzYWZlICovCi0JCXB2W25d Lml2YWwgPSAxOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlIFNORF9NQUk6CQkJLyog U2VuZCBhcyBtYWlsICg9IE1BSUwpICovCi0jaWZkZWYgSUtTRAotCSAgICBpZiAoaW5zZXJ2ZXIg JiYgIUVOQUJMRUQoZW5fbWFpKSkgewotCQlwcmludGYoIj9Tb3JyeSwgc2VuZGluZyBmaWxlcyBh cyBtYWlsIGlzIGRpc2FibGVkXG4iKTsKLQkJcmV0dXJuKC05KTsKLQkgICAgfQotI2VuZGlmIC8q IElLU0QgKi8KLQkgICAgcHZbbl0uaXZhbCA9IDE7Ci0JICAgIGlmICghZ2V0dmFsKSBicmVhazsK LQkgICAgaWYgKCh4ID0gY21mbGQoImUtbWFpbCBhZGRyZXNzIiwiIiwmcyx4eHN0cmluZykpIDwg MCkgewotCQlpZiAoeCA9PSAtMykgewotCQkgICAgcHJpbnRmKCI/YWRkcmVzcyByZXF1aXJlZFxu Iik7Ci0JCSAgICB4ID0gLTk7Ci0JCX0KLQkJZ290byB4c2VuZHg7Ci0JICAgIH0KLQkgICAgcyA9 IGJyc3RyaXAocyk7Ci0JICAgIGlmIChwdltuXS5zdmFsKSBmcmVlKHB2W25dLnN2YWwpOwotCSAg ICBwdltuXS5zdmFsID0gbWFsbG9jKChpbnQpc3RybGVuKHMpKzEpOwotCSAgICBpZiAocHZbbl0u c3ZhbCkKLQkgICAgICBzdHJjcHkocHZbbl0uc3ZhbCxzKTsJLyogc2FmZSAqLwotCSAgICBicmVh azsKLQotCSAgY2FzZSBTTkRfUFJJOgkJCS8qIFNlbmQgdG8gYmUgcHJpbnRlZCAoUkVNT1RFIFBS SU5UKSAqLwotI2lmZGVmIElLU0QKLQkgICAgaWYgKGluc2VydmVyICYmICFFTkFCTEVEKGVuX21h aSkpIHsKLQkJcHJpbnRmKCI/U29ycnksIHNlbmRpbmcgZmlsZXMgZm9yIHByaW50aW5nIGlzIGRp c2FibGVkXG4iKTsKLQkJcmV0dXJuKC05KTsKLQkgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQkg ICAgcHZbbl0uaXZhbCA9IDE7Ci0JICAgIGlmICghZ2V0dmFsKSBicmVhazsKLQkgICAgaWYgKCh4 ID0gY21mbGQoIlByaW50IG9wdGlvbnMiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotCSAgICAgIGlm ICh4ICE9IC0zKSBnb3RvIHhzZW5keDsKLQkgICAgcyA9IGJyc3RyaXAocyk7Ci0JICAgIGlmIChw dltuXS5zdmFsKSBmcmVlKHB2W25dLnN2YWwpOwotCSAgICBwdltuXS5zdmFsID0gbWFsbG9jKChp bnQpc3RybGVuKHMpKzEpOwotCSAgICBpZiAocHZbbl0uc3ZhbCkKLQkgICAgICBzdHJjcHkocHZb bl0uc3ZhbCxzKTsJLyogc2FmZSAqLwotCSAgICBicmVhazsKLQotCSAgY2FzZSBTTkRfQVNOOgkJ CS8qIEFzLW5hbWUgKi8KLQkgICAgZGVidWcoRjEwMSwieHNlbmQgL2FzLW5hbWUgZ2V0dmFsIiwi IixnZXR2YWwpOwotCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0JICAgIGlmICgoeCA9IGNtZmxk KCJOYW1lIHRvIHNlbmQgdW5kZXIiLCIiLCZzLE5VTEwpKSA8IDApIHsKLQkJaWYgKHggPT0gLTMp IHsKLQkJICAgIHByaW50ZigiP25hbWUgcmVxdWlyZWRcbiIpOwotCQkgICAgeCA9IC05OwotCQl9 Ci0JCWdvdG8geHNlbmR4OwotCSAgICB9Ci0JICAgIHMgPSBicnN0cmlwKHMpOwotCSAgICBpZiAo KHkgPSBzdHJsZW4ocykpID4gMCkgewotCQlpZiAocHZbbl0uc3ZhbCkgZnJlZShwdltuXS5zdmFs KTsKLQkJcHZbbl0uc3ZhbCA9IG1hbGxvYyh5KzEpOwotCQlpZiAocHZbbl0uc3ZhbCkgewotCQkg ICAgc3RyY3B5KHB2W25dLnN2YWwscyk7IC8qIHNhZmUgKi8KLQkJICAgIHB2W25dLml2YWwgPSAx OwotCQl9Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgU05EX1NUQTogewkJLyogU3Rh cnRpbmcgcG9zaXRpb24gKD0gUFNFTkQpICovCi0JICAgICAgQ0tfT0ZGX1QgdzsKLQkgICAgICBp ZiAoIWdldHZhbCkgYnJlYWs7Ci0JICAgICAgaWYgKCh4ID0gY21udW13KCIwLWJhc2VkIHBvc2l0 aW9uIiwiMCIsMTAsJncseHhzdHJpbmcpKSA8IDApCi0JCWdvdG8geHNlbmR4OwotCSAgICAgIHB2 W25dLnd2YWwgPSB3OwotCSAgICAgIGJyZWFrOwotCSAgfQotCSAgY2FzZSBTTkRfUFJPOgkJCS8q IFByb3RvY29sIHRvIHVzZSAqLwotCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0JICAgIGlmICgo eCA9IGNta2V5KHByb3RvcyxucHJvdG9zLCJGaWxlLXRyYW5zZmVyIHByb3RvY29sIiwiIiwKLQkJ CSAgIHh4c3RyaW5nKSkgPCAwKSB7Ci0JCWlmICh4ID09IC0zKSB7Ci0JCSAgICBwcmludGYoIj9u YW1lIG9mIHByb3RvY29sIHJlcXVpcmVkXG4iKTsKLQkJICAgIHggPSAtOTsKLQkJfQotCQlnb3Rv IHhzZW5keDsKLQkgICAgfQotCSAgICBwdltuXS5pdmFsID0geDsKLQkgICAgYnJlYWs7Ci0KLSNp ZmRlZiBQSVBFU0VORAotCSAgY2FzZSBTTkRfRkxUOgkJCS8qIEZpbHRlciAqLwotCSAgICBkZWJ1 ZyhGMTAxLCJ4c2VuZCAvZmlsdGVyIGdldHZhbCIsIiIsZ2V0dmFsKTsKLQkgICAgaWYgKCFnZXR2 YWwpIGJyZWFrOwotCSAgICBpZiAoKHggPSBjbWZsZCgiRmlsdGVyIHByb2dyYW0gdG8gc2VuZCB0 aHJvdWdoIiwiIiwmcyxOVUxMKSkgPCAwKSB7Ci0JCWlmICh4ID09IC0zKQotCQkgIHMgPSAiIjsK LQkJZWxzZQotCQkgIGdvdG8geHNlbmR4OwotCSAgICB9Ci0JICAgIGlmICgqcykgcyA9IGJyc3Ry aXAocyk7Ci0JICAgIHkgPSBzdHJsZW4ocyk7Ci0JICAgIGZvciAoeCA9IDA7IHggPCB5OyB4Kysp IHsJLyogTWFrZSBzdXJlIHRoZXkgaW5jbHVkZWQgIlx2KC4uLikiICovCi0JCWlmIChzW3hdICE9 ICdcXCcpIGNvbnRpbnVlOwotCQlpZiAoc1t4KzFdID09ICd2JykgYnJlYWs7Ci0JICAgIH0KLQkg ICAgaWYgKHggPT0geSkgewotCQlwcmludGYoCi0JCSI/RmlsdGVyIG11c3QgY29udGFpbiBhIHJl cGxhY2VtZW50IHZhcmlhYmxlIGZvciBmaWxlbmFtZS5cbiIKLQkJICAgICAgICk7Ci0JCXggPSAt OTsKLQkJZ290byB4c2VuZHg7Ci0JICAgIH0KLQkgICAgcHZbbl0uaXZhbCA9IDE7Ci0JICAgIGlm IChwdltuXS5zdmFsKSB7Ci0JCWZyZWUocHZbbl0uc3ZhbCk7Ci0JCXB2W25dLnN2YWwgPSBOVUxM OwotCSAgICB9Ci0JICAgIGlmICgoeSA9IHN0cmxlbihzKSkgPiAwKSB7Ci0JCWlmICgocHZbbl0u c3ZhbCA9IG1hbGxvYyh5KzEpKSkKLQkJICBzdHJjcHkocHZbbl0uc3ZhbCxzKTsJLyogc2FmZSAq LwotCSAgICB9Ci0JICAgIGJyZWFrOwotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLQkgIGNhc2Ug U05EX1BUSDoJCQkvKiBQYXRobmFtZXMgKi8KLQkgICAgaWYgKCFnZXR2YWwpIHsKLQkJcHZbbl0u aXZhbCA9IFBBVEhfUkVMOwotCQlicmVhazsKLQkgICAgfQotCSAgICBpZiAoKHggPSBjbWtleShw YXRodGFiLG5wYXRodGFiLCIiLCJhYnNvbHV0ZSIseHhzdHJpbmcpKSA8IDApCi0JICAgICAgZ290 byB4c2VuZHg7Ci0JICAgIHB2W25dLml2YWwgPSB4OwotCSAgICBicmVhazsKLQotCSAgY2FzZSBT TkRfTkFNOgkJCS8qIEZpbGVuYW1lcyAqLwotCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0JICAg IGlmICgoeCA9IGNta2V5KGZudGFiLG5mbnRhYiwiIiwiY29udmVydGVkIix4eHN0cmluZykpIDwg MCkKLQkgICAgICBnb3RvIHhzZW5keDsKLQkgICAgZGVidWcoRjEwMSwieHNlbmQgL2ZpbGVuYW1l cyIsIiIseCk7Ci0JICAgIHB2W25dLml2YWwgPSB4OwotCSAgICBicmVhazsKLQotI2lmZGVmIENB TElCUkFURQotICAgICAgICAgIGNhc2UgU05EX0NBTDogewkJLyogL0NBTElCUkFURSAqLwotCSAg ICAgIENLX09GRl9UIHc7Ci0JICAgICAgaWYgKGdldHZhbCkgewotCQkgIGlmICgoeCA9IGNtbnVt dygibnVtYmVyIG9mIEtieXRlcyB0byBzZW5kIiwKLQkJCQkgICIxMDI0IiwxMCwmdyx4eHN0cmlu ZykpIDwgMCkKLQkJICAgIGdvdG8geHNlbmR4OwotCSAgICAgIH0gZWxzZQotCQl3ID0gKENLX09G Rl9UKTEwMjQ7Ci0JICAgICAgcHZbbl0ud3ZhbCA9IHc7Ci0JICAgICAgcHZbU05EX0FSUl0uaXZh bCA9IDA7Ci0JICAgICAgYnJlYWs7Ci0JICB9Ci0jZW5kaWYgLyogQ0FMSUJSQVRFICovCi0KLQkg IGNhc2UgU05EX0ZJTDoJCQkvKiBOYW1lIG9mIGZpbGUgY29udGFpbmluZyBmaWxuYW1lcyAqLwot CSAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0JICAgIGlmICgoeCA9IGNtaWZpKCJOYW1lIG9mIGZp bGUgY29udGFpbmluZyBsaXN0IG9mIGZpbGVuYW1lcyIsCi0JCQkgICAgICAgIiIsJnMsJnkseHhz dHJpbmcpKSA8IDApIHsKLQkJaWYgKHggPT0gLTMpIHsKLQkJICAgIHByaW50ZigiP0ZpbGVuYW1l IHJlcXVpcmVkXG4iKTsKLQkJICAgIHggPSAtOTsKLQkJfQotCQlnb3RvIHhzZW5keDsKLQkgICAg fSBlbHNlIGlmICh5KSB7Ci0JCXByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZFxuIik7Ci0J CXggPSAtOTsKLQkJZ290byB4c2VuZHg7Ci0JICAgIH0KLQkgICAgaWYgKHB2W25dLnN2YWwpCi0J ICAgICAgZnJlZShwdltuXS5zdmFsKTsKLQkgICAgaWYgKHMpIGlmICgqcykgewotCQlpZiAoKHB2 W25dLnN2YWwgPSBtYWxsb2MoKGludClzdHJsZW4ocykrMSkpKSB7Ci0JCSAgICBzdHJjcHkocHZb bl0uc3ZhbCxzKTsKLQkJICAgIHB2W25dLml2YWwgPSAxOwotCQkgICAgcHZbU05EX0FSUl0uaXZh bCA9IDA7Ci0JCX0KLQkgICAgfQotCSAgICBicmVhazsKLQotI2lmbmRlZiBOT1NQTAotCSAgY2Fz ZSBTTkRfQVJSOgkJCS8qIFNFTkQgL0FSUkFZOiAqLwotCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7 Ci0JICAgIGFwID0gTlVMTDsKLQkgICAgaWYgKCh4ID0gY21mbGQoIkFycmF5IG5hbWUgKGEgc2lu Z2xlIGxldHRlciB3aWxsIGRvKSIsCi0JCQkgICAiIiwKLQkJCSAgICZzLAotCQkJICAgTlVMTAot CQkJICAgKSkgPCAwKSB7Ci0JCWlmICh4ID09IC0zKQotCQkgIGJyZWFrOwotCQllbHNlCi0JCSAg cmV0dXJuKHgpOwotCSAgICB9Ci0JICAgIGlmICgoeCA9IGFycmF5Ym91bmRzKHMsJihyYW5nZVsw XSksJihyYW5nZVsxXSkpKSA8IDApIHsKLQkJcHJpbnRmKCI/QmFkIGFycmF5OiAlc1xuIixzKTsK LQkJcmV0dXJuKC05KTsKLQkgICAgfQotCSAgICBpZiAoIShhcCA9IGFfcHRyW3hdKSkgewotCQlw cmludGYoIj9ObyBzdWNoIGFycmF5OiAlc1xuIixzKTsKLQkJcmV0dXJuKC05KTsKLQkgICAgfQot CSAgICBwdltuXS5pdmFsID0gMTsKLQkgICAgcHZbU05EX0NNRF0uaXZhbCA9IDA7CS8qIFVuZG8g YW55IGNvbmZsaWN0aW5nIG9uZXMuLi4gKi8KLQkgICAgcHZbU05EX1JFU10uaXZhbCA9IDA7Ci0J ICAgIHB2W1NORF9DQUxdLml2YWwgPSAwOwotCSAgICBwdltTTkRfRklMXS5pdmFsID0gMDsKLQkg ICAgYXJyYXl4ID0geDsKLQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotCSAgY2Fz ZSBTTkRfWFBBOgkJCS8qIC9UUkFOU1BBUkVOVCAqLwotCSAgICBwdltuXS5pdmFsID0gMTsKLQkg ICAgYnJlYWs7Ci0KLQkgIGNhc2UgU05EX1RZUDoJCQkvKiBPbmx5IGZpbGVzIG9mIGdpdmVuIHR5 cGUgKi8KLQkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotCSAgICBpZiAoKHggPSBjbWtleSh0eHRi aW4sMywiIiwiYWxsIix4eHN0cmluZykpIDwgMCkKLQkgICAgICBnb3RvIHhzZW5keDsKLQkgICAg cHZbbl0uaXZhbCA9ICh4ID09IDIpID8gLTEgOiB4OwotCSAgICBicmVhazsKLQotCSAgZGVmYXVs dDoKLQkgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBzd2l0Y2ggdmFsdWUgLSAlZFxuIixjbXJlc3Vs dC5ucmVzdWx0KTsKLQkgICAgeCA9IC05OwotCSAgICBnb3RvIHhzZW5keDsKLQl9Ci0gICAgfQot ICAgIGRlYnVnKEYxMDEsInhzZW5kIGNtcmVzdWx0IGZjb2RlIiwiIixjbXJlc3VsdC5mY29kZSk7 Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogTGlzdCBzd2l0Y2ggcGFyc2luZyByZXN1bHRzIGlu IGRlYnVnIGxvZyAqLwotICAgIGZvciAoaSA9IDA7IGkgPD0gU05EX01BWDsgaSsrKSB7Ci0JY2tt YWttc2cobGluZSxMSU5CVUZTSVosInhzZW5kIHN3aXRjaCAiLGNraXRvYShpKSxOVUxMLE5VTEwp OwotCWRlYnVnKEYxMTEsbGluZSwgcHZbaV0uc3ZhbCwgcHZbaV0uaXZhbCk7Ci0gICAgfQotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQotLyogTm93IHdlIGhhdmUgYWxsIHN3aXRjaGVzLCBwbHVzIG1h eWJlIGEgZmlsZW5hbWUgb3IgY29tbWFuZCwgb3Igbm90aGluZyAqLwotCi0jaWZkZWYgUElQRVNF TkQKLSAgICBpZiAocHJvdG9jb2wgIT0gUFJPVE9fSyAmJiBwdltTTkRfQ01EXS5pdmFsID4gMCkg ewotCXByaW50ZigiP1NvcnJ5LCAlcyB3b3JrcyBvbmx5IHdpdGggS2VybWl0IHByb3RvY29sXG4i LAotCSAgICAgICAoY3ggPT0gWFhDU0VOKSA/ICJDU0VORCIgOiAiU0VORCAvQ09NTUFORCIpOwot CXggPSAtOTsKLQlnb3RvIHhzZW5keDsKLSAgICB9Ci0gICAgaWYgKHB2W1NORF9SRVNdLml2YWwg PiAwIHx8CS8qIC9SRUNPVkVSICovCi0JcHZbU05EX1NUQV0ud3ZhbCA+IDApIHsJLyogb3IgL1NU QVJUSU5HICovCi0JaWYgKHNuZGZpbHRlciB8fCBwdltTTkRfRkxUXS5pdmFsID4gMCkgewotCSAg ICBwcmludGYoIj9Tb3JyeSwgbm8gL1JFQ09WRVIgb3IgL1NUQVJUIGlmIFNFTkQgRklMVEVSIHNl bGVjdGVkXG4iKTsKLQkgICAgeCA9IC05OwotCSAgICBnb3RvIHhzZW5keDsKLQl9Ci0gICAgfQot I2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLSAgICBjbWFyZyA9ICIiOwotICAgIGNtYXJnMiA9ICIi OwotICAgIGxpbmVbMF0gPSBOVUw7Ci0gICAgcyA9IGxpbmU7Ci0gICAgd2lsZCA9IDA7Ci0KLSAg ICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7CQkvKiBIb3cgZGlkIHdlIGdldCBvdXQgb2Ygc3dp dGNoIGxvb3AgKi8KLSAgICAgIGNhc2UgX0NNSUZJOgkJCS8qIElucHV0IGZpbGVuYW1lICovCi0J Y2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOyAvKiBOYW1lICovCi0J aWYgKHB2W1NORF9BUlJdLml2YWwgPiAwKQotCSAgY21hcmcyID0gbGluZTsKLQllbHNlCi0JICB3 aWxkID0gY21yZXN1bHQubnJlc3VsdDsJLyogV2lsZCBmbGFnICovCi0JaWYgKCFyZWN1cnNpdmUg JiYgIXdpbGQpCi0JICBub2xpbmtzID0gMDsKLQlicmVhazsKLSAgICAgIGNhc2UgX0NNRkxEOgkJ CS8qIEZpZWxkICovCi0JLyogT25seSBhbGxvd2VkIHdpdGggL0NPTU1BTkQgYW5kIC9BUlJBWSAq LwotCWlmIChwdltTTkRfQ01EXS5pdmFsIDwgMSAmJiBwdltTTkRfQVJSXS5pdmFsIDwgMSkgewot I2lmZGVmIENLUk9PVAotCSAgICBpZiAoY2tyb290ZXJyKQotCSAgICAgIHByaW50ZigiP09mZiBs aW1pdHM6ICVzXG4iLGNtcmVzdWx0LnNyZXN1bHQpOwotCSAgICBlbHNlCi0jZW5kaWYgLyogQ0tS T09UICovCi0JICAgICAgcHJpbnRmKCI/JXMgLSBcIiVzXCJcbiIsCi0JCSAgIGlzd2lsZChjbXJl c3VsdC5zcmVzdWx0KSA/Ci0JCSAgICJObyBmaWxlcyBtYXRjaCIgOiAiRmlsZSBub3QgZm91bmQi LAotCQkgICBjbXJlc3VsdC5zcmVzdWx0Ci0JCSAgICk7Ci0JICAgIHggPSAtOTsKLQkgICAgZ290 byB4c2VuZHg7Ci0JfQotCWNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0la KTsKLQlpZiAocHZbU05EX0FSUl0uaXZhbCA+IDApCi0JICBjbWFyZzIgPSBsaW5lOwotCWJyZWFr OwotICAgICAgY2FzZSBfQ01DRk06CQkJLyogQ29uZmlybWF0aW9uICovCi0JLyogcyA9ICIiOyAq LwotCWNvbmZpcm1lZCA9IDE7Ci0JYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotCXByaW50ZigiP1Vu ZXhwZWN0ZWQgZnVuY3Rpb24gY29kZTogJWRcbiIsY21yZXN1bHQuZmNvZGUpOwotCXggPSAtOTsK LQlnb3RvIHhzZW5keDsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwieHNlbmQgc3RyaW5nIixzLDAp OwotICAgIGRlYnVnKEYxMDEsInhzZW5kIGNvbmZpcm1lZCIsIiIsY29uZmlybWVkKTsKLQotICAg IC8qIFNhdmUgYW5kIGNoYW5nZSBwcm90b2NvbCBhbmQgdHJhbnNmZXIgbW9kZSAqLwotICAgIC8q IEdsb2JhbCB2YWx1ZXMgYXJlIHJlc3RvcmVkIGluIG1haW4gcGFyc2UgbG9vcCAqLwotCi0gICAg Z19wcm90byA9IHByb3RvY29sOwkJCS8qIFNhdmUgY3VycmVudCBnbG9iYWwgcHJvdG9jb2wgKi8K LSAgICBnX3VycHNpeiA9IHVycHNpejsKLSAgICBnX3Nwc2l6ZiA9IHNwc2l6ZjsKLSAgICBnX3Nw c2l6ID0gc3BzaXo7Ci0gICAgZ19zcHNpenIgPSBzcHNpenI7Ci0gICAgZ19zcG1heCA9IHNwbWF4 OwotICAgIGdfd3Nsb3RyID0gd3Nsb3RyOwotICAgIGdfcHJlZml4aW5nID0gcHJlZml4aW5nOwot ICAgIGdfZm5jYWN0ID0gZm5jYWN0OwotICAgIGdfZm5jbnYgPSBmbmNudjsKLSAgICBnX2Zuc3Bh dGggPSBmbnNwYXRoOwotICAgIGdfZm5ycGF0aCA9IGZucnBhdGg7Ci0gICAgZ194ZnJ4bGEgPSB4 ZnJ4bGE7Ci0KLSAgICBpZiAocHZbU05EX1BST10uaXZhbCA+IC0xKSB7CS8qIENoYW5nZSBhY2Nv cmRpbmcgdG8gc3dpdGNoICovCi0JcHJvdG9jb2wgPSBwdltTTkRfUFJPXS5pdmFsOwotICAgICAg ICBpZiAocHRhYltwcm90b2NvbF0ucnBrdGxlbiA+IC0xKSAvKiBjb3BpZWQgZnJvbSBpbml0cHJv dG8oKSAqLwotICAgICAgICAgICAgdXJwc2l6ID0gcHRhYltwcm90b2NvbF0ucnBrdGxlbjsKLSAg ICAgICAgaWYgKHB0YWJbcHJvdG9jb2xdLnNwa3RmbGcgPiAtMSkKLSAgICAgICAgICAgIHNwc2l6 ZiA9IHB0YWJbcHJvdG9jb2xdLnNwa3RmbGc7Ci0gICAgICAgIGlmIChwdGFiW3Byb3RvY29sXS5z cGt0bGVuID4gLTEpIHsKLSAgICAgICAgICAgIHNwc2l6ID0gcHRhYltwcm90b2NvbF0uc3BrdGxl bjsKLSAgICAgICAgICAgIGlmIChzcHNpemYpCi0JICAgICAgc3BzaXpyID0gc3BtYXggPSBzcHNp ejsKLSAgICAgICAgfQotICAgICAgICBpZiAocHRhYltwcm90b2NvbF0ud2luc2l6ZSA+IC0xKQot ICAgICAgICAgICAgd3Nsb3RyID0gcHRhYltwcm90b2NvbF0ud2luc2l6ZTsKLSAgICAgICAgaWYg KHB0YWJbcHJvdG9jb2xdLnByZWZpeCA+IC0xKQotICAgICAgICAgICAgcHJlZml4aW5nID0gcHRh Yltwcm90b2NvbF0ucHJlZml4OwotICAgICAgICBpZiAocHRhYltwcm90b2NvbF0uZm5jYSA+IC0x KQotICAgICAgICAgICAgZm5jYWN0ICA9IHB0YWJbcHJvdG9jb2xdLmZuY2E7Ci0gICAgICAgIGlm IChwdGFiW3Byb3RvY29sXS5mbmNuID4gLTEpCi0gICAgICAgICAgICBmbmNudiAgID0gcHRhYltw cm90b2NvbF0uZm5jbjsKLSAgICAgICAgaWYgKHB0YWJbcHJvdG9jb2xdLmZuc3AgPiAtMSkKLSAg ICAgICAgICAgIGZuc3BhdGggPSBwdGFiW3Byb3RvY29sXS5mbnNwOwotICAgICAgICBpZiAocHRh Yltwcm90b2NvbF0uZm5ycCA+IC0xKQotICAgICAgICAgICAgZm5ycGF0aCA9IHB0YWJbcHJvdG9j b2xdLmZucnA7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInhzZW5kIHByb3RvY29sIiwiIixwcm90 b2NvbCk7Ci0KLSAgICBpZiAocHZbU05EX05PQl0uaXZhbCA+IC0xKSB7CS8qIC9OT0JBQ0tVUCAo c2tpcCBiYWNrdXAgZmlsZSkgKi8KLQlnX3NraXBidXAgPSBza2lwYnVwOwotCXNraXBidXAgPSAx OwotICAgIH0KLSAgICBpZiAocHZbU05EX1JFQ10uaXZhbCA+IDApCQkvKiAvUkVDVVJTSVZFICov Ci0gICAgICByZWN1cnNpdmUgPSAyOwotCi0gICAgaWYgKHB2W1NORF9UWVBdLml2YWwgPiAtMSkg ewkvKiAvVFlQRSAqLwotCXhmaWxldHlwZSA9IHB2W1NORF9UWVBdLml2YWw7Ci0JaWYgKHhmaWxl dHlwZSA9PSAyKQotCSAgeGZpbGV0eXBlID0gLTE7Ci0gICAgfQotICAgIGdfYmluYXJ5ID0gYmlu YXJ5OwkJCS8qIFNhdmUgZ2xvYmFsIHRyYW5zZmVyIG1vZGUgKi8KLSNpZmRlZiBQQVRURVJOUwot ICAgIGdfcGF0dGVybnMgPSBwYXR0ZXJuczsJCS8qIFNhdmUgRklMRSBQQVRURVJOUyBzZXR0aW5n ICovCi0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLSAgICBpZiAocHZbU05EX0JJTl0uaXZhbCA+IDAp IHsJCS8qIENoYW5nZSBhY2NvcmRpbmcgdG8gc3dpdGNoICovCi0JLyogSWYgdGhleSBzYWlkIC9C SU5BUlkgdGhleSBtZWFuIC9CSU5BUlkgKi8KLQlwYXR0ZXJucyA9IDA7CQkJLyogU28gbm8gcGF0 dGVybi1iYXNlZCBzd2l0Y2hpbmcgKi8KLQlnX3hmZXJtb2RlID0geGZlcm1vZGU7CQkvKiBvciBh dXRvbWF0aWMgdHJhbnNmZXIgbW9kZSAqLwotCXhmZXJtb2RlID0gWE1PREVfTTsKLQliaW5hcnkg PSBYWUZUX0I7Ci0JZGVidWcoRjEwMSwiZG94c2VuZCAvQklOQVJZIHhmZXJtb2RlIiwiIix4ZmVy bW9kZSk7Ci0gICAgfSBlbHNlIGlmIChwdltTTkRfVFhUXS5pdmFsID4gMCkgewkvKiBEaXR0byBm b3IgL1RFWFQgKi8KLQlwYXR0ZXJucyA9IDA7Ci0JZ194ZmVybW9kZSA9IHhmZXJtb2RlOwotCXhm ZXJtb2RlID0gWE1PREVfTTsKLQliaW5hcnkgPSBYWUZUX1Q7Ci0JZGVidWcoRjEwMSwiZG94c2Vu ZCAvVEVYVCB4ZmVybW9kZSIsIiIseGZlcm1vZGUpOwotICAgIH0gZWxzZSBpZiAocHZbU05EX0lN R10uaXZhbCA+IDApIHsKLSNpZmRlZiBWTVMKLQliaW5hcnkgPSBYWUZUX0k7Ci0jZWxzZQotCWJp bmFyeSA9IFhZRlRfQjsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICB9Ci0jaWZkZWYgQ0tfTEFCRUxF RAotICAgIGVsc2UgaWYgKHB2W1NORF9MQkxdLml2YWwgPiAwKSB7Ci0JYmluYXJ5ID0gWFlGVF9M OwotICAgIH0KLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0gICAgZGVidWcoRjEwMSwieHNlbmQg YmluYXJ5IiwiIixiaW5hcnkpOwotCi0gICAgaWYgKHB2W1NORF9YUEFdLml2YWwgPiAwKQkJLyog L1RSQU5TUEFSRU5UICovCi0gICAgICB4ZnJ4bGEgPSAwOwkJCS8qIERvbid0IHRyYW5zbGF0ZSBj aGFyYWN0ZXIgc2V0cyAqLwotCi0gICAgLyogQ2hlY2sgZm9yIGxlZ2FsIGNvbWJpbmF0aW9ucyBv ZiBzd2l0Y2hlcywgZmlsZW5hbWVzLCBldGMgKi8KLQotI2lmZGVmIFBJUEVTRU5ECi0gICAgaWYg KHB2W1NORF9DTURdLml2YWwgPiAwKSB7CS8qIENPTU1BTkQgLSBzdHJpcCBhbnkgYnJhY2VzICov Ci0JZGVidWcoRjExMCwiU0VORCAvQ09NTUFORCBiZWZvcmUgc3RyaXBwaW5nIixzLDApOwotCXMg PSBicnN0cmlwKHMpOwotCWRlYnVnKEYxMTAsIlNFTkQgL0NPTU1BTkQgYWZ0ZXIgc3RyaXBwaW5n IixzLDApOwotCWlmICghKnMpIHsKLQkgICAgcHJpbnRmKCI/U29ycnksIGEgY29tbWFuZCB0byBz ZW5kIGZyb20gaXMgcmVxdWlyZWRcbiIpOwotCSAgICB4ID0gLTk7Ci0JICAgIGdvdG8geHNlbmR4 OwotCX0KLQljbWFyZyA9IHM7Ci0gICAgfQotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLS8qIFNl dCB1cCAvTU9WRSBhbmQgL1JFTkFNRSAqLwotCi0gICAgaWYgKHB2W1NORF9ERUxdLml2YWwgPiAw ICYmCi0JKHB2W1NORF9NT1ZdLml2YWwgPiAwIHx8IHB2W1NORF9SRU5dLml2YWwgPiAwKSkgewot CXByaW50ZigiP1NvcnJ5LCAvREVMRVRFIGNvbmZsaWN0cyB3aXRoIC9NT1ZFIG9yIC9SRU5BTUVc biIpOwotCXggPSAtOTsKLQlnb3RvIHhzZW5keDsKLSAgICB9Ci0jaWZkZWYgQ0tfVE1QRElSCi0g ICAgaWYgKHB2W1NORF9NT1ZdLml2YWwgPiAwKSB7Ci0JaW50IGxlbjsKLQljaGFyICogcCA9IHB2 W1NORF9NT1ZdLnN2YWw7Ci0jaWZkZWYgQ0tfTE9HSU4KLQlpZiAoaXNndWVzdCkgewotCSAgICBw cmludGYoIj9Tb3JyeSwgL01PVkUtVE8gbm90IGF2YWlsYWJsZSB0byBndWVzdHNcbiIpOwotCSAg ICB4ID0gLTk7Ci0JICAgIGdvdG8geHNlbmR4OwotCX0KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwot CWxlbiA9IHN0cmxlbihwKTsKLQlpZiAoIWlzZGlyKHApKSB7CQkvKiBDaGVjayBkaXJlY3Rvcnkg Ki8KLSNpZmRlZiBDS19NS0RJUgotCSAgICBjaGFyICogcyA9IE5VTEw7Ci0JICAgIHMgPSAoY2hh ciAqKW1hbGxvYyhsZW4gKyA0KTsKLQkgICAgaWYgKHMpIHsKLQkJc3RyY3B5KHMscCk7CQkvKiBz YWZlICovCi0jaWZkZWYgZGF0YWdlbmVyYWwKLQkJaWYgKHNbbGVuLTFdICE9ICc6JykgeyBzW2xl bisrXSA9ICc6Jzsgc1tsZW5dID0gTlVMOyB9Ci0jZWxzZQotCQlpZiAoc1tsZW4tMV0gIT0gJy8n KSB7IHNbbGVuKytdID0gJy8nOyBzW2xlbl0gPSBOVUw7IH0KLSNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLwotCQlzW2xlbisrXSA9ICdYJzsKLQkJc1tsZW5dID0gTlVMOwotCQl4ID0gem1rZGlyKHMp OwotCQlmcmVlKHMpOwotCQlpZiAoeCA8IDApIHsKLQkJICAgIHByaW50ZigiP0Nhbid0IGNyZWF0 ZSBcIiVzXCJcbiIscCk7Ci0JCSAgICB4ID0gLTk7Ci0JCSAgICBnb3RvIHhzZW5keDsKLQkJfQot CSAgICB9Ci0jZWxzZQotCSAgICBwcmludGYoIj9EaXJlY3RvcnkgXCIlc1wiIG5vdCBmb3VuZFxu IixwKTsKLQkgICAgeCA9IC05OwotCSAgICBnb3RvIHhzZW5keDsKLSNlbmRpZiAvKiBDS19NS0RJ UiAqLwotCX0KLSAgICAgICAgemZucWZwKHAsTElOQlVGU0laLHRtcGJ1Zik7Ci0JbWFrZXN0cigm c25kX21vdmUsdG1wYnVmKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0KLSAgICBp ZiAocHZbU05EX1JFTl0uaXZhbCA+IDApIHsJCS8qIC9SRU5BTUUgKi8KLQljaGFyICogcCA9IHB2 W1NORF9SRU5dLnN2YWw7Ci0jaWZkZWYgQ0tfTE9HSU4KLQlpZiAoaXNndWVzdCkgewotCSAgICBw cmludGYoIj9Tb3JyeSwgL1JFTkFNRS1UTyBub3QgYXZhaWxhYmxlIHRvIGd1ZXN0c1xuIik7Ci0J ICAgIHggPSAtOTsKLQkgICAgZ290byB4c2VuZHg7Ci0JfQotI2VuZGlmIC8qIENLX0xPR0lOICov Ci0JaWYgKCFwKSBwID0gIiI7Ci0JaWYgKCEqcCkgewotCSAgICBwcmludGYoIj9OZXcgbmFtZSBy ZXF1aXJlZCBmb3IgL1JFTkFNRVxuIik7Ci0JICAgIHggPSAtOTsKLQkgICAgZ290byB4c2VuZHg7 Ci0JfQotCXAgPSBicnN0cmlwKHApOwotI2lmbmRlZiBOT1NQTAotICAgIC8qIElmIG5hbWUgZ2l2 ZW4gaXMgd2lsZCwgcmVuYW1lIHN0cmluZyBtdXN0IGNvbnRhaW4gdmFyaWFibGVzICovCi0JaWYg KHdpbGQpIHsKLQkgICAgY2hhciAqIHMgPSB0bXBidWY7Ci0JICAgIHggPSBUTVBCVUZTSVo7Ci0J ICAgIHp6c3RyaW5nKHAsJnMsJngpOwotCSAgICBpZiAoIXN0cmNtcCh0bXBidWYscCkpIHsKLQkJ cHJpbnRmKAotICAgICI/L1JFTkFNRSBmb3IgZmlsZSBncm91cCBtdXN0IGNvbnRhaW4gdmFyaWFi bGVzIHN1Y2ggYXMgXFx2KGZpbGVuYW1lKVxuIgotCQkgICAgICAgKTsKLQkJeCA9IC05OwotCQln b3RvIHhzZW5keDsKLQkgICAgfQotCX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCW1ha2VzdHIoJnNu ZF9yZW5hbWUscCk7Ci0gICAgfQotCi0vKiBIYW5kbGUgL1JFQ09WRVIgYW5kIC9TVEFSVCAqLwot Ci0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgaWYgKHB2W1NORF9SRVNdLml2YWwgPiAwICYmIGJpbmFy eSAhPSBYWUZUX0IgJiYgIWZpbGVwZWVrCi0jaWZkZWYgUEFUVEVSTlMKLQkmJiAhcGF0dGVybnMK LSNlbHNlCi0jaWZkZWYgVk1TCi0vKiBWTVMgc2V0cyB0ZXh0L2JpbmFyeSBhdXRvbWF0aWNhbGx5 IGxhdGVyIHdoZW4gaXQgb3BlbnMgdGhlIGZpbGUgKi8KLQkmJiAwCi0jZW5kaWYgLyogVk1TICov Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLQkpIHsKLQlwcmludGYoIj9Tb3JyeSwgL0JJTkFSWSBy ZXF1aXJlZFxuIik7Ci0JeCA9IC05OwotCWdvdG8geHNlbmR4OwotICAgIH0KLSAgICBpZiAocHZb U05EX1NUQV0ud3ZhbCA+IDApIHsJCS8qIC9TVEFSVCAqLwotCWlmICh3aWxkKSB7Ci0JICAgIHBy aW50ZigiP1NvcnJ5LCB3aWxkY2FyZHMgbm90IHBlcm1pdHRlZCB3aXRoIC9TVEFSVFxuIik7Ci0J ICAgIHggPSAtOTsKLQkgICAgZ290byB4c2VuZHg7Ci0JfQotCWlmIChzaXplb2YoaW50KSA8IDQp IHsKLQkgICAgcHJpbnRmKCI/U29ycnksIHRoaXMgY29tbWFuZCBuZWVkcyBhdCBsZWFzdCAzMi1i aXQgaW50ZWdlcnNcbiIpOwotCSAgICB4ID0gLTk7Ci0JICAgIGdvdG8geHNlbmR4OwotCX0KLSNp ZmRlZiBDS19YWVoKLQlpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgewotCSAgICBwcmludGYoIj9T b3JyeSwgU0VORCAvU1RBUlQgd29ya3Mgb25seSB3aXRoIEtlcm1pdCBwcm90b2NvbFxuIik7Ci0J ICAgIHggPSAtOTsKLQkgICAgZ290byB4c2VuZHg7Ci0JfQotI2VuZGlmIC8qIENLX1hZWiAqLwot ICAgIH0KLSNpZmRlZiBDS19YWVoKLSAgICBpZiAocHZbU05EX1JFU10uaXZhbCA+IDApIHsKLQlp ZiAocHJvdG9jb2wgIT0gUFJPVE9fSyAmJiBwcm90b2NvbCAhPSBQUk9UT19aKSB7Ci0JICAgIHBy aW50ZigKLSAgICAiU29ycnksIC9SRUNPVkVSIGlzIHBvc3NpYmxlIG9ubHkgd2l0aCBLZXJtaXQg b3IgWk1PREVNIHByb3RvY29sXG4iCi0JCSAgICk7Ci0JICAgIHggPSAtOTsKLQkgICAgZ290byB4 c2VuZHg7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBDS19YWVogKi8KLSNlbmRpZiAvKiBDS19SRVNF TkQgKi8KLQotICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LKSB7Ci0JaWYgKChwdltTTkRfTUFJ XS5pdmFsID4gMCB8fAkvKiBNQUlMICovCi0JICAgICBwdltTTkRfUFJJXS5pdmFsID4gMCB8fAkv KiBQUklOVCAqLwotCSAgICAgcHZbU05EX1JFU10uaXZhbCA+IDAJLyogUkVTRU5EICovCi0JICAg ICApICYmCi0JICAgICghYXRkaXNvIHx8ICFhdGNhcHIpKSB7CS8qIERpc3Bvc2l0aW9uIGF0dHJp YnV0ZSBvZmY/ICovCi0JICAgIHByaW50ZigiP1NvcnJ5LCBBVFRSSUJVVEUgRElTUE9TSVRJT04g bXVzdCBiZSBPTlxuIik7Ci0JICAgIHggPSAtOTsKLQkgICAgZ290byB4c2VuZHg7Ci0JfQotICAg IH0KLQotI2lmZGVmIENLX1hZWgotICAgIGlmICh3aWxkICYmIChwcm90b2NvbCA9PSBQUk9UT19Y IHx8IHByb3RvY29sID09IFBST1RPX1hDKSkgewotCXByaW50ZigKLSJTb3JyeSwgeW91IGNhbiBv bmx5IHNlbmQgb25lIGZpbGUgYXQgYSB0aW1lIHdpdGggWE1PREVNIHByb3RvY29sXG4iCi0JICAg ICAgICk7Ci0JeCA9IC05OwotCWdvdG8geHNlbmR4OwotICAgIH0KLSNlbmRpZiAvKiBDS19YWVog Ki8KLQotICAgIGlmICghY29uZmlybWVkKSB7CQkJLyogQ1Igbm90IHR5cGVkIHlldCwgZ2V0IG1v cmUgZmllbGRzICovCi0JY2hhciAqbTsKLQlpZiAobWxpc3QpIHsJCQkvKiBNU0VORCBvciBNTU9W RSAqLwotCSAgICBuZmlscyA9IDA7CQkJLyogV2UgYWxyZWFkeSBoYXZlIHRoZSBmaXJzdCBvbmUg Ki8KLSNpZm5kZWYgTk9NU0VORAotCSAgICBtc2ZpbGVzW25maWxzKytdID0gbGluZTsJLyogU3Rv cmUgcG9pbnRlciAqLwotCSAgICBscCA9IGxpbmUgKyAoaW50KXN0cmxlbihsaW5lKSArIDE7IC8q IFBvaW50IHBhc3QgaXQgKi8KLQkgICAgZGVidWcoRjExMSwieHNlbmQgbXNlbmQiLG1zZmlsZXNb bmZpbHMtMV0sbmZpbHMtMSk7Ci0JICAgIHdoaWxlICgxKSB7CQkJLyogR2V0IG1vcmUgZmlsZW5h bWVzICovCi0JCWNoYXIgKnA7Ci0JCWlmICgoeCA9IGNtaWZpKCJOYW1lcyBvZiBmaWxlcyB0byBz ZW5kLCBzZXBhcmF0ZWQgYnkgc3BhY2VzIiwKLQkJCSAgICAgICAiIiwgJnMsJnkseHhzdHJpbmcp KSA8IDApIHsKLQkJICAgIGlmICh4ICE9IC0zKQotCQkgICAgICBnb3RvIHhzZW5keDsKLQkJICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLQkJICAgICAgZ290byB4c2VuZHg7Ci0JCSAgICBicmVh azsKLQkJfQotCQltc2ZpbGVzW25maWxzKytdID0gbHA7CS8qIEdvdCBvbmUsIGNvdW50IGl0LCBw b2ludCB0byBpdCwgKi8KLQkJcCA9IGxwOwkJCS8qIHJlbWVtYmVyIHBvaW50ZXIsICovCi0JCXdo aWxlICgoKmxwKysgPSAqcysrKSkJLyogYW5kIGNvcHkgaXQgaW50byBidWZmZXIgKi8KLQkJICBp ZiAobHAgPiAobGluZSArIExJTkJVRlNJWikpIHsgLyogQXZvaWQgbWVtb3J5IGxlYWsgKi8KLQkJ ICAgICAgcHJpbnRmKCI/TVNFTkQgbGlzdCB0b28gbG9uZ1xuIik7Ci0JCSAgICAgIGxpbmVbMF0g PSBOVUw7Ci0JCSAgICAgIHggPSAtOTsKLQkJICAgICAgZ290byB4c2VuZHg7Ci0JCSAgfQotCQlk ZWJ1ZyhGMTExLCJ4c2VuZCBtc2VuZCIsbXNmaWxlc1tuZmlscy0xXSxuZmlscy0xKTsKLQkJaWYg KG5maWxzID09IDEpIGZzcGVjWzBdID0gTlVMOyAvKiBUYWtlIGNhcmUgb2YgXHYoZmlsZXNwZWMp ICovCi0jaWZkZWYgWkZOUUZQCi0JCXpmbnFmcChwLFRNUEJVRlNJWix0bXBidWYpOwotCQlwID0g dG1wYnVmOwotI2VuZGlmIC8qIFpGTlFGUCAqLwotCQlpZiAoKChpbnQpc3RybGVuKGZzcGVjKSAr IChpbnQpc3RybGVuKHApICsgMSkgPCBmc3BlY2xlbikgewotCQkgICAgc3RyY2F0KGZzcGVjLHAp OwkvKiBzYWZlICovCi0JCSAgICBzdHJjYXQoZnNwZWMsIiAiKTsJLyogc2FmZSAqLwotCQl9IGVs c2UKLSNpZmRlZiBDT01NRU5UCi0JCSAgcHJpbnRmKCJXQVJOSU5HIC0gXFx2KGZpbGVzcGVjKSBi dWZmZXIgb3ZlcmZsb3dcbiIpOwotI2Vsc2UKLQkJICBkZWJ1ZyhGMTAxLCJkb3hzZW5kIGZpbGVz cGVjIGJ1ZmZlciBvdmVyZmxvdyIsIiIsMCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICB9 Ci0jZW5kaWYgLyogTk9NU0VORCAqLwotCX0gZWxzZSB7CQkJLyogUmVndWxhciBTRU5EICovCi0J ICAgIGNoYXIgKnA7IGludCB5OwotCSAgICBuZmlscyA9IC0xOwotCSAgICBpZiAocHZbU05EX01B SV0uaXZhbCA+IDApCi0JICAgICAgbSA9IChwdltTTkRfTUFJXS5zdmFsKSA/Ci0JCSJlLW1haWwg YWRkcmVzcyAob3B0aW9uYWwpIiA6Ci0JCSAgImUtbWFpbCBhZGRyZXNzIChyZXF1aXJlZCkiOwot CSAgICBlbHNlIGlmIChwdltTTkRfUFJJXS5pdmFsID4gMCkKLQkgICAgICBtID0gInByaW50ZXIg b3B0aW9ucyAob3B0aW9uYWwpIjsKLQkgICAgZWxzZSBpZiAod2lsZCkKLQkgICAgICBtID0KLSJc bk9wdGlvbmFsIGFzLW5hbWUgdGVtcGxhdGUgY29udGFpbmluZyByZXBsYWNlbWVudCB2YXJpYWJs ZXMgXAotbGlrZSBcXHYoZmlsZW5hbWUpIjsKLQkgICAgZWxzZQotCSAgICAgIG0gPSAiT3B0aW9u YWwgbmFtZSB0byBzZW5kIGl0IHdpdGgiOwotCSAgICBpZiAoKHggPSBjbXR4dChtLCIiLCZwLE5V TEwpKSA8IDApCi0JICAgICAgZ290byB4c2VuZHg7Ci0JICAgIGlmICghcCkgcCA9ICIiOwotCSAg ICBpZiAoKnApIHsJCQkvKiBJZiBzb21lIHRleHQgd2FzIGdpdmVuLi4uICovCi0JCXAgPSBicnN0 cmlwKHApOwkJLyogUmVwbGFjZSAvQVMtTkFNRTogdmFsdWUgaWYgYW55ICovCi0JCWlmICgoeSA9 IHN0cmxlbihwKSkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwdltTTkRfTUFJXS5p dmFsID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmcHZbU05EX01BSV0u c3ZhbCwgcCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCQlpZiAocHZbU05EX0FT Tl0uc3ZhbCkgZnJlZShwdltTTkRfQVNOXS5zdmFsKTsKLQkJCXB2W1NORF9BU05dLnN2YWwgPSBt YWxsb2MoeSsxKTsKLQkJCWlmIChwdltTTkRfQVNOXS5zdmFsKSB7Ci0JCQkgICAgc3RyY3B5KHB2 W1NORF9BU05dLnN2YWwscCk7CS8qIHNhZmUgKi8KLQkJCSAgICBwdltTTkRfQVNOXS5pdmFsID0g MTsKLQkJCX0KLQkJICAgIH0KLQkJfQotCSAgICB9Ci0JfQotICAgIH0KLSAgICAvKiBTZXQgY21h cmcyIGZyb20gYXMtbmFtZSwgaG93ZXZlciB3ZSBnb3QgaXQuICovCi0KLSAgICBpZiAocHZbU05E X0FTTl0uaXZhbCA+IDAgJiYgcHZbU05EX0FTTl0uc3ZhbCAmJiAhKmNtYXJnMikgewotCWludCB4 OwotCXggPSBzdHJsZW4obGluZSk7Ci0JY2tzdHJuY3B5KGxpbmUreCsyLHB2W1NORF9BU05dLnN2 YWwsTElOQlVGU0laLXgtMSk7Ci0JY21hcmcyID0gbGluZSt4KzI7Ci0JZGVidWcoRjExMCwiZG94 c2VuZCBjbWFyZzIiLGNtYXJnMiwwKTsKLSAgICB9Ci0KLSNpZm5kZWYgTk9GUklMTFMKLSAgICBp ZiAoKHB2W1NORF9NQUldLml2YWwgPiAwKSAmJiAocHZbU05EX1BSSV0uaXZhbCA+IDApKSB7Ci0J cHJpbnRmKCJTb3JyeSwgL01BSUwgYW5kIC9QUklOVCBhcmUgY29uZmxpY3Rpbmcgb3B0aW9uc1xu Iik7Ci0JeCA9IC05OwotCWdvdG8geHNlbmR4OwotICAgIH0KLSAgICBuID0gMDsJCQkJLyogL01B SUwgb3IgL1BSSU5UPyAqLwotICAgIGlmIChwdltTTkRfTUFJXS5pdmFsID4gMCkKLSAgICAgIG4g PSBTTkRfTUFJOwotICAgIGVsc2UgaWYgKHB2W1NORF9QUkldLml2YWwgPiAwKQotICAgICAgbiA9 IFNORF9QUkk7Ci0gICAgaWYgKG4pIHsJCQkJLyogWWVzLi4uICovCi0jaWZkZWYgREVCVUcKLQlj aGFyICogcDsKLQlpZiAobiA9PSBTTkRfTUFJKQotCSAgcCA9ICIvTUFJTCI7Ci0JZWxzZQotCSAg cCA9ICIvUFJJTlQiOwotCWRlYnVnKEYxMTEsInhzZW5kIixwLG4pOwotI2VuZGlmIC8qIERFQlVH ICovCi0jaWZkZWYgQ0tfWFlaCi0JaWYgKHByb3RvY29sICE9IFBST1RPX0spIHsKLQkgICAgcHJp bnRmKCJTb3JyeSwgJXMgYXZhaWxhYmxlIG9ubHkgd2l0aCBLZXJtaXQgcHJvdG9jb2xcbiIsCi0J CSAgIChuID09IFNORF9NQUkpID8gIi9NQUlMIiA6ICIvUFJJTlQiCi0JCSAgICk7Ci0JICAgIHgg PSAtOTsKLQkgICAgZ290byB4c2VuZHg7Ci0JfQotI2VuZGlmIC8qIENLX1hZWiAqLwotCWRlYnVn KEYxMDEsInhzZW5kIHByaW50L21haWwgd2lsZCIsIiIsd2lsZCk7Ci0JKm9wdGJ1ZiA9IE5VTDsJ CQkvKiBXaXBlIG91dCBhbnkgb2xkIG9wdGlvbnMgKi8KLQlzID0gcHZbbl0uc3ZhbDsJCQkvKiBt YWlsIGFkZHJlc3Mgb3IgcHJpbnQgc3dpdGNoIHZhbCAqLwotCWlmICghcykgcyA9ICIiOwotCWRl YnVnKEYxMTAsImRveHNlbmQgbWFpbCBhZGRyZXNzIG9yIHByaW50ZXIgb3B0aW9ucyIscywwKTsK LQlpZiAobiA9PSBTTkRfTUFJICYmICEqcykgewotCSAgICBwcmludGYoIj9FLW1haWwgYWRkcmVz cyByZXF1aXJlZFxuIik7Ci0JICAgIHggPSAtOTsKLQkgICAgZ290byB4c2VuZHg7Ci0JfSBlbHNl IGlmICgoaW50KXN0cmxlbihzKSA+IDk0KSB7IC8qIEVuc3VyZSBsZWdhbCBzaXplICovCi0JICAg IHByaW50ZigiPyVzIHRvbyBsb25nXG4iLAotCQkgICAobiA9PSBTTkRfTUFJKSA/Ci0JCSAgICJF LW1haWwgYWRkcmVzcyIgOgotCQkgICAiUHJpbnQgb3B0aW9uIHN0cmluZyIKLQkJICAgKTsKLQkg ICAgeCA9IC05OwotCSAgICBnb3RvIHhzZW5keDsKLQl9Ci0JY2tzdHJuY3B5KG9wdGJ1ZixzLE9Q VEJVRkxFTik7CS8qIE9LLCBjb3B5IHRvIG9wdGlvbiBidWZmZXIgKi8KLQljbWFyZyA9IGxpbmU7 CQkJLyogRmlsZSB0byBzZW5kICovCi0JaWYgKG4gPT0gU05EX01BSSkgewotCSAgICBkZWJ1ZyhG MTEwLCJ4c2VuZCBtYWlsaW5nIixjbWFyZywwKTsKLQkgICAgZGVidWcoRjExMCwieHNlbmQgYWRk cmVzczoiLG9wdGJ1ZiwwKTsKLQkgICAgcm1haWxmID0gMTsKLQl9IGVsc2UgewotCSAgICBkZWJ1 ZyhGMTEwLCJ4c2VuZCBwcmludGluZyIsY21hcmcsMCk7Ci0JICAgIGRlYnVnKEYxMTAsInhzZW5k IG9wdGlvbnMiLG9wdGJ1ZiwwKTsKLQkgICAgcnByaW50ZiA9IDE7Ci0JfQotICAgIH0KLSNlbmRp ZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZkZWYgQ0FMSUJSQVRFCi0gICAgaWYgKHB2W1NORF9DQUxd Lnd2YWwgPiAwKSB7CQkvKiBIYW5kbGUgL0NBTElCUkFURSAqLwotCWlmIChjb25maXJtZWQpIHsK LQkgICAgY2FsaWJyYXRlID0gcHZbU05EX0NBTF0ud3ZhbCAqIChDS19PRkZfVCkxMDI0OwotCSAg ICBzbmRzcmMgPSAtOTsKLQkgICAgbmZpbHMgPSAxOwotCSAgICB3aWxkID0gMDsKLSNpZm5kZWYg Tk9NU0VORAotCSAgICBhZGRsaXN0ID0gMDsKLSNlbmRpZiAvKiBOT01TRU5EICovCi0JICAgIGNr c3RybmNweShsaW5lLCJDQUxJQlJBVElPTiIsTElOQlVGU0laKTsKLQkgICAgcyA9IGNtYXJnID0g bGluZTsKLQkgICAgaWYgKCFjbWFyZzIpIGNtYXJnMiA9ICIiOwotCSAgICBkZWJ1ZyhGMTEwLCJk b3hzZW5kIGNtYXJnMiBjYWxpYnJhdGUiLGNtYXJnMiwwKTsKLQl9IGVsc2UgaWYgKGxpbmVbMF0p IHsKLQkgICAgY2FsaWJyYXRlID0gMDsKLQkgICAgcHZbU05EX0NBTF0uaXZhbCA9IDA7Ci0JICAg IHB2W1NORF9DQUxdLnd2YWwgPSAwOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogQ0FMSUJSQVRFICov Ci0KLSAgICBpZiAocHZbU05EX0ZJTF0uaXZhbCA+IDApIHsKLQlpZiAoY29uZmlybWVkICYmICFj YWxpYnJhdGUpIHsKLQkgICAgaWYgKHpvcGVuaShaTUZJTEUscHZbU05EX0ZJTF0uc3ZhbCkgPCAx KSB7Ci0JCWRlYnVnKEYxMTAsInhzZW5kIGNhbid0IG9wZW4iLHB2W1NORF9GSUxdLnN2YWwsMCk7 Ci0JCXByaW50ZigiP0ZhaWx1cmUgdG8gb3BlbiAlc1xuIixmaWxlZmlsZSk7Ci0JCXggPSAtOTsK LQkJZ290byB4c2VuZHg7Ci0JICAgIH0KLQkgICAgbWFrZXN0cigmZmlsZWZpbGUscHZbU05EX0ZJ TF0uc3ZhbCk7IC8qIE9wZW4sIHJlbWVtYmVyIG5hbWUgKi8KLQkgICAgZGVidWcoRjExMCwieHNl bmQgb3BlbmVkIixmaWxlZmlsZSwwKTsKLQkgICAgd2lsZCA9IDE7Ci0JfQotICAgIH0KLQotICAg IC8qIFNFTkQgYWxvbmUuLi4gKi8KLQotI2lmbmRlZiBOT1NQTAotICAgIGlmIChjb25maXJtZWQg JiYgcHZbU05EX0FSUl0uaXZhbCA+IDApIHsKLQlpZiAoISpjbWFyZzIpIHsKLQkgICAgc25keG5h bVs3XSA9IChjaGFyKSgoYXJyYXl4ID09IDEpID8gNjQgOiBhcnJheXggKyBBUlJBWUJBU0UpOwot CSAgICBjbWFyZzIgPSBzbmR4bmFtOwotCX0KLQljbWFyZyA9ICIiOwotCWdvdG8gc2VuZGVuZDsK LSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIGlmIChjb25maXJtZWQgJiYgIWxpbmVb MF0gJiYgIWZpbGVmaWxlICYmICFjYWxpYnJhdGUpIHsKLSNpZm5kZWYgTk9NU0VORAotCWlmIChm aWxlaGVhZCkgewkJCS8qIE9LIGlmIHdlIGhhdmUgYSBTRU5ELUxJU1QgKi8KLQkgICAgbmZpbHMg PSBmaWxlc2lubGlzdDsKLQkgICAgc25kc3JjID0gbmZpbHM7CQkvKiBMaWtlIE1TRU5EICovCi0J ICAgIGFkZGxpc3QgPSAxOwkJLyogQnV0IHVzaW5nIGEgZGlmZmVyZW50IGxpc3QuLi4gKi8KLQkg ICAgZmlsZW5leHQgPSBmaWxlaGVhZDsKLQkgICAgZ290byBzZW5kZW5kOwotCX0KLSNlbmRpZiAv KiBOT01TRU5EICovCi0JcHJpbnRmKCI/RmlsZW5hbWUgcmVxdWlyZWQgYnV0IG5vdCBnaXZlblxu Iik7Ci0JeCA9IC05OwotCWdvdG8geHNlbmR4OwotICAgIH0KLQotICAgIC8qIE5vdCBzZW5kLWxp c3Qgb3IgYXJyYXkgKi8KLQotI2lmbmRlZiBOT01TRU5ECi0gICAgYWRkbGlzdCA9IDA7CQkJLyog RG9uJ3QgdXNlIFNFTkQtTElTVC4gKi8KLSAgICBmaWxlbmV4dCA9IE5VTEw7Ci0jZW5kaWYgLyog Tk9NU0VORCAqLwotCi0gICAgaWYgKG1saXN0KSB7CQkJLyogTVNFTkQgb3IgTU1PVkUgKi8KLSNp Zm5kZWYgTk9NU0VORAotCWNtbGlzdCA9IG1zZmlsZXM7CQkvKiBMaXN0IG9mIGZpbGVzIHRvIHNl bmQgKi8KLQlzbmRzcmMgPSBuZmlsczsKLQljbWFyZzIgPSAiIjsKLQlzZW5kc3RhcnQgPSAoQ0tf T0ZGX1QpMDsKLSNlbmRpZiAvKiBOT01TRU5EICovCi0jaWZkZWYgUElQRVNFTkQKLQlwaXBlc2Vu ZCA9IDA7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSAgICB9IGVsc2UgaWYgKGZpbGVmaWxlKSB7 CQkvKiBGaWxlIGNvbnRhaW5zIGxpc3Qgb2YgZmlsZW5hbWVzICovCi0JcyA9ICIiOwotCWNtYXJn ID0gIiI7Ci0JY21hcmcyID0gIiI7Ci0JbGluZVswXSA9IE5VTDsKLQluZmlscyA9IDE7Ci0Jc25k c3JjID0gMTsKLQotICAgIH0gZWxzZSBpZiAoIWNhbGlicmF0ZSAmJiBwdltTTkRfQVJSXS5pdmFs IDwgMSAmJiBwdltTTkRfQ01EXS5pdmFsIDwgMSkgewotCi0JbmZpbHMgPSBzbmRzcmMgPSAtMTsJ LyogTm90IE1TRU5ELCBNTU9WRSwgL0xJU1QsIG9yIC9BUlJBWSAqLwotCWlmICgJCQkJLyogb3Ig L0NPTU1BTkQgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotCSAgICAhcm1haWxmICYmICFycHJpbnRm CQkvKiBOb3QgTUFJTCBvciBQUklOVCAqLwotI2Vsc2UKLQkgICAgMQotI2VuZGlmIC8qIE5PRlJJ TExTICovCi0JICAgICkgewotCSAgICBDS19PRkZfVCB5ID0gKENLX09GRl9UKTE7Ci0JICAgIGlm ICghd2lsZCkKLQkgICAgICB5ID0gemNoa2kocyk7Ci0JICAgIGlmICh5IDwgKENLX09GRl9UKTAp IHsKLQkJcHJpbnRmKCI/UmVhZCBhY2Nlc3MgZGVuaWVkIC0gXCIlc1wiXG4iLCBzKTsKLQkJeCA9 IC05OwotCQlnb3RvIHhzZW5keDsKLQkgICAgfQotCSAgICBpZiAocyAhPSBsaW5lKQkJLyogV2Ug bWlnaHQgYWxyZWFkeSBoYXZlIGRvbmUgdGhpcy4gKi8KLQkgICAgICBja3N0cm5jcHkobGluZSxz LExJTkJVRlNJWik7IC8qIENvcHkgb2Ygc3RyaW5nIGp1c3QgcGFyc2VkLiAqLwotCSAgICBlbHNl Ci0JICAgICAgZGVidWcoRjExMCwiZG94c2VuZCBsaW5lPXMiLGxpbmUsMCk7Ci0JICAgIGNtYXJn ID0gbGluZTsJCS8qIEZpbGUgdG8gc2VuZCAqLwotCX0KLQl6Zm5xZnAoY21hcmcsZnNwZWNsZW4s ZnNwZWMpOwotICAgIH0KLSAgICBpZiAoIW1saXN0KSB7CQkJLyogRm9yIGFsbCBidXQgTVNFTkQu Li4gKi8KLSNpZmRlZiBQSVBFU0VORAotCWlmIChwdltTTkRfQ01EXS5pdmFsID4gMCkJLyogL0NP TU1BTkQgc2V0cyBwaXBlc2VuZCBmbGFnICovCi0JICBwaXBlc2VuZCA9IDE7Ci0JZGVidWcoRjEw MSwieHNlbmQgL0NPTU1BTkQgcGlwZXNlbmQiLCIiLHBpcGVzZW5kKTsKLQlpZiAocGlwZXNlbmQg JiYgZmlsZWZpbGUpIHsKLQkgICAgcHJpbnRmKCI/SW52YWxpZCBzd2l0Y2ggY29tYmluYXRpb25c biIpOwotCSAgICB4ID0gLTk7Ci0JICAgIGdvdG8geHNlbmR4OwotCX0KLSNlbmRpZiAvKiBQSVBF U0VORCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgLyogSWYgYXMtbmFtZSBnaXZlbiBhbmQgZmls ZXNwZWMgaXMgd2lsZCwgYXMtbmFtZSBtdXN0IGNvbnRhaW4gdmFyaWFibGVzICovCi0JZGVidWco RjExMSwiZG94c2VuZCBjbWFyZzIgd2lsZCIsY21hcmcyLHdpbGQpOwotCWlmICh3aWxkICYmICpj bWFyZzIpIHsKLQkgICAgY2hhciAqIHMgPSB0bXBidWY7Ci0JICAgIHggPSBUTVBCVUZTSVo7Ci0J ICAgIHp6c3RyaW5nKGNtYXJnMiwmcywmeCk7Ci0JICAgIGlmICghc3RyY21wKHRtcGJ1ZixjbWFy ZzIpKSB7Ci0JCXByaW50ZigKLSAgICAiP0FzLW5hbWUgZm9yIGZpbGUgZ3JvdXAgbXVzdCBjb250 YWluIHZhcmlhYmxlcyBzdWNoIGFzIFxcdihmaWxlbmFtZSlcbiIKLQkJICAgICAgICk7Ci0JCXgg PSAtOTsKLQkJZ290byB4c2VuZHg7Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQot ICAgIC8qIFN0cmlwIGJyYWNlcyBmcm9tIGFzLW5hbWUgKi8KLQlkZWJ1ZyhGMTEwLCJ4c2VuZCBj bWFyZzIgYmVmb3JlIHN0cmlwcGluZyIsY21hcmcyLDApOwotCWNtYXJnMiA9IGJyc3RyaXAoY21h cmcyKTsKLQlkZWJ1ZyhGMTEwLCJ4c2VuZCBmaWxlbmFtZSIsY21hcmcsMCk7Ci0JZGVidWcoRjEx MCwieHNlbmQgYXMtbmFtZSIsY21hcmcyLDApOwotCi0gICAgLyogQ29weSBhcy1uYW1lIHRvIGEg c2FmZSBwbGFjZSAqLwotCi0JaWYgKGFzbmJ1ZikgewotCSAgICBmcmVlKGFzbmJ1Zik7Ci0JICAg IGFzbmJ1ZiA9IE5VTEw7Ci0JfQotCWlmICgoeSA9IHN0cmxlbihjbWFyZzIpKSA+IDApIHsKLQkg ICAgYXNuYnVmID0gKGNoYXIgKikgbWFsbG9jKHkgKyAxKTsKLQkgICAgaWYgKGFzbmJ1Zikgewot CQlzdHJjcHkoYXNuYnVmLGNtYXJnMik7CS8qIHNhZmUgKi8KLQkJY21hcmcyID0gYXNuYnVmOwot CSAgICB9IGVsc2UgY21hcmcyID0gIiI7Ci0JfQotCi0jaWZkZWYgQ0tfUkVTRU5ECi0JZGVidWco RjExMSwieHNlbmQgcHZbU05EX1NUQV0uaXZhbCIsIiIscHZbU05EX1NUQV0uaXZhbCk7Ci0JaWYg KHB2W1NORF9TVEFdLnd2YWwgPiAoQ0tfT0ZGX1QpLTEpIHsgLyogL1NUQVJUIHBvc2l0aW9uICov Ci0JICAgIGlmICh3aWxkKSB7Ci0JCXByaW50ZigiPy9TVEFSVElORy1BVCBtYXkgbm90IGJlIHVz ZWQgd2l0aCBtdWx0aXBsZSBmaWxlcy5cbiIpOwotCQl4ID0gLTk7Ci0JCWdvdG8geHNlbmR4Owot CSAgICB9IGVsc2UKLQkgICAgICBzZW5kc3RhcnQgPSBwdltTTkRfU1RBXS53dmFsOwotCX0gZWxz ZQotCSAgc2VuZHN0YXJ0ID0gKENLX09GRl9UKTA7Ci0JZGVidWcoRjEwMSwieHNlbmQgL1NUQVJU SU5HIiwiIixzZW5kc3RhcnQpOwotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotICAgIH0KLQotc2Vu ZGVuZDoJCQkJLyogQ29tbW9uIHN1Y2Nlc3NmdWwgZXhpdCAqLwotICAgIG1vdmluZyA9IDA7Ci0g ICAgaWYgKHB2W1NORF9TSEhdLml2YWwgPiAwKSB7CQkvKiBTRU5EIC9RVUlFVC4uLiAqLwotCWdf ZGlzcGxhID0gZmRpc3BsYTsKLQlmZGlzcGxhID0gMDsKLQlkZWJ1ZyhGMTAxLCJ4c2VuZCBkaXNw bGF5IiwiIixmZGlzcGxhKTsKLSAgICB9Ci0KLSNpZm5kZWYgTk9TUEwJCQkJLyogU0VORCAvQVJS QVkuLi4gKi8KLSAgICBpZiAocHZbU05EX0FSUl0uaXZhbCA+IDApIHsKLQlpZiAoIWFwKSB7IHgg PSAtMjsgZ290byB4c2VuZHg7IH0gLyogKHNob3VsZG4ndCBoYXBwZW4pICovCi0JaWYgKHJhbmdl WzBdID09IC0xKQkJLyogSWYgbG93IGVuZCBvZiByYW5nZSBub3Qgc3BlY2lmaWVkICovCi0JICBy YW5nZVswXSA9IDE7CQkJLyogZGVmYXVsdCB0byAxICovCi0JaWYgKHJhbmdlWzFdID09IC0xKQkJ LyogSWYgaGlnaCBub3Qgc3BlY2lmaWVkICovCi0JICByYW5nZVsxXSA9IGFfZGltW2FycmF5eF07 CS8qIGRlZmF1bHQgdG8gc2l6ZSBvZiBhcnJheSAqLwotCWlmICgocmFuZ2VbMF0gPCAwKSB8fAkJ LyogQ2hlY2sgcmFuZ2UgKi8KLQkgICAgKHJhbmdlWzBdID4gYV9kaW1bYXJyYXl4XSkgfHwKLQkg ICAgKHJhbmdlWzFdIDwgcmFuZ2VbMF0pIHx8Ci0JICAgIChyYW5nZVsxXSA+IGFfZGltW2FycmF5 eF0pKSB7Ci0JICAgIHByaW50ZigiP0JhZCBhcnJheSByYW5nZSAtIFslZDolZF1cbiIscmFuZ2Vb MF0scmFuZ2VbMV0pOwotCSAgICB4ID0gLTk7Ci0JICAgIGdvdG8geHNlbmR4OwotCX0KLQlzbmRh cnJheSA9IGFwOwkJCS8qIEFycmF5IHBvaW50ZXIgKi8KLQlzbmR4aW4gPSBhcnJheXg7CQkvKiBB cnJheSBpbmRleCAqLwotCXNuZHhsbyA9IHJhbmdlWzBdOwkJLyogQXJyYXkgcmFuZ2UgKi8KLQlz bmR4aGkgPSByYW5nZVsxXTsKLQlzbmR4bmFtWzddID0gKGNoYXIpKChzbmR4aW4gPT0gMSkgPyA2 NCA6IHNuZHhpbiArIEFSUkFZQkFTRSk7Ci0KLSNpZmRlZiBDT01NRU5UCi0JcHJpbnRmKCJTRU5E SU5HIEZST00gQVJSQVk6ICYlY1tdLi4uXG4iLCAvKiBkZWJ1Z2dpbmcgKi8KLQkgICAgICAgKHNu ZHhpbiA9PSAxKSA/IDY0IDogc25keGluICsgQVJSQVlCQVNFKTsKLQlwcmludGYoIkxvPSVkXG5I aT0lZFxuIiwgc25keGxvLCBzbmR4aGkpOwotCXByaW50ZigiY21hcmc9WyVzXVxuY21hcmcyPVsl c11cbiIsIGNtYXJnLCBjbWFyZzIpOwotCXdoaWxlICgoeCA9IGFnbmJ5dGUoKSkgPiAtMSkgewot CSAgICBwdXRjaGFyKChjaGFyKXgpOwotCX0KLQlyZXR1cm4oMSk7Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgaWYgKHB2W1NORF9BUlJdLml2 YWwgPCAxKSB7CQkvKiBGaWxlIHNlbGVjdGlvbiAmIGRpc3Bvc2l0aW9uLi4uICovCi0KLQlpZiAo cHZbU05EX0RFTF0uaXZhbCA+IDApCS8qIC9ERUxFVEUgd2FzIHNwZWNpZmllZCAqLwotCSAgbW92 aW5nID0gMTsKLQlkZWJ1ZyhGMTAxLCJ4c2VuZCAvREVMRVRFIiwiIixtb3ZpbmcpOwotCWlmIChw dltTTkRfQUZUXS5pdmFsID4gMCkJLyogQ29weSBTRU5EIGNyaXRlcmlhICovCi0JICBja3N0cm5j cHkoc25kYWZ0ZXIscHZbU05EX0FGVF0uc3ZhbCwxOSk7Ci0JaWYgKHB2W1NORF9CRUZdLml2YWwg PiAwKQotCSAgY2tzdHJuY3B5KHNuZGJlZm9yZSxwdltTTkRfQkVGXS5zdmFsLDE5KTsKLQlpZiAo cHZbU05EX05BRl0uaXZhbCA+IDApCi0JICBja3N0cm5jcHkoc25kbmFmdGVyLHB2W1NORF9OQUZd LnN2YWwsMTkpOwotCWlmIChwdltTTkRfTkJFXS5pdmFsID4gMCkKLQkgIGNrc3RybmNweShzbmRu YmVmb3JlLHB2W1NORF9OQkVdLnN2YWwsMTkpOwotCWlmIChwdltTTkRfRVhDXS5pdmFsID4gMCkK LQkgIG1ha2VsaXN0KHB2W1NORF9FWENdLnN2YWwsc25kZXhjZXB0LE5TTkRFWENFUFQpOwotCWlm IChwdltTTkRfU01BXS53dmFsID4gKENLX09GRl9UKS0xKQotCSAgc25kc21hbGxlciA9IHB2W1NO RF9TTUFdLnd2YWw7Ci0JaWYgKHB2W1NORF9MQVJdLnd2YWwgPiAoQ0tfT0ZGX1QpLTEpCi0JICBz bmRsYXJnZXIgPSBwdltTTkRfTEFSXS53dmFsOwotCWlmIChwdltTTkRfTkFNXS5pdmFsID4gLTEp IHsKLQkgICAgZ19mbmNudiA9IGZuY252OwkJLyogU2F2ZSBnbG9iYWwgdmFsdWUgKi8KLQkgICAg Zm5jbnYgPSBwdltTTkRfTkFNXS5pdmFsOwotCSAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCBmbmNudiIs IiIsZm5jbnYpOwotCX0KLQlpZiAocHZbU05EX1BUSF0uaXZhbCA+IC0xKSB7Ci0JICAgIGdfc3Bh dGggPSBmbnNwYXRoOwkJLyogU2F2ZSBnbG9iYWwgdmFsdWVzICovCi0JICAgIGZuc3BhdGggPSBw dltTTkRfUFRIXS5pdmFsOwotI2lmbmRlZiBOWkxUT1IKLQkgICAgaWYgKGZuc3BhdGggIT0gUEFU SF9PRkYpIHsKLQkJZ19mbmNudiA9IGZuY252OwkvKiBCYWQgYmFkLi4uICovCi0JCWZuY252ID0g WFlGTl9DOwotCSAgICB9Ci0jZW5kaWYgLyogTlpMVE9SICovCi0JICAgIGRlYnVnKEYxMDEsInhz ZW5kIGZuc3BhdGgiLCIiLGZuc3BhdGgpOwotCSAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCBmbmNudiIs IiIsZm5jbnYpOwotCX0KLSAgICB9Ci0KLSNpZmRlZiBQSVBFU0VORAotICAgIGlmIChwdltTTkRf RkxUXS5pdmFsID4gMCkgewotCW1ha2VzdHIoJnNuZGZpbHRlcixwdltTTkRfRkxUXS5zdmFsKTsK LQlkZWJ1ZyhGMTEwLCJ4c2VuZCAvRklMVEVSIiwgc25kZmlsdGVyLCAwKTsKLSAgICB9Ci0jZW5k aWYgLyogUElQRVNFTkQgKi8KLQotI2lmZGVmIENLX0FQQwotLyogTU9WRSBub3QgYWxsb3dlZCBp biBBUENzICovCi0gICAgaWYgKG1vdmluZyAmJgotCShhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8 IGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFKQotCSYmICEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKQot ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLSNpZmRlZiBJ S1NfT1BUSU9OCi0gICAgaWYgKAotI2lmZGVmIENLX1hZWgotICAgICAgICBwcm90b2NvbCA9PSBQ Uk9UT19LICYmCi0jZW5kaWYgLyogQ0tfWFlaICovCi0gICAgICAgICFpa3Nfd2FpdChLRVJNSVRf UkVRX1NUQVJULDEpKSB7Ci0gICAgICAgIHByaW50ZigiP0EgS2VybWl0IFNlcnZlciBpcyBub3Qg YXZhaWxhYmxlIHRvIHByb2Nlc3MgdGhpcyBjb21tYW5kLlxuIik7Ci0gICAgICAgIHByaW50Zigi P1N0YXJ0IGEgUkVDRUlWRSBjb21tYW5kIHRvIGNvbXBsZW1lbnQgdGhpcyBjb21tYW5kLlxuIik7 Ci0gICAgfQotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLQotI2lmZGVmIElLU0QKLSNpZmRlZiBD S19MT0dJTgotICAgIGlmIChtb3ZpbmcgJiYgaW5zZXJ2ZXIgJiYgaXNndWVzdCkgewotICAgICAg ICBwcmludGYoIj9GaWxlIGRlbGV0aW9uIG5vdCBhbGxvd2VkIGZvciBndWVzdHMuXG4iKTsKLQly ZXR1cm4oLTkpOwotICAgIH0KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0Qg Ki8KLQotICAgIHNzdGF0ZSA9ICdzJzsJCQkvKiBTZXQgc3RhcnQgc3RhdGUgdG8gU0VORCAqLwot ICAgIHNuZGNtZCA9IDE7Ci0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgaWYgKHB2W1NORF9SRVNdLml2 YWwgPiAwKQkJLyogU2VuZCBzZW5kbW9kZSBhcHByb3ByaWF0ZWx5ICovCi0gICAgICBzZW5kbW9k ZSA9IFNNX1JFU0VORDsKLSAgICBlbHNlIGlmIChwdltTTkRfU1RBXS5pdmFsID4gMCkKLSAgICAg IHNlbmRtb2RlID0gU01fUFNFTkQ7Ci0gICAgZWxzZQotI2VuZGlmIC8qIENLX1JFU0VORCAqLwot ICAgIGlmIChtbGlzdCkKLSAgICAgIHNlbmRtb2RlID0gU01fTVNFTkQ7Ci0gICAgZWxzZQotICAg ICAgc2VuZG1vZGUgPSBTTV9TRU5EOwotI2lmZGVmIE1BQwotICAgIHdoYXQgPSBXX1NFTkQ7Ci0g ICAgc2NyY3JlYXRlKCk7Ci0jZW5kaWYgLyogTUFDICovCi0gICAgaWYgKGxvY2FsICYmIHB2W1NO RF9TSEhdLml2YWwgIT0gMCkgeyAvKiBJZiBpbiBsb2NhbCBtb2RlLCAqLwotCWRpc3BsYSA9IDE7 CQkJLyogdHVybiBvbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgKi8KLSAgICB9Ci0gICAgeCA9IDA7 Ci0KLSAgeHNlbmR4OgkJCQkvKiBDb21tb24gZXhpdCwgaW5jbHVkaW5nIGZhaWx1cmUgKi8KLSAg ICBkZWJ1ZyhGMTAxLCJkb3hzZW5kIHNuZHNyYyIsIiIsc25kc3JjKTsKLSAgICBmb3IgKGkgPSAw OyBpIDw9IFNORF9NQVg7IGkrKykgewkvKiBGcmVlIG1hbGxvYydkIG1lbW9yeSAqLwotCWlmIChw dltpXS5zdmFsKQotCSAgZnJlZShwdltpXS5zdmFsKTsKLSAgICB9Ci0gICAgcmV0dXJuKHgpOwot fQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLS8qICBEIE8gWCBDIE8g TiBOICAtLSAgQ09OTkVDVCBjb21tYW5kIHBhcnNpbmcgd2l0aCBzd2l0Y2hlcyAqLwotCi0jaWZk ZWYgWExJTUlUUwotI2RlZmluZSBYTElNT1JUUklHR0VSCi0jZWxzZQotI2lmZGVmIENLX1RSSUdH RVIKLSNkZWZpbmUgWExJTU9SVFJJR0dFUgotI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KLSNlbmRp ZiAvKiAgWExJTUlUUyAqLwotCi0jaWZkZWYgQ0tUSURMRQotaW50IHR0X2lkbGVsaW1pdCA9IDA7 CQkJLyogVGVybWluYWwgaWRsZSBsaW1pdCAqLwotaW50IHR0X2lkbGVhY3QgPSBJRExFX1JFVDsJ CS8qIFRlcm1pbmFsIGlkbGUgYWN0aW9uICovCi0jZW5kaWYgLyogQ0tUSURMRSAqLwotCi0jaWZk ZWYgT1MyCQkJCS8qIEs5NSBvbmx5OiAqLwotZXh0ZXJuIGludAotICB0dF9pZGxlc25kX3RtbzsJ CQkvKiAgIElkbGUgaW50ZXJ2YWwgKi8KLWludCB0dF90aW1lbGltaXQgPSAwOwkJCS8qICAgVGlt ZSBsaW1pdCwgMCA9IG5vbmUgKi8KLWV4dGVybiBjaGFyICoJCQkJLyogUGFyc2UgcmVzdWx0cyAt IHN0cmluZ3M6ICovCi0gIHR0X2lkbGVzbmRfc3RyOwkJCS8qICAgSWRsZSBzdHJpbmcgKi8KLSNl bmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENLX1RSSUdHRVIKLWV4dGVybiBjaGFyICp0dF90cmln Z2VyW107Ci1leHRlcm4gQ0hBUiAqdHRfdHJtYXRjaFtdOwotZXh0ZXJuIGNoYXIgKnRyaWdnZXJ2 YWw7Ci1zdGF0aWMgY2hhciAqZ190dF90cmlnZ2VyW1RSSUdHRVJTXTsKLSNlbmRpZiAvKiBDS19U UklHR0VSICovCi0KLSNpZmRlZiBPUzIKLXN0YXRpYyBpbnQgZ190dF9pZGxlc25kX3RtbywgZ190 dF90aW1lbGltaXQ7IC8qIEZvciBzYXZpbmcgYW5kIHJlc3RvcmluZyAqLwotc3RhdGljIGludCBn X3R0X2lkbGVsaW1pdCwgZ190dF9zYXZlZCA9IDA7Ci1zdGF0aWMgY2hhciAqIGdfdHRfaWRsZXNu ZF9zdHI7CQkvKiBnbG9iYWwgc2V0dGluZ3MgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotc3RhdGlj IHN0cnVjdCBzdHJpbmdpbnQgcHZbQ09OTl9NQVgrMV07Ci0KLVZPSUQKLXJlc2Nvbm4oKSB7Ci0g ICAgaW50IGk7Ci0KLSNpZmRlZiBPUzIKLSAgICBpZiAoIGdfdHRfc2F2ZWQgKSB7Ci0gICAgICAg IHR0X2lkbGVsaW1pdCAgID0gZ190dF9pZGxlbGltaXQ7Ci0gICAgICAgIHR0X2lkbGVzbmRfdG1v ID0gZ190dF9pZGxlc25kX3RtbzsKLSAgICAgICAgdHRfdGltZWxpbWl0ICAgPSBnX3R0X3RpbWVs aW1pdDsKLSAgICAgICAgdHRfaWRsZXNuZF9zdHIgPSBnX3R0X2lkbGVzbmRfc3RyOwotICAgICAg ICBnX3R0X3NhdmVkID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBDS19U UklHR0VSCi0gICAgZm9yIChpID0gMDsgaSA8IFRSSUdHRVJTOyBpKyspCi0gICAgICB0dF90cmln Z2VyW2ldID0gZ190dF90cmlnZ2VyW2ldOwotI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KLQotICAg IGZvciAoaSA9IDA7IGkgPD0gQ09OTl9NQVg7IGkrKykgewkvKiBGcmVlIG1hbGxvYydkIG1lbW9y eSAqLwotCWlmIChwdltpXS5zdmFsKQotCSAgZnJlZShwdltpXS5zdmFsKTsKLSAgICAgICAgcHZb aV0uc3ZhbCA9IE5VTEw7Ci0gICAgfQotfQotCi1pbnQKLWRveGNvbm4oY3gpIGludCBjeDsgewot ICAgIGludCBjLCBpLCBuOwkJCS8qIFdvcmtlcnMgKi8KLSAgICBpbnQgeCwgeTsKLSAgICBpbnQg Z2V0dmFsID0gMDsJCQkvKiBXaGV0aGVyIHRvIGdldCBzd2l0Y2ggdmFsdWUgKi8KLSAgICBpbnQg YXN5bmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIGFuIGFzeW5jIGNvbm5lY3Qg Ki8KLSAgICBzdHJ1Y3QgRkRCIHN3LCBjbTsJCQkvKiBGREJzIGZvciBlYWNoIHBhcnNlIGZ1bmN0 aW9uICovCi0gICAgZXh0ZXJuIEZJTEUgKiB0ZmlsZVtdOwotICAgIGV4dGVybiBjaGFyICogbWFj cFtdOwotCi0jaWZkZWYgT1MyCi0gICAgZ190dF9pZGxlc25kX3RtbyA9IHR0X2lkbGVzbmRfdG1v OwkvKiBTYXZlIGdsb2JhbCBzZXR0aW5ncyAqLwotICAgIGdfdHRfdGltZWxpbWl0ICAgPSB0dF90 aW1lbGltaXQ7Ci0gICAgZ190dF9pZGxlbGltaXQgICA9IHR0X2lkbGVsaW1pdDsKLSAgICBnX3R0 X2lkbGVzbmRfc3RyID0gdHRfaWRsZXNuZF9zdHI7Ci0gICAgZ190dF9zYXZlZCA9IDE7Ci0jZW5k aWYgLyogT1MyICovCi0KLSNpZmRlZiBDS19UUklHR0VSCi0gICAgaWYgKCF0dF90cmlnZ2VyWzBd KSB7CQkvKiBGaXJzdCBpbml0aWFsaXphdGlvbiAqLwotCWZvciAoaSA9IDE7IGkgPCBUUklHR0VS UzsgaSsrKQotCSAgdHRfdHJpZ2dlcltpXSA9IE5VTEw7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7 IGkgPCBUUklHR0VSUzsgaSsrKQotICAgICAgZ190dF90cmlnZ2VyW2ldID0gdHRfdHJpZ2dlcltp XTsKLSAgICBpZiAodHJpZ2dlcnZhbCkgewotCWZyZWUodHJpZ2dlcnZhbCk7Ci0JdHJpZ2dlcnZh bCA9IE5VTEw7Ci0gICAgfQotI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KLQotICAgIGZvciAoaSA9 IDA7IGkgPD0gQ09OTl9NQVg7IGkrKykgewkvKiBJbml0aWFsaXplIHN3aXRjaCB2YWx1ZXMgKi8K LQlwdltpXS5zdmFsID0gTlVMTDsJCS8qIHRvIG51bGwgcG9pbnRlcnMgKi8KLQlwdltpXS5pdmFs ID0gLTE7CQkvKiBhbmQgLTEgaW50IHZhbHVlcyAqLwotCXB2W2ldLnd2YWwgPSAoQ0tfT0ZGX1Qp LTE7Ci0gICAgfQotICAgIGlmIChjeCA9PSBYWENRKQkJCS8qIENRID09IENPTk5FQ1QgL1FVSUVU TFkgKi8KLSAgICAgIHB2W0NPTk5fTlZdLml2YWwgPSAxOwotCi0gICAgLyogU2V0IHVwIGNoYWlu ZWQgcGFyc2UgZnVuY3Rpb25zLi4uICovCi0KLSAgICBjbWZkYmkoJnN3LAkJCQkvKiBGaXJzdCBG REIgLSBjb21tYW5kIHN3aXRjaGVzICovCi0JICAgX0NNS0VZLAkJCS8qIGZjb2RlICovCi0JICAg IlN3aXRjaCIsCQkJLyogaGxwbXNnICovCi0JICAgIiIsCQkJCS8qIGRlZmF1bHQgKi8KLQkgICAi IiwJCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkgICBuY29ubnRhYiwJCQkvKiBhZGR0bCBu dW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLQkgICA0LAkJCQkvKiBhZGR0bCBudW1lcmljIGRh dGEgMjogNCA9IGNtc3dpICovCi0JICAgeHhzdHJpbmcsCQkJLyogUHJvY2Vzc2luZyBmdW5jdGlv biAqLwotCSAgIGNvbm50YWIsCQkJLyogS2V5d29yZCB0YWJsZSAqLwotCSAgICZjbQkJCQkvKiBQ b2ludGVyIHRvIG5leHQgRkRCICovCi0JICAgKTsKLSAgICBjbWZkYmkoJmNtLAkJCQkvKiAybmQg RkRCIC0gQ29uZmlybWF0aW9uICovCi0JICAgX0NNQ0ZNLAkJCS8qIGZjb2RlICovCi0JICAgIiIs CQkJCS8qIGhscG1zZyAqLwotCSAgICIiLAkJCQkvKiBkZWZhdWx0ICovCi0JICAgIiIsCQkJCS8q IGFkZHRsIHN0cmluZyBkYXRhICovCi0JICAgMCwJCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEg Ki8KLQkgICAwLAkJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotCSAgIE5VTEwsCi0JICAg TlVMTCwKLQkgICBOVUxMCi0JICAgKTsKLQotICAgIHdoaWxlICgxKSB7CQkJCS8qIFBhcnNlIDAg b3IgbW9yZSBzd2l0Y2hlcyAqLwotCXggPSBjbWZkYigmc3cpOwkJCS8qIFBhcnNlIHN3aXRjaCBv ciBjb25maXJtYXRpb24gKi8KLQlkZWJ1ZyhGMTAxLCJkb3hjb25uIGNtZmRiIiwiIix4KTsKLQlp ZiAoeCA8IDApIHsJCQkvKiBFcnJvciAqLwotCSAgICBpZiAoeCA9PSAtOSB8fCB4ID09IC0yKQot CSAgICAgIHByaW50ZigiP05vIHN3aXRjaGVzIG1hdGNoIC0gXCIlc1wiXG4iLGF0bWJ1Zik7Ci0J ICAgIGdvdG8geGNvbm54OwkJLyogb3IgcmVwYXJzZSBuZWVkZWQgKi8KLQl9Ci0JaWYgKGNtcmVz dWx0LmZjb2RlICE9IF9DTUtFWSkJLyogQnJlYWsgb3V0IGlmIG5vdCBhIHN3aXRjaCAqLwotCSAg YnJlYWs7Ci0JYyA9IGNtZ2JyaygpOwkJCS8qIEdldCBicmVhayBjaGFyYWN0ZXIgKi8KLQlnZXR2 YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpOyAvKiB0byBzZWUgaG93IHRoZXkgZW5kZWQgdGhl IHN3aXRjaCAqLwotCWlmIChnZXR2YWwgJiYgIShjbXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7 Ci0JICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYXJndW1lbnRzXG4iKTsK LQkgICAgeCA9IC05OwotCSAgICBnb3RvIHhjb25ueDsKLQl9Ci0JaWYgKCFnZXR2YWwgJiYgKGNt Z2t3ZmxncygpICYgQ01fQVJHKSkgewotCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJl cyBhbiBhcmd1bWVudFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCW4gPSBjbXJlc3VsdC5u cmVzdWx0OwkJLyogTnVtZXJpYyByZXN1bHQgPSBzd2l0Y2ggdmFsdWUgKi8KLQlkZWJ1ZyhGMTAx LCJkb3hjb25uIHN3aXRjaCIsIiIsbik7Ci0KLQlzd2l0Y2ggKG4pIHsJCQkvKiBQcm9jZXNzIHRo ZSBzd2l0Y2ggKi8KLSNpZmRlZiBPUzIKLQkgIGNhc2UgQ09OTl9BUzoJCQkvKiBBc3luY2hyb25v dXMgKi8KLSAgICAgICAgICAgIHB2W0NPTk5fQVNdLml2YWwgPSAxOwotICAgICAgICAgICAgcHZb Q09OTl9TWV0uaXZhbCA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIENP Tk5fU1k6ICAgICAgICAgICAgICAgICAvKiBTeW5jaHJvbm91cyAqLwotICAgICAgICAgICAgcHZb Q09OTl9TWV0uaXZhbCA9IDE7Ci0gICAgICAgICAgICBwdltDT05OX0FTXS5pdmFsID0gMDsKLSAg ICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE9TMiAqLwotCSAgY2FzZSBDT05OX05WOgkJCS8q IE5vbi12ZXJiYWwgKi8KLQkgICAgcHZbbl0uaXZhbCA9IDE7Ci0JICAgIGJyZWFrOwotI2lmZGVm IFhMSU1JVFMKLQkgIGNhc2UgQ09OTl9JSToJCQkvKiBJZGxlLWludGVydmFsICovCi0JICBjYXNl IENPTk5fSUw6CQkJLyogSWRsZS1saW1pdCAqLwotCSAgY2FzZSBDT05OX1RMOgkJCS8qIFRpbWUt bGltaXQgKi8KLQkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotCSAgICBpZiAoKHggPSBjbW51bSgi U2Vjb25kcyIsIjAiLDEwLCZ5LHh4c3RyaW5nKSkgPCAwKQotCSAgICAgIGdvdG8geGNvbm54Owot CSAgICBwdltuXS5pdmFsID0geTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIENPTk5fSVM6CQkJLyog SWRsZS1zdHJpbmcgKi8KLSNlbmRpZiAvKiBYTElNSVRTICovCi0jaWZkZWYgQ0tfVFJJR0dFUgot CSAgY2FzZSBDT05OX1RTOgkJCS8qIFRyaWdnZXItc3RyaW5nICovCi0jZW5kaWYgLyogQ0tfVFJJ R0dFUiAqLwotI2lmZGVmIFhMSU1PUlRSSUdHRVIKLQkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwot CSAgICBpZiAoKHggPSBjbWZsZCgiU3RyaW5nIChlbmNsb3NlIGluIGJyYWNlcyBpZiBpdCBjb250 YWlucyBzcGFjZXMpIiwKLQkJCSAgICIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0JCWlmICh4ID09 IC0zKSB7Ci0JCSAgICBwcmludGYoIj9TdHJpbmcgcmVxdWlyZWRcbiIpOwotCQkgICAgeCA9IC05 OwotCQl9Ci0JCWdvdG8geGNvbm54OwotCSAgICB9Ci0JICAgIGlmIChuICE9IENPTk5fVFMpCi0J ICAgICAgcyA9IGJyc3RyaXAocyk7Ci0JICAgIGlmICgoeSA9IHN0cmxlbihzKSkgPiAwKSB7Ci0J CWlmIChwdltuXS5zdmFsKSBmcmVlKHB2W25dLnN2YWwpOwotCQlwdltuXS5zdmFsID0gbWFsbG9j KHkrMSk7Ci0JCWlmIChwdltuXS5zdmFsKSB7Ci0JCSAgICBzdHJjcHkocHZbbl0uc3ZhbCxzKTsg Lyogc2FmZSAqLwotCQkgICAgcHZbbl0uaXZhbCA9IDE7Ci0JCX0KLQkgICAgfQotCSAgICBicmVh azsKLSNlbmRpZiAvKiBYTElNT1JUUklHR0VSICovCi0JICBkZWZhdWx0OgotCSAgICBwcmludGYo Ij9VbmV4cGVjdGVkIHN3aXRjaCB2YWx1ZSAtICVkXG4iLGNtcmVzdWx0Lm5yZXN1bHQpOwotCSAg ICB4ID0gLTk7Ci0JICAgIGdvdG8geGNvbm54OwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwi ZG94Y29ubiBjbXJlc3VsdC5mY29kZSIsIiIsY21yZXN1bHQuZmNvZGUpOwotICAgIGlmIChjbXJl c3VsdC5mY29kZSAhPSBfQ01DRk0pIHsKLQlwcmludGYoIj9VbmV4cGVjdGVkIGZ1bmN0aW9uIGNv ZGU6ICVkXG4iLGNtcmVzdWx0LmZjb2RlKTsKLQl4ID0gLTk7Ci0JZ290byB4Y29ubng7Ci0gICAg fQotCi0gICAgLyogQ29tbWFuZCB3YXMgY29uZmlybWVkIHNvIHdlIGNhbiBwcmUtcG9wIGNvbW1h bmQgbGV2ZWwuICovCi0gICAgLyogVGhpcyBpcyBzbyBDT05ORUNUIG1vZHVsZSB3b24ndCB0aGlu ayB3ZSdyZSBleGVjdXRpbmcgYSBzY3JpcHQgKi8KLSAgICAvKiBpZiBDT05ORUNUIHdhcyB0aGUg ZmluYWwgY29tbWFuZCBpbiB0aGUgc2NyaXB0LiAqLwotCi0gICAgaWYgKGNtZGx2bCA+IDApCi0g ICAgICBwcmVwb3AoKTsKLQotI2lmZGVmIE9TMgkJCQkvKiBNYWtlIHJlc3VsdHMgYXZhaWxhYmxl IGdsb2JhbGx5ICovCi0gICAgaWYgKHB2W0NPTk5fSUxdLml2YWwgPiAtMSkJCS8qIElkbGUgbGlt aXQgKi8KLSAgICAgIHR0X2lkbGVsaW1pdCA9IHB2W0NPTk5fSUxdLml2YWw7Ci0gICAgaWYgKHB2 W0NPTk5fSUldLml2YWwgPiAtMSkJCS8qIElkbGUgbGltaXQgKi8KLSAgICAgIHR0X2lkbGVzbmRf dG1vID0gcHZbQ09OTl9JSV0uaXZhbDsKLSAgICBpZiAocHZbQ09OTl9JU10uc3ZhbCkJCS8qIElk bGUgc3RyaW5nICovCi0gICAgICBpZiAodHRfaWRsZXNuZF9zdHIgPSAoY2hhciAqKW1hbGxvYygo aW50KXN0cmxlbihwdltDT05OX0lTXS5zdmFsKSsxKSkKLQlzdHJjcHkodHRfaWRsZXNuZF9zdHIs cHZbQ09OTl9JU10uc3ZhbCk7IC8qIHNhZmUgKi8KLSAgICBpZiAocHZbQ09OTl9UTF0uaXZhbCA+ IC0xKQkJLyogU2Vzc2lvbiBsaW1pdCAqLwotICAgICAgdHRfdGltZWxpbWl0ID0gcHZbQ09OTl9U TF0uaXZhbDsKLSAgICBhc3luYyA9IChwdltDT05OX0FTXS5pdmFsID4gMCB8fAotICAgICAgICAg ICAgIHB2W0NPTk5fU1ldLml2YWwgPD0gMCAmJiBjbWRsdmwgPT0gMCkgPyAxIDogMDsKLSNlbmRp ZiAvKiBPUzIgKi8KLQotI2lmZGVmIENLX1RSSUdHRVIKLSAgICBpZiAocHZbQ09OTl9UU10uc3Zh bCkJCS8qIFRyaWdnZXIgc3RyaW5ncyAqLwotICAgICAgbWFrZWxpc3QocHZbQ09OTl9UU10uc3Zh bCx0dF90cmlnZ2VyLFRSSUdHRVJTKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgVFJJR0dFUlM7IGkr KykJLyogVHJpZ2dlciBtYXRjaCBwb2ludGVycyAqLwotICAgICAgdHRfdHJtYXRjaFtpXSA9IE5V TEw7Ci0gICAgaWYgKHRyaWdnZXJ2YWwpIHsJCQkvKiBSZXNldCB0cmlnZ2VyIHZhbHVlICovCi0J ZnJlZSh0cmlnZ2VydmFsKTsKLQl0cmlnZ2VydmFsID0gTlVMTDsKLSAgICB9Ci0jZW5kaWYgLyog Q0tfVFJJR0dFUiAqLwotCi0jaWZkZWYgU1NIQ01ECi0vKgotICAyMDEwLzAzLzAxLi4uCi0gIFRo ZSBwcmV2aW91cyBjb25uZWN0aW9uIHdhcyB0aHJvdWdoIHRoZSBleHRlcm5hbCBzc2ggY2xpZW50 IGFuZCBub3csIHdpdGgKLSAgdGhhdCBjb25uZWN0aW9uIGNsb3NlZCwgdGhlIHVzZXIgc2F5cyAi Y29ubmVjdCIgYW5kIGV4cGVjdHMgYSBuZXcgY29ubmVjdGlvbgotICB0byBiZSBtYWRlIHRvIHRo ZSBzYW1lIGhvc3QsIGJlY2F1c2UgdGhhdCdzIGhvdyBhbGwgdGhlIG90aGVyIGNvbm5lY3Rpb24K LSAgbWV0aG9kcyB3b3JrLCBzbyAoYW5kIHRoaXMgaXMgcXVpdGUgYSBoYWNrKS4uLgotKi8KLSAg ICBpZiAoIWNrc3RyY21wKCJzc2ggIix0dG5hbWUsNCwwKSkgewkvKiBQcmV2aW91cyAiaG9zdCIg d2FzICJzc2ggYmxhaCIgKi8KLQlfUFJPVE9UWVAgKGludCByZWRvc3NoLCAoIHZvaWQgKSApOwot CWV4dGVybiBpbnQgdHR5ZmQ7Ci0JaWYgKHR0eWZkIDwgMCkgewkJLyogQW5kIGNvbm5lY3Rpb24g aXMgbm8gbG9uZ2VyIG9wZW4gKi8KLQkgICAgaW50IHh4OwotCSAgICB4eCA9IHJlZG9zc2goKTsJ CS8qIFNvIHJlZG8gdGhlIFNTSCBjb25uZWN0aW9uICovCi0JICAgIGlmICh4eCA8IDApIHJldHVy bih4eCk7Ci0JICAgIGdvdG8geGNvbm54OwotCX0KLSAgICB9Ci0jZW5kaWYJLyogU1NIQ01EICov Ci0gICAgeCA9IGRvY29uZWN0KChwdltDT05OX05WXS5pdmFsID4gMCkgPyAxIDogMCwgYXN5bmMp OwotICAgIHsKLQlpbnQgeHg7Ci0JZGVidWcoRjEwMSwiZG94Y29ubiBkb2NvbmVjdCByZXR1cm5z IiwiIix4KTsKLQlpZiAoKHh4ID0gdHRjaGsoKSkgPCAwKSBkb2xvZ2VuZCgpOwotCWRlYnVnKEYx MDEsImRveGNvbm4gdHRjaGsgcmV0dXJucyIsIiIseHgpOwotICAgIH0KLQotI2lmZGVmIENLX1RS SUdHRVIKLSAgICBkZWJ1ZyhGMTExLCJkb3hjb25uIGRvY29uZWN0IHRyaWdnZXJ2YWwiLHRyaWdn ZXJ2YWwseCk7Ci0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotCi0gIHhjb25ueDoKLSAgICAvKiBC YWNrIGZyb20gQ09OTkVDVCAtLSBSZXN0b3JlIGdsb2JhbCBzZXR0aW5ncyAqLwotCi0gICAgaWYg KCFhc3luYykKLSAgICAgIHJlc2Nvbm4oKTsKLQotICAgIHN1Y2Nlc3MgPSAoeCA+IDApID8gMSA6 IDA7Ci0gICAgcmV0dXJuKHgpOwotfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIEFE RENNRAotLyogY3ggPT0gWFhBREQgb3IgWFhSRU1WICovCi0vKiBmYyA9PSBBRERfQklOIG9yIEFE RF9UWFQgKi8KLXN0YXRpYyBpbnQKLWRvYWRkKGN4LGZjKSBpbnQgY3gsIGZjOyB7Ci0jaWZkZWYg UEFUVEVSTlMKLSAgICBjaGFyICogdG1wW0ZUUEFUVEVSTlNdOwotICAgIGNoYXIgKipwID0gTlVM TDsKLSAgICBpbnQgaSwgaiwgaywgbiA9IDAsIHggPSAwLCBsYXN0OwotCi0jZW5kaWYgLyogUEFU VEVSTlMgKi8KLSAgICBpZiAoY3ggIT0gWFhBREQgJiYgY3ggIT0gWFhSRU1WKSB7Ci0JcHJpbnRm KCI/VW5leHBlY3RlZCBmdW5jdGlvbiBjb2RlOiAlZFxuIixjeCk7Ci0JcmV0dXJuKC05KTsKLSAg ICB9Ci0jaWZkZWYgUEFUVEVSTlMKLSAgICB3aGlsZSAobiA8IEZUUEFUVEVSTlMpIHsJCS8qIENv bGxlY3QgbmV3IHBhdHRlcm5zICovCi0JdG1wW25dID0gTlVMTDsKLQlpZiAoKHggPSBjbWZsZCgi UGF0dGVybiIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JICBicmVhazsKLQlja3N0cm5jcHkobGlu ZSxzLExJTkJVRlNJWik7Ci0JcyA9IGJyc3RyaXAobGluZSk7Ci0JbWFrZXN0cigmKHRtcFtuKytd KSxzKTsKLSAgICB9Ci0gICAgaWYgKHggPT0gLTMpCi0gICAgICB4ID0gY21jZm0oKTsKLSAgICBp ZiAoeCA8IDApCi0gICAgICBnb3RvIHhkb2FkZDsKLSAgICBwID0gKGZjID09IEFERF9CSU4pID8g YmlucGF0dGVybnMgOiB0eHRwYXR0ZXJuczsgLyogV2hpY2ggbGlzdCAqLwotICAgIGxhc3QgPSAw OwotICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TOyBpKyspIHsgLyogRmluZCBsYXN0IG9u ZSBpbiBsaXN0ICovCi0JaWYgKCFwW2ldKSB7Ci0JICAgIGxhc3QgPSBpOwotCSAgICBicmVhazsK LQl9Ci0gICAgfQotICAgIGlmIChjeCA9PSBYWEFERCkgewkJCS8qIEFkZGluZyAqLwotCWlmIChs YXN0ICsgbiA+IEZUUEFUVEVSTlMpIHsJLyogQ2hlY2sgaWYgdG9vIG1hbnkgKi8KLQkgICAgcHJp bnRmKCI/VG9vIG1hbnkgcGF0dGVybnMgLSAlZCBpcyB0aGUgbWF4aW11bVxuIiwgRlRQQVRURVJO Uyk7Ci0JICAgIGdvdG8geGRvYWRkOwotCX0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkr KykgeyAgICAgICAgLyogQ29weSBpbiB0aGUgbmV3IG9uZXMuICovCi0gICAgICAgICAgZm9yIChq ID0gMCwgeCA9IDA7IHggPT0gMCAmJiBqIDwgbGFzdCA7IGorKyApCi0gICAgICAgICAgICB4ID0g IWNrc3RyY21wKHRtcFtpXSxwW2pdLC0xLGZpbGVjYXNlKTsgLyogbWF0Y2ggKi8KLSAgICAgICAg ICBpZiAoeCA9PSAwKQotICAgICAgICAgICAgbWFrZXN0cigmKHBbbGFzdCsrXSksdG1wW2ldKTsK LSAgICAgICAgfQotICAgICAgICBtYWtlc3RyKCYocFtsYXN0XSksTlVMTCk7CS8qIE51bGwtdGVy bWluYXRlIHRoZSBsaXN0ICovCi0gICAgICAgIHggPSAxOwotICAgICAgICBnb3RvIHhkb2FkZDsg ICAgICAgICAgICAgICAgICAgIC8qIERvbmUgKi8KLSAgICB9IGVsc2UgaWYgKGN4ID09IFhYUkVN VikgewkJLyogUmVtb3ZlIHNvbWV0aGluZyhzKSAqLwotCWludCBqLCBrOwotCWlmIChsYXN0ID09 IDApCQkJICAgICAgICAvKiBMaXN0IGlzIGVtcHR5ICovCi0JICBnb3RvIHhkb2FkZDsJCQkgICAg ICAgIC8qIE5vdGhpbmcgdG8gcmVtb3ZlICovCi0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgewkg ICAgICAgIC8qIGkgPSBQYXR0ZXJucyB0aGV5IHR5cGVkICovCi0JICAgIGZvciAoaiA9IDA7IGog PCBsYXN0OyBqKyspIHsgICAgICAgIC8qIGogPSBQYXR0ZXJucyBpbiBsaXN0ICovCi0JCS8qIENo YW5nZSB0aGlzIHRvIGNrc3RyY21wKCkuLi4gKi8KLQkJaWYgKGZpbGVjYXNlKQotICAgICAgICAg ICAgICAgICAgeCA9ICFja3N0cmNtcCh0bXBbaV0scFtqXSwtMSxmaWxlY2FzZSk7IC8qIG1hdGNo ICovCi0JCWVsc2UKLQkJICB4ID0gY2tzdHJjbXAodG1wW2ldLHBbal0sLTEsMCk7IC8qIENhc2Ut aW5kZXBlbmRlbnQgbWF0Y2ggKi8KLQkJaWYgKHgpIHsJICAgIAkgICAgICAgIC8qIFRoaXMgb25l IG1hdGNoZXMgKi8KLQkJICAgIG1ha2VzdHIoJihwW2pdKSxOVUxMKTsgICAgICAvKiBGcmVlIGl0 ICovCi0JCSAgICBmb3IgKGsgPSBqOyBrIDwgbGFzdDsgaysrKSAgLyogTW92ZSB0aGUgcmVzdCB1 cCAqLwotCQkgICAgICBwW2tdID0gcFtrKzFdOwotCQkgICAgcFtrXSA9IE5VTEw7CSAgICAgICAg LyogRXJhc2UgbGFzdCBvbmUgKi8KLQkJICAgIGlmICghcFtrXSkKLQkJICAgICAgYnJlYWs7Ci0J CX0KLQkgICAgfQotCX0KLSAgICB9Ci0gIHhkb2FkZDoJCQkJLyogQ29tbW9uIGV4aXQgKi8KLSAg ICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgaWYgKHRtcFtpXSkKLQlmcmVlKHRtcFtp XSk7Ci0gICAgcmV0dXJuKHgpOwotI2VuZGlmIC8qIFBBVFRFUk5TICovCi19Ci0KLS8qIEFERCBT RU5ELUxJU1QgKi8KLQotc3RhdGljIGludAotYWRkc2VuZChjeCkgaW50IGN4OyB7Ci0jaWZuZGVm IE5PTVNFTkQKLSAgICBleHRlcm4gc3RydWN0IGtleXRhYiBmdHRhYltdOwotICAgIGV4dGVybiBp bnQgbmZ0dHlwOwotICAgIHN0cnVjdCBmaWxlbGlzdCAqIGZscDsKLSAgICBjaGFyICogZm1vZGUg PSAiIjsKLSAgICBpbnQgeG1vZGUgPSAwOwotICAgIGludCB4YmluYXJ5ID0gMDsKLSNlbmRpZiAv KiBOT01TRU5EICovCi0KLSNpZmRlZiBOT01TRU5ECi0gICAgcHJpbnRmKCI/U29ycnksIEFERC9S RU1PVkUgU0VORC1MSVNUIG5vdCBhdmFpbGFibGUuXG4iKTsKLSAgICByZXR1cm4oLTkpOwotI2Vu ZGlmIC8qIE5PTVNFTkQgKi8KLSAgICBpZiAoY3ggPT0gWFhSRU1WKSB7Ci0JcHJpbnRmKCI/U29y cnksIFJFTU9WRSBTRU5ELUxJU1Qgbm90IGltcGxlbWVudGVkIHlldC5cbiIpOwotCXJldHVybigt OSk7Ci0gICAgfQotI2lmbmRlZiBOT01TRU5ECi0jaWZuZGVmIFhZWl9JTlRFUk5BTAotICAgIGlm IChwcm90b2NvbCAhPSBQUk9UT19LKSB7Ci0gICAgICAgcHJpbnRmKCI/U29ycnksIEFERCBTRU5E LUxJU1QgZG9lcyBub3Qgd29yayB3aXRoIGV4dGVybmFsIHByb3RvY29sc1xuIik7Ci0gICAgICAg cmV0dXJuKC05KTsKLSAgICB9Ci0jZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCi0KLSAgICB4ID0g Y21pZmkoIkZpbGUgc3BlY2lmaWNhdGlvbiB0byBhZGQiLCIiLCAmcywmeSx4eHN0cmluZyk7Ci0g ICAgaWYgKHggPCAwKSB7Ci0JaWYgKHggPT0gLTMpIHsKLQkgICAgcHJpbnRmKCI/QSBmaWxlIHNw ZWNpZmljYXRpb24gaXMgcmVxdWlyZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0gZWxzZQot CSAgcmV0dXJuKHgpOwotICAgIH0KLSAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsK LSAgICBzID0gdG1wYnVmOwotICAgIGlmIChmaWxlc2lubGlzdCA9PSAwKQkJLyogVGFrZSBjYXJl IG9mIFx2KGZpbGVzcGVjKSAqLwotICAgICAgZnNwZWNbMF0gPSBOVUw7Ci0gICAgemZucWZwKHMs TElOQlVGU0laLGxpbmUpOwotICAgIHMgPSBsaW5lOwotICAgIGlmICgoKGludClzdHJsZW4oZnNw ZWMpICsgKGludClzdHJsZW4ocykgKyAxKSA8IGZzcGVjbGVuKSB7Ci0Jc3RyY2F0KGZzcGVjLHMp OwkJLyogc2FmZSAqLwotCXN0cmNhdChmc3BlYywiICIpOwkJLyogc2FmZSAqLwotICAgIH0gZWxz ZQotICAgICAgcHJpbnRmKCJXQVJOSU5HIC0gXFx2KGZpbGVzcGVjKSBidWZmZXIgb3ZlcmZsb3dc biIpOwotCi0KLSAgICB4YmluYXJ5ID0gYmluYXJ5OwotICAgIGlmICgocGF0dGVybnMgfHwgZmls ZXBlZWspCQkvKiBGSUxFIFBBVFRFUk5TIG9yIFNDQU4gaXMgT04gKi8KLSNpZmRlZiBDS19MQUJF TEVECi0JJiYgYmluYXJ5ICE9IFhZRlRfTAkJLyogQW5kIG5vdCBpZiBGSUxFIFRZUEUgTEFCRUxF RCAqLwotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLSNpZmRlZiBWTVMKLQkmJiBiaW5hcnkgIT0g WFlGVF9JCQkvKiBvciBGSUxFIFRZUEUgSU1BR0UgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQkpIHsK LQlpbnQgaywgeDsKLQl4ID0gLTE7Ci0JayA9IHNjYW5maWxlKGxpbmUsJngsbnNjYW5maWxlKTsK LQlpZiAoayA+IDApIHhiaW5hcnkgPSAoayA9PSBGVF9CSU4pID8gWFlGVF9CIDogWFlGVF9UOwot ICAgIH0KLSAgICBmbW9kZSA9IGdmbW9kZSh4YmluYXJ5LDApOwotICAgIGlmICgoeCA9IGNta2V5 KGZ0dGFiLG5mdHR5cCwKLQkJICAgInR5cGUgb2YgZmlsZSB0cmFuc2ZlciIsIGZtb2RlLCB4eHN0 cmluZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICB4bW9kZSA9IHg7Ci0KLSAgICBjbWFy ZzIgPSAiIjsKLSAgICBpZiAoKHggPSBjbWZsZCh5ID8KLSAgIlxuQXMtbmFtZSB0ZW1wbGF0ZSBj b250YWluaW5nIHJlcGxhY2VtZW50IHZhcmlhYmxlcyBzdWNoIGFzIFxcdihmaWxlbmFtZSkiIDoK LSAgIk5hbWUgdG8gc2VuZCBpdCB3aXRoIiwgIiIsJnMsTlVMTCkpIDwgMCkKLSAgICAgIGlmICh4 ICE9IC0zKQotCXJldHVybih4KTsKLSNpZm5kZWYgTk9TUEwKLSAgICBpZiAoeSAmJiAqcykgewot CWNoYXIgKiBwID0gdG1wYnVmOwotCXggPSBUTVBCVUZTSVo7Ci0JenpzdHJpbmcocywmcCwmeCk7 Ci0JaWYgKCFzdHJjbXAodG1wYnVmLHMpKSB7Ci0JICAgIHByaW50ZigKLSAgIj9Bcy1uYW1lIGZv ciBmaWxlIGdyb3VwIG11c3QgY29udGFpbiB2YXJpYWJsZXMgc3VjaCBhcyBcXHYoZmlsZW5hbWUp XG4iCi0JCSAgICk7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBOT1NQ TCAqLwotICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVopOwotICAgIGNtYXJnMiA9IHRt cGJ1ZjsKLQotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAg ICBmbHAgPSAoc3RydWN0IGZpbGVsaXN0ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IGZpbGVsaXN0 KSk7Ci0gICAgaWYgKGZscCkgewotCWlmIChmaWxldGFpbCkKLQkgIGZpbGV0YWlsLT5mbF9uZXh0 ID0gZmxwOwotCWZpbGV0YWlsID0gZmxwOwotCWlmICghZmlsZWhlYWQpCi0JICBmaWxlaGVhZCA9 IGZscDsKLQl4ID0gKGludCkgc3RybGVuKGxpbmUpOwkvKiBMZW5ndGggb2YgZmlsZW5hbWUgKi8K LQlzID0gKGNoYXIgKikgbWFsbG9jKHggKyAxKTsKLQlpZiAocykgewotCSAgICBzdHJjcHkocyxs aW5lKTsJCS8qIHNhZmUgKi8KLQkgICAgZmxwLT5mbF9uYW1lID0gczsKLQkgICAgZmxwLT5mbF9t b2RlID0geG1vZGU7Ci0JICAgIHggPSAoaW50KSBzdHJsZW4oY21hcmcyKTsJLyogTGVuZ3RoIG9m IGFzLW5hbWUgKi8KLQkgICAgaWYgKHggPCAxKSB7Ci0JCWZscC0+ZmxfYWxpYXMgPSBOVUxMOwot CSAgICB9IGVsc2UgewotCQlzID0gKGNoYXIgKikgbWFsbG9jKHggKyAxKTsKLQkJaWYgKHMpIHsK LQkJICAgIHN0cmNweShzLGNtYXJnMik7CS8qIHNhZmUgKi8KLQkJICAgIGZscC0+ZmxfYWxpYXMg PSBzOwotCQl9IGVsc2UgewotCQkgICAgcHJpbnRmKCJTb3JyeSwgY2FuJ3QgYWxsb2NhdGUgc3Bh Y2UgZm9yIGFzLW5hbWUiKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkgICAgfQotCSAgICBm bHAtPmZsX25leHQgPSBOVUxMOwotCSAgICBmaWxlc2lubGlzdCsrOwkJLyogQ291bnQgdGhpcyBu b2RlICovCi0JICAgIHJldHVybihzdWNjZXNzID0gMSk7CS8qIEZpbmlzaGVkIGFkZGluZyB0aGlz IG5vZGUgKi8KLQl9IGVsc2UgewotCSAgICBwcmludGYoIlNvcnJ5LCBjYW4ndCBhbGxvY2F0ZSBz cGFjZSBmb3IgbmFtZSIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSAgICB9IGVsc2UgewotCXBy aW50ZigiU29ycnksIGNhbid0IGFsbG9jYXRlIGZpbGUgbGlzdCBub2RlIik7Ci0JcmV0dXJuKC05 KTsKLSAgICB9Ci0jZW5kaWYgLyogTk9NU0VORCAqLwotfQotI2VuZGlmIC8qIEFERENNRCAqLwot Ci0jaWZuZGVmIE5PSFRUUAkJCQkvKiBIVFRQIG9wcy4uLiAqLwotI2lmZGVmIFRDUFNPQ0tFVAot I2RlZmluZSBIVFRQX0dFVCAwCQkJLyogR0VUICovCi0jZGVmaW5lIEhUVFBfUFVUIDEJCQkvKiBQ VVQgKi8KLSNkZWZpbmUgSFRUUF9QT1MgMgkJCS8qIFBPU1QgKi8KLSNkZWZpbmUgSFRUUF9JRFgg MwkJCS8qIElOREVYICovCi0jZGVmaW5lIEhUVFBfSEVEIDQgICAgICAgICAgICAgICAgICAgICAg LyogSEVBRCAqLwotI2RlZmluZSBIVFRQX0RFTCA1ICAgICAgICAgICAgICAgICAgICAgIC8qIERF TEVURSAqLwotI2RlZmluZSBIVFRQX0NPTiA2ICAgICAgICAgICAgICAgICAgICAgIC8qIENPTk5F Q1QgKi8KLSNkZWZpbmUgSFRUUF9PUE4gNyAgICAgICAgICAgICAgICAgICAgICAvKiBPUEVOICov Ci0jZGVmaW5lIEhUVFBfQ0xTIDggICAgICAgICAgICAgICAgICAgICAgLyogQ0xPU0UgKi8KLQot c3RhdGljIHN0cnVjdCBrZXl0YWIgaHR0cHRhYltdID0gewotICAgIHsgImNsb3NlIiwgICBIVFRQ X0NMUywgMCB9LAotICAgIHsgImNvbm5lY3QiLCBIVFRQX0NPTiwgMCB9LAotICAgIHsgImRlbGV0 ZSIsICBIVFRQX0RFTCwgMCB9LAotICAgIHsgImdldCIsICAgICBIVFRQX0dFVCwgMCB9LAotICAg IHsgImhlYWQiLCAgICBIVFRQX0hFRCwgMCB9LAotICAgIHsgImluZGV4IiwgICBIVFRQX0lEWCwg MCB9LAotICAgIHsgIm9wZW4iLCAgICBIVFRQX09QTiwgMCB9LAotICAgIHsgInB1dCIsICAgICBI VFRQX1BVVCwgMCB9LAotICAgIHsgInBvc3QiLCAgICBIVFRQX1BPUywgMCB9Ci19Owotc3RhdGlj IGludCBuaHR0cHRhYiA9IHNpemVvZihodHRwdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0K LS8qIEhUVFAgc3dpdGNoZXMgKi8KLSNkZWZpbmUgSFRfU1dfQUcgMAkJCS8qIC9BR0VOVCAqLwot I2RlZmluZSBIVF9TV19IRCAxCQkJLyogL0hFQURFUiAqLwotI2RlZmluZSBIVF9TV19VUyAyCQkJ LyogL1VTRVIgKi8KLSNkZWZpbmUgSFRfU1dfUFcgMwkJCS8qIC9QQVNTV09SRCAqLwotI2RlZmlu ZSBIVF9TV19BUiA0ICAgICAgICAgICAgICAgICAgICAgIC8qIC9BUlJBWSAqLwotI2RlZmluZSBI VF9TV19UUCA1ICAgICAgICAgICAgICAgICAgICAgIC8qIC9UT1NDUkVFTiAqLwotCi1zdGF0aWMg c3RydWN0IGtleXRhYiBodHRwc3d0YWJbXSA9IHsKLSAgICB7ICIvYWdlbnQiLCAgICBIVF9TV19B RywgQ01fQVJHIH0sCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiL2FycmF5IiwgICAgSFRfU1dfQVIs IENNX0FSRyB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgeyAiL2hlYWRlciIsICAgSFRfU1df SEQsIENNX0FSRyB9LAotICAgIHsgIi9wYXNzd29yZCIsIEhUX1NXX1BXLCBDTV9BUkcgfSwKLSAg ICB7ICIvdG9zY3JlZW4iLCBIVF9TV19UUCwgMCB9LAotICAgIHsgIi91c2VyIiwgICAgIEhUX1NX X1VTLCBDTV9BUkcgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5odHRwc3d0 YWIgPSBzaXplb2YoaHR0cHN3dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOwotCi0vKiBI VFRQIFBVVC9QT1NUIHN3aXRjaGVzICovCi0jZGVmaW5lIEhUX1BQX01UIDAJCQkvKiAvTUlNRS1U WVBFICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGh0dHBwdGFiW10gPSB7Ci0gICAgeyAiL21p bWUtdHlwZSIsIEhUX1BQX01ULCBDTV9BUkcgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0 aWMgaW50IG5odHRwcHRhYiA9IHNpemVvZihodHRwcHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIp IC0gMTsKLQotI2RlZmluZSBIVFRQX01BWEhEUiA4Ci0KLXN0YXRpYyBpbnQKLXhkb2h0dHAoYWN0 aW9uLCBsZmlsZSwgcmYsIGRmaWxlLCBhZ2VudCwgaGRyLCB1c2VyLCBwYXNzLCBtaW1lLCBhcnJh eSwgdHlwZSkKLSAgICBpbnQgYWN0aW9uOwotICAgIGNoYXIgKmxmaWxlLCAqcmYsICpkZmlsZSwg KmFnZW50LCAqaGRyLCAqdXNlciwgKnBhc3MsICptaW1lLCBhcnJheTsKLSAgICBpbnQgdHlwZTsK LS8qIHhkb2h0dHAgKi8gewotICAgIGludCBpLCByYyA9IDA7Ci0gICAgY2hhciAqIGhkcmxpc3Rb SFRUUF9NQVhIRFJdOwotICAgIGNoYXIgcmZpbGVbQ0tNQVhQQVRIKzFdOwotICAgIGV4dGVybiBp bnQgaHR0cGZkOwotCi0gICAgLyogQ2hlY2sgZm9yIGEgdmFsaWQgc3RhdGUgdG8gZXhlY3V0ZSB0 aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICBwcmludGYoIj9UaGUg SFRUUCBjb21tYW5kIG1heSBub3QgYmUgdXNlZCBmcm9tIHRoZSBJS1NcclxuIik7Ci0gICAgfSBl bHNlIGlmIChodHRwZmQgPT0gLTEpIHsKLSAgICAgICAgaWYgKGh0dHBfcmVvcGVuKCkgPCAwKQot CSAgcHJpbnRmKCI/Tm8gY29ubmVjdGlvblxuIik7Ci0gICAgICAgIGVsc2UKLQkgIHJjID0gMTsK LSAgICB9IGVsc2UgewotCXJjID0gMTsKLSAgICB9Ci0KLSAgICAvKiBJZiB0aGUgY29tbWFuZCBp cyBub3QgdmFsaWQsIGV4aXQgd2l0aCBmYWlsdXJlICovCi0gICAgaWYgKHJjID09IDApCi0gICAg ICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0KLSAgICBpZiAoYWN0aW9uICE9IEhUVFBfQ09OICYm IHJmWzBdICE9ICcvJykgewotICAgICAgICByZmlsZVswXSA9ICcvJzsKLSAgICAgICAgY2tzdHJu Y3B5KCZyZmlsZVsxXSxyZixDS01BWFBBVEgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNrc3Ry bmNweShyZmlsZSxyZixDS01BWFBBVEgpOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgSFRU UF9NQVhIRFI7IGkrKykJLyogSW5pdGlhbGl6ZSBoZWFkZXIgbGlzdCAqLwotICAgICAgaGRybGlz dFtpXSA9IE5VTEw7Ci0gICAgbWFrZWxpc3QoaGRyLGhkcmxpc3QsSFRUUF9NQVhIRFIpOwkvKiBN YWtlIGhlYWRlciBsaXN0ICovCi0KLSNpZmRlZiBCRVRBREVCVUcKLSAgICBmb3IgKGkgPSAwOyBp IDwgbmh0dHB0YWI7IGkrKykJLyogRmluZCBhY3Rpb24ga2V5d29yZCAqLwotICAgICAgaWYgKGh0 dHB0YWJbaV0ua3d2YWwgPT0gYWN0aW9uKQotCWJyZWFrOwotICAgIGlmIChpID09IG5odHRwdGFi KSB7CQkvKiBTaG91bGRuJ3QgaGFwcGVuLi4uICovCi0JcHJpbnRmKCI/SW52YWxpZCBhY3Rpb24g LSAlZFxuIixhY3Rpb24pOwotCXJldHVybigwKTsJCQkvKiBGYWlsdXJlICovCi0gICAgfQotCi0g ICAgcHJpbnRmKCJIVFRQIGFjdGlvbjogICVzXG4iLGh0dHB0YWJbaV0ua3dkKTsKLSAgICBwcmlu dGYoIiBBZ2VudDogICAgICAgJXNcbiIsYWdlbnQgPyBhZ2VudCA6ICIobnVsbCkiKTsKLQotICAg IGlmIChoZHJsaXN0WzFdKSB7Ci0JcHJpbnRmKCIgSGVhZGVyIGxpc3Q6IDEuICVzXG4iLGhkcmxp c3RbMF0pOwotCWZvciAoaSA9IDE7IGkgPCBIVFRQX01BWEhEUiAmJiBoZHJsaXN0W2ldOyBpKysp Ci0JICBwcmludGYoIiUxNWQuICVzXG4iLGkrMSxoZHJsaXN0W2ldKTsKLSAgICB9IGVsc2UKLSAg ICAgIHByaW50ZigiIEhlYWRlcjogICAgICAlc1xuIixoZHJsaXN0WzBdID8gaGRybGlzdFswXSA6 ICIobnVsbCkiKTsKLQotICAgIHByaW50ZigiIFVzZXI6ICAgICAgICAlc1xuIix1c2VyID8gdXNl ciA6ICIobnVsbCkiKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgcHJpbnRmKCIgUGFzc3dvcmQ6ICAg ICVzXG4iLHBhc3MgPyBwYXNzIDogIihudWxsKSIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQot I2lmbmRlZiBOT1NQTAotICAgIGlmIChhcnJheSkKLSAgICAgIHByaW50ZigiIEFycmF5OiAgICAg ICBcXCUlJWNbXVxuIiwgYXJyYXkpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZigiIEFycmF5OiAg ICAgICAobm9uZSlcbiIpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICBpZiAoYWN0aW9uID09 IEhUVFBfUFVUIHx8IGFjdGlvbiA9PSBIVFRQX1BPUykKLSAgICAgIHByaW50ZigiIE1pbWUtdHlw ZTogICAlc1xuIixtaW1lID8gbWltZSA6ICIobnVsbCkiKTsKLQotICAgIHByaW50ZigiIExvY2Fs IGZpbGU6ICAlc1xuIixsZmlsZSA/IGxmaWxlIDogIihudWxsKSIpOwotICAgIHByaW50ZigiIFJl bW90ZSBmaWxlOiAlc1xuIixyZmlsZSA/IHJmaWxlIDogIihudWxsKSIpOwotICAgIHByaW50Zigi IERlc3RpbmF0aW9uIGZpbGU6ICVzXG4iLGRmaWxlID8gZGZpbGUgOiAiKG51bGwpIik7Ci0jZW5k aWYgLyogQkVUQURFQlVHICovCi0KLSAgICAvKiBUaGUgaHR0cF94eHh4KCkgZnVuY3Rpb25zIHJl dHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUgKi8KLSAgICBzd2l0Y2ggKGFjdGlvbikg ewotICAgICAgY2FzZSBIVFRQX0NPTjogewotCSAgZXh0ZXJuIGludCB0dHlmZDsKLQkgIHJjID0g aHR0cF9jb25uZWN0KGh0dHBmZCxhZ2VudCxoZHJsaXN0LHVzZXIscGFzcyxhcnJheSxyZmlsZSk7 Ci0JICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgSFRUUF9ERUw6Ci0gICAgICAgIHJjID0g aHR0cF9kZWxldGUoYWdlbnQsaGRybGlzdCx1c2VyLHBhc3MsYXJyYXkscmZpbGUpOwotICAgICAg ICBicmVhazsKLSAgICAgIGNhc2UgSFRUUF9HRVQ6Ci0gICAgICAgIHJjID0gaHR0cF9nZXQoYWdl bnQsaGRybGlzdCx1c2VyLHBhc3MsYXJyYXksbGZpbGUscmZpbGUsdHlwZSk7Ci0gICAgICAgIGJy ZWFrOwotICAgICAgY2FzZSBIVFRQX0hFRDoKLSAgICAgICAgcmMgPSBodHRwX2hlYWQoYWdlbnQs aGRybGlzdCx1c2VyLHBhc3MsYXJyYXksbGZpbGUscmZpbGUsdHlwZSk7Ci0gICAgICAgIGJyZWFr OwotICAgICAgY2FzZSBIVFRQX1BVVDoKLSAgICAgICAgcmMgPSBodHRwX3B1dChhZ2VudCxoZHJs aXN0LG1pbWUsdXNlcixwYXNzLGFycmF5LGxmaWxlLHJmaWxlLGRmaWxlLAotCQkgICAgICB0eXBl KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEhUVFBfUE9TOgotICAgICAgICByYyA9IGh0 dHBfcG9zdChhZ2VudCxoZHJsaXN0LG1pbWUsdXNlcixwYXNzLGFycmF5LGxmaWxlLHJmaWxlLGRm aWxlLAotCQkgICAgICAgdHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBIVFRQX0lE WDoKLSAgICAgICAgcmMgPSBodHRwX2luZGV4KGFnZW50LGhkcmxpc3QsdXNlcixwYXNzLGFycmF5 LGxmaWxlLHJmaWxlLHR5cGUpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg ICAgIHJjID0gLTE7Ci0gICAgfQotICAgIHJldHVybihyYyA9PSAwID8gMSA6IDApOwkgICAgICAg IC8qIFN1Y2Nlc3MgaXMgc2V0IGJ5IGNhbGxlciAqLwotfQotI2VuZGlmIC8qIFRDUFNPQ0tFVCAq LwotI2VuZGlmIC8qIE5PSFRUUCAqLwotCi0jaWZuZGVmIE5PU1BMCQkJCS8qIEFSUkFZIG9wcy4u LiAqLwotc3RhdGljIHN0cnVjdCBrZXl0YWIgYXJyYXl0YWJbXSA9IHsKLSAgICB7ICJjbGVhciIs ICAgICBBUlJfQ0xSLCAwIH0sCi0gICAgeyAiY29weSIsICAgICAgQVJSX0NQWSwgMCB9LAotICAg IHsgImRjbCIsICAgICAgIEFSUl9EQ0wsIENNX0lOViB9LAotICAgIHsgImRlY2xhcmUiLCAgIEFS Ul9EQ0wsIDAgfSwKLSAgICB7ICJkZXN0cm95IiwgICBBUlJfRFNULCBDTV9JTlYgfSwKLSAgICB7 ICJlcXVhdGUiLCAgICBBUlJfRVFVLCBDTV9JTlYgfSwKLSAgICB7ICJsaW5rIiwgICAgICBBUlJf RVFVLCAwIH0sCi0gICAgeyAicmVzaXplIiwgICAgQVJSX1JTWiwgMCB9LAotICAgIHsgInNldCIs ICAgICAgIEFSUl9TRVQsIDAgfSwKLSNpZm5kZWYgTk9TSE9XCi0gICAgeyAic2hvdyIsICAgICAg QVJSX1NITywgMCB9LAotI2VuZGlmIC8qIE5PU0hPVyAqLwotICAgIHsgInNvcnQiLCAgICAgIEFS Ul9TUlQsIDAgfSwKLSAgICB7ICJ1bmRlY2xhcmUiLCBBUlJfRFNULCAwIH0sCi0gICAgeyAiIiwg MCwgMCB9Ci19Owotc3RhdGljIGludCBuYXJyYXl0YWIgPSBzaXplb2YoYXJyYXl0YWIpL3NpemVv ZihzdHJ1Y3Qga2V5dGFiKSAtIDE7Ci0KLSNpZmRlZiBDS0xFQVJOCi1zdGF0aWMgc3RydWN0IGtl eXRhYiBsZWFybnN3aVtdID0gewotICAgIHsgIi9jbG9zZSIsICAgIDIsIDAgfSwKLSAgICB7ICIv b2ZmIiwgICAgICAwLCAwIH0sCi0gICAgeyAiL29uIiwgICAgICAgMSwgMCB9Ci19OwotI2VuZGlm IC8qIENLTEVBUk4gKi8KLQotaW50Ci1hcnJheWl0b2EoeCkgaW50IHg7IHsJCQkvKiBBcnJheSBp bmRleCB0byBhcnJheSBsZXR0ZXIgKi8KLSAgICBpZiAoeCA9PSAxKQotICAgICAgcmV0dXJuKDY0 KTsKLSAgICBlbHNlIGlmICh4IDwgMCB8fCB4ID4gKDEyMiAtIEFSUkFZQkFTRSkpCi0gICAgICBy ZXR1cm4oLTEpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih4ICsgQVJSQVlCQVNFKTsKLX0KLQot aW50Ci1hcnJheWF0b2koYykgaW50IGM7IHsJCQkvKiBBcnJheSBsZXR0ZXIgdG8gYXJyYXkgaW5k ZXggKi8KLSAgICBpZiAoYyA9PSA2NCkKLSAgICAgIGMgPSA5NjsKLSAgICBpZiAoYyA+IDYzICYm IGMgPCA5MSkKLSAgICAgIGMgKz0gMzI7Ci0gICAgaWYgKGMgPCBBUlJBWUJBU0UgfHwgYyA+IDEy MikKLSAgICAgIHJldHVybigtMSk7Ci0gICAgcmV0dXJuKGMgLSBBUlJBWUJBU0UpOwotfQotCi1z dGF0aWMgaW50CQkJCS8qIERlY2xhcmUgYW4gYXJyYXkgKi8KLWRvZGNsKGN4KSBpbnQgY3g7IHsK LSAgICBpbnQgaSwgbiwgdiwgbG8sIGhpLCByYyA9IDA7Ci0gICAgaW50IGlzZHluYW1pYyA9IDA7 Ci0gICAgY2hhciB0bXBidWZbNjRdOwotICAgIGNoYXIgKiogcCA9IE5VTEw7Ci0gICAgY2hhciB0 bXBbNjRdOwkJCS8qIExvY2FsIHRlbXBvcmFyeSBzdHJpbmcgYnVmZmVyICovCi0gICAgaWYgKCh5 ID0gY21mbGQoIkFycmF5IG5hbWUiLCIiLCZzLE5VTEwpKSA8IDApIHsgLyogUGFyc2UgYXJyYXkg bmFtZSAqLwotCWlmICh5ID09IC0zKSB7Ci0JICAgIHByaW50ZigiP0FycmF5IG5hbWUgcmVxdWly ZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0gZWxzZSByZXR1cm4oeSk7Ci0gICAgfQotICAg IGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICBzID0gbGluZTsKLSAgICB4ID0gYXJy YXlib3VuZHMocywmbG8sJmhpKTsJCS8qIENoZWNrIHN5bnRheCBhbmQgZ2V0IGJvdW5kcyAqLwot ICAgIGRlYnVnKEYxMTEsImRvZGNsIGFycmF5Ym91bmRzIixzLHgpOwotICAgIGlmICh4IDwgMCkg ewkJCS8qIEVycm9yIC0gTWF5YmUgaXQncyBhIHZhcmlhYmxlICovCi0JY2hhciAqIHA7CQkJLyog d2hvc2UgdmFsdWUgaXMgYW4gYXJyYXkgbmFtZSAqLwotCWludCBuOwotCXAgPSB0bXBidWY7Ci0J biA9IDYzOwotCXBbMF0gPSBOVUw7Ci0JaWYgKHNbMF0gPT0gQ01EUSAmJiBzWzFdID09ICcmJykK LQkgIHMrKzsKLQlpZiAoenpzdHJpbmcocywmcCwmbikgPiAtMSkgewotCSAgICBzID0gdG1wYnVm OwotCSAgICB4ID0gYXJyYXlib3VuZHMocywmbG8sJmhpKTsKLQkgICAgZGVidWcoRjExMSwiZG9k Y2wgYXJyYXlib3VuZHMgMiIscyx4KTsKLQl9Ci0JaWYgKHggPCAwKSB7Ci0JICAgIHByaW50Zigi P0JhZCBhcnJheSBuYW1lIC0gXCIlc1wiXG4iLHMpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSAg ICB9Ci0gICAgZGVidWcoRjEwMSwiZG9kY2wgaGkiLCIiLGhpKTsKLSAgICBkZWJ1ZyhGMTAxLCJk b2RjbCBsbyIsIiIsbG8pOwotICAgIGRlYnVnKEYxMDEsImRvZGNsIGxvKzEiLCIiLGxvKzEpOwot Ci0gICAgaWYgKGxvID09IC0xICYmIGhpID09IC0xKSB7CQkvKiBIYXZlIGdvb2QgYXJyYXkgbmFt ZSBhbmQgYm91bmRzICovCi0JaXNkeW5hbWljID0gMTsKLQluID0gQ01EQkwgLyA1OwotICAgIH0g ZWxzZSBpZiAoaGkgPiAtMSkgewotCXByaW50ZigiP1NlZ21lbnQgbm90YXRpb24gbm90IGFsbG93 ZWQgaW4gYXJyYXkgZGVjbGFyYXRpb25zXG4iKTsKLQlyZXR1cm4oLTkpOwotICAgIH0gZWxzZSBp ZiAoKGxvKzEpIDwgMCkgewotCWRlYnVnKEYxMDEsImRvZGNsIHVuZGVyZmxvdyIsIiIsbG8rMSk7 Ci0gICAgICAgIHByaW50ZigiP0RpbWVuc2lvbiB1bmRlcmZsb3dcbiIpOwotICAgICAgICByZXR1 cm4oLTkpOwotICAgIH0gZWxzZQotICAgICAgbiA9IGxvOwotICAgIHggPSBhcnJheWl0b2EoeCk7 Ci0gICAgaWYgKGN4ID09IFhYVU5EQ0wpIHsKLQluID0gMDsKLQl2ID0gMDsKLQlpZiAoKHkgPSBj bWNmbSgpKSA8IDApCi0JICByZXR1cm4oeSk7Ci0gICAgfSBlbHNlIHsKLQlwID0gKGNoYXIgKiop bWFsbG9jKHNpemVvZihjaGFyICoqKSoobisxKSk7Ci0JaWYgKCFwKSB7Ci0JICAgIHByaW50Zigi P01lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0JdiA9 IDA7CQkJCS8qIEhpZ2hlc3QgaW5pdGlhbGl6ZWQgbWVtYmVyICovCi0JcFswXSA9IE5VTEw7CQkJ LyogRWxlbWVudCAwICovCi0Ja2VlcGFsbGNoYXJzID0gMTsKLQl3aGlsZSAobiA+IDAgJiYgdiA8 IG4pIHsJLyogUGFyc2UgaW5pdGlhbGl6ZXJzICovCi0JICAgIHBbdisxXSA9IE5VTEw7Ci0JICAg IGNrbWFreG1zZyh0bXAsCi0JCSAgICAgIDY0LAotCQkgICAgICAiSW5pdGlhbCB2YWx1ZSBmb3Ig XFwmIiwKLQkJICAgICAgY2tjdG9hKChjaGFyKXgpLAotCQkgICAgICAiWyIsCi0JCSAgICAgIGNr aXRvYSh2KzEpLAotCQkgICAgICAiXSIsCi0JCSAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwKLQkJICAgICAgKTsKLQkgICAgCi0JICAgIHJjID0gY21mbGQoKGNoYXIgKil0 bXAsIiIsJnMseHhzdHJpbmcpOyAvKiBHZXQgZmllbGQgKi8KLQkgICAgaWYgKHJjIDwgMCkgewkJ LyogRXJyb3IuLi4gKi8KLQkJaWYgKHJjID09IC0zKSB7CQkvKiBFbXB0eSBlbGVtZW50ICovCi0J CSAgICBpZiAoY21mbGdzID09IDEpCS8qIGJlY2F1c2UgZW5kIG9mIGxpbmU/ICovCi0JCSAgICAg IGJyZWFrOwkJLyogWWVzLCBkb25lIGluaXRpYWxpemluZyAqLwotCQkgICAgZWxzZQkJLyogTm8s IGl0J3MganVzdCBlbXB0eSAqLwotCQkgICAgICBjb250aW51ZTsJCS8qIEdvIG9uIHRvIG5leHQg b25lLiAqLwotCQl9IGVsc2UgewkJLyogT3RoZXIgcGFyc2UgZXJyb3IgKi8KLQkJICAgIGdvdG8g ZGNseDsJCS8qIEdvIGZyZWUgdGVtcCBwb2ludGVycyAqLwotCQl9Ci0JICAgIH0KLQkgICAgcmMg PSAxOwotCSAgICBpZiAodiA9PSAwICYmICFzdHJjbXAocywiPSIpKSAvKiBTa2lwIHRoZSA9IHNp Z24uICovCi0JICAgICAgY29udGludWU7Ci0JICAgIHMgPSBicnN0cmlwKHMpOwkJLyogU3RyaXAg YW55IGJyYWNlcyAqLwotCSAgICBtYWtlc3RyKCYocFsrK3ZdKSxzKTsKLQl9Ci0Ja2VlcGFsbGNo YXJzID0gMDsKLQlpZiAoKHkgPSBjbXR4dCgiQ2FycmlhZ2UgcmV0dXJuIHRvIGNvbmZpcm0iLCIi LCZzLE5VTEwpKSA8IDApCi0JICByZXR1cm4oeSk7Ci0JaWYgKGlzZHluYW1pYykKLQkgIG4gPSB2 OwotICAgIH0KLSAgICBpZiAoZGNsYXJyYXkoKGNoYXIpeCxuKSA8IDApIHsJLyogRGVjbGFyZSB0 aGUgYXJyYXkgKi8KLQlwcmludGYoIj9EZWNsYXJlIGZhaWxlZFxuIik7Ci0JZ290byBkY2x4Owot ICAgIH0KLSAgICBmb3IgKGkgPSAxOyBpIDw9IHY7IGkrKykgewkJLyogQWRkIGFueSBpbml0aWFs IHZhbHVlcyAqLwotCXRtcFswXSA9ICcmJzsKLQlja21ha21zZygmdG1wWzFdLDYzLGNrY3RvYSgo Y2hhcil4KSwiWyIsY2tpdG9hKGkpLCJdIik7Ci0JaWYgKGFkZG1hYyh0bXAscFtpXSkgPCAwKSB7 Ci0JICAgIHByaW50ZigiQXJyYXkgaW5pdGlhbGl6YXRpb24gZXJyb3I6ICVzICVzXG4iLHRtcCxw W2ldKTsKLQkgICAgcmMgPSAtOTsKLQkgICAgZ290byBkY2x4OwotCX0KLSAgICB9Ci0gIGRjbHg6 Ci0gICAgaWYgKHApIHsKLQlmb3IgKGkgPSAxOyBpIDw9IHY7IGkrKykKLQkgIGlmIChwW2ldKSBm cmVlKHBbaV0pOwotCWZyZWUoKGNoYXIgKilwKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiRENM IHJjIiwiIixyYyk7Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSByYyk7Ci19Ci0KLXN0YXRpYyBpbnQK LXJzemFycmF5KCkgewotICAgIGludCBpLCB4LCB5LCBuLCBsbywgaGksIGlzbGluayA9IC0xOwot ICAgIGNoYXIgYywgKiBzLCAqKiBhcCA9IE5VTEw7Ci0gICAgaWYgKCh4ID0gY21mbGQoIkFycmF5 IG5hbWUiLCIiLCZzLE5VTEwpKSA8IDApIHsgLyogUGFyc2UgYXJyYXkgbmFtZSAqLwotCWlmICh4 ID09IC0zKSB7Ci0JICAgIHByaW50ZigiP0FycmF5IG5hbWUgcmVxdWlyZWRcbiIpOwotCSAgICBy ZXR1cm4oLTkpOwotCX0gZWxzZSByZXR1cm4oeCk7Ci0gICAgfQotICAgIGNrc3RybmNweShsaW5l LHMsTElOQlVGU0laKTsJLyogTWFrZSBzYWZlIGNvcHkgb2YgbmFtZSAqLwotICAgIHMgPSBsaW5l OwotICAgIHggPSBhcnJheWJvdW5kcyhzLCZsbywmaGkpOwotICAgIGlmICh4IDwgMCkgewkJCS8q IFBhcnNlIHRoZSBuYW1lLCBnZXQgaW5kZXggKi8KLQlwcmludGYoIj9CYWQgYXJyYXkgcmVmZXJl bmNlIC0gXCIlc1wiXG4iLCBzKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAobG8gPCAw ICYmIGhpIDwgMCkgewotCXkgPSBjbW51bSgiTmV3IHNpemUiLCIiLDEwLCZsbyx4eHN0cmluZyk7 Ci0JaWYgKHkgPCAwKSB7Ci0JICAgIGlmICh5ID09IC0zKQotCSAgICAgIHByaW50ZigiP05ldyBz aXplIHJlcXVpcmVkXG4iKTsKLQkgICAgcmV0dXJuKHkpOwotCX0KLSAgICB9Ci0gICAgaWYgKCh5 ID0gY21jZm0oKSkgPCAwKQotICAgICAgcmV0dXJuKHkpOwotICAgIGlmIChhX2xpbmtbeF0gPiAt MSkgewkJLyogTGluaz8gKi8KLQlpc2xpbmsgPSB4OwkJCS8qIFllcyBmb2xsb3cgaXQgKi8KLQl4 ID0gYV9saW5rW3hdOwkJCS8qIGFuZCByZW1lbWJlciAqLwotICAgIH0KLSAgICBpZiAoIWFfcHRy W3hdKSB7Ci0JcHJpbnRmKCI/QXJyYXkgbm90IGRlY2xhcmVkIC0gXCIlc1wiXG4iLCBzKTsKLQly ZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAobG8gPCAwKSB7Ci0JcHJpbnRmKCI/TmV3IHNpemUg cmVxdWlyZWRcbiIpOwotCXJldHVybigtOSk7Ci0gICAgfQotICAgIGlmIChoaSA+IC0xKSB7Ci0J cHJpbnRmKCI/QXJyYXkgc2VnbWVudHMgbm90IGFsbG93ZWQgZm9yIHRoaXMgb3BlcmF0aW9uXG4i KTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICBjID0gYXJyYXlpdG9hKHgpOwkJCS8qIEdldCBh cnJheSBsZXR0ZXIgKi8KLSAgICBpZiAoYyA9PSAnQCcpIHsJCQkvKiBBcmd1bWVudCB2ZWN0b3Ig YXJyYXkgb2ZmIGxpbWl0cyAqLwotCXByaW50ZigiP1NvcnJ5LCBcXCZAW10gaXMgcmVhZC1vbmx5 XG4iKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAobG8gPT0gMCkgewkJCS8qIElmIG5l dyBzaXplIGlzIDAuLi4gKi8KLQlkY2xhcnJheShjLDApOwkJCS8qIFVuZGVjbGFyZSB0aGUgYXJy YXkgKi8KLQlyZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIH0KLSAgICBuID0gYV9kaW1beF07CQkJ LyogQ3VycmVudCBzaXplICovCi0gICAgYXAgPSAoY2hhciAqKikgbWFsbG9jKChsbysxKSAqIHNp emVvZihjaGFyICopKTsgLyogTmV3IGFycmF5ICovCi0gICAgeSA9IChuIDwgbG8pID8gbiA6IGxv OwotICAgIGZvciAoaSA9IDA7IGkgPD0geTsgaSsrKQkJLyogQ29weSB0aGUgcGFydCB0aGF0IGZp dHMgKi8KLSAgICAgIGFwW2ldID0gYV9wdHJbeF1baV07Ci0gICAgaWYgKG4gPCBsbykgewkJCS8q IElmIG9yaWdpbmFsIGFycmF5IHNtYWxsZXIgKi8KLQlmb3IgKDsgaSA8PSBsbzsgaSsrKQkJLyog aW5pdGlhbGl6ZSBleHRyYSBlbGVtZW50cyBpbiAqLwotCSAgYXBbaV0gPSBOVUxMOwkJCS8qIG5l dyBhcnJheSB0byBOVUxMLiAqLwotICAgIH0gZWxzZSBpZiAobiA+IGxvKSB7CQkvKiBJZiBuZXcg YXJyYXkgc21hbGxlciAqLwotCWZvciAoOyBpIDw9IGxvOyBpKyspCQkvKiBkZWFsbG9jYXRlIGxl ZnRvdmVyIGVsZW1lbnRzICovCi0JICBtYWtlc3RyKCYoYV9wdHJbeF1baV0pLE5VTEwpOwkvKiBm cm9tIG9yaWdpbmFsIGFycmF5LiAqLwotICAgIH0KLSAgICBmcmVlKChjaGFyICopYV9wdHJbeF0p OwkJLyogRnJlZSBvcmlnaW5hbCBhcnJheSBsaXN0ICovCi0gICAgYV9wdHJbeF0gPSBhcDsJCQkv KiBSZXBsYWNlIHdpdGggbmV3IG9uZSAqLwotICAgIGFfZGltW3hdID0gbG87CQkJLyogUmVjb3Jk IHRoZSBuZXcgZGltZW5zaW9uICovCi0gICAgaWYgKGlzbGluayA+IC0xKSB7CQkJLyogV2FzIHRo aXMgYSBsaW5rPyAqLwotCWFfcHRyW2lzbGlua10gPSBhcDsJCS8qIElmIHNvIHBvaW50IHRvIHRo ZSByZXNpemVkIGFycmF5ICovCi0JYV9kaW1baXNsaW5rXSA9IGxvOwotICAgIH0gZWxzZSB7CQkJ CS8qIElmIG5vdCBhcmUgdGhlcmUgbGlua3MgdG8gaGVyZT8gKi8KLQlmb3IgKGkgPSAwOyBpIDwg KGludCkgJ3onIC0gQVJSQVlCQVNFOyBpKyspIHsgLyogQW55IGxpbmtlZCBhcnJheXM/ICovCi0J ICAgIGlmIChpICE9IHggJiYgYV9saW5rW2ldID09IHgpIHsgICAgIC8qIEZpbmQgYW5kIHVwZGF0 ZSB0aGVtICovCi0JCWFfcHRyW2ldID0gYXA7Ci0JCWFfZGltW2ldID0gbG87Ci0JICAgIH0KLQl9 Ci0gICAgfQotICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWNvcHlh cnJheSgpIHsKLSAgICBpbnQgaSwgaiwgeDEsIGxvMSwgaGkxLCB4MiwgbG8yLCBoaTIsIHdob2xl ID0gMDsKLSAgICBjaGFyIGMxLCBjMiwgKiBhMSwgKiBhMjsKLSAgICBpZiAoKHkgPSBjbWZsZCgi TmFtZSBvZiBzb3VyY2UgYXJyYXkiLCIiLCZzLE5VTEwpKSA8IDApCi0gICAgICByZXR1cm4oeSk7 Ci0gICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotICAgIGExID0gbGluZTsKLSAgICBp ZiAoKHgxID0gYXJyYXlib3VuZHMoYTEsJmxvMSwmaGkxKSkgPCAwKSB7Ci0JcHJpbnRmKCI/QmFk IGFycmF5IHJlZmVyZW5jZSAtIFwiJXNcIlxuIiwgYTEpOwotCXJldHVybigtOSk7Ci0gICAgfSBl bHNlIGlmICghYV9wdHJbeDFdKSB7Ci0JcHJpbnRmKCI/QXJyYXkgbm90IGRlY2xhcmVkIC0gXCIl c1wiXG4iLCBhMSk7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgYzEgPSBhcnJheWl0b2EoeDEp OwotCi0gICAgaWYgKCh5ID0gY21mbGQoIk5hbWUgb2YgZGVzdGluYXRpb24gYXJyYXkiLCIiLCZz LE5VTEwpKSA8IDApCi0gICAgICByZXR1cm4oeSk7Ci0gICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRN UEJVRlNJWik7Ci0gICAgYTIgPSB0bXBidWY7Ci0gICAgaWYgKCh4MiA9IGFycmF5Ym91bmRzKGEy LCZsbzIsJmhpMikpIDwgMCkgewotCXByaW50ZigiP0JhZCBhcnJheSByZWZlcmVuY2UgLSBcIiVz XCJcbiIsIGEyKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICBjMiA9IGFycmF5aXRvYSh4Mik7 Ci0KLSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0KLSAgICBp ZiAoYzIgPT0gJ0AnKSB7CQkJLyogQXJndW1lbnQgdmVjdG9yIGFycmF5IG9mZiBsaW1pdHMgKi8K LQlwcmludGYoIj9Tb3JyeSwgXFwmQFtdIGlzIHJlYWQtb25seVxuIik7Ci0JcmV0dXJuKC05KTsK LSAgICB9Ci0gICAgaWYgKGxvMSA8IDAgJiYgbG8yIDwgMCAmJiBoaTEgPCAwICYmIGhpMiA8IDAp IC8qIFNwZWNpYWwgY2FzZSBmb3IgKi8KLSAgICAgIHdob2xlID0gMTsJCQkgICAgICAgICAgLyog d2hvbGUgYXJyYXkuLi4gKi8KLQotICAgIGlmIChsbzEgPCAwKSBsbzEgPSB3aG9sZSA/IDAgOiAx OwkvKiBTdXBwbHkgbG93ZXIgYm91bmQgb2Ygc291cmNlICovCi0gICAgaWYgKGhpMSA8IDApIGhp MSA9IGFfZGltW3gxXTsJLyogU3VwcGx5IHVwcGVyIGJvdW5kIG9mIHNvdXJjZSAqLwotICAgIGlm IChsbzIgPCAwKSBsbzIgPSB3aG9sZSA/IDAgOiAxOwkvKiBMb3dlciBib3VuZCBvZiB0YXJnZXQg Ki8KLSAgICBpZiAoaGkyIDwgMCkgaGkyID0gbG8yICsgaGkxIC0gbG8xOwkvKiBVcHBlciBib3Vu ZCBvZiB0YXJnZXQgKi8KLSAgICBpZiAoYV9wdHJbeDJdKSB7CQkJLyogVGFyZ2V0IGFycmF5IGlz IGFscmVhZHkgZGVjbGFyZWQ/ICovCi0JaWYgKGhpMiA+IGFfZGltW3gyXSkJCS8qIElmIHVwcGVy IGJvdW5kIG91dCBvZiByYW5nZSAqLwotCSAgaGkyID0gYV9kaW1beDJdOwkJLyogc2hyaW5rIHRv IGZpdCAqLwotICAgIH0gZWxzZSB7CQkJCS8qIE90aGVyd2lzZS4uLiAqLwotCXgyID0gZGNsYXJy YXkoYzIsIGhpMik7CQkvKiBkZWNsYXJlIHRoZSB0YXJnZXQgYXJyYXkgKi8KLSAgICB9Ci0gICAg Zm9yIChpID0gbG8xLCBqID0gbG8yOyBpIDw9IGhpMSAmJiBqIDw9IGhpMjsgaSsrLGorKykgeyAv KiBDb3B5ICovCi0JbWFrZXN0cigmKGFfcHRyW3gyXVtqXSksYV9wdHJbeDFdW2ldKTsKLSAgICB9 Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLX0KLQotc3RhdGljIGludAkJCQkvKiBVbmRlY2xh cmUgYW4gYXJyYXkgKi8KLXVuYXJyYXkoKSB7Ci0gICAgaW50IHgsIHksIG4sIHJjID0gMDsKLSAg ICBjaGFyIGMsICogczsKLQotICAgIGlmICgoeSA9IGNtZmxkKCJBcnJheSBuYW1lIiwiIiwmcyxO VUxMKSkgPCAwKSB7IC8qIFBhcnNlIGFycmF5IG5hbWUgKi8KLQlpZiAoeSA9PSAtMykgewotCSAg ICBwcmludGYoIj9BcnJheSBuYW1lIHJlcXVpcmVkXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9 IGVsc2UgcmV0dXJuKHkpOwotICAgIH0KLSAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7 CS8qIE1ha2Ugc2FmZSBjb3B5IG9mIG5hbWUgKi8KLSAgICBzID0gbGluZTsKLSAgICBpZiAoKHkg PSBjbWNmbSgpKSA8IDApCi0gICAgICByZXR1cm4oeSk7Ci0gICAgaWYgKCh4ID0gYXJyYXlib3Vu ZHMocywmeSwmbikpIDwgMCkgeyAvKiBQYXJzZSB0aGUgbmFtZSwgZ2V0IGluZGV4ICovCi0JcHJp bnRmKCI/QmFkIGFycmF5IHJlZmVyZW5jZSAtIFwiJXNcIlxuIiwgcyk7Ci0JcmV0dXJuKC05KTsK LSAgICB9Ci0gICAgaWYgKHkgPiAwIHx8IG4gPiAwKSB7Ci0JcHJpbnRmKCI/UGFydGlhbCBhcnJh eXMgY2FuIG5vdCBiZSBkZXN0cm95ZWRcbiIpOwotCXJldHVybigtOSk7Ci0gICAgfQotICAgIGMg PSBhcnJheWl0b2EoeCk7CQkJLyogR2V0IGFycmF5IGxldHRlciAqLwotICAgIGlmIChhX3B0clt4 XSkgewkJCS8qIElmIGFycmF5IGlzIGRlY2xhcmVkICovCi0JaWYgKGMgPT0gJ0AnKSB7CQkJLyog QXJndW1lbnQgdmVjdG9yIGFycmF5IG9mZiBsaW1pdHMgKi8KLQkgICAgcHJpbnRmKCI/U29ycnks IFxcJkBbXSBpcyByZWFkLW9ubHlcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLQlyYyA9IGRj bGFycmF5KGMsLTEpOwkJLyogVW5kZWNsYXJlIHRoZSBhcnJheSAqLwotICAgIH0gZWxzZQkJCQkv KiBJdCB3YXNuJ3QgZGVjbGFyZWQgKi8KLSAgICAgIHJjID0gMTsKLSAgICBpZiAocmMgPiAtMSkg ewkJCS8qIFNldCByZXR1cm4gY29kZSBhbmQgc3VjY2VzcyAqLwotCXN1Y2Nlc3MgPSAxOwotCXJj ID0gMTsKLSAgICB9IGVsc2UgewotCXN1Y2Nlc3MgPSAwOwotCXByaW50ZigiP0ZhaWxlZCAtIGRl c3Ryb3kgXCJcXCYlY1tdXCJcbiIsIGMpOwotCXJjID0gLTk7Ci0gICAgfQotICAgIHJldHVybihy Yyk7Ci19Ci0KLXN0YXRpYyBpbnQKLWNscmFycmF5KGN4KSBpbnQgY3g7IHsKLSAgICBpbnQgaSwg eCwgbG8sIGhpOwotICAgIGNoYXIgYywgKiBzLCAqIHZhbCA9IE5VTEw7Ci0KLSAgICBpZiAoKHgg PSBjbWZsZCgiQXJyYXkgbmFtZSIsIiIsJnMsTlVMTCkpIDwgMCkgeyAvKiBQYXJzZSBhcnJheSBu YW1lICovCi0JaWYgKHggPT0gLTMpIHsKLQkgICAgcHJpbnRmKCI/QXJyYXkgbmFtZSByZXF1aXJl ZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfSBlbHNlIHJldHVybih4KTsKLSAgICB9Ci0gICAg Y2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwkvKiBNYWtlIHNhZmUgY29weSBvZiBuYW1lICov Ci0gICAgcyA9IGxpbmU7Ci0gICAgaWYgKGN4ID09IEFSUl9TRVQpIHsJCS8qIFNFVCAqLwotCWlm ICgoeCA9IGNtdHh0KCJWYWx1ZSIsIiIsJnZhbCx4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih4 KTsKLQlja3N0cm5jcHkodG1wYnVmLHZhbCxUTVBCVUZTSVopOyAvKiBWYWx1ZSB0byBzZXQgKi8K LQl2YWwgPSB0bXBidWY7Ci0JaWYgKCEqdmFsKSB2YWwgPSBOVUxMOwotICAgIH0gZWxzZSBpZiAo KHggPSBjbWNmbSgpKSA8IDApCS8qIENMRUFSICovCi0gICAgICByZXR1cm4oeCk7Ci0KLSAgICBp ZiAoKHggPSBhcnJheWJvdW5kcyhzLCZsbywmaGkpKSA8IDApIHsgLyogUGFyc2UgdGhlIG5hbWUg Ki8KLQlwcmludGYoIj9CYWQgYXJyYXkgcmVmZXJlbmNlIC0gXCIlc1wiXG4iLCBzKTsKLQlyZXR1 cm4oLTkpOwotICAgIH0KLSAgICBjID0gYXJyYXlpdG9hKHgpOwkJCS8qIEdldCBhcnJheSBsZXR0 ZXIgKi8KLSAgICBpZiAoIWFfcHRyW3hdKSB7CQkJLyogSWYgYXJyYXkgaXMgZGVjbGFyZWQgKi8K LQlwcmludGYoIj9BcnJheSAlcyBpcyBub3QgZGVjbGFyZWRcbiIsIHMpOwotCXJldHVybigtOSk7 Ci0gICAgfSBlbHNlIGlmIChjID09ICdAJykgewkJLyogQXJndW1lbnQgdmVjdG9yIGFycmF5IG9m ZiBsaW1pdHMgKi8KLQlwcmludGYoIj9Tb3JyeSwgXFwmQFtdIGlzIHJlYWQtb25seVxuIik7Ci0J cmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKGxvIDwgMCkgbG8gPSAwOwotICAgIGlmIChoaSA8 IDApIGhpID0gYV9kaW1beF07Ci0gICAgZm9yIChpID0gbG87IGkgPD0gaGk7IGkrKykJCS8qIENs ZWFyL1NldCBzZWxlY3RlZCByYW5nZSAqLwotICAgICAgbWFrZXN0cigmKGFfcHRyW3hdW2ldKSx2 YWwpOwotCi0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLX0KLQotZXh0ZXJuIGNoYXIgKiphYV9w dHJbQ01EU1RLTF1bMjhdOwotZXh0ZXJuIGludCBhYV9kaW1bQ01EU1RLTF1bMjhdOwotCi1zdGF0 aWMgaW50CQkJCS8qIENyZWF0ZSBzeW1ib2xpYyBsaW5rIHRvIGFuIGFycmF5ICovCi1saW5rYXJy YXkoKSB7Ci0gICAgaW50IGkgPSAwLCB4LCB5LCBsbywgaGksIGZsYWcgPSAwOwotICAgIGNoYXIg YywgKiBzLCAqIHA7Ci0KLSAgICBpZiAoKHggPSBjbWZsZCgiQXJyYXkgbmFtZSBub3QgY3VycmVu dGx5IGluIHVzZSIsIiIsJnMsTlVMTCkpIDwgMCkgewotCWlmICh4ID09IC0zKSB7Ci0JICAgIHBy aW50ZigiP0FycmF5IG5hbWUgcmVxdWlyZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0gZWxz ZSByZXR1cm4oeCk7Ci0gICAgfQotICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsJLyog TWFrZSBzYWZlIGNvcHkgb2YgbGluayBuYW1lICovCi0gICAgcyA9IGxpbmU7Ci0gICAgaWYgKCh4 ID0gY21mbGQoIk5hbWUgb2YgZXhpc3RpbmcgYXJyYXkiLCIiLCZwLHh4c3RyaW5nKSkgPCAwKSB7 Ci0JaWYgKHggPT0gLTMpIHsKLQkgICAgcHJpbnRmKCI/QXJyYXkgbmFtZSByZXF1aXJlZFxuIik7 Ci0JICAgIHJldHVybigtOSk7Ci0JfSBlbHNlIHJldHVybih4KTsKLSAgICB9Ci0gICAgY2tzdHJu Y3B5KHRtcGJ1ZixwLFRNUEJVRlNJWik7CS8qIE1ha2Ugc2FmZSBjb3B5IG9mIGFycmF5IG5hbWUg Ki8KLSAgICBwID0gdG1wYnVmOwotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIHJl dHVybih4KTsKLQotICAgIGlmICgoeCA9IGFycmF5Ym91bmRzKHMsJmxvLCZoaSkpIDwgMCkgeyAv KiBQYXJzZSB0aGUgbGluayBuYW1lICovCi0JcHJpbnRmKCI/QmFkIGFycmF5IHJlZmVyZW5jZSAt IFwiJXNcIlxuIiwgcyk7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKGFfcHRyW3hdKSB7 CQkJLyogTXVzdCBub3QgYWxyZWFkeSBleGlzdCAqLwotCWMgPSBhcnJheWl0b2EoeCk7Ci0JcHJp bnRmKCI/QXJyYXkgYWxyZWFkeSBleGlzdHM6IFxcJiVjW11cbiIsIGMpOwotCXJldHVybigtOSk7 Ci0gICAgfQotICAgIGlmIChsbyA+IC0xIHx8IGhpID4gLTEpIHsKLQlwcmludGYoIj9Tb3JyeSwg d2hvbGUgYXJyYXlzIG9ubHk6ICVzXG4iLHMpOwotCXJldHVybigtOSk7Ci0gICAgfQotICAgIGlm ICgoeSA9IGFycmF5Ym91bmRzKHAsJmxvLCZoaSkpIDwgMCkgeyAvKiBQYXJzZSB0aGUgYXJyYXkg bmFtZSAqLwotCXByaW50ZigiP0JhZCBhcnJheSByZWZlcmVuY2UgLSBcIiVzXCJcbiIsIHMpOwot CXJldHVybigtOSk7Ci0gICAgfQotICAgIGlmIChsbyA+IC0xIHx8IGhpID4gLTEpIHsKLQlwcmlu dGYoIj9Tb3JyeSwgd2hvbGUgYXJyYXlzIG9ubHk6ICVzXG4iLHApOwotCXJldHVybigtOSk7Ci0g ICAgfQotICAgIGlmICh4ID09IHkpIHsKLQlmb3IgKGkgPSBjbWRsdmw7IGkgPj0gMDsgaS0tKQot CSAgaWYgKGFhX3B0cltpXVt4XSkgewotCSAgICAgIGZsYWcrKzsKLQkgICAgICBicmVhazsKLQkg IH0KLSAgICB9Ci0gICAgaWYgKGZsYWcpIHsKLQlhX3B0clt4XSA9IGFhX3B0cltpXVt5XTsJLyog TGluayB0byBzYXZlZCBjb3B5ICovCi0JYV9kaW1beF0gPSBhYV9kaW1baV1beV07Ci0gICAgfSBl bHNlIHsJCQkJLyogT3RoZXJ3aXNlLi4uICovCi0JYyA9IGFycmF5aXRvYSh5KTsJCS8qIENoZWNr IGlmIGl0J3MgZGVjbGFyZWQgKi8KLQlpZiAoIWFfcHRyW3ldKSB7Ci0JICAgIHByaW50ZigiP0Fy cmF5IGlzIG5vdCBkZWNsYXJlZDogXFwmJWNbXVxuIiwgYyk7Ci0JICAgIHJldHVybigtOSk7Ci0J fQotCWlmIChhX2xpbmtbeV0gPiAtMSkgewkJLyogQW5kIGlmIGl0J3MgYSBsaW5rIGl0c2VsZiAq LwotCSAgICBwcmludGYoIj9MaW5rcyB0byBsaW5rcyBub3QgYWxsb3dlZDogXFwmJWNbXVxuIiwg Yyk7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCWFfcHRyW3hdID0gYV9wdHJbeV07CQkvKiBBbGwg T0ssIG1ha2UgdGhlIGxpbmsgKi8KLQlhX2RpbVt4XSA9IGFfZGltW3ldOwotICAgIH0KLSAgICBh X2xpbmtbeF0gPSB5OwotICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci19Ci0jZW5kaWYgLyogTk9T UEwgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi1zdGF0aWMgY2hhciAqIGRjc2V0bmFtZSA9IE5VTEw7 Ci0KLS8qIEdldCBEaXNwbGF5IENoYXJhY3Rlci1TZXQgTmFtZSAqLwotCi1jaGFyICoKLWdldGRj c2V0KCkgewotICAgIGNoYXIgKiBzOwotICAgIGludCB5OwotI2lmZGVmIFBDRk9OVFMKLSAgICBl eHRlcm4gaW50IHR0X2ZvbnQsIG50ZXJtZm9udDsKLSAgICBleHRlcm4gc3RydWN0IGtleXRhYiB0 ZXJtX2ZvbnRbXTsKLSNlbmRpZiAvKiBQQ0ZPTlRTICovCi0KLSAgICBzID0gIiI7Ci0jaWZkZWYg T1MyCi0gICAgeSA9IG9zMmdldGNwKCk7CQkJLyogRGVmYXVsdCBpcyBjdXJyZW50IGNvZGUgcGFn ZSAqLwotICAgIHN3aXRjaCAoeSkgewotICAgICAgY2FzZSA0Mzc6IHMgPSAiY3A0MzciOyBicmVh azsKLSAgICAgIGNhc2UgODUwOiBzID0gImNwODUwIjsgYnJlYWs7Ci0gICAgICBjYXNlIDg1Mjog cyA9ICJjcDg1MiI7IGJyZWFrOwotICAgICAgY2FzZSA4NTc6IHMgPSAiY3A4NTciOyBicmVhazsK LSAgICAgIGNhc2UgODU4OiBzID0gImNwODU4IjsgYnJlYWs7Ci0gICAgICBjYXNlIDg2MjogcyA9 ICJjcDg2MiI7IGJyZWFrOwotICAgICAgY2FzZSA4NjY6IHMgPSAiY3A4NjYiOyBicmVhazsKLSAg ICAgIGNhc2UgODY5OiBzID0gImNwODY5IjsgYnJlYWs7Ci0gICAgICBjYXNlIDEyNTA6IHMgPSAi Y3AxMjUwIjsgYnJlYWs7Ci0gICAgICBjYXNlIDEyNTE6IHMgPSAiY3AxMjUxIjsgYnJlYWs7Ci0g ICAgICBjYXNlIDEyNTI6IHMgPSAiY3AxMjUyIjsgYnJlYWs7Ci0gICAgICBjYXNlIDEyNTM6IHMg PSAiY3AxMjUzIjsgYnJlYWs7Ci0gICAgICBjYXNlIDEyNTQ6IHMgPSAiY3AxMjU0IjsgYnJlYWs7 Ci0gICAgICBjYXNlIDEyNTU6IHMgPSAiY3AxMjU1IjsgYnJlYWs7Ci0gICAgICBjYXNlIDEyNTY6 IHMgPSAiY3AxMjU2IjsgYnJlYWs7Ci0gICAgICBjYXNlIDEyNTc6IHMgPSAiY3AxMjU3IjsgYnJl YWs7Ci0gICAgICBjYXNlIDEyNTg6IHMgPSAiY3AxMjU4IjsgYnJlYWs7Ci0gICAgfQotI2lmZGVm IFBDRk9OVFMKLS8qCi0gICBJZiB0aGUgdXNlciBoYXMgbG9hZGVkIGEgZm9udCB3aXRoIFNFVCBU RVJNSU5BTCBGT05UIHRoZW4gd2Ugd2FudAotICAgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGNvZGUg cGFnZSB0byB0aGUgZm9udCB0aGF0IHdhcyBsb2FkZWQuCi0qLwotICAgIGlmICh0dF9mb250ICE9 IFRURl9ST00pIHsKLQlmb3IgKHkgPSAwOyB5IDwgbnRlcm1mb250OyB5KysgKSB7Ci0JICAgIGlm ICh0ZXJtX2ZvbnRbeV0ua3d2YWwgPT0gdHRfZm9udCkgewotCQlzID0gdGVybV9mb250W3ldLmt3 ZDsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0gICAgfQotI2VuZGlmIC8qIFBDRk9OVFMgKi8KLSNl bHNlIC8qIE9TMiAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBIYWNrIG5vdCBuZWVkZWQgYXMg b2YgQy1LZXJtaXQgNy4xICovCi0gICAgaWYgKGZjaGFyc2V0ID09IEZDXzFMQVRJTikgewotCXMg PSAibGF0aW4xLWlzbyI7CQkvKiBIYWNrIHRvIGF2b2lkIHJlcG9ydGluZyAiY3AxMjUyIiAqLwot ICAgIH0gZWxzZSB7CQkJCS8qIFJlcG9ydCBjdXJyZW50IGZpbGUgY2hhcmFjdGVyIHNldCAqLwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQlmb3IgKHkgPSAwOyB5IDw9IG5maWxjOyB5KyspCi0JICBp ZiAoZmNzdGFiW3ldLmt3dmFsID09IGZjaGFyc2V0KSB7Ci0JICAgICAgcyA9IGZjc3RhYlt5XS5r d2Q7Ci0JICAgICAgYnJlYWs7Ci0JICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgIH0KLSNlbmRpZiAv KiBDT01NRU5UICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgbWFrZXN0cigmZGNzZXRuYW1lLHMp OwkJLyogUmV0dXJuIHN0YWJsZSBwb2ludGVyICovCi0gICAgcmV0dXJuKChjaGFyICopZGNzZXRu YW1lKTsKLX0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZm5kZWYgTk9GUklMTFMKLXN0YXRp YyBpbnQKLWRvY2xlYXIoKSB7Ci0gICAgaWYgKCh4ID0gY21rZXkoY2xydGFiLG5jbGVhciwiaXRl bSB0byBjbGVhciIsCi0jaWZkZWYgTk9TUEwKLQkJICAgImRldmljZS1idWZmZXIiCi0jZWxzZQot CQkgICAiZGV2aWNlLWFuZC1pbnB1dCIKLSNlbmRpZiAvKiBOT1NQTCAqLwotCQkgICAseHhzdHJp bmcpKSA8IDApIHJldHVybih4KTsKLSNpZm5kZWYgTk9TUEwKLSNpZmRlZiBPUzIKLSAgICBpZiAo eCA9PSBDTFJfQ01EIHx8IHggPT0gQ0xSX1RSTSkgewotCWlmICgoeiA9IGNta2V5KGNscmNtZHRh YixuY2xyY21kLCJob3cgbXVjaCBzY3JlZW4gdG8gY2xlYXJcbiIsCi0JCSAgICAgICAiYWxsIix4 eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih6KTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0j ZW5kaWYgLyogTk9TUEwgKi8KLSAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0gICAgICByZXR1 cm4oeSk7Ci0KLSAgICAvKiBDbGVhciBkZXZpY2UgaW5wdXQgYnVmZmVyIGlmIHJlcXVlc3RlZCAq LwotICAgIHkgPSAoeCAmIENMUl9ERVYpID8gdHRmbHVpKCkgOiAwOwotCi0gICAgaWYgKHggJiBD TFJfU0NSKQkJCS8qIENMRUFSIFNDUkVFTiAqLwotICAgICAgeSA9IGNrX2NscygpOwkJCS8qICg9 IFNDUkVFTiBDTEVBUiA9IENMUykgKi8KLQotICAgIGlmICh4ICYgQ0xSX0tCRCkgewkJCS8qIENM RUFSIEtFWUJPQVJEICovCi0JaW50IG47Ci0JbiA9IGNvbmNoaygpOwotCXkgPSAwOwotCXdoaWxl IChuLS0gPiAwICYmICh5ID0gY29uaW5jKDApID4gLTEpKQotCSAgOwotCXkgPSAoeSA+IC0xKSA/ IDAgOiAtMTsKLSAgICB9Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICAvKiBDbGVhciBJTlBVVCBjb21t YW5kIGJ1ZmZlciBpZiByZXF1ZXN0ZWQgKi8KLSAgICBpZiAoeCAmIENMUl9JTlApIHsKLQlmb3Ig KHogPSAwOyB6IDwgaW5idWZzaXplOyB6KyspCi0JICBpbnBidWZbel0gPSBOVUw7Ci0JaW5wYnAg PSBpbnBidWY7Ci0JeSA9IDA7Ci0gICAgfQotI2lmZGVmIENLX0FQQwotICAgIGlmICh4ICYgQ0xS X0FQQykgewotCWRlYnVnKEYxMDEsIkV4ZWN1dGluZyBDTEVBUiBBUEMiLCIiLGFwY2FjdGl2ZSk7 Ci0JYXBjYWN0aXZlID0gMDsKLQl5ID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0g ICAgaWYgKHggJiBDTFJfQUxSKSB7Ci0Jc2V0YWxhcm0oMEwpOwotCXkgPSAwOwotICAgIH0KLSNl bmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgUEFUVEVSTlMKLSAgICBpZiAoeCAmIChDTFJfVFhU fENMUl9CSU4pKSB7Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlM7IGkrKykg ewotCSAgICBpZiAoeCAmIENMUl9UWFQpCi0JICAgICAgbWFrZXN0cigmdHh0cGF0dGVybnNbaV0s TlVMTCk7Ci0JICAgIGlmICh4ICYgQ0xSX0JJTikKLQkgICAgICBtYWtlc3RyKCZiaW5wYXR0ZXJu c1tpXSxOVUxMKTsKLQl9Ci0JeSA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0K LSNpZm5kZWYgTk9ESUFMCi0gICAgaWYgKHggJiBDTFJfRElBKSB7Ci0JZGlhbHN0YSA9IERJQV9V Tks7Ci0JeSA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0jaWZuZGVmIE5PTVNF TkQKLSAgICBpZiAoeCAmIENMUl9TRkwpIHsJCQkvKiBDTEVBUiBTRU5ELUxJU1QgKi8KLQlpZiAo ZmlsZWhlYWQpIHsKLQkgICAgc3RydWN0IGZpbGVsaXN0ICogZmxwLCAqIG5leHQ7Ci0JICAgIGZs cCA9IGZpbGVoZWFkOwotCSAgICB3aGlsZSAoZmxwKSB7Ci0JCWlmIChmbHAtPmZsX25hbWUpCi0J CSAgZnJlZShmbHAtPmZsX25hbWUpOwotCQlpZiAoZmxwLT5mbF9hbGlhcykKLQkJICBmcmVlKGZs cC0+ZmxfYWxpYXMpOwotCQluZXh0ID0gZmxwLT5mbF9uZXh0OwotCQlmcmVlKChjaGFyICopZmxw KTsKLQkJZmxwID0gbmV4dDsKLQkgICAgfQotCX0KLQlmaWxlc2lubGlzdCA9IDA7Ci0JZmlsZWhl YWQgPSBOVUxMOwotCWZpbGV0YWlsID0gTlVMTDsKLQlhZGRsaXN0ID0gMDsKLQl5ID0gMDsKLSAg ICB9Ci0jZW5kaWYgLyogTk9NU0VORCAqLwotCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PTE9DQUwK LSAgICBzd2l0Y2ggKHgpIHsKLSAgICAgIGNhc2UgQ0xSX1NDTDoKLQljbGVhcnNjcm9sbGJhY2so VlRFUk0pOwotCWJyZWFrOwotICAgICAgY2FzZSBDTFJfQ01EOgotCXN3aXRjaCAoIHogKSB7Ci0J ICBjYXNlIENMUl9DX0FMTDoKLQkgICAgY2xlYXIoKTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIENM Ul9DX0JPUzoKLQkgICAgY2xyYm9zY3JfZXNjYXBlKFZDTUQsU1ApOwotCSAgICBicmVhazsKLQkg IGNhc2UgQ0xSX0NfQk9MOgotCSAgICBjbHJib2xfZXNjYXBlKFZDTUQsU1ApOwotCSAgICBicmVh azsKLQkgIGNhc2UgQ0xSX0NfRU9MOgotCSAgICBjbHJ0b2VvbG4oVkNNRCxTUCk7Ci0JICAgIGJy ZWFrOwotCSAgY2FzZSBDTFJfQ19FT1M6Ci0JICAgIGNscmVvc2NyX2VzY2FwZShWQ01ELFNQKTsK LQkgICAgYnJlYWs7Ci0JICBjYXNlIENMUl9DX0xJTjoKLQkgICAgY2xybGluZV9lc2NhcGUoVkNN RCxTUCk7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBDTFJfQ19TQ1I6Ci0JICAgIGNsZWFyc2Nyb2xs YmFjayhWQ01EKTsKLQkgICAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgICAgcHJpbnRmKCJOb3QgaW1w bGVtZW50ZWQgeWV0LCBzb3JyeS5cbiIpOwotCSAgICBicmVhazsKLQl9Ci0JYnJlYWs7Ci0KLSNp Zm5kZWYgTk9URVJNCi0gICAgICBjYXNlIENMUl9UUk06Ci0JIHN3aXRjaCAoIHogKSB7Ci0JICBj YXNlIENMUl9DX0FMTDoKLQkgICAgIGlmIChWc2NybkdldEJ1ZmZlclNpemUoVlRFUk0pID4gMCAp IHsKLQkJIFZzY3JuU2Nyb2xsKFZURVJNLCBVUFdBUkQsIDAsCi0JCQkgICAgIFZzY3JuR2V0SGVp Z2h0KFZURVJNKS0odHRfc3RhdHVzW1ZURVJNXT8yOjEpLAotCQkJICAgICBWc2NybkdldEhlaWdo dChWVEVSTSkgLQotCQkJICAgICAodHRfc3RhdHVzW1ZURVJNXT8xOjApLCBUUlVFLCBTUAotCQkJ ICAgICApOwotCQkgY2xlYXJ0ZXJtc2NyZWVuKFZURVJNKTsKLQkgICAgIH0KLQkgICAgIGJyZWFr OwotCSAgY2FzZSBDTFJfQ19CT1M6Ci0JICAgIGNscmJvc2NyX2VzY2FwZShWVEVSTSxTUCk7Ci0J ICAgIGJyZWFrOwotCSAgY2FzZSBDTFJfQ19CT0w6Ci0JICAgIGNscmJvbF9lc2NhcGUoVlRFUk0s U1ApOwotCSAgICBicmVhazsKLQkgIGNhc2UgQ0xSX0NfRU9MOgotCSAgICBjbHJ0b2VvbG4oVlRF Uk0sU1ApOwotCSAgICBicmVhazsKLQkgIGNhc2UgQ0xSX0NfRU9TOgotCSAgICBjbHJlb3Njcl9l c2NhcGUoVlRFUk0sU1ApOwotCSAgICBicmVhazsKLQkgIGNhc2UgQ0xSX0NfTElOOgotCSAgICBj bHJsaW5lX2VzY2FwZShWVEVSTSxTUCk7Ci0JICAgIGJyZWFrOwotCSBjYXNlIENMUl9DX1NDUjoK LQkgICAgIGNsZWFyc2Nyb2xsYmFjayhWVEVSTSk7Ci0JICAgICBicmVhazsKLQkgZGVmYXVsdDoK LQkgICAgIHByaW50ZigiTm90IGltcGxlbWVudGVkIHlldCwgc29ycnkuXG4iKTsKLQkgICAgIGJy ZWFrOwotCX0KLQlicmVhazsKLSNlbmRpZiAvKiBOT1RFUk0gKi8KLSAgICB9Ci0gICAgeSA9IDA7 Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIHJldHVybihzdWNj ZXNzID0gKHkgPT0gMCkpOwotfQotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSNpZm5kZWYgTk9T UEwKLXN0YXRpYyBpbnQKLWRvZXZhbChjeCkgaW50IGN4OyB7Ci0gICAgY2hhciAqcDsKLSAgICBj aGFyIHZuYW1idWZbVk5BTUxdLCAqIHZucCA9IE5VTEw7CS8qIFRoZXNlIG11c3QgYmUgb24gdGhl IHN0YWNrICovCi0gICAgaWYgKCFvbGRldmFsKSB7Ci0JaWYgKCh5ID0gY21mbGQoIlZhcmlhYmxl IG5hbWUiLCIiLCZzLAotCQkgICAgICAgKChjeCA9PSBYWF9FVkFMKSA/IHh4c3RyaW5nIDogTlVM TCkpKSA8IDApIHsKLQkgICAgaWYgKHkgPT0gLTMpIHsKLQkJcHJpbnRmKCI/VmFyaWFibGUgbmFt ZSByZXF1aXJlZFxuIik7Ci0JCXJldHVybigtOSk7Ci0JICAgIH0gZWxzZSByZXR1cm4oeSk7Ci0J fQotCWNrc3RybmNweSh2bmFtYnVmLHMsVk5BTUwpOwkvKiBNYWtlIGEgY29weS4gKi8KLQl2bnAg PSB2bmFtYnVmOwotCWlmICh2bmFtYnVmWzBdID09IENNRFEgJiYKLQkgICAgKHZuYW1idWZbMV0g PT0gJyUnIHx8IHZuYW1idWZbMV0gPT0gJyYnKSkKLQkgIHZucCsrOwotCXkgPSAwOwotCWlmICgq dm5wID09ICclJyB8fCAqdm5wID09ICcmJykgewotCSAgICBpZiAoKHkgPSBwYXJzZXZhcih2bnAs JngsJnopKSA8IDApCi0JICAgICAgcmV0dXJuKHkpOwotCX0KLSAgICB9Ci0gICAgaWYgKCh4ID0g Y210eHQoIkludGVnZXIgYXJpdGhtZXRpYyBleHByZXNzaW9uIiwiIiwmcyx4eHN0cmluZykpIDwg MCkKLSAgICAgIHJldHVybih4KTsKLSAgICBwID0gZXZhbGEocyk7Ci0gICAgaWYgKCFwKSBwID0g IiI7Ci0gICAgaWYgKG9sZGV2YWwgJiYgKnApCi0gICAgICBwcmludGYoIiVzXG4iLCBwKTsKLSAg ICBja3N0cm5jcHkoZXZhbGJ1ZixwLDMyKTsKLSAgICBpZiAoIW9sZGV2YWwpCi0gICAgICByZXR1 cm4oc3VjY2VzcyA9IGFkZG1hYyh2bmFtYnVmLHApKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4o c3VjY2VzcyA9ICpwID8gMSA6IDApOwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBU TkNPREUKLXN0YXRpYyBpbnQKLWRvdGVsb3B0KCkgewotICAgIGlmICgoeCA9IGNta2V5KHRlbGNt ZCwgbnRlbGNtZCwgIlRFTE5FVCBjb21tYW5kIiwgIiIsIHh4c3RyaW5nKSkgPCAwICkKLSAgICAg IHJldHVybih4KTsKLSAgICBzd2l0Y2ggKHgpIHsKLSAgICAgIGNhc2UgV0lMTDoKLSAgICAgIGNh c2UgV09OVDoKLSAgICAgIGNhc2UgRE86Ci0gICAgICBjYXNlIERPTlQ6Ci0JaWYgKCh5ID0gY21r ZXkodG5vcHRzLG50bm9wdHMsIlRFTE5FVCBvcHRpb24iLCIiLHh4c3RyaW5nKSkgPCAwKQotCSAg cmV0dXJuKHkpOwotCWlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOwotCi0Jc3dpdGNo ICh4KSB7Ci0JICBjYXNlIFdJTEw6Ci0JICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHkp KQotCSAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBXT05U OgotCSAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfV09OVCh5KSkKLQkgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOwotCSAgICBicmVhazsKLQkgIGNhc2UgRE86Ci0JICAgIGlmIChURUxPUFRfVU5B TlNXRVJFRF9ETyh5KSkKLQkgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotCSAgICBicmVhazsK LQkgIGNhc2UgRE9OVDoKLQkgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQoeSkpCi0JICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQkgICAgYnJlYWs7Ci0JfQotCWlmIChsb2NhbCkgewot CSAgICBzdWNjZXNzID0gKCh0bl9zb3B0KHgseSkgPiAtMSkgPyAxIDogMCk7Ci0JfSBlbHNlIHsK LQkgICAgcHJpbnRmKCJmZiUwMnglMDJ4XG4iLHgseSk7Ci0JICAgIHN1Y2Nlc3MgPSAxOwotCX0K LQlpZiAoc3VjY2VzcykgewotCSAgICBzd2l0Y2ggKHgpIHsKLQkgICAgICBjYXNlIFdJTEw6Ci0J CVRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeSkgPSAxOwotCQlicmVhazsKLQkgICAgICBjYXNlIFdP TlQ6Ci0JCWlmICggVEVMT1BUX01FKHkpICkKLQkJICBURUxPUFRfVU5BTlNXRVJFRF9XT05UKHkp ID0gMTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSBETzoKLQkJVEVMT1BUX1VOQU5TV0VSRURfRE8o eSkgPSAxOwotCQlicmVhazsKLQkgICAgICBjYXNlIERPTlQ6Ci0JCWlmICggVEVMT1BUX01FKHkp ICkKLQkJICBURUxPUFRfVU5BTlNXRVJFRF9ET05UKHkpID0gMTsKLQkJYnJlYWs7Ci0JICAgIH0K LQkgICAgaWYgKHRuX3dhaXQoIlhYVEVMT1AiKSA8IDApIHsKLQkJdG5fcHVzaCgpOwotCQlzdWNj ZXNzID0gMDsKLQkgICAgfQotCX0KLQlyZXR1cm4oc3VjY2Vzcyk7Ci0gICAgICBjYXNlIFNCOgot CWlmICgoeT1jbWtleSh0bnNib3B0cyxudG5zYm9wdHMsIlRFTE5FVCBvcHRpb24iLCIiLHh4c3Ry aW5nKSkgPCAwKQotCSAgcmV0dXJuKHkpOwotCXN3aXRjaCAoeSkgewotCSAgY2FzZSBURUxPUFRf TkFXUzoKLQkgICAgLyogU29tZSBjb21waWxlcnMgcmVxdWlyZSBzd2l0Y2goKSB0byBoYXZlIGF0 IGxlYXN0IDEgY2FzZSAqLwotI2lmZGVmIENLX05BV1MKLQkgICAgVEVMT1BUX1NCKFRFTE9QVF9O QVdTKS5uYXdzLnggPSAwOwotCSAgICBURUxPUFRfU0IoVEVMT1BUX05BV1MpLm5hd3MueSA9IDA7 Ci0JICAgIGlmIChsb2NhbCkKLQkgICAgICByZXR1cm4oc3VjY2VzcyA9ICgodG5fc25hd3MoKSA+ IC0xKSA/IDEgOiAwKSk7Ci0JICAgIGVsc2UKLQkgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwot I2Vsc2UKLQkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBDS19OQVdTICovCi0J fQotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNp ZmRlZiBLUkI1Ci0gICAgICBjYXNlIFROX0ZXRDoKLSAgICAgICAgc3VjY2VzcyA9IChrZXJiZXJv czVfZm9yd2FyZCgpID09IEFVVEhfU1VDQ0VTUyk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzKTsK LSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQotICAgICAgZGVm YXVsdDoKLQlpZiAoKHogPSBjbWNmbSgpKSA8IDApIHJldHVybih6KTsKLSNpZm5kZWYgTk9MT0NB TAotCWlmIChsb2NhbCkgewotCSAgICBDSEFSIHRlbXBbM107Ci0JICAgIGlmIChuZXR3b3JrICYm IElTX1RFTE5FVCgpKSB7IC8qIFRFTE5FVCAqLwotCQl0ZW1wWzBdID0gKENIQVIpIElBQzsKLQkJ dGVtcFsxXSA9IHg7Ci0JCXRlbXBbMl0gPSBOVUw7Ci0JCXN1Y2Nlc3MgPSAodHRvbCgoQ0hBUiAq KXRlbXAsMikgPiAtMSA/IDEgOiAwKTsKLQkJaWYgKHRuX2RlYiB8fCBkZWJzZXMgfHwgZGVibG9n KSB7Ci0JCSAgICAvKiBUTl9NU0dfTEVOIGlzIGluIGNrY3RlbC5oICovCi0JCSAgICBja21ha21z Zyh0bl9tc2csMjU2LCJURUxORVQgU0VOVCAiLFRFTENNRCh4KSxOVUxMLE5VTEwpOwotCQkgICAg ZGVidWcoRjEwMSx0bl9tc2csIiIseCk7Ci0JCSAgICBpZiAoZGVic2VzIHx8IHRuX2RlYikgdG5f ZGVidWcodG5fbXNnKTsKLQkJfQotCQlyZXR1cm4oc3VjY2Vzcyk7Ci0JICAgIH0KLSAgICAgICAg ICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0JfSBlbHNlIHsKLSNlbmRpZiAvKiBOT0xPQ0FMICov Ci0JICAgIHByaW50ZigiZmYlMDJ4XG4iLHgpOwotCSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwot I2lmbmRlZiBOT0xPQ0FMCi0JfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICB9Ci19Ci0jZW5k aWYgLyogVE5DT0RFICovCi0KLQotI2lmbmRlZiBOT1BVU0gKLSNpZm5kZWYgTk9GUklMTFMKLXN0 YXRpYyBpbnQKLWRvZWRpdCgpIHsKLSNpZmRlZiBPUzIKLSAgICBjaGFyICogcCA9IE5VTEw7Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgaWYgKCFlZGl0b3JbMF0pIHsKLQlzID0gZ2V0ZW52KCJFRElU T1IiKTsKLQlpZiAocykgY2tzdHJuY3B5KGVkaXRvcixzLENLTUFYUEFUSCk7Ci0JZWRpdG9yW0NL TUFYUEFUSF0gPSBOVUw7Ci0JaWYgKCFlZGl0b3JbMF0pIHsKLQkgICAgcHJpbnRmKCI/RWRpdG9y IG5vdCBkZWZpbmVkIC0gdXNlIFNFVCBFRElUT1IgdG8gZGVmaW5lXG4iKTsKLQkgICAgcmV0dXJu KC05KTsKLQl9Ci0gICAgfQotICAgIGNrc3RybmNweSh0bXBidWYsZWRpdGZpbGUsVE1QQlVGU0la KTsKLS8qCi0gIGNtaW9maSgpIGxldHMgdXMgcGFyc2UgdGhlIG5hbWUgb2YgYW4gZXhpc3Rpbmcg ZmlsZSwgb3IgdGhlIG5hbWUgb2YKLSAgYSBub25leGlzdGVudCBmaWxlIHRvIGJlIGNyZWF0ZWQu Ci0qLwotICAgIHggPSBjbWlvZmkoIkZpbGUgdG8gZWRpdCIsIChjaGFyICopdG1wYnVmLCAmcywg JnksIHh4c3RyaW5nKTsKLSAgICBkZWJ1ZyhGMTExLCJlZGl0IixzLHgpOwotICAgIGlmICh4IDwg MCAmJiB4ICE9IC0zKQotICAgICAgcmV0dXJuKHgpOwotICAgIGlmICh4ID09IC0zKSB7Ci0JdG1w YnVmWzBdID0gTlVMOwotICAgIH0gZWxzZSB7Ci0JY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJ Wik7Ci0gICAgfQotICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOwotICAgIGlm ICh5KSB7Ci0JcHJpbnRmKCI/QSBzaW5nbGUgZmlsZSBwbGVhc2VcbiIpOwotCXJldHVybigtOSk7 Ci0gICAgfQotICAgIGlmIChub3B1c2gpIHsKLQlwcmludGYoIj9Tb3JyeSwgZWRpdGluZyBub3Qg YWxsb3dlZFxuIik7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9Ci0gICAgaWYgKHRtcGJ1 ZlswXSkgewotICAgIC8qIEdldCBmdWxsIHBhdGggaW4gY2FzZSB3ZSBjaGFuZ2UgZGlyZWN0b3Jp ZXMgYmV0d2VlbiBFRElUIGNvbW1hbmRzICovCi0JemZucWZwKHRtcGJ1ZiwgQ0tNQVhQQVRILCBl ZGl0ZmlsZSk7Ci0JZWRpdGZpbGVbQ0tNQVhQQVRIXSA9IE5VTDsKLSNpZmRlZiBPUzIKLQlwID0g ZWRpdGZpbGU7CQkJLyogRmxpcCB0aGUgc3R1cGlkIHNsYXNoZXMgKi8KLQl3aGlsZSAoKnApIHsK LQkgICAgaWYgKCpwID09ICcvJykgKnAgPSAnXFwnOwotCSAgICBwKys7Ci0JfQotI2VuZGlmIC8q IE9TMiAqLwotICAgIH0gZWxzZQotICAgICAgZWRpdGZpbGVbMF0gPSBOVUw7Ci0gICAgaWYgKGVk aXRmaWxlWzBdKSB7Ci0JaWYgKHpjaGtpKGVkaXRmaWxlKSA8IChDS19PRkZfVCkwICYmIHpjaGtv KGVkaXRmaWxlKSA8IDApIHsKLQkgICAgcHJpbnRmKCI/QWNjZXNzIGRlbmllZDogJXNcbiIsZWRp dGZpbGUpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSAgICB9Ci0gICAgeCA9IDA7Ci0gICAgaWYg KGVkaXRvcHRzWzBdKSB7Ci0jaWZkZWYgT1MyCi0JeCA9IGNraW5kZXgoIiUxIiwoY2hhciAqKWVk aXRvcHRzLDAsMCwxKTsKLQlpZiAoeCA+IDApCi0JICBlZGl0b3B0c1t4XSA9ICdzJzsKLQllbHNl Ci0jZW5kaWYgLyogT1MyICovCi0JICB4ID0gY2tpbmRleCgiJXMiLChjaGFyICopZWRpdG9wdHMs MCwwLDEpOwotICAgIH0KLSAgICBpZiAoKChpbnQpc3RybGVuKGVkaXRvcHRzKSArIChpbnQpc3Ry bGVuKGVkaXRmaWxlKSArIDEpIDwgVE1QQlVGU0laKSB7Ci0JaWYgKHgpCi0JICBzcHJpbnRmKHRt cGJ1ZixlZGl0b3B0cyxlZGl0ZmlsZSk7Ci0JZWxzZQotCSAgc3ByaW50Zih0bXBidWYsIiVzICVz IixlZGl0b3B0cyxlZGl0ZmlsZSk7Ci0gICAgfQotICAgIHMgPSBsaW5lOwotICAgIGNrbWFrbXNn KHMsTElOQlVGU0laLGVkaXRvciwiICIsdG1wYnVmLE5VTEwpOwotI2lmZGVmIE9TMgotICAgIHAg PSBzICsgc3RybGVuKGVkaXRvcik7CQkvKiBBbmQgYWdhaW4gd2l0aCB0aGUgc2xhc2hlcyAqLwot ICAgIHdoaWxlIChwICE9IHMpIHsKLQlpZiAoKnAgPT0gJy8nKSAqcCA9ICdcXCc7Ci0JcC0tOwot ICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBjb25yZXMoKTsKLSAgICB4ID0genNoY21kKHMp OwotICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7Ci0gICAgcmV0dXJuKHgpOwotfQotI2VuZGlmIC8q IE5PRlJJTExTICovCi0jZW5kaWYgLyogTk9QVVNIICovCi0KLSNpZmRlZiBCUk9XU0VSCi1zdGF0 aWMgaW50Ci1kb2Jyb3dzZSgpIHsKLSNpZmRlZiBPUzIKLSAgICBjaGFyICogcCA9IE5VTEw7Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgaWYgKG5vcHVzaCkgewotCXByaW50ZigiP1NvcnJ5LCBicm93 c2luZyBub3QgYWxsb3dlZFxuIik7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9Ci0jaWZu ZGVmIE5UCi0gICAgLyogV2luZG93cyBsZXRzIHRoZSBTaGVsbCBFeGVjdXRlIHRoZSBVUkwgaWYg bm8gQnJvd3NlciBpcyBkZWZpbmVkICovCi0gICAgaWYgKCFicm93c2VyWzBdKSB7Ci0JcyA9IGdl dGVudigiQlJPV1NFUiIpOwotCWlmIChzKSBja3N0cm5jcHkoYnJvd3NlcixzLENLTUFYUEFUSCk7 Ci0JYnJvd3NlcltDS01BWFBBVEhdID0gTlVMOwotCWlmICghYnJvd3NlclswXSkgewotCSAgICBw cmludGYoIj9Ccm93c2VyIG5vdCBkZWZpbmVkIC0gdXNlIFNFVCBCUk9XU0VSIHRvIGRlZmluZVxu Iik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotICAgIGNr c3RybmNweSh0bXBidWYsYnJvd3N1cmwsVE1QQlVGU0laKTsKLSAgICBpZiAoKHggPSBjbXR4dCgi VVJMIiwoY2hhciAqKWJyb3dzdXJsLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHgp OwotICAgIGNrc3RybmNweShicm93c3VybCxzLDQwOTYpOwotICAgIHggPSAwOwotICAgIGlmIChi cm93c29wdHNbMF0pIHsKLSNpZmRlZiBPUzIKLQl4ID0gY2tpbmRleCgiJTEiLChjaGFyICopYnJv d3NvcHRzLDAsMCwxKTsKLQlpZiAoeCA+IDApCi0JICBicm93c29wdHNbeF0gPSAncyc7Ci0JZWxz ZQotI2VuZGlmIC8qIE9TMiAqLwotCSAgeCA9IGNraW5kZXgoIiVzIiwoY2hhciAqKWJyb3dzb3B0 cywwLDAsMSk7Ci0gICAgfQotICAgIGlmICgoKGludClzdHJsZW4oYnJvd3NvcHRzKSArIChpbnQp c3RybGVuKGJyb3dzdXJsKSArIDEpIDwgVE1QQlVGU0laKSB7Ci0JaWYgKHgpCi0JICBzcHJpbnRm KHRtcGJ1Zixicm93c29wdHMsYnJvd3N1cmwpOwotCWVsc2UKLQkgIHNwcmludGYodG1wYnVmLCIl cyAlcyIsYnJvd3NvcHRzLGJyb3dzdXJsKTsKLSAgICB9Ci0jaWZkZWYgTlQKLSAgICBpZiAoIWJy b3dzZXJbMF0pCi0gICAgICByZXR1cm4oc3VjY2VzcyA9IFdpbjMyU2hlbGxFeGVjdXRlKGJyb3dz dXJsKSk7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICBzID0gbGluZTsKLSAgICBja21ha21zZyhzLExJ TkJVRlNJWixicm93c2VyLCIgIix0bXBidWYsTlVMTCk7Ci0jaWZkZWYgT1MyCi0gICAgcCA9IGxp bmUgKyBzdHJsZW4oYnJvd3Nlcik7CQkvKiBGbGlwIHNsYXNoZXMgKi8KLSAgICB3aGlsZSAocCAh PSBsaW5lKSB7Ci0JaWYgKCpwID09ICcvJykgKnAgPSAnXFwnOwotCXAtLTsKLSAgICB9Ci0jZW5k aWYgLyogT1MyICovCi0gICAgY29ucmVzKCk7Ci0gICAgeCA9IHpzaGNtZChzKTsKLSAgICBjb25j YigoY2hhcillc2NhcGUpOwotICAgIHJldHVybih4KTsKLX0KLSNlbmRpZiAvKiBCUk9XU0VSICov Ci0KLSNpZmRlZiBDS19SRUNBTEwKLXN0YXRpYyBpbnQKLWRvcmVkbygpIHsJCQkvKiBGaW5kIGEg cHJldmlvdXMgY21kIGFuZCByZWRvIGl0ICovCi0gICAgZXh0ZXJuIGludCBvbl9yZWNhbGwsIGlu X3JlY2FsbDsKLSAgICBpbnQgeDsKLSAgICBjaGFyICogcDsKLQotICAgIGlmICgoeCA9IGNtdHh0 KAotInBhdHRlcm4sIG9yIGZpcnN0IGZldyBjaGFyYWN0ZXJzIG9mIGEgcHJldmlvdXMgY29tbWFu ZCIsCi0JCSAgICIqIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICBj a3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgeCA9IHN0cmxlbihzKTsKLSAgICBzID0g bGluZTsKLSAgICBpZiAoKnMgPT0gJ3snKSB7CQkJLyogQnJhY2VzIGRpc2FibGUgYWRkaW5nICog dG8gZW5kICovCi0JaWYgKHNbeC0xXSA9PSAnfScpIHsKLQkgICAgc1t4LTFdID0gTlVMOwotCSAg ICBzKys7Ci0JICAgIHgtLTsKLQl9Ci0gICAgfSBlbHNlIHsJCQkJLyogTm8gYnJhY2VzLCBhZGQg KiB0byBlbmQuICovCi0Jc1t4XSA9ICcqJzsKLQlzW3grMV0gPSBOVUw7Ci0gICAgfQotCi0gICAg d2hpbGUgKHggPiAwICYmIHNbeF0gPT0gJyonICYmIHNbeC0xXSA9PSAnKicpIHNbeC0tXSA9IE5V TDsKLQotICAgIGlmICghb25fcmVjYWxsIHx8ICFpbl9yZWNhbGwpIHsKLQlwcmludGYoIj9Tb3Jy eSwgY29tbWFuZCByZWNhbGwgY2FuJ3QgYmUgdXNlZCBub3cuXG4iKTsKLQlyZXR1cm4oLTkpOwot ICAgIH0KLSAgICBpZiAoKHAgPSBjbWdldGNtZChzKSkpIHsJCS8qIExvb2sgZm9yIGl0IGhpc3Rv cnkgYnVmZmVyICovCi0JY2ttYWttc2coY21kYnVmLENNREJMLHAsIlxyIixOVUxMLE5VTEwpOyAv KiBDb3B5IHRvIGNvbW1hbmQgYnVmZmVyICovCi0JaWYgKCFxdWlldCkJCQkvKiBFY2hvIGl0ICov Ci0JICBwcmludGYoIiVzXG4iLGNtZGJ1Zik7Ci0JY21hZGRuZXh0KCk7CQkJLyogRm9yY2UgcmUt YWRkIHRvIGhpc3RvcnkgYnVmZmVyICovCi0JcmV0dXJuKGNtZmxncyA9IC0xKTsJCS8qIEZvcmNl IHJlcGFyc2UgKi8KLSAgICB9IGVsc2UgewotCXByaW50ZigiP1NvcnJ5IC0gXCIlc1wiIG5vdCBm b3VuZFxuIiwgcyk7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogQ0tfUkVDQUxM ICovCi0KLSNpZm5kZWYgTk9YRkVSCi0jaWZuZGVmIE5PQ1NFVFMKLXN0YXRpYyBpbnQKLWRvYXNz b2MoKSAgewkJCQkvKiBBU1NPQ0lBVEUgKi8KLSAgICBleHRlcm4gc3RydWN0IGtleXRhYiB0Y3N0 YWJbXTsKLSAgICBleHRlcm4gaW50IG50Y3M7Ci0gICAgaWYgKCh4ID0gY21rZXkoYXNzb2N0YWIs IG5hc3NvYywgIiIsICIiLCB4eHN0cmluZykpIDwgMCApCi0gICAgICByZXR1cm4oeCk7Ci0KLSAg ICBzd2l0Y2ggKHgpIHsJCQkvKiBBc3NvY2lhdGUgd2hhdD8gKi8KLQotICAgICAgY2FzZSBBU1NP Q19UQzoJCQkvKiBUcmFuc2ZlciBjaGFyYWN0ZXItc2V0Li4uICovCi0JaWYgKCh4ID0gY21rZXko dGNzdGFiLCBudGNzLAotCQkgICAgICAgInRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgbmFtZSIsIiIs eHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0JaWYgKCh5ID0gY21rZXkoZmNzdGFiLCBu ZmlsYywKLQkJICAgICAgICJ3aXRoIGZpbGUgY2hhcmFjdGVyLXNldCIsIiIsIHh4c3RyaW5nKSkg PCAwKQotCSAgaWYgKHkgIT0gLTMpCi0JICAgIHJldHVybih5KTsKLQlpZiAoKHogPSBjbWNmbSgp KSA8IDApCi0JICByZXR1cm4oeik7Ci0JYXhjc2V0W3hdID0geTsKLQlyZXR1cm4oc3VjY2VzcyA9 IDEpOwotCi0gICAgICBjYXNlIEFTU09DX0ZDOgkJCS8qIEZpbGUgY2hhcmFjdGVyLXNldC4uLiAq LwotCWlmICgoeCA9IGNta2V5KGZjc3RhYiwgbmZpbGMsCi0JCSAgICAgICAiZmlsZSBjaGFyYWN0 ZXItc2V0IG5hbWUiLCIiLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHgpOwotCWlmICgoeSA9 IGNta2V5KHRjc3RhYiwgbnRjcywKLQkJICAgICAgICJ3aXRoIHRyYW5zZmVyIGNoYXJhY3Rlci1z ZXQiLCIiLCB4eHN0cmluZykpIDwgMCkKLQkgIGlmICh5ICE9IC0zKQotCSAgICByZXR1cm4oeSk7 Ci0JaWYgKCh6ID0gY21jZm0oKSkgPCAwKQotCSAgcmV0dXJuKHopOwotCWFmY3NldFt4XSA9IHk7 Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgZGVmYXVsdDoKLQlyZXR1cm4oLTIpOwot ICAgIH0KLX0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNp Zm5kZWYgTk9IRUxQCi1zdGF0aWMgaW50Ci1kb21hbnVhbCgpIHsKLSNpZmRlZiBPUzIKLSAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgaWYgKG5vcHVzaCkg ewotCXByaW50ZigiP1NvcnJ5LCBhY2Nlc3MgdG8gc3lzdGVtIGNvbW1hbmRzIGlzIGRpc2FibGVk LlxuIik7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgeSA9IG14bG9vayhtYWN0YWIsIm1hbnVh bCIsbm1hYyk7Ci0gICAgaWYgKHkgPiAtMSkgewotCXogPSBtYWNsdmw7CQkJLyogU2F2ZSB0aGUg Y3VycmVudCBtYWNsdmwgKi8KLQlkb2RvKHksTlVMTCxjbWRzdGtbY21kbHZsXS5jY2ZsZ3MpOyAv KiBSdW4gdGhlIG1hY3JvICovCi0Jd2hpbGUgKG1hY2x2bCA+IHopIHsKLQkgICAgZGVidWcoRjEw MSwiWFhNQU4gbG9vcCBtYWNsdmwgMSIsIiIsbWFjbHZsKTsKLQkgICAgc3N0YXRlID0gKENIQVIp IHBhcnNlcigxKTsKLQkgICAgZGVidWcoRjEwMSwiWFhNQU4gbG9vcCBtYWNsdmwgMiIsIiIsbWFj bHZsKTsKLQkgICAgaWYgKHNzdGF0ZSkgcHJvdG8oKTsKLQl9Ci0JZGVidWcoRjEwMSwiWFhNQU4g bG9vcCBleGl0IG1hY2x2bCIsIiIsbWFjbHZsKTsKLQlyZXR1cm4oc3VjY2Vzcyk7Ci0gICAgfQot ICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZWxzZQotICAgIGlmICgoeCA9IGNtdHh0KAotI2lm ZGVmIFVOSVgKLQkJICAgIkNhcnJpYWdlIHJldHVybiB0byBjb25maXJtIHRoZSBjb21tYW5kLCBv ciBtYW51YWwgdG9waWMiLAotI2Vsc2UKLQkJICAgIkNhcnJpYWdlIHJldHVybiB0byBjb25maXJt IHRoZSBjb21tYW5kLCBvciBoZWxwIHRvcGljIiwKLSNlbmRpZiAvKiBVTklYICovCi0JCSAgICJr ZXJtaXQiLAotCQkgICAmcywKLQkJICAgeHhzdHJpbmcKLQkJICAgKQotCSApIDwgMCkKLSAgICAg IHJldHVybih4KTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIFVOSVgKLSAgICBja21ha21z Zyh0bXBidWYsVE1QQlVGU0laLCJtYW4gIixzLE5VTEwsTlVMTCk7Ci0jZWxzZQotICAgIGNrbWFr bXNnKHRtcGJ1ZixUTVBCVUZTSVosImhlbHAgIixzLE5VTEwsTlVMTCk7Ci0jZW5kaWYgLyogVU5J WCAqLwotICAgIGRlYnVnKEYxMTAsIk1BTlVBTCIsdG1wYnVmLDApOwotICAgIGlmIChub3B1c2gp IHsKLQlwcmludGYoIj9Tb3JyeSwgYWNjZXNzIHRvIHN5c3RlbSBjb21tYW5kcyBpcyBkaXNhYmxl ZC5cbiIpOwotCXJldHVybigtOSk7Ci0gICAgfSBlbHNlIHsKLQljb25yZXMoKTsJCQkvKiBSZXN0 b3JlIHRoZSBjb25zb2xlICovCi0Jc3VjY2VzcyA9IHpzaGNtZCh0bXBidWYpOwotCWNvbmNiKChj aGFyKWVzY2FwZSk7CQkvKiBSZXN0b3JlIENCUkVBSyBtb2RlICovCi0JcmV0dXJuKHN1Y2Nlc3Mp OwotICAgIH0KLX0KLSNlbmRpZiAvKiBOT0hFTFAgKi8KLQotI2lmbmRlZiBOT0hUVFAKLSNpZmRl ZiBUQ1BTT0NLRVQKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzbHN3dGFiW10gPSB7Ci0gICAgeyAi L3NzbCIsIDEsIDAgfSwKLSAgICB7ICIvdGxzIiwgMSwgMCB9Ci19OwotCi0jaWZuZGVmIE5PVVJM Ci1zdHJ1Y3QgdXJsZGF0YSBodHRwX3VybCA9IHtOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMfTsKLSNlbmRpZiAvKiBOT1VSTCAqLwotCi1zdGF0aWMgaW50Ci1kb2h0dHAoKSB7CQkJ CS8qIEhUVFAgKi8KLSAgICBzdHJ1Y3QgRkRCIHN3LCBrdywgZmk7Ci0gICAgaW50IG4sIGdldHZh bCwgYWxsaW5vbmUgPSAwOwotICAgIGNoYXIgYywgKiBwOwotICAgIGNoYXIgcmRuc1sxMjhdOwot Ci0gICAgY2hhciAqIGh0dHBfYWdlbnQgPSBOVUxMOwkJLyogUGFyc2UgcmVzdWx0cyAqLwotICAg IGNoYXIgKiBodHRwX2hkciAgID0gTlVMTDsKLSAgICBjaGFyICogaHR0cF91c2VyICA9IE5VTEw7 Ci0gICAgY2hhciAqIGh0dHBfcGFzcyAgPSBOVUxMOwotICAgIGNoYXIgKiBodHRwX21pbWUgID0g TlVMTDsKLSAgICBjaGFyICogaHR0cF9sZmlsZSA9IE5VTEw7Ci0gICAgY2hhciAqIGh0dHBfcmZp bGUgPSBOVUxMOwotICAgIGNoYXIgKiBodHRwX2RmaWxlID0gTlVMTDsKLSAgICBjaGFyICAgaHR0 cF9hcnJheSA9IE5VTDsKLSAgICBpbnQgICAgaHR0cF9hY3Rpb24gPSAtMTsKLQotICAgIGNoYXIg KiBodHRwX2hvc3QgPSBOVUxMOwotICAgIGNoYXIgKiBodHRwX3NydiAgPSBOVUxMOwotICAgIGlu dCAgICBodHRwX3NzbCAgPSAwOwotCi0gICAgc3RhdGljIGNoYXIgKiBodHRwX2RfYWdlbnQgPSBO VUxMOwotICAgIHN0YXRpYyBjaGFyICogaHR0cF9kX3VzZXIgPSBOVUxMOwotICAgIHN0YXRpYyBj aGFyICogaHR0cF9kX3Bhc3MgPSBOVUxMOwotCi0gICAgc3RhdGljIGludCAgICBodHRwX2RfdHlw ZSA9IDA7Ci0gICAgaW50ICAgICAgICAgICBodHRwX3R5cGUgPSBodHRwX2RfdHlwZTsKLQotI2lm ZGVmIE9TMgotICAgIHAgPSAiS2VybWl0IDk1IjsJCQkvKiBEZWZhdWx0IHVzZXIgYWdlbnQgKi8K LSNlbHNlCi0gICAgcCA9ICJDLUtlcm1pdCI7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgbWFrZXN0 cigmaHR0cF9hZ2VudCxwKTsKLSAgICBtYWtlc3RyKCZodHRwX21pbWUsInRleHQvSFRNTCIpOwkv KiBNSU1FIHR5cGUgZGVmYXVsdCAqLwotICAgIHJkbnNbMF0gPSAnXDAnOwotCi0gICAgY21mZGJp KCZzdywJCQkJLyogMXN0IEZEQiAtIGdlbmVyYWwgc3dpdGNoZXMgKi8KLSAgICAgICBfQ01LRVks CQkJCS8qIGZjb2RlICovCi0gICAgICAgIk9QRU4sIENMT1NFLCBHRVQsIEhFQUQsIFBVVCwgSU5E RVgsIG9yIFBPU1QsXG4gb3Igc3dpdGNoIiwgLyogaGxwbXNnICovCi0gICAgICAgIiIsCQkJCS8q IGRlZmF1bHQgKi8KLSAgICAgICAiIiwJCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAg ICBuaHR0cHN3dGFiLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotICAg ICAgIDQsCQkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLSAgICAgICB4 eHN0cmluZywJCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgaHR0cHN3dGFiLAkJ CS8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAma3cJCQkJLyogUG9pbnRlciB0byBuZXh0IEZE QiAqLwotICAgICAgICk7Ci0gICAgY21mZGJpKCZrdywJCQkJLyogMm5kIEZEQiAtIGNvbW1hbmRz ICovCi0gICAgICAgX0NNS0VZLAkJCQkvKiBmY29kZSAqLwotICAgICAgICJDb21tYW5kIiwJCQkv KiBobHBtc2cgKi8KLSAgICAgICAiIiwJCQkJLyogZGVmYXVsdCAqLwotICAgICAgICIiLAkJCQkv KiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgIG5odHRwdGFiLAkJCS8qIGFkZHRsIG51bWVy aWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotICAgICAgIDAsCQkJCS8qIGFkZHRsIG51bWVyaWMgZGF0 YSAyOiAwID0ga2V5d29yZCAqLwotICAgICAgIHh4c3RyaW5nLAkJCS8qIFByb2Nlc3NpbmcgZnVu Y3Rpb24gKi8KLSAgICAgICBodHRwdGFiLAkJCQkvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAg TlVMTAkJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgKTsKLQotICAgIHdoaWxl ICgxKSB7Ci0JeCA9IGNtZmRiKCZzdyk7CQkJLyogUGFyc2Ugc29tZXRoaW5nICovCi0JaWYgKHgg PCAwKQkJCS8qIEVycm9yICovCi0JICBnb3RvIHhodHRwOwotCW4gPSBjbXJlc3VsdC5ucmVzdWx0 OwotCWlmIChjbXJlc3VsdC5mZGJhZGRyID09ICZrdykJLyogQ29tbWFuZCAtIGV4aXQgdGhpcyBs b29wICovCi0JICBicmVhazsKLQljID0gY21nYnJrKCk7CQkJLyogU3dpdGNoLi4uICovCi0JZ2V0 dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKTsKLQl4ID0gLTk7Ci0JaWYgKGdldHZhbCAmJiAh KGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2Vz IG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKLQkgICAgZ290byB4aHR0cDsKLQl9Ci0Jc3dpdGNo IChjbXJlc3VsdC5ucmVzdWx0KSB7CS8qIEhhbmRsZSBlYWNoIHN3aXRjaCAqLwotICAgICAgICAg IGNhc2UgSFRfU1dfVFA6ICAgICAgICAgICAgICAgIC8qIC9UT1NDUkVFTiAqLwotICAgICAgICAg ICAgaHR0cF90eXBlID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotCSAgY2FzZSBIVF9TV19BRzoJ CS8qIC9BR0VOVCAqLwotCSAgICBpZiAoZ2V0dmFsKSB7Ci0JCWlmICgoeCA9IGNtZmxkKCJVc2Vy IGFnZW50IixwLCZzLHh4c3RyaW5nKSkgPCAwKQotCQkgIGdvdG8geGh0dHA7Ci0JICAgIH0gZWxz ZSB7Ci0JCXMgPSBwOwotCSAgICB9Ci0JICAgIG1ha2VzdHIoJmh0dHBfYWdlbnQscyk7Ci0JICAg IGJyZWFrOwotCSAgY2FzZSBIVF9TV19IRDoJCS8qIC9IRUFERVIgKi8KLQkgICAgcyA9IE5VTEw7 Ci0JICAgIGlmIChnZXR2YWwpIHsKLQkJaWYgKCh4ID0gY21mbGQoIkhlYWRlciBsaW5lIiwiIiwm cyx4eHN0cmluZykpIDwgMCkgewotCQkgICAgaWYgKHggPT0gLTMpCi0JCSAgICAgIHMgPSBOVUxM OwotCQkgICAgZWxzZQotCQkgICAgICBnb3RvIHhodHRwOwotCQl9Ci0JICAgIH0KLQkgICAgbWFr ZXN0cigmaHR0cF9oZHIscyk7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBIVF9TV19VUzoJCS8qIC9V U0VSICovCi0JICAgIHMgPSBOVUxMOwotCSAgICBpZiAoZ2V0dmFsKSB7Ci0JCWlmICgoeCA9IGNt ZmxkKCJVc2VyIElEIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgICAg aWYgKHggPT0gLTMpCi0gICAgICAgICAgICAgICAgICAgIHMgPSAiIjsKLSAgICAgICAgICAgICAg ICAgIGVsc2UKLQkJICAgIGdvdG8geGh0dHA7Ci0gICAgICAgICAgICAgICAgfQotCSAgICB9Ci0J ICAgIG1ha2VzdHIoJmh0dHBfdXNlcixzKTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIEhUX1NXX1BX OgkJLyogL1BBU1NXT1JEICovCi0JICAgIGRlYm9rID0gMDsKLQkgICAgcyA9IE5VTEw7Ci0JICAg IGlmIChnZXR2YWwpIHsKLQkJaWYgKCh4ID0gY21mbGQoIlBhc3N3b3JkIiwiIiwmcyx4eHN0cmlu ZykpIDwgMCkKLQkJICBnb3RvIHhodHRwOwotCSAgICB9Ci0JICAgIG1ha2VzdHIoJmh0dHBfcGFz cyxzKTsKLQkgICAgYnJlYWs7Ci0jaWZuZGVmIE5PU1BMCi0JICBjYXNlIEhUX1NXX0FSOiB7CQkv KiAvQVJSQVk6ICovCi0JICAgICAgY2hhciAqIHMyLCBhcnJheSA9IE5VTDsKLQkgICAgICBpZiAo IWdldHZhbCkgewotCQkgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50 XG4iKTsKLQkJICB4ID0gLTk7Ci0JCSAgZ290byB4aHR0cDsKLQkgICAgICB9Ci0JICAgICAgaWYg KCh4ID0gY21mbGQoIkFycmF5IG5hbWUgKGEgc2luZ2xlIGxldHRlciB3aWxsIGRvKSIsCi0JCQkg ICAgICIiLAotCQkJICAgICAmcywKLQkJCSAgICAgTlVMTAotCQkJICAgICApKSA8IDApIHsKLQkJ ICBpZiAoeCA9PSAtMykgewotCQkgICAgICBwcmludGYoIj9BcnJheSBuYW1lIHJlcXVpcmVkXG4i KTsKLQkJICAgICAgeCA9IC05OwotCQkgICAgICBnb3RvIHhodHRwOwotCQkgIH0gZWxzZQotCQkg ICAgZ290byB4aHR0cDsKLQkgICAgICB9Ci0JICAgICAgaWYgKCEqcykgewotCQkgIHByaW50Zigi P0FycmF5IG5hbWUgcmVxdWlyZWRcbiIpOwotCQkgIHggPSAtOTsKLQkJICBnb3RvIHhodHRwOwot CSAgICAgIH0KLQkgICAgICBzMiA9IHM7Ci0JICAgICAgaWYgKCpzID09IENNRFEpIHMrKzsKLQkg ICAgICBpZiAoKnMgPT0gJyYnKSBzKys7Ci0JICAgICAgaWYgKCFpc2FscGhhKCpzKSkgewotCQkg IHByaW50ZigiP0JhZCBhcnJheSBuYW1lIC0gXCIlc1wiXG4iLHMyKTsKLQkJICB4ID0gLTk7Ci0J CSAgZ290byB4aHR0cDsKLQkgICAgICB9Ci0JICAgICAgYXJyYXkgPSAqcysrOwotCSAgICAgIGlm IChpc3VwcGVyKGFycmF5KSkKLQkJYXJyYXkgPSB0b2xvd2VyKGFycmF5KTsKLQkgICAgICBpZiAo KnMgJiYgKCpzICE9ICdbJyB8fCAqKHMrMSkgIT0gJ10nKSkgewotCQkgIHByaW50ZigiP0JhZCBh cnJheSBuYW1lIC0gXCIlc1wiXG4iLHMyKTsKLQkJICBodHRwX2FycmF5ID0gTlVMOwotCQkgIHgg PSAtOTsKLQkJICBnb3RvIHhodHRwOwotCSAgICAgIH0KLQkgICAgICBodHRwX2FycmF5ID0gYXJy YXk7Ci0JICAgICAgYnJlYWs7Ci0JICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQkgIGRlZmF1bHQ6 Ci0JICAgIHggPSAtMjsKLQkgICAgZ290byB4aHR0cDsKLQl9Ci0gICAgfQotICAgIGh0dHBfYWN0 aW9uID0gbjsJCQkvKiBTYXZlIHRoZSBhY3Rpb24gKi8KLSAgICBpZiAoaHR0cF9hY3Rpb24gPT0g SFRUUF9QVVQgfHwgaHR0cF9hY3Rpb24gPT0gSFRUUF9QT1MpIHsKLQljbWZkYmkoJnN3LAkJCS8q IDFzdCBGREIgLSBzd2l0Y2ggKi8KLQkgICAgICAgX0NNS0VZLAkJCS8qIGZjb2RlICovCi0JICAg ICAgICJMb2NhbCBmaWxlbmFtZVxuIE9yIHN3aXRjaCIsIC8qIGhlbHAgKi8KLQkgICAgICAgIiIs CQkJLyogZGVmYXVsdCAqLwotCSAgICAgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwot CSAgICAgICBuaHR0cHB0YWIsCQkvKiBrZXl3b3JkIHRhYmxlIHNpemUgKi8KLQkgICAgICAgNCwJ CQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0JICAgICAgIHh4c3RyaW5n LAkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotCSAgICAgICBodHRwcHRhYiwJCS8qIEtleXdv cmQgdGFibGUgKi8KLQkgICAgICAgJmZpCQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotCSAg ICAgICApOwotCWNtZmRiaSgmZmksCQkJLyogMm5kIEZEQiAtIGZpbGVuYW1lICovCi0JICAgICAg IF9DTUlGSSwJCQkvKiBmY29kZSAqLwotCSAgICAgICAiTG9jYWwgZmlsZW5hbWUiLAkvKiBobHBt c2cgKi8KLQkgICAgICAgIiIsCQkJLyogZGVmYXVsdCAqLwotCSAgICAgICAiIiwJCQkvKiBhZGR0 bCBzdHJpbmcgZGF0YSAqLwotCSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICov Ci0JICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLQkgICAgICAgeHhzdHJp bmcsCi0JICAgICAgIE5VTEwsCi0JICAgICAgIE5VTEwKLQkgICAgICAgKTsKLQl3aGlsZSAoMSkg ewotCSAgICB4ID0gY21mZGIoJnN3KTsKLQkgICAgaWYgKHggPCAwKQotCSAgICAgIGdvdG8geGh0 dHA7CQkvKiBGcmVlIGFueSBtYWxsb2MnZCB0ZW1wIHN0cmluZ3MgKi8KLQkgICAgbiA9IGNtcmVz dWx0Lm5yZXN1bHQ7Ci0JICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpCi0JICAgICAg YnJlYWs7Ci0JICAgIGMgPSBjbWdicmsoKTsJCS8qIFN3aXRjaC4uLiAqLwotCSAgICBnZXR2YWwg PSAoYyA9PSAnOicgfHwgYyA9PSAnPScpOwotCSAgICBpZiAoZ2V0dmFsICYmICEoY21na3dmbGdz KCkgJiBDTV9BUkcpKSB7Ci0JCXByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4g YXJndW1lbnRcbiIpOwotCQl4ID0gLTk7Ci0JCWdvdG8geGh0dHA7Ci0JICAgIH0KLQkgICAgc3dp dGNoIChuKSB7Ci0JICAgICAgY2FzZSBIVF9QUF9NVDoKLQkJcyA9ICJ0ZXh0L0hUTUwiOwotCQlp ZiAoZ2V0dmFsKSB7Ci0JCSAgICBpZiAoKHggPSBjbWZsZCgiTUlNRSB0eXBlIiwKLQkJCQkgICAi dGV4dC9IVE1MIiwmcyx4eHN0cmluZykpIDwgMCkKLQkJICAgICAgZ290byB4aHR0cDsKLQkJfQot CQltYWtlc3RyKCZodHRwX21pbWUscyk7Ci0JCWJyZWFrOwotCSAgICAgIGRlZmF1bHQ6Ci0JCXgg PSAtMjsKLQkJZ290byB4aHR0cDsKLQkgICAgfQotCX0KLQltYWtlc3RyKCZodHRwX2xmaWxlLGNt cmVzdWx0LnNyZXN1bHQpOwotCW4gPSBja2luZGV4KCIvIixodHRwX2xmaWxlLC0xLDEsMCk7Ci0J aWYgKG4pCi0JICBwID0gJmh0dHBfbGZpbGVbbl07Ci0JZWxzZQotCSAgcCA9IGh0dHBfbGZpbGU7 Ci0JaWYgKCh4ID0gY21mbGQoIlVSTCBvciByZW1vdGUgZmlsZW5hbWUiLHAsJnMseHhzdHJpbmcp KSA8IDApIHsKLSAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgcHJpbnRmKCI/ JXMgd2hhdD9cbiIsKGh0dHBfYWN0aW9uID09IEhUVFBfUFVUKSA/ICJQdXQiIDogIlBvc3QiKTsK LSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ290byB4aHR0cDsK LSAgICAgICAgfQotCWlmICghKnMpIHMgPSBOVUxMOwotCW1ha2VzdHIoJmh0dHBfcmZpbGUscyk7 Ci0KLQlpZiAoKHggPSBjbXR4dCgiUmVzcG9uc2UgZmlsZW5hbWUiLCIiLCZzLHh4c3RyaW5nKSkg PCAwKSB7Ci0gICAgICAgICAgaWYgKHggIT0gLTMpCi0gICAgICAgICAgICBnb3RvIHhodHRwOwot ICAgICAgICB9Ci0gICAgICAgIGlmICgqcykKLSAgICAgICAgICBtYWtlc3RyKCZodHRwX2RmaWxl LHMpOwotICAgIH0KLSAgICBzd2l0Y2ggKGh0dHBfYWN0aW9uKSB7Ci0gICAgICBjYXNlIEhUVFBf REVMOgkJCS8qIERFTEVURSAqLwotCWlmICgoeCA9IGNtZmxkKCJVUkwgb3IgcmVtb3RlIHNvdXJj ZSBmaWxlIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgIGlmICh4ID09IC0zKSB7 Ci0gICAgICAgICAgICBwcmludGYoIj9EZWxldGUgd2hhdD9cbiIpOwotICAgICAgICAgICAgeCA9 IC05OwotICAgICAgICAgIH0KLSAgICAgICAgICBnb3RvIHhodHRwOwotICAgICAgICB9Ci0JbWFr ZXN0cigmaHR0cF9yZmlsZSxzKTsKLQlicmVhazsKLSAgICAgIGNhc2UgSFRUUF9DT046CQkJLyog Q09OTkVDVCAqLwotICAgICAgICBpZiAoKHggPSBjbWZsZCgiUmVtb3RlIGhvc3RbOnBvcnRdIiwi Iiwmcyx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAg ICAgICBwcmludGYoIj9SZW1vdGUgaG9zdFs6cG9ydF0gaXMgcmVxdWlyZWRcbiIpOwotICAgICAg ICAgICAgeCA9IC05OwotICAgICAgICAgIH0KLSAgICAgICAgICBnb3RvIHhodHRwOwotICAgICAg ICB9Ci0JbWFrZXN0cigmaHR0cF9yZmlsZSxzKTsKLQlicmVhazsKLSAgICAgIGNhc2UgSFRUUF9I RUQ6IHsJCQkvKiBIRUFEICovCi0JICBjaGFyIGJ1ZltDS01BWFBBVEgrMV07Ci0JICBpZiAoKHgg PSBjbWZsZCgiVVJMIG9yIHJlbW90ZSBzb3VyY2UgZmlsZSIsIiIsJnMseHhzdHJpbmcpKSA8IDAp IHsKLQkgICAgICBpZiAoeCA9PSAtMykgewotCQkgIHByaW50ZigiP0hlYWQgb2Ygd2hhdD9cbiIp OwotCQkgIHggPSAtOTsKLQkgICAgICB9Ci0JICAgICAgZ290byB4aHR0cDsKLQkgIH0KLQkgIG1h a2VzdHIoJmh0dHBfcmZpbGUscyk7Ci0KLQkgIGlmIChodHRwX2FycmF5IHx8IGh0dHBfdHlwZSkg eyAvKiBEZWZhdWx0IHJlc3VsdCBmaWxlbmFtZSAqLwotCSAgICAgIHAgPSAiIjsJCQkgLyogTm9u ZSBpZiAvQVJSQVkgb3IgL1RPU0NSRUVOICovCi0JICB9IGVsc2UgewotCSAgICAgIG4gPSBja2lu ZGV4KCIvIixodHRwX3JmaWxlLC0xLDEsMCk7IC8qIE90aGVyd2lzZSBzdHJpcCBwYXRoICovCi0J ICAgICAgaWYgKG4pCQkgICAgICAgICAgICAgICAgICAvKiBhbmQgYWRkICIuaGVhZCIgKi8KLQkJ cCA9ICZodHRwX3JmaWxlW25dOwotCSAgICAgIGVsc2UKLQkJcCA9IGh0dHBfcmZpbGU7Ci0JICAg ICAgY2ttYWttc2coYnVmLENLTUFYUEFUSCxwLCIuaGVhZCIsTlVMTCxOVUxMKTsKLQkgICAgICBw ID0gYnVmOwotCSAgfQotCSAgaWYgKCh4ID0gY21vZmkoIkxvY2FsIGZpbGVuYW1lIixwLCZzLHh4 c3RyaW5nKSkgPCAwKSB7Ci0JICAgICAgaWYgKHggIT0gLTMpCi0JCWdvdG8geGh0dHA7Ci0JICB9 Ci0JICBtYWtlc3RyKCZodHRwX2xmaWxlLHMpOwotCSAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBj YXNlIEhUVFBfR0VUOgkJCS8qIEdFVCAqLwotICAgICAgY2FzZSBIVFRQX0lEWDogewkJCS8qIElO REVYICovCi0JICBleHRlcm4gaW50IHdpbGRlbmE7Ci0JICBpbnQgdG1wOwotCSAgY2hhciAqIGxm aWxlID0gIiI7Ci0JICBpZiAoKHggPSBjbWZsZCgiVVJMIG9yIHJlbW90ZSBzb3VyY2UgZmlsZSIs IiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLQkgICAgICBpZiAoeCA9PSAtMykgewotCQkgIHByaW50 ZigiP0dldCB3aGF0P1xuIik7Ci0JCSAgeCA9IC05OwotCSAgICAgIH0KLQkgICAgICBnb3RvIHho dHRwOwotCSAgfQotCSAgbWFrZXN0cigmaHR0cF9yZmlsZSxzKTsKLQkgIGlmIChodHRwX2FjdGlv biA9PSBIVFRQX0dFVCAmJiAhaHR0cF90eXBlKQotCSAgICB6c3RyaXAoaHR0cF9yZmlsZSwmbGZp bGUpOwotCSAgLyogVVJMcyBvZnRlbiBjb250YWluIHF1ZXN0aW9uIG1hcmtzIG9yIG90aGVyIG1l dGFjaGFyYWN0ZXJzICovCi0JICAvKiBjbW9maSgpIGRvZXNuJ3QgbGlrZSB0aGVtICovCi0JICB0 bXAgPSB3aWxkZW5hOwotCSAgd2lsZGVuYSA9IDA7Ci0JICBpZiAoKHggPSBjbW9maSgiTG9jYWwg ZmlsZW5hbWUiLGxmaWxlLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0JICAgICAgd2lsZGVuYSA9IHRt cDsKLQkgICAgICBpZiAoeCAhPSAtMykKLQkJZ290byB4aHR0cDsKLQkgIH0KLQkgIHdpbGRlbmEg PSB0bXA7Ci0JICBtYWtlc3RyKCZodHRwX2xmaWxlLHMpOwotCSAgYnJlYWs7Ci0gICAgICB9Ci0g ICAgICBjYXNlIEhUVFBfT1BOOiB7Ci0JICBpbnQgc3Nsc3dpdGNoID0gMDsKLSNpZmRlZiBDS19T U0wKLQkgIHN0cnVjdCBGREIgc3csIGZsOwotCSAgY21mZGJpKCZzdywKLQkJIF9DTUtFWSwJCS8q IGZjb2RlICovCi0JCSAiSVAgaG9zdCBuYW1lIG9yIGFkZHJlc3MsIG9yIHN3aXRjaCIsIC8qIGhs cG1zZyAqLwotCQkgIiIsCQkJLyogZGVmYXVsdCAqLwotCQkgIiIsCQkJLyogYWRkdGwgc3RyaW5n IGRhdGEgKi8KLQkJIDIsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0J CSA0LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLQkJIHh4c3RyaW5n LAkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotCQkgc3Nsc3d0YWIsCQkvKiBLZXl3b3JkIHRh YmxlICovCi0JCSAmZmwJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0JCSApOwotCSAgY21m ZGJpKCZmbCwJCQkvKiAybmQgRkRCIC0gaG9zdCAqLwotCQkgX0NNRkxELAkJLyogZmNvZGUgKi8K LQkJICIiLAkJCS8qIGhscG1zZyAqLwotCQkgIiIsCQkJLyogZGVmYXVsdCAqLwotCQkgIiIsCQkJ LyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkJIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEg Ki8KLQkJIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLQkJIHh4c3RyaW5nLAotCQkg TlVMTCwKLQkJIE5VTEwKLQkJICk7Ci0JICB4ID0gY21mZGIoJnN3KTsJCS8qIFBhcnNlIHN3aXRj aCBvciBob3N0ICovCi0JICBpZiAoeCA8IDApCQkJLyogRXJyb3IgKi8KLQkgICAgZ290byB4aHR0 cDsKLQkgIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01GTEQpIHsgLyogSG9zdCAqLwotCSAgICAg IHMgPSBjbXJlc3VsdC5zcmVzdWx0OwkgIC8qIFNldCB1cCBleHBlY3RlZCBwb2ludGVyICovCi0J ICAgICAgZ290byBoYXZlaG9zdDsgICAgICAgICAgICAgIC8qIEdvIHBhcnNlIHJlc3Qgb2YgY29t bWFuZCAqLwotCSAgfQotCSAgc3Nsc3dpdGNoID0gMTsJCS8qIC9TU0wgb3IgL1RMUyBzd2l0Y2gg LSBzZXQgZmxhZyAqLwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0JICAvKiBQYXJzZSBob3N0ICov Ci0KLQkgIGlmICgoeCA9IGNtZmxkKCJVUkwsIGhvc3RuYW1lLCBvciBpcC1hZGRyZXNzIiwiIiwm cyx4eHN0cmluZykpIDwgMCkgewotCSAgICAgIGlmICh4ID09IC0zKSB7Ci0JCSAgcHJpbnRmKCI/ T3BlbiB3aGF0P1xuIik7Ci0JCSAgeCA9IC05OwotCSAgICAgIH0KLQkgICAgICBnb3RvIHhodHRw OwotCSAgfQotCi0JaGF2ZWhvc3Q6CQkJLyogQ29tZSBoZXJlIHdpdGggcyAtPiBob3N0ICovCi0j aWZkZWYgQ0tfVVJMCi0JICB4ID0gdXJscGFyc2UocywmaHR0cF91cmwpOwkvKiBXYXMgYSBVUkwg Z2l2ZW4/ICovCi0JICBpZiAoeCA8IDEpIHsJCQkvKiBOb3QgYSBVUkwgKi8KLSNlbmRpZiAvKiBD S19VUkwgKi8KLQkgICAgICBtYWtlc3RyKCZodHRwX2hvc3Qscyk7Ci0JICAgICAgaWYgKCh4ID0K LQkJICAgY21mbGQoIlNlcnZpY2UgbmFtZSBvciBwb3J0IG51bWJlciIsCi0JCQkgc3Nsc3dpdGNo ID8gImh0dHBzIiA6ICJodHRwIiwmcyx4eHN0cmluZykpIDwgMCkKLQkJZ290byB4aHR0cDsKLQkg ICAgICBlbHNlCi0JCW1ha2VzdHIoJmh0dHBfc3J2LHMpOwotI2lmZGVmIENLX1VSTAotCSAgfSBl bHNlIGlmIChja3N0cmNtcChodHRwX3VybC5zdmMsImh0dHAiLC0xLDApICYmIC8qIE5vbi1IVFRQ IFVSTCAqLwotCQkgICAgIGNrc3RyY21wKGh0dHBfdXJsLnN2YywiaHR0cHMiLC0xLDApKSB7Ci0J ICAgICAgcHJpbnRmKCI/Tm9uLUhUVFAgVVJMXG4iKTsKLQkgICAgICB4ID0gLTk7Ci0JICAgICAg Z290byB4aHR0cDsKLQkgIH0gZWxzZSB7CQkJLyogSGF2ZSBIVFRQIFVSTCAqLwotCSAgICAgIG1h a2VzdHIoJmh0dHBfc3J2LCBodHRwX3VybC5zdmMpOwotCSAgICAgIG1ha2VzdHIoJmh0dHBfdXNl cixodHRwX3VybC51c3IpOwotCSAgICAgIG1ha2VzdHIoJmh0dHBfcGFzcyxodHRwX3VybC5wc3cp OwotCSAgICAgIG1ha2VzdHIoJmh0dHBfaG9zdCxodHRwX3VybC5ob3MpOwotCSAgICAgIGlmICho dHRwX3VybC5wb3IpCi0JCW1ha2VzdHIoJmh0dHBfc3J2LGh0dHBfdXJsLnBvcik7Ci0JICAgICAg bWFrZXN0cigmaHR0cF9yZmlsZSxodHRwX3VybC5wdGgpOwotCSAgfQotCSAgaWYgKGh0dHBfcmZp bGUpIHsJCS8qIE9wZW4sIEdFVCwgYW5kIENsb3NlICovCi0JICAgICAgcHJpbnRmKCI/RGlyZWN0 b3J5L2ZpbGUgcGF0aCBub3QgYWxsb3dlZCBpbiBIVFRQIE9QRU4gVVJMXG4iKTsKLQkgICAgICB4 ID0gLTk7Ci0JICAgICAgZ290byB4aHR0cDsKLQkgIH0KLQkgIGlmICghY2tzdHJjbXAoImh0dHBz IixodHRwX3NydiwtMSwwKSB8fCBzc2xzd2l0Y2ggfHwKLQkgICAgICAhY2tzdHJjbXAoIjQ0MyIs aHR0cF9zcnYsLTEsMCkpCi0JICAgIGh0dHBfc3NsID0gMTsKLSNlbmRpZiAvKiBDS19VUkwgKi8K LQkgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBIVFRQX0NMUzoKLSAgICAgICAgYnJlYWs7 Ci0gICAgfQotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIGdvdG8geGh0dHA7Ci0K LSAgICBpZiAoaHR0cF9hY3Rpb24gPT0gSFRUUF9PUE4pIHsKLSAgICAgICAgeCA9IChodHRwX29w ZW4oaHR0cF9ob3N0LGh0dHBfc3J2LGh0dHBfc3NsLHJkbnMsMTI4LGh0dHBfYWdlbnQpID09IDAp OwotICAgICAgICBpZiAoeCkgewotICAgICAgICAgICAgaWYgKCFxdWlldCkgewotICAgICAgICAg ICAgICBpZiAocmRuc1swXSkKLSAgICAgICAgICAgICAgICBwcmludGYoIkNvbm5lY3RlZCB0byAl cyBbJXNdXHJcbiIsaHR0cF9ob3N0LHJkbnMpOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAg ICAgICAgICAgcHJpbnRmKCJDb25uZWN0ZWQgdG8gJXNcclxuIixodHRwX2hvc3QpOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgaWYgKGh0dHBfYWdlbnQpIHsKLSAgICAgICAgICAgICAgICBp ZiAoaHR0cF9kX2FnZW50KQotCQkgIGZyZWUoaHR0cF9kX2FnZW50KTsKLSAgICAgICAgICAgICAg ICBodHRwX2RfYWdlbnQgPSBodHRwX2FnZW50OwotICAgICAgICAgICAgICAgIGh0dHBfYWdlbnQg PSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGh0dHBfdXNlcikgewotICAg ICAgICAgICAgICAgIGlmIChodHRwX2RfdXNlcikKLQkJICBmcmVlKGh0dHBfZF91c2VyKTsKLSAg ICAgICAgICAgICAgICBodHRwX2RfdXNlciA9IGh0dHBfdXNlcjsKLSAgICAgICAgICAgICAgICBo dHRwX3VzZXIgPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGh0dHBfcGFz cykgewotICAgICAgICAgICAgICAgIGlmIChodHRwX2RfcGFzcykgewotICAgICAgICAgICAgICAg ICAgICBtZW1zZXQoaHR0cF9kX3Bhc3MsMCxzdHJsZW4oaHR0cF9kX3Bhc3MpKTsKLSAgICAgICAg ICAgICAgICAgICAgZnJlZShodHRwX2RfcGFzcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGh0dHBfZF9wYXNzID0gaHR0cF9wYXNzOwotICAgICAgICAgICAgICAgIGh0dHBf cGFzcyA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBodHRwX2RfdHlwZSA9IGh0 dHBfdHlwZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghcXVpZXQpCi0JICAg ICAgcHJpbnRmKCI/SFRUUCBDb25uZWN0aW9uIGZhaWxlZC5cclxuIik7Ci0gICAgICAgIH0KLSAg ICB9IGVsc2UgaWYgKGh0dHBfYWN0aW9uID09IEhUVFBfQ0xTKSB7Ci0gICAgICAgIGlmIChodHRw X2RfYWdlbnQpIHsKLSAgICAgICAgICAgIGZyZWUoaHR0cF9kX2FnZW50KTsKLSAgICAgICAgICAg IGh0dHBfZF9hZ2VudCA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGh0dHBfZF91c2Vy KSB7Ci0gICAgICAgICAgICBmcmVlKGh0dHBfZF91c2VyKTsKLSAgICAgICAgICAgIGh0dHBfZF91 c2VyID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaHR0cF9kX3Bhc3MpIHsKLSAgICAg ICAgICAgIG1lbXNldChodHRwX2RfcGFzcywwLHN0cmxlbihodHRwX2RfcGFzcykpOwotICAgICAg ICAgICAgZnJlZShodHRwX2RfcGFzcyk7Ci0gICAgICAgICAgICBodHRwX2RfcGFzcyA9IE5VTEw7 Ci0gICAgICAgIH0KLSAgICAgICAgaHR0cF9kX3R5cGUgPSAwOwotICAgICAgICB4ID0gKGh0dHBf Y2xvc2UoKSA9PSAwKTsKLSAgICB9Ci0gICAgaWYgKChodHRwX2FjdGlvbiAhPSBIVFRQX0NMUykg JiYKLQkoaHR0cF9hY3Rpb24gIT0gSFRUUF9DT04pICYmIGh0dHBfcmZpbGUpIHsgLyogUmVtb3Rl IGZpbGUgaXMgVVJMPyAqLwotCi0JLyogQWxsLWluLW9uZSBhY3Rpb25zIHdoZW4gYSBVUkwgaXMg Z2l2ZW4uLi4gKi8KLQotI2lmZGVmIENLX1VSTAotCWlmICh1cmxwYXJzZShodHRwX3JmaWxlLCZo dHRwX3VybCkgPiAwKSB7IC8qIEhhdmUgVVJMPyAqLwotCSAgICBpZiAoY2tzdHJjbXAoaHR0cF91 cmwuc3ZjLCJodHRwIiwtMSwwKSAmJiAvKiBJdCdzIGFuIEhUVFAgVVJMPyAqLwotCQlja3N0cmNt cChodHRwX3VybC5zdmMsImh0dHBzIiwtMSwwKSkgewotCQlwcmludGYoIj9Ob24tSFRUUCBVUkxc biIpOwotCQl4ID0gLTk7Ci0JCWdvdG8geGh0dHA7Ci0JICAgIH0gZWxzZSB7CQkJLyogWWVzLCBj b2xsZWN0IHRoZSBwaWVjZXMgKi8KLQkJbWFrZXN0cigmaHR0cF9zcnYsIGh0dHBfdXJsLnN2Yyk7 Ci0JCW1ha2VzdHIoJmh0dHBfdXNlcixodHRwX3VybC51c3IpOwotCQltYWtlc3RyKCZodHRwX3Bh c3MsaHR0cF91cmwucHN3KTsKLQkJbWFrZXN0cigmaHR0cF9ob3N0LGh0dHBfdXJsLmhvcyk7Ci0J CWlmIChodHRwX3VybC5wb3IpCi0JCSAgbWFrZXN0cigmaHR0cF9zcnYsaHR0cF91cmwucG9yKTsK LQkJbWFrZXN0cigmaHR0cF9yZmlsZSxodHRwX3VybC5wdGgpOwotCSAgICB9Ci0JICAgIGlmICgh aHR0cF9yZmlsZSkgewkJLyogU3RpbGwgaGF2ZSBhIHBhdGg/ICovCi0gICAgICAgICAgICAgICAg bWFrZXN0cigmaHR0cF9yZmlsZSwiLyIpOwotCSAgICB9Ci0JICAgIGlmICghY2tzdHJjbXAoImh0 dHBzIixodHRwX3NydiwtMSwwKSB8fCAvKiBDaGVjayBmb3IgU1NML1RMUyAqLwotCQkhY2tzdHJj bXAoIjQ0MyIsaHR0cF9zcnYsLTEsMCkpCi0JICAgICAgaHR0cF9zc2wgPSAxOwotCSAgICBpZiAo aHR0cF9pc2Nvbm5lY3RlZCgpKQkvKiBDbG9zZSBhbnkgb3BlbiBIVFRQIGNvbm5lY3Rpb24gKi8K LQkgICAgICBodHRwX2Nsb3NlKCk7Ci0JICAgIGlmIChodHRwX3Bhc3MgPT0gTlVMTCAmJiBodHRw X2RfcGFzcyAhPSBOVUxMKQotCSAgICAgIG1ha2VzdHIoJmh0dHBfcGFzcyxodHRwX2RfcGFzcyk7 Ci0JICAgIHggPSAoaHR0cF9vcGVuKGh0dHBfaG9zdCwKLQkJCSAgIGh0dHBfc3J2LGh0dHBfc3Ns LHJkbnMsMTI4LGh0dHBfZF9hZ2VudCkgPT0gMCk7Ci0JICAgIGlmICh4IDwgMCkgewotCQl4ID0g MDsKLQkJZ290byB4aHR0cDsKLQkgICAgfQotCSAgICBhbGxpbm9uZSA9IDE7Ci0JfQotI2VuZGlm IC8qIENLX1VSTCAqLwotICAgICAgICBpZiAoaHR0cF9wYXNzID09IE5VTEwgJiYgaHR0cF9kX3Bh c3MgIT0gTlVMTCkKLQkgIG1ha2VzdHIoJmh0dHBfcGFzcyxodHRwX2RfcGFzcyk7Ci0KLQlpZiAo aHR0cF9hY3Rpb24gPT0gSFRUUF9PUE4gJiYgYWxsaW5vbmUpIHsKLQkgICAgaHR0cF9hY3Rpb24g PSBIVFRQX0dFVDsKLQl9Ci0gICAgICAgIHggPSB4ZG9odHRwKGh0dHBfYWN0aW9uLAotICAgICAg ICAgICAgICAgICAgICBodHRwX2xmaWxlLAotCQkgICAgaHR0cF9yZmlsZSwKLSAgICAgICAgICAg ICAgICAgICAgaHR0cF9kZmlsZSwKLQkJICAgIGh0dHBfYWdlbnQgPyBodHRwX2FnZW50IDogaHR0 cF9kX2FnZW50LAotCQkgICAgaHR0cF9oZHIsCi0JCSAgICBodHRwX3VzZXIgID8gaHR0cF91c2Vy ICA6IGh0dHBfZF91c2VyLAotCQkgICAgaHR0cF9wYXNzICA/IGh0dHBfcGFzcyAgOiBodHRwX2Rf cGFzcywKLQkJICAgIGh0dHBfbWltZSwKLQkJICAgIGh0dHBfYXJyYXksCi0JCSAgICBodHRwX3R5 cGUKLQkJICAgICk7Ci0JaWYgKGFsbGlub25lKQotCSAgeCA9IChodHRwX2Nsb3NlKCkgPT0gMCk7 Ci0gICAgfQotCi0gIHhodHRwOgotICAgIGlmIChodHRwX2FnZW50KSBmcmVlKGh0dHBfYWdlbnQp OwotICAgIGlmIChodHRwX2hkcikgICBmcmVlKGh0dHBfaGRyKTsKLSAgICBpZiAoaHR0cF91c2Vy KSAgZnJlZShodHRwX3VzZXIpOwotICAgIGlmIChodHRwX3Bhc3MpIHsKLSAgICAgICAgbWVtc2V0 KGh0dHBfcGFzcywwLHN0cmxlbihodHRwX3Bhc3MpKTsKLSAgICAgICAgZnJlZShodHRwX3Bhc3Mp OwotICAgIH0KLSAgICBpZiAoaHR0cF9taW1lKSAgZnJlZShodHRwX21pbWUpOwotICAgIGlmICho dHRwX2xmaWxlKSBmcmVlKGh0dHBfbGZpbGUpOwotICAgIGlmIChodHRwX3JmaWxlKSBmcmVlKGh0 dHBfcmZpbGUpOwotICAgIGlmIChodHRwX2RmaWxlKSBmcmVlKGh0dHBfZGZpbGUpOwotICAgIGlm IChodHRwX2hvc3QpICBmcmVlKGh0dHBfaG9zdCk7Ci0gICAgaWYgKGh0dHBfc3J2KSAgIGZyZWUo aHR0cF9zcnYpOwotCi0gICAgaWYgKHggPiAtMSkKLSAgICAgIHN1Y2Nlc3MgPSB4OwotICAgIHJl dHVybih4KTsKLX0KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBOT0hUVFAgKi8K LQotCi0jaWZuZGVmIE5PU1BMCi1zdGF0aWMgaW50Ci1kb3RyYWNlKCkgewotICAgIGludCBvbiA9 IDE7Ci0gICAgc3RydWN0IEZEQiBzdywga3c7Ci0gICAgY21mZGJpKCZzdywJCQkJLyogMXN0IEZE QiAtIHN3aXRjaCAqLwotCSAgIF9DTUtFWSwJCQkvKiBmY29kZSAqLwotCSAgICJUcmFjZSBvYmpl Y3Q7XG4gT3Igc3dpdGNoIiwgLyogaGVscCAqLwotCSAgICIiLAkJCQkvKiBkZWZhdWx0ICovCi0J ICAgIiIsCQkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0JICAgMiwJCQkJLyoga2V5d29yZCB0 YWJsZSBzaXplICovCi0JICAgNCwJCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3 aSAqLwotCSAgIHh4c3RyaW5nLAkJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLQkgICBvbm9m ZnN3LAkJCS8qIEtleXdvcmQgdGFibGUgKi8KLQkgICAma3cJCQkJLyogUG9pbnRlciB0byBuZXh0 IEZEQiAqLwotCSAgICk7Ci0gICAgY21mZGJpKCZrdywJCQkJLyogMm5kIEZEQiAtIFRyYWNlIG9i amVjdCAqLwotCSAgIF9DTUtFWSwJCQkvKiBmY29kZSAqLwotCSAgICJUcmFjZSBvYmplY3QiLAkJ LyogaGVscCAqLwotCSAgICJhbGwiLAkJCS8qIGRlZmF1bHQgKi8KLQkgICAiIiwJCQkJLyogYWRk dGwgc3RyaW5nIGRhdGEgKi8KLQkgICBudHJhY2V0YWIsCQkJLyoga2V5d29yZCB0YWJsZSBzaXpl ICovCi0JICAgMCwJCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDAgPSBrZXl3b3JkICovCi0J ICAgeHhzdHJpbmcsCQkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotCSAgIHRyYWNldGFiLAkJ CS8qIEtleXdvcmQgdGFibGUgKi8KLQkgICBOVUxMCQkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIg Ki8KLQkgICApOwotICAgIGlmICgoeCA9IGNtZmRiKCZzdykpIDwgMCkKLSAgICAgIHJldHVybih4 KTsKLSAgICBpZiAoY21yZXN1bHQuZmRiYWRkciA9PSAmc3cpIHsKLQlvbiA9IGNtcmVzdWx0Lm5y ZXN1bHQ7Ci0JaWYgKCh4ID0gY21rZXkodHJhY2V0YWIsIG50cmFjZXRhYiwiIiwiYWxsIix4eHN0 cmluZykpIDwgMCkKLQkgIHJldHVybih4KTsKLSAgICB9IGVsc2UgewotCXggPSBjbXJlc3VsdC5u cmVzdWx0OwotICAgIH0KLSAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0gICAgICByZXR1cm4o eSk7Ci0KLSAgICBzd2l0Y2ggKHgpIHsKLSAgICAgIGNhc2UgVFJBX0FTRzoKLQl0cmFfYXNnID0g b247Ci0JYnJlYWs7Ci0gICAgICBjYXNlIFRSQV9DTUQ6Ci0JdHJhX2NtZCA9IG9uOwotCWJyZWFr OwotICAgICAgY2FzZSBUUkFfQUxMOgotCXRyYV9hc2cgPSBvbjsKLQl0cmFfY21kID0gb247Ci0J YnJlYWs7Ci0gICAgICBkZWZhdWx0OgotCXJldHVybigtMik7Ci0gICAgfQotICAgIHByaW50Zigi VFJBQ0UgJXNcbiIsIG9uID8gIk9OIiA6ICJPRkYiKTsKLSAgICByZXR1cm4oc3VjY2VzcyA9IDEp OwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLQotc3RhdGljIGludAotZG9wcm9tcHQoKSB7Ci0g ICAgZXh0ZXJuIGludCB4Y21kc3JjOwotICAgIGlmICgoeCA9IGNtdHh0KCJPcHRpb25hbCBtZXNz YWdlIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSNpZmRlZiBOT1NQ TAotICAgIHByaW50ZigiP1NvcnJ5LCBQUk9NUFQgcmVxdWlyZXMgc2NyaXB0IHByb2dyYW1taW5n IGxhbmd1YWdlXG4iKTsKLSAgICByZXR1cm4oLTkpOwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAxLCJQ cm9tcHQgY21kbHZsIiwiIixjbWRsdmwpOwotICAgIGNtZGx2bCsrOwotICAgIGlmIChjbWRsdmwg PiBDTURTVEtMKSB7Ci0JcHJpbnRmKCI/Q29tbWFuZCBzdGFjayBvdmVyZmxvdzogJWRcbiIsY21k bHZsKTsKLQljbWRsdmwtLTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICB4Y21kc3JjID0gQ01E X0tCOwotICAgIGNtZHN0a1tjbWRsdmxdLnNyYyA9IENNRF9LQjsJLyogU2F5IHdlJ3JlIGF0IHRo ZSBwcm9tcHQgKi8KLSAgICBjbWRzdGtbY21kbHZsXS5sdmwgPSAwOwotICAgIGNtZHN0a1tjbWRs dmxdLmNjZmxncyA9IGNtZHN0a1tjbWRsdmwtMV0uY2NmbGdzOwotICAgIGlmICh0cmFfY21kKQot ICAgICAgcHJpbnRmKCJbJWRdICtQOiBcIihwcm9tcHQpXCJcbiIsY21kbHZsKTsKLSAgICBjb25j YigoY2hhcillc2NhcGUpOwotICAgIGlmICghcXVpZXQpCi0gICAgICBwcmludGYoCi0iKFJlY3Vy c2l2ZSBjb21tYW5kIHByb21wdDogUmVzdW1lIHNjcmlwdCB3aXRoIENPTlRJTlVFLCBTVE9QIHRv IHN0b3AuLi4pXG4iCi0gICAgICAgICAgICApOwotICAgIGlmICgqcykgewkJCQkvKiBJZiBwcm9t cHQgZ2l2ZW4gKi8KLQltYWtlc3RyKCYocHJzdHJpbmdbY21kbHZsLTFdKSxjbWdldHAoKSk7IC8q IFNhdmUgY3VycmVudCBwcm9tcHQgKi8KLQljbXNldHAocyk7CQkJLyogU2V0IG5ldyBvbmUgKi8K LSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotfQot Ci0jaWZkZWYgQ0tMRUFSTgotVk9JRAotbGVhcm5jbWQocykgY2hhciAqczsgewkJCS8qIFJlY29y ZCBjb21tYW5kcyBpbiBsZWFybmVkIHNjcmlwdCAqLwotICAgIGNoYXIgYnVmWzY0XTsKLSAgICBp bnQgaSwgazsKLSAgICBpZiAobGVhcm5mcCAmJiBsZWFybmluZykgewkJLyogT25seSBpZiBvcGVu IGFuZCBvbiAqLwotCWsgPSBja3N0cm5jcHkoYnVmLHMsNjQpOwotCWZvciAoaSA9IDA7IGkgPCBr OyBpKyspIHsJLyogR2V0IHRvcC1sZXZlbCBjb21tYW5kIGtleXdvcmQgKi8KLQkgICAgaWYgKGJ1 ZltpXSA8PSBTUCkgewotCQlidWZbaV0gPSBOVUw7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotCWsg PSBsb29rdXAoY21kdGFiLGJ1ZixuY21kLE5VTEwpOyAvKiBMb29rIGl0IHVwICovCi0JaWYgKGsg PT0gWFhDT04gfHwgayA9PSBYWExFQVJOKQkgIC8qIERvbid0IHJlY29yZCBDT05ORUNUIG9yIExF QVJOICovCi0JICByZXR1cm47Ci0JaWYgKGsgPT0gWFhURUwpIHsKLQkgICAgZnB1dHMoIlNFVCBI T1NUIC9ORVRXT1JLOlRDUCIsbGVhcm5mcCk7Ci0JICAgIGZwdXRzKCZzW2ldLGxlYXJuZnApOwot CSAgICBmcHV0cygiIFRFTE5FVCAvVEVMTkVUIixsZWFybmZwKTsKLQkgICAgZnB1dHMoIlxuSUYg RkFJTCBTVE9QIDEgQ29ubmVjdGlvbiBmYWlsZWRcbiIsbGVhcm5mcCk7Ci0JfSBlbHNlIHsKLQkg ICAgZnB1dHMocyxsZWFybmZwKTsKLQkgICAgZnB1dHMoIlxuIixsZWFybmZwKTsKLQl9Ci0gICAg fQotfQotI2VuZGlmIC8qIENLTEVBUk4gKi8KLQotCi0jaWZkZWYgU1NIQ01ECi0vKgotICAyMDEw LzAzLzAxLi4uCi0gIFJlb3BlbiBhIGNvbm5lY3Rpb24gdGhhdCB3YXMgbWFkZSB3aXRoIGFuIGV4 dGVybmFsIHNzaCBjbGllbnQKLSAgYWZ0ZXIgaXQgaGFzIGJlZW4gY2xvc2VkLgotICovCi1pbnQK LXJlZG9zc2goKSB7Ci0gICAgaW50IHgsIG5ldHNhdmU7Ci0gICAgeCA9IG5ldHR5cGU7Ci0gICAg ZGVidWcoRjExMSwicmVkb3NzaCBuZXR0eXBlIix0dG5hbWUsbmV0dHlwZSk7Ci0gICAgaWYgKCh5 ID0gc2V0bGluKFhYU1NILDAsMSkpIDwgMCkgewotCWlmIChlcnJubykKLQkgIHByaW50ZigiPyVz XG4iLGNrX2VycnN0cigpKTsKLQllbHNlCi0JICByZXR1cm4oeSk7Ci0JbmV0dHlwZSA9IHg7CQkJ LyogRmFpbGVkLCByZXN0b3JlIG5ldCB0eXBlLiAqLwotCXN1Y2Nlc3MgPSAwOwotCXJldHVybih5 KTsKLSAgICB9Ci0gICAgbmV0c2F2ZSA9IHg7Ci0gICAgcmV0dXJuKHkpOwotfQotI2VuZGlmCS8q IFNTSENNRCAqLwotCi0vKgotICBMaWtlIGhtc2dhKCkgaW4gY2t1dXMyLmMgYnV0IHRha2VzIGEg c2luZ2xlIHN1YnN0aXR1dGlvbiBwYXJhbWV0ZXIsIHMyLAotICB3aGljaCByZXBsYWNlcyBldmVy eSBvY2N1cnJlbmNlIG9mICIlcyIgaW4gdGhlIGZpcnN0IGFyZ3VtZW50LgotICBBZGRlZCB0byBw cmludCB0ZXh0IGNvbnRhaW5pbmcgdGhlIGNvcHlyaWdodCB5ZWFyLCBzbyB0aGUgeWVhciBkb2Vz bid0IAotICBoYXZlIHRvIGJlIGhhcmR3aXJlZCBpbnRvIGxvdHMgb2Ygc2NhdHRlcmVkIHRleHQg c3RyaW5ncy4KLSovCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UHJpbnQgYW4gYXJyYXkgb2YgbGluZXMsICovCi0jaWZkZWYgQ0tfQU5TSUMKLWhtc2dhYShjaGFy ICpzW10sIGNoYXIgKnMyKQkJLyogcGF1c2luZyBhdCBlbmQgb2YgZWFjaCBzY3JlZW4uICovCi0j ZWxzZQotaG1zZ2FhKHMsczIpIGNoYXIgKnNbXTsgY2hhciAqczI7Ci0jZW5kaWYJLyogQ0tfQU5T SUMgKi8KLXsKLSAgICBleHRlcm4gaW50IGhtdG9wbGluZTsKLSNpZmRlZiBPUzIKLSAgICBleHRl cm4gaW50IHR0X3Jvd3NbXSwgdHRfY29sc1tdOwotI2Vsc2UgLyogT1MyICovCi0gICAgZXh0ZXJu IGludCB0dF9yb3dzLCB0dF9jb2xzOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIGludCB4LCB5LCBp LCBqLCBrLCBuOwotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCi0jaWZk ZWYgQ0tfVFRHV1NJWgotI2lmZGVmIE9TMgotICAgIHR0Z2N3c3ooKTsKLSNlbHNlIC8qIE9TMiAq LwotICAgIC8qIENoZWNrIHdoZXRoZXIgd2luZG93IHNpemUgY2hhbmdlZCAqLwotICAgIGlmICh0 dGd3c2l6KCkgPiAwKSB7Ci0gICAgICAgIGlmICh0dF9yb3dzID4gMCAmJiB0dF9jb2xzID4gMCkg ewotICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOwotICAgICAgICAgICAgY21kX2NvbHMg PSB0dF9jb2xzOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8q IENLX1RUR1dTSVogKi8KLQotICAgIHByaW50ZigiXG4iKTsgICAgICAgICAgICAgICAgICAgICAg IC8qIFN0YXJ0IG9mZiB3aXRoIGEgYmxhbmsgbGluZSAqLwotICAgIG4gPSAoaG10b3BsaW5lID4g MCkgPyBobXRvcGxpbmUgOiAxOyAvKiBMaW5lIGNvdW50ZXIgKi8KLSAgICBmb3IgKGkgPSAwOyAq c1tpXTsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigoY2hhciAqKXNbaV0sczIpOwkvKiBQcmludCBh IGxpbmUuICovCi0JcHJpbnRmKCJcbiIpOwotICAgICAgICB5ID0gKGludClzdHJsZW4oc1tpXSk7 Ci0gICAgICAgIGsgPSAxOwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgeTsgaisrKSAgICAgICAg IC8qIFNlZSBob3cgbWFueSBuZXdsaW5lcyB3ZXJlICovCi0gICAgICAgICAgaWYgKHNbaV1bal0g PT0gJ1xuJykgaysrOyAgICAgLyogaW4gdGhlIHN0cmluZy4uLiAqLwotICAgICAgICBuICs9IGs7 Ci0gICAgICAgIGlmIChuID4gKGNtZF9yb3dzIC0gMykgJiYgKnNbaSsxXSkgLyogQWZ0ZXIgYSBz Y3JlZW5mdWwsIGdpdmUgdGhlbSAqLwotICAgICAgICAgIGlmICghYXNrbW9yZSgpKSByZXR1cm4o MCk7ICAgIC8qIGEgIm1vcmU/IiBwcm9tcHQuICovCi0gICAgICAgICAgZWxzZSBuID0gMDsKLSAg ICB9Ci0gICAgcHJpbnRmKCJcbiIpOwotICAgIHJldHVybigwKTsKLX0KLQotLyogIEQgTyBDIE0g RCAgLS0gIERvIGEgY29tbWFuZCAgKi8KLQotLyoKLSBSZXR1cm5zOgotICAgLTI6IHVzZXIgdHlw ZWQgYW4gaWxsZWdhbCBjb21tYW5kCi0gICAtMTogcmVwYXJzZSBuZWVkZWQKLSAgICAwOiBwYXJz ZSB3YXMgc3VjY2Vzc2Z1bCAoZXZlbiB0aG8gY29tbWFuZCBtYXkgaGF2ZSBmYWlsZWQpLgotKi8K LSNpZmRlZiBERUJVRwotaW50IGNtZHN0YXRzWzI1Nl0gPSB7IC0xLCAtMSB9OwotI2VuZGlmIC8q IERFQlVHICovCi0KLWludAotZG9jbWQoY3gpIGludCBjeDsgewotICAgIGV4dGVybiBpbnQgbm9s b2NhbCwgY21rd2ZsZ3M7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJkb2NtZCBlbnRyeSwgY3giLCIiLGN4 KTsKLSAgICBhY3RpdmVjbWQgPSBjeDsKLSAgICBkb2NvbnggPSAoKGFjdGl2ZWNtZCA9PSBYWENP TikgIHx8IChhY3RpdmVjbWQgPT0gWFhURUwpIHx8Ci0JICAgICAgKGFjdGl2ZWNtZCA9PSBYWFJM T0cpIHx8IChhY3RpdmVjbWQgPT0gWFhQSVBFKSB8fAotICAgICAgICAgICAgICAoYWN0aXZlY21k ID09IFhYSUtTRCkgfHwgKGFjdGl2ZWNtZCA9PSBYWFBUWSkpOwotLyoKLSAgT3JpZ2luYWxseSBh bGwgY29tbWFuZHMgd2VyZSBoYW5kbGVkIHdpdGggYSBiaWcgc3dpdGNoKCkgc3RhdGVtZW50LAot ICBidXQgZXZlbnR1YWxseSB0aGlzIHN0YXJ0ZWQgYmxvd2luZyB1cCBjb21waWxlcnMuICBOb3cg d2UgaGF2ZSBhIHNlcmllcwotICBvZiBzZXBhcmF0ZSBpZiBzdGF0ZW1lbnRzIGFuZCBzbWFsbCBz d2l0Y2hlcywgd2l0aCB0aGUgY29tbWFuZHMgdGhhdCBhcmUKLSAgbW9zdCBjb21tb25seSBleGVj dXRlZCBpbiBzY2lwdHMgYW5kIGxvb3BzIGNvbWluZyBmaXJzdCwgdG8gc3BlZWQgdXAKLSAgY29t cHV0ZS1ib3VuZCBzY3JpcHRzLgotICAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoY21kc3Rh dHNbMF0gPT0gLTEpIHsJCS8qIENvdW50IGNvbW1hbmRzICovCi0JaW50IGk7CQkJCS8qIGZvciB0 dW5pbmcuLi4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0JICBjbWRzdGF0c1tpXSA9 IDA7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICBzd2l0Y2ggKGN4KSB7Ci0gICAg ICBjYXNlIC00OgkJCQkvKiBFT0YgKi8KLSNpZmRlZiBPU0sKLQlpZiAobXNnZmxnKSAgcHJpbnRm KCJcbiIpOwotI2Vsc2UKLQlpZiAobXNnZmxnKSAgcHJpbnRmKCJcclxuIik7Ci0jZW5kaWYgLyog T1NLICovCi0JICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7Ci0gICAgICBjYXNlIC0zOgkJCQkv KiBOdWxsIGNvbW1hbmQgKi8KLQlyZXR1cm4oMCk7Ci0gICAgICBjYXNlIC05OgkJCQkvKiBMaWtl IC0yLCBidXQgZXJybXNnIGFscmVhZHkgZG9uZSAqLwotICAgICAgY2FzZSAtMToJCQkJLyogUmVw YXJzZSBuZWVkZWQgKi8KLQlyZXR1cm4oY3gpOwotICAgICAgY2FzZSAtNjoJCQkJLyogU3BlY2lh bCAqLwotICAgICAgY2FzZSAtMjoJCQkJLyogRXJyb3IsIG1heWJlICovCi0KLSNpZm5kZWYgTk9T UEwKLS8qCi0gIE1heWJlIHRoZXkgdHlwZWQgYSBtYWNybyBuYW1lLiAgTGV0J3MgbG9vayBpdCB1 cCBhbmQgc2VlLgotKi8KLQlpZiAoY3ggPT0gLTYpCQkJLyogSWYgdGhleSB0eXBlZCBDUiAqLwot CSAgY2tzdHJuY2F0KGNtZGJ1ZiwiXDAxNSIsQ01EQkwpOyAvKiAgYWRkIGl0IGJhY2sgdG8gY29t bWFuZCBidWZmZXIuICovCi0JaWYgKGlmY21kW2NtZGx2bF0gPT0gMikJCS8qIFdhdGNoIG91dCBm b3IgSUYgY29tbWFuZHMuICovCi0JICBpZmNtZFtjbWRsdmxdLS07Ci0JcmVwYXJzID0gMTsJCQkv KiBGb3JjZSByZXBhcnNlICovCi0JY21yZXMoKTsKLQljeCA9IFhYRE87CQkJLyogVHJ5IERPIGNv bW1hbmQgKi8KLSNlbHNlCi0JcmV0dXJuKGN4KTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAg ZGVmYXVsdDoKLQlpZiAoY3ggPCAwKQotCSAgcmV0dXJuKGN4KTsKLQlicmVhazsKLSAgICB9Ci0j aWZkZWYgREVCVUcKLSAgICBpZiAoY3ggPCAyNTYpCi0gICAgICBjbWRzdGF0c1tjeF0rKzsKLSNl bmRpZiAvKiBERUJVRyAqLwotCi0gICAgaWYgKChjbWt3ZmxncyAmIENNX1BTSCkKLSNpZm5kZWYg Tk9QVVNICi0JJiYgbm9wdXNoCi0jZW5kaWYgLyogTk9QVVNIICovCi0JKSB7Ci0JcHJpbnRmKCI/ QWNjZXNzIHRvIHN5c3RlbSBkaXNhYmxlZFxuIik7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAg aWYgKChjbWt3ZmxncyAmIENNX0xPQykKLSNpZm5kZWYgTk9MT0NBTAotCSYmIG5vbG9jYWwKLSNl bmRpZiAvKiBOT0xPQ0FMICovCi0JKSB7Ci0JcHJpbnRmKCI/Q29ubmVjdGlvbnMgZGlzYWJsZWRc biIpOwotCXJldHVybigtOSk7Ci0gICAgfQotCi0jaWZuZGVmIE5PU1BMCi0gICAgLyogVXNlZCBp biBGT1IgbG9vcHMgKi8KLQotICAgIGlmIChjeCA9PSBYWF9JTkNSIHx8IGN4ID09IFhYSU5DICB8 fCAvKiBfSU5DUkVNRU5ULCBJTkNSRU1FTlQgKi8KLQljeCA9PSBYWF9ERUNSIHx8IGN4ID09IFhY REVDKQkgLyogX0RFQ1JFTUVOVCwgREVDUkVNRU5UICovCi0gICAgICByZXR1cm4oZG9pbmNyKGN4 KSk7Ci0KLSAgICAvKiBEZWZpbmUgKG9yIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZikgYSBtYWNy byBvciB2YXJpYWJsZSAqLwotCi0gICAgaWYgKGN4ID09IFhYVU5ERUYgfHwgY3ggPT0gWFhVTkRG WCkgewotI2lmZGVmIElLU0QKLQlpZiAoaW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fYXNnKSkgewot CSAgICBwcmludGYoIj9Tb3JyeSwgREVGSU5FL0FTU0lHTiBkaXNhYmxlZFxuIik7Ci0JICAgIHJl dHVybigtOSk7Ci0JfQotI2VuZGlmIC8qIElLU0QgKi8KLQlyZXR1cm4oZG91bmRlZihjeCkpOwkJ LyogW19dVU5ERUZJTkUgKi8KLSAgICB9Ci0gICAgaWYgKGN4ID09IFhYREVGIHx8IGN4ID09IFhY QVNTIHx8Ci0JY3ggPT0gWFhERlggfHwgY3ggPT0gWFhBU1gpIHsKLSNpZmRlZiBJS1NECi0JaWYg KGluc2VydmVyICYmICFFTkFCTEVEKGVuX2FzZykpIHsKLQkgICAgcHJpbnRmKCI/U29ycnksIERF RklORS9BU1NJR04gZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAv KiBJS1NEICovCi0JaWYgKGF0bWJ1ZlswXSA9PSAnLicgJiYgIWF0bWJ1ZlsxXSkgLyogIi4iIGVu dGVyZWQgYXMga2V5d29yZCAqLwotCSAgeHhkb3QgPSAxOwkJCS8qIGkuZS4gd2l0aCBzcGFjZSBh ZnRlciBpdC4uLiAqLwotCXJldHVybihkb2RlZihjeCkpOwkJLyogREVGSU5FLCBBU1NJR04sIGV0 Yy4uLiAqLwotICAgIH0KLQotICAgIC8qIElGLCBXSElMRSwgYW5kIGZyaWVuZHMgICovCi0KLSAg ICBpZiAoY3ggPT0gWFhJRiB8fCBjeCA9PSBYWElGWCB8fCBjeCA9PSBYWFdISSB8fCBjeCA9PSBY WEFTU0VSKSB7Ci0JcmV0dXJuKGRvaWYoY3gpKTsKLSAgICB9Ci0gICAgaWYgKGN4ID09IFhYU1dJ VCkgewkJCS8qIFNXSVRDSCAqLwotCXJldHVybihkb3N3aXRjaCgpKTsKLSAgICB9Ci0KLSAgICAv KiBHT1RPLCBGT1JXQVJELCBhbmQgX0ZPUldBUkQgKHVzZWQgaW50ZXJuYWxseSBieSBGT1IsIFdI SUxFLCBldGMpICovCi0KLSAgICBpZiAoY3ggPT0gWFhHT1RPIHx8IGN4ID09IFhYRldEIHx8IGN4 ID09IFhYWEZXRCkgeyAvKiBHT1RPIG9yIEZPUldBUkQgKi8KLQkvKiBOb3RlLCBoZXJlIHdlIGRv bid0IHNldCBTVUNDRVNTL0ZBSUxVUkUgZmxhZyAqLwotI2lmZGVmIENPTU1FTlQKLQlpZiAoKHkg PSBjbWZsZCgibGFiZWwiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0JICAgIGlmICh5ID09IC0z KSB7Ci0JCWlmIChjeCAhPSBYWFhGV0QpIHsKLQkJICAgIHByaW50ZigiP0xhYmVsIG5hbWUgcmVx dWlyZWRcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCSAgICB9IGVsc2UKLQkgICAgICBy ZXR1cm4oeSk7Ci0JfQotCWNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVopOwotCWlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotI2Vsc2UKLQlpZiAoKHkgPSBjbXR4dCgibGFiZWwi LCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0JICAgIGlmICh5ID09IC0zKSB7Ci0JCWlmIChjeCAh PSBYWFhGV0QpIHsKLQkJICAgIHByaW50ZigiP0dPVE86IExhYmVsIG5hbWUgcmVxdWlyZWQ6IFwi JXNcIiBcIiVzXCJcbiIsCi0JCQkgICBhdG1idWYsCi0JCQkgICBjbWRidWYpOwotCQkgICAgcmV0 dXJuKC05KTsKLQkJfQotCSAgICB9IGVsc2UKLQkgICAgICByZXR1cm4oeSk7Ci0JfQotCWNrc3Ry bmNweSh0bXBidWYsYnJzdHJpcChzKSxUTVBCVUZTSVopOwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LQlzID0gdG1wYnVmOwotCWRlYnVnKEYxMTEsIkdPVE8gdGFyZ2V0IixzLGN4KTsKLQlyZXR1cm4o ZG9nb3RvKHMsY3gpKTsKLSAgICB9Ci0gICAgaWYgKGN4ID09IFhYRE8gfHwgY3ggPT0gWFhNQUNS TykgewkvKiBETyAoYSBtYWNybykgKi8KLQljaGFyIG1uYW1lYnVmWzE2XTsJCS8qIChidWZmZXIg Zm9yIGNvbnRyb2xsZWQgdGVtcCBuYW1lKSAqLwotCXN0cnVjdCBGREIga3csIGZsOwotCWludCBt eDsJCQkJLyogTWFjcm8gaW5kZXggKG9uIHN0YWNrISkgKi8KLQotCWRlYnVnKEYxMDEsIlhYTUFD Uk8gMCIsbGluZSxjeCk7Ci0JaWYgKGN4ID09IFhYRE8pIHsKLQkgICAgaWYgKG5tYWMgPT0gMCkg ewotCQlwcmludGYoIlxuP05vIG1hY3JvcyBkZWZpbmVkXG4iKTsKLQkJcmV0dXJuKC05KTsKLQkg ICAgfQotCSAgICBmb3IgKHkgPSAwOyB5IDwgbm1hYzsgeSsrKSB7IC8qIGNvcHkgdGhlIG1hY3Jv IHRhYmxlIGludG8gYSAqLwotCQltYWNrZXlbeV0ua3dkID0gbWFjdGFiW3ldLmt3ZDsgLyogcmVn dWxhciBrZXl3b3JkIHRhYmxlICovCi0JCW1hY2tleVt5XS5rd3ZhbCA9IHk7CS8qIHdpdGggdmFs dWUgPSBwb2ludGVyIHRvIG1hY3JvIHRibCAqLwotCQltYWNrZXlbeV0uZmxncyA9IG1hY3RhYlt5 XS5mbGdzOwotCSAgICB9Ci0JICAgIGNtZmRiaSgma3csCQkJLyogRmlyc3QgRkRCIC0gbWFjcm8g bmFtZSAqLwotCQkgICBfQ01LRVksCQkvKiBmY29kZSAqLwotCQkgICAiTWFjcm8iLAkJLyogaGxw bXNnICovCi0JCSAgICIiLAkJCS8qIGRlZmF1bHQgKi8KLQkJICAgIiIsCQkJLyogYWRkdGwgc3Ry aW5nIGRhdGEgKi8KLQkJICAgbm1hYywJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6 ZSAqLwotCQkgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiAwID0gY21rZXkgKi8KLQkJ ICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0JCSAgIG1hY2tleSwJCS8q IEtleXdvcmQgdGFibGUgKi8KLQkJICAgJmZsCQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwot CQkgICApOwotCSAgICBjbWZkYmkoJmZsLAkJCS8qIDJuZCBGREIgLSBmb3IgInsiICovCi0JCSAg IF9DTUZMRCwJCS8qIGZjb2RlICovCi0JCSAgICIiLAkJCS8qIGhscG1zZyAqLwotCQkgICAiIiwK LQkJICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkJICAgMCwJCQkvKiBhZGR0bCBu dW1lcmljIGRhdGEgMSAqLwotCQkgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0J CSAgIHh4c3RyaW5nLAotCQkgICBOVUxMLAotCQkgICBOVUxMCi0JCSAgICk7Ci0JICAgIHggPSBj bWZkYigma3cpOwkJLyogUGFyc2Ugc29tZXRoaW5nICovCi0JICAgIGlmICh4IDwgMCkgewkJLyog RXJyb3IgKi8KLQkJaWYgKHggPT0gLTMpIHsKLQkJICAgIHByaW50ZigiP01hY3JvIG5hbWUgcmVx dWlyZWRcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfSBlbHNlCi0JCSAgcmV0dXJuKHgpOwot CSAgICB9Ci0JICAgIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01LRVkpIHsKLQkJZXh0ZXJuIGlu dCBtdGNoYW5nZWQ7Ci0JCWNoYXIgKiBtYWNyb25hbWUgPSBOVUxMOwotCi0JICAgIC8qIEluIGNh c2UgYXJncyBpbmNsdWRlIGFuIFxmZXhlYygpIHRoYXQgY2hhbmdlcyB0aGUgbWFjcm8gdGFibGUg Ki8KLQotCQlteCA9IHg7CQkJLyogU2F2ZSBtYWNybyBpbmRleCBvbiBzdGFjayAqLwotCQltdGNo YW5nZWQgPSAwOwkJLyogTWFyayBzdGF0ZSBvZiBtYWNybyB0YWJsZSAqLwotCQltYWtlc3RyKCZt YWNyb25hbWUsbWFjdGFiW214XS5rd2QpOyAvKiBTYXZlIG5hbWUgKi8KLQotCQlpZiAoKHkgPSBj bXR4dCgib3B0aW9uYWwgYXJndW1lbnRzIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLQkJICByZXR1 cm4oeSk7CQkvKiBHZXQgbWFjcm8gYXJncyAqLwotCi0JCWlmIChtdGNoYW5nZWQpIHsJLyogTWFj cm8gdGFibGUgY2hhbmdlZD8gKi8KLQkJICAgIG14ID0gbWxvb2sobWFjdGFiLG1hY3JvbmFtZSxu bWFjKTsgLyogTG9vayB1cCBuYW1lIGFnYWluICovCi0JCX0KLQkJaWYgKG1hY3JvbmFtZSkKLQkJ ICBmcmVlKG1hY3JvbmFtZSk7Ci0KLQkJcmV0dXJuKGRvZG8obXgscyxjbWRzdGtbY21kbHZsXS5j Y2ZsZ3MpIDwgMSA/Ci0JCSAgICAgICAoc3VjY2VzcyA9IDApIDogMSk7Ci0JICAgIH0KLQkgICAg Y2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOwkvKiBfQ01GTEQgKi8K LQkgICAgaWYgKGF0bWJ1ZlswXSA9PSAneycpIHsKLQkJaWYgKCh5ID0gY21jZm0oKSkgPCAwKQot CQkgIHJldHVybih5KTsKLQkgICAgfQotCX0gZWxzZSB7CQkJLyogWFhNQUNSTyAoImltbWVkaWF0 ZSBtYWNybyIpICovCi0JICAgIGludCBrID0gMDsKLQkgICAgbGluZVtrKytdID0gJ3snOwotCSAg ICBsaW5lW2srK10gPSBTUDsKLQkgICAgbGluZVtrXSA9IE5VTDsKLQkgICAgZGVidWcoRjExMSwi WFhNQUNSTyBBIixsaW5lLGspOwotCSAgICBpZiAoKHkgPSBjbXR4dCgiQnJhY2VkIGxpc3Qgb2Yg Y29tbWFuZHMiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotCSAgICAgIHJldHVybih5KTsKLQkgICAg ayA9IGNrc3RybmNweShsaW5lK2sscyxMSU5CVUZTSVotayk7Ci0JICAgIGRlYnVnKEYxMTEsIlhY TUFDUk8gQiIsbGluZSxrKTsKLQl9Ci0JeCA9IHN0cmxlbihsaW5lKTsKLQlpZiAoKGxpbmVbMF0g PT0gJ3snICYmIGxpbmVbeC0xXSAhPSAnfScpIHx8IGxpbmVbMF0gPT0gJ30nKQotCSAgcmV0dXJu KC0yKTsKLQlpZiAobGluZVswXSAhPSAneycgJiYgbGluZVt4LTFdICE9ICd9JykgewotCSAgICAv KiBVbmtub3duIGNvbW1hbmQuICBJZiBPTl9VTktOT1dOX0NPTU1BTkQgbWFjcm8gaXMgZGVmaW5l ZCwgKi8KLQkgICAgLyogcGFyc2UgYXJncyBhbmQgdGhlbiBleGVjdXRlIGl0LCBidXQgb25seSBp ZiBpdCBpcyBub3QgKi8KLQkgICAgLyogYWxyZWFkeSBhY3RpdmUuICovCi0JICAgIGludCBrID0g LTE7Ci0JICAgIGlmICghdW5rbWFjcm8pIHsKLQkJayA9IG14bG9vayhtYWN0YWIsIm9uX3Vua25v d25fY29tbWFuZCIsbm1hYyk7Ci0JICAgIH0KLQkgICAgaWYgKGsgPiAtMSkgewotCQlja3N0cm5j cHkodG1wYnVmLGF0bWJ1ZixUTVBCVUZTSVopOwotCQl6ID0gbWFjbHZsOwkJLyogU2F2ZSB0aGUg Y3VycmVudCBtYWNsdmwgKi8KLQkJaWYgKCh5ID0gY210eHQoInRleHQiLCIiLCZzLHh4c3RyaW5n KSkgPCAwKQotCQkgIHJldHVybih5KTsKLQkJY2tzdHJuY2F0KHRtcGJ1ZiwiICIsVE1QQlVGU0la KTsKLQkJY2tzdHJuY2F0KHRtcGJ1ZixzLFRNUEJVRlNJWik7Ci0JCXVua21hY3JvID0gMTsKLQkJ ZGVidWcoRjExMCwiT05fVU5LTk9XTl9DT01NQU5EIixzLDApOwotCQlkb2RvKGssdG1wYnVmLGNt ZHN0a1tjbWRsdmxdLmNjZmxncyk7IC8qIFJ1biB0aGUgbWFjcm8gKi8KLQkJd2hpbGUgKG1hY2x2 bCA+IHopIHsKLQkJICAgIHNzdGF0ZSA9IChDSEFSKSBwYXJzZXIoMSk7Ci0JCSAgICBpZiAoc3N0 YXRlKSBwcm90bygpOwotCQl9Ci0JCWRlYnVnKEYxMDEsIlVOS01BQyBsb29wIGV4aXQgbWFjbHZs IiwiIixtYWNsdmwpOwotCQl1bmttYWNybyA9IDA7Ci0JCXJldHVybihzdWNjZXNzKTsKLQkgICAg fQotICAgICAgICAgICAgaWYgKHggPiAwKQotCSAgICAgIHByaW50ZigiP05vdCBhIGNvbW1hbmQg b3IgbWFjcm8gbmFtZTogXCIlc1wiXG4iLGxpbmUpOwotICAgICAgICAgICAgZWxzZQotCSAgICAg IHByaW50ZigiP05vdCBhIGNvbW1hbmQgb3IgbWFjcm8gbmFtZS5cbiIpOwotCSAgICByZXR1cm4o LTkpOwotCX0KLQlzID0gYnJzdHJpcChsaW5lKTsKLQlzcHJpbnRmKG1uYW1lYnVmLCIgLi50bXA6 JTAzZCIsY21kbHZsKTsJLyogc2FmZSAoMTYpICovCi0JeCA9IGFkZG1hYyhtbmFtZWJ1ZixzKTsK LQlyZXR1cm4oZG9kbyh4LE5VTEwsY21kc3RrW2NtZGx2bF0uY2NmbGdzKSA8IDEgPyAoc3VjY2Vz cyA9IDApIDogMSk7Ci0gICAgfQotCi0gICAgaWYgKGN4ID09IFhYTEJMKSB7CQkJLyogTEFCRUwg Ki8KLQlpZiAoKHggPSBjbWZsZCgibGFiZWwiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0JICAg IGlmICh4ID09IC0zKSB7Ci0jaWZkZWYgQ09NTUVOVAotCQlwcmludGYoIj9MQUJFTDogTGFiZWwg bmFtZSByZXF1aXJlZDogXCIlc1wiXG4iLCBjbWRidWYpOwotCQlyZXR1cm4oLTkpOwotI2Vsc2UK LQkJcyA9ICIiOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgfSBlbHNlIHJldHVybih4KTsK LQotCX0KLQlkZWJ1ZyhGMTExLCJMQUJFTCIscyx4KTsKLQlpZiAoKHggPSBjbWNmbSgpKSA8IDAp IHJldHVybih4KTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotCi0gICAgaWYgKGN4ID09IFhYRVZBTCB8 fCBjeCA9PSBYWF9FVkFMKSAvKiBfRVZBTFVBVEUsICBFVkFMVUFURSAgKi8KLSAgICAgIHJldHVy bihkb2V2YWwoY3gpKTsKLQotI2lmbmRlZiBOT1NFWFAKLSAgICBpZiAoY3ggPT0gWFhTRVhQKSB7 CQkJLyogTGlzcC1saWtlIFMtRXhwcmVzc2lvbiAqLwotCXN0cnVjdCBzdHJpbmdhcnJheSAqIHE7 Ci0JY2hhciAvKiAqcCwgKnIsICovICp0bXAsICptOwotCWludCBpLCBrLCBuLCBxdW90ZSA9IDAs IGNvbnRkID0gMCwgc2l6ZSA9IDAsIGxlbiA9IDA7Ci0JZXh0ZXJuIGludCBzZXhwcmMsIHNleHBw djsKLQotCXRtcCA9IHRtcGJ1ZjsJCQkvKiBCdWZmZXIgdG8gY29sbGVjdCBTRVhQICovCi0JdG1w YnVmWzBdID0gTlVMOwkJLyogQ2xlYXIgaXQgKi8KLQlzaXplID0gVE1QQlVGU0laOwkJLyogQ2Fw YWNpdHkgb2YgYnVmZmVyICovCi0Jc2V4cHJjID0gLTE7CQkJLyogQXNzdW1lIGJhZCBpbnB1dCAq LwotCW4gPSAwOwkJCQkvKiBQYXJlbiBiYWxhbmNlIGNvdW50ZXIgKi8KLQotCXdoaWxlICgxKSB7 CQkJLyogQWxsb3cgU0VYUCBvbiBtdWx0aXBsZSBsaW5lcyAqLwotCSAgICBtID0gY29udGQgPwot CSAgICAgICJDb250aW51YXRpb24gb2YgUy1FeHByZXNzaW9uIiA6Ci0JCSJTLUV4cHJlc3Npb24g KFwiaGVscCBzZXhwXCIgZm9yIGRldGFpbHMpIjsKLQkgICAgeCA9IGNtdHh0KG0sIiIsJnMseHhz dHJpbmcpOwotCSAgICBpZiAoeCA8IDApCi0JICAgICAgcmV0dXJuKHgpOwotCSAgICBpZiAoISpz KQkJCS8qIE5lZWRlZCBmb3IgKD0pIGFuZCAoOikgKi8KLQkgICAgICBzID0gY21kYnVmKzE7CQkv KiBJIGNhbid0IGV4cGxhaW4gd2h5LiAqLwotCSAgICBrID0gY2ttYWttc2codG1wLCBzaXplLCBj b250ZCA/ICIgIiA6ICIoIiwgcywgTlVMTCwgTlVMTCk7Ci0JICAgIGlmIChrIDwgMSkgewotCQlw cmludGYoIj9TRVhQIHRvbyBsb25nIC0gJWQgbWF4XG4iLFRNUEJVRlNJWik7Ci0JCXJldHVybigt OSk7Ci0JICAgIH0KLQkgICAgZGVidWcoRjExMSxjb250ZCA/ICJzZXhwIGNvbnRkIiA6ICJzZXhw IixzLGspOwotCi0JICAgIGZvciAoaSA9IGxlbjsgaSA8IGxlbitrOyBpKyspIHsgLyogQ2hlY2sg YmFsYW5jZSAgKi8KLQkJaWYgKCFxdW90ZSAmJiB0bXBidWZbaV0gPT0gQ01EUSkgewotCQkgICAg cXVvdGUgPSAxOwotCQkgICAgY29udGludWU7Ci0JCX0KLQkJaWYgKHF1b3RlKSB7Ci0JCSAgICBx dW90ZSA9IDA7Ci0JCSAgICBjb250aW51ZTsKLQkJfQotCQlpZiAodG1wYnVmW2ldID09ICcoJykK LQkJICBuKys7Ci0JCWVsc2UgaWYgKHRtcGJ1ZltpXSA9PSAnKScpCi0JCSAgbi0tOwotCSAgICB9 Ci0JICAgIGlmIChuID09IDApIHsJCS8qIEJyZWFrIHdoZW4gYmFsYW5jZWQgKi8KLQkJYnJlYWs7 Ci0JICAgIH0KLQkgICAgaWYgKG4gPCAwKSB7CQkvKiBUb28gbWFueSByaWdodCBwYXJlbnMgKi8K LQkJcHJpbnRmKCI/VW5iYWxhbmNlZCBTLUV4cHJlc3Npb246IFwiJXNcIlxuIix0bXBidWYpOwot CQlyZXR1cm4oLTkpOwotCSAgICB9Ci0JICAgIGNvbnRkKys7CQkJLyogTmVlZCBtb3JlIHJpZ2h0 IHBhcmVucyAqLwotCSAgICBjbWluaShja3hlY2gpOwkJLyogc28ga2VlcCBwYXJzaW5nICovCi0J ICAgIHRtcCArPSBrOwkJCS8qIGFkanVzdCBidWZmZXIgcG9pbnRlciAqLwotCSAgICBzaXplIC09 IGs7CQkJLyogYW5kIGNhcGFjaXR5ICovCi0JICAgIGxlbiArPSBrOwkJCS8qIGFuZCBsZW5ndGgg c28gZmFyICovCi0JfQotCXMgPSB0bXBidWY7Ci0JbWFrZXN0cigmbGFzdHNleHAscyk7Ci0JcSA9 IGNrc3BsaXQoMSxTRVhQTUFYLHMsTlVMTCxOVUxMLDgsMCwwKTsgLyogUHJlY2hlY2sgZm9yID4g MSBTRVhQICovCi0JZGVidWcoRjEwMSwic2V4cCBzcGxpdCIsIiIscS0+YV9zaXplKTsKLQotCWlm IChxLT5hX3NpemUgPT0gMSkgewkJLyogV2Ugc2hvdWxkIGdldCBleGFjdGx5IG9uZSBiYWNrICov Ci0JICAgIGNoYXIgKiByZXN1bHQsICogZG9zZXhwKCk7Ci0JICAgIHNleHByYyA9IDA7CQkJLyog UmVzZXQgb3V0LW9mLWJhbmQgcmV0dXJuIGNvZGUgKi8KLQkgICAgcmVzdWx0ID0gZG9zZXhwKHMp OwkJLyogR2V0IHJlc3VsdCAqLwotCSAgICBkZWJ1ZyhGMTExLCJzZXhwIHJlc3VsdCIscmVzdWx0 LHNleHByYyk7Ci0JICAgIGlmIChzZXhwcmMgPT0gMCkgewkJLyogU3VjY2VzcyAqLwotCQkvKiBF Y2hvIHRoZSByZXN1bHQgaWYgZGVzaXJlZCAqLwotCQlpZiAoKCF4Y21kc3JjICYmIHNleHBlY2hv ICE9IFNFVF9PRkYpIHx8IHNleHBlY2hvID09IFNFVF9PTikKLQkJICBwcmludGYoIiAlc1xuIixy ZXN1bHQgPyByZXN1bHQgOiAiIik7Ci0JCW1ha2VzdHIoJnNleHB2YWwscmVzdWx0KTsKLQkJc3Vj Y2VzcyA9IHNleHBwdiA+IC0xID8gc2V4cHB2IDogMTsKLQkJcmV0dXJuKHN1Y2Nlc3MpOwotCSAg ICB9Ci0JfQotCWlmIChzZXhwcmMgPCAwKQotCSAgcHJpbnRmKCI/SW52YWxpZCBTLUV4cHJlc3Np b246IFwiJXNcIlxuIixsYXN0c2V4cCk7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0jZW5kaWYgLyog Tk9TRVhQICovCi0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgaWYgKGN4ID09IFhYRUNIIHx8 IGN4ID09IFhYWEVDSCB8fCBjeCA9PSBYWFZPSUQKLSNpZm5kZWYgTk9TUEwKLQl8fCBjeCA9PSBY WEFQQwotI2VuZGlmIC8qIE5PU1BMICovCi0JKSB7CQkJCS8qIEVDSE8gb3IgQVBDICovCi0JaWYg KCh4ID0gY210eHQoKGN4ID09IFhYRUNIIHx8IGN4ID09IFhYWEVDSCkgPwotCQkgICAgICAgIlRl eHQgdG8gYmUgZWNob2VkIiA6Ci0JCSAgICAgICAoKGN4ID09IFhYVk9JRCkgPyAiVGV4dCIgOgot CQkJIkFwcGxpY2F0aW9uIFByb2dyYW0gQ29tbWFuZCB0ZXh0IiksCi0JCSAgICAgICAiIiwKLQkJ ICAgICAgICZzLAotCQkgICAgICAgeHhzdHJpbmcKLQkJICAgICAgICkKLQkgICAgICkgPCAwKQot CSAgcmV0dXJuKHgpOwotCWlmICghcykgcyA9ICIiOwotI2lmZGVmIENPTU1FTlQKLS8qIFRoaXMg aXMgdG8gcHJlc2VydmUgdGhlIHByZS04LjAgYmVoYXZpb3IgYnV0IGl0J3MgdG9vIGNvbmZ1c2lu ZyAqLwotCXggPSBzdHJsZW4ocyk7Ci0JeCA9ICh4ID4gMSkgPyAoKHNbMF0gPT0gJyInICYmIHNb eC0xXSA9PSAnIicpID8gMSA6IDApIDogMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JcyA9IGJy c3RyaXAocyk7CQkJLyogU3RyaXAgYnJhY2VzIGFuZCBkb3VibGVxdW90ZXMgKi8KLQlpZiAoY3gg PT0gWFhFQ0gpIHsJCS8qIEVDSE8gKi8KLSNpZm5kZWYgTk9TUEwKLQkgICAgaWYgKCFmbmRpYWdz IHx8IGZuc3VjY2VzcykgewotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZkZWYgQ09NTUVOVAotCQkv KiBUaGUgImlmICh4KSIgYnVzaW5lc3MgcHJlc2VydmVzIHByZXZpb3VzIGJlaGF2aW9yICovCi0J CS8qIGJ5IHB1dHRpbmcgYmFjayB0aGUgZG91YmxlcXVvdGVzIGlmIHRoZXkgd2VyZSBpbmNsdWRl ZC4gKi8KLQkJaWYgKHgpCi0JCSAgcHJpbnRmKCJcIiVzXCJcbiIscyk7Ci0JCWVsc2UKLSNlbmRp ZiAvKiBDT01NRU5UICovCi0JCSAgcHJpbnRmKCIlc1xuIixzKTsKLSNpZm5kZWYgTk9TUEwKLQkg ICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0JfSBlbHNlIGlmIChjeCA9PSBYWFhFQ0gpIHsJLyog WEVDSE8gKi8KLQkgICAgaWYgKHgpCi0JICAgICAgcHJpbnRmKCJcIiVzXCIiLHMpOwotCSAgICBl bHNlCi0JICAgICAgcHJpbnRmKCIlcyIscyk7Ci0jaWZkZWYgVU5JWAotCSAgICBmZmx1c2goc3Rk b3V0KTsKLSNlbmRpZiAvKiBVTklYICovCi0JfSBlbHNlIGlmIChjeCA9PSBYWEFQQykgewkvKiBB UEMgKi8KLSNpZmRlZiBDS19BUEMKLQkgICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwgfHwK LQkJKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKSkK LQkgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENLX0FQQyAqLwotCSAgICBp ZiAoIWxvY2FsKSB7Ci0JCXByaW50ZigiJWNfJXMlY1xcIixFU0MscyxFU0MpOwotI2lmZGVmIFVO SVgKLQkJZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogVU5JWCAqLwotCi0JICAgIH0gZWxzZSB7 CQkJLyogTG9jYWwgbW9kZSAtIGhhdmUgY29ubmVjdGlvbiAqLwotI2lmbmRlZiBOT1NQTAotCQlp ZiAoY2ttYWt4bXNnKHRtcGJ1ZiwJLyogRm9ybSBBUEMgc3RyaW5nIGluIGJ1ZmZlciAqLwotCQkJ ICAgICAgVE1QQlVGU0laLAotCQkJICAgICAgY2tjdG9hKChjaGFyKUVTQyksCi0JCQkgICAgICBj a2N0b2EoJ18nKSwKLQkJCSAgICAgIHMsCi0JCQkgICAgICBja2N0b2EoKGNoYXIpRVNDKSwKLQkJ CSAgICAgIGNrY3RvYSgnXFwnKSwKLQkJCSAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwKLQkJCSAgICAgICkgPiAwKQotCQkgIHJldHVybihzdWNjZXNzID0gZG9vdXRwdXQo dG1wYnVmLCBYWE9VVCkpOwotCQlwcmludGYoIj9Ub28gbG9uZ1xuIik7Ci0JCXJldHVybigtOSk7 Ci0jZWxzZQotCQlwcmludGYoIiVjXyVzJWNcXCIsRVNDLHMsRVNDKTsKLSNlbmRpZiAvKiBOT1NQ TCAqLwotCSAgICB9Ci0JfQotCXJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgfQotCi0jaWZuZGVm IE5PU1BMCi0vKiBDb3B5IG1hY3JvIGFyZ3MgZnJvbS90byB0d28gbGV2ZWxzIHVwLCB1c2VkIGlu dGVybmFsbHkgYnkgX2Zsb29wIGV0IGFsLiAqLwotICAgIGlmIChjeCA9PSBYWEdUQSB8fCBjeCA9 PSBYWFBUQSkgewkvKiBfR0VUQVJHUywgX1BVVEFSR1MgKi8KLQlpbnQgeDsKLQlkZWJ1ZyhGMTAx LCJkb2NtZCBYWEdUQSIsIiIsWFhHVEEpOwotCWRlYnVnKEYxMDEsImRvY21kIGN4IiwiIixjeCk7 Ci0JZGVidWcoRjEwMSwiZG9jbWQgWFhHVEEgbWFjbHZsIiwiIixtYWNsdmwpOwotCXggPSBkb2d0 YShjeCk7Ci0JZGVidWcoRjEwMSwiZG9jbWQgZG9ndGEgcmV0dXJucyIsIiIseCk7Ci0JZGVidWco RjEwMSwiZG9jbWQgZG9ndGEgbWFjbHZsIiwiIixtYWNsdmwpOwotCXJldHVybih4KTsKLSAgICB9 Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1NQTAotI2lmZGVmIENLQ0hBTk5FTElP Ci0gICAgaWYgKGN4ID09IFhYRklMRSkKLSAgICAgIHJldHVybihkb2ZpbGUoY3gpKTsKLSAgICBl bHNlIGlmIChjeCA9PSBYWEZfUkUgfHwgY3ggPT0gWFhGX1dSIHx8IGN4ID09IFhYRl9PUCB8fAot CSAgICAgY3ggPT0gWFhGX0NMIHx8IGN4ID09IFhYRl9TRSB8fCBjeCA9PSBYWEZfUlcgfHwKLQkg ICAgIGN4ID09IFhYRl9GTCB8fCBjeCA9PSBYWEZfTEkgfHwgY3ggPT0gWFhGX1NUIHx8IGN4ID09 IFhYRl9DTykKLSAgICAgIHJldHVybihkb2ZpbGUoY3gpKTsKLSNlbmRpZiAvKiBDS0NIQU5ORUxJ TyAqLwotCi0vKiBBU0ssIEFTS1EsIFJFQUQgKi8KLSAgICBpZiAoY3ggPT0gWFhBU0sgIHx8IGN4 ID09IFhYQVNLUSB8fCBjeCA9PSBYWFJFQSB8fAotCWN4ID09IFhYUkRCTCB8fCBjeCA9PSBYWEdF VEMgfHwgY3ggPT0gWFhHRVRLKSB7Ci0JcmV0dXJuKGRvYXNrKGN4KSk7Ci0gICAgfQotI2VuZGlm IC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9GUklMTFMKLSNpZm5kZWYgTk9IRUxQCi0gICAgaWYg KGN4ID09IFhYQlVHKSB7CQkJLyogQlVHICovCi0JaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeCk7Ci0JcmV0dXJuKGRvYnVnKCkpOwotICAgIH0KLSNlbmRpZgkvKiBOT0hFTFAgKi8KLSNl bmRpZgkvKiBOT0ZSSUxMUyAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIGlmIChjeCA9PSBYWEJZ RSkgewkJCS8qIEJZRSAqLwotCWV4dGVybiBpbnQgZnRwX2NtZGxpbjsKLQlpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKLQotI2lmZGVmIE5FV0ZUUAotCWlmICgoZnRwZ2V0ID09IDEp IHx8ICgoZnRwZ2V0ID09IDIpICYmIGZ0cGlzb3BlbigpKSkgewotCSAgICBleHRlcm4gaW50IHN0 YXlmbGcsIGZ0cF9mYWk7Ci0JICAgIHN1Y2Nlc3MgPSBmdHBieWUoKTsKLQkgICAgaWYgKGZ0cF9j bWRsaW4gJiYgIXN0YXlmbGcgJiYgIWxvY2FsKQotCSAgICAgIGRvZXhpdChmdHBfZmFpID8gQkFE X0VYSVQgOiBHT09EX0VYSVQsLTEpOwotCSAgICBlbHNlCi0JICAgICAgcmV0dXJuKHN1Y2Nlc3Mp OwotCX0KLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotCWlmICghbG9jYWwpIHsKLQkgICAgcHJpbnRm KCI/Tm8gY29ubmVjdGlvbiAtIHVzZSBFWElUIHRvIHF1aXQuXG4iKTsKLQkgICAgcmV0dXJuKC05 KTsKLQl9Ci0KLSNpZmRlZiBDS19YWVoKLQlpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgewotCSAg ICBwcmludGYoIj9Tb3JyeSwgQllFIG9ubHkgd29ya3Mgd2l0aCBLZXJtaXQgcHJvdG9jb2xcbiIp OwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAvKiBDS19YWVogKi8KLQotI2lmZGVmIElL U19PUFRJT04KLSAgICAgICAgaWYgKAotI2lmZGVmIENLX1hZWgotICAgICAgICAgICAgcHJvdG9j b2wgPT0gUFJPVE9fSyAmJgotI2VuZGlmIC8qIENLX1hZWiAqLwotICAgICAgICAgICAgIWlrc193 YWl0KEtFUk1JVF9SRVFfU1RBUlQsMSkpIHsKLQkgICAgcHJpbnRmKAotCSAgICAgIj9BIEtlcm1p dCBTZXJ2ZXIgaXMgbm90IGF2YWlsYWJsZSB0byBwcm9jZXNzIHRoaXMgY29tbWFuZFxuIik7Ci0J ICAgIHJldHVybigtOSk7CQkJLyogQ29ycmVjdCB0aGUgcmV0dXJuIGNvZGUgKi8KLSAgICAgICAg fQotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLQotCWJ5ZV9hY3RpdmUgPSAxOwotCXNzdGF0ZSA9 IHNldGdlbignTCcsIiIsIiIsIiIpOwotCWlmIChsb2NhbCkgdHRmbHVpKCk7CQkvKiBJZiBsb2Nh bCwgZmx1c2ggdHR5IGlucHV0IGJ1ZmZlciAqLwotCXJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYg LyogTk9YRkVSICovCi0KLSAgICBpZiAoY3ggPT0gWFhCRUVQKSB7CQkJLyogQkVFUCAqLwotICAg ICAgICBpbnQgeDsKLSNpZmRlZiBPUzIKLQlpbnQgeTsKLSAgICAgICAgaWYgKCh5ID0gY21rZXko YmVlcHRhYiwgbmJlZXB0YWIsICJ3aGljaCBraW5kIG9mIGJlZXAiLCAiaW5mb3JtYXRpb24iLAot CQkgICAgICAgeHhzdHJpbmcpKSA8IDAgKQotCSAgcmV0dXJuICh5KTsKLSAgICAJaWYgKCh4ID0g Y21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGJsZWVwKChzaG9ydCl5KTsJCS8qIHkg aXMgb25lIG9mIHRoZSBCUF8gdmFsdWVzICovCi0jZWxzZSAgLyogT1MyICovCi0gICAgCWlmICgo eCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotI2lmbmRlZiBOT1NQTAotICAgICAgICBibGVl cChCUF9OT1RFKTsKLSNlbHNlCi0JcHV0Y2hhcignXDA3Jyk7Ci0jZW5kaWYgLyogTk9TUEwgKi8K LSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotI2lmbmRlZiBO T0ZSSUxMUwotICAgIGlmIChjeCA9PSBYWENMRSkJCQkvKiBDTEVBUiAqLwotICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSBkb2NsZWFyKCkpOwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSAgICBpZiAo Y3ggPT0gWFhDT00pIHsJCQkvKiBDT01NRU5UICovCi0JaWYgKCh4ID0gY210eHQoIlRleHQgb2Yg Y29tbWVudCBsaW5lIiwiIiwmcyxOVUxMKSkgPCAwKQotCSAgcmV0dXJuKHgpOwotCS8qIERvbid0 IGNoYW5nZSBTVUNDRVNTIGZsYWcgZm9yIHRoaXMgb25lICovCi0JcmV0dXJuKDApOwotICAgIH0K LQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgaWYgKGN4ID09IFhYQ09OIHx8IGN4ID09IFhYQ1EpCS8q IENPTk5FQ1Qgb3IgQ09OTkVDVCAvUVVJRVRMWSAqLwotICAgICAgcmV0dXJuKGRveGNvbm4oY3gp KTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9GUklMTFMKLSNpZmRlZiBaQ09Q WQotICAgIGlmIChjeCA9PSBYWENQWSkgewkJCS8qIENPUFkgYSBmaWxlICovCi0jaWZkZWYgSUtT RAotCWlmIChpbnNlcnZlciAmJiAhRU5BQkxFRChlbl9jcHkpKSB7Ci0JICAgIHByaW50ZigiP1Nv cnJ5LCBDT1BZIGlzIGRpc2FibGVkXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0jZW5kaWYg LyogSUtTRCAqLwotI2lmZGVmIENLX0FQQwotCWlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8 Ci0JICAgIChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSAmJiAhKGFwY3N0YXR1cyAmIEFQQ19VTkNI KSkKLQkgICAgKQotCSAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBDS19BUEMgKi8K LQlyZXR1cm4oZG9jb3B5KCkpOwotICAgIH0KLSNlbmRpZiAvKiBaQ09QWSAqLwotI2lmZGVmIE5U Ci0gICAgaWYgKCBjeCA9PSBYWExJTksgKSB7Ci0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5z ZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fY3B5KSkgewotICAgICAgICAgICAgcHJpbnRmKCI/U29ycnks IExJTksgKENPUFkpIGlzIGRpc2FibGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0g ICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgQ0tfQVBDCi0gICAgICAgIGlmIChh cGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8Ci0gICAgICAgICAgICAoYXBjYWN0aXZlID09IEFQQ19S RU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpCi0gICAgICAgICAgICApCi0gICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLSAgICAgICAgcmV0 dXJuKGRvbGluaygpKTsKLSAgICB9Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBOT0ZSSUxM UyAqLwotCi0gICAgLyogQ0QgYW5kIGZyaWVuZHMgKi8KLSAgICBpZiAoY3ggPT0gWFhDV0QgIHx8 IGN4ID09IFhYQ0RVUCB8fCBjeCA9PSBYWEJBQ0sgfHwKLQljeCA9PSBYWExDV0QgfHwgY3ggPT0g WFhMQ0RVIHx8IGN4ID09IFhYS0NEKSB7Ci0jaWZkZWYgTE9DVVMKLQlpZiAoIWxvY3VzKSB7Ci0J ICAgIGlmIChjeCA9PSBYWENXRCkgewotI2lmZGVmIE5PWEZFUgotICAgICAgICAgICAgICAgIHJl dHVybigtMik7Ci0jZWxzZQotICAgICAgICAgICAgICAgIHJldHVybihkb3JtdChYWkNXRCkpOwot I2VuZGlmIC8qIE5PWEZFUiAqLwotCSAgICB9IGVsc2UgaWYgKGN4ID09IFhYQ0RVUCkgewotI2lm ZGVmIE5PWEZFUgotICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0jZWxzZQotICAgICAgICAg ICAgICAgIHJldHVybihkb3JtdChYWkNEVSkpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAg ICAgICAgfQotCX0KLSNlbmRpZiAvKiBMT0NVUyAqLwotI2lmZGVmIElLU0QKLQlpZiAoaW5zZXJ2 ZXIgJiYgIUVOQUJMRUQoZW5fY3dkKSkgewotCSAgICBwcmludGYoIj9Tb3JyeSwgY2hhbmdpbmcg ZGlyZWN0b3JpZXMgaXMgZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRp ZiAvKiBJS1NEICovCi0JcmV0dXJuKHN1Y2Nlc3MgPSBkb2NkKGN4KSk7Ci0gICAgfQotCi0gICAg aWYgKGN4ID09IFhYQ0hLKQkJCS8qIENIRUNLICovCi0gICAgICByZXR1cm4oc3VjY2VzcyA9IGRv Y2hrKCkpOwotCi0gICAgaWYgKGN4ID09IFhYQ0xPKSB7CQkJLyogQ0xPU0UgKi8KLQl4ID0gY21r ZXkoY2xzdGFiLG5jbHMsIlwiQ09OTkVDVElPTlwiLCBvciBsb2cgb3IgZmlsZSB0byBjbG9zZSIs Ci0JCSAgImNvbm5lY3Rpb24iLHh4c3RyaW5nKTsKLQlpZiAoeCA9PSAtMykgewotCSAgICBwcmlu dGYoIj9Zb3UgbXVzdCBzYXkgd2hpY2ggZmlsZSBvciBsb2dcbiIpOwotCSAgICByZXR1cm4oLTkp OwotCX0KLQlpZiAoeCA8IDApIHJldHVybih4KTsKLQlpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJl dHVybih5KTsKLSNpZm5kZWYgTk9MT0NBTAotCWlmICh4ID09IDk5OTkpIHsJCS8qIENMT1NFIENP Tk5FQ1RJT04gKi8KLQkgICAgeCA9IGNsc2Nvbm54KDApOwotCSAgICBzd2l0Y2ggKHgpIHsKLQkg ICAgICBjYXNlIDA6Ci0JCWlmIChtc2dmbGcpIHByaW50ZigiP0Nvbm5lY3Rpb24gd2FzIG5vdCBv cGVuXG4iKTsKLQkgICAgICBjYXNlIC0xOgotCQlyZXR1cm4oMCk7Ci0JICAgICAgY2FzZSAxOgot CQl3aHljbG9zZWQgPSBXQ19DTE9TOwotCQlyZXR1cm4oMSk7Ci0JICAgIH0KLQkgICAgcmV0dXJu KDApOwotCX0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0JeSA9IGRvY2xzbG9nKHgpOwotCXN1Y2Nl c3MgPSAoeSA9PSAxKTsKLQlyZXR1cm4oc3VjY2Vzcyk7Ci0gICAgfQotCi0jaWZuZGVmIE5PU1BM Ci0gICAgaWYgKGN4ID09IFhYRENMIHx8IGN4ID09IFhYVU5EQ0wpIHsJLyogREVDTEFSRSBhbiBh cnJheSAqLwotCXJldHVybihkb2RjbChjeCkpOwotICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwot Ci0jaWZuZGVmIE5PRElBTAotICAgIGlmIChjeCA9PSBYWFJFRCAgfHwgY3ggPT0gWFhESUFMIHx8 IGN4ID09IFhYUERJQSB8fAotCWN4ID09IFhYQU5TVyB8fCBjeCA9PSBYWExPT0spIHsgLyogRElB TCwgUkVESUFMIGV0YyAqLwotI2lmZGVmIFZNUwotCWV4dGVybiBpbnQgYmF0Y2g7Ci0jZWxzZQot I2lmZGVmIFVOSVhPUk9TSwotCWV4dGVybiBpbnQgYmFja2dyZDsKLSNlbmRpZiAvKiBVTklYT1JP U0sgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQl4ID0gZG9kaWFsKGN4KTsKLQlkZWJ1ZyhGMTAxLCJk b2RpYWwgcmV0dXJucyIsIiIseCk7Ci0JaWYgKChjeCA9PSBYWERJQUwgfHwgY3ggPT0gWFhSRUQg fHwgY3ggPT0gWFhBTlNXKSAmJgotCSAgICAoeCA+IDApICYmCQkJLyogSWYgRElBTCBvciBSRURJ QUwgc3VjY2VlZGVkICovCi0JICAgIChkaWFsc3RhICE9IERJQV9QQVJUKSAmJgkvKiBhbmQgaXQg d2Fzbid0IHBhcnRpYWwgKi8KLQkgICAgKGRpYWxjb24gPiAwKSkgewotCSAgICBpZiAoKGRpYWxj b24gPT0gMSB8fAkvKiBBbmQgRElBTCBDT05ORUNUIGlzIE9OLCAqLwotCQkoKGRpYWxjb24gPT0g MikgJiYJLyogb3IgRElBTCBDT05ORUNUIGlzIEFVVE8gKi8KLQkJICF4Y21kc3JjCQkvKiBhbmQg d2UncmUgYXQgdG9wIGxldmVsLi4uICovCi0jaWZkZWYgVk1TCi0JCSAmJiAhYmF0Y2gJCS8qIE5v dCBpZiBydW5uaW5nIGZyb20gYmF0Y2ggKi8KLSNlbHNlCi0jaWZkZWYgVU5JWE9ST1NLCi0JCSAm JiAhYmFja2dyZAkJLyogTm90IGlmIHJ1bm5pbmcgaW4gYmFja2dyb3VuZCAqLwotI2VuZGlmIC8q IFVOSVhPUk9TSyAqLwotI2VuZGlmIC8qIFZNUyAqLwotCQkgKSkpIC8qIE9yIEFVVE8gKi8KLQkg ICAgICB4ID0gZG9jb25lY3QoZGlhbGNxLAkvKiBUaGVuIGFsc28gQ09OTkVDVCAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgY21kbHZsID09IDAgPyAxIDogMAotCQkJICAgKTsKLQkgICAg aWYgKHR0Y2hrKCkgPCAwKQotCSAgICAgIGRvbG9nZW5kKCk7Ci0JfQotCXJldHVybihzdWNjZXNz ID0geCk7Ci0gICAgfQotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0jaWZuZGVmIE5PUFVTSAotI2lm ZGVmIENLX1JFWFgKLSAgICBpZiAoY3ggPT0gWFhSRVhYKSB7CQkJLyogUkVYWCAqLwotICAgICAg ICBleHRlcm4gaW50IG5vcHVzaDsKLSAgICAgICAgaWYgKCBub3B1c2ggKQotICAgICAgICAgIHJl dHVybihzdWNjZXNzPTApOwotICAgICAgICByZXR1cm4oZG9yZXh4KCkpOwotICAgIH0KLSNlbmRp ZiAvKiBDS19SRVhYICovCi0jZW5kaWYgLyogTk9QVVNIICovCi0KLSNpZm5kZWYgTk9GUklMTFMK LSAgICBpZiAoY3ggPT0gWFhERUwgfHwgY3ggPT0gWFhMREVMKSB7CS8qIERFTEVURSAqLwotI2lm ZGVmIExPQ1VTCi0JaWYgKCFsb2N1cyAmJiBjeCAhPSBYWExERUwpIHsKLSNpZmRlZiBOT1hGRVIK LQkgICAgcmV0dXJuKC0yKTsKLSNlbHNlCi0JICAgIHJldHVybihkb3JtdChYWkRFTCkpOwotI2Vu ZGlmIC8qIE5PWEZFUiAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogTE9DVVMgKi8KLSNpZmRlZiBJ S1NECi0JaWYgKGluc2VydmVyICYmICghRU5BQkxFRChlbl9kZWwpCi0jaWZkZWYgQ0tfTE9HSU4K LQkJCSB8fCBpc2d1ZXN0Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQkJCSApKSB7Ci0JICAgIHBy aW50ZigiP1NvcnJ5LCBERUxFVEUgaXMgZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwot CX0KLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgQ0tfQVBDCi0JaWYgKChhcGNhY3RpdmUgPT0g QVBDX0xPQ0FMKSB8fAotCSAgICAoKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFKSAmJiAoIShhcGNz dGF0dXMgJiBBUENfVU5DSCkpKSkKLQkgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyog Q0tfQVBDICovCi0JcmV0dXJuKGRvZGVsKCkpOwotICAgIH0KLSNlbmRpZiAvKiBOT0ZSSUxMUyAq LwotCi0gICAgaWYgKGN4ID09IFhYVE9VQykJCQkvKiBUT1VDSCAqLwotICAgICAgcmV0dXJuKGRv ZGlyKGN4KSk7Ci0KLSAgICAvKiBESVJFQ1RPUlkgY29tbWFuZHMgKi8KLQotICAgIGlmIChjeCA9 PSBYWERJUiAgfHwgY3ggPT0gWFhMUyB8fCBjeCA9PSBYWExESVIgfHwKLQljeCA9PSBYWFdESVIg fHwgY3ggPT0gWFhIRElSKSB7Ci0jaWZkZWYgTE9DVVMKLQlpZiAoIWxvY3VzICYmIGN4ICE9IFhY TERJUikgewotI2lmZGVmIE5PWEZFUgotCSAgICByZXR1cm4oLTIpOwotI2Vsc2UKLQkgICAgcmV0 dXJuKGRvcm10KFhaRElSKSk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgICAgIH0KLSNlbmRp ZiAvKiBMT0NVUyAqLwotI2lmZGVmIElLU0QKLQlpZiAoaW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5f ZGlyKSkgewotCSAgICBwcmludGYoIj9Tb3JyeSwgRElSRUNUT1JZIGlzIGRpc2FibGVkXG4iKTsK LQkgICAgcmV0dXJuKC05KTsKLQl9Ci0jZW5kaWYgLyogSUtTRCAqLwotCXJldHVybihkb2Rpcihj eCkpOwotICAgIH0KLQotI2lmbmRlZiBOT1NQTAotICAgIGlmIChjeCA9PSBYWEVMUykJCQkvKiBF TFNFICovCi0gICAgICByZXR1cm4oZG9lbHNlKCkpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNp Zm5kZWYgTk9TRVJWRVIKLSNpZm5kZWYgTk9GUklMTFMKLSAgICBpZiAoY3ggPT0gWFhFTkEgfHwg Y3ggPT0gWFhESVMpIHsJLyogRU5BQkxFLCBESVNBQkxFICovCi0JcyA9IChjeCA9PSBYWEVOQSkg PwotCSAgIlNlcnZlciBmdW5jdGlvbiB0byBlbmFibGUiIDoKLQkgICAgIlNlcnZlciBmdW5jdGlv biB0byBkaXNhYmxlIjsKLQotCWlmICgoeCA9IGNta2V5KGVuYXRhYixuZW5hLHMsIiIseHhzdHJp bmcpKSA8IDApIHsKLQkgICAgaWYgKHggPT0gLTMpIHsKLQkJcHJpbnRmKCI/TmFtZSBvZiBzZXJ2 ZXIgZnVuY3Rpb24gcmVxdWlyZWRcbiIpOwotCQlyZXR1cm4oLTkpOwotCSAgICB9IGVsc2UgcmV0 dXJuKHgpOwotCX0KLQlpZiAoKHkgPSBjbWtleShrbXN0YWIsMywibW9kZSIsImJvdGgiLHh4c3Ry aW5nKSkgPCAwKSB7Ci0JICAgIGlmICh5ID09IC0zKSB7Ci0JCXByaW50ZigiP1BsZWFzZSBzcGVj aWZ5IHJlbW90ZSwgbG9jYWwsIG9yIGJvdGhcbiIpOwotCQlyZXR1cm4oLTkpOwotCSAgICB9IGVs c2UgcmV0dXJuKHkpOwotCX0KLQlpZiAoY3ggPT0gWFhESVMpCQkvKiBEaXNhYmxpbmcsIG5vdCBl bmFibGluZyAqLwotCSAgeSA9IDMgLSB5OwotCWlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHopOwotI2lmZGVmIENLX0FQQwotCWlmICgoYXBjYWN0aXZlID09IEFQQ19MT0NBTCkgfHwKLQkg ICAgKChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSkgJiYgKCEoYXBjc3RhdHVzICYgQVBDX1VOQ0gp KSkpCi0JICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENLX0FQQyAqLwotI2lmZGVm IElLU0QKLSAgICAgICAgLyogVGhpcyBtYXkgc2VlbSBsaWtlIGl0IGR1cGxpY2F0ZXMgdGhlIHdv cmsgaW4gZG9lbmFibGUoKSAgKi8KLSAgICAgICAgLyogYnV0IHRoaXMgY29kZSByZXR1cm5zIGZh aWx1cmUgd2hlcmVhcyBkb2VuYWJsZSgpIHJldHVybnMgKi8KLSAgICAgICAgLyogc3VjY2Vzcy4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAg ICAgaWYgKGluc2VydmVyICYmCi0jaWZkZWYgSUtTRENPTkYKLSAgICAgICAgICAgIGlrc2RjZiAm JgotI2VuZGlmIC8qIElLU0RDT05GICovCi0gICAgICAgICAgICAoeCA9PSBFTl9IT1MgfHwgeCA9 PSBFTl9QUkkgfHwgeCA9PSBFTl9NQUkgfHwgeCA9PSBFTl9XSE8gfHwKLSAgICAgICAgICAgICAg aXNndWVzdCkpCi0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIElL U0QgKi8KLQlyZXR1cm4oZG9lbmFibGUoeSx4KSk7Ci0gICAgfQotI2VuZGlmIC8qIE5PRlJJTExT ICovCi0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgIGlmIChjeCA9 PSBYWFJFVCkgewkJCS8qIFJFVFVSTiAqLwotCWlmICgoeCA9IGNtdHh0KCJPcHRpb25hbCByZXR1 cm4gdmFsdWUiLCIiLCZzLE5VTEwpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0JcyA9IGJyc3RyaXAo cyk7CQkJLyogU3RyaXAgYnJhY2VzICovCi0JaWYgKGNtZGx2bCA9PSAwKQkJLyogQXQgdG9wIGxl dmVsLCBub3RoaW5nIGhhcHBlbnMuLi4gKi8KLQkgIHJldHVybihzdWNjZXNzID0gMSk7Ci0Jc3dp dGNoIChjbWRzdGtbY21kbHZsXS5zcmMpIHsJLyogQWN0aW9uIGRlcGVuZHMgb24gY29tbWFuZCBz b3VyY2UgKi8KLQkgIGNhc2UgQ01EX1RGOgkJCS8qIENvbW1hbmQgZmlsZSAqLwotCSAgICBwb3Bj bHZsKCk7CQkJLyogUG9wIGNvbW1hbmQgbGV2ZWwgKi8KLQkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsJLyogYWx3YXlzIHN1Y2NlZWRzICovCi0JICBjYXNlIENNRF9NRDoJCQkvKiBNYWNybyAqLwot CSAgY2FzZSBDTURfS0I6CQkJLyogUHJvbXB0ICovCi0JICAgIHJldHVybihkb3JldHVybihzKSk7 CS8qIFRyYWlsaW5nIHRleHQgaXMgcmV0dXJuIHZhbHVlLiAqLwotCSAgZGVmYXVsdDoJCQkvKiBT aG91bGRuJ3QgaGFwcGVuICovCi0JICAgIHJldHVybigtMik7Ci0JfQotICAgIH0KLSNlbmRpZiAv KiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGN4ID09IFhYT1BFKQkJCS8qIE9Q RU4gKi8KLSAgICAgIHJldHVybihkb29wZW4oKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lm bmRlZiBOT1NQTAotICAgIGlmIChjeCA9PSBYWE9VVCB8fCBjeCA9PSBYWExOT1VUKSB7CS8qIE9V VFBVVCBvciBMSU5FT1VUICovCi0JaWYgKCh4ID0gY210eHQoIlRleHQgdG8gYmUgb3V0cHV0Iiwi IiwmcyxOVUxMKSkgPCAwKQotCSAgcmV0dXJuKHgpOwotI2lmZGVmIENLX0FQQwotCWlmICgoYXBj YWN0aXZlID09IEFQQ19MT0NBTCkgfHwKLQkgICAgKChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSkg JiYgKCEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKSkpCi0JICByZXR1cm4oc3VjY2VzcyA9IDApOwot I2VuZGlmIC8qIENLX0FQQyAqLwotCWRlYnVnKEYxMTAsIk9VVFBVVCAxIixzLDApOwotCXMgPSBi cnN0cmlwKHMpOwkJCS8qIFN0cmlwIGVuY2xvc2luZyBicmFjZXMsICovCi0JZGVidWcoRjExMCwi T1VUUFVUIDIiLHMsMCk7Ci0vKgotICBJIGRvbid0IHRoaW5rIEkgY291bGQgZXZlciBmdWxseSBl eHBsYWluIHRoaXMgaW4gYSBtaWxsaW9uIHllYXJzLi4uCi0gIFdlIGhhdmUgcmVhZCB0aGUgdXNl cidzIHN0cmluZyB3aXRob3V0IGNhbGxpbmcgdGhlIHZhcmlhYmxlLWV4cGFuZGVyCi0gIGZ1bmN0 aW9uLiAgTm93LCBiZWZvcmUgd2UgY2FsbCBpdCwgd2UgaGF2ZSB0byBkb3VibGUgYmFja3NsYXNo ZXMgdGhhdAotICBhcHBlYXIgYmVmb3JlIFxOLCBcQiwgXEwsIGFuZCBcIGl0c2VsZiwgc28gdGhl IGV4cGFuZGVyIGZ1bmN0aW9uIHdpbGwKLSAgcmVkdWNlIHRoZW0gYmFjayB0byBzaW5nbGUgYmFj a3NsYXNoZXMsIHNvIHdoZW4gd2UgY2FsbCBkb291dHB1dCgpLi4uCi0gIEJ1dCBpdCdzIG1vcmUg Y29tcGxpY2F0ZWQgdGhhbiB0aGF0LgotKi8KLQlpZiAoY21kZ3F1bygpKSB7CQkvKiBPbmx5IGlm IENPTU1BTkQgUVVPVElORyBPTiAuLi4gKi8KLQkgICAgZm9yICh4ID0gMCwgeSA9IDA7IHNbeF07 IHgrKywgeSsrKSB7Ci0JCWlmIChzW3hdID09IENNRFEpIHsKLQkJICAgIGNoYXIgYyA9IHNbeCsx XTsKLQkJICAgIGlmIChjID09ICduJyB8fCBjID09ICdOJyB8fAotCQkJYyA9PSAnYicgfHwgYyA9 PSAnQicgfHwKLQkJCWMgPT0gJ2wnIHx8IGMgPT0gJ0wnIHx8Ci0JCQljID09IENNRFEpCi0JCSAg ICAgIGxpbmVbeSsrXSA9IENNRFE7Ci0JCX0KLQkJbGluZVt5XSA9IHNbeF07Ci0JICAgIH0KLQkg ICAgbGluZVt5KytdID0gJ1wwJzsJCS8qIE5vdyBleHBhbmQgdmFyaWFibGVzLCBldGMuICovCi0J ICAgIGRlYnVnKEYxMTAsIk9VVFBVVCAzIixsaW5lLDApOwotCSAgICBzID0gbGluZSt5KzE7Ci0J ICAgIHggPSBMSU5CVUZTSVogLSAoaW50KSBzdHJsZW4obGluZSkgLSAxOwotCSAgICBkZWJ1ZyhG MTAxLCJPVVRQVVQgc2l6ZSIsIiIseCk7Ci0JICAgIGlmICh6enN0cmluZyhsaW5lLCZzLCZ4KSA8 IDApCi0JICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQkgICAgcyA9IGxpbmUreSsxOwotCSAg ICBkZWJ1ZyhGMTEwLCJPVVRQVVQgNCIscywwKTsKLQl9Ci0Jc3VjY2VzcyA9IGRvb3V0cHV0KHMs Y3gpOwotCXJldHVybihzdWNjZXNzKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lm ZGVmIEFOWVgyNQotI2lmbmRlZiBJQk1YMjUKLSAgICBpZiAoY3ggPT0gWFhQQUQpIHsJCQkvKiBQ QUQgY29tbWFuZHMgKi8KLQl4ID0gY21rZXkocGFkdGFiLG5wYWRjLCJQQUQgY29tbWFuZCIsIiIs eHhzdHJpbmcpOwotCWlmICh4ID09IC0zKSB7Ci0JICAgIHByaW50ZigiP1lvdSBtdXN0IHNwZWNp ZnkgYSBQQUQgY29tbWFuZCB0byBleGVjdXRlXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0J aWYgKHggPCAwKSByZXR1cm4oeCk7Ci0KLQlzd2l0Y2ggKHgpIHsKLQkgIGNhc2UgWFlQQURMOgot CSAgICBpZiAoeDI1c3RhdCgpIDwgMCkKLQkgICAgICBwcmludGYoIlNvcnJ5LCB5b3UgbXVzdCAn c2V0IG5ldHdvcmsnICYgJ3NldCBob3N0JyBmaXJzdFxyXG4iKTsKLQkgICAgZWxzZSB7Ci0JCXgy NWNsZWFyKCk7Ci0JCWluaXRwYWQoKTsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNhc2UgWFlQ QURTOgotCSAgICBpZiAoeDI1c3RhdCgpIDwgMCkKLQkgICAgICBwcmludGYoIk5vdCBjb25uZWN0 ZWRcclxuIik7Ci0JICAgIGVsc2UgewotCQlleHRlcm4gaW50IGxpbmtpZCwgbGNuOwotCQljb25v bCgiQ29ubmVjdGVkIHRocnUgIik7Ci0JCWNvbm9sKHR0bmFtZSk7Ci0JCXByaW50ZigiLCBMaW5r IGlkICVkLCBMb2dpY2FsIGNoYW5uZWwgbnVtYmVyICVkXHJcbiIsCi0JCSAgICAgICBsaW5raWQs bGNuKTsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNhc2UgWFlQQURSOgotCSAgICBpZiAoeDI1 c3RhdCgpIDwgMCkKLQkgICAgICBwcmludGYoIlNvcnJ5LCB5b3UgbXVzdCAnc2V0IG5ldHdvcmsn ICYgJ3NldCBob3N0JyBmaXJzdFxyXG4iKTsKLQkgICAgZWxzZQotCSAgICAgIHgyNXJlc2V0KDAs MCk7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBYWVBBREk6Ci0JICAgIGlmICh4MjVzdGF0KCkgPCAw KQotCSAgICAgIHByaW50ZigiU29ycnksIHlvdSBtdXN0ICdzZXQgbmV0d29yaycgJiAnc2V0IGhv c3QnIGZpcnN0XHJcbiIpOwotCSAgICBlbHNlCi0JICAgICAgeDI1aW50cigwKTsKLQl9Ci0JcmV0 dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBJQk1YMjUgKi8KLSNlbmRpZiAvKiBBTllYMjUgKi8K LQotI2lmbmRlZiBOT1NQTAotICAgIGlmIChjeCA9PSBYWFBBVSB8fCBjeCA9PSBYWFdBSSB8fCBj eCA9PSBYWE1TTCkgLyogUEFVU0UsIFdBSVQsIGV0YyAqLwotICAgICAgcmV0dXJuKGRvcGF1cyhj eCkpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9GUklMTFMKLSAgICBpZiAoY3gg PT0gWFhQUkkpIHsKLSNpZmRlZiBJS1NECi0jaWZkZWYgQ0tfTE9HSU4KLQlpZiAoaW5zZXJ2ZXIg JiYgKGlzZ3Vlc3QgfHwgIUVOQUJMRUQoZW5fcHJpKSkpIHsKLQkgICAgcHJpbnRmKCI/U29ycnks IHByaW50aW5nIGlzIGRpc2FibGVkXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0jZW5kaWYg LyogQ0tfTE9HSU4gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0JaWYgKCh4ID0gY21pZmkoIkZpbGUg dG8gcHJpbnQiLCIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKSB7Ci0JICAgIGlmICh4ID09IC0zKSB7 Ci0JCXByaW50ZigiP0EgZmlsZSBzcGVjaWZpY2F0aW9uIGlzIHJlcXVpcmVkXG4iKTsKLQkJcmV0 dXJuKC05KTsKLQkgICAgfSBlbHNlIHJldHVybih4KTsKLQl9Ci0JaWYgKHkgIT0gMCkgewotCSAg ICBwcmludGYoIj9XaWxkY2FyZHMgbm90IGFsbG93ZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwot CX0KLQlja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0JcyA9ICIiOwotI2lmbmRlZiBOVAot CWlmICgoeCA9IGNtdHh0KCJMb2NhbCBwcmludCBjb21tYW5kIG9wdGlvbnMsIG9yIGNhcnJpYWdl IHJldHVybiIsIiIsJnMsCi0JCSAgICAgICB4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih4KTsK LSNlbmRpZiAvKiBOVCAqLwotCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLQkgIHJldHVybih4KTsK LQlyZXR1cm4oc3VjY2VzcyA9ICh6cHJpbnQocyxsaW5lKSA9PSAwKSA/IDEgOiAwKTsKLSAgICB9 Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lmZGVmIFRDUFNPQ0tFVAotI2lmbmRlZiBOT1BV U0gKLSAgICBpZiAoY3ggPT0gWFhQTkcpIAkJCS8qIFBJTkcgYW4gSVAgaG9zdCAqLwotICAgICAg cmV0dXJuKGRvcGluZygpKTsKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmbmRlZiBOT0ZUUAot ICAgIGlmIChjeCA9PSBYWEZUUCkJCQkvKiBGVFAgKi8KLSNpZmRlZiBTWVNGVFAKLSNpZm5kZWYg Tk9QVVNICi0gICAgICByZXR1cm4oZG9mdHAoKSk7CQkJLyogSnVzdCBydW5zIHN5c3RlbSdzIGZ0 cCBwcm9ncmFtICovCi0jZWxzZQotICAgICAgcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBOT1BVU0gg Ki8KLSNlbHNlCi0gICAgcmV0dXJuKGRveGZ0cCgpKTsKLSNlbmRpZiAvKiBTWVNGVFAgKi8KLSNl bmRpZiAvKiBOT0ZUUCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0gICAgaWYgKGN4ID09 IFhYUFdEIHx8IGN4ID09IFhYTFBXRCkgewkvKiBQV0QgKi8KLSNpZmRlZiBPUzIKLQljaGFyICpw d3A7Ci0jZW5kaWYgLyogT1MyICovCi0JaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotCSAgcmV0dXJu KHgpOwotI2lmZGVmIExPQ1VTCi0JaWYgKCFsb2N1cyAmJiBjeCAhPSBYWExQV0QpIHsKLSNpZmRl ZiBOT1hGRVIKLQkgICAgcmV0dXJuKC0yKTsKLSNlbHNlCi0JICAgIHJldHVybihkb3JtdChYWlBX RCkpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogTE9DVVMgKi8K LQotI2lmbmRlZiBNQUMKLSNpZm5kZWYgT1MyCi0jaWZkZWYgVU5JWAotCXByaW50ZigiJXNcbiIs emd0ZGlyKCkpOwotI2Vsc2UKLQl4c3lzdGVtKFBXRENNRCk7Ci0jZW5kaWYgLyogVU5JWCAqLwot CXJldHVybihzdWNjZXNzID0gMSk7CQkvKiBCbGluZCBmYWl0aCAqLwotI2Vsc2UgIC8qIE9TMiAq LwotCWlmIChwd3AgPSB6Z3RkaXIoKSkgewotCSAgICBpZiAoKnB3cCkgewotI2lmZGVmIE5UCi0J CWxpbmVbMF0gPSBOVUw7Ci0JCWNrR2V0TG9uZ1BhdGhOYW1lKHB3cCxsaW5lLExJTkJVRlNJWik7 Ci0JCWxpbmVbTElOQlVGU0laLTFdID0gTlVMOwotCQl0bXBidWZbMF0gPSBOVUw7Ci0JCUdldFNo b3J0UGF0aE5hbWUocHdwLHRtcGJ1ZixUTVBCVUZTSVopOwotCQl0bXBidWZbVE1QQlVGU0laLTFd ID0gTlVMOwotCQlwd3AgPSBsaW5lOwotCQlpZiAoIXN0cmNtcChsaW5lLHRtcGJ1ZikpIHsKLSNl bmRpZiAvKiBOVCAqLwotCQkgICAgcHJpbnRmKCIlc1xuIixwd3ApOwotI2lmZGVmIE5UCi0JCX0g ZWxzZSB7Ci0JCSAgICBwcmludGYoIiAgTG9uZyBuYW1lOiAgJXNcbiIsbGluZSk7Ci0JCSAgICBw cmludGYoIiAgU2hvcnQgbmFtZTogJXNcbiIsdG1wYnVmKTsKLQkJfSAgICAgICAgICAgIAotI2Vu ZGlmIC8qIE5UICovCi0JICAgIH0KLQkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAoKGludClzdHJsZW4o cHdwKSA+IDApKTsKLQl9IGVsc2UgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbHNlICAvKiBNQUMgKi8KLQlpZiAocHdwID0gemd0ZGlyKCkpIHsKLQkgICAgcHJpbnRm KCIlc1xuIixwd3ApOwotCSAgICByZXR1cm4oc3VjY2VzcyA9ICgoaW50KXN0cmxlbihwd3ApID4g MCkpOwotCX0gZWxzZSByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIE1BQyAqLwotICAg IH0KLQotICAgIGlmIChjeCA9PSBYWFFVSSB8fCBjeCA9PSBYWEVYSSkgewkvKiBFWElULCBRVUlU ICovCi0JZXh0ZXJuIGludCBxdWl0dGluZzsKLQotCWlmICgoeSA9IGNtbnVtKCJleGl0IHN0YXR1 cyBjb2RlIixja2l0b2EoeGl0c3RhKSwxMCwmeCx4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih5 KTsKLQlpZiAoKHkgPSBjbXR4dCgiT3B0aW9uYWwgRVhJVCBtZXNzYWdlIiwiIiwmcyx4eHN0cmlu ZykpIDwgMCkKLQkgIHJldHVybih5KTsKLQlzID0gYnJzdHJpcChzKTsKLQlja3N0cm5jcHkobGlu ZSxzLExJTkJVRlNJWik7Ci0KLQlpZiAoIWh1cG9rKDApKQkJCS8qIENoZWNrIGlmIGNvbm5lY3Rp b24gc3RpbGwgb3BlbiAqLwotCSAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQotCWlmIChsaW5lWzBd KQkJCS8qIFByaW50IEVYSVQgbWVzc2FnZSBpZiBnaXZlbiAqLwotCSAgcHJpbnRmKCIlc1xuIiwo Y2hhciAqKWxpbmUpOwotCi0JcXVpdHRpbmcgPSAxOwkJCS8qIEZsYWcgdGhhdCB3ZSBhcmUgcXVp dHRpbmcuICovCi0KLSNpZmRlZiBWTVMKLQlkb2V4aXQoR09PRF9FWElULHgpOwotI2Vsc2UKLSNp ZmRlZiBPU0sKLS8qIFJldHVybmluZyBhbnkgY29kZXMgaGVyZSBtYWtlcyB0aGUgT1MtOSBzaGVs bCBwcmludCBhbiBlcnJvciBtZXNzYWdlLiAqLwotCWRvZXhpdChHT09EX0VYSVQsLTEpOwotI2Vs c2UKLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgICAgICBkb2V4aXQoR09PRF9FWElULHgpOwotI2Vs c2UKLQlkb2V4aXQoeCwtMSk7Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBP U0sgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICB9Ci0KLSNpZm5kZWYgTk9YRkVSCi0jaWZuZGVm IE5PRlJJTExTCi0gICAgaWYgKGN4ID09IFhYRVJSKSB7CQkJLyogRVJST1IgKi8KLSNpZmRlZiBD S19YWVoKLQlpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgewotCSAgICBwcmludGYoIlNvcnJ5LCBF LVBBQ0tFVCBvbmx5IHdvcmtzIHdpdGggS2VybWl0IHByb3RvY29sXG4iKTsKLQkgICAgcmV0dXJu KC05KTsKLQl9Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0JaWYgKCh4ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeCk7Ci0JdHRmbHVpKCk7Ci0JZXBrdGZsZyA9IDE7Ci0Jc3N0YXRlID0gJ2EnOwotCXJl dHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotICAgIGlmIChjeCA9PSBY WEZJTikgewkJCS8qIEZJTklTSCAqLwotI2lmZGVmIE5FV0ZUUAotCWlmICgoZnRwZ2V0ID09IDEp IHx8ICgoZnRwZ2V0ID09IDIpICYmIGZ0cGlzb3BlbigpKSkKLQkgIHJldHVybihmdHBieWUoKSk7 Ci0jZW5kaWYgLyogTkVXRlRQICovCi0jaWZkZWYgQ0tfWFlaCi0JaWYgKHByb3RvY29sICE9IFBS T1RPX0spIHsKLQkgICAgcHJpbnRmKCJTb3JyeSwgRklOSVNIIG9ubHkgd29ya3Mgd2l0aCBLZXJt aXQgcHJvdG9jb2xcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAvKiBDS19YWVog Ki8KLQlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLQotI2lmZGVmIElLU19PUFRJ T04KLSAgICAgICAgaWYgKAotI2lmZGVmIENLX1hZWgotICAgICAgICAgICAgcHJvdG9jb2wgPT0g UFJPVE9fSyAmJgotI2VuZGlmIC8qIENLX1hZWiAqLwotICAgICAgICAgICAgIWlrc193YWl0KEtF Uk1JVF9SRVFfU1RBUlQsMSkpIHsKLQkgICAgcHJpbnRmKAotICAgICAgICAgICAgICAiP0EgS2Vy bWl0IFNlcnZlciBpcyBub3QgYXZhaWxhYmxlIHRvIHByb2Nlc3MgdGhpcyBjb21tYW5kXG4iKTsK LQkgICAgcmV0dXJuKC05KTsJCQkvKiBDb3JyZWN0IHRoZSByZXR1cm4gY29kZSAqLwotICAgICAg ICB9Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotCi0Jc3N0YXRlID0gc2V0Z2VuKCdGJywiIiwi IiwiIik7Ci0JaWYgKGxvY2FsKSB0dGZsdWkoKTsJCS8qIElmIGxvY2FsLCBmbHVzaCB0dHkgaW5w dXQgYnVmZmVyICovCi0JcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQot I2lmbmRlZiBOT1NQTAotICAgIGlmIChjeCA9PSBYWEZPUikJCQkvKiBGT1IgbG9vcCAqLwotICAg ICAgcmV0dXJuKGRvZm9yKCkpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9YRkVS Ci0gICAgLyogR0VUIE1HRVQgUkVHRVQgUkVUUklFVkUgZXRjICovCi0gICAgaWYgKGN4ID09IFhY R0VUIHx8IGN4ID09IFhYTUdFVCB8fCBjeCA9PSBYWFJFR0VUIHx8IGN4ID09IFhYUkVUUikgewot I2lmZGVmIElLU0QKLQlpZiAoaW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fc2VuKSkgewotCSAgICBw cmludGYoIj9Tb3JyeSwgcmVjZXB0aW9uIG9mIGZpbGVzIGlzIGRpc2FibGVkXG4iKTsKLQkgICAg cmV0dXJuKC05KTsKLQl9Ci0jZW5kaWYgLyogSUtTRCAqLwotCXJldHVybihkb3hnZXQoY3gpKTsK LSAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9TUEwKLSNpZm5kZWYgTk9G UklMTFMKLSAgICBpZiAoY3ggPT0gWFhHT0spIHsJCQkvKiBHRVRPSyAqLwotCXJldHVybihzdWNj ZXNzID0gZG9hc2soY3gpKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSNlbmRpZiAv KiBOT1NQTCAqLwotCi0gICAgaWYgKGN4ID09IFhYSExQKSB7CQkJLyogSEVMUCAqLwotI2lmZGVm IE5PSEVMUAotCXJldHVybihkb2hscChYWEhMUCkpOwotI2Vsc2UKLQl4ID0gY21rZXkyKGNtZHRh YiwKLQkJICAgbmNtZCwiXG5Db21tYW5kIG9yIHRvcGljIiwiaGVscCIsdG9rdGFiLHh4c3RyaW5n LDErMis4KTsKLQlkZWJ1ZyhGMTExLCJIRUxQIGNvbW1hbmQgeCIsY21kYnVmLHgpOwotCWlmICh4 ID09IC01KSB7Ci0JICAgIHkgPSBjaGt0b2sodG9rdGFiKTsKLQkgICAgZGVidWcoRjEwMSwiSEVM UCBjbWtleSB0b2tlbiIsIiIseSk7Ci0JICAgIC8qIHVuZ3dvcmQoKTsgKi8KLQkgICAgc3dpdGNo ICh5KSB7Ci0jaWZuZGVmIE5PUFVTSAotCSAgICAgIGNhc2UgJyEnOgotCSAgICAgIGNhc2UgJ0An OiB4ID0gWFhTSEU7IGJyZWFrOwotCSAgICAgIGNhc2UgJzwnOiB4ID0gWFhGVU47IGJyZWFrOwot I2VuZGlmIC8qIE5PUFVTSCAqLwotCSAgICAgIGNhc2UgJyMnOiB4ID0gWFhDT007IGJyZWFrOwot CSAgICAgIGNhc2UgJzsnOiB4ID0gWFhDT007IGJyZWFrOwotI2lmbmRlZiBOT1NQTAotICAgICAg ICAgICAgICBjYXNlICcuJzogeCA9IFhYREVGOyBicmVhazsKLQkgICAgICBjYXNlICc6JzogeCA9 IFhYTEJMOyBicmVhazsKLSNpZm5kZWYgTk9TRVhQCi0JICAgICAgY2FzZSAnKCc6IHggPSBYWFNF WFA7IGJyZWFrOwotI2VuZGlmIC8qIE5PU0VYUCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZk ZWYgQ0tfUkVDQUxMCi0JICAgICAgY2FzZSAnXic6IHggPSBYWFJFRE87IGJyZWFrOwotI2VuZGlm CS8qIENLX1JFQ0FMTCAqLwotCSAgICAgIGNhc2UgJyYnOiB4ID0gWFhFQ0g7IGJyZWFrOyAvKiAo d2hhdCBpcyB0aGlzPykgKi8KLQkgICAgICBkZWZhdWx0OgotCQlwcmludGYoIlxuP0ludmFsaWQg LSAlc1xuIixjbWRidWYpOwotCQl4ID0gLTI7Ci0JICAgIH0KLQl9Ci0JbWFrZXN0cigmaGxwdG9r LGF0bWJ1Zik7Ci0JZGVidWcoRjExMSwiSEVMUCB0b2tlbiIsaGxwdG9rLHgpOwotCXJldHVybihk b2hscCh4KSk7Ci0jZW5kaWYgLyogTk9IRUxQICovCi0gICAgfQotCi0jaWZuZGVmIE5PSEVMUAot ICAgIGlmIChjeCA9PSBYWElOVCkJCQkvKiBJTlRSTyAqLwotICAgICAgcmV0dXJuKGhtc2dhKGlu dHJvdHh0KSk7Ci0gICAgaWYgKGN4ID09IFhYTkVXKSB7CQkJLyogTkVXUyAqLwotCWludCB4Owot CWV4dGVybiBjaGFyICoga19pbmZvX2RpcjsKLQl4ID0gaG1zZ2EobmV3c3R4dCk7Ci0JcmV0dXJu KHgpOwotICAgIH0KLQotI2lmZGVmIE9TMk9OTFkKLSAgICBpZiAoY3ggPT0gWFhVUEQpIHsJCQkv KiBWaWV3IFVQREFURSBmaWxlICovCi0gICAgICAgIGV4dGVybiBjaGFyIGV4ZWRpcltdOwotICAg ICAgICBjaGFyICogcFRvcGljOwotICAgICAgICBjaGFyIHVwZHN0clsyMDQ4XTsKLSAgICAgICAg aWYgKCh4ID0gY210eHQoInRvcGljIG5hbWUiLCIiLCZwVG9waWMseHhzdHJpbmcpKSA8IDApCi0g ICAgICAgICAgICByZXR1cm4geDsKLSNpZmRlZiBDT01NRU5UCi0Jc3ByaW50Zih1cGRzdHIsCi0J CSJzdGFydCB2aWV3ICVzXFxkb2NzXFxrMi5pbmYrJXNcXGRvY3NcXHVzaW5nX2NrLmluZitcCi0l c1xcZG9jc1xcZGlhbGluZy5pbmYrJXNcXGRvY3NcXG1vZGVtcy5pbmYgJXMiLAotCQlleGVkaXIs ZXhlZGlyLGV4ZWRpcixleGVkaXIscFRvcGljCi0JCSk7Ci0jZWxzZQotCWlmIChja21ha3htc2co dXBkc3RyLAotCQkgICAgIDIwNDgsCi0JCSAgICAgInN0YXJ0IHZpZXcgIiwKLQkJICAgICBleGVk aXIsCi0JCSAgICAgIlxcZG9jc1xcazIuaW5mKyIsCi0JCSAgICAgZXhlZGlyLAotCQkgICAgICJc XGRvY3NcXHVzaW5nX2NrLmluZisiLAotCQkgICAgIGV4ZWRpciwKLQkJICAgICAiXFxkb2NzXFxk aWFsaW5nLmluZisiLAotCQkgICAgIGV4ZWRpciwKLQkJICAgICAiXFxkb2NzXFxtb2RlbXMuaW5m ICIsCi0JCSAgICAgcFRvcGljLAotCQkgICAgIE5VTEwsCi0JCSAgICAgTlVMTAotCQkgICAgICkg PiAwKQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgIHN5c3RlbSh1cGRzdHIpOwotICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIH0KLSNlbmRpZiAvKiBPUzJPTkxZICovCi0jZW5kaWYg LyogTk9IRUxQICovCi0KLSNpZm5kZWYgTk9MT0NBTAotICAgIGlmIChjeCA9PSBYWEhBTikgewkJ CS8qIEhBTkdVUCAqLwotCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotI2lmZGVm IE5FV0ZUUAotCWlmICgoZnRwZ2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmICFsb2NhbCAm JiBmdHBpc29wZW4oKSkpCi0JICByZXR1cm4oc3VjY2VzcyA9IGZ0cGJ5ZSgpKTsKLSNlbmRpZiAv KiBORVdGVFAgKi8KLSNpZm5kZWYgTk9ESUFMCi0JaWYgKCh4ID0gbWRtaHVwKCkpIDwgMSkgewot CSAgICBkZWJ1ZyhGMTAxLCJIQU5HVVAgbWRtdXAiLCIiLHgpOwotI2VuZGlmIC8qIE5PRElBTCAq LwotCSAgICB4ID0gdHRoYW5nKCk7Ci0JICAgIGRlYnVnKEYxMDEsIkhBTkdVUCB0dGhhbmciLCIi LHgpOwotCSAgICB4ID0gKHggPiAtMSk7Ci0jaWZuZGVmIE5PRElBTAotCX0KLQlkaWFsc3RhID0g RElBX1VOSzsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQl3aHljbG9zZWQgPSBXQ19DTE9TOwotCXR0 Y2hrKCk7CQkJLyogSW4gY2FzZSBvZiBDTE9TRS1PTi1ESVNDT05ORUNUICovCi0JZG9sb2dlbmQo KTsKLSNpZmRlZiBPUzIKLQlpZiAoeCkKLQkgIERpYWxlclNlbmQoT1BUX0tFUk1JVF9IQU5HVVAs IDApOwotI2VuZGlmIC8qIE9TMiAqLwotCWlmICh4KSBoYXZlbGluZSA9IDA7Ci0JcmV0dXJuKHN1 Y2Nlc3MgPSB4KTsKLSAgICB9Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PU1BM Ci0gICAgLyogSU5QVVQsIFJFSU5QVVQsIGFuZCBNSU5QVVQgKi8KLQotICAgIGlmIChjeCA9PSBY WElOUCB8fCBjeCA9PSBYWFJFSSB8fCBjeCA9PSBYWE1JTlApIHsKLQlsb25nIHp6OwotCWludCBm bGFncyA9IDAsIGluY291bnQgPSAwOwotCWV4dGVybiBpbnQgaXRzYXBhdHRlcm4sIGlzam9pbiwg aXNpbmJ1ZmxlbjsKLQlpbnQgYywgZ2V0dmFsOwotCi0Jc3RydWN0IEZEQiBzdywgbnUsIGZsOwot CWludCBmYywgaGF2ZXRpbWUgPSAwOwotCWNoYXIgKiBtOwotCi0JaWYgKGN4ID09IFhYUkVJKSB7 Ci0JICAgIG0gPSAiVGltZW91dCBpbiBzZWNvbmRzIChpZ25vcmVkKSI7Ci0JfSBlbHNlIHsKLQkg ICAgbSA9ICJTZWNvbmRzIHRvIHdhaXQgZm9yIGlucHV0LFxuIG9yIHRpbWUgb2YgZGF5IGhoOm1t OnNzLFwKLSBvciBzd2l0Y2giOwotCX0KLQljbWZkYmkoJnN3LAkJCS8qIEZpcnN0IEZEQiAtIGNv bW1hbmQgc3dpdGNoZXMgKi8KLQkgICAgICAgX0NNS0VZLAkJCS8qIGZjb2RlICovCi0JICAgICAg IG0sCQkJLyogaGVscG1zZyAqLwotCSAgICAgICBja2l0b2EoaW5kZWYpLAkJLyogZGVmYXVsdCAq LwotCSAgICAgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCSAgICAgICBuaW5wdXRz dywJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotCSAgICAgICA0LAkJCS8q IGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLQkgICAgICAgeHhzdHJpbmcsCQkv KiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0JICAgICAgIGlucHV0c3csCQkJLyogS2V5d29yZCB0 YWJsZSAqLwotCSAgICAgICAmbnUJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0JICAgICAg ICk7Ci0JY21mZGJpKCZudSwKLQkgICAgICAgX0NNTlVNLAkJCS8qIE51bWJlciAqLwotCSAgICAg ICBtLAkJCS8qIEhlbHAgbWVzc2FnZSAqLwotCSAgICAgICBja2l0b2EoaW5kZWYpLAkJLyogZGVm YXVsdCAqLwotCSAgICAgICAiIiwJCQkvKiBOL0EgKi8KLQkgICAgICAgMTAsCQkJLyogUmFkaXgg PSAxMCAqLwotCSAgICAgICAwLAkJCS8qIE4vQSAqLwotCSAgICAgICB4eHN0cmluZywJCS8qIFBy b2Nlc3NpbmcgZnVuY3Rpb24gKi8KLQkgICAgICAgTlVMTCwJCQkvKiBOL0EgKi8KLQkgICAgICAg JmZsCQkJLyogTmV4dCAqLwotCSAgICAgICApOwotCWNtZmRiaSgmZmwsCQkJLyogVGltZSBvZiBk YXkgaGg6bW06c3MgKi8KLQkgICAgICAgX0NNRkxELAkJCS8qIGZjb2RlICovCi0JICAgICAgICIi LAkJCS8qIGhscG1zZyAqLwotCSAgICAgICAiIiwKLQkgICAgICAgIiIsCQkJLyogYWRkdGwgc3Ry aW5nIGRhdGEgKi8KLQkgICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotCSAg ICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0JICAgICAgIHh4c3RyaW5nLAot CSAgICAgICBOVUxMLAotCSAgICAgICBOVUxMCi0JICAgICAgICk7Ci0JZmMgPSAoY3ggPT0gWFhS RUkpID8gY21mZGIoJm51KSA6IGNtZmRiKCZzdyk7IC8qIFBhcnNlIHNvbWV0aGluZyAqLwotCi0J Zm9yICh5ID0gMDsgeSA8IE1JTlBNQVg7IHkrKykgewkvKiBJbml0aWFsaXplIHNlYXJjaCBzdHJp bmdzICovCi0JICAgIG1wW3ldID0gMDsJCQkvKiBBc3N1bWUgaXQncyBub3QgYSBwYXR0ZXJuICov Ci0JICAgIGlmICghbXBpbml0ZWQpIHsKLQkJbXNbeV0gPSBOVUxMOwotCSAgICB9Ci0JICAgIGlm IChtc1t5XSkgewotCQlmcmVlKG1zW3ldKTsJCS8qIEZyZWUgb2xkIHN0cmluZ3MsIGlmIGFueSAq LwotCQltc1t5XSA9IE5VTEw7Ci0JICAgIH0KLQl9Ci0JbXBpbml0ZWQgPSAxOwotCXdoaWxlICgh aGF2ZXRpbWUpIHsKLQkgICAgaWYgKGZjIDwgMCkgewkJLyogRXJyb3IgKi8KLQkJaWYgKGZjID09 IC0zKSB7Ci0JCSAgICBwcmludGYoIj9TeW50YXggZXJyb3IgaW4gSU5QVVQtY2xhc3MgY29tbWFu ZFxuIik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9IGVsc2UKLQkJICByZXR1cm4oZmMpOwotCSAg ICB9Ci0JICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsKLQkgICAgICBjYXNlIF9DTUtFWToJ CS8qIFN3aXRjaCAqLwotCQljID0gY21nYnJrKCk7Ci0JCWlmICgoZ2V0dmFsID0gKGMgPT0gJzon IHx8IGMgPT0gJz0nKSkgJiYKLQkJICAgICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0JCSAg ICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKLQkJ ICAgIHJldHVybigtOSk7Ci0JCX0KLQkJaWYgKGdldHZhbCAmJiBjbXJlc3VsdC5ucmVzdWx0ID09 IElOUFNXX0NPVSkgewotCQkgICAgaWYgKCh5ID0gY21udW0oIk51bWJlciBvZiBieXRlcyB0byBy ZWFkIiwKLQkJCQkgICAiIiwxMCwmeCx4eHN0cmluZykpIDwgMCkKLQkJICAgICAgcmV0dXJuKHkp OwotCQkgICAgaW5jb3VudCA9IHg7Ci0JCX0KLQkJZmxhZ3MgfD0gY21yZXN1bHQubnJlc3VsdDsK LQkJZmMgPSBjbWZkYigmc3cpOwkvKiBNYXliZSBwYXJzZSBtb3JlIHN3aXRjaGVzICovCi0JCWNv bnRpbnVlOwotCi0JICAgICAgY2FzZSBfQ01OVU06CQkvKiBTZWNvbmRzIHRvIHRpbWUgb3V0ICov Ci0JCXggPSBjbXJlc3VsdC5ucmVzdWx0OwotI2lmZGVmIENLRkxPQVQKLQkJaWYgKGluc2NhbGUg IT0gMS4wKQkvKiBTY2FsZSAqLwotCQkgIHggKj0gaW5zY2FsZTsJCQotI2VuZGlmCS8qIENLRkxP QVQgKi8KLQkJaGF2ZXRpbWUrKzsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIF9DTUZMRDoKLQkJ enogPSB0b2Qyc2VjKGF0bWJ1Zik7CS8qIENvbnZlcnQgdG8gc2VjcyBzaW5jZSBtaWRuaWdodCAq LwotCQlpZiAoenogPCAwTCkgewotCQkgICAgcHJpbnRmKCI/TnVtYmVyLCBleHByZXNzaW9uLCBv ciB0aW1lIG9mIGRheSByZXF1aXJlZFxuIik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9IGVsc2Ug ewotCQkgICAgY2hhciBub3dbMzJdOwkvKiBDdXJyZW50IHRpbWUgKi8KLQkJICAgIGNoYXIgKnA7 Ci0JCSAgICBsb25nIHRub3c7Ci0JCSAgICBwID0gbm93OwotCQkgICAgenRpbWUoJnApOwotCQkg ICAgdG5vdyA9IGF0b2wocCsxMSkgKiAzNjAwTCArIGF0b2wocCsxNCkgKiA2MEwgKyBhdG9sKHAr MTcpOwotCQkgICAgaWYgKHp6IDwgdG5vdykJLyogVXNlcidzIHRpbWUgYmVmb3JlIG5vdyAqLwot CQkgICAgICB6eiArPSA4NjQwMEw7CS8qIFNvIG1ha2UgaXQgdG9tb3Jyb3cgKi8KLQkJICAgIHp6 IC09IHRub3c7CQkvKiBTZWNvbmRzIGZyb20gbm93LiAqLwotCQkgICAgaWYgKHp6ID4gLTFMKSB7 Ci0JCQl4ID0geno7Ci0JCQlpZiAoenogIT0gKGxvbmcpIHgpIHsKLQkJCSAgICBwcmludGYoCi0i U29ycnksIGFyaXRobWV0aWMgb3ZlcmZsb3cgLSBoaDptbTpzcyBub3QgdXNhYmxlIG9uIHRoaXMg cGxhdGZvcm0uXG4iCi0pOwotCQkJICAgIHJldHVybigtOSk7Ci0JCQl9Ci0JCSAgICB9Ci0JCSAg ICBoYXZldGltZSsrOwotCQl9Ci0JCWJyZWFrOwotCSAgICAgIGRlZmF1bHQ6CQkKLQkJcHJpbnRm KCI/SW50ZXJuYWwgZXJyb3JcbiIpOwotCQlyZXR1cm4oLTkpOwotCSAgICB9Ci0JfQotCS8qIE5v dyBwYXJzZSB0aGUgc2VhcmNoIHRleHQgKi8KLQotI2lmZGVmIENLX01JTlBVVAotCWlmIChjeCA9 PSBYWE1JTlApIHsJCS8qIE1JTlBVVCAqLwotCSAgICBpbnQgaSwgayA9IDAsIG4gPSAwOwotCSAg ICBzdHJ1Y3Qgc3RyaW5nYXJyYXkgKiBxOwotCSAgICBrZWVwYWxsY2hhcnMgPSAxOwotCSAgICB3 aGlsZSAoayA8IE1JTlBNQVgpIHsKLQkJaWYgKCh5ID0gY21mbGQoIlN0cmluZyBvciBwYXR0ZXJu IiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewotCQkgICAgaWYgKHkgPT0gLTMpIHsKLQkJCWlmICgo eSA9IGNtY2ZtKCkpIDwgMCkKLQkJCSAgcmV0dXJuKHkpOwotCQkJYnJlYWs7Ci0JCSAgICB9IGVs c2UgewotCQkJcmV0dXJuKHkpOwotCQkgICAgfQotCQl9Ci0JCWRlYnVnKEYxMTEsIk1JTlBVVCBm aWVsZCIscyxrKTsKLQkJaWYgKGlzam9pbikgewotCQkgICAgaWYgKChxID0gY2tzcGxpdCgxLDAs cywiICIsKGNoYXIgKiljMWNoYXJzLDMsMCwwKSkpIHsKLQkJCWNoYXIgKiogYXAgPSBxLT5hX2hl YWQ7Ci0JCQluID0gcS0+YV9zaXplOwotCQkJZGVidWcoRjEwMSwibWlucHV0IGNrc3BsaXQgc2l6 ZSIsIiIsbik7Ci0JCQlmb3IgKGkgPSAxOyBpIDw9IG4gJiYgayA8IE1JTlBNQVg7IGkrKykgewot CQkJICAgIGlmICghYXBbaV0pIC8qIEFkZCBub24tZW1wdHkgZWxlbWVudHMgKi8KLQkJCSAgICAg IGNvbnRpbnVlOwotCQkJICAgIGlmICghKihhcFtpXSkpCi0JCQkgICAgICBjb250aW51ZTsKLQkJ CSAgICBtYWtlc3RyKCYobXNba10pLGFwW2ldKTsKLQkJCSAgICBkZWJ1ZyhGMTExLCJNSU5QVVQg Sk9JTiIsbXNba10sayk7Ci0JCQkgICAgaysrOwotCQkJfQotCQkgICAgfQotCQl9IGVsc2Ugewot CQkgICAgaWYgKHMpIGlmICgqcykgewotCQkJbWFrZXN0cigmKG1zW2tdKSxicnN0cmlwKHMpKTsK LQkJCWlmIChpdHNhcGF0dGVybikgbXBba10gPSAxOwotCQkJZGVidWcoRjExMSwiTUlOUFVUIixt c1trXSxpdHNhcGF0dGVybik7Ci0JCQlrKys7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotCSAgICBr ZWVwYWxsY2hhcnMgPSAwOwotCX0gZWxzZSB7Ci0jZW5kaWYgLyogQ0tfTUlOUFVUICovCi0KLQkg ICAgLyogSU5QVVQgb3IgUkVJTlBVVCAqLwotCi0JICAgIGlmIChmbGFncyAmIElOUFNXX0NPVSkg ewotCQlpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0JCSAgcmV0dXJuKHkpOwotCSAgICB9IGVsc2Ug ewotCQlpZiAoKHkgPSBjbXR4dCgiTWF0ZXJpYWwgdG8gYmUgaW5wdXQiLCIiLCZzLHh4c3RyaW5n KSkgPCAwKQotCQkgIHJldHVybih5KTsKLQkgICAgfQotCSAgICBtcFswXSA9IGl0c2FwYXR0ZXJu ID8gMSA6IDA7Ci0JICAgIG1ha2VzdHIoJihtc1swXSksYnJzdHJpcChzKSk7Ci0JICAgIG1zWzFd ID0gTlVMTDsKLQotI2lmZGVmIENLX01JTlBVVAotCX0KLSNlbmRpZiAvKiBDS19NSU5QVVQgKi8K LQotCWlmIChpbmNvdW50ID4gMCkJCS8qIE5vIHNlYXJjaGluZyBpZiAvQ09VTlQ6IGdpdmVuICov Ci0JICBtYWtlc3RyKCYobXNbMF0pLE5VTEwpOwotCi0JaWYgKGN4ID09IFhYSU5QIHx8IGN4ID09 IFhYTUlOUCkgeyAvKiBOb3QgUkVJTlBVVC4uLiAqLwotCSAgICBpX2FjdGl2ZSA9IDE7Ci0JICAg IC8qIEdvIHRyeSB0byBpbnB1dCB0aGUgc2VhcmNoIHN0cmluZyAqLwotCSAgICBzdWNjZXNzID0g ZG9pbnB1dCh4LG1zLG1wLGZsYWdzLGluY291bnQpOwotCSAgICBpX2FjdGl2ZSA9IDA7Ci0JfSBl bHNlIHsJCQkvKiBSRUlOUFVUICovCi0JICAgIHN1Y2Nlc3MgPSBkb3JlaW5wKHgsbXNbMF0saXRz YXBhdHRlcm4pOwotCX0KLQlpZiAoaW50aW1lW2NtZGx2bF0gJiYgIXN1Y2Nlc3MpIHsgLyogVElN RU9VVC1BQ1RJT04gPSBRVUlUPyAqLwotCSAgICBwb3BjbHZsKCk7CQkJLyogSWYgc28sIHBvcCBj b21tYW5kIGxldmVsLiAqLwotCSAgICBpZiAocGZsYWcgJiYgY21kbHZsID09IDApIHsKLQkJaWYg KGN4ID09IFhYSU5QKSAgcHJpbnRmKCI/SU5QVVQgdGltZWQgb3V0XG4iKTsKLQkJaWYgKGN4ID09 IFhYTUlOUCkgcHJpbnRmKCI/TUlOUFVUIHRpbWVkIG91dFxuIik7Ci0JCWlmIChjeCA9PSBYWFJF SSkgIHByaW50ZigiP1JFSU5QVVQgZmFpbGVkXG4iKTsKLQkgICAgfQotCX0KLQlyZXR1cm4oc3Vj Y2Vzcyk7CQkvKiBSZXR1cm4gZG8ocmUpaW5wdXQncyByZXR1cm4gY29kZSAqLwotICAgIH0KLQot I2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICBpZiAoY3ggPT0gWFhMT0cpIHsJCQkvKiBMT0cgKi8K LQl4ID0gY21rZXkobG9ndGFiLG5sb2csIldoYXQgdG8gbG9nIiwiIix4eHN0cmluZyk7Ci0JaWYg KHggPT0gLTMpIHsKLQkgICAgcHJpbnRmKCI/VHlwZSBvZiBsb2cgcmVxdWlyZWRcbiIpOwotCSAg ICByZXR1cm4oLTkpOwotCX0KLQlpZiAoeCA8IDApIHJldHVybih4KTsKLQl4ID0gZG9sb2coeCk7 Ci0JaWYgKHggPCAwKQotCSAgcmV0dXJuKHgpOwotCWVsc2UKLQkgIHJldHVybihzdWNjZXNzID0g eCk7Ci0gICAgfQotCi0gICAgaWYgKGN4ID09IFhYTE9HSU4pIHsJCS8qIChSRU1PVEUpIExPR0lO ICovCi0jaWZkZWYgTkVXRlRQCi0JaWYgKChmdHBnZXQgPT0gMSkgfHwgKChmdHBnZXQgPT0gMikg JiYgZnRwaXNvcGVuKCkpKQotCSAgcmV0dXJuKHN1Y2Nlc3MgPSBkb2Z0cHVzcigpKTsKLSNlbmRp ZiAvKiBORVdGVFAgKi8KLSNpZmRlZiBJS1NECi0JaWYgKGluc2VydmVyKSB7Ci0JICAgIHByaW50 ZigiP0FscmVhZHkgbG9nZ2VkIGluXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9IGVsc2UKLSNl bmRpZiAvKiBJS1NEICovCi0JewotI2lmZGVmIE5PWEZFUgotCSAgICByZXR1cm4oLTIpOwotI2Vs c2UKLQkgICAgcmV0dXJuKGRvcm10KFhaTEdJKSk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0JfQot ICAgIH0KLSAgICBpZiAoY3ggPT0gWFhMT0dPVVQpIHsJCS8qIChSRU1PVEUpIExPR09VVCAqLwot I2lmZGVmIE5FV0ZUUAotCWlmICgoZnRwZ2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmIGZ0 cGlzb3BlbigpKSkKLQkgIHJldHVybihzdWNjZXNzID0gZG9mdHByZXMoKSk7Ci0jZW5kaWYgLyog TkVXRlRQICovCi0KLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlcikgewotCSAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApCi0JICAgICAgcmV0dXJuKHgpOwotCSAgICBkb2V4aXQoR09P RF9FWElULHhpdHN0YSk7Ci0JfSBlbHNlCi0jZW5kaWYgLyogSUtTRCAqLwotCWlmICghbG9jYWwg fHwgKG5ldHdvcmsgJiYgdHRjaGsoKSA8IDApKSB7Ci0JICAgIHByaW50ZigiP05vIGNvbm5lY3Rp b24uXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9IGVsc2UgewotI2lmZGVmIE5PWEZFUgotCSAg ICByZXR1cm4oLTIpOwotI2Vsc2UKLQkgICAgcmV0dXJuKGRvcm10KFhaTEdPKSk7Ci0jZW5kaWYg LyogTk9YRkVSICovCi0JfQotICAgIH0KLQotI2lmbmRlZiBOT1NDUklQVAotICAgIGlmIChjeCA9 PSBYWExPR0kpIHsJCQkvKiBVVUNQLXN0eWxlIHNjcmlwdCAqLwotCWlmICgoeCA9IGNtdHh0KCJl eHBlY3Qtc2VuZCBleHBlY3Qtc2VuZCAuLi4iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0 dXJuKHgpOwotI2lmZGVmIENLX0FQQwotCWlmICgoYXBjYWN0aXZlID09IEFQQ19MT0NBTCkgfHwK LQkgICAgKChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSkgJiYgKCEoYXBjc3RhdHVzICYgQVBDX1VO Q0gpKSkpCi0JICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENLX0FQQyAqLwotI2lm ZGVmIFZNUwotCWNvbnJlcygpOwkJCS8qIEZvciBDdHJsLUMgdG8gd29yay4uLiAqLwotI2VuZGlm IC8qIFZNUyAqLwotCXJldHVybihzdWNjZXNzID0gZG9sb2dpbihzKSk7CS8qIFJldHVybiAxPWNv bXBsZXRlZCwgMD1mYWlsZWQgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9TQ1JJUFQgKi8KLQotI2lm bmRlZiBOT1hGRVIKLSNpZmRlZiBQSVBFU0VORAotICAgIGlmIChjeCA9PSBYWENSRUMpIHsJCQkv KiBDUkVDRUlWRSAqLwotCWlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7Ci0JICAgIHByaW50Zigi P1NvcnJ5LCBDUkVDRUlWRSB3b3JrcyBvbmx5IHdpdGggS2VybWl0IHByb3RvY29sXG4iKTsKLQkg ICAgcmV0dXJuKC05KTsKLQl9IGVsc2UKLQkgIHJldHVybihkb3hnZXQoY3gpKTsKLSAgICB9Ci0g ICAgaWYgKGN4ID09IFhYQ0dFVCkgewkJCS8qIENHRVQgKi8KLQlyZXR1cm4oZG94Z2V0KGN4KSk7 Ci0gICAgfQotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLSAgICBpZiAoY3ggPT0gWFhSRUMpCQkJ LyogUkVDRUlWRSAqLwotICAgICAgcmV0dXJuKGRveGdldChjeCkpOwotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIGlmIChjeCA9PSBYWFJFTSkgewkJCS8qIFJFTU9U RSAqLwotI2lmZGVmIE5FV0ZUUAotCWlmICgoZnRwZ2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09IDIp ICYmIGZ0cGlzb3BlbigpKSkKLQkgIHJldHVybihkb2Z0cHJtdCgwLDApKTsKLSNlbmRpZiAvKiBO RVdGVFAgKi8KLSNpZmRlZiBDS19YWVoKLQlpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgewotCSAg ICBwcmludGYoIlNvcnJ5LCBSRU1PVEUgY29tbWFuZHMgb25seSB3b3JrIHdpdGggS2VybWl0IHBy b3RvY29sXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0J eCA9IGNta2V5KHJlbWNtZCxucm10LCJSZW1vdGUgS2VybWl0IHNlcnZlciBjb21tYW5kIiwiIix4 eHN0cmluZyk7Ci0JaWYgKHggPT0gLTMpIHsKLQkgICAgcHJpbnRmKCI/WW91IG11c3Qgc3BlY2lm eSBhIGNvbW1hbmQgZm9yIHRoZSByZW1vdGUgc2VydmVyXG4iKTsKLQkgICAgcmV0dXJuKC05KTsK LQl9Ci0JcmV0dXJuKGRvcm10KHgpKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNp Zm5kZWYgTk9SRU5BTUUKLSNpZm5kZWYgTk9GUklMTFMKLSAgICBpZiAoY3ggPT0gWFhSRU4gfHwg Y3ggPT0gWFhMUkVOKSB7CS8qIFJFTkFNRSAqLwotI2lmZGVmIExPQ1VTCi0JaWYgKCFsb2N1cyAm JiBjeCAhPSBYWExSRU4pIHsKLSNpZmRlZiBOT1hGRVIKLQkgICAgcmV0dXJuKC0yKTsKLSNlbHNl Ci0JICAgIHJldHVybihkb3JtdChYWlJFTikpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAg ICB9Ci0jZW5kaWYgLyogTE9DVVMgKi8KLSNpZmRlZiBJS1NECi0JaWYgKGluc2VydmVyICYmICgh RU5BQkxFRChlbl9yZW4pCi0jaWZkZWYgQ0tfTE9HSU4KLQkJCSB8fCBpc2d1ZXN0Ci0jZW5kaWYg LyogQ0tfTE9HSU4gKi8KLQkJCSApKSB7Ci0JICAgIHByaW50ZigiP1NvcnJ5LCByZW5hbWluZyBv ZiBmaWxlcyBpcyBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2VuZGlmIC8q IElLU0QgKi8KLSNpZmRlZiBDS19BUEMKLQlpZiAoKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwpIHx8 Ci0JICAgICgoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUpICYmICghKGFwY3N0YXR1cyAmIEFQQ19V TkNIKSkpKQotCSAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLQly ZXR1cm4oZG9yZW5hbSgpKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSNlbmRpZiAv KiBOT1JFTkFNRSAqLwotCi0gICAgaWYgKGN4ID09IFhYRUlHSFQpIHsJCS8qIEVJR0hUQklUICov Ci0JZXh0ZXJuIGludCBwYXJpdHksIGNtYXNrLCBjbWRtc2s7Ci0JaWYgKCh4ID0gY21jZm0oKSkg PCAwKQotCSAgcmV0dXJuKHgpOwotCXBhcml0eSA9IDA7Ci0JY21hc2sgPSAweGZmOwotCWNtZG1z ayA9IDB4ZmY7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9Ci0KLSNpZm5kZWYgTk9YRkVS Ci0vKiBTRU5ELCBDU0VORCwgTU9WRSwgTUFJTCwgYW5kIFJFU0VORCB1c2UgdGhlIG5ldyBjb21t b24gY29kZSAqLwotCi0gICAgaWYgKGN4ID09IFhYU0VOCQkJLyogU0VORCAqLwotI2lmZGVmIFBJ UEVTRU5ECi0JfHwgY3ggPT0gWFhDU0VOCQkJLyogQ1NFTkQgKi8KLSNlbmRpZiAvKiBQSVBFU0VO RCAqLwotCXx8IGN4ID09IFhYTU9WRQkJCS8qIE1PVkUgKi8KLQl8fCBjeCA9PSBYWE1BSQkJCS8q IE1BSUwgKi8KLSNpZmRlZiBDS19SRVNFTkQKLQl8fCBjeCA9PSBYWFJTRU4JCQkvKiBSRVNFTkQg Ki8KLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8KLQkpIHsKLSNpZmRlZiBJS1NECi0JaWYgKGluc2Vy dmVyICYmICFFTkFCTEVEKGVuX2dldCkpIHsKLQkgICAgcHJpbnRmKCI/U29ycnksIHNlbmRpbmcg ZmlsZXMgaXMgZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAvKiBJ S1NEICovCi0JcmV0dXJuKGRveHNlbmQoY3gpKTsKLSAgICB9Ci0KLS8qIFBTRU5ELCBBREQsIGFu ZCBSRU1PVkUgdXNlIHNwZWNpYWwgcGFyc2luZyAqLwotCi0jaWZkZWYgQUREQ01ECi0gICAgLyog QUREIGFuZCBSRU1PVkUgKi8KLSAgICBpZiAoY3ggPT0gWFhBREQgfHwgY3ggPT0gWFhSRU1WKSB7 Ci0JY2hhciAqIG07Ci0JbSA9IChjeCA9PSBYWEFERCkgPyAiQWRkIHRvIHdoaWNoIGxpc3Q/IiA6 ICJSZW1vdmUgZnJvbSB3aGljaCBsaXN0PyI7Ci0JeCA9IGNta2V5KGFkZHRhYixuYWRkdGFiLG0s IiIseHhzdHJpbmcpOwotCWlmICh4IDwgMCkKLQkgIHJldHVybih4KTsKLSNpZm5kZWYgTk9NU0VO RAotCWlmICh4ID09IEFERF9TTkQpCi0JICByZXR1cm4oYWRkc2VuZChjeCkpOwotCWVsc2UKLSNl bmRpZiAvKiBOT01TRU5EICovCi0JICByZXR1cm4oZG9hZGQoY3gseCkpOwotICAgIH0KLSNlbmRp ZiAvKiBBRERDTUQgKi8KLQotI2lmZGVmIENLX1JFU0VORAotICAgIGlmIChjeCA9PSBYWFBTRU4p IHsJCQkvKiBQU0VORCAqLwotCWludCBzZWVrdG8gPSAwOwkJCS8qIEZJWCBUSElTICovCi0KLQlj bWFyZyA9IGNtYXJnMiA9ICIiOwotCXggPSBjbWlmaSgiRmlsZSB0byBwYXJ0aWFsbHkgc2VuZCIs ICIiLCAmcywgJnksIHh4c3RyaW5nKTsKLQlpZiAoeCA8IDApIHsKLQkgICAgaWYgKHggPT0gLTMp IHsKLQkJcHJpbnRmKCI/QSBmaWxlIHNwZWNpZmljYXRpb24gaXMgcmVxdWlyZWRcbiIpOwotCQly ZXR1cm4oLTkpOwotCSAgICB9IGVsc2UgcmV0dXJuKHgpOwotCX0KLQluZmlscyA9IC0xOwkJCS8q IEZpbGVzIGNvbWUgZnJvbSBpbnRlcm5hbCBsaXN0LiAqLwotI2lmbmRlZiBOT01TRU5ECi0gICAg ICAgIGFkZGxpc3QgPSAwOwkJCS8qIERvbid0IHVzZSBTRU5ELUxJU1QuICovCi0gICAgICAgIGZp bGVuZXh0ID0gTlVMTDsKLSNlbmRpZiAvKiBOT01TRU5EICovCi0JY2tzdHJuY3B5KGxpbmUscyxM SU5CVUZTSVopOwkvKiBTYXZlIGNvcHkgb2Ygc3RyaW5nIGp1c3QgcGFyc2VkLiAqLwotCWRlYnVn KEYxMTAsIlBTRU5EIGxpbmUiLGxpbmUsMCk7Ci0JaWYgKHkgIT0gMCkgewotCSAgICBwcmludGYo Ij9Tb3JyeSwgd2lsZGNhcmRzIG5vdCBwZXJtaXR0ZWQgaW4gdGhpcyBjb21tYW5kXG4iKTsKLQkg ICAgcmV0dXJuKC05KTsKLQl9Ci0JaWYgKHNpemVvZihpbnQpIDwgNCkgewotCSAgICBwcmludGYo Ij9Tb3JyeSwgdGhpcyBjb21tYW5kIG5lZWRzIDMyLWJpdCBpbnRlZ2Vyc1xuIik7Ci0JICAgIHJl dHVybigtOSk7Ci0JfQotCXggPSBjbW51bSgic3RhcnRpbmcgcG9zaXRpb24gKGJ5dGUgbnVtYmVy KSIsCi0JCSAgIiIsMTAsJnNlZWt0byx4eHN0cmluZyk7Ci0JaWYgKHggPCAwKQotCSAgcmV0dXJu KHgpOwotCXpmbnFmcChzLGZzcGVjbGVuLGZzcGVjKTsJLyogR2V0IGZ1bGwgcGF0aCAqLwotCWlm ICgoeCA9IGNtdHh0KCJOYW1lIHRvIHNlbmQgaXQgd2l0aCIsIiIsJnMsTlVMTCkpIDwgMCkKLQkg IHJldHVybih4KTsKLQlja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsKLQotI2lmZGVmIElL U0QKLQlpZiAoaW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fZ2V0KSkgewotCSAgICBwcmludGYoIj9T b3JyeSwgc2VuZGluZyBmaWxlcyBpcyBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0J fQotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBQSVBFU0VORAotCWlmIChzbmRmaWx0ZXIpIHsK LQkgICAgcHJpbnRmKCI/U29ycnksIG5vIFBTRU5EIHdoaWxlIFNFTkQgRklMVEVSIHNlbGVjdGVk XG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSNpZmRl ZiBDS19YWVoKLQlpZiAoKHByb3RvY29sID09IFBST1RPX1ggfHwgcHJvdG9jb2wgPT0gUFJPVE9f WEMpKSB7Ci0JICAgIHByaW50ZigiU29ycnksIFBTRU5EIHdvcmtzIG9ubHkgd2l0aCBLZXJtaXQg cHJvdG9jb2xcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAvKiBDS19YWVogKi8K LQotCWNtYXJnMiA9IGJyc3RyaXAodG1wYnVmKTsJLyogU3RyaXAgYnJhY2VzICovCi0JY21hcmcg PSBsaW5lOwkJCS8qIEZpbGUgdG8gc2VuZCAqLwotCWRlYnVnKEYxMTAsIlBTRU5EIGZpbGVuYW1l IixjbWFyZywwKTsKLQlkZWJ1ZyhGMTEwLCJQU0VORCBhcy1uYW1lIixjbWFyZzIsMCk7Ci0Jc2Vu ZHN0YXJ0ID0gc2Vla3RvOwotCXNzdGF0ZSA9ICdzJzsJCQkvKiBTZXQgc3RhcnQgc3RhdGUgdG8g U0VORCAqLwotI2lmbmRlZiBOT01TRU5ECi0JYWRkbGlzdCA9IDA7Ci0JZmlsZW5leHQgPSBOVUxM OwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQlzZW5kbW9kZSA9IFNNX1BTRU5EOwotI2lmZGVmIE1B QwotCXdoYXQgPSBXX1NFTkQ7Ci0Jc2NyY3JlYXRlKCk7Ci0jZW5kaWYgLyogTUFDICovCi0JaWYg KGxvY2FsKSB7CQkJLyogSWYgaW4gbG9jYWwgbW9kZSwgKi8KLQkgICAgZGlzcGxhID0gMTsJCQkv KiBlbmFibGUgZmlsZSB0cmFuc2ZlciBkaXNwbGF5ICovCi0JfQotCXJldHVybigwKTsKLSAgICB9 Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYg Tk9YRkVSCi0jaWZuZGVmIE5PTVNFTkQKLSAgICBpZiAoY3ggPT0gWFhNU0UgfHwgY3ggPT0gWFhN TU9WRSkgewotI2lmZGVmIE5FV0ZUUAotCWlmICgoZnRwZ2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09 IDIpICYmIGZ0cGlzb3BlbigpKSkKLQkgIHJldHVybihkb2Z0cHB1dChjeCwwKSk7Ci0jZW5kaWYg LyogTkVXRlRQICovCi0jaWZkZWYgQ0tfWFlaCi0JaWYgKHByb3RvY29sID09IFBST1RPX1ggfHwg cHJvdG9jb2wgPT0gUFJPVE9fWEMpIHsKLQkgICAgcHJpbnRmKAotIlNvcnJ5LCB5b3UgY2FuIG9u bHkgc2VuZCBvbmUgZmlsZSBhdCBhIHRpbWUgd2l0aCBYTU9ERU0gcHJvdG9jb2xcbiIKLQkJICAg KTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0gICAgICAgIHJl dHVybihkb3hzZW5kKGN4KSk7Ci0gICAgfQotCi0jaWZkZWYgQ09NTUVOVAkJCQkvKiAobW92ZWQg dG8gZG94c2VuZCkgKi8KLSAgICBpZiAoY3ggPT0gWFhNU0UgfHwgY3ggPT0gWFhNTU9WRSkgewkv KiBNU0VORCBhbmQgTU1PVkUgY29tbWFuZHMgKi8KLQluZmlscyA9IDA7CQkJLyogTGlrZSBnZXR0 aW5nIGEgbGlzdCBvZiAqLwotCWxwID0gbGluZTsJCQkvKiBmaWxlcyBvbiB0aGUgY29tbWFuZCBs aW5lICovCi0JYWRkbGlzdCA9IDA7CQkJLyogRG8gbm90IHVzZSBTRU5ELUxJU1QgKi8KLQlmaWxl bmV4dCA9IE5VTEw7CQkvKiBEaXR0byAhICovCi0KLQl3aGlsZSAoMSkgewotCSAgICBjaGFyICpw OwotCSAgICBpZiAoKHggPSBjbWlmaSgiTmFtZXMgb2YgZmlsZXMgdG8gc2VuZCwgc2VwYXJhdGVk IGJ5IHNwYWNlcyIsIiIsCi0JCQkgICAmcywmeSx4eHN0cmluZykpIDwgMCkgewotCQlpZiAoeCA9 PSAtMykgewotCQkgICAgaWYgKG5maWxzIDw9IDApIHsKLQkJCXByaW50ZigiP0EgZmlsZSBzcGVj aWZpY2F0aW9uIGlzIHJlcXVpcmVkXG4iKTsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9IGVsc2Ug YnJlYWs7Ci0JCX0KLQkJcmV0dXJuKHgpOwotCSAgICB9Ci0JICAgIG1zZmlsZXNbbmZpbHMrK10g PSBscDsJLyogR290IG9uZSwgY291bnQgaXQsIHBvaW50IHRvIGl0LCAqLwotCSAgICBwID0gbHA7 CQkJLyogcmVtZW1iZXIgcG9pbnRlciwgKi8KLQkgICAgd2hpbGUgKCpscCsrID0gKnMrKykJLyog YW5kIGNvcHkgaXQgaW50byBidWZmZXIgKi8KLQkgICAgICBpZiAobHAgPiAobGluZSArIExJTkJV RlNJWikpIHsgLyogQXZvaWQgbWVtb3J5IGxlYWsgKi8KLQkJICBwcmludGYoIj9NU0VORCBsaXN0 IHRvbyBsb25nXG4iKTsKLQkJICBsaW5lWzBdID0gTlVMOwotCQkgIHJldHVybigtOSk7Ci0JICAg ICAgfQotCSAgICBkZWJ1ZyhGMTExLCJtc2ZpbGVzIixtc2ZpbGVzW25maWxzLTFdLG5maWxzLTEp OwotCSAgICBpZiAobmZpbHMgPT0gMSkgKmZzcGVjID0gTlVMOyAvKiBUYWtlIGNhcmUgb2YgXHYo ZmlsZXNwZWMpICovCi0jaWZkZWYgWkZOUUZQCi0JICAgIHpmbnFmcChwLFRNUEJVRlNJWix0bXBi dWYpOwotCSAgICBwID0gdG1wYnVmOwotI2VuZGlmIC8qIFpGTlFGUCAqLwotCSAgICBpZiAoKChp bnQpc3RybGVuKGZzcGVjKSArIChpbnQpc3RybGVuKHApICsgMSkgPCBmc3BlY2xlbikgewotCQlz dHJjYXQoZnNwZWMscCk7CS8qIHNhZmUgKi8KLQkJc3RyY2F0KGZzcGVjLCIgIik7CS8qIHNhZmUg Ki8KLQkgICAgfSBlbHNlIHByaW50ZigiV0FSTklORyAtIFxcdihmaWxlc3BlYykgYnVmZmVyIG92 ZXJmbG93XG4iKTsKLQl9Ci0JY21saXN0ID0gbXNmaWxlczsJCS8qIFBvaW50IGNtbGlzdCB0byBw b2ludGVyIGFycmF5ICovCi0JY21hcmcyID0gIiI7CQkJLyogTm8gaW50ZXJuYWwgZXhwYW5zaW9u IGxpc3QgKHlldCkgKi8KLQlzbmRzcmMgPSBuZmlsczsJCQkvKiBGaWxlbmFtZXMgY29tZSBmcm9t IGNtbGlzdCAqLwotCXNlbmRtb2RlID0gU01fTVNFTkQ7CQkvKiBSZW1lbWJlciB0aGlzIGtpbmQg b2YgU0VORGluZyAqLwotCXNzdGF0ZSA9ICdzJzsJCQkvKiBTZXQgc3RhcnQgc3RhdGUgZm9yIFNF TkQgKi8KLQlpZiAoY3ggPT0gWFhNTU9WRSkJCS8qIElmIE1NT1ZFJ2luZywgKi8KLQkgIG1vdmlu ZyA9IDE7CQkJLyogIHNldCB0aGlzIGZsYWcuICovCi0jaWZkZWYgTUFDCi0Jd2hhdCA9IFdfU0VO RDsKLQlzY3JjcmVhdGUoKTsKLSNlbmRpZiAvKiBNQUMgKi8KLQlpZiAobG9jYWwpIHsJCQkvKiBJ ZiBpbiBsb2NhbCBtb2RlLCAqLwotCSAgICBkaXNwbGEgPSAxOwkJCS8qIHR1cm4gb24gZmlsZSB0 cmFuc2ZlciBkaXNwbGF5ICovCi0JICAgIHR0Zmx1aSgpOwkJCS8qIGFuZCBmbHVzaCB0dHkgaW5w dXQgYnVmZmVyLiAqLwotCX0KLQlyZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLSNlbmRpZiAvKiBOT01TRU5EICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYg Tk9TRVJWRVIKLSAgICBpZiAoY3ggPT0gWFhTRVIpIHsJCQkvKiBTRVJWRVIgKi8KLSNpZmRlZiBD S19YWVoKLQlpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgewotCSAgICBwcmludGYoIlNvcnJ5LCBT RVJWRVIgb25seSB3b3JrcyB3aXRoIEtlcm1pdCBwcm90b2NvbFxuIik7Ci0JICAgIHJldHVybigt OSk7Ci0JfQotI2VuZGlmIC8qIENLX1hZWiAqLwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFBhcnNl IGZvciB0aW1lIGxpbWl0LCBidXQgc2luY2Ugd2UgZG9uJ3QgdXNlIGl0IHlldCwKLSAgdGhlIHBh cnNpbmcgaXMgY29tbWVudGVkIG91dC4KLSovCi0JeF9pZm51bSA9IDE7CQkJLyogVHVybiBvZmYg aW50ZXJuYWwgY29tcGxhaW50cyAqLwotCXkgPSBjbW51bSgib3B0aW9uYWwgdGltZSBsaW1pdCwg c2Vjb25kcywgb3IgdGltZSBvZiBkYXkgYXMgaGg6bW06c3MiLAotCQkgICIwIiwgMTAsICZ4LCB4 eHN0cmluZwotCQkgICk7Ci0JeF9pZm51bSA9IDA7Ci0JaWYgKHkgPCAwKSB7Ci0JICAgIGlmICh5 ID09IC0yKSB7CQkvKiBJbnZhbGlkIG51bWJlciBvciBleHByZXNzaW9uICovCi0JCXp6ID0gdG9k MnNlYyhhdG1idWYpOwkvKiBDb252ZXJ0IHRvIHNlY3Mgc2luY2UgbWlkbmlnaHQgKi8KLQkJaWYg KHp6IDwgMEwpIHsKLQkJICAgIHByaW50ZigiP051bWJlciwgZXhwcmVzc2lvbiwgb3IgdGltZSBv ZiBkYXkgcmVxdWlyZWRcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfSBlbHNlIHsKLQkJICAg IGNoYXIgbm93WzMyXTsJLyogQ3VycmVudCB0aW1lICovCi0JCSAgICBjaGFyICpwOwotCQkgICAg bG9uZyB0bm93OwotCQkgICAgcCA9IG5vdzsKLQkJICAgIHp0aW1lKCZwKTsKLQkJICAgIHRub3cg PSBhdG9sKHArMTEpICogMzYwMEwgKyBhdG9sKHArMTQpICogNjBMICsgYXRvbChwKzE3KTsKLQkJ ICAgIGlmICh6eiA8IHRub3cpCS8qIFVzZXIncyB0aW1lIGJlZm9yZSBub3cgKi8KLQkJICAgICAg enogKz0gODY0MDBMOwkvKiBTbyBtYWtlIGl0IHRvbW9ycm93ICovCi0JCSAgICB6eiAtPSB0bm93 OwkJLyogU2Vjb25kcyBmcm9tIG5vdy4gKi8KLQkJfQotCSAgICB9IGVsc2UKLQkgICAgICByZXR1 cm4oeSk7Ci0JfQotCWlmICh6eiA+IC0xTCkgewotCSAgICB4ID0geno7Ci0JICAgIGlmICh6eiAh PSAobG9uZykgeCkgewotCQlwcmludGYoCi0iU29ycnksIGFyaXRobWV0aWMgb3ZlcmZsb3cgLSBo aDptbTpzcyBub3QgdXNhYmxlIG9uIHRoaXMgcGxhdGZvcm0uXG4iCi0JCSAgICAgICApOwotCQly ZXR1cm4oLTkpOwotCSAgICB9Ci0JfQotCWlmICh4IDwgMCkKLQkgIHggPSAwOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLQotCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCXNzdGF0 ZSA9ICd4JzsKLSNpZmRlZiBNQUMKLQl3aGF0ID0gV19SRUNWOwotCXNjcmNyZWF0ZSgpOwotI2Vu ZGlmIC8qIE1BQyAqLwotCWlmIChsb2NhbCkgZGlzcGxhID0gMTsKLSNpZmRlZiBBTUlHQQotCXJl cW9mZigpOwkJCS8qIE5vIERPUyByZXF1ZXN0b3JzIHdoaWxlIHNlcnZlciAqLwotI2VuZGlmIC8q IEFNSUdBICovCi0JcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0g ICAgaWYgKGN4ID09IFhYU0FWRSkgewkJCS8qIFNBVkUgY29tbWFuZCAqLwotCXggPSBjbWtleShz YXZ0YWIsbnNhdiwib3B0aW9uIiwia2V5bWFwIix4eHN0cmluZyk7Ci0JaWYgKHggPT0gLTMpIHsK LQkgICAgcHJpbnRmKCI/WW91IG11c3Qgc3BlY2lmeSBhbiBvcHRpb24gdG8gc2F2ZVxuIik7Ci0J ICAgIHJldHVybigtOSk7Ci0JfQotCWlmICh4IDwgMCkgcmV0dXJuKHgpOwotCS8qIGhhdmUgdG8g c2V0IHN1Y2Nlc3Mgc2VwYXJhdGVseSBmb3IgZWFjaCBpdGVtIGluIGRvcHJtKCkuLi4gKi8KLQkv KiBhY3R1YWxseSBub3QgcmVhbGx5LCBjb3VsZCBoYXZlIGp1c3QgaGFkIGRvcHJtIHJldHVybiAw IG9yIDEgKi8KLQkvKiBhbmQgc2V0IHN1Y2Nlc3MgaGVyZS4uLiAqLwotCXkgPSBkb3NhdmUoeCk7 Ci0JaWYgKHkgPT0gLTMpIHsKLQkgICAgcHJpbnRmKCI/TW9yZSBmaWVsZHMgcmVxdWlyZWRcbiIp OwotCSAgICByZXR1cm4oLTkpOwotCX0gZWxzZSByZXR1cm4oeSk7Ci0gICAgfQotCi0gICAgaWYg KGN4ID09IFhYU0VUKSB7CQkJLyogU0VUIGNvbW1hbmQgKi8KLQl4ID0gY21rZXkocHJtdGFiLG5w cm0sIlBhcmFtZXRlciIsIiIseHhzdHJpbmcpOwotCWlmICh4ID09IC0zKSB7Ci0JICAgIHByaW50 ZigiP1lvdSBtdXN0IHNwZWNpZnkgYSBwYXJhbWV0ZXIgdG8gc2V0XG4iKTsKLQkgICAgcmV0dXJu KC05KTsKLQl9Ci0JaWYgKHggPCAwKSByZXR1cm4oeCk7Ci0JLyogaGF2ZSB0byBzZXQgc3VjY2Vz cyBzZXBhcmF0ZWx5IGZvciBlYWNoIGl0ZW0gaW4gZG9wcm0oKS4uLiAqLwotCS8qIGFjdHVhbGx5 IG5vdCByZWFsbHksIGNvdWxkIGhhdmUganVzdCBoYWQgZG9wcm0gcmV0dXJuIDAgb3IgMSAqLwot CS8qIGFuZCBzZXQgc3VjY2VzcyBoZXJlLi4uICovCi0JeSA9IGRvcHJtKHgsMCk7Ci0JaWYgKHkg PT0gLTMpIHsKLQkgICAgcHJpbnRmKCI/TW9yZSBmaWVsZHMgcmVxdWlyZWRcbiIpOwotCSAgICBy ZXR1cm4oLTkpOwotCX0gZWxzZSByZXR1cm4oeSk7Ci0gICAgfQotCi0jaWZuZGVmIE5PUFVTSAot ICAgIGlmIChjeCA9PSBYWFNIRQkJCS8qIFNIRUxMIChzeXN0ZW0pIGNvbW1hbmQgKi8KLQl8fCBj eCA9PSBYWEVYRUMJCQkvKiBleGVjKCkgKi8KLQkpIHsKLQlpbnQgcnggPSAwOwotCWNoYXIgKiBw ID0gTlVMTDsKLQlpbnQgaSAvKiAsbiAqLyA7Ci0jaWZkZWYgVU5JWE9ST1NLCi0JY2hhciAqIGFy Z3NbMjU2XTsKLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLQotI2lmZGVmIElLU0QKLQlpZiAoaW5z ZXJ2ZXIgJiYgKG5vcHVzaCB8fCAhRU5BQkxFRChlbl9ob3MpKSkgewotCSAgICBwcmludGYoIj9T b3JyeSwgaG9zdCBjb21tYW5kIGFjY2VzcyBpcyBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigt OSk7Ci0JfQotI2VuZGlmIC8qIElLU0QgKi8KLQotI2lmZGVmIENLRVhFQwotCWlmIChjeCA9PSBY WEVYRUMpIHsJCS8qIEVYRUMgKG92ZXJsYXkgb3Vyc2VsdmVzKSAqLwotCSAgICBzdHJ1Y3QgRkRC IHN3LCBmbDsKLQkgICAgY21mZGJpKCZzdywJCQkvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRj aGVzICovCi0JCSAgIF9DTUtFWSwJCS8qIGZjb2RlICovCi0JCSAgICJDb21tYW5kIHRvIG92ZXJs YXkgQy1LZXJtaXRcbiBvciBzd2l0Y2giLCAvKiBobHBtc2cgKi8KLQkJICAgIiIsCQkJLyogZGVm YXVsdCAqLwotCQkgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCQkgICAxLAkJCS8q IGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotCQkgICA0LAkJCS8qIGFkZHRsIG51 bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLQkJICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNzaW5n IGZ1bmN0aW9uICovCi0JCSAgIHJlZGlyc3csCQkvKiBLZXl3b3JkIHRhYmxlICovCi0JCSAgICZm bAkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLQkJICAgKTsKLQkgICAgY21mZGJpKCZmbCwJ CQkvKiAybmQgRkRCIC0gY29tbWFuZCB0byBleGVjICovCi0JCSAgIF9DTUZMRCwJCS8qIGZjb2Rl ICovCi0JCSAgICJDb21tYW5kIHRvIG92ZXJsYXkgQy1LZXJtaXQiLCAvKiBobHBtc2cgKi8KLQkJ ICAgIiIsCQkJLyogZGVmYXVsdCAqLwotCQkgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAq LwotCQkgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0JCSAgIDAsCQkJLyogYWRk dGwgbnVtZXJpYyBkYXRhIDIgKi8KLQkJICAgeHhzdHJpbmcsCi0JCSAgIE5VTEwsCi0JCSAgIE5V TEwJCQkvKiBObyBtb3JlIGFmdGVyIHRoaXMgKi8KLQkJICAgKTsKLQkgICAgd2hpbGUgKDEpIHsK LQkJeCA9IGNtZmRiKCZzdyk7CQkvKiBQYXJzZSBzb21ldGhpbmcgKi8KLQkJZGVidWcoRjEwMSwi ZXhlYyBjbWZkYiIsIiIseCk7Ci0JCWlmICh4IDwgMCkKLQkJICByZXR1cm4oeCk7Ci0JCS8qIEdl bmVyYWxpemUgdGhpcyBpZiB3ZSBhZGQgbW9yZSBzd2l0Y2hlcyAqLwotCQlpZiAoY21yZXN1bHQu ZmNvZGUgPT0gX0NNS0VZKSB7Ci0JCSAgICByeCA9IDE7Ci0JCSAgICBjb250aW51ZTsKLQkJfQot CQlpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNRkxEKQotCQkgIGJyZWFrOwotCQlyZXR1cm4oLTIp OwotCSAgICB9Ci0JICAgIGNrc3RybmNweSh0bXBidWYsY21yZXN1bHQuc3Jlc3VsdCxUTVBCVUZT SVopOwotCSAgICBpZiAoIXRtcGJ1ZlswXSkgewotCQlwcmludGYoIj9Db21tYW5kIHJlcXVpcmVk XG4iKTsKLQkJcmV0dXJuKC05KTsKLQkgICAgfQotCSAgICBwID0gYnJzdHJpcCh0bXBidWYpOwot CSAgICBhcmdzWzBdID0gTlVMTDsJCS8qIFNldCBhcmd2WzBdIHRvIGl0ICovCi0JICAgIG1ha2Vz dHIoJmFyZ3NbMF0scCk7Ci0JICAgIGZvciAoaSA9IDE7IGkgPCAyNTU7IGkrKykgewkvKiBHZXQg YXJndW1lbnRzIGZvciBjb21tYW5kICovCi0JCWlmICgoeCA9IGNtZmxkKCJBcmd1bWVudCIsIiIs JnMseHhzdHJpbmcpKSA8IDApIHsKLQkJICAgIGlmICh4ID09IC0zKSB7Ci0JCQlpZiAoKHggPSBj bWNmbSgpKSA8IDApCi0JCQkgIHJldHVybih4KTsKLQkJCWJyZWFrOwotCQkgICAgfSBlbHNlCi0J CSAgICAgIHJldHVybih4KTsKLQkJfQotCQlhcmdzW2ldID0gTlVMTDsKLQkJcyA9IGJyc3RyaXAo cyk7Ci0JCW1ha2VzdHIoJmFyZ3NbaV0scyk7Ci0JICAgIH0KLQkgICAgYXJnc1tpXSA9IE5VTEw7 Ci0JfSBlbHNlIHsKLSNlbmRpZiAvKiBDS0VYRUMgKi8KLQkgICAgaWYgKCh4ID0gY210eHQoIlN5 c3RlbSBjb21tYW5kIHRvIGV4ZWN1dGUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotCSAgICAgIHJl dHVybih4KTsKLSNpZmRlZiBDS0VYRUMKLQl9Ci0jZW5kaWYgLyogQ0tFWEVDICovCi0gICAgICAg IGlmIChub3B1c2gpCi0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNpZmRlZiBDS19B UEMKLQlpZiAoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5D SCkpCi0JICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENLX0FQQyAqLwotCWNvbnJl cygpOwkJCS8qIE1ha2UgY29uc29sZSBub3JtYWwgICovCi0jaWZkZWYgT1MyCi0JaWYgKCEocyAm JiAqcykpIHsKLQkgICAgb3MycHVzaCgpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLQl9IGVsc2UKLSNlbmRpZiAvKiBPUzIgKi8KLQkgIGlmIChjeCA9PSBYWFNIRSkgewotCSAg ICAgIHggPSB6c2hjbWQocyk7Ci0JICAgICAgZGVidWcoRjEwMSwiUlVOIHpzaGNtZCBjb2RlIiwi Iix4KTsKLQkgICAgICBjb25jYigoY2hhcillc2NhcGUpOwotCSAgICAgIHJldHVybihzdWNjZXNz ID0geCk7Ci0jaWZkZWYgQ0tFWEVDCi0JICB9IGVsc2UgewotI2lmZGVmIERFQlVHCi0JICAgICAg aWYgKGRlYmxvZykgewotCQkgIGRlYnVnKEYxMTEsIkVYRUMgY21kIixwLDApOwotCQkgIGZvciAo aSA9IDA7IGkgPCAyNTYgJiYgYXJnc1tpXTsgaSsrKQotCQkgICAgZGVidWcoRjExMSwiRVhFQyBh cmciLGFyZ3NbaV0saSk7Ci0JICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0JICAgICAgaWYg KHApIHsKLQkJICB6X2V4ZWMocCxhcmdzLHJ4KTsJLyogT3ZlcmxheSBvdXJzZWxmICovCi0JCSAg ZGVidWcoRjEwMCwiRVhFQyBmYWlscyIsIiIsMCk7Ci0JCSAgY29uY2IoKGNoYXIpZXNjYXBlKTsJ LyogSW4gY2FzZSBpdCByZXR1cm5zICovCi0JICAgICAgfQotCSAgICAgIHJldHVybihzdWNjZXNz ID0gMCk7Ci0jZW5kaWYgLyogQ0tFWEVDICovCi0JICB9Ci0gICAgfQotCi0jaWZkZWYgQ0tfUkVE SVIKLSAgICBpZiAoY3ggPT0gWFhGVU4pIHsJCQkvKiBSRURJUkVDVCAqLwotI2lmZGVmIENLX0FQ QwotCWlmICgoYXBjYWN0aXZlID09IEFQQ19MT0NBTCkgfHwKLQkgICAgKChhcGNhY3RpdmUgPT0g QVBDX1JFTU9URSkgJiYgKCEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKSkpCi0JICByZXR1cm4oc3Vj Y2VzcyA9IDApOwotI2VuZGlmIC8qIENLX0FQQyAqLwotCWNrbWFrbXNnKHRtcGJ1ZiwKLQkJIFRN UEJVRlNJWiwKLQkJICJMb2NhbCBjb21tYW5kIHRvIHJ1bixcbiIsCi0JCSAid2l0aCBpdHMgc3Rh bmRhcmQgaW5wdXQvb3V0cHV0IHJlZGlyZWN0ZWQgdG8gIiwKLQkJIGxvY2FsID8gdHRuYW1lIDog InRoZSBjb21tdW5pY2F0aW9ucyBjb25uZWN0aW9uIiwKLQkJICJcbiIKLQkJICk7Ci0JaWYgKCh4 ID0gY210eHQodG1wYnVmLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHgpOwotICAg ICAgICBpZiAobm9wdXNoKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9SRURJUkVDVCBkaXNhYmxl ZFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2Vzcz0wKTsKLSAgICAgICAgfQotCWlmICgh bG9jYWwpIHsKLQkgICAgcHJpbnRmKCI/U0VUIExJTkUgb3IgU0VUIEhPU1QgcmVxdWlyZWQgZmly c3RcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLQlpZiAoISpzKSB7Ci0JICAgIHByaW50Zigi P1JFRElSRUNUIHJlcXVpcmVzIGEgY29tbWFuZCB0byByZWRpcmVjdFxuIik7Ci0JICAgIHJldHVy bigtOSk7Ci0JfQotCXJldHVybihzdWNjZXNzID0gdHRydW5jbWQocykpOwotICAgIH0KLSNlbmRp ZiAvKiBDS19SRURJUiAqLwotI2VuZGlmIC8qIE5PUFVTSCAqLwotCi0jaWZuZGVmIE5PU0hPVwot ICAgIGlmIChjeCA9PSBYWFNITykgewkJCS8qIFNIT1cgKi8KLQl4ID0gY21rZXkoc2hvdGFiLG5z aG8sIiIsInBhcmFtZXRlcnMiLHh4c3RyaW5nKTsKLQlpZiAoeCA8IDApIHJldHVybih4KTsKLQly ZXR1cm4oZG9zaG93KHgpKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9TSE9XICovCi0KLSNpZm5kZWYg TUFDCi0gICAgaWYgKGN4ID09IFhYU1BBKSB7CQkJLyogU1BBQ0UgKi8KLSNpZmRlZiBJS1NECi0J aWYgKGluc2VydmVyICYmICFFTkFCTEVEKGVuX3NwYSkpIHsKLQkgICAgcHJpbnRmKCI/U29ycnks IFNQQUNFIGNvbW1hbmQgZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRp ZiAvKiBJS1NEICovCi0jaWZkZWYgZGF0YWdlbmVyYWwKLQkvKiBBT1MvVlMgY2FuIHRha2UgYW4g YXJndW1lbnQgYWZ0ZXIgaXRzICJzcGFjZSIgY29tbWFuZC4gKi8KLQlpZiAoKHggPSBjbXR4dCgi Q29uZmlybSwgb3IgbG9jYWwgZGlyZWN0b3J5IG5hbWUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQot CSAgcmV0dXJuKHgpOwotCWlmIChub3B1c2gpIHsKLQkgICAgcHJpbnRmKCI/U29ycnksIFNQQUNF IGNvbW1hbmQgZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0gZWxzZSBpZiAoKnMg PT0gTlVMKSB7Ci0JICAgIHhzeXN0ZW0oU1BBQ01EKTsKLQl9IGVsc2UgewotCSAgICBja21ha21z ZyhsaW5lLExJTkJVRlNJWiwic3BhY2UgIixzLE5VTEwsTlVMTCk7Ci0JICAgIHhzeXN0ZW0obGlu ZSk7Ci0JfQotI2Vsc2UKLSNpZmRlZiBPUzIKLQlpZiAoKHggPSBjbXR4dCgiUHJlc3MgRW50ZXIg Zm9yIGN1cnJlbnQgZGlzayxcblwKLSBvciBzcGVjaWZ5IGEgZGlzayBsZXR0ZXIgbGlrZSBBOiIs IiIsJnMseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0JaWYgKCpzID09IE5VTCkgewkJ LyogQ3VycmVudCBkaXNrICovCi0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNwYWNlID0gemRz a3NwYWNlKDApOwotICAgICAgICAgICAgaWYgKHNwYWNlID4gMCAmJiBzcGFjZSA8IDEwMjQpCi0g ICAgICAgICAgICAgIHByaW50ZigiIEZyZWUgc3BhY2U6IHVua25vd25cbiIpOwotICAgICAgICAg ICAgZWxzZQotCSAgICAgIHByaW50ZigiIEZyZWUgc3BhY2U6ICVsZEtcbiIsIHNwYWNlLzEwMjRM KTsKLQl9IGVsc2UgewotCSAgICBpbnQgZHJpdmUgPSB0b3VwcGVyKCpzKTsKLSAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcgc3BhY2UgPSB6ZHNrc3BhY2UoZHJpdmUgLSAnQScgKyAxKTsKLSAgICAg ICAgICAgIGlmIChzcGFjZSA+IDAgJiYgc3BhY2UgPCAxMDI0KQotICAgICAgICAgICAgICBwcmlu dGYoIiBEcml2ZSAlYzogdW5rbm93biBmcmVlXG4iKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg ICAgICAgICAgcHJpbnRmKCIgRHJpdmUgJWM6ICVsZEsgZnJlZVxuIiwgZHJpdmUsc3BhY2UgLyAx MDI0TCk7Ci0JfQotI2Vsc2UKLSNpZmRlZiBVTklYT1JPU0sKLQl4ID0gY21kaXIoIkNvbmZpcm0g Zm9yIGN1cnJlbnQgZGlzayxcblwKLSBvciBzcGVjaWZ5IGEgZGlzayBkZXZpY2Ugb3IgZGlyZWN0 b3J5IiwiIiwmcyx4eHN0cmluZyk7Ci0JaWYgKHggPT0gLTMpCi0JICBzID0gIiI7Ci0JZWxzZSBp ZiAoeCA8IDApCi0JICByZXR1cm4oeCk7Ci0gICAgICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBC VUZTSVopOwotICAgICAgICBzID0gdG1wYnVmOwotCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHgpOwotCWlmIChub3B1c2gpIHsKLQkgICAgcHJpbnRmKCI/U29ycnksIFNQQUNFIGNvbW1h bmQgZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLQlpZiAoISpzKSB7CQkJLyog Q3VycmVudCBkaXNrICovCi0JICAgIHhzeXN0ZW0oU1BBQ01EKTsKLQl9IGVsc2UgewkJCS8qIFNw ZWNpZmllZCBkaXNrICovCi0JICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLFNQQUNNMiwiICIs cyxOVUxMKTsKLQkgICAgeHN5c3RlbShsaW5lKTsKLQl9Ci0jZWxzZQotCWlmICgoeCA9IGNtY2Zt KCkpIDwgMCkgcmV0dXJuKHgpOwotCWlmIChub3B1c2gpIHsKLQkgICAgcHJpbnRmKCI/U29ycnks IFNQQUNFIGNvbW1hbmQgZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLQl4c3lz dGVtKFNQQUNNRCk7Ci0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0jZW5kaWYgLyogT1MyICovCi0j ZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQlyZXR1cm4oc3VjY2VzcyA9IDEpOwkJLyogUHJldGVu ZCBpdCB3b3JrZWQgKi8KLSAgICB9Ci0jZW5kaWYgLyogTUFDICovCi0KLSNpZm5kZWYgTk9YRkVS Ci0gICAgaWYgKGN4ID09IFhYU1RBKSB7CQkJLyogU1RBVElTVElDUyAqLwotCWlmICgoeCA9IGNt a2V5KHN0YXR0YWIsMiwiQ2FycmlhZ2UgcmV0dXJuLCBvciBvcHRpb24iLAotCQkgICAgICAgIi9i cmllZiIseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0JaWYgKCh5ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeSk7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSBkb3N0YXQoeCkpOwotICAgIH0KLSNl bmRpZiAvKiBOT1hGRVIgKi8KLQotICAgIGlmIChjeCA9PSBYWFNUTyB8fCBjeCA9PSBYWEVORCkg ewkvKiBTVE9QLCBFTkQsIG9yIFBPUCAqLwotCWlmICgoeSA9IGNtbnVtKCJleGl0IHN0YXR1cyBj b2RlIiwiMCIsMTAsJngseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeSk7Ci0JaWYgKCh5ID0g Y210eHQoIk1lc3NhZ2UgdG8gcHJpbnQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJu KHkpOwotCXMgPSBicnN0cmlwKHMpOwotCWlmICgqcykgcHJpbnRmKCIlc1xuIixzKTsKLQlpZiAo Y3ggPT0gWFhTVE8pIHsKLQkgICAgZG9zdG9wKCk7Ci0JfSBlbHNlIHsKLQkgICAgZG9lbmQoeCk7 Ci0JfQotCXJldHVybihzdWNjZXNzID0gKHggPT0gMCkpOwotICAgIH0KLSAgICBpZiAoY3ggPT0g WFhTVVMpIHsJCQkvKiBTVVNQRU5EICovCi0JaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eSk7Ci0jaWZkZWYgTk9KQwotCXByaW50ZigiU29ycnksIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXQg Y2Fubm90IGJlIHN1c3BlbmRlZFxuIik7Ci0jZWxzZQotI2lmZGVmIElLU0QKLQlpZiAoaW5zZXJ2 ZXIpIHsKLQkgICAgcHJpbnRmKCI/U29ycnksIElLU0QgY2FuIG5vdCBiZSBzdXNwZW5kZWRcbiIp OwotCSAgICByZXR1cm4oLTkpOwotCX0gZWxzZQotI2VuZGlmIC8qIElLU0QgKi8KLQkgIGlmIChu b3B1c2gpIHsKLQkgICAgcHJpbnRmKCI/U29ycnksIGFjY2VzcyB0byBzeXN0ZW0gaXMgZGlzYWJs ZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLQlzdHB0cmFwKDApOwotI2VuZGlmIC8qIE5P SkMgKi8KLQlyZXR1cm4oMCk7Ci0gICAgfQotCi0gICAgaWYgKGN4ID09IFhYVEFLKSB7CQkJLyog VEFLRSAqLwotCWNoYXIgKiBzY3JpcHRlbnYgPSBOVUxMOwkKLSNpZmRlZiBPUzIKLSAgICAgICAg Y2hhciAqIEdldEFwcERhdGEoaW50KTsKLQlleHRlcm4gY2hhciBzdGFydHVwZGlyW10sZXhlZGly W10saW5pZGlyW107Ci0JY2hhciAqIGtleW1hcGVudiA9IE5VTEw7Ci0gICAgICAgIGNoYXIgKiBh cHBkYXRhMCA9IE5VTEwsICphcHBkYXRhMSA9IE5VTEw7Ci0JaW50IHh4OwotI2RlZmluZSBUQUtF UEFUSExFTiA0MDk2Ci0jZWxzZSAvKiBPUzIgKi8KLSNkZWZpbmUgVEFLRVBBVEhMRU4gMTAyNAot I2VuZGlmIC8qIE9TMiAqLwotCWNoYXIgdGFrZXBhdGhbVEFLRVBBVEhMRU5dOwotCi0JaWYgKHRs ZXZlbCA+PSBNQVhUQUtFLTEpIHsKLQkgICAgcHJpbnRmKCI/VGFrZSBmaWxlcyBuZXN0ZWQgdG9v IGRlZXBseVxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2lmZGVmIE9TMgotI2lmZGVmIE5U Ci0Jc2NyaXB0ZW52ID0gZ2V0ZW52KCJLOTVTQ1JJUFRTIik7Ci0Ja2V5bWFwZW52ID0gZ2V0ZW52 KCJLOTVLRVlNQVBTIik7Ci0gICAgICAgIG1ha2VzdHIoJmFwcGRhdGEwLChjaGFyICopR2V0QXBw RGF0YSgwKSk7Ci0gICAgICAgIG1ha2VzdHIoJmFwcGRhdGExLChjaGFyICopR2V0QXBwRGF0YSgx KSk7Ci0jZWxzZSAvKiBOVCAqLwotCXNjcmlwdGVudiA9IGdldGVudigiSzJTQ1JJUFRTIik7Ci0J a2V5bWFwZW52ID0gZ2V0ZW52KCJLMktFWU1BUFMiKTsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlm IC8qIE9TMiAqLwotCi0JaWYgKCFzY3JpcHRlbnYpCQkJLyogTGV0IHRoaXMgd29yayBmb3IgVW5p eCBldGMgdG9vICovCi0JICBzY3JpcHRlbnYgPSBnZXRlbnYoIkNLX1NDUklQVFMiKTsgLyogVXNl IHRoaXMgaWYgZGVmaW5lZCAqLwotI2lmbmRlZiBPUzIKLQlpZiAoIXNjcmlwdGVudikJCQkvKiBP dGhlcndpc2UgdXNlIGhvbWUgZGlyZWN0b3J5ICovCi0JICBzY3JpcHRlbnYgPSBob21lcGF0aCgp OwotI2VuZGlmIC8qIE9TMiAqLwotCWlmICghc2NyaXB0ZW52KQotCSAgc2NyaXB0ZW52ID0gIiI7 Ci0JY2tzdHJuY3B5KHRha2VwYXRoLHNjcmlwdGVudixUQUtFUEFUSExFTik7Ci0JZGVidWcoRjEx MCwiVEFLRSBpbml0aWFsIHRha2VwYXRoIix0YWtlcGF0aCwwKTsKLQotI2lmZGVmIE9TMgotCWlm ICgha2V5bWFwZW52KQotCSAga2V5bWFwZW52ID0gZ2V0ZW52KCJDS19LRVlNQVBTIik7Ci0JaWYg KCFrZXltYXBlbnYpCi0JICBrZXltYXBlbnYgPSAiIjsKLQotCWNrc3RybmNhdCh0YWtlcGF0aCwK LQkJICAoc2NyaXB0ZW52ICYmIHNjcmlwdGVudltzdHJsZW4oc2NyaXB0ZW52KS0xXT09JzsnKT8i IjoiOyIsCi0JCSAgVEFLRVBBVEhMRU4KLQkJICApOwotCWNrc3RybmNhdCh0YWtlcGF0aCxrZXlt YXBlbnY/a2V5bWFwZW52OiIiLFRBS0VQQVRITEVOKTsKLQlja3N0cm5jYXQodGFrZXBhdGgsCi0J CSAgKGtleW1hcGVudiAmJiBrZXltYXBlbnZbc3RybGVuKGtleW1hcGVudiktMV09PSc7Jyk/IiI6 IjsiLAotCQkgIFRBS0VQQVRITEVOCi0JCSAgKTsKLQlja3N0cm5jYXQodGFrZXBhdGgsc3RhcnR1 cGRpcixUQUtFUEFUSExFTik7Ci0JY2tzdHJuY2F0KHRha2VwYXRoLCI7IixUQUtFUEFUSExFTik7 Ci0JY2tzdHJuY2F0KHRha2VwYXRoLHN0YXJ0dXBkaXIsVEFLRVBBVEhMRU4pOwotCWNrc3RybmNh dCh0YWtlcGF0aCwiU0NSSVBUUy87IixUQUtFUEFUSExFTik7Ci0JY2tzdHJuY2F0KHRha2VwYXRo LHN0YXJ0dXBkaXIsVEFLRVBBVEhMRU4pOwotCWNrc3RybmNhdCh0YWtlcGF0aCwiS0VZTUFQUy87 IixUQUtFUEFUSExFTik7Ci0KLQlja3N0cm5jYXQodGFrZXBhdGgsYXBwZGF0YTEsVEFLRVBBVEhM RU4pOwotCWNrc3RybmNhdCh0YWtlcGF0aCwiS2VybWl0IDk1LzsiLFRBS0VQQVRITEVOKTsKLQlj a3N0cm5jYXQodGFrZXBhdGgsYXBwZGF0YTEsVEFLRVBBVEhMRU4pOwotCWNrc3RybmNhdCh0YWtl cGF0aCwiS2VybWl0IDk1L1NDUklQVFMvOyIsVEFLRVBBVEhMRU4pOwotCWNrc3RybmNhdCh0YWtl cGF0aCxhcHBkYXRhMSxUQUtFUEFUSExFTik7Ci0JY2tzdHJuY2F0KHRha2VwYXRoLCJLZXJtaXQg OTUvS0VZTUFQUy87IixUQUtFUEFUSExFTik7Ci0KLQlja3N0cm5jYXQodGFrZXBhdGgsYXBwZGF0 YTAsVEFLRVBBVEhMRU4pOwotCWNrc3RybmNhdCh0YWtlcGF0aCwiS2VybWl0IDk1LzsiLFRBS0VQ QVRITEVOKTsKLQlja3N0cm5jYXQodGFrZXBhdGgsYXBwZGF0YTAsVEFLRVBBVEhMRU4pOwotCWNr c3RybmNhdCh0YWtlcGF0aCwiS2VybWl0IDk1L1NDUklQVFMvOyIsVEFLRVBBVEhMRU4pOwotCWNr c3RybmNhdCh0YWtlcGF0aCxhcHBkYXRhMCxUQUtFUEFUSExFTik7Ci0JY2tzdHJuY2F0KHRha2Vw YXRoLCJLZXJtaXQgOTUvS0VZTUFQUy87IixUQUtFUEFUSExFTik7Ci0KLQlja3N0cm5jYXQodGFr ZXBhdGgsaW5pZGlyLFRBS0VQQVRITEVOKTsKLQlja3N0cm5jYXQodGFrZXBhdGgsIjsiLFRBS0VQ QVRITEVOKTsKLQlja3N0cm5jYXQodGFrZXBhdGgsaW5pZGlyLFRBS0VQQVRITEVOKTsKLQlja3N0 cm5jYXQodGFrZXBhdGgsIlNDUklQVFMvOyIsVEFLRVBBVEhMRU4pOwotCWNrc3RybmNhdCh0YWtl cGF0aCxpbmlkaXIsVEFLRVBBVEhMRU4pOwotCWNrc3RybmNhdCh0YWtlcGF0aCwiS0VZTUFQUy87 IixUQUtFUEFUSExFTik7Ci0KLQlja3N0cm5jYXQodGFrZXBhdGgsemhvbWUoKSxUQUtFUEFUSExF Tik7Ci0JY2tzdHJuY2F0KHRha2VwYXRoLCI7IixUQUtFUEFUSExFTik7Ci0JY2tzdHJuY2F0KHRh a2VwYXRoLHpob21lKCksVEFLRVBBVEhMRU4pOwotCWNrc3RybmNhdCh0YWtlcGF0aCwiU0NSSVBU Uy87IixUQUtFUEFUSExFTik7Ci0JY2tzdHJuY2F0KHRha2VwYXRoLHpob21lKCksVEFLRVBBVEhM RU4pOwotCWNrc3RybmNhdCh0YWtlcGF0aCwiS0VZTUFQUy87IixUQUtFUEFUSExFTik7Ci0KLQlj a3N0cm5jYXQodGFrZXBhdGgsZXhlZGlyLFRBS0VQQVRITEVOKTsKLQlja3N0cm5jYXQodGFrZXBh dGgsIjsiLFRBS0VQQVRITEVOKTsKLQlja3N0cm5jYXQodGFrZXBhdGgsZXhlZGlyLFRBS0VQQVRI TEVOKTsKLQlja3N0cm5jYXQodGFrZXBhdGgsIlNDUklQVFMvOyIsVEFLRVBBVEhMRU4pOwotCWNr c3RybmNhdCh0YWtlcGF0aCxleGVkaXIsVEFLRVBBVEhMRU4pOwotCWNrc3RybmNhdCh0YWtlcGF0 aCwiS0VZTUFQUy87IixUQUtFUEFUSExFTik7Ci0jZW5kaWYgLyogT1MyICovCi0JZGVidWcoRjEx MCwiVEFLRSBmaW5hbCB0YWtlcGF0aCIsdGFrZXBhdGgsMCk7Ci0KLQlpZiAoKHkgPSBjbWlmaXAo IkNvbW1hbmRzIGZyb20gZmlsZSIsCi0JCQkiIiwmcywmeCwwLHRha2VwYXRoLHh4c3RyaW5nKSkg PCAwKSB7Ci0JICAgIGlmICh5ID09IC0zKSB7Ci0JCXByaW50ZigiP0EgZmlsZSBuYW1lIGlzIHJl cXVpcmVkXG4iKTsKLQkJcmV0dXJuKC05KTsKLQkgICAgfSBlbHNlCi0JICAgICAgcmV0dXJuKHkp OwotCX0KLQlpZiAoeCAhPSAwKSB7Ci0JICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dl ZCBpbiBjb21tYW5kIGZpbGUgbmFtZVxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCWNrc3Ry bmNweShsaW5lLHMsTElOQlVGU0laKTsKLQlkZWJ1ZyhGMTEwLCJUQUtFIGZpbGUiLHMsMCk7Ci0J aWYgKGlzZGlyKHMpKSB7Ci0JICAgIHByaW50ZigiP0Nhbid0IGV4ZWN1dGUgYSBkaXJlY3Rvcnkg LSBcIiVzXCJcbiIsIHMpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNpZm5kZWYgTk9UQUtFQVJH UwotCXsKLQkgICAgY2hhciAqIHA7Ci0JICAgIHggPSBzdHJsZW4obGluZSk7Ci0JICAgIGRlYnVn KEYxMTEsIlRBS0UgYXJncyIsbGluZSx4KTsKLQkgICAgcCA9IGxpbmUgKyB4ICsgMTsKLQkgICAg aWYgKCh5ID0gY210eHQoIk9wdGlvbmFsIGFyZ3VtZW50cyIsIiIsJnMseHhzdHJpbmcpKSA8IDAp Ci0JICAgICAgcmV0dXJuKHkpOwotCSAgICBpZiAoKnMpIHsJCQkvKiBBcmdzIGdpdmVuPyAqLwot CQlja3N0cm5jcHkocCxzLExJTkJVRlNJWi14LTEpOwotI2lmZGVmIFpGTlFGUAotCQl6Zm5xZnAo bGluZSxUTVBCVUZTSVosdG1wYnVmKTsKLQkJcyA9IHRtcGJ1ZjsKLSNlbHNlCi0JCXMgPSBsaW5l OwotI2VuZGlmIC8qIFpGTlFGUCAqLwotCQlkZWJ1ZyhGMTEwLCJUQUtFIGZpbGVuYW1lIixzLDAp OwotCQl4ID0gc3RybGVuKHMpOwotCQlkZWJ1ZyhGMTAxLCJUQUtFIG5ldyBsZW4iLHMseCk7Ci0K LSNpZmRlZiBDT01NRU5UCi0vKgotICBUaGlzIHdhcyBhZGRlZCBpbiBDLUtlcm1pdCA3LjAgdG8g YWxsb3cgYXJncyB0byBiZSBwYXNzZWQgZnJvbSB0aGUgVEFLRQotICBjb21tYW5kIHRvIHRoZSBj b21tYW5kIGZpbGUuICBCdXQgaXQgb3ZlcndyaXRlcyB0aGUgY3VycmVudCBhcmd1bWVudCB2ZWN0 b3IsCi0gIHdoaWNoIGlzIGF0IGJlc3Qgc3VycHJpc2luZywgYW5kIGF0IHdvcnN0IHVuc2FmZS4K LSovCi0JCWFkZG1hYygiJTAiLHMpOwkJLyogRGVmaW5lICUwID0gbmFtZSBvZiBmaWxlICovCi0J CXZhcm5hbVswXSA9ICclJzsKLQkJdmFybmFtWzJdID0gJ1wwJzsKLQkJZGVidWcoRjExMCwidGFr ZSBhcmcgMCIscywwKTsKLQkJZGVidWcoRjExMCwidGFrZSBhcmdzIixwLDApOwotCQlmb3IgKHkg PSAxOyB5IDwgMTA7IHkrKykgeyAvKiBDbGVhciBjdXJyZW50IGFyZ3MgJTEuLiU5ICovCi0JCSAg ICB2YXJuYW1bMV0gPSAoY2hhcikgKHkgKyAnMCcpOwotCQkgICAgZGVsbWFjKHZhcm5hbSwwKTsK LQkJfQotCQl4d29yZHMocCxNQVhBUkdMSVNULE5VTEwsMCk7IC8qIEFzc2lnbiBuZXcgYXJncyAq LwotCQlkZWJ1ZyhGMTEwLCJ0YWtlIGFyZ3MiLHAsMCk7Ci0jZWxzZQotLyoKLSAgVGhpcyBtZXRo b2QgaXMgdXNlZCBpbiA4LjAuICBJZiB0aGUgVEFLRSBjb21tYW5kIGluY2x1ZGVzIGFyZ3VtZW50 cywgd2UKLSAgaW5zZXJ0IGFuIGludGVybWVkaWF0ZSB0ZW1wb3JhcnkgbWFjcm8gYmV0d2VlbiB0 aGUgY3VycmVudCBsZXZlbDsgd2UgcGFzcwotICB0aGUgYXJndW1lbnRzIHRvIHRoZSBtYWNybyBh bmQgdGhlbiB0aGUgbWFjcm8gVEFLRXMgdGhlIGNvbW1hbmQgZmlsZS4KLSAgSWYgdGhlIHVzZXIg Q3RybC1DJ3Mgb3V0IG9mIHRoZSBUQUtFIGZpbGUsIHNvbWUgdGVtcG9yYXJ5IG1hY3JvIGRlZmlu aXRpb25zCi0gIGFuZCBvdGhlciBzbWFsbCBtYWxsb2MnZCBiaXRzIG1pZ2h0IGJlIGxlZnQgYmVo aW5kLgotKi8KLQkJewotCQkgICAgY2hhciAqIHEgPSBOVUxMOwotCQkgICAgY2hhciAqIHIgPSBO VUxMOwotCQkgICAgaW50IGssIG07Ci0JCSAgICBtID0gbWFjbHZsOwotCQkgICAgcSA9IChjaGFy ICopbWFsbG9jKHgrMjQpOwotCQkgICAgaWYgKHEpIHsKLQkJCXIgPSAoY2hhciAqKW1hbGxvYyh4 KzI0KTsKLQkJCWlmIChyKSB7Ci0JCQkgICAgc3ByaW50ZihxLCJfZmlsZVslc10oJWQpIixzLGNt ZGx2bCk7IC8qIHNhZmUgKi8KLQkJCSAgICBzcHJpbnRmKHIsInRha2UgJXMiLHMpOyAvKiBzYWZl ICovCi0JCQkgICAgayA9IGFkZG1hYyhxLHIpOwotCQkJICAgIGlmIChrID4gLTEpIHsKLQkJCQlk b2RvKGsscCwwKTsKLQkJCQl3aGlsZSAobWFjbHZsID4gbSkgewotCQkJCSAgICBzc3RhdGUgPSAo Q0hBUikgcGFyc2VyKDEpOwotCQkJCSAgICBpZiAoc3N0YXRlKSBwcm90bygpOwotCQkJCX0KLQkJ CSAgICB9Ci0JCQkgICAgayA9IGRlbG1hYyhxLDApOwotCQkJICAgIGZyZWUocSk7Ci0JCQkgICAg ZnJlZShyKTsKLQkJCSAgICByZXR1cm4oc3VjY2Vzcyk7Ci0JCQl9Ci0JCSAgICB9Ci0JCX0KLQkJ cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgIH0KLQl9Ci0j ZWxzZQotCWlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotI2VuZGlmIC8qIE5PVEFL RUFSR1MgKi8KLQlyZXR1cm4oc3VjY2VzcyA9IGRvdGFrZShsaW5lKSk7Ci0gICAgfQotCi0jaWZu ZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICBpZiAoY3ggPT0gWFhWSUVXKSB7CQkJLyogVklF VyBPbmx5IFRlcm1pbmFsIG1vZGUgKi8KLQl2aWV3b25seSA9IFRSVUU7Ci0Jc3VjY2VzcyA9IGRv Y29uZWN0KDAsIDApOwotCXZpZXdvbmx5ID0gRkFMU0U7Ci0JcmV0dXJuIHN1Y2Nlc3M7Ci0gICAg fQotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgTkVUQ09OTgotICAgIGlmIChjeCA9PSBYWFRF TCB8fCBjeCA9PSBYWElLU0QpIHsJLyogVEVMTkVUICovCi0JaW50IHgsejsKLSNpZmRlZiBPUzIK LSAgICBpZiAoIXRjcF9hdmFpbCkgewotICAgICAgICBwcmludGYoIj9Tb3JyeSwgZWl0aGVyIFRD UC9JUCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIG9yXG5cCi1uZWNlc3NhcnkgRExM cyBkaWQgbm90IGxvYWQuICBVc2UgU0hPVyBORVRXT1JLIHRvIGNoZWNrIG5ldHdvcmsgc3RhdHVz LlxuIik7Ci0gICAgICAgIHN1Y2Nlc3MgPSAwOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0g ZWxzZQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgewotCSAgeCA9IG5ldHR5cGU7CQkJLyogU2F2 ZSBuZXQgdHlwZSBpbiBjYXNlIG9mIGZhaWx1cmUgKi8KLQkgIHogPSB0dG5wcm90bzsJCQkvKiBT YXZlIHByb3RvY29sIGluIGNhc2Ugb2YgZmFpbHVyZSAqLwotCSAgbmV0dHlwZSA9IE5FVF9UQ1BC OwotCSAgdHRucHJvdG8gPSAoY3ggPT0gWFhURUwpID8gTlBfVEVMTkVUIDogTlBfS0VSTUlUOwot CSAgaWYgKCh5ID0gc2V0bGluKFhZSE9TVCwwLDEpKSA8PSAwKSB7Ci0gICAgICAgICAgICAgIG5l dHR5cGUgPSB4OwkJLyogRmFpbGVkLCByZXN0b3JlIG5ldCB0eXBlLiAqLwotICAgICAgICAgICAg ICB0dG5wcm90byA9IHo7CQkvKiBhbmQgcHJvdG9jb2wgKi8KLSAgICAgICAgICAgICAgc3VjY2Vz cyA9IDA7Ci0JICB9Ci0JICBkaWRzZXRsaW4rKzsKLSAgICAgICAgfQotCXJldHVybih5KTsKLSAg ICB9Ci0KLSNpZm5kZWYgUFRZT1JQSVBFCi0jaWZkZWYgTkVUQ01ECi0jZGVmaW5lIFBUWU9SUElQ RQotI2Vsc2UKLSNpZmRlZiBORVRQVFkKLSNkZWZpbmUgUFRZT1JQSVBFCi0jZW5kaWYgLyogTkVU UFRZICovCi0jZW5kaWYgLyogTkVUQ01EICovCi0jZW5kaWYgLyogUFRZT1JQSVBFICovCi0KLSNp ZmRlZiBQVFlPUlBJUEUKLSAgICBpZiAoY3ggPT0gWFhQSVBFIHx8IGN4ID09IFhYUFRZKSB7CS8q IFBJUEUgb3IgUFRZICovCi0JaW50IHg7Ci0JZXh0ZXJuIGludCBuZXRzYXZlOwotCXggPSBuZXR0 eXBlOwkJCS8qIFNhdmUgbmV0IHR5cGUgaW4gY2FzZSBvZiBmYWlsdXJlICovCi0JbmV0dHlwZSA9 IChjeCA9PSBYWFBJUEUpID8gTkVUX0NNRCA6IE5FVF9QVFk7Ci0JaWYgKCh5ID0gc2V0bGluKFhZ SE9TVCwwLDEpKSA8IDApIHsKLQkgICAgbmV0dHlwZSA9IHg7CQkvKiBGYWlsZWQsIHJlc3RvcmUg bmV0IHR5cGUuICovCi0JICAgIHR0bnByb3RvID0gejsJCS8qIGFuZCBwcm90b2NvbCAqLwotCSAg ICBzdWNjZXNzID0gMDsKLQl9Ci0JZGlkc2V0bGluKys7Ci0JbmV0c2F2ZSA9IHg7Ci0JcmV0dXJu KHkpOwotICAgIH0KLSNlbmRpZiAvKiBQVFlPUlBJUEUgKi8KLQotI2lmZGVmIEFOWVNTSAotICAg IGlmIChjeCA9PSBYWFNTSCkgewkJCS8qIFNTSCAoU2VjdXJlIFNoZWxsKSAqLwotCWV4dGVybiBp bnQgbmV0c2F2ZTsKLSNpZmRlZiBTU0hCVUlMVElOCi0JaW50IGssIHgsIGhhdmVob3N0ID0gMCwg dHJpcHMgPSAwOwotICAgICAgICBpbnQgICAgdG1wdmVyID0gLTEsIHRtcHhmdyA9IC0xOwotI2lm bmRlZiBTU0hURVNUCi0gICAgICAgIGV4dGVybiBpbnQgc2xfc3NoX3hmdywgc2xfc3NoX3hmd19z YXZlZDsKLSAgICAgICAgZXh0ZXJuIGludCBzbF9zc2hfdmVyLCBzbF9zc2hfdmVyX3NhdmVkOwot I2VuZGlmIC8qIFNTSFRFU1QgKi8KLSAgICAgICAgZXh0ZXJuIGludCBtZG10eXAsIG1kbXNhdiwg Y3h0eXBlLCBzbF91aWRfc2F2ZWQ7Ci0gICAgICAgIGV4dGVybiBjaGFyICogc2xtc2c7Ci0JZXh0 ZXJuIGNoYXIgdWlkYnVmW10sIHNsX3VpZGJ1ZltdOwotICAgICAgICBleHRlcm4gY2hhciBwd2J1 ZltdLCAqIGdfcHN3ZDsKLSAgICAgICAgZXh0ZXJuIGludCBwd2ZsZywgcHdjcnlwdCwgZ19wZmxn LCBnX3BjcHQsIG5vbG9jYWw7Ci0Jc3RydWN0IEZEQiBzdywga3csIGZsOwotCi0gICAgICAgIGlm IChzc2hfdG1wc3RyKQotCSAgbWVtc2V0KHNzaF90bXBzdHIsMCxzdHJsZW4oc3NoX3RtcHN0cikp OwotICAgICAgICBtYWtlc3RyKCZzc2hfdG1wc3RyLE5VTEwpOwotICAgICAgICBtYWtlc3RyKCZz c2hfdG1wdWlkLE5VTEwpOwotICAgICAgICBtYWtlc3RyKCZzc2hfdG1wY21kLE5VTEwpOwotICAg ICAgICBtYWtlc3RyKCZzc2hfdG1wcG9ydCxOVUxMKTsKLQotCWNtZmRiaSgma3csCQkJLyogMXN0 IEZEQiAtIGNvbW1hbmRzICovCi0JICAgICAgIF9DTUtFWSwJCQkvKiBmY29kZSAqLwotCSAgICAg ICAiaG9zdCBbIHBvcnQgXSxcbiBvciBhY3Rpb24iLAkvKiBobHBtc2cgKi8KLQkgICAgICAgIiIs CQkJLyogZGVmYXVsdCAqLwotCSAgICAgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwot CSAgICAgICBuc3NoY21kLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwot CSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiAwID0ga2V5d29yZCAqLwotCSAg ICAgICB4eHN0cmluZywJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLQkgICAgICAgc3Noa3d0 YWIsCQkvKiBLZXl3b3JkIHRhYmxlICovCi0JICAgICAgICZmbAkJCS8qIFBvaW50ZXIgdG8gbmV4 dCBGREIgKi8KLQkgICAgICAgKTsKLQljbWZkYmkoJmZsLAkJCS8qIEhvc3QgKi8KLQkgICAgICAg X0NNRkxELAkJCS8qIGZjb2RlICovCi0JICAgICAgICIiLAkJCS8qIGhscG1zZyAqLwotCSAgICAg ICAiIiwJCQkvKiBkZWZhdWx0ICovCi0JICAgICAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRh ICovCi0JICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLQkgICAgICAgMCwJ CQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotCSAgICAgICB4eHN0cmluZywKLQkgICAgICAg TlVMTCwKLQkgICAgICAgTlVMTAotCSAgICAgICApOwotCi0JeCA9IGNtZmRiKCZrdyk7Ci0JaWYg KHggPT0gLTMpIHsKLQkgICAgcHJpbnRmKCI/c3NoIHdoYXQ/XG4iKTsKLQkgICAgcmV0dXJuKC05 KTsKLQl9Ci0JaWYgKHggPCAwKQotCSAgcmV0dXJuKHgpOwotCWhhdmVob3N0ID0gMDsKLQlpZiAo Y21yZXN1bHQuZmNvZGUgPT0gX0NNRkxEKSB7Ci0JICAgIGhhdmVob3N0ID0gMTsKLQkgICAgY2tz dHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOyAvKiBIb3N0bmFtZSAqLwot CSAgICBjbXJlc3VsdC5ucmVzdWx0ID0gWFNTSF9PUE47Ci0JfQotCXN3aXRjaCAoY21yZXN1bHQu bnJlc3VsdCkgewkvKiBTU0gga2V5d29yZCAqLwotCSAgY2FzZSBYU1NIX09QTjoJCS8qIFNTSCBP UEVOICovCi0JICAgIGlmICghaGF2ZWhvc3QpIHsKLQkJaWYgKCh4ID0gY21mbGQoIkhvc3QiLCIi LCZzLHh4c3RyaW5nKSkgPCAwKQotCQkgIHJldHVybih4KTsKLQkJY2tzdHJuY3B5KGxpbmUscyxM SU5CVUZTSVopOwotCSAgICB9Ci0JICAgIC8qIFBhcnNlIFsgcG9ydCBdIFsgc3dpdGNoZXMgXSAq LwotCSAgICBjbWZkYmkoJmt3LAkJCS8qIFN3aXRjaGVzICovCi0JCSAgIF9DTUtFWSwKLQkJICAg IlBvcnQgbnVtYmVyIG9yIHNlcnZpY2UgbmFtZSxcbm9yIHN3aXRjaCIsCi0JCSAgICIiLAotCQkg ICAiIiwKLQkJICAgbnNzaG9wbnN3LAotCQkgICA0LAotCQkgICB4eHN0cmluZywKLQkJICAgc3No b3Buc3csCi0JCSAgICZmbAotCQkgICApOwotCSAgICBjbWZkYmkoJmZsLAkJCS8qIFBvcnQgbnVt YmVyIG9yIHNlcnZpY2UgbmFtZSAqLwotCQkgICBfQ01GTEQsCi0JCSAgICIiLAotCQkgICAiIiwK LQkJICAgIiIsCi0JCSAgIDAsCi0JCSAgIDAsCi0JCSAgIHh4c3RyaW5nLAotCQkgICBOVUxMLAot CQkgICBOVUxMCi0JCSAgICk7Ci0JICAgIHRyaXBzID0gMDsJCQkvKiBFeHBsYWluZWQgYmVsb3cg Ki8KLQkgICAgd2hpbGUgKDEpIHsJCQkvKiBQYXJzZSBwb3J0IGFuZCBzd2l0Y2hlcyAqLwotCQl4 ID0gY21mZGIoJmt3KTsJCS8qIEdldCBhIGZpZWxkICovCi0JCWlmICh4ID09IC0zKQkJLyogVXNl ciB0eXBlZCBDUiBzbyBxdWl0IGZyb20gbG9vcCAqLwotCQkgIGJyZWFrOwotCQlpZiAoeCA8IDAp CQkvKiBPdGhlciBwYXJzZSBlcnJvciwgcGFzcyBpdCBiYWNrICovCi0JCSAgcmV0dXJuKHgpOwot CQlzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7IC8qIEZpZWxkIG9yIEtleXdvcmQ/ICovCi0gICAg ICAgICAgICAgICAgICBjYXNlIF9DTUZMRDoJCSAgLyogRmllbGQgKi8KLSAgICAgICAgICAgICAg ICAgICAgbWFrZXN0cigmc3NoX3RtcHBvcnQsY21yZXN1bHQuc3Jlc3VsdCk7Ci0JCSAgICBicmVh azsKLQkJICBjYXNlIF9DTUtFWToJCS8qIEtleXdvcmQgKi8KLQkJICAgIHN3aXRjaCAoY21yZXN1 bHQubnJlc3VsdCkgewkvKiBXaGljaCBvbmU/ICovCi0JCSAgICAgIGNhc2UgU1NIU1dfVVNSOgkg ICAgICAgIC8qIC9VU0VSOiAqLwotCQkJaWYgKCFjbWdicmsoKSkgewotCQkJICAgIHByaW50Zigi P1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLQkJCSAgICByZXR1cm4oLTkp OwotCQkJfQotCQkJaWYgKCh5ID0gY21mbGQoIlVzZXJuYW1lIiwiIiwmcyx4eHN0cmluZykpIDwg MCkKLQkJCSAgcmV0dXJuKHkpOwotCQkJcyA9IGJyc3RyaXAocyk7Ci0JCQltYWtlc3RyKCZzc2hf dG1wdWlkLHMpOwotCQkJYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0hTV19Q V0Q6Ci0JCQlpZiAoIWNtZ2JyaygpKSB7Ci0JCQkgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVx dWlyZXMgYW4gYXJndW1lbnRcbiIpOwotCQkJICAgIHJldHVybigtOSk7Ci0JCQl9Ci0JCQlkZWJv ayA9IDA7Ci0JCQlpZiAoKHggPSBjbWZsZCgiUGFzc3dvcmQiLCIiLCZzLHh4c3RyaW5nKSkgPCAw KSB7Ci0JCQkgICAgaWYgKHggPT0gLTMpIHsKLQkJCQltYWtlc3RyKCZzc2hfdG1wc3RyLCIiKTsK LQkJCSAgICB9IGVsc2UgewotCQkJCXJldHVybih4KTsKLQkJCSAgICB9Ci0JCQl9IGVsc2Ugewot CQkJICAgIHMgPSBicnN0cmlwKHMpOwotCQkJICAgIGlmICgoeCA9IChpbnQpc3RybGVuKHMpKSA+ IFBXQlVGTCkgewotCQkJCW1ha2VzdHIoJnNsbXNnLCJJbnRlcm5hbCBlcnJvciIpOwotCQkJCXBy aW50ZigiP1NvcnJ5LCB0b28gbG9uZyAtIG1heCA9ICVkXG4iLFBXQlVGTCk7Ci0JCQkJcmV0dXJu KC05KTsKLQkJCSAgICB9Ci0JCQkgICAgbWFrZXN0cigmc3NoX3RtcHN0cixzKTsKLQkJCX0KLQkJ CWJyZWFrOwotCi0JCSAgICAgIGNhc2UgU1NIU1dfVkVSOgotCQkJaWYgKCh4ID0gY21udW0oIk51 bWJlciIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApCi0JCQkgIHJldHVybih4KTsKLQkJCWlmICh6 IDwgMSB8fCB6ID4gMikgewotCQkJICAgIHByaW50ZigiP091dCBvZiByYW5nZTogJWRcbiIseik7 Ci0JCQkgICAgcmV0dXJuKC05KTsKLQkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcHZl ciA9IHo7Ci0JCQlicmVhazsKLQkJICAgICAgY2FzZSBTU0hTV19DTUQ6Ci0JCSAgICAgIGNhc2Ug U1NIU1dfU1VCOgotCQkJaWYgKCh4ID0gY21mbGQoIlRleHQiLCIiLCZzLHh4c3RyaW5nKSkgPCAw KQotCQkJICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hf dG1wY21kLHMpOwotCQkJc3NoX2NhcyA9IChjbXJlc3VsdC5ucmVzdWx0ID09IFNTSFNXX1NVQik7 Ci0JCQlicmVhazsKLQkJICAgICAgY2FzZSBTU0hTV19YMTE6Ci0JCQlpZiAoKHggPSBjbWtleShv bm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApCi0JCQkgIHJldHVybih4KTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIHRtcHhmdyA9IHg7Ci0JCQlicmVhazsKLQkJICAgICAgZGVmYXVsdDoK LQkJICAgICAgICByZXR1cm4oLTIpOwotCQkgICAgfQotCQl9Ci0JCWlmICh0cmlwcysrID09IDAp IHsJLyogQWZ0ZXIgZmlyc3QgdGltZSB0aHJvdWdoICovCi0JCSAgICBjbWZkYmkoJmt3LAkJLyog b25seSBwYXJzZSBzd2l0Y2hlcywgbm90IHBvcnQuICovCi0JCQkgICBfQ01LRVksCi0JCQkgICAi U3dpdGNoIiwKLQkJCSAgICIiLAotCQkJICAgIiIsCi0JCQkgICBuc3Nob3Buc3csCi0JCQkgICA0 LAotCQkJICAgeHhzdHJpbmcsCi0JCQkgICBzc2hvcG5zdywKLQkJCSAgIE5VTEwKLQkJCSAgICk7 Ci0JCX0KLQkgICAgfQotCSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCS8qIEdldCBjb25maXJt YXRpb24gKi8KLQkgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICBpZiAoY2xza2Nvbm54KDEp IDwgMCkgewkvKiBDbG9zZSBjdXJyZW50IEtlcm1pdCBjb25uZWN0aW9uICovCi0gICAgICAgICAg ICAgIGlmICggc3NoX3RtcHN0ciApIHsKLSAgICAgICAgICAgICAgICAgIG1lbXNldChzc2hfdG1w c3RyLDAsc3RybGVuKHNzaF90bXBzdHIpKTsKLSAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNz aF90bXBzdHIsTlVMTCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKLSAgICAgICAgICAgIH0KLQkgICAgbWFrZXN0cigmc3NoX2hzdCxsaW5lKTsJ LyogU3Rhc2ggZXZlcnl0aGluZyAqLwotCSAgICBpZiAoc3NoX3RtcHVpZCkgewotICAgICAgICAg ICAgICAgIGlmICghc2xfdWlkX3NhdmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNw eShzbF91aWRidWYsdWlkYnVmLFVJREJVRkxFTik7Ci0gICAgICAgICAgICAgICAgICAgIHNsX3Vp ZF9zYXZlZCA9IDE7Ci0gICAgICAgICAgICAgICAgfQotCQlja3N0cm5jcHkodWlkYnVmLHNzaF90 bXB1aWQsVUlEQlVGTEVOKTsKLQkJbWFrZXN0cigmc3NoX3RtcHVpZCxOVUxMKTsKLQkgICAgfQot ICAgICAgICAgICAgaWYgKHNzaF90bXBwb3J0KSB7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigm c3NoX3BydCxzc2hfdG1wcG9ydCk7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3RtcHBv cnQsTlVMTCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZz c2hfcHJ0LE5VTEwpOwotCi0gICAgICAgICAgICBpZiAoc3NoX3RtcGNtZCkgewotICAgICAgICAg ICAgICAgIG1ha2VzdHIoJnNzaF9jbWQsYnJzdHJpcChzc2hfdG1wY21kKSk7Ci0gICAgICAgICAg ICAgICAgbWFrZXN0cigmc3NoX3RtcGNtZCxOVUxMKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAg ICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9jbWQsTlVMTCk7Ci0KLSAgICAgICAgICAgIGlmICh0 bXB2ZXIgPiAtMSkgewotI2lmbmRlZiBTU0hURVNUCi0gICAgICAgICAgICAgICAgaWYgKCFzbF9z c2hfdmVyX3NhdmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsX3NzaF92ZXIgPSBzc2hfdmVy OwotICAgICAgICAgICAgICAgICAgICBzbF9zc2hfdmVyX3NhdmVkID0gMTsKLSAgICAgICAgICAg ICAgICB9Ci0jZW5kaWYgLyogU1NIVEVTVCAqLwotICAgICAgICAgICAgICAgIHNzaF92ZXIgPSB0 bXB2ZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodG1weGZ3ID4gLTEpIHsKLSNp Zm5kZWYgU1NIVEVTVAotICAgICAgICAgICAgICAgIGlmICghc2xfc3NoX3hmd19zYXZlZCkgewot ICAgICAgICAgICAgICAgICAgICBzbF9zc2hfeGZ3ID0gc3NoX3hmdzsKLSAgICAgICAgICAgICAg ICAgICAgc2xfc3NoX3hmd19zYXZlZCA9IDE7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8q IFNTSFRFU1QgKi8KLSAgICAgICAgICAgICAgICBzc2hfeGZ3ID0gdG1weGZ3OwotICAgICAgICAg ICAgfQotCSAgICBpZiAoc3NoX3RtcHN0cikgewotCQlpZiAoc3NoX3RtcHN0clswXSkgewotCQkg ICAgY2tzdHJuY3B5KHB3YnVmLHNzaF90bXBzdHIsUFdCVUZMKzEpOwotCQkgICAgcHdmbGcgPSAx OwotCQkgICAgcHdjcnlwdCA9IDA7Ci0JCX0gZWxzZQotCQkgIHB3ZmxnID0gMDsKLQkJbWFrZXN0 cigmc3NoX3RtcHN0cixOVUxMKTsKLQkgICAgfQotCSAgICBuZXR0eXBlID0gTkVUX1NTSDsKLQkg ICAgaWYgKG1kbXNhdiA8IDApCi0JICAgICAgbWRtc2F2ID0gbWRtdHlwOwotCSAgICBtZG10eXAg PSAtbmV0dHlwZTsKLQkgICAgeCA9IDE7Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgIG1h a2VzdHIoJmdfcHN3ZCxwd2J1Zik7ICAgICAgICAgICAgIC8qIFNhdmUgZ2xvYmFsIHB3YnVmICov Ci0gICAgICAgICAgICBnX3BmbGcgPSBwd2ZsZzsgICAgICAgICAgICAgICAgICAgICAvKiBhbmQg ZmxhZyAqLwotICAgICAgICAgICAgZ19wY3B0ID0gcHdjcnlwdDsKLSNlbmRpZiAvKiBOT1NQTCAq LwotCi0JICAgIC8qIExpbmUgcGFyYW1ldGVyIHRvIHR0b3BlbigpIGlzIGlnbm9yZWQgKi8KLQkg ICAgZGVidWcoRjExMCwiU1NIIGxpbmUiLGxpbmUsMCk7Ci0JICAgIGsgPSB0dG9wZW4obGluZSwm eCxtZG10eXAsIDApOwotCSAgICBpZiAoayA8IDApIHsKLQkJcHJpbnRmKCI/VW5hYmxlIHRvIGNv bm5lY3QgdG8gJXNcbiIsc3NoX2hzdCk7Ci0JCW1kbXR5cCA9IG1kbXNhdjsKLSAgICAgICAgICAg ICAgICBzbHJlc3RvcigpOwotCQlyZXR1cm4oc3VjY2VzcyA9IDApOwotCSAgICB9Ci0JICAgIGR1 cGxleCA9IDA7ICAgICAgICAgICAgIC8qIFJlbW90ZSBlY2hvICovCi0JICAgIGNrc3RybmNweSh0 dG5hbWUsbGluZSxUVE5BTUxFTik7IC8qIFJlY29yZCB0aGUgY29tbWFuZCAqLwotCSAgICBkZWJ1 ZyhGMTEwLCJzc2ggdHRuYW1lIix0dG5hbWUsMCk7Ci0JICAgIG1ha2VzdHIoJnNsbXNnLE5VTEwp OwkvKiBObyBTRVQgTElORSBlcnJvciBtZXNzYWdlICovCi0JICAgIGN4dHlwZSA9IENYVF9TU0g7 Ci0jaWZuZGVmIE5PRElBTAotCSAgICBkaWFsc3RhID0gRElBX1VOSzsKLSNlbmRpZiAvKiBOT0RJ QUwgKi8KLQkgICAgc3VjY2VzcyA9IDE7CQkvKiBTRVQgTElORSBzdWNjZWVkZWQgKi8KLQkgICAg bmV0d29yayA9IDE7CQkvKiBOZXR3b3JrIGNvbm5lY3Rpb24gKG5vdCBzZXJpYWwpICovCi0JICAg IGxvY2FsID0gMTsJCQkvKiBMb2NhbCBtb2RlIChub3QgcmVtb3RlKSAqLwotCSAgICBpZiAoKHJl bGlhYmxlICE9IFNFVF9PRkYgfHwgIXNldHJlbGlhYmxlKSkKLQkgICAgICByZWxpYWJsZSA9IFNF VF9PTjsJLyogVHJhbnNwb3J0IGlzIHJlbGlhYmxlIGVuZCB0byBlbmQgKi8KLSNpZmRlZiBPUzIK LSAgICAgICAgICAgIERpYWxlclNlbmQoT1BUX0tFUk1JVF9DT05ORUNULCAwKTsKLSNlbmRpZiAv KiBPUzIgKi8KLQkgICAgc2V0ZmxvdygpOwkJCS8qIFNldCBhcHByb3ByaWF0ZSBmbG93IGNvbnRy b2wgKi8KLQotCSAgICBoYXZlbGluZSA9IDE7Ci0jaWZkZWYgQ0tMT0dESUFMCi0jaWZkZWYgTkVU Q09OTgotCSAgICBkb2xvZ25ldCgpOwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNlbmRpZiAvKiBD S0xPR0RJQUwgKi8KLQotI2lmbmRlZiBOT1NQTAotCSAgICBpZiAobG9jYWwpIHsKLQkJaWYgKG5t YWMpIHsJCS8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KLQkJICAgIGludCBrOwkJLyogWWVzICov Ci0JCSAgICBrID0gbWxvb2sobWFjdGFiLCJvbl9vcGVuIixubWFjKTsgLyogTG9vayB0aGlzIHVw ICovCi0JCSAgICBpZiAoayA+PSAwKSB7CSAgICAgICAgICAgICAgLyogSWYgZm91bmQsICovCi0J CQlpZiAoZG9kbyhrLHNzaF9oc3QsMCkgPiAtMSkgICAvKiBzZXQgaXQgdXAsICovCi0JCQkgIHBh cnNlcigxKTsJCSAgICAgIC8qIGFuZCBleGVjdXRlIGl0ICovCi0JCSAgICB9Ci0JCX0KLQkgICAg fQotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZkZWYgTE9DVVMJCQotCSAgICBpZiAoYXV0b2xvY3Vz KQotCQlzZXRsb2N1cygxLDEpOwotI2VuZGlmIC8qIExPQ1VTICovCi0KLQkvKiBDb21tYW5kIHdh cyBjb25maXJtZWQgc28gd2UgY2FuIHByZS1wb3AgY29tbWFuZCBsZXZlbC4gKi8KLQkvKiBUaGlz IGlzIHNvIENPTk5FQ1QgbW9kdWxlIHdvbid0IHRoaW5rIHdlJ3JlIGV4ZWN1dGluZyBhICovCi0J Lyogc2NyaXB0IGlmIENPTk5FQ1Qgd2FzIHRoZSBmaW5hbCBjb21tYW5kIGluIHRoZSBzY3JpcHQu ICovCi0JICAgIGlmIChjbWRsdmwgPiAwKQotCSAgICAgIHByZXBvcCgpOwotCSAgICBzdWNjZXNz ID0gZG9jb25lY3QoMCxjbWRsdmwgPT0gMCA/IDEgOiAwKTsKLQkgICAgaWYgKHR0Y2hrKCkgPCAw KQotCSAgICAgIGRvbG9nZW5kKCk7Ci0JICAgIHJldHVybihzdWNjZXNzKTsKLQotCSAgY2FzZSBY U1NIX0NMUjoKLQkgICAgaWYgKCh5ID0gY21rZXkoc3NoY2xyLG5zc2hjbHIsIiIsIiIsIHh4c3Ry aW5nKSkgPCAwKSB7Ci0JICAgICAgICBpZiAoeSA9PSAtMykgewotCQkgICAgcHJpbnRmKCI/Y2xl YXIgd2hhdD9cbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCSAgICAgICAgcmV0dXJuKHkp OwotCSAgICB9Ci0JICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLQkgICAgICByZXR1cm4oeCk7 Ci0JICAgIHN3aXRjaCAoeSkgewotCSAgICAgIGNhc2UgU1NIQ19MUEY6Ci0gICAgICAgICAgICAg ICAgc3NoX3BmX2xjbF9uID0gMDsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSBTU0hDX1JQRjoKLQkJ c3NoX3BmX3JtdF9uID0gMDsKLQkJYnJlYWs7Ci0JICAgICAgZGVmYXVsdDoKLQkJcmV0dXJuKC0y KTsKLQkgICAgfQotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsJLyogb3Igd2hhdGV2 ZXIgKi8KLQotCSAgY2FzZSBYU1NIX0FHVDogewkJLyogU1NIIEFHRU5UICovCi0JICAgICAgaW50 IGRvZWFjaCA9IDA7Ci0JICAgICAgaWYgKCh5ID0gY21rZXkoc3NoYWdlbnQsbnNzaGFnZW50LCIi LCIiLHh4c3RyaW5nKSkgPCAwKQotCQlyZXR1cm4oeSk7Ci0JICAgICAgc3dpdGNoICh5KSB7Ci0J CWNhc2UgU1NIQV9BREQ6CQkvKiBTU0ggQUdFTlQgQUREIC4uLiAqLwotCQkgIGlmICgoeCA9IGNt aWZpKCJJZGVudGl0eSBmaWxlIiwiIiwmcywmeSx4eHN0cmluZykpIDwgMCkgewotI2lmbmRlZiBT U0hURVNUCi0JCSAgICAgIGlmICh4ID09IC0zKQkvKiBObyBuYW1lIGdpdmVuICovCi0JCQlkb2Vh Y2ggPSAxOwkvKiBzbyBkbyB0aGVtIGFsbCAqLwotCQkgICAgICBlbHNlCi0jZW5kaWYgLyogU1NI VEVTVCAqLwotCQkJcmV0dXJuKHgpOwotCQkgIH0KLQkJICBja3N0cm5jcHkobGluZSxzLExJTkJV RlNJWik7Ci0JCSAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotCQkgICAgcmV0dXJuKHgpOwotI2lm ZGVmIFNTSFRFU1QKLQkJICB4ID0gMDsKLSNlbHNlCi0JCSAgaWYgKGRvZWFjaCkgewotICAgICAg ICAgICAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgICAgICAgICAgIHggPSAwOwotICAg ICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzc2hfaWRmX247IGkrKykKLQkJCXgg Kz0gc3NoX2FnZW50X2FkZF9maWxlKHNzaF9pZGZbaV0pOwotCQkgIH0gZWxzZQotCQkgICAgeCA9 IHNzaF9hZ2VudF9hZGRfZmlsZShsaW5lKTsKLSNlbmRpZiAvKiBTU0hURVNUICovCi0JCSAgcmV0 dXJuKHN1Y2Nlc3MgPSAoeCA9PSAwKSk7Ci0KLQkJY2FzZSBTU0hBX0RFTDogewkvKiBTU0ggQUdF TlQgREVMRVRFIC4uLiAqLwotCQkgICAgaW50IGRvYWxsID0gMDsKLQkJICAgIGlmICgoeCA9IGNt aWZpKCJJZGVudGl0eSBmaWxlIiwiIiwmcywmeSx4eHN0cmluZykpIDwgMCkgewotI2lmbmRlZiBT U0hURVNUCi0JCQlpZiAoeCA9PSAtMykJLyogTm8gbmFtZSBnaXZlbiAqLwotCQkJICBkb2FsbCA9 IDE7CS8qIHNvIGRvIHRoZW0gYWxsICovCi0JCQllbHNlCi0jZW5kaWYgLyogU1NIVEVTVCAqLwot CQkJICByZXR1cm4oeCk7Ci0JCSAgICB9Ci0JCSAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJ Wik7Ci0JCSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0JCSAgICAgIHJldHVybih4KTsKLSNp ZmRlZiBTU0hURVNUCi0JCSAgICB4ID0gMDsKLSNlbHNlCi0JCSAgICBpZiAoZG9hbGwpCi0JCSAg ICAgIHggPSBzc2hfYWdlbnRfZGVsZXRlX2FsbCgpOwotCQkgICAgZWxzZQotCQkgICAgICB4ID0g c3NoX2FnZW50X2RlbGV0ZV9maWxlKGxpbmUpOwotI2VuZGlmIC8qIFNTSFRFU1QgKi8KLQkJICAg IHJldHVybihzdWNjZXNzID0gKHggPT0gMCkpOwotCQl9Ci0JCWNhc2UgU1NIQV9MU1Q6IHsKLQkJ ICAgIGludCBmaW5nZXJwcmludCA9IDA7Ci0JCSAgICBpZiAoKHkgPSBjbXN3aShzc2hhZ3Rzdyxu c3NoYWd0c3csIiIsIiIseHhzdHJpbmcpKSA8IDApIHsKLQkJCWlmICh5ICE9IC0zKQotCQkJICBy ZXR1cm4oeSk7Ci0JCSAgICB9IGVsc2UgaWYgKGNtZ2JyaygpID4gU1ApIHsKLQkJCXByaW50Zigi P1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwotCQkJcmV0dXJuKC05 KTsKLQkJICAgIH0gZWxzZSBpZiAoeSA9PSBTU0hBU1dfRlApIHsKLQkJCWZpbmdlcnByaW50ID0g MTsKLQkJICAgIH0KLQkJICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLQkJICAgICAgcmV0dXJu KHgpOwotI2lmZGVmIFNTSFRFU1QKLQkJICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0jZWxzZQot CQkgICAgcmV0dXJuKHN1Y2Nlc3MgPQotCQkJICAgKHNzaF9hZ2VudF9saXN0X2lkZW50aXRpZXMo ZmluZ2VycHJpbnQpID09IDApKTsKLSNlbmRpZiAvKiBTU0hURVNUICovCi0JCX0KLQkJZGVmYXVs dDoKLQkJICByZXR1cm4oLTIpOwotCSAgICAgIH0KLQkgIH0KLQkgIGNhc2UgWFNTSF9BREQ6IHsJ CS8qIFNTSCBBREQgKi8KLQkgICAgICAvKiBzc2ggYWRkIHsgbG9jYWwsIHJlbW90ZSB9IHBvcnQg aG9zdCBwb3J0ICovCi0JICAgICAgaW50IGN4LCBpLCBqLCBrOwotCSAgICAgIGNoYXIgKiBoOwot CSAgICAgIGlmICgoY3ggPSBjbWtleShhZGRmd2QsbmFkZGZ3ZCwiIiwiIiwgeHhzdHJpbmcpKSA8 IDApCi0JCXJldHVybihjeCk7Ci0JICAgICAgaWYgKCh4ID0gY21udW0oKGN4ID09IFNTSEZfTENM KSA/Ci0JCQkgICAgICJMb2NhbCBwb3J0IG51bWJlciIgOiAiUmVtb3RlIHBvcnQgbnVtYmVyIiwK LQkJCSAgICAgIiIsMTAsJmoseHhzdHJpbmcpKSA8IDApCi0JCXJldHVybih4KTsKLQkgICAgICBp ZiAoKHggPSBjbWZsZCgiSG9zdCIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JCXJldHVybih4KTsK LQkgICAgICBtYWtlc3RyKCZoLHMpOwotCSAgICAgIGlmICgoeCA9IGNtbnVtKCJQb3J0IiwiIiwx MCwmayx4eHN0cmluZykpIDwgMCkKLQkJcmV0dXJuKHgpOwotCSAgICAgIGlmICgoeCA9IGNtY2Zt KCkpIDwgMCkKLQkJcmV0dXJuKHgpOwotCi0JICAgICAgc3dpdGNoKGN4KSB7Ci0JCWNhc2UgU1NI Rl9MQ0w6Ci0JCSAgIGlmIChzc2hfcGZfbGNsX24gPT0gMzIpIHsKLQkJICAgICAgIHByaW50ZigK LSI/TWF4aW11bSBudW1iZXIgb2YgbG9jYWwgcG9ydCBmb3J3YXJkaW5ncyBhbHJlYWR5IHNwZWNp ZmllZFxuIgotCQkJICAgICApOwotCQkgICAgICAgZnJlZShoKTsKLQkJICAgICAgIHJldHVybihz dWNjZXNzID0gMCk7Ci0JCSAgfQotCQkgIHNzaF9wZl9sY2xbc3NoX3BmX2xjbF9uXS5wMSA9IGo7 Ci0JCSAgbWFrZXN0cigmKHNzaF9wZl9sY2xbc3NoX3BmX2xjbF9uXS5ob3N0KSxoKTsKLQkJICBt YWtlc3RyKCZoLE5VTEwpOwotCQkgIHNzaF9wZl9sY2xbc3NoX3BmX2xjbF9uXS5wMiA9IGs7Ci0J CSAgc3NoX3BmX2xjbF9uKys7Ci0JCSAgYnJlYWs7Ci0JCWNhc2UgU1NIRl9STVQ6Ci0JCSAgaWYg KHNzaF9wZl9ybXRfbiA9PSAzMikgewotCQkgICAgICBwcmludGYoCi0iP01heGltdW0gbnVtYmVy IG9mIHJlbW90ZSBwb3J0IGZvcndhcmRpbmdzIGFscmVhZHkgc3BlY2lmaWVkXG4iCi0JCQkgICAg KTsKLQkJICAgICAgZnJlZShoKTsKLQkJICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQkJICB9 Ci0JCSAgc3NoX3BmX3JtdFtzc2hfcGZfcm10X25dLnAxID0gajsKLQkJICBtYWtlc3RyKCYoc3No X3BmX3JtdFtzc2hfcGZfcm10X25dLmhvc3QpLGgpOwotCQkgIG1ha2VzdHIoJmgsTlVMTCk7Ci0J CSAgc3NoX3BmX3JtdFtzc2hfcGZfcm10X25dLnAyID0gazsKLQkJICBzc2hfcGZfcm10X24rKzsK LQkgICAgICB9Ci0JICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQkgIH0KLQkgIC8qIE5vdCBz dXBwb3J0aW5nIGFyYml0cmFyeSBmb3J3YXJkaW5nIHlldCAqLwotCSAgY2FzZSBYU1NIX0ZMUDoJ CS8qIFNTSCBGT1JXQVJELUxPQ0FMLVBPUlQgKi8KLQkgIGNhc2UgWFNTSF9GUlA6IHsJCS8qIFNT SCBGT1JXQVJELVJFTU9URS1QT1JUICovCi0JICAgICAgaW50IGxpX3BvcnQgPSAwOwotCSAgICAg IGludCB0b19wb3J0ID0gMDsKLQkgICAgICBjaGFyICogZndfaG9zdCA9IE5VTEw7Ci0JICAgICAg aW50IG47Ci0gICAgICAgICAgICAgIGlmICgoeCA9IGNtbnVtKGNtcmVzdWx0Lm5yZXN1bHQgPT0g WFNTSF9GTFAgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsLXBvcnQiOiJy ZW1vdGUtcG9ydCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwxMCwmbGlfcG9y dCx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAg ICAgICAgaWYgKGxpX3BvcnQgPCAxIHx8IGxpX3BvcnQgPiA2NTUzNSkgewotICAgICAgICAgICAg ICAgICAgcHJpbnRmKCI/T3V0IHJhbmdlIC0gbWluOiAxLCBtYXg6IDY1NTM1XG4iKTsKLSAgICAg ICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgIH0KLQkgICAgICBpZiAoKHgg PSBjbWZsZCgiaG9zdCIsc3NoX2hzdD9zc2hfaHN0OiIiLCZzLHh4c3RyaW5nKSkgPCAwKQotCQly ZXR1cm4oeCk7Ci0gICAgICAgICAgICAgIG4gPSBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0la KTsKLSAgICAgICAgICAgICAgZndfaG9zdCA9IHRtcGJ1ZjsKLSAgICAgICAgICAgICAgaWYgKCh4 ID0gY21udW0oImhvc3QtcG9ydCIsY2t1aXRvYShsaV9wb3J0KSwxMCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZ0b19wb3J0LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAg ICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICBpZiAodG9fcG9ydCA8IDEgfHwgdG9fcG9ydCA+ IDY1NTM1KSB7Ci0gICAgICAgICAgICAgICAgICBwcmludGYoIj9PdXQgcmFuZ2UgLSBtaW46IDEs IG1heDogNjU1MzVcbiIpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAg ICAgICAgfQotCSAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLQkJcmV0dXJuKHgpOwotCSAg ICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewotICAgICAgICAgICAgICAgIGNhc2UgWFNT SF9GTFA6CS8qIFNTSCBGT1JXQVJELUxPQ0FMLVBPUlQgKi8KLSNpZm5kZWYgU1NIVEVTVAotICAg ICAgICAgICAgICAgICAgc3NoX2Z3ZF9sb2NhbF9wb3J0KGxpX3BvcnQsZndfaG9zdCx0b19wb3J0 KTsKLSNlbmRpZiAvKiBTU0hURVNUICovCi0JCSAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQkJY2Fz ZSBYU1NIX0ZSUDoJLyogU1NIIEZPUldBUkQtUkVNT1RFLVBPUlQgKi8KLSNpZm5kZWYgU1NIVEVT VAotICAgICAgICAgICAgICAgICAgc3NoX2Z3ZF9yZW1vdGVfcG9ydChsaV9wb3J0LGZ3X2hvc3Qs dG9fcG9ydCk7Ci0jZW5kaWYgLyogU1NIVEVTVCAqLwotCQkgIHJldHVybihzdWNjZXNzID0gMSk7 Ci0JICAgICAgfQotCSAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0JICB9Ci0JY2FzZSBYU1NI X1YyOgkJLyogU1NIIFYyICovCi0JICBpZiAoKGN4ID0gY21rZXkoc3NoMnRhYixuc3NoMnRhYiwi IiwiIiwgeHhzdHJpbmcpKSA8IDApCi0JICAgIHJldHVybihjeCk7Ci0JICBzd2l0Y2ggKGN4KSB7 Ci0JICAgIGNhc2UgWFNTSDJfUktFOgotCSAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLQkJ cmV0dXJuKHgpOwotI2lmbmRlZiBTU0hURVNUCi0JICAgICAgc3NoX3YyX3Jla2V5KCk7Ci0jZW5k aWYgLyogU1NIVEVTVCAqLwotCSAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0JICAgIGRlZmF1 bHQ6Ci0JICAgICAgcmV0dXJuKC0yKTsKLQkgIH0KLQljYXNlIFhTU0hfS0VZOgotCSAgaWYgKChj eCA9IGNta2V5KHNzaGtleSxuc3Noa2V5LCIiLCIiLCB4eHN0cmluZykpIDwgMCkKLQkgICAgcmV0 dXJuKGN4KTsKLQkgIHN3aXRjaCAoY3gpIHsKLQkgICAgY2FzZSBTU0hLX1BBU1M6IHsJLyogQ2hh bmdlIHBhc3NwaHJhc2UgKi8KLQkgICAgICBjaGFyICogb2xkcCA9IE5VTEwsICogbmV3cCA9IE5V TEw7Ci0JICAgICAgc3RydWN0IEZEQiBkZiwgc3c7Ci0JICAgICAgY21mZGJpKCZzdywKLQkJICAg ICBfQ01LRVksCQkvKiBmY29kZSAqLwotCQkgICAgICJGaWxlbmFtZSwgb3Igc3dpdGNoIiwgLyog aGxwbXNnICovCi0JCSAgICAgIiIsCQkvKiBkZWZhdWx0ICovCi0JCSAgICAgIiIsCQkvKiBhZGR0 bCBzdHJpbmcgZGF0YSAqLwotCQkgICAgIDIsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRi bCBzaXplICovCi0JCSAgICAgNCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dp ICovCi0JCSAgICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0JCSAgICAg c3Noa3BzdywJCS8qIEtleXdvcmQgdGFibGUgKi8KLQkJICAgICAmZGYJCS8qIFBvaW50ZXIgdG8g bmV4dCBGREIgKi8KLQkJICAgICApOwotCSAgICAgIGNtZmRiaSgmZGYsCQkvKiAybmQgRkRCIC0g ZmlsZSBmb3IgZGlzcGxheSAqLwotCQkgICAgIF9DTUlGSSwJCS8qIG91dHB1dCBmaWxlICovCi0J CSAgICAgIiIsCQkvKiBobHBtc2cgKi8KLQkJICAgICAiIiwJCS8qIGRlZmF1bHQgKi8KLQkJICAg ICAiIiwJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0JCSAgICAgMCwJCQkvKiBhZGR0bCBudW1l cmljIGRhdGEgMSAqLwotCQkgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLQkJ ICAgICB4eHN0cmluZywKLQkJICAgICBOVUxMLAotCQkgICAgIE5VTEwKLQkJICAgICApOwotCSAg ICAgIGxpbmVbMF0gPSBOVUw7Ci0KLQkgICAgICB3aGlsZSAoMSkgewotCQkgIHggPSBjbWZkYigm c3cpOwotCQkgIGlmICh4ID09IC0zKSBicmVhazsKLQkJICBpZiAoeCA8IDApCi0JCSAgICByZXR1 cm4oeCk7Ci0JCSAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkKLQkJICAgIGJyZWFrOwot CQkgIGlmICghY21nYnJrKCkpIHsKLQkJICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWly ZXMgYW4gYXJndW1lbnRcbiIpOwotCQkgICAgICByZXR1cm4oLTkpOwotCQkgIH0KLQkJICBpZiAo KHkgPSBjbWZsZCgiUGFzc3BocmFzZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JCSAgICByZXR1 cm4oeSk7Ci0JCSAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7Ci0JCSAgICBjYXNlIDE6CQkv KiBPbGQgKi8KLQkJICAgICAgbWFrZXN0cigmb2xkcCxzKTsKLQkJICAgICAgYnJlYWs7Ci0JCSAg ICBjYXNlIDI6CQkvKiBOZXcgKi8KLQkJICAgICAgbWFrZXN0cigmbmV3cCxzKTsKLQkJICB9Ci0J ICAgICAgfQotCSAgICAgIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01JRkkpIHsgLyogRmlsZW5h bWUgKi8KLQkJICBja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7Ci0J CSAgaWYgKHpmbnFmcChsaW5lLFRNUEJVRlNJWix0bXBidWYpKQotCQkgICAgY2tzdHJuY3B5KGxp bmUsdG1wYnVmLExJTkJVRlNJWik7Ci0JICAgICAgfQotCSAgICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHgpOwotCi0jaWZuZGVmIFNTSFRFU1QKLQkgICAgICB4ID0gc3Noa2V5X2No YW5nZV9wYXNzcGhyYXNlKGxpbmVbMF0gPyBsaW5lIDogTlVMTCwKLQkJCQkJICAgICBvbGRwLCBu ZXdwKTsKLSNlbmRpZiAvKiBTU0hURVNUICovCi0JICAgICAgbWFrZXN0cigmb2xkcCxOVUxMKTsK LQkgICAgICBtYWtlc3RyKCZuZXdwLE5VTEwpOwotCSAgICAgIHN1Y2Nlc3MgPSAoeCA9PSAwKTsK LQkgICAgICByZXR1cm4oc3VjY2Vzcyk7Ci0JICAgIH0KLQkgICAgY2FzZSBTU0hLX0NSRUE6IHsJ LyogU1NIIEtFWSBDUkVBVEUgL3N3aXRjaGVzLi4uICovCi0JICAgICAgaW50IGJpdHMgPSAxMDI0 LCBrZXl0eXBlID0gU1NIS1RfMlI7Ci0JICAgICAgY2hhciAqIHBhc3MgPSBOVUxMLCAqIGNvbW1l bnQgPSBOVUxMOwotCSAgICAgIHN0cnVjdCBGREIgZGYsIHN3OwotCi0gICAgICAgICAgICAgIC8q Ci0gICAgICAgICAgICAgICAqIGNoYXIgKiBzc2hrZXlfZGVmYXVsdF9maWxlKGludCBrZXl0eXBl KSAKLSAgICAgICAgICAgICAgICogd2lsbCBwcm92aWRlIHRoZSBkZWZhdWx0IGZpbGVuYW1lIGZv ciBhIGdpdmVuIGtleXR5cGUKLSAgICAgICAgICAgICAgICogaXMgaXQgcG9zc2libGUgdG8gaGF2 ZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDJuZAotICAgICAgICAgICAgICAgKiBGREIgc2V0 IGFuZCBjaGFuZ2VkIHdoZW4gYSAvVFlQRSBzd2l0Y2ggaXMgcHJvdmlkZWQ/Ci0gICAgICAgICAg ICAgICAqIFdvdWxkIHRoaXMgYWxsb3cgZm9yIHRhYiBjb21wbGV0aW9uIG9mIHRoZSBmaWxlbmFt ZT8KLSAgICAgICAgICAgICAgICovCi0JICAgICAgY21mZGJpKCZzdywKLQkJICAgICBfQ01LRVks CQkvKiBmY29kZSAqLwotCQkgICAgICJGaWxlbmFtZSwgb3Igc3dpdGNoIiwgLyogaGxwbXNnICov Ci0JCSAgICAgIiIsCQkvKiBkZWZhdWx0ICovCi0JCSAgICAgIiIsCQkvKiBhZGR0bCBzdHJpbmcg ZGF0YSAqLwotCQkgICAgIG5zc2hrY3JlYSwJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwg c2l6ZSAqLwotCQkgICAgIDQsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAq LwotCQkgICAgIHh4c3RyaW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotCQkgICAgIHNz aGtjcmVhLAkJLyogS2V5d29yZCB0YWJsZSAqLwotCQkgICAgICZkZgkJLyogUG9pbnRlciB0byBu ZXh0IEZEQiAqLwotCQkgICAgICk7Ci0JICAgICAgY21mZGJpKCZkZiwJCS8qIDJuZCBGREIgLSBm aWxlIGZvciBkaXNwbGF5ICovCi0JCSAgICAgX0NNT0ZJLAkJLyogb3V0cHV0IGZpbGUgKi8KLQkJ ICAgICAiIiwJCS8qIGhscG1zZyAqLwotCQkgICAgICIiLAkJLyogZGVmYXVsdCAqLwotCQkgICAg ICIiLAkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkJICAgICAwLAkJCS8qIGFkZHRsIG51bWVy aWMgZGF0YSAxICovCi0JCSAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotCQkg ICAgIHh4c3RyaW5nLAotCQkgICAgIE5VTEwsCi0JCSAgICAgTlVMTAotCQkgICAgICk7Ci0JICAg ICAgbGluZVswXSA9IE5VTDsKLQotCSAgICAgIHdoaWxlICgxKSB7Ci0JCSAgeCA9IGNtZmRiKCZz dyk7Ci0JCSAgaWYgKHggPT0gLTMpIGJyZWFrOwotCQkgIGlmICh4IDwgMCkKLQkJICAgIHJldHVy bih4KTsKLQkJICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKQotCQkgICAgYnJlYWs7Ci0J CSAgaWYgKCFjbWdicmsoKSkgewotCQkgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJl cyBhbiBhcmd1bWVudFxuIik7Ci0JCSAgICAgIHJldHVybigtOSk7Ci0JCSAgfQotCQkgIHN3aXRj aCAoY21yZXN1bHQubnJlc3VsdCkgewotCQkgICAgY2FzZSBTU0hLQ19CSToJLyogL0JJVFM6biAq LwotCQkgICAgICBpZiAoKHkgPSBjbW51bSgiIiwiMTAyNCIsMTAsJnoseHhzdHJpbmcpKSA8IDAp Ci0JCQlyZXR1cm4oeSk7Ci0JCSAgICAgIGlmICh6IDwgNTEyIHx8IHogPiA0MDk2KSB7Ci0JCQkg IHByaW50ZigiP091dCByYW5nZSAtIG1pbjogNTEyLCBtYXg6IDQwOTZcbiIpOwotCQkJICByZXR1 cm4oLTkpOwotCQkgICAgICB9Ci0JCSAgICAgIGJpdHMgPSB6OwotCQkgICAgICBicmVhazsKLQkJ ICAgIGNhc2UgU1NIS0NfUFA6CS8qIC9QQVNTUEhSQVNFOmJsYWggKi8KLQkJICAgICAgaWYgKCh5 ID0gY21mbGQoIlBhc3NwaHJhc2UiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotCQkJcmV0dXJuKHkp OwotCQkgICAgICBtYWtlc3RyKCZwYXNzLHMpOwotCQkgICAgICBicmVhazsKLQkJICAgIGNhc2Ug U1NIS0NfVFk6CS8qIC9UWVBFOmtleXdvcmQgKi8KLQkJICAgICAgaWYgKCh5ID0gY21rZXkoc3No a2N0eSxuc3Noa2N0eSwiIiwKLQkJCQkgICAgICJ2Mi1yc2EiLHh4c3RyaW5nKSkgPCAwKQotCQkJ cmV0dXJuKHkpOwotCQkgICAgICBrZXl0eXBlID0geTsKLQkJICAgICAgYnJlYWs7Ci0JCSAgICBj YXNlIFNTSEtDXzFSOgkvKiAvQ09NTUVOVCAqLwotCQkgICAgICBpZiAoKHkgPSBjbWZsZCgiVGV4 dCIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JCQlyZXR1cm4oeSk7Ci0JCSAgICAgIG1ha2VzdHIo JmNvbW1lbnQscyk7Ci0JCSAgICAgIGJyZWFrOwotCQkgIH0KLQkgICAgICB9Ci0JICAgICAgaWYg KGNtcmVzdWx0LmZjb2RlID09IF9DTU9GSSkgeyAvKiBGaWxlbmFtZSAqLwotICAgICAgICAgICAg ICAgICAgaWYgKGNtcmVzdWx0LnNyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICBja3N0 cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7Ci0gICAgICAgICAgICAgICAg ICAgICAgaWYgKHpmbnFmcChsaW5lLFRNUEJVRlNJWix0bXBidWYpKQotICAgICAgICAgICAgICAg ICAgICAgICAgICBja3N0cm5jcHkobGluZSx0bXBidWYsTElOQlVGU0laKTsKLQkJICB9Ci0JICAg ICAgfQotCSAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgLyogQ29uZmlybSAqLwotCQlyZXR1 cm4oeSk7Ci0jaWZuZGVmIFNTSFRFU1QKLQkgICAgICB4ID0gc3Noa2V5X2NyZWF0ZShsaW5lWzBd ID8gbGluZSA6IE5VTEwsCi0JCQkJYml0cywgcGFzcywga2V5dHlwZSwgY29tbWVudCk7Ci0JICAg ICAgaWYgKHBhc3MpCi0JCW1lbXNldChwYXNzLDAsc3RybGVuKHBhc3MpKTsKLSNlbmRpZiAvKiBT U0hURVNUICovCi0JICAgICAgbWFrZXN0cigmcGFzcyxOVUxMKTsKLQkgICAgICBtYWtlc3RyKCZj b21tZW50LE5VTEwpOwotCSAgICAgIHJldHVybihzdWNjZXNzID0gKHggPT0gMCkpOwotCSAgICB9 Ci0JICAgIGNhc2UgU1NIS19ESVNQOiB7CS8qIFNTSCBLRVkgRElTUExBWSAvc3dpdGNoZXMuLi4g Ki8KLQkgICAgICBjaGFyIGM7Ci0JICAgICAgaW50IGluZm10ID0gMCwgb3V0Zm10ID0gMDsKLQkg ICAgICBzdHJ1Y3QgRkRCIGRmLCBzdzsKLQkgICAgICBjbWZkYmkoJnN3LAotCQkgICAgIF9DTUtF WSwJCS8qIGZjb2RlICovCi0JCSAgICAgIkZpbGVuYW1lLCBvciBzd2l0Y2giLCAvKiBobHBtc2cg Ki8KLQkJICAgICAiIiwJCS8qIGRlZmF1bHQgKi8KLQkJICAgICAiIiwJCS8qIGFkZHRsIHN0cmlu ZyBkYXRhICovCi0JCSAgICAgbnNzaGRzd2ksCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJs IHNpemUgKi8KLQkJICAgICA0LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kg Ki8KLQkJICAgICB4eHN0cmluZywJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLQkJICAgICBz c2hkc3dpLAkJLyogS2V5d29yZCB0YWJsZSAqLwotCQkgICAgICZkZgkJLyogUG9pbnRlciB0byBu ZXh0IEZEQiAqLwotCQkgICAgICk7Ci0JICAgICAgY21mZGJpKCZkZiwJCS8qIDJuZCBGREIgLSBm aWxlIGZvciBkaXNwbGF5ICovCi0JCSAgICAgX0NNSUZJLAkJLyogZmNvZGUgKi8KLQkJICAgICAi IiwJCS8qIGhscG1zZyAqLwotCQkgICAgICIiLAkJLyogZGVmYXVsdCAqLwotCQkgICAgICIiLAkJ LyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkJICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0 YSAxICovCi0JCSAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotCQkgICAgIHh4 c3RyaW5nLAotCQkgICAgIE5VTEwsCi0JCSAgICAgTlVMTAotCQkgICAgICk7Ci0JICAgICAgbGlu ZVswXSA9IE5VTDsKLQotCSAgICAgIHdoaWxlICgxKSB7Ci0JCSAgeCA9IGNtZmRiKCZzdyk7Ci0J CSAgaWYgKHggPT0gLTMpIGJyZWFrOwotCQkgIGlmICh4IDwgMCkKLQkJICAgIHJldHVybih4KTsK LQkJICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKQotCQkgICAgYnJlYWs7Ci0JCSAgaWYg KCFjbWdicmsoKSkgewotCQkgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBh cmd1bWVudFxuIik7Ci0JCSAgICAgIHJldHVybigtOSk7Ci0JCSAgfQotCQkgIHN3aXRjaCAoY21y ZXN1bHQubnJlc3VsdCkgewotI2lmZGVmIENPTU1FTlQKLQkJICAgIGNhc2UgU1NIS0RfSU46CS8q IC9JTi1GT1JNQVQ6ICovCi0JCSAgICAgIGlmICgoeSA9IGNta2V5KHNzaGRpZm10LG5zc2hkaWZt dCwKLQkJCQkgICAgICIiLCIiLHh4c3RyaW5nKSkgPCAwKQotCQkJcmV0dXJuKHkpOwotCQkgICAg ICBpbmZtdCA9IHk7Ci0JCSAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJICAg IGNhc2UgU1NIS0RfT1VUOgkvKiAvRk9STUFUOiAqLwotCQkgICAgICBpZiAoKHkgPSBjbWtleShz c2hkb2ZtdCxuc3NoZG9mbXQsCi0JCQkJICAgICAiIiwiIix4eHN0cmluZykpIDwgMCkKLQkJCXJl dHVybih5KTsKLQkJICAgICAgb3V0Zm10ID0geTsKLQkJICAgICAgYnJlYWs7Ci0JCSAgfQotCSAg ICAgIH0KLQkgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNSUZJKSB7IC8qIEZpbGVuYW1l ICovCi0JCSAgY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOwotCQkg IGlmICh6Zm5xZnAobGluZSxUTVBCVUZTSVosdG1wYnVmKSkKLQkJICAgIGNrc3RybmNweShsaW5l LHRtcGJ1ZixMSU5CVUZTSVopOwotCSAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0JICAgICAgaWYg KCFsaW5lWzBdKSB7Ci0JCSAgcHJpbnRmKCI/S2V5IGZpbGVuYW1lIHJlcXVpcmVkXG4iKTsKLQkJ ICByZXR1cm4oLTkpOwotCSAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgICAgaWYg KCh5ID0gY21jZm0oKSkgPCAwKSAvKiBDb25maXJtICovCi0JCXJldHVybih5KTsKLSNpZm5kZWYg U1NIVEVTVAotCSAgICAgIHN3aXRjaCAob3V0Zm10KSB7Ci0JCWNhc2UgU0tERl9PU1NIOgotICAg ICAgICAgICAgICAgICAgLyogMm5kIHBhcmFtIGlzIG9wdGlvbmFsIHBhc3NwaHJhc2UgKi8KLQkJ ICB4ID0gc3Noa2V5X2Rpc3BsYXlfcHVibGljKGxpbmVbMF0gPyBsaW5lIDogTlVMTCwgTlVMTCk7 Ci0JCSAgYnJlYWs7Ci0JCWNhc2UgU0tERl9TU0hDOgotICAgICAgICAgICAgICAgICAgLyogMm5k IHBhcmFtIGlzIG9wdGlvbmFsIHBhc3NwaHJhc2UgKi8KLQkJICB4ID0gc3Noa2V5X2Rpc3BsYXlf cHVibGljX2FzX3NzaDIobGluZVswXSA/IGxpbmUgOiBOVUxMLAotCQkJCQkJICAgIE5VTEwpOwot CQkgIGJyZWFrOwotCQljYXNlIFNLREZfSUVURjoKLQkJICB4ID0gc3Noa2V5X2Rpc3BsYXlfZmlu Z2VycHJpbnQobGluZVswXSA/IGxpbmUgOiBOVUxMLCAxKTsKLQkJICBicmVhazsKLQkJY2FzZSBT S0RGX0ZJTkc6Ci0JCSAgeCA9IHNzaGtleV9kaXNwbGF5X2ZpbmdlcnByaW50KGxpbmVbMF0gPyBs aW5lIDogTlVMTCwgMCk7Ci0JCSAgYnJlYWs7Ci0JICAgICAgfQotI2VuZGlmIC8qIFNTSFRFU1Qg Ki8KLQkgICAgICByZXR1cm4oc3VjY2VzcyA9ICh4ID09IDApKTsKLQkgICAgfQotCSAgICBjYXNl IFNTSEtfVjE6CQkvKiBTU0ggS0VZIFYxIFNFVC1DT01NRU5UICovCi0JICAgICAgaWYgKCh4ID0g Y21rZXkoc3Noa3YxLDEsIiIsInNldC1jb21tZW50IiwgeHhzdHJpbmcpKSA8IDApCi0JCXJldHVy bih4KTsKLQkgICAgICBpZiAoeCAhPSAxKSByZXR1cm4oLTIpOwotCSAgICAgIGlmICgoeCA9IGNt aWZpKCJLZXkgZmlsZSBuYW1lIiwiIiwmcywmeSx4eHN0cmluZykpIDwgMCkgewotCQkgIGlmICh4 ID09IC0zKSB7Ci0JCSAgICAgIHByaW50ZigiP05hbWUgb2Yga2V5IGZpbGUgcmVxdWlyZWRcbiIp OwotCQkgICAgICByZXR1cm4oLTkpOwotCQkgIH0KLQkgICAgICB9Ci0JICAgICAgY2tzdHJuY3B5 KGxpbmUscyxMSU5CVUZTSVopOwotCSAgICAgIGlmICgoeCA9IGNtdHh0KCJDb21tZW50IHRleHQi LCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotCQlyZXR1cm4oeCk7Ci0jaWZuZGVmIFNTSFRFU1QKLQkg ICAgICB4ID0gc3Noa2V5X3YxX2NoYW5nZV9jb21tZW50KGxpbmUsICAvKiBmaWxlbmFtZSAqLwot CQkJCQkgICBzLCAgICAgLyogbmV3IGNvbW1lbnQgKi8KLQkJCQkJICAgTlVMTCAgIC8qIHBhc3Nw aHJhc2UgKi8KLQkJCQkJICAgKTsKLSNlbmRpZiAvKiBTU0hURVNUICovCi0JICAgICAgc3VjY2Vz cyA9ICh4ID09IDApOwotCSAgICAgIHJldHVybihzdWNjZXNzKTsKLQkgIH0KLQkgIGRlZmF1bHQ6 Ci0JICAgIHJldHVybigtMik7Ci0JfQotI2Vsc2UgIC8qIFNTSEJVSUxUSU4gKi8KLSNpZmRlZiBT U0hDTUQKLQl4ID0gbmV0dHlwZTsKLQlpZiAoKHkgPSBzZXRsaW4oWFhTU0gsMCwxKSkgPCAwKSB7 Ci0JICAgIGlmIChlcnJubykKLQkgICAgICBwcmludGYoIj8lc1xuIixja19lcnJzdHIoKSk7Ci0g ICAgICAgICAgICBlbHNlCi0jaWZkZWYgQ09NTUVOVAotCSAgICAvKiBUaGlzIGlzbid0IHJpZ2h0 IGVpdGhlciBiZWNhdXNlIGl0IGNhdGNoZXMgY29tbWFuZCBlZGl0aW5nICovCi0JICAgICAgcHJp bnRmKCI/U29ycnksIHBzZXVkb3Rlcm1pbmFsIG9wZW4gZmFpbGVkXG4iKTsKLSAgICAgICAgICAg IGlmIChoaW50cykKLQkgICAgICBwcmludGYoIkhpbnQ6IFRyeSBcInNzaCAtdCAlc1wiXG4iLGxp bmUpOwotI2Vsc2UKLQkgICAgICByZXR1cm4oeSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAg ICBuZXR0eXBlID0geDsJCS8qIEZhaWxlZCwgcmVzdG9yZSBuZXQgdHlwZS4gKi8KLQkgICAgdHRu cHJvdG8gPSB6OwkJLyogYW5kIHByb3RvY29sICovCi0JICAgIHN1Y2Nlc3MgPSAwOwotCX0KLQlk aWRzZXRsaW4rKzsKLQluZXRzYXZlID0geDsKLQlyZXR1cm4oeSk7Ci0jZW5kaWYgLyogU1NIQ01E ICovCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotICAgIH0KLSNlbmRpZiAvKiBBTllTU0ggKi8K LQotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICBpZiAoY3ggPT0gWFhTS1JNKSB7CQkJLyogU0tFUk1J VCAoU2VjdXJlIFNoZWxsIEtlcm1pdCkgKi8KLQlleHRlcm4gaW50IG5ldHNhdmU7Ci0JaW50IGss IHgsIGhhdmVob3N0ID0gMCwgdHJpcHMgPSAwOwotICAgICAgICBpbnQgICAgdG1wdmVyID0gLTEs IHRtcHhmdyA9IC0xOwotI2lmbmRlZiBTU0hURVNUCi0gICAgICAgIGV4dGVybiBpbnQgc2xfc3No X3hmdywgc2xfc3NoX3hmd19zYXZlZDsKLSAgICAgICAgZXh0ZXJuIGludCBzbF9zc2hfdmVyLCBz bF9zc2hfdmVyX3NhdmVkOwotI2VuZGlmIC8qIFNTSFRFU1QgKi8KLSAgICAgICAgZXh0ZXJuIGlu dCBtZG10eXAsIG1kbXNhdiwgY3h0eXBlLCBzbF91aWRfc2F2ZWQ7Ci0gICAgICAgIGV4dGVybiBj aGFyICogc2xtc2c7Ci0JZXh0ZXJuIGNoYXIgdWlkYnVmW10sIHNsX3VpZGJ1ZltdOwotICAgICAg ICBleHRlcm4gY2hhciBwd2J1ZltdLCAqIGdfcHN3ZDsKLSAgICAgICAgZXh0ZXJuIGludCBwd2Zs ZywgcHdjcnlwdCwgZ19wZmxnLCBnX3BjcHQsIG5vbG9jYWw7Ci0Jc3RydWN0IEZEQiBzdywga3cs IGZsOwotCi0gICAgICAgIGlmIChzc2hfdG1wc3RyKQotCSAgbWVtc2V0KHNzaF90bXBzdHIsMCxz dHJsZW4oc3NoX3RtcHN0cikpOwotICAgICAgICBtYWtlc3RyKCZzc2hfdG1wc3RyLE5VTEwpOwot ICAgICAgICBtYWtlc3RyKCZzc2hfdG1wdWlkLE5VTEwpOwotICAgICAgICBtYWtlc3RyKCZzc2hf dG1wY21kLE5VTEwpOwotICAgICAgICBtYWtlc3RyKCZzc2hfdG1wcG9ydCxOVUxMKTsKLQotCWNt ZmRiaSgma3csCQkJLyogMXN0IEZEQiAtIGNvbW1hbmRzICovCi0JICAgICAgIF9DTUtFWSwJCQkv KiBmY29kZSAqLwotCSAgICAgICAiaG9zdCBbIHBvcnQgXSxcbiBvciBhY3Rpb24iLCAvKiBobHBt c2cgKi8KLQkgICAgICAgIiIsCQkJLyogZGVmYXVsdCAqLwotCSAgICAgICAiIiwJCQkvKiBhZGR0 bCBzdHJpbmcgZGF0YSAqLwotCSAgICAgICBuc3Noa2VybWl0LAkJLyogYWRkdGwgbnVtZXJpYyBk YXRhIDE6IHRibCBzaXplICovCi0JICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6 IDAgPSBrZXl3b3JkICovCi0JICAgICAgIHh4c3RyaW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlv biAqLwotCSAgICAgICBzc2hrZXJtaXQsCQkvKiBLZXl3b3JkIHRhYmxlICovCi0JICAgICAgICZm bAkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLQkgICAgICAgKTsKLQljbWZkYmkoJmZsLAkJ CS8qIEhvc3QgKi8KLQkgICAgICAgX0NNRkxELAkJCS8qIGZjb2RlICovCi0JICAgICAgICIiLAkJ CS8qIGhscG1zZyAqLwotCSAgICAgICAiIiwJCQkvKiBkZWZhdWx0ICovCi0JICAgICAgICIiLAkJ CS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0JICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBk YXRhIDEgKi8KLQkgICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotCSAgICAg ICB4eHN0cmluZywKLQkgICAgICAgTlVMTCwKLQkgICAgICAgTlVMTAotCSAgICAgICApOwotCi0J eCA9IGNtZmRiKCZrdyk7Ci0JaWYgKHggPT0gLTMpIHsKLQkgICAgcHJpbnRmKCI/c2tlcm1pdCB3 aGF0P1xuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCWlmICh4IDwgMCkKLQkgIHJldHVybih4 KTsKLQloYXZlaG9zdCA9IDA7Ci0JaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUZMRCkgewotCSAg ICBoYXZlaG9zdCA9IDE7Ci0JICAgIGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElO QlVGU0laKTsgLyogSG9zdG5hbWUgKi8KLQkgICAgY21yZXN1bHQubnJlc3VsdCA9IFNLUk1fT1BO OwotCX0KLQlzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsJLyogU1NIIGtleXdvcmQgKi8KLQkg IGNhc2UgU0tSTV9PUE46CQkvKiBTU0ggT1BFTiAqLwotCSAgICBpZiAoIWhhdmVob3N0KSB7Ci0J CWlmICgoeCA9IGNtZmxkKCJIb3N0IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLQkJICByZXR1cm4o eCk7Ci0JCWNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLQkgICAgfQotCSAgICAvKiBQYXJz ZSBbIHBvcnQgXSBbIHN3aXRjaGVzIF0gKi8KLQkgICAgY21mZGJpKCZrdywJCQkvKiBTd2l0Y2hl cyAqLwotCQkgICBfQ01LRVksCi0JCSAgICJQb3J0IG51bWJlciBvciBzZXJ2aWNlIG5hbWUsXG5v ciBzd2l0Y2giLAotCQkgICAiIiwKLQkJICAgIiIsCi0JCSAgIG5zc2hrcm1vcG5zdywKLQkJICAg NCwKLQkJICAgeHhzdHJpbmcsCi0JCSAgIHNzaGtybW9wbnN3LAotCQkgICAmZmwKLQkJICAgKTsK LQkgICAgY21mZGJpKCZmbCwJCQkvKiBQb3J0IG51bWJlciBvciBzZXJ2aWNlIG5hbWUgKi8KLQkJ ICAgX0NNRkxELAotCQkgICAiIiwKLQkJICAgIiIsCi0JCSAgICIiLAotCQkgICAwLAotCQkgICAw LAotCQkgICB4eHN0cmluZywKLQkJICAgTlVMTCwKLQkJICAgTlVMTAotCQkgICApOwotCSAgICB0 cmlwcyA9IDA7CQkJLyogRXhwbGFpbmVkIGJlbG93ICovCi0JICAgIHdoaWxlICgxKSB7CQkJLyog UGFyc2UgcG9ydCBhbmQgc3dpdGNoZXMgKi8KLQkJeCA9IGNtZmRiKCZrdyk7CQkvKiBHZXQgYSBm aWVsZCAqLwotCQlpZiAoeCA9PSAtMykJCS8qIFVzZXIgdHlwZWQgQ1Igc28gcXVpdCBmcm9tIGxv b3AgKi8KLQkJICBicmVhazsKLQkJaWYgKHggPCAwKQkJLyogT3RoZXIgcGFyc2UgZXJyb3IsIHBh c3MgaXQgYmFjayAqLwotCQkgIHJldHVybih4KTsKLQkJc3dpdGNoIChjbXJlc3VsdC5mY29kZSkg eyAvKiBGaWVsZCBvciBLZXl3b3JkPyAqLwotICAgICAgICAgICAgICAgICAgY2FzZSBfQ01GTEQ6 CQkgIC8qIEZpZWxkICovCi0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF90bXBwb3J0 LGNtcmVzdWx0LnNyZXN1bHQpOwotCQkgICAgYnJlYWs7Ci0JCSAgY2FzZSBfQ01LRVk6CQkvKiBL ZXl3b3JkICovCi0JCSAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsJLyogV2hpY2ggb25l PyAqLwotCQkgICAgICBjYXNlIFNTSFNXX1VTUjoJICAgICAgICAvKiAvVVNFUjogKi8KLQkJCWlm ICghY21nYnJrKCkpIHsKLQkJCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBh cmd1bWVudFxuIik7Ci0JCQkgICAgcmV0dXJuKC05KTsKLQkJCX0KLQkJCWlmICgoeSA9IGNtZmxk KCJVc2VybmFtZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JCQkgIHJldHVybih5KTsKLQkJCXMg PSBicnN0cmlwKHMpOwotCQkJbWFrZXN0cigmc3NoX3RtcHVpZCxzKTsKLQkJCWJyZWFrOwotICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgU1NIU1dfUFdEOgotCQkJaWYgKCFjbWdicmsoKSkgewot CQkJICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLQkJ CSAgICByZXR1cm4oLTkpOwotCQkJfQotCQkJZGVib2sgPSAwOwotCQkJaWYgKCh4ID0gY21mbGQo IlBhc3N3b3JkIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewotCQkJICAgIGlmICh4ID09IC0zKSB7 Ci0JCQkJbWFrZXN0cigmc3NoX3RtcHN0ciwiIik7Ci0JCQkgICAgfSBlbHNlIHsKLQkJCQlyZXR1 cm4oeCk7Ci0JCQkgICAgfQotCQkJfSBlbHNlIHsKLQkJCSAgICBzID0gYnJzdHJpcChzKTsKLQkJ CSAgICBpZiAoKHggPSAoaW50KXN0cmxlbihzKSkgPiBQV0JVRkwpIHsKLQkJCQltYWtlc3RyKCZz bG1zZywiSW50ZXJuYWwgZXJyb3IiKTsKLQkJCQlwcmludGYoIj9Tb3JyeSwgdG9vIGxvbmcgLSBt YXggPSAlZFxuIixQV0JVRkwpOwotCQkJCXJldHVybigtOSk7Ci0JCQkgICAgfQotCQkJICAgIG1h a2VzdHIoJnNzaF90bXBzdHIscyk7Ci0JCQl9Ci0JCQlicmVhazsKLQotICAgICAgICAgICAgICAg ICAgICBjYXNlIFNTSFNXX1ZFUjoKLQkJCWlmICgoeCA9IGNtbnVtKCJOdW1iZXIiLCIiLDEwLCZ6 LHh4c3RyaW5nKSkgPCAwKQotCQkJICByZXR1cm4oeCk7Ci0JCQlpZiAoeiA8IDEgfHwgeiA+IDIp IHsKLQkJCSAgICBwcmludGYoIj9PdXQgb2YgcmFuZ2U6ICVkXG4iLHopOwotCQkJICAgIHJldHVy bigtOSk7Ci0JCQl9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bXB2ZXIgPSB6OwotCQkJYnJl YWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4oLTIpOwotCQkgICAgfQotICAgICAgICAgICAgICAgICAgfQotCQlpZiAodHJpcHMr KyA9PSAwKSB7CS8qIEFmdGVyIGZpcnN0IHRpbWUgdGhyb3VnaCAqLwotCQkgICAgY21mZGJpKCZr dywJCS8qIG9ubHkgcGFyc2Ugc3dpdGNoZXMsIG5vdCBwb3J0LiAqLwotCQkJICAgX0NNS0VZLAot CQkJICAgIlN3aXRjaCIsCi0JCQkgICAiIiwKLQkJCSAgICIiLAotCQkJICAgbnNzaGtybW9wbnN3 LAotCQkJICAgNCwKLQkJCSAgIHh4c3RyaW5nLAotCQkJICAgc3Noa3Jtb3Buc3csCi0JCQkgICBO VUxMCi0JCQkgICApOwotCQl9Ci0JICAgIH0KLQkgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQkv KiBHZXQgY29uZmlybWF0aW9uICovCi0JICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICBp ZiAoY2xza2Nvbm54KDEpIDwgMCkgewkvKiBDbG9zZSBjdXJyZW50IEtlcm1pdCBjb25uZWN0aW9u ICovCi0gICAgICAgICAgICAgICAgICBpZiAoIHNzaF90bXBzdHIgKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgbWVtc2V0KHNzaF90bXBzdHIsMCxzdHJsZW4oc3NoX3RtcHN0cikpOwotICAgICAg ICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF90bXBzdHIsTlVMTCk7Ci0gICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9oc3QsbGluZSk7CS8qIFN0YXNoIGV2 ZXJ5dGhpbmcgKi8KLSAgICAgICAgICAgICAgaWYgKHNzaF90bXB1aWQpIHsKLSAgICAgICAgICAg ICAgICAgIGlmICghc2xfdWlkX3NhdmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2tzdHJu Y3B5KHNsX3VpZGJ1Zix1aWRidWYsVUlEQlVGTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgICBz bF91aWRfc2F2ZWQgPSAxOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg Y2tzdHJuY3B5KHVpZGJ1Zixzc2hfdG1wdWlkLFVJREJVRkxFTik7Ci0gICAgICAgICAgICAgICAg ICBtYWtlc3RyKCZzc2hfdG1wdWlkLE5VTEwpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgIGlmIChzc2hfdG1wcG9ydCkgewotICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3By dCxzc2hfdG1wcG9ydCk7Ci0gICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfdG1wcG9ydCxO VUxMKTsKLSAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICBtYWtlc3RyKCZz c2hfcHJ0LE5VTEwpOwotCi0gICAgICAgICAgICAgIC8qIFNldCB0aGUgU3Vic3lzdGVtIHRvIEtl cm1pdCAqLwotICAgICAgICAgICAgICBzc2hfY2FzID0gMTsKLSAgICAgICAgICAgICAgbWFrZXN0 cigmc3NoX2NtZCwia2VybWl0Iik7Ci0KLSAgICAgICAgICAgICAgaWYgKHRtcHZlciA+IC0xKSB7 Ci0jaWZuZGVmIFNTSFRFU1QKLSAgICAgICAgICAgICAgICAgIGlmICghc2xfc3NoX3Zlcl9zYXZl ZCkgewotICAgICAgICAgICAgICAgICAgICAgIHNsX3NzaF92ZXIgPSBzc2hfdmVyOwotICAgICAg ICAgICAgICAgICAgICAgIHNsX3NzaF92ZXJfc2F2ZWQgPSAxOwotICAgICAgICAgICAgICAgICAg fQotI2VuZGlmIC8qIFNTSFRFU1QgKi8KLSAgICAgICAgICAgICAgICAgIHNzaF92ZXIgPSB0bXB2 ZXI7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLyogRGlzYWJsZSBYMTEgRm9yd2Fy ZGluZyAqLwotI2lmbmRlZiBTU0hURVNUCi0gICAgICAgICAgICAgIGlmICghc2xfc3NoX3hmd19z YXZlZCkgewotICAgICAgICAgICAgICAgICAgc2xfc3NoX3hmdyA9IHNzaF94Znc7Ci0gICAgICAg ICAgICAgICAgICBzbF9zc2hfeGZ3X3NhdmVkID0gMTsKLSAgICAgICAgICAgICAgfQotI2VuZGlm IC8qIFNTSFRFU1QgKi8KLSAgICAgICAgICAgICAgc3NoX3hmdyA9IDA7Ci0KLSAgICAgICAgICAg ICAgaWYgKHNzaF90bXBzdHIpIHsKLSAgICAgICAgICAgICAgICAgIGlmIChzc2hfdG1wc3RyWzBd KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHB3YnVmLHNzaF90bXBzdHIsUFdC VUZMKzEpOwotICAgICAgICAgICAgICAgICAgICAgIHB3ZmxnID0gMTsKLSAgICAgICAgICAgICAg ICAgICAgICBwd2NyeXB0ID0gMDsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg ICAgICAgICAgICAgIHB3ZmxnID0gMDsKLSAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF90 bXBzdHIsTlVMTCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgbmV0dHlwZSA9IE5F VF9TU0g7Ci0gICAgICAgICAgICAgIGlmIChtZG1zYXYgPCAwKQotICAgICAgICAgICAgICAgICAg bWRtc2F2ID0gbWRtdHlwOwotICAgICAgICAgICAgICBtZG10eXAgPSAtbmV0dHlwZTsKLSAgICAg ICAgICAgICAgeCA9IDE7Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgIG1ha2VzdHIoJmdf cHN3ZCxwd2J1Zik7CS8qIFNhdmUgZ2xvYmFsIHB3YnVmICovCi0gICAgICAgICAgICBnX3BmbGcg PSBwd2ZsZzsJCS8qIGFuZCBmbGFnICovCi0gICAgICAgICAgICBnX3BjcHQgPSBwd2NyeXB0Owot I2VuZGlmIC8qIE5PU1BMICovCi0KLQkgICAgLyogTGluZSBwYXJhbWV0ZXIgdG8gdHRvcGVuKCkg aXMgaWdub3JlZCAqLwotCSAgICBrID0gdHRvcGVuKGxpbmUsJngsbWRtdHlwLCAwKTsKLQkgICAg aWYgKGsgPCAwKSB7Ci0JCXByaW50ZigiP1VuYWJsZSB0byBjb25uZWN0IHRvICVzXG4iLHNzaF9o c3QpOwotCQltZG10eXAgPSBtZG1zYXY7Ci0gICAgICAgICAgICAgICAgc2xyZXN0b3IoKTsKLQkJ cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQkgICAgfQotCSAgICBkdXBsZXggPSAwOyAgICAgICAgICAg ICAvKiBSZW1vdGUgZWNobyAqLwotCSAgICBja3N0cm5jcHkodHRuYW1lLGxpbmUsVFROQU1MRU4p OyAvKiBSZWNvcmQgdGhlIGNvbW1hbmQgKi8KLQkgICAgZGVidWcoRjExMCwic3NoIHR0bmFtZSIs dHRuYW1lLDApOwotCSAgICBtYWtlc3RyKCZzbG1zZyxOVUxMKTsJLyogTm8gU0VUIExJTkUgZXJy b3IgbWVzc2FnZSAqLwotCSAgICBjeHR5cGUgPSBDWFRfU1NIOwotI2lmbmRlZiBOT0RJQUwKLQkg ICAgZGlhbHN0YSA9IERJQV9VTks7Ci0jZW5kaWYgLyogTk9ESUFMICovCi0JICAgIHN1Y2Nlc3Mg PSAxOwkJLyogU0VUIExJTkUgc3VjY2VlZGVkICovCi0JICAgIG5ldHdvcmsgPSAxOwkJLyogTmV0 d29yayBjb25uZWN0aW9uIChub3Qgc2VyaWFsKSAqLwotCSAgICBsb2NhbCA9IDE7CQkJLyogTG9j YWwgbW9kZSAobm90IHJlbW90ZSkgKi8KLQkgICAgaWYgKChyZWxpYWJsZSAhPSBTRVRfT0ZGIHx8 ICFzZXRyZWxpYWJsZSkpCi0JICAgICAgcmVsaWFibGUgPSBTRVRfT047CS8qIFRyYW5zcG9ydCBp cyByZWxpYWJsZSBlbmQgdG8gZW5kICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICBEaWFsZXJT ZW5kKE9QVF9LRVJNSVRfQ09OTkVDVCwgMCk7Ci0jZW5kaWYgLyogT1MyICovCi0JICAgIHNldGZs b3coKTsJCQkvKiBTZXQgYXBwcm9wcmlhdGUgZmxvdyBjb250cm9sICovCi0KLQkgICAgaGF2ZWxp bmUgPSAxOwotI2lmZGVmIENLTE9HRElBTAotI2lmZGVmIE5FVENPTk4KLQkgICAgZG9sb2duZXQo KTsKLSNlbmRpZiAvKiBORVRDT05OICovCi0jZW5kaWYgLyogQ0tMT0dESUFMICovCi0KLSNpZm5k ZWYgTk9TUEwKLQkgICAgaWYgKGxvY2FsKSB7Ci0JCWlmIChubWFjKSB7CQkvKiBBbnkgbWFjcm9z IGRlZmluZWQ/ICovCi0JCSAgICBpbnQgazsJCS8qIFllcyAqLwotCQkgICAgayA9IG1sb29rKG1h Y3RhYiwib25fb3BlbiIsbm1hYyk7IC8qIExvb2sgdGhpcyB1cCAqLwotCQkgICAgaWYgKGsgPj0g MCkgewkgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLwotCQkJaWYgKGRvZG8oayxzc2hfaHN0 LDApID4gLTEpICAgLyogc2V0IGl0IHVwLCAqLwotCQkJICBwYXJzZXIoMSk7CQkgICAgICAvKiBh bmQgZXhlY3V0ZSBpdCAqLwotCQkgICAgfQotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAq LwotI2lmZGVmIExPQ1VTCQkKLQkgICAgaWYgKGF1dG9sb2N1cykKLQkJc2V0bG9jdXMoMSwxKTsK LSNlbmRpZiAvKiBMT0NVUyAqLwotCi0JLyogQ29tbWFuZCB3YXMgY29uZmlybWVkIHNvIHdlIGNh biBwcmUtcG9wIGNvbW1hbmQgbGV2ZWwuICovCi0JLyogVGhpcyBpcyBzbyBDT05ORUNUIG1vZHVs ZSB3b24ndCB0aGluayB3ZSdyZSBleGVjdXRpbmcgYSAqLwotCS8qIHNjcmlwdCBpZiBDT05ORUNU IHdhcyB0aGUgZmluYWwgY29tbWFuZCBpbiB0aGUgc2NyaXB0LiAqLwotCSAgICBpZiAoY21kbHZs ID4gMCkKLQkgICAgICBwcmVwb3AoKTsKLQkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotCSAg ZGVmYXVsdDoKLQkgICAgcmV0dXJuKC0yKTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIFNTSEJVSUxU SU4gKi8KLQotI2lmZGVmIFNGVFBfQlVJTFRJTgotICAgIGlmIChjeCA9PSBYWFNGVFApIHsJCQkv KiBTRlRQIChTZWN1cmUgU2hlbGwgRmlsZSBUcmFuc2ZlcikgKi8KLQlleHRlcm4gaW50IG5ldHNh dmU7Ci0JaW50IGssIHgsIGhhdmVob3N0ID0gMCwgdHJpcHMgPSAwOwotICAgICAgICBpbnQgICAg dG1wdmVyID0gLTEsIHRtcHhmdyA9IC0xOwotI2lmbmRlZiBTU0hURVNUCi0gICAgICAgIGV4dGVy biBpbnQgc2xfc3NoX3hmdywgc2xfc3NoX3hmd19zYXZlZDsKLSAgICAgICAgZXh0ZXJuIGludCBz bF9zc2hfdmVyLCBzbF9zc2hfdmVyX3NhdmVkOwotI2VuZGlmIC8qIFNTSFRFU1QgKi8KLSAgICAg ICAgZXh0ZXJuIGludCBtZG10eXAsIG1kbXNhdiwgY3h0eXBlLCBzbF91aWRfc2F2ZWQ7Ci0gICAg ICAgIGV4dGVybiBjaGFyICogc2xtc2c7Ci0JZXh0ZXJuIGNoYXIgdWlkYnVmW10sIHNsX3VpZGJ1 ZltdOwotICAgICAgICBleHRlcm4gY2hhciBwd2J1ZltdLCAqIGdfcHN3ZDsKLSAgICAgICAgZXh0 ZXJuIGludCBwd2ZsZywgcHdjcnlwdCwgZ19wZmxnLCBnX3BjcHQsIG5vbG9jYWw7Ci0Jc3RydWN0 IEZEQiBzdywga3csIGZsOwotCi0gICAgICAgIGlmIChzc2hfdG1wc3RyKQotCSAgbWVtc2V0KHNz aF90bXBzdHIsMCxzdHJsZW4oc3NoX3RtcHN0cikpOwotICAgICAgICBtYWtlc3RyKCZzc2hfdG1w c3RyLE5VTEwpOwotICAgICAgICBtYWtlc3RyKCZzc2hfdG1wdWlkLE5VTEwpOwotICAgICAgICBt YWtlc3RyKCZzc2hfdG1wY21kLE5VTEwpOwotICAgICAgICBtYWtlc3RyKCZzc2hfdG1wcG9ydCxO VUxMKTsKLQotCWNtZmRiaSgma3csCQkJLyogMXN0IEZEQiAtIGNvbW1hbmRzICovCi0JICAgICAg IF9DTUtFWSwJCQkvKiBmY29kZSAqLwotCSAgICAgICAiaG9zdCBbIHBvcnQgXSxcbiBvciBhY3Rp b24iLCAvKiBobHBtc2cgKi8KLQkgICAgICAgIiIsCQkJLyogZGVmYXVsdCAqLwotCSAgICAgICAi IiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCSAgICAgICBuc2Z0cGt3dGFiLAkJLyogYWRk dGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0JICAgICAgIDAsCQkJLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDI6IDAgPSBrZXl3b3JkICovCi0JICAgICAgIHh4c3RyaW5nLAkJLyogUHJvY2Vz c2luZyBmdW5jdGlvbiAqLwotCSAgICAgICBzZnRwa3d0YWIsCQkvKiBLZXl3b3JkIHRhYmxlICov Ci0JICAgICAgICZmbAkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLQkgICAgICAgKTsKLQlj bWZkYmkoJmZsLAkJCS8qIEhvc3QgKi8KLQkgICAgICAgX0NNRkxELAkJCS8qIGZjb2RlICovCi0J ICAgICAgICIiLAkJCS8qIGhscG1zZyAqLwotCSAgICAgICAiIiwJCQkvKiBkZWZhdWx0ICovCi0J ICAgICAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0JICAgICAgIDAsCQkJLyogYWRk dGwgbnVtZXJpYyBkYXRhIDEgKi8KLQkgICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEg MiAqLwotCSAgICAgICB4eHN0cmluZywKLQkgICAgICAgTlVMTCwKLQkgICAgICAgTlVMTAotCSAg ICAgICApOwotCi0JeCA9IGNtZmRiKCZrdyk7Ci0JaWYgKHggPT0gLTMpIHsKLQkgICAgcHJpbnRm KCI/c2Z0cCB3aGF0P1xuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCWlmICh4IDwgMCkKLQkg IHJldHVybih4KTsKLQloYXZlaG9zdCA9IDA7Ci0JaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUZM RCkgewotCSAgICBoYXZlaG9zdCA9IDE7Ci0JICAgIGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNy ZXN1bHQsTElOQlVGU0laKTsgLyogSG9zdG5hbWUgKi8KLQkgICAgY21yZXN1bHQubnJlc3VsdCA9 IFNGVFBfT1BOOwotCX0KLQlzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsJLyogU0ZUUCBrZXl3 b3JkICovCi0JICBjYXNlIFNGVFBfT1BOOgkJLyogU0ZUUCBPUEVOICovCi0JICAgIGlmICghaGF2 ZWhvc3QpIHsKLQkJaWYgKCh4ID0gY21mbGQoIkhvc3QiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQot CQkgIHJldHVybih4KTsKLQkJY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotCSAgICB9Ci0J ICAgIC8qIFBhcnNlIFsgcG9ydCBdIFsgc3dpdGNoZXMgXSAqLwotCSAgICBjbWZkYmkoJmt3LAkJ CS8qIFN3aXRjaGVzICovCi0JCSAgIF9DTUtFWSwKLQkJICAgIlBvcnQgbnVtYmVyIG9yIHNlcnZp Y2UgbmFtZSxcbm9yIHN3aXRjaCIsCi0JCSAgICIiLAotCQkgICAiIiwKLQkJICAgbnNzaGtybW9w bnN3LAotCQkgICA0LAotCQkgICB4eHN0cmluZywKLQkJICAgc3Noa3Jtb3Buc3csCi0JCSAgICZm bAotCQkgICApOwotCSAgICBjbWZkYmkoJmZsLAkJCS8qIFBvcnQgbnVtYmVyIG9yIHNlcnZpY2Ug bmFtZSAqLwotCQkgICBfQ01GTEQsCi0JCSAgICIiLAotCQkgICAiIiwKLQkJICAgIiIsCi0JCSAg IDAsCi0JCSAgIDAsCi0JCSAgIHh4c3RyaW5nLAotCQkgICBOVUxMLAotCQkgICBOVUxMCi0JCSAg ICk7Ci0JICAgIHRyaXBzID0gMDsJCQkvKiBFeHBsYWluZWQgYmVsb3cgKi8KLQkgICAgd2hpbGUg KDEpIHsJCQkvKiBQYXJzZSBwb3J0IGFuZCBzd2l0Y2hlcyAqLwotCQl4ID0gY21mZGIoJmt3KTsJ CS8qIEdldCBhIGZpZWxkICovCi0JCWlmICh4ID09IC0zKQkJLyogVXNlciB0eXBlZCBDUiBzbyBx dWl0IGZyb20gbG9vcCAqLwotCQkgIGJyZWFrOwotCQlpZiAoeCA8IDApCQkvKiBPdGhlciBwYXJz ZSBlcnJvciwgcGFzcyBpdCBiYWNrICovCi0JCSAgcmV0dXJuKHgpOwotCQlzd2l0Y2ggKGNtcmVz dWx0LmZjb2RlKSB7IC8qIEZpZWxkIG9yIEtleXdvcmQ/ICovCi0gICAgICAgICAgICAgICAgICBj YXNlIF9DTUZMRDoJCSAgLyogRmllbGQgKi8KLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigm c3NoX3RtcHBvcnQsY21yZXN1bHQuc3Jlc3VsdCk7Ci0JCSAgICBicmVhazsKLQkJICBjYXNlIF9D TUtFWToJCS8qIEtleXdvcmQgKi8KLQkJICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewkv KiBXaGljaCBvbmU/ICovCi0JCSAgICAgIGNhc2UgU1NIU1dfVVNSOgkgICAgICAgIC8qIC9VU0VS OiAqLwotCQkJaWYgKCFjbWdicmsoKSkgewotCQkJICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJl cXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLQkJCSAgICByZXR1cm4oLTkpOwotCQkJfQotCQkJaWYg KCh5ID0gY21mbGQoIlVzZXJuYW1lIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLQkJCSAgcmV0dXJu KHkpOwotCQkJcyA9IGJyc3RyaXAocyk7Ci0JCQltYWtlc3RyKCZzc2hfdG1wdWlkLHMpOwotCQkJ YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0hTV19QV0Q6Ci0JCQlpZiAoIWNt Z2JyaygpKSB7Ci0JCQkgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1l bnRcbiIpOwotCQkJICAgIHJldHVybigtOSk7Ci0JCQl9Ci0JCQlkZWJvayA9IDA7Ci0JCQlpZiAo KHggPSBjbWZsZCgiUGFzc3dvcmQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0JCQkgICAgaWYg KHggPT0gLTMpIHsKLQkJCQltYWtlc3RyKCZzc2hfdG1wc3RyLCIiKTsKLQkJCSAgICB9IGVsc2Ug ewotCQkJCXJldHVybih4KTsKLQkJCSAgICB9Ci0JCQl9IGVsc2UgewotCQkJICAgIHMgPSBicnN0 cmlwKHMpOwotCQkJICAgIGlmICgoeCA9IChpbnQpc3RybGVuKHMpKSA+IFBXQlVGTCkgewotCQkJ CW1ha2VzdHIoJnNsbXNnLCJJbnRlcm5hbCBlcnJvciIpOwotCQkJCXByaW50ZigiP1NvcnJ5LCB0 b28gbG9uZyAtIG1heCA9ICVkXG4iLFBXQlVGTCk7Ci0JCQkJcmV0dXJuKC05KTsKLQkJCSAgICB9 Ci0JCQkgICAgbWFrZXN0cigmc3NoX3RtcHN0cixzKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0gICAg ICAgICAgICAgICAgICAgIGNhc2UgU1NIU1dfVkVSOgotCQkJaWYgKCh4ID0gY21udW0oIk51bWJl ciIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApCi0JCQkgIHJldHVybih4KTsKLQkJCWlmICh6IDwg MSB8fCB6ID4gMikgewotCQkJICAgIHByaW50ZigiP091dCBvZiByYW5nZTogJWRcbiIseik7Ci0J CQkgICAgcmV0dXJuKC05KTsKLQkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcHZlciA9 IHo7Ci0JCQlicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybigtMik7Ci0JCSAgICB9Ci0JCX0KLQkJaWYgKHRyaXBzKysgPT0g MCkgewkvKiBBZnRlciBmaXJzdCB0aW1lIHRocm91Z2ggKi8KLQkJICAgIGNtZmRiaSgma3csCQkv KiBvbmx5IHBhcnNlIHN3aXRjaGVzLCBub3QgcG9ydC4gKi8KLQkJCSAgIF9DTUtFWSwKLQkJCSAg ICJTd2l0Y2giLAotCQkJICAgIiIsCi0JCQkgICAiIiwKLQkJCSAgIG5zc2hrcm1vcG5zdywKLQkJ CSAgIDQsCi0JCQkgICB4eHN0cmluZywKLQkJCSAgIHNzaGtybW9wbnN3LAotCQkJICAgTlVMTAot CQkJICAgKTsKLQkJfQotCSAgICB9Ci0JICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkJLyogR2V0 IGNvbmZpcm1hdGlvbiAqLwotCSAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgaWYgKGNs c2tjb25ueCgxKSA8IDApIHsJLyogQ2xvc2UgY3VycmVudCBLZXJtaXQgY29ubmVjdGlvbiAqLwot ICAgICAgICAgICAgICAgICAgaWYgKCBzc2hfdG1wc3RyICkgewotICAgICAgICAgICAgICAgICAg ICAgIG1lbXNldChzc2hfdG1wc3RyLDAsc3RybGVuKHNzaF90bXBzdHIpKTsKLSAgICAgICAgICAg ICAgICAgICAgICBtYWtlc3RyKCZzc2hfdG1wc3RyLE5VTEwpOwotICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfaHN0LGxpbmUpOwkvKiBTdGFzaCBldmVyeXRo aW5nICovCi0gICAgICAgICAgICAgIGlmIChzc2hfdG1wdWlkKSB7Ci0gICAgICAgICAgICAgICAg ICBpZiAoIXNsX3VpZF9zYXZlZCkgewotICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShz bF91aWRidWYsdWlkYnVmLFVJREJVRkxFTik7Ci0gICAgICAgICAgICAgICAgICAgICAgc2xfdWlk X3NhdmVkID0gMTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGNrc3Ry bmNweSh1aWRidWYsc3NoX3RtcHVpZCxVSURCVUZMRU4pOwotICAgICAgICAgICAgICAgICAgbWFr ZXN0cigmc3NoX3RtcHVpZCxOVUxMKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBp ZiAoc3NoX3RtcHBvcnQpIHsKLSAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9wcnQsc3No X3RtcHBvcnQpOwotICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3RtcHBvcnQsTlVMTCk7 Ci0gICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3By dCxOVUxMKTsKLQotICAgICAgICAgICAgICAvKiBTZXQgdGhlIFN1YnN5c3RlbSB0byBLZXJtaXQg Ki8KLSAgICAgICAgICAgICAgc3NoX2NhcyA9IDE7Ci0gICAgICAgICAgICAgIG1ha2VzdHIoJnNz aF9jbWQsInNmdHAiKTsKLQotICAgICAgICAgICAgICBpZiAodG1wdmVyID4gLTEpIHsKLSNpZm5k ZWYgU1NIVEVTVAotICAgICAgICAgICAgICAgICAgaWYgKCFzbF9zc2hfdmVyX3NhdmVkKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgc2xfc3NoX3ZlciA9IHNzaF92ZXI7Ci0gICAgICAgICAgICAg ICAgICAgICAgc2xfc3NoX3Zlcl9zYXZlZCA9IDE7Ci0gICAgICAgICAgICAgICAgICB9Ci0jZW5k aWYgLyogU1NIVEVTVCAqLwotICAgICAgICAgICAgICAgICAgc3NoX3ZlciA9IHRtcHZlcjsKLSAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAvKiBEaXNhYmxlIFgxMSBGb3J3YXJkaW5nICov Ci0jaWZuZGVmIFNTSFRFU1QKLSAgICAgICAgICAgICAgaWYgKCFzbF9zc2hfeGZ3X3NhdmVkKSB7 Ci0gICAgICAgICAgICAgICAgICBzbF9zc2hfeGZ3ID0gc3NoX3hmdzsKLSAgICAgICAgICAgICAg ICAgIHNsX3NzaF94Zndfc2F2ZWQgPSAxOwotICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogU1NI VEVTVCAqLwotICAgICAgICAgICAgICBzc2hfeGZ3ID0gMDsKLQotICAgICAgICAgICAgICBpZiAo c3NoX3RtcHN0cikgewotICAgICAgICAgICAgICAgICAgaWYgKHNzaF90bXBzdHJbMF0pIHsKLSAg ICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkocHdidWYsc3NoX3RtcHN0cixQV0JVRkwrMSk7 Ci0gICAgICAgICAgICAgICAgICAgICAgcHdmbGcgPSAxOwotICAgICAgICAgICAgICAgICAgICAg IHB3Y3J5cHQgPSAwOwotICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg ICAgICAgcHdmbGcgPSAwOwotICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3RtcHN0cixO VUxMKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBuZXR0eXBlID0gTkVUX1NTSDsK LSAgICAgICAgICAgICAgaWYgKG1kbXNhdiA8IDApCi0gICAgICAgICAgICAgICAgICBtZG1zYXYg PSBtZG10eXA7Ci0gICAgICAgICAgICAgIG1kbXR5cCA9IC1uZXR0eXBlOwotICAgICAgICAgICAg ICB4ID0gMTsKLQotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgbWFrZXN0cigmZ19wc3dkLHB3 YnVmKTsgICAgICAgICAgICAgLyogU2F2ZSBnbG9iYWwgcHdidWYgKi8KLSAgICAgICAgICAgIGdf cGZsZyA9IHB3ZmxnOyAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBmbGFnICovCi0gICAgICAg ICAgICBnX3BjcHQgPSBwd2NyeXB0OwotI2VuZGlmIC8qIE5PU1BMICovCi0KLQkgICAgLyogTGlu ZSBwYXJhbWV0ZXIgdG8gdHRvcGVuKCkgaXMgaWdub3JlZCAqLwotCSAgICBrID0gdHRvcGVuKGxp bmUsJngsbWRtdHlwLCAwKTsKLQkgICAgaWYgKGsgPCAwKSB7Ci0JCXByaW50ZigiP1VuYWJsZSB0 byBjb25uZWN0IHRvICVzXG4iLHNzaF9oc3QpOwotCQltZG10eXAgPSBtZG1zYXY7Ci0gICAgICAg ICAgICAgICAgc2xyZXN0b3IoKTsKLQkJcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQkgICAgfQotCSAg ICBkdXBsZXggPSAwOyAgICAgICAgICAgICAvKiBSZW1vdGUgZWNobyAqLwotCSAgICBja3N0cm5j cHkodHRuYW1lLGxpbmUsVFROQU1MRU4pOyAvKiBSZWNvcmQgdGhlIGNvbW1hbmQgKi8KLQkgICAg ZGVidWcoRjExMCwic3NoIHR0bmFtZSIsdHRuYW1lLDApOwotCSAgICBtYWtlc3RyKCZzbG1zZyxO VUxMKTsJLyogTm8gU0VUIExJTkUgZXJyb3IgbWVzc2FnZSAqLwotCSAgICBjeHR5cGUgPSBDWFRf U1NIOwotI2lmbmRlZiBOT0RJQUwKLQkgICAgZGlhbHN0YSA9IERJQV9VTks7Ci0jZW5kaWYgLyog Tk9ESUFMICovCi0JICAgIHN1Y2Nlc3MgPSAxOwkJLyogU0VUIExJTkUgc3VjY2VlZGVkICovCi0J ICAgIG5ldHdvcmsgPSAxOwkJLyogTmV0d29yayBjb25uZWN0aW9uIChub3Qgc2VyaWFsKSAqLwot CSAgICBsb2NhbCA9IDE7CQkJLyogTG9jYWwgbW9kZSAobm90IHJlbW90ZSkgKi8KLQkgICAgaWYg KChyZWxpYWJsZSAhPSBTRVRfT0ZGIHx8ICFzZXRyZWxpYWJsZSkpCi0JICAgICAgcmVsaWFibGUg PSBTRVRfT047CS8qIFRyYW5zcG9ydCBpcyByZWxpYWJsZSBlbmQgdG8gZW5kICovCi0jaWZkZWYg T1MyCi0gICAgICAgICAgICBEaWFsZXJTZW5kKE9QVF9LRVJNSVRfQ09OTkVDVCwgMCk7Ci0jZW5k aWYgLyogT1MyICovCi0JICAgIHNldGZsb3coKTsJCQkvKiBTZXQgYXBwcm9wcmlhdGUgZmxvdyBj b250cm9sICovCi0KLQkgICAgaGF2ZWxpbmUgPSAxOwotI2lmZGVmIENLTE9HRElBTAotI2lmZGVm IE5FVENPTk4KLQkgICAgZG9sb2duZXQoKTsKLSNlbmRpZiAvKiBORVRDT05OICovCi0jZW5kaWYg LyogQ0tMT0dESUFMICovCi0KLSNpZm5kZWYgTk9TUEwKLQkgICAgaWYgKGxvY2FsKSB7Ci0JCWlm IChubWFjKSB7CQkvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCi0JCSAgICBpbnQgazsJCS8qIFll cyAqLwotCQkgICAgayA9IG1sb29rKG1hY3RhYiwib25fb3BlbiIsbm1hYyk7IC8qIExvb2sgdGhp cyB1cCAqLwotCQkgICAgaWYgKGsgPj0gMCkgewkgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAq LwotCQkJaWYgKGRvZG8oayxzc2hfaHN0LDApID4gLTEpICAgLyogc2V0IGl0IHVwLCAqLwotCQkJ ICBwYXJzZXIoMSk7CQkgICAgICAvKiBhbmQgZXhlY3V0ZSBpdCAqLwotCQkgICAgfQotCQl9Ci0J ICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmZGVmIExPQ1VTCQkKLQkgICAgaWYgKGF1dG9s b2N1cykKLQkJc2V0bG9jdXMoMSwxKTsKLSNlbmRpZiAvKiBMT0NVUyAqLwotCi0JLyogQ29tbWFu ZCB3YXMgY29uZmlybWVkIHNvIHdlIGNhbiBwcmUtcG9wIGNvbW1hbmQgbGV2ZWwuICovCi0JLyog VGhpcyBpcyBzbyBDT05ORUNUIG1vZHVsZSB3b24ndCB0aGluayB3ZSdyZSBleGVjdXRpbmcgYSAq LwotCS8qIHNjcmlwdCBpZiBDT05ORUNUIHdhcyB0aGUgZmluYWwgY29tbWFuZCBpbiB0aGUgc2Ny aXB0LiAqLwotCSAgICBpZiAoY21kbHZsID4gMCkKLQkgICAgICBwcmVwb3AoKTsKLQotICAgICAg ICAgICAgc3VjY2VzcyA9IHNmdHBfZG9faW5pdCgpOwotCSAgICByZXR1cm4oc3VjY2VzcyA9IDEp OwotCi0JICBjYXNlIFNGVFBfQ0Q6Ci0JICBjYXNlIFNGVFBfQ0hHUlA6Ci0JICBjYXNlIFNGVFBf Q0hNT0Q6Ci0JICBjYXNlIFNGVFBfQ0hPV046Ci0JICBjYXNlIFNGVFBfUk06Ci0JICBjYXNlIFNG VFBfRElSOgotCSAgY2FzZSBTRlRQX0dFVDoKLQkgIGNhc2UgU0ZUUF9NS0RJUjoKLQkgIGNhc2Ug U0ZUUF9QVVQ6Ci0JICBjYXNlIFNGVFBfUFdEOgotCSAgY2FzZSBTRlRQX1JFTjoKLQkgIGNhc2Ug U0ZUUF9STURJUjoKLQkgIGNhc2UgU0ZUUF9MSU5LOgotCSAgY2FzZSBTRlRQX1ZFUjoKLQkgICAg aWYgKCh5ID0gY210eHQoImNvbW1hbmQgcGFyYW1ldGVycyIsIiIsJnMseHhzdHJpbmcpKSA8IDAp IAotCSAgICAgIHJldHVybih5KTsKLQkgICAgaWYgKHNzaF90Y2hrKCkgPCAwIHx8ICFzc2hfY2Fz IHx8IHN0cmNtcChzc2hfY21kLCJzZnRwIikpIHsKLQkJcHJpbnRmKCI/Tm90IGNvbm5lY3RlZCB0 byBTRlRQIFNlcnZpY2VcbiIpOwotCQlyZXR1cm4oc3VjY2VzcyA9IDApOwotCSAgICB9Ci0JICAg IHN1Y2Nlc3MgPSBzZnRwX2RvX2NtZChjbXJlc3VsdC5ucmVzdWx0LHMpOwotCSAgICByZXR1cm4o c3VjY2Vzcyk7Ci0JICBkZWZhdWx0OgotCSAgICByZXR1cm4oLTIpOwotCX0KLSAgICB9Ci0jZW5k aWYgLyogU0ZUUF9CVUlMVElOICovCi0KLSAgICBpZiAoY3ggPT0gWFhSTE9HKSB7CQkJLyogUkxP R0lOICovCi0jaWZkZWYgUkxPR0NPREUKLQlpbnQgeCx6OwotI2lmZGVmIE9TMgotCWlmICghdGNw X2F2YWlsKSB7Ci0JICAgIHByaW50ZigiP1NvcnJ5LCBlaXRoZXIgVENQL0lQIGlzIG5vdCBhdmFp bGFibGUgb24gdGhpcyBzeXN0ZW0gb3JcblwKLW5lY2Vzc2FyeSBETExzIGRpZCBub3QgbG9hZC4g IFVzZSBTSE9XIE5FVFdPUksgdG8gY2hlY2sgbmV0d29yayBzdGF0dXMuXG4iCi0JCSAgICk7Ci0J ICAgIHN1Y2Nlc3MgPSAwOwotCSAgICByZXR1cm4oLTkpOwotCX0gZWxzZSB7Ci0jZW5kaWYgLyog T1MyICovCi0JICAgIHggPSBuZXR0eXBlOwkJLyogU2F2ZSBuZXQgdHlwZSBpbiBjYXNlIG9mIGZh aWx1cmUgKi8KLQkgICAgeiA9IHR0bnByb3RvOwkJLyogU2F2ZSBwcm90b2NvbCBpbiBjYXNlIG9m IGZhaWx1cmUgKi8KLQkgICAgbmV0dHlwZSA9IE5FVF9UQ1BCOwotCSAgICB0dG5wcm90byA9IE5Q X1JMT0dJTjsKLQkgICAgaWYgKCh5ID0gc2V0bGluKFhZSE9TVCwwLDEpKSA8PSAwKSB7Ci0JCW5l dHR5cGUgPSB4OwkJLyogRmFpbGVkLCByZXN0b3JlIG5ldCB0eXBlLiAqLwotCQl0dG5wcm90byA9 IHo7CQkvKiBhbmQgcHJvdG9jb2wgKi8KLQkJc3VjY2VzcyA9IDA7Ci0JICAgIH0KLQkgICAgZGlk c2V0bGluKys7Ci0jaWZkZWYgT1MyCi0JfQotI2VuZGlmIC8qIE9TMiAqLwotCXJldHVybih5KTsK LSNlbHNlCi0JcHJpbnRmKCI/U29ycnksIFJMT0dJTiBpcyBub3QgY29uZmlndXJlZCBpbiB0aGlz IGNvcHkgb2YgQy1LZXJtaXQuXG4iKTsKLQlyZXR1cm4oLTkpOwotI2VuZGlmIC8qIFJMT0dDT0RF ICovCi0gICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0K LSNpZm5kZWYgTk9YTUlUCi0gICAgaWYgKGN4ID09IFhYVFJBKSB7CQkJLyogVFJBTlNNSVQgKi8K LQlleHRlcm4gaW50IHhmcnhsYTsKLQlpbnQgaSwgbiwgeHBpcGUgPSAwLCB4YmluYXJ5ID0gMCwg eHhsYXRlID0gMSwgeHhub3dhaXQgPSAwLCBnZXR2YWw7Ci0JaW50IHh4ZWNobyA9IDA7Ci0JaW50 IHNjYW4gPSAxOwotCWNoYXIgYzsKLQlzdHJ1Y3QgRkRCIHNmLCBzdywgdHg7CQkvKiBGREJzIGZv ciBwYXJzZSBmdW5jdGlvbnMgKi8KLSNpZm5kZWYgTk9DU0VUUwotCWV4dGVybiBpbnQgdGNzX3Ry YW5zcDsJCS8qIFRlcm0gY2hhcnNldCBpcyB0cmFuc3BhcmVudCAqLwotI2Vsc2UKLQlpbnQgdGNz X3RyYW5zcCA9IDE7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZkZWYgQ09NTUVOVAotCXhi aW5hcnkgPSBiaW5hcnk7CQkvKiBEZWZhdWx0IHRleHQvYmluYXJ5IG1vZGUgKi8KLSNlbHNlCi0J eGJpbmFyeSA9IDA7CQkJLyogRGVmYXVsdCBpcyB0ZXh0ICovCi0jZW5kaWYgLyogQ09NTUVOVCAq LwotCXh4ZWNobyA9IHhtaXR4OwotCi0JY21mZGJpKCZzdywJCQkvKiBGaXJzdCBGREIgLSBjb21t YW5kIHN3aXRjaGVzICovCi0JICAgICAgIF9DTUtFWSwJCQkvKiBmY29kZSAqLwotCSAgICAgICAi RmlsZW5hbWUsIG9yIHN3aXRjaCIsCS8qIGhscG1zZyAqLwotCSAgICAgICAiIiwJCQkvKiBkZWZh dWx0ICovCi0JICAgICAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0JICAgICAgIG54 bWl0c3csCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0JICAgICAgIDQs CQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotCSAgICAgICB4eHN0cmlu ZywJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLQkgICAgICAgeG1pdHN3LAkJCS8qIEtleXdv cmQgdGFibGUgKi8KLQkgICAgICAgJnNmCQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotCSAg ICAgICApOwotCWNtZmRiaSgmc2YsCQkJLyogMm5kIEZEQiAtIGZpbGUgdG8gc2VuZCAqLwotCSAg ICAgICBfQ01JRkksCQkJLyogZmNvZGUgKi8KLQkgICAgICAgIkZpbGUgdG8gdHJhbnNtaXQiLAkv KiBobHBtc2cgKi8KLQkgICAgICAgIiIsCQkJLyogZGVmYXVsdCAqLwotCSAgICAgICAiIiwJCQkv KiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0 YSAxICovCi0JICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLQkgICAgICAg eHhzdHJpbmcsCi0JICAgICAgIE5VTEwsCi0jaWZkZWYgUElQRVNFTkQKLQkgICAgICAgJnR4Ci0j ZWxzZQotCSAgICAgICBOVUxMCi0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQkgICAgICAgKTsKLSNp ZmRlZiBQSVBFU0VORAotICAgICAgICBjbWZkYmkoJnR4LAotCSAgICAgICBfQ01UWFQsCQkJLyog ZmNvZGUgKi8KLQkgICAgICAgIkNvbW1hbmQiLAkJLyogaGxwbXNnICovCi0JICAgICAgICIiLAkJ CS8qIGRlZmF1bHQgKi8KLQkgICAgICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkg ICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotCSAgICAgICAwLAkJCS8qIGFk ZHRsIG51bWVyaWMgZGF0YSAyICovCi0JICAgICAgIHh4c3RyaW5nLAotCSAgICAgICBOVUxMLAot CSAgICAgICBOVUxMCi0JICAgICAgICk7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotCXdoaWxl ICgxKSB7Ci0JICAgIHggPSBjbWZkYigmc3cpOwotCSAgICBpZiAoeCA8IDApCi0JICAgICAgcmV0 dXJuKHgpOwotCSAgICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKQotCSAgICAgIGJyZWFr OwotCSAgICBjID0gY21nYnJrKCk7CQkvKiBIYXZlIHN3aXRjaCwgZ2V0IGJyZWFrIGNoYXJhY3Rl ciAqLwotCSAgICBpZiAoKGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9JykpICYmICEoY21n a3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0JCXByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRh a2UgYW4gYXJndW1lbnRcbiIpOwotCQlyZXR1cm4oLTkpOwotCSAgICB9Ci0JICAgIGlmICghZ2V0 dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLQkJcHJpbnRmKCI/VGhpcyBzd2l0Y2gg cmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwotCQlyZXR1cm4oLTkpOwotCSAgICB9Ci0JICAgIG4g PSBjbXJlc3VsdC5ucmVzdWx0OwkvKiBOdW1lcmljIHJlc3VsdCA9IHN3aXRjaCBJRCAqLwotCSAg ICBzd2l0Y2ggKG4pIHsJCS8qIFByb2Nlc3MgdGhlIHN3aXRjaCAqLwotI2lmZGVmIFBJUEVTRU5E Ci0JICAgICAgY2FzZSBYTUlfQ01EOgkJLyogVHJhbnNtaXQgZnJvbSBhIGNvbW1hbmQgKi8KLQkJ aWYgKG5vcHVzaCkgewotCQkgICAgcHJpbnRmKCI/U29ycnksIHN5c3RlbSBjb21tYW5kIGFjY2Vz cyBpcyBkaXNhYmxlZFxuIik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0JCXN3LmhscG1zZyA9 ICJDb21tYW5kLCBvciBzd2l0Y2giOyAvKiBDaGFuZ2UgaGVscCBtZXNzYWdlICovCi0JCXhwaXBl ID0gMTsJCS8qIChObyB3YXkgdG8gdW5kbyB0aGlzIG9uZSkgKi8KLQkJYnJlYWs7Ci0jZW5kaWYg LyogUElQRVNFTkQgKi8KLQotCSAgICAgIGNhc2UgWE1JX0JJTjoJCS8qIEJpbmFyeSAqLwotCQl4 YmluYXJ5ID0gMTsKLQkJeHhsYXRlID0gMDsJCS8qIERvbid0IHRyYW5zbGF0ZSBjaGFyc2V0cyAq LwotCQlzY2FuID0gMDsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIFhNSV9UWFQ6CQkvKiBUZXh0 ICovCi0JCXhiaW5hcnkgPSAwOwotCQl4eGxhdGUgPSAhdGNzX3RyYW5zcDsJLyogVHJhbnNsYXRl IGlmIFRFUk0gQ0hBUiBub3QgVFJBTlNQICovCi0JCXNjYW4gPSAwOwotCQlicmVhazsKLQotCSAg ICAgIGNhc2UgWE1JX1RSQToJCS8qIFRyYW5zcGFyZW50IHRleHQgKi8KLQkJeGJpbmFyeSA9IDA7 Ci0JCXh4bGF0ZSA9IDA7CQkvKiBCdXQgZG9uJ3QgdHJhbnNsYXRlIGNoYXJzZXRzICovCi0JCXNj YW4gPSAwOwotCQlicmVhazsKLQotI2lmZGVmIENPTU1FTlQKLQkgICAgICBjYXNlIFhNSV9WUkI6 CQkvKiAvVkVSQk9TRSAqLwotCSAgICAgIGNhc2UgWE1JX1FVSToJCS8qIC9RVUlFVCAqLwotCQli cmVhazsJCQkvKiAobm90IGltcGxlbWVudGVkIHlldCkgKi8KLSNlbmRpZiAvKiBDT01NRU5UICov Ci0KLQkgICAgICBjYXNlIFhNSV9OT1c6CQkvKiAvTk9XQUlUICovCi0JCXh4bm93YWl0ID0gMTsK LQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIFhNSV9OT0U6CQkvKiAvTk9XQUlUICovCi0JCXh4ZWNo byA9IDA7Ci0JCWJyZWFrOwotCi0JICAgICAgZGVmYXVsdDoKLQkJcmV0dXJuKC0yKTsKLQkgICAg fQotCi0JfQotCWlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01JRkkgJiYgY21yZXN1bHQuZmNvZGUg IT0gX0NNVFhUKQotCSAgcmV0dXJuKC0yKTsKLQlja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVz dWx0LExJTkJVRlNJWik7IC8qIEZpbGVuYW1lICovCi0JaWYgKHpmbnFmcChsaW5lLFRNUEJVRlNJ Wix0bXBidWYpKQotCSAgY2tzdHJuY3B5KGxpbmUsdG1wYnVmLExJTkJVRlNJWik7Ci0JcyA9IGxp bmU7Ci0JaWYgKCh5ID0gY21jZm0oKSkgPCAwKQkJLyogQ29uZmlybSAqLwotCSAgcmV0dXJuKHkp OwotI2lmZGVmIENLX0FQQwotCWlmICgoYXBjYWN0aXZlID09IEFQQ19MT0NBTCkgfHwKLQkgICAg KChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSkgJiYgKCEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKSkp Ci0JICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENLX0FQQyAqLwotCWlmIChjbXJl c3VsdC5ucmVzdWx0ICE9IDApIHsKLQkgICAgcHJpbnRmKCI/T25seSBhIHNpbmdsZSBmaWxlIG1h eSBiZSB0cmFuc21pdHRlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2lmZGVmIFBJUEVT RU5ECi0JaWYgKHhwaXBlKSB7Ci0JICAgIHMgPSBicnN0cmlwKHMpOwotCSAgICBpZiAoISpzKSB7 Ci0JCXByaW50ZigiP1NvcnJ5LCBhIGNvbW1hbmQgdG8gc2VuZCBmcm9tIGlzIHJlcXVpcmVkXG4i KTsKLQkJcmV0dXJuKC05KTsKLQkgICAgfQotCSAgICBwaXBlc2VuZCA9IDE7Ci0JfQotI2VuZGlm IC8qIFBJUEVTRU5EICovCi0KLQlpZiAoc2NhbiAmJiAoZmlsZXBlZWsKLSNpZm5kZWYgTk9YRkVS Ci0JCSAgICAgfHwgcGF0dGVybnMKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQkJICAgICApKSB7CQkv KiBJZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IHR5cGUgKi8KLQkgICAgaW50IGssIHg7CQkJICAgICAg Lyogc2NhbiB0aGUgZmlsZSB0byBzZWUgKi8KLQkgICAgeCA9IC0xOwotCSAgICBrID0gc2NhbmZp bGUocywmeCxuc2NhbmZpbGUpOwotCSAgICBpZiAoayA+IDApIHhiaW5hcnkgPSAoayA9PSBGVF9C SU4pID8gWFlGVF9CIDogWFlGVF9UOwotCX0KLQlpZiAoIXhmcnhsYSkgeHhsYXRlID0gMDsKLQlz dWNjZXNzID0gdHJhbnNtaXQocywKLQkJCSAgIChjaGFyKSAoeHhub3dhaXQgPyAnXDAnIDogKGNo YXIpeG1pdHApLAotCQkJICAgeHhsYXRlLAotCQkJICAgeGJpbmFyeSwKLQkJCSAgIHh4ZWNobwot CQkJICAgKTsKLQlyZXR1cm4oc3VjY2Vzcyk7Ci0gICAgfQotI2VuZGlmIC8qIE5PWE1JVCAqLwot Ci0jaWZuZGVmIE5PRlJJTExTCi0gICAgaWYgKGN4ID09IFhYVFlQICB8fCBjeCA9PSBYWENBVCB8 fCBjeCA9PSBYWE1PUkUgfHwKLQljeCA9PSBYWEhFQUQgfHwgY3ggPT0gWFhUQUlMKSB7Ci0JaW50 IHBhZ2luZyA9IDAsIGhhdmVuYW1lID0gMCwgaGVhZCA9IDAsIHdpZHRoID0gMDsKLQlpbnQgaGVp Z2h0ID0gMCwgY291bnQgPSAwOwotCWNoYXIgcGZ4YnVmWzY0XSwgKiBwcmVmaXggPSBOVUxMOwot CWNoYXIgb3V0ZmlsZVtDS01BWFBBVEgrMV07Ci0Jc3RydWN0IEZEQiBzZiwgc3c7Ci0JY2hhciAq IHBhdCA9IE5VTEw7Ci0JaW50IGluY3MgPSAwLCBvdXRjcyA9IDAsIGNzZXQgPSAtMSwgbnVtYmVy ID0gMDsKLSNpZmRlZiBVTklDT0RFCi0gICAgICAgIGNoYXIgKiB0b2NzID0gIiI7Ci0JZXh0ZXJu IGludCBmaWxlb3JkZXI7Ci0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLQljaGFyIGd1aWJ1ZlsxMjhd LCAqIGd1aV90aXRsZSA9IE5VTEw7Ci0JaW50ICBndWkgPSAwOwotI2VuZGlmIC8qIE5UICovCi0j aWZuZGVmIE5PQ1NFVFMKLQlleHRlcm4gaW50IHRjc3IsIHRjc2w7Ci0jZW5kaWYgLyogTk9DU0VU UyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotCW91dGZpbGVb MF0gPSBOVUw7Ci0KLQlpZiAoY3ggPT0gWFhNT1JFKQotCSAgcGFnaW5nID0gMTsKLQllbHNlIGlm IChjeCA9PSBYWENBVCkKLQkgIHBhZ2luZyA9IDA7Ci0JZWxzZQotCSAgcGFnaW5nID0gKHR5cF9w YWdlIDwgMCkgPyB4YXNrbW9yZSA6IHR5cF9wYWdlOwotCWlmIChwYWdpbmcgPCAwKQotCSAgcGFn aW5nID0gc2F2ZWFzazsKLQotCWlmIChjeCA9PSBYWEhFQUQpIHsKLQkgICAgaGVhZCA9IDEwOwot CSAgICBjeCA9IFhYVFlQOwotCX0gZWxzZSBpZiAoY3ggPT0gWFhUQUlMKSB7Ci0JICAgIGhlYWQg PSAtMTA7Ci0JICAgIGN4ID0gWFhUWVA7Ci0JfQotCi0jaWZkZWYgSUtTRAotCWlmIChpbnNlcnZl ciAmJiAhRU5BQkxFRChlbl90eXApKSB7Ci0JICAgIHByaW50ZigiP1NvcnJ5LCBUWVBFIGNvbW1h bmQgZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAvKiBJS1NEICov Ci0KLQljbWZkYmkoJnN3LAkJCS8qIDJuZCBGREIgLSBvcHRpb25hbCAvUEFHRSBzd2l0Y2ggKi8K LQkgICAgICAgX0NNS0VZLAkJCS8qIGZjb2RlICovCi0JICAgICAgICJGaWxlbmFtZSBvciBzd2l0 Y2giLAkvKiBobHBtc2cgKi8KLQkgICAgICAgIiIsCQkJLyogZGVmYXVsdCAqLwotCSAgICAgICAi IiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCSAgICAgICBudHlwZXRhYiwJCS8qIGFkZHRs IG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotCSAgICAgICA0LAkJCS8qIGFkZHRsIG51bWVy aWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLQkgICAgICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNzaW5n IGZ1bmN0aW9uICovCi0JICAgICAgIHR5cGV0YWIsCQkJLyogS2V5d29yZCB0YWJsZSAqLwotCSAg ICAgICAmc2YJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0JICAgICAgICk7Ci0JY21mZGJp KCZzZiwJCQkvKiAxc3QgRkRCIC0gZmlsZSB0byB0eXBlICovCi0JICAgICAgIF9DTUlGSSwJCQkv KiBmY29kZSAqLwotCSAgICAgICAiIiwJCQkvKiBobHBtc2cgKi8KLQkgICAgICAgIiIsCQkJLyog ZGVmYXVsdCAqLwotCSAgICAgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCSAgICAg ICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0JICAgICAgIDAsCQkJLyogYWRkdGwg bnVtZXJpYyBkYXRhIDIgKi8KLQkgICAgICAgeHhzdHJpbmcsCi0JICAgICAgIE5VTEwsCi0JICAg ICAgIE5VTEwKLQkgICAgICAgKTsKLQotCXdoaWxlICghaGF2ZW5hbWUpIHsKLQkgICAgeCA9IGNt ZmRiKCZzdyk7CQkvKiBQYXJzZSBzb21ldGhpbmcgKi8KLQkgICAgZGVidWcoRjEwMSwidHlwZSBj bWZkYiIsIiIseCk7Ci0JICAgIGRlYnVnKEYxMDEsInR5cGUgY21yZXN1bHQuZmNvZGUiLCIiLGNt cmVzdWx0LmZjb2RlKTsKLQkgICAgZGVidWcoRjEwMSwidHlwZSBjbXJlc3VsdC5ucmVzdWx0Iiwi IixjbXJlc3VsdC5ucmVzdWx0KTsKLQkgICAgaWYgKHggPCAwKSB7CQkJLyogRXJyb3IgKi8KLQkJ aWYgKHggPT0gLTMpIHsKLQkJICAgIHggPSAtOTsKLQkJICAgIHByaW50ZigiP0ZpbGVuYW1lIHJl cXVpcmVkXG4iKTsKLQkJfQotCQlyZXR1cm4oeCk7Ci0JICAgIH0gZWxzZSBpZiAoY21yZXN1bHQu ZmNvZGUgPT0gX0NNS0VZKSB7Ci0JCWNoYXIgYzsgaW50IGdldHZhbDsKLQkJYyA9IGNtZ2Jyaygp OwotCQlnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpOwotCQlpZiAoZ2V0dmFsICYmICEo Y21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0JCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2Vz IG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLSNpZmRl ZiBDT01NRU5UCi0JCWlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLQkJ ICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLQkJICAg IC8qIE5vdCBpZiBpdCBoYXMgYSBkZWZhdWx0ISAqLwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7Ci0jaWZk ZWYgQ0tfVFRHV1NJWgotCQkgIGNhc2UgVFlQX1BBRzoKLQkJICAgIHBhZ2luZyA9IDE7Ci0JCSAg ICBicmVhazsKLQotCQkgIGNhc2UgVFlQX05PUDoKLQkJICAgIHBhZ2luZyA9IDA7Ci0JCSAgICBi cmVhazsKLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0KLQkJICBjYXNlIFRZUF9DT1U6Ci0JCSAg ICBwYWdpbmcgPSAwOwotCQkgICAgY291bnQgPSAxOwotCQkgICAgYnJlYWs7Ci0KLQkJICBjYXNl IFRZUF9IRUE6Ci0JCSAgY2FzZSBUWVBfVEFJOgotCQkgICAgeSA9IDEwOwotCQkgICAgaWYgKGdl dHZhbCkKLQkJICAgICAgaWYgKCh4ID0gY21udW0oIk51bWJlciBvZiBsaW5lcyIsCi0JCQkJICAg ICAiMTAiLDEwLCZ5LHh4c3RyaW5nKSkgPCAwKQotCQkJcmV0dXJuKHgpOwotCQkgICAgaGVhZCA9 IChjbXJlc3VsdC5ucmVzdWx0ID09IFRZUF9UQUkpID8gLXkgOiB5OwotCQkgICAgYnJlYWs7Ci0K LQkJICBjYXNlIFRZUF9XSUQ6Ci0JCSAgICB5ID0gdHlwX3dpZCA+IC0xID8gdHlwX3dpZCA6IGNt ZF9jb2xzOwotCQkgICAgaWYgKGdldHZhbCkKLQkJICAgICAgaWYgKCh4ID0gY21udW0oIkNvbHVt biBhdCB3aGljaCB0byB0cnVuY2F0ZSIsCi0JCQkJICAgICBja2l0b2EoeSksMTAsJnkseHhzdHJp bmcpKSA8IDApCi0JCQlyZXR1cm4oeCk7Ci0JCSAgICB3aWR0aCA9IHk7Ci0JCSAgICBicmVhazsK LQotI2lmZGVmIEtVSQotCQkgIGNhc2UgVFlQX0hJRzoKLQkJICAgIGlmIChnZXR2YWwpCi0JCSAg ICAgIGlmICgoeCA9IGNtbnVtKCJIZWlnaHQgb2YgR1VJIGRpYWxvZyIsCi0JCQkJICAgICBja2l0 b2EoeSksMTAsJnkseHhzdHJpbmcpKSA8IDApCi0JCQlyZXR1cm4oeCk7Ci0JCSAgICBoZWlnaHQg PSB5OwotCQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogS1VJICovCi0KLQkJICBjYXNlIFRZUF9QQVQ6 Ci0JCSAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0JCQlwcmlu dGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0JCQlyZXR1cm4oLTkp OwotCQkgICAgfQotCQkgICAgaWYgKCh4ID0gY21mbGQoInBhdHRlcm4iLCIiLCZzLHh4c3RyaW5n KSkgPCAwKQotCQkgICAgICByZXR1cm4oeCk7Ci0JCSAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1Q QlVGU0laKTsKLQkJICAgIHBhdCA9IHRtcGJ1ZjsKLQkJICAgIGJyZWFrOwotCi0JCSAgY2FzZSBU WVBfUEZYOgotCQkgICAgaWYgKCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewot CQkJcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwotCQkJcmV0 dXJuKC05KTsKLQkJICAgIH0KLQkJICAgIGlmICgoeCA9IGNtZmxkKCJwcmVmaXggZm9yIGVhY2gg bGluZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JCSAgICAgIHJldHVybih4KTsKLQkJICAgIGlm ICgoaW50KXN0cmxlbihzKSA+IDYzKSB7Ci0JCQlwcmludGYoIj9Ub28gbG9uZyAtIDYzIG1heFxu Iik7Ci0JCQlyZXR1cm4oLTkpOwotCQkgICAgfQotCQkgICAgY2tzdHJuY3B5KHBmeGJ1ZixzLDY0 KTsKLQkJICAgIHByZWZpeCA9IGJyc3RyaXAocGZ4YnVmKTsKLQkJICAgIG51bWJlciA9IDA7Ci0J CSAgICBicmVhazsKLQotI2lmZGVmIEtVSQotCQkgIGNhc2UgVFlQX0dVSToKLQkJICAgIGlmICgh Z2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLQkJCXByaW50ZigiP1RoaXMgc3dp dGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9Ci0J CSAgICBpZiAoKHggPSBjbWZsZCgiRGlhbG9nIGJveCB0aXRsZSIsIiIsJnMseHhzdHJpbmcpKSA8 IDApIHsKLQkJCWlmICh4ICE9IC0zKQotCQkJICByZXR1cm4oeCk7Ci0JCSAgICB9IGVsc2Ugewot CQkJaWYgKChpbnQpc3RybGVuKHMpID4gMTI3KSB7Ci0JCQkgICAgcHJpbnRmKCI/VG9vIGxvbmcg LSAxMjcgbWF4XG4iKTsKLQkJCSAgICByZXR1cm4oLTkpOwotCQkJfQotCQkJY2tzdHJuY3B5KGd1 aWJ1ZixzLDEyOCk7Ci0JCQlndWlfdGl0bGUgPSBicnN0cmlwKGd1aWJ1Zik7Ci0JCSAgICB9Ci0J CSAgICBndWkgPSAxOwotCQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogS1VJICovCi0KLQkJICBjYXNl IFRZUF9OVU06CQkvKiAvTlVNQkVSICovCi0JCSAgICBudW1iZXIgPSAxOwotCQkgICAgcHJlZml4 ID0gTlVMTDsKLQkJICAgIGJyZWFrOwotCi0jaWZkZWYgVU5JQ09ERQotCQkgIGNhc2UgVFlQX1hQ QToJCS8qIC9UUkFOU1BBUkVOVCAqLwotCQkgICAgaW5jcyA9IDA7Ci0JCSAgICBjc2V0ID0gMDsK LQkJICAgIG91dGNzID0gLTE7Ci0JCSAgICBicmVhazsKLQotCQkgIGNhc2UgVFlQX1hJTjoJCS8q IC9DSEFSQUNURVItU0VUOiAqLwotCQkgICAgaWYgKCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYg Q01fQVJHKSkgewotCQkJcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRc biIpOwotCQkJcmV0dXJuKC05KTsKLQkJICAgIH0KLQkJICAgIGlmICgoaW5jcyA9IGNta2V5KGZj c3RhYixuZmlsYywKLQkJCQkgICAgICAiY2hhcmFjdGVyLXNldCBuYW1lIiwiIix4eHN0cmluZykp IDwgMCkgewotCQkJaWYgKGluY3MgPT0gLTMpCS8qIE5vdGU6IE5vIGRlZmF1bHQgKi8KLQkJCSAg aW5jcyA9IC0yOwotCQkJcmV0dXJuKGluY3MpOwotCQkgICAgfQotCQkgICAgY3NldCA9IGluY3M7 Ci0JCSAgICBicmVhazsKLQotCQkgIGNhc2UgVFlQX1hVVDoJCS8qIC9UUkFOU0xBVEUtVE86ICov Ci0JCSAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0JCQlwcmlu dGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0JCQlyZXR1cm4oLTkp OwotCQkgICAgfQotI2lmZGVmIE9TMgotCQkgICAgaWYgKCFpbnNlcnZlciAmJiAhazk1c3Rkb3V0 KSB7Ci0JCQl0b2NzID0gInVjczIiOwotCQkgICAgfSBlbHNlIHsKLSNpZmRlZiBDS09VTkkKLQkJ CXRvY3MgPSBybG9va3VwKHR4cnRhYixudHhydGFiLHRjc2wpOwotI2Vsc2UgLyogQ0tPVU5JICov Ci0JCQlleHRlcm4gc3RydWN0IGtleXRhYiB0dGNzdGFiW107Ci0JCQlleHRlcm4gaW50IG50eHJ0 YWI7Ci0JCQl0b2NzID0gcmxvb2t1cCh0dGNzdGFiLG50ZXJtYyx0b2NzKTsKLQkJCWlmICghdG9j cykKLQkJCSAgdG9jcyA9IGdldGRjc2V0KCk7Ci0jZW5kaWYgLyogQ0tPVU5JICovCi0gICAgICAg ICAgICAgICAgICAgIH0KLSNlbHNlIC8qIE9TMiAqLwotCQkgICAgdG9jcyA9IGdldGRjc2V0KCk7 Ci0jZW5kaWYgLyogT1MyICovCi0JCSAgICBpZiAoKG91dGNzID0gY21rZXkoZmNzdGFiLG5maWxj LAotCQkJCSAgICAgICAiY2hhcmFjdGVyLXNldCIsdG9jcyx4eHN0cmluZykpIDwgMCkKLQkJICAg ICAgcmV0dXJuKG91dGNzKTsKLQkJICAgIGJyZWFrOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQkJ ICBjYXNlIFRZUF9PVVQ6Ci0JCSAgICBpZiAoKHggPSBjbW9maSgiRmlsZSBmb3IgcmVzdWx0IGxp bmVzIiwiIiwKLQkJCQkgICAmcyx4eHN0cmluZykpIDwgMCkKLQkJICAgICAgcmV0dXJuKHgpOwot CQkgICAgY2tzdHJuY3B5KG91dGZpbGUscyxDS01BWFBBVEgpOwotCQkgICAgYnJlYWs7Ci0JCX0K LQkgICAgfSBlbHNlIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01JRkkpCi0JICAgICAgaGF2ZW5h bWUgPSAxOwotCSAgICBlbHNlCi0JICAgICAgcmV0dXJuKC0yKTsKLQl9Ci0JaWYgKGhhdmVuYW1l KSB7Ci0JICAgIGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0laKTsKLQkg ICAgeSA9IGNtcmVzdWx0Lm5yZXN1bHQ7Ci0JfSBlbHNlIHsKLQkgICAgaWYgKCh4ID0gY21pZmko IkZpbGVuYW1lIiwiIiwmcywmeSx4eHN0cmluZykpIDwgMCkgewotCQlpZiAoeCA9PSAtMykgewot CQkgICAgcHJpbnRmKCI/TmFtZSBvZiBhbiBleGlzdGluZyBmaWxlIHJlcXVpcmVkXG4iKTsKLQkJ ICAgIHJldHVybigtOSk7Ci0JCX0gZWxzZSByZXR1cm4oeCk7Ci0JICAgIH0KLQkgICAgY2tzdHJu Y3B5KGxpbmUscyxMSU5CVUZTSVopOwotCX0KLQlpZiAoeSAhPSAwKSB7Ci0JICAgIHByaW50Zigi P0Egc2luZ2xlIGZpbGUgcGxlYXNlXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0jaWZkZWYg S1VJCi0JaWYgKCBvdXRmaWxlWzBdICYmIGd1aSApIHsKLQkgICAgcHJpbnRmKCI/L0dVSSBhbmQg L09VVFBVVCBhcmUgaW5jb21wYXRpYmxlXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0jZW5k aWYgLyogS1VJICovCi0KLQlpZiAoKHkgPSBjbWNmbSgpKSA8IDApCQkvKiBDb25maXJtIHRoZSBj b21tYW5kICovCi0JICByZXR1cm4oeSk7Ci0KLSNpZmRlZiBVTklDT0RFCi0JZmlsZW9yZGVyID0g LTE7Ci0JaWYgKGNzZXQgPCAwICYmIGZpbGVwZWVrKSB7CS8qIElmIG5vIGNoYXJzZXQgc3dpdGNo ZXMgZ2l2ZW4gKi8KLQkgICAgaW50IGssIHggPSAtMTsKLQkgICAgayA9IHNjYW5maWxlKGxpbmUs JngsbnNjYW5maWxlKTsgLyogQ2FsbCBmaWxlIGFuYWx5emVyICovCi0JICAgIGRlYnVnKEYxMTEs InR5cGUgc2NhbmZpbGUiLGxpbmUsayk7Ci0JICAgIGRlYnVnKEYxMDEsInR5cGUgc2NhbmZpbGUg ZmxhZyIsIiIseCk7Ci0JICAgIHN3aXRjaChrKSB7Ci0JICAgICAgY2FzZSBGVF9VVEY4OgkJLyog d2hpY2ggY2FuIGRldGVjdCBVVEYtOC4uLiAqLwotCQljc2V0ID0gMDsKLQkJaW5jcyA9IEZDX1VU Rjg7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgRlRfVUNTMjoJCS8qIGFuZCBVQ1MtMi4uLiAqLwot CQljc2V0ID0gMDsKLQkJaW5jcyA9IEZDX1VDUzI7Ci0JCWZpbGVvcmRlciA9IHg7CQkvKiBldmVu IGlmIHRoZXJlIGlzIG5vIEJPTS4gKi8KLQkJZGVidWcoRjEwMSwidHlwZSBmaWxlb3JkZXIiLCIi LGZpbGVvcmRlcik7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotI2lmZGVmIE9TMgotICAgICAgICBp ZiAoY3NldCA8IDApIHsJCQkvKiBJZiBpbnB1dCBjaGFyc2V0IHN0aWxsIG5vdCBrbm93biAqLwot I2lmZGVmIENLT1VOSQotICAgICAgICAgICAgdG9jcyA9IHJsb29rdXAodHhydGFiLG50eHJ0YWIs dGNzbCk7Ci0jZWxzZSAvKiBDS09VTkkgKi8KLSAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5 dGFiIHR0Y3N0YWJbXTsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgbnR4cnRhYjsKLSAgICAgICAg ICAgIHRvY3MgPSBybG9va3VwKHR0Y3N0YWIsbnRlcm1jLGluY3MpOwotICAgICAgICAgICAgaWYg KCF0b2NzKQotCSAgICAgIHRvY3MgPSBnZXRkY3NldCgpOwotI2VuZGlmIC8qIENLT1VOSSAqLwot ICAgICAgICAgICAgaW5jcyA9IGxvb2t1cChmY3N0YWIsdG9jcyxuZmlsYywmeCk7Ci0gICAgICAg IH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgICAgICBpZiAob3V0Y3MgPT0gMCAmJiBpbmNzICE9 IDApIHsJLyogU3VwcGx5IGRlZmF1bHQgdGFyZ2V0IGNoYXJzZXQgKi8KLQkgICAgaW50IHggPSAw OwkJCS8qIGlmIHN3aXRjaCBub3QgZ2l2ZW4uICovCi0JICAgIHRvY3MgPSBnZXRkY3NldCgpOwot CSAgICBvdXRjcyA9IGxvb2t1cChmY3N0YWIsdG9jcyxuZmlsYywmeCk7Ci0JfQotI2Vsc2UgIC8q ICFVTklDT0RFICovCi0JaWYgKGNzZXQgPCAwKSBpbmNzID0gb3V0Y3MgPSAwOwotI2VuZGlmIC8q IFVOSUNPREUgKi8KLQotCWlmIChvdXRmaWxlWzBdICYmIHBhZ2luZykJLyogVGhpcyBjb21iaW5h dGlvbiBtYWtlcyBubyBzZW5zZSAqLwotCSAgcGFnaW5nID0gMDsJCQkvKiBzbyB0dXJuIG9mZiBw YWdpbmcgKi8KLQotI2lmZGVmIEtVSQotCS8qIE5vIHBhZ2luZyB3aGVuIGRpYWxvZyBpcyB1c2Vk ICovCi0JaWYgKCBndWkgJiYgcGFnaW5nICkKLQkgIHBhZ2luZyA9IDA7Ci0KLQlpZiAoICFndWkg JiYgaGVpZ2h0ICkgewotCSAgICBwcmludGYoIj9UaGUgL0hFSUdIVCBzd2l0Y2ggaXMgbm90IHN1 cHBvcnRlZCB3aXRob3V0IC9HVUlcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAv KiBLVUkgKi8KLQotCWlmIChjb3VudCkgcGFnaW5nID0gLTE7Ci0JZGVidWcoRjExMSwidHlwZSIs bGluZSxwYWdpbmcpOwotI2lmZGVmIEtVSQotCWlmICggZ3VpICkgewotCSAgICBzID0gKGNoYXIg KikxOyAgICAvKiBvaywgaXRzIGFuIHVnbHkgaGFjayAqLwotCSAgICBpZiAoZ3VpX3RleHRfcG9w dXBfY3JlYXRlKGd1aV90aXRsZSA/Ci0JCQkJICAgICAgZ3VpX3RpdGxlIDogbGluZSwgaGVpZ2h0 LHdpZHRoKSA8IDApIHsKLQkJcHJpbnRmKCI/L0dVSSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgc3lz dGVtXG4iKTsKLQkJZ3VpID0gMDsKLQkJcmV0dXJuKC05KTsKLQkgICAgfQotCSAgICB3aWR0aCA9 IDA7Ci0JfSBlbHNlCi0jZW5kaWYgLyogS1VJICovCi0JICBzID0gb3V0ZmlsZTsKLQlzdWNjZXNz ID0KLQkgIGRvdHlwZShsaW5lLHBhZ2luZywwLGhlYWQscGF0LHdpZHRoLHByZWZpeCxpbmNzLG91 dGNzLHMsbnVtYmVyKTsKLQlyZXR1cm4oc3VjY2Vzcyk7Ci0gICAgfQotI2VuZGlmIC8qIE5PRlJJ TExTICovCi0KLSNpZm5kZWYgTk9DU0VUUwotICAgIGlmIChjeCA9PSBYWFhMQSkgewkJCS8qIFRS QU5TTEFURSBmaWxlJ3MgY2hhcnNldCAqLwotCV9QUk9UT1RZUCAoaW50IGRveGxhdGUsICggdm9p ZCApICk7Ci0JcmV0dXJuKGRveGxhdGUoKSk7Ci0gICAgfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8K LQotICAgIGlmIChjeCA9PSBYWFZFUikgewkJCS8qIFZFUlNJT04gKi8KLQlpbnQgbiA9IDA7Ci0J ZXh0ZXJuIGNoYXIgKiBja19wYXRjaCwgKiBja19zX3Rlc3Q7Ci0jaWZkZWYgQ09NTUVOVAotCWV4 dGVybiBpbnQgaG10b3BsaW5lOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQlpZiAoKHkgPSBjbWNm bSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotCi0jaWZkZWYgQ0tfNjRCSVQKLQlwcmlu dGYoIlxuJXMsIGZvciVzICg2NC1iaXQpXG4gTnVtZXJpYzogJWxkIix2ZXJzaW8sY2t4c3lzLHZl cm51bSk7Ci0jZWxzZQotCXByaW50ZigiXG4lcywgZm9yJXNcbiBOdW1lcmljOiAlbGQiLHZlcnNp byxja3hzeXMsdmVybnVtKTsKLSNlbmRpZgkvKiBDS182NEJJVCAqLwotCXByaW50ZigiXG5cbiIp OwotICAgICAgICBwcmludGYoIkF1dGhvcnM6XG4iKTsKLQlwcmludGYoIiBGcmFuayBkYSBDcnV6 LCBDb2x1bWJpYSBVbml2ZXJzaXR5XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgSmVmZnJleSBFcmlj IEFsdG1hbiwgU2VjdXJlIEVuZHBvaW50cywgSW5jLiAlc1xuIiwKLQkgICAgICAgIjxqYWx0bWFu QHNlY3VyZS1lbmRwb2ludHMuY29tPiIKLQkgICAgICAgKTsKLQlwcmludGYoIiBDb250cmlidXRp b25zIGZyb20gbWFueSBvdGhlcnMuXG4iKTsKLQluID0gNzsKLQlpZiAoKmNrX3NfdGVzdCkgewot CSAgICBwcmludGYoIlxuVEhJUyBJUyBBIFRFU1QgVkVSU0lPTiwgTk9UIEZPUiBQUk9EVUNUSU9O IFVTRS5cbiIpOwotCSAgICBuICs9IDI7Ci0JfQotCWlmICgqY2tfcGF0Y2gpIHsKLQkgICAgcHJp bnRmKCIgUGF0Y2hlczogJXNcbiIsIGNrX3BhdGNoKTsKLQkgICAgbisrOwotCX0KLQlwcmludGYo IiBUeXBlIENPUFlSSUdIVCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNlLlxuXG4iKTsKLSNpZmRl ZiBPUzIKLQlzaG9yZWcoKTsKLSNlbHNlCi0jaWZkZWYgQ09NTUVOVAotCWhtdG9wbGluZSA9IG4r MTsKLQlobXNnYShjb3B5cmlnaHQpOwotCWhtdG9wbGluZSA9IDA7Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotI2VuZGlmIC8qIE9TMiAqLwotCXJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgfQotCi0g ICAgaWYgKGN4ID09IFhYQ1BSKSB7CQkJLyogQ09QWVJJR0hUIG9yIExJQ0VOU0UgKi8KLSAgICAg ICAgX1BST1RPVFlQKCBpbnQgaG1zZ2FhLCAoY2hhciAqIFtdLCBjaGFyICopICk7Ci0gICAgICAg IGV4dGVybiBjaGFyICogY2tfY3J5ZWFyOwotCWlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAg ICAgICByZXR1cm4oeSk7Ci0JaG1zZ2FhKGNvcHlyaWdodCxja19jcnllYXIpOwotCXJldHVybihz dWNjZXNzID0gMSk7Ci0gICAgfQotCi0jaWZuZGVmIE1BQwkJCQkvKiBPbmx5IGZvciBtdWx0aXVz ZXIgc3lzdGVtcyAqLwotI2lmbmRlZiBPUzIKLSNpZm5kZWYgTk9GUklMTFMKLSAgICBpZiAoY3gg PT0gWFhXSE8pIHsJCQkvKiBXSE8gKi8KLQljaGFyICp3YzsKLSNpZmRlZiBJS1NECi0JaWYgKGlu c2VydmVyICYmICFFTkFCTEVEKGVuX3dobykpIHsKLQkgICAgcHJpbnRmKCI/U29ycnksIFdITyBj b21tYW5kIGRpc2FibGVkXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0jZW5kaWYgLyogSUtT RCAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0JaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eik7Ci0JaWYgKG5vcHVzaCkgewotCSAgICBwcmludGYoIj9Tb3JyeSwgd2hvIG5vdCBhbGxvd2Vk XG4iKTsKLQkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQl9Ci0gICAgICAgIHhzeXN0ZW0oV0hP Q01EKTsKLSNlbHNlCi0JaWYgKCh5ID0gY210eHQoInVzZXIgbmFtZSIsIiIsJnMseHhzdHJpbmcp KSA8IDApIHJldHVybih5KTsKLSAgICAgICAgaWYgKG5vcHVzaCkgewotCSAgICBwcmludGYoIj9T b3JyeSwgV0hPIGNvbW1hbmQgZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oc3VjY2VzcyA9IDAp OwotCX0KLQlpZiAoISh3YyA9IGdldGVudigiQ0tfV0hPIikpKSB3YyA9IFdIT0NNRDsKLQlpZiAo d2MpCi0JICBpZiAoKGludCkgc3RybGVuKHdjKSA+IDApIHsKLQkgICAgICBja21ha21zZyhsaW5l LExJTkJVRlNJWix3YywiICIscyxOVUxMKTsKLQkgICAgICB4c3lzdGVtKGxpbmUpOwotCSAgfQot I2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0JcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9Ci0j ZW5kaWYgLyogTk9GUklMTFMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBNQUMgKi8K LQotI2lmbmRlZiBOT0ZSSUxMUwotICAgIGlmIChjeCA9PSBYWFdSSSB8fCBjeCA9PSBYWFdSTCB8 fCBjeCA9PSBYWFdSQkwpIHsgLyogV1JJVEUgKi8KLQlpbnQgeCx5OwkJCS8qIE9uIHN0YWNrIGlu IGNhc2Ugb2YgXGZleGVjKCkgKi8KLQlpZiAoKHggPSBjbWtleSh3cml0YWIsbndyaSwidG8gZmls ZSBvciBsb2ciLCIiLHh4c3RyaW5nKSkgPCAwKSB7Ci0JICAgIGlmICh4ID09IC0zKSBwcmludGYo Ij9Xcml0ZSB0byB3aGF0P1xuIik7Ci0JICAgIHJldHVybih4KTsKLQl9Ci0JaWYgKCh5ID0gY210 eHQoInRleHQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0JcyA9IGJyc3RyaXAo cyk7Ci0Jc3dpdGNoICh4KSB7Ci0JICBjYXNlIExPR0Q6IHkgPSBaREZJTEU7IGJyZWFrOwotCSAg Y2FzZSBMT0dQOiB5ID0gWlBGSUxFOyBicmVhazsKLSNpZm5kZWYgTk9MT0NBTAotCSAgY2FzZSBM T0dTOiB5ID0gWlNGSUxFOyBicmVhazsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0JICBjYXNlIExP R1Q6IHkgPSBaVEZJTEU7IGJyZWFrOwotI2lmbmRlZiBOT1NQTAotCSAgY2FzZSBMT0dXOiB5ID0g WldGSUxFOyBicmVhazsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCSAgY2FzZSBMT0dYOgkJCS8qIFND UkVFTiAoc3Rkb3V0KSAqLwotCSAgY2FzZSBMT0dFOgkJCS8qIEVSUk9SICAoc3RkZXJyKSAqLwot CSAgICBpZiAoeCA9PSBMT0dFKSB7Ci0JCWRlYnVnKEYxMTAsCi0JCSAgICAgIChjeCA9PSBYWFdS TCkgPyAiV1JJVEVMTiBFUlJPUiIgOiAiV1JJVEUgRVJST1IiLCBzLDApOwotCQlmcHJpbnRmKHN0 ZGVyciwiJXMlcyIscywoY3ggPT0gWFhXUkwpID8gIlxuIiA6ICIiKTsKLQkgICAgfSBlbHNlIHsK LQkJZGVidWcoRjExMCwKLQkJICAgICAgKGN4ID09IFhYV1JMKSA/ICJXUklURUxOIFNDUkVFTiIg OiAiV1JJVEUgU0NSRUVOIiwgcywwKTsKLQkJcHJpbnRmKCIlcyVzIixzLChjeCA9PSBYWFdSTCkg PyAiXG4iIDogIiIpOwotCSAgICB9Ci0JICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0JICBkZWZh dWx0OiByZXR1cm4oLTIpOwotCX0KLQlpZiAoY2hrZm4oeSkgPiAwKSB7Ci0JICAgIHggPSAoY3gg PT0gWFhXUkkpID8genNvdXQoeSxzKSA6IHpzb3V0bCh5LHMpOwotCSAgICBkZWJ1ZyhGMTExLCJX UklURSIsCi0JCSAgKGN4ID09IFhYV1JJKSA/ICJ6c291dCIgOiAienNvdXRsIiwKLQkJICB4KTsK LQkgICAgaWYgKHggPCAwKSBwcmludGYoIj9Xcml0ZSBlcnJvclxuIik7Ci0JfSBlbHNlIHsKLQkg ICAgeCA9IC0xOwotCSAgICBwcmludGYoIj9GaWxlIG9yIGxvZyBub3Qgb3BlblxuIik7Ci0JfQot CWRlYnVnKEYxMDEsIldSSVRFIHgiLCIiLHgpOwotCXJldHVybihzdWNjZXNzID0gKHggPT0gMCkg PyAxIDogMCk7Ci0gICAgfQotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSNpZm5kZWYgTk9YRkVS Ci0gICAgaWYgKGN4ID09IFhYQVNDIHx8IGN4ID09IFhYQklOKSB7Ci0JaWYgKCh4ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeCk7Ci0jaWZkZWYgTkVXRlRQCi0vKgotICBNYWtlIEMtS2VybWl0IHdv cmsgbGlrZSBvdGhlciBmdHAgY2xpZW50cywgd2hlcmUKLSAgdGhlIEFTQ0lJIChURVhUKSBhbmQg QklOQVJZIGNvbW1hbmRzIGFyZSBnbG9iYWwgc2V0dGluZ3MuCi0qLwotCWlmIChmdHBpc29wZW4o KSkgewotCSAgICBkb2Z0cGdsb2JhbHR5cGUoKGN4ID09IFhYQVNDKSA/IFhZRlRfVCA6IFhZRlRf Qik7Ci0JICAgIC8qIEZhbGwgdGhydS0tdGhlIGNvbW1hbmQgaXQgc2hvdWxkIGFwcGx5IHRvIGJv dGggRlRQIGFuZCBLZXJtaXQgKi8KLQkgICAgLyogcmV0dXJuKHN1Y2Nlc3MgPSAxKTsgKi8KLQl9 Ci0jZW5kaWYgLyogTkVXRlRQICovCi0KLQl4ZmVybW9kZSA9IFhNT0RFX007CQkvKiBTZXQgbWFu dWFsIEtlcm1pdCB0cmFuc2ZlciBtb2RlICovCi0JYmluYXJ5ID0gKGN4ID09IFhYQVNDKSA/IFhZ RlRfVCA6IFhZRlRfQjsKLQlyZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIH0KLSNlbmRpZiAvKiBO T1hGRVIgKi8KLQotICAgIGlmIChjeCA9PSBYWENMUykgewotCWlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOwotCXkgPSBja19jbHMoKTsKLQlyZXR1cm4oc3VjY2VzcyA9ICh5ID4gLTEp ID8gMSA6IDApOwotICAgIH0KLQotI2lmZGVmIENLX01LRElSCi0gICAgaWYgKGN4ID09IFhYTUtE SVIgfHwgY3ggPT0gWFhMTUtEKSB7Ci0JY2hhciAqcDsKLSNpZmRlZiBMT0NVUwotCWlmICghbG9j dXMgJiYgY3ggIT0gWFhMTUtEKSB7Ci0jaWZkZWYgTk9YRkVSCi0JICAgIHJldHVybigtMik7Ci0j ZWxzZQotCSAgICByZXR1cm4oZG9ybXQoWFpNS0QpKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAg ICAgICAgfQotI2VuZGlmIC8qIExPQ1VTICovCi0jaWZkZWYgSUtTRAotCWlmIChpbnNlcnZlciAm JiAhRU5BQkxFRChlbl9ta2QpKSB7Ci0JICAgIHByaW50ZigiP1NvcnJ5LCBkaXJlY3RvcnkgY3Jl YXRpb24gaXMgZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAvKiBJ S1NEICovCi0JaWYgKCh4ID0gY21mbGQoIk5hbWUgZm9yIG5ldyBkaXJlY3RvcnkiLCIiLCZzLHh4 c3RyaW5nKSkgPCAwKSB7Ci0JICAgIGlmICh4ICE9IC0zKSB7Ci0JCXJldHVybih4KTsKLQkgICAg fSBlbHNlIHsKLQkJcHJpbnRmKCI/RGlyZWN0b3J5IG5hbWUgcmVxdWlyZWRcbiIpOwotCQlyZXR1 cm4oLTkpOwotCSAgICB9Ci0JfQotCWNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLQlzID0g bGluZTsKLQlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLQlzID0gYnJzdHJpcChz KTsKLQliZ2NoaygpOwkJCS8qIFNldCBtc2dmbGcgKi8KLQl4ID0gY2tta2RpcigwLHMsJnAsbXNn ZmxnLDApOwotI2lmZGVmIENPTU1FTlQKLQlpZiAobXNnZmxnICYmIHggPT0gMCkKLQkgIHByaW50 ZigiP0RpcmVjdG9yeSBhbHJlYWR5IGV4aXN0c1xuIik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot CXJldHVybihzdWNjZXNzID0gKHggPCAwKSA/IDAgOiAxKTsKLSAgICB9Ci0gICAgaWYgKGN4ID09 IFhYUk1ESVIgfHwgY3ggPT0gWFhMUk1EKSB7IC8qIFJNRElSICovCi0JY2hhciAqcDsKLSNpZmRl ZiBMT0NVUwotCWlmICghbG9jdXMgJiYgY3ggIT0gWFhMUk1EKSB7Ci0jaWZkZWYgTk9YRkVSCi0J ICAgIHJldHVybigtMik7Ci0jZWxzZQotCSAgICByZXR1cm4oZG9ybXQoWFpSTUQpKTsKLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgfQotI2VuZGlmIC8qIExPQ1VTICovCi0jaWZkZWYgSUtT RAotCWlmIChpbnNlcnZlciAmJiAhRU5BQkxFRChlbl9ybWQpKSB7Ci0JICAgIHByaW50ZigiP1Nv cnJ5LCBkaXJlY3RvcnkgcmVtb3ZhbCBpcyBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7 Ci0JfQotI2VuZGlmIC8qIElLU0QgKi8KLQlpZiAoKHggPSBjbWRpcigiTmFtZSBvZiBkaXJlY3Rv cnkgdG8gYmUgcmVtb3ZlZCIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0J Y2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotCXMgPSBsaW5lOwotCWlmICgoeCA9IGNtY2Zt KCkpIDwgMCkgcmV0dXJuKHgpOwotCXMgPSBicnN0cmlwKHMpOwotCXggPSBja21rZGlyKDEscywm cCxtc2dmbGcsMCk7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAoeCA8IDApID8gMCA6IDEpOwotICAgIH0K LSNlbmRpZiAvKiBDS19NS0RJUiAqLwotCi0jaWZkZWYgVE5DT0RFCi0gICAgaWYgKGN4ID09IFhY VEVMT1ApCi0gICAgICByZXR1cm4oZG90ZWxvcHQoKSk7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0K LSNpZm5kZWYgTk9QVVNICi0gICAgaWYgKGN4ID09IFhYTlBTSCkgewotCWlmICgoeiA9IGNtY2Zt KCkpIDwgMCkgcmV0dXJuKHopOwotICAgICAgICBub3B1c2ggPSAxOwotI2lmbmRlZiBOT1NFUlZF UgotICAgICAgICBlbl9ob3MgPSAwOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0jaWZkZWYgUElQ RVNFTkQKLQl1c2VwaXBlcyA9IDA7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9QVVNIICovCi0KLSNpZmRlZiBP UzIKLSAgICBpZiAoY3ggPT0gWFhOU0NSKSB7Ci0JaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeik7Ci0gICAgICAgIHR0X3Njcm9sbCA9IDA7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0g MSk7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGN4 ID09IFhYTE9DQUwpCQkJLyogTE9DQUwgdmFyaWFibGUgZGVjbGFyYXRpb25zICovCi0gICAgICBy ZXR1cm4oc3VjY2VzcyA9IGRvbG9jYWwoKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIGlm IChjeCA9PSBYWEtFUk1JKSB7CQkvKiBUaGUgS0VSTUlUIGNvbW1hbmQgKi8KLQljaGFyICogbGlz dFs2NV07Ci0JZXh0ZXJuIGNoYXIgKip4YXJndjsKLQlleHRlcm4gaW50IHhhcmdjOwotCWludCBp OwotCWlmICgoeSA9IGNtdHh0KCJrZXJtaXQgY29tbWFuZC1saW5lIGFyZ3VtZW50cywgLWggZm9y IGhlbHAiLAotCQkgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeSk7Ci0J Y2tzdHJuY3B5KGxpbmUsImtlcm1pdCAiLExJTkJVRlNJWik7Ci0JY2tzdHJuY2F0KGxpbmUscyxM SU5CVUZTSVotOCk7Ci0JeHdvcmRzKGxpbmUsNjQsbGlzdCwwKTsKLQlmb3IgKGkgPSAxOyBpIDwg NjQ7IGkrKykgewotCSAgICBpZiAoIWxpc3RbaV0pCi0JICAgICAgYnJlYWs7Ci0JfQotCWktLTsK LQl4YXJnYyA9IGk7Ci0JeGFyZ3YgPSBsaXN0OwotCXhhcmd2Kys7Ci0Jc3N0YXRlID0gY21kbGlu KCk7Ci0JaWYgKHNzdGF0ZSkgewotCSAgICBleHRlcm4gaW50IGp1c3RvbmU7Ci0JICAgIGRlYnVn KEYwMDAsIktFUk1JVCBzc3RhdGUiLCIiLHNzdGF0ZSk7Ci0JICAgIGp1c3RvbmUgPSAxOwkJLyog Rm9yY2UgcmV0dXJuIHRvIGNvbW1hbmQgbW9kZSAqLwotCSAgICBwcm90bygpOwkJCS8qIGFmdGVy IHByb3RvY29sICovCi0JICAgIHJldHVybihzdWNjZXNzKTsKLQl9IGVsc2UgewotCSAgICBkZWJ1 ZyhGMTAxLCJLRVJNSVQgc3N0YXRlIiwiIixzc3RhdGUpOwotCSAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwkvKiBOb3QgZXhhY3RseSByaWdodCwgYnV0Li4uICovCi0JfQotICAgIH0KLSAgICBpZiAo Y3ggPT0gWFhEQVRFKSB7CQkJLyogREFURSBjb21tYW5kICovCi0JZXh0ZXJuIGNoYXIgY21kYXRl YnVmW10sICogY21kYXRlbXNnOwotCi0jaWZuZGVmIENPTU1FTlQKLQljaGFyICogZHA7Ci0JaWYg KCh5ID0gY210eHQoImRhdGUgYW5kL29yIHRpbWUsIG9yIGNhcnJpYWdlIHJldHVybiBmb3IgY3Vy cmVudCIsCi0JCSAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih5KTsKLQlz ID0gYnJzdHJpcChzKTsKLQlkcCA9IGNtY3Z0ZGF0ZShzLDEpOwotCWlmICghZHApIHsKLQkgICAg cHJpbnRmKCI/JXNcbiIsY21kYXRlbXNnID8gY21kYXRlbXNnIDogIkRhdGUgY29udmVyc2lvbiBl cnJvciIpOwotCSAgICBzdWNjZXNzID0gMDsKLQl9IGVsc2UgewotCSAgICBwcmludGYoIiVzXG4i LGRwKTsKLQkgICAgc3VjY2VzcyA9IDE7Ci0JfQotI2Vsc2UKLQkvKiBUaGlzIHdvcmtzIGZpbmUg YnV0IG1lc3NlcyB1cCBteSAiZGF0ZXMiIHRvcnR1cmUtdGVzdCBzY3JpcHQgKi8KLQotCWlmICgo eCA9IGNtZGF0ZSgiRGF0ZSBhbmQvb3IgdGltZSwgb3IgY2FycmlhZ2UgcmV0dXJuIGZvciBjdXJy ZW50IiwKLQkJCSIiLCZzLDAseHhzdHJpbmcpKSA8IDApIHsKLQkgICAgcmV0dXJuKHgpOwotCX0g ZWxzZSB7Ci0JICAgIHByaW50ZigiJXNcbiIsY21kYXRlYnVmKTsKLQkgICAgc3VjY2VzcyA9IDE7 Ci0JfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQlyZXR1cm4oc3VjY2Vzcyk7Ci0gICAgfQotI2lm bmRlZiBOT1BVU0gKLSNpZm5kZWYgTk9GUklMTFMKLSAgICBpZiAoY3ggPT0gWFhFRElUKQotICAg ICAgcmV0dXJuKGRvZWRpdCgpKTsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2VuZGlmIC8qIE5P UFVTSCAqLwotCi0jaWZkZWYgQlJPV1NFUgkJCQkvKiBEZWZpbmVkIG9ubHkgaWZuZGVmIE5PUFVT SCAqLwotICAgIGlmIChjeCA9PSBYWEJST1dTKQotICAgICAgcmV0dXJuKGRvYnJvd3NlKCkpOwot I2VuZGlmIC8qIEJST1dTRVIgKi8KLQotI2lmZGVmIENLX1RBUEkKLSAgICBpZiAoY3ggPT0gWFhU QVBJKSB7CQkJLyogTWljcm9zb2Z0IFRBUEkgKi8KLQlyZXR1cm4gKHN1Y2Nlc3MgPSBkb3RhcGko KSk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1RBUEkgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICBp ZiAoY3ggPT0gWFhXSEVSRSkgewotCWV4dGVybiBjaGFyICogcmZzcGVjLCAqIHNmc3BlYywgKiBz cmZzcGVjLCAqIHJyZnNwZWM7Ci0JaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0J cHJpbnRmKCJcbkZpbGUgbW9zdCByZWNlbnRseS4uLlxuXG4iKTsKLQlwcmludGYoIiAgU2VudDog ICAgICAgJXNcbiIsICAgc2ZzcGVjID8gc2ZzcGVjIDogIihub25lKSIpOwotCWlmIChzZnNwZWMg JiYgc3Jmc3BlYykgewotCSAgICBwcmludGYoIiAgU3RvcmVkIGFzOiAgJXNcbiIsICAgc3Jmc3Bl Yyk7Ci0JICAgIHByaW50ZigiXG4iKTsKLQl9Ci0JcHJpbnRmKCIgIFJlY2VpdmVkOiAgICVzXG4i LCAgIHJyZnNwZWMgPyBycmZzcGVjIDogIihub25lKSIpOwotCWlmIChyZnNwZWMgJiYgcnJmc3Bl YykKLQlwcmludGYoIiAgU3RvcmVkIGFzOiAgJXNcbiIsICAgcmZzcGVjKTsKLQlwcmludGYoCi0i XG5JZiB0aGUgZnVsbCBwYXRoIGlzIG5vdCBzaG93biwgdGhlbiB0aGUgZmlsZSBpcyBwcm9iYWJs eSBpbiB5b3VyIGN1cnJlbnRcbiIKLQkgICAgICAgKTsKLQlwcmludGYoCi0iZGlyZWN0b3J5IG9y IHlvdXIgZG93bmxvYWQgZGlyZWN0b3J5IChpZiBhbnkgLSBTSE9XIEZJTEUgdG8gZmluZCBvdXQp LlxuXG4iCi0JICAgICAgICk7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9Ci0jZW5kaWYg LyogTk9YRkVSICovCi0KLSNpZmRlZiBDS19SRUNBTEwKLSAgICBpZiAoY3ggPT0gWFhSRURPKQot ICAgICAgcmV0dXJuKGRvcmVkbygpKTsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLQotI2lmZGVm IENLUk9PVAotICAgIGlmIChjeCA9PSBYWENIUlQpCQkJLyogQ2hhbmdlIEtlcm1pdCdzIHJvb3Qg ZGlyZWN0b3J5ICovCi0gICAgICByZXR1cm4oZG9jaHJvb3QoKSk7Ci0jZW5kaWYgLyogQ0tST09U ICovCi0KLSNpZmRlZiBDS19LRVJCRVJPUwotICAgIGlmIChjeCA9PSBYWEFVVEgpIHsJCQkvKiBL RVJCRVJPUyAqLwotCXggPSBjcF9hdXRoKCk7CQkJLyogUGFyc2UgaXQgKi8KLSNpZmRlZiBJS1NE Ci0gICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgcHJpbnRmKCI/Q29tbWFuZCBk aXNhYmxlZCBpbiBJS1NELlxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0JaWYgKHggPCAwKQkJCS8qIFBhc3MgcGFy c2UgZXJyb3JzIGJhY2sgKi8KLQkgIHJldHVybih4KTsKLQlyZXR1cm4oc3VjY2VzcyA9IGRvYXV0 aChjeCkpOwotICAgIH0KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0jaWZuZGVmIE5PTE9D QUwKLSAgICBpZiAoY3ggPT0gWFhURVJNKSB7Ci0JcmV0dXJuKHNldHRybXR5cCgpKTsKLSAgICB9 Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0gICAgaWYgKGN4ID09IFhYU1RBVFVTKSB7Ci0JaWYg KCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0JcHJpbnRmKCAiICVzXG4iLCBzdWNjZXNz ID8gIlNVQ0NFU1MiIDogIkZBSUxVUkUiICk7Ci0JcmV0dXJuKDApOwkJCS8qIERvbid0IGNoYW5n ZSBpdCAqLwotICAgIH0KLQotICAgIGlmIChjeCA9PSBYWEZBSUwpIHsKLQlpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKLQlyZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLQotICAg IGlmIChjeCA9PSBYWFNVQ0MpIHsKLQlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsK LQlyZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIH0KLQotICAgIGlmIChjeCA9PSBYWE5MQ0wpIHsK LQlleHRlcm4gaW50IG5vbG9jYWw7Ci0JaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7 Ci0Jbm9sb2NhbCA9IDE7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9Ci0KLSNpZm5kZWYg Tk9YRkVSCi0gICAgaWYgKGN4ID09IFhYUkFTRykJCQkvKiBTaG9ydGN1dHMgZm9yIFJFTU9URSBj b21tYW5kcyAqLwotICAgICAgcmV0dXJuKGRvcm10KFhaQVNHKSk7Ci0gICAgaWYgKGN4ID09IFhY UkNXRCkKLSAgICAgIHJldHVybihkb3JtdChYWkNXRCkpOwotICAgIGlmIChjeCA9PSBYWFJDUFkp Ci0gICAgICByZXR1cm4oZG9ybXQoWFpDUFkpKTsKLSAgICBpZiAoY3ggPT0gWFhSREVMKQotICAg ICAgcmV0dXJuKGRvcm10KFhaREVMKSk7Ci0gICAgaWYgKGN4ID09IFhYUkRJUikKLSAgICAgIHJl dHVybihkb3JtdChYWkRJUikpOwotICAgIGlmIChjeCA9PSBYWFJYSVQpCi0gICAgICByZXR1cm4o ZG9ybXQoWFpYSVQpKTsKLSAgICBpZiAoY3ggPT0gWFhSSExQKQotICAgICAgcmV0dXJuKGRvcm10 KFhaSExQKSk7Ci0gICAgaWYgKGN4ID09IFhYUkhPUykKLSAgICAgIHJldHVybihkb3JtdChYWkhP UykpOwotICAgIGlmIChjeCA9PSBYWFJLRVIpCi0gICAgICByZXR1cm4oZG9ybXQoWFpLRVIpKTsK LSAgICBpZiAoY3ggPT0gWFhSUFdEKQotICAgICAgcmV0dXJuKGRvcm10KFhaUFdEKSk7Ci0gICAg aWYgKGN4ID09IFhYUlFVRSkKLSAgICAgIHJldHVybihkb3JtdChYWlFVRSkpOwotICAgIGlmIChj eCA9PSBYWFJSRU4pCi0gICAgICByZXR1cm4oZG9ybXQoWFpSRU4pKTsKLSAgICBpZiAoY3ggPT0g WFhSTUtEKQotICAgICAgcmV0dXJuKGRvcm10KFhaTUtEKSk7Ci0gICAgaWYgKGN4ID09IFhYUk1T RykKLSAgICAgIHJldHVybihkb3JtdChYWk1TRykpOwotICAgIGlmIChjeCA9PSBYWFJSTUQpCi0g ICAgICByZXR1cm4oZG9ybXQoWFpSTUQpKTsKLSAgICBpZiAoY3ggPT0gWFhSU0VUKQotICAgICAg cmV0dXJuKGRvcm10KFhaU0VUKSk7Ci0gICAgaWYgKGN4ID09IFhYUlNQQSkKLSAgICAgIHJldHVy bihkb3JtdChYWlNQQSkpOwotICAgIGlmIChjeCA9PSBYWFJUWVApCi0gICAgICByZXR1cm4oZG9y bXQoWFpUWVApKTsKLSAgICBpZiAoY3ggPT0gWFhSV0hPKQotICAgICAgcmV0dXJuKGRvcm10KFha V0hPKSk7Ci0gICAgaWYgKGN4ID09IFhYUkNEVVApCi0gICAgICByZXR1cm4oZG9ybXQoWFpDRFUp KTsKLSAgICBpZiAoY3ggPT0gWFhSUFJJKQotICAgICAgcmV0dXJuKGRvcm10KFhaUFJJKSk7Ci0j ZW5kaWYgLyogTk9YRkVSICovCi0KLSAgICBpZiAoY3ggPT0gWFhSRVNFVCkgewkJLyogUkVTRVQg Ki8KLQlpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0JY29uY2IoKGNoYXIp ZXNjYXBlKTsJCS8qIE1ha2UgY29tbWFuZCBlY2hvaW5nIHRvIG5vcm1hbCAqLwotCWRvY2xlYW4o MCk7CQkJLyogQ2xvc2UgYWxsIGZpbGVzICovCi0JcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9 Ci0KLSNpZm5kZWYgTk9YRkVSCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICBpZiAoY3ggPT0gWFhBU1NP QykJCQkvKiBBU1NPQ0lBVEUgKi8KLSAgICAgIHJldHVybihkb2Fzc29jKCkpOwotI2VuZGlmIC8q IE5PQ1NFVFMgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgIGlm IChjeCA9PSBYWFNISUZUKSB7CQkvKiBTSElGVCAqLwotCWlmICgoeSA9IGNtbnVtKCJOdW1iZXIg b2YgYXJndW1lbnRzIHRvIHNoaWZ0IiwiMSIsMTAsJngseHhzdHJpbmcpKSA8IDApCi0JICByZXR1 cm4oeSk7Ci0JaWYgKCh6ID0gY21jZm0oKSkgPCAwKQotCSAgcmV0dXJuKHopOwotCXJldHVybihz dWNjZXNzID0gZG9zaGlmdCh4KSk7Ci0gICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5k ZWYgTk9IRUxQCi0gICAgaWYgKGN4ID09IFhYTUFOKQotICAgICAgcmV0dXJuKGRvbWFudWFsKCkp OwotI2VuZGlmIC8qIE5PSEVMUCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGN4ID09IFhY U09SVCkJCQkvKiBTT1JUIGFuIGFycmF5ICovCi0gICAgICByZXR1cm4oZG9zb3J0KCkpOwotI2Vu ZGlmIC8qIE5PU1BMICovCi0KLSAgICBpZiAoY3ggPT0gWFhQVVJHRSkgewotI2lmZGVmIElLU0QK LQlpZiAoaW5zZXJ2ZXIgJiYgKCFFTkFCTEVEKGVuX2RlbCkKLSNpZmRlZiBDS19MT0dJTgotICAg ICAgICAgICAgICAgICAgICAgICAgICB8fCBpc2d1ZXN0Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8K LQkJCSApKSB7Ci0JICAgIHByaW50ZigiP1NvcnJ5LCBERUxFVEUgaXMgZGlzYWJsZWRcbiIpOwot CSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgQ0tfQVBDCi0J aWYgKChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMKSB8fAotCSAgICAoKGFwY2FjdGl2ZSA9PSBBUENf UkVNT1RFKSAmJiAoIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpKSkKLQkgIHJldHVybihzdWNjZXNz ID0gMCk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0jaWZkZWYgQ0tQVVJHRQotICAgICAgICByZXR1 cm4oZG9wdXJnZSgpKTsKLSNlbHNlCi0jaWZkZWYgVk1TCi0JaWYgKCh4ID0gY210eHQoIm9wdGlv bmFsIHN3aXRjaGVzIGZvbGxvd2VkIGJ5IGZpbGVzcGVjIiwKLQkJICAgICAgICIiLCZzLHh4c3Ry aW5nKSkgPCAwKQotCSAgcmV0dXJuKHgpOwotCWlmIChub3B1c2gpIHsKLQkgICAgcHJpbnRmKCI/ U29ycnksIERDTCBhY2Nlc3MgaXMgZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0K LQlja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0JcyA9IGxpbmU7Ci0JeCA9IG1sb29rKG1h Y3RhYiwicHVyZ2UiLG5tYWMpOwotCXJldHVybihzdWNjZXNzID0gZG9kbyh4LHMsY21kc3RrW2Nt ZGx2bF0uY2NmbGdzKSk7Ci0jZWxzZQotCXJldHVybigtMik7Ci0jZW5kaWYgLyogVk1TICovCi0j ZW5kaWYgLyogQ0tQVVJHRSAqLwotICAgIH0KLQotI2lmbmRlZiBOT1NQTAotICAgIGlmIChjeCA9 PSBYWEZBU1QpIHsKLQlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLQl4ID0gbWxv b2sobWFjdGFiLCJmYXN0IixubWFjKTsKLQlyZXR1cm4oc3VjY2VzcyA9IGRvZG8oeCxOVUxMLGNt ZHN0a1tjbWRsdmxdLmNjZmxncykpOwotICAgIH0KLSAgICBpZiAoY3ggPT0gWFhDQVUpIHsKLQlp ZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLQl4ID0gbWxvb2sobWFjdGFiLCJjYXV0 aW91cyIsbm1hYyk7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSBkb2RvKHgsTlVMTCxjbWRzdGtbY21kbHZs XS5jY2ZsZ3MpKTsKLSAgICB9Ci0gICAgaWYgKGN4ID09IFhYUk9CKSB7Ci0JaWYgKCh4ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0JeCA9IG1sb29rKG1hY3RhYiwicm9idXN0IixubWFjKTsK LQlyZXR1cm4oc3VjY2VzcyA9IGRvZG8oeCxOVUxMLGNtZHN0a1tjbWRsdmxdLmNjZmxncykpOwot ICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgaWYgKGN4ID09IFhYU0NSTikgewkJCS8q IFNDUkVFTiAqLwotCWludCByb3csIGNvbDsKLQlpZiAoKHggPSBjbWtleShzY250YWIsIG5zY250 YWIsInNjcmVlbiBhY3Rpb24iLCIiLCB4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih4KTsKLQlz d2l0Y2ggKHgpIHsJCQkvKiBNT1ZFLVRPIChjdXJzb3IgcG9zaXRpb24pICovCi0JICBjYXNlIFND Tl9NT1Y6Ci0JICAgIGlmICgoeSA9IGNtbnVtKCJSb3cgKDEtYmFzZWQpIiwiIiwxMCwmeix4eHN0 cmluZykpIDwgMCkKLQkgICAgICByZXR1cm4oeSk7Ci0JICAgIHJvdyA9IHo7Ci0JICAgIHkgPSBj bW51bSgiQ29sdW1uICgxLWJhc2VkKSIsIjEiLDEwLCZ6LHh4c3RyaW5nKTsKLQkgICAgaWYgKHkg PCAwKQotCSAgICAgIHJldHVybih5KTsKLQkgICAgY29sID0gejsKLQkgICAgaWYgKCh5ID0gY21j Zm0oKSkgPCAwKQotCSAgICAgIHJldHVybih5KTsKLQkgICAgaWYgKHJvdyA8IDAgfHwgY29sIDwg MCkgewotCQlwcmludGYoIj9Sb3cgYW5kIENvbHVtbiBtdXN0IGJlIDEgb3IgZ3JlYXRlclxuIik7 Ci0JCXJldHVybigtOSk7Ci0JICAgIH0KLQkgICAgaWYgKGNtZF9yb3dzID4gMCAmJiByb3cgPiBj bWRfcm93cykKLQkgICAgICByb3cgPSBjbWRfcm93czsKLQkgICAgaWYgKGNtZF9jb2xzID4gMCAm JiBjb2wgPiBjbWRfY29scykKLQkgICAgICBjb2wgPSBjbWRfY29sczsKLQkgICAgeSA9IGNrX2N1 cnBvcyhyb3csY29sKTsKLQkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAoeSA+IC0xKSA/IDEgOiAwKTsK LQotCSAgY2FzZSBTQ05fQ0xSOgkJCS8qIENMRUFSICovCi0JICAgIGlmICgoeSA9IGNtY2ZtKCkp IDwgMCkKLQkgICAgICByZXR1cm4oeSk7Ci0JICAgIGRlYnVnKEYxMDAsInNjcmVlbiBjYWxsaW5n IGNrX2NscygpIiwiIiwwKTsKLQkgICAgeSA9IGNrX2NscygpOwotCSAgICByZXR1cm4oc3VjY2Vz cyA9ICh5ID4gLTEpID8gMSA6IDApOwotCi0JICBjYXNlIFNDTl9DTEU6CQkJLyogQ0xFT0wgKi8K LQkgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotCSAgICAgIHJldHVybih5KTsKLQkgICAgeSA9 IGNrX2NsZW9sKCk7Ci0JICAgIHJldHVybihzdWNjZXNzID0gKHkgPiAtMSkgPyAxIDogMCk7Ci0J fQotICAgIH0KLQotI2lmbmRlZiBOT0hUVFAKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBpZiAoY3gg PT0gWFhIVFRQKQotICAgICAgcmV0dXJuKGRvaHR0cCgpKTsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQg Ki8KLSNlbmRpZiAvKiBOT0hUVFAgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgIGlmIChjeCA9PSBY WEFSUkFZKSB7CQkvKiBBUlJBWSAqLwotI2lmbmRlZiBOT1NIT1cKLQlleHRlcm4gaW50IHNob3dh cnJheSgpOwotI2VuZGlmIC8qIE5PU0hPVyAqLwotCWlmICgoeCA9IGNta2V5KGFycmF5dGFiLCBu YXJyYXl0YWIsIkFycmF5IG9wZXJhdGlvbiIsIiIseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4o eCk7Ci0Jc3dpdGNoICh4KSB7Ci0JICBjYXNlIEFSUl9EQ0w6Ci0JICAgIHJldHVybihkb2RjbChY WERDTCkpOwotCSAgY2FzZSBBUlJfU1JUOgotCSAgICByZXR1cm4oZG9zb3J0KCkpOwotI2lmbmRl ZiBOT1NIT1cKLQkgIGNhc2UgQVJSX1NITzoKLQkgICAgcmV0dXJuKHNob3dhcnJheSgpKTsKLSNl bmRpZiAvKiBOT1NIT1cgKi8KLQkgIGNhc2UgQVJSX0NQWToKLQkgICAgcmV0dXJuKGNvcHlhcnJh eSgpKTsKLQkgIGNhc2UgQVJSX1NFVDoKLQkgIGNhc2UgQVJSX0NMUjoKLQkgICAgcmV0dXJuKGNs cmFycmF5KHgpKTsKLQkgIGNhc2UgQVJSX0RTVDoKLQkgICAgcmV0dXJuKHVuYXJyYXkoKSk7Ci0J ICBjYXNlIEFSUl9SU1o6Ci0JICAgIHJldHVybihyc3phcnJheSgpKTsKLQkgIGNhc2UgQVJSX0VR VToKLQkgICAgcmV0dXJuKGxpbmthcnJheSgpKTsKLQotCSAgZGVmYXVsdDoKLQkgICAgcHJpbnRm KCI/U29ycnksIG5vdCBpbXBsZW1lbnRlZCB5ZXQgLSBcIiVzXCJcbiIsY21kYnVmKTsKLQkgICAg cmV0dXJuKC05KTsKLQl9Ci0gICAgfQotICAgIGlmIChjeCA9PSBYWFRSQUNFKQkJCS8qIFRSQUNF ICovCi0gICAgICByZXR1cm4oZG90cmFjZSgpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZk ZWYgQ0tfUEVSTVMKLSNpZmRlZiBVTklYCi0gICAgaWYgKGN4ID09IFhYQ0hNT0QpCi0gICAgICBy ZXR1cm4oZG91Y2htb2QoKSk7CQkvKiBEbyBVbml4IGNobW9kICovCi0jZW5kaWYgLyogVU5JWCAq LwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0KLSAgICBpZiAoY3ggPT0gWFhQUk9NUCkKLSAgICAg IHJldHVybihkb3Byb21wdCgpKTsKLQotICAgIGlmIChjeCA9PSBYWEdSRVApCi0gICAgICByZXR1 cm4oZG9ncmVwKCkpOwotCi0gICAgaWYgKGN4ID09IFhYREVCVUcpIHsJCS8qIERFQlVHICovCi0j aWZuZGVmIERFQlVHCi0JaW50IGR1bW15ID0gMDsKLQlyZXR1cm4oc2V0b24oJmR1bW15KSk7Ci0j ZWxzZQotCXJldHVybihzZXRvbigmZGVibG9nKSk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICB9 Ci0gICAgaWYgKGN4ID09IFhYTVNHIHx8IGN4ID09IFhYWE1TRykgewkvKiBNRVNTQUdFICovCi0J ZXh0ZXJuIGludCBkZWJtc2c7CQkvKiBTY3JpcHQgZGVidWdnaW5nIG1lc3NhZ2VzICovCi0JaWYg KCh4ID0gY210eHQoIk1lc3NhZ2UgdG8gcHJpbnQgaWYgU0VUIERFQlVHIE1FU1NBR0UgaXMgT04g b3IgU1RERVJSIiwKLQkJICIiLCZzLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHgpOwotCWlm ICghcykJCQkJLyogV2F0Y2ggb3V0IGZvciBudWxsIHJlc3VsdCAqLwotCSAgcyA9ICIiOwkJCS8q IE1ha2UgaXQgYW4gZW1wdHkgc3RyaW5nICovCi0JZWxzZSAJCQkJLyogTm90IG51bGwgKi8KLQkg IHMgPSBicnN0cmlwKHMpOwkJLyogU3RyaXAgYnJhY2VzIGFuZCBkb3VibGVxdW90ZXMgKi8KLQlz d2l0Y2ggKGRlYm1zZykgewkJLyogTm90IGRlYnVnZ2luZyAtIGRvbid0IHByaW50ICovCi0JICBj YXNlIDA6Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAxOgotCSAgICBwcmludGYoIiVzIixzKTsJCS8q IFByaW50IHRvIHN0ZG91dCAqLwotCSAgICBpZiAoY3ggPT0gWFhNU0cpIHByaW50ZigiXG4iKTsK LQkgICAgYnJlYWs7Ci0JICBjYXNlIDI6Ci0JICAgIGZwcmludGYoc3RkZXJyLCIlcyIscyk7CS8q IERpdHRvIGJ1dCBwcmludCB0byBzdGRlcnIgKi8KLQkgICAgaWYgKGN4ID09IFhYTVNHKSBmcHJp bnRmKHN0ZGVyciwiXG4iKTsKLQkgICAgYnJlYWs7Ci0JfQotCXJldHVybigwKTsJCQkvKiBSZXR1 cm4gd2l0aG91dCBhZmZlY3RpbmcgU1VDQ0VTUyAqLwotICAgIH0KLQotI2lmZGVmIENLTEVBUk4K LSAgICBpZiAoY3ggPT0gWFhMRUFSTikgewkJLyogTEVBUk4gKi8KLQlzdHJ1Y3QgRkRCIG9mLCBz dywgY207Ci0JaW50IGNsb3NpbmcgPSAwLCBvZmYgPSAwLCBvbiA9IDAsIGNvbmZpcm1lZCA9IDA7 Ci0JY2hhciBjOwotCi0JY21mZGJpKCZzdywJCQkvKiAybmQgRkRCIC0gb3B0aW9uYWwgL1BBR0Ug c3dpdGNoICovCi0JICAgICAgIF9DTUtFWSwJCQkvKiBmY29kZSAqLwotCSAgICAgICAiU2NyaXB0 IGZpbGUgbmFtZSwgb3Igc3dpdGNoIiwgLyogaGxwbXNnICovCi0JICAgICAgICIiLAkJCS8qIGRl ZmF1bHQgKi8KLQkgICAgICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkgICAgICAg MywJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLQkgICAgICAgNCwJCQkv KiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0JICAgICAgIHh4c3RyaW5nLAkJ LyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotCSAgICAgICBsZWFybnN3aSwJCS8qIEtleXdvcmQg dGFibGUgKi8KLQkgICAgICAgJm9mCQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotCSAgICAg ICApOwotCWNtZmRiaSgmb2YsX0NNT0ZJLCIiLCIiLCIiLDAsMCx4eHN0cmluZyxOVUxMLCZjbSk7 Ci0JY21mZGJpKCZjbSxfQ01DRk0sIiIsIiIsIiIsMCwwLE5VTEwsTlVMTCxOVUxMKTsKLQlsaW5l WzBdID0gTlVMOwotCi0Jd2hpbGUgKCFjb25maXJtZWQpIHsKLQkgICAgeCA9IGNtZmRiKCZzdyk7 CQkvKiBQYXJzZSBzb21ldGhpbmcgKi8KLQkgICAgaWYgKHggPCAwKQotCSAgICAgIHJldHVybih4 KTsKLQkgICAgc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgewkvKiBXaGF0IHdhcyBpdD8gKi8KLQkg ICAgICBjYXNlIF9DTU9GSToJCS8qIE91dHB1dCBmaWxlIG5hbWUgKi8KLQkJY2tzdHJuY3B5KGxp bmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOwotCQlicmVhazsKLQkgICAgICBjYXNlIF9D TUtFWToJCS8qIFN3aXRjaCAqLwotCQljID0gY21nYnJrKCk7Ci0JCWlmICgoYyA9PSAnOicgfHwg YyA9PSAnPScpICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0JCSAgICBwcmludGYoIj9U aGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKLQkJICAgIHJldHVybigt OSk7Ci0JCX0KLQkJc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7Ci0JCSAgY2FzZSAyOgkJLyog L0NMT1NFICovCi0JCSAgICBjbG9zaW5nID0gMTsJLyogRmFsbCB0aHJ1IG9uIHB1cnBvc2UgKi8K LQkJICBjYXNlIDA6CQkvKiAvT0ZGICovCi0JCSAgICBvZmYgPSAxOwotCQkgICAgb24gPSAwOwot CQkgICAgYnJlYWs7Ci0JCSAgY2FzZSAxOgkJLyogL09OICovCi0JCSAgICBvbiA9IDE7Ci0JCSAg ICBvZmYgPSAwOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JICAgICAgY2FzZSBfQ01D Rk06CQkvKiBDb25maXJtYXRpb24gKi8KLQkJY29uZmlybWVkKys7Ci0JCWJyZWFrOwotCSAgICB9 Ci0JfQotCWlmIChjbG9zaW5nKSB7Ci0JICAgIGlmIChsZWFybmZwKSB7Ci0JCWZjbG9zZShsZWFy bmZwKTsKLQkJbGVhcm5mcCA9IE5VTEw7Ci0JICAgIH0KLQkgICAgbWFrZXN0cigmbGVhcm5maWxl LE5VTEwpOwotCX0KLQlpZiAobGluZVswXSkgewotCSAgICBpZiAoIW9uICYmICFvZmYpCi0JICAg ICAgb24gPSAxOwotCSAgICBpZiAobGVhcm5mcCkgewotCQlmY2xvc2UobGVhcm5mcCk7Ci0JCWxl YXJuZnAgPSBOVUxMOwotCSAgICB9Ci0JICAgIG1ha2VzdHIoJmxlYXJuZmlsZSxsaW5lKTsKLQkg ICAgaWYgKGxlYXJuZmlsZSkgewotCQljaGFyICogbW9kZXMgPSAidyI7Ci0JCWxlYXJuZnAgPSBm b3BlbihsZWFybmZpbGUsbW9kZXMpOwotCQlpZiAoIWxlYXJuZnApIHsKLQkJICAgIGRlYnVnKEYx MTAsIkxFQVJOIGZpbGUgb3BlbiBlcnJvciIsbGVhcm5maWxlLDApOwotCQkgICAgcGVycm9yKGxl YXJuZmlsZSk7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9IGVsc2UgewotI2lmZGVmIFpGTlFGUAot CQkgICAgaWYgKHpmbnFmcChsZWFybmZpbGUsVE1QQlVGU0laLHRtcGJ1ZikpCi0JCSAgICAgIG1h a2VzdHIoJmxlYXJuZmlsZSx0bXBidWYpOwotI2VuZGlmIC8qIFpGTlFGUCAqLwotCQkgICAgZGVi dWcoRjExMCwiTEVBUk4gZmlsZSBvcGVuIG9rIixsZWFybmZpbGUsMCk7Ci0JCSAgICBpZiAoIXF1 aWV0KSB7Ci0JCQlwcmludGYoIlJlY29yZGluZyB0byAlcy4uLlxuXG4iLGxlYXJuZmlsZSk7Ci0J CQlwcmludGYoCi0iIFdBUk5JTkc6IElmIHlvdSB0eXBlIHlvdXIgcGFzc3dvcmQgZHVyaW5nIHNj cmlwdCByZWNvcmRpbmcsIGl0IHdpbGwgYXBwZWFyXG5cCi0gaW4gdGhlIGZpbGUuICBCZSBzdXJl IHRvIGVkaXQgaXQgb3IgdGFrZSBvdGhlciBhcHByb3ByaWF0ZSBwcmVjYXV0aW9ucy5cblxuIgot CQkJICAgICAgICk7Ci0JCSAgICB9Ci0JCSAgICBmcHV0cyggICI7IFNjcmlwdGZpbGU6ICIsbGVh cm5mcCk7Ci0JCSAgICBmcHV0cyhsZWFybmZpbGUsbGVhcm5mcCk7Ci0JCSAgICBmcHV0cygiXG47 IERpcmVjdG9yeTogICIsbGVhcm5mcCk7Ci0JCSAgICBmcHV0cyh6Z3RkaXIoKSxsZWFybmZwKTsK LQkJICAgIGZwdXRzKCJcbjsgUmVjb3JkZWQ6ICAgIixsZWFybmZwKTsKLQkJICAgIGZwdXRzKGNr ZGF0ZSgpLGxlYXJuZnApOwotCQkgICAgZnB1dHMoIlxuIixsZWFybmZwKTsKLQkJfQotCSAgICB9 Ci0JfQotCWlmIChvbikgewotCSAgICBsZWFybmluZyA9IDE7Ci0JfSBlbHNlIGlmIChvZmYpIHsK LQkgICAgbGVhcm5pbmcgPSAwOwotCX0KLQlkZWJ1ZyhGMTAxLCJMRUFSTiBsZWFybmluZyIsIiIs bGVhcm5pbmcpOwotCXJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgfQotI2VuZGlmIC8qIENLTEVB Uk4gKi8KLQotI2lmZGVmIE5FV0ZUUAotICAgIGlmIChjeCA9PSBYWFVTRVIgfHwgY3ggPT0gWFhB Q0NUKSB7Ci0JaWYgKCFmdHBpc29wZW4oKSkgewotCSAgICBwcmludGYoIj9GVFAgY29ubmVjdGlv biBpcyBub3Qgb3BlblxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCXJldHVybihzdWNjZXNz ID0gKGN4ID09IFhYVVNFUikgPyBkb2Z0cHVzcigpIDogZG9mdHBhY2N0KCkpOwotICAgIH0KLSAg ICBpZiAoY3ggPT0gWFhTSVRFIHx8IGN4ID09IFhYUEFTVikgewotCWlmICghZnRwaXNvcGVuKCkp IHsKLQkgICAgcHJpbnRmKCI/RlRQIGNvbm5lY3Rpb24gaXMgbm90IG9wZW5cbiIpOwotCSAgICBy ZXR1cm4oLTkpOwotCX0KLQlyZXR1cm4oc3VjY2VzcyA9IChjeCA9PSBYWFNJVEUpID8gZG9mdHBz aXRlKCkgOiBkb3NldGZ0cHBzdigpKTsKLSAgICB9Ci0jZW5kaWYgLyogTkVXRlRQICovCi0KLSAg ICBpZiAoY3ggPT0gWFhPUklFKSB7CQkJLyogT1JJRU5UQVRJT04gKi8KLQlleHRlcm4gY2hhciAq IG15bmFtZTsKLQlpbnQgaSwgeSwgbiA9IDA7Ci0gICAgICAgIGNoYXIgKiBzLCAqcCwgdmJ1Zlsz Ml07Ci0JY2hhciAqIHZhcnNbMTZdOyAgICAgICBjaGFyICogbGVnZW5kWzE2XTsKLQotCWlmICgo eSA9IGNtY2ZtKCkpIDwgMCkKLQkgIHJldHVybih5KTsKLQotCXByaW50ZigiXG5Qcm9ncmFtIG5h bWU6XG4gICVzXG5cbiIsbXluYW1lKTsKLQluICs9IDQ7Ci0KLSNpZmRlZiBOVAotCXZhcnNbMF0g PSAiaG9tZSI7ICAgICAgbGVnZW5kWzBdID0gIllvdXIgaG9tZSBkaXJlY3RvcnkiOwotCXZhcnNb MV0gPSAiZGlyZWN0b3J5IjsgbGVnZW5kWzFdID0gIks5NSdzIGN1cnJlbnQgZGlyZWN0b3J5IjsK LQl2YXJzWzJdID0gImV4ZWRpciI7ICAgIGxlZ2VuZFsyXSA9ICJLOTUgUHJvZ3JhbSBkaXJlY3Rv cnkiOwotCXZhcnNbM10gPSAiaW5pZGlyIjsgICAgbGVnZW5kWzNdID0gIks5NSBJbml0aWFsaXph dGlvbiBmaWxlIGRpcmVjdG9yeSI7Ci0JdmFyc1s0XSA9ICJzdGFydHVwIjsgICBsZWdlbmRbNF0g PSAiQ3VycmVudCBkaXJlY3Rvcnkgd2hlbiBzdGFydGVkIjsKLQkKLSAgICAgICAgdmFyc1s1XSA9 ICJjb21tb24iOwotICAgICAgICBsZWdlbmRbNV0gPSAiSzk1IGRhdGEgZm9yIGFsbCB1c2VycyBh bmQgSzk1U0lURS5JTkkgZmlsZSI7Ci0JCi0gICAgICAgIHZhcnNbNl0gPSAicGVyc29uYWwiOyAg bGVnZW5kWzZdID0gIllvdXIgcGVyc29uYWwgZGF0YSBkaXJlY3RvcnkgdHJlZSI7Ci0gICAgICAg IHZhcnNbN10gPSAiZGVza3RvcCI7ICAgbGVnZW5kWzddID0gIllvdXIgZGVza29wIGRpcmVjdG9y eSB0cmVlIjsKLQkKLSAgICAgICAgdmFyc1s4XSA9ICJhcHBkYXRhIjsKLSAgICAgICAgbGVnZW5k WzhdID0gIllvdXIgcGVyc29uYWwgSzk1IGRhdGEgdHJlZSBhbmQgSzk1Q1VTVE9NLklOSSBmaWxl IjsKLQkKLSAgICAgICAgdmFyc1s5XSA9ICJkb3dubG9hZCI7ICBsZWdlbmRbOV0gPSAiWW91ciBL OTUgZG93bmxvYWQgZGlyZWN0b3J5IjsKLSAgICAgICAgdmFyc1sxMF0gPSAidG1wZGlyIjsgICBs ZWdlbmRbMTBdID0gIllvdXIgVEVNUCBkaXJlY3RvcnkiOwotCXZhcnNbMTFdID0gTlVMTDsgICAg ICAgbGVnZW5kWzExXSA9IE5VTEw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTYgJiYgdmFyc1tpXTsg aSsrKSB7Ci0JICAgIHByaW50ZigiJXM6XG4iLGxlZ2VuZFtpXSk7Ci0JICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0JICAg IGNrbWFrbXNnKHZidWYsMzIsIlxcdigiLHZhcnNbaV0sIikiLE5VTEwpOwotCSAgICBwcmludGYo IiAgVmFyaWFibGU6ICAgJXNcbiIsdmJ1Zik7Ci0JICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0JICAgIHkgPSBUTVBCVUZT SVo7Ci0JICAgIHMgPSB0bXBidWY7Ci0JICAgIHp6c3RyaW5nKHZidWYsJnMsJnkpOwotCSAgICBs aW5lWzBdID0gTlVMOwotCSAgICBja0dldExvbmdQYXRoTmFtZSh0bXBidWYsbGluZSxMSU5CVUZT SVopOwotCSAgICBwcmludGYoIiAgTG9uZyBuYW1lOiAgJXNcbiIsbGluZSk7Ci0JICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 Ci0JICAgIGxpbmVbMF0gPSBOVUw7Ci0JICAgIEdldFNob3J0UGF0aE5hbWUodG1wYnVmLGxpbmUs TElOQlVGU0laKTsKLQkgICAgcHJpbnRmKCIgIFNob3J0IG5hbWU6ICVzXG4iLGxpbmUpOwotCSAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNl IG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotCSAgICBpZiAoKytuID4gY21kX3Jv d3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotCX0KLSNlbHNl ICAvKiBOVCAqLwotCi0JdmFyc1swXSA9ICJob21lIjsgICAgICBsZWdlbmRbMF0gPSAiWW91ciBo b21lIGRpcmVjdG9yeSI7Ci0JdmFyc1sxXSA9ICJkaXJlY3RvcnkiOyBsZWdlbmRbMV0gPSAiS2Vy bWl0J3MgY3VycmVudCBkaXJlY3RvcnkiOwotCXZhcnNbMl0gPSAiZXhlZGlyIjsgICAgbGVnZW5k WzJdID0gIktlcm1pdCdzIHByb2dyYW0gZGlyZWN0b3J5IjsKLQl2YXJzWzNdID0gImluaWRpciI7 ICAgIGxlZ2VuZFszXSA9ICJJbml0aWFsaXphdGlvbiBmaWxlIGRpcmVjdG9yeSI7Ci0JdmFyc1s0 XSA9ICJzdGFydHVwIjsgICBsZWdlbmRbNF0gPSAiQ3VycmVudCBkaXJlY3Rvcnkgd2hlbiBzdGFy dGVkIjsKLQl2YXJzWzVdID0gImRvd25sb2FkIjsgIGxlZ2VuZFs1XSA9ICJLZXJtaXQgZG93bmxv YWQgZGlyZWN0b3J5IjsKLQl2YXJzWzZdID0gTlVMTDsJICAgICAgIGxlZ2VuZFs2XSA9IE5VTEw7 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTYgJiYgdmFyc1tpXTsgaSsrKSB7Ci0JICAgIHByaW50Zigi JXM6XG4iLGxlZ2VuZFtpXSk7Ci0JICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0JICAgIGNrbWFrbXNnKHZidWYsMzIsIlxc digiLHZhcnNbaV0sIikiLE5VTEwpOwotCSAgICBwcmludGYoIiAgVmFyaWFibGU6ICVzXG4iLHZi dWYpOwotCSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDApOyBlbHNlIG4gPSAwOwotCSAgICB5ID0gVE1QQlVGU0laOwotCSAgICBzID0gdG1wYnVmOwot CSAgICB6enN0cmluZyh2YnVmLCZzLCZ5KTsKLSAgICAgICAgICAgIHByaW50ZigiICBWYWx1ZTog ICAgJXNcbiIsdG1wYnVmKTsKLQkgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsK LQkgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKLQl9Ci0jZW5kaWYgLyogTlQgKi8KLQlyZXR1cm4oc3VjY2VzcyA9IDEpOwot ICAgIH0KLQotI2lmZGVmIE5UCi0gICAgaWYgKGN4ID09IFhYRElBTEVSKSB7Ci0gICAgICAgIFN0 YXJ0RGlhbGVyKCk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgfQotI2VuZGlm IC8qIE5UICovCi0KLSAgICBpZiAoY3ggPT0gWFhDT05UKSB7CQkJLyogQ09OVElOVUUgKi8KLQlp ZiAoKHggPSBjbWNmbSgpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0JaWYgKCF4Y21kc3JjKSB7CQkJ LyogQXQgcHJvbXB0OiBjb250aW51ZSBzY3JpcHQgKi8KLQkgICAgaWYgKGNtZGx2bCA+IDApCi0J ICAgICAgcG9wY2x2bCgpOwkJLyogUG9wIGNvbW1hbmQgbGV2ZWwgKi8KLQkgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsJLyogYWx3YXlzIHN1Y2NlZWRzICovCi0jaWZuZGVmIE5PU1BMCi0JfSBlbHNl IHsJCQkvKiBJbiBzY3JpcHQ6IHdoYXRldmVyLi4uICovCi0JICAgIHggPSBtbG9vayhtYWN0YWIs ImNvbnRpbnVlIixubWFjKTsKLQkgICAgLyogRG9uJ3Qgc2V0IHN1Y2Nlc3MgKi8KLQkgICAgcmV0 dXJuKGRvZG8oeCxOVUxMLGNtZHN0a1tjbWRsdmxdLmNjZmxncykpOwotI2VuZGlmIC8qIE5PU1BM ICovCi0JfQotICAgIH0KLSNpZmRlZiBVTklYCi0jaWZuZGVmIE5PUFVURU5WCi0vKgotICBOT1RF OiBTeW50YXggaXMgUFVURU5WIG5hbWUgdmFsdWUsIG5vdCBQVVRFTlYgbmFtZT12YWx1ZS4KLSAg SSBjb3VsZCBjaGVjayBmb3IgdGhpcyBidXQgaXQgd291bGQgYmUgdG9vIG11Y2ggbWFnaWMuCi0q LwotICAgIGlmIChjeCA9PSBYWFBVVEUpIHsJCQkvKiBQVVRFTlYgKi8KLSAgICAgICAgY2hhciAq IHQgPSB0bXBidWY7CQkvKiBDcmVhdGUgb3IgYWx0ZXIgZW52aXJvbm1lbnQgdmFyICovCi0JY2hh ciAqIHMxID0gTlVMTCwgKiBzMiA9IE5VTEw7Ci0JaWYgKCh4ID0gY21mbGQoIlZhcmlhYmxlIG5h bWUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLQlpZiAocykg aWYgKHMgPT0gIiIpIHMgPSBOVUxMOwotCShWT0lEKSBtYWtlc3RyKCZzMSxzKTsKLQlpZiAocyAm JiAhczEpIHsKLQkgICAgcHJpbnRmKCI/UFVURU5WIC0gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVy ZVxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCWlmICgoeCA9IGNtdHh0KCJWYWx1ZSIsIiIs JnMseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0JaWYgKHMpIGlmIChzID09ICIiKSBz ID0gTlVMTDsKLQkoVk9JRCkgbWFrZXN0cigmczIscyk7Ci0Jc3VjY2VzcyA9IGRvcHV0ZW52KHMx LHMyKTsKLQkoVk9JRCkgbWFrZXN0cigmczEsTlVMTCk7Ci0JKFZPSUQpIG1ha2VzdHIoJnMyLE5V TEwpOwotCXJldHVybihzdWNjZXNzKTsKLSAgICB9Ci0jZW5kaWYJLyogTk9QVVRFTlYgKi8KLSNl bmRpZgkvKiBVTklYICovCi0KLSAgICBpZiAoY3ggPT0gWFhOT1RBVikgewkJLyogQ29tbWFuZCBp biB0YWJsZSBub3QgYXZhaWxhYmxlICovCi0JY2tzdHJuY3B5KHRtcGJ1ZixhdG1idWYsVE1QQlVG U0laKTsKLQlpZiAoKHggPSBjbXR4dCgiUmVzdCBvZiBjb21tYW5kIiwiIiwmcyxOVUxMKSkgPCAw KQotCSAgcmV0dXJuKHgpOwotCXByaW50ZigiU29ycnksIFwiJXNcIiBub3QgY29uZmlndXJlZCBp biB0aGlzIHZlcnNpb24gb2YgS2VybWl0LlxuIiwKLQkgICAgICAgdG1wYnVmCi0JICAgICAgICk7 Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9Ci0gICAgcmV0dXJuKC0yKTsJCQkJLyogTm9u ZSBvZiB0aGUgYWJvdmUgKi8KLQotfSAvKiBlbmQgb2YgZG9jbWQoKSAqLwotCi0jZW5kaWYgLyog Tk9JQ1AgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrdXVzci5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1 c3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM4OTFmYi4uMDAwMDAwMAotLS0g YS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzci5oCisrKyAvZGV2 L251bGwKQEAgLTEsMzA0OSArMCwwIEBACi0vKiAgQyBLIFUgVSBTIFIgLiBIICAtLSAgU3ltYm9s IGRlZmluaXRpb25zIGZvciBDLUtlcm1pdCBja3V1cyouYyBtb2R1bGVzICAqLwotCi0vKgotICBB dXRob3I6IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAotICBDb2x1bWJpYSBVbml2 ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCi0KLSAg Q29weXJpZ2h0IChDKSAxOTg1LCAyMDEwLAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZl cnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4g IFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQg dGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9u cy4KLSovCi0jaWZuZGVmIENLVVVTUl9ICi0jZGVmaW5lIENLVVVTUl9ICi0KLSNpbmNsdWRlICJj a3VjbWQuaCIJCQkvKiBHZXQgc3ltYm9scyBmcm9tIGNvbW1hbmQgcGFja2FnZSAqLwotCi0jaWZu ZGVmIE5PTFVDQUNIRQkJCS8qIFVzZSBsb29rdXAoKSBjYWNoZSAqLwotI2lmbmRlZiBOT1NQTAkJ CQkvKiBUbyBzcGVlZCB1cCBzY3JpcHQgcHJvZ3JhbXMgKi8KLSNpZm5kZWYgVVNFX0xVQ0FDSEUK LSNkZWZpbmUgVVNFX0xVQ0FDSEUKLSNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLwotI2VuZGlmIC8q IE5PU1BMICovCi0jZW5kaWYgLyogTk9MVUNBQ0hFICovCi0KLSNpZm5kZWYgTk9ET1VCTEVRVU9U SU5HCQkJLyogTmV3IHRvIDguMCAqLwotI2RlZmluZSBET1VCTEVRVU9USU5HCQkJLyogQWxsb3cg ZmllbGRzIHRvIGJlIGVuY2xvc2VkIGluICovCi0jZW5kaWYgLyogTk9ET1VCTEVRVU9USU5HICov CQkvKiBkb3VibGVxdW90ZXMuICovCi0KLSNpZm5kZWYgTk9MT0NVUwkJCQkvKiBTRVQgTE9DVVMg Ki8KLSNkZWZpbmUgTE9DVVMKLSNlbmRpZiAvKiBOT0xPQ1VTICovCi0KLS8qIFNpemVzIG9mIHRo aW5ncyAtIEZOVkFMTCBhbmQgTUFYQVJHTEVOIGluY3JlYXNlZCBmcm9tIDhLIDIwMDUwOTEyICov Ci0KLSNpZmRlZiBCSUdCVUZPSwotI2RlZmluZSBGTlZBTEwgQ01EQkwJCQkvKiBGdW5jdGlvbiBy ZXR1cm4gdmFsdWUgbGVuZ3RoICovCi0jZGVmaW5lIE1BWEFSR0xFTiBDTURCTAkJCS8qIE1heCBm dW5jIGFyZyBsZW5ndGggYWZ0ZXIgZXZhbCAqLwotI2RlZmluZSBNQVhBUkdMSVNUIDEwMjQJCQkv KiBNYXggbnVtYmVyIG9mIGFyZ3MgZm9yIGEgbWFjcm8gKi8KLSNkZWZpbmUgRlNQRUNMIENNREJM CQkJLyogTWF4IGxlbmd0aCBmb3IgTVNFTkQvR0VUIHN0cmluZyAqLwotI2RlZmluZSBNU0VORE1B WCAxMDI0CQkJLyogTnVtYmVyIG9mIGZpbGVzcGVjcyBmb3IgTVNFTkQgKi8KLSNkZWZpbmUgTUFD X01BWCAxNjM4NAkJCS8qIE1heGltdW0gbnVtYmVyIG9mIG1hY3JvcyAqLwotCi0jZWxzZSAgLyog U2FtZSBhcyBhYm92ZSBidXQgZm9yIHNtYWxsZXIgYnVpbGRzLi4uICovCi0KLSNkZWZpbmUgRk5W QUxMIDEwMjIKLSNkZWZpbmUgTUFYQVJHTEVOIDEwMjMKLSNkZWZpbmUgTUFYQVJHTElTVCA2NAot I2RlZmluZSBGU1BFQ0wgMzAwCi0jZGVmaW5lIE1TRU5ETUFYIDEyOAotI2RlZmluZSBNQUNfTUFY IDEwMjQKLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotCi0jZGVmaW5lIEdWQVJTIDEyNwkJCS8qIEhp Z2hlc3QgZ2xvYmFsIHZhciBhbGxvd2VkICovCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgVk5B TUwgNDA5NgkJCS8qIE1heCBsZW5ndGggZm9yIHZhcmlhYmxlIG5hbWUgKi8KLSNkZWZpbmUgQVJS QVlSRUZMRU4gMTAyNAkJLyogTWF4IGxlbmd0aCBmb3IgYXJyYXkgcmVmZXJlbmNlICovCi0jZGVm aW5lIEZPUkRFUFRIIDMyCQkJLyogTWF4aW11bSBkZXB0aCBvZiBuZXN0ZWQgRk9SIGxvb3BzICov Ci0jZGVmaW5lIE1BWFRBS0UgNTQJCQkvKiBNYXhpbXVtIG5lc3Rpbmcgb2YgVEFLRSBmaWxlcyAq LwotI2RlZmluZSBNQUNMRVZFTCAxMjgJCQkvKiBNYXhpbXVtIG5lc3RpbmcgZm9yIG1hY3JvcyAq LwotI2RlZmluZSBJTlBCVUZTSVogNDA5NgkJCS8qIFNpemUgb2YgSU5QVVQgYnVmZmVyICovCi0j ZGVmaW5lIFBST01QVEwgMTAyNAkJCS8qIE1heCBsZW5ndGggZm9yIHByb21wdCAqLwotI2RlZmlu ZSBMQkxTSVogODE5MgkJCS8qIE1heGltdW0gbGVuZ3RoIGZvciBhIEdPVE8gbGFiZWwgKi8KLSNl bHNlCi0jZGVmaW5lIFZOQU1MIDI1NgkJCS8qIE1heCBsZW5ndGggZm9yIHZhcmlhYmxlIG5hbWUg Ki8KLSNkZWZpbmUgQVJSQVlSRUZMRU4gMTI4CQkJLyogTWF4IGxlbmd0aCBmb3IgYXJyYXkgcmVm ZXJlbmNlICovCi0jZGVmaW5lIEZPUkRFUFRIIDEwCQkJLyogTWF4aW11bSBkZXB0aCBvZiBuZXN0 ZWQgRk9SIGxvb3BzICovCi0jZGVmaW5lIE1BWFRBS0UgMzIJCQkvKiBNYXhpbXVtIG5lc3Rpbmcg b2YgVEFLRSBmaWxlcyAqLwotI2RlZmluZSBNQUNMRVZFTCA2NAkJCS8qIE1heGltdW0gbmVzdGlu ZyBmb3IgbWFjcm9zICovCi0jZGVmaW5lIElOUEJVRlNJWiAyNTYKLSNkZWZpbmUgUFJPTVBUTCAy NTYJCQkvKiBNYXggbGVuZ3RoIGZvciBwcm9tcHQgKi8KLSNkZWZpbmUgTEJMU0laIDEyOAkJCS8q IE1heGltdW0gbGVuZ3RoIGZvciBhIEdPVE8gbGFiZWwgKi8KLSNlbmRpZiAvKiBCSUdCVUZPSyAq LwotI2RlZmluZSBOQVJHUyAxMAkJCS8qIE1heCBudW1iZXIgb2YgbWFjcm8gYXJndW1lbnRzICov Ci0jZGVmaW5lIExJTkJVRlNJWiAoQ01EQkwgKyAxMCkJCS8qIFNpemUgb2YgbGluZVtdIGJ1ZmZl ciAqLwotI2RlZmluZSBUTVBCVUZTSVogKENNREJMICsgMTApCQkvKiBTaXplIG9mIHRlbXBvcmFy eSBidWZmZXIgKi8KLQotI2RlZmluZSBDTURTVEtMICggTUFDTEVWRUwgKyBNQVhUQUtFICsgMikg LyogQ29tbWFuZCBzdGFjayBkZXB0aCAqLwotCi0jaWZuZGVmIE5PUFVSR0UJCQkJLyogUFVSR0Ug Y29tbWFuZCAqLwotI2lmZGVmIFVOSVgKLSNkZWZpbmUgQ0tQVVJHRQotI2VuZGlmIC8qIFVOSVgg Ki8KLSNlbmRpZiAvKiBOT1BVUkdFICovCi0KLSNpZm5kZWYgTk9NSU5QVVQJCQkvKiBNSU5QVVQg Y29tbWFuZCAqLwotI2lmbmRlZiBOT1NQTAotI2RlZmluZSBDS19NSU5QVVQKLSNpZm5kZWYgTUlO UE1BWAotI2lmZGVmIEJJR0JVRk9LCi0jZGVmaW5lIE1JTlBNQVggOTYJCQkvKiBNYXggbnVtYmVy IG9mIE1JTlBVVCBzdHJpbmdzICovCi0jZWxzZQotI2RlZmluZSBNSU5QTUFYIDE2Ci0jZW5kaWYg LyogQklHQlVGT0sgKi8KLSNlbmRpZiAvKiBNSU5QTUFYICovCi0jZGVmaW5lIE1JTlBCVUZMIDI1 NgkJCS8qIFNpemUgb2YgTUlOUFVUIHRlbXAgYnVmZmVyICovCi0jZW5kaWYgLyogTk9TUEwgKi8K LSNlbmRpZiAvKiBOT01JTlBVVCAqLwotCi0jZGVmaW5lIEFSUkFZQkFTRSA5NQkJCS8qIExvd2Vz dCBhcnJheS1uYW1lIGNoYXJhY3RlciAqLwotCi0jaWZuZGVmIE5PS0VSQkFORwotI2lmbmRlZiBL RVJCQU5HCi0jZGVmaW5lIEtFUkJBTkcKLSNlbmRpZiAvKiBLRVJCQU5HICovCi0jZW5kaWYgLyog Tk9LRVJCQU5HICovCi0KLS8qIEJpdCB2YWx1ZXMgKDEsIDIsIDQsIDgsIC4uLikgZm9yIHRoZSBj Y2ZsZ3MgZmllbGQgKi8KLQotI2RlZmluZSBDRl9BUEMgIDEJCQkvKiBFeGVjdXRpbmcgYW4gQVBD IGNvbW1hbmQgKi8KLSNkZWZpbmUgQ0ZfS01BQyAyCQkJLyogRXhlY3V0aW5nIGEgXEttYWNybyAq LwotI2RlZmluZSBDRl9DTURMIDQJCQkvKiBNYWNybyBmcm9tIC1DICJibGFoIiBjb21tYW5kIGxp bmUgKi8KLSNkZWZpbmUgQ0ZfUkVYWCA4CQkJLyogTWFjcm8gZnJvbSBSRVhYIGludGVycHJldGVy ICovCi0jZGVmaW5lIENGX0lNQUMgMTYJCQkvKiBJbnRlcm5hbCBtYWNybyBsaWtlIEZPUiwgV0hJ TEUuLi4gKi8KLQotc3RydWN0IGNtZHB0ciB7CQkJCS8qIENvbW1hbmQgc3RhY2sgc3RydWN0dXJl ICovCi0gICAgaW50IHNyYzsJCQkJLyogQ29tbWFuZCBTb3VyY2UgKi8KLSAgICBpbnQgbHZsOwkJ CQkvKiBDdXJyZW50IFRBS0Ugb3IgRE8gbGV2ZWwgKi8KLSAgICBpbnQgY2NmbGdzOwkJCQkvKiBG bGFncyAqLwotfTsKLQotc3RydWN0IG10YWIgewkJCQkvKiBNYWNybyB0YWJsZSwgbGlrZSBrZXl3 b3JkIHRhYmxlICovCi0gICAgY2hhciAqa3dkOwkJCQkvKiBCdXQgd2l0aCBwb2ludGVycyBmb3Ig dmFscyAqLwotICAgIGNoYXIgKm12YWw7CQkJCS8qIGluc3RlYWQgb2YgaW50cy4gKi8KLSAgICBz aG9ydCBmbGdzOwotfTsKLQotc3RydWN0IGxvY2FsdmFyIHsJCQkvKiBMb2NhbCB2YXJpYWJsZSBz dHJ1Y3R1cmUuICovCi0gICAgY2hhciAqIGx2X25hbWU7Ci0gICAgY2hhciAqIGx2X3ZhbHVlOwot ICAgIHN0cnVjdCBsb2NhbHZhciAqIGx2X25leHQ7Ci19OwotCi1zdHJ1Y3Qgc3RyaW5nbGlzdCB7 CQkJLyogR2VuZXJhbCBwdXJwb3NlIHN0cmluZyBsaXN0ICovCi0gICAgY2hhciAqIHNsX25hbWU7 Ci0gICAgc3RydWN0IHN0cmluZ2xpc3QgKiBzbF9uZXh0OwotfTsKLQotc3RydWN0IHN0cmluZ2lu dCB7CQkJLyogU3RyaW5nIGFuZCAod2lkZSkgaW50ZWdlciAqLwotICAgIGNoYXIgKiBzdmFsOwkJ CS8qIHVzZWQgbWFpbmx5IHdpdGggY29tbWFuZCBzd2l0Y2hlcyAqLwotICAgIGludCBpdmFsOwot ICAgIENLX09GRl9UIHd2YWw7Ci19OwotCi0jaWZuZGVmIE5PSUNQCi0vKgotICBDLUtlcm1pdCBJ bml0aWFsaXphdGlvbiBmaWxlLi4uCi0KLSAgU3lzdGVtLWRlcGVuZGVudCBkZWZhdWx0cyBhcmUg YnVpbHQgaW50byB0aGUgcHJvZ3JhbSwgc2VlIGJlbG93LgotICBUaGVzZSBjYW4gYmUgb3ZlcnJp ZGRlbiBpbiBlaXRoZXIgb2YgdHdvIHdheXM6Ci0gIDEuIENLX0RTWVNJTkkgaXMgZGVmaW5lZCBh dCBjb21waWxlIHRpbWUsIGluIHdoaWNoIGNhc2UgYSBkZWZhdWx0Ci0gICAgIHN5c3RlbS13aWRl IGluaXRpYWxpemF0aW9uIGZpbGUgbmFtZSBpcyBjaG9zZW4gZnJvbSBiZWxvdywgb3I6Ci0gIDI6 IENLX1NZU0lOSSBpcyBkZWZpbmVkIHRvIGJlIGEgc3RyaW5nLCB3aGljaCBsZXRzIHRoZSBwcm9n cmFtCi0gICAgIGJ1aWxkZXIgY2hvb3NlIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlc3BlYyBhdCBj b21waWxlIHRpbWUuCi0gIFRoZXNlIGNhbiBiZSBnaXZlbiBvbiB0aGUgQ0MgY29tbWFuZCBsaW5l LCBzbyB0aGUgc291cmNlIGNvZGUgbmVlZCBub3QgYmUKLSAgY2hhbmdlZC4KLSovCi0KLSNpZm5k ZWYgQ0tfU1lTSU5JCQkJLyogSWYgbm8gaW5pdGlhbGl6YXRpb24gZmlsZSBnaXZlbiwgKi8KLSNp ZmRlZiBDS19EU1lTSU5JCQkJLyogYnV0IENLX0RTWVNJTkkgaXMgZGVmaW5lZC4uLiAqLwotCi0v KiBTdXBwbHkgc3lzdGVtLWRlcGVuZGVudCAiZGVmYXVsdCBkZWZhdWx0IiBpbml0aWFsaXphdGlv biBmaWxlICovCi0KLSNpZmRlZiBVTklYCQkJCS8qIEZvciBVTklYLCBzeXN0ZW0td2lkZSAqLwot LyogVGhpcyBhbGxvd3Mgb25lIGNvcHkgb2YgdGhlIHN0YW5kYXJkIGluaXQgZmlsZSBvbiB0aGUg d2hvbGUgc3lzdGVtLCAqLwotLyogcmF0aGVyIHRoYW4gYSBzZXBhcmF0ZSBjb3B5IGluIGVhY2gg dXNlcidzIGhvbWUgZGlyZWN0b3J5LiAqLwotI2lmZGVmIEhQVVgxMAotI2RlZmluZSBDS19TWVNJ TkkgIi91c3Ivc2hhcmUvbGliL2tlcm1pdC9ja2VybWl0LmluaSIKLSNlbHNlCi0jaWZkZWYgQ1Vf QUNJUwotI2RlZmluZSBDS19TWVNJTkkgIi91c3Ivc2hhcmUvbGliL2tlcm1pdC9ja2VybWl0Lmlu aSIKLSNlbHNlCi0jaWZkZWYgX19saW51eF9fCi0jZGVmaW5lIENLX1NZU0lOSSAiL3Vzci9zaGFy ZS9rZXJtaXQvY2tlcm1pdC5pbmkiCi0jZWxzZQotI2RlZmluZSBDS19TWVNJTkkgIi91c3IvbG9j YWwvYmluL2NrZXJtaXQuaW5pIgotI2VuZGlmIC8qIGxpbnV4ICovCi0jZW5kaWYgLyogQ1VfQUNJ UyAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotLyogRmlsbCBpbiAjZWxzZS4uI2lmZGVmJ3MgaGVy ZSBmb3IgVk1TLCBPUy8yLCBldGMuICovCi0vKiBGaWxsIGluIG1hdGNoaW5nICNlbmRpZidzIGhl cmUuICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jZW5kaWYgLyogQ0tfRFNZU0lOSSAqLwotI2Vu ZGlmIC8qIENLX1NZU0lOSSAqLwotCi0jaWZkZWYgQ0tfU1lTSU5JCQkJLyogSW5pdC1maWxlIHBy ZWNlZGVuY2UgKi8KLSNpZm5kZWYgQ0tfSU5JX0EJCQkvKiBBIG1lYW5zIHN5c3RlbS13aWRlIGZp bGUgZmlyc3QgKi8KLSNpZm5kZWYgQ0tfSU5JX0IJCQkvKiBCIG1lYW5zIHVzZXIncyBmaXJzdCAq LwotI2RlZmluZSBDS19JTklfQQkJCS8qIEEgaXMgZGVmYXVsdCAqLwotI2VuZGlmIC8qIENLX0lO SV9CICovCi0jZW5kaWYgLyogQ0tfSU5JX0EgKi8KLSNlbHNlCi0jaWZkZWYgQ0tfSU5JX0EJCQkJ LyogT3RoZXJ3aXNlICovCi0jdW5kZWYgQ0tfSU5JX0EJCQkJLyogbWFrZSBzdXJlIHRoZXNlIGFy ZW4ndCBkZWZpbmVkICovCi0jZW5kaWYgLyogQ0tfSU5JX0EgKi8KLSNpZmRlZiBDS19JTklfQgot I3VuZGVmIENLX0lOSV9CCi0jZW5kaWYgLyogQ0tfSU5JX0IgKi8KLSNlbmRpZiAvKiBDS19TWVNJ TkkgKi8KLQotI2lmZGVmIENLX1NZU0lOSQkJCS8qIE9uZSBtb3JlIGNoZWNrLi4uICovCi0jaWZk ZWYgQ0tfSU5JX0EJCQkJLyogTWFrZSBzdXJlIHRoZXkncmUgbm90IGJvdGggKi8KLSNpZmRlZiBD S19JTklfQgkJCQkvKiBkZWZpbmVkLiAqLwotI3VuZGVmIENLX0lOSV9CCi0jZW5kaWYgLyogQ0tf SU5JX0IgKi8KLSNlbmRpZiAvKiBDS19JTklfQSAqLwotI2VuZGlmIC8qIENLX1NZU0lOSSAqLwot LyoKLSAgSWYgbmVpdGhlciBDS19EU1lTSU5JIG5vciBDS19TWVNJTkkgYXJlIGRlZmluZWQsIHRo ZXNlIGFyZSB0aGUKLSAgYnVpbHQtaW4gZGVmYXVsdHMgZm9yIGVhY2ggcGxhdGZvcm0uICBVU0Vf Q1VTVE9NIG1lYW5zIHRvIGV4ZWN1dGUgdGhlCi0gIGN1c3RvbWl6YXRpb24gZmlsZSBhdXRvbWF0 aWNhbGx5IGlmIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlIGlzIG5vdCBmb3VuZC4KLSovCi0jaWZu ZGVmIE5PQ1VTVE9NCi0jaWZuZGVmIFVTRV9DVVNUT00KLSNkZWZpbmUgVVNFX0NVU1RPTQotI2Vu ZGlmIC8qIFVTRV9DVVNUT00gKi8KLSNlbmRpZiAvKiBOT0NVU1RPTSAqLwotCi0jaWZuZGVmICBL RVJNUkNMCQkJLyogUGF0aCBsZW5ndGggZm9yIGluaXQgZmlsZSAqLwotI2RlZmluZSBLRVJNUkNM IENLTUFYUEFUSAotI2VuZGlmIC8qICBLRVJNUkNMICovCi0KLSNpZmRlZiB2bXMKLSNkZWZpbmUg S0VSTVJDICJDS0VSTUlULklOSSIJCS8qIEluaXQgZmlsZSBuYW1lICovCi0jZGVmaW5lIE1ZQ1VT VE9NICJDS0VSTU9ELklOSSIJCS8qIEN1c3RvbWl6YXRpb24gZmlsZSBuYW1lICovCi0jZWxzZQot I2lmZGVmIE9TMgotI2lmZGVmIE5UCi0jZGVmaW5lIEtFUk1SQyAiazk1LmluaSIKLSNkZWZpbmUg TVlDVVNUT00gIms5NWN1c3RvbS5pbmkiCi0jZWxzZQotI2RlZmluZSBLRVJNUkMgImsyLmluaSIK LSNkZWZpbmUgTVlDVVNUT00gImsyY3VzdG9tLmluaSIKLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UK LSNpZmRlZiBVTklYT1JPU0sKLSNkZWZpbmUgS0VSTVJDICIua2VybXJjIgotI2RlZmluZSBNWUNV U1RPTSAiLm15a2VybXJjIgotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0jZGVmaW5lIEtFUk1SQyAi Y2tlcm1pdC5pbmkiCi0jZGVmaW5lIE1ZQ1VTVE9NICJja2VybW9kLmluaSIKLSNlbHNlCi0jZGVm aW5lIEtFUk1SQyAiQ0tFUk1JVC5JTkkiCi0jZGVmaW5lIE1ZQ1VTVE9NICJja2VybW9kLmluaSIK LSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0jZW5kaWYgLyog T1MyICovCi0jZW5kaWYgLyogdm1zICovCi0KLSNpZm5kZWYgS0VSTVJDTAotI2RlZmluZSBLRVJN UkNMIDI1NgotI2VuZGlmIC8qIEtFUk1SQ0wgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0vKiBV c2VyIGludGVyZmFjZSBmZWF0dXJlcyAqLwotCi0jaWZkZWYgQ0tfQ1VSU0VTCQkJLyogVGhlcm1v bWV0ZXIgKi8KLSNpZm5kZWYgTk9fUENUX0JBUgotI2lmbmRlZiBDS19QQ1RfQkFSCi0jZGVmaW5l IENLX1BDVF9CQVIKLSNlbmRpZiAvKiBOT19QQ1RfQkFSICovCi0jZW5kaWYgLyogQ0tfUENUX0JB UiAqLwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi0jaWZkZWYgS1VJCQkJCS8qIEtVSSByZXF1 aXJlcyB0aGUgVGhlcm1vbWV0ZXIgY29kZSAqLwotI2lmbmRlZiBOT19QQ1RfQkFSCi0jaWZuZGVm IENLX1BDVF9CQVIKLSNkZWZpbmUgQ0tfUENUX0JBUgotI2VuZGlmIC8qIE5PX1BDVF9CQVIgKi8K LSNlbmRpZiAvKiBDS19QQ1RfQkFSICovCi0jZW5kaWYgLyogS1VJICovCi0KLS8qIEluY2x1ZGVz ICovCi0KLSNpZmRlZiBNSU5JWAotLyogd2h5PyAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgot I2VuZGlmIC8qIE1JTklYICovCi0KLS8qIFN5bWJvbHMgZm9yIGNvbW1hbmQgc291cmNlICovCi0K LSNkZWZpbmUgQ01EX0tCIDAJCQkvKiBLZXlCb2FyZCBvciBzdGFuZGFyZCBpbnB1dCAqLwotI2Rl ZmluZSBDTURfVEYgMQkJCS8qIFRBS0UgY29tbWFuZCBGaWxlICovCi0jZGVmaW5lIENNRF9NRCAy CQkJLyogTWFjcm8gRGVmaW5pdGlvbiAqLwotCi0vKgotICBTRVQgVFJBTlNGRVIgQ0FOQ0VMTEFU SU9OIGNvbW1hbmQgc2hvdWxkIGJlIGF2YWlsYWJsZSBpbiBhbGwgdmVyc2lvbnMuCi0gIEJ1dCBm b3Igbm93Li4uCi0qLwotI2lmZGVmIFVOSVgJCQkJLyogVU5JWCBoYXMgaXQgKi8KLSNpZm5kZWYg WEZSQ0FOCi0jZGVmaW5lIFhGUkNBTgotI2VuZGlmIC8qIFhGUkNBTiAqLwotI2VuZGlmIC8qIFVO SVggKi8KLSNpZmRlZiBWTVMJCQkJLyogVk1TIGhhcyBpdCAqLwotI2lmbmRlZiBYRlJDQU4KLSNk ZWZpbmUgWEZSQ0FOCi0jZW5kaWYgLyogWEZSQ0FOICovCi0jZW5kaWYgLyogVk1TICovCi0jaWZk ZWYgZGF0YWdlbmVyYWwJCQkvKiBERyBBT1MvVlMgaGFzIGl0ICovCi0jaWZuZGVmIFhGUkNBTgot I2RlZmluZSBYRlJDQU4KLSNlbmRpZiAvKiBYRlJDQU4gKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLwotI2lmZGVmIFNUUkFUVVMJCQkJLyogU3RyYXR1cyBWT1MgaGFzIGl0ICovCi0jaWZuZGVm IFhGUkNBTgotI2RlZmluZSBYRlJDQU4KLSNlbmRpZiAvKiBYRlJDQU4gKi8KLSNlbmRpZiAvKiBT VFJBVFVTICovCi0jaWZkZWYgT1NLCQkJCS8qIE9TLTkgKi8KLSNpZm5kZWYgWEZSQ0FOCi0jZGVm aW5lIFhGUkNBTgotI2VuZGlmIC8qIFhGUkNBTiAqLwotI2VuZGlmIC8qIE9TSyAqLwotCi0jaWZu ZGVmIE5PQ01ETAotLyogRXh0ZW5kZWQgQ29tbWFuZC1MaW5lIE9wdGlvbiBDb2RlcyAoa2VlcCBh bHBoYWJldGljYWwgYnkga2V5d29yZCkgKi8KLQotI2RlZmluZSBYQV9BTk9OIDAJCQkvKiAtLWFu b255bW91cyAqLwotI2RlZmluZSBYQV9CQUZJIDEJCQkvKiAtLWJhbm5lcmZpbGUgKi8KLSNkZWZp bmUgWEFfQ0RGSSAyCQkJLyogLS1jZGZpbGUgKi8KLSNkZWZpbmUgWEFfQ0RNUyAzCQkJLyogLS1j ZG1lc3NhZ2UgKi8KLSNkZWZpbmUgWEFfSEVMUCA0CQkJLyogLS1oZWxwICovCi0jZGVmaW5lIFhB X0hFRkkgNQkJCS8qIC0taGVscGZpbGUgKi8KLSNkZWZpbmUgWEFfSUtGSSA2CQkJLyogLS14ZmVy ZmlsZSAqLwotI2RlZmluZSBYQV9JS0xHIDcJCQkvKiAtLXhmZXJsb2cgKi8KLSNkZWZpbmUgWEFf QU5GSSA4CQkJLyogLS1pbml0ZmlsZSAqLwotI2RlZmluZSBYQV9QRVJNIDkJCQkvKiAtLXBlcm1p c3Npb25zICovCi0jZGVmaW5lIFhBX1JPT1QgMTAJCQkvKiAtLXJvb3QgKi8KLSNkZWZpbmUgWEFf U1lTTCAxMQkJCS8qIC0tc3lzbG9nICovCi0jZGVmaW5lIFhBX1VTRkkgMTIJCQkvKiAtLXVzZXJm aWxlICovCi0jZGVmaW5lIFhBX1dURkkgMTMJCQkvKiAtLXd0bXBmaWxlICovCi0jZGVmaW5lIFhB X1dUTVAgMTQJCQkvKiAtLXd0bXBsb2cgKi8KLSNkZWZpbmUgWEFfVElNTyAxNQkJCS8qIC0tdGlt ZW91dCAqLwotI2RlZmluZSBYQV9OT0lOIDE2CQkJLyogLS1ub2ludGVycnVwdHMgKi8KLSNkZWZp bmUgWEFfREJBUyAxNwkJCS8qIC0tZGF0YWJhc2UgKi8KLSNkZWZpbmUgWEFfREJGSSAxOAkJCS8q IC0tZGJmaWxlICovCi0jZGVmaW5lIFhBX1BSSVYgMTkJCQkvKiAtLXByaXZpZCAqLwotI2RlZmlu ZSBYQV9WRVJTIDIwCQkJLyogLS12ZXJzaW9uICovCi0jZGVmaW5lIFhBX05QUk0gMjEJCQkvKiAt LW5vcGVybXMgKi8KLSNkZWZpbmUgWEFfWFBPUyAyMgkJCS8qIFdpbmRvdyBwb3NpdGlvbiBYIGNv b3JkaW5hdGUgKi8KLSNkZWZpbmUgWEFfWVBPUyAyMwkJCS8qIFdpbmRvdyBwb3NpdGlvbiBZIGNv b3JkaW5hdGUgKi8KLSNkZWZpbmUgWEFfRk5BTSAyNAkJCS8qIEZvbnQgRmFjZW5hbWUgKi8KLSNk ZWZpbmUgWEFfRlNJWiAyNQkJCS8qIEZvbnQgU2l6ZSAqLwotI2RlZmluZSBYQV9URVJNIDI2CQkJ LyogVGVybWluYWwgdHlwZSAqLwotI2RlZmluZSBYQV9DU0VUIDI3CQkJLyogUmVtb3RlIENoYXJh Y3RlciBTZXQgKi8KLSNkZWZpbmUgWEFfUk9XUyAyOAkJCS8qIFNjcmVlbiByb3dzIChoZWlnaHQp ICovCi0jZGVmaW5lIFhBX0NPTFMgMjkJCQkvKiBTY3JlZW4gY29sdW1ucyAod2lkdGgpICovCi0j ZGVmaW5lIFhBX1RFTCAgMzAJCQkvKiBNYWtlIGEgVGVsbmV0IGNvbm5lY3Rpb24gKi8KLSNkZWZp bmUgWEFfRlRQICAzMQkJCS8qIE1ha2UgYW4gRlRQIGNvbm5lY3Rpb24gKi8KLSNkZWZpbmUgWEFf U1NIICAzMgkJCS8qIE1ha2UgYW4gU1NIIGNvbm5lY3Rpb24gKi8KLSNkZWZpbmUgWEFfVVNFUiAz MwkJCS8qIFVzZXJuYW1lIGZvciBsb2dpbiAqLwotI2RlZmluZSBYQV9QQVNTIDM0CQkJLyogUGFz c3dvcmQgZm9yIGxvZ2luICovCi0jZGVmaW5lIFhBX1RJVEwgMzUgICAgICAgICAgICAgICAgICAg ICAgLyogV2luZG93IFRpdGxlICovCi0jZGVmaW5lIFhBX05PTU4gMzYJCQkvKiBObyBHVUkgTWVu dSBCYXIgKi8KLSNkZWZpbmUgWEFfTk9UQiAzNwkJCS8qIE5vIEdVSSBUb29sIEJhciAqLwotI2Rl ZmluZSBYQV9OT1NCIDM4ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIEdVSSBTdGF0dXMgQmFy ICovCi0jZGVmaW5lIFhBX05PUFVTSCAzOSAgICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBl eHRlcm5hbCBjb21tYW5kcyAqLwotI2RlZmluZSBYQV9OT1NDUk9MTCA0MCAgICAgICAgICAgICAg ICAgIC8qIERpc2FibGUgc2Nyb2xsYmFjayBvcGVyYXRpb25zICovCi0jZGVmaW5lIFhBX05PRVND QVBFIDQxICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBlc2NhcGUgZnJvbSBjb25uZWN0IG1v ZGUgKi8KLSNkZWZpbmUgWEFfTE9DSyA0MiAgICAgICAgICAgICAgICAgICAgICAvKiBBbGwgbG9j a2Rvd24gb3B0aW9ucyAqLwotI2RlZmluZSBYQV9OT0JBUiA0MyAgICAgICAgICAgICAgICAgICAg IC8qIE5vIEdVSSBCYXJzICovCi0jZGVmaW5lIFhBX1dNQVggIDQ0Ci0jZGVmaW5lIFhBX1dNSU4g IDQ1Ci0jZGVmaW5lIFhBX1NDQUxFIDQ2ICAgICAgICAgICAgICAgICAgICAgLyogR1VJIFNjYWxl IEZvbnQgKi8KLSNkZWZpbmUgWEFfQ0hHRCAgNDcgICAgICAgICAgICAgICAgICAgICAvKiBHVUkg Q2hhbmdlIERpbWVuc2lvbnMgKi8KLSNkZWZpbmUgWEFfTk9DTE9TRSA0OCAgICAgICAgICAgICAg ICAgICAvKiBHVUkgRGlzYWJsZSBDbG9zZSBXaW5kb3cgKi8KLSNkZWZpbmUgWEFfVU5CVUYgNDkJ CQkvKiBVTklYIHVuYnVmZmVyZWQgY29uc29sZSAqLwotI2RlZmluZSBYQV9NQVggIDQ5CQkJLyog SGlnaGVzdCBleHRlbmRlZCBvcHRpb24gbnVtYmVyICovCi0jZW5kaWYgLyogTk9DTURMICovCi0K LSNpZm5kZWYgTk9JQ1AKLS8qIFRvcCBMZXZlbCBDb21tYW5kcyAqLwotLyogVmFsdWVzIGFzc29j aWF0ZWQgd2l0aCB0b3AtbGV2ZWwgY29tbWFuZHMgbXVzdCBiZSAwIG9yIGdyZWF0ZXIuICovCi0K LSNkZWZpbmUgWFhCWUUgICAwCS8qIEJZRSAqLwotI2RlZmluZSBYWENMRSAgIDEJLyogQ0xFQVIg Ki8KLSNkZWZpbmUgWFhDTE8gICAyCS8qIENMT1NFICovCi0jZGVmaW5lIFhYQ09OICAgMwkvKiBD T05ORUNUICovCi0jZGVmaW5lIFhYQ1BZICAgNAkvKiBDT1BZICovCi0jZGVmaW5lIFhYQ1dEICAg NQkvKiBDV0QgKENoYW5nZSBXb3JraW5nIERpcmVjdG9yeSkgKi8KLSNkZWZpbmUgWFhERUYJNgkv KiBERUZJTkUgKGEgbWFjcm8gb3IgdmFyaWFibGUpICovCi0jZGVmaW5lIFhYREVMICAgNwkvKiAo TG9jYWwpIERFTEVURSAqLwotI2RlZmluZSBYWERJUiAgIDgJLyogKExvY2FsKSBESVJFQ1RPUlkg Ki8KLQotLyogRElSRUNUT1JZIENvbW1hbmQgb3B0aW9ucy4uLiAqLwotI2RlZmluZSBESVJfQlJG IDEJLyogQlJJRUYgKi8KLSNkZWZpbmUgRElSX1ZSQiAyCS8qIFZFUkJPU0UgKi8KLSNkZWZpbmUg RElSX1BBRyAzCS8qIFBBR0UgKi8KLSNkZWZpbmUgRElSX05PUCA0CS8qIE5PUEFHRSAqLwotI2Rl ZmluZSBESVJfSVNPIDUJLyogSVNPREFURSAqLwotI2RlZmluZSBESVJfREFUIDYJLyogRU5HTElT SERBVEUgKi8KLSNkZWZpbmUgRElSX0hERyA3CS8qIEhFQURJTkdTICovCi0jZGVmaW5lIERJUl9O T0ggOAkvKiBOT0hFQURJTkdTICovCi0jZGVmaW5lIERJUl9TUlQgOQkvKiBTT1JUICovCi0jZGVm aW5lIERJUl9OT1MgMTAgICAgICAvKiBOT1NPUlQgKi8KLSNkZWZpbmUgRElSX0FTQyAxMQkvKiBB U0NFTkRJTkcgKi8KLSNkZWZpbmUgRElSX0RTQyAxMiAgICAgIC8qIERFU0NFTkRJTkcgKi8KLSNk ZWZpbmUgRElSX1JFQyAxMyAgICAgIC8qIFJFQ1VSU0lWRSAqLwotI2RlZmluZSBESVJfTk9SIDE0 CS8qIE5PUkVDVVJJVkUgKi8KLSNkZWZpbmUgRElSX0RPVCAxNQkvKiBET1RGSUxFUyAqLwotI2Rl ZmluZSBESVJfTk9EIDE2CS8qIE5PRE9URklMRVMgKi8KLSNkZWZpbmUgRElSX0RJUiAxNwkvKiBE SVJFQ1RPUklFUyAqLwotI2RlZmluZSBESVJfRklMIDE4CS8qIEZJTEVTICovCi0jZGVmaW5lIERJ Ul9BTEwgMTkJLyogQUxMICovCi0jZGVmaW5lIERJUl9OQU0gMjAJLyogTkFNRVM6ICovCi0jZGVm aW5lIERJUl9UWVAgMjEJLyogRklMRVRZUEVTICovCi0jZGVmaW5lIERJUl9OT1QgMjIJLyogTk9G SUxFVFlQRVMgKi8KLSNkZWZpbmUgRElSX0JVUCAyMwkvKiBCQUNLVVAgKi8KLSNkZWZpbmUgRElS X05PQiAyNAkvKiBOT0JBQ0tVUCAqLwotI2RlZmluZSBESVJfTVNHIDI1ICAgICAgLyogTUVTU0FH RSAqLwotI2RlZmluZSBESVJfTk9NIDI2ICAgICAgLyogTk9NRVNTQUdFICovCi0jZGVmaW5lIERJ Ul9BUlIgMjcgICAgICAvKiBBUlJBWTogKi8KLSNkZWZpbmUgRElSX05BUiAyOCAgICAgIC8qIE5P QVJSQVkgKi8KLSNkZWZpbmUgRElSX0VYQyAyOQkvKiBFWENFUFQ6ICovCi0jZGVmaW5lIERJUl9M QVIgMzAJLyogTEFSR0VSLVRIQU46ICovCi0jZGVmaW5lIERJUl9TTUEgMzEJLyogU01BTExFUi1U SEFOOiAqLwotI2RlZmluZSBESVJfQUZUIDMyCS8qIEFGVEVSOiAqLwotI2RlZmluZSBESVJfTkFG IDMzCS8qIE5PVC1BRlRFUjogKi8KLSNkZWZpbmUgRElSX0JFRiAzNAkvKiBCRUZPUkU6ICovCi0j ZGVmaW5lIERJUl9OQkYgMzUJLyogTk9ULUJFRk9SRTogKi8KLSNkZWZpbmUgRElSX1NVTSAzNgkv KiBTVU1NQVJZICovCi0jZGVmaW5lIERJUl9CSU4gMzcJLyogVFlQRSAob25seSBzaG93IGJpbmFy eSBvciB0ZXh0KSAqLwotI2RlZmluZSBESVJfTE5LIDM4CS8qIGZvbGxvdyBzeW1saW5rcyAqLwot I2RlZmluZSBESVJfTkxLIDM5CS8qIGRvbid0IGZvbGxvdyBzeW1saW5rcyAqLwotI2RlZmluZSBE SVJfT1VUIDQwCS8qIE91dHB1dCBmaWxlIGZvciBsaXN0aW5nICovCi0jZGVmaW5lIERJUl9UT1Ag NDEJLyogVG9wIG4gbGluZXMgKi8KLSNkZWZpbmUgRElSX0NPVSA0MgkvKiBDT1VOVDp2YXIgKi8K LSNkZWZpbmUgRElSX05PTCA0MwkvKiBOT0xJTktTIChkb24ndCBzaG93IHN5bWxpbmtzIGF0IGF0 IGFsbCkgKi8KLQotI2RlZmluZSBESVJTX05NIDAgICAgICAgLyogU29ydCBkaXJlY3RvcnkgYnkg TkFNRSAqLwotI2RlZmluZSBESVJTX0RUIDEgICAgICAgLyogU29ydCBkaXJlY3RvcnkgYnkgREFU RSAqLwotI2RlZmluZSBESVJTX1NaIDIgICAgICAgLyogU29ydCBkaXJlY3RvcnkgYnkgU0laRSAq LwotCi0jZGVmaW5lIFhYRElTICAgOQkvKiBESVNBQkxFICovCi0jZGVmaW5lIFhYRUNIICAxMAkv KiBFQ0hPICovCi0jZGVmaW5lIFhYRVhJICAxMQkvKiBFWElUICovCi0jZGVmaW5lIFhYRklOICAx MgkvKiBGSU5JU0ggKi8KLSNkZWZpbmUgWFhHRVQgIDEzCS8qIEdFVCAqLwotI2RlZmluZSBYWEhM UCAgMTQJLyogSEVMUCAqLwotI2RlZmluZSBYWElOUCAgMTUJLyogSU5QVVQgKi8KLSNkZWZpbmUg WFhMT0MgIDE2CS8qIExPQ0FMICovCi0jZGVmaW5lIFhYTE9HICAxNwkvKiBMT0cgKi8KLSNkZWZp bmUgWFhNQUkgIDE4CS8qIE1BSUwgKi8KLSNkZWZpbmUgWFhNT1UgIDE5CS8qIChMb2NhbCkgTU9V TlQgKi8KLSNkZWZpbmUgWFhNU0cgIDIwCS8qIChMb2NhbCkgTUVTU0FHRSAqLwotI2RlZmluZSBY WE9VVCAgMjEJLyogT1VUUFVUICovCi0jZGVmaW5lIFhYUEFVICAyMgkvKiBQQVVTRSAqLwotI2Rl ZmluZSBYWFBSSSAgMjMJLyogKExvY2FsKSBQUklOVCAqLwotI2RlZmluZSBYWFFVSSAgMjQJLyog UVVJVCAqLwotI2RlZmluZSBYWFJFQyAgMjUJLyogUkVDRUlWRSAqLwotI2RlZmluZSBYWFJFTSAg MjYJLyogUkVNT1RFICovCi0jZGVmaW5lIFhYUkVOICAyNwkvKiAoTG9jYWwpIFJFTkFNRSAqLwot I2RlZmluZSBYWFNFTiAgMjgJLyogU0VORCAqLwotCi0vKiBTRU5EIHN3aXRjaGVzICovCi0KLSNk ZWZpbmUgU05EX0JJTiAgMAkvKiBCaW5hcnkgbW9kZSAqLwotI2RlZmluZSBTTkRfREVMICAxCS8q IERlbGV0ZSBhZnRlciAqLwotI2RlZmluZSBTTkRfRVhDICAyCS8qIEV4Y2VwdCAqLwotI2RlZmlu ZSBTTkRfTEFSICAzCS8qIExhcmdlciB0aGFuICovCi0jZGVmaW5lIFNORF9NQUkgIDQJLyogTWFp bCAqLwotI2RlZmluZSBTTkRfQkVGICA1CS8qIEJlZm9yZSAqLwotI2RlZmluZSBTTkRfQUZUICA2 CS8qIEFmdGVyICovCi0jZGVmaW5lIFNORF9QUkkgIDcJLyogUHJpbnQgKi8KLSNkZWZpbmUgU05E X1NISCAgOAkvKiBRdWlldCAqLwotI2RlZmluZSBTTkRfUkVDICA5CS8qIFJlY3Vyc2l2ZSAqLwot I2RlZmluZSBTTkRfU01BIDEwCS8qIFNtYWxsZXIgdGhhbiAqLwotI2RlZmluZSBTTkRfU1RBIDEx CS8qIFN0YXJ0aW5nLWZyb20gKi8KLSNkZWZpbmUgU05EX1RYVCAxMgkvKiBUZXh0IG1vZGUgKi8K LSNkZWZpbmUgU05EX0NNRCAxMwkvKiBGcm9tIGNvbW1hbmQgKHBpcGUpICAqLwotI2RlZmluZSBT TkRfUkVTIDE0CS8qIFJlc2VuZC9SZWNvdmVyICovCi0jZGVmaW5lIFNORF9QUk8gMTUJLyogUHJv dG9jb2wgKi8KLSNkZWZpbmUgU05EX0FTTiAxNgkvKiBBcy1uYW1lICovCi0jZGVmaW5lIFNORF9J TUcgMTcJLyogSW1hZ2UgKi8KLSNkZWZpbmUgU05EX0xCTCAxOAkvKiBMYWJlbGVkICovCi0jZGVm aW5lIFNORF9OQUYgMTkJLyogTm90LUFmdGVyICovCi0jZGVmaW5lIFNORF9OQkUgMjAJLyogTm90 LUJlZm9yZSAqLwotI2RlZmluZSBTTkRfRkxUIDIxCS8qIEZpbHRlciAqLwotI2RlZmluZSBTTkRf UFRIIDIyCS8qIFBhdGhuYW1lcyAqLwotI2RlZmluZSBTTkRfTkFNIDIzCS8qIEZpbGVuYW1lcyAq LwotI2RlZmluZSBTTkRfTU9WIDI0ICAgICAgLyogTU9WRSB0byBhbm90aGVyIGRpcmVjdG9yeSAq LwotI2RlZmluZSBTTkRfUkVOIDI1ICAgICAgLyogUkVOQU1FIGFmdGVyIHNlbmRpbmcgKi8KLSNk ZWZpbmUgU05EX0NBTCAyNgkvKiBDYWxpYnJhdGUgKi8KLSNkZWZpbmUgU05EX0ZJTCAyNwkvKiBG aWxlIGNvbnRhaW5pbmcgbGlzdCBvZiBmaWxlcyB0byBzZW5kICovCi0jZGVmaW5lIFNORF9OT0Ig MjgJLyogU2tpcCBiYWNrdXAgZmlsZXMgICovCi0jZGVmaW5lIFNORF9ET1QgMjkJLyogSW5jbHVk ZSBkb3QtZmlsZXMgKi8KLSNkZWZpbmUgU05EX05PRCAzMAkvKiBFeGNsdWRlIGRvdC1maWxlcyAq LwotI2RlZmluZSBTTkRfQVJSIDMxCS8qIFNlbmQgZnJvbSBhcnJheSAqLwotI2RlZmluZSBTTkRf VFlQIDMyCS8qIFRZUEUgKG9ubHkgc2VuZCB0ZXh0IChvciBiaW5hcnkpKSAqLwotI2RlZmluZSBT TkRfWFBBIDMzCS8qIFRSQU5TUEFSRU5UICovCi0jZGVmaW5lIFNORF9QSVAgMzQJLyogUElQRVMg Ki8KLSNkZWZpbmUgU05EX0VSUiAzNQkvKiBFUlJPUiAqLwotI2RlZmluZSBTTkRfQ1NMIDM2CS8q IExvY2FsIGNoYXJhY3RlciBzZXQgKi8KLSNkZWZpbmUgU05EX0NTUiAzNwkvKiBSZW1vdGUgY2hh cmFjdGVyIHNldCAqLwotI2RlZmluZSBTTkRfVVBEIDM4CS8qIFVwZGF0ZSAqLwotI2RlZmluZSBT TkRfQ09MIDM5CS8qIENvbGxpc2lvbiAqLwotI2RlZmluZSBTTkRfTk1MIDQwCS8qIE5hbWVsaXN0 ICovCi0jZGVmaW5lIFNORF9TUk4gNDEJLyogU2VydmVyLVJlbmFtZSAqLwotI2RlZmluZSBTTkRf TE5LIDQyCS8qIEZvbGxvdyBsaW5rcyAqLwotI2RlZmluZSBTTkRfTkxLIDQzCS8qIERvbid0IGZv bGxvdyBsaW5rcyAqLwotI2RlZmluZSBTTkRfU0lNIDQ0CS8qIFNpbXVsYXRlICovCi0jZGVmaW5l IFNORF9ESUYgNDUJLyogSWYgZGF0ZXMgRGlmZmVyICovCi0jZGVmaW5lIFNORF9QQVQgNDYJLyog UGF0dGVybiB0byB1c2UgbG9jYWxseSB3aGVuIEdFVCdpbmcgKi8KLSNkZWZpbmUgU05EX05MUyA0 NwkvKiAoRlRQIG9ubHkpIE1HRVQgZm9yY2VzIE5MU1QgKi8KLSNkZWZpbmUgU05EX01MUyA0OAkv KiAoRlRQIG9ubHkpIE1HRVQgZm9yY2VzIE1MU0QgKi8KLQotI2RlZmluZSBTTkRfTUFYIDQ4CS8q IEhpZ2hlc3QgU0VORCBzd2l0Y2ggKi8KLQotI2RlZmluZSBYWFNFUiAgMjkgICAJLyogU0VSVkVS ICovCi0jZGVmaW5lIFhYU0VUICAzMAkvKiBTRVQgKi8KLSNkZWZpbmUgWFhTSEUgIDMxCS8qIENv bW1hbmQgZm9yIFNIRUxMICovCi0jZGVmaW5lIFhYU0hPICAzMgkvKiBTSE9XICovCi0jZGVmaW5l IFhYU1BBICAzMwkvKiAoTG9jYWwpIFNQQUNFICovCi0jZGVmaW5lIFhYU1RBICAzNAkvKiBTVEFU SVNUSUNTICovCi0jZGVmaW5lIFhYU1VCICAzNQkvKiAoTG9jYWwpIFNVQk1JVCAqLwotI2RlZmlu ZSBYWFRBSyAgMzYJLyogVEFLRSAqLwotI2RlZmluZSBYWFRSQSAgMzcJLyogVFJBTlNNSVQgKi8K LSNkZWZpbmUgWFhUWVAgIDM4CS8qIChMb2NhbCkgVFlQRSAqLwotI2RlZmluZSBYWFdITyAgMzkJ LyogKExvY2FsKSBXSE8gKi8KLSNkZWZpbmUgWFhESUFMIDQwCS8qIChMb2NhbCkgRElBTCAqLwot I2RlZmluZSBYWExPR0kgNDEJLyogKExvY2FsKSBTQ1JJUFQgKi8KLSNkZWZpbmUgWFhDT00gIDQy CS8qIENvbW1lbnQgKi8KLSNkZWZpbmUgWFhIQU4gIDQzICAgICAgIC8qIEhBTkdVUCAqLwotI2Rl ZmluZSBYWFhMQSAgNDQJLyogVFJBTlNMQVRFICovCi0jZGVmaW5lIFhYSUYgICA0NQkvKiBJRiAq LwotI2RlZmluZSBYWExCTCAgNDYgICAgICAgLyogbGFiZWwgKi8KLSNkZWZpbmUgWFhHT1RPIDQ3 CS8qIEdPVE8gKi8KLSNkZWZpbmUgWFhFTkQgIDQ4ICAgICAgIC8qIEVORCAqLwotI2RlZmluZSBY WFNUTyAgNDkgICAgICAgLyogU1RPUCAqLwotI2RlZmluZSBYWERPICAgNTAgICAgICAgLyogRE8g Ki8KLSNkZWZpbmUgWFhQV0QgIDUxICAgICAgIC8qIFBXRCAqLwotI2RlZmluZSBYWFRFUyAgNTIg ICAgICAgLyogVEVTVCAqLwotI2RlZmluZSBYWEFTSyAgNTMgICAgICAgLyogQVNLICovCi0jZGVm aW5lIFhYQVNLUSA1NCAgICAgICAvKiBBU0tRICovCi0jZGVmaW5lIFhYQVNTICA1NSAgICAgICAv KiBBU1NJR04gKi8KLSNkZWZpbmUgWFhSRUkgIDU2ICAgICAgIC8qIFJFSU5QVVQgKi8KLSNkZWZp bmUgWFhJTkMgIDU3ICAgICAgIC8qIElOQ1JFTUVOVCAqLwotI2RlZmluZSBYWERFQyAgNTkgICAg ICAgLyogREVDUkVNRU5UICovCi0jZGVmaW5lIFhYRUxTICA2MCAgICAgICAvKiBFTFNFICovCi0j ZGVmaW5lIFhYRVhFICA2MQkvKiBFWEVDVVRFICovCi0jZGVmaW5lIFhYV0FJICA2MgkvKiBXQUlU ICovCi0jZGVmaW5lIFhYVkVSICA2MyAgICAgICAvKiBWRVJTSU9OICovCi0jZGVmaW5lIFhYRU5B ICA2NCAgICAgICAvKiBFTkFCTEUgKi8KLSNkZWZpbmUgWFhXUkkgIDY1ICAgICAgIC8qIFdSSVRF ICovCi0jZGVmaW5lIFhYQ0xTICA2NiAgICAgICAvKiBDTFMgKGNsZWFyIHNjcmVlbikgKi8KLSNk ZWZpbmUgWFhSRVQgIDY3CS8qIFJFVFVSTiAqLwotI2RlZmluZSBYWE9QRSAgNjggICAgICAgLyog T1BFTiAqLwotI2RlZmluZSBYWFJFQSAgNjkJLyogUkVBRCAqLwotI2RlZmluZSBYWE9OICAgNzAg ICAgICAgLyogT04gKi8KLSNkZWZpbmUgWFhEQ0wgIDcxICAgICAgIC8qIERFQ0xBUkUgKi8KLSNk ZWZpbmUgWFhCRUcgIDcyICAgICAgIC8qIEJFR0lOIChub3QgdXNlZCkgKi8KLSNkZWZpbmUgWFhG T1IgIDcyICAgICAgIC8qIEZPUiAqLwotI2RlZmluZSBYWFdISSAgNzMgICAgICAgLyogV0hJTEUg Ki8KLSNkZWZpbmUgWFhJRlggIDc0ICAgICAgIC8qIEV4dGVuZGVkIElGICovCi0jZGVmaW5lIFhY Q01TICA3NSAgICAgICAvKiBTRU5EIGZyb20gY29tbWFuZCBvdXRwdXQgKG5vdCB5ZXQpICovCi0j ZGVmaW5lIFhYQ01SICA3NiAgICAgICAvKiBSRUNFSVZFIHRvIGEgY29tbWFuZCdzIGlucHV0IChu b3QgeWV0KSAqLwotI2RlZmluZSBYWENNRyAgNzcgICAgICAgLyogR0VUIHRvIGEgY29tbWFuZCdz IGlucHV0IChub3QgeWV0KSAqLwotI2RlZmluZSBYWFNVUyAgNzggICAgICAgLyogU1VTUEVORCAq LwotI2RlZmluZSBYWEVSUiAgNzkgICAgICAgLyogRVJST1IgKi8KLSNkZWZpbmUgWFhNU0UgIDgw ICAgICAgIC8qIE1TRU5EICovCi0jZGVmaW5lIFhYQlVHICA4MSAgICAgICAvKiBCVUcgKi8KLSNk ZWZpbmUgWFhQQUQgIDgyICAgICAgIC8qIFBBRCAoYXMgaW4gWC4yNSBQQUQpIEFOWVgyNSAqLwot I2RlZmluZSBYWFJFRCAgODMgICAgICAgLyogUkVESUFMICovCi0jZGVmaW5lIFhYR1RBICA4NAkv KiBfZ2V0YXJncyAoaW52aXNpYmxlIGludGVybmFsKSAqLwotI2RlZmluZSBYWFBUQSAgODUJLyog X3B1dGFyZ3MgKGludmlzaWJsZSBpbnRlcm5hbCkgKi8KLSNkZWZpbmUgWFhHT0sgIDg2ICAgICAg IC8qIEdFVE9LIC0gQXNrIGZvciBZRVMvTk8gKi8KLSNkZWZpbmUgWFhURUwgIDg3CS8qIFRFTE5F VCAqLwotI2RlZmluZSBYWEFTWCAgODgJLyogX0FTU0lHTiAoZXZhbHVhdGVzIHZhciBuYW1lKSAq LwotI2RlZmluZSBYWERGWCAgODkJLyogX0RFRklORSAoZXZhbHVhdGVzIHZhciBuYW1lKSAqLwot I2RlZmluZSBYWFBORyAgOTAJLyogUElORyAoZm9yIFRDUC9JUCkgKi8KLSNkZWZpbmUgWFhJTlQg IDkxICAgICAgIC8qIElOVFJPRFVDVElPTiAqLwotI2RlZmluZSBYWENISyAgOTIJLyogQ0hFQ0sg KGEgZmVhdHVyZSkgKi8KLSNkZWZpbmUgWFhNU0wgIDkzICAgICAgIC8qIE1TTEVFUCwgTVBBVVNF IChtaWxsaXNlY29uZCBzbGVlcCkgKi8KLSNkZWZpbmUgWFhORVcgIDk0ICAgICAgIC8qIE5FV1Mg Ki8KLSNkZWZpbmUgWFhBUEMgIDk1ICAgICAgIC8qIEFQQyAqLwotI2RlZmluZSBYWEZVTiAgOTYg ICAgICAgLyogUkVESVJFQ1QgKi8KLSNkZWZpbmUgWFhXUkwgIDk3CS8qIFdSSVRFLUxJTkUgKi8K LSNkZWZpbmUgWFhSRVhYIDk4CS8qIFJleHggKi8KLSNkZWZpbmUgWFhNSU5QIDEwMAkvKiBNSU5Q VVQgKi8KLSNkZWZpbmUgWFhSU0VOIDEwMQkvKiBSRVNFTkQgKi8KLSNkZWZpbmUgWFhQU0VOIDEw MgkvKiBQU0VORCAqLwotI2RlZmluZSBYWEdFVEMgMTAzCS8qIEdFVEMgKi8KLSNkZWZpbmUgWFhF VkFMIDEwNAkvKiBFVkFMVUFURSAqLwotI2RlZmluZSBYWEZXRCAgMTA1CS8qIEZPUldBUkQgKi8K LSNkZWZpbmUgWFhVUEQgIDEwNiAgICAgIC8qIFVQREFURVMgKi8KLSNkZWZpbmUgWFhCRUVQIDEw NyAgICAgIC8qIEJFRVAgKi8KLSNkZWZpbmUgWFhNT1ZFIDEwOCAgICAgIC8qIE1PVkUgKi8KLSNk ZWZpbmUgWFhNTU9WRSAxMDkgICAgIC8qIE1NT1ZFICovCi0jZGVmaW5lIFhYUkVHRVQgMTEwICAg ICAvKiBSRUdFVCAqLwotI2RlZmluZSBYWExPT0sgIDExMQkvKiBMT09LVVAgKi8KLSNkZWZpbmUg WFhWSUVXICAxMTIgICAgIC8qIFZJRVcgKHRlcm1pbmFsIGJ1ZmZlcikgKi8KLSNkZWZpbmUgWFhB TlNXICAxMTMJLyogQU5TV0VSICh0aGUgcGhvbmUpICovCi0jZGVmaW5lIFhYUERJQSAgMTE0CS8q IFBESUFMIChwYXJ0aWFsIGRpYWwpICovCi0jZGVmaW5lIFhYQVNDICAgMTE1CS8qIEFTQ0lJIC8g VEVYVCAqLwotI2RlZmluZSBYWEJJTiAgIDExNgkvKiBCSU5BUlkgKi8KLSNkZWZpbmUgWFhGVFAg ICAxMTcJLyogRlRQICovCi0jZGVmaW5lIFhYTUtESVIgMTE4CS8qIE1LRElSICovCi0jZGVmaW5l IFhYUk1ESVIgMTE5CS8qIFJNRElSICovCi0jZGVmaW5lIFhYVEVMT1AgMTIwCS8qIFRFTE9QVCAq LwotI2RlZmluZSBYWFJMT0cgIDEyMQkvKiBSTE9HSU4gKi8KLSNkZWZpbmUgWFhVTkRFRiAxMjIJ LyogVU5ERUZJTkUgKi8KLSNkZWZpbmUgWFhOUFNIICAxMjMJLyogTk9QVVNIICovCi0jZGVmaW5l IFhYQUREICAgMTI0CS8qIEFERCAqLwotI2RlZmluZSBBRERfU05EICAgMCAgICAgLyogQUREIFNF TkQtTElTVCAqLwotI2RlZmluZSBBRERfQklOICAgMSAgICAgLyogQUREIEJJTkFSWS1QQVRURVJO UyAqLwotI2RlZmluZSBBRERfVFhUICAgMiAgICAgLyogQUREIFRFWFQtUEFUVEVSTlMgKi8KLSNk ZWZpbmUgWFhMT0NBTCAxMjUJLyogTE9DQUwgKi8KLSNkZWZpbmUgWFhLRVJNSSAxMjYJLyogS0VS TUlUICovCi0jZGVmaW5lIFhYREFURSAgMTI3CS8qIERBVEUgKi8KLSNkZWZpbmUgWFhTV0lUICAx MjggICAgIC8qIFNXSVRDSCAqLwotI2RlZmluZSBYWFhGV0QgIDEyOQkvKiBfRk9SV0FSRCAqLwot I2RlZmluZSBYWFNBVkUgIDEzMCAgICAgLyogU0FWRSAqLwotI2RlZmluZSBYWFhFQ0ggIDEzMSAg ICAgLyogWEVDSE8gKi8KLSNkZWZpbmUgWFhSREJMICAxMzIgICAgIC8qIFJFQURCTE9DSyAqLwot I2RlZmluZSBYWFdSQkwgIDEzMyAgICAgLyogV1JJVEVCTE9DSyAqLwotI2RlZmluZSBYWFJFVFIg IDEzNCAgICAgLyogUkVUUklFVkUgKi8KLSNkZWZpbmUgWFhFSUdIVCAxMzUgICAgIC8qIEVJR0hU QklUICovCi0jZGVmaW5lIFhYRURJVCAgMTM2CS8qIEVESVQgKi8KLSNkZWZpbmUgWFhDU0VOICAx MzcJLyogQ1NFTkQgKi8KLSNkZWZpbmUgWFhDUkVDICAxMzgJLyogQ1JFQ0VJVkUgKi8KLSNkZWZp bmUgWFhDUSAgICAxMzkJLyogQ1EgKi8KLSNkZWZpbmUgWFhUQVBJICAxNDAgICAgIC8qIFRBUEkg YWN0aW9ucyBzdWNoIGFzIGRpYWxvZ3MgKi8KLSNkZWZpbmUgWFhSRVMgICAxNDEgICAgIC8qIFJF U0VUICovCi0jZGVmaW5lIFhYQ0dFVCAgMTQyICAgICAvKiBDR0VUICovCi0jZGVmaW5lIFhYRlVO QyAgMTQzICAgICAvKiBGdW5jdGlvbiAoaGVscC1vbmx5KSAqLwotI2RlZmluZSBYWEtWUkIgIDE0 NCAgICAgLyogS3ZlcmIgKGhlbHAtb25seSkgKi8KLSNkZWZpbmUgWFhCUk9XUyAxNDUJLyogQlJP V1NFICovCi0jZGVmaW5lIFhYTUdFVCAgMTQ2CS8qIE1HRVQgKi8KLSNkZWZpbmUgWFhCQUNLICAx NDcJLyogQkFDSyAqLwotI2RlZmluZSBYWFdIRVJFIDE0OAkvKiBXSEVSRSAqLwotI2RlZmluZSBY WFJFRE8gIDE0OSAgICAgLyogUkVETyAqLwotI2RlZmluZSBYWEVYQ0ggIDE1MCAgICAgLyogRVhD SEFOR0UgKi8KLSNkZWZpbmUgWFhSRU1WICAxNTEgICAgIC8qIFJFTU9WRSAqLwotI2RlZmluZSBY WENIUlQgIDE1MgkvKiBDSFJPT1QgKi8KLSNkZWZpbmUgWFhPUFRTICAxNTMJLyogT3B0aW9ucyAo aGVscC1vbmx5KSAqLwotI2RlZmluZSBYWEFVVEggIDE1NAkvKiBBVVRIT1JJWkUgKi8KLSNkZWZp bmUgWFhQSVBFICAxNTUJLyogUElQRSAqLwotI2RlZmluZSBYWFNTSCAgIDE1NgkvKiBTU0ggKi8K LSNkZWZpbmUgWFhURVJNICAxNTcgICAgIC8qIFRFUk1JTkFMICovCi0jZGVmaW5lIFhYU1RBVFVT IDE1OCAgICAvKiBTVEFUVVMgKi8KLSNkZWZpbmUgWFhDUFIgICAxNTkJLyogQ09QWVJJR0hUICov Ci0jZGVmaW5lIFhYQVNTRVIgMTYwCS8qIEFTU0VSVCAqLwotI2RlZmluZSBYWFNVQ0MgIDE2MSAg ICAgLyogU1VDQ0VFRCAqLwotI2RlZmluZSBYWEZBSUwgIDE2MiAgICAgLyogRkFJTCAqLwotI2Rl ZmluZSBYWExPR0lOIDE2MyAgICAgLyogTE9HSU4gKi8KLSNkZWZpbmUgWFhMT0dPVVQgMTY0ICAg IC8qIExPR09VVCAqLwotI2RlZmluZSBYWE5MQ0wgIDE2NSAgICAgLyogTk9MT0NBTCAqLwotI2Rl ZmluZSBYWFdJTEQgIDE2NiAgICAgLyogV0lMRENBUkRTIChoZWxwLW9ubHkpICovCi0KLS8qIE9u ZS13b3JkIHN5bm9ueW1zIGZvciBSRU1PVEUgY29tbWFuZHMgKi8KLQotI2RlZmluZSBYWFJDUFkg IDE2NwkvKiBSRU1PVEUgQ09QWSAqLwotI2RlZmluZSBYWFJDV0QgIDE2OAkvKiBDaGFuZ2UgV29y a2luZyBEaXJlY3RvcnkgKi8KLSNkZWZpbmUgWFhSREVMICAxNjkJLyogRGVsZXRlICovCi0jZGVm aW5lIFhYUkRJUiAgMTcwCS8qIERpcmVjdG9yeSAqLwotI2RlZmluZSBYWFJITFAgIDE3MQkvKiBI ZWxwICovCi0jZGVmaW5lIFhYUkhPUyAgMTcyCS8qIEhvc3QgKi8KLSNkZWZpbmUgWFhSS0VSICAx NzMJLyogS2VybWl0ICovCi0jZGVmaW5lIFhYUk1TRyAgMTc0CS8qIE1lc3NhZ2UgKi8KLSNkZWZp bmUgWFhSUFJJICAxNzUJLyogUHJpbnQgKi8KLSNkZWZpbmUgWFhSUkVOICAxNzYJLyogUmVuYW1l ICovCi0jZGVmaW5lIFhYUlNFVCAgMTc3CS8qIFNldCAqLwotI2RlZmluZSBYWFJTUEEgIDE3OAkv KiBTcGFjZSAqLwotI2RlZmluZSBYWFJTVUIgIDE3OQkvKiBTdWJtaXQgKi8KLSNkZWZpbmUgWFhS VFlQICAxODAJLyogVHlwZSAqLwotI2RlZmluZSBYWFJXSE8gIDE4MQkvKiBXaG8gKi8KLSNkZWZp bmUgWFhSUFdEICAxODIJLyogUHJpbnQgV29ya2luZyBEaXJlY3RvcnkgKi8KLSNkZWZpbmUgWFhS UVVFICAxODMJLyogUXVlcnkgKi8KLSNkZWZpbmUgWFhSQVNHICAxODQJLyogQXNzaWduICovCi0j ZGVmaW5lIFhYUk1LRCAgMTg1CS8qIG1rZGlyICovCi0jZGVmaW5lIFhYUlJNRCAgMTg2CS8qIHJt ZGlyICovCi0jZGVmaW5lIFhYUlhJVCAgMTg3CS8qIEV4aXQgKi8KLQotLyogVG9wLUxldmVsIGNv bW1hbmRzLCBjb250J2QuLi4gKi8KLQotI2RlZmluZSBYWEdFVEsgIDE4OAkvKiBHRVRLRVlDT0RF ICovCi0jZGVmaW5lIFhYTU9SRSAgMTg5CS8qIE1PUkUgKi8KLSNkZWZpbmUgWFhYT1BUUyAxOTAJ LyogRXh0ZW5kZWQtT3B0aW9ucyAoaGVscC1vbmx5KSAqLwotI2RlZmluZSBYWElLU0QgIDE5MQkv KiBJS1NEICovCi0jZGVmaW5lIFhYUkVTRVQgMTkyCS8qIFJFU0VUICovCi0jZGVmaW5lIFhYQVNT T0MgMTkzICAgICAvKiBBU1NPQ0lBVEUgKi8KLQotI2RlZmluZSBBU1NPQ19GQyAgMCAgICAgLyog QVNTT0NJQVRFIEZJTEUtQ0hBUkFDVEVSLVNFVCAqLwotI2RlZmluZSBBU1NPQ19UQyAgMSAgICAg LyogQVNTT0NJQVRFIFRSQU5TRkVSLUNIQVJBQ1RFUi1TRVQgKi8KLQotI2RlZmluZSBYWFNISUZU IDE5NAkvKiBTSElGVCAqLwotI2RlZmluZSBYWE1BTiAgIDE5NSAgICAgLyogTUFOVUFMICovCi0j ZGVmaW5lIFhYTFMgICAgMTk2ICAgICAvKiBMUyAqLwotI2RlZmluZSBYWFNPUlQgIDE5NwkvKiBT T1JUICovCi0jZGVmaW5lIFhYUFVSR0UgMTk4CS8qIFBVUkdFICovCi0jZGVmaW5lIFhYRkFTVCAg MTk5CS8qIEZBU1QgKi8KLSNkZWZpbmUgWFhDQVUgICAyMDAJLyogQ0FVVElPVVMgKi8KLSNkZWZp bmUgWFhST0IgICAyMDEJLyogUk9CVVNUICovCi0jZGVmaW5lIFhYTUFDUk8gMjAyICAgICAvKiBJ bW1lZGlhdGUgbWFjcm8gKi8KLSNkZWZpbmUgWFhTQ1JOICAyMDMJLyogU0NSRUVOICovCi0jZGVm aW5lIFhYTE5PVVQgMjA0ICAgICAvKiBMSU5FT1VUICovCi0jZGVmaW5lIFhYX0lOQ1IgMjA1CS8q IF9JTkNSRU1FTlQgKi8KLSNkZWZpbmUgWFhfREVDUiAyMDYJLyogX0RFQ1JFTUVOVCAqLwotI2Rl ZmluZSBYWF9FVkFMIDIwNwkvKiBfRVZBTFVBVEUgKi8KLSNkZWZpbmUgWFhBUlJBWSAyMDgJLyog QVJSQVkgKi8KLSNkZWZpbmUgWFhQQVJTRSAyMDkJLyogUEFSU0UgKi8KLSNkZWZpbmUgWFhIVFRQ ICAyMTAgICAgIC8qIEhUVFAgKi8KLQotI2lmZGVmIENLQ0hBTk5FTElPCi0jZGVmaW5lIFhYRklM RSAgMjExCS8qIEZJTEUgKi8KLSNkZWZpbmUgWFhGX0NMICAyMTIJLyogRkNMT1NFICovCi0jZGVm aW5lIFhYRl9GTCAgMjEzCS8qIEZGTFVTSCAqLwotI2RlZmluZSBYWEZfTEkgIDIxNAkvKiBGTElT VCAqLwotI2RlZmluZSBYWEZfT1AgIDIxNQkvKiBGT1BFTiAqLwotI2RlZmluZSBYWEZfUkUgIDIx NgkvKiBGUkVBRCAqLwotI2RlZmluZSBYWEZfU0UgIDIxNwkvKiBGU0VFSyAqLwotI2RlZmluZSBY WEZfU1QgIDIxOAkvKiBGU1RBVFVTICovCi0jZGVmaW5lIFhYRl9XUiAgMjE5CS8qIEZXUklURSAq LwotI2RlZmluZSBYWEZfUlcgIDIyMAkvKiBGUkVXSU5EICovCi0jZGVmaW5lIFhYRl9DTyAgMjIx CS8qIEZDT1VOVCAqLwotI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCi0KLSNkZWZpbmUgWFhFWEVD ICAyMjIJLyogZXhlYygpICovCi0jZGVmaW5lIFhYVFJBQ0UgMjIzCS8qIFRSQUNFICovCi0jZGVm aW5lIFhYTk9UQVYgMjI0CS8qIFRoZSAibm90IGF2YWlsYWJsZSIgY29tbWFuZCAqLwotI2RlZmlu ZSBYWFBUWSAgIDIyNSAgICAgLyogUFRZIChsaWtlIFBJUEUpICovCi0jZGVmaW5lIFhYQ0hNT0Qg MjI2ICAgICAvKiBDSE1PRCAqLwotI2RlZmluZSBYWFBST01QIDIyNwkvKiBQUk9NUFQgKi8KLSNk ZWZpbmUgWFhGRUFDSCAyMjgJLyogRk9SRUFDSCAqLwotI2RlZmluZSBYWEdSRVAgIDIyOSAgICAg LyogR1JFUCAqLwotI2RlZmluZSBYWFNFWFAgIDIzMAkvKiBTLUV4cHJlc3Npb24gKi8KLSNkZWZp bmUgWFhVTkRDTCAyMzEJLyogVU5ERUNMQVJFICovCi0jZGVmaW5lIFhYVk9JRCAgMjMyICAgICAv KiBWT0lEICovCi0jZGVmaW5lIFhYUFVUICAgMjMzCS8qIFBVVCAqLwotI2RlZmluZSBYWFVOREZY IDIzNAkvKiBfVU5ERUZJTkUgKi8KLSNkZWZpbmUgWFhIRUFEICAyMzUgICAgIC8qIEhFQUQgKi8K LSNkZWZpbmUgWFhUQUlMICAyMzYgICAgIC8qIFRBSUwgKi8KLSNkZWZpbmUgWFhERUJVRyAyMzcg ICAgIC8qIERFQlVHICovCi0jZGVmaW5lIFhYTEVBUk4gMjM4ICAgICAvKiBMRUFSTiAqLwotI2Rl ZmluZSBYWFBBVCAgIDIzOSAgICAgLyogUEFUVEVSTlMgKGhlbHAgb25seSkgKi8KLQotI2RlZmlu ZSBYWENEVVAgIDI0MCAgICAgLyogQ0RVUCAoQ2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5IHVwd2Fy ZHMpICovCi0jZGVmaW5lIFhYUkNEVVAgMjQxICAgICAvKiBSRU1PVEUgQ0RVUCAqLwotI2RlZmlu ZSBYWENBVCAgIDI0MgkvKiBDQVQgKD0gVFlQRSAvTk9QQUdFKSAqLwotI2RlZmluZSBYWEZJUkVX IDI0MyAgICAgLyogRklSRVdBTEwgKGhlbHAgb25seSkgKi8KLQotI2RlZmluZSBYWExDV0QgIDI0 NAkvKiBMb2NhbCBDKFcpRCAqLwotI2RlZmluZSBYWExDRFUgIDI0NQkvKiBMb2NhbCBDRFVQICov Ci0jZGVmaW5lIFhYTFBXRCAgMjQ2CS8qIExvY2FsIFBXRCAqLwotI2RlZmluZSBYWExERUwgIDI0 NwkvKiBMb2NhbCBERUxFVEUgKi8KLSNkZWZpbmUgWFhMRElSICAyNDgJLyogTG9jYWwgRElSRUNU T1JZICovCi0jZGVmaW5lIFhYTFJFTiAgMjQ5CS8qIExvY2FsIFJFTkFNRSAqLwotI2RlZmluZSBY WExNS0QgIDI1MAkvKiBMb2NhbCBNS0RJUiAqLwotI2RlZmluZSBYWExSTUQgIDI1MQkvKiBMb2Nh bCBSTURJUiAqLwotI2RlZmluZSBYWFVTRVIgIDI1MgkvKiAoRlRQKSBVU0VSICovCi0jZGVmaW5l IFhYQUNDVCAgMjUzCS8qIChGVFApIEFDQ09VTlQgKi8KLSNkZWZpbmUgWFhMSU5LICAyNTQgICAg IC8qIExJTksgc291cmNlIGRlc3RpbmF0aW9uICovCi0jZGVmaW5lIFhYT1JJRSAgMjU1CS8qIE9S SUVOVChBVElPTikgKi8KLSNkZWZpbmUgWFhESUFMRVIgMjU2ICAgIC8qIERJQUxFUiAqLwotI2Rl ZmluZSBYWEtDRCAgIDI1NyAgICAgLyogS0NEICovCi0jZGVmaW5lIFhYU0lURSAgMjU4ICAgICAv KiAoRlRQKSBTSVRFICovCi0jZGVmaW5lIFhYUEFTViAgMjU5ICAgICAvKiAoRlRQKSBQQVNTSVZF ICovCi0jZGVmaW5lIFhYQ09OVCAgMjYwCS8qIENPTlRJTlVFICovCi0jZGVmaW5lIFhYTlNDUiAg MjYxCS8qIE5PU0NST0xMICovCi0jZGVmaW5lIFhYU0ZUUCAgMjYyCS8qIFNGVFAgKi8KLSNkZWZp bmUgWFhTS1JNICAyNjMJLyogU0tFUk1JVCAqLwotI2RlZmluZSBYWFdESVIgIDI2NAkvKiBXRElS RUNUT1JZICovCi0jZGVmaW5lIFhYSERJUiAgMjY1CS8qIEhESVJFQ1RPUlkgKi8KLSNkZWZpbmUg WFhUT1VDICAyNjYJLyogVE9VQ0ggKi8KLSNkZWZpbmUgWFhMT0NVICAyNjcJLyogTE9DVVMgKGZv ciBIRUxQKSAqLwotI2RlZmluZSBYWFBVVEUgIDI2OCAgICAgLyogUFVURU5WICovCi0jZGVmaW5l IFhYWE1TRyAgMjY5ICAgICAvKiBYTUVTU0FHRSAqLwotCi0vKiBFbmQgb2YgVG9wLUxldmVsIENv bW1hbmRzICovCi0KLSNkZWZpbmUgU0NOX0NMUiAgIDAJCQkvKiBTQ1JFRU4gQ0xFQVIgKi8KLSNk ZWZpbmUgU0NOX0NMRSAgIDEJCQkvKiBTQ1JFRU4gQ0xFT0wgKi8KLSNkZWZpbmUgU0NOX01PViAg IDIJCQkvKiBTQ1JFRU4gTU9WRSAqLwotCi0vKiBBUlJBWSBvcGVyYXRpb25zICovCi0KLSNkZWZp bmUgQVJSX0RDTCAgIDAJCQkvKiBEZWNsYXJlICovCi0jZGVmaW5lIEFSUl9DUFkgICAxCQkJLyog Q29weSAqLwotI2RlZmluZSBBUlJfUlNaICAgMgkJCS8qIFJlc2l6ZSAqLwotI2RlZmluZSBBUlJf U1JUICAgMwkJCS8qIFNvcnQgKi8KLSNkZWZpbmUgQVJSX0NMUiAgIDQJCQkvKiBDbGVhciAqLwot I2RlZmluZSBBUlJfU0VBICAgNQkJCS8qIFNlYXJjaCAqLwotI2RlZmluZSBBUlJfRFNUICAgNgkJ CS8qIERlc3Ryb3kgKi8KLSNkZWZpbmUgQVJSX1NITyAgIDcJCQkvKiBTaG93ICovCi0jZGVmaW5l IEFSUl9TRVQgICA4CQkJLyogU2V0ICovCi0jZGVmaW5lIEFSUl9FUVUgICA5CQkJLyogRXF1YXRl ICovCi0KLS8qIFNPUlQgb3B0aW9ucyAqLwotCi0jZGVmaW5lIFNSVF9DQVMgICAwCQkJLyogL0NB U0UgKi8KLSNkZWZpbmUgU1JUX0tFWSAgIDEJCQkvKiAvS0VZOm4gKi8KLSNkZWZpbmUgU1JUX1JF ViAgIDIJCQkvKiAvUkVWRVJTRSAqLwotI2RlZmluZSBTUlRfUk5HICAgMwkJCS8qIC9SQU5HRTpu Om0gKi8KLSNkZWZpbmUgU1JUX05VTSAgIDQJCQkvKiAvTlVNRVJJQyAqLwotCi0vKiBQVVJHRSBj b21tYW5kIG9wdGlvbnMgKi8KLQotI2RlZmluZSBQVV9LRUVQIDAJCQkvKiAvS0VFUDogKi8KLSNk ZWZpbmUgUFVfTElTVCAxCQkJLyogL0xJU1QgKi8KLSNkZWZpbmUgUFVfUEFHRSAyCQkJLyogL1BB R0UgKi8KLSNkZWZpbmUgUFVfTk9QQSAzCQkJLyogL05PUEFHRSAqLwotI2RlZmluZSBQVV9OT0RF IDQJCQkvKiAvU0lNVUxBVEUgKi8KLSNkZWZpbmUgUFVfREVMRSA1CQkJLyogL0RFTEVURSAqLwot I2RlZmluZSBQVV9OT0xJIDYJCQkvKiAvTk9MSVNUICovCi0jZGVmaW5lIFBVX1FVSUUgNwkJCS8q IC9RVUlFVCAoPSBOT0xJU1QpICovCi0jZGVmaW5lIFBVX1ZFUkIgOAkJCS8qIC9WRVJCT1NFICg9 IExJU1QpICovCi0jZGVmaW5lIFBVX0FTSyAgOQkJCS8qIC9BU0sgKi8KLSNkZWZpbmUgUFVfTkFT SyAxMAkJCS8qIC9OT0FTSyAqLwotI2RlZmluZSBQVV9MQVIgIDExCQkJLyogL0xBUkdFUi1USEFO OiAqLwotI2RlZmluZSBQVV9TTUEgIDEyCQkJLyogL1NNQUxMRVItVEhBTjogKi8KLSNkZWZpbmUg UFVfQUZUICAxMwkJCS8qIC9BRlRFUjogKi8KLSNkZWZpbmUgUFVfTkFGICAxNAkJCS8qIC9OT1Qt QUZURVI6ICovCi0jZGVmaW5lIFBVX0JFRiAgMTUJCQkvKiAvQkVGT1JFOiAqLwotI2RlZmluZSBQ VV9OQkYgIDE2CQkJLyogL05PVC1CRUZPUkU6ICovCi0jZGVmaW5lIFBVX0VYQyAgMTcJCQkvKiAv RVhDRVBUOiAqLwotI2RlZmluZSBQVV9SRUNVIDE4CQkJLyogL1JFQ1VSU0lWRSAqLwotI2RlZmlu ZSBQVV9ET1QgIDE5CQkJLyogL0RPVEZJTEVTICovCi0jZGVmaW5lIFBVX05PRE9UIDIwCQkJLyog L05PRE9URklMRVMgKi8KLSNkZWZpbmUgUFVfSERHICAyMQkJCS8qIC9IRUFESU5HICovCi0jZGVm aW5lIFBVX05PSCAgMjIJCQkvKiAvTk9IRUFESU5HICovCi0KLS8qIERFTEVURSBjb21tYW5kIG9w dGlvbnMgKi8KLQotI2RlZmluZSBERUxfTk9MIDAJCQkvKiAvTk9MSVNUICovCi0jZGVmaW5lIERF TF9MSVMgMQkJCS8qIC9MSVNUICovCi0jZGVmaW5lIERFTF9IREcgMgkJCS8qIC9IRUFESU5HUyAq LwotI2RlZmluZSBERUxfTk9IIDIJCQkvKiAvTk9IRUFESU5HUyAqLwotI2RlZmluZSBERUxfQkVG IDMJCQkvKiAvQkVGT1JFOiAqLwotI2RlZmluZSBERUxfTkJGIDQJCQkvKiAvTk9ULUJFRk9SRTog Ki8KLSNkZWZpbmUgREVMX0FGVCA1CQkJLyogL0FGVEVSOiAqLwotI2RlZmluZSBERUxfTkFGIDYJ CQkvKiAvTk9ULUFGVEVSOiAqLwotI2RlZmluZSBERUxfRE9UIDcJCQkvKiAvRE9URklMRVMgKi8K LSNkZWZpbmUgREVMX05PRCA4CQkJLyogL05PRE9URklMRVMgKi8KLSNkZWZpbmUgREVMX0VYQyA5 CQkJLyogL0VYQ0VQVDoqLwotI2RlZmluZSBERUxfUEFHIDEwCQkJLyogL1BBR0UgKi8KLSNkZWZp bmUgREVMX05PUCAxMQkJCS8qIC9OT1BBR0UgKi8KLSNkZWZpbmUgREVMX1JFQyAxMgkJCS8qIC9S RUNVUlNJVkUgKi8KLSNkZWZpbmUgREVMX05PUiAxMwkJCS8qIC9OT1JFQ1VSU0lWRSAqLwotI2Rl ZmluZSBERUxfVlJCIDE0CQkJLyogL1ZFUkJPU0UgKi8KLSNkZWZpbmUgREVMX1FVSSAxNQkJCS8q IC9RVUlFVCAqLwotI2RlZmluZSBERUxfU01BIDE2CQkJLyogL1NNQUxMRVItVEhBTjogKi8KLSNk ZWZpbmUgREVMX0xBUiAxNwkJCS8qIC9MQVJHRVItVEhBTjogKi8KLSNkZWZpbmUgREVMX1NJTSAx OAkJCS8qIC9TSU1VTEFURSAqLwotI2RlZmluZSBERUxfQVNLIDE5CQkJLyogL0FTSyAqLwotI2Rl ZmluZSBERUxfTkFTIDIwCQkJLyogL05PQVNLICovCi0jZGVmaW5lIERFTF9TVU0gMjEJCQkvKiAv U1VNTUFSWSAqLwotI2RlZmluZSBERUxfRElSIDIyCQkJLyogL0RJUkVDVE9SWSAqLwotI2RlZmlu ZSBERUxfQUxMIDIzCQkJLyogL0FMTCAqLwotI2RlZmluZSBERUxfVFlQIDI0CQkJLyogL1RZUEU6 ICovCi0jZGVmaW5lIERFTF9MTksgMjUJCQkvKiAvRk9MTE9XTElOS1MgKi8KLSNkZWZpbmUgREVM X05MSyAyNgkJCS8qIC9OT0ZPTExPV0xJTktTICovCi0KLS8qIFJFTkFNRSBzd2l0Y2hlcyB0aGF0 IGNhbiBiZSB1c2VkIGluIHRoZSBzYW1lIHRhYmxlIGFzIHRoZSBERUwgc3dpdGNoZXMgKi8KLQot I2RlZmluZSBSRU5fTE9XIDEwMAkJCS8qIENvbnZlcnQgdG8gbG93ZXJjYXNlICovCi0jZGVmaW5l IFJFTl9VUFAgMTAxCQkJLyogQ29udmVydG8gdG8gdXBwZXJjYXNlICovCi0jZGVmaW5lIFJFTl9S UEwgMTAyCQkJLyogU3RyaW5nIHJlcGxhY2VtZW50ICovCi0jZGVmaW5lIFJFTl9PVlcgMTAzCQkJ LyogT3ZlcndyaXRlIGZpbGUgd2l0aCBzYW1lIG5hbWUgKi8KLSNkZWZpbmUgUkVOX1hMQSAxMDQJ CQkvKiBUcmFuc2xhdGUgY2hhcmFjdGVyIHNldHMgKi8KLSNkZWZpbmUgUkVOX1NQQSAxMDUJCQkv KiBGaXggc3BhY2VzICovCi0KLS8qIEZJTEUgb3BlcmF0aW9ucyAqLwotCi0jZGVmaW5lIEZJTF9P UE4gIDAJCQkvKiBPUEVOICovCi0jZGVmaW5lIEZJTF9DTFMgIDEJCQkvKiBDTE9TRSAqLwotI2Rl ZmluZSBGSUxfUkVBICAyCQkJLyogUkVBRCAqLwotI2RlZmluZSBGSUxfR0VUICAzCQkJLyogR0VU ICovCi0jZGVmaW5lIEZJTF9XUkkgIDQJCQkvKiBXUklURSAqLwotI2RlZmluZSBGSUxfUkVXICA1 CQkJLyogUkVXSU5EICovCi0jZGVmaW5lIEZJTF9MSVMgIDYJCQkvKiBMSVNUICovCi0jZGVmaW5l IEZJTF9GTFUgIDcJCQkvKiBGTFVTSCAqLwotI2RlZmluZSBGSUxfU0VFICA4CQkJLyogU0VFSyAq LwotI2RlZmluZSBGSUxfU1RBICA5CQkJLyogU1RBVFVTICovCi0jZGVmaW5lIEZJTF9DT1UgMTAJ CQkvKiBDT1VOVCAqLwotCi0vKiBPUEVOIC8gQ0xPU0UgaXRlbXMgKi8KLQotI2RlZmluZSBPUE5f RklfUiAxCQkJLyogRklMRSBSRUFEICovCi0jZGVmaW5lIE9QTl9GSV9XIDIJCQkvKiBGSUxFIFdS SVRFICovCi0jZGVmaW5lIE9QTl9GSV9BIDMJCQkvKiBGSUxFIEFQUEVORCAqLwotI2RlZmluZSBP UE5fUElfUiA0CQkJLyogUElQRSBSRUFEICovCi0jZGVmaW5lIE9QTl9QSV9XIDUJCQkvKiBQSVBF IFdSSVRFICovCi0jZGVmaW5lIE9QTl9QVF9SIDYJCQkvKiBQVFkgUkVBRCAqLwotI2RlZmluZSBP UE5fUFRfVyA3CQkJLyogUFRZIFdSSVRFICovCi0jZGVmaW5lIE9QTl9TRVIJIDgJCQkvKiBQT1JU IG9yIExJTkUgKi8KLSNkZWZpbmUgT1BOX05FVAkgOQkJCS8qIEhPU1QgKi8KLQotLyogS0VSQkVS T1MgY29tbWFuZCBzd2l0Y2hlcyAqLwotCi0jZGVmaW5lIEtSQl9TX1ZFICAwCS8qIC9WRVJTSU9O ICovCi0jZGVmaW5lIEtSQl9TX0NBICAxCS8qIC9DQUNIRTogKi8KLSNkZWZpbmUgS1JCX1NfTUFY IDEJLyogSGlnaGVzdCBLRVJCRVJPUyBzd2l0Y2ggbnVtYmVyICovCi0KLSNpZmRlZiBDS19LRVJC RVJPUwotCi0vKiBLRVJCRVJPUyBhY3Rpb25zICovCi0KLSNkZWZpbmUgS1JCX0FfSU4gIDAJLyog SU5JVElBTElaRSAqLwotI2RlZmluZSBLUkJfQV9ERSAgMQkvKiBERVNUUk9ZICovCi0jZGVmaW5l IEtSQl9BX0xDICAyCS8qIExJU1QtQ1JFREVOVElBTFMgKi8KLQotLyogS0VSQkVST1MgSU5JVCBz d2l0Y2hlcyAqLwotCi0jZGVmaW5lIEtSQl9JX0ZXICAwCS8qIC9GT1JXQVJEQUJMRSAqLwotI2Rl ZmluZSBLUkJfSV9MRiAgMQkvKiAvTElGRVRJTUU6ICovCi0jZGVmaW5lIEtSQl9JX1BEICAyCS8q IC9QT1NUREFURTogKi8KLSNkZWZpbmUgS1JCX0lfUFIgIDMJLyogL1BST1hJQUJMRSAqLwotI2Rl ZmluZSBLUkJfSV9SQiAgNAkvKiAvUkVORVdBQkxFOiAqLwotI2RlZmluZSBLUkJfSV9STiAgNQkv KiAvUkVORVcgKi8KLSNkZWZpbmUgS1JCX0lfU1IgIDYJLyogL1NFUlZJQ0U6ICovCi0jZGVmaW5l IEtSQl9JX1ZBICA3CS8qIC9WQUxJREFURSAqLwotI2RlZmluZSBLUkJfSV9STCAgOCAgICAgLyog L1JFQUxNOiAqLwotI2RlZmluZSBLUkJfSV9JTiAgOSAgICAgLyogL0lOU1RBTkNFOiAqLwotI2Rl ZmluZSBLUkJfSV9QVyAgMTAgICAgLyogL1BBU1NXT1JEOiAqLwotI2RlZmluZSBLUkJfSV9QQSAg MTEgICAgLyogL1BSRUFVVEggKi8KLSNkZWZpbmUgS1JCX0lfVkIgIDEyICAgIC8qIC9WRVJCT1NF ICovCi0jZGVmaW5lIEtSQl9JX0JSICAxMyAgICAvKiAvQlJJRUYgKi8KLSNkZWZpbmUgS1JCX0lf TkZXIDE0CS8qIC9OT1QtRk9SV0FSREFCTEUgKi8KLSNkZWZpbmUgS1JCX0lfTlBSIDE1CS8qIC9O T1QtUFJPWElBQkxFICovCi0jZGVmaW5lIEtSQl9JX05QQSAxNiAgICAvKiAvTk9ULVBSRUFVVEgg Ki8KLSNkZWZpbmUgS1JCX0lfSzQgIDE3ICAgIC8qIC9LRVJCRVJPUzQgICAgKHNob3VsZCBrNSBn ZXQgazQgYXMgd2VsbCkgKi8KLSNkZWZpbmUgS1JCX0lfTks0IDE4ICAgIC8qIC9OTy1LRVJCRVJP UzQgKi8KLSNkZWZpbmUgS1JCX0lfUE9QIDE5ICAgIC8qIC9QT1BVUCAqLwotI2RlZmluZSBLUkJf SV9BRFIgMjAgICAgLyogL0FERFJFU1NFUzogKi8KLSNkZWZpbmUgS1JCX0lfTkFEIDIxICAgIC8q IC9OTy1BRERSRVNTRVMgKi8KLSNkZWZpbmUgS1JCX0lfTUFYIDIxICAgIC8qIEhpZ2hlc3QgS0VS QkVST1MgSU5JVCBzd2l0Y2ggbnVtYmVyICovCi0KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwot Ci0vKiBTRVQgcGFyYW1ldGVycyAqLwotCi0jZGVmaW5lIFhZQlJFQSAgMAkvKiBCUkVBSyBzaW11 bGF0aW9uICovCi0jZGVmaW5lIFhZQ0hLVCAgMQkvKiBCbG9jayBjaGVjayB0eXBlICovCi0jZGVm aW5lIFhZREVCVSAgMgkvKiBEZWJ1Z2dpbmcgKi8KLSNkZWZpbmUgWFlERUxBICAzCS8qIERlbGF5 ICovCi0jZGVmaW5lIFhZRFVQTCAgNAkvKiBEdXBsZXggKi8KLSNkZWZpbmUgWFlFT0wgICA1CS8q IEVuZC1PZi1MaW5lIChwYWNrZXQgdGVybWluYXRvcikgKi8KLSNkZWZpbmUgWFlFU0MgICA2CS8q IEVzY2FwZSBjaGFyYWN0ZXIgKi8KLSNkZWZpbmUgWFlGSUxFICA3CS8qIEZpbGUgUGFyYW1ldGVy cyAoc2VlIGNrY2tlci5oIGZvciB2YWx1ZXMpICovCi0JCQkvKiAodGhpcyBzcGFjZSBhdmFpbGFi bGUpICovCi0jZGVmaW5lIFhZRkxPVyAgOQkvKiBGbG93IENvbnRyb2wgKi8KLSNkZWZpbmUgWFlI QU5EIDEwCS8qIEhhbmRzaGFrZSAqLwotI2RlZmluZSBYWUlGRCAgMTEJLyogSW5jb21wbGV0ZSBG aWxlIERpc3Bvc2l0aW9uICovCi0jZGVmaW5lIFhZSU1BRyAxMgkvKiAiSW1hZ2UgTW9kZSIgKi8K LSNkZWZpbmUgWFlJTlBVIDEzCS8qIElOUFVUIGNvbW1hbmQgcGFyYW1ldGVycyAqLwotI2RlZmlu ZSBYWUxFTiAgMTQJLyogTWF4aW11bSBwYWNrZXQgbGVuZ3RoIHRvIHNlbmQgKi8KLSNkZWZpbmUg WFlMSU5FIDE1CS8qIENvbW11bmljYXRpb24gbGluZSB0byB1c2UgKi8KLQotLyogU0VUIExJTkUg LyBTRVQgSE9TVCBjb21tYW5kIHN3aXRjaGVzICovCi0KLSNkZWZpbmUgU0xfQ05YICAgMAkvKiAv Q09OTkVDVCAqLwotI2RlZmluZSBTTF9TUlYgICAxCS8qIC9TRVJWRVIgKi8KLSNkZWZpbmUgU0xf U0hSICAgMgkvKiAvU0hBUkUgKi8KLSNkZWZpbmUgU0xfTlNIICAgMwkvKiAvTk9TSEFSRSAqLwot I2RlZmluZSBTTF9CRUUgICA0CS8qIC9CRUVQICovCi0jZGVmaW5lIFNMX0FOUyAgIDUJLyogL0FO U1dFUiAqLwotI2RlZmluZSBTTF9ESUEgICA2CS8qIC9ESUFMOnh4eCAqLwotI2RlZmluZSBTTF9T UEQgICA3CS8qIC9TUEVFRDp4eHggKi8KLSNkZWZpbmUgU0xfRkxPICAgOAkvKiAvRkxPVzp4eHgg Ki8KLSNkZWZpbmUgU0xfVE1PICAgOQkvKiAvVElNRU9VVDp4eHggKi8KLSNkZWZpbmUgU0xfQ01E ICAxMAkvKiAvQ09NTUFORCAqLwotI2RlZmluZSBTTF9QU1cgIDExCS8qIC9QQVNTV09SRDp4eHgg Ki8KLSNkZWZpbmUgU0xfSUtTICAxMiAgICAgIC8qIC9LRVJNSVQtU0VSVklDRSAqLwotI2RlZmlu ZSBTTF9ORVQgIDEzICAgICAgLyogL05FVFdPUkstVFlQRTp4eHggKi8KLSNkZWZpbmUgU0xfRU5D ICAxNCAgICAgIC8qIC9FTkNSWVBUOnR5cGUgKHRlbG5ldCkgL0VOQ1JZUFQgKHJsb2dpbikgKi8K LSNkZWZpbmUgU0xfS1JCNCAxNSAgICAgIC8qIC9LRVJCRVJPUyA0IChybG9naW4vdGVsbmV0KSAq LwotI2RlZmluZSBTTF9LUkI1IDE2ICAgICAgLyogL0tFUkJFUk9TIDUgKHJsb2dpbi90ZWxuZXQp ICovCi0jZGVmaW5lIFNMX1NSUCAgMTcgICAgICAvKiAvU1JQICh0ZWxuZXQpICovCi0jZGVmaW5l IFNMX05UTE0gMTggICAgICAvKiAvTlRMTSAodGVsbmV0KSAqLwotI2RlZmluZSBTTF9TU0wgIDE5 ICAgICAgLyogL1NTTCAodGVsbmV0KSAqLwotI2RlZmluZSBTTF9VSUQgIDIwICAgICAgLyogL1VT RVJJRDp4eHh4ICovCi0jZGVmaW5lIFNMX0FVVEggMjEgICAgICAvKiAvQVVUSDp0eXBlICovCi0j ZGVmaW5lIFNMX1dBSVQgMjIJLyogL1dBSVQgKi8KLSNkZWZpbmUgU0xfTk9XQUlUIDIzCS8qIC9O T1dBSVQgKi8KLSNkZWZpbmUgU0xfUFRZICAyNCAgICAgIC8qIC9QVFkgKi8KLQotI2RlZmluZSBY WUxPRyAgMTYJLyogTG9nIGZpbGUgKi8KLSNkZWZpbmUgWFlNQVJLIDE3CS8qIFN0YXJ0IG9mIFBh Y2tldCBtYXJrICovCi0jZGVmaW5lIFhZTlBBRCAxOAkvKiBBbW91bnQgb2YgcGFkZGluZyAqLwot I2RlZmluZSBYWVBBREMgMTkJLyogUGFkIGNoYXJhY3RlciAqLwotI2RlZmluZSBYWVBBUkkgMjAJ LyogUGFyaXR5ICovCi0jZGVmaW5lIFhZUEFVUyAyMQkvKiBJbnRlcnBhY2tldCBwYXVzZSAqLwot I2RlZmluZSBYWVBST00gMjIJLyogUHJvZ3JhbSBwcm9tcHQgc3RyaW5nICovCi0jZGVmaW5lIFhZ UUJJTiAyMwkvKiA4dGgtYml0IHByZWZpeCAqLwotI2RlZmluZSBYWVFDVEwgMjQJLyogQ29udHJv bCBjaGFyYWN0ZXIgcHJlZml4ICovCi0jZGVmaW5lIFhZUkVQVCAyNQkvKiBSZXBlYXQgY291bnQg cHJlZml4ICovCi0jZGVmaW5lIFhZUkVUUiAyNgkvKiBSZXRyeSBsaW1pdCAqLwotI2RlZmluZSBY WVNQRUUgMjcJLyogTGluZSBzcGVlZCAoYmF1ZCByYXRlKSAqLwotI2RlZmluZSBYWVRBQ0ggMjgJ LyogQ2hhcmFjdGVyIHRvIGJlIGRvdWJsZWQgKi8KLSNkZWZpbmUgWFlUSU1PIDI5CS8qIFRpbWVv dXQgaW50ZXJ2YWwgKi8KLSNkZWZpbmUgWFlNT0RNIDMwCS8qIE1vZGVtIC0gYWxzbyBzZWUgWFlE SUFMICovCi0KLSNkZWZpbmUgWFlTRU5EIDMxCS8qIFNFVCBTRU5EIHBhcmFtZXRlcnMgKi8KLSNk ZWZpbmUgWFlSRUNWIDMyICAgCS8qIFNFVCBSRUNFSVZFIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUg WFlURVJNIDMzCS8qIFNFVCBURVJNSU5BTCBwYXJhbWV0ZXJzICovCi0jZGVmaW5lICAgWFlUQllU IDAgICAgICAvKiAgVGVybWluYWwgQnl0ZXNpemUgKDcgb3IgOCkgKi8KLSNkZWZpbmUgICBYWVRU WVAgMSAgICAgIC8qICBUZXJtaW5hbCBlbXVsYXRpb24gVHlwZSAqLwotI2RlZmluZSAgICAgVFRf Tk9ORSAgMAkvKiAgICBOT05FLCBubyBlbXVsYXRpb24gKi8KLSNpZmRlZiBPUzIKLS8qCi0gIE5v dGUsIHRoZSBzeW1ib2xzIGZvciBWVCBhbmQgVlQtbGlrZSB0ZXJtaW5hbHMgc2hvdWxkIGJlIGlu IGFzY2VuZGluZwotICBudW1lcmljYWwgb3JkZXIsIHNvIHRoYXQgaGlnaGVyIG9uZXMgY2FuIGJl IHRyZWF0ZWQgYXMgc3VwZXJzZXRzIG9mCi0gIGxvd2VyIG9uZXMgd2l0aCByZXNwZWN0IHRvIGNh cGFiaWxpdGllcy4KLQotICBUaGlzIGlzIG5vIGxvbmdlciB0aGUgY2FzZSB3aXRoIHRoZSBpbmZs dXggb2YgbmV3IHRlcm1pbmFsIHR5cGVzLgotICBKdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBJU1hY WFhYKCkgbWFjcm9zIGluY2x1ZGUgdGhlIHByb3BlciBmYW1pbHkKLSAgZ3JvdXBzLgotKi8KLSNk ZWZpbmUgICAgIFRUX0RHMjAwICAgIDEgCS8qICAgIERhdGEgR2VuZXJhbCAyMDAgKi8KLSNkZWZp bmUgICAgIFRUX0RHMjEwICAgIDIgIAkvKiAgICBEYXRhIEdlbmVyYWwgMjEwICovCi0jZGVmaW5l ICAgICBUVF9ERzIxNyAgICAzICAgCS8qICAgIERhdGEgR2VuZXJhbCAyMTcgKi8KLSNkZWZpbmUg ICAgIFRUX0hQMjYyMSAgIDQgCS8qICAgIEhld2xldHQtUGFja2FyZCAyNjIxQSAqLwotI2RlZmlu ZSAgICAgVFRfSFBURVJNICAgNQkvKiAgICBIZXdsZXR0LVBhY2thcmQgQ29uc29sZSAqLwotI2Rl ZmluZSAgICAgVFRfSFpMMTUwMCAgNiAJLyogICAgSGF6ZWx0aW5lIDE1MDAgKi8KLSNkZWZpbmUg ICAgIFRUX1ZDNDQwNCAgIDcgCS8qICAgIFZvbGtlciBDcmFpZyBWQzQ0MDQvNDA0ICovCi0jZGVm aW5lICAgICBUVF9XWTMwICAgICA4CS8qICAgIFdZU0UtMzAvMzArICovCi0jZGVmaW5lICAgICBU VF9XWTUwICAgICA5IAkvKiAgICBXWVNFLTUwLzUwKyAqLwotI2RlZmluZSAgICAgVFRfV1k2MCAg ICAxMCAgICAgICAvKiAgICBXWVNFLTYwCSAqLwotI2RlZmluZSAgICAgVFRfV1kxNjAgICAxMSAg ICAgICAvKiAgICBXWVNFLTE2MCAgICovCi0jZGVmaW5lICAgICBUVF9RTlggICAgIDEyICAgICAg IC8qICAgIFFOWCAqLwotI2RlZmluZSAgICAgVFRfUUFOU0kgICAxMyAgICAgICAvKiAgICBRTlgg QW5zaSBlbXVsYXRpb24gKi8KLSNkZWZpbmUgICAgIFRUX1ZUNTIgICAgMTQJLyogICAgREVDIFZU LTUyICAqLwotI2RlZmluZSAgICAgVFRfSDE5ICAgICAxNQkvKiAgICBIZWF0aC0xOSAqLwotI2Rl ZmluZSAgICAgVFRfSUJNMzEgICAxNiAgICAgICAvKiAgICBJQk0gMzF4eCAqLwotI2RlZmluZSAg ICAgVFRfU0NPQU5TSSAxNwkvKiAgICBTQ09BTlNJIChVbml4IG1vZGUpICovCi0jZGVmaW5lICAg ICBUVF9BVDM4NiAgIDE4IAkvKiAgICBVbml4d2FyZSBBVDM4NiAoVW5peCBtb2RlKSAqLwotI2Rl ZmluZSAgICAgVFRfQU5TSSAgICAxOQkvKiAgICBJQk0gQU5TSS5TWVMgKEJCUykgKi8KLSNkZWZp bmUgICAgIFRUX1ZJUDc4MDkgMjAJLyogICAgSG9uZXl3ZWxsIFZJUDc4MDkgKi8KLSNkZWZpbmUg ICAgIFRUX0xJTlVYICAgMjEgICAgICAgLyogICAgTGludXggQ29uc29sZSAqLwotI2RlZmluZSAg ICAgVFRfSEZUICAgICAyMiAgICAgICAvKiAgICBJQk0gSGlnaCBGdW5jdGlvbiBUZXJtaW5hbCAq LwotI2RlZmluZSAgICAgVFRfQUlYVEVSTSAyMyAgICAgICAvKiAgICBJQk0gQUlYdGVybSAqLwot I2RlZmluZSAgICAgVFRfU1VOICAgICAyNCAgICAgICAvKiAgICBTVU4gQ29uc29sZSAqLwotI2Rl ZmluZSAgICAgVFRfQkE4MCAgICAyNSAgICAgICAvKiAgICBOaXhkb3JmIEJBODAgKi8KLSNkZWZp bmUgICAgIFRUX0JFT1MgICAgMjYgICAgICAgLyogICAgQmVPUyBBbnNpICovCi0jZGVmaW5lICAg ICBUVF9WVDEwMCAgIDI3CS8qICAgIERFQyBWVC0xMDAgKi8KLSNkZWZpbmUgICAgIFRUX1ZUMTAy ICAgMjgJLyogICAgREVDIFZULTEwMiAqLwotI2RlZmluZSAgICAgVFRfVlQyMjAgICAyOQkvKiAg ICBERUMgVlQtMjIwICovCi0jZGVmaW5lICAgICBUVF9WVDIyMFBDIDMwICAgICAgIC8qICAgIERF QyBWVC0yMjAgd2l0aCBQQyBrZXlib2FyZCAqLwotI2RlZmluZSAgICAgVFRfVlQzMjAgICAzMQkv KiAgICBERUMgVlQtMzIwICovCi0jZGVmaW5lICAgICBUVF9WVDMyMFBDIDMyCS8qICAgIERFQyBW VC0zMjAgd2l0aCBQQyBrZXlib2FyZCAqLwotI2RlZmluZSAgICAgVFRfV1kzNzAgICAzMwkvKiAg ICBXWVNFIDM3MCBBTlNJIFRlcm1pbmFsICovCi0jZGVmaW5lICAgICBUVF85NzgwMSAgIDM0ICAg ICAgIC8qICAgIFNpbml4IDk3ODAxLTV4eCB0ZXJtaW5hbCAqLwotI2RlZmluZSAgICAgVFRfQUFB ICAgICAzNSAgICAgICAvKiAgICBBbm4gQXJib3IgQW1iYXNzYWRvciAqLwotI2RlZmluZSAgICAg VFRfVFZJOTEwICAzNgkvKiAgICBUVkkgOTEwKyAqLwotI2RlZmluZSAgICAgVFRfVFZJOTI1ICAz NyAgICAgICAvKiAgICBUVkkgOTI1ICAqLwotI2RlZmluZSAgICAgVFRfVFZJOTUwICAzOCAgICAg ICAvKiAgICBUVkk5NTAgICAqLwotI2RlZmluZSAgICAgVFRfQURNM0EgICAzOSAgICAgICAvKiAg ICBMU0kgQURNIDNBICovCi0jZGVmaW5lICAgICBUVF9BRE01ICAgIDQwCQkvKiAgICBMU0kgQURN IDUgKi8KLSNkZWZpbmUgICAgIFRUX1ZUTlQgICAgNDEgICAgICAgLyogICAgTWljcm9zb2Z0IE5U IFZpcnR1YWwgVGVybWluYWwgKi8KLSNkZWZpbmUgICAgIFRUX01BWCAgIFRUX1ZUTlQKLSNkZWZp bmUgICAgIFRUX1ZUNDIwICAgOTYJLyogICAgREVDIFZULTQyMCAqLwotI2RlZmluZSAgICAgVFRf VlQ1MjAgICA5NwkvKiAgICBERUMgVlQtNTIwLzUyNSAqLwotI2RlZmluZSAgICAgVFRfVEVLNDAg OTkJLyogICAgVGVrdHJvbml4IDQwMXggKi8KLSNkZWZpbmUgICAgIFRUX0tCTV9FTUFDUyAgIFRU X01BWCsxCi0jZGVmaW5lICAgICBUVF9LQk1fSEVCUkVXICBUVF9NQVgrMgotI2RlZmluZSAgICAg VFRfS0JNX1JVU1NJQU4gVFRfTUFYKzMKLSNkZWZpbmUgICAgIFRUX0tCTV9XUCAgICAgIFRUX01B WCs0Ci0KLSNkZWZpbmUgSVNBQUEoeCkgICAoeCA9PSBUVF9BQUEpCi0jZGVmaW5lIElTQU5TSSh4 KSAgKHggPj0gVFRfU0NPQU5TSSAmJiB4IDw9IFRUX0FOU0kpCi0jZGVmaW5lIElTQkE4MCh4KSAg KHggPT0gVFRfQkE4MCkKLSNkZWZpbmUgSVNCRU9TKHgpICAoeCA9PSBUVF9CRU9TKQotI2RlZmlu ZSBJU1FOWCh4KSAgICh4ID09IFRUX1FOWCkKLSNkZWZpbmUgSVNRQU5TSSh4KSAgICh4ID09IFRU X1FBTlNJKQotI2RlZmluZSBJU0xJTlVYKHgpICh4ID09IFRUX0xJTlVYKQotI2RlZmluZSBJU1ND Tyh4KSAgICh4ID09IFRUX1NDT0FOU0kpCi0jZGVmaW5lIElTQVQzODYoeCkgKHggPT0gVFRfQVQz ODYpCi0jZGVmaW5lIElTQVZBVEFSKHgpICh4ID09IFRUX0FOU0kpCi0jZGVmaW5lIElTU1VOKHgp ICAgICh4ID09IFRUX1NVTikKLSNkZWZpbmUgSVNVTklYQ09OKHgpICh4ID09IFRUX1NDT0FOU0kg fHwgeCA9PSBUVF9BVDM4NiB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgeCA9PSBUVF9MSU5V WCAgIHx8IHggPT0gVFRfU1VOKQotI2RlZmluZSBJU0RHMjAwKHgpICh4ID49IFRUX0RHMjAwICYm IHggPD0gVFRfREcyMTcpCi0jZGVmaW5lIElTSFpMKHgpICAgKHggPT0gVFRfSFpMMTUwMCkKLSNk ZWZpbmUgSVNIMTkoeCkgICAoeCA9PSBUVF9IMTkpCi0jZGVmaW5lIElTSUJNMzEoeCkgKHggPT0g VFRfSUJNMzEpCi0jZGVmaW5lIElTVFZJKHgpICAgKHggPj0gVFRfVFZJOTEwICYmIHggPD0gVFRf VFZJOTUwKQotI2RlZmluZSBJU1RWSTkxMCh4KSAoeCA9PSBUVF9UVkk5MTApCi0jZGVmaW5lIElT VFZJOTI1KHgpICh4ID09IFRUX1RWSTkyNSkKLSNkZWZpbmUgSVNUVkk5NTAoeCkgKHggPT0gVFRf VFZJOTUwKQotI2RlZmluZSBJU1ZUNTIoeCkgICh4ID09IFRUX1ZUNTIgfHwgeCA9PSBUVF9IMTkp Ci0jaWZkZWYgQ09NTUVOVAotI2RlZmluZSBJU1ZUNTIwKHgpICh4ID09IFRUX1ZUNTIwKQotI2Rl ZmluZSBJU1ZUNDIwKHgpICh4ID49IFRUX1ZUNDIwICYmIHggPD0gVFRfVlQ1MjApCi0jZWxzZSAv KiBDT01NRU5UICovCi0vKiBTaW5jZSB3ZSBkbyBub3QgeWV0IHN1cHBvcnQgNDIwLzUyMCBleHRl bmQgMzIwICovCi0jZGVmaW5lIElTVlQ1MjAoeCkgKElTVlQzMjAoeCkpCi0jZGVmaW5lIElTVlQ0 MjAoeCkgKElTVlQzMjAoeCkpCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2RlZmluZSBJU1ZUMzIw KHgpICh4ID49IFRUX1ZUMzIwICYmIHggPD0gVFRfQUFBKQotI2RlZmluZSBJU1ZUMjIwKHgpICh4 ID49IFRUX1ZUMjIwICYmIHggPD0gVFRfQUFBIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgSVNC RU9TKHgpIHx8IElTUUFOU0koeCkgfHwgXAotICAgICAgICAgICAgICAgICAgICBJU0xJTlVYKHgp IHx8IElTU1VOKHgpKQotI2RlZmluZSBJU1ZUMTAyKHgpICh4ID49IFRUX1ZJUDc4MDkgJiYgeCA8 PSBUVF9CQTgwIHx8IFwKLQkJICAgIHggPT0gVFRfVlQxMDIgfHwgSVNWVDIyMCh4KSkKLSNkZWZp bmUgSVNWVDEwMCh4KSAoeCA9PSBUVF9WVDEwMCB8fCBJU1ZUMTAyKHgpKQotI2RlZmluZSBJU1dZ MzAoeCkgICh4ID09IFRUX1dZMzApCi0jZGVmaW5lIElTV1lTRSh4KSAgKHggPj0gVFRfV1kzMCAm JiB4IDw9IFRUX1dZMTYwKQotI2RlZmluZSBJU1dZNTAoeCkgICh4ID09IFRUX1dZNTApCi0jZGVm aW5lIElTV1k2MCh4KSAgKHggPT0gVFRfV1k2MCB8fCB4ID09IFRUX1dZMTYwKQotI2RlZmluZSBJ U1dZMTYwKHgpICh4ID09IFRUX1dZMTYwKQotI2RlZmluZSBJU1dZMzcwKHgpICh4ID09IFRUX1dZ MzcwKQotI2RlZmluZSBJU1ZDKHgpICAgICh4ID09IFRUX1ZDNDQwNCkKLSNkZWZpbmUgSVNIUCh4 KSAgICAoeCA9PSBUVF9IUFRFUk0gfHwgeCA9PSBUVF9IUDI2MjEpCi0jZGVmaW5lIElTSFBURVJN KHgpICh4ID09IFRUX0hQVEVSTSkKLSNkZWZpbmUgSVNWSVAoeCkgICAoeCA9PSBUVF9WSVA3ODA5 KQotI2RlZmluZSBJUzk3ODAxKHgpICh4ID09IFRUXzk3ODAxKQotI2RlZmluZSBJU0hGVCh4KSAg ICh4ID09IFRUX0hGVCB8fCB4ID09IFRUX0FJWFRFUk0pCi0jZGVmaW5lIElTQUlYVEVSTSh4KSAo eCA9PSBUVF9BSVhURVJNKQotI2RlZmluZSBJU1RFSyh4KSAgICh4ID09IFRUX1RFSzQwKQotI2Rl ZmluZSBJU1ZUTlQoeCkgICh4ID09IFRUX1ZUTlQpCi0jZGVmaW5lIElTQURNM0EoeCkgKHggPT0g VFRfQURNM0EpCi0jZGVmaW5lIElTQURNNSh4KSAgKHggPT0gVFRfQURNNSkKLSNlbmRpZiAvKiBP UzIgKi8KLQotI2RlZmluZSAgIFhZVENTICAyICAgICAgLyogIFRlcm1pbmFsIENoYXJhY3RlciBT ZXQgKi8KLSNkZWZpbmUgICBYWVRTTyAgMwkvKiAgVGVybWluYWwgU2hpZnQtSW4vU2hpZnQtT3V0 ICovCi0jZGVmaW5lICAgWFlUTkwgIDQgICAgICAvKiAgVGVybWluYWwgbmV3bGluZSBtb2RlICov Ci0jaWZkZWYgT1MyCi0jZGVmaW5lICAgWFlUQ09MIDUgICAgICAvKiAgVGVybWluYWwgY29sb3Jz ICovCi0jZW5kaWYgLyogT1MyICovCi0jZGVmaW5lICAgWFlURUMgIDYJLyogIFRlcm1pbmFsIGVj aG8gPSBkdXBsZXggPSBsb2NhbC1lY2hvICovCi0jaWZkZWYgT1MyCi0jZGVmaW5lICAgWFlUQ1VS IDcJLyogIFRlcm1pbmFsIGN1cnNvciAqLwotI2RlZmluZSAgICAgVFRDX1VMSU5FIDAKLSNkZWZp bmUgICAgIFRUQ19IQUxGICAxCi0jZGVmaW5lICAgICBUVENfQkxPQ0sgMgotI2RlZmluZSAgIFhZ VEFSUiA4CS8qICBUZXJtaW5hbCBhcnJvdy1rZXkgbW9kZSAqLwotI2RlZmluZSAgIFhZVEtQRCA5 ICAgICAgLyogIFRlcm1pbmFsIGtleXBhZCBtb2RlICovCi0jZGVmaW5lICAgIFRUS19OT1JNIDAg ICAvKiAgICBOb3JtYWwgbW9kZSBmb3IgYXJyb3cgLyBrZXlhZCBrZXlzICovCi0jZGVmaW5lICAg IFRUS19BUFBMIDEgICAvKiAgICBBcHBsaWNhdGlvbiBtb2RlIGZvciBhcnJvdyAvIGtleWFkIGtl eXMgKi8KLSNkZWZpbmUgICBYWVRXUlAgMTAgICAgIC8qICBUZXJtaW5hbCB3cmFwICovCi0jZW5k aWYgLyogT1MyICovCi0jZGVmaW5lICAgWFlUQ1JEIDExCS8qICBUZXJtaW5hbCBDUi1kaXNwbGF5 ICovCi0jZGVmaW5lICAgWFlUQU5TIDEyCS8qICBUZXJtaW5hbCBhbnN3ZXJiYWNrICovCi0jaWZk ZWYgT1MyCi0jZGVmaW5lICAgWFlTQ1JTIDEzICAgICAvKiAgVGVybWluYWwgc2Nyb2xsYmFjayBi dWZmZXIgc2l6ZSAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2RlZmluZSAgIFhZVEFQQyAxNAkvKiAg VGVybWluYWwgQVBDICovCi0jaWZkZWYgT1MyCi0jZGVmaW5lICAgWFlUQkVMIDE1ICAgICAvKiAg VGVybWluYWwgQmVsbCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2RlZmluZSAgIFhZVERFQiAxNgkv KiAgVGVybWluYWwgRGVidWcgKi8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgICBYWVRST0wgMTcgICAg IC8qICBUZXJtaW5hbCBSb2xsYmFjayAqLwotI2RlZmluZSAgICAgVFRSX09WRVIgICAwICAvKiAg Um9sbGJhY2sgT3ZlcndyaXRlICovCi0jZGVmaW5lICAgICBUVFJfSU5TRVJUIDEgIC8qICBSb2xs YmFjayBJbnNlcnQgKi8KLSNkZWZpbmUgICAgIFRUUl9LRVlTICAgMiAgLyogIEtleXN0cm9rZXMg Ki8KLSNkZWZpbmUgICAgICAgVFRSS19JR04gMCAgLyogICAgSWdub3JlICovCi0jZGVmaW5lICAg ICAgIFRUUktfUlNUIDIgIC8qICAgIFJlc3RvcmUgYW5kIFNlbmQgKi8KLSNkZWZpbmUgICAgICAg VFRSS19TTkQgMSAgLyogICAgU2VuZCAqLwotI2RlZmluZSAgIFhZVENUUyAxOCAgICAgLyogIFRl cm1pbmFsIFRyYW5zbWl0LVRpbWVvdXQgKi8KLSNkZWZpbmUgICBYWVRDUEcgMTkgICAgIC8qICBU ZXJtaW5hbCBDb2RlIFBhZ2UgKi8KLSNpZmRlZiBDT01NRU5UCi0jZGVmaW5lICAgWFlUSENVIDIw ICAgICAvKiAgVGVybWluYWwgSGlkZS1DdXJzb3IgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0j ZGVmaW5lICAgWFlUUEFDIDIxCSAgICAvKiAgVGVybWluYWwgT3V0cHV0LVBhY2luZyAqLwotI2Rl ZmluZSAgIFhZVE1PVSAyMgkgICAgLyogIFRlcm1pbmFsIE1vdXNlICovCi0jZW5kaWYgLyogT1My ICovCi0jZGVmaW5lICAgWFlUSElHIDIzICAgICAvKiAgVGVybWluYWwgV2lkdGggKi8KLSNkZWZp bmUgICBYWVRXSUQgMjQgICAgIC8qICBUZXJtaW5hbCBIZWlnaHQgKi8KLSNpZmRlZiBPUzIKLSNk ZWZpbmUgICBYWVRVUEQgMjUgICAgIC8qICBUZXJtaW5hbCBTY3JlZW4tdXBkYXRlICovCi0jZGVm aW5lICAgIFRUVV9GQVNUIDAgICAvKiAgICAgRkFTVCBidXQgamVya3kgKi8KLSNkZWZpbmUgICAg VFRVX1NNT09USCAxIC8qICAgICBTTU9PVEggYnV0IHNsb3cgKi8KLSNkZWZpbmUgICBYWVRGT04g MjYgICAgIC8qICBUZXJtaW5hbCBGdWxsIHNjcmVlbiBGb250ICovCi0jZGVmaW5lICAgIFRURl9S T00gICAgMCAvKiAgICAgUk9NIGZvbnQgKi8KLSNkZWZpbmUgICAgVFRGX0NZMSAgICAxIC8qICAg ICBDWVJJTEwxIGZvbnQgKi8KLSNkZWZpbmUgICAgVFRGX0NZMiAgICAyIC8qICAgICBDWVJJTEwy IGZvbnQgKi8KLSNkZWZpbmUgICAgVFRGX0NZMyAgICAzIC8qICAgICBDWVJJTEwzIGZvbnQgKi8K LSNkZWZpbmUgICAgVFRGXzExMSAgMTExIC8qICAgICBDUDExMSBmb250ICovCi0jZGVmaW5lICAg IFRURl8xMTIgIDExMiAvKiAgICAgQ1AxMTIgZm9udCAqLwotI2RlZmluZSAgICBUVEZfMTEzICAx MTMgLyogICAgIENQMTEzIGZvbnQgKi8KLSNkZWZpbmUgICAgVFRGXzQzNyAgNDM3IC8qICAgICBD UDQzNyBmb250ICovCi0jZGVmaW5lICAgIFRURl84NTAgIDg1MCAvKiAgICAgQ1A4NTAgZm9udCAq LwotI2RlZmluZSAgICBUVEZfODUxICA4NTEgLyogICAgIENQODUxIGZvbnQgKi8KLSNkZWZpbmUg ICAgVFRGXzg1MiAgODUyIC8qICAgICBDUDg1MiBmb250ICovCi0jZGVmaW5lICAgIFRURl84NTMg IDg1MyAvKiAgICAgQ1A4NTMgZm9udCAqLwotI2RlZmluZSAgICBUVEZfODYwICA4NjAgLyogICAg IENQODYwIGZvbnQgKi8KLSNkZWZpbmUgICAgVFRGXzg2MSAgODYxIC8qICAgICBDUDg2MSBmb250 ICovCi0jZGVmaW5lICAgIFRURl84NjIgIDg2MiAvKiAgICAgQ1A4NjIgZm9udCAqLwotI2RlZmlu ZSAgICBUVEZfODYzICA4NjMgLyogICAgIENQODYzIGZvbnQgKi8KLSNkZWZpbmUgICAgVFRGXzg2 NCAgODY0IC8qICAgICBDUDg2NCBmb250ICovCi0jZGVmaW5lICAgIFRURl84NjUgIDg2NSAvKiAg ICAgQ1A4NjUgZm9udCAqLwotI2RlZmluZSAgICBUVEZfODY2ICA4NjYgLyogICAgIENQODY2IGZv bnQgKi8KLSNkZWZpbmUgICAgVFRGXzg4MCAgODgwIC8qICAgICBDUDg4MCBmb250ICovCi0jZGVm aW5lICAgIFRURl84ODEgIDg4MSAvKiAgICAgQ1A4ODEgZm9udCAqLwotI2RlZmluZSAgICBUVEZf ODgyICA4ODIgLyogICAgIENQODgyIGZvbnQgKi8KLSNkZWZpbmUgICAgVFRGXzg4MyAgODgzIC8q ICAgICBDUDg4MyBmb250ICovCi0jZGVmaW5lICAgIFRURl84ODQgIDg4NCAvKiAgICAgQ1A4ODQg Zm9udCAqLwotI2RlZmluZSAgICBUVEZfODg1ICA4ODUgLyogICAgIENQODg1IGZvbnQgKi8KLSNk ZWZpbmUgICBYWVRWQ0ggMjcgICAgIC8qIFNFVCBURVJNSU5BTCBWSURFTy1DSEFOR0UgKi8KLSNk ZWZpbmUgICAgVFZDX0RJUyAgIDAgIC8qICAgICBESVNBQkxFRCAqLwotI2RlZmluZSAgICBUVkNf RU5BICAgMSAgLyogICAgIEVOQUJMRUQgICovCi0jZGVmaW5lICAgIFRWQ19XOTUgICAyICAvKiAg ICAgV0lOOTUtU0FGRSAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2RlZmluZSAgIFhZVEFVVE9ETCAy OCAgLyogU0VUIFRFUk1JTkFMIEFVVE9ET1dOTE9BRCAqLwotI2RlZmluZSAgICBUQURfT0ZGICAg ICAwIC8qICAgIE9GRiAqLwotI2RlZmluZSAgICBUQURfT04gICAgICAxIC8qICAgIE9OICAqLwot I2RlZmluZSAgICBUQURfSyAgICAgICAyIC8qICAgIEtFUk1JVCAqLwotI2RlZmluZSAgICBUQURf WiAgICAgICAzIC8qICAgIFpNT0RFTSAqLwotI2RlZmluZSAgICBUQURfWF9TVFIgICAgIDAgLyog ICAgU1RSSU5HICovCi0jZGVmaW5lICAgIFRBRF9YX0RFVEVDVCAgMSAvKiAgICBERVRFQ1RJT04g KCBQQUNLRVQsIFNUUklORyApICovCi0jZGVmaW5lICAgIFRBRF9YX0MwICAgICAgMiAvKiAgICBD MCBDT05GTElDVFMgKi8KLSNkZWZpbmUgICAgVEFEX0VSUiAgICAgNCAvKiAgICBFUlJPUiB7IFNU T1AsIENPTlRJTlVFIH0gKi8KLSNkZWZpbmUgICAgVEFEX0FTSyAgICAgNSAvKiAgICBBU0sgKGRp YWxvZykgKi8KLSNkZWZpbmUgICBYWVRBVVRPVUwgMjkgIC8qIFNFVCBURVJNSU5BTCBBVVRPVVBM T0FEICAgKi8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgICBYWVRBVFRCVUcgMzAgIC8qIFNFVCBURVJN IEFUVFItQlVHICovCi0jZGVmaW5lICAgWFlUU1RBVCAgIDMxICAvKiBTRVQgVEVSTSBTVEFUVVNM SU5FICovCi0jZW5kaWYgLyogT1MyICovCi0jZGVmaW5lICAgWFlURVNDICAgIDMyICAvKiBTRVQg VEVSTSBFU0NBUEUtQ0hBUkFDVEVSICovCi0jZGVmaW5lICAgWFlUQ1RSTCAgIDMzICAvKiBTRVQg VEVSTSBDT05UUk9MUyAqLwotI2lmZGVmIE9TMgotI2RlZmluZSAgIFhZVEFUVFIgICAzNCAgLyog U0VUIFRFUk0gQVRUUklCVVRFIHJlcHJlc2VudGF0aW9uICovCi0jZGVmaW5lICAgWFlUU0dSQyAg IDM1ICAvKiBTRVQgVEVSTSBTR1JDT0xPUlMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNkZWZpbmUg ICBYWVRMQ1MgICAgMzYgIC8qIFNFVCBURVJNIExPQ0FMLUNIQVJBQ1RFUi1TRVQgKi8KLSNkZWZp bmUgICBYWVRSQ1MgICAgMzcgIC8qIFNFVCBURVJNIFJFTU9URS1DSEFSQUNURVItU0VUICovCi0j ZGVmaW5lICAgWFlUVU5JICAgIDM4ICAvKiBTRVQgVEVSTSBVTklDT0RFICovCi0jZGVmaW5lICAg WFlUS0VZICAgIDM5ICAvKiBTRVQgVEVSTSBLRVkgKi8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgICBY WVRTRU5EICAgNDAgIC8qIFNFVCBURVJNIFNFTkQtREFUQSAqLwotI2RlZmluZSAgIFhZVFNFT0Ig ICA0MSAgLyogU0VUIFRFUk0gU0VORC1FTkQtT0YtQkxPQ0sgKi8KLSNkZWZpbmUgICBYWVRNQkVM ICAgNDIgIC8qIFNFVCBURVJNIE1BUkdJTi1CRUxMICovCi0jZW5kaWYgLyogT1MyICovCi0jZGVm aW5lICAgWFlUSURMRSAgIDQzICAvKiBTRVQgVEVSTSBJRExFLVNFTkQgKi8KLSNpZmRlZiBPUzIK LSNkZWZpbmUgICBYWVRLQk1PRCAgNDQgIC8qIFNFVCBURVJNIEtFWUJPQVJELU1PREUgKi8KLSNk ZWZpbmUgICBYWVRVTlggICAgNDUgIC8qIFNFVCBURVJNIFVOSVgtTU9ERSAoREcpICovCi0jZGVm aW5lICAgWFlUQVNDUkwgIDQ2ICAvKiBTRVQgVEVSTSBBVVRPU0NST0xMICovCi0jZGVmaW5lICAg WFlUQVBBR0UgIDQ3ICAvKiBTRVQgVEVSTSBBVVRPUEFHRSAqLwotI2VuZGlmIC8qIE9TMiAqLwot I2RlZmluZSAgIFhZVFJJR0dFUiA0OCAgLyogU0VUIFRFUk0gVFJJR0dFUiAqLwotI2lmZGVmIE9T MgotI2RlZmluZSAgIFhZVFBDVEVSTSA0OSAgLyogU0VUIFRFUk0gUENURVJNICovCi0jZGVmaW5l ICAgWFlUT1BUSSAgIDUwICAvKiBTRVQgVEVSTSBTQ1JFRU4tT1BUSU1JWkUgKi8KLSNkZWZpbmUg ICBYWVRTQ05NICAgNTEgIC8qIFNFVCBURVJNIFNDUkVFTi1NT0RFIChERUNTQ05NKSAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotI2RlZmluZSAgIFhZVFBSTiAgICA1MiAgLyogU0VUIFRFUk0gUFJJTlQg e0FVVE8sIENPUFksIE9GRn0gKi8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgICBYWVRTQUMgICAgNTMg IC8qIFNFVCBURVJNIFNQQUNJTkctQVRUUklCVVRFLUNIQVJBQ1RFUiAoaW52KSAqLwotI2RlZmlu ZSAgIFhZVFNOSVBNICA1NCAgLyogU0VUIFRFUk0gU05JLUFVVE9ST0xMICovCi0jZGVmaW5lICAg WFlUU05JU00gIDU1ICAvKiBTRVQgVEVSTSBTTkktU0NST0xMTU9ERSAqLwotI2RlZmluZSAgIFhZ VEtCREdMICA1NiAgLyogU0VUIFRFUk0gS0JELUZPTExPV1MtR0wvR1IgKi8KLSNkZWZpbmUgICBY WVRWVExORyAgNTcgIC8qIFNFVCBURVJNIFZULUxBTkdVQUdFICovCi0jZGVmaW5lICAgICBWVExf Tk9SVEhfQU0gIDEKLSNkZWZpbmUgICAgIFZUTF9CUklUSVNIICAgMgotI2RlZmluZSAgICAgVlRM X0JFTEdJQU4gICAzCi0jZGVmaW5lICAgICBWVExfRlJfQ0FOICAgIDQKLSNkZWZpbmUgICAgIFZU TF9EQU5JU0ggICAgNQotI2RlZmluZSAgICAgVlRMX0ZJTk5JU0ggICA2Ci0jZGVmaW5lICAgICBW VExfR0VSTUFOICAgIDcKLSNkZWZpbmUgICAgIFZUTF9EVVRDSCAgICAgOAotI2RlZmluZSAgICAg VlRMX0lUQUxJQU4gICA5Ci0jZGVmaW5lICAgICBWVExfU1dfRlIgICAgMTAKLSNkZWZpbmUgICAg IFZUTF9TV19HUiAgICAxMQotI2RlZmluZSAgICAgVlRMX1NXRURJU0ggIDEyCi0jZGVmaW5lICAg ICBWVExfTk9SV0VHSUEgMTMKLSNkZWZpbmUgICAgIFZUTF9GUkVOQ0ggICAxNAotI2RlZmluZSAg ICAgVlRMX1NQQU5JU0ggIDE1Ci0jZGVmaW5lICAgICBWVExfUE9SVFVHRVMgMTYKLSNkZWZpbmUg ICAgIFZUTF9IRUJSRVcgICAxOQotI2RlZmluZSAgICAgVlRMX0dSRUVLICAgIDIyCi0jZGVmaW5l ICAgICBWVExfQ0FOQURJQU4gMjgKLSNkZWZpbmUgICAgIFZUTF9UVVJLX1EgICAyOQotI2RlZmlu ZSAgICAgVlRMX1RVUktfRiAgIDMwCi0jZGVmaW5lICAgICBWVExfSFVOR0FSSUEgMzEKLSNkZWZp bmUgICAgIFZUTF9TTE9WQUsgICAzMwotI2RlZmluZSAgICAgVlRMX0NaRUNIICAgIDM0Ci0jZGVm aW5lICAgICBWVExfUE9MSVNIICAgMzUKLSNkZWZpbmUgICAgIFZUTF9ST01BTklBTiAzNgotI2Rl ZmluZSAgICAgVlRMX1NDUyAgICAgIDM4Ci0jZGVmaW5lICAgICBWVExfUlVTU0lBTiAgMzkKLSNk ZWZpbmUgICAgIFZUTF9MQVRJTl9BTSA0MAotI2RlZmluZSAgIFhZVFZUTlJDICA1OCAgLyogU0VU IFRFUk0gVlQtTlJDLU1PREUgKi8KLSNkZWZpbmUgICBYWVRTTklDQyAgNTkgIC8qIFNFVCBURVJN IFNOSS1DSC5DT0RFICovCi0jZGVmaW5lICAgWFlUU05JRlYgIDYwICAvKiBTRVQgVEVSTSBTTkkt RklSTVdBUkUtVkVSU0lPTlMgKi8KLSNkZWZpbmUgICBYWVRVUkxISSAgNjEgIC8qIFNFVCBURVJN IFVSTC1ISUdITElHSFQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNkZWZpbmUgICBYWVRJVE1PICAg NjIgIC8qIFNFVCBURVJNIElETEUtVElNRU9VVCAqLwotI2RlZmluZSAgIFhZVElBQ1QgICA2MyAg LyogU0VUIFRFUk0gSURMRS1BQ1RJT04gICovCi0jZGVmaW5lICAgWFlUTFNQICAgIDY0ICAvKiBT RVQgVEVSTSBMSU5FLVNQQUNJTkcgKi8KLSNkZWZpbmUgICBYWVRMRkQgICAgNjUJLyogU0VUIFRF Uk0gTEYtRElTUExBWSAgICovCi0KLSNkZWZpbmUgWFlBVFRSIDM0ICAgICAgIC8qIEF0dHJpYnV0 ZSBwYWNrZXRzICAqLwotI2RlZmluZSBYWVNFUlYgMzUJLyogU2VydmVyIHBhcmFtZXRlcnMgICov Ci0jZGVmaW5lICAgWFlTRVJUIDAgICAgICAvKiAgU2VydmVyIHRpbWVvdXQgICAgKi8KLSNkZWZp bmUgICBYWVNFUkQgMQkvKiAgU2VydmVyIGRpc3BsYXkgICAgKi8KLSNkZWZpbmUgICBYWVNFUkkg MiAgICAgIC8qICBTZXJ2ZXIgaWRsZSAgICAgICAqLwotI2RlZmluZSAgIFhZU0VSUCAzCS8qICBT ZXJ2ZXIgZ2V0LXBhdGggICAqLwotI2RlZmluZSAgIFhZU0VSTCA0CS8qICBTZXJ2ZXIgbG9naW4g ICAgICAqLwotI2RlZmluZSAgIFhZU0VSQyA1CS8qICBTZXJ2ZXIgQ0QtTWVzc2FnZSAqLwotI2Rl ZmluZSAgIFhZU0VSSyA2CS8qICBTZXJ2ZXIga2VlcGFsaXZlICAqLwotI2RlZmluZSBYWVdJTkQg MzYgICAgICAgLyogV2luZG93IHNpemUgKi8KLSNkZWZpbmUgWFlYRkVSIDM3ICAgICAgIC8qIFRy YW5zZmVyICovCi0jZGVmaW5lICAgWFlYX0NBTiAwCS8qICAgQ2FuY2VsbGF0aW9uICAqLwotI2Rl ZmluZSAgIFhZWF9DU0UgMQkvKiAgIENoYXJhY3Rlci1TZXQgKi8KLSNkZWZpbmUgICBYWVhfTFNI IDIJLyogICBMb2NraW5nLVNoaWZ0ICovCi0jZGVmaW5lICAgWFlYX1BSTyAzCS8qICAgUHJvdG9j b2wgICAgICAqLwotI2RlZmluZSAgIFhZWF9NT0QgNAkvKiAgIE1vZGUgICAgICAgICAgKi8KLSNk ZWZpbmUgICBYWVhfRElTIDUJLyogICBEaXNwbGF5ICAgICAgICovCi0jZGVmaW5lICAgWFlYX1NM TyA2CS8qICAgU2xvdy1zdGFydCAgICAqLwotI2RlZmluZSAgIFhZWF9DUkMgNwkvKiAgIENSQyBj YWxjdWxhdGlvbiAqLwotI2RlZmluZSAgIFhZWF9CRUwgOAkvKiAgIEJlbGwgKi8KLSNkZWZpbmUg ICBYWVhfUElQIDkJLyogICBQaXBlcyAqLwotI2RlZmluZSAgIFhZWF9JTlQgMTAgICAgLyogICBJ bnRlcnJ1cHRpb24gKi8KLSNkZWZpbmUgICBYWVhfWExBIDExICAgIC8qICAgKGNoYXJhY3Rlci1z ZXQpIFRyYW5zbGF0aW9uIE9uL09mZiAqLwotI2RlZmluZSAgIFhZWF9NU0cgMTIJLyogICBNZXNz YWdlICovCi0jZGVmaW5lICAgWFlYX1JQVCAxMwkvKiAgIFJlcG9ydCAqLwotI2RlZmluZSBYWUxB TkcgMzggICAgICAgLyogTGFuZ3VhZ2UgKi8KLSNkZWZpbmUgWFlDT1VOIDM5ICAgICAgIC8qIENv dW50ICovCi0jZGVmaW5lIFhZVEFLRSA0MCAgICAgICAvKiBUYWtlICovCi0jZGVmaW5lIFhZVU5D UyA0MSAgICAgICAvKiBVbmtub3duLWNoYXJhY3Rlci1zZXQgKi8KLSNkZWZpbmUgWFlLRVkgIDQy ICAgICAgIC8qIEtleSAqLwotI2RlZmluZSBYWU1BQ1IgNDMgICAgICAgLyogTWFjcm8gKi8KLSNk ZWZpbmUgWFlIT1NUIDQ0ICAgICAgIC8qIEhvc3RuYW1lIG9uIG5ldHdvcmsgKi8KLSNkZWZpbmUg WFlORVQgIDQ1ICAgICAgIC8qIFNFVCBORVRXT1JLIHRoaW5ncyAqLwotCi0jZGVmaW5lIFhZTkVU X0QgOTkJLyogTkVUV09SSyBESVJFQ1RPUlkgKi8KLSNkZWZpbmUgWFlORVRfVCAxMDAJLyogTkVU V09SSyBUWVBFICovCi0KLSNkZWZpbmUgWFlDQVJSIDQ2CS8qIENhcnJpZXIgKi8KLSNkZWZpbmUg WFlYTUlUIDQ3ICAgICAgIC8qIFRyYW5zbWl0ICovCi0KLSNkZWZpbmUgWFlESUFMIDQ4ICAgICAg IC8qIERpYWwgb3B0aW9ucyAqLwotCi0vKiBBbmQgbm93IHdlIGludGVycnVwdCB0aGUgZmxvdyB0 byBicmluZyB5b3UgbG90cyBvZiBzdHVmZiBhYm91dCBkaWFsaW5nICovCi0KLSNpZm5kZWYgTUFY VE9MTEZSRUUJLyogTWF4aW11bSBudW1iZXIgb2YgdG9sbC1mcmVlIGFyZWEgY29kZXMgKi8KLSNk ZWZpbmUgTUFYVE9MTEZSRUUgOAotI2VuZGlmIC8qIE1BWFRPTExGUkVFICovCi0KLSNpZm5kZWYg TUFYVFBDQwkJLyogTWF4aW11bSBUb25lIG9yIFB1bHNlIGRpYWxpbmcgY291bnRyaWVzICovCi0j ZGVmaW5lIE1BWFRQQ0MgMTYwCi0jZW5kaWYgLyogTUFYVFBDQyAqLwotCi0jaWZuZGVmIE1BWFBC WEVYQ0gJLyogTWF4aW11bSBudW1iZXIgb2YgUEJYIGV4Y2hhbmdlcyAqLwotI2RlZmluZSBNQVhQ QlhFWENIIDgKLSNlbmRpZiAvKiBNQVhQQlhFWENIICovCi0KLSNpZm5kZWYgTUFYTE9DQUxBQwot I2RlZmluZSBNQVhMT0NBTEFDIDMyCi0jZW5kaWYgLyogTUFYTE9DQUxBQyAqLwotCi0jaWZuZGVm IE1BWEROVU1TCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgTUFYRERJUiAzMgkvKiBNYXhpbXVt IG51bWJlciBvZiBkaWFsaW5nIGRpcmVjdG9yaWVzICovCi0jZGVmaW5lIE1BWEROVU1TIDQwOTUJ LyogTWF4IG51bWJlcnMgdG8gZmV0Y2ggZnJvbSBkaWFsaW5nIGRpcmVjdG9yaWVzICovCi0jZWxz ZQotI2RlZmluZSBNQVhERElSIDEyCi0jZGVmaW5lIE1BWEROVU1TIDEwMjQKLSNlbmRpZiAvKiBC SUdCVUZPSyAqLwotI2VuZGlmIC8qIE1BWEROVU1TICovCi0vKgotICBJTVBPUlRBTlQ6IEluIDVB KDE5MiksIHRoZSBvbGQgU0VUIERJQUwgY29tbWFuZCB3YXMgc3BsaXQgaW50byB0d28gY29tbWFu ZHM6Ci0gIFNFVCBNT0RFTSAoZm9yIG1vZGVtLXJlbGF0ZWQgcGFyYW1ldGVycykgYW5kIFNFVCBE SUFMIChmb3IgZGlhbGluZyBpdGVtcykuCi0gIFRvIHByZXNlcnZlIHRoZSBvbGQgZm9ybWF0cywg ZXRjLCBpbnZpc2libHkgd2Uga2VlcCBvbmUgc3ltYm9sIHNwYWNlIGZvcgotICBib3RoIGNvbW1h bmRzLgotKi8KLSNkZWZpbmUgIFhZREhVUCAgMAkvKiAgIERpYWwgSGFuZ3VwICovCi0jZGVmaW5l ICBYWURJTkkgIDEgICAgICAvKiAgIE1PREVNIChkaWFsKSBJbml0aWFsaXphdGlvbiBzdHJpbmcg Ki8KLSNkZWZpbmUgIFhZREtTUCAgMiAgICAgIC8qICAgTU9ERU0gKGRpYWwpIEtlcm1pdC1TcG9v ZiAqLwotI2RlZmluZSAgWFlEVE1PICAzICAgICAgLyogICBEaWFsIFRpbWVvdXQgKi8KLSNkZWZp bmUgIFhZRERQWSAgNCAgICAgIC8qICAgRGlhbCBEaXNwbGF5ICovCi0jZGVmaW5lICBYWURTUEQg IDUgICAgICAvKiAgIERpYWwgU3BlZWQgbWF0Y2hpbmcgKi8KLSNkZWZpbmUgIFhZRE1OUCAgNgkv KiAgIE1PREVNIChkaWFsKSBNTlAgbmVnb3RpYXRpb24gZW5hYmxlZCAob2Jzb2xldGUpICovCi0j ZGVmaW5lICBYWURFQyAgIDcJLyogICBNT0RFTSAoZGlhbCkgZXJyb3IgY29ycmVjdGlvbiBlbmFi bGVkICovCi0jZGVmaW5lICBYWUREQyAgIDggICAgICAvKiAgIE1PREVNIChkaWFsKSBjb21wcmVz c2lvbiBlbmFibGVkICovCi0jZGVmaW5lICBYWURIQ00gIDkgICAgICAvKiAgIE1PREVNIChkaWFs KSBoYW5ndXAtc3RyaW5nIChtb3ZlZCBlbHNld2hlcmUpICovCi0jZGVmaW5lICBYWURESVIgMTAJ LyogICBEaWFsIGRpcmVjdG9yeSAqLwotI2RlZmluZSAgWFlERElBIDExCS8qICAgTU9ERU0gKGRp YWwpIGRpYWwtY29tbWFuZCAqLwotI2RlZmluZSAgWFlETUhVIDEyCS8qICAgTU9ERU0gSEFOR1VQ IChkaWFsIG1vZGVtLWhhbmd1cCkgKi8KLQotI2lmbmRlZiBERUZNREhVUAkvKiBEZWZhdWx0IE1P REVNIEhBTkdVUC1NRVRIT0QgKi8KLSNkZWZpbmUgREVGTURNSFVQIDEJLyogMCA9IFJTMjMyLCAx ID0gbW9kZW0gY29tbWFuZCAqLwotI2VuZGlmIC8qIERFRk1ETUhVUCAqLwotCi0jZGVmaW5lICBY WUROUFIgMTMgICAgICAvKiAgIERpYWwgUFJFRklYICovCi0jZGVmaW5lICBYWURTVFIgMTQJLyog ICBNT0RFTSBDT01NQU5EIChkaWFsIHN0cmluZykgLi4uICovCi0KLSNkZWZpbmUgICBYWURTX0RD IDAJLyogICAgRGF0YSBjb21wcmVzc2lvbiAqLwotI2RlZmluZSAgIFhZRFNfRUMgMQkvKiAgICBF cnJvciBjb3JyZWN0aW9uICovCi0jZGVmaW5lICAgWFlEU19IVSAyICAgICAvKiAgICBIYW5ndXAg Y29tbWFuZCAqLwotI2RlZmluZSAgIFhZRFNfSFcgMyAgICAgLyogICAgSGFyZHdhcmUgZmxvdyBj b250cm9sICovCi0jZGVmaW5lICAgWFlEU19JTiA0ICAgICAvKiAgICBJbml0LXN0cmluZyAqLwot I2RlZmluZSAgIFhZRFNfTkYgNSAgICAgLyogICAgTm8gZmxvdyBjb250cm9sICovCi0jZGVmaW5l ICAgWFlEU19QWCA2ICAgICAvKiAgICBQcmVmaXggKG5vLCB0aGlzIGdvZXMgaW4gU0VUIERJQUwp ICovCi0jZGVmaW5lICAgWFlEU19TVyA3ICAgICAvKiAgICBTb2Z0d2FyZSBmbG93IGNvbnRyb2wg Ki8KLSNkZWZpbmUgICBYWURTX0RUIDggICAgIC8qICAgIFRvbmUgZGlhbGluZyBjb21tYW5kICov Ci0jZGVmaW5lICAgWFlEU19EUCA5ICAgICAvKiAgICBQdWxzZSBkaWFsaW5nIGNvbW1hbmQgKi8K LSNkZWZpbmUgICBYWURTX0FOIDEwICAgIC8qICAgIEF1dG9hbnN3ZXIgKi8KLSNkZWZpbmUgICBY WURTX1JTIDExICAgIC8qICAgIFJlc2V0ICovCi0jZGVmaW5lICAgWFlEU19NUyAxMiAgICAvKiAg ICBEaWFsIG1vZGUgc3RyaW5nICovCi0jZGVmaW5lICAgWFlEU19NUCAxMyAgICAvKiAgICBEaWFs IG1vZGUgcHJvbXB0ICovCi0jZGVmaW5lICAgWFlEU19TUCAxNAkvKiAgICBNb2RlbSBzcGVha2Vy ICovCi0jZGVmaW5lICAgWFlEU19WTyAxNQkvKiAgICBNb2RlbSBzcGVha2VyIHZvbHVtZSAqLwot I2RlZmluZSAgIFhZRFNfSUQgMTYJLyogICAgSWdub3JlIGRpYWx0b25lICovCi0jZGVmaW5lICAg WFlEU19JMiAxNwkvKiAgICBJbml0IHN0cmluZyAjMiAqLwotCi0jZGVmaW5lICAgWFlETV9BICA5 ICAgICAvKiAgICBNZXRob2Q6IEF1dG8gKi8KLSNkZWZpbmUgICBYWURNX0QgIDAgICAgIC8qICAg ICAgRGVmYXVsdCAqLwotI2RlZmluZSAgIFhZRE1fVCAgMiAgICAgLyogICAgICBUb25lICovCi0j ZGVmaW5lICAgWFlETV9QICAzICAgICAvKiAgICAgIFB1bHNlICovCi0KLSNkZWZpbmUgIFhZREZD ICAgMTUJLyogICBNT0RFTSAoZGlhbCkgZmxvdy1jb250cm9sICovCi0jZGVmaW5lICBYWURNVEgg IDE2CS8qICAgRGlhbCBtZXRob2QgKi8KLSNkZWZpbmUgIFhZREVTQyAgMTcgICAgIC8qICAgTU9E RU0gKGRpYWwpIGVzY2FwZS1jaGFyYWN0ZXIgKi8KLSNkZWZpbmUgIFhZRE1BWCAgMTgJLyogICBN T0RFTSAoZGlhbCkgbWF4aW11bSBpbnRlcmZhY2Ugc3BlZWQgKi8KLSNkZWZpbmUgIFhZRENBUCAg MTkgICAgIC8qICAgTU9ERU0gKGRpYWwpIGNhcGFiaWxpdGllcyAqLwotI2RlZmluZSAgWFlEVFlQ ICAyMAkvKiAgIE1PREVNIFRZUEUgKi8KLSNkZWZpbmUgIFhZRElOVCAgMjEJLyogICBESUFMIHJl dHJpZXMgKi8KLSNkZWZpbmUgIFhZRFJUTSAgMjIJLyogICBESUFMIHRpbWUgYmV0d2VlbiByZXRy aWVzICovCi0jZGVmaW5lICBYWUROQU0gIDIzCS8qICAgTU9ERU0gTkFNRSAqLwotI2RlZmluZSAg WFlETEFDICAyNAkvKiAgIERJQUwgKExPQ0FMLSlBUkVBLUNPREUgKi8KLSNkZWZpbmUgIFhZRE1D RCAgMjUJLyogICBNT0RFTSBDQVJSSUVSICovCi0KLSNkZWZpbmUgIFhZRENORiAgMjYJLyogICBE SUFMIENPTkZJUk1BVElPTiAqLwotI2RlZmluZSAgWFlEQ1ZUICAyNwkvKiAgIERJQUwgQ09OVkVS VC1ESVJFQ1RPUlkgKi8KLSNkZWZpbmUgIFhZRElYUCAgMjgJLyogICBESUFMIElOVEVSTkFUSU9O QUwtUFJFRklYICovCi0jZGVmaW5lICBYWURJWFMgIDI5CS8qICAgRElBTCBJTlRFUk5BVElPTkFM LVNVRkZJWCAqLwotI2RlZmluZSAgWFlETENDICAzMAkvKiAgIERJQUwgTE9DQUwtQ09VTlRSWS1D T0RFICovCi0jZGVmaW5lICBYWURMRFAgIDMxCS8qICAgRElBTCBMT05HLURJU1RBTkNFLVBSRUZJ WCAqLwotI2RlZmluZSAgWFlETERTICAzMgkvKiAgIERJQUwgTE9ORy1ESVNUQU5DRS1TVUZGSVgg Ki8KLSNkZWZpbmUgIFhZRFBYWCAgMzMJLyogICBESUFMIFBCWC1FWENIQU5HRSAqLwotI2RlZmlu ZSAgWFlEUFhJICAzNAkvKiAgIERJQUwgUEJYLUlOVEVSTkFMLVBSRUZJWCAqLwotI2RlZmluZSAg WFlEUFhPICAzNQkvKiAgIERJQUwgUEJYLU9VVFNJREUtUFJFRklYICovCi0jZGVmaW5lICBYWURT RlggIDM2CS8qICAgRElBTCBTVUZGSVggKi8KLSNkZWZpbmUgIFhZRFNSVCAgMzcJLyogICBESUFM IFNPUlQgKi8KLSNkZWZpbmUgIFhZRFRGQyAgMzgJLyogICBESUFMIFRPTEwtRlJFRS1BUkVBLUNP REUgKi8KLSNkZWZpbmUgIFhZRFRGUCAgMzkJLyogICBESUFMIFRPTEwtRlJFRS1QUkVGSVggKi8K LSNkZWZpbmUgIFhZRFRGUyAgNDAJLyogICBESUFMIFRPTEwtRlJFRS1TVUZGSVggKi8KLSNkZWZp bmUgIFhZRENPTiAgNDEgICAgIC8qICAgRElBTCBDT05ORUNUICovCi0jZGVmaW5lICBYWURSU1RS IDQyICAgICAvKiAgIERJQUwgUkVTVFJJQ1QgKi8KLSNkZWZpbmUgIFhZRFJTRVQgNDMgICAgIC8q ICAgTU9ERU0gUkVTRVQgKi8KLSNkZWZpbmUgIFhZRExDUCAgNDQJLyogICBESUFMIExPQ0FMLVBS RUZJWCAqLwotI2RlZmluZSAgWFlETENTICA0NQkvKiAgIERJQUwgTE9DQUwtU1VGRklYICovCi0j ZGVmaW5lICBYWURMTEFDIDQ2ICAgICAvKiAgIERJQUwgTEMtQVJFQS1DT0RFUyAqLwotI2RlZmlu ZSAgWFlERkxEICA0NwkvKiAgIERJQUwgRk9SQ0UgTE9ORy1ESVNUQU5DRSAqLwotI2RlZmluZSAg WFlEU1BLICA0OAkvKiAgIE1PREVNIFNQRUFLRVIgKi8KLSNkZWZpbmUgIFhZRFZPTCAgNDkJLyog ICBNT0RFTSBWT0xVTUUgKi8KLSNkZWZpbmUgIFhZRElEVCAgNTAJLyogICBJR05PUkUgRElBTFRP TkUgKi8KLSNkZWZpbmUgIFhZRFBBQyAgNTEJLyogICBQQUNJTkcgKi8KLSNkZWZpbmUgIFhZRE1B QyAgNTIgICAgIC8qICAgTUFDUk8gKi8KLSNkZWZpbmUgIFhZRFBVQ0MgNTMJLyogICBQVUxTRS1D T1VOVFJJRVMgKi8KLSNkZWZpbmUgIFhZRFRPQ0MgNTQJLyogICBUT05FLUNPVU5UUklFUyAqLwot I2RlZmluZSAgWFlEVEVTVCA1NQkvKiAgIFRFU1QgKi8KLQotI2RlZmluZSBYWUFfQ0lEICAgMQkv KiBTRVQgQU5TV0VSIENBTExFUi1JRCAqLwotI2RlZmluZSBYWUFfUk5HICAgMgkvKiBTRVQgQU5T V0VSIFJJTkdTICovCi0KLSNkZWZpbmUgWFlTRVNTIDQ5ICAgICAgIC8qIFNFVCBTRVNTSU9OIG9w dGlvbnMgKi8KLSNkZWZpbmUgWFlCVUYgIDUwICAgICAgIC8qIEJ1ZmZlciBsZW5ndGggKi8KLSNk ZWZpbmUgWFlCQUNLIDUxCS8qIEJhY2tncm91bmQgKi8KLSNkZWZpbmUgWFlERkxUIDUyICAgICAg IC8qIERlZmF1bHQgKi8KLSNkZWZpbmUgWFlEQkwgIDUzCS8qIERvdWJsZSAqLwotI2RlZmluZSBY WUNNRCAgNTQgICAgICAgLyogQ09NTUFORCAqLwotI2RlZmluZSBYWUNBU0UgNTUgICAgICAgLyog Q2FzZSAqLwotI2RlZmluZSBYWUNPTVAgNTYgICAgICAgLyogQ29tcHJlc3Npb24gKi8KLSNkZWZp bmUgWFlYMjUgIDU3ICAgICAgIC8qIFguMjUgcGFyYW1ldGVyIChBTllYMjUpICovCi0jZGVmaW5l IFhZUEFEICA1OCAgICAgICAvKiBYLjMgUEFEIHBhcmFtZXRlciAoQU5ZWDI1KSAqLwotI2RlZmlu ZSBYWVdJTEQgNTkgICAgICAgLyogV2lsZGNhcmQgZXhwYW5zaW9uIG1ldGhvZCAqLwotCi0jZGVm aW5lIFdJTERfT0ZGICAwCS8qIFdpbGRjYXJkIGV4cGFuc2lvbiBvZmYgKi8KLSNkZWZpbmUgV0lM RF9PTiAgIDEJLyogV2lsZGNhcmQgZXhwYW5zaW9uIG9uICAqLwotI2RlZmluZSBXSUxEX0tFUiAg MgkvKiBXaWxkY2FyZCBleHBhbnNpb24gYnkgS2VybWl0ICovCi0jZGVmaW5lIFdJTERfU0hFICAz CS8qIFdpbGRjYXJkIGV4cGFuc2lvbiBieSBTaGVsbCAqLwotCi0jZGVmaW5lIFhZU1VTUCA2MCAg ICAgICAvKiBTdXNwZW5kICovCi0jZGVmaW5lIFhZTUFJTCA2MQkvKiBNYWlsLUNvbW1hbmQgKi8K LSNkZWZpbmUgWFlQUklOIDYyCS8qIFByaW50LUNvbW1hbmQgKi8KLSNkZWZpbmUgWFlRVUlFIDYz CS8qIFF1aWV0ICovCi0jZGVmaW5lIFhZTENMRSA2NAkvKiBMb2NhbC1lY2hvICovCi0jZGVmaW5l IFhZU0NSSSA2NQkvKiBTQ1JJUFQgY29tbWFuZCBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIFhZTVNH UyA2NiAgICAgICAvKiBNRVNTQUdFcyBPTi9PRkYgKi8KLSNpZmRlZiBUTkNPREUKLSNkZWZpbmUg WFlURUwgIDY3CS8qIFNFVCBURUxORVQgcGFyYW1ldGVycyAqLwotI2RlZmluZSAgQ0tfVE5fRUMg MAkvKiAgVEVMTkVUIEVDSE8gKi8KLSNkZWZpbmUgIENLX1ROX1RUIDEJLyogIFRFTE5FVCBURVJN SU5BTC1UWVBFICovCi0jZGVmaW5lICBDS19UTl9OTCAyICAgICAvKiAgVEVMTkVUIE5FV0xJTkUt TU9ERSAqLwotI2RlZmluZSAgQ0tfVE5fQk0gMyAgICAgLyogIFRFTE5FVCBCSU5BUlktTU9ERSAq LwotI2RlZmluZSAgQ0tfVE5fQlVHIDQgICAgLyogIFRFTE5FVCBCVUcgKi8KLSNkZWZpbmUgIENL X1ROX0VOViA1ICAgIC8qICBURUxORVQgRU5WSVJPTk1FTlQgKi8KLSNkZWZpbmUgICAgVE5fRU5W X1VTUiAgMCAvKiAgICBWQVIgVVNFUiAqLwotI2RlZmluZSAgICBUTl9FTlZfSk9CICAxIC8qICAg IFZBUiBKT0IgKi8KLSNkZWZpbmUgICAgVE5fRU5WX0FDQ1QgMiAvKiAgICBWQVIgQUNDVCAqLwot I2RlZmluZSAgICBUTl9FTlZfUFJOVCAzIC8qICAgIFZBUiBQUklOVEVSICovCi0jZGVmaW5lICAg IFROX0VOVl9TWVMgIDQgLyogICAgVkFSIFNZU1RFTVRZUEUgKi8KLSNkZWZpbmUgICAgVE5fRU5W X0RJU1AgNSAvKiAgICBWQVIgRElTUExBWSAqLwotI2RlZmluZSAgICBUTl9FTlZfVVZBUiA2IC8q ICAgIFVTRVJWQVIgKi8KLSNkZWZpbmUgICAgVE5fRU5WX0xPQyAgNyAvKiAgICBVU0VSVkFSIExP Q0FUSU9OICovCi0jZGVmaW5lICAgIFROX0VOVl9PTiAgOTggLyogICAgT04gKGVuYWJsZWQpICov Ci0jZGVmaW5lICAgIFROX0VOVl9PRkYgOTkgLyogICAgT0ZGIChkaXNhYmxlZCkgKi8KLSNkZWZp bmUgIENLX1ROX0xPQyA2ICAgIC8qICBURUxORVQgTE9DQVRJT04gKi8KLSNkZWZpbmUgIENLX1RO X0FVICA3ICAgIC8qICBURUxORVQgQVVUSEVOVElDQVRJT04gKi8KLSNkZWZpbmUgICAgVE5fQVVf RldEICAgNCAvKiAgICBBVVRIIEZPUldBUkQgKi8KLSNkZWZpbmUgICAgVE5fQVVfVFlQICAgNSAv KiAgICBBVVRIIFRZUEUgKi8KLSNkZWZpbmUgICAgICBBVVRIX05PTkUgMCAvKiAgICAgIEFVVEgg Tk9ORSAqLwotI2RlZmluZSAgICAgIEFVVEhfS1JCNCAxIC8qICAgICAgQVVUSCBLZXJiZXJvcyBJ ViAqLwotI2RlZmluZSAgICAgIEFVVEhfS1JCNSAyIC8qICAgICAgQVVUSCBLZXJiZXJvcyBWICov Ci0jZGVmaW5lICAgICAgQVVUSF9TU0wgIDcgLyogICAgICBBVVRIIFNlY3VyZSBTb2NrZXRzIExh eWVyICovCi0jZGVmaW5lICAgICAgQVVUSF9UTFMgOTggLyogICAgICBBVVRIIFRyYW5zcG9ydCBM YXllciBTZWN1cml0eSAqLwotI2RlZmluZSAgICAgIEFVVEhfU1JQICA1IC8qICAgICAgQVVUSCBT ZWN1cmUgUmVtb3RlIFBhc3N3b3JkICovCi0jZGVmaW5lICAgICAgQVVUSF9OVExNIDE1IC8qICAg ICAgQVVUSCBOVCBMYW4gTWFuYWdlciAqLwotI2RlZmluZSAgICAgIEFVVEhfQVVUTyA5OSAvKiAg ICAgQVVUSCBBVVRPTUFUSUMgKi8KLSNkZWZpbmUgICAgVE5fQVVfSE9XICA4ICAvKiAgICBBVVRI IEhPVyBGTEFHICovCi0jZGVmaW5lICAgIFROX0FVX0VOQyAgOSAgLyogICAgQVVUSCBFTkNSWVBU IEZMQUcgKi8KLSNkZWZpbmUgIENLX1ROX0VOQyA4ICAgIC8qICBURUxORVQgRU5DUllQVElPTiAq LwotI2RlZmluZSAgICBUTl9FTl9UWVAgICA0IC8qICAgICAgRU5DUllQVCBUWVBFICovCi0jZGVm aW5lICAgIFROX0VOX1NUQVJUIDUgLyogICAgICBFTkNSWVBUIFNUQVJUICovCi0jZGVmaW5lICAg IFROX0VOX1NUT1AgIDYgLyogICAgICBFTkNSWVBUIFNUT1AgICovCi0jZGVmaW5lICBDS19UTl9J S1MgOSAgICAvKiAgVEVMTkVUIEtFUk1JVC1TRVJWRVIgKi8KLSNkZWZpbmUgIENLX1ROX1JFICAx MCAgIC8qICBURUxORVQgUkVNT1RFLUVDSE8gKi8KLSNkZWZpbmUgIENLX1ROX1RMUyAxMSAgIC8q ICBURUxORVQgU1RBUlRfVExTICovCi0jZGVmaW5lICBDS19UTl9YRCAgMTIgICAvKiAgVEVMTkVU IFhESVNQTE9DICovCi0jZGVmaW5lICBDS19UTl9OQVdTIDEzICAvKiAgVEVMTkVUIE5BV1MgKi8K LSNkZWZpbmUgIENLX1ROX1dBSVQgMTQgIC8qICBURUxORVQgV0FJVC1GT1ItTkVHT1RJQVRJT05T ICovCi0jZGVmaW5lICBDS19UTl9TR0EgIDE1ICAvKiAgVEVMTkVUIFNHQSAqLwotI2RlZmluZSAg Q0tfVE5fQ0xJRU5UIDE2ICAvKiBURUxORVQgQ0xJRU5UICovCi0jZGVmaW5lICBDS19UTl9TRVJW RVIgMTcgIC8qIFRFTE5FVCBTRVJWRVIgKi8KLSNkZWZpbmUgIENLX1ROX1BIUiAgICAxOCAgLyog VEVMTkVUIFBSQUdNQS1IRUFSVEJFQVQgKi8KLSNkZWZpbmUgIENLX1ROX1BMRyAgICAxOSAgLyog VEVMTkVUIFBSQUdNQS1MT0dPTiAqLwotI2RlZmluZSAgQ0tfVE5fUFNQICAgIDIwICAvKiBURUxO RVQgUFJBR01BLVNTUEkgKi8KLSNkZWZpbmUgIENLX1ROX1NBSyAgICAyMSAgLyogVEVMTkVUIElC TSBTQUsgKi8KLSNkZWZpbmUgIENLX1ROX0ZMVyAgICAyMiAgLyogVEVMTkVUIExGTE9XICovCi0j ZGVmaW5lICBDS19UTl9YRiAgICAgMjMgIC8qIFRFTE5FVCBUUkFOU0ZFUi1NT0RFICovCi0jZGVm aW5lICBDS19UTl9QVUlEICAgMjQgIC8qIFRFTE5FVCBQUk9NUFQtRk9SLVVTRVJJRCAqLwotI2Rl ZmluZSAgQ0tfVE5fTkUgICAgIDI1ICAvKiBURUxORVQgTk8tRU5DUllQVC1EVVJJTkctWEZFUiAq LwotI2RlZmluZSAgQ0tfVE5fQ1BDICAgIDI2ICAvKiBURUxORVQgQ09NLVBPUlQtQ09OVFJPTCAq LwotI2RlZmluZSAgQ0tfVE5fREIgICAgIDI3ICAvKiBURUxORVQgREVCVUcgKi8KLSNkZWZpbmUg IENLX1ROX0ZYICAgICAyOCAgLyogVEVMTkVUIEZPUldBUkRfWCAqLwotI2RlZmluZSAgQ0tfVE5f REwgICAgIDI5ICAvKiBURUxORVQgREVMQVktU0IgKi8KLSNkZWZpbmUgIENLX1ROX1NGVSAgICAz MCAgLyogVEVMTkVUIFNGVS1DT01QQVRJQklMSVRZICovCi0jZGVmaW5lICBDS19UTl9MT0cgICAg MzEgIC8qIFRFTE5FVCBMT0dPVVQgKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNkZWZpbmUgWFlP VVRQIDY4CS8qIE9VVFBVVCBjb21tYW5kIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgICBPVVRfUEFD IDAJLyogICBPVVRQVVQgUEFDSU5HICovCi0jZGVmaW5lICAgT1VUX0VTQyAxCS8qICAgT1VUUFVU IFNQRUNJQUwtRVNDQVBFUyAqLwotI2RlZmluZSBYWUVYSVQgIDY5CS8qIFNFVCBFWElUICovCi0j ZGVmaW5lIFhZUFJUUiAgNzAJLyogU0VUIFBSSU5URVIgKi8KLSNkZWZpbmUgWFlGUEFUSCA3MQkv KiBQQVRITkFNRSAqLwotCi0jaWZkZWYgT1MyCi0jZGVmaW5lIFhZTU9VU0UgNzIJLyogTU9VU0Ug U1VQUE9SVCAqLwotI2RlZmluZSAgWFlNX09OICAgICAwICAgLyogTW91c2UgT04vT0ZGICAgICAg ICAqLwotI2RlZmluZSAgWFlNX0JVVFRPTiAxICAgLyogRGVmaW5lIE1vdXNlIEV2ZW50cyAqLwot I2RlZmluZSAgWFlNX0NMRUFSICAyICAgLyogQ2xlYXIgTW91c2UgRXZlbnRzICAqLwotI2RlZmlu ZSAgWFlNX0RFQlVHICAzICAgLyogRGVidWcgTW9kZSBPTi9PRkYgKi8KLS8qIFRoZXNlIG11c3Qg bWF0Y2ggc2ltaWxhciBkZWZpbml0aW9ucyBpbiBja29rZXkuaCAqLwotI2RlZmluZSAgIFhZTV9C MSAwICAgICAgLyogTW91c2UgQnV0dG9uIE9uZSAqLwotI2RlZmluZSAgIFhZTV9CMiAxICAgICAg LyogTW91c2UgQnV0dG9uIFR3byAqLwotI2RlZmluZSAgIFhZTV9CMyAyICAgICAgLyogTW91c2Ug QnV0dG9uIFRocmVlICovCi0jZGVmaW5lICAgWFlNX0FMVCAgIDEgICAgIC8qIEFsdCAqLwotI2Rl ZmluZSAgIFhZTV9DVFJMICAyICAgICAvKiBDdHJsICovCi0jZGVmaW5lICAgWFlNX1NISUZUIDQg ICAgIC8qIFNoaWZ0ICovCi0jZGVmaW5lICAgWFlNX0MxICAgIDAgICAgIC8qIFNpbmdsZSBDbGlj ayAqLwotI2RlZmluZSAgIFhZTV9DMiAgICA4ICAgICAvKiBEb3VibGUgQ2xpY2sgKi8KLSNkZWZp bmUgICBYWU1fRFJBRyAgMTYgICAgLyogRHJhZyBFdmVudCAqLwotI2VuZGlmIC8qIE9TMiAqLwot Ci0jZGVmaW5lIFhZQkVMTCA3MyAgIC8qIEJFTEwgKi8KLQotI2lmZGVmIE9TMgotI2RlZmluZSBY WVBSVFkgICAgIDc0ICAgLyogVGhyZWFkIFByaW9yaXR5IExldmVsICovCi0jZGVmaW5lICAgWFlQ X0lETEUgIDEKLSNkZWZpbmUgICBYWVBfUkVHICAgMgotI2RlZmluZSAgIFhZUF9TUlYgICA0Ci0j ZGVmaW5lICAgWFlQX1JUUCAgIDMKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2RlZmluZSBYWUFMUk0g ICAgIDc1CS8qIFNFVCBBTEFSTSAqLwotI2RlZmluZSBYWVBST1RPICAgIDc2CS8qIFNFVCBQUk9U T0NPTCAqLwotI2RlZmluZSBYWVBSRUZJWCAgIDc3ICAgLyogU0VUIFBSRUZJWElORyAqLwotI2Rl ZmluZSBYWUxPR0lOICAgIDc4ICAgLyogTG9naW4gaW5mbyBmb3Igc2NyaXB0IHByb2dyYW1zLi4u ICovCi0KLSNkZWZpbmUgIExPR0lfVUlEICAgMAkvKiBVc2VyIElEICAqLwotI2RlZmluZSAgTE9H SV9QU1cgICAxCS8qIFBhc3N3b3JkICovCi0jZGVmaW5lICBMT0dJX1BSTSAgIDIJLyogUHJvbXB0 ICAgKi8KLQotI2RlZmluZSBYWVNUQVJUVVAgIDc5ICAgIC8qIFN0YXJ0dXAgZmlsZSAqLwotI2Rl ZmluZSBYWVRNUERJUiAgIDgwICAgIC8qIFRlbXBvcmFyeSBkaXJlY3RvcnkgKi8KLQotI2lmZGVm IE9TMgotI2RlZmluZSBYWVRBUEkgICAgIDgxICAgIC8qIE1pY3Jvc29mdCBUZWxlcGhvbmUgQVBJ IG9wdGlvbnMgKi8KLSNkZWZpbmUgICBYWVRBUElfQ0ZHICAgICAxICAvKiBUQVBJIENvbmZpZ3Vy ZS1MaW5lIERpYWxvZyAqLwotI2RlZmluZSAgIFhZVEFQSV9ESUFMICAgIDIgIC8qIFRBUEkgRGlh bGluZy1Qcm9wZXJ0aWVzIERpYWxvZyAqLwotI2RlZmluZSAgIFhZVEFQSV9MSU4gICAgIDMgIC8q IFRBUEkgTGluZSAqLwotI2RlZmluZSAgIFhZVEFQSV9MT0MgICAgIDQgIC8qIFRBUEkgTG9jYXRp b24gKi8KLSNkZWZpbmUgICBYWVRBUElfUEFTUyAgICA1ICAvKiBUQVBJIFBhc3N0aHJvdWdoICov Ci0jZGVmaW5lICAgWFlUQVBJX0NPTiAgICAgNiAgLyogVEFQSSBDb252ZXJzaW9ucyAqLwotI2Rl ZmluZSAgIFhZVEFQSV9MR0hUICAgIDcgIC8qIFRBUEkgTW9kZW0gTGlnaHRzICovCi0jZGVmaW5l ICAgWFlUQVBJX1BSRSAgICAgOCAgLyogVEFQSSBQcmUtZGlhbGluZyBUZXJtaW5hbCAqLwotI2Rl ZmluZSAgIFhZVEFQSV9QU1QgICAgIDkgIC8qIFRBUEkgUG9zdC1kaWFsaW5nIFRlcm1pbmFsICov Ci0jZGVmaW5lICAgWFlUQVBJX0lOQSAgICAxMCAgLyogVEFQSSBJbmFjdGl2aXR5IFRpbWVvdXQg Ki8KLSNkZWZpbmUgICBYWVRBUElfQk5HICAgIDExICAvKiBUQVBJIFdhaXQgZm9yIENyZWRpdCBD YXJkIFRvbmUgKi8KLSNkZWZpbmUgICBYWVRBUElfTUFOICAgIDEyICAvKiBUQVBJIE1hbnVhbCBE aWFsaW5nICovCi0jZGVmaW5lICAgWFlUQVBJX1VTRSAgICAxMyAgLyogVEFQSSBVc2UgTGluZSBD b25maWcgc2V0dGluZ3MgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIFRDUFNPQ0tFVAot I2RlZmluZSBYWVRDUCAgODIgICAgICAgLyogVENQIG9wdGlvbnMgKi8KLSNkZWZpbmUgIFhZVENQ X05PREVMQVkgICAxICAvKiBObyBEZWxheSAqLwotI2RlZmluZSAgWFlUQ1BfU0VOREJVRiAgIDIg IC8qIFNlbmQgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUgIFhZVENQX0xJTkdFUiAgICAzICAvKiBM aW5nZXIgKi8KLSNkZWZpbmUgIFhZVENQX1JFQ1ZCVUYgICA0ICAvKiBSZWNlaXZlIEJ1ZmZlciBT aXplICovCi0jZGVmaW5lICBYWVRDUF9LRUVQQUxJVkUgNSAgLyogS2VlcCBBbGl2ZSBwYWNrZXRz ICovCi0jZGVmaW5lICBYWVRDUF9VQ1ggICAgICAgNiAgLyogVUNYIDIuMCBwb3J0IHN3YWJiaW5n IGJ1ZyAqLwotI2RlZmluZSAgWFlUQ1BfTkFHTEUgICAgIDcgIC8qIERlbGF5IC0gaW52ZXJzZSBv ZiAxICovCi0jZGVmaW5lICBYWVRDUF9SRE5TICAgICAgOCAgLyogUmV2ZXJzZSBETlMgbG9va3Vw ICovCi0jZGVmaW5lICBYWVRDUF9BRERSRVNTICAgOSAgLyogU2V0IHByZWZlcnJlZCBJUCBBZGRy ZXNzICovCi0jZGVmaW5lICBYWVRDUF9ETlNfU1JWICAxMCAgLyogVXNlIEROUyBTZXJ2aWNlIFJl Y29yZHMgKi8KLSNkZWZpbmUgIFhZVENQX0RPTlRST1VURSAxMSAvKiBEb250IFJvdXRlICovCi0j ZGVmaW5lICBYWVRDUF9TT0NLU19TVlIgMTIgLyogTmFtZSBvZiBTb2NrcyBTZXJ2ZXIgKi8KLSNk ZWZpbmUgIFhZVENQX0hUVFBfUFJPWFkgMTMgLyogTmFtZS9Qb3J0IG9mIEhUVFAgUHJveHkgU2Vy dmVyICovCi0jZGVmaW5lICBYWVRDUF9TT0NLU19OUyAgMTQgLyogTmFtZSBvZiBTb2NrcyBOYW1l IFNlcnZlciAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0jaWZkZWYgT1MyCi0jZGVmaW5l IFhZTVNLICA4MyAgICAgICAvKiBNUy1ET1MgS2VybWl0IGNvbXBhdGliaWxpdHkgb3B0aW9ucyAq LwotI2RlZmluZSAgTVNLX0NPTE9SIDAgICAgLyogIFRlcm1pbmFsIGNvbG9yIGhhbmRsaW5nICAg Ki8KLSNkZWZpbmUgIE1TS19LRVlTICAxICAgIC8qICBTRVQgS0VZIHVzZXMgTVNLIGtleWNvZGVz ICovCi0jZGVmaW5lICBNU0tfUkVOICAgMiAgICAvKiAgRmlsZSByZW5hbWluZyB1c2VzIDguMyBu b3RhdGlvbiBhbHdheXMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2RlZmluZSBYWURFU1QgIDg0 CS8qIFNFVCBERVNUSU5BVElPTiBhcyBpbiBNUy1ET1MgS2VybWl0ICovCi0KLSNpZmRlZiBPUzIK LSNkZWZpbmUgWFlXSU45NSA4NQkvKiBTRVQgV0lOOTUgd29yayBhcm91bmRzICAqLwotI2RlZmlu ZSAgIFhZV0tFWSAwCS8qICAgIEtleWJvYXJkIHRyYW5zbGF0aW9uICovCi0jZGVmaW5lICAgWFlX QUdSIDEgICAgICAvKiAgICBBbHQtR3IgICAgICAgICAgICAgICAqLwotI2RlZmluZSAgIFhZV09J TyAyICAgICAgLyogICAgT3ZlcmxhcHBlZCBJL08gICAgICAgKi8KLSNkZWZpbmUgICBYWVdMVUMg MwkvKiAgICBMdWNpZGEgQ29uc29sZSBzdWJzdGl0dXRpb25zICovCi0jZGVmaW5lICAgWFlXU0VM RUNUIDQgICAvKiAgICBTZWxlY3Qgb24gV3JpdGUgQnVnICovCi0jZGVmaW5lICAgWFlXOF8zIDUg ICAgICAvKiAgICBVc2UgOC4zIGZpbGVuYW1lcz8gKi8KLSNkZWZpbmUgICBYWVdQT1BVUCA2ICAg IC8qICAgIFVzZSBQb3B1cHM/ICAqLwotI2RlZmluZSAgIFhZV0hTTCA3ICAgICAgLyogICAgSG9y eiBTY2FuIExpbmUgc3Vic3RpdHV0aW9ucyAqLwotI2RlZmluZSBYWURMUiAgIDg2IAkvKiBTRVQg Szk1IERJQUxFUiB3b3JrIGFyb3VuZHMgKi8KLSNkZWZpbmUgWFlUSVRMRSA4NwkvKiBTRVQgVElU TEUgb2Ygd2luZG93ICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNkZWZpbmUgWFlJR04gICA4OAkv KiBTRVQgSUdOT1JFLUNIQVJBQ1RFUiAqLwotI2RlZmluZSBYWUVESVQgIDg5ICAgICAgLyogU0VU IEVESVRPUiAqLwotI2RlZmluZSBYWUZMVFIgIDkwICAgICAgLyogU0VUIHsgU0VORCwgUkVDRUlW RSB9IEZJTFRFUiAqLwotI2RlZmluZSBYWUJST1dTRSA5MSAgICAgLyogU0VUIEJST1dTRVIgKi8K LSNkZWZpbmUgWFlFT0YgICAgOTIgICAgIC8qIEVPRiAoPSBGSUxFIEVPRikgKi8KLSNpZmRlZiBP UzIKLSNkZWZpbmUgWFlCRENQICAgOTMgICAgIC8qIEJQUklOVEVSICovCi0jZW5kaWYgLyogT1My ICovCi0jZGVmaW5lIFhZRkxBRyAgIDk0CS8qIEZMQUcgKi8KLSNkZWZpbmUgWFlMSU1JVCAgOTUg ICAgIC8qIFNFU1NJT04tTElNSVQgKi8KLSNkZWZpbmUgWFlJTklMICAgOTYgICAgIC8qIFByb3Rv Y29sIG5lZ290aWF0aW9uIHN0cmluZyBtYXggbGVuZ3RoICovCi0jZGVmaW5lIFhZUkVMWSAgIDk3 ICAgICAvKiBSRUxJQUJMRSAqLwotI2RlZmluZSBYWVNUUkVBTSA5OCAgICAgLyogU1RSRUFNSU5H ICovCi0jZGVmaW5lIFhZVExPRyAgIDk5ICAgICAvKiBUUkFOU0FDVElPTi1MT0cgKi8KLSNkZWZp bmUgWFlDTEVBUiAxMDAgICAgIC8qIENMRUFSQ0hBTk5FTCAqLwotI2RlZmluZSBYWUFVVEggIDEw MQkvKiBBVVRIRU5USUNBVElPTiAqLwotCi0jaWZkZWYgVE5DT0RFCi0jZGVmaW5lIFhZS1JCUFIg ICAwCS8qIEtlcmJlcm9zIFByaW5jaXBhbCAqLwotI2RlZmluZSBYWUtSQlJMICAgMQkvKiBLZXJi ZXJvcyBSZWFsbSAqLwotI2RlZmluZSBYWUtSQkNDICAgMgkvKiBLZXJiZXJvcyA1IENyZWRlbnRp YWxzLUNhY2hlICovCi0jZGVmaW5lIFhZS1JCU1JWICAzICAgICAvKiBLZXJiZXJvcyBTZXJ2aWNl IE5hbWUgKi8KLSNkZWZpbmUgWFlLUkJEQkcgIDQgICAgIC8qIEtlcmJlcm9zIERlYnVnZ2luZyAq LwotI2RlZmluZSBYWUtSQkxJRiAgNSAgICAgLyogS2VyYmVyb3MgTGlmZXRpbWUgKi8KLSNkZWZp bmUgWFlLUkJQUkUgIDYgICAgIC8qIEtlcmJlcm9zIDQgUHJlYXV0aCAqLwotI2RlZmluZSBYWUtS QklOUyAgNyAgICAgLyogS2VyYmVyb3MgNCBJbnN0YW5jZSAqLwotI2RlZmluZSBYWUtSQkZXRCAg OCAgICAgLyogS2VyYmVyb3MgNSBGb3J3YXJkYWJsZSAqLwotI2RlZmluZSBYWUtSQlBSWCAgOSAg ICAgLyogS2VyYmVyb3MgNSBQcm94aWFibGUgKi8KLSNkZWZpbmUgWFlLUkJSTlcgIDEwICAgIC8q IEtlcmJlcm9zIDUgUmVuZXdhYmxlIGxpZmV0aW1lICovCi0jZGVmaW5lIFhZS1JCR0VUICAxMSAg ICAvKiBLZXJiZXJvcyBBdXRvLUdldC1UR1RzICovCi0jZGVmaW5lIFhZS1JCREVMICAxMiAgICAv KiBLZXJiZXJvcyBBdXRvLURlc3Ryb3ktVEdUcyAqLwotI2RlZmluZSAgIEtSQl9ERUxfTk8gIDAg LyogICBLZXJiZXJvcyBObyBBdXRvIERlc3Ryb3kgKi8KLSNkZWZpbmUgICBLUkJfREVMX0NMICAx IC8qICAgS2VyYmVyb3MgQXV0byBEZXN0b3J5IG9uIENsb3NlICovCi0jZGVmaW5lICAgS1JCX0RF TF9FWCAgMiAvKiAgIEtlcmJlcm9zIEF1dG8gRGVzdHJveSBvbiBFeGl0ICAqLwotI2RlZmluZSBY WUtSQks1SzQgMTMgICAgLyogS2VyYmVyb3MgNSBHZXQgSzQgVGlja2V0cyAqLwotI2RlZmluZSBY WUtSQlBSTSAgMTQgICAgLyogS2VyYmVyb3MgNC81IFByb21wdCAqLwotI2RlZmluZSBYWUtSQkFE UiAgMTUgICAgLyogS2VyYmVyb3MgNC81IENoZWNrQWRkcnMgKi8KLSNkZWZpbmUgWFlLUkJOQUQg IDE2ICAgIC8qIEtlcmJlcm9zIDUgTm8gQWRkcmVzc2VzICovCi0jZGVmaW5lIFhZS1JCQUREICAx NyAgICAvKiBLZXJiZXJvcyA1IEFkZHJlc3MgTGlzdCAqLwotI2RlZmluZSBYWUtSQktUQiAgMTgg ICAgLyogS2VyYmVyb3MgNC81IEtleSBUYWJsZSAqLwotI2RlZmluZSBYWVNSUFBSTSAgIDAgICAg LyogU1JQIFByb21wdCAqLwotI2RlZmluZSBYWVNTTFJDRkwgIDAgICAgLyogU1NML1RMUyBSU0Eg Q2VydHMgZmlsZSAqLwotI2RlZmluZSBYWVNTTENPSyAgIDEgICAgLyogU1NML1RMUyBDZXJ0cy1P ayBmbGFnICovCi0jZGVmaW5lIFhZU1NMQ1JRICAgMiAgICAvKiBTU0wvVExTIENlcnRzLVJlcXVp cmVkIGZsYWcgKi8KLSNkZWZpbmUgWFlTU0xDTCAgICAzICAgIC8qIFNTTC9UTFMgQ2lwaGVyIExp c3QgKi8KLSNkZWZpbmUgWFlTU0xEQkcgICA0ICAgIC8qIFNTTC9UTFMgRGVidWcgZmxhZyAqLwot I2RlZmluZSBYWVNTTFJLRkwgIDUgICAgLyogU1NML1RMUyBSU0EgS2V5IEZpbGUgKi8KLSNkZWZp bmUgWFlTU0xMRkwgICA2ICAgIC8qIFNTTC9UTFMgTG9nIEZpbGUgKi8KLSNkZWZpbmUgWFlTU0xP TiAgICA3ICAgIC8qIFNTTC9UTFMgT25seSBmbGFnICovCi0jZGVmaW5lIFhZU1NMU0VDICAgOCAg ICAvKiBTU0wvVExTIFNlY3VyZSBmbGFnICovCi0jZGVmaW5lIFhZU1NMVlJCICAgOSAgICAvKiBT U0wvVExTIFZlcmJvc2UgZmxhZyAqLwotI2RlZmluZSBYWVNTTFZSRiAgMTAgICAgLyogU1NML1RM UyBWZXJpZnkgZmxhZyAqLwotI2RlZmluZSBYWVNTTERVTSAgMTEgICAgLyogU1NML1RMUyBEdW1t eSBmbGFnICovCi0jZGVmaW5lIFhZU1NMRENGTCAxMiAgICAvKiBTU0wvVExTIERTQSBDZXJ0cyBm aWxlICovCi0jZGVmaW5lIFhZU1NMREtGTCAxMyAgICAvKiBTU0wvVExTIERIIENlcnRzIGZpbGUg Ki8KLSNkZWZpbmUgWFlTU0xEUEZMIDE0ICAgIC8qIFNTTC9UTFMgREggUGFyYW0gZmlsZSAqLwot I2RlZmluZSBYWVNTTENSTCAgMTUgICAgLyogU1NML1RMUyBDUkwgZmlsZSAqLwotI2RlZmluZSBY WVNTTENSTEQgMTYgICAgLyogU1NML1RMUyBDUkwgZGlyICovCi0jZGVmaW5lIFhZU1NMVlJGRiAx NyAgICAvKiBTU0wvVExTIFZlcmlmeSBmaWxlICovCi0jZGVmaW5lIFhZU1NMVlJGRCAxOCAgICAv KiBTU0wvVExTIFZlcmlmeSBkaXIgKi8KLSNkZWZpbmUgWFlTU0xSTkQgIDE5ICAgIC8qIFNTTC9U TFMgUmFuZG9tIGZpbGUgKi8KLSNkZWZpbmUgWFlTU0xEQ0NGIDIwICAgIC8qIFNTTC9UTFMgRFNB IENlcnRzIENoYWluIEZpbGUgKi8KLSNkZWZpbmUgWFlTU0xSQ0NGIDIxICAgIC8qIFNTTC9UTFMg UlNBIENlcnRzIENoYWluIEZpbGUgKi8KLQotLyogVGhlIGZvbGxvd2luZyBtdXN0IGJlIHBvd2Vy cyBvZiAyIGZvciBhIGJpdCBtYXNrICovCi0KLSNkZWZpbmUgIFhZS0xDRU4gIDEJLyogS2VyYmVy b3MgTGlzdCBDcmVkZW50aWFsczogRW5jcnlwdGlvbiAqLwotI2RlZmluZSAgWFlLTENGTCAgMgkv KiBLZXJiZXJvcyBMaXN0IENyZWRlbnRpYWxzOiBGbGFncyAqLwotI2RlZmluZSAgWFlLTENBRCAg NCAgICAgLyogS2VyYmVyb3MgTGlzdCBDcmVkZW50aWFsczogQWRkcmVzc2VzICovCi0jZW5kaWYg LyogVE5DT0RFICovCi0KLSNkZWZpbmUgWFlGVU5DICAgMTAyCS8qIFNFVCBGVU5DVElPTiAqLwot Ci0jZGVmaW5lICBGVU5DX0RJICAgMAkvKiBGVU5DVElPTiBESUFHTk9TVElDUyAqLwotI2RlZmlu ZSAgRlVOQ19FUiAgIDEgICAgLyogRlVOQ1RJT04gRVJST1IgKi8KLQotI2RlZmluZSBYWUZUUCAg ICAxMDMJLyogRlRQIGFwcGxpY2F0aW9uICovCi0jZGVmaW5lIFhZU0xFRVAgIDEwNAkvKiBTTEVF UCAvIFBBVVNFIG9wdGlvbnMgKi8KLSNkZWZpbmUgWFlTU0ggICAgMTA1CS8qIFNTSCBvcHRpb25z ICovCi0jZGVmaW5lIFhZVEVMT1AgIDEwNiAgICAvKiBURUxORVQgT1BUSU9OUyAoVEVMT1BUKSAq LwotI2RlZmluZSBYWUNEICAgICAxMDcgICAgLyogU0VUIENEICovCi0jZGVmaW5lIFhZQ1NFVCAg IDEwOAkvKiBDSEFSQUNURVItU0VUICovCi0jZGVmaW5lIFhZU1RPUCAgIDEwOSAgICAvKiBTVE9Q LUJJVFMgKi8KLSNkZWZpbmUgWFlTRVJJQUwgMTEwCS8qIFNFUklBTCAqLwotI2RlZmluZSBYWURJ U0MgICAxMTEgICAgLyogQ0xPU0UtT04tRElTQ09OTkVDVCAqLwotI2RlZmluZSBYWU9QVFMgICAx MTIgICAgLyogT1BUSU9OUyAqLwotI2RlZmluZSBYWVE4RkxHICAxMTMgICAgLyogUThGTEFHIChp bnZpc2libGUpICovCi0jZGVmaW5lIFhZVElNRVIgIDExNCAgICAvKiBUSU1FUiAqLwotI2RlZmlu ZSBYWUZBQ0tCICAxMTUgICAgLyogRi1BQ0stQlVHICovCi0jZGVmaW5lIFhZQlVQICAgIDExNiAg ICAvKiBTRVQgU0VORC9SRUNFSVZFIEJBQ0tVUCAqLwotI2RlZmluZSBYWU1PVkUgICAxMTcJLyog U0VUIFNFTkQvUkVDRUlWRSBNT1ZFLVRPICovCi0jZGVmaW5lIFhZUkVOQU1FIDExOAkvKiBTRVQg U0VORC9SRUNFSVZFIFJFTkFNRS1UTyAqLwotI2RlZmluZSBYWUhJTlRTICAxMTkgICAgLyogU0VU IEhJTlRTICovCi0jZGVmaW5lIFhZRVZBTCAgIDEyMCAgICAvKiBTRVQgRVZBTFVBVEUgKi8KLSNk ZWZpbmUgWFlGQUNLUCAgMTIxICAgIC8qIEYtQUNLLVBBVEggKi8KLSNkZWZpbmUgWFlTWVNMICAg MTIyICAgIC8qIFN5c0xvZyAqLwotI2RlZmluZSBYWVFOWFBMICAxMjMJLyogUU5YIFBvcnQgTG9j ayAqLwotI2RlZmluZSBYWUlLUyAgICAxMjQgICAgLyogU0VUIElLUyAuLi4gKi8KLSNkZWZpbmUg WFlST09UICAgMTI1ICAgIC8qIFNFVCBST09UICovCi0jZGVmaW5lIFhZRlRQWCAgIDEyNiAgICAv KiBTRVQgRlRQICovCi0jZGVmaW5lIFhZU0VYUCAgIDEyNwkvKiBTRVQgU0VYUCAqLwotI2RlZmlu ZSBYWUdQUiAgICAxMjggICAgLyogU0VUIEdFVC1QVVQtUkVNT1RFICovCi0jZGVmaW5lIFhZTE9D VVMgIDEyOQkvKiBTRVQgTE9DVVMgKi8KLSNkZWZpbmUgWFlHVUkgICAgMTMwCS8qIFNFVCBHVUkg Ki8KLSNkZWZpbmUgWFlBTlNXRVIgMTMxICAgIC8qIFNFVCBBTlNXRVIgKi8KLSNkZWZpbmUgWFlN QVRDSCAgMTMyICAgIC8qIFNFVCBNQVRDSERPVCAqLwotI2RlZmluZSBYWVNGVFAgICAxMzMgICAg LyogU0VUIFNGVFAgKi8KLSNkZWZpbmUgWFlfUkVOICAgMTM0ICAgIC8qIFNFVCBSRU5BTUUgKi8K LSNkZWZpbmUgWFlFWFRSTiAgMTM1ICAgIC8qIFNFVCBFWFRFUk5BTC1QUk9UT0NPTCAqLwotI2Rl ZmluZSBYWVZBUkVWICAxMzYgICAgLyogU0VUIFZBUklBQkxFLUVWQUxVQVRJT04gKi8KLQotLyog RW5kIG9mIFNFVCBjb21tYW5kcyAqLwotCi0vKiBTLUV4cHJlc3Npb25zIC0tIGZsb2F0aW5nLXBv aW50IHN1cHBvcnQgcmVxdWlyZWQgKi8KLQotI2lmbmRlZiBDS0ZMT0FUCi0jaWZuZGVmIE5PU0VY UAotI2RlZmluZSBOT1NFWFAKLSNlbmRpZiAvKiBOT1NFWFAgKi8KLSNlbmRpZiAvKiBDS0ZMT0FU ICovCi0KLS8qIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIFMtRXhwcmVzc2lvbiAq LwotCi0jaWZuZGVmIE5PU0VYUAotI2lmbmRlZiBTRVhQTUFYCi0jaWZkZWYgQklHQlVGT0sKLSNk ZWZpbmUgU0VYUE1BWCAxMDI0Ci0jZWxzZQotI2RlZmluZSBTRVhQTUFYIDMyCi0jZW5kaWYgLyog QklHQlVGT0sgKi8KLSNlbmRpZiAvKiBTRVhQTUFYICovCi0jZW5kaWYgLyogTk9TRVhQICovCi0K LSNpZmRlZiBBTllYMjUKLS8qIFBBRCBjb21tYW5kIHBhcmFtZXRlcnMgKi8KLQotI2RlZmluZSBY WVBBREwgMCAgICAgICAgLyogY2xlYXIgdmlydHVhbCBjYWxsICovCi0jZGVmaW5lIFhZUEFEUyAx ICAgICAgICAvKiBzdGF0dXMgb2YgdmlydHVhbCBjYWxsICovCi0jZGVmaW5lIFhZUEFEUiAyICAg ICAgICAvKiByZXNldCBvZiB2aXJ0dWFsIGNhbGwgKi8KLSNkZWZpbmUgWFlQQURJIDMgICAgICAg IC8qIHNlbmQgYW4gaW50ZXJydXB0IHBhY2tldCAqLwotCi0vKiBVc2VkIHdpdGggWFlYMjUuLi4g Ki8KLSNkZWZpbmUgWFlVREFUIDAgICAgICAgLyogWC4yNSBjYWxsIHVzZXIgZGF0YSAqLwotI2Rl ZmluZSBYWUNMT1MgMSAgICAgICAvKiBYLjI1IGNsb3NlZCB1c2VyIGdyb3VwIGNhbGwgKi8KLSNk ZWZpbmUgWFlSRVZDIDIgICAgICAgLyogWC4yNSByZXZlcnNlIGNoYXJnZSBjYWxsICovCi0jZW5k aWYgLyogQU5ZWDI1ICovCi0KLSNpZmRlZiBPUzIKLS8qIFNFVCBQUklOVEVSIHN3aXRjaGVzICov Ci0KLSNkZWZpbmUgUFJOX09VVCAwCQkJLyogT3V0cHV0IG9ubHkgKi8KLSNkZWZpbmUgUFJOX0JJ RCAxCQkJLyogQmlkaXJlY3Rpb25hbCAqLwotI2RlZmluZSBQUk5fRE9TIDIJCQkvKiBET1MgZGV2 aWNlICovCi0jZGVmaW5lIFBSTl9XSU4gMwkJCS8qIFdpbmRvd3MgcXVldWUgKi8KLSNkZWZpbmUg UFJOX1RNTyA0CQkJLyogVGltZW91dCAqLwotI2RlZmluZSBQUk5fVFJNIDUJCQkvKiBUZXJtaW5h dG9yICovCi0jZGVmaW5lIFBSTl9TRVAgNgkJCS8qIFNlcGFyYXRvciAqLwotI2RlZmluZSBQUk5f U1BEIDcJCQkvKiBDT00tcG9ydCBzcGVlZCAqLwotI2RlZmluZSBQUk5fRkxPIDgJCQkvKiBDT00t cG9ydCBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUgUFJOX1BBUiA5CQkJLyogQ09NLXBvcnQgcGFy aXR5ICovCi0jZGVmaW5lIFBSTl9OT04gMTAJCQkvKiBObyBwcmludGVyICovCi0jZGVmaW5lIFBS Tl9GSUwgMTEJCQkvKiBGaWxlbmFtZSAqLwotI2RlZmluZSBQUk5fUElQIDEyCQkJLyogUGlwZW5h bWUgKi8KLSNkZWZpbmUgUFJOX1BTICAxMyAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IHRv IFBTICovCi0jZGVmaW5lIFBSTl9XSUQgMTQgICAgICAgICAgICAgICAgICAgICAgLyogUFMgV2lk dGggKi8KLSNkZWZpbmUgUFJOX0xFTiAxNSAgICAgICAgICAgICAgICAgICAgICAvKiBQUyBMZW5n dGggKi8KLSNkZWZpbmUgUFJOX1JBVyAxNiAgICAgICAgICAgICAgICAgICAgICAvKiBOb24tUFMg Ki8KLSNkZWZpbmUgUFJOX0NTICAxNyAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIg U2V0ICovCi0jZGVmaW5lIFBSTl9NQVggMTcJCQkvKiBOdW1iZXIgb2Ygc3dpdGNoZXMgZGVmaW5l ZCAqLwotCi0vKiBQcmludGVyIHR5cGVzICovCi0KLSNkZWZpbmUgUFJUX0RPUyAwCQkJLyogRE9T ICovCi0jZGVmaW5lIFBSVF9XSU4gMQkJCS8qIFdpbmRvd3MgUXVldWUgKi8KLSNkZWZpbmUgUFJU X0ZJTCAyCQkJLyogRmlsZSAqLwotI2RlZmluZSBQUlRfUElQIDMJCQkvKiBQaXBlICovCi0jZGVm aW5lIFBSVF9OT04gNAkJCS8qIE5vbmUgKi8KLQotI2RlZmluZSBQUklOVFNXSQotI2VuZGlmIC8q IE9TMiAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZm5kZWYgTk9ESUFMCi0vKgotICBTeW1i b2xzIGZvciBtb2RlbSB0eXBlcywgbW92ZWQgaGVyZSBmcm9tIGNrdWRpYS5jLCBNYXkgMTk5Nywg YmVjYXVzZSBub3cKLSAgdGhleSBhcmUgYWxzbyB1c2VkIGluIHNvbWUgb3RoZXIgbW9kdWxlcy4g IFRoZSBudW1iZXJzIE1VU1QgY29ycmVzcG9uZCB0bwotICB0aGUgb3JkZXJpbmcgb2YgZW50cmll cyB3aXRoaW4gdGhlIG1vZGVtcFtdIGFycmF5LgotKi8KLSNpZmRlZiBNSU5JRElBTAkJCQkvKiBN aW5pbXVtIGRpYWxlciBzdXBwb3J0ICovCi0KLSNkZWZpbmUgICAgICAgICBuX0RJUkVDVCAgICAg ICAgIDAJLyogRGlyZWN0IGNvbm5lY3Rpb24gLS0gbm8gbW9kZW0gKi8KLSNkZWZpbmUJCW5fQ0NJ VFQJCSAxCS8qIENDSVRUL0lUVS1UIFYuMjViaXMgKi8KLSNkZWZpbmUJCW5fSEFZRVMJCSAyCS8q IEhheWVzIDI0MDAgKi8KLSNkZWZpbmUJCW5fVU5LTk9XTgkgMwkvKiBVbmtub3duICovCi0jZGVm aW5lICAgICAgICAgbl9VREVGICAgICAgICAgICA0CS8qIFVzZXItRGVmaW5lZCAqLwotI2RlZmlu ZSAgICAgICAgIG5fR0VORVJJQyAgICAgICAgNQkvKiBHZW5lcmljIEhpZ2ggU3BlZWQgKi8KLSNk ZWZpbmUgICAgICAgICBuX0lUVVRWMjUwICAgICAgIDYJLyogSVRVLVQgVi4yNTAgKi8KLSNkZWZp bmUJCU1BWF9NRE0JCSA2CS8qIE51bWJlciBvZiBtb2RlbSB0eXBlcyAqLwotCi0jZWxzZQkJCQkJ LyogRnVsbC1ibG93biBkaWFsZXIgc3VwcG9ydCAqLwotCi0jZGVmaW5lICAgICAgICAgbl9ESVJF Q1QgICAgICAgICAwCS8qIERpcmVjdCBjb25uZWN0aW9uIC0tIG5vIG1vZGVtICovCi0jZGVmaW5l CQluX0FUVERURE0JIDEKLSNkZWZpbmUgICAgICAgICBuX0FUVElTTiAgICAgICAgIDIKLSNkZWZp bmUJCW5fQVRUTU9ERU0JIDMKLSNkZWZpbmUJCW5fQ0NJVFQJCSA0Ci0jZGVmaW5lCQluX0NFUk1F VEVLCSA1Ci0jZGVmaW5lCQluX0RGMDMJCSA2Ci0jZGVmaW5lCQluX0RGMTAwCQkgNwotI2RlZmlu ZQkJbl9ERjIwMAkJIDgKLSNkZWZpbmUJCW5fR0RDCQkgOQotI2RlZmluZQkJbl9IQVlFUwkJMTAK LSNkZWZpbmUJCW5fUEVOUklMCTExCi0jZGVmaW5lCQluX1JBQ0FMCQkxMgotI2RlZmluZQkJbl9V TktOT1dOICAgICAgIDEzCi0jZGVmaW5lCQluX1ZFTlRFTAkxNAotI2RlZmluZQkJbl9DT05DT1JE CTE1Ci0jZGVmaW5lCQluX0FUVFVQQwkxNgkvKiBha2EgVU5JWCBQQyBhbmQgQVRUNzMwMCAqLwot I2RlZmluZQkJbl9ST0xNICAgICAgICAgIDE3ICAgICAgLyogUm9sbSBDQlggRENNICovCi0jZGVm aW5lCQluX01JQ1JPQ09NCTE4CS8qIE1pY3JvY29tcyBpbiBTWCBjb21tYW5kIG1vZGUgKi8KLSNk ZWZpbmUgICAgICAgICBuX1VTUiAgICAgICAgICAgMTkJLyogTW9kZXJuIFVTUnMgKi8KLSNkZWZp bmUgICAgICAgICBuX1RFTEVCSVQgICAgICAgMjAgICAgICAvKiBUZWxlYml0cyBvZiBhbGwga2lu ZHMgKi8KLSNkZWZpbmUgICAgICAgICBuX0RJR0lURUwgICAgICAgMjEJLyogRGlnaXRlbCBEVC0y MiAoQ0NJVFQgdmFyaWFudCkgKi8KLSNkZWZpbmUgICAgICAgICBuX0hfMTIwMCAgICAgICAgMjIJ LyogSGF5ZXMgMTIwMCAqLwotI2RlZmluZQkJbl9IX1VMVFJBICAgICAgIDIzCS8qIEhheWVzIFVs dHJhIGFuZCBtYXliZSBPcHRpbWEgKi8KLSNkZWZpbmUJCW5fSF9BQ0NVUkEgICAgICAyNAkvKiBI YXllcyBBY2N1cmEgYW5kIG1heWJlIE9wdGltYSAqLwotI2RlZmluZSAgICAgICAgIG5fUFBJICAg ICAgICAgICAyNQkvKiBQcmFjdGljYWwgUGVyaXBoZXJhbHMgKi8KLSNkZWZpbmUgICAgICAgICBu X0RBVEFQT1JUICAgICAgMjYJLyogQVQmVCBEYXRhcG9ydCAqLwotI2RlZmluZSAgICAgICAgIG5f Qk9DQSAgICAgICAgICAyNwkvKiBCb2NhICovCi0jZGVmaW5lCQluX01PVE9ST0xBICAgICAgMjgJ LyogTW90b3JvbGEgRmFzdGFsayBvciBMaWZlc3R5bGUgKi8KLSNkZWZpbmUJCW5fRElHSUNPTU0J MjkJLyogRGlnaWNvbW0gQ29ubmVjdGlvbiAqLwotI2RlZmluZQkJbl9EWU5BTElOSyAgICAgIDMw CS8qIER5bmFsaW5rIDE0MTRWRSAqLwotI2RlZmluZQkJbl9JTlRFTAkJMzEJLyogSW50ZWwgMTQ0 MDAgRmF4bW9kZW0gKi8KLSNkZWZpbmUJCW5fVUNPTV9BVAkzMgkvKiBNaWNyb2NvbXMgaW4gQVQg bW9kZSAqLwotI2RlZmluZQkJbl9NVUxUSQkJMzMJLyogTXVsdGl0ZWNoIE1UMTQzMiAqLwotI2Rl ZmluZQkJbl9TVVBSQQkJMzQJLyogU3VwcmFGQVhtb2RlbSAqLwotI2RlZmluZQkgICAgICAgIG5f Wk9MVFJJWAkzNQkvKiBab2x0cml4ICovCi0jZGVmaW5lCQluX1pPT00JCTM2CS8qIFpvb20gKi8K LSNkZWZpbmUJCW5fWllYRUwJCTM3CS8qIFp5WEVMICovCi0jZGVmaW5lICAgICAgICAgbl9UQVBJ ICAgICAgICAgIDM4CS8qIFRBUEkgTGluZSBtb2RlbSAtIHdoYXRldmVyIGl0IGlzICovCi0jZGVm aW5lICAgICAgICAgbl9UQk5FVyAgICAgICAgIDM5CS8qIE5ld2VyIFRlbGViaXQgbW9kZWxzICov Ci0jZGVmaW5lCQluX01BWFRFQ0ggICAgICAgNDAJLyogTWF4VGVjaCBYTTI4OEVBICovCi0jZGVm aW5lICAgICAgICAgbl9VREVGICAgICAgICAgIDQxCS8qIFVzZXItRGVmaW5lZCAqLwotI2RlZmlu ZSAgICAgICAgIG5fUldWMzIgICAgICAgICA0MgkvKiBHZW5lcmljIFJvY2t3ZWxsIFYuMzIgKi8K LSNkZWZpbmUgICAgICAgICBuX1JXVjMyQiAgICAgICAgNDMJLyogR2VuZXJpYyBSb2Nrd2VsbCBW LjMyYmlzICovCi0jZGVmaW5lICAgICAgICAgbl9SV1YzNCAgICAgICAgIDQ0CS8qIEdlbmVyaWMg Um9ja3dlbGwgVi4zNCAqLwotI2RlZmluZQkJbl9NV0FWRQkJNDUJLyogSUJNIE13YXZlIEFkYXB0 ZXIgKi8KLSNkZWZpbmUgICAgICAgICBuX1RFTEVQQVRIICAgICAgNDYJLyogR2F0ZXdheSBUZWxl cGF0aCAqLwotI2RlZmluZSAgICAgICAgIG5fTUlDUk9MSU5LICAgICA0NwkvKiBNaWNyb0xpbmsg bW9kZW1zICovCi0jZGVmaW5lICAgICAgICAgbl9DQVJESU5BTCAgICAgIDQ4CS8qIENhcmRpbmFs IG1vZGVtcyAqLwotI2RlZmluZSAgICAgICAgIG5fR0VORVJJQyAgICAgICA0OSAgICAgIC8qIEdl bmVyaWMgaGlnaC1zcGVlZCAqLwotI2RlZmluZSAgICAgICAgIG5fWEpBQ0sgICAgICAgICA1MAkv KiBNZWdhaGVydHogWC1KYWNrICovCi0jZGVmaW5lICAgICAgICAgbl9TUElSSVRJSSAgICAgIDUx CS8qIFF1aWNrY29tbSBTcGlyaXQgSUkgKi8KLSNkZWZpbmUgICAgICAgICBuX01PTlRBTkEgICAg ICAgNTIJLyogTW90b3JvbGEgTW9udGFuYSAqLwotI2RlZmluZSAgICAgICAgIG5fQ09NUEFRICAg ICAgICA1MwkvKiBDb21wYXEgRGF0YStGYXggTW9kZW0gKi8KLSNkZWZpbmUgICAgICAgICBuX0ZV SklUU1UgICAgICAgNTQJLyogRnVqaXRzdSBGYXgvTW9kZW0gQWRwYXRlciAqLwotI2RlZmluZSAg ICAgICAgIG5fTUhaQVRUICAgICAgICA1NQkvKiBNZWdhaGVydHogQVQmVCBWLjM0ICovCi0jZGVm aW5lICAgICAgICAgbl9TVVBSQVNPTiAgICAgIDU2CS8qIFN1cHJhU29uaWMgKi8KLSNkZWZpbmUg ICAgICAgICBuX0JFU1REQVRBICAgICAgNTcJLyogQmVzdCBEYXRhICovCi0jZGVmaW5lICAgICAg ICAgbl9BVFQxOTAwICAgICAgIDU4ICAgICAgLyogQVQmVCBTVFUgSUlJIE1vZGVsIDE5MDAgKi8K LSNkZWZpbmUgICAgICAgICBuX0FUVDE5MTAgICAgICAgNTkgICAgICAvKiBBVCZUIFNUVSBJSUkg TW9kZWwgMTkxMCAqLwotI2RlZmluZSAgICAgICAgIG5fS0VFUElOVE9VQ0ggICA2MAkvKiBBVCZU IEtlZXBpblRvdWNoICovCi0jZGVmaW5lICAgICAgICAgbl9VU1JYMiAgICAgICAgIDYxCS8qIFVT UiBYSi0xNTYwIFgyIDU2SyAqLwotI2RlZmluZSAgICAgICAgIG5fUk9MTUFUICAgICAgICA2Mgkv KiBSb2xtIHdpdGggQVQgY29tbWFuZCBzZXQgKi8KLSNkZWZpbmUJCW5fQVRMQVMgICAgICAgICA2 MyAgICAgIC8qIEF0bGFzIC8gTmV3Y29tIGl4ZkMgMzMuNiAqLwotI2RlZmluZSAgICAgICAgIG5f Q09ERVggICAgICAgICA2NAkvKiBNb3Rvcm9sYSBDb2RleCAzMjZYIFNlcmllcyAqLwotI2RlZmlu ZSAgICAgICAgIG5fTVQ1NjM0WlBYICAgICA2NQkvKiBNdWx0aXRlY2ggTVQ1NjM0WlBYICovCi0j ZGVmaW5lICAgICAgICAgbl9VTElOS1YyNTAgICAgIDY2CS8qIE1pY3JvbGluayBJVFUtVCBWLjI1 MCA1NksgKi8KLSNkZWZpbmUgICAgICAgICBuX0lUVVRWMjUwICAgICAgNjcJLyogR2VuZXJpYyBJ VFUtVCBWLjI1MCAqLwotI2RlZmluZSAgICAgICAgIG5fUldWOTAgICAgICAgICA2OAkvKiBHZW5l cmljIFJvY2t3ZWxsIFYuOTAgKi8KLSNkZWZpbmUgICAgICAgICBuX1NVUFJBWCAgICAgICAgNjkg ICAgICAvKiBEaWFtb25kIFN1cHJhIEV4cHJlc3MgVi45MCAqLwotI2RlZmluZSAgICAgICAgIG5f TFVDRU5UICAgICAgICA3MCAgICAgIC8qIEx1Y2VudCBWZW51cyBjaGlwc2V0ICovCi0jZGVmaW5l ICAgICAgICAgbl9QQ1RFTCAgICAgICAgIDcxICAgICAgLyogUENUZWwgY2hpcHNldCAqLwotI2Rl ZmluZSAgICAgICAgIG5fQ09ORVhBTlQgICAgICA3MiAgICAgIC8qIENvbmV4YW50IG1vZGVtIGZh bWlseSAqLwotI2RlZmluZQkJbl9aT09NVjM0CTczCS8qIFpvb20gKi8KLSNkZWZpbmUJCW5fWk9P TVY5MAk3NAkvKiBab29tICovCi0jZGVmaW5lICAgICAgICAgbl9aT09NVjkyICAgICAgIDc1ICAg ICAgLyogWk9PTSBWLjkyICovCi0jZGVmaW5lICAgICAgICAgbl9NT1RTTTU2ICAgICAgIDc2CS8q IE1vdG9yb2xhIFNNNTYgY2hpcHNldCAqLwotI2RlZmluZQkJTUFYX01ETQkJNzYJLyogTnVtYmVy IG9mIG1vZGVtIHR5cGVzICovCi0KLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotI2VuZGlmIC8qIE5P RElBTCAqLwotCi0jaWZuZGVmIE5PSUNQCi0vKiBTSE9XIGNvbW1hbmQgc3ltYm9scyAqLwotCi0j ZGVmaW5lIFNIUEFSIDAJCQkJLyogUGFyYW1ldGVycyAqLwotI2RlZmluZSBTSFZFUiAxCQkJCS8q IFZlcnNpb25zICovCi0jZGVmaW5lIFNIQ09NIDIJCQkJLyogQ29tbXVuaWNhdGlvbnMgKi8KLSNk ZWZpbmUgU0hQUk8gMwkJCQkvKiBQcm90b2NvbCAqLwotI2RlZmluZSBTSEZJTCA0CQkJCS8qIEZp bGUgKi8KLSNkZWZpbmUgU0hMTkcgNQkJCQkvKiBMYW5ndWFnZSAqLwotI2RlZmluZSBTSENPVSA2 CQkJCS8qIENvdW50ICovCi0jZGVmaW5lIFNITUFDIDcJCQkJLyogTWFjcm9zICovCi0jZGVmaW5l IFNIS0VZIDgJCQkJLyogS2V5ICovCi0jZGVmaW5lIFNIU0NSIDkJCQkJLyogU2NyaXB0cyAqLwot I2RlZmluZSBTSFNQRCAxMAkJCS8qIFNwZWVkICovCi0jZGVmaW5lIFNIU1RBIDExCQkJLyogU3Rh dHVzICovCi0jZGVmaW5lIFNIU0VSIDEyCQkJLyogU2VydmVyICovCi0jZGVmaW5lIFNIWE1JIDEz CQkJLyogVHJhbnNtaXQgKi8KLSNkZWZpbmUgU0hBVFQgMTQJCQkvKiBBdHRyaWJ1dGVzICovCi0j ZGVmaW5lIFNITU9EIDE1CQkJLyogTW9kZW0gKi8KLSNkZWZpbmUgU0hERkxUIDE2CQkJLyogRGVm YXVsdCAoYXMgaW4gVk1TKSAqLwotI2RlZmluZSBTSFZBUiAxNwkJCS8qIFNob3cgZ2xvYmFsIHZh cmlhYmxlcyAqLwotI2RlZmluZSBTSEFSRyAxOAkJCS8qIFNob3cgbWFjcm8gYXJndW1lbnRzICov Ci0jZGVmaW5lIFNIQVJSIDE5CQkJLyogU2hvdyBhcnJheXMgKi8KLSNkZWZpbmUgU0hCVUkgMjAJ CQkvKiBTaG93IGJ1aWx0aW4gdmFyaWFibGVzICovCi0jZGVmaW5lIFNIRlVOIDIxCQkJLyogU2hv dyBmdW5jdGlvbnMgKi8KLSNkZWZpbmUgU0hQQUQgMjIJCQkvKiBTaG93IChYLjI1KSBQQUQgKi8K LSNkZWZpbmUgU0hURVIgMjMJCQkvKiBTaG93IHRlcm1pbmFsIHNldHRpbmdzICovCi0jZGVmaW5l IFNIRVNDIDI0CQkJLyogU2hvdyBlc2NhcGUgY2hhcmFjdGVyICovCi0jZGVmaW5lIFNIRElBIDI1 CQkJLyogU2hvdyBESUFMIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgU0hORVQgMjYJCQkvKiBTaG93 IG5ldHdvcmsgcGFyYW1ldGVycyAqLwotI2RlZmluZSBTSExCTCAyNwkJCS8qIFNob3cgVk1TIGxh YmVsZWQgZmlsZSBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIFNIU1RLIDI4CQkJLyogU2hvdyBzdGFj aywgTUFDIGRlYnVnZ2luZyAqLwotI2RlZmluZSBTSENTRSAyOQkJCS8qIFNob3cgY2hhcmFjdGVy IHNldHMgKi8KLSNkZWZpbmUgU0hGRUEgMzAJCQkvKiBTaG93IGZlYXR1cmVzICovCi0jZGVmaW5l IFNIQ1RMIDMxCQkJLyogU2hvdyBjb250cm9sLXByZWZpeCB0YWJsZSAqLwotI2RlZmluZSBTSEVY SSAzMgkJCS8qIFNob3cgRVhJVCBpdGVtcyAqLwotI2RlZmluZSBTSFBSVCAzMwkJCS8qIFNob3cg cHJpbnRlciAqLwotI2RlZmluZSBTSENNRCAzNAkJCS8qIFNob3cgY29tbWFuZCBwYXJhbWV0ZXJz ICovCi0jZGVmaW5lIFNIS1ZCIDM1CQkJLyogU2hvdyBcS3ZlcmJzICovCi0jZGVmaW5lIFNITU9V IDM2CQkJLyogU2hvdyBNb3VzZSAobGlrZSBTaG93IEtleSkgKi8KLSNkZWZpbmUgU0hUQUIgMzcJ CQkvKiBTaG93IFRhYnMgKE9TLzIpICovCi0jZGVmaW5lIFNIVlNDUk4gMzgJCQkvKiBTaG93IFZp cnR1YWwgU2NyZWVuIChPUy8yKSAqLwotI2RlZmluZSBTSEFMUk0gIDM5CQkJLyogQUxBUk0gKi8K LSNkZWZpbmUgU0hTRkwgICA0MAkJCS8qIFNFTkQtTElTVCAqLwotI2RlZmluZSBTSFVESyAgIDQx ICAgICAgICAgICAgICAgICAgICAgIC8qIERFQyBWVCBVREtzIChPUy8yKSAqLwotI2RlZmluZSBT SERCTCAgIDQyCQkJLyogRE9VQkxFL0lHTk9SRSBjaGFyYWN0ZXJzICovCi0jZGVmaW5lIFNIRURJ VCAgICA0MwkJCS8qIEVESVRPUiAqLwotI2RlZmluZSBTSEJST1dTRSAgNDQJCQkvKiBCUk9XU0VS ICovCi0jZGVmaW5lIFNIVEFQSSAgICA0NQkJCS8qIFRBUEkgKi8KLSNkZWZpbmUgU0hUQVBJX0wg IDQ2CQkJLyogVEFQSSBMb2NhdGlvbiAqLwotI2RlZmluZSBTSFRBUElfTSAgNDcJCQkvKiBUQVBJ IE1vZGVtIFByb3BlcnRpZXMgKi8KLSNkZWZpbmUgU0hUQVBJX0MgIDQ4CQkJLyogVEFQSSBDb21t IFByb3BlcnRpZXMgICovCi0jZGVmaW5lIFNIVEVMICAgICA0OQkJCS8qIFNIT1cgVEVMTkVUICov Ci0jZGVmaW5lIFNISU5QICAgICA1MAkJCS8qIFNIT1cgSU5QVVQgKi8KLSNkZWZpbmUgU0hUUklH ICAgIDUxCQkJLyogU0hPVyBUUklHR0VSICovCi0jZGVmaW5lIFNITE9HICAgICA1MgkJCS8qIFNI T1cgTE9HUyAqLwotI2RlZmluZSBTSE9VVFAgICAgNTMJCQkvKiBTSE9XIE9VVFBVVCAqLwotI2Rl ZmluZSBTSE9QQVQgICAgNTQJCQkvKiBTSE9XIFBBVFRFUk5TICovCi0jZGVmaW5lIFNIT1NUUiAg ICA1NQkJCS8qIFNIT1cgU1RSRUFNSU5HICovCi0jZGVmaW5lIFNIT0FVVEggICA1NgkJCS8qIFNI T1cgQVVUSEVOVElDQVRJT04gKi8KLSNkZWZpbmUgU0hPRlRQICAgIDU3CQkJLyogU0hPVyBGVFAg Ki8KLSNkZWZpbmUgU0hUT1BUICAgIDU4ICAgICAgICAgICAgICAgICAgICAvKiBTSE9XIFRFTE9Q VCAqLwotI2RlZmluZSBTSFhPUFQgICAgNTkJCQkvKiBTSE9XIEVYVEVOREVELU9QVElPTlMgKi8K LSNkZWZpbmUgU0hDRCAgICAgIDYwCQkJLyogU0hPVyBDRCAqLwotI2RlZmluZSBTSEFTU09DICAg NjEJCQkvKiBTSE9XIEFTU09DSUFUSU9OUyAqLwotI2RlZmluZSBTSENPTk5YICAgNjIJCQkvKiBT SE9XIENPTk5FQ1RJT04gKi8KLSNkZWZpbmUgU0hPUFRTICAgIDYzCQkJLyogU0hPVyBPUFRJT05T ICovCi0jZGVmaW5lIFNIT0ZMTyAgICA2NAkJCS8qIFNIT1cgRkxPVy1DT05UUk9MICovCi0jZGVm aW5lIFNIT1hGRVIgICA2NQkJCS8qIFNIT1cgVFJBTlNGRVIgKi8KLSNkZWZpbmUgU0hUQ1AgICAg IDY2ICAgICAgICAgICAgICAgICAgICAvKiBTSE9XIFRDUCAqLwotI2RlZmluZSBTSEhJU1RPUlkg NjcJCQkvKiBTSE9XIChjb21tYW5kKSBISVNUT1JZICovCi0jZGVmaW5lIFNIU0VYUCAgICA2OAkJ CS8qIFNIT1cgU0VYUFJFU1NJT05TICovCi0jZGVmaW5lIFNIT1NTSCAgICA2OQkJCS8qIFNIT1cg U1NIICovCi0jZGVmaW5lIFNIT0lLUyAgICA3MCAgICAgICAgICAgICAgICAgICAgLyogU0hPVyBJ S1MgKi8KLSNkZWZpbmUgU0hPR1VJICAgIDcxCQkJLyogU0hPVyBHVUkgKEs5NSkgKi8KLSNkZWZp bmUgU0hPUkVOICAgIDcyCQkJLyogU0hPVyBSRU5BTUUgKi8KLQotLyogUkVNT1RFIGNvbW1hbmQg c3ltYm9scyAqLwotCi0jZGVmaW5lIFhaQ1BZICAwCS8qIENvcHkgKi8KLSNkZWZpbmUgWFpDV0Qg IDEJLyogQ2hhbmdlIFdvcmtpbmcgRGlyZWN0b3J5ICovCi0jZGVmaW5lIFhaREVMICAyCS8qIERl bGV0ZSAqLwotI2RlZmluZSBYWkRJUiAgMwkvKiBEaXJlY3RvcnkgKi8KLSNkZWZpbmUgWFpITFAg IDQJLyogSGVscCAqLwotI2RlZmluZSBYWkhPUyAgNQkvKiBIb3N0ICovCi0jZGVmaW5lIFhaS0VS ICA2CS8qIEtlcm1pdCAqLwotI2RlZmluZSBYWkxHSSAgNwkvKiBMb2dpbiAqLwotI2RlZmluZSBY WkxHTyAgOAkvKiBMb2dvdXQgKi8KLSNkZWZpbmUgWFpNQUkgIDkJLyogTWFpbCA8LS0gd3Jvbmcs IHRoaXMgc2hvdWxkIGJlIHRvcC1sZXZlbCAqLwotI2RlZmluZSBYWk1PVSAxMAkvKiBNb3VudCAq LwotI2RlZmluZSBYWk1TRyAxMQkvKiBNZXNzYWdlICovCi0jZGVmaW5lIFhaUFJJIDEyCS8qIFBy aW50ICovCi0jZGVmaW5lIFhaUkVOIDEzCS8qIFJlbmFtZSAqLwotI2RlZmluZSBYWlNFVCAxNAkv KiBTZXQgKi8KLSNkZWZpbmUgWFpTUEEgMTUJLyogU3BhY2UgKi8KLSNkZWZpbmUgWFpTVUIgMTYJ LyogU3VibWl0ICovCi0jZGVmaW5lIFhaVFlQIDE3CS8qIFR5cGUgKi8KLSNkZWZpbmUgWFpXSE8g MTgJLyogV2hvICovCi0jZGVmaW5lIFhaUFdEIDE5CS8qIFByaW50IFdvcmtpbmcgRGlyZWN0b3J5 ICovCi0jZGVmaW5lIFhaUVVFIDIwCS8qIFF1ZXJ5ICovCi0jZGVmaW5lIFhaQVNHIDIxCS8qIEFz c2lnbiAqLwotI2RlZmluZSBYWk1LRCAyMgkvKiBta2RpciAqLwotI2RlZmluZSBYWlJNRCAyMwkv KiBybWRpciAqLwotI2RlZmluZSBYWlhJVCAyNAkvKiBFeGl0ICovCi0jZGVmaW5lIFhaQ0RVIDI1 ICAgICAgICAvKiBDRFVQICovCi0KLS8qIFNFVCBJTlBVVCBjb21tYW5kIHBhcmFtZXRlcnMgKi8K LQotI2RlZmluZSBJTl9ERUYgIDAJCQkvKiBEZWZhdWx0IHRpbWVvdXQgKi8KLSNkZWZpbmUgSU5f VElNICAxCQkJLyogVGltZW91dCBhY3Rpb24gKi8KLSNkZWZpbmUgSU5fQ0FTICAyCQkJLyogQ2Fz ZSAobWF0Y2hpbmcpICovCi0jZGVmaW5lIElOX0VDSCAgMwkJCS8qIEVjaG8gKi8KLSNkZWZpbmUg SU5fU0lMICA0CQkJLyogU2lsZW5jZSAqLwotI2RlZmluZSBJTl9CVUYgIDUJCQkvKiBCdWZmZXIg c2l6ZSAqLwotI2RlZmluZSBJTl9QQUMgIDYgICAgICAgICAgICAgICAgICAgICAgIC8qIElucHV0 IFBhY2luZyAoZGVidWcpICovCi0jZGVmaW5lIElOX1RSTSAgNwkJCS8qIElucHV0IFRlcm1pbmFs IERpc3BsYXkgKi8KLSNkZWZpbmUgSU5fQURMICA4CQkJLyogSW5wdXQgYXV0b2Rvd25sb2FkICov Ci0jZGVmaW5lIElOX1BBVCAgOQkJCS8qIFBhdHRlcm4gdG8gbWF0Y2ggKi8KLSNkZWZpbmUgSU5f QVNHIDEwIAkJCS8qIEFzc2lnbiBtYXRjaGluZyB0ZXh0IHRvIHZhcmlhYmxlICovCi0jZGVmaW5l IElOX0NBTiAxMQkJCS8qIEtleWJvYXJkIGNhbmNlbGxhdGlvbiBvZiBJTlBVVCAqLwotI2RlZmlu ZSBJTl9TQ0EgMTIJCQkvKiBUaW1lb3V0IHNjYWxpbmcgKi8KLQotLyogRU5BQkxFL0RJU0FCTEUg Y29tbWFuZCBwYXJhbWV0ZXJzICovCi0KLSNkZWZpbmUgRU5fQUxMICAwCQkJLyogQUxMICovCi0j ZGVmaW5lIEVOX0NXRCAgMQkJCS8qIENEL0NXRCAqLwotI2RlZmluZSBFTl9ESVIgIDIJCQkvKiBE SVJFQ1RPUlkgKi8KLSNkZWZpbmUgRU5fRklOICAzCQkJLyogRklOSVNIICovCi0jZGVmaW5lIEVO X0dFVCAgNAkJCS8qIEdFVCAqLwotI2RlZmluZSBFTl9IT1MgIDUJCQkvKiBIT1NUIGNvbW1hbmQg Ki8KLSNkZWZpbmUgRU5fS0VSICA2CQkJLyogS0VSTUlUIGNvbW1hbmQgKi8KLSNkZWZpbmUgRU5f TE9HICA3CQkJLyogTE9HSU4gKi8KLSNkZWZpbmUgRU5fU0VOICA4CQkJLyogU0VORCAqLwotI2Rl ZmluZSBFTl9TRVQgIDkJCQkvKiBTRVQgKi8KLSNkZWZpbmUgRU5fU1BBIDEwCQkJLyogU1BBQ0Ug Ki8KLSNkZWZpbmUgRU5fVFlQIDExCQkJLyogVFlQRSAqLwotI2RlZmluZSBFTl9XSE8gMTIJCQkv KiBXSE8sIGZpbmdlciAqLwotI2RlZmluZSBFTl9ERUwgMTMJCQkvKiBEZWxldGUgKi8KLSNkZWZp bmUgRU5fQllFIDE0CQkJLyogQllFIChhcyBvcHBvc2VkIHRvIEZJTklTSCkgKi8KLSNkZWZpbmUg RU5fUVVFIDE1CQkJLyogUVVFUlkgKi8KLSNkZWZpbmUgRU5fQVNHIDE2CQkJLyogQVNTSUdOICov Ci0jZGVmaW5lIEVOX0NQWSAxNwkJCS8qIENPUFkgKi8KLSNkZWZpbmUgRU5fUkVOIDE4CQkJLyog UkVOQU1FICovCi0jZGVmaW5lIEVOX1JFVCAxOQkJCS8qIFJFVFJJRVZFICovCi0jZGVmaW5lIEVO X01BSSAyMAkJCS8qIE1BSUwgKi8KLSNkZWZpbmUgRU5fUFJJIDIxCQkJLyogUFJJTlQgKi8KLSNk ZWZpbmUgRU5fTUtEIDIyCQkJLyogTUtESVIgKi8KLSNkZWZpbmUgRU5fUk1EIDIzCQkJLyogUk1E SVIgKi8KLSNkZWZpbmUgRU5fWElUIDI0CQkJLyogRVhJVCAqLwotI2RlZmluZSBFTl9FTkEgMjUJ CQkvKiBFTkFCTEUgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZuZGVmIE5PSUNQCi0vKiBD TEVBUiBjb21tYW5kIHN5bWJvbHMgKi8KLSNkZWZpbmUgQ0xSX0RFViAgICAxCQkJLyogQ2xlYXIg RGV2aWNlIEJ1ZmZlcnMgKi8KLSNkZWZpbmUgQ0xSX0lOUCAgICAyCQkJLyogQ2xlYXIgSW5wdXQg QnVmZmVycyAqLwotI2RlZmluZSBDTFJfQlRIICAgIENMUl9ERVZ8Q0xSX0lOUAkvKiBDbGVhciBE ZXZpY2UgYW5kIElucHV0ICovCi0jZGVmaW5lIENMUl9TQ0wgICAgNAkJCS8qIENsZWFyIFNjcm9s bGJhY2sgYnVmZmVyICovCi0jZGVmaW5lIENMUl9DTUQgICAgOAkJCS8qIENsZWFyIENvbW1hbmQg U2NyZWVuICovCi0jZGVmaW5lIENMUl9UUk0gICAxNgkJCS8qIENsZWFyIFRlcm1pbmFsIFNjcmVl biAqLwotI2RlZmluZSBDTFJfRElBICAgMzIJCQkvKiBDbGVhciBEaWFsIFN0YXR1cyAqLwotI2Rl ZmluZSBDTFJfU0ZMICAgNjQJCQkvKiBDbGVhciBTZW5kLUZpbGUtTGlzdCAqLwotI2RlZmluZSBD TFJfQVBDICAxMjgJCQkvKiBDbGVhciBBUEMgKi8KLSNkZWZpbmUgQ0xSX0FMUiAgMjU2CQkJLyog Q2xlYXIgQWxhcm0gKi8KLSNkZWZpbmUgQ0xSX1RYVCAgNTEyCQkJLyogQ2xlYXIgdGV4dC1wYXR0 ZXJucyAqLwotI2RlZmluZSBDTFJfQklOIDEwMjQJCQkvKiBDbGVhciBiaW5hcnktcGF0dGVybnMg Ki8KLSNkZWZpbmUgQ0xSX1NDUiAyMDQ4CQkJLyogQ2xlYXIgc2NyZWVuICovCi0jZGVmaW5lIENM Ul9LQkQgNDA5NgkJCS8qIENsZWFyIGtleWJvYXJkIGJ1ZmZlciAqLwotI2VuZGlmIC8qIE5PSUNQ ICovCi0KLS8qIFN5bWJvbHMgZm9yIGxvZ3MgKi8KLQotI2RlZmluZSBMT0dEIDAJCQkJLyogRGVi dWdnaW5nICovCi0jZGVmaW5lIExPR1AgMQkJCQkvKiBQYWNrZXRzICovCi0jZGVmaW5lIExPR1Mg MgkJCQkvKiBTZXNzaW9uICovCi0jZGVmaW5lIExPR1QgMwkJCQkvKiBUcmFuc2FjdGlvbiAqLwot I2RlZmluZSBMT0dYIDQJCQkJLyogU2NyZWVuICovCi0jZGVmaW5lIExPR1IgNQkJCQkvKiBUaGUg Im9wZW4gcmVhZCIgZmlsZSAqLwotI2RlZmluZSBMT0dXIDYJCQkJLyogVGhlICJvcGVuIHdyaXRl L2FwcGVuZCIgZmlsZSAqLwotI2RlZmluZSBMT0dFIDcJCQkJLyogRXJyb3IgKGUuZy4gc3RkZXJy KSAqLwotI2RlZmluZSBMT0dNIDgJCQkJLyogVGhlIGRpYWxpbmcgbG9nICovCi0KLSNpZm5kZWYg Tk9TUEwKLS8qIFN5bWJvbHMgZm9yIGJ1aWx0aW4gdmFyaWFibGVzICovCi0KLSNkZWZpbmUgVk5f QVJHQyAwCQkJLyogQVJHQyAqLwotI2RlZmluZSBWTl9DT1VOIDEJCQkvKiBDT1VOVCAqLwotI2Rl ZmluZSBWTl9EQVRFIDIJCQkvKiBEQVRFICovCi0jZGVmaW5lIFZOX0RJUkUgMwkJCS8qIERJUkVD VE9SWSAqLwotI2RlZmluZSBWTl9FUlJPIDQJCQkvKiBFUlJPUkxFVkVMICovCi0jZGVmaW5lIFZO X1RJTUUgNQkJCS8qIFRJTUUgKi8KLSNkZWZpbmUgVk5fVkVSUyA2CQkJLyogVkVSU0lPTiAqLwot I2RlZmluZSBWTl9JQlVGIDcJCQkvKiBJTlBVVCBidWZmZXIgKi8KLSNkZWZpbmUgVk5fU1VDQyA4 CQkJLyogU1VDQ0VTUyBmbGFnICovCi0jZGVmaW5lIFZOX0xJTkUgOQkJCS8qIExJTkUgKi8KLSNk ZWZpbmUgVk5fQVJHUyAxMAkJCS8qIFByb2dyYW0gY29tbWFuZC1saW5lIGFyZyBjb3VudCAqLwot I2RlZmluZSBWTl9TWVNUIDExCQkJLyogU3lzdGVtIHR5cGUgKi8KLSNkZWZpbmUgVk5fU1lTViAx MgkJCS8qIFN5c3RlbSB2ZXJzaW9uICovCi0jZGVmaW5lIFZOX1JFVCAgMTMJCQkvKiBSRVRVUk4g dmFsdWUgKi8KLSNkZWZpbmUgVk5fRklMRSAxNAkJCS8qIE1vc3QgcmVjZW50IGZpbGVzcGVjICov Ci0jZGVmaW5lIFZOX05EQVQgMTUJCQkvKiBOdW1lcmljIGRhdGUgeXl5eS9tbS9kZCAqLwotI2Rl ZmluZSBWTl9IT01FIDE2CQkJLyogSG9tZSBkaXJlY3RvcnkgKi8KLSNkZWZpbmUgVk5fU1BFRSAx NwkJCS8qIFRyYW5zbWlzc2lvbiBzcGVlZCAqLwotI2RlZmluZSBWTl9IT1NUIDE4CQkJLyogSG9z dCBuYW1lICovCi0jZGVmaW5lIFZOX1RUWUYgMTkJCQkvKiBUVFkgZmlsZSBkZXNjcmlwdG9yIChV TklYIG9ubHkpICovCi0jZGVmaW5lIFZOX1BST0cgMjAJCQkvKiBQcm9ncmFtIG5hbWUgKi8KLSNk ZWZpbmUgVk5fTlRJTSAyMQkJCS8qIE5USU1FICovCi0jZGVmaW5lIFZOX0ZGQyAgMjIJCQkvKiBD aGFyYWN0ZXJzIGluIGxhc3QgZmlsZSB4ZmVycmVkICovCi0jZGVmaW5lIFZOX1RGQyAgMjMJCQkv KiBDaGFycyBpbiBsYXN0IGZpbGUgZ3JvdXAgeGZlcnJlZCAqLwotI2RlZmluZSBWTl9DUFUgIDI0 CQkJLyogQ1BVIHR5cGUgKi8KLSNkZWZpbmUgVk5fQ01ETCAyNQkJCS8qIENvbW1hbmQgbGV2ZWwg Ki8KLSNkZWZpbmUgVk5fREFZICAyNiAgICAgICAgICAgICAgICAgICAgICAvKiBEYXkgb2Ygd2Vl aywgc3RyaW5nICovCi0jZGVmaW5lIFZOX05EQVkgMjcgICAgICAgICAgICAgICAgICAgICAgLyog RGF5IG9mIHdlZWssIG51bWVyaWMgKi8KLSNkZWZpbmUgVk5fTENMICAyOAkJCS8qIExvY2FsICh2 cykgcmVtb3RlIG1vZGUgKi8KLSNkZWZpbmUgVk5fQ01EUyAyOQkJCS8qIENvbW1hbmQgc291cmNl ICovCi0jZGVmaW5lIFZOX0NNREYgMzAJCQkvKiBDb21tYW5kIGZpbGUgbmFtZSAqLwotI2RlZmlu ZSBWTl9NQUMgIDMxCQkJLyogTWFjcm8gbmFtZSAqLwotI2RlZmluZSBWTl9FWElUIDMyCQkJLyog RXhpdCBzdGF0dXMgKi8KLSNkZWZpbmUgVk5fSUNIUiAzMwkJCS8qIElOUFVUIGNoYXJhY3RlciAq LwotI2RlZmluZSBWTl9JQ05UIDM0CQkJLyogSU5QVVQgY291bnQgKi8KLSNkZWZpbmUgVk5fUFJU WSAzNQkJCS8qIEN1cnJlbnQgcGFyaXR5ICovCi0jZGVmaW5lIFZOX0RJQUwgMzYJCQkvKiBESUFM IHN0YXR1cyAqLwotI2RlZmluZSBWTl9LRVlCIDM3CQkJLyogS2V5Ym9hcmQgdHlwZSAqLwotI2Rl ZmluZSBWTl9DUFMgIDM4CQkJLyogQ2hhcnMgcGVyIHNlY29uZCwgbGFzdCB0cmFuc2ZlciAqLwot I2RlZmluZSBWTl9SUEwgIDM5CQkJLyogUmVjZWl2ZSBwYWNrZXQgbGVuZ3RoICovCi0jZGVmaW5l IFZOX1NQTCAgNDAJCQkvKiBTZW5kIHBhY2tldCBsZW5ndGggKi8KLSNkZWZpbmUgVk5fTU9ERSA0 MQkJCS8qIFRyYW5zZmVyIG1vZGUgKHRleHQsIGJpbmFyeSkgKi8KLSNkZWZpbmUgVk5fUkVYWCA0 MgkJCS8qIFJleHggcmV0dXJuIHZhbHVlICovCi0jZGVmaW5lIFZOX05FV0wgNDMJCQkvKiBOZXds aW5lIGNoYXJhY3RlciBvciBzZXF1ZW5jZSAqLwotI2RlZmluZSBWTl9DT0xTIDQ0CQkJLyogQ29s dW1ucyBvbiBjb25zb2xlIHNjcmVlbiAqLwotI2RlZmluZSBWTl9ST1dTIDQ1CQkJLyogUm93cyBv biBjb25zb2xlIHNjcmVlbiAqLwotI2RlZmluZSBWTl9UVFlQIDQ2CQkJLyogVGVybWluYWwgdHlw ZSAqLwotI2RlZmluZSBWTl9NSU5QIDQ3CQkJLyogTUlOUFVUIHJlc3VsdCAqLwotI2RlZmluZSBW Tl9DT05OIDQ4CQkJLyogQ29ubmVjdGlvbiB0eXBlICovCi0jZGVmaW5lIFZOX1NZU0kgNDkJCQkv KiBTeXN0ZW0gSUQgKi8KLSNkZWZpbmUgVk5fVFogICA1MAkJCS8qIFRpbWV6b25lICovCi0jZGVm aW5lIFZOX1NQQSAgNTEJCQkvKiBTcGFjZSAqLwotI2RlZmluZSBWTl9RVUUgIDUyCQkJLyogUXVl cnkgKi8KLSNkZWZpbmUgVk5fU1RBUiA1MwkJCS8qIFN0YXJ0dXAgZGlyZWN0b3J5ICovCi0jZGVm aW5lIFZOX0NTRVQgNTQJCQkvKiBMb2NhbCBjaGFyYWN0ZXIgc2V0ICovCi0jZGVmaW5lIFZOX01E TSAgNTUJCQkvKiBNb2RlbSB0eXBlICovCi0jZGVmaW5lIFZOX0VWQUwgNTYJCQkvKiBNb3N0IHJl Y2VudCBFVkFMVUFURSByZXN1bHQgKi8KLQotI2RlZmluZSBWTl9EX0NDIDU3CQkJLyogRElBTCBD T1VOVFJZLUNPREUgKi8KLSNkZWZpbmUgVk5fRF9BQyA1OAkJCS8qIERJQUwgQVJFQS1DT0RFICov Ci0jZGVmaW5lIFZOX0RfSVAgNTkJCQkvKiBESUFMIElOVEVSTkFUSU9OQUwtUFJFRklYICovCi0j ZGVmaW5lIFZOX0RfTFAgNjAJCQkvKiBESUFMIExELVBSRUZJWCAqLwotCi0jZGVmaW5lIFZOX1VJ RCAgNjEKLSNkZWZpbmUgVk5fUFdEICA2MgotI2RlZmluZSBWTl9QUk0gIDYzCi0KLSNkZWZpbmUg Vk5fUFJPVE8gNjQJCQkvKiBQcm90b2NvbCAqLwotI2RlZmluZSBWTl9ETERJUiA2NQkJCS8qIERv d25sb2FkIGRpcmVjdG9yeSAqLwotCi0jZGVmaW5lIFZOX01fQUFBIDY2CQkJLyogRmlyc3QgTU9E RU0gb25lICovCi0jZGVmaW5lIFZOX01fSU5JIDY2CQkJLyogTW9kZW0gaW5pdCBzdHJpbmcgKi8K LSNkZWZpbmUgVk5fTV9EQ00gNjcJCQkvKiBNb2RlbSBkaWFsIGNvbW1hbmQgKi8KLSNkZWZpbmUg Vk5fTV9EQ08gNjgJCQkvKiBNb2RlbSBkYXRhIGNvbXByZXNzaW9uIG9uICovCi0jZGVmaW5lIFZO X01fRENYIDY5CQkJLyogTW9kZW0gZGF0YSBjb21wcmVzc2lvbiBvZmYgKi8KLSNkZWZpbmUgVk5f TV9FQ08gNzAJCQkvKiBNb2RlbSBlcnJvciBjb3JyZWN0aW9uIG9uICovCi0jZGVmaW5lIFZOX01f RUNYIDcxCQkJLyogTW9kZW0gZXJyb3IgY29ycmVjdGlvbiBvZmYgKi8KLSNkZWZpbmUgVk5fTV9B QU8gNzIJCQkvKiBNb2RlbSBhdXRvYW5zd2VyIG9uICovCi0jZGVmaW5lIFZOX01fQUFYIDczCQkJ LyogTW9kZW0gYXV0b2Fuc3dlciBvZmYgKi8KLSNkZWZpbmUgVk5fTV9IVVAgNzQJCQkvKiBNb2Rl bSBoYW5ndXAgY29tbWFuZCAqLwotI2RlZmluZSBWTl9NX0hXRiA3NQkJCS8qIE1vZGVtIGhhcmR3 YXJlIGZsb3cgY29tbWFuZCAqLwotI2RlZmluZSBWTl9NX1NXRiA3NgkJCS8qIE1vZGVtIHNvZnR3 YXJlIGZsb3cgY29tbWFuZCAqLwotI2RlZmluZSBWTl9NX05GQyA3NwkJCS8qIE1vZGVtIG5vIGZs b3ctY29udHJvbCBjb21tYW5kICovCi0jZGVmaW5lIFZOX01fUERNIDc4CQkJLyogTW9kZW0gcHVs c2UgZGlhbGluZyBtb2RlICovCi0jZGVmaW5lIFZOX01fVERNIDc5CQkJLyogTW9kZW0gdG9uZSBk aWFsaW5nIG1vZGUgKi8KLSNkZWZpbmUgVk5fTV9aWlogNzkJCQkvKiBMYXN0IE1PREVNIG9uZSAq LwotCi0jZGVmaW5lIFZOX1NFTENUIDgwCQkJLyogU2VsZWN0ZWQgVGV4dCBmcm9tIE1hcmsgTW9k ZSAqLwotI2RlZmluZSBWTl9URU1QICA4MQkJCS8qIFRlbXBvcmFyeSBkaXJlY3RvcnkgKi8KLSNk ZWZpbmUgVk5fSVNUQVQgODIJCQkvKiBJTlBVVCBjb21tYW5kIHN0YXR1cyAqLwotI2RlZmluZSBW Tl9JTkkgICA4MwkJCS8qIElOSSAoa2VybXJjKSBkaXJlY3RvcnkgKi8KLSNkZWZpbmUgVk5fRVhF RElSIDg0CQkJLyogRVhFIGRpcmVjdG9yeSAqLwotI2RlZmluZSBWTl9FUlJOTyAgODUJCQkvKiBW YWx1ZSBvZiBlcnJubyAqLwotI2RlZmluZSBWTl9FUlNUUiAgODYJCQkvKiBDb3JyZXNwb25kaW5n IGVycm9yIG1lc3NhZ2UgKi8KLSNkZWZpbmUgVk5fVEZMTiAgIDg3CQkJLyogVEFLRSBmaWxlIGxp bmUgbnVtYmVyICovCi0jZGVmaW5lIFZOX1hWTlVNICA4OAkJCS8qIFByb2R1Y3Qtc3BlY2lmaWMg dmVyc2lvbiBudW1iZXIgKi8KLSNkZWZpbmUgVk5fUlBTSVogIDg5CQkJLyogUmVjZWl2ZSBwYWNr ZXQgbGVuZ3RoICovCi0jZGVmaW5lIFZOX1dJTkRPICA5MAkJCS8qIFdpbmRvdyBzaXplICovCi0j ZGVmaW5lIFZOX01ETVNHICA5MQkJCS8qIE1vZGVtIG1lc3NhZ2UgKi8KLSNkZWZpbmUgVk5fRE5V TSAgIDkyCQkJLyogRGlhbCBudW1iZXIgKi8KLSNkZWZpbmUgVk5fQVBDICAgIDkzCQkJLyogQVBD IGFjdGl2ZSAqLwotI2RlZmluZSBWTl9JUEFERFIgOTQJCQkvKiBNeSBJUCBhZGRyZXNzICovCi0j ZGVmaW5lIFZOX0NSQzE2ICA5NQkJCS8qIENSQy0xNiBvZiBtb3N0IHJlY2VudCBmaWxlIGdyb3Vw ICovCi0jZGVmaW5lIFZOX1RSTUsgICA5NiAgICAgICAgICAgICAgICAgICAgLyogTWFjcm8gZXhl Y3V0ZWQgZnJvbSBUZXJtaW5hbCBNb2RlICovCi0jZGVmaW5lIFZOX1BJRCAgICA5NwkJCS8qIFBy b2Nlc3MgSUQgKi8KLSNkZWZpbmUgVk5fRk5BTSAgIDk4CQkJLyogTmFtZSBvZiBmaWxlIGJlaW5n IHRyYW5zZmVycmVkICovCi0jZGVmaW5lIFZOX0ZOVU0gICA5OQkJCS8qIE51bWJlciBvZiBmaWxl IGJlaW5nIHRyYW5zZmVycmVkICovCi0jZGVmaW5lIFZOX1BFWElUICAxMDAJCQkvKiBQcm9jZXNz IGV4aXQgc3RhdHVzICovCi0jZGVmaW5lIFZOX1BfQ1RMICAxMDEgCQkJLyogQ29udHJvbCBQcmVm aXggKi8KLSNkZWZpbmUgVk5fUF84QklUIDEwMgkJCS8qIDgtYml0IHByZWZpeCAqLwotI2RlZmlu ZSBWTl9QX1JQVCAgMTAzCQkJLyogUmVwZWF0IGNvdW50IHByZWZpeCAqLwotI2RlZmluZSBWTl9E X0xDUCAgMTA0CQkJLyogRElBTCBMT0NBTC1QUkVGSVggKi8KLSNkZWZpbmUgVk5fVVJMICAgIDEw NQkJCS8qIExhc3QgVVJMIHNlbGVjdGVkICovCi0jZGVmaW5lIFZOX1JFR04gICAxMDYJCQkvKiBS ZWdpc3RyYXRpb24gTmFtZSAqLwotI2RlZmluZSBWTl9SRUdPICAgMTA3CQkJLyogUmVnaXN0cmF0 aW9uIE9yZ2FuaXphdGlvbiAqLwotI2RlZmluZSBWTl9SRUdTICAgMTA4CQkJLyogUmVnaXN0cmF0 aW9uIFNlcmlhbCBudW1iZXIgKi8KLSNkZWZpbmUgVk5fWFBST0cgIDEwOQkJCS8qIHhwcm9ncmFt IChsaWtlIHh2ZXJzaW9uKSAqLwotI2RlZmluZSBWTl9FRElUT1IgMTEwCQkJLyogRWRpdG9yICov Ci0jZGVmaW5lIFZOX0VET1BUICAxMTEJCQkvKiBFZGl0b3Igb3B0aW9ucyAqLwotI2RlZmluZSBW Tl9FREZJTEUgMTEyCQkJLyogRWRpdG9yIGZpbGUgKi8KLSNkZWZpbmUgVk5fQlJPV1NSIDExMwkJ CS8qIEJyb3dzZXIgKi8KLSNkZWZpbmUgVk5fQlJPUFQgIDExNAkJCS8qIEJyb3dzZXIgb3B0aW9u cyAqLwotI2RlZmluZSBWTl9IRVJBTEQgMTE1CQkJLyogUHJvZ3JhbSBoZXJhbGQgKi8KLSNkZWZp bmUgVk5fVEVTVCAgIDExNgkJCS8qIFByb2dyYW0gdGVzdCBsZXZlbCBvciAiMCIgKi8KLSNkZWZp bmUgVk5fWEZTVEFUIDExNwkJCS8qIEZpbGUtVHJhbnNmZXIgc3RhdHVzICovCi0jZGVmaW5lIFZO X1hGTVNHICAxMTkJCQkvKiBGaWxlLVRyYW5zZmVyIG1lc3NhZ2UgKi8KLSNkZWZpbmUgVk5fU05E TCAgIDEyMAkJCS8qIFNlbmQtbGlzdCBzdGF0dXMgKi8KLSNkZWZpbmUgVk5fVFJJRyAgIDEyMQkJ CS8qIFRyaWdnZXIgdmFsdWUgKi8KLSNkZWZpbmUgVk5fTU9VX1ggIDEyMiAgICAgICAgICAgICAg ICAgICAvKiBPUy8yIE1vdXNlIEN1cnNvciBYICovCi0jZGVmaW5lIFZOX01PVV9ZICAxMjMgICAg ICAgICAgICAgICAgICAgLyogT1MvMiBNb3VzZSBDdXJzb3IgWSAqLwotI2RlZmluZSBWTl9QUklO VCAgMTI0CQkJLyogUHJpbnRlciAqLwotI2RlZmluZSBWTl9FU0MgICAgMTI1CQkJLyogRXNjYXBl IGNoYXJhY3RlciAqLwotI2RlZmluZSBWTl9JTlRJTUUgMTI2CQkJLyogSU5QVVQgZWxhcHNlZCB0 aW1lICovCi0jZGVmaW5lIFZOX0s0UkxNICAxMjcJCQkvKiBLZXJiZXJvcyA0IFJlYWxtICovCi0j ZGVmaW5lIFZOX0s1UkxNICAxMjgJCQkvKiBLZXJiZXJvcyA1IFJlYWxtICovCi0jZGVmaW5lIFZO X0s0UFJOICAxMjkJCQkvKiBLZXJiZXJvcyA0IFByaW5jaXBhbCAqLwotI2RlZmluZSBWTl9LNVBS TiAgMTMwCQkJLyogS2VyYmVyb3MgNSBQcmluY2lwYWwgKi8KLSNkZWZpbmUgVk5fSzRDQyAgIDEz MQkJCS8qIEtlcmJlcm9zIDQgQ3JlZGVudGlhbHMgQ2FjaGUgKi8KLSNkZWZpbmUgVk5fSzVDQyAg IDEzMgkJCS8qIEtlcmJlcm9zIDUgQ3JlZGVudGlhbHMgQ2FjaGUgKi8KLSNkZWZpbmUgVk5fT1NO QU0gIDEzMwkJCS8qIE9TIG5hbWUgKi8KLSNkZWZpbmUgVk5fT1NWRVIgIDEzNAkJCS8qIE9TIHZl cnNpb24gKi8KLSNkZWZpbmUgVk5fT1NSRUwgIDEzNQkJCS8qIE9TIHJlbGVhc2UgKi8KLSNkZWZp bmUgVk5fTkFNRSAgIDEzNgkJCS8qIE5hbWUgSSB3YXMgY2FsbGVkIGJ5ICovCi0jZGVmaW5lIFZO X01PREwgICAxMzcJCQkvKiBDUFUgbW9kZWwgKi8KLSNkZWZpbmUgVk5fWDI1TEEgIDEzOAkJCS8q IFguMjUgbG9jYWwgYWRkcmVzcyAqLwotI2RlZmluZSBWTl9YMjVSQSAgMTM5CQkJLyogWC4yNSBy ZW1vdGUgYWRkcmVzcyAqLwotI2RlZmluZSBWTl9LNFNSViAgMTQwICAgICAgICAgICAgICAgICAg IC8qIEtlcmJlcm9zIDQgU2VydmljZSBOYW1lICovCi0jZGVmaW5lIFZOX0s1U1JWICAxNDEgICAg ICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNSBTZXJ2aWNlIE5hbWUgKi8KLSNkZWZpbmUgVk5f UERTRlggIDE0MgkJCS8qIFBESUFMIHN1ZmZpeCAqLwotI2RlZmluZSBWTl9EVFlQRSAgMTQzCQkJ LyogRElBTCB0eXBlICovCi0jZGVmaW5lIFZOX0xDS1BJRCAxNDQJCQkvKiBMb2NrZmlsZSBQSUQg KFVOSVgpICovCi0jZGVmaW5lIFZOX0JMSyAgICAxNDUJCQkvKiBCbG9jayBjaGVjayAqLwotI2Rl ZmluZSBWTl9URlRJTSAgMTQ2CQkJLyogRmlsZSB0cmFuc2ZlciBlbGFwc2VkIHRpbWUgKi8KLSNk ZWZpbmUgVk5fRF9QWFggIDE0NyAJCQkvKiBESUFMIFBCWC1FWENIQU5HRSAqLwotI2RlZmluZSBW Tl9IV1BBUiAgMTQ4IAkJCS8qIEhhcmR3YXJlIFBhcml0eSAqLwotI2RlZmluZSBWTl9TRVJJQUwg MTQ5IAkJCS8qIFNFVCBTRVJJQUwgdmFsdWUgKi8KLSNkZWZpbmUgVk5fTENLRElSIDE1MAkJCS8q IExvY2tmaWxlIGRpcmVjdG9yeSAoVU5JWCkgKi8KLQotI2RlZmluZSBWTl9LNEVOTyAgMTUxICAg ICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIDQgTGFzdCBFcnJubyAqLwotI2RlZmluZSBWTl9L NEVNU0cgMTUyICAgICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIDQgTGFzdCBFcnIgTXNnICov Ci0jZGVmaW5lIFZOX0s1RU5PICAxNTMgICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNSBM YXN0IEVycm5vICovCi0jZGVmaW5lIFZOX0s1RU1TRyAxNTQgICAgICAgICAgICAgICAgICAgLyog S2VyYmVyb3MgNSBMYXN0IEVyciBNc2cgKi8KLQotI2RlZmluZSBWTl9JTlRNTyAgMTU1CQkJLyog SW5wdXQgdGltZW91dCAqLwotI2RlZmluZSBWTl9BVVRIUyAgMTU2ICAgICAgICAgICAgICAgICAg IC8qIEF1dGhlbnRpY2F0aW9uIFN0YXRlICovCi0KLSNkZWZpbmUgVk5fRE1fTFAgIDE1NwkJCS8q IERpYWwgTW9kaWZpZXI6IExvbmcgUGF1c2UgKi8KLSNkZWZpbmUgVk5fRE1fU1AgIDE1OAkJCS8q IERpYWwgTW9kaWZpZXI6IFNob3J0IFBhdXNlICovCi0jZGVmaW5lIFZOX0RNX1BEICAxNTkJCQkv KiBEaWFsIE1vZGlmaWVyOiBQdWxzZSBEaWFsICovCi0jZGVmaW5lIFZOX0RNX1REICAxNjAJCQkv KiBEaWFsIE1vZGlmaWVyOiBUb25lIERpYWwgKi8KLSNkZWZpbmUgVk5fRE1fV0EgIDE2MQkJCS8q IERpYWwgTW9kaWZpZXI6IFdhaXQgZm9yIEFuc3dlciAqLwotI2RlZmluZSBWTl9ETV9XRCAgMTYy CQkJLyogRGlhbCBNb2RpZmllcjogV2FpdCBmb3IgRGlhbHRvbmUgKi8KLSNkZWZpbmUgVk5fRE1f UkMgIDE2MwkJCS8qIERpYWwgTW9kaWZpZXI6IFJldHVybiB0byBDb21tYW5kICovCi0KLS8qICht b3JlIGJlbG93Li4uKSAqLwotCi0jZGVmaW5lIFZOX1RZX0xOICAxNjQJCQkvKiBUWVBFIGNvbW1h bmQgbGluZSBudW1iZXIgKi8KLSNkZWZpbmUgVk5fVFlfTEMgIDE2NQkJCS8qIFRZUEUgY29tbWFu ZCBsaW5lIGNvdW50ICovCi0jZGVmaW5lIFZOX1RZX0xNICAxNjYJCQkvKiBUWVBFIGNvbW1hbmQg bWF0Y2ggY291bnQgKi8KLQotI2RlZmluZSBWTl9NQUNMVkwgMTY3CQkJLyogXHYobWFjbGV2ZWwp ICovCi0KLSNkZWZpbmUgVk5fWEZfQkMgIDE2OAkJCS8qIFRyYW5zZmVyIGJsb2NrY2hlY2sgZXJy b3JzICovCi0jZGVmaW5lIFZOX1hGX1RNICAxNjkJCQkvKiBUcmFuc2ZlciB0aW1lb3V0cyAqLwot I2RlZmluZSBWTl9YRl9SWCAgMTcwCQkJLyogVHJhbnNmZXIgcmV0cmFuc21pc3Npb25zICovCi0K LSNkZWZpbmUgVk5fTV9OQU0gIDE3MQkJCS8qIE1vZGVtIGZ1bGwgbmFtZSAgKi8KLSNkZWZpbmUg Vk5fTVNfQ0QgIDE3MgkJCS8qIE1vZGVtIHNpZ25hbCBDRCAgKi8KLSNkZWZpbmUgVk5fTVNfQ1RT IDE3MwkJCS8qIE1vZGVtIHNpZ25hbCBDVFMgKi8KLSNkZWZpbmUgVk5fTVNfRFNSIDE3NAkJCS8q IE1vZGVtIHNpZ25hbCBEU1IgKi8KLSNkZWZpbmUgVk5fTVNfRFRSIDE3NQkJCS8qIE1vZGVtIHNp Z25hbCBEVFIgKi8KLSNkZWZpbmUgVk5fTVNfUkkgIDE3NgkJCS8qIE1vZGVtIHNpZ25hbCBSSSAg Ki8KLSNkZWZpbmUgVk5fTVNfUlRTIDE3NwkJCS8qIE1vZGVtIHNpZ25hbCBSVFMgKi8KLQotI2Rl ZmluZSBWTl9NQVRDSCAgMTc4CQkJLyogTW9zdCByZWNlbnQgcGF0dGVybiBtYXRjaCAqLwotI2Rl ZmluZSBWTl9TTE1TRyAgMTc5CQkJLyogU0VUIExJTkUgKGVycm9yKSBtZXNzYWdlICovCi0jZGVm aW5lIFZOX1RYVERJUiAxODAJCQkvKiBLZXJtaXQgdGV4dC1maWxlIGRpcmVjdG9yeSAqLwotI2Rl ZmluZSBWTl9NQV9QSSAgMTgxCQkJLyogTWF0aCBjb25zdGFudCBQaSAqLwotI2RlZmluZSBWTl9N QV9FICAgMTgyCQkJLyogTWF0aCBjb25zdGFudCBlICovCi0jZGVmaW5lIFZOX01BX1BSICAxODMJ CQkvKiBNYXRoIHByZWNpc2lvbiAoZGlnaXRzKSAqLwotI2RlZmluZSBWTl9DTURCTCAgMTg0CQkJ LyogQ29tbWFuZCBidWZmZXIgbGVuZ3RoICovCi0KLSNkZWZpbmUgVk5fQVVUSFQgIDE4NSAgICAg ICAgICAgICAgICAgICAvKiBBdXRoZW50aWNhdGlvbiBUeXBlICovCi0KLSNpZmRlZiBDS0NIQU5O RUxJTwotI2RlZmluZSBWTl9GRVJSICAgMTg2CQkJLyogRklMRSBlcnJvciAqLwotI2RlZmluZSBW Tl9GTUFYICAgMTg3CQkJLyogRklMRSBtYXggKi8KLSNkZWZpbmUgVk5fRkNPVSAgIDE4OAkJCS8q IFJlc3VsdCBvZiBsYXN0IEZJTEUgQ09VTlQgKi8KLSNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLwot Ci0jZGVmaW5lIFZOX0RSVFIgICAxODkJCQkvKiBESUFMIHJldHJ5IGNvdW50ZXIgKi8KLSNkZWZp bmUgVk5fQ1hUSU1FIDE5MAkJCS8qIEVsYXBzZWQgdGltZSBpbiBzZXNzaW9uICovCi0jZGVmaW5l IFZOX0JZVEUgICAxOTEJCQkvKiBCeXRlIG9yZGVyICovCi0jZGVmaW5lIFZOX0FVVEhOICAxOTIg ICAgICAgICAgICAgICAgICAgLyogQXV0aGVudGljYXRpb24gTmFtZSAqLwotI2RlZmluZSBWTl9L QkNIQVIgMTkzCQkJLyoga2JjaGFyICovCi0jZGVmaW5lIFZOX1RUWU5BTSAxOTQJCQkvKiBOYW1l IG9mIGNvbnRyb2xsaW5nIHRlcm1pbmFsICovCi0KLSNkZWZpbmUgVk5fWDUwOV9TIDE5NSAgICAg ICAgICAgICAgICAgICAvKiBYLjUwOSBDZXJ0aWZpY2F0ZSBTdWJqZWN0ICovCi0jZGVmaW5lIFZO X1g1MDlfSSAxOTYgICAgICAgICAgICAgICAgICAgLyogWC41MDkgQ2VydGlmaWNhdGUgSXNzdWVy ICAqLwotCi0jZGVmaW5lIFZOX1BST01QVCAxOTcJCQkvKiBDLUtlcm1pdCdzIHByb21wdCAqLwot I2RlZmluZSBWTl9CVUlMRCAgMTk4CQkJLyogQnVpbGQgSUQgc3RyaW5nICovCi0KLSNkZWZpbmUg Vk5fU0VYUCAgIDE5OQkJCS8qIExhc3QgUy1FeHByZXNzaW9uICovCi0jZGVmaW5lIFZOX1ZTRVhQ ICAyMDAJCQkvKiBWYWx1ZSBvZiBsYXN0IFMtRXhwcmVzc2lvbiAqLwotI2RlZmluZSBWTl9MU0VY UCAgMjAxCQkJLyogU0VYUCBkZXB0aCAqLwotCi0jZGVmaW5lIFZOX0ZUSU1FICAyMDIJCQkvKiBU aW1lIGFzIGZsb2F0aW5nLXBvaW5nIG51bWJlciAqLwotCi0jZGVmaW5lIFZOX0ZUUF9DICAyMDMg ICAgICAgICAgICAgICAgICAgLyogRlRQIFJlcGx5IENvZGUgKi8KLSNkZWZpbmUgVk5fRlRQX00g IDIwNCAgICAgICAgICAgICAgICAgICAvKiBGVFAgUmVwbHkgTWVzc2FnZSAqLwotI2RlZmluZSBW Tl9GVFBfUyAgMjA1CQkJLyogRlRQIFNlcnZlciB0eXBlICovCi0jZGVmaW5lIFZOX0ZUUF9IICAy MDYJCQkvKiBGVFAgSG9zdCAqLwotI2RlZmluZSBWTl9GVFBfWCAgMjA3CQkJLyogRlRQIENvbm5l Y3RlZCAqLwotI2RlZmluZSBWTl9GVFBfTCAgMjA4CQkJLyogRlRQIExvZ2dlZCBpbiAqLwotI2Rl ZmluZSBWTl9GVFBfRyAgMjA5CQkJLyogRlRQIEdFVC1QVVQtUkVNT1RFIHNldHRpbmcgKi8KLQot I2RlZmluZSBWTl9TRUNVUkUgMjEwICAgICAgICAgICAgICAgICAgIC8qIEVuY3J5cHRlZCBjb25u ZWN0aW9uIDAgb3IgMSAqLwotCi0jZGVmaW5lIFZOX0RNX0hGICAyMTEJCQkvKiBEaWFsIE1vZGlm aWVyOiBIb29rIEZsYXNoICovCi0jZGVmaW5lIFZOX0RNX1dCICAyMTIJCQkvKiBEaWFsIE1vZGlm aWVyOiBXYWl0IGZvciBCb25nICovCi0jZGVmaW5lIFZOX0NYX1NUQSAyMTMJCQkvKiBDWF9TVEFU VVMgKi8KLQotI2RlZmluZSBWTl9GVFBfQiAgMjE0ICAgICAgICAgICAgICAgICAgIC8qIEZUUCBD UEwgKi8KLSNkZWZpbmUgVk5fRlRQX0QgIDIxNSAgICAgICAgICAgICAgICAgICAvKiBGVFAgRFBM ICovCi0jZGVmaW5lIFZOX0ZUUF9aICAyMTYgICAgICAgICAgICAgICAgICAgLyogRlRQIFNFQ1VS SVRZICovCi0jZGVmaW5lIFZOX0hUVFBfQyAyMTcgICAgICAgICAgICAgICAgICAgLyogSFRUUCBD b2RlICovCi0jZGVmaW5lIFZOX0hUVFBfTiAyMTggICAgICAgICAgICAgICAgICAgLyogSFRUUCBD b25uZWN0ZWQgKi8KLSNkZWZpbmUgVk5fSFRUUF9IIDIxOSAgICAgICAgICAgICAgICAgICAvKiBI VFRQIEhvc3QgKi8KLSNkZWZpbmUgVk5fSFRUUF9NIDIyMCAgICAgICAgICAgICAgICAgICAvKiBI VFRQIE1lc3NhZ2UgKi8KLSNkZWZpbmUgVk5fSFRUUF9TIDIyMSAgICAgICAgICAgICAgICAgICAv KiBIVFRQIFNlY3VyaXR5ICovCi0KLSNkZWZpbmUgVk5fTk9XICAgIDIyMgkJCS8qIFRpbWVzdGFt cCB5eXl5bW1kZCBoaDptbTpzcyAqLwotI2RlZmluZSBWTl9IT1VSICAgMjIzCQkJLyogQ3VycmVu dCBob3VyIG9mIHRoZSBkYXkgMC0yMyAqLwotCi0jZGVmaW5lIFZOX0NJX0RBICAyMjQJCQkvKiBD YWxsZXIgSUQgZGF0ZSAqLwotI2RlZmluZSBWTl9DSV9USSAgMjI1CQkJLyogQ2FsbGVyIElEIHRp bWUgKi8KLSNkZWZpbmUgVk5fQ0lfTkEgIDIyNgkJCS8qIENhbGxlciBJRCBuYW1lICovCi0jZGVm aW5lIFZOX0NJX05VICAyMjcJCQkvKiBDYWxsZXIgSUQgbnVtYmVyICovCi0jZGVmaW5lIFZOX0NJ X01FICAyMjgJCQkvKiBDYWxsZXIgSUQgbWVzc2FnZSAqLwotI2RlZmluZSBWTl9QRVJTT05BTCAy MjkgICAgICAgICAgICAgICAgIC8qIFBlcnNvbmFsIERpcmVjdG9yeSBvbiBXaW5kb3dzICovCi0j ZGVmaW5lIFZOX0FQUERBVEEgIDIzMCAgICAgICAgICAgICAgICAgLyogVXNlciBBcHBEYXRhIGRp cmVjdG9yeSAqLwotI2RlZmluZSBWTl9DT01NT04gICAyMzEgICAgICAgICAgICAgICAgIC8qIENv bW1vbiBBcHBEYXRhIGRpcmVjdG9yeSAqLwotI2RlZmluZSBWTl9ERVNLVE9QICAyMzIgICAgICAg ICAgICAgICAgIC8qIFVzZXIgRGVza3RvcCBkaXJlY3RvcnkgKi8KLSNkZWZpbmUgVk5fVE5DX1NJ RyAgMjMzICAgICAgICAgICAgICAgICAvKiBSRkMgMjcxNyBTaWduYXR1cmUgKi8KLQotI2lmZGVm IEtVSQotI2RlZmluZSBWTl9HVUlfWFAgICAyMzQgICAgICAgICAgICAgICAgIC8qIEdVSSBXaW5k b3cgWCBwb3NpdGlvbiAqLwotI2RlZmluZSBWTl9HVUlfWVAgICAyMzUgICAgICAgICAgICAgICAg IC8qIEdVSSBXaW5kb3cgWSBwb3NpdGlvbiAqLwotI2RlZmluZSBWTl9HVUlfWFIgICAyMzYgICAg ICAgICAgICAgICAgIC8qIEdVSSBXaW5kb3cgWCByZXNvbHV0aW9uICovCi0jZGVmaW5lIFZOX0dV SV9ZUiAgIDIzNyAgICAgICAgICAgICAgICAgLyogR1VJIFdpbmRvdyBZIHJlc29sdXRpb24gKi8K LSNkZWZpbmUgVk5fR1VJX1JVTiAgMjM4ICAgICAgICAgICAgICAgICAvKiBHVUkgV2luZG93IFJ1 biBtb2RlICovCi0jZGVmaW5lIFZOX0dVSV9GTk0gIDIzOSAgICAgICAgICAgICAgICAgLyogR1VJ IFdpbmRvdyBGb250IE5hbWUgKi8KLSNkZWZpbmUgVk5fR1VJX0ZTWiAgMjQwICAgICAgICAgICAg ICAgICAvKiBHVUkgV2luZG93IEZvbnQgU2l6ZSAqLwotI2VuZGlmIC8qIEtVSSAqLwotCi0jZGVm aW5lIFZOX0xPR19QS1QgIDI0MSAgICAgICAgICAgICAgICAgLyogUGFja2V0IExvZyBGaWxlbmFt ZSAqLwotI2RlZmluZSBWTl9MT0dfVFJBICAyNDIgICAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0 aW9uIExvZyBGaWxlbmFtZSAqLwotI2RlZmluZSBWTl9MT0dfU0VTICAyNDMgICAgICAgICAgICAg ICAgIC8qIFNlc3Npb24gTG9nIEZpbGVuYW1lICovCi0jZGVmaW5lIFZOX0xPR19ERUIgIDI0NCAg ICAgICAgICAgICAgICAgLyogRGVidWcgTG9nIEZpbGVuYW1lICovCi0jZGVmaW5lIFZOX0xPR19D T04gIDI0NSAgICAgICAgICAgICAgICAgLyogQ29ubmVjdGlvbiBMb2cgRmlsZW5hbWUgKi8KLQot I2RlZmluZSBWTl9JU0NBTEUgICAyNDYJCQkvKiBJTlBVVCBzY2FsZSBmYWN0b3IgKi8KLSNkZWZp bmUgVk5fQklUUyAgICAgMjQ3CQkJLyogQml0cyBvZiB0aGlzIGJ1aWxkICgxNiwgMzIsIDY0KSAq LwotI2RlZmluZSBWTl9MQVNURklMICAyNDgJCQkvKiBMYXN0IGlucHV0IGZpbGVzcGVjICovCi0j ZGVmaW5lIFZOX0xBU1RLV1YgIDI0OQkJCS8qIExhc3QgXGZrZXl3b3JkdmFsdWUoKSBrZXl3b3Jk ICovCi0jZGVmaW5lIFZOX0RNU0cgICAgIDI1MAkJCS8qIE1zZyBjb3JyZXNwb25kaW5nIHRvIGRp YWxzdGF0dXMgKi8KLSNkZWZpbmUgVk5fSE9TVElQICAgMjUxCQkJLyogSVAgYWRkcmVzcyBvZiBy ZW1vdGUgaG9zdCAqLwotI2RlZmluZSBWTl9JTlBNU0cgICAyNTIJCQkvKiBNc2cgY29ycmVzcG9u ZGluZyB0byBpbnN0YXR1cyAqLwotI2RlZmluZSBWTl9WQVJFVkFMICAyNTMJCQkvKiBTRVQgVkFS SUFCTEUtRVZBTFVBVElPTiBzZXR0aW5nICovCi0jZGVmaW5lIFZOX1BSRVZDTUQgIDI1NAkJCS8q IFByZXZpb3VzIGNvbW1hbmQgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0vKiBJTlBVVCBzdGF0 dXMgdmFsdWVzICovCi0KLSNkZWZpbmUgSU5QX09LICAwCQkJLyogU3VjY2VlZGVkICovCi0jZGVm aW5lIElOUF9UTyAgMQkJCS8qIFRpbWVkIG91dCAqLwotI2RlZmluZSBJTlBfVUkgIDIJCQkvKiBV c2VyIGludGVycnVwdGVkICovCi0jZGVmaW5lIElOUF9JRSAgMwkJCS8qIEludGVybmFsIGVycm9y ICovCi0jZGVmaW5lIElOUF9JTyAgNAkJCS8qIEkvTyBlcnJvciBvciBjb25uZWN0aW9uIGxvc3Qg Ki8KLSNkZWZpbmUgSU5QX0lLUyA1ICAgICAgICAgICAgICAgICAgICAgICAvKiBLZXJtaXQgU2Vy dmVyIEFjdGl2ZSAqLwotI2RlZmluZSBJTlBfQkYgIDYJCQkvKiBCdWZmZXIgZnVsbCAqLwotCi0v KiBJTlBVVCBzd2l0Y2ggdmFsdWVzICovCi0KLSNkZWZpbmUgSU5QU1dfTk9NIDEJCQkvKiAvTk9N QVRDSCAqLwotI2RlZmluZSBJTlBTV19DTFIgMgkJCS8qIC9DTEVBUiAqLwotI2RlZmluZSBJTlBT V19OT1cgNAkJCS8qIC9OT1dSQVAgKi8KLSNkZWZpbmUgSU5QU1dfQ09VIDgJCQkvKiAvQ09VTlQg Ki8KLQotI2lmbmRlZiBOT1NQTAotLyogU3ltYm9scyBmb3IgYnVpbHRpbiBmdW5jdGlvbnMgKi8K LQotI2RlZmluZSBGTkFSR1MgNgkJCS8qIE1heGltdW0gbnVtYmVyIG9mIGZ1bmN0aW9uIGFyZ3Mg Ki8KLQotI2RlZmluZSBGTl9JTkQgICAgICAwCQkJLyogSW5kZXggKG9mIHN0cmluZyAxIGluIHN0 cmluZyAyKSAqLwotI2RlZmluZSBGTl9MRU4gICAgICAxCQkJLyogTGVuZ3RoIChvZiBzdHJpbmcp ICovCi0jZGVmaW5lIEZOX0xJVCAgICAgIDIJCQkvKiBMaXRlcmFsIChkb24ndCBleHBhbmQgdGhl IHN0cmluZykgKi8KLSNkZWZpbmUgRk5fTE9XICAgICAgMwkJCS8qIExvd2VyIChjb252ZXJ0IHRv IGxvd2VyY2FzZSkgKi8KLSNkZWZpbmUgRk5fTUFYICAgICAgNAkJCS8qIE1heCAobWF4aW11bSkg Ki8KLSNkZWZpbmUgRk5fTUlOICAgICAgNQkJCS8qIE1pbiAobWluaW11bSkgKi8KLSNkZWZpbmUg Rk5fTU9EICAgICAgNgkJCS8qIE1vZCAobW9kdWx1cykgKi8KLSNkZWZpbmUgRk5fRVZBICAgICAg NwkJCS8qIEV2YWwgKGV2YWx1YXRlIGFyaXRoIGV4cHJlc3Npb24pICovCi0jZGVmaW5lIEZOX1NV QiAgICAgIDgJCQkvKiBTdWJzdHIgKHN1YnN0cmluZykgKi8KLSNkZWZpbmUgRk5fVVBQICAgICAg OQkJCS8qIFVwcGVyIChjb252ZXJ0IHRvIHVwcGVyY2FzZSkgKi8KLSNkZWZpbmUgRk5fUkVWICAg ICAgMTAJCQkvKiBSZXZlcnNlIChhIHN0cmluZykgKi8KLSNkZWZpbmUgRk5fUkVQICAgICAgMTEJ CQkvKiBSZXBlYXQgKGEgc3RyaW5nKSAqLwotI2RlZmluZSBGTl9FWEUgICAgICAxMgkJCS8qIEV4 ZWN1dGUgKGEgbWFjcm8pICovCi0jZGVmaW5lIEZOX1ZBTCAgICAgIDEzCQkJLyogUmV0dXJuIHZh bHVlIChvZiBhIG1hY3JvKSAqLwotI2RlZmluZSBGTl9MUEEgICAgICAxNAkJCS8qIExQQUQgKGxl ZnQgcGFkKSAqLwotI2RlZmluZSBGTl9SUEEgICAgICAxNQkJCS8qIFJQQUQgKHJpZ2h0IHBhZCkg Ki8KLSNkZWZpbmUgRk5fREVGICAgICAgMTYJCQkvKiBEZWZpbml0aW9uIG9mIGEgbWFjcm8sIHVu ZXhwYW5kZWQgKi8KLSNkZWZpbmUgRk5fQ09OICAgICAgMTcJCQkvKiBDb250ZW50cyBvZiBhIHZh cmlhYmxlLCBkaXR0byAqLwotI2RlZmluZSBGTl9GSUwgICAgICAxOAkJCS8qIEZpbGUgbGlzdCAq LwotI2RlZmluZSBGTl9GQyAgICAgICAxOQkJCS8qIEZpbGUgY291bnQgKi8KLSNkZWZpbmUgRk5f Q0hSICAgICAgMjAJCQkvKiBDaGFyYWN0ZXIgKGxpa2UgQkFTSUMgQ0hSJCgpKSAqLwotI2RlZmlu ZSBGTl9SSUcgICAgICAyMQkJCS8qIFJpZ2h0IChsaWtlIEJBU0lDIFJJR0hUJCgpKSAqLwotI2Rl ZmluZSBGTl9DT0QgICAgICAyMgkJCS8qIENvZGUgdmFsdWUgb2YgY2hhcmFjdGVyICovCi0jZGVm aW5lIEZOX1JQTCAgICAgIDIzCQkJLyogUmVwbGFjZSAqLwotI2RlZmluZSBGTl9GRCAgICAgICAy NAkJCS8qIEZpbGUgZGF0ZSAqLwotI2RlZmluZSBGTl9GUyAgICAgICAyNQkJCS8qIEZpbGUgc2l6 ZSAqLwotI2RlZmluZSBGTl9SSVggICAgICAyNgkJCS8qIFJpbmRleCAoaW5kZXggZnJvbSByaWdo dCkgKi8KLSNkZWZpbmUgRk5fVkVSICAgICAgMjcJCQkvKiBWZXJpZnkgKi8KLSNkZWZpbmUgRk5f SVBBICAgICAgMjgJCQkvKiBGaW5kIGFuZCByZXR1cm4gSVAgYWRkcmVzcyAqLwotI2RlZmluZSBG Tl9DUlkgICAgICAzOQkJCS8qIC4uLiAqLwotI2RlZmluZSBGTl9PT1ggICAgICA0MAkJCS8qIC4u LiAqLwotI2RlZmluZSBGTl9IRVggICAgICA0MQkJCS8qIEhleGlmeSAqLwotI2RlZmluZSBGTl9V TkggICAgICA0MgkJCS8qIFVuaGV4aWZ5ICovCi0jZGVmaW5lIEZOX0JSSyAgICAgIDQzCQkJLyog QnJlYWsgKi8KLSNkZWZpbmUgRk5fU1BOICAgICAgNDQJCQkvKiBTcGFuICovCi0jZGVmaW5lIEZO X1RSTSAgICAgIDQ1CQkJLyogVHJpbSAqLwotI2RlZmluZSBGTl9MVFIgICAgICA0NgkJCS8qIExl ZnQtVHJpbSAqLwotI2RlZmluZSBGTl9DQVAgICAgICA0NwkJCS8qIENhcGl0YWxpemUgKi8KLSNk ZWZpbmUgRk5fVE9EICAgICAgNDgJCQkvKiBUaW1lLW9mLWRheS10by1zZWNzLXNpbmNlLW1pZG5p dGUgKi8KLSNkZWZpbmUgRk5fU0VDICAgICAgNDkJCQkvKiBTZWNzLXNpbmNlLW1pZG5pdGUtdG8t dGltZS1vZi1kYXkgKi8KLSNkZWZpbmUgRk5fRkZOICAgICAgNTAJCQkvKiBGdWxsIGZpbGUgbmFt ZSAqLwotI2RlZmluZSBGTl9DSEsgICAgICA1MQkJCS8qIENoZWNrc3VtIG9mIHRleHQgKi8KLSNk ZWZpbmUgRk5fQ1JDICAgICAgNTIJCQkvKiBDUkMtMTYgb2YgdGV4dCAqLwotI2RlZmluZSBGTl9C U04gICAgICA1MwkJCS8qIEJhc2VuYW1lIG9mIGZpbGUgKi8KLSNkZWZpbmUgRk5fQ01EICAgICAg NTQJCQkvKiBPdXRwdXQgb2YgYSBjb21tYW5kIChjb29rZWQpICovCi0jZGVmaW5lIEZOX1JBVyAg ICAgIDU1CQkJLyogT3V0cHV0IG9mIGEgY29tbWFuZCAocmF3KSAqLwotI2RlZmluZSBGTl9TVFgg ICAgICA1NgkJCS8qIFN0cmlwIGZyb20gcmlnaHQgKi8KLSNkZWZpbmUgRk5fU1RMICAgICAgNTcJ CQkvKiBTdHJpcCBmcm9tIGxlZnQgKi8KLSNkZWZpbmUgRk5fU1ROICAgICAgNTgJCQkvKiBTdHJp cCBuIGNoYXJzICovCi0jZGVmaW5lIEZOX1NDUk5fQ1ggIDU5CQkJLyogU2NyZWVuIEN1cnNvciBY IFBvcyAqLwotI2RlZmluZSBGTl9TQ1JOX0NZICA2MAkJCS8qIFNjcmVlbiBDdXJzb3IgWSBQb3Mg Ki8KLSNkZWZpbmUgRk5fU0NSTl9TVFIgNjEJCQkvKiBTY3JlZW4gU3RyaW5nICovCi0jZGVmaW5l IEZOXzJIRVggICAgIDYyCQkJLyogTnVtYmVyIChub3Qgc3RyaW5nKSB0byBoZXggKi8KLSNkZWZp bmUgRk5fMk9DVCAgICAgNjMJCQkvKiBOdW1iZXIgKG5vdCBzdHJpbmcpIHRvIG9jdGFsICovCi0j ZGVmaW5lIEZOX1JGSUwgICAgIDY0CQkJLyogUmVjdXJzaXZlIGZpbGUgbGlzdCAqLwotI2RlZmlu ZSBGTl9ESVIgICAgICA2NQkJCS8qIERpcmVjdG9yeSBsaXN0ICovCi0jZGVmaW5lIEZOX1JESVIg ICAgIDY2CQkJLyogUmVjdXJzaXZlIGRpcmVjdG9yeSBsaXN0ICovCi0jZGVmaW5lIEZOX0ROQU0g ICAgIDY3CQkJLyogRGlyZWN0b3J5IHBhcnQgb2YgZmlsZW5hbWUgKi8KLSNkZWZpbmUgRk5fUkFO RCAgICAgNjgJCQkvKiBSYW5kb20gbnVtYmVyICovCi0jZGVmaW5lIEZOX1dPUkQgICAgIDY5CQkJ LyogV29yZCBleHRyYWN0aW9uICovCi0jZGVmaW5lIEZOX1NQTElUICAgIDcwCQkJLyogU3BsaXQg c3RyaW5nIGludG8gd29yZHMgKi8KLSNkZWZpbmUgRk5fS1JCX1RLICAgNzEJCQkvKiBLZXJiZXJv cyB0aWNrZXRzICovCi0jZGVmaW5lIEZOX0tSQl9OWCAgIDcyCQkJLyogS2VyYmVyb3MgbmV4dCB0 aWNrZXQgKi8KLSNkZWZpbmUgRk5fS1JCX0lWICAgNzMJCQkvKiBLZXJiZXJvcyB0aWNrZXQgaXMg dmFsaWQgKi8KLSNkZWZpbmUgRk5fS1JCX1RUICAgNzQJCQkvKiBLZXJiZXJvcyB0aWNrZXQgdGlt ZSAqLwotI2RlZmluZSBGTl9FUlJNU0cgICA3NQkJCS8qIEVycm9yIGNvZGUgdG8gbWVzc2FnZSAq LwotCi0jaWZuZGVmIFVOSVgKLSNpZm5kZWYgVk1TCi0jdW5kZWYgRk5fRVJSTVNHCi0jZW5kaWYg LyogVk1TICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jZGVmaW5lIEZOX0RJTSAgICAgIDc2CQkJ LyogRGltZW5zaW9uIG9mIGFycmF5ICovCi0jZGVmaW5lIEZOX0RUSU0gICAgIDc3CQkJLyogQ29u dmVydCB0byBzdGFuZGFyZCBkYXRlL3RpbWUgKi8KLSNkZWZpbmUgRk5fSkRBVEUgICAgNzgJCQkv KiBSZWd1bGFyIGRhdGUgdG8gZGF5IG9mIHllYXIgKi8KLSNkZWZpbmUgRk5fUE5DVlQgICAgNzkJ CQkvKiBDb252ZXJ0IHBob25lIG51bWJlciBmb3IgZGlhbGluZyAqLwotI2RlZmluZSBGTl9EQVRF SiAgICA4MAkJCS8qIERheSBvZiB5ZWFyIHRvIGRhdGUgKi8KLSNkZWZpbmUgRk5fTUpEICAgICAg ODEJCQkvKiBEYXRlIHRvIG1vZGlmaWVkIEp1bGlhbiBkYXRlICovCi0jZGVmaW5lIEZOX01KRDIg ICAgIDgyCQkJLyogTW9kaWZpZWQgSnVsaWFuIGRhdGUgdG8gZGF0ZSAqLwotI2RlZmluZSBGTl9E QVkgICAgICA4MwkJCS8qIERheSBvZiB3ZWVrIG9mIGdpdmVuIGRhdGUgKi8KLSNkZWZpbmUgRk5f TkRBWSAgICAgODQJCQkvKiBOdW1lcmljIGRheSBvZiB3ZWVrIG9mIGdpdmVuIGRhdGUgKi8KLSNk ZWZpbmUgRk5fVElNRSAgICAgODUJCQkvKiBDb252ZXJ0IHRvIGhoOm1tOnNzICovCi0jZGVmaW5l IEZOX05USU0gICAgIDg2CQkJLyogQ29udmVydCB0byBzZWNvbmRzIHNpbmNlIG1pZG5pdGUgKi8K LSNkZWZpbmUgRk5fTjJUSU0gICAgODcJCQkvKiBTZWMgc2luY2UgbWlkbml0ZSB0byBoaDptbTpz cyAqLwotI2RlZmluZSBGTl9QRVJNICAgICA4OAkJCS8qIFBlcm1pc3Npb25zIG9mIGZpbGUgKi8K LSNkZWZpbmUgRk5fS1JCX0ZHICAgODkJCQkvKiBLZXJiZXJvcyBUaWNrZXQgRmxhZ3MgKi8KLSNk ZWZpbmUgRk5fU0VBUkNIICAgOTAJCQkvKiBTZWFyY2ggZm9yIHBhdHRlcm4gaW4gc3RyaW5nICov Ci0jZGVmaW5lIEZOX1JTRUFSQ0ggIDkxCQkJLyogRGl0dG8sIGJ1dCByaWdodCB0byBsZWZ0ICov Ci0jZGVmaW5lIEZOX1hMQVRFICAgIDkyCQkJLyogVHJhbnNsYXRlIHN0cmluZyBjaGFyc2V0ICov Ci0jZGVmaW5lIEZOX0FMT09LICAgIDkzCQkJLyogQXJyYXkgbG9va3VwICovCi0jZGVmaW5lIEZO X1RMT09LICAgIDk0CQkJLyogVGFibGUgbG9va3VwICovCi0jZGVmaW5lIEZOX1RPQjY0ICAgIDk1 CQkJLyogRW5jb2RlIGludG8gQmFzZTY0ICovCi0jZGVmaW5lIEZOX0ZNQjY0ICAgIDk2CQkJLyog RGVjb2RlIGZyb20gQmFzZTY0ICovCi0KLSNkZWZpbmUgRk5fQUJTICAgICAgOTcJCQkvKiBBYnNv bHV0ZSB2YWx1ZSAqLwotCi0jaWZkZWYgQ0tGTE9BVAotI2RlZmluZSBGTl9GUEFERCAgICA5OAkJ CS8qIEZsb2F0aW5nLXBvaW50IGFkZCAqLwotI2RlZmluZSBGTl9GUFNVQiAgICA5OQkJCS8qIEZs b2F0aW5nLXBvaW50IHN1YnN0cmFjdCAqLwotI2RlZmluZSBGTl9GUE1VTCAgIDEwMAkJCS8qIEZs b2F0aW5nLXBvaW50IG11bHRpcGx5ICovCi0jZGVmaW5lIEZOX0ZQRElWICAgMTAxCQkJLyogRmxv YXRpbmctcG9pbnQgZGl2aWRlICovCi0jZGVmaW5lIEZOX0ZQRVhQICAgMTAyCQkJLyogRmxvYXRp bmctcG9pbnQgZSB0byB0aGUgeCAqLwotI2RlZmluZSBGTl9GUExOICAgIDEwMwkJCS8qIEZsb2F0 aW5nLXBvaW50IG5hdHVyYWwgbG9nICovCi0jZGVmaW5lIEZOX0ZQTE9HICAgMTA0CQkJLyogRmxv YXRpbmctcG9pbnQgYmFzZS0xMCBsb2cgKi8KLSNkZWZpbmUgRk5fRlBQT1cgICAxMDUJCQkvKiBG bG9hdGluZy1wb2ludCByYWlzZSB0byBwb3dlciAqLwotI2RlZmluZSBGTl9GUFNRUiAgIDEwNgkJ CS8qIEZsb2F0aW5nLXBvaW50IHNxdWFyZSByb290ICovCi0jZGVmaW5lIEZOX0ZQQUJTICAgMTA3 CQkJLyogRmxvYXRpbmctcG9pbnQgYWJzb2x1dGUgdmFsdWUgKi8KLSNkZWZpbmUgRk5fRlBNT0Qg ICAxMDgJCQkvKiBGbG9hdGluZy1wb2ludCBtb2R1bHVzICovCi0jZGVmaW5lIEZOX0ZQTUFYICAg MTA5CQkJLyogRmxvYXRpbmctcG9pbnQgbWF4aW11bSAqLwotI2RlZmluZSBGTl9GUE1JTiAgIDEx MAkJCS8qIEZsb2F0aW5nLXBvaW50IG1pbmltdW0qLwotI2RlZmluZSBGTl9GUElOVCAgIDExMQkJ CS8qIEZsb2F0aW5nLXBvaW50IHRvIGludGVnZXIgKi8KLSNkZWZpbmUgRk5fRlBST1UgICAxMTIJ CQkvKiBGbG9hdGluZy1wb2ludCByb3VuZCAqLwotI2RlZmluZSBGTl9GUFNJTiAgIDExMwkJCS8q IEZQIHNpbmUgKi8KLSNkZWZpbmUgRk5fRlBDT1MgICAxMTQJCQkvKiBGUCBjb3NpbmUgKi8KLSNk ZWZpbmUgRk5fRlBUQU4gICAxMTUJCQkvKiBGUCB0YW5nZW50ICovCi0jZW5kaWYgLyogQ0tGTE9B VCAqLwotCi0jaWZkZWYgQ0tDSEFOTkVMSU8KLSNkZWZpbmUgRk5fRlNUQVQgICAxMTYJCQkvKiBG aWxlIHN0YXR1cyAqLwotI2RlZmluZSBGTl9GUE9TICAgIDExNwkJCS8qIEZpbGUgcG9zaXRpb24g Ki8KLSNkZWZpbmUgRk5fRkVPRiAgICAxMTgJCQkvKiBGaWxlIGVvZiAqLwotI2RlZmluZSBGTl9G SUxOTyAgIDExOQkJCS8qIEZpbGUgbnVtYmVyIC8gaGFuZGxlICovCi0jZGVmaW5lIEZOX0ZHQ0hB UiAgMTIwCQkJLyogRmlsZSBnZXRjaGFyICovCi0jZGVmaW5lIEZOX0ZHTElORSAgMTIxCQkJLyog RmlsZSBnZXRsaW5lICovCi0jZGVmaW5lIEZOX0ZHQkxLICAgMTIyCQkJLyogRmlsZSBnZXRibG9j ayAqLwotI2RlZmluZSBGTl9GUENIQVIgIDEyMwkJCS8qIEZpbGUgcHV0Y2hhciAqLwotI2RlZmlu ZSBGTl9GUExJTkUgIDEyNAkJCS8qIEZpbGUgcHV0bGluZSAqLwotI2RlZmluZSBGTl9GUEJMSyAg IDEyNQkJCS8qIEZpbGUgcHV0YmxvY2sgKi8KLSNkZWZpbmUgRk5fTkxJTkUgICAxMjYJCQkvKiBG aWxlIGdldCBjdXJyZW50IGxpbmUgbnVtYmVyICovCi0jZGVmaW5lIEZOX0ZFUk1TRyAgMTI3CQkJ LyogRmlsZSBlcnJvciBtZXNzYWdlICovCi0jZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KLQotI2Rl ZmluZSBGTl9MRUYgICAgIDEyOAkJCS8qIExlZnQgKD0gc3Vic3RyIHN0YXJ0aW5nIG9uIGxlZnQp ICovCi0jZGVmaW5lIEZOX0FBRFVNUCAgMTI5CQkJLyogQXNzb2NpYXRpdmUgQXJyYXkgRHVtcCAq LwotI2RlZmluZSBGTl9TVEIgICAgIDEzMAkJCS8qIFxmc3RyaXBiKCkgICovCi0jZGVmaW5lIEZO X1BBVFRFUk4gMTMxCQkJLyogXGZwYXR0ZXJuKCkgKi8KLSNkZWZpbmUgRk5fSEVYMk4gICAxMzIJ CQkvKiBcZmhleHRvbigpICAqLwotI2RlZmluZSBGTl9PQ1QyTiAgIDEzMwkJCS8qIFxmb2N0dG9u KCkgICovCi0jZGVmaW5lIEZOX0hFWDJJUCAgMTM0CQkJLyogXGZoZXh0b2lwKCkgKi8KLSNkZWZp bmUgRk5fSVAySEVYICAxMzUJCQkvKiBcZmlwdG9oZXgoKSAqLwotI2RlZmluZSBGTl9SQURJWCAg IDEzNgkJCS8qIFxmcmFkaXgoKSAgICovCi0jZGVmaW5lIEZOX0pPSU4gICAgMTM3CQkJLyogXGZq b2luKCkgICAgKi8KLSNkZWZpbmUgRk5fU1VCU1QgICAxMzgJCQkvKiBcZnN1YnN0aXR1dGUoKSAq LwotI2RlZmluZSBGTl9TRVhQICAgIDEzOQkJCS8qIFxmc2V4cHJlc3Npb24oKSAqLwotI2RlZmlu ZSBGTl9DTURTVEsgIDE0MAkJCS8qIFxmY21kc3RhY2soKSAqLwotI2RlZmluZSBGTl9UT0dNVCAg IDE0MQkJCS8qIFxmdG9nbXQoKSAqLwotI2RlZmluZSBGTl9DTVBEQVRFIDE0MgkJCS8qIFxmY21w ZGF0ZXMoKSAqLwotI2RlZmluZSBGTl9ESUZEQVRFIDE0MwkJCS8qIFxmZGlmZmRhdGVzKCkgKi8K LSNpZmRlZiBUQ1BTT0NLRVQKLSNkZWZpbmUgRk5fSFNUQUREICAxNDQJCQkvKiBcZmFkZHIybmFt ZSgpICovCi0jZGVmaW5lIEZOX0hTVE5BTSAgMTQ1CQkJLyogXGZuYW1lMmFkZHIoKSAqLwotI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2RlZmluZSBGTl9ERUxTRUMgIDE0NgkJCS8qIFxmZGVsdGEy c2VjKCkgKi8KLSNkZWZpbmUgRk5fUENfRFUgICAxNDcJCQkvKiBQYXRoIGNvbnZlcnNpb24gRE9T IHRvIFVuaXggKi8KLSNkZWZpbmUgRk5fUENfVlUgICAxNDgJCQkvKiBQYXRoIGNvbnZlcnNpb24g Vk1TIHRvIFVuaXggKi8KLSNkZWZpbmUgRk5fUENfVUQgICAxNDkJCQkvKiBQYXRoIGNvbnZlcnNp b24gVW5peCB0byBET1MgKi8KLSNkZWZpbmUgRk5fUENfVVYgICAxNTAJCQkvKiBQYXRoIGNvbnZl cnNpb24gVW5peCB0byBWTVMgKi8KLSNkZWZpbmUgRk5fS1dWQUwgICAxNTEJCQkvKiBcZmtleXdv cmR2YWx1ZSgpICovCi0jZGVmaW5lIEZOX1NMRUVQICAgMTUyCQkJLyogXGZzbGVlcCgpICovCi0j ZGVmaW5lIEZOX01TTEVFUCAgMTUzCQkJLyogXGZtc2xlZXAoKSAqLwotI2RlZmluZSBGTl9MTkFN RSAgIDE1NAkJCS8qIFxmTG9uZ1BhdGhOYW1lKCkgKFdpbmRvd3MpICovCi0jZGVmaW5lIEZOX1NO QU1FICAgMTU1CQkJLyogXGZTaG9ydFBhdGhOYW1lKCkgKFdpbmRvd3MpICovCi0jZGVmaW5lIEZO X1VOVEFCICAgMTU2CQkJLyogXGZ1bnRhYmlmeSgpICovCi0jZGVmaW5lIEZOX0xPUFggICAgMTU3 CQkJLyogXGZsb3B4KCkgKi8KLSNkZWZpbmUgRk5fRU1BSUwgICAxNTgJCQkvKiBcZmVtYWlsYWRk cmVzcygpICovCi0jZGVmaW5lIEZOX1BJQ1RVUkUgMTU5CQkJLyogXGZwaWN0dXJlaW5mbygpICov Ci0jZGVmaW5lIEZOX1BJRCAgICAgMTYwCQkJLyogXGZwaWRpbmZvKCkgKi8KLSNkZWZpbmUgRk5f Q09VTlQgICAxNjEJCQkvKiBcZmNvdW50KCkgKi8KLSNkZWZpbmUgRk5fRlVOQyAgICAxNjIJCQkv KiBcZmZ1bmN0aW9uKCkgKi8KLSNkZWZpbmUgRk5fUkVDVVJTRSAxNjMJCQkvKiBcZnJlY3Vyc2Uo KSAqLwotI2RlZmluZSBGTl9TUVVFRVpFIDE2NAkJCS8qIFxmc3F1ZWV6ZSgpICovCi0jZGVmaW5l IEZOX1VOUENUICAgMTY1CQkJLyogXGZkZWNvZGVoZXgoKSAqLwotI2RlZmluZSBGTl9TVFJJTkdU IDE2NgkJCS8qIFxmc3RyaW5ndHlwZSgpICovCi0jZGVmaW5lIEZOX1NUUkNNUCAgMTY3CQkJLyog XGZzdHJjbXAoKSAqLwotCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotLyogVGltZSBVbml0cyAqLwot Ci0jZGVmaW5lIFRVX0RBWVMgICAwCi0jZGVmaW5lIFRVX1dFRUtTICAxCi0jZGVmaW5lIFRVX01P TlRIUyAyCi0jZGVmaW5lIFRVX1lFQVJTICAzCi0KLSNpZmRlZiBDS19DVVJTRVMKLS8qIFNjcmVl biBsaW5lIG51bWJlcnMgZm9yIGZ1bGxzY3JlZW4gZmlsZS10cmFuc2ZlciBkaXNwbGF5ICovCi0K LSNkZWZpbmUgQ1dfQkFOICAwCQkJLyogQ3Vyc2VzIFdpbmRvdyBCYW5uZXIgKi8KLSNkZWZpbmUg Q1dfRElSICAyCQkJLyogQ3VycmVudCBkaXJlY3RvcnkgKi8KLSNkZWZpbmUgQ1dfTElOICAzCQkJ LyogQ29tbXVuaWNhdGlvbiBkZXZpY2UgKi8KLSNkZWZpbmUgQ1dfU1BEICA0CQkJLyogQ29tbXVu aWNhdGlvbiBzcGVlZCAqLwotI2RlZmluZSBDV19QQVIgIDUJCQkvKiBQYXJpdHkgKi8KLSNkZWZp bmUgQ1dfVE1PICA2Ci0jZGVmaW5lIENXX05BTSAgNwkJCS8qIEZpbGVuYW1lICovCi0jZGVmaW5l IENXX1RZUCAgOAkJCS8qIEZpbGUgdHlwZSAqLwotI2RlZmluZSBDV19TSVogIDkJCQkvKiBGaWxl IHNpemUgKi8KLSNkZWZpbmUgQ1dfUENEIDEwCQkJLyogUGVyY2VudCBkb25lICovCi0KLSNpZm5k ZWYgQ0tfUENUX0JBUgotI2RlZmluZSBDV19UUiAgMTEJCQkvKiBUaW1lIHJlbWFpbmluZyAqLwot I2RlZmluZSBDV19DUCAgMTIJCQkvKiBDaGFyYWN0ZXJzIHBlciBzZWNvbmQgKi8KLSNkZWZpbmUg Q1dfV1MgIDEzCQkJLyogV2luZG93IHNsb3RzICovCi0jZGVmaW5lIENXX1BUICAxNAkJCS8qIFBh Y2tldCB0eXBlICovCi0jZGVmaW5lIENXX1BDICAxNQkJCS8qIFBhY2tldCBjb3VudCAqLwotI2Rl ZmluZSBDV19QTCAgMTYJCQkvKiBQYWNrZXQgbGVuZ3RoICovCi0jZGVmaW5lIENXX1BSICAxNwkJ CS8qIFBhY2tldCByZXRyeSAqLwotI2lmZGVmIENPTU1FTlQKLSNkZWZpbmUgQ1dfUEIgIDE3CQkJ LyogUGFja2V0IGJsb2NrIGNoZWNrICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2Vsc2UgLyog Q0tfUENUX0JBUiAqLwotI2RlZmluZSBDV19CQVIgMTEJCQkvKiBQZXJjZW50IEJhciBTY2FsZSAq LwotI2RlZmluZSBDV19UUiAgMTIJCQkvKiBUaW1lIHJlbWFpbmluZyAqLwotI2RlZmluZSBDV19D UCAgMTMJCQkvKiBDaGFycyBwZXIgc2VjICovCi0jZGVmaW5lIENXX1dTICAxNAkJCS8qIFdpbmRv dyBzbG90cyAqLwotI2RlZmluZSBDV19QVCAgMTUJCQkvKiBQYWNrZXQgdHlwZSAqLwotI2RlZmlu ZSBDV19QQyAgMTYJCQkvKiBQYWNrZXQgY291bnQgKi8KLSNkZWZpbmUgQ1dfUEwgIDE3CQkJLyog UGFja2V0IGxlbmd0aCAqLwotI2RlZmluZSBDV19QUiAgMTgJCQkvKiBQYWNrZXQgcmV0cnkgKi8K LSNpZmRlZiBDT01NRU5UCi0jZGVmaW5lIENXX1BCICAxOAkJCS8qIFBhY2tldCBibG9jayBjaGVj ayAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBDS19QQ1RfQkFSICovCi0KLSNk ZWZpbmUgQ1dfRVJSIDE5CQkJLyogRXJyb3IgbWVzc2FnZSAqLwotI2RlZmluZSBDV19NU0cgMjAJ CQkvKiBJbmZvIG1lc3NhZ2UgKi8KLSNkZWZpbmUgQ1dfSU5UIDIyCQkJLyogSW5zdHJ1Y3Rpb25z ICovCi0jZGVmaW5lIENXX0ZGQyA5OSAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBDaGFy YWN0ZXJzIFNlbnQvUmVjZWl2ZWQgKi8KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLQotI2lmbmRl ZiBOT0lDUAotLyogU2F2ZSBDb21tYW5kcyAqLwotI2RlZmluZSBYU0tFWSAgIDAJCQkvKiBLZXkg bWFwIGZpbGUgKi8KLSNkZWZpbmUgWFNDTUQgICAxICAgICAgICAgICAgICAgICAgICAgICAvKiBD b21tYW5kIG1vZGUgKi8KLSNkZWZpbmUgWFNURVJNICAyICAgICAgICAgICAgICAgICAgICAgICAv KiBUZXJtaW5hbCBtb2RlICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQotI2lmbmRlZiBOT0RJQUwK LS8qIERpYWwgcm91dGluZSBzb3J0IHByaW9yaXRpZXMgKi8KLSNkZWZpbmUgRE5fSU5URVJOIDAK LSNkZWZpbmUgRE5fRlJFRSAgIDEKLSNkZWZpbmUgRE5fTE9DQUwgIDIKLSNkZWZpbmUgRE5fVU5L ICAgIDMKLSNkZWZpbmUgRE5fTE9ORyAgIDQKLSNkZWZpbmUgRE5fSU5UTCAgIDUKLSNlbmRpZiAv KiBOT0RJQUwgKi8KLQotI2lmZGVmIFNTSEJVSUxUSU4KLSNkZWZpbmUgWFNTSF9PUE4gMQotI2Rl ZmluZSBYU1NIX1YyICAyCi0jZGVmaW5lIFhTU0hfRkxQIDMKLSNkZWZpbmUgWFNTSF9GUlAgNAot I2RlZmluZSBYU1NIX0FERCA1Ci0jZGVmaW5lIFhTU0hfS0VZIDYKLSNkZWZpbmUgWFNTSF9DTFIg NwotI2RlZmluZSBYU1NIX0FHVCA4Ci0KLSNkZWZpbmUgU1NIS1RfMVIgICAwCQkJLyogU1NIIEtF WSBUWVBFIHN5bWJvbHMgKi8KLSNkZWZpbmUgU1NIS1RfMlIgICAxICAgICAgICAgICAgICAgICAg ICAvKiBtdXN0IG1hdGNoIHNzaC9rZXkuaCB2YWx1ZXMgKi8KLSNkZWZpbmUgU1NIS1RfMkQgICAy Ci0jZGVmaW5lIFNTSEtUX1NSUCAgMwotCi0jZGVmaW5lIFNTSEtEX0lOICAgMQkJCS8qIFNTSCBL RVkgRElTUExBWSAvSU4tRk9STUFUICovCi0jZGVmaW5lIFNTSEtEX09VVCAgMgkJCS8qIFNTSCBL RVkgRElTUExBWSAvT1VULUZPUk1BVCAqLwotCi0jZGVmaW5lIFNLREZfT1NTSCAgMQkJCS8qIEtl eSBkaXNwbGF5IGZvcm1hdCBPcGVuU1NIICovCi0jZGVmaW5lIFNLREZfU1NIQyAgMgkJCS8qIEtl eSBkaXNwbGF5IGZvcm1hdCBTU0guQ09NICovCi0jZGVmaW5lIFNLREZfSUVURiAgMwkJCS8qIEtl eSBkaXNwbGF5IGZvcm1hdCBJRVRGICovCi0jZGVmaW5lIFNLREZfRklORyAgNAkJCS8qIEtleSBk aXNwbGF5IGZvcm1hdCBGSU5HRVJQUklOVCAqLwotCi0jZGVmaW5lIFNTSFNXX1VTUiAxCi0jZGVm aW5lIFNTSFNXX1ZFUiAyCi0jZGVmaW5lIFNTSFNXX0NNRCAzCi0jZGVmaW5lIFNTSFNXX1gxMSA0 Ci0jZGVmaW5lIFNTSFNXX1BXRCA1Ci0jZGVmaW5lIFNTSFNXX1NVQiA2Ci0KLSNkZWZpbmUgU1NI Q19MUEYgMQotI2RlZmluZSBTU0hDX1JQRiAyCi0KLSNkZWZpbmUgWFNTSDJfUktFIDEKLQotI2Rl ZmluZSBTU0hGX0xDTCAgIDEKLSNkZWZpbmUgU1NIRl9STVQgICAyCi0KLSNkZWZpbmUgU1NIQV9B REQgICAxCi0jZGVmaW5lIFNTSEFfREVMICAgMgotI2RlZmluZSBTU0hBX0xTVCAgIDMKLQotI2Rl ZmluZSBTU0hBU1dfRlAgMQotCi0jZGVmaW5lIFNTSEtfUEFTUyAgMQotI2RlZmluZSBTU0hLX0NS RUEgIDIKLSNkZWZpbmUgU1NIS19ESVNQICAzCi0jZGVmaW5lIFNTSEtfVjEgICAgNAotCi0jZGVm aW5lIFNTSEtDX0JJICAxCi0jZGVmaW5lIFNTSEtDX1BQICAyCi0jZGVmaW5lIFNTSEtDX1RZICAz Ci0jZGVmaW5lIFNTSEtDXzFSICA0Ci0KLSNkZWZpbmUgU0tSTV9PUE4gIDEKLSNlbmRpZiAvKiBT U0hCVUlMVElOICovCi0KLSNpZmRlZiBTRlRQX0JVSUxUSU4KLSNkZWZpbmUgU0ZUUF9PUE4gICAg MQotI2RlZmluZSBTRlRQX0NEICAgICAyCi0jZGVmaW5lIFNGVFBfQ0hHUlAgIDMKLSNkZWZpbmUg U0ZUUF9DSE1PRCAgNAotI2RlZmluZSBTRlRQX0NIT1dOICA1Ci0jZGVmaW5lIFNGVFBfRElSICAg IDYKLSNkZWZpbmUgU0ZUUF9HRVQgICAgNwotI2RlZmluZSBTRlRQX01LRElSICA4Ci0jZGVmaW5l IFNGVFBfUFdEICAgIDkKLSNkZWZpbmUgU0ZUUF9QVVQgICAgMTAKLSNkZWZpbmUgU0ZUUF9SRU4g ICAgMTEKLSNkZWZpbmUgU0ZUUF9STSAgICAgMTIKLSNkZWZpbmUgU0ZUUF9STURJUiAgMTMKLSNk ZWZpbmUgU0ZUUF9MSU5LICAgMTQKLSNkZWZpbmUgU0ZUUF9WRVIgICAgMTUKLQotI2RlZmluZSBY WV9TRlRQX1JDUyAxCi0jZGVmaW5lIFhZX1NGVFBfRU9MIDIKLSNlbmRpZiAvKiBTRlRQX0JVSUxU SU4gKi8KLQotLyogQU5TSS1DIHByb3RvdHlwZXMgZm9yIHVzZXIgaW50ZXJmYWNlIGZ1bmN0aW9u cyAqLwotCi0jaWZkZWYgVU5JWAotX1BST1RPVFlQKCBpbnQgZG9wdXRlbnYsICggY2hhciAqLCBj aGFyICogKSApOwotI2VuZGlmCS8qIFVOSVggKi8KLQotX1BST1RPVFlQKCBpbnQgY2hrYWVzLCAo IGNoYXIsIGludCApICk7Ci0KLSNpZm5kZWYgTk9JQ1AKLV9QUk9UT1RZUCggaW50IG1hdGNobmFt ZSwgKCBjaGFyICosIGludCwgaW50ICkgKTsKLV9QUk9UT1RZUCggaW50IGNrX2NscywgKCB2b2lk ICkgKTsKLV9QUk9UT1RZUCggaW50IGNrX2NsZW9sLCAoIHZvaWQgKSApOwotX1BST1RPVFlQKCBp bnQgY2tfY3VycG9zLCAoIGludCwgaW50ICkgKTsKLV9QUk9UT1RZUCggaW50IGNtZHNyYywgKCB2 b2lkICkgKTsKLV9QUk9UT1RZUCggaW50IHBhcnNlciwgKCBpbnQgKSApOwotX1BST1RPVFlQKCBp bnQgY2hrdmFyLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgenpzdHJpbmcsIChjaGFyICos IGNoYXIgKiosIGludCAqKSApOwotI2lmbmRlZiBOT0ZSSUxMUwotX1BST1RPVFlQKCBpbnQgeXlz dHJpbmcsIChjaGFyICosIGNoYXIgKiopICk7Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLV9QUk9U T1RZUCggaW50IGdldG5jbSwgKGNoYXIgKiwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgZ2V0bmN0 LCAoY2hhciAqLCBpbnQsIEZJTEUgKiwgaW50KSApOwotI2VuZGlmIC8qIE5PSUNQICovCi1fUFJP VE9UWVAoIFZPSUQgYmdjaGssICh2b2lkKSApOwotX1BST1RPVFlQKCBjaGFyICogbnZsb29rLCAo Y2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgeGFycmF5LCAoY2hhciAqKSApOwotX1BST1RPVFlQ KCBpbnQgYXJyYXluYW0sIChjaGFyICosIGludCAqLCBpbnQgKikgKTsKLV9QUk9UT1RZUCggaW50 IGFycmF5Ym91bmRzLCAoY2hhciAqLCBpbnQgKiwgaW50ICopICk7Ci1fUFJPVE9UWVAoIGludCBi b3VuZHNwYWlyLCAoY2hhciAqLCBjaGFyICosIGludCAqLCBpbnQgKiwgY2hhciAqKSApOwotX1BS T1RPVFlQKCBpbnQgYXJyYXlpdG9hLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgYXJyYXlhdG9p LCAoaW50KSApOwotX1BST1RPVFlQKCBjaGFyICogYmxkbGVuLCAoY2hhciAqLCBjaGFyICopICk7 Ci1fUFJPVE9UWVAoIGludCBjaGthcnJheSwgKGludCwgaW50KSApOwotX1BST1RPVFlQKCBpbnQg ZGNsYXJyYXksIChjaGFyLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBwdXNoYXJyYXksIChpbnQs IGludCkgKTsKLV9QUk9UT1RZUCggaW50IHBhcnNldmFyLCAoY2hhciAqLCBpbnQgKiwgaW50ICop ICk7Ci1fUFJPVE9UWVAoIGludCBtYWNpbmksICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIGlu aXRtYWMsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgZGVsbWFjLCAoY2hhciAqLCBpbnQpICk7 Ci1fUFJPVE9UWVAoIGludCBhZGRtYWMsIChjaGFyICosIGNoYXIgKikgKTsKLV9QUk9UT1RZUCgg aW50IGRvbWFjLCAoY2hhciAqLCBjaGFyICosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IGFkZG1t YWMsIChjaGFyICosIGNoYXIgKltdKSApOwotX1BST1RPVFlQKCBpbnQgZG9idWcsICh2b2lkKSAp OwotX1BST1RPVFlQKCBpbnQgZG9jZCwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IGRvY2xzbG9n LCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgZG9jbWQsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGlu dCBkb2RpciwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IGRvZG8sIChpbnQsIGNoYXIgKiwgaW50 KSApOwotX1BST1RPVFlQKCBpbnQgZG9lbmFibGUsIChpbnQsIGludCkgKTsKLV9QUk9UT1RZUCgg aW50IGRvZ290bywgKGNoYXIgKiwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgZG9ndGEsIChpbnQp ICk7Ci1fUFJPVE9UWVAoIGludCBkb2hscCwgKGludCkgKTsKLV9QUk9UT1RZUCAoaW50IGRvaW5j ciwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IGRvaHJtdCwgKGludCkgKTsKLV9QUk9UT1RZUCgg aW50IGRvaWYsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBkb2lucHV0LCAoaW50LCBjaGFyICpb XSwgaW50W10sIGludCwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgZG9yZWlucCwgKGludCwgY2hh ciAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBkb2xvZywgKGludCkgKTsKLV9QUk9UT1RZUCgg aW50IGRvbG9naW4sIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBkb29wZW4sICh2b2lkKSAp OwotX1BST1RPVFlQKCBpbnQgZG9wcm0sIChpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IGRv cmV0dXJuLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgZG9ybXQsIChpbnQpICk7Ci1fUFJP VE9UWVAoIGludCBkb3NvcnQsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgZG9zdGF0LCAoaW50 KSApOwotX1BST1RPVFlQKCBpbnQgZG9zdG9wLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGRv dHlwZSwgKGNoYXIgKiwgaW50LCBpbnQsIGludCwgY2hhciAqLCBpbnQsIGNoYXIgKiwgaW50LCBp bnQsCi0JCQljaGFyICosIGludCkpOwotX1BST1RPVFlQKCBpbnQgdHJhbnNtaXQsIChjaGFyICos IGNoYXIsIGludCwgaW50LCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCB4bGF0ZSwgKGNoYXIgKiwg Y2hhciAqLCBpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IGxpdGNtZCwgKGNoYXIgKiosIGNo YXIgKiosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IGluY3ZhciwgKGNoYXIgKiwgQ0tfT0ZGX1Qs IGludCkgKTsKLV9QUk9UT1RZUCggaW50IGNrZGlhbCwgKGNoYXIgKiwgaW50LCBpbnQsIGludCwg aW50KSApOwotX1BST1RPVFlQKCBpbnQgaG1zZywgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50 IGhtc2dhLCAoY2hhciAqIFtdKSApOwotX1BST1RPVFlQKCBpbnQgbWxvb2ssIChzdHJ1Y3QgbXRh YiBbXSwgY2hhciAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBteGxvb2ssIChzdHJ1Y3QgbXRh YiBbXSwgY2hhciAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBteHhsb29rLCAoc3RydWN0IG10 YWIgW10sIGNoYXIgKiwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgcHJ0b3B0LCAoaW50ICosIGNo YXIgKikgKTsKLV9QUk9UT1RZUCggQ0hBUiByZmlsb3AsIChjaGFyICosIGNoYXIpICk7Ci1fUFJP VE9UWVAoIGludCBzZXRjYywgKGNoYXIgKiwgaW50ICopICk7Ci1fUFJPVE9UWVAoIGludCBzZXRu dW0sIChpbnQgKiwgaW50LCBpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IHNldG9uLCAoaW50 ICopICk7Ci1fUFJPVE9UWVAoIGludCBzZXRvbmF1dCwgKGludCAqKSApOwotX1BST1RPVFlQKCBW T0lEIHNobWRtbGluLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBpbml0bWRtLCAoaW50KSAp OwotX1BST1RPVFlQKCBjaGFyICogc2hvd29mZiwgKGludCkgKTsKLV9QUk9UT1RZUCggY2hhciAq IHNob3dvb2EsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBzaG93c3RyaW5nLCAoY2hhciAq KSApOwotX1BST1RPVFlQKCBpbnQgcGt0b3BuLCAoY2hhciAqLGludCkgKTsKLV9QUk9UT1RZUCgg aW50IHRyYW9wbiwgKGNoYXIgKixpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBzZXNvcG4sIChjaGFy ICosaW50KSApOwotX1BST1RPVFlQKCBpbnQgZGVib3BuLCAoY2hhciAqLGludCkgKTsKLV9QUk9U T1RZUCggaW50IGRpYW9wbiwgKGNoYXIgKixpbnQsaW50KSApOwotX1BST1RPVFlQKCBpbnQgcHJl cG9wLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHBvcGNsdmwsICh2b2lkKSApOwotX1BST1RP VFlQKCBpbnQgdmFydmFsLCAoY2hhciAqLCBDS19PRkZfVCAqKSApOwotX1BST1RPVFlQKCBjaGFy ICogZXZhbGEsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBldmFseCwgKGNoYXIgKikg KTsKLV9QUk9UT1RZUCggaW50IHNldGFsYXJtLCAobG9uZykgKTsKLV9QUk9UT1RZUCggaW50IHNl dGF0LCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgc2V0aW5wLCAodm9pZCkgKTsKLV9QUk9UT1RZ UCggVk9JRCBkb2xvZ25ldCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgZG9sb2dsaW5lLCAo dm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHNldGxpbiwgKGludCwgaW50LCBpbnQpICk7Ci1fUFJP VE9UWVAoIGludCBzZXRtb2RlbSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBzZXRmaWwsIChp bnQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBob21lcGF0aCwgKHZvaWQpICk7Ci0jaWZkZWYgT1My Ci1fUFJPVE9UWVAoIGludCBzZXR0YXBpLCAodm9pZCkgKSA7Ci0jaWZkZWYgT1MyTU9VU0UKLV9Q Uk9UT1RZUCggaW50IHNldG1vdSwgKHZvaWQpICk7Ci0jZW5kaWYgLyogT1MyTU9VU0UgKi8KLSNl bmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBMT0NVUwotX1BST1RPVFlQKCBWT0lEIHNldGxvY3VzLCAo aW50LGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCBzZXRhdXRvbG9jdXMsIChpbnQpICk7Ci0jZW5k aWYgLyogTE9DVVMgKi8KLV9QUk9UT1RZUCggaW50IHNldGJlbGwsICh2b2lkKSApOwotX1BST1RP VFlQKCBWT0lEIHNldGNtYXNrLCAoaW50KSk7Ci1fUFJPVE9UWVAoIFZPSUQgc2V0YXV0b2RsLCAo aW50LGludCkpOwotX1BST1RPVFlQKCBWT0lEIHNldGRlYnNlcywgKGludCkpOwotX1BST1RPVFlQ KCBWT0lEIHNldHNlc2xvZywgKGludCkpOwotX1BST1RPVFlQKCBWT0lEIHNldGFwcmludCwgKGlu dCkpOwotX1BST1RPVFlQKCBpbnQgc2V0dHJtLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHNl dHRybXR5cCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBzZXRzciwgKGludCwgaW50KSApOwot X1BST1RPVFlQKCBpbnQgc2V0eG1pdCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBkb3NldGtl eSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBkb2NoaywgKHZvaWQpICk7Ci1fUFJPVE9UWVAo IGludCBsdWRpYWwsIChjaGFyICosIGludCkgKTsKLV9QUk9UT1RZUCggY2hhciAqIGdldGRudW0s IChpbnQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgZ2V0bmV0ZW52LCAodm9pZCkgKTsKLV9QUk9UT1RZ UCggaW50IGdldHllc25vLCAoY2hhciAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgeHdvcmRz LCAoY2hhciAqLCBpbnQsIGNoYXIgKltdLCBpbnQpICk7Ci0jaWZkZWYgT1MyCi1fUFJPVE9UWVAo IFZPSUQga2V5bmFtaW5pdCwgKHZvaWQpICk7Ci0jZW5kaWYgLyogT1MyICovCi1fUFJPVE9UWVAo IGludCB4bG9va3VwLCAoc3RydWN0IGtleXRhYltdLCBjaGFyICosIGludCwgaW50ICopICk7Ci1f UFJPVE9UWVAoIGNoYXIgKiBybG9va3VwLCAoc3RydWN0IGtleXRhYltdLCBpbnQsIGludCkgKTsK LV9QUk9UT1RZUCggaW50IGh1cG9rLCAoaW50KSApOwotX1BST1RPVFlQKCBjaGFyICogenpuZGF0 ZSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiB6amRhdGUsIChjaGFyICopICk7Ci1fUFJP VE9UWVAoIGNoYXIgKiBqemRhdGUsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBja2Rh dGUsICh2b2lkKSApOwotX1BST1RPVFlQKCBjaGFyICogY2hrX2FjLCAoaW50LCBjaGFyW10pICk7 Ci1fUFJPVE9UWVAoIGNoYXIgKiBnbWRtdHlwLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggY2hhciAq IGdmbW9kZSwgKGludCwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgc2V0ZGVzdCwgKHZvaWQpICk7 Ci1fUFJPVE9UWVAoIFZPSUQgbmRpbml0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGRvc3dp dGNoLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGRvbG9jYWwsICh2b2lkKSApOwotX1BST1RP VFlQKCBsb25nIHRvZDJzZWMsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBsdW5ldCwgKGNo YXIgKikgKTsKLV9QUk9UT1RZUCggaW50IGRveGRpcywgKGludCkgKTsKLV9QUk9UT1RZUCggaW50 IGRvc2F2ZSwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IGRveHNlbmQsIChpbnQpICk7Ci1fUFJP VE9UWVAoIGludCBkb3hnZXQsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBkb3hjb25uLCAoaW50 KSApOwotX1BST1RPVFlQKCBpbnQgY2xzY29ubngsIChpbnQpICk7Ci1fUFJPVE9UWVAoIFZPSUQg ZnRyZXNldCwgKHZvaWQpICk7Ci0jaWZkZWYgQ0tfS0VSQkVST1MKLV9QUk9UT1RZUCAoaW50IGNw X2F1dGgsICggdm9pZCApICk7Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLV9QUk9UT1RZUCgg bG9uZyBtamQsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBtamQyZGF0ZSwgKGxvbmcp ICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBja2dldHBpZCwgKHZvaWQpICk7Ci0KLV9QUk9UT1RZUCgg aW50IGRvZ3JlcCwgKHZvaWQpICk7Ci0KLSNpZm5kZWYgTk9GVFAKLSNpZm5kZWYgU1lTRlRQCi1f UFJPVE9UWVAoIGludCBkb3hmdHAsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgZG9mdHBobHAs ICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgZG9zZXRmdHAsICh2b2lkKSApOwotX1BST1RPVFlQ KCBpbnQgZG9zZXRmdHBobHAsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgc2hvZnRwLCAoaW50 KSApOwotI2VuZGlmIC8qIFNZU0ZUUCAqLwotI2VuZGlmIC8qIE5PRlRQICovCi0KLV9QUk9UT1RZ UCggVk9JRCBjbWhpc3RvcnksICh2b2lkKSApOwotX1BST1RPVFlQKCBjaGFyICogZ2V0ZGNzZXQs ICh2b2lkKSApOwotX1BST1RPVFlQKCBjaGFyICogdHRndHBuLCAodm9pZCkgKTsKLQotI2lmbmRl ZiBOT1NIT1cKLV9QUk9UT1RZUCggaW50IGRvc2hvdywgKGludCkgKTsKLV9QUk9UT1RZUCggaW50 IHNob3RjcCwgKGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCBzaG9wYXIsICh2b2lkKSApOwotX1BS T1RPVFlQKCBWT0lEIHNob2ZpbCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgc2hvcGFycCwg KHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBzaG9hdHQsICh2b2lkKSApOwotX1BST1RPVFlQKCBW T0lEIHNob3ZlciwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgc2hvY3RsLCAodm9pZCkgKTsK LV9QUk9UT1RZUCggVk9JRCBzaG9kYmwsICh2b2lkKSApOwotI2lmbmRlZiBOT1NQTAotX1BST1RP VFlQKCBpbnQgc2hvbWFjLCAoY2hhciAqLCBjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBkb3No aWZ0LCAoaW50KSApOwotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIE5PQ1NFVFMKLV9QUk9U T1RZUCggVk9JRCBzaG9jaGFyc2V0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBzaG9wYXJs LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBzaG90Y3MsIChpbnQsIGludCkgKTsKLSNlbmRp ZiAvKiBOT0NTRVRTICovCi0jaWZuZGVmIE5PTE9DQUwKLV9QUk9UT1RZUCggVk9JRCBzaG9wYXJj LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHNob21vZGVtLCAodm9pZCkgKTsKLSNpZm5kZWYg Tk9ESUFMCi1fUFJPVE9UWVAoIFZPSUQgc2hvZHMsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIFZP SUQgc2hvZGlhbCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBkb3Nob2RpYWwsICh2b2lkKSAp OwotI2VuZGlmIC8qIE5PRElBTCAqLwotI2lmbmRlZiBOT05FVAotX1BST1RPVFlQKCBpbnQgc2hv bmV0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHNob3RvcHQsIChpbnQpICk7Ci1fUFJPVE9U WVAoIGludCBzaG90ZWwsIChpbnQpICk7Ci0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLV9QUk9U T1RZUCAoaW50IHNob19hdXRoLCggaW50ICApICk7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJ T04gKi8KLSNlbmRpZiAvKiBOT05FVCAqLwotX1BST1RPVFlQKCBWT0lEIHNob21kbSwgKHZvaWQp ICk7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmZGVmIE9TMgotX1BST1RPVFlQKCBWT0lEIHNo b2tleWNvZGUsIChpbnQsaW50KSApOwotI2Vsc2UKLV9QUk9UT1RZUCggVk9JRCBzaG9rZXljb2Rl LCAoaW50KSApOwotI2VuZGlmIC8qIE9TMiAqLwotX1BST1RPVFlQKCBWT0lEIHNob3dhc3NvYywg KHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgc2hvd2Rpcm9wdHMsICh2b2lkKSApOwotX1BST1RP VFlQKCBWT0lEIHNob3dkZWxvcHRzLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBzaG93dHlw b3B0cywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgc2hvd3B1cmdvcHRzLCAodm9pZCkgKTsK LV9QUk9UT1RZUCggVk9JRCBzaG9mbG93LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBzaG94 ZmVyLCAodm9pZCkgKTsKLSNpZmRlZiBBTllTU0gKLV9QUk9UT1RZUCggVk9JRCBzaG9zc2gsICh2 b2lkKSApOwotI2VuZGlmCS8qIEFOWVNTSCAqLwotI2VuZGlmIC8qIE5PU0hPVyAqLwotCi1fUFJP VE9UWVAoIFZPSUQgc2hvc3RyZGVmLCAoQ0hBUiAqKSApOwotCi0jaWZuZGVmIE5PU1BMCi1fUFJP VE9UWVAoIGludCBhZGRsb2NhbCwgKGNoYXIgKikgKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1f UFJPVE9UWVAoIGludCBzZXRkZWxvcHRzLCAodm9pZCkgKTsKLQotI2lmZGVmIFZNUwotX1BST1RP VFlQKCBpbnQgY3Z0ZGlyLCAoY2hhciAqLCBjaGFyICosIGludCkgKTsKLSNlbmRpZiAvKiBWTVMg Ki8KLQotI2lmZGVmIEZORkxPQVQKLV9QUk9UT1RZUCggVk9JRCBpbml0ZmxvYXQsICh2b2lkKSAp OwotI2VuZGlmIC8qIEZORkxPQVQgKi8KLQotI2lmZGVmIENLQ0hBTk5FTElPCi1fUFJPVE9UWVAo IGludCBkb2ZpbGUsIChpbnQpICk7Ci0jZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KLQotI2lmZGVm IENLUk9PVAotX1BST1RPVFlQKCBpbnQgZG9jaHJvb3QsICh2b2lkKSApOwotI2VuZGlmIC8qIENL Uk9PVCAqLwotCi0jaWZkZWYgTkVXRlRQCi1fUFJPVE9UWVAoIGludCBkb2Z0cHVzciwgICAgKHZv aWQpICk7Ci1fUFJPVE9UWVAoIGludCBkb2Z0cHB1dCwgICAgKGludCxpbnQpICk7Ci1fUFJPVE9U WVAoIGludCBkb2Z0cGdldCwgICAgKGludCxpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBkb2Z0cHJt dCwgICAgKGludCxpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBmdHBvcGVuLCAgICAgKGNoYXIgKiwg Y2hhciAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBjbWRsaW5nZXQsICAgKGludCkgKTsKLV9Q Uk9UT1RZUCggaW50IGNtZGxpbnB1dCwgICAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgZG9mdHBh cmcsICAgIChjaGFyKSApOwotX1BST1RPVFlQKCBpbnQgZG9mdHBhY2N0LCAgICh2b2lkKSApOwot X1BST1RPVFlQKCBpbnQgZG9mdHBzaXRlLCAgICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgZG9z ZXRmdHBwc3YsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgZnRwYnllLCAgICAgICh2b2lkKSAp OwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyogVGhlc2UgcHJvdG90 eXBlcyBhcmUgbm8gbG9uZ2VyIHVzZWQgKi8KLV9QUk9UT1RZUCggY2hhciAqIGdldGR3cywgKGlu dCkgKTsKLV9QUk9UT1RZUCggY2hhciAqIGdldGRjcywgKGludCkgKTsKLV9QUk9UT1RZUCggaW50 IGRvZ2V0LCAoaW50KSApOwotX1BST1RPVFlQKCBjaGFyICogYXJyYXl2YWwsIChpbnQsIGludCkg KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBLVUkKLV9QUk9UT1RZUChpbnQgQnVp bGRGb250VGFibGUsCi0gICAgICAgICAgKHN0cnVjdCBrZXl0YWIgKiogcFRhYmxlLCBzdHJ1Y3Qg a2V5dGFiICoqIHBUYWJsZTIsIGludCAqIHBOKSk7Ci0jZW5kaWYgLyogS1VJICovCi0KLV9QUk9U T1RZUChpbnQgY3hfbmV0LCAoaW50IG5ldCwgaW50IHByb3RvY29sLCBjaGFyICogeGhvc3QsIGNo YXIgKiBzdmMsIAotICAgICAgICBjaGFyICogdXNlcm5hbWUsIGNoYXIgKiBwYXNzd29yZCwgY2hh ciAqIGNvbW1hbmQsCi0gICAgICAgIGludCBwYXJhbTEsIGludCBwYXJhbTIsIGludCBwYXJhbTMs IAotICAgICAgICBpbnQgY3gsIGludCBzeCwgaW50IGZsYWcsIGludCBndWkpKTsKLV9QUk9UT1RZ UChpbnQgY3hfc2VyaWFsLCAoY2hhciAqZGV2aWNlLCAKLSAgICAgICAgaW50IGN4LCBpbnQgc3gs IGludCBzaHIsIGludCBmbGFnLCBpbnQgZ3VpLCBpbnQgc3BlY2lhbCkpOwotCi0jZW5kaWYgLyog Q0tVVVNSX0ggKi8KLQotLyogRW5kIG9mIGNrdXVzci5oICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3guYyBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXN4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDRjNDY0ZjcuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja3V1c3guYworKysgL2Rldi9udWxsCkBAIC0xLDk3MjEgKzAsMCBAQAotI2lu Y2x1ZGUgImNrY3N5bS5oIgotCi0vKiAgQyBLIFUgVSBTIFggLS0gICJVc2VyIEludGVyZmFjZSIg Y29tbW9uIGZ1bmN0aW9ucy4gKi8KLQotLyoKLSAgQXV0aG9yczoKLSAgICBGcmFuayBkYSBDcnV6 IDxmZGNAY29sdW1iaWEuZWR1PiwKLSAgICAgIFRoZSBLZXJtaXQgUHJvamVjdCwgQ29sdW1iaWEg VW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eQotICAgIEplZmZyZXkgRSBBbHRtYW4gPGphbHRtYW5A c2VjdXJlLWVuZHBvaW50cy5jb20+Ci0gICAgICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZ b3JrIENpdHkKLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCi0gICAgVHJ1c3RlZXMgb2Yg Q29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmln aHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQot ICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIg YW5kIHBlcm1pc3Npb25zLgotKi8KLQotLyoKLSAgVGhpcyBtb2R1bGUgY29udGFpbnMgdXNlciBp bnRlcmZhY2UgZnVuY3Rpb25zIG5lZWRlZCBieSBib3RoIHRoZSBpbnRlcmFjdGl2ZQotICB1c2Vy IGludGVyZmFjZSBhbmQgdGhlIGNvbW1hbmQtbGluZS1vbmx5IHVzZXIgaW50ZXJmYWNlLCBhcyB3 ZWxsIGFzIHRoZQotICBzY3JlZW4tY29udHJvbCByb3V0aW5lcyAoY3Vyc2VzIGFuZCBlcXVpdmFs ZW50KS4KLSovCi0KLS8qIEluY2x1ZGVzICovCi0KLSNpbmNsdWRlICJja2NkZWIuaCIKLSNpbmNs dWRlICJja2Nhc2MuaCIKLSNpbmNsdWRlICJja2NrZXIuaCIKLSNpbmNsdWRlICJja3V1c3IuaCIK LSNpbmNsdWRlICJja2N4bGEuaCIKLQotI2lmbmRlZiBOT0hURVJNQ0FQCi0jaWZkZWYgTk9URVJN Q0FQCi0jZGVmaW5lIE5PSFRFUk1DQVAKLSNlbHNlCi0jaWZuZGVmIEJTRDQ0Ci0jZGVmaW5lIE5P SFRFUk1DQVAKLSNlbHNlCi0jaWZkZWYgX19ic2RpX18KLSNkZWZpbmUgTk9IVEVSTUNBUAotI2Vs c2UKLSNpZmRlZiBPUEVOQlNECi0jZGVmaW5lIE5PSFRFUk1DQVAKLSNlbHNlCi0jaWZkZWYgTUFD T1NYCi0jZGVmaW5lIE5PSFRFUk1DQVAKLSNlbmRpZiAvKiBNQUNPU1ggKi8KLSNlbmRpZiAvKiBP UEVOQlNEICovCi0jZW5kaWYgLyogX19ic2RpX18gKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2Vu ZGlmIC8qIE5PVEVSTUNBUCAqLwotI2VuZGlmIC8qIE5PSFRFUk1DQVAgKi8KLQotI2lmbmRlZiBO T1RFUk1DQVAKLSNpZmRlZiBCU0Q0NAotI2lmbmRlZiBOT0hURVJNQ0FQCi0jaW5jbHVkZSA8dGVy bWNhcC5oPgotI2VuZGlmIC8qIE5PSFRFUk1DQVAgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2Vs c2UgIC8qICFCU0Q0NCAqLwotI2lmZGVmIGxpbnV4Ci0jaW5jbHVkZSA8dGVybS5oPgotI2VuZGlm IC8qIGxpbnV4ICovCi0jZW5kaWYgLyogTk9URVJNQ0FQICovCi0KLSNpZmRlZiBPUzIKLSNpbmNs dWRlIDxzdHJpbmcuaD4KLV9QUk9UT1RZUChjaGFyICogb3MyX2dldGhvc3RuYW1lLCAodm9pZCkp OwotI2RlZmluZSBnZXRwaWQgX2dldHBpZAotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIEJTRDQ0 Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNlbmRpZiAvKiBCU0Q0NCAqLwotCi1leHRlcm4geHhfc3Ry cCB4eHN0cmluZzsKLQotI2lmZGVmIE9TMgotI2luY2x1ZGUgImNrY25ldC5oIgotI2Vsc2UgLyog T1MyICovCi1fUFJPVE9UWVAoIGNoYXIgKiBja2dldHBlZXIsIChWT0lEKSk7Ci1fUFJPVE9UWVAo aW50IGdldGxvY2FsaXBhZGRyLCAodm9pZCkpOwotX1BST1RPVFlQKGludCBpc3RuY29tcG9ydCwg KHZvaWQpKTsKLSNpZm5kZWYgTk9DS0dFVEZRSE9TVAotX1BST1RPVFlQKCBjaGFyICogY2tnZXRm cWhvc3RuYW1lLChjaGFyICopKTsKLSNlbmRpZgkvKiBOT0NLR0VURlFIT1NUICovCi0jaWZuZGVm IE5FVENPTk4KLS8qCi0gIFdlIHNob3VsZCBqdXN0IHB1bGwgaW4gY2tjbmV0LmggaGVyZSwgYnV0 IGl0IGNhdXNlcyBhIGNvbmZsaWN0IHdpdGggY3Vyc2VzLmguCi0qLwotI2lmZGVmIFRDUFNPQ0tF VAotI2RlZmluZSBORVRDT05OCi0jZWxzZQotI2lmZGVmIFNVTlgyNQotI2RlZmluZSBORVRDT05O Ci0jZWxzZQotI2lmZGVmIFNUUkFUVVNYMjUKLSNkZWZpbmUgTkVUQ09OTgotI2Vsc2UKLSNpZmRl ZiBJQk1YMjUKLSNkZWZpbmUgTkVUQ09OTgotI2Vsc2UKLSNpZmRlZiBIUFgyNQotI2RlZmluZSBO RVRDT05OCi0jZWxzZQotI2lmZGVmIERFQ05FVAotI2RlZmluZSBORVRDT05OCi0jZWxzZQotI2lm ZGVmIE5QSVBFCi0jZGVmaW5lIE5FVENPTk4KLSNlbHNlCi0jaWZkZWYgQ0tfTkVUQklPUwotI2Rl ZmluZSBORVRDT05OCi0jaWZkZWYgU1VQRVJMQVQKLSNkZWZpbmUgTkVUQ09OTgotI2Vsc2UKLSNl bmRpZiAvKiBTVVBFUkxBVCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIFNV TlgyNSAqLwotI2VuZGlmIC8qIFNUUkFUVVNYMjUgKi8KLSNlbmRpZiAvKiBJQk1YMjUgKi8KLSNl bmRpZiAvKiBIUFgyNSAqLwotI2VuZGlmIC8qIERFQ05FVCAqLwotI2VuZGlmIC8qIE5QSVBFICov Ci0jZW5kaWYgLyogQ0tfTkVUQklPUyAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNlbmRpZiAv KiBPUzIgKi8KLQotI2lmbmRlZiBUQ1BTT0NLRVQKLSNpZmRlZiBNVUxUSU5FVAotI2RlZmluZSBU Q1BTT0NLRVQKLSNlbmRpZiAvKiBNVUxUSU5FVCAqLwotI2lmZGVmIERFQ19UQ1BJUAotI2RlZmlu ZSBUQ1BTT0NLRVQKLSNlbmRpZiAvKiBERUNfVENQSVAgKi8KLSNpZmRlZiBXSU5UQ1AKLSNkZWZp bmUgVENQU09DS0VUCi0jZW5kaWYgLyogV0lOVENQICovCi0jaWZkZWYgVENQV0FSRQotI2RlZmlu ZSBUQ1BTT0NLRVQKLSNlbmRpZiAvKiBUQ1BXQVJFICovCi0jZW5kaWYgLyogVENQU09DS0VUICov Ci0KLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRl IDx0YXBpLmg+Ci0jaW5jbHVkZSAiY2tudGFwLmgiCi0jZWxzZSAvKiBOVCAqLwotI2RlZmluZSBJ TkNMX1ZJTwotI2luY2x1ZGUgPG9zMi5oPgotI2VuZGlmIC8qIE5UICovCi0jaWZkZWYgQ09NTUVO VCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV291bGQgeW91IGJlbGlldmUgKi8KLSN1bmRl ZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA8b3MyLmg+IGRlZmluZXMgdGhp cyA/ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmZGVmIENLX05FVEJJT1MKLSNpbmNsdWRl ICJja29uYmkuaCIKLSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0KLSNpbmNsdWRlICJja29jb24u aCIKLWV4dGVybiBhc2NyZWVuIGNvbW1hbmRzY3JlZW47Ci0jaWZkZWYgS1VJCi0jaW5jbHVkZSAi aWt1aS5oIgotI2VuZGlmIC8qIEtVSSAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgTlQK LSNpbmNsdWRlICJja253aW4uaCIKLSNlbmRpZiAvKiBOVCAqLwotI2lmZGVmIE9TMgotI2luY2x1 ZGUgImNrb3dpbi5oIgotI2luY2x1ZGUgImNrb3N5bi5oIgotI2VuZGlmIC8qIE9TMiAqLwotCi0j aWZkZWYgQ0tfVEFQSQotZXh0ZXJuIGludCB0dHRhcGk7Ci1leHRlcm4gaW50IHRhcGlwYXNzOwot I2VuZGlmIC8qIENLX1RBUEkgKi8KLQotI2lmZGVmIENLX0tFUkJFUk9TCi0jaW5jbHVkZSAiY2t1 YXRoLmgiCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQotI2lmbmRlZiBXSU5UQ1AKLSNpbmNs dWRlIDxzaWduYWwuaD4KLSNlbmRpZiAvKiBXSU5UQ1AgKi8KLQotI2lmZGVmIFZNUwotI2luY2x1 ZGUgPGRlc2NyaXAuaD4KLSNpbmNsdWRlIDxzc2RlZi5oPgotI2luY2x1ZGUgPHN0c2RlZi5oPgot I2lmbmRlZiBPTERfVk1TCi0jaW5jbHVkZSA8bGliJHJvdXRpbmVzLmg+ICAvKiBOb3QgZm9yIFZB WCBDIDIuMyAqLwotI2Vsc2UKLSNpbmNsdWRlIDxsaWJkZWYuaD4KLSNlbmRpZiAvKiBPTERfVk1T ICovCi0jaWZkZWYgV0lOVENQCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYgLyogV0lOVENQ ICovCi0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBEQ0xGRE9QRU4KLS8qIGZkb3BlbigpIG5l ZWRzIGRlY2xhcmluZyBiZWNhdXNlIGl0J3Mgbm90IGRlY2xhcmVkIGluIDxzdGRpby5oPiAqLwot X1BST1RPVFlQKCBGSUxFICogZmRvcGVuLCAoaW50LCBjaGFyICopICk7Ci0jZW5kaWYgLyogRENM RkRPUEVOICovCi0KLSNpZmRlZiBEQ0xQT1BFTgotLyogcG9wZW4oKSBuZWVkcyBkZWNsYXJpbmcg YmVjYXVzZSBpdCdzIG5vdCBkZWNsYXJlZCBpbiA8c3RkaW8uaD4gKi8KLV9QUk9UT1RZUCggRklM RSAqIHBvcGVuLCAoY2hhciAqLCBjaGFyICopICk7Ci0jZW5kaWYgLyogRENMUE9QRU4gKi8KLQot aW50IHR0X2NyZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhcnJpYWdlIHJldHVy biBkaXNwbGF5ICovCi1pbnQgdHRfbGZkID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyog TGluZWZlZWQgZGlzcGxheSAqLwotaW50IGludGVycnVwdGVkID0gMDsgICAgICAgICAgICAgICAg ICAgIC8qIEludGVycnVwdGVkIGZyb20ga2V5Ym9hcmQgZmxhZyAqLwotaW50IGZ4ZF9pbml0ZWQg PSAwOwkJCS8qIEZ1bGxzY3JlZW4gc3R1ZmYgaW5pdGlhbGl6ZWQgKi8KLQotI2lmZGVmIERFQlVH Ci1jaGFyIGRlYmZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAgLyogRGVidWdnaW5nIGxv ZyBmaWxlIG5hbWUgKi8KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgVExPRwotY2hhciB0 cmFmaWxbQ0tNQVhQQVRIKzFdOyAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGxvZyBmaWxl IG5hbWUgKi8KLSNlbmRpZiAvKiBUTE9HICovCi0KLWNoYXIgc2VzZmlsW0NLTUFYUEFUSCsxXTsg ICAgICAgICAgICAgICAvKiBTZXNzaW9uIGxvZyBmaWxlIG5hbWUgKi8KLQotI2lmZGVmIENLTE9H RElBTAotY2hhciBkaWFmaWxbQ0tNQVhQQVRIKzFdOyAgICAgICAgICAgICAgIC8qIENvbm5lY3Rp b24gbG9nIGZpbGUgbmFtZSAqLwotY2hhciBjeGxvZ2J1ZltDWExPR0JVRkwrMV07ICAgICAgICAg ICAgIC8qIENvbm5lY3Rpb24gbG9nIHJlY29yZCBidWZmZXIgKi8KLWludCBjeF9hY3RpdmUgPSAw OyAgICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIGlzIGFjdGl2ZSAqLwotZXh0ZXJu IGludCBkaWFsb2c7Ci0jZW5kaWYgLyogQ0tMT0dESUFMICovCi0KLSNpZmRlZiBEWU5BTUlDCi1z dGF0aWMgY2hhciAqY21kc3RyID0gTlVMTDsgICAgICAgICAgICAgLyogUGxhY2UgdG8gYnVpbGQg Z2VuZXJpYyBjb21tYW5kICovCi0jZWxzZQotI2lmZGVmIHBkcDExCi1zdGF0aWMgY2hhciBjbWRz dHJbMjU2XTsKLSNlbHNlCi1zdGF0aWMgY2hhciBjbWRzdHJbNDA5Nl07Ci0jZW5kaWYgLyogcGRw MTEgKi8KLSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSNpZm5kZWYgTk9NU0VORAotY2hhciBmc3Bl Y1tDTURCTCs0XTsgICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lIHN0cmluZyBmb3IgXHYo ZmlsZXNwZWMpICovCi1pbnQgZnNwZWNsZW4gPSBDTURCTDsKLSNlbHNlCi1jaGFyIGZzcGVjW0NL TUFYUEFUSCs0XTsKLWludCBmc3BlY2xlbiA9IENLTUFYUEFUSDsKLSNlbmRpZiAvKiBOT01TRU5E ICovCi0KLWNoYXIgKiByZnNwZWMgPSBOVUxMOwkJCS8qIFJlY2VpdmVkIGZpbGVzcGVjOiBsb2Nh bCAqLwotY2hhciAqIHByZnNwZWMgPSBOVUxMOwkJCS8qIFByZWxpbWluYXJ5IHJmc3BlYyAqLwot Y2hhciAqIHNmc3BlYyA9IE5VTEw7CQkJLyogU2VudCBmaWxlc3BlYzogbG9jYWwgKi8KLWNoYXIg KiBwc2ZzcGVjID0gTlVMTDsJCQkvKiBQcmVsaW1pbmFyeSBzZnNwZWMgKi8KLWNoYXIgKiBzcmZz cGVjID0gTlVMTDsJCQkvKiBSZWNlaXZlZCBmaWxlc3BlYzogcmVtb3RlICovCi1jaGFyICogcHNy ZnNwZWMgPSBOVUxMOwkJCS8qIFByZWxpbWluYXJ5IHNyZnNwZWMgKi8KLWNoYXIgKiBycmZzcGVj ID0gTlVMTDsJCQkvKiBTZW50IGZpbGVzcGVjOiByZW1vdGUgKi8KLWNoYXIgKiBwcnJmc3BlYyA9 IE5VTEw7CQkJLyogUHJlbGltaW5hcnkgcnJmc3BlYyAqLwotCi1pbnQgc3VjY2VzcyA9IDEsICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBzdWNjZXNzL2ZhaWx1cmUgZmxhZyAqLwot ICAgIGNtZGx2bCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgbGV2ZWwg Ki8KLSAgICBhY3Rpb24gPSAwLAkJCQkvKiBBY3Rpb24gc2VsZWN0ZWQgb24gY29tbWFuZCBsaW5l ICovCi0gICAgc2xvZ3RzID0gMCwJCQkJLyogU2Vzc2lvbi1sb2cgdGltZXN0YW1wcyBvbi9vZmYg Ki8KLSAgICBzbG9nbnVsID0gMCwJCQkvKiBTZXNzaW9uLWxvZyBudWxsLXRlcm1pbmF0ZWQgbGlu ZXMgKi8KLSNpZmRlZiBVTklYCi0gICAgc2Vzc2Z0ID0gWFlGVF9ULCAgICAgICAgICAgICAgICAg ICAgLyogU2Vzc2lvbiBsb2cgZmlsZSB0eXBlICovCi0jZWxzZQotICAgIHNlc3NmdCA9IFhZRlRf QiwJCQkvKiAodGV4dCBmb3IgVU5JWCBiaW5hcnkgZm9yIG90aGVycykgKi8KLSNlbmRpZiAvKiBV TklYICovCi0gICAgcGZsYWcgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQg cHJvbXB0ICovCi0gICAgbXNnZmxnID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJp bnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAqLwotCi1leHRlcm4gaW50IHhhc2ttb3JlLCBzYXZl YXNrOwkJLyogTW9yZS1wcm9tcHRpbmcgKi8KLQotI2lmZGVmIENLX0FQQwotZXh0ZXJuIGludCBh cGNhY3RpdmU7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0vKiBFeHRlcm5hbCB2YXJpYWJsZXMgKi8K LQotZXh0ZXJuIGludCBsb2NhbCwgcXVpZXQsIGJpbmFyeSwgbmV0d29yaywgd2hhdCwgcGFyaXR5 LCB4aXRzdGEsIGVzY2FwZSwKLSAgdGxldmVsLCBiZ3NldCwgYmFja2dyZCwgeHN1c3BlbmQsIGNt ZGludCwgbmV0dHlwZSwgc2VzbG9nLCBkZmxvYzsKLQotZXh0ZXJuIGludCBjbWRfcm93cywgY21k X2NvbHMsIHhjbWRzcmM7Ci0KLWV4dGVybiBjaGFyIGNtZGZpbFtdOwotCi0jaWZkZWYgVk1TCi1l eHRlcm4gaW50IGJhdGNoOwotI2VuZGlmIC8qIFZNUyAqLwotCi0jaWZkZWYgZGF0YWdlbmVyYWwg ICAgICAgICAgICAgICAgICAgICAgLyogMi8xMi85MiBFTkggKi8KLSNpbmNsdWRlIDxzeXNpZC5o PgotZXh0ZXJuIGludCBjb25fcmVhZHNfbXQsIGNvbmludF9jaCwgY29uaW50X2F2bDsKLSNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLwotCi1leHRlcm4gbG9uZyBzcGVlZDsKLQotZXh0ZXJuIGNoYXIg dHRuYW1lW10sICpkZnR0eSwgKmNtYXJnLCAqKmNtbGlzdCwgKnZlcnNpbywgbXlob3N0W107Ci0K LSNpZm5kZWYgTk9DU0VUUwotZXh0ZXJuIGludCBmY2hhcnNldCwgdGNoYXJzZXQsIHhmcnhsYTsK LWV4dGVybiBzdHJ1Y3QgY3NpbmZvIGZjc2luZm9bXSwgdGNzaW5mb1tdOwotI2VuZGlmIC8qIE5P Q1NFVFMgKi8KLQotI2lmZGVmIE9TMgotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgY29sb3JjbWQ7Ci0j ZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBOT1hGRVIKLQotaW50IGZkaXNwbGEgPSBYWUZEX047 Ci0KLSNlbHNlICAvKiBOT1hGRVIgaXMgbm90IGRlZmluZWQgKi8KLQotI2lmZGVmIE9TMiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgZGlzcGxheSB0eXBlICov Ci1pbnQgZmRpc3BsYSA9IFhZRkRfQzsgICAgICAgICAgICAgICAgICAgLyogQ3Vyc2VzIChmdWxs c2NyZWVuKSBpZiB3ZSBoYXZlIGl0ICovCi0jZWxzZQotI2lmZGVmIENLX0NVUlNFUwotaW50IGZk aXNwbGEgPSBYWUZEX0M7Ci0jZWxzZQotaW50IGZkaXNwbGEgPSBYWUZEX1M7ICAgICAgICAgICAg ICAgICAgIC8qIE90aGVyd2lzZSBDUlQgKi8KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLSNlbmRp ZiAvKiBPUzIgKi8KLQotZXh0ZXJuIHN0cnVjdCBja19wIHB0YWJbXTsKLWV4dGVybiBpbnQgcHJv dG9jb2wsIHhmcmJlbCwgeGZyaW50OwotCi0jaWZkZWYgU1RSRUFNSU5HCi1leHRlcm4gaW50IHN0 cmVhbWluZywgc3RyZWFtb2s7Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0KLS8qIFVzZWQgaW50 ZXJuYWxseSAqLwotCi0jaWZkZWYgS1VJCi1fUFJPVE9UWVAoIFZPSUQgc2NyZWVuZywgKGludCwg Y2hhciwgbG9uZywgY2hhciAqKSApOwotI2VuZGlmCS8qIEtVSSAqLwotX1BST1RPVFlQKCBWT0lE IHNjcmVlbmMsIChpbnQsIGNoYXIsIENLX09GRl9ULCBjaGFyICopICk7Ci0KLQotI2lmZGVmIENL X0NVUlNFUwotI2lmbmRlZiBEWU5BTUlDCi1zdGF0aWMgY2hhciB4dHJtYnVmW1RSTUJVRkxdOyAg ICAgICAgICAgLyogdGdldGVudCgpIGJ1ZmZlciAqLwotY2hhciAqIHRybWJ1ZiA9IHh0cm1idWY7 Ci0jZWxzZQotY2hhciAqIHRybWJ1ZiA9IE5VTEw7Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotX1BS T1RPVFlQKCBzdGF0aWMgVk9JRCBkcHlpbml0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggc3RhdGlj IGxvbmcgc2hvY3BzLCAoaW50LCBDS19PRkZfVCwgQ0tfT0ZGX1QpICk7Ci1fUFJPVE9UWVAoIHN0 YXRpYyBDS19PRkZfVCBzaG9ldGwsIChDS19PRkZfVCwgbG9uZywgQ0tfT0ZGX1QsIENLX09GRl9U KSApOwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi1zdGF0aWMgaW50IGZ0X3dpbiA9IDA7ICAv KiBGdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSB3aW5kb3cgaXMgYWN0aXZlICovCi0K LS8qIFZhcmlhYmxlcyBkZWNsYXJlZCBoZXJlICovCi0KLXN0YXRpYyBjaGFyICogc2tyZWFzb25b XSA9IHsKLSAgICAiIiwJCQkJCS8qIDAgKi8KLSAgICAiUmVtb3RlIGZpbGUgbm90IG9sZGVyIiwJ CS8qIFNLUF9EQVQgKi8KLSAgICAiSWRlbnRpY2FsIG1vZGlmaWNhdGlvbiB0aW1lcyIsCS8qIFNL UF9FUVUgKi8KLSAgICAiVHlwZSIsCQkJCS8qIFNLUF9UWVAgKi8KLSAgICAiU2l6ZSIsCQkJCS8q IFNLUF9TSVogKi8KLSAgICAiTmFtZSBjb2xsaXNpb24iLAkJCS8qIFNLUF9OQU0gKi8KLSAgICAi RXhjZXB0aW9uIExpc3QiLAkJCS8qIFNLUF9FWEwgKi8KLSAgICAiRG90IGZpbGUiLAkJCQkvKiBT S1BfRE9UICovCi0gICAgIkJhY2t1cCBmaWxlIiwJCQkvKiBTS1BfQktVICovCi0gICAgIlJlY292 ZXJ5IG5vdCBuZWVkZWQiLAkJLyogU0tQX1JFUyAqLwotICAgICJBY2Nlc3MgZGVuaWVkIiwJCQkv KiBTS1BfQUNDICovCi0gICAgIk5vdCBhIHJlZ3VsYXIgZmlsZSIsCQkvKiBTS1BfTlJGICovCi0g ICAgIlNpbXVsYXRlZCIsCQkJLyogU0tQX1NJTSAqLwotICAgICJTaW11bGF0ZWQgLSBSZW1vdGUg ZmlsZSBvbGRlciIsCS8qIFNLUF9YVVAgKi8KLSAgICAiU2ltdWxhdGVkIC0gTm8gcmVtb3RlIGZp bGUiLAkvKiBTS1BfWE5YICovCi19Owotc3RhdGljIGludCBuc2tyZWFzb24gPSAoc2l6ZW9mKHNr cmVhc29uKSAvIHNpemVvZihjaGFyICopKTsKLQotY2hhciAqCi1nc2tyZWFzb24obikgaW50IG47 IHsKLSAgICByZXR1cm4oKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pID8gc2tyZWFzb25bbl0gOiAi Iik7Ci19Ci0KLWNoYXIgcGt0ZmlsW0NLTUFYUEFUSCsxXTsgICAgICAgICAgICAgICAvKiBQYWNr ZXQgbG9nIGZpbGUgbmFtZSAqLwotCi0jaWZuZGVmIE5PTVNFTkQgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTXVsdGlwbGUgU0VORCAqLwotY2hhciAqbXNmaWxlc1tNU0VORE1BWF07Ci0jZW5k aWYgLyogTk9NU0VORCAqLwotCi0jaWZkZWYgQ0tfVElNRVJTCi1leHRlcm4gbG9uZyBydHRkZWxh eTsKLWV4dGVybiBpbnQgIHJ0dGZsZzsKLSNlbmRpZiAvKiBDS19USU1FUlMgKi8KLWV4dGVybiBp bnQgcmN2dGltbzsKLQotI2lmZGVmIENLX1JFU0VORAotZXh0ZXJuIGludCBzZW5kbW9kZTsKLWV4 dGVybiBDS19PRkZfVCBzZW5kc3RhcnQsIHJzX2xlbjsKLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8K LQotI2lmZGVmIENLX1BDVF9CQVIgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNm ZXIgdGhlcm1vbWV0ZXIgKi8KLWludCB0aGVybW9tZXRlciA9IDE7ICAgICAgICAgICAgICAgICAg ICAvKiBPTiBieSBkZWZhdWx0ICovCi0jZW5kaWYgLyogQ0tfUENUX0JBUiAqLwotCi0jaWZkZWYg R0ZUSU1FUgotQ0tGTE9BVCBndHYgPSAtMS4wLCBvbGRndHYgPSAtMS4wOwotI2Vsc2UKLSNpZm5k ZWYgT1MyCi1zdGF0aWMKLSNlbmRpZiAvKiBPUzIgKi8KLSAgbG9uZyBndHYgPSAtMUwsIG9sZGd0 diA9IC0xTDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLWV4dGVybiBpbnQgc2VydmVyLCBiY3R1 LCBycHRmbGcsIGVicWZsZywgc3BzaXosIHVycHNpeiwgd21heCwgY3pzZWVuLCBjeHNlZW4sCi0g IHdpbmxvLCBkaXNwbGEsIHRpbWludCwgbnBhZCwgZWJxLCBiY3RyLCBycHRxLCBhdGNhcHUsIGxw Y2FwdSwKLSAgc3djYXB1LCB3c2xvdG4sIHdzbG90ciwgcnRpbW8sIG15cGFkbiwgc3EsIGNhcGFz LCBycHNpeiwgdHNlY3MsCi0gIHBrdGxvZywgbHNjYXB1LCBkZXN0LCBzcnZkaXMsIHdzbG90cywg c3BhY2tldHMsIHNwa3RsLCBycGt0bCwKLSAgcmV0cmFucywgd2N1ciwgbnVtZXJycywgZnNlY3Ms IHdoYXRydSwgY3J1bmNoZWQsIHRpbWVvdXRzLAotICBycGFja2V0cywgZm5jbnYsIGJ5ZV9hY3Rp dmUsIGRpc2NhcmQsIGluc2VydmVyLCBkaXJhY3RpdmUsIGNkYWN0aXZlOwotCi1leHRlcm4gbG9u ZyBmaWxjbnQsIGZpbHJlaiwgcnB0biwgZmlsY3BzLCB0ZmNwcywgY3BzLCBwZWFrY3BzOwotZXh0 ZXJuIENLX09GRl9UIGZmYywgdGZjLCBmc2l6ZTsgCi0KLWxvbmcgb2xkY3BzID0gMEw7Ci0KLWV4 dGVybiBDSEFSICpyZGF0YXAsIHBhZGNoLCBzZW9sLCBjdGxxLCBteXBhZGMsIGVvbCwgKmVwa3Rt c2c7Ci1leHRlcm4gY2hhciAqeGZybXNnOwotCi0jaWZkZWYgSUtTREIKLUZJTEUgKiBkYmZwID0g TlVMTDsgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHBvaW50ZXIgdG8gZGF0YWJhc2UgZmls ZSAqLwotCi1pbnQgZGJlbmFibGVkID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBm b3IgZGF0YWJhc2UgaXMgZW5hYmxlZCAqLwotZXh0ZXJuIGludCBpa2Rib3BlbjsgICAgICAgICAg ICAgICAgICAgIC8qIEZsYWcgZm9yIGRhdGFiYXNlIGlzIG9wZW4gKi8KLQotdW5zaWduZWQgbG9u ZyBteWRic2VlayA9IDBMOyAgICAgICAgICAgIC8qIFNlZWsgcG9pbnRlciB0byBteSByZWNvcmQg Ki8KLWludCBteWRic2xvdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBNeSBzbG90IG51 bWJlciAqLwotdW5zaWduZWQgbG9uZyBteWZsYWdzID0gMEw7ICAgICAgICAgICAgIC8qIE15IGZs YWdzICovCi11bnNpZ25lZCBsb25nIG15YXR5cGUgPSAwTDsgICAgICAgICAgICAgLyogTXkgYXV0 aG9yaXphdGlvbiB0eXBlICovCi11bnNpZ25lZCBsb25nIG15YW1vZGUgPSAwTDsgICAgICAgICAg ICAgLyogTXkgYXV0aG9yaXphdGlvbiBtb2RlICovCi11bnNpZ25lZCBsb25nIG15c3RhdGUgPSAw TDsgICAgICAgICAgICAgLyogTXkgc3RhdGUgKFNFTkQsIFJFQ0VJVkUsIGV0YykgKi8KLXVuc2ln bmVkIGxvbmcgbXlwaWQgPSAwTDsgICAgICAgICAgICAgICAvKiBNeSBQSUQgKi8KLXVuc2lnbmVk IGxvbmcgbXlpcCA9IDBMOyAgICAgICAgICAgICAgICAvKiBNeSBJUCBhZGRyZXNzICovCi11bnNp Z25lZCBsb25nIHBlZXJpcCA9IDBMOyAgICAgICAgICAgICAgLyogTXkgcGVlcidzIElQIGFkZHJl c3MgKi8KLQotdW5zaWduZWQgbG9uZyBkYmlwID0gMEw7ICAgICAgICAgICAgICAgIC8qIElQIGFk ZHJlc3MgaW4gZGIgcmVjb3JkICovCi11bnNpZ25lZCBsb25nIGRicGlkID0gMEw7ICAgICAgICAg ICAgICAgLyogUElEIGluIGRiIHJlY29yZCAqLwotdW5zaWduZWQgbG9uZyBkYmZsYWdzID0gMEw7 ICAgICAgICAgICAgIC8qIEZsYWdzIGZpZWxkIGluIGRiIHJlY29yZCAqLwotdW5zaWduZWQgbG9u ZyBkYmxhc3R1c2VkID0gMEw7ICAgICAgICAgIC8qIExhc3QgaW4tdXNlIHJlY29yZCBpbiBkYiAq LwotY2hhciBkYnJlY1tEQl9SRUNMXTsgICAgICAgICAgICAgICAgICAgIC8qIERhdGFiYXNlIHJl Y29yZCBidWZmZXIgKi8KLQotY2hhciAqIGRiZGlyICAgPSBOVUxMOyAgICAgICAgICAgICAgICAg IC8qIERhdGFiYXNlIGRpcmVjdG9yeSAqLwotY2hhciAqIGRiZmlsZSAgPSBOVUxMOyAgICAgICAg ICAgICAgICAgIC8qIERhdGFiYXNlIGZpbGUgZnVsbCBwYXRobmFtZSAqLwotY2hhciBteWhleGlw WzMzXSA9IHsgTlVMLCBOVUwgfTsgICAgICAgIC8qIE15IElQIGFkZHJlc3MgaW4gaGV4ICovCi1j aGFyIHBlZXJoZXhpcFszM10gPSB7IE5VTCwgTlVMIH07ICAgICAgLyogQ2xpZW50J3MgSVAgYWRk cmVzcyBpbiBoZXggKi8KLSNlbmRpZiAvKiBJS1NEQiAqLwotCi0jaWZkZWYgR0ZUSU1FUgotZXh0 ZXJuIENLRkxPQVQgZnBmc2VjcywgZnB0c2VjcywgZnB4ZnNlY3M7Ci0jZWxzZQotZXh0ZXJuIGxv bmcgeGZzZWNzOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQot I2lmZGVmIFRDUFNPQ0tFVAotI2lmZGVmIE5FV0ZUUAotZXh0ZXJuIGNoYXIgKiBmdHBfaG9zdCwg ZnRwX3NydnR5cFtdOwotZXh0ZXJuIGludCBmdHBfY3N4LCBmdHBfY3NsLCBmdHBfZGViOwotI2Vu ZGlmIC8qIE5FV0ZUUCAqLwotZXh0ZXJuIGNoYXIgbXlpcGFkZHJbXTsKLSNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KLQotI2lmbmRlZiBOT0lDUAotI2lmbmRlZiBOT1NQTAotICAgIGV4dGVybiBzdHJ1 Y3QgbXRhYiAqbWFjdGFiOyAgICAgICAgIC8qIEZvciBPTl9FWElUIG1hY3JvLiAqLwotICAgIGV4 dGVybiBpbnQgbm1hYzsKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmZGVmIERDTURCVUYKLWV4dGVy biBjaGFyICpjbWRidWY7ICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlciAqLwot I2Vsc2UKLWV4dGVybiBjaGFyIGNtZGJ1ZltdOyAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5k IGJ1ZmZlciAqLwotI2VuZGlmIC8qIERDTURCVUYgKi8KLWV4dGVybiBpbnQgY21kX3F1b3Rpbmc7 Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLQotI2lmbmRlZiBOT0NDVFJBUAotI2lmZGVmIE5UCi0jaW5j bHVkZSA8c2V0am1wZXguaD4KLSNlbHNlIC8qIE5UICovCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0j ZW5kaWYgLyogTlQgKi8KLSNpbmNsdWRlICJja2NzaWcuaCIKLWV4dGVybiBja2ptcGJ1ZiBjbWpi dWY7Ci0jZW5kaWYgLyogTk9DQ1RSQVAgKi8KLQotZXh0ZXJuIGludCB4ZmlsZXR5cGUsIG5zY2Fu ZmlsZTsKLQotaW50Ci1zaG9lc2MoZXNjYXBlKSBpbnQgZXNjYXBlOyB7Ci0gICAgZXh0ZXJuIGNo YXIgKiBjY250YWJbXTsJCS8qIEMwIGNvbnRyb2wgY2hhcmFjdGVyIG5hbWUgdGFibGUgKi8KLSAg ICBleHRlcm4gaW50IHR0X2VzY2FwZTsKLSAgICBpZiAoKGVzY2FwZSA+IDAgJiYgZXNjYXBlIDwg MzIpIHx8IChlc2NhcGUgPT0gMTI3KSkgewotCXByaW50ZigiIEVzY2FwZSBjaGFyYWN0ZXI6IEN0 cmwtJWMgKEFTQ0lJICVkLCAlcyk6ICVzXHJcbiIsCi0JICAgICAgIGN0bChlc2NhcGUpLAotCSAg ICAgICBlc2NhcGUsCi0JICAgICAgIChlc2NhcGUgPT0gMTI3ID8gIkRFTCIgOiBjY250YWJbZXNj YXBlXSksCi0JICAgICAgIHR0X2VzY2FwZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIKLQkgICAg ICAgKTsKLSAgICB9IGVsc2UgewotCXByaW50ZigiIEVzY2FwZSBjaGFyYWN0ZXI6IENvZGUgJWQi LGVzY2FwZSk7Ci0JaWYgKGVzY2FwZSA+IDE2MCAmJiBlc2NhcGUgPCAyNTYpCi0JICBwcmludGYo IiAoJWMpIixlc2NhcGUpOwotCXByaW50ZigiOiAlc1xyXG4iLCB0dF9lc2NhcGUgPyAiZW5hYmxl ZCIgOiAiZGlzYWJsZWQiKTsJCi0gICAgfQotICAgIHJldHVybigwKTsKLX0KLQotI2lmbmRlZiBO T1hGRVIKLS8qICBQIFIgRSBTIEUgVCAgLS0gIFJlc2V0IGdsb2JhbCBwcm90b2NvbCB2YXJpYWJs ZXMgICovCi0KLWV4dGVybiBpbnQgcmVjdXJzaXZlOwotCi0jaWZkZWYgUEFUVEVSTlMKLWludCBw YXR0ZXJucyA9IFNFVF9BVVRPOyAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHRvIHVzZSBmaWxl bmFtZSBwYXR0ZXJucyAqLwotZXh0ZXJuIGludCBnX3BhdHRlcm5zOwkJCS8qIEZvciBzYXZpbmcg YW5kIHJlc3RvcmluZyAqLwotI2Vsc2UKLWludCBwYXR0ZXJucyA9IFNFVF9PRkY7Ci0jZW5kaWYg LyogUEFUVEVSTlMgKi8KLQotI2lmbmRlZiBOT0lDUAotI2lmZGVmIENLX0xBQkVMRUQKLWV4dGVy biBpbnQgZ19sZl9vcHRzLCBsZl9vcHRzOwotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLWV4dGVy biBpbnQgZ19tYXRjaGRvdCwgZ191c2VwaXBlcywgdXNlcGlwZXM7Ci1leHRlcm4gaW50IGdfYmlu YXJ5LCBnX3Byb3RvLCBnX2Rpc3BsYSwgZ19zcGF0aCwgZ19ycGF0aCwgZ19mbmNudjsKLWV4dGVy biBpbnQgZ19yZWN1cnNpdmU7Ci1leHRlcm4gaW50IGdfeGZlcm1vZGUsIHhmZXJtb2RlOwotZXh0 ZXJuIGludCBnX3VycHNpeiwgZ19zcHNpemYsIGdfc3BzaXo7Ci1leHRlcm4gaW50IGdfc3BzaXpy LCBnX3NwbWF4LCBnX3dzbG90ciwgZ19wcmVmaXhpbmcsIGdfZm5jYWN0OwotZXh0ZXJuIGludCBn X2Zuc3BhdGgsIGdfZm5ycGF0aCwgZ19za2lwYnVwOwotZXh0ZXJuIGludCBub2xpbmtzOwotI2lm ZGVmIENLU1lNTElOSwotZXh0ZXJuIGludCB6Z2ZzX2xpbms7Ci0jZW5kaWYgLyogQ0tTWU1MSU5L ICovCi0jaWZuZGVmIE5PU1BMCi1leHRlcm4gaW50IGdfcGZsZywgcHdmbGcsIGdfcGNwdCwgcHdj cnlwdDsKLWV4dGVybiBjaGFyICogZ19wc3dkLCBwd2J1ZltdOwotI2VuZGlmIC8qIE5PU1BMICov Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLQotZXh0ZXJuIGludCBzcHNpemYsIHNwc2l6ciwgc3BtYXgs IHByZWZpeGluZywgZm5jYWN0LCBmbnNwYXRoLCBmbnJwYXRoOwotZXh0ZXJuIGludCBtb3Zpbmc7 ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFTkQgY3JpdGVyaWEgKi8KLWV4dGVybiBjaGFyIHNu ZGFmdGVyW10sIHNuZGJlZm9yZVtdLCAqc25kZXhjZXB0W10sICpyY3ZleGNlcHRbXTsKLWV4dGVy biBDS19PRkZfVCBzbmRsYXJnZXIsIHNuZHNtYWxsZXIsIGNhbGlicmF0ZTsKLWV4dGVybiBpbnQg cm1haWxmLCBycHJpbnRmLCBza2lwYnVwOwotZXh0ZXJuIGNoYXIgb3B0YnVmW107Ci0KLSNpZmRl ZiBQSVBFU0VORAotZXh0ZXJuIGNoYXIgKiBnX3NmaWx0ZXIsICogZ19yZmlsdGVyOwotZXh0ZXJu IGNoYXIgKiBzbmRmaWx0ZXIsICogcmN2ZmlsdGVyOwotI2VuZGlmIC8qIFBJUEVTRU5EICovCi1l eHRlcm4gY2hhciAqKiBzbmRhcnJheTsKLQotVk9JRAotZnRyZXNldCgpIHsKLSNpZm5kZWYgTk9J Q1AKLSAgICBpbnQgaTsKLSAgICBleHRlcm4gY2hhciAqIGZpbGVmaWxlOwotICAgIGV4dGVybiBp bnQgcmVsaWFibGUsIHhyZWxpYWJsZSwgY19zYXZlLCBzc19zYXZlLCBzbG9zdGFydCwgdXJjbGVh cjsKLSAgICBleHRlcm4gaW50IG9vcHRzLCBvbW9kZSwgb25hbWUsIG9wYXRoLCBrYWN0aXZlLCBh dXRvcGF0aDsKLSAgICBleHRlcm4gY2hhciAqIHNuZF9tb3ZlOyAgICAgICAgICAgICAvKiBEaXJl Y3RvcnkgdG8gbW92ZSBzZW50IGZpbGVzIHRvICovCi0gICAgZXh0ZXJuIGNoYXIgKiBzbmRfcmVu YW1lOyAgICAgICAgICAgLyogV2hhdCB0byByZW5hbWUgc2VudCBmaWxlcyB0byAqLwotICAgIGV4 dGVybiBjaGFyICogcmN2X21vdmU7Ci0gICAgZXh0ZXJuIGNoYXIgKiByY3ZfcmVuYW1lOwotICAg IGV4dGVybiBjaGFyICogZ19zbmRfbW92ZTsKLSAgICBleHRlcm4gY2hhciAqIGdfc25kX3JlbmFt ZTsKLSAgICBleHRlcm4gY2hhciAqIGdfcmN2X21vdmU7Ci0gICAgZXh0ZXJuIGNoYXIgKiBnX3Jj dl9yZW5hbWU7Ci0KLSNpZmRlZiBDS19UTVBESVIKLSAgICBleHRlcm4gaW50IGZfdG1wZGlyOwot ICAgIGV4dGVybiBjaGFyIHNhdmRpcltdOwotI2VuZGlmIC8qIENLX1RNUERJUiAqLwotCi0jaWZk ZWYgQ0tfU1BFRUQKLSNpZmRlZiBDT01NRU5UCi0gICAgZXh0ZXJuIGludCBmX2N0bHA7Ci0gICAg ZXh0ZXJuIHNob3J0IHNfY3RscFtdLCBjdGxwW107Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2Vu ZGlmIC8qIENLX1NQRUVEICovCi0KLSNpZm5kZWYgTk9DU0VUUwotICAgIGV4dGVybiBpbnQgZmNz X3NhdmUsIHRjc19zYXZlOwotICAgIGV4dGVybiBpbnQgZ194ZnJ4bGEsIHhmcnhsYTsKLSNlbmRp ZiAvKiBOT0NTRVRTICovCi0KLS8qIFJlc3RvcmUgLyByZXNldCBwZXItY29tbWFuZCBmaWxlLXRy YW5zZmVyIHN3aXRjaGVzICovCi0KLSAgICBtYWtlc3RyKCZzbmRfbW92ZSxnX3NuZF9tb3ZlKTsK LSAgICBtYWtlc3RyKCZyY3ZfbW92ZSxnX3Jjdl9tb3ZlKTsKLSAgICBtYWtlc3RyKCZzbmRfcmVu YW1lLGdfc25kX3JlbmFtZSk7Ci0gICAgbWFrZXN0cigmcmN2X3JlbmFtZSxnX3Jjdl9yZW5hbWUp OwotCi0gICAga2FjdGl2ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogS2VybWl0IHBy b3RvY29sIG5vIGxvbmdlciBhY3RpdmUgKi8KLSAgICBvb3B0cyA9IC0xOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBPLVBhY2tldCBPcHRpb25zICovCi0gICAgb21vZGUgPSAtMTsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgVHJhbnNmZXIgTW9kZSAqLwotICAgIG9uYW1l ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8tUGFja2V0IEZpbGVuYW1lIE9wdGlv bnMgKi8KLSAgICBvcGF0aCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPLVBhY2tl dCBQYXRobmFtZSBPcHRpb25zICovCi0KLSNpZmRlZiBDS19SRVNFTkQKLSAgICByc19sZW4gPSAw TDsJCQkvKiBSRUdFVCBwb3NpdGlvbiAqLwotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotCi0jaWZk ZWYgQ09NTUVOVAotI2lmZGVmIENLX1NQRUVECi0gICAgaWYgKGZfY3RscCkgewotICAgICAgICBm b3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0gICAgICAgICAgY3RscFtpXSA9IHNfY3RscFtpXTsK LSAgICAgICAgZl9jdGxwID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBDS19UTVBESVIKLSAgICBpZiAoZl90bXBkaXIpIHsJ CQkvKiBJZiB3ZSBjaGFuZ2VkIHRvIGRvd25sb2FkIGRpciAqLwotCXpjaGRpcigoY2hhciAqKSBz YXZkaXIpOwkvKiBHbyBiYWNrIHdoZXJlIHdlIGNhbWUgZnJvbSAqLwotCWZfdG1wZGlyID0gMDsK LSAgICB9Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0KLSAgICBjYWxpYnJhdGUgPSAwTDsgICAg ICAgICAgICAgICAgICAgICAvKiBDYWxpYnJhdGlvbiBydW4gKi8KLSAgICBpZiAoeHJlbGlhYmxl ID4gLTEpIHsKLQlyZWxpYWJsZSA9IHhyZWxpYWJsZTsKLQlkZWJ1ZyhGMTAxLCJmdHJlc2V0IHJl bGlhYmxlIiwiIixyZWxpYWJsZSk7Ci0gICAgfQotICAgIHVyY2xlYXIgPSAwOwotCi0gICAgaWYg KGF1dG9wYXRoKSB7ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFJFQ0VJVkUgUEFUSE5BTUVT IEFVVE8gKi8KLSAgICAgICAgZm5ycGF0aCA9IFBBVEhfQVVUTzsKLSAgICAgICAgYXV0b3BhdGgg PSAwOwotICAgIH0KLSAgICBpZiAoZmlsZWZpbGUpIHsgICAgICAgICAgICAgICAgICAgICAvKiBG aWxlIGxpc3QgKi8KLSAgICAgICAgemNsb3NlKFpNRklMRSk7Ci0gICAgICAgIG1ha2VzdHIoJmZp bGVmaWxlLE5VTEwpOwotICAgIH0KLSAgICBpZiAoY19zYXZlID4gLTEpIHsgICAgICAgICAgICAg ICAgICAvKiBCbG9jayBDaGVjayBUeXBlICovCi0gICAgICAgIGJjdHIgPSBjX3NhdmU7Ci0gICAg ICAgIGNfc2F2ZSA9IC0xOwotICAgIH0KLSAgICBpZiAoc3Nfc2F2ZSA+IC0xKSB7ICAgICAgICAg ICAgICAgICAvKiBTbG93IFN0YXJ0ICovCi0gICAgICAgIHNsb3N0YXJ0ID0gc3Nfc2F2ZTsKLSAg ICAgICAgc3Nfc2F2ZSA9IC0xOwotICAgIH0KLSNpZmRlZiBDS19MQUJFTEVECi0gICAgaWYgKGdf bGZfb3B0cyA+IC0xKSB7Ci0gICAgICAgIGxmX29wdHMgPSBnX2xmX29wdHM7ICAgICAgICAgICAg LyogUmVzdG9yZSBsYWJlbGVkIHRyYW5zZmVyIG9wdGlvbnMgKi8KLSAgICAgICAgZ19sZl9vcHRz ID0gLTE7Ci0gICAgfQotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLQotI2lmbmRlZiBOT0NTRVRT Ci0gICAgaWYgKHRjc19zYXZlID4gLTEpIHsgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHNl dHMgKi8KLSAgICAgICAgdGNoYXJzZXQgPSB0Y3Nfc2F2ZTsKLSAgICAgICAgdGNzX3NhdmUgPSAt MTsKLSAgICB9Ci0gICAgaWYgKGZjc19zYXZlID4gLTEpIHsKLSAgICAgICAgZmNoYXJzZXQgPSBm Y3Nfc2F2ZTsKLSAgICAgICAgZmNzX3NhdmUgPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfeGZyeGxh ID4gLTEpIHsKLQl4ZnJ4bGEgPSBnX3hmcnhsYTsKLQlnX3hmcnhsYSA9IC0xOwotICAgIH0KLSAg ICBzZXR4bGF0eXBlKHRjaGFyc2V0LGZjaGFyc2V0KTsgICAgICAvKiBUcmFuc2xhdGlvbiB0eXBl ICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZkZWYgTkVUQ09OTgotI2lmbmRlZiBOT1NQ TAotICAgIGlmIChnX3Bzd2QpIHsKLSAgICAgICAgY2tzdHJuY3B5KHB3YnVmLGdfcHN3ZCxQV0JV RkwpOwotICAgICAgICBtYWtlc3RyKCZnX3Bzd2QsTlVMTCk7Ci0gICAgfQotICAgIGlmIChnX3Bm bGcgPiAtMSkgewotICAgICAgICBwd2ZsZyA9IGdfcGZsZzsKLSAgICAgICAgZ19wZmxnID0gLTE7 Ci0gICAgfQotICAgIGlmIChnX3BjcHQgPiAtMSkgewotICAgICAgICBwd2NyeXB0ID0gZ19wY3B0 OwotICAgICAgICBnX3BjcHQgPSAtMTsKLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRp ZiAvKiBORVRDT05OICovCi0KLSAgICBpZiAoZ19iaW5hcnkgPiAtMSkgeyAgICAgICAgICAgICAg ICAvKiBGaWxlIHR5cGUgKi8KLSAgICAgICAgYmluYXJ5ID0gZ19iaW5hcnk7Ci0gICAgICAgIGdf YmluYXJ5ID0gLTE7Ci0gICAgfQotICAgIGlmIChnX3hmZXJtb2RlID4gLTEpIHsgICAgICAgICAg ICAgIC8qIFRyYW5zZmVyIG1vZGUgKi8KLSAgICAgICAgeGZlcm1vZGUgPSBnX3hmZXJtb2RlOwot ICAgICAgICBnX3hmZXJtb2RlID0gLTE7Ci0gICAgfQotI2lmZGVmIFBBVFRFUk5TCi0gICAgaWYg KGdfcGF0dGVybnMgPiAtMSkgeyAgICAgICAgICAgICAgLyogRmlsZW5hbWUgcGF0dGVybnMgKi8K LSAgICAgICAgcGF0dGVybnMgPSBnX3BhdHRlcm5zOwotICAgICAgICBnX3BhdHRlcm5zID0gLTE7 Ci0gICAgfQotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0KLSAgICBpZiAoZ191c2VwaXBlcyA+IC0x KSB7Ci0gICAgICAgIHVzZXBpcGVzID0gZ191c2VwaXBlczsKLSAgICAgICAgZ191c2VwaXBlcyA9 IC0xOwotICAgIH0KLSAgICBpZiAoZ19tYXRjaGRvdCA+IC0xKSB7Ci0gICAgICAgIG1hdGNoZG90 ID0gZ19tYXRjaGRvdDsKLSAgICAgICAgZ19tYXRjaGRvdCA9IC0xOwotICAgIH0KLSAgICBpZiAo Z19wcm90byA+IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBQcm90b2NvbCAqLwotICAgICAgICBw cm90b2NvbCA9IGdfcHJvdG87Ci0gICAgICAgIGdfcHJvdG8gPSAtMTsKLSAgICB9Ci0gICAgaWYg KGdfdXJwc2l6ID4gLTEpIHsKLSAgICAgICAgdXJwc2l6ID0gZ191cnBzaXo7Ci0gICAgICAgIGRl YnVnKEYxMDEsImZ0cmVzZXQgcmVzdG9yaW5nIHVycHNpeiIsIiIsdXJwc2l6KTsKLSAgICAgICAg Z191cnBzaXogPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfc3BzaXpmID4gLTEpIHsKLSAgICAgICAg c3BzaXpmID0gZ19zcHNpemY7Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0cmVzZXQgcmVzdG9yaW5n IHNwc2l6ZiIsIiIsc3BzaXpmKTsKLSAgICAgICAgZ19zcHNpemYgPSAtMTsKLSAgICB9Ci0gICAg aWYgKGdfc3BzaXogPiAtMSkgewotICAgICAgICBzcHNpeiA9IGdfc3BzaXo7Ci0gICAgICAgIGRl YnVnKEYxMDEsImZ0cmVzZXQgcmVzdG9yaW5nIHNwc2l6IiwiIixzcHNpeik7Ci0gICAgICAgIGdf c3BzaXogPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfc3BzaXpyID4gLTEpIHsKLSAgICAgICAgc3Bz aXpyID0gZ19zcHNpenI7Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0cmVzZXQgcmVzdG9yaW5nIHNw c2l6ciIsIiIsc3BzaXpyKTsKLSAgICAgICAgZ19zcHNpenIgPSAtMTsKLSAgICB9Ci0gICAgaWYg KGdfc3BtYXggPiAtMSkgewotICAgICAgICBzcG1heCA9IGdfc3BtYXg7Ci0gICAgICAgIGdfc3Bt YXggPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfd3Nsb3RyID4gLTEpIHsKLSAgICAgICAgd3Nsb3Ry ID0gZ193c2xvdHI7Ci0gICAgICAgIGdfd3Nsb3RyID0gLTE7Ci0gICAgfQotICAgIGlmIChnX3By ZWZpeGluZyA+IC0xKSB7Ci0gICAgICAgIHByZWZpeGluZyA9IGdfcHJlZml4aW5nOwotICAgICAg ICBnX3ByZWZpeGluZyA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19mbmNhY3QgPiAtMSkgewotICAg ICAgICBmbmNhY3QgPSBnX2ZuY2FjdDsKLSAgICAgICAgZ19mbmNhY3QgPSAtMTsKLSAgICB9Ci0g ICAgaWYgKGdfZm5jbnYgPiAtMSkgewotICAgICAgICBmbmNudiA9IGdfZm5jbnY7Ci0gICAgICAg IGdfZm5jbnYgPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfZm5zcGF0aCA+IC0xKSB7Ci0gICAgICAg IGZuc3BhdGggPSBnX2Zuc3BhdGg7Ci0gICAgICAgIGdfZm5zcGF0aCA9IC0xOwotICAgIH0KLSAg ICBpZiAoZ19mbnJwYXRoID4gLTEpIHsKLSAgICAgICAgZm5ycGF0aCA9IGdfZm5ycGF0aDsKLSAg ICAgICAgZ19mbnJwYXRoID0gLTE7Ci0gICAgfQotICAgIGlmIChnX3NraXBidXAgPiAtMSkgewot ICAgICAgICBza2lwYnVwID0gZ19za2lwYnVwOwotICAgICAgICBnX3NraXBidXAgPSAtMTsKLSAg ICB9Ci0gICAgbm9saW5rcyA9IDI7CQkJLyogL0ZPTExPV0xJTktTIGlzIG5ldmVyIGdsb2JhbCAq LwotICAgIHJlY3Vyc2l2ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIC9SRUNVUlNJVkUg Y2FuIG5ldmVyIGJlIGdsb2JhbCAqLwotICAgIHhmaWxldHlwZSA9IC0xOwotCi0gICAgaWYgKGdf ZGlzcGxhID4gLTEpIHsgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBkaXNwbGF5ICov Ci0gICAgICAgIGZkaXNwbGEgPSBnX2Rpc3BsYTsKLSAgICAgICAgZ19kaXNwbGEgPSAtMTsKLSAg ICB9Ci0gICAgaWYgKGdfc3BhdGggPiAtMSkgeyAgICAgICAgICAgICAgICAgLyogU2VuZCBwYXRo bmFtZXMgKi8KLSAgICAgICAgZm5zcGF0aCA9IGdfc3BhdGg7Ci0gICAgICAgIGdfc3BhdGggPSAt MTsKLSAgICB9Ci0gICAgaWYgKGdfcnBhdGggPiAtMSkgeyAgICAgICAgICAgICAgICAgLyogUmVj ZWl2ZSBwYXRobmFtZXMgKi8KLSAgICAgICAgZm5ycGF0aCA9IGdfcnBhdGg7Ci0gICAgICAgIGdf cnBhdGggPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfZm5jbnYgPiAtMSkgeyAgICAgICAgICAgICAg ICAgLyogRmlsZW5hbWUgY29udmVyc2lvbiAqLwotICAgICAgICBmbmNudiA9IGdfZm5jbnY7Ci0g ICAgICAgIGdfZm5jbnYgPSAtMTsKLSAgICB9Ci0jaWZkZWYgUElQRVNFTkQKLSAgICBtYWtlc3Ry KCZzbmRmaWx0ZXIsZ19zZmlsdGVyKTsgICAgICAvKiBTZW5kIGZpbHRlciAqLwotICAgIG1ha2Vz dHIoJnJjdmZpbHRlcixnX3JmaWx0ZXIpOyAgICAgIC8qIFJlY2VpdmUgZmlsdGVyICovCi0jZW5k aWYgLyogUElQRVNFTkQgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotICAgIHJtYWlsZiA9IHJwcmlu dGYgPSAwOyAgICAgICAgICAgICAgIC8qIE1BSUwgYW5kIFBSSU5UIG1vZGlmaWVycyBmb3IgU0VO RCAqLwotICAgIG9wdGJ1ZlswXSA9IE5VTDsgICAgICAgICAgICAgICAgICAgIC8qIE1BSUwgYW5k IFBSSU5UIG9wdGlvbnMgKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0gICAgbW92aW5nID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgZGVsZXRlLWFmdGVyLXNlbmQgaW5k aWNhdG9yICovCi0gICAgc25kYWZ0ZXJbMF0gID0gTlVMOyAgICAgICAgICAgICAgICAgLyogUmVz ZXQgU0VORCBzZWxlY3Rpb24gc3dpdGNoZXMgKi8KLSAgICBzbmRiZWZvcmVbMF0gPSBOVUw7Ci0K LSAgICBmb3IgKGkgPSAwOyBpIDwgTlNOREVYQ0VQVDsgaSsrKSB7Ci0gICAgICAgIGlmIChzbmRl eGNlcHRbaV0pCi0gICAgICAgICAgZnJlZShzbmRleGNlcHRbaV0pOwotICAgICAgICBzbmRleGNl cHRbaV0gPSBOVUxMOwotICAgICAgICBpZiAocmN2ZXhjZXB0W2ldKQotICAgICAgICAgIGZyZWUo cmN2ZXhjZXB0W2ldKTsKLSAgICAgICAgcmN2ZXhjZXB0W2ldID0gTlVMTDsKLSAgICB9Ci0gICAg c25kbGFyZ2VyID0gIChDS19PRkZfVCktMTsKLSAgICBzbmRzbWFsbGVyID0gKENLX09GRl9UKS0x OwotICAgIGRlYnVnKEYxMDEsInByZXNlbnQgc25kc21hbGxlciIsIiIsc25kc21hbGxlcik7Ci0j aWZkZWYgR0ZUSU1FUgotICAgIGd0diA9IC0xLjA7Ci0gICAgb2xkZ3R2ID0gLTEuMDsKLSNlbHNl Ci0gICAgZ3R2ID0gLTFMOwotICAgIG9sZGd0diA9IC0xTDsKLSNlbmRpZiAvKiBHRlRJTUVSICov Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLX0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotY2hhciAqCi10 dGd0cG4oKSB7CQkJCS8qIEdldCB0eXBpY2FsIHBvcnQgbmFtZSAqLwotLyoKLSAgSWRlYWxseSB0 aGlzIHJvdXRpbmUgd291bGQgYmUgaW1wbGVtZW50ZWQgaW4gZWFjaCBvZiB0aGUgY2t1P2lvLiog bW9kdWxlcywKLSAgYnV0IHRoYXQgcmVxdWlyZXMgY2hhbmdpbmcgdGhlIEFQSSBkZWZpbml0aW9u LgotKi8KLSAgICByZXR1cm4oCi0jaWZkZWYgT1MyCi0jaWZkZWYgT1MyT05MWQotIkNPTTEiCi0j ZWxzZSAgLyogT1MyT05MWSAqLwotIlRBUEkgWyBuYW1lIF0gb3IgQ09NMSIKLSNlbmRpZiAvKiBP UzJPTkxZICovCi0jZWxzZSAgLyogT1MyICovCi0jaWZkZWYgVk1TCi0iVFhBMDosIFRUQTA6LCBv ciBMVEEwOiIKLSNlbHNlICAvKiBWTVMgKi8KLSNpZmRlZiBTT0xBUklTCi0iL2Rldi9jdWEvYSIK LSNlbHNlICAvKiBTT0xBUklTICovCi0jaWZkZWYgSFBVWDEwCi0iL2Rldi9jdWEwcDAiCi0jZWxz ZSAgLyogSFBVWDEwICovCi0jaWZkZWYgSFBVWAotIi9kZXYvY3VhMDAiCi0jZWxzZSAgLyogSFBV WCAqLwotI2lmZGVmIF9fRnJlZUJTRF9fCi0iL2Rldi9jdWFhMCIKLSNlbHNlICAvKiBfX0ZyZWVC U0RfXyAqLwotI2lmZGVmIF9fbGludXhfXwotIi9kZXYvdHR5UzAiCi0jZWxzZSAgLyogX19saW51 eF9fICovCi0jaWZkZWYgQlNENDQKLSIvZGV2L3R0eTAwIgotI2Vsc2UgIC8qIEJTRDQ0ICovCi0j aWZkZWYgT1NLCi0iL3QxIgotI2Vsc2UgIC8qIE9TSyAqLwotI2lmZGVmIFFOWAotIi9kZXYvc2Vy MSIKLSNlbHNlICAvKiBRTlggKi8KLSNpZmRlZiBRTlg2Ci0iL2Rldi9zZXIxIgotI2Vsc2UgIC8q IFFOWDYgKi8KLSNpZmRlZiBVTklYV0FSRQotIi9kZXYvdGVybS8wMCBvciAvZGV2L3R0eTAwIgot I2Vsc2UgIC8qIFVOSVhXQVJFICovCi0jaWZkZWYgQ0tfU0NPVjUKLSIvZGV2L3R0eTFBIgotI2Vs c2UgIC8qIENLX1NDT1Y1ICovCi0jaWZkZWYgQ0tfU0NPMzJWNAotIi9kZXYvdHR5MUEiCi0jZWxz ZSAgLyogQ0tfU0NPMzJWNCAqLwotI2lmZGVmIE1fWEVOSVgKLSIvZGV2L3R0eTFBIgotI2Vsc2Ug IC8qIE1fWEVOSVggKi8KLSNpZmRlZiBBSVhSUwotIi9kZXYvdHR5MCIKLSNlbHNlICAvKiBBSVhS UyAqLwotI2lmZGVmIERHVVgKLSIvZGV2L3R0eTAwIgotI2Vsc2UgIC8qIERHVVggKi8KLSNpZmRl ZiBkYXRhZ2VuZXJhbAotIkBjb24xIgotI2Vsc2UgIC8qIGRhdGFnZW5lcmFsICovCi0jaWZkZWYg SVJJWAotIi9kZXYvdHR5bTAiCi0jZWxzZSAgLyogSVJJWCAqLwotI2lmZGVmIFNVTk9TNAotIi9k ZXYvdHR5aDAiCi0jZWxzZSAgLyogU1VOT1M0ICovCi0jaWZkZWYgU1Y2OFIzVjYKLSIvZGV2L3Nj YzAiCi0jZWxzZSAgLyogU1Y2OFIzVjYgKi8KLSNpZmRlZiBNT1RTVjg4UjQKLSIvZGV2L2NvbnR0 eTAwIgotI2Vsc2UgIC8qIE1PVFNWODhSNCAqLwotI2lmZGVmIE5FWFQKLSIvZGV2L2N1ZmEiCi0j ZWxzZQotI2lmZGVmIE9TRgotIi9kZXYvdHR5ZDEiCi0jZWxzZQotI2lmZGVmIFNJTklYCi0iL2Rl di90dHljMSIKLSNlbHNlCi0jaWZkZWYgVU5JWAotIi9kZXYvY3VhLCAvZGV2L2FjdSwgL2Rldi90 dHkwLCBldGMiCi0jZWxzZSAgLyogVU5JWCAqLwotIihzb3JyeSBubyBleGFtcGxlIGF2YWlsYWJs ZSkiCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIFNJTklYICovCi0jZW5kaWYgLyogT1NG ICovCi0jZW5kaWYgLyogTkVYVCAqLwotI2VuZGlmIC8qIE1PVFNWODhSNCAqLwotI2VuZGlmIC8q IFNWNjhSM1Y2ICovCi0jZW5kaWYgLyogU1VOT1M0ICovCi0jZW5kaWYgLyogSVJJWCAqLwotI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogREdVWCAqLwotI2VuZGlmIC8qIEFJWCAq LwotI2VuZGlmIC8qIE1fWEVOSVggKi8KLSNlbmRpZiAvKiBDS19TQ08zMlY0ICovCi0jZW5kaWYg LyogQ0tfU0NPVjUgKi8KLSNlbmRpZiAvKiBVTklYV0FSRSAqLwotI2VuZGlmIC8qIFFOWDYgKi8K LSNlbmRpZiAvKiBRTlggKi8KLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwot I2VuZGlmIC8qIF9fbGludXhfXyAqLwotI2VuZGlmIC8qIF9fRnJlZUJTRF9fICovCi0jZW5kaWYg LyogSFBVWCAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNl bmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQkgICApOwotfQotCi0vKiAgQyBLIF8g RSBSIFIgUyBUIFIgIC0tICBSZXR1cm4gbWVzc2FnZSBmcm9tIG1vc3QgcmVjZW50IHN5c3RlbSBl cnJvciAqLwotCi0jaWZkZWYgQ0tST09UCi1leHRlcm4gaW50IGNrcm9vdGVycjsKLSNlbmRpZiAv KiBDS1JPT1QgKi8KLQotY2hhciAqCi1ja19lcnJzdHIoKSB7Ci0jaWZkZWYgVVNFX1NUUkVSUk9S Ci0jaWZuZGVmIENLX0FOU0lMSUJTCi0gICAgLyogU2hvdWxkIGhhdmUgYmVlbiBkZWNsYXJlZCBp biA8c3RyaW5nLmg+ICovCi1fUFJPVE9UWVAoIGNoYXIgKiBzdHJlcnJvciwgKGludCkgKTsKLSNl bmRpZiAvKiBDS19BTlNJTElCUyAqLwotI2lmZGVmIENLUk9PVAotICAgIGlmIChja3Jvb3RlcnIp Ci0gICAgICByZXR1cm4oIk9mZiBsaW1pdHMiKTsKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAgICBy ZXR1cm4oc3RyZXJyb3IoZXJybm8pKTsKLSNlbHNlICAvKiAhVVNFX1NUUkVSUk9SICovCi0jaWZk ZWYgVk1TCi0gICAgZXh0ZXJuIGNoYXIgKiBja3Ztc2VycnN0cih1bnNpZ25lZCBsb25nKTsKLSNp ZmRlZiBDS1JPT1QKLSAgICBpZiAoY2tyb290ZXJyKQotICAgICAgcmV0dXJuKCJPZmYgbGltaXRz Iik7Ci0jZW5kaWYgLyogQ0tST09UICovCi0gICAgcmV0dXJuKGNrdm1zZXJyc3RyKDBMKSk7Ci0j ZWxzZSAgLyogIVZNUyAqLwotI2lmZGVmIEJTRDQ0Ci0jaWZkZWYgX18zODZCU0RfXwotI2lmbmRl ZiBORFNZU0VSUkxJU1QKLSAgICBleHRlcm4gaW50IHN5c19uZXJyOwotICAgIGV4dGVybiBjaGFy ICpzeXNfZXJybGlzdFtdOwotI2VuZGlmIC8qIE5EU1lTRVJSTElTVCAqLwotI2Vsc2UgIC8qICFf XzM4NkJTRF9fICovCi0jaWZuZGVmIF9fYnNkaV9fCi0jaWZuZGVmIE5EU1lTRVJSTElTVAotICAg IGV4dGVybiBpbnQgc3lzX25lcnI7Ci0gICAgZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IHN5c19l cnJsaXN0W107Ci0jZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCi0jZW5kaWYgLyogX19ic2RpX18g Ki8KLSNlbmRpZiAvKiBfXzM4NkJTRF9fICovCi0jaWZkZWYgQ0tST09UCi0gICAgaWYgKGNrcm9v dGVycikKLSAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOwotICAgIGVsc2UKLSNlbmRpZiAvKiBD S1JPT1QgKi8KLSAgICBpZiAoZXJybm8gPj0gc3lzX25lcnIpCi0gICAgICByZXR1cm4oIkVycm9y IG51bWJlciBvdXQgb2YgcmFuZ2UiKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oKGNoYXIgKikg c3lzX2Vycmxpc3RbZXJybm9dKTsKLSNlbHNlIC8qICFCU0Q0NCAqLwotI2lmZGVmIEFUVFNWCi0j aWZuZGVmIE5EU1lTRVJSTElTVAotICAgIGV4dGVybiBpbnQgc3lzX25lcnI7Ci0gICAgZXh0ZXJu IGNoYXIgKnN5c19lcnJsaXN0W107Ci0jZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCi0jaWZkZWYg Q0tST09UCi0gICAgaWYgKGNrcm9vdGVycikKLSAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOwot ICAgIGVsc2UKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAgICBpZiAoZXJybm8gPj0gc3lzX25lcnIp Ci0gICAgICByZXR1cm4oIkVycm9yIG51bWJlciBvdXQgb2YgcmFuZ2UiKTsKLSAgICBlbHNlCi0g ICAgICByZXR1cm4oKGNoYXIgKikgc3lzX2Vycmxpc3RbZXJybm9dKTsKLSNlbHNlIC8qICFBVFRT ViAqLwotI2lmZGVmIEJTRDQKLSNpZm5kZWYgTkRTWVNFUlJMSVNUCi0gICAgZXh0ZXJuIGludCBz eXNfbmVycjsKLSAgICBleHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKLSNlbmRpZiAvKiBORFNZ U0VSUkxJU1QgKi8KLSNpZmRlZiBDS1JPT1QKLSAgICBpZiAoY2tyb290ZXJyKQotICAgICAgcmV0 dXJuKCJPZmYgbGltaXRzIik7Ci0gICAgZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwotICAgIGlm IChlcnJubyA+PSBzeXNfbmVycikKLSAgICAgIHJldHVybigiRXJyb3IgbnVtYmVyIG91dCBvZiBy YW5nZSIpOwotICAgIGVsc2UKLSAgICAgIHJldHVybigoY2hhciAqKSBzeXNfZXJybGlzdFtlcnJu b10pOwotI2Vsc2UKLSNpZmRlZiBPUzIKLSNpZm5kZWYgTkRTWVNFUlJMSVNUCi0gICAgZXh0ZXJu IGNoYXIgKnN5c19lcnJsaXN0W107Ci0jZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCi0jaWZkZWYg TlQKLSAgICBleHRlcm4gaW50X3N5c19uZXJyOwotI2VuZGlmIC8qIE5UICovCi0gICAgY2hhciAq ZTsKLSNpZmRlZiBDS1JPT1QKLSAgICBpZiAoY2tyb290ZXJyKQotICAgICAgcmV0dXJuKCJPZmYg bGltaXRzIik7Ci0jZW5kaWYgLyogQ0tST09UICovCi0gICAgZSA9IChlcnJubyA+IC0xCi0jaWZk ZWYgTlQKLSAgICAgICAgICYmIGVycm5vIDw9IF9zeXNfbmVycgotI2VuZGlmIC8qIE5UICovCi0g ICAgICAgICApID8KLSNpZmRlZiBOVAotICAgICAgICAgKGNoYXIgKikgc3lzX2Vycmxpc3RbZXJy bm9dCi0jZWxzZSAvKiBOVCAqLwotICAgICAgICAgLyogSSBkb24ndCBrbm93IGhvdyB0byBnZXQg YSBDTElCIGVycm9yIHN0cmluZyBpbiBPUy8yICovCi0gICAgICAgICBzdHJlcnJvcihlcnJubykK LSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgIDogIiI7Ci0gICAgcmV0dXJuKGUgPyBlIDog IiIpOwotI2Vsc2UgLyogT1MyICovCi0gICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBCU0Q0ICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0NCAq LwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVTRV9TVFJFUlJPUiAqLwotfQotCi0jaWZk ZWYgUEFUVEVSTlMKLS8qCi0gIEZpbGVuYW1lIHBhdHRlcm4gcmVjb2duaXRpb24gbGlzdHMgZm9y IGF1dG9tYXRpYyB0ZXh0L2JpbmFyeSBzd2l0Y2hpbmcuCi0gIFRoZXNlIGFyZSBzb21ld2hhdCBw YXNzZSBhZnRlciB0aGUgYWRkaXRpb24gb2Ygc2NhbmZpbGUoKSAgKDcuMCkuCi0gIEJ1dCB3aXRo IHRoZSBhZGRpdGlvbiBvZiBGVFAgW01dR0VULCB0aGV5J3JlIGJhY2sgaW4gc3R5bGUgKDguMCku Ci0KLSAgQWx0aG91Z2gsIHdpdGggRlRQIHRoZSBsaXN0cyBuZWVkIHRvIGJlIHVzZWQgaW4gdGhl IHJldmVyc2UuICBXaXRoCi0gIEtlcm1pdCB0aGUgbGlzdCBpcyB1c2VkIHRvIGltcGx5IHRoZSB0 eXBlcyBvZiB0aGUgbG9jYWwgc3lzdGVtLiAgV2hlcmVhcwotICB3aXRoIEZUUCwgdGhlIGxpc3Qg bXVzdCBiZSB1c2VkIHRvIGltcGx5IHRoZSB0eXBlIG9mIHRoZSByZW1vdGUgc3lzdGVtLgotICBU aGVyZWZvcmUsIGFsbCBwbGF0Zm9ybXMgbXVzdCBub3cgc3VwcG9ydCBhbGwgb2YgdGhlIGxpc3Rz LgotKi8KLWNoYXIgKnR4dHBhdHRlcm5zW0ZUUEFUVEVSTlMrMV0gPSB7IE5VTEwsIE5VTEwgfTsK LWNoYXIgKmJpbnBhdHRlcm5zW0ZUUEFUVEVSTlMrMV0gPSB7IE5VTEwsIE5VTEwgfTsKLS8qCi0g IERlZmF1bHQgcGF0dGVybiBsaXN0cyBmb3IgZWFjaCBwbGF0Zm9ybS4uLgotCi0gIE5PVEU6IElu IG1vc3QgY2FzZXMgd2UgbGVhdmUgIi5obHAiLCAiLmluaSIsIGFuZCAiLnNjciIgYWxvbmU7IGFs dGhvdWdoIHRoZXkKLSAgYXJlIHRyYWRpdGlvbmFsbHkgdGV4dCB0eXBlcywgdGhleSBhcmUgYmlu YXJ5IGluIFdpbmRvd3MuICBTbyB0aGV5IGFyZQotICBoYW5kbGVkIGJ5IHRoZSBwcmV2YWlsaW5n IFNFVCBGSUxFIFRZUEUsIHJhdGhlciB0aGFuIGF1dG9tYXRpY2FsbHkuCi0gIFNpbWlsYXJseSBm b3IgIi5kYXQiLCAiLmluZiIsIGFuZCBzbyBvbi4gIEFsc28gIi5wcyIgc2luY2UgUG9zdFNjcmlw dCBmaWxlcwotICBhcmUgbm90IGFsd2F5cyB0ZXh0LiAgIi5sb2ciIGlzIG9taXR0ZWQgc2luY2Ug bG9ncyBjYW4gYmUgdGV4dCBvciBiaW5hcnksCi0gIGV4Y2VwdCBpbiBWTVMgdGhleSBhcmUgdXN1 YWxseSB0ZXh0LCBldGMgZXRjLgotCi0gIExhdGVyIChTZXAgMjAwMyk6IEFkZCBQb3N0U2NyaXB0 IHRvIGJpbmFyeSBwYXR0ZXJucy4KLSovCi1zdGF0aWMgY2hhciAqdHh0cFtTWVNfTUFYXVtGVFBB VFRFUk5TXSA9IHsKLSAgICAvKiBVTktOT1dOICovIHsKLQlOVUxMLCBOVUxMCi0gICAgfSwKLSAg ICB7CQkJCQkvKiBVTklYICovCi0gICAgIioudHh0IiwiKi5jIiwiKi5oIiwiKi5yIiwiKi53Iiwi Ki5jcHAiLCIqLmNjIiwiKi5rc2MiLCIqLmJ3ciIsIioudXBkIiwKLSAgICAiKi5odG1sIiwiKi5o dG0iLCIqLm1zcyIsIioudGV4IiwiKi5uciIsIltNbV1ha2VmaWxlIiwgIiouaGV4IiwgIiouaHF4 IiwKLSAgICAiKi5mb3IiLCIqLmY3NyIsIiouZiIsIiouRiIsIioucyIsIioucGFzIiwiKi5qYXZh IiwiKi5lbCIsIioubGlzcCIsIiouc2giLAotICAgICIqLm00IiwiKi5wZXJsIiwiKi5wbCIsIiou cG9kIiwiKi5wbSIsIiouYXdrIiwiKi5zbm8iLCIqLnNwdCIsIiouc2VkIiwKLSAgICAiKi5rc2Mi LCIqLlRYVCIsICIqcmVhZC5tZSIsICIqUkVBRC5NRSIsICIuKiIsICIqLy4qIiwgIioubWVtIiwi Ki5tYWMiLAotICAgIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIFdJTjMyICovCi0gICAgIiou dHh0IiwiKi5rc2MiLCIqLmh0bSIsIiouaHRtbCIsIiouYmF0IiwiKi5jbWQiLCIqLmphdiIsIiou YXNtIiwgIiouaGV4IiwKLSAgICAiKi5ocXgiLCAiKi5jIiwgIiouaCIsICIqLmNwcCIsICIqLmhw cCIsICIqLmN4eCIsICIqLmN4eCIsICIqLnciLAotICAgICIqLmphdmEiLCAiKi5id3IiLCAiKi51 cGQiLCAiKi5tYWsiLCAicmVhZC5tZSIsICIqLm1hcCIsICJtYWtlZmlsZSIsCi0gICAgIioubWVt IiwiKi5tYWMiLCIqLmNjIiwiKi5wbCIsIioucG9kIiwiKi5wbSIsIioubTQiLE5VTEwKLSAgICB9 LAotICAgIHsJCQkJCS8qIFZNUyAqLwotICAgICIqLmNvbSIsIioudHh0IiwiKi5jIiwgICIqLmZv ciIsIioucGFzIiwiKi5ybm8iLCIqLnJuaCIsIioubWFyIiwiKi5ibGkiLAotICAgICIqLmhscCIs IioubXNzIiwiKi5kb2MiLCIqLmJ3ciIsIiouY2xkIiwiKi5oZXgiLCIqLmJhcyIsIiouaW5pIiwi Ki5sb2ciLAotICAgICIqLm1tcyIsIioub3B0IiwiKi5rc2MiLCIqLnBlcmwiLCIqLnBsIiwiKi5w b2QiLCIqLnBtIiwiKi5zbm8iLCIqLnNwdCIsCi0gICAgIioubWVtIixOVUxMCi0gICAgfSwKLSAg ICB7CQkJCQkvKiBPUzIgKi8KLSAgICAiKi50eHQiLCIqLmtzYyIsIiouaHRtIiwiKi5odG1sIiwi Ki5iYXQiLCIqLmNtZCIsIiouamF2IiwiKi5hc20iLCAiKi5oZXgiLAotICAgICIqLmhxeCIsICIq LmMiLCAiKi5oIiwgIiouY3BwIiwgIiouaHBwIiwgIiouY3h4IiwgIiouY3h4IiwgIioudyIsCi0g ICAgIiouamF2YSIsICIqLmJ3ciIsICIqLnVwZCIsICIqLm1hayIsICJyZWFkLm1lIiwgIioubWFw IiwgIm1ha2VmaWxlIiwKLSAgICBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBET1MgKi8KLSAg ICAiKi50eHQiLCIqLmtzYyIsIiouaHRtIiwiKi5iYXQiLCIqLmNtZCIsIiouamF2IiwiKi5hc20i LCAiKi5oZXgiLAotICAgICIqLmhxeCIsICIqLmMiLCAiKi5oIiwgIiouY3BwIiwgIiouaHBwIiwg IiouY3h4IiwgIiouY3h4IiwgIioudyIsCi0gICAgIiouYndyIiwgIioudXBkIiwgIioubWFrIiwg InJlYWQubWUiLCAiKi5tYXAiLCAibWFrZWZpbGUiLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkv KiBUT1BTLTEwICovCi0gICAgIiouY21kIiwiKi5obHAiLCIqLmRvYyIsIiouaW5pIiwiKi50eHQi LCIqLm1hYyIsIiouZm9yIiwiKi5zYWkiLCIqLmJsaSIsCi0gICAgIioucGFzIiwiKi5zbm8iLCIq LnNwdCIsIioucGNsIiwiKi5tc3MiLCIqLnJubyIsIiouYjM2IiwiKi50ZXgiLCIqLnB1YiIsCi0g ICAgIioucmVxIiwiKi5yMzYiLCIqLm1lbSIsIiouYndyIiwiKi5jY2wiLCIqLmN0bCIsIioucm5o IiwiKi5rc2MiLE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIFRPUFMtMjAgKi8KLSAgICAiKi5j bWQiLCIqLmhscCIsIiouZG9jIiwiKi5pbmkiLCIqLnR4dCIsIioubWFjIiwiKi5mb3IiLCIqLnNh aSIsIiouYmxpIiwKLSAgICAiKi5wYXMiLCIqLnNubyIsIiouc3B0IiwiKi5wY2wiLCIqLm1zcyIs Iioucm5vIiwiKi5iMzYiLCIqLnRleCIsIioucHViIiwKLSAgICAiKi5yZXEiLCIqLnIzNiIsIiou bWVtIiwiKi5id3IiLCIqLmNjbCIsIiouY3RsIiwiKi5ybmgiLCIqLmtzYyIsTlVMTAotICAgIH0s Ci0gICAgewkJCQkJLyogU1RSQVRVUyBWT1MgKi8KLSAgICAiKi50eHQiLCIqLmtzYyIsIiouaHRt IiwiKi5odG1sIiwiKi5iYXQiLCAiKi5jbWQiLCIqLmphdiIsIiouYXNtIiwiKi5oZXgiLAotICAg ICIqLmhxeCIsIiouYyIsICAiKi5oIiwgICIqLnciLCAgICIqLmphdmEiLCIqLmJ3ciIsIioudXBk IiwiKi50dHAiLCIqLmNtIiwKLSAgICAiKi5wbDEiLCIqLmVtYWNzIiwgInJlYWQubWUiLCAiKi5w bCIsICJtYWtlZmlsZSIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIERHIEFPUy9WUyAqLwot ICAgICIqLnR4dCIsICIqLmMiLCAiKi5oIiwgIioudyIsICIqLmVyIiwgIiouYndyIiwgIioudXBk IiwgInJlYWQubWUiLAotICAgICIqLmNsaSIsICIqLmtzYyIsIE5VTEwKLSAgICB9LAotICAgIHsJ CQkJCS8qIE9TSyAqLwotICAgICIqLmMiLCIqLmNwcCIsIiouaCIsIiouYSIsIipha2VmaWxlIiwg LyogcHJvZ3JhbSBzb3VyY2VzICovCi0gICAgIiouZm9yIiwiKi5mNzciLCIqLmYiLCIqLkYiLCIq LnMiLCIqLnBhcyIsIiouamF2YSIsIiouZWwiLCIqLmxpc3AiLAotICAgICIqLnNoIiwiKi5wZXJs IiwiKi5hd2siLCIqLnNubyIsIiouc3B0IiwiKi5zZWQiLAotICAgICIqLnR4dCIsIioudyIsCQkJ LyogZ2VuZXJhbCB0ZXh0ICovCi0gICAgIioua3NjIiwiKi5id3IiLCIqLnVwZCIsCi0gICAgIiou aHRtbCIsIiouaHRtIiwiKi5tc3MiLCIqLnRleCIsIioubnIiLCIqLmhleCIsICIqLmhxeCIsCi0g ICAgIiouVFhUIiwgIipyZWFkLm1lIiwgIipSRUFELk1FIiwgIi4qIiwgIiovLioiLAotICAgIE5V TEwKLSAgICB9Ci19OwotCi0vKiBOb3RlOiAuRE9DIGFkZGVkIHRvIChzb21lKSBiaW5hcnkgcGF0 dGVybnMgSnVuZSAxOTk4Li4uIE1pY3Jvc29mdCB3aW5zLiAqLwotCi1zdGF0aWMgY2hhciAqYmlu cFtTWVNfTUFYXVtGVFBBVFRFUk5TXSA9IHsKLSAgICB7CQkJCQkvKiBVTktOT1dOICovCi0gICAg TlVMTCwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogVU5JWCAqLwotICAgICIqLmd6IiwiKi5a IiwiKi50Z3oiLCIqLmdpZiIsICIqLnRhciIsIiouemlwIiwiKi5vIiwiKi5zbyIsIiouYSIsIiou b3V0IiwKLSAgICAiKi5leGUiLCAiKi5qcGciLCAiKi5qcGVnIiwgIioudGlmIiwiKi50aWZmIiwg IioucGRmIiwgIiouc28uKiIsICIqLmNsYXNzIiwKLSAgICAiKi5ycG0iLCAiKi5ibXAiLCAiKi5i ejIiLCAiKi5CTVAiLCAiKi5kbGwiLCAiKi5kb2MiLCAiKi52eGQiLCAiKi5kY3giLAotICAgICIq LnhsKiIsICIqLmx6aCIsICIqLmxoeiIsICIqLmF1IiwgIioudm9jIiwgIioubXBnIiwgIioubXBl ZyIsIlt3a11lcm1pdCIsCi0gICAgIioucHMiLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBX SU4zMiAqLwotICAgICIqLmV4ZSIsICIqLnppcCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIs ICIqLmpwZyIsICIqLndhdiIsICIqLnJhbSIsCi0gICAgIiouY2xhc3MiLCIqLmNsYSIsIiouZGxs IiwgIiouZHJ2IiwgIioub2N4IiwgIioudmJ4IiwgIioubGliIiwgIiouaWNvIiwKLSAgICAiKi5i bXAiLCAiKi50aWYiLCAiKi50YXIiLCAiKi5neiIsICAiKi50Z3oiLCAiKi54bCoiLCAiKi5kb2Mi LCAiKi52eGQiLAotICAgICIqLnBkZiIsICIqLmx6aCIsICIqLnZ4ZCIsICIqLnNuZCIsICIqLmF1 IiwgIiogLnZvYyIsICIqLm1wZyIsICIqLm1wZWciLAotICAgICIqLnBzIiwgTlVMTAotICAgIH0s Ci0gICAgewkJCQkJLyogVk1TICovCi0gICAgIiouZXhlIiwiKi5vYmoiLCIqLmJhayIsIiouYmlu IiwiKi5hZGYiLCIqLnN0YiIsIioubWFpIiwiKi5zeXMiLCIqLmRtcCIsCi0gICAgIioucHMiLCAi Ki5kYXQiLCIqLnBhciIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIE9TMiAqLwotICAgICIq LmV4ZSIsICIqLnppcCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIsICIqLmpwZyIsICIqLndh diIsICIqLnJhbSIsCi0gICAgIiouY2xhc3MiLCAiKi5jbGEiLCAiKi5kbGwiLCAiKi5kcnYiLCAi Ki5vY3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28iLAotICAgICIqLmJtcCIsICIqLnRpZiIs ICIqLnRhciIsICIqLmd6IiwgIioudGd6IiwgIioueGwqIiwgIiouZG9jIiwgIioudnhkIiwKLSAg ICAiKi5wZGYiLCAiKi5wcyIsICIqLmx6aCIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIERP UyAqLwotICAgICIqLmV4ZSIsICIqLnppcCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIsICIq LmpwZyIsICIqLndhdiIsICIqLnJhbSIsCi0gICAgIiouY2xhIiwgIiouZGxsIiwgIiouZHJ2Iiwg Iioub2N4IiwgIioudmJ4IiwgIioubGliIiwgIiouaWNvIiwKLSAgICAiKi5ibXAiLCAiKi50aWYi LCAiKi50YXIiLCAiKi5neiIsICIqLnRneiIsICIqLnhsKiIsICIqLmRvYyIsICIqLnZ4ZCIsCi0g ICAgIioucGRmIiwgIioucHMiLCAiKi5semgiLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBU T1BTMTAgKi8KLSAgICAiKi5leGUiLCIqLnNhdiIsIiouYmluIiwiKi5yaW0iLCIqLnJlbCIsIiou dW52IiwiKi5saWIiLCIqLnRhcCIsIiouZHZpIiwKLSAgICAiKi5wcyIsIE5VTEwKLSAgICB9LAot ICAgIHsJCQkJCS8qIFRPUFMyMCAqLwotICAgICIqLmV4ZSIsIiouc2F2IiwiKi5iaW4iLCIqLnJp bSIsIioucmVsIiwiKi51bnYiLCIqLmxpYiIsIioudGFwIiwiKi5kdmkiLAotICAgICIqLnBzIiwg TlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogU1RSQVRVUyBWT1MgKi8KLSAgICAiKi5leGUiLCAi Ki56aXAiLCAiKi5vYmoiLCAiKi5jb20iLCAiKi5naWYiLCAiKi5qcGciLCAiKi53YXYiLCAiKi5y YW0iLAotICAgICIqLmNsYXNzIiwgIiouY2xhIiwgIiouZGxsIiwgIiouZHJ2IiwgIioub2N4Iiwg IioudmJ4IiwgIioubGliIiwgIiouaWNvIiwKLSAgICAiKi5ibXAiLCAiKi50aWYiLCAiKi50YXIi LCAiKi5neiIsICIqLnRneiIsICIqLnhsKiIsICIqLmRvYyIsICIqLnZ4ZCIsCi0gICAgIioucGRm IiwgIioucHMiLCAiKi5semgiLCAiKi5wbSIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIERH ICovCi0gICAgIioub2IiLCAiKi5wciIsICIqLmRtcCIsICIqLnBzIiwgTlVMTAotICAgIH0sCi0g ICAgeyAvKiBPU0sgKi8KLSAgICAiKi5neiIsIiouWiIsIioueiIsIioudGd6IiwiKi5saHoiLCIq LnRhciIsCS8qIGFyY2hpdmVycyAqLwotICAgICIqLnppcCIsIiouYXIiLCIqLnpvbyIsIioucnBt IiwiKi5semgiLAotICAgIC8qIG9iamVjdCBmaWxlcywgbGlicmFyaWVzLCBleGVjdXRhYmxlcyAq LwotICAgICIqLnIiLCIqLmwiLCIqLmV4ZSIsICIqLmRsbCIsICIqLnNvLioiLCAiKi5jbGFzcyIs Ci0gICAgLyogaW1hZ2VzICovCi0gICAgIiouZ2lmIiwgIiouanBnIiwgIiouanBlZyIsICIqLnRp ZiIsIioudGlmZiIsICIqLnBkZiIsICIqLnBzIiwKLSAgICAiKi5ibXAiLCAiKi5iejIiLCAiKi5C TVAiLCIqLnBjeCIsCi0gICAgTlVMTAotICAgIH0KLX07Ci0KLS8qCi0gIFNldCB1cCBkZWZhdWx0 IHBhdHRlcm4gbGlzdHMgc28gdGhleSBjYW4gYmUgZnJlZWQgYW5kIHJlLW1hbGxvYydkLgotICBF YWNoIHBhdHRlcm4gbGlzdCBtdXN0IHRlcm1pbmF0ZWQgYnkgYSBudWxsIGVsZW1lbnQuCi0qLwot Vk9JRAotaW5pdHBhdCgpIHsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRU RVJOUzsgaSsrKSB7Ci0gICAgICAgIHR4dHBhdHRlcm5zW2ldID0gTlVMTDsKLSAgICAgICAgYmlu cGF0dGVybnNbaV0gPSBOVUxMOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRURVJO UzsgaSsrKSB7Ci0jaWZkZWYgVU5JWAotICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0p LHR4dHBbU1lTX1VOSVhdW2ldKTsKLSNlbHNlIC8qIFVOSVggKi8KLSNpZmRlZiBPUzIKLSNpZmRl ZiBOVAotICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX1dJTjMyXVtp XSk7Ci0jZWxzZSAvKiBOVCAqLwotICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4 dHBbU1lTX09TMl1baV0pOwotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiBPUzIgKi8KLSNpZmRl ZiBWTVMKLSAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19WTVNdW2ld KTsKLSNlbHNlIC8qIFZNUyAqLwotI2lmZGVmIFNUUkFUVVMKLSAgICAgICAgbWFrZXN0cigmKHR4 dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19WT1NdW2ldKTsKLSNlbHNlIC8qIFNUUkFUVVMgKi8KLSNp ZmRlZiBkYXRhZ2VuZXJhbAotICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBb U1lTX0RHXVtpXSk7Ci0jZWxzZSAvKiBkYXRhZ2VuZXJhbCAqLwotI2lmZGVmIE9TSwotICAgICAg ICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX09TS11baV0pOwotI2Vsc2UgLyog T1NLICovCi0gICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfVU5LXVtp XSk7Ci0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAv KiBTVFJBVFVTICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYg LyogVU5JWCAqLwotICAgICAgICBpZiAoIXR4dHBbaV0pCi0gICAgICAgICAgYnJlYWs7Ci0gICAg fQotICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TOyBpKyspIHsKLSNpZmRlZiBVTklYCi0g ICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfVU5JWF1baV0pOwotI2Vs c2UgLyogVU5JWCAqLwotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0gICAgICAgIG1ha2VzdHIoJihi aW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfV0lOMzJdW2ldKTsKLSNlbHNlIC8qIE5UICovCi0gICAg ICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfT1MyXVtpXSk7Ci0jZW5kaWYg LyogTlQgKi8KLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVmIFZNUwotICAgICAgICBtYWtlc3RyKCYo YmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX1ZNU11baV0pOwotI2Vsc2UgLyogVk1TICovCi0jaWZk ZWYgU1RSQVRVUwotICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX1ZP U11baV0pOwotI2Vsc2UgLyogU1RSQVRVUyAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgICAg IG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfREddW2ldKTsKLSNlbHNlIC8qIGRh dGFnZW5lcmFsICovCi0jaWZkZWYgT1NLCi0gICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tp XSksYmlucFtTWVNfT1NLXVtpXSk7Ci0jZWxzZSAvKiBPU0sgKi8KLSAgICAgICAgbWFrZXN0cigm KGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19VTktdW2ldKTsKLSNlbmRpZiAvKiBPU0sgKi8KLSNl bmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBW TVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgIGlmICgh YmlucFtpXSkKLSAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLS8qCi0gIG0gYSB0IGMgaCBu IGEgbSBlICAtLSAgQ29tcGFyZSBmaWxlbmFtZSB3aXRoIHRleHQgJiBiaW5hcnkgbmFtZSBwYXR0 ZXJucy4KLQotICBSZXR1cm5zOgotICAgIDAgaWYgbmFtZSBtYXRjaGVzIGEgdGV4dCBwYXR0ZXJu IGJ1dCBub3QgYSBiaW5hcnkgcGF0dGVybi4KLSAgICAxIGlmIG5hbWUgbWF0Y2hlcyBhIGJpbmFy eSBwYXR0ZXJuIGJ1dCBub3QgYSB0ZXh0IHBhdHRlcm4uCi0gICAtMSBpZiBuYW1lIG1hdGNoZXMg bm8gcGF0dGVybnMuCi0gICAtMiBpZiBuYW1lIG1hdGNoZXMgYSBiaW5hcnkgcGF0dGVybiBhbmQg YSB0ZXh0IHBhdHRlcm4uCi0qLwotaW50Ci1tYXRjaG5hbWUoZmlsZW5hbWUsIGxvY2FsLCBvcykg Y2hhciAqIGZpbGVuYW1lOyBpbnQgbG9jYWw7IGludCBvczsgewotICAgIGludCByYyA9IC0xOwkJ CS8qIFJldHVybiBjb2RlICovCi0gICAgY2hhciAqIG5hbWUsICogcDsKLSNpZmRlZiBPUzJPUlVO SVgKLSAgICBjaGFyIHRtcGJ1ZltDS01BWFBBVEgrMV07Ci0jZW5kaWYgLyogT1MyT1JVTklYICov Ci0KLSAgICBuYW1lID0gZmlsZW5hbWUgPyBmaWxlbmFtZSA6ICIiOwkvKiBDb3B5IG9mIG9yaWdp bmFsIGFyZyAqLwotICAgIGlmIChwYXR0ZXJucyAmJiAqbmFtZSkgewkJLyogSWYgUEFUVEVSTlMg T04uLi4gKi8KLQlpbnQgaTsKLQotI2lmZGVmIE9TMk9SVU5JWAotCWlmIChja21hdGNoKCIqLn5b MS05XSp+IixuYW1lLDEsMSkpIHsgLyogTmFtZSBoYXMgYmFja3VwIHN1ZmZpeD8gKi8KLQkgICAg aW50IGs7Ci0JICAgIGsgPSBja3N0cm5jcHkodG1wYnVmLG5hbWUsQ0tNQVhQQVRIKzEpOyAvKiBZ ZXMsIGNvcHkgYW5kIHN0cmlwICovCi0JICAgIGZvciAoaSA9IGsgLSAzOyBpID4gNDsgaS0tKSB7 Ci0JCWlmICh0bXBidWZbaV0gPT0gJ34nICYmIHRtcGJ1ZltpLTFdID09ICcuJykgewotCQkgICAg dG1wYnVmW2ktMV0gPSBOVUw7Ci0JCSAgICBicmVhazsKLQkJfQotCSAgICB9Ci0JICAgIG5hbWUg PSB0bXBidWY7CQkvKiBBbmQgcG9pbnQgdG8gc3RyaXBwZWQgY29weSAqLwotCX0KLSNlbmRpZiAv KiBPUzJPUlVOSVggKi8KLQl6c3RyaXAobmFtZSwmcCk7CQkvKiBTdHJpcCBwYXRobmFtZSB0b28g Ki8KLQluYW1lID0gcDsKLQotICAgICAgICBpZiAobG9jYWwpIHsKLSAgICAgICAgICAgIGlmICh0 eHRwYXR0ZXJuc1swXSkgewkvKiBTZWFyY2ggdGV4dCBwYXR0ZXJucyAqLwotICAgICAgICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TICYmIHR4dHBhdHRlcm5zW2ldOyBpKyspIHsK LSAgICAgICAgICAgICAgICAgICAgaWYgKGNrbWF0Y2godHh0cGF0dGVybnNbaV0sbmFtZSxmaWxl Y2FzZSwxKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYmlucGF0dGVybnNbMF0pIHsJLyog QW5kIHNlYXJjaCBiaW5hcnkgcGF0dGVybnMgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgRlRQQVRURVJOUyAmJiBiaW5wYXR0ZXJuc1tpXTsgaSsrKSB7Ci0gICAgICAgICAgICAg ICAgICAgIGlmIChja21hdGNoKGJpbnBhdHRlcm5zW2ldLG5hbWUsZmlsZWNhc2UsMSkpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHJjID0gKHJjID4gLTEpID8gLTIgOiAxOwotICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICB9Ci0JfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChvcyA+PSAw ICYmIG9zIDwgU1lTX01BWCkgewotCQlpZiAodHh0cFtvc11bMF0pIHsKLQkJICAgIGZvciAoaSA9 IDA7IGkgPCBGVFBBVFRFUk5TICYmIHR4dHBbb3NdW2ldOyBpKyspIHsKLQkJCWlmIChja21hdGNo KHR4dHBbb3NdW2ldLG5hbWUsZmlsZWNhc2UsMSkpIHsKLQkJCSAgICByYyA9IDA7Ci0JCQkgICAg YnJlYWs7Ci0JCQl9Ci0JCSAgICB9Ci0JCX0KLQkJaWYgKGJpbnBbb3NdWzBdKSB7Ci0JCSAgICBm b3IgKGkgPSAwOyBpIDwgRlRQQVRURVJOUyAmJiBiaW5wW29zXVtpXTsgaSsrKSB7Ci0JCQlpZiAo Y2ttYXRjaChiaW5wW29zXVtpXSxuYW1lLGZpbGVjYXNlLDEpKSB7Ci0JCQkgICAgcmMgPSAocmMg PiAtMSkgPyAtMiA6IDE7Ci0JCQkgICAgYnJlYWs7Ci0JCQl9Ci0JCSAgICB9Ci0JCX0KLQkgICAg fQotICAgICAgICB9Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsIm1hdGNobmFtZSIsbmFtZSxyYyk7 Ci0gICAgcmV0dXJuKHJjKTsKLX0KLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotCi0jaWZkZWYgVU5J Q09ERQotI2lmbmRlZiBOT0VWRU5NQVgKLSNkZWZpbmUgRVZFTk1BWAotI2VuZGlmIC8qIE5PRVZF Tk1BWCAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotLyogIFMgQyBBIE4gRiBJIEwgRSAgLS0g IEFuYWx5emUgYSBmaWxlJ3MgY29udGVudHMgICovCi0KLS8qCi0gIENhbGwgd2l0aDoKLSAgICBu YW1lOiAgICBQb2ludGVyIHRvIG5hbWUgb2YgZXhpc3RpbmcgZmlsZS4KLSAgICBmbGFnOiAgICBQ b2ludGVyIHRvIGludCBpbiB3aGljaCB0byByZXR1cm4gYWRkaXRpb25hbCBudW1lcmljIGRhdGEu Ci0KLSAgUmV0dXJuczoKLSAgICAtMSBvbiBmYWlsdXJlICh0byBvcGVuIGZpbGUgb3IgdG8gcmVh ZCBmcm9tIGl0KS4KLSAgICBJbnRlZ2VyLCAwLi40LCBvbiBzdWNjZXNzIGluZGljYXRpbmcgZmls ZSB0eXBlOgotICAgICAwID0gNy1iaXQgdGV4dCAoZmxhZyA9IC0xKQotICAgICAxID0gVVRGLTgg dGV4dCAoZmxhZyA9IC0xKQotICAgICAyID0gVUNTLTIgdGV4dCAoZmxhZyA9ICAwOiBiaWctZW5k aWFuOyBmbGFnID0gMTogbGl0dGxlLWVuZGlhbikKLSAgICAgMyA9IDgtYml0IHRleHQgKGZsYWcg PSAgMDogbm8gQzEgYnl0ZXM7IGZsYWcgPSAxOiBpbmNsdWRlcyBDMSBieXRlcykKLSAgICAgNCA9 IFRleHQgICAgICAgKHR5cGUgdW5rbm93bikKLSAgICAgNSA9IGJpbmFyeSAgICAgKGZsYWcgPSAt MSkKLQotICBJZiBVTklDT0RFIGlzIGRlZmluZWQ6Ci0KLSAgIDEuIElmIGZpbGUgYmVnaW5zIHdp dGggYSB2YWxpZCBCT00sIGl0IGlzIGJlbGlldmVkLiAgT3RoZXJ3aXNlIHdlCi0gICAgICByZWFk IHRoZSBmaXJzdCA0SyBvZiB0aGUgZmlsZSAoc2luY2UgaXQgbWlnaHQgYmUgZW1haWwgd2l0aCB2 ZXJib3NlCi0gICAgICBoZWFkZXJzKSBhbmQgYW5hbHl6ZSBpdDoKLQotICAgMi4gSWYgZmlsZSBj b250YWlucyBvbmx5IHZhbGlkIFVURi04IHNlcXVlbmNlcywgd2UgY2FsbCBpdCBVVEYtODsKLSAg ICAgIG90aGVyd2lzZToKLQotICAgMy4gSWYgdGhlIGZpbGUgY29udGFpbnMgbG90cyBvZiBhbHRl cm5hdGUgMCBieXRlcywgd2UgY2FsbCBpdCBVQ1MtMiwgYW5kCi0gICAgICBzZXQgdGhlIHBvbGFy aXR5IGFjY29yZGluZyB0byB3aGV0aGVyIHRoZSBwcmVwb25kZXJhbmNlIG9mIHRoZW0gYXJlIGlu Ci0gICAgICBldmVuIG9yIG9kZCBwb3NpdGlvbnM7IG90aGVyd2lzZToKLQotICAgNC4gSWYgRVZF Tk1BWCBpcyBkZWZpbmVkIGFuZCB0aGUgZmlsZSBjb250YWlucyBsb3RzIG9mIGFsdGVybmF0ZSBi eXRlcyB0aGF0Ci0gICAgICBhcmUgaWRlbnRpY2FsLCBldmVuIGlmIHRoZXkgYXJlbid0IHplcm8s IGFuZCB0aGUgbnVtYmVyIG9mIHN1Y2ggYnl0ZXMKLSAgICAgIGlzIGF0IGxlYXN0IGZvdXIgdGlt ZXMgdGhlIGxlbmd0aCBvZiB0aGUgbWF4aW11bSBydW4gb2YgYWx0ZXJuYXRpbmcKLSAgICAgIGlk ZW50aWNhbCBieXRlcyBvZiB0aGUgb3Bwb3NpdGUgcG9sYXJpdHksIHdlIGNhbGwgaXQgVUNTLTI7 IG90aGVyd2lzZToKLQotICAgNS4gSWYgdGhlIGZpbGUgY29udGFpbmVkIG5vIGJ5dGVzIHdpdGgg dGhlaXIgOHRoIGJpdHMgb24gYW5kIG5vIGNvbnRyb2xzCi0gICAgICBvdGhlciB0aGFuIENSLCBM RiwgSFQsIGFuZCBGRiwgd2UgY2FsbCBpdCBBU0NJSTsgb3RoZXJ3aXNlOgotCi0gICA2LiBJZiBp dCBjb250YWlucyBDMCBjb250cm9sIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBDUiwgTEYsIEhULCBh bmQgRkYsIHdlCi0gICAgICBjYWxsIGl0IGJpbmFyeTsgb3RoZXJ3aXNlOgotCi0gICA3LiBXZSBj YWxsIGl0IDgtYml0IHRleHQsIGNoYXJhY3RlciBzZXQgdW5rbm93biAoY291bGQgYmUgTGF0aW4t MSBvcgotICAgICAgYW55dGhpbmcgZWxzZSkuCi0KLSAgIE5vdGUgdGhhdCBtYWxmb3JtZWQgVVRG LTggaXMgbm90IGRpYWdub3NlZCBhcyBVVEYtOC4KLQotICAgSWYgVU5JQ09ERSBpcyBub3QgZGVm aW5lZDoKLQotICAgMS4gSWYgdGhlIGZpbGUgY29udGFpbnMgQzAgY29udHJvbCBjaGFyYWN0ZXJz IG90aGVyIHRoYW4gQ1IsIExGLCBIVCwgYW5kCi0gICAgICBGRiwgd2UgY2FsbCBpdCBiaW5hcnk7 IG90aGVyd2lzZToKLQotICAgMi4gSWYgdGhlIGZpbGUgY29udGFpbnMgYW55IDgtYml0IGJ5dGVz LCB3ZSBjYWxsIGl0IDgtYml0IHRleHQ7IG90aGVyd2lzZToKLQotICAgMy4gV2UgY2FsbCBpdCA3 LWJpdCB0ZXh0LgotCi0gICBJbiB0aGUgbm9uLVVuaWNvZGUgY2FzZSwgVUNTLTIgaXMgZGlhZ25v c2VkIGFzIGJpbmFyeSwgYnV0IFVURi04IGFzCi0gICA4LWJpdCB0ZXh0LgotCi0gICBUaGVyZSBp cyBubyBzaWduaWZpY2FudCBzcGVlZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIFVuaWNvZGUgYW5k Ci0gICBub24tVW5pY29kZSBjYXNlcy4KLSovCi1pbnQKLXNjYW5maWxlKG5hbWUsZmxhZyxuc2Nh bmZpbGUpIGNoYXIgKiBuYW1lOyBpbnQgKiBmbGFnLCBuc2NhbmZpbGU7IHsKLSAgICBGSUxFICog ZnA7CQkJCS8qIEZpbGUgcG9pbnRlciAqLwotICAgIHVuc2lnbmVkIGNoYXIgYnVmW1NDQU5GSUxF QlVGXTsJLyogRmlsZSBkYXRhIGJ1ZmZlciBmb3IgYW5hbHlzaXMgKi8KLSAgICBpbnQgeCwgdmFs ID0gLTEsIGNvdW50ID0gMDsJCS8qIFdvcmtlcnMgKi8KLSAgICBpbnQgcmMgPSAtMTsJCQkvKiBS ZXR1cm4gY29kZSAqLwotICAgIGludCBwdiA9IC0xOwkJCS8qIFBhdHRlcm4tbWF0Y2ggdmFsdWUg Ki8KLSAgICBpbnQgZW9mID0gMDsJCQkvKiBGbGFnIGZvciBmaWxlIEVPRiBlbmNvdW50ZXJlZCAq LwotICAgIGludCBieXRlcyA9IDA7CQkJLyogVG90YWwgYnl0ZSBjb3VudCAqLwotI2lmZGVmIFVO SUNPREUKLSAgICB1bnNpZ25lZCBpbnQgYzAsIGMxOwkJLyogRmlyc3QgMiBmaWxlIGJ5dGVzIChm b3IgQk9NKSAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICBleHRlcm4gaW50IHBpcGVzZW5k LCBmaWxlcGVlazsKLQotICAgIHJlZ2lzdGVyIGludCBpOwkJCS8qIExvb3AgY29udHJvbCAqLwot ICAgIGludCByZWFkc2l6ZSA9IDA7CQkJLyogSG93IG11Y2ggdG8gcmVhZCAqLwotICAgIGludCBl aWdodGJpdCA9IDA7CQkJLyogTnVtYmVyIG9mIGJ5dGVzIHdpdGggOHRoIGJpdCBvbiAqLwotICAg IGludCBjMGNvbnRyb2xzID0gMDsJCQkvKiBDMCBub24tdGV4dCBjb250cm9sLWNoYXIgY291bnRl ciAqLwotICAgIGludCBjMG5vbmlzbyA9IDA7CQkJLyogQzAgbm9uLUlTTyBjb250cm9sLWNoYXIg Y291bnRlciAqLwotICAgIGludCBjMWNvbnRyb2xzID0gMDsJCQkvKiBDMSBjb250cm9sLWNoYXJh Y3RlciBjb3VudGVyICovCi0gICAgdW5zaWduZWQgaW50IGM7CQkJLyogQ3VycmVudCBjaGFyYWN0 ZXIgKi8KLSAgICBpbnQgcnVubWF4ID0gMDsJCQkvKiBMb25nZXN0IHJ1biBvZiAwIGJ5dGVzICov Ci0gICAgaW50IHJ1bnplcm8gPSAwOwkJCS8qIFJ1biBvZiAwIGJ5dGVzICovCi0gICAgaW50IHBj dHplcm8gPSAwOwkJCS8qIFBlcmNlbnRhZ2Ugb2YgMCBieXRlcyAqLwotICAgIGludCB0eHRjeiA9 IDA7Ci0jaWZkZWYgQ0tfQ1RSTFoKLSAgICBleHRlcm4gaW50IGVvZm1ldGhvZDsKLSNlbmRpZiAv KiBDS19DVFJMWiAqLwotCi0jaWZkZWYgVU5JQ09ERQotICAgIGludCBub3R1dGY4ID0gMDsJCQkv KiBOb256ZXJvIGlmIGRlZmluaXRlbHkgbm90IFVURi04ICovCi0gICAgaW50IHV0ZjhzdGF0ZSA9 IDA7CQkJLyogVVRGLTggcmVjb2duaXplciBzdGF0ZSAqLwotICAgIGludCBvZGR6ZXJvID0gMDsJ CQkvKiBOdW1iZXIgb2YgMCBieXRlcyBpbiBvZGQgcG9zdGlvbnMgKi8KLSAgICBpbnQgZXZlbnpl cm8gPSAwOwkJCS8qIGFuZCBpbiBldmVuIHBvc2l0aW9ucyAqLwotICAgIGludCBsZm51bCA9IDA7 CQkJLyogTnVtYmVyIG9mIDxMRj48TlVMPiBzZXF1ZW5jZXMgKi8KLSAgICBpbnQgY3JsZiA9IDA7 CQkJLyogTnVtYmVyIG9mIDxDUkxGPiBzZXF1ZW5jZXMgKi8KLSNlbHNlCi0gICAgaW50IG5vdHV0 ZjggPSAxOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBF VkVOTUFYCi0gICAgaW50IG9kZHJ1biA9IDAsIG9kZG1heCA9IDAsIG9kZGJ5dGUgPSAwLCBvZGRt YXhieXRlID0gMDsKLSAgICBpbnQgZXZlbnJ1biA9IDAsIGV2ZW5tYXggPSAwLCBldmVuYnl0ZSA9 IDAsIGV2ZW5tYXhieXRlID0gMDsKLSNlbmRpZiAvKiBFVkVOTUFYICovCi0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIGlmIChwaXBlc2VuZCB8fCBjYWxpYnJhdGUg fHwgc25kYXJyYXkpIC8qIE9ubHkgZm9yIHJlYWwgZmlsZXMgKi8KLSAgICAgIHJldHVybigtMSk7 Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgZGVidWcoRjExMSwic2NhbmZpbGUiLG5hbWUsbnNj YW5maWxlKTsKLSNpZmRlZiBQQVRURVJOUwotICAgIGlmICghZmlsZXBlZWspIHsKLQlwdiA9IG1h dGNobmFtZShuYW1lLDEsLTEpOwotCWlmIChwdiA8IDApCi0JICByYyA9IC0xOwotCWVsc2UKLQkg IHJjID0gKHB2ID09IDEpID8gRlRfQklOIDogRlRfVEVYVDsKLQlkZWJ1ZyhGMTExLCJzY2FuZmls ZSAhZmlsZXBlZWsgcmVzdWx0IixuYW1lLHJjKTsKLQlyZXR1cm4ocmMpOwotICAgIH0KLSNlbmRp ZiAvKiBQQVRURVJOUyAqLwotCi0jaWZkZWYgVk1TCi0vKiBXZSBkb24ndCBzY2FuIGluIFZNUyB3 aGVyZSB0ZXh0IGZpbGVzIGhhdmUgdmFyaW91cyByZWNvcmQgZm9ybWF0cyBpbiAgKi8KLS8qIHdo aWNoIHJlY29yZCBoZWFkZXJzIGNvbnRhaW4gc2VlbWluZ2x5IG5vbi10ZXh0IGJ5dGVzLiAgU28g dGhlIGJlc3QgICAqLwotLyogd2UgY2FuIGRvIGluIFZNUyBpcyB0ZWxsIHdoZXRoZXIgdGhlIGZp bGUgaXMgdGV4dCBvciBiaW5hcnksIHBlcmlvZC4gICovCi0gICAgewotCWludCBiLCB4OwotCWIg PSBiaW5hcnk7CQkJLyogU2F2ZSBjdXJyZW50IGJpbmFyeSBzZXR0aW5nICovCi0JaWYgKHpvcGVu aShaSUZJTEUsbmFtZSkgPiAwKSB7CS8qIEluIFZNUyB0aGlzIHNldHMgYmluYXJ5ICovCi0JICAg IHggPSBiaW5hcnk7CQkJLyogR2V0IHJlc3VsdCAqLwotCSAgICB6Y2xvc2UoWklGSUxFKTsJCS8q IENsb3NlIHRoZSBmaWxlICovCi0JICAgIGJpbmFyeSA9IGI7CQkJLyogUmVzdG9yZSBwcmV2aW91 cyBiaW5hcnkgc2V0dGluZyAqLwotCSAgICByYyA9IHggPyBGVF9CSU4gOiBGVF9URVhUOwotCSAg ICB2YWwgPSAwOwotCSAgICBnb3RvIHhzY2FuZmlsZTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIFZN UyAqLwotCi0gICAgZW9mID0gMDsJCQkJLyogRW5kLW9mLWZpbGUgcmVhY2hlZCBpbmRpY2F0b3Ig Ki8KLSNpZmRlZiBPUzIKLSAgICBmcCA9IGZvcGVuKG5hbWUsICJyYiIpOwkJLyogT3BlbiB0aGUg ZmlsZSBpbiBiaW5hcnkgbW9kZSAqLwotI2Vsc2UKLSAgICBmcCA9IGZvcGVuKG5hbWUsICJyIik7 Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAoIWZwKQkJCQkvKiBGYWlsZWQ/ICovCi0gICAg ICByZXR1cm4oLTEpOwotCi0gICAgd2hpbGUgKDEpIHsJCQkJLyogT25lIG9yIG1vcmUgZ3VscHMg ZnJvbSBmaWxlICovCi0JaWYgKGVvZikgewkJCS8qIEVPRiBmcm9tIGxhc3QgdGltZT8gKi8KLQkg ICAgZGVidWcoRjExMSwic2NhbmZpbGUgYXQgRU9GIixuYW1lLGJ5dGVzKTsKLQkgICAgaWYgKHJ1 bnplcm8gPiBydW5tYXgpCi0JICAgICAgcnVubWF4ID0gcnVuemVybzsKLQkgICAgYnJlYWs7Ci0J fQotCWlmIChuc2NhbmZpbGUgPCAwKSB7CQkvKiBSZWFkaW5nIHdob2xlIGZpbGUgKi8KLQkgICAg cmVhZHNpemUgPSBTQ0FORklMRUJVRjsKLQl9IGVsc2UgewkJCS8qIFJlYWRpbmcgZmlyc3QgbnNj YW5maWxlZSBieXRlcyAqLwotCSAgICByZWFkc2l6ZSA9IG5zY2FuZmlsZSAtIGJ5dGVzOwotCSAg ICBpZiAocmVhZHNpemUgPCAxKQotCSAgICAgIGJyZWFrOwotCSAgICBpZiAocmVhZHNpemUgPiBT Q0FORklMRUJVRikKLQkgICAgICByZWFkc2l6ZSA9IFNDQU5GSUxFQlVGOwotCX0KLQlkZWJ1ZyhG MTAxLCJzY2FuZmlsZSByZWFkc2l6ZSIsIiIscmVhZHNpemUpOwotCWNvdW50ID0gZnJlYWQoYnVm LDEscmVhZHNpemUsZnApOyAvKiBSZWFkIGEgYnVmZmVyICovCi0JaWYgKGNvdW50ID09IEVPRiB8 fCBjb3VudCA9PSAwKSB7Ci0JICAgIGRlYnVnKEYxMTEsInNjYW5maWxlIEVPRiIsbmFtZSxjb3Vu dCk7Ci0JICAgIGJyZWFrOwotCX0KLQlkZWJ1ZyhGMTExLCJzY2FuZmlsZSBidWZmZXIgb2siLG5h bWUsY291bnQpOwotCi0JaWYgKGJ5dGVzID09IDAgJiYgY291bnQgPiA4KSB7Ci0JICAgIC8qIFBE RiBmaWxlcyBjYW4gbG9vayBsaWtlIHRleHQgaW4gdGhlIGJlZ2lubmluZy4gKi8KLQkgICAgaWYg KCFja3N0cmNtcCgoY2hhciAqKWJ1ZiwiJVBERi0xLiIsNywxKSkgewotCQlpZiAoaXNkaWdpdChi dWZbN10pKSB7Ci0JCSAgICBpZiAoYnVmWzhdID09ICdcMDE1JyB8fAotCQkJY291bnQgPiA5ICYm IGJ1Zls4XSA9PSBTUCAmJiBidWZbOV0gPT0gJ1wwMTUnKSB7Ci0jaWZkZWYgREVCVUcKLQkJCWJ1 Zls4XSA9IE5VTDsKLQkJCWRlYnVnKEYxMTAsInNjYW5maWxlIFBERiIsYnVmLDApOwotI2VuZGlm IC8qIERFQlVHICovCi0JCQliaW5hcnkgPSAxOwkvKiBCdXQgdGhleSBhcmUgYmluYXJ5LiAqLwot CQkJYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoKGNoYXIg KilidWYsIiUhUFMtQWRvIiw4LDEpKSB7Ci0JCS8qIERpdHRvIGZvciBQb3N0U2NyaXB0ICovCi0j aWZkZWYgREVCVUcKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDg7IGkgPCBjb3VudDsgaSsrKSB7Ci0J CSAgICBpZiAoYnVmW2ldIDwgJyEnKSB7Ci0JCQlidWZbaV0gPSBOVUw7Ci0JCQlicmVhazsKLQkJ ICAgIH0KLQkJfQotCQlkZWJ1ZyhGMTEwLCJzY2FuZmlsZSBQb3N0U2NyaXB0IixidWYsMCk7Ci0j ZW5kaWYgLyogREVCVUcgKi8KLQkJYmluYXJ5ID0gMTsKLQkJYnJlYWs7Ci0jaWZuZGVmIE5PUENM U0NBTgotCSAgICB9IGVsc2UgaWYgKCFja3N0cmNtcCgoY2hhciAqKWJ1ZiwiKSBIUC1QQ0wiLDgs MSkpIHsKLQkJLyogSFAgUENMIHByaW50ZXIgbGFuZ3VhZ2UgKi8KLSNpZmRlZiBERUJVRwotCQlp bnQgaTsKLQkJZm9yIChpID0gODsgaSA8IGNvdW50OyBpKyspIHsKLQkJICAgIGlmIChidWZbaV0g PCAnIScpIHsKLQkJCWJ1ZltpXSA9IE5VTDsKLQkJCWJyZWFrOwotCQkgICAgfQotCQl9Ci0JCWRl YnVnKEYxMTAsInNjYW5maWxlIFBDTCIsYnVmLDApOwotI2VuZGlmIC8qIERFQlVHICovCi0JCWJp bmFyeSA9IDE7Ci0JCWJyZWFrOwotCSAgICB9IAotI2VuZGlmIC8qIE5PUENMU0NBTiAqLwotI2lm bmRlZiBOT1BKTFNDQU4KLQkgICAgICBlbHNlIGlmIChidWZbMF0gPT0gJ1wwMzMnICYmIChidWZb MV0gPT0gJ0UnIHx8IGJ1ZlsxXSA9PSAnJScpKSB7Ci0JCS8qIERpdHRvIGZvciBQSkwgSm9iIHBy aW50ZXIgaGVhZGVyICovCi0jaWZkZWYgREVCVUcKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDI7IGkg PCBjb3VudDsgaSsrKSB7Ci0JCSAgICBpZiAoYnVmW2ldIDwgJyEnKSB7Ci0JCQlidWZbaV0gPSBO VUw7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJfQotCQlkZWJ1ZyhGMTEwLCJzY2FuZmlsZSBQSkwg Sm9iIHByaW50ZXIgaGVhZGVyIixidWYsMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkJYmluYXJ5 ID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYgLyogTk9QSkxTQ0FOICovCi0JICAgIH0KLQl9Ci0KLSNp ZmRlZiBVTklDT0RFCi0JaWYgKGJ5dGVzID09IDAgJiYgY291bnQgPiAxKSB7Ci0JICAgIGludCBp bmNsX2NudCA9IDA7Ci0KLQkgICAgLyogRmlyc3QgbG9vayBmb3IgQk9NICovCi0KLQkgICAgYzAg PSAodW5zaWduZWQpKCh1bnNpZ25lZClidWZbMF0mMHhGRik7IC8qIEZpcnN0IGZpbGUgYnl0ZSAq LwotCSAgICBjMSA9ICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1ZlsxXSYweEZGKTsgLyogU2Vjb25k IGJ5dGUgKi8KLQotCSAgICBpZiAoYzAgPT0gMHhGRSAmJiBjMSA9PSAweEZGKSB7CS8qIFVDUy0y IEJFICovCi0JCXJjID0gRlRfVUNTMjsKLQkJdmFsID0gMDsKLQkJZGVidWcoRjExMSwic2NhbmZp bGUgVUNTMiBCT00gQkUiLGNraXRvYSh2YWwpLHJjKTsKLQkJaW5jbF9jbnQrKzsKLQkgICAgfSBl bHNlIGlmIChjMCA9PSAweEZGICYmIGMxID09IDB4RkUpIHsgLyogVUNTLTIgTEUgKi8KLQkJcmMg PSBGVF9VQ1MyOwotCQl2YWwgPSAxOwotCQlkZWJ1ZyhGMTExLCJzY2FuZmlsZSBVQ1MyIEJPTSBM RSIsY2tpdG9hKHZhbCkscmMpOwotCQlpbmNsX2NudCsrOwotCSAgICB9IGVsc2UgaWYgKGNvdW50 ID4gMikgaWYgKGMwID09IDB4RUYgJiYgYzEgPT0gMHhCQiAmJgotCQkgICAgICAgKHVuc2lnbmVk KSgodW5zaWduZWQpYnVmWzJdJjB4RkYpID09IDB4QkYpIHsKLQkJcmMgPSBGVF9VVEY4OwotCQlk ZWJ1ZyhGMTExLCJzY2FuZmlsZSBVVEY4IEJPTSIsY2tpdG9hKHZhbCkscmMpOwotCQlpbmNsX2Nu dCsrOwotCSAgICB9Ci0JICAgIGlmIChpbmNsX2NudCkgewkJLyogSGF2ZSBCT00gKi8KLQkJYnl0 ZXMgKz0gY291bnQ7Ci0JCWdvdG8geHNjYW5maWxlOwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIFVO SUNPREUgKi8KLQotCWJ5dGVzICs9IGNvdW50OwkJCS8qIENvdW50IGJ5dGVzIHJlYWQgKi8KLQll b2YgPSBmZW9mKGZwKTsJCQkvKiBGbGFnIGZvciBhdCBFT0YgICovCi0KLQlmb3IgKGkgPSAwOyBp IDwgY291bnQ7IGkrKykgewkvKiBGb3IgZWFjaCBieXRlLi4uICovCi0JICAgIGMgPSAodW5zaWdu ZWQpYnVmW2ldOwkvKiBGb3IgZWFzZSBvZiByZWZlcmVuY2UgKi8KLQkgICAgaWYgKCFjKSB7CQkJ LyogWmVybyBieXRlPyAqLwotI2lmZGVmIEVWRU5NQVgKLQkJaWYgKGkmMSkJCS8qIEluIG9kZCBw b3NpdGlvbiAqLwotCQkgIG9kZHplcm8rKzsKLQkJZWxzZQotCQkgIGV2ZW56ZXJvKys7CQkvKiBJ biBldmVuIHBvc2l0aW9uICovCi0jZW5kaWYgLyogRVZFTk1BWCAqLwotCQlydW56ZXJvKys7Ci0J ICAgIH0gZWxzZSB7CQkJLyogTm90IGEgemVybyBieXRlICovCi0JCWlmIChydW56ZXJvID4gcnVu bWF4KQotCQkgIHJ1bm1heCA9IHJ1bnplcm87Ci0JCWlmIChydW5tYXggPiAyKQkJLyogVGhhdCdz IGFsbCB3ZSBuZWVkIHRvIGJlIGNlcnRhaW4gKi8KLQkJICBicmVhazsJCS8qIGl0J3MgYSBiaW5h cnkgZmlsZS4gKi8KLQkJcnVuemVybyA9IDA7Ci0JICAgIH0KLQotI2lmZGVmIENPTU1FTlQKLSNp ZmRlZiBFVkVOTUFYCi0KLS8qIFRoaXMgaXMgdG8gY2F0Y2ggVUNTLTIgd2l0aCBhIG5vbi1BU0NJ SSwgbm9uLUxhdGluLTEgcmVwZXJ0b2lyZSAgKi8KLQotCSAgICBpZiAoaSA+IDEpIHsJICAgICAg LyogTG9vayBmb3IgcnVucyBvZiBhbHRlcm5hdGluZyBjaGFycyAqLwotCQlpZiAoaSYxKSB7Ci0J CSAgICBpZiAoYyA9PSBidWZbaS0yXSkgeyAvKiBJbiBvZGQgcG9zaXRpb25zICovCi0JCQlvZGRy dW4rKzsKLQkJCW9kZGJ5dGUgPSBjOwotCQkgICAgfSBlbHNlIHsKLQkJCW9kZG1heCA9IG9kZHJ1 bjsKLQkJCW9kZG1heGJ5dGUgPSBvZGRieXRlOwotCQkgICAgfQotCQl9IGVsc2UgewkJLyogYW5k IGV2ZW4gcG9zaXRpb25zICovCi0JCSAgICBpZiAoYyA9PSBidWZbaS0yXSkgewotCQkJZXZlbnJ1 bisrOwotCQkJZXZlbmJ5dGUgPSBjOwotCQkgICAgfSBlbHNlIHsKLQkJCWV2ZW5tYXggPSBldmVu cnVuOwotCQkJZXZlbm1heGJ5dGUgPSBldmVuYnl0ZTsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0j ZW5kaWYgLyogRVZFTk1BWCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotCSAgICBpZiAoKGMg JiAweDgwKSA9PSAwKSB7CS8qIFdlIGhhdmUgYSA3LWJpdCBieXRlICovCi0jaWZkZWYgVU5JQ09E RQotCQlpZiAoaSA+IDAgJiYgYyA9PSAxMCkgeyAvKiBMaW5lZmVlZCAqLwotCQkgICAgaWYgKGJ1 ZltpLTFdID09IDApIGxmbnVsKys7IC8qIFByZWNlZGVkIGJ5IE5VTCAqLwotCQkgICAgZWxzZSBp ZiAoYnVmW2ktMV0gPT0gMTMpIGNybGYrKzsgLyogb3IgYnkgQ1IuLi4gKi8KLQkJfQotI2VuZGlm IC8qIFVOSUNPREUgKi8KLQkJaWYgKGMgPCAnICcpIHsJCS8qIENoZWNrIGZvciBDTyBjb250cm9s cyAqLwotCQkgICAgaWYgKGMgIT0gTEYgJiYgYyAhPSBDUiAmJiBjICE9IEhUICYmIGMgIT0gRkYp IHsKLQkJCWMwY29udHJvbHMrKzsKLQkJCWlmIChjICE9IEVTQyAmJiBjICE9IFNPICYmIGMgIT0g U0kpCi0JCQkgIGMwbm9uaXNvKys7Ci0JCSAgICB9Ci0JCSAgICBpZiAoKGMgPT0gJ1wwMzInKQkv KiBDdHJsLVogKi8KLSNpZmRlZiBDT01NRU5UCi0JCQkmJiBlb2YgJiYgKGkgPj0gY291bnQgLSAy KQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJCSkgewotCQkJYzBjb250cm9scy0tOwotCQkJYzBu b25pc28tLTsKLSNpZmRlZiBDS19DVFJMWgotCQkJaWYgKGVvZm1ldGhvZCA9PSBYWUVPRl9aICYm IHR4dGN6ID09IDApIHsKLQkJCSAgICBpZiAoYzBjb250cm9scyA9PSAwKSAvKiBBbGwgdGV4dCBw cmlvciB0byBDdHJsLVogKi8KLQkJCSAgICAgIHR4dGN6ID0gMTsKLQkJCX0KLSNlbmRpZiAvKiBD S19DVFJMWiAqLwotCQkgICAgfQotCQl9Ci0jaWZkZWYgVU5JQ09ERQotCQlpZiAoIW5vdHV0Zjgg JiYgdXRmOHN0YXRlKSB7IC8qIEluIFVURi04IHNlcXVlbmNlPyAqLwotCQkgICAgdXRmOHN0YXRl ID0gMDsKLQkJICAgIGRlYnVnKEYwMDAsInNjYW5maWxlIiwiNy1iaXQgYnl0ZSBpbiBVVEY4IHNl cXVlbmNlIixjKTsKLQkJICAgIG5vdHV0ZjgrKzsJCS8qIFRoZW4gaXQncyBub3QgVVRGLTggKi8K LQkJICAgIGNvbnRpbnVlOwotCQl9Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCSAgICB9IGVsc2Ug ewkJCS8qIFdlIGhhdmUgYW4gOC1iaXQgYnl0ZSAqLwotCQllaWdodGJpdCsrOwkJLyogQ291bnQg aXQgKi8KLQkJaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhBMCkgLyogQ2hlY2sgZm9yIEMxIGNvbnRy b2xzICovCi0JCSAgYzFjb250cm9scysrOwotI2lmZGVmIFVOSUNPREUKLQkJaWYgKCFub3R1dGY4 KSB7CQkvKiBJZiBpdCBtaWdodCBzdGlsbCBiZSBVVEY4Li4uICovCi0JCSAgICBzd2l0Y2ggKHV0 ZjhzdGF0ZSkgeyAvKiBFbnRlciB0aGUgVVRGLTggc3RhdGUgbWFjaGluZSAqLwotCQkgICAgICBj YXNlIDA6CQkgLyogRmlyc3QgYnl0ZS4uLiAqLwotCQkJaWYgKChjICYgMHhFMCkgPT0gMHhDMCkg eyAvKiBUZWxscyBudW1iZXIgb2YgKi8KLQkJCSAgICB1dGY4c3RhdGUgPSAxOyAgICAgICAgLyog c3Vic2VxdWVudCBieXRlcyAqLwotCQkJfSBlbHNlIGlmICgoYyAmIDB4RjApID09IDB4RTApIHsK LQkJCSAgICB1dGY4c3RhdGUgPSAyOwotCQkJfSBlbHNlIGlmICgoYyAmIDB4RjgpID09IDB4RjAp IHsKLQkJCSAgICB1dGY4c3RhdGUgPSAzOwotCQkJfSBlbHNlIHsKLQkJCSAgICBub3R1dGY4Kys7 Ci0JCQl9Ci0JCQlicmVhazsKLQkJICAgICAgY2FzZSAxOgkJLyogU3Vic2VxdWVudCBieXRlICov Ci0JCSAgICAgIGNhc2UgMjoKLQkJICAgICAgY2FzZSAzOgotCQkJaWYgKChjICYgMHhDMCkgIT0g MHg4MCkgeyAvKiBNdXN0IHN0YXJ0IHdpdGggMTAgKi8KLQkJCSAgICBkZWJ1ZyhGMDAwLCJzY2Fu ZmlsZSIsCi0JCQkJICAiYmFkIGJ5dGUgaW4gVVRGOCBzZXF1ZW5jZSIsYyk7Ci0JCQkgICAgbm90 dXRmOCsrOwotCQkJICAgIGJyZWFrOwotCQkJfQotCQkJdXRmOHN0YXRlLS07CS8qIEdvb2QsIG9u ZSBsZXNzIGluIHRoaXMgc2VxdWVuY2UgKi8KLQkJCWJyZWFrOwotCQkgICAgICBkZWZhdWx0OgkJ LyogU2hvdWxkbid0IGhhcHBlbiAqLwotCQkJZGVidWcoRjExMSwic2NhbmZpbGUiLCJiYWQgVVRG OCBzdGF0ZSIsdXRmOHN0YXRlKTsKLQkJCW5vdHV0ZjgrKzsKLQkJICAgIH0KLQkJfQotI2VuZGlm IC8qIFVOSUNPREUgKi8KLQkgICAgfQotCX0KLSAgICB9Ci0gICAgZmNsb3NlKGZwKTsJCQkJLyog Q2xvc2UgdGhlIGZpbGUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBieXRlcyIsIiIsYnl0 ZXMpOwotCi0gICAgaWYgKGJ5dGVzID09IDApCQkJLyogSWYgbm90aGluZyB3YXMgcmVhZCAqLwot ICAgICAgcmV0dXJuKC0xKTsJCQkvKiB3ZSdyZSBkb25lLiAqLwotCi0jaWZkZWYgRVZFTk1BWAot ICAgIC8qIEluIGNhc2Ugd2UgaGFkIGEgcnVuIHRoYXQgbmV2ZXIgYnJva2UuLi4gKi8KLSNpZmRl ZiBDT01NRU5UCi0gICAgaWYgKG9kZG1heCA9PSAwKSB7Ci0Jb2RkbWF4ID0gb2RkcnVuOwotCW9k ZG1heGJ5dGUgPSBvZGRieXRlOwotICAgIH0KLSAgICBpZiAoZXZlbm1heCA9PSAwKSB7Ci0JZXZl bm1heCA9IGV2ZW5ydW47Ci0JZXZlbm1heGJ5dGUgPSBldmVuYnl0ZTsKLSAgICB9Ci0jZW5kaWYg LyogQ09NTUVOVCAqLwotICAgIGlmIChydW5tYXggPT0gMCkgewotCXJ1bm1heCA9IHJ1bnplcm87 Ci0gICAgfQotI2VuZGlmIC8qIEVWRU5NQVggKi8KLQotI2lmZGVmIFVOSUNPREUKLSAgICBpZiAo Ynl0ZXMgPiAxMDApCQkJLyogQnl0ZXMgaXMgbm90IDAgKi8KLSAgICAgIHBjdHplcm8gPSAoZXZl bnplcm8gKyBvZGR6ZXJvKSAvIChieXRlcyAvIDEwMCk7Ci0gICAgZWxzZQotICAgICAgcGN0emVy byA9ICgoZXZlbnplcm8gKyBvZGR6ZXJvKSAqIDEwMCkgLyBieXRlczsKLSNlbmRpZiAvKiBVTklD T0RFICovCi0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsJCQkvKiBJZiBkZWJ1Z2dp bmcsIGR1bXAgc3RhdGlzdGljcyAqLwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGMwY29udHJvbHMg IiwiIixjMGNvbnRyb2xzKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjMG5vbmlzbyAgICIsIiIs YzBub25pc28pOwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGMxY29udHJvbHMgIiwiIixjMWNvbnRy b2xzKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBlaWdodGJpdCAgICIsIiIsZWlnaHRiaXQpOwot I2lmZGVmIFVOSUNPREUKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjcmxmICAgICAgICIsIiIsY3Js Zik7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgbGZudWwgICAgICAiLCIiLGxmbnVsKTsKLQlkZWJ1 ZyhGMTAxLCJzY2FuZmlsZSBub3R1dGY4ICAgICIsIiIsbm90dXRmOCk7Ci0JZGVidWcoRjEwMSwi c2NhbmZpbGUgZXZlbnplcm8gICAiLCIiLGV2ZW56ZXJvKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmls ZSBvZGR6ZXJvICAgICIsIiIsb2RkemVybyk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgZXZlbi9v ZGQgICAiLCIiLChldmVuemVybyAvIChvZGR6ZXJvICsgMSkpKTsKLQlkZWJ1ZyhGMTAxLCJzY2Fu ZmlsZSBvZGQvZXZlbiAgICIsIiIsKG9kZHplcm8gLyAoZXZlbnplcm8gKyAxKSkpOwotCWRlYnVn KEYxMDEsInNjYW5maWxlIHBjdHplcm8gICAgIiwiIixwY3R6ZXJvKTsKLSNlbmRpZiAvKiBVTklD T0RFICovCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIEVWRU5NQVgKLQlkZWJ1ZyhGMTAxLCJzY2Fu ZmlsZSBvZGRtYXggICAgICIsIiIsb2RkbWF4KTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBvZGRt YXhieXRlICIsIiIsb2RkbWF4Ynl0ZSk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgZXZlbm1heCAg ICAiLCIiLGV2ZW5tYXgpOwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGV2ZW5tYXhieXRlIiwiIixl dmVubWF4Ynl0ZSk7Ci0jZW5kaWYgLyogRVZFTk1BWCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBydW5tYXggICAgICIsIiIscnVubWF4KTsKLSAgICB9Ci0j ZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIFVOSUNPREUKLSAgICB4ID0gZWlnaHRiaXQgPyBi eXRlcyAvIDIwIDogYnl0ZXMgLyA0OyAvKiBGb3IgVUNTLTIuLi4gKi8KLQotICAgIGlmIChydW5t YXggPiAyKSB7CQkJLyogRmlsZSBoYXMgcnVuIG9mIG1vcmUgdGhhbiAyIE5VTHMgKi8KLQlkZWJ1 ZyhGMTAwLCJzY2FuZmlsZSBCSU4gcnVubWF4IiwiIiwwKTsKLQlyYyA9IEZUX0JJTjsJCQkvKiBz byBpdCBjYW4ndCBiZSBhbnkga2luZCBvZiB0ZXh0LiAqLwotCWdvdG8geHNjYW5maWxlOwotCi0g ICAgfSBlbHNlIGlmIChyYyA9PSBGVF9VQ1MyIHx8IChyYyA9PSBGVF9VVEY4ICYmIHJ1bm1heCA9 PSAwKSkgewotCWdvdG8geHNjYW5maWxlOwkJCS8qIEZpbGUgc3RhcnRzIHdpdGggYSBCT00gKi8K LQotICAgIH0gZWxzZSBpZiAoZWlnaHRiaXQgPiAwICYmICFub3R1dGY4KSB7IC8qIEZpbGUgaGFz IDgtYml0IGRhdGEgKi8KLQlpZiAocnVubWF4ID4gMCkgewkJICAgLyogYW5kIHJ1bnMgb2YgTlVM cyAqLwotCSAgICBkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBCSU4gKG5uVVRGOCkgcnVubWF4IiwiIiww KTsKLQkgICAgcmMgPSBGVF9CSU47CQkgICAvKiBVVEYtOCBkb2Vzbid0IGhhdmUgTlVMcyAqLwot CX0gZWxzZSB7CQkJICAgLyogTm8gTlVMcyAqLwotCSAgICBkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBV VEY4IChublVURjggKyBydW5tYXggPT0gMCkiLCIiLDApOwotCSAgICByYyA9IEZUX1VURjg7CQkg ICAvKiBhbmQgbm90IG5vdCBVVEYtOCwgc28gaXMgVVRGLTggKi8KLQl9Ci0JZ290byB4c2NhbmZp bGU7Ci0gICAgfQotLyoKLSAgRm9yIFVDUy0yIGRldGVjdGlvbiwgc2VlIGlmIHRoZSB0ZXh0IGNv bnRhaW5zIGxpbmVzIGRlbGltaXRlZCBieQotICBBU0NJSSBjb250cm9scyBhbmQgY29udGFpbmlu ZyBzcGFjZXMsIEFTQ0lJIGRpZ2l0cywgb3Igb3RoZXIgQVNDSUkKLSAgY2hhcmFjdGVycywgdGh1 cyBmb3JjaW5nIHRoZSBwcmVzZW5jZSBvZiBhIGNlcnRhaW4gcGVyY2VudGFnZSBvZiB6ZXJvIGJ5 dGVzLgotICBGb3IgdGhpcyBwdXJwb3NlIHJlcXVpcmUgMjAlIHplcm8gYnl0ZXMsIHdpdGggYXQg bGVhc3Qgc2l4IHRpbWVzIGFzIG1hbnkKLSAgaW4gZXZlbiAob2RkKSBwb3NpdGlvbnMgYXMgaW4g b2RkIChldmVuKSBwb3NpdGlvbnMuCi0qLwotICAgIGlmICgoZXZlbnplcm8gPj0geCAmJiBvZGR6 ZXJvID09IDApIHx8Ci0JKCgoKGV2ZW56ZXJvIC8gKG9kZHplcm8gKyAxKSkgPiA2KSAmJiAocGN0 emVybyA+IDIwKSkgJiYKLQkoY3JsZiA9PSAwKSAmJgotCShsZm51bCA+IDEpKQotCSkgewotCSAg ICBkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBVQ1MyIG5vQk9NIEJFIChldmVuL29kZHplcm8pIiwiIiww KTsKLQlyYyA9IEZUX1VDUzI7Ci0JdmFsID0gMDsKLSAgICB9IGVsc2UgaWYgKChldmVuemVybyA9 PSAwICYmIG9kZHplcm8gPj0geCkgfHwKLQkgICAgICAgKCgoKG9kZHplcm8gLyAoZXZlbnplcm8g KyAxKSkgPiA2KSAmJiAocGN0emVybyA+IDIwKSkgJiYKLQkgICAgICAgKGNybGYgPT0gMCkgJiYK LQkgICAgICAgKGxmbnVsID4gMSkpCi0JICAgICAgICkgewotCWRlYnVnKEYxMDAsInNjYW5maWxl IFVDUzIgbm9CT00gTEUgKGV2ZW4vb2RkemVybykiLCIiLDApOwotCXJjID0gRlRfVUNTMjsKLQl2 YWwgPSAxOwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIEVWRU5NQVgKLS8qCi0gIElmIHRoZSB0 ZXN0cyBhYm92ZSBmYWlsLCB3ZSBzdGlsbCBtaWdodCBoYXZlIFVDUy0yIGlmIHRoZXJlIGFyZSBz aWduaWZpY2FudAotICBydW5zIG9mIGlkZW50aWNhbCBieXRlcyBpbiBhbHRlcm5hdGluZyBwb3Np dGlvbnMsIGJ1dCBvbmx5IGlmIGl0IGFsc28gaGFzCi0gIHVudXN1YWwgQzAgY29udHJvbHMgKG90 aGVyd2lzZSB3ZSdkIHBpY2sgdXAgaGV4IGZpbGVzIGhlcmUpLiAgTk9URTogV2UKLSAgZG9uJ3Qg YWN0dWFsbHkgZG8gdGhpcyAtLSBFVkVOTUFYIGlzIG5vdCBkZWZpbmVkIChzZWUgY29tbWVudHMg YWJvdmUgYXQKLSAgZmlyc3Qgb2NjdXJyZW5jZSBvZiBFVkVOTUFYKS4KLSovCi0gICAgfSBlbHNl IGlmIChjMG5vbmlzbyAmJiBldmVubWF4ID4gYnl0ZXMgLyA0KSB7Ci0JZGVidWcoRjEwMCwic2Nh bmZpbGUgVUNTMiBCRSAoZXZlbm1heCkiLCIiLDApOwotCXJjID0gRlRfVUNTMjsKLQl2YWwgPSAw OwotICAgIH0gZWxzZSBpZiAoYzBub25pc28gJiYgb2RkbWF4ID4gYnl0ZXMgLyA0KSB7Ci0JZGVi dWcoRjEwMCwic2NhbmZpbGUgVUNTMiBMRSAoZXZlbm1heCkiLCIiLDApOwotCXJjID0gRlRfVUNT MjsKLQl2YWwgPSAxOwotI2VuZGlmIC8qIEVWRU5NQVggKi8KLSNlbmRpZiAvKiBDT01NRU5UICov Ci0KLSAgICB9Ci0vKgotICBJdCBzZWVtcyB0byBiZSBVQ1MtMiBidXQgbGV0J3MgYmUgbW9yZSBj ZXJ0YWluIHNpbmNlIHRoZXJlIGlzIG5vIEJPTS4uLgotICBJZiB0aGUgbnVtYmVyIG9mIDctIGFu ZCA4LWJpdCBjaGFyYWN0ZXJzIGlzIGFwcHJveGltYXRlbHkgZXF1YWwsIGl0IG1pZ2h0Ci0gIGJl IGEgY29tcHJlc3NlZCBmaWxlLiAgSW4gdGhpcyBjYXNlIHdlIGRlY2lkZSBiYXNlZCBvbiB0aGUg bmFtZS4KLSovCi0gICAgaWYgKHJjID09IEZUX1VDUzIpIHsKLQlpZiAoZWlnaHRiaXQgPiAwKSB7 Ci0JICAgIGludCBqLCBrOwotCSAgICBqID0gKGMxY29udHJvbHMgKiAxMDApIC8gKGMwY29udHJv bHMgKyAxKTsKLQkgICAgZGVidWcoRjEwMSwic2NhbmZpbGUgYzEvYzAgICAgICAiLCIiLGopOwot CSAgICBrID0gKGJ5dGVzICogMTAwKSAvIGVpZ2h0Yml0OwotCSAgICBkZWJ1ZyhGMTAxLCJzY2Fu ZmlsZSBwY3QgOGJpdCAgICIsIiIsayk7Ci0JICAgIGlmIChrID4gNDAgJiYgayA8IDYwICYmIGog PiA2MCkgewotCQlpZiAoY2ttYXRjaCgieyouWiwqLmd6LCouemlwLCouWklQfSIsbmFtZSwxLDEp KSB7Ci0JCSAgICBkZWJ1ZyhGMTEwLCJzY2FuZmlsZSA4LWJpdCBCSU4gY29tcHJlc3NlZCIsbmFt ZSwwKTsKLQkJICAgIHJjID0gRlRfQklOOwotCQkgICAgZ290byB4c2NhbmZpbGU7Ci0JCX0KLQkg ICAgfQotCX0KLQkvKiBTbWFsbCBmaWxlIC0gbm90IGVub3VnaCBldmlkZW5jZSB1bmxlc3MgLi4u ICovCi0KLQlpZiAoYnl0ZXMgPCAxMDApIHsKLQkgICAgaWYgKG9kZHplcm8gIT0gMCAmJiBldmVu emVybyAhPSAwKSB7Ci0JCWRlYnVnKEYxMDAsInNjYW5maWxlIHNtYWxsIFVDUzIgZG91YnRmdWwi LCIiLDApOwotCQlyYyA9IEZUX0JJTjsKLQkJZ290byB4c2NhbmZpbGU7Ci0JICAgIH0gZWxzZSBp ZiAob2RkemVybyA9PSAwICYmIGV2ZW56ZXJvID09IDApIHsKLQkJcmMgPSBlaWdodGJpdCA/IEZU XzhCSVQgOiBGVF83QklUOwotCSAgICB9Ci0JfQotCWdvdG8geHNjYW5maWxlOwkJCS8qIFNlZW1z IHRvIGJlIFVDUy0yICovCi0gICAgfQotCi0vKiBJZiBub25lIG9mIHRoZSBhYm92ZSwgaXQncyBw cm9iYWJseSBub3QgVW5pY29kZS4gICovCi0KLSAgICBpZiAoIWVpZ2h0Yml0KSB7CQkJLyogSXQn cyA3LWJpdCAqLwotCWlmIChjMGNvbnRyb2xzKSB7CQkvKiBUaGlzIHdvdWxkIGJlIHN0cmFuZ2Ug Ki8KLQkgICAgaWYgKChjMG5vbmlzbyA+IDApICYmICh0eHRjeiA9PSAwKSkgewotCQlkZWJ1ZyhG MTAwLCJzY2FuZmlsZSA3LWJpdCBCSU4gKGMwY29uaXNvKSIsIiIsMCk7Ci0JCXJjID0gRlRfQklO OwotCSAgICB9IGVsc2UgewotCQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA3LWJpdCBJU08yMDIyIFRF WFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7Ci0JCXJjID0gRlRfN0JJVDsKLQkgICAgfQotCX0gZWxz ZSB7CQkJLyogNy1iaXQgdGV4dCAqLwotCSAgICBkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA3LWJpdCBU RVhUIChubyBjMGNvbnRyb2xzKSIsIiIsMCk7Ci0JICAgIHJjID0gRlRfN0JJVDsKLQl9Ci0gICAg fSBlbHNlIGlmICghYzBub25pc28gfHwgdHh0Y3opIHsJLyogOC1iaXQgdGV4dCAqLwotCWRlYnVn KEYxMDAsInNjYW5maWxlIDgtYml0IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBG VF84QklUOwotCXZhbCA9IGMxY29udHJvbHMgPyAxIDogMDsKLSAgICB9IGVsc2UgewkJCQkvKiA4 LWJpdCBiaW5hcnkgKi8KLQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA4LWJpdCBCSU4gKGMwbm9uaXNv KSIsIiIsMCk7Ci0JcmMgPSBGVF9CSU47Ci0gICAgfQotCi0jZWxzZSAgLyogIVVOSUNPREUgKi8K LQotICAgIGlmIChjMG5vbmlzbykgewotCWRlYnVnKEYxMDAsInNjYW5maWxlIDgtYml0IEJJTiAo YzBub25pc28pIiwiIiwwKTsKLQlyYyA9IEZUX0JJTjsKLSAgICB9IGVsc2UgaWYgKGVpZ2h0Yml0 KSB7Ci0JZGVidWcoRjEwMCwic2NhbmZpbGUgOC1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiww KTsKLQlyYyA9IEZUXzhCSVQ7Ci0JdmFsID0gYzFjb250cm9scyA/IDEgOiAwOwotICAgIH0gZWxz ZSB7Ci0JZGVidWcoRjEwMCwic2NhbmZpbGUgNy1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiww KTsKLQlyYyA9IEZUXzdCSVQ7Ci0gICAgfQotCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0gIHhz Y2FuZmlsZToKLSAgICBpZiAoZmxhZykgKmZsYWcgPSB2YWw7Ci0gICAgZGVidWcoRjEwMSwic2Nh bmZpbGUgcmVzdWx0ICAgICAiLCIiLHJjKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi0vKgotICBz Y2Fuc3RyaW5nIC0gbGlrZSBzY2FuIGZpbGUgYnV0IGZvciBhIHN0cmluZy4KLSAgVGhpcyBpcyBq dXN0IGEgcXVpY2sgYnV0Y2hlcnkgb2Ygc2NhbmZpbGUgd2l0aG91dCB0aGlua2luZyB0b28gbXVj aC4KLSovCi1pbnQKLXNjYW5zdHJpbmcocykgY2hhciAqIHM7IHsKLSAgICBpbnQgeCwgdmFsID0g LTEsIGNvdW50ID0gMDsJCS8qIFdvcmtlcnMgKi8KLSAgICBpbnQgcmMgPSAtMTsJCQkvKiBSZXR1 cm4gY29kZSAqLwotICAgIGludCBwdiA9IC0xOwkJCS8qIFBhdHRlcm4tbWF0Y2ggdmFsdWUgKi8K LSAgICBpbnQgYnl0ZXMgPSAwOwkJCS8qIFRvdGFsIGJ5dGUgY291bnQgKi8KLSNpZmRlZiBVTklD T0RFCi0gICAgdW5zaWduZWQgaW50IGMwLCBjMTsJCS8qIEZpcnN0IDIgZmlsZSBieXRlcyAoZm9y IEJPTSkgKi8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgZXh0ZXJuIGludCBwaXBlc2VuZCwg ZmlsZXBlZWs7Ci0KLSAgICByZWdpc3RlciBpbnQgaTsJCQkvKiBMb29wIGNvbnRyb2wgKi8KLSAg ICBpbnQgcmVhZHNpemUgPSAwOwkJCS8qIEhvdyBtdWNoIHRvIHJlYWQgKi8KLSAgICBpbnQgZWln aHRiaXQgPSAwOwkJCS8qIE51bWJlciBvZiBieXRlcyB3aXRoIDh0aCBiaXQgb24gKi8KLSAgICBp bnQgYzBjb250cm9scyA9IDA7CQkJLyogQzAgbm9uLXRleHQgY29udHJvbC1jaGFyIGNvdW50ZXIg Ki8KLSAgICBpbnQgYzBub25pc28gPSAwOwkJCS8qIEMwIG5vbi1JU08gY29udHJvbC1jaGFyIGNv dW50ZXIgKi8KLSAgICBpbnQgYzFjb250cm9scyA9IDA7CQkJLyogQzEgY29udHJvbC1jaGFyYWN0 ZXIgY291bnRlciAqLwotICAgIHVuc2lnbmVkIGludCBjOwkJCS8qIEN1cnJlbnQgY2hhcmFjdGVy ICovCi0gICAgaW50IHJ1bm1heCA9IDA7CQkJLyogTG9uZ2VzdCBydW4gb2YgMCBieXRlcyAqLwot ICAgIGludCBydW56ZXJvID0gMDsJCQkvKiBSdW4gb2YgMCBieXRlcyAqLwotICAgIGludCBwY3R6 ZXJvID0gMDsJCQkvKiBQZXJjZW50YWdlIG9mIDAgYnl0ZXMgKi8KLSAgICBpbnQgdHh0Y3ogPSAw OwotCi0jaWZkZWYgVU5JQ09ERQotICAgIGludCBub3R1dGY4ID0gMDsJCQkvKiBOb256ZXJvIGlm IGRlZmluaXRlbHkgbm90IFVURi04ICovCi0gICAgaW50IHV0ZjhzdGF0ZSA9IDA7CQkJLyogVVRG LTggcmVjb2duaXplciBzdGF0ZSAqLwotICAgIGludCBvZGR6ZXJvID0gMDsJCQkvKiBOdW1iZXIg b2YgMCBieXRlcyBpbiBvZGQgcG9zdGlvbnMgKi8KLSAgICBpbnQgZXZlbnplcm8gPSAwOwkJCS8q IGFuZCBpbiBldmVuIHBvc2l0aW9ucyAqLwotICAgIGludCBsZm51bCA9IDA7CQkJLyogTnVtYmVy IG9mIDxMRj48TlVMPiBzZXF1ZW5jZXMgKi8KLSAgICBpbnQgY3JsZiA9IDA7CQkJLyogTnVtYmVy IG9mIDxDUkxGPiBzZXF1ZW5jZXMgKi8KLSNlbHNlCi0gICAgaW50IG5vdHV0ZjggPSAxOwotI2Vu ZGlmIC8qIFVOSUNPREUgKi8KLQotICAgIGNoYXIgKiBidWYgPSBzOwotICAgIGlmICghcykgcyA9 ICIiOwotICAgIGNvdW50ID0gc3RybGVuKHMpOwotCi0jaWZkZWYgVU5JQ09ERQotICAgIGlmIChi eXRlcyA9PSAwICYmIGNvdW50ID4gMSkgewotCWludCBpbmNsX2NudCA9IDA7Ci0KLQkvKiBGaXJz dCBsb29rIGZvciBCT00gKi8KLQotCWMwID0gKHVuc2lnbmVkKSgodW5zaWduZWQpYnVmWzBdJjB4 RkYpOyAvKiBGaXJzdCBmaWxlIGJ5dGUgKi8KLQljMSA9ICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1 ZlsxXSYweEZGKTsgLyogU2Vjb25kIGJ5dGUgKi8KLQotCWlmIChjMCA9PSAweEZFICYmIGMxID09 IDB4RkYpIHsJLyogVUNTLTIgQkUgKi8KLQkgICAgcmMgPSBGVF9VQ1MyOwotCSAgICB2YWwgPSAw OwotCSAgICBkZWJ1ZyhGMTExLCJzY2Fuc3RyaW5nIFVDUzIgQk9NIEJFIixja2l0b2EodmFsKSxy Yyk7Ci0JICAgIGluY2xfY250Kys7Ci0JfSBlbHNlIGlmIChjMCA9PSAweEZGICYmIGMxID09IDB4 RkUpIHsgLyogVUNTLTIgTEUgKi8KLQkgICAgcmMgPSBGVF9VQ1MyOwotCSAgICB2YWwgPSAxOwot CSAgICBkZWJ1ZyhGMTExLCJzY2Fuc3RyaW5nIFVDUzIgQk9NIExFIixja2l0b2EodmFsKSxyYyk7 Ci0JICAgIGluY2xfY250Kys7Ci0JfSBlbHNlIGlmIChjb3VudCA+IDIpIGlmIChjMCA9PSAweEVG ICYmIGMxID09IDB4QkIgJiYKLQkJICAgKHVuc2lnbmVkKSgodW5zaWduZWQpYnVmWzJdJjB4RkYp ID09IDB4QkYpIHsKLQkgICAgcmMgPSBGVF9VVEY4OwotCSAgICBkZWJ1ZyhGMTExLCJzY2Fuc3Ry aW5nIFVURjggQk9NIixja2l0b2EodmFsKSxyYyk7Ci0JICAgIGluY2xfY250Kys7Ci0JfQotCWlm IChpbmNsX2NudCkgewkJLyogSGF2ZSBCT00gKi8KLQkgICAgYnl0ZXMgKz0gY291bnQ7Ci0JICAg IGdvdG8geHNjYW5zdHJpbmc7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSAg ICBieXRlcyArPSBjb3VudDsJCQkvKiBDb3VudCBieXRlcyByZWFkICovCi0KLSAgICBmb3IgKGkg PSAwOyBpIDwgY291bnQ7IGkrKykgewkvKiBGb3IgZWFjaCBieXRlLi4uICovCi0JYyA9ICh1bnNp Z25lZClidWZbaV07CS8qIEZvciBlYXNlIG9mIHJlZmVyZW5jZSAqLwotCWlmICghYykgewkJCS8q IFplcm8gYnl0ZT8gKi8KLQkgICAgZ290byB4c2NhbnN0cmluZzsJLyogTnVsbCB0ZXJtaW5hdGVk IHN0cmluZyAqLwotCX0KLQlpZiAoKGMgJiAweDgwKSA9PSAwKSB7CS8qIFdlIGhhdmUgYSA3LWJp dCBieXRlICovCi0jaWZkZWYgVU5JQ09ERQotCSAgICBpZiAoaSA+IDAgJiYgYyA9PSAxMCkgeyAv KiBMaW5lZmVlZCAqLwotCQlpZiAoYnVmW2ktMV0gPT0gMCkgbGZudWwrKzsgLyogUHJlY2VkZWQg YnkgTlVMICovCi0JCWVsc2UgaWYgKGJ1ZltpLTFdID09IDEzKSBjcmxmKys7IC8qIG9yIGJ5IENS Li4uICovCi0JICAgIH0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0JICAgIGlmIChjIDwgJyAnKSB7 CQkvKiBDaGVjayBmb3IgQ08gY29udHJvbHMgKi8KLQkJaWYgKGMgIT0gTEYgJiYgYyAhPSBDUiAm JiBjICE9IEhUICYmIGMgIT0gRkYpIHsKLQkJICAgIGMwY29udHJvbHMrKzsKLQkJICAgIGlmIChj ICE9IEVTQyAmJiBjICE9IFNPICYmIGMgIT0gU0kpCi0JCSAgICAgIGMwbm9uaXNvKys7Ci0JCX0K LQkJaWYgKChjID09ICdcMDMyJykJLyogQ3RybC1aICovCi0JCSAgICApIHsKLQkJICAgIGMwY29u dHJvbHMtLTsKLQkJICAgIGMwbm9uaXNvLS07Ci0JCX0KLQkgICAgfQotI2lmZGVmIFVOSUNPREUK LQkgICAgaWYgKCFub3R1dGY4ICYmIHV0ZjhzdGF0ZSkgeyAvKiBJbiBVVEYtOCBzZXF1ZW5jZT8g Ki8KLQkJdXRmOHN0YXRlID0gMDsKLQkJZGVidWcoRjAwMCwic2NhbnN0cmluZyIsIjctYml0IGJ5 dGUgaW4gVVRGOCBzZXF1ZW5jZSIsYyk7Ci0JCW5vdHV0ZjgrKzsJCS8qIFRoZW4gaXQncyBub3Qg VVRGLTggKi8KLQkJY29udGludWU7Ci0JICAgIH0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0JfSBl bHNlIHsJCQkvKiBXZSBoYXZlIGFuIDgtYml0IGJ5dGUgKi8KLQkgICAgZWlnaHRiaXQrKzsJCS8q IENvdW50IGl0ICovCi0JICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4QTApIC8qIENoZWNrIGZv ciBDMSBjb250cm9scyAqLwotCSAgICAgIGMxY29udHJvbHMrKzsKLSNpZmRlZiBVTklDT0RFCi0J ICAgIGlmICghbm90dXRmOCkgewkJLyogSWYgaXQgbWlnaHQgc3RpbGwgYmUgVVRGOC4uLiAqLwot CQlzd2l0Y2ggKHV0ZjhzdGF0ZSkgeyAvKiBFbnRlciB0aGUgVVRGLTggc3RhdGUgbWFjaGluZSAq LwotCQkgIGNhc2UgMDoJCSAvKiBGaXJzdCBieXRlLi4uICovCi0JCSAgICBpZiAoKGMgJiAweEUw KSA9PSAweEMwKSB7IC8qIFRlbGxzIG51bWJlciBvZiAqLwotCQkJdXRmOHN0YXRlID0gMTsgICAg ICAgIC8qIHN1YnNlcXVlbnQgYnl0ZXMgKi8KLQkJICAgIH0gZWxzZSBpZiAoKGMgJiAweEYwKSA9 PSAweEUwKSB7Ci0JCQl1dGY4c3RhdGUgPSAyOwotCQkgICAgfSBlbHNlIGlmICgoYyAmIDB4Rjgp ID09IDB4RjApIHsKLQkJCXV0ZjhzdGF0ZSA9IDM7Ci0JCSAgICB9IGVsc2UgewotCQkJbm90dXRm OCsrOwotCQkgICAgfQotCQkgICAgYnJlYWs7Ci0JCSAgY2FzZSAxOgkJLyogU3Vic2VxdWVudCBi eXRlICovCi0JCSAgY2FzZSAyOgotCQkgIGNhc2UgMzoKLQkJICAgIGlmICgoYyAmIDB4QzApICE9 IDB4ODApIHsgLyogTXVzdCBzdGFydCB3aXRoIDEwICovCi0JCQlkZWJ1ZyhGMDAwLCJzY2Fuc3Ry aW5nIiwKLQkJCSAgICAgICJiYWQgYnl0ZSBpbiBVVEY4IHNlcXVlbmNlIixjKTsKLQkJCW5vdHV0 ZjgrKzsKLQkJCWJyZWFrOwotCQkgICAgfQotCQkgICAgdXRmOHN0YXRlLS07CS8qIEdvb2QsIG9u ZSBsZXNzIGluIHRoaXMgc2VxdWVuY2UgKi8KLQkJICAgIGJyZWFrOwotCQkgIGRlZmF1bHQ6CQkv KiBTaG91bGRuJ3QgaGFwcGVuICovCi0JCSAgICBkZWJ1ZyhGMTExLCJzY2Fuc3RyaW5nIiwiYmFk IFVURjggc3RhdGUiLHV0ZjhzdGF0ZSk7Ci0JCSAgICBub3R1dGY4Kys7Ci0JCX0KLQkgICAgfQot I2VuZGlmIC8qIFVOSUNPREUgKi8KLQl9Ci0gICAgfQotICAgIGlmIChieXRlcyA9PSAwKQkJCS8q IElmIG5vdGhpbmcgd2FzIHJlYWQgKi8KLSAgICAgIHJldHVybigtMSk7CQkJLyogd2UncmUgZG9u ZS4gKi8KLQotI2lmZGVmIFVOSUNPREUKLSAgICBpZiAoYnl0ZXMgPiAxMDApCQkJLyogQnl0ZXMg aXMgbm90IDAgKi8KLSAgICAgIHBjdHplcm8gPSAoZXZlbnplcm8gKyBvZGR6ZXJvKSAvIChieXRl cyAvIDEwMCk7Ci0gICAgZWxzZQotICAgICAgcGN0emVybyA9ICgoZXZlbnplcm8gKyBvZGR6ZXJv KSAqIDEwMCkgLyBieXRlczsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSNpZmRlZiBVTklDT0RF Ci0gICAgeCA9IGVpZ2h0Yml0ID8gYnl0ZXMgLyAyMCA6IGJ5dGVzIC8gNDsgLyogRm9yIFVDUy0y Li4uICovCi0KLSAgICBpZiAocnVubWF4ID4gMikgewkJCS8qIEZpbGUgaGFzIHJ1biBvZiBtb3Jl IHRoYW4gMiBOVUxzICovCi0JZGVidWcoRjEwMCwic2NhbnN0cmluZyBCSU4gcnVubWF4IiwiIiww KTsKLQlyYyA9IEZUX0JJTjsJCQkvKiBzbyBpdCBjYW4ndCBiZSBhbnkga2luZCBvZiB0ZXh0LiAq LwotCWdvdG8geHNjYW5zdHJpbmc7Ci0KLSAgICB9IGVsc2UgaWYgKHJjID09IEZUX1VDUzIgfHwg KHJjID09IEZUX1VURjggJiYgcnVubWF4ID09IDApKSB7Ci0JZ290byB4c2NhbnN0cmluZzsJCQkv KiBGaWxlIHN0YXJ0cyB3aXRoIGEgQk9NICovCi0KLSAgICB9IGVsc2UgaWYgKGVpZ2h0Yml0ID4g MCAmJiAhbm90dXRmOCkgeyAvKiBGaWxlIGhhcyA4LWJpdCBkYXRhICovCi0JaWYgKHJ1bm1heCA+ IDApIHsJCSAgIC8qIGFuZCBydW5zIG9mIE5VTHMgKi8KLQkgICAgZGVidWcoRjEwMCwic2NhbnN0 cmluZyBCSU4gKG5uVVRGOCkgcnVubWF4IiwiIiwwKTsKLQkgICAgcmMgPSBGVF9CSU47CQkgICAv KiBVVEYtOCBkb2Vzbid0IGhhdmUgTlVMcyAqLwotCX0gZWxzZSB7CQkJICAgLyogTm8gTlVMcyAq LwotCSAgICBkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIFVURjggKG5uVVRGOCArIHJ1bm1heCA9PSAw KSIsIiIsMCk7Ci0JICAgIHJjID0gRlRfVVRGODsJCSAgIC8qIGFuZCBub3Qgbm90IFVURi04LCBz byBpcyBVVEYtOCAqLwotCX0KLQlnb3RvIHhzY2Fuc3RyaW5nOwotICAgIH0KLS8qCi0gIEl0IHNl ZW1zIHRvIGJlIFVDUy0yIGJ1dCBsZXQncyBiZSBtb3JlIGNlcnRhaW4gc2luY2UgdGhlcmUgaXMg bm8gQk9NLi4uCi0gIElmIHRoZSBudW1iZXIgb2YgNy0gYW5kIDgtYml0IGNoYXJhY3RlcnMgaXMg YXBwcm94aW1hdGVseSBlcXVhbCwgaXQgbWlnaHQKLSAgYmUgYSBjb21wcmVzc2VkIGZpbGUuICBJ biB0aGlzIGNhc2Ugd2UgZGVjaWRlIGJhc2VkIG9uIHRoZSBuYW1lLgotKi8KLSAgICBpZiAocmMg PT0gRlRfVUNTMikgewotCWlmIChieXRlcyA8IDEwMCkgewotCSAgICBpZiAob2RkemVybyAhPSAw ICYmIGV2ZW56ZXJvICE9IDApIHsKLQkJZGVidWcoRjEwMCwic2NhbnN0cmluZyBzbWFsbCBVQ1My IGRvdWJ0ZnVsIiwiIiwwKTsKLQkJcmMgPSBGVF9CSU47Ci0JCWdvdG8geHNjYW5zdHJpbmc7Ci0J ICAgIH0gZWxzZSBpZiAob2RkemVybyA9PSAwICYmIGV2ZW56ZXJvID09IDApIHsKLQkJcmMgPSBl aWdodGJpdCA/IEZUXzhCSVQgOiBGVF83QklUOwotCSAgICB9Ci0JfQotCWdvdG8geHNjYW5zdHJp bmc7CQkJLyogU2VlbXMgdG8gYmUgVUNTLTIgKi8KLSAgICB9Ci0KLS8qIElmIG5vbmUgb2YgdGhl IGFib3ZlLCBpdCdzIHByb2JhYmx5IG5vdCBVbmljb2RlLiAgKi8KLQotICAgIGlmICghZWlnaHRi aXQpIHsJCQkvKiBJdCdzIDctYml0ICovCi0JaWYgKGMwY29udHJvbHMpIHsJCS8qIFRoaXMgd291 bGQgYmUgc3RyYW5nZSAqLwotCSAgICBpZiAoKGMwbm9uaXNvID4gMCkgJiYgKHR4dGN6ID09IDAp KSB7Ci0JCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgNy1iaXQgQklOIChjMGNvbmlzbykiLCIiLDAp OwotCQlyYyA9IEZUX0JJTjsKLQkgICAgfSBlbHNlIHsKLQkJZGVidWcoRjEwMCwic2NhbnN0cmlu ZyA3LWJpdCBJU08yMDIyIFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7Ci0JCXJjID0gRlRfN0JJ VDsKLQkgICAgfQotCX0gZWxzZSB7CQkJLyogNy1iaXQgdGV4dCAqLwotCSAgICBkZWJ1ZyhGMTAw LCJzY2Fuc3RyaW5nIDctYml0IFRFWFQgKG5vIGMwY29udHJvbHMpIiwiIiwwKTsKLQkgICAgcmMg PSBGVF83QklUOwotCX0KLSAgICB9IGVsc2UgaWYgKCFjMG5vbmlzbyB8fCB0eHRjeikgewkvKiA4 LWJpdCB0ZXh0ICovCi0JZGVidWcoRjEwMCwic2NhbnN0cmluZyA4LWJpdCBURVhUIChubyBjMG5v bmlzbykiLCIiLDApOwotCXJjID0gRlRfOEJJVDsKLQl2YWwgPSBjMWNvbnRyb2xzID8gMSA6IDA7 Ci0gICAgfSBlbHNlIHsJCQkJLyogOC1iaXQgYmluYXJ5ICovCi0JZGVidWcoRjEwMCwic2NhbnN0 cmluZyA4LWJpdCBCSU4gKGMwbm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF9CSU47Ci0gICAgfQot Ci0jZWxzZSAgLyogIVVOSUNPREUgKi8KLQotICAgIGlmIChjMG5vbmlzbykgewotCWRlYnVnKEYx MDAsInNjYW5zdHJpbmcgOC1iaXQgQklOIChjMG5vbmlzbykiLCIiLDApOwotCXJjID0gRlRfQklO OwotICAgIH0gZWxzZSBpZiAoZWlnaHRiaXQpIHsKLQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDgt Yml0IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF84QklUOwotCXZhbCA9IGMx Y29udHJvbHMgPyAxIDogMDsKLSAgICB9IGVsc2UgewotCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcg Ny1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKLQlyYyA9IEZUXzdCSVQ7Ci0gICAgfQot Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0gIHhzY2Fuc3RyaW5nOgotICAgIGRlYnVnKEYxMDEs InNjYW5zdHJpbmcgcmVzdWx0ICAgICAiLCIiLHJjKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi0K LQotLyogIEYgSSBMIEUgUyBFIEwgRSBDIFQgIC0tICBTZWxlY3QgdGhpcyBmaWxlIGZvciBzZW5k aW5nICAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZmlsZXNlbGVjdCgKLSAgICBjaGFyICpm LCBjaGFyICpzYSwgY2hhciAqc2IsIGNoYXIgKnNuYSwgY2hhciAqc25iLAotICAgIENLX09GRl9U IG1pbnNpeiwgQ0tfT0ZGX1QgbWF4c2l6LAotICAgIGludCBuYnUsIGludCBueGxpc3QsCi0gICAg Y2hhciAqKiB4bGlzdAotKQotI2Vsc2UKLWZpbGVzZWxlY3QoZixzYSxzYixzbmEsc25iLG1pbnNp eixtYXhzaXosbmJ1LG54bGlzdCx4bGlzdCkKLSBjaGFyICpmLCpzYSwqc2IsKnNuYSwqc25iOyBD S19PRkZfVCBtaW5zaXosbWF4c2l6OwotIGludCBuYnUsbnhsaXN0OyBjaGFyICoqIHhsaXN0Owot I2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBmaWxlc2VsZWN0ICovIHsKLSAgICBjaGFyICpmZGF0 ZTsKLSAgICBpbnQgbjsKLSAgICBDS19PRkZfVCB6OwotCi0gICAgZGVidWcoRjExMSwiZmlsZXNl bGVjdCBtaW5zaXoiLGNrZnN0b2EobWluc2l6KSxtaW5zaXopOwotICAgIGRlYnVnKEYxMTEsImZp bGVzZWxlY3QgbWF4c2l6Iixja2ZzdG9hKG1heHNpeiksbWF4c2l6KTsKLSAgICBkZWJ1ZyhGMTEx LCJmaWxlc2VsZWN0IChDS19PRkZfVCktMSIsY2tmc3RvYSgoQ0tfT0ZGX1QpLTEpLChDS19PRkZf VCktMSk7Ci0KLSAgICBpZiAoIXNhKSBzYSA9ICIiOwotICAgIGlmICghc2IpIHNiID0gIiI7Ci0g ICAgaWYgKCFzbmEpIHNuYSA9ICIiOwotICAgIGlmICghc25iKSBzbmIgPSAiIjsKLQotI2lmZGVm IENLU1lNTElOSwotI2lmbmRlZiBOT0lDUAotI2lmbmRlZiBOT1hGRVIKLSAgICBpZiAobm9saW5r cykgewotCUNLX09GRl9UIHp6OwotCXp6ID0gemdldGZzKGYpOwotCWRlYnVnKEYxMTEsImZpbGVz ZWxlY3QgTk9MSU5LUyB6Z2V0ZnMiLGYsenopOwotCWlmICh6eiA8IChDS19PRkZfVCkwKQotCSAg cmV0dXJuKDApOwotCWRlYnVnKEYxMTEsImZpbGVzZWxlY3QgTk9MSU5LUyB6Z2ZzX2xpbmsiLGYs emdmc19saW5rKTsKLQlpZiAoemdmc19saW5rKQotCSAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotI2VuZGlmIC8qIENLU1lNTElOSyAq LwotCi0gICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCIsZiwwKTsKLSAgICBpZiAoKnNhIHx8ICpz YiB8fCAqc25hIHx8ICpzbmIpIHsKLQlmZGF0ZSA9IHpmY2RhdChmKTsJCS8qIERhdGUvdGltZSBv ZiB0aGlzIGZpbGUgKi8KLQlpZiAoIWZkYXRlKSBmZGF0ZSA9ICIiOwotCW4gPSBzdHJsZW4oZmRh dGUpOwotCWRlYnVnKEYxMTEsImZpbGVzZWxlY3QgZmRhdGUiLGZkYXRlLG4pOwotCWlmIChuICE9 IDE3KQkJCS8qIEZhaWxlZCB0byBnZXQgaXQgKi8KLQkgIHJldHVybigxKTsKLQkvKiAvQUZURVI6 ICovCi0JaWYgKHNhWzBdICYmIChzdHJjbXAoZmRhdGUsKGNoYXIgKilzYSkgPD0gMCkpIHsKLQkg ICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBzYSIsc2EsMCk7Ci0JICAgIC8qIHRsb2coRjExMCwi U2tpcHBpbmcgKHRvbyBvbGQpIixmLDApOyAqLwotCSAgICByZXR1cm4oMCk7Ci0JfQotCS8qIC9C RUZPUkU6ICovCi0JaWYgKHNiWzBdICYmIChzdHJjbXAoZmRhdGUsKGNoYXIgKilzYikgPj0gMCkp IHsKLQkgICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBzYiIsc2IsMCk7Ci0JICAgIC8qIHRsb2co RjExMCwiU2tpcHBpbmcgKHRvbyBuZXcpIixmLDApOyAqLwotCSAgICByZXR1cm4oMCk7Ci0JfQot CS8qIC9OT1QtQUZURVI6ICovCi0JaWYgKHNuYVswXSAmJiAoc3RyY21wKGZkYXRlLChjaGFyICop c25hKSA+IDApKSB7Ci0JICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc25hIixzbmEsMCk7Ci0J ICAgIC8qIHRsb2coRjExMCwiU2tpcHBpbmcgKHRvbyBuZXcpIixmLDApOyAqLwotCSAgICByZXR1 cm4oMCk7Ci0JfQotCS8qIC9OT1QtQkVGT1JFOiAqLwotCWlmIChzbmJbMF0gJiYgKHN0cmNtcChm ZGF0ZSwoY2hhciAqKXNuYikgPCAwKSkgewotCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNu YiIsc25iLDApOwotCSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5nICh0b28gb2xkKSIsZiwwKTsg Ki8KLQkgICAgcmV0dXJuKDApOwotCX0KLSAgICB9Ci0gICAgLyogU21hbGxlciBvciBsYXJnZXIg Ki8KLSAgICBpZiAobWluc2l6ID4gKENLX09GRl9UKS0xIHx8IG1heHNpeiA+IChDS19PRkZfVCkt MSkgewotCXogPSB6Y2hraShmKTsJCQkvKiBHZXQgc2l6ZSAqLwotCWRlYnVnKEYxMDEsImZpbGVz ZWxlY3QgZmlsZXNpemUiLCIiLHopOwotCWlmICh6IDwgKENLX09GRl9UKTApCi0JICByZXR1cm4o MSk7Ci0JaWYgKChtaW5zaXogPiAoQ0tfT0ZGX1QpLTEpICYmICh6ID49IG1pbnNpeikpIHsKLQkg ICAgZGVidWcoRjExMSwiZmlsZXNlbGVjdCBtaW5zaXogc2tpcHBpbmciLGYsbWluc2l6KTsKLQkg ICAgLyogdGxvZyhGMTExLCJTa2lwcGluZyAodG9vIGJpZykiLGYseik7ICovCi0JICAgIHJldHVy bigwKTsKLQl9Ci0JaWYgKChtYXhzaXogPiAoQ0tfT0ZGX1QpLTEpICYmICh6IDw9IG1heHNpeikp IHsKLQkgICAgZGVidWcoRjExMSwiZmlsZXNlbGVjdCBtYXhzaXogc2tpcHBpbmciLGYsbWF4c2l6 KTsKLQkgICAgLyogdGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIHNtYWxsKSIsZiwwKTsgKi8KLQkg ICAgcmV0dXJuKDApOwotCX0KLSAgICB9Ci0gICAgaWYgKG5idSkgewkJCQkvKiBTa2lwcGluZyBi YWNrdXAgZmlsZXM/ICovCi0JaWYgKGNrbWF0Y2goCi0jaWZkZWYgQ0tSRUdFWAotCQkgICAgIiou flswLTldKn4iCS8qIE5vdCBwZXJmZWN0IGJ1dCBjbG9zZSBlbm91Z2guICovCi0jZWxzZQotCQkg ICAgIioufip+IgkJLyogTGVzcyBjbG9zZS4gKi8KLSNlbmRpZiAvKiBDS1JFR0VYICovCi0JCSAg ICAsZixmaWxlY2FzZSwxKSkgewotCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNraXBwaW5n IGJhY2t1cCIsZiwwKTsKLQkgICAgcmV0dXJuKDApOwotCX0KLSAgICB9Ci0gICAgZm9yIChuID0g MDsgeGxpc3QgJiYgbiA8IG54bGlzdDsgbisrKSB7Ci0JaWYgKCF4bGlzdFtuXSkgewotCSAgICBk ZWJ1ZyhGMTAxLCJmaWxlc2VsZWN0IHhsaXN0IGVtcHR5IiwwLG4pOwotCSAgICBicmVhazsKLQl9 Ci0JaWYgKGNrbWF0Y2goeGxpc3Rbbl0sZixmaWxlY2FzZSwxKSkgewotCSAgICBkZWJ1ZyhGMTEx LCJmaWxlc2VsZWN0IHhsaXN0Iix4bGlzdFtuXSxuKTsKLQkgICAgZGVidWcoRjExMCwiZmlsZXNl bGVjdCBza2lwcGluZyIsZiwwKTsKLQkgICAgcmV0dXJuKDApOwotCX0KLSAgICB9Ci0gICAgaWYg KHhmaWxldHlwZSA+IC0xKSB7Ci0JbiA9IHNjYW5maWxlKGYsTlVMTCxuc2NhbmZpbGUpOwotCWlm IChuIDwgMCkgewotCSAgICBuID0gYmluYXJ5ID8gMSA6IDA7Ci0JfSBlbHNlIHsKLQkgICAgbiA9 IChuID09IEZUX0JJTikgPyAxIDogMDsKLQl9Ci0JaWYgKG4gIT0geGZpbGV0eXBlKQotCSAgcmV0 dXJuKDApOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNlbGVjdGluZyIsZiww KTsKLSAgICByZXR1cm4oMSk7Ci19Ci0KLQotI2lmZGVmIFRDUFNPQ0tFVAotI2lmZGVmIE5UCi1l eHRlcm4gaW50IFdTQVNhZmVUb0NhbmNlbDsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLwotCi1WT0lECi1zZXRmbG93KCkgewotICAgIGV4dGVybiBpbnQgZmxvdywgYXV0 b2Zsb3csIG1kbXR5cCwgY3h0eXBlLCBjeGZsb3dbXTsKLSNpZm5kZWYgTk9ESUFMCi0gICAgZXh0 ZXJuIGludCBkaWFsY2FwYXMsIGRpYWxmYzsKLSAgICBleHRlcm4gTURNSU5GICogbW9kZW1wW107 Ci0gICAgTURNSU5GICogcCA9IE5VTEw7Ci0gICAgbG9uZyBiaXRzID0gMDsKLSNlbmRpZiAvKiBO T0RJQUwgKi8KLQotICAgIGRlYnVnKEYxMDEsInNldGZsb3cgYXV0b2Zsb3ciLCIiLGF1dG9mbG93 KTsKLQotLyogI2lmZGVmIENPTU1FTlQgKi8KLS8qIFdIWSBXQVMgVEhJUyBDT01NRU5URUQgT1VU PyAqLwotICAgIGlmICghYXV0b2Zsb3cpICAgICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgaWYg RkxPVyBpcyBBVVRPICovCi0gICAgICByZXR1cm47Ci0vKiAjZW5kaWYgKi8gLyogQ09NTUVOVCAq LwotCi0gICAgZGVidWcoRjEwMSwic2V0ZmxvdyBsb2NhbCIsIiIsbG9jYWwpOwotICAgIGRlYnVn KEYxMDEsInNldGZsb3cgbmV0d29yayIsIiIsbmV0d29yayk7Ci0gICAgZGVidWcoRjEwMSwic2V0 ZmxvdyBjeHR5cGUiLCIiLGN4dHlwZSk7Ci0KLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgaWYgKG5l dHdvcmsgJiYgaXN0bmNvbXBvcnQoKSkgewotCWZsb3cgPSBjeGZsb3dbQ1hUX01PREVNXTsKLSAg ICAgICAgZGVidWcoRjEwMSwic2V0ZmxvdyBUTl9DT01QT1JUIGZsb3ciLCIiLGZsb3cpOwotICAg ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQotICAgIGlmIChu ZXR3b3JrIHx8ICFsb2NhbCB8fCBjeHR5cGUgPT0gQ1hUX0RJUkVDVCkgewotICAgICAgICBmbG93 ID0gY3hmbG93W2N4dHlwZV07ICAgICAgICAgIC8qIFNldCBhcHByb3ByaWF0ZSBmbG93IGNvbnRy b2wgKi8KLSAgICAgICAgZGVidWcoRjEwMSwic2V0ZmxvdyBmbG93IiwiIixmbG93KTsKLSAgICAg ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoY3h0eXBlICE9IENYVF9NT0RFTSkgICAgICAgICAg ICAvKiBDb25uZWN0aW9uIHR5cGUgc2hvdWxkIGJlIG1vZGVtICovCi0gICAgICByZXR1cm47Ci0K LSNpZm5kZWYgTk9ESUFMCi0gICAgYml0cyA9IGRpYWxjYXBhczsgICAgICAgICAgICAgICAgICAg LyogQ2FwYWJpbGl0eSBiaXRzICovCi0gICAgaWYgKCFiaXRzKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogTm8gYml0cz8gKi8KLSAgICAgICAgcCA9IG1vZGVtcFttZG10eXBdOyAgICAgICAg ICAgICAvKiBMb29rIGluIG1vZGVtIGluZm8gc3RydWN0dXJlICovCi0gICAgICAgIGlmIChwKQot ICAgICAgICAgIGJpdHMgPSBwLT5jYXBhczsKLSAgICB9Ci0gICAgaWYgKGRpYWxmYyA9PSBGTE9f QVVUTykgeyAgICAgICAgICAgLyogSWYgRElBTCBmbG93IGlzIEFVVE8gKi8KLSNpZmRlZiBDS19S VFNDVFMgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBjYW4gZG8gUlRTL0NUUyBmbG93 IGNvbnRyb2wgKi8KLSAgICAgICAgaWYgKGJpdHMgJiBDS0RfSFcpICAgICAgICAgICAgICAvKiBh bmQgbW9kZW0gY2FuIGRvIGl0IHRvbyAqLwotICAgICAgICAgIGZsb3cgPSBGTE9fUlRTQzsgICAg ICAgICAgICAgIC8qIHRoZW4gc3dpdGNoIHRvIFJUUy9DVFMgKi8KLSAgICAgICAgZWxzZSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndpc2UgKi8KLSAgICAgICAgICBmbG93ID0g RkxPX1hPTlg7ICAgICAgICAgICAgICAvKiB1c2UgWG9uL1hvZmYuICovCi0jZWxzZQotI2lmbmRl ZiBORVhUCi0jaWZuZGVmIElSSVgKLSAgICAgICAgZmxvdyA9IEZMT19YT05YOyAgICAgICAgICAg ICAgICAvKiBVc2UgWG9uL1hvZmYuICovCi0jZW5kaWYgLyogSVJJWCAqLwotI2VuZGlmIC8qIE5F WFQgKi8KLSNlbmRpZiAvKiBDS19SVFNDVFMgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9ESUFMICov Ci0gICAgZGVidWcoRjEwMSwic2V0ZmxvdyBtb2RlbSBmbG93IiwiIixmbG93KTsKLSAgICByZXR1 cm47Ci19Ci0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIENLX1RSSUdHRVIKLQotLyogIEEgVSBU IE8gRSBYIEkgVCBDIEggSyAgLS0gIENoZWNrIGZvciBDT05ORUNULW1vZGUgdHJpZ2dlciBzdHJp bmcgICovCi0vKgotICBSZXR1cm5zIC0xIGlmIHRyaWdnZXIgbm90IGZvdW5kLCBvciBlbHNlIHRo ZSB0cmlnZ2VyIGluZGV4LCAwIG9yIGdyZWF0ZXIuCi0gIChSZXBsYWNlIHdpdGggZmFuY2llciBh bmQgbW9yZSBlZmZpY2llbnQgbWF0Y2hlciBsYXRlci4uLikKLSAgTk9URTogdG8gcHJldmVudCB1 bm5lY2Vzc2FyeSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLCBjYWxsIHRoaXMgd2F5OgotCi0gICAg eCA9IHR0X3RyaWdnZXJbMF0gPyBhdXRvZXhpdGNoayhjKSA6IC0xOwotCi0qLwotaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLWF1dG9leGl0Y2hrKENIQVIgYykKLSNlbHNlCi1hdXRvZXhpdGNoayhjKSBD SEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGF1dG9leGl0Y2hrICovIHsKLSAgICBl eHRlcm4gQ0hBUiAqIHR0X3RybWF0Y2hbXTsKLSAgICBleHRlcm4gY2hhciAqIHR0X3RyaWdnZXJb XTsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgVFJJR0dFUlM7IGkrKykgewotICAg ICAgICBpZiAoIXR0X3RyaWdnZXJbaV0pIHsgICAgICAgICAgIC8qIE5vIG1vcmUgdHJpZ2dlcnMg aW4gbGlzdCAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnR0X3Ry aWdnZXJbaV0pIHsKLSAgICAgICAgICAgIGlmICghdHRfdHJtYXRjaFtpXSkgICAgICAgICAvKiBK dXN0IHN0YXJ0aW5nPyAqLwotICAgICAgICAgICAgICB0dF90cm1hdGNoW2ldID0gKENIQVIgKil0 dF90cmlnZ2VyW2ldOyAvKiBTZXQgbWF0Y2ggcG9pbnRlciAqLwotICAgICAgICAgICAgaWYgKGMg PT0gKnR0X3RybWF0Y2hbaV0pIHsgIC8qIENvbXBhcmUgdGhpcyBjaGFyYWN0ZXIgKi8KLSAgICAg ICAgICAgICAgICB0dF90cm1hdGNoW2ldKys7ICAgICAgICAvKiBJdCBtYXRjaGVzICovCi0gICAg ICAgICAgICAgICAgaWYgKCEqdHRfdHJtYXRjaFtpXSkgeyAgLyogRW5kIG9mIG1hdGNoIHN0cmlu Zz8gKi8KLSAgICAgICAgICAgICAgICAgICAgdHRfdHJtYXRjaFtpXSA9IChDSEFSICopIHR0X3Ry aWdnZXJbaV07IC8qIFllcywgcmV3aW5kLCAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJhdXRvZXhpdGNoayIsdHRfdHJpZ2dlcltpXSxpKTsgLyogbG9nLCAqLwotICAgICAgICAg ICAgICAgICAgICByZXR1cm4oaSk7ICAgICAgICAgIC8qIGFuZCByZXR1cm4gc3VjY2VzcyAqLwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAg ICAvKiBObyBtYXRjaCAqLwotICAgICAgICAgICAgICB0dF90cm1hdGNoW2ldID0gKENIQVIgKikg dHRfdHJpZ2dlcltpXTsgLyogUmV3aW5kIG1hdGNoIHN0cmluZyAqLwotICAgICAgICB9IC8qIGFu ZCBnbyBvbiB0aGUgbmV4dCBtYXRjaCBzdHJpbmcgKi8KLSAgICB9Ci0gICAgcmV0dXJuKC0xKTsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gbWF0Y2ggZm91bmQgKi8KLX0KLSNlbmRpZiAv KiBDS19UUklHR0VSICovCi0KLSNpZm5kZWYgTk9TSE9XCi0vKiAgUyBIIE8gTSBEIE0gIC0tICBT aG93IG1vZGVtIHNpZ25hbHMgICovCi0KLVZPSUQKLXNob21kbSgpIHsKLS8qCi0gIE5vdGUgdXNl IG9mICJcclxuIiB0byBtYWtlIHN1cmUgdGhpcyByZXBvcnQgcHJpbnRzIHJpZ2h0LCBldmVuIHdo ZW4KLSAgY2FsbGVkIGR1cmluZyBDT05ORUNUIG1vZGUuCi0qLwotICAgIGludCB5OwotICAgIHkg PSB0dGdtZG0oKTsKLSAgICBzd2l0Y2ggKHkpIHsKLSAgICAgIGNhc2UgLTM6IHByaW50ZigKLSAg ICAgICAgICAgICAgICAgIk1vZGVtIHNpZ25hbHMgdW5hdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9u IG9mIEtlcm1pdFxyXG4iKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAtMjog cHJpbnRmKCJObyBtb2RlbSBjb250cm9sIGZvciB0aGlzIGRldmljZVxyXG4iKTsgYnJlYWs7Ci0g ICAgICBjYXNlIC0xOiBwcmludGYoIk1vZGVtIHNpZ25hbHMgdW5hdmFpbGFibGVcclxuIik7IGJy ZWFrOwotICAgICAgZGVmYXVsdDoKLSNpZm5kZWYgTUFDCi0gICAgICAgIHByaW50ZigKLSAgICAg ICAgICAiIENhcnJpZXIgRGV0ZWN0ICAgICAgKENEKTogICVzXHJcbiIsKHkgJiBCTV9EQ0QpID8g Ik9uIjogIk9mZiIpOwotICAgICAgICBwcmludGYoCi0gICAgICAgICAgIiBEYXRhc2V0IFJlYWR5 ICAgICAgIChEU1IpOiAlc1xyXG4iLCh5ICYgQk1fRFNSKSA/ICJPbiI6ICJPZmYiKTsKLSNlbmRp ZiAvKiBNQUMgKi8KLSAgICAgICAgcHJpbnRmKAotICAgICAgICAgICIgQ2xlYXIgVG8gU2VuZCAg ICAgICAoQ1RTKTogJXNcclxuIiwoeSAmIEJNX0NUUykgPyAiT24iOiAiT2ZmIik7Ci0jaWZuZGVm IFNUUkFUVVMKLSNpZm5kZWYgTUFDCi0gICAgICAgIHByaW50ZigKLSAgICAgICAgICAiIFJpbmcg SW5kaWNhdG9yICAgICAgKFJJKTogICVzXHJcbiIsKHkgJiBCTV9STkcpID8gIk9uIjogIk9mZiIp OwotI2VuZGlmIC8qIE1BQyAqLwotICAgICAgICBwcmludGYoCi0gICAgICAgICAgIiBEYXRhIFRl cm1pbmFsIFJlYWR5IChEVFIpOiAlc1xyXG4iLAotI2lmZGVmIE5UCi0gICAgICAgICAgIih1bmtu b3duKSIKLSNlbHNlIC8qIE5UICovCi0gICAgICAgICAgKHkgJiBCTV9EVFIpID8gIk9uIjogIk9m ZiIKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICk7Ci0jaWZuZGVmIE1BQwotICAgICAgICBw cmludGYoCi0gICAgICAgICAgIiBSZXF1ZXN0IFRvIFNlbmQgICAgIChSVFMpOiAlc1xyXG4iLAot I2lmZGVmIE5UCi0gICAgICAgICAgIih1bmtub3duKSIKLSNlbHNlIC8qIE5UICovCi0gICAgICAg ICAgKHkgJiBCTV9SVFMpID8gIk9uIjogIk9mZiIKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAg ICk7Ci0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotICAgIH0KLSNpZmRl ZiBCRVRBREVCVUcKLSNpZmRlZiBDS19UQVBJCi0gICAgaWYgKHR0dGFwaSAmJiAhdGFwaXBhc3Mp IHsKLSAgICAgICAgTFBERVZDRkcgICAgICAgIGxwRGV2Q2ZnID0gTlVMTDsKLSAgICAgICAgTFBD T01NQ09ORklHICAgIGxwQ29tbUNvbmZpZyA9IE5VTEw7Ci0gICAgICAgIExQTU9ERU1TRVRUSU5H UyBscE1vZGVtU2V0dGluZ3MgPSBOVUxMOwotICAgICAgICBEQ0IgKiAgICAgICAgICAgbHBEQ0Ig PSBOVUxMOwotCi0gICAgICAgIGlmIChja3RhcGlHZXRNb2RlbVNldHRpbmdzKCZscERldkNmZywm bHBNb2RlbVNldHRpbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxw Q29tbUNvbmZpZywmbHBEQ0IpKSB7Ci0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAg ICAgICBja3RhcGlEaXNwbGF5TW9kZW1TZXR0aW5ncyhscERldkNmZyxscE1vZGVtU2V0dGluZ3Ms Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscENvbW1Db25maWcsbHBE Q0IpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSNlbmRpZiAvKiBC RVRBREVCVUcgKi8KLX0KLSNlbmRpZiAvKiBOT1NIT1cgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICov Ci0KLSNpZm5kZWYgTk9YRkVSCi0vKiAgUyBEIEUgQiBVICAtLSBSZWNvcmQgc3BhciByZXN1bHRz IGluIGRlYnVnZ2luZyBsb2cgICovCi0KLVZPSUQKLXNkZWJ1KGxlbikgaW50IGxlbjsgewotICAg IGRlYnVnKEYxMTEsInNwYXI6IGRhdGEiLChjaGFyICopIHJkYXRhcCxsZW4pOwotICAgIGRlYnVn KEYxMDEsIiBzcHNpeiAiLCIiLCBzcHNpeik7Ci0gICAgZGVidWcoRjEwMSwiIHRpbWludCIsIiIs dGltaW50KTsKLSAgICBkZWJ1ZyhGMTAxLCIgbnBhZCAgIiwiIiwgIG5wYWQpOwotICAgIGRlYnVn KEYxMDEsIiBwYWRjaCAiLCIiLCBwYWRjaCk7Ci0gICAgZGVidWcoRjEwMSwiIHNlb2wgICIsIiIs ICBzZW9sKTsKLSAgICBkZWJ1ZyhGMTAxLCIgY3RscSAgIiwiIiwgIGN0bHEpOwotICAgIGRlYnVn KEYxMDEsIiBlYnEgICAiLCIiLCAgIGVicSk7Ci0gICAgZGVidWcoRjEwMSwiIGVicWZsZyIsIiIs ZWJxZmxnKTsKLSAgICBkZWJ1ZyhGMTAxLCIgYmN0ciAgIiwiIiwgIGJjdHIpOwotICAgIGRlYnVn KEYxMDEsIiBycHRxICAiLCIiLCAgcnB0cSk7Ci0gICAgZGVidWcoRjEwMSwiIHJwdGZsZyIsIiIs cnB0ZmxnKTsKLSAgICBkZWJ1ZyhGMTAxLCIgbHNjYXB1IiwiIixsc2NhcHUpOwotICAgIGRlYnVn KEYxMDEsIiBhdGNhcHUiLCIiLGF0Y2FwdSk7Ci0gICAgZGVidWcoRjEwMSwiIGxwY2FwdSIsIiIs bHBjYXB1KTsKLSAgICBkZWJ1ZyhGMTAxLCIgc3djYXB1IiwiIixzd2NhcHUpOwotICAgIGRlYnVn KEYxMDEsIiB3c2xvdG4iLCIiLCB3c2xvdG4pOwotICAgIGRlYnVnKEYxMDEsIiB3aGF0cnUiLCIi LCB3aGF0cnUpOwotfQotLyogIFIgRCBFIEIgVSAtLSBEZWJ1Z2dpbmcgZGlzcGxheSBvZiBycGFy KCkgdmFsdWVzICAqLwotCi1WT0lECi1yZGVidShkLGxlbikgQ0hBUiAqZDsgaW50IGxlbjsgewot ICAgIGRlYnVnKEYxMTEsInJwYXI6IGRhdGEiLGQsbGVuKTsKLSAgICBkZWJ1ZyhGMTAxLCIgcnBz aXogIiwiIiwgeHVuY2hhcihkWzBdKSk7Ci0gICAgZGVidWcoRjEwMSwiIHJ0aW1vICIsIiIsIHJ0 aW1vKTsKLSAgICBkZWJ1ZyhGMTAxLCIgbXlwYWRuIiwiIixteXBhZG4pOwotICAgIGRlYnVnKEYx MDEsIiBteXBhZGMiLCIiLG15cGFkYyk7Ci0gICAgZGVidWcoRjEwMSwiIGVvbCAgICIsIiIsICAg ZW9sKTsKLSAgICBkZWJ1ZyhGMTAxLCIgY3RscSAgIiwiIiwgIGN0bHEpOwotICAgIGRlYnVnKEYx MDEsIiBzcSAgICAiLCIiLCAgICBzcSk7Ci0gICAgZGVidWcoRjEwMSwiIGVicSAgICIsIiIsICAg ZWJxKTsKLSAgICBkZWJ1ZyhGMTAxLCIgZWJxZmxnIiwiIixlYnFmbGcpOwotICAgIGRlYnVnKEYx MDEsIiBiY3RyICAiLCIiLCAgYmN0cik7Ci0gICAgZGVidWcoRjEwMSwiIHJwdHEgICIsIiIsICBk WzhdKTsKLSAgICBkZWJ1ZyhGMTAxLCIgcnB0ZmxnIiwiIixycHRmbGcpOwotICAgIGRlYnVnKEYx MDEsIiBjYXBhcyAiLCIiLCBjYXBhcyk7Ci0gICAgZGVidWcoRjEwMSwiIGJpdHMgICIsIiIsZFtj YXBhc10pOwotICAgIGRlYnVnKEYxMDEsIiBsc2NhcHUiLCIiLGxzY2FwdSk7Ci0gICAgZGVidWco RjEwMSwiIGF0Y2FwdSIsIiIsYXRjYXB1KTsKLSAgICBkZWJ1ZyhGMTAxLCIgbHBjYXB1IiwiIixs cGNhcHUpOwotICAgIGRlYnVnKEYxMDEsIiBzd2NhcHUiLCIiLHN3Y2FwdSk7Ci0gICAgZGVidWco RjEwMSwiIHdzbG90ciIsIiIsIHdzbG90cik7Ci0gICAgZGVidWcoRjEwMSwiIHJwc2l6KGV4dGVu ZGVkKSIsIiIscnBzaXopOwotfQotCi0jaWZkZWYgQ09NTUVOVAotLyogIEMgSCBLIEUgUiBSICAt LSAgRGVjaWRlIHdoZXRoZXIgdG8gZXhpdCB1cG9uIGEgcHJvdG9jb2wgZXJyb3IgICovCi0KLVZP SUQKLWNoa2VycigpIHsKLSAgICBpZiAoYmFja2dyZCAmJiAhc2VydmVyKSBmYXRhbCgiUHJvdG9j b2wgZXJyb3IiKTsKLX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogTk9YRkVSICov Ci0KLS8qICBGIEEgVCBBIEwgIC0tICBGYXRhbCBlcnJvciBtZXNzYWdlICovCi0KLVZPSUQKLWZh dGFsKG1zZykgY2hhciAqbXNnOyB7Ci0gICAgZXh0ZXJuIGludCBpbml0ZmxnOwotICAgIHN0YXRp YyBpbnQgaW5pdGluZyA9IDA7Ci0gICAgaWYgKCFtc2cpIG1zZyA9ICIiOwotICAgIGRlYnVnKEYx MTEsImZhdGFsIixtc2csaW5pdGZsZyk7Ci0KLSAgICBpZiAoIWluaXRmbGcpIHsJCQkvKiBJZiBj YWxsZWQgZnJvbSBwcmVzY2FuICovCi0JaWYgKGluaXRpbmcpCQkJLyogb3IgY2FsbGVkIGZyb20g c3lzaW5pdCgpICovCi0gICAgICAgICAgZXhpdCgyNTMpOwotCWluaXRpbmcgPSAxOwotCXN5c2lu aXQoKTsKLSAgICB9Ci0KLSAgICBkZWJ1ZyhGMTExLCJmYXRhbCIsbXNnLHhpdHN0YSk7Ci0gICAg dGxvZyhGMTEwLCJGYXRhbDoiLG1zZywwTCk7Ci0jaWZkZWYgVk1TCi0gICAgaWYgKHN0cm5jbXAo bXNnLCIlQ0tFUk1JVCIsOCkpCi0gICAgICBjb25vbCgiJUNLRVJNSVQtRS1GQVRBTCwgIik7Ci0g ICAgY29ub2xsKG1zZyk7Ci0jZWxzZSAvKiAhVk1TICovCi0gICAgY29ub2xsKG1zZyk7Ci0jZW5k aWYgLyogVk1TICovCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PWEZFUgotICAgIGlmICh4ZnJiZWwp IHsKLSAgICAgICAgYmxlZXAoQlBfRkFJTCk7Ci0gICAgICAgIHNsZWVwKDEpOwotICAgICAgICBi bGVlcChCUF9GQUlMKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNlbmRpZiAvKiBP UzIgKi8KLSAgICBkb2V4aXQoQkFEX0VYSVQseGl0c3RhIHwgMSk7ICAgICAgICAvKiBFeGl0IGlu ZGljYXRpbmcgZmFpbHVyZSAqLwotfQotCi0jaWZuZGVmIE5PWEZFUgotLyogIEIgTCBEIEwgRSBO ICAtLSAgTWFrZSBsZW5ndGgtZW5jb2RlZCBjb3B5IG9mIHN0cmluZyAgKi8KLQotY2hhciAqCi1i bGRsZW4oc3RyLGRlc3QpIGNoYXIgKnN0ciwgKmRlc3Q7IHsKLSAgICBpbnQgbGVuOwotICAgIGxl biA9IChpbnQpc3RybGVuKHN0cik7Ci0gICAgaWYgKGxlbiA+IDk0KQotICAgICAgKmRlc3QgPSBT UDsKLSAgICBlbHNlCi0gICAgICAqZGVzdCA9IChjaGFyKSB0b2NoYXIobGVuKTsKLSAgICBzdHJj cHkoZGVzdCsxLHN0cik7CQkJLyogQ2hlY2tlZCBiZWxvdyBpbiBzZXRnZW4oKSAqLwotICAgIHJl dHVybihkZXN0K2xlbisxKTsKLX0KLQotCi0vKiAgUyBFIFQgRyBFIE4gIC0tICBDb25zdHJ1Y3Qg YSBnZW5lcmljIGNvbW1hbmQgICovCi0vKgotICBDYWxsIHdpdGggR2VuZXJpYyBjb21tYW5kIGNo YXJhY3RlciBmb2xsb3dlZCBieSB0aHJlZSBzdHJpbmcgYXJndW1lbnRzLgotICBUcmFpbGluZyBz dHJpbmdzIGFyZSBhbGxvd2VkIHRvIGJlIGVtcHR5ICgiIikuICBFYWNoIHN0cmluZyBleGNlcHQg dGhlIGxhc3QKLSAgbm9uLWVtcHR5IHN0cmluZyBtdXN0IGJlIGxlc3MgdGhhbiA5NSBjaGFyYWN0 ZXJzIGxvbmcuICBUaGUgZmluYWwgbm9uZW1wdHkKLSAgc3RyaW5nIGlzIGFsbG93ZWQgdG8gYmUg bG9uZ2VyLgotKi8KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwotc2V0Z2VuKGNoYXIgdHlwZSwgY2hh ciAqIGFyZzEsIGNoYXIgKiBhcmcyLCBjaGFyICogYXJnMykKLSNlbHNlCi1zZXRnZW4odHlwZSxh cmcxLGFyZzIsYXJnMykgY2hhciB0eXBlLCAqYXJnMSwgKmFyZzIsICphcmczOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi0vKiBzZXRnZW4gKi8gewotICAgIGNoYXIgKnVwc3RyLCAqY3A7Ci0jaWZk ZWYgRFlOQU1JQwotICAgIGlmICghY21kc3RyKQotICAgICAgaWYgKCEoY21kc3RyID0gbWFsbG9j KE1BWFNQICsgMSkpKQotICAgICAgICBmYXRhbCgic2V0Z2VuOiBjYW4ndCBhbGxvY2F0ZSBtZW1v cnkiKTsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSAgICBjcCA9IGNtZHN0cjsKLSAgICAqY3Ar KyA9IHR5cGU7Ci0gICAgKmNwID0gTlVMOwotICAgIGlmICghYXJnMSkgYXJnMSA9ICIiOwotICAg IGlmICghYXJnMikgYXJnMiA9ICIiOwotICAgIGlmICghYXJnMykgYXJnMyA9ICIiOwotICAgIGlm ICgoKGludClzdHJsZW4oYXJnMSkrKGludClzdHJsZW4oYXJnMikrKGludClzdHJsZW4oYXJnMykr NCkgPCBNQVhTUCkgewotCWlmICgqYXJnMSAhPSBOVUwpIHsKLQkgICAgdXBzdHIgPSBibGRsZW4o YXJnMSxjcCk7Ci0JICAgIGlmICgqYXJnMiAhPSBOVUwpIHsKLQkJdXBzdHIgPSBibGRsZW4oYXJn Mix1cHN0cik7Ci0JCWlmICgqYXJnMyAhPSBOVUwpIGJsZGxlbihhcmczLHVwc3RyKTsKLQkgICAg fQotCX0KLQljbWFyZyA9IGNtZHN0cjsKLQlkZWJ1ZyhGMTEwLCJzZXRnZW4iLGNtYXJnLDApOwot CXJldHVybignZycpOwotICAgIH0KLSAgICByZXR1cm4oJ0UnKTsKLX0KLSNlbmRpZiAvKiBOT1hG RVIgKi8KLQotI2lmbmRlZiBOT01TRU5ECi1zdGF0aWMgY2hhciAqbWdidWZwID0gTlVMTDsKLQot LyogIEYgTiBQIEEgUiBTIEUgIC0tICAqLwotCi0vKgotICBBcmd1bWVudCBpcyBhIGNoYXJhY3Rl ciBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBmaWxlc3BlY3MuCi0gIFRoaXMgZnVuY3Rp b24gYnJlYWtzIHRoZSBzdHJpbmcgYXBhcnQgaW50byBhbiBhcnJheSBvZiBwb2ludGVycywgb25l Ci0gIHRvIGVhY2ggZmlsZXNwZWMsIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZXNwZWNz LiAgVXNlZCBieSBzZXJ2ZXIKLSAgd2hlbiBpdCByZWNlaXZlcyBhIEdFVCBjb21tYW5kIHRvIGFs bG93IGl0IHRvIHByb2Nlc3MgbXVsdGlwbGUgZmlsZQotICBzcGVjaWZpY2F0aW9ucyBpbiBvbmUg dHJhbnNhY3Rpb24uICBTZXRzIGNtbGlzdCB0byBwb2ludCB0byBhIGxpc3Qgb2YKLSAgZmlsZSBw b2ludGVycywgZXhhY3RseSBhcyBpZiB0aGV5IHdlcmUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4K LQotICBUaGlzIHZlcnNpb24gb2YgZm5wYXJzZSB0cmVhdHMgc3BhY2VzIGFzIGZpbGVuYW1lIHNl cGFyYXRvcnMuICBJZiB5b3VyCi0gIG9wZXJhdGluZyBzeXN0ZW0gYWxsb3dzIHNwYWNlcyBpbiBm aWxlbmFtZXMsIHlvdSdsbCBuZWVkIGEgZGlmZmVyZW50Ci0gIHNlcGFyYXRvci4KLQotICBUaGlz IHZlcnNpb24gb2YgZm5wYXJzZSBtYWxsb2NzIGEgc3RyaW5nIGJ1ZmZlciB0byBjb250YWluIHRo ZSBuYW1lcy4gIEl0Ci0gIGNhbm5vdCBhc3N1bWUgdGhhdCB0aGUgc3RyaW5nIHRoYXQgaXMgcG9p bnRlZCB0byBieSB0aGUgYXJndW1lbnQgaXMgc2FmZS4KLSovCi1pbnQKLWZucGFyc2Uoc3RyaW5n KSBjaGFyICpzdHJpbmc7IHsKLSAgICBjaGFyICpwLCAqcywgKnE7Ci0gICAgaW50IHIgPSAwLCB4 OyAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGNvZGUgKi8KLSNpZmRlZiBSRUNVUlNJ VkUKLSAgICBkZWJ1ZyhGMTExLCJmbnBhcnNlIixzdHJpbmcscmVjdXJzaXZlKTsKLSNlbmRpZiAv KiBSRUNVUlNJVkUgKi8KLQotICAgIGlmIChtZ2J1ZnApIGZyZWUobWdidWZwKTsgICAgICAgICAg IC8qIEZyZWUgdGhpcyBmcm9tIGxhc3QgdGltZS4gKi8KLSAgICBtZ2J1ZnAgPSBtYWxsb2MoKGlu dClzdHJsZW4oc3RyaW5nKSsyKTsKLSAgICBpZiAoIW1nYnVmcCkgewotICAgICAgICBkZWJ1ZyhG MTAwLCJmbnBhcnNlIG1hbGxvYyBlcnJvciIsIiIsMCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAg ICB9Ci0jaWZuZGVmIE5PSUNQCi0jaWZuZGVmIE5PU1BMCi0gICAgY2tzdHJuY3B5KGZzcGVjLHN0 cmluZyxmc3BlY2xlbik7ICAgLyogTWFrZSBjb3B5IGZvciBcdihmaWxlc3BlYykgKi8KLSNlbmRp ZiAvKiBOT1NQTCAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgcyA9IHN0cmluZzsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogSW5wdXQgc3RyaW5nICovCi0gICAgcCA9IHEgPSBtZ2J1ZnA7 ICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gdGhlIGNvcHkgKi8KLSAgICByID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIG91ciByZXR1cm4gY29k ZSAqLwotICAgIHdoaWxlICgqcyA9PSBTUCB8fCAqcyA9PSBIVCkgICAgICAgIC8qIFNraXAgbGVh ZGluZyBzcGFjZXMgYW5kIHRhYnMgKi8KLSAgICAgIHMrKzsKLSAgICBmb3IgKHggPSBzdHJsZW4o cyk7ICAgICAgICAgICAgICAgICAvKiBTdHJpcCB0cmFpbGluZyBzcGFjZXMgKi8KLSAgICAgICAg ICh4ID4gMSkgJiYgKHNbeC0xXSA9PSBTUCB8fCBzW3gtMV0gPT0gSFQpOwotICAgICAgICAgeC0t KQotICAgICAgc1t4LTFdID0gTlVMOwotICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIExvb3AgdGhyb3VnaCByZXN0IG9mIHN0cmluZyAqLwotICAgICAgICBpZiAoKnMg PT0gQ01EUSkgeyAgICAgICAgICAgICAgIC8qIEJhY2tzbGFzaCAocXVvdGUgY2hhcmFjdGVyKT8g Ki8KLSAgICAgICAgICAgIGlmICgoeCA9IHh4ZXNjKCZzKSkgPiAtMSkgeyAvKiBHbyBpbnRlcnBy ZXQgaXQuICovCi0gICAgICAgICAgICAgICAgKnErKyA9IChjaGFyKSB4OyAgICAgICAgLyogTnVt ZXJpYyBiYWNrc2xhc2ggY29kZSwgb2sgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAvKiBKdXN0IGxldCBpdCBxdW90ZSBuZXh0IGNoYXIgKi8KLSAgICAgICAgICAg ICAgICBzKys7ICAgICAgICAgICAgICAgICAgICAvKiBnZXQgcGFzdCB0aGUgYmFja3NsYXNoICov Ci0gICAgICAgICAgICAgICAgKnErKyA9ICpzKys7ICAgICAgICAgICAgLyogZGVwb3NpdCBuZXh0 IGNoYXIgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9 IGVsc2UgaWYgKCpzID09IFNQIHx8ICpzID09IE5VTCkgeyAvKiBVbnF1b3RlZCBzcGFjZSBvciBO VUw/ICovCi0gICAgICAgICAgICAqcSsrID0gTlVMOyAgICAgICAgICAgICAgICAgLyogRW5kIG9m IG91dHB1dCBmaWxlbmFtZS4gKi8KLSAgICAgICAgICAgIG1zZmlsZXNbcl0gPSBwOyAgICAgICAg ICAgICAvKiBBZGQgdGhpcyBmaWxlbmFtZSB0byB0aGUgbGlzdCAqLwotICAgICAgICAgICAgZGVi dWcoRjExMSwiZm5wYXJzZSIsbXNmaWxlc1tyXSxyKTsKLSAgICAgICAgICAgIHIrKzsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDb3VudCBpdCAqLwotICAgICAgICAgICAgaWYgKCpzID09IE5V TCkgYnJlYWs7ICAgICAgIC8qIEVuZCBvZiBzdHJpbmc/ICovCi0gICAgICAgICAgICB3aGlsZSAo KnMgPT0gU1ApIHMrKzsgICAgICAgLyogU2tpcCByZXBlYXRlZCBzcGFjZXMgKi8KLSAgICAgICAg ICAgIHAgPSBxOyAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiBuZXh0IG5hbWUgKi8K LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9IGVsc2UgKnErKyA9ICpzOyAgICAgICAg ICAgICAgIC8qIE90aGVyd2lzZSBjb3B5IHRoZSBjaGFyYWN0ZXIgKi8KLSAgICAgICAgcysrOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXh0IGlucHV0IGNoYXJhY3RlciAqLwotICAg IH0KLSAgICBkZWJ1ZyhGMTAxLCJmbnBhcnNlIHIiLCIiLHIpOwotICAgIG1zZmlsZXNbcl0gPSAi IjsgICAgICAgICAgICAgICAgICAgIC8qIFB1dCBlbXB0eSBzdHJpbmcgYXQgZW5kIG9mIGxpc3Qg Ki8KLSAgICBjbWxpc3QgPSBtc2ZpbGVzOwotICAgIHJldHVybihyKTsKLX0KLSNlbmRpZiAvKiBO T01TRU5EICovCi0KLWNoYXIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBk YmNocigpIGZvciBERUJVRyBTRVNTSU9OICovCi1kYmNocihjKSBpbnQgYzsgewotICAgIHN0YXRp YyBjaGFyIHNbOF07Ci0gICAgY2hhciAqY3AgPSBzOwotCi0gICAgYyAmPSAweGZmOwotICAgIGlm IChjICYgMHg4MCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIDh0aCBiaXQgb24gKi8KLSAgICAg ICAgKmNwKysgPSAnfic7Ci0gICAgICAgIGMgJj0gMHg3ZjsKLSAgICB9Ci0gICAgaWYgKGMgPCBT UCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBjaGFyYWN0ZXIgKi8KLSAgICAg ICAgKmNwKysgPSAnXic7Ci0gICAgICAgICpjcCsrID0gKGNoYXIpIGN0bChjKTsKLSAgICB9IGVs c2UgaWYgKGMgPT0gREVMKSB7Ci0gICAgICAgICpjcCsrID0gJ14nOwotICAgICAgICAqY3ArKyA9 ICc/JzsKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmludGlu ZyBjaGFyYWN0ZXIgKi8KLSAgICAgICAgKmNwKysgPSAoY2hhcikgYzsKLSAgICB9Ci0gICAgKmNw ID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlIHN0cmluZyAqLwot ICAgIGNwID0gczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBwb2ludGVy IHRvIGl0ICovCi0gICAgcmV0dXJuKGNwKTsKLX0KLQotLyogIEMgSyBIIE8gUyBUICAtLSAgR2V0 IG5hbWUgb2YgbG9jYWwgaG9zdCAod2hlcmUgQy1LZXJtaXQgaXMgcnVubmluZykgICovCi0KLS8q Ci0gIENhbGwgd2l0aCBwb2ludGVyIHRvIGJ1ZmZlciB0byBwdXQgaG9zdG5hbWUgaW4sIGFuZCBs ZW5ndGggb2YgYnVmZmVyLgotICBDb3BpZXMgaG9zdG5hbWUgaW50byBidWZmZXIgb24gc3VjY2Vz cywgcHV0cyBudWxsIHN0cmluZyBpbiBidWZmZXIgb24KLSAgZmFpbHVyZS4KLSovCi0jaWZkZWYg QlNENDQKLSNkZWZpbmUgQlNENAotI3VuZGVmIEFUVFNWCi0jZW5kaWYgLyogQlNENDQgKi8KLQot I2lmZGVmIFNWT1JQT1NJWAotI2lmbmRlZiBCU0Q0NAotI2lmbmRlZiBhcG9sbG8KLSNpbmNsdWRl IDxzeXMvdXRzbmFtZS5oPgotI2VuZGlmIC8qIGFwb2xsbyAqLwotI2VuZGlmIC8qIEJTRDQ0ICov Ci0jZWxzZQotI2lmZGVmIEJFTExWMTAKLSNpbmNsdWRlIDx1dHNuYW1lLmg+Ci0jZW5kaWYgLyog QkVMTFYxMCAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCovCi0KLSNpZmRlZiBDS1NZU0xPRwotZXh0 ZXJuIGNoYXIgdWlkYnVmW10sICogY2xpZW50aG9zdDsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwot Ci1WT0lECi1ja2hvc3QodnZidWYsdnZsZW4pIGNoYXIgKiB2dmJ1ZjsgaW50IHZ2bGVuOyB7Ci0K LSNpZm5kZWYgTk9QVVNICi0gICAgZXh0ZXJuIGludCBub3B1c2g7Ci0jaWZuZGVmIE5PU0VSVkVS Ci0gICAgZXh0ZXJuIGludCBlbl9ob3M7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSNlbmRpZiAv KiBOT1BVU0ggKi8KLQotI2lmZGVmIHBkcDExCi0gICAgKnZ2YnVmID0gTlVMOwotI2Vsc2UgIC8q IEV2ZXJ5dGhpbmcgZWxzZSAtIHJlc3Qgb2YgdGhpcyByb3V0aW5lICovCi0KLSAgICBjaGFyICpn OwotICAgIGludCBoYXZlZnVsbCA9IDA7Ci0jaWZkZWYgVk1TCi0gICAgaW50IHg7Ci0jZW5kaWYg LyogVk1TICovCi0KLSNpZmRlZiBTVk9SUE9TSVgKLSNpZm5kZWYgQlNENDQKLSNpZm5kZWYgXzM4 NkJTRAotI2lmbmRlZiBBUE9MTE9TUjEwCi0gICAgc3RydWN0IHV0c25hbWUgaG5hbWU7Ci0jZW5k aWYgLyogQVBPTExPU1IxMCAqLwotI2VuZGlmIC8qIF8zODZCU0QgKi8KLSNlbmRpZiAvKiBCU0Q0 NCAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgaW50 IGFjMCA9IChjaGFyICopIHZ2YnVmLCBhYzEgPSAtMSwgYWMyID0gMDsKLSNlbmRpZiAvKiBkYXRh Z2VuZXJhbCAqLwotCi0jaWZuZGVmIE5PUFVTSAotICAgIGlmIChnZXRlbnYoIkNLX05PUFVTSCIp KSB7ICAgICAgICAgIC8qIE5vIHNoZWxsIGFjY2VzcyBhbGxvd2VkICovCi0gICAgICAgIG5vcHVz aCA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogb24gdGhpcyBob3N0Li4uICovCi0jaWZuZGVm IE5PU0VSVkVSCi0gICAgICAgIGVuX2hvcyA9IDA7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSAg ICB9Ci0jZW5kaWYgLyogTk9QVVNIICovCi0KLSAgICAqdnZidWYgPSBOVUw7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBIb3cgbGV0J3MgZ2V0IG91ciBob3N0IG5hbWUgLi4uICovCi0KLSNpZm5k ZWYgQkVMTFYxMCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIG5vdCBoYXZlIGdldGhv c3RuYW1lKCkgKi8KLSNpZm5kZWYgT1hPUwotI2lmZGVmIFNWT1JQT1NJWAotI2lmZGVmIEFQT0xM T1NSMTAKLSAgICBja3N0cm5jcHkodnZidWYsIkFwb2xsbyIsdnZsZW4pOwotI2Vsc2UKLSNpZmRl ZiBCU0Q0NAotICAgIGlmIChnZXRob3N0bmFtZSh2dmJ1Zix2dmxlbikgPCAwKQotICAgICAgKnZ2 YnVmID0gTlVMOwotI2Vsc2UKLSNpZmRlZiBfMzg2QlNECi0gICAgaWYgKGdldGhvc3RuYW1lKHZ2 YnVmLHZ2bGVuKSA8IDApICp2dmJ1ZiA9IE5VTDsKLSNlbHNlCi0jaWZkZWYgUU5YCi0jaWZkZWYg VENQU09DS0VUCi0gICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8IDApICp2dmJ1ZiA9 IE5VTDsKLSNlbHNlCi0gICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkgY2tzdHJuY3B5KHZ2YnVm LGhuYW1lLm5vZGVuYW1lLHZ2bGVuKTsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbHNlIC8q IFNWT1JQT1NJWCBidXQgbm90IF8zODZCU0Qgb3IgQlNENDQgKi8KLSNpZmRlZiBfX2lhNjRfXwot ICAgIGlmICh1bmFtZSgmaG5hbWUpID4gLTEpIGNrc3RybmNweSh2dmJ1ZixobmFtZS5ub2RlbmFt ZSx2dmxlbik7Ci0jZWxzZQotICAgIGlmICh1bmFtZSgmaG5hbWUpID4gLTEpIHsKLQljaGFyICog cDsKLQlwID0gaG5hbWUubm9kZW5hbWU7Ci0jaWZkZWYgVENQU09DS0VUCi0jaWZuZGVmIE5PQ0tH RVRGUUhPU1QKLQlpZiAoIWNrc3RyY2hyKHAsJy4nKSkKLQkgIHAgPSAoY2hhciAqKWNrZ2V0ZnFo b3N0bmFtZShwKTsKLSNlbmRpZiAvKiBOT0NLR0VURlFIT1NUICovCi0jZW5kaWYgLyogVENQU09D S0VUICovCi0JaWYgKCFwKSBwID0gIiI7Ci0JaWYgKCEqcCkgcCA9ICIodW5rbm93bikiOwotCWNr c3RybmNweSh2dmJ1ZixwLHZ2bGVuKTsKLSAgICB9Ci0jZW5kaWYgLyogX19pYTY0X18gKi8KLSNl bmRpZiAvKiBRTlggKi8KLSNlbmRpZiAvKiBfMzg2QlNEICovCi0jZW5kaWYgLyogQlNENDQgKi8K LSNlbmRpZiAvKiBBUE9MTE9TUjEwICovCi0jZWxzZSAvKiAhU1ZPUlBPU0lYICovCi0jaWZkZWYg QlNENAotICAgIGlmIChnZXRob3N0bmFtZSh2dmJ1Zix2dmxlbikgPCAwKSAqdnZidWYgPSBOVUw7 Ci0jZWxzZSAvKiAhQlNENCAqLwotI2lmZGVmIFZNUwotICAgIGcgPSBnZXRlbnYoIlNZUyROT0RF Iik7Ci0gICAgaWYgKGcpIGNrc3RybmNweSh2dmJ1ZixnLHZ2bGVuKTsKLSAgICB4ID0gKGludClz dHJsZW4odnZidWYpOwotICAgIGlmICh4ID4gMSAmJiB2dmJ1Zlt4LTFdID09ICc6JyAmJiB2dmJ1 Zlt4LTJdID09ICc6JykgdnZidWZbeC0yXSA9IE5VTDsKLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVy YWwKLSAgICBpZiAoc3lzKCRITkFNRSwmYWMwLCZhYzEsJmFjMikgPT0gMCkgLyogc3VjY2Vzc2Z1 bCAqLwotICAgICAgICB2dmxlbiA9IGFjMiArIDE7ICAgICAgICAgICAgICAgIC8qIGVuaCAtIGhh dmUgdG8gYWRkIG9uZSAqLwotI2Vsc2UKLSNpZmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBPUy8yICovCi0gICAgZyA9IG9zMl9nZXRob3N0bmFtZSgpOwotICAgIGlmIChn KSBja3N0cm5jcHkodnZidWYsZyx2dmxlbik7Ci0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBPU0sK LSNpZmRlZiBUQ1BTT0NLRVQKLSAgICAgICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLCB2dmxlbikg PCAwKSAqdnZidWYgPSBOVUw7Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogT1NL ICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAv KiBWTVMgKi8KLSNlbmRpZiAvKiBCU0Q0ICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0jZWxz ZSAvKiBPWE9TICovCi0gICAgLyogSWYgVENQL0lQIGlzIG5vdCBpbnN0YWxsZWQsIGdldGhvc3Ru YW1lKCkgZmFpbHMsIHVzZSB1bmFtZSgpICovCi0gICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2 bGVuKSA8IDApIHsKLSAgICAgICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkKLSAgICAgICAgICAg IGNrc3RybmNweSh2dmJ1ZixobmFtZS5ub2RlbmFtZSx2dmxlbik7Ci0gICAgICAgIGVsc2UKLSAg ICAgICAgICAgICp2dmJ1ZiA9IE5VTDsKLSAgICB9Ci0jZW5kaWYgLyogT1hPUyAqLwotI2VuZGlm IC8qIEJFTExWMTAgKi8KLSAgICBpZiAoKnZ2YnVmID09IE5VTCkgeyAgICAgICAgICAgICAgICAv KiBJZiBpdCdzIHN0aWxsIGVtcHR5ICovCi0gICAgICAgIGcgPSBnZXRlbnYoIkhPU1QiKTsgICAg ICAgICAgICAgLyogdHJ5IHRoaXMgKi8KLSAgICAgICAgaWYgKGcpIGNrc3RybmNweSh2dmJ1Zixn LHZ2bGVuKTsKLSAgICB9Ci0gICAgdnZidWZbdnZsZW4tMV0gPSBOVUw7ICAgICAgICAgICAgICAg LyogTWFrZSBzdXJlIHJlc3VsdCBpcyB0ZXJtaW5hdGVkLiAqLwotI2VuZGlmIC8qIHBkcDExICov Ci19Ci0jaWZkZWYgQlNENDQKLSN1bmRlZiBCU0Q0Ci0jZGVmaW5lIEFUVFNWCi0jZW5kaWYgLyog QlNENDQgKi8KLQotLyoKLSAgQSBTIEsgTSBPIFIgRSAgLS0gIFBvb3IgcGVyc29uJ3MgIm1vcmUi LgotICBSZXR1cm5zIDAgaWYgbm8gbW9yZSwgMSBpZiBtb3JlIHdhbnRlZC4KLSovCi1pbnQKLWFz a21vcmUoKSB7Ci0gICAgY2hhciBjOwotICAgIGludCBydiwgY3g7Ci0jaWZkZWYgSUtTRAotICAg IGV4dGVybiBpbnQgdGltZWxpbWl0OwotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBJS1NEQ09O RgotICAgIGV4dGVybiBpbnQgaWtzZGNmOwotI2VuZGlmIC8qIElLU0RDT05GICovCi0jaWZkZWYg Q0tfQVBDCi0gICAgZXh0ZXJuIGludCBhcGNzdGF0dXMsIGFwY2FjdGl2ZTsKLSNlbmRpZiAvKiBD S19BUEMgKi8KLQotI2lmZGVmIE5PSUNQCi0gICAgcmV0dXJuKDEpOwotI2Vsc2UKLSAgICBpZiAo IXhhc2ttb3JlKQotICAgICAgcmV0dXJuKDEpOwotI2lmZGVmIElLU0RDT05GCi0gICAgaWYgKGlu c2VydmVyICYmICFpa3NkY2YpCi0gICAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogSUtTRENPTkYg Ki8KLSNpZmRlZiBDS19BUEMKLSAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCB8fAotICAg ICAgICAoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgKGFwY3N0YXR1cyAmIEFQQ19OT0lOUCkp KQotICAgICAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0jaWZkZWYgVk1TCi0g ICAgaWYgKGJhdGNoKQotICAgICAgcmV0dXJuKDEpOwotI2Vsc2UKLSNpZmRlZiBVTklYCi0gICAg aWYgKGJhY2tncmQpCi0gICAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlm IC8qIFZNUyAqLwotCi0jaWZuZGVmIFZNUwotICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAg ICAgICAgICAgIC8qIEZvcmNlIENCUkVBSyBtb2RlLiAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi0g ICAgcnYgPSAtMTsKLSAgICB3aGlsZSAocnYgPCAwKSB7Ci0jaWZuZGVmIE9TMgotICAgICAgICBw cmludGYoIm1vcmU/ICIpOwotI2lmZGVmIFVOSVgKLSNpZmRlZiBOT1NFVEJVRgotICAgICAgICBm Zmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBOT1NFVEJVRiAqLwotI2VuZGlmIC8qIFVOSVggKi8K LSNlbHNlCi0gICAgICAgIHByaW50ZigibW9yZT8gIik7Ci0gICAgICAgIGZmbHVzaChzdGRvdXQp OwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIp IHsKLSAgICAgICAgICAgIGN4ID0gY21kZ2V0Yyh0aW1lbGltaXQpOwotICAgICAgICAgICAgaWYg KGN4IDwgLTEgJiYgdGltZWxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJcbj9JS1Mg aWRsZSB0aW1lb3V0IC0gR29vZGJ5ZS5cbiIpOwotICAgICAgICAgICAgICAgIGRvZXhpdChHT09E X0VYSVQsMCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGN4ID09IC0xKSB7CS8qIENvbm5lY3Rp b24gbG9zdCAqLwotICAgICAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwwKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGMgPSAoY2hhcikgY3g7Ci0gICAgICAgIH0gZWxzZSB7Ci0jZW5k aWYgLyogSUtTRCAqLwotI2lmZGVmIFZNUwotCSAgICBjb25iaW4oKGNoYXIpZXNjYXBlKTsJLyog UHJvdGVjdCBhZ2FpbnN0IEN0cmwtWiAqLwotCSAgICBjeCA9IGNvbmluYygwKTsKLQkgICAgY29u Y2IoKGNoYXIpZXNjYXBlKTsKLSNlbHNlCi0JICAgIGN4ID0gY21kZ2V0YygwKTsKLSNlbmRpZiAv KiBWTVMgKi8KLQkgICAgZGVidWcoRjEwMSwiYXNrbW9yZSBjbWRnZXRjIiwiIixjeCk7Ci0JICAg IGlmIChjeCA9PSBFT0YpIHsKLQkJZGVidWcoRjEwMCwiYXNrbW9yZSBFT0YiLCIiLDApOwotI2lm ZGVmIFZNUwotCQljID0gJ1wwMzInOwotI2Vsc2UKLQkJYyA9ICduJzsKLSNlbmRpZiAvKiBWTVMg Ki8KLQkgICAgfSBlbHNlIHsKLQkJYyA9IChjaGFyKWN4OwotCSAgICB9Ci0JICAgIGRlYnVnKEYx MDEsImFza21vcmUgYyIsIiIsYyk7Ci0KLSNpZmRlZiBJS1NECi0JfQotI2VuZGlmIC8qIElLU0Qg Ki8KLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgLyogWWVzICovCi0JICBjYXNlICdw JzogY2FzZSAnUCc6IGNhc2UgJ2cnOiBjYXNlICdHJzogLyogUHJvY2VlZCBvciBHbyAqLwotCSAg ICB4YXNrbW9yZSA9IDA7Ci0JICAgIC8qIGZhbGwgdGhydSBvbiBwdXJwb3NlICovCi0KLSAgICAg ICAgICBjYXNlIFNQOiBjYXNlICd5JzogY2FzZSAnWSc6IGNhc2UgMDEyOiAgY2FzZSAwMTU6Ci0j aWZkZWYgT1NLCi0gICAgICAgICAgICB3cml0ZSgxLCAiXDAxNSAgICAgIFwwMTUiLCBzaXplb2Yg IlwwMTUgICAgICBcMDE1IiAtIDEpOwotI2Vsc2UKLSAgICAgICAgICAgIHByaW50ZigiXDAxNSAg ICAgIFwwMTUiKTsKLSNlbmRpZiAvKiBPU0sgKi8KLSAgICAgICAgICAgIHJ2ID0gMTsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgIC8qIE5vICovCi0gICAgICAgICAgY2FzZSAnbic6IGNh c2UgJ04nOiBjYXNlICdxJzogY2FzZSAnUSc6Ci0jaWZkZWYgT1NLCi0gICAgICAgICAgICBwcmlu dGYoIlxuIik7Ci0jZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJcMDE1XDAxMiIpOwotI2VuZGlm IC8qIE9TSyAqLwotICAgICAgICAgICAgcnYgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0JICBj YXNlICdcMDAzJzoKLQkgIGNhc2UgJ1wwMDQnOgotCSAgY2FzZSAnXDAzMic6Ci0jaWZkZWYgT1NL Ci0JICAgIHByaW50ZigiXiVjLi4uXG4iLCAoYyArIDAxMDApKTsKLSNlbHNlCi0JICAgIHByaW50 ZigiXiVjLi4uXDAxNVwwMTIiLCAoYyArIDAxMDApKTsKLSNlbmRpZiAvKiBPU0sgKi8KLQkgICAg cnYgPSAwOwotCSAgICBicmVhazsKLSAgICAgICAgICAvKiBJbnZhbGlkIGFuc3dlciAqLwotICAg ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJhc2ttb3JlIiwiaW52YWxp ZCBhbnN3ZXIiLGMpOwotICAgICAgICAgICAgcHJpbnRmKCJZIG9yIHNwYWNlLWJhciBmb3IgeWVz LCBOIGZvciBubywgRyB0byBzaG93IHRoZSByZXN0XG4iKTsKLSAgICAgICAgICAgIGNvbnRpbnVl OwotICAgICAgICB9Ci0jaWZkZWYgT1MyCi0gICAgICAgIHByaW50ZigiXHIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcciIpOwotICAgICAgICBmZmx1 c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0gICAgcmV0dXJuKHJ2KTsKLSNl bmRpZiAvKiBOT0lDUCAqLwotfQotCi0vKiAgVCBSIEEgUCAgLS0gIFRlcm1pbmFsIGludGVycnVw dCBoYW5kbGVyICovCi0KLVNJR1RZUAotI2lmZGVmIENLX0FOU0lDCi10cmFwKGludCBzaWcpCi0j ZWxzZQotdHJhcChzaWcpIGludCBzaWc7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRyYXAg Ki8gewotICAgIGV4dGVybiBpbnQgYl9zYXZlLCBmX3NhdmU7Ci0jaWZuZGVmIE5PSUNQCi0gICAg ZXh0ZXJuIGludCB0aW1lbGltaXQ7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSNpZmRlZiBPUzIKLSAg ICBleHRlcm4gdW5zaWduZWQgbG9uZyBzdGFydGZsYWdzOwotI2lmbmRlZiBOT1NFVEtFWQotICAg IGV4dGVybiBpbnQgb3MyZ2tzOwotI2VuZGlmIC8qIE5PU0VUS0VZICovCi0gICAgaW50IGk7Ci0j ZW5kaWYgLyogT1MyICovCi0jaWZuZGVmIE5PU1BMCi0gICAgZXh0ZXJuIGludCBpX2FjdGl2ZSwg aW5zdGF0dXM7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZmRlZiBWTVMKLSAgICBpbnQgaTsgRklM RSAqZjsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICBleHRlcm4gaW50IHpjaGtvZCwgemNoa2lkOwot I2lmbmRlZiBOT1NQTAotICAgIGV4dGVybiBpbnQgdW5rbWFjcm87Ci0jZW5kaWYgLyogTk9TUEwg Ki8KLQotICAgIGRlYm9rID0gMTsKLSNpZmRlZiBOVFNJRwotICAgIGNvbm5vaSgpOwotI2VuZGlm IC8qIE5UU0lHICovCi0jaWZkZWYgX19FTVhfXwotICAgIHNpZ25hbChTSUdJTlQsIFNJR19BQ0sp OwotI2VuZGlmCi0jaWZkZWYgR0VNRE9TCi0vKiBHRU0gaXMgbm90IHJlZW50cmFudCwgbm8gaS9v IGZyb20gaW50ZXJydXB0IGxldmVsICovCi0gICAgY2tsb25nam1wKGNtamJ1ZiwxKTsgICAgICAg ICAgICAgICAgLyogSnVtcCBiYWNrIHRvIHBhcnNlciBub3chICovCi0jZW5kaWYgLyogR0VNRE9T ICovCi0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAwLCIqKioq KioqKioqKioqKioqKioqKioiLCIiLDApOwotCWlmIChzaWcgPT0gU0lHSU5UKQotCSAgZGVidWco RjEwMSwidHJhcCBjYXVnaHQgU0lHSU5UIiwiIixzaWcpOwotCWVsc2UgCi0JICBkZWJ1ZyhGMTAx LCJ0cmFwIGNhdWdodCBzaWduYWwiLCIiLHNpZyk7Ci0JZGVidWcoRjEwMCwiKioqKioqKioqKioq KioqKioqKioqIiwiIiwwKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIE9T MgotICAgIGlmICggc2lnID09IFNJR0JSRUFLICYmIChzdGFydGZsYWdzICYgMTI4KSApIHsKLSAg ICAgICAgZGVidWcoRjEwMSwidHJhcCBpZ25vcmluZyBTSUdCUkVBSyIsIiIsc2lnKTsKLSAgICAg ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBOT0lDUAotICAg IHRpbWVsaW1pdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIEluIGNhc2UgdGltZWQgQVNL IGludGVycnVwdGVkICovCi0jaWZuZGVmIE5PU1BMCi0gICAgdW5rbWFjcm8gPSAwOwkJCS8qIE9y IE9OX1VOS05PV05fTUFDUk8gaW50ZXJydXB0ZWQuLiAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0j ZW5kaWYgLyogTk9JQ1AgKi8KLSAgICB6Y2hrb2QgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBPciBmaWxlIGV4cGFuc2lvbiBpbnRlcnJ1cHRlZC4uLiAqLwotICAgIHpjaGtpZCA9IDA7 Ci0gICAgaW50ZXJydXB0ZWQgPSAxOwotCi0gICAgaWYgKHdoYXQgJiBXX0NPTk5FQ1QpIHsJCS8q IEFyZSB3ZSBpbiBDT05ORUNUIG1vZGU/ICovCi0vKgotICBUaGUgSFAgd29ya3N0YXRpb24gUmVz ZXQga2V5IHNlbmRzIHNvbWUga2luZCBvZiB1ZWJlci1TSUdJTlQgdGhhdCBjYW4gbm90Ci0gIGJl IFNJR19JR05vcmVkLCBzbyB3ZSB3aW5kIHVwIGhlcmUgc29tZWhvdyAoZXZlbiB0aG91Z2ggdGhp cyBpcyAqbm90KiB0aGUKLSAgY3VycmVudCBTSUdJTlQgaGFuZGxlcikuICBKdXN0IHJldHVybi4K LSovCi0gICAgICAgIGRlYnVnKEYxMDEsInRyYXA6IFNJR0lOVCBjYXVnaHQgZHVyaW5nIENPTk5F Q1QiLCIiLHNpZyk7Ci0gICAgICAgIFNJR1JFVFVSTjsKLSAgICB9Ci0jaWZuZGVmIE5PU1BMCi0g ICAgaWYgKGlfYWN0aXZlKSB7ICAgICAgICAgICAgICAgICAgICAgLyogSU5QVVQgY29tbWFuZCB3 YXMgYWN0aXZlPyAqLwotICAgICAgICBpX2FjdGl2ZSA9IDA7ICAgICAgICAgICAgICAgICAgIC8q IE5vdCBhbnkgbW9yZS4uLiAqLwotICAgICAgICBpbnN0YXR1cyA9IElOUF9VSTsgICAgICAgICAg ICAgIC8qIElOUFVUIHN0YXR1cyA9IFVzZXIgSW50ZXJydXB0ZWQgKi8KLSAgICB9Ci0jZW5kaWYg LyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICBmdHJlc2V0KCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSZXN0b3JlIGdsb2JhbCBwcm90b2NvbCBzZXR0aW5ncyAqLwotICAg IGJpbmFyeSA9IGJfc2F2ZTsgICAgICAgICAgICAgICAgICAgIC8qIFRoZW4gcmVzdG9yZSB0aGVz ZSAqLwotICAgIGZuY252ICA9IGZfc2F2ZTsKLSAgICBieWVfYWN0aXZlID0gMDsKLSAgICBkaXJh Y3RpdmUgPSAwOwotICAgIGNkYWN0aXZlID0gMDsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICB6 Y2xvc2UoWklGSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSB3ZXJlIHRyYW5zZmVy cmluZyBhIGZpbGUsICovCi0gICAgemNsb3NlKFpPRklMRSk7ICAgICAgICAgICAgICAgICAgICAg LyogY2xvc2UgaXQuICovCi0jaWZuZGVmIE5PSUNQCi0gICAgY21kc3F1byhjbWRfcXVvdGluZyk7 ICAgICAgICAgICAgICAgLyogSWYgY29tbWFuZCBxdW90aW5nIHdhcyB0dXJuZWQgb2ZmICovCi0j aWZkZWYgQ0tMRUFSTgotICAgIHsKLQlleHRlcm4gRklMRSAqIGxlYXJuZnA7Ci0JZXh0ZXJuIGlu dCBsZWFybmluZzsKLQlpZiAobGVhcm5mcCkgewotCSAgICBmY2xvc2UobGVhcm5mcCk7Ci0JICAg IGxlYXJuZnAgPSBOVUxMOwotCSAgICBsZWFybmluZyA9IDA7Ci0JfQotICAgIH0KLSNlbmRpZiAv KiBDS0xFQVJOICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLSNpZmRlZiBDS19BUEMKLSAgICBkZWxt YWMoIl9hcGNfY29tbWFuZHMiLDEpOwotICAgIGFwY2FjdGl2ZSA9IEFQQ19JTkFDVElWRTsKLSNl bmRpZiAvKiBDS19BUEMgKi8KLQotI2lmZGVmIFZNUwotLyoKLSAgRml4IHRlcm1pbmFsLgotKi8K LSAgICBpZiAoZnRfd2luKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBjdXJzZXMgd2lu ZG93IG9wZW4gKi8KLSAgICAgICAgZGVidWcoRjEwMCwiXkMgdHJhcCgpIGN1cnNlcyIsIiIsMCk7 Ci0gICAgICAgIHh4c2NyZWVuKFNDUl9DVywwLDBMLCIiKTsgICAgICAgLyogQ2xvc2UgaXQgKi8K LSAgICAgICAgY29ucmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHRlcm1p bmFsICovCi0gICAgICAgIGkgPSBwcmludGYoIl5DLi4uIik7ICAgICAgICAgICAgLyogRWNobyBe QyB0byBzdGFuZGFyZCBvdXRwdXQgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBjb25yZXMoKTsK LSAgICAgICAgaSA9IHByaW50ZigiXkMuLi5cbiIpOyAgICAgICAgICAvKiBFY2hvIF5DIHRvIHN0 YW5kYXJkIG91dHB1dCAqLwotICAgIH0KLSAgICBpZiAoaSA8IDEgJiYgZmVycm9yKHN0ZG91dCkp IHsgICAgICAvKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgKi8KLSAgICAgICAgZGVidWcoRjEwMCwi XkMgdHJhcCgpIGVycm9yIiwiIiwwKTsKLSAgICAgICAgZmNsb3NlKHN0ZG91dCk7ICAgICAgICAg ICAgICAgICAvKiBjbG9zZSBzdGFuZGFyZCBvdXRwdXQgKi8KLSAgICAgICAgZiA9IGZvcGVuKGRm dHR5LCAidyIpOyAgICAgICAgICAvKiBvcGVuIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCAqLwot ICAgICAgICBpZiAoZikgc3Rkb3V0ID0gZjsgICAgICAgICAgICAgIC8qIGFuZCBtYWtlIGl0IHN0 YW5kYXJkIG91dHB1dCAqLwotICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAgICAgICAg IC8qIGFuZCBlY2hvIHRoZSBeQyBhZ2Fpbi4gKi8KLSAgICB9Ci0jZWxzZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTm90IFZNUyAqLwotI2lmZGVmIFNUUkFUVVMKLSAgICBj b25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgY29uc29sZSBiYWNrIHRv IG5vcm1hbCBtb2RlICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2lmbmRlZiBOT1hGRVIKLSAg ICBpZiAoZnRfd2luKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBjdXJzZXMgd2luZG93 IG9wZW4sICovCi0gICAgICAgIGRlYnVnKEYxMDAsIl5DIHRyYXAoKSBjdXJzZXMiLCIiLDApOwot ICAgICAgICB4eHNjcmVlbihTQ1JfQ1csMCwwTCwiIik7CS8qIGNsb3NlIGl0LiAqLwotICAgICAg ICBwcmludGYoIl5DLi4uIik7ICAgICAgICAgICAgICAgIC8qIEVjaG8gXkMgdG8gc3RhbmRhcmQg b3V0cHV0ICovCi0gICAgfSBlbHNlIHsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgcHJp bnRmKCJeQy4uLlxuIik7Ci0jaWZuZGVmIE5PWEZFUgotICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLSNlbmRpZiAvKiBWTVMgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIGNvbm5vaV9tdCgp OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtpbGwgYXN5bmNoIHRhc2sgdGhhdCBsaXN0ZW5z IHRvICovCi0gICAgdHRpbW9mZigpOwotICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHRoZSBrZXlib2FyZCAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0KLSNp Zm5kZWYgTk9DQ1RSQVAKLS8qICBUaGlzIGlzIHN0dXBpZCAtLSBldmVyeSB2ZXJzaW9uIHNob3Vs ZCBoYXZlIHR0aW1vZmYoKS4uLiAgKi8KLSNpZmRlZiBVTklYCi0gICAgdHRpbW9mZigpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8K LSNlbHNlCi0jaWZkZWYgT1NLCi0gICAgdHRpbW9mZigpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KLSNlbHNlCi0jaWZkZWYgU1RS QVRVUwotICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2Zm IGFueSB0aW1lciBpbnRlcnJ1cHRzICovCi0jZWxzZQotI2lmZGVmIE9TMgotI2lmbmRlZiBOT1NF VEtFWQotICAgIG9zMmdrcyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gYmFj ayBvbiBrZXljb2RlIG1hcHBpbmcgICovCi0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLSNpZm5kZWYg Tk9MT0NBTAotICAgIGZvciAoaSA9IDA7IGkgPCBWTlVNOyBpKyspCi0gICAgICBWc2NyblJlc2V0 UG9wdXAoaSk7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmZGVmIFRDUFNPQ0tFVAotI2lmZGVm IE5UCi0gICAgLyogV1NBSXNCbG9ja2luZygpIHJldHVybnMgRkFMU0UgaW4gV2luOTUgZHVyaW5n IGEgYmxvY2tpbmcgYWNjZXB0IGNhbGwgKi8KLSAgICBpZiAoIFdTQVNhZmVUb0NhbmNlbCAvKiAm JiBXU0FJc0Jsb2NraW5nKCkgKi8gKSB7Ci0gICAgICAgIFdTQUNhbmNlbEJsb2NraW5nQ2FsbCgp OwotICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2lmZGVm IENLX05FVEJJT1MKLSAgICBOQ0JDYW5jZWxPdXRzdGFuZGluZygpOwotI2VuZGlmIC8qIENLX05F VEJJT1MgKi8KLSAgICB0dGltb2ZmKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJu IG9mZiBhbnkgdGltZXIgaW50ZXJydXB0cyAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICB0dGlt b2ZmKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50 ZXJydXB0cyAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8q IFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZmRl ZiBORVRQVFkKLSAgICAvKiBDbGVhbiB1cCBDdHJsLUMgb3V0IG9mIFJFRElSRUNUIG9yIGV4dGVy bmFsIHByb3RvY29sICovCi0gICAgewotCWV4dGVybiBQSURfVCBwdHlfZm9ya19waWQ7Ci0JZXh0 ZXJuIGludCBwdHlfbWFzdGVyX2ZkLCBwdHlfc2xhdmVfZmQ7Ci0JaW50IHg7Ci0KLQlzaWduYWwo U0lHQ0hMRCxTSUdfSUdOKTsJLyogV2UgZG9uJ3Qgd2FudCB0aGlzIGFueSBtb3JlICovCi0KLQlk ZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9tYXN0ZXJfZmQiLCIiLHB0eV9tYXN0ZXJfZmQpOwotCWlmIChw dHlfbWFzdGVyX2ZkID4gMikgewotCSAgICB4ID0gY2xvc2UocHR5X21hc3Rlcl9mZCk7Ci0JICAg IGRlYnVnKEYxMDEsInRyYXAgcHR5X21hc3Rlcl9mZCBjbG9zZSIsIiIseCk7Ci0JfQotCXB0eV9t YXN0ZXJfZmQgPSAtMTsKLQlkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9zbGF2ZV9mZCIsIiIscHR5X3Ns YXZlX2ZkKTsKLQlpZiAocHR5X3NsYXZlX2ZkID4gMikgewotCSAgICB4ID0gY2xvc2UocHR5X3Ns YXZlX2ZkKTsKLQkgICAgZGVidWcoRjEwMSwidHJhcCBwdHlfc2xhdmVfZmQgY2xvc2UiLCIiLHgp OwotCX0KLQlwdHlfc2xhdmVfZmQgPSAtMTsKLQlkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9mb3JrX3Bp ZCIsIiIscHR5X2ZvcmtfcGlkKTsKLQlpZiAocHR5X2ZvcmtfcGlkID4gMCkgewotCSAgICB4ID0g a2lsbChwdHlfZm9ya19waWQsMCk7CS8qIFNlZSBpZiB0aGUgZm9yayBpcyByZWFsbHkgdGhlcmUg Ki8KLQkgICAgZGVidWcoRjExMSwidHJhcCBwdHlfZm9ya19waWQga2lsbCAwIGVycm5vIixja2l0 b2EoeCksZXJybm8pOwotCSAgICBpZiAoeCA9PSAwKSB7CQkvKiBTZWVtcyB0byBiZSBhY3RpdmUg Ki8KLQkJeCA9IGtpbGwocHR5X2ZvcmtfcGlkLFNJR0hVUCk7IC8qIEFzayBpdCB0byBjbGVhbiB1 cCAmIGV4aXQgKi8KLQkJZGVidWcoRjEwMSwidHJhcCBwdHlfZm9ya19waWQga2lsbCBTSUdIVVAi LCIiLHgpOwotCQltc2xlZXAoMTAwKTsKLQkJZXJybm8gPSAwOwotCQl4ID0ga2lsbChwdHlfZm9y a19waWQsMCk7IC8qIElzIGl0IHN0aWxsIHRoZXJlPyAqLwotCQlpZiAoeCA9PSAwCi0jaWZkZWYg RVNSQ0gKLQkJICAgIC8qIFRoaXMgbW9kdWxlIGlzIG5vdCBhbHdheXMgZXhwb3NlZCB0byA8ZXJy bm8uaD4gKi8KLQkJICAgIHx8IGVycm5vICE9IEVTUkNICi0jZW5kaWYJLyogRVNSQ0ggKi8KLQkJ ICAgICkgewotCQkgICAgeCA9IGtpbGwocHR5X2ZvcmtfcGlkLFNJR0tJTEwpOwotCQkgICAgZGVi dWcoRjEwMSwidHJhcCBwdHlfZm9ya19waWQga2lsbCBTSUdLSUxMIiwiIix4KTsKLQkJfQotCSAg ICB9Ci0JICAgIHB0eV9mb3JrX3BpZCA9IC0xOwotCX0KLSAgICB9Ci0jZW5kaWYJLyogTkVUUFRZ ICovCi0KLSNpZmRlZiBPU0sKLSAgICBzaWdtYXNrKC0xKTsKLS8qCi0gIFdlIGFyZSBpbiBhbiBp bnRlcmNlcHQgcm91dGluZSBidXQgZG8gbm90IHBlcmZvcm0gYSBGJFJURSAoZG9uZSBpbXBsaWNp dGx5Ci0gIGJ5IHJ0cykuICBXZSBoYXZlIHRvIGRlY3JlbWVudCB0aGUgc2lnbWFzayBhcyBGJFJU RSBkb2VzLiAgV2FybmluZzogbG9uZ2p1bXAKLSAgb25seSByZXN0b3JlcyB0aGUgY3B1IHJlZ2lz dGVycywgTk9UIHRoZSBmcHUgcmVnaXN0ZXJzLiAgU28gZG9uJ3QgdXNlIGZwdSBhdAotICBhbGwg b3IgYXQgbGVhc3QgZG9uJ3QgdXNlIGNvbW1vbiBmcHUgKGRvdWJsZSBvciBmbG9hdCkgcmVnaXN0 ZXIgdmFyaWFibGVzLgotKi8KLSNlbmRpZiAvKiBPU0sgKi8KLQotI2lmZGVmIE5UU0lHCi0gICAg UG9zdEN0cmxDU2VtKCk7Ci0jZWxzZSAvKiBOVFNJRyAqLwotICAgIGRlYnVnKEYxMDAsInRyYXAg YWJvdXQgdG8gbG9uZ2ptcCIsIiIsMCk7Ci0jaWZkZWYgTlQKLSAgICBja2xvbmdqbXAoY2tqYWRk cihjbWpidWYpLDEpOwotI2Vsc2UgLyogTlQgKi8KLSAgICBja2xvbmdqbXAoY21qYnVmLDEpOwot I2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogTlRTSUcgKi8KLSNlbHNlIC8qIE5PQ0NUUkFQICov Ci0vKiBObyBDdHJsLUMgdHJhcCwganVzdCBleGl0LiAqLwotI2lmZGVmIENLX0NVUlNFUyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEN1cnNlcyBzdXBwb3J0PyAqLwotICAgIHh4c2NyZWVuKFND Ul9DVywwLDBMLCIiKTsgICAgICAgICAgIC8qIENsb3NlIGN1cnNlcyB3aW5kb3cgKi8KLSNlbmRp ZiAvKiBDS19DVVJTRVMgKi8KLSAgICBkb2V4aXQoQkFEX0VYSVQsd2hhdCk7ICAgICAgICAgICAg ICAvKiBFeGl0IHBvb3JseSAqLwotI2VuZGlmIC8qIE5PQ0NUUkFQICovCi0gICAgU0lHUkVUVVJO OwotfQotCi0KLS8qICBDIEsgXyBUIEkgTSBFICAtLSBSZXR1cm5zIHBvaW50ZXIgdG8gY3VycmVu dCB0aW1lLiAqLwotCi1jaGFyICoKLWNrX3RpbWUoKSB7Ci0gICAgc3RhdGljIGNoYXIgdGJ1Zlsx MF07Ci0gICAgY2hhciAqcDsKLSAgICBpbnQgeDsKLQotICAgIHp0aW1lKCZwKTsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qICJUaHUgRmViICA4IDEyOjAwOjAwIDE5OTAiICovCi0gICAgaWYg KCFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGlrZSBhc2N0aW1lKCkhICovCi0g ICAgICByZXR1cm4oIiIpOwotICAgIGlmICgqcCkgewotICAgICAgICBmb3IgKHggPSAxMTsgeCA8 IDE5OyB4KyspICAgICAgIC8qIGNvcHkgaGg6bW06c3MgKi8KLSAgICAgICAgICB0YnVmW3ggLSAx MV0gPSBwW3hdOyAgICAgICAgICAvKiB0byB0YnVmICovCi0gICAgICAgIHRidWZbOF0gPSBOVUw7 ICAgICAgICAgICAgICAgICAgLyogdGVybWluYXRlICovCi0gICAgfQotICAgIHJldHVybih0YnVm KTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCByZXR1cm4gaXQgKi8KLX0KLQotLyogIEMg QyBfIEMgTCBFIEEgTiAgLS0gIENsZWFudXAgYWZ0ZXIgdGVybWluYWwgaW50ZXJydXB0IGhhbmRs ZXIgKi8KLQotI2lmZGVmIEdFTURPUwotaW50Ci1jY19jbGVhbigpIHsKLSAgICB6Y2xvc2UoWklG SUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSB3ZXJlIHRyYW5zZmVycmluZyBhIGZp bGUsICovCi0gICAgemNsb3NlKFpPRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyogY2xvc2Ug aXQuICovCi0gICAgcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgICAgICAgICAgICAgLyogTm90IFZN Uywgbm8gcHJvYmxlbS4uLiAqLwotfQotI2VuZGlmIC8qIEdFTURPUyAqLwotCi0KLS8qICBTIFQg UCBUIFIgQSBQIC0tIEhhbmRsZSBTSUdUU1RQIChzdXNwZW5kKSBzaWduYWxzICovCi0KLVNJR1RZ UAotI2lmZGVmIENLX0FOU0lDCi1zdHB0cmFwKGludCBzaWcpCi0jZWxzZQotc3RwdHJhcChzaWcp IGludCBzaWc7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHN0cHRyYXAgKi8gewotCi0jaWZu ZGVmIE5PSkMKLSAgICBpbnQgeDsgZXh0ZXJuIGludCBjbWZsZ3M7Ci0gICAgZGVidWcoRjEwMSwi c3RwdHJhcCgpIGNhdWdodCBzaWduYWwiLCIiLHNpZyk7Ci0gICAgaWYgKCF4c3VzcGVuZCkgewot ICAgICAgICBwcmludGYoIlxyXG5zdXNwZW5kIGRpc2FibGVkXHJcbiIpOwotI2lmbmRlZiBOT0lD UAotICAgICAgICBpZiAod2hhdCAmIFdfQ09NTUFORCkgewkJLyogSWYgd2Ugd2VyZSBwYXJzaW5n IGNvbW1hbmRzICovCi0gICAgICAgICAgICBwcm9tcHQoeHhzdHJpbmcpOyAgICAgICAgICAgLyog cmVpc3N1ZSB0aGUgcHJvbXB0IGFuZCBwYXJ0aWFsICovCi0gICAgICAgICAgICBpZiAoIWNtZmxn cykgICAgICAgICAgICAgICAgLyogY29tbWFuZCAoaWYgYW55KSAqLwotICAgICAgICAgICAgICBw cmludGYoIiVzIixjbWRidWYpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICB9 IGVsc2UgewotICAgICAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0 IHRoZSBjb25zb2xlICovCi0jaWZuZGVmIE9TMgotICAgICAgICAvKiBGbHVzaCBwZW5kaW5nIG91 dHB1dCBmaXJzdCwgaW4gY2FzZSB3ZSBhcmUgY29udGludWVkICovCi0gICAgICAgIC8qIGluIHRo ZSBiYWNrZ3JvdW5kLCB3aGljaCBjb3VsZCBtYWtlIHVzIGJsb2NrICovCi0gICAgICAgIGZmbHVz aChzdGRvdXQpOwotCi0gICAgICAgIHggPSBwc3VzcGVuZCh4c3VzcGVuZCk7CQkvKiBUcnkgdG8g c3VzcGVuZC4gKi8KLSAgICAgICAgaWYgKHggPCAwKQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAg ICAgIHByaW50ZigiSm9iIGNvbnRyb2wgbm90IHN1cHBvcnRlZFxyXG4iKTsKLSAgICAgICAgY29u aW50KHRyYXAsc3RwdHJhcCk7ICAgICAgICAgICAvKiBSZWFybSB0aGUgdHJhcC4gKi8KLSAgICAg ICAgZGVidWcoRjEwMCwic3RwdHJhcCBiYWNrIGZyb20gc3VzcGVuZCIsIiIsMCk7Ci0gICAgICAg IHN3aXRjaCAod2hhdCkgewotICAgICAgICAgIGNhc2UgV19DT05ORUNUOiAgICAgICAgICAgICAg IC8qIElmIHN1c3BlbmRlZCBkdXJpbmcgQ09OTkVDVD8gKi8KLSAgICAgICAgICAgIGNvbmJpbigo Y2hhcillc2NhcGUpOyAgICAgICAvKiBwdXQgY29uc29sZSBiYWNrIGluIGJpbmFyeSBtb2RlICov Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJzdHB0cmFwIFdfQ09OTkVDVCIsIiIsMCk7Ci0gICAg ICAgICAgICBicmVhazsKLSNpZm5kZWYgTk9JQ1AKLSAgICAgICAgICBjYXNlIFdfQ09NTUFORDog ICAgICAgICAgICAgICAvKiBTdXNwZW5kZWQgaW4gY29tbWFuZCBtb2RlICovCi0gICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJzdHB0cmFwIFdfQ09NTUFORCBwZmxhZyIsIiIscGZsYWcpOwotICAgICAg ICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgIC8qIFB1dCBiYWNrIENCUkVBSyB0dHkg bW9kZSAqLwotICAgICAgICAgICAgaWYgKHBmbGFnKSB7ICAgICAgICAgICAgICAgIC8qIElmIGNv bW1hbmQgcGFyc2luZyB3YXMgKi8KLSAgICAgICAgICAgICAgICBwcm9tcHQoeHhzdHJpbmcpOyAg ICAgICAvKiByZWlzc3VlIHRoZSBwcm9tcHQgYW5kIHBhcnRpYWwgKi8KLSAgICAgICAgICAgICAg ICBpZiAoIWNtZmxncykgICAgICAgICAgICAvKiBjb21tYW5kIChpZiBhbnkpICovCi0gICAgICAg ICAgICAgICAgICBwcmludGYoIiVzIixjbWRidWYpOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAg ICAgICAgICAgICAgICAvKiBBbGwgb3RoZXIgY2FzZXMuLi4gKi8KLSAgICAgICAgICAgIGRlYnVn KEYxMDAsInN0cHRyYXAgZGVmYXVsdCIsIiIsMCk7Ci0gICAgICAgICAgICBjb25jYigoY2hhcill c2NhcGUpOyAgICAgICAgLyogUHV0IGl0IGJhY2sgaW4gQ0JSRUFLIG1vZGUgKi8KLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE5PSkMgKi8KLSAgICBTSUdS RVRVUk47Ci19Ci0KLSNpZmRlZiBUTE9HCi0jZGVmaW5lIFRCVUZMIDMwMAotCi0vKiAgVCBMIE8g RyAgLS0gIExvZyBhIHJlY29yZCBpbiB0aGUgdHJhbnNhY3Rpb24gZmlsZSAgKi8KLS8qCi0gQ2Fs bCB3aXRoIGEgZm9ybWF0IGFuZCAzIGFyZ3VtZW50czogdHdvIHN0cmluZ3MgYW5kIGEgbnVtYmVy OgotICAgZiAgICAgLSBGb3JtYXQsIGEgYml0IHN0cmluZyBpbiByYW5nZSAwLTcsIGJpdCB4IGlz IG9uLCBhcmcgI3ggaXMgcHJpbnRlZC4KLSAgIHMxLHMyIC0gU3RyaW5nIGFyZ3VtZW50cyAwIGFu ZCAxLgotICAgbiAgICAgLSBMb25nLCBhcmd1bWVudCAyLgotKi8KLVZPSUQKLSNpZmRlZiBDS19B TlNJQwotZG90bG9nKGludCBmLCBjaGFyICpzMSwgY2hhciAqczIsIENLX09GRl9UIG4pCi0jZWxz ZQotZG90bG9nKGYsczEsczIsbikgaW50IGY7IENLX09GRl9UIG47IGNoYXIgKnMxLCAqczI7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRvdGxvZyAqLyB7Ci0gICAgc3RhdGljIGNoYXIgc1tU QlVGTF07Ci0gICAgZXh0ZXJuIGludCB0bG9nZm10OwotICAgIGNoYXIgKnNwID0gczsgaW50IHg7 Ci0gICAgaWYgKCFzMSkgczEgPSAiIjsKLSAgICBpZiAoIXMyKSBzMiA9ICIiOwotCi0gICAgaWYg KCF0cmFsb2cpIHJldHVybjsgICAgICAgICAgICAgICAgLyogSWYgbm8gdHJhbnNhY3Rpb24gbG9n LCBkb24ndCAqLwotICAgIGlmICh0bG9nZm10ICE9IDEpIHJldHVybjsKLSAgICBzd2l0Y2ggKGYp IHsKLSAgICAgIGNhc2UgRjAwMDogICAgICAgICAgICAgICAgICAgICAgICAvKiAwIChzcGVjaWFs KSAiczEgbiBzMiIgICovCi0gICAgICAgIGlmICgoaW50KXN0cmxlbihzMSkgKyAoaW50KXN0cmxl bihzMikgKyAxNSA+IFRCVUZMKQotICAgICAgICAgIHNwcmludGYoc3AsIj9ULUxvZyBzdHJpbmcg dG9vIGxvbmciKTsKLSAgICAgICAgZWxzZQotCSAgc3ByaW50ZihzcCwiJXMgJXMgJXMiLHMxLGNr ZnN0b2EobiksczIpOwotICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9 IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGMDAxOiAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDEsICIgbiIgKi8KLSAgICAgICAgc3ByaW50ZihzcCwiICVzIixja2ZzdG9hKG4pKTsK LSAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAwKSB0cmFsb2cgPSAwOwotICAgICAgICBi cmVhazsKLSAgICAgIGNhc2UgRjAxMDogICAgICAgICAgICAgICAgICAgICAgICAvKiAyLCAiW3My XSIgKi8KLSAgICAgICAgeCA9IChpbnQpc3RybGVuKHMyKTsKLSAgICAgICAgaWYgKHMyW3hdID09 ICdcbicpIHMyW3hdID0gJ1wwJzsKLSAgICAgICAgaWYgKHggKyA2ID4gVEJVRkwpCi0gICAgICAg ICAgc3ByaW50ZihzcCwiP1N0cmluZyB0b28gbG9uZyIpOwotICAgICAgICBlbHNlIHNwcmludGYo c3AsIlslc10iLHMyKTsKLSAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUsIiIpIDwgMCkgdHJhbG9n ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEYwMTE6ICAgICAgICAgICAgICAgICAg ICAgICAgLyogMywgIltzMl0gbiIgKi8KLSAgICAgICAgeCA9IChpbnQpc3RybGVuKHMyKTsKLSAg ICAgICAgaWYgKHMyW3hdID09ICdcbicpIHMyW3hdID0gJ1wwJzsKLSAgICAgICAgaWYgKHggKyA2 ID4gVEJVRkwpCi0gICAgICAgICAgc3ByaW50ZihzcCwiP1N0cmluZyB0b28gbG9uZyIpOwotICAg ICAgICBlbHNlIHNwcmludGYoc3AsIlslc10gJXMiLHMyLGNrZnN0b2EobikpOwotICAgICAgICBp ZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAg ICAgY2FzZSBGMTAwOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQsICJzMSIgKi8KLSAgICAg ICAgaWYgKHpzb3V0bChaVEZJTEUsczEpIDwgMCkgdHJhbG9nID0gMDsKLSAgICAgICAgYnJlYWs7 Ci0gICAgICBjYXNlIEYxMDE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNSwgInMxOiBuIiAq LwotICAgICAgICBpZiAoKGludClzdHJsZW4oczEpICsgMTUgPiBUQlVGTCkKLSAgICAgICAgICBz cHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7Ci0gICAgICAgIGVsc2Ugc3ByaW50ZihzcCwi JXM6ICVzIixzMSxja2ZzdG9hKG4pKTsKLSAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAw KSB0cmFsb2cgPSAwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRjExMDogICAgICAgICAg ICAgICAgICAgICAgICAvKiA2LCAiczEgczIiICovCi0gICAgICAgIHggPSAoaW50KXN0cmxlbihz Mik7Ci0gICAgICAgIGlmIChzMlt4XSA9PSAnXG4nKSBzMlt4XSA9ICdcMCc7Ci0gICAgICAgIGlm ICgoaW50KXN0cmxlbihzMSkgKyB4ICsgNCA+IFRCVUZMKQotICAgICAgICAgIHNwcmludGYoc3As Ij9TdHJpbmcgdG9vIGxvbmciKTsKLSAgICAgICAgZWxzZQotCSAgc3ByaW50ZihzcCwiJXMlcyVz IixzMSwoKCpzMiA9PSAnOicpID8gIiIgOiAiICIpLHMyKTsKLSAgICAgICAgaWYgKHpzb3V0bCha VEZJTEUscykgPCAwKSB0cmFsb2cgPSAwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRjEx MTogICAgICAgICAgICAgICAgICAgICAgICAvKiA3LCAiczEgczI6IG4iICovCi0gICAgICAgIHgg PSAoaW50KXN0cmxlbihzMik7Ci0gICAgICAgIGlmIChzMlt4XSA9PSAnXG4nKSBzMlt4XSA9ICdc MCc7Ci0gICAgICAgIGlmICgoaW50KXN0cmxlbihzMSkgKyB4ICsgMTUgPiBUQlVGTCkKLSAgICAg ICAgICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7Ci0gICAgICAgIGVsc2UKLQkgIHNw cmludGYoc3AsIiVzJXMlczogJXMiLHMxLCgoKnMyID09ICc6JykgPyAiIiA6ICIgIiksczIsY2tm c3RvYShuKSk7Ci0gICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsK LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBzcHJpbnRmKHNwLCI/SW52 YWxpZCBmb3JtYXQgZm9yIHRsb2coKSAtICVkIixmKTsKLSAgICAgICAgaWYgKHpzb3V0bChaVEZJ TEUscykgPCAwKSB0cmFsb2cgPSAwOwotICAgIH0KLX0KLQotLyoKLSAgRCBPIFggTCBPIEcKLQot ICBUaGlzIGlzIHRoZSB0cmFuc2FjdGlvbi1sb2cgd3JpdGVyIGZvciBCUklFRiBmb3JtYXQuCi0g IFRoZSBpZGVhIGlzIHByb2R1Y2Ugb25lIHJlY29yZCAobGluZSkgcGVyIGZpbGUuICBFYWNoIHJl Y29yZAotICBoYXMgdGhlIGZvbGxvd2luZyBkZWxpbWl0ZWQgZmllbGRzOgotICAgIERhdGUgKHl5 eXltbWRkKQotICAgIFRpbWUgKGhoOm1tOnNzKQotICAgIEFjdGlvbjogU0VORCBvciBSRUNWCi0g ICAgRmlsZSBuYW1lCi0gICAgRmlsZSBzaXplCi0gICAgVHJhbnNmZXIgbW9kZSAodGV4dCwgYmlu YXJ5LCBpbWFnZSwgbGFiZWxlZCwgZXRjKS4KLSAgICBTdGF0dXM6IE9LIG9yIEZBSUxFRAotICAg IEZyZWUtZm9ybSBjb21tZW50cyBpbiBkb3VibGVxdW90ZXMKLSAgVGhlIGRlZmF1bHQgc2VwYXJh dG9yIGlzIGNvbW1hLgotICBJZiBhIGZpZWxkIGNvbnRhaW5zIHRoZSBzZXBhcmF0b3IsIGl0IGlz IGVuY2xvc2VkIGluIGRvdWJsZXF1b3Rlcy4KLSovCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWRv eGxvZyhpbnQgeCwgY2hhciAqIGZuLCBDS19PRkZfVCBmcywgaW50IGZtLCBpbnQgc3RhdHVzLCBj aGFyICogbXNnKQotI2Vsc2UKLWRveGxvZyh4LCBmbiwgZnMsIGZtLCBzdGF0dXMsIG1zZykKLSAg ICBpbnQgeDsgY2hhciAqIGZuOyBDS19PRkZfVCBmczsgaW50IGZtOyBpbnQgc3RhdHVzOyBjaGFy ICogbXNnOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBkb3hsb2cgKi8gewotICAgIGV4dGVy biBpbnQgdGxvZ3NlcDsKLSAgICBjaGFyIHNlcFsyXTsKLSAgICBjaGFyIGJ1ZltDS01BWFBBVEgr MjU2XSwgKiBidWZwOwotICAgIGNoYXIgdG1wYnVmWzMyXTsKLSAgICBjaGFyICogcywgKiBwOwot ICAgIGludCBsZW4sIGxlZnQsIGZ0cCA9IDAsIGs7Ci0KLSAgICBpZiAoIXRyYWxvZykgcmV0dXJu OyAgICAgICAgICAgICAgICAvKiBJZiBubyB0cmFuc2FjdGlvbiBsb2csIGRvbid0ICovCi0KLSAg ICBpZiAoIWZuKSBmbiA9ICIiOyAgICAgICAgICAgICAgICAgICAvKiBQcm90ZWN0IGFnYWluc3Qg bnVsbCBwb2ludGVycyAqLwotICAgIGlmICghbXNnKSBtc2cgPSAiIjsKLSAgICBpZiAoeCAmIFdf RlRQKQotICAgICAgZnRwKys7Ci0KLSAgICBzZXBbMF0gPSAoY2hhcikgdGxvZ3NlcDsKLSAgICBz ZXBbMV0gPSBOVUw7Ci0gICAgaWYgKCFzZXBbMF0pIHNlcFswXSA9ICcsJzsKLQotICAgIGJ1ZnAg PSBidWY7Ci0gICAgbGVmdCA9IHNpemVvZihidWYpOwotICAgIGRlYnVnKEYxMDEsIlhYWCBkb3hs b2cgbGVmdCAxIiwiIixsZWZ0KTsKLQotICAgIHAgPSB6em5kYXRlKCk7ICAgICAgICAgICAgICAg ICAgICAgIC8qIERhdGUgKi8KLSAgICBja21ha21zZyhidWYsIGxlZnQsIHAgPyBwIDogIjAwMDAw MDAwIiwgc2VwLCBOVUxMLCBOVUxMKTsKLSAgICBidWZwICs9IDk7Ci0gICAgbGVmdCAtPSA5Owot ICAgIGRlYnVnKEYxMTEsIlhYWCBkb3hsb2cgbGVmdCAyIixidWYsbGVmdCk7Ci0KLSAgICB6dGlt ZSgmcCk7Ci0gICAgY2tzdHJuY3B5KGJ1ZnAscCsxMSxsZWZ0KTsKLSAgICBidWZwICs9IDg7Ci0g ICAgbGVmdCAtPSA4OwotICAgIGRlYnVnKEYxMTEsIlhYWCBkb3hsb2cgbGVmdCAzIixidWYsbGVm dCk7Ci0KLSAgICBpZiAoZnRwKSB7Ci0JaWYgKCEoeCAmIChXX1NFTkR8V19SRUNWKSkpCi0JICBy ZXR1cm47Ci0JcyA9ICAoeCAmIFdfU0VORCkgPyAiUFVUIiA6ICJHRVQiOwotCWsgPSAzOwotICAg IH0gZWxzZSB7Ci0JcyA9ICAoeCAmIFdfU0VORCkgPyAiU0VORCIgOiAiUkVDViI7Ci0JayA9IDQ7 Ci0gICAgfQotICAgIGNrbWFrbXNnKGJ1ZnAsbGVmdCxzZXAscyxzZXAsTlVMTCk7Ci0gICAgYnVm cCArPSBrICsgMjsKLSAgICBsZWZ0IC09IChrICsgMik7Ci0gICAgZGVidWcoRjExMSwiWFhYIGRv eGxvZyBsZWZ0IDQiLGJ1ZixsZWZ0KTsKLQotICAgIHMgPSAiIjsKLSAgICBpZiAoY2tzdHJjaHIo Zm4sc2VwWzBdKSkJCS8qIEZpbGVuYW1lICovCi0gICAgICBzID0gIlwiIjsKLSAgICBja21ha21z ZyhidWZwLGxlZnQscyxmbixzLHNlcCk7Ci0gICAgc3ByaW50Zih0bXBidWYsIiVzIixja2ZzdG9h KGZzKSk7CS8qIFNpemUgKi8KLSAgICBja3N0cm5jYXQoYnVmLHRtcGJ1ZixDS01BWFBBVEgpOwot ICAgIGNrc3RybmNhdChidWYsc2VwLENLTUFYUEFUSCk7Ci0gICAgZGVidWcoRjExMCwiZG94bG9n IDQiLGJ1ZiwwKTsKLQotI2lmZGVmIE5PSUNQCi0gICAgLyogVHJhbnNmZXIgbW9kZSAqLwotICAg IGNrc3RybmNweSh0bXBidWYsIChiaW5hcnkgPyAiYmluYXJ5IiA6ICJ0ZXh0IiksIFRNUEJVRlNJ Wik7Ci0jZWxzZQotICAgIGNrc3RybmNweSh0bXBidWYsZ2Ztb2RlKGZtLDApLFRNUEJVRlNJWik7 Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICBpZiAoY2tzdHJjaHIodG1wYnVmLHNlcFswXSkpIHsg ICAgICAvKiBNaWdodCBjb250YWluIHNwYWNlcyAqLwotICAgICAgICBja3N0cm5jYXQoYnVmLCJc IiIsQ0tNQVhQQVRIKTsKLSAgICAgICAgY2tzdHJuY2F0KGJ1Zix0bXBidWYsQ0tNQVhQQVRIKTsK LSAgICAgICAgY2tzdHJuY2F0KGJ1ZiwiXCIiLENLTUFYUEFUSCk7Ci0gICAgfSBlbHNlCi0gICAg ICBja3N0cm5jYXQoYnVmLHRtcGJ1ZixDS01BWFBBVEgpOwotICAgIGNrc3RybmNhdChidWYsc2Vw LENLTUFYUEFUSCk7Ci0gICAgZGVidWcoRjExMCwiZG94bG9nIDUiLGJ1ZiwwKTsKLQotICAgIGNr c3RybmNhdChidWYsIHN0YXR1cyA/ICJGQUlMRUQiIDogIk9LIixDS01BWFBBVEgpOwotICAgIGxl biA9IHN0cmxlbihidWYpOwotICAgIGxlZnQgPSBDS01BWFBBVEgrMjU2IC0gbGVuOwotICAgIGlm IChsZWZ0IDwgMikgZmF0YWwoImRveGxvZyBidWZmZXIgb3ZlcmxvdyIpOwotCi0gICAgZGVidWco RjExMSwiWFhYIGRveGxvZyBsZWZ0IDUiLGJ1ZixsZWZ0KTsKLQotICAgIGRlYnVnKEYxMTAsImRv eGxvZyBidWYgMSIsIGJ1ZiwgbGVuKTsKLSAgICBzID0gYnVmICsgbGVuOwotICAgIGlmIChzdGF0 dXMgPT0gMCAmJiBsZWZ0ID4gMzIpIHsKLSAgICAgICAgbG9uZyBjcHMgPSAwTDsKLSNpZmRlZiBH RlRJTUVSCi0JZGVidWcoRjEwMSwiRE9YTE9HIGZweGZzZWNzIiwiIiwobG9uZykoZnB4ZnNlY3Mg KiAxMDAwKSk7Ci0gICAgICAgIGlmIChmcHhmc2VjcykgY3BzID0gKGxvbmcpKChDS0ZMT0FUKSBm cyAvIGZweGZzZWNzKTsKLSAgICAgICAgc3ByaW50ZihzLCIlc1wiJTAuM2ZzZWMgJWxkY3BzXCIi LHNlcCxmcHhmc2VjcyxjcHMpOwotI2Vsc2UKLSAgICAgICAgaWYgKHhmc2VjcykgY3BzID0gZnMg LyB4ZnNlY3M7Ci0gICAgICAgIHNwcmludGYocywiJXNcIiVsZHNlYyAlbGRjcHNcIiIsc2VwLHhm c2VjcyxjcHMpOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICB9IGVsc2UgaWYgKChpbnQpc3Ry bGVuKG1zZykgKyA0IDwgbGVmdCkgewotICAgICAgICBzcHJpbnRmKHMsIiVzXCIlc1wiIixzZXAs bXNnKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBsZWZ0IDUiLGJ1ZixsZWZ0 KTsKLQotICAgIGRlYnVnKEYxMTAsImRveGxvZyA1IixidWYsMCk7Ci0gICAgeCA9IHpzb3V0bCha VEZJTEUsYnVmKTsKLSAgICBkZWJ1ZyhGMTAxLCJkb3hsb2cgenNvdXRsIiwiIix4KTsKLSAgICBp ZiAoeCA8IDApIHRyYWxvZyA9IDA7Ci19Ci0jZW5kaWYgLyogVExPRyAqLwotCi0jaWZuZGVmIE1B QwotLyoKLSAgVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlzIGZvciBhbGwgaW1wbGVtZW50YXRpb25z IGJ1dCB0aGUgTWFjaW50b3NoLgotKi8KLQotI2lmZGVmIENLX0NVUlNFUwotc3RhdGljIGludCBy ZXBhaW50ID0gMDsgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGRpc3BsYXkgbmVlZHMgcmVw YWludGluZyAqLwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi0jaWZuZGVmIE5PWEZFUgotLyog IEMgSCBLIEkgTiBUICAtLSAgQ2hlY2sgZm9yIGNvbnNvbGUgaW50ZXJydXB0cyAgKi8KLQotLyoK LSAgVXNlZCBkdXJpbmcgZmlsZSB0cmFuc2ZlciBpbiBsb2NhbCBtb2RlIG9ubHk6Ci0gIC4gSWYg dXNlciBoYXMgbm90IHRvdWNoZWQgdGhlIGtleWJvYXJkLCByZXR1cm5zIDAgd2l0aCBubyBzaWRl IGVmZmVjdHMuCi0gIC4gSWYgdXNlciB0eXBlZCBTIG9yIEEgKGV0Yywgc2VlIGJlbG93KSBwcmlu dHMgc3RhdHVzIG1lc3NhZ2UgYW5kIHJldHVybnMgMC4KLSAgLiBJZiB1c2VyIHR5cGVkIFggb3Ig RiAoZXRjLCBzZWUgYmVsb3cpIHJldHVybnMgMCB3aXRoIGN4c2VlbiBzZXQgdG8gMS4KLSAgLiBJ ZiB1c2VyIHR5cGVkIFogb3IgQiAoZXRjLCBzZWUgYmVsb3cpIHJldHVybnMgMCB3aXRoIGN6c2Vl biBzZXQgdG8gMS4KLSAgLiBJZiB1c2VyIHR5cGVkIEUgb3IgQyAoZXRjLCBzZWUgYmVsb3cpIHJl dHVybnMgLTEuCi0qLwotaW50Ci1jaGtpbnQoKSB7Ci0gICAgaW50IGNoLCBjbiwgb2ZkOyBsb25n IHp6OwotICAgIGlmICgheGZyaW50KQotICAgICAgcmV0dXJuKDApOwotICAgIGlmICgoIWxvY2Fs KSB8fCAocXVpZXQpKSByZXR1cm4oMCk7IC8qIE9ubHkgZG8gdGhpcyBpZiBsb2NhbCAmIG5vdCBx dWlldCAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgaWYgKGNvbl9yZWFkc19tdCkgICAgICAg ICAgICAgICAgICAgLyogaWYgY29uaW50X210IHRhc2sgaXMgYWN0aXZlICovCi0gICAgICBpZiAo Y29uaW50X2F2bCkgeyAgICAgICAgICAgICAgICAgLyogYW5kIHRoZXJlJ3MgYW4gaW50ZXJydXB0 IHBlbmRpbmcgKi8KLSAgICAgICAgICBjbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBw cm9jZXNzIGl0ICovCi0gICAgICAgICAgY2ggPSBjb25pbnRfY2g7Ci0gICAgICAgICAgY29uaW50 X2F2bCA9IDA7ICAgICAgICAgICAgICAgLyogdHVybiBvZmYgZmxhZyBzbyBjb25pbnRfbXQgY2Fu ICovCi0gICAgICB9IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvY2VlZCAq LwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogaWYgY29uaW50X210IG5vdCBhY3RpdmUgKi8KLSAgICAgIGlmICgoY2ggPSBjb25p bmMoMikpIDwgMCkgICAgICAgICAvKiB0cnkgdG8gZ2V0IGNoYXIgbWFudWFsbHkgKi8KLSAgICAg ICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAvKiBJL08gZXJyb3IsIG9yIG5vIGRh dGEgKi8KLSAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBzdWNj ZXNzZnVsLCBzZXQgY24gc28gd2UgKi8KLSAgICAgICAgY24gPSAxOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBrbm93IHdlIGdvdCBvbmUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJjaGtpbnQgZ290 IGtleWJvYXJkIGNoYXJhY3RlciIsY2gsY24pOwotI2Vsc2UgLyogIWRhdGFnZW5lcmFsICovCi0j aWZkZWYgTlRTSUcKLSAgICB7Ci0gICAgICAgIGV4dGVybiBpbnQgVGxzSW5kZXg7Ci0gICAgICAg IHN0cnVjdCBfdGhyZWFkaW5mbyAqIHRocmVhZGluZm87Ci0gICAgICAgIHRocmVhZGluZm8gPSAo c3RydWN0IF90aHJlYWRpbmZvICopIFRsc0dldFZhbHVlKFRsc0luZGV4KTsKLSAgICAgICAgaWYg KHRocmVhZGluZm8pIHsKLSAgICAgICAgICAgIGlmICghV2FpdFNlbSh0aHJlYWRpbmZvLT5EaWVT ZW0sMCkpCi0gICAgICAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgLyogQ2FuY2Vs IEltbWVkaWF0ZWx5ICovCi0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAg ICBjbiA9IGNvbmNoaygpOyAgICAgICAgICAgICAgICAgICAgICAvKiBBbnkgaW5wdXQgd2FpdGlu Zz8gKi8KLSAgICBkZWJ1ZyhGMTAxLCJjb25jaGsiLCIiLGNuKTsKLSAgICBpZiAoY24gPCAxKSBy ZXR1cm4oMCk7Ci0gICAgY2ggPSBjb25pbmMoNSkgOwotICAgIGRlYnVnKEYxMDEsImNvbmluYyIs IiIsY2gpOwotICAgIGlmIChjaCA8IDApIHJldHVybigwKTsKLSNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLwotCi0gICAgY2ggJj0gMDE3NzsKLSAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICBjYXNlICdB JzogY2FzZSAnYSc6IGNhc2UgMDAwMTogICAgLyogU3RhdHVzIHJlcG9ydCAqLwotICAgICAgY2Fz ZSAnUyc6IGNhc2UgJ3MnOgotICAgICAgICBpZiAoZmRpc3BsYSAhPSBYWUZEX1IgJiYgZmRpc3Bs YSAhPSBYWUZEX1MgJiYgZmRpc3BsYSAhPSBYWUZEX04pCi0gICAgICAgICAgcmV0dXJuKDApOyAg ICAgICAgICAgICAgICAgICAgLyogT25seSBmb3Igc2VyaWFsLCBzaW1wbGUgb3Igbm9uZSAqLwot ICAgICAgICBvZmQgPSBmZGlzcGxhOyAgICAgICAgICAgICAgICAgIC8qIFtNRl0gU2F2ZSBmaWxl IGRpc3BsYXkgdHlwZSAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX04pCi0gICAgICAg ICAgZmRpc3BsYSA9IFhZRkRfUjsgICAgICAgICAgICAgLyogW01GXSBQcmV0ZW5kIHNlcmlhbCBp ZiBubyBkaXNwbGF5ICovCi0gICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCJTdGF0dXMgcmVw b3J0OiIpOwotICAgICAgICB4eHNjcmVlbihTQ1JfVE4sMCwwbCwiIGZpbGUgdHlwZTogIik7Ci0g ICAgICAgIGlmIChiaW5hcnkpIHsKLSAgICAgICAgICAgIHN3aXRjaChiaW5hcnkpIHsKLSAgICAg ICAgICAgICAgY2FzZSBYWUZUX0w6IHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJsYWJlbGVkIik7IGJy ZWFrOwotICAgICAgICAgICAgICBjYXNlIFhZRlRfSTogeHhzY3JlZW4oU0NSX1RaLDAsMGwsImlt YWdlIik7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFhZRlRfVTogeHhzY3JlZW4oU0NSX1Ra LDAsMGwsImJpbmFyeSB1bmRlZmluZWQiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6 Ci0gICAgICAgICAgICAgIGNhc2UgWFlGVF9COiB4eHNjcmVlbihTQ1JfVFosMCwwbCwiYmluYXJ5 Iik7IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotI2lmZGVmIE5PQ1NF VFMKLSAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJ0ZXh0Iik7Ci0jZWxzZQotICAg ICAgICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMGwsInRleHQsICIpOwotICAgICAgICAgICAgaWYg KHRjaGFyc2V0ID09IFRDX1RSQU5TUCB8fCB4ZnJ4bGEgPT0gMCkgewotICAgICAgICAgICAgICAg IHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJ0cmFuc3BhcmVudCIpOwotICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkgewotICAgICAgICAgICAgICAg ICAgICB4eHNjcmVlbihTQ1JfVFosMCwwbCx0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkKTsKLSAg ICAgICAgICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMGwsIiA9PiAiKTsKLSAgICAgICAg ICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsZmNzaW5mb1tmY2hhcnNldF0ua2V5d29y ZCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgeHhzY3Jl ZW4oU0NSX1RaLDAsMGwsZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZCk7Ci0gICAgICAgICAgICAg ICAgICAgIHh4c2NyZWVuKFNDUl9UVSwwLDBsLCIgPT4gIik7Ci0gICAgICAgICAgICAgICAgICAg IHh4c2NyZWVuKFNDUl9UWiwwLDBsLHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQpOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgICAg IH0KLSAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsZmlsY250LCIgZmlsZSBudW1iZXIiKTsKLSAg ICAgICAgaWYgKGZzaXplKSB4eHNjcmVlbihTQ1JfUUUsMCxmc2l6ZSwiIHNpemUiKTsKLSAgICAg ICAgeHhzY3JlZW4oU0NSX1FFLDAsZmZjLCIgY2hhcmFjdGVycyBzbyBmYXIiKTsKLSAgICAgICAg aWYgKGZzaXplID4gMEwpIHsKLSNpZmRlZiBDS19SRVNFTkQKLSAgICAgICAgICAgIHp6ID0gd2hh dCAmIFdfU0VORCA/IHNlbmRzdGFydCA6IHdoYXQgJiBXX1JFQ1YgPyByc19sZW4gOiAwOwotICAg ICAgICAgICAgenogPSAoIChmZmMgKyB6eikgKiAxMDBMICkgLyBmc2l6ZTsKLSNlbHNlCi0gICAg ICAgICAgICB6eiA9ICggZmZjICogMTAwTCApIC8gZnNpemU7Ci0jZW5kaWYgLyogQ0tfUkVTRU5E ICovCi0gICAgICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCx6eiwgICAgICAiIHBlcmNlbnQgZG9u ZSIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChiY3R1ID09IDQpIHsgICAgICAgICAgICAgICAg LyogQmxvY2sgY2hlY2sgKi8KLSAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UVSwwLDBMLCIgYmxv Y2sgY2hlY2s6ICIpOwotICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMEwsImJsYW5rLWZy ZWUtMiIpOwotICAgICAgICB9IGVsc2UgeHhzY3JlZW4oU0NSX1FFLDAsKGxvbmcpYmN0dSwgICIg YmxvY2sgY2hlY2siKTsKLSAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsKGxvbmcpcnB0ZmxnLCIg Y29tcHJlc3Npb24iKTsKLSAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsKGxvbmcpZWJxZmxnLCIg OHRoLWJpdCBwcmVmaXhpbmciKTsKLSAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsKGxvbmcpbHNj YXB1LCIgbG9ja2luZyBzaGlmdHMiKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrKQotICAgICAgICAg IHh4c2NyZWVuKFNDUl9RRSwwLCBzcGVlZCwgIiBzcGVlZCIpOwotICAgICAgICBpZiAod2hhdCAm IFdfU0VORCkKLQotICAgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLHNwc2l6LCAiIHBhY2tldCBs ZW5ndGgiKTsKLSAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDViB8fCB3aGF0ICYgV19SRU1P KQotICAgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLHVycHNpeiwiIHBhY2tldCBsZW5ndGgiKTsK LSAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsd3Nsb3RzLCAgIiB3aW5kb3cgc2xvdHMiKTsKLSAg ICAgICAgZmRpc3BsYSA9IG9mZDsgLyogW01GXSBSZXN0b3JlIGZpbGUgZGlzcGxheSB0eXBlICov Ci0gICAgICAgIHJldHVybigwKTsKLQotICAgICAgY2FzZSAnQic6IGNhc2UgJ2InOiBjYXNlIDAw MDI6ICAgIC8qIENhbmNlbCBiYXRjaCAqLwotICAgICAgY2FzZSAnWic6IGNhc2UgJ3onOiBjYXNl IDAwMzI6Ci0gICAgICAgIGN6c2VlbiA9IDE7Ci0gICAgICAgIGludGVycnVwdGVkID0gMTsKLSAg ICAgICAgeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwKLSAgICAgICAgICAgICAgICAgKCgod2hh dCAmIFdfUkVDVikgJiYgKHdzbG90cyA+IDEpKSA/Ci0gICAgICAgICAgICAgICAgICAiQ2FuY2Vs aW5nIGJhdGNoLCB3YWl0Li4uICIgOgotICAgICAgICAgICAgICAgICAgIkNhbmNlbGluZyBiYXRj aC4uLiAiKQotICAgICAgICAgICAgICAgICApOwotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICAg IGNhc2UgJ0YnOiBjYXNlICdmJzogY2FzZSAwMDA2OiAgICAvKiBDYW5jZWwgZmlsZSAqLwotICAg ICAgY2FzZSAnWCc6IGNhc2UgJ3gnOiBjYXNlIDAwMzA6Ci0gICAgICAgIGN4c2VlbiA9IDE7Ci0g ICAgICAgIGludGVycnVwdGVkID0gMTsKLSAgICAgICAgeHhzY3JlZW4oU0NSX1NULFNUX01TRyww bCwKLSAgICAgICAgICAgICAgICAgKCgod2hhdCAmIFdfUkVDVikgJiYgKHdzbG90cyA+IDEpKSA/ Ci0gICAgICAgICAgICAgICAgICAiQ2FuY2VsaW5nIGZpbGUsIHdhaXQuLi4gIiA6Ci0gICAgICAg ICAgICAgICAgICAiQ2FuY2VsaW5nIGZpbGUuLi4gIikKLSAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgcmV0dXJuKDApOwotCi0gICAgICBjYXNlICdSJzogY2FzZSAncic6IGNhc2UgMDAyMjog ICAgLyogUmVzZW5kIHBhY2tldCAqLwotICAgICAgY2FzZSAwMDE1OiBjYXNlIDAwMTI6Ci0jaWZk ZWYgU1RSRUFNSU5HCi0gICAgICAgIGlmIChzdHJlYW1pbmcpCi0gICAgICAgICAgcmV0dXJuKDAp OwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotICAgICAgICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNH LDBsLCJSZXNlbmRpbmcgcGFja2V0Li4uICIpOwotICAgICAgICBudW1lcnJzKys7Ci0gICAgICAg IHJlc2VuZCh3aW5sbyk7Ci0gICAgICAgIHJldHVybigwKTsKLQotI2lmZGVmIGRhdGFnZW5lcmFs Ci0gICAgICBjYXNlICdcMDMnOiAgICAgICAgICAgICAgICAgICAgICAgLyogV2UncmUgbm90IHRy YXBwaW5nIF5DJ3Mgd2l0aCAqLwotICAgICAgICB0cmFwKDApOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHNpZ25hbHMsIHNvIHdlIGNoZWNrIGhlcmUgICAgKi8KLSNlbmRpZiAvKiBkYXRhZ2Vu ZXJhbCAqLwotCi0gICAgICBjYXNlICdDJzogY2FzZSAnYyc6ICAgICAgICAgICAgICAgLyogQ3Ry bC1DICovCi0jaWZuZGVmIGRhdGFnZW5lcmFsCi0gICAgICBjYXNlICdcMDMnOgotI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCi0KLSAgICAgIGNhc2UgJ0UnOiBjYXNlICdlJzogICAgICAgICAgICAg ICAvKiBTZW5kIGVycm9yIHBhY2tldCAqLwotICAgICAgY2FzZSAwMDA1OgotICAgICAgICBpbnRl cnJ1cHRlZCA9IDE7Ci0gICAgICAgIHJldHVybigtMSk7Ci0KLSNpZmRlZiBDS19DVVJTRVMKLSAg ICAgIGNhc2UgMDAxNDogICAgICAgICAgICAgICAgICAgICAgICAvKiBDdHJsLUwgdG8gcmVmcmVz aCBzY3JlZW4gKi8KLSAgICAgIGNhc2UgJ0wnOiBjYXNlICdsJzogICAgICAgICAgICAgICAvKiBB bHNvIGFjY2VwdCBMICh1cHBlciwgbG93ZXIpICovCi0gICAgICBjYXNlIDAwMjc6ICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ3RybC1XIHN5bm9ueW0gZm9yIFZNUyAmIEluZ3JlcyAqLwotICAg ICAgICByZXBhaW50ID0gMTsKLSAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIENLX0NVUlNF UyAqLwotCi0gICAgICBjYXNlICdUJzoKLSAgICAgIGNhc2UgJ3QnOgkJCQkvKiBUdXJuIG9uIGRl YnVnLWxvZyB0aW1lc3RhbXBzICovCi0jaWZkZWYgREVCVUcKLQl7Ci0JICAgIGV4dGVybiBpbnQg ZGVidGltOwotCSAgICBpZiAoY2ggPT0gJ1QnKSB7Ci0JCWRlYnRpbSA9IDE7Ci0JCXh4c2NyZWVu KFNDUl9TVCxTVF9NU0csMGwsCi0JCQkgIkRlYnVnIHRpbWVzdGFtcHMgT24uLi4gIik7Ci0JICAg IH0gZWxzZSB7Ci0JCWRlYnRpbSA9IDE7Ci0JCXh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsCi0J CQkgIkRlYnVnIHRpbWVzdGFtcHMgT2ZmLi4uICIpOwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIERF QlVHICovCi0JcmV0dXJuKDApOwotCi0gICAgICBjYXNlICdEJzoKLSNpZmRlZiBERUJVRwotCWlm ICghZGVibG9nKSB7Ci0JICAgIGRlYm9wbigiZGVidWcubG9nIiwwKTsKLQkgICAgaWYgKGRlYmxv ZykgewotCQl4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJkZWJ1Zy5sb2cgb3Blbi4uLiAiKTsK LQkgICAgfSBlbHNlIHsKLQkJeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwiZGVidWcubG9nIG9w ZW4gRkFJTEVELi4uICIpOwotCSAgICB9Ci0JfSBlbHNlIHsKLQkgICAgeHhzY3JlZW4oU0NSX1NU LFNUX01TRywwbCwiRGVidWcgbG9nIE9uLi4uICIpOwotCX0KLQlpZiAoZGVibG9nKQotCSAgZGVi b2sgPSAxOwotI2VuZGlmIC8qIERFQlVHICovCi0JcmV0dXJuKDApOwotCi0gICAgICBjYXNlICdk JzoJCQkJLyogVHVybiBvZmYgZGVidWdnaW5nICovCi0jaWZkZWYgREVCVUcKLQlpZiAoZGVibG9n KQotCSAgeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwiRGVidWcgbG9nIE9mZi4uLiAiKTsKLQlk ZWJvayA9IDA7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQlyZXR1cm4oMCk7Ci0KLSAgICAgIGRlZmF1 bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbnl0aGluZyBlbHNlLCBwcmludCBtZXNz YWdlICovCi0gICAgICAgIGludG1zZygxTCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci19 Ci0KLS8qICBJIE4gVCBNIFMgRyAgLS0gIElzc3VlIG1lc3NhZ2UgYWJvdXQgdGVybWluYWwgaW50 ZXJydXB0cyAgKi8KLQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1pbnRtc2cobG9uZyBuKQotI2Vs c2UKLWludG1zZyhuKSBsb25nIG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGludG1zZyAq LyB7Ci0jaWZkZWYgQ0tfTkVFRF9TSUcKLSAgICBjaGFyIGJ1Zls4MF07Ci0jZW5kaWYgLyogQ0tf TkVFRF9TSUcgKi8KLQotICAgIGlmICghZGlzcGxhIHx8IHF1aWV0KSAgICAgICAgICAgICAgIC8q IE5vdCBpZiB3ZSdyZSBiZWluZyBxdWlldCAqLwotICAgICAgcmV0dXJuOwotICAgIGlmIChzZXJ2 ZXIgJiYgKCFzcnZkaXMgfHwgbiA+IC0xTCkpIC8qIFNwZWNpYWwgZm9yIHNlcnZlciAqLwotICAg ICAgcmV0dXJuOwotI2lmZGVmIENLX05FRURfU0lHCi0gICAgYnVmWzBdID0gTlVMOyAgICAgICAg ICAgICAgICAgICAgICAgLyogS2VlcCBjb21waWxlcnMgaGFwcHkgKi8KLSNlbmRpZiAvKiBDS19O RUVEX1NJRyAqLwotI2lmbmRlZiBPWE9TCi0jaWZkZWYgU1ZPUlBPU0lYCi0gICAgY29uY2hrKCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgb3V0IHBlbmRpbmcgZXNjYXBlLXNp Z25hbHMgKi8KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLSNlbmRpZiAvKiAhIE9YT1MgKi8KLSNp ZmRlZiBWTVMKLSAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbyBD dHJsLUMgd2lsbCB3b3JrICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgaWYgKCghc2VydmVyICYm IG4gPT0gMUwpIHx8IChzZXJ2ZXIgJiYgbiA8IDBMKSkgewotCi0jaWZkZWYgQ0tfTkVFRF9TSUcK LSAgICAgICAgaWYgKHhmcmludCkgewotCSAgICBja21ha21zZyhidWYsCi0JCSAgICAgODAsCi0J CSAgICAgIlR5cGUgZXNjYXBlIGNoYXJhY3RlciAoIiwKLQkJICAgICBkYmNocihlc2NhcGUpLAot CQkgICAgICIpIGZvbGxvd2VkIGJ5OiIsCi0JCSAgICAgTlVMTAotCQkgICAgICk7Ci0gICAgICAg ICAgICB4eHNjcmVlbihTQ1JfVE4sMCwwbCxidWYpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tf TkVFRF9TSUcgKi8KLQotICAgICAgICBpZiAoeGZyaW50KSB7Ci0gICAgICAgICAgICBpZiAocHJv dG9jb2wgPT0gUFJPVE9fSykgewotIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCJYIHRvIGNhbmNlbCBm aWxlLCAgQ1IgdG8gcmVzZW5kIGN1cnJlbnQgcGFja2V0Iik7Ci0geHhzY3JlZW4oU0NSX1ROLDAs MGwsIlogdG8gY2FuY2VsIGdyb3VwLCBBIGZvciBzdGF0dXMgcmVwb3J0Iik7Ci0geHhzY3JlZW4o U0NSX1ROLDAsMGwsIkUgdG8gc2VuZCBFcnJvciBwYWNrZXQsIEN0cmwtQyB0byBxdWl0IGltbWVk aWF0ZWx5OiAiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgeHhzY3Jl ZW4oU0NSX1ROLDAsMGwsIkN0cmwtQyB0byBjYW5jZWwgZmlsZSB0cmFuc2ZlcjogIik7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB4eHNjcmVlbihTQ1JfVE4s MCwwbCwiVHJhbnNmZXIgaW50ZXJydXB0aW9uIGRpc2FibGVkLiAiKTsKLSAgICAgICAgfQotICAg IH0KLSAgICBlbHNlIHh4c2NyZWVuKFNDUl9UVSwwLDBsLCIgIik7Ci19Ci0KLSNpZm5kZWYgTk9E SVNQTEFZCi1zdGF0aWMgaW50IG5ld2RweSA9IDA7ICAgICAgICAgICAgICAgICAgLyogTmV3IGRp c3BsYXkgZmxhZyAqLwotc3RhdGljIGNoYXIgZmJ1Zls4MF07ICAgICAgICAgICAgICAgICAgIC8q IEZpbGVuYW1lIGJ1ZmZlciAqLwotc3RhdGljIGNoYXIgYWJ1Zls4MF07ICAgICAgICAgICAgICAg ICAgIC8qIEFzLW5hbWUgYnVmZmVyICovCi1zdGF0aWMgY2hhciBhMmJ1Zls4MF07ICAgICAgICAg ICAgICAgICAgLyogU2Vjb25kIEFzLW5hbWUgYnVmZmVyICovCi1zdGF0aWMgQ0tfT0ZGX1Qgb2xk ZmZjID0gMEw7Ci1zdGF0aWMgQ0tfT0ZGX1QgZG90cyA9IDBMOwotc3RhdGljIGludCBocG9zID0g MDsKLQotc3RhdGljIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxp emUgU2VyaWFsIG9yIENSVCBkaXNwbGF5ICovCi1kcHlpbml0KCkgewotICAgIGludCBtID0gMCwg biA9IDA7Ci0gICAgY2hhciAqIHMgPSAiIjsKLQotICAgIG5ld2RweSA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qICBEb24ndCBkbyB0aGlzIGFnYWluICovCi0gICAgb2xkZmZjID0gKENL X09GRl9UKTA7CQkvKiAgUmVzZXQgdGhpcyAqLwotICAgIGRvdHMgPSAoQ0tfT0ZGX1QpMDsJCQkv KiAgYW5kIHRoaXMuLiAqLwotICAgIG9sZGNwcyA9IGNwcyA9IDBMOwotCi0gICAgY29ub2xsKCIi KTsJCQkJLyogTmV3IGxpbmUgKi8KLSAgICBpZiAod2hhdCAmIFdfU0VORCkgcyA9ICJTZW5kaW5n OiAiOwkvKiBBY3Rpb24gKi8KLSAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKSBzID0gIlJlY2Vp dmluZzogIjsKLSAgICBuID0gKGludClzdHJsZW4ocykgKyAoaW50KXN0cmxlbihmYnVmKTsKLSAg ICBjb25vbChmYnVmKTsKLSAgICBtID0gKGludClzdHJsZW4oYWJ1ZikgKyA0OwotICAgIGlmIChu ICsgbSA+IGNtZF9jb2xzKSB7Ci0gICAgICAgIGNvbm9sbCgiIik7Ci0gICAgICAgIG4gPSAwOwot ICAgIH0gZWxzZQotICAgICAgbiArPSBtOwotICAgIGlmICgqYWJ1ZikgewotICAgICAgICBjb25v bCgiID0+ICIpOwotICAgICAgICBjb25vbChhYnVmKTsKLSAgICB9Ci0gICAgbSA9IChpbnQpc3Ry bGVuKGEyYnVmKSArIDQ7Ci0gICAgaWYgKG4gKyBtID4gY21kX2NvbHMpIHsKLSAgICAgICAgY29u b2xsKCIiKTsKLSAgICAgICAgbiA9IDA7Ci0gICAgfSBlbHNlCi0gICAgICBuICs9IG07Ci0gICAg aWYgKCphMmJ1ZikgewotICAgICAgICBjb25vbCgiID0+ICIpOwotICAgICAgICBjb25vbChhMmJ1 Zik7Ci0gICAgfQotICAgICpmYnVmID0gTlVMOyAqYWJ1ZiA9IE5VTDsgKmEyYnVmID0gTlVMOwot ICAgIGNvbm9sbCgiIik7Ci0gICAgaWYgKGZzaXplID4gKENLX09GRl9UKS0xKSB7CQkvKiBTaXpl ICovCi0gICAgICAgIHNwcmludGYoZmJ1ZiwiU2l6ZTogJXMsIFR5cGU6ICIsY2tmc3RvYShmc2l6 ZSkpOyAvKiBTQUZFICg4MCkgKi8KLSAgICAgICAgY29ub2woZmJ1Zik7ICpmYnVmID0gTlVMOwot ICAgIH0gZWxzZSBjb25vbCgiU2l6ZTogdW5rbm93biwgVHlwZTogIik7Ci0gICAgaWYgKGJpbmFy eSkgewkJCS8qIFR5cGUgKi8KLSAgICAgICAgc3dpdGNoKGJpbmFyeSkgewotICAgICAgICAgICAg ICBjYXNlIFhZRlRfTDogY29ub2woImxhYmVsZWQiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh c2UgWFlGVF9JOiBjb25vbCgiaW1hZ2UiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgWFlG VF9VOiBjb25vbCgiYmluYXJ5IHVuZGVmaW5lZCIpOyBicmVhazsKLSAgICAgICAgICAgICAgZGVm YXVsdDoKLSAgICAgICAgICAgICAgY2FzZSBYWUZUX0I6IGNvbm9sKCJiaW5hcnkiKTsgYnJlYWs7 Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmZGVmIE5PQ1NFVFMKLSAgICAgICAgY29ub2wo InRleHQiKTsKLSNlbHNlCi0gICAgICAgIGNvbm9sKCJ0ZXh0LCAiKTsKLSAgICAgICAgaWYgKHRj aGFyc2V0ID09IFRDX1RSQU5TUCB8fCB4ZnJ4bGEgPT0gMCkgewotICAgICAgICAgICAgY29ub2wo InRyYW5zcGFyZW50Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAod2hhdCAm IFdfU0VORCkgewotICAgICAgICAgICAgICAgIGNvbm9sKGZjc2luZm9bZmNoYXJzZXRdLmtleXdv cmQpOwotICAgICAgICAgICAgICAgIGNvbm9sKCIgPT4gIik7Ci0gICAgICAgICAgICAgICAgY29u b2wodGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgIGNvbm9sKHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQpOwotICAgICAgICAg ICAgICAgIGNvbm9sKCIgPT4gIik7Ci0gICAgICAgICAgICAgICAgY29ub2woZmNzaW5mb1tmY2hh cnNldF0ua2V5d29yZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0NT RVRTICovCi0gICAgfQotI2lmZGVmIFNUUkVBTUlORwotICAgIGlmIChzdHJlYW1pbmcpCi0gICAg ICBjb25vbCgiLCBTVFJFQU1JTkciKTsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSAgICBjb25v bGwoIiIpOwotCi0gICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7ICAgICAgICAgICAgLyogQ1JU IGZpZWxkIGhlYWRpbmdzICovCi0vKgotICBEZWZpbmUgQ0tfQ1BTIHRvIHNob3cgY3VycmVudCB0 cmFuc2ZlciByYXRlLgotICBMZWF2ZSBpdCB1bmRlZmluZWQgdG8gc2hvdyBlc3RpbWF0ZWQgdGlt ZSByZW1haW5pbmcuCi0gIEVzdGltYXRlZC10aW1lLXJlbWFpbmluZyBjb2RlIGZyb20gQW5keSBG eWZlLCBub3QgdGVzdGVkIG9uCi0gIHBhdGhvbG9naWNhbCBjYXNlcy4KLSovCi0jZGVmaW5lIENL X0NQUwotCi0jaWZkZWYgQ0tfQ1BTCi0gICAgICAgIGNvbm9sbCgiICAgIEZpbGUgICBQZXJjZW50 ICAgICAgIFBhY2tldCIpOwotICAgICAgICBjb25vbGwoIiAgICBCeXRlcyAgRG9uZSAgICAgQ1BT ICBMZW5ndGgiKTsKLSNlbHNlCi0gICAgICAgIGNvbm9sbCgiICAgIEZpbGUgICBQZXJjZW50ICBT ZWNzIFBhY2tldCIpOwotICAgICAgICBjb25vbGwoIiAgICBCeXRlcyAgRG9uZSAgICAgTGVmdCBM ZW5ndGgiKTsKLSNlbmRpZiAvKiBDS19DUFMgKi8KLSAgICAgICAgbmV3ZHB5ID0gMDsKLSAgICB9 Ci0gICAgaHBvcyA9IDA7Ci19Ci0KLS8qCi0gIHNob3dwa3QoYykKLSAgYyA9IGNvbXBsZXRpb24g Y29kZTogMCBtZWFucyB0cmFuc2ZlciBpbiBwcm9ncmVzcywgbm9uemVybyBtZWFucyBpdCdzIGRv bmUuCi0gIFNob3cgdGhlIGZpbGUgdHJhbnNmZXIgcHJvZ3Jlc3MgY291bnRlciBhbmQgcGVyaGFw cyB2ZXJib3NlIHBhY2tldCB0eXBlLgotKi8KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotc2hvd3Br dChjaGFyIGMpCi0jZWxzZQotc2hvd3BrdChjKSBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLS8qIHNob3dwa3QgKi8gewotCi0jaWZuZGVmIEdGVElNRVIKLSAgICBsb25nIGV0OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBFbGFwc2VkIHRpbWUsIGVudGlyZSBiYXRjaCAgKi8K LSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgQ0tfT0ZGX1QgaG93ZmFyOwkJCS8qIEhvdyBmYXIg aW50byBmaWxlICovCi0gICAgbG9uZyBwZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UGVyY2VudCBkb25lLCB0aGlzIGZpbGUgICAgICovCi0gICAgbG9uZyB0cDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgcmF0ZSwgZW50aXJlIGJhdGNoICovCi0gICAgbG9u ZyBwczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFja2V0IHNpemUsIGN1cnJlbnQg cGFja2V0ICovCi0gICAgQ0tfT0ZGX1QgbXl0ZmM7CQkJLyogTG9jYWwgY29weSBvZiBieXRlIGNv dW50ZXIgICovCi0KLSNpZmRlZiBHRlRJTUVSCi0gICAgQ0tGTE9BVCB0bm93OwotI2VuZGlmIC8q IEdGVElNRVIgKi8KLQotICAgIGlmIChuZXdkcHkpICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFB1dCB1cCBmaWxlbmFtZXMsIGV0YywgKi8KLSAgICAgIGRweWluaXQoKTsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBpZiB0aGV5J3JlIG5vdCB0aGVyZSBhbHJlYWR5LiAqLwotCi0gICAgaG93 ZmFyID0gZmZjOyAgICAgICAgICAgICAgICAgICAgICAgLyogSG93IGZhciAqLwotLyoKLSAgQ2Fs Y3VsYXRlIENQUyByYXRlIGV2ZW4gaWYgbm90IGRpc3BsYXlpbmcgb24gc2NyZWVuIGZvciB1c2Ug aW4gZmlsZQotICB0cmFuc2ZlciBzdGF0aXN0aWNzLgotKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAg dG5vdyA9IGdmdGltZXIoKTsgICAgICAgICAgICAgICAgICAgLyogVGltZSBzaW5jZSB3ZSBzdGFy dGVkICovCi0gICAgcHMgPSAod2hhdCAmIFdfUkVDVikgPyBycGt0bCA6IHNwa3RsOyAvKiBQYWNr ZXQgc2l6ZSAqLwotI2lmZGVmIENLX1JFU0VORAotICAgIGlmICh3aGF0ICYgV19TRU5EKQkJCS8q IEluIGNhc2Ugd2UgZGlkbid0IHN0YXJ0IGF0ICovCi0gICAgICBob3dmYXIgKz0gc2VuZHN0YXJ0 OyAgICAgICAgICAgICAgLyogIHRoZSBiZWdpbm5pbmcuLi4gKi8KLSAgICBlbHNlIGlmICh3aGF0 ICYgV19SRUNWKQotICAgICAgaG93ZmFyICs9IHJzX2xlbjsKLSNlbmRpZiAvKiBDS19SRVNFTkQg Ki8KLSAgICBwZCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJjZW50IGRv bmUuICovCi0gICAgaWYgKGMgPT0gTlVMKSB7ICAgICAgICAgICAgICAgICAgICAgLyogU3RpbGwg Z29pbmcsIGZpZ3VyZSAlIGRvbmUgKi8KLSAgICAgICAgaWYgKCFmc2l6ZSkgcmV0dXJuOwkJLyog RW1wdHkgZmlsZSwgZG9uJ3QgYm90aGVyICovCi0gICAgICAgIHBkID0gKGZzaXplID4gOTkpID8g KGhvd2ZhciAvIChmc2l6ZSAvIChDS19PRkZfVCkxMDApKSA6IDA7Ci0gICAgICAgIGlmIChwZCA+ IDEwMCkgcGQgPSAxMDA7ICAgICAgICAgLyogRXhwYW5zaW9uICovCi0gICAgfQotICAgIGlmIChj ICE9IE5VTCkKLSAgICAgIGlmICghY3hzZWVuICYmICFkaXNjYXJkICYmICFjenNlZW4pCi0gICAg ICAgIHBkID0gMTAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBjb21wbGV0ZSwgc28g MTAwJS4gKi8KLQotICAgIG15dGZjID0gKHBkIDwgMTAwKSA/IHRmYyArIGZmYyA6IHRmYzsgICAg LyogQ1BTICovCi0gICAgdHAgPSAobG9uZykoKHRub3cgPiAwLjApID8gKENLRkxPQVQpIG15dGZj IC8gdG5vdyA6IDApOwotICAgIGlmIChjICYmICh0cCA9PSAwKSkKLSAgICAgIHRwID0gZmZjOwot Ci0gICAgY3BzID0gdHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGdsb2JhbCB2 YXJpYWJsZSAqLwotICAgIGlmIChjcHMgPiBwZWFrY3BzICYmICAgICAgICAgICAgICAgIC8qIFBl YWsgdHJhbnNmZXIgcmF0ZSAqLwotICAgICAgICAgKCh3aGF0ICYgV19TRU5EICYmIHNwYWNrZXRz ID4gd3Nsb3RzICsgNCkgfHwKLQkgICghKHdoYXQgJiBXX1NFTkQpICYmIHNwYWNrZXRzID4gMTAp KSkgewotICAgICAgICBwZWFrY3BzID0gY3BzOwotICAgIH0KLQotI2Vsc2UgIC8qIE5vdCBHRlRJ TUVSICovCi0KLSAgICBldCA9IGd0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgICAvKiBFbGFw c2VkIHRpbWUgICovCi0gICAgcHMgPSAod2hhdCAmIFdfUkVDVikgPyBycGt0bCA6IHNwa3RsOyAv KiBQYWNrZXQgbGVuZ3RoICovCi0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgaWYgKHdoYXQgJiBXX1NF TkQpCQkJLyogQW5kIGlmIHdlIGRpZG4ndCBzdGFydCBhdCAqLwotICAgICAgaG93ZmFyICs9IHNl bmRzdGFydDsgICAgICAgICAgICAgIC8qICB0aGUgYmVnaW5uaW5nLi4uICovCi0gICAgZWxzZSBp ZiAod2hhdCAmIFdfUkVDVikKLSAgICAgIGhvd2ZhciArPSByc19sZW47Ci0jZW5kaWYgLyogQ0tf UkVTRU5EICovCi0gICAgcGQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVy Y2VudCBkb25lLiAqLwotICAgIGlmIChjID09IE5VTCkgeyAgICAgICAgICAgICAgICAgICAgIC8q IFN0aWxsIGdvaW5nLCBmaWd1cmUgJSBkb25lICovCi0gICAgICAgIGlmIChmc2l6ZSA9PSAwTCkg cmV0dXJuOyAgICAgICAgLyogRW1wdHkgZmlsZSwgZG9uJ3QgYm90aGVyICovCi0gICAgICAgIHBk ID0gKGZzaXplID4gOTkpID8gKGhvd2ZhciAvIChmc2l6ZSAvIChDS19PRkZfVCkxMDApKSA6IDA7 Ci0gICAgICAgIGlmIChwZCA+IDEwMCkgcGQgPSAxMDA7ICAgICAgICAgLyogRXhwYW5zaW9uICov Ci0gICAgfQotICAgIGlmIChjICE9IE5VTCkKLSAgICAgIGlmICghY3hzZWVuICYmICFkaXNjYXJk ICYmICFjenNlZW4pCi0gICAgICAgIHBkID0gMTAwOyAgICAgICAgICAgICAgICAgICAgICAgLyog RmlsZSBjb21wbGV0ZSwgc28gMTAwJS4gKi8KLQotCi0jaWZuZGVmIENLX0NQUwotLyoKLSAgZnNl Y3MgPSB0aW1lIChmcm9tIGd0aW1lcikgdGhhdCB0aGlzIGZpbGUgc3RhcnRlZCAoc2V0IGluIHNm aWxlKCkpLgotICBSYXRlIHNvIGZhciBpcyBmZmMgLyAoZXQgLSBmc2VjcyksICBlc3RpbWF0ZWQg dGltZSBmb3IgcmVtYWluaW5nIGJ5dGVzCi0gIGlzIChmc2l6ZSAtIGZmYykgLyAoZmZjIC8gKGV0 IC0gZnNlY3MpKS4KLSovCi0gICAgdHAgPSAoaG93ZmFyID4gMCkgPyAoZnNpemUgLSBob3dmYXIp ICogKGV0IC0gZnNlY3MpIC8gaG93ZmFyIDogMDsKLSNlbmRpZiAvKiBDS19DUFMgKi8KLQotI2lm ZGVmIENLX0NQUwotICAgIG15dGZjID0gKHBkIDwgMTAwKSA/IHRmYyArIGZmYyA6IHRmYzsKLSAg ICB0cCA9IChldCA+IDApID8gbXl0ZmMgLyBldCA6IDA7CS8qIFRyYW5zZmVyIHJhdGUgKi8KLSAg ICBpZiAoYyAmJiAodHAgPT0gMCkpCQkJLyogV2F0Y2ggb3V0IGZvciBzdWJzZWNvbmQgdGltZXMg Ki8KLSAgICAgICAgdHAgPSBmZmM7Ci0KLSAgICBjcHMgPSB0cDsJCQkJLyogU2V0IGdsb2JhbCB2 YXJpYWJsZSAqLwotICAgIGlmIChjcHMgPiBwZWFrY3BzICYmICAgICAgICAgICAgICAgIC8qIFBl YWsgdHJhbnNmZXIgcmF0ZSAqLwotICAgICAgICAgKCh3aGF0ICYgV19TRU5EICYmIHNwYWNrZXRz ID4gd3Nsb3RzICsgNCkgfHwKLQkgICghKHdoYXQgJiBXX1NFTkQpICYmIHNwYWNrZXRzID4gMTAp KSkgewotICAgICAgICBwZWFrY3BzID0gY3BzOwotICAgIH0KLSNlbmRpZiAvKiBDS19DUFMgKi8K LQotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotICAgIGlmIChmZGlzcGxhID09IFhZRkRfUykgeyAg ICAgICAgICAgIC8qIENSVCBkaXNwbGF5ICovCi0gICAgICAgIGNoYXIgYnVmZmVyWzEyOF07Ci0J LyogVGhlc2Ugc3ByaW50ZnMgc2hvdWxkIGJlIHNhZmUgdW50aWwgd2UgaGF2ZSAzMi1kaWdpdCBu dW1iZXJzICovCi0KLSAgICAgICAgaWYgKHBkID4gLTFMKQotICAgICAgICAgIHNwcmludGYoYnVm ZmVyLCAiJWMlOXMlNWxkJSUlOGxkJThsZCAiLCBDUixja2ZzdG9hKGhvd2ZhcikscGQsdHAscHMp OwotICAgICAgICBlbHNlCi0gICAgICAgICAgc3ByaW50ZihidWZmZXIsICIlYyU5cyAgICAgICU4 bGQlOGxkICIsIENSLGNrZnN0b2EoaG93ZmFyKSx0cCxwcyk7Ci0gICAgICAgIGNvbm9sKGJ1ZmZl cik7Ci0gICAgICAgIGhwb3MgPSAzMTsKLSAgICB9IGVsc2UgaWYgKGZkaXNwbGEgPT0gWFlGRF9S KSB7ICAgICAvKiBTRVJJQUwgKi8KLSAgICAgICAgbG9uZyBpLCBrOwotICAgICAgICBpZiAoaG93 ZmFyIC0gb2xkZmZjIDwgMTAyNCkgICAgIC8qIFVwZGF0ZSBkaXNwbGF5IGV2ZXJ5IDFLICovCi0g ICAgICAgICAgcmV0dXJuOwotICAgICAgICBvbGRmZmMgPSBob3dmYXI7ICAgICAgICAgICAgICAg IC8qIFRpbWUgZm9yIG5ldyBkaXNwbGF5ICovCi0gICAgICAgIGsgPSAoaG93ZmFyIC8gMTAyNEwp IC0gZG90czsgICAgLyogSG93IG1hbnkgSyBzbyBmYXIgKi8KLSAgICAgICAgZm9yIChpID0gMEw7 IGkgPCBrOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChocG9zKysgPiAoY21kX2NvbHMgLSAzKSkg eyAvKiBUaW1lIHRvIHdyYXA/ICovCi0gICAgICAgICAgICAgICAgY29ub2xsKCIiKTsKLSAgICAg ICAgICAgICAgICBocG9zID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbm9jKCcu Jyk7ICAgICAgICAgICAgICAgICAvKiBQcmludCBhIGRvdCBmb3IgdGhpcyBLICovCi0gICAgICAg ICAgICBkb3RzKys7ICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgaXQgKi8KLSAgICAgICAg fQotICAgIH0KLX0KLQotCi0vKiAgQyBLIFMgQyBSIEUgRSBOICAtLSAgU2NyZWVuIGRpc3BsYXkg ZnVuY3Rpb24gICovCi0KLS8qCi0gIGNrc2NyZWVuKGYsYyxuLHMpCi0gICAgZiAtIGFyZ3VtZW50 IGRlc2NyaXB0b3IKLSAgICBjIC0gYSBjaGFyYWN0ZXIgb3Igc21hbGwgaW50ZWdlcgotICAgIG4g LSBhIGxvbmcgaW50ZWdlcgotICAgIHMgLSBhIHN0cmluZy4KLQotICBhbmQgZ2xvYmFsIGZkaXNw bGEgPSBTRVQgRklMRSBESVNQTEFZIHZhbHVlOgotCi0gICAgWFlGRF9OID0gTk9ORQotICAgIFhZ RkRfUiA9IFNFUklBTDogICAgIERvdHMsIGV0Yywgd29ya3Mgb24gYW55IHRlcm1pbmFsLCBldmVu IGhhcmRjb3B5LgotICAgIFhZRkRfUyA9IENSVDogICAgICAgIFdvcmtzIG9uIGFueSBDUlQsIHdy aXRlcyBvdmVyIGN1cnJlbnQgbGluZS4KLSAgICBYWUZEX0MgPSBGVUxMU0NSRUVOOiBSZXF1aXJl cyB0ZXJtaW5hbC1kZXBlbmRlbnQgc2NyZWVuIGNvbnRyb2wuCi0gICAgWFlGRF9CID0gQlJJRUY6 ICAgICAgTGlrZSBTRVJJQUwgYnV0IG9ubHkgZmlsZW5hbWUgJiBjb21wbGV0aW9uIHN0YXR1cy4K LSAgICBYWUZEX0cgPSBHVUk7ICAgICAgICBXaW5kb3dzIEdVSSwgc2FtZSBiZWhhdmlvciBhcyBG VUxMU0NSRUVOCi0qLwotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1ja3NjcmVlbihpbnQgZiwgY2hh ciBjLENLX09GRl9UIG4sY2hhciAqcykKLSNlbHNlCi1ja3NjcmVlbihmLGMsbixzKSBpbnQgZjsg Y2hhciBjOyBDS19PRkZfVCBuOyBjaGFyICpzOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBz Y3JlZW4gKi8gewotICAgIGNoYXIgYnVmWzgwXTsKLSAgICBpbnQgbGVuOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBMZW5ndGggb2Ygc3RyaW5nICovCi0jaWZkZWYgVU5JWAotI2lmbmRl ZiBOT0pDCi0gICAgaW50IG9iZzsKLV9QUk9UT1RZUCggVk9JRCBjb25iZ3QsIChpbnQpICk7Ci0j ZW5kaWYgLyogTk9KQyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICBpbnQgZnRwID0gMDsKLQot ICAgIGZ0cCA9ICh3aGF0ICYgV19GVFApID8gMSA6IDA7CS8qIEZUUCBvciBLZXJtaXQ/ICovCi0K LSAgICBpZiAoIWxvY2FsICYmICFmdHApCQkJLyogSW4gcmVtb3RlIG1vZGUgLSBkb24ndCBkbyB0 aGlzICovCi0gICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXMpIHMgPSAiIjsKLQotICAgIGlmICgh ZnhkX2luaXRlZCkgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgaWYgbmVjZXNzYXJ5 ICovCi0gICAgICBmeGRpbml0KGZkaXNwbGEpOwotCi0jaWZkZWYgVU5JWAotI2lmbmRlZiBOT0pD Ci0gICAgb2JnID0gYmFja2dyZDsgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmlvdXMgYmFj a2dyb3VuZCBzdGF0dXMgKi8KLSAgICBjb25iZ3QoMSk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTZWUgaWYgcnVubmluZyBpbiBiYWNrZ3JvdW5kICovCi0gICAgaWYgKCFiYWNrZ3JkICYm IG9iZykgeyAgICAgICAgICAgICAgLyogSnVzdCBjYW1lIGludG8gZm9yZWdyb3VuZD8gKi8KLSAg ICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAvKiBQdXQgY29uc29sZSBiYWNr IGluIENCUkVBSyBtb2RlICovCi0gICAgICAgIHNldGludCgpOyAgICAgICAgICAgICAgICAgICAg ICAgLyogUmVzdG9yZSBpbnRlcnJ1cHRzICovCi0gICAgfQotI2VuZGlmIC8qIE5PSkMgKi8KLSNl bmRpZiAvKiBVTklYICovCi0KLSAgICBpZiAoKGYgIT0gU0NSX1dNKSAmJiAoZiAhPSBTQ1JfRU0p KSAvKiBBbHdheXMgdXBkYXRlIHdhcm5pbmdzICYgZXJyb3JzICovCi0gICAgICBpZiAoIWRpc3Bs YSB8fAotICAgICAgICAgIChiYWNrZ3JkICYmIGJnc2V0KSB8fAotICAgICAgICAgIGZkaXNwbGEg PT0gWFlGRF9OIHx8Ci0gICAgICAgICAgKHNlcnZlciAmJiAhc3J2ZGlzKQotICAgICAgICAgICkK LSAgICAgICAgcmV0dXJuOwotCi0jaWZkZWYgVk1TCi0gICAgaWYgKGYgPT0gU0NSX0ZOKSAgICAg ICAgICAgICAgICAgICAgLyogVk1TIC0gc2hvcnRlbiB0aGUgbmFtZSAqLwotICAgICAgcyA9IHpy ZWxuYW1lKHMsemd0ZGlyKCkpOwotI2VuZGlmIC8qIFZNUyAqLwotCi0gICAgaWYgKGRlc3QgPT0g REVTVF9TKSAgICAgICAgICAgICAgICAgLyogU0VUIERFU1RJTkFUSU9OIFNDUkVFTiAqLwotICAg ICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB3b3VsZCBpbnRlcmZlcmUu Li4gKi8KLQotI2lmZGVmIEtVSQotICAgIGlmIChmZGlzcGxhID09IFhZRkRfRykgeyAgICAgICAg ICAgIC8qIElmIGd1aSBkaXNwbGF5IHNlbGVjdGVkICovCi0gICAgICAgIHNjcmVlbmcoZixjLG4s cyk7ICAgICAgICAgICAgICAgLyogY2FsbCB0aGUgZ3VpIHZlcnNpb24gKi8KLSAgICAgICAgcmV0 dXJuOwotICAgIH0KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDS19DVVJTRVMKLSAgICBpZiAo ZmRpc3BsYSA9PSBYWUZEX0MpIHsgICAgICAgICAgICAvKiBJZiBmdWxsc2NyZWVuIGRpc3BsYXkg c2VsZWN0ZWQgKi8KLSAgICAgICAgc2NyZWVuYyhmLGMsbixzKTsgICAgICAgICAgICAgICAvKiBj YWxsIHRoZSBmdWxsc2NyZWVuIHZlcnNpb24gKi8KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNl bmRpZiAvKiBDS19DVVJTRVMgKi8KLQotICAgIGxlbiA9IChpbnQpc3RybGVuKHMpOyAgICAgICAg ICAgICAgIC8qIExlbmd0aCBvZiBzdHJpbmcgKi8KLQotICAgIHN3aXRjaCAoZikgeyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEhhbmRsZSBvdXIgZnVuY3Rpb24gY29kZSAqLwotICAgICAgY2Fz ZSBTQ1JfRk46ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lICovCi0gICAgICAgIGlm IChmZGlzcGxhID09IFhZRkRfQikgewotI2lmZGVmIE5FV0ZUUAotCSAgICBpZiAoZnRwKQotCSAg ICAgIHByaW50ZigiICVzICVzIiwgd2hhdCAmIFdfU0VORCA/ICJQVVQiIDogIkdFVCIsIHMpOwot CSAgICBlbHNlCi0jZW5kaWYgLyogTkVXRlRQICovCi0JICAgICAgcHJpbnRmKCIgJXMgJXMiLCB3 aGF0ICYgV19TRU5EID8gIlNFTkQiIDogIlJFQ1YiLCBzKTsKLSNpZmRlZiBVTklYCi0gICAgICAg ICAgICBmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgICAgICByZXR1 cm47Ci0gICAgICAgIH0KLSNpZmRlZiBNQUMKLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2wocyk7 IGNvbm9jKFNQKTsgaHBvcyA9IGxlbiArIDE7Ci0jZWxzZQotICAgICAgICBja3N0cm5jcHkoZmJ1 ZixzLDgwKTsKLSAgICAgICAgYWJ1ZlswXSA9IGEyYnVmWzBdID0gTlVMOwotICAgICAgICBuZXdk cHkgPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIE5ldyBmaWxlIHNvIHJlZnJlc2ggZGlzcGxh eSAqLwotI2VuZGlmIC8qIE1BQyAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NS X0FOOiAgICAgICAgICAgICAgICAgICAgICAvKiBBcy1uYW1lICovCi0gICAgICAgIGlmIChmZGlz cGxhID09IFhZRkRfQikgewotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHByaW50ZigiKGFz ICVzKSAiLHMpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIHJldHVybjsKLSAg ICAgICAgfQotI2lmZGVmIE1BQwotICAgICAgICBpZiAoaHBvcyArIGxlbiA+IDc1KSB7IGNvbm9s bCgiIik7IGhwb3MgPSAwOyB9Ci0gICAgICAgIGNvbm9sKCI9PiAiKTsgY29ub2wocyk7Ci0gICAg ICAgIGlmICgoaHBvcyArPSAobGVuICsgMykpID4gNzgpIHsgY29ub2xsKCIiKTsgaHBvcyA9IDA7 IH0KLSNlbHNlCi0gICAgICAgIGlmIChhYnVmWzBdKSB7Ci0gICAgICAgICAgICBja3N0cm5jcHko YTJidWYscyw4MCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBja3N0cm5jcHkoYWJ1 ZixzLDgwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE1BQyAqLwotICAgICAgICByZXR1cm47Ci0K LSAgICAgIGNhc2UgU0NSX0ZTOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlLXNpemUgKi8K LSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0gICAgICAgICAgICBwcmludGYoIiAo JXMpICglcyBieXRlJXMpIiwKLSNpZmRlZiBOT0lDUAotICAgICAgICAgICAgICAgICAgIChiaW5h cnkgPyAiYmluYXJ5IiA6ICJ0ZXh0IikKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgZ2Ztb2Rl KGJpbmFyeSwwKQotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgICAgICAgICAgICAgICAgLCBja2Zz dG9hKG4pLCBuID09IDEgPyAiIiA6ICJzIik7Ci0jaWZkZWYgVU5JWAotICAgICAgICAgICAgZmZs dXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICAgICAgcmV0dXJuOwotICAg ICAgICB9Ci0jaWZkZWYgTUFDCi0gICAgICAgIHNwcmludGYoYnVmLCIsIFNpemU6ICVzIixja2Zz dG9hKG4pKTsgIGNvbm9sbChidWYpOyAgaHBvcyA9IDA7Ci0jZW5kaWYgLyogTUFDICovCi0gICAg ICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfWEQ6ICAgICAgICAgICAgICAgICAgICAgIC8q IFgtcGFja2V0IGRhdGEgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKQotICAgICAg ICAgIHJldHVybjsKLSNpZmRlZiBNQUMKLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2xsKHMpOyBo cG9zID0gMDsKLSNlbHNlCi0gICAgICAgIGNrc3RybmNweShmYnVmLHMsODApOwotICAgICAgICBh YnVmWzBdID0gYTJidWZbMF0gPSBOVUw7Ci0jZW5kaWYgLyogTUFDICovCi0gICAgICAgIHJldHVy bjsKLQotICAgICAgY2FzZSBTQ1JfU1Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgc3Rh dHVzICovCi0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgIGNhc2UgU1RfT0s6ICAgICAg ICAgICAgICAgICAgIC8qIFRyYW5zZmVycmVkIE9LICovCi0gICAgICAgICAgICBzaG93cGt0KCda Jyk7ICAgICAgICAgICAgICAgLyogVXBkYXRlIG51bWJlcnMgb25lIGxhc3QgdGltZSAqLwotICAg ICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0jaWZkZWYgR0ZUSU1FUgotCQlpZiAo ZnB4ZnNlY3MpCi0JCSAgcHJpbnRmKCI6IE9LICglMC4zZiBzZWMsICVsZCBjcHMpIixmcHhmc2Vj cywKLQkJCSAobG9uZykoKENLRkxPQVQpZmZjIC8gZnB4ZnNlY3MpKTsKLSNlbHNlCi0JCWlmICh4 ZnNlY3MpCi0JCSAgcHJpbnRmKCI6IE9LICglZCBzZWMsICVsZCBjcHMpIix4ZnNlY3MsZmZjL3hm c2Vjcyk7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCQlwcmludGYoIlxuIik7Ci0gICAgICAgICAg ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChocG9zICs9IDUp ID4gNzgpIGNvbm9sbCgiIik7IC8qIFdyYXAgc2NyZWVuIGxpbmUuICovCi0gICAgICAgICAgICBj b25vbGwoIiBbT0tdIik7IGhwb3MgPSAwOyAgLyogUHJpbnQgT0sgbWVzc2FnZS4gKi8KLSAgICAg ICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfUykgeyAgICAvKiBXZSBkaWRuJ3Qgc2hvdyBaIHBh Y2tldCB3aGVuICovCi0gICAgICAgICAgICAgICAgY29ub2MoJ1onKTsgICAgICAgICAgICAgLyog aXQgY2FtZSwgc28gc2hvdyBpdCBub3cuICovCi0gICAgICAgICAgICAgICAgaHBvcyA9IDE7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX0RJ U0M6ICAgICAgICAgICAgICAgICAvKiAgRGlzY2FyZGVkICovCi0gICAgICAgICAgICBpZiAoZmRp c3BsYSA9PSBYWUZEX0IpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIjogRElTQ0FSREVEXG4i KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp ZiAoKGhwb3MgKz0gMTIpID4gNzgpIGNvbm9sbCgiIik7Ci0gICAgICAgICAgICBjb25vbGwoIiBb ZGlzY2FyZGVkXSIpOyBocG9zID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg IGNhc2UgU1RfSU5UOiAgICAgICAgICAgICAgICAgIC8qICBJbnRlcnJ1cHRlZCAqLwotICAgICAg ICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI6 IElOVEVSUlVQVEVEXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBpZiAoKGhwb3MgKz0gMTQpID4gNzgpIGNvbm9sbCgiIik7Ci0gICAgICAg ICAgICBjb25vbGwoIiBbaW50ZXJydXB0ZWRdIik7IGhwb3MgPSAwOwotICAgICAgICAgICAgcmV0 dXJuOwotCi0JICBjYXNlIFNUX1NJTToKLSAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRf QikgewotCQlpZiAobiA9PSBTS1BfWE5YKQotCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZF UlJFRCAoTmV3IGZpbGUpXG4iKTsKLQkJZWxzZSBpZiAobiA9PSBTS1BfWFVQKQotCQkgIHByaW50 ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRCAoUmVtb3RlIGZpbGUgb2xkZXIpXG4iKTsKLQkJZWxz ZSBpZiAobiA9PSBTS1BfU0lNKQotCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRFxu Iik7Ci0JCWVsc2UgaWYgKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pCi0JCSAgcHJpbnRmKCI6IFNL SVBQRUQgKCVzKVxuIixza3JlYXNvbltuXSk7Ci0JCWVsc2UKLQkJICBwcmludGYoIjogU0tJUFBF RFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfSBlbHNlIGlmIChm ZGlzcGxhID09IFhZRkRfUykgewotICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRf UyAmJiBmYnVmWzBdKSB7IC8qIENSVCBkaXNwbGF5ICovCi0gICAgICAgICAgICAgICAgICAgIGNv bm9sbCgiIik7ICAgICAgICAgLyogTmV3IGxpbmUgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYg KHdoYXQgJiBXX1NFTkQpIGNvbm9sKCJXb3VsZCBTZW5kOiAiKTsgLyogQWN0aW9uICovCi0gICAg ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIGNvbm9sKCJXb3VsZCBSZWNl aXZlOiAiKTsKLSAgICAgICAgICAgICAgICAgICAgY29ub2woZmJ1Zik7Ci0gICAgICAgICAgICAg ICAgICAgIGlmICgqYWJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYWJ1Zik7IC8qIE5hbWVzICov Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqYTJidWYpIGNvbm9sKCIgPT4gIik7IGNvbm9sKGEy YnVmKTsgLyogTmFtZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgKmZidWYgPSBOVUw7ICphYnVm ID0gTlVMOyAqYTJidWYgPSBOVUw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IGNvbm9sbCgiIFtzaW11bGF0ZWRdIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgaWYgKChocG9zICs9IDEwKSA+IDc4KSBjb25vbGwoIiIpOwot ICAgICAgICAgICAgY29ub2woIiBbc2ltdWxhdGVkXSIpOyBocG9zID0gMDsKLSAgICAgICAgICAg IHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfU0tJUDogICAgICAgICAgICAgICAgIC8qICBT a2lwcGVkICovCi0gICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLQkJaWYgKG4g PT0gU0tQX1hOWCkKLQkJICBwcmludGYoIjogV09VTEQgQkUgVFJBTlNGRVJSRUQgKE5ldyBmaWxl KVxuIik7Ci0JCWVsc2UgaWYgKG4gPT0gU0tQX1hVUCkKLQkJICBwcmludGYoIjogV09VTEQgQkUg VFJBTlNGRVJSRUQgKFJlbW90ZSBmaWxlIG9sZGVyKVxuIik7Ci0JCWVsc2UgaWYgKG4gPT0gU0tQ X1NJTSkKLQkJICBwcmludGYoIjogV09VTEQgQkUgVFJBTlNGRVJSRURcbiIpOwotCQllbHNlIGlm IChuID4gMCAmJiBuIDwgbnNrcmVhc29uKQotCQkgIHByaW50ZigiOiBTS0lQUEVEICglcylcbiIs c2tyZWFzb25bbl0pOwotCQllbHNlCi0JCSAgcHJpbnRmKCI6IFNLSVBQRURcbiIpOwotICAgICAg ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZmRpc3BsYSA9PSBYWUZE X1MpIHsKLSAgICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MgJiYgZmJ1ZlswXSkg eyAvKiBDUlQgZGlzcGxheSAqLwotICAgICAgICAgICAgICAgICAgICBjb25vbGwoIiIpOyAgICAg ICAgIC8qIE5ldyBsaW5lICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5E KSBjb25vbCgiU2VuZGluZzogIik7IC8qIEFjdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICBl bHNlIGlmICh3aGF0ICYgV19SRUNWKSBjb25vbCgiUmVjZWl2aW5nOiAiKTsKLSAgICAgICAgICAg ICAgICAgICAgY29ub2woZmJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqYWJ1ZikgY29u b2woIiA9PiAiKTsgY29ub2woYWJ1Zik7IC8qIE5hbWVzICovCi0gICAgICAgICAgICAgICAgICAg IGlmICgqYTJidWYpIGNvbm9sKCIgPT4gIik7IGNvbm9sKGEyYnVmKTsgLyogTmFtZXMgKi8KLSAg ICAgICAgICAgICAgICAgICAgKmZidWYgPSBOVUw7ICphYnVmID0gTlVMOyAqYTJidWYgPSBOVUw7 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbm9sbCgiIFtza2lwcGVkXSIp OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm ICgoaHBvcyArPSAxMCkgPiA3OCkgY29ub2xsKCIiKTsKLQkgICAgY29ub2woIiAiKTsgY29ub2wo ZmJ1Zik7Ci0gICAgICAgICAgICBjb25vbGwoIiBbc2tpcHBlZF0iKTsgaHBvcyA9IDA7Ci0gICAg ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX0VSUjogICAgICAgICAgICAgICAg ICAvKiBFcnJvciAqLwotICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0gICAg ICAgICAgICAgICAgcHJpbnRmKCI6IEVSUk9SOiAlc1xuIixzKTsKLSAgICAgICAgICAgICAgICBy ZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb25vbGwoIiIpOwotICAgICAgICAg ICAgY29ub2woIkVycm9yOiAiKTsgY29ub2xsKHMpOyBocG9zID0gMDsKLSAgICAgICAgICAgIHJl dHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfTVNHOiAgICAgICAgICAgICAgICAgIC8qIE1lc3Nh Z2UgKi8KLSNpZmRlZiBORVdGVFAKLSAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikg ewotICAgICAgICAgICAgICAgIGlmIChmdHAgJiYgZnRwX2RlYikKLQkJICBwcmludGYoIjogTUVT U0FHRTogJXNcbiIscyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot I2VuZGlmIC8qIE5FV0ZUUCAqLwotICAgICAgICAgICAgY29ub2xsKCIiKTsKLSAgICAgICAgICAg IGNvbm9sKCJNZXNzYWdlOiAiKTsKLSAgICAgICAgICAgIGNvbm9sbChzKTsKLSAgICAgICAgICAg IGhwb3MgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9SRUZV OiAgICAgICAgICAgICAgICAgLyogUmVmdXNlZCAqLwotICAgICAgICAgICAgaWYgKGZkaXNwbGEg PT0gWFlGRF9CKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI6IFJFRlVTRURcbiIpOwotICAg ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZmRpc3BsYSA9PSBY WUZEX1MpIHsKLSAgICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MgJiYgZmJ1Zlsw XSkgeyAvKiBDUlQgZGlzcGxheSAqLwotICAgICAgICAgICAgICAgICAgICBjb25vbGwoIiIpOyAg ICAgICAgIC8qIE5ldyBsaW5lICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19T RU5EKSBjb25vbCgiU2VuZGluZzogIik7IC8qIEFjdGlvbiAqLwotICAgICAgICAgICAgICAgICAg ICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKSBjb25vbCgiUmVjZWl2aW5nOiAiKTsKLSAgICAgICAg ICAgICAgICAgICAgY29ub2woZmJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqYWJ1Zikg Y29ub2woIiA9PiAiKTsgY29ub2woYWJ1Zik7ICAgICAgLyogTmFtZXMgKi8KLSAgICAgICAgICAg ICAgICAgICAgaWYgKCphMmJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYTJidWYpOyAgICAvKiBO YW1lcyAqLwotICAgICAgICAgICAgICAgICAgICAqZmJ1ZiA9IE5VTDsgKmFidWYgPSBOVUw7ICph MmJ1ZiA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgY29ub2xsKCIiKTsKLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgY29ub2woIlJlZnVzZWQ6ICIpOyBjb25vbGwocyk7Ci0g ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29ub2xs KCIiKTsKLSAgICAgICAgICAgIGNvbm9sKCJSZWZ1c2VkOiAiKTsgY29ub2xsKHMpOyBocG9zID0g MDsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfSU5DOiAgICAgICAg ICAgICAgICAgIC8qIEluY29tcGxldGUgKi8KLSAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZ RkRfQikgewotICAgICAgICAgICAgICAgIHByaW50ZigiOiBJTkNPTVBMRVRFXG4iKTsKLSAgICAg ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGhwb3Mg Kz0gMTIpID4gNzgpIGNvbm9sbCgiIik7Ci0gICAgICAgICAgICBjb25vbGwoIiBbaW5jb21wbGV0 ZV0iKTsgaHBvcyA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBkZWZhdWx0 OgotICAgICAgICAgICAgY29ub2xsKCIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIHN0YXR1 cyAqKioiKTsKLSAgICAgICAgICAgIGhwb3MgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAg ICAgICB9Ci0KLSNpZmRlZiBNQUMKLSAgICAgIGNhc2UgU0NSX1BOOiAgICAgICAgICAgICAgICAg ICAgICAvKiBQYWNrZXQgbnVtYmVyICovCi0gICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikg ewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0JY2ttYWttc2coYnVmLDgwLHMsIjog Iixja2x0b2EobiksTlVMTCk7Ci0gICAgICAgIGNvbm9sKGJ1Zik7IGhwb3MgKz0gKGludClzdHJs ZW4oYnVmKTsgcmV0dXJuOwotI2VuZGlmIC8qIE1BQyAqLwotCi0gICAgICBjYXNlIFNDUl9QVDog ICAgICAgICAgICAgICAgICAgICAgLyogUGFja2V0IHR5cGUgb3IgcHNldWRvdHlwZSAqLwotICAg ICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBp ZiAoYyA9PSAnWScpIHJldHVybjsgICAgICAgICAgIC8qIERvbid0IGJvdGhlciB3aXRoIEFDS3Mg Ki8KLSAgICAgICAgaWYgKGMgPT0gJ0QnKSB7ICAgICAgICAgICAgICAgICAvKiBJbiBkYXRhIHRy YW5zZmVyIHBoYXNlLCAqLwotICAgICAgICAgICAgc2hvd3BrdChOVUwpOyAgICAgICAgICAgICAg IC8qIHNob3cgcHJvZ3Jlc3MuICovCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNp Zm5kZWYgQU1JR0EKLSAgICAgICAgaWYgKGhwb3MrKyA+IDc3KSB7ICAgICAgICAgICAgICAvKiBJ ZiBuZWFyIHJpZ2h0IG1hcmdpbiwgKi8KLSAgICAgICAgICAgIGNvbm9sbCgiIik7ICAgICAgICAg ICAgICAgICAvKiBTdGFydCBuZXcgbGluZSAqLwotICAgICAgICAgICAgaHBvcyA9IDA7ICAgICAg ICAgICAgICAgICAgIC8qIGFuZCByZXNldCBjb3VudGVyLiAqLwotICAgICAgICB9Ci0jZW5kaWYg LyogQU1JR0EgKi8KLSAgICAgICAgaWYgKGMgPT0gJ1onICYmIGZkaXNwbGEgPT0gWFlGRF9TKQot ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNvbm9jKGMpOyAgICAg ICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgdGhlIHBhY2tldCB0eXBlLiAqLwotI2lmZGVmIEFN SUdBCi0gICAgICAgIGlmIChjID09ICdHJykgY29ub2xsKCIiKTsgICAgICAgLyogTmV3IGxpbmUg YWZ0ZXIgRyBwYWNrZXRzICovCi0jZW5kaWYgLyogQU1JR0EgKi8KLSAgICAgICAgcmV0dXJuOwot Ci0gICAgICBjYXNlIFNDUl9UQzogICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24g Y29tcGxldGUgKi8KLSAgICAgICAgaWYgKHhmcmJlbCkgYmxlZXAoQlBfTk9URSk7Ci0gICAgICAg IGlmIChmZGlzcGxhID09IFhZRkRfQikgeyAgICAgICAgLyogQnJpZWYgZGlzcGxheS4uLiAqLwot ICAgICAgICAgICAgaWYgKGZpbGNudCA+IDEpIHsKLSAgICAgICAgICAgICAgICBsb25nIGZ4Owot ICAgICAgICAgICAgICAgIGZ4ID0gZmlsY250IC0gZmlscmVqOwotICAgICAgICAgICAgICAgIHBy aW50ZigiIFNVTU1BUlk6ICVsZCBmaWxlJXMiLCBmeCwgKChmeCA9PSAxKSA/ICIiIDogInMiKSk7 Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIsICVzIGJ5dGUlcyIsIGNrZnN0b2EodGZjKSwgKCh0 ZmMgPT0gMSkgPyAiIiA6ICJzIikpOwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgICAgICBw cmludGYoIiwgJTAuM2Ygc2VjLCAlbGQgY3BzIiwgZnB0c2VjcywgdGZjcHMpOwotI2Vsc2UKLSAg ICAgICAgICAgICAgICBwcmludGYoIiwgJWxkIHNlYywgJWxkIGNwcyIsIHRzZWNzLCB0ZmNwcyk7 Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgICAgICAgICAgICAgIHByaW50ZigiLlxuIik7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25vbGwoIiIpOwot ICAgICAgICB9Ci0jaWZkZWYgVU5JWAotICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAv KiBVTklYICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfRU06ICAgICAgICAg ICAgICAgICAgICAgIC8qIEVycm9yIG1lc3NhZ2UgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0g WFlGRF9CKSB7Ci0gICAgICAgICAgICBwcmludGYoIiBFUlJPUjogJXNcbiIscyk7Ci0gICAgICAg ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2MoJz8nKTsg Y29ub2xsKHMpOyBocG9zID0gMDsgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9XTTogICAgICAg ICAgICAgICAgICAgICAgLyogV2FybmluZyBtZXNzYWdlICovCi0gICAgICAgIGlmIChmZGlzcGxh ID09IFhZRkRfQikgewotICAgICAgICAgICAgcHJpbnRmKCIgV0FSTklORzogJXNcbiIscyk7Ci0g ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2xs KHMpOyBocG9zID0gMDsgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9NUzogICAgICAgICAgICAg ICAgICAgICAgLyogTWVzc2FnZSBmcm9tIG90aGVyIEtlcm1pdCAqLwotICAgICAgICBpZiAoZmRp c3BsYSA9PSBYWUZEX0IpIHsKLSAgICAgICAgICAgIHByaW50ZigiIE1FU1NBR0U6ICVzXG4iLHMp OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNvbm9sbCgiIik7IGNv bm9sbChzKTsgaHBvcyA9IDA7IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfVFU6ICAgICAgICAg ICAgICAgICAgICAgIC8qIFVuZGVsaW1pdGVkIHRleHQgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEg PT0gWFlGRF9CKQotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKChocG9zICs9IGxlbikg PiA3NykgeyBjb25vbGwoIiIpOyBocG9zID0gbGVuOyB9Ci0gICAgICAgIGNvbm9sKHMpOyByZXR1 cm47Ci0KLSAgICAgIGNhc2UgU0NSX1ROOiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRl bGltaXRlZCBhdCBiZWdpbm5pbmcgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKQot ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2wocyk7IGhwb3MgPSBs ZW47IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfVFo6ICAgICAgICAgICAgICAgICAgICAgIC8q IFRleHQgZGVsaW1pdGVkIGF0IGVuZCAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0Ip Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoKGhwb3MgKz0gbGVuKSA+IDc3KSB7IGNv bm9sbCgiIik7IGhwb3MgPSBsZW47IH0KLSAgICAgICAgY29ub2xsKHMpOyByZXR1cm47Ci0KLSAg ICAgIGNhc2UgU0NSX1FFOiAgICAgICAgICAgICAgICAgICAgICAvKiBRdWFudGl0eSBlcXVhbHMg Ki8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKQotICAgICAgICAgIHJldHVybjsKLQlj a21ha21zZyhidWYsODAscywiOiAiLGNrbHRvYShuKSxOVUxMKTsKLSAgICAgICAgY29ub2xsKGJ1 Zik7IGhwb3MgPSAwOyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0NXOiAgICAgICAgICAgICAg ICAgICAgICAvKiBDbG9zZSBmdWxsc2NyZWVuIHdpbmRvdyAqLwotICAgICAgICByZXR1cm47ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHdpbmRvdyB0byBjbG9zZSAqLwotCi0gICAgICBj YXNlIFNDUl9DRDoKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBj b25vbGwoIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgb2JqZWN0ICoqKiIpOwotICAgICAg ICBocG9zID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLSNlbmRpZiAvKiBOT0RJU1BM QVkgKi8KLQotLyogIEUgUiBNIFMgRyAgLS0gIE5vbmZhdGFsIGVycm9yIG1lc3NhZ2UgICovCi0K LS8qIFNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIHByaW50aW5nIHRoZSBtZXNzYWdlIHRleHQgZnJv bSBhbiBFcnJvciBwYWNrZXQuICovCi0KLVZPSUQKLWVybXNnKG1zZykgY2hhciAqbXNnOyB7ICAg ICAgICAgICAgICAgICAvKiBQcmludCBlcnJvciBtZXNzYWdlICovCi0gICAgZGVidWcoRjExMCwi ZXJtc2ciLG1zZywwKTsKLSAgICBpZiAobG9jYWwpCi0gICAgICB4eHNjcmVlbihTQ1JfRU0sMCww TCxtc2cpOwotICAgIHRsb2coRjExMCwiUHJvdG9jb2wgRXJyb3I6Iixtc2csMEwpOwotfQotI2Vu ZGlmIC8qIE5PWEZFUiAqLwotCi1WT0lECi1zZXRzZXNsb2coeCkgaW50IHg7IHsKLSAgICBzZXNs b2cgPSB4OwotI2lmZGVmIEtVSQotICAgIEt1aVNldFByb3BlcnR5KEtVSV9URVJNX0NBUFRVUkUs eCwwKTsKLSNlbmRpZiAvKiBLVUkgKi8KLX0KLQotVk9JRAotZG9jbGVhbihmYykgaW50IGZjOyB7 ICAgICAgICAgICAgICAgICAgIC8qIEdlbmVyYWwgY2xlYW51cCAqLwotI2lmZGVmIE9TMk9SVU5J WAotICAgIGV4dGVybiBpbnQgdHR5ZmQ7Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0gICAgZXh0 ZXJuIGludCAga2VlcDsKLSAgICBleHRlcm4gaW50IGV4aXRoYW5ndXA7Ci0jaWZuZGVmIE5PWEZF UgotICAgIGV4dGVybiBjaGFyIGZpbG5hbVtdOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2lmbmRl ZiBOT0lDUAotICAgIGludCB4OwotCi0gICAgaWYgKGZjID4gMCkKLSAgICAgIGRvc3RvcCgpOyAg ICAgICAgICAgICAgICAgLyogU3RvcCBhbGwgY29tbWFuZCBmaWxlcyBhbmQgZW5kIG1hY3JvcyAq LwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKHBrdGxvZykg ewotICAgICAgICAqcGt0ZmlsID0gJ1wwJzsKLSAgICAgICAgcGt0bG9nID0gMDsKLSAgICAgICAg emNsb3NlKFpQRklMRSk7Ci0gICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIGlmIChzZXNs b2cpIHsKLSAgICAgICAgKnNlc2ZpbCA9ICdcMCc7Ci0gICAgICAgIHNldHNlc2xvZygwKTsKLSAg ICAgICAgemNsb3NlKFpTRklMRSk7Ci0gICAgfQotI2lmZGVmIFRMT0cKLSAgICBpZiAodHJhbG9n KSB7Ci0gICAgICAgIHRsb2coRjEwMCwiVHJhbnNhY3Rpb24gTG9nIENsb3NlZCIsIiIsMEwpOwot ICAgICAgICAqdHJhZmlsID0gJ1wwJzsKLSAgICAgICAgdHJhbG9nID0gMDsKLSAgICAgICAgemNs b3NlKFpURklMRSk7Ci0gICAgfQotI2VuZGlmIC8qIFRMT0cgKi8KLQotICAgIGRlYnVnKEYxMDAs ImRvY2xlYW4gY2FsbGluZyBkb2xvZ2VuZCIsIiIsMCk7Ci0gICAgZG9sb2dlbmQoKTsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogRW5kIGN1cnJlbnQgbG9nIHJlY29yZCBpZiBhbnkgKi8KLSNp ZmRlZiBDT01NRU5UCi0gICAgaWYgKGRpYWxvZykgeyAgICAgICAgICAgICAgICAgICAgICAgLyog SWYgY29ubmVjdGlvbiBsb2cgb3BlbiAqLwotCWRpYWxvZyA9IDA7Ci0gICAgICAgICpkaWFmaWwg PSAnXDAnOyAgICAgICAgICAgICAgICAgLyogY2xvc2UgaXQuICovCi0gICAgICAgIHpjbG9zZSha RElGSUwpOwotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZm5kZWYgTk9JQ1AKLSNp Zm5kZWYgTk9TUEwKLSAgICB6Y2xvc2UoWlJGSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBS RUFEIGFuZCBXUklURSBmaWxlcywgaWYgYW55LiAqLwotICAgIHpjbG9zZShaV0ZJTEUpOwotI2lm bmRlZiBOT1hGRVIKLSAgICB6Y2xvc2UoWklGSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBB bmQgb3RoZXIgZmlsZXMgdG9vICovCi0gICAgeCA9IGNoa2ZuKFpPRklMRSk7CQkJLyogRG93bmxv YWQgaW4gcHJvZ3Jlc3M/ICovCi0gICAgZGVidWcoRjExMSwiZG9jbGVhbiBjaGtmbiBaT0ZJTEUi LGZpbG5hbSx4KTsKLSAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIGtlZXAiLCIiLGtlZXApOwotICAg IHpjbG9zZShaT0ZJTEUpOwkJCS8qIENsb3NlIG91dHB1dCBmaWxlICovCi0gICAgaWYgKHggPiAw ICYmICFrZWVwKSB7CQkvKiBJZiBpdCB3YXMgYmVpbmcgZG93bmxvYWRlZCAqLwotCWlmIChmaWxu YW1bMF0pCi0JICB4ID0gemRlbGV0KGZpbG5hbSk7CQkvKiBEZWxldGUgaWYgSU5DT01QTEVURSA9 IERJU0NBUkQgKi8KLQlkZWJ1ZyhGMTExLCJkb2NsZWFuIGRvd25sb2FkIGZpbGVuYW1lIixmaWxu YW0seCk7Ci0gICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHpjbG9zZShaU1lTRk4pOwot ICAgIHpjbG9zZShaTUZJTEUpOwotCi0gICAgaWYgKGZjIDwgMSkgeyAgICAgICAgICAgICAgICAg ICAgICAgLyogUkVTRVRpbmcsIG5vdCBFWElUaW5nICovCi0jaWZkZWYgREVCVUcKLSAgICAgICAg aWYgKGRlYmxvZykgeyAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSB0aGUgZGVidWcgbG9nLiAq LwotICAgICAgICAgICAgKmRlYmZpbCA9ICdcMCc7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwot ICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAq LwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyog Tk9JQ1AgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgZGVidWcoRjEwMSwiZG9jbGVhbiBleGl0 aGFuZ3VwIiwiIixleGl0aGFuZ3VwKTsKLSAgICBpZiAobG9jYWwgJiYgZXhpdGhhbmd1cCkgewkJ LyogQ2xvc2UgY29tbXVuaWNhdGlvbiBjb25uZWN0aW9uICovCi0gICAgICAgIGV4dGVybiBpbnQg aGFzbG9jazsKLQlpbnQgeDsKLQkKLQl4ID0gdHRjaGsoKTsKLQlkZWJ1ZyhGMTAxLCJkb2NsZWFu IHR0Y2hrKCkiLCIiLHgpOwotI2lmZGVmIE9TMk9SVU5JWAotCWRlYnVnKEYxMDEsImRvY2xlYW4g dHR5ZmQiLCIiLHR0eWZkKTsKLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSAgICAgICAgaWYgKHgg Pj0gMAotI2lmZGVmIE9TMgotICAgICAgICAgICAgfHwgdHR5ZmQgIT0gLTEKLSNlbHNlCi0jaWZk ZWYgVU5JWAotICAgICAgICAgICAgfHwgaGFzbG9jayAgICAgICAgICAgICAgICAgIC8qIE1ha2Ug c3VyZSB3ZSBnZXQgbG9ja2ZpbGUhICovCi0gICAgICAgICAgICB8fCAoIW5ldHdvcmsgJiYgdHR5 ZmQgPiAtMSkKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAg ICApIHsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgd2FzY2xvc2VkLCB3aHljbG9zZWQ7Ci0JICAg IGRlYnVnKEYxMDAsImRvY2xlYW4gaGFuZ2luZyB1cCBhbmQgY2xvc2luZyIsIiIsMCk7Ci0gICAg ICAgICAgICBpZiAobXNnZmxnKSB7Ci0jaWZkZWYgVU5JWAotICAgICAgICAgICAgICAgIGZmbHVz aChzdGRvdXQpOwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgICAgICAgICBwcmludGYoIkNs b3NpbmcgJXMuLi4iLHR0bmFtZSk7Ci0gICAgICAgICAgICB9Ci0jaWZuZGVmIE5PRElBTAotICAg ICAgICAgICAgbWRtaHVwKCk7ICAgICAgICAgICAgICAgICAgIC8qIEhhbmd1cCB0aGUgbW9kZW0/ Pz8gKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSAgICAgICAgICAgIHR0Y2xvcygwKTsgICAgICAg ICAgICAgICAgICAvKiBDbG9zZSBleHRlcm5hbCBsaW5lLCBpZiBhbnkgKi8KLSAgICAgICAgICAg IGlmIChtc2dmbGcpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIk9LXG4iKTsKLSNpZmRlZiBV TklYCi0gICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogVU5JWCAqLwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHdhc2Nsb3NlZCkgewotICAgICAgICAgICAg ICAgIHdoeWNsb3NlZCA9IFdDX0NMT1M7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICAgICAg aWYgKG5tYWMpIHsgICAgICAgICAgICAgLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLwotICAgICAg ICAgICAgICAgICAgICBpbnQgazsgICAgICAgICAgICAgIC8qIFllcyAqLwotICAgICAgICAgICAg ICAgICAgICBrID0gbWxvb2sobWFjdGFiLCJvbl9jbG9zZSIsbm1hYyk7ICAvKiBMb29rIHRoaXMg dXAgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj0gMCkgeyAgICAgICAgICAgICAgICAg ICAgICAgLyogSWYgZm91bmQsICovCi0gICAgICAgICAgICAgICAgICAgICAgICB3YXNjbG9zZWQg PSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpbnRmKCJPTl9DTE9TRSBET0NMRUFO XG4iKTsgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICoobWFjdGFiW2tdLmt3ZCkgPSBOVUw7 ICAgICAgICAgLyogU2VlIGNvbW1lbnQgYmVsb3cgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg IGlmIChkb2RvKGssY2tpdG9hKHdoeWNsb3NlZCksMCkgPiAtMSkgLyogc2V0IGl0IHVwLCAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgICAgICAv KiBhbmQgZXhlY3V0ZSBpdCAqLwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgICAgICAgd2FzY2xvc2VkID0gMDsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBja3N0cm5jcHkodHRuYW1lLGRmdHR5 LFRUTkFNTEVOKTsgLyogUmVzdG9yZSBkZWZhdWx0IHR0eSAqLwotICAgICAgICBsb2NhbCA9IGRm bG9jOyAgICAgICAgICAgICAgICAgIC8qIEFuZCBkZWZhdWx0IHJlbW90ZS9sb2NhbCBzdGF0dXMg Ki8KLSAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICBlbHNlIGlmIChsb2NhbCkgZGVidWcoRjEwMCwi ZG9jbGVhbiBoYW5ndXAvY2xvc2Ugc2tpcHBlZCIsIiIsMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8K LSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRlZiBORVdGVFAKLSAgICBmdHBieWUoKTsJCQkJ LyogSWYgRlRQIGNvbm5lY3Rpb24gb3BlbiwgY2xvc2UgaXQgKi8KLSNlbmRpZiAvKiBORVdGVFAg Ki8KLQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICB0dGNsb3MoMCk7CQkJ LyogSWYgSUtTRCwgY2xvc2Ugc29ja2V0ICovCi0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZuZGVm IE5PU1BMCi0vKgotICBJZiBhIG1hY3JvIG5hbWVkICJvbl9leGl0IiBpcyBkZWZpbmVkLCBleGVj dXRlIGl0LiAgQWxzbyByZW1vdmUgaXQgZnJvbSB0aGUKLSAgbWFjcm8gdGFibGUsIGluIGNhc2Ug aXRzIGRlZmluaXRpb24gaW5jbHVkZXMgYW4gRVhJVCBvciBRVUlUIGNvbW1hbmQsIHdoaWNoCi0g IHdvdWxkIGNhdXNlIG11Y2ggcmVjdXJzaW9uIGFuZCB3b3VsZCBwcmV2ZW50IHRoZSBwcm9ncmFt IGZyb20gZXZlciBhY3R1YWxseQotICBFWElUaW5nLgotKi8KLSAgICBpZiAobm1hYykgeyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCi0gICAgICAgIGlu dCBrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWWVzICovCi0gICAgICAgIGNoYXIgKiBj bWQgPSAib25fZXhpdCI7ICAgICAgICAgLyogTVNWQyAyLnggY29tcGlsZXIgZXJyb3IgKi8KLSAg ICAgICAgayA9IG1sb29rKG1hY3RhYixjbWQsbm1hYyk7ICAgICAvKiBMb29rIHVwICJvbl9leGl0 IiAqLwotICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgICAgIC8qIElmIGZvdW5k LCAqLwotI2lmZGVmIENPTU1FTlQKLQkgICAgLyogVGhpcyBtYWtlcyBhIG1lc3MgaWYgT05fRVhJ VCBpdHNlbGYgZXhlY3V0ZXMgbWFjcm9zICovCi0gICAgICAgICAgICAqKG1hY3RhYltrXS5rd2Qp ID0gTlVMOyAgICAgLyogcG9rZSBpdHMgbmFtZSBmcm9tIHRoZSB0YWJsZSwgKi8KLSNlbHNlCi0J ICAgIC8qIFJlcGxhY2UgdGhlIGtleXdvcmQgd2l0aCBzb21ldGhpbmcgdGhhdCBkb2Vzbid0IHdy ZWNrIHRoZSAqLwotCSAgICAvKiBvcmRlciBvZiB0aGUga2V5d29yZCB0YWJsZSAqLwotCSAgICBj a3N0cm5jcHkobWFjdGFiW2tdLmt3ZCwib25fZXh4eCIsOCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgICAgICAgaWYgKGRvZG8oaywiIiwwKSA+IC0xKSAgICAgIC8qIHNldCBpdCB1cCwg Ki8KLSAgICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAgICAvKiBhbmQgZXhlY3V0 ZSBpdCAqLwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0vKgotICBQdXQg Y29uc29sZSB0ZXJtaW5hbCBiYWNrIHRvIG5vcm1hbC4gIFRoaXMgaXMgZG9uZSBoZXJlIGJlY2F1 c2UgdGhlCi0gIE9OX0VYSVQgbWFjcm8gY2FsbHMgdGhlIHBhcnNlciwgd2hpY2ggbWVkZGxlcyB3 aXRoIGNvbnNvbGUgdGVybWluYWwgbW9kZXMuCi0qLwotICAgIGNvbnJlcygpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgY29uc29sZSB0ZXJtaW5hbC4gKi8KLQotI2lmZGVm IENPTU1FTlQKLS8qIFNob3VsZCBiZSBubyBuZWVkIGZvciB0aGlzLCBhbmQgbWF5YmUgaXQncyBz Y3Jld2luZyB0aGluZ3MgdXA/ICovCi0gICAgY29ubm9pKCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVHVybiBvZmYgY29uc29sZSBpbnRlcnJ1cHQgdHJhcHMgKi8KLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLSAgICAvKiBEZWxldGUgdGhlIFN0YXJ0dXAgRmlsZSBpZiB3ZSBhcmUgc3Vw cG9zZWQgdG8uICovCi0jaWZuZGVmIE5PSUNQCi0gICAgewotICAgICAgICBleHRlcm4gaW50IERl bGV0ZVN0YXJ0dXBGaWxlOwotICAgICAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIERlbGV0ZVN0YXJ0 dXBGaWxlIixjbWRmaWwsRGVsZXRlU3RhcnR1cEZpbGUpOwotICAgICAgICBpZiAoRGVsZXRlU3Rh cnR1cEZpbGUpIHsKLSAgICAgICAgICAgIGludCByYyA9IHpkZWxldChjbWRmaWwpOwotICAgICAg ICAgICAgZGVidWcoRjExMSwiZG9jbGVhbiB6ZGVsZXQiLGNtZGZpbCxyYyk7Ci0gICAgICAgIH0K LSAgICB9Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICBzeXNjbGVhbnVwKCk7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBTeXN0ZW0tZGVwZW5kZW50IGNsZWFudXAsIGxhc3QgKi8KLX0KLQotLyog IEQgTyBFIFggSSBUICAtLSAgRXhpdCBmcm9tIHRoZSBwcm9ncmFtLiAgKi8KLQotLyoKLSAgRmly c3QgYXJnIGlzIGdlbmVyYWwsIHN5c3RlbS1pbmRlcGVuZGVudCBzeW1ib2w6IEdPT0RfRVhJVCBv ciBCQURfRVhJVC4KLSAgSWYgc2Vjb25kIGFyZyBpcyAtMSwgdGFrZSAxc3QgYXJnIGxpdGVyYWxs eS4KLSAgSWYgc2Vjb25kIGFyZyBpcyBub3QgLTEsIHdvcmsgaXQgaW50byB0aGUgZXhpdCBjb2Rl LgotKi8KLVZPSUQKLWRvZXhpdChleGl0c3RhdCxjb2RlKSBpbnQgZXhpdHN0YXQsIGNvZGU7IHsK LSAgICBleHRlcm4gaW50IHhfbG9nZ2VkLCBxdWl0dGluZzsKLSNpZmRlZiBPUzIKLSAgICBleHRl cm4gaW50IGRpc3BsYXlfZGVtbzsKLSAgICBleHRlcm4gaW50IFN5c0luaXRlZDsKLSNlbmRpZiAv KiBPUzIgKi8KLSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIEtSQjQKLSAgICBleHRlcm4gaW50 IGtyYjRfYXV0b2RlbDsKLSNlbmRpZiAvKiBLUkI0ICovCi0jaWZkZWYgS1JCNQotICAgIGV4dGVy biBpbnQga3JiNV9hdXRvZGVsOwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJC RVJPUyAqLwotCi0jaWZkZWYgVk1TCi0gICAgY2hhciBlbnZzdHJbNjRdOwotICAgIHN0YXRpYyAk REVTQ1JJUFRPUihzeW1uYW0sIkNLRVJNSVRfU1RBVFVTIik7Ci0gICAgc3RhdGljIHN0cnVjdCBk c2MkZGVzY3JpcHRvcl9zIHN5bXZhbDsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICBpbnQgaTsKLQot I2lmZGVmIERFQlVHCi0jaWZkZWYgVVNFX0xVQ0FDSEUKLSAgICBleHRlcm4gbG9uZyBsdWNhbGxz LCBsdWhpdHMsIHh4aGl0cywgbHVsb29wOwotICAgIGV4dGVybiBpbnQgbHVzaXplOwotI2VuZGlm IC8qIFVTRV9MVUNBQ0hFICovCi0jaWZuZGVmIE5PU1BMCi0gICAgZXh0ZXJuIGludCBjbWRzdGF0 c1tdOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICBxdWl0dGluZysrOwotCi0jaWZkZWYgT1My Ci0gICAgaWYgKCAhU3lzSW5pdGVkICkgewotICAgICAgICBzdGF0aWMgaW50IGluaXRpbmcgPSAw OwotICAgICAgICBpZiAoIGluaXRpbmcgKQotCSAgZXhpdCgyNTMpOwotICAgICAgICBpbml0aW5n ID0gMTsKLSAgICAgICAgc3lzaW5pdCgpOwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAg IGlmIChkZWJsb2cpIHsKLSNpZmRlZiBVU0VfTFVDQUNIRQotCWRlYnVnKEYxMDEsImxvb2t1cCBj YWNoZSBzaXplIiwiIixsdXNpemUpOwotCWRlYnVnKEYxMDEsImxvb2t1cCBjYWxscyAuLi4uIiwi IixsdWNhbGxzKTsKLQlkZWJ1ZyhGMTAxLCJsb29rdXAgY2FjaGUgaGl0cyIsIiIsbHVoaXRzKTsK LQlkZWJ1ZyhGMTAxLCJsb29rdXAgc3RhcnQgaGl0cyIsIiIseHhoaXRzKTsKLQlkZWJ1ZyhGMTAx LCJsb29rdXAgbG9vcCBpdGVyYXRpb25zIiwiIixsdWxvb3ApOwotI2VuZGlmIC8qIFVTRV9MVUNB Q0hFICovCi0jaWZuZGVmIE5PU1BMCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JICAg IGlmIChjbWRzdGF0c1tpXSkKLQkgICAgICBkZWJ1ZyhGMTExLCJDTVNUQVRTIixja2l0b2EoaSks Y21kc3RhdHNbaV0pOwotCX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCWRlYnVnKEYxMDEsImRvZXhp dCBleGl0c3RhdCIsIiIsZXhpdHN0YXQpOwotCWRlYnVnKEYxMDEsImRvZXhpdCBjb2RlIiwiIixj b2RlKTsKLQlkZWJ1ZyhGMTAxLCJkb2V4aXQgeGl0c3RhIiwiIix4aXRzdGEpOwotICAgIH0KLSNl bmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAvKiBJZiB3ZSBhcmUg YXV0b21hdGljYWxseSBkZXN0cm95aW5nIEtlcmJlcm9zIGNyZWRlbnRpYWxzIG9uIEV4aXQgKi8K LSAgICAvKiBkbyBpdCBub3cuICovCi0jaWZkZWYgS1JCNAotICAgIGlmIChrcmI0X2F1dG9kZWwg PT0gS1JCX0RFTF9FWCkgewotICAgICAgICBleHRlcm4gc3RydWN0IGtyYl9vcF9kYXRhIGtyYl9v cDsKLSAgICAgICAga3JiX29wLnZlcnNpb24gPSA0OwotICAgICAgICBrcmJfb3AuY2FjaGUgPSBO VUxMOwotICAgICAgICBja19rcmI0X2Rlc3Ryb3koJmtyYl9vcCk7Ci0gICAgfQotI2VuZGlmIC8q IEtSQjQgKi8KLSNpZmRlZiBLUkI1Ci0gICAgaWYgKGtyYjVfYXV0b2RlbCA9PSBLUkJfREVMX0VY KSB7Ci0gICAgICAgIGV4dGVybiBzdHJ1Y3Qga3JiX29wX2RhdGEga3JiX29wOwotICAgICAgICBl eHRlcm4gY2hhciAqIGtyYjVfZF9jYzsKLSAgICAgICAga3JiX29wLnZlcnNpb24gPSA1OwotICAg ICAgICBrcmJfb3AuY2FjaGUgPSBrcmI1X2RfY2M7Ci0gICAgICAgIGNrX2tyYjVfZGVzdHJveSgm a3JiX29wKTsKLSAgICB9Ci0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9T ICovCi0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGlmIChTeXNJbml0ZWQpCi0g ICAgewotI2lmZGVmIERDTURCVUYKLSAgICAgICAgZXh0ZXJuIHN0cnVjdCBjbWRwdHIgKmNtZHN0 azsKLSNlbHNlCi0gICAgICAgIGV4dGVybiBzdHJ1Y3QgY21kcHRyIGNtZHN0a1tdOwotI2VuZGlm IC8qIERDTURCVUYgKi8KLSAgICAgICAgZXh0ZXJuIGludCB0dF9zdGF0dXNbXTsKLSAgICAgICAg ZXh0ZXJuIGludCB2bW9kZTsKLQotICAgICAgICAvKiBJZiB0aGVyZSBpcyBhIGRlbW8gc2NyZWVu IHRvIGJlIGRpc3BsYXllZCwgZGlzcGxheSBpdCAqLwotICAgICAgICBpZiAoZGlzcGxheV9kZW1v KSB7Ci0gICAgICAgICAgICBkZW1vc2NybihWQ01EKTsKLSAgICAgICAgICAgIGRpc3BsYXlfZGVt byA9IDA7Ci0gICAgICAgIH0KLSNpZm5kZWYgS1VJCi0gICAgICAgIC8qIFRoaXMgaXMgZ29pbmcg dG8gYmUgaGlkZW91cy4gIElmIHdlIGhhdmUgYSBzdGF0dXMgbGluZSAqLwotICAgICAgICAvKiBp biB0aGUgY29tbWFuZCB3aW5kb3cgdHVybiBpdCBvZmYgYmVmb3JlIHdlIGV4aXQuICAgICAgKi8K LQotICAgICAgICBpZiAoIHR0X3N0YXR1c1tWQ01EXSAmJiB2bW9kZSA9PSBWQ01EICkgewotICAg ICAgICAgICAgZG9tYWMoIl9jbGVhcl9zdGF0dXNsaW5lIiwic2V0IGNvbW1hbmQgc3RhdHVzbGlu ZSBvZmYiLAotICAgICAgICAgICAgICAgICAgIGNtZHN0a1tjbWRsdmxdLmNjZmxncyk7Ci0gICAg ICAgICAgICBkZWxtYWMoIl9jbGVhcl9zdGF0dXNsaW5lIiwxKTsKLSAgICAgICAgICAgIFJlcXVl c3RTY3JlZW5NdXRleCgtMSk7Ci0gICAgICAgICAgICBWc2NybklzRGlydHkodm1vZGUpOwotICAg ICAgICAgICAgUmVsZWFzZVNjcmVlbk11dGV4KCk7Ci0gICAgICAgICAgICB3aGlsZSAoIElzVnNj cm5EaXJ0eSh2bW9kZSkgKQotICAgICAgICAgICAgICAgIG1zbGVlcCgyMDApOwotICAgICAgICAg ICAgUmVxdWVzdFNjcmVlbk11dGV4KC0xKTsKLSAgICAgICAgICAgIFJlbGVhc2VTY3JlZW5NdXRl eCgpOwotICAgICAgICB9Ci0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIERpYWxlclNlbmQoT1BU X0tFUk1JVF9FWElULGV4aXRzdGF0KTsKLSNpZm5kZWYgS1VJCi0gICAgICAgIGRlYnVnKEYxMDAs ImRvZXhpdCBhYm91dCB0byBtc2xlZXAiLCIiLDApOwotCi0gICAgICAgIGlmICggaXNXaW45NSgp ICkKLSAgICAgICAgICAgIG1zbGVlcCgyNTApOwotI2VuZGlmIC8qIEtVSSAqLwotICAgIH0KLSNl bmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRlZiBJS1NECi0jaWZk ZWYgQ0tfTE9HSU4KLSAgICBpZiAoaW5zZXJ2ZXIgJiYgeF9sb2dnZWQpIHsKLSNpZm5kZWYgTk9T UEwKLS8qCi0gIElmIGEgbWFjcm8gbmFtZWQgIm9uX2xvZ291dCIgaXMgZGVmaW5lZCwgZXhlY3V0 ZSBpdC4gIEFsc28gcmVtb3ZlIGl0IGZyb20gdGhlCi0gIG1hY3JvIHRhYmxlLCBpbiBjYXNlIGl0 cyBkZWZpbml0aW9uIGluY2x1ZGVzIGFuIEVYSVQgb3IgUVVJVCBjb21tYW5kLCB3aGljaAotICB3 b3VsZCBjYXVzZSBtdWNoIHJlY3Vyc2lvbiBhbmQgd291bGQgcHJldmVudCB0aGUgcHJvZ3JhbSBm cm9tIGV2ZXIgYWN0dWFsbHkKLSAgRVhJVGluZy4KLSovCi0JaWYgKG5tYWMpIHsJCQkvKiBBbnkg bWFjcm9zIGRlZmluZWQ/ICovCi0JICAgIGludCBrOwkJCS8qIFllcyAqLwotCSAgICBjaGFyICog Y21kID0gIm9uX2xvZ291dCI7CS8qIE1TVkMgMi54IGNvbXBpbGVyIGVycm9yICovCi0JICAgIGsg PSBtbG9vayhtYWN0YWIsY21kLG5tYWMpOwkvKiBMb29rIHVwICJvbl9sb2dvdXQiICovCi0JICAg IGlmIChrID49IDApIHsJCS8qIElmIGZvdW5kLCAqLwotCQkqKG1hY3RhYltrXS5rd2QpID0gTlVM OwkvKiBwb2tlIGl0cyBuYW1lIGZyb20gdGhlIHRhYmxlLCAqLwotCQlpZiAoZG9kbyhrLCIiLDAp ID4gLTEpCS8qIHNldCBpdCB1cCwgKi8KLQkJICBwYXJzZXIoMSk7CQkvKiBhbmQgZXhlY3V0ZSBp dCAqLwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIE5PU1BMICovCi0JenZsb2dvdXQoKTsKLSAgICB9 Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICBkZWJ1ZyhG MTAwLCJkb2V4aXQgYWJvdXQgdG8gZG9jbGVhbiIsIiIsMCk7Ci0gICAgZG9jbGVhbigxKTsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYW4gdXAgbW9zdCB0aGluZ3MgKi8KLQotI2lmZGVm IFZNUwotICAgIGlmIChjb2RlID09IC0xKQotICAgICAgY29kZSA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNpbmNlIHdlIHNldCB0d28gZGlmZmVyZW50IGl0ZW1zICovCi0gICAgc3By aW50ZihlbnZzdHIsIiVkIiwgZXhpdHN0YXQgfCBjb2RlKTsgLyogU0FGRSAqLwotICAgIHN5bXZh bC5kc2Mkd19sZW5ndGggPSAoaW50KXN0cmxlbihlbnZzdHIpOwotICAgIHN5bXZhbC5kc2MkYV9w b2ludGVyID0gZW52c3RyOwotICAgIHN5bXZhbC5kc2MkYl9jbGFzcyA9IERTQyRLX0NMQVNTX1M7 Ci0gICAgc3ltdmFsLmRzYyRiX2R0eXBlID0gRFNDJEtfRFRZUEVfVDsKLSAgICBpID0gMjsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdG9yZSBpbiBnbG9iYWwgdGFibGUgKi8KLSNp ZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICov Ci0gICAgTElCJFNFVF9TWU1CT0woJnN5bW5hbSwgJnN5bXZhbCwgJmkpOwotI2Vsc2UKLSAgICBs aWIkc2V0X3N5bWJvbCgmc3ltbmFtLCAmc3ltdmFsLCAmaSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgIGlmIChleGl0c3RhdCA9PSBCQURfRVhJVCkKLSAgICAgIGV4aXRzdGF0ID0gU1MkX0FC T1JUIHwgU1RTJE1fSU5ISUJfTVNHOwotICAgIGlmIChleGl0c3RhdCA9PSBHT09EX0VYSVQpCi0g ICAgICBleGl0c3RhdCA9IFNTJF9OT1JNQUwgfCBTVFMkTV9JTkhJQl9NU0c7Ci0jZWxzZSAvKiBO b3QgVk1TICovCi0gICAgaWYgKGNvZGUgIT0gLTEpICAgICAgICAgICAgICAgICAgICAgLyogVGFr ZSAxc3QgYXJnIGxpdGVyYWxseSAqLwotICAgICAgZXhpdHN0YXQgfD0gY29kZTsKLSNlbmRpZiAv KiBWTVMgKi8KLQotI2lmZGVmIElLU0QKLSNpZmRlZiBJS1NEQgotICAgIGRlYnVnKEYxMDEsImRv ZXhpdCBpa2Rib3BlbiIsIiIsaWtkYm9wZW4pOwotICAgIGlmIChpa2Rib3BlbiAmJiBkYmZwKSB7 ICAgICAgICAgICAgIC8qIElmIElLU0QgZGF0YWJhc2Ugb3BlbiAqLwotICAgICAgICBpbnQgeDsK LSAgICAgICAgeCA9IGZyZWVzbG90KG15ZGJzbG90KTsgICAgICAgICAvKiBGcmVlIG91ciBzbG90 Li4uICovCi0gICAgICAgIGRlYnVnKEYxMDEsImRvZXhpdCBmcmVlc2xvdCIsIiIseCk7Ci0gICAg ICAgIGZjbG9zZShkYmZwKTsgICAgICAgICAgICAgICAgICAgLyogYW5kIGNsb3NlIGl0LiAqLwot ICAgIH0KLSNlbmRpZiAvKiBJS1NEQiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQotLyogV2UgaGF2 ZSBwdXQgdGhpcyBvZmYgdGlsbCB0aGUgdmVyeSBsYXN0IG1vbWVudC4uLiAqLwotCi0jaWZkZWYg REVCVUcKLSAgICBpZiAoZGVibG9nKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSB0 aGUgZGVidWcgbG9nLiAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJDLUtlcm1pdCBFWElUIHN0YXR1 cyIsIiIsZXhpdHN0YXQpOwotICAgICAgICAqZGViZmlsID0gJ1wwJzsKLSAgICAgICAgZGVibG9n ID0gMDsKLSAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICov Ci0KLSNpZmRlZiBPUzIKLSAgICBfZXhpdChleGl0c3RhdCk7ICAgICAgICAgICAgLyogRXhpdCBm cm9tIEMtS2VybWl0IChubyBtYXR0ZXIgd2hhdCkgKi8KLSNlbHNlIC8qIE9TMiAqLwotICAgIGV4 aXQoZXhpdHN0YXQpOyAgICAgICAgICAgICAgICAgICAgIC8qIEV4aXQgZnJvbSBDLUtlcm1pdCAq LwotI2VuZGlmIC8qIE9TMiAqLwotfQotCi1WT0lECi1iZ2NoaygpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ2hlY2sgYmFja2dyb3VuZCBzdGF0dXMgKi8KLSAgICBpZiAoYmdz ZXQgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBUaGV5IGRpZG4ndCB0eXBlIFNFVCBCQUNL R1JPVU5EICovCi0jaWZkZWYgVk1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0 IHByb21wdCBmbGFnIGJhc2VkIG9uICovCi0gICAgICAgIHBmbGFnID0gIWJhdGNoOyAgICAgICAg ICAgICAgICAgLyogd2hhdCB3ZSBkZXRlY3RlZCBhdCBzdGFydHVwLiAqLwotI2Vsc2UKLSAgICAg ICAgcGZsYWcgPSAhYmFja2dyZDsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICB9IGVsc2UgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgU0VUIEJBQ0tHUk9VTkQgdmFsdWUg Ki8KLSAgICAgICAgcGZsYWcgPSAoYmdzZXQgPT0gMCA/IDEgOiAwKTsKLSAgICB9Ci0KLSNpZm5k ZWYgTk9JQ1AKLSAgICAvKiBNZXNzYWdlIGZsYWcgb24gb25seSBpZiBhdCB0b3AgbGV2ZWwsIHBm bGFnIGlzIG9uLCBhbmQgUVVJRVQgaXMgT0ZGICovCi0gICAgaWYgKCF4Y21kc3JjKQotICAgICAg bXNnZmxnID0gKHBmbGFnID09IDApID8gMCA6ICFxdWlldDsKLSAgICBlbHNlIG1zZ2ZsZyA9IDA7 Ci0jZWxzZQotICAgIG1zZ2ZsZyA9IDA7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLX0KLQotLyogU2V0 IGNvbnNvbGUgaW50ZXJydXB0cyAqLwotCi1WT0lECi1zZXRpbnQoKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQWNjb3JkaW5nIHRvIFNFVCBDT01NQU5EIElOVEVSUlVQICovCi0g ICAgaW50IHggPSAwOwotICAgIGlmIChjbWRpbnQpICB4IHw9IDE7Ci0gICAgaWYgKHhzdXNwZW5k KSB4IHw9IDI7Ci0gICAgZGVidWcoRjEwMSwic2V0aW50IiwiIix4KTsKLQotICAgIHN3aXRjaCAo eCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCB0aGUgZGVzaXJlZCBjb21iaW5hdGlv biAqLwotICAgICAgY2FzZSAwOiBjb25ub2koKTsgYnJlYWs7ICAgICAgICAgIC8qIE5vIGludGVy cnVwdHMgKi8KLSAgICAgIGNhc2UgMTogY29uaW50KHRyYXAsU0lHX0lHTik7IGJyZWFrOwotICAg ICAgY2FzZSAyOiBjb25pbnQoU0lHX0lHTixzdHB0cmFwKTsgYnJlYWs7Ci0gICAgICBjYXNlIDM6 IGNvbmludCh0cmFwLHN0cHRyYXApOyBicmVhazsKLSAgICB9Ci0gICAgYmdjaGsoKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgYmFja2dyb3VuZCBzdGF0dXMgKi8KLX0KLQot I2lmZGVmIERFQlVHCi0vKiAgRCBFIEIgVSBHICAtLSAgRW50ZXIgYSByZWNvcmQgaW4gdGhlIGRl YnVnZ2luZyBsb2cgICovCi0KLS8qCi0gQ2FsbCB3aXRoIGEgZm9ybWF0LCB0d28gc3RyaW5ncywg YW5kIGEgbnVtYmVyOgotICAgZiAgLSBGb3JtYXQsIGEgYml0IHN0cmluZyBpbiByYW5nZSAwLTcu Ci0gICAgICAgIElmIGJpdCB4IGlzIG9uLCB0aGVuIGFyZ3VtZW50IG51bWJlciB4IGlzIHByaW50 ZWQuCi0gICBzMSAtIFN0cmluZywgYXJndW1lbnQgbnVtYmVyIDEuICBJZiBzZWxlY3RlZCwgcHJp bnRlZCBhcyBpcy4KLSAgIHMyIC0gU3RyaW5nLCBhcmd1bWVudCBudW1iZXIgMi4gIElmIHNlbGVj dGVkLCBwcmludGVkIGluIGJyYWNrZXRzLgotICAgbiAgLSBMb25nIGludCwgYXJndW1lbnQgMy4g IElmIHNlbGVjdGVkLCBwcmludGVkIHByZWNlZGVkIGJ5IGVxdWFscyBzaWduLgotCi0gICBmPTAg aXMgc3BlY2lhbDogcHJpbnQgczEsczIsIGFuZCBpbnRlcnByZXQgbiBhcyBhIGNoYXIuCi0KLSAg IGY9RjAxMSAoMykgaXMgYWxzbyBzcGVjaWFsOyBpbiB0aGlzIGNhc2UgczIgaXMgaW50ZXJwZXRl ZCBhcyBhIGNvdW50ZWQKLSAgIHN0cmluZyB0aGF0IG1pZ2h0IGNvbnRhaW4gTlVMcy4gIG4gaXMg dGhlIGxlbmd0aC4gIElmIG4gaXMgbmVnYXRpdmUsIHRoaXMKLSAgIG1lYW5zIHRoZSBzdHJpbmcg aGFzIGJlZW4gdHJ1bmNhdGVkIGFuZCAiLi4iIHNob3VsZCBiZSBwcmludGVkIGFmdGVyIHRoZQot ICAgZmlyc3QgbiBieXRlcy4gIE5VTCBhbmQgTEYgYnl0ZXMgYXJlIHByaW50ZWQgYXMgIjxOVUw+ IiBhbmQgIjxMRj4iLgotCi0gICBHbG9iYWxzOgotICAgICBkZWJsb2c6IG5vbnplcm8gaWYgZGVi dWcgbG9nIG9wZW4uCi0gICAgIGRlYm9rOiAgbm9uemVybyBpZiBvayB0byB3cml0ZSBlbnRyaWVz LgotKi8KLS8qCi0gIFdBUk5JTkc6IERvbid0IGNoYW5nZSBERUJVRkwgd2l0aG91dCBjaGFuZ2lu ZyBzcHJpbnRmKCkgZm9ybWF0cyBiZWxvdywKLSAgYWNjb3JkaW5nbHkuCi0qLwotI2RlZmluZSBE QlVGTCA0MDAwCi0vKgotICBXQVJOSU5HOiBUaGlzIHJvdXRpbmUgaXMgbm90IHRocmVhZC1zYWZl LCBlc3BlY2lhbGx5IHdoZW4gS2VybWl0IGlzCi0gIGV4ZWN1dGluZyBvbiBtdWx0aXBsZSBDUFVz IC0tIGFzIGRpZmZlcmVudCB0aHJlYWRzIHdyaXRlIHRvIHRoZSBzYW1lCi0gIHN0YXRpYyBidWZm ZXIsIHRoZSBkZWJ1ZyBzdGF0ZW1lbnRzIGFyZSBhbGwgaW50ZXJsZWF2ZWQuICBUbyBiZSBmaXhl ZAotICBsYXRlci4uLgotKi8KLXN0YXRpYyBjaGFyICpkYnB0ciA9IChjaGFyICopMDsKLQotaW50 Ci0jaWZkZWYgQ0tfQU5TSUMKLWRvZGVidWcoaW50IGYsIGNoYXIgKnMxLCBjaGFyICpzMiwgQ0tf T0ZGX1QgbikKLSNlbHNlCi1kb2RlYnVnKGYsczEsczIsbikgaW50IGY7IGNoYXIgKnMxLCAqczI7 IENLX09GRl9UIG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRvZGVidWcgKi8gewotICAg IGNoYXIgKnNwOwotICAgIGludCBsZW4xLCBsZW4yOwotICAgIGV4dGVybiBpbnQgZGVidGltOwot I2lmZGVmIE9TMgotICAgIGV4dGVybiBpbnQgU3lzSW5pdGVkOwotI2VuZGlmIC8qIE9TMiAqLwot Ci0gICAgaWYgKCFkZWJsb2cgfHwgIWRlYm9rKQotICAgICAgcmV0dXJuKDApOwotCi0jaWZkZWYg Q09NTUVOVAotICAgIC8qIGV4cGVuc2l2ZS4uLiAqLwotICAgIGlmICghY2hrZm4oWkRGSUxFKSkJ CQkvKiBEZWJ1ZyBsb2cgbm90IG9wZW4sIGRvbid0LiAqLwotICAgICAgcmV0dXJuKDApOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICBpZiAoIWRicHRyKSB7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBBbGxvY2F0ZSBtZW1vcnkgYnVmZmVyICovCi0gICAgICAgIGRicHRyID0gbWFsbG9jKERC VUZMKzQpOyAgICAgICAgLyogVGhpcyBvbmx5IGhhcHBlbnMgb25jZSAqLwotICAgICAgICBpZiAo IWRicHRyKSB7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAgICAgIHJldHVy bigwKTsKLSAgICAgICAgfQotICAgIH0KLS8qCi0gIFRoaXMgcHJldmVudHMgaW5maW5pdGUgcmVj dXJzaW9uIGluIGNhc2Ugd2UgYWNjaWRlbnRhbGx5IHB1dCBhIGRlYnVnKCkKLSAgY2FsbCBpbiB0 aGlzIHJvdXRpbmUsIG9yIGNhbGwgYW5vdGhlciByb3V0aW5lIHRoYXQgY29udGFpbnMgZGVidWco KSBjYWxscy4KLSAgRnJvbSB0aGlzIHBvaW50IG9uLCBhbGwgcmV0dXJucyBmcm9tIHRoaXMgcmV0 dXJuIG11c3QgYmUgdmlhIGdvdG8geGRlYnVnLAotICB3aGljaCBzZXRzIGRlYmxvZyBiYWNrIHRv IDEuCi0qLwotI2lmZGVmIE9TMgotICAgIGlmIChTeXNJbml0ZWQpIHsKLQlpZiAoUmVxdWVzdERl YnVnTXV0ZXgoMzAwMDApKQotCSAgICBnb3RvIHhkZWJ1ZzsKLSAgICB9Ci0jZWxzZSAvKiBPUzIg Ki8KLSAgICBkZWJsb2cgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmV2ZW50IGlu ZmluaXRlIHJlY3Vyc2lvbiAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKGRlYnRpbSkg eyAgICAgICAgICAgICAgICAgICAgICAgLyogVGltZXN0YW1wICovCi0gICAgICAgIGNoYXIgKnRi LCB0c2J1Zls0OF07Ci0gICAgICAgIHp0aW1lKCZ0Yik7Ci0gICAgICAgIGNrc3RybmNweSh0c2J1 Zix0YiwzMik7Ci0gICAgICAgIGlmICh6dG1zZWMgPiAtMUwpIHsKLQkgICAgc3ByaW50Zih0c2J1 ZisxOSwiLiUwM2xkICIsenRtc2VjKTsgLyogU0FGRSAqLwotCX0gZWxzZSB7Ci0JICAgIHRzYnVm WzE5XSA9ICc6JzsKLQkgICAgdHNidWZbMjBdID0gU1A7Ci0JICAgIHRzYnVmWzIxXSA9IE5VTDsK LQl9Ci0gICAgICAgIHpzb3V0KFpERklMRSx0c2J1ZisxMSk7Ci0gICAgfQotICAgIGlmICghczEp IHMxPSIoTlVMTCkiOwotICAgIGlmICghczIpIHMyPSIoTlVMTCkiOwotCi0gICAgbGVuMSA9IHN0 cmxlbihzMSk7Ci0gICAgbGVuMiA9IHN0cmxlbihzMik7Ci0KLSNpZmRlZiBDT01NRU5UCi0vKgot ICBUaGlzIHNob3VsZCB3b3JrLCBidXQgaXQgZG9lc24ndC4KLSAgU28gaW5zdGVhZCB3ZSdsbCBj b3BlIHdpdGggb3ZlcmZsb3cgdmlhIHNwcmludGYgZm9ybWF0cy4KLSAgTi5CLjogVU5GT1JUVU5B VEVMWSwgdGhpcyBtZWFucyB3ZSBoYXZlIHRvIHB1dCBjb25zdGFudHMgaW4gdGhlCi0gIHNwcmlu dGYgZm9ybWF0cy4KLSovCi0gICAgaWYgKGYgIT0gRjAxMSAmJiAoIWYgfHwgKGYgJiA2KSkpIHsg LyogU3RyaW5nIGFyZ3VtZW50KHMpIGluY2x1ZGVkPyAqLwotICAgICAgICB4ID0gKGludCkgc3Ry bGVuKHMxKSArIChpbnQpIHN0cmxlbihzMikgKyAxODsKLSAgICAgICAgaWYgKHggPiBkYnVmbCkg eyAgICAgICAgICAgICAgICAvKiBMb25nZXIgdGhhbiBidWZmZXI/ICovCi0gICAgICAgICAgICBp ZiAoZGJwdHIpICAgICAgICAgICAgICAgICAgLyogWWVzLCBmcmVlIHByZXZpb3VzIGJ1ZmZlciAq LwotICAgICAgICAgICAgICBmcmVlKGRicHRyKTsKLSAgICAgICAgICAgIGRicHRyID0gKGNoYXIg KikgbWFsbG9jKHggKyAyKTsgLyogQWxsb2NhdGUgYSBuZXcgb25lICovCi0gICAgICAgICAgICBp ZiAoIWRicHRyKSB7Ci0gICAgICAgICAgICAgICAgenNvdXRsKFpERklMRSwiREVCVUc6IE1lbW9y eSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKLSAgICAgICAgICAgICAgICBkZWJsb2cgPSAwOwotICAg ICAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOwotICAgICAgICAgICAgICAgIGdvdG8geGRlYnVn OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkYnVmbCA9IHg7Ci0gICAg ICAgICAgICAgICAgc3ByaW50ZihkYnB0ciwiREVCVUc6IEJ1ZmZlciBleHBhbmRlZCB0byAlZFxu IiwgeCArIDE4KTsKLSAgICAgICAgICAgICAgICB6c291dGwoWkRGSUxFLGRicHRyKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRl ZiBDT01NRU5UCi0vKiBUaGUgYWZvcmVtZW50aW9uZWQgc3ByaW50ZigpIGZvcm1hdHMgd2VyZSBs aWtlIHRoaXM6ICovCi0gICAgICAgIGlmIChuID4gMzEgJiYgbiA8IDEyNykKLSAgICAgICAgICBz cHJpbnRmKHNwLCIlLjEwMHMlLjIwMDBzOiVjXG4iLHMxLHMyLChDSEFSKSBuKTsKLSAgICAgICAg ZWxzZSBpZiAobiA8IDMyIHx8IG4gPT0gMTI3KQotICAgICAgICAgIHNwcmludGYoc3AsIiUuMTAw cyUuMjAwMHM6XiVjXG4iLHMxLHMyLChDSEFSKSAoKG4rNjQpICYgMHg3RikpOwotICAgICAgICBl bHNlIGlmIChuID4gMTI3ICYmIG4gPCAxNjApCi0gICAgICAgICAgc3ByaW50ZihzcCwiJS4xMDBz JS4yMDAwczp+XiVjXG4iLHMxLHMyLChDSEFSKSgobi02NCkgJiAweDdGKSk7Ci0gICAgICAgIGVs c2UgaWYgKG4gPiAxNTkgJiYgbiA8IDI1NikKLSAgICAgICAgICBzcHJpbnRmKHNwLCIlLjEwMHMl LjIwMDBzOn4lY1xuIixzMSxzMiwoQ0hBUikgKG4gJiAweDdGKSk7Ci0gICAgICAgIGVsc2Ugc3By aW50ZihzcCwiJS4xMDBzJS4yMDAwczolbGRcbiIsczEsczIsbik7Ci0vKgotICBCdXQsIG5hdHVy YWxseSwgaXQgdHVybnMgb3V0IHRoZXNlIGFyZSBub3QgcG9ydGFibGUgZWl0aGVyLCBzbyBub3cK LSAgd2UgZG8gdGhlIHN0dXBpZGVzdCBwb3NzaWJsZSB0aGluZy4KLSovCi0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0jaWZkZWYgQklHQlVGT0sKLS8qIE5lZWQgdG8gYWNjZXB0IGxvbmdlciBzdHJp bmdzIHdoZW4gZGVidWdnaW5nIGF1dGhlbnRpY2F0ZWQgY29ubmVjdGlvbnMgKi8KLSAgICBpZiAo ZiA9PSBGMDEwKSB7Ci0gICAgICAgIGlmIChsZW4yICsgMiA+PSBEQlVGTCkgczIgPSAiKHN0cmlu ZyB0b28gbG9uZykiOwotICAgIH0gZWxzZSBpZiAoZiAhPSBGMDExICYmIGYgIT0gRjEwMCkgewot ICAgICAgICBpZiAobGVuMSA+IDEwMCkgczEgPSAiKHN0cmluZyB0b28gbG9uZykiOwotICAgICAg ICBpZiAobGVuMiArIDEwMSA+PSBEQlVGTCkgczIgPSAiKHN0cmluZyB0b28gbG9uZykiOwotICAg IH0KLSNlbHNlCi0gICAgaWYgKGYgIT0gRjAxMSkgewotICAgICAgICBpZiAobGVuMSA+IDEwMCkg czEgPSAiKHN0cmluZyB0b28gbG9uZykiOwotICAgICAgICBpZiAobGVuMiArIDEwMSA+PSBEQlVG TCkgczIgPSAiKHN0cmluZyB0b28gbG9uZykiOwotICAgIH0KLSNlbmRpZiAvKiBCSUdCVUZPSyAq LwotCi0gICAgc3AgPSBkYnB0cjsKLQotICAgIHN3aXRjaCAoZikgeyAgICAgICAgICAgICAgICAv KiBXcml0ZSBsb2cgcmVjb3JkIGFjY29yZGluZyB0byBmb3JtYXQuICovCi0gICAgICBjYXNlIEYw MDA6ICAgICAgICAgICAgICAgIC8qIDAgPSBwcmludCBib3RoIHN0cmluZ3MsIGFuZCBuIGFzIGEg Y2hhci4gKi8KLSAgICAgICAgaWYgKGxlbjIgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKG4gPiAz MSAmJiBuIDwgMTI3KSB8fCAobiA+IDE1OSAmJiBuIDwgMjU2KSkKLSAgICAgICAgICAgICAgc3By aW50ZihzcCwiJXNbJXNdPSVjXG4iLHMxLHMyLChDSEFSKSBuKTsKLSAgICAgICAgICAgIGVsc2Ug aWYgKG4gPCAzMiB8fCBuID09IDEyNykKLSAgICAgICAgICAgICAgc3ByaW50ZihzcCwiJXNbJXNd PV4lY1xuIixzMSxzMiwoQ0hBUikgKChuKzY0KSAmIDB4N0YpKTsKLSAgICAgICAgICAgIGVsc2Ug aWYgKG4gPiAxMjcgJiYgbiA8IDE2MCkKLSAgICAgICAgICAgICAgc3ByaW50ZihzcCwiJXNbJXNd PX5eJWNcbiIsczEsczIsKENIQVIpKChuLTY0KSAmIDB4N0YpKTsKLSAgICAgICAgICAgIGVsc2Ug c3ByaW50ZihzcCwiJXNbJXNdPTB4JWxYXG4iLHMxLHMyLChsb25nKW4pOwotICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgaWYgKChuID4gMzEgJiYgbiA8IDEyNykgfHwgKG4gPiAxNTkgJiYg biA8IDI1NikpCi0gICAgICAgICAgICAgIHNwcmludGYoc3AsIiVzPSVjXG4iLHMxLChDSEFSKSBu KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG4gPCAzMiB8fCBuID09IDEyNykKLSAgICAgICAgICAg ICAgc3ByaW50ZihzcCwiJXM9XiVjXG4iLHMxLChDSEFSKSAoKG4rNjQpICYgMHg3RikpOwotICAg ICAgICAgICAgZWxzZSBpZiAobiA+IDEyNyAmJiBuIDwgMTYwKQotICAgICAgICAgICAgICBzcHJp bnRmKHNwLCIlcz1+XiVjXG4iLHMxLChDSEFSKSgobi02NCkgJiAweDdGKSk7Ci0gICAgICAgICAg ICBlbHNlIHNwcmludGYoc3AsIiVzPTB4JWxYXG4iLHMxLChsb25nKW4pOwotICAgICAgICB9Ci0g ICAgICAgIGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgewotICAgICAgICAgICAgZGVibG9n ID0gMDsKLSAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOwotICAgICAgICB9Ci0jaWZkZWYgQ0tT WVNMT0cKLSAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7 Ci0gICAgICAgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7Ci0g ICAgICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICBicmVhazsKLQotICAgICAg Y2FzZSBGMDAxOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEsICI9biIgKi8KLSNpZmRlZiBD T01NRU5UCi0gICAgICAgIC8qIFRoaXMgd2FzIG5ldmVyIHVzZWQgKi8KLSAgICAgICAgc3ByaW50 ZihzcCwiPSVzXG4iLGNrZnN0b2EobikpOwotI2Vsc2UKLSAgICAgICAgLyogTGlrZSBGMTExLCBi dXQgc2hvd3MgbnVtYmVyIG4gaW4gaGV4ICovCi0JY2ttYWt4bXNnKHNwLERCVUZMLAotCQkgIHMx LAotCQkgICgqczEgPyAiOiIgOiAiIiksCi0JCSAgczIsCi0JCSAgKCpzMiA/ICI6IiA6ICIiKSwK LQkJICBja2x0b3gobiksCi0JCSAgIlxuIiwKLQkJICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTAotCQkgICk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBpZiAoenNvdXQoWkRG SUxFLGRicHRyKSA8IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6 Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAgfQotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgIGlmIChj a3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAgY2tzeXNs b2coU1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5VTEwpOwotICAgICAgICB9Ci0jZW5kaWYgLyog Q0tTWVNMT0cgKi8KLSAgICAgICAgYnJlYWs7Ci0KLS8qCi0gIFRoaXMgb25lIHdhcyBuZXZlciB1 c2VkIHNvIChPY3RvYmVyIDIwMDApIHdlIG5vdyB1c2UgaXQgbGlrZSBGMDExLAotICBleGNlcHQg aW4gdGhpcyBjYXNlIHdlIHRyZWF0IHMyIGFzIE5VTCB0ZXJtaW5hdGVkLgotKi8KLSAgICAgIGNh c2UgRjAxMDoKLQluID0gLWRlYnhsZW47Ci0vKgotICBUaGlzIG9uZSB0cmVhdHMgbiBhcyB0aGUg bGVuZ3RoIG9mIHRoZSBzdHJpbmcgczIsIHdoaWNoIG1heSBjb250YWluIE5VTHMuCi0gIEl0J3Mg Z29vZCBmb3IgbG9nZ2luZyBOVUwtYmVhcmluZyBkYXRhIGluIHRoZSBkZWJ1ZyBsb2cuCi0qLwot ICAgICAgY2FzZSBGMDExOiB7Ci0JICBpbnQgaSwgaiwgY29udGQgPSAwOwotCSAgY2hhciAqIHAg PSBzMiwgKnBidWYgPSBOVUxMOwkvKiBwID0gc291cmNlIHBvaW50ZXIgKi8KLQkgIGludCBtOwkJ CS8qIHBidWYgPSBkZXN0aW5hdGlvbiBwb2ludGVyICovCi0KLQkgIGlmIChmID09IEYwMTEpIHsK LQkgICAgICBpZiAobiA8IDApIHsJCS8qIG4gPSBzaXplIG9mIHNvdXJjZSAqLwotCQkgIG4gPSAw IC0gbjsJCS8qIE5lZ2F0aXZlIG1lYW5zIHRvIGFkZCAiLi4uIiAqLwotCQkgIGNvbnRkID0gMTsK LQkgICAgICB9Ci0JICB9IGVsc2UgewotCSAgICAgIGludCB4LCBmbGFnID0gMDsKLQkgICAgICB4 ID0gc3RybGVuKHMyKTsKLQkgICAgICBpZiAobiA8IDApIHsKLQkJICBmbGFnID0gMTsKLQkJICBu ID0gMCAtIG47Ci0JICAgICAgfQotCSAgICAgIGlmICh4IDwgbikKLQkJbiA9IHg7Ci0JICB9Ci0J ICBpZiAobiA9PSAwKQkJCS8qIDAgbWVhbnMgZG8gbm90aGluZyAqLwotCSAgICBnb3RvIHhkZWJ1 ZzsKLQkgIG0gPSBEQlVGTCAtIDg7CQkvKiBHZXQgc2l6ZSBmb3IgaW50ZXJwcmV0ZWQgcGFydCAq LwotCSAgaWYgKG4gPiBtKQkJCS8qIEVuc3VyZSByZXF1ZXN0ZWQgc2l6ZSBub3QgdG9vIGJpZyAq LwotCSAgICBuID0gbTsKLQkgIHBidWYgPSBkYnB0cjsJCQkvKiBDb25zdHJ1Y3Rpb24gcG9pbnRl ciAqLwotCSAgaSA9IDA7Ci0JICBwYnVmW2krK10gPSAnWyc7CQkvKiBJbnRlcnByZXQgdGhlIHN0 cmluZyBpbnRvIGl0ICovCi0JICBmb3IgKGogPSAwOyBqIDwgbiAmJiBpIDwgbS00OyBwKyssaisr KSB7IC8qIGNoYXIgYnkgY2hhci4uLiAqLwotCSAgICAgIGlmICgqcCA9PSBMRikgewotCQkgIGlm IChpID49IG0tNCkKLQkJICAgIGJyZWFrOwotCQkgIHBidWZbaSsrXSA9ICc8JzsKLQkJICBwYnVm W2krK10gPSAnTCc7Ci0JCSAgcGJ1ZltpKytdID0gJ0YnOwotCQkgIHBidWZbaSsrXSA9ICc+JzsK LQkJICBjb250aW51ZTsKLQkgICAgICB9IGVsc2UgaWYgKCpwID09IENSKSB7Ci0JCSAgaWYgKGkg Pj0gbS00KQotCQkgICAgYnJlYWs7Ci0JCSAgcGJ1ZltpKytdID0gJzwnOwotCQkgIHBidWZbaSsr XSA9ICdDJzsKLQkJICBwYnVmW2krK10gPSAnUic7Ci0JCSAgcGJ1ZltpKytdID0gJz4nOwotCQkg IGNvbnRpbnVlOwotCSAgICAgIH0gZWxzZSBpZiAoKnAgPT0gSFQpIHsKLQkJICBpZiAoaSA+PSBt LTUpCi0JCSAgICBicmVhazsKLQkJICBwYnVmW2krK10gPSAnPCc7Ci0JCSAgcGJ1ZltpKytdID0g J1QnOwotCQkgIHBidWZbaSsrXSA9ICdBJzsKLQkJICBwYnVmW2krK10gPSAnQic7Ci0JCSAgcGJ1 ZltpKytdID0gJz4nOwotCQkgIGNvbnRpbnVlOwotCSAgICAgIH0gZWxzZSBpZiAoKnApIHsKLQkJ ICBwYnVmW2krK10gPSAqcDsKLQkJICBjb250aW51ZTsKLQkgICAgICB9IGVsc2UgewotCQkgIGlm IChpID49IG0tNSkKLQkJICAgIGJyZWFrOwotCQkgIHBidWZbaSsrXSA9ICc8JzsKLQkJICBwYnVm W2krK10gPSAnTic7Ci0JCSAgcGJ1ZltpKytdID0gJ1UnOwotCQkgIHBidWZbaSsrXSA9ICdMJzsK LQkJICBwYnVmW2krK10gPSAnPic7Ci0JCSAgY29udGludWU7Ci0JICAgICAgfQotCSAgfQotCSAg aWYgKGkgPCBtLTIgJiYgKCpwIHx8IGNvbnRkKSkgewotCSAgICAgIHBidWZbaSsrXSA9ICcuJzsK LQkgICAgICBwYnVmW2krK10gPSAnLic7Ci0JICB9Ci0JICBwYnVmW2krK10gPSAnXSc7Ci0JICBw YnVmW2ldID0gTlVMOwotCSAgaWYgKHpzb3V0KFpERklMRSxzMSkgPCAwKSB7Ci0JICAgICAgZGVi bG9nID0gMDsKLQkgICAgICB6Y2xvc2UoWkRGSUxFKTsKLQkgIH0KLQkgIGlmICh6c291dGwoWkRG SUxFLHBidWYpIDwgMCkgewotCSAgICAgIGRlYmxvZyA9IDA7Ci0JICAgICAgemNsb3NlKFpERklM RSk7Ci0JICB9Ci0jaWZkZWYgQ0tTWVNMT0cKLQkgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIg JiYgY2t4bG9nZ2luZykgewotCSAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixzMSxw YnVmKTsKLQkgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICB9Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgICBjYXNlIEYxMDA6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNCwgInMx IiAqLwotICAgICAgICBpZiAoenNvdXRsKFpERklMRSxzMSkgPCAwKSB7Ci0gICAgICAgICAgICBk ZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAgIH0KLSNpZmRl ZiBDS1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dp bmcpIHsKLSAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixzMSxOVUxMKTsK LSAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgIGJyZWFrOwotICAgICAg Y2FzZSBGMTAxOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUsICJzMT1uIiAqLwotICAgICAg ICBzcHJpbnRmKHNwLCIlcz0lc1xuIixzMSxja2ZzdG9hKG4pKTsKLSAgICAgICAgaWYgKHpzb3V0 KFpERklMRSxkYnB0cikgPCAwKSB7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAg ICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAgIH0KLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICBp ZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgIGNr c3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixkYnB0cixOVUxMKTsKLSAgICAgICAgfQotI2VuZGlm IC8qIENLU1lTTE9HICovCi0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGMTEwOiAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDYsICJzMVtzMl0iICovCi0gICAgICAgIHNwcmludGYoc3AsIiVz WyVzXVxuIixzMSxzMik7Ci0gICAgICAgIGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgewot ICAgICAgICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOwotICAg ICAgICB9Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19E QiAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1 ZyIsZGJwdHIsTlVMTCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAg ICBicmVhazsKLSAgICAgIGNhc2UgRjExMTogICAgICAgICAgICAgICAgICAgICAgICAvKiA3LCAi czFbczJdPW4iICovCi0gICAgICAgIHNwcmludGYoc3AsIiVzWyVzXT0lc1xuIixzMSxzMixja2Zz dG9hKG4pKTsKLSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7Ci0gICAgICAg ICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAgIH0K LSNpZmRlZiBDS1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNr eGxvZ2dpbmcpIHsKLSAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixkYnB0 cixOVUxMKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgIGJyZWFr OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ByaW50ZihzcCwiXG4/SW52YWxpZCBmb3JtYXQg Zm9yIGRlYnVnKCkgLSAlZFxuIixmKTsKLSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikg PCAwKSB7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklM RSk7Ci0gICAgICAgIH0KLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nID49 IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RC LDEsImRlYnVnIixkYnB0cixOVUxMKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICov Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgeGRlYnVnOiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDb21tb24gZXhpdCBwb2ludCAqLwotI2lmZGVmIE9TMgotICAgIGlmIChTeXNJ bml0ZWQpCi0JUmVsZWFzZURlYnVnTXV0ZXgoKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgIGRlYmxv ZyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgdGhpcyAqLwotI2VuZGlm IC8qIE9TMiAqLwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWRv aGV4ZHVtcChDSEFSICptc2csIENIQVIgKnN0LCBpbnQgY250KQotI2Vsc2UKLWRvaGV4ZHVtcCht c2csc3QsY250KSBDSEFSICptc2c7IENIQVIgKnN0OyBpbnQgY250OwotI2VuZGlmIC8qIENLX0FO U0lDICovCi0vKiBkb2hleGR1bXAgKi8gewotICAgIGludCBpID0gMCwgaiA9IDAsIGsgPSAwOwot ICAgIGNoYXIgdG1wWzhdOwotI2lmZGVmIE9TMgotICAgIGV4dGVybiBpbnQgU3lzSW5pdGVkOwot I2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKCFkZWJsb2cpIHJldHVybigwKTsJCS8qIElmIG5v IGRlYnVnIGxvZywgZG9uJ3QuICovCi0gICAgaWYgKCFkYnB0cikgeyAgICAgICAgICAgICAgICAg ICAgICAgLyogQWxsb2NhdGUgbWVtb3J5IGJ1ZmZlciAqLwotICAgICAgICBkYnB0ciA9IG1hbGxv YyhEQlVGTCsxKTsgICAgICAgIC8qIFRoaXMgb25seSBoYXBwZW5zIG9uY2UgKi8KLSAgICAgICAg aWYgKCFkYnB0cikgewotICAgICAgICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgICAgIHpjbG9z ZShaREZJTEUpOwotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0gICAgfQotCi0j aWZkZWYgT1MyCi0gICAgaWYgKFN5c0luaXRlZCkgewotCWlmIChSZXF1ZXN0RGVidWdNdXRleCgz MDAwMCkpCi0JICAgIGdvdG8geGRlYnVnOwotICAgIH0KLSNlbHNlIC8qIE9TMiAqLwotICAgIGRl YmxvZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXZlbnQgaW5maW5pdGUgcmVj dXJzaW9uICovCi0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAobXNnICE9IE5VTEwpIHsKLQlj a21ha3htc2coZGJwdHIsCi0JCSAgREJVRkwsCi0JCSAgIkhFWERVTVA6ICIsCi0JCSAgKGNoYXIg Kiltc2csCi0JCSAgIiAoIiwKLQkJICBja2l0b2EoY250KSwKLQkJICAiIGJ5dGVzKVxuIiwKLQkJ ICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCi0JCSApOwotICAgICAgICBpZiAo enNvdXQoWkRGSUxFLGRicHRyKSA8IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAg ICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLQkgICAgZ290byB4ZGVidWc7Ci0gICAgICAgIH0KLSAg ICB9IGVsc2UgewotCWNrbWFrbXNnKGRicHRyLAotCQkgREJVRkwsCi0JCSAiSEVYRFVNUDogKCIs Ci0JCSBja2l0b2EoY250KSwKLQkJICIgYnl0ZXMpXG4iLAotCQkgTlVMTAotCQkgKTsKLSAgICAg ICAgenNvdXQoWkRGSUxFLGRicHRyKTsKLSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikg PCAwKSB7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklM RSk7Ci0JICAgIGdvdG8geGRlYnVnOwotICAgICAgICB9Ci0gICAgfQotICAgIGZvciAoaSA9IDA7 IGkgPCBjbnQ7IGkrKykgewotICAgICAgICBkYnB0clswXSA9ICdcMCc7Ci0gICAgICAgIGZvciAo aiA9IDAgOyAoaiA8IDE2KTsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoKGkgKyBqKSA8IGNudCkK LQkgICAgICBzcHJpbnRmKHRtcCwKLQkJICAgICAgIiVzJTAyeCAiLAotCQkgICAgICAoaiA9PSA4 ID8gInwgIiA6ICIiKSwKLQkJICAgICAgKENIQVIpIHN0W2kgKyBqXQotCQkgICAgICApOwotICAg ICAgICAgICAgZWxzZQotCSAgICAgIHNwcmludGYodG1wLAotCQkgICAgICAiJXMgICAiLAotCQkg ICAgICAoaiA9PSA4ID8gInwgIiA6ICIiKQotCQkgICAgICApOwotICAgICAgICAgICAgY2tzdHJu Y2F0KGRicHRyLHRtcCxEQlVGTCsxKTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jYXQoZGJw dHIsIiAiLERCVUZMKzEpOwotICAgICAgICBmb3IgKGsgPSAwOyAoayA8IDE2KSAmJiAoKGkgKyBr KSA8IGNudCk7IGsrKykgewotICAgICAgICAgICAgc3ByaW50Zih0bXAsCi0gICAgICAgICAgICAg ICAgICAgICIlcyVjIiwKLSAgICAgICAgICAgICAgICAgICAgKGsgPT0gOCA/ICIgIiA6ICIiKSwK LSAgICAgICAgICAgICAgICAgICAgaXNwcmludChzdFtpICsga10pID8gc3RbaSArIGtdIDogJy4n Ci0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBja3N0cm5jYXQoZGJwdHIsdG1w LERCVUZMKzEpOwotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNhdChkYnB0ciwiXG4iLERCVUZM KzEpOwotICAgICAgICBpICs9IGogLSAxOwotICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRy KSA8IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRG SUxFKTsKLQkgICAgZ290byB4ZGVidWc7Ci0gICAgICAgIH0KLSAgICB9IC8qIGVuZCBmb3IgKi8K LQotCi0gIHhkZWJ1ZzoKLSNpZmRlZiBPUzIKLSAgICBpZiAoU3lzSW5pdGVkKQotICAgICAgUmVs ZWFzZURlYnVnTXV0ZXgoKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgIGRlYmxvZyA9IDE7Ci0jZW5k aWYgLyogT1MyICovCi0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIERFQlVHICovCi0KLS8q ICBTZXNzaW9uIExvZy4uLiAqLwotCi1pbnQgdHNzdGF0ZSA9IDA7Ci0KLVZPSUQKLSNpZmRlZiBP UzIKLWxvZ2NoYXIodW5zaWduZWQgc2hvcnQgYykKLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVmIENL X0FOU0lDCi1sb2djaGFyKGNoYXIgYykKLSNlbHNlCi1sb2djaGFyKGMpIGNoYXIgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotI2VuZGlmIC8qIE9TMiAqLwotLyogbG9nY2hhciAqLyB7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIExvZyBjaGFyYWN0ZXIgYyB0byBzZXNzaW9uIGxvZyAqLwot ICAgIGV4dGVybiBpbnQgc2xvZ251bDsKLSAgICBpbnQgb2t0b2xvZyA9IDA7Ci0jaWZuZGVmIE5P TE9DQUwKLSAgICBpZiAoIXNlc2xvZykKLSAgICAgIHJldHVybjsKLQotICAgIGlmICgoc2Vzc2Z0 ICE9IFhZRlRfVCkgfHwgKAotI2lmZGVmIFVOSVgKLQkgYyAhPSAnXHInICYmCi0jZWxzZQotI2lm ZGVmIGRhdGFnZW5lcmFsCi0JIGMgIT0gJ1xyJyAmJgotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0J IGMgIT0gJ1xyJyAmJgotI2Vsc2UKLSNpZmRlZiBBTUlHQQotCSBjICE9ICdccicgJiYKLSNlbHNl Ci0jaWZkZWYgR0VNRE9TCi0JIGMgIT0gJ1xyJyAmJgotI2VuZGlmIC8qIEdFTURPUyAqLwotI2Vu ZGlmIC8qIEFNSUdBICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2lmZGVmIE9TSwotCSBjICE9ICdcbicgJiYKLSNl bHNlCi0jaWZkZWYgTUFDCi0JIGMgIT0gJ1xuJyAmJgotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlm IC8qIE9TSyAqLwotCSBjICE9IFhPTiAmJgotCSBjICE9IFhPRkYpKQotICAgICAgb2t0b2xvZyA9 IDE7Ci0gICAgaWYgKGMgPT0gJ1wwJyAmJiAhc2Vzc2Z0KQkJLyogTlVMIGluIHRleHQgbW9kZSAq LwotICAgICAgaWYgKHNsb2dudWwpIG9rdG9sb2cgPSAxOwkJLyogb25seSBpZiBwYWRkaW5nICgy MDA5LzEwLzIyKSAqLwotICAgIGlmICghb2t0b2xvZykKLSAgICAgIHJldHVybjsKLSAgICBpZiAo c2xvZ3RzKSB7CQkJLyogTG9nIGlzIHRpbWVzdGFtcGVkICovCi0JaWYgKHRzc3RhdGUgPT0gMCkg ewkJLyogU3RhdGUgPSBiZXR3ZWVuLWxpbmVzICovCi0JICAgIGNoYXIgKiBwOwkJCS8qIHpzdGlt ZSgpIHBvaW50ZXIgKi8KLQkgICAgY2hhciB0c1s0OF07CQkvKiB0aW1lc3RhbXAgYnVmZmVyICov Ci0JICAgIHp0aW1lKCZwKTsJCQkvKiBHZXQgYXNjdGltZSgpIHN0cmluZyAqLwotCSAgICBja3N0 cm5jcHkodHMscCwzMik7CQkvKiBNYWtlIHNhZmUgY29weSAqLwotCSAgICBpZiAoenRtc2VjID4g LTFMKSB7CQkvKiBBZGQgbXNlY3MgaWYgd2UgaGF2ZSB0aGVtICovCi0JCXNwcmludGYoJnRzWzE5 XSwiLiUwM2xkOiAiLHp0bXNlYyk7IC8qIFNBRkUgKi8KLQkgICAgfSBlbHNlIHsKLQkJdHNbMTld ID0gJzonOwotCQl0c1syMF0gPSBTUDsKLQkJdHNbMjFdID0gTlVMOwotCSAgICB9Ci0JICAgIGlm ICh6c291dChaU0ZJTEUsJnRzWzExXSkgPCAwKQotCSAgICAgIGdvdG8geGxvZ2NoYXI7Ci0JfQot ICAgIH0KLSAgICBpZiAoYyA9PSAnXG4nKQkJCS8qIEF0IGVuZCBvZiBsaW5lPyAqLwotICAgICAg dHNzdGF0ZSA9IDA7CQkJLyogeWVzICovCi0gICAgZWxzZQotICAgICAgdHNzdGF0ZSA9IDE7CQkJ Lyogbm8gKi8KLSAgICBpZiAoemNob3V0KFpTRklMRSwoQ0hBUikoYyAmIDB4RkYpKSA8IDApIC8q IExvZyB0aGUgY2hhcmFjdGVyICovCi0gICAgICBnb3RvIHhsb2djaGFyOwotICAgIGlmICh0c3N0 YXRlID09IDAgJiYgc2xvZ251bCAhPSAwKSB7CS8qIE51bGwtdGVybWluYXRpbmcgbGluZXM/ICov Ci0JaWYgKHpjaG91dChaU0ZJTEUsKENIQVIpMCkgPCAwKQkvKiBBZGQgYSBOVUwgKi8KLQkgIGdv dG8geGxvZ2NoYXI7Ci0gICAgfQotICAgIHJldHVybjsKLQotICB4bG9nY2hhcjoKLSAgICBjb25v bGwoIiIpOwotICAgIGNvbm9sbCgiRVJST1IgV1JJVElORyBTRVNTSU9OIExPRywgTE9HIENMT1NF RCEiKTsKLSAgICBzZXRzZXNsb2coMCk7Ci0gICAgemNsb3NlKFpTRklMRSk7Ci0jZW5kaWYgLyog Tk9MT0NBTCAqLwotfQotCi1WT0lECi1sb2dzdHIocywgbGVuKSBjaGFyICogczsgaW50IGxlbjsg eyAgICAgLyogTG9nIHN0cmluZyB0byBzZXNzaW9uIGxvZyAqLwotI2lmbmRlZiBOT0xPQ0FMCi0g ICAgaW50IG4gPSAwOwotICAgIGlmICghcykKLSAgICAgIHJldHVybjsKLSAgICB3aGlsZSAoc2Vz bG9nICYmIChuIDwgbGVuKSkKLSAgICAgIGxvZ2NoYXIoc1tuKytdKTsKLSNlbmRpZiAvKiBOT0xP Q0FMICovCi19Ci0KLSNpZmRlZiBDS19DVVJTRVMKLWludAotY2tfcmVwYWludCgpIHsKLSAgICBy ZXBhaW50ID0gMTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZmRlZiBTVFJBVFVTCi0vKiBWT1Mg aGFzIGN1cnNlcyBidXQgbm8gdGdldGVudCgpICovCi1pbnQKLXRnZXRlbnQoczEsIHMyKSBjaGFy ICogczEsICogczI7IHsKLSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwot Ci0jaWZkZWYgVk1TCi0jaWZkZWYgX19ERUNDCi1fUFJPVE9UWVAoaW50IHRnZXRlbnQsKGNoYXIg KiwgY2hhciAqKSk7Ci0jZW5kaWYgLyogX19ERUNDICovCi0jZW5kaWYgLyogVk1TICovCi0KLS8q Ci0gIFRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgd2F5cyB0byBkbyBmdWxsc2NyZWVuIG9uIFZN Uy4KLSAgMS4gVXNlIHRoZSByZWFsIGN1cnNlcyBsaWJyYXJ5LCBWQVhDQ1VSU0UuCi0gIDIuIFVz ZSBkby1pdC15b3Vyc2VsZiBjb2RlLgotICAzLiBVc2UgdGhlIFNjcmVlbiBNYW5hZ2VyLCBTTUck LgotCi0gIE1ldGhvZCAxIGRvZXNuJ3Qgd29yayBxdWl0ZSByaWdodDsgeW91IGNhbid0IGNhbGwg ZW5kd2luKCksIHNvIG9uY2UgeW91J3ZlCi0gIHN0YXJ0ZWQgY3Vyc2VzIG1vZGUsIHlvdSBjYW4g bmV2ZXIgbGVhdmUuCi0KLSAgTWV0aG9kIDIgZG9lc24ndCBvcHRpbWl6ZSB0aGUgc2NyZWVuLCBh bmQgc28gbXVjaCBtb3JlIHRpbWUgaXMgc3BlbnQgaW4KLSAgc2NyZWVuIHdyaXRlcy4gIFRoaXMg YWN0dWFsbHkgY2F1c2VzIGZpbGUgdHJhbnNmZXJzIHRvIGZhaWwgYmVjYXVzZSB0aGUKLSAgdHR5 IGRldmljZSBpbnB1dCBidWZmZXIgY2FuIGJlIG92ZXJydW4gd2hpbGUgdGhlIHNjcmVlbiBpcyBi ZWluZyB1cGRhdGVkLAotICBlc3BlY2lhbGx5IG9uIGEgc2xvdyBNaWNyb1ZBWCB0aGF0IGhhcyBz bWFsbCB0eXBlYWhlYWQgYnVmZmVycy4KLQotICBJbiB0aGUgZm9sbG93aW5nICNpZmRlZiBibG9j aywgI2RlZmluZSBvbmUgb2YgdGhlbSBhbmQgI3VuZGVmIHRoZSBvdGhlciAyLgotCi0gIFNvIG5v dyBsZXQncyB0cnkgbWV0aG9kIDMuLi4KLSovCi0jaWZkZWYgVk1TCi0jZGVmaW5lIENLX1NNRyAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2NyZWVuIE1hbmFnZXIgKi8KLSN1bmRlZiBNWUNV UlNFUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEby1pdC15b3Vyc2VsZiAqLwotI3VuZGVm IFZNU0NVUlNFICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZBWENDVVJTRSBsaWJyYXJ5ICov Ci0jZW5kaWYgLyogVk1TICovCi0vKgotICBCdXQganVzdCBiZWZvcmUgTmV3IFllYXJzLCAyMDAw LCB0aGUgU01HIGxpYnJhcnkgc2VlbWVkIHRvIGJyZWFrIG9uCi0gIGJvdGggVk1TIHN5c3RlbXMg d2UgaGF2ZSBoZXJlIChhbiBBbHBoYSB3aXRoIFZNUyA3LjEgYW5kIGEgVkFYIHdpdGggNS41KS4K LSAgU28gYmFjayB0byBNWUNVUlNFUywgd2hpY2ggd29ya3MgZmluZS4KLSovCi0jaWZkZWYgVk1T Ci0jdW5kZWYgQ0tfU01HCi0jZGVmaW5lIE1ZQ1VSU0VTCi0jZW5kaWYgLyogVk1TICovCi0KLSNp ZmRlZiBNWUNVUlNFUwotI2RlZmluZSBzdGRzY3IgMAotI2lmZGVmIENLX1dSRUZSRVNICi0jdW5k ZWYgQ0tfV1JFRlJFU0gKLSNlbmRpZiAvKiBDS19XUkVGUkVTSCAqLwotI2VuZGlmIC8qIE1ZQ1VS U0VTICovCi0KLS8qICBTIEMgUiBFIEUgTiBDICAtLSAgU2NyZWVuIGRpc3BsYXkgZnVuY3Rpb24s IHVzZXMgY3Vyc2VzICAqLwotCi0vKiBJZGVhIGZvciBjdXJzZXMgZGlzcGxheSBjb250cmlidXRl ZCBieSBDaHJpcyBQcmF0dCBvZiBBUFYgQmFrZXIsIFVLICovCi0KLS8qIEF2b2lkIGNvbmZpY3Rz IHdpdGggY3Vyc2VzLmggKi8KLQotI2lmZGVmIFFOWAotLyogU2FtZSBhcyBja2Nhc2MuaCwgYnV0 IGluIGEgZGlmZmVyZW50IHJhZGl4Li4uICovCi0jaWZkZWYgRVNDCi0jdW5kZWYgRVNDCi0jZW5k aWYgLyogRVNDICovCi0jZW5kaWYgLyogUU5YICovCi0KLSNpZm5kZWYgTVlDVVJTRVMKLSN1bmRl ZiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIHdhcyBkZWZpbmVkIGlu IGNrY2RlYi5oICovCi0jZW5kaWYgLyogTVlDVVJTRVMgKi8KLQotI3VuZGVmIEJTICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXNlIHdlcmUgZGVmaW5lZCBpbiBja2Nhc2MuaCAq LwotI3VuZGVmIENSCi0jdW5kZWYgTkwKLSN1bmRlZiBTTwotI2lmZGVmIFVTCi0jdW5kZWYgVVMK LSNlbmRpZgkvKiBVUyAqLwotI3VuZGVmIFNQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFVzZWQgaW4gbmN1cnNlcyAqLwotI2RlZmluZSBDSFJfU1AgMzIgICAgICAgICAgICAgICAg ICAgICAgIC8qIFVzZSB0aGlzIGluc3RlYWQgKi8KLQotI2lmZGVmIFZNUyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFZNUyBmdWxsc2NyZWVuIGRpc3BsYXkgKi8KLSNpZmRlZiBNWUNV UlNFUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEby1pdC15b3Vyc2VsZiBtZXRob2QgKi8K LWV4dGVybiBpbnQgaXN2dDUyOyAgICAgICAgICAgICAgICAgICAgICAvKiBGcm9tIENLVlRJTy5D ICovCi0jZGVmaW5lIHByaW50dyBwcmludGYKLSNlbHNlCi0jaWZkZWYgVk1TQ1VSU0UgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVk1TIGN1cnNlcyBsaWJyYXJ5IFZBWENDVVJTRSAqLwotI2lu Y2x1ZGUgPGN1cnNlcy5oPgotLyogTm90ZTogU2NyZWVuIG1hbmFnZXIgZG9lc24ndCBuZWVkIGEg aGVhZGVyIGZpbGUgKi8KLSNlbmRpZiAvKiBWTVNDVVJTRSAqLwotI2VuZGlmIC8qIE1ZQ1VSU0VT ICovCi0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IFZNUyAq LwotI2lmZGVmIE1ZQ1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvLWl0LXlvdXJz ZWxmIG1ldGhvZCAqLwotI2RlZmluZSBpc3Z0NTIgMCAgICAgICAgICAgICAgICAgICAgICAgIC8q IFVzZWQgYnkgT1MvMiwgVlQtMTAwL0FOU0kgYWx3YXlzICovCi0jaWZkZWYgQ0tYUFJJTlRGCi0j ZGVmaW5lIHByaW50dyBja3hwcmludGYKLSNlbHNlIC8qIENLWFBSSU5URiAqLwotI2lmZGVmIEtV SQotI2RlZmluZSBwcmludHcgVnNjcm5wcmludHcKLSNlbHNlIC8qIEtVSSAqLwotI2RlZmluZSBw cmludHcgcHJpbnRmCi0jZW5kaWYgLyogS1VJICovCi0jZW5kaWYgLyogQ0tYUFJJTlRGICovCi0j ZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHJlYWwgY3Vyc2Vz ICovCi0jaWZkZWYgQ0tfTkNVUlNFUyAgICAgICAgICAgICAgICAgICAgICAgLyogb3IgbmN1cnNl cy4uLiAqLwotI2lmZGVmIENLWFBSSU5URiAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91ciBw cmludGYgbWFjcm8gY29uZmxpY3RzIHdpdGggKi8KLSN1bmRlZiBwcmludGYgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB1c2Ugb2YgInByaW50ZiIgaW4gbmN1cnNlcy5oICovCi0jZW5kaWYg LyogQ0tYUFJJTlRGICovCi0jaW5jbHVkZSA8bmN1cnNlcy5oPgotI2lmZGVmIENLWFBSSU5URgot I2RlZmluZSBwcmludGYgY2t4cHJpbnRmCi0jZW5kaWYgLyogQ0tYUFJJTlRGICovCi0jZWxzZSAg LyogTm90IG5jdXJzZXMgKi8KLSNpZmRlZiBDS1hQUklOVEYgICAgICAgICAgICAgICAgICAgICAg ICAvKiBPdXIgcHJpbnRmIG1hY3JvIGNvbmZsaWN0cyB3aXRoICovCi0jdW5kZWYgcHJpbnRmICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNlIG9mICJwcmludGYiIGluIGN1cnNlcy5oICov Ci0jZW5kaWYgLyogQ0tYUFJJTlRGICovCi0jaWZkZWYgTV9YRU5JWAkJCQkvKiBTQ08gWEVOSVgu Li4gKi8KLSNpZmRlZiBNX1RFUk1DQVAKLSN1bmRlZiBNX1RFUk1DQVAKLSNlbmRpZiAvKiBNX1RF Uk1DQVAgKi8KLSNpZm5kZWYgTV9URVJNSU5GTwotI2RlZmluZSBNX1RFUk1JTkZPCi0jZW5kaWYg LyogTV9URVJNSU5GTyAqLwotI2VuZGlmIC8qIE1fWEVOSVggKi8KLSNpZmRlZiBSVEFJWAotI3Vu ZGVmIE5MUwkJCQkvKiBBdm9pZCAncmVkZWNsYXJhdGlvbiBvZiBmcmVlJy4gKi8KLSNlbmRpZiAv KiBSVEFJWCAqLwotI2luY2x1ZGUgPGN1cnNlcy5oPgotI2lmZGVmIENLWFBSSU5URgotI2RlZmlu ZSBwcmludGYgY2t4cHJpbnRmCi0jZW5kaWYgLyogQ0tYUFJJTlRGICovCi0jZW5kaWYgLyogQ0tf TkNVUlNFUyAqLwotI2VuZGlmIC8qIE1ZQ1VSU0VTICovCi0jZW5kaWYgLyogVk1TICovCi0KLSNp ZmRlZiBCVUc5OTkKLV9QUk9UT1RZUChpbnQgdGdldGVudCwoY2hhciAqLCBjaGFyICopKTsKLV9Q Uk9UT1RZUChjaGFyICp0Z2V0c3RyLChjaGFyICosIGNoYXIgKiopKTsKLV9QUk9UT1RZUChpbnQg dHB1dHMsKGNoYXIgKiwgaW50LCBpbnQgKCopKCkpKTsKLV9QUk9UT1RZUChjaGFyICp0Z290bywo Y29uc3QgY2hhciAqLCBpbnQsIGludCkpOwotI2VuZGlmCS8qIEJVRzk5OSAqLwotI2lmZGVmIGxp bnV4Ci0jaW5jbHVkZSA8dGVybS5oPgotI2VuZGlmCi0KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8K LQotLyogIEYgWCBEIEkgTiBJIFQgIC0tICBGaWxlIFhmZXIgRGlzcGxheSBJbml0aWFsaXphdGlv biAgKi8KLQotI2lmZGVmIENLX0NVUlNFUwotI2lmbmRlZiBNWUNVUlNFUwotI2lmbmRlZiBDS19T TUcKLXN0YXRpYwotI2lmZGVmIENLX0FOU0lDCi0vKiBDYW4ndCB1c2UgVk9JRCBiZWNhdXNlIG9m IGN1cnNlcy5oICovCi12b2lkCi1ja190ZXJtc2V0KGludCk7Ci0jZWxzZQotY2tfdGVybXNldCgp OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0jZW5kaWYgLyogQ0tfU01HICovCi0jZW5kaWYgLyog TVlDVVJTRVMgKi8KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLQotI2lmZGVmIE5PVEVSTUNBUAot c3RhdGljIGludCBub3Rlcm1jYXAgPSAxOwotI2Vsc2UKLXN0YXRpYyBpbnQgbm90ZXJtY2FwID0g MDsKLSNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KLQotI2lmbmRlZiBOT0RJU1BMQVkKLUNLVk9JRAot ZnhkaW5pdCh4ZGlzcGxhKSBpbnQgeGRpc3BsYTsgewotI2lmbmRlZiBDT0hFUkVOVAotI2lmbmRl ZiBPUzIKLSNpZm5kZWYgU1RSQVRVUwotICAgIGNoYXIgKnM7Ci0gICAgaW50IHgsIGR1bW15Owot Ci0gICAgZGVidWcoRjEwMSwiZnhkaW5pdCB4ZGlzcGxhIiwiIix4ZGlzcGxhKTsKLSAgICBkZWJ1 ZyhGMTAxLCJmeGRpbml0IGZ4ZF9pbml0ZWQiLCIiLGZ4ZF9pbml0ZWQpOwotCi0jaWZkZWYgSUtT RAotI2lmbmRlZiBOT1hGRVIKLSAgICAvKiBObyBjdXJzZXMgZm9yIElLU0QgKi8KLSAgICBpZiAo aW5zZXJ2ZXIpIHsKLSAgICAgICAgZmRpc3BsYSA9IFhZRkRfTjsKLSAgICAgICAgcmV0dXJuOwot ICAgIH0KLSAgICBpZiAoZnhkX2luaXRlZCkgICAgICAgICAgICAgICAgICAgICAvKiBPbmx5IGRv IHRoaXMgb25jZSAqLwotICAgICAgcmV0dXJuOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2VuZGlm IC8qIElLU0QgKi8KLQotICAgIGlmICh4ZGlzcGxhID09IFhZRkRfUiB8fCB4ZGlzcGxhID09IFhZ RkRfUyB8fCB4ZGlzcGxhID09IFhZRkRfQikgewotCWlmICh4ZnJtc2cpIHsKLQkgICAgcHJpbnRm KCIlc1xuIix4ZnJtc2cpOwotCSAgICBtYWtlc3RyKCZ4ZnJtc2csTlVMTCk7Ci0JfQotICAgIH0K LQotI2lmZGVmIENLX0NVUlNFUwotI2lmZGVmIFZNUwotICAgIC8qIEZvcmNlIEJSSUVGIGluIEJh dGNoIGxvZ3MgKi8KLSAgICBpZiAoYmF0Y2ggJiYgKHhkaXNwbGEgPT0gWFlGRF9DIHx8IHhkaXNw bGEgPT0gWFlGRF9TKSkKLSAgICAgIHhkaXNwbGEgPSBYWUZEX0I7Ci0jZWxzZQotICAgIGlmICh4 ZGlzcGxhID09IFhZRkRfQyB8fCB4ZGlzcGxhID09IDk5OTkpIHsKLQotI2lmZGVmIERZTkFNSUMK LSAgICAgICAgaWYgKCF0cm1idWYpIHsKLS8qCi0gIEFsbG9jYXRlIHRnZXRlbnQoKSBidWZmZXIu ICBNYWtlIGl0IGJpZyAtLSBzb21lIHRlcm1jYXBzIGNhbiBiZSBodWdlOwotICB0Z2V0ZW50KCkg bWVycmlseSB3cml0ZXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIGNhdXNpbmcgY29yZSBk dW1wcwotICBvciB3b3JzZS4KLSovCi0gICAgICAgICAgICB0cm1idWYgPSAoY2hhciAqKW1hbGxv YyhUUk1CVUZMKTsKLSAgICAgICAgICAgIGlmICghdHJtYnVmKSB7Ci0gICAgICAgICAgICAgICAg bm90ZXJtY2FwID0gMTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmeGRpbml0IG1hbGxv YyB0cm1idWYiLCJGQUlMRUQiLFRSTUJVRkwpOwotICAgICAgICAgICAgICAgIGZkaXNwbGEgPSBY WUZEX1M7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotI2lmZGVmIENP TU1FTlQKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ4ZGluaXQgbWFsbG9jIHRybWJ1ZiIsIk9L IixUUk1CVUZMKTsKLSAgICAgICAgICAgIGRlYnVnKEYwMDEsImZ4ZGluaXQgdHJtYnVmIiwiIix0 cm1idWYpOwotICAgICAgICAgICAgbWVtc2V0KHRybWJ1ZiwnXDAnLChzaXplX3QpVFJNQlVGTCk7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJmeGRpbml0IG1lbXNldCBPSyIsIiIsMCk7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotCi0gICAg ICAgIGRlYnVnKEYxMDAsImZ4ZGluaXQgYmVmb3JlIGdldGVudihURVJNKSIsIiIsMCk7Ci0gICAg ICAgIHMgPSBnZXRlbnYoIlRFUk0iKTsKLSAgICAgICAgZGVidWcoRjExMCwiZnhkaW5pdCBhZnRl ciBnZXRlbnYoVEVSTSkiLHMsMCk7Ci0gICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAgICBp ZiAoKnMpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ4ZGluaXQgYmVmb3JlIHRnZXRlbnQo KSIscywwKTsKLSAgICAgICAgICAgIHggPSB0Z2V0ZW50KHRybWJ1ZixzKTsKLSAgICAgICAgICAg IGRlYnVnKEYxMTEsImZ4ZGluaXQgdGdldGVudCIscyx4KTsKLSAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgIHggPSAwOwotICAgICAgICAgICAgbm90ZXJtY2FwID0gMTsKLSAgICAgICAgICAg IGRlYnVnKEYxMTAsImZ4ZGluaXQgVEVSTSBudWxsIC0gbm8gdGdldGVudCIscywwKTsKLSAgICAg ICAgfQotICAgICAgICBpZiAoeCA8IDEgJiYgIXF1aWV0ICYmICFiYWNrZ3JkCi0jaWZkZWYgVk1T Ci0gICAgICAgICAgICAmJiAhYmF0Y2gKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgICAgICkg ewotICAgICAgICAgICAgcHJpbnRmKCJXYXJuaW5nOiB0ZXJtaW5hbCB0eXBlIHVua25vd246IFwi JXNcIlxuIixzKTsKLSNpZmRlZiBDT01NRU5UCi0JICAgIC8qIENvbmZ1c2luZyAtIG5vYm9keSBr bm93cyB3aGF0IHRoaXMgbWVhbnMgKi8KLSAgICAgICAgICAgIHByaW50ZigiU0NSRUVOIGNvbW1h bmQgd2lsbCB1c2UgQU5TSSBzZXF1ZW5jZXMuXG4iKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0g ICAgICAgICAgICBpZiAobG9jYWwpCi0gICAgICAgICAgICAgIHByaW50ZigiRnVsbHNjcmVlbiBm aWxlIHRyYW5zZmVyIGRpc3BsYXkgZGlzYWJsZWQuXG4iKTsKLSAgICAgICAgICAgIGZkaXNwbGEg PSBYWUZEX1M7Ci0gICAgICAgIH0KLSNpZm5kZWYgTVlDVVJTRVMKLSNpZm5kZWYgQ0tfU01HCi0g ICAgICAgIGNrX3Rlcm1zZXQoeCk7Ci0jZW5kaWYgLyogQ0tfU01HICovCi0jZW5kaWYgLyogTVlD VVJTRVMgKi8KLSAgICAgICAgZnhkX2luaXRlZCA9IDE7Ci0gICAgfQotI2VuZGlmIC8qIENLX0NV UlNFUyAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotfQotI2VuZGlmIC8qIE5PRElTUExBWSAq LwotCi0jaWZkZWYgQ0tfQ1VSU0VTCi0jaWZkZWYgQ0tfU01HCi0vKgotICBMb25nIHNlY3Rpb24g Zm9yIFNjcmVlbiBNYW5hZ2VyIHN0YXJ0cyBoZXJlLi4uCi0gIEJ5IFdpbGxpYW0gQmFkZXIuCi0q LwotI2luY2x1ZGUgImNrdnZtcy5oIgotI2lmZGVmIE9MRF9WTVMKLSNpbmNsdWRlIDxzbWdkZWYu aD4gICAgICAgICAgICAgICAgICAgICAvKiB1c2UgdGhpcyBvbiBWQVggQyAyLjQgKi8KLS8qICNp bmNsdWRlIDxzbWdtc2cuaD4gKi8KLSNlbHNlCi0jaW5jbHVkZSA8c21nJHJvdXRpbmVzLmg+ICAg ICAgICAgICAgICAgLyogTWFydGluIFppbnNlciAqLwotI2VuZGlmIC8qIE9MRF9WTVMgKi8KLQot ZXh0ZXJuIHVuc2lnbmVkIGludCB2bXNfc3RhdHVzOyAgICAgLyogVXNlZCBmb3Igc3lzdGVtIHNl cnZpY2UgcmV0dXJuIHN0YXR1cyAqLwotCi1zdGF0aWMgbG9uZyBzbWdfcGFzdGVib2FyZF9pZCA9 IC0xOyAgICAgLyogcGFzdGVib2FyZCBpZGVudGlmaWVyICovCi1zdGF0aWMgbG9uZyBzbWdfZGlz cGxheV9pZCA9IC0xOyAgICAgICAgLyogZGlzcGxheSBpZGVudGlmaWVyICovCi1zdGF0aWMgaW50 IHNtZ19vcGVuID0gMDsgICAgICAgICAgICAgICAgLyogZmxhZyBpZiBzbWcgY3VycmVudCBvcGVu ICovCi1zdGF0aWMgaW50IHNtZ19pbml0ZWQgPSAwOyAgICAgICAgICAgICAgLyogZmxhZyBpZiBz bWcgaW5pdGlhbGl6ZWQgKi8KLQotI2lmZGVmIENPTU1FTlQKLSNkZWZpbmUgY2xydG9lb2woKSAg ICAgIFNNRyRFUkFTRV9MSU5FKCZzbWdfZGlzcGxheV9pZCwgMCwgMCkKLQotI2RlZmluZSBjbGVh cigpICAgICAgICAgU01HJEVSQVNFX0RJU1BMQVkoJnNtZ19kaXNwbGF5X2lkLCAwLCAwLCAwLCAw KQotCi0jZGVmaW5lIHRvdWNod2luKHNjcikgICBTTUckUkVQQUlOVF9TQ1JFRU4oJnNtZ19wYXN0 ZWJvYXJkX2lkKQotCi0jZWxzZSAgLyogTm90IENPTU1FTlQgKi8KLQotI2RlZmluZSBjbHJ0b2Vv bCgpICAgICAgc21nJGVyYXNlX2xpbmUoJnNtZ19kaXNwbGF5X2lkLCAwLCAwKQotCi0jZGVmaW5l IGNsZWFyKCkgICAgICAgICBzbWckZXJhc2VfZGlzcGxheSgmc21nX2Rpc3BsYXlfaWQsIDAsIDAs IDAsIDApCi0KLSNkZWZpbmUgdG91Y2h3aW4oc2NyKSAgIHNtZyRyZXBhaW50X3NjcmVlbigmc21n X3Bhc3RlYm9hcmRfaWQpCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jZGVmaW5lIGNsZWFyb2so Y3Vyc2NyLG9rKSAgICAgICAgICAgICAgLyogTGV0IHdyZWZyZXNoKCkgZG8gdGhlIHdvcmsgKi8K LQotI2RlZmluZSB3cmVmcmVzaChjdXJzcmMpIHRvdWNod2luKHNjcikKLQotc3RhdGljIHZvaWQK LW1vdmUocm93LCBjb2wpIGludCByb3csIGNvbDsgewotICAgIC8qIENoYW5nZSBmcm9tIDAtYmFz ZWQgZm9yIGN1cnNlcyB0byAxLWJhc2VkIGZvciBTTUcgKi8KLSAgICBpZiAoIXNtZ19vcGVuKQot ICAgICAgcmV0dXJuOwotICAgICsrcm93OyArK2NvbDsKLSAgICBkZWJ1ZyhGMTExLCJWTVMgc21n IG1vdmUiLGNraXRvYShyb3cpLGNvbCk7Ci0jaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTWFydGluIFppbnNlciAqLwotICAgIENIRUNLX0VSUigibW92ZTogc21nJHNl dF9jdXJzb3JfYWJzIiwKLSAgICAgICAgICAgICAgU01HJFNFVF9DVVJTT1JfQUJTKCZzbWdfZGlz cGxheV9pZCwgJnJvdywgJmNvbCkpOwotI2Vsc2UKLSAgICBDSEVDS19FUlIoIm1vdmU6IHNtZyRz ZXRfY3Vyc29yX2FicyIsCi0gICAgICAgICAgICAgIHNtZyRzZXRfY3Vyc29yX2Ficygmc21nX2Rp c3BsYXlfaWQsICZyb3csICZjb2wpKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgZGVidWco RjEwMSwiVk1TIHNtZyBtb3ZlIHZtc19zdGF0dXMiLCIiLHZtc19zdGF0dXMpOwotfQotCi0jaWZk ZWYgVk1TX1Y0MAotI2RlZmluZSBPTERfVk1TCi0jZW5kaWYgLyogVk1TX1Y0MCAqLwotI2lmZGVm IFZNU19WNDIKLSNkZWZpbmUgT0xEX1ZNUwotI2VuZGlmIC8qIFZNU19WNDIgKi8KLSNpZmRlZiBW TVNfVjQ0Ci0jZGVmaW5lIE9MRF9WTVMKLSNlbmRpZiAvKiBWTVNfVjQ0ICovCi0KLXN0YXRpYyBp bnQKLWluaXRzY3IoKSB7Ci0gICAgaW50IHJvd3MgPSAyNCwgY29scyA9IDgwOwotICAgIGludCBy b3cgPSAxLCBjb2wgPSAxOwotCi0gICAgZGVidWcoRjEwMSwiVk1TIGluaXRzY3Igc21nX3Bhc3Rl Ym9hcmRfaWQgQSIsIiIsc21nX3Bhc3RlYm9hcmRfaWQpOwotCi0gICAgaWYgKHNtZ19wYXN0ZWJv YXJkX2lkID09IC0xKSB7IC8qIE9wZW4gdGhlIHNjcmVlbiAqLwotI2lmZGVmIE9MRF9WTVMgICAg ICAgICAgICAgICAgICAgICAvKiBOb3RlOiBSb3V0aW5lIGNhbGxzIGxvd2VyY2FzZWQgOS85NiAq LwotICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRjcmVhdGVfcGFzdGVib2FyZCIsCi0g ICAgICAgICAgICAgICAgICBzbWckY3JlYXRlX3Bhc3RlYm9hcmQoJnNtZ19wYXN0ZWJvYXJkX2lk LCAwLCAwLCAwLCAwKSk7Ci0jZWxzZQotICAgICAgICAvKiBGb3IgVk1TIFY1LCBub3QgdGVzdGVk ICovCi0gICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJGNyZWF0ZV9wYXN0ZWJvYXJkIiwK LSAgICAgICAgICAgICAgICAgIHNtZyRjcmVhdGVfcGFzdGVib2FyZCgmc21nX3Bhc3RlYm9hcmRf aWQsIDAsIDAsIDAsIDAsIDApKTsKLSNlbmRpZiAvKiBPTERfVk1TICovCi0gICAgfQotICAgIGRl YnVnKEYxMDEsIlZNUyBpbml0c2NyIHNtZ19wYXN0ZWJvYXJkX2lkIEIiLCIiLHNtZ19wYXN0ZWJv YXJkX2lkKTsKLSAgICBpZiAoc21nX3Bhc3RlYm9hcmRfaWQgPT0gLTEpIHsKLQlwcmludGYoIj9F cnJvciBpbml0aWFsaXppbmcgZnVsbHNjcmVlbiBkaXNwbGF5XG4iKTsKLQlmZGlzcGxhID0gWFlG RF9TOwotCWRweWluaXQoKTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsIlZN UyBpbml0c2NyIHNtZ19kaXNwbGF5X2lkIiwiIixzbWdfZGlzcGxheV9pZCk7Ci0gICAgaWYgKHNt Z19kaXNwbGF5X2lkID09IC0xKSB7ICAgICAgICAgLyogQ3JlYXRlIGEgZGlzcGxheSB3aW5kb3cg Ki8KLQotI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hcnRpbiBa aW5zZXIgKi8KLSAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckY3JlYXRlX3ZpcnR1YWxf ZGlzcGxheSIsCi0gICAgICAgICAgICAgICAgICBTTUckQ1JFQVRFX1ZJUlRVQUxfRElTUExBWSgm cm93cywgJmNvbHMsICZzbWdfZGlzcGxheV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDAsIDAsIDApKTsKLQotICAgICAgICAvKiBDb25uZWN0IHRoZSBk aXNwbGF5IHdpbmRvdyB0byB0aGUgc2NyZWVuICovCi0gICAgICAgIENIRUNLX0VSUigiaW5pdHNj cjogc21nJHBhc3RlX3ZpcnR1YWxfZGlzcGxheSIsCi0gICAgICAgICAgICAgICAgICBTTUckUEFT VEVfVklSVFVBTF9ESVNQTEFZKCZzbWdfZGlzcGxheV9pZCwmc21nX3Bhc3RlYm9hcmRfaWQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyb3csJmNvbCkpOwot I2Vsc2UKLSAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckY3JlYXRlX3ZpcnR1YWxfZGlz cGxheSIsCi0gICAgICAgICAgICAgICAgICBzbWckY3JlYXRlX3ZpcnR1YWxfZGlzcGxheSgmcm93 cywgJmNvbHMsICZzbWdfZGlzcGxheV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAsIDAsIDApKTsKLQotICAgICAgICAvKiBDb25uZWN0IHRoZSBkaXNw bGF5IHdpbmRvdyB0byB0aGUgc2NyZWVuICovCi0gICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjog c21nJHBhc3RlX3ZpcnR1YWxfZGlzcGxheSIsCi0gICAgICAgICAgICAgICAgICBzbWckcGFzdGVf dmlydHVhbF9kaXNwbGF5KCZzbWdfZGlzcGxheV9pZCwmc21nX3Bhc3RlYm9hcmRfaWQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyb3csJmNvbCkpOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiVk1TIGluaXRzY3Igc21n X29wZW4gQSIsIiIsc21nX29wZW4pOwotICAgIGlmICghc21nX29wZW4pIHsgICAgICAgICAgICAg ICAgICAgIC8qIFN0YXJ0IGEgYmF0Y2ggdXBkYXRlICovCi0gICAgICAgIHNtZ19vcGVuID0gMTsK LSNpZmRlZiBDT01NRU5UCi0gICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJGJlZ2luX3Bh c3RlYm9hcmRfdXBkYXRlIiwKLSAgICAgICAgICAgICAgICAgIFNNRyRCRUdJTl9QQVNURUJPQVJE X1VQREFURSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKLSNlbHNlCi0gICAgICAgIENIRUNLX0VSUigi aW5pdHNjcjogc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlIiwKLSAgICAgICAgICAgICAgICAg IHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKLSNlbmRp ZiAvKiBDT01NRU5UICovCi0JZGVidWcoRjEwMSwiVk1TIGluaXRzY3Igc21nJGJlZ2luX3Bhc3Rl Ym9hcmRfdXBkYXRlIiwiIix2bXNfc3RhdHVzKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiVk1T IGluaXRzY3Igc21nX29wZW4gQiIsIiIsc21nX29wZW4pOwotICAgIHNtZ19pbml0ZWQgPSAxOwot ICAgIHJldHVybigxKTsKLX0KLQotc3RhdGljIHZvaWQKLXJlZnJlc2goKSB7Ci0gICAgZGVidWco RjEwMSwicmVmcmVzaCBzbWdfcGFzdGVib2FyZF9pZCIsIiIsc21nX3Bhc3RlYm9hcmRfaWQpOwot Ci0gICAgaWYgKHNtZ19vcGVuID09IDAgfHwgc21nX3Bhc3RlYm9hcmRfaWQgPT0gLTEpCi0gICAg ICByZXR1cm47Ci0KLSNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBN YXJ0aW4gWmluc2VyICovCi0gICAgQ0hFQ0tfRVJSKCJyZWZyZXNoOiBzbWckZW5kX3Bhc3RlYm9h cmRfdXBkYXRlIiwKLSAgICAgICAgICAgICAgU01HJEVORF9QQVNURUJPQVJEX1VQREFURSgmc21n X3Bhc3RlYm9hcmRfaWQpKTsKLSAgICBDSEVDS19FUlIoInJlZnJlc2g6IHNtZyRiZWdpbl9wYXN0 ZWJvYXJkX3VwZGF0ZSIsCi0gICAgICAgICAgICAgIFNNRyRCRUdJTl9QQVNURUJPQVJEX1VQREFU RSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKLSNlbHNlCi0gICAgQ0hFQ0tfRVJSKCJyZWZyZXNoOiBz bWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlIiwKLSAgICAgICAgICAgICAgc21nJGVuZF9wYXN0ZWJv YXJkX3VwZGF0ZSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKLSAgICBDSEVDS19FUlIoInJlZnJlc2g6 IHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSIsCi0gICAgICAgICAgICAgIHNtZyRiZWdpbl9w YXN0ZWJvYXJkX3VwZGF0ZSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi19Ci0KLXN0YXRpYyB2b2lkCi1lbmR3aW4oKSB7Ci0gICAgaWYgKCFzbWdfb3BlbikKLSAg ICAgIHJldHVybjsKLQotICAgIHNtZ19vcGVuID0gMDsKLQotI2lmZGVmIENPTU1FTlQKLSAgICBD SEVDS19FUlIoImVuZHdpbjogc21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSIsCi0gICAgICAgICAg ICAgIFNNRyRFTkRfUEFTVEVCT0FSRF9VUERBVEUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7Ci0jZWxz ZQotICAgIENIRUNLX0VSUigiZW5kd2luOiBzbWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlIiwKLSAg ICAgICAgICAgICAgc21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSgmc21nX3Bhc3RlYm9hcmRfaWQp KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICBtb3ZlKDIyLCAwKTsKLQotI2lmZGVmIENP TU1FTlQKLS8qCi0gIFRoZXNlIGNhbGxzIGNsZWFyIHRoZSBzY3JlZW4uCi0gIChjb252ZXJ0IHJv dXRpbmUgY2FsbHMgdG8gbG93ZXJjYXNlIC0gTWFydGluIFppbnNlcikKLSovCi0gICAgQ0hFQ0tf RVJSKCJlbmR3aW46IHNtZyRkZWxldGVfdmlydHVhbF9kaXNwbGF5IiwKLSAgICAgICAgICAgICAg U01HJERFTEVURV9WSVJUVUFMX0RJU1BMQVkoJnNtZ19kaXNwbGF5X2lkKSk7Ci0gICAgc21nX2Rp c3BsYXlfaWQgPSAtMTsKLQotICAgIENIRUNLX0VSUigiZW5kd2luOiBzbWckZGVsZXRlX3Bhc3Rl Ym9hcmQiLAotICAgICAgICAgICAgICBTTUckREVMRVRFX1BBU1RFQk9BUkQoJnNtZ19wYXN0ZWJv YXJkX2lkLCAwKSk7Ci0gICAgc21nX3Bhc3RlYm9hcmRfaWQgPSAtMTsKLSNlbmRpZiAvKiBDT01N RU5UICovCi19Ci0KLSNpZmRlZiBDT01NRU5UCi0vKiBERUNDIDYuMiBzY3JlYW1zIGJsb29keSBt dXJkZXIgYWJvdXQgcHJpbnR3ICgibm90IGVub3VnaCBhcmdzIikgKi8KLS8qIGJ1dCBhZGRpbmcg dGhlIGZvbGxvd2luZyBwcm90b3R5cGUgb25seSBtYWtlcyBpdCBob2xsZXIgbG91ZGVyLiAqLwot I2lmZGVmIF9fREVDQwotLyogInZhcmFyZ3MiIHByb3RvdHlwZSBmb3IgcHJpbnR3ICovCi1fUFJP VE9UWVAoc3RhdGljIGludCBwcmludHcsKGNoYXIgKiwgLi4uKSk7Ci0jZW5kaWYgLyogX19ERUND ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgX19ERUNDCi0jaW5jbHVkZSA8c3Rk YXJnLmg+Ci1fUFJPVE9UWVAoc3RhdGljIHZvaWQgcHJpbnR3LChjaGFyICosIC4uLikpOwotc3Rh dGljIHZvaWQKLXByaW50dyhjaGFyICpzdHIsLi4uKSB7Ci0gICAgY2hhciBidWZbMjU1XTsKLSAg ICB2YV9saXN0IGFwOwotICAgICRERVNDUklQVE9SKHRleHRfZHNjLCAwKTsKLSAgICB0ZXh0X2Rz Yy5kc2MkYV9wb2ludGVyPWJ1ZjsKLSAgICBpZiAoIXNtZ19vcGVuKQotICAgICAgcmV0dXJuOwot ICAgIHZhX3N0YXJ0KGFwLHN0cik7Ci0gICAgdGV4dF9kc2MuZHNjJHdfbGVuZ3RoID0gdnNwcmlu dGYoYnVmLCBzdHIsIGFwKTsKLSAgICB2YV9lbmQoYXApOwotICAgIENIRUNLX0VSUigicHJpbnR3 OiBzbWckcHV0X2NoYXJzIiwKLSAgICAgICAgICAgICAgc21nJHB1dF9jaGFycygmc21nX2Rpc3Bs YXlfaWQsICZ0ZXh0X2RzYywgMCwgMCwgMCwgMCwgMCkpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lk Ci1wcmludHcoc3RyLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpCi0gICAgY2hhciAq c3RyOwotICAgIGxvbmcgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4OwotLyogcHJpbnR3 ICovIHsKLSAgICBjaGFyIGJ1ZlsyNTVdOwotICAgICRERVNDUklQVE9SKHRleHRfZHNjLCAwKTsK LSAgICBpZiAoIXNtZ19vcGVuKQotICAgICAgcmV0dXJuOwotICAgIHRleHRfZHNjLmRzYyRhX3Bv aW50ZXI9YnVmOwotICAgIHRleHRfZHNjLmRzYyR3X2xlbmd0aCA9IHNwcmludGYoYnVmLCBzdHIs IGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCk7Ci0gICAgQ0hFQ0tfRVJSKCJwcmludHc6 IHNtZyRwdXRfY2hhcnMiLAotICAgICAgICAgICAgICBzbWckcHV0X2NoYXJzKCZzbWdfZGlzcGxh eV9pZCwgJnRleHRfZHNjLCAwLCAwLCAwLCAwLCAwKSk7Ci19Ci0jZW5kaWYgLyogX19ERUNDICov Ci0KLSNkZWZpbmUgQ0tfQ1VSUE9TCi1pbnQKLWNrX2N1cnBvcyhyb3csIGNvbCkgewotICAgIGRl YnVnKEYxMTEsIlZNUyBzbWcgY2tfY3VycG9zIixja2l0b2Eocm93KSxjb2wpOwotICAgIGlmICgh c21nX2luaXRlZCB8fCAhc21nX29wZW4pIHsKLSAgICAgICAgaW5pdHNjcigpOwotICAgIH0KLSAg ICBkZWJ1ZyhGMTAxLCJWTVMgc21nIGN1cnBvcyBzbWdfb3BlbiIsIiIsc21nX29wZW4pOwotICAg IGlmICghc21nX29wZW4pCi0gICAgICByZXR1cm4oMCk7Ci0gICAgZGVidWcoRjExMSwiVk1TIHNt ZyBja19jdXJwb3MiLGNraXRvYShyb3ctMSksY29sLTEpOwotICAgIG1vdmUocm93IC0gMSwgY29s IC0gMSk7ICAgICAgICAgICAgIC8qIFNNRyBpcyAwLWJhc2VkICovCi0gICAgcmVmcmVzaCgpOwot ICAgIC8qIGVuZHdpbigpOyAqLwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci1ja19jbHMoKSB7 Ci0gICAgZGVidWcoRjEwMSwiVk1TIHNtZyBja19jbHMgc21nX2luaXRlZCIsIiIsc21nX2luaXRl ZCk7Ci0gICAgaWYgKCFzbWdfaW5pdGVkIHx8ICFzbWdfb3BlbikgewotICAgICAgICBpbml0c2Ny KCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgY2tfY2xzIHNtZ19vcGVuIiwiIixz bWdfb3Blbik7Ci0gICAgaWYgKCFzbWdfb3BlbikKLSAgICAgIHJldHVybigwKTsKLSAgICBjbGVh cigpOwotICAgIHJlZnJlc2goKTsKLSAgICAvKiBlbmR3aW4oKTsgKi8KLSAgICByZXR1cm4oMCk7 Ci19Ci0KLWludAotY2tfY2xlb2woKSB7Ci0gICAgZGVidWcoRjEwMSwiVk1TIHNtZyBja19jbGVv bCBzbWdfaW5pdGVkIiwiIixzbWdfaW5pdGVkKTsKLSAgICBpZiAoIXNtZ19pbml0ZWQgfHwgIXNt Z19vcGVuKSB7Ci0gICAgICAgIGluaXRzY3IoKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiVk1T IHNtZyBja19jbGVvbCBzbWdfb3BlbiIsIiIsc21nX29wZW4pOwotICAgIGlmICghc21nX29wZW4p Ci0gICAgICByZXR1cm4oMCk7Ci0gICAgY2xydG9lb2woKTsKLSAgICByZWZyZXNoKCk7Ci0gICAg LyogZW5kd2luKCk7ICovCi0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIENLX1NNRyAqLwot Ci0jaWZkZWYgTVlDVVJTRVMKLS8qCi0gIERvLWl0LXlvdXJzZWxmIGN1cnNlcyBpbXBsZW1lbnRh dGlvbiBmb3IgVk1TLCBPUy8yIGFuZCBvdGhlciBBTlNJL1ZULTEwMCdzLgotICBTdXBwb3J0cyBv bmx5IHRoZSBWVDUyIGFuZCBWVDF4eCAoYW5kIGxhdGVyIFZUMnh4LzN4eC80eHgpIHRlcm1pbmFs cy4KLSAgQnkgVGVycnkgS2VubmVkeSwgU3QgUGV0ZXJzIENvbGxlZ2UuCi0KLSAgRmlyc3QsIHNv bWUgc3R1ZmYgd2UgY2FuIGp1c3QgaWdub3JlOgotKi8KLQotc3RhdGljIGludAotdG91Y2h3aW4o eCkgaW50IHg7IHsKLSAgICByZXR1cm4oMCk7Ci19Ci1zdGF0aWMgaW50Ci1pbml0c2NyKCkgewot ICAgIHJldHVybigwKTsKLX0KLXN0YXRpYyBpbnQKLXJlZnJlc2goKSB7Ci0gICAgcmV0dXJuKDAp OwotfQotc3RhdGljIGludAotZW5kd2luKCkgewotICAgIHJldHVybigwKTsKLX0KLQotLyoKLSAq IE5vdywgc29tZSBzdHVmZiB3ZSBuZWVkIHRvIGRvOgotICovCi0KLV9QUk9UT1RZUCggaW50IG1v dmUsIChpbnQsIGludCkgKTsKLSNpZm5kZWYgT1MyCi1pbnQKLW1vdmUocm93LCBjb2wpIGludCBy b3csIGNvbDsgewotICAgIGlmIChpc3Z0NTIpCi0gICAgICBwcmludGYoIlwwMzNZJWMlYyIsIHJv dyArIDAzNywgY29sICsgMDM3KTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIlwwMzNbJWQ7JWRI Iiwgcm93ICsgMSwgY29sICsgMSk7Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLWNsZWFyKCkg ewotICAgIG1vdmUoMCwwKTsKLSAgICBpZiAoaXN2dDUyKQotICAgICAgcHJpbnRmKCJcMDMzSiIp OwotICAgIGVsc2UKLSAgICAgIHByaW50ZigiXDAzM1tKIik7Ci0gICAgcmV0dXJuKDApOwotfQot Ci1pbnQKLWNscnRvZW9sKCkgewotICAgIGlmIChpc3Z0NTIpCi0gICAgICBwcmludGYoIlwwMzNL Iik7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCJcMDMzW0siKTsKLSAgICByZXR1cm4oMCk7Ci19 Ci0KLSNkZWZpbmUgQ0tfQ1VSUE9TCi1pbnQKLWNrX2NscygpIHsKLSAgICByZXR1cm4oY2xlYXIo KSk7Ci19Ci0KLWludAotY2tfY2xlb2woKSB7Ci0gICAgcmV0dXJuKGNscnRvZW9sKCkpOwotfQot Ci1pbnQKLWNrX2N1cnBvcyhyb3csIGNvbCkgaW50IHJvdywgY29sOyB7Ci0gICAgbW92ZShyb3cs IGNvbCk7Ci0gICAgcmV0dXJuKDApOwotfQotCi0jZWxzZSAvKiBPUzIgKi8KLS8qIFdpbmRvd3Mg TlQgYW5kIFdpbmRvd3MgOTUgZG8gbm90IHByb3ZpZGUgQU5TSSBlbXVsYXRpb24gKi8KLS8qIFRo ZXJlZm9yZSB3ZSBtaWdodCBhcyB3ZWxsIG5vdCB1c2UgaXQgZm9yIE9TLzIgZWl0aGVyICAgKi8K LQotaW50Ci1tb3ZlKHJvdywgY29sKSBpbnQgcm93LCBjb2w7IHsKLSNpZm5kZWYgT05FVEVSTVVQ RAotICAgIFNldEN1clBvcyhyb3csIGNvbCk7Ci0jZW5kaWYgLyogT05FVEVSTVVQRCAqLwotICAg IGxnb3RveHkoIFZDTUQsIGNvbCsxLCByb3crMSk7Ci0gICAgVnNjcm5Jc0RpcnR5KFZDTUQpOwot ICAgIHJldHVybigwKTsKLX0KLQotaW50Ci1jbGVhcigpIHsKLSAgICB2aW9jZWxsIGNlbGw7Ci0g ICAgbW92ZSgwLDApOwotI2lmZGVmIE9ORVRFUk1VUEQKLSAgICBpZiAoVnNjcm5HZXRCdWZmZXJT aXplKFZDTUQpID4gMCkgewotICAgICAgICBWc2NyblNjcm9sbChWQ01ELCBVUFdBUkQsIDAsCi0g ICAgICAgICAgICAgICAgICAgIFZzY3JuR2V0SGVpZ2h0KFZDTUQpLSgxKSwKLSAgICAgICAgICAg ICAgICAgICAgVnNjcm5HZXRIZWlnaHQoVkNNRCktKDApLCBUUlVFLCBDSFJfU1ApOwotICAgICAg ICBjbGVhcnRlcm1zY3JlZW4oVkNNRCk7Ci0gICAgfQotI2Vsc2UKLSAgICBjZWxsLmMgPSAnICc7 Ci0gICAgY2VsbC5hID0gY29sb3JjbWQ7Ci0gICAgV3J0TkNlbGwoY2VsbCwgY21kX3Jvd3MgKiBj bWRfY29scywgMCwgMCk7Ci0jZW5kaWYgLyogT05FVEVSTVVQRCAqLwotICAgIHJldHVybigwKTsK LX0KLQotaW50Ci1jbHJ0b2VvbCgpIHsKLSAgICBVU0hPUlQgcm93LCBjb2w7Ci0gICAgdmlvY2Vs bCBjZWxsOwotCi0gICAgY2VsbC5jID0gJyAnOwotICAgIGNlbGwuYSA9IGNvbG9yY21kOwotI2lm bmRlZiBPTkVURVJNVVBECi0gICAgR2V0Q3VyUG9zKCZyb3csICZjb2wgKTsKLSAgICBXcnROQ2Vs bChjZWxsLCBjbWRfY29scyAtIGNvbCAtMSwgcm93LCBjb2wpOwotI2VuZGlmIC8qIE9ORVRFUk1V UEQgKi8KLSAgICBjbHJ0b2VvbG4oVkNNRCxDSFJfU1ApOwotICAgIHJldHVybigwKTsKLX0KLQot I2RlZmluZSBDS19DVVJQT1MKLWludAotY2tfY3VycG9zKHJvdywgY29sKSBpbnQgcm93LCBjb2w7 IHsKLSAgICBtb3ZlKHJvdywgY29sKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotY2tfY2xz KCkgewotICAgIHJldHVybihjbGVhcigpKTsKLX0KLQotaW50Ci1ja19jbGVvbCgpIHsKLSAgICBy ZXR1cm4oY2xydG9lb2woKSk7Ci19Ci0KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBNWUNV UlNFUyAqLwotCi0jaWZuZGVmIE5PVEVSTUNBUAotI2lmbmRlZiBDS19DVVJQT1MKLSNkZWZpbmUg Q0tfQ1VSUE9TCi0KLS8qIFRlcm1jYXAvVGVybWluZm8gc2VjdGlvbiAqLwotCi1zdGF0aWMgY2hh ciBjdXJfY2xzWzMyXSA9IHsgTlVMLCBOVUwgfTsKLXN0YXRpYyBjaGFyIGN1cl9jbGVvbFszMl0g PSB7IE5VTCwgTlVMIH07Ci1zdGF0aWMgY2hhciBjdXJfY21bNjRdID0geyBOVUwsIE5VTCB9Owot c3RhdGljIGNoYXIgdGdzYnVmWzEyOF0gPSB7IE5VTCwgTlVMIH07Ci0KLXN0YXRpYwotI2lmZGVm IENLX0FOU0lDCi12b2lkCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLWNrX3Rlcm1zZXQoeCkgaW50 IHg7IHsKLSAgICBjdXJfY2xzWzBdID0gTlVMOwotICAgIGN1cl9jbGVvbFswXSA9IE5VTDsKLSAg ICBjdXJfY21bMF0gPSBOVUw7Ci0jaWZkZWYgdGdldGVudAotICAgIGRlYnVnKEYxMDAsInRnZXRl bnQgaXMgYSBtYWNybyIsIiIsMCk7Ci0jZW5kaWYgLyogdGdldGVudCAqLwotI2lmZGVmIHRnZXRz dHIKLSAgICBkZWJ1ZyhGMTAwLCJ0Z2V0c3RyIGlzIGEgbWFjcm8iLCIiLDApOwotI2VuZGlmIC8q IHRnZXRzdHIgKi8KLSNpZmRlZiB0cHV0cwotICAgIGRlYnVnKEYxMDAsInRwdXRzIGlzIGEgbWFj cm8iLCIiLDApOwotI2VuZGlmIC8qIHRwdXRzICovCi0jaWZkZWYgdGdvdG8KLSAgICBkZWJ1ZyhG MTAwLCJ0Z290byBpcyBhIG1hY3JvIiwiIiwwKTsKLSNlbmRpZiAvKiB0Z290byAqLwotI2lmZGVm IE5PVEVSTUNBUAotICAgIC8qIHRnZXRzdHIoKSBnZXRzIGEgc2VnbWVudGF0aW9uIGZhdWx0IG9u IE9TRi8xICovCi0gICAgZGVidWcoRjEwMCwiY2tfdGVybXNldCBOT1RFUk1DQVAiLCIiLDApOwot I2Vsc2UKLSAgICBpZiAobm90ZXJtY2FwKSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsImNrX3Rlcm1z ZXQgbm90ZXJtY2FwIiwiIiwwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBkZWJ1ZyhG MTAxLCJja190ZXJtc2V0IHgiLCIiLHgpOwotICAgIGlmICh4ID4gMCkgewotICAgICAgICBjaGFy ICogYnA7Ci0gICAgICAgIGJwID0gdGdzYnVmOwotICAgICAgICAqYnAgPSBOVUw7Ci0gICAgICAg IGRlYnVnKEYxMTAsImNrX3Rlcm1zZXQgY2FsbGluZyB0Z2V0c3RyIiwiY2wiLDApOwotICAgICAg ICBpZiAodGdldHN0cigiY2wiLCAmYnApKSB7ICAgICAgIC8qIEdldCBjbGVhci1zY3JlZW4gY29k ZSAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdGVybXNldCB0Z2V0c3RyIGNsIix0Z3Ni dWYsIiIpOwotICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKHRnc2J1ZikgPCAzMikKLSAgICAg ICAgICAgICAgY2tzdHJuY3B5KGN1cl9jbHMsdGdzYnVmLDMyKTsKLSAgICAgICAgfSBlbHNlCi0g ICAgICAgICAgcmV0dXJuOwotICAgICAgICBicCA9IHRnc2J1ZjsKLSAgICAgICAgaWYgKHRnZXRz dHIoImNlIiwgJmJwKSkgeyAgICAgICAvKiBHZXQgY2xlYXItdG8tZW5kLW9mLWxpbmUgY29kZSAq LwotICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdGVybXNldCB0Z2V0c3RyIGNlIix0Z3NidWYs IiIpOwotICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKHRnc2J1ZikgPCAzMikKLSAgICAgICAg ICAgICAgY2tzdHJuY3B5KGN1cl9jbGVvbCx0Z3NidWYsMzIpOwotICAgICAgICB9IGVsc2UKLSAg ICAgICAgICByZXR1cm47Ci0gICAgICAgIGJwID0gdGdzYnVmOwotICAgICAgICBpZiAodGdldHN0 cigiY20iLCAmYnApKSB7ICAgICAgIC8qIEdldCBjdXJzb3ItbW92ZW1lbnQgY29kZSAqLwotICAg ICAgICAgICAgZGVidWcoRjExMCwiY2tfdGVybXNldCB0Z2V0c3RyIGNtIix0Z3NidWYsIiIpOwot ICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKHRnc2J1ZikgPCA2NCkKLSAgICAgICAgICAgICAg Y2tzdHJuY3B5KGN1cl9jbSx0Z3NidWYsNjQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICBy ZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIE5PVEVSTUNBUCAqLwotfQotCi0jaWZuZGVmIFRQVVRT Rk5UWVBFCi0jaWZkZWYgVFBVVFNJU1ZPSUQKLSNkZWZpbmUgVFBVVFNGTlRZUEUgdm9pZAotI2Vs c2UKLSNkZWZpbmUgVFBVVFNGTlRZUEUgaW50Ci0jZW5kaWYgLyogVFBVVFNJU1ZPSUQgKi8KLSNl bmRpZiAvKiBUUFVUU0ZOVFlQRSAqLwotCi0jaWZuZGVmIFRQVVRTQVJHVFlQRQotI2lmZGVmIEhQ VVg5Ci0jZGVmaW5lIFRQVVRTQVJHVFlQRSBjaGFyCi0jZWxzZQotI2lmZGVmIEhQVVgxMAotI2Rl ZmluZSBUUFVUU0FSR1RZUEUgY2hhcgotI2Vsc2UKLSNkZWZpbmUgVFBVVFNBUkdUWVBFIGludAot I2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlmIC8qIEhQVVg5ICovCi0jZW5kaWYgLyogVFBVVFNB UkdUWVBFICovCi0KLXN0YXRpYyBUUFVUU0ZOVFlQRQotI2lmZGVmIENLX0FOU0lDCi1ja19vdXRj KFRQVVRTQVJHVFlQRSB4KQotI2Vsc2UKLWNrX291dGMoeCkgVFBVVFNBUkdUWVBFIHg7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBUbyBzYXRpc2Z5IHRwdXRzKCkgYXJnMyBwcm90b3R5cGUgKi8KLSAgICBpbnQgcmM7Ci0g ICAgY2hhciBjOwotICAgIGMgPSAoY2hhcikgeDsKLSAgICByYyA9IChpbnNlcnZlcikgPyB0dG9j KGMpIDogY29ub2MoYyk7Ci0jaWZuZGVmIFRQVVRTSVNWT0lECi0gICAgcmV0dXJuKHJjKTsKLSNl bmRpZiAvKiBUUFVUU0lTVk9JRCAqLwotfQotCi1pbnQKLWNrX2N1cnBvcyhyb3csIGNvbCkgaW50 IHJvdywgY29sOyB7Ci0jaWZkZWYgQ0tfQU5TSUMKLSAgICBUUFVUU0ZOVFlQRSAoKmZuKShUUFVU U0FSR1RZUEUpOwotI2Vsc2UKLSAgICBUUFVUU0ZOVFlQRSAoKmZuKSgpOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi0gICAgaWYgKCFmeGRfaW5pdGVkKQotICAgICAgZnhkaW5pdCg5OTk5KTsKLSAg ICBpZiAoIWN1cl9jbVswXSkgeyAgICAgICAgICAgICAgICAgICAvKiBXZSBkb24ndCBoYXZlIGVz Y2FwZSBzZXF1ZW5jZXMgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIHJldHVybigtMSk7ICAg ICAgICAgICAgICAgICAgICAgLyogRG8gbm90aGluZyAqLwotI2Vsc2UKLSAgICAgICAgLyogQm90 aCBDLUtlcm1pdCdzIFNDUkVFTiBjb21tYW5kIGFuZCBBTlNJL1ZUMTAwIGFyZSAxLWJhc2VkICov Ci0gICAgICAgIHByaW50ZigiXDAzM1slZDslZEgiLCByb3csIGNvbCk7IC8qIE9yIGRlZmF1bHQg dG8gQU5TSSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBm biA9IGNrX291dGM7Ci0gICAgICAgIC8qIHRlcm1jYXAvdGVybWluZm8gaXMgMC1iYXNlZCAqLwot ICAgICAgICB0cHV0cygKLSNpZmRlZiBUUFVUU0FSRzFDT05TVAotICAgICAgICAgICAgICAoY29u c3QgY2hhciAqKQotI2VuZGlmIC8qIFRQVVRTQVJHMUNPTlNUICovCi0gICAgICAgICAgICAgIHRn b3RvKGN1cl9jbSxjb2wtMSxyb3ctMSksMSxmbik7Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0K LQotaW50Ci1ja19jbHMoKSB7Ci0jaWZkZWYgQ0tfQU5TSUMKLSAgICBUUFVUU0ZOVFlQRSAoKmZu KShUUFVUU0FSR1RZUEUpOwotI2Vsc2UKLSAgICBUUFVUU0ZOVFlQRSAoKmZuKSgpOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi0gICAgaWYgKCFmeGRfaW5pdGVkKQotICAgICAgZnhkaW5pdCg5OTk5 KTsKLSAgICBpZiAoIWN1cl9jbHNbMF0pIHsgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBkb24n dCBoYXZlIGVzY2FwZSBzZXF1ZW5jZXMgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIHJldHVy bigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90aGluZyAqLwotI2Vsc2UKLSAgICAg ICAgcHJpbnRmKCJcMDMzWztIXDAzM1sySiIpOyAgICAgICAvKiBPciBkZWZhdWx0IHRvIEFOU0kg Ki8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZm4gPSBja19v dXRjOwotICAgICAgICBkZWJ1ZyhGMTExLCJja19jbHMgMiIsY3VyX2NscyxmeGRfaW5pdGVkKTsK LSAgICAgICAgdHB1dHMoY3VyX2NscyxjbWRfcm93cyxmbik7Ci0gICAgfQotICAgIHJldHVybigw KTsKLX0KLQotaW50Ci1ja19jbGVvbCgpIHsKLSNpZmRlZiBDS19BTlNJQwotICAgIFRQVVRTRk5U WVBFICgqZm4pKFRQVVRTQVJHVFlQRSk7Ci0jZWxzZQotICAgIFRQVVRTRk5UWVBFICgqZm4pKCk7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSAgICBpZiAoIWZ4ZF9pbml0ZWQpCi0gICAgICBmeGRp bml0KDk5OTkpOwotICAgIGlmICghY3VyX2NsZW9sWzBdKSB7ICAgICAgICAgICAgICAgIC8qIElm IHdlIGRvbid0IGhhdmUgZXNjYXBlIHNlcXVlbmNlcyAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAg ICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3RoaW5nICovCi0jZWxz ZQotICAgICAgICBwcmludGYoIlwwMzNbSyIpOyAgICAgICAgICAgICAgIC8qIE9yIHVzZSBBTlNJ ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZuID0gY2tf b3V0YzsKLSAgICAgICAgdHB1dHMoY3VyX2NsZW9sLDEsZm4pOwotICAgIH0KLSAgICByZXR1cm4o MCk7Ci19Ci0jZW5kaWYgLyogQ0tfQ1VSUE9TICovCi0jZWxzZQotc3RhdGljIHZvaWQKLWNrX3Rl cm1zZXQoeCkgaW50IHg7IHsKLSAgICBpZiAoeCkgcmV0dXJuOwotfQotI2VuZGlmIC8qIE5PVEVS TUNBUCAqLwotCi0jaWZuZGVmIENLX0NVUlBPUwotI2RlZmluZSBDS19DVVJQT1MKLWludAotY2tf Y2xzKCkgewotICAgIHByaW50ZigiXDAzM1s7SFwwMzNbMkoiKTsKLSAgICByZXR1cm4oMCk7Ci19 Ci0KLWludAotY2tfY2xlb2woKSB7Ci0gICAgcHJpbnRmKCJcMDMzW0siKTsKLSAgICByZXR1cm4o MCk7Ci19Ci0KLWludAotY2tfY3VycG9zKHJvdywgY29sKSBpbnQgcm93LCBjb2w7IHsKLSAgICBw cmludGYoIlwwMzNbJWQ7JWRIIiwgcm93LCBjb2wpOwotICAgIHJldHVybigwKTsKLX0KLSNlbmRp ZiAvKiBDS19DVVJQT1MgKi8KLQotCi0jaWZuZGVmIE5PWEZFUgotc3RhdGljIGludCBjaW5pdCA9 IDA7ICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGN1cnNlcyBpbml0J2QgKi8KLXN0YXRp YyBpbnQgY2VuZHcgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBlbmR3aW4oKSB3YXMgY2FsbGVk ICovCi0KLXN0YXRpYwotI2lmZGVmIENLX0FOU0lDICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEJlY2F1c2UgVk9JRCB1c2VkIGJ5IGN1cnNlcy5oICovCi12b2lkCi0jZWxzZQotI2lmZGVmIE1Z Q1VSU0VTCi1WT0lECi0jZWxzZQotaW50Ci0jZW5kaWYgLyogTVlDVVJTRVMgKi8KLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotI2lmZGVmIENLX0FOU0lDICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFVwZGF0ZSAlIHRyYW5zZmVyZWQgYW5kICUgYmFyICovCi11cGRwY3QobG9uZyBvbGQsIGxvbmcg bmV3KQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXVwZHBjdChvbGQsIG5ldykgbG9uZyBvbGQsIG5l dzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdXBkcGN0ICovIHsKLSNpZmRlZiBDT01NRU5U Ci0gICAgaW50IG0sIG47Ci0gICAgbW92ZShDV19QQ0QsMjIpOwotICAgIHByaW50dygiJWxkIiwg bmV3KTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUENELCAobG9uZykgbmV3KTsKLSNlbmRpZiAvKiBLOTVH ICovCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ0tfUENUX0JBUgotICAgIGlmICh0aGVybW9t ZXRlcikgewotICAgICAgICBpZiAob2xkID4gbmV3KSB7Ci0gICAgICAgICAgICBvbGQgPSAwOwot ICAgICAgICAgICAgbW92ZShDV19QQ0QsIDI2KTsKLSAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0g ICAgICAgIH0KLSAgICAgICAgbSA9IG9sZC8yOwotICAgICAgICBtb3ZlKENXX1BDRCwgMjYgKyBt KTsKLSAgICAgICAgbiA9IG5ldyAvIDIgLSBtOwotI2lmbmRlZiBPUzIKLSAgICAgICAgd2hpbGUg KG4gPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKG0gKyAxKSAlIDUgPT0gMCkKLSAgICAgICAgICAg ICAgcHJpbnR3KCIqIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50dygi PSIpOwotICAgICAgICAgICAgbSsrOwotICAgICAgICAgICAgbi0tOwotICAgICAgICB9Ci0gICAg ICAgIGlmIChuZXcgJSAyICE9IDApIHByaW50dygiLSIpOwotICAgICAgICAvKiBtb3ZlKENXX1BD RCwgMjIrNTMpOyAqLwotI2Vsc2UgLyogT1MyICovCi0gICAgICAgIHdoaWxlIChuID4gMCkgewot ICAgICAgICAgICAgcHJpbnR3KCIlYyIsICdcMzMzJyk7Ci0gICAgICAgICAgICBtKys7IG4tLTsK LSAgICAgICAgfQotICAgICAgICBpZiAobmV3ICUgMiAhPSAwKQotICAgICAgICAgIHByaW50dygi JWMiLCAnXDI2MScpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLSNlbmRpZiAvKiBDS19QQ1Rf QkFSICovCi0gICAgLyogY2xydG9lb2woKTsgKi8KLSNlbHNlICAvKiAhQ09NTUVOVCAqLwotI2lm ZGVmIE9TMgotI2RlZmluZSBDSEFSMSAgICdcMzMzJyAgICAgICAgICAvKiBPUzIgLSBDUDQzNyAq LwotI2RlZmluZSBDSEFSMiAgICdcMjYxJwotI2Vsc2UKLSNkZWZpbmUgQ0hBUjEgICAnLycgICAg ICAgICAgICAgLyogRGVmYXVsdCAqLwotI2RlZmluZSBDSEFSMiAgICctJwotI2VuZGlmIC8qIE9T MiAqLwotICAgIGRlYnVnKEYxMDEsInVwZHBjdCBvbGQiLCIiLG9sZCk7Ci0gICAgZGVidWcoRjEw MSwidXBkcGN0IG5ldyIsIiIsbmV3KTsKLSAgICBtb3ZlKENXX1BDRCwyMik7Ci0gICAgcHJpbnR3 KCIlLTNsZCIsIG5ldyk7IC8qICAod2FzKSAgIHByaW50dygiJWxkIiwgbmV3KTsgICovCi0jaWZk ZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNG RVIsIChsb25nKSBDV19QQ0QsIChsb25nKSBuZXcgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5k aWYgLyogS1VJICovCi0jaWZkZWYgQ0tfUENUX0JBUgotICAgIGlmICh0aGVybW9tZXRlcikgewot ICAgICAgICBpbnQgbSwgbjsKLQotICAgICAgICBpZiAob2xkID4gbmV3KSB7Ci0gICAgICAgICAg ICBvbGQgPSAwIDsKLSAgICAgICAgICAgIG1vdmUoQ1dfUENELCAyNik7Ci0gICAgICAgICAgICBj bHJ0b2VvbCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChuZXcgPD0gMTAwTCkgewotICAgICAg ICAgICAgbSA9IG9sZCAvIDI7Ci0gICAgICAgICAgICBuID0gbmV3IC8gMiAtIG07Ci0gICAgICAg ICAgICBtb3ZlKENXX1BDRCwgMjYrbSk7Ci0gICAgICAgICAgICB3aGlsZSAobi0tID4gMCkKLSAg ICAgICAgICAgICAgcHJpbnR3KCIlYyIsIENIQVIxKTsKLSAgICAgICAgICAgIGlmIChuZXcgJSAy ICE9IDApCi0gICAgICAgICAgICAgIHByaW50dygiJWMiLCBDSEFSMik7Ci0gICAgICAgIH0KLSAg ICB9Ci0jZW5kaWYgLyogQ0tfUENUX0JBUiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLX0KLQot c3RhdGljIENLX09GRl9UIG9sZF90ciA9IChDS19PRkZfVCktMTsJLyogVGltZSByZW1haW5pbmcg cHJldmlvdXNseSAqLwotCi1zdGF0aWMgQ0tfT0ZGX1QKLSNpZmRlZiBDS19BTlNJQwotc2hvZXRs KENLX09GRl9UIG9sZF90ciwgbG9uZyBjcHMsIENLX09GRl9UIGZzaXosIENLX09GRl9UIGhvd2Zh cikKLSNlbHNlCi0gICAgc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpIGxvbmcgY3Bz OyBDS19PRkZfVCBvbGRfdHIsIGZzaXosIGhvd2ZhcjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot Lyogc2hvZXRsICovIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVzdGltYXRlZCB0aW1l IGxlZnQgaW4gdHJhbnNmZXIgKi8KLSAgICBDS19PRkZfVCB0cjsJCQkvKiBUaW1lIHJlbWFpbmlu Zywgc2Vjb25kcyAqLwotCi0jaWZkZWYgR0ZUSU1FUgotICAgIGlmIChmc2l6ID4gMEwgJiYgY3Bz ID4gMEwpCi0gICAgICB0ciA9IChDS19PRkZfVCkoKENLRkxPQVQpKGZzaXogLSBob3dmYXIpIC8g KENLRkxPQVQpY3BzKTsKLSAgICBlbHNlCi0gICAgICB0ciA9IChDS19PRkZfVCktMTsKLSNlbHNl Ci0gICAgdHIgPSAoZnNpeiA+IDBMICYmIGNwcyA+IDBMKSA/Ci0gICAgICAoKGZzaXogLSBob3dm YXIpIC8gY3BzKSA6Ci0gICAgICAgIChDS19PRkZfVCktMTsKLSNlbmRpZiAvKiBHRlRJTUVSICov Ci0gICAgbW92ZShDV19UUiwyMik7Ci0gICAgaWYgKHRyID4gKENLX09GRl9UKS0xKSB7Ci0gICAg ICAgIGlmICh0ciAhPSBvbGRfdHIpIHsKLSAgICAgICAgICAgIHByaW50dygiJXMiLGhobW1zcyh0 cikpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0 eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpQ1dfVFIsIChsb25nKWhobW1zcyh0cikpOwotI2Vu ZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7 Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBwcmludHcoIih1bmtub3duKSIpOwot I2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklM RV9UUkFOU0ZFUiwgKGxvbmcpIENXX1RSLCAobG9uZykgIih1bmtub3duKSIgKTsKLSNlbmRpZiAv KiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAgfQot ICAgIHJldHVybih0cik7Ci19Ci0KLXN0YXRpYyBsb25nCi0jaWZkZWYgQ0tfQU5TSUMKLXNob2Nw cyhpbnQgcGN0LCBDS19PRkZfVCBmc2l6LCBDS19PRkZfVCBob3dmYXIpCi0jZWxzZQotc2hvY3Bz KHBjdCwgZnNpeiwgaG93ZmFyKSBpbnQgcGN0OyBDS19PRkZfVCBmc2l6LCBob3dmYXI7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLS8qIHNob2NwcyAqLyB7Ci0jaWZkZWYgQ1BTX1dFSUdIVEVECi0g ICAgc3RhdGljIENLX09GRl9UIG9sZGZmYyA9IDBMOwotI2VuZGlmIC8qIENQU19XRUlHSFRFRCAq LwotI2lmZGVmIEdGVElNRVIKLSAgICBDS0ZMT0FUIHNlY3MsIHh4OwotI2Vsc2UKLSAgICBDS19P RkZfVCBzZWNzLCB4eDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSNpZmRlZiBHRlRJTUVSCi0g ICAgeHggPSAoZ3R2ID49IDAuMCkgPyBndHYgOiAwLjA7ICAgICAgLyogRmxvYXRpbmctcG9pbnQg dmVyc2lvbiAqLwotICAgIGd0diA9IGdmdGltZXIoKTsKLSAgICBpZiAoKGd0diAtIG9sZGd0dikg PCAoQ0tGTE9BVCkgMS4wKSAvKiBPbmx5IGRvIHRoaXMgb25jZSBwZXIgc2Vjb25kICovCi0gICAg ICByZXR1cm4ob2xkY3BzKTsKLSAgICBvbGRndHYgPSB4eDsKLSNlbHNlCi0gICAgeHggPSAoZ3R2 ID49IDApID8gZ3R2IDogMDsgICAgICAgICAgLyogV2hvbGUtbnVtYmVyIHZlcnNpb24gKi8KLSAg ICBndHYgPSBndGltZXIoKTsKLSAgICBpZiAoKGd0diAtIG9sZGd0dikgPCAxKQotICAgICAgcmV0 dXJuKG9sZGNwcyk7Ci0gICAgb2xkZ3R2ID0geHg7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0j aWZkZWYgQ1BTX1dFSUdIVEVECi0gICAgLyogZGVidWcoRjEwMCwiU0hPQ1BTOiBXRUlHSFRFRCIs IiIsMCk7ICovCi0gICAgaWYgKGd0diAhPSBvbGRndHYpIHsgICAgICAgICAgICAgICAgLyogVGhl IGZpcnN0IHBhY2tldCBpcyBpZ25vcmVkICovCi0gICAgICAgIGlmIChmZmMgPCBvbGRmZmMpCi0g ICAgICAgICAgb2xkZmZjID0gZmZjOwotICAgICAgICBvbGRjcHMgPSBjcHM7Ci0gICAgICAgIGlm IChvbGRjcHMgJiYgb2xkZ3R2ID4KLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgICAgICAxLjAKLSNl bHNlCi0gICAgICAgICAgICAxCi0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgICAgICAgICAgKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBmaXJzdCBzZWNvbmQgaXMgaWdub3JlZCAq LwotLyoKLSAgVGhpcyB2ZXJzaW9uIG9mIHNob2NwcygpIHByb2R1Y2VzIGEgd2VpZ2h0ZWQgYXZl cmFnZSB0aGF0IHNvbWUKLSAgcGVvcGxlIGxpa2UsIGJ1dCBtb3N0IHBlb3BsZSBmaW5kIGl0IGRp c2NvbmNlcnRpbmcgYW5kIGJvbWJhcmQgdXMKLSAgd2l0aCBxdWVzdGlvbnMgYW5kIGNvbXBsYWlu dHMgYWJvdXQgd2h5IHRoZSBDUFMgZmlndXJlIGZsdWN0dWF0ZXMgc28KLSAgd2lsZGx5LiAgU28g bm93IHlvdSBvbmx5IGdldCB0aGUgd2VpZ2h0ZWQgYXZlcmFnZSBpZiB5b3UgYnVpbGQgdGhlCi0g IHByb2dyYW0geW91cnNlbGYgd2l0aCBDUFNfV0VJR0hURUQgZGVmaW5lZC4KLSovCi0jaWZuZGVm IENQU19WSU5DRQotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgIGNwcyA9IChsb25nKSgoKChD S0ZMT0FUKW9sZGNwcyAqIDMuMCkgKwotICAgICAgICAgICAgICAgICAgIChDS0ZMT0FUKShmZmMg LSBvbGRmZmMpIC8gKGd0di1vbGRndHYpICkgLyA0LjApOwotI2Vsc2UKLSAgICAgICAgICAgIGNw cyA9ICggKG9sZGNwcyAqIDMpICsgKGZmYyAtIG9sZGZmYykgLyAoZ3R2LW9sZGd0dikgKSAvIDQ7 Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotI2Vsc2UKLS8qIEFuZCBhbiBhbHRlcm5hdGUgd2VpZ2h0 aW5nIHNjaGVtZSBmcm9tIFZpbmNlbnQgRmF0aWNhLi4uICovCi0gICAgICAgICAgICBjcHMgPSAo MyAqCi0gICAgICAgICAgICAgKCgxK3BjdC8zMDApKm9sZGZmYy9vbGRndHYrKDEtcGN0LzEwMCkq KGZmYy1vbGRmZmMpLyhndHYtb2xkZ3R2KSkpCi0gICAgICAgICAgICAgIC8gNDsKLSNlbmRpZiAv KiBDUFNfVklOQ0UgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIE5vIHdlaWdo dGVkIGF2ZXJhZ2Ugc2luY2UgdGhlcmUgaXMgbm90aGluZyB0byB3ZWlnaCAqLwotI2lmZGVmIEdG VElNRVIKLSAgICAgICAgICAgIGNwcyA9IChsb25nKShndHYgIT0gMC4wID8KLSAgICAgICAgICAg ICAgKENLRkxPQVQpKGZmYyAtIG9sZGZmYykgLyAoZ3R2IC0gb2xkZ3R2KSA6Ci0gICAgICAgICAg ICAgICAgKGZmYyAtIG9sZGZmYykpIDsKLSNlbHNlCi0gICAgICAgICAgICBjcHMgPSBndHYgPyAo ZmZjIC0gb2xkZmZjKSAvIChndHYgLSBvbGRndHYpIDogKGZmYyAtIG9sZGZmYykgOwotI2VuZGlm IC8qIEdGVElNRVIgKi8KLSAgICAgICAgfQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBERUJVRwot ICAgICAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IHBj dCAgICIsIiIscGN0KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZ3R2ICAgIiwi IixndHYpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBvbGRndHYiLCIiLG9sZGd0 dik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGRndHYgICIsIiIsKGxvbmcpKGd0 di1vbGRndHYpKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZmZjICAgIiwiIixm ZmMpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBvbGRmZmMiLCIiLG9sZGZmYyk7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGRmZmMgICIsIiIsZmZjLW9sZGZmYyk7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGNwcyAgICIsIiIsY3BzKTsKLSAgICAg ICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBt b3ZlKENXX0NQLDIyKTsKLSAgICAgICAgcHJpbnR3KCIlbGQiLCBjcHMpOwotI2lmZGVmIEtVSQot I2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwg KGxvbmcpIENXX0NQLCAobG9uZykgY3BzICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8q IEtVSSAqLwotICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICBvbGRmZmMgPSBmZmM7Ci0gICAg fQotI2Vsc2UgLyogIUNQU19XRUlHSFRFRCAqLwotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBERUJV RwotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAwLCJTSE9DUFM6IE5PVCBXRUlHSFRFRCIs IiIsMCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogcGN0ICAgICIsIiIscGN0KTsKLSAg ICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBndHYgICAgIiwiIixndHYpOwotICAgICAgICBkZWJ1 ZyhGMTAxLCJTSE9DUFM6IG9sZGd0diAiLCIiLG9sZGd0dik7Ci0gICAgICAgIGRlYnVnKEYxMDEs IlNIT0NQUzogZGd0diAgICIsIiIsKGxvbmcpZ3R2IC0gKGxvbmcpb2xkZ3R2KTsKLSAgICAgICAg ZGVidWcoRjEwMSwiU0hPQ1BTOiBmZmMgICAgIiwiIixmZmMpOwotICAgICAgICBkZWJ1ZyhGMTAx LCJTSE9DUFM6IG9sZGZmYyAiLCIiLG9sZGZmYyk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQ UzogZGZmYyAgICIsIiIsZmZjLW9sZGZmYyk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzog Y3BzICAgICIsIiIsY3BzKTsKLSAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBmaWxjbnQgIiwi IixmaWxjbnQpOwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBm cGZzZWNzIiwiIixmcGZzZWNzKTsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgfQotICAgIGRl YnVnKEYxMDEsInNob2NwcyBndHYiLCIiLGd0dik7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRl ZiBHRlRJTUVSCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIC8qIGRlYnVnKEYxMDEsInNob2Nw cyBmcGZzZWNzIiwiIixmcGZzZWNzKTsgKi8KLSAgICBzZWNzID0gZ3R2IC0gZnBmc2VjczsKLSAg ICAvKiBkZWJ1ZyhGMTAxLCJzaG9jcHMgc2VjcyIsIiIsKGxvbmcpc2Vjcyk7ICovCi0gICAgaWYg KHNlY3MgPiAwLjApIHsKLSAgICAgICAgY3BzID0gKGxvbmcpKChDS0ZMT0FUKSBmZmMgLyBzZWNz KTsKLSAgICAgICAgLyogZGVidWcoRjEwMSwic2hvY3BzIGNwcyIsIiIsY3BzKTsgKi8KLSAgICAg ICAgbW92ZShDV19DUCwyMik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfQ1AsIChsb25nKSBjcHMg KTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIHByaW50dygi JWxkIiwgY3BzKTsKLSAgICAgICAgY2xydG9lb2woKTsKLSAgICB9Ci0jZWxzZSAgLyogTm90IEdG VElNRVIgKi8KLSAgICBpZiAoKHNlY3MgPSBndHYgLSBmc2VjcykgPiAwKSB7Ci0gICAgICAgIGNw cyA9IChzZWNzIDwgMUwpID8gZmZjIDogZmZjIC8gc2VjczsKLSAgICAgICAgbW92ZShDV19DUCwy Mik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtV SV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfQ1AsIChsb25nKSBjcHMgKTsKLSNlbmRpZiAvKiBL OTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIHByaW50dygiJWxkIiwgY3BzKTsKLSAg ICAgICAgY2xydG9lb2woKTsKLSAgICB9Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotI2VuZGlmIC8q IENQU19XRUlHSFRFRCAqLwotCi0gICAgaWYgKGNwcyA+IHBlYWtjcHMgJiYgICAgICAgICAgICAg ICAgLyogUGVhayB0cmFuc2ZlciByYXRlICovCi0gICAgICAgICgod2hhdCAmIFdfU0VORCAmJiBz cGFja2V0cyA+IHdzbG90cyArIDQpIHx8Ci0JICghKHdoYXQgJiBXX1NFTkQpICYmIHNwYWNrZXRz ID4gMTApKSkgewotICAgICAgICBwZWFrY3BzID0gY3BzOwotICAgIH0KLSAgICBvbGRfdHIgPSBz aG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7Ci0gICAgcmV0dXJuKGNwcyk7Ci19Ci0K LXN0YXRpYwotI2lmZGVmIENLX0FOU0lDICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJlY2F1 c2UgVk9JRCB1c2VkIGJ5IGN1cnNlcy5oICovCi12b2lkCi0jZWxzZQotI2lmZGVmIE1ZQ1VSU0VT Ci1WT0lECi0jZWxzZQotaW50Ci0jZW5kaWYgLyogTVlDVVJTRVMgKi8KLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotc2NyZnQoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3Bs YXkgZmlsZSB0eXBlICovCi0gICAgY2hhciB4ZmVyc3RyWzI1Nl07Ci0gICAgeGZlcnN0clswXSA9 IE5VTDsKLSAgICBkZWJ1ZyhGMTAxLCJzY3JmdCBiaW5hcnkiLCIiLGJpbmFyeSk7Ci0gICAgaWYg KGJpbmFyeSkgewotICAgICAgICBzd2l0Y2goYmluYXJ5KSB7Ci0gICAgICAgICAgY2FzZSBYWUZU X0w6Ci0gICAgICAgICAgICBja3N0cm5jcHkoeGZlcnN0ciwiTEFCRUxFRCIsMjU2KTsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgWFlGVF9JOgotICAgICAgICAgICAgY2tzdHJu Y3B5KHhmZXJzdHIsIklNQUdFIiwyNTYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSBYWUZUX1U6Ci0gICAgICAgICAgICBja3N0cm5jcHkoeGZlcnN0ciwiQklOQVJZIFVOREVG SU5FRCIsMjU2KTsKLSAgICAgICAgICAgIGJyZWFrOwotCSAgY2FzZSBYWUZUX006Ci0gICAgICAg ICAgICBja3N0cm5jcHkoeGZlcnN0ciwiTUFDQklOQVJZIiwyNTYpOwotICAgICAgICAgICAgYnJl YWs7Ci0JICBjYXNlIFhZRlRfWDoKLSAgICAgICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJURU5F WCIsMjU2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg ICAgY2FzZSBYWUZUX0I6Ci0gICAgICAgICAgICBja3N0cm5jcHkoeGZlcnN0ciwiQklOQVJZIiwy NTYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNpZmRlZiBDS19SRVNFTkQKLSAg ICAgICAgaWYgKHdoYXQgJiBXX1NFTkQgJiYgc2VuZHN0YXJ0ID4gMEwpIHsKLSAgICAgICAgICAg IGlmIChzZW5kbW9kZSA9PSBTTV9QU0VORCkgewotICAgICAgICAgICAgICAgIGNrc3RybmNhdCh4 ZmVyc3RyLCAiIC8gcGFydGlhbCIsIDI1Nik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbmRt b2RlID09IFNNX1JFU0VORCkgewotICAgICAgICAgICAgICAgIGNrc3RybmNhdCh4ZmVyc3RyLCAi IC8gcmVzZW5kIiwgMjU2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh3aGF0 ICYgV19SRUNWICYmIHJzX2xlbiA+IDBMKSB7Ci0gICAgICAgICAgICBja3N0cm5jYXQoeGZlcnN0 ciwgIiAvIHJlc2VuZCIsIDI1Nik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8K LSAgICB9IGVsc2UgewotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgICAgY2tzdHJuY3B5KHhmZXJz dHIsIlRFWFQiLDI1Nik7Ci0jaWZkZWYgTkVXRlRQCi0jaWZuZGVmIE5PVU5JQ09ERQotCWlmICh3 aGF0ICYgV19GVFApIHsKLQkgICAgaWYgKGZ0cF9jc3ggPCAwKQotCSAgICAgIGNrc3RybmNhdCh4 ZmVyc3RyLCIgKG5vIHRyYW5zbGF0aW9uKSIsIDI1Nik7Ci0JICAgIGVsc2UKLQkgICAgICBja21h a3htc2coJnhmZXJzdHJbNF0sMjUyLAotCQkgICAgICAgIiAoIiwKLQkJICAgICAgIGZjc2luZm9b KHdoYXQgJiBXX1NFTkQpID8gZnRwX2NzbCA6IGZ0cF9jc3hdLmtleXdvcmQsCi0JCSAgICAgICAi ID0+ICIsCi0JCSAgICAgICBmY3NpbmZvWyh3aGF0ICYgV19TRU5EKSA/IGZ0cF9jc3ggOiBmdHBf Y3NsXS5rZXl3b3JkLAotCQkgICAgICAgIikiLAotCQkgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTAotCQkgICAgICAgKTsKLQl9IGVsc2UKLSNlbmRpZiAvKiBOT1VOSUNP REUgKi8KLSNlbmRpZiAvKiBORVdGVFAgKi8KLQkgIGlmICh0Y2hhcnNldCA9PSBUQ19UUkFOU1Ap IHsKLSAgICAgICAgICAgIGNrc3RybmNhdCh4ZmVyc3RyLCAiIChubyB0cmFuc2xhdGlvbikiLCAy NTYpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpIHsK LSAgICAgICAgICAgICAgICBzcHJpbnRmKCAmeGZlcnN0cltzdHJsZW4oeGZlcnN0cildLCAvKiBz YWZlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAiICglcyA9PiAlcykiLAotICAgICAgICAg ICAgICAgICAgICAgICAgZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZCwgLyogYnVpbHQtaW4ga2V5 d29yZHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRjc2luZm9bdGNoYXJzZXRdLmtleXdv cmQgIC8qIGxlbmd0aHMgYXJlIGNvbnRyb2xsZWQgKi8KLQkJCSk7Ci0gICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgIHNwcmludGYoICZ4ZmVyc3RyW3N0cmxlbih4ZmVyc3RyKV0s IC8qIHNhZmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICIgKCVzID0+ICVzKSIsCi0gICAg ICAgICAgICAgICAgICAgICAgICB0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkLCAvKiBidWlsdC1p biBrZXl3b3JkcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZmNzaW5mb1tmY2hhcnNldF0u a2V5d29yZCk7IC8qIGxlbmd0aHMgY29udHJvbGxlZCAqLwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIH0KLSAgICBtb3ZlKENXX1RZUCwyMik7Ci0g ICAgcHJpbnR3KCIlcyIsIHhmZXJzdHIpOwotICAgIGNscnRvZW9sKCk7Ci0jaWZkZWYgS1VJCi0j aWZuZGVmIEs5NUcKLSAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25n KSBDV19UWVAsIChsb25nKSB4ZmVyc3RyICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8q IEtVSSAqLwotICAgIHJldHVybjsKLX0KLQotI2lmZGVmIENLX05FV1RFUk0KLXN0YXRpYyBGSUxF ICpja19zdGRvdXQgPSBOVUxMOwotc3RhdGljIGludCBja19mZCA9IC0xOwotI2VuZGlmIC8qIENL X05FV1RFUk0gKi8KLQotc3RhdGljIGxvbmcgcGN0ID0gMEwsIG9sZHBjdCA9IDBMLCBvbGRydHQg PSAtMUw7Ci1zdGF0aWMgaW50IG9sZHR5cCA9IDAsIG9sZHdpbiA9IC0xLCBvbGR0cnkgPSAtMSwg b2xkbGVuID0gLTEsIG9sZHRpbSA9IC0xOwotCi0jaWZkZWYgTkVUQ09OTgotc3RhdGljIGNoYXIg Km5ldG5hbWVbXSA9IHsKLSAgICAibm9uZSIsCQkJCS8qIDAwICovCi0gICAgIlRDUC9JUCIsCQkJ CS8qIDAxIFRDUCAoU29ja2V0cykgKi8KLSAgICAiVENQL0lQIiwJCQkJLyogMDIgVENQIChTdHJl YW1zKSAqLwotICAgICJYLjI1IiwJCQkJLyogMDMgU3VuTGluayBYLjI0ICAqLwotICAgICJERUNu ZXQiLAkJCQkvKiAwNCBERUNuZXQgICovCi0gICAgIlZBWCBQU0kiLAkJCQkvKiAwNSBWQVggUFNJ ICovCi0gICAgIk5hbWVkIFBpcGVzIiwJCQkvKiAwNiBMQU4gTWFuYWdlciBOYW1lZCBQaXBlICov Ci0gICAgIlguMjUiLAkJCQkvKiAwNyBTdHJhdHVzIFZPUyBYLjI1ICovCi0gICAgIk5ldEJJT1Mi LAkJCQkvKiAwOCBJQk0gTkVUQklPUyAqLwotICAgICJTdXBlckxBVCIsCQkJCS8qIDA3IE1lcmlk aWFuIFN1cGVyTEFUICovCi0gICAgIkZpbGUiLAkJCQkvKiAxMCBGaWxlICovCi0gICAgIkNvbW1h bmQiLAkJCQkvKiAxMSBTdWJwcm9jZXNzIChwaXBlKSAqLwotICAgICJETEwiLAkJCQkvKiAxMiBE TEwgZG9lcyBpL28gKi8KLSAgICAiWC4yNSIsCQkJCS8qIDEzIElCTSBBSVhMaW5rIFguMjUgKi8K LSAgICAiWC4yNSIsCQkJCS8qIDE0IEhQLVVYIFguMjUgKi8KLSAgICAiUFRZIiwJCQkJLyogMTUg UHNldWRvdGVybWluYWwgKi8KLSAgICAiU1NIIiwJCQkJLyogMTYgU1NIICovCi0gICAgIjxFUlJP Uj4iLAkJCQkvKiAxNyBJbiBjYXNlIG5ldyB0eXBlcyBhcmUgYWRkZWQgKi8KLSAgICAiPEVSUk9S PiIsCQkJCS8qIDE4IGJ1dCBub2JvZHkgcmVtZW1iZXJzIHRvIHVwZGF0ZSAqLwotICAgICI8RVJS T1I+IiwJCQkJLyogMTkgdGhpcyB0YWJsZSAuLi4gKi8KLSAgICBOVUxMCQkJCS8qIDIwICovCi19 Owotc3RhdGljIGludCBubmV0bmFtZSA9IChzaXplb2YobmV0bmFtZSkgLyBzaXplb2YoY2hhciAq KSk7Ci0KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNpZmRlZiBDS19BTlNJQwotdm9pZAotc2Ny ZWVuYyhpbnQgZiwgY2hhciBjLENLX09GRl9UIG4sY2hhciAqcykKLSNlbHNlCi1DS1ZPSUQKLXNj cmVlbmMoZixjLG4scykKLWludCBmOyAgICAgICAgICAvKiBhcmd1bWVudCBkZXNjcmlwdG9yICov Ci1jaGFyIGM7ICAgICAgICAgLyogYSBjaGFyYWN0ZXIgb3Igc21hbGwgaW50ZWdlciAqLwotQ0tf T0ZGX1QgbjsgICAgIC8qIGEgbG9uZyBpbnRlZ2VyICovCi1jaGFyICpzOyAgICAgICAgLyogYSBz dHJpbmcgKi8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogc2NyZWVuYygpICovIHsKLSNpZmRl ZiBDS19TU0wKLSAgICBleHRlcm4gaW50IHRsc19hY3RpdmVfZmxhZywgc3NsX2FjdGl2ZV9mbGFn OwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIFJMT0dDT0RFCi0gICAgZXh0ZXJuIGludCB0 dG5wcm90bzsKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotICAgIHN0YXRpYyBpbnQgcSA9IDA7Ci0g ICAgc3RhdGljIGxvbmcgZmNudCA9IDBMOwkJLyogTnVtYmVyIG9mIGZpbGVzIHRyYW5zZmVycmVk ICovCi0gICAgc3RhdGljIENLX09GRl9UIGZzaXogPSAoQ0tfT0ZGX1QpLTE7IC8qIENvcHkgb2Yg ZmlsZSBzaXplICovCi0gICAgc3RhdGljIENLX09GRl9UIGZieXQgPSAwTDsgLyogVG90YWwgZmls ZSBieXRlcyBvZiBhbGwgZmlsZXMgdHJhbnNmZXJyZWQgKi8KLSAgICBzdGF0aWMgQ0tfT0ZGX1Qg aG93ZmFyID0gMEw7IC8qIEhvdyBtdWNoIG9mIGN1cnJlbnQgZmlsZSBoYXMgYmVlbiB4ZmVyJ2Qg Ki8KLSAgICBzdGF0aWMgaW50ICBwY3RsYmwgPSAwTDsgIC8qIFBlcmNlbnQgZG9uZSB2cyBCeXRl cyBzbyBmYXIgKi8KLSAgICBsb25nIGNwcyA9IDBMOwotCi0gICAgaW50IG5ldCA9IDA7Ci0gICAg aW50IHhuZXQgPSAwOwotICAgIGludCBmdHAgPSAwOwotICAgIGludCBsZW47ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJpbmcgKi8KLSAgICBpbnQgZXJyb3JzID0g MDsgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBjb3VudGVyICovCi0gICAgaW50IHg7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VyICovCi0KLSAgICBkZWJ1ZyhGMTAx LCJzY3JlZW5jIGNpbml0IiwiIixjaW5pdCk7Ci0gICAgZGVidWcoRjEwMSwic2NyZWVuYyBjZW5k dyIsIiIsY2VuZHcpOwotCi0gICAgaWYgKCFzKSBzID0gIiI7ICAgICAgICAgICAgICAgICAgICAg LyogQWx3YXlzIGRvIHRoaXMuICovCi0KLSAgICBmdHAgPSAod2hhdCAmIFdfRlRQKSA/IDEgOiAw OwkvKiBGVFAgb3IgS2VybWl0ICovCi0gICAgbmV0ID0gbmV0d29yayB8fCBmdHA7Ci0gICAgeG5l dCA9IGZ0cCA/IDEgOiBuZXR0eXBlOwkJLyogTkVUX1RDUEIgPT0gMSAqLwotCi0gICAgaWYgKGNp bml0ID09IDAgfHwgY2VuZHcgPiAwKSB7ICAgICAgLyogSGFuZGxlIGJvcmRlcmxpbmUgY2FzZXMu Li4gKi8KLSAgICAgICAgaWYgKGYgPT0gU0NSX0NXKSB7ICAgICAgICAgICAgICAvKiBDbG9zZSB3 aW5kb3csIGJ1dCBpdCdzIG5vdCBvcGVuICovCi0gICAgICAgICAgICBmdF93aW4gPSAwOwotICAg ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMTEsInNjcmVlbmMg QSIscyxmKTsKLSAgICAgICAgaWYgKGYgPT0gU0NSX0VNIHx8Ci0gICAgICAgICAgIChmID09IFND Ul9QVCAmJiBjID09ICdFJykpIHsgLyogRmF0YWwgZXJyb3IgYmVmb3JlIHdpbmRvdyBvcGVuICov Ci0gICAgICAgICAgICBjb25vbGwoIiIpOyBjb25vYygnPycpOyBjb25vbGwocyk7IHJldHVybjsg LyogUmVndWxhciBkaXNwbGF5ICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGNpbml0ID09 IDApIHsgICAgICAgICAgICAgICAgICAgLyogT25seSBjYWxsIGluaXRzY3IoKSBvbmNlICovCi0J Y2hhciAqIHM7Ci0JLyogQ2hlY2sgdGhlc2Ugbm93IC0tIGlmIHRoZXkgYXJlIGRlZmluZWQgYnV0 IG5vdCBudW1lcmljICovCi0JLyogdGhleSBjYW4gY3Jhc2ggY3Vyc2VzICovCi0JcyA9IGdldGVu digiTElORVMiKTsKLQlpZiAocykgaWYgKCFyZGlnaXRzKHMpKSB7Ci0JICAgIHByaW50ZigiP0xJ TkVTIHZhcmlhYmxlIG5vdCBudW1lcmljOiBcIiVzXCIuXG4iLHMpOwotCSAgICBwcmludGYoIihG dWxsc2NyZWVuIGRpc3BsYXkgZGlzYWJsZWQpXG4iKTsKLQkgICAgZmRpc3BsYSA9IFhZRkRfUzsK LQkgICAgcmV0dXJuOwotCX0KLQlzID0gZ2V0ZW52KCJDT0xVTU5TIik7Ci0JaWYgKHMpIGlmICgh cmRpZ2l0cyhzKSkgewotCSAgICBwcmludGYoIj9DT0xVTU5TIHZhcmlhYmxlIG5vdCBudW1lcmlj OiBcIiVzXCIuXG4iLHMpOwotCSAgICBwcmludGYoIihGdWxsc2NyZWVuIGRpc3BsYXkgZGlzYWJs ZWQpXG4iKTsKLQkgICAgZmRpc3BsYSA9IFhZRkRfUzsKLQkgICAgcmV0dXJuOwotCX0KLSAgICAg ICAgY2VuZHcgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBOZXcgd2luZG93IG5lZWRzIHJl cGFpbnRpbmcgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIGlmICghaW5pdHNjcigpKSB7ICAg ICAgICAgICAgICAgLyogT29wcywgY2FuJ3QgaW5pdGlhbGl6ZSB3aW5kb3c/ICovCi0vKgotICBJ biBmYWN0LCB0aGlzIGRvZXNuJ3QgaGFwcGVuLiAgIm1hbiBjdXJzZXMiIHNheXMgaW5pdHNjcigp IGhhbHRzIHRoZQotICBlbnRpcmUgcHJvZ3JhbSBpZiBpdCBmYWlscywgd2hpY2ggaXMgdHJ1ZSBv biB0aGUgc3lzdGVtcyB3aGVyZSBJJ3ZlCi0gIHRlc3RlZCBpdC4gIEl0IHdpbGwgZmFpbCBpZiB5 b3VyIHRlcm1pbmFsIHR5cGUgaXMgbm90IGtub3duIHRvIGl0LgotICBUaGF0J3Mgd2h5IFNFVCBG SUxFIERJU1BMQVkgRlVMTFNDUkVFTiBjYWxscyB0Z2V0ZW50KCkgdG8gbWFrZSBzdXJlIHRoZQot ICB0ZXJtaW5hbCB0eXBlIGlzIGtub3duIGJlZm9yZSBhbGxvd2luZyBhIGN1cnNlcyBkaXNwbGF5 LgotKi8KLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJDVVJTRVMgSU5JVFNDUiBFUlJPUlxy XG4iKTsKLSAgICAgICAgICAgIGZkaXNwbGEgPSBYWUZEX1M7ICAgICAgICAgICAvKiBGYWxsIGJh Y2sgdG8gQ1JUIGRpc3BsYXkgKi8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgIGNpbml0Kys7ICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgaW5p dGlhbGl6ZWQgb2sgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDAsIkNVUlNFUyBJTklUU0NSIE9L IiwiIiwwKTsKLSAgICAgICAgfQotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNhdmUgc29tZSBtZW1vcnkuICovCi0jaWZkZWYgQ0tfTkVXVEVSTQotICAgICAgICAv KiAoRnJvbSBBbmR5IEZ5ZmUgPGFuZHlAdmxzaS5jcy5jYWx0ZWNoLmVkdT4pCi0gICAgICAgICAg IFN5c3RlbSBWIGN1cnNlcyBzZWVtcyB0byByZXNlcnZlIHRoZSByaWdodCB0byBhbHRlciB0aGUg YnVmZmVyaW5nCi0gICAgICAgICAgIG9uIHRoZSBvdXRwdXQgRklMRSogd2l0aG91dCByZXN0b3Jp bmcgaXQuICBGb3J0dW5hdGVseSBTeXN0ZW0gVgotICAgICAgICAgICBjdXJzZXMgcHJvdmlkZXMg bmV3dGVybSgpLCBhbiBhbHRlcm5hdGl2ZSB0byBpbml0c2NyKCksIHRoYXQKLSAgICAgICAgICAg YWxsb3dzIHVzIHRvIHNwZWNpZnkgZXhwbGljaXRseSB0aGUgdGVybWluYWwgdHlwZSBhbmQgaW5w dXQgYW5kCi0gICAgICAgICAgIG91dHB1dCBGSUxFIHBvaW50ZXJzLiAgVGh1cyB3ZSBkdXBsaWNh dGUgc3Rkb3V0LCBhbmQgbGV0IGN1cnNlcwotICAgICAgICAgICBoYXZlIHRoZSBjb3B5LiAgVGhl IG9yaWdpbmFsIHJlbWFpbnMgdW5hbHRlcmVkLiAgVW5mb3J0dW5hdGVseSwKLSAgICAgICAgICAg bmV3dGVybSgpIHNlZW1zIHRvIGJlIHBhcnRpY3VsYXIgdG8gU3lzdGVtIFYuCi0gICAgICAgICov Ci0gICAgICAgIHMgPSBnZXRlbnYoIlRFUk0iKTsKLSAgICAgICAgaWYgKGNrX2ZkIDwgMCkgewot ICAgICAgICAgICAgY2tfZmQgPSBkdXAoZmlsZW5vKHN0ZG91dCkpOwotICAgICAgICAgICAgY2tf c3Rkb3V0ID0gKGNrX2ZkID49IDApID8gKEZJTEUgKilmZG9wZW4oY2tfZmQsICJ3IikgOiBOVUxM OwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgbmV3dGVybS4uLiIsIiIs MCk7Ci0KLS8qIE5PVEU6IEl0IG1pZ2h0IGJlIG5lY2Vzc2FyeSB0byBkbyB0aGlzIHdpdGggc3Rk aW4gdG9vISAqLwotLyogVGhpcyB3b3VsZCBoYXZlIGJlZW4gdGhlIGNhc2UgaW4gRnJlZUJTRCA0 LjEgYnV0IHRoZXkgZml4ZWQgdGhlICovCi0vKiBwcm9ibGVtIGJ5IHJlc3RvcmluZyB0aGUgYnVm ZmVyaW5nIG9mIHN0ZGluIGJlZm9yZSB0aGUgZmluYWwgcmVsZWFzZS4gKi8KLS8qIChCdXQgVC5F LiBEaWNrZXkgc2F5cyBzdGRpbiBpcyBub3QgYnVmZmVyZWQ/KSAqLwotCi0gICAgICAgIGlmIChj a19zdGRvdXQgPT0gTlVMTCB8fCBuZXd0ZXJtKHMsIGNrX3N0ZG91dCwgc3RkaW4pID09IDApIHsK LSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAiRnVsbHNjcmVlbiBk aXNwbGF5IG5vdCBzdXBwb3J0ZWQgZm9yIHRlcm1pbmFsIHR5cGU6ICVzXHJcbiIscyk7Ci0gICAg ICAgICAgICBmZGlzcGxhID0gWFlGRF9TOyAgICAgICAgICAgLyogVXNlIENSVCBpbnN0ZWFkICov Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjEwMCwic2Ny ZWVuYyBuZXd0ZXJtIG9rIiwiIiwwKTsKLSNlbHNlCi0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVl biBjYWxsaW5nIGluaXRzY3IiLCIiLDApOwotICAgICAgICBpbml0c2NyKCk7ICAgICAgICAgICAg ICAgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzLiAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJz Y3JlZW4gaW5pdHNjciBvayIsIiIsMCk7Ci0jZW5kaWYgLyogQ0tfTkVXVEVSTSAqLwotICAgICAg ICBjaW5pdCsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIGN1cnNlcyB3YXMg aW5pdGlhbGl6ZWQuICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0KLSAgICBmdF93aW4g PSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgaXMgb3BlbiAqLwotICAgIGlm IChyZXBhaW50KSB7Ci0jaWZkZWYgQ0tfV1JFRlJFU0gKLS8qCi0gIFRoaXMgdG90YWxseSByZXBh aW50cyB0aGUgc2NyZWVuLCBqdXN0IHdoYXQgd2Ugd2FudCwgYnV0IHdlIGNhbiBvbmx5Ci0gIGRv IHRoaXMgd2l0aCByZWFsIGN1cnNlcywgYW5kIHRoZW4gb25seSBpZiBjbGVhcm9rKCkgYW5kIHdy ZWZyZXNoKCkgYXJlCi0gIHByb3ZpZGVkIGluIHRoZSBjdXJzZXMgbGlicmFyeS4KLSovCi0jaWZk ZWYgT1MyCi0gICAgICAgIFJlc3RvcmVDbWRNb2RlKCk7Ci0jZWxzZQotI2lmZGVmIFFOWAotI2lm bmRlZiBRTlgxNgotICAgICAgICBjbGVhcm9rKHN0ZHNjciwgMSk7ICAgICAgICAgICAgIC8qIFFO WCBkb2Vzbid0IGhhdmUgY3Vyc2NyICovCi0jZW5kaWYgLyogUU5YMTYgKi8KLSAgICAgICAgd3Jl ZnJlc2goc3Rkc2NyKTsKLSNlbHNlCi0gICAgICAgIHdyZWZyZXNoKGN1cnNjcik7Ci0jZW5kaWYg LyogUU5YICovCi0jZW5kaWYgLyogT1MyICovCi0jZWxzZSAgLyogTm8gQ0tfV1JFRlJFU0ggKi8K LS8qCi0gIEtlcm1pdCdzIGRvLWl0LXlvdXJzZWxmIG1ldGhvZCwgd29ya3Mgd2l0aCBhbGwgdHlw ZXMgb2YgZnVsbHNjcmVlbgotICBzdXBwb3J0LCBidXQgZG9lcyBub3QgcmVwYWludCBhbGwgdGhl IGZpZWxkcy4gIEZvciBleGFtcGxlLCB0aGUgZmlsZW5hbWUKLSAgaXMgbG9zdCwgYmVjYXVzZSBp dCBhcnJpdmVzIGF0IGEgY2VydGFpbiB0aW1lIGFuZCBuZXZlciBjb21lcyBhZ2FpbiwgYW5kCi0g IEtlcm1pdCBwcmVzZW50bHkgZG9lcyBub3Qgc2F2ZSBpdCBhbnl3aGVyZS4gIE1ha2luZyB0aGlz IG1ldGhvZCB3b3JrIGZvcgotICBhbGwgZmllbGRzIHdvdWxkIGJlIGEgcmF0aGVyIG1ham9yIHJl Y29kaW5nIHRhc2ssIGR1cGxpY2F0aW5nIHdoYXQgY3Vyc2VzCi0gIGFscmVhZHkgZG9lcywgYW5k IHdvdWxkIGFkZCBhIGxvdCBvZiBjb21wbGV4aXR5IGFuZCBzdG9yYWdlIHNwYWNlLgotKi8KLSAg ICAgICAgY2VuZHcgPSAxOwotI2VuZGlmIC8qIENLX1dSRUZSRVNIICovCi0gICAgICAgIHJlcGFp bnQgPSAwOwotICAgIH0KLSAgICBpZiAoY2VuZHcpIHsgICAgICAgICAgICAgICAgICAgICAgICAv KiBlbmR3aW4oKSB3YXMgY2FsbGVkIHByZXZpb3VzbHkgKi8KLSNpZmRlZiBWTVMKLSAgICAgICAg aW5pdHNjcigpOyAgICAgICAgICAgICAgICAgICAgICAvKiAob3Igc2hvdWxkIGhhdmUgYmVlbiEp ICovCi0gICAgICAgIGNsZWFyKCk7Ci0gICAgICAgIHRvdWNod2luKHN0ZHNjcik7Ci0gICAgICAg IHJlZnJlc2goKTsKLSNlbHNlCi0jaWZkZWYgUU5YCi0vKgotICBJbiBRTlgsIGlmIHdlIGRvbid0 IGNhbGwgaW5pdHNjcigpIGhlcmUgd2UgY29yZSBkdW1wLgotICBJIGRvbid0IGhhdmUgYW55IFFO WCBjdXJzZXMgZG9jdW1lbnRhdGlvbiwgYnV0IG90aGVyIGN1cnNlcyBtYW51YWxzCi0gIHNheSB0 aGF0IGluaXRzY3IoKSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgb25jZSBwZXIgYXBwbGljYXRpb24s IGFuZAotICBleHBlcmllbmNlIHNob3dzIHRoYXQgb24gb3RoZXIgc3lzdGVtcywgY2FsbGluZyBp bml0c2NyKCkgaGVyZSBnZW5lcmFsbHkKLSAgcmVzdWx0cyBpbiBhIGNvcmUgZHVtcC4KLSovCi0g ICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgcmUtY2FsbGluZyBpbml0c2NyIFFOWCIsIiIsMCk7 Ci0gICAgICAgIGluaXRzY3IoKTsKLSAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgcmVmcmVzaCgp OwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIEJ1dCBldmVuIHNvLCBzZWNvbmQgYW5kIHN1YnNlcXVl bnQgY3Vyc2VzIGRpc3BsYXlzIGFyZSBtZXNzZWQgdXAuCi0gIENhbGxpbmcgdG91Y2h3aW4sIHJl ZnJlc2gsIGV0YywgZG9lc24ndCBtYWtlIGFueSBkaWZmZXJlbmNlLgotKi8KLSAgICAgICAgZGVi dWcoRjEwMCwic2NyZWVuYyBjYWxsaW5nIHRvdWNod2luIFFOWCIsIiIsMCk7Ci0gICAgICAgIHRv dWNod2luKHN0ZHNjcik7Ci0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgY2FsbGluZyByZWZy ZXNoIFFOWCIsIiIsMCk7Ci0gICAgICAgIHJlZnJlc2goKTsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0KLSNlbHNlIC8qIEFsbCBvdGhlcnMuLi4gKi8KLSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVu YyBjYWxsaW5nIGNsZWFyIiwiIiwwKTsKLSAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgZGVidWco RjEwMCwic2NyZWVuYyBjbGVhciBvayIsIiIsMCk7Ci0jZW5kaWYgLyogUU5YICovCi0jZW5kaWYg LyogVk1TICovCi0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgc2V0dXAgb2siLCIiLDApOwot ICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGRvaW5nIGZpcnN0IG1vdmUiLCIiLDApOwotICAg ICAgICBtb3ZlKENXX0JBTiwwKTsgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgdGhlIGJhbm5l ciAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJzY3JlZW5jIG15aG9zdCIsbXlob3N0LDApOwotI2lm ZGVmIFRDUFNPQ0tFVAotICAgICAgICBkZWJ1ZyhGMTEwLCJzY3JlZW5jIG15aXBhZGRyIixteWlw YWRkciwwKTsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNpZmRlZiBIUFVYMTAxMAotICAgICAg ICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGNhbGxpbmcgZmlyc3QgcHJpbnR3Li4uIiwiIiwwKTsKLS8q IFJpZ2h0IGhlcmUgaXMgd2hlcmUgSFAtVVggMTAuMTAgbGlieGN1cnNlLjEgUmV2IDc2LjIwIGhh bmdzLi4uICovCi0jZW5kaWYgLyogSFBVWDEwMTAgKi8KLSAgICAgICAgaWYgKG15aG9zdFswXSkg ewotI2lmZGVmIFRDUFNPQ0tFVAotICAgICAgICAgICAgaWYgKCFteWlwYWRkclswXQotI2lmZGVm IE9TMgotICAgICAgICAgICAgICAgICAvKiBXZSBuZWVkIHRvIHBlcmZvcm0gdGhpcyB0ZXN0IGJl Y2F1c2Ugb24gbm9uLVRDUC9JUCAqLwotICAgICAgICAgICAgICAgICAvKiBzeXN0ZW1zIHRoZSBj YWxsIHRvIGdldGxvY2FsaXBhZGRyKCkgcmVzdWx0cyBpbiBhICAqLwotICAgICAgICAgICAgICAg ICAvKiBETlMgTG9va3VwIHdoaWNoIHRha2VzIHNldmVyYWwgbWludXRlcyB0byB0aW1lIG91dCAq LwotICAgICAgICAgICAgICAgICAmJiBuZXQgJiYKLSAgICAgICAgICAgICAgICAgKHhuZXQgPT0g TkVUX1RDUEEgfHwgeG5ldCA9PSBORVRfVENQQgotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICAgICAg ICAgICAgICAgIHx8IHhuZXQgPT0gTkVUX1NTSAotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSAg ICAgICAgICAgICAgICAgICkKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgKQot ICAgICAgICAgICAgICBnZXRsb2NhbGlwYWRkcigpOwotICAgICAgICAgICAgaWYgKG15aXBhZGRy WzBdICYmIHN0cmNtcCgoY2hhciAqKW15aG9zdCwoY2hhciAqKW15aXBhZGRyKSkKLSAgICAgICAg ICAgICAgcHJpbnR3KCIlcywgJXMgWyVzXSIsdmVyc2lvLChjaGFyICopbXlob3N0LChjaGFyICop bXlpcGFkZHIpOwotICAgICAgICAgICAgZWxzZQotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotICAg ICAgICAgICAgICBwcmludHcoIiVzLCAlcyIsdmVyc2lvLChjaGFyICopbXlob3N0KTsKLSAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50dygiJXMiLHZlcnNpbyk7Ci0gICAgICAgIH0K LSNpZmRlZiBIUFVYMTAxMAotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGZpcnN0IHByaW50 dyByZXR1cm5zIiwiIiwwKTsKLSNlbmRpZiAvKiBIUFVYMTAxMCAqLwotICAgICAgICBtb3ZlKENX X0RJUiwzKTsKLSAgICAgICAgcHJpbnR3KCJDdXJyZW50IERpcmVjdG9yeTogJXMiLHpndGRpcigp KTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJ X0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19ESVIsIChsb25nKSB6Z3RkaXIoKSApOwotI2VuZGlm IC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgaWYgKG5ldCkgewotICAgICAg ICAgICAgbW92ZShDV19MSU4sOCk7Ci0gICAgICAgICAgICBwcmludHcoIk5ldHdvcmsgSG9zdDog JXMiLAotI2lmZGVmIE5FV0ZUUAotCQkgICBmdHAgPyAoZnRwX2hvc3QgPyBmdHBfaG9zdCA6ICIo dW5rbm93bikiKSA6Ci0jZW5kaWYgLyogTkVXRlRQICovCi0JCSAgIHR0bmFtZQotCQkgICApOwot ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbW92ZShDV19MSU4sMCk7Ci0gICAgICAgICAg ICBwcmludHcoIkNvbW11bmljYXRpb24gRGV2aWNlOiAlcyIsdHRuYW1lKTsKLSAgICAgICAgfQot I2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklM RV9UUkFOU0ZFUiwgKGxvbmcpIENXX0xJTiwgKGxvbmcpIHR0bmFtZSApOwotI2VuZGlmIC8qIEs5 NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLQotICAgICAgICBpZiAobmV0KSB7Ci0gICAgICAgICAg ICBtb3ZlKENXX1NQRCw4KTsKLSAgICAgICAgICAgIHByaW50dygiTmV0d29yayBUeXBlOiAiKTsK LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1vdmUoQ1dfU1BELDEpOwotICAgICAgICAg ICAgcHJpbnR3KCJDb21tdW5pY2F0aW9uIFNwZWVkOiAiKTsKLSAgICAgICAgfQotICAgICAgICBt b3ZlKENXX1NQRCwyMik7ICAgICAgICAgICAgICAgIC8qIFNlcmlhbCBzcGVlZCBvciBuZXR3b3Jr IHR5cGUgKi8KLSAgICAgICAgaWYgKG5ldCkgewotI2lmZGVmIE5FVENPTk4KLQkgICAgaW50IHNl Y3VyZSA9IDA7Ci0JICAgIGNoYXIgKiB4bmFtZTsKLQkgICAgaWYgKHhuZXQgPiBubmV0bmFtZSkK LQkgICAgICB4bmFtZSA9ICJbRVJST1JdIjsKLQkgICAgZWxzZQotCSAgICAgIHhuYW1lID0gbmV0 bmFtZVt4bmV0XTsKLSNpZmRlZiBORVdGVFAKLSAgICAgICAgICAgIGlmIChmdHApIHsKLQkJaWYg KGZ0cGlzc2VjdXJlKCkpCi0JCSAgc2VjdXJlID0gMTsKLQkgICAgfSBlbHNlCi0jZW5kaWYgLyog TkVXRlRQICovCi0JICAgICAgaWYgKDAKLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgICAgICAgICAg ICAgfHwgSVNfU1NIKCkKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZkZWYgQ0tfRU5DUllQ VElPTgotICAgICAgICAgICAgICAgIHx8IGNrX3RuX2VuY3J5cHRpbmcoKSAmJiBja190bl9kZWNy eXB0aW5nKCkKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi0gICAg ICAgICAgICAgICAgfHwgdGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZwotI2VuZGlm IC8qIENLX1NTTCAqLwotI2lmZGVmIFJMT0dDT0RFCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRl ZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgfHwgdHRucHJvdG8gPT0gTlBfRUs0TE9H SU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICov Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotICAgICAg ICAgICAgICAgICApIHsKLQkJc2VjdXJlID0gMTsKLQkgICAgfQotCSAgICBpZiAoc2VjdXJlKSB7 Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICBjaGFyIGJ1ZlszMF07 Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihidWYsIiVzIChTRUNVUkUpIix4bmFtZSk7Ci0gICAg ICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobG9uZykgYnVmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICAgICAgcHJp bnR3KCIlcyAoU0VDVVJFKSIseG5hbWUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICBwcmludHcoIiVzIix4bmFtZSk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAg ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSB4bmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgfQot I2Vsc2UKLSAgICAgICAgICAgIHByaW50dygiKG5ldHdvcmspIik7Ci0jaWZkZWYgS1VJCi0jaWZu ZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSAiKG5ldHdvcmspIgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0jZW5kaWYgLyogTkVU Q09OTiAqLwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHNwZWVkIDwgMEwpCi0g ICAgICAgICAgICAgIHNwZWVkID0gdHRnc3BkKCk7Ci0gICAgICAgICAgICBpZiAoc3BlZWQgPiAw TCkgewotICAgICAgICAgICAgICAgIGlmIChzcGVlZCA9PSA4ODgwKSB7Ci0gICAgICAgICAgICAg ICAgICAgIHByaW50dygiNzUvMTIwMCIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAg ICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIjc1LzEyMDAiCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAq LwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgc3Bl ZWRidWZbNjRdIDsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzcGVlZGJ1ZiwgIiVsZCIs IHNwZWVkKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIsc3BlZWRidWYpOwotI2lm ZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5 KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgQ1dfU1BELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg c3BlZWRidWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAv KiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludHcoInVua25vd24iKTsKLSNpZmRlZiBL VUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxF X1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIodW5rbm93bikiCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYg LyogS1VJICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbW92ZShDV19QQVIs MTQpOwotICAgICAgICBwcmludHcoIlBhcml0eTogJXMiLGZ0cCA/ICJub25lIiA6IHBhcm5hbSgo Y2hhcilwYXJpdHkpKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IENXX1BBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHBhcm5hbSgoY2hhcilwYXJp dHkpCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlm IC8qIEtVSSAqLwotI2lmZGVmIENLX1RJTUVSUwotICAgICAgICBpZiAoLyogcnR0ZmxnICYmICov IHByb3RvY29sID09IFBST1RPX0spIHsKLSAgICAgICAgICAgIG1vdmUoQ1dfVE1PLCA5KTsgcHJp bnR3KCJSVFQvVGltZW91dDoiKTsgfQotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotICAgICAgICBt b3ZlKENXX1RZUCwxMSk7IHByaW50dygiRmlsZSBUeXBlOiIpOwotICAgICAgICBtb3ZlKENXX1NJ WiwxMSk7IHByaW50dygiRmlsZSBTaXplOiIpOwotICAgICAgICBtb3ZlKENXX1BDRCwgOCk7Ci0g ICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgIHBjdGxibCA9ICh3aGF0ICYgV19TRU5EKTsKLSAg ICAgICAgcHJpbnR3KCIlczoiLCBwY3RsYmwgPyAiUGVyY2VudCBEb25lIiA6ICJCeXRlcyBTbyBG YXIiKTsKLQotI2lmZGVmIFhZWl9JTlRFUk5BTAotICAgICAgICBtb3ZlKENXX0JBUiwgMSk7Ci0g ICAgICAgIHByaW50dygiJTEwcyBQcm90b2NvbDoiLCBmdHAgPyAiRlRQIiA6IHB0YWJbcHJvdG9j b2xdLnBfbmFtZSk7Ci0jZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCi0jaWZkZWYgQ0tfUENUX0JB UgotICAgICAgICBpZiAodGhlcm1vbWV0ZXIpIHsKLSAgICAgICAgICAgIG9sZHBjdCA9IHBjdCA9 IDA7Ci0gICAgICAgICAgICBtb3ZlKENXX0JBUiwyMik7Ci0gICAgICAgICAgICBwcmludHcoIiAg ICAuLi4xMC4uLjIwLi4uMzAuLi40MC4uLjUwLi4uNjAuLi43MC4uLjgwLi4uOTAuLjEwMCIpOwot ICAgICAgICAgICAgbW92ZShDV19CQVIsMjIrNTYpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tf UENUX0JBUiAqLwotICAgICAgICBtb3ZlKENXX1RSLCAgMSk7IHByaW50dygiRXN0aW1hdGVkIFRp bWUgTGVmdDoiKTsKLSAgICAgICAgbW92ZShDV19DUCwgIDIpOyBwcmludHcoIlRyYW5zZmVyIFJh dGUsIENQUzoiKTsKLSAgICAgICAgbW92ZShDV19XUywgIDgpOyBwcmludHcoIldpbmRvdyBTbG90 czolcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocHJvdG9jb2wgPT0gUFJP VE9fSykgJiYgIWZ0cCkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiA6ICIg Ti9BIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICBtb3ZlKENX X1BULCAgOSk7IHByaW50dygiUGFja2V0IFR5cGU6Iik7Ci0gICAgICAgIGlmIChmdHAgfHwgcHJv dG9jb2wgIT0gUFJPVE9fSykgewotCSAgICBtb3ZlKENXX1BULDIyKTsKLSAgICAgICAgICAgIHBy aW50dygiJXMiLCAiTi9BIik7Ci0gICAgICAgICAgICBtb3ZlKENXX1BDLCAgMTEpOyBwcmludHco IkkvTyBDb3VudDoiKTsKLSAgICAgICAgICAgIG1vdmUoQ1dfUEwsICAxMCk7IHByaW50dygiSS9P IExlbmd0aDoiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1vdmUoQ1dfUEMsICA4 KTsgcHJpbnR3KCJQYWNrZXQgQ291bnQ6Iik7Ci0gICAgICAgICAgICBtb3ZlKENXX1BMLCAgNyk7 IHByaW50dygiUGFja2V0IExlbmd0aDoiKTsKLSAgICAgICAgfQotI2lmbmRlZiBDT01NRU5UCi0g ICAgICAgIG1vdmUoQ1dfUFIsICA5KTsgcHJpbnR3KCJFcnJvciBDb3VudDoiKTsKLSNlbHNlCi0g ICAgICAgIG1vdmUoQ1dfUFIsICAyKTsgcHJpbnR3KCJQYWNrZXQgUmV0cnkgQ291bnQ6Iik7Ci0j ZW5kaWYKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIG1vdmUoQ1dfUEIsICAyKTsgcHJpbnR3KCJQ YWNrZXQgQmxvY2sgQ2hlY2s6Iik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBtb3Zl KENXX0VSUiwxMCk7IHByaW50dygiTGFzdCBFcnJvcjoiKTsKLSAgICAgICAgbW92ZShDV19NU0cs IDgpOyBwcmludHcoIkxhc3QgTWVzc2FnZToiKTsKLQlpZiAoeGZybXNnKSB7Ci0JICAgIG1vdmUo Q1dfTVNHLCAyMik7IHByaW50dygiJXMiLHhmcm1zZyk7Ci0JICAgIG1ha2VzdHIoJnhmcm1zZyxO VUxMKTsKLQl9Ci0gICAgICAgIG1vdmUoQ1dfSU5ULCAwKTsKLSAgICAgICAgaWYgKCF4ZnJpbnQp IHsKLSAgICAgICAgICAgIHByaW50dygiKFRyYW5zZmVyIGludGVycnVwdGlvbiBpcyBkaXNhYmxl ZCkiKTsKLSAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBDS19ORUVEX1NJRwotICAgICAgICAgICAg cHJpbnR3KAotIjwlcz5YIHRvIGNhbmNlbCBmaWxlLCA8JXM+WiB0byBjYW5jZWwgZ3JvdXAsIDwl cz48Q1I+IHRvIHJlc2VuZCBsYXN0IHBhY2tldCIsCi0gICAgICAgICAgICAgICAgICAgZGJjaHIo ZXNjYXBlKSwgZGJjaHIoZXNjYXBlKSwgZGJjaHIoZXNjYXBlKQotICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgICAgICBtb3ZlKENXX0lOVCArIDEsIDApOwotICAgICAgICAgICAgcHJpbnR3 KAotIjwlcz5FIHRvIHNlbmQgRXJyb3IgcGFja2V0LCBeQyB0byBxdWl0IGltbWVkaWF0ZWx5LCA8 JXM+TCB0byByZWZyZXNoIHNjcmVlbi4iLAotICAgICAgICAgICAgICAgICAgIGRiY2hyKGVzY2Fw ZSksIGRiY2hyKGVzY2FwZSkKLSAgICAgICAgICAgICAgICAgICApOwotI2Vsc2UgLyogIUNLX05F RURfU0lHICovCi0gICAgICAgICAgICBtb3ZlKENXX0lOVCwgMCk7Ci0jaWZkZWYgT1MyCi0gICAg ICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykgewotICAgICAgICAgICAgICAgIHByaW50 dygKLSJYIHRvIGNhbmNlbCBmaWxlLCBaIHRvIGNhbmNlbCBncm91cCwgPEVudGVyPiB0byByZXNl bmQgbGFzdCBwYWNrZXQsIgotICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg fQotI2Vsc2UgLyogIU9TMiAqLwotI2lmZGVmIFZNUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEluIFZNUyBhdm9pZCBib3R0b20gbGluZSAqLwotICAgICAgICAgICAgcHJpbnR3KAot Ilg6IENhbmNlbCB0aGlzIGZpbGU7IEU6IENhbmNlbCB0cmFuc2ZlcjsgXkM6IFF1aXQgbm93OyBe VzogUmVmcmVzaCBzY3JlZW4uIgotICAgICAgICAgICAgICAgICAgICk7Ci0jZWxzZQotICAgICAg ICAgICAgcHJpbnR3KAotIlggdG8gY2FuY2VsIGZpbGUsIFogdG8gY2FuY2VsIGdyb3VwLCA8Q1I+ IHRvIHJlc2VuZCBsYXN0IHBhY2tldCwiCi0gICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAv KiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBWTVMKLSAgICAgICAgICAgIG1v dmUoQ1dfSU5UICsgMSwgMCk7Ci0gICAgICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykg ewotICAgICAgICAgICAgICAgIHByaW50dygKLSJFIHRvIHNlbmQgRXJyb3IgcGFja2V0LCBeQyB0 byBxdWl0IGltbWVkaWF0ZWx5LCBeTCB0byByZWZyZXNoIHNjcmVlbi4iCi0gICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50 dygiXkMgdG8gY2FuY2VsIGZpbGUgdHJhbnNmZXIuIik7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYg LyogVk1TICovCi0jZW5kaWYgLyogQ0tfTkVFRF9TSUcgKi8KLSAgICAgICAgfQotICAgICAgICBy ZWZyZXNoKCk7Ci0gICAgICAgIGNlbmR3ID0gMDsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiU0NS RUVOQyBzd2l0Y2giLCIiLGYpOwotICAgIGRlYnVnKEYwMDAsIlNDUkVFTkMgYyIsIiIsYyk7Ci0g ICAgZGVidWcoRjEwMSwiU0NSRUVOQyBuIiwiIixuKTsKLQotICAgIGxlbiA9IHN0cmxlbihzKTsg ICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBhcmd1bWVudCBzdHJpbmcgKi8KLSAgICBz d2l0Y2ggKGYpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBIYW5kbGUgb3VyIGZ1bmN0aW9u IGNvZGUgKi8KLSAgICAgIGNhc2UgU0NSX0ZOOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxl bmFtZSAqLwotICAgICAgICBvbGRwY3QgPSBwY3QgPSAwTDsgICAgICAgICAgICAgIC8qIFJlc2V0 IHBlcmNlbnRzICovCi0jaWZkZWYgR0ZUSU1FUgotICAgICAgICBndHYgPSAoQ0tGTE9BVCkgLTEu MDsKLSAgICAgICAgLyogb2xkZ3R2ID0gKENLRkxPQVQpIC0xLjA7ICovCi0jZWxzZQotICAgICAg ICBndHYgPSAtMUw7Ci0gICAgICAgIC8qIG9sZGd0diA9IC0xTDsgKi8KLSNlbmRpZiAvKiBHRlRJ TUVSICovCi0gICAgICAgIG9sZHdpbiA9IC0xOwotICAgICAgICBmc2l6ID0gKENLX09GRl9UKS0x OwkJLyogSW52YWxpZGF0ZSBwcmV2aW91cyBmaWxlIHNpemUgKi8KLSAgICAgICAgbW92ZShDV19Q Q0QsMjIpOyAgICAgICAgICAgICAgICAvKiBFcmFzZSBwZXJjZW50IGRvbmUgZnJvbSBsYXN0IHRp bWUgKi8KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSgg S1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQ0QsIChsb25nKSAwICk7Ci0gICAgICAgIEt1 aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIDAg KTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGNscnRvZW9s KCk7Ci0gICAgICAgIG1vdmUoQ1dfU0laLDIyKTsgICAgICAgICAgICAgICAgLyogRXJhc2UgZmls ZSBzaXplIGZyb20gbGFzdCB0aW1lICovCi0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAg ICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfU0laLCAobG9u ZykgMCApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xy dG9lb2woKTsKLSAgICAgICAgbW92ZShDV19FUlIsMjIpOyAgICAgICAgICAgICAgICAvKiBBbmQg bGFzdCBlcnJvciBtZXNzYWdlICovCi0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAg S3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykg IiIgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGNscnRv ZW9sKCk7Ci0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIFNUUkVBTUlORwotICAgICAgICBpZiAocHJv dG9jb2wgPT0gUFJPVE9fSyAmJiBzdHJlYW1vaykgewotICAgICAgICAgICAgbW92ZShDV19CQVIs IDEpOwotI2lmZGVmIFhZWl9JTlRFUk5BTAotICAgICAgICAgICAgcHJpbnR3KCIgICBLZXJtaXQg U1RSRUFNSU5HOiIpOwotI2Vsc2UKLSAgICAgICAgICAgIHByaW50dygiICAgICAgICAgIFNUUkVB TUlORzoiKTsKLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KLSAgICAgICAgfQotI2VuZGlmIC8q IFNUUkVBTUlORyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgICAgICBpZiAod2hhdCAm IFdfU0VORCkgewkJLyogSWYgd2UncmUgc2VuZGluZy4uLiAqLwotI2lmZGVmIE5FV0ZUUAotCSAg ICBpZiAod2hhdCAmIFdfRlRQKSB7CQkvKiBGVFAgKi8KLSAgICAgICAgICAgICAgICBtb3ZlKENX X05BTSwxMCk7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCIgICBGVFAgUFVUOiIpOwotCSAgICB9 IGVsc2UKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSNpZmRlZiBDS19SRVNFTkQKLSAgICAgICAgICAg IHN3aXRjaCAoc2VuZG1vZGUpIHsJCS8qIEtlcm1pdCAqLwotICAgICAgICAgICAgICBjYXNlIFNN X1JFU0VORDoKLSAgICAgICAgICAgICAgICBtb3ZlKENXX05BTSwxMCk7Ci0gICAgICAgICAgICAg ICAgcHJpbnR3KCIgUkVTRU5ESU5HOiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1vdmUoQ1dfTkFNLDEwKTsKLSAgICAg ICAgICAgICAgICBwcmludHcoIiAgIFNFTkRJTkc6Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgbW92ZShDV19OQU0sMTApOwotICAg ICAgICAgICAgcHJpbnR3KCIgICBTRU5ESU5HOiIpOwotI2VuZGlmIC8qIENLX1JFU0VORCAqLwot Ci0gICAgICAgIH0gZWxzZSBpZiAod2hhdCAmIFdfUkVDVikgewkvKiBJZiB3ZSdyZSByZWNlaXZp bmcuLi4gKi8KLSNpZmRlZiBORVdGVFAKLQkgICAgaWYgKHdoYXQgJiBXX0ZUUCkgewkJLyogRlRQ ICovCi0gICAgICAgICAgICAgICAgbW92ZShDV19OQU0sMTApOwotICAgICAgICAgICAgICAgIHBy aW50dygiICAgRlRQIEdFVDoiKTsKLQkgICAgfSBlbHNlIHsKLSNlbmRpZiAvKiBORVdGVFAgKi8K LQkJbW92ZShDV19OQU0sMTApOwotCQlwcmludHcoIiBSRUNFSVZJTkc6Iik7Ci0jaWZkZWYgTkVX RlRQCi0JICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh3aGF0ID09IChXX0ZUUHxXX0ZUX0RFTEUp KSB7Ci0JCW1vdmUoQ1dfTkFNLDEwKTsKLQkJcHJpbnR3KCJGVFAgREVMRVRFOiIpOwotI2VuZGlm IC8qIE5FV0ZUUCAqLwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8q IElmIHdlIGRvbid0IGtub3cuLi4gKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfTkFNLDEwKTsgICAg ICAgICAgICAvKiAoc2hvdWxkIG5ldmVyIHNlZSB0aGlzKSAqLwotICAgICAgICAgICAgcHJpbnR3 KCIgRmlsZSBOYW1lOiIpOwotICAgICAgICB9Ci0gICAgICAgIG1vdmUoQ1dfTkFNLDIyKTsgICAg ICAgICAgICAgICAgLyogRGlzcGxheSB0aGUgZmlsZW5hbWUgKi8KLSAgICAgICAgaWYgKGxlbiA+ IDU3KSB7Ci0gICAgICAgICAgICBwcmludHcoIiUuNTVzLi4iLHMpOwotICAgICAgICAgICAgbGVu ID0gNTc7Ci0gICAgICAgIH0gZWxzZSBwcmludHcoIiVzIixzKTsKLSNpZmRlZiBLVUkKLSNpZm5k ZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25n KSBDV19OQU0sIChsb25nKSBzICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAq LwotICAgICAgICBxID0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIG5h bWUgbGVuZ3RoIGZvciBsYXRlciAqLwotICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICBzY3Jm dCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgZmlsZSB0eXBlIChjYW4gY2hh bmdlKSAqLwotICAgICAgICByZWZyZXNoKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFNhdmVDbWRN b2RlKDAsIDApOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNh c2UgU0NSX0FOOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGFzLW5hbWUgKi8KLSAgICAg ICAgaWYgKHEgKyBsZW4gKyA0IDwgNTgpIHsgICAgICAgICAvKiBXaWxsIGZpdCAqLwotICAgICAg ICAgICAgbW92ZShDV19OQU0sIDIyICsgcSk7Ci0gICAgICAgICAgICBwcmludHcoIiA9PiAlcyIs cyk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5 KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgKTsKLSNlbmRpZiAv KiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogVG9vIGxvbmcgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfTkFNLCAyMik7 ICAgICAgICAgICAvKiBPdmVyd3JpdGUgcHJldmlvdXMgbmFtZSAqLwotICAgICAgICAgICAgcSA9 IDA7Ci0gICAgICAgICAgICBpZiAobGVuICsgNCA+IDU3KSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogd2cxNSAqLwotICAgICAgICAgICAgICAgIHByaW50dygiID0+ICUuNTFz Li4iLHMpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdnMTUgKi8KLSAgICAgICAgICAgICAg ICBsZW4gPSA1MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3ZzE1 ICovCi0gICAgICAgICAgICB9IGVsc2UgcHJpbnR3KCIgPT4gJXMiLHMpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogd2cxNSAqLwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19OQU0sIChs b25nKSBzICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAg fQotICAgICAgICBxICs9IGxlbiArIDQ7ICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIGhv cml6b250YWwgcG9zaXRpb24gKi8KLSAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgcmVmcmVz aCgpOwotI2lmZGVmIE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKLSNlbmRpZiAvKiBP UzIgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9GUzogICAgICAgICAgICAg ICAgICAgICAgLyogRmlsZSBzaXplICovCi0gICAgICAgIGZzaXogPSBuOwotICAgICAgICBtb3Zl KENXX1NJWiwyMik7Ci0gICAgICAgIGlmIChmc2l6ID4gKENLX09GRl9UKS0xKSB7Ci0jaWZkZWYg S1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9U UkFOU0ZFUiwgKGxvbmcpIENXX1NJWiwgKGxvbmcpIG4gKTsKLSNlbmRpZiAvKiBLOTVHICovCi0j ZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBwcmludHcoIiVzIixja2ZzdG9hKG4pKTsKLSAg ICAgICAgfQotCWlmIChmc2l6ID09IC0yTCkgewotCSAgICBwcmludHcoIlBPU1NJQkxZIEVYQ0VF RFMgTE9DQUwgRklMRSBTSVpFIExJTUlUIik7Ci0JfQotICAgICAgICBjbHJ0b2VvbCgpOwotI2lm ZGVmIENPTU1FTlQKLSAgICAgICAgbW92ZShDV19QQ0QsIDgpOwotICAgICAgICBpZiAoZnNpeiA+ IChDS19PRkZfVCktMSkgewkvKiBQdXQgdXAgcGVyY2VudCBsYWJlbCAqLwotICAgICAgICAgICAg cGN0bGJsID0gMTsKLQkgICAgY2xydG9lb2woKTsKLSAgICAgICAgICAgIHByaW50dygiUGVyY2Vu dCBEb25lOiIpOwotICAgICAgICB9Ci0jZWxzZQotCW1vdmUoQ1dfUENELCA4KTsKLQljbHJ0b2Vv bCgpOwotICAgICAgICBpZiAoZnNpeiA+IChDS19PRkZfVCktMSkgewkvKiBQdXQgdXAgcGVyY2Vu dCBsYWJlbCAqLwotICAgICAgICAgICAgcGN0bGJsID0gMTsKLSAgICAgICAgICAgIHByaW50dygi UGVyY2VudCBEb25lOiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGN0bGJsID0g MDsKLSAgICAgICAgICAgIHByaW50dygiQnl0ZXMgU28gRmFyOiIpOwotCX0KLSNlbmRpZiAvKiBD T01NRU5UICovCi0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgIHNjcmZ0KCk7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogRmlsZSB0eXBlICovCi0gICAgICAgIHJlZnJlc2goKTsKLSNpZmRl ZiBPUzIKLSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAg ICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfUFQ6ICAgICAgICAgICAgICAgICAgICAgIC8q IFBhY2tldCB0eXBlIG9yIHBzZXVkb3R5cGUgKi8KLSAgICAgICAgaWYgKHNwYWNrZXRzIDwgNSkg ewotICAgICAgICAgICAgZXh0ZXJuIGludCBzeXNpbmRleDsKLSAgICAgICAgICAgIGV4dGVybiBz dHJ1Y3Qgc3lzZGF0YSBzeXNpZGxpc3RbXTsKLSAgICAgICAgICAgIC8qIFRoaW5ncyB0aGF0IHdv bid0IGNoYW5nZSBhZnRlciB0aGUgNHRoIHBhY2tldCAqLwotICAgICAgICAgICAgbW92ZShDV19Q QVIsMjIpOwotICAgICAgICAgICAgcHJpbnR3KCIlcyIscGFybmFtKChjaGFyKXBhcml0eSkpOwot I2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJ X0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfUEFS LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHBhcm5hbSgoY2hhcilwYXJpdHkp Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRp ZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0jaWZkZWYgQ09NTUVOVAotICAg ICAgICAgICAgbW92ZShDV19QQiwgMjIpOyAgICAgICAgICAgIC8qIEJsb2NrIGNoZWNrIG9uIHRo aXMgcGFja2V0ICovCi0gICAgICAgICAgICBpZiAoYmN0dSA9PSA0KQotICAgICAgICAgICAgICBw cmludHcoIkIiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJpbnR3KCIlZCIs YmN0dSk7Ci0gICAgICAgICAgICBjbHJ0b2VvbCgpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICAgICAgICAgIGlmICgKLSNpZmRlZiBORVdGVFAKLQkJKGZ0cCAmJiAoc3BhY2tldHMgPT0gMSB8 fCBycGFja2V0cyA9PSAxKSkgfHwKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQkJc3BhY2tldHMgPT0g NAotCQkpIHsKLSAgICAgICAgICAgICAgICBtb3ZlKENXX0xJTiw4KTsKLSAgICAgICAgICAgICAg ICBpZiAoCi0jaWZkZWYgTkVXRlRQCi0JCSAgICBmdHAgfHwKLSNlbmRpZiAvKiBORVdGVFAgKi8K LQkJICAgICgocHJvdG9jb2wgPT0gUFJPVE9fSykgJiYgKHN5c2luZGV4ID4gLTEpKQotCQkgICAg KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXQpIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgIG1vdmUoQ1dfTElOLDgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnR3KCJOZXR3 b3JrIEhvc3Q6ICVzICglcykiLAotI2lmZGVmIE5FV0ZUUAotCQkJICAgICAgIGZ0cCA/IChmdHBf aG9zdCA/IGZ0cF9ob3N0IDogIiIpIDoKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQkJCSAgICAgICB0 dG5hbWUsCi0jaWZkZWYgTkVXRlRQCi0JCQkgICAgICAgZnRwID8gZnRwX3NydnR5cCA6Ci0jZW5k aWYgLyogTkVXRlRQICovCi0JCQkgICAgICAgc3lzaWRsaXN0W3N5c2luZGV4XS5zaWRfbmFtZQot CQkJICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBtb3ZlKENXX0xJTiwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 dygiQ29tbXVuaWNhdGlvbiBEZXZpY2U6ICVzIChyZW1vdGUgaG9zdCBpcyAlcykiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0dG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN5c2lkbGlzdFtzeXNpbmRleF0uc2lkX25hbWUKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjbHJ0 b2VvbCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lm ZGVmIENLX1RJTUVSUwotICAgICAgICBpZiAoLyogcnR0ZmxnICYmICovIHByb3RvY29sID09IFBS T1RPX0spIHsKLSAgICAgICAgICAgIGxvbmcgeHg7Ci0gICAgICAgICAgICBpZiAoCi0jaWZkZWYg U1RSRUFNSU5HCi0gICAgICAgICAgICAgICAgc3RyZWFtaW5nICYmIG9sZHdpbiAhPSAtMgotI2Vs c2UKLSAgICAgICAgICAgICAgICAwCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0gICAgICAgICAg ICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgbW92ZShDV19UTU8sIDIyKTsKLSAgICAgICAgICAg ICAgICBwcmludHcoIjAwIC8gMDAiKTsKLSAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOwotICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB4eCA9IChydHRkZWxheSArIDUwMCkg LyAxMDAwOwotICAgICAgICAgICAgICAgIGlmICh4eCAhPSBvbGRydHQgfHwgcmN2dGltbyAhPSBv bGR0aW0pIHsKLSAgICAgICAgICAgICAgICAgICAgbW92ZShDV19UTU8sIDIyKTsKLSAgICAgICAg ICAgICAgICAgICAgcHJpbnR3KCIlMDJsZCAvICUwMmQiLCB4eCwgcmN2dGltbyk7Ci0gICAgICAg ICAgICAgICAgICAgIG9sZHJ0dCA9IHh4OwotICAgICAgICAgICAgICAgICAgICBvbGR0aW0gPSBy Y3Z0aW1vOwotICAgICAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotCi0g ICAgICAgIHggPSAod2hhdCAmIFdfUkVDVikgPyAgICAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICov Ci0gICAgICAgICAgcnBrdGwrKHByb3RvY29sPT1QUk9UT19LPzE6MCkgOgotICAgICAgICAgICAg c3BrdGw7Ci0gICAgICAgIGlmICh4ICE9IG9sZGxlbikgeyAgICAgICAgICAgICAgLyogQnV0IG9u bHkgaWYgaXQgY2hhbmdlZC4gKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfUEwsIDIyKTsKLSAgICAg ICAgICAgIHByaW50dygiJWQiLHgpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QTCwgKGxv bmcpIHggKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAg ICBjbHJ0b2VvbCgpOwotICAgICAgICAgICAgb2xkbGVuID0geDsKLSAgICAgICAgfQotICAgICAg ICBtb3ZlKENXX1BDLCAyMik7ICAgICAgICAgICAgICAgIC8qIFBhY2tldCBjb3VudCAoYWx3YXlz KS4gKi8KLQotICAgICAgICBwcmludHcoIiVkIiwgKHdoYXQgJiBXX1JFQ1YpID8gcnBhY2tldHMg OiBzcGFja2V0cyk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJv cGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUEMsIChsb25nKSBzcGFja2V0cyAp OwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xydG9lb2wo KTsKLQotICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSyAmJiAhZnRwKSB7IC8qIFdpbmRv dyBzbG90cyAqLwotICAgICAgICAgICAgY2hhciB3c1sxNl07Ci0gICAgICAgICAgICBpbnQgZmxh ZzsKLSAgICAgICAgICAgIGZsYWcgPSAwOwotI2lmZGVmIFNUUkVBTUlORwotICAgICAgICAgICAg aWYgKHN0cmVhbWluZykgewotICAgICAgICAgICAgICAgIGlmIChvbGR3aW4gIT0gLTIpIHsKLSAg ICAgICAgICAgICAgICAgICAgc3ByaW50Zih3cywiU1RSRUFNSU5HIik7Ci0gICAgICAgICAgICAg ICAgICAgIGZsYWcgPSAxOwotICAgICAgICAgICAgICAgICAgICBvbGR3aW4gPSAtMjsKLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8K LSAgICAgICAgICAgICAgaWYgKHdjdXIgIT0gb2xkd2luKSB7Ci0gICAgICAgICAgICAgICAgICBz cHJpbnRmKHdzLCAiJWQgb2YgJWQiLCB3Y3VyIDwgMSA/IDEgOiB3Y3VyLCB3c2xvdG4pOwotICAg ICAgICAgICAgICAgICAgZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgICBvbGR3aW4gPSB3Y3Vy OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmxhZykgewotICAgICAgICAgICAg ICAgIG1vdmUoQ1dfV1MsIDIyKTsKLSAgICAgICAgICAgICAgICBwcmludHcoIiVzIiwgd3MpOwot ICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAg ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBD V19XUywgKGxvbmcpIHdzICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVycm9ycyA9IHJldHJhbnMgKyBjcnVu Y2hlZCArIHRpbWVvdXRzOwotICAgICAgICBpZiAoZXJyb3JzICE9IG9sZHRyeSkgeyAgICAgICAg IC8qIFJldHJ5IGNvdW50LCBpZiBjaGFuZ2VkICovCi0gICAgICAgICAgICBtb3ZlKENXX1BSLCAy Mik7Ci0gICAgICAgICAgICBwcmludHcoIiVkIixlcnJvcnMpOwotI2lmZGVmIEtVSQotI2lmbmRl ZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19QUiwgKGxvbmcpIGVycm9ycyApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAv KiBLVUkgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgICAgICBvbGR0cnkgPSBl cnJvcnM7Ci0gICAgICAgIH0KLQkvKiBTZW5kZXIncyBwYWNrZXQgdHlwZSAqLwotICAgICAgICBp ZiAoIWZ0cCAmJiAoYyAhPSBvbGR0eXAgJiYgYyAhPSAnWScgJiYgYyAhPSAnTicpKSB7Ci0gICAg ICAgICAgICBjaGFyIHR5cGVbMl07Ci0gICAgICAgICAgICBzcHJpbnRmKHR5cGUsICIlYyIsYyk7 Ci0gICAgICAgICAgICBtb3ZlKENXX1BULDIyKTsKLSAgICAgICAgICAgIHByaW50dygiJXMiLCB0 eXBlKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUFQsIChsb25nKSB0eXBlICk7Ci0jZW5k aWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsK LSAgICAgICAgICAgIG9sZHR5cCA9IGM7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChjKSB7 ICAgICAgICAgICAgICAgICAgICAvKiBOb3cgaGFuZGxlIHNwZWNpZmljIHBhY2tldCB0eXBlcyAq LwotICAgICAgICAgIGNhc2UgJ1MnOiAgICAgICAgICAgICAgICAgICAgIC8qIEJlZ2lubmluZyBv ZiB0cmFuc2ZlciAqLwotICAgICAgICAgICAgZmNudCA9IGZieXQgPSAwTDsgICAgICAgICAgIC8q IENsZWFyIGNvdW50ZXJzICovCi0jaWZkZWYgR0ZUSU1FUgotICAgICAgICAgICAgZ3R2ID0gLTEu MDsKLSNlbHNlIC8qIEdGVElNRVIgKi8KLSAgICAgICAgICAgIGd0diA9IC0xTDsgICAgICAgICAg ICAgICAgICAvKiBBbmQgb2xkL25ldyB0aGluZ3MuLi4gKi8KLSNlbmRpZiAvKiBHRlRJTUVSICov Ci0gICAgICAgICAgICBvbGRwY3QgPSBwY3QgPSAwTDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g ICAgICAgICAgY2FzZSAnWic6ICAgICAgICAgICAgICAgICAgICAgLyogb3IgRU9GICovCi0gICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9QVCBaIHBrdG51bSIsIiIsbik7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9QVCBaIG9sZHBjdCIsIiIsb2xkcGN0KTsK LSAgICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1BUIFogcGN0IiwiIixwY3QpOwot ICAgICAgICAgIGNhc2UgJ0QnOiAgICAgICAgICAgICAgICAgICAgIC8qIERhdGEgcGFja2V0ICov Ci0gICAgICAgICAgICBpZiAoZnNpeiA+IDBMKSB7ICAgICAgICAgICAgLyogU2hvdyBwZXJjZW50 IGRvbmUgaWYga25vd24gKi8KLSAgICAgICAgICAgICAgICBvbGRwY3QgPSBwY3Q7ICAgICAgICAg ICAvKiBSZW1lbWJlciBwcmV2aW91cyBwZXJjZW50ICovCi0gICAgICAgICAgICAgICAgaG93ZmFy ID0gZmZjOwotI2lmZGVmIENLX1JFU0VORAotICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19T RU5EKQkvKiBBY2NvdW50IGZvciBQU0VORCBvciBSRVNFTkQgKi8KLSAgICAgICAgICAgICAgICAg IGhvd2ZhciArPSBzZW5kc3RhcnQ7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdf UkVDVikKLSAgICAgICAgICAgICAgICAgIGhvd2ZhciArPSByc19sZW47Ci0jZW5kaWYgLyogQ0tf UkVTRU5EICovCi0gICAgICAgICAgICAgICAgLyogUGVyY2VudCBkb25lLCB0byBiZSBkaXNwbGF5 ZWQuLi4gKi8KLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnWicpIHsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKCFkaXNjYXJkICYmICFjeHNlZW4gJiYgIWN6c2VlbikgcGN0ID0gMTAwTDsKLSAg ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgIHBjdCA9IChmc2l6ID4gOTlM KSA/IChob3dmYXIgLyAoZnNpeiAvIDEwMEwpKSA6IDBMOwotICAgICAgICAgICAgICAgIGlmIChw Y3QgPiAxMDBMIHx8ICAgICAgIC8qIEFsbG93IGZvciBleHBhbnNpb24gYW5kICovCi0gICAgICAg ICAgICAgICAgICAgKG9sZHBjdCA9PSA5OUwgJiYgcGN0IDwgMEwpKSAvKiBvdGhlciBib3VuZGFy eSBjb25kaXRpb25zICovCi0gICAgICAgICAgICAgICAgICBwY3QgPSAxMDBMOwotICAgICAgICAg ICAgICAgIGlmIChwY3QgIT0gb2xkcGN0KSAgICAgIC8qIE9ubHkgZG8gdGhpcyAxMDAgdGltZXMg cGVyIGZpbGUgKi8KLSAgICAgICAgICAgICAgICAgIHVwZHBjdChvbGRwY3QsIHBjdCk7Ci0gICAg ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1vdmUoQ1dfUENELDIyKTsKLSAgICAg ICAgICAgICAgICBwcmludHcoIiVzIiwgY2tmc3RvYShmZmMpKTsKLSAgICAgICAgICAgIH0KLSNp ZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJ TEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBob3dmYXIpOwotI2VuZGlmIC8qIEs5 NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBw Y3QsIGZzaXosIGhvd2Zhcik7Ci0gICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3Ry LCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg IGNhc2UgJyUnOiAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXRzLCByZXRyYW5zbWlzc2lv bnMgKi8KLSAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7 Ci0gICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zh cik7ICovCi0KLSAgICAgICAgICAgIGVycm9ycyA9IHJldHJhbnMgKyBjcnVuY2hlZCArIHRpbWVv dXRzOwotICAgICAgICAgICAgaWYgKGVycm9ycyAhPSBvbGR0cnkpIHsgICAgIC8qIEVycm9yIGNv dW50LCBpZiBjaGFuZ2VkICovCi0gICAgICAgICAgICAgICAgbW92ZShDV19QUiwgMjIpOwotICAg ICAgICAgICAgICAgIHByaW50dygiJWQiLGVycm9ycyk7Ci0gICAgICAgICAgICAgICAgY2xydG9l b2woKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBDV19QUiwgKGxvbmcpIGVycm9ycwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7Ci0gICAgICAgICAgICAgICAg aWYgKHMpIGlmICgqcykgewotICAgICAgICAgICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7Ci0g ICAgICAgICAgICAgICAgICAgIHByaW50dygiJXMiLHMpOwotICAgICAgICAgICAgICAgICAgICBj bHJ0b2VvbCgpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgICAg IEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykg cyk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlICdFJzogICAgICAgICAgICAgICAg ICAgICAvKiBFcnJvciBwYWNrZXQgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBtb3Zl KENXX0VSUiwyMik7ICAgICAgICAgICAgLyogUHJpbnQgaXRzIGRhdGEgZmllbGQgKi8KLSAgICAg ICAgICAgIGlmICgqcykgewotICAgICAgICAgICAgICAgIHByaW50dygiJXMiLHMpOwotI2lmZGVm IEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9G SUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyApOwotI2VuZGlmIC8qIEs5NUcg Ki8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNscnRvZW9s KCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgZmNudCA9IGZieXQgPSAwTDsg ICAgICAgICAgIC8qIFNvIG5vIGJ5dGVzIGZvciB0aGlzIGZpbGUgKi8KLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgIGNhc2UgJ1EnOiAgICAgICAgICAgICAgICAgICAgIC8qIENydW5jaGVk IHBhY2tldCAqLwotICAgICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93 ZmFyKTsKLSAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwg aG93ZmFyKTsgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKLSAgICAgICAgICAgIHBy aW50dygiRGFtYWdlZCBQYWNrZXQiKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAg ICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpICJEYW1hZ2VkIFBhY2tldCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5k aWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ3EnOiAgICAgICAgICAgICAgICAg ICAgIC8qIEN0cmwtQyBvciBjb25uZWN0aW9uIGxvc3QgKi8KLSAgICAgICAgICAgIG1vdmUoQ1df TVNHLDIyKTsKLQkgICAgY2xydG9lb2woKTsKLSAgICAgICAgICAgIGlmICghcykgcyA9ICIiOwot ICAgICAgICAgICAgcHJpbnR3KCIlcyIsICpzID8gcyA6ICJVc2VyIGludGVycnVwdGlvbiBvciBj b25uZWN0aW9uIGxvc3QiKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgQ1dfTVNHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHMK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlm IC8qIEtVSSAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnVCc6ICAgICAg ICAgICAgICAgICAgICAgLyogVGltZW91dCAqLwotICAgICAgICAgICAgY3BzID0gc2hvY3BzKChp bnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKLSAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChv bGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIy KTsKLSAgICAgICAgICAgIHByaW50dygiVGltZW91dCAlZCBzZWMiLHJjdnRpbW8pOwotI2lmZGVm IEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9U UkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIlRpbWVvdXQiCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAg ICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgICAgICBlcnJvcnMgPSByZXRyYW5zICsgY3J1bmNo ZWQgKyB0aW1lb3V0czsKLSAgICAgICAgICAgIGlmIChlcnJvcnMgIT0gb2xkdHJ5KSB7ICAgICAv KiBFcnJvciBjb3VudCwgaWYgY2hhbmdlZCAqLwotICAgICAgICAgICAgICAgIG1vdmUoQ1dfUFIs IDIyKTsKLSAgICAgICAgICAgICAgICBwcmludHcoIiVkIixlcnJvcnMpOwotI2lmZGVmIEtVSQot I2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJB TlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1BSLCAobG9u ZykgZXJyb3JzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBL OTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICAgICAgY2xydG9lb2woKTsKLSAg ICAgICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhl cnMsIGRvIG5vdGhpbmcgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg IHJlZnJlc2goKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7Ci0jZW5k aWYgLyogT1MyICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfU1Q6ICAgICAg ICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgc3RhdHVzICovCi0gICAgICAgIGRlYnVn KEYxMDEsInNjcmVlbmMgU0NSX1NUIGMiLCIiLGMpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJzY3Jl ZW5jIFNDUl9TVCBzdWNjZXNzIiwiIixzdWNjZXNzKTsKLSAgICAgICAgZGVidWcoRjEwMSwic2Ny ZWVuYyBTQ1JfU1QgY3hzZWVuIiwiIixjeHNlZW4pOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAg bW92ZShDV19QQ0QsMjIpOyAgICAgICAgICAgICAgICAvKiBVcGRhdGUgcGVyY2VudCBkb25lICov Ci0gICAgICAgIGlmIChjID09IFNUX09LKSB7ICAgICAgICAgICAgICAgLyogT0ssIHByaW50IDEw MCAlICovCi0gICAgICAgICAgICBpZiAocGN0bGJsKQotICAgICAgICAgICAgICB1cGRwY3Qob2xk cGN0LDEwMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50dygiJXMiLCBj a2ZzdG9hKGZmYykpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGZmYyk7 Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgcGN0ID0g MTAwOwotICAgICAgICAgICAgb2xkcGN0ID0gMDsKLSAgICAgICAgfSBlbHNlIGlmIChmc2l6ID4g MEwpICAgICAgICAgICAvKiBOb3QgT0ssIHVwZGF0ZSBmaW5hbCBwZXJjZW50ICovCi0vKgotICBU aGUgZWxzZSBwYXJ0IHdyaXRlcyBhbGwgb3ZlciB0aGUgc2NyZWVuIC0tIGhvd2ZhciBhbmQvb3Ig ZnNpeiBoYXZlCi0gIGJlZW4gcmVzZXQgYXMgYSBjb25zZXF1ZW5jZSBvZiB0aGUgbm90LU9LbmVz cyBvZiB0aGUgdHJhbnNmZXIuCi0qLwotICAgICAgICAgIGlmIChwY3RsYmwpCi0gICAgICAgICAg ICB1cGRwY3Qob2xkcGN0LCAoaG93ZmFyICogMTAwTCkgLyBmc2l6KTsKLSAgICAgICAgY2xydG9l b2woKTsKLSNlbHNlCi0gICAgICAgIGlmIChjID09IFNUX09LKSB7ICAgICAgICAgICAgICAgLyog T0ssIHByaW50IDEwMCAlICovCi0gICAgICAgICAgICBtb3ZlKENXX1BDRCwyMik7ICAgICAgICAg ICAgLyogVXBkYXRlIHBlcmNlbnQgZG9uZSAqLwotICAgICAgICAgICAgaWYgKHBjdGxibCkgewot CQlpZiAob2xkcGN0ID09IDApCS8qIFN3aXRjaGluZyBmcm9tICJieXRlcyBzbyBmYXIiICovCi0J CSAgY2xydG9lb2woKTsJCS8qIHRvICJwZXJjZW50IGRvbmUiLi4uICovCi0JCXVwZHBjdChvbGRw Y3QsMTAwKTsKLQkgICAgfSBlbHNlCi0gICAgICAgICAgICAgIHByaW50dygiJXMiLCBja2ZzdG9h KGZmYykpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGZmYyk7Ci0jZW5k aWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAg ICAgIHBjdCA9IDEwMDsKLSAgICAgICAgICAgIG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIE5vLCBsZWF2ZSBpdCB0aGVyZSBzbyB0aGV5IGNh biByZWFkIGl0ICovCi0gICAgICAgIG1vdmUoQ1dfTVNHLDIyKTsgICAgICAgICAgICAgICAgLyog UmVtb3ZlIGFueSBwcmV2aW91cyBtZXNzYWdlICovCi0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcK LSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTVNH LCAobG9uZykgIiIgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAg ICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAg ICAgbW92ZShDV19UUiwgMjIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1 aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1RSLCAobG9uZykgIiIg KTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGNscnRvZW9s KCk7IHJlZnJlc2goKTsKLQotICAgICAgICBzd2l0Y2ggKGMpIHsgICAgICAgICAgICAgICAgICAg IC8qIFByaW50IG5ldyBzdGF0dXMgbWVzc2FnZSAqLwotICAgICAgICAgIGNhc2UgU1RfT0s6ICAg ICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIE9LICovCi0gICAgICAgICAgICBmY250Kys7ICAg ICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhpcyBmaWxlICovCi0JICAgIGlmICh3aGF0ID09 IChXX0ZUUHxXX0ZUX0RFTEUpKSB7Ci0JCW1vdmUoQ1dfTVNHLDIyKTsKLQkJY2xydG9lb2woKTsK LQkJcHJpbnR3KCJEZWxldGUgT0siKTsKLQkgICAgfSBlbHNlIHsKLQkJZmJ5dCArPSBmZmM7Ci0J CW1vdmUoQ1dfTVNHLDIyKTsKLQkJY2xydG9lb2woKTsKLQkJcHJpbnR3KCJUcmFuc2ZlciBPSyIp OwotCSAgICB9Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpIENXX01TRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiVHJhbnNmZXIg T0siCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNl bmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKLSAgICAg ICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfRElTQzogICAgICAgICAgICAgICAg IC8qIERpc2NhcmRlZCAqLwotICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOwotICAgICAgICAg ICAgcHJpbnR3KCJGaWxlIGRpc2NhcmRlZCIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0g ICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgIkZpbGUgZGlzY2FyZGVkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ09NTUVOVAotICAg ICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAg ICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg ICAgICBjYXNlIFNUX0lOVDogICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRlZCAqLwotICAg ICAgICAgICAgbW92ZShDV19FUlIsMjIpOwotICAgICAgICAgICAgcHJpbnR3KCJUcmFuc2ZlciBp bnRlcnJ1cHRlZCIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIlRyYW5z ZmVyIGludGVycnVwdGVkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAv KiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAg cGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICBjbHJ0 b2VvbCgpOyByZWZyZXNoKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNl IFNUX1NLSVA6ICAgICAgICAgICAgICAgICAvKiBTa2lwcGVkICovCi0gICAgICAgICAgICBtb3Zl KENXX0VSUiwyMik7Ci0JICAgIGlmIChuID4gMCAmJiBuIDwgbnNrcmVhc29uKQotCSAgICAgIHBy aW50dygiRmlsZSBza2lwcGVkICglcykiLHNrcmVhc29uW25dKTsKLQkgICAgZWxzZQotCSAgICAg IHByaW50dygiRmlsZSBza2lwcGVkIik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSAiRmlsZSBza2lwcGVkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRp ZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAg ICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICBj bHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBj YXNlIFNUX0VSUjogICAgICAgICAgICAgICAgICAvKiBFcnJvciBtZXNzYWdlICovCi0gICAgICAg ICAgICBtb3ZlKENXX0VSUiwyMik7Ci0gICAgICAgICAgICBpZiAoIXMpIHMgPSAoY2hhciAqKWVw a3Rtc2c7Ci0gICAgICAgICAgICBwcmludHcoIiVzIixzKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYg Szk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfRVJSLCAobG9uZykgcyApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkg Ki8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKLSAgICAg ICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfUkVGVTogICAgICAgICAgICAgICAg IC8qIFJlZnVzZWQgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKLSAgICAgICAgICAg IGlmICgqcykgewotICAgICAgICAgICAgICAgIGNoYXIgZXJyYnVmWzY0XSA7Ci0gICAgICAgICAg ICAgICAgc3ByaW50ZiggZXJyYnVmLCAiUmVmdXNlZCwgJXMiLCBzICkgOwotICAgICAgICAgICAg ICAgIHByaW50dygiJXMiLCBlcnJidWYpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAg ICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpIENXX0VS UiwobG9uZykgZXJyYnVmKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50dygiUmVmdXNlZCIpOwot I2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko S1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1dfRVJSLChsb25nKSJSZWZ1c2VkIik7Ci0jZW5kaWYg LyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgfQotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAgICAgICAgICAgcmV0dXJuOwot Ci0gICAgICAgICAgY2FzZSBTVF9JTkM6Ci0gICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7Ci0g ICAgICAgICAgICBwcmludHcoIkluY29tcGxldGUiKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1 RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1df RVJSLChsb25nKSJJbmNvbXBsZXRlIik7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtV SSAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAg ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9NU0c6Ci0gICAgICAgICAgICBt b3ZlKENXX01TRywyMik7Ci0gICAgICAgICAgICBwcmludHcoIiVzIixzKTsKLSNpZmRlZiBLVUkK LSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNG RVIsKGxvbmcpQ1dfTVNHLChsb25nKXMpOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBL VUkgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKLSAgICAgICAgICAgIHJl dHVybjsKLQotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEJhZCBj YWxsICovCi0gICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7Ci0gICAgICAgICAgICBwcmludHco IioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgc3RhdHVzICoqKiIpOwotI2lmZGVmIEtVSQot I2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNG RVIsIChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKioqIHNj cmVlbigpIGNhbGxlZCB3aXRoIGJhZCBzdGF0dXMgKioqIiApOwotI2VuZGlmIC8qIEs5NUcgKi8K LSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsgcmV0 dXJuOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgU0NSX1RDOiB7ICAgICAgICAgICAgICAgICAg ICAvKiBUcmFuc2FjdGlvbiBjb21wbGV0ZSAqLwotICAgICAgICAgIGNoYXIgbXNnYnVmWzEyOF07 Ci0gICAgICAgICAgbW92ZShDV19DUCwyMik7ICAgICAgICAgICAgICAgLyogT3ZlcmFsbCB0cmFu c2ZlciByYXRlICovCi0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19DUCwgdGZjcHMpOwotI2VuZGlm IC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICBwcmludHcoIiVzIiwgY2tm c3RvYSh0ZmNwcykpOwotICAgICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgICAgaWYgKHN1Y2Nl c3MpIHsKLSAgICAgICAgICAgICAgbW92ZShDV19NU0csMjIpOyAgICAgICAgICAvKiBQcmludCBz dGF0aXN0aWNzIGluIG1lc3NhZ2UgbGluZSAqLwotICAgICAgICAgICAgICBjbHJ0b2VvbCgpOwot ICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoc3VjY2VzcykgewotICAgICAgICAgICAgICBzcHJp bnRmKG1zZ2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAiU1VDQ0VTUy4gIEZpbGVzOiAlbGQs IEJ5dGVzOiAlcywgJWxkIENQUyIsCi0gICAgICAgICAgICAgICAgICAgICAgZmlsY250IC0gZmls cmVqLAotICAgICAgICAgICAgICAgICAgICAgIGNrZnN0b2EoZmJ5dCksCi0gICAgICAgICAgICAg ICAgICAgICAgdGZjcHMKLSAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICBw cmludHcoIiVzIiwgbXNnYnVmKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIENXX01TRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIG1zZ2J1ZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8q IEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgICAgY2xydG9lb2woKTsKLQot ICAgICAgICAgIH0KLSAgICAgICAgICBtb3ZlKENXX1RSLCAxKTsKLSAgICAgICAgICBwcmludHco IiAgICAgICBFbGFwc2VkIFRpbWU6ICVzIixoaG1tc3MoKGxvbmcpCi0jaWZkZWYgR0ZUSU1FUgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnB0c2Vj cyArIDAuNSkKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRzZWNzCi0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVm IEs5NUcKLSAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfVFIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIGhobW1zcygobG9uZykKLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoZnB0c2VjcyArIDAuNSkKLSNlbHNlCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2VjcwotI2VuZGlmIC8qIEdGVElNRVIgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOwotI2VuZGlmIC8qIEs5 NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICAg IG1vdmUoMjMsMCk7IGNscnRvZW9sKCk7ICAgICAgIC8qIENsZWFyIGluc3RydWN0aW9ucyBsaW5l cyAqLwotICAgICAgICAgIG1vdmUoMjIsMCk7IGNscnRvZW9sKCk7ICAgICAgIC8qIHRvIG1ha2Ug cm9vbSBmb3IgcHJvbXB0LiAqLwotICAgICAgICAgIHJlZnJlc2goKTsKLQotI2lmZGVmIEdGVElN RVIKLSAgICAgICAgICBvbGRndHYgPSAoQ0tGTE9BVCkgLTEuMDsKLSNlbHNlCi0gICAgICAgICAg b2xkZ3R2ID0gLTFMOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotI2lmbmRlZiBWTVNDVVJTRQot CSAgZGVidWcoRjEwMCwic2NyZWVuYyBlbmR3aW4gQSIsIiIsMCk7Ci0gICAgICAgICAgZW5kd2lu KCk7Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgV2h5IGFuZCB3aGVuIHdhcyB0aGlzIGNhbGwgdG8g Y29ucmVzKCkgYWRkZWQ/ICBJdCBtYWtlcyBubyBzZW5zZSwKLSAgYW5kIGl0IGJyZWFrcyBlY2hv aW5nIG9uIFNvbGFyaXMgOC4KLSovCi0jaWZkZWYgU09MQVJJUwotICAgICAgICAgIGNvbnJlcygp OwotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyog Vk1TQ1VSU0UgKi8KLQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICBwY3QgPSAxMDA7IG9sZHBj dCA9IDA7ICAgICAgICAvKiBSZXNldCB0aGVzZSBmb3IgbmV4dCB0aW1lLiAqLwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSAgICAgICAgICBvbGR0eXAgPSAwOyBvbGRydHQgPSAtMUw7IG9sZHRyeSA9 IC0xOyBvbGRsZW4gPSAtMTsKLSAgICAgICAgICBvbGR0aW0gPSAtMTsKLSAgICAgICAgICBjZW5k dyA9IDE7Ci0gICAgICAgICAgaWYgKHhmcmJlbCkgYmxlZXAoQlBfTk9URSk7ICAgLyogQ2xvc2Ug d2luZG93LCB0aGVuIGJlZXAuICovCi0jaWZkZWYgVU5JWAotICAgICAgICAgIGZmbHVzaChzdGRv dXQpOwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgICBmdF93aW4gPSAwOyAgICAgICAgICAg ICAgICAgICAvKiBXaW5kb3cgY2xvc2VkLiAqLwotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0K LSAgICAgIGNhc2UgU0NSX0VNOiAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBwYWNrZXQg KGZhdGFsKSAqLwotICAgICAgICBtb3ZlIChDV19FUlIsMjIpOwotICAgICAgICBwcmludHcoIkZB SUxVUkU6ICVzIixzKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQ cm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSBzICk7Ci0j ZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBpZiAoeGZyYmVsKSBi bGVlcChCUF9GQUlMKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7IHJl dHVybjsKLQotICAgICAgY2FzZSBTQ1JfUUU6ICAgICAgICAgICAgICAgICAgICAgIC8qIFF1YW50 aXR5IGVxdWFscyAqLwotICAgICAgY2FzZSBTQ1JfVFU6ICAgICAgICAgICAgICAgICAgICAgIC8q IFVuZGVsaW1pdGVkIHRleHQgKi8KLSAgICAgIGNhc2UgU0NSX1ROOiAgICAgICAgICAgICAgICAg ICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBzdGFydCAqLwotICAgICAgY2FzZSBTQ1JfVFo6ICAg ICAgICAgICAgICAgICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IGVuZCAqLwotICAgICAgICBy ZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChpZ25vcmVkIGluIGZ1bGxzY3JlZW4g ZGlzcGxheSkgKi8KLQotICAgICAgY2FzZSBTQ1JfTVM6CQkJLyogTWVzc2FnZSBmcm9tIEtlcm1p dCBwYXJ0bmVyICovCi0gICAgICAgIG1vdmUoQ1dfTVNHLDIyKTsKLQlwcmludHcoIiVzIixzKTsK LSAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NS X1hEOiAgICAgICAgICAgICAgICAgICAgICAvKiBYLXBhY2tldCBkYXRhICovCi0gICAgICAgIHBj dCA9IG9sZHBjdCA9IDA7Ci0gICAgICAgIG1vdmUoQ1dfTkFNLDIyKTsKLSAgICAgICAgcHJpbnR3 KCIlcyIscyk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVy dHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyApOwotI2VuZGlm IC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xydG9lb2woKTsgcmVmcmVz aCgpOyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0NXOiAgICAgICAgICAgICAgICAgICAgICAv KiBDbG9zZSBXaW5kb3cgKi8KLSAgICAgICAgY2xydG9lb2woKTsgbW92ZSgyMywwKTsgY2xydG9l b2woKTsgbW92ZSgyMiwwKTsgY2xydG9lb2woKTsKLSAgICAgICAgcmVmcmVzaCgpOwotI2lmZGVm IENPTU1FTlQKLSAgICAgICAgcGN0ID0gMTAwOyBvbGRwY3QgPSAwOyAgICAgICAgICAvKiBSZXNl dCB0aGVzZSBmb3IgbmV4dCB0aW1lLiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAg b2xkdHlwID0gMDsgb2xkcnR0ID0gLTFMOyBvbGR0cnkgPSAtMTsgb2xkbGVuID0gLTE7Ci0gICAg ICAgIG9sZHRpbSA9IC0xOwotCi0jaWZuZGVmIFZNU0NVUlNFCi0JZGVidWcoRjEwMCwic2NyZWVu YyBlbmR3aW4gQiIsIiIsMCk7Ci0gICAgICAgIGVuZHdpbigpOwotI2VuZGlmIC8qIFZNU0NVUlNF ICovCi0gICAgICAgIGZ0X3dpbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyB0aGF0 IHdpbmRvdyBpcyBjbG9zZWQuICovCi0gICAgICAgIGNlbmR3ID0gMTsgcmV0dXJuOwotCi0gICAg ICBjYXNlIFNDUl9DRDogICAgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSBjdXJyZW50IGRp cmVjdG9yeSAqLwotICAgICAgICBtb3ZlKENXX0RJUiwyMik7Ci0gICAgICAgICBwcmludHcoIiVz Iiwgcyk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRElSLCAobG9uZykgcyApOwotI2VuZGlmIC8q IEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAg cmVmcmVzaCgpOwotI2lmZGVmIE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBkZWZhdWx0OiAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQmFkIGNhbGwgKi8KLSAgICAgICAgbW92ZSAoQ1dfRVJSLDIyKTsK LSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklM RV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKLSAgICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpICIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIGZ1 bmN0aW9uIGNvZGUgKioqIgotICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5 NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgcHJpbnR3KCIqKiogc2NyZWVuKCkgY2Fs bGVkIHdpdGggYmFkIGZ1bmN0aW9uIGNvZGUgKioqIik7Ci0gICAgICAgIGNscnRvZW9sKCk7IHJl ZnJlc2goKTsgcmV0dXJuOwotICAgIH0KLX0KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLQotI2lm ZGVmIEtVSQotI2lmZGVmIENLX0FOU0lDCi12b2lkCi1zY3JlZW5nKGludCBmLCBjaGFyIGMsbG9u ZyBuLGNoYXIgKnMpCi0jZWxzZQotQ0tWT0lECi1zY3JlZW5nKGYsYyxuLHMpCi1pbnQgZjsgICAg ICAgICAgLyogYXJndW1lbnQgZGVzY3JpcHRvciAqLwotY2hhciBjOyAgICAgICAgIC8qIGEgY2hh cmFjdGVyIG9yIHNtYWxsIGludGVnZXIgKi8KLWxvbmcgbjsgICAgICAgICAvKiBhIGxvbmcgaW50 ZWdlciAqLwotY2hhciAqczsgICAgICAgIC8qIGEgc3RyaW5nICovCi0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLS8qIHNjcmVlbmcoKSAqLyB7Ci0jaWZkZWYgQ0tfU1NMCi0gICAgZXh0ZXJuIGludCB0 bHNfYWN0aXZlX2ZsYWcsIHNzbF9hY3RpdmVfZmxhZzsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNp ZmRlZiBSTE9HQ09ERQotICAgIGV4dGVybiBpbnQgdHRucHJvdG87Ci0jZW5kaWYgLyogUkxPR0NP REUgKi8KLSAgICBzdGF0aWMgaW50IHEgPSAwOwotICAgIHN0YXRpYyBDS19PRkZfVCBmc2l6ID0g KENLX09GRl9UKS0xOyAvKiBDb3B5IG9mIGZpbGUgc2l6ZSAqLwotICAgIHN0YXRpYyBsb25nIGZj bnQgPSAwTDsgICAgLyogTnVtYmVyIG9mIGZpbGVzIHRyYW5zZmVycmVkICovCi0gICAgc3RhdGlj IGxvbmcgZmJ5dCA9IDBMOyAgICAvKiBUb3RhbCBmaWxlIGJ5dGVzIG9mIGFsbCBmaWxlcyB0cmFu c2ZlcnJlZCAqLwotICAgIHN0YXRpYyBDS19PRkZfVCBob3dmYXIgPSAoQ0tfT0ZGX1QpMDsgLyog SG93IG11Y2ggb2YgZmlsZSB4ZmVyJ2Qgc28gZmFyICovCi0gICAgc3RhdGljIGludCAgcGN0bGJs ID0gMEw7ICAvKiBQZXJjZW50IGRvbmUgdnMgQnl0ZXMgc28gZmFyICovCi0gICAgbG9uZyBjcHMg PSAwTDsKLQotICAgIGludCBuZXQgPSAwOwotICAgIGludCB4bmV0ID0gMDsKLSAgICBpbnQgZnRw ID0gMDsKLSAgICBpbnQgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGgg b2Ygc3RyaW5nICovCi0gICAgaW50IGVycm9ycyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyog RXJyb3IgY291bnRlciAqLwotICAgIGludCB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFdvcmtlciAqLwotCi0gICAgZGVidWcoRjEwMSwic2NyZWVuZyBjaW5pdCIsIiIsY2luaXQp OwotICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgY2VuZHciLCIiLGNlbmR3KTsKLQotICAgIGlmICgh cykgcyA9ICIiOyAgICAgICAgICAgICAgICAgICAgIC8qIEFsd2F5cyBkbyB0aGlzLiAqLwotCi0g ICAgZnRwID0gKHdoYXQgJiBXX0ZUUCkgPyAxIDogMDsJLyogRlRQIG9yIEtlcm1pdCAqLwotICAg IG5ldCA9IG5ldHdvcmsgfHwgZnRwOwotICAgIHhuZXQgPSBmdHAgPyAxIDogbmV0dHlwZTsJCS8q IE5FVF9UQ1BCID09IDEgKi8KLQotICAgIGlmIChjaW5pdCA9PSAwIHx8IGNlbmR3ID4gMCkgeyAg ICAgIC8qIEhhbmRsZSBib3JkZXJsaW5lIGNhc2VzLi4uICovCi0gICAgICAgIGlmIChmID09IFND Ul9DVykgeyAgICAgICAgICAgICAgLyogQ2xvc2Ugd2luZG93LCBidXQgaXQncyBub3Qgb3BlbiAq LwotICAgICAgICAgICAgZnRfd2luID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg fQotICAgICAgICBkZWJ1ZyhGMTExLCJzY3JlZW5nIEEiLHMsZik7Ci0gICAgICAgIGlmIChmID09 IFNDUl9FTSB8fAotICAgICAgICAgICAoZiA9PSBTQ1JfUFQgJiYgYyA9PSAnRScpKSB7IC8qIEZh dGFsIGVycm9yIGJlZm9yZSB3aW5kb3cgb3BlbiAqLwotICAgICAgICAgICAgY29ub2xsKCIiKTsg Y29ub2MoJz8nKTsgY29ub2xsKHMpOyByZXR1cm47IC8qIFJlZ3VsYXIgZGlzcGxheSAqLwotICAg ICAgICB9Ci0gICAgfQotICAgIGlmIChjaW5pdCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgIC8q IE9ubHkgY2FsbCBpbml0c2NyKCkgb25jZSAqLwotCS8qIENoZWNrIHRoZXNlIG5vdyAtLSBpZiB0 aGV5IGFyZSBkZWZpbmVkIGJ1dCBub3QgbnVtZXJpYyAqLwotCS8qIHRoZXkgY2FuIGNyYXNoIGN1 cnNlcyAqLwotICAgICAgICBjZW5kdyA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIE5ldyB3 aW5kb3cgbmVlZHMgcmVwYWludGluZyAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5nIGNh bGxpbmcgaW5pdHNjciIsIiIsMCk7Ci0gICAgICAgIGluaXRzY3IoKTsgICAgICAgICAgICAgICAg ICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMuICovCi0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVl bmcgaW5pdHNjciBvayIsIiIsMCk7Ci0gICAgICAgIGNpbml0Kys7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogUmVtZW1iZXIgY3Vyc2VzIHdhcyBpbml0aWFsaXplZC4gKi8KLSAgICB9Ci0gICAg ZnRfd2luID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93IGlzIG9wZW4gKi8K LSAgICBpZiAocmVwYWludCkgewotI2lmZGVmIENLX1dSRUZSRVNICi0vKgotICBUaGlzIHRvdGFs bHkgcmVwYWludHMgdGhlIHNjcmVlbiwganVzdCB3aGF0IHdlIHdhbnQsIGJ1dCB3ZSBjYW4gb25s eQotICBkbyB0aGlzIHdpdGggcmVhbCBjdXJzZXMsIGFuZCB0aGVuIG9ubHkgaWYgY2xlYXJvaygp IGFuZCB3cmVmcmVzaCgpIGFyZQotICBwcm92aWRlZCBpbiB0aGUgY3Vyc2VzIGxpYnJhcnkuCi0q LwotICAgICAgICBSZXN0b3JlQ21kTW9kZSgpOwotI2Vsc2UgIC8qIE5vIENLX1dSRUZSRVNIICov Ci0vKgotICBLZXJtaXQncyBkby1pdC15b3Vyc2VsZiBtZXRob2QsIHdvcmtzIHdpdGggYWxsIHR5 cGVzIG9mIGZ1bGxzY3JlZW4KLSAgc3VwcG9ydCwgYnV0IGRvZXMgbm90IHJlcGFpbnQgYWxsIHRo ZSBmaWVsZHMuICBGb3IgZXhhbXBsZSwgdGhlIGZpbGVuYW1lCi0gIGlzIGxvc3QsIGJlY2F1c2Ug aXQgYXJyaXZlcyBhdCBhIGNlcnRhaW4gdGltZSBhbmQgbmV2ZXIgY29tZXMgYWdhaW4sIGFuZAot ICBLZXJtaXQgcHJlc2VudGx5IGRvZXMgbm90IHNhdmUgaXQgYW55d2hlcmUuICBNYWtpbmcgdGhp cyBtZXRob2Qgd29yayBmb3IKLSAgYWxsIGZpZWxkcyB3b3VsZCBiZSBhIHJhdGhlciBtYWpvciBy ZWNvZGluZyB0YXNrLCBkdXBsaWNhdGluZyB3aGF0IGN1cnNlcwotICBhbHJlYWR5IGRvZXMsIGFu ZCB3b3VsZCBhZGQgYSBsb3Qgb2YgY29tcGxleGl0eSBhbmQgc3RvcmFnZSBzcGFjZS4KLSovCi0g ICAgICAgIGNlbmR3ID0gMTsKLSNlbmRpZiAvKiBDS19XUkVGUkVTSCAqLwotICAgICAgICByZXBh aW50ID0gMDsKLSAgICB9Ci0gICAgaWYgKGNlbmR3KSB7ICAgICAgICAgICAgICAgICAgICAgICAg LyogZW5kd2luKCkgd2FzIGNhbGxlZCBwcmV2aW91c2x5ICovCi0gICAgICAgIGRlYnVnKEYxMDAs InNjcmVlbmcgc2V0dXAgb2siLCIiLDApOwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJ TEVfVFJBTlNGRVIsIChsb25nKSBDV19ESVIsIChsb25nKSB6Z3RkaXIoKSApOwotICAgICAgICBL dWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19MSU4sCi0gICAgICAg ICAgICAgICAgICAgICAgICAobG9uZykgKAotI2lmZGVmIE5FV0ZUUAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmdHAgPyAoZnRwX2hvc3QgPyBmdHBfaG9zdCA6ICIodW5rbm93biki KSA6Ci0jZW5kaWYgLyogTkVXRlRQICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHR0bmFtZSkgKTsKLQotICAgICAgICBpZiAobmV0KSB7Ci0jaWZkZWYgTkVUQ09OTgotCSAgICBp bnQgc2VjdXJlID0gMDsKLQkgICAgY2hhciAqIHhuYW1lOwotCSAgICBpZiAoeG5ldCA+IG5uZXRu YW1lKQotCSAgICAgIHhuYW1lID0gIltFUlJPUl0iOwotCSAgICBlbHNlCi0JICAgICAgeG5hbWUg PSBuZXRuYW1lW3huZXRdOwotI2lmZGVmIE5FV0ZUUAotICAgICAgICAgICAgaWYgKGZ0cCkgewot CQlpZiAoZnRwaXNzZWN1cmUoKSkKLQkJICBzZWN1cmUgPSAxOwotCSAgICB9IGVsc2UKLSNlbmRp ZiAvKiBORVdGVFAgKi8KLQkgICAgICBpZiAoMAotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICAgICAg ICAgICAgICB8fCBJU19TU0goKQotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNpZmRlZiBDS19F TkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgfHwgY2tfdG5fZW5jcnlwdGluZygpICYmIGNrX3Ru X2RlY3J5cHRpbmcoKQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wK LSAgICAgICAgICAgICAgICB8fCB0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnCi0j ZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgUkxPR0NPREUKLSNpZmRlZiBDS19LRVJCRVJPUwot I2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9F SzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTgotI2VuZGlmIC8qIENLX0VOQ1JZUFRJ T04gKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0g ICAgICAgICAgICAgICAgICkgewotCQlzZWN1cmUgPSAxOwotCSAgICB9Ci0JICAgIGlmIChzZWN1 cmUpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGJ1ZlszMF07Ci0gICAgICAgICAgICAgICAgc3By aW50ZihidWYsIiVzIChTRUNVUkUpIix4bmFtZSk7Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJv cGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIENXX1NQRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgYnVm Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAobG9uZykgeG5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5 KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENX X1NQRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKG5ldHdvcmspIgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBORVRDT05OICovCi0gICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc3BlZWQgPCAwTCkKLSAgICAgICAgICAgICAgc3Bl ZWQgPSB0dGdzcGQoKTsKLSAgICAgICAgICAgIGlmIChzcGVlZCA+IDBMKSB7Ci0gICAgICAgICAg ICAgICAgaWYgKHNwZWVkID09IDg4ODApIHsKLSAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJv cGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBDV19TUEQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSAiNzUvMTIwMCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjaGFyIHNwZWVkYnVm WzY0XSA7Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYoc3BlZWRidWYsICIlbGQiLCBzcGVl ZCk7Ci0gICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVS LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgc3BlZWRidWYKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RS QU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIodW5rbm93bikiCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg ICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpIENXX1BBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHBhcm5h bSgoY2hhcilwYXJpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHBjdGxi bCA9ICh3aGF0ICYgV19TRU5EKTsKLSAgICAgICAgY2VuZHcgPSAwOwotICAgIH0KLSAgICBkZWJ1 ZyhGMTAxLCJTQ1JFRU5DIHN3aXRjaCIsIiIsZik7Ci0gICAgZGVidWcoRjAwMCwiU0NSRUVOQyBj IiwiIixjKTsKLSAgICBkZWJ1ZyhGMTAxLCJTQ1JFRU5DIG4iLCIiLG4pOwotCi0gICAgbGVuID0g c3RybGVuKHMpOyAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIGFyZ3VtZW50IHN0cmlu ZyAqLwotICAgIHN3aXRjaCAoZikgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhbmRsZSBv dXIgZnVuY3Rpb24gY29kZSAqLwotICAgICAgY2FzZSBTQ1JfRk46ICAgICAgICAgICAgICAgICAg ICAgIC8qIEZpbGVuYW1lICovCi0gICAgICAgIG9sZHBjdCA9IHBjdCA9IDBMOyAgICAgICAgICAg ICAgLyogUmVzZXQgcGVyY2VudHMgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgIGd0diA9IChD S0ZMT0FUKSAtMS4wOwotICAgICAgICAvKiBvbGRndHYgPSAoQ0tGTE9BVCkgLTEuMDsgKi8KLSNl bHNlCi0gICAgICAgIGd0diA9IC0xTDsKLSAgICAgICAgLyogb2xkZ3R2ID0gLTFMOyAqLwotI2Vu ZGlmIC8qIEdGVElNRVIgKi8KLSAgICAgICAgb2xkd2luID0gLTE7Ci0gICAgICAgIGZzaXogPSAo Q0tfT0ZGX1QpLTFMOwkJLyogSW52YWxpZGF0ZSBwcmV2aW91cyBmaWxlIHNpemUgKi8KLSAgICAg ICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUENELCAobG9u ZykgMCApOwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25n KSBDV19GRkMsIChsb25nKSAwICk7Ci0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9U UkFOU0ZFUiwgKGxvbmcpIENXX1NJWiwgKGxvbmcpIDAgKTsKLSAgICAgICAgS3VpU2V0UHJvcGVy dHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgIiIgKTsKLQotICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19OQU0sIChs b25nKSBzICk7Ci0gICAgICAgIHEgPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVt ZW1iZXIgbmFtZSBsZW5ndGggZm9yIGxhdGVyICovCi0gICAgICAgIHNjcmZ0KCk7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogRGlzcGxheSBmaWxlIHR5cGUgKGNhbiBjaGFuZ2UpICovCi0jaWZk ZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwotI2VuZGlmIC8qIE9TMiAqLwotICAg ICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0FOOiAgICAgICAgICAgICAgICAgICAgICAv KiBGaWxlIGFzLW5hbWUgKi8KLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5T RkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyApOwotI2lmZGVmIE9TMgotICAgICAgICBTYXZl Q21kTW9kZSgwLCAwKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAg ICBjYXNlIFNDUl9GUzogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBzaXplICovCi0gICAg ICAgIGZzaXogPSBuOwotICAgICAgICBpZiAoZnNpeiA+IChDS19PRkZfVCktMSkgewotICAgICAg ICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfU0laLCAo bG9uZykgbiApOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmc2l6ID4gKENLX09GRl9UKS0xKSB7 CS8qIFB1dCB1cCBwZXJjZW50IGxhYmVsICovCi0gICAgICAgICAgICBwY3RsYmwgPSAxOwotICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGN0bGJsID0gMDsKLQl9Ci0gICAgICAgIHNjcmZ0 KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0eXBlICovCi0jaWZkZWYgT1MyCi0g ICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1 cm47Ci0KLSAgICAgIGNhc2UgU0NSX1BUOiAgICAgICAgICAgICAgICAgICAgICAvKiBQYWNrZXQg dHlwZSBvciBwc2V1ZG90eXBlICovCi0gICAgICAgIGlmIChzcGFja2V0cyA8IDUpIHsKLSAgICAg ICAgICAgIGV4dGVybiBpbnQgc3lzaW5kZXg7Ci0gICAgICAgICAgICBleHRlcm4gc3RydWN0IHN5 c2RhdGEgc3lzaWRsaXN0W107Ci0gICAgICAgICAgICAvKiBUaGluZ3MgdGhhdCB3b24ndCBjaGFu Z2UgYWZ0ZXIgdGhlIDR0aCBwYWNrZXQgKi8KLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19Q QVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgcGFybmFtKChjaGFyKXBhcml0 eSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBpZiAoCi0jaWZk ZWYgTkVXRlRQCi0JCShmdHAgJiYgKHNwYWNrZXRzID09IDEgfHwgcnBhY2tldHMgPT0gMSkpIHx8 Ci0jZW5kaWYgLyogTkVXRlRQICovCi0JCXNwYWNrZXRzID09IDQKLQkJKSB7Ci0gICAgICAgICAg ICAgICAgaWYgKAotI2lmZGVmIE5FV0ZUUAotCQkgICAgZnRwIHx8Ci0jZW5kaWYgLyogTkVXRlRQ ICovCi0JCSAgICAoKHByb3RvY29sID09IFBST1RPX0spICYmIChzeXNpbmRleCA+IC0xKSkKLQkJ ICAgICkgewotICAgICAgICAgICAgICAgICAgICBjaGFyIG1zZ2J1ZlsxMjhdOwotICAgICAgICAg ICAgICAgICAgICBpZiAobmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG1z Z2J1ZiwiTmV0d29yayBIb3N0OiAlcyAoJXMpIiwKLSNpZmRlZiBORVdGVFAKLQkJCSAgICAgICBm dHAgPyAoZnRwX2hvc3QgPyBmdHBfaG9zdCA6ICIiKSA6Ci0jZW5kaWYgLyogTkVXRlRQICovCi0J CQkgICAgICAgdHRuYW1lLAotI2lmZGVmIE5FV0ZUUAotCQkJICAgICAgIGZ0cCA/IGZ0cF9zcnZ0 eXAgOgotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCQkJICAgICAgIHN5c2lkbGlzdFtzeXNpbmRleF0u c2lkX25hbWUKLQkJCSAgICAgICApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgICAgICAgICAgc3ByaW50Zihtc2didWYsCi0JCQkJIkNvbW11bmljYXRpb24g RGV2aWNlOiAlcyAocmVtb3RlIGhvc3QgaXMgJXMpIiwKLQkJCQl0dG5hbWUsCi0JCQkJc3lzaWRs aXN0W3N5c2luZGV4XS5zaWRfbmFtZQotCQkJCSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLAotCQkJ CSAgICAobG9uZykgQ1dfTElOLAotCQkJCSAgICAobG9uZykgbXNnYnVmCi0JCQkJICAgICk7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jaWZkZWYgQ0tfVElN RVJTCi0gICAgICAgIGlmICgvKiBydHRmbGcgJiYgKi8gcHJvdG9jb2wgPT0gUFJPVE9fSykgewot ICAgICAgICAgICAgbG9uZyB4eDsKLSAgICAgICAgICAgIGlmICgKLSNpZmRlZiBTVFJFQU1JTkcK LSAgICAgICAgICAgICAgICBzdHJlYW1pbmcgJiYgb2xkd2luICE9IC0yCi0jZWxzZQotICAgICAg ICAgICAgICAgIDAKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSAgICAgICAgICAgICAgICApIHsK LSAgICAgICAgICAgICAgICBjaGFyIG1zZ2J1Zls2NF07Ci0gICAgICAgICAgICAgICAgc3ByaW50 Zihtc2didWYsIjAwIC8gMDAiKTsKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJ X0ZJTEVfVFJBTlNGRVIsCi0JCQkJKGxvbmcpIENXX1RNTywKLQkJCQkobG9uZykgbXNnYnVmCi0J CQkJKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgeHggPSAocnR0ZGVs YXkgKyA1MDApIC8gMTAwMDsKLSAgICAgICAgICAgICAgICBpZiAoeHggIT0gb2xkcnR0IHx8IHJj dnRpbW8gIT0gb2xkdGltKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgbXNnYnVmWzY0XTsK LSAgICAgICAgICAgICAgICAgICAgc3ByaW50Zihtc2didWYsIiUwMmxkIC8gJTAyZCIsIHh4LCBy Y3Z0aW1vKTsKLSAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RS QU5TRkVSLAotCQkJCSAgICAobG9uZykgQ1dfVE1PLAotCQkJCSAgICAobG9uZykgbXNnYnVmCi0J CQkJICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIG9sZHJ0dCA9IHh4OwotICAgICAgICAgICAg ICAgICAgICBvbGR0aW0gPSByY3Z0aW1vOwotICAgICAgICAgICAgICAgICAgICBjbHJ0b2VvbCgp OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8q IENLX1RJTUVSUyAqLwotCi0gICAgICAgIHggPSAod2hhdCAmIFdfUkVDVikgPyAgICAgICAgICAv KiBQYWNrZXQgbGVuZ3RoICovCi0gICAgICAgICAgcnBrdGwrKHByb3RvY29sPT1QUk9UT19LPzE6 MCkgOgotICAgICAgICAgICAgc3BrdGw7Ci0gICAgICAgIGlmICh4ICE9IG9sZGxlbikgeyAgICAg ICAgICAgICAgLyogQnV0IG9ubHkgaWYgaXQgY2hhbmdlZC4gKi8KLSAgICAgICAgICAgIEt1aVNl dFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BMLCAobG9uZykgeCApOwot ICAgICAgICAgICAgb2xkbGVuID0geDsKLSAgICAgICAgfQotICAgICAgICBLdWlTZXRQcm9wZXJ0 eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQywgKGxvbmcpIHNwYWNrZXRzICk7Ci0K LSAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0sgJiYgIWZ0cCkgeyAvKiBXaW5kb3cgc2xv dHMgKi8KLSAgICAgICAgICAgIGNoYXIgd3NbMTZdOwotICAgICAgICAgICAgaW50IGZsYWc7Ci0g ICAgICAgICAgICBmbGFnID0gMDsKLSNpZmRlZiBTVFJFQU1JTkcKLSAgICAgICAgICAgIGlmIChz dHJlYW1pbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAob2xkd2luICE9IC0yKSB7Ci0gICAgICAg ICAgICAgICAgICAgIHNwcmludGYod3MsIlNUUkVBTUlORyIpOwotICAgICAgICAgICAgICAgICAg ICBmbGFnID0gMTsKLSAgICAgICAgICAgICAgICAgICAgb2xkd2luID0gLTI7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0gICAg ICAgICAgICAgIGlmICh3Y3VyICE9IG9sZHdpbikgewotICAgICAgICAgICAgICAgICAgc3ByaW50 Zih3cywgIiVkIG9mICVkIiwgd2N1ciA8IDEgPyAxIDogd2N1ciwgd3Nsb3RuKTsKLSAgICAgICAg ICAgICAgICAgIGZsYWcgPSAxOwotICAgICAgICAgICAgICAgICAgb2xkd2luID0gd2N1cjsKLSAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZsYWcpIHsKLSAgICAgICAgICAgICAgICBL dWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19XUywgKGxvbmcpIHdz ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZXJyb3JzID0gcmV0cmFucyAr IGNydW5jaGVkICsgdGltZW91dHM7Ci0gICAgICAgIGlmIChlcnJvcnMgIT0gb2xkdHJ5KSB7ICAg ICAgICAgLyogUmV0cnkgY291bnQsIGlmIGNoYW5nZWQgKi8KLSAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BSLCAobG9uZykgZXJyb3JzICk7 Ci0gICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7Ci0gICAgICAgIH0KLQkvKiBTZW5kZXIncyBw YWNrZXQgdHlwZSAqLwotICAgICAgICBpZiAoIWZ0cCAmJiAoYyAhPSBvbGR0eXAgJiYgYyAhPSAn WScgJiYgYyAhPSAnTicpKSB7Ci0gICAgICAgICAgICBjaGFyIHR5cGVbMl07Ci0gICAgICAgICAg ICBzcHJpbnRmKHR5cGUsICIlYyIsYyk7Ci0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJ X0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QVCwgKGxvbmcpIHR5cGUgKTsKLSAgICAgICAgICAg IG9sZHR5cCA9IGM7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChjKSB7ICAgICAgICAgICAg ICAgICAgICAvKiBOb3cgaGFuZGxlIHNwZWNpZmljIHBhY2tldCB0eXBlcyAqLwotICAgICAgICAg IGNhc2UgJ1MnOiAgICAgICAgICAgICAgICAgICAgIC8qIEJlZ2lubmluZyBvZiB0cmFuc2ZlciAq LwotICAgICAgICAgICAgZmNudCA9IGZieXQgPSAwTDsgICAgICAgICAgIC8qIENsZWFyIGNvdW50 ZXJzICovCi0jaWZkZWYgR0ZUSU1FUgotICAgICAgICAgICAgZ3R2ID0gLTEuMDsKLSNlbHNlIC8q IEdGVElNRVIgKi8KLSAgICAgICAgICAgIGd0diA9IC0xTDsgICAgICAgICAgICAgICAgICAvKiBB bmQgb2xkL25ldyB0aGluZ3MuLi4gKi8KLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgICAgICAg ICBvbGRwY3QgPSBwY3QgPSAwTDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2Fz ZSAnWic6ICAgICAgICAgICAgICAgICAgICAgLyogb3IgRU9GICovCi0gICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJzY3JlZW5nIFNDUl9QVCBaIHBrdG51bSIsIiIsbik7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJzY3JlZW5nIFNDUl9QVCBaIG9sZHBjdCIsIiIsb2xkcGN0KTsKLSAgICAgICAgICAg IGRlYnVnKEYxMDEsInNjcmVlbmcgU0NSX1BUIFogcGN0IiwiIixwY3QpOwotICAgICAgICAgIGNh c2UgJ0QnOiAgICAgICAgICAgICAgICAgICAgIC8qIERhdGEgcGFja2V0ICovCi0gICAgICAgICAg ICBpZiAoZnNpeiA+IDBMKSB7ICAgICAgICAgICAgLyogU2hvdyBwZXJjZW50IGRvbmUgaWYga25v d24gKi8KLSAgICAgICAgICAgICAgICBvbGRwY3QgPSBwY3Q7ICAgICAgICAgICAvKiBSZW1lbWJl ciBwcmV2aW91cyBwZXJjZW50ICovCi0gICAgICAgICAgICAgICAgaG93ZmFyID0gZmZjOwotI2lm ZGVmIENLX1JFU0VORAotICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5EKQkvKiBBY2Nv dW50IGZvciBQU0VORCBvciBSRVNFTkQgKi8KLSAgICAgICAgICAgICAgICAgIGhvd2ZhciArPSBz ZW5kc3RhcnQ7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikKLSAgICAg ICAgICAgICAgICAgIGhvd2ZhciArPSByc19sZW47Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0g ICAgICAgICAgICAgICAgLyogUGVyY2VudCBkb25lLCB0byBiZSBkaXNwbGF5ZWQuLi4gKi8KLSAg ICAgICAgICAgICAgICBpZiAoYyA9PSAnWicpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFk aXNjYXJkICYmICFjeHNlZW4gJiYgIWN6c2VlbikgcGN0ID0gMTAwTDsKLSAgICAgICAgICAgICAg ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgIHBjdCA9IChmc2l6ID4gOTlMKSA/IChob3dmYXIg LyAoZnNpeiAvIDEwMEwpKSA6IDBMOwotICAgICAgICAgICAgICAgIGlmIChwY3QgPiAxMDBMIHx8 ICAgICAgIC8qIEFsbG93IGZvciBleHBhbnNpb24gYW5kICovCi0gICAgICAgICAgICAgICAgICAg KG9sZHBjdCA9PSA5OUwgJiYgcGN0IDwgMEwpKSAvKiBvdGhlciBib3VuZGFyeSBjb25kaXRpb25z ICovCi0gICAgICAgICAgICAgICAgICBwY3QgPSAxMDBMOwotICAgICAgICAgICAgICAgIGlmIChw Y3QgIT0gb2xkcGN0KSAgICAgIC8qIE9ubHkgZG8gdGhpcyAxMDAgdGltZXMgcGVyIGZpbGUgKi8K LSAgICAgICAgICAgICAgICAgIHVwZHBjdChvbGRwY3QsIHBjdCk7Ci0gICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAo bG9uZykgQ1dfRkZDLCAobG9uZykgZmZjKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgaG93 ZmFyKTsKLSAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7 Ci0gICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zh cik7ICovCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgJyUnOiAgICAgICAg ICAgICAgICAgICAgIC8qIFRpbWVvdXRzLCByZXRyYW5zbWlzc2lvbnMgKi8KLSAgICAgICAgICAg IGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7Ci0gICAgICAgICAgICAvKiBv bGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCi0KLSAgICAgICAg ICAgIGVycm9ycyA9IHJldHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOwotICAgICAgICAgICAg aWYgKGVycm9ycyAhPSBvbGR0cnkpIHsgICAgIC8qIEVycm9yIGNvdW50LCBpZiBjaGFuZ2VkICov Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1BSLAotCQkJICAgICAgIChsb25n KSBlcnJvcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7Ci0gICAgICAgICAgICAgICAg aWYgKHMpIGlmICgqcykgewotICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlf RklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMpOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlICdFJzogICAgICAgICAgICAgICAg ICAgICAvKiBFcnJvciBwYWNrZXQgKi8KLSAgICAgICAgICAgIGlmICgqcykgewotICAgICAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwg KGxvbmcpIHMgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZjbnQgPSBmYnl0ID0gMEw7 ICAgICAgICAgICAvKiBTbyBubyBieXRlcyBmb3IgdGhpcyBmaWxlICovCi0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICBjYXNlICdRJzogICAgICAgICAgICAgICAgICAgICAvKiBDcnVuY2hl ZCBwYWNrZXQgKi8KLSAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhv d2Zhcik7Ci0gICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXos IGhvd2Zhcik7ICovCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZF UiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAobG9uZykgIkRhbWFnZWQgUGFja2V0IgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ3EnOiAg ICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtQyBvciBjb25uZWN0aW9uIGxvc3QgKi8KLSAgICAg ICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAgICAgICAgaWYgKCEqcykgcyA9ICJVc2VyIGlu dGVycnVwdGlvbiBvciBjb25uZWN0aW9uIGxvc3QiOwotICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg Q1dfTVNHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHMKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdU JzogICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0ICovCi0gICAgICAgICAgICBjcHMgPSBz aG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOwotICAgICAgICAgICAgLyogb2xkX3RyID0g c2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLwotICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJUaW1lb3V0 IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGVycm9ycyA9IHJl dHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOwotICAgICAgICAgICAgaWYgKGVycm9ycyAhPSBv bGR0cnkpIHsgICAgIC8qIEVycm9yIGNvdW50LCBpZiBjaGFuZ2VkICovCi0gICAgICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIENXX1BSLCAobG9uZykgZXJyb3JzCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAg ICAgICAgICAgICAgICAvKiBPdGhlcnMsIGRvIG5vdGhpbmcgKi8KLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICB9Ci0jaWZkZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX1NUOiAgICAg ICAgICAgICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVyIHN0YXR1cyAqLwotICAgICAgICBkZWJ1 ZyhGMTAxLCJzY3JlZW5nIFNDUl9TVCBjIiwiIixjKTsKLSAgICAgICAgZGVidWcoRjEwMSwic2Ny ZWVuZyBTQ1JfU1Qgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInNj cmVlbmcgU0NSX1NUIGN4c2VlbiIsIiIsY3hzZWVuKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAg IGlmIChjID09IFNUX09LKSB7ICAgICAgICAgICAgICAgLyogT0ssIHByaW50IDEwMCAlICovCi0g ICAgICAgICAgICBpZiAocGN0bGJsKQotICAgICAgICAgICAgICB1cGRwY3Qob2xkcGN0LDEwMCk7 Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJ TEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBmZmMpOwotICAgICAgICAgICAgcGN0 ID0gMTAwOwotICAgICAgICAgICAgb2xkcGN0ID0gMDsKLSAgICAgICAgfSBlbHNlIGlmIChmc2l6 ID4gMEwpICAgICAgICAgICAvKiBOb3QgT0ssIHVwZGF0ZSBmaW5hbCBwZXJjZW50ICovCi0vKgot ICBUaGUgZWxzZSBwYXJ0IHdyaXRlcyBhbGwgb3ZlciB0aGUgc2NyZWVuIC0tIGhvd2ZhciBhbmQv b3IgZnNpeiBoYXZlCi0gIGJlZW4gcmVzZXQgYXMgYSBjb25zZXF1ZW5jZSBvZiB0aGUgbm90LU9L bmVzcyBvZiB0aGUgdHJhbnNmZXIuCi0qLwotICAgICAgICAgIGlmIChwY3RsYmwpCi0gICAgICAg ICAgICB1cGRwY3Qob2xkcGN0LCAoaG93ZmFyICogMTAwTCkgLyBmc2l6KTsKLSNlbHNlCi0gICAg ICAgIGlmIChjID09IFNUX09LKSB7ICAgICAgICAgICAgICAgLyogT0ssIHByaW50IDEwMCAlICov Ci0gICAgICAgICAgICBpZiAocGN0bGJsKSB7Ci0JCXVwZHBjdChvbGRwY3QsMTAwKTsKLQkgICAg fSBlbHNlCi0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIs IChsb25nKSBDV19GRkMsIChsb25nKSBmZmMpOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAg IHBjdCA9IDEwMDsKLSAgICAgICAgICAgIG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgICAgIEt1aVNldFByb3Bl cnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1RSLCAobG9uZykgIiIgKTsKLQotICAg ICAgICBzd2l0Y2ggKGMpIHsgICAgICAgICAgICAgICAgICAgIC8qIFByaW50IG5ldyBzdGF0dXMg bWVzc2FnZSAqLwotICAgICAgICAgIGNhc2UgU1RfT0s6ICAgICAgICAgICAgICAgICAgIC8qIFRy YW5zZmVyIE9LICovCi0gICAgICAgICAgICBmY250Kys7ICAgICAgICAgICAgICAgICAgICAgLyog Q291bnQgdGhpcyBmaWxlICovCi0JICAgIGlmICh3aGF0ID09IChXX0ZUUHxXX0ZUX0RFTEUpKSB7 Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSAiRGVsZXRlIE9LIgotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotCSAgICB9IGVsc2UgewotCQlmYnl0ICs9IGZmYzsKLSAgICAgICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpICJUcmFuc2ZlciBPSyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLQkgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBT VF9ESVNDOiAgICAgICAgICAgICAgICAgLyogRGlzY2FyZGVkICovCi0gICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIkZpbGUg ZGlzY2FyZGVkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNpZmRlZiBDT01NRU5U Ci0gICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfSU5UOiAgICAgICAgICAgICAg ICAgIC8qIEludGVycnVwdGVkICovCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklM RV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIlRyYW5zZmVyIGludGVycnVwdGVkIgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAg ICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIHJl dHVybjsKLQotICAgICAgICBjYXNlIFNUX1NLSVA6IHsgICAgICAgICAgICAgICAgLyogU2tpcHBl ZCAqLwotICAgICAgICAgICAgY2hhciBlcnJidWZbNjRdIDsKLQkgICAgaWYgKG4gPiAwICYmIG4g PCBuc2tyZWFzb24pCi0gICAgICAgICAgICAgICAgc3ByaW50ZiggZXJyYnVmLCAiRmlsZSBza2lw cGVkLCAoJXMpIiwgc2tyZWFzb25bbl0gKSA7Ci0JICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz cHJpbnRmKCBlcnJidWYsICJGaWxlIHNraXBwZWQiICkgOwotICAgICAgICAgICAgS3VpU2V0UHJv cGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGVycmJ1ZgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBw Y3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIHJldHVy bjsKLSAgICAgICAgfQotICAgICAgICAgIGNhc2UgU1RfRVJSOiAgICAgICAgICAgICAgICAgIC8q IEVycm9yIG1lc3NhZ2UgKi8KLSAgICAgICAgICAgIGlmICghcykgcyA9IChjaGFyICopZXBrdG1z ZzsKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX0VSUiwgKGxvbmcpIHMgKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBwY3QgPSBv bGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIHJldHVybjsKLQot ICAgICAgICAgIGNhc2UgU1RfUkVGVTogICAgICAgICAgICAgICAgIC8qIFJlZnVzZWQgKi8KLSAg ICAgICAgICAgIGlmICgqcykgewotICAgICAgICAgICAgICAgIGNoYXIgZXJyYnVmWzY0XSA7Ci0g ICAgICAgICAgICAgICAgc3ByaW50ZiggZXJyYnVmLCAiUmVmdXNlZCwgJXMiLCBzICkgOwotICAg ICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25nKSBDV19F UlIsKGxvbmcpIGVycmJ1Zik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg IEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX0VSUiwobG9uZykiUmVm dXNlZCIpOwotICAgICAgICAgICAgfQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHBjdCA9 IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgcmV0dXJuOwot Ci0gICAgICAgICAgY2FzZSBTVF9JTkM6Ci0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlf RklMRV9UUkFOU0ZFUiwobG9uZylDV19FUlIsKGxvbmcpIkluY29tcGxldGUiKTsKLSNpZmRlZiBD T01NRU5UCi0gICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfTVNHOgotICAgICAg ICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1dfTVNHLChsb25n KXMpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgZGVmYXVsdDogICAgICAgICAg ICAgICAgICAgICAgLyogQmFkIGNhbGwgKi8KLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpICIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIHN0YXR1cyAqKioiICk7Ci0gICAg ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBTQ1JfVEM6IHsgICAgICAg ICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGNvbXBsZXRlICovCi0gICAgICAgICAgY2hhciBt c2didWZbMTI4XTsKLSAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIs IChsb25nKSBDV19DUCwgdGZjcHMpOwotICAgICAgICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAg ICAgICAgIHNwcmludGYobXNnYnVmLAotICAgICAgICAgICAgICAgICAgICAgICJTVUNDRVNTLiAg RmlsZXM6ICVzLCBCeXRlczogJWxkLCAlbGQgQ1BTIiwKLSAgICAgICAgICAgICAgICAgICAgICBm aWxjbnQgLSBmaWxyZWosCi0gICAgICAgICAgICAgICAgICAgICAgY2tmc3RvYShmYnl0KSwKLSAg ICAgICAgICAgICAgICAgICAgICB0ZmNwcwotICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgbXNnYnVmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgfQotICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19UUiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgaGhtbXNzKChsb25nKQotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChmcHRzZWNzICsgMC41KQotI2Vsc2UKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZWNzCi0jZW5kaWYgLyogR0ZUSU1FUiAq LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7Ci0KLSNpZmRlZiBH RlRJTUVSCi0gICAgICAgICAgb2xkZ3R2ID0gKENLRkxPQVQpIC0xLjA7Ci0jZWxzZQotICAgICAg ICAgIG9sZGd0diA9IC0xTDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSNpZmRlZiBDT01NRU5U Ci0gICAgICAgICAgcGN0ID0gMTAwOyBvbGRwY3QgPSAwOyAgICAgICAgLyogUmVzZXQgdGhlc2Ug Zm9yIG5leHQgdGltZS4gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgb2xkdHlw ID0gMDsgb2xkcnR0ID0gLTFMOyBvbGR0cnkgPSAtMTsgb2xkbGVuID0gLTE7Ci0gICAgICAgICAg b2xkdGltID0gLTE7Ci0gICAgICAgICAgY2VuZHcgPSAxOwotICAgICAgICAgIGlmICh4ZnJiZWwp IGJsZWVwKEJQX05PVEUpOyAgIC8qIENsb3NlIHdpbmRvdywgdGhlbiBiZWVwLiAqLwotICAgICAg ICAgIGZ0X3dpbiA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBjbG9zZWQuICovCi0g ICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgY2FzZSBTQ1JfRU06ICAgICAgICAgICAg ICAgICAgICAgIC8qIEVycm9yIHBhY2tldCAoZmF0YWwpICovCi0gICAgICAgIEt1aVNldFByb3Bl cnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMgKTsKLSAgICAg ICAgaWYgKHhmcmJlbCkgYmxlZXAoQlBfRkFJTCk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICBw Y3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgcmV0dXJuOwot Ci0gICAgICBjYXNlIFNDUl9RRTogICAgICAgICAgICAgICAgICAgICAgLyogUXVhbnRpdHkgZXF1 YWxzICovCi0gICAgICBjYXNlIFNDUl9UVTogICAgICAgICAgICAgICAgICAgICAgLyogVW5kZWxp bWl0ZWQgdGV4dCAqLwotICAgICAgY2FzZSBTQ1JfVE46ICAgICAgICAgICAgICAgICAgICAgIC8q IFRleHQgZGVsaW1pdGVkIGF0IHN0YXJ0ICovCi0gICAgICBjYXNlIFNDUl9UWjogICAgICAgICAg ICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgZW5kICovCi0gICAgICAgIHJldHVybjsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogKGlnbm9yZWQgaW4gZnVsbHNjcmVlbiBkaXNwbGF5 KSAqLwotCi0gICAgICBjYXNlIFNDUl9YRDogICAgICAgICAgICAgICAgICAgICAgLyogWC1wYWNr ZXQgZGF0YSAqLwotICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwotICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICk7Ci0gICAg ICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfQ1c6ICAgICAgICAgICAgICAgICAgICAgIC8q IENsb3NlIFdpbmRvdyAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgcGN0ID0gMTAwOyBvbGRw Y3QgPSAwOyAgICAgICAgICAvKiBSZXNldCB0aGVzZSBmb3IgbmV4dCB0aW1lLiAqLwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSAgICAgICAgb2xkdHlwID0gMDsgb2xkcnR0ID0gLTFMOyBvbGR0cnkg PSAtMTsgb2xkbGVuID0gLTE7Ci0gICAgICAgIG9sZHRpbSA9IC0xOwotCi0gICAgICAgIGZ0X3dp biA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyB0aGF0IHdpbmRvdyBpcyBjbG9zZWQu ICovCi0gICAgICAgIGNlbmR3ID0gMTsgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9DRDogICAg ICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSBjdXJyZW50IGRpcmVjdG9yeSAqLwotICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19ESVIsIChsb25n KSBzICk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBCYWQgY2FsbCAqLwotICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklM RV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKLSAgICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpICIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIGZ1 bmN0aW9uIGNvZGUgKioqIgotICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICByZXR1 cm47Ci0gICAgfQotfQotI2VuZGlmIC8qIEtVSSAqLwotI2VuZGlmIC8qIE1BQyAqLwotCi0jZW5k aWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgQ0tfQ1VSUE9TCi0vKiBEdW1taWVzIGZvciB3aGVu IGN1cnNvciBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgKi8KLWludAotY2tfY3VycG9zKHJvdywg Y29sKSB7Ci0gICAgcmV0dXJuKC0xKTsKLX0KLQotaW50Ci1ja19jbHMoKSB7Ci0gICAgcmV0dXJu KC0xKTsKLX0KLQotaW50Ci1ja19jbGVvbCgpIHsKLSAgICByZXR1cm4oLTEpOwotfQotI2VuZGlm IC8qIENLX0NVUlBPUyAqLwotCi0jaWZuZGVmIE5PSUtTRAotI2lmZGVmIElLU0RCCi0KLXN0cnVj dCBpa3NkYmZsZCBkYmZsZFtdID0gewotICAgLyogT2Zmc2V0ICAgIExlbmd0aCAgICBUeXBlICAg Ki8KLSAgICB7IERCX0ZMQUdTLCBkQl9GTEFHUywgREJUX0hFWCB9LCAgICAvKiAgMCBkYl9GTEFH UyBGbGFncyAqLwotICAgIHsgREJfQVRZUEUsIGRCX0FUWVBFLCBEQlRfSEVYIH0sICAgIC8qICAx IGRiX0FUWVBFIEF1dGggdHlwZSAqLwotICAgIHsgREJfQU1PREUsIGRCX0FNT0RFLCBEQlRfSEVY IH0sICAgIC8qICAzIGRiX0FNT0RFIEF1dGggbW9kZSAqLwotICAgIHsgREJfU1RBVEUsIGRCX1NU QVRFLCBEQlRfSEVYIH0sICAgIC8qICAyIGRiX1NUQVRFIFN0YXRlICovCi0gICAgeyBEQl9NWVBJ RCwgZEJfTVlQSUQsIERCVF9IRVggfSwgICAgLyogIDUgZGJfTVlQSUQgUElEICovCi0gICAgeyBE Ql9TQUREUiwgZEJfU0FERFIsIERCVF9IRVggfSwgICAgLyogIDQgZGJfU0FERFIgU2VydmVyIGFk ZHJlc3MgKi8KLSAgICB7IERCX0NBRERSLCBkQl9DQUREUiwgREJUX0hFWCB9LCAgICAvKiAgNiBk Yl9DQUREUiBDbGllbnQgYWRkcmVzcyAqLwotICAgIHsgREJfU1RBUlQsIGRCX1NUQVJULCBEQlRf REFUIH0sICAgIC8qICA3IGRiX1NUQVJUIFNlc3Npb24gc3RhcnQgKi8KLSAgICB7IERCX0xBU1RV LCBkQl9MQVNUVSwgREJUX0RBVCB9LCAgICAvKiAgOCBkYl9MQVNUVSBMYXN0IHVwZGF0ZSAqLwot ICAgIHsgREJfVUxFTiwgIGRCX1VMRU4sICBEQlRfSEVYIH0sICAgIC8qICA5IGRiX1VMRU4gIFVz ZXJuYW1lIGxlbmd0aCAqLwotICAgIHsgREJfRExFTiwgIGRCX0RMRU4sICBEQlRfSEVYIH0sICAg IC8qIDEwIGRiX0RMRU4gIERpcmVjdG9yeSBuYW1lIGxlbmd0aCAqLwotICAgIHsgREJfSUxFTiwg IGRCX0lMRU4sICBEQlRfSEVYIH0sICAgIC8qIDExIGRiX0lMRU4gIEluZm8gbGVuZ3RoICovCi0g ICAgeyBEQl9QQUQxLCAgZEJfUEFEMSwgIERCVF9VTkQgfSwgICAgLyogMTIgZGJfUEFEMSAgKFJl c2VydmVkKSAqLwotICAgIHsgREJfVVNFUiwgIGRCX1VTRVIsICBEQlRfU1RSIH0sICAgIC8qIDEz IGRiX1VTRVIgIFVzZXJuYW1lICovCi0gICAgeyBEQl9ESVIsICAgZEJfRElSLCAgIERCVF9TVFIg fSwgICAgLyogMTQgZGJfRElSICAgQ3VycmVudCBEaXJlY3RvcnkgKi8KLSAgICB7IERCX0lORk8s ICBkQl9JTkZPLCAgREJUX1NUUiB9ICAgICAvKiAxNSBkYl9JTkZPICBTdGF0ZS1zcGVjaWZpYyBp bmZvICovCi19OwotCi1zdGF0aWMgY2hhciBsY2tuYW1bQ0tNQVhQQVRIKzFdOyAgICAgICAgLyog TG9ja2ZpbGUgcGF0aG5hbWUgKi8KLXN0YXRpYyBjaGFyIHRtcGxja1tDS01BWFBBVEgrMV07ICAg ICAgICAvKiBUZW1wb3JhcnkgbG9ja2ZpbGUgbmFtZSAqLwotCi1zdGF0aWMgY2hhciAqIHVwZG1v ZGUgPSAgICAgICAgICAgICAgICAgLyogVXBkYXRlIG1vZGUgZm9yIGZvcGVuKCkgKi8KLSNpZmRl ZiBPUzIKLSAgInIrYiIKLSNlbHNlCi0jaWZkZWYgVk1TCi0gICJyK2IiCi0jZWxzZQotICAicisi Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gIDsKLQotLyogIEQgQiBJIE4g SSBUICAtLSAgSW5pdGlhbGl6ZSB0aGUgSUtTRCBkYXRhYmFzZS4uLiAgKi8KLQotaW50Ci1kYmlu aXQoKSB7Ci0gICAgZXh0ZXJuIGludCBkYmluaXRlZDsKLSAgICBpbnQgeCA9IDA7Ci0gICAgZGVi dWcoRjExMCwiZGJpbml0IGRiZGlyIDEiLGRiZGlyLDApOwotICAgIGRlYnVnKEYxMTAsImRiaW5p dCBkYmZpbGUgMSIsZGJmaWxlLDApOwotICAgIGlmIChkYmluaXRlZCkKLSAgICAgIHJldHVybigw KTsKLSNpZmRlZiBPUzIKLSAgICBpZiAoIWRiZGlyKSB7Ci0jaWZkZWYgTlQKLSAgICAgICAgY2hh ciAqIHAgPSBOVUxMOwotICAgICAgICBpZiAoIWlzV2luOTUoKSkgewotICAgICAgICAgICAgcCA9 IGdldGVudigiU3lzdGVtUm9vdCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcCA9 IGdldGVudigid2luYm9vdGRpciIpOwotICAgICAgICAgICAgaWYgKCFwKSAgcCA9IGdldGVudigi d2luZGlyIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFwKSBwID0gIkM6LyI7Ci0gICAgICAg IGRiZGlyID0gbWFsbG9jKHN0cmxlbihwKSsyKTsKLSAgICAgICAgc3RyY3B5KGRiZGlyLHApOwkJ Lyogc2FmZSAqLwotICAgICAgICBwID0gZGJkaXI7Ci0gICAgICAgIHdoaWxlICgqcCkgewotICAg ICAgICAgICAgaWYgKCpwID09ICdcXCcpCi0gICAgICAgICAgICAgICpwID0gJy8nOwotICAgICAg ICAgICAgcCsrOwotICAgICAgICB9Ci0gICAgICAgIGlmICgqKHAtMSkgIT0gJy8nICkgewotICAg ICAgICAgICAgKnArKyA9ICcvJzsKLSAgICAgICAgICAgICpwID0gJ1wwJzsKLSAgICAgICAgfQot I2Vsc2UgLyogTlQgKi8KLSAgICAgICAgbWFrZXN0cigmZGJkaXIsIkM6LyIpOwotI2VuZGlmIC8q IE5UICovCi0gICAgfQotI2Vsc2UgLyogT1MyICovCi0gICAgaWYgKCFkYmRpcikKLSAgICAgIG1h a2VzdHIoJmRiZGlyLElLX0RCQVNFRElSKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGlmICgh ZGJmaWxlKSB7Ci0gICAgICAgIGNoYXIgKiBzID0gIiI7Ci0gICAgICAgIHggPSBzdHJsZW4oZGJk aXIpOwotICAgICAgICBpZiAoZGJkaXJbeC0xXSAhPSAnLycpIHsKLSAgICAgICAgICAgIHMgPSAi LyI7Ci0gICAgICAgICAgICB4Kys7Ci0gICAgICAgIH0KLSAgICAgICAgeCArPSAoaW50KXN0cmxl bihJS19EQkFTRUZJTCk7Ci0gICAgICAgIGRiZmlsZSA9IChjaGFyICopbWFsbG9jKHgrMSk7Ci0g ICAgICAgIHNwcmludGYoZGJmaWxlLCIlcyVzJXMiLGRiZGlyLHMsSUtfREJBU0VGSUwpOwotICAg IH0KLSAgICBkZWJ1ZyhGMTEwLCJkYmluaXQgZGJkaXIgMiIsZGJkaXIsMCk7Ci0gICAgZGVidWco RjExMCwiZGJpbml0IGRiZmlsZSAyIixkYmZpbGUsMCk7Ci0gICAgbXlwaWQgPSBnZXRwaWQoKTsg ICAgICAgICAgICAgICAgICAgLyogR2V0IG15IHBpZCAqLwotICAgIGRlYnVnKEYxMDEsImRiaW5p dCBteXBpZCIsIiIsbXlwaWQpOwotCi0gICAgaWYgKCFteWhleGlwWzBdKSB7ICAgICAgICAgICAg ICAgICAgLyogU2V0IG15IGhleCBJUCBhZGRyZXNzICovCi0jaWZkZWYgVENQU09DS0VUCi0gICAg ICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIG15eGlwYWRkcjsKLSAgICAgICAgaWYgKGdldGxvY2Fs aXBhZGRyKCkgPiAtMSkgewotICAgICAgICAgICAgbXlpcCA9IG15eGlwYWRkcjsKLSAgICAgICAg ICAgIHNwcmludGYobXloZXhpcCwiJTA4bHgiLG15aXApOyAvKiAoTmVlZHMgZml4aW5nIGZvciBJ UHY2KSAqLwotICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSAgICAgICAg ICBja3N0cm5jcHkobXloZXhpcCwiMDAwMDAwMDAiLDkpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEx LCJkYmluaXQgbXlpcCIsbXloZXhpcCxteWlwKTsKLSAgICBpZiAoIXBlZXJoZXhpcFswXSkgeyAg ICAgICAgICAgICAgICAvKiBHZXQgcGVlcidzICBoZXggSVAgYWRkcmVzcyAqLwotI2lmZGVmIFRD UFNPQ0tFVAotICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBwZWVyeGlwYWRkcjsKLSAgICAg ICAgaWYgKGNrZ2V0cGVlcigpKSB7Ci0gICAgICAgICAgICBwZWVyaXAgPSBwZWVyeGlwYWRkcjsK LSAgICAgICAgICAgIHNwcmludGYocGVlcmhleGlwLCIlMDhseCIscGVlcmlwKTsgLyogKE5lZWRz IGZpeGluZyBmb3IgSVB2NikgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImRiaW5pdCBwZWVy aXAiLHBlZXJoZXhpcCxwZWVyaXApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVi dWcoRjEwMSwiZGJpbml0IGNrZ2V0cGVlciBmYWlsdXJlIiwiIixlcnJubyk7Ci0gICAgICAgICAg ICBja3N0cm5jcHkocGVlcmhleGlwLCIwMDAwMDAwMCIsOSk7Ci0gICAgICAgIH0KLSNlbHNlCi0g ICAgICAgIGNrc3RybmNweShwZWVyaGV4aXAsIjAwMDAwMDAwIiw5KTsKLSNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KLSAgICB9Ci0gICAgZGVidWcoRjExMSwiZGJpbml0IHBlZXJpcCIscGVlcmhleGlw LHBlZXJpcCk7Ci0gICAgZGVidWcoRjEwMSwiZGJpbml0IGRiZW5hYmxlZCIsIiIsZGJlbmFibGVk KTsKLSAgICBpZiAoZGJlbmFibGVkICYmIGluc2VydmVyKSB7Ci0gICAgICAgIG15ZGJzbG90ID0g Z2V0c2xvdCgpOwotICAgICAgICBkZWJ1ZyhGMTExLCJkYmluaXQgZ2V0c2xvdCIsY2tpdG9hKGlr ZGJvcGVuKSx4KTsKLSAgICAgICAgaWYgKGlrZGJvcGVuKSBkYmluaXRlZCA9IDE7Ci0gICAgfQot ICAgIHJldHVybigwKTsKLX0KLQotLyogIFUgUCBEIFMgTCBPIFQgIC0tICBVcGRhdGUgc2xvdCBu ICAqLwotCi0vKgotICBPcGVucyB0aGUgZGF0YWJhc2UgaWYgbmVjZXNzYXJ5LCBzZWVrcyB0byBz bG90IG4sIHdyaXRlcyBjdXJyZW50IHJlY29yZAotICBhbmQgYWRkcyBjdXJyZW50IHRpbWUgdG8g bGFzdC11cGRhdGUgZmllbGQuICBuIGlzIHRoZSByZWNvcmQgc2VxdWVuY2UgbnVtYmVyCi0gICgw LCAxLCAyLCAuLi4pLCBub3QgdGhlIHNlZWsgcG9pbnRlci4gICBSZXR1cm5zIC0xIG9uIGZhaWx1 cmUsIDAgb24gc3VjY2Vzcy4KLSovCi1pbnQKLXVwZHNsb3QobikgaW50IG47IHsgICAgICAgICAg ICAgICAgICAgICAvKiBVcGRhdGUgb3VyIHNsb3QgKi8KLSAgICBpbnQgcmMgPSAwOwotICAgIENL X09GRl9UIHBvc2l0aW9uOwotCi0gICAgZGVidWcoRjExMSwidXBkc2xvdCIsImlrZGJvcGVuIixp a2Rib3Blbik7Ci0gICAgaWYgKCFpa2Rib3BlbikgICAgICAgICAgICAgICAgICAgICAgLyogTm90 IGlmIG5vdCBvayAqLwotICAgICAgcmV0dXJuKDApOwotICAgIGlmICghZGJmcCkgeyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE9wZW4gZGF0YWJhc2UgaWYgbm90IG9wZW4gKi8KLSAgICAgICAg ZGJmcCA9IGZvcGVuKGRiZmlsZSx1cGRtb2RlKTsgICAvKiBJbiB1cGRhdGUgbm8tdHJ1bmNhdGUg bW9kZSAqLwotICAgICAgICBpZiAoIWRiZnApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInVw ZHNsb3QgZm9wZW4gZmFpbGVkIixkYmZpbGUsMCk7Ci0gICAgICAgICAgICBpa2Rib3BlbiA9IDA7 Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgfQotICAgIC8qIGRlYnVn KEYxMTEsInVwZHNsb3QgZGJmaWxlIixkYmZpbGUsZGJmcCk7ICovCi0gICAgcG9zaXRpb24gPSBu ICogREJfUkVDTDsKLSAgICBpZiAoQ0tGU0VFSyhkYmZwLHBvc2l0aW9uLDApIDwgMCkgewkvKiBT ZWVrIHRvIGRlc2lyZWQgc2xvdCAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJ1cGRzbG90IGZzZWVr IGZhaWxlZCIsZGJmaWxlLG15ZGJzZWVrKTsKLSAgICAgICAgaWtkYm9wZW4gPSAwOwotICAgICAg ICByYyA9IC0xOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIFVwZGF0ZSB0aGUgdXBkYXRlIHRp bWUgKi8KLSAgICAgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfTEFTVFVdLm9mZl0sCi0gICAg ICAgICAgICAgICAgY2tkYXRlKCksCi0gICAgICAgICAgICAgICAgZGJmbGRbZGJfTEFTVFVdLmxl bgotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIGlmIChmd3JpdGUoZGJyZWMsMSxEQl9SRUNM LGRiZnApIDwgREJfUkVDTCkgeyAvKiBXcml0ZSB0aGUgcmVjb3JkICovCi0gICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJ1cGRzbG90IGZ3cml0ZSBmYWlsZWQiLGRiZmlsZSwwKTsKLSAgICAgICAgICAg IGlrZGJvcGVuID0gMDsKLSAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgICAgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogRmx1c2ggdGhlIHdyaXRlICovCi0gICAgICAgICAgICBm Zmx1c2goZGJmcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotLyog IEkgTiBJIFQgUyBMIE8gVCAtLSAgSW5pdGlhbGl6ZSBzbG90IG4gd2l0aCBteSBpbmZvICAqLwot Ci1pbnQKLWluaXRzbG90KG4pIGludCBuOyB7ICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFs aXplIHNsb3QgKi8KLSAgICBpbnQgazsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBleHRlcm4gdW5z aWduZWQgbG9uZyBwZWVyeGlwYWRkcjsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotICAgIGRl YnVnKEYxMDEsImluaXRzbG90IiwiIixuKTsKLQotI2lmZGVmIFVTRV9NRU1DUFkKLSAgICBtZW1z ZXQoZGJyZWMsMzIsREJfUkVDTCk7Ci0jZWxzZQotICAgIGZvciAoayA9IDA7IGsgPCBEQl9SRUNM OyBrKyspCi0gICAgICBkYnJlY1trXSA9ICdcMDQwJzsKLSNlbmRpZiAvKiBVU0VfTUVNQ1BZICov Ci0KLSAgICBteWZsYWdzID0gREJGX0lOVVNFOyAgICAgICAgICAgICAgICAvKiBTZXQgaW4tdXNl IGZsYWcgKi8KLSAgICBteXN0YXRlID0gV19OT1RISU5HOwotICAgIG15YXR5cGUgPSAwTDsKLSAg ICBteWFtb2RlID0gMEw7Ci0KLSAgICBrID0gZGJmbGRbZGJfRkxBR1NdLmxlbjsgICAgICAgICAg ICAvKiBMZW5ndGggb2YgZmxhZ3MgZmllbGQgKi8KLSAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtk Yl9GTEFHU10ub2ZmXSx1bG9uZ3RvaGV4KG15ZmxhZ3Msayksayk7Ci0KLSAgICBrID0gZGJmbGRb ZGJfQVRZUEVdLmxlbjsKLSAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9BVFlQRV0ub2ZmXSx1 bG9uZ3RvaGV4KG15YXR5cGUsayksayk7Ci0KLSAgICBrID0gZGJmbGRbZGJfQU1PREVdLmxlbjsK LSAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9BTU9ERV0ub2ZmXSx1bG9uZ3RvaGV4KG15YW1v ZGUsayksayk7Ci0KLSAgICBrID0gZGJmbGRbZGJfU1RBVEVdLmxlbjsKLSAgICBzdHJuY3B5KCZk YnJlY1tkYmZsZFtkYl9TVEFURV0ub2ZmXSx1bG9uZ3RvaGV4KG15c3RhdGUsayksayk7Ci0KLSAg ICBrID0gZGJmbGRbZGJfU0FERFJdLmxlbjsKLSAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9T QUREUl0ub2ZmXSx1bG9uZ3RvaGV4KG15aXAsayksayk7Ci0KLSNpZmRlZiBUQ1BTT0NLRVQKLSAg ICBja2dldHBlZXIoKTsKLSAgICBrID0gZGJmbGRbZGJfQ0FERFJdLmxlbjsKLSAgICBzdHJuY3B5 KCZkYnJlY1tkYmZsZFtkYl9DQUREUl0ub2ZmXSx1bG9uZ3RvaGV4KHBlZXJ4aXBhZGRyLGspLGsp OwotI2Vsc2UKLSAgICBrID0gZGJmbGRbZGJfQ0FERFJdLmxlbjsKLSAgICBzdHJuY3B5KCZkYnJl Y1tkYmZsZFtkYl9DQUREUl0ub2ZmXSx1bG9uZ3RvaGV4KDBMLGspLGspOwotI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLwotCi0gICAgayA9IGRiZmxkW2RiX01ZUElEXS5sZW47Ci0gICAgc3RybmNweSgm ZGJyZWNbZGJmbGRbZGJfTVlQSURdLm9mZl0sdWxvbmd0b2hleChteXBpZCxrKSxrKTsKLQotICAg IGsgPSBkYmZsZFtkYl9TVEFSVF0ubGVuOwotICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX1NU QVJUXS5vZmZdLGNrZGF0ZSgpLGspOwotCi0gICAgayA9IGRiZmxkW2RiX1VMRU5dLmxlbjsKLSAg ICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9VTEVOXS5vZmZdLCIwMDAwIiw0KTsKLQotICAgIGsg PSBkYmZsZFtkYl9ETEVOXS5sZW47Ci0gICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfRExFTl0u b2ZmXSwiMDAwMCIsNCk7Ci0KLSAgICBrID0gZGJmbGRbZGJfSUxFTl0ubGVuOwotICAgIHN0cm5j cHkoJmRicmVjW2RiZmxkW2RiX0lMRU5dLm9mZl0sIjAwMDAiLDQpOwotCi0gICAgc3RybmNweSgm ZGJyZWNbZGJmbGRbZGJfSU5GT10ub2ZmXSwiSU5JVCIsNCk7Ci0gICAgcmV0dXJuKHVwZHNsb3Qo bikpOwotfQotCi1pbnQKLXNsb3RzdGF0ZSh4LHMxLHMyLHMzKSBpbnQgeDsgY2hhciAqczEsICpz MiwgKnMzOyB7Ci0gICAgaW50IGssIGwxLCBsMiwgbDMsIHo7Ci0gICAgbXlzdGF0ZSA9IHg7Ci0g ICAgZGVidWcoRjEwMSwic2xvdHN0YXRlIGlrZGJvcGVuIiwiIixpa2Rib3Blbik7Ci0gICAgaWYg KCFpa2Rib3BlbikKLSAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKCFzMSkgczEgPSAiIjsKLSAg ICBsMSA9IHN0cmxlbihzMSk7Ci0gICAgaWYgKCFzMikgczIgPSAiIjsKLSAgICBsMiA9IHN0cmxl bihzMik7Ci0gICAgaWYgKCFzMykgczMgPSAiIjsKLSAgICBsMyA9IHN0cmxlbihzMyk7Ci0gICAg c3RybmNweSgmZGJyZWNbREJfU1RBVEVdLHVsb25ndG9oZXgobXlzdGF0ZSw0KSw0KTsKLSAgICBr ID0gZGJmbGRbZGJfSUxFTl0ubGVuOwotICAgIHogPSBsMSArIGwyICsgbDMgKyAyOwotICAgIGlm ICh6ID4gZEJfSU5GTykKLSAgICAgIHogPSBkQl9JTkZPOwotICAgIHN0cm5jcHkoJmRicmVjW0RC X0lMRU5dLHVsb25ndG9oZXgoKHVuc2lnbmVkIGxvbmcpeixrKSxrKTsKLSAgICBrID0gZGJmbGRb ZGJfSU5GT10ubGVuOwotICAgIHogPSBkYmZsZFtkYl9JTkZPXS5vZmY7Ci0gICAgaWYgKGwxIDw9 IGspIHsKLSAgICAgICAgbHNldCgmZGJyZWNbel0sczEsbDErMSwzMik7Ci0gICAgICAgIHogKz0g bDErMTsKLSAgICAgICAgayAtPSBsMSsxOwotICAgICAgICBpZiAobDIgPD0gaykgewotICAgICAg ICAgICAgbHNldCgmZGJyZWNbel0sczIsbDIrMSwzMik7Ci0gICAgICAgICAgICB6ICs9IGwyKzE7 Ci0gICAgICAgICAgICBrIC09IGwyKzE7Ci0gICAgICAgICAgICBpZiAobDMgPD0gaykKLSAgICAg ICAgICAgICAgbHNldCgmZGJyZWNbel0sczMsaywzMik7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWZk ZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgIGNoYXIgYnVmWzEyOF07Ci0gICAg ICAgIGludCBpOwotICAgICAgICBzdHJuY3B5KGJ1ZiwmZGJyZWNbREJfSU5GT10sMTI3KTsKLSAg ICAgICAgYnVmWzEyN10gPSBOVUw7Ci0gICAgICAgIGZvciAoaSA9IDEyNjsgaSA+IDAgJiYgYnVm W2ldID09IDMyOyBpLS0pIGJ1ZltpXSA9IDA7Ci0gICAgICAgIGRlYnVnKEYxMTEsInNsb3RzdGF0 ZSIsYnVmLG15c3RhdGUpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHogPSB1cGRz bG90KG15ZGJzbG90KTsKLSAgICBkZWJ1ZyhGMTAxLCJzbG90c3RhdGUgdXBkc2xvdCIsIiIseik7 Ci0gICAgcmV0dXJuKHopOwotfQotCi1pbnQKLXNsb3RkaXIoczEsczIpIGNoYXIgKiBzMSwgKiBz MjsgeyAgICAgICAvKiBVcGRhdGUgY3VycmVudCBkaXJlY3RvcnkgKi8KLSAgICBpbnQgaywgbGVu MSwgbGVuMjsKLSAgICBpZiAoIWlrZGJvcGVuKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBpZiAo IXMxKSBzMSA9ICIiOwotICAgIGlmICghczIpIHMyID0gIiI7Ci0gICAgbGVuMSA9IHN0cmxlbihz MSk7Ci0gICAgbGVuMiA9IHN0cmxlbihzMik7Ci0gICAgayA9IGRiZmxkW2RiX0RMRU5dLmxlbjsK LSAgICBzdHJuY3B5KCZkYnJlY1tEQl9ETEVOXSx1bG9uZ3RvaGV4KCh1bnNpZ25lZCBsb25nKShs ZW4xK2xlbjIpLGspLGspOwotICAgIGsgPSBkYmZsZFtkYl9ESVJdLmxlbjsKLSAgICBpZiAobGVu MSA+IDApIHsKLSAgICAgICAgbHNldCgmZGJyZWNbZGJmbGRbZGJfRElSXS5vZmZdLHMxLGxlbjEs MzIpOwotICAgICAgICBsc2V0KCZkYnJlY1tkYmZsZFtkYl9ESVJdLm9mZitsZW4xXSxzMixrLWxl bjEsMzIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxzZXQoJmRicmVjW2RiZmxkW2RiX0RJUl0u b2ZmXSxzMixrLDMyKTsKLSAgICB9Ci0gICAgcmV0dXJuKHVwZHNsb3QobXlkYnNsb3QpKTsKLX0K LQotLyogIEYgUiBFIEUgUyBMIE8gVCAgLS0gIEZyZWUgc2xvdCBuICAqLwotCi1pbnQKLWZyZWVz bG90KG4pIGludCBuOyB7Ci0gICAgaW50IGs7Ci0gICAgaWYgKCFpa2Rib3BlbikKLSAgICAgIHJl dHVybigwKTsKLSAgICBkYmZsYWdzID0gMEw7Ci0gICAgaWYgKG4gPT0gbXlkYnNsb3QpIHsKLSAg ICAgICAgZGJmbGFncyA9IG15ZmxhZ3MgJiB+REJGX0lOVVNFOwotICAgICAgICBkYmZsYWdzICY9 IH5EQkZfTE9HR0VEOwotICAgIH0KLSAgICBrID0gZGJmbGRbZGJfRkxBR1NdLmxlbjsKLSAgICBz dHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9GTEFHU10ub2ZmXSx1bG9uZ3RvaGV4KGRiZmxhZ3Msayks ayk7Ci0gICAgcmV0dXJuKHVwZHNsb3QobikpOwotfQotCi0vKiAgRyBFIFQgUyBMIE8gVCAgLS0g IEZpbmQgYSBmcmVlIGRhdGFiYXNlIHNsb3Q7IHJldHVybnMgc2xvdCBudW1iZXIgICovCi0KLSNp ZmRlZiBVTklYCi0jaW5jbHVkZSA8ZmNudGwuaD4JCQkvKiBGb3IgY3JlYXQoKSAqLwotI2VuZGlm CS8qIFVOSVggKi8KLQotaW50Ci1nZXRzbG90KCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRmluZCBhIGZyZWUgc2xvdCBmb3IgdXMgKi8KLSAgICBGSUxFICogcmZwID0gTlVMTDsg ICAgICAgICAgICAgICAgICAvKiBSZXR1cm5zIHNsb3QgbnVtYmVyICgwLCAxLCAuLi4pICovCi0g ICAgY2hhciBpZHN0cmluZ1s2NF07ICAgICAgICAgICAgICAgICAgLyogUElEIHN0cmluZyBidWZm ZXIgKGRlY2ltYWwpICovCi0gICAgY2hhciBwaWRidWZbNjRdLCAqIHM7Ci0gICAgaW50IGosIGss IG4sIHgsIHJjID0gLTE7Ci0gICAgaW50IGxvY2tmZCwgdHJpZXMsIGhhdmVzbG90ID0gMDsKLSAg ICBsb25nIGxvY2twaWQ7Ci0gICAgQ0tfT0ZGX1QgaTsKLSAgICAvKiBjaGFyIGlwYnVmWzE3XTsg Ki8KLQotICAgIGlmICghbXloZXhpcFswXSkgICAgICAgICAgICAgICAgICAgIC8qIFNldCBteSBo ZXggSVAgYWRkcmVzcyBpZiBub3Qgc2V0ICovCi0gICAgICBja3N0cm5jcHkoKGNoYXIgKilteWhl eGlwLCI3RjAwMDAwMSIsMzMpOwotICAgIHNwcmludGYoaWRzdHJpbmcsIiUwOGx4OiUwMTBsZFxu IixteWlwLG15cGlkKTsKLSAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGlkc3RyaW5nIiwgaWRzdHJp bmcsIDApOwotCi0gICAgLyogTWFrZSB0ZW1wb3JhcnkgbG9ja2ZpbGUgbmFtZSBJUC5QSUQgKGhl eC5oZXgpICovCi0gICAgLyogVGhpcyBzaG91bGQgZml0IGluIDE0IGNoYXJzIC0tIGh1Z2UgUElE cyBhcmUgdXN1YWxseSBub3QgcG9zc2libGUgKi8KLSAgICAvKiBvbiAxNC1jaGFyIGZpbGVuYW1l IHN5c3RlbXMuICovCi0KLSAgICBzcHJpbnRmKHRtcGxjaywiJXMlMDhseC4lbHgiLGRiZGlyLG15 aXAsbXlwaWQpOwotICAgIGRlYnVnKEYxMTAsImdldHNsb3QgdGVtcGZpbGUiLHRtcGxjaywwKTsK LQotICAgIC8qIE1ha2UgYSB0ZW1wb3JhcnkgZmlsZSAqLwotCi0gICAgbG9ja2ZkID0gY3JlYXQo dG1wbGNrLCAwNjAwKTsJLyogQlVUIFRISVMgSVNOJ1QgUE9SVEFCTEUgKi8KLSAgICBpZiAobG9j a2ZkIDwgMCkgewotICAgICAgICBkZWJ1ZyhGMTExLCJnZXRzbG9jayB0ZW1wIGxvY2tmaWxlIGNy ZWF0ZSBmYWlsdXJlIiwgdG1wbGNrLCBlcnJubyk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAg fQotICAgIC8qIFdyaXRlIG15IChkZWNpbWFsKSBQSUQgaW50byB0aGUgdGVtcCBmaWxlICovCi0K LSAgICB3cml0ZShsb2NrZmQsaWRzdHJpbmcsKGludClzdHJsZW4oaWRzdHJpbmcpKTsKLSAgICBp ZiAoY2xvc2UobG9ja2ZkKSA8IDApIHsgICAgICAgICAgICAvKiBDbG9zZSBsb2NrZmlsZSAqLwot ICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGVycm9yIGNsb3NpbmcgdGVtcCBsb2NrZmlsZSIs ICIiLCBlcnJubyk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIHNwcmludGYobGNr bmFtLCIlcyVzIixkYmRpcixJS19MT0NLRklMRSk7IC8qIEJ1aWxkIGxvY2tmaWxlIG5hbWUgKi8K LSAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGxvY2tmaWxlIixsY2tuYW0sMCk7Ci0KLSAgICByZnAg PSBmb3BlbihsY2tuYW0sInIiKTsgICAgICAgICAgICAvKiBTZWUgaWYgbG9ja2ZpbGUgZXhpc3Rz ICovCi0gICAgaWYgKHJmcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgc28uLi4g Ki8KLSAgICAgICAgcnNldChwaWRidWYsIiIsNjQsMCk7Ci0gICAgICAgIHggPSBmcmVhZChwaWRi dWYsMSw2MyxyZnApOyAgICAgLyogUmVhZCBJRCBzdHJpbmcgZnJvbSBpdCAqLwotICAgICAgICBm Y2xvc2UocmZwKTsgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBjbG9zZSBpdCBxdWlja2x5ICov Ci0gICAgICAgIGRlYnVnKEYxMTAsImdldHNsb3QgbG9jayBleGlzdHMiLHBpZGJ1ZiwwKTsKLSAg ICAgICAgaWYgKHggPiAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIGEgUElE LCBjaGVjayBpdCAqLwotICAgICAgICAgICAgY2hhciAqIHMgPSBwaWRidWY7Ci0gICAgICAgICAg ICB3aGlsZSAoKnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNsb3dlcigqcykpICpzID0gdG91 cHBlcigqcyk7Ci0gICAgICAgICAgICAgICAgaWYgKCpzID09ICc6JykgewotICAgICAgICAgICAg ICAgICAgICAqcyA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZ2V0c2xv dCBsb2NrIElQIixwaWRidWYsMCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImd0 ZXNsb3QgbXkgICBJUCIsbXloZXhpcCwwKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJj bXAocGlkYnVmLG15aGV4aXApKSB7IC8qIFNhbWUgSVAgYWRkcmVzcz8gKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgIGxvY2twaWQgPSBhdG9sKHMrMSk7IC8qIFllcywgbm93IGdldCBQSUQgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgbG9ja3BpZCIsIiIs bG9ja3BpZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGlmIFBJRCBsb2Nr cGlkIG9uIHRoaXMgY29tcHV0ZXIgaXMgYWxpdmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg IHggPSB6Y2hrcGlkKGxvY2twaWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF4KSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiZ2V0c2xvdCBQSUQgc3Rh bGUscmVtb3ZpbmcgbG9jayIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5s aW5rKGxja25hbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTExLCJnZXRzbG90IGxvY2tmaWxlIG9wZW4gZmFpbHVyZSIsbGNr bmFtLGVycm5vKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBUcnkgSUtfTENLVFJJRVMgKDE2 KSB0aW1lcyB0byByZW5hbWUgdGVtcCBmaWxlIHRvIGxvY2tmaWxlICovCi0KLSAgICBmb3IgKHRy aWVzID0gSUtfTENLVFJJRVM7IHRyaWVzID4gMDsgdHJpZXMtLSkgewotICAgICAgICBpZiAoenJl bmFtZSh0bXBsY2ssbGNrbmFtKSA9PSAwKQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWJ1 ZyhGMTAxLCJnZXRzbG90IGRhdGFiYXNlIGxvY2tlZCBieSBwaWQiLCAiIiwgZGJwaWQpOwotICAg ICAgICBzbGVlcChJS19MQ0tTTEVFUCk7Ci0gICAgfQotICAgIGlmICh0cmllcyA8IDEpIHsgICAg ICAgICAgICAgICAgICAgIC8qIENvdWxkbid0ICovCi0gICAgICAgIGRlYnVnKEYxMTAsImdldHNs b3QgY3JlYXRlIGxvY2sgZmFpbHVyZSIsbGNrbmFtLDApOwotICAgICAgICByZXR1cm4oLTEpOwot ICAgIH0KLSAgICAvKiBIYXZlIGxvY2ssIG9wZW4gZGF0YWJhc2UgKi8KLQotICAgIGRlYnVnKEYx MTAsImdldHNsb3QgaGFzIGxvY2siLGxja25hbSwwKTsgLyogSGF2ZSBsb2NrICovCi0KLSAgICBp ZiAoIWRiZmlsZSkKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICAvKiBJZiBkYXRhYmFzZSBkb2Vz bid0IGV4aXN0LCBjcmVhdGUgaXQuICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGRiZmls ZSIsZGJmaWxlLDApOwotICAgIGlmICh6Y2hraShkYmZpbGUpIDwgMCkgewotICAgICAgICBkZWJ1 ZyhGMTEwLCJnZXRzbG90IGNyZWF0aW5nIG5ldyBkYXRhYmFzZSIsZGJmaWxlLDApOwotICAgICAg ICB4ID0gY3JlYXQoZGJmaWxlLDA2NjApOwotICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAg ICAgIGRlYnVnKEYxMTEsImdldHNsb3QgY3JlYXQoKSBmYWlsZWQiLCBkYmZpbGUsIGVycm5vKTsK LSAgICAgICAgICAgIGdvdG8geHNsb3Q7Ci0gICAgICAgIH0KLSAgICAgICAgY2xvc2UoeCk7Ci0g ICAgfQotICAgIGRiZnAgPSBmb3BlbihkYmZpbGUsdXBkbW9kZSk7ICAgICAgIC8qIE9wZW4gaXQg aW4gdXBkYXRlIG1vZGUgKi8KLSAgICBpZiAoIWRiZnApIHsKLSAgICAgICAgZGVidWcoRjExMSwi Z2V0c2xvdCBmb3BlbiBmYWlsZWQiLGRiZmlsZSxlcnJubyk7Ci0gICAgICAgIGdvdG8geHNsb3Q7 Ci0gICAgfQotICAgIC8qIE5vdyBmaW5kIGEgZnJlZSAob3IgbmV3KSBzbG90Li4uICovCi0KLSAg ICBkYmxhc3R1c2VkID0gMEw7ICAgICAgICAgICAgICAgICAgICAvKiBTZWVrIHBvaW50ZXIgdG8g bGFzdCByZWNvcmQgaW51c2UgKi8KLSAgICBteWRic2VlayA9IDBMOyAgICAgICAgICAgICAgICAg ICAgICAvKiBTZWVrIHBvaW50ZXIgZm9yIG15IHJlY29yZCAqLwotCi0gICAgLyogUXVpY2tseSBy ZWFkIHRoZSB3aG9sZSBkYXRhYmFzZTsgbiA9IHJlY29yZCBjb3VudGVyLCBpID0gc2VlayBwb2lu dGVyICovCi0KLSAgICBmb3IgKG4gPSAwLCBpID0gMDsgIWZlb2YoZGJmcCk7IGkgKz0gREJfUkVD TCwgbisrKSB7Ci0gICAgICAgIHggPSBmcmVhZChkYnJlYywxLERCX1JFQ0wsZGJmcCk7IC8qIFJl YWQgYSByZWNvcmQgKi8KLSAgICAgICAgaWYgKHggPCAxKSAgICAgICAgICAgICAgICAgICAgICAv KiBFT0Ygbm90IGNhdWdodCBieSBmZW9mKCkgKi8KLSAgICAgICAgICBicmVhazsKLSNpZm5kZWYg Tk9GVFJVTkNBVEUKLSAgICAgICAgaWYgKHggIT0gREJfUkVDTCkgeyAgICAgICAgICAgICAvKiBX YXRjaCBvdXQgZm9yIHRyYWlsaW5nIGp1bmsgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImdl dHNsb3QgYmFkIHNpemUiLCIiLHgpOyAgLyogKFNob3VsZG4ndCBoYXBwZW4uLi4pICovCi0jaWZk ZWYgQ09IRVJFTlQKLSAgICAgICAgICAgIGNoc2l6ZShmaWxlbm8oZGJmcCksaSk7Ci0jZWxzZQot ICAgICAgICAgICAgZnRydW5jYXRlKGZpbGVubyhkYmZwKSwoQ0tfT0ZGX1QpaSk7Ci0jZW5kaWYg LyogQ09IRVJFTlQgKi8KLSAgICAgICAgICAgIHggPSAwOwotICAgICAgICAgICAgQ0tGU0VFSyhk YmZwLGksMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2VuZGlmIC8qIE5PRlRS VU5DQVRFICovCi0gICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgcmVjb3JkIiwiIixuKTsKLSAg ICAgICAgayA9IGRiZmxkW2RiX0ZMQUdTXS5vZmY7Ci0gICAgICAgIGogPSBkYmZsZFtkYl9GTEFH U10ubGVuOwotICAgICAgICBkYmZsYWdzID0gaGV4dG91bG9uZygmZGJyZWNba10saik7Ci0gICAg ICAgIGRlYnVnKEYwMDEsImdldHNsb3QgZGJmbGFncyIsIiIsZGJmbGFncyk7Ci0gICAgICAgIGsg PSBkYmZsZFtkYl9NWVBJRF0ub2ZmOwotICAgICAgICBqID0gZGJmbGRbZGJfTVlQSURdLmxlbjsK LSAgICAgICAgZGJwaWQgID0gaGV4dG91bG9uZygmZGJyZWNba10saik7Ci0gICAgICAgIGRlYnVn KEYwMDEsImdldHNsb3QgZGJwaWQiLCIiLGRicGlkKTsKLSAgICAgICAgayA9IGRiZmxkW2RiX1NB RERSXS5vZmY7Ci0gICAgICAgIGogPSBkYmZsZFtkYl9TQUREUl0ubGVuOwotICAgICAgICBkYmlw ID0gaGV4dG91bG9uZygmZGJyZWNba10saik7Ci0gICAgICAgIGRlYnVnKEYwMDEsImdldHNsb3Qg ZGJpcCIsIiIsZGJpcCk7Ci0KLSAgICAgICAgaWYgKGRiZmxhZ3MgJiBEQkZfSU5VU0UpIHsgICAg ICAvKiBSZW1lbWJlciBsYXN0IHNsb3QgaW4gdXNlICovCi0gICAgICAgICAgICB4ID0gMDsgICAg ICAgICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIGl0J3MgUkVBTExZIGluIHVzZSAqLwotICAg ICAgICAgICAgaWYgKGRicGlkID09IG15cGlkICYmIGRiaXAgPT0gbXlpcCkgeyAvKiBDaGVjayBm b3IgUElEID09IG15IFBJRCAqLwotICAgICAgICAgICAgICAgIHggPSAxOwotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDEsImdldHNsb3QgcmVjb3JkIHBpZCIsIiIsZGJwaWQpOwotICAgICAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIE9yIGZvciBzdGFsZSBQSUQgKi8KLSAg ICAgICAgICAgICAgICB4ID0gemNoa3BpZChkYnBpZCk7Ci0gICAgICAgICAgICAgICAgZGVidWco RjEwMSwiZ2V0c2xvdCB6Y2hrcGlkKCkiLCIiLHgpOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgaWYgKCF4KSB7ICAgICAgICAgICAgICAgICAgIC8qIEJvZ3VzIHJlY29yZCAqLwotICAgICAg ICAgICAgICAgIHggPSBmcmVlc2xvdChuKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJn ZXRzbG90IHN0YWxlIHJlY29yZCBwaWQ6IGZyZWVzbG90KCkiLCIiLHgpOwotICAgICAgICAgICAg ICAgIGlmICh4ID4gLTEgJiYgIWhhdmVzbG90KQotICAgICAgICAgICAgICAgICAgZGJmbGFncyA9 IDA7Ci0gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogSXQncyByZWFs bHkgaW4gdXNlICovCi0gICAgICAgICAgICAgICAgZGJsYXN0dXNlZCA9IGk7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFoYXZlc2xvdCkgeyAgICAgICAgICAgICAgICAv KiBJZiBJIGRvbid0IGhhdmUgYSBzbG90IHlldCAqLwotICAgICAgICAgICAgaWYgKCEoZGJmbGFn cyAmIERCRl9JTlVTRSkpIHsgICAgICAgLyogQ2xhaW0gdGhpcyBvbmUgKi8KLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGZyZWUgc2xvdCIsICIiLCBuKTsKLSAgICAgICAgICAg ICAgICBoYXZlc2xvdCA9IDE7Ci0gICAgICAgICAgICAgICAgbXlkYnNlZWsgPSBpOwotICAgICAg ICAgICAgICAgIG15ZGJzbG90ID0gbjsgICAgICAgICAgIC8qIEJ1dCBrZWVwIGdvaW5nLi4uICov Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogQ29tZSBoZXJlIHdpdGgg aSA9PSBzZWVrIHBvaW50ZXIgdG8gZmlyc3QgcmVjb3JkIGFmdGVyIGVvZiAqLwotCi0gICAgaWYg KCFoYXZlc2xvdCkgeyAgICAgICAgICAgICAgICAgICAgLyogRm91bmQgbm8gZnJlZSBzbG90IHNv IGFkZCB0byBlbmQgKi8KLSAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBuZXcgc2xvdCIsIiIs bik7Ci0gICAgICAgIGhhdmVzbG90ID0gMTsKLSAgICAgICAgbXlkYnNlZWsgPSBpOwotICAgICAg ICBteWRic2xvdCA9IG47Ci0gICAgfQotICAgIGlrZGJvcGVuID0gMTsgICAgICAgICAgICAgICAg ICAgICAgIC8qIE9LIHRvIG1ha2UgZGF0YWJhc2UgZW50cmllcyAqLwotICAgIGRlYnVnKEYxMDEs ImdldHNsb3QgcmVjb3JkcyIsIiIsbik7Ci0gICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBkYmxhc3R1 c2VkIiwiIixkYmxhc3R1c2VkKTsKLSAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGkiLCIiLGkpOwot Ci0gICAgLyogVHJpbSBzdGFsZSByZWNvcmRzIGZyb20gZW5kICovCi0KLSNpZm5kZWYgTk9GVFJV TkNBVEUKLSAgICBpZiAoaSA+IGRibGFzdHVzZWQrREJfUkVDTCkgewotICAgICAgICBkZWJ1ZyhG MTAxLCJnZXRzbG90IHRydW5jYXRpbmcgYXQiLCIiLGRibGFzdHVzZWQrREJfUkVDTCk7Ci0jaWZk ZWYgQ09IRVJFTlQKLSAgICAgICAgeCA9IGNoc2l6ZShmaWxlbm8oZGJmcCksZGJsYXN0dXNlZCtE Ql9SRUNMKTsKLSNlbHNlCi0gICAgICAgIHggPSBmdHJ1bmNhdGUoZmlsZW5vKGRiZnApLChDS19P RkZfVCkoZGJsYXN0dXNlZCtEQl9SRUNMKSk7Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSAgICAg ICAgaWYgKHggPCAwKSAgICAgICAgICAgICAgICAgICAgICAvKiAoTm90IGZhdGFsKSAqLwotICAg ICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZnRydW5jYXRlIGZhaWxlZCIsICIiLCBlcnJubyk7 Ci0gICAgfQotI2VuZGlmIC8qIE5PRlRSVU5DQVRFICovCi0KLSAgICAvKiBJbml0aWFsaXplIG15 IHJlY29yZCAqLwotCi0gICAgaWYgKGluaXRzbG90KG15ZGJzbG90KSA8IDApIHsKLSAgICAgICAg ZGVidWcoRjEwMSwiZ2V0c2xvdCBpbml0c2xvdCgpIGVycm9yIiwiIixuKTsKLSAgICAgICAgaWtk Ym9wZW4gPSAwOwotICAgICAgICBnb3RvIHhzbG90OwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJn ZXRzbG90IE9LIiwiIixteWRic2xvdCk7Ci0gICAgcmMgPSBteWRic2xvdDsgICAgICAgICAgICAg ICAgICAgICAgLyogT0sgcmV0dXJuIGNvZGUgKi8KLQotICB4c2xvdDogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFVubG9jayB0aGUgZGF0YWJhc2UgYW5kIHJldHVybiAqLwotICAg IGlmICh1bmxpbmsobGNrbmFtKSA8IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwiZ2V0c2xvdCBs b2NrZmlsZSByZW1vdmFsIGZhaWxlZCIsbGNrbmFtLGVycm5vKTsKLSAgICAgICAgcmMgPSAtMTsK LSAgICB9Ci0gICAgcmV0dXJuKHJjKTsKLX0KLSNlbmRpZiAvKiBJS1NEQiAqLwotI2VuZGlmIC8q IE5PSUtTRCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2t1dXN4LmMuYzk5IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMw Mi9ja3V1c3guYy5jOTkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YTg1N2IuLjAw MDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3gu Yy5jOTkKKysrIC9kZXYvbnVsbApAQCAtMSw5NzE4ICswLDAgQEAKLSNpbmNsdWRlICJja2NzeW0u aCIKLQotLyogIEMgSyBVIFUgUyBYIC0tICAiVXNlciBJbnRlcmZhY2UiIGNvbW1vbiBmdW5jdGlv bnMuICovCi0KLS8qCi0gIEF1dGhvcnM6Ci0gICAgRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlh LmVkdT4sCi0gICAgICBUaGUgS2VybWl0IFByb2plY3QsIENvbHVtYmlhIFVuaXZlcnNpdHksIE5l dyBZb3JrIENpdHkKLSAgICBKZWZmcmV5IEUgQWx0bWFuIDxqYWx0bWFuQHNlY3VyZS1lbmRwb2lu dHMuY29tPgotICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5Ci0KLSAg Q29weXJpZ2h0IChDKSAxOTg1LCAyMDExLAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZl cnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4g IFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQg dGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9u cy4KLSovCi0KLS8qCi0gIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHVzZXIgaW50ZXJmYWNlIGZ1bmN0 aW9ucyBuZWVkZWQgYnkgYm90aCB0aGUgaW50ZXJhY3RpdmUKLSAgdXNlciBpbnRlcmZhY2UgYW5k IHRoZSBjb21tYW5kLWxpbmUtb25seSB1c2VyIGludGVyZmFjZSwgYXMgd2VsbCBhcyB0aGUKLSAg c2NyZWVuLWNvbnRyb2wgcm91dGluZXMgKGN1cnNlcyBhbmQgZXF1aXZhbGVudCkuCi0qLwotCi0v KiBJbmNsdWRlcyAqLwotCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0jaW5jbHVkZSAiY2tjYXNjLmgi Ci0jaW5jbHVkZSAiY2tja2VyLmgiCi0jaW5jbHVkZSAiY2t1dXNyLmgiCi0jaW5jbHVkZSAiY2tj eGxhLmgiCi0KLSNpZm5kZWYgTk9IVEVSTUNBUAotI2lmZGVmIE5PVEVSTUNBUAotI2RlZmluZSBO T0hURVJNQ0FQCi0jZWxzZQotI2lmbmRlZiBCU0Q0NAotI2RlZmluZSBOT0hURVJNQ0FQCi0jZWxz ZQotI2lmZGVmIF9fYnNkaV9fCi0jZGVmaW5lIE5PSFRFUk1DQVAKLSNlbHNlCi0jaWZkZWYgT1BF TkJTRAotI2RlZmluZSBOT0hURVJNQ0FQCi0jZWxzZQotI2lmZGVmIE1BQ09TWAotI2RlZmluZSBO T0hURVJNQ0FQCi0jZW5kaWYgLyogTUFDT1NYICovCi0jZW5kaWYgLyogT1BFTkJTRCAqLwotI2Vu ZGlmIC8qIF9fYnNkaV9fICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBOT1RFUk1D QVAgKi8KLSNlbmRpZiAvKiBOT0hURVJNQ0FQICovCi0KLSNpZm5kZWYgTk9URVJNQ0FQCi0jaWZk ZWYgQlNENDQKLSNpZm5kZWYgTk9IVEVSTUNBUAotI2luY2x1ZGUgPHRlcm1jYXAuaD4KLSNlbmRp ZiAvKiBOT0hURVJNQ0FQICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbHNlICAvKiAhQlNENDQg Ki8KLSNpZmRlZiBsaW51eAotI2luY2x1ZGUgPHRlcm0uaD4KLSNlbmRpZiAvKiBsaW51eCAqLwot I2VuZGlmIC8qIE5PVEVSTUNBUCAqLwotCi0jaWZkZWYgT1MyCi0jaW5jbHVkZSA8c3RyaW5nLmg+ Ci1fUFJPVE9UWVAoY2hhciAqIG9zMl9nZXRob3N0bmFtZSwgKHZvaWQpKTsKLSNkZWZpbmUgZ2V0 cGlkIF9nZXRwaWQKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBCU0Q0NAotI2luY2x1ZGUgPGVy cm5vLmg+Ci0jZW5kaWYgLyogQlNENDQgKi8KLQotZXh0ZXJuIHh4X3N0cnAgeHhzdHJpbmc7Ci0K LSNpZmRlZiBPUzIKLSNpbmNsdWRlICJja2NuZXQuaCIKLSNlbHNlIC8qIE9TMiAqLwotX1BST1RP VFlQKCBjaGFyICogY2tnZXRwZWVyLCAoVk9JRCkpOwotX1BST1RPVFlQKGludCBnZXRsb2NhbGlw YWRkciwgKHZvaWQpKTsKLV9QUk9UT1RZUChpbnQgaXN0bmNvbXBvcnQsICh2b2lkKSk7Ci0jaWZu ZGVmIE5PQ0tHRVRGUUhPU1QKLV9QUk9UT1RZUCggY2hhciAqIGNrZ2V0ZnFob3N0bmFtZSwoY2hh ciAqKSk7Ci0jZW5kaWYJLyogTk9DS0dFVEZRSE9TVCAqLwotI2lmbmRlZiBORVRDT05OCi0vKgot ICBXZSBzaG91bGQganVzdCBwdWxsIGluIGNrY25ldC5oIGhlcmUsIGJ1dCBpdCBjYXVzZXMgYSBj b25mbGljdCB3aXRoIGN1cnNlcy5oLgotKi8KLSNpZmRlZiBUQ1BTT0NLRVQKLSNkZWZpbmUgTkVU Q09OTgotI2Vsc2UKLSNpZmRlZiBTVU5YMjUKLSNkZWZpbmUgTkVUQ09OTgotI2Vsc2UKLSNpZmRl ZiBTVFJBVFVTWDI1Ci0jZGVmaW5lIE5FVENPTk4KLSNlbHNlCi0jaWZkZWYgSUJNWDI1Ci0jZGVm aW5lIE5FVENPTk4KLSNlbHNlCi0jaWZkZWYgSFBYMjUKLSNkZWZpbmUgTkVUQ09OTgotI2Vsc2UK LSNpZmRlZiBERUNORVQKLSNkZWZpbmUgTkVUQ09OTgotI2Vsc2UKLSNpZmRlZiBOUElQRQotI2Rl ZmluZSBORVRDT05OCi0jZWxzZQotI2lmZGVmIENLX05FVEJJT1MKLSNkZWZpbmUgTkVUQ09OTgot I2lmZGVmIFNVUEVSTEFUCi0jZGVmaW5lIE5FVENPTk4KLSNlbHNlCi0jZW5kaWYgLyogU1VQRVJM QVQgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBTVU5YMjUgKi8KLSNlbmRp ZiAvKiBTVFJBVFVTWDI1ICovCi0jZW5kaWYgLyogSUJNWDI1ICovCi0jZW5kaWYgLyogSFBYMjUg Ki8KLSNlbmRpZiAvKiBERUNORVQgKi8KLSNlbmRpZiAvKiBOUElQRSAqLwotI2VuZGlmIC8qIENL X05FVEJJT1MgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNp Zm5kZWYgVENQU09DS0VUCi0jaWZkZWYgTVVMVElORVQKLSNkZWZpbmUgVENQU09DS0VUCi0jZW5k aWYgLyogTVVMVElORVQgKi8KLSNpZmRlZiBERUNfVENQSVAKLSNkZWZpbmUgVENQU09DS0VUCi0j ZW5kaWYgLyogREVDX1RDUElQICovCi0jaWZkZWYgV0lOVENQCi0jZGVmaW5lIFRDUFNPQ0tFVAot I2VuZGlmIC8qIFdJTlRDUCAqLwotI2lmZGVmIFRDUFdBUkUKLSNkZWZpbmUgVENQU09DS0VUCi0j ZW5kaWYgLyogVENQV0FSRSAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0jaWZkZWYgT1My Ci0jaWZkZWYgTlQKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8dGFwaS5oPgotI2lu Y2x1ZGUgImNrbnRhcC5oIgotI2Vsc2UgLyogTlQgKi8KLSNkZWZpbmUgSU5DTF9WSU8KLSNpbmNs dWRlIDxvczIuaD4KLSNlbmRpZiAvKiBOVCAqLwotI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFdvdWxkIHlvdSBiZWxpZXZlICovCi0jdW5kZWYgQ09NTUVOVCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogPG9zMi5oPiBkZWZpbmVzIHRoaXMgPyAqLwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSNpZmRlZiBDS19ORVRCSU9TCi0jaW5jbHVkZSAiY2tvbmJpLmgiCi0j ZW5kaWYgLyogQ0tfTkVUQklPUyAqLwotCi0jaW5jbHVkZSAiY2tvY29uLmgiCi1leHRlcm4gYXNj cmVlbiBjb21tYW5kc2NyZWVuOwotI2lmZGVmIEtVSQotI2luY2x1ZGUgImlrdWkuaCIKLSNlbmRp ZiAvKiBLVUkgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE5UCi0jaW5jbHVkZSAiY2tu d2luLmgiCi0jZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBPUzIKLSNpbmNsdWRlICJja293aW4uaCIK LSNpbmNsdWRlICJja29zeW4uaCIKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENLX1RBUEkK LWV4dGVybiBpbnQgdHR0YXBpOwotZXh0ZXJuIGludCB0YXBpcGFzczsKLSNlbmRpZiAvKiBDS19U QVBJICovCi0KLSNpZmRlZiBDS19LRVJCRVJPUwotI2luY2x1ZGUgImNrdWF0aC5oIgotI2VuZGlm IC8qIENLX0tFUkJFUk9TICovCi0KLSNpZm5kZWYgV0lOVENQCi0jaW5jbHVkZSA8c2lnbmFsLmg+ Ci0jZW5kaWYgLyogV0lOVENQICovCi0KLSNpZmRlZiBWTVMKLSNpbmNsdWRlIDxkZXNjcmlwLmg+ Ci0jaW5jbHVkZSA8c3NkZWYuaD4KLSNpbmNsdWRlIDxzdHNkZWYuaD4KLSNpZm5kZWYgT0xEX1ZN UwotI2luY2x1ZGUgPGxpYiRyb3V0aW5lcy5oPiAgLyogTm90IGZvciBWQVggQyAyLjMgKi8KLSNl bHNlCi0jaW5jbHVkZSA8bGliZGVmLmg+Ci0jZW5kaWYgLyogT0xEX1ZNUyAqLwotI2lmZGVmIFdJ TlRDUAotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2VuZGlmIC8qIFdJTlRDUCAqLwotI2VuZGlmIC8q IFZNUyAqLwotCi0jaWZkZWYgRENMRkRPUEVOCi0vKiBmZG9wZW4oKSBuZWVkcyBkZWNsYXJpbmcg YmVjYXVzZSBpdCdzIG5vdCBkZWNsYXJlZCBpbiA8c3RkaW8uaD4gKi8KLV9QUk9UT1RZUCggRklM RSAqIGZkb3BlbiwgKGludCwgY2hhciAqKSApOwotI2VuZGlmIC8qIERDTEZET1BFTiAqLwotCi0j aWZkZWYgRENMUE9QRU4KLS8qIHBvcGVuKCkgbmVlZHMgZGVjbGFyaW5nIGJlY2F1c2UgaXQncyBu b3QgZGVjbGFyZWQgaW4gPHN0ZGlvLmg+ICovCi1fUFJPVE9UWVAoIEZJTEUgKiBwb3BlbiwgKGNo YXIgKiwgY2hhciAqKSApOwotI2VuZGlmIC8qIERDTFBPUEVOICovCi0KLWludCB0dF9jcmQgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYXJyaWFnZSByZXR1cm4gZGlzcGxheSAqLwot aW50IHR0X2xmZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExpbmVmZWVkIGRpc3Bs YXkgKi8KLWludCBpbnRlcnJ1cHRlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1 cHRlZCBmcm9tIGtleWJvYXJkIGZsYWcgKi8KLWludCBmeGRfaW5pdGVkID0gMDsJCQkvKiBGdWxs c2NyZWVuIHN0dWZmIGluaXRpYWxpemVkICovCi0KLSNpZmRlZiBERUJVRwotY2hhciBkZWJmaWxb Q0tNQVhQQVRIKzFdOyAgICAgICAgICAgICAgIC8qIERlYnVnZ2luZyBsb2cgZmlsZSBuYW1lICov Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIFRMT0cKLWNoYXIgdHJhZmlsW0NLTUFYUEFU SCsxXTsgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBsb2cgZmlsZSBuYW1lICovCi0jZW5k aWYgLyogVExPRyAqLwotCi1jaGFyIHNlc2ZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAg LyogU2Vzc2lvbiBsb2cgZmlsZSBuYW1lICovCi0KLSNpZmRlZiBDS0xPR0RJQUwKLWNoYXIgZGlh ZmlsW0NLTUFYUEFUSCsxXTsgICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIGxvZyBmaWxlIG5h bWUgKi8KLWNoYXIgY3hsb2didWZbQ1hMT0dCVUZMKzFdOyAgICAgICAgICAgICAvKiBDb25uZWN0 aW9uIGxvZyByZWNvcmQgYnVmZmVyICovCi1pbnQgY3hfYWN0aXZlID0gMDsgICAgICAgICAgICAg ICAgICAgICAgLyogQ29ubmVjdGlvbiBpcyBhY3RpdmUgKi8KLWV4dGVybiBpbnQgZGlhbG9nOwot I2VuZGlmIC8qIENLTE9HRElBTCAqLwotCi0jaWZkZWYgRFlOQU1JQwotc3RhdGljIGNoYXIgKmNt ZHN0ciA9IE5VTEw7ICAgICAgICAgICAgIC8qIFBsYWNlIHRvIGJ1aWxkIGdlbmVyaWMgY29tbWFu ZCAqLwotI2Vsc2UKLSNpZmRlZiBwZHAxMQotc3RhdGljIGNoYXIgY21kc3RyWzI1Nl07Ci0jZWxz ZQotc3RhdGljIGNoYXIgY21kc3RyWzQwOTZdOwotI2VuZGlmIC8qIHBkcDExICovCi0jZW5kaWYg LyogRFlOQU1JQyAqLwotCi0jaWZuZGVmIE5PTVNFTkQKLWNoYXIgZnNwZWNbQ01EQkwrNF07ICAg ICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSBzdHJpbmcgZm9yIFx2KGZpbGVzcGVjKSAqLwot aW50IGZzcGVjbGVuID0gQ01EQkw7Ci0jZWxzZQotY2hhciBmc3BlY1tDS01BWFBBVEgrNF07Ci1p bnQgZnNwZWNsZW4gPSBDS01BWFBBVEg7Ci0jZW5kaWYgLyogTk9NU0VORCAqLwotCi1jaGFyICog cmZzcGVjID0gTlVMTDsJCQkvKiBSZWNlaXZlZCBmaWxlc3BlYzogbG9jYWwgKi8KLWNoYXIgKiBw cmZzcGVjID0gTlVMTDsJCQkvKiBQcmVsaW1pbmFyeSByZnNwZWMgKi8KLWNoYXIgKiBzZnNwZWMg PSBOVUxMOwkJCS8qIFNlbnQgZmlsZXNwZWM6IGxvY2FsICovCi1jaGFyICogcHNmc3BlYyA9IE5V TEw7CQkJLyogUHJlbGltaW5hcnkgc2ZzcGVjICovCi1jaGFyICogc3Jmc3BlYyA9IE5VTEw7CQkJ LyogUmVjZWl2ZWQgZmlsZXNwZWM6IHJlbW90ZSAqLwotY2hhciAqIHBzcmZzcGVjID0gTlVMTDsJ CQkvKiBQcmVsaW1pbmFyeSBzcmZzcGVjICovCi1jaGFyICogcnJmc3BlYyA9IE5VTEw7CQkJLyog U2VudCBmaWxlc3BlYzogcmVtb3RlICovCi1jaGFyICogcHJyZnNwZWMgPSBOVUxMOwkJCS8qIFBy ZWxpbWluYXJ5IHJyZnNwZWMgKi8KLQotaW50IHN1Y2Nlc3MgPSAxLCAgICAgICAgICAgICAgICAg ICAgICAgIC8qIENvbW1hbmQgc3VjY2Vzcy9mYWlsdXJlIGZsYWcgKi8KLSAgICBjbWRsdmwgPSAw LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGxldmVsICovCi0gICAgYWN0aW9u ID0gMCwJCQkJLyogQWN0aW9uIHNlbGVjdGVkIG9uIGNvbW1hbmQgbGluZSAqLwotICAgIHNsb2d0 cyA9IDAsCQkJCS8qIFNlc3Npb24tbG9nIHRpbWVzdGFtcHMgb24vb2ZmICovCi0gICAgc2xvZ251 bCA9IDAsCQkJLyogU2Vzc2lvbi1sb2cgbnVsbC10ZXJtaW5hdGVkIGxpbmVzICovCi0jaWZkZWYg VU5JWAotICAgIHNlc3NmdCA9IFhZRlRfVCwgICAgICAgICAgICAgICAgICAgIC8qIFNlc3Npb24g bG9nIGZpbGUgdHlwZSAqLwotI2Vsc2UKLSAgICBzZXNzZnQgPSBYWUZUX0IsCQkJLyogKHRleHQg Zm9yIFVOSVggYmluYXJ5IGZvciBvdGhlcnMpICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAgIHBm bGFnID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50IHByb21wdCAqLwotICAg IG1zZ2ZsZyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50IGluZm9ybWF0aW9u YWwgbWVzc2FnZXMgKi8KLQotZXh0ZXJuIGludCB4YXNrbW9yZSwgc2F2ZWFzazsJCS8qIE1vcmUt cHJvbXB0aW5nICovCi0KLSNpZmRlZiBDS19BUEMKLWV4dGVybiBpbnQgYXBjYWN0aXZlOwotI2Vu ZGlmIC8qIENLX0FQQyAqLwotLyogRXh0ZXJuYWwgdmFyaWFibGVzICovCi0KLWV4dGVybiBpbnQg bG9jYWwsIHF1aWV0LCBiaW5hcnksIG5ldHdvcmssIHdoYXQsIHBhcml0eSwgeGl0c3RhLCBlc2Nh cGUsCi0gIHRsZXZlbCwgYmdzZXQsIGJhY2tncmQsIHhzdXNwZW5kLCBjbWRpbnQsIG5ldHR5cGUs IHNlc2xvZywgZGZsb2M7Ci0KLWV4dGVybiBpbnQgY21kX3Jvd3MsIGNtZF9jb2xzLCB4Y21kc3Jj OwotCi1leHRlcm4gY2hhciBjbWRmaWxbXTsKLQotI2lmZGVmIFZNUwotZXh0ZXJuIGludCBiYXRj aDsKLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVmIGRhdGFnZW5lcmFsICAgICAgICAgICAgICAg ICAgICAgIC8qIDIvMTIvOTIgRU5IICovCi0jaW5jbHVkZSA8c3lzaWQuaD4KLWV4dGVybiBpbnQg Y29uX3JlYWRzX210LCBjb25pbnRfY2gsIGNvbmludF9hdmw7Ci0jZW5kaWYgLyogZGF0YWdlbmVy YWwgKi8KLQotZXh0ZXJuIGxvbmcgc3BlZWQ7Ci0KLWV4dGVybiBjaGFyIHR0bmFtZVtdLCAqZGZ0 dHksICpjbWFyZywgKipjbWxpc3QsICp2ZXJzaW8sIG15aG9zdFtdOwotCi0jaWZuZGVmIE5PQ1NF VFMKLWV4dGVybiBpbnQgZmNoYXJzZXQsIHRjaGFyc2V0LCB4ZnJ4bGE7Ci1leHRlcm4gc3RydWN0 IGNzaW5mbyBmY3NpbmZvW10sIHRjc2luZm9bXTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNp ZmRlZiBPUzIKLWV4dGVybiB1bnNpZ25lZCBjaGFyIGNvbG9yY21kOwotI2VuZGlmIC8qIE9TMiAq LwotCi0jaWZkZWYgTk9YRkVSCi0KLWludCBmZGlzcGxhID0gWFlGRF9OOwotCi0jZWxzZSAgLyog Tk9YRkVSIGlzIG5vdCBkZWZpbmVkICovCi0KLSNpZmRlZiBPUzIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVyIGRpc3BsYXkgdHlwZSAqLwotaW50IGZkaXNwbGEg PSBYWUZEX0M7ICAgICAgICAgICAgICAgICAgIC8qIEN1cnNlcyAoZnVsbHNjcmVlbikgaWYgd2Ug aGF2ZSBpdCAqLwotI2Vsc2UKLSNpZmRlZiBDS19DVVJTRVMKLWludCBmZGlzcGxhID0gWFlGRF9D OwotI2Vsc2UKLWludCBmZGlzcGxhID0gWFlGRF9TOyAgICAgICAgICAgICAgICAgICAvKiBPdGhl cndpc2UgQ1JUICovCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0jZW5kaWYgLyogT1MyICovCi0K LWV4dGVybiBzdHJ1Y3QgY2tfcCBwdGFiW107Ci1leHRlcm4gaW50IHByb3RvY29sLCB4ZnJiZWws IHhmcmludDsKLQotI2lmZGVmIFNUUkVBTUlORwotZXh0ZXJuIGludCBzdHJlYW1pbmcsIHN0cmVh bW9rOwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCi0vKiBVc2VkIGludGVybmFsbHkgKi8KLQot I2lmZGVmIEtVSQotX1BST1RPVFlQKCBWT0lEIHNjcmVlbmcsIChpbnQsIGNoYXIsIGxvbmcsIGNo YXIgKikgKTsKLSNlbmRpZgkvKiBLVUkgKi8KLV9QUk9UT1RZUCggVk9JRCBzY3JlZW5jLCAoaW50 LCBjaGFyLCBDS19PRkZfVCwgY2hhciAqKSApOwotCi0KLSNpZmRlZiBDS19DVVJTRVMKLSNpZm5k ZWYgRFlOQU1JQwotc3RhdGljIGNoYXIgeHRybWJ1ZltUUk1CVUZMXTsgICAgICAgICAgIC8qIHRn ZXRlbnQoKSBidWZmZXIgKi8KLWNoYXIgKiB0cm1idWYgPSB4dHJtYnVmOwotI2Vsc2UKLWNoYXIg KiB0cm1idWYgPSBOVUxMOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLV9QUk9UT1RZUCggc3RhdGlj IFZPSUQgZHB5aW5pdCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBsb25nIHNob2Nwcywg KGludCwgQ0tfT0ZGX1QsIENLX09GRl9UKSApOwotX1BST1RPVFlQKCBzdGF0aWMgQ0tfT0ZGX1Qg c2hvZXRsLCAoQ0tfT0ZGX1QsIGxvbmcsIENLX09GRl9ULCBDS19PRkZfVCkgKTsKLSNlbmRpZiAv KiBDS19DVVJTRVMgKi8KLQotc3RhdGljIGludCBmdF93aW4gPSAwOyAgLyogRnVsbHNjcmVlbiBm aWxlIHRyYW5zZmVyIGRpc3BsYXkgd2luZG93IGlzIGFjdGl2ZSAqLwotCi0vKiBWYXJpYWJsZXMg ZGVjbGFyZWQgaGVyZSAqLwotCi1zdGF0aWMgY2hhciAqIHNrcmVhc29uW10gPSB7Ci0gICAgIiIs CQkJCQkvKiAwICovCi0gICAgIlJlbW90ZSBmaWxlIG5vdCBvbGRlciIsCQkvKiBTS1BfREFUICov Ci0gICAgIklkZW50aWNhbCBtb2RpZmljYXRpb24gdGltZXMiLAkvKiBTS1BfRVFVICovCi0gICAg IlR5cGUiLAkJCQkvKiBTS1BfVFlQICovCi0gICAgIlNpemUiLAkJCQkvKiBTS1BfU0laICovCi0g ICAgIk5hbWUgY29sbGlzaW9uIiwJCQkvKiBTS1BfTkFNICovCi0gICAgIkV4Y2VwdGlvbiBMaXN0 IiwJCQkvKiBTS1BfRVhMICovCi0gICAgIkRvdCBmaWxlIiwJCQkJLyogU0tQX0RPVCAqLwotICAg ICJCYWNrdXAgZmlsZSIsCQkJLyogU0tQX0JLVSAqLwotICAgICJSZWNvdmVyeSBub3QgbmVlZGVk IiwJCS8qIFNLUF9SRVMgKi8KLSAgICAiQWNjZXNzIGRlbmllZCIsCQkJLyogU0tQX0FDQyAqLwot ICAgICJOb3QgYSByZWd1bGFyIGZpbGUiLAkJLyogU0tQX05SRiAqLwotICAgICJTaW11bGF0ZWQi LAkJCS8qIFNLUF9TSU0gKi8KLSAgICAiU2ltdWxhdGVkIC0gUmVtb3RlIGZpbGUgb2xkZXIiLAkv KiBTS1BfWFVQICovCi0gICAgIlNpbXVsYXRlZCAtIE5vIHJlbW90ZSBmaWxlIiwJLyogU0tQX1hO WCAqLwotfTsKLXN0YXRpYyBpbnQgbnNrcmVhc29uID0gKHNpemVvZihza3JlYXNvbikgLyBzaXpl b2YoY2hhciAqKSk7Ci0KLWNoYXIgKgotZ3NrcmVhc29uKG4pIGludCBuOyB7Ci0gICAgcmV0dXJu KChuID4gMCAmJiBuIDwgbnNrcmVhc29uKSA/IHNrcmVhc29uW25dIDogIiIpOwotfQotCi1jaGFy IHBrdGZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAgLyogUGFja2V0IGxvZyBmaWxlIG5h bWUgKi8KLQotI2lmbmRlZiBOT01TRU5EICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE11bHRp cGxlIFNFTkQgKi8KLWNoYXIgKm1zZmlsZXNbTVNFTkRNQVhdOwotI2VuZGlmIC8qIE5PTVNFTkQg Ki8KLQotI2lmZGVmIENLX1RJTUVSUwotZXh0ZXJuIGxvbmcgcnR0ZGVsYXk7Ci1leHRlcm4gaW50 ICBydHRmbGc7Ci0jZW5kaWYgLyogQ0tfVElNRVJTICovCi1leHRlcm4gaW50IHJjdnRpbW87Ci0K LSNpZmRlZiBDS19SRVNFTkQKLWV4dGVybiBpbnQgc2VuZG1vZGU7Ci1leHRlcm4gQ0tfT0ZGX1Qg c2VuZHN0YXJ0LCByc19sZW47Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0KLSNpZmRlZiBDS19Q Q1RfQkFSICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVyIHRoZXJtb21ldGVy ICovCi1pbnQgdGhlcm1vbWV0ZXIgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogT04gYnkgZGVm YXVsdCAqLwotI2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KLQotI2lmZGVmIEdGVElNRVIKLUNLRkxP QVQgZ3R2ID0gLTEuMCwgb2xkZ3R2ID0gLTEuMDsKLSNlbHNlCi0jaWZuZGVmIE9TMgotc3RhdGlj Ci0jZW5kaWYgLyogT1MyICovCi0gIGxvbmcgZ3R2ID0gLTFMLCBvbGRndHYgPSAtMUw7Ci0jZW5k aWYgLyogR0ZUSU1FUiAqLwotCi1leHRlcm4gaW50IHNlcnZlciwgYmN0dSwgcnB0ZmxnLCBlYnFm bGcsIHNwc2l6LCB1cnBzaXosIHdtYXgsIGN6c2VlbiwgY3hzZWVuLAotICB3aW5sbywgZGlzcGxh LCB0aW1pbnQsIG5wYWQsIGVicSwgYmN0ciwgcnB0cSwgYXRjYXB1LCBscGNhcHUsCi0gIHN3Y2Fw dSwgd3Nsb3RuLCB3c2xvdHIsIHJ0aW1vLCBteXBhZG4sIHNxLCBjYXBhcywgcnBzaXosIHRzZWNz LAotICBwa3Rsb2csIGxzY2FwdSwgZGVzdCwgc3J2ZGlzLCB3c2xvdHMsIHNwYWNrZXRzLCBzcGt0 bCwgcnBrdGwsCi0gIHJldHJhbnMsIHdjdXIsIG51bWVycnMsIGZzZWNzLCB3aGF0cnUsIGNydW5j aGVkLCB0aW1lb3V0cywKLSAgcnBhY2tldHMsIGZuY252LCBieWVfYWN0aXZlLCBkaXNjYXJkLCBp bnNlcnZlciwgZGlyYWN0aXZlLCBjZGFjdGl2ZTsKLQotZXh0ZXJuIGxvbmcgZmlsY250LCBmaWxy ZWosIHJwdG4sIGZpbGNwcywgdGZjcHMsIGNwcywgcGVha2NwczsKLWV4dGVybiBDS19PRkZfVCBm ZmMsIHRmYywgZnNpemU7IAotCi1sb25nIG9sZGNwcyA9IDBMOwotCi1leHRlcm4gQ0hBUiAqcmRh dGFwLCBwYWRjaCwgc2VvbCwgY3RscSwgbXlwYWRjLCBlb2wsICplcGt0bXNnOwotZXh0ZXJuIGNo YXIgKnhmcm1zZzsKLQotI2lmZGVmIElLU0RCCi1GSUxFICogZGJmcCA9IE5VTEw7ICAgICAgICAg ICAgICAgICAgICAgLyogRmlsZSBwb2ludGVyIHRvIGRhdGFiYXNlIGZpbGUgKi8KLQotaW50IGRi ZW5hYmxlZCA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGRhdGFiYXNlIGlz IGVuYWJsZWQgKi8KLWV4dGVybiBpbnQgaWtkYm9wZW47ICAgICAgICAgICAgICAgICAgICAvKiBG bGFnIGZvciBkYXRhYmFzZSBpcyBvcGVuICovCi0KLXVuc2lnbmVkIGxvbmcgbXlkYnNlZWsgPSAw TDsgICAgICAgICAgICAvKiBTZWVrIHBvaW50ZXIgdG8gbXkgcmVjb3JkICovCi1pbnQgbXlkYnNs b3QgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogTXkgc2xvdCBudW1iZXIgKi8KLXVuc2ln bmVkIGxvbmcgbXlmbGFncyA9IDBMOyAgICAgICAgICAgICAvKiBNeSBmbGFncyAqLwotdW5zaWdu ZWQgbG9uZyBteWF0eXBlID0gMEw7ICAgICAgICAgICAgIC8qIE15IGF1dGhvcml6YXRpb24gdHlw ZSAqLwotdW5zaWduZWQgbG9uZyBteWFtb2RlID0gMEw7ICAgICAgICAgICAgIC8qIE15IGF1dGhv cml6YXRpb24gbW9kZSAqLwotdW5zaWduZWQgbG9uZyBteXN0YXRlID0gMEw7ICAgICAgICAgICAg IC8qIE15IHN0YXRlIChTRU5ELCBSRUNFSVZFLCBldGMpICovCi11bnNpZ25lZCBsb25nIG15cGlk ID0gMEw7ICAgICAgICAgICAgICAgLyogTXkgUElEICovCi11bnNpZ25lZCBsb25nIG15aXAgPSAw TDsgICAgICAgICAgICAgICAgLyogTXkgSVAgYWRkcmVzcyAqLwotdW5zaWduZWQgbG9uZyBwZWVy aXAgPSAwTDsgICAgICAgICAgICAgIC8qIE15IHBlZXIncyBJUCBhZGRyZXNzICovCi0KLXVuc2ln bmVkIGxvbmcgZGJpcCA9IDBMOyAgICAgICAgICAgICAgICAvKiBJUCBhZGRyZXNzIGluIGRiIHJl Y29yZCAqLwotdW5zaWduZWQgbG9uZyBkYnBpZCA9IDBMOyAgICAgICAgICAgICAgIC8qIFBJRCBp biBkYiByZWNvcmQgKi8KLXVuc2lnbmVkIGxvbmcgZGJmbGFncyA9IDBMOyAgICAgICAgICAgICAv KiBGbGFncyBmaWVsZCBpbiBkYiByZWNvcmQgKi8KLXVuc2lnbmVkIGxvbmcgZGJsYXN0dXNlZCA9 IDBMOyAgICAgICAgICAvKiBMYXN0IGluLXVzZSByZWNvcmQgaW4gZGIgKi8KLWNoYXIgZGJyZWNb REJfUkVDTF07ICAgICAgICAgICAgICAgICAgICAvKiBEYXRhYmFzZSByZWNvcmQgYnVmZmVyICov Ci0KLWNoYXIgKiBkYmRpciAgID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiBEYXRhYmFzZSBk aXJlY3RvcnkgKi8KLWNoYXIgKiBkYmZpbGUgID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiBE YXRhYmFzZSBmaWxlIGZ1bGwgcGF0aG5hbWUgKi8KLWNoYXIgbXloZXhpcFszM10gPSB7IE5VTCwg TlVMIH07ICAgICAgICAvKiBNeSBJUCBhZGRyZXNzIGluIGhleCAqLwotY2hhciBwZWVyaGV4aXBb MzNdID0geyBOVUwsIE5VTCB9OyAgICAgIC8qIENsaWVudCdzIElQIGFkZHJlc3MgaW4gaGV4ICov Ci0jZW5kaWYgLyogSUtTREIgKi8KLQotI2lmZGVmIEdGVElNRVIKLWV4dGVybiBDS0ZMT0FUIGZw ZnNlY3MsIGZwdHNlY3MsIGZweGZzZWNzOwotI2Vsc2UKLWV4dGVybiBsb25nIHhmc2VjczsKLSNl bmRpZiAvKiBHRlRJTUVSICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBUQ1BTT0NL RVQKLSNpZmRlZiBORVdGVFAKLWV4dGVybiBjaGFyICogZnRwX2hvc3QsIGZ0cF9zcnZ0eXBbXTsK LWV4dGVybiBpbnQgZnRwX2NzeCwgZnRwX2NzbCwgZnRwX2RlYjsKLSNlbmRpZiAvKiBORVdGVFAg Ki8KLWV4dGVybiBjaGFyIG15aXBhZGRyW107Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLSNp Zm5kZWYgTk9JQ1AKLSNpZm5kZWYgTk9TUEwKLSAgICBleHRlcm4gc3RydWN0IG10YWIgKm1hY3Rh YjsgICAgICAgICAvKiBGb3IgT05fRVhJVCBtYWNyby4gKi8KLSAgICBleHRlcm4gaW50IG5tYWM7 Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZmRlZiBEQ01EQlVGCi1leHRlcm4gY2hhciAqY21kYnVm OyAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXIgKi8KLSNlbHNlCi1leHRlcm4g Y2hhciBjbWRidWZbXTsgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXIgKi8KLSNl bmRpZiAvKiBEQ01EQlVGICovCi1leHRlcm4gaW50IGNtZF9xdW90aW5nOwotI2VuZGlmIC8qIE5P SUNQICovCi0KLSNpZm5kZWYgTk9DQ1RSQVAKLSNpZmRlZiBOVAotI2luY2x1ZGUgPHNldGptcGV4 Lmg+Ci0jZWxzZSAvKiBOVCAqLwotI2luY2x1ZGUgPHNldGptcC5oPgotI2VuZGlmIC8qIE5UICov Ci0jaW5jbHVkZSAiY2tjc2lnLmgiCi1leHRlcm4gY2tqbXBidWYgY21qYnVmOwotI2VuZGlmIC8q IE5PQ0NUUkFQICovCi0KLWV4dGVybiBpbnQgeGZpbGV0eXBlLCBuc2NhbmZpbGU7Ci0KLWludAot c2hvZXNjKGVzY2FwZSkgaW50IGVzY2FwZTsgewotICAgIGV4dGVybiBjaGFyICogY2NudGFiW107 CQkvKiBDMCBjb250cm9sIGNoYXJhY3RlciBuYW1lIHRhYmxlICovCi0gICAgZXh0ZXJuIGludCB0 dF9lc2NhcGU7Ci0gICAgaWYgKChlc2NhcGUgPiAwICYmIGVzY2FwZSA8IDMyKSB8fCAoZXNjYXBl ID09IDEyNykpIHsKLQlwcmludGYoIiBFc2NhcGUgY2hhcmFjdGVyOiBDdHJsLSVjIChBU0NJSSAl ZCwgJXMpOiAlc1xyXG4iLAotCSAgICAgICBjdGwoZXNjYXBlKSwKLQkgICAgICAgZXNjYXBlLAot CSAgICAgICAoZXNjYXBlID09IDEyNyA/ICJERUwiIDogY2NudGFiW2VzY2FwZV0pLAotCSAgICAg ICB0dF9lc2NhcGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiCi0JICAgICAgICk7Ci0gICAgfSBl bHNlIHsKLQlwcmludGYoIiBFc2NhcGUgY2hhcmFjdGVyOiBDb2RlICVkIixlc2NhcGUpOwotCWlm IChlc2NhcGUgPiAxNjAgJiYgZXNjYXBlIDwgMjU2KQotCSAgcHJpbnRmKCIgKCVjKSIsZXNjYXBl KTsKLQlwcmludGYoIjogJXNcclxuIiwgdHRfZXNjYXBlID8gImVuYWJsZWQiIDogImRpc2FibGVk Iik7CQotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZm5kZWYgTk9YRkVSCi0vKiAgUCBS IEUgUyBFIFQgIC0tICBSZXNldCBnbG9iYWwgcHJvdG9jb2wgdmFyaWFibGVzICAqLwotCi1leHRl cm4gaW50IHJlY3Vyc2l2ZTsKLQotI2lmZGVmIFBBVFRFUk5TCi1pbnQgcGF0dGVybnMgPSBTRVRf QVVUTzsgICAgICAgICAgICAgICAgLyogV2hldGhlciB0byB1c2UgZmlsZW5hbWUgcGF0dGVybnMg Ki8KLWV4dGVybiBpbnQgZ19wYXR0ZXJuczsJCQkvKiBGb3Igc2F2aW5nIGFuZCByZXN0b3Jpbmcg Ki8KLSNlbHNlCi1pbnQgcGF0dGVybnMgPSBTRVRfT0ZGOwotI2VuZGlmIC8qIFBBVFRFUk5TICov Ci0KLSNpZm5kZWYgTk9JQ1AKLSNpZmRlZiBDS19MQUJFTEVECi1leHRlcm4gaW50IGdfbGZfb3B0 cywgbGZfb3B0czsKLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi1leHRlcm4gaW50IGdfbWF0Y2hk b3QsIGdfdXNlcGlwZXMsIHVzZXBpcGVzOwotZXh0ZXJuIGludCBnX2JpbmFyeSwgZ19wcm90bywg Z19kaXNwbGEsIGdfc3BhdGgsIGdfcnBhdGgsIGdfZm5jbnY7Ci1leHRlcm4gaW50IGdfcmVjdXJz aXZlOwotZXh0ZXJuIGludCBnX3hmZXJtb2RlLCB4ZmVybW9kZTsKLWV4dGVybiBpbnQgZ191cnBz aXosIGdfc3BzaXpmLCBnX3Nwc2l6OwotZXh0ZXJuIGludCBnX3Nwc2l6ciwgZ19zcG1heCwgZ193 c2xvdHIsIGdfcHJlZml4aW5nLCBnX2ZuY2FjdDsKLWV4dGVybiBpbnQgZ19mbnNwYXRoLCBnX2Zu cnBhdGgsIGdfc2tpcGJ1cDsKLWV4dGVybiBpbnQgbm9saW5rczsKLSNpZmRlZiBDS1NZTUxJTksK LWV4dGVybiBpbnQgemdmc19saW5rOwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotI2lmbmRlZiBO T1NQTAotZXh0ZXJuIGludCBnX3BmbGcsIHB3ZmxnLCBnX3BjcHQsIHB3Y3J5cHQ7Ci1leHRlcm4g Y2hhciAqIGdfcHN3ZCwgcHdidWZbXTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2VuZGlmIC8qIE5P SUNQICovCi0KLWV4dGVybiBpbnQgc3BzaXpmLCBzcHNpenIsIHNwbWF4LCBwcmVmaXhpbmcsIGZu Y2FjdCwgZm5zcGF0aCwgZm5ycGF0aDsKLWV4dGVybiBpbnQgbW92aW5nOyAgICAgICAgICAgICAg ICAgICAgICAvKiBTRU5EIGNyaXRlcmlhICovCi1leHRlcm4gY2hhciBzbmRhZnRlcltdLCBzbmRi ZWZvcmVbXSwgKnNuZGV4Y2VwdFtdLCAqcmN2ZXhjZXB0W107Ci1leHRlcm4gQ0tfT0ZGX1Qgc25k bGFyZ2VyLCBzbmRzbWFsbGVyLCBjYWxpYnJhdGU7Ci1leHRlcm4gaW50IHJtYWlsZiwgcnByaW50 Ziwgc2tpcGJ1cDsKLWV4dGVybiBjaGFyIG9wdGJ1ZltdOwotCi0jaWZkZWYgUElQRVNFTkQKLWV4 dGVybiBjaGFyICogZ19zZmlsdGVyLCAqIGdfcmZpbHRlcjsKLWV4dGVybiBjaGFyICogc25kZmls dGVyLCAqIHJjdmZpbHRlcjsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotZXh0ZXJuIGNoYXIgKiog c25kYXJyYXk7Ci0KLVZPSUQKLWZ0cmVzZXQoKSB7Ci0jaWZuZGVmIE5PSUNQCi0gICAgaW50IGk7 Ci0gICAgZXh0ZXJuIGNoYXIgKiBmaWxlZmlsZTsKLSAgICBleHRlcm4gaW50IHJlbGlhYmxlLCB4 cmVsaWFibGUsIGNfc2F2ZSwgc3Nfc2F2ZSwgc2xvc3RhcnQsIHVyY2xlYXI7Ci0gICAgZXh0ZXJu IGludCBvb3B0cywgb21vZGUsIG9uYW1lLCBvcGF0aCwga2FjdGl2ZSwgYXV0b3BhdGg7Ci0gICAg ZXh0ZXJuIGNoYXIgKiBzbmRfbW92ZTsgICAgICAgICAgICAgLyogRGlyZWN0b3J5IHRvIG1vdmUg c2VudCBmaWxlcyB0byAqLwotICAgIGV4dGVybiBjaGFyICogc25kX3JlbmFtZTsgICAgICAgICAg IC8qIFdoYXQgdG8gcmVuYW1lIHNlbnQgZmlsZXMgdG8gKi8KLSAgICBleHRlcm4gY2hhciAqIHJj dl9tb3ZlOwotICAgIGV4dGVybiBjaGFyICogcmN2X3JlbmFtZTsKLSAgICBleHRlcm4gY2hhciAq IGdfc25kX21vdmU7Ci0gICAgZXh0ZXJuIGNoYXIgKiBnX3NuZF9yZW5hbWU7Ci0gICAgZXh0ZXJu IGNoYXIgKiBnX3Jjdl9tb3ZlOwotICAgIGV4dGVybiBjaGFyICogZ19yY3ZfcmVuYW1lOwotCi0j aWZkZWYgQ0tfVE1QRElSCi0gICAgZXh0ZXJuIGludCBmX3RtcGRpcjsKLSAgICBleHRlcm4gY2hh ciBzYXZkaXJbXTsKLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLQotI2lmZGVmIENLX1NQRUVECi0j aWZkZWYgQ09NTUVOVAotICAgIGV4dGVybiBpbnQgZl9jdGxwOwotICAgIGV4dGVybiBzaG9ydCBz X2N0bHBbXSwgY3RscFtdOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBDS19TUEVF RCAqLwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICBleHRlcm4gaW50IGZjc19zYXZlLCB0Y3Nfc2F2 ZTsKLSAgICBleHRlcm4gaW50IGdfeGZyeGxhLCB4ZnJ4bGE7Ci0jZW5kaWYgLyogTk9DU0VUUyAq LwotCi0vKiBSZXN0b3JlIC8gcmVzZXQgcGVyLWNvbW1hbmQgZmlsZS10cmFuc2ZlciBzd2l0Y2hl cyAqLwotCi0gICAgbWFrZXN0cigmc25kX21vdmUsZ19zbmRfbW92ZSk7Ci0gICAgbWFrZXN0cigm cmN2X21vdmUsZ19yY3ZfbW92ZSk7Ci0gICAgbWFrZXN0cigmc25kX3JlbmFtZSxnX3NuZF9yZW5h bWUpOwotICAgIG1ha2VzdHIoJnJjdl9yZW5hbWUsZ19yY3ZfcmVuYW1lKTsKLQotICAgIGthY3Rp dmUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtlcm1pdCBwcm90b2NvbCBubyBsb25n ZXIgYWN0aXZlICovCi0gICAgb29wdHMgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog Ty1QYWNrZXQgT3B0aW9ucyAqLwotICAgIG9tb2RlID0gLTE7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE8tUGFja2V0IFRyYW5zZmVyIE1vZGUgKi8KLSAgICBvbmFtZSA9IC0xOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBPLVBhY2tldCBGaWxlbmFtZSBPcHRpb25zICovCi0gICAgb3Bh dGggPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgUGF0aG5hbWUgT3B0 aW9ucyAqLwotCi0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgcnNfbGVuID0gMEw7CQkJLyogUkVHRVQg cG9zaXRpb24gKi8KLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8KLQotI2lmZGVmIENPTU1FTlQKLSNp ZmRlZiBDS19TUEVFRAotICAgIGlmIChmX2N0bHApIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8 IDI1NjsgaSsrKQotICAgICAgICAgIGN0bHBbaV0gPSBzX2N0bHBbaV07Ci0gICAgICAgIGZfY3Rs cCA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NQRUVEICovCi0jZW5kaWYgLyogQ09NTUVOVCAq LwotCi0jaWZkZWYgQ0tfVE1QRElSCi0gICAgaWYgKGZfdG1wZGlyKSB7CQkJLyogSWYgd2UgY2hh bmdlZCB0byBkb3dubG9hZCBkaXIgKi8KLQl6Y2hkaXIoKGNoYXIgKikgc2F2ZGlyKTsJLyogR28g YmFjayB3aGVyZSB3ZSBjYW1lIGZyb20gKi8KLQlmX3RtcGRpciA9IDA7Ci0gICAgfQotI2VuZGlm IC8qIENLX1RNUERJUiAqLwotCi0gICAgY2FsaWJyYXRlID0gMEw7ICAgICAgICAgICAgICAgICAg ICAgLyogQ2FsaWJyYXRpb24gcnVuICovCi0gICAgaWYgKHhyZWxpYWJsZSA+IC0xKSB7Ci0JcmVs aWFibGUgPSB4cmVsaWFibGU7Ci0JZGVidWcoRjEwMSwiZnRyZXNldCByZWxpYWJsZSIsIiIscmVs aWFibGUpOwotICAgIH0KLSAgICB1cmNsZWFyID0gMDsKLQotICAgIGlmIChhdXRvcGF0aCkgeyAg ICAgICAgICAgICAgICAgICAgIC8qIFNFVCBSRUNFSVZFIFBBVEhOQU1FUyBBVVRPICovCi0gICAg ICAgIGZucnBhdGggPSBQQVRIX0FVVE87Ci0gICAgICAgIGF1dG9wYXRoID0gMDsKLSAgICB9Ci0g ICAgaWYgKGZpbGVmaWxlKSB7ICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBsaXN0ICovCi0g ICAgICAgIHpjbG9zZShaTUZJTEUpOwotICAgICAgICBtYWtlc3RyKCZmaWxlZmlsZSxOVUxMKTsK LSAgICB9Ci0gICAgaWYgKGNfc2F2ZSA+IC0xKSB7ICAgICAgICAgICAgICAgICAgLyogQmxvY2sg Q2hlY2sgVHlwZSAqLwotICAgICAgICBiY3RyID0gY19zYXZlOwotICAgICAgICBjX3NhdmUgPSAt MTsKLSAgICB9Ci0gICAgaWYgKHNzX3NhdmUgPiAtMSkgeyAgICAgICAgICAgICAgICAgLyogU2xv dyBTdGFydCAqLwotICAgICAgICBzbG9zdGFydCA9IHNzX3NhdmU7Ci0gICAgICAgIHNzX3NhdmUg PSAtMTsKLSAgICB9Ci0jaWZkZWYgQ0tfTEFCRUxFRAotICAgIGlmIChnX2xmX29wdHMgPiAtMSkg ewotICAgICAgICBsZl9vcHRzID0gZ19sZl9vcHRzOyAgICAgICAgICAgIC8qIFJlc3RvcmUgbGFi ZWxlZCB0cmFuc2ZlciBvcHRpb25zICovCi0gICAgICAgIGdfbGZfb3B0cyA9IC0xOwotICAgIH0K LSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0KLSNpZm5kZWYgTk9DU0VUUwotICAgIGlmICh0Y3Nf c2F2ZSA+IC0xKSB7ICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBzZXRzICovCi0gICAgICAg IHRjaGFyc2V0ID0gdGNzX3NhdmU7Ci0gICAgICAgIHRjc19zYXZlID0gLTE7Ci0gICAgfQotICAg IGlmIChmY3Nfc2F2ZSA+IC0xKSB7Ci0gICAgICAgIGZjaGFyc2V0ID0gZmNzX3NhdmU7Ci0gICAg ICAgIGZjc19zYXZlID0gLTE7Ci0gICAgfQotICAgIGlmIChnX3hmcnhsYSA+IC0xKSB7Ci0JeGZy eGxhID0gZ194ZnJ4bGE7Ci0JZ194ZnJ4bGEgPSAtMTsKLSAgICB9Ci0gICAgc2V0eGxhdHlwZSh0 Y2hhcnNldCxmY2hhcnNldCk7ICAgICAgLyogVHJhbnNsYXRpb24gdHlwZSAqLwotI2VuZGlmIC8q IE5PQ1NFVFMgKi8KLQotI2lmZGVmIE5FVENPTk4KLSNpZm5kZWYgTk9TUEwKLSAgICBpZiAoZ19w c3dkKSB7Ci0gICAgICAgIGNrc3RybmNweShwd2J1ZixnX3Bzd2QsUFdCVUZMKTsKLSAgICAgICAg bWFrZXN0cigmZ19wc3dkLE5VTEwpOwotICAgIH0KLSAgICBpZiAoZ19wZmxnID4gLTEpIHsKLSAg ICAgICAgcHdmbGcgPSBnX3BmbGc7Ci0gICAgICAgIGdfcGZsZyA9IC0xOwotICAgIH0KLSAgICBp ZiAoZ19wY3B0ID4gLTEpIHsKLSAgICAgICAgcHdjcnlwdCA9IGdfcGNwdDsKLSAgICAgICAgZ19w Y3B0ID0gLTE7Ci0gICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyogTkVUQ09OTiAq LwotCi0gICAgaWYgKGdfYmluYXJ5ID4gLTEpIHsgICAgICAgICAgICAgICAgLyogRmlsZSB0eXBl ICovCi0gICAgICAgIGJpbmFyeSA9IGdfYmluYXJ5OwotICAgICAgICBnX2JpbmFyeSA9IC0xOwot ICAgIH0KLSAgICBpZiAoZ194ZmVybW9kZSA+IC0xKSB7ICAgICAgICAgICAgICAvKiBUcmFuc2Zl ciBtb2RlICovCi0gICAgICAgIHhmZXJtb2RlID0gZ194ZmVybW9kZTsKLSAgICAgICAgZ194ZmVy bW9kZSA9IC0xOwotICAgIH0KLSNpZmRlZiBQQVRURVJOUwotICAgIGlmIChnX3BhdHRlcm5zID4g LTEpIHsgICAgICAgICAgICAgIC8qIEZpbGVuYW1lIHBhdHRlcm5zICovCi0gICAgICAgIHBhdHRl cm5zID0gZ19wYXR0ZXJuczsKLSAgICAgICAgZ19wYXR0ZXJucyA9IC0xOwotICAgIH0KLSNlbmRp ZiAvKiBQQVRURVJOUyAqLwotCi0gICAgaWYgKGdfdXNlcGlwZXMgPiAtMSkgewotICAgICAgICB1 c2VwaXBlcyA9IGdfdXNlcGlwZXM7Ci0gICAgICAgIGdfdXNlcGlwZXMgPSAtMTsKLSAgICB9Ci0g ICAgaWYgKGdfbWF0Y2hkb3QgPiAtMSkgewotICAgICAgICBtYXRjaGRvdCA9IGdfbWF0Y2hkb3Q7 Ci0gICAgICAgIGdfbWF0Y2hkb3QgPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfcHJvdG8gPiAtMSkg eyAgICAgICAgICAgICAgICAgLyogUHJvdG9jb2wgKi8KLSAgICAgICAgcHJvdG9jb2wgPSBnX3By b3RvOwotICAgICAgICBnX3Byb3RvID0gLTE7Ci0gICAgfQotICAgIGlmIChnX3VycHNpeiA+IC0x KSB7Ci0gICAgICAgIHVycHNpeiA9IGdfdXJwc2l6OwotICAgICAgICBkZWJ1ZyhGMTAxLCJmdHJl c2V0IHJlc3RvcmluZyB1cnBzaXoiLCIiLHVycHNpeik7Ci0gICAgICAgIGdfdXJwc2l6ID0gLTE7 Ci0gICAgfQotICAgIGlmIChnX3Nwc2l6ZiA+IC0xKSB7Ci0gICAgICAgIHNwc2l6ZiA9IGdfc3Bz aXpmOwotICAgICAgICBkZWJ1ZyhGMTAxLCJmdHJlc2V0IHJlc3RvcmluZyBzcHNpemYiLCIiLHNw c2l6Zik7Ci0gICAgICAgIGdfc3BzaXpmID0gLTE7Ci0gICAgfQotICAgIGlmIChnX3Nwc2l6ID4g LTEpIHsKLSAgICAgICAgc3BzaXogPSBnX3Nwc2l6OwotICAgICAgICBkZWJ1ZyhGMTAxLCJmdHJl c2V0IHJlc3RvcmluZyBzcHNpeiIsIiIsc3BzaXopOwotICAgICAgICBnX3Nwc2l6ID0gLTE7Ci0g ICAgfQotICAgIGlmIChnX3Nwc2l6ciA+IC0xKSB7Ci0gICAgICAgIHNwc2l6ciA9IGdfc3BzaXpy OwotICAgICAgICBkZWJ1ZyhGMTAxLCJmdHJlc2V0IHJlc3RvcmluZyBzcHNpenIiLCIiLHNwc2l6 cik7Ci0gICAgICAgIGdfc3BzaXpyID0gLTE7Ci0gICAgfQotICAgIGlmIChnX3NwbWF4ID4gLTEp IHsKLSAgICAgICAgc3BtYXggPSBnX3NwbWF4OwotICAgICAgICBnX3NwbWF4ID0gLTE7Ci0gICAg fQotICAgIGlmIChnX3dzbG90ciA+IC0xKSB7Ci0gICAgICAgIHdzbG90ciA9IGdfd3Nsb3RyOwot ICAgICAgICBnX3dzbG90ciA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19wcmVmaXhpbmcgPiAtMSkg ewotICAgICAgICBwcmVmaXhpbmcgPSBnX3ByZWZpeGluZzsKLSAgICAgICAgZ19wcmVmaXhpbmcg PSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfZm5jYWN0ID4gLTEpIHsKLSAgICAgICAgZm5jYWN0ID0g Z19mbmNhY3Q7Ci0gICAgICAgIGdfZm5jYWN0ID0gLTE7Ci0gICAgfQotICAgIGlmIChnX2ZuY252 ID4gLTEpIHsKLSAgICAgICAgZm5jbnYgPSBnX2ZuY252OwotICAgICAgICBnX2ZuY252ID0gLTE7 Ci0gICAgfQotICAgIGlmIChnX2Zuc3BhdGggPiAtMSkgewotICAgICAgICBmbnNwYXRoID0gZ19m bnNwYXRoOwotICAgICAgICBnX2Zuc3BhdGggPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfZm5ycGF0 aCA+IC0xKSB7Ci0gICAgICAgIGZucnBhdGggPSBnX2ZucnBhdGg7Ci0gICAgICAgIGdfZm5ycGF0 aCA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19za2lwYnVwID4gLTEpIHsKLSAgICAgICAgc2tpcGJ1 cCA9IGdfc2tpcGJ1cDsKLSAgICAgICAgZ19za2lwYnVwID0gLTE7Ci0gICAgfQotICAgIG5vbGlu a3MgPSAyOwkJCS8qIC9GT0xMT1dMSU5LUyBpcyBuZXZlciBnbG9iYWwgKi8KLSAgICByZWN1cnNp dmUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiAvUkVDVVJTSVZFIGNhbiBuZXZlciBiZSBn bG9iYWwgKi8KLSAgICB4ZmlsZXR5cGUgPSAtMTsKLQotICAgIGlmIChnX2Rpc3BsYSA+IC0xKSB7 ICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgZGlzcGxheSAqLwotICAgICAgICBmZGlz cGxhID0gZ19kaXNwbGE7Ci0gICAgICAgIGdfZGlzcGxhID0gLTE7Ci0gICAgfQotICAgIGlmIChn X3NwYXRoID4gLTEpIHsgICAgICAgICAgICAgICAgIC8qIFNlbmQgcGF0aG5hbWVzICovCi0gICAg ICAgIGZuc3BhdGggPSBnX3NwYXRoOwotICAgICAgICBnX3NwYXRoID0gLTE7Ci0gICAgfQotICAg IGlmIChnX3JwYXRoID4gLTEpIHsgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgcGF0aG5hbWVz ICovCi0gICAgICAgIGZucnBhdGggPSBnX3JwYXRoOwotICAgICAgICBnX3JwYXRoID0gLTE7Ci0g ICAgfQotICAgIGlmIChnX2ZuY252ID4gLTEpIHsgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1l IGNvbnZlcnNpb24gKi8KLSAgICAgICAgZm5jbnYgPSBnX2ZuY252OwotICAgICAgICBnX2ZuY252 ID0gLTE7Ci0gICAgfQotI2lmZGVmIFBJUEVTRU5ECi0gICAgbWFrZXN0cigmc25kZmlsdGVyLGdf c2ZpbHRlcik7ICAgICAgLyogU2VuZCBmaWx0ZXIgKi8KLSAgICBtYWtlc3RyKCZyY3ZmaWx0ZXIs Z19yZmlsdGVyKTsgICAgICAvKiBSZWNlaXZlIGZpbHRlciAqLwotI2VuZGlmIC8qIFBJUEVTRU5E ICovCi0KLSNpZm5kZWYgTk9GUklMTFMKLSAgICBybWFpbGYgPSBycHJpbnRmID0gMDsgICAgICAg ICAgICAgICAvKiBNQUlMIGFuZCBQUklOVCBtb2RpZmllcnMgZm9yIFNFTkQgKi8KLSAgICBvcHRi dWZbMF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAvKiBNQUlMIGFuZCBQUklOVCBvcHRpb25z ICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotICAgIG1vdmluZyA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFJlc2V0IGRlbGV0ZS1hZnRlci1zZW5kIGluZGljYXRvciAqLwotICAg IHNuZGFmdGVyWzBdICA9IE5VTDsgICAgICAgICAgICAgICAgIC8qIFJlc2V0IFNFTkQgc2VsZWN0 aW9uIHN3aXRjaGVzICovCi0gICAgc25kYmVmb3JlWzBdID0gTlVMOwotCi0gICAgZm9yIChpID0g MDsgaSA8IE5TTkRFWENFUFQ7IGkrKykgewotICAgICAgICBpZiAoc25kZXhjZXB0W2ldKQotICAg ICAgICAgIGZyZWUoc25kZXhjZXB0W2ldKTsKLSAgICAgICAgc25kZXhjZXB0W2ldID0gTlVMTDsK LSAgICAgICAgaWYgKHJjdmV4Y2VwdFtpXSkKLSAgICAgICAgICBmcmVlKHJjdmV4Y2VwdFtpXSk7 Ci0gICAgICAgIHJjdmV4Y2VwdFtpXSA9IE5VTEw7Ci0gICAgfQotICAgIHNuZGxhcmdlciA9ICAo Q0tfT0ZGX1QpLTE7Ci0gICAgc25kc21hbGxlciA9IChDS19PRkZfVCktMTsKLSAgICBkZWJ1ZyhG MTAxLCJwcmVzZW50IHNuZHNtYWxsZXIiLCIiLHNuZHNtYWxsZXIpOwotI2lmZGVmIEdGVElNRVIK LSAgICBndHYgPSAtMS4wOwotICAgIG9sZGd0diA9IC0xLjA7Ci0jZWxzZQotICAgIGd0diA9IC0x TDsKLSAgICBvbGRndHYgPSAtMUw7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotI2VuZGlmIC8qIE5P SUNQICovCi19Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLWNoYXIgKgotdHRndHBuKCkgewkJCQkv KiBHZXQgdHlwaWNhbCBwb3J0IG5hbWUgKi8KLS8qCi0gIElkZWFsbHkgdGhpcyByb3V0aW5lIHdv dWxkIGJlIGltcGxlbWVudGVkIGluIGVhY2ggb2YgdGhlIGNrdT9pby4qIG1vZHVsZXMsCi0gIGJ1 dCB0aGF0IHJlcXVpcmVzIGNoYW5naW5nIHRoZSBBUEkgZGVmaW5pdGlvbi4KLSovCi0gICAgcmV0 dXJuKAotI2lmZGVmIE9TMgotI2lmZGVmIE9TMk9OTFkKLSJDT00xIgotI2Vsc2UgIC8qIE9TMk9O TFkgKi8KLSJUQVBJIFsgbmFtZSBdIG9yIENPTTEiCi0jZW5kaWYgLyogT1MyT05MWSAqLwotI2Vs c2UgIC8qIE9TMiAqLwotI2lmZGVmIFZNUwotIlRYQTA6LCBUVEEwOiwgb3IgTFRBMDoiCi0jZWxz ZSAgLyogVk1TICovCi0jaWZkZWYgU09MQVJJUwotIi9kZXYvY3VhL2EiCi0jZWxzZSAgLyogU09M QVJJUyAqLwotI2lmZGVmIEhQVVgxMAotIi9kZXYvY3VhMHAwIgotI2Vsc2UgIC8qIEhQVVgxMCAq LwotI2lmZGVmIEhQVVgKLSIvZGV2L2N1YTAwIgotI2Vsc2UgIC8qIEhQVVggKi8KLSNpZmRlZiBf X0ZyZWVCU0RfXwotIi9kZXYvY3VhYTAiCi0jZWxzZSAgLyogX19GcmVlQlNEX18gKi8KLSNpZmRl ZiBfX2xpbnV4X18KLSIvZGV2L3R0eVMwIgotI2Vsc2UgIC8qIF9fbGludXhfXyAqLwotI2lmZGVm IEJTRDQ0Ci0iL2Rldi90dHkwMCIKLSNlbHNlICAvKiBCU0Q0NCAqLwotI2lmZGVmIE9TSwotIi90 MSIKLSNlbHNlICAvKiBPU0sgKi8KLSNpZmRlZiBRTlgKLSIvZGV2L3NlcjEiCi0jZWxzZSAgLyog UU5YICovCi0jaWZkZWYgUU5YNgotIi9kZXYvc2VyMSIKLSNlbHNlICAvKiBRTlg2ICovCi0jaWZk ZWYgVU5JWFdBUkUKLSIvZGV2L3Rlcm0vMDAgb3IgL2Rldi90dHkwMCIKLSNlbHNlICAvKiBVTklY V0FSRSAqLwotI2lmZGVmIENLX1NDT1Y1Ci0iL2Rldi90dHkxQSIKLSNlbHNlICAvKiBDS19TQ09W NSAqLwotI2lmZGVmIENLX1NDTzMyVjQKLSIvZGV2L3R0eTFBIgotI2Vsc2UgIC8qIENLX1NDTzMy VjQgKi8KLSNpZmRlZiBNX1hFTklYCi0iL2Rldi90dHkxQSIKLSNlbHNlICAvKiBNX1hFTklYICov Ci0jaWZkZWYgQUlYUlMKLSIvZGV2L3R0eTAiCi0jZWxzZSAgLyogQUlYUlMgKi8KLSNpZmRlZiBE R1VYCi0iL2Rldi90dHkwMCIKLSNlbHNlICAvKiBER1VYICovCi0jaWZkZWYgZGF0YWdlbmVyYWwK LSJAY29uMSIKLSNlbHNlICAvKiBkYXRhZ2VuZXJhbCAqLwotI2lmZGVmIElSSVgKLSIvZGV2L3R0 eW0wIgotI2Vsc2UgIC8qIElSSVggKi8KLSNpZmRlZiBTVU5PUzQKLSIvZGV2L3R0eWgwIgotI2Vs c2UgIC8qIFNVTk9TNCAqLwotI2lmZGVmIFNWNjhSM1Y2Ci0iL2Rldi9zY2MwIgotI2Vsc2UgIC8q IFNWNjhSM1Y2ICovCi0jaWZkZWYgTU9UU1Y4OFI0Ci0iL2Rldi9jb250dHkwMCIKLSNlbHNlICAv KiBNT1RTVjg4UjQgKi8KLSNpZmRlZiBORVhUCi0iL2Rldi9jdWZhIgotI2Vsc2UKLSNpZmRlZiBP U0YKLSIvZGV2L3R0eWQxIgotI2Vsc2UKLSNpZmRlZiBTSU5JWAotIi9kZXYvdHR5YzEiCi0jZWxz ZQotI2lmZGVmIFVOSVgKLSIvZGV2L2N1YSwgL2Rldi9hY3UsIC9kZXYvdHR5MCwgZXRjIgotI2Vs c2UgIC8qIFVOSVggKi8KLSIoc29ycnkgbm8gZXhhbXBsZSBhdmFpbGFibGUpIgotI2VuZGlmIC8q IFVOSVggKi8KLSNlbmRpZiAvKiBTSU5JWCAqLwotI2VuZGlmIC8qIE9TRiAqLwotI2VuZGlmIC8q IE5FWFQgKi8KLSNlbmRpZiAvKiBNT1RTVjg4UjQgKi8KLSNlbmRpZiAvKiBTVjY4UjNWNiAqLwot I2VuZGlmIC8qIFNVTk9TNCAqLwotI2VuZGlmIC8qIElSSVggKi8KLSNlbmRpZiAvKiBkYXRhZ2Vu ZXJhbCAqLwotI2VuZGlmIC8qIERHVVggKi8KLSNlbmRpZiAvKiBBSVggKi8KLSNlbmRpZiAvKiBN X1hFTklYICovCi0jZW5kaWYgLyogQ0tfU0NPMzJWNCAqLwotI2VuZGlmIC8qIENLX1NDT1Y1ICov Ci0jZW5kaWYgLyogVU5JWFdBUkUgKi8KLSNlbmRpZiAvKiBRTlg2ICovCi0jZW5kaWYgLyogUU5Y ICovCi0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBfX2xp bnV4X18gKi8KLSNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLwotI2VuZGlmIC8qIEhQVVggKi8KLSNl bmRpZiAvKiBIUFVYMTAgKi8KLSNlbmRpZiAvKiBTT0xBUklTICovCi0jZW5kaWYgLyogVk1TICov Ci0jZW5kaWYgLyogT1MyICovCi0JICAgKTsKLX0KLQotLyogIEMgSyBfIEUgUiBSIFMgVCBSICAt LSAgUmV0dXJuIG1lc3NhZ2UgZnJvbSBtb3N0IHJlY2VudCBzeXN0ZW0gZXJyb3IgKi8KLQotI2lm ZGVmIENLUk9PVAotZXh0ZXJuIGludCBja3Jvb3RlcnI7Ci0jZW5kaWYgLyogQ0tST09UICovCi0K LWNoYXIgKgotY2tfZXJyc3RyKCkgewotI2lmZGVmIFVTRV9TVFJFUlJPUgotI2lmbmRlZiBDS19B TlNJTElCUwotICAgIC8qIFNob3VsZCBoYXZlIGJlZW4gZGVjbGFyZWQgaW4gPHN0cmluZy5oPiAq LwotX1BST1RPVFlQKCBjaGFyICogc3RyZXJyb3IsIChpbnQpICk7Ci0jZW5kaWYgLyogQ0tfQU5T SUxJQlMgKi8KLSNpZmRlZiBDS1JPT1QKLSAgICBpZiAoY2tyb290ZXJyKQotICAgICAgcmV0dXJu KCJPZmYgbGltaXRzIik7Ci0jZW5kaWYgLyogQ0tST09UICovCi0gICAgcmV0dXJuKHN0cmVycm9y KGVycm5vKSk7Ci0jZWxzZSAgLyogIVVTRV9TVFJFUlJPUiAqLwotI2lmZGVmIFZNUwotICAgIGV4 dGVybiBjaGFyICogY2t2bXNlcnJzdHIodW5zaWduZWQgbG9uZyk7Ci0jaWZkZWYgQ0tST09UCi0g ICAgaWYgKGNrcm9vdGVycikKLSAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOwotI2VuZGlmIC8q IENLUk9PVCAqLwotICAgIHJldHVybihja3Ztc2VycnN0cigwTCkpOwotI2Vsc2UgIC8qICFWTVMg Ki8KLSNpZmRlZiBCU0Q0NAotI2lmZGVmIF9fMzg2QlNEX18KLSNpZm5kZWYgTkRTWVNFUlJMSVNU Ci0gICAgZXh0ZXJuIGludCBzeXNfbmVycjsKLSAgICBleHRlcm4gY2hhciAqc3lzX2Vycmxpc3Rb XTsKLSNlbmRpZiAvKiBORFNZU0VSUkxJU1QgKi8KLSNlbHNlICAvKiAhX18zODZCU0RfXyAqLwot I2lmbmRlZiBfX2JzZGlfXwotI2lmbmRlZiBORFNZU0VSUkxJU1QKLSAgICBleHRlcm4gaW50IHN5 c19uZXJyOwotICAgIGV4dGVybiBjb25zdCBjaGFyICpjb25zdCBzeXNfZXJybGlzdFtdOwotI2Vu ZGlmIC8qIE5EU1lTRVJSTElTVCAqLwotI2VuZGlmIC8qIF9fYnNkaV9fICovCi0jZW5kaWYgLyog X18zODZCU0RfXyAqLwotI2lmZGVmIENLUk9PVAotICAgIGlmIChja3Jvb3RlcnIpCi0gICAgICBy ZXR1cm4oIk9mZiBsaW1pdHMiKTsKLSAgICBlbHNlCi0jZW5kaWYgLyogQ0tST09UICovCi0gICAg aWYgKGVycm5vID49IHN5c19uZXJyKQotICAgICAgcmV0dXJuKCJFcnJvciBudW1iZXIgb3V0IG9m IHJhbmdlIik7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKChjaGFyICopIHN5c19lcnJsaXN0W2Vy cm5vXSk7Ci0jZWxzZSAvKiAhQlNENDQgKi8KLSNpZmRlZiBBVFRTVgotI2lmbmRlZiBORFNZU0VS UkxJU1QKLSAgICBleHRlcm4gaW50IHN5c19uZXJyOwotICAgIGV4dGVybiBjaGFyICpzeXNfZXJy bGlzdFtdOwotI2VuZGlmIC8qIE5EU1lTRVJSTElTVCAqLwotI2lmZGVmIENLUk9PVAotICAgIGlm IChja3Jvb3RlcnIpCi0gICAgICByZXR1cm4oIk9mZiBsaW1pdHMiKTsKLSAgICBlbHNlCi0jZW5k aWYgLyogQ0tST09UICovCi0gICAgaWYgKGVycm5vID49IHN5c19uZXJyKQotICAgICAgcmV0dXJu KCJFcnJvciBudW1iZXIgb3V0IG9mIHJhbmdlIik7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKChj aGFyICopIHN5c19lcnJsaXN0W2Vycm5vXSk7Ci0jZWxzZSAvKiAhQVRUU1YgKi8KLSNpZmRlZiBC U0Q0Ci0jaWZuZGVmIE5EU1lTRVJSTElTVAotICAgIGV4dGVybiBpbnQgc3lzX25lcnI7Ci0gICAg ZXh0ZXJuIGNoYXIgKnN5c19lcnJsaXN0W107Ci0jZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCi0j aWZkZWYgQ0tST09UCi0gICAgaWYgKGNrcm9vdGVycikKLSAgICAgIHJldHVybigiT2ZmIGxpbWl0 cyIpOwotICAgIGVsc2UKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAgICBpZiAoZXJybm8gPj0gc3lz X25lcnIpCi0gICAgICByZXR1cm4oIkVycm9yIG51bWJlciBvdXQgb2YgcmFuZ2UiKTsKLSAgICBl bHNlCi0gICAgICByZXR1cm4oKGNoYXIgKikgc3lzX2Vycmxpc3RbZXJybm9dKTsKLSNlbHNlCi0j aWZkZWYgT1MyCi0jaWZuZGVmIE5EU1lTRVJSTElTVAotICAgIGV4dGVybiBjaGFyICpzeXNfZXJy bGlzdFtdOwotI2VuZGlmIC8qIE5EU1lTRVJSTElTVCAqLwotI2lmZGVmIE5UCi0gICAgZXh0ZXJu IGludF9zeXNfbmVycjsKLSNlbmRpZiAvKiBOVCAqLwotICAgIGNoYXIgKmU7Ci0jaWZkZWYgQ0tS T09UCi0gICAgaWYgKGNrcm9vdGVycikKLSAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOwotI2Vu ZGlmIC8qIENLUk9PVCAqLwotICAgIGUgPSAoZXJybm8gPiAtMQotI2lmZGVmIE5UCi0gICAgICAg ICAmJiBlcnJubyA8PSBfc3lzX25lcnIKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgKSA/Ci0j aWZkZWYgTlQKLSAgICAgICAgIChjaGFyICopIHN5c19lcnJsaXN0W2Vycm5vXQotI2Vsc2UgLyog TlQgKi8KLSAgICAgICAgIC8qIEkgZG9uJ3Qga25vdyBob3cgdG8gZ2V0IGEgQ0xJQiBlcnJvciBz dHJpbmcgaW4gT1MvMiAqLwotICAgICAgICAgc3RyZXJyb3IoZXJybm8pCi0jZW5kaWYgLyogTlQg Ki8KLSAgICAgICAgICAgICA6ICIiOwotICAgIHJldHVybihlID8gZSA6ICIiKTsKLSNlbHNlIC8q IE9TMiAqLwotICAgIHJldHVybigiIik7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQlNE NCAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBW TVMgKi8KLSNlbmRpZiAvKiBVU0VfU1RSRVJST1IgKi8KLX0KLQotI2lmZGVmIFBBVFRFUk5TCi0v KgotICBGaWxlbmFtZSBwYXR0ZXJuIHJlY29nbml0aW9uIGxpc3RzIGZvciBhdXRvbWF0aWMgdGV4 dC9iaW5hcnkgc3dpdGNoaW5nLgotICBUaGVzZSBhcmUgc29tZXdoYXQgcGFzc2UgYWZ0ZXIgdGhl IGFkZGl0aW9uIG9mIHNjYW5maWxlKCkgICg3LjApLgotICBCdXQgd2l0aCB0aGUgYWRkaXRpb24g b2YgRlRQIFtNXUdFVCwgdGhleSdyZSBiYWNrIGluIHN0eWxlICg4LjApLgotCi0gIEFsdGhvdWdo LCB3aXRoIEZUUCB0aGUgbGlzdHMgbmVlZCB0byBiZSB1c2VkIGluIHRoZSByZXZlcnNlLiAgV2l0 aAotICBLZXJtaXQgdGhlIGxpc3QgaXMgdXNlZCB0byBpbXBseSB0aGUgdHlwZXMgb2YgdGhlIGxv Y2FsIHN5c3RlbS4gIFdoZXJlYXMKLSAgd2l0aCBGVFAsIHRoZSBsaXN0IG11c3QgYmUgdXNlZCB0 byBpbXBseSB0aGUgdHlwZSBvZiB0aGUgcmVtb3RlIHN5c3RlbS4KLSAgVGhlcmVmb3JlLCBhbGwg cGxhdGZvcm1zIG11c3Qgbm93IHN1cHBvcnQgYWxsIG9mIHRoZSBsaXN0cy4KLSovCi1jaGFyICp0 eHRwYXR0ZXJuc1tGVFBBVFRFUk5TKzFdID0geyBOVUxMLCBOVUxMIH07Ci1jaGFyICpiaW5wYXR0 ZXJuc1tGVFBBVFRFUk5TKzFdID0geyBOVUxMLCBOVUxMIH07Ci0vKgotICBEZWZhdWx0IHBhdHRl cm4gbGlzdHMgZm9yIGVhY2ggcGxhdGZvcm0uLi4KLQotICBOT1RFOiBJbiBtb3N0IGNhc2VzIHdl IGxlYXZlICIuaGxwIiwgIi5pbmkiLCBhbmQgIi5zY3IiIGFsb25lOyBhbHRob3VnaCB0aGV5Ci0g IGFyZSB0cmFkaXRpb25hbGx5IHRleHQgdHlwZXMsIHRoZXkgYXJlIGJpbmFyeSBpbiBXaW5kb3dz LiAgU28gdGhleSBhcmUKLSAgaGFuZGxlZCBieSB0aGUgcHJldmFpbGluZyBTRVQgRklMRSBUWVBF LCByYXRoZXIgdGhhbiBhdXRvbWF0aWNhbGx5LgotICBTaW1pbGFybHkgZm9yICIuZGF0IiwgIi5p bmYiLCBhbmQgc28gb24uICBBbHNvICIucHMiIHNpbmNlIFBvc3RTY3JpcHQgZmlsZXMKLSAgYXJl IG5vdCBhbHdheXMgdGV4dC4gICIubG9nIiBpcyBvbWl0dGVkIHNpbmNlIGxvZ3MgY2FuIGJlIHRl eHQgb3IgYmluYXJ5LAotICBleGNlcHQgaW4gVk1TIHRoZXkgYXJlIHVzdWFsbHkgdGV4dCwgZXRj IGV0Yy4KLQotICBMYXRlciAoU2VwIDIwMDMpOiBBZGQgUG9zdFNjcmlwdCB0byBiaW5hcnkgcGF0 dGVybnMuCi0qLwotc3RhdGljIGNoYXIgKnR4dHBbU1lTX01BWF1bRlRQQVRURVJOU10gPSB7Ci0g ICAgLyogVU5LTk9XTiAqLyB7Ci0JTlVMTCwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogVU5J WCAqLwotICAgICIqLnR4dCIsIiouYyIsIiouaCIsIiouciIsIioudyIsIiouY3BwIiwiKi5jYyIs Iioua3NjIiwiKi5id3IiLCIqLnVwZCIsCi0gICAgIiouaHRtbCIsIiouaHRtIiwiKi5tc3MiLCIq LnRleCIsIioubnIiLCJbTW1dYWtlZmlsZSIsICIqLmhleCIsICIqLmhxeCIsCi0gICAgIiouZm9y IiwiKi5mNzciLCIqLmYiLCIqLkYiLCIqLnMiLCIqLnBhcyIsIiouamF2YSIsIiouZWwiLCIqLmxp c3AiLCIqLnNoIiwKLSAgICAiKi5tNCIsIioucGVybCIsIioucGwiLCIqLnBvZCIsIioucG0iLCIq LmF3ayIsIiouc25vIiwiKi5zcHQiLCIqLnNlZCIsCi0gICAgIioua3NjIiwiKi5UWFQiLCAiKnJl YWQubWUiLCAiKlJFQUQuTUUiLCAiLioiLCAiKi8uKiIsICIqLm1lbSIsIioubWFjIiwKLSAgICBO VUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBXSU4zMiAqLwotICAgICIqLnR4dCIsIioua3NjIiwi Ki5odG0iLCIqLmh0bWwiLCIqLmJhdCIsIiouY21kIiwiKi5qYXYiLCIqLmFzbSIsICIqLmhleCIs Ci0gICAgIiouaHF4IiwgIiouYyIsICIqLmgiLCAiKi5jcHAiLCAiKi5ocHAiLCAiKi5jeHgiLCAi Ki5jeHgiLCAiKi53IiwKLSAgICAiKi5qYXZhIiwgIiouYndyIiwgIioudXBkIiwgIioubWFrIiwg InJlYWQubWUiLCAiKi5tYXAiLCAibWFrZWZpbGUiLAotICAgICIqLm1lbSIsIioubWFjIiwiKi5j YyIsIioucGwiLCIqLnBvZCIsIioucG0iLCIqLm00IixOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkv KiBWTVMgKi8KLSAgICAiKi5jb20iLCIqLnR4dCIsIiouYyIsICAiKi5mb3IiLCIqLnBhcyIsIiou cm5vIiwiKi5ybmgiLCIqLm1hciIsIiouYmxpIiwKLSAgICAiKi5obHAiLCIqLm1zcyIsIiouZG9j IiwiKi5id3IiLCIqLmNsZCIsIiouaGV4IiwiKi5iYXMiLCIqLmluaSIsIioubG9nIiwKLSAgICAi Ki5tbXMiLCIqLm9wdCIsIioua3NjIiwiKi5wZXJsIiwiKi5wbCIsIioucG9kIiwiKi5wbSIsIiou c25vIiwiKi5zcHQiLAotICAgICIqLm1lbSIsTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogT1My ICovCi0gICAgIioudHh0IiwiKi5rc2MiLCIqLmh0bSIsIiouaHRtbCIsIiouYmF0IiwiKi5jbWQi LCIqLmphdiIsIiouYXNtIiwgIiouaGV4IiwKLSAgICAiKi5ocXgiLCAiKi5jIiwgIiouaCIsICIq LmNwcCIsICIqLmhwcCIsICIqLmN4eCIsICIqLmN4eCIsICIqLnciLAotICAgICIqLmphdmEiLCAi Ki5id3IiLCAiKi51cGQiLCAiKi5tYWsiLCAicmVhZC5tZSIsICIqLm1hcCIsICJtYWtlZmlsZSIs Ci0gICAgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogRE9TICovCi0gICAgIioudHh0IiwiKi5r c2MiLCIqLmh0bSIsIiouYmF0IiwiKi5jbWQiLCIqLmphdiIsIiouYXNtIiwgIiouaGV4IiwKLSAg ICAiKi5ocXgiLCAiKi5jIiwgIiouaCIsICIqLmNwcCIsICIqLmhwcCIsICIqLmN4eCIsICIqLmN4 eCIsICIqLnciLAotICAgICIqLmJ3ciIsICIqLnVwZCIsICIqLm1hayIsICJyZWFkLm1lIiwgIiou bWFwIiwgIm1ha2VmaWxlIiwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogVE9QUy0xMCAqLwot ICAgICIqLmNtZCIsIiouaGxwIiwiKi5kb2MiLCIqLmluaSIsIioudHh0IiwiKi5tYWMiLCIqLmZv ciIsIiouc2FpIiwiKi5ibGkiLAotICAgICIqLnBhcyIsIiouc25vIiwiKi5zcHQiLCIqLnBjbCIs IioubXNzIiwiKi5ybm8iLCIqLmIzNiIsIioudGV4IiwiKi5wdWIiLAotICAgICIqLnJlcSIsIiou cjM2IiwiKi5tZW0iLCIqLmJ3ciIsIiouY2NsIiwiKi5jdGwiLCIqLnJuaCIsIioua3NjIixOVUxM Ci0gICAgfSwKLSAgICB7CQkJCQkvKiBUT1BTLTIwICovCi0gICAgIiouY21kIiwiKi5obHAiLCIq LmRvYyIsIiouaW5pIiwiKi50eHQiLCIqLm1hYyIsIiouZm9yIiwiKi5zYWkiLCIqLmJsaSIsCi0g ICAgIioucGFzIiwiKi5zbm8iLCIqLnNwdCIsIioucGNsIiwiKi5tc3MiLCIqLnJubyIsIiouYjM2 IiwiKi50ZXgiLCIqLnB1YiIsCi0gICAgIioucmVxIiwiKi5yMzYiLCIqLm1lbSIsIiouYndyIiwi Ki5jY2wiLCIqLmN0bCIsIioucm5oIiwiKi5rc2MiLE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8q IFNUUkFUVVMgVk9TICovCi0gICAgIioudHh0IiwiKi5rc2MiLCIqLmh0bSIsIiouaHRtbCIsIiou YmF0IiwgIiouY21kIiwiKi5qYXYiLCIqLmFzbSIsIiouaGV4IiwKLSAgICAiKi5ocXgiLCIqLmMi LCAgIiouaCIsICAiKi53IiwgICAiKi5qYXZhIiwiKi5id3IiLCIqLnVwZCIsIioudHRwIiwiKi5j bSIsCi0gICAgIioucGwxIiwiKi5lbWFjcyIsICJyZWFkLm1lIiwgIioucGwiLCAibWFrZWZpbGUi LCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBERyBBT1MvVlMgKi8KLSAgICAiKi50eHQiLCAi Ki5jIiwgIiouaCIsICIqLnciLCAiKi5lciIsICIqLmJ3ciIsICIqLnVwZCIsICJyZWFkLm1lIiwK LSAgICAiKi5jbGkiLCAiKi5rc2MiLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBPU0sgKi8K LSAgICAiKi5jIiwiKi5jcHAiLCIqLmgiLCIqLmEiLCIqYWtlZmlsZSIsIC8qIHByb2dyYW0gc291 cmNlcyAqLwotICAgICIqLmZvciIsIiouZjc3IiwiKi5mIiwiKi5GIiwiKi5zIiwiKi5wYXMiLCIq LmphdmEiLCIqLmVsIiwiKi5saXNwIiwKLSAgICAiKi5zaCIsIioucGVybCIsIiouYXdrIiwiKi5z bm8iLCIqLnNwdCIsIiouc2VkIiwKLSAgICAiKi50eHQiLCIqLnciLAkJCS8qIGdlbmVyYWwgdGV4 dCAqLwotICAgICIqLmtzYyIsIiouYndyIiwiKi51cGQiLAotICAgICIqLmh0bWwiLCIqLmh0bSIs IioubXNzIiwiKi50ZXgiLCIqLm5yIiwiKi5oZXgiLCAiKi5ocXgiLAotICAgICIqLlRYVCIsICIq cmVhZC5tZSIsICIqUkVBRC5NRSIsICIuKiIsICIqLy4qIiwKLSAgICBOVUxMCi0gICAgfQotfTsK LQotLyogTm90ZTogLkRPQyBhZGRlZCB0byAoc29tZSkgYmluYXJ5IHBhdHRlcm5zIEp1bmUgMTk5 OC4uLiBNaWNyb3NvZnQgd2lucy4gKi8KLQotc3RhdGljIGNoYXIgKmJpbnBbU1lTX01BWF1bRlRQ QVRURVJOU10gPSB7Ci0gICAgewkJCQkJLyogVU5LTk9XTiAqLwotICAgIE5VTEwsIE5VTEwKLSAg ICB9LAotICAgIHsJCQkJCS8qIFVOSVggKi8KLSAgICAiKi5neiIsIiouWiIsIioudGd6IiwiKi5n aWYiLCAiKi50YXIiLCIqLnppcCIsIioubyIsIiouc28iLCIqLmEiLCIqLm91dCIsCi0gICAgIiou ZXhlIiwgIiouanBnIiwgIiouanBlZyIsICIqLnRpZiIsIioudGlmZiIsICIqLnBkZiIsICIqLnNv LioiLCAiKi5jbGFzcyIsCi0gICAgIioucnBtIiwgIiouYm1wIiwgIiouYnoyIiwgIiouQk1QIiwg IiouZGxsIiwgIiouZG9jIiwgIioudnhkIiwgIiouZGN4IiwKLSAgICAiKi54bCoiLCAiKi5semgi LCAiKi5saHoiLCAiKi5hdSIsICIqLnZvYyIsICIqLm1wZyIsICIqLm1wZWciLCJbd2tdZXJtaXQi LAotICAgICIqLnBzIiwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogV0lOMzIgKi8KLSAgICAi Ki5leGUiLCAiKi56aXAiLCAiKi5vYmoiLCAiKi5jb20iLCAiKi5naWYiLCAiKi5qcGciLCAiKi53 YXYiLCAiKi5yYW0iLAotICAgICIqLmNsYXNzIiwiKi5jbGEiLCIqLmRsbCIsICIqLmRydiIsICIq Lm9jeCIsICIqLnZieCIsICIqLmxpYiIsICIqLmljbyIsCi0gICAgIiouYm1wIiwgIioudGlmIiwg IioudGFyIiwgIiouZ3oiLCAgIioudGd6IiwgIioueGwqIiwgIiouZG9jIiwgIioudnhkIiwKLSAg ICAiKi5wZGYiLCAiKi5semgiLCAiKi52eGQiLCAiKi5zbmQiLCAiKi5hdSIsICIqIC52b2MiLCAi Ki5tcGciLCAiKi5tcGVnIiwKLSAgICAiKi5wcyIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8q IFZNUyAqLwotICAgICIqLmV4ZSIsIioub2JqIiwiKi5iYWsiLCIqLmJpbiIsIiouYWRmIiwiKi5z dGIiLCIqLm1haSIsIiouc3lzIiwiKi5kbXAiLAotICAgICIqLnBzIiwgIiouZGF0IiwiKi5wYXIi LCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBPUzIgKi8KLSAgICAiKi5leGUiLCAiKi56aXAi LCAiKi5vYmoiLCAiKi5jb20iLCAiKi5naWYiLCAiKi5qcGciLCAiKi53YXYiLCAiKi5yYW0iLAot ICAgICIqLmNsYXNzIiwgIiouY2xhIiwgIiouZGxsIiwgIiouZHJ2IiwgIioub2N4IiwgIioudmJ4 IiwgIioubGliIiwgIiouaWNvIiwKLSAgICAiKi5ibXAiLCAiKi50aWYiLCAiKi50YXIiLCAiKi5n eiIsICIqLnRneiIsICIqLnhsKiIsICIqLmRvYyIsICIqLnZ4ZCIsCi0gICAgIioucGRmIiwgIiou cHMiLCAiKi5semgiLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBET1MgKi8KLSAgICAiKi5l eGUiLCAiKi56aXAiLCAiKi5vYmoiLCAiKi5jb20iLCAiKi5naWYiLCAiKi5qcGciLCAiKi53YXYi LCAiKi5yYW0iLAotICAgICIqLmNsYSIsICIqLmRsbCIsICIqLmRydiIsICIqLm9jeCIsICIqLnZi eCIsICIqLmxpYiIsICIqLmljbyIsCi0gICAgIiouYm1wIiwgIioudGlmIiwgIioudGFyIiwgIiou Z3oiLCAiKi50Z3oiLCAiKi54bCoiLCAiKi5kb2MiLCAiKi52eGQiLAotICAgICIqLnBkZiIsICIq LnBzIiwgIioubHpoIiwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogVE9QUzEwICovCi0gICAg IiouZXhlIiwiKi5zYXYiLCIqLmJpbiIsIioucmltIiwiKi5yZWwiLCIqLnVudiIsIioubGliIiwi Ki50YXAiLCIqLmR2aSIsCi0gICAgIioucHMiLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBU T1BTMjAgKi8KLSAgICAiKi5leGUiLCIqLnNhdiIsIiouYmluIiwiKi5yaW0iLCIqLnJlbCIsIiou dW52IiwiKi5saWIiLCIqLnRhcCIsIiouZHZpIiwKLSAgICAiKi5wcyIsIE5VTEwKLSAgICB9LAot ICAgIHsJCQkJCS8qIFNUUkFUVVMgVk9TICovCi0gICAgIiouZXhlIiwgIiouemlwIiwgIioub2Jq IiwgIiouY29tIiwgIiouZ2lmIiwgIiouanBnIiwgIioud2F2IiwgIioucmFtIiwKLSAgICAiKi5j bGFzcyIsICIqLmNsYSIsICIqLmRsbCIsICIqLmRydiIsICIqLm9jeCIsICIqLnZieCIsICIqLmxp YiIsICIqLmljbyIsCi0gICAgIiouYm1wIiwgIioudGlmIiwgIioudGFyIiwgIiouZ3oiLCAiKi50 Z3oiLCAiKi54bCoiLCAiKi5kb2MiLCAiKi52eGQiLAotICAgICIqLnBkZiIsICIqLnBzIiwgIiou bHpoIiwgIioucG0iLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBERyAqLwotICAgICIqLm9i IiwgIioucHIiLCAiKi5kbXAiLCAiKi5wcyIsIE5VTEwKLSAgICB9LAotICAgIHsgLyogT1NLICov Ci0gICAgIiouZ3oiLCIqLloiLCIqLnoiLCIqLnRneiIsIioubGh6IiwiKi50YXIiLAkvKiBhcmNo aXZlcnMgKi8KLSAgICAiKi56aXAiLCIqLmFyIiwiKi56b28iLCIqLnJwbSIsIioubHpoIiwKLSAg ICAvKiBvYmplY3QgZmlsZXMsIGxpYnJhcmllcywgZXhlY3V0YWJsZXMgKi8KLSAgICAiKi5yIiwi Ki5sIiwiKi5leGUiLCAiKi5kbGwiLCAiKi5zby4qIiwgIiouY2xhc3MiLAotICAgIC8qIGltYWdl cyAqLwotICAgICIqLmdpZiIsICIqLmpwZyIsICIqLmpwZWciLCAiKi50aWYiLCIqLnRpZmYiLCAi Ki5wZGYiLCAiKi5wcyIsCi0gICAgIiouYm1wIiwgIiouYnoyIiwgIiouQk1QIiwiKi5wY3giLAot ICAgIE5VTEwKLSAgICB9Ci19OwotCi0vKgotICBTZXQgdXAgZGVmYXVsdCBwYXR0ZXJuIGxpc3Rz IHNvIHRoZXkgY2FuIGJlIGZyZWVkIGFuZCByZS1tYWxsb2MnZC4KLSAgRWFjaCBwYXR0ZXJuIGxp c3QgbXVzdCB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBlbGVtZW50LgotKi8KLVZPSUQKLWluaXRwYXQo KSB7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlM7IGkrKykgewot ICAgICAgICB0eHRwYXR0ZXJuc1tpXSA9IE5VTEw7Ci0gICAgICAgIGJpbnBhdHRlcm5zW2ldID0g TlVMTDsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlM7IGkrKykgewotI2lm ZGVmIFVOSVgKLSAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19VTklY XVtpXSk7Ci0jZWxzZSAvKiBVTklYICovCi0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSAgICAgICAg bWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19XSU4zMl1baV0pOwotI2Vsc2UgLyog TlQgKi8KLSAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19PUzJdW2ld KTsKLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UgLyogT1MyICovCi0jaWZkZWYgVk1TCi0gICAgICAg IG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfVk1TXVtpXSk7Ci0jZWxzZSAvKiBW TVMgKi8KLSNpZmRlZiBTVFJBVFVTCi0gICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSks dHh0cFtTWVNfVk9TXVtpXSk7Ci0jZWxzZSAvKiBTVFJBVFVTICovCi0jaWZkZWYgZGF0YWdlbmVy YWwKLSAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19ER11baV0pOwot I2Vsc2UgLyogZGF0YWdlbmVyYWwgKi8KLSNpZmRlZiBPU0sKLSAgICAgICAgbWFrZXN0cigmKHR4 dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19PU0tdW2ldKTsKLSNlbHNlIC8qIE9TSyAqLwotICAgICAg ICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX1VOS11baV0pOwotI2VuZGlmIC8q IE9TSyAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwot I2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAg ICAgICAgaWYgKCF0eHRwW2ldKQotICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBmb3IgKGkg PSAwOyBpIDwgRlRQQVRURVJOUzsgaSsrKSB7Ci0jaWZkZWYgVU5JWAotICAgICAgICBtYWtlc3Ry KCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX1VOSVhdW2ldKTsKLSNlbHNlIC8qIFVOSVggKi8K LSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0p LGJpbnBbU1lTX1dJTjMyXVtpXSk7Ci0jZWxzZSAvKiBOVCAqLwotICAgICAgICBtYWtlc3RyKCYo YmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX09TMl1baV0pOwotI2VuZGlmIC8qIE5UICovCi0jZWxz ZSAvKiBPUzIgKi8KLSNpZmRlZiBWTVMKLSAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ld KSxiaW5wW1NZU19WTVNdW2ldKTsKLSNlbHNlIC8qIFZNUyAqLwotI2lmZGVmIFNUUkFUVVMKLSAg ICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19WT1NdW2ldKTsKLSNlbHNl IC8qIFNUUkFUVVMgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgICAgICBtYWtlc3RyKCYoYmlu cGF0dGVybnNbaV0pLGJpbnBbU1lTX0RHXVtpXSk7Ci0jZWxzZSAvKiBkYXRhZ2VuZXJhbCAqLwot I2lmZGVmIE9TSwotICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX09T S11baV0pOwotI2Vsc2UgLyogT1NLICovCi0gICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tp XSksYmlucFtTWVNfVU5LXVtpXSk7Ci0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICBpZiAoIWJpbnBbaV0pCi0gICAg ICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi0vKgotICBtIGEgdCBjIGggbiBhIG0gZSAgLS0gIENv bXBhcmUgZmlsZW5hbWUgd2l0aCB0ZXh0ICYgYmluYXJ5IG5hbWUgcGF0dGVybnMuCi0KLSAgUmV0 dXJuczoKLSAgICAwIGlmIG5hbWUgbWF0Y2hlcyBhIHRleHQgcGF0dGVybiBidXQgbm90IGEgYmlu YXJ5IHBhdHRlcm4uCi0gICAgMSBpZiBuYW1lIG1hdGNoZXMgYSBiaW5hcnkgcGF0dGVybiBidXQg bm90IGEgdGV4dCBwYXR0ZXJuLgotICAgLTEgaWYgbmFtZSBtYXRjaGVzIG5vIHBhdHRlcm5zLgot ICAgLTIgaWYgbmFtZSBtYXRjaGVzIGEgYmluYXJ5IHBhdHRlcm4gYW5kIGEgdGV4dCBwYXR0ZXJu LgotKi8KLWludAotbWF0Y2huYW1lKGZpbGVuYW1lLCBsb2NhbCwgb3MpIGNoYXIgKiBmaWxlbmFt ZTsgaW50IGxvY2FsOyBpbnQgb3M7IHsKLSAgICBpbnQgcmMgPSAtMTsJCQkvKiBSZXR1cm4gY29k ZSAqLwotICAgIGNoYXIgKiBuYW1lLCAqIHA7Ci0jaWZkZWYgT1MyT1JVTklYCi0gICAgY2hhciB0 bXBidWZbQ0tNQVhQQVRIKzFdOwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotCi0gICAgbmFtZSA9 IGZpbGVuYW1lID8gZmlsZW5hbWUgOiAiIjsJLyogQ29weSBvZiBvcmlnaW5hbCBhcmcgKi8KLSAg ICBpZiAocGF0dGVybnMgJiYgKm5hbWUpIHsJCS8qIElmIFBBVFRFUk5TIE9OLi4uICovCi0JaW50 IGk7Ci0KLSNpZmRlZiBPUzJPUlVOSVgKLQlpZiAoY2ttYXRjaCgiKi5+WzEtOV0qfiIsbmFtZSwx LDEpKSB7IC8qIE5hbWUgaGFzIGJhY2t1cCBzdWZmaXg/ICovCi0JICAgIGludCBrOwotCSAgICBr ID0gY2tzdHJuY3B5KHRtcGJ1ZixuYW1lLENLTUFYUEFUSCsxKTsgLyogWWVzLCBjb3B5IGFuZCBz dHJpcCAqLwotCSAgICBmb3IgKGkgPSBrIC0gMzsgaSA+IDQ7IGktLSkgewotCQlpZiAodG1wYnVm W2ldID09ICd+JyAmJiB0bXBidWZbaS0xXSA9PSAnLicpIHsKLQkJICAgIHRtcGJ1ZltpLTFdID0g TlVMOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkgICAgfQotCSAgICBuYW1lID0gdG1wYnVmOwkJLyog QW5kIHBvaW50IHRvIHN0cmlwcGVkIGNvcHkgKi8KLQl9Ci0jZW5kaWYgLyogT1MyT1JVTklYICov Ci0JenN0cmlwKG5hbWUsJnApOwkJLyogU3RyaXAgcGF0aG5hbWUgdG9vICovCi0JbmFtZSA9IHA7 Ci0KLSAgICAgICAgaWYgKGxvY2FsKSB7Ci0gICAgICAgICAgICBpZiAodHh0cGF0dGVybnNbMF0p IHsJLyogU2VhcmNoIHRleHQgcGF0dGVybnMgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgRlRQQVRURVJOUyAmJiB0eHRwYXR0ZXJuc1tpXTsgaSsrKSB7Ci0gICAgICAgICAgICAg ICAgICAgIGlmIChja21hdGNoKHR4dHBhdHRlcm5zW2ldLG5hbWUsZmlsZWNhc2UsMSkpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKGJpbnBhdHRlcm5zWzBdKSB7CS8qIEFuZCBzZWFyY2ggYmlu YXJ5IHBhdHRlcm5zICovCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVS TlMgJiYgYmlucGF0dGVybnNbaV07IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2tt YXRjaChiaW5wYXR0ZXJuc1tpXSxuYW1lLGZpbGVjYXNlLDEpKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICByYyA9IChyYyA+IC0xKSA/IC0yIDogMTsKLSAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgfQotCX0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAob3MgPj0gMCAmJiBvcyA8IFNZU19N QVgpIHsKLQkJaWYgKHR4dHBbb3NdWzBdKSB7Ci0JCSAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRU RVJOUyAmJiB0eHRwW29zXVtpXTsgaSsrKSB7Ci0JCQlpZiAoY2ttYXRjaCh0eHRwW29zXVtpXSxu YW1lLGZpbGVjYXNlLDEpKSB7Ci0JCQkgICAgcmMgPSAwOwotCQkJICAgIGJyZWFrOwotCQkJfQot CQkgICAgfQotCQl9Ci0JCWlmIChiaW5wW29zXVswXSkgewotCQkgICAgZm9yIChpID0gMDsgaSA8 IEZUUEFUVEVSTlMgJiYgYmlucFtvc11baV07IGkrKykgewotCQkJaWYgKGNrbWF0Y2goYmlucFtv c11baV0sbmFtZSxmaWxlY2FzZSwxKSkgewotCQkJICAgIHJjID0gKHJjID4gLTEpID8gLTIgOiAx OwotCQkJICAgIGJyZWFrOwotCQkJfQotCQkgICAgfQotCQl9Ci0JICAgIH0KLSAgICAgICAgfQot ICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJtYXRjaG5hbWUiLG5hbWUscmMpOwotICAgIHJldHVybihy Yyk7Ci19Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLQotI2lmZGVmIFVOSUNPREUKLSNpZm5kZWYg Tk9FVkVOTUFYCi0jZGVmaW5lIEVWRU5NQVgKLSNlbmRpZiAvKiBOT0VWRU5NQVggKi8KLSNlbmRp ZiAvKiBVTklDT0RFICovCi0KLS8qICBTIEMgQSBOIEYgSSBMIEUgIC0tICBBbmFseXplIGEgZmls ZSdzIGNvbnRlbnRzICAqLwotCi0vKgotICBDYWxsIHdpdGg6Ci0gICAgbmFtZTogICAgUG9pbnRl ciB0byBuYW1lIG9mIGV4aXN0aW5nIGZpbGUuCi0gICAgZmxhZzogICAgUG9pbnRlciB0byBpbnQg aW4gd2hpY2ggdG8gcmV0dXJuIGFkZGl0aW9uYWwgbnVtZXJpYyBkYXRhLgotCi0gIFJldHVybnM6 Ci0gICAgLTEgb24gZmFpbHVyZSAodG8gb3BlbiBmaWxlIG9yIHRvIHJlYWQgZnJvbSBpdCkuCi0g ICAgSW50ZWdlciwgMC4uNCwgb24gc3VjY2VzcyBpbmRpY2F0aW5nIGZpbGUgdHlwZToKLSAgICAg MCA9IDctYml0IHRleHQgKGZsYWcgPSAtMSkKLSAgICAgMSA9IFVURi04IHRleHQgKGZsYWcgPSAt MSkKLSAgICAgMiA9IFVDUy0yIHRleHQgKGZsYWcgPSAgMDogYmlnLWVuZGlhbjsgZmxhZyA9IDE6 IGxpdHRsZS1lbmRpYW4pCi0gICAgIDMgPSA4LWJpdCB0ZXh0IChmbGFnID0gIDA6IG5vIEMxIGJ5 dGVzOyBmbGFnID0gMTogaW5jbHVkZXMgQzEgYnl0ZXMpCi0gICAgIDQgPSBUZXh0ICAgICAgICh0 eXBlIHVua25vd24pCi0gICAgIDUgPSBiaW5hcnkgICAgIChmbGFnID0gLTEpCi0KLSAgSWYgVU5J Q09ERSBpcyBkZWZpbmVkOgotCi0gICAxLiBJZiBmaWxlIGJlZ2lucyB3aXRoIGEgdmFsaWQgQk9N LCBpdCBpcyBiZWxpZXZlZC4gIE90aGVyd2lzZSB3ZQotICAgICAgcmVhZCB0aGUgZmlyc3QgNEsg b2YgdGhlIGZpbGUgKHNpbmNlIGl0IG1pZ2h0IGJlIGVtYWlsIHdpdGggdmVyYm9zZQotICAgICAg aGVhZGVycykgYW5kIGFuYWx5emUgaXQ6Ci0KLSAgIDIuIElmIGZpbGUgY29udGFpbnMgb25seSB2 YWxpZCBVVEYtOCBzZXF1ZW5jZXMsIHdlIGNhbGwgaXQgVVRGLTg7Ci0gICAgICBvdGhlcndpc2U6 Ci0KLSAgIDMuIElmIHRoZSBmaWxlIGNvbnRhaW5zIGxvdHMgb2YgYWx0ZXJuYXRlIDAgYnl0ZXMs IHdlIGNhbGwgaXQgVUNTLTIsIGFuZAotICAgICAgc2V0IHRoZSBwb2xhcml0eSBhY2NvcmRpbmcg dG8gd2hldGhlciB0aGUgcHJlcG9uZGVyYW5jZSBvZiB0aGVtIGFyZSBpbgotICAgICAgZXZlbiBv ciBvZGQgcG9zaXRpb25zOyBvdGhlcndpc2U6Ci0KLSAgIDQuIElmIEVWRU5NQVggaXMgZGVmaW5l ZCBhbmQgdGhlIGZpbGUgY29udGFpbnMgbG90cyBvZiBhbHRlcm5hdGUgYnl0ZXMgdGhhdAotICAg ICAgYXJlIGlkZW50aWNhbCwgZXZlbiBpZiB0aGV5IGFyZW4ndCB6ZXJvLCBhbmQgdGhlIG51bWJl ciBvZiBzdWNoIGJ5dGVzCi0gICAgICBpcyBhdCBsZWFzdCBmb3VyIHRpbWVzIHRoZSBsZW5ndGgg b2YgdGhlIG1heGltdW0gcnVuIG9mIGFsdGVybmF0aW5nCi0gICAgICBpZGVudGljYWwgYnl0ZXMg b2YgdGhlIG9wcG9zaXRlIHBvbGFyaXR5LCB3ZSBjYWxsIGl0IFVDUy0yOyBvdGhlcndpc2U6Ci0K LSAgIDUuIElmIHRoZSBmaWxlIGNvbnRhaW5lZCBubyBieXRlcyB3aXRoIHRoZWlyIDh0aCBiaXRz IG9uIGFuZCBubyBjb250cm9scwotICAgICAgb3RoZXIgdGhhbiBDUiwgTEYsIEhULCBhbmQgRkYs IHdlIGNhbGwgaXQgQVNDSUk7IG90aGVyd2lzZToKLQotICAgNi4gSWYgaXQgY29udGFpbnMgQzAg Y29udHJvbCBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gQ1IsIExGLCBIVCwgYW5kIEZGLCB3ZQotICAg ICAgY2FsbCBpdCBiaW5hcnk7IG90aGVyd2lzZToKLQotICAgNy4gV2UgY2FsbCBpdCA4LWJpdCB0 ZXh0LCBjaGFyYWN0ZXIgc2V0IHVua25vd24gKGNvdWxkIGJlIExhdGluLTEgb3IKLSAgICAgIGFu eXRoaW5nIGVsc2UpLgotCi0gICBOb3RlIHRoYXQgbWFsZm9ybWVkIFVURi04IGlzIG5vdCBkaWFn bm9zZWQgYXMgVVRGLTguCi0KLSAgIElmIFVOSUNPREUgaXMgbm90IGRlZmluZWQ6Ci0KLSAgIDEu IElmIHRoZSBmaWxlIGNvbnRhaW5zIEMwIGNvbnRyb2wgY2hhcmFjdGVycyBvdGhlciB0aGFuIENS LCBMRiwgSFQsIGFuZAotICAgICAgRkYsIHdlIGNhbGwgaXQgYmluYXJ5OyBvdGhlcndpc2U6Ci0K LSAgIDIuIElmIHRoZSBmaWxlIGNvbnRhaW5zIGFueSA4LWJpdCBieXRlcywgd2UgY2FsbCBpdCA4 LWJpdCB0ZXh0OyBvdGhlcndpc2U6Ci0KLSAgIDMuIFdlIGNhbGwgaXQgNy1iaXQgdGV4dC4KLQot ICAgSW4gdGhlIG5vbi1Vbmljb2RlIGNhc2UsIFVDUy0yIGlzIGRpYWdub3NlZCBhcyBiaW5hcnks IGJ1dCBVVEYtOCBhcwotICAgOC1iaXQgdGV4dC4KLQotICAgVGhlcmUgaXMgbm8gc2lnbmlmaWNh bnQgc3BlZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBVbmljb2RlIGFuZAotICAgbm9uLVVuaWNv ZGUgY2FzZXMuCi0qLwotaW50Ci1zY2FuZmlsZShuYW1lLGZsYWcsbnNjYW5maWxlKSBjaGFyICog bmFtZTsgaW50ICogZmxhZywgbnNjYW5maWxlOyB7Ci0gICAgRklMRSAqIGZwOwkJCQkvKiBGaWxl IHBvaW50ZXIgKi8KLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZltTQ0FORklMRUJVRl07CS8qIEZpbGUg ZGF0YSBidWZmZXIgZm9yIGFuYWx5c2lzICovCi0gICAgaW50IHgsIHZhbCA9IC0xLCBjb3VudCA9 IDA7CQkvKiBXb3JrZXJzICovCi0gICAgaW50IHJjID0gLTE7CQkJLyogUmV0dXJuIGNvZGUgKi8K LSAgICBpbnQgcHYgPSAtMTsJCQkvKiBQYXR0ZXJuLW1hdGNoIHZhbHVlICovCi0gICAgaW50IGVv ZiA9IDA7CQkJLyogRmxhZyBmb3IgZmlsZSBFT0YgZW5jb3VudGVyZWQgKi8KLSAgICBpbnQgYnl0 ZXMgPSAwOwkJCS8qIFRvdGFsIGJ5dGUgY291bnQgKi8KLSNpZmRlZiBVTklDT0RFCi0gICAgdW5z aWduZWQgaW50IGMwLCBjMTsJCS8qIEZpcnN0IDIgZmlsZSBieXRlcyAoZm9yIEJPTSkgKi8KLSNl bmRpZiAvKiBVTklDT0RFICovCi0gICAgZXh0ZXJuIGludCBwaXBlc2VuZCwgZmlsZXBlZWs7Ci0K LSAgICByZWdpc3RlciBpbnQgaTsJCQkvKiBMb29wIGNvbnRyb2wgKi8KLSAgICBpbnQgcmVhZHNp emUgPSAwOwkJCS8qIEhvdyBtdWNoIHRvIHJlYWQgKi8KLSAgICBpbnQgZWlnaHRiaXQgPSAwOwkJ CS8qIE51bWJlciBvZiBieXRlcyB3aXRoIDh0aCBiaXQgb24gKi8KLSAgICBpbnQgYzBjb250cm9s cyA9IDA7CQkJLyogQzAgbm9uLXRleHQgY29udHJvbC1jaGFyIGNvdW50ZXIgKi8KLSAgICBpbnQg YzBub25pc28gPSAwOwkJCS8qIEMwIG5vbi1JU08gY29udHJvbC1jaGFyIGNvdW50ZXIgKi8KLSAg ICBpbnQgYzFjb250cm9scyA9IDA7CQkJLyogQzEgY29udHJvbC1jaGFyYWN0ZXIgY291bnRlciAq LwotICAgIHVuc2lnbmVkIGludCBjOwkJCS8qIEN1cnJlbnQgY2hhcmFjdGVyICovCi0gICAgaW50 IHJ1bm1heCA9IDA7CQkJLyogTG9uZ2VzdCBydW4gb2YgMCBieXRlcyAqLwotICAgIGludCBydW56 ZXJvID0gMDsJCQkvKiBSdW4gb2YgMCBieXRlcyAqLwotICAgIGludCBwY3R6ZXJvID0gMDsJCQkv KiBQZXJjZW50YWdlIG9mIDAgYnl0ZXMgKi8KLSAgICBpbnQgdHh0Y3ogPSAwOwotI2lmZGVmIENL X0NUUkxaCi0gICAgZXh0ZXJuIGludCBlb2ZtZXRob2Q7Ci0jZW5kaWYgLyogQ0tfQ1RSTFogKi8K LQotI2lmZGVmIFVOSUNPREUKLSAgICBpbnQgbm90dXRmOCA9IDA7CQkJLyogTm9uemVybyBpZiBk ZWZpbml0ZWx5IG5vdCBVVEYtOCAqLwotICAgIGludCB1dGY4c3RhdGUgPSAwOwkJCS8qIFVURi04 IHJlY29nbml6ZXIgc3RhdGUgKi8KLSAgICBpbnQgb2RkemVybyA9IDA7CQkJLyogTnVtYmVyIG9m IDAgYnl0ZXMgaW4gb2RkIHBvc3Rpb25zICovCi0gICAgaW50IGV2ZW56ZXJvID0gMDsJCQkvKiBh bmQgaW4gZXZlbiBwb3NpdGlvbnMgKi8KLSAgICBpbnQgbGZudWwgPSAwOwkJCS8qIE51bWJlciBv ZiA8TEY+PE5VTD4gc2VxdWVuY2VzICovCi0gICAgaW50IGNybGYgPSAwOwkJCS8qIE51bWJlciBv ZiA8Q1JMRj4gc2VxdWVuY2VzICovCi0jZWxzZQotICAgIGludCBub3R1dGY4ID0gMTsKLSNlbmRp ZiAvKiBVTklDT0RFICovCi0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgRVZFTk1BWAotICAgIGlu dCBvZGRydW4gPSAwLCBvZGRtYXggPSAwLCBvZGRieXRlID0gMCwgb2RkbWF4Ynl0ZSA9IDA7Ci0g ICAgaW50IGV2ZW5ydW4gPSAwLCBldmVubWF4ID0gMCwgZXZlbmJ5dGUgPSAwLCBldmVubWF4Ynl0 ZSA9IDA7Ci0jZW5kaWYgLyogRVZFTk1BWCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lm bmRlZiBOT1hGRVIKLSAgICBpZiAocGlwZXNlbmQgfHwgY2FsaWJyYXRlIHx8IHNuZGFycmF5KSAv KiBPbmx5IGZvciByZWFsIGZpbGVzICovCi0gICAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIE5P WEZFUiAqLwotICAgIGRlYnVnKEYxMTEsInNjYW5maWxlIixuYW1lLG5zY2FuZmlsZSk7Ci0jaWZk ZWYgUEFUVEVSTlMKLSAgICBpZiAoIWZpbGVwZWVrKSB7Ci0JcHYgPSBtYXRjaG5hbWUobmFtZSwx LC0xKTsKLQlpZiAocHYgPCAwKQotCSAgcmMgPSAtMTsKLQllbHNlCi0JICByYyA9IChwdiA9PSAx KSA/IEZUX0JJTiA6IEZUX1RFWFQ7Ci0JZGVidWcoRjExMSwic2NhbmZpbGUgIWZpbGVwZWVrIHJl c3VsdCIsbmFtZSxyYyk7Ci0JcmV0dXJuKHJjKTsKLSAgICB9Ci0jZW5kaWYgLyogUEFUVEVSTlMg Ki8KLQotI2lmZGVmIFZNUwotLyogV2UgZG9uJ3Qgc2NhbiBpbiBWTVMgd2hlcmUgdGV4dCBmaWxl cyBoYXZlIHZhcmlvdXMgcmVjb3JkIGZvcm1hdHMgaW4gICovCi0vKiB3aGljaCByZWNvcmQgaGVh ZGVycyBjb250YWluIHNlZW1pbmdseSBub24tdGV4dCBieXRlcy4gIFNvIHRoZSBiZXN0ICAgKi8K LS8qIHdlIGNhbiBkbyBpbiBWTVMgaXMgdGVsbCB3aGV0aGVyIHRoZSBmaWxlIGlzIHRleHQgb3Ig YmluYXJ5LCBwZXJpb2QuICAqLwotICAgIHsKLQlpbnQgYiwgeDsKLQliID0gYmluYXJ5OwkJCS8q IFNhdmUgY3VycmVudCBiaW5hcnkgc2V0dGluZyAqLwotCWlmICh6b3BlbmkoWklGSUxFLG5hbWUp ID4gMCkgewkvKiBJbiBWTVMgdGhpcyBzZXRzIGJpbmFyeSAqLwotCSAgICB4ID0gYmluYXJ5OwkJ CS8qIEdldCByZXN1bHQgKi8KLQkgICAgemNsb3NlKFpJRklMRSk7CQkvKiBDbG9zZSB0aGUgZmls ZSAqLwotCSAgICBiaW5hcnkgPSBiOwkJCS8qIFJlc3RvcmUgcHJldmlvdXMgYmluYXJ5IHNldHRp bmcgKi8KLQkgICAgcmMgPSB4ID8gRlRfQklOIDogRlRfVEVYVDsKLQkgICAgdmFsID0gMDsKLQkg ICAgZ290byB4c2NhbmZpbGU7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBWTVMgKi8KLQotICAgIGVv ZiA9IDA7CQkJCS8qIEVuZC1vZi1maWxlIHJlYWNoZWQgaW5kaWNhdG9yICovCi0jaWZkZWYgT1My Ci0gICAgZnAgPSBmb3BlbihuYW1lLCAicmIiKTsJCS8qIE9wZW4gdGhlIGZpbGUgaW4gYmluYXJ5 IG1vZGUgKi8KLSNlbHNlCi0gICAgZnAgPSBmb3BlbihuYW1lLCAiciIpOwotI2VuZGlmIC8qIE9T MiAqLwotCi0gICAgaWYgKCFmcCkJCQkJLyogRmFpbGVkPyAqLwotICAgICAgcmV0dXJuKC0xKTsK LQotICAgIHdoaWxlICgxKSB7CQkJCS8qIE9uZSBvciBtb3JlIGd1bHBzIGZyb20gZmlsZSAqLwot CWlmIChlb2YpIHsJCQkvKiBFT0YgZnJvbSBsYXN0IHRpbWU/ICovCi0JICAgIGRlYnVnKEYxMTEs InNjYW5maWxlIGF0IEVPRiIsbmFtZSxieXRlcyk7Ci0JICAgIGlmIChydW56ZXJvID4gcnVubWF4 KQotCSAgICAgIHJ1bm1heCA9IHJ1bnplcm87Ci0JICAgIGJyZWFrOwotCX0KLQlpZiAobnNjYW5m aWxlIDwgMCkgewkJLyogUmVhZGluZyB3aG9sZSBmaWxlICovCi0JICAgIHJlYWRzaXplID0gU0NB TkZJTEVCVUY7Ci0JfSBlbHNlIHsJCQkvKiBSZWFkaW5nIGZpcnN0IG5zY2FuZmlsZWUgYnl0ZXMg Ki8KLQkgICAgcmVhZHNpemUgPSBuc2NhbmZpbGUgLSBieXRlczsKLQkgICAgaWYgKHJlYWRzaXpl IDwgMSkKLQkgICAgICBicmVhazsKLQkgICAgaWYgKHJlYWRzaXplID4gU0NBTkZJTEVCVUYpCi0J ICAgICAgcmVhZHNpemUgPSBTQ0FORklMRUJVRjsKLQl9Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUg cmVhZHNpemUiLCIiLHJlYWRzaXplKTsKLQljb3VudCA9IGZyZWFkKGJ1ZiwxLHJlYWRzaXplLGZw KTsgLyogUmVhZCBhIGJ1ZmZlciAqLwotCWlmIChjb3VudCA9PSBFT0YgfHwgY291bnQgPT0gMCkg ewotCSAgICBkZWJ1ZyhGMTExLCJzY2FuZmlsZSBFT0YiLG5hbWUsY291bnQpOwotCSAgICBicmVh azsKLQl9Ci0JZGVidWcoRjExMSwic2NhbmZpbGUgYnVmZmVyIG9rIixuYW1lLGNvdW50KTsKLQot CWlmIChieXRlcyA9PSAwICYmIGNvdW50ID4gOCkgewotCSAgICAvKiBQREYgZmlsZXMgY2FuIGxv b2sgbGlrZSB0ZXh0IGluIHRoZSBiZWdpbm5pbmcuICovCi0JICAgIGlmICghY2tzdHJjbXAoKGNo YXIgKilidWYsIiVQREYtMS4iLDcsMSkpIHsKLQkJaWYgKGlzZGlnaXQoYnVmWzddKSkgewotCQkg ICAgaWYgKGJ1Zls4XSA9PSAnXDAxNScgfHwKLQkJCWNvdW50ID4gOSAmJiBidWZbOF0gPT0gU1Ag JiYgYnVmWzldID09ICdcMDE1JykgewotI2lmZGVmIERFQlVHCi0JCQlidWZbOF0gPSBOVUw7Ci0J CQlkZWJ1ZyhGMTEwLCJzY2FuZmlsZSBQREYiLGJ1ZiwwKTsKLSNlbmRpZiAvKiBERUJVRyAqLwot CQkJYmluYXJ5ID0gMTsJLyogQnV0IHRoZXkgYXJlIGJpbmFyeS4gKi8KLQkJCWJyZWFrOwotCQkg ICAgfQotCQl9Ci0JICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKChjaGFyICopYnVmLCIlIVBTLUFk byIsOCwxKSkgewotCQkvKiBEaXR0byBmb3IgUG9zdFNjcmlwdCAqLwotI2lmZGVmIERFQlVHCi0J CWludCBpOwotCQlmb3IgKGkgPSA4OyBpIDwgY291bnQ7IGkrKykgewotCQkgICAgaWYgKGJ1Zltp XSA8ICchJykgewotCQkJYnVmW2ldID0gTlVMOwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkJ ZGVidWcoRjExMCwic2NhbmZpbGUgUG9zdFNjcmlwdCIsYnVmLDApOwotI2VuZGlmIC8qIERFQlVH ICovCi0JCWJpbmFyeSA9IDE7Ci0JCWJyZWFrOwotI2lmbmRlZiBOT1BDTFNDQU4KLQkgICAgfSBl bHNlIGlmICghY2tzdHJjbXAoKGNoYXIgKilidWYsIikgSFAtUENMIiw4LDEpKSB7Ci0JCS8qIEhQ IFBDTCBwcmludGVyIGxhbmd1YWdlICovCi0jaWZkZWYgREVCVUcKLQkJaW50IGk7Ci0JCWZvciAo aSA9IDg7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCSAgICBpZiAoYnVmW2ldIDwgJyEnKSB7Ci0JCQli dWZbaV0gPSBOVUw7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJfQotCQlkZWJ1ZyhGMTEwLCJzY2Fu ZmlsZSBQQ0wiLGJ1ZiwwKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotCQliaW5hcnkgPSAxOwotCQli cmVhazsKLQkgICAgfSAKLSNlbmRpZiAvKiBOT1BDTFNDQU4gKi8KLSNpZm5kZWYgTk9QSkxTQ0FO Ci0JICAgICAgZWxzZSBpZiAoYnVmWzBdID09ICdcMDMzJyAmJiAoYnVmWzFdID09ICdFJyB8fCBi dWZbMV0gPT0gJyUnKSkgewotCQkvKiBEaXR0byBmb3IgUEpMIEpvYiBwcmludGVyIGhlYWRlciAq LwotI2lmZGVmIERFQlVHCi0JCWludCBpOwotCQlmb3IgKGkgPSAyOyBpIDwgY291bnQ7IGkrKykg ewotCQkgICAgaWYgKGJ1ZltpXSA8ICchJykgewotCQkJYnVmW2ldID0gTlVMOwotCQkJYnJlYWs7 Ci0JCSAgICB9Ci0JCX0KLQkJZGVidWcoRjExMCwic2NhbmZpbGUgUEpMIEpvYiBwcmludGVyIGhl YWRlciIsYnVmLDApOwotI2VuZGlmIC8qIERFQlVHICovCi0JCWJpbmFyeSA9IDE7Ci0JCWJyZWFr OwotI2VuZGlmIC8qIE5PUEpMU0NBTiAqLwotCSAgICB9Ci0JfQotCi0jaWZkZWYgVU5JQ09ERQot CWlmIChieXRlcyA9PSAwICYmIGNvdW50ID4gMSkgewotCSAgICBpbnQgaW5jbF9jbnQgPSAwOwot Ci0JICAgIC8qIEZpcnN0IGxvb2sgZm9yIEJPTSAqLwotCi0JICAgIGMwID0gKHVuc2lnbmVkKSgo dW5zaWduZWQpYnVmWzBdJjB4RkYpOyAvKiBGaXJzdCBmaWxlIGJ5dGUgKi8KLQkgICAgYzEgPSAo dW5zaWduZWQpKCh1bnNpZ25lZClidWZbMV0mMHhGRik7IC8qIFNlY29uZCBieXRlICovCi0KLQkg ICAgaWYgKGMwID09IDB4RkUgJiYgYzEgPT0gMHhGRikgewkvKiBVQ1MtMiBCRSAqLwotCQlyYyA9 IEZUX1VDUzI7Ci0JCXZhbCA9IDA7Ci0JCWRlYnVnKEYxMTEsInNjYW5maWxlIFVDUzIgQk9NIEJF Iixja2l0b2EodmFsKSxyYyk7Ci0JCWluY2xfY250Kys7Ci0JICAgIH0gZWxzZSBpZiAoYzAgPT0g MHhGRiAmJiBjMSA9PSAweEZFKSB7IC8qIFVDUy0yIExFICovCi0JCXJjID0gRlRfVUNTMjsKLQkJ dmFsID0gMTsKLQkJZGVidWcoRjExMSwic2NhbmZpbGUgVUNTMiBCT00gTEUiLGNraXRvYSh2YWwp LHJjKTsKLQkJaW5jbF9jbnQrKzsKLQkgICAgfSBlbHNlIGlmIChjb3VudCA+IDIpIGlmIChjMCA9 PSAweEVGICYmIGMxID09IDB4QkIgJiYKLQkJICAgICAgICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1 ZlsyXSYweEZGKSA9PSAweEJGKSB7Ci0JCXJjID0gRlRfVVRGODsKLQkJZGVidWcoRjExMSwic2Nh bmZpbGUgVVRGOCBCT00iLGNraXRvYSh2YWwpLHJjKTsKLQkJaW5jbF9jbnQrKzsKLQkgICAgfQot CSAgICBpZiAoaW5jbF9jbnQpIHsJCS8qIEhhdmUgQk9NICovCi0JCWJ5dGVzICs9IGNvdW50Owot CQlnb3RvIHhzY2FuZmlsZTsKLQkgICAgfQotCX0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLQli eXRlcyArPSBjb3VudDsJCQkvKiBDb3VudCBieXRlcyByZWFkICovCi0JZW9mID0gZmVvZihmcCk7 CQkJLyogRmxhZyBmb3IgYXQgRU9GICAqLwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKysp IHsJLyogRm9yIGVhY2ggYnl0ZS4uLiAqLwotCSAgICBjID0gKHVuc2lnbmVkKWJ1ZltpXTsJLyog Rm9yIGVhc2Ugb2YgcmVmZXJlbmNlICovCi0JICAgIGlmICghYykgewkJCS8qIFplcm8gYnl0ZT8g Ki8KLSNpZmRlZiBFVkVOTUFYCi0JCWlmIChpJjEpCQkvKiBJbiBvZGQgcG9zaXRpb24gKi8KLQkJ ICBvZGR6ZXJvKys7Ci0JCWVsc2UKLQkJICBldmVuemVybysrOwkJLyogSW4gZXZlbiBwb3NpdGlv biAqLwotI2VuZGlmIC8qIEVWRU5NQVggKi8KLQkJcnVuemVybysrOwotCSAgICB9IGVsc2UgewkJ CS8qIE5vdCBhIHplcm8gYnl0ZSAqLwotCQlpZiAocnVuemVybyA+IHJ1bm1heCkKLQkJICBydW5t YXggPSBydW56ZXJvOwotCQlpZiAocnVubWF4ID4gMikJCS8qIFRoYXQncyBhbGwgd2UgbmVlZCB0 byBiZSBjZXJ0YWluICovCi0JCSAgYnJlYWs7CQkvKiBpdCdzIGEgYmluYXJ5IGZpbGUuICovCi0J CXJ1bnplcm8gPSAwOwotCSAgICB9Ci0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgRVZFTk1BWAot Ci0vKiBUaGlzIGlzIHRvIGNhdGNoIFVDUy0yIHdpdGggYSBub24tQVNDSUksIG5vbi1MYXRpbi0x IHJlcGVydG9pcmUgICovCi0KLQkgICAgaWYgKGkgPiAxKSB7CSAgICAgIC8qIExvb2sgZm9yIHJ1 bnMgb2YgYWx0ZXJuYXRpbmcgY2hhcnMgKi8KLQkJaWYgKGkmMSkgewotCQkgICAgaWYgKGMgPT0g YnVmW2ktMl0pIHsgLyogSW4gb2RkIHBvc2l0aW9ucyAqLwotCQkJb2RkcnVuKys7Ci0JCQlvZGRi eXRlID0gYzsKLQkJICAgIH0gZWxzZSB7Ci0JCQlvZGRtYXggPSBvZGRydW47Ci0JCQlvZGRtYXhi eXRlID0gb2RkYnl0ZTsKLQkJICAgIH0KLQkJfSBlbHNlIHsJCS8qIGFuZCBldmVuIHBvc2l0aW9u cyAqLwotCQkgICAgaWYgKGMgPT0gYnVmW2ktMl0pIHsKLQkJCWV2ZW5ydW4rKzsKLQkJCWV2ZW5i eXRlID0gYzsKLQkJICAgIH0gZWxzZSB7Ci0JCQlldmVubWF4ID0gZXZlbnJ1bjsKLQkJCWV2ZW5t YXhieXRlID0gZXZlbmJ5dGU7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIEVWRU5N QVggKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLQkgICAgaWYgKChjICYgMHg4MCkgPT0gMCkg ewkvKiBXZSBoYXZlIGEgNy1iaXQgYnl0ZSAqLwotI2lmZGVmIFVOSUNPREUKLQkJaWYgKGkgPiAw ICYmIGMgPT0gMTApIHsgLyogTGluZWZlZWQgKi8KLQkJICAgIGlmIChidWZbaS0xXSA9PSAwKSBs Zm51bCsrOyAvKiBQcmVjZWRlZCBieSBOVUwgKi8KLQkJICAgIGVsc2UgaWYgKGJ1ZltpLTFdID09 IDEzKSBjcmxmKys7IC8qIG9yIGJ5IENSLi4uICovCi0JCX0KLSNlbmRpZiAvKiBVTklDT0RFICov Ci0JCWlmIChjIDwgJyAnKSB7CQkvKiBDaGVjayBmb3IgQ08gY29udHJvbHMgKi8KLQkJICAgIGlm IChjICE9IExGICYmIGMgIT0gQ1IgJiYgYyAhPSBIVCAmJiBjICE9IEZGKSB7Ci0JCQljMGNvbnRy b2xzKys7Ci0JCQlpZiAoYyAhPSBFU0MgJiYgYyAhPSBTTyAmJiBjICE9IFNJKQotCQkJICBjMG5v bmlzbysrOwotCQkgICAgfQotCQkgICAgaWYgKChjID09ICdcMDMyJykJLyogQ3RybC1aICovCi0j aWZkZWYgQ09NTUVOVAotCQkJJiYgZW9mICYmIChpID49IGNvdW50IC0gMikKLSNlbmRpZiAvKiBD T01NRU5UICovCi0JCQkpIHsKLQkJCWMwY29udHJvbHMtLTsKLQkJCWMwbm9uaXNvLS07Ci0jaWZk ZWYgQ0tfQ1RSTFoKLQkJCWlmIChlb2ZtZXRob2QgPT0gWFlFT0ZfWiAmJiB0eHRjeiA9PSAwKSB7 Ci0JCQkgICAgaWYgKGMwY29udHJvbHMgPT0gMCkgLyogQWxsIHRleHQgcHJpb3IgdG8gQ3RybC1a ICovCi0JCQkgICAgICB0eHRjeiA9IDE7Ci0JCQl9Ci0jZW5kaWYgLyogQ0tfQ1RSTFogKi8KLQkJ ICAgIH0KLQkJfQotI2lmZGVmIFVOSUNPREUKLQkJaWYgKCFub3R1dGY4ICYmIHV0ZjhzdGF0ZSkg eyAvKiBJbiBVVEYtOCBzZXF1ZW5jZT8gKi8KLQkJICAgIHV0ZjhzdGF0ZSA9IDA7Ci0JCSAgICBk ZWJ1ZyhGMDAwLCJzY2FuZmlsZSIsIjctYml0IGJ5dGUgaW4gVVRGOCBzZXF1ZW5jZSIsYyk7Ci0J CSAgICBub3R1dGY4Kys7CQkvKiBUaGVuIGl0J3Mgbm90IFVURi04ICovCi0JCSAgICBjb250aW51 ZTsKLQkJfQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQkgICAgfSBlbHNlIHsJCQkvKiBXZSBoYXZl IGFuIDgtYml0IGJ5dGUgKi8KLQkJZWlnaHRiaXQrKzsJCS8qIENvdW50IGl0ICovCi0JCWlmIChj ID49IDB4ODAgJiYgYyA8IDB4QTApIC8qIENoZWNrIGZvciBDMSBjb250cm9scyAqLwotCQkgIGMx Y29udHJvbHMrKzsKLSNpZmRlZiBVTklDT0RFCi0JCWlmICghbm90dXRmOCkgewkJLyogSWYgaXQg bWlnaHQgc3RpbGwgYmUgVVRGOC4uLiAqLwotCQkgICAgc3dpdGNoICh1dGY4c3RhdGUpIHsgLyog RW50ZXIgdGhlIFVURi04IHN0YXRlIG1hY2hpbmUgKi8KLQkJICAgICAgY2FzZSAwOgkJIC8qIEZp cnN0IGJ5dGUuLi4gKi8KLQkJCWlmICgoYyAmIDB4RTApID09IDB4QzApIHsgLyogVGVsbHMgbnVt YmVyIG9mICovCi0JCQkgICAgdXRmOHN0YXRlID0gMTsgICAgICAgIC8qIHN1YnNlcXVlbnQgYnl0 ZXMgKi8KLQkJCX0gZWxzZSBpZiAoKGMgJiAweEYwKSA9PSAweEUwKSB7Ci0JCQkgICAgdXRmOHN0 YXRlID0gMjsKLQkJCX0gZWxzZSBpZiAoKGMgJiAweEY4KSA9PSAweEYwKSB7Ci0JCQkgICAgdXRm OHN0YXRlID0gMzsKLQkJCX0gZWxzZSB7Ci0JCQkgICAgbm90dXRmOCsrOwotCQkJfQotCQkJYnJl YWs7Ci0JCSAgICAgIGNhc2UgMToJCS8qIFN1YnNlcXVlbnQgYnl0ZSAqLwotCQkgICAgICBjYXNl IDI6Ci0JCSAgICAgIGNhc2UgMzoKLQkJCWlmICgoYyAmIDB4QzApICE9IDB4ODApIHsgLyogTXVz dCBzdGFydCB3aXRoIDEwICovCi0JCQkgICAgZGVidWcoRjAwMCwic2NhbmZpbGUiLAotCQkJCSAg ImJhZCBieXRlIGluIFVURjggc2VxdWVuY2UiLGMpOwotCQkJICAgIG5vdHV0ZjgrKzsKLQkJCSAg ICBicmVhazsKLQkJCX0KLQkJCXV0ZjhzdGF0ZS0tOwkvKiBHb29kLCBvbmUgbGVzcyBpbiB0aGlz IHNlcXVlbmNlICovCi0JCQlicmVhazsKLQkJICAgICAgZGVmYXVsdDoJCS8qIFNob3VsZG4ndCBo YXBwZW4gKi8KLQkJCWRlYnVnKEYxMTEsInNjYW5maWxlIiwiYmFkIFVURjggc3RhdGUiLHV0Zjhz dGF0ZSk7Ci0JCQlub3R1dGY4Kys7Ci0JCSAgICB9Ci0JCX0KLSNlbmRpZiAvKiBVTklDT0RFICov Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIGZjbG9zZShmcCk7CQkJCS8qIENsb3NlIHRoZSBmaWxl ICovCi0gICAgZGVidWcoRjEwMSwic2NhbmZpbGUgYnl0ZXMiLCIiLGJ5dGVzKTsKLQotICAgIGlm IChieXRlcyA9PSAwKQkJCS8qIElmIG5vdGhpbmcgd2FzIHJlYWQgKi8KLSAgICAgIHJldHVybigt MSk7CQkJLyogd2UncmUgZG9uZS4gKi8KLQotI2lmZGVmIEVWRU5NQVgKLSAgICAvKiBJbiBjYXNl IHdlIGhhZCBhIHJ1biB0aGF0IG5ldmVyIGJyb2tlLi4uICovCi0jaWZkZWYgQ09NTUVOVAotICAg IGlmIChvZGRtYXggPT0gMCkgewotCW9kZG1heCA9IG9kZHJ1bjsKLQlvZGRtYXhieXRlID0gb2Rk Ynl0ZTsKLSAgICB9Ci0gICAgaWYgKGV2ZW5tYXggPT0gMCkgewotCWV2ZW5tYXggPSBldmVucnVu OwotCWV2ZW5tYXhieXRlID0gZXZlbmJ5dGU7Ci0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSAgICBpZiAocnVubWF4ID09IDApIHsKLQlydW5tYXggPSBydW56ZXJvOwotICAgIH0KLSNlbmRp ZiAvKiBFVkVOTUFYICovCi0KLSNpZmRlZiBVTklDT0RFCi0gICAgaWYgKGJ5dGVzID4gMTAwKQkJ CS8qIEJ5dGVzIGlzIG5vdCAwICovCi0gICAgICBwY3R6ZXJvID0gKGV2ZW56ZXJvICsgb2RkemVy bykgLyAoYnl0ZXMgLyAxMDApOwotICAgIGVsc2UKLSAgICAgIHBjdHplcm8gPSAoKGV2ZW56ZXJv ICsgb2RkemVybykgKiAxMDApIC8gYnl0ZXM7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0jaWZk ZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7CQkJLyogSWYgZGVidWdnaW5nLCBkdW1wIHN0YXRp c3RpY3MgKi8KLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjMGNvbnRyb2xzICIsIiIsYzBjb250cm9s cyk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgYzBub25pc28gICAiLCIiLGMwbm9uaXNvKTsKLQlk ZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjMWNvbnRyb2xzICIsIiIsYzFjb250cm9scyk7Ci0JZGVidWco RjEwMSwic2NhbmZpbGUgZWlnaHRiaXQgICAiLCIiLGVpZ2h0Yml0KTsKLSNpZmRlZiBVTklDT0RF Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgY3JsZiAgICAgICAiLCIiLGNybGYpOwotCWRlYnVnKEYx MDEsInNjYW5maWxlIGxmbnVsICAgICAgIiwiIixsZm51bCk7Ci0JZGVidWcoRjEwMSwic2NhbmZp bGUgbm90dXRmOCAgICAiLCIiLG5vdHV0ZjgpOwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGV2ZW56 ZXJvICAgIiwiIixldmVuemVybyk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgb2RkemVybyAgICAi LCIiLG9kZHplcm8pOwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGV2ZW4vb2RkICAgIiwiIiwoZXZl bnplcm8gLyAob2RkemVybyArIDEpKSk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgb2RkL2V2ZW4g ICAiLCIiLChvZGR6ZXJvIC8gKGV2ZW56ZXJvICsgMSkpKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmls ZSBwY3R6ZXJvICAgICIsIiIscGN0emVybyk7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotI2lmZGVm IENPTU1FTlQKLSNpZmRlZiBFVkVOTUFYCi0JZGVidWcoRjEwMSwic2NhbmZpbGUgb2RkbWF4ICAg ICAiLCIiLG9kZG1heCk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgb2RkbWF4Ynl0ZSAiLCIiLG9k ZG1heGJ5dGUpOwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGV2ZW5tYXggICAgIiwiIixldmVubWF4 KTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBldmVubWF4Ynl0ZSIsIiIsZXZlbm1heGJ5dGUpOwot I2VuZGlmIC8qIEVWRU5NQVggKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JZGVidWcoRjEwMSwi c2NhbmZpbGUgcnVubWF4ICAgICAiLCIiLHJ1bm1heCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVH ICovCi0KLSNpZmRlZiBVTklDT0RFCi0gICAgeCA9IGVpZ2h0Yml0ID8gYnl0ZXMgLyAyMCA6IGJ5 dGVzIC8gNDsgLyogRm9yIFVDUy0yLi4uICovCi0KLSAgICBpZiAocnVubWF4ID4gMikgewkJCS8q IEZpbGUgaGFzIHJ1biBvZiBtb3JlIHRoYW4gMiBOVUxzICovCi0JZGVidWcoRjEwMCwic2NhbmZp bGUgQklOIHJ1bm1heCIsIiIsMCk7Ci0JcmMgPSBGVF9CSU47CQkJLyogc28gaXQgY2FuJ3QgYmUg YW55IGtpbmQgb2YgdGV4dC4gKi8KLQlnb3RvIHhzY2FuZmlsZTsKLQotICAgIH0gZWxzZSBpZiAo cmMgPT0gRlRfVUNTMiB8fCAocmMgPT0gRlRfVVRGOCAmJiBydW5tYXggPT0gMCkpIHsKLQlnb3Rv IHhzY2FuZmlsZTsJCQkvKiBGaWxlIHN0YXJ0cyB3aXRoIGEgQk9NICovCi0KLSAgICB9IGVsc2Ug aWYgKGVpZ2h0Yml0ID4gMCAmJiAhbm90dXRmOCkgeyAvKiBGaWxlIGhhcyA4LWJpdCBkYXRhICov Ci0JaWYgKHJ1bm1heCA+IDApIHsJCSAgIC8qIGFuZCBydW5zIG9mIE5VTHMgKi8KLQkgICAgZGVi dWcoRjEwMCwic2NhbmZpbGUgQklOIChublVURjgpIHJ1bm1heCIsIiIsMCk7Ci0JICAgIHJjID0g RlRfQklOOwkJICAgLyogVVRGLTggZG9lc24ndCBoYXZlIE5VTHMgKi8KLQl9IGVsc2UgewkJCSAg IC8qIE5vIE5VTHMgKi8KLQkgICAgZGVidWcoRjEwMCwic2NhbmZpbGUgVVRGOCAobm5VVEY4ICsg cnVubWF4ID09IDApIiwiIiwwKTsKLQkgICAgcmMgPSBGVF9VVEY4OwkJICAgLyogYW5kIG5vdCBu b3QgVVRGLTgsIHNvIGlzIFVURi04ICovCi0JfQotCWdvdG8geHNjYW5maWxlOwotICAgIH0KLS8q Ci0gIEZvciBVQ1MtMiBkZXRlY3Rpb24sIHNlZSBpZiB0aGUgdGV4dCBjb250YWlucyBsaW5lcyBk ZWxpbWl0ZWQgYnkKLSAgQVNDSUkgY29udHJvbHMgYW5kIGNvbnRhaW5pbmcgc3BhY2VzLCBBU0NJ SSBkaWdpdHMsIG9yIG90aGVyIEFTQ0lJCi0gIGNoYXJhY3RlcnMsIHRodXMgZm9yY2luZyB0aGUg cHJlc2VuY2Ugb2YgYSBjZXJ0YWluIHBlcmNlbnRhZ2Ugb2YgemVybyBieXRlcy4KLSAgRm9yIHRo aXMgcHVycG9zZSByZXF1aXJlIDIwJSB6ZXJvIGJ5dGVzLCB3aXRoIGF0IGxlYXN0IHNpeCB0aW1l cyBhcyBtYW55Ci0gIGluIGV2ZW4gKG9kZCkgcG9zaXRpb25zIGFzIGluIG9kZCAoZXZlbikgcG9z aXRpb25zLgotKi8KLSAgICBpZiAoKGV2ZW56ZXJvID49IHggJiYgb2RkemVybyA9PSAwKSB8fAot CSgoKChldmVuemVybyAvIChvZGR6ZXJvICsgMSkpID4gNikgJiYgKHBjdHplcm8gPiAyMCkpICYm Ci0JKGNybGYgPT0gMCkgJiYKLQkobGZudWwgPiAxKSkKLQkpIHsKLQkgICAgZGVidWcoRjEwMCwi c2NhbmZpbGUgVUNTMiBub0JPTSBCRSAoZXZlbi9vZGR6ZXJvKSIsIiIsMCk7Ci0JcmMgPSBGVF9V Q1MyOwotCXZhbCA9IDA7Ci0gICAgfSBlbHNlIGlmICgoZXZlbnplcm8gPT0gMCAmJiBvZGR6ZXJv ID49IHgpIHx8Ci0JICAgICAgICgoKChvZGR6ZXJvIC8gKGV2ZW56ZXJvICsgMSkpID4gNikgJiYg KHBjdHplcm8gPiAyMCkpICYmCi0JICAgICAgIChjcmxmID09IDApICYmCi0JICAgICAgIChsZm51 bCA+IDEpKQotCSAgICAgICApIHsKLQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBVQ1MyIG5vQk9NIExF IChldmVuL29kZHplcm8pIiwiIiwwKTsKLQlyYyA9IEZUX1VDUzI7Ci0JdmFsID0gMTsKLQotI2lm ZGVmIENPTU1FTlQKLSNpZmRlZiBFVkVOTUFYCi0vKgotICBJZiB0aGUgdGVzdHMgYWJvdmUgZmFp bCwgd2Ugc3RpbGwgbWlnaHQgaGF2ZSBVQ1MtMiBpZiB0aGVyZSBhcmUgc2lnbmlmaWNhbnQKLSAg cnVucyBvZiBpZGVudGljYWwgYnl0ZXMgaW4gYWx0ZXJuYXRpbmcgcG9zaXRpb25zLCBidXQgb25s eSBpZiBpdCBhbHNvIGhhcwotICB1bnVzdWFsIEMwIGNvbnRyb2xzIChvdGhlcndpc2Ugd2UnZCBw aWNrIHVwIGhleCBmaWxlcyBoZXJlKS4gIE5PVEU6IFdlCi0gIGRvbid0IGFjdHVhbGx5IGRvIHRo aXMgLS0gRVZFTk1BWCBpcyBub3QgZGVmaW5lZCAoc2VlIGNvbW1lbnRzIGFib3ZlIGF0Ci0gIGZp cnN0IG9jY3VycmVuY2Ugb2YgRVZFTk1BWCkuCi0qLwotICAgIH0gZWxzZSBpZiAoYzBub25pc28g JiYgZXZlbm1heCA+IGJ5dGVzIC8gNCkgewotCWRlYnVnKEYxMDAsInNjYW5maWxlIFVDUzIgQkUg KGV2ZW5tYXgpIiwiIiwwKTsKLQlyYyA9IEZUX1VDUzI7Ci0JdmFsID0gMDsKLSAgICB9IGVsc2Ug aWYgKGMwbm9uaXNvICYmIG9kZG1heCA+IGJ5dGVzIC8gNCkgewotCWRlYnVnKEYxMDAsInNjYW5m aWxlIFVDUzIgTEUgKGV2ZW5tYXgpIiwiIiwwKTsKLQlyYyA9IEZUX1VDUzI7Ci0JdmFsID0gMTsK LSNlbmRpZiAvKiBFVkVOTUFYICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgfQotLyoK LSAgSXQgc2VlbXMgdG8gYmUgVUNTLTIgYnV0IGxldCdzIGJlIG1vcmUgY2VydGFpbiBzaW5jZSB0 aGVyZSBpcyBubyBCT00uLi4KLSAgSWYgdGhlIG51bWJlciBvZiA3LSBhbmQgOC1iaXQgY2hhcmFj dGVycyBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsLCBpdCBtaWdodAotICBiZSBhIGNvbXByZXNzZWQg ZmlsZS4gIEluIHRoaXMgY2FzZSB3ZSBkZWNpZGUgYmFzZWQgb24gdGhlIG5hbWUuCi0qLwotICAg IGlmIChyYyA9PSBGVF9VQ1MyKSB7Ci0JaWYgKGVpZ2h0Yml0ID4gMCkgewotCSAgICBpbnQgaiwg azsKLQkgICAgaiA9IChjMWNvbnRyb2xzICogMTAwKSAvIChjMGNvbnRyb2xzICsgMSk7Ci0JICAg IGRlYnVnKEYxMDEsInNjYW5maWxlIGMxL2MwICAgICAgIiwiIixqKTsKLQkgICAgayA9IChieXRl cyAqIDEwMCkgLyBlaWdodGJpdDsKLQkgICAgZGVidWcoRjEwMSwic2NhbmZpbGUgcGN0IDhiaXQg ICAiLCIiLGspOwotCSAgICBpZiAoayA+IDQwICYmIGsgPCA2MCAmJiBqID4gNjApIHsKLQkJaWYg KGNrbWF0Y2goInsqLlosKi5neiwqLnppcCwqLlpJUH0iLG5hbWUsMSwxKSkgewotCQkgICAgZGVi dWcoRjExMCwic2NhbmZpbGUgOC1iaXQgQklOIGNvbXByZXNzZWQiLG5hbWUsMCk7Ci0JCSAgICBy YyA9IEZUX0JJTjsKLQkJICAgIGdvdG8geHNjYW5maWxlOwotCQl9Ci0JICAgIH0KLQl9Ci0JLyog U21hbGwgZmlsZSAtIG5vdCBlbm91Z2ggZXZpZGVuY2UgdW5sZXNzIC4uLiAqLwotCi0JaWYgKGJ5 dGVzIDwgMTAwKSB7Ci0JICAgIGlmIChvZGR6ZXJvICE9IDAgJiYgZXZlbnplcm8gIT0gMCkgewot CQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBzbWFsbCBVQ1MyIGRvdWJ0ZnVsIiwiIiwwKTsKLQkJcmMg PSBGVF9CSU47Ci0JCWdvdG8geHNjYW5maWxlOwotCSAgICB9IGVsc2UgaWYgKG9kZHplcm8gPT0g MCAmJiBldmVuemVybyA9PSAwKSB7Ci0JCXJjID0gZWlnaHRiaXQgPyBGVF84QklUIDogRlRfN0JJ VDsKLQkgICAgfQotCX0KLQlnb3RvIHhzY2FuZmlsZTsJCQkvKiBTZWVtcyB0byBiZSBVQ1MtMiAq LwotICAgIH0KLQotLyogSWYgbm9uZSBvZiB0aGUgYWJvdmUsIGl0J3MgcHJvYmFibHkgbm90IFVu aWNvZGUuICAqLwotCi0gICAgaWYgKCFlaWdodGJpdCkgewkJCS8qIEl0J3MgNy1iaXQgKi8KLQlp ZiAoYzBjb250cm9scykgewkJLyogVGhpcyB3b3VsZCBiZSBzdHJhbmdlICovCi0JICAgIGlmICgo YzBub25pc28gPiAwKSAmJiAodHh0Y3ogPT0gMCkpIHsKLQkJZGVidWcoRjEwMCwic2NhbmZpbGUg Ny1iaXQgQklOIChjMGNvbmlzbykiLCIiLDApOwotCQlyYyA9IEZUX0JJTjsKLQkgICAgfSBlbHNl IHsKLQkJZGVidWcoRjEwMCwic2NhbmZpbGUgNy1iaXQgSVNPMjAyMiBURVhUIChubyBjMG5vbmlz bykiLCIiLDApOwotCQlyYyA9IEZUXzdCSVQ7Ci0JICAgIH0KLQl9IGVsc2UgewkJCS8qIDctYml0 IHRleHQgKi8KLQkgICAgZGVidWcoRjEwMCwic2NhbmZpbGUgNy1iaXQgVEVYVCAobm8gYzBjb250 cm9scykiLCIiLDApOwotCSAgICByYyA9IEZUXzdCSVQ7Ci0JfQotICAgIH0gZWxzZSBpZiAoIWMw bm9uaXNvIHx8IHR4dGN6KSB7CS8qIDgtYml0IHRleHQgKi8KLQlkZWJ1ZyhGMTAwLCJzY2FuZmls ZSA4LWJpdCBURVhUIChubyBjMG5vbmlzbykiLCIiLDApOwotCXJjID0gRlRfOEJJVDsKLQl2YWwg PSBjMWNvbnRyb2xzID8gMSA6IDA7Ci0gICAgfSBlbHNlIHsJCQkJLyogOC1iaXQgYmluYXJ5ICov Ci0JZGVidWcoRjEwMCwic2NhbmZpbGUgOC1iaXQgQklOIChjMG5vbmlzbykiLCIiLDApOwotCXJj ID0gRlRfQklOOwotICAgIH0KLQotI2Vsc2UgIC8qICFVTklDT0RFICovCi0KLSAgICBpZiAoYzBu b25pc28pIHsKLQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA4LWJpdCBCSU4gKGMwbm9uaXNvKSIsIiIs MCk7Ci0JcmMgPSBGVF9CSU47Ci0gICAgfSBlbHNlIGlmIChlaWdodGJpdCkgewotCWRlYnVnKEYx MDAsInNjYW5maWxlIDgtYml0IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF84 QklUOwotCXZhbCA9IGMxY29udHJvbHMgPyAxIDogMDsKLSAgICB9IGVsc2UgewotCWRlYnVnKEYx MDAsInNjYW5maWxlIDctYml0IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF83 QklUOwotICAgIH0KLQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotICB4c2NhbmZpbGU6Ci0gICAg aWYgKGZsYWcpICpmbGFnID0gdmFsOwotICAgIGRlYnVnKEYxMDEsInNjYW5maWxlIHJlc3VsdCAg ICAgIiwiIixyYyk7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotLyoKLSAgc2NhbnN0cmluZyAtIGxp a2Ugc2NhbiBmaWxlIGJ1dCBmb3IgYSBzdHJpbmcuCi0gIFRoaXMgaXMganVzdCBhIHF1aWNrIGJ1 dGNoZXJ5IG9mIHNjYW5maWxlIHdpdGhvdXQgdGhpbmtpbmcgdG9vIG11Y2guCi0qLwotaW50Ci1z Y2Fuc3RyaW5nKHMpIGNoYXIgKiBzOyB7Ci0gICAgaW50IHgsIHZhbCA9IC0xLCBjb3VudCA9IDA7 CQkvKiBXb3JrZXJzICovCi0gICAgaW50IHJjID0gLTE7CQkJLyogUmV0dXJuIGNvZGUgKi8KLSAg ICBpbnQgcHYgPSAtMTsJCQkvKiBQYXR0ZXJuLW1hdGNoIHZhbHVlICovCi0gICAgaW50IGJ5dGVz ID0gMDsJCQkvKiBUb3RhbCBieXRlIGNvdW50ICovCi0jaWZkZWYgVU5JQ09ERQotICAgIHVuc2ln bmVkIGludCBjMCwgYzE7CQkvKiBGaXJzdCAyIGZpbGUgYnl0ZXMgKGZvciBCT00pICovCi0jZW5k aWYgLyogVU5JQ09ERSAqLwotICAgIGV4dGVybiBpbnQgcGlwZXNlbmQsIGZpbGVwZWVrOwotCi0g ICAgcmVnaXN0ZXIgaW50IGk7CQkJLyogTG9vcCBjb250cm9sICovCi0gICAgaW50IHJlYWRzaXpl ID0gMDsJCQkvKiBIb3cgbXVjaCB0byByZWFkICovCi0gICAgaW50IGVpZ2h0Yml0ID0gMDsJCQkv KiBOdW1iZXIgb2YgYnl0ZXMgd2l0aCA4dGggYml0IG9uICovCi0gICAgaW50IGMwY29udHJvbHMg PSAwOwkJCS8qIEMwIG5vbi10ZXh0IGNvbnRyb2wtY2hhciBjb3VudGVyICovCi0gICAgaW50IGMw bm9uaXNvID0gMDsJCQkvKiBDMCBub24tSVNPIGNvbnRyb2wtY2hhciBjb3VudGVyICovCi0gICAg aW50IGMxY29udHJvbHMgPSAwOwkJCS8qIEMxIGNvbnRyb2wtY2hhcmFjdGVyIGNvdW50ZXIgKi8K LSAgICB1bnNpZ25lZCBpbnQgYzsJCQkvKiBDdXJyZW50IGNoYXJhY3RlciAqLwotICAgIGludCBy dW5tYXggPSAwOwkJCS8qIExvbmdlc3QgcnVuIG9mIDAgYnl0ZXMgKi8KLSAgICBpbnQgcnVuemVy byA9IDA7CQkJLyogUnVuIG9mIDAgYnl0ZXMgKi8KLSAgICBpbnQgcGN0emVybyA9IDA7CQkJLyog UGVyY2VudGFnZSBvZiAwIGJ5dGVzICovCi0gICAgaW50IHR4dGN6ID0gMDsKLQotI2lmZGVmIFVO SUNPREUKLSAgICBpbnQgbm90dXRmOCA9IDA7CQkJLyogTm9uemVybyBpZiBkZWZpbml0ZWx5IG5v dCBVVEYtOCAqLwotICAgIGludCB1dGY4c3RhdGUgPSAwOwkJCS8qIFVURi04IHJlY29nbml6ZXIg c3RhdGUgKi8KLSAgICBpbnQgb2RkemVybyA9IDA7CQkJLyogTnVtYmVyIG9mIDAgYnl0ZXMgaW4g b2RkIHBvc3Rpb25zICovCi0gICAgaW50IGV2ZW56ZXJvID0gMDsJCQkvKiBhbmQgaW4gZXZlbiBw b3NpdGlvbnMgKi8KLSAgICBpbnQgbGZudWwgPSAwOwkJCS8qIE51bWJlciBvZiA8TEY+PE5VTD4g c2VxdWVuY2VzICovCi0gICAgaW50IGNybGYgPSAwOwkJCS8qIE51bWJlciBvZiA8Q1JMRj4gc2Vx dWVuY2VzICovCi0jZWxzZQotICAgIGludCBub3R1dGY4ID0gMTsKLSNlbmRpZiAvKiBVTklDT0RF ICovCi0KLSAgICBjaGFyICogYnVmID0gczsKLSAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICBjb3Vu dCA9IHN0cmxlbihzKTsKLQotI2lmZGVmIFVOSUNPREUKLSAgICBpZiAoYnl0ZXMgPT0gMCAmJiBj b3VudCA+IDEpIHsKLQlpbnQgaW5jbF9jbnQgPSAwOwotCi0JLyogRmlyc3QgbG9vayBmb3IgQk9N ICovCi0KLQljMCA9ICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1ZlswXSYweEZGKTsgLyogRmlyc3Qg ZmlsZSBieXRlICovCi0JYzEgPSAodW5zaWduZWQpKCh1bnNpZ25lZClidWZbMV0mMHhGRik7IC8q IFNlY29uZCBieXRlICovCi0KLQlpZiAoYzAgPT0gMHhGRSAmJiBjMSA9PSAweEZGKSB7CS8qIFVD Uy0yIEJFICovCi0JICAgIHJjID0gRlRfVUNTMjsKLQkgICAgdmFsID0gMDsKLQkgICAgZGVidWco RjExMSwic2NhbnN0cmluZyBVQ1MyIEJPTSBCRSIsY2tpdG9hKHZhbCkscmMpOwotCSAgICBpbmNs X2NudCsrOwotCX0gZWxzZSBpZiAoYzAgPT0gMHhGRiAmJiBjMSA9PSAweEZFKSB7IC8qIFVDUy0y IExFICovCi0JICAgIHJjID0gRlRfVUNTMjsKLQkgICAgdmFsID0gMTsKLQkgICAgZGVidWcoRjEx MSwic2NhbnN0cmluZyBVQ1MyIEJPTSBMRSIsY2tpdG9hKHZhbCkscmMpOwotCSAgICBpbmNsX2Nu dCsrOwotCX0gZWxzZSBpZiAoY291bnQgPiAyKSBpZiAoYzAgPT0gMHhFRiAmJiBjMSA9PSAweEJC ICYmCi0JCSAgICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1ZlsyXSYweEZGKSA9PSAweEJGKSB7Ci0J ICAgIHJjID0gRlRfVVRGODsKLQkgICAgZGVidWcoRjExMSwic2NhbnN0cmluZyBVVEY4IEJPTSIs Y2tpdG9hKHZhbCkscmMpOwotCSAgICBpbmNsX2NudCsrOwotCX0KLQlpZiAoaW5jbF9jbnQpIHsJ CS8qIEhhdmUgQk9NICovCi0JICAgIGJ5dGVzICs9IGNvdW50OwotCSAgICBnb3RvIHhzY2Fuc3Ry aW5nOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0gICAgYnl0ZXMgKz0gY291 bnQ7CQkJLyogQ291bnQgYnl0ZXMgcmVhZCAqLwotCi0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50 OyBpKyspIHsJLyogRm9yIGVhY2ggYnl0ZS4uLiAqLwotCWMgPSAodW5zaWduZWQpYnVmW2ldOwkv KiBGb3IgZWFzZSBvZiByZWZlcmVuY2UgKi8KLQlpZiAoIWMpIHsJCQkvKiBaZXJvIGJ5dGU/ICov Ci0JICAgIGdvdG8geHNjYW5zdHJpbmc7CS8qIE51bGwgdGVybWluYXRlZCBzdHJpbmcgKi8KLQl9 Ci0JaWYgKChjICYgMHg4MCkgPT0gMCkgewkvKiBXZSBoYXZlIGEgNy1iaXQgYnl0ZSAqLwotI2lm ZGVmIFVOSUNPREUKLQkgICAgaWYgKGkgPiAwICYmIGMgPT0gMTApIHsgLyogTGluZWZlZWQgKi8K LQkJaWYgKGJ1ZltpLTFdID09IDApIGxmbnVsKys7IC8qIFByZWNlZGVkIGJ5IE5VTCAqLwotCQll bHNlIGlmIChidWZbaS0xXSA9PSAxMykgY3JsZisrOyAvKiBvciBieSBDUi4uLiAqLwotCSAgICB9 Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCSAgICBpZiAoYyA8ICcgJykgewkJLyogQ2hlY2sgZm9y IENPIGNvbnRyb2xzICovCi0JCWlmIChjICE9IExGICYmIGMgIT0gQ1IgJiYgYyAhPSBIVCAmJiBj ICE9IEZGKSB7Ci0JCSAgICBjMGNvbnRyb2xzKys7Ci0JCSAgICBpZiAoYyAhPSBFU0MgJiYgYyAh PSBTTyAmJiBjICE9IFNJKQotCQkgICAgICBjMG5vbmlzbysrOwotCQl9Ci0JCWlmICgoYyA9PSAn XDAzMicpCS8qIEN0cmwtWiAqLwotCQkgICAgKSB7Ci0JCSAgICBjMGNvbnRyb2xzLS07Ci0JCSAg ICBjMG5vbmlzby0tOwotCQl9Ci0JICAgIH0KLSNpZmRlZiBVTklDT0RFCi0JICAgIGlmICghbm90 dXRmOCAmJiB1dGY4c3RhdGUpIHsgLyogSW4gVVRGLTggc2VxdWVuY2U/ICovCi0JCXV0ZjhzdGF0 ZSA9IDA7Ci0JCWRlYnVnKEYwMDAsInNjYW5zdHJpbmciLCI3LWJpdCBieXRlIGluIFVURjggc2Vx dWVuY2UiLGMpOwotCQlub3R1dGY4Kys7CQkvKiBUaGVuIGl0J3Mgbm90IFVURi04ICovCi0JCWNv bnRpbnVlOwotCSAgICB9Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCX0gZWxzZSB7CQkJLyogV2Ug aGF2ZSBhbiA4LWJpdCBieXRlICovCi0JICAgIGVpZ2h0Yml0Kys7CQkvKiBDb3VudCBpdCAqLwot CSAgICBpZiAoYyA+PSAweDgwICYmIGMgPCAweEEwKSAvKiBDaGVjayBmb3IgQzEgY29udHJvbHMg Ki8KLQkgICAgICBjMWNvbnRyb2xzKys7Ci0jaWZkZWYgVU5JQ09ERQotCSAgICBpZiAoIW5vdHV0 ZjgpIHsJCS8qIElmIGl0IG1pZ2h0IHN0aWxsIGJlIFVURjguLi4gKi8KLQkJc3dpdGNoICh1dGY4 c3RhdGUpIHsgLyogRW50ZXIgdGhlIFVURi04IHN0YXRlIG1hY2hpbmUgKi8KLQkJICBjYXNlIDA6 CQkgLyogRmlyc3QgYnl0ZS4uLiAqLwotCQkgICAgaWYgKChjICYgMHhFMCkgPT0gMHhDMCkgeyAv KiBUZWxscyBudW1iZXIgb2YgKi8KLQkJCXV0ZjhzdGF0ZSA9IDE7ICAgICAgICAvKiBzdWJzZXF1 ZW50IGJ5dGVzICovCi0JCSAgICB9IGVsc2UgaWYgKChjICYgMHhGMCkgPT0gMHhFMCkgewotCQkJ dXRmOHN0YXRlID0gMjsKLQkJICAgIH0gZWxzZSBpZiAoKGMgJiAweEY4KSA9PSAweEYwKSB7Ci0J CQl1dGY4c3RhdGUgPSAzOwotCQkgICAgfSBlbHNlIHsKLQkJCW5vdHV0ZjgrKzsKLQkJICAgIH0K LQkJICAgIGJyZWFrOwotCQkgIGNhc2UgMToJCS8qIFN1YnNlcXVlbnQgYnl0ZSAqLwotCQkgIGNh c2UgMjoKLQkJICBjYXNlIDM6Ci0JCSAgICBpZiAoKGMgJiAweEMwKSAhPSAweDgwKSB7IC8qIE11 c3Qgc3RhcnQgd2l0aCAxMCAqLwotCQkJZGVidWcoRjAwMCwic2NhbnN0cmluZyIsCi0JCQkgICAg ICAiYmFkIGJ5dGUgaW4gVVRGOCBzZXF1ZW5jZSIsYyk7Ci0JCQlub3R1dGY4Kys7Ci0JCQlicmVh azsKLQkJICAgIH0KLQkJICAgIHV0ZjhzdGF0ZS0tOwkvKiBHb29kLCBvbmUgbGVzcyBpbiB0aGlz IHNlcXVlbmNlICovCi0JCSAgICBicmVhazsKLQkJICBkZWZhdWx0OgkJLyogU2hvdWxkbid0IGhh cHBlbiAqLwotCQkgICAgZGVidWcoRjExMSwic2NhbnN0cmluZyIsImJhZCBVVEY4IHN0YXRlIix1 dGY4c3RhdGUpOwotCQkgICAgbm90dXRmOCsrOwotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBVTklD T0RFICovCi0JfQotICAgIH0KLSAgICBpZiAoYnl0ZXMgPT0gMCkJCQkvKiBJZiBub3RoaW5nIHdh cyByZWFkICovCi0gICAgICByZXR1cm4oLTEpOwkJCS8qIHdlJ3JlIGRvbmUuICovCi0KLSNpZmRl ZiBVTklDT0RFCi0gICAgaWYgKGJ5dGVzID4gMTAwKQkJCS8qIEJ5dGVzIGlzIG5vdCAwICovCi0g ICAgICBwY3R6ZXJvID0gKGV2ZW56ZXJvICsgb2RkemVybykgLyAoYnl0ZXMgLyAxMDApOwotICAg IGVsc2UKLSAgICAgIHBjdHplcm8gPSAoKGV2ZW56ZXJvICsgb2RkemVybykgKiAxMDApIC8gYnl0 ZXM7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0jaWZkZWYgVU5JQ09ERQotICAgIHggPSBlaWdo dGJpdCA/IGJ5dGVzIC8gMjAgOiBieXRlcyAvIDQ7IC8qIEZvciBVQ1MtMi4uLiAqLwotCi0gICAg aWYgKHJ1bm1heCA+IDIpIHsJCQkvKiBGaWxlIGhhcyBydW4gb2YgbW9yZSB0aGFuIDIgTlVMcyAq LwotCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgQklOIHJ1bm1heCIsIiIsMCk7Ci0JcmMgPSBGVF9C SU47CQkJLyogc28gaXQgY2FuJ3QgYmUgYW55IGtpbmQgb2YgdGV4dC4gKi8KLQlnb3RvIHhzY2Fu c3RyaW5nOwotCi0gICAgfSBlbHNlIGlmIChyYyA9PSBGVF9VQ1MyIHx8IChyYyA9PSBGVF9VVEY4 ICYmIHJ1bm1heCA9PSAwKSkgewotCWdvdG8geHNjYW5zdHJpbmc7CQkJLyogRmlsZSBzdGFydHMg d2l0aCBhIEJPTSAqLwotCi0gICAgfSBlbHNlIGlmIChlaWdodGJpdCA+IDAgJiYgIW5vdHV0Zjgp IHsgLyogRmlsZSBoYXMgOC1iaXQgZGF0YSAqLwotCWlmIChydW5tYXggPiAwKSB7CQkgICAvKiBh bmQgcnVucyBvZiBOVUxzICovCi0JICAgIGRlYnVnKEYxMDAsInNjYW5zdHJpbmcgQklOIChublVU RjgpIHJ1bm1heCIsIiIsMCk7Ci0JICAgIHJjID0gRlRfQklOOwkJICAgLyogVVRGLTggZG9lc24n dCBoYXZlIE5VTHMgKi8KLQl9IGVsc2UgewkJCSAgIC8qIE5vIE5VTHMgKi8KLQkgICAgZGVidWco RjEwMCwic2NhbnN0cmluZyBVVEY4IChublVURjggKyBydW5tYXggPT0gMCkiLCIiLDApOwotCSAg ICByYyA9IEZUX1VURjg7CQkgICAvKiBhbmQgbm90IG5vdCBVVEYtOCwgc28gaXMgVVRGLTggKi8K LQl9Ci0JZ290byB4c2NhbnN0cmluZzsKLSAgICB9Ci0vKgotICBJdCBzZWVtcyB0byBiZSBVQ1Mt MiBidXQgbGV0J3MgYmUgbW9yZSBjZXJ0YWluIHNpbmNlIHRoZXJlIGlzIG5vIEJPTS4uLgotICBJ ZiB0aGUgbnVtYmVyIG9mIDctIGFuZCA4LWJpdCBjaGFyYWN0ZXJzIGlzIGFwcHJveGltYXRlbHkg ZXF1YWwsIGl0IG1pZ2h0Ci0gIGJlIGEgY29tcHJlc3NlZCBmaWxlLiAgSW4gdGhpcyBjYXNlIHdl IGRlY2lkZSBiYXNlZCBvbiB0aGUgbmFtZS4KLSovCi0gICAgaWYgKHJjID09IEZUX1VDUzIpIHsK LQlpZiAoYnl0ZXMgPCAxMDApIHsKLQkgICAgaWYgKG9kZHplcm8gIT0gMCAmJiBldmVuemVybyAh PSAwKSB7Ci0JCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgc21hbGwgVUNTMiBkb3VidGZ1bCIsIiIs MCk7Ci0JCXJjID0gRlRfQklOOwotCQlnb3RvIHhzY2Fuc3RyaW5nOwotCSAgICB9IGVsc2UgaWYg KG9kZHplcm8gPT0gMCAmJiBldmVuemVybyA9PSAwKSB7Ci0JCXJjID0gZWlnaHRiaXQgPyBGVF84 QklUIDogRlRfN0JJVDsKLQkgICAgfQotCX0KLQlnb3RvIHhzY2Fuc3RyaW5nOwkJCS8qIFNlZW1z IHRvIGJlIFVDUy0yICovCi0gICAgfQotCi0vKiBJZiBub25lIG9mIHRoZSBhYm92ZSwgaXQncyBw cm9iYWJseSBub3QgVW5pY29kZS4gICovCi0KLSAgICBpZiAoIWVpZ2h0Yml0KSB7CQkJLyogSXQn cyA3LWJpdCAqLwotCWlmIChjMGNvbnRyb2xzKSB7CQkvKiBUaGlzIHdvdWxkIGJlIHN0cmFuZ2Ug Ki8KLQkgICAgaWYgKChjMG5vbmlzbyA+IDApICYmICh0eHRjeiA9PSAwKSkgewotCQlkZWJ1ZyhG MTAwLCJzY2Fuc3RyaW5nIDctYml0IEJJTiAoYzBjb25pc28pIiwiIiwwKTsKLQkJcmMgPSBGVF9C SU47Ci0JICAgIH0gZWxzZSB7Ci0JCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgNy1iaXQgSVNPMjAy MiBURVhUIChubyBjMG5vbmlzbykiLCIiLDApOwotCQlyYyA9IEZUXzdCSVQ7Ci0JICAgIH0KLQl9 IGVsc2UgewkJCS8qIDctYml0IHRleHQgKi8KLQkgICAgZGVidWcoRjEwMCwic2NhbnN0cmluZyA3 LWJpdCBURVhUIChubyBjMGNvbnRyb2xzKSIsIiIsMCk7Ci0JICAgIHJjID0gRlRfN0JJVDsKLQl9 Ci0gICAgfSBlbHNlIGlmICghYzBub25pc28gfHwgdHh0Y3opIHsJLyogOC1iaXQgdGV4dCAqLwot CWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgOC1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsK LQlyYyA9IEZUXzhCSVQ7Ci0JdmFsID0gYzFjb250cm9scyA/IDEgOiAwOwotICAgIH0gZWxzZSB7 CQkJCS8qIDgtYml0IGJpbmFyeSAqLwotCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgOC1iaXQgQklO IChjMG5vbmlzbykiLCIiLDApOwotCXJjID0gRlRfQklOOwotICAgIH0KLQotI2Vsc2UgIC8qICFV TklDT0RFICovCi0KLSAgICBpZiAoYzBub25pc28pIHsKLQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5n IDgtYml0IEJJTiAoYzBub25pc28pIiwiIiwwKTsKLQlyYyA9IEZUX0JJTjsKLSAgICB9IGVsc2Ug aWYgKGVpZ2h0Yml0KSB7Ci0JZGVidWcoRjEwMCwic2NhbnN0cmluZyA4LWJpdCBURVhUIChubyBj MG5vbmlzbykiLCIiLDApOwotCXJjID0gRlRfOEJJVDsKLQl2YWwgPSBjMWNvbnRyb2xzID8gMSA6 IDA7Ci0gICAgfSBlbHNlIHsKLQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDctYml0IFRFWFQgKG5v IGMwbm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF83QklUOwotICAgIH0KLQotI2VuZGlmIC8qIFVO SUNPREUgKi8KLQotICB4c2NhbnN0cmluZzoKLSAgICBkZWJ1ZyhGMTAxLCJzY2Fuc3RyaW5nIHJl c3VsdCAgICAgIiwiIixyYyk7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotCi0KLS8qICBGIEkgTCBF IFMgRSBMIEUgQyBUICAtLSAgU2VsZWN0IHRoaXMgZmlsZSBmb3Igc2VuZGluZyAgKi8KLQotaW50 Ci0jaWZkZWYgQ0tfQU5TSUMKLWZpbGVzZWxlY3QoCi0gICAgY2hhciAqZiwgY2hhciAqc2EsIGNo YXIgKnNiLCBjaGFyICpzbmEsIGNoYXIgKnNuYiwKLSAgICBDS19PRkZfVCBtaW5zaXosIENLX09G Rl9UIG1heHNpeiwKLSAgICBpbnQgbmJ1LCBpbnQgbnhsaXN0LAotICAgIGNoYXIgKiogeGxpc3QK LSkKLSNlbHNlCi1maWxlc2VsZWN0KGYsc2Esc2Isc25hLHNuYixtaW5zaXosbWF4c2l6LG5idSxu eGxpc3QseGxpc3QpCi0gY2hhciAqZiwqc2EsKnNiLCpzbmEsKnNuYjsgQ0tfT0ZGX1QgbWluc2l6 LG1heHNpejsKLSBpbnQgbmJ1LG54bGlzdDsgY2hhciAqKiB4bGlzdDsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotLyogZmlsZXNlbGVjdCAqLyB7Ci0gICAgY2hhciAqZmRhdGU7Ci0gICAgaW50IG47 Ci0gICAgQ0tfT0ZGX1QgejsKLQotICAgIGRlYnVnKEYxMTEsImZpbGVzZWxlY3QgbWluc2l6Iixj a2ZzdG9hKG1pbnNpeiksbWluc2l6KTsKLSAgICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IG1heHNp eiIsY2tmc3RvYShtYXhzaXopLG1heHNpeik7Ci0gICAgZGVidWcoRjExMSwiZmlsZXNlbGVjdCAo Q0tfT0ZGX1QpLTEiLGNrZnN0b2EoKENLX09GRl9UKS0xKSwoQ0tfT0ZGX1QpLTEpOwotCi0gICAg aWYgKCFzYSkgc2EgPSAiIjsKLSAgICBpZiAoIXNiKSBzYiA9ICIiOwotICAgIGlmICghc25hKSBz bmEgPSAiIjsKLSAgICBpZiAoIXNuYikgc25iID0gIiI7Ci0KLSNpZmRlZiBDS1NZTUxJTksKLSNp Zm5kZWYgTk9JQ1AKLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKG5vbGlua3MpIHsKLQlDS19PRkZf VCB6ejsKLQl6eiA9IHpnZXRmcyhmKTsKLQlkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IE5PTElOS1Mg emdldGZzIixmLHp6KTsKLQlpZiAoenogPCAoQ0tfT0ZGX1QpMCkKLQkgIHJldHVybigwKTsKLQlk ZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IE5PTElOS1Mgemdmc19saW5rIixmLHpnZnNfbGluayk7Ci0J aWYgKHpnZnNfbGluaykKLQkgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICov Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLQotICAgIGRlYnVn KEYxMTAsImZpbGVzZWxlY3QiLGYsMCk7Ci0gICAgaWYgKCpzYSB8fCAqc2IgfHwgKnNuYSB8fCAq c25iKSB7Ci0JZmRhdGUgPSB6ZmNkYXQoZik7CQkvKiBEYXRlL3RpbWUgb2YgdGhpcyBmaWxlICov Ci0JaWYgKCFmZGF0ZSkgZmRhdGUgPSAiIjsKLQluID0gc3RybGVuKGZkYXRlKTsKLQlkZWJ1ZyhG MTExLCJmaWxlc2VsZWN0IGZkYXRlIixmZGF0ZSxuKTsKLQlpZiAobiAhPSAxNykJCQkvKiBGYWls ZWQgdG8gZ2V0IGl0ICovCi0JICByZXR1cm4oMSk7Ci0JLyogL0FGVEVSOiAqLwotCWlmIChzYVsw XSAmJiAoc3RyY21wKGZkYXRlLChjaGFyICopc2EpIDw9IDApKSB7Ci0JICAgIGRlYnVnKEYxMTAs ImZpbGVzZWxlY3Qgc2EiLHNhLDApOwotCSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5nICh0b28g b2xkKSIsZiwwKTsgKi8KLQkgICAgcmV0dXJuKDApOwotCX0KLQkvKiAvQkVGT1JFOiAqLwotCWlm IChzYlswXSAmJiAoc3RyY21wKGZkYXRlLChjaGFyICopc2IpID49IDApKSB7Ci0JICAgIGRlYnVn KEYxMTAsImZpbGVzZWxlY3Qgc2IiLHNiLDApOwotCSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5n ICh0b28gbmV3KSIsZiwwKTsgKi8KLQkgICAgcmV0dXJuKDApOwotCX0KLQkvKiAvTk9ULUFGVEVS OiAqLwotCWlmIChzbmFbMF0gJiYgKHN0cmNtcChmZGF0ZSwoY2hhciAqKXNuYSkgPiAwKSkgewot CSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNuYSIsc25hLDApOwotCSAgICAvKiB0bG9nKEYx MTAsIlNraXBwaW5nICh0b28gbmV3KSIsZiwwKTsgKi8KLQkgICAgcmV0dXJuKDApOwotCX0KLQkv KiAvTk9ULUJFRk9SRTogKi8KLQlpZiAoc25iWzBdICYmIChzdHJjbXAoZmRhdGUsKGNoYXIgKilz bmIpIDwgMCkpIHsKLQkgICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBzbmIiLHNuYiwwKTsKLQkg ICAgLyogdGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIG9sZCkiLGYsMCk7ICovCi0JICAgIHJldHVy bigwKTsKLQl9Ci0gICAgfQotICAgIC8qIFNtYWxsZXIgb3IgbGFyZ2VyICovCi0gICAgaWYgKG1p bnNpeiA+IChDS19PRkZfVCktMSB8fCBtYXhzaXogPiAoQ0tfT0ZGX1QpLTEpIHsKLQl6ID0gemNo a2koZik7CQkJLyogR2V0IHNpemUgKi8KLQlkZWJ1ZyhGMTAxLCJmaWxlc2VsZWN0IGZpbGVzaXpl IiwiIix6KTsKLQlpZiAoeiA8IChDS19PRkZfVCkwKQotCSAgcmV0dXJuKDEpOwotCWlmICgobWlu c2l6ID4gKENLX09GRl9UKS0xKSAmJiAoeiA+PSBtaW5zaXopKSB7Ci0JICAgIGRlYnVnKEYxMTEs ImZpbGVzZWxlY3QgbWluc2l6IHNraXBwaW5nIixmLG1pbnNpeik7Ci0JICAgIC8qIHRsb2coRjEx MSwiU2tpcHBpbmcgKHRvbyBiaWcpIixmLHopOyAqLwotCSAgICByZXR1cm4oMCk7Ci0JfQotCWlm ICgobWF4c2l6ID4gKENLX09GRl9UKS0xKSAmJiAoeiA8PSBtYXhzaXopKSB7Ci0JICAgIGRlYnVn KEYxMTEsImZpbGVzZWxlY3QgbWF4c2l6IHNraXBwaW5nIixmLG1heHNpeik7Ci0JICAgIC8qIHRs b2coRjExMCwiU2tpcHBpbmcgKHRvbyBzbWFsbCkiLGYsMCk7ICovCi0JICAgIHJldHVybigwKTsK LQl9Ci0gICAgfQotICAgIGlmIChuYnUpIHsJCQkJLyogU2tpcHBpbmcgYmFja3VwIGZpbGVzPyAq LwotCWlmIChja21hdGNoKAotI2lmZGVmIENLUkVHRVgKLQkJICAgICIqLn5bMC05XSp+IgkvKiBO b3QgcGVyZmVjdCBidXQgY2xvc2UgZW5vdWdoLiAqLwotI2Vsc2UKLQkJICAgICIqLn4qfiIJCS8q IExlc3MgY2xvc2UuICovCi0jZW5kaWYgLyogQ0tSRUdFWCAqLwotCQkgICAgLGYsZmlsZWNhc2Us MSkpIHsKLQkgICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBza2lwcGluZyBiYWNrdXAiLGYsMCk7 Ci0JICAgIHJldHVybigwKTsKLQl9Ci0gICAgfQotICAgIGZvciAobiA9IDA7IHhsaXN0ICYmIG4g PCBueGxpc3Q7IG4rKykgewotCWlmICgheGxpc3Rbbl0pIHsKLQkgICAgZGVidWcoRjEwMSwiZmls ZXNlbGVjdCB4bGlzdCBlbXB0eSIsMCxuKTsKLQkgICAgYnJlYWs7Ci0JfQotCWlmIChja21hdGNo KHhsaXN0W25dLGYsZmlsZWNhc2UsMSkpIHsKLQkgICAgZGVidWcoRjExMSwiZmlsZXNlbGVjdCB4 bGlzdCIseGxpc3Rbbl0sbik7Ci0JICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc2tpcHBpbmci LGYsMCk7Ci0JICAgIHJldHVybigwKTsKLQl9Ci0gICAgfQotICAgIGlmICh4ZmlsZXR5cGUgPiAt MSkgewotCW4gPSBzY2FuZmlsZShmLE5VTEwsbnNjYW5maWxlKTsKLQlpZiAobiA8IDApIHsKLQkg ICAgbiA9IGJpbmFyeSA/IDEgOiAwOwotCX0gZWxzZSB7Ci0JICAgIG4gPSAobiA9PSBGVF9CSU4p ID8gMSA6IDA7Ci0JfQotCWlmIChuICE9IHhmaWxldHlwZSkKLQkgIHJldHVybigwKTsKLSAgICB9 Ci0gICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBzZWxlY3RpbmciLGYsMCk7Ci0gICAgcmV0dXJu KDEpOwotfQotCi0KLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZmRlZiBOVAotZXh0ZXJuIGludCBXU0FT YWZlVG9DYW5jZWw7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQot Vk9JRAotc2V0ZmxvdygpIHsKLSAgICBleHRlcm4gaW50IGZsb3csIGF1dG9mbG93LCBtZG10eXAs IGN4dHlwZSwgY3hmbG93W107Ci0jaWZuZGVmIE5PRElBTAotICAgIGV4dGVybiBpbnQgZGlhbGNh cGFzLCBkaWFsZmM7Ci0gICAgZXh0ZXJuIE1ETUlORiAqIG1vZGVtcFtdOwotICAgIE1ETUlORiAq IHAgPSBOVUxMOwotICAgIGxvbmcgYml0cyA9IDA7Ci0jZW5kaWYgLyogTk9ESUFMICovCi0KLSAg ICBkZWJ1ZyhGMTAxLCJzZXRmbG93IGF1dG9mbG93IiwiIixhdXRvZmxvdyk7Ci0KLS8qICNpZmRl ZiBDT01NRU5UICovCi0vKiBXSFkgV0FTIFRISVMgQ09NTUVOVEVEIE9VVD8gKi8KLSAgICBpZiAo IWF1dG9mbG93KSAgICAgICAgICAgICAgICAgICAgICAvKiBPbmx5IGlmIEZMT1cgaXMgQVVUTyAq LwotICAgICAgcmV0dXJuOwotLyogI2VuZGlmICovIC8qIENPTU1FTlQgKi8KLQotICAgIGRlYnVn KEYxMDEsInNldGZsb3cgbG9jYWwiLCIiLGxvY2FsKTsKLSAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93 IG5ldHdvcmsiLCIiLG5ldHdvcmspOwotICAgIGRlYnVnKEYxMDEsInNldGZsb3cgY3h0eXBlIiwi IixjeHR5cGUpOwotCi0jaWZkZWYgVE5fQ09NUE9SVAotICAgIGlmIChuZXR3b3JrICYmIGlzdG5j b21wb3J0KCkpIHsKLQlmbG93ID0gY3hmbG93W0NYVF9NT0RFTV07Ci0gICAgICAgIGRlYnVnKEYx MDEsInNldGZsb3cgVE5fQ09NUE9SVCBmbG93IiwiIixmbG93KTsKLSAgICAgICAgcmV0dXJuOwot ICAgIH0KLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0KLSAgICBpZiAobmV0d29yayB8fCAhbG9j YWwgfHwgY3h0eXBlID09IENYVF9ESVJFQ1QpIHsKLSAgICAgICAgZmxvdyA9IGN4Zmxvd1tjeHR5 cGVdOyAgICAgICAgICAvKiBTZXQgYXBwcm9wcmlhdGUgZmxvdyBjb250cm9sICovCi0gICAgICAg IGRlYnVnKEYxMDEsInNldGZsb3cgZmxvdyIsIiIsZmxvdyk7Ci0gICAgICAgIHJldHVybjsKLSAg ICB9Ci0gICAgaWYgKGN4dHlwZSAhPSBDWFRfTU9ERU0pICAgICAgICAgICAgLyogQ29ubmVjdGlv biB0eXBlIHNob3VsZCBiZSBtb2RlbSAqLwotICAgICAgcmV0dXJuOwotCi0jaWZuZGVmIE5PRElB TAotICAgIGJpdHMgPSBkaWFsY2FwYXM7ICAgICAgICAgICAgICAgICAgIC8qIENhcGFiaWxpdHkg Yml0cyAqLwotICAgIGlmICghYml0cykgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGJp dHM/ICovCi0gICAgICAgIHAgPSBtb2RlbXBbbWRtdHlwXTsgICAgICAgICAgICAgLyogTG9vayBp biBtb2RlbSBpbmZvIHN0cnVjdHVyZSAqLwotICAgICAgICBpZiAocCkKLSAgICAgICAgICBiaXRz ID0gcC0+Y2FwYXM7Ci0gICAgfQotICAgIGlmIChkaWFsZmMgPT0gRkxPX0FVVE8pIHsgICAgICAg ICAgIC8qIElmIERJQUwgZmxvdyBpcyBBVVRPICovCi0jaWZkZWYgQ0tfUlRTQ1RTICAgICAgICAg ICAgICAgICAgICAgICAgLyogSWYgd2UgY2FuIGRvIFJUUy9DVFMgZmxvdyBjb250cm9sICovCi0g ICAgICAgIGlmIChiaXRzICYgQ0tEX0hXKSAgICAgICAgICAgICAgLyogYW5kIG1vZGVtIGNhbiBk byBpdCB0b28gKi8KLSAgICAgICAgICBmbG93ID0gRkxPX1JUU0M7ICAgICAgICAgICAgICAvKiB0 aGVuIHN3aXRjaCB0byBSVFMvQ1RTICovCi0gICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogb3RoZXJ3aXNlICovCi0gICAgICAgICAgZmxvdyA9IEZMT19YT05YOyAgICAg ICAgICAgICAgLyogdXNlIFhvbi9Yb2ZmLiAqLwotI2Vsc2UKLSNpZm5kZWYgTkVYVAotI2lmbmRl ZiBJUklYCi0gICAgICAgIGZsb3cgPSBGTE9fWE9OWDsgICAgICAgICAgICAgICAgLyogVXNlIFhv bi9Yb2ZmLiAqLwotI2VuZGlmIC8qIElSSVggKi8KLSNlbmRpZiAvKiBORVhUICovCi0jZW5kaWYg LyogQ0tfUlRTQ1RTICovCi0gICAgfQotI2VuZGlmIC8qIE5PRElBTCAqLwotICAgIGRlYnVnKEYx MDEsInNldGZsb3cgbW9kZW0gZmxvdyIsIiIsZmxvdyk7Ci0gICAgcmV0dXJuOwotfQotCi0jaWZu ZGVmIE5PTE9DQUwKLSNpZmRlZiBDS19UUklHR0VSCi0KLS8qICBBIFUgVCBPIEUgWCBJIFQgQyBI IEsgIC0tICBDaGVjayBmb3IgQ09OTkVDVC1tb2RlIHRyaWdnZXIgc3RyaW5nICAqLwotLyoKLSAg UmV0dXJucyAtMSBpZiB0cmlnZ2VyIG5vdCBmb3VuZCwgb3IgZWxzZSB0aGUgdHJpZ2dlciBpbmRl eCwgMCBvciBncmVhdGVyLgotICAoUmVwbGFjZSB3aXRoIGZhbmNpZXIgYW5kIG1vcmUgZWZmaWNp ZW50IG1hdGNoZXIgbGF0ZXIuLi4pCi0gIE5PVEU6IHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgZnVu Y3Rpb24gY2FsbCBvdmVyaGVhZCwgY2FsbCB0aGlzIHdheToKLQotICAgIHggPSB0dF90cmlnZ2Vy WzBdID8gYXV0b2V4aXRjaGsoYykgOiAtMTsKLQotKi8KLWludAotI2lmZGVmIENLX0FOU0lDCi1h dXRvZXhpdGNoayhDSEFSIGMpCi0jZWxzZQotYXV0b2V4aXRjaGsoYykgQ0hBUiBjOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi0vKiBhdXRvZXhpdGNoayAqLyB7Ci0gICAgZXh0ZXJuIENIQVIgKiB0 dF90cm1hdGNoW107Ci0gICAgZXh0ZXJuIGNoYXIgKiB0dF90cmlnZ2VyW107Ci0gICAgaW50IGk7 Ci0gICAgZm9yIChpID0gMDsgaSA8IFRSSUdHRVJTOyBpKyspIHsKLSAgICAgICAgaWYgKCF0dF90 cmlnZ2VyW2ldKSB7ICAgICAgICAgICAvKiBObyBtb3JlIHRyaWdnZXJzIGluIGxpc3QgKi8KLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKCp0dF90cmlnZ2VyW2ldKSB7Ci0g ICAgICAgICAgICBpZiAoIXR0X3RybWF0Y2hbaV0pICAgICAgICAgLyogSnVzdCBzdGFydGluZz8g Ki8KLSAgICAgICAgICAgICAgdHRfdHJtYXRjaFtpXSA9IChDSEFSICopdHRfdHJpZ2dlcltpXTsg LyogU2V0IG1hdGNoIHBvaW50ZXIgKi8KLSAgICAgICAgICAgIGlmIChjID09ICp0dF90cm1hdGNo W2ldKSB7ICAvKiBDb21wYXJlIHRoaXMgY2hhcmFjdGVyICovCi0gICAgICAgICAgICAgICAgdHRf dHJtYXRjaFtpXSsrOyAgICAgICAgLyogSXQgbWF0Y2hlcyAqLwotICAgICAgICAgICAgICAgIGlm ICghKnR0X3RybWF0Y2hbaV0pIHsgIC8qIEVuZCBvZiBtYXRjaCBzdHJpbmc/ICovCi0gICAgICAg ICAgICAgICAgICAgIHR0X3RybWF0Y2hbaV0gPSAoQ0hBUiAqKSB0dF90cmlnZ2VyW2ldOyAvKiBZ ZXMsIHJld2luZCwgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiYXV0b2V4aXRj aGsiLHR0X3RyaWdnZXJbaV0saSk7IC8qIGxvZywgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKGkpOyAgICAgICAgICAvKiBhbmQgcmV0dXJuIHN1Y2Nlc3MgKi8KLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9IGVsc2UgICAgICAgICAgICAgICAgICAgICAgLyogTm8gbWF0Y2gg Ki8KLSAgICAgICAgICAgICAgdHRfdHJtYXRjaFtpXSA9IChDSEFSICopIHR0X3RyaWdnZXJbaV07 IC8qIFJld2luZCBtYXRjaCBzdHJpbmcgKi8KLSAgICAgICAgfSAvKiBhbmQgZ28gb24gdGhlIG5l eHQgbWF0Y2ggc3RyaW5nICovCi0gICAgfQotICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE5vIG1hdGNoIGZvdW5kICovCi19Ci0jZW5kaWYgLyogQ0tfVFJJR0dFUiAq LwotCi0jaWZuZGVmIE5PU0hPVwotLyogIFMgSCBPIE0gRCBNICAtLSAgU2hvdyBtb2RlbSBzaWdu YWxzICAqLwotCi1WT0lECi1zaG9tZG0oKSB7Ci0vKgotICBOb3RlIHVzZSBvZiAiXHJcbiIgdG8g bWFrZSBzdXJlIHRoaXMgcmVwb3J0IHByaW50cyByaWdodCwgZXZlbiB3aGVuCi0gIGNhbGxlZCBk dXJpbmcgQ09OTkVDVCBtb2RlLgotKi8KLSAgICBpbnQgeTsKLSAgICB5ID0gdHRnbWRtKCk7Ci0g ICAgc3dpdGNoICh5KSB7Ci0gICAgICBjYXNlIC0zOiBwcmludGYoCi0gICAgICAgICAgICAgICAg ICJNb2RlbSBzaWduYWxzIHVuYXZhaWxhYmxlIGluIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXRcclxu Iik7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgLTI6IHByaW50ZigiTm8gbW9k ZW0gY29udHJvbCBmb3IgdGhpcyBkZXZpY2VcclxuIik7IGJyZWFrOwotICAgICAgY2FzZSAtMTog cHJpbnRmKCJNb2RlbSBzaWduYWxzIHVuYXZhaWxhYmxlXHJcbiIpOyBicmVhazsKLSAgICAgIGRl ZmF1bHQ6Ci0jaWZuZGVmIE1BQwotICAgICAgICBwcmludGYoCi0gICAgICAgICAgIiBDYXJyaWVy IERldGVjdCAgICAgIChDRCk6ICAlc1xyXG4iLCh5ICYgQk1fRENEKSA/ICJPbiI6ICJPZmYiKTsK LSAgICAgICAgcHJpbnRmKAotICAgICAgICAgICIgRGF0YXNldCBSZWFkeSAgICAgICAoRFNSKTog JXNcclxuIiwoeSAmIEJNX0RTUikgPyAiT24iOiAiT2ZmIik7Ci0jZW5kaWYgLyogTUFDICovCi0g ICAgICAgIHByaW50ZigKLSAgICAgICAgICAiIENsZWFyIFRvIFNlbmQgICAgICAgKENUUyk6ICVz XHJcbiIsKHkgJiBCTV9DVFMpID8gIk9uIjogIk9mZiIpOwotI2lmbmRlZiBTVFJBVFVTCi0jaWZu ZGVmIE1BQwotICAgICAgICBwcmludGYoCi0gICAgICAgICAgIiBSaW5nIEluZGljYXRvciAgICAg IChSSSk6ICAlc1xyXG4iLCh5ICYgQk1fUk5HKSA/ICJPbiI6ICJPZmYiKTsKLSNlbmRpZiAvKiBN QUMgKi8KLSAgICAgICAgcHJpbnRmKAotICAgICAgICAgICIgRGF0YSBUZXJtaW5hbCBSZWFkeSAo RFRSKTogJXNcclxuIiwKLSNpZmRlZiBOVAotICAgICAgICAgICIodW5rbm93bikiCi0jZWxzZSAv KiBOVCAqLwotICAgICAgICAgICh5ICYgQk1fRFRSKSA/ICJPbiI6ICJPZmYiCi0jZW5kaWYgLyog TlQgKi8KLSAgICAgICAgICApOwotI2lmbmRlZiBNQUMKLSAgICAgICAgcHJpbnRmKAotICAgICAg ICAgICIgUmVxdWVzdCBUbyBTZW5kICAgICAoUlRTKTogJXNcclxuIiwKLSNpZmRlZiBOVAotICAg ICAgICAgICIodW5rbm93bikiCi0jZWxzZSAvKiBOVCAqLwotICAgICAgICAgICh5ICYgQk1fUlRT KSA/ICJPbiI6ICJPZmYiCi0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICApOwotI2VuZGlmIC8q IE1BQyAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSAgICB9Ci0jaWZkZWYgQkVUQURFQlVHCi0j aWZkZWYgQ0tfVEFQSQotICAgIGlmICh0dHRhcGkgJiYgIXRhcGlwYXNzKSB7Ci0gICAgICAgIExQ REVWQ0ZHICAgICAgICBscERldkNmZyA9IE5VTEw7Ci0gICAgICAgIExQQ09NTUNPTkZJRyAgICBs cENvbW1Db25maWcgPSBOVUxMOwotICAgICAgICBMUE1PREVNU0VUVElOR1MgbHBNb2RlbVNldHRp bmdzID0gTlVMTDsKLSAgICAgICAgRENCICogICAgICAgICAgIGxwRENCID0gTlVMTDsKLQotICAg ICAgICBpZiAoY2t0YXBpR2V0TW9kZW1TZXR0aW5ncygmbHBEZXZDZmcsJmxwTW9kZW1TZXR0aW5n cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZscENvbW1Db25maWcsJmxw RENCKSkgewotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgICAgY2t0YXBpRGlz cGxheU1vZGVtU2V0dGluZ3MobHBEZXZDZmcsbHBNb2RlbVNldHRpbmdzLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbHBDb21tQ29uZmlnLGxwRENCKTsKLSAgICAgICAg fQotICAgIH0KLSNlbmRpZiAvKiBDS19UQVBJICovCi0jZW5kaWYgLyogQkVUQURFQlVHICovCi19 Ci0jZW5kaWYgLyogTk9TSE9XICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5P WEZFUgotLyogIFMgRCBFIEIgVSAgLS0gUmVjb3JkIHNwYXIgcmVzdWx0cyBpbiBkZWJ1Z2dpbmcg bG9nICAqLwotCi1WT0lECi1zZGVidShsZW4pIGludCBsZW47IHsKLSAgICBkZWJ1ZyhGMTExLCJz cGFyOiBkYXRhIiwoY2hhciAqKSByZGF0YXAsbGVuKTsKLSAgICBkZWJ1ZyhGMTAxLCIgc3BzaXog IiwiIiwgc3BzaXopOwotICAgIGRlYnVnKEYxMDEsIiB0aW1pbnQiLCIiLHRpbWludCk7Ci0gICAg ZGVidWcoRjEwMSwiIG5wYWQgICIsIiIsICBucGFkKTsKLSAgICBkZWJ1ZyhGMTAxLCIgcGFkY2gg IiwiIiwgcGFkY2gpOwotICAgIGRlYnVnKEYxMDEsIiBzZW9sICAiLCIiLCAgc2VvbCk7Ci0gICAg ZGVidWcoRjEwMSwiIGN0bHEgICIsIiIsICBjdGxxKTsKLSAgICBkZWJ1ZyhGMTAxLCIgZWJxICAg IiwiIiwgICBlYnEpOwotICAgIGRlYnVnKEYxMDEsIiBlYnFmbGciLCIiLGVicWZsZyk7Ci0gICAg ZGVidWcoRjEwMSwiIGJjdHIgICIsIiIsICBiY3RyKTsKLSAgICBkZWJ1ZyhGMTAxLCIgcnB0cSAg IiwiIiwgIHJwdHEpOwotICAgIGRlYnVnKEYxMDEsIiBycHRmbGciLCIiLHJwdGZsZyk7Ci0gICAg ZGVidWcoRjEwMSwiIGxzY2FwdSIsIiIsbHNjYXB1KTsKLSAgICBkZWJ1ZyhGMTAxLCIgYXRjYXB1 IiwiIixhdGNhcHUpOwotICAgIGRlYnVnKEYxMDEsIiBscGNhcHUiLCIiLGxwY2FwdSk7Ci0gICAg ZGVidWcoRjEwMSwiIHN3Y2FwdSIsIiIsc3djYXB1KTsKLSAgICBkZWJ1ZyhGMTAxLCIgd3Nsb3Ru IiwiIiwgd3Nsb3RuKTsKLSAgICBkZWJ1ZyhGMTAxLCIgd2hhdHJ1IiwiIiwgd2hhdHJ1KTsKLX0K LS8qICBSIEQgRSBCIFUgLS0gRGVidWdnaW5nIGRpc3BsYXkgb2YgcnBhcigpIHZhbHVlcyAgKi8K LQotVk9JRAotcmRlYnUoZCxsZW4pIENIQVIgKmQ7IGludCBsZW47IHsKLSAgICBkZWJ1ZyhGMTEx LCJycGFyOiBkYXRhIixkLGxlbik7Ci0gICAgZGVidWcoRjEwMSwiIHJwc2l6ICIsIiIsIHh1bmNo YXIoZFswXSkpOwotICAgIGRlYnVnKEYxMDEsIiBydGltbyAiLCIiLCBydGltbyk7Ci0gICAgZGVi dWcoRjEwMSwiIG15cGFkbiIsIiIsbXlwYWRuKTsKLSAgICBkZWJ1ZyhGMTAxLCIgbXlwYWRjIiwi IixteXBhZGMpOwotICAgIGRlYnVnKEYxMDEsIiBlb2wgICAiLCIiLCAgIGVvbCk7Ci0gICAgZGVi dWcoRjEwMSwiIGN0bHEgICIsIiIsICBjdGxxKTsKLSAgICBkZWJ1ZyhGMTAxLCIgc3EgICAgIiwi IiwgICAgc3EpOwotICAgIGRlYnVnKEYxMDEsIiBlYnEgICAiLCIiLCAgIGVicSk7Ci0gICAgZGVi dWcoRjEwMSwiIGVicWZsZyIsIiIsZWJxZmxnKTsKLSAgICBkZWJ1ZyhGMTAxLCIgYmN0ciAgIiwi IiwgIGJjdHIpOwotICAgIGRlYnVnKEYxMDEsIiBycHRxICAiLCIiLCAgZFs4XSk7Ci0gICAgZGVi dWcoRjEwMSwiIHJwdGZsZyIsIiIscnB0ZmxnKTsKLSAgICBkZWJ1ZyhGMTAxLCIgY2FwYXMgIiwi IiwgY2FwYXMpOwotICAgIGRlYnVnKEYxMDEsIiBiaXRzICAiLCIiLGRbY2FwYXNdKTsKLSAgICBk ZWJ1ZyhGMTAxLCIgbHNjYXB1IiwiIixsc2NhcHUpOwotICAgIGRlYnVnKEYxMDEsIiBhdGNhcHUi LCIiLGF0Y2FwdSk7Ci0gICAgZGVidWcoRjEwMSwiIGxwY2FwdSIsIiIsbHBjYXB1KTsKLSAgICBk ZWJ1ZyhGMTAxLCIgc3djYXB1IiwiIixzd2NhcHUpOwotICAgIGRlYnVnKEYxMDEsIiB3c2xvdHIi LCIiLCB3c2xvdHIpOwotICAgIGRlYnVnKEYxMDEsIiBycHNpeihleHRlbmRlZCkiLCIiLHJwc2l6 KTsKLX0KLQotI2lmZGVmIENPTU1FTlQKLS8qICBDIEggSyBFIFIgUiAgLS0gIERlY2lkZSB3aGV0 aGVyIHRvIGV4aXQgdXBvbiBhIHByb3RvY29sIGVycm9yICAqLwotCi1WT0lECi1jaGtlcnIoKSB7 Ci0gICAgaWYgKGJhY2tncmQgJiYgIXNlcnZlcikgZmF0YWwoIlByb3RvY29sIGVycm9yIik7Ci19 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0vKiAgRiBBIFQg QSBMICAtLSAgRmF0YWwgZXJyb3IgbWVzc2FnZSAqLwotCi1WT0lECi1mYXRhbChtc2cpIGNoYXIg Km1zZzsgewotICAgIGV4dGVybiBpbnQgaW5pdGZsZzsKLSAgICBzdGF0aWMgaW50IGluaXRpbmcg PSAwOwotICAgIGlmICghbXNnKSBtc2cgPSAiIjsKLSAgICBkZWJ1ZyhGMTExLCJmYXRhbCIsbXNn LGluaXRmbGcpOwotCi0gICAgaWYgKCFpbml0ZmxnKSB7CQkJLyogSWYgY2FsbGVkIGZyb20gcHJl c2NhbiAqLwotCWlmIChpbml0aW5nKQkJCS8qIG9yIGNhbGxlZCBmcm9tIHN5c2luaXQoKSAqLwot ICAgICAgICAgIGV4aXQoMjUzKTsKLQlpbml0aW5nID0gMTsKLQlzeXNpbml0KCk7Ci0gICAgfQot Ci0gICAgZGVidWcoRjExMSwiZmF0YWwiLG1zZyx4aXRzdGEpOwotICAgIHRsb2coRjExMCwiRmF0 YWw6Iixtc2csMEwpOwotI2lmZGVmIFZNUwotICAgIGlmIChzdHJuY21wKG1zZywiJUNLRVJNSVQi LDgpKQotICAgICAgY29ub2woIiVDS0VSTUlULUUtRkFUQUwsICIpOwotICAgIGNvbm9sbChtc2cp OwotI2Vsc2UgLyogIVZNUyAqLwotICAgIGNvbm9sbChtc2cpOwotI2VuZGlmIC8qIFZNUyAqLwot I2lmZGVmIE9TMgotI2lmbmRlZiBOT1hGRVIKLSAgICBpZiAoeGZyYmVsKSB7Ci0gICAgICAgIGJs ZWVwKEJQX0ZBSUwpOwotICAgICAgICBzbGVlcCgxKTsKLSAgICAgICAgYmxlZXAoQlBfRkFJTCk7 Ci0gICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jZW5kaWYgLyogT1MyICovCi0gICAgZG9l eGl0KEJBRF9FWElULHhpdHN0YSB8IDEpOyAgICAgICAgLyogRXhpdCBpbmRpY2F0aW5nIGZhaWx1 cmUgKi8KLX0KLQotI2lmbmRlZiBOT1hGRVIKLS8qICBCIEwgRCBMIEUgTiAgLS0gIE1ha2UgbGVu Z3RoLWVuY29kZWQgY29weSBvZiBzdHJpbmcgICovCi0KLWNoYXIgKgotYmxkbGVuKHN0cixkZXN0 KSBjaGFyICpzdHIsICpkZXN0OyB7Ci0gICAgaW50IGxlbjsKLSAgICBsZW4gPSAoaW50KXN0cmxl bihzdHIpOwotICAgIGlmIChsZW4gPiA5NCkKLSAgICAgICpkZXN0ID0gU1A7Ci0gICAgZWxzZQot ICAgICAgKmRlc3QgPSAoY2hhcikgdG9jaGFyKGxlbik7Ci0gICAgc3RyY3B5KGRlc3QrMSxzdHIp OwkJCS8qIENoZWNrZWQgYmVsb3cgaW4gc2V0Z2VuKCkgKi8KLSAgICByZXR1cm4oZGVzdCtsZW4r MSk7Ci19Ci0KLQotLyogIFMgRSBUIEcgRSBOICAtLSAgQ29uc3RydWN0IGEgZ2VuZXJpYyBjb21t YW5kICAqLwotLyoKLSAgQ2FsbCB3aXRoIEdlbmVyaWMgY29tbWFuZCBjaGFyYWN0ZXIgZm9sbG93 ZWQgYnkgdGhyZWUgc3RyaW5nIGFyZ3VtZW50cy4KLSAgVHJhaWxpbmcgc3RyaW5ncyBhcmUgYWxs b3dlZCB0byBiZSBlbXB0eSAoIiIpLiAgRWFjaCBzdHJpbmcgZXhjZXB0IHRoZSBsYXN0Ci0gIG5v bi1lbXB0eSBzdHJpbmcgbXVzdCBiZSBsZXNzIHRoYW4gOTUgY2hhcmFjdGVycyBsb25nLiAgVGhl IGZpbmFsIG5vbmVtcHR5Ci0gIHN0cmluZyBpcyBhbGxvd2VkIHRvIGJlIGxvbmdlci4KLSovCi1D SEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXNldGdlbihjaGFyIHR5cGUsIGNoYXIgKiBhcmcxLCBjaGFy ICogYXJnMiwgY2hhciAqIGFyZzMpCi0jZWxzZQotc2V0Z2VuKHR5cGUsYXJnMSxhcmcyLGFyZzMp IGNoYXIgdHlwZSwgKmFyZzEsICphcmcyLCAqYXJnMzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot Lyogc2V0Z2VuICovIHsKLSAgICBjaGFyICp1cHN0ciwgKmNwOwotI2lmZGVmIERZTkFNSUMKLSAg ICBpZiAoIWNtZHN0cikKLSAgICAgIGlmICghKGNtZHN0ciA9IG1hbGxvYyhNQVhTUCArIDEpKSkK LSAgICAgICAgZmF0YWwoInNldGdlbjogY2FuJ3QgYWxsb2NhdGUgbWVtb3J5Iik7Ci0jZW5kaWYg LyogRFlOQU1JQyAqLwotCi0gICAgY3AgPSBjbWRzdHI7Ci0gICAgKmNwKysgPSB0eXBlOwotICAg ICpjcCA9IE5VTDsKLSAgICBpZiAoIWFyZzEpIGFyZzEgPSAiIjsKLSAgICBpZiAoIWFyZzIpIGFy ZzIgPSAiIjsKLSAgICBpZiAoIWFyZzMpIGFyZzMgPSAiIjsKLSAgICBpZiAoKChpbnQpc3RybGVu KGFyZzEpKyhpbnQpc3RybGVuKGFyZzIpKyhpbnQpc3RybGVuKGFyZzMpKzQpIDwgTUFYU1ApIHsK LQlpZiAoKmFyZzEgIT0gTlVMKSB7Ci0JICAgIHVwc3RyID0gYmxkbGVuKGFyZzEsY3ApOwotCSAg ICBpZiAoKmFyZzIgIT0gTlVMKSB7Ci0JCXVwc3RyID0gYmxkbGVuKGFyZzIsdXBzdHIpOwotCQlp ZiAoKmFyZzMgIT0gTlVMKSBibGRsZW4oYXJnMyx1cHN0cik7Ci0JICAgIH0KLQl9Ci0JY21hcmcg PSBjbWRzdHI7Ci0JZGVidWcoRjExMCwic2V0Z2VuIixjbWFyZywwKTsKLQlyZXR1cm4oJ2cnKTsK LSAgICB9Ci0gICAgcmV0dXJuKCdFJyk7Ci19Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5k ZWYgTk9NU0VORAotc3RhdGljIGNoYXIgKm1nYnVmcCA9IE5VTEw7Ci0KLS8qICBGIE4gUCBBIFIg UyBFICAtLSAgKi8KLQotLyoKLSAgQXJndW1lbnQgaXMgYSBjaGFyYWN0ZXIgc3RyaW5nIGNvbnRh aW5pbmcgb25lIG9yIG1vcmUgZmlsZXNwZWNzLgotICBUaGlzIGZ1bmN0aW9uIGJyZWFrcyB0aGUg c3RyaW5nIGFwYXJ0IGludG8gYW4gYXJyYXkgb2YgcG9pbnRlcnMsIG9uZQotICB0byBlYWNoIGZp bGVzcGVjLCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGZpbGVzcGVjcy4gIFVzZWQgYnkgc2Vy dmVyCi0gIHdoZW4gaXQgcmVjZWl2ZXMgYSBHRVQgY29tbWFuZCB0byBhbGxvdyBpdCB0byBwcm9j ZXNzIG11bHRpcGxlIGZpbGUKLSAgc3BlY2lmaWNhdGlvbnMgaW4gb25lIHRyYW5zYWN0aW9uLiAg U2V0cyBjbWxpc3QgdG8gcG9pbnQgdG8gYSBsaXN0IG9mCi0gIGZpbGUgcG9pbnRlcnMsIGV4YWN0 bHkgYXMgaWYgdGhleSB3ZXJlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0KLSAgVGhpcyB2ZXJz aW9uIG9mIGZucGFyc2UgdHJlYXRzIHNwYWNlcyBhcyBmaWxlbmFtZSBzZXBhcmF0b3JzLiAgSWYg eW91cgotICBvcGVyYXRpbmcgc3lzdGVtIGFsbG93cyBzcGFjZXMgaW4gZmlsZW5hbWVzLCB5b3Un bGwgbmVlZCBhIGRpZmZlcmVudAotICBzZXBhcmF0b3IuCi0KLSAgVGhpcyB2ZXJzaW9uIG9mIGZu cGFyc2UgbWFsbG9jcyBhIHN0cmluZyBidWZmZXIgdG8gY29udGFpbiB0aGUgbmFtZXMuICBJdAot ICBjYW5ub3QgYXNzdW1lIHRoYXQgdGhlIHN0cmluZyB0aGF0IGlzIHBvaW50ZWQgdG8gYnkgdGhl IGFyZ3VtZW50IGlzIHNhZmUuCi0qLwotaW50Ci1mbnBhcnNlKHN0cmluZykgY2hhciAqc3RyaW5n OyB7Ci0gICAgY2hhciAqcCwgKnMsICpxOwotICAgIGludCByID0gMCwgeDsgICAgICAgICAgICAg ICAgICAgICAgIC8qIFJldHVybiBjb2RlICovCi0jaWZkZWYgUkVDVVJTSVZFCi0gICAgZGVidWco RjExMSwiZm5wYXJzZSIsc3RyaW5nLHJlY3Vyc2l2ZSk7Ci0jZW5kaWYgLyogUkVDVVJTSVZFICov Ci0KLSAgICBpZiAobWdidWZwKSBmcmVlKG1nYnVmcCk7ICAgICAgICAgICAvKiBGcmVlIHRoaXMg ZnJvbSBsYXN0IHRpbWUuICovCi0gICAgbWdidWZwID0gbWFsbG9jKChpbnQpc3RybGVuKHN0cmlu ZykrMik7Ci0gICAgaWYgKCFtZ2J1ZnApIHsKLSAgICAgICAgZGVidWcoRjEwMCwiZm5wYXJzZSBt YWxsb2MgZXJyb3IiLCIiLDApOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2lmbmRlZiBO T0lDUAotI2lmbmRlZiBOT1NQTAotICAgIGNrc3RybmNweShmc3BlYyxzdHJpbmcsZnNwZWNsZW4p OyAgIC8qIE1ha2UgY29weSBmb3IgXHYoZmlsZXNwZWMpICovCi0jZW5kaWYgLyogTk9TUEwgKi8K LSNlbmRpZiAvKiBOT0lDUCAqLwotICAgIHMgPSBzdHJpbmc7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIElucHV0IHN0cmluZyAqLwotICAgIHAgPSBxID0gbWdidWZwOyAgICAgICAgICAgICAg ICAgICAgIC8qIFBvaW50IHRvIHRoZSBjb3B5ICovCi0gICAgciA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBvdXIgcmV0dXJuIGNvZGUgKi8KLSAgICB3aGls ZSAoKnMgPT0gU1AgfHwgKnMgPT0gSFQpICAgICAgICAvKiBTa2lwIGxlYWRpbmcgc3BhY2VzIGFu ZCB0YWJzICovCi0gICAgICBzKys7Ci0gICAgZm9yICh4ID0gc3RybGVuKHMpOyAgICAgICAgICAg ICAgICAgLyogU3RyaXAgdHJhaWxpbmcgc3BhY2VzICovCi0gICAgICAgICAoeCA+IDEpICYmIChz W3gtMV0gPT0gU1AgfHwgc1t4LTFdID09IEhUKTsKLSAgICAgICAgIHgtLSkKLSAgICAgIHNbeC0x XSA9IE5VTDsKLSAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb29w IHRocm91Z2ggcmVzdCBvZiBzdHJpbmcgKi8KLSAgICAgICAgaWYgKCpzID09IENNRFEpIHsgICAg ICAgICAgICAgICAvKiBCYWNrc2xhc2ggKHF1b3RlIGNoYXJhY3Rlcik/ICovCi0gICAgICAgICAg ICBpZiAoKHggPSB4eGVzYygmcykpID4gLTEpIHsgLyogR28gaW50ZXJwcmV0IGl0LiAqLwotICAg ICAgICAgICAgICAgICpxKysgPSAoY2hhcikgeDsgICAgICAgIC8qIE51bWVyaWMgYmFja3NsYXNo IGNvZGUsIG9rICovCi0gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyog SnVzdCBsZXQgaXQgcXVvdGUgbmV4dCBjaGFyICovCi0gICAgICAgICAgICAgICAgcysrOyAgICAg ICAgICAgICAgICAgICAgLyogZ2V0IHBhc3QgdGhlIGJhY2tzbGFzaCAqLwotICAgICAgICAgICAg ICAgICpxKysgPSAqcysrOyAgICAgICAgICAgIC8qIGRlcG9zaXQgbmV4dCBjaGFyICovCi0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIGlmICgqcyA9 PSBTUCB8fCAqcyA9PSBOVUwpIHsgLyogVW5xdW90ZWQgc3BhY2Ugb3IgTlVMPyAqLwotICAgICAg ICAgICAgKnErKyA9IE5VTDsgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBvdXRwdXQgZmlsZW5h bWUuICovCi0gICAgICAgICAgICBtc2ZpbGVzW3JdID0gcDsgICAgICAgICAgICAgLyogQWRkIHRo aXMgZmlsZW5hbWUgdG8gdGhlIGxpc3QgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImZucGFy c2UiLG1zZmlsZXNbcl0scik7Ci0gICAgICAgICAgICByKys7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ291bnQgaXQgKi8KLSAgICAgICAgICAgIGlmICgqcyA9PSBOVUwpIGJyZWFrOyAgICAg ICAvKiBFbmQgb2Ygc3RyaW5nPyAqLwotICAgICAgICAgICAgd2hpbGUgKCpzID09IFNQKSBzKys7 ICAgICAgIC8qIFNraXAgcmVwZWF0ZWQgc3BhY2VzICovCi0gICAgICAgICAgICBwID0gcTsgICAg ICAgICAgICAgICAgICAgICAgLyogU3RhcnQgb2YgbmV4dCBuYW1lICovCi0gICAgICAgICAgICBj b250aW51ZTsKLSAgICAgICAgfSBlbHNlICpxKysgPSAqczsgICAgICAgICAgICAgICAvKiBPdGhl cndpc2UgY29weSB0aGUgY2hhcmFjdGVyICovCi0gICAgICAgIHMrKzsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTmV4dCBpbnB1dCBjaGFyYWN0ZXIgKi8KLSAgICB9Ci0gICAgZGVidWco RjEwMSwiZm5wYXJzZSByIiwiIixyKTsKLSAgICBtc2ZpbGVzW3JdID0gIiI7ICAgICAgICAgICAg ICAgICAgICAvKiBQdXQgZW1wdHkgc3RyaW5nIGF0IGVuZCBvZiBsaXN0ICovCi0gICAgY21saXN0 ID0gbXNmaWxlczsKLSAgICByZXR1cm4ocik7Ci19Ci0jZW5kaWYgLyogTk9NU0VORCAqLwotCi1j aGFyICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGJjaHIoKSBmb3IgREVC VUcgU0VTU0lPTiAqLwotZGJjaHIoYykgaW50IGM7IHsKLSAgICBzdGF0aWMgY2hhciBzWzhdOwot ICAgIGNoYXIgKmNwID0gczsKLQotICAgIGMgJj0gMHhmZjsKLSAgICBpZiAoYyAmIDB4ODApIHsg ICAgICAgICAgICAgICAgICAgICAvKiA4dGggYml0IG9uICovCi0gICAgICAgICpjcCsrID0gJ34n OwotICAgICAgICBjICY9IDB4N2Y7Ci0gICAgfQotICAgIGlmIChjIDwgU1ApIHsgICAgICAgICAg ICAgICAgICAgICAgIC8qIENvbnRyb2wgY2hhcmFjdGVyICovCi0gICAgICAgICpjcCsrID0gJ14n OwotICAgICAgICAqY3ArKyA9IChjaGFyKSBjdGwoYyk7Ci0gICAgfSBlbHNlIGlmIChjID09IERF TCkgewotICAgICAgICAqY3ArKyA9ICdeJzsKLSAgICAgICAgKmNwKysgPSAnPyc7Ci0gICAgfSBl bHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJpbnRpbmcgY2hhcmFjdGVyICov Ci0gICAgICAgICpjcCsrID0gKGNoYXIpIGM7Ci0gICAgfQotICAgICpjcCA9ICdcMCc7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSBzdHJpbmcgKi8KLSAgICBjcCA9IHM7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gcG9pbnRlciB0byBpdCAqLwotICAg IHJldHVybihjcCk7Ci19Ci0KLS8qICBDIEsgSCBPIFMgVCAgLS0gIEdldCBuYW1lIG9mIGxvY2Fs IGhvc3QgKHdoZXJlIEMtS2VybWl0IGlzIHJ1bm5pbmcpICAqLwotCi0vKgotICBDYWxsIHdpdGgg cG9pbnRlciB0byBidWZmZXIgdG8gcHV0IGhvc3RuYW1lIGluLCBhbmQgbGVuZ3RoIG9mIGJ1ZmZl ci4KLSAgQ29waWVzIGhvc3RuYW1lIGludG8gYnVmZmVyIG9uIHN1Y2Nlc3MsIHB1dHMgbnVsbCBz dHJpbmcgaW4gYnVmZmVyIG9uCi0gIGZhaWx1cmUuCi0qLwotI2lmZGVmIEJTRDQ0Ci0jZGVmaW5l IEJTRDQKLSN1bmRlZiBBVFRTVgotI2VuZGlmIC8qIEJTRDQ0ICovCi0KLSNpZmRlZiBTVk9SUE9T SVgKLSNpZm5kZWYgQlNENDQKLSNpZm5kZWYgYXBvbGxvCi0jaW5jbHVkZSA8c3lzL3V0c25hbWUu aD4KLSNlbmRpZiAvKiBhcG9sbG8gKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2Vsc2UKLSNpZmRl ZiBCRUxMVjEwCi0jaW5jbHVkZSA8dXRzbmFtZS5oPgotI2VuZGlmIC8qIEJFTExWMTAgKi8KLSNl bmRpZiAvKiBTVk9SUE9TSVgqLwotCi0jaWZkZWYgQ0tTWVNMT0cKLWV4dGVybiBjaGFyIHVpZGJ1 ZltdLCAqIGNsaWVudGhvc3Q7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQotVk9JRAotY2tob3N0 KHZ2YnVmLHZ2bGVuKSBjaGFyICogdnZidWY7IGludCB2dmxlbjsgewotCi0jaWZuZGVmIE5PUFVT SAotICAgIGV4dGVybiBpbnQgbm9wdXNoOwotI2lmbmRlZiBOT1NFUlZFUgotICAgIGV4dGVybiBp bnQgZW5faG9zOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0jZW5kaWYgLyogTk9QVVNIICovCi0K LSNpZmRlZiBwZHAxMQotICAgICp2dmJ1ZiA9IE5VTDsKLSNlbHNlICAvKiBFdmVyeXRoaW5nIGVs c2UgLSByZXN0IG9mIHRoaXMgcm91dGluZSAqLwotCi0gICAgY2hhciAqZzsKLSAgICBpbnQgaGF2 ZWZ1bGwgPSAwOwotI2lmZGVmIFZNUwotICAgIGludCB4OwotI2VuZGlmIC8qIFZNUyAqLwotCi0j aWZkZWYgU1ZPUlBPU0lYCi0jaWZuZGVmIEJTRDQ0Ci0jaWZuZGVmIF8zODZCU0QKLSNpZm5kZWYg QVBPTExPU1IxMAotICAgIHN0cnVjdCB1dHNuYW1lIGhuYW1lOwotI2VuZGlmIC8qIEFQT0xMT1NS MTAgKi8KLSNlbmRpZiAvKiBfMzg2QlNEICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAv KiBTVk9SUE9TSVggKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIGludCBhYzAgPSAoY2hhciAq KSB2dmJ1ZiwgYWMxID0gLTEsIGFjMiA9IDA7Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQot I2lmbmRlZiBOT1BVU0gKLSAgICBpZiAoZ2V0ZW52KCJDS19OT1BVU0giKSkgeyAgICAgICAgICAv KiBObyBzaGVsbCBhY2Nlc3MgYWxsb3dlZCAqLwotICAgICAgICBub3B1c2ggPSAxOyAgICAgICAg ICAgICAgICAgICAgIC8qIG9uIHRoaXMgaG9zdC4uLiAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAg ICAgICBlbl9ob3MgPSAwOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0gICAgfQotI2VuZGlmIC8q IE5PUFVTSCAqLwotCi0gICAgKnZ2YnVmID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgLyog SG93IGxldCdzIGdldCBvdXIgaG9zdCBuYW1lIC4uLiAqLwotCi0jaWZuZGVmIEJFTExWMTAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRG9lcyBub3QgaGF2ZSBnZXRob3N0bmFtZSgpICovCi0j aWZuZGVmIE9YT1MKLSNpZmRlZiBTVk9SUE9TSVgKLSNpZmRlZiBBUE9MTE9TUjEwCi0gICAgY2tz dHJuY3B5KHZ2YnVmLCJBcG9sbG8iLHZ2bGVuKTsKLSNlbHNlCi0jaWZkZWYgQlNENDQKLSAgICBp ZiAoZ2V0aG9zdG5hbWUodnZidWYsdnZsZW4pIDwgMCkKLSAgICAgICp2dmJ1ZiA9IE5VTDsKLSNl bHNlCi0jaWZkZWYgXzM4NkJTRAotICAgIGlmIChnZXRob3N0bmFtZSh2dmJ1Zix2dmxlbikgPCAw KSAqdnZidWYgPSBOVUw7Ci0jZWxzZQotI2lmZGVmIFFOWAotI2lmZGVmIFRDUFNPQ0tFVAotICAg IGlmIChnZXRob3N0bmFtZSh2dmJ1Zix2dmxlbikgPCAwKSAqdnZidWYgPSBOVUw7Ci0jZWxzZQot ICAgIGlmICh1bmFtZSgmaG5hbWUpID4gLTEpIGNrc3RybmNweSh2dmJ1ZixobmFtZS5ub2RlbmFt ZSx2dmxlbik7Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZWxzZSAvKiBTVk9SUE9TSVggYnV0 IG5vdCBfMzg2QlNEIG9yIEJTRDQ0ICovCi0jaWZkZWYgX19pYTY0X18KLSAgICBpZiAodW5hbWUo JmhuYW1lKSA+IC0xKSBja3N0cm5jcHkodnZidWYsaG5hbWUubm9kZW5hbWUsdnZsZW4pOwotI2Vs c2UKLSAgICBpZiAodW5hbWUoJmhuYW1lKSA+IC0xKSB7Ci0JY2hhciAqIHA7Ci0JcCA9IGhuYW1l Lm5vZGVuYW1lOwotI2lmZGVmIFRDUFNPQ0tFVAotI2lmbmRlZiBOT0NLR0VURlFIT1NUCi0JaWYg KCFja3N0cmNocihwLCcuJykpCi0JICBwID0gKGNoYXIgKilja2dldGZxaG9zdG5hbWUocCk7Ci0j ZW5kaWYgLyogTk9DS0dFVEZRSE9TVCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCWlmICgh cCkgcCA9ICIiOwotCWlmICghKnApIHAgPSAiKHVua25vd24pIjsKLQlja3N0cm5jcHkodnZidWYs cCx2dmxlbik7Ci0gICAgfQotI2VuZGlmIC8qIF9faWE2NF9fICovCi0jZW5kaWYgLyogUU5YICov Ci0jZW5kaWYgLyogXzM4NkJTRCAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogQVBP TExPU1IxMCAqLwotI2Vsc2UgLyogIVNWT1JQT1NJWCAqLwotI2lmZGVmIEJTRDQKLSAgICBpZiAo Z2V0aG9zdG5hbWUodnZidWYsdnZsZW4pIDwgMCkgKnZ2YnVmID0gTlVMOwotI2Vsc2UgLyogIUJT RDQgKi8KLSNpZmRlZiBWTVMKLSAgICBnID0gZ2V0ZW52KCJTWVMkTk9ERSIpOwotICAgIGlmIChn KSBja3N0cm5jcHkodnZidWYsZyx2dmxlbik7Ci0gICAgeCA9IChpbnQpc3RybGVuKHZ2YnVmKTsK LSAgICBpZiAoeCA+IDEgJiYgdnZidWZbeC0xXSA9PSAnOicgJiYgdnZidWZbeC0yXSA9PSAnOicp IHZ2YnVmW3gtMl0gPSBOVUw7Ci0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgaWYgKHN5 cygkSE5BTUUsJmFjMCwmYWMxLCZhYzIpID09IDApIC8qIHN1Y2Nlc3NmdWwgKi8KLSAgICAgICAg dnZsZW4gPSBhYzIgKyAxOyAgICAgICAgICAgICAgICAvKiBlbmggLSBoYXZlIHRvIGFkZCBvbmUg Ki8KLSNlbHNlCi0jaWZkZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1Mv MiAqLwotICAgIGcgPSBvczJfZ2V0aG9zdG5hbWUoKTsKLSAgICBpZiAoZykgY2tzdHJuY3B5KHZ2 YnVmLGcsdnZsZW4pOwotI2Vsc2UgLyogT1MyICovCi0jaWZkZWYgT1NLCi0jaWZkZWYgVENQU09D S0VUCi0gICAgICAgIGlmIChnZXRob3N0bmFtZSh2dmJ1ZiwgdnZsZW4pIDwgMCkgKnZ2YnVmID0g TlVMOwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8q IE9TMiAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5k aWYgLyogQlNENCAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2Vsc2UgLyogT1hPUyAqLwot ICAgIC8qIElmIFRDUC9JUCBpcyBub3QgaW5zdGFsbGVkLCBnZXRob3N0bmFtZSgpIGZhaWxzLCB1 c2UgdW5hbWUoKSAqLwotICAgIGlmIChnZXRob3N0bmFtZSh2dmJ1Zix2dmxlbikgPCAwKSB7Ci0g ICAgICAgIGlmICh1bmFtZSgmaG5hbWUpID4gLTEpCi0gICAgICAgICAgICBja3N0cm5jcHkodnZi dWYsaG5hbWUubm9kZW5hbWUsdnZsZW4pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAqdnZi dWYgPSBOVUw7Ci0gICAgfQotI2VuZGlmIC8qIE9YT1MgKi8KLSNlbmRpZiAvKiBCRUxMVjEwICov Ci0gICAgaWYgKCp2dmJ1ZiA9PSBOVUwpIHsgICAgICAgICAgICAgICAgLyogSWYgaXQncyBzdGls bCBlbXB0eSAqLwotICAgICAgICBnID0gZ2V0ZW52KCJIT1NUIik7ICAgICAgICAgICAgIC8qIHRy eSB0aGlzICovCi0gICAgICAgIGlmIChnKSBja3N0cm5jcHkodnZidWYsZyx2dmxlbik7Ci0gICAg fQotICAgIHZ2YnVmW3Z2bGVuLTFdID0gTlVMOyAgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBy ZXN1bHQgaXMgdGVybWluYXRlZC4gKi8KLSNlbmRpZiAvKiBwZHAxMSAqLwotfQotI2lmZGVmIEJT RDQ0Ci0jdW5kZWYgQlNENAotI2RlZmluZSBBVFRTVgotI2VuZGlmIC8qIEJTRDQ0ICovCi0KLS8q Ci0gIEEgUyBLIE0gTyBSIEUgIC0tICBQb29yIHBlcnNvbidzICJtb3JlIi4KLSAgUmV0dXJucyAw IGlmIG5vIG1vcmUsIDEgaWYgbW9yZSB3YW50ZWQuCi0qLwotaW50Ci1hc2ttb3JlKCkgewotICAg IGNoYXIgYzsKLSAgICBpbnQgcnYsIGN4OwotI2lmZGVmIElLU0QKLSAgICBleHRlcm4gaW50IHRp bWVsaW1pdDsKLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgSUtTRENPTkYKLSAgICBleHRlcm4g aW50IGlrc2RjZjsKLSNlbmRpZiAvKiBJS1NEQ09ORiAqLwotI2lmZGVmIENLX0FQQwotICAgIGV4 dGVybiBpbnQgYXBjc3RhdHVzLCBhcGNhY3RpdmU7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0KLSNp ZmRlZiBOT0lDUAotICAgIHJldHVybigxKTsKLSNlbHNlCi0gICAgaWYgKCF4YXNrbW9yZSkKLSAg ICAgIHJldHVybigxKTsKLSNpZmRlZiBJS1NEQ09ORgotICAgIGlmIChpbnNlcnZlciAmJiAhaWtz ZGNmKQotICAgICAgcmV0dXJuKDEpOwotI2VuZGlmIC8qIElLU0RDT05GICovCi0jaWZkZWYgQ0tf QVBDCi0gICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwgfHwKLSAgICAgICAgKGFwY2FjdGl2 ZSA9PSBBUENfUkVNT1RFICYmIChhcGNzdGF0dXMgJiBBUENfTk9JTlApKSkKLSAgICAgICAgcmV0 dXJuKDEpOwotI2VuZGlmIC8qIENLX0FQQyAqLwotI2lmZGVmIFZNUwotICAgIGlmIChiYXRjaCkK LSAgICAgIHJldHVybigxKTsKLSNlbHNlCi0jaWZkZWYgVU5JWAotICAgIGlmIChiYWNrZ3JkKQot ICAgICAgcmV0dXJuKDEpOwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQot I2lmbmRlZiBWTVMKLSAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgICAgICAvKiBG b3JjZSBDQlJFQUsgbW9kZS4gKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotICAgIHJ2ID0gLTE7Ci0g ICAgd2hpbGUgKHJ2IDwgMCkgewotI2lmbmRlZiBPUzIKLSAgICAgICAgcHJpbnRmKCJtb3JlPyAi KTsKLSNpZmRlZiBVTklYCi0jaWZkZWYgTk9TRVRCVUYKLSAgICAgICAgZmZsdXNoKHN0ZG91dCk7 Ci0jZW5kaWYgLyogTk9TRVRCVUYgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZWxzZQotICAgICAg ICBwcmludGYoIm1vcmU/ICIpOwotICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBP UzIgKi8KLQotI2lmZGVmIElLU0QKLSAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAg ICBjeCA9IGNtZGdldGModGltZWxpbWl0KTsKLSAgICAgICAgICAgIGlmIChjeCA8IC0xICYmIHRp bWVsaW1pdCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiXG4/SUtTIGlkbGUgdGltZW91dCAt IEdvb2RieWUuXG4iKTsKLSAgICAgICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULDApOwotICAg ICAgICAgICAgfSBlbHNlIGlmIChjeCA9PSAtMSkgewkvKiBDb25uZWN0aW9uIGxvc3QgKi8KLSAg ICAgICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBjID0gKGNoYXIpIGN4OwotICAgICAgICB9IGVsc2UgewotI2VuZGlmIC8qIElLU0QgKi8K LSNpZmRlZiBWTVMKLQkgICAgY29uYmluKChjaGFyKWVzY2FwZSk7CS8qIFByb3RlY3QgYWdhaW5z dCBDdHJsLVogKi8KLQkgICAgY3ggPSBjb25pbmMoMCk7Ci0JICAgIGNvbmNiKChjaGFyKWVzY2Fw ZSk7Ci0jZWxzZQotCSAgICBjeCA9IGNtZGdldGMoMCk7Ci0jZW5kaWYgLyogVk1TICovCi0JICAg IGRlYnVnKEYxMDEsImFza21vcmUgY21kZ2V0YyIsIiIsY3gpOwotCSAgICBpZiAoY3ggPT0gRU9G KSB7Ci0JCWRlYnVnKEYxMDAsImFza21vcmUgRU9GIiwiIiwwKTsKLSNpZmRlZiBWTVMKLQkJYyA9 ICdcMDMyJzsKLSNlbHNlCi0JCWMgPSAnbic7Ci0jZW5kaWYgLyogVk1TICovCi0JICAgIH0gZWxz ZSB7Ci0JCWMgPSAoY2hhciljeDsKLQkgICAgfQotCSAgICBkZWJ1ZyhGMTAxLCJhc2ttb3JlIGMi LCIiLGMpOwotCi0jaWZkZWYgSUtTRAotCX0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgIHN3 aXRjaCAoYykgewotICAgICAgICAgIC8qIFllcyAqLwotCSAgY2FzZSAncCc6IGNhc2UgJ1AnOiBj YXNlICdnJzogY2FzZSAnRyc6IC8qIFByb2NlZWQgb3IgR28gKi8KLQkgICAgeGFza21vcmUgPSAw OwotCSAgICAvKiBmYWxsIHRocnUgb24gcHVycG9zZSAqLwotCi0gICAgICAgICAgY2FzZSBTUDog Y2FzZSAneSc6IGNhc2UgJ1knOiBjYXNlIDAxMjogIGNhc2UgMDE1OgotI2lmZGVmIE9TSwotICAg ICAgICAgICAgd3JpdGUoMSwgIlwwMTUgICAgICBcMDE1Iiwgc2l6ZW9mICJcMDE1ICAgICAgXDAx NSIgLSAxKTsKLSNlbHNlCi0gICAgICAgICAgICBwcmludGYoIlwwMTUgICAgICBcMDE1Iik7Ci0j ZW5kaWYgLyogT1NLICovCi0gICAgICAgICAgICBydiA9IDE7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAvKiBObyAqLwotICAgICAgICAgIGNhc2UgJ24nOiBjYXNlICdOJzogY2FzZSAn cSc6IGNhc2UgJ1EnOgotI2lmZGVmIE9TSwotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotI2Vs c2UKLSAgICAgICAgICAgIHByaW50ZigiXDAxNVwwMTIiKTsKLSNlbmRpZiAvKiBPU0sgKi8KLSAg ICAgICAgICAgIHJ2ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotCSAgY2FzZSAnXDAwMyc6Ci0J ICBjYXNlICdcMDA0JzoKLQkgIGNhc2UgJ1wwMzInOgotI2lmZGVmIE9TSwotCSAgICBwcmludGYo Il4lYy4uLlxuIiwgKGMgKyAwMTAwKSk7Ci0jZWxzZQotCSAgICBwcmludGYoIl4lYy4uLlwwMTVc MDEyIiwgKGMgKyAwMTAwKSk7Ci0jZW5kaWYgLyogT1NLICovCi0JICAgIHJ2ID0gMDsKLQkgICAg YnJlYWs7Ci0gICAgICAgICAgLyogSW52YWxpZCBhbnN3ZXIgKi8KLSAgICAgICAgICBkZWZhdWx0 OgotICAgICAgICAgICAgZGVidWcoRjExMSwiYXNrbW9yZSIsImludmFsaWQgYW5zd2VyIixjKTsK LSAgICAgICAgICAgIHByaW50ZigiWSBvciBzcGFjZS1iYXIgZm9yIHllcywgTiBmb3Igbm8sIEcg dG8gc2hvdyB0aGUgcmVzdFxuIik7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot I2lmZGVmIE9TMgotICAgICAgICBwcmludGYoIlxyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXHIiKTsKLSAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgfQotICAgIHJldHVybihydik7Ci0jZW5kaWYgLyogTk9JQ1Ag Ki8KLX0KLQotLyogIFQgUiBBIFAgIC0tICBUZXJtaW5hbCBpbnRlcnJ1cHQgaGFuZGxlciAqLwot Ci1TSUdUWVAKLSNpZmRlZiBDS19BTlNJQwotdHJhcChpbnQgc2lnKQotI2Vsc2UKLXRyYXAoc2ln KSBpbnQgc2lnOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0cmFwICovIHsKLSAgICBleHRl cm4gaW50IGJfc2F2ZSwgZl9zYXZlOwotI2lmbmRlZiBOT0lDUAotICAgIGV4dGVybiBpbnQgdGlt ZWxpbWl0OwotI2VuZGlmIC8qIE5PSUNQICovCi0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIHVuc2ln bmVkIGxvbmcgc3RhcnRmbGFnczsKLSNpZm5kZWYgTk9TRVRLRVkKLSAgICBleHRlcm4gaW50IG9z MmdrczsKLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotICAgIGludCBpOwotI2VuZGlmIC8qIE9TMiAq LwotI2lmbmRlZiBOT1NQTAotICAgIGV4dGVybiBpbnQgaV9hY3RpdmUsIGluc3RhdHVzOwotI2Vu ZGlmIC8qIE5PU1BMICovCi0jaWZkZWYgVk1TCi0gICAgaW50IGk7IEZJTEUgKmY7Ci0jZW5kaWYg LyogVk1TICovCi0gICAgZXh0ZXJuIGludCB6Y2hrb2QsIHpjaGtpZDsKLSNpZm5kZWYgTk9TUEwK LSAgICBleHRlcm4gaW50IHVua21hY3JvOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICBkZWJv ayA9IDE7Ci0jaWZkZWYgTlRTSUcKLSAgICBjb25ub2koKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwot I2lmZGVmIF9fRU1YX18KLSAgICBzaWduYWwoU0lHSU5ULCBTSUdfQUNLKTsKLSNlbmRpZgotI2lm ZGVmIEdFTURPUwotLyogR0VNIGlzIG5vdCByZWVudHJhbnQsIG5vIGkvbyBmcm9tIGludGVycnVw dCBsZXZlbCAqLwotICAgIGNrbG9uZ2ptcChjbWpidWYsMSk7ICAgICAgICAgICAgICAgIC8qIEp1 bXAgYmFjayB0byBwYXJzZXIgbm93ISAqLwotI2VuZGlmIC8qIEdFTURPUyAqLwotCi0jaWZkZWYg REVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjEwMCwiKioqKioqKioqKioqKioqKioq KioqIiwiIiwwKTsKLQlpZiAoc2lnID09IFNJR0lOVCkKLQkgIGRlYnVnKEYxMDEsInRyYXAgY2F1 Z2h0IFNJR0lOVCIsIiIsc2lnKTsKLQllbHNlIAotCSAgZGVidWcoRjEwMSwidHJhcCBjYXVnaHQg c2lnbmFsIiwiIixzaWcpOwotCWRlYnVnKEYxMDAsIioqKioqKioqKioqKioqKioqKioqKiIsIiIs MCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiBPUzIKLSAgICBpZiAoIHNp ZyA9PSBTSUdCUkVBSyAmJiAoc3RhcnRmbGFncyAmIDEyOCkgKSB7Ci0gICAgICAgIGRlYnVnKEYx MDEsInRyYXAgaWdub3JpbmcgU0lHQlJFQUsiLCIiLHNpZyk7Ci0gICAgICAgIHJldHVybjsKLSAg ICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9JQ1AKLSAgICB0aW1lbGltaXQgPSAw OyAgICAgICAgICAgICAgICAgICAgICAvKiBJbiBjYXNlIHRpbWVkIEFTSyBpbnRlcnJ1cHRlZCAq LwotI2lmbmRlZiBOT1NQTAotICAgIHVua21hY3JvID0gMDsJCQkvKiBPciBPTl9VTktOT1dOX01B Q1JPIGludGVycnVwdGVkLi4gKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotI2VuZGlmIC8qIE5PSUNQ ICovCi0gICAgemNoa29kID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3IgZmlsZSBl eHBhbnNpb24gaW50ZXJydXB0ZWQuLi4gKi8KLSAgICB6Y2hraWQgPSAwOwotICAgIGludGVycnVw dGVkID0gMTsKLQotICAgIGlmICh3aGF0ICYgV19DT05ORUNUKSB7CQkvKiBBcmUgd2UgaW4gQ09O TkVDVCBtb2RlPyAqLwotLyoKLSAgVGhlIEhQIHdvcmtzdGF0aW9uIFJlc2V0IGtleSBzZW5kcyBz b21lIGtpbmQgb2YgdWViZXItU0lHSU5UIHRoYXQgY2FuIG5vdAotICBiZSBTSUdfSUdOb3JlZCwg c28gd2Ugd2luZCB1cCBoZXJlIHNvbWVob3cgKGV2ZW4gdGhvdWdoIHRoaXMgaXMgKm5vdCogdGhl Ci0gIGN1cnJlbnQgU0lHSU5UIGhhbmRsZXIpLiAgSnVzdCByZXR1cm4uCi0qLwotICAgICAgICBk ZWJ1ZyhGMTAxLCJ0cmFwOiBTSUdJTlQgY2F1Z2h0IGR1cmluZyBDT05ORUNUIiwiIixzaWcpOwot ICAgICAgICBTSUdSRVRVUk47Ci0gICAgfQotI2lmbmRlZiBOT1NQTAotICAgIGlmIChpX2FjdGl2 ZSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIElOUFVUIGNvbW1hbmQgd2FzIGFjdGl2ZT8gKi8K LSAgICAgICAgaV9hY3RpdmUgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBOb3QgYW55IG1vcmUu Li4gKi8KLSAgICAgICAgaW5zdGF0dXMgPSBJTlBfVUk7ICAgICAgICAgICAgICAvKiBJTlBVVCBz dGF0dXMgPSBVc2VyIEludGVycnVwdGVkICovCi0gICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0K LSNpZm5kZWYgTk9YRkVSCi0gICAgZnRyZXNldCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAg LyogUmVzdG9yZSBnbG9iYWwgcHJvdG9jb2wgc2V0dGluZ3MgKi8KLSAgICBiaW5hcnkgPSBiX3Nh dmU7ICAgICAgICAgICAgICAgICAgICAvKiBUaGVuIHJlc3RvcmUgdGhlc2UgKi8KLSAgICBmbmNu diAgPSBmX3NhdmU7Ci0gICAgYnllX2FjdGl2ZSA9IDA7Ci0gICAgZGlyYWN0aXZlID0gMDsKLSAg ICBjZGFjdGl2ZSA9IDA7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgemNsb3NlKFpJRklMRSk7 ICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2Ugd2VyZSB0cmFuc2ZlcnJpbmcgYSBmaWxlLCAq LwotICAgIHpjbG9zZShaT0ZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGl0LiAq LwotI2lmbmRlZiBOT0lDUAotICAgIGNtZHNxdW8oY21kX3F1b3RpbmcpOyAgICAgICAgICAgICAg IC8qIElmIGNvbW1hbmQgcXVvdGluZyB3YXMgdHVybmVkIG9mZiAqLwotI2lmZGVmIENLTEVBUk4K LSAgICB7Ci0JZXh0ZXJuIEZJTEUgKiBsZWFybmZwOwotCWV4dGVybiBpbnQgbGVhcm5pbmc7Ci0J aWYgKGxlYXJuZnApIHsKLQkgICAgZmNsb3NlKGxlYXJuZnApOwotCSAgICBsZWFybmZwID0gTlVM TDsKLQkgICAgbGVhcm5pbmcgPSAwOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogQ0tMRUFSTiAqLwot I2VuZGlmIC8qIE5PSUNQICovCi0jaWZkZWYgQ0tfQVBDCi0gICAgZGVsbWFjKCJfYXBjX2NvbW1h bmRzIiwxKTsKLSAgICBhcGNhY3RpdmUgPSBBUENfSU5BQ1RJVkU7Ci0jZW5kaWYgLyogQ0tfQVBD ICovCi0KLSNpZmRlZiBWTVMKLS8qCi0gIEZpeCB0ZXJtaW5hbC4KLSovCi0gICAgaWYgKGZ0X3dp bikgeyAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgY3Vyc2VzIHdpbmRvdyBvcGVuICovCi0g ICAgICAgIGRlYnVnKEYxMDAsIl5DIHRyYXAoKSBjdXJzZXMiLCIiLDApOwotICAgICAgICB4eHNj cmVlbihTQ1JfQ1csMCwwTCwiIik7ICAgICAgIC8qIENsb3NlIGl0ICovCi0gICAgICAgIGNvbnJl cygpOyAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSB0ZXJtaW5hbCAqLwotICAgICAg ICBpID0gcHJpbnRmKCJeQy4uLiIpOyAgICAgICAgICAgIC8qIEVjaG8gXkMgdG8gc3RhbmRhcmQg b3V0cHV0ICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgY29ucmVzKCk7Ci0gICAgICAgIGkgPSBw cmludGYoIl5DLi4uXG4iKTsgICAgICAgICAgLyogRWNobyBeQyB0byBzdGFuZGFyZCBvdXRwdXQg Ki8KLSAgICB9Ci0gICAgaWYgKGkgPCAxICYmIGZlcnJvcihzdGRvdXQpKSB7ICAgICAgLyogSWYg dGhlcmUgd2FzIGFuIGVycm9yICovCi0gICAgICAgIGRlYnVnKEYxMDAsIl5DIHRyYXAoKSBlcnJv ciIsIiIsMCk7Ci0gICAgICAgIGZjbG9zZShzdGRvdXQpOyAgICAgICAgICAgICAgICAgLyogY2xv c2Ugc3RhbmRhcmQgb3V0cHV0ICovCi0gICAgICAgIGYgPSBmb3BlbihkZnR0eSwgInciKTsgICAg ICAgICAgLyogb3BlbiB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgKi8KLSAgICAgICAgaWYgKGYp IHN0ZG91dCA9IGY7ICAgICAgICAgICAgICAvKiBhbmQgbWFrZSBpdCBzdGFuZGFyZCBvdXRwdXQg Ki8KLSAgICAgICAgcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgICAgICAgICAvKiBhbmQgZWNobyB0 aGUgXkMgYWdhaW4uICovCi0gICAgfQotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE5vdCBWTVMgKi8KLSNpZmRlZiBTVFJBVFVTCi0gICAgY29ucmVzKCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGNvbnNvbGUgYmFjayB0byBub3JtYWwgbW9kZSAq LwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKGZ0X3dpbikg eyAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgY3Vyc2VzIHdpbmRvdyBvcGVuLCAqLwotICAg ICAgICBkZWJ1ZyhGMTAwLCJeQyB0cmFwKCkgY3Vyc2VzIiwiIiwwKTsKLSAgICAgICAgeHhzY3Jl ZW4oU0NSX0NXLDAsMEwsIiIpOwkvKiBjbG9zZSBpdC4gKi8KLSAgICAgICAgcHJpbnRmKCJeQy4u LiIpOyAgICAgICAgICAgICAgICAvKiBFY2hvIF5DIHRvIHN0YW5kYXJkIG91dHB1dCAqLwotICAg IH0gZWxzZSB7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgICAgIHByaW50ZigiXkMuLi5cbiIp OwotI2lmbmRlZiBOT1hGRVIKLSAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0jZW5kaWYgLyog Vk1TICovCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICBjb25ub2lfbXQoKTsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBLaWxsIGFzeW5jaCB0YXNrIHRoYXQgbGlzdGVucyB0byAqLwotICAgIHR0 aW1vZmYoKTsKLSAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUg a2V5Ym9hcmQgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotCi0jaWZuZGVmIE5PQ0NUUkFQ Ci0vKiAgVGhpcyBpcyBzdHVwaWQgLS0gZXZlcnkgdmVyc2lvbiBzaG91bGQgaGF2ZSB0dGltb2Zm KCkuLi4gICovCi0jaWZkZWYgVU5JWAotICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFR1cm4gb2ZmIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCi0jZWxzZQotI2lmZGVm IE9TSwotICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2Zm IGFueSB0aW1lciBpbnRlcnJ1cHRzICovCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLSAgICB0dGlt b2ZmKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50 ZXJydXB0cyAqLwotI2Vsc2UKLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9TRVRLRVkKLSAgICBvczJn a3MgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIGJhY2sgb24ga2V5Y29kZSBt YXBwaW5nICAqLwotI2VuZGlmIC8qIE5PU0VUS0VZICovCi0jaWZuZGVmIE5PTE9DQUwKLSAgICBm b3IgKGkgPSAwOyBpIDwgVk5VTTsgaSsrKQotICAgICAgVnNjcm5SZXNldFBvcHVwKGkpOwotI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZmRlZiBOVAotICAgIC8qIFdT QUlzQmxvY2tpbmcoKSByZXR1cm5zIEZBTFNFIGluIFdpbjk1IGR1cmluZyBhIGJsb2NraW5nIGFj Y2VwdCBjYWxsICovCi0gICAgaWYgKCBXU0FTYWZlVG9DYW5jZWwgLyogJiYgV1NBSXNCbG9ja2lu ZygpICovICkgewotICAgICAgICBXU0FDYW5jZWxCbG9ja2luZ0NhbGwoKTsKLSAgICB9Ci0jZW5k aWYgLyogTlQgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNpZmRlZiBDS19ORVRCSU9TCi0g ICAgTkNCQ2FuY2VsT3V0c3RhbmRpbmcoKTsKLSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0gICAg dHRpbW9mZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgYW55IHRpbWVy IGludGVycnVwdHMgKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgdHRpbW9mZigpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KLSNl bmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0j ZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZkZWYgTkVUUFRZCi0gICAg LyogQ2xlYW4gdXAgQ3RybC1DIG91dCBvZiBSRURJUkVDVCBvciBleHRlcm5hbCBwcm90b2NvbCAq LwotICAgIHsKLQlleHRlcm4gUElEX1QgcHR5X2ZvcmtfcGlkOwotCWV4dGVybiBpbnQgcHR5X21h c3Rlcl9mZCwgcHR5X3NsYXZlX2ZkOwotCWludCB4OwotCi0Jc2lnbmFsKFNJR0NITEQsU0lHX0lH Tik7CS8qIFdlIGRvbid0IHdhbnQgdGhpcyBhbnkgbW9yZSAqLwotCi0JZGVidWcoRjEwMSwidHJh cCBwdHlfbWFzdGVyX2ZkIiwiIixwdHlfbWFzdGVyX2ZkKTsKLQlpZiAocHR5X21hc3Rlcl9mZCA+ IDIpIHsKLQkgICAgeCA9IGNsb3NlKHB0eV9tYXN0ZXJfZmQpOwotCSAgICBkZWJ1ZyhGMTAxLCJ0 cmFwIHB0eV9tYXN0ZXJfZmQgY2xvc2UiLCIiLHgpOwotCX0KLQlwdHlfbWFzdGVyX2ZkID0gLTE7 Ci0JZGVidWcoRjEwMSwidHJhcCBwdHlfc2xhdmVfZmQiLCIiLHB0eV9zbGF2ZV9mZCk7Ci0JaWYg KHB0eV9zbGF2ZV9mZCA+IDIpIHsKLQkgICAgeCA9IGNsb3NlKHB0eV9zbGF2ZV9mZCk7Ci0JICAg IGRlYnVnKEYxMDEsInRyYXAgcHR5X3NsYXZlX2ZkIGNsb3NlIiwiIix4KTsKLQl9Ci0JcHR5X3Ns YXZlX2ZkID0gLTE7Ci0JZGVidWcoRjEwMSwidHJhcCBwdHlfZm9ya19waWQiLCIiLHB0eV9mb3Jr X3BpZCk7Ci0JaWYgKHB0eV9mb3JrX3BpZCA+IDApIHsKLQkgICAgeCA9IGtpbGwocHR5X2Zvcmtf cGlkLDApOwkvKiBTZWUgaWYgdGhlIGZvcmsgaXMgcmVhbGx5IHRoZXJlICovCi0JICAgIGRlYnVn KEYxMTEsInRyYXAgcHR5X2ZvcmtfcGlkIGtpbGwgMCBlcnJubyIsY2tpdG9hKHgpLGVycm5vKTsK LQkgICAgaWYgKHggPT0gMCkgewkJLyogU2VlbXMgdG8gYmUgYWN0aXZlICovCi0JCXggPSBraWxs KHB0eV9mb3JrX3BpZCxTSUdIVVApOyAvKiBBc2sgaXQgdG8gY2xlYW4gdXAgJiBleGl0ICovCi0J CWRlYnVnKEYxMDEsInRyYXAgcHR5X2ZvcmtfcGlkIGtpbGwgU0lHSFVQIiwiIix4KTsKLQkJbXNs ZWVwKDEwMCk7Ci0JCWVycm5vID0gMDsKLQkJeCA9IGtpbGwocHR5X2ZvcmtfcGlkLDApOyAvKiBJ cyBpdCBzdGlsbCB0aGVyZT8gKi8KLQkJaWYgKHggPT0gMAotI2lmZGVmIEVTUkNICi0JCSAgICAv KiBUaGlzIG1vZHVsZSBpcyBub3QgYWx3YXlzIGV4cG9zZWQgdG8gPGVycm5vLmg+ICovCi0JCSAg ICB8fCBlcnJubyAhPSBFU1JDSAotI2VuZGlmCS8qIEVTUkNIICovCi0JCSAgICApIHsKLQkJICAg IHggPSBraWxsKHB0eV9mb3JrX3BpZCxTSUdLSUxMKTsKLQkJICAgIGRlYnVnKEYxMDEsInRyYXAg cHR5X2ZvcmtfcGlkIGtpbGwgU0lHS0lMTCIsIiIseCk7Ci0JCX0KLQkgICAgfQotCSAgICBwdHlf Zm9ya19waWQgPSAtMTsKLQl9Ci0gICAgfQotI2VuZGlmCS8qIE5FVFBUWSAqLwotCi0jaWZkZWYg T1NLCi0gICAgc2lnbWFzaygtMSk7Ci0vKgotICBXZSBhcmUgaW4gYW4gaW50ZXJjZXB0IHJvdXRp bmUgYnV0IGRvIG5vdCBwZXJmb3JtIGEgRiRSVEUgKGRvbmUgaW1wbGljaXRseQotICBieSBydHMp LiAgV2UgaGF2ZSB0byBkZWNyZW1lbnQgdGhlIHNpZ21hc2sgYXMgRiRSVEUgZG9lcy4gIFdhcm5p bmc6IGxvbmdqdW1wCi0gIG9ubHkgcmVzdG9yZXMgdGhlIGNwdSByZWdpc3RlcnMsIE5PVCB0aGUg ZnB1IHJlZ2lzdGVycy4gIFNvIGRvbid0IHVzZSBmcHUgYXQKLSAgYWxsIG9yIGF0IGxlYXN0IGRv bid0IHVzZSBjb21tb24gZnB1IChkb3VibGUgb3IgZmxvYXQpIHJlZ2lzdGVyIHZhcmlhYmxlcy4K LSovCi0jZW5kaWYgLyogT1NLICovCi0KLSNpZmRlZiBOVFNJRwotICAgIFBvc3RDdHJsQ1NlbSgp OwotI2Vsc2UgLyogTlRTSUcgKi8KLSAgICBkZWJ1ZyhGMTAwLCJ0cmFwIGFib3V0IHRvIGxvbmdq bXAiLCIiLDApOwotI2lmZGVmIE5UCi0gICAgY2tsb25nam1wKGNramFkZHIoY21qYnVmKSwxKTsK LSNlbHNlIC8qIE5UICovCi0gICAgY2tsb25nam1wKGNtamJ1ZiwxKTsKLSNlbmRpZiAvKiBOVCAq LwotI2VuZGlmIC8qIE5UU0lHICovCi0jZWxzZSAvKiBOT0NDVFJBUCAqLwotLyogTm8gQ3RybC1D IHRyYXAsIGp1c3QgZXhpdC4gKi8KLSNpZmRlZiBDS19DVVJTRVMgICAgICAgICAgICAgICAgICAg ICAgICAvKiBDdXJzZXMgc3VwcG9ydD8gKi8KLSAgICB4eHNjcmVlbihTQ1JfQ1csMCwwTCwiIik7 ICAgICAgICAgICAvKiBDbG9zZSBjdXJzZXMgd2luZG93ICovCi0jZW5kaWYgLyogQ0tfQ1VSU0VT ICovCi0gICAgZG9leGl0KEJBRF9FWElULHdoYXQpOyAgICAgICAgICAgICAgLyogRXhpdCBwb29y bHkgKi8KLSNlbmRpZiAvKiBOT0NDVFJBUCAqLwotICAgIFNJR1JFVFVSTjsKLX0KLQotCi0vKiAg QyBLIF8gVCBJIE0gRSAgLS0gUmV0dXJucyBwb2ludGVyIHRvIGN1cnJlbnQgdGltZS4gKi8KLQot Y2hhciAqCi1ja190aW1lKCkgewotICAgIHN0YXRpYyBjaGFyIHRidWZbMTBdOwotICAgIGNoYXIg KnA7Ci0gICAgaW50IHg7Ci0KLSAgICB6dGltZSgmcCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAiVGh1IEZlYiAgOCAxMjowMDowMCAxOTkwIiAqLwotICAgIGlmICghcCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGxpa2UgYXNjdGltZSgpISAqLwotICAgICAgcmV0dXJuKCIi KTsKLSAgICBpZiAoKnApIHsKLSAgICAgICAgZm9yICh4ID0gMTE7IHggPCAxOTsgeCsrKSAgICAg ICAvKiBjb3B5IGhoOm1tOnNzICovCi0gICAgICAgICAgdGJ1Zlt4IC0gMTFdID0gcFt4XTsgICAg ICAgICAgLyogdG8gdGJ1ZiAqLwotICAgICAgICB0YnVmWzhdID0gTlVMOyAgICAgICAgICAgICAg ICAgIC8qIHRlcm1pbmF0ZSAqLwotICAgIH0KLSAgICByZXR1cm4odGJ1Zik7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBhbmQgcmV0dXJuIGl0ICovCi19Ci0KLS8qICBDIEMgXyBDIEwgRSBBIE4g IC0tICBDbGVhbnVwIGFmdGVyIHRlcm1pbmFsIGludGVycnVwdCBoYW5kbGVyICovCi0KLSNpZmRl ZiBHRU1ET1MKLWludAotY2NfY2xlYW4oKSB7Ci0gICAgemNsb3NlKFpJRklMRSk7ICAgICAgICAg ICAgICAgICAgICAgLyogSWYgd2Ugd2VyZSB0cmFuc2ZlcnJpbmcgYSBmaWxlLCAqLwotICAgIHpj bG9zZShaT0ZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGl0LiAqLwotICAgIHBy aW50ZigiXkMuLi5cbiIpOyAgICAgICAgICAgICAgICAgIC8qIE5vdCBWTVMsIG5vIHByb2JsZW0u Li4gKi8KLX0KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQotCi0vKiAgUyBUIFAgVCBSIEEgUCAtLSBI YW5kbGUgU0lHVFNUUCAoc3VzcGVuZCkgc2lnbmFscyAqLwotCi1TSUdUWVAKLSNpZmRlZiBDS19B TlNJQwotc3RwdHJhcChpbnQgc2lnKQotI2Vsc2UKLXN0cHRyYXAoc2lnKSBpbnQgc2lnOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi0vKiBzdHB0cmFwICovIHsKLQotI2lmbmRlZiBOT0pDCi0gICAg aW50IHg7IGV4dGVybiBpbnQgY21mbGdzOwotICAgIGRlYnVnKEYxMDEsInN0cHRyYXAoKSBjYXVn aHQgc2lnbmFsIiwiIixzaWcpOwotICAgIGlmICgheHN1c3BlbmQpIHsKLSAgICAgICAgcHJpbnRm KCJcclxuc3VzcGVuZCBkaXNhYmxlZFxyXG4iKTsKLSNpZm5kZWYgTk9JQ1AKLSAgICAgICAgaWYg KHdoYXQgJiBXX0NPTU1BTkQpIHsJCS8qIElmIHdlIHdlcmUgcGFyc2luZyBjb21tYW5kcyAqLwot ICAgICAgICAgICAgcHJvbXB0KHh4c3RyaW5nKTsgICAgICAgICAgIC8qIHJlaXNzdWUgdGhlIHBy b21wdCBhbmQgcGFydGlhbCAqLwotICAgICAgICAgICAgaWYgKCFjbWZsZ3MpICAgICAgICAgICAg ICAgIC8qIGNvbW1hbmQgKGlmIGFueSkgKi8KLSAgICAgICAgICAgICAgcHJpbnRmKCIlcyIsY21k YnVmKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgfSBlbHNlIHsKLSAgICAg ICAgY29ucmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgY29uc29sZSAq LwotI2lmbmRlZiBPUzIKLSAgICAgICAgLyogRmx1c2ggcGVuZGluZyBvdXRwdXQgZmlyc3QsIGlu IGNhc2Ugd2UgYXJlIGNvbnRpbnVlZCAqLwotICAgICAgICAvKiBpbiB0aGUgYmFja2dyb3VuZCwg d2hpY2ggY291bGQgbWFrZSB1cyBibG9jayAqLwotICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLQot ICAgICAgICB4ID0gcHN1c3BlbmQoeHN1c3BlbmQpOwkJLyogVHJ5IHRvIHN1c3BlbmQuICovCi0g ICAgICAgIGlmICh4IDwgMCkKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICBwcmludGYoIkpv YiBjb250cm9sIG5vdCBzdXBwb3J0ZWRcclxuIik7Ci0gICAgICAgIGNvbmludCh0cmFwLHN0cHRy YXApOyAgICAgICAgICAgLyogUmVhcm0gdGhlIHRyYXAuICovCi0gICAgICAgIGRlYnVnKEYxMDAs InN0cHRyYXAgYmFjayBmcm9tIHN1c3BlbmQiLCIiLDApOwotICAgICAgICBzd2l0Y2ggKHdoYXQp IHsKLSAgICAgICAgICBjYXNlIFdfQ09OTkVDVDogICAgICAgICAgICAgICAvKiBJZiBzdXNwZW5k ZWQgZHVyaW5nIENPTk5FQ1Q/ICovCi0gICAgICAgICAgICBjb25iaW4oKGNoYXIpZXNjYXBlKTsg ICAgICAgLyogcHV0IGNvbnNvbGUgYmFjayBpbiBiaW5hcnkgbW9kZSAqLwotICAgICAgICAgICAg ZGVidWcoRjEwMCwic3RwdHJhcCBXX0NPTk5FQ1QiLCIiLDApOwotICAgICAgICAgICAgYnJlYWs7 Ci0jaWZuZGVmIE5PSUNQCi0gICAgICAgICAgY2FzZSBXX0NPTU1BTkQ6ICAgICAgICAgICAgICAg LyogU3VzcGVuZGVkIGluIGNvbW1hbmQgbW9kZSAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwi c3RwdHJhcCBXX0NPTU1BTkQgcGZsYWciLCIiLHBmbGFnKTsKLSAgICAgICAgICAgIGNvbmNiKChj aGFyKWVzY2FwZSk7ICAgICAgICAvKiBQdXQgYmFjayBDQlJFQUsgdHR5IG1vZGUgKi8KLSAgICAg ICAgICAgIGlmIChwZmxhZykgeyAgICAgICAgICAgICAgICAvKiBJZiBjb21tYW5kIHBhcnNpbmcg d2FzICovCi0gICAgICAgICAgICAgICAgcHJvbXB0KHh4c3RyaW5nKTsgICAgICAgLyogcmVpc3N1 ZSB0aGUgcHJvbXB0IGFuZCBwYXJ0aWFsICovCi0gICAgICAgICAgICAgICAgaWYgKCFjbWZsZ3Mp ICAgICAgICAgICAgLyogY29tbWFuZCAoaWYgYW55KSAqLwotICAgICAgICAgICAgICAgICAgcHJp bnRmKCIlcyIsY21kYnVmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotI2Vu ZGlmIC8qIE5PSUNQICovCi0gICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAg LyogQWxsIG90aGVyIGNhc2VzLi4uICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJzdHB0cmFw IGRlZmF1bHQiLCIiLDApOwotICAgICAgICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAg IC8qIFB1dCBpdCBiYWNrIGluIENCUkVBSyBtb2RlICovCi0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBOT0pDICovCi0gICAgU0lHUkVUVVJOOwotfQotCi0j aWZkZWYgVExPRwotI2RlZmluZSBUQlVGTCAzMDAKLQotLyogIFQgTCBPIEcgIC0tICBMb2cgYSBy ZWNvcmQgaW4gdGhlIHRyYW5zYWN0aW9uIGZpbGUgICovCi0vKgotIENhbGwgd2l0aCBhIGZvcm1h dCBhbmQgMyBhcmd1bWVudHM6IHR3byBzdHJpbmdzIGFuZCBhIG51bWJlcjoKLSAgIGYgICAgIC0g Rm9ybWF0LCBhIGJpdCBzdHJpbmcgaW4gcmFuZ2UgMC03LCBiaXQgeCBpcyBvbiwgYXJnICN4IGlz IHByaW50ZWQuCi0gICBzMSxzMiAtIFN0cmluZyBhcmd1bWVudHMgMCBhbmQgMS4KLSAgIG4gICAg IC0gTG9uZywgYXJndW1lbnQgMi4KLSovCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWRvdGxvZyhp bnQgZiwgY2hhciAqczEsIGNoYXIgKnMyLCBDS19PRkZfVCBuKQotI2Vsc2UKLWRvdGxvZyhmLHMx LHMyLG4pIGludCBmOyBDS19PRkZfVCBuOyBjaGFyICpzMSwgKnMyOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi0vKiBkb3Rsb2cgKi8gewotICAgIHN0YXRpYyBjaGFyIHNbVEJVRkxdOwotICAgIGV4 dGVybiBpbnQgdGxvZ2ZtdDsKLSAgICBjaGFyICpzcCA9IHM7IGludCB4OwotICAgIGlmICghczEp IHMxID0gIiI7Ci0gICAgaWYgKCFzMikgczIgPSAiIjsKLQotICAgIGlmICghdHJhbG9nKSByZXR1 cm47ICAgICAgICAgICAgICAgIC8qIElmIG5vIHRyYW5zYWN0aW9uIGxvZywgZG9uJ3QgKi8KLSAg ICBpZiAodGxvZ2ZtdCAhPSAxKSByZXR1cm47Ci0gICAgc3dpdGNoIChmKSB7Ci0gICAgICBjYXNl IEYwMDA6ICAgICAgICAgICAgICAgICAgICAgICAgLyogMCAoc3BlY2lhbCkgInMxIG4gczIiICAq LwotICAgICAgICBpZiAoKGludClzdHJsZW4oczEpICsgKGludClzdHJsZW4oczIpICsgMTUgPiBU QlVGTCkKLSAgICAgICAgICBzcHJpbnRmKHNwLCI/VC1Mb2cgc3RyaW5nIHRvbyBsb25nIik7Ci0g ICAgICAgIGVsc2UKLQkgIHNwcmludGYoc3AsIiVzICVzICVzIixzMSxja2ZzdG9hKG4pLHMyKTsK LSAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAwKSB0cmFsb2cgPSAwOwotICAgICAgICBi cmVhazsKLSAgICAgIGNhc2UgRjAwMTogICAgICAgICAgICAgICAgICAgICAgICAvKiAxLCAiIG4i ICovCi0gICAgICAgIHNwcmludGYoc3AsIiAlcyIsY2tmc3RvYShuKSk7Ci0gICAgICAgIGlmICh6 c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj YXNlIEYwMTA6ICAgICAgICAgICAgICAgICAgICAgICAgLyogMiwgIltzMl0iICovCi0gICAgICAg IHggPSAoaW50KXN0cmxlbihzMik7Ci0gICAgICAgIGlmIChzMlt4XSA9PSAnXG4nKSBzMlt4XSA9 ICdcMCc7Ci0gICAgICAgIGlmICh4ICsgNiA+IFRCVUZMKQotICAgICAgICAgIHNwcmludGYoc3As Ij9TdHJpbmcgdG9vIGxvbmciKTsKLSAgICAgICAgZWxzZSBzcHJpbnRmKHNwLCJbJXNdIixzMik7 Ci0gICAgICAgIGlmICh6c291dGwoWlRGSUxFLCIiKSA8IDApIHRyYWxvZyA9IDA7Ci0gICAgICAg IGJyZWFrOwotICAgICAgY2FzZSBGMDExOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMsICJb czJdIG4iICovCi0gICAgICAgIHggPSAoaW50KXN0cmxlbihzMik7Ci0gICAgICAgIGlmIChzMlt4 XSA9PSAnXG4nKSBzMlt4XSA9ICdcMCc7Ci0gICAgICAgIGlmICh4ICsgNiA+IFRCVUZMKQotICAg ICAgICAgIHNwcmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmciKTsKLSAgICAgICAgZWxzZSBzcHJp bnRmKHNwLCJbJXNdICVzIixzMixja2ZzdG9hKG4pKTsKLSAgICAgICAgaWYgKHpzb3V0bChaVEZJ TEUscykgPCAwKSB0cmFsb2cgPSAwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRjEwMDog ICAgICAgICAgICAgICAgICAgICAgICAvKiA0LCAiczEiICovCi0gICAgICAgIGlmICh6c291dGwo WlRGSUxFLHMxKSA8IDApIHRyYWxvZyA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBG MTAxOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUsICJzMTogbiIgKi8KLSAgICAgICAgaWYg KChpbnQpc3RybGVuKHMxKSArIDE1ID4gVEJVRkwpCi0gICAgICAgICAgc3ByaW50ZihzcCwiP1N0 cmluZyB0b28gbG9uZyIpOwotICAgICAgICBlbHNlIHNwcmludGYoc3AsIiVzOiAlcyIsczEsY2tm c3RvYShuKSk7Ci0gICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsK LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEYxMTA6ICAgICAgICAgICAgICAgICAgICAgICAg LyogNiwgInMxIHMyIiAqLwotICAgICAgICB4ID0gKGludClzdHJsZW4oczIpOwotICAgICAgICBp ZiAoczJbeF0gPT0gJ1xuJykgczJbeF0gPSAnXDAnOwotICAgICAgICBpZiAoKGludClzdHJsZW4o czEpICsgeCArIDQgPiBUQlVGTCkKLSAgICAgICAgICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBs b25nIik7Ci0gICAgICAgIGVsc2UKLQkgIHNwcmludGYoc3AsIiVzJXMlcyIsczEsKCgqczIgPT0g JzonKSA/ICIiIDogIiAiKSxzMik7Ci0gICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkg dHJhbG9nID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEYxMTE6ICAgICAgICAgICAg ICAgICAgICAgICAgLyogNywgInMxIHMyOiBuIiAqLwotICAgICAgICB4ID0gKGludClzdHJsZW4o czIpOwotICAgICAgICBpZiAoczJbeF0gPT0gJ1xuJykgczJbeF0gPSAnXDAnOwotICAgICAgICBp ZiAoKGludClzdHJsZW4oczEpICsgeCArIDE1ID4gVEJVRkwpCi0gICAgICAgICAgc3ByaW50Zihz cCwiP1N0cmluZyB0b28gbG9uZyIpOwotICAgICAgICBlbHNlCi0JICBzcHJpbnRmKHNwLCIlcyVz JXM6ICVzIixzMSwoKCpzMiA9PSAnOicpID8gIiIgOiAiICIpLHMyLGNrZnN0b2EobikpOwotICAg ICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7Ci0gICAgICAgIGJyZWFr OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ByaW50ZihzcCwiP0ludmFsaWQgZm9ybWF0IGZv ciB0bG9nKCkgLSAlZCIsZik7Ci0gICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJh bG9nID0gMDsKLSAgICB9Ci19Ci0KLS8qCi0gIEQgTyBYIEwgTyBHCi0KLSAgVGhpcyBpcyB0aGUg dHJhbnNhY3Rpb24tbG9nIHdyaXRlciBmb3IgQlJJRUYgZm9ybWF0LgotICBUaGUgaWRlYSBpcyBw cm9kdWNlIG9uZSByZWNvcmQgKGxpbmUpIHBlciBmaWxlLiAgRWFjaCByZWNvcmQKLSAgaGFzIHRo ZSBmb2xsb3dpbmcgZGVsaW1pdGVkIGZpZWxkczoKLSAgICBEYXRlICh5eXl5bW1kZCkKLSAgICBU aW1lIChoaDptbTpzcykKLSAgICBBY3Rpb246IFNFTkQgb3IgUkVDVgotICAgIEZpbGUgbmFtZQot ICAgIEZpbGUgc2l6ZQotICAgIFRyYW5zZmVyIG1vZGUgKHRleHQsIGJpbmFyeSwgaW1hZ2UsIGxh YmVsZWQsIGV0YykuCi0gICAgU3RhdHVzOiBPSyBvciBGQUlMRUQKLSAgICBGcmVlLWZvcm0gY29t bWVudHMgaW4gZG91YmxlcXVvdGVzCi0gIFRoZSBkZWZhdWx0IHNlcGFyYXRvciBpcyBjb21tYS4K LSAgSWYgYSBmaWVsZCBjb250YWlucyB0aGUgc2VwYXJhdG9yLCBpdCBpcyBlbmNsb3NlZCBpbiBk b3VibGVxdW90ZXMuCi0qLwotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1kb3hsb2coaW50IHgsIGNo YXIgKiBmbiwgQ0tfT0ZGX1QgZnMsIGludCBmbSwgaW50IHN0YXR1cywgY2hhciAqIG1zZykKLSNl bHNlCi1kb3hsb2coeCwgZm4sIGZzLCBmbSwgc3RhdHVzLCBtc2cpCi0gICAgaW50IHg7IGNoYXIg KiBmbjsgQ0tfT0ZGX1QgZnM7IGludCBmbTsgaW50IHN0YXR1czsgY2hhciAqIG1zZzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotLyogZG94bG9nICovIHsKLSAgICBleHRlcm4gaW50IHRsb2dzZXA7 Ci0gICAgY2hhciBzZXBbMl07Ci0gICAgY2hhciBidWZbQ0tNQVhQQVRIKzI1Nl0sICogYnVmcDsK LSAgICBjaGFyIHRtcGJ1ZlszMl07Ci0gICAgY2hhciAqIHMsICogcDsKLSAgICBpbnQgbGVuLCBs ZWZ0LCBmdHAgPSAwLCBrOwotCi0gICAgaWYgKCF0cmFsb2cpIHJldHVybjsgICAgICAgICAgICAg ICAgLyogSWYgbm8gdHJhbnNhY3Rpb24gbG9nLCBkb24ndCAqLwotCi0gICAgaWYgKCFmbikgZm4g PSAiIjsgICAgICAgICAgICAgICAgICAgLyogUHJvdGVjdCBhZ2FpbnN0IG51bGwgcG9pbnRlcnMg Ki8KLSAgICBpZiAoIW1zZykgbXNnID0gIiI7Ci0gICAgaWYgKHggJiBXX0ZUUCkKLSAgICAgIGZ0 cCsrOwotCi0gICAgc2VwWzBdID0gKGNoYXIpIHRsb2dzZXA7Ci0gICAgc2VwWzFdID0gTlVMOwot ICAgIGlmICghc2VwWzBdKSBzZXBbMF0gPSAnLCc7Ci0KLSAgICBidWZwID0gYnVmOwotICAgIGxl ZnQgPSBzaXplb2YoYnVmKTsKLSAgICBkZWJ1ZyhGMTAxLCJYWFggZG94bG9nIGxlZnQgMSIsIiIs bGVmdCk7Ci0KLSAgICBwID0genpuZGF0ZSgpOyAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRl ICovCi0gICAgY2ttYWttc2coYnVmLCBsZWZ0LCBwID8gcCA6ICIwMDAwMDAwMCIsIHNlcCwgTlVM TCwgTlVMTCk7Ci0gICAgYnVmcCArPSA5OwotICAgIGxlZnQgLT0gOTsKLSAgICBkZWJ1ZyhGMTEx LCJYWFggZG94bG9nIGxlZnQgMiIsYnVmLGxlZnQpOwotCi0gICAgenRpbWUoJnApOwotICAgIGNr c3RybmNweShidWZwLHArMTEsbGVmdCk7Ci0gICAgYnVmcCArPSA4OwotICAgIGxlZnQgLT0gODsK LSAgICBkZWJ1ZyhGMTExLCJYWFggZG94bG9nIGxlZnQgMyIsYnVmLGxlZnQpOwotCi0gICAgaWYg KGZ0cCkgewotCWlmICghKHggJiAoV19TRU5EfFdfUkVDVikpKQotCSAgcmV0dXJuOwotCXMgPSAg KHggJiBXX1NFTkQpID8gIlBVVCIgOiAiR0VUIjsKLQlrID0gMzsKLSAgICB9IGVsc2UgewotCXMg PSAgKHggJiBXX1NFTkQpID8gIlNFTkQiIDogIlJFQ1YiOwotCWsgPSA0OwotICAgIH0KLSAgICBj a21ha21zZyhidWZwLGxlZnQsc2VwLHMsc2VwLE5VTEwpOwotICAgIGJ1ZnAgKz0gayArIDI7Ci0g ICAgbGVmdCAtPSAoayArIDIpOwotICAgIGRlYnVnKEYxMTEsIlhYWCBkb3hsb2cgbGVmdCA0Iixi dWYsbGVmdCk7Ci0KLSAgICBzID0gIiI7Ci0gICAgaWYgKGNrc3RyY2hyKGZuLHNlcFswXSkpCQkv KiBGaWxlbmFtZSAqLwotICAgICAgcyA9ICJcIiI7Ci0gICAgY2ttYWttc2coYnVmcCxsZWZ0LHMs Zm4scyxzZXApOwotICAgIHNwcmludGYodG1wYnVmLCIlcyIsY2tmc3RvYShmcykpOwkvKiBTaXpl ICovCi0gICAgY2tzdHJuY2F0KGJ1Zix0bXBidWYsQ0tNQVhQQVRIKTsKLSAgICBja3N0cm5jYXQo YnVmLHNlcCxDS01BWFBBVEgpOwotICAgIGRlYnVnKEYxMTAsImRveGxvZyA0IixidWYsMCk7Ci0K LSNpZmRlZiBOT0lDUAotICAgIC8qIFRyYW5zZmVyIG1vZGUgKi8KLSAgICBja3N0cm5jcHkodG1w YnVmLCAoYmluYXJ5ID8gImJpbmFyeSIgOiAidGV4dCIpLCBUTVBCVUZTSVopOwotI2Vsc2UKLSAg ICBja3N0cm5jcHkodG1wYnVmLGdmbW9kZShmbSwwKSxUTVBCVUZTSVopOwotI2VuZGlmIC8qIE5P SUNQICovCi0gICAgaWYgKGNrc3RyY2hyKHRtcGJ1ZixzZXBbMF0pKSB7ICAgICAgLyogTWlnaHQg Y29udGFpbiBzcGFjZXMgKi8KLSAgICAgICAgY2tzdHJuY2F0KGJ1ZiwiXCIiLENLTUFYUEFUSCk7 Ci0gICAgICAgIGNrc3RybmNhdChidWYsdG1wYnVmLENLTUFYUEFUSCk7Ci0gICAgICAgIGNrc3Ry bmNhdChidWYsIlwiIixDS01BWFBBVEgpOwotICAgIH0gZWxzZQotICAgICAgY2tzdHJuY2F0KGJ1 Zix0bXBidWYsQ0tNQVhQQVRIKTsKLSAgICBja3N0cm5jYXQoYnVmLHNlcCxDS01BWFBBVEgpOwot ICAgIGRlYnVnKEYxMTAsImRveGxvZyA1IixidWYsMCk7Ci0KLSAgICBja3N0cm5jYXQoYnVmLCBz dGF0dXMgPyAiRkFJTEVEIiA6ICJPSyIsQ0tNQVhQQVRIKTsKLSAgICBsZW4gPSBzdHJsZW4oYnVm KTsKLSAgICBsZWZ0ID0gQ0tNQVhQQVRIKzI1NiAtIGxlbjsKLSAgICBpZiAobGVmdCA8IDIpIGZh dGFsKCJkb3hsb2cgYnVmZmVyIG92ZXJsb3ciKTsKLQotICAgIGRlYnVnKEYxMTEsIlhYWCBkb3hs b2cgbGVmdCA1IixidWYsbGVmdCk7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJkb3hsb2cgYnVmIDEiLCBi dWYsIGxlbik7Ci0gICAgcyA9IGJ1ZiArIGxlbjsKLSAgICBpZiAoc3RhdHVzID09IDAgJiYgbGVm dCA+IDMyKSB7Ci0gICAgICAgIGxvbmcgY3BzID0gMEw7Ci0jaWZkZWYgR0ZUSU1FUgotCWRlYnVn KEYxMDEsIkRPWExPRyBmcHhmc2VjcyIsIiIsKGxvbmcpKGZweGZzZWNzICogMTAwMCkpOwotICAg ICAgICBpZiAoZnB4ZnNlY3MpIGNwcyA9IChsb25nKSgoQ0tGTE9BVCkgZnMgLyBmcHhmc2Vjcyk7 Ci0gICAgICAgIHNwcmludGYocywiJXNcIiUwLjNmc2VjICVsZGNwc1wiIixzZXAsZnB4ZnNlY3Ms Y3BzKTsKLSNlbHNlCi0gICAgICAgIGlmICh4ZnNlY3MpIGNwcyA9IGZzIC8geGZzZWNzOwotICAg ICAgICBzcHJpbnRmKHMsIiVzXCIlbGRzZWMgJWxkY3BzXCIiLHNlcCx4ZnNlY3MsY3BzKTsKLSNl bmRpZiAvKiBHRlRJTUVSICovCi0gICAgfSBlbHNlIGlmICgoaW50KXN0cmxlbihtc2cpICsgNCA8 IGxlZnQpIHsKLSAgICAgICAgc3ByaW50ZihzLCIlc1wiJXNcIiIsc2VwLG1zZyk7Ci0gICAgfQot ICAgIGRlYnVnKEYxMTEsIlhYWCBkb3hsb2cgbGVmdCA1IixidWYsbGVmdCk7Ci0KLSAgICBkZWJ1 ZyhGMTEwLCJkb3hsb2cgNSIsYnVmLDApOwotICAgIHggPSB6c291dGwoWlRGSUxFLGJ1Zik7Ci0g ICAgZGVidWcoRjEwMSwiZG94bG9nIHpzb3V0bCIsIiIseCk7Ci0gICAgaWYgKHggPCAwKSB0cmFs b2cgPSAwOwotfQotI2VuZGlmIC8qIFRMT0cgKi8KLQotI2lmbmRlZiBNQUMKLS8qCi0gIFRoZSBy ZXN0IG9mIHRoaXMgZmlsZSBpcyBmb3IgYWxsIGltcGxlbWVudGF0aW9ucyBidXQgdGhlIE1hY2lu dG9zaC4KLSovCi0KLSNpZmRlZiBDS19DVVJTRVMKLXN0YXRpYyBpbnQgcmVwYWludCA9IDA7ICAg ICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBkaXNwbGF5IG5lZWRzIHJlcGFpbnRpbmcgKi8KLSNl bmRpZiAvKiBDS19DVVJTRVMgKi8KLQotI2lmbmRlZiBOT1hGRVIKLS8qICBDIEggSyBJIE4gVCAg LS0gIENoZWNrIGZvciBjb25zb2xlIGludGVycnVwdHMgICovCi0KLS8qCi0gIFVzZWQgZHVyaW5n IGZpbGUgdHJhbnNmZXIgaW4gbG9jYWwgbW9kZSBvbmx5OgotICAuIElmIHVzZXIgaGFzIG5vdCB0 b3VjaGVkIHRoZSBrZXlib2FyZCwgcmV0dXJucyAwIHdpdGggbm8gc2lkZSBlZmZlY3RzLgotICAu IElmIHVzZXIgdHlwZWQgUyBvciBBIChldGMsIHNlZSBiZWxvdykgcHJpbnRzIHN0YXR1cyBtZXNz YWdlIGFuZCByZXR1cm5zIDAuCi0gIC4gSWYgdXNlciB0eXBlZCBYIG9yIEYgKGV0Yywgc2VlIGJl bG93KSByZXR1cm5zIDAgd2l0aCBjeHNlZW4gc2V0IHRvIDEuCi0gIC4gSWYgdXNlciB0eXBlZCBa IG9yIEIgKGV0Yywgc2VlIGJlbG93KSByZXR1cm5zIDAgd2l0aCBjenNlZW4gc2V0IHRvIDEuCi0g IC4gSWYgdXNlciB0eXBlZCBFIG9yIEMgKGV0Yywgc2VlIGJlbG93KSByZXR1cm5zIC0xLgotKi8K LWludAotY2hraW50KCkgewotICAgIGludCBjaCwgY24sIG9mZDsgbG9uZyB6ejsKLSAgICBpZiAo IXhmcmludCkKLSAgICAgIHJldHVybigwKTsKLSAgICBpZiAoKCFsb2NhbCkgfHwgKHF1aWV0KSkg cmV0dXJuKDApOyAvKiBPbmx5IGRvIHRoaXMgaWYgbG9jYWwgJiBub3QgcXVpZXQgKi8KLSNpZmRl ZiBkYXRhZ2VuZXJhbAotICAgIGlmIChjb25fcmVhZHNfbXQpICAgICAgICAgICAgICAgICAgIC8q IGlmIGNvbmludF9tdCB0YXNrIGlzIGFjdGl2ZSAqLwotICAgICAgaWYgKGNvbmludF9hdmwpIHsg ICAgICAgICAgICAgICAgIC8qIGFuZCB0aGVyZSdzIGFuIGludGVycnVwdCBwZW5kaW5nICovCi0g ICAgICAgICAgY24gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvY2VzcyBpdCAqLwot ICAgICAgICAgIGNoID0gY29uaW50X2NoOwotICAgICAgICAgIGNvbmludF9hdmwgPSAwOyAgICAg ICAgICAgICAgIC8qIHR1cm4gb2ZmIGZsYWcgc28gY29uaW50X210IGNhbiAqLwotICAgICAgfSBl bHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb2NlZWQgKi8KLSAgICAgICAgcmV0 dXJuKDApOwotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIGNv bmludF9tdCBub3QgYWN0aXZlICovCi0gICAgICBpZiAoKGNoID0gY29uaW5jKDIpKSA8IDApICAg ICAgICAgLyogdHJ5IHRvIGdldCBjaGFyIG1hbnVhbGx5ICovCi0gICAgICAgIHJldHVybigwKTsg ICAgICAgICAgICAgICAgICAgICAgLyogSS9PIGVycm9yLCBvciBubyBkYXRhICovCi0gICAgICBl bHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWYgc3VjY2Vzc2Z1bCwgc2V0IGNu IHNvIHdlICovCi0gICAgICAgIGNuID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyoga25v dyB3ZSBnb3Qgb25lICovCi0gICAgZGVidWcoRjEwMSwiY2hraW50IGdvdCBrZXlib2FyZCBjaGFy YWN0ZXIiLGNoLGNuKTsKLSNlbHNlIC8qICFkYXRhZ2VuZXJhbCAqLwotI2lmZGVmIE5UU0lHCi0g ICAgewotICAgICAgICBleHRlcm4gaW50IFRsc0luZGV4OwotICAgICAgICBzdHJ1Y3QgX3RocmVh ZGluZm8gKiB0aHJlYWRpbmZvOwotICAgICAgICB0aHJlYWRpbmZvID0gKHN0cnVjdCBfdGhyZWFk aW5mbyAqKSBUbHNHZXRWYWx1ZShUbHNJbmRleCk7Ci0gICAgICAgIGlmICh0aHJlYWRpbmZvKSB7 Ci0gICAgICAgICAgICBpZiAoIVdhaXRTZW0odGhyZWFkaW5mby0+RGllU2VtLDApKQotICAgICAg ICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgIC8qIENhbmNlbCBJbW1lZGlhdGVseSAq LwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgY24gPSBjb25jaGso KTsgICAgICAgICAgICAgICAgICAgICAgLyogQW55IGlucHV0IHdhaXRpbmc/ICovCi0gICAgZGVi dWcoRjEwMSwiY29uY2hrIiwiIixjbik7Ci0gICAgaWYgKGNuIDwgMSkgcmV0dXJuKDApOwotICAg IGNoID0gY29uaW5jKDUpIDsKLSAgICBkZWJ1ZyhGMTAxLCJjb25pbmMiLCIiLGNoKTsKLSAgICBp ZiAoY2ggPCAwKSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotICAgIGNo ICY9IDAxNzc7Ci0gICAgc3dpdGNoIChjaCkgewotICAgICAgY2FzZSAnQSc6IGNhc2UgJ2EnOiBj YXNlIDAwMDE6ICAgIC8qIFN0YXR1cyByZXBvcnQgKi8KLSAgICAgIGNhc2UgJ1MnOiBjYXNlICdz JzoKLSAgICAgICAgaWYgKGZkaXNwbGEgIT0gWFlGRF9SICYmIGZkaXNwbGEgIT0gWFlGRF9TICYm IGZkaXNwbGEgIT0gWFlGRF9OKQotICAgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAg ICAgIC8qIE9ubHkgZm9yIHNlcmlhbCwgc2ltcGxlIG9yIG5vbmUgKi8KLSAgICAgICAgb2ZkID0g ZmRpc3BsYTsgICAgICAgICAgICAgICAgICAvKiBbTUZdIFNhdmUgZmlsZSBkaXNwbGF5IHR5cGUg Ki8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9OKQotICAgICAgICAgIGZkaXNwbGEgPSBY WUZEX1I7ICAgICAgICAgICAgIC8qIFtNRl0gUHJldGVuZCBzZXJpYWwgaWYgbm8gZGlzcGxheSAq LwotICAgICAgICB4eHNjcmVlbihTQ1JfVE4sMCwwbCwiU3RhdHVzIHJlcG9ydDoiKTsKLSAgICAg ICAgeHhzY3JlZW4oU0NSX1ROLDAsMGwsIiBmaWxlIHR5cGU6ICIpOwotICAgICAgICBpZiAoYmlu YXJ5KSB7Ci0gICAgICAgICAgICBzd2l0Y2goYmluYXJ5KSB7Ci0gICAgICAgICAgICAgIGNhc2Ug WFlGVF9MOiB4eHNjcmVlbihTQ1JfVFosMCwwbCwibGFiZWxlZCIpOyBicmVhazsKLSAgICAgICAg ICAgICAgY2FzZSBYWUZUX0k6IHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJpbWFnZSIpOyBicmVhazsK LSAgICAgICAgICAgICAgY2FzZSBYWUZUX1U6IHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJiaW5hcnkg dW5kZWZpbmVkIik7IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg ICBjYXNlIFhZRlRfQjogeHhzY3JlZW4oU0NSX1RaLDAsMGwsImJpbmFyeSIpOyBicmVhazsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBOT0NTRVRTCi0gICAgICAgICAg ICB4eHNjcmVlbihTQ1JfVFosMCwwbCwidGV4dCIpOwotI2Vsc2UKLSAgICAgICAgICAgIHh4c2Ny ZWVuKFNDUl9UVSwwLDBsLCJ0ZXh0LCAiKTsKLSAgICAgICAgICAgIGlmICh0Y2hhcnNldCA9PSBU Q19UUkFOU1AgfHwgeGZyeGxhID09IDApIHsKLSAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1Jf VFosMCwwbCwidHJhbnNwYXJlbnQiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpIHsKLSAgICAgICAgICAgICAgICAgICAgeHhzY3JlZW4o U0NSX1RaLDAsMGwsdGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCk7Ci0gICAgICAgICAgICAgICAg ICAgIHh4c2NyZWVuKFNDUl9UVSwwLDBsLCIgPT4gIik7Ci0gICAgICAgICAgICAgICAgICAgIHh4 c2NyZWVuKFNDUl9UWiwwLDBsLGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQpOwotICAgICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBs LGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQpOwotICAgICAgICAgICAgICAgICAgICB4eHNjcmVl bihTQ1JfVFUsMCwwbCwiID0+ICIpOwotICAgICAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1Jf VFosMCwwbCx0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkKTsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICAgICB9Ci0gICAgICAgIHh4 c2NyZWVuKFNDUl9RRSwwLGZpbGNudCwiIGZpbGUgbnVtYmVyIik7Ci0gICAgICAgIGlmIChmc2l6 ZSkgeHhzY3JlZW4oU0NSX1FFLDAsZnNpemUsIiBzaXplIik7Ci0gICAgICAgIHh4c2NyZWVuKFND Ul9RRSwwLGZmYywiIGNoYXJhY3RlcnMgc28gZmFyIik7Ci0gICAgICAgIGlmIChmc2l6ZSA+IDBM KSB7Ci0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgICAgICAgICB6eiA9IHdoYXQgJiBXX1NFTkQgPyBz ZW5kc3RhcnQgOiB3aGF0ICYgV19SRUNWID8gcnNfbGVuIDogMDsKLSAgICAgICAgICAgIHp6ID0g KCAoZmZjICsgenopICogMTAwTCApIC8gZnNpemU7Ci0jZWxzZQotICAgICAgICAgICAgenogPSAo IGZmYyAqIDEwMEwgKSAvIGZzaXplOwotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotICAgICAgICAg ICAgeHhzY3JlZW4oU0NSX1FFLDAsenosICAgICAgIiBwZXJjZW50IGRvbmUiKTsKLSAgICAgICAg fQotICAgICAgICBpZiAoYmN0dSA9PSA0KSB7ICAgICAgICAgICAgICAgIC8qIEJsb2NrIGNoZWNr ICovCi0gICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFUsMCwwTCwiIGJsb2NrIGNoZWNrOiAiKTsK LSAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBMLCJibGFuay1mcmVlLTIiKTsKLSAgICAg ICAgfSBlbHNlIHh4c2NyZWVuKFNDUl9RRSwwLChsb25nKWJjdHUsICAiIGJsb2NrIGNoZWNrIik7 Ci0gICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLChsb25nKXJwdGZsZywiIGNvbXByZXNzaW9uIik7 Ci0gICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLChsb25nKWVicWZsZywiIDh0aC1iaXQgcHJlZml4 aW5nIik7Ci0gICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLChsb25nKWxzY2FwdSwiIGxvY2tpbmcg c2hpZnRzIik7Ci0gICAgICAgIGlmICghbmV0d29yaykKLSAgICAgICAgICB4eHNjcmVlbihTQ1Jf UUUsMCwgc3BlZWQsICIgc3BlZWQiKTsKLSAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpCi0KLSAg ICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCxzcHNpeiwgIiBwYWNrZXQgbGVuZ3RoIik7Ci0gICAg ICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YgfHwgd2hhdCAmIFdfUkVNTykKLSAgICAgICAgICB4 eHNjcmVlbihTQ1JfUUUsMCx1cnBzaXosIiBwYWNrZXQgbGVuZ3RoIik7Ci0gICAgICAgIHh4c2Ny ZWVuKFNDUl9RRSwwLHdzbG90cywgICIgd2luZG93IHNsb3RzIik7Ci0gICAgICAgIGZkaXNwbGEg PSBvZmQ7IC8qIFtNRl0gUmVzdG9yZSBmaWxlIGRpc3BsYXkgdHlwZSAqLwotICAgICAgICByZXR1 cm4oMCk7Ci0KLSAgICAgIGNhc2UgJ0InOiBjYXNlICdiJzogY2FzZSAwMDAyOiAgICAvKiBDYW5j ZWwgYmF0Y2ggKi8KLSAgICAgIGNhc2UgJ1onOiBjYXNlICd6JzogY2FzZSAwMDMyOgotICAgICAg ICBjenNlZW4gPSAxOwotICAgICAgICBpbnRlcnJ1cHRlZCA9IDE7Ci0gICAgICAgIHh4c2NyZWVu KFNDUl9TVCxTVF9NU0csMGwsCi0gICAgICAgICAgICAgICAgICgoKHdoYXQgJiBXX1JFQ1YpICYm ICh3c2xvdHMgPiAxKSkgPwotICAgICAgICAgICAgICAgICAgIkNhbmNlbGluZyBiYXRjaCwgd2Fp dC4uLiAiIDoKLSAgICAgICAgICAgICAgICAgICJDYW5jZWxpbmcgYmF0Y2guLi4gIikKLSAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgICBjYXNlICdGJzogY2Fz ZSAnZic6IGNhc2UgMDAwNjogICAgLyogQ2FuY2VsIGZpbGUgKi8KLSAgICAgIGNhc2UgJ1gnOiBj YXNlICd4JzogY2FzZSAwMDMwOgotICAgICAgICBjeHNlZW4gPSAxOwotICAgICAgICBpbnRlcnJ1 cHRlZCA9IDE7Ci0gICAgICAgIHh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsCi0gICAgICAgICAg ICAgICAgICgoKHdoYXQgJiBXX1JFQ1YpICYmICh3c2xvdHMgPiAxKSkgPwotICAgICAgICAgICAg ICAgICAgIkNhbmNlbGluZyBmaWxlLCB3YWl0Li4uICIgOgotICAgICAgICAgICAgICAgICAgIkNh bmNlbGluZyBmaWxlLi4uICIpCi0gICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHJldHVybigw KTsKLQotICAgICAgY2FzZSAnUic6IGNhc2UgJ3InOiBjYXNlIDAwMjI6ICAgIC8qIFJlc2VuZCBw YWNrZXQgKi8KLSAgICAgIGNhc2UgMDAxNTogY2FzZSAwMDEyOgotI2lmZGVmIFNUUkVBTUlORwot ICAgICAgICBpZiAoc3RyZWFtaW5nKQotICAgICAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBT VFJFQU1JTkcgKi8KLSAgICAgICAgeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwiUmVzZW5kaW5n IHBhY2tldC4uLiAiKTsKLSAgICAgICAgbnVtZXJycysrOwotICAgICAgICByZXNlbmQod2lubG8p OwotICAgICAgICByZXR1cm4oMCk7Ci0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgICAgY2FzZSAn XDAzJzogICAgICAgICAgICAgICAgICAgICAgIC8qIFdlJ3JlIG5vdCB0cmFwcGluZyBeQydzIHdp dGggKi8KLSAgICAgICAgdHJhcCgwKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaWduYWxz LCBzbyB3ZSBjaGVjayBoZXJlICAgICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotICAg ICAgY2FzZSAnQyc6IGNhc2UgJ2MnOiAgICAgICAgICAgICAgIC8qIEN0cmwtQyAqLwotI2lmbmRl ZiBkYXRhZ2VuZXJhbAotICAgICAgY2FzZSAnXDAzJzoKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAq LwotCi0gICAgICBjYXNlICdFJzogY2FzZSAnZSc6ICAgICAgICAgICAgICAgLyogU2VuZCBlcnJv ciBwYWNrZXQgKi8KLSAgICAgIGNhc2UgMDAwNToKLSAgICAgICAgaW50ZXJydXB0ZWQgPSAxOwot ICAgICAgICByZXR1cm4oLTEpOwotCi0jaWZkZWYgQ0tfQ1VSU0VTCi0gICAgICBjYXNlIDAwMTQ6 ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3RybC1MIHRvIHJlZnJlc2ggc2NyZWVuICovCi0g ICAgICBjYXNlICdMJzogY2FzZSAnbCc6ICAgICAgICAgICAgICAgLyogQWxzbyBhY2NlcHQgTCAo dXBwZXIsIGxvd2VyKSAqLwotICAgICAgY2FzZSAwMDI3OiAgICAgICAgICAgICAgICAgICAgICAg IC8qIEN0cmwtVyBzeW5vbnltIGZvciBWTVMgJiBJbmdyZXMgKi8KLSAgICAgICAgcmVwYWludCA9 IDE7Ci0gICAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLQotICAgICAg Y2FzZSAnVCc6Ci0gICAgICBjYXNlICd0JzoJCQkJLyogVHVybiBvbiBkZWJ1Zy1sb2cgdGltZXN0 YW1wcyAqLwotI2lmZGVmIERFQlVHCi0JewotCSAgICBleHRlcm4gaW50IGRlYnRpbTsKLQkgICAg aWYgKGNoID09ICdUJykgewotCQlkZWJ0aW0gPSAxOwotCQl4eHNjcmVlbihTQ1JfU1QsU1RfTVNH LDBsLAotCQkJICJEZWJ1ZyB0aW1lc3RhbXBzIE9uLi4uICIpOwotCSAgICB9IGVsc2UgewotCQlk ZWJ0aW0gPSAxOwotCQl4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLAotCQkJICJEZWJ1ZyB0aW1l c3RhbXBzIE9mZi4uLiAiKTsKLQkgICAgfQotCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCXJldHVy bigwKTsKLQotICAgICAgY2FzZSAnRCc6Ci0jaWZkZWYgREVCVUcKLQlpZiAoIWRlYmxvZykgewot CSAgICBkZWJvcG4oImRlYnVnLmxvZyIsMCk7Ci0JICAgIGlmIChkZWJsb2cpIHsKLQkJeHhzY3Jl ZW4oU0NSX1NULFNUX01TRywwbCwiZGVidWcubG9nIG9wZW4uLi4gIik7Ci0JICAgIH0gZWxzZSB7 Ci0JCXh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsImRlYnVnLmxvZyBvcGVuIEZBSUxFRC4uLiAi KTsKLQkgICAgfQotCX0gZWxzZSB7Ci0JICAgIHh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsIkRl YnVnIGxvZyBPbi4uLiAiKTsKLQl9Ci0JaWYgKGRlYmxvZykKLQkgIGRlYm9rID0gMTsKLSNlbmRp ZiAvKiBERUJVRyAqLwotCXJldHVybigwKTsKLQotICAgICAgY2FzZSAnZCc6CQkJCS8qIFR1cm4g b2ZmIGRlYnVnZ2luZyAqLwotI2lmZGVmIERFQlVHCi0JaWYgKGRlYmxvZykKLQkgIHh4c2NyZWVu KFNDUl9TVCxTVF9NU0csMGwsIkRlYnVnIGxvZyBPZmYuLi4gIik7Ci0JZGVib2sgPSAwOwotI2Vu ZGlmIC8qIERFQlVHICovCi0JcmV0dXJuKDApOwotCi0gICAgICBkZWZhdWx0OiAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQW55dGhpbmcgZWxzZSwgcHJpbnQgbWVzc2FnZSAqLwotICAgICAg ICBpbnRtc2coMUwpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotfQotCi0vKiAgSSBOIFQg TSBTIEcgIC0tICBJc3N1ZSBtZXNzYWdlIGFib3V0IHRlcm1pbmFsIGludGVycnVwdHMgICovCi0K LVZPSUQKLSNpZmRlZiBDS19BTlNJQwotaW50bXNnKGxvbmcgbikKLSNlbHNlCi1pbnRtc2cobikg bG9uZyBuOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBpbnRtc2cgKi8gewotI2lmZGVmIENL X05FRURfU0lHCi0gICAgY2hhciBidWZbODBdOwotI2VuZGlmIC8qIENLX05FRURfU0lHICovCi0K LSAgICBpZiAoIWRpc3BsYSB8fCBxdWlldCkgICAgICAgICAgICAgICAvKiBOb3QgaWYgd2UncmUg YmVpbmcgcXVpZXQgKi8KLSAgICAgIHJldHVybjsKLSAgICBpZiAoc2VydmVyICYmICghc3J2ZGlz IHx8IG4gPiAtMUwpKSAvKiBTcGVjaWFsIGZvciBzZXJ2ZXIgKi8KLSAgICAgIHJldHVybjsKLSNp ZmRlZiBDS19ORUVEX1NJRwotICAgIGJ1ZlswXSA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAg IC8qIEtlZXAgY29tcGlsZXJzIGhhcHB5ICovCi0jZW5kaWYgLyogQ0tfTkVFRF9TSUcgKi8KLSNp Zm5kZWYgT1hPUwotI2lmZGVmIFNWT1JQT1NJWAotICAgIGNvbmNoaygpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENsZWFyIG91dCBwZW5kaW5nIGVzY2FwZS1zaWduYWxzICovCi0jZW5k aWYgLyogU1ZPUlBPU0lYICovCi0jZW5kaWYgLyogISBPWE9TICovCi0jaWZkZWYgVk1TCi0gICAg Y29ucmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU28gQ3RybC1DIHdpbGwgd29y ayAqLwotI2VuZGlmIC8qIFZNUyAqLwotICAgIGlmICgoIXNlcnZlciAmJiBuID09IDFMKSB8fCAo c2VydmVyICYmIG4gPCAwTCkpIHsKLQotI2lmZGVmIENLX05FRURfU0lHCi0gICAgICAgIGlmICh4 ZnJpbnQpIHsKLQkgICAgY2ttYWttc2coYnVmLAotCQkgICAgIDgwLAotCQkgICAgICJUeXBlIGVz Y2FwZSBjaGFyYWN0ZXIgKCIsCi0JCSAgICAgZGJjaHIoZXNjYXBlKSwKLQkJICAgICAiKSBmb2xs b3dlZCBieToiLAotCQkgICAgIE5VTEwKLQkJICAgICApOwotICAgICAgICAgICAgeHhzY3JlZW4o U0NSX1ROLDAsMGwsYnVmKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLX05FRURfU0lHICovCi0K LSAgICAgICAgaWYgKHhmcmludCkgewotICAgICAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RP X0spIHsKLSB4eHNjcmVlbihTQ1JfVE4sMCwwbCwiWCB0byBjYW5jZWwgZmlsZSwgIENSIHRvIHJl c2VuZCBjdXJyZW50IHBhY2tldCIpOwotIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCJaIHRvIGNhbmNl bCBncm91cCwgQSBmb3Igc3RhdHVzIHJlcG9ydCIpOwotIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCJF IHRvIHNlbmQgRXJyb3IgcGFja2V0LCBDdHJsLUMgdG8gcXVpdCBpbW1lZGlhdGVseTogIik7Ci0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBs LCJDdHJsLUMgdG8gY2FuY2VsIGZpbGUgdHJhbnNmZXI6ICIpOwotICAgICAgICAgICAgfQotICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1ROLDAsMGwsIlRyYW5zZmVy IGludGVycnVwdGlvbiBkaXNhYmxlZC4gIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB4 eHNjcmVlbihTQ1JfVFUsMCwwbCwiICIpOwotfQotCi0jaWZuZGVmIE5PRElTUExBWQotc3RhdGlj IGludCBuZXdkcHkgPSAwOyAgICAgICAgICAgICAgICAgIC8qIE5ldyBkaXNwbGF5IGZsYWcgKi8K LXN0YXRpYyBjaGFyIGZidWZbODBdOyAgICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSBidWZm ZXIgKi8KLXN0YXRpYyBjaGFyIGFidWZbODBdOyAgICAgICAgICAgICAgICAgICAvKiBBcy1uYW1l IGJ1ZmZlciAqLwotc3RhdGljIGNoYXIgYTJidWZbODBdOyAgICAgICAgICAgICAgICAgIC8qIFNl Y29uZCBBcy1uYW1lIGJ1ZmZlciAqLwotc3RhdGljIENLX09GRl9UIG9sZGZmYyA9IDBMOwotc3Rh dGljIENLX09GRl9UIGRvdHMgPSAwTDsKLXN0YXRpYyBpbnQgaHBvcyA9IDA7Ci0KLXN0YXRpYyBW T0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIFNlcmlhbCBvciBD UlQgZGlzcGxheSAqLwotZHB5aW5pdCgpIHsKLSAgICBpbnQgbSA9IDAsIG4gPSAwOwotICAgIGNo YXIgKiBzID0gIiI7Ci0KLSAgICBuZXdkcHkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiAgRG9uJ3QgZG8gdGhpcyBhZ2FpbiAqLwotICAgIG9sZGZmYyA9IChDS19PRkZfVCkwOwkJLyog IFJlc2V0IHRoaXMgKi8KLSAgICBkb3RzID0gKENLX09GRl9UKTA7CQkJLyogIGFuZCB0aGlzLi4g Ki8KLSAgICBvbGRjcHMgPSBjcHMgPSAwTDsKLQotICAgIGNvbm9sbCgiIik7CQkJCS8qIE5ldyBs aW5lICovCi0gICAgaWYgKHdoYXQgJiBXX1NFTkQpIHMgPSAiU2VuZGluZzogIjsJLyogQWN0aW9u ICovCi0gICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikgcyA9ICJSZWNlaXZpbmc6ICI7Ci0gICAg biA9IChpbnQpc3RybGVuKHMpICsgKGludClzdHJsZW4oZmJ1Zik7Ci0gICAgY29ub2woZmJ1Zik7 Ci0gICAgbSA9IChpbnQpc3RybGVuKGFidWYpICsgNDsKLSAgICBpZiAobiArIG0gPiBjbWRfY29s cykgewotICAgICAgICBjb25vbGwoIiIpOwotICAgICAgICBuID0gMDsKLSAgICB9IGVsc2UKLSAg ICAgIG4gKz0gbTsKLSAgICBpZiAoKmFidWYpIHsKLSAgICAgICAgY29ub2woIiA9PiAiKTsKLSAg ICAgICAgY29ub2woYWJ1Zik7Ci0gICAgfQotICAgIG0gPSAoaW50KXN0cmxlbihhMmJ1ZikgKyA0 OwotICAgIGlmIChuICsgbSA+IGNtZF9jb2xzKSB7Ci0gICAgICAgIGNvbm9sbCgiIik7Ci0gICAg ICAgIG4gPSAwOwotICAgIH0gZWxzZQotICAgICAgbiArPSBtOwotICAgIGlmICgqYTJidWYpIHsK LSAgICAgICAgY29ub2woIiA9PiAiKTsKLSAgICAgICAgY29ub2woYTJidWYpOwotICAgIH0KLSAg ICAqZmJ1ZiA9IE5VTDsgKmFidWYgPSBOVUw7ICphMmJ1ZiA9IE5VTDsKLSAgICBjb25vbGwoIiIp OwotICAgIGlmIChmc2l6ZSA+IChDS19PRkZfVCktMSkgewkJLyogU2l6ZSAqLwotICAgICAgICBz cHJpbnRmKGZidWYsIlNpemU6ICVzLCBUeXBlOiAiLGNrZnN0b2EoZnNpemUpKTsgLyogU0FGRSAo ODApICovCi0gICAgICAgIGNvbm9sKGZidWYpOyAqZmJ1ZiA9IE5VTDsKLSAgICB9IGVsc2UgY29u b2woIlNpemU6IHVua25vd24sIFR5cGU6ICIpOwotICAgIGlmIChiaW5hcnkpIHsJCQkvKiBUeXBl ICovCi0gICAgICAgIHN3aXRjaChiaW5hcnkpIHsKLSAgICAgICAgICAgICAgY2FzZSBYWUZUX0w6 IGNvbm9sKCJsYWJlbGVkIik7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFhZRlRfSTogY29u b2woImltYWdlIik7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFhZRlRfVTogY29ub2woImJp bmFyeSB1bmRlZmluZWQiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg ICAgICAgIGNhc2UgWFlGVF9COiBjb25vbCgiYmluYXJ5Iik7IGJyZWFrOwotICAgICAgICB9Ci0g ICAgfSBlbHNlIHsKLSNpZmRlZiBOT0NTRVRTCi0gICAgICAgIGNvbm9sKCJ0ZXh0Iik7Ci0jZWxz ZQotICAgICAgICBjb25vbCgidGV4dCwgIik7Ci0gICAgICAgIGlmICh0Y2hhcnNldCA9PSBUQ19U UkFOU1AgfHwgeGZyeGxhID09IDApIHsKLSAgICAgICAgICAgIGNvbm9sKCJ0cmFuc3BhcmVudCIp OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpIHsKLSAg ICAgICAgICAgICAgICBjb25vbChmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkKTsKLSAgICAgICAg ICAgICAgICBjb25vbCgiID0+ICIpOwotICAgICAgICAgICAgICAgIGNvbm9sKHRjc2luZm9bdGNo YXJzZXRdLmtleXdvcmQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBj b25vbCh0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkKTsKLSAgICAgICAgICAgICAgICBjb25vbCgi ID0+ICIpOwotICAgICAgICAgICAgICAgIGNvbm9sKGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQp OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIH0K LSNpZmRlZiBTVFJFQU1JTkcKLSAgICBpZiAoc3RyZWFtaW5nKQotICAgICAgY29ub2woIiwgU1RS RUFNSU5HIik7Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0gICAgY29ub2xsKCIiKTsKLQotICAg IGlmIChmZGlzcGxhID09IFhZRkRfUykgeyAgICAgICAgICAgIC8qIENSVCBmaWVsZCBoZWFkaW5n cyAqLwotLyoKLSAgRGVmaW5lIENLX0NQUyB0byBzaG93IGN1cnJlbnQgdHJhbnNmZXIgcmF0ZS4K LSAgTGVhdmUgaXQgdW5kZWZpbmVkIHRvIHNob3cgZXN0aW1hdGVkIHRpbWUgcmVtYWluaW5nLgot ICBFc3RpbWF0ZWQtdGltZS1yZW1haW5pbmcgY29kZSBmcm9tIEFuZHkgRnlmZSwgbm90IHRlc3Rl ZCBvbgotICBwYXRob2xvZ2ljYWwgY2FzZXMuCi0qLwotI2RlZmluZSBDS19DUFMKLQotI2lmZGVm IENLX0NQUwotICAgICAgICBjb25vbGwoIiAgICBGaWxlICAgUGVyY2VudCAgICAgICBQYWNrZXQi KTsKLSAgICAgICAgY29ub2xsKCIgICAgQnl0ZXMgIERvbmUgICAgIENQUyAgTGVuZ3RoIik7Ci0j ZWxzZQotICAgICAgICBjb25vbGwoIiAgICBGaWxlICAgUGVyY2VudCAgU2VjcyBQYWNrZXQiKTsK LSAgICAgICAgY29ub2xsKCIgICAgQnl0ZXMgIERvbmUgICAgIExlZnQgTGVuZ3RoIik7Ci0jZW5k aWYgLyogQ0tfQ1BTICovCi0gICAgICAgIG5ld2RweSA9IDA7Ci0gICAgfQotICAgIGhwb3MgPSAw OwotfQotCi0vKgotICBzaG93cGt0KGMpCi0gIGMgPSBjb21wbGV0aW9uIGNvZGU6IDAgbWVhbnMg dHJhbnNmZXIgaW4gcHJvZ3Jlc3MsIG5vbnplcm8gbWVhbnMgaXQncyBkb25lLgotICBTaG93IHRo ZSBmaWxlIHRyYW5zZmVyIHByb2dyZXNzIGNvdW50ZXIgYW5kIHBlcmhhcHMgdmVyYm9zZSBwYWNr ZXQgdHlwZS4KLSovCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLXNob3dwa3QoY2hhciBjKQotI2Vs c2UKLXNob3dwa3QoYykgY2hhciBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBzaG93cGt0 ICovIHsKLQotI2lmbmRlZiBHRlRJTUVSCi0gICAgbG9uZyBldDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRWxhcHNlZCB0aW1lLCBlbnRpcmUgYmF0Y2ggICovCi0jZW5kaWYgLyogR0ZU SU1FUiAqLwotICAgIENLX09GRl9UIGhvd2ZhcjsJCQkvKiBIb3cgZmFyIGludG8gZmlsZSAqLwot ICAgIGxvbmcgcGQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcmNlbnQgZG9uZSwg dGhpcyBmaWxlICAgICAqLwotICAgIGxvbmcgdHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFRyYW5zZmVyIHJhdGUsIGVudGlyZSBiYXRjaCAqLwotICAgIGxvbmcgcHM7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFBhY2tldCBzaXplLCBjdXJyZW50IHBhY2tldCAqLwotICAg IENLX09GRl9UIG15dGZjOwkJCS8qIExvY2FsIGNvcHkgb2YgYnl0ZSBjb3VudGVyICAqLwotCi0j aWZkZWYgR0ZUSU1FUgotICAgIENLRkxPQVQgdG5vdzsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0K LSAgICBpZiAobmV3ZHB5KSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQdXQgdXAgZmlsZW5h bWVzLCBldGMsICovCi0gICAgICBkcHlpbml0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyog aWYgdGhleSdyZSBub3QgdGhlcmUgYWxyZWFkeS4gKi8KLQotICAgIGhvd2ZhciA9IGZmYzsgICAg ICAgICAgICAgICAgICAgICAgIC8qIEhvdyBmYXIgKi8KLS8qCi0gIENhbGN1bGF0ZSBDUFMgcmF0 ZSBldmVuIGlmIG5vdCBkaXNwbGF5aW5nIG9uIHNjcmVlbiBmb3IgdXNlIGluIGZpbGUKLSAgdHJh bnNmZXIgc3RhdGlzdGljcy4KLSovCi0jaWZkZWYgR0ZUSU1FUgotICAgIHRub3cgPSBnZnRpbWVy KCk7ICAgICAgICAgICAgICAgICAgIC8qIFRpbWUgc2luY2Ugd2Ugc3RhcnRlZCAqLwotICAgIHBz ID0gKHdoYXQgJiBXX1JFQ1YpID8gcnBrdGwgOiBzcGt0bDsgLyogUGFja2V0IHNpemUgKi8KLSNp ZmRlZiBDS19SRVNFTkQKLSAgICBpZiAod2hhdCAmIFdfU0VORCkJCQkvKiBJbiBjYXNlIHdlIGRp ZG4ndCBzdGFydCBhdCAqLwotICAgICAgaG93ZmFyICs9IHNlbmRzdGFydDsgICAgICAgICAgICAg IC8qICB0aGUgYmVnaW5uaW5nLi4uICovCi0gICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikKLSAg ICAgIGhvd2ZhciArPSByc19sZW47Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0gICAgcGQgPSAt MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyY2VudCBkb25lLiAqLwotICAgIGlm IChjID09IE5VTCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFN0aWxsIGdvaW5nLCBmaWd1cmUg JSBkb25lICovCi0gICAgICAgIGlmICghZnNpemUpIHJldHVybjsJCS8qIEVtcHR5IGZpbGUsIGRv bid0IGJvdGhlciAqLwotICAgICAgICBwZCA9IChmc2l6ZSA+IDk5KSA/IChob3dmYXIgLyAoZnNp emUgLyAoQ0tfT0ZGX1QpMTAwKSkgOiAwOwotICAgICAgICBpZiAocGQgPiAxMDApIHBkID0gMTAw OyAgICAgICAgIC8qIEV4cGFuc2lvbiAqLwotICAgIH0KLSAgICBpZiAoYyAhPSBOVUwpCi0gICAg ICBpZiAoIWN4c2VlbiAmJiAhZGlzY2FyZCAmJiAhY3pzZWVuKQotICAgICAgICBwZCA9IDEwMDsg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgY29tcGxldGUsIHNvIDEwMCUuICovCi0KLSAg ICBteXRmYyA9IChwZCA8IDEwMCkgPyB0ZmMgKyBmZmMgOiB0ZmM7ICAgIC8qIENQUyAqLwotICAg IHRwID0gKGxvbmcpKCh0bm93ID4gMC4wKSA/IChDS0ZMT0FUKSBteXRmYyAvIHRub3cgOiAwKTsK LSAgICBpZiAoYyAmJiAodHAgPT0gMCkpCi0gICAgICB0cCA9IGZmYzsKLQotICAgIGNwcyA9IHRw OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBnbG9iYWwgdmFyaWFibGUgKi8KLSAg ICBpZiAoY3BzID4gcGVha2NwcyAmJiAgICAgICAgICAgICAgICAvKiBQZWFrIHRyYW5zZmVyIHJh dGUgKi8KLSAgICAgICAgICgod2hhdCAmIFdfU0VORCAmJiBzcGFja2V0cyA+IHdzbG90cyArIDQp IHx8Ci0JICAoISh3aGF0ICYgV19TRU5EKSAmJiBzcGFja2V0cyA+IDEwKSkpIHsKLSAgICAgICAg cGVha2NwcyA9IGNwczsKLSAgICB9Ci0KLSNlbHNlICAvKiBOb3QgR0ZUSU1FUiAqLwotCi0gICAg ZXQgPSBndGltZXIoKTsgICAgICAgICAgICAgICAgICAgICAgLyogRWxhcHNlZCB0aW1lICAqLwot ICAgIHBzID0gKHdoYXQgJiBXX1JFQ1YpID8gcnBrdGwgOiBzcGt0bDsgLyogUGFja2V0IGxlbmd0 aCAqLwotI2lmZGVmIENLX1JFU0VORAotICAgIGlmICh3aGF0ICYgV19TRU5EKQkJCS8qIEFuZCBp ZiB3ZSBkaWRuJ3Qgc3RhcnQgYXQgKi8KLSAgICAgIGhvd2ZhciArPSBzZW5kc3RhcnQ7ICAgICAg ICAgICAgICAvKiAgdGhlIGJlZ2lubmluZy4uLiAqLwotICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JF Q1YpCi0gICAgICBob3dmYXIgKz0gcnNfbGVuOwotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotICAg IHBkID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcmNlbnQgZG9uZS4gKi8K LSAgICBpZiAoYyA9PSBOVUwpIHsgICAgICAgICAgICAgICAgICAgICAvKiBTdGlsbCBnb2luZywg ZmlndXJlICUgZG9uZSAqLwotICAgICAgICBpZiAoZnNpemUgPT0gMEwpIHJldHVybjsgICAgICAg IC8qIEVtcHR5IGZpbGUsIGRvbid0IGJvdGhlciAqLwotICAgICAgICBwZCA9IChmc2l6ZSA+IDk5 KSA/IChob3dmYXIgLyAoZnNpemUgLyAoQ0tfT0ZGX1QpMTAwKSkgOiAwOwotICAgICAgICBpZiAo cGQgPiAxMDApIHBkID0gMTAwOyAgICAgICAgIC8qIEV4cGFuc2lvbiAqLwotICAgIH0KLSAgICBp ZiAoYyAhPSBOVUwpCi0gICAgICBpZiAoIWN4c2VlbiAmJiAhZGlzY2FyZCAmJiAhY3pzZWVuKQot ICAgICAgICBwZCA9IDEwMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgY29tcGxldGUs IHNvIDEwMCUuICovCi0KLQotI2lmbmRlZiBDS19DUFMKLS8qCi0gIGZzZWNzID0gdGltZSAoZnJv bSBndGltZXIpIHRoYXQgdGhpcyBmaWxlIHN0YXJ0ZWQgKHNldCBpbiBzZmlsZSgpKS4KLSAgUmF0 ZSBzbyBmYXIgaXMgZmZjIC8gKGV0IC0gZnNlY3MpLCAgZXN0aW1hdGVkIHRpbWUgZm9yIHJlbWFp bmluZyBieXRlcwotICBpcyAoZnNpemUgLSBmZmMpIC8gKGZmYyAvIChldCAtIGZzZWNzKSkuCi0q LwotICAgIHRwID0gKGhvd2ZhciA+IDApID8gKGZzaXplIC0gaG93ZmFyKSAqIChldCAtIGZzZWNz KSAvIGhvd2ZhciA6IDA7Ci0jZW5kaWYgLyogQ0tfQ1BTICovCi0KLSNpZmRlZiBDS19DUFMKLSAg ICBteXRmYyA9IChwZCA8IDEwMCkgPyB0ZmMgKyBmZmMgOiB0ZmM7Ci0gICAgdHAgPSAoZXQgPiAw KSA/IG15dGZjIC8gZXQgOiAwOwkvKiBUcmFuc2ZlciByYXRlICovCi0gICAgaWYgKGMgJiYgKHRw ID09IDApKQkJCS8qIFdhdGNoIG91dCBmb3Igc3Vic2Vjb25kIHRpbWVzICovCi0gICAgICAgIHRw ID0gZmZjOwotCi0gICAgY3BzID0gdHA7CQkJCS8qIFNldCBnbG9iYWwgdmFyaWFibGUgKi8KLSAg ICBpZiAoY3BzID4gcGVha2NwcyAmJiAgICAgICAgICAgICAgICAvKiBQZWFrIHRyYW5zZmVyIHJh dGUgKi8KLSAgICAgICAgICgod2hhdCAmIFdfU0VORCAmJiBzcGFja2V0cyA+IHdzbG90cyArIDQp IHx8Ci0JICAoISh3aGF0ICYgV19TRU5EKSAmJiBzcGFja2V0cyA+IDEwKSkpIHsKLSAgICAgICAg cGVha2NwcyA9IGNwczsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfQ1BTICovCi0KLSNlbmRpZiAvKiBH RlRJTUVSICovCi0KLSAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MpIHsgICAgICAgICAgICAvKiBD UlQgZGlzcGxheSAqLwotICAgICAgICBjaGFyIGJ1ZmZlclsxMjhdOwotCS8qIFRoZXNlIHNwcmlu dGZzIHNob3VsZCBiZSBzYWZlIHVudGlsIHdlIGhhdmUgMzItZGlnaXQgbnVtYmVycyAqLwotCi0g ICAgICAgIGlmIChwZCA+IC0xTCkKLSAgICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiVjJTlzJTVs ZCUlJThsZCU4bGQgIiwgQ1IsY2tmc3RvYShob3dmYXIpLHBkLHRwLHBzKTsKLSAgICAgICAgZWxz ZQotICAgICAgICAgIHNwcmludGYoYnVmZmVyLCAiJWMlOXMgICAgICAlOGxkJThsZCAiLCBDUixj a2ZzdG9hKGhvd2ZhciksdHAscHMpOwotICAgICAgICBjb25vbChidWZmZXIpOwotICAgICAgICBo cG9zID0gMzE7Ci0gICAgfSBlbHNlIGlmIChmZGlzcGxhID09IFhZRkRfUikgeyAgICAgLyogU0VS SUFMICovCi0gICAgICAgIGxvbmcgaSwgazsKLSAgICAgICAgaWYgKGhvd2ZhciAtIG9sZGZmYyA8 IDEwMjQpICAgICAvKiBVcGRhdGUgZGlzcGxheSBldmVyeSAxSyAqLwotICAgICAgICAgIHJldHVy bjsKLSAgICAgICAgb2xkZmZjID0gaG93ZmFyOyAgICAgICAgICAgICAgICAvKiBUaW1lIGZvciBu ZXcgZGlzcGxheSAqLwotICAgICAgICBrID0gKGhvd2ZhciAvIDEwMjRMKSAtIGRvdHM7ICAgIC8q IEhvdyBtYW55IEsgc28gZmFyICovCi0gICAgICAgIGZvciAoaSA9IDBMOyBpIDwgazsgaSsrKSB7 Ci0gICAgICAgICAgICBpZiAoaHBvcysrID4gKGNtZF9jb2xzIC0gMykpIHsgLyogVGltZSB0byB3 cmFwPyAqLwotICAgICAgICAgICAgICAgIGNvbm9sbCgiIik7Ci0gICAgICAgICAgICAgICAgaHBv cyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb25vYygnLicpOyAgICAgICAgICAg ICAgICAgLyogUHJpbnQgYSBkb3QgZm9yIHRoaXMgSyAqLwotICAgICAgICAgICAgZG90cysrOyAg ICAgICAgICAgICAgICAgICAgIC8qIENvdW50IGl0ICovCi0gICAgICAgIH0KLSAgICB9Ci19Ci0K LQotLyogIEMgSyBTIEMgUiBFIEUgTiAgLS0gIFNjcmVlbiBkaXNwbGF5IGZ1bmN0aW9uICAqLwot Ci0vKgotICBja3NjcmVlbihmLGMsbixzKQotICAgIGYgLSBhcmd1bWVudCBkZXNjcmlwdG9yCi0g ICAgYyAtIGEgY2hhcmFjdGVyIG9yIHNtYWxsIGludGVnZXIKLSAgICBuIC0gYSBsb25nIGludGVn ZXIKLSAgICBzIC0gYSBzdHJpbmcuCi0KLSAgYW5kIGdsb2JhbCBmZGlzcGxhID0gU0VUIEZJTEUg RElTUExBWSB2YWx1ZToKLQotICAgIFhZRkRfTiA9IE5PTkUKLSAgICBYWUZEX1IgPSBTRVJJQUw6 ICAgICBEb3RzLCBldGMsIHdvcmtzIG9uIGFueSB0ZXJtaW5hbCwgZXZlbiBoYXJkY29weS4KLSAg ICBYWUZEX1MgPSBDUlQ6ICAgICAgICBXb3JrcyBvbiBhbnkgQ1JULCB3cml0ZXMgb3ZlciBjdXJy ZW50IGxpbmUuCi0gICAgWFlGRF9DID0gRlVMTFNDUkVFTjogUmVxdWlyZXMgdGVybWluYWwtZGVw ZW5kZW50IHNjcmVlbiBjb250cm9sLgotICAgIFhZRkRfQiA9IEJSSUVGOiAgICAgIExpa2UgU0VS SUFMIGJ1dCBvbmx5IGZpbGVuYW1lICYgY29tcGxldGlvbiBzdGF0dXMuCi0gICAgWFlGRF9HID0g R1VJOyAgICAgICAgV2luZG93cyBHVUksIHNhbWUgYmVoYXZpb3IgYXMgRlVMTFNDUkVFTgotKi8K LVZPSUQKLSNpZmRlZiBDS19BTlNJQwotY2tzY3JlZW4oaW50IGYsIGNoYXIgYyxDS19PRkZfVCBu LGNoYXIgKnMpCi0jZWxzZQotY2tzY3JlZW4oZixjLG4scykgaW50IGY7IGNoYXIgYzsgQ0tfT0ZG X1QgbjsgY2hhciAqczsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogc2NyZWVuICovIHsKLSAg ICBjaGFyIGJ1Zls4MF07Ci0gICAgaW50IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTGVuZ3RoIG9mIHN0cmluZyAqLwotI2lmZGVmIFVOSVgKLSNpZm5kZWYgTk9KQwotICAgIGlu dCBvYmc7Ci1fUFJPVE9UWVAoIFZPSUQgY29uYmd0LCAoaW50KSApOwotI2VuZGlmIC8qIE5PSkMg Ki8KLSNlbmRpZiAvKiBVTklYICovCi0gICAgaW50IGZ0cCA9IDA7Ci0KLSAgICBmdHAgPSAod2hh dCAmIFdfRlRQKSA/IDEgOiAwOwkvKiBGVFAgb3IgS2VybWl0PyAqLwotCi0gICAgaWYgKCFsb2Nh bCAmJiAhZnRwKQkJCS8qIEluIHJlbW90ZSBtb2RlIC0gZG9uJ3QgZG8gdGhpcyAqLwotICAgICAg cmV0dXJuOwotCi0gICAgaWYgKCFzKSBzID0gIiI7Ci0KLSAgICBpZiAoIWZ4ZF9pbml0ZWQpICAg ICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGlmIG5lY2Vzc2FyeSAqLwotICAgICAgZnhk aW5pdChmZGlzcGxhKTsKLQotI2lmZGVmIFVOSVgKLSNpZm5kZWYgTk9KQwotICAgIG9iZyA9IGJh Y2tncmQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXZpb3VzIGJhY2tncm91bmQgc3RhdHVz ICovCi0gICAgY29uYmd0KDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VlIGlmIHJ1 bm5pbmcgaW4gYmFja2dyb3VuZCAqLwotICAgIGlmICghYmFja2dyZCAmJiBvYmcpIHsgICAgICAg ICAgICAgIC8qIEp1c3QgY2FtZSBpbnRvIGZvcmVncm91bmQ/ICovCi0gICAgICAgIGNvbmNiKChj aGFyKWVzY2FwZSk7ICAgICAgICAgICAgLyogUHV0IGNvbnNvbGUgYmFjayBpbiBDQlJFQUsgbW9k ZSAqLwotICAgICAgICBzZXRpbnQoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUg aW50ZXJydXB0cyAqLwotICAgIH0KLSNlbmRpZiAvKiBOT0pDICovCi0jZW5kaWYgLyogVU5JWCAq LwotCi0gICAgaWYgKChmICE9IFNDUl9XTSkgJiYgKGYgIT0gU0NSX0VNKSkgLyogQWx3YXlzIHVw ZGF0ZSB3YXJuaW5ncyAmIGVycm9ycyAqLwotICAgICAgaWYgKCFkaXNwbGEgfHwKLSAgICAgICAg ICAoYmFja2dyZCAmJiBiZ3NldCkgfHwKLSAgICAgICAgICBmZGlzcGxhID09IFhZRkRfTiB8fAot ICAgICAgICAgIChzZXJ2ZXIgJiYgIXNydmRpcykKLSAgICAgICAgICApCi0gICAgICAgIHJldHVy bjsKLQotI2lmZGVmIFZNUwotICAgIGlmIChmID09IFNDUl9GTikgICAgICAgICAgICAgICAgICAg IC8qIFZNUyAtIHNob3J0ZW4gdGhlIG5hbWUgKi8KLSAgICAgIHMgPSB6cmVsbmFtZShzLHpndGRp cigpKTsKLSNlbmRpZiAvKiBWTVMgKi8KLQotICAgIGlmIChkZXN0ID09IERFU1RfUykgICAgICAg ICAgICAgICAgIC8qIFNFVCBERVNUSU5BVElPTiBTQ1JFRU4gKi8KLSAgICAgIHJldHVybjsgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAgd291bGQgaW50ZXJmZXJlLi4uICovCi0KLSNpZmRl ZiBLVUkKLSAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0cpIHsgICAgICAgICAgICAvKiBJZiBndWkg ZGlzcGxheSBzZWxlY3RlZCAqLwotICAgICAgICBzY3JlZW5nKGYsYyxuLHMpOyAgICAgICAgICAg ICAgIC8qIGNhbGwgdGhlIGd1aSB2ZXJzaW9uICovCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j ZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ0tfQ1VSU0VTCi0gICAgaWYgKGZkaXNwbGEgPT0gWFlG RF9DKSB7ICAgICAgICAgICAgLyogSWYgZnVsbHNjcmVlbiBkaXNwbGF5IHNlbGVjdGVkICovCi0g ICAgICAgIHNjcmVlbmMoZixjLG4scyk7ICAgICAgICAgICAgICAgLyogY2FsbCB0aGUgZnVsbHNj cmVlbiB2ZXJzaW9uICovCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfQ1VS U0VTICovCi0KLSAgICBsZW4gPSAoaW50KXN0cmxlbihzKTsgICAgICAgICAgICAgICAvKiBMZW5n dGggb2Ygc3RyaW5nICovCi0KLSAgICBzd2l0Y2ggKGYpIHsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBIYW5kbGUgb3VyIGZ1bmN0aW9uIGNvZGUgKi8KLSAgICAgIGNhc2UgU0NSX0ZOOiAgICAg ICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBY WUZEX0IpIHsKLSNpZmRlZiBORVdGVFAKLQkgICAgaWYgKGZ0cCkKLQkgICAgICBwcmludGYoIiAl cyAlcyIsIHdoYXQgJiBXX1NFTkQgPyAiUFVUIiA6ICJHRVQiLCBzKTsKLQkgICAgZWxzZQotI2Vu ZGlmIC8qIE5FV0ZUUCAqLwotCSAgICAgIHByaW50ZigiICVzICVzIiwgd2hhdCAmIFdfU0VORCA/ ICJTRU5EIiA6ICJSRUNWIiwgcyk7Ci0jaWZkZWYgVU5JWAotICAgICAgICAgICAgZmZsdXNoKHN0 ZG91dCk7Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9 Ci0jaWZkZWYgTUFDCi0gICAgICAgIGNvbm9sbCgiIik7IGNvbm9sKHMpOyBjb25vYyhTUCk7IGhw b3MgPSBsZW4gKyAxOwotI2Vsc2UKLSAgICAgICAgY2tzdHJuY3B5KGZidWYscyw4MCk7Ci0gICAg ICAgIGFidWZbMF0gPSBhMmJ1ZlswXSA9IE5VTDsKLSAgICAgICAgbmV3ZHB5ID0gMTsgICAgICAg ICAgICAgICAgICAgICAvKiBOZXcgZmlsZSBzbyByZWZyZXNoIGRpc3BsYXkgKi8KLSNlbmRpZiAv KiBNQUMgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9BTjogICAgICAgICAg ICAgICAgICAgICAgLyogQXMtbmFtZSAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0Ip IHsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBwcmludGYoIihhcyAlcykgIixzKTsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNpZmRl ZiBNQUMKLSAgICAgICAgaWYgKGhwb3MgKyBsZW4gPiA3NSkgeyBjb25vbGwoIiIpOyBocG9zID0g MDsgfQotICAgICAgICBjb25vbCgiPT4gIik7IGNvbm9sKHMpOwotICAgICAgICBpZiAoKGhwb3Mg Kz0gKGxlbiArIDMpKSA+IDc4KSB7IGNvbm9sbCgiIik7IGhwb3MgPSAwOyB9Ci0jZWxzZQotICAg ICAgICBpZiAoYWJ1ZlswXSkgewotICAgICAgICAgICAgY2tzdHJuY3B5KGEyYnVmLHMsODApOwot ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2tzdHJuY3B5KGFidWYscyw4MCk7Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBNQUMgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFND Ul9GUzogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZS1zaXplICovCi0gICAgICAgIGlmIChm ZGlzcGxhID09IFhZRkRfQikgewotICAgICAgICAgICAgcHJpbnRmKCIgKCVzKSAoJXMgYnl0ZSVz KSIsCi0jaWZkZWYgTk9JQ1AKLSAgICAgICAgICAgICAgICAgICAoYmluYXJ5ID8gImJpbmFyeSIg OiAidGV4dCIpCi0jZWxzZQotICAgICAgICAgICAgICAgICAgIGdmbW9kZShiaW5hcnksMCkKLSNl bmRpZiAvKiBOT0lDUCAqLwotICAgICAgICAgICAgICAgICAgICwgY2tmc3RvYShuKSwgbiA9PSAx ID8gIiIgOiAicyIpOwotI2lmZGVmIFVOSVgKLSAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwot I2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2lmZGVm IE1BQwotICAgICAgICBzcHJpbnRmKGJ1ZiwiLCBTaXplOiAlcyIsY2tmc3RvYShuKSk7ICBjb25v bGwoYnVmKTsgIGhwb3MgPSAwOwotI2VuZGlmIC8qIE1BQyAqLwotICAgICAgICByZXR1cm47Ci0K LSAgICAgIGNhc2UgU0NSX1hEOiAgICAgICAgICAgICAgICAgICAgICAvKiBYLXBhY2tldCBkYXRh ICovCi0gICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikKLSAgICAgICAgICByZXR1cm47Ci0j aWZkZWYgTUFDCi0gICAgICAgIGNvbm9sbCgiIik7IGNvbm9sbChzKTsgaHBvcyA9IDA7Ci0jZWxz ZQotICAgICAgICBja3N0cm5jcHkoZmJ1ZixzLDgwKTsKLSAgICAgICAgYWJ1ZlswXSA9IGEyYnVm WzBdID0gTlVMOwotI2VuZGlmIC8qIE1BQyAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNh c2UgU0NSX1NUOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHN0YXR1cyAqLwotICAgICAg ICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICBjYXNlIFNUX09LOiAgICAgICAgICAgICAgICAgICAv KiBUcmFuc2ZlcnJlZCBPSyAqLwotICAgICAgICAgICAgc2hvd3BrdCgnWicpOyAgICAgICAgICAg ICAgIC8qIFVwZGF0ZSBudW1iZXJzIG9uZSBsYXN0IHRpbWUgKi8KLSAgICAgICAgICAgIGlmIChm ZGlzcGxhID09IFhZRkRfQikgewotI2lmZGVmIEdGVElNRVIKLQkJaWYgKGZweGZzZWNzKQotCQkg IHByaW50ZigiOiBPSyAoJTAuM2Ygc2VjLCAlbGQgY3BzKSIsZnB4ZnNlY3MsCi0JCQkgKGxvbmcp KChDS0ZMT0FUKWZmYyAvIGZweGZzZWNzKSk7Ci0jZWxzZQotCQlpZiAoeGZzZWNzKQotCQkgIHBy aW50ZigiOiBPSyAoJWQgc2VjLCAlbGQgY3BzKSIseGZzZWNzLGZmYy94ZnNlY3MpOwotI2VuZGlm IC8qIEdGVElNRVIgKi8KLQkJcHJpbnRmKCJcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoaHBvcyArPSA1KSA+IDc4KSBjb25vbGwo IiIpOyAvKiBXcmFwIHNjcmVlbiBsaW5lLiAqLwotICAgICAgICAgICAgY29ub2xsKCIgW09LXSIp OyBocG9zID0gMDsgIC8qIFByaW50IE9LIG1lc3NhZ2UuICovCi0gICAgICAgICAgICBpZiAoZmRp c3BsYSA9PSBYWUZEX1MpIHsgICAgLyogV2UgZGlkbid0IHNob3cgWiBwYWNrZXQgd2hlbiAqLwot ICAgICAgICAgICAgICAgIGNvbm9jKCdaJyk7ICAgICAgICAgICAgIC8qIGl0IGNhbWUsIHNvIHNo b3cgaXQgbm93LiAqLwotICAgICAgICAgICAgICAgIGhwb3MgPSAxOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9ESVNDOiAgICAgICAgICAg ICAgICAgLyogIERpc2NhcmRlZCAqLwotICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9C KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI6IERJU0NBUkRFRFxuIik7Ci0gICAgICAgICAg ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChocG9zICs9IDEy KSA+IDc4KSBjb25vbGwoIiIpOwotICAgICAgICAgICAgY29ub2xsKCIgW2Rpc2NhcmRlZF0iKTsg aHBvcyA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX0lOVDog ICAgICAgICAgICAgICAgICAvKiAgSW50ZXJydXB0ZWQgKi8KLSAgICAgICAgICAgIGlmIChmZGlz cGxhID09IFhZRkRfQikgewotICAgICAgICAgICAgICAgIHByaW50ZigiOiBJTlRFUlJVUFRFRFxu Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg aWYgKChocG9zICs9IDE0KSA+IDc4KSBjb25vbGwoIiIpOwotICAgICAgICAgICAgY29ub2xsKCIg W2ludGVycnVwdGVkXSIpOyBocG9zID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLQotCSAgY2Fz ZSBTVF9TSU06Ci0gICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLQkJaWYgKG4g PT0gU0tQX1hOWCkKLQkJICBwcmludGYoIjogV09VTEQgQkUgVFJBTlNGRVJSRUQgKE5ldyBmaWxl KVxuIik7Ci0JCWVsc2UgaWYgKG4gPT0gU0tQX1hVUCkKLQkJICBwcmludGYoIjogV09VTEQgQkUg VFJBTlNGRVJSRUQgKFJlbW90ZSBmaWxlIG9sZGVyKVxuIik7Ci0JCWVsc2UgaWYgKG4gPT0gU0tQ X1NJTSkKLQkJICBwcmludGYoIjogV09VTEQgQkUgVFJBTlNGRVJSRURcbiIpOwotCQllbHNlIGlm IChuID4gMCAmJiBuIDwgbnNrcmVhc29uKQotCQkgIHByaW50ZigiOiBTS0lQUEVEICglcylcbiIs c2tyZWFzb25bbl0pOwotCQllbHNlCi0JCSAgcHJpbnRmKCI6IFNLSVBQRURcbiIpOwotICAgICAg ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZmRpc3BsYSA9PSBYWUZE X1MpIHsKLSAgICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MgJiYgZmJ1ZlswXSkg eyAvKiBDUlQgZGlzcGxheSAqLwotICAgICAgICAgICAgICAgICAgICBjb25vbGwoIiIpOyAgICAg ICAgIC8qIE5ldyBsaW5lICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5E KSBjb25vbCgiV291bGQgU2VuZDogIik7IC8qIEFjdGlvbiAqLwotICAgICAgICAgICAgICAgICAg ICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKSBjb25vbCgiV291bGQgUmVjZWl2ZTogIik7Ci0gICAg ICAgICAgICAgICAgICAgIGNvbm9sKGZidWYpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKmFi dWYpIGNvbm9sKCIgPT4gIik7IGNvbm9sKGFidWYpOyAvKiBOYW1lcyAqLwotICAgICAgICAgICAg ICAgICAgICBpZiAoKmEyYnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChhMmJ1Zik7IC8qIE5hbWVz ICovCi0gICAgICAgICAgICAgICAgICAgICpmYnVmID0gTlVMOyAqYWJ1ZiA9IE5VTDsgKmEyYnVm ID0gTlVMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb25vbGwoIiBbc2lt dWxhdGVkXSIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGlmICgoaHBvcyArPSAxMCkgPiA3OCkgY29ub2xsKCIiKTsKLSAgICAgICAgICAgIGNv bm9sKCIgW3NpbXVsYXRlZF0iKTsgaHBvcyA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAg ICAgICAgICBjYXNlIFNUX1NLSVA6ICAgICAgICAgICAgICAgICAvKiAgU2tpcHBlZCAqLwotICAg ICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0JCWlmIChuID09IFNLUF9YTlgpCi0J CSAgcHJpbnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVSUkVEIChOZXcgZmlsZSlcbiIpOwotCQllbHNl IGlmIChuID09IFNLUF9YVVApCi0JCSAgcHJpbnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVSUkVEIChS ZW1vdGUgZmlsZSBvbGRlcilcbiIpOwotCQllbHNlIGlmIChuID09IFNLUF9TSU0pCi0JCSAgcHJp bnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVSUkVEXG4iKTsKLQkJZWxzZSBpZiAobiA+IDAgJiYgbiA8 IG5za3JlYXNvbikKLQkJICBwcmludGYoIjogU0tJUFBFRCAoJXMpXG4iLHNrcmVhc29uW25dKTsK LQkJZWxzZQotCQkgIHByaW50ZigiOiBTS0lQUEVEXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1 cm47Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7Ci0gICAgICAg ICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TICYmIGZidWZbMF0pIHsgLyogQ1JUIGRpc3Bs YXkgKi8KLSAgICAgICAgICAgICAgICAgICAgY29ub2xsKCIiKTsgICAgICAgICAvKiBOZXcgbGlu ZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkgY29ub2woIlNlbmRp bmc6ICIpOyAvKiBBY3Rpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2hhdCAm IFdfUkVDVikgY29ub2woIlJlY2VpdmluZzogIik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbm9s KGZidWYpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKmFidWYpIGNvbm9sKCIgPT4gIik7IGNv bm9sKGFidWYpOyAvKiBOYW1lcyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoKmEyYnVmKSBj b25vbCgiID0+ICIpOyBjb25vbChhMmJ1Zik7IC8qIE5hbWVzICovCi0gICAgICAgICAgICAgICAg ICAgICpmYnVmID0gTlVMOyAqYWJ1ZiA9IE5VTDsgKmEyYnVmID0gTlVMOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBjb25vbGwoIiBbc2tpcHBlZF0iKTsKLSAgICAgICAgICAg ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGhwb3MgKz0gMTAp ID4gNzgpIGNvbm9sbCgiIik7Ci0JICAgIGNvbm9sKCIgIik7IGNvbm9sKGZidWYpOwotICAgICAg ICAgICAgY29ub2xsKCIgW3NraXBwZWRdIik7IGhwb3MgPSAwOwotICAgICAgICAgICAgcmV0dXJu OwotCi0gICAgICAgICAgY2FzZSBTVF9FUlI6ICAgICAgICAgICAgICAgICAgLyogRXJyb3IgKi8K LSAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgewotICAgICAgICAgICAgICAgIHBy aW50ZigiOiBFUlJPUjogJXNcbiIscyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgY29ub2xsKCIiKTsKLSAgICAgICAgICAgIGNvbm9sKCJFcnJv cjogIik7IGNvbm9sbChzKTsgaHBvcyA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg ICAgICBjYXNlIFNUX01TRzogICAgICAgICAgICAgICAgICAvKiBNZXNzYWdlICovCi0jaWZkZWYg TkVXRlRQCi0gICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLSAgICAgICAgICAg ICAgICBpZiAoZnRwICYmIGZ0cF9kZWIpCi0JCSAgcHJpbnRmKCI6IE1FU1NBR0U6ICVzXG4iLHMp OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBORVdG VFAgKi8KLSAgICAgICAgICAgIGNvbm9sbCgiIik7Ci0gICAgICAgICAgICBjb25vbCgiTWVzc2Fn ZTogIik7Ci0gICAgICAgICAgICBjb25vbGwocyk7Ci0gICAgICAgICAgICBocG9zID0gMDsKLSAg ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfUkVGVTogICAgICAgICAgICAg ICAgIC8qIFJlZnVzZWQgKi8KLSAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgewot ICAgICAgICAgICAgICAgIHByaW50ZigiOiBSRUZVU0VEXG4iKTsKLSAgICAgICAgICAgICAgICBy ZXR1cm47Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7Ci0gICAg ICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TICYmIGZidWZbMF0pIHsgLyogQ1JUIGRp c3BsYXkgKi8KLSAgICAgICAgICAgICAgICAgICAgY29ub2xsKCIiKTsgICAgICAgICAvKiBOZXcg bGluZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkgY29ub2woIlNl bmRpbmc6ICIpOyAvKiBBY3Rpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2hh dCAmIFdfUkVDVikgY29ub2woIlJlY2VpdmluZzogIik7Ci0gICAgICAgICAgICAgICAgICAgIGNv bm9sKGZidWYpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKmFidWYpIGNvbm9sKCIgPT4gIik7 IGNvbm9sKGFidWYpOyAgICAgIC8qIE5hbWVzICovCi0gICAgICAgICAgICAgICAgICAgIGlmICgq YTJidWYpIGNvbm9sKCIgPT4gIik7IGNvbm9sKGEyYnVmKTsgICAgLyogTmFtZXMgKi8KLSAgICAg ICAgICAgICAgICAgICAgKmZidWYgPSBOVUw7ICphYnVmID0gTlVMOyAqYTJidWYgPSBOVUw7Ci0g ICAgICAgICAgICAgICAgICAgIGNvbm9sbCgiIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGNvbm9sKCJSZWZ1c2VkOiAiKTsgY29ub2xsKHMpOwotICAgICAgICAgICAgICAg IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbm9sbCgiIik7Ci0gICAgICAg ICAgICBjb25vbCgiUmVmdXNlZDogIik7IGNvbm9sbChzKTsgaHBvcyA9IDA7Ci0gICAgICAgICAg ICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX0lOQzogICAgICAgICAgICAgICAgICAvKiBJ bmNvbXBsZXRlICovCi0gICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLSAgICAg ICAgICAgICAgICBwcmludGYoIjogSU5DT01QTEVURVxuIik7Ci0gICAgICAgICAgICAgICAgcmV0 dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChocG9zICs9IDEyKSA+IDc4KSBj b25vbGwoIiIpOwotICAgICAgICAgICAgY29ub2xsKCIgW2luY29tcGxldGVdIik7IGhwb3MgPSAw OwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg IGNvbm9sbCgiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBzdGF0dXMgKioqIik7Ci0gICAg ICAgICAgICBocG9zID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0jaWZk ZWYgTUFDCi0gICAgICBjYXNlIFNDUl9QTjogICAgICAgICAgICAgICAgICAgICAgLyogUGFja2V0 IG51bWJlciAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLSAgICAgICAgICAg IHJldHVybjsKLSAgICAgICAgfQotCWNrbWFrbXNnKGJ1Ziw4MCxzLCI6ICIsY2tsdG9hKG4pLE5V TEwpOwotICAgICAgICBjb25vbChidWYpOyBocG9zICs9IChpbnQpc3RybGVuKGJ1Zik7IHJldHVy bjsKLSNlbmRpZiAvKiBNQUMgKi8KLQotICAgICAgY2FzZSBTQ1JfUFQ6ICAgICAgICAgICAgICAg ICAgICAgIC8qIFBhY2tldCB0eXBlIG9yIHBzZXVkb3R5cGUgKi8KLSAgICAgICAgaWYgKGZkaXNw bGEgPT0gWFlGRF9CKQotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGMgPT0gJ1knKSBy ZXR1cm47ICAgICAgICAgICAvKiBEb24ndCBib3RoZXIgd2l0aCBBQ0tzICovCi0gICAgICAgIGlm IChjID09ICdEJykgeyAgICAgICAgICAgICAgICAgLyogSW4gZGF0YSB0cmFuc2ZlciBwaGFzZSwg Ki8KLSAgICAgICAgICAgIHNob3dwa3QoTlVMKTsgICAgICAgICAgICAgICAvKiBzaG93IHByb2dy ZXNzLiAqLwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0jaWZuZGVmIEFNSUdBCi0g ICAgICAgIGlmIChocG9zKysgPiA3NykgeyAgICAgICAgICAgICAgLyogSWYgbmVhciByaWdodCBt YXJnaW4sICovCi0gICAgICAgICAgICBjb25vbGwoIiIpOyAgICAgICAgICAgICAgICAgLyogU3Rh cnQgbmV3IGxpbmUgKi8KLSAgICAgICAgICAgIGhwb3MgPSAwOyAgICAgICAgICAgICAgICAgICAv KiBhbmQgcmVzZXQgY291bnRlci4gKi8KLSAgICAgICAgfQotI2VuZGlmIC8qIEFNSUdBICovCi0g ICAgICAgIGlmIChjID09ICdaJyAmJiBmZGlzcGxhID09IFhZRkRfUykKLSAgICAgICAgICByZXR1 cm47Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBjb25vYyhjKTsgICAgICAgICAgICAgICAgICAg ICAvKiBEaXNwbGF5IHRoZSBwYWNrZXQgdHlwZS4gKi8KLSNpZmRlZiBBTUlHQQotICAgICAgICBp ZiAoYyA9PSAnRycpIGNvbm9sbCgiIik7ICAgICAgIC8qIE5ldyBsaW5lIGFmdGVyIEcgcGFja2V0 cyAqLwotI2VuZGlmIC8qIEFNSUdBICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBT Q1JfVEM6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGNvbXBsZXRlICovCi0g ICAgICAgIGlmICh4ZnJiZWwpIGJsZWVwKEJQX05PVEUpOwotICAgICAgICBpZiAoZmRpc3BsYSA9 PSBYWUZEX0IpIHsgICAgICAgIC8qIEJyaWVmIGRpc3BsYXkuLi4gKi8KLSAgICAgICAgICAgIGlm IChmaWxjbnQgPiAxKSB7Ci0gICAgICAgICAgICAgICAgbG9uZyBmeDsKLSAgICAgICAgICAgICAg ICBmeCA9IGZpbGNudCAtIGZpbHJlajsKLSAgICAgICAgICAgICAgICBwcmludGYoIiBTVU1NQVJZ OiAlbGQgZmlsZSVzIiwgZngsICgoZnggPT0gMSkgPyAiIiA6ICJzIikpOwotICAgICAgICAgICAg ICAgIHByaW50ZigiLCAlcyBieXRlJXMiLCBja2ZzdG9hKHRmYyksICgodGZjID09IDEpID8gIiIg OiAicyIpKTsKLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIsICUwLjNm IHNlYywgJWxkIGNwcyIsIGZwdHNlY3MsIHRmY3BzKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAg cHJpbnRmKCIsICVsZCBzZWMsICVsZCBjcHMiLCB0c2VjcywgdGZjcHMpOwotI2VuZGlmIC8qIEdG VElNRVIgKi8KLSAgICAgICAgICAgICAgICBwcmludGYoIi5cbiIpOwotICAgICAgICAgICAgfQot ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29ub2xsKCIiKTsKLSAgICAgICAgfQotI2lm ZGVmIFVOSVgKLSAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogVU5JWCAqLwotICAg ICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0VNOiAgICAgICAgICAgICAgICAgICAgICAv KiBFcnJvciBtZXNzYWdlICovCi0gICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgewotICAg ICAgICAgICAgcHJpbnRmKCIgRVJST1I6ICVzXG4iLHMpOwotICAgICAgICAgICAgcmV0dXJuOwot ICAgICAgICB9Ci0gICAgICAgIGNvbm9sbCgiIik7IGNvbm9jKCc/Jyk7IGNvbm9sbChzKTsgaHBv cyA9IDA7IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfV006ICAgICAgICAgICAgICAgICAgICAg IC8qIFdhcm5pbmcgbWVzc2FnZSAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsK LSAgICAgICAgICAgIHByaW50ZigiIFdBUk5JTkc6ICVzXG4iLHMpOwotICAgICAgICAgICAgcmV0 dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNvbm9sbCgiIik7IGNvbm9sbChzKTsgaHBvcyA9IDA7 IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfTVM6ICAgICAgICAgICAgICAgICAgICAgIC8qIE1l c3NhZ2UgZnJvbSBvdGhlciBLZXJtaXQgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9C KSB7Ci0gICAgICAgICAgICBwcmludGYoIiBNRVNTQUdFOiAlc1xuIixzKTsKLSAgICAgICAgICAg IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb25vbGwoIiIpOyBjb25vbGwocyk7IGhwb3Mg PSAwOyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX1RVOiAgICAgICAgICAgICAgICAgICAgICAv KiBVbmRlbGltaXRlZCB0ZXh0ICovCi0gICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikKLSAg ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgoaHBvcyArPSBsZW4pID4gNzcpIHsgY29ub2xs KCIiKTsgaHBvcyA9IGxlbjsgfQotICAgICAgICBjb25vbChzKTsgcmV0dXJuOwotCi0gICAgICBj YXNlIFNDUl9UTjogICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgYmVn aW5uaW5nICovCi0gICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikKLSAgICAgICAgICByZXR1 cm47Ci0gICAgICAgIGNvbm9sbCgiIik7IGNvbm9sKHMpOyBocG9zID0gbGVuOyByZXR1cm47Ci0K LSAgICAgIGNhc2UgU0NSX1RaOiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRl ZCBhdCBlbmQgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKQotICAgICAgICAgIHJl dHVybjsKLSAgICAgICAgaWYgKChocG9zICs9IGxlbikgPiA3NykgeyBjb25vbGwoIiIpOyBocG9z ID0gbGVuOyB9Ci0gICAgICAgIGNvbm9sbChzKTsgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9R RTogICAgICAgICAgICAgICAgICAgICAgLyogUXVhbnRpdHkgZXF1YWxzICovCi0gICAgICAgIGlm IChmZGlzcGxhID09IFhZRkRfQikKLSAgICAgICAgICByZXR1cm47Ci0JY2ttYWttc2coYnVmLDgw LHMsIjogIixja2x0b2EobiksTlVMTCk7Ci0gICAgICAgIGNvbm9sbChidWYpOyBocG9zID0gMDsg cmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9DVzogICAgICAgICAgICAgICAgICAgICAgLyogQ2xv c2UgZnVsbHNjcmVlbiB3aW5kb3cgKi8KLSAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBObyB3aW5kb3cgdG8gY2xvc2UgKi8KLQotICAgICAgY2FzZSBTQ1JfQ0Q6Ci0g ICAgICAgIHJldHVybjsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgY29ub2xsKCIqKiogc2Ny ZWVuKCkgY2FsbGVkIHdpdGggYmFkIG9iamVjdCAqKioiKTsKLSAgICAgICAgaHBvcyA9IDA7Ci0g ICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0jZW5kaWYgLyogTk9ESVNQTEFZICovCi0KLS8qICBF IFIgTSBTIEcgIC0tICBOb25mYXRhbCBlcnJvciBtZXNzYWdlICAqLwotCi0vKiBTaG91bGQgYmUg dXNlZCBvbmx5IGZvciBwcmludGluZyB0aGUgbWVzc2FnZSB0ZXh0IGZyb20gYW4gRXJyb3IgcGFj a2V0LiAqLwotCi1WT0lECi1lcm1zZyhtc2cpIGNoYXIgKm1zZzsgeyAgICAgICAgICAgICAgICAg LyogUHJpbnQgZXJyb3IgbWVzc2FnZSAqLwotICAgIGRlYnVnKEYxMTAsImVybXNnIixtc2csMCk7 Ci0gICAgaWYgKGxvY2FsKQotICAgICAgeHhzY3JlZW4oU0NSX0VNLDAsMEwsbXNnKTsKLSAgICB0 bG9nKEYxMTAsIlByb3RvY29sIEVycm9yOiIsbXNnLDBMKTsKLX0KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotVk9JRAotc2V0c2VzbG9nKHgpIGludCB4OyB7Ci0gICAgc2VzbG9nID0geDsKLSNpZmRl ZiBLVUkKLSAgICBLdWlTZXRQcm9wZXJ0eShLVUlfVEVSTV9DQVBUVVJFLHgsMCk7Ci0jZW5kaWYg LyogS1VJICovCi19Ci0KLVZPSUQKLWRvY2xlYW4oZmMpIGludCBmYzsgeyAgICAgICAgICAgICAg ICAgICAvKiBHZW5lcmFsIGNsZWFudXAgKi8KLSNpZmRlZiBPUzJPUlVOSVgKLSAgICBleHRlcm4g aW50IHR0eWZkOwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotICAgIGV4dGVybiBpbnQgIGtlZXA7 Ci0gICAgZXh0ZXJuIGludCBleGl0aGFuZ3VwOwotI2lmbmRlZiBOT1hGRVIKLSAgICBleHRlcm4g Y2hhciBmaWxuYW1bXTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNpZm5kZWYgTk9JQ1AKLSAgICBp bnQgeDsKLQotICAgIGlmIChmYyA+IDApCi0gICAgICBkb3N0b3AoKTsgICAgICAgICAgICAgICAg IC8qIFN0b3AgYWxsIGNvbW1hbmQgZmlsZXMgYW5kIGVuZCBtYWNyb3MgKi8KLSNlbmRpZiAvKiBO T0lDUCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIGlmIChwa3Rsb2cpIHsKLSAgICAgICAgKnBr dGZpbCA9ICdcMCc7Ci0gICAgICAgIHBrdGxvZyA9IDA7Ci0gICAgICAgIHpjbG9zZShaUEZJTEUp OwotICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICBpZiAoc2VzbG9nKSB7Ci0gICAgICAg ICpzZXNmaWwgPSAnXDAnOwotICAgICAgICBzZXRzZXNsb2coMCk7Ci0gICAgICAgIHpjbG9zZSha U0ZJTEUpOwotICAgIH0KLSNpZmRlZiBUTE9HCi0gICAgaWYgKHRyYWxvZykgewotICAgICAgICB0 bG9nKEYxMDAsIlRyYW5zYWN0aW9uIExvZyBDbG9zZWQiLCIiLDBMKTsKLSAgICAgICAgKnRyYWZp bCA9ICdcMCc7Ci0gICAgICAgIHRyYWxvZyA9IDA7Ci0gICAgICAgIHpjbG9zZShaVEZJTEUpOwot ICAgIH0KLSNlbmRpZiAvKiBUTE9HICovCi0KLSAgICBkZWJ1ZyhGMTAwLCJkb2NsZWFuIGNhbGxp bmcgZG9sb2dlbmQiLCIiLDApOwotICAgIGRvbG9nZW5kKCk7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEVuZCBjdXJyZW50IGxvZyByZWNvcmQgaWYgYW55ICovCi0jaWZkZWYgQ09NTUVOVAot ICAgIGlmIChkaWFsb2cpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGNvbm5lY3Rpb24g bG9nIG9wZW4gKi8KLQlkaWFsb2cgPSAwOwotICAgICAgICAqZGlhZmlsID0gJ1wwJzsgICAgICAg ICAgICAgICAgIC8qIGNsb3NlIGl0LiAqLwotICAgICAgICB6Y2xvc2UoWkRJRklMKTsKLSAgICB9 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZuZGVmIE5PSUNQCi0jaWZuZGVmIE5PU1BMCi0g ICAgemNsb3NlKFpSRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyogUkVBRCBhbmQgV1JJVEUg ZmlsZXMsIGlmIGFueS4gKi8KLSAgICB6Y2xvc2UoWldGSUxFKTsKLSNpZm5kZWYgTk9YRkVSCi0g ICAgemNsb3NlKFpJRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyogQW5kIG90aGVyIGZpbGVz IHRvbyAqLwotICAgIHggPSBjaGtmbihaT0ZJTEUpOwkJCS8qIERvd25sb2FkIGluIHByb2dyZXNz PyAqLwotICAgIGRlYnVnKEYxMTEsImRvY2xlYW4gY2hrZm4gWk9GSUxFIixmaWxuYW0seCk7Ci0g ICAgZGVidWcoRjExMSwiZG9jbGVhbiBrZWVwIiwiIixrZWVwKTsKLSAgICB6Y2xvc2UoWk9GSUxF KTsJCQkvKiBDbG9zZSBvdXRwdXQgZmlsZSAqLwotICAgIGlmICh4ID4gMCAmJiAha2VlcCkgewkJ LyogSWYgaXQgd2FzIGJlaW5nIGRvd25sb2FkZWQgKi8KLQlpZiAoZmlsbmFtWzBdKQotCSAgeCA9 IHpkZWxldChmaWxuYW0pOwkJLyogRGVsZXRlIGlmIElOQ09NUExFVEUgPSBESVNDQVJEICovCi0J ZGVidWcoRjExMSwiZG9jbGVhbiBkb3dubG9hZCBmaWxlbmFtZSIsZmlsbmFtLHgpOwotICAgIH0K LSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICB6Y2xvc2UoWlNZU0ZOKTsKLSAgICB6Y2xvc2UoWk1G SUxFKTsKLQotICAgIGlmIChmYyA8IDEpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFU0VU aW5nLCBub3QgRVhJVGluZyAqLwotI2lmZGVmIERFQlVHCi0gICAgICAgIGlmIChkZWJsb2cpIHsg ICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgdGhlIGRlYnVnIGxvZy4gKi8KLSAgICAgICAgICAg ICpkZWJmaWwgPSAnXDAnOwotICAgICAgICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgICAgIHpj bG9zZShaREZJTEUpOwotICAgICAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgcmV0 dXJuOwotICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNp Zm5kZWYgTk9MT0NBTAotICAgIGRlYnVnKEYxMDEsImRvY2xlYW4gZXhpdGhhbmd1cCIsIiIsZXhp dGhhbmd1cCk7Ci0gICAgaWYgKGxvY2FsICYmIGV4aXRoYW5ndXApIHsJCS8qIENsb3NlIGNvbW11 bmljYXRpb24gY29ubmVjdGlvbiAqLwotICAgICAgICBleHRlcm4gaW50IGhhc2xvY2s7Ci0JaW50 IHg7Ci0JCi0JeCA9IHR0Y2hrKCk7Ci0JZGVidWcoRjEwMSwiZG9jbGVhbiB0dGNoaygpIiwiIix4 KTsKLSNpZmRlZiBPUzJPUlVOSVgKLQlkZWJ1ZyhGMTAxLCJkb2NsZWFuIHR0eWZkIiwiIix0dHlm ZCk7Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0gICAgICAgIGlmICh4ID49IDAKLSNpZmRlZiBP UzIKLSAgICAgICAgICAgIHx8IHR0eWZkICE9IC0xCi0jZWxzZQotI2lmZGVmIFVOSVgKLSAgICAg ICAgICAgIHx8IGhhc2xvY2sgICAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgd2UgZ2V0IGxv Y2tmaWxlISAqLwotICAgICAgICAgICAgfHwgKCFuZXR3b3JrICYmIHR0eWZkID4gLTEpCi0jZW5k aWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgKSB7Ci0gICAgICAg ICAgICBleHRlcm4gaW50IHdhc2Nsb3NlZCwgd2h5Y2xvc2VkOwotCSAgICBkZWJ1ZyhGMTAwLCJk b2NsZWFuIGhhbmdpbmcgdXAgYW5kIGNsb3NpbmciLCIiLDApOwotICAgICAgICAgICAgaWYgKG1z Z2ZsZykgewotI2lmZGVmIFVOSVgKLSAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSNl bmRpZiAvKiBVTklYICovCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJDbG9zaW5nICVzLi4uIix0 dG5hbWUpOwotICAgICAgICAgICAgfQotI2lmbmRlZiBOT0RJQUwKLSAgICAgICAgICAgIG1kbWh1 cCgpOyAgICAgICAgICAgICAgICAgICAvKiBIYW5ndXAgdGhlIG1vZGVtPz8/ICovCi0jZW5kaWYg LyogTk9ESUFMICovCi0gICAgICAgICAgICB0dGNsb3MoMCk7ICAgICAgICAgICAgICAgICAgLyog Q2xvc2UgZXh0ZXJuYWwgbGluZSwgaWYgYW55ICovCi0gICAgICAgICAgICBpZiAobXNnZmxnKSB7 Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJPS1xuIik7Ci0jaWZkZWYgVU5JWAotICAgICAgICAg ICAgICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGlmICh3YXNjbG9zZWQpIHsKLSAgICAgICAgICAgICAgICB3aHljbG9zZWQg PSBXQ19DTE9TOwotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgICAgIGlmIChubWFjKSB7ICAg ICAgICAgICAgIC8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KLSAgICAgICAgICAgICAgICAgICAg aW50IGs7ICAgICAgICAgICAgICAvKiBZZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgayA9IG1s b29rKG1hY3RhYiwib25fY2xvc2UiLG5tYWMpOyAgLyogTG9vayB0aGlzIHVwICovCi0gICAgICAg ICAgICAgICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGZv dW5kLCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgd2FzY2xvc2VkID0gMDsKLSAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHByaW50ZigiT05fQ0xPU0UgRE9DTEVBTlxuIik7ICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAqKG1hY3RhYltrXS5rd2QpID0gTlVMOyAgICAgICAgIC8qIFNl ZSBjb21tZW50IGJlbG93ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9kbyhrLGNr aXRvYSh3aHljbG9zZWQpLDApID4gLTEpIC8qIHNldCBpdCB1cCwgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAgICAgICAgLyogYW5kIGV4ZWN1dGUg aXQgKi8KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAv KiBOT1NQTCAqLwotICAgICAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDA7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSxkZnR0eSxUVE5BTUxFTik7IC8q IFJlc3RvcmUgZGVmYXVsdCB0dHkgKi8KLSAgICAgICAgbG9jYWwgPSBkZmxvYzsgICAgICAgICAg ICAgICAgICAvKiBBbmQgZGVmYXVsdCByZW1vdGUvbG9jYWwgc3RhdHVzICovCi0gICAgfQotI2lm ZGVmIERFQlVHCi0gICAgZWxzZSBpZiAobG9jYWwpIGRlYnVnKEYxMDAsImRvY2xlYW4gaGFuZ3Vw L2Nsb3NlIHNraXBwZWQiLCIiLDApOwotI2VuZGlmIC8qIERFQlVHICovCi0jZW5kaWYgLyogTk9M T0NBTCAqLwotCi0jaWZkZWYgTkVXRlRQCi0gICAgZnRwYnllKCk7CQkJCS8qIElmIEZUUCBjb25u ZWN0aW9uIG9wZW4sIGNsb3NlIGl0ICovCi0jZW5kaWYgLyogTkVXRlRQICovCi0KLSNpZmRlZiBJ S1NECi0gICAgaWYgKGluc2VydmVyKQotICAgICAgdHRjbG9zKDApOwkJCS8qIElmIElLU0QsIGNs b3NlIHNvY2tldCAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQotI2lmbmRlZiBOT1NQTAotLyoKLSAg SWYgYSBtYWNybyBuYW1lZCAib25fZXhpdCIgaXMgZGVmaW5lZCwgZXhlY3V0ZSBpdC4gIEFsc28g cmVtb3ZlIGl0IGZyb20gdGhlCi0gIG1hY3JvIHRhYmxlLCBpbiBjYXNlIGl0cyBkZWZpbml0aW9u IGluY2x1ZGVzIGFuIEVYSVQgb3IgUVVJVCBjb21tYW5kLCB3aGljaAotICB3b3VsZCBjYXVzZSBt dWNoIHJlY3Vyc2lvbiBhbmQgd291bGQgcHJldmVudCB0aGUgcHJvZ3JhbSBmcm9tIGV2ZXIgYWN0 dWFsbHkKLSAgRVhJVGluZy4KLSovCi0gICAgaWYgKG5tYWMpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLwotICAgICAgICBpbnQgazsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFllcyAqLwotICAgICAgICBjaGFyICogY21kID0gIm9uX2V4aXQi OyAgICAgICAgIC8qIE1TVkMgMi54IGNvbXBpbGVyIGVycm9yICovCi0gICAgICAgIGsgPSBtbG9v ayhtYWN0YWIsY21kLG5tYWMpOyAgICAgLyogTG9vayB1cCAib25fZXhpdCIgKi8KLSAgICAgICAg aWYgKGsgPj0gMCkgeyAgICAgICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KLSNpZmRlZiBD T01NRU5UCi0JICAgIC8qIFRoaXMgbWFrZXMgYSBtZXNzIGlmIE9OX0VYSVQgaXRzZWxmIGV4ZWN1 dGVzIG1hY3JvcyAqLwotICAgICAgICAgICAgKihtYWN0YWJba10ua3dkKSA9IE5VTDsgICAgIC8q IHBva2UgaXRzIG5hbWUgZnJvbSB0aGUgdGFibGUsICovCi0jZWxzZQotCSAgICAvKiBSZXBsYWNl IHRoZSBrZXl3b3JkIHdpdGggc29tZXRoaW5nIHRoYXQgZG9lc24ndCB3cmVjayB0aGUgKi8KLQkg ICAgLyogb3JkZXIgb2YgdGhlIGtleXdvcmQgdGFibGUgKi8KLQkgICAgY2tzdHJuY3B5KG1hY3Rh YltrXS5rd2QsIm9uX2V4eHgiLDgpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAg IGlmIChkb2RvKGssIiIsMCkgPiAtMSkgICAgICAvKiBzZXQgaXQgdXAsICovCi0gICAgICAgICAg ICAgIHBhcnNlcigxKTsgICAgICAgICAgICAgICAgLyogYW5kIGV4ZWN1dGUgaXQgKi8KLSAgICAg ICAgfQotICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotLyoKLSAgUHV0IGNvbnNvbGUgdGVybWlu YWwgYmFjayB0byBub3JtYWwuICBUaGlzIGlzIGRvbmUgaGVyZSBiZWNhdXNlIHRoZQotICBPTl9F WElUIG1hY3JvIGNhbGxzIHRoZSBwYXJzZXIsIHdoaWNoIG1lZGRsZXMgd2l0aCBjb25zb2xlIHRl cm1pbmFsIG1vZGVzLgotKi8KLSAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZXN0b3JlIGNvbnNvbGUgdGVybWluYWwuICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBT aG91bGQgYmUgbm8gbmVlZCBmb3IgdGhpcywgYW5kIG1heWJlIGl0J3Mgc2NyZXdpbmcgdGhpbmdz IHVwPyAqLwotICAgIGNvbm5vaSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4g b2ZmIGNvbnNvbGUgaW50ZXJydXB0IHRyYXBzICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0g ICAgLyogRGVsZXRlIHRoZSBTdGFydHVwIEZpbGUgaWYgd2UgYXJlIHN1cHBvc2VkIHRvLiAqLwot I2lmbmRlZiBOT0lDUAotICAgIHsKLSAgICAgICAgZXh0ZXJuIGludCBEZWxldGVTdGFydHVwRmls ZTsKLSAgICAgICAgZGVidWcoRjExMSwiZG9jbGVhbiBEZWxldGVTdGFydHVwRmlsZSIsY21kZmls LERlbGV0ZVN0YXJ0dXBGaWxlKTsKLSAgICAgICAgaWYgKERlbGV0ZVN0YXJ0dXBGaWxlKSB7Ci0g ICAgICAgICAgICBpbnQgcmMgPSB6ZGVsZXQoY21kZmlsKTsKLSAgICAgICAgICAgIGRlYnVnKEYx MTEsImRvY2xlYW4gemRlbGV0IixjbWRmaWwscmMpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlm IC8qIE5PSUNQICovCi0gICAgc3lzY2xlYW51cCgpOyAgICAgICAgICAgICAgICAgICAgICAgLyog U3lzdGVtLWRlcGVuZGVudCBjbGVhbnVwLCBsYXN0ICovCi19Ci0KLS8qICBEIE8gRSBYIEkgVCAg LS0gIEV4aXQgZnJvbSB0aGUgcHJvZ3JhbS4gICovCi0KLS8qCi0gIEZpcnN0IGFyZyBpcyBnZW5l cmFsLCBzeXN0ZW0taW5kZXBlbmRlbnQgc3ltYm9sOiBHT09EX0VYSVQgb3IgQkFEX0VYSVQuCi0g IElmIHNlY29uZCBhcmcgaXMgLTEsIHRha2UgMXN0IGFyZyBsaXRlcmFsbHkuCi0gIElmIHNlY29u ZCBhcmcgaXMgbm90IC0xLCB3b3JrIGl0IGludG8gdGhlIGV4aXQgY29kZS4KLSovCi1WT0lECi1k b2V4aXQoZXhpdHN0YXQsY29kZSkgaW50IGV4aXRzdGF0LCBjb2RlOyB7Ci0gICAgZXh0ZXJuIGlu dCB4X2xvZ2dlZCwgcXVpdHRpbmc7Ci0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGludCBkaXNwbGF5 X2RlbW87Ci0gICAgZXh0ZXJuIGludCBTeXNJbml0ZWQ7Ci0jZW5kaWYgLyogT1MyICovCi0jaWZk ZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBLUkI0Ci0gICAgZXh0ZXJuIGludCBrcmI0X2F1dG9kZWw7 Ci0jZW5kaWYgLyogS1JCNCAqLwotI2lmZGVmIEtSQjUKLSAgICBleHRlcm4gaW50IGtyYjVfYXV0 b2RlbDsKLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQotI2lm ZGVmIFZNUwotICAgIGNoYXIgZW52c3RyWzY0XTsKLSAgICBzdGF0aWMgJERFU0NSSVBUT1Ioc3lt bmFtLCJDS0VSTUlUX1NUQVRVUyIpOwotICAgIHN0YXRpYyBzdHJ1Y3QgZHNjJGRlc2NyaXB0b3Jf cyBzeW12YWw7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgaW50IGk7Ci0KLSNpZmRlZiBERUJVRwot I2lmZGVmIFVTRV9MVUNBQ0hFCi0gICAgZXh0ZXJuIGxvbmcgbHVjYWxscywgbHVoaXRzLCB4eGhp dHMsIGx1bG9vcDsKLSAgICBleHRlcm4gaW50IGx1c2l6ZTsKLSNlbmRpZiAvKiBVU0VfTFVDQUNI RSAqLwotI2lmbmRlZiBOT1NQTAotICAgIGV4dGVybiBpbnQgY21kc3RhdHNbXTsKLSNlbmRpZiAv KiBOT1NQTCAqLwotCi0gICAgcXVpdHRpbmcrKzsKLQotI2lmZGVmIE9TMgotICAgIGlmICggIVN5 c0luaXRlZCApIHsKLSAgICAgICAgc3RhdGljIGludCBpbml0aW5nID0gMDsKLSAgICAgICAgaWYg KCBpbml0aW5nICkKLQkgIGV4aXQoMjUzKTsKLSAgICAgICAgaW5pdGluZyA9IDE7Ci0gICAgICAg IHN5c2luaXQoKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAoZGVibG9nKSB7 Ci0jaWZkZWYgVVNFX0xVQ0FDSEUKLQlkZWJ1ZyhGMTAxLCJsb29rdXAgY2FjaGUgc2l6ZSIsIiIs bHVzaXplKTsKLQlkZWJ1ZyhGMTAxLCJsb29rdXAgY2FsbHMgLi4uLiIsIiIsbHVjYWxscyk7Ci0J ZGVidWcoRjEwMSwibG9va3VwIGNhY2hlIGhpdHMiLCIiLGx1aGl0cyk7Ci0JZGVidWcoRjEwMSwi bG9va3VwIHN0YXJ0IGhpdHMiLCIiLHh4aGl0cyk7Ci0JZGVidWcoRjEwMSwibG9va3VwIGxvb3Ag aXRlcmF0aW9ucyIsIiIsbHVsb29wKTsKLSNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLwotI2lmbmRl ZiBOT1NQTAotCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCSAgICBpZiAoY21kc3RhdHNb aV0pCi0JICAgICAgZGVidWcoRjExMSwiQ01TVEFUUyIsY2tpdG9hKGkpLGNtZHN0YXRzW2ldKTsK LQl9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQlkZWJ1ZyhGMTAxLCJkb2V4aXQgZXhpdHN0YXQiLCIi LGV4aXRzdGF0KTsKLQlkZWJ1ZyhGMTAxLCJkb2V4aXQgY29kZSIsIiIsY29kZSk7Ci0JZGVidWco RjEwMSwiZG9leGl0IHhpdHN0YSIsIiIseGl0c3RhKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcg Ki8KLQotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgLyogSWYgd2UgYXJlIGF1dG9tYXRpY2FsbHkg ZGVzdHJveWluZyBLZXJiZXJvcyBjcmVkZW50aWFscyBvbiBFeGl0ICovCi0gICAgLyogZG8gaXQg bm93LiAqLwotI2lmZGVmIEtSQjQKLSAgICBpZiAoa3JiNF9hdXRvZGVsID09IEtSQl9ERUxfRVgp IHsKLSAgICAgICAgZXh0ZXJuIHN0cnVjdCBrcmJfb3BfZGF0YSBrcmJfb3A7Ci0gICAgICAgIGty Yl9vcC52ZXJzaW9uID0gNDsKLSAgICAgICAga3JiX29wLmNhY2hlID0gTlVMTDsKLSAgICAgICAg Y2tfa3JiNF9kZXN0cm95KCZrcmJfb3ApOwotICAgIH0KLSNlbmRpZiAvKiBLUkI0ICovCi0jaWZk ZWYgS1JCNQotICAgIGlmIChrcmI1X2F1dG9kZWwgPT0gS1JCX0RFTF9FWCkgewotICAgICAgICBl eHRlcm4gc3RydWN0IGtyYl9vcF9kYXRhIGtyYl9vcDsKLSAgICAgICAgZXh0ZXJuIGNoYXIgKiBr cmI1X2RfY2M7Ci0gICAgICAgIGtyYl9vcC52ZXJzaW9uID0gNTsKLSAgICAgICAga3JiX29wLmNh Y2hlID0ga3JiNV9kX2NjOwotICAgICAgICBja19rcmI1X2Rlc3Ryb3koJmtyYl9vcCk7Ci0gICAg fQotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0jaWZuZGVm IE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICBpZiAoU3lzSW5pdGVkKQotICAgIHsKLSNpZmRlZiBE Q01EQlVGCi0gICAgICAgIGV4dGVybiBzdHJ1Y3QgY21kcHRyICpjbWRzdGs7Ci0jZWxzZQotICAg ICAgICBleHRlcm4gc3RydWN0IGNtZHB0ciBjbWRzdGtbXTsKLSNlbmRpZiAvKiBEQ01EQlVGICov Ci0gICAgICAgIGV4dGVybiBpbnQgdHRfc3RhdHVzW107Ci0gICAgICAgIGV4dGVybiBpbnQgdm1v ZGU7Ci0KLSAgICAgICAgLyogSWYgdGhlcmUgaXMgYSBkZW1vIHNjcmVlbiB0byBiZSBkaXNwbGF5 ZWQsIGRpc3BsYXkgaXQgKi8KLSAgICAgICAgaWYgKGRpc3BsYXlfZGVtbykgewotICAgICAgICAg ICAgZGVtb3Njcm4oVkNNRCk7Ci0gICAgICAgICAgICBkaXNwbGF5X2RlbW8gPSAwOwotICAgICAg ICB9Ci0jaWZuZGVmIEtVSQotICAgICAgICAvKiBUaGlzIGlzIGdvaW5nIHRvIGJlIGhpZGVvdXMu ICBJZiB3ZSBoYXZlIGEgc3RhdHVzIGxpbmUgKi8KLSAgICAgICAgLyogaW4gdGhlIGNvbW1hbmQg d2luZG93IHR1cm4gaXQgb2ZmIGJlZm9yZSB3ZSBleGl0LiAgICAgICovCi0KLSAgICAgICAgaWYg KCB0dF9zdGF0dXNbVkNNRF0gJiYgdm1vZGUgPT0gVkNNRCApIHsKLSAgICAgICAgICAgIGRvbWFj KCJfY2xlYXJfc3RhdHVzbGluZSIsInNldCBjb21tYW5kIHN0YXR1c2xpbmUgb2ZmIiwKLSAgICAg ICAgICAgICAgICAgICBjbWRzdGtbY21kbHZsXS5jY2ZsZ3MpOwotICAgICAgICAgICAgZGVsbWFj KCJfY2xlYXJfc3RhdHVzbGluZSIsMSk7Ci0gICAgICAgICAgICBSZXF1ZXN0U2NyZWVuTXV0ZXgo LTEpOwotICAgICAgICAgICAgVnNjcm5Jc0RpcnR5KHZtb2RlKTsKLSAgICAgICAgICAgIFJlbGVh c2VTY3JlZW5NdXRleCgpOwotICAgICAgICAgICAgd2hpbGUgKCBJc1ZzY3JuRGlydHkodm1vZGUp ICkKLSAgICAgICAgICAgICAgICBtc2xlZXAoMjAwKTsKLSAgICAgICAgICAgIFJlcXVlc3RTY3Jl ZW5NdXRleCgtMSk7Ci0gICAgICAgICAgICBSZWxlYXNlU2NyZWVuTXV0ZXgoKTsKLSAgICAgICAg fQotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBEaWFsZXJTZW5kKE9QVF9LRVJNSVRfRVhJVCxl eGl0c3RhdCk7Ci0jaWZuZGVmIEtVSQotICAgICAgICBkZWJ1ZyhGMTAwLCJkb2V4aXQgYWJvdXQg dG8gbXNsZWVwIiwiIiwwKTsKLQotICAgICAgICBpZiAoIGlzV2luOTUoKSApCi0gICAgICAgICAg ICBtc2xlZXAoMjUwKTsKLSNlbmRpZiAvKiBLVUkgKi8KLSAgICB9Ci0jZW5kaWYgLyogT1MyICov Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZkZWYgSUtTRAotI2lmZGVmIENLX0xPR0lOCi0g ICAgaWYgKGluc2VydmVyICYmIHhfbG9nZ2VkKSB7Ci0jaWZuZGVmIE5PU1BMCi0vKgotICBJZiBh IG1hY3JvIG5hbWVkICJvbl9sb2dvdXQiIGlzIGRlZmluZWQsIGV4ZWN1dGUgaXQuICBBbHNvIHJl bW92ZSBpdCBmcm9tIHRoZQotICBtYWNybyB0YWJsZSwgaW4gY2FzZSBpdHMgZGVmaW5pdGlvbiBp bmNsdWRlcyBhbiBFWElUIG9yIFFVSVQgY29tbWFuZCwgd2hpY2gKLSAgd291bGQgY2F1c2UgbXVj aCByZWN1cnNpb24gYW5kIHdvdWxkIHByZXZlbnQgdGhlIHByb2dyYW0gZnJvbSBldmVyIGFjdHVh bGx5Ci0gIEVYSVRpbmcuCi0qLwotCWlmIChubWFjKSB7CQkJLyogQW55IG1hY3JvcyBkZWZpbmVk PyAqLwotCSAgICBpbnQgazsJCQkvKiBZZXMgKi8KLQkgICAgY2hhciAqIGNtZCA9ICJvbl9sb2dv dXQiOwkvKiBNU1ZDIDIueCBjb21waWxlciBlcnJvciAqLwotCSAgICBrID0gbWxvb2sobWFjdGFi LGNtZCxubWFjKTsJLyogTG9vayB1cCAib25fbG9nb3V0IiAqLwotCSAgICBpZiAoayA+PSAwKSB7 CQkvKiBJZiBmb3VuZCwgKi8KLQkJKihtYWN0YWJba10ua3dkKSA9IE5VTDsJLyogcG9rZSBpdHMg bmFtZSBmcm9tIHRoZSB0YWJsZSwgKi8KLQkJaWYgKGRvZG8oaywiIiwwKSA+IC0xKQkvKiBzZXQg aXQgdXAsICovCi0JCSAgcGFyc2VyKDEpOwkJLyogYW5kIGV4ZWN1dGUgaXQgKi8KLQkgICAgfQot CX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCXp2bG9nb3V0KCk7Ci0gICAgfQotI2VuZGlmIC8qIENL X0xPR0lOICovCi0jZW5kaWYgLyogSUtTRCAqLwotCi0gICAgZGVidWcoRjEwMCwiZG9leGl0IGFi b3V0IHRvIGRvY2xlYW4iLCIiLDApOwotICAgIGRvY2xlYW4oMSk7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIENsZWFuIHVwIG1vc3QgdGhpbmdzICovCi0KLSNpZmRlZiBWTVMKLSAgICBpZiAo Y29kZSA9PSAtMSkKLSAgICAgIGNvZGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBT aW5jZSB3ZSBzZXQgdHdvIGRpZmZlcmVudCBpdGVtcyAqLwotICAgIHNwcmludGYoZW52c3RyLCIl ZCIsIGV4aXRzdGF0IHwgY29kZSk7IC8qIFNBRkUgKi8KLSAgICBzeW12YWwuZHNjJHdfbGVuZ3Ro ID0gKGludClzdHJsZW4oZW52c3RyKTsKLSAgICBzeW12YWwuZHNjJGFfcG9pbnRlciA9IGVudnN0 cjsKLSAgICBzeW12YWwuZHNjJGJfY2xhc3MgPSBEU0MkS19DTEFTU19TOwotICAgIHN5bXZhbC5k c2MkYl9kdHlwZSA9IERTQyRLX0RUWVBFX1Q7Ci0gICAgaSA9IDI7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU3RvcmUgaW4gZ2xvYmFsIHRhYmxlICovCi0jaWZkZWYgQ09NTUVOVCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFydGluIFppbnNlciAqLwotICAgIExJQiRTRVRf U1lNQk9MKCZzeW1uYW0sICZzeW12YWwsICZpKTsKLSNlbHNlCi0gICAgbGliJHNldF9zeW1ib2wo JnN5bW5hbSwgJnN5bXZhbCwgJmkpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBpZiAoZXhp dHN0YXQgPT0gQkFEX0VYSVQpCi0gICAgICBleGl0c3RhdCA9IFNTJF9BQk9SVCB8IFNUUyRNX0lO SElCX01TRzsKLSAgICBpZiAoZXhpdHN0YXQgPT0gR09PRF9FWElUKQotICAgICAgZXhpdHN0YXQg PSBTUyRfTk9STUFMIHwgU1RTJE1fSU5ISUJfTVNHOwotI2Vsc2UgLyogTm90IFZNUyAqLwotICAg IGlmIChjb2RlICE9IC0xKSAgICAgICAgICAgICAgICAgICAgIC8qIFRha2UgMXN0IGFyZyBsaXRl cmFsbHkgKi8KLSAgICAgIGV4aXRzdGF0IHw9IGNvZGU7Ci0jZW5kaWYgLyogVk1TICovCi0KLSNp ZmRlZiBJS1NECi0jaWZkZWYgSUtTREIKLSAgICBkZWJ1ZyhGMTAxLCJkb2V4aXQgaWtkYm9wZW4i LCIiLGlrZGJvcGVuKTsKLSAgICBpZiAoaWtkYm9wZW4gJiYgZGJmcCkgeyAgICAgICAgICAgICAv KiBJZiBJS1NEIGRhdGFiYXNlIG9wZW4gKi8KLSAgICAgICAgaW50IHg7Ci0gICAgICAgIHggPSBm cmVlc2xvdChteWRic2xvdCk7ICAgICAgICAgLyogRnJlZSBvdXIgc2xvdC4uLiAqLwotICAgICAg ICBkZWJ1ZyhGMTAxLCJkb2V4aXQgZnJlZXNsb3QiLCIiLHgpOwotICAgICAgICBmY2xvc2UoZGJm cCk7ICAgICAgICAgICAgICAgICAgIC8qIGFuZCBjbG9zZSBpdC4gKi8KLSAgICB9Ci0jZW5kaWYg LyogSUtTREIgKi8KLSNlbmRpZiAvKiBJS1NEICovCi0KLS8qIFdlIGhhdmUgcHV0IHRoaXMgb2Zm IHRpbGwgdGhlIHZlcnkgbGFzdCBtb21lbnQuLi4gKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYg KGRlYmxvZykgeyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgdGhlIGRlYnVnIGxvZy4g Ki8KLSAgICAgICAgZGVidWcoRjEwMSwiQy1LZXJtaXQgRVhJVCBzdGF0dXMiLCIiLGV4aXRzdGF0 KTsKLSAgICAgICAgKmRlYmZpbCA9ICdcMCc7Ci0gICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAg IHpjbG9zZShaREZJTEUpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgT1My Ci0gICAgX2V4aXQoZXhpdHN0YXQpOyAgICAgICAgICAgIC8qIEV4aXQgZnJvbSBDLUtlcm1pdCAo bm8gbWF0dGVyIHdoYXQpICovCi0jZWxzZSAvKiBPUzIgKi8KLSAgICBleGl0KGV4aXRzdGF0KTsg ICAgICAgICAgICAgICAgICAgICAvKiBFeGl0IGZyb20gQy1LZXJtaXQgKi8KLSNlbmRpZiAvKiBP UzIgKi8KLX0KLQotVk9JRAotYmdjaGsoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIENoZWNrIGJhY2tncm91bmQgc3RhdHVzICovCi0gICAgaWYgKGJnc2V0IDwgMCkgeyAgICAg ICAgICAgICAgICAgICAgLyogVGhleSBkaWRuJ3QgdHlwZSBTRVQgQkFDS0dST1VORCAqLwotI2lm ZGVmIFZNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBwcm9tcHQgZmxhZyBi YXNlZCBvbiAqLwotICAgICAgICBwZmxhZyA9ICFiYXRjaDsgICAgICAgICAgICAgICAgIC8qIHdo YXQgd2UgZGV0ZWN0ZWQgYXQgc3RhcnR1cC4gKi8KLSNlbHNlCi0gICAgICAgIHBmbGFnID0gIWJh Y2tncmQ7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogT3RoZXJ3aXNlIFNFVCBCQUNLR1JPVU5EIHZhbHVlICovCi0gICAgICAgIHBm bGFnID0gKGJnc2V0ID09IDAgPyAxIDogMCk7Ci0gICAgfQotCi0jaWZuZGVmIE5PSUNQCi0gICAg LyogTWVzc2FnZSBmbGFnIG9uIG9ubHkgaWYgYXQgdG9wIGxldmVsLCBwZmxhZyBpcyBvbiwgYW5k IFFVSUVUIGlzIE9GRiAqLwotICAgIGlmICgheGNtZHNyYykKLSAgICAgIG1zZ2ZsZyA9IChwZmxh ZyA9PSAwKSA/IDAgOiAhcXVpZXQ7Ci0gICAgZWxzZSBtc2dmbGcgPSAwOwotI2Vsc2UKLSAgICBt c2dmbGcgPSAwOwotI2VuZGlmIC8qIE5PSUNQICovCi19Ci0KLS8qIFNldCBjb25zb2xlIGludGVy cnVwdHMgKi8KLQotVk9JRAotc2V0aW50KCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEFjY29yZGluZyB0byBTRVQgQ09NTUFORCBJTlRFUlJVUCAqLwotICAgIGludCB4ID0gMDsK LSAgICBpZiAoY21kaW50KSAgeCB8PSAxOwotICAgIGlmICh4c3VzcGVuZCkgeCB8PSAyOwotICAg IGRlYnVnKEYxMDEsInNldGludCIsIiIseCk7Ci0KLSAgICBzd2l0Y2ggKHgpIHsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTZXQgdGhlIGRlc2lyZWQgY29tYmluYXRpb24gKi8KLSAgICAgIGNh c2UgMDogY29ubm9pKCk7IGJyZWFrOyAgICAgICAgICAvKiBObyBpbnRlcnJ1cHRzICovCi0gICAg ICBjYXNlIDE6IGNvbmludCh0cmFwLFNJR19JR04pOyBicmVhazsKLSAgICAgIGNhc2UgMjogY29u aW50KFNJR19JR04sc3RwdHJhcCk7IGJyZWFrOwotICAgICAgY2FzZSAzOiBjb25pbnQodHJhcCxz dHB0cmFwKTsgYnJlYWs7Ci0gICAgfQotICAgIGJnY2hrKCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIENoZWNrIGJhY2tncm91bmQgc3RhdHVzICovCi19Ci0KLSNpZmRlZiBERUJVRwot LyogIEQgRSBCIFUgRyAgLS0gIEVudGVyIGEgcmVjb3JkIGluIHRoZSBkZWJ1Z2dpbmcgbG9nICAq LwotCi0vKgotIENhbGwgd2l0aCBhIGZvcm1hdCwgdHdvIHN0cmluZ3MsIGFuZCBhIG51bWJlcjoK LSAgIGYgIC0gRm9ybWF0LCBhIGJpdCBzdHJpbmcgaW4gcmFuZ2UgMC03LgotICAgICAgICBJZiBi aXQgeCBpcyBvbiwgdGhlbiBhcmd1bWVudCBudW1iZXIgeCBpcyBwcmludGVkLgotICAgczEgLSBT dHJpbmcsIGFyZ3VtZW50IG51bWJlciAxLiAgSWYgc2VsZWN0ZWQsIHByaW50ZWQgYXMgaXMuCi0g ICBzMiAtIFN0cmluZywgYXJndW1lbnQgbnVtYmVyIDIuICBJZiBzZWxlY3RlZCwgcHJpbnRlZCBp biBicmFja2V0cy4KLSAgIG4gIC0gTG9uZyBpbnQsIGFyZ3VtZW50IDMuICBJZiBzZWxlY3RlZCwg cHJpbnRlZCBwcmVjZWRlZCBieSBlcXVhbHMgc2lnbi4KLQotICAgZj0wIGlzIHNwZWNpYWw6IHBy aW50IHMxLHMyLCBhbmQgaW50ZXJwcmV0IG4gYXMgYSBjaGFyLgotCi0gICBmPUYwMTEgKDMpIGlz IGFsc28gc3BlY2lhbDsgaW4gdGhpcyBjYXNlIHMyIGlzIGludGVycGV0ZWQgYXMgYSBjb3VudGVk Ci0gICBzdHJpbmcgdGhhdCBtaWdodCBjb250YWluIE5VTHMuICBuIGlzIHRoZSBsZW5ndGguICBJ ZiBuIGlzIG5lZ2F0aXZlLCB0aGlzCi0gICBtZWFucyB0aGUgc3RyaW5nIGhhcyBiZWVuIHRydW5j YXRlZCBhbmQgIi4uIiBzaG91bGQgYmUgcHJpbnRlZCBhZnRlciB0aGUKLSAgIGZpcnN0IG4gYnl0 ZXMuICBOVUwgYW5kIExGIGJ5dGVzIGFyZSBwcmludGVkIGFzICI8TlVMPiIgYW5kICI8TEY+Ii4K LQotICAgR2xvYmFsczoKLSAgICAgZGVibG9nOiBub256ZXJvIGlmIGRlYnVnIGxvZyBvcGVuLgot ICAgICBkZWJvazogIG5vbnplcm8gaWYgb2sgdG8gd3JpdGUgZW50cmllcy4KLSovCi0vKgotICBX QVJOSU5HOiBEb24ndCBjaGFuZ2UgREVCVUZMIHdpdGhvdXQgY2hhbmdpbmcgc3ByaW50ZigpIGZv cm1hdHMgYmVsb3csCi0gIGFjY29yZGluZ2x5LgotKi8KLSNkZWZpbmUgREJVRkwgNDAwMAotLyoK LSAgV0FSTklORzogVGhpcyByb3V0aW5lIGlzIG5vdCB0aHJlYWQtc2FmZSwgZXNwZWNpYWxseSB3 aGVuIEtlcm1pdCBpcwotICBleGVjdXRpbmcgb24gbXVsdGlwbGUgQ1BVcyAtLSBhcyBkaWZmZXJl bnQgdGhyZWFkcyB3cml0ZSB0byB0aGUgc2FtZQotICBzdGF0aWMgYnVmZmVyLCB0aGUgZGVidWcg c3RhdGVtZW50cyBhcmUgYWxsIGludGVybGVhdmVkLiAgVG8gYmUgZml4ZWQKLSAgbGF0ZXIuLi4K LSovCi1zdGF0aWMgY2hhciAqZGJwdHIgPSAoY2hhciAqKTA7Ci0KLWludAotI2lmZGVmIENLX0FO U0lDCi1kb2RlYnVnKGludCBmLCBjaGFyICpzMSwgY2hhciAqczIsIENLX09GRl9UIG4pCi0jZWxz ZQotZG9kZWJ1ZyhmLHMxLHMyLG4pIGludCBmOyBjaGFyICpzMSwgKnMyOyBDS19PRkZfVCBuOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBkb2RlYnVnICovIHsKLSAgICBjaGFyICpzcDsKLSAg ICBpbnQgbGVuMSwgbGVuMjsKLSAgICBleHRlcm4gaW50IGRlYnRpbTsKLSNpZmRlZiBPUzIKLSAg ICBleHRlcm4gaW50IFN5c0luaXRlZDsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGlmICghZGVi bG9nIHx8ICFkZWJvaykKLSAgICAgIHJldHVybigwKTsKLQotI2lmZGVmIENPTU1FTlQKLSAgICAv KiBleHBlbnNpdmUuLi4gKi8KLSAgICBpZiAoIWNoa2ZuKFpERklMRSkpCQkJLyogRGVidWcgbG9n IG5vdCBvcGVuLCBkb24ndC4gKi8KLSAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgaWYgKCFkYnB0cikgeyAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUg bWVtb3J5IGJ1ZmZlciAqLwotICAgICAgICBkYnB0ciA9IG1hbGxvYyhEQlVGTCs0KTsgICAgICAg IC8qIFRoaXMgb25seSBoYXBwZW5zIG9uY2UgKi8KLSAgICAgICAgaWYgKCFkYnB0cikgewotICAg ICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAg IH0KLSAgICB9Ci0vKgotICBUaGlzIHByZXZlbnRzIGluZmluaXRlIHJlY3Vyc2lvbiBpbiBjYXNl IHdlIGFjY2lkZW50YWxseSBwdXQgYSBkZWJ1ZygpCi0gIGNhbGwgaW4gdGhpcyByb3V0aW5lLCBv ciBjYWxsIGFub3RoZXIgcm91dGluZSB0aGF0IGNvbnRhaW5zIGRlYnVnKCkgY2FsbHMuCi0gIEZy b20gdGhpcyBwb2ludCBvbiwgYWxsIHJldHVybnMgZnJvbSB0aGlzIHJldHVybiBtdXN0IGJlIHZp YSBnb3RvIHhkZWJ1ZywKLSAgd2hpY2ggc2V0cyBkZWJsb2cgYmFjayB0byAxLgotKi8KLSNpZmRl ZiBPUzIKLSAgICBpZiAoU3lzSW5pdGVkKSB7Ci0JaWYgKFJlcXVlc3REZWJ1Z011dGV4KDMwMDAw KSkKLQkgICAgZ290byB4ZGVidWc7Ci0gICAgfQotI2Vsc2UgLyogT1MyICovCi0gICAgZGVibG9n ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmVudCBpbmZpbml0ZSByZWN1cnNp b24gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGlmIChkZWJ0aW0pIHsgICAgICAgICAgICAg ICAgICAgICAgIC8qIFRpbWVzdGFtcCAqLwotICAgICAgICBjaGFyICp0YiwgdHNidWZbNDhdOwot ICAgICAgICB6dGltZSgmdGIpOwotICAgICAgICBja3N0cm5jcHkodHNidWYsdGIsMzIpOwotICAg ICAgICBpZiAoenRtc2VjID4gLTFMKSB7Ci0JICAgIHNwcmludGYodHNidWYrMTksIi4lMDNsZCAi LHp0bXNlYyk7IC8qIFNBRkUgKi8KLQl9IGVsc2UgewotCSAgICB0c2J1ZlsxOV0gPSAnOic7Ci0J ICAgIHRzYnVmWzIwXSA9IFNQOwotCSAgICB0c2J1ZlsyMV0gPSBOVUw7Ci0JfQotICAgICAgICB6 c291dChaREZJTEUsdHNidWYrMTEpOwotICAgIH0KLSAgICBpZiAoIXMxKSBzMT0iKE5VTEwpIjsK LSAgICBpZiAoIXMyKSBzMj0iKE5VTEwpIjsKLQotICAgIGxlbjEgPSBzdHJsZW4oczEpOwotICAg IGxlbjIgPSBzdHJsZW4oczIpOwotCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgVGhpcyBzaG91bGQg d29yaywgYnV0IGl0IGRvZXNuJ3QuCi0gIFNvIGluc3RlYWQgd2UnbGwgY29wZSB3aXRoIG92ZXJm bG93IHZpYSBzcHJpbnRmIGZvcm1hdHMuCi0gIE4uQi46IFVORk9SVFVOQVRFTFksIHRoaXMgbWVh bnMgd2UgaGF2ZSB0byBwdXQgY29uc3RhbnRzIGluIHRoZQotICBzcHJpbnRmIGZvcm1hdHMuCi0q LwotICAgIGlmIChmICE9IEYwMTEgJiYgKCFmIHx8IChmICYgNikpKSB7IC8qIFN0cmluZyBhcmd1 bWVudChzKSBpbmNsdWRlZD8gKi8KLSAgICAgICAgeCA9IChpbnQpIHN0cmxlbihzMSkgKyAoaW50 KSBzdHJsZW4oczIpICsgMTg7Ci0gICAgICAgIGlmICh4ID4gZGJ1ZmwpIHsgICAgICAgICAgICAg ICAgLyogTG9uZ2VyIHRoYW4gYnVmZmVyPyAqLwotICAgICAgICAgICAgaWYgKGRicHRyKSAgICAg ICAgICAgICAgICAgIC8qIFllcywgZnJlZSBwcmV2aW91cyBidWZmZXIgKi8KLSAgICAgICAgICAg ICAgZnJlZShkYnB0cik7Ci0gICAgICAgICAgICBkYnB0ciA9IChjaGFyICopIG1hbGxvYyh4ICsg Mik7IC8qIEFsbG9jYXRlIGEgbmV3IG9uZSAqLwotICAgICAgICAgICAgaWYgKCFkYnB0cikgewot ICAgICAgICAgICAgICAgIHpzb3V0bChaREZJTEUsIkRFQlVHOiBNZW1vcnkgYWxsb2NhdGlvbiBm YWlsdXJlIik7Ci0gICAgICAgICAgICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgICAgICAgICB6 Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAgICAgICAgICBnb3RvIHhkZWJ1ZzsKLSAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGJ1ZmwgPSB4OwotICAgICAgICAgICAgICAgIHNw cmludGYoZGJwdHIsIkRFQlVHOiBCdWZmZXIgZXhwYW5kZWQgdG8gJWRcbiIsIHggKyAxOCk7Ci0g ICAgICAgICAgICAgICAgenNvdXRsKFpERklMRSxkYnB0cik7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyog VGhlIGFmb3JlbWVudGlvbmVkIHNwcmludGYoKSBmb3JtYXRzIHdlcmUgbGlrZSB0aGlzOiAqLwot ICAgICAgICBpZiAobiA+IDMxICYmIG4gPCAxMjcpCi0gICAgICAgICAgc3ByaW50ZihzcCwiJS4x MDBzJS4yMDAwczolY1xuIixzMSxzMiwoQ0hBUikgbik7Ci0gICAgICAgIGVsc2UgaWYgKG4gPCAz MiB8fCBuID09IDEyNykKLSAgICAgICAgICBzcHJpbnRmKHNwLCIlLjEwMHMlLjIwMDBzOl4lY1xu IixzMSxzMiwoQ0hBUikgKChuKzY0KSAmIDB4N0YpKTsKLSAgICAgICAgZWxzZSBpZiAobiA+IDEy NyAmJiBuIDwgMTYwKQotICAgICAgICAgIHNwcmludGYoc3AsIiUuMTAwcyUuMjAwMHM6fl4lY1xu IixzMSxzMiwoQ0hBUikoKG4tNjQpICYgMHg3RikpOwotICAgICAgICBlbHNlIGlmIChuID4gMTU5 ICYmIG4gPCAyNTYpCi0gICAgICAgICAgc3ByaW50ZihzcCwiJS4xMDBzJS4yMDAwczp+JWNcbiIs czEsczIsKENIQVIpIChuICYgMHg3RikpOwotICAgICAgICBlbHNlIHNwcmludGYoc3AsIiUuMTAw cyUuMjAwMHM6JWxkXG4iLHMxLHMyLG4pOwotLyoKLSAgQnV0LCBuYXR1cmFsbHksIGl0IHR1cm5z IG91dCB0aGVzZSBhcmUgbm90IHBvcnRhYmxlIGVpdGhlciwgc28gbm93Ci0gIHdlIGRvIHRoZSBz dHVwaWRlc3QgcG9zc2libGUgdGhpbmcuCi0qLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lm ZGVmIEJJR0JVRk9LCi0vKiBOZWVkIHRvIGFjY2VwdCBsb25nZXIgc3RyaW5ncyB3aGVuIGRlYnVn Z2luZyBhdXRoZW50aWNhdGVkIGNvbm5lY3Rpb25zICovCi0gICAgaWYgKGYgPT0gRjAxMCkgewot ICAgICAgICBpZiAobGVuMiArIDIgPj0gREJVRkwpIHMyID0gIihzdHJpbmcgdG9vIGxvbmcpIjsK LSAgICB9IGVsc2UgaWYgKGYgIT0gRjAxMSAmJiBmICE9IEYxMDApIHsKLSAgICAgICAgaWYgKGxl bjEgPiAxMDApIHMxID0gIihzdHJpbmcgdG9vIGxvbmcpIjsKLSAgICAgICAgaWYgKGxlbjIgKyAx MDEgPj0gREJVRkwpIHMyID0gIihzdHJpbmcgdG9vIGxvbmcpIjsKLSAgICB9Ci0jZWxzZQotICAg IGlmIChmICE9IEYwMTEpIHsKLSAgICAgICAgaWYgKGxlbjEgPiAxMDApIHMxID0gIihzdHJpbmcg dG9vIGxvbmcpIjsKLSAgICAgICAgaWYgKGxlbjIgKyAxMDEgPj0gREJVRkwpIHMyID0gIihzdHJp bmcgdG9vIGxvbmcpIjsKLSAgICB9Ci0jZW5kaWYgLyogQklHQlVGT0sgKi8KLQotICAgIHNwID0g ZGJwdHI7Ci0KLSAgICBzd2l0Y2ggKGYpIHsgICAgICAgICAgICAgICAgLyogV3JpdGUgbG9nIHJl Y29yZCBhY2NvcmRpbmcgdG8gZm9ybWF0LiAqLwotICAgICAgY2FzZSBGMDAwOiAgICAgICAgICAg ICAgICAvKiAwID0gcHJpbnQgYm90aCBzdHJpbmdzLCBhbmQgbiBhcyBhIGNoYXIuICovCi0gICAg ICAgIGlmIChsZW4yID4gMCkgewotICAgICAgICAgICAgaWYgKChuID4gMzEgJiYgbiA8IDEyNykg fHwgKG4gPiAxNTkgJiYgbiA8IDI1NikpCi0gICAgICAgICAgICAgIHNwcmludGYoc3AsIiVzWyVz XT0lY1xuIixzMSxzMiwoQ0hBUikgbik7Ci0gICAgICAgICAgICBlbHNlIGlmIChuIDwgMzIgfHwg biA9PSAxMjcpCi0gICAgICAgICAgICAgIHNwcmludGYoc3AsIiVzWyVzXT1eJWNcbiIsczEsczIs KENIQVIpICgobis2NCkgJiAweDdGKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChuID4gMTI3ICYm IG4gPCAxNjApCi0gICAgICAgICAgICAgIHNwcmludGYoc3AsIiVzWyVzXT1+XiVjXG4iLHMxLHMy LChDSEFSKSgobi02NCkgJiAweDdGKSk7Ci0gICAgICAgICAgICBlbHNlIHNwcmludGYoc3AsIiVz WyVzXT0weCVsWFxuIixzMSxzMiwobG9uZyluKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIGlmICgobiA+IDMxICYmIG4gPCAxMjcpIHx8IChuID4gMTU5ICYmIG4gPCAyNTYpKQotICAg ICAgICAgICAgICBzcHJpbnRmKHNwLCIlcz0lY1xuIixzMSwoQ0hBUikgbik7Ci0gICAgICAgICAg ICBlbHNlIGlmIChuIDwgMzIgfHwgbiA9PSAxMjcpCi0gICAgICAgICAgICAgIHNwcmludGYoc3As IiVzPV4lY1xuIixzMSwoQ0hBUikgKChuKzY0KSAmIDB4N0YpKTsKLSAgICAgICAgICAgIGVsc2Ug aWYgKG4gPiAxMjcgJiYgbiA8IDE2MCkKLSAgICAgICAgICAgICAgc3ByaW50ZihzcCwiJXM9fl4l Y1xuIixzMSwoQ0hBUikoKG4tNjQpICYgMHg3RikpOwotICAgICAgICAgICAgZWxzZSBzcHJpbnRm KHNwLCIlcz0weCVsWFxuIixzMSwobG9uZyluKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoenNv dXQoWkRGSUxFLGRicHRyKSA8IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAg ICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAgfQotI2lmZGVmIENLU1lTTE9HCi0gICAgICAg IGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAg Y2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5VTEwpOwotICAgICAgICB9Ci0jZW5k aWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRjAwMTogICAg ICAgICAgICAgICAgICAgICAgICAvKiAxLCAiPW4iICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAg ICAvKiBUaGlzIHdhcyBuZXZlciB1c2VkICovCi0gICAgICAgIHNwcmludGYoc3AsIj0lc1xuIixj a2ZzdG9hKG4pKTsKLSNlbHNlCi0gICAgICAgIC8qIExpa2UgRjExMSwgYnV0IHNob3dzIG51bWJl ciBuIGluIGhleCAqLwotCWNrbWFreG1zZyhzcCxEQlVGTCwKLQkJICBzMSwKLQkJICAoKnMxID8g IjoiIDogIiIpLAotCQkgIHMyLAotCQkgICgqczIgPyAiOiIgOiAiIiksCi0JCSAgY2tsdG94KG4p LAotCQkgICJcbiIsCi0JCSAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKLQkJICApOwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAw KSB7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7 Ci0gICAgICAgIH0KLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZ U0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEs ImRlYnVnIixkYnB0cixOVUxMKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0g ICAgICAgIGJyZWFrOwotCi0vKgotICBUaGlzIG9uZSB3YXMgbmV2ZXIgdXNlZCBzbyAoT2N0b2Jl ciAyMDAwKSB3ZSBub3cgdXNlIGl0IGxpa2UgRjAxMSwKLSAgZXhjZXB0IGluIHRoaXMgY2FzZSB3 ZSB0cmVhdCBzMiBhcyBOVUwgdGVybWluYXRlZC4KLSovCi0gICAgICBjYXNlIEYwMTA6Ci0JbiA9 IC1kZWJ4bGVuOwotLyoKLSAgVGhpcyBvbmUgdHJlYXRzIG4gYXMgdGhlIGxlbmd0aCBvZiB0aGUg c3RyaW5nIHMyLCB3aGljaCBtYXkgY29udGFpbiBOVUxzLgotICBJdCdzIGdvb2QgZm9yIGxvZ2dp bmcgTlVMLWJlYXJpbmcgZGF0YSBpbiB0aGUgZGVidWcgbG9nLgotKi8KLSAgICAgIGNhc2UgRjAx MTogewotCSAgaW50IGksIGosIGNvbnRkID0gMDsKLQkgIGNoYXIgKiBwID0gczIsICpwYnVmID0g TlVMTDsJLyogcCA9IHNvdXJjZSBwb2ludGVyICovCi0JICBpbnQgbTsJCQkvKiBwYnVmID0gZGVz dGluYXRpb24gcG9pbnRlciAqLwotCi0JICBpZiAoZiA9PSBGMDExKSB7Ci0JICAgICAgaWYgKG4g PCAwKSB7CQkvKiBuID0gc2l6ZSBvZiBzb3VyY2UgKi8KLQkJICBuID0gMCAtIG47CQkvKiBOZWdh dGl2ZSBtZWFucyB0byBhZGQgIi4uLiIgKi8KLQkJICBjb250ZCA9IDE7Ci0JICAgICAgfQotCSAg fSBlbHNlIHsKLQkgICAgICBpbnQgeCwgZmxhZyA9IDA7Ci0JICAgICAgeCA9IHN0cmxlbihzMik7 Ci0JICAgICAgaWYgKG4gPCAwKSB7Ci0JCSAgZmxhZyA9IDE7Ci0JCSAgbiA9IDAgLSBuOwotCSAg ICAgIH0KLQkgICAgICBpZiAoeCA8IG4pCi0JCW4gPSB4OwotCSAgfQotCSAgaWYgKG4gPT0gMCkJ CQkvKiAwIG1lYW5zIGRvIG5vdGhpbmcgKi8KLQkgICAgZ290byB4ZGVidWc7Ci0JICBtID0gREJV RkwgLSA4OwkJLyogR2V0IHNpemUgZm9yIGludGVycHJldGVkIHBhcnQgKi8KLQkgIGlmIChuID4g bSkJCQkvKiBFbnN1cmUgcmVxdWVzdGVkIHNpemUgbm90IHRvbyBiaWcgKi8KLQkgICAgbiA9IG07 Ci0JICBwYnVmID0gZGJwdHI7CQkJLyogQ29uc3RydWN0aW9uIHBvaW50ZXIgKi8KLQkgIGkgPSAw OwotCSAgcGJ1ZltpKytdID0gJ1snOwkJLyogSW50ZXJwcmV0IHRoZSBzdHJpbmcgaW50byBpdCAq LwotCSAgZm9yIChqID0gMDsgaiA8IG4gJiYgaSA8IG0tNDsgcCsrLGorKykgeyAvKiBjaGFyIGJ5 IGNoYXIuLi4gKi8KLQkgICAgICBpZiAoKnAgPT0gTEYpIHsKLQkJICBpZiAoaSA+PSBtLTQpCi0J CSAgICBicmVhazsKLQkJICBwYnVmW2krK10gPSAnPCc7Ci0JCSAgcGJ1ZltpKytdID0gJ0wnOwot CQkgIHBidWZbaSsrXSA9ICdGJzsKLQkJICBwYnVmW2krK10gPSAnPic7Ci0JCSAgY29udGludWU7 Ci0JICAgICAgfSBlbHNlIGlmICgqcCA9PSBDUikgewotCQkgIGlmIChpID49IG0tNCkKLQkJICAg IGJyZWFrOwotCQkgIHBidWZbaSsrXSA9ICc8JzsKLQkJICBwYnVmW2krK10gPSAnQyc7Ci0JCSAg cGJ1ZltpKytdID0gJ1InOwotCQkgIHBidWZbaSsrXSA9ICc+JzsKLQkJICBjb250aW51ZTsKLQkg ICAgICB9IGVsc2UgaWYgKCpwID09IEhUKSB7Ci0JCSAgaWYgKGkgPj0gbS01KQotCQkgICAgYnJl YWs7Ci0JCSAgcGJ1ZltpKytdID0gJzwnOwotCQkgIHBidWZbaSsrXSA9ICdUJzsKLQkJICBwYnVm W2krK10gPSAnQSc7Ci0JCSAgcGJ1ZltpKytdID0gJ0InOwotCQkgIHBidWZbaSsrXSA9ICc+JzsK LQkJICBjb250aW51ZTsKLQkgICAgICB9IGVsc2UgaWYgKCpwKSB7Ci0JCSAgcGJ1ZltpKytdID0g KnA7Ci0JCSAgY29udGludWU7Ci0JICAgICAgfSBlbHNlIHsKLQkJICBpZiAoaSA+PSBtLTUpCi0J CSAgICBicmVhazsKLQkJICBwYnVmW2krK10gPSAnPCc7Ci0JCSAgcGJ1ZltpKytdID0gJ04nOwot CQkgIHBidWZbaSsrXSA9ICdVJzsKLQkJICBwYnVmW2krK10gPSAnTCc7Ci0JCSAgcGJ1ZltpKytd ID0gJz4nOwotCQkgIGNvbnRpbnVlOwotCSAgICAgIH0KLQkgIH0KLQkgIGlmIChpIDwgbS0yICYm ICgqcCB8fCBjb250ZCkpIHsKLQkgICAgICBwYnVmW2krK10gPSAnLic7Ci0JICAgICAgcGJ1Zltp KytdID0gJy4nOwotCSAgfQotCSAgcGJ1ZltpKytdID0gJ10nOwotCSAgcGJ1ZltpXSA9IE5VTDsK LQkgIGlmICh6c291dChaREZJTEUsczEpIDwgMCkgewotCSAgICAgIGRlYmxvZyA9IDA7Ci0JICAg ICAgemNsb3NlKFpERklMRSk7Ci0JICB9Ci0JICBpZiAoenNvdXRsKFpERklMRSxwYnVmKSA8IDAp IHsKLQkgICAgICBkZWJsb2cgPSAwOwotCSAgICAgIHpjbG9zZShaREZJTEUpOwotCSAgfQotI2lm ZGVmIENLU1lTTE9HCi0JICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcp IHsKLQkgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsczEscGJ1Zik7Ci0JICB9Ci0j ZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAg Y2FzZSBGMTAwOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQsICJzMSIgKi8KLSAgICAgICAg aWYgKHpzb3V0bChaREZJTEUsczEpIDwgMCkgewotICAgICAgICAgICAgZGVibG9nID0gMDsKLSAg ICAgICAgICAgIHpjbG9zZShaREZJTEUpOwotICAgICAgICB9Ci0jaWZkZWYgQ0tTWVNMT0cKLSAg ICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAg ICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsczEsTlVMTCk7Ci0gICAgICAgIH0KLSNl bmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRjEwMTogICAg ICAgICAgICAgICAgICAgICAgICAvKiA1LCAiczE9biIgKi8KLSAgICAgICAgc3ByaW50ZihzcCwi JXM9JXNcbiIsczEsY2tmc3RvYShuKSk7Ci0gICAgICAgIGlmICh6c291dChaREZJTEUsZGJwdHIp IDwgMCkgewotICAgICAgICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgICAgIHpjbG9zZShaREZJ TEUpOwotICAgICAgICB9Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICAgICAgaWYgKGNreHN5c2xvZyA+ PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICBja3N5c2xvZyhTWVNMR19E QiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAq LwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRjExMDogICAgICAgICAgICAgICAgICAgICAg ICAvKiA2LCAiczFbczJdIiAqLwotICAgICAgICBzcHJpbnRmKHNwLCIlc1slc11cbiIsczEsczIp OwotICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8IDApIHsKLSAgICAgICAgICAgIGRl YmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAgfQotI2lmZGVm IENLU1lTTE9HCi0gICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2lu ZykgewotICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5VTEwp OwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAg ICBjYXNlIEYxMTE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNywgInMxW3MyXT1uIiAqLwot ICAgICAgICBzcHJpbnRmKHNwLCIlc1slc109JXNcbiIsczEsczIsY2tmc3RvYShuKSk7Ci0gICAg ICAgIGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgewotICAgICAgICAgICAgZGVibG9nID0g MDsKLSAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOwotICAgICAgICB9Ci0jaWZkZWYgQ0tTWVNM T0cKLSAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7Ci0g ICAgICAgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1 bHQ6Ci0gICAgICAgIHNwcmludGYoc3AsIlxuP0ludmFsaWQgZm9ybWF0IGZvciBkZWJ1ZygpIC0g JWRcbiIsZik7Ci0gICAgICAgIGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgewotICAgICAg ICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOwotICAgICAgICB9 Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBj a3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJw dHIsTlVMTCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICBicmVh azsKLSAgICB9Ci0gIHhkZWJ1ZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29t bW9uIGV4aXQgcG9pbnQgKi8KLSNpZmRlZiBPUzIKLSAgICBpZiAoU3lzSW5pdGVkKQotCVJlbGVh c2VEZWJ1Z011dGV4KCk7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICBkZWJsb2cgPSAxOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHRoaXMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAg ICByZXR1cm4oMCk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1kb2hleGR1bXAoQ0hBUiAq bXNnLCBDSEFSICpzdCwgaW50IGNudCkKLSNlbHNlCi1kb2hleGR1bXAobXNnLHN0LGNudCkgQ0hB UiAqbXNnOyBDSEFSICpzdDsgaW50IGNudDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZG9o ZXhkdW1wICovIHsKLSAgICBpbnQgaSA9IDAsIGogPSAwLCBrID0gMDsKLSAgICBjaGFyIHRtcFs4 XTsKLSNpZmRlZiBPUzIKLSAgICBleHRlcm4gaW50IFN5c0luaXRlZDsKLSNlbmRpZiAvKiBPUzIg Ki8KLQotICAgIGlmICghZGVibG9nKSByZXR1cm4oMCk7CQkvKiBJZiBubyBkZWJ1ZyBsb2csIGRv bid0LiAqLwotICAgIGlmICghZGJwdHIpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbG9j YXRlIG1lbW9yeSBidWZmZXIgKi8KLSAgICAgICAgZGJwdHIgPSBtYWxsb2MoREJVRkwrMSk7ICAg ICAgICAvKiBUaGlzIG9ubHkgaGFwcGVucyBvbmNlICovCi0gICAgICAgIGlmICghZGJwdHIpIHsK LSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAg ICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmZGVmIE9TMgotICAg IGlmIChTeXNJbml0ZWQpIHsKLQlpZiAoUmVxdWVzdERlYnVnTXV0ZXgoMzAwMDApKQotCSAgICBn b3RvIHhkZWJ1ZzsKLSAgICB9Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICBkZWJsb2cgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBQcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbiAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKG1zZyAhPSBOVUxMKSB7Ci0JY2ttYWt4bXNnKGRicHRy LAotCQkgIERCVUZMLAotCQkgICJIRVhEVU1QOiAiLAotCQkgIChjaGFyICopbXNnLAotCQkgICIg KCIsCi0JCSAgY2tpdG9hKGNudCksCi0JCSAgIiBieXRlcylcbiIsCi0JCSAgTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTAotCQkgKTsKLSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxk YnB0cikgPCAwKSB7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3Nl KFpERklMRSk7Ci0JICAgIGdvdG8geGRlYnVnOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLQlj a21ha21zZyhkYnB0ciwKLQkJIERCVUZMLAotCQkgIkhFWERVTVA6ICgiLAotCQkgY2tpdG9hKGNu dCksCi0JCSAiIGJ5dGVzKVxuIiwKLQkJIE5VTEwKLQkJICk7Ci0gICAgICAgIHpzb3V0KFpERklM RSxkYnB0cik7Ci0gICAgICAgIGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgewotICAgICAg ICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOwotCSAgICBnb3Rv IHhkZWJ1ZzsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY250OyBpKysp IHsKLSAgICAgICAgZGJwdHJbMF0gPSAnXDAnOwotICAgICAgICBmb3IgKGogPSAwIDsgKGogPCAx Nik7IGorKykgewotICAgICAgICAgICAgaWYgKChpICsgaikgPCBjbnQpCi0JICAgICAgc3ByaW50 Zih0bXAsCi0JCSAgICAgICIlcyUwMnggIiwKLQkJICAgICAgKGogPT0gOCA/ICJ8ICIgOiAiIiks Ci0JCSAgICAgIChDSEFSKSBzdFtpICsgal0KLQkJICAgICAgKTsKLSAgICAgICAgICAgIGVsc2UK LQkgICAgICBzcHJpbnRmKHRtcCwKLQkJICAgICAgIiVzICAgIiwKLQkJICAgICAgKGogPT0gOCA/ ICJ8ICIgOiAiIikKLQkJICAgICAgKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChkYnB0cix0bXAs REJVRkwrMSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY2F0KGRicHRyLCIgIixEQlVGTCsx KTsKLSAgICAgICAgZm9yIChrID0gMDsgKGsgPCAxNikgJiYgKChpICsgaykgPCBjbnQpOyBrKysp IHsKLSAgICAgICAgICAgIHNwcmludGYodG1wLAotICAgICAgICAgICAgICAgICAgICAiJXMlYyIs Ci0gICAgICAgICAgICAgICAgICAgIChrID09IDggPyAiICIgOiAiIiksCi0gICAgICAgICAgICAg ICAgICAgIGlzcHJpbnQoc3RbaSArIGtdKSA/IHN0W2kgKyBrXSA6ICcuJwotICAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICAgICAgY2tzdHJuY2F0KGRicHRyLHRtcCxEQlVGTCsxKTsKLSAg ICAgICAgfQotICAgICAgICBja3N0cm5jYXQoZGJwdHIsIlxuIixEQlVGTCsxKTsKLSAgICAgICAg aSArPSBqIC0gMTsKLSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7Ci0gICAg ICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0JICAgIGdv dG8geGRlYnVnOwotICAgICAgICB9Ci0gICAgfSAvKiBlbmQgZm9yICovCi0KLQotICB4ZGVidWc6 Ci0jaWZkZWYgT1MyCi0gICAgaWYgKFN5c0luaXRlZCkKLSAgICAgIFJlbGVhc2VEZWJ1Z011dGV4 KCk7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICBkZWJsb2cgPSAxOwotI2VuZGlmIC8qIE9TMiAqLwot ICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0vKiAgU2Vzc2lvbiBMb2cu Li4gKi8KLQotaW50IHRzc3RhdGUgPSAwOwotCi1WT0lECi0jaWZkZWYgT1MyCi1sb2djaGFyKHVu c2lnbmVkIHNob3J0IGMpCi0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBDS19BTlNJQwotbG9nY2hh cihjaGFyIGMpCi0jZWxzZQotbG9nY2hhcihjKSBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLS8qIGxvZ2NoYXIgKi8geyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBMb2cgY2hhcmFjdGVyIGMgdG8gc2Vzc2lvbiBsb2cgKi8KLSAgICBleHRlcm4gaW50 IHNsb2dudWw7Ci0gICAgaW50IG9rdG9sb2cgPSAwOwotI2lmbmRlZiBOT0xPQ0FMCi0gICAgaWYg KCFzZXNsb2cpCi0gICAgICByZXR1cm47Ci0KLSAgICBpZiAoKHNlc3NmdCAhPSBYWUZUX1QpIHx8 ICgKLSNpZmRlZiBVTklYCi0JIGMgIT0gJ1xyJyAmJgotI2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJh bAotCSBjICE9ICdccicgJiYKLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotCSBjICE9ICdccicgJiYK LSNlbHNlCi0jaWZkZWYgQU1JR0EKLQkgYyAhPSAnXHInICYmCi0jZWxzZQotI2lmZGVmIEdFTURP UwotCSBjICE9ICdccicgJiYKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSNlbmRpZiAvKiBBTUlHQSAq LwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlm IC8qIFVOSVggKi8KLSNpZmRlZiBPU0sKLQkgYyAhPSAnXG4nICYmCi0jZWxzZQotI2lmZGVmIE1B QwotCSBjICE9ICdcbicgJiYKLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBPU0sgKi8KLQkg YyAhPSBYT04gJiYKLQkgYyAhPSBYT0ZGKSkKLSAgICAgIG9rdG9sb2cgPSAxOwotICAgIGlmIChj ID09ICdcMCcgJiYgIXNlc3NmdCkJCS8qIE5VTCBpbiB0ZXh0IG1vZGUgKi8KLSAgICAgIGlmIChz bG9nbnVsKSBva3RvbG9nID0gMTsJCS8qIG9ubHkgaWYgcGFkZGluZyAoMjAwOS8xMC8yMikgKi8K LSAgICBpZiAoIW9rdG9sb2cpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHNsb2d0cykgewkJCS8q IExvZyBpcyB0aW1lc3RhbXBlZCAqLwotCWlmICh0c3N0YXRlID09IDApIHsJCS8qIFN0YXRlID0g YmV0d2Vlbi1saW5lcyAqLwotCSAgICBjaGFyICogcDsJCQkvKiB6c3RpbWUoKSBwb2ludGVyICov Ci0JICAgIGNoYXIgdHNbNDhdOwkJLyogdGltZXN0YW1wIGJ1ZmZlciAqLwotCSAgICB6dGltZSgm cCk7CQkJLyogR2V0IGFzY3RpbWUoKSBzdHJpbmcgKi8KLQkgICAgY2tzdHJuY3B5KHRzLHAsMzIp OwkJLyogTWFrZSBzYWZlIGNvcHkgKi8KLQkgICAgaWYgKHp0bXNlYyA+IC0xTCkgewkJLyogQWRk IG1zZWNzIGlmIHdlIGhhdmUgdGhlbSAqLwotCQlzcHJpbnRmKCZ0c1sxOV0sIi4lMDNsZDogIix6 dG1zZWMpOyAvKiBTQUZFICovCi0JICAgIH0gZWxzZSB7Ci0JCXRzWzE5XSA9ICc6JzsKLQkJdHNb MjBdID0gU1A7Ci0JCXRzWzIxXSA9IE5VTDsKLQkgICAgfQotCSAgICBpZiAoenNvdXQoWlNGSUxF LCZ0c1sxMV0pIDwgMCkKLQkgICAgICBnb3RvIHhsb2djaGFyOwotCX0KLSAgICB9Ci0gICAgaWYg KGMgPT0gJ1xuJykJCQkvKiBBdCBlbmQgb2YgbGluZT8gKi8KLSAgICAgIHRzc3RhdGUgPSAwOwkJ CS8qIHllcyAqLwotICAgIGVsc2UKLSAgICAgIHRzc3RhdGUgPSAxOwkJCS8qIG5vICovCi0gICAg aWYgKHpjaG91dChaU0ZJTEUsKENIQVIpKGMgJiAweEZGKSkgPCAwKSAvKiBMb2cgdGhlIGNoYXJh Y3RlciAqLwotICAgICAgZ290byB4bG9nY2hhcjsKLSAgICBpZiAodHNzdGF0ZSA9PSAwICYmIHNs b2dudWwgIT0gMCkgewkvKiBOdWxsLXRlcm1pbmF0aW5nIGxpbmVzPyAqLwotCWlmICh6Y2hvdXQo WlNGSUxFLChDSEFSKTApIDwgMCkJLyogQWRkIGEgTlVMICovCi0JICBnb3RvIHhsb2djaGFyOwot ICAgIH0KLSAgICByZXR1cm47Ci0KLSAgeGxvZ2NoYXI6Ci0gICAgY29ub2xsKCIiKTsKLSAgICBj b25vbGwoIkVSUk9SIFdSSVRJTkcgU0VTU0lPTiBMT0csIExPRyBDTE9TRUQhIik7Ci0gICAgc2V0 c2VzbG9nKDApOwotICAgIHpjbG9zZShaU0ZJTEUpOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLX0K LQotVk9JRAotbG9nc3RyKHMsIGxlbikgY2hhciAqIHM7IGludCBsZW47IHsgICAgIC8qIExvZyBz dHJpbmcgdG8gc2Vzc2lvbiBsb2cgKi8KLSNpZm5kZWYgTk9MT0NBTAotICAgIGludCBuID0gMDsK LSAgICBpZiAoIXMpCi0gICAgICByZXR1cm47Ci0gICAgd2hpbGUgKHNlc2xvZyAmJiAobiA8IGxl bikpCi0gICAgICBsb2djaGFyKHNbbisrXSk7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotfQotCi0j aWZkZWYgQ0tfQ1VSU0VTCi1pbnQKLWNrX3JlcGFpbnQoKSB7Ci0gICAgcmVwYWludCA9IDE7Ci0g ICAgcmV0dXJuKDApOwotfQotCi0jaWZkZWYgU1RSQVRVUwotLyogVk9TIGhhcyBjdXJzZXMgYnV0 IG5vIHRnZXRlbnQoKSAqLwotaW50Ci10Z2V0ZW50KHMxLCBzMikgY2hhciAqIHMxLCAqIHMyOyB7 Ci0gICAgcmV0dXJuKDEpOwotfQotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLQotI2lmZGVmIFZNUwot I2lmZGVmIF9fREVDQwotX1BST1RPVFlQKGludCB0Z2V0ZW50LChjaGFyICosIGNoYXIgKikpOwot I2VuZGlmIC8qIF9fREVDQyAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi0vKgotICBUaGVyZSBhcmUg dGhyZWUgZGlmZmVyZW50IHdheXMgdG8gZG8gZnVsbHNjcmVlbiBvbiBWTVMuCi0gIDEuIFVzZSB0 aGUgcmVhbCBjdXJzZXMgbGlicmFyeSwgVkFYQ0NVUlNFLgotICAyLiBVc2UgZG8taXQteW91cnNl bGYgY29kZS4KLSAgMy4gVXNlIHRoZSBTY3JlZW4gTWFuYWdlciwgU01HJC4KLQotICBNZXRob2Qg MSBkb2Vzbid0IHdvcmsgcXVpdGUgcmlnaHQ7IHlvdSBjYW4ndCBjYWxsIGVuZHdpbigpLCBzbyBv bmNlIHlvdSd2ZQotICBzdGFydGVkIGN1cnNlcyBtb2RlLCB5b3UgY2FuIG5ldmVyIGxlYXZlLgot Ci0gIE1ldGhvZCAyIGRvZXNuJ3Qgb3B0aW1pemUgdGhlIHNjcmVlbiwgYW5kIHNvIG11Y2ggbW9y ZSB0aW1lIGlzIHNwZW50IGluCi0gIHNjcmVlbiB3cml0ZXMuICBUaGlzIGFjdHVhbGx5IGNhdXNl cyBmaWxlIHRyYW5zZmVycyB0byBmYWlsIGJlY2F1c2UgdGhlCi0gIHR0eSBkZXZpY2UgaW5wdXQg YnVmZmVyIGNhbiBiZSBvdmVycnVuIHdoaWxlIHRoZSBzY3JlZW4gaXMgYmVpbmcgdXBkYXRlZCwK LSAgZXNwZWNpYWxseSBvbiBhIHNsb3cgTWljcm9WQVggdGhhdCBoYXMgc21hbGwgdHlwZWFoZWFk IGJ1ZmZlcnMuCi0KLSAgSW4gdGhlIGZvbGxvd2luZyAjaWZkZWYgYmxvY2ssICNkZWZpbmUgb25l IG9mIHRoZW0gYW5kICN1bmRlZiB0aGUgb3RoZXIgMi4KLQotICBTbyBub3cgbGV0J3MgdHJ5IG1l dGhvZCAzLi4uCi0qLwotI2lmZGVmIFZNUwotI2RlZmluZSBDS19TTUcgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNjcmVlbiBNYW5hZ2VyICovCi0jdW5kZWYgTVlDVVJTRVMgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRG8taXQteW91cnNlbGYgKi8KLSN1bmRlZiBWTVNDVVJTRSAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBWQVhDQ1VSU0UgbGlicmFyeSAqLwotI2VuZGlmIC8qIFZN UyAqLwotLyoKLSAgQnV0IGp1c3QgYmVmb3JlIE5ldyBZZWFycywgMjAwMCwgdGhlIFNNRyBsaWJy YXJ5IHNlZW1lZCB0byBicmVhayBvbgotICBib3RoIFZNUyBzeXN0ZW1zIHdlIGhhdmUgaGVyZSAo YW4gQWxwaGEgd2l0aCBWTVMgNy4xIGFuZCBhIFZBWCB3aXRoIDUuNSkuCi0gIFNvIGJhY2sgdG8g TVlDVVJTRVMsIHdoaWNoIHdvcmtzIGZpbmUuCi0qLwotI2lmZGVmIFZNUwotI3VuZGVmIENLX1NN RwotI2RlZmluZSBNWUNVUlNFUwotI2VuZGlmIC8qIFZNUyAqLwotCi0jaWZkZWYgTVlDVVJTRVMK LSNkZWZpbmUgc3Rkc2NyIDAKLSNpZmRlZiBDS19XUkVGUkVTSAotI3VuZGVmIENLX1dSRUZSRVNI Ci0jZW5kaWYgLyogQ0tfV1JFRlJFU0ggKi8KLSNlbmRpZiAvKiBNWUNVUlNFUyAqLwotCi0vKiAg UyBDIFIgRSBFIE4gQyAgLS0gIFNjcmVlbiBkaXNwbGF5IGZ1bmN0aW9uLCB1c2VzIGN1cnNlcyAg Ki8KLQotLyogSWRlYSBmb3IgY3Vyc2VzIGRpc3BsYXkgY29udHJpYnV0ZWQgYnkgQ2hyaXMgUHJh dHQgb2YgQVBWIEJha2VyLCBVSyAqLwotCi0vKiBBdm9pZCBjb25maWN0cyB3aXRoIGN1cnNlcy5o ICovCi0KLSNpZmRlZiBRTlgKLS8qIFNhbWUgYXMgY2tjYXNjLmgsIGJ1dCBpbiBhIGRpZmZlcmVu dCByYWRpeC4uLiAqLwotI2lmZGVmIEVTQwotI3VuZGVmIEVTQwotI2VuZGlmIC8qIEVTQyAqLwot I2VuZGlmIC8qIFFOWCAqLwotCi0jaWZuZGVmIE1ZQ1VSU0VTCi0jdW5kZWYgVk9JRCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyB3YXMgZGVmaW5lZCBpbiBja2NkZWIuaCAqLwot I2VuZGlmIC8qIE1ZQ1VSU0VTICovCi0KLSN1bmRlZiBCUyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBUaGVzZSB3ZXJlIGRlZmluZWQgaW4gY2tjYXNjLmggKi8KLSN1bmRlZiBDUgot I3VuZGVmIE5MCi0jdW5kZWYgU08KLSNpZmRlZiBVUwotI3VuZGVmIFVTCi0jZW5kaWYJLyogVVMg Ki8KLSN1bmRlZiBTUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2VkIGluIG5j dXJzZXMgKi8KLSNkZWZpbmUgQ0hSX1NQIDMyICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2Ug dGhpcyBpbnN0ZWFkICovCi0KLSNpZmRlZiBWTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBWTVMgZnVsbHNjcmVlbiBkaXNwbGF5ICovCi0jaWZkZWYgTVlDVVJTRVMgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRG8taXQteW91cnNlbGYgbWV0aG9kICovCi1leHRlcm4gaW50IGlz dnQ1MjsgICAgICAgICAgICAgICAgICAgICAgLyogRnJvbSBDS1ZUSU8uQyAqLwotI2RlZmluZSBw cmludHcgcHJpbnRmCi0jZWxzZQotI2lmZGVmIFZNU0NVUlNFICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFZNUyBjdXJzZXMgbGlicmFyeSBWQVhDQ1VSU0UgKi8KLSNpbmNsdWRlIDxjdXJzZXMu aD4KLS8qIE5vdGU6IFNjcmVlbiBtYW5hZ2VyIGRvZXNuJ3QgbmVlZCBhIGhlYWRlciBmaWxlICov Ci0jZW5kaWYgLyogVk1TQ1VSU0UgKi8KLSNlbmRpZiAvKiBNWUNVUlNFUyAqLwotI2Vsc2UgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBWTVMgKi8KLSNpZmRlZiBNWUNV UlNFUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEby1pdC15b3Vyc2VsZiBtZXRob2QgKi8K LSNkZWZpbmUgaXN2dDUyIDAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2VkIGJ5IE9TLzIs IFZULTEwMC9BTlNJIGFsd2F5cyAqLwotI2lmZGVmIENLWFBSSU5URgotI2RlZmluZSBwcmludHcg Y2t4cHJpbnRmCi0jZWxzZSAvKiBDS1hQUklOVEYgKi8KLSNpZmRlZiBLVUkKLSNkZWZpbmUgcHJp bnR3IFZzY3JucHJpbnR3Ci0jZWxzZSAvKiBLVUkgKi8KLSNkZWZpbmUgcHJpbnR3IHByaW50Zgot I2VuZGlmIC8qIEtVSSAqLwotI2VuZGlmIC8qIENLWFBSSU5URiAqLwotI2Vsc2UgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZSByZWFsIGN1cnNlcyAqLwotI2lmZGVmIENL X05DVVJTRVMgICAgICAgICAgICAgICAgICAgICAgIC8qIG9yIG5jdXJzZXMuLi4gKi8KLSNpZmRl ZiBDS1hQUklOVEYgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXIgcHJpbnRmIG1hY3JvIGNv bmZsaWN0cyB3aXRoICovCi0jdW5kZWYgcHJpbnRmICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdXNlIG9mICJwcmludGYiIGluIG5jdXJzZXMuaCAqLwotI2VuZGlmIC8qIENLWFBSSU5URiAq LwotI2luY2x1ZGUgPG5jdXJzZXMuaD4KLSNpZmRlZiBDS1hQUklOVEYKLSNkZWZpbmUgcHJpbnRm IGNreHByaW50ZgotI2VuZGlmIC8qIENLWFBSSU5URiAqLwotI2Vsc2UgIC8qIE5vdCBuY3Vyc2Vz ICovCi0jaWZkZWYgQ0tYUFJJTlRGICAgICAgICAgICAgICAgICAgICAgICAgLyogT3VyIHByaW50 ZiBtYWNybyBjb25mbGljdHMgd2l0aCAqLwotI3VuZGVmIHByaW50ZiAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHVzZSBvZiAicHJpbnRmIiBpbiBjdXJzZXMuaCAqLwotI2VuZGlmIC8qIENL WFBSSU5URiAqLwotI2lmZGVmIE1fWEVOSVgJCQkJLyogU0NPIFhFTklYLi4uICovCi0jaWZkZWYg TV9URVJNQ0FQCi0jdW5kZWYgTV9URVJNQ0FQCi0jZW5kaWYgLyogTV9URVJNQ0FQICovCi0jaWZu ZGVmIE1fVEVSTUlORk8KLSNkZWZpbmUgTV9URVJNSU5GTwotI2VuZGlmIC8qIE1fVEVSTUlORk8g Ki8KLSNlbmRpZiAvKiBNX1hFTklYICovCi0jaWZkZWYgUlRBSVgKLSN1bmRlZiBOTFMJCQkJLyog QXZvaWQgJ3JlZGVjbGFyYXRpb24gb2YgZnJlZScuICovCi0jZW5kaWYgLyogUlRBSVggKi8KLSNp bmNsdWRlIDxjdXJzZXMuaD4KLSNpZmRlZiBDS1hQUklOVEYKLSNkZWZpbmUgcHJpbnRmIGNreHBy aW50ZgotI2VuZGlmIC8qIENLWFBSSU5URiAqLwotI2VuZGlmIC8qIENLX05DVVJTRVMgKi8KLSNl bmRpZiAvKiBNWUNVUlNFUyAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi0jaWZkZWYgQlVHOTk5Ci1f UFJPVE9UWVAoaW50IHRnZXRlbnQsKGNoYXIgKiwgY2hhciAqKSk7Ci1fUFJPVE9UWVAoY2hhciAq dGdldHN0ciwoY2hhciAqLCBjaGFyICoqKSk7Ci1fUFJPVE9UWVAoaW50IHRwdXRzLChjaGFyICos IGludCwgaW50ICgqKSgpKSk7Ci1fUFJPVE9UWVAoY2hhciAqdGdvdG8sKGNvbnN0IGNoYXIgKiwg aW50LCBpbnQpKTsKLSNlbmRpZgkvKiBCVUc5OTkgKi8KLQotI2VuZGlmIC8qIENLX0NVUlNFUyAq LwotCi0vKiAgRiBYIEQgSSBOIEkgVCAgLS0gIEZpbGUgWGZlciBEaXNwbGF5IEluaXRpYWxpemF0 aW9uICAqLwotCi0jaWZkZWYgQ0tfQ1VSU0VTCi0jaWZuZGVmIE1ZQ1VSU0VTCi0jaWZuZGVmIENL X1NNRwotc3RhdGljCi0jaWZkZWYgQ0tfQU5TSUMKLS8qIENhbid0IHVzZSBWT0lEIGJlY2F1c2Ug b2YgY3Vyc2VzLmggKi8KLXZvaWQKLWNrX3Rlcm1zZXQoaW50KTsKLSNlbHNlCi1ja190ZXJtc2V0 KCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNlbmRpZiAvKiBDS19TTUcgKi8KLSNlbmRpZiAv KiBNWUNVUlNFUyAqLwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi0jaWZkZWYgTk9URVJNQ0FQ Ci1zdGF0aWMgaW50IG5vdGVybWNhcCA9IDE7Ci0jZWxzZQotc3RhdGljIGludCBub3Rlcm1jYXAg PSAwOwotI2VuZGlmIC8qIE5PVEVSTUNBUCAqLwotCi0jaWZuZGVmIE5PRElTUExBWQotQ0tWT0lE Ci1meGRpbml0KHhkaXNwbGEpIGludCB4ZGlzcGxhOyB7Ci0jaWZuZGVmIENPSEVSRU5UCi0jaWZu ZGVmIE9TMgotI2lmbmRlZiBTVFJBVFVTCi0gICAgY2hhciAqczsKLSAgICBpbnQgeCwgZHVtbXk7 Ci0KLSAgICBkZWJ1ZyhGMTAxLCJmeGRpbml0IHhkaXNwbGEiLCIiLHhkaXNwbGEpOwotICAgIGRl YnVnKEYxMDEsImZ4ZGluaXQgZnhkX2luaXRlZCIsIiIsZnhkX2luaXRlZCk7Ci0KLSNpZmRlZiBJ S1NECi0jaWZuZGVmIE5PWEZFUgotICAgIC8qIE5vIGN1cnNlcyBmb3IgSUtTRCAqLwotICAgIGlm IChpbnNlcnZlcikgewotICAgICAgICBmZGlzcGxhID0gWFlGRF9OOwotICAgICAgICByZXR1cm47 Ci0gICAgfQotICAgIGlmIChmeGRfaW5pdGVkKSAgICAgICAgICAgICAgICAgICAgIC8qIE9ubHkg ZG8gdGhpcyBvbmNlICovCi0gICAgICByZXR1cm47Ci0jZW5kaWYgLyogTk9YRkVSICovCi0jZW5k aWYgLyogSUtTRCAqLwotCi0gICAgaWYgKHhkaXNwbGEgPT0gWFlGRF9SIHx8IHhkaXNwbGEgPT0g WFlGRF9TIHx8IHhkaXNwbGEgPT0gWFlGRF9CKSB7Ci0JaWYgKHhmcm1zZykgewotCSAgICBwcmlu dGYoIiVzXG4iLHhmcm1zZyk7Ci0JICAgIG1ha2VzdHIoJnhmcm1zZyxOVUxMKTsKLQl9Ci0gICAg fQotCi0jaWZkZWYgQ0tfQ1VSU0VTCi0jaWZkZWYgVk1TCi0gICAgLyogRm9yY2UgQlJJRUYgaW4g QmF0Y2ggbG9ncyAqLwotICAgIGlmIChiYXRjaCAmJiAoeGRpc3BsYSA9PSBYWUZEX0MgfHwgeGRp c3BsYSA9PSBYWUZEX1MpKQotICAgICAgeGRpc3BsYSA9IFhZRkRfQjsKLSNlbHNlCi0gICAgaWYg KHhkaXNwbGEgPT0gWFlGRF9DIHx8IHhkaXNwbGEgPT0gOTk5OSkgewotCi0jaWZkZWYgRFlOQU1J QwotICAgICAgICBpZiAoIXRybWJ1ZikgewotLyoKLSAgQWxsb2NhdGUgdGdldGVudCgpIGJ1ZmZl ci4gIE1ha2UgaXQgYmlnIC0tIHNvbWUgdGVybWNhcHMgY2FuIGJlIGh1Z2U7Ci0gIHRnZXRlbnQo KSBtZXJyaWx5IHdyaXRlcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgY2F1c2luZyBjb3Jl IGR1bXBzCi0gIG9yIHdvcnNlLgotKi8KLSAgICAgICAgICAgIHRybWJ1ZiA9IChjaGFyICopbWFs bG9jKFRSTUJVRkwpOwotICAgICAgICAgICAgaWYgKCF0cm1idWYpIHsKLSAgICAgICAgICAgICAg ICBub3Rlcm1jYXAgPSAxOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ4ZGluaXQgbWFs bG9jIHRybWJ1ZiIsIkZBSUxFRCIsVFJNQlVGTCk7Ci0gICAgICAgICAgICAgICAgZmRpc3BsYSA9 IFhZRkRfUzsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0jaWZkZWYg Q09NTUVOVAotICAgICAgICAgICAgZGVidWcoRjExMSwiZnhkaW5pdCBtYWxsb2MgdHJtYnVmIiwi T0siLFRSTUJVRkwpOwotICAgICAgICAgICAgZGVidWcoRjAwMSwiZnhkaW5pdCB0cm1idWYiLCIi LHRybWJ1Zik7Ci0gICAgICAgICAgICBtZW1zZXQodHJtYnVmLCdcMCcsKHNpemVfdClUUk1CVUZM KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsImZ4ZGluaXQgbWVtc2V0IE9LIiwiIiwwKTsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIH0KLSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSAg ICAgICAgZGVidWcoRjEwMCwiZnhkaW5pdCBiZWZvcmUgZ2V0ZW52KFRFUk0pIiwiIiwwKTsKLSAg ICAgICAgcyA9IGdldGVudigiVEVSTSIpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJmeGRpbml0IGFm dGVyIGdldGVudihURVJNKSIscywwKTsKLSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAg IGlmICgqcykgewotICAgICAgICAgICAgZGVidWcoRjExMCwiZnhkaW5pdCBiZWZvcmUgdGdldGVu dCgpIixzLDApOwotICAgICAgICAgICAgeCA9IHRnZXRlbnQodHJtYnVmLHMpOwotICAgICAgICAg ICAgZGVidWcoRjExMSwiZnhkaW5pdCB0Z2V0ZW50IixzLHgpOwotICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAgICBub3Rlcm1jYXAgPSAxOwotICAgICAgICAg ICAgZGVidWcoRjExMCwiZnhkaW5pdCBURVJNIG51bGwgLSBubyB0Z2V0ZW50IixzLDApOwotICAg ICAgICB9Ci0gICAgICAgIGlmICh4IDwgMSAmJiAhcXVpZXQgJiYgIWJhY2tncmQKLSNpZmRlZiBW TVMKLSAgICAgICAgICAgICYmICFiYXRjaAotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICAgICAg KSB7Ci0gICAgICAgICAgICBwcmludGYoIldhcm5pbmc6IHRlcm1pbmFsIHR5cGUgdW5rbm93bjog XCIlc1wiXG4iLHMpOwotI2lmZGVmIENPTU1FTlQKLQkgICAgLyogQ29uZnVzaW5nIC0gbm9ib2R5 IGtub3dzIHdoYXQgdGhpcyBtZWFucyAqLwotICAgICAgICAgICAgcHJpbnRmKCJTQ1JFRU4gY29t bWFuZCB3aWxsIHVzZSBBTlNJIHNlcXVlbmNlcy5cbiIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSAgICAgICAgICAgIGlmIChsb2NhbCkKLSAgICAgICAgICAgICAgcHJpbnRmKCJGdWxsc2NyZWVu IGZpbGUgdHJhbnNmZXIgZGlzcGxheSBkaXNhYmxlZC5cbiIpOwotICAgICAgICAgICAgZmRpc3Bs YSA9IFhZRkRfUzsKLSAgICAgICAgfQotI2lmbmRlZiBNWUNVUlNFUwotI2lmbmRlZiBDS19TTUcK LSAgICAgICAgY2tfdGVybXNldCh4KTsKLSNlbmRpZiAvKiBDS19TTUcgKi8KLSNlbmRpZiAvKiBN WUNVUlNFUyAqLwotICAgICAgICBmeGRfaW5pdGVkID0gMTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tf Q1VSU0VTICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlm IC8qIE9TMiAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi19Ci0jZW5kaWYgLyogTk9ESVNQTEFZ ICovCi0KLSNpZmRlZiBDS19DVVJTRVMKLSNpZmRlZiBDS19TTUcKLS8qCi0gIExvbmcgc2VjdGlv biBmb3IgU2NyZWVuIE1hbmFnZXIgc3RhcnRzIGhlcmUuLi4KLSAgQnkgV2lsbGlhbSBCYWRlci4K LSovCi0jaW5jbHVkZSAiY2t2dm1zLmgiCi0jaWZkZWYgT0xEX1ZNUwotI2luY2x1ZGUgPHNtZ2Rl Zi5oPiAgICAgICAgICAgICAgICAgICAgIC8qIHVzZSB0aGlzIG9uIFZBWCBDIDIuNCAqLwotLyog I2luY2x1ZGUgPHNtZ21zZy5oPiAqLwotI2Vsc2UKLSNpbmNsdWRlIDxzbWckcm91dGluZXMuaD4g ICAgICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCi0jZW5kaWYgLyogT0xEX1ZNUyAqLwot Ci1leHRlcm4gdW5zaWduZWQgaW50IHZtc19zdGF0dXM7ICAgICAvKiBVc2VkIGZvciBzeXN0ZW0g c2VydmljZSByZXR1cm4gc3RhdHVzICovCi0KLXN0YXRpYyBsb25nIHNtZ19wYXN0ZWJvYXJkX2lk ID0gLTE7ICAgICAvKiBwYXN0ZWJvYXJkIGlkZW50aWZpZXIgKi8KLXN0YXRpYyBsb25nIHNtZ19k aXNwbGF5X2lkID0gLTE7ICAgICAgICAvKiBkaXNwbGF5IGlkZW50aWZpZXIgKi8KLXN0YXRpYyBp bnQgc21nX29wZW4gPSAwOyAgICAgICAgICAgICAgICAvKiBmbGFnIGlmIHNtZyBjdXJyZW50IG9w ZW4gKi8KLXN0YXRpYyBpbnQgc21nX2luaXRlZCA9IDA7ICAgICAgICAgICAgICAvKiBmbGFnIGlm IHNtZyBpbml0aWFsaXplZCAqLwotCi0jaWZkZWYgQ09NTUVOVAotI2RlZmluZSBjbHJ0b2VvbCgp ICAgICAgU01HJEVSQVNFX0xJTkUoJnNtZ19kaXNwbGF5X2lkLCAwLCAwKQotCi0jZGVmaW5lIGNs ZWFyKCkgICAgICAgICBTTUckRVJBU0VfRElTUExBWSgmc21nX2Rpc3BsYXlfaWQsIDAsIDAsIDAs IDApCi0KLSNkZWZpbmUgdG91Y2h3aW4oc2NyKSAgIFNNRyRSRVBBSU5UX1NDUkVFTigmc21nX3Bh c3RlYm9hcmRfaWQpCi0KLSNlbHNlICAvKiBOb3QgQ09NTUVOVCAqLwotCi0jZGVmaW5lIGNscnRv ZW9sKCkgICAgICBzbWckZXJhc2VfbGluZSgmc21nX2Rpc3BsYXlfaWQsIDAsIDApCi0KLSNkZWZp bmUgY2xlYXIoKSAgICAgICAgIHNtZyRlcmFzZV9kaXNwbGF5KCZzbWdfZGlzcGxheV9pZCwgMCwg MCwgMCwgMCkKLQotI2RlZmluZSB0b3VjaHdpbihzY3IpICAgc21nJHJlcGFpbnRfc2NyZWVuKCZz bWdfcGFzdGVib2FyZF9pZCkKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNkZWZpbmUgY2xlYXJv ayhjdXJzY3Isb2spICAgICAgICAgICAgICAvKiBMZXQgd3JlZnJlc2goKSBkbyB0aGUgd29yayAq LwotCi0jZGVmaW5lIHdyZWZyZXNoKGN1cnNyYykgdG91Y2h3aW4oc2NyKQotCi1zdGF0aWMgdm9p ZAotbW92ZShyb3csIGNvbCkgaW50IHJvdywgY29sOyB7Ci0gICAgLyogQ2hhbmdlIGZyb20gMC1i YXNlZCBmb3IgY3Vyc2VzIHRvIDEtYmFzZWQgZm9yIFNNRyAqLwotICAgIGlmICghc21nX29wZW4p Ci0gICAgICByZXR1cm47Ci0gICAgKytyb3c7ICsrY29sOwotICAgIGRlYnVnKEYxMTEsIlZNUyBz bWcgbW92ZSIsY2tpdG9hKHJvdyksY29sKTsKLSNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCi0gICAgQ0hFQ0tfRVJSKCJtb3ZlOiBzbWck c2V0X2N1cnNvcl9hYnMiLAotICAgICAgICAgICAgICBTTUckU0VUX0NVUlNPUl9BQlMoJnNtZ19k aXNwbGF5X2lkLCAmcm93LCAmY29sKSk7Ci0jZWxzZQotICAgIENIRUNLX0VSUigibW92ZTogc21n JHNldF9jdXJzb3JfYWJzIiwKLSAgICAgICAgICAgICAgc21nJHNldF9jdXJzb3JfYWJzKCZzbWdf ZGlzcGxheV9pZCwgJnJvdywgJmNvbCkpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBkZWJ1 ZyhGMTAxLCJWTVMgc21nIG1vdmUgdm1zX3N0YXR1cyIsIiIsdm1zX3N0YXR1cyk7Ci19Ci0KLSNp ZmRlZiBWTVNfVjQwCi0jZGVmaW5lIE9MRF9WTVMKLSNlbmRpZiAvKiBWTVNfVjQwICovCi0jaWZk ZWYgVk1TX1Y0MgotI2RlZmluZSBPTERfVk1TCi0jZW5kaWYgLyogVk1TX1Y0MiAqLwotI2lmZGVm IFZNU19WNDQKLSNkZWZpbmUgT0xEX1ZNUwotI2VuZGlmIC8qIFZNU19WNDQgKi8KLQotc3RhdGlj IGludAotaW5pdHNjcigpIHsKLSAgICBpbnQgcm93cyA9IDI0LCBjb2xzID0gODA7Ci0gICAgaW50 IHJvdyA9IDEsIGNvbCA9IDE7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWdfcGFz dGVib2FyZF9pZCBBIiwiIixzbWdfcGFzdGVib2FyZF9pZCk7Ci0KLSAgICBpZiAoc21nX3Bhc3Rl Ym9hcmRfaWQgPT0gLTEpIHsgLyogT3BlbiB0aGUgc2NyZWVuICovCi0jaWZkZWYgT0xEX1ZNUyAg ICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IFJvdXRpbmUgY2FsbHMgbG93ZXJjYXNlZCA5Lzk2 ICovCi0gICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJGNyZWF0ZV9wYXN0ZWJvYXJkIiwK LSAgICAgICAgICAgICAgICAgIHNtZyRjcmVhdGVfcGFzdGVib2FyZCgmc21nX3Bhc3RlYm9hcmRf aWQsIDAsIDAsIDAsIDApKTsKLSNlbHNlCi0gICAgICAgIC8qIEZvciBWTVMgVjUsIG5vdCB0ZXN0 ZWQgKi8KLSAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckY3JlYXRlX3Bhc3RlYm9hcmQi LAotICAgICAgICAgICAgICAgICAgc21nJGNyZWF0ZV9wYXN0ZWJvYXJkKCZzbWdfcGFzdGVib2Fy ZF9pZCwgMCwgMCwgMCwgMCwgMCkpOwotI2VuZGlmIC8qIE9MRF9WTVMgKi8KLSAgICB9Ci0gICAg ZGVidWcoRjEwMSwiVk1TIGluaXRzY3Igc21nX3Bhc3RlYm9hcmRfaWQgQiIsIiIsc21nX3Bhc3Rl Ym9hcmRfaWQpOwotICAgIGlmIChzbWdfcGFzdGVib2FyZF9pZCA9PSAtMSkgewotCXByaW50Zigi P0Vycm9yIGluaXRpYWxpemluZyBmdWxsc2NyZWVuIGRpc3BsYXlcbiIpOwotCWZkaXNwbGEgPSBY WUZEX1M7Ci0JZHB5aW5pdCgpOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwi Vk1TIGluaXRzY3Igc21nX2Rpc3BsYXlfaWQiLCIiLHNtZ19kaXNwbGF5X2lkKTsKLSAgICBpZiAo c21nX2Rpc3BsYXlfaWQgPT0gLTEpIHsgICAgICAgICAvKiBDcmVhdGUgYSBkaXNwbGF5IHdpbmRv dyAqLwotCi0jaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFydGlu IFppbnNlciAqLwotICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRjcmVhdGVfdmlydHVh bF9kaXNwbGF5IiwKLSAgICAgICAgICAgICAgICAgIFNNRyRDUkVBVEVfVklSVFVBTF9ESVNQTEFZ KCZyb3dzLCAmY29scywgJnNtZ19kaXNwbGF5X2lkLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCkpOwotCi0gICAgICAgIC8qIENvbm5lY3QgdGhl IGRpc3BsYXkgd2luZG93IHRvIHRoZSBzY3JlZW4gKi8KLSAgICAgICAgQ0hFQ0tfRVJSKCJpbml0 c2NyOiBzbWckcGFzdGVfdmlydHVhbF9kaXNwbGF5IiwKLSAgICAgICAgICAgICAgICAgIFNNRyRQ QVNURV9WSVJUVUFMX0RJU1BMQVkoJnNtZ19kaXNwbGF5X2lkLCZzbWdfcGFzdGVib2FyZF9pZCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJvdywmY29sKSk7 Ci0jZWxzZQotICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRjcmVhdGVfdmlydHVhbF9k aXNwbGF5IiwKLSAgICAgICAgICAgICAgICAgIHNtZyRjcmVhdGVfdmlydHVhbF9kaXNwbGF5KCZy b3dzLCAmY29scywgJnNtZ19kaXNwbGF5X2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMCwgMCwgMCkpOwotCi0gICAgICAgIC8qIENvbm5lY3QgdGhlIGRp c3BsYXkgd2luZG93IHRvIHRoZSBzY3JlZW4gKi8KLSAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2Ny OiBzbWckcGFzdGVfdmlydHVhbF9kaXNwbGF5IiwKLSAgICAgICAgICAgICAgICAgIHNtZyRwYXN0 ZV92aXJ0dWFsX2Rpc3BsYXkoJnNtZ19kaXNwbGF5X2lkLCZzbWdfcGFzdGVib2FyZF9pZCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJvdywmY29sKSk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBz bWdfb3BlbiBBIiwiIixzbWdfb3Blbik7Ci0gICAgaWYgKCFzbWdfb3BlbikgeyAgICAgICAgICAg ICAgICAgICAgLyogU3RhcnQgYSBiYXRjaCB1cGRhdGUgKi8KLSAgICAgICAgc21nX29wZW4gPSAx OwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckYmVnaW5f cGFzdGVib2FyZF91cGRhdGUiLAotICAgICAgICAgICAgICAgICAgU01HJEJFR0lOX1BBU1RFQk9B UkRfVVBEQVRFKCZzbWdfcGFzdGVib2FyZF9pZCkpOwotI2Vsc2UKLSAgICAgICAgQ0hFQ0tfRVJS KCJpbml0c2NyOiBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUiLAotICAgICAgICAgICAgICAg ICAgc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlKCZzbWdfcGFzdGVib2FyZF9pZCkpOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQlkZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWckYmVnaW5fcGFz dGVib2FyZF91cGRhdGUiLCIiLHZtc19zdGF0dXMpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJW TVMgaW5pdHNjciBzbWdfb3BlbiBCIiwiIixzbWdfb3Blbik7Ci0gICAgc21nX2luaXRlZCA9IDE7 Ci0gICAgcmV0dXJuKDEpOwotfQotCi1zdGF0aWMgdm9pZAotcmVmcmVzaCgpIHsKLSAgICBkZWJ1 ZyhGMTAxLCJyZWZyZXNoIHNtZ19wYXN0ZWJvYXJkX2lkIiwiIixzbWdfcGFzdGVib2FyZF9pZCk7 Ci0KLSAgICBpZiAoc21nX29wZW4gPT0gMCB8fCBzbWdfcGFzdGVib2FyZF9pZCA9PSAtMSkKLSAg ICAgIHJldHVybjsKLQotI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE1hcnRpbiBaaW5zZXIgKi8KLSAgICBDSEVDS19FUlIoInJlZnJlc2g6IHNtZyRlbmRfcGFzdGVi b2FyZF91cGRhdGUiLAotICAgICAgICAgICAgICBTTUckRU5EX1BBU1RFQk9BUkRfVVBEQVRFKCZz bWdfcGFzdGVib2FyZF9pZCkpOwotICAgIENIRUNLX0VSUigicmVmcmVzaDogc21nJGJlZ2luX3Bh c3RlYm9hcmRfdXBkYXRlIiwKLSAgICAgICAgICAgICAgU01HJEJFR0lOX1BBU1RFQk9BUkRfVVBE QVRFKCZzbWdfcGFzdGVib2FyZF9pZCkpOwotI2Vsc2UKLSAgICBDSEVDS19FUlIoInJlZnJlc2g6 IHNtZyRlbmRfcGFzdGVib2FyZF91cGRhdGUiLAotICAgICAgICAgICAgICBzbWckZW5kX3Bhc3Rl Ym9hcmRfdXBkYXRlKCZzbWdfcGFzdGVib2FyZF9pZCkpOwotICAgIENIRUNLX0VSUigicmVmcmVz aDogc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlIiwKLSAgICAgICAgICAgICAgc21nJGJlZ2lu X3Bhc3RlYm9hcmRfdXBkYXRlKCZzbWdfcGFzdGVib2FyZF9pZCkpOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLX0KLQotc3RhdGljIHZvaWQKLWVuZHdpbigpIHsKLSAgICBpZiAoIXNtZ19vcGVuKQot ICAgICAgcmV0dXJuOwotCi0gICAgc21nX29wZW4gPSAwOwotCi0jaWZkZWYgQ09NTUVOVAotICAg IENIRUNLX0VSUigiZW5kd2luOiBzbWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlIiwKLSAgICAgICAg ICAgICAgU01HJEVORF9QQVNURUJPQVJEX1VQREFURSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKLSNl bHNlCi0gICAgQ0hFQ0tfRVJSKCJlbmR3aW46IHNtZyRlbmRfcGFzdGVib2FyZF91cGRhdGUiLAot ICAgICAgICAgICAgICBzbWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlKCZzbWdfcGFzdGVib2FyZF9p ZCkpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIG1vdmUoMjIsIDApOwotCi0jaWZkZWYg Q09NTUVOVAotLyoKLSAgVGhlc2UgY2FsbHMgY2xlYXIgdGhlIHNjcmVlbi4KLSAgKGNvbnZlcnQg cm91dGluZSBjYWxscyB0byBsb3dlcmNhc2UgLSBNYXJ0aW4gWmluc2VyKQotKi8KLSAgICBDSEVD S19FUlIoImVuZHdpbjogc21nJGRlbGV0ZV92aXJ0dWFsX2Rpc3BsYXkiLAotICAgICAgICAgICAg ICBTTUckREVMRVRFX1ZJUlRVQUxfRElTUExBWSgmc21nX2Rpc3BsYXlfaWQpKTsKLSAgICBzbWdf ZGlzcGxheV9pZCA9IC0xOwotCi0gICAgQ0hFQ0tfRVJSKCJlbmR3aW46IHNtZyRkZWxldGVfcGFz dGVib2FyZCIsCi0gICAgICAgICAgICAgIFNNRyRERUxFVEVfUEFTVEVCT0FSRCgmc21nX3Bhc3Rl Ym9hcmRfaWQsIDApKTsKLSAgICBzbWdfcGFzdGVib2FyZF9pZCA9IC0xOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLX0KLQotI2lmZGVmIENPTU1FTlQKLS8qIERFQ0MgNi4yIHNjcmVhbXMgYmxvb2R5 IG11cmRlciBhYm91dCBwcmludHcgKCJub3QgZW5vdWdoIGFyZ3MiKSAqLwotLyogYnV0IGFkZGlu ZyB0aGUgZm9sbG93aW5nIHByb3RvdHlwZSBvbmx5IG1ha2VzIGl0IGhvbGxlciBsb3VkZXIuICov Ci0jaWZkZWYgX19ERUNDCi0vKiAidmFyYXJncyIgcHJvdG90eXBlIGZvciBwcmludHcgKi8KLV9Q Uk9UT1RZUChzdGF0aWMgaW50IHByaW50dywoY2hhciAqLCAuLi4pKTsKLSNlbmRpZiAvKiBfX0RF Q0MgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBfX0RFQ0MKLSNpbmNsdWRlIDxz dGRhcmcuaD4KLV9QUk9UT1RZUChzdGF0aWMgdm9pZCBwcmludHcsKGNoYXIgKiwgLi4uKSk7Ci1z dGF0aWMgdm9pZAotcHJpbnR3KGNoYXIgKnN0ciwuLi4pIHsKLSAgICBjaGFyIGJ1ZlsyNTVdOwot ICAgIHZhX2xpc3QgYXA7Ci0gICAgJERFU0NSSVBUT1IodGV4dF9kc2MsIDApOwotICAgIHRleHRf ZHNjLmRzYyRhX3BvaW50ZXI9YnVmOwotICAgIGlmICghc21nX29wZW4pCi0gICAgICByZXR1cm47 Ci0gICAgdmFfc3RhcnQoYXAsc3RyKTsKLSAgICB0ZXh0X2RzYy5kc2Mkd19sZW5ndGggPSB2c3By aW50ZihidWYsIHN0ciwgYXApOwotICAgIHZhX2VuZChhcCk7Ci0gICAgQ0hFQ0tfRVJSKCJwcmlu dHc6IHNtZyRwdXRfY2hhcnMiLAotICAgICAgICAgICAgICBzbWckcHV0X2NoYXJzKCZzbWdfZGlz cGxheV9pZCwgJnRleHRfZHNjLCAwLCAwLCAwLCAwLCAwKSk7Ci19Ci0jZWxzZQotc3RhdGljIHZv aWQKLXByaW50dyhzdHIsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCkKLSAgICBjaGFy ICpzdHI7Ci0gICAgbG9uZyBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTg7Ci0vKiBwcmlu dHcgKi8gewotICAgIGNoYXIgYnVmWzI1NV07Ci0gICAgJERFU0NSSVBUT1IodGV4dF9kc2MsIDAp OwotICAgIGlmICghc21nX29wZW4pCi0gICAgICByZXR1cm47Ci0gICAgdGV4dF9kc2MuZHNjJGFf cG9pbnRlcj1idWY7Ci0gICAgdGV4dF9kc2MuZHNjJHdfbGVuZ3RoID0gc3ByaW50ZihidWYsIHN0 ciwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsKLSAgICBDSEVDS19FUlIoInByaW50 dzogc21nJHB1dF9jaGFycyIsCi0gICAgICAgICAgICAgIHNtZyRwdXRfY2hhcnMoJnNtZ19kaXNw bGF5X2lkLCAmdGV4dF9kc2MsIDAsIDAsIDAsIDAsIDApKTsKLX0KLSNlbmRpZiAvKiBfX0RFQ0Mg Ki8KLQotI2RlZmluZSBDS19DVVJQT1MKLWludAotY2tfY3VycG9zKHJvdywgY29sKSB7Ci0gICAg ZGVidWcoRjExMSwiVk1TIHNtZyBja19jdXJwb3MiLGNraXRvYShyb3cpLGNvbCk7Ci0gICAgaWYg KCFzbWdfaW5pdGVkIHx8ICFzbWdfb3BlbikgewotICAgICAgICBpbml0c2NyKCk7Ci0gICAgfQot ICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgY3VycG9zIHNtZ19vcGVuIiwiIixzbWdfb3Blbik7Ci0g ICAgaWYgKCFzbWdfb3BlbikKLSAgICAgIHJldHVybigwKTsKLSAgICBkZWJ1ZyhGMTExLCJWTVMg c21nIGNrX2N1cnBvcyIsY2tpdG9hKHJvdy0xKSxjb2wtMSk7Ci0gICAgbW92ZShyb3cgLSAxLCBj b2wgLSAxKTsgICAgICAgICAgICAgLyogU01HIGlzIDAtYmFzZWQgKi8KLSAgICByZWZyZXNoKCk7 Ci0gICAgLyogZW5kd2luKCk7ICovCi0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLWNrX2Nscygp IHsKLSAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIGNrX2NscyBzbWdfaW5pdGVkIiwiIixzbWdfaW5p dGVkKTsKLSAgICBpZiAoIXNtZ19pbml0ZWQgfHwgIXNtZ19vcGVuKSB7Ci0gICAgICAgIGluaXRz Y3IoKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiVk1TIHNtZyBja19jbHMgc21nX29wZW4iLCIi LHNtZ19vcGVuKTsKLSAgICBpZiAoIXNtZ19vcGVuKQotICAgICAgcmV0dXJuKDApOwotICAgIGNs ZWFyKCk7Ci0gICAgcmVmcmVzaCgpOwotICAgIC8qIGVuZHdpbigpOyAqLwotICAgIHJldHVybigw KTsKLX0KLQotaW50Ci1ja19jbGVvbCgpIHsKLSAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIGNrX2Ns ZW9sIHNtZ19pbml0ZWQiLCIiLHNtZ19pbml0ZWQpOwotICAgIGlmICghc21nX2luaXRlZCB8fCAh c21nX29wZW4pIHsKLSAgICAgICAgaW5pdHNjcigpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJW TVMgc21nIGNrX2NsZW9sIHNtZ19vcGVuIiwiIixzbWdfb3Blbik7Ci0gICAgaWYgKCFzbWdfb3Bl bikKLSAgICAgIHJldHVybigwKTsKLSAgICBjbHJ0b2VvbCgpOwotICAgIHJlZnJlc2goKTsKLSAg ICAvKiBlbmR3aW4oKTsgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogQ0tfU01HICov Ci0KLSNpZmRlZiBNWUNVUlNFUwotLyoKLSAgRG8taXQteW91cnNlbGYgY3Vyc2VzIGltcGxlbWVu dGF0aW9uIGZvciBWTVMsIE9TLzIgYW5kIG90aGVyIEFOU0kvVlQtMTAwJ3MuCi0gIFN1cHBvcnRz IG9ubHkgdGhlIFZUNTIgYW5kIFZUMXh4IChhbmQgbGF0ZXIgVlQyeHgvM3h4LzR4eCkgdGVybWlu YWxzLgotICBCeSBUZXJyeSBLZW5uZWR5LCBTdCBQZXRlcnMgQ29sbGVnZS4KLQotICBGaXJzdCwg c29tZSBzdHVmZiB3ZSBjYW4ganVzdCBpZ25vcmU6Ci0qLwotCi1zdGF0aWMgaW50Ci10b3VjaHdp bih4KSBpbnQgeDsgewotICAgIHJldHVybigwKTsKLX0KLXN0YXRpYyBpbnQKLWluaXRzY3IoKSB7 Ci0gICAgcmV0dXJuKDApOwotfQotc3RhdGljIGludAotcmVmcmVzaCgpIHsKLSAgICByZXR1cm4o MCk7Ci19Ci1zdGF0aWMgaW50Ci1lbmR3aW4oKSB7Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKgot ICogTm93LCBzb21lIHN0dWZmIHdlIG5lZWQgdG8gZG86Ci0gKi8KLQotX1BST1RPVFlQKCBpbnQg bW92ZSwgKGludCwgaW50KSApOwotI2lmbmRlZiBPUzIKLWludAotbW92ZShyb3csIGNvbCkgaW50 IHJvdywgY29sOyB7Ci0gICAgaWYgKGlzdnQ1MikKLSAgICAgIHByaW50ZigiXDAzM1klYyVjIiwg cm93ICsgMDM3LCBjb2wgKyAwMzcpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZigiXDAzM1slZDsl ZEgiLCByb3cgKyAxLCBjb2wgKyAxKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotY2xlYXIo KSB7Ci0gICAgbW92ZSgwLDApOwotICAgIGlmIChpc3Z0NTIpCi0gICAgICBwcmludGYoIlwwMzNK Iik7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCJcMDMzW0oiKTsKLSAgICByZXR1cm4oMCk7Ci19 Ci0KLWludAotY2xydG9lb2woKSB7Ci0gICAgaWYgKGlzdnQ1MikKLSAgICAgIHByaW50ZigiXDAz M0siKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIlwwMzNbSyIpOwotICAgIHJldHVybigwKTsK LX0KLQotI2RlZmluZSBDS19DVVJQT1MKLWludAotY2tfY2xzKCkgewotICAgIHJldHVybihjbGVh cigpKTsKLX0KLQotaW50Ci1ja19jbGVvbCgpIHsKLSAgICByZXR1cm4oY2xydG9lb2woKSk7Ci19 Ci0KLWludAotY2tfY3VycG9zKHJvdywgY29sKSBpbnQgcm93LCBjb2w7IHsKLSAgICBtb3ZlKHJv dywgY29sKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNlbHNlIC8qIE9TMiAqLwotLyogV2luZG93 cyBOVCBhbmQgV2luZG93cyA5NSBkbyBub3QgcHJvdmlkZSBBTlNJIGVtdWxhdGlvbiAqLwotLyog VGhlcmVmb3JlIHdlIG1pZ2h0IGFzIHdlbGwgbm90IHVzZSBpdCBmb3IgT1MvMiBlaXRoZXIgICAq LwotCi1pbnQKLW1vdmUocm93LCBjb2wpIGludCByb3csIGNvbDsgewotI2lmbmRlZiBPTkVURVJN VVBECi0gICAgU2V0Q3VyUG9zKHJvdywgY29sKTsKLSNlbmRpZiAvKiBPTkVURVJNVVBEICovCi0g ICAgbGdvdG94eSggVkNNRCwgY29sKzEsIHJvdysxKTsKLSAgICBWc2NybklzRGlydHkoVkNNRCk7 Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLWNsZWFyKCkgewotICAgIHZpb2NlbGwgY2VsbDsK LSAgICBtb3ZlKDAsMCk7Ci0jaWZkZWYgT05FVEVSTVVQRAotICAgIGlmIChWc2NybkdldEJ1ZmZl clNpemUoVkNNRCkgPiAwKSB7Ci0gICAgICAgIFZzY3JuU2Nyb2xsKFZDTUQsIFVQV0FSRCwgMCwK LSAgICAgICAgICAgICAgICAgICAgVnNjcm5HZXRIZWlnaHQoVkNNRCktKDEpLAotICAgICAgICAg ICAgICAgICAgICBWc2NybkdldEhlaWdodChWQ01EKS0oMCksIFRSVUUsIENIUl9TUCk7Ci0gICAg ICAgIGNsZWFydGVybXNjcmVlbihWQ01EKTsKLSAgICB9Ci0jZWxzZQotICAgIGNlbGwuYyA9ICcg JzsKLSAgICBjZWxsLmEgPSBjb2xvcmNtZDsKLSAgICBXcnROQ2VsbChjZWxsLCBjbWRfcm93cyAq IGNtZF9jb2xzLCAwLCAwKTsKLSNlbmRpZiAvKiBPTkVURVJNVVBEICovCi0gICAgcmV0dXJuKDAp OwotfQotCi1pbnQKLWNscnRvZW9sKCkgewotICAgIFVTSE9SVCByb3csIGNvbDsKLSAgICB2aW9j ZWxsIGNlbGw7Ci0KLSAgICBjZWxsLmMgPSAnICc7Ci0gICAgY2VsbC5hID0gY29sb3JjbWQ7Ci0j aWZuZGVmIE9ORVRFUk1VUEQKLSAgICBHZXRDdXJQb3MoJnJvdywgJmNvbCApOwotICAgIFdydE5D ZWxsKGNlbGwsIGNtZF9jb2xzIC0gY29sIC0xLCByb3csIGNvbCk7Ci0jZW5kaWYgLyogT05FVEVS TVVQRCAqLwotICAgIGNscnRvZW9sbihWQ01ELENIUl9TUCk7Ci0gICAgcmV0dXJuKDApOwotfQot Ci0jZGVmaW5lIENLX0NVUlBPUwotaW50Ci1ja19jdXJwb3Mocm93LCBjb2wpIGludCByb3csIGNv bDsgewotICAgIG1vdmUocm93LCBjb2wpOwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci1ja19j bHMoKSB7Ci0gICAgcmV0dXJuKGNsZWFyKCkpOwotfQotCi1pbnQKLWNrX2NsZW9sKCkgewotICAg IHJldHVybihjbHJ0b2VvbCgpKTsKLX0KLQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE1Z Q1VSU0VTICovCi0KLSNpZm5kZWYgTk9URVJNQ0FQCi0jaWZuZGVmIENLX0NVUlBPUwotI2RlZmlu ZSBDS19DVVJQT1MKLQotLyogVGVybWNhcC9UZXJtaW5mbyBzZWN0aW9uICovCi0KLXN0YXRpYyBj aGFyIGN1cl9jbHNbMzJdID0geyBOVUwsIE5VTCB9Owotc3RhdGljIGNoYXIgY3VyX2NsZW9sWzMy XSA9IHsgTlVMLCBOVUwgfTsKLXN0YXRpYyBjaGFyIGN1cl9jbVs2NF0gPSB7IE5VTCwgTlVMIH07 Ci1zdGF0aWMgY2hhciB0Z3NidWZbMTI4XSA9IHsgTlVMLCBOVUwgfTsKLQotc3RhdGljCi0jaWZk ZWYgQ0tfQU5TSUMKLXZvaWQKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotY2tfdGVybXNldCh4KSBp bnQgeDsgewotICAgIGN1cl9jbHNbMF0gPSBOVUw7Ci0gICAgY3VyX2NsZW9sWzBdID0gTlVMOwot ICAgIGN1cl9jbVswXSA9IE5VTDsKLSNpZmRlZiB0Z2V0ZW50Ci0gICAgZGVidWcoRjEwMCwidGdl dGVudCBpcyBhIG1hY3JvIiwiIiwwKTsKLSNlbmRpZiAvKiB0Z2V0ZW50ICovCi0jaWZkZWYgdGdl dHN0cgotICAgIGRlYnVnKEYxMDAsInRnZXRzdHIgaXMgYSBtYWNybyIsIiIsMCk7Ci0jZW5kaWYg LyogdGdldHN0ciAqLwotI2lmZGVmIHRwdXRzCi0gICAgZGVidWcoRjEwMCwidHB1dHMgaXMgYSBt YWNybyIsIiIsMCk7Ci0jZW5kaWYgLyogdHB1dHMgKi8KLSNpZmRlZiB0Z290bwotICAgIGRlYnVn KEYxMDAsInRnb3RvIGlzIGEgbWFjcm8iLCIiLDApOwotI2VuZGlmIC8qIHRnb3RvICovCi0jaWZk ZWYgTk9URVJNQ0FQCi0gICAgLyogdGdldHN0cigpIGdldHMgYSBzZWdtZW50YXRpb24gZmF1bHQg b24gT1NGLzEgKi8KLSAgICBkZWJ1ZyhGMTAwLCJja190ZXJtc2V0IE5PVEVSTUNBUCIsIiIsMCk7 Ci0jZWxzZQotICAgIGlmIChub3Rlcm1jYXApIHsKLSAgICAgICAgZGVidWcoRjEwMCwiY2tfdGVy bXNldCBub3Rlcm1jYXAiLCIiLDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGRlYnVn KEYxMDEsImNrX3Rlcm1zZXQgeCIsIiIseCk7Ci0gICAgaWYgKHggPiAwKSB7Ci0gICAgICAgIGNo YXIgKiBicDsKLSAgICAgICAgYnAgPSB0Z3NidWY7Ci0gICAgICAgICpicCA9IE5VTDsKLSAgICAg ICAgZGVidWcoRjExMCwiY2tfdGVybXNldCBjYWxsaW5nIHRnZXRzdHIiLCJjbCIsMCk7Ci0gICAg ICAgIGlmICh0Z2V0c3RyKCJjbCIsICZicCkpIHsgICAgICAgLyogR2V0IGNsZWFyLXNjcmVlbiBj b2RlICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190ZXJtc2V0IHRnZXRzdHIgY2wiLHRn c2J1ZiwiIik7Ci0gICAgICAgICAgICBpZiAoKGludClzdHJsZW4odGdzYnVmKSA8IDMyKQotICAg ICAgICAgICAgICBja3N0cm5jcHkoY3VyX2Nscyx0Z3NidWYsMzIpOwotICAgICAgICB9IGVsc2UK LSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJwID0gdGdzYnVmOwotICAgICAgICBpZiAodGdl dHN0cigiY2UiLCAmYnApKSB7ICAgICAgIC8qIEdldCBjbGVhci10by1lbmQtb2YtbGluZSBjb2Rl ICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190ZXJtc2V0IHRnZXRzdHIgY2UiLHRnc2J1 ZiwiIik7Ci0gICAgICAgICAgICBpZiAoKGludClzdHJsZW4odGdzYnVmKSA8IDMyKQotICAgICAg ICAgICAgICBja3N0cm5jcHkoY3VyX2NsZW9sLHRnc2J1ZiwzMik7Ci0gICAgICAgIH0gZWxzZQot ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnAgPSB0Z3NidWY7Ci0gICAgICAgIGlmICh0Z2V0 c3RyKCJjbSIsICZicCkpIHsgICAgICAgLyogR2V0IGN1cnNvci1tb3ZlbWVudCBjb2RlICovCi0g ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190ZXJtc2V0IHRnZXRzdHIgY20iLHRnc2J1ZiwiIik7 Ci0gICAgICAgICAgICBpZiAoKGludClzdHJsZW4odGdzYnVmKSA8IDY0KQotICAgICAgICAgICAg ICBja3N0cm5jcHkoY3VyX2NtLHRnc2J1Ziw2NCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg IHJldHVybjsKLSAgICB9Ci0jZW5kaWYgLyogTk9URVJNQ0FQICovCi19Ci0KLSNpZm5kZWYgVFBV VFNGTlRZUEUKLSNpZmRlZiBUUFVUU0lTVk9JRAotI2RlZmluZSBUUFVUU0ZOVFlQRSB2b2lkCi0j ZWxzZQotI2RlZmluZSBUUFVUU0ZOVFlQRSBpbnQKLSNlbmRpZiAvKiBUUFVUU0lTVk9JRCAqLwot I2VuZGlmIC8qIFRQVVRTRk5UWVBFICovCi0KLSNpZm5kZWYgVFBVVFNBUkdUWVBFCi0jaWZkZWYg SFBVWDkKLSNkZWZpbmUgVFBVVFNBUkdUWVBFIGNoYXIKLSNlbHNlCi0jaWZkZWYgSFBVWDEwCi0j ZGVmaW5lIFRQVVRTQVJHVFlQRSBjaGFyCi0jZWxzZQotI2RlZmluZSBUUFVUU0FSR1RZUEUgaW50 Ci0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYgLyogSFBVWDkgKi8KLSNlbmRpZiAvKiBUUFVU U0FSR1RZUEUgKi8KLQotc3RhdGljIFRQVVRTRk5UWVBFCi0jaWZkZWYgQ0tfQU5TSUMKLWNrX291 dGMoVFBVVFNBUkdUWVBFIHgpCi0jZWxzZQotY2tfb3V0Yyh4KSBUUFVUU0FSR1RZUEUgeDsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRvIHNhdGlzZnkgdHB1dHMoKSBhcmczIHByb3RvdHlwZSAqLwotICAgIGludCByYzsK LSAgICBjaGFyIGM7Ci0gICAgYyA9IChjaGFyKSB4OwotICAgIHJjID0gKGluc2VydmVyKSA/IHR0 b2MoYykgOiBjb25vYyhjKTsKLSNpZm5kZWYgVFBVVFNJU1ZPSUQKLSAgICByZXR1cm4ocmMpOwot I2VuZGlmIC8qIFRQVVRTSVNWT0lEICovCi19Ci0KLWludAotY2tfY3VycG9zKHJvdywgY29sKSBp bnQgcm93LCBjb2w7IHsKLSNpZmRlZiBDS19BTlNJQwotICAgIFRQVVRTRk5UWVBFICgqZm4pKFRQ VVRTQVJHVFlQRSk7Ci0jZWxzZQotICAgIFRQVVRTRk5UWVBFICgqZm4pKCk7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLSAgICBpZiAoIWZ4ZF9pbml0ZWQpCi0gICAgICBmeGRpbml0KDk5OTkpOwot ICAgIGlmICghY3VyX2NtWzBdKSB7ICAgICAgICAgICAgICAgICAgIC8qIFdlIGRvbid0IGhhdmUg ZXNjYXBlIHNlcXVlbmNlcyAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgcmV0dXJuKC0xKTsg ICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3RoaW5nICovCi0jZWxzZQotICAgICAgICAvKiBC b3RoIEMtS2VybWl0J3MgU0NSRUVOIGNvbW1hbmQgYW5kIEFOU0kvVlQxMDAgYXJlIDEtYmFzZWQg Ki8KLSAgICAgICAgcHJpbnRmKCJcMDMzWyVkOyVkSCIsIHJvdywgY29sKTsgLyogT3IgZGVmYXVs dCB0byBBTlNJICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAg IGZuID0gY2tfb3V0YzsKLSAgICAgICAgLyogdGVybWNhcC90ZXJtaW5mbyBpcyAwLWJhc2VkICov Ci0gICAgICAgIHRwdXRzKAotI2lmZGVmIFRQVVRTQVJHMUNPTlNUCi0gICAgICAgICAgICAgIChj b25zdCBjaGFyICopCi0jZW5kaWYgLyogVFBVVFNBUkcxQ09OU1QgKi8KLSAgICAgICAgICAgICAg dGdvdG8oY3VyX2NtLGNvbC0xLHJvdy0xKSwxLGZuKTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwot fQotCi1pbnQKLWNrX2NscygpIHsKLSNpZmRlZiBDS19BTlNJQwotICAgIFRQVVRTRk5UWVBFICgq Zm4pKFRQVVRTQVJHVFlQRSk7Ci0jZWxzZQotICAgIFRQVVRTRk5UWVBFICgqZm4pKCk7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLSAgICBpZiAoIWZ4ZF9pbml0ZWQpCi0gICAgICBmeGRpbml0KDk5 OTkpOwotICAgIGlmICghY3VyX2Nsc1swXSkgeyAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGRv bid0IGhhdmUgZXNjYXBlIHNlcXVlbmNlcyAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgcmV0 dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3RoaW5nICovCi0jZWxzZQotICAg ICAgICBwcmludGYoIlwwMzNbO0hcMDMzWzJKIik7ICAgICAgIC8qIE9yIGRlZmF1bHQgdG8gQU5T SSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBmbiA9IGNr X291dGM7Ci0gICAgICAgIGRlYnVnKEYxMTEsImNrX2NscyAyIixjdXJfY2xzLGZ4ZF9pbml0ZWQp OwotICAgICAgICB0cHV0cyhjdXJfY2xzLGNtZF9yb3dzLGZuKTsKLSAgICB9Ci0gICAgcmV0dXJu KDApOwotfQotCi1pbnQKLWNrX2NsZW9sKCkgewotI2lmZGVmIENLX0FOU0lDCi0gICAgVFBVVFNG TlRZUEUgKCpmbikoVFBVVFNBUkdUWVBFKTsKLSNlbHNlCi0gICAgVFBVVFNGTlRZUEUgKCpmbiko KTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotICAgIGlmICghZnhkX2luaXRlZCkKLSAgICAgIGZ4 ZGluaXQoOTk5OSk7Ci0gICAgaWYgKCFjdXJfY2xlb2xbMF0pIHsgICAgICAgICAgICAgICAgLyog SWYgd2UgZG9uJ3QgaGF2ZSBlc2NhcGUgc2VxdWVuY2VzICovCi0jaWZkZWYgQ09NTUVOVAotICAg ICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdGhpbmcgKi8KLSNl bHNlCi0gICAgICAgIHByaW50ZigiXDAzM1tLIik7ICAgICAgICAgICAgICAgLyogT3IgdXNlIEFO U0kgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZm4gPSBj a19vdXRjOwotICAgICAgICB0cHV0cyhjdXJfY2xlb2wsMSxmbik7Ci0gICAgfQotICAgIHJldHVy bigwKTsKLX0KLSNlbmRpZiAvKiBDS19DVVJQT1MgKi8KLSNlbHNlCi1zdGF0aWMgdm9pZAotY2tf dGVybXNldCh4KSBpbnQgeDsgewotICAgIGlmICh4KSByZXR1cm47Ci19Ci0jZW5kaWYgLyogTk9U RVJNQ0FQICovCi0KLSNpZm5kZWYgQ0tfQ1VSUE9TCi0jZGVmaW5lIENLX0NVUlBPUwotaW50Ci1j a19jbHMoKSB7Ci0gICAgcHJpbnRmKCJcMDMzWztIXDAzM1sySiIpOwotICAgIHJldHVybigwKTsK LX0KLQotaW50Ci1ja19jbGVvbCgpIHsKLSAgICBwcmludGYoIlwwMzNbSyIpOwotICAgIHJldHVy bigwKTsKLX0KLQotaW50Ci1ja19jdXJwb3Mocm93LCBjb2wpIGludCByb3csIGNvbDsgewotICAg IHByaW50ZigiXDAzM1slZDslZEgiLCByb3csIGNvbCk7Ci0gICAgcmV0dXJuKDApOwotfQotI2Vu ZGlmIC8qIENLX0NVUlBPUyAqLwotCi0KLSNpZm5kZWYgTk9YRkVSCi1zdGF0aWMgaW50IGNpbml0 ID0gMDsgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgY3Vyc2VzIGluaXQnZCAqLwotc3Rh dGljIGludCBjZW5kdyA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGVuZHdpbigpIHdhcyBjYWxs ZWQgKi8KLQotc3RhdGljCi0jaWZkZWYgQ0tfQU5TSUMgICAgICAgICAgICAgICAgICAgICAgICAg LyogQmVjYXVzZSBWT0lEIHVzZWQgYnkgY3Vyc2VzLmggKi8KLXZvaWQKLSNlbHNlCi0jaWZkZWYg TVlDVVJTRVMKLVZPSUQKLSNlbHNlCi1pbnQKLSNlbmRpZiAvKiBNWUNVUlNFUyAqLwotI2VuZGlm IC8qIENLX0FOU0lDICovCi0jaWZkZWYgQ0tfQU5TSUMgICAgICAgICAgICAgICAgICAgICAgICAg LyogVXBkYXRlICUgdHJhbnNmZXJlZCBhbmQgJSBiYXIgKi8KLXVwZHBjdChsb25nIG9sZCwgbG9u ZyBuZXcpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdXBkcGN0KG9sZCwgbmV3KSBsb25nIG9sZCwg bmV3OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB1cGRwY3QgKi8gewotI2lmZGVmIENPTU1F TlQKLSAgICBpbnQgbSwgbjsKLSAgICBtb3ZlKENXX1BDRCwyMik7Ci0gICAgcHJpbnR3KCIlbGQi LCBuZXcpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQ0QsIChsb25nKSBuZXcpOwotI2VuZGlmIC8qIEs5 NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDS19QQ1RfQkFSCi0gICAgaWYgKHRoZXJt b21ldGVyKSB7Ci0gICAgICAgIGlmIChvbGQgPiBuZXcpIHsKLSAgICAgICAgICAgIG9sZCA9IDA7 Ci0gICAgICAgICAgICBtb3ZlKENXX1BDRCwgMjYpOwotICAgICAgICAgICAgY2xydG9lb2woKTsK LSAgICAgICAgfQotICAgICAgICBtID0gb2xkLzI7Ci0gICAgICAgIG1vdmUoQ1dfUENELCAyNiAr IG0pOwotICAgICAgICBuID0gbmV3IC8gMiAtIG07Ci0jaWZuZGVmIE9TMgotICAgICAgICB3aGls ZSAobiA+IDApIHsKLSAgICAgICAgICAgIGlmICgobSArIDEpICUgNSA9PSAwKQotICAgICAgICAg ICAgICBwcmludHcoIioiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJpbnR3 KCI9Iik7Ci0gICAgICAgICAgICBtKys7Ci0gICAgICAgICAgICBuLS07Ci0gICAgICAgIH0KLSAg ICAgICAgaWYgKG5ldyAlIDIgIT0gMCkgcHJpbnR3KCItIik7Ci0gICAgICAgIC8qIG1vdmUoQ1df UENELCAyMis1Myk7ICovCi0jZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgd2hpbGUgKG4gPiAwKSB7 Ci0gICAgICAgICAgICBwcmludHcoIiVjIiwgJ1wzMzMnKTsKLSAgICAgICAgICAgIG0rKzsgbi0t OwotICAgICAgICB9Ci0gICAgICAgIGlmIChuZXcgJSAyICE9IDApCi0gICAgICAgICAgcHJpbnR3 KCIlYyIsICdcMjYxJyk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgfQotI2VuZGlmIC8qIENLX1BD VF9CQVIgKi8KLSAgICAvKiBjbHJ0b2VvbCgpOyAqLwotI2Vsc2UgIC8qICFDT01NRU5UICovCi0j aWZkZWYgT1MyCi0jZGVmaW5lIENIQVIxICAgJ1wzMzMnICAgICAgICAgIC8qIE9TMiAtIENQNDM3 ICovCi0jZGVmaW5lIENIQVIyICAgJ1wyNjEnCi0jZWxzZQotI2RlZmluZSBDSEFSMSAgICcvJyAg ICAgICAgICAgICAvKiBEZWZhdWx0ICovCi0jZGVmaW5lIENIQVIyICAgJy0nCi0jZW5kaWYgLyog T1MyICovCi0gICAgZGVidWcoRjEwMSwidXBkcGN0IG9sZCIsIiIsb2xkKTsKLSAgICBkZWJ1ZyhG MTAxLCJ1cGRwY3QgbmV3IiwiIixuZXcpOwotICAgIG1vdmUoQ1dfUENELDIyKTsKLSAgICBwcmlu dHcoIiUtM2xkIiwgbmV3KTsgLyogICh3YXMpICAgcHJpbnR3KCIlbGQiLCBuZXcpOyAgKi8KLSNp ZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX1BDRCwgKGxvbmcpIG5ldyApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNl bmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDS19QQ1RfQkFSCi0gICAgaWYgKHRoZXJtb21ldGVyKSB7 Ci0gICAgICAgIGludCBtLCBuOwotCi0gICAgICAgIGlmIChvbGQgPiBuZXcpIHsKLSAgICAgICAg ICAgIG9sZCA9IDAgOwotICAgICAgICAgICAgbW92ZShDV19QQ0QsIDI2KTsKLSAgICAgICAgICAg IGNscnRvZW9sKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5ldyA8PSAxMDBMKSB7Ci0gICAg ICAgICAgICBtID0gb2xkIC8gMjsKLSAgICAgICAgICAgIG4gPSBuZXcgLyAyIC0gbTsKLSAgICAg ICAgICAgIG1vdmUoQ1dfUENELCAyNittKTsKLSAgICAgICAgICAgIHdoaWxlIChuLS0gPiAwKQot ICAgICAgICAgICAgICBwcmludHcoIiVjIiwgQ0hBUjEpOwotICAgICAgICAgICAgaWYgKG5ldyAl IDIgIT0gMCkKLSAgICAgICAgICAgICAgcHJpbnR3KCIlYyIsIENIQVIyKTsKLSAgICAgICAgfQot ICAgIH0KLSNlbmRpZiAvKiBDS19QQ1RfQkFSICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotfQot Ci1zdGF0aWMgQ0tfT0ZGX1Qgb2xkX3RyID0gKENLX09GRl9UKS0xOwkvKiBUaW1lIHJlbWFpbmlu ZyBwcmV2aW91c2x5ICovCi0KLXN0YXRpYyBDS19PRkZfVAotI2lmZGVmIENLX0FOU0lDCi1zaG9l dGwoQ0tfT0ZGX1Qgb2xkX3RyLCBsb25nIGNwcywgQ0tfT0ZGX1QgZnNpeiwgQ0tfT0ZGX1QgaG93 ZmFyKQotI2Vsc2UKLSAgICBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2ZhcikgbG9uZyBj cHM7IENLX09GRl9UIG9sZF90ciwgZnNpeiwgaG93ZmFyOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0vKiBzaG9ldGwgKi8geyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXN0aW1hdGVkIHRp bWUgbGVmdCBpbiB0cmFuc2ZlciAqLwotICAgIENLX09GRl9UIHRyOwkJCS8qIFRpbWUgcmVtYWlu aW5nLCBzZWNvbmRzICovCi0KLSNpZmRlZiBHRlRJTUVSCi0gICAgaWYgKGZzaXogPiAwTCAmJiBj cHMgPiAwTCkKLSAgICAgIHRyID0gKENLX09GRl9UKSgoQ0tGTE9BVCkoZnNpeiAtIGhvd2Zhcikg LyAoQ0tGTE9BVCljcHMpOwotICAgIGVsc2UKLSAgICAgIHRyID0gKENLX09GRl9UKS0xOwotI2Vs c2UKLSAgICB0ciA9IChmc2l6ID4gMEwgJiYgY3BzID4gMEwpID8KLSAgICAgICgoZnNpeiAtIGhv d2ZhcikgLyBjcHMpIDoKLSAgICAgICAgKENLX09GRl9UKS0xOwotI2VuZGlmIC8qIEdGVElNRVIg Ki8KLSAgICBtb3ZlKENXX1RSLDIyKTsKLSAgICBpZiAodHIgPiAoQ0tfT0ZGX1QpLTEpIHsKLSAg ICAgICAgaWYgKHRyICE9IG9sZF90cikgewotICAgICAgICAgICAgcHJpbnR3KCIlcyIsaGhtbXNz KHRyKSk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3Bl cnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZylDV19UUiwgKGxvbmcpaGhtbXNzKHRyKSk7Ci0j ZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgY2xydG9lb2wo KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50dygiKHVua25vd24pIik7 Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9G SUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfVFIsIChsb25nKSAiKHVua25vd24pIiApOwotI2VuZGlm IC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xydG9lb2woKTsKLSAgICB9 Ci0gICAgcmV0dXJuKHRyKTsKLX0KLQotc3RhdGljIGxvbmcKLSNpZmRlZiBDS19BTlNJQwotc2hv Y3BzKGludCBwY3QsIENLX09GRl9UIGZzaXosIENLX09GRl9UIGhvd2ZhcikKLSNlbHNlCi1zaG9j cHMocGN0LCBmc2l6LCBob3dmYXIpIGludCBwY3Q7IENLX09GRl9UIGZzaXosIGhvd2ZhcjsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogc2hvY3BzICovIHsKLSNpZmRlZiBDUFNfV0VJR0hURUQK LSAgICBzdGF0aWMgQ0tfT0ZGX1Qgb2xkZmZjID0gMEw7Ci0jZW5kaWYgLyogQ1BTX1dFSUdIVEVE ICovCi0jaWZkZWYgR0ZUSU1FUgotICAgIENLRkxPQVQgc2VjcywgeHg7Ci0jZWxzZQotICAgIENL X09GRl9UIHNlY3MsIHh4OwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotI2lmZGVmIEdGVElNRVIK LSAgICB4eCA9IChndHYgPj0gMC4wKSA/IGd0diA6IDAuMDsgICAgICAvKiBGbG9hdGluZy1wb2lu dCB2ZXJzaW9uICovCi0gICAgZ3R2ID0gZ2Z0aW1lcigpOwotICAgIGlmICgoZ3R2IC0gb2xkZ3R2 KSA8IChDS0ZMT0FUKSAxLjApIC8qIE9ubHkgZG8gdGhpcyBvbmNlIHBlciBzZWNvbmQgKi8KLSAg ICAgIHJldHVybihvbGRjcHMpOwotICAgIG9sZGd0diA9IHh4OwotI2Vsc2UKLSAgICB4eCA9IChn dHYgPj0gMCkgPyBndHYgOiAwOyAgICAgICAgICAvKiBXaG9sZS1udW1iZXIgdmVyc2lvbiAqLwot ICAgIGd0diA9IGd0aW1lcigpOwotICAgIGlmICgoZ3R2IC0gb2xkZ3R2KSA8IDEpCi0gICAgICBy ZXR1cm4ob2xkY3BzKTsKLSAgICBvbGRndHYgPSB4eDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0K LSNpZmRlZiBDUFNfV0VJR0hURUQKLSAgICAvKiBkZWJ1ZyhGMTAwLCJTSE9DUFM6IFdFSUdIVEVE IiwiIiwwKTsgKi8KLSAgICBpZiAoZ3R2ICE9IG9sZGd0dikgeyAgICAgICAgICAgICAgICAvKiBU aGUgZmlyc3QgcGFja2V0IGlzIGlnbm9yZWQgKi8KLSAgICAgICAgaWYgKGZmYyA8IG9sZGZmYykK LSAgICAgICAgICBvbGRmZmMgPSBmZmM7Ci0gICAgICAgIG9sZGNwcyA9IGNwczsKLSAgICAgICAg aWYgKG9sZGNwcyAmJiBvbGRndHYgPgotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgIDEuMAot I2Vsc2UKLSAgICAgICAgICAgIDEKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgICAgICAgICAp IHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGZpcnN0IHNlY29uZCBpcyBpZ25vcmVk ICovCi0vKgotICBUaGlzIHZlcnNpb24gb2Ygc2hvY3BzKCkgcHJvZHVjZXMgYSB3ZWlnaHRlZCBh dmVyYWdlIHRoYXQgc29tZQotICBwZW9wbGUgbGlrZSwgYnV0IG1vc3QgcGVvcGxlIGZpbmQgaXQg ZGlzY29uY2VydGluZyBhbmQgYm9tYmFyZCB1cwotICB3aXRoIHF1ZXN0aW9ucyBhbmQgY29tcGxh aW50cyBhYm91dCB3aHkgdGhlIENQUyBmaWd1cmUgZmx1Y3R1YXRlcyBzbwotICB3aWxkbHkuICBT byBub3cgeW91IG9ubHkgZ2V0IHRoZSB3ZWlnaHRlZCBhdmVyYWdlIGlmIHlvdSBidWlsZCB0aGUK LSAgcHJvZ3JhbSB5b3Vyc2VsZiB3aXRoIENQU19XRUlHSFRFRCBkZWZpbmVkLgotKi8KLSNpZm5k ZWYgQ1BTX1ZJTkNFCi0jaWZkZWYgR0ZUSU1FUgotICAgICAgICAgICAgY3BzID0gKGxvbmcpKCgo KENLRkxPQVQpb2xkY3BzICogMy4wKSArCi0gICAgICAgICAgICAgICAgICAgKENLRkxPQVQpKGZm YyAtIG9sZGZmYykgLyAoZ3R2LW9sZGd0dikgKSAvIDQuMCk7Ci0jZWxzZQotICAgICAgICAgICAg Y3BzID0gKCAob2xkY3BzICogMykgKyAoZmZjIC0gb2xkZmZjKSAvIChndHYtb2xkZ3R2KSApIC8g NDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0jZWxzZQotLyogQW5kIGFuIGFsdGVybmF0ZSB3ZWln aHRpbmcgc2NoZW1lIGZyb20gVmluY2VudCBGYXRpY2EuLi4gKi8KLSAgICAgICAgICAgIGNwcyA9 ICgzICoKLSAgICAgICAgICAgICAoKDErcGN0LzMwMCkqb2xkZmZjL29sZGd0disoMS1wY3QvMTAw KSooZmZjLW9sZGZmYykvKGd0di1vbGRndHYpKSkKLSAgICAgICAgICAgICAgLyA0OwotI2VuZGlm IC8qIENQU19WSU5DRSAqLwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogTm8gd2Vp Z2h0ZWQgYXZlcmFnZSBzaW5jZSB0aGVyZSBpcyBub3RoaW5nIHRvIHdlaWdoICovCi0jaWZkZWYg R0ZUSU1FUgotICAgICAgICAgICAgY3BzID0gKGxvbmcpKGd0diAhPSAwLjAgPwotICAgICAgICAg ICAgICAoQ0tGTE9BVCkoZmZjIC0gb2xkZmZjKSAvIChndHYgLSBvbGRndHYpIDoKLSAgICAgICAg ICAgICAgICAoZmZjIC0gb2xkZmZjKSkgOwotI2Vsc2UKLSAgICAgICAgICAgIGNwcyA9IGd0diA/ IChmZmMgLSBvbGRmZmMpIC8gKGd0diAtIG9sZGd0dikgOiAoZmZjIC0gb2xkZmZjKSA7Ci0jZW5k aWYgLyogR0ZUSU1FUiAqLwotICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIERFQlVH Ci0gICAgICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzog cGN0ICAgIiwiIixwY3QpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBndHYgICAi LCIiLGd0dik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IG9sZGd0diIsIiIsb2xk Z3R2KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZGd0diAgIiwiIiwobG9uZyko Z3R2LW9sZGd0dikpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBmZmMgICAiLCIi LGZmYyk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IG9sZGZmYyIsIiIsb2xkZmZj KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZGZmYyAgIiwiIixmZmMtb2xkZmZj KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogY3BzICAgIiwiIixjcHMpOwotICAg ICAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAg IG1vdmUoQ1dfQ1AsMjIpOwotICAgICAgICBwcmludHcoIiVsZCIsIGNwcyk7Ci0jaWZkZWYgS1VJ Ci0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVS LCAobG9uZykgQ1dfQ1AsIChsb25nKSBjcHMgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYg LyogS1VJICovCi0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgIG9sZGZmYyA9IGZmYzsKLSAg ICB9Ci0jZWxzZSAvKiAhQ1BTX1dFSUdIVEVEICovCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIERF QlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDAsIlNIT0NQUzogTk9UIFdFSUdIVEVE IiwiIiwwKTsKLSAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBwY3QgICAgIiwiIixwY3QpOwot ICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGd0diAgICAiLCIiLGd0dik7Ci0gICAgICAgIGRl YnVnKEYxMDEsIlNIT0NQUzogb2xkZ3R2ICIsIiIsb2xkZ3R2KTsKLSAgICAgICAgZGVidWcoRjEw MSwiU0hPQ1BTOiBkZ3R2ICAgIiwiIiwobG9uZylndHYgLSAobG9uZylvbGRndHYpOwotICAgICAg ICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGZmYyAgICAiLCIiLGZmYyk7Ci0gICAgICAgIGRlYnVnKEYx MDEsIlNIT0NQUzogb2xkZmZjICIsIiIsb2xkZmZjKTsKLSAgICAgICAgZGVidWcoRjEwMSwiU0hP Q1BTOiBkZmZjICAgIiwiIixmZmMtb2xkZmZjKTsKLSAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BT OiBjcHMgICAgIiwiIixjcHMpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGZpbGNudCAi LCIiLGZpbGNudCk7Ci0jaWZkZWYgR0ZUSU1FUgotICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6 IGZwZnNlY3MiLCIiLGZwZnNlY3MpOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICB9Ci0gICAg ZGVidWcoRjEwMSwic2hvY3BzIGd0diIsIiIsZ3R2KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotI2lm ZGVmIEdGVElNRVIKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgLyogZGVidWcoRjEwMSwic2hv Y3BzIGZwZnNlY3MiLCIiLGZwZnNlY3MpOyAqLwotICAgIHNlY3MgPSBndHYgLSBmcGZzZWNzOwot ICAgIC8qIGRlYnVnKEYxMDEsInNob2NwcyBzZWNzIiwiIiwobG9uZylzZWNzKTsgKi8KLSAgICBp ZiAoc2VjcyA+IDAuMCkgewotICAgICAgICBjcHMgPSAobG9uZykoKENLRkxPQVQpIGZmYyAvIHNl Y3MpOwotICAgICAgICAvKiBkZWJ1ZyhGMTAxLCJzaG9jcHMgY3BzIiwiIixjcHMpOyAqLwotICAg ICAgICBtb3ZlKENXX0NQLDIyKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBL dWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19DUCwgKGxvbmcpIGNw cyApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgcHJpbnR3 KCIlbGQiLCBjcHMpOwotICAgICAgICBjbHJ0b2VvbCgpOwotICAgIH0KLSNlbHNlICAvKiBOb3Qg R0ZUSU1FUiAqLwotICAgIGlmICgoc2VjcyA9IGd0diAtIGZzZWNzKSA+IDApIHsKLSAgICAgICAg Y3BzID0gKHNlY3MgPCAxTCkgPyBmZmMgOiBmZmMgLyBzZWNzOwotICAgICAgICBtb3ZlKENXX0NQ LDIyKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSgg S1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19DUCwgKGxvbmcpIGNwcyApOwotI2VuZGlmIC8q IEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgcHJpbnR3KCIlbGQiLCBjcHMpOwot ICAgICAgICBjbHJ0b2VvbCgpOwotICAgIH0KLSNlbmRpZiAvKiBHRlRJTUVSICovCi0jZW5kaWYg LyogQ1BTX1dFSUdIVEVEICovCi0KLSAgICBpZiAoY3BzID4gcGVha2NwcyAmJiAgICAgICAgICAg ICAgICAvKiBQZWFrIHRyYW5zZmVyIHJhdGUgKi8KLSAgICAgICAgKCh3aGF0ICYgV19TRU5EICYm IHNwYWNrZXRzID4gd3Nsb3RzICsgNCkgfHwKLQkgKCEod2hhdCAmIFdfU0VORCkgJiYgc3BhY2tl dHMgPiAxMCkpKSB7Ci0gICAgICAgIHBlYWtjcHMgPSBjcHM7Ci0gICAgfQotICAgIG9sZF90ciA9 IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsKLSAgICByZXR1cm4oY3BzKTsKLX0K LQotc3RhdGljCi0jaWZkZWYgQ0tfQU5TSUMgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmVj YXVzZSBWT0lEIHVzZWQgYnkgY3Vyc2VzLmggKi8KLXZvaWQKLSNlbHNlCi0jaWZkZWYgTVlDVVJT RVMKLVZPSUQKLSNlbHNlCi1pbnQKLSNlbmRpZiAvKiBNWUNVUlNFUyAqLwotI2VuZGlmIC8qIENL X0FOU0lDICovCi1zY3JmdCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlz cGxheSBmaWxlIHR5cGUgKi8KLSAgICBjaGFyIHhmZXJzdHJbMjU2XTsKLSAgICB4ZmVyc3RyWzBd ID0gTlVMOwotICAgIGRlYnVnKEYxMDEsInNjcmZ0IGJpbmFyeSIsIiIsYmluYXJ5KTsKLSAgICBp ZiAoYmluYXJ5KSB7Ci0gICAgICAgIHN3aXRjaChiaW5hcnkpIHsKLSAgICAgICAgICBjYXNlIFhZ RlRfTDoKLSAgICAgICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJMQUJFTEVEIiwyNTYpOwotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBYWUZUX0k6Ci0gICAgICAgICAgICBja3N0 cm5jcHkoeGZlcnN0ciwiSU1BR0UiLDI1Nik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICBjYXNlIFhZRlRfVToKLSAgICAgICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJCSU5BUlkgVU5E RUZJTkVEIiwyNTYpOwotICAgICAgICAgICAgYnJlYWs7Ci0JICBjYXNlIFhZRlRfTToKLSAgICAg ICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJNQUNCSU5BUlkiLDI1Nik7Ci0gICAgICAgICAgICBi cmVhazsKLQkgIGNhc2UgWFlGVF9YOgotICAgICAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIlRF TkVYIiwyNTYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg ICAgICBjYXNlIFhZRlRfQjoKLSAgICAgICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJCSU5BUlki LDI1Nik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2lmZGVmIENLX1JFU0VORAot ICAgICAgICBpZiAod2hhdCAmIFdfU0VORCAmJiBzZW5kc3RhcnQgPiAwTCkgewotICAgICAgICAg ICAgaWYgKHNlbmRtb2RlID09IFNNX1BTRU5EKSB7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY2F0 KHhmZXJzdHIsICIgLyBwYXJ0aWFsIiwgMjU2KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vu ZG1vZGUgPT0gU01fUkVTRU5EKSB7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY2F0KHhmZXJzdHIs ICIgLyByZXNlbmQiLCAyNTYpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHdo YXQgJiBXX1JFQ1YgJiYgcnNfbGVuID4gMEwpIHsKLSAgICAgICAgICAgIGNrc3RybmNhdCh4ZmVy c3RyLCAiIC8gcmVzZW5kIiwgMjU2KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLX1JFU0VORCAq LwotICAgIH0gZWxzZSB7Ci0KLSNpZm5kZWYgTk9DU0VUUwotICAgICAgICBja3N0cm5jcHkoeGZl cnN0ciwiVEVYVCIsMjU2KTsKLSNpZmRlZiBORVdGVFAKLSNpZm5kZWYgTk9VTklDT0RFCi0JaWYg KHdoYXQgJiBXX0ZUUCkgewotCSAgICBpZiAoZnRwX2NzeCA8IDApCi0JICAgICAgY2tzdHJuY2F0 KHhmZXJzdHIsIiAobm8gdHJhbnNsYXRpb24pIiwgMjU2KTsKLQkgICAgZWxzZQotCSAgICAgIGNr bWFreG1zZygmeGZlcnN0cls0XSwyNTIsCi0JCSAgICAgICAiICgiLAotCQkgICAgICAgZmNzaW5m b1sod2hhdCAmIFdfU0VORCkgPyBmdHBfY3NsIDogZnRwX2NzeF0ua2V5d29yZCwKLQkJICAgICAg ICIgPT4gIiwKLQkJICAgICAgIGZjc2luZm9bKHdoYXQgJiBXX1NFTkQpID8gZnRwX2NzeCA6IGZ0 cF9jc2xdLmtleXdvcmQsCi0JCSAgICAgICAiKSIsCi0JCSAgICAgICBOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMCi0JCSAgICAgICApOwotCX0gZWxzZQotI2VuZGlmIC8qIE5PVU5J Q09ERSAqLwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCSAgaWYgKHRjaGFyc2V0ID09IFRDX1RSQU5T UCkgewotICAgICAgICAgICAgY2tzdHJuY2F0KHhmZXJzdHIsICIgKG5vIHRyYW5zbGF0aW9uKSIs IDI1Nik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkg ewotICAgICAgICAgICAgICAgIHNwcmludGYoICZ4ZmVyc3RyW3N0cmxlbih4ZmVyc3RyKV0sIC8q IHNhZmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICIgKCVzID0+ICVzKSIsCi0gICAgICAg ICAgICAgICAgICAgICAgICBmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkLCAvKiBidWlsdC1pbiBr ZXl3b3JkcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdGNzaW5mb1t0Y2hhcnNldF0ua2V5 d29yZCAgLyogbGVuZ3RocyBhcmUgY29udHJvbGxlZCAqLwotCQkJKTsKLSAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3ByaW50ZiggJnhmZXJzdHJbc3RybGVuKHhmZXJzdHIp XSwgLyogc2FmZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIiAoJXMgPT4gJXMpIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgIHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQsIC8qIGJ1aWx0 LWluIGtleXdvcmRzICovCi0gICAgICAgICAgICAgICAgICAgICAgICBmY3NpbmZvW2ZjaGFyc2V0 XS5rZXl3b3JkKTsgLyogbGVuZ3RocyBjb250cm9sbGVkICovCi0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgfQotICAgIG1vdmUoQ1dfVFlQLDIyKTsK LSAgICBwcmludHcoIiVzIiwgeGZlcnN0cik7Ci0gICAgY2xydG9lb2woKTsKLSNpZmRlZiBLVUkK LSNpZm5kZWYgSzk1RwotICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxv bmcpIENXX1RZUCwgKGxvbmcpIHhmZXJzdHIgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYg LyogS1VJICovCi0gICAgcmV0dXJuOwotfQotCi0jaWZkZWYgQ0tfTkVXVEVSTQotc3RhdGljIEZJ TEUgKmNrX3N0ZG91dCA9IE5VTEw7Ci1zdGF0aWMgaW50IGNrX2ZkID0gLTE7Ci0jZW5kaWYgLyog Q0tfTkVXVEVSTSAqLwotCi1zdGF0aWMgbG9uZyBwY3QgPSAwTCwgb2xkcGN0ID0gMEwsIG9sZHJ0 dCA9IC0xTDsKLXN0YXRpYyBpbnQgb2xkdHlwID0gMCwgb2xkd2luID0gLTEsIG9sZHRyeSA9IC0x LCBvbGRsZW4gPSAtMSwgb2xkdGltID0gLTE7Ci0KLSNpZmRlZiBORVRDT05OCi1zdGF0aWMgY2hh ciAqbmV0bmFtZVtdID0gewotICAgICJub25lIiwJCQkJLyogMDAgKi8KLSAgICAiVENQL0lQIiwJ CQkJLyogMDEgVENQIChTb2NrZXRzKSAqLwotICAgICJUQ1AvSVAiLAkJCQkvKiAwMiBUQ1AgKFN0 cmVhbXMpICovCi0gICAgIlguMjUiLAkJCQkvKiAwMyBTdW5MaW5rIFguMjQgICovCi0gICAgIkRF Q25ldCIsCQkJCS8qIDA0IERFQ25ldCAgKi8KLSAgICAiVkFYIFBTSSIsCQkJCS8qIDA1IFZBWCBQ U0kgKi8KLSAgICAiTmFtZWQgUGlwZXMiLAkJCS8qIDA2IExBTiBNYW5hZ2VyIE5hbWVkIFBpcGUg Ki8KLSAgICAiWC4yNSIsCQkJCS8qIDA3IFN0cmF0dXMgVk9TIFguMjUgKi8KLSAgICAiTmV0QklP UyIsCQkJCS8qIDA4IElCTSBORVRCSU9TICovCi0gICAgIlN1cGVyTEFUIiwJCQkJLyogMDcgTWVy aWRpYW4gU3VwZXJMQVQgKi8KLSAgICAiRmlsZSIsCQkJCS8qIDEwIEZpbGUgKi8KLSAgICAiQ29t bWFuZCIsCQkJCS8qIDExIFN1YnByb2Nlc3MgKHBpcGUpICovCi0gICAgIkRMTCIsCQkJCS8qIDEy IERMTCBkb2VzIGkvbyAqLwotICAgICJYLjI1IiwJCQkJLyogMTMgSUJNIEFJWExpbmsgWC4yNSAq LwotICAgICJYLjI1IiwJCQkJLyogMTQgSFAtVVggWC4yNSAqLwotICAgICJQVFkiLAkJCQkvKiAx NSBQc2V1ZG90ZXJtaW5hbCAqLwotICAgICJTU0giLAkJCQkvKiAxNiBTU0ggKi8KLSAgICAiPEVS Uk9SPiIsCQkJCS8qIDE3IEluIGNhc2UgbmV3IHR5cGVzIGFyZSBhZGRlZCAqLwotICAgICI8RVJS T1I+IiwJCQkJLyogMTggYnV0IG5vYm9keSByZW1lbWJlcnMgdG8gdXBkYXRlICovCi0gICAgIjxF UlJPUj4iLAkJCQkvKiAxOSB0aGlzIHRhYmxlIC4uLiAqLwotICAgIE5VTEwJCQkJLyogMjAgKi8K LX07Ci1zdGF0aWMgaW50IG5uZXRuYW1lID0gKHNpemVvZihuZXRuYW1lKSAvIHNpemVvZihjaGFy ICopKTsKLQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmZGVmIENLX0FOU0lDCi12b2lkCi1z Y3JlZW5jKGludCBmLCBjaGFyIGMsQ0tfT0ZGX1QgbixjaGFyICpzKQotI2Vsc2UKLUNLVk9JRAot c2NyZWVuYyhmLGMsbixzKQotaW50IGY7ICAgICAgICAgIC8qIGFyZ3VtZW50IGRlc2NyaXB0b3Ig Ki8KLWNoYXIgYzsgICAgICAgICAvKiBhIGNoYXJhY3RlciBvciBzbWFsbCBpbnRlZ2VyICovCi1D S19PRkZfVCBuOyAgICAgLyogYSBsb25nIGludGVnZXIgKi8KLWNoYXIgKnM7ICAgICAgICAvKiBh IHN0cmluZyAqLwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBzY3JlZW5jKCkgKi8gewotI2lm ZGVmIENLX1NTTAotICAgIGV4dGVybiBpbnQgdGxzX2FjdGl2ZV9mbGFnLCBzc2xfYWN0aXZlX2Zs YWc7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgUkxPR0NPREUKLSAgICBleHRlcm4gaW50 IHR0bnByb3RvOwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0gICAgc3RhdGljIGludCBxID0gMDsK LSAgICBzdGF0aWMgbG9uZyBmY250ID0gMEw7CQkvKiBOdW1iZXIgb2YgZmlsZXMgdHJhbnNmZXJy ZWQgKi8KLSAgICBzdGF0aWMgQ0tfT0ZGX1QgZnNpeiA9IChDS19PRkZfVCktMTsgLyogQ29weSBv ZiBmaWxlIHNpemUgKi8KLSAgICBzdGF0aWMgQ0tfT0ZGX1QgZmJ5dCA9IDBMOyAvKiBUb3RhbCBm aWxlIGJ5dGVzIG9mIGFsbCBmaWxlcyB0cmFuc2ZlcnJlZCAqLwotICAgIHN0YXRpYyBDS19PRkZf VCBob3dmYXIgPSAwTDsgLyogSG93IG11Y2ggb2YgY3VycmVudCBmaWxlIGhhcyBiZWVuIHhmZXIn ZCAqLwotICAgIHN0YXRpYyBpbnQgIHBjdGxibCA9IDBMOyAgLyogUGVyY2VudCBkb25lIHZzIEJ5 dGVzIHNvIGZhciAqLwotICAgIGxvbmcgY3BzID0gMEw7Ci0KLSAgICBpbnQgbmV0ID0gMDsKLSAg ICBpbnQgeG5ldCA9IDA7Ci0gICAgaW50IGZ0cCA9IDA7Ci0gICAgaW50IGxlbjsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cmluZyAqLwotICAgIGludCBlcnJvcnMg PSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIGNvdW50ZXIgKi8KLSAgICBpbnQgeDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXIgKi8KLQotICAgIGRlYnVnKEYx MDEsInNjcmVlbmMgY2luaXQiLCIiLGNpbml0KTsKLSAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIGNl bmR3IiwiIixjZW5kdyk7Ci0KLSAgICBpZiAoIXMpIHMgPSAiIjsgICAgICAgICAgICAgICAgICAg ICAvKiBBbHdheXMgZG8gdGhpcy4gKi8KLQotICAgIGZ0cCA9ICh3aGF0ICYgV19GVFApID8gMSA6 IDA7CS8qIEZUUCBvciBLZXJtaXQgKi8KLSAgICBuZXQgPSBuZXR3b3JrIHx8IGZ0cDsKLSAgICB4 bmV0ID0gZnRwID8gMSA6IG5ldHR5cGU7CQkvKiBORVRfVENQQiA9PSAxICovCi0KLSAgICBpZiAo Y2luaXQgPT0gMCB8fCBjZW5kdyA+IDApIHsgICAgICAvKiBIYW5kbGUgYm9yZGVybGluZSBjYXNl cy4uLiAqLwotICAgICAgICBpZiAoZiA9PSBTQ1JfQ1cpIHsgICAgICAgICAgICAgIC8qIENsb3Nl IHdpbmRvdywgYnV0IGl0J3Mgbm90IG9wZW4gKi8KLSAgICAgICAgICAgIGZ0X3dpbiA9IDA7Ci0g ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMSwic2NyZWVu YyBBIixzLGYpOwotICAgICAgICBpZiAoZiA9PSBTQ1JfRU0gfHwKLSAgICAgICAgICAgKGYgPT0g U0NSX1BUICYmIGMgPT0gJ0UnKSkgeyAvKiBGYXRhbCBlcnJvciBiZWZvcmUgd2luZG93IG9wZW4g Ki8KLSAgICAgICAgICAgIGNvbm9sbCgiIik7IGNvbm9jKCc/Jyk7IGNvbm9sbChzKTsgcmV0dXJu OyAvKiBSZWd1bGFyIGRpc3BsYXkgKi8KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY2luaXQg PT0gMCkgeyAgICAgICAgICAgICAgICAgICAvKiBPbmx5IGNhbGwgaW5pdHNjcigpIG9uY2UgKi8K LQljaGFyICogczsKLQkvKiBDaGVjayB0aGVzZSBub3cgLS0gaWYgdGhleSBhcmUgZGVmaW5lZCBi dXQgbm90IG51bWVyaWMgKi8KLQkvKiB0aGV5IGNhbiBjcmFzaCBjdXJzZXMgKi8KLQlzID0gZ2V0 ZW52KCJMSU5FUyIpOwotCWlmIChzKSBpZiAoIXJkaWdpdHMocykpIHsKLQkgICAgcHJpbnRmKCI/ TElORVMgdmFyaWFibGUgbm90IG51bWVyaWM6IFwiJXNcIi5cbiIscyk7Ci0JICAgIHByaW50Zigi KEZ1bGxzY3JlZW4gZGlzcGxheSBkaXNhYmxlZClcbiIpOwotCSAgICBmZGlzcGxhID0gWFlGRF9T OwotCSAgICByZXR1cm47Ci0JfQotCXMgPSBnZXRlbnYoIkNPTFVNTlMiKTsKLQlpZiAocykgaWYg KCFyZGlnaXRzKHMpKSB7Ci0JICAgIHByaW50ZigiP0NPTFVNTlMgdmFyaWFibGUgbm90IG51bWVy aWM6IFwiJXNcIi5cbiIscyk7Ci0JICAgIHByaW50ZigiKEZ1bGxzY3JlZW4gZGlzcGxheSBkaXNh YmxlZClcbiIpOwotCSAgICBmZGlzcGxhID0gWFlGRF9TOwotCSAgICByZXR1cm47Ci0JfQotICAg ICAgICBjZW5kdyA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIE5ldyB3aW5kb3cgbmVlZHMg cmVwYWludGluZyAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgaWYgKCFpbml0c2NyKCkpIHsg ICAgICAgICAgICAgICAvKiBPb3BzLCBjYW4ndCBpbml0aWFsaXplIHdpbmRvdz8gKi8KLS8qCi0g IEluIGZhY3QsIHRoaXMgZG9lc24ndCBoYXBwZW4uICAibWFuIGN1cnNlcyIgc2F5cyBpbml0c2Ny KCkgaGFsdHMgdGhlCi0gIGVudGlyZSBwcm9ncmFtIGlmIGl0IGZhaWxzLCB3aGljaCBpcyB0cnVl IG9uIHRoZSBzeXN0ZW1zIHdoZXJlIEkndmUKLSAgdGVzdGVkIGl0LiAgSXQgd2lsbCBmYWlsIGlm IHlvdXIgdGVybWluYWwgdHlwZSBpcyBub3Qga25vd24gdG8gaXQuCi0gIFRoYXQncyB3aHkgU0VU IEZJTEUgRElTUExBWSBGVUxMU0NSRUVOIGNhbGxzIHRnZXRlbnQoKSB0byBtYWtlIHN1cmUgdGhl Ci0gIHRlcm1pbmFsIHR5cGUgaXMga25vd24gYmVmb3JlIGFsbG93aW5nIGEgY3Vyc2VzIGRpc3Bs YXkuCi0qLwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIkNVUlNFUyBJTklUU0NSIEVSUk9S XHJcbiIpOwotICAgICAgICAgICAgZmRpc3BsYSA9IFhZRkRfUzsgICAgICAgICAgIC8qIEZhbGwg YmFjayB0byBDUlQgZGlzcGxheSAqLwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgY2luaXQrKzsgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBp bml0aWFsaXplZCBvayAqLwotICAgICAgICAgICAgZGVidWcoRjEwMCwiQ1VSU0VTIElOSVRTQ1Ig T0siLCIiLDApOwotICAgICAgICB9Ci0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU2F2ZSBzb21lIG1lbW9yeS4gKi8KLSNpZmRlZiBDS19ORVdURVJNCi0gICAgICAg IC8qIChGcm9tIEFuZHkgRnlmZSA8YW5keUB2bHNpLmNzLmNhbHRlY2guZWR1PikKLSAgICAgICAg ICAgU3lzdGVtIFYgY3Vyc2VzIHNlZW1zIHRvIHJlc2VydmUgdGhlIHJpZ2h0IHRvIGFsdGVyIHRo ZSBidWZmZXJpbmcKLSAgICAgICAgICAgb24gdGhlIG91dHB1dCBGSUxFKiB3aXRob3V0IHJlc3Rv cmluZyBpdC4gIEZvcnR1bmF0ZWx5IFN5c3RlbSBWCi0gICAgICAgICAgIGN1cnNlcyBwcm92aWRl cyBuZXd0ZXJtKCksIGFuIGFsdGVybmF0aXZlIHRvIGluaXRzY3IoKSwgdGhhdAotICAgICAgICAg ICBhbGxvd3MgdXMgdG8gc3BlY2lmeSBleHBsaWNpdGx5IHRoZSB0ZXJtaW5hbCB0eXBlIGFuZCBp bnB1dCBhbmQKLSAgICAgICAgICAgb3V0cHV0IEZJTEUgcG9pbnRlcnMuICBUaHVzIHdlIGR1cGxp Y2F0ZSBzdGRvdXQsIGFuZCBsZXQgY3Vyc2VzCi0gICAgICAgICAgIGhhdmUgdGhlIGNvcHkuICBU aGUgb3JpZ2luYWwgcmVtYWlucyB1bmFsdGVyZWQuICBVbmZvcnR1bmF0ZWx5LAotICAgICAgICAg ICBuZXd0ZXJtKCkgc2VlbXMgdG8gYmUgcGFydGljdWxhciB0byBTeXN0ZW0gVi4KLSAgICAgICAg Ki8KLSAgICAgICAgcyA9IGdldGVudigiVEVSTSIpOwotICAgICAgICBpZiAoY2tfZmQgPCAwKSB7 Ci0gICAgICAgICAgICBja19mZCA9IGR1cChmaWxlbm8oc3Rkb3V0KSk7Ci0gICAgICAgICAgICBj a19zdGRvdXQgPSAoY2tfZmQgPj0gMCkgPyAoRklMRSAqKWZkb3Blbihja19mZCwgInciKSA6IE5V TEw7Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBuZXd0ZXJtLi4uIiwi IiwwKTsKLQotLyogTk9URTogSXQgbWlnaHQgYmUgbmVjZXNzYXJ5IHRvIGRvIHRoaXMgd2l0aCBz dGRpbiB0b28hICovCi0vKiBUaGlzIHdvdWxkIGhhdmUgYmVlbiB0aGUgY2FzZSBpbiBGcmVlQlNE IDQuMSBidXQgdGhleSBmaXhlZCB0aGUgKi8KLS8qIHByb2JsZW0gYnkgcmVzdG9yaW5nIHRoZSBi dWZmZXJpbmcgb2Ygc3RkaW4gYmVmb3JlIHRoZSBmaW5hbCByZWxlYXNlLiAqLwotLyogKEJ1dCBU LkUuIERpY2tleSBzYXlzIHN0ZGluIGlzIG5vdCBidWZmZXJlZD8pICovCi0KLSAgICAgICAgaWYg KGNrX3N0ZG91dCA9PSBOVUxMIHx8IG5ld3Rlcm0ocywgY2tfc3Rkb3V0LCBzdGRpbikgPT0gMCkg ewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICJGdWxsc2NyZWVu IGRpc3BsYXkgbm90IHN1cHBvcnRlZCBmb3IgdGVybWluYWwgdHlwZTogJXNcclxuIixzKTsKLSAg ICAgICAgICAgIGZkaXNwbGEgPSBYWUZEX1M7ICAgICAgICAgICAvKiBVc2UgQ1JUIGluc3RlYWQg Ki8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTAwLCJz Y3JlZW5jIG5ld3Rlcm0gb2siLCIiLDApOwotI2Vsc2UKLSAgICAgICAgZGVidWcoRjEwMCwic2Ny ZWVuIGNhbGxpbmcgaW5pdHNjciIsIiIsMCk7Ci0gICAgICAgIGluaXRzY3IoKTsgICAgICAgICAg ICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMuICovCi0gICAgICAgIGRlYnVnKEYxMDAs InNjcmVlbiBpbml0c2NyIG9rIiwiIiwwKTsKLSNlbmRpZiAvKiBDS19ORVdURVJNICovCi0gICAg ICAgIGNpbml0Kys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgY3Vyc2VzIHdh cyBpbml0aWFsaXplZC4gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotICAgIGZ0X3dp biA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBpcyBvcGVuICovCi0gICAg aWYgKHJlcGFpbnQpIHsKLSNpZmRlZiBDS19XUkVGUkVTSAotLyoKLSAgVGhpcyB0b3RhbGx5IHJl cGFpbnRzIHRoZSBzY3JlZW4sIGp1c3Qgd2hhdCB3ZSB3YW50LCBidXQgd2UgY2FuIG9ubHkKLSAg ZG8gdGhpcyB3aXRoIHJlYWwgY3Vyc2VzLCBhbmQgdGhlbiBvbmx5IGlmIGNsZWFyb2soKSBhbmQg d3JlZnJlc2goKSBhcmUKLSAgcHJvdmlkZWQgaW4gdGhlIGN1cnNlcyBsaWJyYXJ5LgotKi8KLSNp ZmRlZiBPUzIKLSAgICAgICAgUmVzdG9yZUNtZE1vZGUoKTsKLSNlbHNlCi0jaWZkZWYgUU5YCi0j aWZuZGVmIFFOWDE2Ci0gICAgICAgIGNsZWFyb2soc3Rkc2NyLCAxKTsgICAgICAgICAgICAgLyog UU5YIGRvZXNuJ3QgaGF2ZSBjdXJzY3IgKi8KLSNlbmRpZiAvKiBRTlgxNiAqLwotICAgICAgICB3 cmVmcmVzaChzdGRzY3IpOwotI2Vsc2UKLSAgICAgICAgd3JlZnJlc2goY3Vyc2NyKTsKLSNlbmRp ZiAvKiBRTlggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbHNlICAvKiBObyBDS19XUkVGUkVTSCAq LwotLyoKLSAgS2VybWl0J3MgZG8taXQteW91cnNlbGYgbWV0aG9kLCB3b3JrcyB3aXRoIGFsbCB0 eXBlcyBvZiBmdWxsc2NyZWVuCi0gIHN1cHBvcnQsIGJ1dCBkb2VzIG5vdCByZXBhaW50IGFsbCB0 aGUgZmllbGRzLiAgRm9yIGV4YW1wbGUsIHRoZSBmaWxlbmFtZQotICBpcyBsb3N0LCBiZWNhdXNl IGl0IGFycml2ZXMgYXQgYSBjZXJ0YWluIHRpbWUgYW5kIG5ldmVyIGNvbWVzIGFnYWluLCBhbmQK LSAgS2VybWl0IHByZXNlbnRseSBkb2VzIG5vdCBzYXZlIGl0IGFueXdoZXJlLiAgTWFraW5nIHRo aXMgbWV0aG9kIHdvcmsgZm9yCi0gIGFsbCBmaWVsZHMgd291bGQgYmUgYSByYXRoZXIgbWFqb3Ig cmVjb2RpbmcgdGFzaywgZHVwbGljYXRpbmcgd2hhdCBjdXJzZXMKLSAgYWxyZWFkeSBkb2VzLCBh bmQgd291bGQgYWRkIGEgbG90IG9mIGNvbXBsZXhpdHkgYW5kIHN0b3JhZ2Ugc3BhY2UuCi0qLwot ICAgICAgICBjZW5kdyA9IDE7Ci0jZW5kaWYgLyogQ0tfV1JFRlJFU0ggKi8KLSAgICAgICAgcmVw YWludCA9IDA7Ci0gICAgfQotICAgIGlmIChjZW5kdykgeyAgICAgICAgICAgICAgICAgICAgICAg IC8qIGVuZHdpbigpIHdhcyBjYWxsZWQgcHJldmlvdXNseSAqLwotI2lmZGVmIFZNUwotICAgICAg ICBpbml0c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIChvciBzaG91bGQgaGF2ZSBiZWVu ISkgKi8KLSAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgdG91Y2h3aW4oc3Rkc2NyKTsKLSAgICAg ICAgcmVmcmVzaCgpOwotI2Vsc2UKLSNpZmRlZiBRTlgKLS8qCi0gIEluIFFOWCwgaWYgd2UgZG9u J3QgY2FsbCBpbml0c2NyKCkgaGVyZSB3ZSBjb3JlIGR1bXAuCi0gIEkgZG9uJ3QgaGF2ZSBhbnkg UU5YIGN1cnNlcyBkb2N1bWVudGF0aW9uLCBidXQgb3RoZXIgY3Vyc2VzIG1hbnVhbHMKLSAgc2F5 IHRoYXQgaW5pdHNjcigpIHNob3VsZCBiZSBjYWxsZWQgb25seSBvbmNlIHBlciBhcHBsaWNhdGlv biwgYW5kCi0gIGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBvbiBvdGhlciBzeXN0ZW1zLCBjYWxsaW5n IGluaXRzY3IoKSBoZXJlIGdlbmVyYWxseQotICByZXN1bHRzIGluIGEgY29yZSBkdW1wLgotKi8K LSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyByZS1jYWxsaW5nIGluaXRzY3IgUU5YIiwiIiww KTsKLSAgICAgICAgaW5pdHNjcigpOwotICAgICAgICBjbGVhcigpOwotICAgICAgICByZWZyZXNo KCk7Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgQnV0IGV2ZW4gc28sIHNlY29uZCBhbmQgc3Vic2Vx dWVudCBjdXJzZXMgZGlzcGxheXMgYXJlIG1lc3NlZCB1cC4KLSAgQ2FsbGluZyB0b3VjaHdpbiwg cmVmcmVzaCwgZXRjLCBkb2Vzbid0IG1ha2UgYW55IGRpZmZlcmVuY2UuCi0qLwotICAgICAgICBk ZWJ1ZyhGMTAwLCJzY3JlZW5jIGNhbGxpbmcgdG91Y2h3aW4gUU5YIiwiIiwwKTsKLSAgICAgICAg dG91Y2h3aW4oc3Rkc2NyKTsKLSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBjYWxsaW5nIHJl ZnJlc2ggUU5YIiwiIiwwKTsKLSAgICAgICAgcmVmcmVzaCgpOwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLQotI2Vsc2UgLyogQWxsIG90aGVycy4uLiAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3Jl ZW5jIGNhbGxpbmcgY2xlYXIiLCIiLDApOwotICAgICAgICBjbGVhcigpOwotICAgICAgICBkZWJ1 ZyhGMTAwLCJzY3JlZW5jIGNsZWFyIG9rIiwiIiwwKTsKLSNlbmRpZiAvKiBRTlggKi8KLSNlbmRp ZiAvKiBWTVMgKi8KLSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBzZXR1cCBvayIsIiIsMCk7 Ci0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgZG9pbmcgZmlyc3QgbW92ZSIsIiIsMCk7Ci0g ICAgICAgIG1vdmUoQ1dfQkFOLDApOyAgICAgICAgICAgICAgICAgLyogRGlzcGxheSB0aGUgYmFu bmVyICovCi0gICAgICAgIGRlYnVnKEYxMTAsInNjcmVlbmMgbXlob3N0IixteWhvc3QsMCk7Ci0j aWZkZWYgVENQU09DS0VUCi0gICAgICAgIGRlYnVnKEYxMTAsInNjcmVlbmMgbXlpcGFkZHIiLG15 aXBhZGRyLDApOwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2lmZGVmIEhQVVgxMDEwCi0gICAg ICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgY2FsbGluZyBmaXJzdCBwcmludHcuLi4iLCIiLDApOwot LyogUmlnaHQgaGVyZSBpcyB3aGVyZSBIUC1VWCAxMC4xMCBsaWJ4Y3Vyc2UuMSBSZXYgNzYuMjAg aGFuZ3MuLi4gKi8KLSNlbmRpZiAvKiBIUFVYMTAxMCAqLwotICAgICAgICBpZiAobXlob3N0WzBd KSB7Ci0jaWZkZWYgVENQU09DS0VUCi0gICAgICAgICAgICBpZiAoIW15aXBhZGRyWzBdCi0jaWZk ZWYgT1MyCi0gICAgICAgICAgICAgICAgIC8qIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGlzIHRlc3Qg YmVjYXVzZSBvbiBub24tVENQL0lQICovCi0gICAgICAgICAgICAgICAgIC8qIHN5c3RlbXMgdGhl IGNhbGwgdG8gZ2V0bG9jYWxpcGFkZHIoKSByZXN1bHRzIGluIGEgICovCi0gICAgICAgICAgICAg ICAgIC8qIEROUyBMb29rdXAgd2hpY2ggdGFrZXMgc2V2ZXJhbCBtaW51dGVzIHRvIHRpbWUgb3V0 ICovCi0gICAgICAgICAgICAgICAgICYmIG5ldCAmJgotICAgICAgICAgICAgICAgICAoeG5ldCA9 PSBORVRfVENQQSB8fCB4bmV0ID09IE5FVF9UQ1BCCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAg ICAgICAgICAgICAgfHwgeG5ldCA9PSBORVRfU1NICi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwot ICAgICAgICAgICAgICAgICAgKQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAp Ci0gICAgICAgICAgICAgIGdldGxvY2FsaXBhZGRyKCk7Ci0gICAgICAgICAgICBpZiAobXlpcGFk ZHJbMF0gJiYgc3RyY21wKChjaGFyICopbXlob3N0LChjaGFyICopbXlpcGFkZHIpKQotICAgICAg ICAgICAgICBwcmludHcoIiVzLCAlcyBbJXNdIix2ZXJzaW8sKGNoYXIgKilteWhvc3QsKGNoYXIg KilteWlwYWRkcik7Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0g ICAgICAgICAgICAgIHByaW50dygiJXMsICVzIix2ZXJzaW8sKGNoYXIgKilteWhvc3QpOwotICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnR3KCIlcyIsdmVyc2lvKTsKLSAgICAgICAg fQotI2lmZGVmIEhQVVgxMDEwCi0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgZmlyc3QgcHJp bnR3IHJldHVybnMiLCIiLDApOwotI2VuZGlmIC8qIEhQVVgxMDEwICovCi0gICAgICAgIG1vdmUo Q1dfRElSLDMpOwotICAgICAgICBwcmludHcoIkN1cnJlbnQgRGlyZWN0b3J5OiAlcyIsemd0ZGly KCkpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0RJUiwgKGxvbmcpIHpndGRpcigpICk7Ci0jZW5k aWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBpZiAobmV0KSB7Ci0gICAg ICAgICAgICBtb3ZlKENXX0xJTiw4KTsKLSAgICAgICAgICAgIHByaW50dygiTmV0d29yayBIb3N0 OiAlcyIsCi0jaWZkZWYgTkVXRlRQCi0JCSAgIGZ0cCA/IChmdHBfaG9zdCA/IGZ0cF9ob3N0IDog Iih1bmtub3duKSIpIDoKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQkJICAgdHRuYW1lCi0JCSAgICk7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtb3ZlKENXX0xJTiwwKTsKLSAgICAgICAg ICAgIHByaW50dygiQ29tbXVuaWNhdGlvbiBEZXZpY2U6ICVzIix0dG5hbWUpOwotICAgICAgICB9 Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9G SUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTElOLCAobG9uZykgdHRuYW1lICk7Ci0jZW5kaWYgLyog Szk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotCi0gICAgICAgIGlmIChuZXQpIHsKLSAgICAgICAg ICAgIG1vdmUoQ1dfU1BELDgpOwotICAgICAgICAgICAgcHJpbnR3KCJOZXR3b3JrIFR5cGU6ICIp OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbW92ZShDV19TUEQsMSk7Ci0gICAgICAg ICAgICBwcmludHcoIkNvbW11bmljYXRpb24gU3BlZWQ6ICIpOwotICAgICAgICB9Ci0gICAgICAg IG1vdmUoQ1dfU1BELDIyKTsgICAgICAgICAgICAgICAgLyogU2VyaWFsIHNwZWVkIG9yIG5ldHdv cmsgdHlwZSAqLwotICAgICAgICBpZiAobmV0KSB7Ci0jaWZkZWYgTkVUQ09OTgotCSAgICBpbnQg c2VjdXJlID0gMDsKLQkgICAgY2hhciAqIHhuYW1lOwotCSAgICBpZiAoeG5ldCA+IG5uZXRuYW1l KQotCSAgICAgIHhuYW1lID0gIltFUlJPUl0iOwotCSAgICBlbHNlCi0JICAgICAgeG5hbWUgPSBu ZXRuYW1lW3huZXRdOwotI2lmZGVmIE5FV0ZUUAotICAgICAgICAgICAgaWYgKGZ0cCkgewotCQlp ZiAoZnRwaXNzZWN1cmUoKSkKLQkJICBzZWN1cmUgPSAxOwotCSAgICB9IGVsc2UKLSNlbmRpZiAv KiBORVdGVFAgKi8KLQkgICAgICBpZiAoMAotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICAgICAgICAg ICAgICB8fCBJU19TU0goKQotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNpZmRlZiBDS19FTkNS WVBUSU9OCi0gICAgICAgICAgICAgICAgfHwgY2tfdG5fZW5jcnlwdGluZygpICYmIGNrX3RuX2Rl Y3J5cHRpbmcoKQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wKLSAg ICAgICAgICAgICAgICB8fCB0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnCi0jZW5k aWYgLyogQ0tfU1NMICovCi0jaWZkZWYgUkxPR0NPREUKLSNpZmRlZiBDS19LRVJCRVJPUwotI2lm ZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9FSzRM T0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTgotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04g Ki8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0gICAg ICAgICAgICAgICAgICkgewotCQlzZWN1cmUgPSAxOwotCSAgICB9Ci0JICAgIGlmIChzZWN1cmUp IHsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgICAgIGNoYXIgYnVmWzMw XTsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwiJXMgKFNFQ1VSRSkiLHhuYW1lKTsKLSAg ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSBidWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgICAgICBw cmludHcoIiVzIChTRUNVUkUpIix4bmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgIHByaW50dygiJXMiLHhuYW1lKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1Rwot ICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIHhuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICB9 Ci0jZWxzZQotICAgICAgICAgICAgcHJpbnR3KCIobmV0d29yaykiKTsKLSNpZmRlZiBLVUkKLSNp Zm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpICIobmV0d29yaykiCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNlbmRpZiAvKiBO RVRDT05OICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc3BlZWQgPCAwTCkK LSAgICAgICAgICAgICAgc3BlZWQgPSB0dGdzcGQoKTsKLSAgICAgICAgICAgIGlmIChzcGVlZCA+ IDBMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNwZWVkID09IDg4ODApIHsKLSAgICAgICAgICAg ICAgICAgICAgcHJpbnR3KCI3NS8xMjAwIik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAg ICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiNzUvMTIwMCIKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJ ICovCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBz cGVlZGJ1Zls2NF0gOwotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHNwZWVkYnVmLCAiJWxk Iiwgc3BlZWQpOwotICAgICAgICAgICAgICAgICAgICBwcmludHcoIiVzIixzcGVlZGJ1Zik7Ci0j aWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBDV19TUEQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n KSBzcGVlZGJ1ZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlm IC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50dygidW5rbm93biIpOwotI2lmZGVm IEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJ TEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQ RCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIih1bmtub3duKSIKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRp ZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtb3ZlKENXX1BB UiwxNCk7Ci0gICAgICAgIHByaW50dygiUGFyaXR5OiAlcyIsZnRwID8gIm5vbmUiIDogcGFybmFt KChjaGFyKXBhcml0eSkpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNl dFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgQ1dfUEFSLAotICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgcGFybmFtKChjaGFyKXBh cml0eSkKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5k aWYgLyogS1VJICovCi0jaWZkZWYgQ0tfVElNRVJTCi0gICAgICAgIGlmICgvKiBydHRmbGcgJiYg Ki8gcHJvdG9jb2wgPT0gUFJPVE9fSykgewotICAgICAgICAgICAgbW92ZShDV19UTU8sIDkpOyBw cmludHcoIlJUVC9UaW1lb3V0OiIpOyB9Ci0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0gICAgICAg IG1vdmUoQ1dfVFlQLDExKTsgcHJpbnR3KCJGaWxlIFR5cGU6Iik7Ci0gICAgICAgIG1vdmUoQ1df U0laLDExKTsgcHJpbnR3KCJGaWxlIFNpemU6Iik7Ci0gICAgICAgIG1vdmUoQ1dfUENELCA4KTsK LSAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgcGN0bGJsID0gKHdoYXQgJiBXX1NFTkQpOwot ICAgICAgICBwcmludHcoIiVzOiIsIHBjdGxibCA/ICJQZXJjZW50IERvbmUiIDogIkJ5dGVzIFNv IEZhciIpOwotCi0jaWZkZWYgWFlaX0lOVEVSTkFMCi0gICAgICAgIG1vdmUoQ1dfQkFSLCAxKTsK LSAgICAgICAgcHJpbnR3KCIlMTBzIFByb3RvY29sOiIsIGZ0cCA/ICJGVFAiIDogcHRhYltwcm90 b2NvbF0ucF9uYW1lKTsKLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KLSNpZmRlZiBDS19QQ1Rf QkFSCi0gICAgICAgIGlmICh0aGVybW9tZXRlcikgewotICAgICAgICAgICAgb2xkcGN0ID0gcGN0 ID0gMDsKLSAgICAgICAgICAgIG1vdmUoQ1dfQkFSLDIyKTsKLSAgICAgICAgICAgIHByaW50dygi ICAgIC4uLjEwLi4uMjAuLi4zMC4uLjQwLi4uNTAuLi42MC4uLjcwLi4uODAuLi45MC4uMTAwIik7 Ci0gICAgICAgICAgICBtb3ZlKENXX0JBUiwyMis1Nik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBD S19QQ1RfQkFSICovCi0gICAgICAgIG1vdmUoQ1dfVFIsICAxKTsgcHJpbnR3KCJFc3RpbWF0ZWQg VGltZSBMZWZ0OiIpOwotICAgICAgICBtb3ZlKENXX0NQLCAgMik7IHByaW50dygiVHJhbnNmZXIg UmF0ZSwgQ1BTOiIpOwotICAgICAgICBtb3ZlKENXX1dTLCAgOCk7IHByaW50dygiV2luZG93IFNs b3RzOiVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwcm90b2NvbCA9PSBQ Uk9UT19LKSAmJiAhZnRwKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIDog IiBOL0EiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIG1vdmUo Q1dfUFQsICA5KTsgcHJpbnR3KCJQYWNrZXQgVHlwZToiKTsKLSAgICAgICAgaWYgKGZ0cCB8fCBw cm90b2NvbCAhPSBQUk9UT19LKSB7Ci0JICAgIG1vdmUoQ1dfUFQsMjIpOwotICAgICAgICAgICAg cHJpbnR3KCIlcyIsICJOL0EiKTsKLSAgICAgICAgICAgIG1vdmUoQ1dfUEMsICAxMSk7IHByaW50 dygiSS9PIENvdW50OiIpOwotICAgICAgICAgICAgbW92ZShDV19QTCwgIDEwKTsgcHJpbnR3KCJJ L08gTGVuZ3RoOiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbW92ZShDV19QQywg IDgpOyBwcmludHcoIlBhY2tldCBDb3VudDoiKTsKLSAgICAgICAgICAgIG1vdmUoQ1dfUEwsICA3 KTsgcHJpbnR3KCJQYWNrZXQgTGVuZ3RoOiIpOwotICAgICAgICB9Ci0jaWZuZGVmIENPTU1FTlQK LSAgICAgICAgbW92ZShDV19QUiwgIDkpOyBwcmludHcoIkVycm9yIENvdW50OiIpOwotI2Vsc2UK LSAgICAgICAgbW92ZShDV19QUiwgIDIpOyBwcmludHcoIlBhY2tldCBSZXRyeSBDb3VudDoiKTsK LSNlbmRpZgotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgbW92ZShDV19QQiwgIDIpOyBwcmludHco IlBhY2tldCBCbG9jayBDaGVjazoiKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIG1v dmUoQ1dfRVJSLDEwKTsgcHJpbnR3KCJMYXN0IEVycm9yOiIpOwotICAgICAgICBtb3ZlKENXX01T RywgOCk7IHByaW50dygiTGFzdCBNZXNzYWdlOiIpOwotCWlmICh4ZnJtc2cpIHsKLQkgICAgbW92 ZShDV19NU0csIDIyKTsgcHJpbnR3KCIlcyIseGZybXNnKTsKLQkgICAgbWFrZXN0cigmeGZybXNn LE5VTEwpOwotCX0KLSAgICAgICAgbW92ZShDV19JTlQsIDApOwotICAgICAgICBpZiAoIXhmcmlu dCkgewotICAgICAgICAgICAgcHJpbnR3KCIoVHJhbnNmZXIgaW50ZXJydXB0aW9uIGlzIGRpc2Fi bGVkKSIpOwotICAgICAgICB9IGVsc2UgewotI2lmZGVmIENLX05FRURfU0lHCi0gICAgICAgICAg ICBwcmludHcoCi0iPCVzPlggdG8gY2FuY2VsIGZpbGUsIDwlcz5aIHRvIGNhbmNlbCBncm91cCwg PCVzPjxDUj4gdG8gcmVzZW5kIGxhc3QgcGFja2V0IiwKLSAgICAgICAgICAgICAgICAgICBkYmNo cihlc2NhcGUpLCBkYmNocihlc2NhcGUpLCBkYmNocihlc2NhcGUpCi0gICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgIG1vdmUoQ1dfSU5UICsgMSwgMCk7Ci0gICAgICAgICAgICBwcmlu dHcoCi0iPCVzPkUgdG8gc2VuZCBFcnJvciBwYWNrZXQsIF5DIHRvIHF1aXQgaW1tZWRpYXRlbHks IDwlcz5MIHRvIHJlZnJlc2ggc2NyZWVuLiIsCi0gICAgICAgICAgICAgICAgICAgZGJjaHIoZXNj YXBlKSwgZGJjaHIoZXNjYXBlKQotICAgICAgICAgICAgICAgICAgICk7Ci0jZWxzZSAvKiAhQ0tf TkVFRF9TSUcgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfSU5ULCAwKTsKLSNpZmRlZiBPUzIKLSAg ICAgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LKSB7Ci0gICAgICAgICAgICAgICAgcHJp bnR3KAotIlggdG8gY2FuY2VsIGZpbGUsIFogdG8gY2FuY2VsIGdyb3VwLCA8RW50ZXI+IHRvIHJl c2VuZCBsYXN0IHBhY2tldCwiCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICB9Ci0jZWxzZSAvKiAhT1MyICovCi0jaWZkZWYgVk1TICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogSW4gVk1TIGF2b2lkIGJvdHRvbSBsaW5lICovCi0gICAgICAgICAgICBwcmludHco Ci0iWDogQ2FuY2VsIHRoaXMgZmlsZTsgRTogQ2FuY2VsIHRyYW5zZmVyOyBeQzogUXVpdCBub3c7 IF5XOiBSZWZyZXNoIHNjcmVlbi4iCi0gICAgICAgICAgICAgICAgICAgKTsKLSNlbHNlCi0gICAg ICAgICAgICBwcmludHcoCi0iWCB0byBjYW5jZWwgZmlsZSwgWiB0byBjYW5jZWwgZ3JvdXAsIDxD Uj4gdG8gcmVzZW5kIGxhc3QgcGFja2V0LCIKLSAgICAgICAgICAgICAgICAgICApOwotI2VuZGlm IC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIFZNUwotICAgICAgICAgICAg bW92ZShDV19JTlQgKyAxLCAwKTsKLSAgICAgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19L KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KAotIkUgdG8gc2VuZCBFcnJvciBwYWNrZXQsIF5D IHRvIHF1aXQgaW1tZWRpYXRlbHksIF5MIHRvIHJlZnJlc2ggc2NyZWVuLiIKLSAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJp bnR3KCJeQyB0byBjYW5jZWwgZmlsZSB0cmFuc2Zlci4iKTsKLSAgICAgICAgICAgIH0KLSNlbmRp ZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBDS19ORUVEX1NJRyAqLwotICAgICAgICB9Ci0gICAgICAg IHJlZnJlc2goKTsKLSAgICAgICAgY2VuZHcgPSAwOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJT Q1JFRU5DIHN3aXRjaCIsIiIsZik7Ci0gICAgZGVidWcoRjAwMCwiU0NSRUVOQyBjIiwiIixjKTsK LSAgICBkZWJ1ZyhGMTAxLCJTQ1JFRU5DIG4iLCIiLG4pOwotCi0gICAgbGVuID0gc3RybGVuKHMp OyAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIGFyZ3VtZW50IHN0cmluZyAqLwotICAg IHN3aXRjaCAoZikgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhbmRsZSBvdXIgZnVuY3Rp b24gY29kZSAqLwotICAgICAgY2FzZSBTQ1JfRk46ICAgICAgICAgICAgICAgICAgICAgIC8qIEZp bGVuYW1lICovCi0gICAgICAgIG9sZHBjdCA9IHBjdCA9IDBMOyAgICAgICAgICAgICAgLyogUmVz ZXQgcGVyY2VudHMgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgIGd0diA9IChDS0ZMT0FUKSAt MS4wOwotICAgICAgICAvKiBvbGRndHYgPSAoQ0tGTE9BVCkgLTEuMDsgKi8KLSNlbHNlCi0gICAg ICAgIGd0diA9IC0xTDsKLSAgICAgICAgLyogb2xkZ3R2ID0gLTFMOyAqLwotI2VuZGlmIC8qIEdG VElNRVIgKi8KLSAgICAgICAgb2xkd2luID0gLTE7Ci0gICAgICAgIGZzaXogPSAoQ0tfT0ZGX1Qp LTE7CQkvKiBJbnZhbGlkYXRlIHByZXZpb3VzIGZpbGUgc2l6ZSAqLwotICAgICAgICBtb3ZlKENX X1BDRCwyMik7ICAgICAgICAgICAgICAgIC8qIEVyYXNlIHBlcmNlbnQgZG9uZSBmcm9tIGxhc3Qg dGltZSAqLwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5 KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDRCwgKGxvbmcpIDAgKTsKLSAgICAgICAg S3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykg MCApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xydG9l b2woKTsKLSAgICAgICAgbW92ZShDV19TSVosMjIpOyAgICAgICAgICAgICAgICAvKiBFcmFzZSBm aWxlIHNpemUgZnJvbSBsYXN0IHRpbWUgKi8KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19TSVosIChs b25nKSAwICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBj bHJ0b2VvbCgpOwotICAgICAgICBtb3ZlKENXX0VSUiwyMik7ICAgICAgICAgICAgICAgIC8qIEFu ZCBsYXN0IGVycm9yIG1lc3NhZ2UgKi8KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25n KSAiIiApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xy dG9lb2woKTsKLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgU1RSRUFNSU5HCi0gICAgICAgIGlmIChw cm90b2NvbCA9PSBQUk9UT19LICYmIHN0cmVhbW9rKSB7Ci0gICAgICAgICAgICBtb3ZlKENXX0JB UiwgMSk7Ci0jaWZkZWYgWFlaX0lOVEVSTkFMCi0gICAgICAgICAgICBwcmludHcoIiAgIEtlcm1p dCBTVFJFQU1JTkc6Iik7Ci0jZWxzZQotICAgICAgICAgICAgcHJpbnR3KCIgICAgICAgICAgU1RS RUFNSU5HOiIpOwotI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLwotICAgICAgICB9Ci0jZW5kaWYg LyogU1RSRUFNSU5HICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgICAgIGlmICh3aGF0 ICYgV19TRU5EKSB7CQkvKiBJZiB3ZSdyZSBzZW5kaW5nLi4uICovCi0jaWZkZWYgTkVXRlRQCi0J ICAgIGlmICh3aGF0ICYgV19GVFApIHsJCS8qIEZUUCAqLwotICAgICAgICAgICAgICAgIG1vdmUo Q1dfTkFNLDEwKTsKLSAgICAgICAgICAgICAgICBwcmludHcoIiAgIEZUUCBQVVQ6Iik7Ci0JICAg IH0gZWxzZQotI2VuZGlmIC8qIE5FV0ZUUCAqLwotI2lmZGVmIENLX1JFU0VORAotICAgICAgICAg ICAgc3dpdGNoIChzZW5kbW9kZSkgewkJLyogS2VybWl0ICovCi0gICAgICAgICAgICAgIGNhc2Ug U01fUkVTRU5EOgotICAgICAgICAgICAgICAgIG1vdmUoQ1dfTkFNLDEwKTsKLSAgICAgICAgICAg ICAgICBwcmludHcoIiBSRVNFTkRJTkc6Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbW92ZShDV19OQU0sMTApOwotICAg ICAgICAgICAgICAgIHByaW50dygiICAgU0VORElORzoiKTsKLSAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBtb3ZlKENXX05BTSwxMCk7Ci0g ICAgICAgICAgICBwcmludHcoIiAgIFNFTkRJTkc6Iik7Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICov Ci0KLSAgICAgICAgfSBlbHNlIGlmICh3aGF0ICYgV19SRUNWKSB7CS8qIElmIHdlJ3JlIHJlY2Vp dmluZy4uLiAqLwotI2lmZGVmIE5FV0ZUUAotCSAgICBpZiAod2hhdCAmIFdfRlRQKSB7CQkvKiBG VFAgKi8KLSAgICAgICAgICAgICAgICBtb3ZlKENXX05BTSwxMCk7Ci0gICAgICAgICAgICAgICAg cHJpbnR3KCIgICBGVFAgR0VUOiIpOwotCSAgICB9IGVsc2UgewotI2VuZGlmIC8qIE5FV0ZUUCAq LwotCQltb3ZlKENXX05BTSwxMCk7Ci0JCXByaW50dygiIFJFQ0VJVklORzoiKTsKLSNpZmRlZiBO RVdGVFAKLQkgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHdoYXQgPT0gKFdfRlRQfFdfRlRfREVM RSkpIHsKLQkJbW92ZShDV19OQU0sMTApOwotCQlwcmludHcoIkZUUCBERUxFVEU6Iik7Ci0jZW5k aWYgLyogTkVXRlRQICovCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg LyogSWYgd2UgZG9uJ3Qga25vdy4uLiAqLwotICAgICAgICAgICAgbW92ZShDV19OQU0sMTApOyAg ICAgICAgICAgIC8qIChzaG91bGQgbmV2ZXIgc2VlIHRoaXMpICovCi0gICAgICAgICAgICBwcmlu dHcoIiBGaWxlIE5hbWU6Iik7Ci0gICAgICAgIH0KLSAgICAgICAgbW92ZShDV19OQU0sMjIpOyAg ICAgICAgICAgICAgICAvKiBEaXNwbGF5IHRoZSBmaWxlbmFtZSAqLwotICAgICAgICBpZiAobGVu ID4gNTcpIHsKLSAgICAgICAgICAgIHByaW50dygiJS41NXMuLiIscyk7Ci0gICAgICAgICAgICBs ZW4gPSA1NzsKLSAgICAgICAgfSBlbHNlIHByaW50dygiJXMiLHMpOwotI2lmZGVmIEtVSQotI2lm bmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxv bmcpIENXX05BTSwgKGxvbmcpIHMgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJ ICovCi0gICAgICAgIHEgPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIg bmFtZSBsZW5ndGggZm9yIGxhdGVyICovCi0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgIHNj cmZ0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSBmaWxlIHR5cGUgKGNhbiBj aGFuZ2UpICovCi0gICAgICAgIHJlZnJlc2goKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNt ZE1vZGUoMCwgMCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAg Y2FzZSBTQ1JfQU46ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgYXMtbmFtZSAqLwotICAg ICAgICBpZiAocSArIGxlbiArIDQgPCA1OCkgeyAgICAgICAgIC8qIFdpbGwgZml0ICovCi0gICAg ICAgICAgICBtb3ZlKENXX05BTSwgMjIgKyBxKTsKLSAgICAgICAgICAgIHByaW50dygiID0+ICVz IixzKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyApOwotI2VuZGlm IC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUb28gbG9uZyAqLwotICAgICAgICAgICAgbW92ZShDV19OQU0sIDIy KTsgICAgICAgICAgIC8qIE92ZXJ3cml0ZSBwcmV2aW91cyBuYW1lICovCi0gICAgICAgICAgICBx ID0gMDsKLSAgICAgICAgICAgIGlmIChsZW4gKyA0ID4gNTcpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB3ZzE1ICovCi0gICAgICAgICAgICAgICAgcHJpbnR3KCIgPT4gJS41 MXMuLiIscyk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogd2cxNSAqLwotICAgICAgICAgICAg ICAgIGxlbiA9IDUzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdn MTUgKi8KLSAgICAgICAgICAgIH0gZWxzZSBwcmludHcoIiA9PiAlcyIscyk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB3ZzE1ICovCi0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwg KGxvbmcpIHMgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAg ICB9Ci0gICAgICAgIHEgKz0gbGVuICsgNDsgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIg aG9yaXpvbnRhbCBwb3NpdGlvbiAqLwotICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICByZWZy ZXNoKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0ZTOiAgICAgICAgICAg ICAgICAgICAgICAvKiBGaWxlIHNpemUgKi8KLSAgICAgICAgZnNpeiA9IG47Ci0gICAgICAgIG1v dmUoQ1dfU0laLDIyKTsKLSAgICAgICAgaWYgKGZzaXogPiAoQ0tfT0ZGX1QpLTEpIHsKLSNpZmRl ZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxF X1RSQU5TRkVSLCAobG9uZykgQ1dfU0laLCAobG9uZykgbiApOwotI2VuZGlmIC8qIEs5NUcgKi8K LSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIHByaW50dygiJXMiLGNrZnN0b2EobikpOwot ICAgICAgICB9Ci0JaWYgKGZzaXogPT0gLTJMKSB7Ci0JICAgIHByaW50dygiUE9TU0lCTFkgRVhD RUVEUyBMT0NBTCBGSUxFIFNJWkUgTElNSVQiKTsKLQl9Ci0gICAgICAgIGNscnRvZW9sKCk7Ci0j aWZkZWYgQ09NTUVOVAotICAgICAgICBtb3ZlKENXX1BDRCwgOCk7Ci0gICAgICAgIGlmIChmc2l6 ID4gKENLX09GRl9UKS0xKSB7CS8qIFB1dCB1cCBwZXJjZW50IGxhYmVsICovCi0gICAgICAgICAg ICBwY3RsYmwgPSAxOwotCSAgICBjbHJ0b2VvbCgpOwotICAgICAgICAgICAgcHJpbnR3KCJQZXJj ZW50IERvbmU6Iik7Ci0gICAgICAgIH0KLSNlbHNlCi0JbW92ZShDV19QQ0QsIDgpOwotCWNscnRv ZW9sKCk7Ci0gICAgICAgIGlmIChmc2l6ID4gKENLX09GRl9UKS0xKSB7CS8qIFB1dCB1cCBwZXJj ZW50IGxhYmVsICovCi0gICAgICAgICAgICBwY3RsYmwgPSAxOwotICAgICAgICAgICAgcHJpbnR3 KCJQZXJjZW50IERvbmU6Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwY3RsYmwg PSAwOwotICAgICAgICAgICAgcHJpbnR3KCJCeXRlcyBTbyBGYXI6Iik7Ci0JfQotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgc2NyZnQoKTsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBGaWxlIHR5cGUgKi8KLSAgICAgICAgcmVmcmVzaCgpOwotI2lm ZGVmIE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAg ICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9QVDogICAgICAgICAgICAgICAgICAgICAg LyogUGFja2V0IHR5cGUgb3IgcHNldWRvdHlwZSAqLwotICAgICAgICBpZiAoc3BhY2tldHMgPCA1 KSB7Ci0gICAgICAgICAgICBleHRlcm4gaW50IHN5c2luZGV4OwotICAgICAgICAgICAgZXh0ZXJu IHN0cnVjdCBzeXNkYXRhIHN5c2lkbGlzdFtdOwotICAgICAgICAgICAgLyogVGhpbmdzIHRoYXQg d29uJ3QgY2hhbmdlIGFmdGVyIHRoZSA0dGggcGFja2V0ICovCi0gICAgICAgICAgICBtb3ZlKENX X1BBUiwyMik7Ci0gICAgICAgICAgICBwcmludHcoIiVzIixwYXJuYW0oKGNoYXIpcGFyaXR5KSk7 Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19Q QVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgcGFybmFtKChjaGFyKXBhcml0 eSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2Vu ZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsKLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgICAgICBtb3ZlKENXX1BCLCAyMik7ICAgICAgICAgICAgLyogQmxvY2sgY2hlY2sgb24g dGhpcyBwYWNrZXQgKi8KLSAgICAgICAgICAgIGlmIChiY3R1ID09IDQpCi0gICAgICAgICAgICAg IHByaW50dygiQiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBwcmludHcoIiVk IixiY3R1KTsKLSAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICAgICAgaWYgKAotI2lmZGVmIE5FV0ZUUAotCQkoZnRwICYmIChzcGFja2V0cyA9PSAx IHx8IHJwYWNrZXRzID09IDEpKSB8fAotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCQlzcGFja2V0cyA9 PSA0Ci0JCSkgewotICAgICAgICAgICAgICAgIG1vdmUoQ1dfTElOLDgpOwotICAgICAgICAgICAg ICAgIGlmICgKLSNpZmRlZiBORVdGVFAKLQkJICAgIGZ0cCB8fAotI2VuZGlmIC8qIE5FV0ZUUCAq LwotCQkgICAgKChwcm90b2NvbCA9PSBQUk9UT19LKSAmJiAoc3lzaW5kZXggPiAtMSkpCi0JCSAg ICApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5ldCkgewotICAgICAgICAgICAgICAgICAg ICAgICAgbW92ZShDV19MSU4sOCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludHcoIk5l dHdvcmsgSG9zdDogJXMgKCVzKSIsCi0jaWZkZWYgTkVXRlRQCi0JCQkgICAgICAgZnRwID8gKGZ0 cF9ob3N0ID8gZnRwX2hvc3QgOiAiIikgOgotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCQkJICAgICAg IHR0bmFtZSwKLSNpZmRlZiBORVdGVFAKLQkJCSAgICAgICBmdHAgPyBmdHBfc3J2dHlwIDoKLSNl bmRpZiAvKiBORVdGVFAgKi8KLQkJCSAgICAgICBzeXNpZGxpc3Rbc3lzaW5kZXhdLnNpZF9uYW1l Ci0JCQkgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIG1vdmUoQ1dfTElOLDApOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnR3KCJDb21tdW5pY2F0aW9uIERldmljZTogJXMgKHJlbW90ZSBob3N0IGlzICVzKSIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHR0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3lzaWRsaXN0W3N5c2luZGV4XS5zaWRfbmFtZQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNs cnRvZW9sKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0j aWZkZWYgQ0tfVElNRVJTCi0gICAgICAgIGlmICgvKiBydHRmbGcgJiYgKi8gcHJvdG9jb2wgPT0g UFJPVE9fSykgewotICAgICAgICAgICAgbG9uZyB4eDsKLSAgICAgICAgICAgIGlmICgKLSNpZmRl ZiBTVFJFQU1JTkcKLSAgICAgICAgICAgICAgICBzdHJlYW1pbmcgJiYgb2xkd2luICE9IC0yCi0j ZWxzZQotICAgICAgICAgICAgICAgIDAKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSAgICAgICAg ICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBtb3ZlKENXX1RNTywgMjIpOwotICAgICAgICAg ICAgICAgIHByaW50dygiMDAgLyAwMCIpOwotICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHh4ID0gKHJ0dGRlbGF5ICsgNTAw KSAvIDEwMDA7Ci0gICAgICAgICAgICAgICAgaWYgKHh4ICE9IG9sZHJ0dCB8fCByY3Z0aW1vICE9 IG9sZHRpbSkgewotICAgICAgICAgICAgICAgICAgICBtb3ZlKENXX1RNTywgMjIpOwotICAgICAg ICAgICAgICAgICAgICBwcmludHcoIiUwMmxkIC8gJTAyZCIsIHh4LCByY3Z0aW1vKTsKLSAgICAg ICAgICAgICAgICAgICAgb2xkcnR0ID0geHg7Ci0gICAgICAgICAgICAgICAgICAgIG9sZHRpbSA9 IHJjdnRpbW87Ci0gICAgICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0K LSAgICAgICAgeCA9ICh3aGF0ICYgV19SRUNWKSA/ICAgICAgICAgIC8qIFBhY2tldCBsZW5ndGgg Ki8KLSAgICAgICAgICBycGt0bCsocHJvdG9jb2w9PVBST1RPX0s/MTowKSA6Ci0gICAgICAgICAg ICBzcGt0bDsKLSAgICAgICAgaWYgKHggIT0gb2xkbGVuKSB7ICAgICAgICAgICAgICAvKiBCdXQg b25seSBpZiBpdCBjaGFuZ2VkLiAqLwotICAgICAgICAgICAgbW92ZShDV19QTCwgMjIpOwotICAg ICAgICAgICAgcHJpbnR3KCIlZCIseCk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BMLCAo bG9uZykgeCApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAg ICAgIGNscnRvZW9sKCk7Ci0gICAgICAgICAgICBvbGRsZW4gPSB4OwotICAgICAgICB9Ci0gICAg ICAgIG1vdmUoQ1dfUEMsIDIyKTsgICAgICAgICAgICAgICAgLyogUGFja2V0IGNvdW50IChhbHdh eXMpLiAqLwotCi0gICAgICAgIHByaW50dygiJWQiLCAod2hhdCAmIFdfUkVDVikgPyBycGFja2V0 cyA6IHNwYWNrZXRzKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQ cm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQywgKGxvbmcpIHNwYWNrZXRz ICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBjbHJ0b2Vv bCgpOwotCi0gICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LICYmICFmdHApIHsgLyogV2lu ZG93IHNsb3RzICovCi0gICAgICAgICAgICBjaGFyIHdzWzE2XTsKLSAgICAgICAgICAgIGludCBm bGFnOwotICAgICAgICAgICAgZmxhZyA9IDA7Ci0jaWZkZWYgU1RSRUFNSU5HCi0gICAgICAgICAg ICBpZiAoc3RyZWFtaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZHdpbiAhPSAtMikgewot ICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHdzLCJTVFJFQU1JTkciKTsKLSAgICAgICAgICAg ICAgICAgICAgZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIG9sZHdpbiA9IC0yOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFNUUkVBTUlORyAq LwotICAgICAgICAgICAgICBpZiAod2N1ciAhPSBvbGR3aW4pIHsKLSAgICAgICAgICAgICAgICAg IHNwcmludGYod3MsICIlZCBvZiAlZCIsIHdjdXIgPCAxID8gMSA6IHdjdXIsIHdzbG90bik7Ci0g ICAgICAgICAgICAgICAgICBmbGFnID0gMTsKLSAgICAgICAgICAgICAgICAgIG9sZHdpbiA9IHdj dXI7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbGFnKSB7Ci0gICAgICAgICAg ICAgICAgbW92ZShDV19XUywgMjIpOwotICAgICAgICAgICAgICAgIHByaW50dygiJXMiLCB3cyk7 Ci0gICAgICAgICAgICAgICAgY2xydG9lb2woKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1Rwot ICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX1dTLCAobG9uZykgd3MgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICov Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZXJyb3JzID0gcmV0cmFucyArIGNy dW5jaGVkICsgdGltZW91dHM7Ci0gICAgICAgIGlmIChlcnJvcnMgIT0gb2xkdHJ5KSB7ICAgICAg ICAgLyogUmV0cnkgY291bnQsIGlmIGNoYW5nZWQgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfUFIs IDIyKTsKLSAgICAgICAgICAgIHByaW50dygiJWQiLGVycm9ycyk7Ci0jaWZkZWYgS1VJCi0jaWZu ZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwg KGxvbmcpIENXX1BSLCAobG9uZykgZXJyb3JzICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlm IC8qIEtVSSAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgICAgIG9sZHRyeSA9 IGVycm9yczsKLSAgICAgICAgfQotCS8qIFNlbmRlcidzIHBhY2tldCB0eXBlICovCi0gICAgICAg IGlmICghZnRwICYmIChjICE9IG9sZHR5cCAmJiBjICE9ICdZJyAmJiBjICE9ICdOJykpIHsKLSAg ICAgICAgICAgIGNoYXIgdHlwZVsyXTsKLSAgICAgICAgICAgIHNwcmludGYodHlwZSwgIiVjIixj KTsKLSAgICAgICAgICAgIG1vdmUoQ1dfUFQsMjIpOwotICAgICAgICAgICAgcHJpbnR3KCIlcyIs IHR5cGUpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QVCwgKGxvbmcpIHR5cGUgKTsKLSNl bmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgp OwotICAgICAgICAgICAgb2xkdHlwID0gYzsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGMp IHsgICAgICAgICAgICAgICAgICAgIC8qIE5vdyBoYW5kbGUgc3BlY2lmaWMgcGFja2V0IHR5cGVz ICovCi0gICAgICAgICAgY2FzZSAnUyc6ICAgICAgICAgICAgICAgICAgICAgLyogQmVnaW5uaW5n IG9mIHRyYW5zZmVyICovCi0gICAgICAgICAgICBmY250ID0gZmJ5dCA9IDBMOyAgICAgICAgICAg LyogQ2xlYXIgY291bnRlcnMgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgICAgICBndHYgPSAt MS4wOwotI2Vsc2UgLyogR0ZUSU1FUiAqLwotICAgICAgICAgICAgZ3R2ID0gLTFMOyAgICAgICAg ICAgICAgICAgIC8qIEFuZCBvbGQvbmV3IHRoaW5ncy4uLiAqLwotI2VuZGlmIC8qIEdGVElNRVIg Ki8KLSAgICAgICAgICAgIG9sZHBjdCA9IHBjdCA9IDBMOwotICAgICAgICAgICAgYnJlYWs7Ci0K LSAgICAgICAgICBjYXNlICdaJzogICAgICAgICAgICAgICAgICAgICAvKiBvciBFT0YgKi8KLSAg ICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1BUIFogcGt0bnVtIiwiIixuKTsKLSAg ICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1BUIFogb2xkcGN0IiwiIixvbGRwY3Qp OwotICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBTQ1JfUFQgWiBwY3QiLCIiLHBjdCk7 Ci0gICAgICAgICAgY2FzZSAnRCc6ICAgICAgICAgICAgICAgICAgICAgLyogRGF0YSBwYWNrZXQg Ki8KLSAgICAgICAgICAgIGlmIChmc2l6ID4gMEwpIHsgICAgICAgICAgICAvKiBTaG93IHBlcmNl bnQgZG9uZSBpZiBrbm93biAqLwotICAgICAgICAgICAgICAgIG9sZHBjdCA9IHBjdDsgICAgICAg ICAgIC8qIFJlbWVtYmVyIHByZXZpb3VzIHBlcmNlbnQgKi8KLSAgICAgICAgICAgICAgICBob3dm YXIgPSBmZmM7Ci0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgICAgICAgICAgICAgaWYgKHdoYXQgJiBX X1NFTkQpCS8qIEFjY291bnQgZm9yIFBTRU5EIG9yIFJFU0VORCAqLwotICAgICAgICAgICAgICAg ICAgaG93ZmFyICs9IHNlbmRzdGFydDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh3aGF0ICYg V19SRUNWKQotICAgICAgICAgICAgICAgICAgaG93ZmFyICs9IHJzX2xlbjsKLSNlbmRpZiAvKiBD S19SRVNFTkQgKi8KLSAgICAgICAgICAgICAgICAvKiBQZXJjZW50IGRvbmUsIHRvIGJlIGRpc3Bs YXllZC4uLiAqLwotICAgICAgICAgICAgICAgIGlmIChjID09ICdaJykgewotICAgICAgICAgICAg ICAgICAgICBpZiAoIWRpc2NhcmQgJiYgIWN4c2VlbiAmJiAhY3pzZWVuKSBwY3QgPSAxMDBMOwot ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgcGN0ID0gKGZzaXogPiA5 OUwpID8gKGhvd2ZhciAvIChmc2l6IC8gMTAwTCkpIDogMEw7Ci0gICAgICAgICAgICAgICAgaWYg KHBjdCA+IDEwMEwgfHwgICAgICAgLyogQWxsb3cgZm9yIGV4cGFuc2lvbiBhbmQgKi8KLSAgICAg ICAgICAgICAgICAgICAob2xkcGN0ID09IDk5TCAmJiBwY3QgPCAwTCkpIC8qIG90aGVyIGJvdW5k YXJ5IGNvbmRpdGlvbnMgKi8KLSAgICAgICAgICAgICAgICAgIHBjdCA9IDEwMEw7Ci0gICAgICAg ICAgICAgICAgaWYgKHBjdCAhPSBvbGRwY3QpICAgICAgLyogT25seSBkbyB0aGlzIDEwMCB0aW1l cyBwZXIgZmlsZSAqLwotICAgICAgICAgICAgICAgICAgdXBkcGN0KG9sZHBjdCwgcGN0KTsKLSAg ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbW92ZShDV19QQ0QsMjIpOwotICAg ICAgICAgICAgICAgIHByaW50dygiJXMiLCBja2ZzdG9hKGZmYykpOwotICAgICAgICAgICAgfQot I2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlf RklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGhvd2Zhcik7Ci0jZW5kaWYgLyog Szk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQp IHBjdCwgZnNpeiwgaG93ZmFyKTsKLSAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRf dHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg ICAgY2FzZSAnJSc6ICAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dHMsIHJldHJhbnNtaXNz aW9ucyAqLwotICAgICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFy KTsKLSAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93 ZmFyKTsgKi8KLQotICAgICAgICAgICAgZXJyb3JzID0gcmV0cmFucyArIGNydW5jaGVkICsgdGlt ZW91dHM7Ci0gICAgICAgICAgICBpZiAoZXJyb3JzICE9IG9sZHRyeSkgeyAgICAgLyogRXJyb3Ig Y291bnQsIGlmIGNoYW5nZWQgKi8KLSAgICAgICAgICAgICAgICBtb3ZlKENXX1BSLCAyMik7Ci0g ICAgICAgICAgICAgICAgcHJpbnR3KCIlZCIsZXJyb3JzKTsKLSAgICAgICAgICAgICAgICBjbHJ0 b2VvbCgpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX1BSLCAobG9uZykgZXJyb3JzCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKLSAgICAgICAgICAgICAg ICBpZiAocykgaWYgKCpzKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsK LSAgICAgICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIscyk7Ci0gICAgICAgICAgICAgICAgICAg IGNscnRvZW9sKCk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25n KSBzKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgJ0UnOiAgICAgICAgICAgICAg ICAgICAgIC8qIEVycm9yIHBhY2tldCAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIG1v dmUoQ1dfRVJSLDIyKTsgICAgICAgICAgICAvKiBQcmludCBpdHMgZGF0YSBmaWVsZCAqLwotICAg ICAgICAgICAgaWYgKCpzKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIscyk7Ci0jaWZk ZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJ X0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSBzICk7Ci0jZW5kaWYgLyogSzk1 RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2xydG9l b2woKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICBmY250ID0gZmJ5dCA9IDBM OyAgICAgICAgICAgLyogU28gbm8gYnl0ZXMgZm9yIHRoaXMgZmlsZSAqLwotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgY2FzZSAnUSc6ICAgICAgICAgICAgICAgICAgICAgLyogQ3J1bmNo ZWQgcGFja2V0ICovCi0gICAgICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBo b3dmYXIpOwotICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6 LCBob3dmYXIpOyAqLwotICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOwotICAgICAgICAgICAg cHJpbnR3KCJEYW1hZ2VkIFBhY2tldCIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgIkRhbWFnZWQgUGFja2V0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNl bmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgp OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAncSc6ICAgICAgICAgICAgICAg ICAgICAgLyogQ3RybC1DIG9yIGNvbm5lY3Rpb24gbG9zdCAqLwotICAgICAgICAgICAgbW92ZShD V19NU0csMjIpOwotCSAgICBjbHJ0b2VvbCgpOwotICAgICAgICAgICAgaWYgKCFzKSBzID0gIiI7 Ci0gICAgICAgICAgICBwcmludHcoIiVzIiwgKnMgPyBzIDogIlVzZXIgaW50ZXJydXB0aW9uIG9y IGNvbm5lY3Rpb24gbG9zdCIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBDV19NU0csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5k aWYgLyogS1VJICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdUJzogICAg ICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0ICovCi0gICAgICAgICAgICBjcHMgPSBzaG9jcHMo KGludCkgcGN0LCBmc2l6LCBob3dmYXIpOwotICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRs KG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLwotICAgICAgICAgICAgbW92ZShDV19FUlIs MjIpOwotICAgICAgICAgICAgcHJpbnR3KCJUaW1lb3V0ICVkIHNlYyIscmN2dGltbyk7Ci0jaWZk ZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxF X1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiVGltZW91dCIKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAg ICAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgICAgIGVycm9ycyA9IHJldHJhbnMgKyBjcnVu Y2hlZCArIHRpbWVvdXRzOwotICAgICAgICAgICAgaWYgKGVycm9ycyAhPSBvbGR0cnkpIHsgICAg IC8qIEVycm9yIGNvdW50LCBpZiBjaGFuZ2VkICovCi0gICAgICAgICAgICAgICAgbW92ZShDV19Q UiwgMjIpOwotICAgICAgICAgICAgICAgIHByaW50dygiJWQiLGVycm9ycyk7Ci0jaWZkZWYgS1VJ Ci0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9U UkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfUFIsIChs b25nKSBlcnJvcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8q IEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOwot ICAgICAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIE90 aGVycywgZG8gbm90aGluZyAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg ICAgcmVmcmVzaCgpOwotI2lmZGVmIE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKLSNl bmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9TVDogICAg ICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBzdGF0dXMgKi8KLSAgICAgICAgZGVi dWcoRjEwMSwic2NyZWVuYyBTQ1JfU1QgYyIsIiIsYyk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInNj cmVlbmMgU0NSX1NUIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJz Y3JlZW5jIFNDUl9TVCBjeHNlZW4iLCIiLGN4c2Vlbik7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAg ICBtb3ZlKENXX1BDRCwyMik7ICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBwZXJjZW50IGRvbmUg Ki8KLSAgICAgICAgaWYgKGMgPT0gU1RfT0spIHsgICAgICAgICAgICAgICAvKiBPSywgcHJpbnQg MTAwICUgKi8KLSAgICAgICAgICAgIGlmIChwY3RsYmwpCi0gICAgICAgICAgICAgIHVwZHBjdChv bGRwY3QsMTAwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJpbnR3KCIlcyIs IGNrZnN0b2EoZmZjKSk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgZmZj KTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBwY3Qg PSAxMDA7Ci0gICAgICAgICAgICBvbGRwY3QgPSAwOwotICAgICAgICB9IGVsc2UgaWYgKGZzaXog PiAwTCkgICAgICAgICAgIC8qIE5vdCBPSywgdXBkYXRlIGZpbmFsIHBlcmNlbnQgKi8KLS8qCi0g IFRoZSBlbHNlIHBhcnQgd3JpdGVzIGFsbCBvdmVyIHRoZSBzY3JlZW4gLS0gaG93ZmFyIGFuZC9v ciBmc2l6IGhhdmUKLSAgYmVlbiByZXNldCBhcyBhIGNvbnNlcXVlbmNlIG9mIHRoZSBub3QtT0tu ZXNzIG9mIHRoZSB0cmFuc2Zlci4KLSovCi0gICAgICAgICAgaWYgKHBjdGxibCkKLSAgICAgICAg ICAgIHVwZHBjdChvbGRwY3QsIChob3dmYXIgKiAxMDBMKSAvIGZzaXopOwotICAgICAgICBjbHJ0 b2VvbCgpOwotI2Vsc2UKLSAgICAgICAgaWYgKGMgPT0gU1RfT0spIHsgICAgICAgICAgICAgICAv KiBPSywgcHJpbnQgMTAwICUgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfUENELDIyKTsgICAgICAg ICAgICAvKiBVcGRhdGUgcGVyY2VudCBkb25lICovCi0gICAgICAgICAgICBpZiAocGN0bGJsKSB7 Ci0JCWlmIChvbGRwY3QgPT0gMCkJLyogU3dpdGNoaW5nIGZyb20gImJ5dGVzIHNvIGZhciIgKi8K LQkJICBjbHJ0b2VvbCgpOwkJLyogdG8gInBlcmNlbnQgZG9uZSIuLi4gKi8KLQkJdXBkcGN0KG9s ZHBjdCwxMDApOwotCSAgICB9IGVsc2UKLSAgICAgICAgICAgICAgcHJpbnR3KCIlcyIsIGNrZnN0 b2EoZmZjKSk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgZmZjKTsKLSNl bmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAg ICAgICAgcGN0ID0gMTAwOwotICAgICAgICAgICAgb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01N RU5UICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyogTm8sIGxlYXZlIGl0IHRoZXJlIHNvIHRoZXkg Y2FuIHJlYWQgaXQgKi8KLSAgICAgICAgbW92ZShDV19NU0csMjIpOyAgICAgICAgICAgICAgICAv KiBSZW1vdmUgYW55IHByZXZpb3VzIG1lc3NhZ2UgKi8KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1 RwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19N U0csIChsb25nKSAiIiApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAg ICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAg ICAgICBtb3ZlKENXX1RSLCAyMik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAg S3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfVFIsIChsb25nKSAi IiApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xydG9l b2woKTsgcmVmcmVzaCgpOwotCi0gICAgICAgIHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAg ICAgLyogUHJpbnQgbmV3IHN0YXR1cyBtZXNzYWdlICovCi0gICAgICAgICAgY2FzZSBTVF9PSzog ICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgT0sgKi8KLSAgICAgICAgICAgIGZjbnQrKzsg ICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCB0aGlzIGZpbGUgKi8KLQkgICAgaWYgKHdoYXQg PT0gKFdfRlRQfFdfRlRfREVMRSkpIHsKLQkJbW92ZShDV19NU0csMjIpOwotCQljbHJ0b2VvbCgp OwotCQlwcmludHcoIkRlbGV0ZSBPSyIpOwotCSAgICB9IGVsc2UgewotCQlmYnl0ICs9IGZmYzsK LQkJbW92ZShDV19NU0csMjIpOwotCQljbHJ0b2VvbCgpOwotCQlwcmludHcoIlRyYW5zZmVyIE9L Iik7Ci0JICAgIH0KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgQ1dfTVNHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJUcmFuc2Zl ciBPSyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwot I2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAg ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9ESVNDOiAgICAgICAgICAgICAg ICAgLyogRGlzY2FyZGVkICovCi0gICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7Ci0gICAgICAg ICAgICBwcmludHcoIkZpbGUgZGlzY2FyZGVkIik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcK LSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSAiRmlsZSBkaXNjYXJkZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAg ICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg ICAgICAgIGNhc2UgU1RfSU5UOiAgICAgICAgICAgICAgICAgIC8qIEludGVycnVwdGVkICovCi0g ICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7Ci0gICAgICAgICAgICBwcmludHcoIlRyYW5zZmVy IGludGVycnVwdGVkIik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiVHJh bnNmZXIgaW50ZXJydXB0ZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlm IC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAg ICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIGNs cnRvZW9sKCk7IHJlZnJlc2goKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNh c2UgU1RfU0tJUDogICAgICAgICAgICAgICAgIC8qIFNraXBwZWQgKi8KLSAgICAgICAgICAgIG1v dmUoQ1dfRVJSLDIyKTsKLQkgICAgaWYgKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pCi0JICAgICAg cHJpbnR3KCJGaWxlIHNraXBwZWQgKCVzKSIsc2tyZWFzb25bbl0pOwotCSAgICBlbHNlCi0JICAg ICAgcHJpbnR3KCJGaWxlIHNraXBwZWQiKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpICJGaWxlIHNraXBwZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2Vu ZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAg ICAgICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAg IGNscnRvZW9sKCk7IHJlZnJlc2goKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg IGNhc2UgU1RfRVJSOiAgICAgICAgICAgICAgICAgIC8qIEVycm9yIG1lc3NhZ2UgKi8KLSAgICAg ICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKLSAgICAgICAgICAgIGlmICghcykgcyA9IChjaGFyICop ZXBrdG1zZzsKLSAgICAgICAgICAgIHByaW50dygiJXMiLHMpOwotI2lmZGVmIEtVSQotI2lmbmRl ZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19FUlIsIChsb25nKSBzICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtV SSAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAg ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9SRUZVOiAgICAgICAgICAgICAg ICAgLyogUmVmdXNlZCAqLwotICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOwotICAgICAgICAg ICAgaWYgKCpzKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBlcnJidWZbNjRdIDsKLSAgICAgICAg ICAgICAgICBzcHJpbnRmKCBlcnJidWYsICJSZWZ1c2VkLCAlcyIsIHMgKSA7Ci0gICAgICAgICAg ICAgICAgcHJpbnR3KCIlcyIsIGVycmJ1Zik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAg ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZykgQ1df RVJSLChsb25nKSBlcnJidWYpOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8K LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCJSZWZ1c2VkIik7 Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0 eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylDV19FUlIsKGxvbmcpIlJlZnVzZWQiKTsKLSNlbmRp ZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICB9Ci0jaWZkZWYgQ09N TUVOVAotICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0gICAgICAgICAgICByZXR1cm47 Ci0KLSAgICAgICAgICBjYXNlIFNUX0lOQzoKLSAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsK LSAgICAgICAgICAgIHByaW50dygiSW5jb21wbGV0ZSIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBL OTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylD V19FUlIsKGxvbmcpIkluY29tcGxldGUiKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyog S1VJICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0g ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX01TRzoKLSAgICAgICAgICAg IG1vdmUoQ1dfTVNHLDIyKTsKLSAgICAgICAgICAgIHByaW50dygiJXMiLHMpOwotI2lmZGVmIEtV SQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwobG9uZylDV19NU0csKGxvbmcpcyk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8q IEtVSSAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAgICAgICAgICAg cmV0dXJuOwotCi0gICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgLyogQmFk IGNhbGwgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKLSAgICAgICAgICAgIHByaW50 dygiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBzdGF0dXMgKioqIik7Ci0jaWZkZWYgS1VJ Ci0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIqKiog c2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIHN0YXR1cyAqKioiICk7Ci0jZW5kaWYgLyogSzk1RyAq LwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOyBy ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBTQ1JfVEM6IHsgICAgICAgICAgICAgICAg ICAgIC8qIFRyYW5zYWN0aW9uIGNvbXBsZXRlICovCi0gICAgICAgICAgY2hhciBtc2didWZbMTI4 XTsKLSAgICAgICAgICBtb3ZlKENXX0NQLDIyKTsgICAgICAgICAgICAgICAvKiBPdmVyYWxsIHRy YW5zZmVyIHJhdGUgKi8KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgIEt1aVNl dFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0NQLCB0ZmNwcyk7Ci0jZW5k aWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgIHByaW50dygiJXMiLCBj a2ZzdG9hKHRmY3BzKSk7Ci0gICAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgICBpZiAoc3Vj Y2VzcykgewotICAgICAgICAgICAgICBtb3ZlKENXX01TRywyMik7ICAgICAgICAgIC8qIFByaW50 IHN0YXRpc3RpY3MgaW4gbWVzc2FnZSBsaW5lICovCi0gICAgICAgICAgICAgIGNscnRvZW9sKCk7 Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgICAgICAgIHNw cmludGYobXNnYnVmLAotICAgICAgICAgICAgICAgICAgICAgICJTVUNDRVNTLiAgRmlsZXM6ICVs ZCwgQnl0ZXM6ICVzLCAlbGQgQ1BTIiwKLSAgICAgICAgICAgICAgICAgICAgICBmaWxjbnQgLSBm aWxyZWosCi0gICAgICAgICAgICAgICAgICAgICAgY2tmc3RvYShmYnl0KSwKLSAgICAgICAgICAg ICAgICAgICAgICB0ZmNwcwotICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAg IHByaW50dygiJXMiLCBtc2didWYpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgbXNnYnVmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYg LyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgICBjbHJ0b2VvbCgpOwot Ci0gICAgICAgICAgfQotICAgICAgICAgIG1vdmUoQ1dfVFIsIDEpOwotICAgICAgICAgIHByaW50 dygiICAgICAgIEVsYXBzZWQgVGltZTogJXMiLGhobW1zcygobG9uZykKLSNpZmRlZiBHRlRJTUVS Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcHRz ZWNzICsgMC41KQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdHNlY3MKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKLSNpZmRlZiBLVUkKLSNpZm5k ZWYgSzk1RwotICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19UUiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgaGhtbXNzKChsb25nKQotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChmcHRzZWNzICsgMC41KQotI2Vsc2UKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZWNzCi0jZW5kaWYgLyogR0ZUSU1FUiAq LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7Ci0jZW5kaWYgLyog Szk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAg ICAgbW92ZSgyMywwKTsgY2xydG9lb2woKTsgICAgICAgLyogQ2xlYXIgaW5zdHJ1Y3Rpb25zIGxp bmVzICovCi0gICAgICAgICAgbW92ZSgyMiwwKTsgY2xydG9lb2woKTsgICAgICAgLyogdG8gbWFr ZSByb29tIGZvciBwcm9tcHQuICovCi0gICAgICAgICAgcmVmcmVzaCgpOwotCi0jaWZkZWYgR0ZU SU1FUgotICAgICAgICAgIG9sZGd0diA9IChDS0ZMT0FUKSAtMS4wOwotI2Vsc2UKLSAgICAgICAg ICBvbGRndHYgPSAtMUw7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0jaWZuZGVmIFZNU0NVUlNF Ci0JICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGVuZHdpbiBBIiwiIiwwKTsKLSAgICAgICAgICBlbmR3 aW4oKTsKLSNpZmRlZiBDT01NRU5UCi0vKgotICBXaHkgYW5kIHdoZW4gd2FzIHRoaXMgY2FsbCB0 byBjb25yZXMoKSBhZGRlZD8gIEl0IG1ha2VzIG5vIHNlbnNlLAotICBhbmQgaXQgYnJlYWtzIGVj aG9pbmcgb24gU29sYXJpcyA4LgotKi8KLSNpZmRlZiBTT0xBUklTCi0gICAgICAgICAgY29ucmVz KCk7Ci0jZW5kaWYgLyogU09MQVJJUyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAv KiBWTVNDVVJTRSAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgIHBjdCA9IDEwMDsgb2xk cGN0ID0gMDsgICAgICAgIC8qIFJlc2V0IHRoZXNlIGZvciBuZXh0IHRpbWUuICovCi0jZW5kaWYg LyogQ09NTUVOVCAqLwotICAgICAgICAgIG9sZHR5cCA9IDA7IG9sZHJ0dCA9IC0xTDsgb2xkdHJ5 ID0gLTE7IG9sZGxlbiA9IC0xOwotICAgICAgICAgIG9sZHRpbSA9IC0xOwotICAgICAgICAgIGNl bmR3ID0gMTsKLSAgICAgICAgICBpZiAoeGZyYmVsKSBibGVlcChCUF9OT1RFKTsgICAvKiBDbG9z ZSB3aW5kb3csIHRoZW4gYmVlcC4gKi8KLSNpZmRlZiBVTklYCi0gICAgICAgICAgZmZsdXNoKHN0 ZG91dCk7Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICAgIGZ0X3dpbiA9IDA7ICAgICAgICAg ICAgICAgICAgIC8qIFdpbmRvdyBjbG9zZWQuICovCi0gICAgICAgICAgcmV0dXJuOwotICAgICAg fQotICAgICAgY2FzZSBTQ1JfRU06ICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIHBhY2tl dCAoZmF0YWwpICovCi0gICAgICAgIG1vdmUgKENXX0VSUiwyMik7Ci0gICAgICAgIHByaW50dygi RkFJTFVSRTogJXMiLHMpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNl dFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMgKTsK LSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGlmICh4ZnJiZWwp IGJsZWVwKEJQX0ZBSUwpOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgcGN0ID0gb2xkcGN0ID0g MDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsg cmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9RRTogICAgICAgICAgICAgICAgICAgICAgLyogUXVh bnRpdHkgZXF1YWxzICovCi0gICAgICBjYXNlIFNDUl9UVTogICAgICAgICAgICAgICAgICAgICAg LyogVW5kZWxpbWl0ZWQgdGV4dCAqLwotICAgICAgY2FzZSBTQ1JfVE46ICAgICAgICAgICAgICAg ICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IHN0YXJ0ICovCi0gICAgICBjYXNlIFNDUl9UWjog ICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgZW5kICovCi0gICAgICAg IHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogKGlnbm9yZWQgaW4gZnVsbHNjcmVl biBkaXNwbGF5KSAqLwotCi0gICAgICBjYXNlIFNDUl9NUzoJCQkvKiBNZXNzYWdlIGZyb20gS2Vy bWl0IHBhcnRuZXIgKi8KLSAgICAgICAgbW92ZShDV19NU0csMjIpOwotCXByaW50dygiJXMiLHMp OwotICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7IHJldHVybjsKLQotICAgICAgY2FzZSBT Q1JfWEQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFgtcGFja2V0IGRhdGEgKi8KLSAgICAgICAg cGN0ID0gb2xkcGN0ID0gMDsKLSAgICAgICAgbW92ZShDV19OQU0sMjIpOwotICAgICAgICBwcmlu dHcoIiVzIixzKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICk7Ci0jZW5k aWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBjbHJ0b2VvbCgpOyByZWZy ZXNoKCk7IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfQ1c6ICAgICAgICAgICAgICAgICAgICAg IC8qIENsb3NlIFdpbmRvdyAqLwotICAgICAgICBjbHJ0b2VvbCgpOyBtb3ZlKDIzLDApOyBjbHJ0 b2VvbCgpOyBtb3ZlKDIyLDApOyBjbHJ0b2VvbCgpOwotICAgICAgICByZWZyZXNoKCk7Ci0jaWZk ZWYgQ09NTUVOVAotICAgICAgICBwY3QgPSAxMDA7IG9sZHBjdCA9IDA7ICAgICAgICAgIC8qIFJl c2V0IHRoZXNlIGZvciBuZXh0IHRpbWUuICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAg ICBvbGR0eXAgPSAwOyBvbGRydHQgPSAtMUw7IG9sZHRyeSA9IC0xOyBvbGRsZW4gPSAtMTsKLSAg ICAgICAgb2xkdGltID0gLTE7Ci0KLSNpZm5kZWYgVk1TQ1VSU0UKLQlkZWJ1ZyhGMTAwLCJzY3Jl ZW5jIGVuZHdpbiBCIiwiIiwwKTsKLSAgICAgICAgZW5kd2luKCk7Ci0jZW5kaWYgLyogVk1TQ1VS U0UgKi8KLSAgICAgICAgZnRfd2luID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHRo YXQgd2luZG93IGlzIGNsb3NlZC4gKi8KLSAgICAgICAgY2VuZHcgPSAxOyByZXR1cm47Ci0KLSAg ICAgIGNhc2UgU0NSX0NEOiAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IGN1cnJlbnQg ZGlyZWN0b3J5ICovCi0gICAgICAgIG1vdmUoQ1dfRElSLDIyKTsKLSAgICAgICAgIHByaW50dygi JXMiLCBzKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9wZXJ0 eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19ESVIsIChsb25nKSBzICk7Ci0jZW5kaWYg LyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAg ICByZWZyZXNoKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGRlZmF1bHQ6ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBCYWQgY2FsbCAqLwotICAgICAgICBtb3ZlIChDV19FUlIsMjIp OwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAotICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQg ZnVuY3Rpb24gY29kZSAqKioiCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyog Szk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBwcmludHcoIioqKiBzY3JlZW4oKSBj YWxsZWQgd2l0aCBiYWQgZnVuY3Rpb24gY29kZSAqKioiKTsKLSAgICAgICAgY2xydG9lb2woKTsg cmVmcmVzaCgpOyByZXR1cm47Ci0gICAgfQotfQotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi0j aWZkZWYgS1VJCi0jaWZkZWYgQ0tfQU5TSUMKLXZvaWQKLXNjcmVlbmcoaW50IGYsIGNoYXIgYyxs b25nIG4sY2hhciAqcykKLSNlbHNlCi1DS1ZPSUQKLXNjcmVlbmcoZixjLG4scykKLWludCBmOyAg ICAgICAgICAvKiBhcmd1bWVudCBkZXNjcmlwdG9yICovCi1jaGFyIGM7ICAgICAgICAgLyogYSBj aGFyYWN0ZXIgb3Igc21hbGwgaW50ZWdlciAqLwotbG9uZyBuOyAgICAgICAgIC8qIGEgbG9uZyBp bnRlZ2VyICovCi1jaGFyICpzOyAgICAgICAgLyogYSBzdHJpbmcgKi8KLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotLyogc2NyZWVuZygpICovIHsKLSNpZmRlZiBDS19TU0wKLSAgICBleHRlcm4gaW50 IHRsc19hY3RpdmVfZmxhZywgc3NsX2FjdGl2ZV9mbGFnOwotI2VuZGlmIC8qIENLX1NTTCAqLwot I2lmZGVmIFJMT0dDT0RFCi0gICAgZXh0ZXJuIGludCB0dG5wcm90bzsKLSNlbmRpZiAvKiBSTE9H Q09ERSAqLwotICAgIHN0YXRpYyBpbnQgcSA9IDA7Ci0gICAgc3RhdGljIENLX09GRl9UIGZzaXog PSAoQ0tfT0ZGX1QpLTE7IC8qIENvcHkgb2YgZmlsZSBzaXplICovCi0gICAgc3RhdGljIGxvbmcg ZmNudCA9IDBMOyAgICAvKiBOdW1iZXIgb2YgZmlsZXMgdHJhbnNmZXJyZWQgKi8KLSAgICBzdGF0 aWMgbG9uZyBmYnl0ID0gMEw7ICAgIC8qIFRvdGFsIGZpbGUgYnl0ZXMgb2YgYWxsIGZpbGVzIHRy YW5zZmVycmVkICovCi0gICAgc3RhdGljIENLX09GRl9UIGhvd2ZhciA9IChDS19PRkZfVCkwOyAv KiBIb3cgbXVjaCBvZiBmaWxlIHhmZXInZCBzbyBmYXIgKi8KLSAgICBzdGF0aWMgaW50ICBwY3Rs YmwgPSAwTDsgIC8qIFBlcmNlbnQgZG9uZSB2cyBCeXRlcyBzbyBmYXIgKi8KLSAgICBsb25nIGNw cyA9IDBMOwotCi0gICAgaW50IG5ldCA9IDA7Ci0gICAgaW50IHhuZXQgPSAwOwotICAgIGludCBm dHAgPSAwOwotICAgIGludCBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0 aCBvZiBzdHJpbmcgKi8KLSAgICBpbnQgZXJyb3JzID0gMDsgICAgICAgICAgICAgICAgICAgICAv KiBFcnJvciBjb3VudGVyICovCi0gICAgaW50IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogV29ya2VyICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIGNpbml0IiwiIixjaW5p dCk7Ci0gICAgZGVidWcoRjEwMSwic2NyZWVuZyBjZW5kdyIsIiIsY2VuZHcpOwotCi0gICAgaWYg KCFzKSBzID0gIiI7ICAgICAgICAgICAgICAgICAgICAgLyogQWx3YXlzIGRvIHRoaXMuICovCi0K LSAgICBmdHAgPSAod2hhdCAmIFdfRlRQKSA/IDEgOiAwOwkvKiBGVFAgb3IgS2VybWl0ICovCi0g ICAgbmV0ID0gbmV0d29yayB8fCBmdHA7Ci0gICAgeG5ldCA9IGZ0cCA/IDEgOiBuZXR0eXBlOwkJ LyogTkVUX1RDUEIgPT0gMSAqLwotCi0gICAgaWYgKGNpbml0ID09IDAgfHwgY2VuZHcgPiAwKSB7 ICAgICAgLyogSGFuZGxlIGJvcmRlcmxpbmUgY2FzZXMuLi4gKi8KLSAgICAgICAgaWYgKGYgPT0g U0NSX0NXKSB7ICAgICAgICAgICAgICAvKiBDbG9zZSB3aW5kb3csIGJ1dCBpdCdzIG5vdCBvcGVu ICovCi0gICAgICAgICAgICBmdF93aW4gPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg ICB9Ci0gICAgICAgIGRlYnVnKEYxMTEsInNjcmVlbmcgQSIscyxmKTsKLSAgICAgICAgaWYgKGYg PT0gU0NSX0VNIHx8Ci0gICAgICAgICAgIChmID09IFNDUl9QVCAmJiBjID09ICdFJykpIHsgLyog RmF0YWwgZXJyb3IgYmVmb3JlIHdpbmRvdyBvcGVuICovCi0gICAgICAgICAgICBjb25vbGwoIiIp OyBjb25vYygnPycpOyBjb25vbGwocyk7IHJldHVybjsgLyogUmVndWxhciBkaXNwbGF5ICovCi0g ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGNpbml0ID09IDApIHsgICAgICAgICAgICAgICAgICAg LyogT25seSBjYWxsIGluaXRzY3IoKSBvbmNlICovCi0JLyogQ2hlY2sgdGhlc2Ugbm93IC0tIGlm IHRoZXkgYXJlIGRlZmluZWQgYnV0IG5vdCBudW1lcmljICovCi0JLyogdGhleSBjYW4gY3Jhc2gg Y3Vyc2VzICovCi0gICAgICAgIGNlbmR3ID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogTmV3 IHdpbmRvdyBuZWVkcyByZXBhaW50aW5nICovCi0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmcg Y2FsbGluZyBpbml0c2NyIiwiIiwwKTsKLSAgICAgICAgaW5pdHNjcigpOyAgICAgICAgICAgICAg ICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcy4gKi8KLSAgICAgICAgZGVidWcoRjEwMCwic2Ny ZWVuZyBpbml0c2NyIG9rIiwiIiwwKTsKLSAgICAgICAgY2luaXQrKzsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBSZW1lbWJlciBjdXJzZXMgd2FzIGluaXRpYWxpemVkLiAqLwotICAgIH0KLSAg ICBmdF93aW4gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgaXMgb3BlbiAq LwotICAgIGlmIChyZXBhaW50KSB7Ci0jaWZkZWYgQ0tfV1JFRlJFU0gKLS8qCi0gIFRoaXMgdG90 YWxseSByZXBhaW50cyB0aGUgc2NyZWVuLCBqdXN0IHdoYXQgd2Ugd2FudCwgYnV0IHdlIGNhbiBv bmx5Ci0gIGRvIHRoaXMgd2l0aCByZWFsIGN1cnNlcywgYW5kIHRoZW4gb25seSBpZiBjbGVhcm9r KCkgYW5kIHdyZWZyZXNoKCkgYXJlCi0gIHByb3ZpZGVkIGluIHRoZSBjdXJzZXMgbGlicmFyeS4K LSovCi0gICAgICAgIFJlc3RvcmVDbWRNb2RlKCk7Ci0jZWxzZSAgLyogTm8gQ0tfV1JFRlJFU0gg Ki8KLS8qCi0gIEtlcm1pdCdzIGRvLWl0LXlvdXJzZWxmIG1ldGhvZCwgd29ya3Mgd2l0aCBhbGwg dHlwZXMgb2YgZnVsbHNjcmVlbgotICBzdXBwb3J0LCBidXQgZG9lcyBub3QgcmVwYWludCBhbGwg dGhlIGZpZWxkcy4gIEZvciBleGFtcGxlLCB0aGUgZmlsZW5hbWUKLSAgaXMgbG9zdCwgYmVjYXVz ZSBpdCBhcnJpdmVzIGF0IGEgY2VydGFpbiB0aW1lIGFuZCBuZXZlciBjb21lcyBhZ2FpbiwgYW5k Ci0gIEtlcm1pdCBwcmVzZW50bHkgZG9lcyBub3Qgc2F2ZSBpdCBhbnl3aGVyZS4gIE1ha2luZyB0 aGlzIG1ldGhvZCB3b3JrIGZvcgotICBhbGwgZmllbGRzIHdvdWxkIGJlIGEgcmF0aGVyIG1ham9y IHJlY29kaW5nIHRhc2ssIGR1cGxpY2F0aW5nIHdoYXQgY3Vyc2VzCi0gIGFscmVhZHkgZG9lcywg YW5kIHdvdWxkIGFkZCBhIGxvdCBvZiBjb21wbGV4aXR5IGFuZCBzdG9yYWdlIHNwYWNlLgotKi8K LSAgICAgICAgY2VuZHcgPSAxOwotI2VuZGlmIC8qIENLX1dSRUZSRVNIICovCi0gICAgICAgIHJl cGFpbnQgPSAwOwotICAgIH0KLSAgICBpZiAoY2VuZHcpIHsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBlbmR3aW4oKSB3YXMgY2FsbGVkIHByZXZpb3VzbHkgKi8KLSAgICAgICAgZGVidWcoRjEw MCwic2NyZWVuZyBzZXR1cCBvayIsIiIsMCk7Ci0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlf RklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0RJUiwgKGxvbmcpIHpndGRpcigpICk7Ci0gICAgICAg IEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0xJTiwKLSAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSAoCi0jaWZkZWYgTkVXRlRQCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZ0cCA/IChmdHBfaG9zdCA/IGZ0cF9ob3N0IDogIih1bmtub3du KSIpIDoKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdHRuYW1lKSApOwotCi0gICAgICAgIGlmIChuZXQpIHsKLSNpZmRlZiBORVRDT05OCi0JICAg IGludCBzZWN1cmUgPSAwOwotCSAgICBjaGFyICogeG5hbWU7Ci0JICAgIGlmICh4bmV0ID4gbm5l dG5hbWUpCi0JICAgICAgeG5hbWUgPSAiW0VSUk9SXSI7Ci0JICAgIGVsc2UKLQkgICAgICB4bmFt ZSA9IG5ldG5hbWVbeG5ldF07Ci0jaWZkZWYgTkVXRlRQCi0gICAgICAgICAgICBpZiAoZnRwKSB7 Ci0JCWlmIChmdHBpc3NlY3VyZSgpKQotCQkgIHNlY3VyZSA9IDE7Ci0JICAgIH0gZWxzZQotI2Vu ZGlmIC8qIE5FV0ZUUCAqLwotCSAgICAgIGlmICgwCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAg ICAgICAgICAgIHx8IElTX1NTSCgpCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVmIENL X0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICB8fCBja190bl9lbmNyeXB0aW5nKCkgJiYgY2tf dG5fZGVjcnlwdGluZygpCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVmIENLX1NT TAotICAgICAgICAgICAgICAgIHx8IHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcK LSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBSTE9HQ09ERQotI2lmZGVmIENLX0tFUkJFUk9T Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09IE5Q X0VLNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOCi0jZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0jZW5kaWYgLyogUkxPR0NPREUgKi8K LSAgICAgICAgICAgICAgICAgKSB7Ci0JCXNlY3VyZSA9IDE7Ci0JICAgIH0KLQkgICAgaWYgKHNl Y3VyZSkgewotICAgICAgICAgICAgICAgIGNoYXIgYnVmWzMwXTsKLSAgICAgICAgICAgICAgICBz cHJpbnRmKGJ1ZiwiJXMgKFNFQ1VSRSkiLHhuYW1lKTsKLSAgICAgICAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgQ1dfU1BELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBi dWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSB4bmFtZQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg Q1dfU1BELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIobmV0d29yaykiCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzcGVlZCA8IDBMKQotICAgICAgICAgICAgICBz cGVlZCA9IHR0Z3NwZCgpOwotICAgICAgICAgICAgaWYgKHNwZWVkID4gMEwpIHsKLSAgICAgICAg ICAgICAgICBpZiAoc3BlZWQgPT0gODg4MCkgewotICAgICAgICAgICAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpIENXX1NQRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpICI3NS8xMjAwIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgc3BlZWRi dWZbNjRdIDsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzcGVlZGJ1ZiwgIiVsZCIsIHNw ZWVkKTsKLSAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNG RVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBzcGVlZGJ1ZgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVf VFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIih1bmtub3duKSIKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g ICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgQ1dfUEFSLAotICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgcGFy bmFtKChjaGFyKXBhcml0eSkKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcGN0 bGJsID0gKHdoYXQgJiBXX1NFTkQpOwotICAgICAgICBjZW5kdyA9IDA7Ci0gICAgfQotICAgIGRl YnVnKEYxMDEsIlNDUkVFTkMgc3dpdGNoIiwiIixmKTsKLSAgICBkZWJ1ZyhGMDAwLCJTQ1JFRU5D IGMiLCIiLGMpOwotICAgIGRlYnVnKEYxMDEsIlNDUkVFTkMgbiIsIiIsbik7Ci0KLSAgICBsZW4g PSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgYXJndW1lbnQgc3Ry aW5nICovCi0gICAgc3dpdGNoIChmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxl IG91ciBmdW5jdGlvbiBjb2RlICovCi0gICAgICBjYXNlIFNDUl9GTjogICAgICAgICAgICAgICAg ICAgICAgLyogRmlsZW5hbWUgKi8KLSAgICAgICAgb2xkcGN0ID0gcGN0ID0gMEw7ICAgICAgICAg ICAgICAvKiBSZXNldCBwZXJjZW50cyAqLwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgZ3R2ID0g KENLRkxPQVQpIC0xLjA7Ci0gICAgICAgIC8qIG9sZGd0diA9IChDS0ZMT0FUKSAtMS4wOyAqLwot I2Vsc2UKLSAgICAgICAgZ3R2ID0gLTFMOwotICAgICAgICAvKiBvbGRndHYgPSAtMUw7ICovCi0j ZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgICAgICBvbGR3aW4gPSAtMTsKLSAgICAgICAgZnNpeiA9 IChDS19PRkZfVCktMUw7CQkvKiBJbnZhbGlkYXRlIHByZXZpb3VzIGZpbGUgc2l6ZSAqLwotICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQ0QsIChs b25nKSAwICk7Ci0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxv bmcpIENXX0ZGQywgKGxvbmcpIDAgKTsKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxF X1RSQU5TRkVSLCAobG9uZykgQ1dfU0laLCAobG9uZykgMCApOwotICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSAiIiApOwotCi0g ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwg KGxvbmcpIHMgKTsKLSAgICAgICAgcSA9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZW1lbWJlciBuYW1lIGxlbmd0aCBmb3IgbGF0ZXIgKi8KLSAgICAgICAgc2NyZnQoKTsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IGZpbGUgdHlwZSAoY2FuIGNoYW5nZSkgKi8KLSNp ZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7Ci0jZW5kaWYgLyogT1MyICovCi0g ICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfQU46ICAgICAgICAgICAgICAgICAgICAg IC8qIEZpbGUgYXMtbmFtZSAqLwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJB TlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFNh dmVDbWRNb2RlKDAsIDApOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm47Ci0KLSAg ICAgIGNhc2UgU0NSX0ZTOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHNpemUgKi8KLSAg ICAgICAgZnNpeiA9IG47Ci0gICAgICAgIGlmIChmc2l6ID4gKENLX09GRl9UKS0xKSB7Ci0gICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19TSVos IChsb25nKSBuICk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZzaXogPiAoQ0tfT0ZGX1QpLTEp IHsJLyogUHV0IHVwIHBlcmNlbnQgbGFiZWwgKi8KLSAgICAgICAgICAgIHBjdGxibCA9IDE7Ci0g ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwY3RsYmwgPSAwOwotCX0KLSAgICAgICAgc2Ny ZnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHR5cGUgKi8KLSNpZmRlZiBPUzIK LSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJl dHVybjsKLQotICAgICAgY2FzZSBTQ1JfUFQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFBhY2tl dCB0eXBlIG9yIHBzZXVkb3R5cGUgKi8KLSAgICAgICAgaWYgKHNwYWNrZXRzIDwgNSkgewotICAg ICAgICAgICAgZXh0ZXJuIGludCBzeXNpbmRleDsKLSAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qg c3lzZGF0YSBzeXNpZGxpc3RbXTsKLSAgICAgICAgICAgIC8qIFRoaW5ncyB0aGF0IHdvbid0IGNo YW5nZSBhZnRlciB0aGUgNHRoIHBhY2tldCAqLwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENX X1BBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBwYXJuYW0oKGNoYXIpcGFy aXR5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGlmICgKLSNp ZmRlZiBORVdGVFAKLQkJKGZ0cCAmJiAoc3BhY2tldHMgPT0gMSB8fCBycGFja2V0cyA9PSAxKSkg fHwKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQkJc3BhY2tldHMgPT0gNAotCQkpIHsKLSAgICAgICAg ICAgICAgICBpZiAoCi0jaWZkZWYgTkVXRlRQCi0JCSAgICBmdHAgfHwKLSNlbmRpZiAvKiBORVdG VFAgKi8KLQkJICAgICgocHJvdG9jb2wgPT0gUFJPVE9fSykgJiYgKHN5c2luZGV4ID4gLTEpKQot CQkgICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgbXNnYnVmWzEyOF07Ci0gICAgICAg ICAgICAgICAgICAgIGlmIChuZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYo bXNnYnVmLCJOZXR3b3JrIEhvc3Q6ICVzICglcykiLAotI2lmZGVmIE5FV0ZUUAotCQkJICAgICAg IGZ0cCA/IChmdHBfaG9zdCA/IGZ0cF9ob3N0IDogIiIpIDoKLSNlbmRpZiAvKiBORVdGVFAgKi8K LQkJCSAgICAgICB0dG5hbWUsCi0jaWZkZWYgTkVXRlRQCi0JCQkgICAgICAgZnRwID8gZnRwX3Ny dnR5cCA6Ci0jZW5kaWYgLyogTkVXRlRQICovCi0JCQkgICAgICAgc3lzaWRsaXN0W3N5c2luZGV4 XS5zaWRfbmFtZQotCQkJICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1ZiwKLQkJCQkiQ29tbXVuaWNhdGlv biBEZXZpY2U6ICVzIChyZW1vdGUgaG9zdCBpcyAlcykiLAotCQkJCXR0bmFtZSwKLQkJCQlzeXNp ZGxpc3Rbc3lzaW5kZXhdLnNpZF9uYW1lCi0JCQkJKTsKLSAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsCi0J CQkJICAgIChsb25nKSBDV19MSU4sCi0JCQkJICAgIChsb25nKSBtc2didWYKLQkJCQkgICAgKTsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNpZmRlZiBDS19U SU1FUlMKLSAgICAgICAgaWYgKC8qIHJ0dGZsZyAmJiAqLyBwcm90b2NvbCA9PSBQUk9UT19LKSB7 Ci0gICAgICAgICAgICBsb25nIHh4OwotICAgICAgICAgICAgaWYgKAotI2lmZGVmIFNUUkVBTUlO RwotICAgICAgICAgICAgICAgIHN0cmVhbWluZyAmJiBvbGR3aW4gIT0gLTIKLSNlbHNlCi0gICAg ICAgICAgICAgICAgMAotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotICAgICAgICAgICAgICAgICkg ewotICAgICAgICAgICAgICAgIGNoYXIgbXNnYnVmWzY0XTsKLSAgICAgICAgICAgICAgICBzcHJp bnRmKG1zZ2J1ZiwiMDAgLyAwMCIpOwotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwKLQkJCQkobG9uZykgQ1dfVE1PLAotCQkJCShsb25nKSBtc2didWYK LQkJCQkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB4eCA9IChydHRk ZWxheSArIDUwMCkgLyAxMDAwOwotICAgICAgICAgICAgICAgIGlmICh4eCAhPSBvbGRydHQgfHwg cmN2dGltbyAhPSBvbGR0aW0pIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBtc2didWZbNjRd OwotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1ZiwiJTAybGQgLyAlMDJkIiwgeHgs IHJjdnRpbW8pOwotICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVf VFJBTlNGRVIsCi0JCQkJICAgIChsb25nKSBDV19UTU8sCi0JCQkJICAgIChsb25nKSBtc2didWYK LQkJCQkgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgb2xkcnR0ID0geHg7Ci0gICAgICAgICAg ICAgICAgICAgIG9sZHRpbSA9IHJjdnRpbW87Ci0gICAgICAgICAgICAgICAgICAgIGNscnRvZW9s KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYg LyogQ0tfVElNRVJTICovCi0KLSAgICAgICAgeCA9ICh3aGF0ICYgV19SRUNWKSA/ICAgICAgICAg IC8qIFBhY2tldCBsZW5ndGggKi8KLSAgICAgICAgICBycGt0bCsocHJvdG9jb2w9PVBST1RPX0s/ MTowKSA6Ci0gICAgICAgICAgICBzcGt0bDsKLSAgICAgICAgaWYgKHggIT0gb2xkbGVuKSB7ICAg ICAgICAgICAgICAvKiBCdXQgb25seSBpZiBpdCBjaGFuZ2VkLiAqLwotICAgICAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUEwsIChsb25nKSB4ICk7 Ci0gICAgICAgICAgICBvbGRsZW4gPSB4OwotICAgICAgICB9Ci0gICAgICAgIEt1aVNldFByb3Bl cnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDLCAobG9uZykgc3BhY2tldHMgKTsK LQotICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSyAmJiAhZnRwKSB7IC8qIFdpbmRvdyBz bG90cyAqLwotICAgICAgICAgICAgY2hhciB3c1sxNl07Ci0gICAgICAgICAgICBpbnQgZmxhZzsK LSAgICAgICAgICAgIGZsYWcgPSAwOwotI2lmZGVmIFNUUkVBTUlORwotICAgICAgICAgICAgaWYg KHN0cmVhbWluZykgewotICAgICAgICAgICAgICAgIGlmIChvbGR3aW4gIT0gLTIpIHsKLSAgICAg ICAgICAgICAgICAgICAgc3ByaW50Zih3cywiU1RSRUFNSU5HIik7Ci0gICAgICAgICAgICAgICAg ICAgIGZsYWcgPSAxOwotICAgICAgICAgICAgICAgICAgICBvbGR3aW4gPSAtMjsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSAg ICAgICAgICAgICAgaWYgKHdjdXIgIT0gb2xkd2luKSB7Ci0gICAgICAgICAgICAgICAgICBzcHJp bnRmKHdzLCAiJWQgb2YgJWQiLCB3Y3VyIDwgMSA/IDEgOiB3Y3VyLCB3c2xvdG4pOwotICAgICAg ICAgICAgICAgICAgZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgICBvbGR3aW4gPSB3Y3VyOwot ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmxhZykgewotICAgICAgICAgICAgICAg IEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1dTLCAobG9uZykg d3MgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlcnJvcnMgPSByZXRyYW5z ICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKLSAgICAgICAgaWYgKGVycm9ycyAhPSBvbGR0cnkpIHsg ICAgICAgICAvKiBSZXRyeSBjb3VudCwgaWYgY2hhbmdlZCAqLwotICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUFIsIChsb25nKSBlcnJvcnMg KTsKLSAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKLSAgICAgICAgfQotCS8qIFNlbmRlcidz IHBhY2tldCB0eXBlICovCi0gICAgICAgIGlmICghZnRwICYmIChjICE9IG9sZHR5cCAmJiBjICE9 ICdZJyAmJiBjICE9ICdOJykpIHsKLSAgICAgICAgICAgIGNoYXIgdHlwZVsyXTsKLSAgICAgICAg ICAgIHNwcmludGYodHlwZSwgIiVjIixjKTsKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BULCAobG9uZykgdHlwZSApOwotICAgICAgICAg ICAgb2xkdHlwID0gYzsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGMpIHsgICAgICAgICAg ICAgICAgICAgIC8qIE5vdyBoYW5kbGUgc3BlY2lmaWMgcGFja2V0IHR5cGVzICovCi0gICAgICAg ICAgY2FzZSAnUyc6ICAgICAgICAgICAgICAgICAgICAgLyogQmVnaW5uaW5nIG9mIHRyYW5zZmVy ICovCi0gICAgICAgICAgICBmY250ID0gZmJ5dCA9IDBMOyAgICAgICAgICAgLyogQ2xlYXIgY291 bnRlcnMgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgICAgICBndHYgPSAtMS4wOwotI2Vsc2Ug LyogR0ZUSU1FUiAqLwotICAgICAgICAgICAgZ3R2ID0gLTFMOyAgICAgICAgICAgICAgICAgIC8q IEFuZCBvbGQvbmV3IHRoaW5ncy4uLiAqLwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICAgICAg ICAgIG9sZHBjdCA9IHBjdCA9IDBMOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBj YXNlICdaJzogICAgICAgICAgICAgICAgICAgICAvKiBvciBFT0YgKi8KLSAgICAgICAgICAgIGRl YnVnKEYxMDEsInNjcmVlbmcgU0NSX1BUIFogcGt0bnVtIiwiIixuKTsKLSAgICAgICAgICAgIGRl YnVnKEYxMDEsInNjcmVlbmcgU0NSX1BUIFogb2xkcGN0IiwiIixvbGRwY3QpOwotICAgICAgICAg ICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfUFQgWiBwY3QiLCIiLHBjdCk7Ci0gICAgICAgICAg Y2FzZSAnRCc6ICAgICAgICAgICAgICAgICAgICAgLyogRGF0YSBwYWNrZXQgKi8KLSAgICAgICAg ICAgIGlmIChmc2l6ID4gMEwpIHsgICAgICAgICAgICAvKiBTaG93IHBlcmNlbnQgZG9uZSBpZiBr bm93biAqLwotICAgICAgICAgICAgICAgIG9sZHBjdCA9IHBjdDsgICAgICAgICAgIC8qIFJlbWVt YmVyIHByZXZpb3VzIHBlcmNlbnQgKi8KLSAgICAgICAgICAgICAgICBob3dmYXIgPSBmZmM7Ci0j aWZkZWYgQ0tfUkVTRU5ECi0gICAgICAgICAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpCS8qIEFj Y291bnQgZm9yIFBTRU5EIG9yIFJFU0VORCAqLwotICAgICAgICAgICAgICAgICAgaG93ZmFyICs9 IHNlbmRzdGFydDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKQotICAg ICAgICAgICAgICAgICAgaG93ZmFyICs9IHJzX2xlbjsKLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8K LSAgICAgICAgICAgICAgICAvKiBQZXJjZW50IGRvbmUsIHRvIGJlIGRpc3BsYXllZC4uLiAqLwot ICAgICAgICAgICAgICAgIGlmIChjID09ICdaJykgewotICAgICAgICAgICAgICAgICAgICBpZiAo IWRpc2NhcmQgJiYgIWN4c2VlbiAmJiAhY3pzZWVuKSBwY3QgPSAxMDBMOwotICAgICAgICAgICAg ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgcGN0ID0gKGZzaXogPiA5OUwpID8gKGhvd2Zh ciAvIChmc2l6IC8gMTAwTCkpIDogMEw7Ci0gICAgICAgICAgICAgICAgaWYgKHBjdCA+IDEwMEwg fHwgICAgICAgLyogQWxsb3cgZm9yIGV4cGFuc2lvbiBhbmQgKi8KLSAgICAgICAgICAgICAgICAg ICAob2xkcGN0ID09IDk5TCAmJiBwY3QgPCAwTCkpIC8qIG90aGVyIGJvdW5kYXJ5IGNvbmRpdGlv bnMgKi8KLSAgICAgICAgICAgICAgICAgIHBjdCA9IDEwMEw7Ci0gICAgICAgICAgICAgICAgaWYg KHBjdCAhPSBvbGRwY3QpICAgICAgLyogT25seSBkbyB0aGlzIDEwMCB0aW1lcyBwZXIgZmlsZSAq LwotICAgICAgICAgICAgICAgICAgdXBkcGN0KG9sZHBjdCwgcGN0KTsKLSAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIs IChsb25nKSBDV19GRkMsIChsb25nKSBmZmMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBo b3dmYXIpOwotICAgICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFy KTsKLSAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93 ZmFyKTsgKi8KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAnJSc6ICAgICAg ICAgICAgICAgICAgICAgLyogVGltZW91dHMsIHJldHJhbnNtaXNzaW9ucyAqLwotICAgICAgICAg ICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKLSAgICAgICAgICAgIC8q IG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KLQotICAgICAg ICAgICAgZXJyb3JzID0gcmV0cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7Ci0gICAgICAgICAg ICBpZiAoZXJyb3JzICE9IG9sZHRyeSkgeyAgICAgLyogRXJyb3IgY291bnQsIGlmIGNoYW5nZWQg Ki8KLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfUFIsCi0JCQkgICAgICAgKGxv bmcpIGVycm9ycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKLSAgICAgICAgICAgICAg ICBpZiAocykgaWYgKCpzKSB7Ci0gICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyk7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgJ0UnOiAgICAgICAgICAgICAg ICAgICAgIC8qIEVycm9yIHBhY2tldCAqLwotICAgICAgICAgICAgaWYgKCpzKSB7Ci0gICAgICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJS LCAobG9uZykgcyApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmNudCA9IGZieXQgPSAw TDsgICAgICAgICAgIC8qIFNvIG5vIGJ5dGVzIGZvciB0aGlzIGZpbGUgKi8KLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIGNhc2UgJ1EnOiAgICAgICAgICAgICAgICAgICAgIC8qIENydW5j aGVkIHBhY2tldCAqLwotICAgICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwg aG93ZmFyKTsKLSAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNp eiwgaG93ZmFyKTsgKi8KLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5T RkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSAiRGFtYWdlZCBQYWNrZXQiCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAncSc6 ICAgICAgICAgICAgICAgICAgICAgLyogQ3RybC1DIG9yIGNvbm5lY3Rpb24gbG9zdCAqLwotICAg ICAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgICAgICBpZiAoISpzKSBzID0gIlVzZXIg aW50ZXJydXB0aW9uIG9yIGNvbm5lY3Rpb24gbG9zdCI7Ci0gICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n KSBDV19NU0csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgcwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug J1QnOiAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXQgKi8KLSAgICAgICAgICAgIGNwcyA9 IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7Ci0gICAgICAgICAgICAvKiBvbGRfdHIg PSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCi0gICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIlRpbWVv dXQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgZXJyb3JzID0g cmV0cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7Ci0gICAgICAgICAgICBpZiAoZXJyb3JzICE9 IG9sZHRyeSkgeyAgICAgLyogRXJyb3IgY291bnQsIGlmIGNoYW5nZWQgKi8KLSAgICAgICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgQ1dfUFIsIChsb25nKSBlcnJvcnMKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAg ICAgICAgICAgICAgICAgIC8qIE90aGVycywgZG8gbm90aGluZyAqLwotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgIH0KLSNpZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfU1Q6ICAg ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgc3RhdHVzICovCi0gICAgICAgIGRl YnVnKEYxMDEsInNjcmVlbmcgU0NSX1NUIGMiLCIiLGMpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJz Y3JlZW5nIFNDUl9TVCBzdWNjZXNzIiwiIixzdWNjZXNzKTsKLSAgICAgICAgZGVidWcoRjEwMSwi c2NyZWVuZyBTQ1JfU1QgY3hzZWVuIiwiIixjeHNlZW4pOwotI2lmZGVmIENPTU1FTlQKLSAgICAg ICAgaWYgKGMgPT0gU1RfT0spIHsgICAgICAgICAgICAgICAvKiBPSywgcHJpbnQgMTAwICUgKi8K LSAgICAgICAgICAgIGlmIChwY3RsYmwpCi0gICAgICAgICAgICAgIHVwZHBjdChvbGRwY3QsMTAw KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlf RklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGZmYyk7Ci0gICAgICAgICAgICBw Y3QgPSAxMDA7Ci0gICAgICAgICAgICBvbGRwY3QgPSAwOwotICAgICAgICB9IGVsc2UgaWYgKGZz aXogPiAwTCkgICAgICAgICAgIC8qIE5vdCBPSywgdXBkYXRlIGZpbmFsIHBlcmNlbnQgKi8KLS8q Ci0gIFRoZSBlbHNlIHBhcnQgd3JpdGVzIGFsbCBvdmVyIHRoZSBzY3JlZW4gLS0gaG93ZmFyIGFu ZC9vciBmc2l6IGhhdmUKLSAgYmVlbiByZXNldCBhcyBhIGNvbnNlcXVlbmNlIG9mIHRoZSBub3Qt T0tuZXNzIG9mIHRoZSB0cmFuc2Zlci4KLSovCi0gICAgICAgICAgaWYgKHBjdGxibCkKLSAgICAg ICAgICAgIHVwZHBjdChvbGRwY3QsIChob3dmYXIgKiAxMDBMKSAvIGZzaXopOwotI2Vsc2UKLSAg ICAgICAgaWYgKGMgPT0gU1RfT0spIHsgICAgICAgICAgICAgICAvKiBPSywgcHJpbnQgMTAwICUg Ki8KLSAgICAgICAgICAgIGlmIChwY3RsYmwpIHsKLQkJdXBkcGN0KG9sZHBjdCwxMDApOwotCSAg ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZF UiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGZmYyk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAg ICAgcGN0ID0gMTAwOwotICAgICAgICAgICAgb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgICAgS3VpU2V0UHJv cGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfVFIsIChsb25nKSAiIiApOwotCi0g ICAgICAgIHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQgbmV3IHN0YXR1 cyBtZXNzYWdlICovCi0gICAgICAgICAgY2FzZSBTVF9PSzogICAgICAgICAgICAgICAgICAgLyog VHJhbnNmZXIgT0sgKi8KLSAgICAgICAgICAgIGZjbnQrKzsgICAgICAgICAgICAgICAgICAgICAv KiBDb3VudCB0aGlzIGZpbGUgKi8KLQkgICAgaWYgKHdoYXQgPT0gKFdfRlRQfFdfRlRfREVMRSkp IHsKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJEZWxldGUgT0siCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0JICAgIH0gZWxzZSB7Ci0JCWZieXQgKz0gZmZjOwotICAgICAg ICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobG9uZykgIlRyYW5zZmVyIE9LIgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotCSAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNl IFNUX0RJU0M6ICAgICAgICAgICAgICAgICAvKiBEaXNjYXJkZWQgKi8KLSAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiRmls ZSBkaXNjYXJkZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9JTlQ6ICAgICAgICAgICAg ICAgICAgLyogSW50ZXJydXB0ZWQgKi8KLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiVHJhbnNmZXIgaW50ZXJydXB0ZWQi Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAg ICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAg cmV0dXJuOwotCi0gICAgICAgIGNhc2UgU1RfU0tJUDogeyAgICAgICAgICAgICAgICAvKiBTa2lw cGVkICovCi0gICAgICAgICAgICBjaGFyIGVycmJ1Zls2NF0gOwotCSAgICBpZiAobiA+IDAgJiYg biA8IG5za3JlYXNvbikKLSAgICAgICAgICAgICAgICBzcHJpbnRmKCBlcnJidWYsICJGaWxlIHNr aXBwZWQsICglcykiLCBza3JlYXNvbltuXSApIDsKLQkgICAgZWxzZQotICAgICAgICAgICAgICAg IHNwcmludGYoIGVycmJ1ZiwgIkZpbGUgc2tpcHBlZCIgKSA7Ci0gICAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgZXJyYnVmCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAg IHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgcmV0 dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBTVF9FUlI6ICAgICAgICAgICAgICAgICAg LyogRXJyb3IgbWVzc2FnZSAqLwotICAgICAgICAgICAgaWYgKCFzKSBzID0gKGNoYXIgKillcGt0 bXNnOwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfRVJSLCAobG9uZykgcyApOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHBjdCA9 IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgcmV0dXJuOwot Ci0gICAgICAgICAgY2FzZSBTVF9SRUZVOiAgICAgICAgICAgICAgICAgLyogUmVmdXNlZCAqLwot ICAgICAgICAgICAgaWYgKCpzKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBlcnJidWZbNjRdIDsK LSAgICAgICAgICAgICAgICBzcHJpbnRmKCBlcnJidWYsICJSZWZ1c2VkLCAlcyIsIHMgKSA7Ci0g ICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpIENX X0VSUiwobG9uZykgZXJyYnVmKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1dfRVJSLChsb25nKSJS ZWZ1c2VkIik7Ci0gICAgICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgcGN0 ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICByZXR1cm47 Ci0KLSAgICAgICAgICBjYXNlIFNUX0lOQzoKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX0VSUiwobG9uZykiSW5jb21wbGV0ZSIpOwotI2lmZGVm IENPTU1FTlQKLSAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9NU0c6Ci0gICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylDV19NU0csKGxv bmcpcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAg ICAgICAgICAgICAgICAvKiBCYWQgY2FsbCAqLwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgc3RhdHVzICoqKiIgKTsKLSAg ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIFNDUl9UQzogeyAgICAg ICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gY29tcGxldGUgKi8KLSAgICAgICAgICBjaGFy IG1zZ2J1ZlsxMjhdOwotICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZF UiwgKGxvbmcpIENXX0NQLCB0ZmNwcyk7Ci0gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKLSAgICAg ICAgICAgICAgc3ByaW50Zihtc2didWYsCi0gICAgICAgICAgICAgICAgICAgICAgIlNVQ0NFU1Mu ICBGaWxlczogJXMsIEJ5dGVzOiAlbGQsICVsZCBDUFMiLAotICAgICAgICAgICAgICAgICAgICAg IGZpbGNudCAtIGZpbHJlaiwKLSAgICAgICAgICAgICAgICAgICAgICBja2ZzdG9hKGZieXQpLAot ICAgICAgICAgICAgICAgICAgICAgIHRmY3BzCi0gICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBtc2didWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICB9Ci0gICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1RSLAotICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBoaG1tc3MoKGxvbmcpCi0jaWZkZWYgR0ZUSU1FUgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZwdHNlY3MgKyAwLjUpCi0jZWxzZQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNlY3MKLSNlbmRpZiAvKiBHRlRJTUVS ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKLQotI2lmZGVm IEdGVElNRVIKLSAgICAgICAgICBvbGRndHYgPSAoQ0tGTE9BVCkgLTEuMDsKLSNlbHNlCi0gICAg ICAgICAgb2xkZ3R2ID0gLTFMOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgICBwY3QgPSAxMDA7IG9sZHBjdCA9IDA7ICAgICAgICAvKiBSZXNldCB0aGVz ZSBmb3IgbmV4dCB0aW1lLiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICBvbGR0 eXAgPSAwOyBvbGRydHQgPSAtMUw7IG9sZHRyeSA9IC0xOyBvbGRsZW4gPSAtMTsKLSAgICAgICAg ICBvbGR0aW0gPSAtMTsKLSAgICAgICAgICBjZW5kdyA9IDE7Ci0gICAgICAgICAgaWYgKHhmcmJl bCkgYmxlZXAoQlBfTk9URSk7ICAgLyogQ2xvc2Ugd2luZG93LCB0aGVuIGJlZXAuICovCi0gICAg ICAgICAgZnRfd2luID0gMDsgICAgICAgICAgICAgICAgICAgLyogV2luZG93IGNsb3NlZC4gKi8K LSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBjYXNlIFNDUl9FTTogICAgICAgICAg ICAgICAgICAgICAgLyogRXJyb3IgcGFja2V0IChmYXRhbCkgKi8KLSAgICAgICAgS3VpU2V0UHJv cGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyApOwotICAg ICAgICBpZiAoeGZyYmVsKSBibGVlcChCUF9GQUlMKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAg IHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICByZXR1cm47 Ci0KLSAgICAgIGNhc2UgU0NSX1FFOiAgICAgICAgICAgICAgICAgICAgICAvKiBRdWFudGl0eSBl cXVhbHMgKi8KLSAgICAgIGNhc2UgU0NSX1RVOiAgICAgICAgICAgICAgICAgICAgICAvKiBVbmRl bGltaXRlZCB0ZXh0ICovCi0gICAgICBjYXNlIFNDUl9UTjogICAgICAgICAgICAgICAgICAgICAg LyogVGV4dCBkZWxpbWl0ZWQgYXQgc3RhcnQgKi8KLSAgICAgIGNhc2UgU0NSX1RaOiAgICAgICAg ICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBlbmQgKi8KLSAgICAgICAgcmV0dXJu OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoaWdub3JlZCBpbiBmdWxsc2NyZWVuIGRpc3Bs YXkpICovCi0KLSAgICAgIGNhc2UgU0NSX1hEOiAgICAgICAgICAgICAgICAgICAgICAvKiBYLXBh Y2tldCBkYXRhICovCi0gICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0gICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgKTsKLSAg ICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9DVzogICAgICAgICAgICAgICAgICAgICAg LyogQ2xvc2UgV2luZG93ICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBwY3QgPSAxMDA7IG9s ZHBjdCA9IDA7ICAgICAgICAgIC8qIFJlc2V0IHRoZXNlIGZvciBuZXh0IHRpbWUuICovCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgICAgICBvbGR0eXAgPSAwOyBvbGRydHQgPSAtMUw7IG9sZHRy eSA9IC0xOyBvbGRsZW4gPSAtMTsKLSAgICAgICAgb2xkdGltID0gLTE7Ci0KLSAgICAgICAgZnRf d2luID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHRoYXQgd2luZG93IGlzIGNsb3Nl ZC4gKi8KLSAgICAgICAgY2VuZHcgPSAxOyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0NEOiAg ICAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IGN1cnJlbnQgZGlyZWN0b3J5ICovCi0gICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0RJUiwgKGxv bmcpIHMgKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7Ci0jZW5kaWYg LyogT1MyICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgZGVmYXVsdDogICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEJhZCBjYWxsICovCi0gICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAotICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQg ZnVuY3Rpb24gY29kZSAqKioiCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHJl dHVybjsKLSAgICB9Ci19Ci0jZW5kaWYgLyogS1VJICovCi0jZW5kaWYgLyogTUFDICovCi0KLSNl bmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBDS19DVVJQT1MKLS8qIER1bW1pZXMgZm9yIHdo ZW4gY3Vyc29yIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZCAqLwotaW50Ci1ja19jdXJwb3Mocm93 LCBjb2wpIHsKLSAgICByZXR1cm4oLTEpOwotfQotCi1pbnQKLWNrX2NscygpIHsKLSAgICByZXR1 cm4oLTEpOwotfQotCi1pbnQKLWNrX2NsZW9sKCkgewotICAgIHJldHVybigtMSk7Ci19Ci0jZW5k aWYgLyogQ0tfQ1VSUE9TICovCi0KLSNpZm5kZWYgTk9JS1NECi0jaWZkZWYgSUtTREIKLQotc3Ry dWN0IGlrc2RiZmxkIGRiZmxkW10gPSB7Ci0gICAvKiBPZmZzZXQgICAgTGVuZ3RoICAgIFR5cGUg ICAqLwotICAgIHsgREJfRkxBR1MsIGRCX0ZMQUdTLCBEQlRfSEVYIH0sICAgIC8qICAwIGRiX0ZM QUdTIEZsYWdzICovCi0gICAgeyBEQl9BVFlQRSwgZEJfQVRZUEUsIERCVF9IRVggfSwgICAgLyog IDEgZGJfQVRZUEUgQXV0aCB0eXBlICovCi0gICAgeyBEQl9BTU9ERSwgZEJfQU1PREUsIERCVF9I RVggfSwgICAgLyogIDMgZGJfQU1PREUgQXV0aCBtb2RlICovCi0gICAgeyBEQl9TVEFURSwgZEJf U1RBVEUsIERCVF9IRVggfSwgICAgLyogIDIgZGJfU1RBVEUgU3RhdGUgKi8KLSAgICB7IERCX01Z UElELCBkQl9NWVBJRCwgREJUX0hFWCB9LCAgICAvKiAgNSBkYl9NWVBJRCBQSUQgKi8KLSAgICB7 IERCX1NBRERSLCBkQl9TQUREUiwgREJUX0hFWCB9LCAgICAvKiAgNCBkYl9TQUREUiBTZXJ2ZXIg YWRkcmVzcyAqLwotICAgIHsgREJfQ0FERFIsIGRCX0NBRERSLCBEQlRfSEVYIH0sICAgIC8qICA2 IGRiX0NBRERSIENsaWVudCBhZGRyZXNzICovCi0gICAgeyBEQl9TVEFSVCwgZEJfU1RBUlQsIERC VF9EQVQgfSwgICAgLyogIDcgZGJfU1RBUlQgU2Vzc2lvbiBzdGFydCAqLwotICAgIHsgREJfTEFT VFUsIGRCX0xBU1RVLCBEQlRfREFUIH0sICAgIC8qICA4IGRiX0xBU1RVIExhc3QgdXBkYXRlICov Ci0gICAgeyBEQl9VTEVOLCAgZEJfVUxFTiwgIERCVF9IRVggfSwgICAgLyogIDkgZGJfVUxFTiAg VXNlcm5hbWUgbGVuZ3RoICovCi0gICAgeyBEQl9ETEVOLCAgZEJfRExFTiwgIERCVF9IRVggfSwg ICAgLyogMTAgZGJfRExFTiAgRGlyZWN0b3J5IG5hbWUgbGVuZ3RoICovCi0gICAgeyBEQl9JTEVO LCAgZEJfSUxFTiwgIERCVF9IRVggfSwgICAgLyogMTEgZGJfSUxFTiAgSW5mbyBsZW5ndGggKi8K LSAgICB7IERCX1BBRDEsICBkQl9QQUQxLCAgREJUX1VORCB9LCAgICAvKiAxMiBkYl9QQUQxICAo UmVzZXJ2ZWQpICovCi0gICAgeyBEQl9VU0VSLCAgZEJfVVNFUiwgIERCVF9TVFIgfSwgICAgLyog MTMgZGJfVVNFUiAgVXNlcm5hbWUgKi8KLSAgICB7IERCX0RJUiwgICBkQl9ESVIsICAgREJUX1NU UiB9LCAgICAvKiAxNCBkYl9ESVIgICBDdXJyZW50IERpcmVjdG9yeSAqLwotICAgIHsgREJfSU5G TywgIGRCX0lORk8sICBEQlRfU1RSIH0gICAgIC8qIDE1IGRiX0lORk8gIFN0YXRlLXNwZWNpZmlj IGluZm8gKi8KLX07Ci0KLXN0YXRpYyBjaGFyIGxja25hbVtDS01BWFBBVEgrMV07ICAgICAgICAv KiBMb2NrZmlsZSBwYXRobmFtZSAqLwotc3RhdGljIGNoYXIgdG1wbGNrW0NLTUFYUEFUSCsxXTsg ICAgICAgIC8qIFRlbXBvcmFyeSBsb2NrZmlsZSBuYW1lICovCi0KLXN0YXRpYyBjaGFyICogdXBk bW9kZSA9ICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgbW9kZSBmb3IgZm9wZW4oKSAqLwotI2lm ZGVmIE9TMgotICAicitiIgotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgInIrYiIKLSNlbHNlCi0gICJy KyIKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgOwotCi0vKiAgRCBCIEkg TiBJIFQgIC0tICBJbml0aWFsaXplIHRoZSBJS1NEIGRhdGFiYXNlLi4uICAqLwotCi1pbnQKLWRi aW5pdCgpIHsKLSAgICBleHRlcm4gaW50IGRiaW5pdGVkOwotICAgIGludCB4ID0gMDsKLSAgICBk ZWJ1ZyhGMTEwLCJkYmluaXQgZGJkaXIgMSIsZGJkaXIsMCk7Ci0gICAgZGVidWcoRjExMCwiZGJp bml0IGRiZmlsZSAxIixkYmZpbGUsMCk7Ci0gICAgaWYgKGRiaW5pdGVkKQotICAgICAgcmV0dXJu KDApOwotI2lmZGVmIE9TMgotICAgIGlmICghZGJkaXIpIHsKLSNpZmRlZiBOVAotICAgICAgICBj aGFyICogcCA9IE5VTEw7Ci0gICAgICAgIGlmICghaXNXaW45NSgpKSB7Ci0gICAgICAgICAgICBw ID0gZ2V0ZW52KCJTeXN0ZW1Sb290Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBw ID0gZ2V0ZW52KCJ3aW5ib290ZGlyIik7Ci0gICAgICAgICAgICBpZiAoIXApICBwID0gZ2V0ZW52 KCJ3aW5kaXIiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXApIHAgPSAiQzovIjsKLSAgICAg ICAgZGJkaXIgPSBtYWxsb2Moc3RybGVuKHApKzIpOwotICAgICAgICBzdHJjcHkoZGJkaXIscCk7 CQkvKiBzYWZlICovCi0gICAgICAgIHAgPSBkYmRpcjsKLSAgICAgICAgd2hpbGUgKCpwKSB7Ci0g ICAgICAgICAgICBpZiAoKnAgPT0gJ1xcJykKLSAgICAgICAgICAgICAgKnAgPSAnLyc7Ci0gICAg ICAgICAgICBwKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCoocC0xKSAhPSAnLycgKSB7Ci0g ICAgICAgICAgICAqcCsrID0gJy8nOwotICAgICAgICAgICAgKnAgPSAnXDAnOwotICAgICAgICB9 Ci0jZWxzZSAvKiBOVCAqLwotICAgICAgICBtYWtlc3RyKCZkYmRpciwiQzovIik7Ci0jZW5kaWYg LyogTlQgKi8KLSAgICB9Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICBpZiAoIWRiZGlyKQotICAgICAg bWFrZXN0cigmZGJkaXIsSUtfREJBU0VESVIpOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYg KCFkYmZpbGUpIHsKLSAgICAgICAgY2hhciAqIHMgPSAiIjsKLSAgICAgICAgeCA9IHN0cmxlbihk YmRpcik7Ci0gICAgICAgIGlmIChkYmRpclt4LTFdICE9ICcvJykgewotICAgICAgICAgICAgcyA9 ICIvIjsKLSAgICAgICAgICAgIHgrKzsKLSAgICAgICAgfQotICAgICAgICB4ICs9IChpbnQpc3Ry bGVuKElLX0RCQVNFRklMKTsKLSAgICAgICAgZGJmaWxlID0gKGNoYXIgKiltYWxsb2MoeCsxKTsK LSAgICAgICAgc3ByaW50ZihkYmZpbGUsIiVzJXMlcyIsZGJkaXIscyxJS19EQkFTRUZJTCk7Ci0g ICAgfQotICAgIGRlYnVnKEYxMTAsImRiaW5pdCBkYmRpciAyIixkYmRpciwwKTsKLSAgICBkZWJ1 ZyhGMTEwLCJkYmluaXQgZGJmaWxlIDIiLGRiZmlsZSwwKTsKLSAgICBteXBpZCA9IGdldHBpZCgp OyAgICAgICAgICAgICAgICAgICAvKiBHZXQgbXkgcGlkICovCi0gICAgZGVidWcoRjEwMSwiZGJp bml0IG15cGlkIiwiIixteXBpZCk7Ci0KLSAgICBpZiAoIW15aGV4aXBbMF0pIHsgICAgICAgICAg ICAgICAgICAvKiBTZXQgbXkgaGV4IElQIGFkZHJlc3MgKi8KLSNpZmRlZiBUQ1BTT0NLRVQKLSAg ICAgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbXl4aXBhZGRyOwotICAgICAgICBpZiAoZ2V0bG9j YWxpcGFkZHIoKSA+IC0xKSB7Ci0gICAgICAgICAgICBteWlwID0gbXl4aXBhZGRyOwotICAgICAg ICAgICAgc3ByaW50ZihteWhleGlwLCIlMDhseCIsbXlpcCk7IC8qIChOZWVkcyBmaXhpbmcgZm9y IElQdjYpICovCi0gICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotICAgICAg ICAgIGNrc3RybmNweShteWhleGlwLCIwMDAwMDAwMCIsOSk7Ci0gICAgfQotICAgIGRlYnVnKEYx MTEsImRiaW5pdCBteWlwIixteWhleGlwLG15aXApOwotICAgIGlmICghcGVlcmhleGlwWzBdKSB7 ICAgICAgICAgICAgICAgIC8qIEdldCBwZWVyJ3MgIGhleCBJUCBhZGRyZXNzICovCi0jaWZkZWYg VENQU09DS0VUCi0gICAgICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIHBlZXJ4aXBhZGRyOwotICAg ICAgICBpZiAoY2tnZXRwZWVyKCkpIHsKLSAgICAgICAgICAgIHBlZXJpcCA9IHBlZXJ4aXBhZGRy OwotICAgICAgICAgICAgc3ByaW50ZihwZWVyaGV4aXAsIiUwOGx4IixwZWVyaXApOyAvKiAoTmVl ZHMgZml4aW5nIGZvciBJUHY2KSAqLwotICAgICAgICAgICAgZGVidWcoRjExMSwiZGJpbml0IHBl ZXJpcCIscGVlcmhleGlwLHBlZXJpcCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJkYmluaXQgY2tnZXRwZWVyIGZhaWx1cmUiLCIiLGVycm5vKTsKLSAgICAgICAg ICAgIGNrc3RybmNweShwZWVyaGV4aXAsIjAwMDAwMDAwIiw5KTsKLSAgICAgICAgfQotI2Vsc2UK LSAgICAgICAgY2tzdHJuY3B5KHBlZXJoZXhpcCwiMDAwMDAwMDAiLDkpOwotI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJkYmluaXQgcGVlcmlwIixwZWVyaGV4 aXAscGVlcmlwKTsKLSAgICBkZWJ1ZyhGMTAxLCJkYmluaXQgZGJlbmFibGVkIiwiIixkYmVuYWJs ZWQpOwotICAgIGlmIChkYmVuYWJsZWQgJiYgaW5zZXJ2ZXIpIHsKLSAgICAgICAgbXlkYnNsb3Qg PSBnZXRzbG90KCk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImRiaW5pdCBnZXRzbG90Iixja2l0b2Eo aWtkYm9wZW4pLHgpOwotICAgICAgICBpZiAoaWtkYm9wZW4pIGRiaW5pdGVkID0gMTsKLSAgICB9 Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKiAgVSBQIEQgUyBMIE8gVCAgLS0gIFVwZGF0ZSBzbG90 IG4gICovCi0KLS8qCi0gIE9wZW5zIHRoZSBkYXRhYmFzZSBpZiBuZWNlc3NhcnksIHNlZWtzIHRv IHNsb3Qgbiwgd3JpdGVzIGN1cnJlbnQgcmVjb3JkCi0gIGFuZCBhZGRzIGN1cnJlbnQgdGltZSB0 byBsYXN0LXVwZGF0ZSBmaWVsZC4gIG4gaXMgdGhlIHJlY29yZCBzZXF1ZW5jZSBudW1iZXIKLSAg KDAsIDEsIDIsIC4uLiksIG5vdCB0aGUgc2VlayBwb2ludGVyLiAgIFJldHVybnMgLTEgb24gZmFp bHVyZSwgMCBvbiBzdWNjZXNzLgotKi8KLWludAotdXBkc2xvdChuKSBpbnQgbjsgeyAgICAgICAg ICAgICAgICAgICAgIC8qIFVwZGF0ZSBvdXIgc2xvdCAqLwotICAgIGludCByYyA9IDA7Ci0gICAg Q0tfT0ZGX1QgcG9zaXRpb247Ci0KLSAgICBkZWJ1ZyhGMTExLCJ1cGRzbG90IiwiaWtkYm9wZW4i LGlrZGJvcGVuKTsKLSAgICBpZiAoIWlrZGJvcGVuKSAgICAgICAgICAgICAgICAgICAgICAvKiBO b3QgaWYgbm90IG9rICovCi0gICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKCFkYmZwKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogT3BlbiBkYXRhYmFzZSBpZiBub3Qgb3BlbiAqLwotICAgICAg ICBkYmZwID0gZm9wZW4oZGJmaWxlLHVwZG1vZGUpOyAgIC8qIEluIHVwZGF0ZSBuby10cnVuY2F0 ZSBtb2RlICovCi0gICAgICAgIGlmICghZGJmcCkgewotICAgICAgICAgICAgZGVidWcoRjExMCwi dXBkc2xvdCBmb3BlbiBmYWlsZWQiLGRiZmlsZSwwKTsKLSAgICAgICAgICAgIGlrZGJvcGVuID0g MDsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogZGVi dWcoRjExMSwidXBkc2xvdCBkYmZpbGUiLGRiZmlsZSxkYmZwKTsgKi8KLSAgICBwb3NpdGlvbiA9 IG4gKiBEQl9SRUNMOwotICAgIGlmIChDS0ZTRUVLKGRiZnAscG9zaXRpb24sMCkgPCAwKSB7CS8q IFNlZWsgdG8gZGVzaXJlZCBzbG90ICovCi0gICAgICAgIGRlYnVnKEYxMTEsInVwZHNsb3QgZnNl ZWsgZmFpbGVkIixkYmZpbGUsbXlkYnNlZWspOwotICAgICAgICBpa2Rib3BlbiA9IDA7Ci0gICAg ICAgIHJjID0gLTE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogVXBkYXRlIHRoZSB1cGRhdGUg dGltZSAqLwotICAgICAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9MQVNUVV0ub2ZmXSwKLSAg ICAgICAgICAgICAgICBja2RhdGUoKSwKLSAgICAgICAgICAgICAgICBkYmZsZFtkYl9MQVNUVV0u bGVuCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgaWYgKGZ3cml0ZShkYnJlYywxLERCX1JF Q0wsZGJmcCkgPCBEQl9SRUNMKSB7IC8qIFdyaXRlIHRoZSByZWNvcmQgKi8KLSAgICAgICAgICAg IGRlYnVnKEYxMTAsInVwZHNsb3QgZndyaXRlIGZhaWxlZCIsZGJmaWxlLDApOwotICAgICAgICAg ICAgaWtkYm9wZW4gPSAwOwotICAgICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBGbHVzaCB0aGUgd3JpdGUgKi8KLSAgICAgICAgICAg IGZmbHVzaChkYmZwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4ocmMpOwotfQotCi0v KiAgSSBOIEkgVCBTIEwgTyBUIC0tICBJbml0aWFsaXplIHNsb3QgbiB3aXRoIG15IGluZm8gICov Ci0KLWludAotaW5pdHNsb3QobikgaW50IG47IHsgICAgICAgICAgICAgICAgICAgIC8qIEluaXRp YWxpemUgc2xvdCAqLwotICAgIGludCBrOwotI2lmZGVmIFRDUFNPQ0tFVAotICAgIGV4dGVybiB1 bnNpZ25lZCBsb25nIHBlZXJ4aXBhZGRyOwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0gICAg ZGVidWcoRjEwMSwiaW5pdHNsb3QiLCIiLG4pOwotCi0jaWZkZWYgVVNFX01FTUNQWQotICAgIG1l bXNldChkYnJlYywzMixEQl9SRUNMKTsKLSNlbHNlCi0gICAgZm9yIChrID0gMDsgayA8IERCX1JF Q0w7IGsrKykKLSAgICAgIGRicmVjW2tdID0gJ1wwNDAnOwotI2VuZGlmIC8qIFVTRV9NRU1DUFkg Ki8KLQotICAgIG15ZmxhZ3MgPSBEQkZfSU5VU0U7ICAgICAgICAgICAgICAgIC8qIFNldCBpbi11 c2UgZmxhZyAqLwotICAgIG15c3RhdGUgPSBXX05PVEhJTkc7Ci0gICAgbXlhdHlwZSA9IDBMOwot ICAgIG15YW1vZGUgPSAwTDsKLQotICAgIGsgPSBkYmZsZFtkYl9GTEFHU10ubGVuOyAgICAgICAg ICAgIC8qIExlbmd0aCBvZiBmbGFncyBmaWVsZCAqLwotICAgIHN0cm5jcHkoJmRicmVjW2RiZmxk W2RiX0ZMQUdTXS5vZmZdLHVsb25ndG9oZXgobXlmbGFncyxrKSxrKTsKLQotICAgIGsgPSBkYmZs ZFtkYl9BVFlQRV0ubGVuOwotICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0FUWVBFXS5vZmZd LHVsb25ndG9oZXgobXlhdHlwZSxrKSxrKTsKLQotICAgIGsgPSBkYmZsZFtkYl9BTU9ERV0ubGVu OwotICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0FNT0RFXS5vZmZdLHVsb25ndG9oZXgobXlh bW9kZSxrKSxrKTsKLQotICAgIGsgPSBkYmZsZFtkYl9TVEFURV0ubGVuOwotICAgIHN0cm5jcHko JmRicmVjW2RiZmxkW2RiX1NUQVRFXS5vZmZdLHVsb25ndG9oZXgobXlzdGF0ZSxrKSxrKTsKLQot ICAgIGsgPSBkYmZsZFtkYl9TQUREUl0ubGVuOwotICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2Ri X1NBRERSXS5vZmZdLHVsb25ndG9oZXgobXlpcCxrKSxrKTsKLQotI2lmZGVmIFRDUFNPQ0tFVAot ICAgIGNrZ2V0cGVlcigpOwotICAgIGsgPSBkYmZsZFtkYl9DQUREUl0ubGVuOwotICAgIHN0cm5j cHkoJmRicmVjW2RiZmxkW2RiX0NBRERSXS5vZmZdLHVsb25ndG9oZXgocGVlcnhpcGFkZHIsayks ayk7Ci0jZWxzZQotICAgIGsgPSBkYmZsZFtkYl9DQUREUl0ubGVuOwotICAgIHN0cm5jcHkoJmRi cmVjW2RiZmxkW2RiX0NBRERSXS5vZmZdLHVsb25ndG9oZXgoMEwsayksayk7Ci0jZW5kaWYgLyog VENQU09DS0VUICovCi0KLSAgICBrID0gZGJmbGRbZGJfTVlQSURdLmxlbjsKLSAgICBzdHJuY3B5 KCZkYnJlY1tkYmZsZFtkYl9NWVBJRF0ub2ZmXSx1bG9uZ3RvaGV4KG15cGlkLGspLGspOwotCi0g ICAgayA9IGRiZmxkW2RiX1NUQVJUXS5sZW47Ci0gICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJf U1RBUlRdLm9mZl0sY2tkYXRlKCksayk7Ci0KLSAgICBrID0gZGJmbGRbZGJfVUxFTl0ubGVuOwot ICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX1VMRU5dLm9mZl0sIjAwMDAiLDQpOwotCi0gICAg ayA9IGRiZmxkW2RiX0RMRU5dLmxlbjsKLSAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9ETEVO XS5vZmZdLCIwMDAwIiw0KTsKLQotICAgIGsgPSBkYmZsZFtkYl9JTEVOXS5sZW47Ci0gICAgc3Ry bmNweSgmZGJyZWNbZGJmbGRbZGJfSUxFTl0ub2ZmXSwiMDAwMCIsNCk7Ci0KLSAgICBzdHJuY3B5 KCZkYnJlY1tkYmZsZFtkYl9JTkZPXS5vZmZdLCJJTklUIiw0KTsKLSAgICByZXR1cm4odXBkc2xv dChuKSk7Ci19Ci0KLWludAotc2xvdHN0YXRlKHgsczEsczIsczMpIGludCB4OyBjaGFyICpzMSwg KnMyLCAqczM7IHsKLSAgICBpbnQgaywgbDEsIGwyLCBsMywgejsKLSAgICBteXN0YXRlID0geDsK LSAgICBkZWJ1ZyhGMTAxLCJzbG90c3RhdGUgaWtkYm9wZW4iLCIiLGlrZGJvcGVuKTsKLSAgICBp ZiAoIWlrZGJvcGVuKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBpZiAoIXMxKSBzMSA9ICIiOwot ICAgIGwxID0gc3RybGVuKHMxKTsKLSAgICBpZiAoIXMyKSBzMiA9ICIiOwotICAgIGwyID0gc3Ry bGVuKHMyKTsKLSAgICBpZiAoIXMzKSBzMyA9ICIiOwotICAgIGwzID0gc3RybGVuKHMzKTsKLSAg ICBzdHJuY3B5KCZkYnJlY1tEQl9TVEFURV0sdWxvbmd0b2hleChteXN0YXRlLDQpLDQpOwotICAg IGsgPSBkYmZsZFtkYl9JTEVOXS5sZW47Ci0gICAgeiA9IGwxICsgbDIgKyBsMyArIDI7Ci0gICAg aWYgKHogPiBkQl9JTkZPKQotICAgICAgeiA9IGRCX0lORk87Ci0gICAgc3RybmNweSgmZGJyZWNb REJfSUxFTl0sdWxvbmd0b2hleCgodW5zaWduZWQgbG9uZyl6LGspLGspOwotICAgIGsgPSBkYmZs ZFtkYl9JTkZPXS5sZW47Ci0gICAgeiA9IGRiZmxkW2RiX0lORk9dLm9mZjsKLSAgICBpZiAobDEg PD0gaykgewotICAgICAgICBsc2V0KCZkYnJlY1t6XSxzMSxsMSsxLDMyKTsKLSAgICAgICAgeiAr PSBsMSsxOwotICAgICAgICBrIC09IGwxKzE7Ci0gICAgICAgIGlmIChsMiA8PSBrKSB7Ci0gICAg ICAgICAgICBsc2V0KCZkYnJlY1t6XSxzMixsMisxLDMyKTsKLSAgICAgICAgICAgIHogKz0gbDIr MTsKLSAgICAgICAgICAgIGsgLT0gbDIrMTsKLSAgICAgICAgICAgIGlmIChsMyA8PSBrKQotICAg ICAgICAgICAgICBsc2V0KCZkYnJlY1t6XSxzMyxrLDMyKTsKLSAgICAgICAgfQotICAgIH0KLSNp ZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgY2hhciBidWZbMTI4XTsKLSAg ICAgICAgaW50IGk7Ci0gICAgICAgIHN0cm5jcHkoYnVmLCZkYnJlY1tEQl9JTkZPXSwxMjcpOwot ICAgICAgICBidWZbMTI3XSA9IE5VTDsKLSAgICAgICAgZm9yIChpID0gMTI2OyBpID4gMCAmJiBi dWZbaV0gPT0gMzI7IGktLSkgYnVmW2ldID0gMDsKLSAgICAgICAgZGVidWcoRjExMSwic2xvdHN0 YXRlIixidWYsbXlzdGF0ZSk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgeiA9IHVw ZHNsb3QobXlkYnNsb3QpOwotICAgIGRlYnVnKEYxMDEsInNsb3RzdGF0ZSB1cGRzbG90IiwiIix6 KTsKLSAgICByZXR1cm4oeik7Ci19Ci0KLWludAotc2xvdGRpcihzMSxzMikgY2hhciAqIHMxLCAq IHMyOyB7ICAgICAgIC8qIFVwZGF0ZSBjdXJyZW50IGRpcmVjdG9yeSAqLwotICAgIGludCBrLCBs ZW4xLCBsZW4yOwotICAgIGlmICghaWtkYm9wZW4pCi0gICAgICByZXR1cm4oLTEpOwotICAgIGlm ICghczEpIHMxID0gIiI7Ci0gICAgaWYgKCFzMikgczIgPSAiIjsKLSAgICBsZW4xID0gc3RybGVu KHMxKTsKLSAgICBsZW4yID0gc3RybGVuKHMyKTsKLSAgICBrID0gZGJmbGRbZGJfRExFTl0ubGVu OwotICAgIHN0cm5jcHkoJmRicmVjW0RCX0RMRU5dLHVsb25ndG9oZXgoKHVuc2lnbmVkIGxvbmcp KGxlbjErbGVuMiksayksayk7Ci0gICAgayA9IGRiZmxkW2RiX0RJUl0ubGVuOwotICAgIGlmIChs ZW4xID4gMCkgewotICAgICAgICBsc2V0KCZkYnJlY1tkYmZsZFtkYl9ESVJdLm9mZl0sczEsbGVu MSwzMik7Ci0gICAgICAgIGxzZXQoJmRicmVjW2RiZmxkW2RiX0RJUl0ub2ZmK2xlbjFdLHMyLGst bGVuMSwzMik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbHNldCgmZGJyZWNbZGJmbGRbZGJfRElS XS5vZmZdLHMyLGssMzIpOwotICAgIH0KLSAgICByZXR1cm4odXBkc2xvdChteWRic2xvdCkpOwot fQotCi0vKiAgRiBSIEUgRSBTIEwgTyBUICAtLSAgRnJlZSBzbG90IG4gICovCi0KLWludAotZnJl ZXNsb3QobikgaW50IG47IHsKLSAgICBpbnQgazsKLSAgICBpZiAoIWlrZGJvcGVuKQotICAgICAg cmV0dXJuKDApOwotICAgIGRiZmxhZ3MgPSAwTDsKLSAgICBpZiAobiA9PSBteWRic2xvdCkgewot ICAgICAgICBkYmZsYWdzID0gbXlmbGFncyAmIH5EQkZfSU5VU0U7Ci0gICAgICAgIGRiZmxhZ3Mg Jj0gfkRCRl9MT0dHRUQ7Ci0gICAgfQotICAgIGsgPSBkYmZsZFtkYl9GTEFHU10ubGVuOwotICAg IHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0ZMQUdTXS5vZmZdLHVsb25ndG9oZXgoZGJmbGFncyxr KSxrKTsKLSAgICByZXR1cm4odXBkc2xvdChuKSk7Ci19Ci0KLS8qICBHIEUgVCBTIEwgTyBUICAt LSAgRmluZCBhIGZyZWUgZGF0YWJhc2Ugc2xvdDsgcmV0dXJucyBzbG90IG51bWJlciAgKi8KLQot I2lmZGVmIFVOSVgKLSNpbmNsdWRlIDxmY250bC5oPgkJCS8qIEZvciBjcmVhdCgpICovCi0jZW5k aWYJLyogVU5JWCAqLwotCi1pbnQKLWdldHNsb3QoKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBGaW5kIGEgZnJlZSBzbG90IGZvciB1cyAqLwotICAgIEZJTEUgKiByZnAgPSBOVUxM OyAgICAgICAgICAgICAgICAgIC8qIFJldHVybnMgc2xvdCBudW1iZXIgKDAsIDEsIC4uLikgKi8K LSAgICBjaGFyIGlkc3RyaW5nWzY0XTsgICAgICAgICAgICAgICAgICAvKiBQSUQgc3RyaW5nIGJ1 ZmZlciAoZGVjaW1hbCkgKi8KLSAgICBjaGFyIHBpZGJ1Zls2NF0sICogczsKLSAgICBpbnQgaiwg aywgbiwgeCwgcmMgPSAtMTsKLSAgICBpbnQgbG9ja2ZkLCB0cmllcywgaGF2ZXNsb3QgPSAwOwot ICAgIGxvbmcgbG9ja3BpZDsKLSAgICBDS19PRkZfVCBpOwotICAgIC8qIGNoYXIgaXBidWZbMTdd OyAqLwotCi0gICAgaWYgKCFteWhleGlwWzBdKSAgICAgICAgICAgICAgICAgICAgLyogU2V0IG15 IGhleCBJUCBhZGRyZXNzIGlmIG5vdCBzZXQgKi8KLSAgICAgIGNrc3RybmNweSgoY2hhciAqKW15 aGV4aXAsIjdGMDAwMDAxIiwzMyk7Ci0gICAgc3ByaW50ZihpZHN0cmluZywiJTA4bHg6JTAxMGxk XG4iLG15aXAsbXlwaWQpOwotICAgIGRlYnVnKEYxMTAsImdldHNsb3QgaWRzdHJpbmciLCBpZHN0 cmluZywgMCk7Ci0KLSAgICAvKiBNYWtlIHRlbXBvcmFyeSBsb2NrZmlsZSBuYW1lIElQLlBJRCAo aGV4LmhleCkgKi8KLSAgICAvKiBUaGlzIHNob3VsZCBmaXQgaW4gMTQgY2hhcnMgLS0gaHVnZSBQ SURzIGFyZSB1c3VhbGx5IG5vdCBwb3NzaWJsZSAqLwotICAgIC8qIG9uIDE0LWNoYXIgZmlsZW5h bWUgc3lzdGVtcy4gKi8KLQotICAgIHNwcmludGYodG1wbGNrLCIlcyUwOGx4LiVseCIsZGJkaXIs bXlpcCxteXBpZCk7Ci0gICAgZGVidWcoRjExMCwiZ2V0c2xvdCB0ZW1wZmlsZSIsdG1wbGNrLDAp OwotCi0gICAgLyogTWFrZSBhIHRlbXBvcmFyeSBmaWxlICovCi0KLSAgICBsb2NrZmQgPSBjcmVh dCh0bXBsY2ssIDA2MDApOwkvKiBCVVQgVEhJUyBJU04nVCBQT1JUQUJMRSAqLwotICAgIGlmIChs b2NrZmQgPCAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsImdldHNsb2NrIHRlbXAgbG9ja2ZpbGUg Y3JlYXRlIGZhaWx1cmUiLCB0bXBsY2ssIGVycm5vKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICB9Ci0gICAgLyogV3JpdGUgbXkgKGRlY2ltYWwpIFBJRCBpbnRvIHRoZSB0ZW1wIGZpbGUgKi8K LQotICAgIHdyaXRlKGxvY2tmZCxpZHN0cmluZywoaW50KXN0cmxlbihpZHN0cmluZykpOwotICAg IGlmIChjbG9zZShsb2NrZmQpIDwgMCkgeyAgICAgICAgICAgIC8qIENsb3NlIGxvY2tmaWxlICov Ci0gICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZXJyb3IgY2xvc2luZyB0ZW1wIGxvY2tmaWxl IiwgIiIsIGVycm5vKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgc3ByaW50Zihs Y2tuYW0sIiVzJXMiLGRiZGlyLElLX0xPQ0tGSUxFKTsgLyogQnVpbGQgbG9ja2ZpbGUgbmFtZSAq LwotICAgIGRlYnVnKEYxMTAsImdldHNsb3QgbG9ja2ZpbGUiLGxja25hbSwwKTsKLQotICAgIHJm cCA9IGZvcGVuKGxja25hbSwiciIpOyAgICAgICAgICAgIC8qIFNlZSBpZiBsb2NrZmlsZSBleGlz dHMgKi8KLSAgICBpZiAocmZwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBzby4u LiAqLwotICAgICAgICByc2V0KHBpZGJ1ZiwiIiw2NCwwKTsKLSAgICAgICAgeCA9IGZyZWFkKHBp ZGJ1ZiwxLDYzLHJmcCk7ICAgICAvKiBSZWFkIElEIHN0cmluZyBmcm9tIGl0ICovCi0gICAgICAg IGZjbG9zZShyZnApOyAgICAgICAgICAgICAgICAgICAgLyogYW5kIGNsb3NlIGl0IHF1aWNrbHkg Ki8KLSAgICAgICAgZGVidWcoRjExMCwiZ2V0c2xvdCBsb2NrIGV4aXN0cyIscGlkYnVmLDApOwot ICAgICAgICBpZiAoeCA+IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGhhdmUgYSBQ SUQsIGNoZWNrIGl0ICovCi0gICAgICAgICAgICBjaGFyICogcyA9IHBpZGJ1ZjsKLSAgICAgICAg ICAgIHdoaWxlICgqcykgewotICAgICAgICAgICAgICAgIGlmIChpc2xvd2VyKCpzKSkgKnMgPSB0 b3VwcGVyKCpzKTsKLSAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJzonKSB7Ci0gICAgICAgICAg ICAgICAgICAgICpzID0gTlVMOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRz bG90IGxvY2sgSVAiLHBpZGJ1ZiwwKTsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwi Z3Rlc2xvdCBteSAgIElQIixteWhleGlwLDApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0 cmNtcChwaWRidWYsbXloZXhpcCkpIHsgLyogU2FtZSBJUCBhZGRyZXNzPyAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgbG9ja3BpZCA9IGF0b2wocysxKTsgLyogWWVzLCBub3cgZ2V0IFBJRCAq LwotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBsb2NrcGlkIiwi Iixsb2NrcGlkKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgUElEIGxv Y2twaWQgb24gdGhpcyBjb21wdXRlciBpcyBhbGl2ZSAqLwotICAgICAgICAgICAgICAgICAgICAg ICAgeCA9IHpjaGtwaWQobG9ja3BpZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXgp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJnZXRzbG90IFBJRCBz dGFsZSxyZW1vdmluZyBsb2NrIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bmxpbmsobGNrbmFtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgIGRlYnVnKEYxMTEsImdldHNsb3QgbG9ja2ZpbGUgb3BlbiBmYWlsdXJlIixs Y2tuYW0sZXJybm8pOwotICAgICAgICB9Ci0gICAgfQotICAgIC8qIFRyeSBJS19MQ0tUUklFUyAo MTYpIHRpbWVzIHRvIHJlbmFtZSB0ZW1wIGZpbGUgdG8gbG9ja2ZpbGUgKi8KLQotICAgIGZvciAo dHJpZXMgPSBJS19MQ0tUUklFUzsgdHJpZXMgPiAwOyB0cmllcy0tKSB7Ci0gICAgICAgIGlmICh6 cmVuYW1lKHRtcGxjayxsY2tuYW0pID09IDApCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl YnVnKEYxMDEsImdldHNsb3QgZGF0YWJhc2UgbG9ja2VkIGJ5IHBpZCIsICIiLCBkYnBpZCk7Ci0g ICAgICAgIHNsZWVwKElLX0xDS1NMRUVQKTsKLSAgICB9Ci0gICAgaWYgKHRyaWVzIDwgMSkgeyAg ICAgICAgICAgICAgICAgICAgLyogQ291bGRuJ3QgKi8KLSAgICAgICAgZGVidWcoRjExMCwiZ2V0 c2xvdCBjcmVhdGUgbG9jayBmYWlsdXJlIixsY2tuYW0sMCk7Ci0gICAgICAgIHJldHVybigtMSk7 Ci0gICAgfQotICAgIC8qIEhhdmUgbG9jaywgb3BlbiBkYXRhYmFzZSAqLwotCi0gICAgZGVidWco RjExMCwiZ2V0c2xvdCBoYXMgbG9jayIsbGNrbmFtLDApOyAvKiBIYXZlIGxvY2sgKi8KLQotICAg IGlmICghZGJmaWxlKQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIC8qIElmIGRhdGFiYXNlIGRv ZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdC4gKi8KLQotICAgIGRlYnVnKEYxMTAsImdldHNsb3QgZGJm aWxlIixkYmZpbGUsMCk7Ci0gICAgaWYgKHpjaGtpKGRiZmlsZSkgPCAwKSB7Ci0gICAgICAgIGRl YnVnKEYxMTAsImdldHNsb3QgY3JlYXRpbmcgbmV3IGRhdGFiYXNlIixkYmZpbGUsMCk7Ci0gICAg ICAgIHggPSBjcmVhdChkYmZpbGUsMDY2MCk7Ci0gICAgICAgIGlmICh4IDwgMCkgewotICAgICAg ICAgICAgZGVidWcoRjExMSwiZ2V0c2xvdCBjcmVhdCgpIGZhaWxlZCIsIGRiZmlsZSwgZXJybm8p OwotICAgICAgICAgICAgZ290byB4c2xvdDsKLSAgICAgICAgfQotICAgICAgICBjbG9zZSh4KTsK LSAgICB9Ci0gICAgZGJmcCA9IGZvcGVuKGRiZmlsZSx1cGRtb2RlKTsgICAgICAgLyogT3BlbiBp dCBpbiB1cGRhdGUgbW9kZSAqLwotICAgIGlmICghZGJmcCkgewotICAgICAgICBkZWJ1ZyhGMTEx LCJnZXRzbG90IGZvcGVuIGZhaWxlZCIsZGJmaWxlLGVycm5vKTsKLSAgICAgICAgZ290byB4c2xv dDsKLSAgICB9Ci0gICAgLyogTm93IGZpbmQgYSBmcmVlIChvciBuZXcpIHNsb3QuLi4gKi8KLQot ICAgIGRibGFzdHVzZWQgPSAwTDsgICAgICAgICAgICAgICAgICAgIC8qIFNlZWsgcG9pbnRlciB0 byBsYXN0IHJlY29yZCBpbnVzZSAqLwotICAgIG15ZGJzZWVrID0gMEw7ICAgICAgICAgICAgICAg ICAgICAgIC8qIFNlZWsgcG9pbnRlciBmb3IgbXkgcmVjb3JkICovCi0KLSAgICAvKiBRdWlja2x5 IHJlYWQgdGhlIHdob2xlIGRhdGFiYXNlOyBuID0gcmVjb3JkIGNvdW50ZXIsIGkgPSBzZWVrIHBv aW50ZXIgKi8KLQotICAgIGZvciAobiA9IDAsIGkgPSAwOyAhZmVvZihkYmZwKTsgaSArPSBEQl9S RUNMLCBuKyspIHsKLSAgICAgICAgeCA9IGZyZWFkKGRicmVjLDEsREJfUkVDTCxkYmZwKTsgLyog UmVhZCBhIHJlY29yZCAqLwotICAgICAgICBpZiAoeCA8IDEpICAgICAgICAgICAgICAgICAgICAg IC8qIEVPRiBub3QgY2F1Z2h0IGJ5IGZlb2YoKSAqLwotICAgICAgICAgIGJyZWFrOwotI2lmbmRl ZiBOT0ZUUlVOQ0FURQotICAgICAgICBpZiAoeCAhPSBEQl9SRUNMKSB7ICAgICAgICAgICAgIC8q IFdhdGNoIG91dCBmb3IgdHJhaWxpbmcganVuayAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwi Z2V0c2xvdCBiYWQgc2l6ZSIsIiIseCk7ICAvKiAoU2hvdWxkbid0IGhhcHBlbi4uLikgKi8KLSNp ZmRlZiBDT0hFUkVOVAotICAgICAgICAgICAgY2hzaXplKGZpbGVubyhkYmZwKSxpKTsKLSNlbHNl Ci0gICAgICAgICAgICBmdHJ1bmNhdGUoZmlsZW5vKGRiZnApLChDS19PRkZfVClpKTsKLSNlbmRp ZiAvKiBDT0hFUkVOVCAqLwotICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAgICBDS0ZTRUVL KGRiZnAsaSwwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9G VFJVTkNBVEUgKi8KLSAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCByZWNvcmQiLCIiLG4pOwot ICAgICAgICBrID0gZGJmbGRbZGJfRkxBR1NdLm9mZjsKLSAgICAgICAgaiA9IGRiZmxkW2RiX0ZM QUdTXS5sZW47Ci0gICAgICAgIGRiZmxhZ3MgPSBoZXh0b3Vsb25nKCZkYnJlY1trXSxqKTsKLSAg ICAgICAgZGVidWcoRjAwMSwiZ2V0c2xvdCBkYmZsYWdzIiwiIixkYmZsYWdzKTsKLSAgICAgICAg ayA9IGRiZmxkW2RiX01ZUElEXS5vZmY7Ci0gICAgICAgIGogPSBkYmZsZFtkYl9NWVBJRF0ubGVu OwotICAgICAgICBkYnBpZCAgPSBoZXh0b3Vsb25nKCZkYnJlY1trXSxqKTsKLSAgICAgICAgZGVi dWcoRjAwMSwiZ2V0c2xvdCBkYnBpZCIsIiIsZGJwaWQpOwotICAgICAgICBrID0gZGJmbGRbZGJf U0FERFJdLm9mZjsKLSAgICAgICAgaiA9IGRiZmxkW2RiX1NBRERSXS5sZW47Ci0gICAgICAgIGRi aXAgPSBoZXh0b3Vsb25nKCZkYnJlY1trXSxqKTsKLSAgICAgICAgZGVidWcoRjAwMSwiZ2V0c2xv dCBkYmlwIiwiIixkYmlwKTsKLQotICAgICAgICBpZiAoZGJmbGFncyAmIERCRl9JTlVTRSkgeyAg ICAgIC8qIFJlbWVtYmVyIGxhc3Qgc2xvdCBpbiB1c2UgKi8KLSAgICAgICAgICAgIHggPSAwOyAg ICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgaXQncyBSRUFMTFkgaW4gdXNlICovCi0g ICAgICAgICAgICBpZiAoZGJwaWQgPT0gbXlwaWQgJiYgZGJpcCA9PSBteWlwKSB7IC8qIENoZWNr IGZvciBQSUQgPT0gbXkgUElEICovCi0gICAgICAgICAgICAgICAgeCA9IDE7Ci0gICAgICAgICAg ICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCByZWNvcmQgcGlkIiwiIixkYnBpZCk7Ci0gICAgICAg ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogT3IgZm9yIHN0YWxlIFBJRCAqLwot ICAgICAgICAgICAgICAgIHggPSB6Y2hrcGlkKGRicGlkKTsKLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJnZXRzbG90IHpjaGtwaWQoKSIsIiIseCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBpZiAoIXgpIHsgICAgICAgICAgICAgICAgICAgLyogQm9ndXMgcmVjb3JkICovCi0gICAg ICAgICAgICAgICAgeCA9IGZyZWVzbG90KG4pOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEs ImdldHNsb3Qgc3RhbGUgcmVjb3JkIHBpZDogZnJlZXNsb3QoKSIsIiIseCk7Ci0gICAgICAgICAg ICAgICAgaWYgKHggPiAtMSAmJiAhaGF2ZXNsb3QpCi0gICAgICAgICAgICAgICAgICBkYmZsYWdz ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBJdCdzIHJl YWxseSBpbiB1c2UgKi8KLSAgICAgICAgICAgICAgICBkYmxhc3R1c2VkID0gaTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWhhdmVzbG90KSB7ICAgICAgICAgICAgICAg IC8qIElmIEkgZG9uJ3QgaGF2ZSBhIHNsb3QgeWV0ICovCi0gICAgICAgICAgICBpZiAoIShkYmZs YWdzICYgREJGX0lOVVNFKSkgeyAgICAgICAvKiBDbGFpbSB0aGlzIG9uZSAqLwotICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZnJlZSBzbG90IiwgIiIsIG4pOwotICAgICAgICAg ICAgICAgIGhhdmVzbG90ID0gMTsKLSAgICAgICAgICAgICAgICBteWRic2VlayA9IGk7Ci0gICAg ICAgICAgICAgICAgbXlkYnNsb3QgPSBuOyAgICAgICAgICAgLyogQnV0IGtlZXAgZ29pbmcuLi4g Ki8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBDb21lIGhlcmUgd2l0 aCBpID09IHNlZWsgcG9pbnRlciB0byBmaXJzdCByZWNvcmQgYWZ0ZXIgZW9mICovCi0KLSAgICBp ZiAoIWhhdmVzbG90KSB7ICAgICAgICAgICAgICAgICAgICAvKiBGb3VuZCBubyBmcmVlIHNsb3Qg c28gYWRkIHRvIGVuZCAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IG5ldyBzbG90Iiwi IixuKTsKLSAgICAgICAgaGF2ZXNsb3QgPSAxOwotICAgICAgICBteWRic2VlayA9IGk7Ci0gICAg ICAgIG15ZGJzbG90ID0gbjsKLSAgICB9Ci0gICAgaWtkYm9wZW4gPSAxOyAgICAgICAgICAgICAg ICAgICAgICAgLyogT0sgdG8gbWFrZSBkYXRhYmFzZSBlbnRyaWVzICovCi0gICAgZGVidWcoRjEw MSwiZ2V0c2xvdCByZWNvcmRzIiwiIixuKTsKLSAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGRibGFz dHVzZWQiLCIiLGRibGFzdHVzZWQpOwotICAgIGRlYnVnKEYxMDEsImdldHNsb3QgaSIsIiIsaSk7 Ci0KLSAgICAvKiBUcmltIHN0YWxlIHJlY29yZHMgZnJvbSBlbmQgKi8KLQotI2lmbmRlZiBOT0ZU UlVOQ0FURQotICAgIGlmIChpID4gZGJsYXN0dXNlZCtEQl9SRUNMKSB7Ci0gICAgICAgIGRlYnVn KEYxMDEsImdldHNsb3QgdHJ1bmNhdGluZyBhdCIsIiIsZGJsYXN0dXNlZCtEQl9SRUNMKTsKLSNp ZmRlZiBDT0hFUkVOVAotICAgICAgICB4ID0gY2hzaXplKGZpbGVubyhkYmZwKSxkYmxhc3R1c2Vk K0RCX1JFQ0wpOwotI2Vsc2UKLSAgICAgICAgeCA9IGZ0cnVuY2F0ZShmaWxlbm8oZGJmcCksKENL X09GRl9UKShkYmxhc3R1c2VkK0RCX1JFQ0wpKTsKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotICAg ICAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAgICAgICAgIC8qIChOb3QgZmF0YWwpICovCi0g ICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBmdHJ1bmNhdGUgZmFpbGVkIiwgIiIsIGVycm5v KTsKLSAgICB9Ci0jZW5kaWYgLyogTk9GVFJVTkNBVEUgKi8KLQotICAgIC8qIEluaXRpYWxpemUg bXkgcmVjb3JkICovCi0KLSAgICBpZiAoaW5pdHNsb3QobXlkYnNsb3QpIDwgMCkgewotICAgICAg ICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGluaXRzbG90KCkgZXJyb3IiLCIiLG4pOwotICAgICAgICBp a2Rib3BlbiA9IDA7Ci0gICAgICAgIGdvdG8geHNsb3Q7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEs ImdldHNsb3QgT0siLCIiLG15ZGJzbG90KTsKLSAgICByYyA9IG15ZGJzbG90OyAgICAgICAgICAg ICAgICAgICAgICAvKiBPSyByZXR1cm4gY29kZSAqLwotCi0gIHhzbG90OiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVW5sb2NrIHRoZSBkYXRhYmFzZSBhbmQgcmV0dXJuICovCi0g ICAgaWYgKHVubGluayhsY2tuYW0pIDwgMCkgewotICAgICAgICBkZWJ1ZyhGMTExLCJnZXRzbG90 IGxvY2tmaWxlIHJlbW92YWwgZmFpbGVkIixsY2tuYW0sZXJybm8pOwotICAgICAgICByYyA9IC0x OwotICAgIH0KLSAgICByZXR1cm4ocmMpOwotfQotI2VuZGlmIC8qIElLU0RCICovCi0jZW5kaWYg LyogTk9JS1NEICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja3V1c3guYy5wcmludHcgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrdXVzeC5jLnByaW50dwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMz MmJlZC4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAy L2NrdXVzeC5jLnByaW50dworKysgL2Rldi9udWxsCkBAIC0xLDk3MTggKzAsMCBAQAotI2luY2x1 ZGUgImNrY3N5bS5oIgotCi0vKiAgQyBLIFUgVSBTIFggLS0gICJVc2VyIEludGVyZmFjZSIgY29t bW9uIGZ1bmN0aW9ucy4gKi8KLQotLyoKLSAgQXV0aG9yczoKLSAgICBGcmFuayBkYSBDcnV6IDxm ZGNAY29sdW1iaWEuZWR1PiwKLSAgICAgIFRoZSBLZXJtaXQgUHJvamVjdCwgQ29sdW1iaWEgVW5p dmVyc2l0eSwgTmV3IFlvcmsgQ2l0eQotICAgIEplZmZyZXkgRSBBbHRtYW4gPGphbHRtYW5Ac2Vj dXJlLWVuZHBvaW50cy5jb20+Ci0gICAgICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3Jr IENpdHkKLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCi0gICAgVHJ1c3RlZXMgb2YgQ29s dW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRz IHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAg IGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5k IHBlcm1pc3Npb25zLgotKi8KLQotLyoKLSAgVGhpcyBtb2R1bGUgY29udGFpbnMgdXNlciBpbnRl cmZhY2UgZnVuY3Rpb25zIG5lZWRlZCBieSBib3RoIHRoZSBpbnRlcmFjdGl2ZQotICB1c2VyIGlu dGVyZmFjZSBhbmQgdGhlIGNvbW1hbmQtbGluZS1vbmx5IHVzZXIgaW50ZXJmYWNlLCBhcyB3ZWxs IGFzIHRoZQotICBzY3JlZW4tY29udHJvbCByb3V0aW5lcyAoY3Vyc2VzIGFuZCBlcXVpdmFsZW50 KS4KLSovCi0KLS8qIEluY2x1ZGVzICovCi0KLSNpbmNsdWRlICJja2NkZWIuaCIKLSNpbmNsdWRl ICJja2Nhc2MuaCIKLSNpbmNsdWRlICJja2NrZXIuaCIKLSNpbmNsdWRlICJja3V1c3IuaCIKLSNp bmNsdWRlICJja2N4bGEuaCIKLQotI2lmbmRlZiBOT0hURVJNQ0FQCi0jaWZkZWYgTk9URVJNQ0FQ Ci0jZGVmaW5lIE5PSFRFUk1DQVAKLSNlbHNlCi0jaWZuZGVmIEJTRDQ0Ci0jZGVmaW5lIE5PSFRF Uk1DQVAKLSNlbHNlCi0jaWZkZWYgX19ic2RpX18KLSNkZWZpbmUgTk9IVEVSTUNBUAotI2Vsc2UK LSNpZmRlZiBPUEVOQlNECi0jZGVmaW5lIE5PSFRFUk1DQVAKLSNlbHNlCi0jaWZkZWYgTUFDT1NY Ci0jZGVmaW5lIE5PSFRFUk1DQVAKLSNlbmRpZiAvKiBNQUNPU1ggKi8KLSNlbmRpZiAvKiBPUEVO QlNEICovCi0jZW5kaWYgLyogX19ic2RpX18gKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlm IC8qIE5PVEVSTUNBUCAqLwotI2VuZGlmIC8qIE5PSFRFUk1DQVAgKi8KLQotI2lmbmRlZiBOT1RF Uk1DQVAKLSNpZmRlZiBCU0Q0NAotI2lmbmRlZiBOT0hURVJNQ0FQCi0jaW5jbHVkZSA8dGVybWNh cC5oPgotI2VuZGlmIC8qIE5PSFRFUk1DQVAgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2Vsc2Ug IC8qICFCU0Q0NCAqLwotI2lmZGVmIGxpbnV4Ci0jaW5jbHVkZSA8dGVybS5oPgotI2VuZGlmIC8q IGxpbnV4ICovCi0jZW5kaWYgLyogTk9URVJNQ0FQICovCi0KLSNpZmRlZiBPUzIKLSNpbmNsdWRl IDxzdHJpbmcuaD4KLV9QUk9UT1RZUChjaGFyICogb3MyX2dldGhvc3RuYW1lLCAodm9pZCkpOwot I2RlZmluZSBnZXRwaWQgX2dldHBpZAotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIEJTRDQ0Ci0j aW5jbHVkZSA8ZXJybm8uaD4KLSNlbmRpZiAvKiBCU0Q0NCAqLwotCi1leHRlcm4geHhfc3RycCB4 eHN0cmluZzsKLQotI2lmZGVmIE9TMgotI2luY2x1ZGUgImNrY25ldC5oIgotI2Vsc2UgLyogT1My ICovCi1fUFJPVE9UWVAoIGNoYXIgKiBja2dldHBlZXIsIChWT0lEKSk7Ci1fUFJPVE9UWVAoaW50 IGdldGxvY2FsaXBhZGRyLCAodm9pZCkpOwotX1BST1RPVFlQKGludCBpc3RuY29tcG9ydCwgKHZv aWQpKTsKLSNpZm5kZWYgTk9DS0dFVEZRSE9TVAotX1BST1RPVFlQKCBjaGFyICogY2tnZXRmcWhv c3RuYW1lLChjaGFyICopKTsKLSNlbmRpZgkvKiBOT0NLR0VURlFIT1NUICovCi0jaWZuZGVmIE5F VENPTk4KLS8qCi0gIFdlIHNob3VsZCBqdXN0IHB1bGwgaW4gY2tjbmV0LmggaGVyZSwgYnV0IGl0 IGNhdXNlcyBhIGNvbmZsaWN0IHdpdGggY3Vyc2VzLmguCi0qLwotI2lmZGVmIFRDUFNPQ0tFVAot I2RlZmluZSBORVRDT05OCi0jZWxzZQotI2lmZGVmIFNVTlgyNQotI2RlZmluZSBORVRDT05OCi0j ZWxzZQotI2lmZGVmIFNUUkFUVVNYMjUKLSNkZWZpbmUgTkVUQ09OTgotI2Vsc2UKLSNpZmRlZiBJ Qk1YMjUKLSNkZWZpbmUgTkVUQ09OTgotI2Vsc2UKLSNpZmRlZiBIUFgyNQotI2RlZmluZSBORVRD T05OCi0jZWxzZQotI2lmZGVmIERFQ05FVAotI2RlZmluZSBORVRDT05OCi0jZWxzZQotI2lmZGVm IE5QSVBFCi0jZGVmaW5lIE5FVENPTk4KLSNlbHNlCi0jaWZkZWYgQ0tfTkVUQklPUwotI2RlZmlu ZSBORVRDT05OCi0jaWZkZWYgU1VQRVJMQVQKLSNkZWZpbmUgTkVUQ09OTgotI2Vsc2UKLSNlbmRp ZiAvKiBTVVBFUkxBVCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIFNVTlgy NSAqLwotI2VuZGlmIC8qIFNUUkFUVVNYMjUgKi8KLSNlbmRpZiAvKiBJQk1YMjUgKi8KLSNlbmRp ZiAvKiBIUFgyNSAqLwotI2VuZGlmIC8qIERFQ05FVCAqLwotI2VuZGlmIC8qIE5QSVBFICovCi0j ZW5kaWYgLyogQ0tfTkVUQklPUyAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNlbmRpZiAvKiBP UzIgKi8KLQotI2lmbmRlZiBUQ1BTT0NLRVQKLSNpZmRlZiBNVUxUSU5FVAotI2RlZmluZSBUQ1BT T0NLRVQKLSNlbmRpZiAvKiBNVUxUSU5FVCAqLwotI2lmZGVmIERFQ19UQ1BJUAotI2RlZmluZSBU Q1BTT0NLRVQKLSNlbmRpZiAvKiBERUNfVENQSVAgKi8KLSNpZmRlZiBXSU5UQ1AKLSNkZWZpbmUg VENQU09DS0VUCi0jZW5kaWYgLyogV0lOVENQICovCi0jaWZkZWYgVENQV0FSRQotI2RlZmluZSBU Q1BTT0NLRVQKLSNlbmRpZiAvKiBUQ1BXQVJFICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0K LSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx0 YXBpLmg+Ci0jaW5jbHVkZSAiY2tudGFwLmgiCi0jZWxzZSAvKiBOVCAqLwotI2RlZmluZSBJTkNM X1ZJTwotI2luY2x1ZGUgPG9zMi5oPgotI2VuZGlmIC8qIE5UICovCi0jaWZkZWYgQ09NTUVOVCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogV291bGQgeW91IGJlbGlldmUgKi8KLSN1bmRlZiBD T01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA8b3MyLmg+IGRlZmluZXMgdGhpcyA/ ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmZGVmIENLX05FVEJJT1MKLSNpbmNsdWRlICJj a29uYmkuaCIKLSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0KLSNpbmNsdWRlICJja29jb24uaCIK LWV4dGVybiBhc2NyZWVuIGNvbW1hbmRzY3JlZW47Ci0jaWZkZWYgS1VJCi0jaW5jbHVkZSAiaWt1 aS5oIgotI2VuZGlmIC8qIEtVSSAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgTlQKLSNp bmNsdWRlICJja253aW4uaCIKLSNlbmRpZiAvKiBOVCAqLwotI2lmZGVmIE9TMgotI2luY2x1ZGUg ImNrb3dpbi5oIgotI2luY2x1ZGUgImNrb3N5bi5oIgotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZk ZWYgQ0tfVEFQSQotZXh0ZXJuIGludCB0dHRhcGk7Ci1leHRlcm4gaW50IHRhcGlwYXNzOwotI2Vu ZGlmIC8qIENLX1RBUEkgKi8KLQotI2lmZGVmIENLX0tFUkJFUk9TCi0jaW5jbHVkZSAiY2t1YXRo LmgiCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQotI2lmbmRlZiBXSU5UQ1AKLSNpbmNsdWRl IDxzaWduYWwuaD4KLSNlbmRpZiAvKiBXSU5UQ1AgKi8KLQotI2lmZGVmIFZNUwotI2luY2x1ZGUg PGRlc2NyaXAuaD4KLSNpbmNsdWRlIDxzc2RlZi5oPgotI2luY2x1ZGUgPHN0c2RlZi5oPgotI2lm bmRlZiBPTERfVk1TCi0jaW5jbHVkZSA8bGliJHJvdXRpbmVzLmg+ICAvKiBOb3QgZm9yIFZBWCBD IDIuMyAqLwotI2Vsc2UKLSNpbmNsdWRlIDxsaWJkZWYuaD4KLSNlbmRpZiAvKiBPTERfVk1TICov Ci0jaWZkZWYgV0lOVENQCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYgLyogV0lOVENQICov Ci0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBEQ0xGRE9QRU4KLS8qIGZkb3BlbigpIG5lZWRz IGRlY2xhcmluZyBiZWNhdXNlIGl0J3Mgbm90IGRlY2xhcmVkIGluIDxzdGRpby5oPiAqLwotX1BS T1RPVFlQKCBGSUxFICogZmRvcGVuLCAoaW50LCBjaGFyICopICk7Ci0jZW5kaWYgLyogRENMRkRP UEVOICovCi0KLSNpZmRlZiBEQ0xQT1BFTgotLyogcG9wZW4oKSBuZWVkcyBkZWNsYXJpbmcgYmVj YXVzZSBpdCdzIG5vdCBkZWNsYXJlZCBpbiA8c3RkaW8uaD4gKi8KLV9QUk9UT1RZUCggRklMRSAq IHBvcGVuLCAoY2hhciAqLCBjaGFyICopICk7Ci0jZW5kaWYgLyogRENMUE9QRU4gKi8KLQotaW50 IHR0X2NyZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhcnJpYWdlIHJldHVybiBk aXNwbGF5ICovCi1pbnQgdHRfbGZkID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGlu ZWZlZWQgZGlzcGxheSAqLwotaW50IGludGVycnVwdGVkID0gMDsgICAgICAgICAgICAgICAgICAg IC8qIEludGVycnVwdGVkIGZyb20ga2V5Ym9hcmQgZmxhZyAqLwotaW50IGZ4ZF9pbml0ZWQgPSAw OwkJCS8qIEZ1bGxzY3JlZW4gc3R1ZmYgaW5pdGlhbGl6ZWQgKi8KLQotI2lmZGVmIERFQlVHCi1j aGFyIGRlYmZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAgLyogRGVidWdnaW5nIGxvZyBm aWxlIG5hbWUgKi8KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgVExPRwotY2hhciB0cmFm aWxbQ0tNQVhQQVRIKzFdOyAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGxvZyBmaWxlIG5h bWUgKi8KLSNlbmRpZiAvKiBUTE9HICovCi0KLWNoYXIgc2VzZmlsW0NLTUFYUEFUSCsxXTsgICAg ICAgICAgICAgICAvKiBTZXNzaW9uIGxvZyBmaWxlIG5hbWUgKi8KLQotI2lmZGVmIENLTE9HRElB TAotY2hhciBkaWFmaWxbQ0tNQVhQQVRIKzFdOyAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24g bG9nIGZpbGUgbmFtZSAqLwotY2hhciBjeGxvZ2J1ZltDWExPR0JVRkwrMV07ICAgICAgICAgICAg IC8qIENvbm5lY3Rpb24gbG9nIHJlY29yZCBidWZmZXIgKi8KLWludCBjeF9hY3RpdmUgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIGlzIGFjdGl2ZSAqLwotZXh0ZXJuIGlu dCBkaWFsb2c7Ci0jZW5kaWYgLyogQ0tMT0dESUFMICovCi0KLSNpZmRlZiBEWU5BTUlDCi1zdGF0 aWMgY2hhciAqY21kc3RyID0gTlVMTDsgICAgICAgICAgICAgLyogUGxhY2UgdG8gYnVpbGQgZ2Vu ZXJpYyBjb21tYW5kICovCi0jZWxzZQotI2lmZGVmIHBkcDExCi1zdGF0aWMgY2hhciBjbWRzdHJb MjU2XTsKLSNlbHNlCi1zdGF0aWMgY2hhciBjbWRzdHJbNDA5Nl07Ci0jZW5kaWYgLyogcGRwMTEg Ki8KLSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSNpZm5kZWYgTk9NU0VORAotY2hhciBmc3BlY1tD TURCTCs0XTsgICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lIHN0cmluZyBmb3IgXHYoZmls ZXNwZWMpICovCi1pbnQgZnNwZWNsZW4gPSBDTURCTDsKLSNlbHNlCi1jaGFyIGZzcGVjW0NLTUFY UEFUSCs0XTsKLWludCBmc3BlY2xlbiA9IENLTUFYUEFUSDsKLSNlbmRpZiAvKiBOT01TRU5EICov Ci0KLWNoYXIgKiByZnNwZWMgPSBOVUxMOwkJCS8qIFJlY2VpdmVkIGZpbGVzcGVjOiBsb2NhbCAq LwotY2hhciAqIHByZnNwZWMgPSBOVUxMOwkJCS8qIFByZWxpbWluYXJ5IHJmc3BlYyAqLwotY2hh ciAqIHNmc3BlYyA9IE5VTEw7CQkJLyogU2VudCBmaWxlc3BlYzogbG9jYWwgKi8KLWNoYXIgKiBw c2ZzcGVjID0gTlVMTDsJCQkvKiBQcmVsaW1pbmFyeSBzZnNwZWMgKi8KLWNoYXIgKiBzcmZzcGVj ID0gTlVMTDsJCQkvKiBSZWNlaXZlZCBmaWxlc3BlYzogcmVtb3RlICovCi1jaGFyICogcHNyZnNw ZWMgPSBOVUxMOwkJCS8qIFByZWxpbWluYXJ5IHNyZnNwZWMgKi8KLWNoYXIgKiBycmZzcGVjID0g TlVMTDsJCQkvKiBTZW50IGZpbGVzcGVjOiByZW1vdGUgKi8KLWNoYXIgKiBwcnJmc3BlYyA9IE5V TEw7CQkJLyogUHJlbGltaW5hcnkgcnJmc3BlYyAqLwotCi1pbnQgc3VjY2VzcyA9IDEsICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBzdWNjZXNzL2ZhaWx1cmUgZmxhZyAqLwotICAg IGNtZGx2bCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgbGV2ZWwgKi8K LSAgICBhY3Rpb24gPSAwLAkJCQkvKiBBY3Rpb24gc2VsZWN0ZWQgb24gY29tbWFuZCBsaW5lICov Ci0gICAgc2xvZ3RzID0gMCwJCQkJLyogU2Vzc2lvbi1sb2cgdGltZXN0YW1wcyBvbi9vZmYgKi8K LSAgICBzbG9nbnVsID0gMCwJCQkvKiBTZXNzaW9uLWxvZyBudWxsLXRlcm1pbmF0ZWQgbGluZXMg Ki8KLSNpZmRlZiBVTklYCi0gICAgc2Vzc2Z0ID0gWFlGVF9ULCAgICAgICAgICAgICAgICAgICAg LyogU2Vzc2lvbiBsb2cgZmlsZSB0eXBlICovCi0jZWxzZQotICAgIHNlc3NmdCA9IFhZRlRfQiwJ CQkvKiAodGV4dCBmb3IgVU5JWCBiaW5hcnkgZm9yIG90aGVycykgKi8KLSNlbmRpZiAvKiBVTklY ICovCi0gICAgcGZsYWcgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQgcHJv bXB0ICovCi0gICAgbXNnZmxnID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQg aW5mb3JtYXRpb25hbCBtZXNzYWdlcyAqLwotCi1leHRlcm4gaW50IHhhc2ttb3JlLCBzYXZlYXNr OwkJLyogTW9yZS1wcm9tcHRpbmcgKi8KLQotI2lmZGVmIENLX0FQQwotZXh0ZXJuIGludCBhcGNh Y3RpdmU7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0vKiBFeHRlcm5hbCB2YXJpYWJsZXMgKi8KLQot ZXh0ZXJuIGludCBsb2NhbCwgcXVpZXQsIGJpbmFyeSwgbmV0d29yaywgd2hhdCwgcGFyaXR5LCB4 aXRzdGEsIGVzY2FwZSwKLSAgdGxldmVsLCBiZ3NldCwgYmFja2dyZCwgeHN1c3BlbmQsIGNtZGlu dCwgbmV0dHlwZSwgc2VzbG9nLCBkZmxvYzsKLQotZXh0ZXJuIGludCBjbWRfcm93cywgY21kX2Nv bHMsIHhjbWRzcmM7Ci0KLWV4dGVybiBjaGFyIGNtZGZpbFtdOwotCi0jaWZkZWYgVk1TCi1leHRl cm4gaW50IGJhdGNoOwotI2VuZGlmIC8qIFZNUyAqLwotCi0jaWZkZWYgZGF0YWdlbmVyYWwgICAg ICAgICAgICAgICAgICAgICAgLyogMi8xMi85MiBFTkggKi8KLSNpbmNsdWRlIDxzeXNpZC5oPgot ZXh0ZXJuIGludCBjb25fcmVhZHNfbXQsIGNvbmludF9jaCwgY29uaW50X2F2bDsKLSNlbmRpZiAv KiBkYXRhZ2VuZXJhbCAqLwotCi1leHRlcm4gbG9uZyBzcGVlZDsKLQotZXh0ZXJuIGNoYXIgdHRu YW1lW10sICpkZnR0eSwgKmNtYXJnLCAqKmNtbGlzdCwgKnZlcnNpbywgbXlob3N0W107Ci0KLSNp Zm5kZWYgTk9DU0VUUwotZXh0ZXJuIGludCBmY2hhcnNldCwgdGNoYXJzZXQsIHhmcnhsYTsKLWV4 dGVybiBzdHJ1Y3QgY3NpbmZvIGZjc2luZm9bXSwgdGNzaW5mb1tdOwotI2VuZGlmIC8qIE5PQ1NF VFMgKi8KLQotI2lmZGVmIE9TMgotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgY29sb3JjbWQ7Ci0jZW5k aWYgLyogT1MyICovCi0KLSNpZmRlZiBOT1hGRVIKLQotaW50IGZkaXNwbGEgPSBYWUZEX047Ci0K LSNlbHNlICAvKiBOT1hGRVIgaXMgbm90IGRlZmluZWQgKi8KLQotI2lmZGVmIE9TMiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgZGlzcGxheSB0eXBlICovCi1p bnQgZmRpc3BsYSA9IFhZRkRfQzsgICAgICAgICAgICAgICAgICAgLyogQ3Vyc2VzIChmdWxsc2Ny ZWVuKSBpZiB3ZSBoYXZlIGl0ICovCi0jZWxzZQotI2lmZGVmIENLX0NVUlNFUwotaW50IGZkaXNw bGEgPSBYWUZEX0M7Ci0jZWxzZQotaW50IGZkaXNwbGEgPSBYWUZEX1M7ICAgICAgICAgICAgICAg ICAgIC8qIE90aGVyd2lzZSBDUlQgKi8KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLQotZXh0ZXJuIHN0cnVjdCBja19wIHB0YWJbXTsKLWV4dGVybiBpbnQgcHJvdG9j b2wsIHhmcmJlbCwgeGZyaW50OwotCi0jaWZkZWYgU1RSRUFNSU5HCi1leHRlcm4gaW50IHN0cmVh bWluZywgc3RyZWFtb2s7Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0KLS8qIFVzZWQgaW50ZXJu YWxseSAqLwotCi0jaWZkZWYgS1VJCi1fUFJPVE9UWVAoIFZPSUQgc2NyZWVuZywgKGludCwgY2hh ciwgbG9uZywgY2hhciAqKSApOwotI2VuZGlmCS8qIEtVSSAqLwotX1BST1RPVFlQKCBWT0lEIHNj cmVlbmMsIChpbnQsIGNoYXIsIENLX09GRl9ULCBjaGFyICopICk7Ci0KLQotI2lmZGVmIENLX0NV UlNFUwotI2lmbmRlZiBEWU5BTUlDCi1zdGF0aWMgY2hhciB4dHJtYnVmW1RSTUJVRkxdOyAgICAg ICAgICAgLyogdGdldGVudCgpIGJ1ZmZlciAqLwotY2hhciAqIHRybWJ1ZiA9IHh0cm1idWY7Ci0j ZWxzZQotY2hhciAqIHRybWJ1ZiA9IE5VTEw7Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotX1BST1RP VFlQKCBzdGF0aWMgVk9JRCBkcHlpbml0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggc3RhdGljIGxv bmcgc2hvY3BzLCAoaW50LCBDS19PRkZfVCwgQ0tfT0ZGX1QpICk7Ci1fUFJPVE9UWVAoIHN0YXRp YyBDS19PRkZfVCBzaG9ldGwsIChDS19PRkZfVCwgbG9uZywgQ0tfT0ZGX1QsIENLX09GRl9UKSAp OwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi1zdGF0aWMgaW50IGZ0X3dpbiA9IDA7ICAvKiBG dWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSB3aW5kb3cgaXMgYWN0aXZlICovCi0KLS8q IFZhcmlhYmxlcyBkZWNsYXJlZCBoZXJlICovCi0KLXN0YXRpYyBjaGFyICogc2tyZWFzb25bXSA9 IHsKLSAgICAiIiwJCQkJCS8qIDAgKi8KLSAgICAiUmVtb3RlIGZpbGUgbm90IG9sZGVyIiwJCS8q IFNLUF9EQVQgKi8KLSAgICAiSWRlbnRpY2FsIG1vZGlmaWNhdGlvbiB0aW1lcyIsCS8qIFNLUF9F UVUgKi8KLSAgICAiVHlwZSIsCQkJCS8qIFNLUF9UWVAgKi8KLSAgICAiU2l6ZSIsCQkJCS8qIFNL UF9TSVogKi8KLSAgICAiTmFtZSBjb2xsaXNpb24iLAkJCS8qIFNLUF9OQU0gKi8KLSAgICAiRXhj ZXB0aW9uIExpc3QiLAkJCS8qIFNLUF9FWEwgKi8KLSAgICAiRG90IGZpbGUiLAkJCQkvKiBTS1Bf RE9UICovCi0gICAgIkJhY2t1cCBmaWxlIiwJCQkvKiBTS1BfQktVICovCi0gICAgIlJlY292ZXJ5 IG5vdCBuZWVkZWQiLAkJLyogU0tQX1JFUyAqLwotICAgICJBY2Nlc3MgZGVuaWVkIiwJCQkvKiBT S1BfQUNDICovCi0gICAgIk5vdCBhIHJlZ3VsYXIgZmlsZSIsCQkvKiBTS1BfTlJGICovCi0gICAg IlNpbXVsYXRlZCIsCQkJLyogU0tQX1NJTSAqLwotICAgICJTaW11bGF0ZWQgLSBSZW1vdGUgZmls ZSBvbGRlciIsCS8qIFNLUF9YVVAgKi8KLSAgICAiU2ltdWxhdGVkIC0gTm8gcmVtb3RlIGZpbGUi LAkvKiBTS1BfWE5YICovCi19Owotc3RhdGljIGludCBuc2tyZWFzb24gPSAoc2l6ZW9mKHNrcmVh c29uKSAvIHNpemVvZihjaGFyICopKTsKLQotY2hhciAqCi1nc2tyZWFzb24obikgaW50IG47IHsK LSAgICByZXR1cm4oKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pID8gc2tyZWFzb25bbl0gOiAiIik7 Ci19Ci0KLWNoYXIgcGt0ZmlsW0NLTUFYUEFUSCsxXTsgICAgICAgICAgICAgICAvKiBQYWNrZXQg bG9nIGZpbGUgbmFtZSAqLwotCi0jaWZuZGVmIE5PTVNFTkQgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTXVsdGlwbGUgU0VORCAqLwotY2hhciAqbXNmaWxlc1tNU0VORE1BWF07Ci0jZW5kaWYg LyogTk9NU0VORCAqLwotCi0jaWZkZWYgQ0tfVElNRVJTCi1leHRlcm4gbG9uZyBydHRkZWxheTsK LWV4dGVybiBpbnQgIHJ0dGZsZzsKLSNlbmRpZiAvKiBDS19USU1FUlMgKi8KLWV4dGVybiBpbnQg cmN2dGltbzsKLQotI2lmZGVmIENLX1JFU0VORAotZXh0ZXJuIGludCBzZW5kbW9kZTsKLWV4dGVy biBDS19PRkZfVCBzZW5kc3RhcnQsIHJzX2xlbjsKLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8KLQot I2lmZGVmIENLX1BDVF9CQVIgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIg dGhlcm1vbWV0ZXIgKi8KLWludCB0aGVybW9tZXRlciA9IDE7ICAgICAgICAgICAgICAgICAgICAv KiBPTiBieSBkZWZhdWx0ICovCi0jZW5kaWYgLyogQ0tfUENUX0JBUiAqLwotCi0jaWZkZWYgR0ZU SU1FUgotQ0tGTE9BVCBndHYgPSAtMS4wLCBvbGRndHYgPSAtMS4wOwotI2Vsc2UKLSNpZm5kZWYg T1MyCi1zdGF0aWMKLSNlbmRpZiAvKiBPUzIgKi8KLSAgbG9uZyBndHYgPSAtMUwsIG9sZGd0diA9 IC0xTDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLWV4dGVybiBpbnQgc2VydmVyLCBiY3R1LCBy cHRmbGcsIGVicWZsZywgc3BzaXosIHVycHNpeiwgd21heCwgY3pzZWVuLCBjeHNlZW4sCi0gIHdp bmxvLCBkaXNwbGEsIHRpbWludCwgbnBhZCwgZWJxLCBiY3RyLCBycHRxLCBhdGNhcHUsIGxwY2Fw dSwKLSAgc3djYXB1LCB3c2xvdG4sIHdzbG90ciwgcnRpbW8sIG15cGFkbiwgc3EsIGNhcGFzLCBy cHNpeiwgdHNlY3MsCi0gIHBrdGxvZywgbHNjYXB1LCBkZXN0LCBzcnZkaXMsIHdzbG90cywgc3Bh Y2tldHMsIHNwa3RsLCBycGt0bCwKLSAgcmV0cmFucywgd2N1ciwgbnVtZXJycywgZnNlY3MsIHdo YXRydSwgY3J1bmNoZWQsIHRpbWVvdXRzLAotICBycGFja2V0cywgZm5jbnYsIGJ5ZV9hY3RpdmUs IGRpc2NhcmQsIGluc2VydmVyLCBkaXJhY3RpdmUsIGNkYWN0aXZlOwotCi1leHRlcm4gbG9uZyBm aWxjbnQsIGZpbHJlaiwgcnB0biwgZmlsY3BzLCB0ZmNwcywgY3BzLCBwZWFrY3BzOwotZXh0ZXJu IENLX09GRl9UIGZmYywgdGZjLCBmc2l6ZTsgCi0KLWxvbmcgb2xkY3BzID0gMEw7Ci0KLWV4dGVy biBDSEFSICpyZGF0YXAsIHBhZGNoLCBzZW9sLCBjdGxxLCBteXBhZGMsIGVvbCwgKmVwa3Rtc2c7 Ci1leHRlcm4gY2hhciAqeGZybXNnOwotCi0jaWZkZWYgSUtTREIKLUZJTEUgKiBkYmZwID0gTlVM TDsgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHBvaW50ZXIgdG8gZGF0YWJhc2UgZmlsZSAq LwotCi1pbnQgZGJlbmFibGVkID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3Ig ZGF0YWJhc2UgaXMgZW5hYmxlZCAqLwotZXh0ZXJuIGludCBpa2Rib3BlbjsgICAgICAgICAgICAg ICAgICAgIC8qIEZsYWcgZm9yIGRhdGFiYXNlIGlzIG9wZW4gKi8KLQotdW5zaWduZWQgbG9uZyBt eWRic2VlayA9IDBMOyAgICAgICAgICAgIC8qIFNlZWsgcG9pbnRlciB0byBteSByZWNvcmQgKi8K LWludCBteWRic2xvdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBNeSBzbG90IG51bWJl ciAqLwotdW5zaWduZWQgbG9uZyBteWZsYWdzID0gMEw7ICAgICAgICAgICAgIC8qIE15IGZsYWdz ICovCi11bnNpZ25lZCBsb25nIG15YXR5cGUgPSAwTDsgICAgICAgICAgICAgLyogTXkgYXV0aG9y aXphdGlvbiB0eXBlICovCi11bnNpZ25lZCBsb25nIG15YW1vZGUgPSAwTDsgICAgICAgICAgICAg LyogTXkgYXV0aG9yaXphdGlvbiBtb2RlICovCi11bnNpZ25lZCBsb25nIG15c3RhdGUgPSAwTDsg ICAgICAgICAgICAgLyogTXkgc3RhdGUgKFNFTkQsIFJFQ0VJVkUsIGV0YykgKi8KLXVuc2lnbmVk IGxvbmcgbXlwaWQgPSAwTDsgICAgICAgICAgICAgICAvKiBNeSBQSUQgKi8KLXVuc2lnbmVkIGxv bmcgbXlpcCA9IDBMOyAgICAgICAgICAgICAgICAvKiBNeSBJUCBhZGRyZXNzICovCi11bnNpZ25l ZCBsb25nIHBlZXJpcCA9IDBMOyAgICAgICAgICAgICAgLyogTXkgcGVlcidzIElQIGFkZHJlc3Mg Ki8KLQotdW5zaWduZWQgbG9uZyBkYmlwID0gMEw7ICAgICAgICAgICAgICAgIC8qIElQIGFkZHJl c3MgaW4gZGIgcmVjb3JkICovCi11bnNpZ25lZCBsb25nIGRicGlkID0gMEw7ICAgICAgICAgICAg ICAgLyogUElEIGluIGRiIHJlY29yZCAqLwotdW5zaWduZWQgbG9uZyBkYmZsYWdzID0gMEw7ICAg ICAgICAgICAgIC8qIEZsYWdzIGZpZWxkIGluIGRiIHJlY29yZCAqLwotdW5zaWduZWQgbG9uZyBk Ymxhc3R1c2VkID0gMEw7ICAgICAgICAgIC8qIExhc3QgaW4tdXNlIHJlY29yZCBpbiBkYiAqLwot Y2hhciBkYnJlY1tEQl9SRUNMXTsgICAgICAgICAgICAgICAgICAgIC8qIERhdGFiYXNlIHJlY29y ZCBidWZmZXIgKi8KLQotY2hhciAqIGRiZGlyICAgPSBOVUxMOyAgICAgICAgICAgICAgICAgIC8q IERhdGFiYXNlIGRpcmVjdG9yeSAqLwotY2hhciAqIGRiZmlsZSAgPSBOVUxMOyAgICAgICAgICAg ICAgICAgIC8qIERhdGFiYXNlIGZpbGUgZnVsbCBwYXRobmFtZSAqLwotY2hhciBteWhleGlwWzMz XSA9IHsgTlVMLCBOVUwgfTsgICAgICAgIC8qIE15IElQIGFkZHJlc3MgaW4gaGV4ICovCi1jaGFy IHBlZXJoZXhpcFszM10gPSB7IE5VTCwgTlVMIH07ICAgICAgLyogQ2xpZW50J3MgSVAgYWRkcmVz cyBpbiBoZXggKi8KLSNlbmRpZiAvKiBJS1NEQiAqLwotCi0jaWZkZWYgR0ZUSU1FUgotZXh0ZXJu IENLRkxPQVQgZnBmc2VjcywgZnB0c2VjcywgZnB4ZnNlY3M7Ci0jZWxzZQotZXh0ZXJuIGxvbmcg eGZzZWNzOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lm ZGVmIFRDUFNPQ0tFVAotI2lmZGVmIE5FV0ZUUAotZXh0ZXJuIGNoYXIgKiBmdHBfaG9zdCwgZnRw X3NydnR5cFtdOwotZXh0ZXJuIGludCBmdHBfY3N4LCBmdHBfY3NsLCBmdHBfZGViOwotI2VuZGlm IC8qIE5FV0ZUUCAqLwotZXh0ZXJuIGNoYXIgbXlpcGFkZHJbXTsKLSNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KLQotI2lmbmRlZiBOT0lDUAotI2lmbmRlZiBOT1NQTAotICAgIGV4dGVybiBzdHJ1Y3Qg bXRhYiAqbWFjdGFiOyAgICAgICAgIC8qIEZvciBPTl9FWElUIG1hY3JvLiAqLwotICAgIGV4dGVy biBpbnQgbm1hYzsKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmZGVmIERDTURCVUYKLWV4dGVybiBj aGFyICpjbWRidWY7ICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlciAqLwotI2Vs c2UKLWV4dGVybiBjaGFyIGNtZGJ1ZltdOyAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGJ1 ZmZlciAqLwotI2VuZGlmIC8qIERDTURCVUYgKi8KLWV4dGVybiBpbnQgY21kX3F1b3Rpbmc7Ci0j ZW5kaWYgLyogTk9JQ1AgKi8KLQotI2lmbmRlZiBOT0NDVFJBUAotI2lmZGVmIE5UCi0jaW5jbHVk ZSA8c2V0am1wZXguaD4KLSNlbHNlIC8qIE5UICovCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0jZW5k aWYgLyogTlQgKi8KLSNpbmNsdWRlICJja2NzaWcuaCIKLWV4dGVybiBja2ptcGJ1ZiBjbWpidWY7 Ci0jZW5kaWYgLyogTk9DQ1RSQVAgKi8KLQotZXh0ZXJuIGludCB4ZmlsZXR5cGUsIG5zY2FuZmls ZTsKLQotaW50Ci1zaG9lc2MoZXNjYXBlKSBpbnQgZXNjYXBlOyB7Ci0gICAgZXh0ZXJuIGNoYXIg KiBjY250YWJbXTsJCS8qIEMwIGNvbnRyb2wgY2hhcmFjdGVyIG5hbWUgdGFibGUgKi8KLSAgICBl eHRlcm4gaW50IHR0X2VzY2FwZTsKLSAgICBpZiAoKGVzY2FwZSA+IDAgJiYgZXNjYXBlIDwgMzIp IHx8IChlc2NhcGUgPT0gMTI3KSkgewotCXByaW50ZigiIEVzY2FwZSBjaGFyYWN0ZXI6IEN0cmwt JWMgKEFTQ0lJICVkLCAlcyk6ICVzXHJcbiIsCi0JICAgICAgIGN0bChlc2NhcGUpLAotCSAgICAg ICBlc2NhcGUsCi0JICAgICAgIChlc2NhcGUgPT0gMTI3ID8gIkRFTCIgOiBjY250YWJbZXNjYXBl XSksCi0JICAgICAgIHR0X2VzY2FwZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIKLQkgICAgICAg KTsKLSAgICB9IGVsc2UgewotCXByaW50ZigiIEVzY2FwZSBjaGFyYWN0ZXI6IENvZGUgJWQiLGVz Y2FwZSk7Ci0JaWYgKGVzY2FwZSA+IDE2MCAmJiBlc2NhcGUgPCAyNTYpCi0JICBwcmludGYoIiAo JWMpIixlc2NhcGUpOwotCXByaW50ZigiOiAlc1xyXG4iLCB0dF9lc2NhcGUgPyAiZW5hYmxlZCIg OiAiZGlzYWJsZWQiKTsJCi0gICAgfQotICAgIHJldHVybigwKTsKLX0KLQotI2lmbmRlZiBOT1hG RVIKLS8qICBQIFIgRSBTIEUgVCAgLS0gIFJlc2V0IGdsb2JhbCBwcm90b2NvbCB2YXJpYWJsZXMg ICovCi0KLWV4dGVybiBpbnQgcmVjdXJzaXZlOwotCi0jaWZkZWYgUEFUVEVSTlMKLWludCBwYXR0 ZXJucyA9IFNFVF9BVVRPOyAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHRvIHVzZSBmaWxlbmFt ZSBwYXR0ZXJucyAqLwotZXh0ZXJuIGludCBnX3BhdHRlcm5zOwkJCS8qIEZvciBzYXZpbmcgYW5k IHJlc3RvcmluZyAqLwotI2Vsc2UKLWludCBwYXR0ZXJucyA9IFNFVF9PRkY7Ci0jZW5kaWYgLyog UEFUVEVSTlMgKi8KLQotI2lmbmRlZiBOT0lDUAotI2lmZGVmIENLX0xBQkVMRUQKLWV4dGVybiBp bnQgZ19sZl9vcHRzLCBsZl9vcHRzOwotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLWV4dGVybiBp bnQgZ19tYXRjaGRvdCwgZ191c2VwaXBlcywgdXNlcGlwZXM7Ci1leHRlcm4gaW50IGdfYmluYXJ5 LCBnX3Byb3RvLCBnX2Rpc3BsYSwgZ19zcGF0aCwgZ19ycGF0aCwgZ19mbmNudjsKLWV4dGVybiBp bnQgZ19yZWN1cnNpdmU7Ci1leHRlcm4gaW50IGdfeGZlcm1vZGUsIHhmZXJtb2RlOwotZXh0ZXJu IGludCBnX3VycHNpeiwgZ19zcHNpemYsIGdfc3BzaXo7Ci1leHRlcm4gaW50IGdfc3BzaXpyLCBn X3NwbWF4LCBnX3dzbG90ciwgZ19wcmVmaXhpbmcsIGdfZm5jYWN0OwotZXh0ZXJuIGludCBnX2Zu c3BhdGgsIGdfZm5ycGF0aCwgZ19za2lwYnVwOwotZXh0ZXJuIGludCBub2xpbmtzOwotI2lmZGVm IENLU1lNTElOSwotZXh0ZXJuIGludCB6Z2ZzX2xpbms7Ci0jZW5kaWYgLyogQ0tTWU1MSU5LICov Ci0jaWZuZGVmIE5PU1BMCi1leHRlcm4gaW50IGdfcGZsZywgcHdmbGcsIGdfcGNwdCwgcHdjcnlw dDsKLWV4dGVybiBjaGFyICogZ19wc3dkLCBwd2J1ZltdOwotI2VuZGlmIC8qIE5PU1BMICovCi0j ZW5kaWYgLyogTk9JQ1AgKi8KLQotZXh0ZXJuIGludCBzcHNpemYsIHNwc2l6ciwgc3BtYXgsIHBy ZWZpeGluZywgZm5jYWN0LCBmbnNwYXRoLCBmbnJwYXRoOwotZXh0ZXJuIGludCBtb3Zpbmc7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFNFTkQgY3JpdGVyaWEgKi8KLWV4dGVybiBjaGFyIHNuZGFm dGVyW10sIHNuZGJlZm9yZVtdLCAqc25kZXhjZXB0W10sICpyY3ZleGNlcHRbXTsKLWV4dGVybiBD S19PRkZfVCBzbmRsYXJnZXIsIHNuZHNtYWxsZXIsIGNhbGlicmF0ZTsKLWV4dGVybiBpbnQgcm1h aWxmLCBycHJpbnRmLCBza2lwYnVwOwotZXh0ZXJuIGNoYXIgb3B0YnVmW107Ci0KLSNpZmRlZiBQ SVBFU0VORAotZXh0ZXJuIGNoYXIgKiBnX3NmaWx0ZXIsICogZ19yZmlsdGVyOwotZXh0ZXJuIGNo YXIgKiBzbmRmaWx0ZXIsICogcmN2ZmlsdGVyOwotI2VuZGlmIC8qIFBJUEVTRU5EICovCi1leHRl cm4gY2hhciAqKiBzbmRhcnJheTsKLQotVk9JRAotZnRyZXNldCgpIHsKLSNpZm5kZWYgTk9JQ1AK LSAgICBpbnQgaTsKLSAgICBleHRlcm4gY2hhciAqIGZpbGVmaWxlOwotICAgIGV4dGVybiBpbnQg cmVsaWFibGUsIHhyZWxpYWJsZSwgY19zYXZlLCBzc19zYXZlLCBzbG9zdGFydCwgdXJjbGVhcjsK LSAgICBleHRlcm4gaW50IG9vcHRzLCBvbW9kZSwgb25hbWUsIG9wYXRoLCBrYWN0aXZlLCBhdXRv cGF0aDsKLSAgICBleHRlcm4gY2hhciAqIHNuZF9tb3ZlOyAgICAgICAgICAgICAvKiBEaXJlY3Rv cnkgdG8gbW92ZSBzZW50IGZpbGVzIHRvICovCi0gICAgZXh0ZXJuIGNoYXIgKiBzbmRfcmVuYW1l OyAgICAgICAgICAgLyogV2hhdCB0byByZW5hbWUgc2VudCBmaWxlcyB0byAqLwotICAgIGV4dGVy biBjaGFyICogcmN2X21vdmU7Ci0gICAgZXh0ZXJuIGNoYXIgKiByY3ZfcmVuYW1lOwotICAgIGV4 dGVybiBjaGFyICogZ19zbmRfbW92ZTsKLSAgICBleHRlcm4gY2hhciAqIGdfc25kX3JlbmFtZTsK LSAgICBleHRlcm4gY2hhciAqIGdfcmN2X21vdmU7Ci0gICAgZXh0ZXJuIGNoYXIgKiBnX3Jjdl9y ZW5hbWU7Ci0KLSNpZmRlZiBDS19UTVBESVIKLSAgICBleHRlcm4gaW50IGZfdG1wZGlyOwotICAg IGV4dGVybiBjaGFyIHNhdmRpcltdOwotI2VuZGlmIC8qIENLX1RNUERJUiAqLwotCi0jaWZkZWYg Q0tfU1BFRUQKLSNpZmRlZiBDT01NRU5UCi0gICAgZXh0ZXJuIGludCBmX2N0bHA7Ci0gICAgZXh0 ZXJuIHNob3J0IHNfY3RscFtdLCBjdGxwW107Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlm IC8qIENLX1NQRUVEICovCi0KLSNpZm5kZWYgTk9DU0VUUwotICAgIGV4dGVybiBpbnQgZmNzX3Nh dmUsIHRjc19zYXZlOwotICAgIGV4dGVybiBpbnQgZ194ZnJ4bGEsIHhmcnhsYTsKLSNlbmRpZiAv KiBOT0NTRVRTICovCi0KLS8qIFJlc3RvcmUgLyByZXNldCBwZXItY29tbWFuZCBmaWxlLXRyYW5z ZmVyIHN3aXRjaGVzICovCi0KLSAgICBtYWtlc3RyKCZzbmRfbW92ZSxnX3NuZF9tb3ZlKTsKLSAg ICBtYWtlc3RyKCZyY3ZfbW92ZSxnX3Jjdl9tb3ZlKTsKLSAgICBtYWtlc3RyKCZzbmRfcmVuYW1l LGdfc25kX3JlbmFtZSk7Ci0gICAgbWFrZXN0cigmcmN2X3JlbmFtZSxnX3Jjdl9yZW5hbWUpOwot Ci0gICAga2FjdGl2ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogS2VybWl0IHByb3Rv Y29sIG5vIGxvbmdlciBhY3RpdmUgKi8KLSAgICBvb3B0cyA9IC0xOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBPLVBhY2tldCBPcHRpb25zICovCi0gICAgb21vZGUgPSAtMTsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgVHJhbnNmZXIgTW9kZSAqLwotICAgIG9uYW1lID0g LTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8tUGFja2V0IEZpbGVuYW1lIE9wdGlvbnMg Ki8KLSAgICBvcGF0aCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPLVBhY2tldCBQ YXRobmFtZSBPcHRpb25zICovCi0KLSNpZmRlZiBDS19SRVNFTkQKLSAgICByc19sZW4gPSAwTDsJ CQkvKiBSRUdFVCBwb3NpdGlvbiAqLwotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotCi0jaWZkZWYg Q09NTUVOVAotI2lmZGVmIENLX1NQRUVECi0gICAgaWYgKGZfY3RscCkgewotICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgMjU2OyBpKyspCi0gICAgICAgICAgY3RscFtpXSA9IHNfY3RscFtpXTsKLSAg ICAgICAgZl9jdGxwID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLSNlbmRpZiAv KiBDT01NRU5UICovCi0KLSNpZmRlZiBDS19UTVBESVIKLSAgICBpZiAoZl90bXBkaXIpIHsJCQkv KiBJZiB3ZSBjaGFuZ2VkIHRvIGRvd25sb2FkIGRpciAqLwotCXpjaGRpcigoY2hhciAqKSBzYXZk aXIpOwkvKiBHbyBiYWNrIHdoZXJlIHdlIGNhbWUgZnJvbSAqLwotCWZfdG1wZGlyID0gMDsKLSAg ICB9Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0KLSAgICBjYWxpYnJhdGUgPSAwTDsgICAgICAg ICAgICAgICAgICAgICAvKiBDYWxpYnJhdGlvbiBydW4gKi8KLSAgICBpZiAoeHJlbGlhYmxlID4g LTEpIHsKLQlyZWxpYWJsZSA9IHhyZWxpYWJsZTsKLQlkZWJ1ZyhGMTAxLCJmdHJlc2V0IHJlbGlh YmxlIiwiIixyZWxpYWJsZSk7Ci0gICAgfQotICAgIHVyY2xlYXIgPSAwOwotCi0gICAgaWYgKGF1 dG9wYXRoKSB7ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFJFQ0VJVkUgUEFUSE5BTUVTIEFV VE8gKi8KLSAgICAgICAgZm5ycGF0aCA9IFBBVEhfQVVUTzsKLSAgICAgICAgYXV0b3BhdGggPSAw OwotICAgIH0KLSAgICBpZiAoZmlsZWZpbGUpIHsgICAgICAgICAgICAgICAgICAgICAvKiBGaWxl IGxpc3QgKi8KLSAgICAgICAgemNsb3NlKFpNRklMRSk7Ci0gICAgICAgIG1ha2VzdHIoJmZpbGVm aWxlLE5VTEwpOwotICAgIH0KLSAgICBpZiAoY19zYXZlID4gLTEpIHsgICAgICAgICAgICAgICAg ICAvKiBCbG9jayBDaGVjayBUeXBlICovCi0gICAgICAgIGJjdHIgPSBjX3NhdmU7Ci0gICAgICAg IGNfc2F2ZSA9IC0xOwotICAgIH0KLSAgICBpZiAoc3Nfc2F2ZSA+IC0xKSB7ICAgICAgICAgICAg ICAgICAvKiBTbG93IFN0YXJ0ICovCi0gICAgICAgIHNsb3N0YXJ0ID0gc3Nfc2F2ZTsKLSAgICAg ICAgc3Nfc2F2ZSA9IC0xOwotICAgIH0KLSNpZmRlZiBDS19MQUJFTEVECi0gICAgaWYgKGdfbGZf b3B0cyA+IC0xKSB7Ci0gICAgICAgIGxmX29wdHMgPSBnX2xmX29wdHM7ICAgICAgICAgICAgLyog UmVzdG9yZSBsYWJlbGVkIHRyYW5zZmVyIG9wdGlvbnMgKi8KLSAgICAgICAgZ19sZl9vcHRzID0g LTE7Ci0gICAgfQotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi0g ICAgaWYgKHRjc19zYXZlID4gLTEpIHsgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHNldHMg Ki8KLSAgICAgICAgdGNoYXJzZXQgPSB0Y3Nfc2F2ZTsKLSAgICAgICAgdGNzX3NhdmUgPSAtMTsK LSAgICB9Ci0gICAgaWYgKGZjc19zYXZlID4gLTEpIHsKLSAgICAgICAgZmNoYXJzZXQgPSBmY3Nf c2F2ZTsKLSAgICAgICAgZmNzX3NhdmUgPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfeGZyeGxhID4g LTEpIHsKLQl4ZnJ4bGEgPSBnX3hmcnhsYTsKLQlnX3hmcnhsYSA9IC0xOwotICAgIH0KLSAgICBz ZXR4bGF0eXBlKHRjaGFyc2V0LGZjaGFyc2V0KTsgICAgICAvKiBUcmFuc2xhdGlvbiB0eXBlICov Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZkZWYgTkVUQ09OTgotI2lmbmRlZiBOT1NQTAot ICAgIGlmIChnX3Bzd2QpIHsKLSAgICAgICAgY2tzdHJuY3B5KHB3YnVmLGdfcHN3ZCxQV0JVRkwp OwotICAgICAgICBtYWtlc3RyKCZnX3Bzd2QsTlVMTCk7Ci0gICAgfQotICAgIGlmIChnX3BmbGcg PiAtMSkgewotICAgICAgICBwd2ZsZyA9IGdfcGZsZzsKLSAgICAgICAgZ19wZmxnID0gLTE7Ci0g ICAgfQotICAgIGlmIChnX3BjcHQgPiAtMSkgewotICAgICAgICBwd2NyeXB0ID0gZ19wY3B0Owot ICAgICAgICBnX3BjcHQgPSAtMTsKLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRpZiAv KiBORVRDT05OICovCi0KLSAgICBpZiAoZ19iaW5hcnkgPiAtMSkgeyAgICAgICAgICAgICAgICAv KiBGaWxlIHR5cGUgKi8KLSAgICAgICAgYmluYXJ5ID0gZ19iaW5hcnk7Ci0gICAgICAgIGdfYmlu YXJ5ID0gLTE7Ci0gICAgfQotICAgIGlmIChnX3hmZXJtb2RlID4gLTEpIHsgICAgICAgICAgICAg IC8qIFRyYW5zZmVyIG1vZGUgKi8KLSAgICAgICAgeGZlcm1vZGUgPSBnX3hmZXJtb2RlOwotICAg ICAgICBnX3hmZXJtb2RlID0gLTE7Ci0gICAgfQotI2lmZGVmIFBBVFRFUk5TCi0gICAgaWYgKGdf cGF0dGVybnMgPiAtMSkgeyAgICAgICAgICAgICAgLyogRmlsZW5hbWUgcGF0dGVybnMgKi8KLSAg ICAgICAgcGF0dGVybnMgPSBnX3BhdHRlcm5zOwotICAgICAgICBnX3BhdHRlcm5zID0gLTE7Ci0g ICAgfQotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0KLSAgICBpZiAoZ191c2VwaXBlcyA+IC0xKSB7 Ci0gICAgICAgIHVzZXBpcGVzID0gZ191c2VwaXBlczsKLSAgICAgICAgZ191c2VwaXBlcyA9IC0x OwotICAgIH0KLSAgICBpZiAoZ19tYXRjaGRvdCA+IC0xKSB7Ci0gICAgICAgIG1hdGNoZG90ID0g Z19tYXRjaGRvdDsKLSAgICAgICAgZ19tYXRjaGRvdCA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19w cm90byA+IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBQcm90b2NvbCAqLwotICAgICAgICBwcm90 b2NvbCA9IGdfcHJvdG87Ci0gICAgICAgIGdfcHJvdG8gPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdf dXJwc2l6ID4gLTEpIHsKLSAgICAgICAgdXJwc2l6ID0gZ191cnBzaXo7Ci0gICAgICAgIGRlYnVn KEYxMDEsImZ0cmVzZXQgcmVzdG9yaW5nIHVycHNpeiIsIiIsdXJwc2l6KTsKLSAgICAgICAgZ191 cnBzaXogPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfc3BzaXpmID4gLTEpIHsKLSAgICAgICAgc3Bz aXpmID0gZ19zcHNpemY7Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0cmVzZXQgcmVzdG9yaW5nIHNw c2l6ZiIsIiIsc3BzaXpmKTsKLSAgICAgICAgZ19zcHNpemYgPSAtMTsKLSAgICB9Ci0gICAgaWYg KGdfc3BzaXogPiAtMSkgewotICAgICAgICBzcHNpeiA9IGdfc3BzaXo7Ci0gICAgICAgIGRlYnVn KEYxMDEsImZ0cmVzZXQgcmVzdG9yaW5nIHNwc2l6IiwiIixzcHNpeik7Ci0gICAgICAgIGdfc3Bz aXogPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfc3BzaXpyID4gLTEpIHsKLSAgICAgICAgc3BzaXpy ID0gZ19zcHNpenI7Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0cmVzZXQgcmVzdG9yaW5nIHNwc2l6 ciIsIiIsc3BzaXpyKTsKLSAgICAgICAgZ19zcHNpenIgPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdf c3BtYXggPiAtMSkgewotICAgICAgICBzcG1heCA9IGdfc3BtYXg7Ci0gICAgICAgIGdfc3BtYXgg PSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfd3Nsb3RyID4gLTEpIHsKLSAgICAgICAgd3Nsb3RyID0g Z193c2xvdHI7Ci0gICAgICAgIGdfd3Nsb3RyID0gLTE7Ci0gICAgfQotICAgIGlmIChnX3ByZWZp eGluZyA+IC0xKSB7Ci0gICAgICAgIHByZWZpeGluZyA9IGdfcHJlZml4aW5nOwotICAgICAgICBn X3ByZWZpeGluZyA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19mbmNhY3QgPiAtMSkgewotICAgICAg ICBmbmNhY3QgPSBnX2ZuY2FjdDsKLSAgICAgICAgZ19mbmNhY3QgPSAtMTsKLSAgICB9Ci0gICAg aWYgKGdfZm5jbnYgPiAtMSkgewotICAgICAgICBmbmNudiA9IGdfZm5jbnY7Ci0gICAgICAgIGdf Zm5jbnYgPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfZm5zcGF0aCA+IC0xKSB7Ci0gICAgICAgIGZu c3BhdGggPSBnX2Zuc3BhdGg7Ci0gICAgICAgIGdfZm5zcGF0aCA9IC0xOwotICAgIH0KLSAgICBp ZiAoZ19mbnJwYXRoID4gLTEpIHsKLSAgICAgICAgZm5ycGF0aCA9IGdfZm5ycGF0aDsKLSAgICAg ICAgZ19mbnJwYXRoID0gLTE7Ci0gICAgfQotICAgIGlmIChnX3NraXBidXAgPiAtMSkgewotICAg ICAgICBza2lwYnVwID0gZ19za2lwYnVwOwotICAgICAgICBnX3NraXBidXAgPSAtMTsKLSAgICB9 Ci0gICAgbm9saW5rcyA9IDI7CQkJLyogL0ZPTExPV0xJTktTIGlzIG5ldmVyIGdsb2JhbCAqLwot ICAgIHJlY3Vyc2l2ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIC9SRUNVUlNJVkUgY2Fu IG5ldmVyIGJlIGdsb2JhbCAqLwotICAgIHhmaWxldHlwZSA9IC0xOwotCi0gICAgaWYgKGdfZGlz cGxhID4gLTEpIHsgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBkaXNwbGF5ICovCi0g ICAgICAgIGZkaXNwbGEgPSBnX2Rpc3BsYTsKLSAgICAgICAgZ19kaXNwbGEgPSAtMTsKLSAgICB9 Ci0gICAgaWYgKGdfc3BhdGggPiAtMSkgeyAgICAgICAgICAgICAgICAgLyogU2VuZCBwYXRobmFt ZXMgKi8KLSAgICAgICAgZm5zcGF0aCA9IGdfc3BhdGg7Ci0gICAgICAgIGdfc3BhdGggPSAtMTsK LSAgICB9Ci0gICAgaWYgKGdfcnBhdGggPiAtMSkgeyAgICAgICAgICAgICAgICAgLyogUmVjZWl2 ZSBwYXRobmFtZXMgKi8KLSAgICAgICAgZm5ycGF0aCA9IGdfcnBhdGg7Ci0gICAgICAgIGdfcnBh dGggPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfZm5jbnYgPiAtMSkgeyAgICAgICAgICAgICAgICAg LyogRmlsZW5hbWUgY29udmVyc2lvbiAqLwotICAgICAgICBmbmNudiA9IGdfZm5jbnY7Ci0gICAg ICAgIGdfZm5jbnYgPSAtMTsKLSAgICB9Ci0jaWZkZWYgUElQRVNFTkQKLSAgICBtYWtlc3RyKCZz bmRmaWx0ZXIsZ19zZmlsdGVyKTsgICAgICAvKiBTZW5kIGZpbHRlciAqLwotICAgIG1ha2VzdHIo JnJjdmZpbHRlcixnX3JmaWx0ZXIpOyAgICAgIC8qIFJlY2VpdmUgZmlsdGVyICovCi0jZW5kaWYg LyogUElQRVNFTkQgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotICAgIHJtYWlsZiA9IHJwcmludGYg PSAwOyAgICAgICAgICAgICAgIC8qIE1BSUwgYW5kIFBSSU5UIG1vZGlmaWVycyBmb3IgU0VORCAq LwotICAgIG9wdGJ1ZlswXSA9IE5VTDsgICAgICAgICAgICAgICAgICAgIC8qIE1BSUwgYW5kIFBS SU5UIG9wdGlvbnMgKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0gICAgbW92aW5nID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgZGVsZXRlLWFmdGVyLXNlbmQgaW5kaWNh dG9yICovCi0gICAgc25kYWZ0ZXJbMF0gID0gTlVMOyAgICAgICAgICAgICAgICAgLyogUmVzZXQg U0VORCBzZWxlY3Rpb24gc3dpdGNoZXMgKi8KLSAgICBzbmRiZWZvcmVbMF0gPSBOVUw7Ci0KLSAg ICBmb3IgKGkgPSAwOyBpIDwgTlNOREVYQ0VQVDsgaSsrKSB7Ci0gICAgICAgIGlmIChzbmRleGNl cHRbaV0pCi0gICAgICAgICAgZnJlZShzbmRleGNlcHRbaV0pOwotICAgICAgICBzbmRleGNlcHRb aV0gPSBOVUxMOwotICAgICAgICBpZiAocmN2ZXhjZXB0W2ldKQotICAgICAgICAgIGZyZWUocmN2 ZXhjZXB0W2ldKTsKLSAgICAgICAgcmN2ZXhjZXB0W2ldID0gTlVMTDsKLSAgICB9Ci0gICAgc25k bGFyZ2VyID0gIChDS19PRkZfVCktMTsKLSAgICBzbmRzbWFsbGVyID0gKENLX09GRl9UKS0xOwot ICAgIGRlYnVnKEYxMDEsInByZXNlbnQgc25kc21hbGxlciIsIiIsc25kc21hbGxlcik7Ci0jaWZk ZWYgR0ZUSU1FUgotICAgIGd0diA9IC0xLjA7Ci0gICAgb2xkZ3R2ID0gLTEuMDsKLSNlbHNlCi0g ICAgZ3R2ID0gLTFMOwotICAgIG9sZGd0diA9IC0xTDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0j ZW5kaWYgLyogTk9JQ1AgKi8KLX0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotY2hhciAqCi10dGd0 cG4oKSB7CQkJCS8qIEdldCB0eXBpY2FsIHBvcnQgbmFtZSAqLwotLyoKLSAgSWRlYWxseSB0aGlz IHJvdXRpbmUgd291bGQgYmUgaW1wbGVtZW50ZWQgaW4gZWFjaCBvZiB0aGUgY2t1P2lvLiogbW9k dWxlcywKLSAgYnV0IHRoYXQgcmVxdWlyZXMgY2hhbmdpbmcgdGhlIEFQSSBkZWZpbml0aW9uLgot Ki8KLSAgICByZXR1cm4oCi0jaWZkZWYgT1MyCi0jaWZkZWYgT1MyT05MWQotIkNPTTEiCi0jZWxz ZSAgLyogT1MyT05MWSAqLwotIlRBUEkgWyBuYW1lIF0gb3IgQ09NMSIKLSNlbmRpZiAvKiBPUzJP TkxZICovCi0jZWxzZSAgLyogT1MyICovCi0jaWZkZWYgVk1TCi0iVFhBMDosIFRUQTA6LCBvciBM VEEwOiIKLSNlbHNlICAvKiBWTVMgKi8KLSNpZmRlZiBTT0xBUklTCi0iL2Rldi9jdWEvYSIKLSNl bHNlICAvKiBTT0xBUklTICovCi0jaWZkZWYgSFBVWDEwCi0iL2Rldi9jdWEwcDAiCi0jZWxzZSAg LyogSFBVWDEwICovCi0jaWZkZWYgSFBVWAotIi9kZXYvY3VhMDAiCi0jZWxzZSAgLyogSFBVWCAq LwotI2lmZGVmIF9fRnJlZUJTRF9fCi0iL2Rldi9jdWFhMCIKLSNlbHNlICAvKiBfX0ZyZWVCU0Rf XyAqLwotI2lmZGVmIF9fbGludXhfXwotIi9kZXYvdHR5UzAiCi0jZWxzZSAgLyogX19saW51eF9f ICovCi0jaWZkZWYgQlNENDQKLSIvZGV2L3R0eTAwIgotI2Vsc2UgIC8qIEJTRDQ0ICovCi0jaWZk ZWYgT1NLCi0iL3QxIgotI2Vsc2UgIC8qIE9TSyAqLwotI2lmZGVmIFFOWAotIi9kZXYvc2VyMSIK LSNlbHNlICAvKiBRTlggKi8KLSNpZmRlZiBRTlg2Ci0iL2Rldi9zZXIxIgotI2Vsc2UgIC8qIFFO WDYgKi8KLSNpZmRlZiBVTklYV0FSRQotIi9kZXYvdGVybS8wMCBvciAvZGV2L3R0eTAwIgotI2Vs c2UgIC8qIFVOSVhXQVJFICovCi0jaWZkZWYgQ0tfU0NPVjUKLSIvZGV2L3R0eTFBIgotI2Vsc2Ug IC8qIENLX1NDT1Y1ICovCi0jaWZkZWYgQ0tfU0NPMzJWNAotIi9kZXYvdHR5MUEiCi0jZWxzZSAg LyogQ0tfU0NPMzJWNCAqLwotI2lmZGVmIE1fWEVOSVgKLSIvZGV2L3R0eTFBIgotI2Vsc2UgIC8q IE1fWEVOSVggKi8KLSNpZmRlZiBBSVhSUwotIi9kZXYvdHR5MCIKLSNlbHNlICAvKiBBSVhSUyAq LwotI2lmZGVmIERHVVgKLSIvZGV2L3R0eTAwIgotI2Vsc2UgIC8qIERHVVggKi8KLSNpZmRlZiBk YXRhZ2VuZXJhbAotIkBjb24xIgotI2Vsc2UgIC8qIGRhdGFnZW5lcmFsICovCi0jaWZkZWYgSVJJ WAotIi9kZXYvdHR5bTAiCi0jZWxzZSAgLyogSVJJWCAqLwotI2lmZGVmIFNVTk9TNAotIi9kZXYv dHR5aDAiCi0jZWxzZSAgLyogU1VOT1M0ICovCi0jaWZkZWYgU1Y2OFIzVjYKLSIvZGV2L3NjYzAi Ci0jZWxzZSAgLyogU1Y2OFIzVjYgKi8KLSNpZmRlZiBNT1RTVjg4UjQKLSIvZGV2L2NvbnR0eTAw IgotI2Vsc2UgIC8qIE1PVFNWODhSNCAqLwotI2lmZGVmIE5FWFQKLSIvZGV2L2N1ZmEiCi0jZWxz ZQotI2lmZGVmIE9TRgotIi9kZXYvdHR5ZDEiCi0jZWxzZQotI2lmZGVmIFNJTklYCi0iL2Rldi90 dHljMSIKLSNlbHNlCi0jaWZkZWYgVU5JWAotIi9kZXYvY3VhLCAvZGV2L2FjdSwgL2Rldi90dHkw LCBldGMiCi0jZWxzZSAgLyogVU5JWCAqLwotIihzb3JyeSBubyBleGFtcGxlIGF2YWlsYWJsZSki Ci0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIFNJTklYICovCi0jZW5kaWYgLyogT1NGICov Ci0jZW5kaWYgLyogTkVYVCAqLwotI2VuZGlmIC8qIE1PVFNWODhSNCAqLwotI2VuZGlmIC8qIFNW NjhSM1Y2ICovCi0jZW5kaWYgLyogU1VOT1M0ICovCi0jZW5kaWYgLyogSVJJWCAqLwotI2VuZGlm IC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogREdVWCAqLwotI2VuZGlmIC8qIEFJWCAqLwot I2VuZGlmIC8qIE1fWEVOSVggKi8KLSNlbmRpZiAvKiBDS19TQ08zMlY0ICovCi0jZW5kaWYgLyog Q0tfU0NPVjUgKi8KLSNlbmRpZiAvKiBVTklYV0FSRSAqLwotI2VuZGlmIC8qIFFOWDYgKi8KLSNl bmRpZiAvKiBRTlggKi8KLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2Vu ZGlmIC8qIF9fbGludXhfXyAqLwotI2VuZGlmIC8qIF9fRnJlZUJTRF9fICovCi0jZW5kaWYgLyog SFBVWCAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNlbmRp ZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQkgICApOwotfQotCi0vKiAgQyBLIF8gRSBS IFIgUyBUIFIgIC0tICBSZXR1cm4gbWVzc2FnZSBmcm9tIG1vc3QgcmVjZW50IHN5c3RlbSBlcnJv ciAqLwotCi0jaWZkZWYgQ0tST09UCi1leHRlcm4gaW50IGNrcm9vdGVycjsKLSNlbmRpZiAvKiBD S1JPT1QgKi8KLQotY2hhciAqCi1ja19lcnJzdHIoKSB7Ci0jaWZkZWYgVVNFX1NUUkVSUk9SCi0j aWZuZGVmIENLX0FOU0lMSUJTCi0gICAgLyogU2hvdWxkIGhhdmUgYmVlbiBkZWNsYXJlZCBpbiA8 c3RyaW5nLmg+ICovCi1fUFJPVE9UWVAoIGNoYXIgKiBzdHJlcnJvciwgKGludCkgKTsKLSNlbmRp ZiAvKiBDS19BTlNJTElCUyAqLwotI2lmZGVmIENLUk9PVAotICAgIGlmIChja3Jvb3RlcnIpCi0g ICAgICByZXR1cm4oIk9mZiBsaW1pdHMiKTsKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAgICByZXR1 cm4oc3RyZXJyb3IoZXJybm8pKTsKLSNlbHNlICAvKiAhVVNFX1NUUkVSUk9SICovCi0jaWZkZWYg Vk1TCi0gICAgZXh0ZXJuIGNoYXIgKiBja3Ztc2VycnN0cih1bnNpZ25lZCBsb25nKTsKLSNpZmRl ZiBDS1JPT1QKLSAgICBpZiAoY2tyb290ZXJyKQotICAgICAgcmV0dXJuKCJPZmYgbGltaXRzIik7 Ci0jZW5kaWYgLyogQ0tST09UICovCi0gICAgcmV0dXJuKGNrdm1zZXJyc3RyKDBMKSk7Ci0jZWxz ZSAgLyogIVZNUyAqLwotI2lmZGVmIEJTRDQ0Ci0jaWZkZWYgX18zODZCU0RfXwotI2lmbmRlZiBO RFNZU0VSUkxJU1QKLSAgICBleHRlcm4gaW50IHN5c19uZXJyOwotICAgIGV4dGVybiBjaGFyICpz eXNfZXJybGlzdFtdOwotI2VuZGlmIC8qIE5EU1lTRVJSTElTVCAqLwotI2Vsc2UgIC8qICFfXzM4 NkJTRF9fICovCi0jaWZuZGVmIF9fYnNkaV9fCi0jaWZuZGVmIE5EU1lTRVJSTElTVAotICAgIGV4 dGVybiBpbnQgc3lzX25lcnI7Ci0gICAgZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IHN5c19lcnJs aXN0W107Ci0jZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCi0jZW5kaWYgLyogX19ic2RpX18gKi8K LSNlbmRpZiAvKiBfXzM4NkJTRF9fICovCi0jaWZkZWYgQ0tST09UCi0gICAgaWYgKGNrcm9vdGVy cikKLSAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOwotICAgIGVsc2UKLSNlbmRpZiAvKiBDS1JP T1QgKi8KLSAgICBpZiAoZXJybm8gPj0gc3lzX25lcnIpCi0gICAgICByZXR1cm4oIkVycm9yIG51 bWJlciBvdXQgb2YgcmFuZ2UiKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oKGNoYXIgKikgc3lz X2Vycmxpc3RbZXJybm9dKTsKLSNlbHNlIC8qICFCU0Q0NCAqLwotI2lmZGVmIEFUVFNWCi0jaWZu ZGVmIE5EU1lTRVJSTElTVAotICAgIGV4dGVybiBpbnQgc3lzX25lcnI7Ci0gICAgZXh0ZXJuIGNo YXIgKnN5c19lcnJsaXN0W107Ci0jZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCi0jaWZkZWYgQ0tS T09UCi0gICAgaWYgKGNrcm9vdGVycikKLSAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOwotICAg IGVsc2UKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAgICBpZiAoZXJybm8gPj0gc3lzX25lcnIpCi0g ICAgICByZXR1cm4oIkVycm9yIG51bWJlciBvdXQgb2YgcmFuZ2UiKTsKLSAgICBlbHNlCi0gICAg ICByZXR1cm4oKGNoYXIgKikgc3lzX2Vycmxpc3RbZXJybm9dKTsKLSNlbHNlIC8qICFBVFRTViAq LwotI2lmZGVmIEJTRDQKLSNpZm5kZWYgTkRTWVNFUlJMSVNUCi0gICAgZXh0ZXJuIGludCBzeXNf bmVycjsKLSAgICBleHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKLSNlbmRpZiAvKiBORFNZU0VS UkxJU1QgKi8KLSNpZmRlZiBDS1JPT1QKLSAgICBpZiAoY2tyb290ZXJyKQotICAgICAgcmV0dXJu KCJPZmYgbGltaXRzIik7Ci0gICAgZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwotICAgIGlmIChl cnJubyA+PSBzeXNfbmVycikKLSAgICAgIHJldHVybigiRXJyb3IgbnVtYmVyIG91dCBvZiByYW5n ZSIpOwotICAgIGVsc2UKLSAgICAgIHJldHVybigoY2hhciAqKSBzeXNfZXJybGlzdFtlcnJub10p OwotI2Vsc2UKLSNpZmRlZiBPUzIKLSNpZm5kZWYgTkRTWVNFUlJMSVNUCi0gICAgZXh0ZXJuIGNo YXIgKnN5c19lcnJsaXN0W107Ci0jZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCi0jaWZkZWYgTlQK LSAgICBleHRlcm4gaW50X3N5c19uZXJyOwotI2VuZGlmIC8qIE5UICovCi0gICAgY2hhciAqZTsK LSNpZmRlZiBDS1JPT1QKLSAgICBpZiAoY2tyb290ZXJyKQotICAgICAgcmV0dXJuKCJPZmYgbGlt aXRzIik7Ci0jZW5kaWYgLyogQ0tST09UICovCi0gICAgZSA9IChlcnJubyA+IC0xCi0jaWZkZWYg TlQKLSAgICAgICAgICYmIGVycm5vIDw9IF9zeXNfbmVycgotI2VuZGlmIC8qIE5UICovCi0gICAg ICAgICApID8KLSNpZmRlZiBOVAotICAgICAgICAgKGNoYXIgKikgc3lzX2Vycmxpc3RbZXJybm9d Ci0jZWxzZSAvKiBOVCAqLwotICAgICAgICAgLyogSSBkb24ndCBrbm93IGhvdyB0byBnZXQgYSBD TElCIGVycm9yIHN0cmluZyBpbiBPUy8yICovCi0gICAgICAgICBzdHJlcnJvcihlcnJubykKLSNl bmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgIDogIiI7Ci0gICAgcmV0dXJuKGUgPyBlIDogIiIp OwotI2Vsc2UgLyogT1MyICovCi0gICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNl bmRpZiAvKiBCU0Q0ICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwot I2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVTRV9TVFJFUlJPUiAqLwotfQotCi0jaWZkZWYg UEFUVEVSTlMKLS8qCi0gIEZpbGVuYW1lIHBhdHRlcm4gcmVjb2duaXRpb24gbGlzdHMgZm9yIGF1 dG9tYXRpYyB0ZXh0L2JpbmFyeSBzd2l0Y2hpbmcuCi0gIFRoZXNlIGFyZSBzb21ld2hhdCBwYXNz ZSBhZnRlciB0aGUgYWRkaXRpb24gb2Ygc2NhbmZpbGUoKSAgKDcuMCkuCi0gIEJ1dCB3aXRoIHRo ZSBhZGRpdGlvbiBvZiBGVFAgW01dR0VULCB0aGV5J3JlIGJhY2sgaW4gc3R5bGUgKDguMCkuCi0K LSAgQWx0aG91Z2gsIHdpdGggRlRQIHRoZSBsaXN0cyBuZWVkIHRvIGJlIHVzZWQgaW4gdGhlIHJl dmVyc2UuICBXaXRoCi0gIEtlcm1pdCB0aGUgbGlzdCBpcyB1c2VkIHRvIGltcGx5IHRoZSB0eXBl cyBvZiB0aGUgbG9jYWwgc3lzdGVtLiAgV2hlcmVhcwotICB3aXRoIEZUUCwgdGhlIGxpc3QgbXVz dCBiZSB1c2VkIHRvIGltcGx5IHRoZSB0eXBlIG9mIHRoZSByZW1vdGUgc3lzdGVtLgotICBUaGVy ZWZvcmUsIGFsbCBwbGF0Zm9ybXMgbXVzdCBub3cgc3VwcG9ydCBhbGwgb2YgdGhlIGxpc3RzLgot Ki8KLWNoYXIgKnR4dHBhdHRlcm5zW0ZUUEFUVEVSTlMrMV0gPSB7IE5VTEwsIE5VTEwgfTsKLWNo YXIgKmJpbnBhdHRlcm5zW0ZUUEFUVEVSTlMrMV0gPSB7IE5VTEwsIE5VTEwgfTsKLS8qCi0gIERl ZmF1bHQgcGF0dGVybiBsaXN0cyBmb3IgZWFjaCBwbGF0Zm9ybS4uLgotCi0gIE5PVEU6IEluIG1v c3QgY2FzZXMgd2UgbGVhdmUgIi5obHAiLCAiLmluaSIsIGFuZCAiLnNjciIgYWxvbmU7IGFsdGhv dWdoIHRoZXkKLSAgYXJlIHRyYWRpdGlvbmFsbHkgdGV4dCB0eXBlcywgdGhleSBhcmUgYmluYXJ5 IGluIFdpbmRvd3MuICBTbyB0aGV5IGFyZQotICBoYW5kbGVkIGJ5IHRoZSBwcmV2YWlsaW5nIFNF VCBGSUxFIFRZUEUsIHJhdGhlciB0aGFuIGF1dG9tYXRpY2FsbHkuCi0gIFNpbWlsYXJseSBmb3Ig Ii5kYXQiLCAiLmluZiIsIGFuZCBzbyBvbi4gIEFsc28gIi5wcyIgc2luY2UgUG9zdFNjcmlwdCBm aWxlcwotICBhcmUgbm90IGFsd2F5cyB0ZXh0LiAgIi5sb2ciIGlzIG9taXR0ZWQgc2luY2UgbG9n cyBjYW4gYmUgdGV4dCBvciBiaW5hcnksCi0gIGV4Y2VwdCBpbiBWTVMgdGhleSBhcmUgdXN1YWxs eSB0ZXh0LCBldGMgZXRjLgotCi0gIExhdGVyIChTZXAgMjAwMyk6IEFkZCBQb3N0U2NyaXB0IHRv IGJpbmFyeSBwYXR0ZXJucy4KLSovCi1zdGF0aWMgY2hhciAqdHh0cFtTWVNfTUFYXVtGVFBBVFRF Uk5TXSA9IHsKLSAgICAvKiBVTktOT1dOICovIHsKLQlOVUxMLCBOVUxMCi0gICAgfSwKLSAgICB7 CQkJCQkvKiBVTklYICovCi0gICAgIioudHh0IiwiKi5jIiwiKi5oIiwiKi5yIiwiKi53IiwiKi5j cHAiLCIqLmNjIiwiKi5rc2MiLCIqLmJ3ciIsIioudXBkIiwKLSAgICAiKi5odG1sIiwiKi5odG0i LCIqLm1zcyIsIioudGV4IiwiKi5uciIsIltNbV1ha2VmaWxlIiwgIiouaGV4IiwgIiouaHF4IiwK LSAgICAiKi5mb3IiLCIqLmY3NyIsIiouZiIsIiouRiIsIioucyIsIioucGFzIiwiKi5qYXZhIiwi Ki5lbCIsIioubGlzcCIsIiouc2giLAotICAgICIqLm00IiwiKi5wZXJsIiwiKi5wbCIsIioucG9k IiwiKi5wbSIsIiouYXdrIiwiKi5zbm8iLCIqLnNwdCIsIiouc2VkIiwKLSAgICAiKi5rc2MiLCIq LlRYVCIsICIqcmVhZC5tZSIsICIqUkVBRC5NRSIsICIuKiIsICIqLy4qIiwgIioubWVtIiwiKi5t YWMiLAotICAgIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIFdJTjMyICovCi0gICAgIioudHh0 IiwiKi5rc2MiLCIqLmh0bSIsIiouaHRtbCIsIiouYmF0IiwiKi5jbWQiLCIqLmphdiIsIiouYXNt IiwgIiouaGV4IiwKLSAgICAiKi5ocXgiLCAiKi5jIiwgIiouaCIsICIqLmNwcCIsICIqLmhwcCIs ICIqLmN4eCIsICIqLmN4eCIsICIqLnciLAotICAgICIqLmphdmEiLCAiKi5id3IiLCAiKi51cGQi LCAiKi5tYWsiLCAicmVhZC5tZSIsICIqLm1hcCIsICJtYWtlZmlsZSIsCi0gICAgIioubWVtIiwi Ki5tYWMiLCIqLmNjIiwiKi5wbCIsIioucG9kIiwiKi5wbSIsIioubTQiLE5VTEwKLSAgICB9LAot ICAgIHsJCQkJCS8qIFZNUyAqLwotICAgICIqLmNvbSIsIioudHh0IiwiKi5jIiwgICIqLmZvciIs IioucGFzIiwiKi5ybm8iLCIqLnJuaCIsIioubWFyIiwiKi5ibGkiLAotICAgICIqLmhscCIsIiou bXNzIiwiKi5kb2MiLCIqLmJ3ciIsIiouY2xkIiwiKi5oZXgiLCIqLmJhcyIsIiouaW5pIiwiKi5s b2ciLAotICAgICIqLm1tcyIsIioub3B0IiwiKi5rc2MiLCIqLnBlcmwiLCIqLnBsIiwiKi5wb2Qi LCIqLnBtIiwiKi5zbm8iLCIqLnNwdCIsCi0gICAgIioubWVtIixOVUxMCi0gICAgfSwKLSAgICB7 CQkJCQkvKiBPUzIgKi8KLSAgICAiKi50eHQiLCIqLmtzYyIsIiouaHRtIiwiKi5odG1sIiwiKi5i YXQiLCIqLmNtZCIsIiouamF2IiwiKi5hc20iLCAiKi5oZXgiLAotICAgICIqLmhxeCIsICIqLmMi LCAiKi5oIiwgIiouY3BwIiwgIiouaHBwIiwgIiouY3h4IiwgIiouY3h4IiwgIioudyIsCi0gICAg IiouamF2YSIsICIqLmJ3ciIsICIqLnVwZCIsICIqLm1hayIsICJyZWFkLm1lIiwgIioubWFwIiwg Im1ha2VmaWxlIiwKLSAgICBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBET1MgKi8KLSAgICAi Ki50eHQiLCIqLmtzYyIsIiouaHRtIiwiKi5iYXQiLCIqLmNtZCIsIiouamF2IiwiKi5hc20iLCAi Ki5oZXgiLAotICAgICIqLmhxeCIsICIqLmMiLCAiKi5oIiwgIiouY3BwIiwgIiouaHBwIiwgIiou Y3h4IiwgIiouY3h4IiwgIioudyIsCi0gICAgIiouYndyIiwgIioudXBkIiwgIioubWFrIiwgInJl YWQubWUiLCAiKi5tYXAiLCAibWFrZWZpbGUiLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBU T1BTLTEwICovCi0gICAgIiouY21kIiwiKi5obHAiLCIqLmRvYyIsIiouaW5pIiwiKi50eHQiLCIq Lm1hYyIsIiouZm9yIiwiKi5zYWkiLCIqLmJsaSIsCi0gICAgIioucGFzIiwiKi5zbm8iLCIqLnNw dCIsIioucGNsIiwiKi5tc3MiLCIqLnJubyIsIiouYjM2IiwiKi50ZXgiLCIqLnB1YiIsCi0gICAg IioucmVxIiwiKi5yMzYiLCIqLm1lbSIsIiouYndyIiwiKi5jY2wiLCIqLmN0bCIsIioucm5oIiwi Ki5rc2MiLE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIFRPUFMtMjAgKi8KLSAgICAiKi5jbWQi LCIqLmhscCIsIiouZG9jIiwiKi5pbmkiLCIqLnR4dCIsIioubWFjIiwiKi5mb3IiLCIqLnNhaSIs IiouYmxpIiwKLSAgICAiKi5wYXMiLCIqLnNubyIsIiouc3B0IiwiKi5wY2wiLCIqLm1zcyIsIiou cm5vIiwiKi5iMzYiLCIqLnRleCIsIioucHViIiwKLSAgICAiKi5yZXEiLCIqLnIzNiIsIioubWVt IiwiKi5id3IiLCIqLmNjbCIsIiouY3RsIiwiKi5ybmgiLCIqLmtzYyIsTlVMTAotICAgIH0sCi0g ICAgewkJCQkJLyogU1RSQVRVUyBWT1MgKi8KLSAgICAiKi50eHQiLCIqLmtzYyIsIiouaHRtIiwi Ki5odG1sIiwiKi5iYXQiLCAiKi5jbWQiLCIqLmphdiIsIiouYXNtIiwiKi5oZXgiLAotICAgICIq LmhxeCIsIiouYyIsICAiKi5oIiwgICIqLnciLCAgICIqLmphdmEiLCIqLmJ3ciIsIioudXBkIiwi Ki50dHAiLCIqLmNtIiwKLSAgICAiKi5wbDEiLCIqLmVtYWNzIiwgInJlYWQubWUiLCAiKi5wbCIs ICJtYWtlZmlsZSIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIERHIEFPUy9WUyAqLwotICAg ICIqLnR4dCIsICIqLmMiLCAiKi5oIiwgIioudyIsICIqLmVyIiwgIiouYndyIiwgIioudXBkIiwg InJlYWQubWUiLAotICAgICIqLmNsaSIsICIqLmtzYyIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJ CS8qIE9TSyAqLwotICAgICIqLmMiLCIqLmNwcCIsIiouaCIsIiouYSIsIipha2VmaWxlIiwgLyog cHJvZ3JhbSBzb3VyY2VzICovCi0gICAgIiouZm9yIiwiKi5mNzciLCIqLmYiLCIqLkYiLCIqLnMi LCIqLnBhcyIsIiouamF2YSIsIiouZWwiLCIqLmxpc3AiLAotICAgICIqLnNoIiwiKi5wZXJsIiwi Ki5hd2siLCIqLnNubyIsIiouc3B0IiwiKi5zZWQiLAotICAgICIqLnR4dCIsIioudyIsCQkJLyog Z2VuZXJhbCB0ZXh0ICovCi0gICAgIioua3NjIiwiKi5id3IiLCIqLnVwZCIsCi0gICAgIiouaHRt bCIsIiouaHRtIiwiKi5tc3MiLCIqLnRleCIsIioubnIiLCIqLmhleCIsICIqLmhxeCIsCi0gICAg IiouVFhUIiwgIipyZWFkLm1lIiwgIipSRUFELk1FIiwgIi4qIiwgIiovLioiLAotICAgIE5VTEwK LSAgICB9Ci19OwotCi0vKiBOb3RlOiAuRE9DIGFkZGVkIHRvIChzb21lKSBiaW5hcnkgcGF0dGVy bnMgSnVuZSAxOTk4Li4uIE1pY3Jvc29mdCB3aW5zLiAqLwotCi1zdGF0aWMgY2hhciAqYmlucFtT WVNfTUFYXVtGVFBBVFRFUk5TXSA9IHsKLSAgICB7CQkJCQkvKiBVTktOT1dOICovCi0gICAgTlVM TCwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogVU5JWCAqLwotICAgICIqLmd6IiwiKi5aIiwi Ki50Z3oiLCIqLmdpZiIsICIqLnRhciIsIiouemlwIiwiKi5vIiwiKi5zbyIsIiouYSIsIioub3V0 IiwKLSAgICAiKi5leGUiLCAiKi5qcGciLCAiKi5qcGVnIiwgIioudGlmIiwiKi50aWZmIiwgIiou cGRmIiwgIiouc28uKiIsICIqLmNsYXNzIiwKLSAgICAiKi5ycG0iLCAiKi5ibXAiLCAiKi5iejIi LCAiKi5CTVAiLCAiKi5kbGwiLCAiKi5kb2MiLCAiKi52eGQiLCAiKi5kY3giLAotICAgICIqLnhs KiIsICIqLmx6aCIsICIqLmxoeiIsICIqLmF1IiwgIioudm9jIiwgIioubXBnIiwgIioubXBlZyIs Ilt3a11lcm1pdCIsCi0gICAgIioucHMiLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBXSU4z MiAqLwotICAgICIqLmV4ZSIsICIqLnppcCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIsICIq LmpwZyIsICIqLndhdiIsICIqLnJhbSIsCi0gICAgIiouY2xhc3MiLCIqLmNsYSIsIiouZGxsIiwg IiouZHJ2IiwgIioub2N4IiwgIioudmJ4IiwgIioubGliIiwgIiouaWNvIiwKLSAgICAiKi5ibXAi LCAiKi50aWYiLCAiKi50YXIiLCAiKi5neiIsICAiKi50Z3oiLCAiKi54bCoiLCAiKi5kb2MiLCAi Ki52eGQiLAotICAgICIqLnBkZiIsICIqLmx6aCIsICIqLnZ4ZCIsICIqLnNuZCIsICIqLmF1Iiwg IiogLnZvYyIsICIqLm1wZyIsICIqLm1wZWciLAotICAgICIqLnBzIiwgTlVMTAotICAgIH0sCi0g ICAgewkJCQkJLyogVk1TICovCi0gICAgIiouZXhlIiwiKi5vYmoiLCIqLmJhayIsIiouYmluIiwi Ki5hZGYiLCIqLnN0YiIsIioubWFpIiwiKi5zeXMiLCIqLmRtcCIsCi0gICAgIioucHMiLCAiKi5k YXQiLCIqLnBhciIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIE9TMiAqLwotICAgICIqLmV4 ZSIsICIqLnppcCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIsICIqLmpwZyIsICIqLndhdiIs ICIqLnJhbSIsCi0gICAgIiouY2xhc3MiLCAiKi5jbGEiLCAiKi5kbGwiLCAiKi5kcnYiLCAiKi5v Y3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28iLAotICAgICIqLmJtcCIsICIqLnRpZiIsICIq LnRhciIsICIqLmd6IiwgIioudGd6IiwgIioueGwqIiwgIiouZG9jIiwgIioudnhkIiwKLSAgICAi Ki5wZGYiLCAiKi5wcyIsICIqLmx6aCIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIERPUyAq LwotICAgICIqLmV4ZSIsICIqLnppcCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIsICIqLmpw ZyIsICIqLndhdiIsICIqLnJhbSIsCi0gICAgIiouY2xhIiwgIiouZGxsIiwgIiouZHJ2IiwgIiou b2N4IiwgIioudmJ4IiwgIioubGliIiwgIiouaWNvIiwKLSAgICAiKi5ibXAiLCAiKi50aWYiLCAi Ki50YXIiLCAiKi5neiIsICIqLnRneiIsICIqLnhsKiIsICIqLmRvYyIsICIqLnZ4ZCIsCi0gICAg IioucGRmIiwgIioucHMiLCAiKi5semgiLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBUT1BT MTAgKi8KLSAgICAiKi5leGUiLCIqLnNhdiIsIiouYmluIiwiKi5yaW0iLCIqLnJlbCIsIioudW52 IiwiKi5saWIiLCIqLnRhcCIsIiouZHZpIiwKLSAgICAiKi5wcyIsIE5VTEwKLSAgICB9LAotICAg IHsJCQkJCS8qIFRPUFMyMCAqLwotICAgICIqLmV4ZSIsIiouc2F2IiwiKi5iaW4iLCIqLnJpbSIs IioucmVsIiwiKi51bnYiLCIqLmxpYiIsIioudGFwIiwiKi5kdmkiLAotICAgICIqLnBzIiwgTlVM TAotICAgIH0sCi0gICAgewkJCQkJLyogU1RSQVRVUyBWT1MgKi8KLSAgICAiKi5leGUiLCAiKi56 aXAiLCAiKi5vYmoiLCAiKi5jb20iLCAiKi5naWYiLCAiKi5qcGciLCAiKi53YXYiLCAiKi5yYW0i LAotICAgICIqLmNsYXNzIiwgIiouY2xhIiwgIiouZGxsIiwgIiouZHJ2IiwgIioub2N4IiwgIiou dmJ4IiwgIioubGliIiwgIiouaWNvIiwKLSAgICAiKi5ibXAiLCAiKi50aWYiLCAiKi50YXIiLCAi Ki5neiIsICIqLnRneiIsICIqLnhsKiIsICIqLmRvYyIsICIqLnZ4ZCIsCi0gICAgIioucGRmIiwg IioucHMiLCAiKi5semgiLCAiKi5wbSIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIERHICov Ci0gICAgIioub2IiLCAiKi5wciIsICIqLmRtcCIsICIqLnBzIiwgTlVMTAotICAgIH0sCi0gICAg eyAvKiBPU0sgKi8KLSAgICAiKi5neiIsIiouWiIsIioueiIsIioudGd6IiwiKi5saHoiLCIqLnRh ciIsCS8qIGFyY2hpdmVycyAqLwotICAgICIqLnppcCIsIiouYXIiLCIqLnpvbyIsIioucnBtIiwi Ki5semgiLAotICAgIC8qIG9iamVjdCBmaWxlcywgbGlicmFyaWVzLCBleGVjdXRhYmxlcyAqLwot ICAgICIqLnIiLCIqLmwiLCIqLmV4ZSIsICIqLmRsbCIsICIqLnNvLioiLCAiKi5jbGFzcyIsCi0g ICAgLyogaW1hZ2VzICovCi0gICAgIiouZ2lmIiwgIiouanBnIiwgIiouanBlZyIsICIqLnRpZiIs IioudGlmZiIsICIqLnBkZiIsICIqLnBzIiwKLSAgICAiKi5ibXAiLCAiKi5iejIiLCAiKi5CTVAi LCIqLnBjeCIsCi0gICAgTlVMTAotICAgIH0KLX07Ci0KLS8qCi0gIFNldCB1cCBkZWZhdWx0IHBh dHRlcm4gbGlzdHMgc28gdGhleSBjYW4gYmUgZnJlZWQgYW5kIHJlLW1hbGxvYydkLgotICBFYWNo IHBhdHRlcm4gbGlzdCBtdXN0IHRlcm1pbmF0ZWQgYnkgYSBudWxsIGVsZW1lbnQuCi0qLwotVk9J RAotaW5pdHBhdCgpIHsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRURVJO UzsgaSsrKSB7Ci0gICAgICAgIHR4dHBhdHRlcm5zW2ldID0gTlVMTDsKLSAgICAgICAgYmlucGF0 dGVybnNbaV0gPSBOVUxMOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRURVJOUzsg aSsrKSB7Ci0jaWZkZWYgVU5JWAotICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4 dHBbU1lTX1VOSVhdW2ldKTsKLSNlbHNlIC8qIFVOSVggKi8KLSNpZmRlZiBPUzIKLSNpZmRlZiBO VAotICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX1dJTjMyXVtpXSk7 Ci0jZWxzZSAvKiBOVCAqLwotICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBb U1lTX09TMl1baV0pOwotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBW TVMKLSAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19WTVNdW2ldKTsK LSNlbHNlIC8qIFZNUyAqLwotI2lmZGVmIFNUUkFUVVMKLSAgICAgICAgbWFrZXN0cigmKHR4dHBh dHRlcm5zW2ldKSx0eHRwW1NZU19WT1NdW2ldKTsKLSNlbHNlIC8qIFNUUkFUVVMgKi8KLSNpZmRl ZiBkYXRhZ2VuZXJhbAotICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lT X0RHXVtpXSk7Ci0jZWxzZSAvKiBkYXRhZ2VuZXJhbCAqLwotI2lmZGVmIE9TSwotICAgICAgICBt YWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX09TS11baV0pOwotI2Vsc2UgLyogT1NL ICovCi0gICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfVU5LXVtpXSk7 Ci0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBT VFJBVFVTICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyog VU5JWCAqLwotICAgICAgICBpZiAoIXR4dHBbaV0pCi0gICAgICAgICAgYnJlYWs7Ci0gICAgfQot ICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TOyBpKyspIHsKLSNpZmRlZiBVTklYCi0gICAg ICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfVU5JWF1baV0pOwotI2Vsc2Ug LyogVU5JWCAqLwotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0gICAgICAgIG1ha2VzdHIoJihiaW5w YXR0ZXJuc1tpXSksYmlucFtTWVNfV0lOMzJdW2ldKTsKLSNlbHNlIC8qIE5UICovCi0gICAgICAg IG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfT1MyXVtpXSk7Ci0jZW5kaWYgLyog TlQgKi8KLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVmIFZNUwotICAgICAgICBtYWtlc3RyKCYoYmlu cGF0dGVybnNbaV0pLGJpbnBbU1lTX1ZNU11baV0pOwotI2Vsc2UgLyogVk1TICovCi0jaWZkZWYg U1RSQVRVUwotICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX1ZPU11b aV0pOwotI2Vsc2UgLyogU1RSQVRVUyAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgICAgIG1h a2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfREddW2ldKTsKLSNlbHNlIC8qIGRhdGFn ZW5lcmFsICovCi0jaWZkZWYgT1NLCi0gICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSks YmlucFtTWVNfT1NLXVtpXSk7Ci0jZWxzZSAvKiBPU0sgKi8KLSAgICAgICAgbWFrZXN0cigmKGJp bnBhdHRlcm5zW2ldKSxiaW5wW1NZU19VTktdW2ldKTsKLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBWTVMg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgIGlmICghYmlu cFtpXSkKLSAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLS8qCi0gIG0gYSB0IGMgaCBuIGEg bSBlICAtLSAgQ29tcGFyZSBmaWxlbmFtZSB3aXRoIHRleHQgJiBiaW5hcnkgbmFtZSBwYXR0ZXJu cy4KLQotICBSZXR1cm5zOgotICAgIDAgaWYgbmFtZSBtYXRjaGVzIGEgdGV4dCBwYXR0ZXJuIGJ1 dCBub3QgYSBiaW5hcnkgcGF0dGVybi4KLSAgICAxIGlmIG5hbWUgbWF0Y2hlcyBhIGJpbmFyeSBw YXR0ZXJuIGJ1dCBub3QgYSB0ZXh0IHBhdHRlcm4uCi0gICAtMSBpZiBuYW1lIG1hdGNoZXMgbm8g cGF0dGVybnMuCi0gICAtMiBpZiBuYW1lIG1hdGNoZXMgYSBiaW5hcnkgcGF0dGVybiBhbmQgYSB0 ZXh0IHBhdHRlcm4uCi0qLwotaW50Ci1tYXRjaG5hbWUoZmlsZW5hbWUsIGxvY2FsLCBvcykgY2hh ciAqIGZpbGVuYW1lOyBpbnQgbG9jYWw7IGludCBvczsgewotICAgIGludCByYyA9IC0xOwkJCS8q IFJldHVybiBjb2RlICovCi0gICAgY2hhciAqIG5hbWUsICogcDsKLSNpZmRlZiBPUzJPUlVOSVgK LSAgICBjaGFyIHRtcGJ1ZltDS01BWFBBVEgrMV07Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0K LSAgICBuYW1lID0gZmlsZW5hbWUgPyBmaWxlbmFtZSA6ICIiOwkvKiBDb3B5IG9mIG9yaWdpbmFs IGFyZyAqLwotICAgIGlmIChwYXR0ZXJucyAmJiAqbmFtZSkgewkJLyogSWYgUEFUVEVSTlMgT04u Li4gKi8KLQlpbnQgaTsKLQotI2lmZGVmIE9TMk9SVU5JWAotCWlmIChja21hdGNoKCIqLn5bMS05 XSp+IixuYW1lLDEsMSkpIHsgLyogTmFtZSBoYXMgYmFja3VwIHN1ZmZpeD8gKi8KLQkgICAgaW50 IGs7Ci0JICAgIGsgPSBja3N0cm5jcHkodG1wYnVmLG5hbWUsQ0tNQVhQQVRIKzEpOyAvKiBZZXMs IGNvcHkgYW5kIHN0cmlwICovCi0JICAgIGZvciAoaSA9IGsgLSAzOyBpID4gNDsgaS0tKSB7Ci0J CWlmICh0bXBidWZbaV0gPT0gJ34nICYmIHRtcGJ1ZltpLTFdID09ICcuJykgewotCQkgICAgdG1w YnVmW2ktMV0gPSBOVUw7Ci0JCSAgICBicmVhazsKLQkJfQotCSAgICB9Ci0JICAgIG5hbWUgPSB0 bXBidWY7CQkvKiBBbmQgcG9pbnQgdG8gc3RyaXBwZWQgY29weSAqLwotCX0KLSNlbmRpZiAvKiBP UzJPUlVOSVggKi8KLQl6c3RyaXAobmFtZSwmcCk7CQkvKiBTdHJpcCBwYXRobmFtZSB0b28gKi8K LQluYW1lID0gcDsKLQotICAgICAgICBpZiAobG9jYWwpIHsKLSAgICAgICAgICAgIGlmICh0eHRw YXR0ZXJuc1swXSkgewkvKiBTZWFyY2ggdGV4dCBwYXR0ZXJucyAqLwotICAgICAgICAgICAgICAg IGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TICYmIHR4dHBhdHRlcm5zW2ldOyBpKyspIHsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKGNrbWF0Y2godHh0cGF0dGVybnNbaV0sbmFtZSxmaWxlY2Fz ZSwxKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYmlucGF0dGVybnNbMF0pIHsJLyogQW5k IHNlYXJjaCBiaW5hcnkgcGF0dGVybnMgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBp IDwgRlRQQVRURVJOUyAmJiBiaW5wYXR0ZXJuc1tpXTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGlmIChja21hdGNoKGJpbnBhdHRlcm5zW2ldLG5hbWUsZmlsZWNhc2UsMSkpIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgIHJjID0gKHJjID4gLTEpID8gLTIgOiAxOwotICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9Ci0JfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChvcyA+PSAwICYm IG9zIDwgU1lTX01BWCkgewotCQlpZiAodHh0cFtvc11bMF0pIHsKLQkJICAgIGZvciAoaSA9IDA7 IGkgPCBGVFBBVFRFUk5TICYmIHR4dHBbb3NdW2ldOyBpKyspIHsKLQkJCWlmIChja21hdGNoKHR4 dHBbb3NdW2ldLG5hbWUsZmlsZWNhc2UsMSkpIHsKLQkJCSAgICByYyA9IDA7Ci0JCQkgICAgYnJl YWs7Ci0JCQl9Ci0JCSAgICB9Ci0JCX0KLQkJaWYgKGJpbnBbb3NdWzBdKSB7Ci0JCSAgICBmb3Ig KGkgPSAwOyBpIDwgRlRQQVRURVJOUyAmJiBiaW5wW29zXVtpXTsgaSsrKSB7Ci0JCQlpZiAoY2tt YXRjaChiaW5wW29zXVtpXSxuYW1lLGZpbGVjYXNlLDEpKSB7Ci0JCQkgICAgcmMgPSAocmMgPiAt MSkgPyAtMiA6IDE7Ci0JCQkgICAgYnJlYWs7Ci0JCQl9Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQot ICAgICAgICB9Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsIm1hdGNobmFtZSIsbmFtZSxyYyk7Ci0g ICAgcmV0dXJuKHJjKTsKLX0KLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotCi0jaWZkZWYgVU5JQ09E RQotI2lmbmRlZiBOT0VWRU5NQVgKLSNkZWZpbmUgRVZFTk1BWAotI2VuZGlmIC8qIE5PRVZFTk1B WCAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotLyogIFMgQyBBIE4gRiBJIEwgRSAgLS0gIEFu YWx5emUgYSBmaWxlJ3MgY29udGVudHMgICovCi0KLS8qCi0gIENhbGwgd2l0aDoKLSAgICBuYW1l OiAgICBQb2ludGVyIHRvIG5hbWUgb2YgZXhpc3RpbmcgZmlsZS4KLSAgICBmbGFnOiAgICBQb2lu dGVyIHRvIGludCBpbiB3aGljaCB0byByZXR1cm4gYWRkaXRpb25hbCBudW1lcmljIGRhdGEuCi0K LSAgUmV0dXJuczoKLSAgICAtMSBvbiBmYWlsdXJlICh0byBvcGVuIGZpbGUgb3IgdG8gcmVhZCBm cm9tIGl0KS4KLSAgICBJbnRlZ2VyLCAwLi40LCBvbiBzdWNjZXNzIGluZGljYXRpbmcgZmlsZSB0 eXBlOgotICAgICAwID0gNy1iaXQgdGV4dCAoZmxhZyA9IC0xKQotICAgICAxID0gVVRGLTggdGV4 dCAoZmxhZyA9IC0xKQotICAgICAyID0gVUNTLTIgdGV4dCAoZmxhZyA9ICAwOiBiaWctZW5kaWFu OyBmbGFnID0gMTogbGl0dGxlLWVuZGlhbikKLSAgICAgMyA9IDgtYml0IHRleHQgKGZsYWcgPSAg MDogbm8gQzEgYnl0ZXM7IGZsYWcgPSAxOiBpbmNsdWRlcyBDMSBieXRlcykKLSAgICAgNCA9IFRl eHQgICAgICAgKHR5cGUgdW5rbm93bikKLSAgICAgNSA9IGJpbmFyeSAgICAgKGZsYWcgPSAtMSkK LQotICBJZiBVTklDT0RFIGlzIGRlZmluZWQ6Ci0KLSAgIDEuIElmIGZpbGUgYmVnaW5zIHdpdGgg YSB2YWxpZCBCT00sIGl0IGlzIGJlbGlldmVkLiAgT3RoZXJ3aXNlIHdlCi0gICAgICByZWFkIHRo ZSBmaXJzdCA0SyBvZiB0aGUgZmlsZSAoc2luY2UgaXQgbWlnaHQgYmUgZW1haWwgd2l0aCB2ZXJi b3NlCi0gICAgICBoZWFkZXJzKSBhbmQgYW5hbHl6ZSBpdDoKLQotICAgMi4gSWYgZmlsZSBjb250 YWlucyBvbmx5IHZhbGlkIFVURi04IHNlcXVlbmNlcywgd2UgY2FsbCBpdCBVVEYtODsKLSAgICAg IG90aGVyd2lzZToKLQotICAgMy4gSWYgdGhlIGZpbGUgY29udGFpbnMgbG90cyBvZiBhbHRlcm5h dGUgMCBieXRlcywgd2UgY2FsbCBpdCBVQ1MtMiwgYW5kCi0gICAgICBzZXQgdGhlIHBvbGFyaXR5 IGFjY29yZGluZyB0byB3aGV0aGVyIHRoZSBwcmVwb25kZXJhbmNlIG9mIHRoZW0gYXJlIGluCi0g ICAgICBldmVuIG9yIG9kZCBwb3NpdGlvbnM7IG90aGVyd2lzZToKLQotICAgNC4gSWYgRVZFTk1B WCBpcyBkZWZpbmVkIGFuZCB0aGUgZmlsZSBjb250YWlucyBsb3RzIG9mIGFsdGVybmF0ZSBieXRl cyB0aGF0Ci0gICAgICBhcmUgaWRlbnRpY2FsLCBldmVuIGlmIHRoZXkgYXJlbid0IHplcm8sIGFu ZCB0aGUgbnVtYmVyIG9mIHN1Y2ggYnl0ZXMKLSAgICAgIGlzIGF0IGxlYXN0IGZvdXIgdGltZXMg dGhlIGxlbmd0aCBvZiB0aGUgbWF4aW11bSBydW4gb2YgYWx0ZXJuYXRpbmcKLSAgICAgIGlkZW50 aWNhbCBieXRlcyBvZiB0aGUgb3Bwb3NpdGUgcG9sYXJpdHksIHdlIGNhbGwgaXQgVUNTLTI7IG90 aGVyd2lzZToKLQotICAgNS4gSWYgdGhlIGZpbGUgY29udGFpbmVkIG5vIGJ5dGVzIHdpdGggdGhl aXIgOHRoIGJpdHMgb24gYW5kIG5vIGNvbnRyb2xzCi0gICAgICBvdGhlciB0aGFuIENSLCBMRiwg SFQsIGFuZCBGRiwgd2UgY2FsbCBpdCBBU0NJSTsgb3RoZXJ3aXNlOgotCi0gICA2LiBJZiBpdCBj b250YWlucyBDMCBjb250cm9sIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBDUiwgTEYsIEhULCBhbmQg RkYsIHdlCi0gICAgICBjYWxsIGl0IGJpbmFyeTsgb3RoZXJ3aXNlOgotCi0gICA3LiBXZSBjYWxs IGl0IDgtYml0IHRleHQsIGNoYXJhY3RlciBzZXQgdW5rbm93biAoY291bGQgYmUgTGF0aW4tMSBv cgotICAgICAgYW55dGhpbmcgZWxzZSkuCi0KLSAgIE5vdGUgdGhhdCBtYWxmb3JtZWQgVVRGLTgg aXMgbm90IGRpYWdub3NlZCBhcyBVVEYtOC4KLQotICAgSWYgVU5JQ09ERSBpcyBub3QgZGVmaW5l ZDoKLQotICAgMS4gSWYgdGhlIGZpbGUgY29udGFpbnMgQzAgY29udHJvbCBjaGFyYWN0ZXJzIG90 aGVyIHRoYW4gQ1IsIExGLCBIVCwgYW5kCi0gICAgICBGRiwgd2UgY2FsbCBpdCBiaW5hcnk7IG90 aGVyd2lzZToKLQotICAgMi4gSWYgdGhlIGZpbGUgY29udGFpbnMgYW55IDgtYml0IGJ5dGVzLCB3 ZSBjYWxsIGl0IDgtYml0IHRleHQ7IG90aGVyd2lzZToKLQotICAgMy4gV2UgY2FsbCBpdCA3LWJp dCB0ZXh0LgotCi0gICBJbiB0aGUgbm9uLVVuaWNvZGUgY2FzZSwgVUNTLTIgaXMgZGlhZ25vc2Vk IGFzIGJpbmFyeSwgYnV0IFVURi04IGFzCi0gICA4LWJpdCB0ZXh0LgotCi0gICBUaGVyZSBpcyBu byBzaWduaWZpY2FudCBzcGVlZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIFVuaWNvZGUgYW5kCi0g ICBub24tVW5pY29kZSBjYXNlcy4KLSovCi1pbnQKLXNjYW5maWxlKG5hbWUsZmxhZyxuc2NhbmZp bGUpIGNoYXIgKiBuYW1lOyBpbnQgKiBmbGFnLCBuc2NhbmZpbGU7IHsKLSAgICBGSUxFICogZnA7 CQkJCS8qIEZpbGUgcG9pbnRlciAqLwotICAgIHVuc2lnbmVkIGNoYXIgYnVmW1NDQU5GSUxFQlVG XTsJLyogRmlsZSBkYXRhIGJ1ZmZlciBmb3IgYW5hbHlzaXMgKi8KLSAgICBpbnQgeCwgdmFsID0g LTEsIGNvdW50ID0gMDsJCS8qIFdvcmtlcnMgKi8KLSAgICBpbnQgcmMgPSAtMTsJCQkvKiBSZXR1 cm4gY29kZSAqLwotICAgIGludCBwdiA9IC0xOwkJCS8qIFBhdHRlcm4tbWF0Y2ggdmFsdWUgKi8K LSAgICBpbnQgZW9mID0gMDsJCQkvKiBGbGFnIGZvciBmaWxlIEVPRiBlbmNvdW50ZXJlZCAqLwot ICAgIGludCBieXRlcyA9IDA7CQkJLyogVG90YWwgYnl0ZSBjb3VudCAqLwotI2lmZGVmIFVOSUNP REUKLSAgICB1bnNpZ25lZCBpbnQgYzAsIGMxOwkJLyogRmlyc3QgMiBmaWxlIGJ5dGVzIChmb3Ig Qk9NKSAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICBleHRlcm4gaW50IHBpcGVzZW5kLCBm aWxlcGVlazsKLQotICAgIHJlZ2lzdGVyIGludCBpOwkJCS8qIExvb3AgY29udHJvbCAqLwotICAg IGludCByZWFkc2l6ZSA9IDA7CQkJLyogSG93IG11Y2ggdG8gcmVhZCAqLwotICAgIGludCBlaWdo dGJpdCA9IDA7CQkJLyogTnVtYmVyIG9mIGJ5dGVzIHdpdGggOHRoIGJpdCBvbiAqLwotICAgIGlu dCBjMGNvbnRyb2xzID0gMDsJCQkvKiBDMCBub24tdGV4dCBjb250cm9sLWNoYXIgY291bnRlciAq LwotICAgIGludCBjMG5vbmlzbyA9IDA7CQkJLyogQzAgbm9uLUlTTyBjb250cm9sLWNoYXIgY291 bnRlciAqLwotICAgIGludCBjMWNvbnRyb2xzID0gMDsJCQkvKiBDMSBjb250cm9sLWNoYXJhY3Rl ciBjb3VudGVyICovCi0gICAgdW5zaWduZWQgaW50IGM7CQkJLyogQ3VycmVudCBjaGFyYWN0ZXIg Ki8KLSAgICBpbnQgcnVubWF4ID0gMDsJCQkvKiBMb25nZXN0IHJ1biBvZiAwIGJ5dGVzICovCi0g ICAgaW50IHJ1bnplcm8gPSAwOwkJCS8qIFJ1biBvZiAwIGJ5dGVzICovCi0gICAgaW50IHBjdHpl cm8gPSAwOwkJCS8qIFBlcmNlbnRhZ2Ugb2YgMCBieXRlcyAqLwotICAgIGludCB0eHRjeiA9IDA7 Ci0jaWZkZWYgQ0tfQ1RSTFoKLSAgICBleHRlcm4gaW50IGVvZm1ldGhvZDsKLSNlbmRpZiAvKiBD S19DVFJMWiAqLwotCi0jaWZkZWYgVU5JQ09ERQotICAgIGludCBub3R1dGY4ID0gMDsJCQkvKiBO b256ZXJvIGlmIGRlZmluaXRlbHkgbm90IFVURi04ICovCi0gICAgaW50IHV0ZjhzdGF0ZSA9IDA7 CQkJLyogVVRGLTggcmVjb2duaXplciBzdGF0ZSAqLwotICAgIGludCBvZGR6ZXJvID0gMDsJCQkv KiBOdW1iZXIgb2YgMCBieXRlcyBpbiBvZGQgcG9zdGlvbnMgKi8KLSAgICBpbnQgZXZlbnplcm8g PSAwOwkJCS8qIGFuZCBpbiBldmVuIHBvc2l0aW9ucyAqLwotICAgIGludCBsZm51bCA9IDA7CQkJ LyogTnVtYmVyIG9mIDxMRj48TlVMPiBzZXF1ZW5jZXMgKi8KLSAgICBpbnQgY3JsZiA9IDA7CQkJ LyogTnVtYmVyIG9mIDxDUkxGPiBzZXF1ZW5jZXMgKi8KLSNlbHNlCi0gICAgaW50IG5vdHV0Zjgg PSAxOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBFVkVO TUFYCi0gICAgaW50IG9kZHJ1biA9IDAsIG9kZG1heCA9IDAsIG9kZGJ5dGUgPSAwLCBvZGRtYXhi eXRlID0gMDsKLSAgICBpbnQgZXZlbnJ1biA9IDAsIGV2ZW5tYXggPSAwLCBldmVuYnl0ZSA9IDAs IGV2ZW5tYXhieXRlID0gMDsKLSNlbmRpZiAvKiBFVkVOTUFYICovCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIGlmIChwaXBlc2VuZCB8fCBjYWxpYnJhdGUgfHwg c25kYXJyYXkpIC8qIE9ubHkgZm9yIHJlYWwgZmlsZXMgKi8KLSAgICAgIHJldHVybigtMSk7Ci0j ZW5kaWYgLyogTk9YRkVSICovCi0gICAgZGVidWcoRjExMSwic2NhbmZpbGUiLG5hbWUsbnNjYW5m aWxlKTsKLSNpZmRlZiBQQVRURVJOUwotICAgIGlmICghZmlsZXBlZWspIHsKLQlwdiA9IG1hdGNo bmFtZShuYW1lLDEsLTEpOwotCWlmIChwdiA8IDApCi0JICByYyA9IC0xOwotCWVsc2UKLQkgIHJj ID0gKHB2ID09IDEpID8gRlRfQklOIDogRlRfVEVYVDsKLQlkZWJ1ZyhGMTExLCJzY2FuZmlsZSAh ZmlsZXBlZWsgcmVzdWx0IixuYW1lLHJjKTsKLQlyZXR1cm4ocmMpOwotICAgIH0KLSNlbmRpZiAv KiBQQVRURVJOUyAqLwotCi0jaWZkZWYgVk1TCi0vKiBXZSBkb24ndCBzY2FuIGluIFZNUyB3aGVy ZSB0ZXh0IGZpbGVzIGhhdmUgdmFyaW91cyByZWNvcmQgZm9ybWF0cyBpbiAgKi8KLS8qIHdoaWNo IHJlY29yZCBoZWFkZXJzIGNvbnRhaW4gc2VlbWluZ2x5IG5vbi10ZXh0IGJ5dGVzLiAgU28gdGhl IGJlc3QgICAqLwotLyogd2UgY2FuIGRvIGluIFZNUyBpcyB0ZWxsIHdoZXRoZXIgdGhlIGZpbGUg aXMgdGV4dCBvciBiaW5hcnksIHBlcmlvZC4gICovCi0gICAgewotCWludCBiLCB4OwotCWIgPSBi aW5hcnk7CQkJLyogU2F2ZSBjdXJyZW50IGJpbmFyeSBzZXR0aW5nICovCi0JaWYgKHpvcGVuaSha SUZJTEUsbmFtZSkgPiAwKSB7CS8qIEluIFZNUyB0aGlzIHNldHMgYmluYXJ5ICovCi0JICAgIHgg PSBiaW5hcnk7CQkJLyogR2V0IHJlc3VsdCAqLwotCSAgICB6Y2xvc2UoWklGSUxFKTsJCS8qIENs b3NlIHRoZSBmaWxlICovCi0JICAgIGJpbmFyeSA9IGI7CQkJLyogUmVzdG9yZSBwcmV2aW91cyBi aW5hcnkgc2V0dGluZyAqLwotCSAgICByYyA9IHggPyBGVF9CSU4gOiBGVF9URVhUOwotCSAgICB2 YWwgPSAwOwotCSAgICBnb3RvIHhzY2FuZmlsZTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIFZNUyAq LwotCi0gICAgZW9mID0gMDsJCQkJLyogRW5kLW9mLWZpbGUgcmVhY2hlZCBpbmRpY2F0b3IgKi8K LSNpZmRlZiBPUzIKLSAgICBmcCA9IGZvcGVuKG5hbWUsICJyYiIpOwkJLyogT3BlbiB0aGUgZmls ZSBpbiBiaW5hcnkgbW9kZSAqLwotI2Vsc2UKLSAgICBmcCA9IGZvcGVuKG5hbWUsICJyIik7Ci0j ZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAoIWZwKQkJCQkvKiBGYWlsZWQ/ICovCi0gICAgICBy ZXR1cm4oLTEpOwotCi0gICAgd2hpbGUgKDEpIHsJCQkJLyogT25lIG9yIG1vcmUgZ3VscHMgZnJv bSBmaWxlICovCi0JaWYgKGVvZikgewkJCS8qIEVPRiBmcm9tIGxhc3QgdGltZT8gKi8KLQkgICAg ZGVidWcoRjExMSwic2NhbmZpbGUgYXQgRU9GIixuYW1lLGJ5dGVzKTsKLQkgICAgaWYgKHJ1bnpl cm8gPiBydW5tYXgpCi0JICAgICAgcnVubWF4ID0gcnVuemVybzsKLQkgICAgYnJlYWs7Ci0JfQot CWlmIChuc2NhbmZpbGUgPCAwKSB7CQkvKiBSZWFkaW5nIHdob2xlIGZpbGUgKi8KLQkgICAgcmVh ZHNpemUgPSBTQ0FORklMRUJVRjsKLQl9IGVsc2UgewkJCS8qIFJlYWRpbmcgZmlyc3QgbnNjYW5m aWxlZSBieXRlcyAqLwotCSAgICByZWFkc2l6ZSA9IG5zY2FuZmlsZSAtIGJ5dGVzOwotCSAgICBp ZiAocmVhZHNpemUgPCAxKQotCSAgICAgIGJyZWFrOwotCSAgICBpZiAocmVhZHNpemUgPiBTQ0FO RklMRUJVRikKLQkgICAgICByZWFkc2l6ZSA9IFNDQU5GSUxFQlVGOwotCX0KLQlkZWJ1ZyhGMTAx LCJzY2FuZmlsZSByZWFkc2l6ZSIsIiIscmVhZHNpemUpOwotCWNvdW50ID0gZnJlYWQoYnVmLDEs cmVhZHNpemUsZnApOyAvKiBSZWFkIGEgYnVmZmVyICovCi0JaWYgKGNvdW50ID09IEVPRiB8fCBj b3VudCA9PSAwKSB7Ci0JICAgIGRlYnVnKEYxMTEsInNjYW5maWxlIEVPRiIsbmFtZSxjb3VudCk7 Ci0JICAgIGJyZWFrOwotCX0KLQlkZWJ1ZyhGMTExLCJzY2FuZmlsZSBidWZmZXIgb2siLG5hbWUs Y291bnQpOwotCi0JaWYgKGJ5dGVzID09IDAgJiYgY291bnQgPiA4KSB7Ci0JICAgIC8qIFBERiBm aWxlcyBjYW4gbG9vayBsaWtlIHRleHQgaW4gdGhlIGJlZ2lubmluZy4gKi8KLQkgICAgaWYgKCFj a3N0cmNtcCgoY2hhciAqKWJ1ZiwiJVBERi0xLiIsNywxKSkgewotCQlpZiAoaXNkaWdpdChidWZb N10pKSB7Ci0JCSAgICBpZiAoYnVmWzhdID09ICdcMDE1JyB8fAotCQkJY291bnQgPiA5ICYmIGJ1 Zls4XSA9PSBTUCAmJiBidWZbOV0gPT0gJ1wwMTUnKSB7Ci0jaWZkZWYgREVCVUcKLQkJCWJ1Zls4 XSA9IE5VTDsKLQkJCWRlYnVnKEYxMTAsInNjYW5maWxlIFBERiIsYnVmLDApOwotI2VuZGlmIC8q IERFQlVHICovCi0JCQliaW5hcnkgPSAxOwkvKiBCdXQgdGhleSBhcmUgYmluYXJ5LiAqLwotCQkJ YnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoKGNoYXIgKili dWYsIiUhUFMtQWRvIiw4LDEpKSB7Ci0JCS8qIERpdHRvIGZvciBQb3N0U2NyaXB0ICovCi0jaWZk ZWYgREVCVUcKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDg7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCSAg ICBpZiAoYnVmW2ldIDwgJyEnKSB7Ci0JCQlidWZbaV0gPSBOVUw7Ci0JCQlicmVhazsKLQkJICAg IH0KLQkJfQotCQlkZWJ1ZyhGMTEwLCJzY2FuZmlsZSBQb3N0U2NyaXB0IixidWYsMCk7Ci0jZW5k aWYgLyogREVCVUcgKi8KLQkJYmluYXJ5ID0gMTsKLQkJYnJlYWs7Ci0jaWZuZGVmIE5PUENMU0NB TgotCSAgICB9IGVsc2UgaWYgKCFja3N0cmNtcCgoY2hhciAqKWJ1ZiwiKSBIUC1QQ0wiLDgsMSkp IHsKLQkJLyogSFAgUENMIHByaW50ZXIgbGFuZ3VhZ2UgKi8KLSNpZmRlZiBERUJVRwotCQlpbnQg aTsKLQkJZm9yIChpID0gODsgaSA8IGNvdW50OyBpKyspIHsKLQkJICAgIGlmIChidWZbaV0gPCAn IScpIHsKLQkJCWJ1ZltpXSA9IE5VTDsKLQkJCWJyZWFrOwotCQkgICAgfQotCQl9Ci0JCWRlYnVn KEYxMTAsInNjYW5maWxlIFBDTCIsYnVmLDApOwotI2VuZGlmIC8qIERFQlVHICovCi0JCWJpbmFy eSA9IDE7Ci0JCWJyZWFrOwotCSAgICB9IAotI2VuZGlmIC8qIE5PUENMU0NBTiAqLwotI2lmbmRl ZiBOT1BKTFNDQU4KLQkgICAgICBlbHNlIGlmIChidWZbMF0gPT0gJ1wwMzMnICYmIChidWZbMV0g PT0gJ0UnIHx8IGJ1ZlsxXSA9PSAnJScpKSB7Ci0JCS8qIERpdHRvIGZvciBQSkwgSm9iIHByaW50 ZXIgaGVhZGVyICovCi0jaWZkZWYgREVCVUcKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDI7IGkgPCBj b3VudDsgaSsrKSB7Ci0JCSAgICBpZiAoYnVmW2ldIDwgJyEnKSB7Ci0JCQlidWZbaV0gPSBOVUw7 Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJfQotCQlkZWJ1ZyhGMTEwLCJzY2FuZmlsZSBQSkwgSm9i IHByaW50ZXIgaGVhZGVyIixidWYsMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkJYmluYXJ5ID0g MTsKLQkJYnJlYWs7Ci0jZW5kaWYgLyogTk9QSkxTQ0FOICovCi0JICAgIH0KLQl9Ci0KLSNpZmRl ZiBVTklDT0RFCi0JaWYgKGJ5dGVzID09IDAgJiYgY291bnQgPiAxKSB7Ci0JICAgIGludCBpbmNs X2NudCA9IDA7Ci0KLQkgICAgLyogRmlyc3QgbG9vayBmb3IgQk9NICovCi0KLQkgICAgYzAgPSAo dW5zaWduZWQpKCh1bnNpZ25lZClidWZbMF0mMHhGRik7IC8qIEZpcnN0IGZpbGUgYnl0ZSAqLwot CSAgICBjMSA9ICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1ZlsxXSYweEZGKTsgLyogU2Vjb25kIGJ5 dGUgKi8KLQotCSAgICBpZiAoYzAgPT0gMHhGRSAmJiBjMSA9PSAweEZGKSB7CS8qIFVDUy0yIEJF ICovCi0JCXJjID0gRlRfVUNTMjsKLQkJdmFsID0gMDsKLQkJZGVidWcoRjExMSwic2NhbmZpbGUg VUNTMiBCT00gQkUiLGNraXRvYSh2YWwpLHJjKTsKLQkJaW5jbF9jbnQrKzsKLQkgICAgfSBlbHNl IGlmIChjMCA9PSAweEZGICYmIGMxID09IDB4RkUpIHsgLyogVUNTLTIgTEUgKi8KLQkJcmMgPSBG VF9VQ1MyOwotCQl2YWwgPSAxOwotCQlkZWJ1ZyhGMTExLCJzY2FuZmlsZSBVQ1MyIEJPTSBMRSIs Y2tpdG9hKHZhbCkscmMpOwotCQlpbmNsX2NudCsrOwotCSAgICB9IGVsc2UgaWYgKGNvdW50ID4g MikgaWYgKGMwID09IDB4RUYgJiYgYzEgPT0gMHhCQiAmJgotCQkgICAgICAgKHVuc2lnbmVkKSgo dW5zaWduZWQpYnVmWzJdJjB4RkYpID09IDB4QkYpIHsKLQkJcmMgPSBGVF9VVEY4OwotCQlkZWJ1 ZyhGMTExLCJzY2FuZmlsZSBVVEY4IEJPTSIsY2tpdG9hKHZhbCkscmMpOwotCQlpbmNsX2NudCsr OwotCSAgICB9Ci0JICAgIGlmIChpbmNsX2NudCkgewkJLyogSGF2ZSBCT00gKi8KLQkJYnl0ZXMg Kz0gY291bnQ7Ci0JCWdvdG8geHNjYW5maWxlOwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIFVOSUNP REUgKi8KLQotCWJ5dGVzICs9IGNvdW50OwkJCS8qIENvdW50IGJ5dGVzIHJlYWQgKi8KLQllb2Yg PSBmZW9mKGZwKTsJCQkvKiBGbGFnIGZvciBhdCBFT0YgICovCi0KLQlmb3IgKGkgPSAwOyBpIDwg Y291bnQ7IGkrKykgewkvKiBGb3IgZWFjaCBieXRlLi4uICovCi0JICAgIGMgPSAodW5zaWduZWQp YnVmW2ldOwkvKiBGb3IgZWFzZSBvZiByZWZlcmVuY2UgKi8KLQkgICAgaWYgKCFjKSB7CQkJLyog WmVybyBieXRlPyAqLwotI2lmZGVmIEVWRU5NQVgKLQkJaWYgKGkmMSkJCS8qIEluIG9kZCBwb3Np dGlvbiAqLwotCQkgIG9kZHplcm8rKzsKLQkJZWxzZQotCQkgIGV2ZW56ZXJvKys7CQkvKiBJbiBl dmVuIHBvc2l0aW9uICovCi0jZW5kaWYgLyogRVZFTk1BWCAqLwotCQlydW56ZXJvKys7Ci0JICAg IH0gZWxzZSB7CQkJLyogTm90IGEgemVybyBieXRlICovCi0JCWlmIChydW56ZXJvID4gcnVubWF4 KQotCQkgIHJ1bm1heCA9IHJ1bnplcm87Ci0JCWlmIChydW5tYXggPiAyKQkJLyogVGhhdCdzIGFs bCB3ZSBuZWVkIHRvIGJlIGNlcnRhaW4gKi8KLQkJICBicmVhazsJCS8qIGl0J3MgYSBiaW5hcnkg ZmlsZS4gKi8KLQkJcnVuemVybyA9IDA7Ci0JICAgIH0KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRl ZiBFVkVOTUFYCi0KLS8qIFRoaXMgaXMgdG8gY2F0Y2ggVUNTLTIgd2l0aCBhIG5vbi1BU0NJSSwg bm9uLUxhdGluLTEgcmVwZXJ0b2lyZSAgKi8KLQotCSAgICBpZiAoaSA+IDEpIHsJICAgICAgLyog TG9vayBmb3IgcnVucyBvZiBhbHRlcm5hdGluZyBjaGFycyAqLwotCQlpZiAoaSYxKSB7Ci0JCSAg ICBpZiAoYyA9PSBidWZbaS0yXSkgeyAvKiBJbiBvZGQgcG9zaXRpb25zICovCi0JCQlvZGRydW4r KzsKLQkJCW9kZGJ5dGUgPSBjOwotCQkgICAgfSBlbHNlIHsKLQkJCW9kZG1heCA9IG9kZHJ1bjsK LQkJCW9kZG1heGJ5dGUgPSBvZGRieXRlOwotCQkgICAgfQotCQl9IGVsc2UgewkJLyogYW5kIGV2 ZW4gcG9zaXRpb25zICovCi0JCSAgICBpZiAoYyA9PSBidWZbaS0yXSkgewotCQkJZXZlbnJ1bisr OwotCQkJZXZlbmJ5dGUgPSBjOwotCQkgICAgfSBlbHNlIHsKLQkJCWV2ZW5tYXggPSBldmVucnVu OwotCQkJZXZlbm1heGJ5dGUgPSBldmVuYnl0ZTsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0jZW5k aWYgLyogRVZFTk1BWCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotCSAgICBpZiAoKGMgJiAw eDgwKSA9PSAwKSB7CS8qIFdlIGhhdmUgYSA3LWJpdCBieXRlICovCi0jaWZkZWYgVU5JQ09ERQot CQlpZiAoaSA+IDAgJiYgYyA9PSAxMCkgeyAvKiBMaW5lZmVlZCAqLwotCQkgICAgaWYgKGJ1Zltp LTFdID09IDApIGxmbnVsKys7IC8qIFByZWNlZGVkIGJ5IE5VTCAqLwotCQkgICAgZWxzZSBpZiAo YnVmW2ktMV0gPT0gMTMpIGNybGYrKzsgLyogb3IgYnkgQ1IuLi4gKi8KLQkJfQotI2VuZGlmIC8q IFVOSUNPREUgKi8KLQkJaWYgKGMgPCAnICcpIHsJCS8qIENoZWNrIGZvciBDTyBjb250cm9scyAq LwotCQkgICAgaWYgKGMgIT0gTEYgJiYgYyAhPSBDUiAmJiBjICE9IEhUICYmIGMgIT0gRkYpIHsK LQkJCWMwY29udHJvbHMrKzsKLQkJCWlmIChjICE9IEVTQyAmJiBjICE9IFNPICYmIGMgIT0gU0kp Ci0JCQkgIGMwbm9uaXNvKys7Ci0JCSAgICB9Ci0JCSAgICBpZiAoKGMgPT0gJ1wwMzInKQkvKiBD dHJsLVogKi8KLSNpZmRlZiBDT01NRU5UCi0JCQkmJiBlb2YgJiYgKGkgPj0gY291bnQgLSAyKQot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJCSkgewotCQkJYzBjb250cm9scy0tOwotCQkJYzBub25p c28tLTsKLSNpZmRlZiBDS19DVFJMWgotCQkJaWYgKGVvZm1ldGhvZCA9PSBYWUVPRl9aICYmIHR4 dGN6ID09IDApIHsKLQkJCSAgICBpZiAoYzBjb250cm9scyA9PSAwKSAvKiBBbGwgdGV4dCBwcmlv ciB0byBDdHJsLVogKi8KLQkJCSAgICAgIHR4dGN6ID0gMTsKLQkJCX0KLSNlbmRpZiAvKiBDS19D VFJMWiAqLwotCQkgICAgfQotCQl9Ci0jaWZkZWYgVU5JQ09ERQotCQlpZiAoIW5vdHV0ZjggJiYg dXRmOHN0YXRlKSB7IC8qIEluIFVURi04IHNlcXVlbmNlPyAqLwotCQkgICAgdXRmOHN0YXRlID0g MDsKLQkJICAgIGRlYnVnKEYwMDAsInNjYW5maWxlIiwiNy1iaXQgYnl0ZSBpbiBVVEY4IHNlcXVl bmNlIixjKTsKLQkJICAgIG5vdHV0ZjgrKzsJCS8qIFRoZW4gaXQncyBub3QgVVRGLTggKi8KLQkJ ICAgIGNvbnRpbnVlOwotCQl9Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCSAgICB9IGVsc2UgewkJ CS8qIFdlIGhhdmUgYW4gOC1iaXQgYnl0ZSAqLwotCQllaWdodGJpdCsrOwkJLyogQ291bnQgaXQg Ki8KLQkJaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhBMCkgLyogQ2hlY2sgZm9yIEMxIGNvbnRyb2xz ICovCi0JCSAgYzFjb250cm9scysrOwotI2lmZGVmIFVOSUNPREUKLQkJaWYgKCFub3R1dGY4KSB7 CQkvKiBJZiBpdCBtaWdodCBzdGlsbCBiZSBVVEY4Li4uICovCi0JCSAgICBzd2l0Y2ggKHV0Zjhz dGF0ZSkgeyAvKiBFbnRlciB0aGUgVVRGLTggc3RhdGUgbWFjaGluZSAqLwotCQkgICAgICBjYXNl IDA6CQkgLyogRmlyc3QgYnl0ZS4uLiAqLwotCQkJaWYgKChjICYgMHhFMCkgPT0gMHhDMCkgeyAv KiBUZWxscyBudW1iZXIgb2YgKi8KLQkJCSAgICB1dGY4c3RhdGUgPSAxOyAgICAgICAgLyogc3Vi c2VxdWVudCBieXRlcyAqLwotCQkJfSBlbHNlIGlmICgoYyAmIDB4RjApID09IDB4RTApIHsKLQkJ CSAgICB1dGY4c3RhdGUgPSAyOwotCQkJfSBlbHNlIGlmICgoYyAmIDB4RjgpID09IDB4RjApIHsK LQkJCSAgICB1dGY4c3RhdGUgPSAzOwotCQkJfSBlbHNlIHsKLQkJCSAgICBub3R1dGY4Kys7Ci0J CQl9Ci0JCQlicmVhazsKLQkJICAgICAgY2FzZSAxOgkJLyogU3Vic2VxdWVudCBieXRlICovCi0J CSAgICAgIGNhc2UgMjoKLQkJICAgICAgY2FzZSAzOgotCQkJaWYgKChjICYgMHhDMCkgIT0gMHg4 MCkgeyAvKiBNdXN0IHN0YXJ0IHdpdGggMTAgKi8KLQkJCSAgICBkZWJ1ZyhGMDAwLCJzY2FuZmls ZSIsCi0JCQkJICAiYmFkIGJ5dGUgaW4gVVRGOCBzZXF1ZW5jZSIsYyk7Ci0JCQkgICAgbm90dXRm OCsrOwotCQkJICAgIGJyZWFrOwotCQkJfQotCQkJdXRmOHN0YXRlLS07CS8qIEdvb2QsIG9uZSBs ZXNzIGluIHRoaXMgc2VxdWVuY2UgKi8KLQkJCWJyZWFrOwotCQkgICAgICBkZWZhdWx0OgkJLyog U2hvdWxkbid0IGhhcHBlbiAqLwotCQkJZGVidWcoRjExMSwic2NhbmZpbGUiLCJiYWQgVVRGOCBz dGF0ZSIsdXRmOHN0YXRlKTsKLQkJCW5vdHV0ZjgrKzsKLQkJICAgIH0KLQkJfQotI2VuZGlmIC8q IFVOSUNPREUgKi8KLQkgICAgfQotCX0KLSAgICB9Ci0gICAgZmNsb3NlKGZwKTsJCQkJLyogQ2xv c2UgdGhlIGZpbGUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBieXRlcyIsIiIsYnl0ZXMp OwotCi0gICAgaWYgKGJ5dGVzID09IDApCQkJLyogSWYgbm90aGluZyB3YXMgcmVhZCAqLwotICAg ICAgcmV0dXJuKC0xKTsJCQkvKiB3ZSdyZSBkb25lLiAqLwotCi0jaWZkZWYgRVZFTk1BWAotICAg IC8qIEluIGNhc2Ugd2UgaGFkIGEgcnVuIHRoYXQgbmV2ZXIgYnJva2UuLi4gKi8KLSNpZmRlZiBD T01NRU5UCi0gICAgaWYgKG9kZG1heCA9PSAwKSB7Ci0Jb2RkbWF4ID0gb2RkcnVuOwotCW9kZG1h eGJ5dGUgPSBvZGRieXRlOwotICAgIH0KLSAgICBpZiAoZXZlbm1heCA9PSAwKSB7Ci0JZXZlbm1h eCA9IGV2ZW5ydW47Ci0JZXZlbm1heGJ5dGUgPSBldmVuYnl0ZTsKLSAgICB9Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgIGlmIChydW5tYXggPT0gMCkgewotCXJ1bm1heCA9IHJ1bnplcm87Ci0g ICAgfQotI2VuZGlmIC8qIEVWRU5NQVggKi8KLQotI2lmZGVmIFVOSUNPREUKLSAgICBpZiAoYnl0 ZXMgPiAxMDApCQkJLyogQnl0ZXMgaXMgbm90IDAgKi8KLSAgICAgIHBjdHplcm8gPSAoZXZlbnpl cm8gKyBvZGR6ZXJvKSAvIChieXRlcyAvIDEwMCk7Ci0gICAgZWxzZQotICAgICAgcGN0emVybyA9 ICgoZXZlbnplcm8gKyBvZGR6ZXJvKSAqIDEwMCkgLyBieXRlczsKLSNlbmRpZiAvKiBVTklDT0RF ICovCi0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsJCQkvKiBJZiBkZWJ1Z2dpbmcs IGR1bXAgc3RhdGlzdGljcyAqLwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGMwY29udHJvbHMgIiwi IixjMGNvbnRyb2xzKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjMG5vbmlzbyAgICIsIiIsYzBu b25pc28pOwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGMxY29udHJvbHMgIiwiIixjMWNvbnRyb2xz KTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBlaWdodGJpdCAgICIsIiIsZWlnaHRiaXQpOwotI2lm ZGVmIFVOSUNPREUKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjcmxmICAgICAgICIsIiIsY3JsZik7 Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgbGZudWwgICAgICAiLCIiLGxmbnVsKTsKLQlkZWJ1ZyhG MTAxLCJzY2FuZmlsZSBub3R1dGY4ICAgICIsIiIsbm90dXRmOCk7Ci0JZGVidWcoRjEwMSwic2Nh bmZpbGUgZXZlbnplcm8gICAiLCIiLGV2ZW56ZXJvKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBv ZGR6ZXJvICAgICIsIiIsb2RkemVybyk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgZXZlbi9vZGQg ICAiLCIiLChldmVuemVybyAvIChvZGR6ZXJvICsgMSkpKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmls ZSBvZGQvZXZlbiAgICIsIiIsKG9kZHplcm8gLyAoZXZlbnplcm8gKyAxKSkpOwotCWRlYnVnKEYx MDEsInNjYW5maWxlIHBjdHplcm8gICAgIiwiIixwY3R6ZXJvKTsKLSNlbmRpZiAvKiBVTklDT0RF ICovCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIEVWRU5NQVgKLQlkZWJ1ZyhGMTAxLCJzY2FuZmls ZSBvZGRtYXggICAgICIsIiIsb2RkbWF4KTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBvZGRtYXhi eXRlICIsIiIsb2RkbWF4Ynl0ZSk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgZXZlbm1heCAgICAi LCIiLGV2ZW5tYXgpOwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGV2ZW5tYXhieXRlIiwiIixldmVu bWF4Ynl0ZSk7Ci0jZW5kaWYgLyogRVZFTk1BWCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQlk ZWJ1ZyhGMTAxLCJzY2FuZmlsZSBydW5tYXggICAgICIsIiIscnVubWF4KTsKLSAgICB9Ci0jZW5k aWYgLyogREVCVUcgKi8KLQotI2lmZGVmIFVOSUNPREUKLSAgICB4ID0gZWlnaHRiaXQgPyBieXRl cyAvIDIwIDogYnl0ZXMgLyA0OyAvKiBGb3IgVUNTLTIuLi4gKi8KLQotICAgIGlmIChydW5tYXgg PiAyKSB7CQkJLyogRmlsZSBoYXMgcnVuIG9mIG1vcmUgdGhhbiAyIE5VTHMgKi8KLQlkZWJ1ZyhG MTAwLCJzY2FuZmlsZSBCSU4gcnVubWF4IiwiIiwwKTsKLQlyYyA9IEZUX0JJTjsJCQkvKiBzbyBp dCBjYW4ndCBiZSBhbnkga2luZCBvZiB0ZXh0LiAqLwotCWdvdG8geHNjYW5maWxlOwotCi0gICAg fSBlbHNlIGlmIChyYyA9PSBGVF9VQ1MyIHx8IChyYyA9PSBGVF9VVEY4ICYmIHJ1bm1heCA9PSAw KSkgewotCWdvdG8geHNjYW5maWxlOwkJCS8qIEZpbGUgc3RhcnRzIHdpdGggYSBCT00gKi8KLQot ICAgIH0gZWxzZSBpZiAoZWlnaHRiaXQgPiAwICYmICFub3R1dGY4KSB7IC8qIEZpbGUgaGFzIDgt Yml0IGRhdGEgKi8KLQlpZiAocnVubWF4ID4gMCkgewkJICAgLyogYW5kIHJ1bnMgb2YgTlVMcyAq LwotCSAgICBkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBCSU4gKG5uVVRGOCkgcnVubWF4IiwiIiwwKTsK LQkgICAgcmMgPSBGVF9CSU47CQkgICAvKiBVVEYtOCBkb2Vzbid0IGhhdmUgTlVMcyAqLwotCX0g ZWxzZSB7CQkJICAgLyogTm8gTlVMcyAqLwotCSAgICBkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBVVEY4 IChublVURjggKyBydW5tYXggPT0gMCkiLCIiLDApOwotCSAgICByYyA9IEZUX1VURjg7CQkgICAv KiBhbmQgbm90IG5vdCBVVEYtOCwgc28gaXMgVVRGLTggKi8KLQl9Ci0JZ290byB4c2NhbmZpbGU7 Ci0gICAgfQotLyoKLSAgRm9yIFVDUy0yIGRldGVjdGlvbiwgc2VlIGlmIHRoZSB0ZXh0IGNvbnRh aW5zIGxpbmVzIGRlbGltaXRlZCBieQotICBBU0NJSSBjb250cm9scyBhbmQgY29udGFpbmluZyBz cGFjZXMsIEFTQ0lJIGRpZ2l0cywgb3Igb3RoZXIgQVNDSUkKLSAgY2hhcmFjdGVycywgdGh1cyBm b3JjaW5nIHRoZSBwcmVzZW5jZSBvZiBhIGNlcnRhaW4gcGVyY2VudGFnZSBvZiB6ZXJvIGJ5dGVz LgotICBGb3IgdGhpcyBwdXJwb3NlIHJlcXVpcmUgMjAlIHplcm8gYnl0ZXMsIHdpdGggYXQgbGVh c3Qgc2l4IHRpbWVzIGFzIG1hbnkKLSAgaW4gZXZlbiAob2RkKSBwb3NpdGlvbnMgYXMgaW4gb2Rk IChldmVuKSBwb3NpdGlvbnMuCi0qLwotICAgIGlmICgoZXZlbnplcm8gPj0geCAmJiBvZGR6ZXJv ID09IDApIHx8Ci0JKCgoKGV2ZW56ZXJvIC8gKG9kZHplcm8gKyAxKSkgPiA2KSAmJiAocGN0emVy byA+IDIwKSkgJiYKLQkoY3JsZiA9PSAwKSAmJgotCShsZm51bCA+IDEpKQotCSkgewotCSAgICBk ZWJ1ZyhGMTAwLCJzY2FuZmlsZSBVQ1MyIG5vQk9NIEJFIChldmVuL29kZHplcm8pIiwiIiwwKTsK LQlyYyA9IEZUX1VDUzI7Ci0JdmFsID0gMDsKLSAgICB9IGVsc2UgaWYgKChldmVuemVybyA9PSAw ICYmIG9kZHplcm8gPj0geCkgfHwKLQkgICAgICAgKCgoKG9kZHplcm8gLyAoZXZlbnplcm8gKyAx KSkgPiA2KSAmJiAocGN0emVybyA+IDIwKSkgJiYKLQkgICAgICAgKGNybGYgPT0gMCkgJiYKLQkg ICAgICAgKGxmbnVsID4gMSkpCi0JICAgICAgICkgewotCWRlYnVnKEYxMDAsInNjYW5maWxlIFVD UzIgbm9CT00gTEUgKGV2ZW4vb2RkemVybykiLCIiLDApOwotCXJjID0gRlRfVUNTMjsKLQl2YWwg PSAxOwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIEVWRU5NQVgKLS8qCi0gIElmIHRoZSB0ZXN0 cyBhYm92ZSBmYWlsLCB3ZSBzdGlsbCBtaWdodCBoYXZlIFVDUy0yIGlmIHRoZXJlIGFyZSBzaWdu aWZpY2FudAotICBydW5zIG9mIGlkZW50aWNhbCBieXRlcyBpbiBhbHRlcm5hdGluZyBwb3NpdGlv bnMsIGJ1dCBvbmx5IGlmIGl0IGFsc28gaGFzCi0gIHVudXN1YWwgQzAgY29udHJvbHMgKG90aGVy d2lzZSB3ZSdkIHBpY2sgdXAgaGV4IGZpbGVzIGhlcmUpLiAgTk9URTogV2UKLSAgZG9uJ3QgYWN0 dWFsbHkgZG8gdGhpcyAtLSBFVkVOTUFYIGlzIG5vdCBkZWZpbmVkIChzZWUgY29tbWVudHMgYWJv dmUgYXQKLSAgZmlyc3Qgb2NjdXJyZW5jZSBvZiBFVkVOTUFYKS4KLSovCi0gICAgfSBlbHNlIGlm IChjMG5vbmlzbyAmJiBldmVubWF4ID4gYnl0ZXMgLyA0KSB7Ci0JZGVidWcoRjEwMCwic2NhbmZp bGUgVUNTMiBCRSAoZXZlbm1heCkiLCIiLDApOwotCXJjID0gRlRfVUNTMjsKLQl2YWwgPSAwOwot ICAgIH0gZWxzZSBpZiAoYzBub25pc28gJiYgb2RkbWF4ID4gYnl0ZXMgLyA0KSB7Ci0JZGVidWco RjEwMCwic2NhbmZpbGUgVUNTMiBMRSAoZXZlbm1heCkiLCIiLDApOwotCXJjID0gRlRfVUNTMjsK LQl2YWwgPSAxOwotI2VuZGlmIC8qIEVWRU5NQVggKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0K LSAgICB9Ci0vKgotICBJdCBzZWVtcyB0byBiZSBVQ1MtMiBidXQgbGV0J3MgYmUgbW9yZSBjZXJ0 YWluIHNpbmNlIHRoZXJlIGlzIG5vIEJPTS4uLgotICBJZiB0aGUgbnVtYmVyIG9mIDctIGFuZCA4 LWJpdCBjaGFyYWN0ZXJzIGlzIGFwcHJveGltYXRlbHkgZXF1YWwsIGl0IG1pZ2h0Ci0gIGJlIGEg Y29tcHJlc3NlZCBmaWxlLiAgSW4gdGhpcyBjYXNlIHdlIGRlY2lkZSBiYXNlZCBvbiB0aGUgbmFt ZS4KLSovCi0gICAgaWYgKHJjID09IEZUX1VDUzIpIHsKLQlpZiAoZWlnaHRiaXQgPiAwKSB7Ci0J ICAgIGludCBqLCBrOwotCSAgICBqID0gKGMxY29udHJvbHMgKiAxMDApIC8gKGMwY29udHJvbHMg KyAxKTsKLQkgICAgZGVidWcoRjEwMSwic2NhbmZpbGUgYzEvYzAgICAgICAiLCIiLGopOwotCSAg ICBrID0gKGJ5dGVzICogMTAwKSAvIGVpZ2h0Yml0OwotCSAgICBkZWJ1ZyhGMTAxLCJzY2FuZmls ZSBwY3QgOGJpdCAgICIsIiIsayk7Ci0JICAgIGlmIChrID4gNDAgJiYgayA8IDYwICYmIGogPiA2 MCkgewotCQlpZiAoY2ttYXRjaCgieyouWiwqLmd6LCouemlwLCouWklQfSIsbmFtZSwxLDEpKSB7 Ci0JCSAgICBkZWJ1ZyhGMTEwLCJzY2FuZmlsZSA4LWJpdCBCSU4gY29tcHJlc3NlZCIsbmFtZSww KTsKLQkJICAgIHJjID0gRlRfQklOOwotCQkgICAgZ290byB4c2NhbmZpbGU7Ci0JCX0KLQkgICAg fQotCX0KLQkvKiBTbWFsbCBmaWxlIC0gbm90IGVub3VnaCBldmlkZW5jZSB1bmxlc3MgLi4uICov Ci0KLQlpZiAoYnl0ZXMgPCAxMDApIHsKLQkgICAgaWYgKG9kZHplcm8gIT0gMCAmJiBldmVuemVy byAhPSAwKSB7Ci0JCWRlYnVnKEYxMDAsInNjYW5maWxlIHNtYWxsIFVDUzIgZG91YnRmdWwiLCIi LDApOwotCQlyYyA9IEZUX0JJTjsKLQkJZ290byB4c2NhbmZpbGU7Ci0JICAgIH0gZWxzZSBpZiAo b2RkemVybyA9PSAwICYmIGV2ZW56ZXJvID09IDApIHsKLQkJcmMgPSBlaWdodGJpdCA/IEZUXzhC SVQgOiBGVF83QklUOwotCSAgICB9Ci0JfQotCWdvdG8geHNjYW5maWxlOwkJCS8qIFNlZW1zIHRv IGJlIFVDUy0yICovCi0gICAgfQotCi0vKiBJZiBub25lIG9mIHRoZSBhYm92ZSwgaXQncyBwcm9i YWJseSBub3QgVW5pY29kZS4gICovCi0KLSAgICBpZiAoIWVpZ2h0Yml0KSB7CQkJLyogSXQncyA3 LWJpdCAqLwotCWlmIChjMGNvbnRyb2xzKSB7CQkvKiBUaGlzIHdvdWxkIGJlIHN0cmFuZ2UgKi8K LQkgICAgaWYgKChjMG5vbmlzbyA+IDApICYmICh0eHRjeiA9PSAwKSkgewotCQlkZWJ1ZyhGMTAw LCJzY2FuZmlsZSA3LWJpdCBCSU4gKGMwY29uaXNvKSIsIiIsMCk7Ci0JCXJjID0gRlRfQklOOwot CSAgICB9IGVsc2UgewotCQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA3LWJpdCBJU08yMDIyIFRFWFQg KG5vIGMwbm9uaXNvKSIsIiIsMCk7Ci0JCXJjID0gRlRfN0JJVDsKLQkgICAgfQotCX0gZWxzZSB7 CQkJLyogNy1iaXQgdGV4dCAqLwotCSAgICBkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA3LWJpdCBURVhU IChubyBjMGNvbnRyb2xzKSIsIiIsMCk7Ci0JICAgIHJjID0gRlRfN0JJVDsKLQl9Ci0gICAgfSBl bHNlIGlmICghYzBub25pc28gfHwgdHh0Y3opIHsJLyogOC1iaXQgdGV4dCAqLwotCWRlYnVnKEYx MDAsInNjYW5maWxlIDgtYml0IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF84 QklUOwotCXZhbCA9IGMxY29udHJvbHMgPyAxIDogMDsKLSAgICB9IGVsc2UgewkJCQkvKiA4LWJp dCBiaW5hcnkgKi8KLQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA4LWJpdCBCSU4gKGMwbm9uaXNvKSIs IiIsMCk7Ci0JcmMgPSBGVF9CSU47Ci0gICAgfQotCi0jZWxzZSAgLyogIVVOSUNPREUgKi8KLQot ICAgIGlmIChjMG5vbmlzbykgewotCWRlYnVnKEYxMDAsInNjYW5maWxlIDgtYml0IEJJTiAoYzBu b25pc28pIiwiIiwwKTsKLQlyYyA9IEZUX0JJTjsKLSAgICB9IGVsc2UgaWYgKGVpZ2h0Yml0KSB7 Ci0JZGVidWcoRjEwMCwic2NhbmZpbGUgOC1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsK LQlyYyA9IEZUXzhCSVQ7Ci0JdmFsID0gYzFjb250cm9scyA/IDEgOiAwOwotICAgIH0gZWxzZSB7 Ci0JZGVidWcoRjEwMCwic2NhbmZpbGUgNy1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsK LQlyYyA9IEZUXzdCSVQ7Ci0gICAgfQotCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0gIHhzY2Fu ZmlsZToKLSAgICBpZiAoZmxhZykgKmZsYWcgPSB2YWw7Ci0gICAgZGVidWcoRjEwMSwic2NhbmZp bGUgcmVzdWx0ICAgICAiLCIiLHJjKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi0vKgotICBzY2Fu c3RyaW5nIC0gbGlrZSBzY2FuIGZpbGUgYnV0IGZvciBhIHN0cmluZy4KLSAgVGhpcyBpcyBqdXN0 IGEgcXVpY2sgYnV0Y2hlcnkgb2Ygc2NhbmZpbGUgd2l0aG91dCB0aGlua2luZyB0b28gbXVjaC4K LSovCi1pbnQKLXNjYW5zdHJpbmcocykgY2hhciAqIHM7IHsKLSAgICBpbnQgeCwgdmFsID0gLTEs IGNvdW50ID0gMDsJCS8qIFdvcmtlcnMgKi8KLSAgICBpbnQgcmMgPSAtMTsJCQkvKiBSZXR1cm4g Y29kZSAqLwotICAgIGludCBwdiA9IC0xOwkJCS8qIFBhdHRlcm4tbWF0Y2ggdmFsdWUgKi8KLSAg ICBpbnQgYnl0ZXMgPSAwOwkJCS8qIFRvdGFsIGJ5dGUgY291bnQgKi8KLSNpZmRlZiBVTklDT0RF Ci0gICAgdW5zaWduZWQgaW50IGMwLCBjMTsJCS8qIEZpcnN0IDIgZmlsZSBieXRlcyAoZm9yIEJP TSkgKi8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgZXh0ZXJuIGludCBwaXBlc2VuZCwgZmls ZXBlZWs7Ci0KLSAgICByZWdpc3RlciBpbnQgaTsJCQkvKiBMb29wIGNvbnRyb2wgKi8KLSAgICBp bnQgcmVhZHNpemUgPSAwOwkJCS8qIEhvdyBtdWNoIHRvIHJlYWQgKi8KLSAgICBpbnQgZWlnaHRi aXQgPSAwOwkJCS8qIE51bWJlciBvZiBieXRlcyB3aXRoIDh0aCBiaXQgb24gKi8KLSAgICBpbnQg YzBjb250cm9scyA9IDA7CQkJLyogQzAgbm9uLXRleHQgY29udHJvbC1jaGFyIGNvdW50ZXIgKi8K LSAgICBpbnQgYzBub25pc28gPSAwOwkJCS8qIEMwIG5vbi1JU08gY29udHJvbC1jaGFyIGNvdW50 ZXIgKi8KLSAgICBpbnQgYzFjb250cm9scyA9IDA7CQkJLyogQzEgY29udHJvbC1jaGFyYWN0ZXIg Y291bnRlciAqLwotICAgIHVuc2lnbmVkIGludCBjOwkJCS8qIEN1cnJlbnQgY2hhcmFjdGVyICov Ci0gICAgaW50IHJ1bm1heCA9IDA7CQkJLyogTG9uZ2VzdCBydW4gb2YgMCBieXRlcyAqLwotICAg IGludCBydW56ZXJvID0gMDsJCQkvKiBSdW4gb2YgMCBieXRlcyAqLwotICAgIGludCBwY3R6ZXJv ID0gMDsJCQkvKiBQZXJjZW50YWdlIG9mIDAgYnl0ZXMgKi8KLSAgICBpbnQgdHh0Y3ogPSAwOwot Ci0jaWZkZWYgVU5JQ09ERQotICAgIGludCBub3R1dGY4ID0gMDsJCQkvKiBOb256ZXJvIGlmIGRl ZmluaXRlbHkgbm90IFVURi04ICovCi0gICAgaW50IHV0ZjhzdGF0ZSA9IDA7CQkJLyogVVRGLTgg cmVjb2duaXplciBzdGF0ZSAqLwotICAgIGludCBvZGR6ZXJvID0gMDsJCQkvKiBOdW1iZXIgb2Yg MCBieXRlcyBpbiBvZGQgcG9zdGlvbnMgKi8KLSAgICBpbnQgZXZlbnplcm8gPSAwOwkJCS8qIGFu ZCBpbiBldmVuIHBvc2l0aW9ucyAqLwotICAgIGludCBsZm51bCA9IDA7CQkJLyogTnVtYmVyIG9m IDxMRj48TlVMPiBzZXF1ZW5jZXMgKi8KLSAgICBpbnQgY3JsZiA9IDA7CQkJLyogTnVtYmVyIG9m IDxDUkxGPiBzZXF1ZW5jZXMgKi8KLSNlbHNlCi0gICAgaW50IG5vdHV0ZjggPSAxOwotI2VuZGlm IC8qIFVOSUNPREUgKi8KLQotICAgIGNoYXIgKiBidWYgPSBzOwotICAgIGlmICghcykgcyA9ICIi OwotICAgIGNvdW50ID0gc3RybGVuKHMpOwotCi0jaWZkZWYgVU5JQ09ERQotICAgIGlmIChieXRl cyA9PSAwICYmIGNvdW50ID4gMSkgewotCWludCBpbmNsX2NudCA9IDA7Ci0KLQkvKiBGaXJzdCBs b29rIGZvciBCT00gKi8KLQotCWMwID0gKHVuc2lnbmVkKSgodW5zaWduZWQpYnVmWzBdJjB4RkYp OyAvKiBGaXJzdCBmaWxlIGJ5dGUgKi8KLQljMSA9ICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1Zlsx XSYweEZGKTsgLyogU2Vjb25kIGJ5dGUgKi8KLQotCWlmIChjMCA9PSAweEZFICYmIGMxID09IDB4 RkYpIHsJLyogVUNTLTIgQkUgKi8KLQkgICAgcmMgPSBGVF9VQ1MyOwotCSAgICB2YWwgPSAwOwot CSAgICBkZWJ1ZyhGMTExLCJzY2Fuc3RyaW5nIFVDUzIgQk9NIEJFIixja2l0b2EodmFsKSxyYyk7 Ci0JICAgIGluY2xfY250Kys7Ci0JfSBlbHNlIGlmIChjMCA9PSAweEZGICYmIGMxID09IDB4RkUp IHsgLyogVUNTLTIgTEUgKi8KLQkgICAgcmMgPSBGVF9VQ1MyOwotCSAgICB2YWwgPSAxOwotCSAg ICBkZWJ1ZyhGMTExLCJzY2Fuc3RyaW5nIFVDUzIgQk9NIExFIixja2l0b2EodmFsKSxyYyk7Ci0J ICAgIGluY2xfY250Kys7Ci0JfSBlbHNlIGlmIChjb3VudCA+IDIpIGlmIChjMCA9PSAweEVGICYm IGMxID09IDB4QkIgJiYKLQkJICAgKHVuc2lnbmVkKSgodW5zaWduZWQpYnVmWzJdJjB4RkYpID09 IDB4QkYpIHsKLQkgICAgcmMgPSBGVF9VVEY4OwotCSAgICBkZWJ1ZyhGMTExLCJzY2Fuc3RyaW5n IFVURjggQk9NIixja2l0b2EodmFsKSxyYyk7Ci0JICAgIGluY2xfY250Kys7Ci0JfQotCWlmIChp bmNsX2NudCkgewkJLyogSGF2ZSBCT00gKi8KLQkgICAgYnl0ZXMgKz0gY291bnQ7Ci0JICAgIGdv dG8geHNjYW5zdHJpbmc7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSAgICBi eXRlcyArPSBjb3VudDsJCQkvKiBDb3VudCBieXRlcyByZWFkICovCi0KLSAgICBmb3IgKGkgPSAw OyBpIDwgY291bnQ7IGkrKykgewkvKiBGb3IgZWFjaCBieXRlLi4uICovCi0JYyA9ICh1bnNpZ25l ZClidWZbaV07CS8qIEZvciBlYXNlIG9mIHJlZmVyZW5jZSAqLwotCWlmICghYykgewkJCS8qIFpl cm8gYnl0ZT8gKi8KLQkgICAgZ290byB4c2NhbnN0cmluZzsJLyogTnVsbCB0ZXJtaW5hdGVkIHN0 cmluZyAqLwotCX0KLQlpZiAoKGMgJiAweDgwKSA9PSAwKSB7CS8qIFdlIGhhdmUgYSA3LWJpdCBi eXRlICovCi0jaWZkZWYgVU5JQ09ERQotCSAgICBpZiAoaSA+IDAgJiYgYyA9PSAxMCkgeyAvKiBM aW5lZmVlZCAqLwotCQlpZiAoYnVmW2ktMV0gPT0gMCkgbGZudWwrKzsgLyogUHJlY2VkZWQgYnkg TlVMICovCi0JCWVsc2UgaWYgKGJ1ZltpLTFdID09IDEzKSBjcmxmKys7IC8qIG9yIGJ5IENSLi4u ICovCi0JICAgIH0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0JICAgIGlmIChjIDwgJyAnKSB7CQkv KiBDaGVjayBmb3IgQ08gY29udHJvbHMgKi8KLQkJaWYgKGMgIT0gTEYgJiYgYyAhPSBDUiAmJiBj ICE9IEhUICYmIGMgIT0gRkYpIHsKLQkJICAgIGMwY29udHJvbHMrKzsKLQkJICAgIGlmIChjICE9 IEVTQyAmJiBjICE9IFNPICYmIGMgIT0gU0kpCi0JCSAgICAgIGMwbm9uaXNvKys7Ci0JCX0KLQkJ aWYgKChjID09ICdcMDMyJykJLyogQ3RybC1aICovCi0JCSAgICApIHsKLQkJICAgIGMwY29udHJv bHMtLTsKLQkJICAgIGMwbm9uaXNvLS07Ci0JCX0KLQkgICAgfQotI2lmZGVmIFVOSUNPREUKLQkg ICAgaWYgKCFub3R1dGY4ICYmIHV0ZjhzdGF0ZSkgeyAvKiBJbiBVVEYtOCBzZXF1ZW5jZT8gKi8K LQkJdXRmOHN0YXRlID0gMDsKLQkJZGVidWcoRjAwMCwic2NhbnN0cmluZyIsIjctYml0IGJ5dGUg aW4gVVRGOCBzZXF1ZW5jZSIsYyk7Ci0JCW5vdHV0ZjgrKzsJCS8qIFRoZW4gaXQncyBub3QgVVRG LTggKi8KLQkJY29udGludWU7Ci0JICAgIH0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0JfSBlbHNl IHsJCQkvKiBXZSBoYXZlIGFuIDgtYml0IGJ5dGUgKi8KLQkgICAgZWlnaHRiaXQrKzsJCS8qIENv dW50IGl0ICovCi0JICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4QTApIC8qIENoZWNrIGZvciBD MSBjb250cm9scyAqLwotCSAgICAgIGMxY29udHJvbHMrKzsKLSNpZmRlZiBVTklDT0RFCi0JICAg IGlmICghbm90dXRmOCkgewkJLyogSWYgaXQgbWlnaHQgc3RpbGwgYmUgVVRGOC4uLiAqLwotCQlz d2l0Y2ggKHV0ZjhzdGF0ZSkgeyAvKiBFbnRlciB0aGUgVVRGLTggc3RhdGUgbWFjaGluZSAqLwot CQkgIGNhc2UgMDoJCSAvKiBGaXJzdCBieXRlLi4uICovCi0JCSAgICBpZiAoKGMgJiAweEUwKSA9 PSAweEMwKSB7IC8qIFRlbGxzIG51bWJlciBvZiAqLwotCQkJdXRmOHN0YXRlID0gMTsgICAgICAg IC8qIHN1YnNlcXVlbnQgYnl0ZXMgKi8KLQkJICAgIH0gZWxzZSBpZiAoKGMgJiAweEYwKSA9PSAw eEUwKSB7Ci0JCQl1dGY4c3RhdGUgPSAyOwotCQkgICAgfSBlbHNlIGlmICgoYyAmIDB4RjgpID09 IDB4RjApIHsKLQkJCXV0ZjhzdGF0ZSA9IDM7Ci0JCSAgICB9IGVsc2UgewotCQkJbm90dXRmOCsr OwotCQkgICAgfQotCQkgICAgYnJlYWs7Ci0JCSAgY2FzZSAxOgkJLyogU3Vic2VxdWVudCBieXRl ICovCi0JCSAgY2FzZSAyOgotCQkgIGNhc2UgMzoKLQkJICAgIGlmICgoYyAmIDB4QzApICE9IDB4 ODApIHsgLyogTXVzdCBzdGFydCB3aXRoIDEwICovCi0JCQlkZWJ1ZyhGMDAwLCJzY2Fuc3RyaW5n IiwKLQkJCSAgICAgICJiYWQgYnl0ZSBpbiBVVEY4IHNlcXVlbmNlIixjKTsKLQkJCW5vdHV0Zjgr KzsKLQkJCWJyZWFrOwotCQkgICAgfQotCQkgICAgdXRmOHN0YXRlLS07CS8qIEdvb2QsIG9uZSBs ZXNzIGluIHRoaXMgc2VxdWVuY2UgKi8KLQkJICAgIGJyZWFrOwotCQkgIGRlZmF1bHQ6CQkvKiBT aG91bGRuJ3QgaGFwcGVuICovCi0JCSAgICBkZWJ1ZyhGMTExLCJzY2Fuc3RyaW5nIiwiYmFkIFVU Rjggc3RhdGUiLHV0ZjhzdGF0ZSk7Ci0JCSAgICBub3R1dGY4Kys7Ci0JCX0KLQkgICAgfQotI2Vu ZGlmIC8qIFVOSUNPREUgKi8KLQl9Ci0gICAgfQotICAgIGlmIChieXRlcyA9PSAwKQkJCS8qIElm IG5vdGhpbmcgd2FzIHJlYWQgKi8KLSAgICAgIHJldHVybigtMSk7CQkJLyogd2UncmUgZG9uZS4g Ki8KLQotI2lmZGVmIFVOSUNPREUKLSAgICBpZiAoYnl0ZXMgPiAxMDApCQkJLyogQnl0ZXMgaXMg bm90IDAgKi8KLSAgICAgIHBjdHplcm8gPSAoZXZlbnplcm8gKyBvZGR6ZXJvKSAvIChieXRlcyAv IDEwMCk7Ci0gICAgZWxzZQotICAgICAgcGN0emVybyA9ICgoZXZlbnplcm8gKyBvZGR6ZXJvKSAq IDEwMCkgLyBieXRlczsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSNpZmRlZiBVTklDT0RFCi0g ICAgeCA9IGVpZ2h0Yml0ID8gYnl0ZXMgLyAyMCA6IGJ5dGVzIC8gNDsgLyogRm9yIFVDUy0yLi4u ICovCi0KLSAgICBpZiAocnVubWF4ID4gMikgewkJCS8qIEZpbGUgaGFzIHJ1biBvZiBtb3JlIHRo YW4gMiBOVUxzICovCi0JZGVidWcoRjEwMCwic2NhbnN0cmluZyBCSU4gcnVubWF4IiwiIiwwKTsK LQlyYyA9IEZUX0JJTjsJCQkvKiBzbyBpdCBjYW4ndCBiZSBhbnkga2luZCBvZiB0ZXh0LiAqLwot CWdvdG8geHNjYW5zdHJpbmc7Ci0KLSAgICB9IGVsc2UgaWYgKHJjID09IEZUX1VDUzIgfHwgKHJj ID09IEZUX1VURjggJiYgcnVubWF4ID09IDApKSB7Ci0JZ290byB4c2NhbnN0cmluZzsJCQkvKiBG aWxlIHN0YXJ0cyB3aXRoIGEgQk9NICovCi0KLSAgICB9IGVsc2UgaWYgKGVpZ2h0Yml0ID4gMCAm JiAhbm90dXRmOCkgeyAvKiBGaWxlIGhhcyA4LWJpdCBkYXRhICovCi0JaWYgKHJ1bm1heCA+IDAp IHsJCSAgIC8qIGFuZCBydW5zIG9mIE5VTHMgKi8KLQkgICAgZGVidWcoRjEwMCwic2NhbnN0cmlu ZyBCSU4gKG5uVVRGOCkgcnVubWF4IiwiIiwwKTsKLQkgICAgcmMgPSBGVF9CSU47CQkgICAvKiBV VEYtOCBkb2Vzbid0IGhhdmUgTlVMcyAqLwotCX0gZWxzZSB7CQkJICAgLyogTm8gTlVMcyAqLwot CSAgICBkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIFVURjggKG5uVVRGOCArIHJ1bm1heCA9PSAwKSIs IiIsMCk7Ci0JICAgIHJjID0gRlRfVVRGODsJCSAgIC8qIGFuZCBub3Qgbm90IFVURi04LCBzbyBp cyBVVEYtOCAqLwotCX0KLQlnb3RvIHhzY2Fuc3RyaW5nOwotICAgIH0KLS8qCi0gIEl0IHNlZW1z IHRvIGJlIFVDUy0yIGJ1dCBsZXQncyBiZSBtb3JlIGNlcnRhaW4gc2luY2UgdGhlcmUgaXMgbm8g Qk9NLi4uCi0gIElmIHRoZSBudW1iZXIgb2YgNy0gYW5kIDgtYml0IGNoYXJhY3RlcnMgaXMgYXBw cm94aW1hdGVseSBlcXVhbCwgaXQgbWlnaHQKLSAgYmUgYSBjb21wcmVzc2VkIGZpbGUuICBJbiB0 aGlzIGNhc2Ugd2UgZGVjaWRlIGJhc2VkIG9uIHRoZSBuYW1lLgotKi8KLSAgICBpZiAocmMgPT0g RlRfVUNTMikgewotCWlmIChieXRlcyA8IDEwMCkgewotCSAgICBpZiAob2RkemVybyAhPSAwICYm IGV2ZW56ZXJvICE9IDApIHsKLQkJZGVidWcoRjEwMCwic2NhbnN0cmluZyBzbWFsbCBVQ1MyIGRv dWJ0ZnVsIiwiIiwwKTsKLQkJcmMgPSBGVF9CSU47Ci0JCWdvdG8geHNjYW5zdHJpbmc7Ci0JICAg IH0gZWxzZSBpZiAob2RkemVybyA9PSAwICYmIGV2ZW56ZXJvID09IDApIHsKLQkJcmMgPSBlaWdo dGJpdCA/IEZUXzhCSVQgOiBGVF83QklUOwotCSAgICB9Ci0JfQotCWdvdG8geHNjYW5zdHJpbmc7 CQkJLyogU2VlbXMgdG8gYmUgVUNTLTIgKi8KLSAgICB9Ci0KLS8qIElmIG5vbmUgb2YgdGhlIGFi b3ZlLCBpdCdzIHByb2JhYmx5IG5vdCBVbmljb2RlLiAgKi8KLQotICAgIGlmICghZWlnaHRiaXQp IHsJCQkvKiBJdCdzIDctYml0ICovCi0JaWYgKGMwY29udHJvbHMpIHsJCS8qIFRoaXMgd291bGQg YmUgc3RyYW5nZSAqLwotCSAgICBpZiAoKGMwbm9uaXNvID4gMCkgJiYgKHR4dGN6ID09IDApKSB7 Ci0JCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgNy1iaXQgQklOIChjMGNvbmlzbykiLCIiLDApOwot CQlyYyA9IEZUX0JJTjsKLQkgICAgfSBlbHNlIHsKLQkJZGVidWcoRjEwMCwic2NhbnN0cmluZyA3 LWJpdCBJU08yMDIyIFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7Ci0JCXJjID0gRlRfN0JJVDsK LQkgICAgfQotCX0gZWxzZSB7CQkJLyogNy1iaXQgdGV4dCAqLwotCSAgICBkZWJ1ZyhGMTAwLCJz Y2Fuc3RyaW5nIDctYml0IFRFWFQgKG5vIGMwY29udHJvbHMpIiwiIiwwKTsKLQkgICAgcmMgPSBG VF83QklUOwotCX0KLSAgICB9IGVsc2UgaWYgKCFjMG5vbmlzbyB8fCB0eHRjeikgewkvKiA4LWJp dCB0ZXh0ICovCi0JZGVidWcoRjEwMCwic2NhbnN0cmluZyA4LWJpdCBURVhUIChubyBjMG5vbmlz bykiLCIiLDApOwotCXJjID0gRlRfOEJJVDsKLQl2YWwgPSBjMWNvbnRyb2xzID8gMSA6IDA7Ci0g ICAgfSBlbHNlIHsJCQkJLyogOC1iaXQgYmluYXJ5ICovCi0JZGVidWcoRjEwMCwic2NhbnN0cmlu ZyA4LWJpdCBCSU4gKGMwbm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF9CSU47Ci0gICAgfQotCi0j ZWxzZSAgLyogIVVOSUNPREUgKi8KLQotICAgIGlmIChjMG5vbmlzbykgewotCWRlYnVnKEYxMDAs InNjYW5zdHJpbmcgOC1iaXQgQklOIChjMG5vbmlzbykiLCIiLDApOwotCXJjID0gRlRfQklOOwot ICAgIH0gZWxzZSBpZiAoZWlnaHRiaXQpIHsKLQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDgtYml0 IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF84QklUOwotCXZhbCA9IGMxY29u dHJvbHMgPyAxIDogMDsKLSAgICB9IGVsc2UgewotCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgNy1i aXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKLQlyYyA9IEZUXzdCSVQ7Ci0gICAgfQotCi0j ZW5kaWYgLyogVU5JQ09ERSAqLwotCi0gIHhzY2Fuc3RyaW5nOgotICAgIGRlYnVnKEYxMDEsInNj YW5zdHJpbmcgcmVzdWx0ICAgICAiLCIiLHJjKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi0KLQot LyogIEYgSSBMIEUgUyBFIEwgRSBDIFQgIC0tICBTZWxlY3QgdGhpcyBmaWxlIGZvciBzZW5kaW5n ICAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZmlsZXNlbGVjdCgKLSAgICBjaGFyICpmLCBj aGFyICpzYSwgY2hhciAqc2IsIGNoYXIgKnNuYSwgY2hhciAqc25iLAotICAgIENLX09GRl9UIG1p bnNpeiwgQ0tfT0ZGX1QgbWF4c2l6LAotICAgIGludCBuYnUsIGludCBueGxpc3QsCi0gICAgY2hh ciAqKiB4bGlzdAotKQotI2Vsc2UKLWZpbGVzZWxlY3QoZixzYSxzYixzbmEsc25iLG1pbnNpeixt YXhzaXosbmJ1LG54bGlzdCx4bGlzdCkKLSBjaGFyICpmLCpzYSwqc2IsKnNuYSwqc25iOyBDS19P RkZfVCBtaW5zaXosbWF4c2l6OwotIGludCBuYnUsbnhsaXN0OyBjaGFyICoqIHhsaXN0OwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi0vKiBmaWxlc2VsZWN0ICovIHsKLSAgICBjaGFyICpmZGF0ZTsK LSAgICBpbnQgbjsKLSAgICBDS19PRkZfVCB6OwotCi0gICAgZGVidWcoRjExMSwiZmlsZXNlbGVj dCBtaW5zaXoiLGNrZnN0b2EobWluc2l6KSxtaW5zaXopOwotICAgIGRlYnVnKEYxMTEsImZpbGVz ZWxlY3QgbWF4c2l6Iixja2ZzdG9hKG1heHNpeiksbWF4c2l6KTsKLSAgICBkZWJ1ZyhGMTExLCJm aWxlc2VsZWN0IChDS19PRkZfVCktMSIsY2tmc3RvYSgoQ0tfT0ZGX1QpLTEpLChDS19PRkZfVCkt MSk7Ci0KLSAgICBpZiAoIXNhKSBzYSA9ICIiOwotICAgIGlmICghc2IpIHNiID0gIiI7Ci0gICAg aWYgKCFzbmEpIHNuYSA9ICIiOwotICAgIGlmICghc25iKSBzbmIgPSAiIjsKLQotI2lmZGVmIENL U1lNTElOSwotI2lmbmRlZiBOT0lDUAotI2lmbmRlZiBOT1hGRVIKLSAgICBpZiAobm9saW5rcykg ewotCUNLX09GRl9UIHp6OwotCXp6ID0gemdldGZzKGYpOwotCWRlYnVnKEYxMTEsImZpbGVzZWxl Y3QgTk9MSU5LUyB6Z2V0ZnMiLGYsenopOwotCWlmICh6eiA8IChDS19PRkZfVCkwKQotCSAgcmV0 dXJuKDApOwotCWRlYnVnKEYxMTEsImZpbGVzZWxlY3QgTk9MSU5LUyB6Z2ZzX2xpbmsiLGYsemdm c19saW5rKTsKLQlpZiAoemdmc19saW5rKQotCSAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAv KiBOT1hGRVIgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwot Ci0gICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCIsZiwwKTsKLSAgICBpZiAoKnNhIHx8ICpzYiB8 fCAqc25hIHx8ICpzbmIpIHsKLQlmZGF0ZSA9IHpmY2RhdChmKTsJCS8qIERhdGUvdGltZSBvZiB0 aGlzIGZpbGUgKi8KLQlpZiAoIWZkYXRlKSBmZGF0ZSA9ICIiOwotCW4gPSBzdHJsZW4oZmRhdGUp OwotCWRlYnVnKEYxMTEsImZpbGVzZWxlY3QgZmRhdGUiLGZkYXRlLG4pOwotCWlmIChuICE9IDE3 KQkJCS8qIEZhaWxlZCB0byBnZXQgaXQgKi8KLQkgIHJldHVybigxKTsKLQkvKiAvQUZURVI6ICov Ci0JaWYgKHNhWzBdICYmIChzdHJjbXAoZmRhdGUsKGNoYXIgKilzYSkgPD0gMCkpIHsKLQkgICAg ZGVidWcoRjExMCwiZmlsZXNlbGVjdCBzYSIsc2EsMCk7Ci0JICAgIC8qIHRsb2coRjExMCwiU2tp cHBpbmcgKHRvbyBvbGQpIixmLDApOyAqLwotCSAgICByZXR1cm4oMCk7Ci0JfQotCS8qIC9CRUZP UkU6ICovCi0JaWYgKHNiWzBdICYmIChzdHJjbXAoZmRhdGUsKGNoYXIgKilzYikgPj0gMCkpIHsK LQkgICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBzYiIsc2IsMCk7Ci0JICAgIC8qIHRsb2coRjEx MCwiU2tpcHBpbmcgKHRvbyBuZXcpIixmLDApOyAqLwotCSAgICByZXR1cm4oMCk7Ci0JfQotCS8q IC9OT1QtQUZURVI6ICovCi0JaWYgKHNuYVswXSAmJiAoc3RyY21wKGZkYXRlLChjaGFyICopc25h KSA+IDApKSB7Ci0JICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc25hIixzbmEsMCk7Ci0JICAg IC8qIHRsb2coRjExMCwiU2tpcHBpbmcgKHRvbyBuZXcpIixmLDApOyAqLwotCSAgICByZXR1cm4o MCk7Ci0JfQotCS8qIC9OT1QtQkVGT1JFOiAqLwotCWlmIChzbmJbMF0gJiYgKHN0cmNtcChmZGF0 ZSwoY2hhciAqKXNuYikgPCAwKSkgewotCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNuYiIs c25iLDApOwotCSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5nICh0b28gb2xkKSIsZiwwKTsgKi8K LQkgICAgcmV0dXJuKDApOwotCX0KLSAgICB9Ci0gICAgLyogU21hbGxlciBvciBsYXJnZXIgKi8K LSAgICBpZiAobWluc2l6ID4gKENLX09GRl9UKS0xIHx8IG1heHNpeiA+IChDS19PRkZfVCktMSkg ewotCXogPSB6Y2hraShmKTsJCQkvKiBHZXQgc2l6ZSAqLwotCWRlYnVnKEYxMDEsImZpbGVzZWxl Y3QgZmlsZXNpemUiLCIiLHopOwotCWlmICh6IDwgKENLX09GRl9UKTApCi0JICByZXR1cm4oMSk7 Ci0JaWYgKChtaW5zaXogPiAoQ0tfT0ZGX1QpLTEpICYmICh6ID49IG1pbnNpeikpIHsKLQkgICAg ZGVidWcoRjExMSwiZmlsZXNlbGVjdCBtaW5zaXogc2tpcHBpbmciLGYsbWluc2l6KTsKLQkgICAg LyogdGxvZyhGMTExLCJTa2lwcGluZyAodG9vIGJpZykiLGYseik7ICovCi0JICAgIHJldHVybigw KTsKLQl9Ci0JaWYgKChtYXhzaXogPiAoQ0tfT0ZGX1QpLTEpICYmICh6IDw9IG1heHNpeikpIHsK LQkgICAgZGVidWcoRjExMSwiZmlsZXNlbGVjdCBtYXhzaXogc2tpcHBpbmciLGYsbWF4c2l6KTsK LQkgICAgLyogdGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIHNtYWxsKSIsZiwwKTsgKi8KLQkgICAg cmV0dXJuKDApOwotCX0KLSAgICB9Ci0gICAgaWYgKG5idSkgewkJCQkvKiBTa2lwcGluZyBiYWNr dXAgZmlsZXM/ICovCi0JaWYgKGNrbWF0Y2goCi0jaWZkZWYgQ0tSRUdFWAotCQkgICAgIiouflsw LTldKn4iCS8qIE5vdCBwZXJmZWN0IGJ1dCBjbG9zZSBlbm91Z2guICovCi0jZWxzZQotCQkgICAg Iioufip+IgkJLyogTGVzcyBjbG9zZS4gKi8KLSNlbmRpZiAvKiBDS1JFR0VYICovCi0JCSAgICAs ZixmaWxlY2FzZSwxKSkgewotCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNraXBwaW5nIGJh Y2t1cCIsZiwwKTsKLQkgICAgcmV0dXJuKDApOwotCX0KLSAgICB9Ci0gICAgZm9yIChuID0gMDsg eGxpc3QgJiYgbiA8IG54bGlzdDsgbisrKSB7Ci0JaWYgKCF4bGlzdFtuXSkgewotCSAgICBkZWJ1 ZyhGMTAxLCJmaWxlc2VsZWN0IHhsaXN0IGVtcHR5IiwwLG4pOwotCSAgICBicmVhazsKLQl9Ci0J aWYgKGNrbWF0Y2goeGxpc3Rbbl0sZixmaWxlY2FzZSwxKSkgewotCSAgICBkZWJ1ZyhGMTExLCJm aWxlc2VsZWN0IHhsaXN0Iix4bGlzdFtuXSxuKTsKLQkgICAgZGVidWcoRjExMCwiZmlsZXNlbGVj dCBza2lwcGluZyIsZiwwKTsKLQkgICAgcmV0dXJuKDApOwotCX0KLSAgICB9Ci0gICAgaWYgKHhm aWxldHlwZSA+IC0xKSB7Ci0JbiA9IHNjYW5maWxlKGYsTlVMTCxuc2NhbmZpbGUpOwotCWlmIChu IDwgMCkgewotCSAgICBuID0gYmluYXJ5ID8gMSA6IDA7Ci0JfSBlbHNlIHsKLQkgICAgbiA9IChu ID09IEZUX0JJTikgPyAxIDogMDsKLQl9Ci0JaWYgKG4gIT0geGZpbGV0eXBlKQotCSAgcmV0dXJu KDApOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNlbGVjdGluZyIsZiwwKTsK LSAgICByZXR1cm4oMSk7Ci19Ci0KLQotI2lmZGVmIFRDUFNPQ0tFVAotI2lmZGVmIE5UCi1leHRl cm4gaW50IFdTQVNhZmVUb0NhbmNlbDsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLwotCi1WT0lECi1zZXRmbG93KCkgewotICAgIGV4dGVybiBpbnQgZmxvdywgYXV0b2Zs b3csIG1kbXR5cCwgY3h0eXBlLCBjeGZsb3dbXTsKLSNpZm5kZWYgTk9ESUFMCi0gICAgZXh0ZXJu IGludCBkaWFsY2FwYXMsIGRpYWxmYzsKLSAgICBleHRlcm4gTURNSU5GICogbW9kZW1wW107Ci0g ICAgTURNSU5GICogcCA9IE5VTEw7Ci0gICAgbG9uZyBiaXRzID0gMDsKLSNlbmRpZiAvKiBOT0RJ QUwgKi8KLQotICAgIGRlYnVnKEYxMDEsInNldGZsb3cgYXV0b2Zsb3ciLCIiLGF1dG9mbG93KTsK LQotLyogI2lmZGVmIENPTU1FTlQgKi8KLS8qIFdIWSBXQVMgVEhJUyBDT01NRU5URUQgT1VUPyAq LwotICAgIGlmICghYXV0b2Zsb3cpICAgICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgaWYgRkxP VyBpcyBBVVRPICovCi0gICAgICByZXR1cm47Ci0vKiAjZW5kaWYgKi8gLyogQ09NTUVOVCAqLwot Ci0gICAgZGVidWcoRjEwMSwic2V0ZmxvdyBsb2NhbCIsIiIsbG9jYWwpOwotICAgIGRlYnVnKEYx MDEsInNldGZsb3cgbmV0d29yayIsIiIsbmV0d29yayk7Ci0gICAgZGVidWcoRjEwMSwic2V0Zmxv dyBjeHR5cGUiLCIiLGN4dHlwZSk7Ci0KLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgaWYgKG5ldHdv cmsgJiYgaXN0bmNvbXBvcnQoKSkgewotCWZsb3cgPSBjeGZsb3dbQ1hUX01PREVNXTsKLSAgICAg ICAgZGVidWcoRjEwMSwic2V0ZmxvdyBUTl9DT01QT1JUIGZsb3ciLCIiLGZsb3cpOwotICAgICAg ICByZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQotICAgIGlmIChuZXR3 b3JrIHx8ICFsb2NhbCB8fCBjeHR5cGUgPT0gQ1hUX0RJUkVDVCkgewotICAgICAgICBmbG93ID0g Y3hmbG93W2N4dHlwZV07ICAgICAgICAgIC8qIFNldCBhcHByb3ByaWF0ZSBmbG93IGNvbnRyb2wg Ki8KLSAgICAgICAgZGVidWcoRjEwMSwic2V0ZmxvdyBmbG93IiwiIixmbG93KTsKLSAgICAgICAg cmV0dXJuOwotICAgIH0KLSAgICBpZiAoY3h0eXBlICE9IENYVF9NT0RFTSkgICAgICAgICAgICAv KiBDb25uZWN0aW9uIHR5cGUgc2hvdWxkIGJlIG1vZGVtICovCi0gICAgICByZXR1cm47Ci0KLSNp Zm5kZWYgTk9ESUFMCi0gICAgYml0cyA9IGRpYWxjYXBhczsgICAgICAgICAgICAgICAgICAgLyog Q2FwYWJpbGl0eSBiaXRzICovCi0gICAgaWYgKCFiaXRzKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogTm8gYml0cz8gKi8KLSAgICAgICAgcCA9IG1vZGVtcFttZG10eXBdOyAgICAgICAgICAg ICAvKiBMb29rIGluIG1vZGVtIGluZm8gc3RydWN0dXJlICovCi0gICAgICAgIGlmIChwKQotICAg ICAgICAgIGJpdHMgPSBwLT5jYXBhczsKLSAgICB9Ci0gICAgaWYgKGRpYWxmYyA9PSBGTE9fQVVU TykgeyAgICAgICAgICAgLyogSWYgRElBTCBmbG93IGlzIEFVVE8gKi8KLSNpZmRlZiBDS19SVFND VFMgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBjYW4gZG8gUlRTL0NUUyBmbG93IGNv bnRyb2wgKi8KLSAgICAgICAgaWYgKGJpdHMgJiBDS0RfSFcpICAgICAgICAgICAgICAvKiBhbmQg bW9kZW0gY2FuIGRvIGl0IHRvbyAqLwotICAgICAgICAgIGZsb3cgPSBGTE9fUlRTQzsgICAgICAg ICAgICAgIC8qIHRoZW4gc3dpdGNoIHRvIFJUUy9DVFMgKi8KLSAgICAgICAgZWxzZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndpc2UgKi8KLSAgICAgICAgICBmbG93ID0gRkxP X1hPTlg7ICAgICAgICAgICAgICAvKiB1c2UgWG9uL1hvZmYuICovCi0jZWxzZQotI2lmbmRlZiBO RVhUCi0jaWZuZGVmIElSSVgKLSAgICAgICAgZmxvdyA9IEZMT19YT05YOyAgICAgICAgICAgICAg ICAvKiBVc2UgWG9uL1hvZmYuICovCi0jZW5kaWYgLyogSVJJWCAqLwotI2VuZGlmIC8qIE5FWFQg Ki8KLSNlbmRpZiAvKiBDS19SVFNDVFMgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9ESUFMICovCi0g ICAgZGVidWcoRjEwMSwic2V0ZmxvdyBtb2RlbSBmbG93IiwiIixmbG93KTsKLSAgICByZXR1cm47 Ci19Ci0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIENLX1RSSUdHRVIKLQotLyogIEEgVSBUIE8g RSBYIEkgVCBDIEggSyAgLS0gIENoZWNrIGZvciBDT05ORUNULW1vZGUgdHJpZ2dlciBzdHJpbmcg ICovCi0vKgotICBSZXR1cm5zIC0xIGlmIHRyaWdnZXIgbm90IGZvdW5kLCBvciBlbHNlIHRoZSB0 cmlnZ2VyIGluZGV4LCAwIG9yIGdyZWF0ZXIuCi0gIChSZXBsYWNlIHdpdGggZmFuY2llciBhbmQg bW9yZSBlZmZpY2llbnQgbWF0Y2hlciBsYXRlci4uLikKLSAgTk9URTogdG8gcHJldmVudCB1bm5l Y2Vzc2FyeSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLCBjYWxsIHRoaXMgd2F5OgotCi0gICAgeCA9 IHR0X3RyaWdnZXJbMF0gPyBhdXRvZXhpdGNoayhjKSA6IC0xOwotCi0qLwotaW50Ci0jaWZkZWYg Q0tfQU5TSUMKLWF1dG9leGl0Y2hrKENIQVIgYykKLSNlbHNlCi1hdXRvZXhpdGNoayhjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGF1dG9leGl0Y2hrICovIHsKLSAgICBleHRl cm4gQ0hBUiAqIHR0X3RybWF0Y2hbXTsKLSAgICBleHRlcm4gY2hhciAqIHR0X3RyaWdnZXJbXTsK LSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgVFJJR0dFUlM7IGkrKykgewotICAgICAg ICBpZiAoIXR0X3RyaWdnZXJbaV0pIHsgICAgICAgICAgIC8qIE5vIG1vcmUgdHJpZ2dlcnMgaW4g bGlzdCAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnR0X3RyaWdn ZXJbaV0pIHsKLSAgICAgICAgICAgIGlmICghdHRfdHJtYXRjaFtpXSkgICAgICAgICAvKiBKdXN0 IHN0YXJ0aW5nPyAqLwotICAgICAgICAgICAgICB0dF90cm1hdGNoW2ldID0gKENIQVIgKil0dF90 cmlnZ2VyW2ldOyAvKiBTZXQgbWF0Y2ggcG9pbnRlciAqLwotICAgICAgICAgICAgaWYgKGMgPT0g KnR0X3RybWF0Y2hbaV0pIHsgIC8qIENvbXBhcmUgdGhpcyBjaGFyYWN0ZXIgKi8KLSAgICAgICAg ICAgICAgICB0dF90cm1hdGNoW2ldKys7ICAgICAgICAvKiBJdCBtYXRjaGVzICovCi0gICAgICAg ICAgICAgICAgaWYgKCEqdHRfdHJtYXRjaFtpXSkgeyAgLyogRW5kIG9mIG1hdGNoIHN0cmluZz8g Ki8KLSAgICAgICAgICAgICAgICAgICAgdHRfdHJtYXRjaFtpXSA9IChDSEFSICopIHR0X3RyaWdn ZXJbaV07IC8qIFllcywgcmV3aW5kLCAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJhdXRvZXhpdGNoayIsdHRfdHJpZ2dlcltpXSxpKTsgLyogbG9nLCAqLwotICAgICAgICAgICAg ICAgICAgICByZXR1cm4oaSk7ICAgICAgICAgIC8qIGFuZCByZXR1cm4gc3VjY2VzcyAqLwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAv KiBObyBtYXRjaCAqLwotICAgICAgICAgICAgICB0dF90cm1hdGNoW2ldID0gKENIQVIgKikgdHRf dHJpZ2dlcltpXTsgLyogUmV3aW5kIG1hdGNoIHN0cmluZyAqLwotICAgICAgICB9IC8qIGFuZCBn byBvbiB0aGUgbmV4dCBtYXRjaCBzdHJpbmcgKi8KLSAgICB9Ci0gICAgcmV0dXJuKC0xKTsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTm8gbWF0Y2ggZm91bmQgKi8KLX0KLSNlbmRpZiAvKiBD S19UUklHR0VSICovCi0KLSNpZm5kZWYgTk9TSE9XCi0vKiAgUyBIIE8gTSBEIE0gIC0tICBTaG93 IG1vZGVtIHNpZ25hbHMgICovCi0KLVZPSUQKLXNob21kbSgpIHsKLS8qCi0gIE5vdGUgdXNlIG9m ICJcclxuIiB0byBtYWtlIHN1cmUgdGhpcyByZXBvcnQgcHJpbnRzIHJpZ2h0LCBldmVuIHdoZW4K LSAgY2FsbGVkIGR1cmluZyBDT05ORUNUIG1vZGUuCi0qLwotICAgIGludCB5OwotICAgIHkgPSB0 dGdtZG0oKTsKLSAgICBzd2l0Y2ggKHkpIHsKLSAgICAgIGNhc2UgLTM6IHByaW50ZigKLSAgICAg ICAgICAgICAgICAgIk1vZGVtIHNpZ25hbHMgdW5hdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uIG9m IEtlcm1pdFxyXG4iKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAtMjogcHJp bnRmKCJObyBtb2RlbSBjb250cm9sIGZvciB0aGlzIGRldmljZVxyXG4iKTsgYnJlYWs7Ci0gICAg ICBjYXNlIC0xOiBwcmludGYoIk1vZGVtIHNpZ25hbHMgdW5hdmFpbGFibGVcclxuIik7IGJyZWFr OwotICAgICAgZGVmYXVsdDoKLSNpZm5kZWYgTUFDCi0gICAgICAgIHByaW50ZigKLSAgICAgICAg ICAiIENhcnJpZXIgRGV0ZWN0ICAgICAgKENEKTogICVzXHJcbiIsKHkgJiBCTV9EQ0QpID8gIk9u IjogIk9mZiIpOwotICAgICAgICBwcmludGYoCi0gICAgICAgICAgIiBEYXRhc2V0IFJlYWR5ICAg ICAgIChEU1IpOiAlc1xyXG4iLCh5ICYgQk1fRFNSKSA/ICJPbiI6ICJPZmYiKTsKLSNlbmRpZiAv KiBNQUMgKi8KLSAgICAgICAgcHJpbnRmKAotICAgICAgICAgICIgQ2xlYXIgVG8gU2VuZCAgICAg ICAoQ1RTKTogJXNcclxuIiwoeSAmIEJNX0NUUykgPyAiT24iOiAiT2ZmIik7Ci0jaWZuZGVmIFNU UkFUVVMKLSNpZm5kZWYgTUFDCi0gICAgICAgIHByaW50ZigKLSAgICAgICAgICAiIFJpbmcgSW5k aWNhdG9yICAgICAgKFJJKTogICVzXHJcbiIsKHkgJiBCTV9STkcpID8gIk9uIjogIk9mZiIpOwot I2VuZGlmIC8qIE1BQyAqLwotICAgICAgICBwcmludGYoCi0gICAgICAgICAgIiBEYXRhIFRlcm1p bmFsIFJlYWR5IChEVFIpOiAlc1xyXG4iLAotI2lmZGVmIE5UCi0gICAgICAgICAgIih1bmtub3du KSIKLSNlbHNlIC8qIE5UICovCi0gICAgICAgICAgKHkgJiBCTV9EVFIpID8gIk9uIjogIk9mZiIK LSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICk7Ci0jaWZuZGVmIE1BQwotICAgICAgICBwcmlu dGYoCi0gICAgICAgICAgIiBSZXF1ZXN0IFRvIFNlbmQgICAgIChSVFMpOiAlc1xyXG4iLAotI2lm ZGVmIE5UCi0gICAgICAgICAgIih1bmtub3duKSIKLSNlbHNlIC8qIE5UICovCi0gICAgICAgICAg KHkgJiBCTV9SVFMpID8gIk9uIjogIk9mZiIKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICk7 Ci0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotICAgIH0KLSNpZmRlZiBC RVRBREVCVUcKLSNpZmRlZiBDS19UQVBJCi0gICAgaWYgKHR0dGFwaSAmJiAhdGFwaXBhc3MpIHsK LSAgICAgICAgTFBERVZDRkcgICAgICAgIGxwRGV2Q2ZnID0gTlVMTDsKLSAgICAgICAgTFBDT01N Q09ORklHICAgIGxwQ29tbUNvbmZpZyA9IE5VTEw7Ci0gICAgICAgIExQTU9ERU1TRVRUSU5HUyBs cE1vZGVtU2V0dGluZ3MgPSBOVUxMOwotICAgICAgICBEQ0IgKiAgICAgICAgICAgbHBEQ0IgPSBO VUxMOwotCi0gICAgICAgIGlmIChja3RhcGlHZXRNb2RlbVNldHRpbmdzKCZscERldkNmZywmbHBN b2RlbVNldHRpbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxwQ29t bUNvbmZpZywmbHBEQ0IpKSB7Ci0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAg ICBja3RhcGlEaXNwbGF5TW9kZW1TZXR0aW5ncyhscERldkNmZyxscE1vZGVtU2V0dGluZ3MsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscENvbW1Db25maWcsbHBEQ0Ip OwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSNlbmRpZiAvKiBCRVRB REVCVUcgKi8KLX0KLSNlbmRpZiAvKiBOT1NIT1cgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0K LSNpZm5kZWYgTk9YRkVSCi0vKiAgUyBEIEUgQiBVICAtLSBSZWNvcmQgc3BhciByZXN1bHRzIGlu IGRlYnVnZ2luZyBsb2cgICovCi0KLVZPSUQKLXNkZWJ1KGxlbikgaW50IGxlbjsgewotICAgIGRl YnVnKEYxMTEsInNwYXI6IGRhdGEiLChjaGFyICopIHJkYXRhcCxsZW4pOwotICAgIGRlYnVnKEYx MDEsIiBzcHNpeiAiLCIiLCBzcHNpeik7Ci0gICAgZGVidWcoRjEwMSwiIHRpbWludCIsIiIsdGlt aW50KTsKLSAgICBkZWJ1ZyhGMTAxLCIgbnBhZCAgIiwiIiwgIG5wYWQpOwotICAgIGRlYnVnKEYx MDEsIiBwYWRjaCAiLCIiLCBwYWRjaCk7Ci0gICAgZGVidWcoRjEwMSwiIHNlb2wgICIsIiIsICBz ZW9sKTsKLSAgICBkZWJ1ZyhGMTAxLCIgY3RscSAgIiwiIiwgIGN0bHEpOwotICAgIGRlYnVnKEYx MDEsIiBlYnEgICAiLCIiLCAgIGVicSk7Ci0gICAgZGVidWcoRjEwMSwiIGVicWZsZyIsIiIsZWJx ZmxnKTsKLSAgICBkZWJ1ZyhGMTAxLCIgYmN0ciAgIiwiIiwgIGJjdHIpOwotICAgIGRlYnVnKEYx MDEsIiBycHRxICAiLCIiLCAgcnB0cSk7Ci0gICAgZGVidWcoRjEwMSwiIHJwdGZsZyIsIiIscnB0 ZmxnKTsKLSAgICBkZWJ1ZyhGMTAxLCIgbHNjYXB1IiwiIixsc2NhcHUpOwotICAgIGRlYnVnKEYx MDEsIiBhdGNhcHUiLCIiLGF0Y2FwdSk7Ci0gICAgZGVidWcoRjEwMSwiIGxwY2FwdSIsIiIsbHBj YXB1KTsKLSAgICBkZWJ1ZyhGMTAxLCIgc3djYXB1IiwiIixzd2NhcHUpOwotICAgIGRlYnVnKEYx MDEsIiB3c2xvdG4iLCIiLCB3c2xvdG4pOwotICAgIGRlYnVnKEYxMDEsIiB3aGF0cnUiLCIiLCB3 aGF0cnUpOwotfQotLyogIFIgRCBFIEIgVSAtLSBEZWJ1Z2dpbmcgZGlzcGxheSBvZiBycGFyKCkg dmFsdWVzICAqLwotCi1WT0lECi1yZGVidShkLGxlbikgQ0hBUiAqZDsgaW50IGxlbjsgewotICAg IGRlYnVnKEYxMTEsInJwYXI6IGRhdGEiLGQsbGVuKTsKLSAgICBkZWJ1ZyhGMTAxLCIgcnBzaXog IiwiIiwgeHVuY2hhcihkWzBdKSk7Ci0gICAgZGVidWcoRjEwMSwiIHJ0aW1vICIsIiIsIHJ0aW1v KTsKLSAgICBkZWJ1ZyhGMTAxLCIgbXlwYWRuIiwiIixteXBhZG4pOwotICAgIGRlYnVnKEYxMDEs IiBteXBhZGMiLCIiLG15cGFkYyk7Ci0gICAgZGVidWcoRjEwMSwiIGVvbCAgICIsIiIsICAgZW9s KTsKLSAgICBkZWJ1ZyhGMTAxLCIgY3RscSAgIiwiIiwgIGN0bHEpOwotICAgIGRlYnVnKEYxMDEs IiBzcSAgICAiLCIiLCAgICBzcSk7Ci0gICAgZGVidWcoRjEwMSwiIGVicSAgICIsIiIsICAgZWJx KTsKLSAgICBkZWJ1ZyhGMTAxLCIgZWJxZmxnIiwiIixlYnFmbGcpOwotICAgIGRlYnVnKEYxMDEs IiBiY3RyICAiLCIiLCAgYmN0cik7Ci0gICAgZGVidWcoRjEwMSwiIHJwdHEgICIsIiIsICBkWzhd KTsKLSAgICBkZWJ1ZyhGMTAxLCIgcnB0ZmxnIiwiIixycHRmbGcpOwotICAgIGRlYnVnKEYxMDEs IiBjYXBhcyAiLCIiLCBjYXBhcyk7Ci0gICAgZGVidWcoRjEwMSwiIGJpdHMgICIsIiIsZFtjYXBh c10pOwotICAgIGRlYnVnKEYxMDEsIiBsc2NhcHUiLCIiLGxzY2FwdSk7Ci0gICAgZGVidWcoRjEw MSwiIGF0Y2FwdSIsIiIsYXRjYXB1KTsKLSAgICBkZWJ1ZyhGMTAxLCIgbHBjYXB1IiwiIixscGNh cHUpOwotICAgIGRlYnVnKEYxMDEsIiBzd2NhcHUiLCIiLHN3Y2FwdSk7Ci0gICAgZGVidWcoRjEw MSwiIHdzbG90ciIsIiIsIHdzbG90cik7Ci0gICAgZGVidWcoRjEwMSwiIHJwc2l6KGV4dGVuZGVk KSIsIiIscnBzaXopOwotfQotCi0jaWZkZWYgQ09NTUVOVAotLyogIEMgSCBLIEUgUiBSICAtLSAg RGVjaWRlIHdoZXRoZXIgdG8gZXhpdCB1cG9uIGEgcHJvdG9jb2wgZXJyb3IgICovCi0KLVZPSUQK LWNoa2VycigpIHsKLSAgICBpZiAoYmFja2dyZCAmJiAhc2VydmVyKSBmYXRhbCgiUHJvdG9jb2wg ZXJyb3IiKTsKLX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0K LS8qICBGIEEgVCBBIEwgIC0tICBGYXRhbCBlcnJvciBtZXNzYWdlICovCi0KLVZPSUQKLWZhdGFs KG1zZykgY2hhciAqbXNnOyB7Ci0gICAgZXh0ZXJuIGludCBpbml0ZmxnOwotICAgIHN0YXRpYyBp bnQgaW5pdGluZyA9IDA7Ci0gICAgaWYgKCFtc2cpIG1zZyA9ICIiOwotICAgIGRlYnVnKEYxMTEs ImZhdGFsIixtc2csaW5pdGZsZyk7Ci0KLSAgICBpZiAoIWluaXRmbGcpIHsJCQkvKiBJZiBjYWxs ZWQgZnJvbSBwcmVzY2FuICovCi0JaWYgKGluaXRpbmcpCQkJLyogb3IgY2FsbGVkIGZyb20gc3lz aW5pdCgpICovCi0gICAgICAgICAgZXhpdCgyNTMpOwotCWluaXRpbmcgPSAxOwotCXN5c2luaXQo KTsKLSAgICB9Ci0KLSAgICBkZWJ1ZyhGMTExLCJmYXRhbCIsbXNnLHhpdHN0YSk7Ci0gICAgdGxv ZyhGMTEwLCJGYXRhbDoiLG1zZywwTCk7Ci0jaWZkZWYgVk1TCi0gICAgaWYgKHN0cm5jbXAobXNn LCIlQ0tFUk1JVCIsOCkpCi0gICAgICBjb25vbCgiJUNLRVJNSVQtRS1GQVRBTCwgIik7Ci0gICAg Y29ub2xsKG1zZyk7Ci0jZWxzZSAvKiAhVk1TICovCi0gICAgY29ub2xsKG1zZyk7Ci0jZW5kaWYg LyogVk1TICovCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PWEZFUgotICAgIGlmICh4ZnJiZWwpIHsK LSAgICAgICAgYmxlZXAoQlBfRkFJTCk7Ci0gICAgICAgIHNsZWVwKDEpOwotICAgICAgICBibGVl cChCUF9GQUlMKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICBkb2V4aXQoQkFEX0VYSVQseGl0c3RhIHwgMSk7ICAgICAgICAvKiBFeGl0IGluZGlj YXRpbmcgZmFpbHVyZSAqLwotfQotCi0jaWZuZGVmIE5PWEZFUgotLyogIEIgTCBEIEwgRSBOICAt LSAgTWFrZSBsZW5ndGgtZW5jb2RlZCBjb3B5IG9mIHN0cmluZyAgKi8KLQotY2hhciAqCi1ibGRs ZW4oc3RyLGRlc3QpIGNoYXIgKnN0ciwgKmRlc3Q7IHsKLSAgICBpbnQgbGVuOwotICAgIGxlbiA9 IChpbnQpc3RybGVuKHN0cik7Ci0gICAgaWYgKGxlbiA+IDk0KQotICAgICAgKmRlc3QgPSBTUDsK LSAgICBlbHNlCi0gICAgICAqZGVzdCA9IChjaGFyKSB0b2NoYXIobGVuKTsKLSAgICBzdHJjcHko ZGVzdCsxLHN0cik7CQkJLyogQ2hlY2tlZCBiZWxvdyBpbiBzZXRnZW4oKSAqLwotICAgIHJldHVy bihkZXN0K2xlbisxKTsKLX0KLQotCi0vKiAgUyBFIFQgRyBFIE4gIC0tICBDb25zdHJ1Y3QgYSBn ZW5lcmljIGNvbW1hbmQgICovCi0vKgotICBDYWxsIHdpdGggR2VuZXJpYyBjb21tYW5kIGNoYXJh Y3RlciBmb2xsb3dlZCBieSB0aHJlZSBzdHJpbmcgYXJndW1lbnRzLgotICBUcmFpbGluZyBzdHJp bmdzIGFyZSBhbGxvd2VkIHRvIGJlIGVtcHR5ICgiIikuICBFYWNoIHN0cmluZyBleGNlcHQgdGhl IGxhc3QKLSAgbm9uLWVtcHR5IHN0cmluZyBtdXN0IGJlIGxlc3MgdGhhbiA5NSBjaGFyYWN0ZXJz IGxvbmcuICBUaGUgZmluYWwgbm9uZW1wdHkKLSAgc3RyaW5nIGlzIGFsbG93ZWQgdG8gYmUgbG9u Z2VyLgotKi8KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwotc2V0Z2VuKGNoYXIgdHlwZSwgY2hhciAq IGFyZzEsIGNoYXIgKiBhcmcyLCBjaGFyICogYXJnMykKLSNlbHNlCi1zZXRnZW4odHlwZSxhcmcx LGFyZzIsYXJnMykgY2hhciB0eXBlLCAqYXJnMSwgKmFyZzIsICphcmczOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi0vKiBzZXRnZW4gKi8gewotICAgIGNoYXIgKnVwc3RyLCAqY3A7Ci0jaWZkZWYg RFlOQU1JQwotICAgIGlmICghY21kc3RyKQotICAgICAgaWYgKCEoY21kc3RyID0gbWFsbG9jKE1B WFNQICsgMSkpKQotICAgICAgICBmYXRhbCgic2V0Z2VuOiBjYW4ndCBhbGxvY2F0ZSBtZW1vcnki KTsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSAgICBjcCA9IGNtZHN0cjsKLSAgICAqY3ArKyA9 IHR5cGU7Ci0gICAgKmNwID0gTlVMOwotICAgIGlmICghYXJnMSkgYXJnMSA9ICIiOwotICAgIGlm ICghYXJnMikgYXJnMiA9ICIiOwotICAgIGlmICghYXJnMykgYXJnMyA9ICIiOwotICAgIGlmICgo KGludClzdHJsZW4oYXJnMSkrKGludClzdHJsZW4oYXJnMikrKGludClzdHJsZW4oYXJnMykrNCkg PCBNQVhTUCkgewotCWlmICgqYXJnMSAhPSBOVUwpIHsKLQkgICAgdXBzdHIgPSBibGRsZW4oYXJn MSxjcCk7Ci0JICAgIGlmICgqYXJnMiAhPSBOVUwpIHsKLQkJdXBzdHIgPSBibGRsZW4oYXJnMix1 cHN0cik7Ci0JCWlmICgqYXJnMyAhPSBOVUwpIGJsZGxlbihhcmczLHVwc3RyKTsKLQkgICAgfQot CX0KLQljbWFyZyA9IGNtZHN0cjsKLQlkZWJ1ZyhGMTEwLCJzZXRnZW4iLGNtYXJnLDApOwotCXJl dHVybignZycpOwotICAgIH0KLSAgICByZXR1cm4oJ0UnKTsKLX0KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotI2lmbmRlZiBOT01TRU5ECi1zdGF0aWMgY2hhciAqbWdidWZwID0gTlVMTDsKLQotLyog IEYgTiBQIEEgUiBTIEUgIC0tICAqLwotCi0vKgotICBBcmd1bWVudCBpcyBhIGNoYXJhY3RlciBz dHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBmaWxlc3BlY3MuCi0gIFRoaXMgZnVuY3Rpb24g YnJlYWtzIHRoZSBzdHJpbmcgYXBhcnQgaW50byBhbiBhcnJheSBvZiBwb2ludGVycywgb25lCi0g IHRvIGVhY2ggZmlsZXNwZWMsIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZXNwZWNzLiAg VXNlZCBieSBzZXJ2ZXIKLSAgd2hlbiBpdCByZWNlaXZlcyBhIEdFVCBjb21tYW5kIHRvIGFsbG93 IGl0IHRvIHByb2Nlc3MgbXVsdGlwbGUgZmlsZQotICBzcGVjaWZpY2F0aW9ucyBpbiBvbmUgdHJh bnNhY3Rpb24uICBTZXRzIGNtbGlzdCB0byBwb2ludCB0byBhIGxpc3Qgb2YKLSAgZmlsZSBwb2lu dGVycywgZXhhY3RseSBhcyBpZiB0aGV5IHdlcmUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLQot ICBUaGlzIHZlcnNpb24gb2YgZm5wYXJzZSB0cmVhdHMgc3BhY2VzIGFzIGZpbGVuYW1lIHNlcGFy YXRvcnMuICBJZiB5b3VyCi0gIG9wZXJhdGluZyBzeXN0ZW0gYWxsb3dzIHNwYWNlcyBpbiBmaWxl bmFtZXMsIHlvdSdsbCBuZWVkIGEgZGlmZmVyZW50Ci0gIHNlcGFyYXRvci4KLQotICBUaGlzIHZl cnNpb24gb2YgZm5wYXJzZSBtYWxsb2NzIGEgc3RyaW5nIGJ1ZmZlciB0byBjb250YWluIHRoZSBu YW1lcy4gIEl0Ci0gIGNhbm5vdCBhc3N1bWUgdGhhdCB0aGUgc3RyaW5nIHRoYXQgaXMgcG9pbnRl ZCB0byBieSB0aGUgYXJndW1lbnQgaXMgc2FmZS4KLSovCi1pbnQKLWZucGFyc2Uoc3RyaW5nKSBj aGFyICpzdHJpbmc7IHsKLSAgICBjaGFyICpwLCAqcywgKnE7Ci0gICAgaW50IHIgPSAwLCB4OyAg ICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGNvZGUgKi8KLSNpZmRlZiBSRUNVUlNJVkUK LSAgICBkZWJ1ZyhGMTExLCJmbnBhcnNlIixzdHJpbmcscmVjdXJzaXZlKTsKLSNlbmRpZiAvKiBS RUNVUlNJVkUgKi8KLQotICAgIGlmIChtZ2J1ZnApIGZyZWUobWdidWZwKTsgICAgICAgICAgIC8q IEZyZWUgdGhpcyBmcm9tIGxhc3QgdGltZS4gKi8KLSAgICBtZ2J1ZnAgPSBtYWxsb2MoKGludClz dHJsZW4oc3RyaW5nKSsyKTsKLSAgICBpZiAoIW1nYnVmcCkgewotICAgICAgICBkZWJ1ZyhGMTAw LCJmbnBhcnNlIG1hbGxvYyBlcnJvciIsIiIsMCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9 Ci0jaWZuZGVmIE5PSUNQCi0jaWZuZGVmIE5PU1BMCi0gICAgY2tzdHJuY3B5KGZzcGVjLHN0cmlu Zyxmc3BlY2xlbik7ICAgLyogTWFrZSBjb3B5IGZvciBcdihmaWxlc3BlYykgKi8KLSNlbmRpZiAv KiBOT1NQTCAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgcyA9IHN0cmluZzsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogSW5wdXQgc3RyaW5nICovCi0gICAgcCA9IHEgPSBtZ2J1ZnA7ICAg ICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gdGhlIGNvcHkgKi8KLSAgICByID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIG91ciByZXR1cm4gY29kZSAq LwotICAgIHdoaWxlICgqcyA9PSBTUCB8fCAqcyA9PSBIVCkgICAgICAgIC8qIFNraXAgbGVhZGlu ZyBzcGFjZXMgYW5kIHRhYnMgKi8KLSAgICAgIHMrKzsKLSAgICBmb3IgKHggPSBzdHJsZW4ocyk7 ICAgICAgICAgICAgICAgICAvKiBTdHJpcCB0cmFpbGluZyBzcGFjZXMgKi8KLSAgICAgICAgICh4 ID4gMSkgJiYgKHNbeC0xXSA9PSBTUCB8fCBzW3gtMV0gPT0gSFQpOwotICAgICAgICAgeC0tKQot ICAgICAgc1t4LTFdID0gTlVMOwotICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIExvb3AgdGhyb3VnaCByZXN0IG9mIHN0cmluZyAqLwotICAgICAgICBpZiAoKnMgPT0g Q01EUSkgeyAgICAgICAgICAgICAgIC8qIEJhY2tzbGFzaCAocXVvdGUgY2hhcmFjdGVyKT8gKi8K LSAgICAgICAgICAgIGlmICgoeCA9IHh4ZXNjKCZzKSkgPiAtMSkgeyAvKiBHbyBpbnRlcnByZXQg aXQuICovCi0gICAgICAgICAgICAgICAgKnErKyA9IChjaGFyKSB4OyAgICAgICAgLyogTnVtZXJp YyBiYWNrc2xhc2ggY29kZSwgb2sgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgICAvKiBKdXN0IGxldCBpdCBxdW90ZSBuZXh0IGNoYXIgKi8KLSAgICAgICAgICAgICAg ICBzKys7ICAgICAgICAgICAgICAgICAgICAvKiBnZXQgcGFzdCB0aGUgYmFja3NsYXNoICovCi0g ICAgICAgICAgICAgICAgKnErKyA9ICpzKys7ICAgICAgICAgICAgLyogZGVwb3NpdCBuZXh0IGNo YXIgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9IGVs c2UgaWYgKCpzID09IFNQIHx8ICpzID09IE5VTCkgeyAvKiBVbnF1b3RlZCBzcGFjZSBvciBOVUw/ ICovCi0gICAgICAgICAgICAqcSsrID0gTlVMOyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIG91 dHB1dCBmaWxlbmFtZS4gKi8KLSAgICAgICAgICAgIG1zZmlsZXNbcl0gPSBwOyAgICAgICAgICAg ICAvKiBBZGQgdGhpcyBmaWxlbmFtZSB0byB0aGUgbGlzdCAqLwotICAgICAgICAgICAgZGVidWco RjExMSwiZm5wYXJzZSIsbXNmaWxlc1tyXSxyKTsKLSAgICAgICAgICAgIHIrKzsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDb3VudCBpdCAqLwotICAgICAgICAgICAgaWYgKCpzID09IE5VTCkg YnJlYWs7ICAgICAgIC8qIEVuZCBvZiBzdHJpbmc/ICovCi0gICAgICAgICAgICB3aGlsZSAoKnMg PT0gU1ApIHMrKzsgICAgICAgLyogU2tpcCByZXBlYXRlZCBzcGFjZXMgKi8KLSAgICAgICAgICAg IHAgPSBxOyAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiBuZXh0IG5hbWUgKi8KLSAg ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9IGVsc2UgKnErKyA9ICpzOyAgICAgICAgICAg ICAgIC8qIE90aGVyd2lzZSBjb3B5IHRoZSBjaGFyYWN0ZXIgKi8KLSAgICAgICAgcysrOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXh0IGlucHV0IGNoYXJhY3RlciAqLwotICAgIH0K LSAgICBkZWJ1ZyhGMTAxLCJmbnBhcnNlIHIiLCIiLHIpOwotICAgIG1zZmlsZXNbcl0gPSAiIjsg ICAgICAgICAgICAgICAgICAgIC8qIFB1dCBlbXB0eSBzdHJpbmcgYXQgZW5kIG9mIGxpc3QgKi8K LSAgICBjbWxpc3QgPSBtc2ZpbGVzOwotICAgIHJldHVybihyKTsKLX0KLSNlbmRpZiAvKiBOT01T RU5EICovCi0KLWNoYXIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkYmNo cigpIGZvciBERUJVRyBTRVNTSU9OICovCi1kYmNocihjKSBpbnQgYzsgewotICAgIHN0YXRpYyBj aGFyIHNbOF07Ci0gICAgY2hhciAqY3AgPSBzOwotCi0gICAgYyAmPSAweGZmOwotICAgIGlmIChj ICYgMHg4MCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIDh0aCBiaXQgb24gKi8KLSAgICAgICAg KmNwKysgPSAnfic7Ci0gICAgICAgIGMgJj0gMHg3ZjsKLSAgICB9Ci0gICAgaWYgKGMgPCBTUCkg eyAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBjaGFyYWN0ZXIgKi8KLSAgICAgICAg KmNwKysgPSAnXic7Ci0gICAgICAgICpjcCsrID0gKGNoYXIpIGN0bChjKTsKLSAgICB9IGVsc2Ug aWYgKGMgPT0gREVMKSB7Ci0gICAgICAgICpjcCsrID0gJ14nOwotICAgICAgICAqY3ArKyA9ICc/ JzsKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmludGluZyBj aGFyYWN0ZXIgKi8KLSAgICAgICAgKmNwKysgPSAoY2hhcikgYzsKLSAgICB9Ci0gICAgKmNwID0g J1wwJzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlIHN0cmluZyAqLwotICAg IGNwID0gczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBwb2ludGVyIHRv IGl0ICovCi0gICAgcmV0dXJuKGNwKTsKLX0KLQotLyogIEMgSyBIIE8gUyBUICAtLSAgR2V0IG5h bWUgb2YgbG9jYWwgaG9zdCAod2hlcmUgQy1LZXJtaXQgaXMgcnVubmluZykgICovCi0KLS8qCi0g IENhbGwgd2l0aCBwb2ludGVyIHRvIGJ1ZmZlciB0byBwdXQgaG9zdG5hbWUgaW4sIGFuZCBsZW5n dGggb2YgYnVmZmVyLgotICBDb3BpZXMgaG9zdG5hbWUgaW50byBidWZmZXIgb24gc3VjY2Vzcywg cHV0cyBudWxsIHN0cmluZyBpbiBidWZmZXIgb24KLSAgZmFpbHVyZS4KLSovCi0jaWZkZWYgQlNE NDQKLSNkZWZpbmUgQlNENAotI3VuZGVmIEFUVFNWCi0jZW5kaWYgLyogQlNENDQgKi8KLQotI2lm ZGVmIFNWT1JQT1NJWAotI2lmbmRlZiBCU0Q0NAotI2lmbmRlZiBhcG9sbG8KLSNpbmNsdWRlIDxz eXMvdXRzbmFtZS5oPgotI2VuZGlmIC8qIGFwb2xsbyAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0j ZWxzZQotI2lmZGVmIEJFTExWMTAKLSNpbmNsdWRlIDx1dHNuYW1lLmg+Ci0jZW5kaWYgLyogQkVM TFYxMCAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCovCi0KLSNpZmRlZiBDS1NZU0xPRwotZXh0ZXJu IGNoYXIgdWlkYnVmW10sICogY2xpZW50aG9zdDsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCi1W T0lECi1ja2hvc3QodnZidWYsdnZsZW4pIGNoYXIgKiB2dmJ1ZjsgaW50IHZ2bGVuOyB7Ci0KLSNp Zm5kZWYgTk9QVVNICi0gICAgZXh0ZXJuIGludCBub3B1c2g7Ci0jaWZuZGVmIE5PU0VSVkVSCi0g ICAgZXh0ZXJuIGludCBlbl9ob3M7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSNlbmRpZiAvKiBO T1BVU0ggKi8KLQotI2lmZGVmIHBkcDExCi0gICAgKnZ2YnVmID0gTlVMOwotI2Vsc2UgIC8qIEV2 ZXJ5dGhpbmcgZWxzZSAtIHJlc3Qgb2YgdGhpcyByb3V0aW5lICovCi0KLSAgICBjaGFyICpnOwot ICAgIGludCBoYXZlZnVsbCA9IDA7Ci0jaWZkZWYgVk1TCi0gICAgaW50IHg7Ci0jZW5kaWYgLyog Vk1TICovCi0KLSNpZmRlZiBTVk9SUE9TSVgKLSNpZm5kZWYgQlNENDQKLSNpZm5kZWYgXzM4NkJT RAotI2lmbmRlZiBBUE9MTE9TUjEwCi0gICAgc3RydWN0IHV0c25hbWUgaG5hbWU7Ci0jZW5kaWYg LyogQVBPTExPU1IxMCAqLwotI2VuZGlmIC8qIF8zODZCU0QgKi8KLSNlbmRpZiAvKiBCU0Q0NCAq LwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgaW50IGFj MCA9IChjaGFyICopIHZ2YnVmLCBhYzEgPSAtMSwgYWMyID0gMDsKLSNlbmRpZiAvKiBkYXRhZ2Vu ZXJhbCAqLwotCi0jaWZuZGVmIE5PUFVTSAotICAgIGlmIChnZXRlbnYoIkNLX05PUFVTSCIpKSB7 ICAgICAgICAgIC8qIE5vIHNoZWxsIGFjY2VzcyBhbGxvd2VkICovCi0gICAgICAgIG5vcHVzaCA9 IDE7ICAgICAgICAgICAgICAgICAgICAgLyogb24gdGhpcyBob3N0Li4uICovCi0jaWZuZGVmIE5P U0VSVkVSCi0gICAgICAgIGVuX2hvcyA9IDA7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSAgICB9 Ci0jZW5kaWYgLyogTk9QVVNIICovCi0KLSAgICAqdnZidWYgPSBOVUw7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBIb3cgbGV0J3MgZ2V0IG91ciBob3N0IG5hbWUgLi4uICovCi0KLSNpZm5kZWYg QkVMTFYxMCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIG5vdCBoYXZlIGdldGhvc3Ru YW1lKCkgKi8KLSNpZm5kZWYgT1hPUwotI2lmZGVmIFNWT1JQT1NJWAotI2lmZGVmIEFQT0xMT1NS MTAKLSAgICBja3N0cm5jcHkodnZidWYsIkFwb2xsbyIsdnZsZW4pOwotI2Vsc2UKLSNpZmRlZiBC U0Q0NAotICAgIGlmIChnZXRob3N0bmFtZSh2dmJ1Zix2dmxlbikgPCAwKQotICAgICAgKnZ2YnVm ID0gTlVMOwotI2Vsc2UKLSNpZmRlZiBfMzg2QlNECi0gICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVm LHZ2bGVuKSA8IDApICp2dmJ1ZiA9IE5VTDsKLSNlbHNlCi0jaWZkZWYgUU5YCi0jaWZkZWYgVENQ U09DS0VUCi0gICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8IDApICp2dmJ1ZiA9IE5V TDsKLSNlbHNlCi0gICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkgY2tzdHJuY3B5KHZ2YnVmLGhu YW1lLm5vZGVuYW1lLHZ2bGVuKTsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbHNlIC8qIFNW T1JQT1NJWCBidXQgbm90IF8zODZCU0Qgb3IgQlNENDQgKi8KLSNpZmRlZiBfX2lhNjRfXwotICAg IGlmICh1bmFtZSgmaG5hbWUpID4gLTEpIGNrc3RybmNweSh2dmJ1ZixobmFtZS5ub2RlbmFtZSx2 dmxlbik7Ci0jZWxzZQotICAgIGlmICh1bmFtZSgmaG5hbWUpID4gLTEpIHsKLQljaGFyICogcDsK LQlwID0gaG5hbWUubm9kZW5hbWU7Ci0jaWZkZWYgVENQU09DS0VUCi0jaWZuZGVmIE5PQ0tHRVRG UUhPU1QKLQlpZiAoIWNrc3RyY2hyKHAsJy4nKSkKLQkgIHAgPSAoY2hhciAqKWNrZ2V0ZnFob3N0 bmFtZShwKTsKLSNlbmRpZiAvKiBOT0NLR0VURlFIT1NUICovCi0jZW5kaWYgLyogVENQU09DS0VU ICovCi0JaWYgKCFwKSBwID0gIiI7Ci0JaWYgKCEqcCkgcCA9ICIodW5rbm93bikiOwotCWNrc3Ry bmNweSh2dmJ1ZixwLHZ2bGVuKTsKLSAgICB9Ci0jZW5kaWYgLyogX19pYTY0X18gKi8KLSNlbmRp ZiAvKiBRTlggKi8KLSNlbmRpZiAvKiBfMzg2QlNEICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNl bmRpZiAvKiBBUE9MTE9TUjEwICovCi0jZWxzZSAvKiAhU1ZPUlBPU0lYICovCi0jaWZkZWYgQlNE NAotICAgIGlmIChnZXRob3N0bmFtZSh2dmJ1Zix2dmxlbikgPCAwKSAqdnZidWYgPSBOVUw7Ci0j ZWxzZSAvKiAhQlNENCAqLwotI2lmZGVmIFZNUwotICAgIGcgPSBnZXRlbnYoIlNZUyROT0RFIik7 Ci0gICAgaWYgKGcpIGNrc3RybmNweSh2dmJ1ZixnLHZ2bGVuKTsKLSAgICB4ID0gKGludClzdHJs ZW4odnZidWYpOwotICAgIGlmICh4ID4gMSAmJiB2dmJ1Zlt4LTFdID09ICc6JyAmJiB2dmJ1Zlt4 LTJdID09ICc6JykgdnZidWZbeC0yXSA9IE5VTDsKLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwK LSAgICBpZiAoc3lzKCRITkFNRSwmYWMwLCZhYzEsJmFjMikgPT0gMCkgLyogc3VjY2Vzc2Z1bCAq LwotICAgICAgICB2dmxlbiA9IGFjMiArIDE7ICAgICAgICAgICAgICAgIC8qIGVuaCAtIGhhdmUg dG8gYWRkIG9uZSAqLwotI2Vsc2UKLSNpZmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBPUy8yICovCi0gICAgZyA9IG9zMl9nZXRob3N0bmFtZSgpOwotICAgIGlmIChnKSBj a3N0cm5jcHkodnZidWYsZyx2dmxlbik7Ci0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBPU0sKLSNp ZmRlZiBUQ1BTT0NLRVQKLSAgICAgICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLCB2dmxlbikgPCAw KSAqdnZidWYgPSBOVUw7Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogT1NLICov Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBW TVMgKi8KLSNlbmRpZiAvKiBCU0Q0ICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0jZWxzZSAv KiBPWE9TICovCi0gICAgLyogSWYgVENQL0lQIGlzIG5vdCBpbnN0YWxsZWQsIGdldGhvc3RuYW1l KCkgZmFpbHMsIHVzZSB1bmFtZSgpICovCi0gICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVu KSA8IDApIHsKLSAgICAgICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkKLSAgICAgICAgICAgIGNr c3RybmNweSh2dmJ1ZixobmFtZS5ub2RlbmFtZSx2dmxlbik7Ci0gICAgICAgIGVsc2UKLSAgICAg ICAgICAgICp2dmJ1ZiA9IE5VTDsKLSAgICB9Ci0jZW5kaWYgLyogT1hPUyAqLwotI2VuZGlmIC8q IEJFTExWMTAgKi8KLSAgICBpZiAoKnZ2YnVmID09IE5VTCkgeyAgICAgICAgICAgICAgICAvKiBJ ZiBpdCdzIHN0aWxsIGVtcHR5ICovCi0gICAgICAgIGcgPSBnZXRlbnYoIkhPU1QiKTsgICAgICAg ICAgICAgLyogdHJ5IHRoaXMgKi8KLSAgICAgICAgaWYgKGcpIGNrc3RybmNweSh2dmJ1ZixnLHZ2 bGVuKTsKLSAgICB9Ci0gICAgdnZidWZbdnZsZW4tMV0gPSBOVUw7ICAgICAgICAgICAgICAgLyog TWFrZSBzdXJlIHJlc3VsdCBpcyB0ZXJtaW5hdGVkLiAqLwotI2VuZGlmIC8qIHBkcDExICovCi19 Ci0jaWZkZWYgQlNENDQKLSN1bmRlZiBCU0Q0Ci0jZGVmaW5lIEFUVFNWCi0jZW5kaWYgLyogQlNE NDQgKi8KLQotLyoKLSAgQSBTIEsgTSBPIFIgRSAgLS0gIFBvb3IgcGVyc29uJ3MgIm1vcmUiLgot ICBSZXR1cm5zIDAgaWYgbm8gbW9yZSwgMSBpZiBtb3JlIHdhbnRlZC4KLSovCi1pbnQKLWFza21v cmUoKSB7Ci0gICAgY2hhciBjOwotICAgIGludCBydiwgY3g7Ci0jaWZkZWYgSUtTRAotICAgIGV4 dGVybiBpbnQgdGltZWxpbWl0OwotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBJS1NEQ09ORgot ICAgIGV4dGVybiBpbnQgaWtzZGNmOwotI2VuZGlmIC8qIElLU0RDT05GICovCi0jaWZkZWYgQ0tf QVBDCi0gICAgZXh0ZXJuIGludCBhcGNzdGF0dXMsIGFwY2FjdGl2ZTsKLSNlbmRpZiAvKiBDS19B UEMgKi8KLQotI2lmZGVmIE5PSUNQCi0gICAgcmV0dXJuKDEpOwotI2Vsc2UKLSAgICBpZiAoIXhh c2ttb3JlKQotICAgICAgcmV0dXJuKDEpOwotI2lmZGVmIElLU0RDT05GCi0gICAgaWYgKGluc2Vy dmVyICYmICFpa3NkY2YpCi0gICAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogSUtTRENPTkYgKi8K LSNpZmRlZiBDS19BUEMKLSAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCB8fAotICAgICAg ICAoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgKGFwY3N0YXR1cyAmIEFQQ19OT0lOUCkpKQot ICAgICAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0jaWZkZWYgVk1TCi0gICAg aWYgKGJhdGNoKQotICAgICAgcmV0dXJuKDEpOwotI2Vsc2UKLSNpZmRlZiBVTklYCi0gICAgaWYg KGJhY2tncmQpCi0gICAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8q IFZNUyAqLwotCi0jaWZuZGVmIFZNUwotICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAg ICAgICAgIC8qIEZvcmNlIENCUkVBSyBtb2RlLiAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi0gICAg cnYgPSAtMTsKLSAgICB3aGlsZSAocnYgPCAwKSB7Ci0jaWZuZGVmIE9TMgotICAgICAgICBwcmlu dGYoIm1vcmU/ICIpOwotI2lmZGVmIFVOSVgKLSNpZmRlZiBOT1NFVEJVRgotICAgICAgICBmZmx1 c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBOT1NFVEJVRiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNl bHNlCi0gICAgICAgIHByaW50ZigibW9yZT8gIik7Ci0gICAgICAgIGZmbHVzaChzdGRvdXQpOwot I2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsK LSAgICAgICAgICAgIGN4ID0gY21kZ2V0Yyh0aW1lbGltaXQpOwotICAgICAgICAgICAgaWYgKGN4 IDwgLTEgJiYgdGltZWxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJcbj9JS1MgaWRs ZSB0aW1lb3V0IC0gR29vZGJ5ZS5cbiIpOwotICAgICAgICAgICAgICAgIGRvZXhpdChHT09EX0VY SVQsMCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGN4ID09IC0xKSB7CS8qIENvbm5lY3Rpb24g bG9zdCAqLwotICAgICAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwwKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGMgPSAoY2hhcikgY3g7Ci0gICAgICAgIH0gZWxzZSB7Ci0jZW5kaWYg LyogSUtTRCAqLwotI2lmZGVmIFZNUwotCSAgICBjb25iaW4oKGNoYXIpZXNjYXBlKTsJLyogUHJv dGVjdCBhZ2FpbnN0IEN0cmwtWiAqLwotCSAgICBjeCA9IGNvbmluYygwKTsKLQkgICAgY29uY2Io KGNoYXIpZXNjYXBlKTsKLSNlbHNlCi0JICAgIGN4ID0gY21kZ2V0YygwKTsKLSNlbmRpZiAvKiBW TVMgKi8KLQkgICAgZGVidWcoRjEwMSwiYXNrbW9yZSBjbWRnZXRjIiwiIixjeCk7Ci0JICAgIGlm IChjeCA9PSBFT0YpIHsKLQkJZGVidWcoRjEwMCwiYXNrbW9yZSBFT0YiLCIiLDApOwotI2lmZGVm IFZNUwotCQljID0gJ1wwMzInOwotI2Vsc2UKLQkJYyA9ICduJzsKLSNlbmRpZiAvKiBWTVMgKi8K LQkgICAgfSBlbHNlIHsKLQkJYyA9IChjaGFyKWN4OwotCSAgICB9Ci0JICAgIGRlYnVnKEYxMDEs ImFza21vcmUgYyIsIiIsYyk7Ci0KLSNpZmRlZiBJS1NECi0JfQotI2VuZGlmIC8qIElLU0QgKi8K LSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgLyogWWVzICovCi0JICBjYXNlICdwJzog Y2FzZSAnUCc6IGNhc2UgJ2cnOiBjYXNlICdHJzogLyogUHJvY2VlZCBvciBHbyAqLwotCSAgICB4 YXNrbW9yZSA9IDA7Ci0JICAgIC8qIGZhbGwgdGhydSBvbiBwdXJwb3NlICovCi0KLSAgICAgICAg ICBjYXNlIFNQOiBjYXNlICd5JzogY2FzZSAnWSc6IGNhc2UgMDEyOiAgY2FzZSAwMTU6Ci0jaWZk ZWYgT1NLCi0gICAgICAgICAgICB3cml0ZSgxLCAiXDAxNSAgICAgIFwwMTUiLCBzaXplb2YgIlww MTUgICAgICBcMDE1IiAtIDEpOwotI2Vsc2UKLSAgICAgICAgICAgIHByaW50ZigiXDAxNSAgICAg IFwwMTUiKTsKLSNlbmRpZiAvKiBPU0sgKi8KLSAgICAgICAgICAgIHJ2ID0gMTsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgIC8qIE5vICovCi0gICAgICAgICAgY2FzZSAnbic6IGNhc2Ug J04nOiBjYXNlICdxJzogY2FzZSAnUSc6Ci0jaWZkZWYgT1NLCi0gICAgICAgICAgICBwcmludGYo IlxuIik7Ci0jZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJcMDE1XDAxMiIpOwotI2VuZGlmIC8q IE9TSyAqLwotICAgICAgICAgICAgcnYgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0JICBjYXNl ICdcMDAzJzoKLQkgIGNhc2UgJ1wwMDQnOgotCSAgY2FzZSAnXDAzMic6Ci0jaWZkZWYgT1NLCi0J ICAgIHByaW50ZigiXiVjLi4uXG4iLCAoYyArIDAxMDApKTsKLSNlbHNlCi0JICAgIHByaW50Zigi XiVjLi4uXDAxNVwwMTIiLCAoYyArIDAxMDApKTsKLSNlbmRpZiAvKiBPU0sgKi8KLQkgICAgcnYg PSAwOwotCSAgICBicmVhazsKLSAgICAgICAgICAvKiBJbnZhbGlkIGFuc3dlciAqLwotICAgICAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJhc2ttb3JlIiwiaW52YWxpZCBh bnN3ZXIiLGMpOwotICAgICAgICAgICAgcHJpbnRmKCJZIG9yIHNwYWNlLWJhciBmb3IgeWVzLCBO IGZvciBubywgRyB0byBzaG93IHRoZSByZXN0XG4iKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot ICAgICAgICB9Ci0jaWZkZWYgT1MyCi0gICAgICAgIHByaW50ZigiXHIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcciIpOwotICAgICAgICBmZmx1c2go c3Rkb3V0KTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0gICAgcmV0dXJuKHJ2KTsKLSNlbmRp ZiAvKiBOT0lDUCAqLwotfQotCi0vKiAgVCBSIEEgUCAgLS0gIFRlcm1pbmFsIGludGVycnVwdCBo YW5kbGVyICovCi0KLVNJR1RZUAotI2lmZGVmIENLX0FOU0lDCi10cmFwKGludCBzaWcpCi0jZWxz ZQotdHJhcChzaWcpIGludCBzaWc7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRyYXAgKi8g ewotICAgIGV4dGVybiBpbnQgYl9zYXZlLCBmX3NhdmU7Ci0jaWZuZGVmIE5PSUNQCi0gICAgZXh0 ZXJuIGludCB0aW1lbGltaXQ7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSNpZmRlZiBPUzIKLSAgICBl eHRlcm4gdW5zaWduZWQgbG9uZyBzdGFydGZsYWdzOwotI2lmbmRlZiBOT1NFVEtFWQotICAgIGV4 dGVybiBpbnQgb3MyZ2tzOwotI2VuZGlmIC8qIE5PU0VUS0VZICovCi0gICAgaW50IGk7Ci0jZW5k aWYgLyogT1MyICovCi0jaWZuZGVmIE5PU1BMCi0gICAgZXh0ZXJuIGludCBpX2FjdGl2ZSwgaW5z dGF0dXM7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZmRlZiBWTVMKLSAgICBpbnQgaTsgRklMRSAq ZjsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICBleHRlcm4gaW50IHpjaGtvZCwgemNoa2lkOwotI2lm bmRlZiBOT1NQTAotICAgIGV4dGVybiBpbnQgdW5rbWFjcm87Ci0jZW5kaWYgLyogTk9TUEwgKi8K LQotICAgIGRlYm9rID0gMTsKLSNpZmRlZiBOVFNJRwotICAgIGNvbm5vaSgpOwotI2VuZGlmIC8q IE5UU0lHICovCi0jaWZkZWYgX19FTVhfXwotICAgIHNpZ25hbChTSUdJTlQsIFNJR19BQ0spOwot I2VuZGlmCi0jaWZkZWYgR0VNRE9TCi0vKiBHRU0gaXMgbm90IHJlZW50cmFudCwgbm8gaS9vIGZy b20gaW50ZXJydXB0IGxldmVsICovCi0gICAgY2tsb25nam1wKGNtamJ1ZiwxKTsgICAgICAgICAg ICAgICAgLyogSnVtcCBiYWNrIHRvIHBhcnNlciBub3chICovCi0jZW5kaWYgLyogR0VNRE9TICov Ci0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAwLCIqKioqKioq KioqKioqKioqKioqKioiLCIiLDApOwotCWlmIChzaWcgPT0gU0lHSU5UKQotCSAgZGVidWcoRjEw MSwidHJhcCBjYXVnaHQgU0lHSU5UIiwiIixzaWcpOwotCWVsc2UgCi0JICBkZWJ1ZyhGMTAxLCJ0 cmFwIGNhdWdodCBzaWduYWwiLCIiLHNpZyk7Ci0JZGVidWcoRjEwMCwiKioqKioqKioqKioqKioq KioqKioqIiwiIiwwKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIE9TMgot ICAgIGlmICggc2lnID09IFNJR0JSRUFLICYmIChzdGFydGZsYWdzICYgMTI4KSApIHsKLSAgICAg ICAgZGVidWcoRjEwMSwidHJhcCBpZ25vcmluZyBTSUdCUkVBSyIsIiIsc2lnKTsKLSAgICAgICAg cmV0dXJuOwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBOT0lDUAotICAgIHRp bWVsaW1pdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIEluIGNhc2UgdGltZWQgQVNLIGlu dGVycnVwdGVkICovCi0jaWZuZGVmIE5PU1BMCi0gICAgdW5rbWFjcm8gPSAwOwkJCS8qIE9yIE9O X1VOS05PV05fTUFDUk8gaW50ZXJydXB0ZWQuLiAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0jZW5k aWYgLyogTk9JQ1AgKi8KLSAgICB6Y2hrb2QgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBPciBmaWxlIGV4cGFuc2lvbiBpbnRlcnJ1cHRlZC4uLiAqLwotICAgIHpjaGtpZCA9IDA7Ci0g ICAgaW50ZXJydXB0ZWQgPSAxOwotCi0gICAgaWYgKHdoYXQgJiBXX0NPTk5FQ1QpIHsJCS8qIEFy ZSB3ZSBpbiBDT05ORUNUIG1vZGU/ICovCi0vKgotICBUaGUgSFAgd29ya3N0YXRpb24gUmVzZXQg a2V5IHNlbmRzIHNvbWUga2luZCBvZiB1ZWJlci1TSUdJTlQgdGhhdCBjYW4gbm90Ci0gIGJlIFNJ R19JR05vcmVkLCBzbyB3ZSB3aW5kIHVwIGhlcmUgc29tZWhvdyAoZXZlbiB0aG91Z2ggdGhpcyBp cyAqbm90KiB0aGUKLSAgY3VycmVudCBTSUdJTlQgaGFuZGxlcikuICBKdXN0IHJldHVybi4KLSov Ci0gICAgICAgIGRlYnVnKEYxMDEsInRyYXA6IFNJR0lOVCBjYXVnaHQgZHVyaW5nIENPTk5FQ1Qi LCIiLHNpZyk7Ci0gICAgICAgIFNJR1JFVFVSTjsKLSAgICB9Ci0jaWZuZGVmIE5PU1BMCi0gICAg aWYgKGlfYWN0aXZlKSB7ICAgICAgICAgICAgICAgICAgICAgLyogSU5QVVQgY29tbWFuZCB3YXMg YWN0aXZlPyAqLwotICAgICAgICBpX2FjdGl2ZSA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIE5v dCBhbnkgbW9yZS4uLiAqLwotICAgICAgICBpbnN0YXR1cyA9IElOUF9VSTsgICAgICAgICAgICAg IC8qIElOUFVUIHN0YXR1cyA9IFVzZXIgSW50ZXJydXB0ZWQgKi8KLSAgICB9Ci0jZW5kaWYgLyog Tk9TUEwgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICBmdHJlc2V0KCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBSZXN0b3JlIGdsb2JhbCBwcm90b2NvbCBzZXR0aW5ncyAqLwotICAgIGJp bmFyeSA9IGJfc2F2ZTsgICAgICAgICAgICAgICAgICAgIC8qIFRoZW4gcmVzdG9yZSB0aGVzZSAq LwotICAgIGZuY252ICA9IGZfc2F2ZTsKLSAgICBieWVfYWN0aXZlID0gMDsKLSAgICBkaXJhY3Rp dmUgPSAwOwotICAgIGNkYWN0aXZlID0gMDsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICB6Y2xv c2UoWklGSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSB3ZXJlIHRyYW5zZmVycmlu ZyBhIGZpbGUsICovCi0gICAgemNsb3NlKFpPRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyog Y2xvc2UgaXQuICovCi0jaWZuZGVmIE5PSUNQCi0gICAgY21kc3F1byhjbWRfcXVvdGluZyk7ICAg ICAgICAgICAgICAgLyogSWYgY29tbWFuZCBxdW90aW5nIHdhcyB0dXJuZWQgb2ZmICovCi0jaWZk ZWYgQ0tMRUFSTgotICAgIHsKLQlleHRlcm4gRklMRSAqIGxlYXJuZnA7Ci0JZXh0ZXJuIGludCBs ZWFybmluZzsKLQlpZiAobGVhcm5mcCkgewotCSAgICBmY2xvc2UobGVhcm5mcCk7Ci0JICAgIGxl YXJuZnAgPSBOVUxMOwotCSAgICBsZWFybmluZyA9IDA7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBD S0xFQVJOICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLSNpZmRlZiBDS19BUEMKLSAgICBkZWxtYWMo Il9hcGNfY29tbWFuZHMiLDEpOwotICAgIGFwY2FjdGl2ZSA9IEFQQ19JTkFDVElWRTsKLSNlbmRp ZiAvKiBDS19BUEMgKi8KLQotI2lmZGVmIFZNUwotLyoKLSAgRml4IHRlcm1pbmFsLgotKi8KLSAg ICBpZiAoZnRfd2luKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBjdXJzZXMgd2luZG93 IG9wZW4gKi8KLSAgICAgICAgZGVidWcoRjEwMCwiXkMgdHJhcCgpIGN1cnNlcyIsIiIsMCk7Ci0g ICAgICAgIHh4c2NyZWVuKFNDUl9DVywwLDBMLCIiKTsgICAgICAgLyogQ2xvc2UgaXQgKi8KLSAg ICAgICAgY29ucmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHRlcm1pbmFs ICovCi0gICAgICAgIGkgPSBwcmludGYoIl5DLi4uIik7ICAgICAgICAgICAgLyogRWNobyBeQyB0 byBzdGFuZGFyZCBvdXRwdXQgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBjb25yZXMoKTsKLSAg ICAgICAgaSA9IHByaW50ZigiXkMuLi5cbiIpOyAgICAgICAgICAvKiBFY2hvIF5DIHRvIHN0YW5k YXJkIG91dHB1dCAqLwotICAgIH0KLSAgICBpZiAoaSA8IDEgJiYgZmVycm9yKHN0ZG91dCkpIHsg ICAgICAvKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgKi8KLSAgICAgICAgZGVidWcoRjEwMCwiXkMg dHJhcCgpIGVycm9yIiwiIiwwKTsKLSAgICAgICAgZmNsb3NlKHN0ZG91dCk7ICAgICAgICAgICAg ICAgICAvKiBjbG9zZSBzdGFuZGFyZCBvdXRwdXQgKi8KLSAgICAgICAgZiA9IGZvcGVuKGRmdHR5 LCAidyIpOyAgICAgICAgICAvKiBvcGVuIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCAqLwotICAg ICAgICBpZiAoZikgc3Rkb3V0ID0gZjsgICAgICAgICAgICAgIC8qIGFuZCBtYWtlIGl0IHN0YW5k YXJkIG91dHB1dCAqLwotICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAgICAgICAgIC8q IGFuZCBlY2hvIHRoZSBeQyBhZ2Fpbi4gKi8KLSAgICB9Ci0jZWxzZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTm90IFZNUyAqLwotI2lmZGVmIFNUUkFUVVMKLSAgICBjb25y ZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgY29uc29sZSBiYWNrIHRvIG5v cm1hbCBtb2RlICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICBp ZiAoZnRfd2luKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBjdXJzZXMgd2luZG93IG9w ZW4sICovCi0gICAgICAgIGRlYnVnKEYxMDAsIl5DIHRyYXAoKSBjdXJzZXMiLCIiLDApOwotICAg ICAgICB4eHNjcmVlbihTQ1JfQ1csMCwwTCwiIik7CS8qIGNsb3NlIGl0LiAqLwotICAgICAgICBw cmludGYoIl5DLi4uIik7ICAgICAgICAgICAgICAgIC8qIEVjaG8gXkMgdG8gc3RhbmRhcmQgb3V0 cHV0ICovCi0gICAgfSBlbHNlIHsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgcHJpbnRm KCJeQy4uLlxuIik7Ci0jaWZuZGVmIE5PWEZFUgotICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8K LSNlbmRpZiAvKiBWTVMgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIGNvbm5vaV9tdCgpOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEtpbGwgYXN5bmNoIHRhc2sgdGhhdCBsaXN0ZW5zIHRv ICovCi0gICAgdHRpbW9mZigpOwotICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRoZSBrZXlib2FyZCAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0KLSNpZm5k ZWYgTk9DQ1RSQVAKLS8qICBUaGlzIGlzIHN0dXBpZCAtLSBldmVyeSB2ZXJzaW9uIHNob3VsZCBo YXZlIHR0aW1vZmYoKS4uLiAgKi8KLSNpZmRlZiBVTklYCi0gICAgdHRpbW9mZigpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KLSNl bHNlCi0jaWZkZWYgT1NLCi0gICAgdHRpbW9mZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAg LyogVHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KLSNlbHNlCi0jaWZkZWYgU1RSQVRV UwotICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGFu eSB0aW1lciBpbnRlcnJ1cHRzICovCi0jZWxzZQotI2lmZGVmIE9TMgotI2lmbmRlZiBOT1NFVEtF WQotICAgIG9zMmdrcyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gYmFjayBv biBrZXljb2RlIG1hcHBpbmcgICovCi0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLSNpZm5kZWYgTk9M T0NBTAotICAgIGZvciAoaSA9IDA7IGkgPCBWTlVNOyBpKyspCi0gICAgICBWc2NyblJlc2V0UG9w dXAoaSk7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmZGVmIFRDUFNPQ0tFVAotI2lmZGVmIE5U Ci0gICAgLyogV1NBSXNCbG9ja2luZygpIHJldHVybnMgRkFMU0UgaW4gV2luOTUgZHVyaW5nIGEg YmxvY2tpbmcgYWNjZXB0IGNhbGwgKi8KLSAgICBpZiAoIFdTQVNhZmVUb0NhbmNlbCAvKiAmJiBX U0FJc0Jsb2NraW5nKCkgKi8gKSB7Ci0gICAgICAgIFdTQUNhbmNlbEJsb2NraW5nQ2FsbCgpOwot ICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2lmZGVmIENL X05FVEJJT1MKLSAgICBOQ0JDYW5jZWxPdXRzdGFuZGluZygpOwotI2VuZGlmIC8qIENLX05FVEJJ T1MgKi8KLSAgICB0dGltb2ZmKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9m ZiBhbnkgdGltZXIgaW50ZXJydXB0cyAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICB0dGltb2Zm KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJy dXB0cyAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFNU UkFUVVMgKi8KLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZmRlZiBO RVRQVFkKLSAgICAvKiBDbGVhbiB1cCBDdHJsLUMgb3V0IG9mIFJFRElSRUNUIG9yIGV4dGVybmFs IHByb3RvY29sICovCi0gICAgewotCWV4dGVybiBQSURfVCBwdHlfZm9ya19waWQ7Ci0JZXh0ZXJu IGludCBwdHlfbWFzdGVyX2ZkLCBwdHlfc2xhdmVfZmQ7Ci0JaW50IHg7Ci0KLQlzaWduYWwoU0lH Q0hMRCxTSUdfSUdOKTsJLyogV2UgZG9uJ3Qgd2FudCB0aGlzIGFueSBtb3JlICovCi0KLQlkZWJ1 ZyhGMTAxLCJ0cmFwIHB0eV9tYXN0ZXJfZmQiLCIiLHB0eV9tYXN0ZXJfZmQpOwotCWlmIChwdHlf bWFzdGVyX2ZkID4gMikgewotCSAgICB4ID0gY2xvc2UocHR5X21hc3Rlcl9mZCk7Ci0JICAgIGRl YnVnKEYxMDEsInRyYXAgcHR5X21hc3Rlcl9mZCBjbG9zZSIsIiIseCk7Ci0JfQotCXB0eV9tYXN0 ZXJfZmQgPSAtMTsKLQlkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9zbGF2ZV9mZCIsIiIscHR5X3NsYXZl X2ZkKTsKLQlpZiAocHR5X3NsYXZlX2ZkID4gMikgewotCSAgICB4ID0gY2xvc2UocHR5X3NsYXZl X2ZkKTsKLQkgICAgZGVidWcoRjEwMSwidHJhcCBwdHlfc2xhdmVfZmQgY2xvc2UiLCIiLHgpOwot CX0KLQlwdHlfc2xhdmVfZmQgPSAtMTsKLQlkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9mb3JrX3BpZCIs IiIscHR5X2ZvcmtfcGlkKTsKLQlpZiAocHR5X2ZvcmtfcGlkID4gMCkgewotCSAgICB4ID0ga2ls bChwdHlfZm9ya19waWQsMCk7CS8qIFNlZSBpZiB0aGUgZm9yayBpcyByZWFsbHkgdGhlcmUgKi8K LQkgICAgZGVidWcoRjExMSwidHJhcCBwdHlfZm9ya19waWQga2lsbCAwIGVycm5vIixja2l0b2Eo eCksZXJybm8pOwotCSAgICBpZiAoeCA9PSAwKSB7CQkvKiBTZWVtcyB0byBiZSBhY3RpdmUgKi8K LQkJeCA9IGtpbGwocHR5X2ZvcmtfcGlkLFNJR0hVUCk7IC8qIEFzayBpdCB0byBjbGVhbiB1cCAm IGV4aXQgKi8KLQkJZGVidWcoRjEwMSwidHJhcCBwdHlfZm9ya19waWQga2lsbCBTSUdIVVAiLCIi LHgpOwotCQltc2xlZXAoMTAwKTsKLQkJZXJybm8gPSAwOwotCQl4ID0ga2lsbChwdHlfZm9ya19w aWQsMCk7IC8qIElzIGl0IHN0aWxsIHRoZXJlPyAqLwotCQlpZiAoeCA9PSAwCi0jaWZkZWYgRVNS Q0gKLQkJICAgIC8qIFRoaXMgbW9kdWxlIGlzIG5vdCBhbHdheXMgZXhwb3NlZCB0byA8ZXJybm8u aD4gKi8KLQkJICAgIHx8IGVycm5vICE9IEVTUkNICi0jZW5kaWYJLyogRVNSQ0ggKi8KLQkJICAg ICkgewotCQkgICAgeCA9IGtpbGwocHR5X2ZvcmtfcGlkLFNJR0tJTEwpOwotCQkgICAgZGVidWco RjEwMSwidHJhcCBwdHlfZm9ya19waWQga2lsbCBTSUdLSUxMIiwiIix4KTsKLQkJfQotCSAgICB9 Ci0JICAgIHB0eV9mb3JrX3BpZCA9IC0xOwotCX0KLSAgICB9Ci0jZW5kaWYJLyogTkVUUFRZICov Ci0KLSNpZmRlZiBPU0sKLSAgICBzaWdtYXNrKC0xKTsKLS8qCi0gIFdlIGFyZSBpbiBhbiBpbnRl cmNlcHQgcm91dGluZSBidXQgZG8gbm90IHBlcmZvcm0gYSBGJFJURSAoZG9uZSBpbXBsaWNpdGx5 Ci0gIGJ5IHJ0cykuICBXZSBoYXZlIHRvIGRlY3JlbWVudCB0aGUgc2lnbWFzayBhcyBGJFJURSBk b2VzLiAgV2FybmluZzogbG9uZ2p1bXAKLSAgb25seSByZXN0b3JlcyB0aGUgY3B1IHJlZ2lzdGVy cywgTk9UIHRoZSBmcHUgcmVnaXN0ZXJzLiAgU28gZG9uJ3QgdXNlIGZwdSBhdAotICBhbGwgb3Ig YXQgbGVhc3QgZG9uJ3QgdXNlIGNvbW1vbiBmcHUgKGRvdWJsZSBvciBmbG9hdCkgcmVnaXN0ZXIg dmFyaWFibGVzLgotKi8KLSNlbmRpZiAvKiBPU0sgKi8KLQotI2lmZGVmIE5UU0lHCi0gICAgUG9z dEN0cmxDU2VtKCk7Ci0jZWxzZSAvKiBOVFNJRyAqLwotICAgIGRlYnVnKEYxMDAsInRyYXAgYWJv dXQgdG8gbG9uZ2ptcCIsIiIsMCk7Ci0jaWZkZWYgTlQKLSAgICBja2xvbmdqbXAoY2tqYWRkcihj bWpidWYpLDEpOwotI2Vsc2UgLyogTlQgKi8KLSAgICBja2xvbmdqbXAoY21qYnVmLDEpOwotI2Vu ZGlmIC8qIE5UICovCi0jZW5kaWYgLyogTlRTSUcgKi8KLSNlbHNlIC8qIE5PQ0NUUkFQICovCi0v KiBObyBDdHJsLUMgdHJhcCwganVzdCBleGl0LiAqLwotI2lmZGVmIENLX0NVUlNFUyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEN1cnNlcyBzdXBwb3J0PyAqLwotICAgIHh4c2NyZWVuKFNDUl9D VywwLDBMLCIiKTsgICAgICAgICAgIC8qIENsb3NlIGN1cnNlcyB3aW5kb3cgKi8KLSNlbmRpZiAv KiBDS19DVVJTRVMgKi8KLSAgICBkb2V4aXQoQkFEX0VYSVQsd2hhdCk7ICAgICAgICAgICAgICAv KiBFeGl0IHBvb3JseSAqLwotI2VuZGlmIC8qIE5PQ0NUUkFQICovCi0gICAgU0lHUkVUVVJOOwot fQotCi0KLS8qICBDIEsgXyBUIEkgTSBFICAtLSBSZXR1cm5zIHBvaW50ZXIgdG8gY3VycmVudCB0 aW1lLiAqLwotCi1jaGFyICoKLWNrX3RpbWUoKSB7Ci0gICAgc3RhdGljIGNoYXIgdGJ1ZlsxMF07 Ci0gICAgY2hhciAqcDsKLSAgICBpbnQgeDsKLQotICAgIHp0aW1lKCZwKTsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qICJUaHUgRmViICA4IDEyOjAwOjAwIDE5OTAiICovCi0gICAgaWYgKCFw KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGlrZSBhc2N0aW1lKCkhICovCi0gICAg ICByZXR1cm4oIiIpOwotICAgIGlmICgqcCkgewotICAgICAgICBmb3IgKHggPSAxMTsgeCA8IDE5 OyB4KyspICAgICAgIC8qIGNvcHkgaGg6bW06c3MgKi8KLSAgICAgICAgICB0YnVmW3ggLSAxMV0g PSBwW3hdOyAgICAgICAgICAvKiB0byB0YnVmICovCi0gICAgICAgIHRidWZbOF0gPSBOVUw7ICAg ICAgICAgICAgICAgICAgLyogdGVybWluYXRlICovCi0gICAgfQotICAgIHJldHVybih0YnVmKTsg ICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCByZXR1cm4gaXQgKi8KLX0KLQotLyogIEMgQyBf IEMgTCBFIEEgTiAgLS0gIENsZWFudXAgYWZ0ZXIgdGVybWluYWwgaW50ZXJydXB0IGhhbmRsZXIg Ki8KLQotI2lmZGVmIEdFTURPUwotaW50Ci1jY19jbGVhbigpIHsKLSAgICB6Y2xvc2UoWklGSUxF KTsgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSB3ZXJlIHRyYW5zZmVycmluZyBhIGZpbGUs ICovCi0gICAgemNsb3NlKFpPRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyogY2xvc2UgaXQu ICovCi0gICAgcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgICAgICAgICAgICAgLyogTm90IFZNUywg bm8gcHJvYmxlbS4uLiAqLwotfQotI2VuZGlmIC8qIEdFTURPUyAqLwotCi0KLS8qICBTIFQgUCBU IFIgQSBQIC0tIEhhbmRsZSBTSUdUU1RQIChzdXNwZW5kKSBzaWduYWxzICovCi0KLVNJR1RZUAot I2lmZGVmIENLX0FOU0lDCi1zdHB0cmFwKGludCBzaWcpCi0jZWxzZQotc3RwdHJhcChzaWcpIGlu dCBzaWc7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHN0cHRyYXAgKi8gewotCi0jaWZuZGVm IE5PSkMKLSAgICBpbnQgeDsgZXh0ZXJuIGludCBjbWZsZ3M7Ci0gICAgZGVidWcoRjEwMSwic3Rw dHJhcCgpIGNhdWdodCBzaWduYWwiLCIiLHNpZyk7Ci0gICAgaWYgKCF4c3VzcGVuZCkgewotICAg ICAgICBwcmludGYoIlxyXG5zdXNwZW5kIGRpc2FibGVkXHJcbiIpOwotI2lmbmRlZiBOT0lDUAot ICAgICAgICBpZiAod2hhdCAmIFdfQ09NTUFORCkgewkJLyogSWYgd2Ugd2VyZSBwYXJzaW5nIGNv bW1hbmRzICovCi0gICAgICAgICAgICBwcm9tcHQoeHhzdHJpbmcpOyAgICAgICAgICAgLyogcmVp c3N1ZSB0aGUgcHJvbXB0IGFuZCBwYXJ0aWFsICovCi0gICAgICAgICAgICBpZiAoIWNtZmxncykg ICAgICAgICAgICAgICAgLyogY29tbWFuZCAoaWYgYW55KSAqLwotICAgICAgICAgICAgICBwcmlu dGYoIiVzIixjbWRidWYpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICB9IGVs c2UgewotICAgICAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHRo ZSBjb25zb2xlICovCi0jaWZuZGVmIE9TMgotICAgICAgICAvKiBGbHVzaCBwZW5kaW5nIG91dHB1 dCBmaXJzdCwgaW4gY2FzZSB3ZSBhcmUgY29udGludWVkICovCi0gICAgICAgIC8qIGluIHRoZSBi YWNrZ3JvdW5kLCB3aGljaCBjb3VsZCBtYWtlIHVzIGJsb2NrICovCi0gICAgICAgIGZmbHVzaChz dGRvdXQpOwotCi0gICAgICAgIHggPSBwc3VzcGVuZCh4c3VzcGVuZCk7CQkvKiBUcnkgdG8gc3Vz cGVuZC4gKi8KLSAgICAgICAgaWYgKHggPCAwKQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAg IHByaW50ZigiSm9iIGNvbnRyb2wgbm90IHN1cHBvcnRlZFxyXG4iKTsKLSAgICAgICAgY29uaW50 KHRyYXAsc3RwdHJhcCk7ICAgICAgICAgICAvKiBSZWFybSB0aGUgdHJhcC4gKi8KLSAgICAgICAg ZGVidWcoRjEwMCwic3RwdHJhcCBiYWNrIGZyb20gc3VzcGVuZCIsIiIsMCk7Ci0gICAgICAgIHN3 aXRjaCAod2hhdCkgewotICAgICAgICAgIGNhc2UgV19DT05ORUNUOiAgICAgICAgICAgICAgIC8q IElmIHN1c3BlbmRlZCBkdXJpbmcgQ09OTkVDVD8gKi8KLSAgICAgICAgICAgIGNvbmJpbigoY2hh cillc2NhcGUpOyAgICAgICAvKiBwdXQgY29uc29sZSBiYWNrIGluIGJpbmFyeSBtb2RlICovCi0g ICAgICAgICAgICBkZWJ1ZyhGMTAwLCJzdHB0cmFwIFdfQ09OTkVDVCIsIiIsMCk7Ci0gICAgICAg ICAgICBicmVhazsKLSNpZm5kZWYgTk9JQ1AKLSAgICAgICAgICBjYXNlIFdfQ09NTUFORDogICAg ICAgICAgICAgICAvKiBTdXNwZW5kZWQgaW4gY29tbWFuZCBtb2RlICovCi0gICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJzdHB0cmFwIFdfQ09NTUFORCBwZmxhZyIsIiIscGZsYWcpOwotICAgICAgICAg ICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgIC8qIFB1dCBiYWNrIENCUkVBSyB0dHkgbW9k ZSAqLwotICAgICAgICAgICAgaWYgKHBmbGFnKSB7ICAgICAgICAgICAgICAgIC8qIElmIGNvbW1h bmQgcGFyc2luZyB3YXMgKi8KLSAgICAgICAgICAgICAgICBwcm9tcHQoeHhzdHJpbmcpOyAgICAg ICAvKiByZWlzc3VlIHRoZSBwcm9tcHQgYW5kIHBhcnRpYWwgKi8KLSAgICAgICAgICAgICAgICBp ZiAoIWNtZmxncykgICAgICAgICAgICAvKiBjb21tYW5kIChpZiBhbnkpICovCi0gICAgICAgICAg ICAgICAgICBwcmludGYoIiVzIixjbWRidWYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg YnJlYWs7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAg ICAgICAgICAgICAvKiBBbGwgb3RoZXIgY2FzZXMuLi4gKi8KLSAgICAgICAgICAgIGRlYnVnKEYx MDAsInN0cHRyYXAgZGVmYXVsdCIsIiIsMCk7Ci0gICAgICAgICAgICBjb25jYigoY2hhcillc2Nh cGUpOyAgICAgICAgLyogUHV0IGl0IGJhY2sgaW4gQ0JSRUFLIG1vZGUgKi8KLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE5PSkMgKi8KLSAgICBTSUdSRVRV Uk47Ci19Ci0KLSNpZmRlZiBUTE9HCi0jZGVmaW5lIFRCVUZMIDMwMAotCi0vKiAgVCBMIE8gRyAg LS0gIExvZyBhIHJlY29yZCBpbiB0aGUgdHJhbnNhY3Rpb24gZmlsZSAgKi8KLS8qCi0gQ2FsbCB3 aXRoIGEgZm9ybWF0IGFuZCAzIGFyZ3VtZW50czogdHdvIHN0cmluZ3MgYW5kIGEgbnVtYmVyOgot ICAgZiAgICAgLSBGb3JtYXQsIGEgYml0IHN0cmluZyBpbiByYW5nZSAwLTcsIGJpdCB4IGlzIG9u LCBhcmcgI3ggaXMgcHJpbnRlZC4KLSAgIHMxLHMyIC0gU3RyaW5nIGFyZ3VtZW50cyAwIGFuZCAx LgotICAgbiAgICAgLSBMb25nLCBhcmd1bWVudCAyLgotKi8KLVZPSUQKLSNpZmRlZiBDS19BTlNJ QwotZG90bG9nKGludCBmLCBjaGFyICpzMSwgY2hhciAqczIsIENLX09GRl9UIG4pCi0jZWxzZQot ZG90bG9nKGYsczEsczIsbikgaW50IGY7IENLX09GRl9UIG47IGNoYXIgKnMxLCAqczI7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRvdGxvZyAqLyB7Ci0gICAgc3RhdGljIGNoYXIgc1tUQlVG TF07Ci0gICAgZXh0ZXJuIGludCB0bG9nZm10OwotICAgIGNoYXIgKnNwID0gczsgaW50IHg7Ci0g ICAgaWYgKCFzMSkgczEgPSAiIjsKLSAgICBpZiAoIXMyKSBzMiA9ICIiOwotCi0gICAgaWYgKCF0 cmFsb2cpIHJldHVybjsgICAgICAgICAgICAgICAgLyogSWYgbm8gdHJhbnNhY3Rpb24gbG9nLCBk b24ndCAqLwotICAgIGlmICh0bG9nZm10ICE9IDEpIHJldHVybjsKLSAgICBzd2l0Y2ggKGYpIHsK LSAgICAgIGNhc2UgRjAwMDogICAgICAgICAgICAgICAgICAgICAgICAvKiAwIChzcGVjaWFsKSAi czEgbiBzMiIgICovCi0gICAgICAgIGlmICgoaW50KXN0cmxlbihzMSkgKyAoaW50KXN0cmxlbihz MikgKyAxNSA+IFRCVUZMKQotICAgICAgICAgIHNwcmludGYoc3AsIj9ULUxvZyBzdHJpbmcgdG9v IGxvbmciKTsKLSAgICAgICAgZWxzZQotCSAgc3ByaW50ZihzcCwiJXMgJXMgJXMiLHMxLGNrZnN0 b2EobiksczIpOwotICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7 Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGMDAxOiAgICAgICAgICAgICAgICAgICAgICAg IC8qIDEsICIgbiIgKi8KLSAgICAgICAgc3ByaW50ZihzcCwiICVzIixja2ZzdG9hKG4pKTsKLSAg ICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAwKSB0cmFsb2cgPSAwOwotICAgICAgICBicmVh azsKLSAgICAgIGNhc2UgRjAxMDogICAgICAgICAgICAgICAgICAgICAgICAvKiAyLCAiW3MyXSIg Ki8KLSAgICAgICAgeCA9IChpbnQpc3RybGVuKHMyKTsKLSAgICAgICAgaWYgKHMyW3hdID09ICdc bicpIHMyW3hdID0gJ1wwJzsKLSAgICAgICAgaWYgKHggKyA2ID4gVEJVRkwpCi0gICAgICAgICAg c3ByaW50ZihzcCwiP1N0cmluZyB0b28gbG9uZyIpOwotICAgICAgICBlbHNlIHNwcmludGYoc3As Ilslc10iLHMyKTsKLSAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUsIiIpIDwgMCkgdHJhbG9nID0g MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEYwMTE6ICAgICAgICAgICAgICAgICAgICAg ICAgLyogMywgIltzMl0gbiIgKi8KLSAgICAgICAgeCA9IChpbnQpc3RybGVuKHMyKTsKLSAgICAg ICAgaWYgKHMyW3hdID09ICdcbicpIHMyW3hdID0gJ1wwJzsKLSAgICAgICAgaWYgKHggKyA2ID4g VEJVRkwpCi0gICAgICAgICAgc3ByaW50ZihzcCwiP1N0cmluZyB0b28gbG9uZyIpOwotICAgICAg ICBlbHNlIHNwcmludGYoc3AsIlslc10gJXMiLHMyLGNrZnN0b2EobikpOwotICAgICAgICBpZiAo enNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAg Y2FzZSBGMTAwOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQsICJzMSIgKi8KLSAgICAgICAg aWYgKHpzb3V0bChaVEZJTEUsczEpIDwgMCkgdHJhbG9nID0gMDsKLSAgICAgICAgYnJlYWs7Ci0g ICAgICBjYXNlIEYxMDE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNSwgInMxOiBuIiAqLwot ICAgICAgICBpZiAoKGludClzdHJsZW4oczEpICsgMTUgPiBUQlVGTCkKLSAgICAgICAgICBzcHJp bnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7Ci0gICAgICAgIGVsc2Ugc3ByaW50ZihzcCwiJXM6 ICVzIixzMSxja2ZzdG9hKG4pKTsKLSAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAwKSB0 cmFsb2cgPSAwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRjExMDogICAgICAgICAgICAg ICAgICAgICAgICAvKiA2LCAiczEgczIiICovCi0gICAgICAgIHggPSAoaW50KXN0cmxlbihzMik7 Ci0gICAgICAgIGlmIChzMlt4XSA9PSAnXG4nKSBzMlt4XSA9ICdcMCc7Ci0gICAgICAgIGlmICgo aW50KXN0cmxlbihzMSkgKyB4ICsgNCA+IFRCVUZMKQotICAgICAgICAgIHNwcmludGYoc3AsIj9T dHJpbmcgdG9vIGxvbmciKTsKLSAgICAgICAgZWxzZQotCSAgc3ByaW50ZihzcCwiJXMlcyVzIixz MSwoKCpzMiA9PSAnOicpID8gIiIgOiAiICIpLHMyKTsKLSAgICAgICAgaWYgKHpzb3V0bChaVEZJ TEUscykgPCAwKSB0cmFsb2cgPSAwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRjExMTog ICAgICAgICAgICAgICAgICAgICAgICAvKiA3LCAiczEgczI6IG4iICovCi0gICAgICAgIHggPSAo aW50KXN0cmxlbihzMik7Ci0gICAgICAgIGlmIChzMlt4XSA9PSAnXG4nKSBzMlt4XSA9ICdcMCc7 Ci0gICAgICAgIGlmICgoaW50KXN0cmxlbihzMSkgKyB4ICsgMTUgPiBUQlVGTCkKLSAgICAgICAg ICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7Ci0gICAgICAgIGVsc2UKLQkgIHNwcmlu dGYoc3AsIiVzJXMlczogJXMiLHMxLCgoKnMyID09ICc6JykgPyAiIiA6ICIgIiksczIsY2tmc3Rv YShuKSk7Ci0gICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsKLSAg ICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBzcHJpbnRmKHNwLCI/SW52YWxp ZCBmb3JtYXQgZm9yIHRsb2coKSAtICVkIixmKTsKLSAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUs cykgPCAwKSB0cmFsb2cgPSAwOwotICAgIH0KLX0KLQotLyoKLSAgRCBPIFggTCBPIEcKLQotICBU aGlzIGlzIHRoZSB0cmFuc2FjdGlvbi1sb2cgd3JpdGVyIGZvciBCUklFRiBmb3JtYXQuCi0gIFRo ZSBpZGVhIGlzIHByb2R1Y2Ugb25lIHJlY29yZCAobGluZSkgcGVyIGZpbGUuICBFYWNoIHJlY29y ZAotICBoYXMgdGhlIGZvbGxvd2luZyBkZWxpbWl0ZWQgZmllbGRzOgotICAgIERhdGUgKHl5eXlt bWRkKQotICAgIFRpbWUgKGhoOm1tOnNzKQotICAgIEFjdGlvbjogU0VORCBvciBSRUNWCi0gICAg RmlsZSBuYW1lCi0gICAgRmlsZSBzaXplCi0gICAgVHJhbnNmZXIgbW9kZSAodGV4dCwgYmluYXJ5 LCBpbWFnZSwgbGFiZWxlZCwgZXRjKS4KLSAgICBTdGF0dXM6IE9LIG9yIEZBSUxFRAotICAgIEZy ZWUtZm9ybSBjb21tZW50cyBpbiBkb3VibGVxdW90ZXMKLSAgVGhlIGRlZmF1bHQgc2VwYXJhdG9y IGlzIGNvbW1hLgotICBJZiBhIGZpZWxkIGNvbnRhaW5zIHRoZSBzZXBhcmF0b3IsIGl0IGlzIGVu Y2xvc2VkIGluIGRvdWJsZXF1b3Rlcy4KLSovCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWRveGxv ZyhpbnQgeCwgY2hhciAqIGZuLCBDS19PRkZfVCBmcywgaW50IGZtLCBpbnQgc3RhdHVzLCBjaGFy ICogbXNnKQotI2Vsc2UKLWRveGxvZyh4LCBmbiwgZnMsIGZtLCBzdGF0dXMsIG1zZykKLSAgICBp bnQgeDsgY2hhciAqIGZuOyBDS19PRkZfVCBmczsgaW50IGZtOyBpbnQgc3RhdHVzOyBjaGFyICog bXNnOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBkb3hsb2cgKi8gewotICAgIGV4dGVybiBp bnQgdGxvZ3NlcDsKLSAgICBjaGFyIHNlcFsyXTsKLSAgICBjaGFyIGJ1ZltDS01BWFBBVEgrMjU2 XSwgKiBidWZwOwotICAgIGNoYXIgdG1wYnVmWzMyXTsKLSAgICBjaGFyICogcywgKiBwOwotICAg IGludCBsZW4sIGxlZnQsIGZ0cCA9IDAsIGs7Ci0KLSAgICBpZiAoIXRyYWxvZykgcmV0dXJuOyAg ICAgICAgICAgICAgICAvKiBJZiBubyB0cmFuc2FjdGlvbiBsb2csIGRvbid0ICovCi0KLSAgICBp ZiAoIWZuKSBmbiA9ICIiOyAgICAgICAgICAgICAgICAgICAvKiBQcm90ZWN0IGFnYWluc3QgbnVs bCBwb2ludGVycyAqLwotICAgIGlmICghbXNnKSBtc2cgPSAiIjsKLSAgICBpZiAoeCAmIFdfRlRQ KQotICAgICAgZnRwKys7Ci0KLSAgICBzZXBbMF0gPSAoY2hhcikgdGxvZ3NlcDsKLSAgICBzZXBb MV0gPSBOVUw7Ci0gICAgaWYgKCFzZXBbMF0pIHNlcFswXSA9ICcsJzsKLQotICAgIGJ1ZnAgPSBi dWY7Ci0gICAgbGVmdCA9IHNpemVvZihidWYpOwotICAgIGRlYnVnKEYxMDEsIlhYWCBkb3hsb2cg bGVmdCAxIiwiIixsZWZ0KTsKLQotICAgIHAgPSB6em5kYXRlKCk7ICAgICAgICAgICAgICAgICAg ICAgIC8qIERhdGUgKi8KLSAgICBja21ha21zZyhidWYsIGxlZnQsIHAgPyBwIDogIjAwMDAwMDAw Iiwgc2VwLCBOVUxMLCBOVUxMKTsKLSAgICBidWZwICs9IDk7Ci0gICAgbGVmdCAtPSA5OwotICAg IGRlYnVnKEYxMTEsIlhYWCBkb3hsb2cgbGVmdCAyIixidWYsbGVmdCk7Ci0KLSAgICB6dGltZSgm cCk7Ci0gICAgY2tzdHJuY3B5KGJ1ZnAscCsxMSxsZWZ0KTsKLSAgICBidWZwICs9IDg7Ci0gICAg bGVmdCAtPSA4OwotICAgIGRlYnVnKEYxMTEsIlhYWCBkb3hsb2cgbGVmdCAzIixidWYsbGVmdCk7 Ci0KLSAgICBpZiAoZnRwKSB7Ci0JaWYgKCEoeCAmIChXX1NFTkR8V19SRUNWKSkpCi0JICByZXR1 cm47Ci0JcyA9ICAoeCAmIFdfU0VORCkgPyAiUFVUIiA6ICJHRVQiOwotCWsgPSAzOwotICAgIH0g ZWxzZSB7Ci0JcyA9ICAoeCAmIFdfU0VORCkgPyAiU0VORCIgOiAiUkVDViI7Ci0JayA9IDQ7Ci0g ICAgfQotICAgIGNrbWFrbXNnKGJ1ZnAsbGVmdCxzZXAscyxzZXAsTlVMTCk7Ci0gICAgYnVmcCAr PSBrICsgMjsKLSAgICBsZWZ0IC09IChrICsgMik7Ci0gICAgZGVidWcoRjExMSwiWFhYIGRveGxv ZyBsZWZ0IDQiLGJ1ZixsZWZ0KTsKLQotICAgIHMgPSAiIjsKLSAgICBpZiAoY2tzdHJjaHIoZm4s c2VwWzBdKSkJCS8qIEZpbGVuYW1lICovCi0gICAgICBzID0gIlwiIjsKLSAgICBja21ha21zZyhi dWZwLGxlZnQscyxmbixzLHNlcCk7Ci0gICAgc3ByaW50Zih0bXBidWYsIiVzIixja2ZzdG9hKGZz KSk7CS8qIFNpemUgKi8KLSAgICBja3N0cm5jYXQoYnVmLHRtcGJ1ZixDS01BWFBBVEgpOwotICAg IGNrc3RybmNhdChidWYsc2VwLENLTUFYUEFUSCk7Ci0gICAgZGVidWcoRjExMCwiZG94bG9nIDQi LGJ1ZiwwKTsKLQotI2lmZGVmIE5PSUNQCi0gICAgLyogVHJhbnNmZXIgbW9kZSAqLwotICAgIGNr c3RybmNweSh0bXBidWYsIChiaW5hcnkgPyAiYmluYXJ5IiA6ICJ0ZXh0IiksIFRNUEJVRlNJWik7 Ci0jZWxzZQotICAgIGNrc3RybmNweSh0bXBidWYsZ2Ztb2RlKGZtLDApLFRNUEJVRlNJWik7Ci0j ZW5kaWYgLyogTk9JQ1AgKi8KLSAgICBpZiAoY2tzdHJjaHIodG1wYnVmLHNlcFswXSkpIHsgICAg ICAvKiBNaWdodCBjb250YWluIHNwYWNlcyAqLwotICAgICAgICBja3N0cm5jYXQoYnVmLCJcIiIs Q0tNQVhQQVRIKTsKLSAgICAgICAgY2tzdHJuY2F0KGJ1Zix0bXBidWYsQ0tNQVhQQVRIKTsKLSAg ICAgICAgY2tzdHJuY2F0KGJ1ZiwiXCIiLENLTUFYUEFUSCk7Ci0gICAgfSBlbHNlCi0gICAgICBj a3N0cm5jYXQoYnVmLHRtcGJ1ZixDS01BWFBBVEgpOwotICAgIGNrc3RybmNhdChidWYsc2VwLENL TUFYUEFUSCk7Ci0gICAgZGVidWcoRjExMCwiZG94bG9nIDUiLGJ1ZiwwKTsKLQotICAgIGNrc3Ry bmNhdChidWYsIHN0YXR1cyA/ICJGQUlMRUQiIDogIk9LIixDS01BWFBBVEgpOwotICAgIGxlbiA9 IHN0cmxlbihidWYpOwotICAgIGxlZnQgPSBDS01BWFBBVEgrMjU2IC0gbGVuOwotICAgIGlmIChs ZWZ0IDwgMikgZmF0YWwoImRveGxvZyBidWZmZXIgb3ZlcmxvdyIpOwotCi0gICAgZGVidWcoRjEx MSwiWFhYIGRveGxvZyBsZWZ0IDUiLGJ1ZixsZWZ0KTsKLQotICAgIGRlYnVnKEYxMTAsImRveGxv ZyBidWYgMSIsIGJ1ZiwgbGVuKTsKLSAgICBzID0gYnVmICsgbGVuOwotICAgIGlmIChzdGF0dXMg PT0gMCAmJiBsZWZ0ID4gMzIpIHsKLSAgICAgICAgbG9uZyBjcHMgPSAwTDsKLSNpZmRlZiBHRlRJ TUVSCi0JZGVidWcoRjEwMSwiRE9YTE9HIGZweGZzZWNzIiwiIiwobG9uZykoZnB4ZnNlY3MgKiAx MDAwKSk7Ci0gICAgICAgIGlmIChmcHhmc2VjcykgY3BzID0gKGxvbmcpKChDS0ZMT0FUKSBmcyAv IGZweGZzZWNzKTsKLSAgICAgICAgc3ByaW50ZihzLCIlc1wiJTAuM2ZzZWMgJWxkY3BzXCIiLHNl cCxmcHhmc2VjcyxjcHMpOwotI2Vsc2UKLSAgICAgICAgaWYgKHhmc2VjcykgY3BzID0gZnMgLyB4 ZnNlY3M7Ci0gICAgICAgIHNwcmludGYocywiJXNcIiVsZHNlYyAlbGRjcHNcIiIsc2VwLHhmc2Vj cyxjcHMpOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICB9IGVsc2UgaWYgKChpbnQpc3RybGVu KG1zZykgKyA0IDwgbGVmdCkgewotICAgICAgICBzcHJpbnRmKHMsIiVzXCIlc1wiIixzZXAsbXNn KTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBsZWZ0IDUiLGJ1ZixsZWZ0KTsK LQotICAgIGRlYnVnKEYxMTAsImRveGxvZyA1IixidWYsMCk7Ci0gICAgeCA9IHpzb3V0bChaVEZJ TEUsYnVmKTsKLSAgICBkZWJ1ZyhGMTAxLCJkb3hsb2cgenNvdXRsIiwiIix4KTsKLSAgICBpZiAo eCA8IDApIHRyYWxvZyA9IDA7Ci19Ci0jZW5kaWYgLyogVExPRyAqLwotCi0jaWZuZGVmIE1BQwot LyoKLSAgVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlzIGZvciBhbGwgaW1wbGVtZW50YXRpb25zIGJ1 dCB0aGUgTWFjaW50b3NoLgotKi8KLQotI2lmZGVmIENLX0NVUlNFUwotc3RhdGljIGludCByZXBh aW50ID0gMDsgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGRpc3BsYXkgbmVlZHMgcmVwYWlu dGluZyAqLwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi0jaWZuZGVmIE5PWEZFUgotLyogIEMg SCBLIEkgTiBUICAtLSAgQ2hlY2sgZm9yIGNvbnNvbGUgaW50ZXJydXB0cyAgKi8KLQotLyoKLSAg VXNlZCBkdXJpbmcgZmlsZSB0cmFuc2ZlciBpbiBsb2NhbCBtb2RlIG9ubHk6Ci0gIC4gSWYgdXNl ciBoYXMgbm90IHRvdWNoZWQgdGhlIGtleWJvYXJkLCByZXR1cm5zIDAgd2l0aCBubyBzaWRlIGVm ZmVjdHMuCi0gIC4gSWYgdXNlciB0eXBlZCBTIG9yIEEgKGV0Yywgc2VlIGJlbG93KSBwcmludHMg c3RhdHVzIG1lc3NhZ2UgYW5kIHJldHVybnMgMC4KLSAgLiBJZiB1c2VyIHR5cGVkIFggb3IgRiAo ZXRjLCBzZWUgYmVsb3cpIHJldHVybnMgMCB3aXRoIGN4c2VlbiBzZXQgdG8gMS4KLSAgLiBJZiB1 c2VyIHR5cGVkIFogb3IgQiAoZXRjLCBzZWUgYmVsb3cpIHJldHVybnMgMCB3aXRoIGN6c2VlbiBz ZXQgdG8gMS4KLSAgLiBJZiB1c2VyIHR5cGVkIEUgb3IgQyAoZXRjLCBzZWUgYmVsb3cpIHJldHVy bnMgLTEuCi0qLwotaW50Ci1jaGtpbnQoKSB7Ci0gICAgaW50IGNoLCBjbiwgb2ZkOyBsb25nIHp6 OwotICAgIGlmICgheGZyaW50KQotICAgICAgcmV0dXJuKDApOwotICAgIGlmICgoIWxvY2FsKSB8 fCAocXVpZXQpKSByZXR1cm4oMCk7IC8qIE9ubHkgZG8gdGhpcyBpZiBsb2NhbCAmIG5vdCBxdWll dCAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgaWYgKGNvbl9yZWFkc19tdCkgICAgICAgICAg ICAgICAgICAgLyogaWYgY29uaW50X210IHRhc2sgaXMgYWN0aXZlICovCi0gICAgICBpZiAoY29u aW50X2F2bCkgeyAgICAgICAgICAgICAgICAgLyogYW5kIHRoZXJlJ3MgYW4gaW50ZXJydXB0IHBl bmRpbmcgKi8KLSAgICAgICAgICBjbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9j ZXNzIGl0ICovCi0gICAgICAgICAgY2ggPSBjb25pbnRfY2g7Ci0gICAgICAgICAgY29uaW50X2F2 bCA9IDA7ICAgICAgICAgICAgICAgLyogdHVybiBvZmYgZmxhZyBzbyBjb25pbnRfbXQgY2FuICov Ci0gICAgICB9IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvY2VlZCAqLwot ICAgICAgICByZXR1cm4oMCk7Ci0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogaWYgY29uaW50X210IG5vdCBhY3RpdmUgKi8KLSAgICAgIGlmICgoY2ggPSBjb25pbmMo MikpIDwgMCkgICAgICAgICAvKiB0cnkgdG8gZ2V0IGNoYXIgbWFudWFsbHkgKi8KLSAgICAgICAg cmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAvKiBJL08gZXJyb3IsIG9yIG5vIGRhdGEg Ki8KLSAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBzdWNjZXNz ZnVsLCBzZXQgY24gc28gd2UgKi8KLSAgICAgICAgY24gPSAxOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBrbm93IHdlIGdvdCBvbmUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJjaGtpbnQgZ290IGtl eWJvYXJkIGNoYXJhY3RlciIsY2gsY24pOwotI2Vsc2UgLyogIWRhdGFnZW5lcmFsICovCi0jaWZk ZWYgTlRTSUcKLSAgICB7Ci0gICAgICAgIGV4dGVybiBpbnQgVGxzSW5kZXg7Ci0gICAgICAgIHN0 cnVjdCBfdGhyZWFkaW5mbyAqIHRocmVhZGluZm87Ci0gICAgICAgIHRocmVhZGluZm8gPSAoc3Ry dWN0IF90aHJlYWRpbmZvICopIFRsc0dldFZhbHVlKFRsc0luZGV4KTsKLSAgICAgICAgaWYgKHRo cmVhZGluZm8pIHsKLSAgICAgICAgICAgIGlmICghV2FpdFNlbSh0aHJlYWRpbmZvLT5EaWVTZW0s MCkpCi0gICAgICAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgLyogQ2FuY2VsIElt bWVkaWF0ZWx5ICovCi0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICBj biA9IGNvbmNoaygpOyAgICAgICAgICAgICAgICAgICAgICAvKiBBbnkgaW5wdXQgd2FpdGluZz8g Ki8KLSAgICBkZWJ1ZyhGMTAxLCJjb25jaGsiLCIiLGNuKTsKLSAgICBpZiAoY24gPCAxKSByZXR1 cm4oMCk7Ci0gICAgY2ggPSBjb25pbmMoNSkgOwotICAgIGRlYnVnKEYxMDEsImNvbmluYyIsIiIs Y2gpOwotICAgIGlmIChjaCA8IDApIHJldHVybigwKTsKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAq LwotCi0gICAgY2ggJj0gMDE3NzsKLSAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICBjYXNlICdBJzog Y2FzZSAnYSc6IGNhc2UgMDAwMTogICAgLyogU3RhdHVzIHJlcG9ydCAqLwotICAgICAgY2FzZSAn Uyc6IGNhc2UgJ3MnOgotICAgICAgICBpZiAoZmRpc3BsYSAhPSBYWUZEX1IgJiYgZmRpc3BsYSAh PSBYWUZEX1MgJiYgZmRpc3BsYSAhPSBYWUZEX04pCi0gICAgICAgICAgcmV0dXJuKDApOyAgICAg ICAgICAgICAgICAgICAgLyogT25seSBmb3Igc2VyaWFsLCBzaW1wbGUgb3Igbm9uZSAqLwotICAg ICAgICBvZmQgPSBmZGlzcGxhOyAgICAgICAgICAgICAgICAgIC8qIFtNRl0gU2F2ZSBmaWxlIGRp c3BsYXkgdHlwZSAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX04pCi0gICAgICAgICAg ZmRpc3BsYSA9IFhZRkRfUjsgICAgICAgICAgICAgLyogW01GXSBQcmV0ZW5kIHNlcmlhbCBpZiBu byBkaXNwbGF5ICovCi0gICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCJTdGF0dXMgcmVwb3J0 OiIpOwotICAgICAgICB4eHNjcmVlbihTQ1JfVE4sMCwwbCwiIGZpbGUgdHlwZTogIik7Ci0gICAg ICAgIGlmIChiaW5hcnkpIHsKLSAgICAgICAgICAgIHN3aXRjaChiaW5hcnkpIHsKLSAgICAgICAg ICAgICAgY2FzZSBYWUZUX0w6IHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJsYWJlbGVkIik7IGJyZWFr OwotICAgICAgICAgICAgICBjYXNlIFhZRlRfSTogeHhzY3JlZW4oU0NSX1RaLDAsMGwsImltYWdl Iik7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFhZRlRfVTogeHhzY3JlZW4oU0NSX1RaLDAs MGwsImJpbmFyeSB1bmRlZmluZWQiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g ICAgICAgICAgICAgIGNhc2UgWFlGVF9COiB4eHNjcmVlbihTQ1JfVFosMCwwbCwiYmluYXJ5Iik7 IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotI2lmZGVmIE5PQ1NFVFMK LSAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJ0ZXh0Iik7Ci0jZWxzZQotICAgICAg ICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMGwsInRleHQsICIpOwotICAgICAgICAgICAgaWYgKHRj aGFyc2V0ID09IFRDX1RSQU5TUCB8fCB4ZnJ4bGEgPT0gMCkgewotICAgICAgICAgICAgICAgIHh4 c2NyZWVuKFNDUl9UWiwwLDBsLCJ0cmFuc3BhcmVudCIpOwotICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkgewotICAgICAgICAgICAgICAgICAg ICB4eHNjcmVlbihTQ1JfVFosMCwwbCx0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkKTsKLSAgICAg ICAgICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMGwsIiA9PiAiKTsKLSAgICAgICAgICAg ICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZCk7 Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgeHhzY3JlZW4o U0NSX1RaLDAsMGwsZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZCk7Ci0gICAgICAgICAgICAgICAg ICAgIHh4c2NyZWVuKFNDUl9UVSwwLDBsLCIgPT4gIik7Ci0gICAgICAgICAgICAgICAgICAgIHh4 c2NyZWVuKFNDUl9UWiwwLDBsLHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQpOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgICAgIH0K LSAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsZmlsY250LCIgZmlsZSBudW1iZXIiKTsKLSAgICAg ICAgaWYgKGZzaXplKSB4eHNjcmVlbihTQ1JfUUUsMCxmc2l6ZSwiIHNpemUiKTsKLSAgICAgICAg eHhzY3JlZW4oU0NSX1FFLDAsZmZjLCIgY2hhcmFjdGVycyBzbyBmYXIiKTsKLSAgICAgICAgaWYg KGZzaXplID4gMEwpIHsKLSNpZmRlZiBDS19SRVNFTkQKLSAgICAgICAgICAgIHp6ID0gd2hhdCAm IFdfU0VORCA/IHNlbmRzdGFydCA6IHdoYXQgJiBXX1JFQ1YgPyByc19sZW4gOiAwOwotICAgICAg ICAgICAgenogPSAoIChmZmMgKyB6eikgKiAxMDBMICkgLyBmc2l6ZTsKLSNlbHNlCi0gICAgICAg ICAgICB6eiA9ICggZmZjICogMTAwTCApIC8gZnNpemU7Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICov Ci0gICAgICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCx6eiwgICAgICAiIHBlcmNlbnQgZG9uZSIp OwotICAgICAgICB9Ci0gICAgICAgIGlmIChiY3R1ID09IDQpIHsgICAgICAgICAgICAgICAgLyog QmxvY2sgY2hlY2sgKi8KLSAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UVSwwLDBMLCIgYmxvY2sg Y2hlY2s6ICIpOwotICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMEwsImJsYW5rLWZyZWUt MiIpOwotICAgICAgICB9IGVsc2UgeHhzY3JlZW4oU0NSX1FFLDAsKGxvbmcpYmN0dSwgICIgYmxv Y2sgY2hlY2siKTsKLSAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsKGxvbmcpcnB0ZmxnLCIgY29t cHJlc3Npb24iKTsKLSAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsKGxvbmcpZWJxZmxnLCIgOHRo LWJpdCBwcmVmaXhpbmciKTsKLSAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsKGxvbmcpbHNjYXB1 LCIgbG9ja2luZyBzaGlmdHMiKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrKQotICAgICAgICAgIHh4 c2NyZWVuKFNDUl9RRSwwLCBzcGVlZCwgIiBzcGVlZCIpOwotICAgICAgICBpZiAod2hhdCAmIFdf U0VORCkKLQotICAgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLHNwc2l6LCAiIHBhY2tldCBsZW5n dGgiKTsKLSAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDViB8fCB3aGF0ICYgV19SRU1PKQot ICAgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLHVycHNpeiwiIHBhY2tldCBsZW5ndGgiKTsKLSAg ICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsd3Nsb3RzLCAgIiB3aW5kb3cgc2xvdHMiKTsKLSAgICAg ICAgZmRpc3BsYSA9IG9mZDsgLyogW01GXSBSZXN0b3JlIGZpbGUgZGlzcGxheSB0eXBlICovCi0g ICAgICAgIHJldHVybigwKTsKLQotICAgICAgY2FzZSAnQic6IGNhc2UgJ2InOiBjYXNlIDAwMDI6 ICAgIC8qIENhbmNlbCBiYXRjaCAqLwotICAgICAgY2FzZSAnWic6IGNhc2UgJ3onOiBjYXNlIDAw MzI6Ci0gICAgICAgIGN6c2VlbiA9IDE7Ci0gICAgICAgIGludGVycnVwdGVkID0gMTsKLSAgICAg ICAgeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwKLSAgICAgICAgICAgICAgICAgKCgod2hhdCAm IFdfUkVDVikgJiYgKHdzbG90cyA+IDEpKSA/Ci0gICAgICAgICAgICAgICAgICAiQ2FuY2VsaW5n IGJhdGNoLCB3YWl0Li4uICIgOgotICAgICAgICAgICAgICAgICAgIkNhbmNlbGluZyBiYXRjaC4u LiAiKQotICAgICAgICAgICAgICAgICApOwotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICAgIGNh c2UgJ0YnOiBjYXNlICdmJzogY2FzZSAwMDA2OiAgICAvKiBDYW5jZWwgZmlsZSAqLwotICAgICAg Y2FzZSAnWCc6IGNhc2UgJ3gnOiBjYXNlIDAwMzA6Ci0gICAgICAgIGN4c2VlbiA9IDE7Ci0gICAg ICAgIGludGVycnVwdGVkID0gMTsKLSAgICAgICAgeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwK LSAgICAgICAgICAgICAgICAgKCgod2hhdCAmIFdfUkVDVikgJiYgKHdzbG90cyA+IDEpKSA/Ci0g ICAgICAgICAgICAgICAgICAiQ2FuY2VsaW5nIGZpbGUsIHdhaXQuLi4gIiA6Ci0gICAgICAgICAg ICAgICAgICAiQ2FuY2VsaW5nIGZpbGUuLi4gIikKLSAgICAgICAgICAgICAgICAgKTsKLSAgICAg ICAgcmV0dXJuKDApOwotCi0gICAgICBjYXNlICdSJzogY2FzZSAncic6IGNhc2UgMDAyMjogICAg LyogUmVzZW5kIHBhY2tldCAqLwotICAgICAgY2FzZSAwMDE1OiBjYXNlIDAwMTI6Ci0jaWZkZWYg U1RSRUFNSU5HCi0gICAgICAgIGlmIChzdHJlYW1pbmcpCi0gICAgICAgICAgcmV0dXJuKDApOwot I2VuZGlmIC8qIFNUUkVBTUlORyAqLwotICAgICAgICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBs LCJSZXNlbmRpbmcgcGFja2V0Li4uICIpOwotICAgICAgICBudW1lcnJzKys7Ci0gICAgICAgIHJl c2VuZCh3aW5sbyk7Ci0gICAgICAgIHJldHVybigwKTsKLQotI2lmZGVmIGRhdGFnZW5lcmFsCi0g ICAgICBjYXNlICdcMDMnOiAgICAgICAgICAgICAgICAgICAgICAgLyogV2UncmUgbm90IHRyYXBw aW5nIF5DJ3Mgd2l0aCAqLwotICAgICAgICB0cmFwKDApOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIHNpZ25hbHMsIHNvIHdlIGNoZWNrIGhlcmUgICAgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLwotCi0gICAgICBjYXNlICdDJzogY2FzZSAnYyc6ICAgICAgICAgICAgICAgLyogQ3RybC1D ICovCi0jaWZuZGVmIGRhdGFnZW5lcmFsCi0gICAgICBjYXNlICdcMDMnOgotI2VuZGlmIC8qIGRh dGFnZW5lcmFsICovCi0KLSAgICAgIGNhc2UgJ0UnOiBjYXNlICdlJzogICAgICAgICAgICAgICAv KiBTZW5kIGVycm9yIHBhY2tldCAqLwotICAgICAgY2FzZSAwMDA1OgotICAgICAgICBpbnRlcnJ1 cHRlZCA9IDE7Ci0gICAgICAgIHJldHVybigtMSk7Ci0KLSNpZmRlZiBDS19DVVJTRVMKLSAgICAg IGNhc2UgMDAxNDogICAgICAgICAgICAgICAgICAgICAgICAvKiBDdHJsLUwgdG8gcmVmcmVzaCBz Y3JlZW4gKi8KLSAgICAgIGNhc2UgJ0wnOiBjYXNlICdsJzogICAgICAgICAgICAgICAvKiBBbHNv IGFjY2VwdCBMICh1cHBlciwgbG93ZXIpICovCi0gICAgICBjYXNlIDAwMjc6ICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ3RybC1XIHN5bm9ueW0gZm9yIFZNUyAmIEluZ3JlcyAqLwotICAgICAg ICByZXBhaW50ID0gMTsKLSAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIENLX0NVUlNFUyAq LwotCi0gICAgICBjYXNlICdUJzoKLSAgICAgIGNhc2UgJ3QnOgkJCQkvKiBUdXJuIG9uIGRlYnVn LWxvZyB0aW1lc3RhbXBzICovCi0jaWZkZWYgREVCVUcKLQl7Ci0JICAgIGV4dGVybiBpbnQgZGVi dGltOwotCSAgICBpZiAoY2ggPT0gJ1QnKSB7Ci0JCWRlYnRpbSA9IDE7Ci0JCXh4c2NyZWVuKFND Ul9TVCxTVF9NU0csMGwsCi0JCQkgIkRlYnVnIHRpbWVzdGFtcHMgT24uLi4gIik7Ci0JICAgIH0g ZWxzZSB7Ci0JCWRlYnRpbSA9IDE7Ci0JCXh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsCi0JCQkg IkRlYnVnIHRpbWVzdGFtcHMgT2ZmLi4uICIpOwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIERFQlVH ICovCi0JcmV0dXJuKDApOwotCi0gICAgICBjYXNlICdEJzoKLSNpZmRlZiBERUJVRwotCWlmICgh ZGVibG9nKSB7Ci0JICAgIGRlYm9wbigiZGVidWcubG9nIiwwKTsKLQkgICAgaWYgKGRlYmxvZykg ewotCQl4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJkZWJ1Zy5sb2cgb3Blbi4uLiAiKTsKLQkg ICAgfSBlbHNlIHsKLQkJeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwiZGVidWcubG9nIG9wZW4g RkFJTEVELi4uICIpOwotCSAgICB9Ci0JfSBlbHNlIHsKLQkgICAgeHhzY3JlZW4oU0NSX1NULFNU X01TRywwbCwiRGVidWcgbG9nIE9uLi4uICIpOwotCX0KLQlpZiAoZGVibG9nKQotCSAgZGVib2sg PSAxOwotI2VuZGlmIC8qIERFQlVHICovCi0JcmV0dXJuKDApOwotCi0gICAgICBjYXNlICdkJzoJ CQkJLyogVHVybiBvZmYgZGVidWdnaW5nICovCi0jaWZkZWYgREVCVUcKLQlpZiAoZGVibG9nKQot CSAgeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwiRGVidWcgbG9nIE9mZi4uLiAiKTsKLQlkZWJv ayA9IDA7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQlyZXR1cm4oMCk7Ci0KLSAgICAgIGRlZmF1bHQ6 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbnl0aGluZyBlbHNlLCBwcmludCBtZXNzYWdl ICovCi0gICAgICAgIGludG1zZygxTCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci19Ci0K LS8qICBJIE4gVCBNIFMgRyAgLS0gIElzc3VlIG1lc3NhZ2UgYWJvdXQgdGVybWluYWwgaW50ZXJy dXB0cyAgKi8KLQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1pbnRtc2cobG9uZyBuKQotI2Vsc2UK LWludG1zZyhuKSBsb25nIG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGludG1zZyAqLyB7 Ci0jaWZkZWYgQ0tfTkVFRF9TSUcKLSAgICBjaGFyIGJ1Zls4MF07Ci0jZW5kaWYgLyogQ0tfTkVF RF9TSUcgKi8KLQotICAgIGlmICghZGlzcGxhIHx8IHF1aWV0KSAgICAgICAgICAgICAgIC8qIE5v dCBpZiB3ZSdyZSBiZWluZyBxdWlldCAqLwotICAgICAgcmV0dXJuOwotICAgIGlmIChzZXJ2ZXIg JiYgKCFzcnZkaXMgfHwgbiA+IC0xTCkpIC8qIFNwZWNpYWwgZm9yIHNlcnZlciAqLwotICAgICAg cmV0dXJuOwotI2lmZGVmIENLX05FRURfU0lHCi0gICAgYnVmWzBdID0gTlVMOyAgICAgICAgICAg ICAgICAgICAgICAgLyogS2VlcCBjb21waWxlcnMgaGFwcHkgKi8KLSNlbmRpZiAvKiBDS19ORUVE X1NJRyAqLwotI2lmbmRlZiBPWE9TCi0jaWZkZWYgU1ZPUlBPU0lYCi0gICAgY29uY2hrKCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgb3V0IHBlbmRpbmcgZXNjYXBlLXNpZ25h bHMgKi8KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLSNlbmRpZiAvKiAhIE9YT1MgKi8KLSNpZmRl ZiBWTVMKLSAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbyBDdHJs LUMgd2lsbCB3b3JrICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgaWYgKCghc2VydmVyICYmIG4g PT0gMUwpIHx8IChzZXJ2ZXIgJiYgbiA8IDBMKSkgewotCi0jaWZkZWYgQ0tfTkVFRF9TSUcKLSAg ICAgICAgaWYgKHhmcmludCkgewotCSAgICBja21ha21zZyhidWYsCi0JCSAgICAgODAsCi0JCSAg ICAgIlR5cGUgZXNjYXBlIGNoYXJhY3RlciAoIiwKLQkJICAgICBkYmNocihlc2NhcGUpLAotCQkg ICAgICIpIGZvbGxvd2VkIGJ5OiIsCi0JCSAgICAgTlVMTAotCQkgICAgICk7Ci0gICAgICAgICAg ICB4eHNjcmVlbihTQ1JfVE4sMCwwbCxidWYpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfTkVF RF9TSUcgKi8KLQotICAgICAgICBpZiAoeGZyaW50KSB7Ci0gICAgICAgICAgICBpZiAocHJvdG9j b2wgPT0gUFJPVE9fSykgewotIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCJYIHRvIGNhbmNlbCBmaWxl LCAgQ1IgdG8gcmVzZW5kIGN1cnJlbnQgcGFja2V0Iik7Ci0geHhzY3JlZW4oU0NSX1ROLDAsMGws IlogdG8gY2FuY2VsIGdyb3VwLCBBIGZvciBzdGF0dXMgcmVwb3J0Iik7Ci0geHhzY3JlZW4oU0NS X1ROLDAsMGwsIkUgdG8gc2VuZCBFcnJvciBwYWNrZXQsIEN0cmwtQyB0byBxdWl0IGltbWVkaWF0 ZWx5OiAiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgeHhzY3JlZW4o U0NSX1ROLDAsMGwsIkN0cmwtQyB0byBjYW5jZWwgZmlsZSB0cmFuc2ZlcjogIik7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB4eHNjcmVlbihTQ1JfVE4sMCww bCwiVHJhbnNmZXIgaW50ZXJydXB0aW9uIGRpc2FibGVkLiAiKTsKLSAgICAgICAgfQotICAgIH0K LSAgICBlbHNlIHh4c2NyZWVuKFNDUl9UVSwwLDBsLCIgIik7Ci19Ci0KLSNpZm5kZWYgTk9ESVNQ TEFZCi1zdGF0aWMgaW50IG5ld2RweSA9IDA7ICAgICAgICAgICAgICAgICAgLyogTmV3IGRpc3Bs YXkgZmxhZyAqLwotc3RhdGljIGNoYXIgZmJ1Zls4MF07ICAgICAgICAgICAgICAgICAgIC8qIEZp bGVuYW1lIGJ1ZmZlciAqLwotc3RhdGljIGNoYXIgYWJ1Zls4MF07ICAgICAgICAgICAgICAgICAg IC8qIEFzLW5hbWUgYnVmZmVyICovCi1zdGF0aWMgY2hhciBhMmJ1Zls4MF07ICAgICAgICAgICAg ICAgICAgLyogU2Vjb25kIEFzLW5hbWUgYnVmZmVyICovCi1zdGF0aWMgQ0tfT0ZGX1Qgb2xkZmZj ID0gMEw7Ci1zdGF0aWMgQ0tfT0ZGX1QgZG90cyA9IDBMOwotc3RhdGljIGludCBocG9zID0gMDsK LQotc3RhdGljIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUg U2VyaWFsIG9yIENSVCBkaXNwbGF5ICovCi1kcHlpbml0KCkgewotICAgIGludCBtID0gMCwgbiA9 IDA7Ci0gICAgY2hhciAqIHMgPSAiIjsKLQotICAgIG5ld2RweSA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qICBEb24ndCBkbyB0aGlzIGFnYWluICovCi0gICAgb2xkZmZjID0gKENLX09G Rl9UKTA7CQkvKiAgUmVzZXQgdGhpcyAqLwotICAgIGRvdHMgPSAoQ0tfT0ZGX1QpMDsJCQkvKiAg YW5kIHRoaXMuLiAqLwotICAgIG9sZGNwcyA9IGNwcyA9IDBMOwotCi0gICAgY29ub2xsKCIiKTsJ CQkJLyogTmV3IGxpbmUgKi8KLSAgICBpZiAod2hhdCAmIFdfU0VORCkgcyA9ICJTZW5kaW5nOiAi OwkvKiBBY3Rpb24gKi8KLSAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKSBzID0gIlJlY2Vpdmlu ZzogIjsKLSAgICBuID0gKGludClzdHJsZW4ocykgKyAoaW50KXN0cmxlbihmYnVmKTsKLSAgICBj b25vbChmYnVmKTsKLSAgICBtID0gKGludClzdHJsZW4oYWJ1ZikgKyA0OwotICAgIGlmIChuICsg bSA+IGNtZF9jb2xzKSB7Ci0gICAgICAgIGNvbm9sbCgiIik7Ci0gICAgICAgIG4gPSAwOwotICAg IH0gZWxzZQotICAgICAgbiArPSBtOwotICAgIGlmICgqYWJ1ZikgewotICAgICAgICBjb25vbCgi ID0+ICIpOwotICAgICAgICBjb25vbChhYnVmKTsKLSAgICB9Ci0gICAgbSA9IChpbnQpc3RybGVu KGEyYnVmKSArIDQ7Ci0gICAgaWYgKG4gKyBtID4gY21kX2NvbHMpIHsKLSAgICAgICAgY29ub2xs KCIiKTsKLSAgICAgICAgbiA9IDA7Ci0gICAgfSBlbHNlCi0gICAgICBuICs9IG07Ci0gICAgaWYg KCphMmJ1ZikgewotICAgICAgICBjb25vbCgiID0+ICIpOwotICAgICAgICBjb25vbChhMmJ1Zik7 Ci0gICAgfQotICAgICpmYnVmID0gTlVMOyAqYWJ1ZiA9IE5VTDsgKmEyYnVmID0gTlVMOwotICAg IGNvbm9sbCgiIik7Ci0gICAgaWYgKGZzaXplID4gKENLX09GRl9UKS0xKSB7CQkvKiBTaXplICov Ci0gICAgICAgIHNwcmludGYoZmJ1ZiwiU2l6ZTogJXMsIFR5cGU6ICIsY2tmc3RvYShmc2l6ZSkp OyAvKiBTQUZFICg4MCkgKi8KLSAgICAgICAgY29ub2woZmJ1Zik7ICpmYnVmID0gTlVMOwotICAg IH0gZWxzZSBjb25vbCgiU2l6ZTogdW5rbm93biwgVHlwZTogIik7Ci0gICAgaWYgKGJpbmFyeSkg ewkJCS8qIFR5cGUgKi8KLSAgICAgICAgc3dpdGNoKGJpbmFyeSkgewotICAgICAgICAgICAgICBj YXNlIFhZRlRfTDogY29ub2woImxhYmVsZWQiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug WFlGVF9JOiBjb25vbCgiaW1hZ2UiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgWFlGVF9V OiBjb25vbCgiYmluYXJ5IHVuZGVmaW5lZCIpOyBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs dDoKLSAgICAgICAgICAgICAgY2FzZSBYWUZUX0I6IGNvbm9sKCJiaW5hcnkiKTsgYnJlYWs7Ci0g ICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmZGVmIE5PQ1NFVFMKLSAgICAgICAgY29ub2woInRl eHQiKTsKLSNlbHNlCi0gICAgICAgIGNvbm9sKCJ0ZXh0LCAiKTsKLSAgICAgICAgaWYgKHRjaGFy c2V0ID09IFRDX1RSQU5TUCB8fCB4ZnJ4bGEgPT0gMCkgewotICAgICAgICAgICAgY29ub2woInRy YW5zcGFyZW50Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAod2hhdCAmIFdf U0VORCkgewotICAgICAgICAgICAgICAgIGNvbm9sKGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQp OwotICAgICAgICAgICAgICAgIGNvbm9sKCIgPT4gIik7Ci0gICAgICAgICAgICAgICAgY29ub2wo dGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgIGNvbm9sKHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQpOwotICAgICAgICAgICAg ICAgIGNvbm9sKCIgPT4gIik7Ci0gICAgICAgICAgICAgICAgY29ub2woZmNzaW5mb1tmY2hhcnNl dF0ua2V5d29yZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRT ICovCi0gICAgfQotI2lmZGVmIFNUUkVBTUlORwotICAgIGlmIChzdHJlYW1pbmcpCi0gICAgICBj b25vbCgiLCBTVFJFQU1JTkciKTsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSAgICBjb25vbGwo IiIpOwotCi0gICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7ICAgICAgICAgICAgLyogQ1JUIGZp ZWxkIGhlYWRpbmdzICovCi0vKgotICBEZWZpbmUgQ0tfQ1BTIHRvIHNob3cgY3VycmVudCB0cmFu c2ZlciByYXRlLgotICBMZWF2ZSBpdCB1bmRlZmluZWQgdG8gc2hvdyBlc3RpbWF0ZWQgdGltZSBy ZW1haW5pbmcuCi0gIEVzdGltYXRlZC10aW1lLXJlbWFpbmluZyBjb2RlIGZyb20gQW5keSBGeWZl LCBub3QgdGVzdGVkIG9uCi0gIHBhdGhvbG9naWNhbCBjYXNlcy4KLSovCi0jZGVmaW5lIENLX0NQ UwotCi0jaWZkZWYgQ0tfQ1BTCi0gICAgICAgIGNvbm9sbCgiICAgIEZpbGUgICBQZXJjZW50ICAg ICAgIFBhY2tldCIpOwotICAgICAgICBjb25vbGwoIiAgICBCeXRlcyAgRG9uZSAgICAgQ1BTICBM ZW5ndGgiKTsKLSNlbHNlCi0gICAgICAgIGNvbm9sbCgiICAgIEZpbGUgICBQZXJjZW50ICBTZWNz IFBhY2tldCIpOwotICAgICAgICBjb25vbGwoIiAgICBCeXRlcyAgRG9uZSAgICAgTGVmdCBMZW5n dGgiKTsKLSNlbmRpZiAvKiBDS19DUFMgKi8KLSAgICAgICAgbmV3ZHB5ID0gMDsKLSAgICB9Ci0g ICAgaHBvcyA9IDA7Ci19Ci0KLS8qCi0gIHNob3dwa3QoYykKLSAgYyA9IGNvbXBsZXRpb24gY29k ZTogMCBtZWFucyB0cmFuc2ZlciBpbiBwcm9ncmVzcywgbm9uemVybyBtZWFucyBpdCdzIGRvbmUu Ci0gIFNob3cgdGhlIGZpbGUgdHJhbnNmZXIgcHJvZ3Jlc3MgY291bnRlciBhbmQgcGVyaGFwcyB2 ZXJib3NlIHBhY2tldCB0eXBlLgotKi8KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotc2hvd3BrdChj aGFyIGMpCi0jZWxzZQotc2hvd3BrdChjKSBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LS8qIHNob3dwa3QgKi8gewotCi0jaWZuZGVmIEdGVElNRVIKLSAgICBsb25nIGV0OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBFbGFwc2VkIHRpbWUsIGVudGlyZSBiYXRjaCAgKi8KLSNl bmRpZiAvKiBHRlRJTUVSICovCi0gICAgQ0tfT0ZGX1QgaG93ZmFyOwkJCS8qIEhvdyBmYXIgaW50 byBmaWxlICovCi0gICAgbG9uZyBwZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVy Y2VudCBkb25lLCB0aGlzIGZpbGUgICAgICovCi0gICAgbG9uZyB0cDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogVHJhbnNmZXIgcmF0ZSwgZW50aXJlIGJhdGNoICovCi0gICAgbG9uZyBw czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFja2V0IHNpemUsIGN1cnJlbnQgcGFj a2V0ICovCi0gICAgQ0tfT0ZGX1QgbXl0ZmM7CQkJLyogTG9jYWwgY29weSBvZiBieXRlIGNvdW50 ZXIgICovCi0KLSNpZmRlZiBHRlRJTUVSCi0gICAgQ0tGTE9BVCB0bm93OwotI2VuZGlmIC8qIEdG VElNRVIgKi8KLQotICAgIGlmIChuZXdkcHkpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFB1 dCB1cCBmaWxlbmFtZXMsIGV0YywgKi8KLSAgICAgIGRweWluaXQoKTsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBpZiB0aGV5J3JlIG5vdCB0aGVyZSBhbHJlYWR5LiAqLwotCi0gICAgaG93ZmFy ID0gZmZjOyAgICAgICAgICAgICAgICAgICAgICAgLyogSG93IGZhciAqLwotLyoKLSAgQ2FsY3Vs YXRlIENQUyByYXRlIGV2ZW4gaWYgbm90IGRpc3BsYXlpbmcgb24gc2NyZWVuIGZvciB1c2UgaW4g ZmlsZQotICB0cmFuc2ZlciBzdGF0aXN0aWNzLgotKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgdG5v dyA9IGdmdGltZXIoKTsgICAgICAgICAgICAgICAgICAgLyogVGltZSBzaW5jZSB3ZSBzdGFydGVk ICovCi0gICAgcHMgPSAod2hhdCAmIFdfUkVDVikgPyBycGt0bCA6IHNwa3RsOyAvKiBQYWNrZXQg c2l6ZSAqLwotI2lmZGVmIENLX1JFU0VORAotICAgIGlmICh3aGF0ICYgV19TRU5EKQkJCS8qIElu IGNhc2Ugd2UgZGlkbid0IHN0YXJ0IGF0ICovCi0gICAgICBob3dmYXIgKz0gc2VuZHN0YXJ0OyAg ICAgICAgICAgICAgLyogIHRoZSBiZWdpbm5pbmcuLi4gKi8KLSAgICBlbHNlIGlmICh3aGF0ICYg V19SRUNWKQotICAgICAgaG93ZmFyICs9IHJzX2xlbjsKLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8K LSAgICBwZCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJjZW50IGRvbmUu ICovCi0gICAgaWYgKGMgPT0gTlVMKSB7ICAgICAgICAgICAgICAgICAgICAgLyogU3RpbGwgZ29p bmcsIGZpZ3VyZSAlIGRvbmUgKi8KLSAgICAgICAgaWYgKCFmc2l6ZSkgcmV0dXJuOwkJLyogRW1w dHkgZmlsZSwgZG9uJ3QgYm90aGVyICovCi0gICAgICAgIHBkID0gKGZzaXplID4gOTkpID8gKGhv d2ZhciAvIChmc2l6ZSAvIChDS19PRkZfVCkxMDApKSA6IDA7Ci0gICAgICAgIGlmIChwZCA+IDEw MCkgcGQgPSAxMDA7ICAgICAgICAgLyogRXhwYW5zaW9uICovCi0gICAgfQotICAgIGlmIChjICE9 IE5VTCkKLSAgICAgIGlmICghY3hzZWVuICYmICFkaXNjYXJkICYmICFjenNlZW4pCi0gICAgICAg IHBkID0gMTAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBjb21wbGV0ZSwgc28gMTAw JS4gKi8KLQotICAgIG15dGZjID0gKHBkIDwgMTAwKSA/IHRmYyArIGZmYyA6IHRmYzsgICAgLyog Q1BTICovCi0gICAgdHAgPSAobG9uZykoKHRub3cgPiAwLjApID8gKENLRkxPQVQpIG15dGZjIC8g dG5vdyA6IDApOwotICAgIGlmIChjICYmICh0cCA9PSAwKSkKLSAgICAgIHRwID0gZmZjOwotCi0g ICAgY3BzID0gdHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGdsb2JhbCB2YXJp YWJsZSAqLwotICAgIGlmIChjcHMgPiBwZWFrY3BzICYmICAgICAgICAgICAgICAgIC8qIFBlYWsg dHJhbnNmZXIgcmF0ZSAqLwotICAgICAgICAgKCh3aGF0ICYgV19TRU5EICYmIHNwYWNrZXRzID4g d3Nsb3RzICsgNCkgfHwKLQkgICghKHdoYXQgJiBXX1NFTkQpICYmIHNwYWNrZXRzID4gMTApKSkg ewotICAgICAgICBwZWFrY3BzID0gY3BzOwotICAgIH0KLQotI2Vsc2UgIC8qIE5vdCBHRlRJTUVS ICovCi0KLSAgICBldCA9IGd0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgICAvKiBFbGFwc2Vk IHRpbWUgICovCi0gICAgcHMgPSAod2hhdCAmIFdfUkVDVikgPyBycGt0bCA6IHNwa3RsOyAvKiBQ YWNrZXQgbGVuZ3RoICovCi0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgaWYgKHdoYXQgJiBXX1NFTkQp CQkJLyogQW5kIGlmIHdlIGRpZG4ndCBzdGFydCBhdCAqLwotICAgICAgaG93ZmFyICs9IHNlbmRz dGFydDsgICAgICAgICAgICAgIC8qICB0aGUgYmVnaW5uaW5nLi4uICovCi0gICAgZWxzZSBpZiAo d2hhdCAmIFdfUkVDVikKLSAgICAgIGhvd2ZhciArPSByc19sZW47Ci0jZW5kaWYgLyogQ0tfUkVT RU5EICovCi0gICAgcGQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyY2Vu dCBkb25lLiAqLwotICAgIGlmIChjID09IE5VTCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFN0 aWxsIGdvaW5nLCBmaWd1cmUgJSBkb25lICovCi0gICAgICAgIGlmIChmc2l6ZSA9PSAwTCkgcmV0 dXJuOyAgICAgICAgLyogRW1wdHkgZmlsZSwgZG9uJ3QgYm90aGVyICovCi0gICAgICAgIHBkID0g KGZzaXplID4gOTkpID8gKGhvd2ZhciAvIChmc2l6ZSAvIChDS19PRkZfVCkxMDApKSA6IDA7Ci0g ICAgICAgIGlmIChwZCA+IDEwMCkgcGQgPSAxMDA7ICAgICAgICAgLyogRXhwYW5zaW9uICovCi0g ICAgfQotICAgIGlmIChjICE9IE5VTCkKLSAgICAgIGlmICghY3hzZWVuICYmICFkaXNjYXJkICYm ICFjenNlZW4pCi0gICAgICAgIHBkID0gMTAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmls ZSBjb21wbGV0ZSwgc28gMTAwJS4gKi8KLQotCi0jaWZuZGVmIENLX0NQUwotLyoKLSAgZnNlY3Mg PSB0aW1lIChmcm9tIGd0aW1lcikgdGhhdCB0aGlzIGZpbGUgc3RhcnRlZCAoc2V0IGluIHNmaWxl KCkpLgotICBSYXRlIHNvIGZhciBpcyBmZmMgLyAoZXQgLSBmc2VjcyksICBlc3RpbWF0ZWQgdGlt ZSBmb3IgcmVtYWluaW5nIGJ5dGVzCi0gIGlzIChmc2l6ZSAtIGZmYykgLyAoZmZjIC8gKGV0IC0g ZnNlY3MpKS4KLSovCi0gICAgdHAgPSAoaG93ZmFyID4gMCkgPyAoZnNpemUgLSBob3dmYXIpICog KGV0IC0gZnNlY3MpIC8gaG93ZmFyIDogMDsKLSNlbmRpZiAvKiBDS19DUFMgKi8KLQotI2lmZGVm IENLX0NQUwotICAgIG15dGZjID0gKHBkIDwgMTAwKSA/IHRmYyArIGZmYyA6IHRmYzsKLSAgICB0 cCA9IChldCA+IDApID8gbXl0ZmMgLyBldCA6IDA7CS8qIFRyYW5zZmVyIHJhdGUgKi8KLSAgICBp ZiAoYyAmJiAodHAgPT0gMCkpCQkJLyogV2F0Y2ggb3V0IGZvciBzdWJzZWNvbmQgdGltZXMgKi8K LSAgICAgICAgdHAgPSBmZmM7Ci0KLSAgICBjcHMgPSB0cDsJCQkJLyogU2V0IGdsb2JhbCB2YXJp YWJsZSAqLwotICAgIGlmIChjcHMgPiBwZWFrY3BzICYmICAgICAgICAgICAgICAgIC8qIFBlYWsg dHJhbnNmZXIgcmF0ZSAqLwotICAgICAgICAgKCh3aGF0ICYgV19TRU5EICYmIHNwYWNrZXRzID4g d3Nsb3RzICsgNCkgfHwKLQkgICghKHdoYXQgJiBXX1NFTkQpICYmIHNwYWNrZXRzID4gMTApKSkg ewotICAgICAgICBwZWFrY3BzID0gY3BzOwotICAgIH0KLSNlbmRpZiAvKiBDS19DUFMgKi8KLQot I2VuZGlmIC8qIEdGVElNRVIgKi8KLQotICAgIGlmIChmZGlzcGxhID09IFhZRkRfUykgeyAgICAg ICAgICAgIC8qIENSVCBkaXNwbGF5ICovCi0gICAgICAgIGNoYXIgYnVmZmVyWzEyOF07Ci0JLyog VGhlc2Ugc3ByaW50ZnMgc2hvdWxkIGJlIHNhZmUgdW50aWwgd2UgaGF2ZSAzMi1kaWdpdCBudW1i ZXJzICovCi0KLSAgICAgICAgaWYgKHBkID4gLTFMKQotICAgICAgICAgIHNwcmludGYoYnVmZmVy LCAiJWMlOXMlNWxkJSUlOGxkJThsZCAiLCBDUixja2ZzdG9hKGhvd2ZhcikscGQsdHAscHMpOwot ICAgICAgICBlbHNlCi0gICAgICAgICAgc3ByaW50ZihidWZmZXIsICIlYyU5cyAgICAgICU4bGQl OGxkICIsIENSLGNrZnN0b2EoaG93ZmFyKSx0cCxwcyk7Ci0gICAgICAgIGNvbm9sKGJ1ZmZlcik7 Ci0gICAgICAgIGhwb3MgPSAzMTsKLSAgICB9IGVsc2UgaWYgKGZkaXNwbGEgPT0gWFlGRF9SKSB7 ICAgICAvKiBTRVJJQUwgKi8KLSAgICAgICAgbG9uZyBpLCBrOwotICAgICAgICBpZiAoaG93ZmFy IC0gb2xkZmZjIDwgMTAyNCkgICAgIC8qIFVwZGF0ZSBkaXNwbGF5IGV2ZXJ5IDFLICovCi0gICAg ICAgICAgcmV0dXJuOwotICAgICAgICBvbGRmZmMgPSBob3dmYXI7ICAgICAgICAgICAgICAgIC8q IFRpbWUgZm9yIG5ldyBkaXNwbGF5ICovCi0gICAgICAgIGsgPSAoaG93ZmFyIC8gMTAyNEwpIC0g ZG90czsgICAgLyogSG93IG1hbnkgSyBzbyBmYXIgKi8KLSAgICAgICAgZm9yIChpID0gMEw7IGkg PCBrOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChocG9zKysgPiAoY21kX2NvbHMgLSAzKSkgeyAv KiBUaW1lIHRvIHdyYXA/ICovCi0gICAgICAgICAgICAgICAgY29ub2xsKCIiKTsKLSAgICAgICAg ICAgICAgICBocG9zID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbm9jKCcuJyk7 ICAgICAgICAgICAgICAgICAvKiBQcmludCBhIGRvdCBmb3IgdGhpcyBLICovCi0gICAgICAgICAg ICBkb3RzKys7ICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgaXQgKi8KLSAgICAgICAgfQot ICAgIH0KLX0KLQotCi0vKiAgQyBLIFMgQyBSIEUgRSBOICAtLSAgU2NyZWVuIGRpc3BsYXkgZnVu Y3Rpb24gICovCi0KLS8qCi0gIGNrc2NyZWVuKGYsYyxuLHMpCi0gICAgZiAtIGFyZ3VtZW50IGRl c2NyaXB0b3IKLSAgICBjIC0gYSBjaGFyYWN0ZXIgb3Igc21hbGwgaW50ZWdlcgotICAgIG4gLSBh IGxvbmcgaW50ZWdlcgotICAgIHMgLSBhIHN0cmluZy4KLQotICBhbmQgZ2xvYmFsIGZkaXNwbGEg PSBTRVQgRklMRSBESVNQTEFZIHZhbHVlOgotCi0gICAgWFlGRF9OID0gTk9ORQotICAgIFhZRkRf UiA9IFNFUklBTDogICAgIERvdHMsIGV0Yywgd29ya3Mgb24gYW55IHRlcm1pbmFsLCBldmVuIGhh cmRjb3B5LgotICAgIFhZRkRfUyA9IENSVDogICAgICAgIFdvcmtzIG9uIGFueSBDUlQsIHdyaXRl cyBvdmVyIGN1cnJlbnQgbGluZS4KLSAgICBYWUZEX0MgPSBGVUxMU0NSRUVOOiBSZXF1aXJlcyB0 ZXJtaW5hbC1kZXBlbmRlbnQgc2NyZWVuIGNvbnRyb2wuCi0gICAgWFlGRF9CID0gQlJJRUY6ICAg ICAgTGlrZSBTRVJJQUwgYnV0IG9ubHkgZmlsZW5hbWUgJiBjb21wbGV0aW9uIHN0YXR1cy4KLSAg ICBYWUZEX0cgPSBHVUk7ICAgICAgICBXaW5kb3dzIEdVSSwgc2FtZSBiZWhhdmlvciBhcyBGVUxM U0NSRUVOCi0qLwotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1ja3NjcmVlbihpbnQgZiwgY2hhciBj LENLX09GRl9UIG4sY2hhciAqcykKLSNlbHNlCi1ja3NjcmVlbihmLGMsbixzKSBpbnQgZjsgY2hh ciBjOyBDS19PRkZfVCBuOyBjaGFyICpzOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBzY3Jl ZW4gKi8gewotICAgIGNoYXIgYnVmWzgwXTsKLSAgICBpbnQgbGVuOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBMZW5ndGggb2Ygc3RyaW5nICovCi0jaWZkZWYgVU5JWAotI2lmbmRlZiBO T0pDCi0gICAgaW50IG9iZzsKLV9QUk9UT1RZUCggVk9JRCBjb25iZ3QsIChpbnQpICk7Ci0jZW5k aWYgLyogTk9KQyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICBpbnQgZnRwID0gMDsKLQotICAg IGZ0cCA9ICh3aGF0ICYgV19GVFApID8gMSA6IDA7CS8qIEZUUCBvciBLZXJtaXQ/ICovCi0KLSAg ICBpZiAoIWxvY2FsICYmICFmdHApCQkJLyogSW4gcmVtb3RlIG1vZGUgLSBkb24ndCBkbyB0aGlz ICovCi0gICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXMpIHMgPSAiIjsKLQotICAgIGlmICghZnhk X2luaXRlZCkgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgaWYgbmVjZXNzYXJ5ICov Ci0gICAgICBmeGRpbml0KGZkaXNwbGEpOwotCi0jaWZkZWYgVU5JWAotI2lmbmRlZiBOT0pDCi0g ICAgb2JnID0gYmFja2dyZDsgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmlvdXMgYmFja2dy b3VuZCBzdGF0dXMgKi8KLSAgICBjb25iZ3QoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTZWUgaWYgcnVubmluZyBpbiBiYWNrZ3JvdW5kICovCi0gICAgaWYgKCFiYWNrZ3JkICYmIG9i ZykgeyAgICAgICAgICAgICAgLyogSnVzdCBjYW1lIGludG8gZm9yZWdyb3VuZD8gKi8KLSAgICAg ICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAvKiBQdXQgY29uc29sZSBiYWNrIGlu IENCUkVBSyBtb2RlICovCi0gICAgICAgIHNldGludCgpOyAgICAgICAgICAgICAgICAgICAgICAg LyogUmVzdG9yZSBpbnRlcnJ1cHRzICovCi0gICAgfQotI2VuZGlmIC8qIE5PSkMgKi8KLSNlbmRp ZiAvKiBVTklYICovCi0KLSAgICBpZiAoKGYgIT0gU0NSX1dNKSAmJiAoZiAhPSBTQ1JfRU0pKSAv KiBBbHdheXMgdXBkYXRlIHdhcm5pbmdzICYgZXJyb3JzICovCi0gICAgICBpZiAoIWRpc3BsYSB8 fAotICAgICAgICAgIChiYWNrZ3JkICYmIGJnc2V0KSB8fAotICAgICAgICAgIGZkaXNwbGEgPT0g WFlGRF9OIHx8Ci0gICAgICAgICAgKHNlcnZlciAmJiAhc3J2ZGlzKQotICAgICAgICAgICkKLSAg ICAgICAgcmV0dXJuOwotCi0jaWZkZWYgVk1TCi0gICAgaWYgKGYgPT0gU0NSX0ZOKSAgICAgICAg ICAgICAgICAgICAgLyogVk1TIC0gc2hvcnRlbiB0aGUgbmFtZSAqLwotICAgICAgcyA9IHpyZWxu YW1lKHMsemd0ZGlyKCkpOwotI2VuZGlmIC8qIFZNUyAqLwotCi0gICAgaWYgKGRlc3QgPT0gREVT VF9TKSAgICAgICAgICAgICAgICAgLyogU0VUIERFU1RJTkFUSU9OIFNDUkVFTiAqLwotICAgICAg cmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB3b3VsZCBpbnRlcmZlcmUuLi4g Ki8KLQotI2lmZGVmIEtVSQotICAgIGlmIChmZGlzcGxhID09IFhZRkRfRykgeyAgICAgICAgICAg IC8qIElmIGd1aSBkaXNwbGF5IHNlbGVjdGVkICovCi0gICAgICAgIHNjcmVlbmcoZixjLG4scyk7 ICAgICAgICAgICAgICAgLyogY2FsbCB0aGUgZ3VpIHZlcnNpb24gKi8KLSAgICAgICAgcmV0dXJu OwotICAgIH0KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDS19DVVJTRVMKLSAgICBpZiAoZmRp c3BsYSA9PSBYWUZEX0MpIHsgICAgICAgICAgICAvKiBJZiBmdWxsc2NyZWVuIGRpc3BsYXkgc2Vs ZWN0ZWQgKi8KLSAgICAgICAgc2NyZWVuYyhmLGMsbixzKTsgICAgICAgICAgICAgICAvKiBjYWxs IHRoZSBmdWxsc2NyZWVuIHZlcnNpb24gKi8KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRp ZiAvKiBDS19DVVJTRVMgKi8KLQotICAgIGxlbiA9IChpbnQpc3RybGVuKHMpOyAgICAgICAgICAg ICAgIC8qIExlbmd0aCBvZiBzdHJpbmcgKi8KLQotICAgIHN3aXRjaCAoZikgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEhhbmRsZSBvdXIgZnVuY3Rpb24gY29kZSAqLwotICAgICAgY2FzZSBT Q1JfRk46ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lICovCi0gICAgICAgIGlmIChm ZGlzcGxhID09IFhZRkRfQikgewotI2lmZGVmIE5FV0ZUUAotCSAgICBpZiAoZnRwKQotCSAgICAg IHByaW50ZigiICVzICVzIiwgd2hhdCAmIFdfU0VORCA/ICJQVVQiIDogIkdFVCIsIHMpOwotCSAg ICBlbHNlCi0jZW5kaWYgLyogTkVXRlRQICovCi0JICAgICAgcHJpbnRmKCIgJXMgJXMiLCB3aGF0 ICYgV19TRU5EID8gIlNFTkQiIDogIlJFQ1YiLCBzKTsKLSNpZmRlZiBVTklYCi0gICAgICAgICAg ICBmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgICAgICByZXR1cm47 Ci0gICAgICAgIH0KLSNpZmRlZiBNQUMKLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2wocyk7IGNv bm9jKFNQKTsgaHBvcyA9IGxlbiArIDE7Ci0jZWxzZQotICAgICAgICBja3N0cm5jcHkoZmJ1Zixz LDgwKTsKLSAgICAgICAgYWJ1ZlswXSA9IGEyYnVmWzBdID0gTlVMOwotICAgICAgICBuZXdkcHkg PSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIE5ldyBmaWxlIHNvIHJlZnJlc2ggZGlzcGxheSAq LwotI2VuZGlmIC8qIE1BQyAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0FO OiAgICAgICAgICAgICAgICAgICAgICAvKiBBcy1uYW1lICovCi0gICAgICAgIGlmIChmZGlzcGxh ID09IFhZRkRfQikgewotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHByaW50ZigiKGFzICVz KSAiLHMpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg ICAgfQotI2lmZGVmIE1BQwotICAgICAgICBpZiAoaHBvcyArIGxlbiA+IDc1KSB7IGNvbm9sbCgi Iik7IGhwb3MgPSAwOyB9Ci0gICAgICAgIGNvbm9sKCI9PiAiKTsgY29ub2wocyk7Ci0gICAgICAg IGlmICgoaHBvcyArPSAobGVuICsgMykpID4gNzgpIHsgY29ub2xsKCIiKTsgaHBvcyA9IDA7IH0K LSNlbHNlCi0gICAgICAgIGlmIChhYnVmWzBdKSB7Ci0gICAgICAgICAgICBja3N0cm5jcHkoYTJi dWYscyw4MCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBja3N0cm5jcHkoYWJ1Zixz LDgwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE1BQyAqLwotICAgICAgICByZXR1cm47Ci0KLSAg ICAgIGNhc2UgU0NSX0ZTOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlLXNpemUgKi8KLSAg ICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0gICAgICAgICAgICBwcmludGYoIiAoJXMp ICglcyBieXRlJXMpIiwKLSNpZmRlZiBOT0lDUAotICAgICAgICAgICAgICAgICAgIChiaW5hcnkg PyAiYmluYXJ5IiA6ICJ0ZXh0IikKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgZ2Ztb2RlKGJp bmFyeSwwKQotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgICAgICAgICAgICAgICAgLCBja2ZzdG9h KG4pLCBuID09IDEgPyAiIiA6ICJzIik7Ci0jaWZkZWYgVU5JWAotICAgICAgICAgICAgZmZsdXNo KHN0ZG91dCk7Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg ICB9Ci0jaWZkZWYgTUFDCi0gICAgICAgIHNwcmludGYoYnVmLCIsIFNpemU6ICVzIixja2ZzdG9h KG4pKTsgIGNvbm9sbChidWYpOyAgaHBvcyA9IDA7Ci0jZW5kaWYgLyogTUFDICovCi0gICAgICAg IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfWEQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFgt cGFja2V0IGRhdGEgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKQotICAgICAgICAg IHJldHVybjsKLSNpZmRlZiBNQUMKLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2xsKHMpOyBocG9z ID0gMDsKLSNlbHNlCi0gICAgICAgIGNrc3RybmNweShmYnVmLHMsODApOwotICAgICAgICBhYnVm WzBdID0gYTJidWZbMF0gPSBOVUw7Ci0jZW5kaWYgLyogTUFDICovCi0gICAgICAgIHJldHVybjsK LQotICAgICAgY2FzZSBTQ1JfU1Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgc3RhdHVz ICovCi0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgIGNhc2UgU1RfT0s6ICAgICAgICAg ICAgICAgICAgIC8qIFRyYW5zZmVycmVkIE9LICovCi0gICAgICAgICAgICBzaG93cGt0KCdaJyk7 ICAgICAgICAgICAgICAgLyogVXBkYXRlIG51bWJlcnMgb25lIGxhc3QgdGltZSAqLwotICAgICAg ICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0jaWZkZWYgR0ZUSU1FUgotCQlpZiAoZnB4 ZnNlY3MpCi0JCSAgcHJpbnRmKCI6IE9LICglMC4zZiBzZWMsICVsZCBjcHMpIixmcHhmc2VjcywK LQkJCSAobG9uZykoKENLRkxPQVQpZmZjIC8gZnB4ZnNlY3MpKTsKLSNlbHNlCi0JCWlmICh4ZnNl Y3MpCi0JCSAgcHJpbnRmKCI6IE9LICglZCBzZWMsICVsZCBjcHMpIix4ZnNlY3MsZmZjL3hmc2Vj cyk7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCQlwcmludGYoIlxuIik7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChocG9zICs9IDUpID4g NzgpIGNvbm9sbCgiIik7IC8qIFdyYXAgc2NyZWVuIGxpbmUuICovCi0gICAgICAgICAgICBjb25v bGwoIiBbT0tdIik7IGhwb3MgPSAwOyAgLyogUHJpbnQgT0sgbWVzc2FnZS4gKi8KLSAgICAgICAg ICAgIGlmIChmZGlzcGxhID09IFhZRkRfUykgeyAgICAvKiBXZSBkaWRuJ3Qgc2hvdyBaIHBhY2tl dCB3aGVuICovCi0gICAgICAgICAgICAgICAgY29ub2MoJ1onKTsgICAgICAgICAgICAgLyogaXQg Y2FtZSwgc28gc2hvdyBpdCBub3cuICovCi0gICAgICAgICAgICAgICAgaHBvcyA9IDE7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX0RJU0M6 ICAgICAgICAgICAgICAgICAvKiAgRGlzY2FyZGVkICovCi0gICAgICAgICAgICBpZiAoZmRpc3Bs YSA9PSBYWUZEX0IpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIjogRElTQ0FSREVEXG4iKTsK LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo KGhwb3MgKz0gMTIpID4gNzgpIGNvbm9sbCgiIik7Ci0gICAgICAgICAgICBjb25vbGwoIiBbZGlz Y2FyZGVkXSIpOyBocG9zID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNh c2UgU1RfSU5UOiAgICAgICAgICAgICAgICAgIC8qICBJbnRlcnJ1cHRlZCAqLwotICAgICAgICAg ICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI6IElO VEVSUlVQVEVEXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBpZiAoKGhwb3MgKz0gMTQpID4gNzgpIGNvbm9sbCgiIik7Ci0gICAgICAgICAg ICBjb25vbGwoIiBbaW50ZXJydXB0ZWRdIik7IGhwb3MgPSAwOwotICAgICAgICAgICAgcmV0dXJu OwotCi0JICBjYXNlIFNUX1NJTToKLSAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikg ewotCQlpZiAobiA9PSBTS1BfWE5YKQotCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJF RCAoTmV3IGZpbGUpXG4iKTsKLQkJZWxzZSBpZiAobiA9PSBTS1BfWFVQKQotCQkgIHByaW50Zigi OiBXT1VMRCBCRSBUUkFOU0ZFUlJFRCAoUmVtb3RlIGZpbGUgb2xkZXIpXG4iKTsKLQkJZWxzZSBp ZiAobiA9PSBTS1BfU0lNKQotCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRFxuIik7 Ci0JCWVsc2UgaWYgKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pCi0JCSAgcHJpbnRmKCI6IFNLSVBQ RUQgKCVzKVxuIixza3JlYXNvbltuXSk7Ci0JCWVsc2UKLQkJICBwcmludGYoIjogU0tJUFBFRFxu Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmZGlz cGxhID09IFhZRkRfUykgewotICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfUyAm JiBmYnVmWzBdKSB7IC8qIENSVCBkaXNwbGF5ICovCi0gICAgICAgICAgICAgICAgICAgIGNvbm9s bCgiIik7ICAgICAgICAgLyogTmV3IGxpbmUgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdo YXQgJiBXX1NFTkQpIGNvbm9sKCJXb3VsZCBTZW5kOiAiKTsgLyogQWN0aW9uICovCi0gICAgICAg ICAgICAgICAgICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIGNvbm9sKCJXb3VsZCBSZWNlaXZl OiAiKTsKLSAgICAgICAgICAgICAgICAgICAgY29ub2woZmJ1Zik7Ci0gICAgICAgICAgICAgICAg ICAgIGlmICgqYWJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYWJ1Zik7IC8qIE5hbWVzICovCi0g ICAgICAgICAgICAgICAgICAgIGlmICgqYTJidWYpIGNvbm9sKCIgPT4gIik7IGNvbm9sKGEyYnVm KTsgLyogTmFtZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgKmZidWYgPSBOVUw7ICphYnVmID0g TlVMOyAqYTJidWYgPSBOVUw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNv bm9sbCgiIFtzaW11bGF0ZWRdIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKChocG9zICs9IDEwKSA+IDc4KSBjb25vbGwoIiIpOwotICAg ICAgICAgICAgY29ub2woIiBbc2ltdWxhdGVkXSIpOyBocG9zID0gMDsKLSAgICAgICAgICAgIHJl dHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfU0tJUDogICAgICAgICAgICAgICAgIC8qICBTa2lw cGVkICovCi0gICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLQkJaWYgKG4gPT0g U0tQX1hOWCkKLQkJICBwcmludGYoIjogV09VTEQgQkUgVFJBTlNGRVJSRUQgKE5ldyBmaWxlKVxu Iik7Ci0JCWVsc2UgaWYgKG4gPT0gU0tQX1hVUCkKLQkJICBwcmludGYoIjogV09VTEQgQkUgVFJB TlNGRVJSRUQgKFJlbW90ZSBmaWxlIG9sZGVyKVxuIik7Ci0JCWVsc2UgaWYgKG4gPT0gU0tQX1NJ TSkKLQkJICBwcmludGYoIjogV09VTEQgQkUgVFJBTlNGRVJSRURcbiIpOwotCQllbHNlIGlmIChu ID4gMCAmJiBuIDwgbnNrcmVhc29uKQotCQkgIHByaW50ZigiOiBTS0lQUEVEICglcylcbiIsc2ty ZWFzb25bbl0pOwotCQllbHNlCi0JCSAgcHJpbnRmKCI6IFNLSVBQRURcbiIpOwotICAgICAgICAg ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZmRpc3BsYSA9PSBYWUZEX1Mp IHsKLSAgICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MgJiYgZmJ1ZlswXSkgeyAv KiBDUlQgZGlzcGxheSAqLwotICAgICAgICAgICAgICAgICAgICBjb25vbGwoIiIpOyAgICAgICAg IC8qIE5ldyBsaW5lICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5EKSBj b25vbCgiU2VuZGluZzogIik7IC8qIEFjdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICBlbHNl IGlmICh3aGF0ICYgV19SRUNWKSBjb25vbCgiUmVjZWl2aW5nOiAiKTsKLSAgICAgICAgICAgICAg ICAgICAgY29ub2woZmJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqYWJ1ZikgY29ub2wo IiA9PiAiKTsgY29ub2woYWJ1Zik7IC8qIE5hbWVzICovCi0gICAgICAgICAgICAgICAgICAgIGlm ICgqYTJidWYpIGNvbm9sKCIgPT4gIik7IGNvbm9sKGEyYnVmKTsgLyogTmFtZXMgKi8KLSAgICAg ICAgICAgICAgICAgICAgKmZidWYgPSBOVUw7ICphYnVmID0gTlVMOyAqYTJidWYgPSBOVUw7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbm9sbCgiIFtza2lwcGVkXSIpOwot ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgo aHBvcyArPSAxMCkgPiA3OCkgY29ub2xsKCIiKTsKLQkgICAgY29ub2woIiAiKTsgY29ub2woZmJ1 Zik7Ci0gICAgICAgICAgICBjb25vbGwoIiBbc2tpcHBlZF0iKTsgaHBvcyA9IDA7Ci0gICAgICAg ICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX0VSUjogICAgICAgICAgICAgICAgICAv KiBFcnJvciAqLwotICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0gICAgICAg ICAgICAgICAgcHJpbnRmKCI6IEVSUk9SOiAlc1xuIixzKTsKLSAgICAgICAgICAgICAgICByZXR1 cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb25vbGwoIiIpOwotICAgICAgICAgICAg Y29ub2woIkVycm9yOiAiKTsgY29ub2xsKHMpOyBocG9zID0gMDsKLSAgICAgICAgICAgIHJldHVy bjsKLQotICAgICAgICAgIGNhc2UgU1RfTVNHOiAgICAgICAgICAgICAgICAgIC8qIE1lc3NhZ2Ug Ki8KLSNpZmRlZiBORVdGVFAKLSAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgewot ICAgICAgICAgICAgICAgIGlmIChmdHAgJiYgZnRwX2RlYikKLQkJICBwcmludGYoIjogTUVTU0FH RTogJXNcbiIscyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIE5FV0ZUUCAqLwotICAgICAgICAgICAgY29ub2xsKCIiKTsKLSAgICAgICAgICAgIGNv bm9sKCJNZXNzYWdlOiAiKTsKLSAgICAgICAgICAgIGNvbm9sbChzKTsKLSAgICAgICAgICAgIGhw b3MgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9SRUZVOiAg ICAgICAgICAgICAgICAgLyogUmVmdXNlZCAqLwotICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0g WFlGRF9CKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI6IFJFRlVTRURcbiIpOwotICAgICAg ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZmRpc3BsYSA9PSBYWUZE X1MpIHsKLSAgICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MgJiYgZmJ1ZlswXSkg eyAvKiBDUlQgZGlzcGxheSAqLwotICAgICAgICAgICAgICAgICAgICBjb25vbGwoIiIpOyAgICAg ICAgIC8qIE5ldyBsaW5lICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5E KSBjb25vbCgiU2VuZGluZzogIik7IC8qIEFjdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICBl bHNlIGlmICh3aGF0ICYgV19SRUNWKSBjb25vbCgiUmVjZWl2aW5nOiAiKTsKLSAgICAgICAgICAg ICAgICAgICAgY29ub2woZmJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqYWJ1ZikgY29u b2woIiA9PiAiKTsgY29ub2woYWJ1Zik7ICAgICAgLyogTmFtZXMgKi8KLSAgICAgICAgICAgICAg ICAgICAgaWYgKCphMmJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYTJidWYpOyAgICAvKiBOYW1l cyAqLwotICAgICAgICAgICAgICAgICAgICAqZmJ1ZiA9IE5VTDsgKmFidWYgPSBOVUw7ICphMmJ1 ZiA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgY29ub2xsKCIiKTsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgY29ub2woIlJlZnVzZWQ6ICIpOyBjb25vbGwocyk7Ci0gICAg ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29ub2xsKCIi KTsKLSAgICAgICAgICAgIGNvbm9sKCJSZWZ1c2VkOiAiKTsgY29ub2xsKHMpOyBocG9zID0gMDsK LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfSU5DOiAgICAgICAgICAg ICAgICAgIC8qIEluY29tcGxldGUgKi8KLSAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRf QikgewotICAgICAgICAgICAgICAgIHByaW50ZigiOiBJTkNPTVBMRVRFXG4iKTsKLSAgICAgICAg ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGhwb3MgKz0g MTIpID4gNzgpIGNvbm9sbCgiIik7Ci0gICAgICAgICAgICBjb25vbGwoIiBbaW5jb21wbGV0ZV0i KTsgaHBvcyA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBkZWZhdWx0Ogot ICAgICAgICAgICAgY29ub2xsKCIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIHN0YXR1cyAq KioiKTsKLSAgICAgICAgICAgIGhwb3MgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg ICB9Ci0KLSNpZmRlZiBNQUMKLSAgICAgIGNhc2UgU0NSX1BOOiAgICAgICAgICAgICAgICAgICAg ICAvKiBQYWNrZXQgbnVtYmVyICovCi0gICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgewot ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0JY2ttYWttc2coYnVmLDgwLHMsIjogIixj a2x0b2EobiksTlVMTCk7Ci0gICAgICAgIGNvbm9sKGJ1Zik7IGhwb3MgKz0gKGludClzdHJsZW4o YnVmKTsgcmV0dXJuOwotI2VuZGlmIC8qIE1BQyAqLwotCi0gICAgICBjYXNlIFNDUl9QVDogICAg ICAgICAgICAgICAgICAgICAgLyogUGFja2V0IHR5cGUgb3IgcHNldWRvdHlwZSAqLwotICAgICAg ICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAo YyA9PSAnWScpIHJldHVybjsgICAgICAgICAgIC8qIERvbid0IGJvdGhlciB3aXRoIEFDS3MgKi8K LSAgICAgICAgaWYgKGMgPT0gJ0QnKSB7ICAgICAgICAgICAgICAgICAvKiBJbiBkYXRhIHRyYW5z ZmVyIHBoYXNlLCAqLwotICAgICAgICAgICAgc2hvd3BrdChOVUwpOyAgICAgICAgICAgICAgIC8q IHNob3cgcHJvZ3Jlc3MuICovCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNpZm5k ZWYgQU1JR0EKLSAgICAgICAgaWYgKGhwb3MrKyA+IDc3KSB7ICAgICAgICAgICAgICAvKiBJZiBu ZWFyIHJpZ2h0IG1hcmdpbiwgKi8KLSAgICAgICAgICAgIGNvbm9sbCgiIik7ICAgICAgICAgICAg ICAgICAvKiBTdGFydCBuZXcgbGluZSAqLwotICAgICAgICAgICAgaHBvcyA9IDA7ICAgICAgICAg ICAgICAgICAgIC8qIGFuZCByZXNldCBjb3VudGVyLiAqLwotICAgICAgICB9Ci0jZW5kaWYgLyog QU1JR0EgKi8KLSAgICAgICAgaWYgKGMgPT0gJ1onICYmIGZkaXNwbGEgPT0gWFlGRF9TKQotICAg ICAgICAgIHJldHVybjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNvbm9jKGMpOyAgICAgICAg ICAgICAgICAgICAgIC8qIERpc3BsYXkgdGhlIHBhY2tldCB0eXBlLiAqLwotI2lmZGVmIEFNSUdB Ci0gICAgICAgIGlmIChjID09ICdHJykgY29ub2xsKCIiKTsgICAgICAgLyogTmV3IGxpbmUgYWZ0 ZXIgRyBwYWNrZXRzICovCi0jZW5kaWYgLyogQU1JR0EgKi8KLSAgICAgICAgcmV0dXJuOwotCi0g ICAgICBjYXNlIFNDUl9UQzogICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gY29t cGxldGUgKi8KLSAgICAgICAgaWYgKHhmcmJlbCkgYmxlZXAoQlBfTk9URSk7Ci0gICAgICAgIGlm IChmZGlzcGxhID09IFhZRkRfQikgeyAgICAgICAgLyogQnJpZWYgZGlzcGxheS4uLiAqLwotICAg ICAgICAgICAgaWYgKGZpbGNudCA+IDEpIHsKLSAgICAgICAgICAgICAgICBsb25nIGZ4OwotICAg ICAgICAgICAgICAgIGZ4ID0gZmlsY250IC0gZmlscmVqOwotICAgICAgICAgICAgICAgIHByaW50 ZigiIFNVTU1BUlk6ICVsZCBmaWxlJXMiLCBmeCwgKChmeCA9PSAxKSA/ICIiIDogInMiKSk7Ci0g ICAgICAgICAgICAgICAgcHJpbnRmKCIsICVzIGJ5dGUlcyIsIGNrZnN0b2EodGZjKSwgKCh0ZmMg PT0gMSkgPyAiIiA6ICJzIikpOwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgICAgICBwcmlu dGYoIiwgJTAuM2Ygc2VjLCAlbGQgY3BzIiwgZnB0c2VjcywgdGZjcHMpOwotI2Vsc2UKLSAgICAg ICAgICAgICAgICBwcmludGYoIiwgJWxkIHNlYywgJWxkIGNwcyIsIHRzZWNzLCB0ZmNwcyk7Ci0j ZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgICAgICAgICAgICAgIHByaW50ZigiLlxuIik7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25vbGwoIiIpOwotICAg ICAgICB9Ci0jaWZkZWYgVU5JWAotICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBV TklYICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfRU06ICAgICAgICAgICAg ICAgICAgICAgIC8qIEVycm9yIG1lc3NhZ2UgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlG RF9CKSB7Ci0gICAgICAgICAgICBwcmludGYoIiBFUlJPUjogJXNcbiIscyk7Ci0gICAgICAgICAg ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2MoJz8nKTsgY29u b2xsKHMpOyBocG9zID0gMDsgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9XTTogICAgICAgICAg ICAgICAgICAgICAgLyogV2FybmluZyBtZXNzYWdlICovCi0gICAgICAgIGlmIChmZGlzcGxhID09 IFhZRkRfQikgewotICAgICAgICAgICAgcHJpbnRmKCIgV0FSTklORzogJXNcbiIscyk7Ci0gICAg ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2xsKHMp OyBocG9zID0gMDsgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9NUzogICAgICAgICAgICAgICAg ICAgICAgLyogTWVzc2FnZSBmcm9tIG90aGVyIEtlcm1pdCAqLwotICAgICAgICBpZiAoZmRpc3Bs YSA9PSBYWUZEX0IpIHsKLSAgICAgICAgICAgIHByaW50ZigiIE1FU1NBR0U6ICVzXG4iLHMpOwot ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNvbm9sbCgiIik7IGNvbm9s bChzKTsgaHBvcyA9IDA7IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfVFU6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFVuZGVsaW1pdGVkIHRleHQgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0g WFlGRF9CKQotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKChocG9zICs9IGxlbikgPiA3 NykgeyBjb25vbGwoIiIpOyBocG9zID0gbGVuOyB9Ci0gICAgICAgIGNvbm9sKHMpOyByZXR1cm47 Ci0KLSAgICAgIGNhc2UgU0NSX1ROOiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRlbGlt aXRlZCBhdCBiZWdpbm5pbmcgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKQotICAg ICAgICAgIHJldHVybjsKLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2wocyk7IGhwb3MgPSBsZW47 IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfVFo6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRl eHQgZGVsaW1pdGVkIGF0IGVuZCAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCi0g ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoKGhwb3MgKz0gbGVuKSA+IDc3KSB7IGNvbm9s bCgiIik7IGhwb3MgPSBsZW47IH0KLSAgICAgICAgY29ub2xsKHMpOyByZXR1cm47Ci0KLSAgICAg IGNhc2UgU0NSX1FFOiAgICAgICAgICAgICAgICAgICAgICAvKiBRdWFudGl0eSBlcXVhbHMgKi8K LSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKQotICAgICAgICAgIHJldHVybjsKLQlja21h a21zZyhidWYsODAscywiOiAiLGNrbHRvYShuKSxOVUxMKTsKLSAgICAgICAgY29ub2xsKGJ1Zik7 IGhwb3MgPSAwOyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0NXOiAgICAgICAgICAgICAgICAg ICAgICAvKiBDbG9zZSBmdWxsc2NyZWVuIHdpbmRvdyAqLwotICAgICAgICByZXR1cm47ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE5vIHdpbmRvdyB0byBjbG9zZSAqLwotCi0gICAgICBjYXNl IFNDUl9DRDoKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBjb25v bGwoIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgb2JqZWN0ICoqKiIpOwotICAgICAgICBo cG9zID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLSNlbmRpZiAvKiBOT0RJU1BMQVkg Ki8KLQotLyogIEUgUiBNIFMgRyAgLS0gIE5vbmZhdGFsIGVycm9yIG1lc3NhZ2UgICovCi0KLS8q IFNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIHByaW50aW5nIHRoZSBtZXNzYWdlIHRleHQgZnJvbSBh biBFcnJvciBwYWNrZXQuICovCi0KLVZPSUQKLWVybXNnKG1zZykgY2hhciAqbXNnOyB7ICAgICAg ICAgICAgICAgICAvKiBQcmludCBlcnJvciBtZXNzYWdlICovCi0gICAgZGVidWcoRjExMCwiZXJt c2ciLG1zZywwKTsKLSAgICBpZiAobG9jYWwpCi0gICAgICB4eHNjcmVlbihTQ1JfRU0sMCwwTCxt c2cpOwotICAgIHRsb2coRjExMCwiUHJvdG9jb2wgRXJyb3I6Iixtc2csMEwpOwotfQotI2VuZGlm IC8qIE5PWEZFUiAqLwotCi1WT0lECi1zZXRzZXNsb2coeCkgaW50IHg7IHsKLSAgICBzZXNsb2cg PSB4OwotI2lmZGVmIEtVSQotICAgIEt1aVNldFByb3BlcnR5KEtVSV9URVJNX0NBUFRVUkUseCww KTsKLSNlbmRpZiAvKiBLVUkgKi8KLX0KLQotVk9JRAotZG9jbGVhbihmYykgaW50IGZjOyB7ICAg ICAgICAgICAgICAgICAgIC8qIEdlbmVyYWwgY2xlYW51cCAqLwotI2lmZGVmIE9TMk9SVU5JWAot ICAgIGV4dGVybiBpbnQgdHR5ZmQ7Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0gICAgZXh0ZXJu IGludCAga2VlcDsKLSAgICBleHRlcm4gaW50IGV4aXRoYW5ndXA7Ci0jaWZuZGVmIE5PWEZFUgot ICAgIGV4dGVybiBjaGFyIGZpbG5hbVtdOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2lmbmRlZiBO T0lDUAotICAgIGludCB4OwotCi0gICAgaWYgKGZjID4gMCkKLSAgICAgIGRvc3RvcCgpOyAgICAg ICAgICAgICAgICAgLyogU3RvcCBhbGwgY29tbWFuZCBmaWxlcyBhbmQgZW5kIG1hY3JvcyAqLwot I2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKHBrdGxvZykgewot ICAgICAgICAqcGt0ZmlsID0gJ1wwJzsKLSAgICAgICAgcGt0bG9nID0gMDsKLSAgICAgICAgemNs b3NlKFpQRklMRSk7Ci0gICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIGlmIChzZXNsb2cp IHsKLSAgICAgICAgKnNlc2ZpbCA9ICdcMCc7Ci0gICAgICAgIHNldHNlc2xvZygwKTsKLSAgICAg ICAgemNsb3NlKFpTRklMRSk7Ci0gICAgfQotI2lmZGVmIFRMT0cKLSAgICBpZiAodHJhbG9nKSB7 Ci0gICAgICAgIHRsb2coRjEwMCwiVHJhbnNhY3Rpb24gTG9nIENsb3NlZCIsIiIsMEwpOwotICAg ICAgICAqdHJhZmlsID0gJ1wwJzsKLSAgICAgICAgdHJhbG9nID0gMDsKLSAgICAgICAgemNsb3Nl KFpURklMRSk7Ci0gICAgfQotI2VuZGlmIC8qIFRMT0cgKi8KLQotICAgIGRlYnVnKEYxMDAsImRv Y2xlYW4gY2FsbGluZyBkb2xvZ2VuZCIsIiIsMCk7Ci0gICAgZG9sb2dlbmQoKTsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRW5kIGN1cnJlbnQgbG9nIHJlY29yZCBpZiBhbnkgKi8KLSNpZmRl ZiBDT01NRU5UCi0gICAgaWYgKGRpYWxvZykgeyAgICAgICAgICAgICAgICAgICAgICAgLyogSWYg Y29ubmVjdGlvbiBsb2cgb3BlbiAqLwotCWRpYWxvZyA9IDA7Ci0gICAgICAgICpkaWFmaWwgPSAn XDAnOyAgICAgICAgICAgICAgICAgLyogY2xvc2UgaXQuICovCi0gICAgICAgIHpjbG9zZShaRElG SUwpOwotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZm5kZWYgTk9JQ1AKLSNpZm5k ZWYgTk9TUEwKLSAgICB6Y2xvc2UoWlJGSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBSRUFE IGFuZCBXUklURSBmaWxlcywgaWYgYW55LiAqLwotICAgIHpjbG9zZShaV0ZJTEUpOwotI2lmbmRl ZiBOT1hGRVIKLSAgICB6Y2xvc2UoWklGSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBBbmQg b3RoZXIgZmlsZXMgdG9vICovCi0gICAgeCA9IGNoa2ZuKFpPRklMRSk7CQkJLyogRG93bmxvYWQg aW4gcHJvZ3Jlc3M/ICovCi0gICAgZGVidWcoRjExMSwiZG9jbGVhbiBjaGtmbiBaT0ZJTEUiLGZp bG5hbSx4KTsKLSAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIGtlZXAiLCIiLGtlZXApOwotICAgIHpj bG9zZShaT0ZJTEUpOwkJCS8qIENsb3NlIG91dHB1dCBmaWxlICovCi0gICAgaWYgKHggPiAwICYm ICFrZWVwKSB7CQkvKiBJZiBpdCB3YXMgYmVpbmcgZG93bmxvYWRlZCAqLwotCWlmIChmaWxuYW1b MF0pCi0JICB4ID0gemRlbGV0KGZpbG5hbSk7CQkvKiBEZWxldGUgaWYgSU5DT01QTEVURSA9IERJ U0NBUkQgKi8KLQlkZWJ1ZyhGMTExLCJkb2NsZWFuIGRvd25sb2FkIGZpbGVuYW1lIixmaWxuYW0s eCk7Ci0gICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHpjbG9zZShaU1lTRk4pOwotICAg IHpjbG9zZShaTUZJTEUpOwotCi0gICAgaWYgKGZjIDwgMSkgeyAgICAgICAgICAgICAgICAgICAg ICAgLyogUkVTRVRpbmcsIG5vdCBFWElUaW5nICovCi0jaWZkZWYgREVCVUcKLSAgICAgICAgaWYg KGRlYmxvZykgeyAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSB0aGUgZGVidWcgbG9nLiAqLwot ICAgICAgICAgICAgKmRlYmZpbCA9ICdcMCc7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwotICAg ICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwot ICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyogTk9J Q1AgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgZGVidWcoRjEwMSwiZG9jbGVhbiBleGl0aGFu Z3VwIiwiIixleGl0aGFuZ3VwKTsKLSAgICBpZiAobG9jYWwgJiYgZXhpdGhhbmd1cCkgewkJLyog Q2xvc2UgY29tbXVuaWNhdGlvbiBjb25uZWN0aW9uICovCi0gICAgICAgIGV4dGVybiBpbnQgaGFz bG9jazsKLQlpbnQgeDsKLQkKLQl4ID0gdHRjaGsoKTsKLQlkZWJ1ZyhGMTAxLCJkb2NsZWFuIHR0 Y2hrKCkiLCIiLHgpOwotI2lmZGVmIE9TMk9SVU5JWAotCWRlYnVnKEYxMDEsImRvY2xlYW4gdHR5 ZmQiLCIiLHR0eWZkKTsKLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSAgICAgICAgaWYgKHggPj0g MAotI2lmZGVmIE9TMgotICAgICAgICAgICAgfHwgdHR5ZmQgIT0gLTEKLSNlbHNlCi0jaWZkZWYg VU5JWAotICAgICAgICAgICAgfHwgaGFzbG9jayAgICAgICAgICAgICAgICAgIC8qIE1ha2Ugc3Vy ZSB3ZSBnZXQgbG9ja2ZpbGUhICovCi0gICAgICAgICAgICB8fCAoIW5ldHdvcmsgJiYgdHR5ZmQg PiAtMSkKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAp IHsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgd2FzY2xvc2VkLCB3aHljbG9zZWQ7Ci0JICAgIGRl YnVnKEYxMDAsImRvY2xlYW4gaGFuZ2luZyB1cCBhbmQgY2xvc2luZyIsIiIsMCk7Ci0gICAgICAg ICAgICBpZiAobXNnZmxnKSB7Ci0jaWZkZWYgVU5JWAotICAgICAgICAgICAgICAgIGZmbHVzaChz dGRvdXQpOwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgICAgICAgICBwcmludGYoIkNsb3Np bmcgJXMuLi4iLHR0bmFtZSk7Ci0gICAgICAgICAgICB9Ci0jaWZuZGVmIE5PRElBTAotICAgICAg ICAgICAgbWRtaHVwKCk7ICAgICAgICAgICAgICAgICAgIC8qIEhhbmd1cCB0aGUgbW9kZW0/Pz8g Ki8KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSAgICAgICAgICAgIHR0Y2xvcygwKTsgICAgICAgICAg ICAgICAgICAvKiBDbG9zZSBleHRlcm5hbCBsaW5lLCBpZiBhbnkgKi8KLSAgICAgICAgICAgIGlm IChtc2dmbGcpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIk9LXG4iKTsKLSNpZmRlZiBVTklY Ci0gICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogVU5JWCAqLwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHdhc2Nsb3NlZCkgewotICAgICAgICAgICAgICAg IHdoeWNsb3NlZCA9IFdDX0NMT1M7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICAgICAgaWYg KG5tYWMpIHsgICAgICAgICAgICAgLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLwotICAgICAgICAg ICAgICAgICAgICBpbnQgazsgICAgICAgICAgICAgIC8qIFllcyAqLwotICAgICAgICAgICAgICAg ICAgICBrID0gbWxvb2sobWFjdGFiLCJvbl9jbG9zZSIsbm1hYyk7ICAvKiBMb29rIHRoaXMgdXAg Ki8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj0gMCkgeyAgICAgICAgICAgICAgICAgICAg ICAgLyogSWYgZm91bmQsICovCi0gICAgICAgICAgICAgICAgICAgICAgICB3YXNjbG9zZWQgPSAw OwotICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpbnRmKCJPTl9DTE9TRSBET0NMRUFOXG4i KTsgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICoobWFjdGFiW2tdLmt3ZCkgPSBOVUw7ICAg ICAgICAgLyogU2VlIGNvbW1lbnQgYmVsb3cgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm IChkb2RvKGssY2tpdG9hKHdoeWNsb3NlZCksMCkgPiAtMSkgLyogc2V0IGl0IHVwLCAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgICAgICAvKiBh bmQgZXhlY3V0ZSBpdCAqLwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg fQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgICAgICAgd2FzY2xvc2VkID0gMDsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBja3N0cm5jcHkodHRuYW1lLGRmdHR5LFRU TkFNTEVOKTsgLyogUmVzdG9yZSBkZWZhdWx0IHR0eSAqLwotICAgICAgICBsb2NhbCA9IGRmbG9j OyAgICAgICAgICAgICAgICAgIC8qIEFuZCBkZWZhdWx0IHJlbW90ZS9sb2NhbCBzdGF0dXMgKi8K LSAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICBlbHNlIGlmIChsb2NhbCkgZGVidWcoRjEwMCwiZG9j bGVhbiBoYW5ndXAvY2xvc2Ugc2tpcHBlZCIsIiIsMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNl bmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRlZiBORVdGVFAKLSAgICBmdHBieWUoKTsJCQkJLyog SWYgRlRQIGNvbm5lY3Rpb24gb3BlbiwgY2xvc2UgaXQgKi8KLSNlbmRpZiAvKiBORVdGVFAgKi8K LQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICB0dGNsb3MoMCk7CQkJLyog SWYgSUtTRCwgY2xvc2Ugc29ja2V0ICovCi0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZuZGVmIE5P U1BMCi0vKgotICBJZiBhIG1hY3JvIG5hbWVkICJvbl9leGl0IiBpcyBkZWZpbmVkLCBleGVjdXRl IGl0LiAgQWxzbyByZW1vdmUgaXQgZnJvbSB0aGUKLSAgbWFjcm8gdGFibGUsIGluIGNhc2UgaXRz IGRlZmluaXRpb24gaW5jbHVkZXMgYW4gRVhJVCBvciBRVUlUIGNvbW1hbmQsIHdoaWNoCi0gIHdv dWxkIGNhdXNlIG11Y2ggcmVjdXJzaW9uIGFuZCB3b3VsZCBwcmV2ZW50IHRoZSBwcm9ncmFtIGZy b20gZXZlciBhY3R1YWxseQotICBFWElUaW5nLgotKi8KLSAgICBpZiAobm1hYykgeyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCi0gICAgICAgIGludCBr OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWWVzICovCi0gICAgICAgIGNoYXIgKiBjbWQg PSAib25fZXhpdCI7ICAgICAgICAgLyogTVNWQyAyLnggY29tcGlsZXIgZXJyb3IgKi8KLSAgICAg ICAgayA9IG1sb29rKG1hY3RhYixjbWQsbm1hYyk7ICAgICAvKiBMb29rIHVwICJvbl9leGl0IiAq LwotICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAq LwotI2lmZGVmIENPTU1FTlQKLQkgICAgLyogVGhpcyBtYWtlcyBhIG1lc3MgaWYgT05fRVhJVCBp dHNlbGYgZXhlY3V0ZXMgbWFjcm9zICovCi0gICAgICAgICAgICAqKG1hY3RhYltrXS5rd2QpID0g TlVMOyAgICAgLyogcG9rZSBpdHMgbmFtZSBmcm9tIHRoZSB0YWJsZSwgKi8KLSNlbHNlCi0JICAg IC8qIFJlcGxhY2UgdGhlIGtleXdvcmQgd2l0aCBzb21ldGhpbmcgdGhhdCBkb2Vzbid0IHdyZWNr IHRoZSAqLwotCSAgICAvKiBvcmRlciBvZiB0aGUga2V5d29yZCB0YWJsZSAqLwotCSAgICBja3N0 cm5jcHkobWFjdGFiW2tdLmt3ZCwib25fZXh4eCIsOCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICAgICAgaWYgKGRvZG8oaywiIiwwKSA+IC0xKSAgICAgIC8qIHNldCBpdCB1cCwgKi8K LSAgICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAgICAvKiBhbmQgZXhlY3V0ZSBp dCAqLwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0vKgotICBQdXQgY29u c29sZSB0ZXJtaW5hbCBiYWNrIHRvIG5vcm1hbC4gIFRoaXMgaXMgZG9uZSBoZXJlIGJlY2F1c2Ug dGhlCi0gIE9OX0VYSVQgbWFjcm8gY2FsbHMgdGhlIHBhcnNlciwgd2hpY2ggbWVkZGxlcyB3aXRo IGNvbnNvbGUgdGVybWluYWwgbW9kZXMuCi0qLwotICAgIGNvbnJlcygpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFJlc3RvcmUgY29uc29sZSB0ZXJtaW5hbC4gKi8KLQotI2lmZGVmIENP TU1FTlQKLS8qIFNob3VsZCBiZSBubyBuZWVkIGZvciB0aGlzLCBhbmQgbWF5YmUgaXQncyBzY3Jl d2luZyB0aGluZ3MgdXA/ICovCi0gICAgY29ubm9pKCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVHVybiBvZmYgY29uc29sZSBpbnRlcnJ1cHQgdHJhcHMgKi8KLSNlbmRpZiAvKiBDT01N RU5UICovCi0KLSAgICAvKiBEZWxldGUgdGhlIFN0YXJ0dXAgRmlsZSBpZiB3ZSBhcmUgc3VwcG9z ZWQgdG8uICovCi0jaWZuZGVmIE5PSUNQCi0gICAgewotICAgICAgICBleHRlcm4gaW50IERlbGV0 ZVN0YXJ0dXBGaWxlOwotICAgICAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIERlbGV0ZVN0YXJ0dXBG aWxlIixjbWRmaWwsRGVsZXRlU3RhcnR1cEZpbGUpOwotICAgICAgICBpZiAoRGVsZXRlU3RhcnR1 cEZpbGUpIHsKLSAgICAgICAgICAgIGludCByYyA9IHpkZWxldChjbWRmaWwpOwotICAgICAgICAg ICAgZGVidWcoRjExMSwiZG9jbGVhbiB6ZGVsZXQiLGNtZGZpbCxyYyk7Ci0gICAgICAgIH0KLSAg ICB9Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICBzeXNjbGVhbnVwKCk7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBTeXN0ZW0tZGVwZW5kZW50IGNsZWFudXAsIGxhc3QgKi8KLX0KLQotLyogIEQg TyBFIFggSSBUICAtLSAgRXhpdCBmcm9tIHRoZSBwcm9ncmFtLiAgKi8KLQotLyoKLSAgRmlyc3Qg YXJnIGlzIGdlbmVyYWwsIHN5c3RlbS1pbmRlcGVuZGVudCBzeW1ib2w6IEdPT0RfRVhJVCBvciBC QURfRVhJVC4KLSAgSWYgc2Vjb25kIGFyZyBpcyAtMSwgdGFrZSAxc3QgYXJnIGxpdGVyYWxseS4K LSAgSWYgc2Vjb25kIGFyZyBpcyBub3QgLTEsIHdvcmsgaXQgaW50byB0aGUgZXhpdCBjb2RlLgot Ki8KLVZPSUQKLWRvZXhpdChleGl0c3RhdCxjb2RlKSBpbnQgZXhpdHN0YXQsIGNvZGU7IHsKLSAg ICBleHRlcm4gaW50IHhfbG9nZ2VkLCBxdWl0dGluZzsKLSNpZmRlZiBPUzIKLSAgICBleHRlcm4g aW50IGRpc3BsYXlfZGVtbzsKLSAgICBleHRlcm4gaW50IFN5c0luaXRlZDsKLSNlbmRpZiAvKiBP UzIgKi8KLSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIEtSQjQKLSAgICBleHRlcm4gaW50IGty YjRfYXV0b2RlbDsKLSNlbmRpZiAvKiBLUkI0ICovCi0jaWZkZWYgS1JCNQotICAgIGV4dGVybiBp bnQga3JiNV9hdXRvZGVsOwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJP UyAqLwotCi0jaWZkZWYgVk1TCi0gICAgY2hhciBlbnZzdHJbNjRdOwotICAgIHN0YXRpYyAkREVT Q1JJUFRPUihzeW1uYW0sIkNLRVJNSVRfU1RBVFVTIik7Ci0gICAgc3RhdGljIHN0cnVjdCBkc2Mk ZGVzY3JpcHRvcl9zIHN5bXZhbDsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICBpbnQgaTsKLQotI2lm ZGVmIERFQlVHCi0jaWZkZWYgVVNFX0xVQ0FDSEUKLSAgICBleHRlcm4gbG9uZyBsdWNhbGxzLCBs dWhpdHMsIHh4aGl0cywgbHVsb29wOwotICAgIGV4dGVybiBpbnQgbHVzaXplOwotI2VuZGlmIC8q IFVTRV9MVUNBQ0hFICovCi0jaWZuZGVmIE5PU1BMCi0gICAgZXh0ZXJuIGludCBjbWRzdGF0c1td OwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICBxdWl0dGluZysrOwotCi0jaWZkZWYgT1MyCi0g ICAgaWYgKCAhU3lzSW5pdGVkICkgewotICAgICAgICBzdGF0aWMgaW50IGluaXRpbmcgPSAwOwot ICAgICAgICBpZiAoIGluaXRpbmcgKQotCSAgZXhpdCgyNTMpOwotICAgICAgICBpbml0aW5nID0g MTsKLSAgICAgICAgc3lzaW5pdCgpOwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGlm IChkZWJsb2cpIHsKLSNpZmRlZiBVU0VfTFVDQUNIRQotCWRlYnVnKEYxMDEsImxvb2t1cCBjYWNo ZSBzaXplIiwiIixsdXNpemUpOwotCWRlYnVnKEYxMDEsImxvb2t1cCBjYWxscyAuLi4uIiwiIixs dWNhbGxzKTsKLQlkZWJ1ZyhGMTAxLCJsb29rdXAgY2FjaGUgaGl0cyIsIiIsbHVoaXRzKTsKLQlk ZWJ1ZyhGMTAxLCJsb29rdXAgc3RhcnQgaGl0cyIsIiIseHhoaXRzKTsKLQlkZWJ1ZyhGMTAxLCJs b29rdXAgbG9vcCBpdGVyYXRpb25zIiwiIixsdWxvb3ApOwotI2VuZGlmIC8qIFVTRV9MVUNBQ0hF ICovCi0jaWZuZGVmIE5PU1BMCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JICAgIGlm IChjbWRzdGF0c1tpXSkKLQkgICAgICBkZWJ1ZyhGMTExLCJDTVNUQVRTIixja2l0b2EoaSksY21k c3RhdHNbaV0pOwotCX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCWRlYnVnKEYxMDEsImRvZXhpdCBl eGl0c3RhdCIsIiIsZXhpdHN0YXQpOwotCWRlYnVnKEYxMDEsImRvZXhpdCBjb2RlIiwiIixjb2Rl KTsKLQlkZWJ1ZyhGMTAxLCJkb2V4aXQgeGl0c3RhIiwiIix4aXRzdGEpOwotICAgIH0KLSNlbmRp ZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAvKiBJZiB3ZSBhcmUgYXV0 b21hdGljYWxseSBkZXN0cm95aW5nIEtlcmJlcm9zIGNyZWRlbnRpYWxzIG9uIEV4aXQgKi8KLSAg ICAvKiBkbyBpdCBub3cuICovCi0jaWZkZWYgS1JCNAotICAgIGlmIChrcmI0X2F1dG9kZWwgPT0g S1JCX0RFTF9FWCkgewotICAgICAgICBleHRlcm4gc3RydWN0IGtyYl9vcF9kYXRhIGtyYl9vcDsK LSAgICAgICAga3JiX29wLnZlcnNpb24gPSA0OwotICAgICAgICBrcmJfb3AuY2FjaGUgPSBOVUxM OwotICAgICAgICBja19rcmI0X2Rlc3Ryb3koJmtyYl9vcCk7Ci0gICAgfQotI2VuZGlmIC8qIEtS QjQgKi8KLSNpZmRlZiBLUkI1Ci0gICAgaWYgKGtyYjVfYXV0b2RlbCA9PSBLUkJfREVMX0VYKSB7 Ci0gICAgICAgIGV4dGVybiBzdHJ1Y3Qga3JiX29wX2RhdGEga3JiX29wOwotICAgICAgICBleHRl cm4gY2hhciAqIGtyYjVfZF9jYzsKLSAgICAgICAga3JiX29wLnZlcnNpb24gPSA1OwotICAgICAg ICBrcmJfb3AuY2FjaGUgPSBrcmI1X2RfY2M7Ci0gICAgICAgIGNrX2tyYjVfZGVzdHJveSgma3Ji X29wKTsKLSAgICB9Ci0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICov Ci0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGlmIChTeXNJbml0ZWQpCi0gICAg ewotI2lmZGVmIERDTURCVUYKLSAgICAgICAgZXh0ZXJuIHN0cnVjdCBjbWRwdHIgKmNtZHN0azsK LSNlbHNlCi0gICAgICAgIGV4dGVybiBzdHJ1Y3QgY21kcHRyIGNtZHN0a1tdOwotI2VuZGlmIC8q IERDTURCVUYgKi8KLSAgICAgICAgZXh0ZXJuIGludCB0dF9zdGF0dXNbXTsKLSAgICAgICAgZXh0 ZXJuIGludCB2bW9kZTsKLQotICAgICAgICAvKiBJZiB0aGVyZSBpcyBhIGRlbW8gc2NyZWVuIHRv IGJlIGRpc3BsYXllZCwgZGlzcGxheSBpdCAqLwotICAgICAgICBpZiAoZGlzcGxheV9kZW1vKSB7 Ci0gICAgICAgICAgICBkZW1vc2NybihWQ01EKTsKLSAgICAgICAgICAgIGRpc3BsYXlfZGVtbyA9 IDA7Ci0gICAgICAgIH0KLSNpZm5kZWYgS1VJCi0gICAgICAgIC8qIFRoaXMgaXMgZ29pbmcgdG8g YmUgaGlkZW91cy4gIElmIHdlIGhhdmUgYSBzdGF0dXMgbGluZSAqLwotICAgICAgICAvKiBpbiB0 aGUgY29tbWFuZCB3aW5kb3cgdHVybiBpdCBvZmYgYmVmb3JlIHdlIGV4aXQuICAgICAgKi8KLQot ICAgICAgICBpZiAoIHR0X3N0YXR1c1tWQ01EXSAmJiB2bW9kZSA9PSBWQ01EICkgewotICAgICAg ICAgICAgZG9tYWMoIl9jbGVhcl9zdGF0dXNsaW5lIiwic2V0IGNvbW1hbmQgc3RhdHVzbGluZSBv ZmYiLAotICAgICAgICAgICAgICAgICAgIGNtZHN0a1tjbWRsdmxdLmNjZmxncyk7Ci0gICAgICAg ICAgICBkZWxtYWMoIl9jbGVhcl9zdGF0dXNsaW5lIiwxKTsKLSAgICAgICAgICAgIFJlcXVlc3RT Y3JlZW5NdXRleCgtMSk7Ci0gICAgICAgICAgICBWc2NybklzRGlydHkodm1vZGUpOwotICAgICAg ICAgICAgUmVsZWFzZVNjcmVlbk11dGV4KCk7Ci0gICAgICAgICAgICB3aGlsZSAoIElzVnNjcm5E aXJ0eSh2bW9kZSkgKQotICAgICAgICAgICAgICAgIG1zbGVlcCgyMDApOwotICAgICAgICAgICAg UmVxdWVzdFNjcmVlbk11dGV4KC0xKTsKLSAgICAgICAgICAgIFJlbGVhc2VTY3JlZW5NdXRleCgp OwotICAgICAgICB9Ci0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIERpYWxlclNlbmQoT1BUX0tF Uk1JVF9FWElULGV4aXRzdGF0KTsKLSNpZm5kZWYgS1VJCi0gICAgICAgIGRlYnVnKEYxMDAsImRv ZXhpdCBhYm91dCB0byBtc2xlZXAiLCIiLDApOwotCi0gICAgICAgIGlmICggaXNXaW45NSgpICkK LSAgICAgICAgICAgIG1zbGVlcCgyNTApOwotI2VuZGlmIC8qIEtVSSAqLwotICAgIH0KLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRlZiBJS1NECi0jaWZkZWYg Q0tfTE9HSU4KLSAgICBpZiAoaW5zZXJ2ZXIgJiYgeF9sb2dnZWQpIHsKLSNpZm5kZWYgTk9TUEwK LS8qCi0gIElmIGEgbWFjcm8gbmFtZWQgIm9uX2xvZ291dCIgaXMgZGVmaW5lZCwgZXhlY3V0ZSBp dC4gIEFsc28gcmVtb3ZlIGl0IGZyb20gdGhlCi0gIG1hY3JvIHRhYmxlLCBpbiBjYXNlIGl0cyBk ZWZpbml0aW9uIGluY2x1ZGVzIGFuIEVYSVQgb3IgUVVJVCBjb21tYW5kLCB3aGljaAotICB3b3Vs ZCBjYXVzZSBtdWNoIHJlY3Vyc2lvbiBhbmQgd291bGQgcHJldmVudCB0aGUgcHJvZ3JhbSBmcm9t IGV2ZXIgYWN0dWFsbHkKLSAgRVhJVGluZy4KLSovCi0JaWYgKG5tYWMpIHsJCQkvKiBBbnkgbWFj cm9zIGRlZmluZWQ/ICovCi0JICAgIGludCBrOwkJCS8qIFllcyAqLwotCSAgICBjaGFyICogY21k ID0gIm9uX2xvZ291dCI7CS8qIE1TVkMgMi54IGNvbXBpbGVyIGVycm9yICovCi0JICAgIGsgPSBt bG9vayhtYWN0YWIsY21kLG5tYWMpOwkvKiBMb29rIHVwICJvbl9sb2dvdXQiICovCi0JICAgIGlm IChrID49IDApIHsJCS8qIElmIGZvdW5kLCAqLwotCQkqKG1hY3RhYltrXS5rd2QpID0gTlVMOwkv KiBwb2tlIGl0cyBuYW1lIGZyb20gdGhlIHRhYmxlLCAqLwotCQlpZiAoZG9kbyhrLCIiLDApID4g LTEpCS8qIHNldCBpdCB1cCwgKi8KLQkJICBwYXJzZXIoMSk7CQkvKiBhbmQgZXhlY3V0ZSBpdCAq LwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIE5PU1BMICovCi0JenZsb2dvdXQoKTsKLSAgICB9Ci0j ZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICBkZWJ1ZyhGMTAw LCJkb2V4aXQgYWJvdXQgdG8gZG9jbGVhbiIsIiIsMCk7Ci0gICAgZG9jbGVhbigxKTsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ2xlYW4gdXAgbW9zdCB0aGluZ3MgKi8KLQotI2lmZGVmIFZN UwotICAgIGlmIChjb2RlID09IC0xKQotICAgICAgY29kZSA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNpbmNlIHdlIHNldCB0d28gZGlmZmVyZW50IGl0ZW1zICovCi0gICAgc3ByaW50 ZihlbnZzdHIsIiVkIiwgZXhpdHN0YXQgfCBjb2RlKTsgLyogU0FGRSAqLwotICAgIHN5bXZhbC5k c2Mkd19sZW5ndGggPSAoaW50KXN0cmxlbihlbnZzdHIpOwotICAgIHN5bXZhbC5kc2MkYV9wb2lu dGVyID0gZW52c3RyOwotICAgIHN5bXZhbC5kc2MkYl9jbGFzcyA9IERTQyRLX0NMQVNTX1M7Ci0g ICAgc3ltdmFsLmRzYyRiX2R0eXBlID0gRFNDJEtfRFRZUEVfVDsKLSAgICBpID0gMjsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTdG9yZSBpbiBnbG9iYWwgdGFibGUgKi8KLSNpZmRl ZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCi0g ICAgTElCJFNFVF9TWU1CT0woJnN5bW5hbSwgJnN5bXZhbCwgJmkpOwotI2Vsc2UKLSAgICBsaWIk c2V0X3N5bWJvbCgmc3ltbmFtLCAmc3ltdmFsLCAmaSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgIGlmIChleGl0c3RhdCA9PSBCQURfRVhJVCkKLSAgICAgIGV4aXRzdGF0ID0gU1MkX0FCT1JU IHwgU1RTJE1fSU5ISUJfTVNHOwotICAgIGlmIChleGl0c3RhdCA9PSBHT09EX0VYSVQpCi0gICAg ICBleGl0c3RhdCA9IFNTJF9OT1JNQUwgfCBTVFMkTV9JTkhJQl9NU0c7Ci0jZWxzZSAvKiBOb3Qg Vk1TICovCi0gICAgaWYgKGNvZGUgIT0gLTEpICAgICAgICAgICAgICAgICAgICAgLyogVGFrZSAx c3QgYXJnIGxpdGVyYWxseSAqLwotICAgICAgZXhpdHN0YXQgfD0gY29kZTsKLSNlbmRpZiAvKiBW TVMgKi8KLQotI2lmZGVmIElLU0QKLSNpZmRlZiBJS1NEQgotICAgIGRlYnVnKEYxMDEsImRvZXhp dCBpa2Rib3BlbiIsIiIsaWtkYm9wZW4pOwotICAgIGlmIChpa2Rib3BlbiAmJiBkYmZwKSB7ICAg ICAgICAgICAgIC8qIElmIElLU0QgZGF0YWJhc2Ugb3BlbiAqLwotICAgICAgICBpbnQgeDsKLSAg ICAgICAgeCA9IGZyZWVzbG90KG15ZGJzbG90KTsgICAgICAgICAvKiBGcmVlIG91ciBzbG90Li4u ICovCi0gICAgICAgIGRlYnVnKEYxMDEsImRvZXhpdCBmcmVlc2xvdCIsIiIseCk7Ci0gICAgICAg IGZjbG9zZShkYmZwKTsgICAgICAgICAgICAgICAgICAgLyogYW5kIGNsb3NlIGl0LiAqLwotICAg IH0KLSNlbmRpZiAvKiBJS1NEQiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQotLyogV2UgaGF2ZSBw dXQgdGhpcyBvZmYgdGlsbCB0aGUgdmVyeSBsYXN0IG1vbWVudC4uLiAqLwotCi0jaWZkZWYgREVC VUcKLSAgICBpZiAoZGVibG9nKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSB0aGUg ZGVidWcgbG9nLiAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJDLUtlcm1pdCBFWElUIHN0YXR1cyIs IiIsZXhpdHN0YXQpOwotICAgICAgICAqZGViZmlsID0gJ1wwJzsKLSAgICAgICAgZGVibG9nID0g MDsKLSAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0K LSNpZmRlZiBPUzIKLSAgICBfZXhpdChleGl0c3RhdCk7ICAgICAgICAgICAgLyogRXhpdCBmcm9t IEMtS2VybWl0IChubyBtYXR0ZXIgd2hhdCkgKi8KLSNlbHNlIC8qIE9TMiAqLwotICAgIGV4aXQo ZXhpdHN0YXQpOyAgICAgICAgICAgICAgICAgICAgIC8qIEV4aXQgZnJvbSBDLUtlcm1pdCAqLwot I2VuZGlmIC8qIE9TMiAqLwotfQotCi1WT0lECi1iZ2NoaygpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ2hlY2sgYmFja2dyb3VuZCBzdGF0dXMgKi8KLSAgICBpZiAoYmdzZXQg PCAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBUaGV5IGRpZG4ndCB0eXBlIFNFVCBCQUNLR1JP VU5EICovCi0jaWZkZWYgVk1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHBy b21wdCBmbGFnIGJhc2VkIG9uICovCi0gICAgICAgIHBmbGFnID0gIWJhdGNoOyAgICAgICAgICAg ICAgICAgLyogd2hhdCB3ZSBkZXRlY3RlZCBhdCBzdGFydHVwLiAqLwotI2Vsc2UKLSAgICAgICAg cGZsYWcgPSAhYmFja2dyZDsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICB9IGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgU0VUIEJBQ0tHUk9VTkQgdmFsdWUgKi8K LSAgICAgICAgcGZsYWcgPSAoYmdzZXQgPT0gMCA/IDEgOiAwKTsKLSAgICB9Ci0KLSNpZm5kZWYg Tk9JQ1AKLSAgICAvKiBNZXNzYWdlIGZsYWcgb24gb25seSBpZiBhdCB0b3AgbGV2ZWwsIHBmbGFn IGlzIG9uLCBhbmQgUVVJRVQgaXMgT0ZGICovCi0gICAgaWYgKCF4Y21kc3JjKQotICAgICAgbXNn ZmxnID0gKHBmbGFnID09IDApID8gMCA6ICFxdWlldDsKLSAgICBlbHNlIG1zZ2ZsZyA9IDA7Ci0j ZWxzZQotICAgIG1zZ2ZsZyA9IDA7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLX0KLQotLyogU2V0IGNv bnNvbGUgaW50ZXJydXB0cyAqLwotCi1WT0lECi1zZXRpbnQoKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQWNjb3JkaW5nIHRvIFNFVCBDT01NQU5EIElOVEVSUlVQICovCi0gICAg aW50IHggPSAwOwotICAgIGlmIChjbWRpbnQpICB4IHw9IDE7Ci0gICAgaWYgKHhzdXNwZW5kKSB4 IHw9IDI7Ci0gICAgZGVidWcoRjEwMSwic2V0aW50IiwiIix4KTsKLQotICAgIHN3aXRjaCAoeCkg eyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCB0aGUgZGVzaXJlZCBjb21iaW5hdGlvbiAq LwotICAgICAgY2FzZSAwOiBjb25ub2koKTsgYnJlYWs7ICAgICAgICAgIC8qIE5vIGludGVycnVw dHMgKi8KLSAgICAgIGNhc2UgMTogY29uaW50KHRyYXAsU0lHX0lHTik7IGJyZWFrOwotICAgICAg Y2FzZSAyOiBjb25pbnQoU0lHX0lHTixzdHB0cmFwKTsgYnJlYWs7Ci0gICAgICBjYXNlIDM6IGNv bmludCh0cmFwLHN0cHRyYXApOyBicmVhazsKLSAgICB9Ci0gICAgYmdjaGsoKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgYmFja2dyb3VuZCBzdGF0dXMgKi8KLX0KLQotI2lm ZGVmIERFQlVHCi0vKiAgRCBFIEIgVSBHICAtLSAgRW50ZXIgYSByZWNvcmQgaW4gdGhlIGRlYnVn Z2luZyBsb2cgICovCi0KLS8qCi0gQ2FsbCB3aXRoIGEgZm9ybWF0LCB0d28gc3RyaW5ncywgYW5k IGEgbnVtYmVyOgotICAgZiAgLSBGb3JtYXQsIGEgYml0IHN0cmluZyBpbiByYW5nZSAwLTcuCi0g ICAgICAgIElmIGJpdCB4IGlzIG9uLCB0aGVuIGFyZ3VtZW50IG51bWJlciB4IGlzIHByaW50ZWQu Ci0gICBzMSAtIFN0cmluZywgYXJndW1lbnQgbnVtYmVyIDEuICBJZiBzZWxlY3RlZCwgcHJpbnRl ZCBhcyBpcy4KLSAgIHMyIC0gU3RyaW5nLCBhcmd1bWVudCBudW1iZXIgMi4gIElmIHNlbGVjdGVk LCBwcmludGVkIGluIGJyYWNrZXRzLgotICAgbiAgLSBMb25nIGludCwgYXJndW1lbnQgMy4gIElm IHNlbGVjdGVkLCBwcmludGVkIHByZWNlZGVkIGJ5IGVxdWFscyBzaWduLgotCi0gICBmPTAgaXMg c3BlY2lhbDogcHJpbnQgczEsczIsIGFuZCBpbnRlcnByZXQgbiBhcyBhIGNoYXIuCi0KLSAgIGY9 RjAxMSAoMykgaXMgYWxzbyBzcGVjaWFsOyBpbiB0aGlzIGNhc2UgczIgaXMgaW50ZXJwZXRlZCBh cyBhIGNvdW50ZWQKLSAgIHN0cmluZyB0aGF0IG1pZ2h0IGNvbnRhaW4gTlVMcy4gIG4gaXMgdGhl IGxlbmd0aC4gIElmIG4gaXMgbmVnYXRpdmUsIHRoaXMKLSAgIG1lYW5zIHRoZSBzdHJpbmcgaGFz IGJlZW4gdHJ1bmNhdGVkIGFuZCAiLi4iIHNob3VsZCBiZSBwcmludGVkIGFmdGVyIHRoZQotICAg Zmlyc3QgbiBieXRlcy4gIE5VTCBhbmQgTEYgYnl0ZXMgYXJlIHByaW50ZWQgYXMgIjxOVUw+IiBh bmQgIjxMRj4iLgotCi0gICBHbG9iYWxzOgotICAgICBkZWJsb2c6IG5vbnplcm8gaWYgZGVidWcg bG9nIG9wZW4uCi0gICAgIGRlYm9rOiAgbm9uemVybyBpZiBvayB0byB3cml0ZSBlbnRyaWVzLgot Ki8KLS8qCi0gIFdBUk5JTkc6IERvbid0IGNoYW5nZSBERUJVRkwgd2l0aG91dCBjaGFuZ2luZyBz cHJpbnRmKCkgZm9ybWF0cyBiZWxvdywKLSAgYWNjb3JkaW5nbHkuCi0qLwotI2RlZmluZSBEQlVG TCA0MDAwCi0vKgotICBXQVJOSU5HOiBUaGlzIHJvdXRpbmUgaXMgbm90IHRocmVhZC1zYWZlLCBl c3BlY2lhbGx5IHdoZW4gS2VybWl0IGlzCi0gIGV4ZWN1dGluZyBvbiBtdWx0aXBsZSBDUFVzIC0t IGFzIGRpZmZlcmVudCB0aHJlYWRzIHdyaXRlIHRvIHRoZSBzYW1lCi0gIHN0YXRpYyBidWZmZXIs IHRoZSBkZWJ1ZyBzdGF0ZW1lbnRzIGFyZSBhbGwgaW50ZXJsZWF2ZWQuICBUbyBiZSBmaXhlZAot ICBsYXRlci4uLgotKi8KLXN0YXRpYyBjaGFyICpkYnB0ciA9IChjaGFyICopMDsKLQotaW50Ci0j aWZkZWYgQ0tfQU5TSUMKLWRvZGVidWcoaW50IGYsIGNoYXIgKnMxLCBjaGFyICpzMiwgQ0tfT0ZG X1QgbikKLSNlbHNlCi1kb2RlYnVnKGYsczEsczIsbikgaW50IGY7IGNoYXIgKnMxLCAqczI7IENL X09GRl9UIG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRvZGVidWcgKi8gewotICAgIGNo YXIgKnNwOwotICAgIGludCBsZW4xLCBsZW4yOwotICAgIGV4dGVybiBpbnQgZGVidGltOwotI2lm ZGVmIE9TMgotICAgIGV4dGVybiBpbnQgU3lzSW5pdGVkOwotI2VuZGlmIC8qIE9TMiAqLwotCi0g ICAgaWYgKCFkZWJsb2cgfHwgIWRlYm9rKQotICAgICAgcmV0dXJuKDApOwotCi0jaWZkZWYgQ09N TUVOVAotICAgIC8qIGV4cGVuc2l2ZS4uLiAqLwotICAgIGlmICghY2hrZm4oWkRGSUxFKSkJCQkv KiBEZWJ1ZyBsb2cgbm90IG9wZW4sIGRvbid0LiAqLwotICAgICAgcmV0dXJuKDApOwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSAgICBpZiAoIWRicHRyKSB7ICAgICAgICAgICAgICAgICAgICAgICAv KiBBbGxvY2F0ZSBtZW1vcnkgYnVmZmVyICovCi0gICAgICAgIGRicHRyID0gbWFsbG9jKERCVUZM KzQpOyAgICAgICAgLyogVGhpcyBvbmx5IGhhcHBlbnMgb25jZSAqLwotICAgICAgICBpZiAoIWRi cHRyKSB7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAgICAgIHJldHVybigw KTsKLSAgICAgICAgfQotICAgIH0KLS8qCi0gIFRoaXMgcHJldmVudHMgaW5maW5pdGUgcmVjdXJz aW9uIGluIGNhc2Ugd2UgYWNjaWRlbnRhbGx5IHB1dCBhIGRlYnVnKCkKLSAgY2FsbCBpbiB0aGlz IHJvdXRpbmUsIG9yIGNhbGwgYW5vdGhlciByb3V0aW5lIHRoYXQgY29udGFpbnMgZGVidWcoKSBj YWxscy4KLSAgRnJvbSB0aGlzIHBvaW50IG9uLCBhbGwgcmV0dXJucyBmcm9tIHRoaXMgcmV0dXJu IG11c3QgYmUgdmlhIGdvdG8geGRlYnVnLAotICB3aGljaCBzZXRzIGRlYmxvZyBiYWNrIHRvIDEu Ci0qLwotI2lmZGVmIE9TMgotICAgIGlmIChTeXNJbml0ZWQpIHsKLQlpZiAoUmVxdWVzdERlYnVn TXV0ZXgoMzAwMDApKQotCSAgICBnb3RvIHhkZWJ1ZzsKLSAgICB9Ci0jZWxzZSAvKiBPUzIgKi8K LSAgICBkZWJsb2cgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmV2ZW50IGluZmlu aXRlIHJlY3Vyc2lvbiAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKGRlYnRpbSkgeyAg ICAgICAgICAgICAgICAgICAgICAgLyogVGltZXN0YW1wICovCi0gICAgICAgIGNoYXIgKnRiLCB0 c2J1Zls0OF07Ci0gICAgICAgIHp0aW1lKCZ0Yik7Ci0gICAgICAgIGNrc3RybmNweSh0c2J1Zix0 YiwzMik7Ci0gICAgICAgIGlmICh6dG1zZWMgPiAtMUwpIHsKLQkgICAgc3ByaW50Zih0c2J1Zisx OSwiLiUwM2xkICIsenRtc2VjKTsgLyogU0FGRSAqLwotCX0gZWxzZSB7Ci0JICAgIHRzYnVmWzE5 XSA9ICc6JzsKLQkgICAgdHNidWZbMjBdID0gU1A7Ci0JICAgIHRzYnVmWzIxXSA9IE5VTDsKLQl9 Ci0gICAgICAgIHpzb3V0KFpERklMRSx0c2J1ZisxMSk7Ci0gICAgfQotICAgIGlmICghczEpIHMx PSIoTlVMTCkiOwotICAgIGlmICghczIpIHMyPSIoTlVMTCkiOwotCi0gICAgbGVuMSA9IHN0cmxl bihzMSk7Ci0gICAgbGVuMiA9IHN0cmxlbihzMik7Ci0KLSNpZmRlZiBDT01NRU5UCi0vKgotICBU aGlzIHNob3VsZCB3b3JrLCBidXQgaXQgZG9lc24ndC4KLSAgU28gaW5zdGVhZCB3ZSdsbCBjb3Bl IHdpdGggb3ZlcmZsb3cgdmlhIHNwcmludGYgZm9ybWF0cy4KLSAgTi5CLjogVU5GT1JUVU5BVEVM WSwgdGhpcyBtZWFucyB3ZSBoYXZlIHRvIHB1dCBjb25zdGFudHMgaW4gdGhlCi0gIHNwcmludGYg Zm9ybWF0cy4KLSovCi0gICAgaWYgKGYgIT0gRjAxMSAmJiAoIWYgfHwgKGYgJiA2KSkpIHsgLyog U3RyaW5nIGFyZ3VtZW50KHMpIGluY2x1ZGVkPyAqLwotICAgICAgICB4ID0gKGludCkgc3RybGVu KHMxKSArIChpbnQpIHN0cmxlbihzMikgKyAxODsKLSAgICAgICAgaWYgKHggPiBkYnVmbCkgeyAg ICAgICAgICAgICAgICAvKiBMb25nZXIgdGhhbiBidWZmZXI/ICovCi0gICAgICAgICAgICBpZiAo ZGJwdHIpICAgICAgICAgICAgICAgICAgLyogWWVzLCBmcmVlIHByZXZpb3VzIGJ1ZmZlciAqLwot ICAgICAgICAgICAgICBmcmVlKGRicHRyKTsKLSAgICAgICAgICAgIGRicHRyID0gKGNoYXIgKikg bWFsbG9jKHggKyAyKTsgLyogQWxsb2NhdGUgYSBuZXcgb25lICovCi0gICAgICAgICAgICBpZiAo IWRicHRyKSB7Ci0gICAgICAgICAgICAgICAgenNvdXRsKFpERklMRSwiREVCVUc6IE1lbW9yeSBh bGxvY2F0aW9uIGZhaWx1cmUiKTsKLSAgICAgICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAg ICAgICAgICAgIHpjbG9zZShaREZJTEUpOwotICAgICAgICAgICAgICAgIGdvdG8geGRlYnVnOwot ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkYnVmbCA9IHg7Ci0gICAgICAg ICAgICAgICAgc3ByaW50ZihkYnB0ciwiREVCVUc6IEJ1ZmZlciBleHBhbmRlZCB0byAlZFxuIiwg eCArIDE4KTsKLSAgICAgICAgICAgICAgICB6c291dGwoWkRGSUxFLGRicHRyKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBD T01NRU5UCi0vKiBUaGUgYWZvcmVtZW50aW9uZWQgc3ByaW50ZigpIGZvcm1hdHMgd2VyZSBsaWtl IHRoaXM6ICovCi0gICAgICAgIGlmIChuID4gMzEgJiYgbiA8IDEyNykKLSAgICAgICAgICBzcHJp bnRmKHNwLCIlLjEwMHMlLjIwMDBzOiVjXG4iLHMxLHMyLChDSEFSKSBuKTsKLSAgICAgICAgZWxz ZSBpZiAobiA8IDMyIHx8IG4gPT0gMTI3KQotICAgICAgICAgIHNwcmludGYoc3AsIiUuMTAwcyUu MjAwMHM6XiVjXG4iLHMxLHMyLChDSEFSKSAoKG4rNjQpICYgMHg3RikpOwotICAgICAgICBlbHNl IGlmIChuID4gMTI3ICYmIG4gPCAxNjApCi0gICAgICAgICAgc3ByaW50ZihzcCwiJS4xMDBzJS4y MDAwczp+XiVjXG4iLHMxLHMyLChDSEFSKSgobi02NCkgJiAweDdGKSk7Ci0gICAgICAgIGVsc2Ug aWYgKG4gPiAxNTkgJiYgbiA8IDI1NikKLSAgICAgICAgICBzcHJpbnRmKHNwLCIlLjEwMHMlLjIw MDBzOn4lY1xuIixzMSxzMiwoQ0hBUikgKG4gJiAweDdGKSk7Ci0gICAgICAgIGVsc2Ugc3ByaW50 ZihzcCwiJS4xMDBzJS4yMDAwczolbGRcbiIsczEsczIsbik7Ci0vKgotICBCdXQsIG5hdHVyYWxs eSwgaXQgdHVybnMgb3V0IHRoZXNlIGFyZSBub3QgcG9ydGFibGUgZWl0aGVyLCBzbyBub3cKLSAg d2UgZG8gdGhlIHN0dXBpZGVzdCBwb3NzaWJsZSB0aGluZy4KLSovCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotCi0jaWZkZWYgQklHQlVGT0sKLS8qIE5lZWQgdG8gYWNjZXB0IGxvbmdlciBzdHJpbmdz IHdoZW4gZGVidWdnaW5nIGF1dGhlbnRpY2F0ZWQgY29ubmVjdGlvbnMgKi8KLSAgICBpZiAoZiA9 PSBGMDEwKSB7Ci0gICAgICAgIGlmIChsZW4yICsgMiA+PSBEQlVGTCkgczIgPSAiKHN0cmluZyB0 b28gbG9uZykiOwotICAgIH0gZWxzZSBpZiAoZiAhPSBGMDExICYmIGYgIT0gRjEwMCkgewotICAg ICAgICBpZiAobGVuMSA+IDEwMCkgczEgPSAiKHN0cmluZyB0b28gbG9uZykiOwotICAgICAgICBp ZiAobGVuMiArIDEwMSA+PSBEQlVGTCkgczIgPSAiKHN0cmluZyB0b28gbG9uZykiOwotICAgIH0K LSNlbHNlCi0gICAgaWYgKGYgIT0gRjAxMSkgewotICAgICAgICBpZiAobGVuMSA+IDEwMCkgczEg PSAiKHN0cmluZyB0b28gbG9uZykiOwotICAgICAgICBpZiAobGVuMiArIDEwMSA+PSBEQlVGTCkg czIgPSAiKHN0cmluZyB0b28gbG9uZykiOwotICAgIH0KLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwot Ci0gICAgc3AgPSBkYnB0cjsKLQotICAgIHN3aXRjaCAoZikgeyAgICAgICAgICAgICAgICAvKiBX cml0ZSBsb2cgcmVjb3JkIGFjY29yZGluZyB0byBmb3JtYXQuICovCi0gICAgICBjYXNlIEYwMDA6 ICAgICAgICAgICAgICAgIC8qIDAgPSBwcmludCBib3RoIHN0cmluZ3MsIGFuZCBuIGFzIGEgY2hh ci4gKi8KLSAgICAgICAgaWYgKGxlbjIgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKG4gPiAzMSAm JiBuIDwgMTI3KSB8fCAobiA+IDE1OSAmJiBuIDwgMjU2KSkKLSAgICAgICAgICAgICAgc3ByaW50 ZihzcCwiJXNbJXNdPSVjXG4iLHMxLHMyLChDSEFSKSBuKTsKLSAgICAgICAgICAgIGVsc2UgaWYg KG4gPCAzMiB8fCBuID09IDEyNykKLSAgICAgICAgICAgICAgc3ByaW50ZihzcCwiJXNbJXNdPV4l Y1xuIixzMSxzMiwoQ0hBUikgKChuKzY0KSAmIDB4N0YpKTsKLSAgICAgICAgICAgIGVsc2UgaWYg KG4gPiAxMjcgJiYgbiA8IDE2MCkKLSAgICAgICAgICAgICAgc3ByaW50ZihzcCwiJXNbJXNdPX5e JWNcbiIsczEsczIsKENIQVIpKChuLTY0KSAmIDB4N0YpKTsKLSAgICAgICAgICAgIGVsc2Ugc3By aW50ZihzcCwiJXNbJXNdPTB4JWxYXG4iLHMxLHMyLChsb25nKW4pOwotICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgaWYgKChuID4gMzEgJiYgbiA8IDEyNykgfHwgKG4gPiAxNTkgJiYgbiA8 IDI1NikpCi0gICAgICAgICAgICAgIHNwcmludGYoc3AsIiVzPSVjXG4iLHMxLChDSEFSKSBuKTsK LSAgICAgICAgICAgIGVsc2UgaWYgKG4gPCAzMiB8fCBuID09IDEyNykKLSAgICAgICAgICAgICAg c3ByaW50ZihzcCwiJXM9XiVjXG4iLHMxLChDSEFSKSAoKG4rNjQpICYgMHg3RikpOwotICAgICAg ICAgICAgZWxzZSBpZiAobiA+IDEyNyAmJiBuIDwgMTYwKQotICAgICAgICAgICAgICBzcHJpbnRm KHNwLCIlcz1+XiVjXG4iLHMxLChDSEFSKSgobi02NCkgJiAweDdGKSk7Ci0gICAgICAgICAgICBl bHNlIHNwcmludGYoc3AsIiVzPTB4JWxYXG4iLHMxLChsb25nKW4pOwotICAgICAgICB9Ci0gICAg ICAgIGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgewotICAgICAgICAgICAgZGVibG9nID0g MDsKLSAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOwotICAgICAgICB9Ci0jaWZkZWYgQ0tTWVNM T0cKLSAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7Ci0g ICAgICAgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICBicmVhazsKLQotICAgICAgY2Fz ZSBGMDAxOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEsICI9biIgKi8KLSNpZmRlZiBDT01N RU5UCi0gICAgICAgIC8qIFRoaXMgd2FzIG5ldmVyIHVzZWQgKi8KLSAgICAgICAgc3ByaW50Zihz cCwiPSVzXG4iLGNrZnN0b2EobikpOwotI2Vsc2UKLSAgICAgICAgLyogTGlrZSBGMTExLCBidXQg c2hvd3MgbnVtYmVyIG4gaW4gaGV4ICovCi0JY2ttYWt4bXNnKHNwLERCVUZMLAotCQkgIHMxLAot CQkgICgqczEgPyAiOiIgOiAiIiksCi0JCSAgczIsCi0JCSAgKCpzMiA/ICI6IiA6ICIiKSwKLQkJ ICBja2x0b3gobiksCi0JCSAgIlxuIiwKLQkJICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TAotCQkgICk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBpZiAoenNvdXQoWkRGSUxF LGRicHRyKSA8IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xv c2UoWkRGSUxFKTsKLSAgICAgICAgfQotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgIGlmIChja3hz eXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAgY2tzeXNsb2co U1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5VTEwpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tT WVNMT0cgKi8KLSAgICAgICAgYnJlYWs7Ci0KLS8qCi0gIFRoaXMgb25lIHdhcyBuZXZlciB1c2Vk IHNvIChPY3RvYmVyIDIwMDApIHdlIG5vdyB1c2UgaXQgbGlrZSBGMDExLAotICBleGNlcHQgaW4g dGhpcyBjYXNlIHdlIHRyZWF0IHMyIGFzIE5VTCB0ZXJtaW5hdGVkLgotKi8KLSAgICAgIGNhc2Ug RjAxMDoKLQluID0gLWRlYnhsZW47Ci0vKgotICBUaGlzIG9uZSB0cmVhdHMgbiBhcyB0aGUgbGVu Z3RoIG9mIHRoZSBzdHJpbmcgczIsIHdoaWNoIG1heSBjb250YWluIE5VTHMuCi0gIEl0J3MgZ29v ZCBmb3IgbG9nZ2luZyBOVUwtYmVhcmluZyBkYXRhIGluIHRoZSBkZWJ1ZyBsb2cuCi0qLwotICAg ICAgY2FzZSBGMDExOiB7Ci0JICBpbnQgaSwgaiwgY29udGQgPSAwOwotCSAgY2hhciAqIHAgPSBz MiwgKnBidWYgPSBOVUxMOwkvKiBwID0gc291cmNlIHBvaW50ZXIgKi8KLQkgIGludCBtOwkJCS8q IHBidWYgPSBkZXN0aW5hdGlvbiBwb2ludGVyICovCi0KLQkgIGlmIChmID09IEYwMTEpIHsKLQkg ICAgICBpZiAobiA8IDApIHsJCS8qIG4gPSBzaXplIG9mIHNvdXJjZSAqLwotCQkgIG4gPSAwIC0g bjsJCS8qIE5lZ2F0aXZlIG1lYW5zIHRvIGFkZCAiLi4uIiAqLwotCQkgIGNvbnRkID0gMTsKLQkg ICAgICB9Ci0JICB9IGVsc2UgewotCSAgICAgIGludCB4LCBmbGFnID0gMDsKLQkgICAgICB4ID0g c3RybGVuKHMyKTsKLQkgICAgICBpZiAobiA8IDApIHsKLQkJICBmbGFnID0gMTsKLQkJICBuID0g MCAtIG47Ci0JICAgICAgfQotCSAgICAgIGlmICh4IDwgbikKLQkJbiA9IHg7Ci0JICB9Ci0JICBp ZiAobiA9PSAwKQkJCS8qIDAgbWVhbnMgZG8gbm90aGluZyAqLwotCSAgICBnb3RvIHhkZWJ1ZzsK LQkgIG0gPSBEQlVGTCAtIDg7CQkvKiBHZXQgc2l6ZSBmb3IgaW50ZXJwcmV0ZWQgcGFydCAqLwot CSAgaWYgKG4gPiBtKQkJCS8qIEVuc3VyZSByZXF1ZXN0ZWQgc2l6ZSBub3QgdG9vIGJpZyAqLwot CSAgICBuID0gbTsKLQkgIHBidWYgPSBkYnB0cjsJCQkvKiBDb25zdHJ1Y3Rpb24gcG9pbnRlciAq LwotCSAgaSA9IDA7Ci0JICBwYnVmW2krK10gPSAnWyc7CQkvKiBJbnRlcnByZXQgdGhlIHN0cmlu ZyBpbnRvIGl0ICovCi0JICBmb3IgKGogPSAwOyBqIDwgbiAmJiBpIDwgbS00OyBwKyssaisrKSB7 IC8qIGNoYXIgYnkgY2hhci4uLiAqLwotCSAgICAgIGlmICgqcCA9PSBMRikgewotCQkgIGlmIChp ID49IG0tNCkKLQkJICAgIGJyZWFrOwotCQkgIHBidWZbaSsrXSA9ICc8JzsKLQkJICBwYnVmW2kr K10gPSAnTCc7Ci0JCSAgcGJ1ZltpKytdID0gJ0YnOwotCQkgIHBidWZbaSsrXSA9ICc+JzsKLQkJ ICBjb250aW51ZTsKLQkgICAgICB9IGVsc2UgaWYgKCpwID09IENSKSB7Ci0JCSAgaWYgKGkgPj0g bS00KQotCQkgICAgYnJlYWs7Ci0JCSAgcGJ1ZltpKytdID0gJzwnOwotCQkgIHBidWZbaSsrXSA9 ICdDJzsKLQkJICBwYnVmW2krK10gPSAnUic7Ci0JCSAgcGJ1ZltpKytdID0gJz4nOwotCQkgIGNv bnRpbnVlOwotCSAgICAgIH0gZWxzZSBpZiAoKnAgPT0gSFQpIHsKLQkJICBpZiAoaSA+PSBtLTUp Ci0JCSAgICBicmVhazsKLQkJICBwYnVmW2krK10gPSAnPCc7Ci0JCSAgcGJ1ZltpKytdID0gJ1Qn OwotCQkgIHBidWZbaSsrXSA9ICdBJzsKLQkJICBwYnVmW2krK10gPSAnQic7Ci0JCSAgcGJ1Zltp KytdID0gJz4nOwotCQkgIGNvbnRpbnVlOwotCSAgICAgIH0gZWxzZSBpZiAoKnApIHsKLQkJICBw YnVmW2krK10gPSAqcDsKLQkJICBjb250aW51ZTsKLQkgICAgICB9IGVsc2UgewotCQkgIGlmIChp ID49IG0tNSkKLQkJICAgIGJyZWFrOwotCQkgIHBidWZbaSsrXSA9ICc8JzsKLQkJICBwYnVmW2kr K10gPSAnTic7Ci0JCSAgcGJ1ZltpKytdID0gJ1UnOwotCQkgIHBidWZbaSsrXSA9ICdMJzsKLQkJ ICBwYnVmW2krK10gPSAnPic7Ci0JCSAgY29udGludWU7Ci0JICAgICAgfQotCSAgfQotCSAgaWYg KGkgPCBtLTIgJiYgKCpwIHx8IGNvbnRkKSkgewotCSAgICAgIHBidWZbaSsrXSA9ICcuJzsKLQkg ICAgICBwYnVmW2krK10gPSAnLic7Ci0JICB9Ci0JICBwYnVmW2krK10gPSAnXSc7Ci0JICBwYnVm W2ldID0gTlVMOwotCSAgaWYgKHpzb3V0KFpERklMRSxzMSkgPCAwKSB7Ci0JICAgICAgZGVibG9n ID0gMDsKLQkgICAgICB6Y2xvc2UoWkRGSUxFKTsKLQkgIH0KLQkgIGlmICh6c291dGwoWkRGSUxF LHBidWYpIDwgMCkgewotCSAgICAgIGRlYmxvZyA9IDA7Ci0JICAgICAgemNsb3NlKFpERklMRSk7 Ci0JICB9Ci0jaWZkZWYgQ0tTWVNMT0cKLQkgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYg Y2t4bG9nZ2luZykgewotCSAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixzMSxwYnVm KTsKLQkgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr OwotCi0gICAgICBjYXNlIEYxMDA6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNCwgInMxIiAq LwotICAgICAgICBpZiAoenNvdXRsKFpERklMRSxzMSkgPCAwKSB7Ci0gICAgICAgICAgICBkZWJs b2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAgIH0KLSNpZmRlZiBD S1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcp IHsKLSAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixzMSxOVUxMKTsKLSAg ICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz ZSBGMTAxOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUsICJzMT1uIiAqLwotICAgICAgICBz cHJpbnRmKHNwLCIlcz0lc1xuIixzMSxja2ZzdG9hKG4pKTsKLSAgICAgICAgaWYgKHpzb3V0KFpE RklMRSxkYnB0cikgPCAwKSB7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAg emNsb3NlKFpERklMRSk7Ci0gICAgICAgIH0KLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICBpZiAo Y2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgIGNrc3lz bG9nKFNZU0xHX0RCLDEsImRlYnVnIixkYnB0cixOVUxMKTsKLSAgICAgICAgfQotI2VuZGlmIC8q IENLU1lTTE9HICovCi0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGMTEwOiAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDYsICJzMVtzMl0iICovCi0gICAgICAgIHNwcmludGYoc3AsIiVzWyVz XVxuIixzMSxzMik7Ci0gICAgICAgIGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgewotICAg ICAgICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOwotICAgICAg ICB9Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAm JiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIs ZGJwdHIsTlVMTCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICBi cmVhazsKLSAgICAgIGNhc2UgRjExMTogICAgICAgICAgICAgICAgICAgICAgICAvKiA3LCAiczFb czJdPW4iICovCi0gICAgICAgIHNwcmludGYoc3AsIiVzWyVzXT0lc1xuIixzMSxzMixja2ZzdG9h KG4pKTsKLSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7Ci0gICAgICAgICAg ICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAgIH0KLSNp ZmRlZiBDS1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxv Z2dpbmcpIHsKLSAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixkYnB0cixO VUxMKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgIGJyZWFrOwot ICAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ByaW50ZihzcCwiXG4/SW52YWxpZCBmb3JtYXQgZm9y IGRlYnVnKCkgLSAlZFxuIixmKTsKLSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAw KSB7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7 Ci0gICAgICAgIH0KLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZ U0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEs ImRlYnVnIixkYnB0cixOVUxMKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0g ICAgICAgIGJyZWFrOwotICAgIH0KLSAgeGRlYnVnOiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBDb21tb24gZXhpdCBwb2ludCAqLwotI2lmZGVmIE9TMgotICAgIGlmIChTeXNJbml0 ZWQpCi0JUmVsZWFzZURlYnVnTXV0ZXgoKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgIGRlYmxvZyA9 IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgdGhpcyAqLwotI2VuZGlmIC8q IE9TMiAqLwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWRvaGV4 ZHVtcChDSEFSICptc2csIENIQVIgKnN0LCBpbnQgY250KQotI2Vsc2UKLWRvaGV4ZHVtcChtc2cs c3QsY250KSBDSEFSICptc2c7IENIQVIgKnN0OyBpbnQgY250OwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi0vKiBkb2hleGR1bXAgKi8gewotICAgIGludCBpID0gMCwgaiA9IDAsIGsgPSAwOwotICAg IGNoYXIgdG1wWzhdOwotI2lmZGVmIE9TMgotICAgIGV4dGVybiBpbnQgU3lzSW5pdGVkOwotI2Vu ZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKCFkZWJsb2cpIHJldHVybigwKTsJCS8qIElmIG5vIGRl YnVnIGxvZywgZG9uJ3QuICovCi0gICAgaWYgKCFkYnB0cikgeyAgICAgICAgICAgICAgICAgICAg ICAgLyogQWxsb2NhdGUgbWVtb3J5IGJ1ZmZlciAqLwotICAgICAgICBkYnB0ciA9IG1hbGxvYyhE QlVGTCsxKTsgICAgICAgIC8qIFRoaXMgb25seSBoYXBwZW5zIG9uY2UgKi8KLSAgICAgICAgaWYg KCFkYnB0cikgewotICAgICAgICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgICAgIHpjbG9zZSha REZJTEUpOwotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0gICAgfQotCi0jaWZk ZWYgT1MyCi0gICAgaWYgKFN5c0luaXRlZCkgewotCWlmIChSZXF1ZXN0RGVidWdNdXRleCgzMDAw MCkpCi0JICAgIGdvdG8geGRlYnVnOwotICAgIH0KLSNlbHNlIC8qIE9TMiAqLwotICAgIGRlYmxv ZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXZlbnQgaW5maW5pdGUgcmVjdXJz aW9uICovCi0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAobXNnICE9IE5VTEwpIHsKLQlja21h a3htc2coZGJwdHIsCi0JCSAgREJVRkwsCi0JCSAgIkhFWERVTVA6ICIsCi0JCSAgKGNoYXIgKilt c2csCi0JCSAgIiAoIiwKLQkJICBja2l0b2EoY250KSwKLQkJICAiIGJ5dGVzKVxuIiwKLQkJICBO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCi0JCSApOwotICAgICAgICBpZiAoenNv dXQoWkRGSUxFLGRicHRyKSA8IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAg ICAgICB6Y2xvc2UoWkRGSUxFKTsKLQkgICAgZ290byB4ZGVidWc7Ci0gICAgICAgIH0KLSAgICB9 IGVsc2UgewotCWNrbWFrbXNnKGRicHRyLAotCQkgREJVRkwsCi0JCSAiSEVYRFVNUDogKCIsCi0J CSBja2l0b2EoY250KSwKLQkJICIgYnl0ZXMpXG4iLAotCQkgTlVMTAotCQkgKTsKLSAgICAgICAg enNvdXQoWkRGSUxFLGRicHRyKTsKLSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAw KSB7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7 Ci0JICAgIGdvdG8geGRlYnVnOwotICAgICAgICB9Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkg PCBjbnQ7IGkrKykgewotICAgICAgICBkYnB0clswXSA9ICdcMCc7Ci0gICAgICAgIGZvciAoaiA9 IDAgOyAoaiA8IDE2KTsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoKGkgKyBqKSA8IGNudCkKLQkg ICAgICBzcHJpbnRmKHRtcCwKLQkJICAgICAgIiVzJTAyeCAiLAotCQkgICAgICAoaiA9PSA4ID8g InwgIiA6ICIiKSwKLQkJICAgICAgKENIQVIpIHN0W2kgKyBqXQotCQkgICAgICApOwotICAgICAg ICAgICAgZWxzZQotCSAgICAgIHNwcmludGYodG1wLAotCQkgICAgICAiJXMgICAiLAotCQkgICAg ICAoaiA9PSA4ID8gInwgIiA6ICIiKQotCQkgICAgICApOwotICAgICAgICAgICAgY2tzdHJuY2F0 KGRicHRyLHRtcCxEQlVGTCsxKTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jYXQoZGJwdHIs IiAiLERCVUZMKzEpOwotICAgICAgICBmb3IgKGsgPSAwOyAoayA8IDE2KSAmJiAoKGkgKyBrKSA8 IGNudCk7IGsrKykgewotICAgICAgICAgICAgc3ByaW50Zih0bXAsCi0gICAgICAgICAgICAgICAg ICAgICIlcyVjIiwKLSAgICAgICAgICAgICAgICAgICAgKGsgPT0gOCA/ICIgIiA6ICIiKSwKLSAg ICAgICAgICAgICAgICAgICAgaXNwcmludChzdFtpICsga10pID8gc3RbaSArIGtdIDogJy4nCi0g ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBja3N0cm5jYXQoZGJwdHIsdG1wLERC VUZMKzEpOwotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNhdChkYnB0ciwiXG4iLERCVUZMKzEp OwotICAgICAgICBpICs9IGogLSAxOwotICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8 IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRGSUxF KTsKLQkgICAgZ290byB4ZGVidWc7Ci0gICAgICAgIH0KLSAgICB9IC8qIGVuZCBmb3IgKi8KLQot Ci0gIHhkZWJ1ZzoKLSNpZmRlZiBPUzIKLSAgICBpZiAoU3lzSW5pdGVkKQotICAgICAgUmVsZWFz ZURlYnVnTXV0ZXgoKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgIGRlYmxvZyA9IDE7Ci0jZW5kaWYg LyogT1MyICovCi0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIERFQlVHICovCi0KLS8qICBT ZXNzaW9uIExvZy4uLiAqLwotCi1pbnQgdHNzdGF0ZSA9IDA7Ci0KLVZPSUQKLSNpZmRlZiBPUzIK LWxvZ2NoYXIodW5zaWduZWQgc2hvcnQgYykKLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVmIENLX0FO U0lDCi1sb2djaGFyKGNoYXIgYykKLSNlbHNlCi1sb2djaGFyKGMpIGNoYXIgYzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotI2VuZGlmIC8qIE9TMiAqLwotLyogbG9nY2hhciAqLyB7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIExvZyBjaGFyYWN0ZXIgYyB0byBzZXNzaW9uIGxvZyAqLwotICAg IGV4dGVybiBpbnQgc2xvZ251bDsKLSAgICBpbnQgb2t0b2xvZyA9IDA7Ci0jaWZuZGVmIE5PTE9D QUwKLSAgICBpZiAoIXNlc2xvZykKLSAgICAgIHJldHVybjsKLQotICAgIGlmICgoc2Vzc2Z0ICE9 IFhZRlRfVCkgfHwgKAotI2lmZGVmIFVOSVgKLQkgYyAhPSAnXHInICYmCi0jZWxzZQotI2lmZGVm IGRhdGFnZW5lcmFsCi0JIGMgIT0gJ1xyJyAmJgotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0JIGMg IT0gJ1xyJyAmJgotI2Vsc2UKLSNpZmRlZiBBTUlHQQotCSBjICE9ICdccicgJiYKLSNlbHNlCi0j aWZkZWYgR0VNRE9TCi0JIGMgIT0gJ1xyJyAmJgotI2VuZGlmIC8qIEdFTURPUyAqLwotI2VuZGlm IC8qIEFNSUdBICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFs ICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2lmZGVmIE9TSwotCSBjICE9ICdcbicgJiYKLSNlbHNl Ci0jaWZkZWYgTUFDCi0JIGMgIT0gJ1xuJyAmJgotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8q IE9TSyAqLwotCSBjICE9IFhPTiAmJgotCSBjICE9IFhPRkYpKQotICAgICAgb2t0b2xvZyA9IDE7 Ci0gICAgaWYgKGMgPT0gJ1wwJyAmJiAhc2Vzc2Z0KQkJLyogTlVMIGluIHRleHQgbW9kZSAqLwot ICAgICAgaWYgKHNsb2dudWwpIG9rdG9sb2cgPSAxOwkJLyogb25seSBpZiBwYWRkaW5nICgyMDA5 LzEwLzIyKSAqLwotICAgIGlmICghb2t0b2xvZykKLSAgICAgIHJldHVybjsKLSAgICBpZiAoc2xv Z3RzKSB7CQkJLyogTG9nIGlzIHRpbWVzdGFtcGVkICovCi0JaWYgKHRzc3RhdGUgPT0gMCkgewkJ LyogU3RhdGUgPSBiZXR3ZWVuLWxpbmVzICovCi0JICAgIGNoYXIgKiBwOwkJCS8qIHpzdGltZSgp IHBvaW50ZXIgKi8KLQkgICAgY2hhciB0c1s0OF07CQkvKiB0aW1lc3RhbXAgYnVmZmVyICovCi0J ICAgIHp0aW1lKCZwKTsJCQkvKiBHZXQgYXNjdGltZSgpIHN0cmluZyAqLwotCSAgICBja3N0cm5j cHkodHMscCwzMik7CQkvKiBNYWtlIHNhZmUgY29weSAqLwotCSAgICBpZiAoenRtc2VjID4gLTFM KSB7CQkvKiBBZGQgbXNlY3MgaWYgd2UgaGF2ZSB0aGVtICovCi0JCXNwcmludGYoJnRzWzE5XSwi LiUwM2xkOiAiLHp0bXNlYyk7IC8qIFNBRkUgKi8KLQkgICAgfSBlbHNlIHsKLQkJdHNbMTldID0g JzonOwotCQl0c1syMF0gPSBTUDsKLQkJdHNbMjFdID0gTlVMOwotCSAgICB9Ci0JICAgIGlmICh6 c291dChaU0ZJTEUsJnRzWzExXSkgPCAwKQotCSAgICAgIGdvdG8geGxvZ2NoYXI7Ci0JfQotICAg IH0KLSAgICBpZiAoYyA9PSAnXG4nKQkJCS8qIEF0IGVuZCBvZiBsaW5lPyAqLwotICAgICAgdHNz dGF0ZSA9IDA7CQkJLyogeWVzICovCi0gICAgZWxzZQotICAgICAgdHNzdGF0ZSA9IDE7CQkJLyog bm8gKi8KLSAgICBpZiAoemNob3V0KFpTRklMRSwoQ0hBUikoYyAmIDB4RkYpKSA8IDApIC8qIExv ZyB0aGUgY2hhcmFjdGVyICovCi0gICAgICBnb3RvIHhsb2djaGFyOwotICAgIGlmICh0c3N0YXRl ID09IDAgJiYgc2xvZ251bCAhPSAwKSB7CS8qIE51bGwtdGVybWluYXRpbmcgbGluZXM/ICovCi0J aWYgKHpjaG91dChaU0ZJTEUsKENIQVIpMCkgPCAwKQkvKiBBZGQgYSBOVUwgKi8KLQkgIGdvdG8g eGxvZ2NoYXI7Ci0gICAgfQotICAgIHJldHVybjsKLQotICB4bG9nY2hhcjoKLSAgICBjb25vbGwo IiIpOwotICAgIGNvbm9sbCgiRVJST1IgV1JJVElORyBTRVNTSU9OIExPRywgTE9HIENMT1NFRCEi KTsKLSAgICBzZXRzZXNsb2coMCk7Ci0gICAgemNsb3NlKFpTRklMRSk7Ci0jZW5kaWYgLyogTk9M T0NBTCAqLwotfQotCi1WT0lECi1sb2dzdHIocywgbGVuKSBjaGFyICogczsgaW50IGxlbjsgeyAg ICAgLyogTG9nIHN0cmluZyB0byBzZXNzaW9uIGxvZyAqLwotI2lmbmRlZiBOT0xPQ0FMCi0gICAg aW50IG4gPSAwOwotICAgIGlmICghcykKLSAgICAgIHJldHVybjsKLSAgICB3aGlsZSAoc2VzbG9n ICYmIChuIDwgbGVuKSkKLSAgICAgIGxvZ2NoYXIoc1tuKytdKTsKLSNlbmRpZiAvKiBOT0xPQ0FM ICovCi19Ci0KLSNpZmRlZiBDS19DVVJTRVMKLWludAotY2tfcmVwYWludCgpIHsKLSAgICByZXBh aW50ID0gMTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZmRlZiBTVFJBVFVTCi0vKiBWT1MgaGFz IGN1cnNlcyBidXQgbm8gdGdldGVudCgpICovCi1pbnQKLXRnZXRlbnQoczEsIHMyKSBjaGFyICog czEsICogczI7IHsKLSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwotCi0j aWZkZWYgVk1TCi0jaWZkZWYgX19ERUNDCi1fUFJPVE9UWVAoaW50IHRnZXRlbnQsKGNoYXIgKiwg Y2hhciAqKSk7Ci0jZW5kaWYgLyogX19ERUNDICovCi0jZW5kaWYgLyogVk1TICovCi0KLS8qCi0g IFRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgd2F5cyB0byBkbyBmdWxsc2NyZWVuIG9uIFZNUy4K LSAgMS4gVXNlIHRoZSByZWFsIGN1cnNlcyBsaWJyYXJ5LCBWQVhDQ1VSU0UuCi0gIDIuIFVzZSBk by1pdC15b3Vyc2VsZiBjb2RlLgotICAzLiBVc2UgdGhlIFNjcmVlbiBNYW5hZ2VyLCBTTUckLgot Ci0gIE1ldGhvZCAxIGRvZXNuJ3Qgd29yayBxdWl0ZSByaWdodDsgeW91IGNhbid0IGNhbGwgZW5k d2luKCksIHNvIG9uY2UgeW91J3ZlCi0gIHN0YXJ0ZWQgY3Vyc2VzIG1vZGUsIHlvdSBjYW4gbmV2 ZXIgbGVhdmUuCi0KLSAgTWV0aG9kIDIgZG9lc24ndCBvcHRpbWl6ZSB0aGUgc2NyZWVuLCBhbmQg c28gbXVjaCBtb3JlIHRpbWUgaXMgc3BlbnQgaW4KLSAgc2NyZWVuIHdyaXRlcy4gIFRoaXMgYWN0 dWFsbHkgY2F1c2VzIGZpbGUgdHJhbnNmZXJzIHRvIGZhaWwgYmVjYXVzZSB0aGUKLSAgdHR5IGRl dmljZSBpbnB1dCBidWZmZXIgY2FuIGJlIG92ZXJydW4gd2hpbGUgdGhlIHNjcmVlbiBpcyBiZWlu ZyB1cGRhdGVkLAotICBlc3BlY2lhbGx5IG9uIGEgc2xvdyBNaWNyb1ZBWCB0aGF0IGhhcyBzbWFs bCB0eXBlYWhlYWQgYnVmZmVycy4KLQotICBJbiB0aGUgZm9sbG93aW5nICNpZmRlZiBibG9jaywg I2RlZmluZSBvbmUgb2YgdGhlbSBhbmQgI3VuZGVmIHRoZSBvdGhlciAyLgotCi0gIFNvIG5vdyBs ZXQncyB0cnkgbWV0aG9kIDMuLi4KLSovCi0jaWZkZWYgVk1TCi0jZGVmaW5lIENLX1NNRyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU2NyZWVuIE1hbmFnZXIgKi8KLSN1bmRlZiBNWUNVUlNF UyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEby1pdC15b3Vyc2VsZiAqLwotI3VuZGVmIFZN U0NVUlNFICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZBWENDVVJTRSBsaWJyYXJ5ICovCi0j ZW5kaWYgLyogVk1TICovCi0vKgotICBCdXQganVzdCBiZWZvcmUgTmV3IFllYXJzLCAyMDAwLCB0 aGUgU01HIGxpYnJhcnkgc2VlbWVkIHRvIGJyZWFrIG9uCi0gIGJvdGggVk1TIHN5c3RlbXMgd2Ug aGF2ZSBoZXJlIChhbiBBbHBoYSB3aXRoIFZNUyA3LjEgYW5kIGEgVkFYIHdpdGggNS41KS4KLSAg U28gYmFjayB0byBNWUNVUlNFUywgd2hpY2ggd29ya3MgZmluZS4KLSovCi0jaWZkZWYgVk1TCi0j dW5kZWYgQ0tfU01HCi0jZGVmaW5lIE1ZQ1VSU0VTCi0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRl ZiBNWUNVUlNFUwotI2RlZmluZSBzdGRzY3IgMAotI2lmZGVmIENLX1dSRUZSRVNICi0jdW5kZWYg Q0tfV1JFRlJFU0gKLSNlbmRpZiAvKiBDS19XUkVGUkVTSCAqLwotI2VuZGlmIC8qIE1ZQ1VSU0VT ICovCi0KLS8qICBTIEMgUiBFIEUgTiBDICAtLSAgU2NyZWVuIGRpc3BsYXkgZnVuY3Rpb24sIHVz ZXMgY3Vyc2VzICAqLwotCi0vKiBJZGVhIGZvciBjdXJzZXMgZGlzcGxheSBjb250cmlidXRlZCBi eSBDaHJpcyBQcmF0dCBvZiBBUFYgQmFrZXIsIFVLICovCi0KLS8qIEF2b2lkIGNvbmZpY3RzIHdp dGggY3Vyc2VzLmggKi8KLQotI2lmZGVmIFFOWAotLyogU2FtZSBhcyBja2Nhc2MuaCwgYnV0IGlu IGEgZGlmZmVyZW50IHJhZGl4Li4uICovCi0jaWZkZWYgRVNDCi0jdW5kZWYgRVNDCi0jZW5kaWYg LyogRVNDICovCi0jZW5kaWYgLyogUU5YICovCi0KLSNpZm5kZWYgTVlDVVJTRVMKLSN1bmRlZiBW T0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIHdhcyBkZWZpbmVkIGluIGNr Y2RlYi5oICovCi0jZW5kaWYgLyogTVlDVVJTRVMgKi8KLQotI3VuZGVmIEJTICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFRoZXNlIHdlcmUgZGVmaW5lZCBpbiBja2Nhc2MuaCAqLwot I3VuZGVmIENSCi0jdW5kZWYgTkwKLSN1bmRlZiBTTwotI2lmZGVmIFVTCi0jdW5kZWYgVVMKLSNl bmRpZgkvKiBVUyAqLwotI3VuZGVmIFNQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFVzZWQgaW4gbmN1cnNlcyAqLwotI2RlZmluZSBDSFJfU1AgMzIgICAgICAgICAgICAgICAgICAg ICAgIC8qIFVzZSB0aGlzIGluc3RlYWQgKi8KLQotI2lmZGVmIFZNUyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFZNUyBmdWxsc2NyZWVuIGRpc3BsYXkgKi8KLSNpZmRlZiBNWUNVUlNF UyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEby1pdC15b3Vyc2VsZiBtZXRob2QgKi8KLWV4 dGVybiBpbnQgaXN2dDUyOyAgICAgICAgICAgICAgICAgICAgICAvKiBGcm9tIENLVlRJTy5DICov Ci0jZGVmaW5lIHByaW50dyBwcmludGYKLSNlbHNlCi0jaWZkZWYgVk1TQ1VSU0UgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVk1TIGN1cnNlcyBsaWJyYXJ5IFZBWENDVVJTRSAqLwotI2luY2x1 ZGUgPGN1cnNlcy5oPgotLyogTm90ZTogU2NyZWVuIG1hbmFnZXIgZG9lc24ndCBuZWVkIGEgaGVh ZGVyIGZpbGUgKi8KLSNlbmRpZiAvKiBWTVNDVVJTRSAqLwotI2VuZGlmIC8qIE1ZQ1VSU0VTICov Ci0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IFZNUyAqLwot I2lmZGVmIE1ZQ1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvLWl0LXlvdXJzZWxm IG1ldGhvZCAqLwotI2RlZmluZSBpc3Z0NTIgMCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVz ZWQgYnkgT1MvMiwgVlQtMTAwL0FOU0kgYWx3YXlzICovCi0jaWZkZWYgQ0tYUFJJTlRGCi0jZGVm aW5lIHByaW50dyBja3hwcmludGYKLSNlbHNlIC8qIENLWFBSSU5URiAqLwotI2lmZGVmIEtVSQot I2RlZmluZSBwcmludHcgVnNjcm5wcmludHcKLSNlbHNlIC8qIEtVSSAqLwotI2RlZmluZSBwcmlu dHcgcHJpbnRmCi0jZW5kaWYgLyogS1VJICovCi0jZW5kaWYgLyogQ0tYUFJJTlRGICovCi0jZWxz ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHJlYWwgY3Vyc2VzICov Ci0jaWZkZWYgQ0tfTkNVUlNFUyAgICAgICAgICAgICAgICAgICAgICAgLyogb3IgbmN1cnNlcy4u LiAqLwotI2lmZGVmIENLWFBSSU5URiAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91ciBwcmlu dGYgbWFjcm8gY29uZmxpY3RzIHdpdGggKi8KLSN1bmRlZiBwcmludGYgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB1c2Ugb2YgInByaW50ZiIgaW4gbmN1cnNlcy5oICovCi0jZW5kaWYgLyog Q0tYUFJJTlRGICovCi0jaW5jbHVkZSA8bmN1cnNlcy5oPgotI2lmZGVmIENLWFBSSU5URgotI2Rl ZmluZSBwcmludGYgY2t4cHJpbnRmCi0jZW5kaWYgLyogQ0tYUFJJTlRGICovCi0jZWxzZSAgLyog Tm90IG5jdXJzZXMgKi8KLSNpZmRlZiBDS1hQUklOVEYgICAgICAgICAgICAgICAgICAgICAgICAv KiBPdXIgcHJpbnRmIG1hY3JvIGNvbmZsaWN0cyB3aXRoICovCi0jdW5kZWYgcHJpbnRmICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdXNlIG9mICJwcmludGYiIGluIGN1cnNlcy5oICovCi0j ZW5kaWYgLyogQ0tYUFJJTlRGICovCi0jaWZkZWYgTV9YRU5JWAkJCQkvKiBTQ08gWEVOSVguLi4g Ki8KLSNpZmRlZiBNX1RFUk1DQVAKLSN1bmRlZiBNX1RFUk1DQVAKLSNlbmRpZiAvKiBNX1RFUk1D QVAgKi8KLSNpZm5kZWYgTV9URVJNSU5GTwotI2RlZmluZSBNX1RFUk1JTkZPCi0jZW5kaWYgLyog TV9URVJNSU5GTyAqLwotI2VuZGlmIC8qIE1fWEVOSVggKi8KLSNpZmRlZiBSVEFJWAotI3VuZGVm IE5MUwkJCQkvKiBBdm9pZCAncmVkZWNsYXJhdGlvbiBvZiBmcmVlJy4gKi8KLSNlbmRpZiAvKiBS VEFJWCAqLwotI2luY2x1ZGUgPGN1cnNlcy5oPgotI2lmZGVmIENLWFBSSU5URgotI2RlZmluZSBw cmludGYgY2t4cHJpbnRmCi0jZW5kaWYgLyogQ0tYUFJJTlRGICovCi0jZW5kaWYgLyogQ0tfTkNV UlNFUyAqLwotI2VuZGlmIC8qIE1ZQ1VSU0VTICovCi0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRl ZiBCVUc5OTkKLV9QUk9UT1RZUChpbnQgdGdldGVudCwoY2hhciAqLCBjaGFyICopKTsKLV9QUk9U T1RZUChjaGFyICp0Z2V0c3RyLChjaGFyICosIGNoYXIgKiopKTsKLV9QUk9UT1RZUChpbnQgdHB1 dHMsKGNoYXIgKiwgaW50LCBpbnQgKCopKCkpKTsKLV9QUk9UT1RZUChjaGFyICp0Z290bywoY29u c3QgY2hhciAqLCBpbnQsIGludCkpOwotI2VuZGlmCS8qIEJVRzk5OSAqLwotCi0jZW5kaWYgLyog Q0tfQ1VSU0VTICovCi0KLS8qICBGIFggRCBJIE4gSSBUICAtLSAgRmlsZSBYZmVyIERpc3BsYXkg SW5pdGlhbGl6YXRpb24gICovCi0KLSNpZmRlZiBDS19DVVJTRVMKLSNpZm5kZWYgTVlDVVJTRVMK LSNpZm5kZWYgQ0tfU01HCi1zdGF0aWMKLSNpZmRlZiBDS19BTlNJQwotLyogQ2FuJ3QgdXNlIFZP SUQgYmVjYXVzZSBvZiBjdXJzZXMuaCAqLwotdm9pZAotY2tfdGVybXNldChpbnQpOwotI2Vsc2UK LWNrX3Rlcm1zZXQoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotI2VuZGlmIC8qIENLX1NNRyAq LwotI2VuZGlmIC8qIE1ZQ1VSU0VTICovCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0KLSNpZmRl ZiBOT1RFUk1DQVAKLXN0YXRpYyBpbnQgbm90ZXJtY2FwID0gMTsKLSNlbHNlCi1zdGF0aWMgaW50 IG5vdGVybWNhcCA9IDA7Ci0jZW5kaWYgLyogTk9URVJNQ0FQICovCi0KLSNpZm5kZWYgTk9ESVNQ TEFZCi1DS1ZPSUQKLWZ4ZGluaXQoeGRpc3BsYSkgaW50IHhkaXNwbGE7IHsKLSNpZm5kZWYgQ09I RVJFTlQKLSNpZm5kZWYgT1MyCi0jaWZuZGVmIFNUUkFUVVMKLSAgICBjaGFyICpzOwotICAgIGlu dCB4LCBkdW1teTsKLQotICAgIGRlYnVnKEYxMDEsImZ4ZGluaXQgeGRpc3BsYSIsIiIseGRpc3Bs YSk7Ci0gICAgZGVidWcoRjEwMSwiZnhkaW5pdCBmeGRfaW5pdGVkIiwiIixmeGRfaW5pdGVkKTsK LQotI2lmZGVmIElLU0QKLSNpZm5kZWYgTk9YRkVSCi0gICAgLyogTm8gY3Vyc2VzIGZvciBJS1NE ICovCi0gICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgIGZkaXNwbGEgPSBYWUZEX047Ci0gICAg ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGZ4ZF9pbml0ZWQpICAgICAgICAgICAgICAgICAg ICAgLyogT25seSBkbyB0aGlzIG9uY2UgKi8KLSAgICAgIHJldHVybjsKLSNlbmRpZiAvKiBOT1hG RVIgKi8KLSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICBpZiAoeGRpc3BsYSA9PSBYWUZEX1IgfHwg eGRpc3BsYSA9PSBYWUZEX1MgfHwgeGRpc3BsYSA9PSBYWUZEX0IpIHsKLQlpZiAoeGZybXNnKSB7 Ci0JICAgIHByaW50ZigiJXNcbiIseGZybXNnKTsKLQkgICAgbWFrZXN0cigmeGZybXNnLE5VTEwp OwotCX0KLSAgICB9Ci0KLSNpZmRlZiBDS19DVVJTRVMKLSNpZmRlZiBWTVMKLSAgICAvKiBGb3Jj ZSBCUklFRiBpbiBCYXRjaCBsb2dzICovCi0gICAgaWYgKGJhdGNoICYmICh4ZGlzcGxhID09IFhZ RkRfQyB8fCB4ZGlzcGxhID09IFhZRkRfUykpCi0gICAgICB4ZGlzcGxhID0gWFlGRF9COwotI2Vs c2UKLSAgICBpZiAoeGRpc3BsYSA9PSBYWUZEX0MgfHwgeGRpc3BsYSA9PSA5OTk5KSB7Ci0KLSNp ZmRlZiBEWU5BTUlDCi0gICAgICAgIGlmICghdHJtYnVmKSB7Ci0vKgotICBBbGxvY2F0ZSB0Z2V0 ZW50KCkgYnVmZmVyLiAgTWFrZSBpdCBiaWcgLS0gc29tZSB0ZXJtY2FwcyBjYW4gYmUgaHVnZTsK LSAgdGdldGVudCgpIG1lcnJpbHkgd3JpdGVzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBj YXVzaW5nIGNvcmUgZHVtcHMKLSAgb3Igd29yc2UuCi0qLwotICAgICAgICAgICAgdHJtYnVmID0g KGNoYXIgKiltYWxsb2MoVFJNQlVGTCk7Ci0gICAgICAgICAgICBpZiAoIXRybWJ1ZikgewotICAg ICAgICAgICAgICAgIG5vdGVybWNhcCA9IDE7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwi ZnhkaW5pdCBtYWxsb2MgdHJtYnVmIiwiRkFJTEVEIixUUk1CVUZMKTsKLSAgICAgICAgICAgICAg ICBmZGlzcGxhID0gWFlGRF9TOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg IH0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJmeGRpbml0IG1hbGxv YyB0cm1idWYiLCJPSyIsVFJNQlVGTCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMDAxLCJmeGRpbml0 IHRybWJ1ZiIsIiIsdHJtYnVmKTsKLSAgICAgICAgICAgIG1lbXNldCh0cm1idWYsJ1wwJywoc2l6 ZV90KVRSTUJVRkwpOwotICAgICAgICAgICAgZGVidWcoRjEwMCwiZnhkaW5pdCBtZW1zZXQgT0si LCIiLDApOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgfQotI2VuZGlmIC8qIERZTkFN SUMgKi8KLQotICAgICAgICBkZWJ1ZyhGMTAwLCJmeGRpbml0IGJlZm9yZSBnZXRlbnYoVEVSTSki LCIiLDApOwotICAgICAgICBzID0gZ2V0ZW52KCJURVJNIik7Ci0gICAgICAgIGRlYnVnKEYxMTAs ImZ4ZGluaXQgYWZ0ZXIgZ2V0ZW52KFRFUk0pIixzLDApOwotICAgICAgICBpZiAoIXMpIHMgPSAi IjsKLSAgICAgICAgaWYgKCpzKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmeGRpbml0IGJl Zm9yZSB0Z2V0ZW50KCkiLHMsMCk7Ci0gICAgICAgICAgICB4ID0gdGdldGVudCh0cm1idWYscyk7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJmeGRpbml0IHRnZXRlbnQiLHMseCk7Ci0gICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgICAgIG5vdGVybWNhcCA9IDE7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmeGRpbml0IFRFUk0gbnVsbCAtIG5vIHRnZXRlbnQi LHMsMCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHggPCAxICYmICFxdWlldCAmJiAhYmFja2dy ZAotI2lmZGVmIFZNUwotICAgICAgICAgICAgJiYgIWJhdGNoCi0jZW5kaWYgLyogVk1TICovCi0g ICAgICAgICAgICApIHsKLSAgICAgICAgICAgIHByaW50ZigiV2FybmluZzogdGVybWluYWwgdHlw ZSB1bmtub3duOiBcIiVzXCJcbiIscyk7Ci0jaWZkZWYgQ09NTUVOVAotCSAgICAvKiBDb25mdXNp bmcgLSBub2JvZHkga25vd3Mgd2hhdCB0aGlzIG1lYW5zICovCi0gICAgICAgICAgICBwcmludGYo IlNDUkVFTiBjb21tYW5kIHdpbGwgdXNlIEFOU0kgc2VxdWVuY2VzLlxuIik7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgICAgICAgICAgaWYgKGxvY2FsKQotICAgICAgICAgICAgICBwcmludGYo IkZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5IGRpc2FibGVkLlxuIik7Ci0gICAgICAg ICAgICBmZGlzcGxhID0gWFlGRF9TOwotICAgICAgICB9Ci0jaWZuZGVmIE1ZQ1VSU0VTCi0jaWZu ZGVmIENLX1NNRwotICAgICAgICBja190ZXJtc2V0KHgpOwotI2VuZGlmIC8qIENLX1NNRyAqLwot I2VuZGlmIC8qIE1ZQ1VSU0VTICovCi0gICAgICAgIGZ4ZF9pbml0ZWQgPSAxOwotICAgIH0KLSNl bmRpZiAvKiBDS19DVVJTRVMgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBTVFJBVFVT ICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLX0KLSNlbmRpZiAv KiBOT0RJU1BMQVkgKi8KLQotI2lmZGVmIENLX0NVUlNFUwotI2lmZGVmIENLX1NNRwotLyoKLSAg TG9uZyBzZWN0aW9uIGZvciBTY3JlZW4gTWFuYWdlciBzdGFydHMgaGVyZS4uLgotICBCeSBXaWxs aWFtIEJhZGVyLgotKi8KLSNpbmNsdWRlICJja3Z2bXMuaCIKLSNpZmRlZiBPTERfVk1TCi0jaW5j bHVkZSA8c21nZGVmLmg+ICAgICAgICAgICAgICAgICAgICAgLyogdXNlIHRoaXMgb24gVkFYIEMg Mi40ICovCi0vKiAjaW5jbHVkZSA8c21nbXNnLmg+ICovCi0jZWxzZQotI2luY2x1ZGUgPHNtZyRy b3V0aW5lcy5oPiAgICAgICAgICAgICAgIC8qIE1hcnRpbiBaaW5zZXIgKi8KLSNlbmRpZiAvKiBP TERfVk1TICovCi0KLWV4dGVybiB1bnNpZ25lZCBpbnQgdm1zX3N0YXR1czsgICAgIC8qIFVzZWQg Zm9yIHN5c3RlbSBzZXJ2aWNlIHJldHVybiBzdGF0dXMgKi8KLQotc3RhdGljIGxvbmcgc21nX3Bh c3RlYm9hcmRfaWQgPSAtMTsgICAgIC8qIHBhc3RlYm9hcmQgaWRlbnRpZmllciAqLwotc3RhdGlj IGxvbmcgc21nX2Rpc3BsYXlfaWQgPSAtMTsgICAgICAgIC8qIGRpc3BsYXkgaWRlbnRpZmllciAq Lwotc3RhdGljIGludCBzbWdfb3BlbiA9IDA7ICAgICAgICAgICAgICAgIC8qIGZsYWcgaWYgc21n IGN1cnJlbnQgb3BlbiAqLwotc3RhdGljIGludCBzbWdfaW5pdGVkID0gMDsgICAgICAgICAgICAg IC8qIGZsYWcgaWYgc21nIGluaXRpYWxpemVkICovCi0KLSNpZmRlZiBDT01NRU5UCi0jZGVmaW5l IGNscnRvZW9sKCkgICAgICBTTUckRVJBU0VfTElORSgmc21nX2Rpc3BsYXlfaWQsIDAsIDApCi0K LSNkZWZpbmUgY2xlYXIoKSAgICAgICAgIFNNRyRFUkFTRV9ESVNQTEFZKCZzbWdfZGlzcGxheV9p ZCwgMCwgMCwgMCwgMCkKLQotI2RlZmluZSB0b3VjaHdpbihzY3IpICAgU01HJFJFUEFJTlRfU0NS RUVOKCZzbWdfcGFzdGVib2FyZF9pZCkKLQotI2Vsc2UgIC8qIE5vdCBDT01NRU5UICovCi0KLSNk ZWZpbmUgY2xydG9lb2woKSAgICAgIHNtZyRlcmFzZV9saW5lKCZzbWdfZGlzcGxheV9pZCwgMCwg MCkKLQotI2RlZmluZSBjbGVhcigpICAgICAgICAgc21nJGVyYXNlX2Rpc3BsYXkoJnNtZ19kaXNw bGF5X2lkLCAwLCAwLCAwLCAwKQotCi0jZGVmaW5lIHRvdWNod2luKHNjcikgICBzbWckcmVwYWlu dF9zY3JlZW4oJnNtZ19wYXN0ZWJvYXJkX2lkKQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2Rl ZmluZSBjbGVhcm9rKGN1cnNjcixvaykgICAgICAgICAgICAgIC8qIExldCB3cmVmcmVzaCgpIGRv IHRoZSB3b3JrICovCi0KLSNkZWZpbmUgd3JlZnJlc2goY3Vyc3JjKSB0b3VjaHdpbihzY3IpCi0K LXN0YXRpYyB2b2lkCi1tb3ZlKHJvdywgY29sKSBpbnQgcm93LCBjb2w7IHsKLSAgICAvKiBDaGFu Z2UgZnJvbSAwLWJhc2VkIGZvciBjdXJzZXMgdG8gMS1iYXNlZCBmb3IgU01HICovCi0gICAgaWYg KCFzbWdfb3BlbikKLSAgICAgIHJldHVybjsKLSAgICArK3JvdzsgKytjb2w7Ci0gICAgZGVidWco RjExMSwiVk1TIHNtZyBtb3ZlIixja2l0b2Eocm93KSxjb2wpOwotI2lmZGVmIENPTU1FTlQgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE1hcnRpbiBaaW5zZXIgKi8KLSAgICBDSEVDS19FUlIo Im1vdmU6IHNtZyRzZXRfY3Vyc29yX2FicyIsCi0gICAgICAgICAgICAgIFNNRyRTRVRfQ1VSU09S X0FCUygmc21nX2Rpc3BsYXlfaWQsICZyb3csICZjb2wpKTsKLSNlbHNlCi0gICAgQ0hFQ0tfRVJS KCJtb3ZlOiBzbWckc2V0X2N1cnNvcl9hYnMiLAotICAgICAgICAgICAgICBzbWckc2V0X2N1cnNv cl9hYnMoJnNtZ19kaXNwbGF5X2lkLCAmcm93LCAmY29sKSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgbW92ZSB2bXNfc3RhdHVzIiwiIix2bXNfc3RhdHVz KTsKLX0KLQotI2lmZGVmIFZNU19WNDAKLSNkZWZpbmUgT0xEX1ZNUwotI2VuZGlmIC8qIFZNU19W NDAgKi8KLSNpZmRlZiBWTVNfVjQyCi0jZGVmaW5lIE9MRF9WTVMKLSNlbmRpZiAvKiBWTVNfVjQy ICovCi0jaWZkZWYgVk1TX1Y0NAotI2RlZmluZSBPTERfVk1TCi0jZW5kaWYgLyogVk1TX1Y0NCAq LwotCi1zdGF0aWMgaW50Ci1pbml0c2NyKCkgewotICAgIGludCByb3dzID0gMjQsIGNvbHMgPSA4 MDsKLSAgICBpbnQgcm93ID0gMSwgY29sID0gMTsKLQotICAgIGRlYnVnKEYxMDEsIlZNUyBpbml0 c2NyIHNtZ19wYXN0ZWJvYXJkX2lkIEEiLCIiLHNtZ19wYXN0ZWJvYXJkX2lkKTsKLQotICAgIGlm IChzbWdfcGFzdGVib2FyZF9pZCA9PSAtMSkgeyAvKiBPcGVuIHRoZSBzY3JlZW4gKi8KLSNpZmRl ZiBPTERfVk1TICAgICAgICAgICAgICAgICAgICAgLyogTm90ZTogUm91dGluZSBjYWxscyBsb3dl cmNhc2VkIDkvOTYgKi8KLSAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckY3JlYXRlX3Bh c3RlYm9hcmQiLAotICAgICAgICAgICAgICAgICAgc21nJGNyZWF0ZV9wYXN0ZWJvYXJkKCZzbWdf cGFzdGVib2FyZF9pZCwgMCwgMCwgMCwgMCkpOwotI2Vsc2UKLSAgICAgICAgLyogRm9yIFZNUyBW NSwgbm90IHRlc3RlZCAqLwotICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRjcmVhdGVf cGFzdGVib2FyZCIsCi0gICAgICAgICAgICAgICAgICBzbWckY3JlYXRlX3Bhc3RlYm9hcmQoJnNt Z19wYXN0ZWJvYXJkX2lkLCAwLCAwLCAwLCAwLCAwKSk7Ci0jZW5kaWYgLyogT0xEX1ZNUyAqLwot ICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWdfcGFzdGVib2FyZF9pZCBCIiwi IixzbWdfcGFzdGVib2FyZF9pZCk7Ci0gICAgaWYgKHNtZ19wYXN0ZWJvYXJkX2lkID09IC0xKSB7 Ci0JcHJpbnRmKCI/RXJyb3IgaW5pdGlhbGl6aW5nIGZ1bGxzY3JlZW4gZGlzcGxheVxuIik7Ci0J ZmRpc3BsYSA9IFhZRkRfUzsKLQlkcHlpbml0KCk7Ci0JcmV0dXJuKDApOwotICAgIH0KLSAgICBk ZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWdfZGlzcGxheV9pZCIsIiIsc21nX2Rpc3BsYXlfaWQp OwotICAgIGlmIChzbWdfZGlzcGxheV9pZCA9PSAtMSkgeyAgICAgICAgIC8qIENyZWF0ZSBhIGRp c3BsYXkgd2luZG93ICovCi0KLSNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBNYXJ0aW4gWmluc2VyICovCi0gICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJGNy ZWF0ZV92aXJ0dWFsX2Rpc3BsYXkiLAotICAgICAgICAgICAgICAgICAgU01HJENSRUFURV9WSVJU VUFMX0RJU1BMQVkoJnJvd3MsICZjb2xzLCAmc21nX2Rpc3BsYXlfaWQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwKSk7Ci0KLSAgICAgICAgLyog Q29ubmVjdCB0aGUgZGlzcGxheSB3aW5kb3cgdG8gdGhlIHNjcmVlbiAqLwotICAgICAgICBDSEVD S19FUlIoImluaXRzY3I6IHNtZyRwYXN0ZV92aXJ0dWFsX2Rpc3BsYXkiLAotICAgICAgICAgICAg ICAgICAgU01HJFBBU1RFX1ZJUlRVQUxfRElTUExBWSgmc21nX2Rpc3BsYXlfaWQsJnNtZ19wYXN0 ZWJvYXJkX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm cm93LCZjb2wpKTsKLSNlbHNlCi0gICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJGNyZWF0 ZV92aXJ0dWFsX2Rpc3BsYXkiLAotICAgICAgICAgICAgICAgICAgc21nJGNyZWF0ZV92aXJ0dWFs X2Rpc3BsYXkoJnJvd3MsICZjb2xzLCAmc21nX2Rpc3BsYXlfaWQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwKSk7Ci0KLSAgICAgICAgLyogQ29u bmVjdCB0aGUgZGlzcGxheSB3aW5kb3cgdG8gdGhlIHNjcmVlbiAqLwotICAgICAgICBDSEVDS19F UlIoImluaXRzY3I6IHNtZyRwYXN0ZV92aXJ0dWFsX2Rpc3BsYXkiLAotICAgICAgICAgICAgICAg ICAgc21nJHBhc3RlX3ZpcnR1YWxfZGlzcGxheSgmc21nX2Rpc3BsYXlfaWQsJnNtZ19wYXN0ZWJv YXJkX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm93 LCZjb2wpKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotICAgIGRlYnVnKEYxMDEsIlZN UyBpbml0c2NyIHNtZ19vcGVuIEEiLCIiLHNtZ19vcGVuKTsKLSAgICBpZiAoIXNtZ19vcGVuKSB7 ICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBhIGJhdGNoIHVwZGF0ZSAqLwotICAgICAgICBz bWdfb3BlbiA9IDE7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6 IHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSIsCi0gICAgICAgICAgICAgICAgICBTTUckQkVH SU5fUEFTVEVCT0FSRF9VUERBVEUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7Ci0jZWxzZQotICAgICAg ICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSIsCi0gICAg ICAgICAgICAgICAgICBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUoJnNtZ19wYXN0ZWJvYXJk X2lkKSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCWRlYnVnKEYxMDEsIlZNUyBpbml0c2NyIHNt ZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSIsIiIsdm1zX3N0YXR1cyk7Ci0gICAgfQotICAgIGRl YnVnKEYxMDEsIlZNUyBpbml0c2NyIHNtZ19vcGVuIEIiLCIiLHNtZ19vcGVuKTsKLSAgICBzbWdf aW5pdGVkID0gMTsKLSAgICByZXR1cm4oMSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZWZyZXNoKCkg ewotICAgIGRlYnVnKEYxMDEsInJlZnJlc2ggc21nX3Bhc3RlYm9hcmRfaWQiLCIiLHNtZ19wYXN0 ZWJvYXJkX2lkKTsKLQotICAgIGlmIChzbWdfb3BlbiA9PSAwIHx8IHNtZ19wYXN0ZWJvYXJkX2lk ID09IC0xKQotICAgICAgcmV0dXJuOwotCi0jaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTWFydGluIFppbnNlciAqLwotICAgIENIRUNLX0VSUigicmVmcmVzaDogc21n JGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSIsCi0gICAgICAgICAgICAgIFNNRyRFTkRfUEFTVEVCT0FS RF9VUERBVEUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7Ci0gICAgQ0hFQ0tfRVJSKCJyZWZyZXNoOiBz bWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUiLAotICAgICAgICAgICAgICBTTUckQkVHSU5fUEFT VEVCT0FSRF9VUERBVEUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7Ci0jZWxzZQotICAgIENIRUNLX0VS UigicmVmcmVzaDogc21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSIsCi0gICAgICAgICAgICAgIHNt ZyRlbmRfcGFzdGVib2FyZF91cGRhdGUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7Ci0gICAgQ0hFQ0tf RVJSKCJyZWZyZXNoOiBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUiLAotICAgICAgICAgICAg ICBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotfQotCi1zdGF0aWMgdm9pZAotZW5kd2luKCkgewotICAgIGlmICgh c21nX29wZW4pCi0gICAgICByZXR1cm47Ci0KLSAgICBzbWdfb3BlbiA9IDA7Ci0KLSNpZmRlZiBD T01NRU5UCi0gICAgQ0hFQ0tfRVJSKCJlbmR3aW46IHNtZyRlbmRfcGFzdGVib2FyZF91cGRhdGUi LAotICAgICAgICAgICAgICBTTUckRU5EX1BBU1RFQk9BUkRfVVBEQVRFKCZzbWdfcGFzdGVib2Fy ZF9pZCkpOwotI2Vsc2UKLSAgICBDSEVDS19FUlIoImVuZHdpbjogc21nJGVuZF9wYXN0ZWJvYXJk X3VwZGF0ZSIsCi0gICAgICAgICAgICAgIHNtZyRlbmRfcGFzdGVib2FyZF91cGRhdGUoJnNtZ19w YXN0ZWJvYXJkX2lkKSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgbW92ZSgyMiwgMCk7 Ci0KLSNpZmRlZiBDT01NRU5UCi0vKgotICBUaGVzZSBjYWxscyBjbGVhciB0aGUgc2NyZWVuLgot ICAoY29udmVydCByb3V0aW5lIGNhbGxzIHRvIGxvd2VyY2FzZSAtIE1hcnRpbiBaaW5zZXIpCi0q LwotICAgIENIRUNLX0VSUigiZW5kd2luOiBzbWckZGVsZXRlX3ZpcnR1YWxfZGlzcGxheSIsCi0g ICAgICAgICAgICAgIFNNRyRERUxFVEVfVklSVFVBTF9ESVNQTEFZKCZzbWdfZGlzcGxheV9pZCkp OwotICAgIHNtZ19kaXNwbGF5X2lkID0gLTE7Ci0KLSAgICBDSEVDS19FUlIoImVuZHdpbjogc21n JGRlbGV0ZV9wYXN0ZWJvYXJkIiwKLSAgICAgICAgICAgICAgU01HJERFTEVURV9QQVNURUJPQVJE KCZzbWdfcGFzdGVib2FyZF9pZCwgMCkpOwotICAgIHNtZ19wYXN0ZWJvYXJkX2lkID0gLTE7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotfQotCi0jaWZkZWYgQ09NTUVOVAotLyogREVDQyA2LjIgc2Ny ZWFtcyBibG9vZHkgbXVyZGVyIGFib3V0IHByaW50dyAoIm5vdCBlbm91Z2ggYXJncyIpICovCi0v KiBidXQgYWRkaW5nIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlIG9ubHkgbWFrZXMgaXQgaG9sbGVy IGxvdWRlci4gKi8KLSNpZmRlZiBfX0RFQ0MKLS8qICJ2YXJhcmdzIiBwcm90b3R5cGUgZm9yIHBy aW50dyAqLwotX1BST1RPVFlQKHN0YXRpYyBpbnQgcHJpbnR3LChjaGFyICosIC4uLikpOwotI2Vu ZGlmIC8qIF9fREVDQyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIF9fREVDQwot I2luY2x1ZGUgPHN0ZGFyZy5oPgotX1BST1RPVFlQKHN0YXRpYyB2b2lkIHByaW50dywoY2hhciAq LCAuLi4pKTsKLXN0YXRpYyB2b2lkCi1wcmludHcoY2hhciAqc3RyLC4uLikgewotICAgIGNoYXIg YnVmWzI1NV07Ci0gICAgdmFfbGlzdCBhcDsKLSAgICAkREVTQ1JJUFRPUih0ZXh0X2RzYywgMCk7 Ci0gICAgdGV4dF9kc2MuZHNjJGFfcG9pbnRlcj1idWY7Ci0gICAgaWYgKCFzbWdfb3BlbikKLSAg ICAgIHJldHVybjsKLSAgICB2YV9zdGFydChhcCxzdHIpOwotICAgIHRleHRfZHNjLmRzYyR3X2xl bmd0aCA9IHZzcHJpbnRmKGJ1Ziwgc3RyLCBhcCk7Ci0gICAgdmFfZW5kKGFwKTsKLSAgICBDSEVD S19FUlIoInByaW50dzogc21nJHB1dF9jaGFycyIsCi0gICAgICAgICAgICAgIHNtZyRwdXRfY2hh cnMoJnNtZ19kaXNwbGF5X2lkLCAmdGV4dF9kc2MsIDAsIDAsIDAsIDAsIDApKTsKLX0KLSNlbHNl Ci1zdGF0aWMgdm9pZAotcHJpbnR3KHN0ciwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4 KQotICAgIGNoYXIgKnN0cjsKLSAgICBsb25nIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBh ODsKLS8qIHByaW50dyAqLyB7Ci0gICAgY2hhciBidWZbMjU1XTsKLSAgICAkREVTQ1JJUFRPUih0 ZXh0X2RzYywgMCk7Ci0gICAgaWYgKCFzbWdfb3BlbikKLSAgICAgIHJldHVybjsKLSAgICB0ZXh0 X2RzYy5kc2MkYV9wb2ludGVyPWJ1ZjsKLSAgICB0ZXh0X2RzYy5kc2Mkd19sZW5ndGggPSBzcHJp bnRmKGJ1Ziwgc3RyLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpOwotICAgIENIRUNL X0VSUigicHJpbnR3OiBzbWckcHV0X2NoYXJzIiwKLSAgICAgICAgICAgICAgc21nJHB1dF9jaGFy cygmc21nX2Rpc3BsYXlfaWQsICZ0ZXh0X2RzYywgMCwgMCwgMCwgMCwgMCkpOwotfQotI2VuZGlm IC8qIF9fREVDQyAqLwotCi0jZGVmaW5lIENLX0NVUlBPUwotaW50Ci1ja19jdXJwb3Mocm93LCBj b2wpIHsKLSAgICBkZWJ1ZyhGMTExLCJWTVMgc21nIGNrX2N1cnBvcyIsY2tpdG9hKHJvdyksY29s KTsKLSAgICBpZiAoIXNtZ19pbml0ZWQgfHwgIXNtZ19vcGVuKSB7Ci0gICAgICAgIGluaXRzY3Io KTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiVk1TIHNtZyBjdXJwb3Mgc21nX29wZW4iLCIiLHNt Z19vcGVuKTsKLSAgICBpZiAoIXNtZ19vcGVuKQotICAgICAgcmV0dXJuKDApOwotICAgIGRlYnVn KEYxMTEsIlZNUyBzbWcgY2tfY3VycG9zIixja2l0b2Eocm93LTEpLGNvbC0xKTsKLSAgICBtb3Zl KHJvdyAtIDEsIGNvbCAtIDEpOyAgICAgICAgICAgICAvKiBTTUcgaXMgMC1iYXNlZCAqLwotICAg IHJlZnJlc2goKTsKLSAgICAvKiBlbmR3aW4oKTsgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLWlu dAotY2tfY2xzKCkgewotICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgY2tfY2xzIHNtZ19pbml0ZWQi LCIiLHNtZ19pbml0ZWQpOwotICAgIGlmICghc21nX2luaXRlZCB8fCAhc21nX29wZW4pIHsKLSAg ICAgICAgaW5pdHNjcigpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIGNrX2NscyBz bWdfb3BlbiIsIiIsc21nX29wZW4pOwotICAgIGlmICghc21nX29wZW4pCi0gICAgICByZXR1cm4o MCk7Ci0gICAgY2xlYXIoKTsKLSAgICByZWZyZXNoKCk7Ci0gICAgLyogZW5kd2luKCk7ICovCi0g ICAgcmV0dXJuKDApOwotfQotCi1pbnQKLWNrX2NsZW9sKCkgewotICAgIGRlYnVnKEYxMDEsIlZN UyBzbWcgY2tfY2xlb2wgc21nX2luaXRlZCIsIiIsc21nX2luaXRlZCk7Ci0gICAgaWYgKCFzbWdf aW5pdGVkIHx8ICFzbWdfb3BlbikgewotICAgICAgICBpbml0c2NyKCk7Ci0gICAgfQotICAgIGRl YnVnKEYxMDEsIlZNUyBzbWcgY2tfY2xlb2wgc21nX29wZW4iLCIiLHNtZ19vcGVuKTsKLSAgICBp ZiAoIXNtZ19vcGVuKQotICAgICAgcmV0dXJuKDApOwotICAgIGNscnRvZW9sKCk7Ci0gICAgcmVm cmVzaCgpOwotICAgIC8qIGVuZHdpbigpOyAqLwotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAv KiBDS19TTUcgKi8KLQotI2lmZGVmIE1ZQ1VSU0VTCi0vKgotICBEby1pdC15b3Vyc2VsZiBjdXJz ZXMgaW1wbGVtZW50YXRpb24gZm9yIFZNUywgT1MvMiBhbmQgb3RoZXIgQU5TSS9WVC0xMDAncy4K LSAgU3VwcG9ydHMgb25seSB0aGUgVlQ1MiBhbmQgVlQxeHggKGFuZCBsYXRlciBWVDJ4eC8zeHgv NHh4KSB0ZXJtaW5hbHMuCi0gIEJ5IFRlcnJ5IEtlbm5lZHksIFN0IFBldGVycyBDb2xsZWdlLgot Ci0gIEZpcnN0LCBzb21lIHN0dWZmIHdlIGNhbiBqdXN0IGlnbm9yZToKLSovCi0KLXN0YXRpYyBp bnQKLXRvdWNod2luKHgpIGludCB4OyB7Ci0gICAgcmV0dXJuKDApOwotfQotc3RhdGljIGludAot aW5pdHNjcigpIHsKLSAgICByZXR1cm4oMCk7Ci19Ci1zdGF0aWMgaW50Ci1yZWZyZXNoKCkgewot ICAgIHJldHVybigwKTsKLX0KLXN0YXRpYyBpbnQKLWVuZHdpbigpIHsKLSAgICByZXR1cm4oMCk7 Ci19Ci0KLS8qCi0gKiBOb3csIHNvbWUgc3R1ZmYgd2UgbmVlZCB0byBkbzoKLSAqLwotCi1fUFJP VE9UWVAoIGludCBtb3ZlLCAoaW50LCBpbnQpICk7Ci0jaWZuZGVmIE9TMgotaW50Ci1tb3ZlKHJv dywgY29sKSBpbnQgcm93LCBjb2w7IHsKLSAgICBpZiAoaXN2dDUyKQotICAgICAgcHJpbnRmKCJc MDMzWSVjJWMiLCByb3cgKyAwMzcsIGNvbCArIDAzNyk7Ci0gICAgZWxzZQotICAgICAgcHJpbnRm KCJcMDMzWyVkOyVkSCIsIHJvdyArIDEsIGNvbCArIDEpOwotICAgIHJldHVybigwKTsKLX0KLQot aW50Ci1jbGVhcigpIHsKLSAgICBtb3ZlKDAsMCk7Ci0gICAgaWYgKGlzdnQ1MikKLSAgICAgIHBy aW50ZigiXDAzM0oiKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIlwwMzNbSiIpOwotICAgIHJl dHVybigwKTsKLX0KLQotaW50Ci1jbHJ0b2VvbCgpIHsKLSAgICBpZiAoaXN2dDUyKQotICAgICAg cHJpbnRmKCJcMDMzSyIpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZigiXDAzM1tLIik7Ci0gICAg cmV0dXJuKDApOwotfQotCi0jZGVmaW5lIENLX0NVUlBPUwotaW50Ci1ja19jbHMoKSB7Ci0gICAg cmV0dXJuKGNsZWFyKCkpOwotfQotCi1pbnQKLWNrX2NsZW9sKCkgewotICAgIHJldHVybihjbHJ0 b2VvbCgpKTsKLX0KLQotaW50Ci1ja19jdXJwb3Mocm93LCBjb2wpIGludCByb3csIGNvbDsgewot ICAgIG1vdmUocm93LCBjb2wpOwotICAgIHJldHVybigwKTsKLX0KLQotI2Vsc2UgLyogT1MyICov Ci0vKiBXaW5kb3dzIE5UIGFuZCBXaW5kb3dzIDk1IGRvIG5vdCBwcm92aWRlIEFOU0kgZW11bGF0 aW9uICovCi0vKiBUaGVyZWZvcmUgd2UgbWlnaHQgYXMgd2VsbCBub3QgdXNlIGl0IGZvciBPUy8y IGVpdGhlciAgICovCi0KLWludAotbW92ZShyb3csIGNvbCkgaW50IHJvdywgY29sOyB7Ci0jaWZu ZGVmIE9ORVRFUk1VUEQKLSAgICBTZXRDdXJQb3Mocm93LCBjb2wpOwotI2VuZGlmIC8qIE9ORVRF Uk1VUEQgKi8KLSAgICBsZ290b3h5KCBWQ01ELCBjb2wrMSwgcm93KzEpOwotICAgIFZzY3JuSXNE aXJ0eShWQ01EKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotY2xlYXIoKSB7Ci0gICAgdmlv Y2VsbCBjZWxsOwotICAgIG1vdmUoMCwwKTsKLSNpZmRlZiBPTkVURVJNVVBECi0gICAgaWYgKFZz Y3JuR2V0QnVmZmVyU2l6ZShWQ01EKSA+IDApIHsKLSAgICAgICAgVnNjcm5TY3JvbGwoVkNNRCwg VVBXQVJELCAwLAotICAgICAgICAgICAgICAgICAgICBWc2NybkdldEhlaWdodChWQ01EKS0oMSks Ci0gICAgICAgICAgICAgICAgICAgIFZzY3JuR2V0SGVpZ2h0KFZDTUQpLSgwKSwgVFJVRSwgQ0hS X1NQKTsKLSAgICAgICAgY2xlYXJ0ZXJtc2NyZWVuKFZDTUQpOwotICAgIH0KLSNlbHNlCi0gICAg Y2VsbC5jID0gJyAnOwotICAgIGNlbGwuYSA9IGNvbG9yY21kOwotICAgIFdydE5DZWxsKGNlbGws IGNtZF9yb3dzICogY21kX2NvbHMsIDAsIDApOwotI2VuZGlmIC8qIE9ORVRFUk1VUEQgKi8KLSAg ICByZXR1cm4oMCk7Ci19Ci0KLWludAotY2xydG9lb2woKSB7Ci0gICAgVVNIT1JUIHJvdywgY29s OwotICAgIHZpb2NlbGwgY2VsbDsKLQotICAgIGNlbGwuYyA9ICcgJzsKLSAgICBjZWxsLmEgPSBj b2xvcmNtZDsKLSNpZm5kZWYgT05FVEVSTVVQRAotICAgIEdldEN1clBvcygmcm93LCAmY29sICk7 Ci0gICAgV3J0TkNlbGwoY2VsbCwgY21kX2NvbHMgLSBjb2wgLTEsIHJvdywgY29sKTsKLSNlbmRp ZiAvKiBPTkVURVJNVVBEICovCi0gICAgY2xydG9lb2xuKFZDTUQsQ0hSX1NQKTsKLSAgICByZXR1 cm4oMCk7Ci19Ci0KLSNkZWZpbmUgQ0tfQ1VSUE9TCi1pbnQKLWNrX2N1cnBvcyhyb3csIGNvbCkg aW50IHJvdywgY29sOyB7Ci0gICAgbW92ZShyb3csIGNvbCk7Ci0gICAgcmV0dXJuKDApOwotfQot Ci1pbnQKLWNrX2NscygpIHsKLSAgICByZXR1cm4oY2xlYXIoKSk7Ci19Ci0KLWludAotY2tfY2xl b2woKSB7Ci0gICAgcmV0dXJuKGNscnRvZW9sKCkpOwotfQotCi0jZW5kaWYgLyogT1MyICovCi0j ZW5kaWYgLyogTVlDVVJTRVMgKi8KLQotI2lmbmRlZiBOT1RFUk1DQVAKLSNpZm5kZWYgQ0tfQ1VS UE9TCi0jZGVmaW5lIENLX0NVUlBPUwotCi0vKiBUZXJtY2FwL1Rlcm1pbmZvIHNlY3Rpb24gKi8K LQotc3RhdGljIGNoYXIgY3VyX2Nsc1szMl0gPSB7IE5VTCwgTlVMIH07Ci1zdGF0aWMgY2hhciBj dXJfY2xlb2xbMzJdID0geyBOVUwsIE5VTCB9Owotc3RhdGljIGNoYXIgY3VyX2NtWzY0XSA9IHsg TlVMLCBOVUwgfTsKLXN0YXRpYyBjaGFyIHRnc2J1ZlsxMjhdID0geyBOVUwsIE5VTCB9OwotCi1z dGF0aWMKLSNpZmRlZiBDS19BTlNJQwotdm9pZAotI2VuZGlmIC8qIENLX0FOU0lDICovCi1ja190 ZXJtc2V0KHgpIGludCB4OyB7Ci0gICAgY3VyX2Nsc1swXSA9IE5VTDsKLSAgICBjdXJfY2xlb2xb MF0gPSBOVUw7Ci0gICAgY3VyX2NtWzBdID0gTlVMOwotI2lmZGVmIHRnZXRlbnQKLSAgICBkZWJ1 ZyhGMTAwLCJ0Z2V0ZW50IGlzIGEgbWFjcm8iLCIiLDApOwotI2VuZGlmIC8qIHRnZXRlbnQgKi8K LSNpZmRlZiB0Z2V0c3RyCi0gICAgZGVidWcoRjEwMCwidGdldHN0ciBpcyBhIG1hY3JvIiwiIiww KTsKLSNlbmRpZiAvKiB0Z2V0c3RyICovCi0jaWZkZWYgdHB1dHMKLSAgICBkZWJ1ZyhGMTAwLCJ0 cHV0cyBpcyBhIG1hY3JvIiwiIiwwKTsKLSNlbmRpZiAvKiB0cHV0cyAqLwotI2lmZGVmIHRnb3Rv Ci0gICAgZGVidWcoRjEwMCwidGdvdG8gaXMgYSBtYWNybyIsIiIsMCk7Ci0jZW5kaWYgLyogdGdv dG8gKi8KLSNpZmRlZiBOT1RFUk1DQVAKLSAgICAvKiB0Z2V0c3RyKCkgZ2V0cyBhIHNlZ21lbnRh dGlvbiBmYXVsdCBvbiBPU0YvMSAqLwotICAgIGRlYnVnKEYxMDAsImNrX3Rlcm1zZXQgTk9URVJN Q0FQIiwiIiwwKTsKLSNlbHNlCi0gICAgaWYgKG5vdGVybWNhcCkgewotICAgICAgICBkZWJ1ZyhG MTAwLCJja190ZXJtc2V0IG5vdGVybWNhcCIsIiIsMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9 Ci0gICAgZGVidWcoRjEwMSwiY2tfdGVybXNldCB4IiwiIix4KTsKLSAgICBpZiAoeCA+IDApIHsK LSAgICAgICAgY2hhciAqIGJwOwotICAgICAgICBicCA9IHRnc2J1ZjsKLSAgICAgICAgKmJwID0g TlVMOwotICAgICAgICBkZWJ1ZyhGMTEwLCJja190ZXJtc2V0IGNhbGxpbmcgdGdldHN0ciIsImNs IiwwKTsKLSAgICAgICAgaWYgKHRnZXRzdHIoImNsIiwgJmJwKSkgeyAgICAgICAvKiBHZXQgY2xl YXItc2NyZWVuIGNvZGUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3Rlcm1zZXQgdGdl dHN0ciBjbCIsdGdzYnVmLCIiKTsKLSAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbih0Z3NidWYp IDwgMzIpCi0gICAgICAgICAgICAgIGNrc3RybmNweShjdXJfY2xzLHRnc2J1ZiwzMik7Ci0gICAg ICAgIH0gZWxzZQotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnAgPSB0Z3NidWY7Ci0gICAg ICAgIGlmICh0Z2V0c3RyKCJjZSIsICZicCkpIHsgICAgICAgLyogR2V0IGNsZWFyLXRvLWVuZC1v Zi1saW5lIGNvZGUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3Rlcm1zZXQgdGdldHN0 ciBjZSIsdGdzYnVmLCIiKTsKLSAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbih0Z3NidWYpIDwg MzIpCi0gICAgICAgICAgICAgIGNrc3RybmNweShjdXJfY2xlb2wsdGdzYnVmLDMyKTsKLSAgICAg ICAgfSBlbHNlCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBicCA9IHRnc2J1ZjsKLSAgICAg ICAgaWYgKHRnZXRzdHIoImNtIiwgJmJwKSkgeyAgICAgICAvKiBHZXQgY3Vyc29yLW1vdmVtZW50 IGNvZGUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3Rlcm1zZXQgdGdldHN0ciBjbSIs dGdzYnVmLCIiKTsKLSAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbih0Z3NidWYpIDwgNjQpCi0g ICAgICAgICAgICAgIGNrc3RybmNweShjdXJfY20sdGdzYnVmLDY0KTsKLSAgICAgICAgfSBlbHNl Ci0gICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KLX0KLQot I2lmbmRlZiBUUFVUU0ZOVFlQRQotI2lmZGVmIFRQVVRTSVNWT0lECi0jZGVmaW5lIFRQVVRTRk5U WVBFIHZvaWQKLSNlbHNlCi0jZGVmaW5lIFRQVVRTRk5UWVBFIGludAotI2VuZGlmIC8qIFRQVVRT SVNWT0lEICovCi0jZW5kaWYgLyogVFBVVFNGTlRZUEUgKi8KLQotI2lmbmRlZiBUUFVUU0FSR1RZ UEUKLSNpZmRlZiBIUFVYOQotI2RlZmluZSBUUFVUU0FSR1RZUEUgY2hhcgotI2Vsc2UKLSNpZmRl ZiBIUFVYMTAKLSNkZWZpbmUgVFBVVFNBUkdUWVBFIGNoYXIKLSNlbHNlCi0jZGVmaW5lIFRQVVRT QVJHVFlQRSBpbnQKLSNlbmRpZiAvKiBIUFVYMTAgKi8KLSNlbmRpZiAvKiBIUFVYOSAqLwotI2Vu ZGlmIC8qIFRQVVRTQVJHVFlQRSAqLwotCi1zdGF0aWMgVFBVVFNGTlRZUEUKLSNpZmRlZiBDS19B TlNJQwotY2tfb3V0YyhUUFVUU0FSR1RZUEUgeCkKLSNlbHNlCi1ja19vdXRjKHgpIFRQVVRTQVJH VFlQRSB4OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVG8gc2F0aXNmeSB0cHV0cygpIGFyZzMgcHJvdG90eXBlICovCi0g ICAgaW50IHJjOwotICAgIGNoYXIgYzsKLSAgICBjID0gKGNoYXIpIHg7Ci0gICAgcmMgPSAoaW5z ZXJ2ZXIpID8gdHRvYyhjKSA6IGNvbm9jKGMpOwotI2lmbmRlZiBUUFVUU0lTVk9JRAotICAgIHJl dHVybihyYyk7Ci0jZW5kaWYgLyogVFBVVFNJU1ZPSUQgKi8KLX0KLQotaW50Ci1ja19jdXJwb3Mo cm93LCBjb2wpIGludCByb3csIGNvbDsgewotI2lmZGVmIENLX0FOU0lDCi0gICAgVFBVVFNGTlRZ UEUgKCpmbikoVFBVVFNBUkdUWVBFKTsKLSNlbHNlCi0gICAgVFBVVFNGTlRZUEUgKCpmbikoKTsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotICAgIGlmICghZnhkX2luaXRlZCkKLSAgICAgIGZ4ZGlu aXQoOTk5OSk7Ci0gICAgaWYgKCFjdXJfY21bMF0pIHsgICAgICAgICAgICAgICAgICAgLyogV2Ug ZG9uJ3QgaGF2ZSBlc2NhcGUgc2VxdWVuY2VzICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBy ZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdGhpbmcgKi8KLSNlbHNlCi0g ICAgICAgIC8qIEJvdGggQy1LZXJtaXQncyBTQ1JFRU4gY29tbWFuZCBhbmQgQU5TSS9WVDEwMCBh cmUgMS1iYXNlZCAqLwotICAgICAgICBwcmludGYoIlwwMzNbJWQ7JWRIIiwgcm93LCBjb2wpOyAv KiBPciBkZWZhdWx0IHRvIEFOU0kgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfSBlbHNl IHsKLSAgICAgICAgZm4gPSBja19vdXRjOwotICAgICAgICAvKiB0ZXJtY2FwL3Rlcm1pbmZvIGlz IDAtYmFzZWQgKi8KLSAgICAgICAgdHB1dHMoCi0jaWZkZWYgVFBVVFNBUkcxQ09OU1QKLSAgICAg ICAgICAgICAgKGNvbnN0IGNoYXIgKikKLSNlbmRpZiAvKiBUUFVUU0FSRzFDT05TVCAqLwotICAg ICAgICAgICAgICB0Z290byhjdXJfY20sY29sLTEscm93LTEpLDEsZm4pOwotICAgIH0KLSAgICBy ZXR1cm4oMCk7Ci19Ci0KLWludAotY2tfY2xzKCkgewotI2lmZGVmIENLX0FOU0lDCi0gICAgVFBV VFNGTlRZUEUgKCpmbikoVFBVVFNBUkdUWVBFKTsKLSNlbHNlCi0gICAgVFBVVFNGTlRZUEUgKCpm bikoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotICAgIGlmICghZnhkX2luaXRlZCkKLSAgICAg IGZ4ZGluaXQoOTk5OSk7Ci0gICAgaWYgKCFjdXJfY2xzWzBdKSB7ICAgICAgICAgICAgICAgICAg LyogSWYgd2UgZG9uJ3QgaGF2ZSBlc2NhcGUgc2VxdWVuY2VzICovCi0jaWZkZWYgQ09NTUVOVAot ICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdGhpbmcgKi8K LSNlbHNlCi0gICAgICAgIHByaW50ZigiXDAzM1s7SFwwMzNbMkoiKTsgICAgICAgLyogT3IgZGVm YXVsdCB0byBBTlNJICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0gZWxzZSB7Ci0gICAg ICAgIGZuID0gY2tfb3V0YzsKLSAgICAgICAgZGVidWcoRjExMSwiY2tfY2xzIDIiLGN1cl9jbHMs ZnhkX2luaXRlZCk7Ci0gICAgICAgIHRwdXRzKGN1cl9jbHMsY21kX3Jvd3MsZm4pOwotICAgIH0K LSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotY2tfY2xlb2woKSB7Ci0jaWZkZWYgQ0tfQU5TSUMK LSAgICBUUFVUU0ZOVFlQRSAoKmZuKShUUFVUU0FSR1RZUEUpOwotI2Vsc2UKLSAgICBUUFVUU0ZO VFlQRSAoKmZuKSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0gICAgaWYgKCFmeGRfaW5pdGVk KQotICAgICAgZnhkaW5pdCg5OTk5KTsKLSAgICBpZiAoIWN1cl9jbGVvbFswXSkgeyAgICAgICAg ICAgICAgICAvKiBJZiB3ZSBkb24ndCBoYXZlIGVzY2FwZSBzZXF1ZW5jZXMgKi8KLSNpZmRlZiBD T01NRU5UCi0gICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90 aGluZyAqLwotI2Vsc2UKLSAgICAgICAgcHJpbnRmKCJcMDMzW0siKTsgICAgICAgICAgICAgICAv KiBPciB1c2UgQU5TSSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9IGVsc2UgewotICAg ICAgICBmbiA9IGNrX291dGM7Ci0gICAgICAgIHRwdXRzKGN1cl9jbGVvbCwxLGZuKTsKLSAgICB9 Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIENLX0NVUlBPUyAqLwotI2Vsc2UKLXN0YXRp YyB2b2lkCi1ja190ZXJtc2V0KHgpIGludCB4OyB7Ci0gICAgaWYgKHgpIHJldHVybjsKLX0KLSNl bmRpZiAvKiBOT1RFUk1DQVAgKi8KLQotI2lmbmRlZiBDS19DVVJQT1MKLSNkZWZpbmUgQ0tfQ1VS UE9TCi1pbnQKLWNrX2NscygpIHsKLSAgICBwcmludGYoIlwwMzNbO0hcMDMzWzJKIik7Ci0gICAg cmV0dXJuKDApOwotfQotCi1pbnQKLWNrX2NsZW9sKCkgewotICAgIHByaW50ZigiXDAzM1tLIik7 Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLWNrX2N1cnBvcyhyb3csIGNvbCkgaW50IHJvdywg Y29sOyB7Ci0gICAgcHJpbnRmKCJcMDMzWyVkOyVkSCIsIHJvdywgY29sKTsKLSAgICByZXR1cm4o MCk7Ci19Ci0jZW5kaWYgLyogQ0tfQ1VSUE9TICovCi0KLQotI2lmbmRlZiBOT1hGRVIKLXN0YXRp YyBpbnQgY2luaXQgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBjdXJzZXMgaW5p dCdkICovCi1zdGF0aWMgaW50IGNlbmR3ID0gMDsgICAgICAgICAgICAgICAgICAgLyogZW5kd2lu KCkgd2FzIGNhbGxlZCAqLwotCi1zdGF0aWMKLSNpZmRlZiBDS19BTlNJQyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBCZWNhdXNlIFZPSUQgdXNlZCBieSBjdXJzZXMuaCAqLwotdm9pZAotI2Vs c2UKLSNpZmRlZiBNWUNVUlNFUwotVk9JRAotI2Vsc2UKLWludAotI2VuZGlmIC8qIE1ZQ1VSU0VT ICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNpZmRlZiBDS19BTlNJQyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBVcGRhdGUgJSB0cmFuc2ZlcmVkIGFuZCAlIGJhciAqLwotdXBkcGN0KGxv bmcgb2xkLCBsb25nIG5ldykKLSNlbHNlIC8qIENLX0FOU0lDICovCi11cGRwY3Qob2xkLCBuZXcp IGxvbmcgb2xkLCBuZXc7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHVwZHBjdCAqLyB7Ci0j aWZkZWYgQ09NTUVOVAotICAgIGludCBtLCBuOwotICAgIG1vdmUoQ1dfUENELDIyKTsKLSAgICBw cmludHcoIiVsZCIsIG5ldyk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDRCwgKGxvbmcpIG5ldyk7Ci0j ZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENLX1BDVF9CQVIKLSAg ICBpZiAodGhlcm1vbWV0ZXIpIHsKLSAgICAgICAgaWYgKG9sZCA+IG5ldykgewotICAgICAgICAg ICAgb2xkID0gMDsKLSAgICAgICAgICAgIG1vdmUoQ1dfUENELCAyNik7Ci0gICAgICAgICAgICBj bHJ0b2VvbCgpOwotICAgICAgICB9Ci0gICAgICAgIG0gPSBvbGQvMjsKLSAgICAgICAgbW92ZShD V19QQ0QsIDI2ICsgbSk7Ci0gICAgICAgIG4gPSBuZXcgLyAyIC0gbTsKLSNpZm5kZWYgT1MyCi0g ICAgICAgIHdoaWxlIChuID4gMCkgewotICAgICAgICAgICAgaWYgKChtICsgMSkgJSA1ID09IDAp Ci0gICAgICAgICAgICAgIHByaW50dygiKiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg ICAgICBwcmludHcoIj0iKTsKLSAgICAgICAgICAgIG0rKzsKLSAgICAgICAgICAgIG4tLTsKLSAg ICAgICAgfQotICAgICAgICBpZiAobmV3ICUgMiAhPSAwKSBwcmludHcoIi0iKTsKLSAgICAgICAg LyogbW92ZShDV19QQ0QsIDIyKzUzKTsgKi8KLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICB3aGls ZSAobiA+IDApIHsKLSAgICAgICAgICAgIHByaW50dygiJWMiLCAnXDMzMycpOwotICAgICAgICAg ICAgbSsrOyBuLS07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5ldyAlIDIgIT0gMCkKLSAgICAg ICAgICBwcmludHcoIiVjIiwgJ1wyNjEnKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0jZW5k aWYgLyogQ0tfUENUX0JBUiAqLwotICAgIC8qIGNscnRvZW9sKCk7ICovCi0jZWxzZSAgLyogIUNP TU1FTlQgKi8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgQ0hBUjEgICAnXDMzMycgICAgICAgICAgLyog T1MyIC0gQ1A0MzcgKi8KLSNkZWZpbmUgQ0hBUjIgICAnXDI2MScKLSNlbHNlCi0jZGVmaW5lIENI QVIxICAgJy8nICAgICAgICAgICAgIC8qIERlZmF1bHQgKi8KLSNkZWZpbmUgQ0hBUjIgICAnLScK LSNlbmRpZiAvKiBPUzIgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ1cGRwY3Qgb2xkIiwiIixvbGQpOwot ICAgIGRlYnVnKEYxMDEsInVwZHBjdCBuZXciLCIiLG5ldyk7Ci0gICAgbW92ZShDV19QQ0QsMjIp OwotICAgIHByaW50dygiJS0zbGQiLCBuZXcpOyAvKiAgKHdhcykgICBwcmludHcoIiVsZCIsIG5l dyk7ICAqLwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgS3VpU2V0UHJvcGVydHkoIEtV SV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUENELCAobG9uZykgbmV3ICk7Ci0jZW5kaWYgLyog Szk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENLX1BDVF9CQVIKLSAgICBpZiAodGhl cm1vbWV0ZXIpIHsKLSAgICAgICAgaW50IG0sIG47Ci0KLSAgICAgICAgaWYgKG9sZCA+IG5ldykg ewotICAgICAgICAgICAgb2xkID0gMCA7Ci0gICAgICAgICAgICBtb3ZlKENXX1BDRCwgMjYpOwot ICAgICAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobmV3IDw9IDEw MEwpIHsKLSAgICAgICAgICAgIG0gPSBvbGQgLyAyOwotICAgICAgICAgICAgbiA9IG5ldyAvIDIg LSBtOwotICAgICAgICAgICAgbW92ZShDV19QQ0QsIDI2K20pOwotICAgICAgICAgICAgd2hpbGUg KG4tLSA+IDApCi0gICAgICAgICAgICAgIHByaW50dygiJWMiLCBDSEFSMSk7Ci0gICAgICAgICAg ICBpZiAobmV3ICUgMiAhPSAwKQotICAgICAgICAgICAgICBwcmludHcoIiVjIiwgQ0hBUjIpOwot ICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KLSNlbmRpZiAvKiBDT01N RU5UICovCi19Ci0KLXN0YXRpYyBDS19PRkZfVCBvbGRfdHIgPSAoQ0tfT0ZGX1QpLTE7CS8qIFRp bWUgcmVtYWluaW5nIHByZXZpb3VzbHkgKi8KLQotc3RhdGljIENLX09GRl9UCi0jaWZkZWYgQ0tf QU5TSUMKLXNob2V0bChDS19PRkZfVCBvbGRfdHIsIGxvbmcgY3BzLCBDS19PRkZfVCBmc2l6LCBD S19PRkZfVCBob3dmYXIpCi0jZWxzZQotICAgIHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93 ZmFyKSBsb25nIGNwczsgQ0tfT0ZGX1Qgb2xkX3RyLCBmc2l6LCBob3dmYXI7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLS8qIHNob2V0bCAqLyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBF c3RpbWF0ZWQgdGltZSBsZWZ0IGluIHRyYW5zZmVyICovCi0gICAgQ0tfT0ZGX1QgdHI7CQkJLyog VGltZSByZW1haW5pbmcsIHNlY29uZHMgKi8KLQotI2lmZGVmIEdGVElNRVIKLSAgICBpZiAoZnNp eiA+IDBMICYmIGNwcyA+IDBMKQotICAgICAgdHIgPSAoQ0tfT0ZGX1QpKChDS0ZMT0FUKShmc2l6 IC0gaG93ZmFyKSAvIChDS0ZMT0FUKWNwcyk7Ci0gICAgZWxzZQotICAgICAgdHIgPSAoQ0tfT0ZG X1QpLTE7Ci0jZWxzZQotICAgIHRyID0gKGZzaXogPiAwTCAmJiBjcHMgPiAwTCkgPwotICAgICAg KChmc2l6IC0gaG93ZmFyKSAvIGNwcykgOgotICAgICAgICAoQ0tfT0ZGX1QpLTE7Ci0jZW5kaWYg LyogR0ZUSU1FUiAqLwotICAgIG1vdmUoQ1dfVFIsMjIpOwotICAgIGlmICh0ciA+IChDS19PRkZf VCktMSkgewotICAgICAgICBpZiAodHIgIT0gb2xkX3RyKSB7Ci0gICAgICAgICAgICBwcmludHco IiVzIixoaG1tc3ModHIpKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKUNXX1RSLCAobG9uZyloaG1t c3ModHIpKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAg ICBjbHJ0b2VvbCgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnR3KCIo dW5rbm93bikiKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19UUiwgKGxvbmcpICIodW5rbm93biki ICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBjbHJ0b2Vv bCgpOwotICAgIH0KLSAgICByZXR1cm4odHIpOwotfQotCi1zdGF0aWMgbG9uZwotI2lmZGVmIENL X0FOU0lDCi1zaG9jcHMoaW50IHBjdCwgQ0tfT0ZGX1QgZnNpeiwgQ0tfT0ZGX1QgaG93ZmFyKQot I2Vsc2UKLXNob2NwcyhwY3QsIGZzaXosIGhvd2ZhcikgaW50IHBjdDsgQ0tfT0ZGX1QgZnNpeiwg aG93ZmFyOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBzaG9jcHMgKi8gewotI2lmZGVmIENQ U19XRUlHSFRFRAotICAgIHN0YXRpYyBDS19PRkZfVCBvbGRmZmMgPSAwTDsKLSNlbmRpZiAvKiBD UFNfV0VJR0hURUQgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgQ0tGTE9BVCBzZWNzLCB4eDsKLSNl bHNlCi0gICAgQ0tfT0ZGX1Qgc2VjcywgeHg7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0jaWZk ZWYgR0ZUSU1FUgotICAgIHh4ID0gKGd0diA+PSAwLjApID8gZ3R2IDogMC4wOyAgICAgIC8qIEZs b2F0aW5nLXBvaW50IHZlcnNpb24gKi8KLSAgICBndHYgPSBnZnRpbWVyKCk7Ci0gICAgaWYgKChn dHYgLSBvbGRndHYpIDwgKENLRkxPQVQpIDEuMCkgLyogT25seSBkbyB0aGlzIG9uY2UgcGVyIHNl Y29uZCAqLwotICAgICAgcmV0dXJuKG9sZGNwcyk7Ci0gICAgb2xkZ3R2ID0geHg7Ci0jZWxzZQot ICAgIHh4ID0gKGd0diA+PSAwKSA/IGd0diA6IDA7ICAgICAgICAgIC8qIFdob2xlLW51bWJlciB2 ZXJzaW9uICovCi0gICAgZ3R2ID0gZ3RpbWVyKCk7Ci0gICAgaWYgKChndHYgLSBvbGRndHYpIDwg MSkKLSAgICAgIHJldHVybihvbGRjcHMpOwotICAgIG9sZGd0diA9IHh4OwotI2VuZGlmIC8qIEdG VElNRVIgKi8KLQotI2lmZGVmIENQU19XRUlHSFRFRAotICAgIC8qIGRlYnVnKEYxMDAsIlNIT0NQ UzogV0VJR0hURUQiLCIiLDApOyAqLwotICAgIGlmIChndHYgIT0gb2xkZ3R2KSB7ICAgICAgICAg ICAgICAgIC8qIFRoZSBmaXJzdCBwYWNrZXQgaXMgaWdub3JlZCAqLwotICAgICAgICBpZiAoZmZj IDwgb2xkZmZjKQotICAgICAgICAgIG9sZGZmYyA9IGZmYzsKLSAgICAgICAgb2xkY3BzID0gY3Bz OwotICAgICAgICBpZiAob2xkY3BzICYmIG9sZGd0diA+Ci0jaWZkZWYgR0ZUSU1FUgotICAgICAg ICAgICAgMS4wCi0jZWxzZQotICAgICAgICAgICAgMQotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAg ICAgICAgICAgICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgZmlyc3Qgc2Vjb25k IGlzIGlnbm9yZWQgKi8KLS8qCi0gIFRoaXMgdmVyc2lvbiBvZiBzaG9jcHMoKSBwcm9kdWNlcyBh IHdlaWdodGVkIGF2ZXJhZ2UgdGhhdCBzb21lCi0gIHBlb3BsZSBsaWtlLCBidXQgbW9zdCBwZW9w bGUgZmluZCBpdCBkaXNjb25jZXJ0aW5nIGFuZCBib21iYXJkIHVzCi0gIHdpdGggcXVlc3Rpb25z IGFuZCBjb21wbGFpbnRzIGFib3V0IHdoeSB0aGUgQ1BTIGZpZ3VyZSBmbHVjdHVhdGVzIHNvCi0g IHdpbGRseS4gIFNvIG5vdyB5b3Ugb25seSBnZXQgdGhlIHdlaWdodGVkIGF2ZXJhZ2UgaWYgeW91 IGJ1aWxkIHRoZQotICBwcm9ncmFtIHlvdXJzZWxmIHdpdGggQ1BTX1dFSUdIVEVEIGRlZmluZWQu Ci0qLwotI2lmbmRlZiBDUFNfVklOQ0UKLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgICAgICBjcHMg PSAobG9uZykoKCgoQ0tGTE9BVClvbGRjcHMgKiAzLjApICsKLSAgICAgICAgICAgICAgICAgICAo Q0tGTE9BVCkoZmZjIC0gb2xkZmZjKSAvIChndHYtb2xkZ3R2KSApIC8gNC4wKTsKLSNlbHNlCi0g ICAgICAgICAgICBjcHMgPSAoIChvbGRjcHMgKiAzKSArIChmZmMgLSBvbGRmZmMpIC8gKGd0di1v bGRndHYpICkgLyA0OwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSNlbHNlCi0vKiBBbmQgYW4gYWx0 ZXJuYXRlIHdlaWdodGluZyBzY2hlbWUgZnJvbSBWaW5jZW50IEZhdGljYS4uLiAqLwotICAgICAg ICAgICAgY3BzID0gKDMgKgotICAgICAgICAgICAgICgoMStwY3QvMzAwKSpvbGRmZmMvb2xkZ3R2 KygxLXBjdC8xMDApKihmZmMtb2xkZmZjKS8oZ3R2LW9sZGd0dikpKQotICAgICAgICAgICAgICAv IDQ7Ci0jZW5kaWYgLyogQ1BTX1ZJTkNFICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAvKiBObyB3ZWlnaHRlZCBhdmVyYWdlIHNpbmNlIHRoZXJlIGlzIG5vdGhpbmcgdG8gd2VpZ2gg Ki8KLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgICAgICBjcHMgPSAobG9uZykoZ3R2ICE9IDAuMCA/ Ci0gICAgICAgICAgICAgIChDS0ZMT0FUKShmZmMgLSBvbGRmZmMpIC8gKGd0diAtIG9sZGd0dikg OgotICAgICAgICAgICAgICAgIChmZmMgLSBvbGRmZmMpKSA7Ci0jZWxzZQotICAgICAgICAgICAg Y3BzID0gZ3R2ID8gKGZmYyAtIG9sZGZmYykgLyAoZ3R2IC0gb2xkZ3R2KSA6IChmZmMgLSBvbGRm ZmMpIDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0j aWZkZWYgREVCVUcKLSAgICAgICAgaWYgKGRlYmxvZykgewotICAgICAgICAgICAgZGVidWcoRjEw MSwiU0hPQ1BTOiBwY3QgICAiLCIiLHBjdCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9D UFM6IGd0diAgICIsIiIsZ3R2KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogb2xk Z3R2IiwiIixvbGRndHYpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBkZ3R2ICAi LCIiLChsb25nKShndHYtb2xkZ3R2KSk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6 IGZmYyAgICIsIiIsZmZjKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogb2xkZmZj IiwiIixvbGRmZmMpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBkZmZjICAiLCIi LGZmYy1vbGRmZmMpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBjcHMgICAiLCIi LGNwcyk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLSAgICAgICAgbW92ZShDV19DUCwyMik7Ci0gICAgICAgIHByaW50dygiJWxkIiwgY3BzKTsK LSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJ TEVfVFJBTlNGRVIsIChsb25nKSBDV19DUCwgKGxvbmcpIGNwcyApOwotI2VuZGlmIC8qIEs5NUcg Ki8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgb2xkZmZj ID0gZmZjOwotICAgIH0KLSNlbHNlIC8qICFDUFNfV0VJR0hURUQgKi8KLSNpZmRlZiBDT01NRU5U Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjEwMCwiU0hPQ1BTOiBO T1QgV0VJR0hURUQiLCIiLDApOwotICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IHBjdCAgICAi LCIiLHBjdCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZ3R2ICAgICIsIiIsZ3R2KTsK LSAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBvbGRndHYgIiwiIixvbGRndHYpOwotICAgICAg ICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGRndHYgICAiLCIiLChsb25nKWd0diAtIChsb25nKW9sZGd0 dik7Ci0gICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZmZjICAgICIsIiIsZmZjKTsKLSAgICAg ICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBvbGRmZmMgIiwiIixvbGRmZmMpOwotICAgICAgICBkZWJ1 ZyhGMTAxLCJTSE9DUFM6IGRmZmMgICAiLCIiLGZmYy1vbGRmZmMpOwotICAgICAgICBkZWJ1ZyhG MTAxLCJTSE9DUFM6IGNwcyAgICAiLCIiLGNwcyk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQ UzogZmlsY250ICIsIiIsZmlsY250KTsKLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgIGRlYnVnKEYx MDEsIlNIT0NQUzogZnBmc2VjcyIsIiIsZnBmc2Vjcyk7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwot ICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJzaG9jcHMgZ3R2IiwiIixndHYpOwotI2VuZGlmIC8qIERF QlVHICovCi0jaWZkZWYgR0ZUSU1FUgotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAvKiBkZWJ1 ZyhGMTAxLCJzaG9jcHMgZnBmc2VjcyIsIiIsZnBmc2Vjcyk7ICovCi0gICAgc2VjcyA9IGd0diAt IGZwZnNlY3M7Ci0gICAgLyogZGVidWcoRjEwMSwic2hvY3BzIHNlY3MiLCIiLChsb25nKXNlY3Mp OyAqLwotICAgIGlmIChzZWNzID4gMC4wKSB7Ci0gICAgICAgIGNwcyA9IChsb25nKSgoQ0tGTE9B VCkgZmZjIC8gc2Vjcyk7Ci0gICAgICAgIC8qIGRlYnVnKEYxMDEsInNob2NwcyBjcHMiLCIiLGNw cyk7ICovCi0gICAgICAgIG1vdmUoQ1dfQ1AsMjIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVH Ci0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0NQ LCAobG9uZykgY3BzICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAg ICAgICBwcmludHcoIiVsZCIsIGNwcyk7Ci0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAgfQotI2Vs c2UgIC8qIE5vdCBHRlRJTUVSICovCi0gICAgaWYgKChzZWNzID0gZ3R2IC0gZnNlY3MpID4gMCkg ewotICAgICAgICBjcHMgPSAoc2VjcyA8IDFMKSA/IGZmYyA6IGZmYyAvIHNlY3M7Ci0gICAgICAg IG1vdmUoQ1dfQ1AsMjIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNl dFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0NQLCAobG9uZykgY3BzICk7 Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBwcmludHcoIiVs ZCIsIGNwcyk7Ci0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAgfQotI2VuZGlmIC8qIEdGVElNRVIg Ki8KLSNlbmRpZiAvKiBDUFNfV0VJR0hURUQgKi8KLQotICAgIGlmIChjcHMgPiBwZWFrY3BzICYm ICAgICAgICAgICAgICAgIC8qIFBlYWsgdHJhbnNmZXIgcmF0ZSAqLwotICAgICAgICAoKHdoYXQg JiBXX1NFTkQgJiYgc3BhY2tldHMgPiB3c2xvdHMgKyA0KSB8fAotCSAoISh3aGF0ICYgV19TRU5E KSAmJiBzcGFja2V0cyA+IDEwKSkpIHsKLSAgICAgICAgcGVha2NwcyA9IGNwczsKLSAgICB9Ci0g ICAgb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOwotICAgIHJldHVy bihjcHMpOwotfQotCi1zdGF0aWMKLSNpZmRlZiBDS19BTlNJQyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBCZWNhdXNlIFZPSUQgdXNlZCBieSBjdXJzZXMuaCAqLwotdm9pZAotI2Vsc2UKLSNp ZmRlZiBNWUNVUlNFUwotVk9JRAotI2Vsc2UKLWludAotI2VuZGlmIC8qIE1ZQ1VSU0VTICovCi0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXNjcmZ0KCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBEaXNwbGF5IGZpbGUgdHlwZSAqLwotICAgIGNoYXIgeGZlcnN0clsyNTZdOwotICAg IHhmZXJzdHJbMF0gPSBOVUw7Ci0gICAgZGVidWcoRjEwMSwic2NyZnQgYmluYXJ5IiwiIixiaW5h cnkpOwotICAgIGlmIChiaW5hcnkpIHsKLSAgICAgICAgc3dpdGNoKGJpbmFyeSkgewotICAgICAg ICAgIGNhc2UgWFlGVF9MOgotICAgICAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIkxBQkVMRUQi LDI1Nik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFhZRlRfSToKLSAgICAg ICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJJTUFHRSIsMjU2KTsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgIGNhc2UgWFlGVF9VOgotICAgICAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIs IkJJTkFSWSBVTkRFRklORUQiLDI1Nik7Ci0gICAgICAgICAgICBicmVhazsKLQkgIGNhc2UgWFlG VF9NOgotICAgICAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIk1BQ0JJTkFSWSIsMjU2KTsKLSAg ICAgICAgICAgIGJyZWFrOwotCSAgY2FzZSBYWUZUX1g6Ci0gICAgICAgICAgICBja3N0cm5jcHko eGZlcnN0ciwiVEVORVgiLDI1Nik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZh dWx0OgotICAgICAgICAgIGNhc2UgWFlGVF9COgotICAgICAgICAgICAgY2tzdHJuY3B5KHhmZXJz dHIsIkJJTkFSWSIsMjU2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jaWZkZWYg Q0tfUkVTRU5ECi0gICAgICAgIGlmICh3aGF0ICYgV19TRU5EICYmIHNlbmRzdGFydCA+IDBMKSB7 Ci0gICAgICAgICAgICBpZiAoc2VuZG1vZGUgPT0gU01fUFNFTkQpIHsKLSAgICAgICAgICAgICAg ICBja3N0cm5jYXQoeGZlcnN0ciwgIiAvIHBhcnRpYWwiLCAyNTYpOwotICAgICAgICAgICAgfSBl bHNlIGlmIChzZW5kbW9kZSA9PSBTTV9SRVNFTkQpIHsKLSAgICAgICAgICAgICAgICBja3N0cm5j YXQoeGZlcnN0ciwgIiAvIHJlc2VuZCIsIDI1Nik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g ZWxzZSBpZiAod2hhdCAmIFdfUkVDViAmJiByc19sZW4gPiAwTCkgewotICAgICAgICAgICAgY2tz dHJuY2F0KHhmZXJzdHIsICIgLyByZXNlbmQiLCAyNTYpOwotICAgICAgICB9Ci0jZW5kaWYgLyog Q0tfUkVTRU5EICovCi0gICAgfSBlbHNlIHsKLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgICAgIGNr c3RybmNweSh4ZmVyc3RyLCJURVhUIiwyNTYpOwotI2lmZGVmIE5FV0ZUUAotI2lmbmRlZiBOT1VO SUNPREUKLQlpZiAod2hhdCAmIFdfRlRQKSB7Ci0JICAgIGlmIChmdHBfY3N4IDwgMCkKLQkgICAg ICBja3N0cm5jYXQoeGZlcnN0ciwiIChubyB0cmFuc2xhdGlvbikiLCAyNTYpOwotCSAgICBlbHNl Ci0JICAgICAgY2ttYWt4bXNnKCZ4ZmVyc3RyWzRdLDI1MiwKLQkJICAgICAgICIgKCIsCi0JCSAg ICAgICBmY3NpbmZvWyh3aGF0ICYgV19TRU5EKSA/IGZ0cF9jc2wgOiBmdHBfY3N4XS5rZXl3b3Jk LAotCQkgICAgICAgIiA9PiAiLAotCQkgICAgICAgZmNzaW5mb1sod2hhdCAmIFdfU0VORCkgPyBm dHBfY3N4IDogZnRwX2NzbF0ua2V5d29yZCwKLQkJICAgICAgICIpIiwKLQkJICAgICAgIE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKLQkJICAgICAgICk7Ci0JfSBlbHNlCi0jZW5k aWYgLyogTk9VTklDT0RFICovCi0jZW5kaWYgLyogTkVXRlRQICovCi0JICBpZiAodGNoYXJzZXQg PT0gVENfVFJBTlNQKSB7Ci0gICAgICAgICAgICBja3N0cm5jYXQoeGZlcnN0ciwgIiAobm8gdHJh bnNsYXRpb24pIiwgMjU2KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh3aGF0 ICYgV19TRU5EKSB7Ci0gICAgICAgICAgICAgICAgc3ByaW50ZiggJnhmZXJzdHJbc3RybGVuKHhm ZXJzdHIpXSwgLyogc2FmZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIiAoJXMgPT4gJXMp IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQsIC8q IGJ1aWx0LWluIGtleXdvcmRzICovCi0gICAgICAgICAgICAgICAgICAgICAgICB0Y3NpbmZvW3Rj aGFyc2V0XS5rZXl3b3JkICAvKiBsZW5ndGhzIGFyZSBjb250cm9sbGVkICovCi0JCQkpOwotICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKCAmeGZlcnN0cltzdHJs ZW4oeGZlcnN0cildLCAvKiBzYWZlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAiICglcyA9 PiAlcykiLAotICAgICAgICAgICAgICAgICAgICAgICAgdGNzaW5mb1t0Y2hhcnNldF0ua2V5d29y ZCwgLyogYnVpbHQtaW4ga2V5d29yZHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGZjc2lu Zm9bZmNoYXJzZXRdLmtleXdvcmQpOyAvKiBsZW5ndGhzIGNvbnRyb2xsZWQgKi8KLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICB9Ci0gICAgbW92ZShD V19UWVAsMjIpOwotICAgIHByaW50dygiJXMiLCB4ZmVyc3RyKTsKLSAgICBjbHJ0b2VvbCgpOwot I2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfVFlQLCAobG9uZykgeGZlcnN0ciApOwotI2VuZGlmIC8qIEs5NUcg Ki8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICByZXR1cm47Ci19Ci0KLSNpZmRlZiBDS19ORVdURVJN Ci1zdGF0aWMgRklMRSAqY2tfc3Rkb3V0ID0gTlVMTDsKLXN0YXRpYyBpbnQgY2tfZmQgPSAtMTsK LSNlbmRpZiAvKiBDS19ORVdURVJNICovCi0KLXN0YXRpYyBsb25nIHBjdCA9IDBMLCBvbGRwY3Qg PSAwTCwgb2xkcnR0ID0gLTFMOwotc3RhdGljIGludCBvbGR0eXAgPSAwLCBvbGR3aW4gPSAtMSwg b2xkdHJ5ID0gLTEsIG9sZGxlbiA9IC0xLCBvbGR0aW0gPSAtMTsKLQotI2lmZGVmIE5FVENPTk4K LXN0YXRpYyBjaGFyICpuZXRuYW1lW10gPSB7Ci0gICAgIm5vbmUiLAkJCQkvKiAwMCAqLwotICAg ICJUQ1AvSVAiLAkJCQkvKiAwMSBUQ1AgKFNvY2tldHMpICovCi0gICAgIlRDUC9JUCIsCQkJCS8q IDAyIFRDUCAoU3RyZWFtcykgKi8KLSAgICAiWC4yNSIsCQkJCS8qIDAzIFN1bkxpbmsgWC4yNCAg Ki8KLSAgICAiREVDbmV0IiwJCQkJLyogMDQgREVDbmV0ICAqLwotICAgICJWQVggUFNJIiwJCQkJ LyogMDUgVkFYIFBTSSAqLwotICAgICJOYW1lZCBQaXBlcyIsCQkJLyogMDYgTEFOIE1hbmFnZXIg TmFtZWQgUGlwZSAqLwotICAgICJYLjI1IiwJCQkJLyogMDcgU3RyYXR1cyBWT1MgWC4yNSAqLwot ICAgICJOZXRCSU9TIiwJCQkJLyogMDggSUJNIE5FVEJJT1MgKi8KLSAgICAiU3VwZXJMQVQiLAkJ CQkvKiAwNyBNZXJpZGlhbiBTdXBlckxBVCAqLwotICAgICJGaWxlIiwJCQkJLyogMTAgRmlsZSAq LwotICAgICJDb21tYW5kIiwJCQkJLyogMTEgU3VicHJvY2VzcyAocGlwZSkgKi8KLSAgICAiRExM IiwJCQkJLyogMTIgRExMIGRvZXMgaS9vICovCi0gICAgIlguMjUiLAkJCQkvKiAxMyBJQk0gQUlY TGluayBYLjI1ICovCi0gICAgIlguMjUiLAkJCQkvKiAxNCBIUC1VWCBYLjI1ICovCi0gICAgIlBU WSIsCQkJCS8qIDE1IFBzZXVkb3Rlcm1pbmFsICovCi0gICAgIlNTSCIsCQkJCS8qIDE2IFNTSCAq LwotICAgICI8RVJST1I+IiwJCQkJLyogMTcgSW4gY2FzZSBuZXcgdHlwZXMgYXJlIGFkZGVkICov Ci0gICAgIjxFUlJPUj4iLAkJCQkvKiAxOCBidXQgbm9ib2R5IHJlbWVtYmVycyB0byB1cGRhdGUg Ki8KLSAgICAiPEVSUk9SPiIsCQkJCS8qIDE5IHRoaXMgdGFibGUgLi4uICovCi0gICAgTlVMTAkJ CQkvKiAyMCAqLwotfTsKLXN0YXRpYyBpbnQgbm5ldG5hbWUgPSAoc2l6ZW9mKG5ldG5hbWUpIC8g c2l6ZW9mKGNoYXIgKikpOwotCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0jaWZkZWYgQ0tfQU5T SUMKLXZvaWQKLXNjcmVlbmMoaW50IGYsIGNoYXIgYyxDS19PRkZfVCBuLGNoYXIgKnMpCi0jZWxz ZQotQ0tWT0lECi1zY3JlZW5jKGYsYyxuLHMpCi1pbnQgZjsgICAgICAgICAgLyogYXJndW1lbnQg ZGVzY3JpcHRvciAqLwotY2hhciBjOyAgICAgICAgIC8qIGEgY2hhcmFjdGVyIG9yIHNtYWxsIGlu dGVnZXIgKi8KLUNLX09GRl9UIG47ICAgICAvKiBhIGxvbmcgaW50ZWdlciAqLwotY2hhciAqczsg ICAgICAgIC8qIGEgc3RyaW5nICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHNjcmVlbmMo KSAqLyB7Ci0jaWZkZWYgQ0tfU1NMCi0gICAgZXh0ZXJuIGludCB0bHNfYWN0aXZlX2ZsYWcsIHNz bF9hY3RpdmVfZmxhZzsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBSTE9HQ09ERQotICAg IGV4dGVybiBpbnQgdHRucHJvdG87Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSAgICBzdGF0aWMg aW50IHEgPSAwOwotICAgIHN0YXRpYyBsb25nIGZjbnQgPSAwTDsJCS8qIE51bWJlciBvZiBmaWxl cyB0cmFuc2ZlcnJlZCAqLwotICAgIHN0YXRpYyBDS19PRkZfVCBmc2l6ID0gKENLX09GRl9UKS0x OyAvKiBDb3B5IG9mIGZpbGUgc2l6ZSAqLwotICAgIHN0YXRpYyBDS19PRkZfVCBmYnl0ID0gMEw7 IC8qIFRvdGFsIGZpbGUgYnl0ZXMgb2YgYWxsIGZpbGVzIHRyYW5zZmVycmVkICovCi0gICAgc3Rh dGljIENLX09GRl9UIGhvd2ZhciA9IDBMOyAvKiBIb3cgbXVjaCBvZiBjdXJyZW50IGZpbGUgaGFz IGJlZW4geGZlcidkICovCi0gICAgc3RhdGljIGludCAgcGN0bGJsID0gMEw7ICAvKiBQZXJjZW50 IGRvbmUgdnMgQnl0ZXMgc28gZmFyICovCi0gICAgbG9uZyBjcHMgPSAwTDsKLQotICAgIGludCBu ZXQgPSAwOwotICAgIGludCB4bmV0ID0gMDsKLSAgICBpbnQgZnRwID0gMDsKLSAgICBpbnQgbGVu OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2Ygc3RyaW5nICovCi0gICAg aW50IGVycm9ycyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgY291bnRlciAqLwot ICAgIGludCB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlciAqLwotCi0g ICAgZGVidWcoRjEwMSwic2NyZWVuYyBjaW5pdCIsIiIsY2luaXQpOwotICAgIGRlYnVnKEYxMDEs InNjcmVlbmMgY2VuZHciLCIiLGNlbmR3KTsKLQotICAgIGlmICghcykgcyA9ICIiOyAgICAgICAg ICAgICAgICAgICAgIC8qIEFsd2F5cyBkbyB0aGlzLiAqLwotCi0gICAgZnRwID0gKHdoYXQgJiBX X0ZUUCkgPyAxIDogMDsJLyogRlRQIG9yIEtlcm1pdCAqLwotICAgIG5ldCA9IG5ldHdvcmsgfHwg ZnRwOwotICAgIHhuZXQgPSBmdHAgPyAxIDogbmV0dHlwZTsJCS8qIE5FVF9UQ1BCID09IDEgKi8K LQotICAgIGlmIChjaW5pdCA9PSAwIHx8IGNlbmR3ID4gMCkgeyAgICAgIC8qIEhhbmRsZSBib3Jk ZXJsaW5lIGNhc2VzLi4uICovCi0gICAgICAgIGlmIChmID09IFNDUl9DVykgeyAgICAgICAgICAg ICAgLyogQ2xvc2Ugd2luZG93LCBidXQgaXQncyBub3Qgb3BlbiAqLwotICAgICAgICAgICAgZnRf d2luID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhG MTExLCJzY3JlZW5jIEEiLHMsZik7Ci0gICAgICAgIGlmIChmID09IFNDUl9FTSB8fAotICAgICAg ICAgICAoZiA9PSBTQ1JfUFQgJiYgYyA9PSAnRScpKSB7IC8qIEZhdGFsIGVycm9yIGJlZm9yZSB3 aW5kb3cgb3BlbiAqLwotICAgICAgICAgICAgY29ub2xsKCIiKTsgY29ub2MoJz8nKTsgY29ub2xs KHMpOyByZXR1cm47IC8qIFJlZ3VsYXIgZGlzcGxheSAqLwotICAgICAgICB9Ci0gICAgfQotICAg IGlmIChjaW5pdCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgY2FsbCBpbml0c2Ny KCkgb25jZSAqLwotCWNoYXIgKiBzOwotCS8qIENoZWNrIHRoZXNlIG5vdyAtLSBpZiB0aGV5IGFy ZSBkZWZpbmVkIGJ1dCBub3QgbnVtZXJpYyAqLwotCS8qIHRoZXkgY2FuIGNyYXNoIGN1cnNlcyAq LwotCXMgPSBnZXRlbnYoIkxJTkVTIik7Ci0JaWYgKHMpIGlmICghcmRpZ2l0cyhzKSkgewotCSAg ICBwcmludGYoIj9MSU5FUyB2YXJpYWJsZSBub3QgbnVtZXJpYzogXCIlc1wiLlxuIixzKTsKLQkg ICAgcHJpbnRmKCIoRnVsbHNjcmVlbiBkaXNwbGF5IGRpc2FibGVkKVxuIik7Ci0JICAgIGZkaXNw bGEgPSBYWUZEX1M7Ci0JICAgIHJldHVybjsKLQl9Ci0JcyA9IGdldGVudigiQ09MVU1OUyIpOwot CWlmIChzKSBpZiAoIXJkaWdpdHMocykpIHsKLQkgICAgcHJpbnRmKCI/Q09MVU1OUyB2YXJpYWJs ZSBub3QgbnVtZXJpYzogXCIlc1wiLlxuIixzKTsKLQkgICAgcHJpbnRmKCIoRnVsbHNjcmVlbiBk aXNwbGF5IGRpc2FibGVkKVxuIik7Ci0JICAgIGZkaXNwbGEgPSBYWUZEX1M7Ci0JICAgIHJldHVy bjsKLQl9Ci0gICAgICAgIGNlbmR3ID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogTmV3IHdp bmRvdyBuZWVkcyByZXBhaW50aW5nICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBpZiAoIWlu aXRzY3IoKSkgeyAgICAgICAgICAgICAgIC8qIE9vcHMsIGNhbid0IGluaXRpYWxpemUgd2luZG93 PyAqLwotLyoKLSAgSW4gZmFjdCwgdGhpcyBkb2Vzbid0IGhhcHBlbi4gICJtYW4gY3Vyc2VzIiBz YXlzIGluaXRzY3IoKSBoYWx0cyB0aGUKLSAgZW50aXJlIHByb2dyYW0gaWYgaXQgZmFpbHMsIHdo aWNoIGlzIHRydWUgb24gdGhlIHN5c3RlbXMgd2hlcmUgSSd2ZQotICB0ZXN0ZWQgaXQuICBJdCB3 aWxsIGZhaWwgaWYgeW91ciB0ZXJtaW5hbCB0eXBlIGlzIG5vdCBrbm93biB0byBpdC4KLSAgVGhh dCdzIHdoeSBTRVQgRklMRSBESVNQTEFZIEZVTExTQ1JFRU4gY2FsbHMgdGdldGVudCgpIHRvIG1h a2Ugc3VyZSB0aGUKLSAgdGVybWluYWwgdHlwZSBpcyBrbm93biBiZWZvcmUgYWxsb3dpbmcgYSBj dXJzZXMgZGlzcGxheS4KLSovCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiQ1VSU0VTIElO SVRTQ1IgRVJST1JcclxuIik7Ci0gICAgICAgICAgICBmZGlzcGxhID0gWFlGRF9TOyAgICAgICAg ICAgLyogRmFsbCBiYWNrIHRvIENSVCBkaXNwbGF5ICovCi0gICAgICAgICAgICByZXR1cm47Ci0g ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjaW5pdCsrOyAgICAgICAgICAgICAgICAgICAg LyogV2luZG93IGluaXRpYWxpemVkIG9rICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJDVVJT RVMgSU5JVFNDUiBPSyIsIiIsMCk7Ci0gICAgICAgIH0KLSNlbHNlICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTYXZlIHNvbWUgbWVtb3J5LiAqLwotI2lmZGVmIENLX05FV1RF Uk0KLSAgICAgICAgLyogKEZyb20gQW5keSBGeWZlIDxhbmR5QHZsc2kuY3MuY2FsdGVjaC5lZHU+ KQotICAgICAgICAgICBTeXN0ZW0gViBjdXJzZXMgc2VlbXMgdG8gcmVzZXJ2ZSB0aGUgcmlnaHQg dG8gYWx0ZXIgdGhlIGJ1ZmZlcmluZwotICAgICAgICAgICBvbiB0aGUgb3V0cHV0IEZJTEUqIHdp dGhvdXQgcmVzdG9yaW5nIGl0LiAgRm9ydHVuYXRlbHkgU3lzdGVtIFYKLSAgICAgICAgICAgY3Vy c2VzIHByb3ZpZGVzIG5ld3Rlcm0oKSwgYW4gYWx0ZXJuYXRpdmUgdG8gaW5pdHNjcigpLCB0aGF0 Ci0gICAgICAgICAgIGFsbG93cyB1cyB0byBzcGVjaWZ5IGV4cGxpY2l0bHkgdGhlIHRlcm1pbmFs IHR5cGUgYW5kIGlucHV0IGFuZAotICAgICAgICAgICBvdXRwdXQgRklMRSBwb2ludGVycy4gIFRo dXMgd2UgZHVwbGljYXRlIHN0ZG91dCwgYW5kIGxldCBjdXJzZXMKLSAgICAgICAgICAgaGF2ZSB0 aGUgY29weS4gIFRoZSBvcmlnaW5hbCByZW1haW5zIHVuYWx0ZXJlZC4gIFVuZm9ydHVuYXRlbHks Ci0gICAgICAgICAgIG5ld3Rlcm0oKSBzZWVtcyB0byBiZSBwYXJ0aWN1bGFyIHRvIFN5c3RlbSBW LgotICAgICAgICAqLwotICAgICAgICBzID0gZ2V0ZW52KCJURVJNIik7Ci0gICAgICAgIGlmIChj a19mZCA8IDApIHsKLSAgICAgICAgICAgIGNrX2ZkID0gZHVwKGZpbGVubyhzdGRvdXQpKTsKLSAg ICAgICAgICAgIGNrX3N0ZG91dCA9IChja19mZCA+PSAwKSA/IChGSUxFICopZmRvcGVuKGNrX2Zk LCAidyIpIDogTlVMTDsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIG5l d3Rlcm0uLi4iLCIiLDApOwotCi0vKiBOT1RFOiBJdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gZG8g dGhpcyB3aXRoIHN0ZGluIHRvbyEgKi8KLS8qIFRoaXMgd291bGQgaGF2ZSBiZWVuIHRoZSBjYXNl IGluIEZyZWVCU0QgNC4xIGJ1dCB0aGV5IGZpeGVkIHRoZSAqLwotLyogcHJvYmxlbSBieSByZXN0 b3JpbmcgdGhlIGJ1ZmZlcmluZyBvZiBzdGRpbiBiZWZvcmUgdGhlIGZpbmFsIHJlbGVhc2UuICov Ci0vKiAoQnV0IFQuRS4gRGlja2V5IHNheXMgc3RkaW4gaXMgbm90IGJ1ZmZlcmVkPykgKi8KLQot ICAgICAgICBpZiAoY2tfc3Rkb3V0ID09IE5VTEwgfHwgbmV3dGVybShzLCBja19zdGRvdXQsIHN0 ZGluKSA9PSAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAg IkZ1bGxzY3JlZW4gZGlzcGxheSBub3Qgc3VwcG9ydGVkIGZvciB0ZXJtaW5hbCB0eXBlOiAlc1xy XG4iLHMpOwotICAgICAgICAgICAgZmRpc3BsYSA9IFhZRkRfUzsgICAgICAgICAgIC8qIFVzZSBD UlQgaW5zdGVhZCAqLwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGRl YnVnKEYxMDAsInNjcmVlbmMgbmV3dGVybSBvayIsIiIsMCk7Ci0jZWxzZQotICAgICAgICBkZWJ1 ZyhGMTAwLCJzY3JlZW4gY2FsbGluZyBpbml0c2NyIiwiIiwwKTsKLSAgICAgICAgaW5pdHNjcigp OyAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcy4gKi8KLSAgICAgICAg ZGVidWcoRjEwMCwic2NyZWVuIGluaXRzY3Igb2siLCIiLDApOwotI2VuZGlmIC8qIENLX05FV1RF Uk0gKi8KLSAgICAgICAgY2luaXQrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJl ciBjdXJzZXMgd2FzIGluaXRpYWxpemVkLiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9 Ci0gICAgZnRfd2luID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93IGlzIG9w ZW4gKi8KLSAgICBpZiAocmVwYWludCkgewotI2lmZGVmIENLX1dSRUZSRVNICi0vKgotICBUaGlz IHRvdGFsbHkgcmVwYWludHMgdGhlIHNjcmVlbiwganVzdCB3aGF0IHdlIHdhbnQsIGJ1dCB3ZSBj YW4gb25seQotICBkbyB0aGlzIHdpdGggcmVhbCBjdXJzZXMsIGFuZCB0aGVuIG9ubHkgaWYgY2xl YXJvaygpIGFuZCB3cmVmcmVzaCgpIGFyZQotICBwcm92aWRlZCBpbiB0aGUgY3Vyc2VzIGxpYnJh cnkuCi0qLwotI2lmZGVmIE9TMgotICAgICAgICBSZXN0b3JlQ21kTW9kZSgpOwotI2Vsc2UKLSNp ZmRlZiBRTlgKLSNpZm5kZWYgUU5YMTYKLSAgICAgICAgY2xlYXJvayhzdGRzY3IsIDEpOyAgICAg ICAgICAgICAvKiBRTlggZG9lc24ndCBoYXZlIGN1cnNjciAqLwotI2VuZGlmIC8qIFFOWDE2ICov Ci0gICAgICAgIHdyZWZyZXNoKHN0ZHNjcik7Ci0jZWxzZQotICAgICAgICB3cmVmcmVzaChjdXJz Y3IpOwotI2VuZGlmIC8qIFFOWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2Vsc2UgIC8qIE5vIENL X1dSRUZSRVNIICovCi0vKgotICBLZXJtaXQncyBkby1pdC15b3Vyc2VsZiBtZXRob2QsIHdvcmtz IHdpdGggYWxsIHR5cGVzIG9mIGZ1bGxzY3JlZW4KLSAgc3VwcG9ydCwgYnV0IGRvZXMgbm90IHJl cGFpbnQgYWxsIHRoZSBmaWVsZHMuICBGb3IgZXhhbXBsZSwgdGhlIGZpbGVuYW1lCi0gIGlzIGxv c3QsIGJlY2F1c2UgaXQgYXJyaXZlcyBhdCBhIGNlcnRhaW4gdGltZSBhbmQgbmV2ZXIgY29tZXMg YWdhaW4sIGFuZAotICBLZXJtaXQgcHJlc2VudGx5IGRvZXMgbm90IHNhdmUgaXQgYW55d2hlcmUu ICBNYWtpbmcgdGhpcyBtZXRob2Qgd29yayBmb3IKLSAgYWxsIGZpZWxkcyB3b3VsZCBiZSBhIHJh dGhlciBtYWpvciByZWNvZGluZyB0YXNrLCBkdXBsaWNhdGluZyB3aGF0IGN1cnNlcwotICBhbHJl YWR5IGRvZXMsIGFuZCB3b3VsZCBhZGQgYSBsb3Qgb2YgY29tcGxleGl0eSBhbmQgc3RvcmFnZSBz cGFjZS4KLSovCi0gICAgICAgIGNlbmR3ID0gMTsKLSNlbmRpZiAvKiBDS19XUkVGUkVTSCAqLwot ICAgICAgICByZXBhaW50ID0gMDsKLSAgICB9Ci0gICAgaWYgKGNlbmR3KSB7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogZW5kd2luKCkgd2FzIGNhbGxlZCBwcmV2aW91c2x5ICovCi0jaWZkZWYg Vk1TCi0gICAgICAgIGluaXRzY3IoKTsgICAgICAgICAgICAgICAgICAgICAgLyogKG9yIHNob3Vs ZCBoYXZlIGJlZW4hKSAqLwotICAgICAgICBjbGVhcigpOwotICAgICAgICB0b3VjaHdpbihzdGRz Y3IpOwotICAgICAgICByZWZyZXNoKCk7Ci0jZWxzZQotI2lmZGVmIFFOWAotLyoKLSAgSW4gUU5Y LCBpZiB3ZSBkb24ndCBjYWxsIGluaXRzY3IoKSBoZXJlIHdlIGNvcmUgZHVtcC4KLSAgSSBkb24n dCBoYXZlIGFueSBRTlggY3Vyc2VzIGRvY3VtZW50YXRpb24sIGJ1dCBvdGhlciBjdXJzZXMgbWFu dWFscwotICBzYXkgdGhhdCBpbml0c2NyKCkgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2UgcGVy IGFwcGxpY2F0aW9uLCBhbmQKLSAgZXhwZXJpZW5jZSBzaG93cyB0aGF0IG9uIG90aGVyIHN5c3Rl bXMsIGNhbGxpbmcgaW5pdHNjcigpIGhlcmUgZ2VuZXJhbGx5Ci0gIHJlc3VsdHMgaW4gYSBjb3Jl IGR1bXAuCi0qLwotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIHJlLWNhbGxpbmcgaW5pdHNj ciBRTlgiLCIiLDApOwotICAgICAgICBpbml0c2NyKCk7Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAg ICAgIHJlZnJlc2goKTsKLSNpZmRlZiBDT01NRU5UCi0vKgotICBCdXQgZXZlbiBzbywgc2Vjb25k IGFuZCBzdWJzZXF1ZW50IGN1cnNlcyBkaXNwbGF5cyBhcmUgbWVzc2VkIHVwLgotICBDYWxsaW5n IHRvdWNod2luLCByZWZyZXNoLCBldGMsIGRvZXNuJ3QgbWFrZSBhbnkgZGlmZmVyZW5jZS4KLSov Ci0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgY2FsbGluZyB0b3VjaHdpbiBRTlgiLCIiLDAp OwotICAgICAgICB0b3VjaHdpbihzdGRzY3IpOwotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5j IGNhbGxpbmcgcmVmcmVzaCBRTlgiLCIiLDApOwotICAgICAgICByZWZyZXNoKCk7Ci0jZW5kaWYg LyogQ09NTUVOVCAqLwotCi0jZWxzZSAvKiBBbGwgb3RoZXJzLi4uICovCi0gICAgICAgIGRlYnVn KEYxMDAsInNjcmVlbmMgY2FsbGluZyBjbGVhciIsIiIsMCk7Ci0gICAgICAgIGNsZWFyKCk7Ci0g ICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgY2xlYXIgb2siLCIiLDApOwotI2VuZGlmIC8qIFFO WCAqLwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIHNldHVw IG9rIiwiIiwwKTsKLSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBkb2luZyBmaXJzdCBtb3Zl IiwiIiwwKTsKLSAgICAgICAgbW92ZShDV19CQU4sMCk7ICAgICAgICAgICAgICAgICAvKiBEaXNw bGF5IHRoZSBiYW5uZXIgKi8KLSAgICAgICAgZGVidWcoRjExMCwic2NyZWVuYyBteWhvc3QiLG15 aG9zdCwwKTsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICAgICAgZGVidWcoRjExMCwic2NyZWVuYyBt eWlwYWRkciIsbXlpcGFkZHIsMCk7Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0jaWZkZWYgSFBV WDEwMTAKLSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBjYWxsaW5nIGZpcnN0IHByaW50dy4u LiIsIiIsMCk7Ci0vKiBSaWdodCBoZXJlIGlzIHdoZXJlIEhQLVVYIDEwLjEwIGxpYnhjdXJzZS4x IFJldiA3Ni4yMCBoYW5ncy4uLiAqLwotI2VuZGlmIC8qIEhQVVgxMDEwICovCi0gICAgICAgIGlm IChteWhvc3RbMF0pIHsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICAgICAgICAgIGlmICghbXlpcGFk ZHJbMF0KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgLyogV2UgbmVlZCB0byBwZXJmb3Jt IHRoaXMgdGVzdCBiZWNhdXNlIG9uIG5vbi1UQ1AvSVAgKi8KLSAgICAgICAgICAgICAgICAgLyog c3lzdGVtcyB0aGUgY2FsbCB0byBnZXRsb2NhbGlwYWRkcigpIHJlc3VsdHMgaW4gYSAgKi8KLSAg ICAgICAgICAgICAgICAgLyogRE5TIExvb2t1cCB3aGljaCB0YWtlcyBzZXZlcmFsIG1pbnV0ZXMg dG8gdGltZSBvdXQgKi8KLSAgICAgICAgICAgICAgICAgJiYgbmV0ICYmCi0gICAgICAgICAgICAg ICAgICh4bmV0ID09IE5FVF9UQ1BBIHx8IHhuZXQgPT0gTkVUX1RDUEIKLSNpZmRlZiBTU0hCVUlM VElOCi0gICAgICAgICAgICAgICAgICB8fCB4bmV0ID09IE5FVF9TU0gKLSNlbmRpZiAvKiBTU0hC VUlMVElOICovCi0gICAgICAgICAgICAgICAgICApCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAg ICAgICAgICAgICkKLSAgICAgICAgICAgICAgZ2V0bG9jYWxpcGFkZHIoKTsKLSAgICAgICAgICAg IGlmIChteWlwYWRkclswXSAmJiBzdHJjbXAoKGNoYXIgKilteWhvc3QsKGNoYXIgKilteWlwYWRk cikpCi0gICAgICAgICAgICAgIHByaW50dygiJXMsICVzIFslc10iLHZlcnNpbywoY2hhciAqKW15 aG9zdCwoY2hhciAqKW15aXBhZGRyKTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KLSAgICAgICAgICAgICAgcHJpbnR3KCIlcywgJXMiLHZlcnNpbywoY2hhciAqKW15 aG9zdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludHcoIiVzIix2ZXJzaW8p OwotICAgICAgICB9Ci0jaWZkZWYgSFBVWDEwMTAKLSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVu YyBmaXJzdCBwcmludHcgcmV0dXJucyIsIiIsMCk7Ci0jZW5kaWYgLyogSFBVWDEwMTAgKi8KLSAg ICAgICAgbW92ZShDV19ESVIsMyk7Ci0gICAgICAgIHByaW50dygiQ3VycmVudCBEaXJlY3Rvcnk6 ICVzIix6Z3RkaXIoKSk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0 UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRElSLCAobG9uZykgemd0ZGly KCkgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGlmIChu ZXQpIHsKLSAgICAgICAgICAgIG1vdmUoQ1dfTElOLDgpOwotICAgICAgICAgICAgcHJpbnR3KCJO ZXR3b3JrIEhvc3Q6ICVzIiwKLSNpZmRlZiBORVdGVFAKLQkJICAgZnRwID8gKGZ0cF9ob3N0ID8g ZnRwX2hvc3QgOiAiKHVua25vd24pIikgOgotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCQkgICB0dG5h bWUKLQkJICAgKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1vdmUoQ1dfTElOLDAp OwotICAgICAgICAgICAgcHJpbnR3KCJDb21tdW5pY2F0aW9uIERldmljZTogJXMiLHR0bmFtZSk7 Ci0gICAgICAgIH0KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19MSU4sIChsb25nKSB0dG5hbWUgKTsK LSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0KLSAgICAgICAgaWYgKG5ldCkg ewotICAgICAgICAgICAgbW92ZShDV19TUEQsOCk7Ci0gICAgICAgICAgICBwcmludHcoIk5ldHdv cmsgVHlwZTogIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtb3ZlKENXX1NQRCwx KTsKLSAgICAgICAgICAgIHByaW50dygiQ29tbXVuaWNhdGlvbiBTcGVlZDogIik7Ci0gICAgICAg IH0KLSAgICAgICAgbW92ZShDV19TUEQsMjIpOyAgICAgICAgICAgICAgICAvKiBTZXJpYWwgc3Bl ZWQgb3IgbmV0d29yayB0eXBlICovCi0gICAgICAgIGlmIChuZXQpIHsKLSNpZmRlZiBORVRDT05O Ci0JICAgIGludCBzZWN1cmUgPSAwOwotCSAgICBjaGFyICogeG5hbWU7Ci0JICAgIGlmICh4bmV0 ID4gbm5ldG5hbWUpCi0JICAgICAgeG5hbWUgPSAiW0VSUk9SXSI7Ci0JICAgIGVsc2UKLQkgICAg ICB4bmFtZSA9IG5ldG5hbWVbeG5ldF07Ci0jaWZkZWYgTkVXRlRQCi0gICAgICAgICAgICBpZiAo ZnRwKSB7Ci0JCWlmIChmdHBpc3NlY3VyZSgpKQotCQkgIHNlY3VyZSA9IDE7Ci0JICAgIH0gZWxz ZQotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCSAgICAgIGlmICgwCi0jaWZkZWYgU1NIQlVJTFRJTgot ICAgICAgICAgICAgICAgIHx8IElTX1NTSCgpCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotI2lm ZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICB8fCBja190bl9lbmNyeXB0aW5nKCkg JiYgY2tfdG5fZGVjcnlwdGluZygpCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVm IENLX1NTTAotICAgICAgICAgICAgICAgIHx8IHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZl X2ZsYWcKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBSTE9HQ09ERQotI2lmZGVmIENLX0tF UkJFUk9TCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgIHx8IHR0bnByb3Rv ID09IE5QX0VLNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOCi0jZW5kaWYgLyogQ0tf RU5DUllQVElPTiAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0jZW5kaWYgLyogUkxPR0NP REUgKi8KLSAgICAgICAgICAgICAgICAgKSB7Ci0JCXNlY3VyZSA9IDE7Ci0JICAgIH0KLQkgICAg aWYgKHNlY3VyZSkgewotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAg Y2hhciBidWZbMzBdOwotICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCIlcyAoU0VDVVJFKSIs eG5hbWUpOwotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVS LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGJ1ZgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAg ICAgICAgICAgIHByaW50dygiJXMgKFNFQ1VSRSkiLHhuYW1lKTsKLSAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIseG5hbWUpOwotI2lmZGVmIEtVSQotI2lm bmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNG RVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgeG5hbWUKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAg ICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBwcmludHcoIihuZXR3b3JrKSIpOwotI2lm ZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklM RV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIihuZXR3b3JrKSIKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwot I2VuZGlmIC8qIE5FVENPTk4gKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChz cGVlZCA8IDBMKQotICAgICAgICAgICAgICBzcGVlZCA9IHR0Z3NwZCgpOwotICAgICAgICAgICAg aWYgKHNwZWVkID4gMEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3BlZWQgPT0gODg4MCkgewot ICAgICAgICAgICAgICAgICAgICBwcmludHcoIjc1LzEyMDAiKTsKLSNpZmRlZiBLVUkKLSNpZm5k ZWYgSzk1RwotICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICI3NS8xMjAwIgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNl bmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg ICAgICBjaGFyIHNwZWVkYnVmWzY0XSA7Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYoc3Bl ZWRidWYsICIlbGQiLCBzcGVlZCk7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50dygiJXMiLHNw ZWVkYnVmKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgICAgICAgICBL dWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpIHNwZWVkYnVmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCJ1bmtub3du Iik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgQ1dfU1BELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKHVu a25vd24pIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1 RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg IG1vdmUoQ1dfUEFSLDE0KTsKLSAgICAgICAgcHJpbnR3KCJQYXJpdHk6ICVzIixmdHAgPyAibm9u ZSIgOiBwYXJuYW0oKGNoYXIpcGFyaXR5KSk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAg ICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBDV19QQVIsCi0gICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBwYXJu YW0oKGNoYXIpcGFyaXR5KQotICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5 NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDS19USU1FUlMKLSAgICAgICAgaWYgKC8q IHJ0dGZsZyAmJiAqLyBwcm90b2NvbCA9PSBQUk9UT19LKSB7Ci0gICAgICAgICAgICBtb3ZlKENX X1RNTywgOSk7IHByaW50dygiUlRUL1RpbWVvdXQ6Iik7IH0KLSNlbmRpZiAvKiBDS19USU1FUlMg Ki8KLSAgICAgICAgbW92ZShDV19UWVAsMTEpOyBwcmludHcoIkZpbGUgVHlwZToiKTsKLSAgICAg ICAgbW92ZShDV19TSVosMTEpOyBwcmludHcoIkZpbGUgU2l6ZToiKTsKLSAgICAgICAgbW92ZShD V19QQ0QsIDgpOwotICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICBwY3RsYmwgPSAod2hhdCAm IFdfU0VORCk7Ci0gICAgICAgIHByaW50dygiJXM6IiwgcGN0bGJsID8gIlBlcmNlbnQgRG9uZSIg OiAiQnl0ZXMgU28gRmFyIik7Ci0KLSNpZmRlZiBYWVpfSU5URVJOQUwKLSAgICAgICAgbW92ZShD V19CQVIsIDEpOwotICAgICAgICBwcmludHcoIiUxMHMgUHJvdG9jb2w6IiwgZnRwID8gIkZUUCIg OiBwdGFiW3Byb3RvY29sXS5wX25hbWUpOwotI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLwotI2lm ZGVmIENLX1BDVF9CQVIKLSAgICAgICAgaWYgKHRoZXJtb21ldGVyKSB7Ci0gICAgICAgICAgICBv bGRwY3QgPSBwY3QgPSAwOwotICAgICAgICAgICAgbW92ZShDV19CQVIsMjIpOwotICAgICAgICAg ICAgcHJpbnR3KCIgICAgLi4uMTAuLi4yMC4uLjMwLi4uNDAuLi41MC4uLjYwLi4uNzAuLi44MC4u LjkwLi4xMDAiKTsKLSAgICAgICAgICAgIG1vdmUoQ1dfQkFSLDIyKzU2KTsKLSAgICAgICAgfQot I2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KLSAgICAgICAgbW92ZShDV19UUiwgIDEpOyBwcmludHco IkVzdGltYXRlZCBUaW1lIExlZnQ6Iik7Ci0gICAgICAgIG1vdmUoQ1dfQ1AsICAyKTsgcHJpbnR3 KCJUcmFuc2ZlciBSYXRlLCBDUFM6Iik7Ci0gICAgICAgIG1vdmUoQ1dfV1MsICA4KTsgcHJpbnR3 KCJXaW5kb3cgU2xvdHM6JXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBy b3RvY29sID09IFBST1RPX0spICYmICFmdHApID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIiIgOiAiIE4vQSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgbW92ZShDV19QVCwgIDkpOyBwcmludHcoIlBhY2tldCBUeXBlOiIpOwotICAgICAgICBp ZiAoZnRwIHx8IHByb3RvY29sICE9IFBST1RPX0spIHsKLQkgICAgbW92ZShDV19QVCwyMik7Ci0g ICAgICAgICAgICBwcmludHcoIiVzIiwgIk4vQSIpOwotICAgICAgICAgICAgbW92ZShDV19QQywg IDExKTsgcHJpbnR3KCJJL08gQ291bnQ6Iik7Ci0gICAgICAgICAgICBtb3ZlKENXX1BMLCAgMTAp OyBwcmludHcoIkkvTyBMZW5ndGg6Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBt b3ZlKENXX1BDLCAgOCk7IHByaW50dygiUGFja2V0IENvdW50OiIpOwotICAgICAgICAgICAgbW92 ZShDV19QTCwgIDcpOyBwcmludHcoIlBhY2tldCBMZW5ndGg6Iik7Ci0gICAgICAgIH0KLSNpZm5k ZWYgQ09NTUVOVAotICAgICAgICBtb3ZlKENXX1BSLCAgOSk7IHByaW50dygiRXJyb3IgQ291bnQ6 Iik7Ci0jZWxzZQotICAgICAgICBtb3ZlKENXX1BSLCAgMik7IHByaW50dygiUGFja2V0IFJldHJ5 IENvdW50OiIpOwotI2VuZGlmCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBtb3ZlKENXX1BCLCAg Mik7IHByaW50dygiUGFja2V0IEJsb2NrIENoZWNrOiIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSAgICAgICAgbW92ZShDV19FUlIsMTApOyBwcmludHcoIkxhc3QgRXJyb3I6Iik7Ci0gICAgICAg IG1vdmUoQ1dfTVNHLCA4KTsgcHJpbnR3KCJMYXN0IE1lc3NhZ2U6Iik7Ci0JaWYgKHhmcm1zZykg ewotCSAgICBtb3ZlKENXX01TRywgMjIpOyBwcmludHcoIiVzIix4ZnJtc2cpOwotCSAgICBtYWtl c3RyKCZ4ZnJtc2csTlVMTCk7Ci0JfQotICAgICAgICBtb3ZlKENXX0lOVCwgMCk7Ci0gICAgICAg IGlmICgheGZyaW50KSB7Ci0gICAgICAgICAgICBwcmludHcoIihUcmFuc2ZlciBpbnRlcnJ1cHRp b24gaXMgZGlzYWJsZWQpIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgQ0tfTkVFRF9TSUcK LSAgICAgICAgICAgIHByaW50dygKLSI8JXM+WCB0byBjYW5jZWwgZmlsZSwgPCVzPlogdG8gY2Fu Y2VsIGdyb3VwLCA8JXM+PENSPiB0byByZXNlbmQgbGFzdCBwYWNrZXQiLAotICAgICAgICAgICAg ICAgICAgIGRiY2hyKGVzY2FwZSksIGRiY2hyKGVzY2FwZSksIGRiY2hyKGVzY2FwZSkKLSAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgbW92ZShDV19JTlQgKyAxLCAwKTsKLSAgICAg ICAgICAgIHByaW50dygKLSI8JXM+RSB0byBzZW5kIEVycm9yIHBhY2tldCwgXkMgdG8gcXVpdCBp bW1lZGlhdGVseSwgPCVzPkwgdG8gcmVmcmVzaCBzY3JlZW4uIiwKLSAgICAgICAgICAgICAgICAg ICBkYmNocihlc2NhcGUpLCBkYmNocihlc2NhcGUpCi0gICAgICAgICAgICAgICAgICAgKTsKLSNl bHNlIC8qICFDS19ORUVEX1NJRyAqLwotICAgICAgICAgICAgbW92ZShDV19JTlQsIDApOwotI2lm ZGVmIE9TMgotICAgICAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0spIHsKLSAgICAgICAg ICAgICAgICBwcmludHcoCi0iWCB0byBjYW5jZWwgZmlsZSwgWiB0byBjYW5jZWwgZ3JvdXAsIDxF bnRlcj4gdG8gcmVzZW5kIGxhc3QgcGFja2V0LCIKLSAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgIH0KLSNlbHNlIC8qICFPUzIgKi8KLSNpZmRlZiBWTVMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBJbiBWTVMgYXZvaWQgYm90dG9tIGxpbmUgKi8KLSAgICAgICAg ICAgIHByaW50dygKLSJYOiBDYW5jZWwgdGhpcyBmaWxlOyBFOiBDYW5jZWwgdHJhbnNmZXI7IF5D OiBRdWl0IG5vdzsgXlc6IFJlZnJlc2ggc2NyZWVuLiIKLSAgICAgICAgICAgICAgICAgICApOwot I2Vsc2UKLSAgICAgICAgICAgIHByaW50dygKLSJYIHRvIGNhbmNlbCBmaWxlLCBaIHRvIGNhbmNl bCBncm91cCwgPENSPiB0byByZXNlbmQgbGFzdCBwYWNrZXQsIgotICAgICAgICAgICAgICAgICAg ICk7Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgVk1TCi0g ICAgICAgICAgICBtb3ZlKENXX0lOVCArIDEsIDApOwotICAgICAgICAgICAgaWYgKHByb3RvY29s ID09IFBST1RPX0spIHsKLSAgICAgICAgICAgICAgICBwcmludHcoCi0iRSB0byBzZW5kIEVycm9y IHBhY2tldCwgXkMgdG8gcXVpdCBpbW1lZGlhdGVseSwgXkwgdG8gcmVmcmVzaCBzY3JlZW4uIgot ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICBwcmludHcoIl5DIHRvIGNhbmNlbCBmaWxlIHRyYW5zZmVyLiIpOwotICAgICAgICAg ICAgfQotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIENLX05FRURfU0lHICovCi0gICAgICAg IH0KLSAgICAgICAgcmVmcmVzaCgpOwotICAgICAgICBjZW5kdyA9IDA7Ci0gICAgfQotICAgIGRl YnVnKEYxMDEsIlNDUkVFTkMgc3dpdGNoIiwiIixmKTsKLSAgICBkZWJ1ZyhGMDAwLCJTQ1JFRU5D IGMiLCIiLGMpOwotICAgIGRlYnVnKEYxMDEsIlNDUkVFTkMgbiIsIiIsbik7Ci0KLSAgICBsZW4g PSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgYXJndW1lbnQgc3Ry aW5nICovCi0gICAgc3dpdGNoIChmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxl IG91ciBmdW5jdGlvbiBjb2RlICovCi0gICAgICBjYXNlIFNDUl9GTjogICAgICAgICAgICAgICAg ICAgICAgLyogRmlsZW5hbWUgKi8KLSAgICAgICAgb2xkcGN0ID0gcGN0ID0gMEw7ICAgICAgICAg ICAgICAvKiBSZXNldCBwZXJjZW50cyAqLwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgZ3R2ID0g KENLRkxPQVQpIC0xLjA7Ci0gICAgICAgIC8qIG9sZGd0diA9IChDS0ZMT0FUKSAtMS4wOyAqLwot I2Vsc2UKLSAgICAgICAgZ3R2ID0gLTFMOwotICAgICAgICAvKiBvbGRndHYgPSAtMUw7ICovCi0j ZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgICAgICBvbGR3aW4gPSAtMTsKLSAgICAgICAgZnNpeiA9 IChDS19PRkZfVCktMTsJCS8qIEludmFsaWRhdGUgcHJldmlvdXMgZmlsZSBzaXplICovCi0gICAg ICAgIG1vdmUoQ1dfUENELDIyKTsgICAgICAgICAgICAgICAgLyogRXJhc2UgcGVyY2VudCBkb25l IGZyb20gbGFzdCB0aW1lICovCi0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUENELCAobG9uZykgMCAp OwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19G RkMsIChsb25nKSAwICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAg ICAgICBjbHJ0b2VvbCgpOwotICAgICAgICBtb3ZlKENXX1NJWiwyMik7ICAgICAgICAgICAgICAg IC8qIEVyYXNlIGZpbGUgc2l6ZSBmcm9tIGxhc3QgdGltZSAqLwotI2lmZGVmIEtVSQotI2lmbmRl ZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX1NJWiwgKGxvbmcpIDAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICov Ci0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsgICAgICAgICAg ICAgICAgLyogQW5kIGxhc3QgZXJyb3IgbWVzc2FnZSAqLwotI2lmZGVmIEtVSQotI2lmbmRlZiBL OTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENX X0VSUiwgKGxvbmcpICIiICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwot ICAgICAgICBjbHJ0b2VvbCgpOwotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBTVFJFQU1JTkcKLSAg ICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0sgJiYgc3RyZWFtb2spIHsKLSAgICAgICAgICAg IG1vdmUoQ1dfQkFSLCAxKTsKLSNpZmRlZiBYWVpfSU5URVJOQUwKLSAgICAgICAgICAgIHByaW50 dygiICAgS2VybWl0IFNUUkVBTUlORzoiKTsKLSNlbHNlCi0gICAgICAgICAgICBwcmludHcoIiAg ICAgICAgICBTVFJFQU1JTkc6Iik7Ci0jZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCi0gICAgICAg IH0KLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAg ICAgaWYgKHdoYXQgJiBXX1NFTkQpIHsJCS8qIElmIHdlJ3JlIHNlbmRpbmcuLi4gKi8KLSNpZmRl ZiBORVdGVFAKLQkgICAgaWYgKHdoYXQgJiBXX0ZUUCkgewkJLyogRlRQICovCi0gICAgICAgICAg ICAgICAgbW92ZShDV19OQU0sMTApOwotICAgICAgICAgICAgICAgIHByaW50dygiICAgRlRQIFBV VDoiKTsKLQkgICAgfSBlbHNlCi0jZW5kaWYgLyogTkVXRlRQICovCi0jaWZkZWYgQ0tfUkVTRU5E Ci0gICAgICAgICAgICBzd2l0Y2ggKHNlbmRtb2RlKSB7CQkvKiBLZXJtaXQgKi8KLSAgICAgICAg ICAgICAgY2FzZSBTTV9SRVNFTkQ6Ci0gICAgICAgICAgICAgICAgbW92ZShDV19OQU0sMTApOwot ICAgICAgICAgICAgICAgIHByaW50dygiIFJFU0VORElORzoiKTsKLSAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBtb3ZlKENXX05B TSwxMCk7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCIgICBTRU5ESU5HOiIpOwotICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgIG1vdmUoQ1df TkFNLDEwKTsKLSAgICAgICAgICAgIHByaW50dygiICAgU0VORElORzoiKTsKLSNlbmRpZiAvKiBD S19SRVNFTkQgKi8KLQotICAgICAgICB9IGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIHsJLyogSWYg d2UncmUgcmVjZWl2aW5nLi4uICovCi0jaWZkZWYgTkVXRlRQCi0JICAgIGlmICh3aGF0ICYgV19G VFApIHsJCS8qIEZUUCAqLwotICAgICAgICAgICAgICAgIG1vdmUoQ1dfTkFNLDEwKTsKLSAgICAg ICAgICAgICAgICBwcmludHcoIiAgIEZUUCBHRVQ6Iik7Ci0JICAgIH0gZWxzZSB7Ci0jZW5kaWYg LyogTkVXRlRQICovCi0JCW1vdmUoQ1dfTkFNLDEwKTsKLQkJcHJpbnR3KCIgUkVDRUlWSU5HOiIp OwotI2lmZGVmIE5FV0ZUUAotCSAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAod2hhdCA9PSAoV19G VFB8V19GVF9ERUxFKSkgewotCQltb3ZlKENXX05BTSwxMCk7Ci0JCXByaW50dygiRlRQIERFTEVU RToiKTsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBJZiB3ZSBkb24ndCBrbm93Li4uICovCi0gICAgICAgICAgICBtb3ZlKENX X05BTSwxMCk7ICAgICAgICAgICAgLyogKHNob3VsZCBuZXZlciBzZWUgdGhpcykgKi8KLSAgICAg ICAgICAgIHByaW50dygiIEZpbGUgTmFtZToiKTsKLSAgICAgICAgfQotICAgICAgICBtb3ZlKENX X05BTSwyMik7ICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgdGhlIGZpbGVuYW1lICovCi0gICAg ICAgIGlmIChsZW4gPiA1NykgewotICAgICAgICAgICAgcHJpbnR3KCIlLjU1cy4uIixzKTsKLSAg ICAgICAgICAgIGxlbiA9IDU3OwotICAgICAgICB9IGVsc2UgcHJpbnR3KCIlcyIscyk7Ci0jaWZk ZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNl bmRpZiAvKiBLVUkgKi8KLSAgICAgICAgcSA9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAv KiBSZW1lbWJlciBuYW1lIGxlbmd0aCBmb3IgbGF0ZXIgKi8KLSAgICAgICAgY2xydG9lb2woKTsK LSAgICAgICAgc2NyZnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IGZpbGUg dHlwZSAoY2FuIGNoYW5nZSkgKi8KLSAgICAgICAgcmVmcmVzaCgpOwotI2lmZGVmIE9TMgotICAg ICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJu OwotCi0gICAgICBjYXNlIFNDUl9BTjogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBhcy1u YW1lICovCi0gICAgICAgIGlmIChxICsgbGVuICsgNCA8IDU4KSB7ICAgICAgICAgLyogV2lsbCBm aXQgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfTkFNLCAyMiArIHEpOwotICAgICAgICAgICAgcHJp bnR3KCIgPT4gJXMiLHMpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBL dWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBz ICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICB9IGVsc2Ug eyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvbyBsb25nICovCi0gICAgICAgICAgICBtb3Zl KENXX05BTSwgMjIpOyAgICAgICAgICAgLyogT3ZlcndyaXRlIHByZXZpb3VzIG5hbWUgKi8KLSAg ICAgICAgICAgIHEgPSAwOwotICAgICAgICAgICAgaWYgKGxlbiArIDQgPiA1NykgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdnMTUgKi8KLSAgICAgICAgICAgICAgICBwcmlu dHcoIiA9PiAlLjUxcy4uIixzKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiB3ZzE1ICovCi0g ICAgICAgICAgICAgICAgbGVuID0gNTM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogd2cxNSAqLwotICAgICAgICAgICAgfSBlbHNlIHByaW50dygiID0+ICVzIixzKTsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdnMTUgKi8KLSNpZmRlZiBLVUkKLSNpZm5kZWYg Szk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfTkFNLCAobG9uZykgcyAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJ ICovCi0gICAgICAgIH0KLSAgICAgICAgcSArPSBsZW4gKyA0OyAgICAgICAgICAgICAgICAgICAv KiBSZW1lbWJlciBob3Jpem9udGFsIHBvc2l0aW9uICovCi0gICAgICAgIGNscnRvZW9sKCk7Ci0g ICAgICAgIHJlZnJlc2goKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7 Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfRlM6 ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgc2l6ZSAqLwotICAgICAgICBmc2l6ID0gbjsK LSAgICAgICAgbW92ZShDV19TSVosMjIpOwotICAgICAgICBpZiAoZnNpeiA+IChDS19PRkZfVCkt MSkgewotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0 eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19TSVosIChsb25nKSBuICk7Ci0jZW5kaWYg LyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgcHJpbnR3KCIlcyIsY2tm c3RvYShuKSk7Ci0gICAgICAgIH0KLQlpZiAoZnNpeiA9PSAtMkwpIHsKLQkgICAgcHJpbnR3KCJQ T1NTSUJMWSBFWENFRURTIExPQ0FMIEZJTEUgU0laRSBMSU1JVCIpOwotCX0KLSAgICAgICAgY2xy dG9lb2woKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIG1vdmUoQ1dfUENELCA4KTsKLSAgICAg ICAgaWYgKGZzaXogPiAoQ0tfT0ZGX1QpLTEpIHsJLyogUHV0IHVwIHBlcmNlbnQgbGFiZWwgKi8K LSAgICAgICAgICAgIHBjdGxibCA9IDE7Ci0JICAgIGNscnRvZW9sKCk7Ci0gICAgICAgICAgICBw cmludHcoIlBlcmNlbnQgRG9uZToiKTsKLSAgICAgICAgfQotI2Vsc2UKLQltb3ZlKENXX1BDRCwg OCk7Ci0JY2xydG9lb2woKTsKLSAgICAgICAgaWYgKGZzaXogPiAoQ0tfT0ZGX1QpLTEpIHsJLyog UHV0IHVwIHBlcmNlbnQgbGFiZWwgKi8KLSAgICAgICAgICAgIHBjdGxibCA9IDE7Ci0gICAgICAg ICAgICBwcmludHcoIlBlcmNlbnQgRG9uZToiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIHBjdGxibCA9IDA7Ci0gICAgICAgICAgICBwcmludHcoIkJ5dGVzIFNvIEZhcjoiKTsKLQl9 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICBzY3Jm dCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHlwZSAqLwotICAgICAgICByZWZy ZXNoKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX1BUOiAgICAgICAgICAg ICAgICAgICAgICAvKiBQYWNrZXQgdHlwZSBvciBwc2V1ZG90eXBlICovCi0gICAgICAgIGlmIChz cGFja2V0cyA8IDUpIHsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgc3lzaW5kZXg7Ci0gICAgICAg ICAgICBleHRlcm4gc3RydWN0IHN5c2RhdGEgc3lzaWRsaXN0W107Ci0gICAgICAgICAgICAvKiBU aGluZ3MgdGhhdCB3b24ndCBjaGFuZ2UgYWZ0ZXIgdGhlIDR0aCBwYWNrZXQgKi8KLSAgICAgICAg ICAgIG1vdmUoQ1dfUEFSLDIyKTsKLSAgICAgICAgICAgIHByaW50dygiJXMiLHBhcm5hbSgoY2hh cilwYXJpdHkpKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIENXX1BBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBwYXJuYW0o KGNoYXIpcGFyaXR5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBL OTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOwotI2lmZGVm IENPTU1FTlQKLSAgICAgICAgICAgIG1vdmUoQ1dfUEIsIDIyKTsgICAgICAgICAgICAvKiBCbG9j ayBjaGVjayBvbiB0aGlzIHBhY2tldCAqLwotICAgICAgICAgICAgaWYgKGJjdHUgPT0gNCkKLSAg ICAgICAgICAgICAgcHJpbnR3KCJCIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg IHByaW50dygiJWQiLGJjdHUpOwotICAgICAgICAgICAgY2xydG9lb2woKTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0gICAgICAgICAgICBpZiAoCi0jaWZkZWYgTkVXRlRQCi0JCShmdHAgJiYgKHNw YWNrZXRzID09IDEgfHwgcnBhY2tldHMgPT0gMSkpIHx8Ci0jZW5kaWYgLyogTkVXRlRQICovCi0J CXNwYWNrZXRzID09IDQKLQkJKSB7Ci0gICAgICAgICAgICAgICAgbW92ZShDV19MSU4sOCk7Ci0g ICAgICAgICAgICAgICAgaWYgKAotI2lmZGVmIE5FV0ZUUAotCQkgICAgZnRwIHx8Ci0jZW5kaWYg LyogTkVXRlRQICovCi0JCSAgICAoKHByb3RvY29sID09IFBST1RPX0spICYmIChzeXNpbmRleCA+ IC0xKSkKLQkJICAgICkgewotICAgICAgICAgICAgICAgICAgICBpZiAobmV0KSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBtb3ZlKENXX0xJTiw4KTsKLSAgICAgICAgICAgICAgICAgICAgICAg IHByaW50dygiTmV0d29yayBIb3N0OiAlcyAoJXMpIiwKLSNpZmRlZiBORVdGVFAKLQkJCSAgICAg ICBmdHAgPyAoZnRwX2hvc3QgPyBmdHBfaG9zdCA6ICIiKSA6Ci0jZW5kaWYgLyogTkVXRlRQICov Ci0JCQkgICAgICAgdHRuYW1lLAotI2lmZGVmIE5FV0ZUUAotCQkJICAgICAgIGZ0cCA/IGZ0cF9z cnZ0eXAgOgotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCQkJICAgICAgIHN5c2lkbGlzdFtzeXNpbmRl eF0uc2lkX25hbWUKLQkJCSAgICAgICApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgICAgICAgbW92ZShDV19MSU4sMCk7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBwcmludHcoIkNvbW11bmljYXRpb24gRGV2aWNlOiAlcyAocmVtb3RlIGhvc3QgaXMg JXMpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRuYW1lLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzeXNpZGxpc3Rbc3lzaW5kZXhdLnNpZF9uYW1lCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0KLSNpZmRlZiBDS19USU1FUlMKLSAgICAgICAgaWYgKC8qIHJ0dGZsZyAmJiAqLyBw cm90b2NvbCA9PSBQUk9UT19LKSB7Ci0gICAgICAgICAgICBsb25nIHh4OwotICAgICAgICAgICAg aWYgKAotI2lmZGVmIFNUUkVBTUlORwotICAgICAgICAgICAgICAgIHN0cmVhbWluZyAmJiBvbGR3 aW4gIT0gLTIKLSNlbHNlCi0gICAgICAgICAgICAgICAgMAotI2VuZGlmIC8qIFNUUkVBTUlORyAq LwotICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgIG1vdmUoQ1dfVE1PLCAyMik7 Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCIwMCAvIDAwIik7Ci0gICAgICAgICAgICAgICAgY2xy dG9lb2woKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgeHggPSAocnR0 ZGVsYXkgKyA1MDApIC8gMTAwMDsKLSAgICAgICAgICAgICAgICBpZiAoeHggIT0gb2xkcnR0IHx8 IHJjdnRpbW8gIT0gb2xkdGltKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1vdmUoQ1dfVE1PLCAy Mik7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50dygiJTAybGQgLyAlMDJkIiwgeHgsIHJjdnRp bW8pOwotICAgICAgICAgICAgICAgICAgICBvbGRydHQgPSB4eDsKLSAgICAgICAgICAgICAgICAg ICAgb2xkdGltID0gcmN2dGltbzsKLSAgICAgICAgICAgICAgICAgICAgY2xydG9lb2woKTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19U SU1FUlMgKi8KLQotICAgICAgICB4ID0gKHdoYXQgJiBXX1JFQ1YpID8gICAgICAgICAgLyogUGFj a2V0IGxlbmd0aCAqLwotICAgICAgICAgIHJwa3RsKyhwcm90b2NvbD09UFJPVE9fSz8xOjApIDoK LSAgICAgICAgICAgIHNwa3RsOwotICAgICAgICBpZiAoeCAhPSBvbGRsZW4pIHsgICAgICAgICAg ICAgIC8qIEJ1dCBvbmx5IGlmIGl0IGNoYW5nZWQuICovCi0gICAgICAgICAgICBtb3ZlKENXX1BM LCAyMik7Ci0gICAgICAgICAgICBwcmludHcoIiVkIix4KTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYg Szk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfUEwsIChsb25nKSB4ICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAq LwotICAgICAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgICAgIG9sZGxlbiA9IHg7Ci0gICAg ICAgIH0KLSAgICAgICAgbW92ZShDV19QQywgMjIpOyAgICAgICAgICAgICAgICAvKiBQYWNrZXQg Y291bnQgKGFsd2F5cykuICovCi0KLSAgICAgICAgcHJpbnR3KCIlZCIsICh3aGF0ICYgV19SRUNW KSA/IHJwYWNrZXRzIDogc3BhY2tldHMpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDLCAobG9u Zykgc3BhY2tldHMgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAg ICAgIGNscnRvZW9sKCk7Ci0KLSAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0sgJiYgIWZ0 cCkgeyAvKiBXaW5kb3cgc2xvdHMgKi8KLSAgICAgICAgICAgIGNoYXIgd3NbMTZdOwotICAgICAg ICAgICAgaW50IGZsYWc7Ci0gICAgICAgICAgICBmbGFnID0gMDsKLSNpZmRlZiBTVFJFQU1JTkcK LSAgICAgICAgICAgIGlmIChzdHJlYW1pbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAob2xkd2lu ICE9IC0yKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYod3MsIlNUUkVBTUlORyIpOwot ICAgICAgICAgICAgICAgICAgICBmbGFnID0gMTsKLSAgICAgICAgICAgICAgICAgICAgb2xkd2lu ID0gLTI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyog U1RSRUFNSU5HICovCi0gICAgICAgICAgICAgIGlmICh3Y3VyICE9IG9sZHdpbikgewotICAgICAg ICAgICAgICAgICAgc3ByaW50Zih3cywgIiVkIG9mICVkIiwgd2N1ciA8IDEgPyAxIDogd2N1ciwg d3Nsb3RuKTsKLSAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOwotICAgICAgICAgICAgICAgICAg b2xkd2luID0gd2N1cjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZsYWcpIHsK LSAgICAgICAgICAgICAgICBtb3ZlKENXX1dTLCAyMik7Ci0gICAgICAgICAgICAgICAgcHJpbnR3 KCIlcyIsIHdzKTsKLSAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOwotI2lmZGVmIEtVSQotI2lm bmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5T RkVSLCAobG9uZykgQ1dfV1MsIChsb25nKSB3cyApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRp ZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlcnJvcnMgPSBy ZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKLSAgICAgICAgaWYgKGVycm9ycyAhPSBvbGR0 cnkpIHsgICAgICAgICAvKiBSZXRyeSBjb3VudCwgaWYgY2hhbmdlZCAqLwotICAgICAgICAgICAg bW92ZShDV19QUiwgMjIpOwotICAgICAgICAgICAgcHJpbnR3KCIlZCIsZXJyb3JzKTsKLSNpZmRl ZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxF X1RSQU5TRkVSLCAobG9uZykgQ1dfUFIsIChsb25nKSBlcnJvcnMgKTsKLSNlbmRpZiAvKiBLOTVH ICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICAg ICAgb2xkdHJ5ID0gZXJyb3JzOwotICAgICAgICB9Ci0JLyogU2VuZGVyJ3MgcGFja2V0IHR5cGUg Ki8KLSAgICAgICAgaWYgKCFmdHAgJiYgKGMgIT0gb2xkdHlwICYmIGMgIT0gJ1knICYmIGMgIT0g J04nKSkgewotICAgICAgICAgICAgY2hhciB0eXBlWzJdOwotICAgICAgICAgICAgc3ByaW50Zih0 eXBlLCAiJWMiLGMpOwotICAgICAgICAgICAgbW92ZShDV19QVCwyMik7Ci0gICAgICAgICAgICBw cmludHcoIiVzIiwgdHlwZSk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAg IEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BULCAobG9uZykg dHlwZSApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAg IGNscnRvZW9sKCk7Ci0gICAgICAgICAgICBvbGR0eXAgPSBjOwotICAgICAgICB9Ci0gICAgICAg IHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAgICAgLyogTm93IGhhbmRsZSBzcGVjaWZpYyBw YWNrZXQgdHlwZXMgKi8KLSAgICAgICAgICBjYXNlICdTJzogICAgICAgICAgICAgICAgICAgICAv KiBCZWdpbm5pbmcgb2YgdHJhbnNmZXIgKi8KLSAgICAgICAgICAgIGZjbnQgPSBmYnl0ID0gMEw7 ICAgICAgICAgICAvKiBDbGVhciBjb3VudGVycyAqLwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAg ICAgIGd0diA9IC0xLjA7Ci0jZWxzZSAvKiBHRlRJTUVSICovCi0gICAgICAgICAgICBndHYgPSAt MUw7ICAgICAgICAgICAgICAgICAgLyogQW5kIG9sZC9uZXcgdGhpbmdzLi4uICovCi0jZW5kaWYg LyogR0ZUSU1FUiAqLwotICAgICAgICAgICAgb2xkcGN0ID0gcGN0ID0gMEw7Ci0gICAgICAgICAg ICBicmVhazsKLQotICAgICAgICAgIGNhc2UgJ1onOiAgICAgICAgICAgICAgICAgICAgIC8qIG9y IEVPRiAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBTQ1JfUFQgWiBwa3RudW0i LCIiLG4pOwotICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBTQ1JfUFQgWiBvbGRwY3Qi LCIiLG9sZHBjdCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9QVCBaIHBj dCIsIiIscGN0KTsKLSAgICAgICAgICBjYXNlICdEJzogICAgICAgICAgICAgICAgICAgICAvKiBE YXRhIHBhY2tldCAqLwotICAgICAgICAgICAgaWYgKGZzaXogPiAwTCkgeyAgICAgICAgICAgIC8q IFNob3cgcGVyY2VudCBkb25lIGlmIGtub3duICovCi0gICAgICAgICAgICAgICAgb2xkcGN0ID0g cGN0OyAgICAgICAgICAgLyogUmVtZW1iZXIgcHJldmlvdXMgcGVyY2VudCAqLwotICAgICAgICAg ICAgICAgIGhvd2ZhciA9IGZmYzsKLSNpZmRlZiBDS19SRVNFTkQKLSAgICAgICAgICAgICAgICBp ZiAod2hhdCAmIFdfU0VORCkJLyogQWNjb3VudCBmb3IgUFNFTkQgb3IgUkVTRU5EICovCi0gICAg ICAgICAgICAgICAgICBob3dmYXIgKz0gc2VuZHN0YXJ0OwotICAgICAgICAgICAgICAgIGVsc2Ug aWYgKHdoYXQgJiBXX1JFQ1YpCi0gICAgICAgICAgICAgICAgICBob3dmYXIgKz0gcnNfbGVuOwot I2VuZGlmIC8qIENLX1JFU0VORCAqLwotICAgICAgICAgICAgICAgIC8qIFBlcmNlbnQgZG9uZSwg dG8gYmUgZGlzcGxheWVkLi4uICovCi0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1onKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGlmICghZGlzY2FyZCAmJiAhY3hzZWVuICYmICFjenNlZW4pIHBj dCA9IDEwMEw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICBwY3Qg PSAoZnNpeiA+IDk5TCkgPyAoaG93ZmFyIC8gKGZzaXogLyAxMDBMKSkgOiAwTDsKLSAgICAgICAg ICAgICAgICBpZiAocGN0ID4gMTAwTCB8fCAgICAgICAvKiBBbGxvdyBmb3IgZXhwYW5zaW9uIGFu ZCAqLwotICAgICAgICAgICAgICAgICAgIChvbGRwY3QgPT0gOTlMICYmIHBjdCA8IDBMKSkgLyog b3RoZXIgYm91bmRhcnkgY29uZGl0aW9ucyAqLwotICAgICAgICAgICAgICAgICAgcGN0ID0gMTAw TDsKLSAgICAgICAgICAgICAgICBpZiAocGN0ICE9IG9sZHBjdCkgICAgICAvKiBPbmx5IGRvIHRo aXMgMTAwIHRpbWVzIHBlciBmaWxlICovCi0gICAgICAgICAgICAgICAgICB1cGRwY3Qob2xkcGN0 LCBwY3QpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtb3ZlKENXX1BD RCwyMik7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIsIGNrZnN0b2EoZmZjKSk7Ci0gICAg ICAgICAgICB9Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgaG93ZmFyKTsK LSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBjcHMgPSBz aG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOwotICAgICAgICAgICAgLyogb2xkX3RyID0g c2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLwotICAgICAgICAgICAgYnJlYWs7 Ci0KLSAgICAgICAgICBjYXNlICclJzogICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0cywg cmV0cmFuc21pc3Npb25zICovCi0gICAgICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBm c2l6LCBob3dmYXIpOwotICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3Bz LCBmc2l6LCBob3dmYXIpOyAqLwotCi0gICAgICAgICAgICBlcnJvcnMgPSByZXRyYW5zICsgY3J1 bmNoZWQgKyB0aW1lb3V0czsKLSAgICAgICAgICAgIGlmIChlcnJvcnMgIT0gb2xkdHJ5KSB7ICAg ICAvKiBFcnJvciBjb3VudCwgaWYgY2hhbmdlZCAqLwotICAgICAgICAgICAgICAgIG1vdmUoQ1df UFIsIDIyKTsKLSAgICAgICAgICAgICAgICBwcmludHcoIiVkIixlcnJvcnMpOwotICAgICAgICAg ICAgICAgIGNscnRvZW9sKCk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgQ1dfUFIsIChsb25nKSBlcnJvcnMKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8K LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOwotICAg ICAgICAgICAgICAgIGlmIChzKSBpZiAoKnMpIHsKLSAgICAgICAgICAgICAgICAgICAgbW92ZShD V19FUlIsMjIpOwotICAgICAgICAgICAgICAgICAgICBwcmludHcoIiVzIixzKTsKLSAgICAgICAg ICAgICAgICAgICAgY2xydG9lb2woKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAg ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENX X0VSUiwgKGxvbmcpIHMpOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAnRSc6ICAg ICAgICAgICAgICAgICAgICAgLyogRXJyb3IgcGFja2V0ICovCi0jaWZkZWYgQ09NTUVOVAotICAg ICAgICAgICAgbW92ZShDV19FUlIsMjIpOyAgICAgICAgICAgIC8qIFByaW50IGl0cyBkYXRhIGZp ZWxkICovCi0gICAgICAgICAgICBpZiAoKnMpIHsKLSAgICAgICAgICAgICAgICBwcmludHcoIiVz IixzKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMgKTsKLSNl bmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBjbHJ0b2VvbCgpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIGZjbnQg PSBmYnl0ID0gMEw7ICAgICAgICAgICAvKiBTbyBubyBieXRlcyBmb3IgdGhpcyBmaWxlICovCi0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdRJzogICAgICAgICAgICAgICAgICAg ICAvKiBDcnVuY2hlZCBwYWNrZXQgKi8KLSAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBw Y3QsIGZzaXosIGhvd2Zhcik7Ci0gICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3Ry LCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCi0gICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7Ci0g ICAgICAgICAgICBwcmludHcoIkRhbWFnZWQgUGFja2V0Iik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVm IEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSAiRGFtYWdlZCBQYWNrZXQiCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAg IGNscnRvZW9sKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdxJzogICAg ICAgICAgICAgICAgICAgICAvKiBDdHJsLUMgb3IgY29ubmVjdGlvbiBsb3N0ICovCi0gICAgICAg ICAgICBtb3ZlKENXX01TRywyMik7Ci0JICAgIGNscnRvZW9sKCk7Ci0gICAgICAgICAgICBpZiAo IXMpIHMgPSAiIjsKLSAgICAgICAgICAgIHByaW50dygqcyA/IHMgOiAiVXNlciBpbnRlcnJ1cHRp b24gb3IgY29ubmVjdGlvbiBsb3N0Iik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIENXX01TRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSBzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8K LSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ1Qn OiAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXQgKi8KLSAgICAgICAgICAgIGNwcyA9IHNo b2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7Ci0gICAgICAgICAgICAvKiBvbGRfdHIgPSBz aG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCi0gICAgICAgICAgICBtb3ZlKENX X0VSUiwyMik7Ci0gICAgICAgICAgICBwcmludHcoIlRpbWVvdXQgJWQgc2VjIixyY3Z0aW1vKTsK LSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJS LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJUaW1lb3V0IgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICov Ci0gICAgICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICAgICAgZXJyb3JzID0gcmV0cmFucyAr IGNydW5jaGVkICsgdGltZW91dHM7Ci0gICAgICAgICAgICBpZiAoZXJyb3JzICE9IG9sZHRyeSkg eyAgICAgLyogRXJyb3IgY291bnQsIGlmIGNoYW5nZWQgKi8KLSAgICAgICAgICAgICAgICBtb3Zl KENXX1BSLCAyMik7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCIlZCIsZXJyb3JzKTsKLSNpZmRl ZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19Q UiwgKGxvbmcpIGVycm9ycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5k aWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgICAgIGNscnRvZW9s KCk7Ci0gICAgICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAg LyogT3RoZXJzLCBkbyBub3RoaW5nICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot ICAgICAgICByZWZyZXNoKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAsIDAp OwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX1NU OiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVyIHN0YXR1cyAqLwotICAgICAg ICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9TVCBjIiwiIixjKTsKLSAgICAgICAgZGVidWcoRjEw MSwic2NyZWVuYyBTQ1JfU1Qgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7Ci0gICAgICAgIGRlYnVnKEYx MDEsInNjcmVlbmMgU0NSX1NUIGN4c2VlbiIsIiIsY3hzZWVuKTsKLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgIG1vdmUoQ1dfUENELDIyKTsgICAgICAgICAgICAgICAgLyogVXBkYXRlIHBlcmNlbnQg ZG9uZSAqLwotICAgICAgICBpZiAoYyA9PSBTVF9PSykgeyAgICAgICAgICAgICAgIC8qIE9LLCBw cmludCAxMDAgJSAqLwotICAgICAgICAgICAgaWYgKHBjdGxibCkKLSAgICAgICAgICAgICAgdXBk cGN0KG9sZHBjdCwxMDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBwcmludHco IiVzIiwgY2tmc3RvYShmZmMpKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25n KSBmZmMpOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAg IHBjdCA9IDEwMDsKLSAgICAgICAgICAgIG9sZHBjdCA9IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAo ZnNpeiA+IDBMKSAgICAgICAgICAgLyogTm90IE9LLCB1cGRhdGUgZmluYWwgcGVyY2VudCAqLwot LyoKLSAgVGhlIGVsc2UgcGFydCB3cml0ZXMgYWxsIG92ZXIgdGhlIHNjcmVlbiAtLSBob3dmYXIg YW5kL29yIGZzaXogaGF2ZQotICBiZWVuIHJlc2V0IGFzIGEgY29uc2VxdWVuY2Ugb2YgdGhlIG5v dC1PS25lc3Mgb2YgdGhlIHRyYW5zZmVyLgotKi8KLSAgICAgICAgICBpZiAocGN0bGJsKQotICAg ICAgICAgICAgdXBkcGN0KG9sZHBjdCwgKGhvd2ZhciAqIDEwMEwpIC8gZnNpeik7Ci0gICAgICAg IGNscnRvZW9sKCk7Ci0jZWxzZQotICAgICAgICBpZiAoYyA9PSBTVF9PSykgeyAgICAgICAgICAg ICAgIC8qIE9LLCBwcmludCAxMDAgJSAqLwotICAgICAgICAgICAgbW92ZShDV19QQ0QsMjIpOyAg ICAgICAgICAgIC8qIFVwZGF0ZSBwZXJjZW50IGRvbmUgKi8KLSAgICAgICAgICAgIGlmIChwY3Rs YmwpIHsKLQkJaWYgKG9sZHBjdCA9PSAwKQkvKiBTd2l0Y2hpbmcgZnJvbSAiYnl0ZXMgc28gZmFy IiAqLwotCQkgIGNscnRvZW9sKCk7CQkvKiB0byAicGVyY2VudCBkb25lIi4uLiAqLwotCQl1cGRw Y3Qob2xkcGN0LDEwMCk7Ci0JICAgIH0gZWxzZQotICAgICAgICAgICAgICBwcmludHcoIiVzIiwg Y2tmc3RvYShmZmMpKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3Vp U2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBmZmMp OwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgICAgICBwY3QgPSAxMDA7Ci0gICAgICAgICAgICBvbGRwY3QgPSAwOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgIH0KLSNlbmRpZiAv KiBDT01NRU5UICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBObywgbGVhdmUgaXQgdGhlcmUgc28g dGhleSBjYW4gcmVhZCBpdCAqLwotICAgICAgICBtb3ZlKENXX01TRywyMik7ICAgICAgICAgICAg ICAgIC8qIFJlbW92ZSBhbnkgcHJldmlvdXMgbWVzc2FnZSAqLwotI2lmZGVmIEtVSQotI2lmbmRl ZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX01TRywgKGxvbmcpICIiICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAq LwotICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot Ci0gICAgICAgIG1vdmUoQ1dfVFIsIDIyKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19UUiwgKGxv bmcpICIiICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBj bHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjKSB7ICAgICAgICAgICAg ICAgICAgICAvKiBQcmludCBuZXcgc3RhdHVzIG1lc3NhZ2UgKi8KLSAgICAgICAgICBjYXNlIFNU X09LOiAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBPSyAqLwotICAgICAgICAgICAgZmNu dCsrOyAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IHRoaXMgZmlsZSAqLwotCSAgICBpZiAo d2hhdCA9PSAoV19GVFB8V19GVF9ERUxFKSkgewotCQltb3ZlKENXX01TRywyMik7Ci0JCWNscnRv ZW9sKCk7Ci0JCXByaW50dygiRGVsZXRlIE9LIik7Ci0JICAgIH0gZWxzZSB7Ci0JCWZieXQgKz0g ZmZjOwotCQltb3ZlKENXX01TRywyMik7Ci0JCWNscnRvZW9sKCk7Ci0JCXByaW50dygiVHJhbnNm ZXIgT0siKTsKLQkgICAgfQotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBL dWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBDV19NU0csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIlRy YW5zZmVyIE9LIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLOTVH ICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7 Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX0RJU0M6ICAgICAgICAg ICAgICAgICAvKiBEaXNjYXJkZWQgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKLSAg ICAgICAgICAgIHByaW50dygiRmlsZSBkaXNjYXJkZWQiKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYg Szk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpICJGaWxlIGRpc2NhcmRlZCIKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAgICAgICAgICAgcmV0dXJuOwot Ci0gICAgICAgICAgY2FzZSBTVF9JTlQ6ICAgICAgICAgICAgICAgICAgLyogSW50ZXJydXB0ZWQg Ki8KLSAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKLSAgICAgICAgICAgIHByaW50dygiVHJh bnNmZXIgaW50ZXJydXB0ZWQiKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp ICJUcmFuc2ZlciBpbnRlcnJ1cHRlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0j ZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAg ICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAg ICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg ICAgY2FzZSBTVF9TS0lQOiAgICAgICAgICAgICAgICAgLyogU2tpcHBlZCAqLwotICAgICAgICAg ICAgbW92ZShDV19FUlIsMjIpOwotCSAgICBpZiAobiA+IDAgJiYgbiA8IG5za3JlYXNvbikKLQkg ICAgICBwcmludHcoIkZpbGUgc2tpcHBlZCAoJXMpIixza3JlYXNvbltuXSk7Ci0JICAgIGVsc2UK LQkgICAgICBwcmludHcoIkZpbGUgc2tpcHBlZCIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVH Ci0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgIkZpbGUgc2tpcHBlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENPTU1FTlQKLSAg ICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAg ICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg ICAgICAgY2FzZSBTVF9FUlI6ICAgICAgICAgICAgICAgICAgLyogRXJyb3IgbWVzc2FnZSAqLwot ICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOwotICAgICAgICAgICAgaWYgKCFzKSBzID0gKGNo YXIgKillcGt0bXNnOwotICAgICAgICAgICAgcHJpbnR3KCIlcyIscyk7Ci0jaWZkZWYgS1VJCi0j aWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZF UiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYg LyogS1VJICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7 Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX1JFRlU6ICAgICAgICAg ICAgICAgICAvKiBSZWZ1c2VkICovCi0gICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7Ci0gICAg ICAgICAgICBpZiAoKnMpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGVycmJ1Zls2NF0gOwotICAg ICAgICAgICAgICAgIHNwcmludGYoIGVycmJ1ZiwgIlJlZnVzZWQsICVzIiwgcyApIDsKLSAgICAg ICAgICAgICAgICBwcmludHcoIiVzIiwgZXJyYnVmKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1 RwotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25n KSBDV19FUlIsKGxvbmcpIGVycmJ1Zik7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtV SSAqLwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludHcoIlJlZnVz ZWQiKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX0VSUiwobG9uZykiUmVmdXNlZCIpOwot I2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIH0KLSNpZmRl ZiBDT01NRU5UCi0gICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKLSAgICAgICAgICAgIHJl dHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfSU5DOgotICAgICAgICAgICAgbW92ZShDV19FUlIs MjIpOwotICAgICAgICAgICAgcHJpbnR3KCJJbmNvbXBsZXRlIik7Ci0jaWZkZWYgS1VJCi0jaWZu ZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChs b25nKUNXX0VSUiwobG9uZykiSW5jb21wbGV0ZSIpOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRp ZiAvKiBLVUkgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAw OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2go KTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfTVNHOgotICAgICAg ICAgICAgbW92ZShDV19NU0csMjIpOwotICAgICAgICAgICAgcHJpbnR3KCIlcyIscyk7Ci0jaWZk ZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxF X1RSQU5TRkVSLChsb25nKUNXX01TRywobG9uZylzKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5k aWYgLyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0gICAgICAg ICAgICByZXR1cm47Ci0KLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAv KiBCYWQgY2FsbCAqLwotICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOwotICAgICAgICAgICAg cHJpbnR3KCIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIHN0YXR1cyAqKioiKTsKLSNpZmRl ZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxF X1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg IioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgc3RhdHVzICoqKiIgKTsKLSNlbmRpZiAvKiBL OTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNo KCk7IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIFNDUl9UQzogeyAgICAgICAgICAg ICAgICAgICAgLyogVHJhbnNhY3Rpb24gY29tcGxldGUgKi8KLSAgICAgICAgICBjaGFyIG1zZ2J1 ZlsxMjhdOwotICAgICAgICAgIG1vdmUoQ1dfQ1AsMjIpOyAgICAgICAgICAgICAgIC8qIE92ZXJh bGwgdHJhbnNmZXIgcmF0ZSAqLwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAg S3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfQ1AsIHRmY3BzKTsK LSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgcHJpbnR3KCIl cyIsIGNrZnN0b2EodGZjcHMpKTsKLSAgICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICAgIGlm IChzdWNjZXNzKSB7Ci0gICAgICAgICAgICAgIG1vdmUoQ1dfTVNHLDIyKTsgICAgICAgICAgLyog UHJpbnQgc3RhdGlzdGljcyBpbiBtZXNzYWdlIGxpbmUgKi8KLSAgICAgICAgICAgICAgY2xydG9l b2woKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKLSAgICAgICAgICAg ICAgc3ByaW50Zihtc2didWYsCi0gICAgICAgICAgICAgICAgICAgICAgIlNVQ0NFU1MuICBGaWxl czogJWxkLCBCeXRlczogJXMsICVsZCBDUFMiLAotICAgICAgICAgICAgICAgICAgICAgIGZpbGNu dCAtIGZpbHJlaiwKLSAgICAgICAgICAgICAgICAgICAgICBja2ZzdG9hKGZieXQpLAotICAgICAg ICAgICAgICAgICAgICAgIHRmY3BzCi0gICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgcHJpbnR3KCIlcyIsIG1zZ2J1Zik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAg ICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBtc2didWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNl bmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICAgIGNscnRvZW9s KCk7Ci0KLSAgICAgICAgICB9Ci0gICAgICAgICAgbW92ZShDV19UUiwgMSk7Ci0gICAgICAgICAg cHJpbnR3KCIgICAgICAgRWxhcHNlZCBUaW1lOiAlcyIsaGhtbXNzKChsb25nKQotI2lmZGVmIEdG VElNRVIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGZwdHNlY3MgKyAwLjUpCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0c2VjcwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOwotI2lmZGVmIEtVSQot I2lmbmRlZiBLOTVHCi0gICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1RSLAotICAgICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSBoaG1tc3MoKGxvbmcpCi0jaWZkZWYgR0ZUSU1FUgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZwdHNlY3MgKyAwLjUpCi0jZWxzZQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNlY3MKLSNlbmRpZiAvKiBHRlRJ TUVSICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKLSNlbmRp ZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgY2xydG9lb2woKTsKLSAg ICAgICAgICBtb3ZlKDIzLDApOyBjbHJ0b2VvbCgpOyAgICAgICAvKiBDbGVhciBpbnN0cnVjdGlv bnMgbGluZXMgKi8KLSAgICAgICAgICBtb3ZlKDIyLDApOyBjbHJ0b2VvbCgpOyAgICAgICAvKiB0 byBtYWtlIHJvb20gZm9yIHByb21wdC4gKi8KLSAgICAgICAgICByZWZyZXNoKCk7Ci0KLSNpZmRl ZiBHRlRJTUVSCi0gICAgICAgICAgb2xkZ3R2ID0gKENLRkxPQVQpIC0xLjA7Ci0jZWxzZQotICAg ICAgICAgIG9sZGd0diA9IC0xTDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSNpZm5kZWYgVk1T Q1VSU0UKLQkgIGRlYnVnKEYxMDAsInNjcmVlbmMgZW5kd2luIEEiLCIiLDApOwotICAgICAgICAg IGVuZHdpbigpOwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFdoeSBhbmQgd2hlbiB3YXMgdGhpcyBj YWxsIHRvIGNvbnJlcygpIGFkZGVkPyAgSXQgbWFrZXMgbm8gc2Vuc2UsCi0gIGFuZCBpdCBicmVh a3MgZWNob2luZyBvbiBTb2xhcmlzIDguCi0qLwotI2lmZGVmIFNPTEFSSVMKLSAgICAgICAgICBj b25yZXMoKTsKLSNlbmRpZiAvKiBTT0xBUklTICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2Vu ZGlmIC8qIFZNU0NVUlNFICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgcGN0ID0gMTAw OyBvbGRwY3QgPSAwOyAgICAgICAgLyogUmVzZXQgdGhlc2UgZm9yIG5leHQgdGltZS4gKi8KLSNl bmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgb2xkdHlwID0gMDsgb2xkcnR0ID0gLTFMOyBv bGR0cnkgPSAtMTsgb2xkbGVuID0gLTE7Ci0gICAgICAgICAgb2xkdGltID0gLTE7Ci0gICAgICAg ICAgY2VuZHcgPSAxOwotICAgICAgICAgIGlmICh4ZnJiZWwpIGJsZWVwKEJQX05PVEUpOyAgIC8q IENsb3NlIHdpbmRvdywgdGhlbiBiZWVwLiAqLwotI2lmZGVmIFVOSVgKLSAgICAgICAgICBmZmx1 c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgICAgZnRfd2luID0gMDsgICAg ICAgICAgICAgICAgICAgLyogV2luZG93IGNsb3NlZC4gKi8KLSAgICAgICAgICByZXR1cm47Ci0g ICAgICB9Ci0gICAgICBjYXNlIFNDUl9FTTogICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3Ig cGFja2V0IChmYXRhbCkgKi8KLSAgICAgICAgbW92ZSAoQ1dfRVJSLDIyKTsKLSAgICAgICAgcHJp bnR3KCJGQUlMVVJFOiAlcyIscyk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAg S3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykg cyApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgaWYgKHhm cmJlbCkgYmxlZXAoQlBfRkFJTCk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICBwY3QgPSBvbGRw Y3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgY2xydG9lb2woKTsgcmVmcmVz aCgpOyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX1FFOiAgICAgICAgICAgICAgICAgICAgICAv KiBRdWFudGl0eSBlcXVhbHMgKi8KLSAgICAgIGNhc2UgU0NSX1RVOiAgICAgICAgICAgICAgICAg ICAgICAvKiBVbmRlbGltaXRlZCB0ZXh0ICovCi0gICAgICBjYXNlIFNDUl9UTjogICAgICAgICAg ICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgc3RhcnQgKi8KLSAgICAgIGNhc2UgU0NS X1RaOiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBlbmQgKi8KLSAg ICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoaWdub3JlZCBpbiBmdWxs c2NyZWVuIGRpc3BsYXkpICovCi0KLSAgICAgIGNhc2UgU0NSX01TOgkJCS8qIE1lc3NhZ2UgZnJv bSBLZXJtaXQgcGFydG5lciAqLwotICAgICAgICBtb3ZlKENXX01TRywyMik7Ci0JcHJpbnR3KCIl cyIscyk7Ci0gICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsgcmV0dXJuOwotCi0gICAgICBj YXNlIFNDUl9YRDogICAgICAgICAgICAgICAgICAgICAgLyogWC1wYWNrZXQgZGF0YSAqLwotICAg ICAgICBwY3QgPSBvbGRwY3QgPSAwOwotICAgICAgICBtb3ZlKENXX05BTSwyMik7Ci0gICAgICAg IHByaW50dygiJXMiLHMpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNl dFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgKTsK LSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGNscnRvZW9sKCk7 IHJlZnJlc2goKTsgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9DVzogICAgICAgICAgICAgICAg ICAgICAgLyogQ2xvc2UgV2luZG93ICovCi0gICAgICAgIGNscnRvZW9sKCk7IG1vdmUoMjMsMCk7 IGNscnRvZW9sKCk7IG1vdmUoMjIsMCk7IGNscnRvZW9sKCk7Ci0gICAgICAgIHJlZnJlc2goKTsK LSNpZmRlZiBDT01NRU5UCi0gICAgICAgIHBjdCA9IDEwMDsgb2xkcGN0ID0gMDsgICAgICAgICAg LyogUmVzZXQgdGhlc2UgZm9yIG5leHQgdGltZS4gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0g ICAgICAgIG9sZHR5cCA9IDA7IG9sZHJ0dCA9IC0xTDsgb2xkdHJ5ID0gLTE7IG9sZGxlbiA9IC0x OwotICAgICAgICBvbGR0aW0gPSAtMTsKLQotI2lmbmRlZiBWTVNDVVJTRQotCWRlYnVnKEYxMDAs InNjcmVlbmMgZW5kd2luIEIiLCIiLDApOwotICAgICAgICBlbmR3aW4oKTsKLSNlbmRpZiAvKiBW TVNDVVJTRSAqLwotICAgICAgICBmdF93aW4gPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEZs YWcgdGhhdCB3aW5kb3cgaXMgY2xvc2VkLiAqLwotICAgICAgICBjZW5kdyA9IDE7IHJldHVybjsK LQotICAgICAgY2FzZSBTQ1JfQ0Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgY3Vy cmVudCBkaXJlY3RvcnkgKi8KLSAgICAgICAgbW92ZShDV19ESVIsMjIpOwotICAgICAgICAgcHJp bnR3KCIlcyIsIHMpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0RJUiwgKGxvbmcpIHMgKTsKLSNl bmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGNscnRvZW9sKCk7Ci0g ICAgICAgIHJlZnJlc2goKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7 Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgZGVmYXVsdDogICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEJhZCBjYWxsICovCi0gICAgICAgIG1vdmUgKENXX0VS UiwyMik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHko S1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIs Ci0gICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRo IGJhZCBmdW5jdGlvbiBjb2RlICoqKiIKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRp ZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIHByaW50dygiKioqIHNjcmVl bigpIGNhbGxlZCB3aXRoIGJhZCBmdW5jdGlvbiBjb2RlICoqKiIpOwotICAgICAgICBjbHJ0b2Vv bCgpOyByZWZyZXNoKCk7IHJldHVybjsKLSAgICB9Ci19Ci0jZW5kaWYgLyogQ0tfQ1VSU0VTICov Ci0KLSNpZmRlZiBLVUkKLSNpZmRlZiBDS19BTlNJQwotdm9pZAotc2NyZWVuZyhpbnQgZiwgY2hh ciBjLGxvbmcgbixjaGFyICpzKQotI2Vsc2UKLUNLVk9JRAotc2NyZWVuZyhmLGMsbixzKQotaW50 IGY7ICAgICAgICAgIC8qIGFyZ3VtZW50IGRlc2NyaXB0b3IgKi8KLWNoYXIgYzsgICAgICAgICAv KiBhIGNoYXJhY3RlciBvciBzbWFsbCBpbnRlZ2VyICovCi1sb25nIG47ICAgICAgICAgLyogYSBs b25nIGludGVnZXIgKi8KLWNoYXIgKnM7ICAgICAgICAvKiBhIHN0cmluZyAqLwotI2VuZGlmIC8q IENLX0FOU0lDICovCi0vKiBzY3JlZW5nKCkgKi8gewotI2lmZGVmIENLX1NTTAotICAgIGV4dGVy biBpbnQgdGxzX2FjdGl2ZV9mbGFnLCBzc2xfYWN0aXZlX2ZsYWc7Ci0jZW5kaWYgLyogQ0tfU1NM ICovCi0jaWZkZWYgUkxPR0NPREUKLSAgICBleHRlcm4gaW50IHR0bnByb3RvOwotI2VuZGlmIC8q IFJMT0dDT0RFICovCi0gICAgc3RhdGljIGludCBxID0gMDsKLSAgICBzdGF0aWMgQ0tfT0ZGX1Qg ZnNpeiA9IChDS19PRkZfVCktMTsgLyogQ29weSBvZiBmaWxlIHNpemUgKi8KLSAgICBzdGF0aWMg bG9uZyBmY250ID0gMEw7ICAgIC8qIE51bWJlciBvZiBmaWxlcyB0cmFuc2ZlcnJlZCAqLwotICAg IHN0YXRpYyBsb25nIGZieXQgPSAwTDsgICAgLyogVG90YWwgZmlsZSBieXRlcyBvZiBhbGwgZmls ZXMgdHJhbnNmZXJyZWQgKi8KLSAgICBzdGF0aWMgQ0tfT0ZGX1QgaG93ZmFyID0gKENLX09GRl9U KTA7IC8qIEhvdyBtdWNoIG9mIGZpbGUgeGZlcidkIHNvIGZhciAqLwotICAgIHN0YXRpYyBpbnQg IHBjdGxibCA9IDBMOyAgLyogUGVyY2VudCBkb25lIHZzIEJ5dGVzIHNvIGZhciAqLwotICAgIGxv bmcgY3BzID0gMEw7Ci0KLSAgICBpbnQgbmV0ID0gMDsKLSAgICBpbnQgeG5ldCA9IDA7Ci0gICAg aW50IGZ0cCA9IDA7Ci0gICAgaW50IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog TGVuZ3RoIG9mIHN0cmluZyAqLwotICAgIGludCBlcnJvcnMgPSAwOyAgICAgICAgICAgICAgICAg ICAgIC8qIEVycm9yIGNvdW50ZXIgKi8KLSAgICBpbnQgeDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBXb3JrZXIgKi8KLQotICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgY2luaXQiLCIi LGNpbml0KTsKLSAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIGNlbmR3IiwiIixjZW5kdyk7Ci0KLSAg ICBpZiAoIXMpIHMgPSAiIjsgICAgICAgICAgICAgICAgICAgICAvKiBBbHdheXMgZG8gdGhpcy4g Ki8KLQotICAgIGZ0cCA9ICh3aGF0ICYgV19GVFApID8gMSA6IDA7CS8qIEZUUCBvciBLZXJtaXQg Ki8KLSAgICBuZXQgPSBuZXR3b3JrIHx8IGZ0cDsKLSAgICB4bmV0ID0gZnRwID8gMSA6IG5ldHR5 cGU7CQkvKiBORVRfVENQQiA9PSAxICovCi0KLSAgICBpZiAoY2luaXQgPT0gMCB8fCBjZW5kdyA+ IDApIHsgICAgICAvKiBIYW5kbGUgYm9yZGVybGluZSBjYXNlcy4uLiAqLwotICAgICAgICBpZiAo ZiA9PSBTQ1JfQ1cpIHsgICAgICAgICAgICAgIC8qIENsb3NlIHdpbmRvdywgYnV0IGl0J3Mgbm90 IG9wZW4gKi8KLSAgICAgICAgICAgIGZ0X3dpbiA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0g ICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMSwic2NyZWVuZyBBIixzLGYpOwotICAgICAgICBp ZiAoZiA9PSBTQ1JfRU0gfHwKLSAgICAgICAgICAgKGYgPT0gU0NSX1BUICYmIGMgPT0gJ0UnKSkg eyAvKiBGYXRhbCBlcnJvciBiZWZvcmUgd2luZG93IG9wZW4gKi8KLSAgICAgICAgICAgIGNvbm9s bCgiIik7IGNvbm9jKCc/Jyk7IGNvbm9sbChzKTsgcmV0dXJuOyAvKiBSZWd1bGFyIGRpc3BsYXkg Ki8KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY2luaXQgPT0gMCkgeyAgICAgICAgICAgICAg ICAgICAvKiBPbmx5IGNhbGwgaW5pdHNjcigpIG9uY2UgKi8KLQkvKiBDaGVjayB0aGVzZSBub3cg LS0gaWYgdGhleSBhcmUgZGVmaW5lZCBidXQgbm90IG51bWVyaWMgKi8KLQkvKiB0aGV5IGNhbiBj cmFzaCBjdXJzZXMgKi8KLSAgICAgICAgY2VuZHcgPSAxOyAgICAgICAgICAgICAgICAgICAgICAv KiBOZXcgd2luZG93IG5lZWRzIHJlcGFpbnRpbmcgKi8KLSAgICAgICAgZGVidWcoRjEwMCwic2Ny ZWVuZyBjYWxsaW5nIGluaXRzY3IiLCIiLDApOwotICAgICAgICBpbml0c2NyKCk7ICAgICAgICAg ICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzLiAqLwotICAgICAgICBkZWJ1ZyhGMTAw LCJzY3JlZW5nIGluaXRzY3Igb2siLCIiLDApOwotICAgICAgICBjaW5pdCsrOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFJlbWVtYmVyIGN1cnNlcyB3YXMgaW5pdGlhbGl6ZWQuICovCi0gICAg fQotICAgIGZ0X3dpbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBpcyBv cGVuICovCi0gICAgaWYgKHJlcGFpbnQpIHsKLSNpZmRlZiBDS19XUkVGUkVTSAotLyoKLSAgVGhp cyB0b3RhbGx5IHJlcGFpbnRzIHRoZSBzY3JlZW4sIGp1c3Qgd2hhdCB3ZSB3YW50LCBidXQgd2Ug Y2FuIG9ubHkKLSAgZG8gdGhpcyB3aXRoIHJlYWwgY3Vyc2VzLCBhbmQgdGhlbiBvbmx5IGlmIGNs ZWFyb2soKSBhbmQgd3JlZnJlc2goKSBhcmUKLSAgcHJvdmlkZWQgaW4gdGhlIGN1cnNlcyBsaWJy YXJ5LgotKi8KLSAgICAgICAgUmVzdG9yZUNtZE1vZGUoKTsKLSNlbHNlICAvKiBObyBDS19XUkVG UkVTSCAqLwotLyoKLSAgS2VybWl0J3MgZG8taXQteW91cnNlbGYgbWV0aG9kLCB3b3JrcyB3aXRo IGFsbCB0eXBlcyBvZiBmdWxsc2NyZWVuCi0gIHN1cHBvcnQsIGJ1dCBkb2VzIG5vdCByZXBhaW50 IGFsbCB0aGUgZmllbGRzLiAgRm9yIGV4YW1wbGUsIHRoZSBmaWxlbmFtZQotICBpcyBsb3N0LCBi ZWNhdXNlIGl0IGFycml2ZXMgYXQgYSBjZXJ0YWluIHRpbWUgYW5kIG5ldmVyIGNvbWVzIGFnYWlu LCBhbmQKLSAgS2VybWl0IHByZXNlbnRseSBkb2VzIG5vdCBzYXZlIGl0IGFueXdoZXJlLiAgTWFr aW5nIHRoaXMgbWV0aG9kIHdvcmsgZm9yCi0gIGFsbCBmaWVsZHMgd291bGQgYmUgYSByYXRoZXIg bWFqb3IgcmVjb2RpbmcgdGFzaywgZHVwbGljYXRpbmcgd2hhdCBjdXJzZXMKLSAgYWxyZWFkeSBk b2VzLCBhbmQgd291bGQgYWRkIGEgbG90IG9mIGNvbXBsZXhpdHkgYW5kIHN0b3JhZ2Ugc3BhY2Uu Ci0qLwotICAgICAgICBjZW5kdyA9IDE7Ci0jZW5kaWYgLyogQ0tfV1JFRlJFU0ggKi8KLSAgICAg ICAgcmVwYWludCA9IDA7Ci0gICAgfQotICAgIGlmIChjZW5kdykgeyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGVuZHdpbigpIHdhcyBjYWxsZWQgcHJldmlvdXNseSAqLwotICAgICAgICBkZWJ1 ZyhGMTAwLCJzY3JlZW5nIHNldHVwIG9rIiwiIiwwKTsKLSAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRElSLCAobG9uZykgemd0ZGlyKCkgKTsKLSAg ICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTElOLAot ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICgKLSNpZmRlZiBORVdGVFAKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZnRwID8gKGZ0cF9ob3N0ID8gZnRwX2hvc3QgOiAiKHVu a25vd24pIikgOgotI2VuZGlmIC8qIE5FV0ZUUCAqLwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0dG5hbWUpICk7Ci0KLSAgICAgICAgaWYgKG5ldCkgewotI2lmZGVmIE5FVENPTk4K LQkgICAgaW50IHNlY3VyZSA9IDA7Ci0JICAgIGNoYXIgKiB4bmFtZTsKLQkgICAgaWYgKHhuZXQg PiBubmV0bmFtZSkKLQkgICAgICB4bmFtZSA9ICJbRVJST1JdIjsKLQkgICAgZWxzZQotCSAgICAg IHhuYW1lID0gbmV0bmFtZVt4bmV0XTsKLSNpZmRlZiBORVdGVFAKLSAgICAgICAgICAgIGlmIChm dHApIHsKLQkJaWYgKGZ0cGlzc2VjdXJlKCkpCi0JCSAgc2VjdXJlID0gMTsKLQkgICAgfSBlbHNl Ci0jZW5kaWYgLyogTkVXRlRQICovCi0JICAgICAgaWYgKDAKLSNpZmRlZiBTU0hCVUlMVElOCi0g ICAgICAgICAgICAgICAgfHwgSVNfU1NIKCkKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZk ZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgIHx8IGNrX3RuX2VuY3J5cHRpbmcoKSAm JiBja190bl9kZWNyeXB0aW5nKCkKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYg Q0tfU1NMCi0gICAgICAgICAgICAgICAgfHwgdGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVf ZmxhZwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIFJMT0dDT0RFCi0jaWZkZWYgQ0tfS0VS QkVST1MKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgfHwgdHRucHJvdG8g PT0gTlBfRUs0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4KLSNlbmRpZiAvKiBDS19F TkNSWVBUSU9OICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNlbmRpZiAvKiBSTE9HQ09E RSAqLwotICAgICAgICAgICAgICAgICApIHsKLQkJc2VjdXJlID0gMTsKLQkgICAgfQotCSAgICBp ZiAoc2VjdXJlKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBidWZbMzBdOwotICAgICAgICAgICAg ICAgIHNwcmludGYoYnVmLCIlcyAoU0VDVVJFKSIseG5hbWUpOwotICAgICAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBDV19TUEQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpIGJ1ZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVS LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHhuYW1lCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSBDV19TUEQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIihuZXR3b3Jr KSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwot ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHNwZWVkIDwgMEwpCi0gICAgICAgICAg ICAgIHNwZWVkID0gdHRnc3BkKCk7Ci0gICAgICAgICAgICBpZiAoc3BlZWQgPiAwTCkgewotICAg ICAgICAgICAgICAgIGlmIChzcGVlZCA9PSA4ODgwKSB7Ci0gICAgICAgICAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobG9uZykgQ1dfU1BELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgIjc1LzEyMDAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBz cGVlZGJ1Zls2NF0gOwotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHNwZWVkYnVmLCAiJWxk Iiwgc3BlZWQpOwotICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9U UkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQ RCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHNwZWVkYnVmCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlf RklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1df U1BELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKHVua25vd24pIgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSBDV19QQVIsCi0gICAgICAgICAgICAgICAgICAgICAgIChsb25n KSBwYXJuYW0oKGNoYXIpcGFyaXR5KQotICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICBwY3RsYmwgPSAod2hhdCAmIFdfU0VORCk7Ci0gICAgICAgIGNlbmR3ID0gMDsKLSAgICB9Ci0g ICAgZGVidWcoRjEwMSwiU0NSRUVOQyBzd2l0Y2giLCIiLGYpOwotICAgIGRlYnVnKEYwMDAsIlND UkVFTkMgYyIsIiIsYyk7Ci0gICAgZGVidWcoRjEwMSwiU0NSRUVOQyBuIiwiIixuKTsKLQotICAg IGxlbiA9IHN0cmxlbihzKTsgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBhcmd1bWVu dCBzdHJpbmcgKi8KLSAgICBzd2l0Y2ggKGYpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBI YW5kbGUgb3VyIGZ1bmN0aW9uIGNvZGUgKi8KLSAgICAgIGNhc2UgU0NSX0ZOOiAgICAgICAgICAg ICAgICAgICAgICAvKiBGaWxlbmFtZSAqLwotICAgICAgICBvbGRwY3QgPSBwY3QgPSAwTDsgICAg ICAgICAgICAgIC8qIFJlc2V0IHBlcmNlbnRzICovCi0jaWZkZWYgR0ZUSU1FUgotICAgICAgICBn dHYgPSAoQ0tGTE9BVCkgLTEuMDsKLSAgICAgICAgLyogb2xkZ3R2ID0gKENLRkxPQVQpIC0xLjA7 ICovCi0jZWxzZQotICAgICAgICBndHYgPSAtMUw7Ci0gICAgICAgIC8qIG9sZGd0diA9IC0xTDsg Ki8KLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgICAgIG9sZHdpbiA9IC0xOwotICAgICAgICBm c2l6ID0gKENLX09GRl9UKS0xTDsJCS8qIEludmFsaWRhdGUgcHJldmlvdXMgZmlsZSBzaXplICov Ci0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BD RCwgKGxvbmcpIDAgKTsKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVS LCAobG9uZykgQ1dfRkZDLCAobG9uZykgMCApOwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJ X0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19TSVosIChsb25nKSAwICk7Ci0gICAgICAgIEt1aVNl dFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpICIiICk7 Ci0KLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df TkFNLCAobG9uZykgcyApOwotICAgICAgICBxID0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIFJlbWVtYmVyIG5hbWUgbGVuZ3RoIGZvciBsYXRlciAqLwotICAgICAgICBzY3JmdCgpOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgZmlsZSB0eXBlIChjYW4gY2hhbmdlKSAq LwotI2lmZGVmIE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9BTjogICAgICAgICAgICAgICAg ICAgICAgLyogRmlsZSBhcy1uYW1lICovCi0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklM RV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgKTsKLSNpZmRlZiBPUzIKLSAgICAg ICAgU2F2ZUNtZE1vZGUoMCwgMCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVybjsK LQotICAgICAgY2FzZSBTQ1JfRlM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgc2l6ZSAq LwotICAgICAgICBmc2l6ID0gbjsKLSAgICAgICAgaWYgKGZzaXogPiAoQ0tfT0ZGX1QpLTEpIHsK LSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENX X1NJWiwgKGxvbmcpIG4gKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZnNpeiA+IChDS19PRkZf VCktMSkgewkvKiBQdXQgdXAgcGVyY2VudCBsYWJlbCAqLwotICAgICAgICAgICAgcGN0bGJsID0g MTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBjdGxibCA9IDA7Ci0JfQotICAgICAg ICBzY3JmdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHlwZSAqLwotI2lmZGVm IE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAg ICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9QVDogICAgICAgICAgICAgICAgICAgICAgLyog UGFja2V0IHR5cGUgb3IgcHNldWRvdHlwZSAqLwotICAgICAgICBpZiAoc3BhY2tldHMgPCA1KSB7 Ci0gICAgICAgICAgICBleHRlcm4gaW50IHN5c2luZGV4OwotICAgICAgICAgICAgZXh0ZXJuIHN0 cnVjdCBzeXNkYXRhIHN5c2lkbGlzdFtdOwotICAgICAgICAgICAgLyogVGhpbmdzIHRoYXQgd29u J3QgY2hhbmdlIGFmdGVyIHRoZSA0dGggcGFja2V0ICovCi0gICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgQ1dfUEFSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHBhcm5hbSgoY2hh cilwYXJpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgaWYg KAotI2lmZGVmIE5FV0ZUUAotCQkoZnRwICYmIChzcGFja2V0cyA9PSAxIHx8IHJwYWNrZXRzID09 IDEpKSB8fAotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCQlzcGFja2V0cyA9PSA0Ci0JCSkgewotICAg ICAgICAgICAgICAgIGlmICgKLSNpZmRlZiBORVdGVFAKLQkJICAgIGZ0cCB8fAotI2VuZGlmIC8q IE5FV0ZUUCAqLwotCQkgICAgKChwcm90b2NvbCA9PSBQUk9UT19LKSAmJiAoc3lzaW5kZXggPiAt MSkpCi0JCSAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBtc2didWZbMTI4XTsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKG5ldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3By aW50Zihtc2didWYsIk5ldHdvcmsgSG9zdDogJXMgKCVzKSIsCi0jaWZkZWYgTkVXRlRQCi0JCQkg ICAgICAgZnRwID8gKGZ0cF9ob3N0ID8gZnRwX2hvc3QgOiAiIikgOgotI2VuZGlmIC8qIE5FV0ZU UCAqLwotCQkJICAgICAgIHR0bmFtZSwKLSNpZmRlZiBORVdGVFAKLQkJCSAgICAgICBmdHAgPyBm dHBfc3J2dHlwIDoKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQkJCSAgICAgICBzeXNpZGxpc3Rbc3lz aW5kZXhdLnNpZF9uYW1lCi0JCQkgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYobXNnYnVmLAotCQkJCSJDb21tdW5p Y2F0aW9uIERldmljZTogJXMgKHJlbW90ZSBob3N0IGlzICVzKSIsCi0JCQkJdHRuYW1lLAotCQkJ CXN5c2lkbGlzdFtzeXNpbmRleF0uc2lkX25hbWUKLQkJCQkpOwotICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZF UiwKLQkJCQkgICAgKGxvbmcpIENXX0xJTiwKLQkJCQkgICAgKGxvbmcpIG1zZ2J1ZgotCQkJCSAg ICApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmZGVm IENLX1RJTUVSUwotICAgICAgICBpZiAoLyogcnR0ZmxnICYmICovIHByb3RvY29sID09IFBST1RP X0spIHsKLSAgICAgICAgICAgIGxvbmcgeHg7Ci0gICAgICAgICAgICBpZiAoCi0jaWZkZWYgU1RS RUFNSU5HCi0gICAgICAgICAgICAgICAgc3RyZWFtaW5nICYmIG9sZHdpbiAhPSAtMgotI2Vsc2UK LSAgICAgICAgICAgICAgICAwCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0gICAgICAgICAgICAg ICAgKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBtc2didWZbNjRdOwotICAgICAgICAgICAgICAg IHNwcmludGYobXNnYnVmLCIwMCAvIDAwIik7Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoIEtVSV9GSUxFX1RSQU5TRkVSLAotCQkJCShsb25nKSBDV19UTU8sCi0JCQkJKGxvbmcpIG1z Z2J1ZgotCQkJCSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHh4ID0g KHJ0dGRlbGF5ICsgNTAwKSAvIDEwMDA7Ci0gICAgICAgICAgICAgICAgaWYgKHh4ICE9IG9sZHJ0 dCB8fCByY3Z0aW1vICE9IG9sZHRpbSkgewotICAgICAgICAgICAgICAgICAgICBjaGFyIG1zZ2J1 Zls2NF07Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYobXNnYnVmLCIlMDJsZCAvICUwMmQi LCB4eCwgcmN2dGltbyk7Ci0gICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlf RklMRV9UUkFOU0ZFUiwKLQkJCQkgICAgKGxvbmcpIENXX1RNTywKLQkJCQkgICAgKGxvbmcpIG1z Z2J1ZgotCQkJCSAgICApOwotICAgICAgICAgICAgICAgICAgICBvbGRydHQgPSB4eDsKLSAgICAg ICAgICAgICAgICAgICAgb2xkdGltID0gcmN2dGltbzsKLSAgICAgICAgICAgICAgICAgICAgY2xy dG9lb2woKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNl bmRpZiAvKiBDS19USU1FUlMgKi8KLQotICAgICAgICB4ID0gKHdoYXQgJiBXX1JFQ1YpID8gICAg ICAgICAgLyogUGFja2V0IGxlbmd0aCAqLwotICAgICAgICAgIHJwa3RsKyhwcm90b2NvbD09UFJP VE9fSz8xOjApIDoKLSAgICAgICAgICAgIHNwa3RsOwotICAgICAgICBpZiAoeCAhPSBvbGRsZW4p IHsgICAgICAgICAgICAgIC8qIEJ1dCBvbmx5IGlmIGl0IGNoYW5nZWQuICovCi0gICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QTCwgKGxvbmcp IHggKTsKLSAgICAgICAgICAgIG9sZGxlbiA9IHg7Ci0gICAgICAgIH0KLSAgICAgICAgS3VpU2V0 UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUEMsIChsb25nKSBzcGFja2V0 cyApOwotCi0gICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LICYmICFmdHApIHsgLyogV2lu ZG93IHNsb3RzICovCi0gICAgICAgICAgICBjaGFyIHdzWzE2XTsKLSAgICAgICAgICAgIGludCBm bGFnOwotICAgICAgICAgICAgZmxhZyA9IDA7Ci0jaWZkZWYgU1RSRUFNSU5HCi0gICAgICAgICAg ICBpZiAoc3RyZWFtaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZHdpbiAhPSAtMikgewot ICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHdzLCJTVFJFQU1JTkciKTsKLSAgICAgICAgICAg ICAgICAgICAgZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIG9sZHdpbiA9IC0yOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFNUUkVBTUlORyAq LwotICAgICAgICAgICAgICBpZiAod2N1ciAhPSBvbGR3aW4pIHsKLSAgICAgICAgICAgICAgICAg IHNwcmludGYod3MsICIlZCBvZiAlZCIsIHdjdXIgPCAxID8gMSA6IHdjdXIsIHdzbG90bik7Ci0g ICAgICAgICAgICAgICAgICBmbGFnID0gMTsKLSAgICAgICAgICAgICAgICAgIG9sZHdpbiA9IHdj dXI7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbGFnKSB7Ci0gICAgICAgICAg ICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfV1MsIChs b25nKSB3cyApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVycm9ycyA9IHJl dHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOwotICAgICAgICBpZiAoZXJyb3JzICE9IG9sZHRy eSkgeyAgICAgICAgIC8qIFJldHJ5IGNvdW50LCBpZiBjaGFuZ2VkICovCi0gICAgICAgICAgICBL dWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QUiwgKGxvbmcpIGVy cm9ycyApOwotICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOwotICAgICAgICB9Ci0JLyogU2Vu ZGVyJ3MgcGFja2V0IHR5cGUgKi8KLSAgICAgICAgaWYgKCFmdHAgJiYgKGMgIT0gb2xkdHlwICYm IGMgIT0gJ1knICYmIGMgIT0gJ04nKSkgewotICAgICAgICAgICAgY2hhciB0eXBlWzJdOwotICAg ICAgICAgICAgc3ByaW50Zih0eXBlLCAiJWMiLGMpOwotICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUFQsIChsb25nKSB0eXBlICk7Ci0gICAg ICAgICAgICBvbGR0eXAgPSBjOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoYykgeyAgICAg ICAgICAgICAgICAgICAgLyogTm93IGhhbmRsZSBzcGVjaWZpYyBwYWNrZXQgdHlwZXMgKi8KLSAg ICAgICAgICBjYXNlICdTJzogICAgICAgICAgICAgICAgICAgICAvKiBCZWdpbm5pbmcgb2YgdHJh bnNmZXIgKi8KLSAgICAgICAgICAgIGZjbnQgPSBmYnl0ID0gMEw7ICAgICAgICAgICAvKiBDbGVh ciBjb3VudGVycyAqLwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgIGd0diA9IC0xLjA7Ci0j ZWxzZSAvKiBHRlRJTUVSICovCi0gICAgICAgICAgICBndHYgPSAtMUw7ICAgICAgICAgICAgICAg ICAgLyogQW5kIG9sZC9uZXcgdGhpbmdzLi4uICovCi0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAg ICAgICAgICAgb2xkcGN0ID0gcGN0ID0gMEw7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg ICAgIGNhc2UgJ1onOiAgICAgICAgICAgICAgICAgICAgIC8qIG9yIEVPRiAqLwotICAgICAgICAg ICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfUFQgWiBwa3RudW0iLCIiLG4pOwotICAgICAgICAg ICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfUFQgWiBvbGRwY3QiLCIiLG9sZHBjdCk7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9QVCBaIHBjdCIsIiIscGN0KTsKLSAgICAg ICAgICBjYXNlICdEJzogICAgICAgICAgICAgICAgICAgICAvKiBEYXRhIHBhY2tldCAqLwotICAg ICAgICAgICAgaWYgKGZzaXogPiAwTCkgeyAgICAgICAgICAgIC8qIFNob3cgcGVyY2VudCBkb25l IGlmIGtub3duICovCi0gICAgICAgICAgICAgICAgb2xkcGN0ID0gcGN0OyAgICAgICAgICAgLyog UmVtZW1iZXIgcHJldmlvdXMgcGVyY2VudCAqLwotICAgICAgICAgICAgICAgIGhvd2ZhciA9IGZm YzsKLSNpZmRlZiBDS19SRVNFTkQKLSAgICAgICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkJ LyogQWNjb3VudCBmb3IgUFNFTkQgb3IgUkVTRU5EICovCi0gICAgICAgICAgICAgICAgICBob3dm YXIgKz0gc2VuZHN0YXJ0OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1Yp Ci0gICAgICAgICAgICAgICAgICBob3dmYXIgKz0gcnNfbGVuOwotI2VuZGlmIC8qIENLX1JFU0VO RCAqLwotICAgICAgICAgICAgICAgIC8qIFBlcmNlbnQgZG9uZSwgdG8gYmUgZGlzcGxheWVkLi4u ICovCi0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1onKSB7Ci0gICAgICAgICAgICAgICAgICAg IGlmICghZGlzY2FyZCAmJiAhY3hzZWVuICYmICFjenNlZW4pIHBjdCA9IDEwMEw7Ci0gICAgICAg ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICBwY3QgPSAoZnNpeiA+IDk5TCkgPyAo aG93ZmFyIC8gKGZzaXogLyAxMDBMKSkgOiAwTDsKLSAgICAgICAgICAgICAgICBpZiAocGN0ID4g MTAwTCB8fCAgICAgICAvKiBBbGxvdyBmb3IgZXhwYW5zaW9uIGFuZCAqLwotICAgICAgICAgICAg ICAgICAgIChvbGRwY3QgPT0gOTlMICYmIHBjdCA8IDBMKSkgLyogb3RoZXIgYm91bmRhcnkgY29u ZGl0aW9ucyAqLwotICAgICAgICAgICAgICAgICAgcGN0ID0gMTAwTDsKLSAgICAgICAgICAgICAg ICBpZiAocGN0ICE9IG9sZHBjdCkgICAgICAvKiBPbmx5IGRvIHRoaXMgMTAwIHRpbWVzIHBlciBm aWxlICovCi0gICAgICAgICAgICAgICAgICB1cGRwY3Qob2xkcGN0LCBwY3QpOwotICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGZmYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxv bmcpIGhvd2Zhcik7Ci0gICAgICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBo b3dmYXIpOwotICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6 LCBob3dmYXIpOyAqLwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlICclJzog ICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0cywgcmV0cmFuc21pc3Npb25zICovCi0gICAg ICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOwotICAgICAgICAg ICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLwotCi0g ICAgICAgICAgICBlcnJvcnMgPSByZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKLSAgICAg ICAgICAgIGlmIChlcnJvcnMgIT0gb2xkdHJ5KSB7ICAgICAvKiBFcnJvciBjb3VudCwgaWYgY2hh bmdlZCAqLwotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVS LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19QUiwKLQkJCSAgICAg ICAobG9uZykgZXJyb3JzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOwotICAgICAgICAg ICAgICAgIGlmIChzKSBpZiAoKnMpIHsKLSAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSBzKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAnRSc6ICAgICAgICAg ICAgICAgICAgICAgLyogRXJyb3IgcGFja2V0ICovCi0gICAgICAgICAgICBpZiAoKnMpIHsKLSAg ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBD V19FUlIsIChsb25nKSBzICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmY250ID0gZmJ5 dCA9IDBMOyAgICAgICAgICAgLyogU28gbm8gYnl0ZXMgZm9yIHRoaXMgZmlsZSAqLwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnUSc6ICAgICAgICAgICAgICAgICAgICAgLyog Q3J1bmNoZWQgcGFja2V0ICovCi0gICAgICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBm c2l6LCBob3dmYXIpOwotICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3Bz LCBmc2l6LCBob3dmYXIpOyAqLwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVf VFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJEYW1hZ2VkIFBhY2tldCIKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl ICdxJzogICAgICAgICAgICAgICAgICAgICAvKiBDdHJsLUMgb3IgY29ubmVjdGlvbiBsb3N0ICov Ci0gICAgICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICAgICAgICAgIGlmICghKnMpIHMgPSAi VXNlciBpbnRlcnJ1cHRpb24gb3IgY29ubmVjdGlvbiBsb3N0IjsKLSAgICAgICAgICAgIEt1aVNl dFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIENXX01TRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBzCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSAnVCc6ICAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dCAqLwotICAgICAgICAgICAg Y3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKLSAgICAgICAgICAgIC8qIG9s ZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KLSAgICAgICAgICAg IEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAi VGltZW91dCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBlcnJv cnMgPSByZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKLSAgICAgICAgICAgIGlmIChlcnJv cnMgIT0gb2xkdHJ5KSB7ICAgICAvKiBFcnJvciBjb3VudCwgaWYgY2hhbmdlZCAqLwotICAgICAg ICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19QUiwgKGxvbmcpIGVycm9ycwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3Jz OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDog ICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJzLCBkbyBub3RoaW5nICovCi0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgfQotI2lmZGVmIE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAw KTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9T VDogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBzdGF0dXMgKi8KLSAgICAg ICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfU1QgYyIsIiIsYyk7Ci0gICAgICAgIGRlYnVnKEYx MDEsInNjcmVlbmcgU0NSX1NUIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwotICAgICAgICBkZWJ1ZyhG MTAxLCJzY3JlZW5nIFNDUl9TVCBjeHNlZW4iLCIiLGN4c2Vlbik7Ci0jaWZkZWYgQ09NTUVOVAot ICAgICAgICBpZiAoYyA9PSBTVF9PSykgeyAgICAgICAgICAgICAgIC8qIE9LLCBwcmludCAxMDAg JSAqLwotICAgICAgICAgICAgaWYgKHBjdGxibCkKLSAgICAgICAgICAgICAgdXBkcGN0KG9sZHBj dCwxMDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5 KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgZmZjKTsKLSAgICAgICAg ICAgIHBjdCA9IDEwMDsKLSAgICAgICAgICAgIG9sZHBjdCA9IDA7Ci0gICAgICAgIH0gZWxzZSBp ZiAoZnNpeiA+IDBMKSAgICAgICAgICAgLyogTm90IE9LLCB1cGRhdGUgZmluYWwgcGVyY2VudCAq LwotLyoKLSAgVGhlIGVsc2UgcGFydCB3cml0ZXMgYWxsIG92ZXIgdGhlIHNjcmVlbiAtLSBob3dm YXIgYW5kL29yIGZzaXogaGF2ZQotICBiZWVuIHJlc2V0IGFzIGEgY29uc2VxdWVuY2Ugb2YgdGhl IG5vdC1PS25lc3Mgb2YgdGhlIHRyYW5zZmVyLgotKi8KLSAgICAgICAgICBpZiAocGN0bGJsKQot ICAgICAgICAgICAgdXBkcGN0KG9sZHBjdCwgKGhvd2ZhciAqIDEwMEwpIC8gZnNpeik7Ci0jZWxz ZQotICAgICAgICBpZiAoYyA9PSBTVF9PSykgeyAgICAgICAgICAgICAgIC8qIE9LLCBwcmludCAx MDAgJSAqLwotICAgICAgICAgICAgaWYgKHBjdGxibCkgewotCQl1cGRwY3Qob2xkcGN0LDEwMCk7 Ci0JICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgZmZjKTsKLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgICAgICBwY3QgPSAxMDA7Ci0gICAgICAgICAgICBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgICAgICBLdWlT ZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19UUiwgKGxvbmcpICIiICk7 Ci0KLSAgICAgICAgc3dpdGNoIChjKSB7ICAgICAgICAgICAgICAgICAgICAvKiBQcmludCBuZXcg c3RhdHVzIG1lc3NhZ2UgKi8KLSAgICAgICAgICBjYXNlIFNUX09LOiAgICAgICAgICAgICAgICAg ICAvKiBUcmFuc2ZlciBPSyAqLwotICAgICAgICAgICAgZmNudCsrOyAgICAgICAgICAgICAgICAg ICAgIC8qIENvdW50IHRoaXMgZmlsZSAqLwotCSAgICBpZiAod2hhdCA9PSAoV19GVFB8V19GVF9E RUxFKSkgewotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVS LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIkRlbGV0ZSBPSyIKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLQkgICAgfSBlbHNlIHsKLQkJZmJ5dCArPSBmZmM7Ci0g ICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsb25nKSAiVHJhbnNmZXIgT0siCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0JICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg IGNhc2UgU1RfRElTQzogICAgICAgICAgICAgICAgIC8qIERpc2NhcmRlZCAqLwotICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp ICJGaWxlIGRpc2NhcmRlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jaWZkZWYg Q09NTUVOVAotICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX0lOVDogICAgICAg ICAgICAgICAgICAvKiBJbnRlcnJ1cHRlZCAqLwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko S1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1df RVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJUcmFuc2ZlciBpbnRlcnJ1 cHRlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jaWZkZWYgQ09NTUVOVAotICAg ICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAg ICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBTVF9TS0lQOiB7ICAgICAgICAgICAgICAgIC8q IFNraXBwZWQgKi8KLSAgICAgICAgICAgIGNoYXIgZXJyYnVmWzY0XSA7Ci0JICAgIGlmIChuID4g MCAmJiBuIDwgbnNrcmVhc29uKQotICAgICAgICAgICAgICAgIHNwcmludGYoIGVycmJ1ZiwgIkZp bGUgc2tpcHBlZCwgKCVzKSIsIHNrcmVhc29uW25dICkgOwotCSAgICBlbHNlCi0gICAgICAgICAg ICAgICAgc3ByaW50ZiggZXJyYnVmLCAiRmlsZSBza2lwcGVkIiApIDsKLSAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBlcnJi dWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAg ICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAg ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICBjYXNlIFNUX0VSUjogICAgICAgICAgICAg ICAgICAvKiBFcnJvciBtZXNzYWdlICovCi0gICAgICAgICAgICBpZiAoIXMpIHMgPSAoY2hhciAq KWVwa3Rtc2c7Ci0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIs IChsb25nKSBDV19FUlIsIChsb25nKSBzICk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAg cGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICByZXR1 cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX1JFRlU6ICAgICAgICAgICAgICAgICAvKiBSZWZ1c2Vk ICovCi0gICAgICAgICAgICBpZiAoKnMpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGVycmJ1Zls2 NF0gOwotICAgICAgICAgICAgICAgIHNwcmludGYoIGVycmJ1ZiwgIlJlZnVzZWQsICVzIiwgcyAp IDsKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9u ZykgQ1dfRVJSLChsb25nKSBlcnJidWYpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylDV19FUlIsKGxv bmcpIlJlZnVzZWQiKTsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAg ICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIHJl dHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfSU5DOgotICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1dfRVJSLChsb25nKSJJbmNvbXBsZXRlIik7Ci0j aWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX01TRzoK LSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX01T RywobG9uZylzKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGRlZmF1bHQ6ICAg ICAgICAgICAgICAgICAgICAgIC8qIEJhZCBjYWxsICovCi0gICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSAiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBzdGF0dXMgKioqIiAp OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgU0NSX1RDOiB7 ICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBjb21wbGV0ZSAqLwotICAgICAgICAg IGNoYXIgbXNnYnVmWzEyOF07Ci0gICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfQ1AsIHRmY3BzKTsKLSAgICAgICAgICBpZiAoc3VjY2Vzcykgewot ICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAiU1VD Q0VTUy4gIEZpbGVzOiAlcywgQnl0ZXM6ICVsZCwgJWxkIENQUyIsCi0gICAgICAgICAgICAgICAg ICAgICAgZmlsY250IC0gZmlscmVqLAotICAgICAgICAgICAgICAgICAgICAgIGNrZnN0b2EoZmJ5 dCksCi0gICAgICAgICAgICAgICAgICAgICAgdGZjcHMKLSAgICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIG1zZ2J1ZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICAgIH0KLSAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZF UiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfVFIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIGhobW1zcygobG9uZykKLSNpZmRlZiBHRlRJTUVSCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnB0c2VjcyArIDAuNSkKLSNlbHNlCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2VjcwotI2VuZGlmIC8qIEdG VElNRVIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOwotCi0j aWZkZWYgR0ZUSU1FUgotICAgICAgICAgIG9sZGd0diA9IChDS0ZMT0FUKSAtMS4wOwotI2Vsc2UK LSAgICAgICAgICBvbGRndHYgPSAtMUw7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0jaWZkZWYg Q09NTUVOVAotICAgICAgICAgIHBjdCA9IDEwMDsgb2xkcGN0ID0gMDsgICAgICAgIC8qIFJlc2V0 IHRoZXNlIGZvciBuZXh0IHRpbWUuICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAg IG9sZHR5cCA9IDA7IG9sZHJ0dCA9IC0xTDsgb2xkdHJ5ID0gLTE7IG9sZGxlbiA9IC0xOwotICAg ICAgICAgIG9sZHRpbSA9IC0xOwotICAgICAgICAgIGNlbmR3ID0gMTsKLSAgICAgICAgICBpZiAo eGZyYmVsKSBibGVlcChCUF9OT1RFKTsgICAvKiBDbG9zZSB3aW5kb3csIHRoZW4gYmVlcC4gKi8K LSAgICAgICAgICBmdF93aW4gPSAwOyAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgY2xvc2Vk LiAqLwotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGNhc2UgU0NSX0VNOiAgICAg ICAgICAgICAgICAgICAgICAvKiBFcnJvciBwYWNrZXQgKGZhdGFsKSAqLwotICAgICAgICBLdWlT ZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSBzICk7 Ci0gICAgICAgIGlmICh4ZnJiZWwpIGJsZWVwKEJQX0ZBSUwpOwotI2lmZGVmIENPTU1FTlQKLSAg ICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIHJl dHVybjsKLQotICAgICAgY2FzZSBTQ1JfUUU6ICAgICAgICAgICAgICAgICAgICAgIC8qIFF1YW50 aXR5IGVxdWFscyAqLwotICAgICAgY2FzZSBTQ1JfVFU6ICAgICAgICAgICAgICAgICAgICAgIC8q IFVuZGVsaW1pdGVkIHRleHQgKi8KLSAgICAgIGNhc2UgU0NSX1ROOiAgICAgICAgICAgICAgICAg ICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBzdGFydCAqLwotICAgICAgY2FzZSBTQ1JfVFo6ICAg ICAgICAgICAgICAgICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IGVuZCAqLwotICAgICAgICBy ZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChpZ25vcmVkIGluIGZ1bGxzY3JlZW4g ZGlzcGxheSkgKi8KLQotICAgICAgY2FzZSBTQ1JfWEQ6ICAgICAgICAgICAgICAgICAgICAgIC8q IFgtcGFja2V0IGRhdGEgKi8KLSAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyAp OwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0NXOiAgICAgICAgICAgICAgICAg ICAgICAvKiBDbG9zZSBXaW5kb3cgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIHBjdCA9IDEw MDsgb2xkcGN0ID0gMDsgICAgICAgICAgLyogUmVzZXQgdGhlc2UgZm9yIG5leHQgdGltZS4gKi8K LSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIG9sZHR5cCA9IDA7IG9sZHJ0dCA9IC0xTDsg b2xkdHJ5ID0gLTE7IG9sZGxlbiA9IC0xOwotICAgICAgICBvbGR0aW0gPSAtMTsKLQotICAgICAg ICBmdF93aW4gPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgdGhhdCB3aW5kb3cgaXMg Y2xvc2VkLiAqLwotICAgICAgICBjZW5kdyA9IDE7IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1Jf Q0Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgY3VycmVudCBkaXJlY3RvcnkgKi8K LSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRElS LCAobG9uZykgcyApOwotI2lmZGVmIE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKLSNl bmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBkZWZhdWx0OiAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQmFkIGNhbGwgKi8KLSAgICAgICAgS3VpU2V0UHJvcGVydHko S1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIs Ci0gICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRo IGJhZCBmdW5jdGlvbiBjb2RlICoqKiIKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAg ICAgcmV0dXJuOwotICAgIH0KLX0KLSNlbmRpZiAvKiBLVUkgKi8KLSNlbmRpZiAvKiBNQUMgKi8K LQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIENLX0NVUlBPUwotLyogRHVtbWllcyBm b3Igd2hlbiBjdXJzb3IgY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkICovCi1pbnQKLWNrX2N1cnBv cyhyb3csIGNvbCkgewotICAgIHJldHVybigtMSk7Ci19Ci0KLWludAotY2tfY2xzKCkgewotICAg IHJldHVybigtMSk7Ci19Ci0KLWludAotY2tfY2xlb2woKSB7Ci0gICAgcmV0dXJuKC0xKTsKLX0K LSNlbmRpZiAvKiBDS19DVVJQT1MgKi8KLQotI2lmbmRlZiBOT0lLU0QKLSNpZmRlZiBJS1NEQgot Ci1zdHJ1Y3QgaWtzZGJmbGQgZGJmbGRbXSA9IHsKLSAgIC8qIE9mZnNldCAgICBMZW5ndGggICAg VHlwZSAgICovCi0gICAgeyBEQl9GTEFHUywgZEJfRkxBR1MsIERCVF9IRVggfSwgICAgLyogIDAg ZGJfRkxBR1MgRmxhZ3MgKi8KLSAgICB7IERCX0FUWVBFLCBkQl9BVFlQRSwgREJUX0hFWCB9LCAg ICAvKiAgMSBkYl9BVFlQRSBBdXRoIHR5cGUgKi8KLSAgICB7IERCX0FNT0RFLCBkQl9BTU9ERSwg REJUX0hFWCB9LCAgICAvKiAgMyBkYl9BTU9ERSBBdXRoIG1vZGUgKi8KLSAgICB7IERCX1NUQVRF LCBkQl9TVEFURSwgREJUX0hFWCB9LCAgICAvKiAgMiBkYl9TVEFURSBTdGF0ZSAqLwotICAgIHsg REJfTVlQSUQsIGRCX01ZUElELCBEQlRfSEVYIH0sICAgIC8qICA1IGRiX01ZUElEIFBJRCAqLwot ICAgIHsgREJfU0FERFIsIGRCX1NBRERSLCBEQlRfSEVYIH0sICAgIC8qICA0IGRiX1NBRERSIFNl cnZlciBhZGRyZXNzICovCi0gICAgeyBEQl9DQUREUiwgZEJfQ0FERFIsIERCVF9IRVggfSwgICAg LyogIDYgZGJfQ0FERFIgQ2xpZW50IGFkZHJlc3MgKi8KLSAgICB7IERCX1NUQVJULCBkQl9TVEFS VCwgREJUX0RBVCB9LCAgICAvKiAgNyBkYl9TVEFSVCBTZXNzaW9uIHN0YXJ0ICovCi0gICAgeyBE Ql9MQVNUVSwgZEJfTEFTVFUsIERCVF9EQVQgfSwgICAgLyogIDggZGJfTEFTVFUgTGFzdCB1cGRh dGUgKi8KLSAgICB7IERCX1VMRU4sICBkQl9VTEVOLCAgREJUX0hFWCB9LCAgICAvKiAgOSBkYl9V TEVOICBVc2VybmFtZSBsZW5ndGggKi8KLSAgICB7IERCX0RMRU4sICBkQl9ETEVOLCAgREJUX0hF WCB9LCAgICAvKiAxMCBkYl9ETEVOICBEaXJlY3RvcnkgbmFtZSBsZW5ndGggKi8KLSAgICB7IERC X0lMRU4sICBkQl9JTEVOLCAgREJUX0hFWCB9LCAgICAvKiAxMSBkYl9JTEVOICBJbmZvIGxlbmd0 aCAqLwotICAgIHsgREJfUEFEMSwgIGRCX1BBRDEsICBEQlRfVU5EIH0sICAgIC8qIDEyIGRiX1BB RDEgIChSZXNlcnZlZCkgKi8KLSAgICB7IERCX1VTRVIsICBkQl9VU0VSLCAgREJUX1NUUiB9LCAg ICAvKiAxMyBkYl9VU0VSICBVc2VybmFtZSAqLwotICAgIHsgREJfRElSLCAgIGRCX0RJUiwgICBE QlRfU1RSIH0sICAgIC8qIDE0IGRiX0RJUiAgIEN1cnJlbnQgRGlyZWN0b3J5ICovCi0gICAgeyBE Ql9JTkZPLCAgZEJfSU5GTywgIERCVF9TVFIgfSAgICAgLyogMTUgZGJfSU5GTyAgU3RhdGUtc3Bl Y2lmaWMgaW5mbyAqLwotfTsKLQotc3RhdGljIGNoYXIgbGNrbmFtW0NLTUFYUEFUSCsxXTsgICAg ICAgIC8qIExvY2tmaWxlIHBhdGhuYW1lICovCi1zdGF0aWMgY2hhciB0bXBsY2tbQ0tNQVhQQVRI KzFdOyAgICAgICAgLyogVGVtcG9yYXJ5IGxvY2tmaWxlIG5hbWUgKi8KLQotc3RhdGljIGNoYXIg KiB1cGRtb2RlID0gICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBtb2RlIGZvciBmb3BlbigpICov Ci0jaWZkZWYgT1MyCi0gICJyK2IiCi0jZWxzZQotI2lmZGVmIFZNUwotICAicitiIgotI2Vsc2UK LSAgInIrIgotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICA7Ci0KLS8qICBE IEIgSSBOIEkgVCAgLS0gIEluaXRpYWxpemUgdGhlIElLU0QgZGF0YWJhc2UuLi4gICovCi0KLWlu dAotZGJpbml0KCkgewotICAgIGV4dGVybiBpbnQgZGJpbml0ZWQ7Ci0gICAgaW50IHggPSAwOwot ICAgIGRlYnVnKEYxMTAsImRiaW5pdCBkYmRpciAxIixkYmRpciwwKTsKLSAgICBkZWJ1ZyhGMTEw LCJkYmluaXQgZGJmaWxlIDEiLGRiZmlsZSwwKTsKLSAgICBpZiAoZGJpbml0ZWQpCi0gICAgICBy ZXR1cm4oMCk7Ci0jaWZkZWYgT1MyCi0gICAgaWYgKCFkYmRpcikgewotI2lmZGVmIE5UCi0gICAg ICAgIGNoYXIgKiBwID0gTlVMTDsKLSAgICAgICAgaWYgKCFpc1dpbjk1KCkpIHsKLSAgICAgICAg ICAgIHAgPSBnZXRlbnYoIlN5c3RlbVJvb3QiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIHAgPSBnZXRlbnYoIndpbmJvb3RkaXIiKTsKLSAgICAgICAgICAgIGlmICghcCkgIHAgPSBn ZXRlbnYoIndpbmRpciIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcCkgcCA9ICJDOi8iOwot ICAgICAgICBkYmRpciA9IG1hbGxvYyhzdHJsZW4ocCkrMik7Ci0gICAgICAgIHN0cmNweShkYmRp cixwKTsJCS8qIHNhZmUgKi8KLSAgICAgICAgcCA9IGRiZGlyOwotICAgICAgICB3aGlsZSAoKnAp IHsKLSAgICAgICAgICAgIGlmICgqcCA9PSAnXFwnKQotICAgICAgICAgICAgICAqcCA9ICcvJzsK LSAgICAgICAgICAgIHArKzsKLSAgICAgICAgfQotICAgICAgICBpZiAoKihwLTEpICE9ICcvJyAp IHsKLSAgICAgICAgICAgICpwKysgPSAnLyc7Ci0gICAgICAgICAgICAqcCA9ICdcMCc7Ci0gICAg ICAgIH0KLSNlbHNlIC8qIE5UICovCi0gICAgICAgIG1ha2VzdHIoJmRiZGlyLCJDOi8iKTsKLSNl bmRpZiAvKiBOVCAqLwotICAgIH0KLSNlbHNlIC8qIE9TMiAqLwotICAgIGlmICghZGJkaXIpCi0g ICAgICBtYWtlc3RyKCZkYmRpcixJS19EQkFTRURJUik7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAg ICBpZiAoIWRiZmlsZSkgewotICAgICAgICBjaGFyICogcyA9ICIiOwotICAgICAgICB4ID0gc3Ry bGVuKGRiZGlyKTsKLSAgICAgICAgaWYgKGRiZGlyW3gtMV0gIT0gJy8nKSB7Ci0gICAgICAgICAg ICBzID0gIi8iOwotICAgICAgICAgICAgeCsrOwotICAgICAgICB9Ci0gICAgICAgIHggKz0gKGlu dClzdHJsZW4oSUtfREJBU0VGSUwpOwotICAgICAgICBkYmZpbGUgPSAoY2hhciAqKW1hbGxvYyh4 KzEpOwotICAgICAgICBzcHJpbnRmKGRiZmlsZSwiJXMlcyVzIixkYmRpcixzLElLX0RCQVNFRklM KTsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwiZGJpbml0IGRiZGlyIDIiLGRiZGlyLDApOwotICAg IGRlYnVnKEYxMTAsImRiaW5pdCBkYmZpbGUgMiIsZGJmaWxlLDApOwotICAgIG15cGlkID0gZ2V0 cGlkKCk7ICAgICAgICAgICAgICAgICAgIC8qIEdldCBteSBwaWQgKi8KLSAgICBkZWJ1ZyhGMTAx LCJkYmluaXQgbXlwaWQiLCIiLG15cGlkKTsKLQotICAgIGlmICghbXloZXhpcFswXSkgeyAgICAg ICAgICAgICAgICAgIC8qIFNldCBteSBoZXggSVAgYWRkcmVzcyAqLwotI2lmZGVmIFRDUFNPQ0tF VAotICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBteXhpcGFkZHI7Ci0gICAgICAgIGlmIChn ZXRsb2NhbGlwYWRkcigpID4gLTEpIHsKLSAgICAgICAgICAgIG15aXAgPSBteXhpcGFkZHI7Ci0g ICAgICAgICAgICBzcHJpbnRmKG15aGV4aXAsIiUwOGx4IixteWlwKTsgLyogKE5lZWRzIGZpeGlu ZyBmb3IgSVB2NikgKi8KLSAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0g ICAgICAgICAgY2tzdHJuY3B5KG15aGV4aXAsIjAwMDAwMDAwIiw5KTsKLSAgICB9Ci0gICAgZGVi dWcoRjExMSwiZGJpbml0IG15aXAiLG15aGV4aXAsbXlpcCk7Ci0gICAgaWYgKCFwZWVyaGV4aXBb MF0pIHsgICAgICAgICAgICAgICAgLyogR2V0IHBlZXIncyAgaGV4IElQIGFkZHJlc3MgKi8KLSNp ZmRlZiBUQ1BTT0NLRVQKLSAgICAgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGVlcnhpcGFkZHI7 Ci0gICAgICAgIGlmIChja2dldHBlZXIoKSkgewotICAgICAgICAgICAgcGVlcmlwID0gcGVlcnhp cGFkZHI7Ci0gICAgICAgICAgICBzcHJpbnRmKHBlZXJoZXhpcCwiJTA4bHgiLHBlZXJpcCk7IC8q IChOZWVkcyBmaXhpbmcgZm9yIElQdjYpICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJkYmlu aXQgcGVlcmlwIixwZWVyaGV4aXAscGVlcmlwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIGRlYnVnKEYxMDEsImRiaW5pdCBja2dldHBlZXIgZmFpbHVyZSIsIiIsZXJybm8pOwotICAg ICAgICAgICAgY2tzdHJuY3B5KHBlZXJoZXhpcCwiMDAwMDAwMDAiLDkpOwotICAgICAgICB9Ci0j ZWxzZQotICAgICAgICBja3N0cm5jcHkocGVlcmhleGlwLCIwMDAwMDAwMCIsOSk7Ci0jZW5kaWYg LyogVENQU09DS0VUICovCi0gICAgfQotICAgIGRlYnVnKEYxMTEsImRiaW5pdCBwZWVyaXAiLHBl ZXJoZXhpcCxwZWVyaXApOwotICAgIGRlYnVnKEYxMDEsImRiaW5pdCBkYmVuYWJsZWQiLCIiLGRi ZW5hYmxlZCk7Ci0gICAgaWYgKGRiZW5hYmxlZCAmJiBpbnNlcnZlcikgewotICAgICAgICBteWRi c2xvdCA9IGdldHNsb3QoKTsKLSAgICAgICAgZGVidWcoRjExMSwiZGJpbml0IGdldHNsb3QiLGNr aXRvYShpa2Rib3BlbikseCk7Ci0gICAgICAgIGlmIChpa2Rib3BlbikgZGJpbml0ZWQgPSAxOwot ICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qICBVIFAgRCBTIEwgTyBUICAtLSAgVXBkYXRl IHNsb3QgbiAgKi8KLQotLyoKLSAgT3BlbnMgdGhlIGRhdGFiYXNlIGlmIG5lY2Vzc2FyeSwgc2Vl a3MgdG8gc2xvdCBuLCB3cml0ZXMgY3VycmVudCByZWNvcmQKLSAgYW5kIGFkZHMgY3VycmVudCB0 aW1lIHRvIGxhc3QtdXBkYXRlIGZpZWxkLiAgbiBpcyB0aGUgcmVjb3JkIHNlcXVlbmNlIG51bWJl cgotICAoMCwgMSwgMiwgLi4uKSwgbm90IHRoZSBzZWVrIHBvaW50ZXIuICAgUmV0dXJucyAtMSBv biBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MuCi0qLwotaW50Ci11cGRzbG90KG4pIGludCBuOyB7ICAg ICAgICAgICAgICAgICAgICAgLyogVXBkYXRlIG91ciBzbG90ICovCi0gICAgaW50IHJjID0gMDsK LSAgICBDS19PRkZfVCBwb3NpdGlvbjsKLQotICAgIGRlYnVnKEYxMTEsInVwZHNsb3QiLCJpa2Ri b3BlbiIsaWtkYm9wZW4pOwotICAgIGlmICghaWtkYm9wZW4pICAgICAgICAgICAgICAgICAgICAg IC8qIE5vdCBpZiBub3Qgb2sgKi8KLSAgICAgIHJldHVybigwKTsKLSAgICBpZiAoIWRiZnApIHsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBPcGVuIGRhdGFiYXNlIGlmIG5vdCBvcGVuICovCi0g ICAgICAgIGRiZnAgPSBmb3BlbihkYmZpbGUsdXBkbW9kZSk7ICAgLyogSW4gdXBkYXRlIG5vLXRy dW5jYXRlIG1vZGUgKi8KLSAgICAgICAgaWYgKCFkYmZwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTEwLCJ1cGRzbG90IGZvcGVuIGZhaWxlZCIsZGJmaWxlLDApOwotICAgICAgICAgICAgaWtkYm9w ZW4gPSAwOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAv KiBkZWJ1ZyhGMTExLCJ1cGRzbG90IGRiZmlsZSIsZGJmaWxlLGRiZnApOyAqLwotICAgIHBvc2l0 aW9uID0gbiAqIERCX1JFQ0w7Ci0gICAgaWYgKENLRlNFRUsoZGJmcCxwb3NpdGlvbiwwKSA8IDAp IHsJLyogU2VlayB0byBkZXNpcmVkIHNsb3QgKi8KLSAgICAgICAgZGVidWcoRjExMSwidXBkc2xv dCBmc2VlayBmYWlsZWQiLGRiZmlsZSxteWRic2Vlayk7Ci0gICAgICAgIGlrZGJvcGVuID0gMDsK LSAgICAgICAgcmMgPSAtMTsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBVcGRhdGUgdGhlIHVw ZGF0ZSB0aW1lICovCi0gICAgICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0xBU1RVXS5vZmZd LAotICAgICAgICAgICAgICAgIGNrZGF0ZSgpLAotICAgICAgICAgICAgICAgIGRiZmxkW2RiX0xB U1RVXS5sZW4KLSAgICAgICAgICAgICAgICApOwotICAgICAgICBpZiAoZndyaXRlKGRicmVjLDEs REJfUkVDTCxkYmZwKSA8IERCX1JFQ0wpIHsgLyogV3JpdGUgdGhlIHJlY29yZCAqLwotICAgICAg ICAgICAgZGVidWcoRjExMCwidXBkc2xvdCBmd3JpdGUgZmFpbGVkIixkYmZpbGUsMCk7Ci0gICAg ICAgICAgICBpa2Rib3BlbiA9IDA7Ci0gICAgICAgICAgICByYyA9IC0xOwotICAgICAgICB9IGVs c2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsdXNoIHRoZSB3cml0ZSAqLwotICAgICAg ICAgICAgZmZsdXNoKGRiZnApOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19 Ci0KLS8qICBJIE4gSSBUIFMgTCBPIFQgLS0gIEluaXRpYWxpemUgc2xvdCBuIHdpdGggbXkgaW5m byAgKi8KLQotaW50Ci1pbml0c2xvdChuKSBpbnQgbjsgeyAgICAgICAgICAgICAgICAgICAgLyog SW5pdGlhbGl6ZSBzbG90ICovCi0gICAgaW50IGs7Ci0jaWZkZWYgVENQU09DS0VUCi0gICAgZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgcGVlcnhpcGFkZHI7Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0K LSAgICBkZWJ1ZyhGMTAxLCJpbml0c2xvdCIsIiIsbik7Ci0KLSNpZmRlZiBVU0VfTUVNQ1BZCi0g ICAgbWVtc2V0KGRicmVjLDMyLERCX1JFQ0wpOwotI2Vsc2UKLSAgICBmb3IgKGsgPSAwOyBrIDwg REJfUkVDTDsgaysrKQotICAgICAgZGJyZWNba10gPSAnXDA0MCc7Ci0jZW5kaWYgLyogVVNFX01F TUNQWSAqLwotCi0gICAgbXlmbGFncyA9IERCRl9JTlVTRTsgICAgICAgICAgICAgICAgLyogU2V0 IGluLXVzZSBmbGFnICovCi0gICAgbXlzdGF0ZSA9IFdfTk9USElORzsKLSAgICBteWF0eXBlID0g MEw7Ci0gICAgbXlhbW9kZSA9IDBMOwotCi0gICAgayA9IGRiZmxkW2RiX0ZMQUdTXS5sZW47ICAg ICAgICAgICAgLyogTGVuZ3RoIG9mIGZsYWdzIGZpZWxkICovCi0gICAgc3RybmNweSgmZGJyZWNb ZGJmbGRbZGJfRkxBR1NdLm9mZl0sdWxvbmd0b2hleChteWZsYWdzLGspLGspOwotCi0gICAgayA9 IGRiZmxkW2RiX0FUWVBFXS5sZW47Ci0gICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfQVRZUEVd Lm9mZl0sdWxvbmd0b2hleChteWF0eXBlLGspLGspOwotCi0gICAgayA9IGRiZmxkW2RiX0FNT0RF XS5sZW47Ci0gICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfQU1PREVdLm9mZl0sdWxvbmd0b2hl eChteWFtb2RlLGspLGspOwotCi0gICAgayA9IGRiZmxkW2RiX1NUQVRFXS5sZW47Ci0gICAgc3Ry bmNweSgmZGJyZWNbZGJmbGRbZGJfU1RBVEVdLm9mZl0sdWxvbmd0b2hleChteXN0YXRlLGspLGsp OwotCi0gICAgayA9IGRiZmxkW2RiX1NBRERSXS5sZW47Ci0gICAgc3RybmNweSgmZGJyZWNbZGJm bGRbZGJfU0FERFJdLm9mZl0sdWxvbmd0b2hleChteWlwLGspLGspOwotCi0jaWZkZWYgVENQU09D S0VUCi0gICAgY2tnZXRwZWVyKCk7Ci0gICAgayA9IGRiZmxkW2RiX0NBRERSXS5sZW47Ci0gICAg c3RybmNweSgmZGJyZWNbZGJmbGRbZGJfQ0FERFJdLm9mZl0sdWxvbmd0b2hleChwZWVyeGlwYWRk cixrKSxrKTsKLSNlbHNlCi0gICAgayA9IGRiZmxkW2RiX0NBRERSXS5sZW47Ci0gICAgc3RybmNw eSgmZGJyZWNbZGJmbGRbZGJfQ0FERFJdLm9mZl0sdWxvbmd0b2hleCgwTCxrKSxrKTsKLSNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KLQotICAgIGsgPSBkYmZsZFtkYl9NWVBJRF0ubGVuOwotICAgIHN0 cm5jcHkoJmRicmVjW2RiZmxkW2RiX01ZUElEXS5vZmZdLHVsb25ndG9oZXgobXlwaWQsayksayk7 Ci0KLSAgICBrID0gZGJmbGRbZGJfU1RBUlRdLmxlbjsKLSAgICBzdHJuY3B5KCZkYnJlY1tkYmZs ZFtkYl9TVEFSVF0ub2ZmXSxja2RhdGUoKSxrKTsKLQotICAgIGsgPSBkYmZsZFtkYl9VTEVOXS5s ZW47Ci0gICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfVUxFTl0ub2ZmXSwiMDAwMCIsNCk7Ci0K LSAgICBrID0gZGJmbGRbZGJfRExFTl0ubGVuOwotICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2Ri X0RMRU5dLm9mZl0sIjAwMDAiLDQpOwotCi0gICAgayA9IGRiZmxkW2RiX0lMRU5dLmxlbjsKLSAg ICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9JTEVOXS5vZmZdLCIwMDAwIiw0KTsKLQotICAgIHN0 cm5jcHkoJmRicmVjW2RiZmxkW2RiX0lORk9dLm9mZl0sIklOSVQiLDQpOwotICAgIHJldHVybih1 cGRzbG90KG4pKTsKLX0KLQotaW50Ci1zbG90c3RhdGUoeCxzMSxzMixzMykgaW50IHg7IGNoYXIg KnMxLCAqczIsICpzMzsgewotICAgIGludCBrLCBsMSwgbDIsIGwzLCB6OwotICAgIG15c3RhdGUg PSB4OwotICAgIGRlYnVnKEYxMDEsInNsb3RzdGF0ZSBpa2Rib3BlbiIsIiIsaWtkYm9wZW4pOwot ICAgIGlmICghaWtkYm9wZW4pCi0gICAgICByZXR1cm4oLTEpOwotICAgIGlmICghczEpIHMxID0g IiI7Ci0gICAgbDEgPSBzdHJsZW4oczEpOwotICAgIGlmICghczIpIHMyID0gIiI7Ci0gICAgbDIg PSBzdHJsZW4oczIpOwotICAgIGlmICghczMpIHMzID0gIiI7Ci0gICAgbDMgPSBzdHJsZW4oczMp OwotICAgIHN0cm5jcHkoJmRicmVjW0RCX1NUQVRFXSx1bG9uZ3RvaGV4KG15c3RhdGUsNCksNCk7 Ci0gICAgayA9IGRiZmxkW2RiX0lMRU5dLmxlbjsKLSAgICB6ID0gbDEgKyBsMiArIGwzICsgMjsK LSAgICBpZiAoeiA+IGRCX0lORk8pCi0gICAgICB6ID0gZEJfSU5GTzsKLSAgICBzdHJuY3B5KCZk YnJlY1tEQl9JTEVOXSx1bG9uZ3RvaGV4KCh1bnNpZ25lZCBsb25nKXosayksayk7Ci0gICAgayA9 IGRiZmxkW2RiX0lORk9dLmxlbjsKLSAgICB6ID0gZGJmbGRbZGJfSU5GT10ub2ZmOwotICAgIGlm IChsMSA8PSBrKSB7Ci0gICAgICAgIGxzZXQoJmRicmVjW3pdLHMxLGwxKzEsMzIpOwotICAgICAg ICB6ICs9IGwxKzE7Ci0gICAgICAgIGsgLT0gbDErMTsKLSAgICAgICAgaWYgKGwyIDw9IGspIHsK LSAgICAgICAgICAgIGxzZXQoJmRicmVjW3pdLHMyLGwyKzEsMzIpOwotICAgICAgICAgICAgeiAr PSBsMisxOwotICAgICAgICAgICAgayAtPSBsMisxOwotICAgICAgICAgICAgaWYgKGwzIDw9IGsp Ci0gICAgICAgICAgICAgIGxzZXQoJmRicmVjW3pdLHMzLGssMzIpOwotICAgICAgICB9Ci0gICAg fQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAgICAgICBjaGFyIGJ1ZlsxMjhd OwotICAgICAgICBpbnQgaTsKLSAgICAgICAgc3RybmNweShidWYsJmRicmVjW0RCX0lORk9dLDEy Nyk7Ci0gICAgICAgIGJ1ZlsxMjddID0gTlVMOwotICAgICAgICBmb3IgKGkgPSAxMjY7IGkgPiAw ICYmIGJ1ZltpXSA9PSAzMjsgaS0tKSBidWZbaV0gPSAwOwotICAgICAgICBkZWJ1ZyhGMTExLCJz bG90c3RhdGUiLGJ1ZixteXN0YXRlKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICB6 ID0gdXBkc2xvdChteWRic2xvdCk7Ci0gICAgZGVidWcoRjEwMSwic2xvdHN0YXRlIHVwZHNsb3Qi LCIiLHopOwotICAgIHJldHVybih6KTsKLX0KLQotaW50Ci1zbG90ZGlyKHMxLHMyKSBjaGFyICog czEsICogczI7IHsgICAgICAgLyogVXBkYXRlIGN1cnJlbnQgZGlyZWN0b3J5ICovCi0gICAgaW50 IGssIGxlbjEsIGxlbjI7Ci0gICAgaWYgKCFpa2Rib3BlbikKLSAgICAgIHJldHVybigtMSk7Ci0g ICAgaWYgKCFzMSkgczEgPSAiIjsKLSAgICBpZiAoIXMyKSBzMiA9ICIiOwotICAgIGxlbjEgPSBz dHJsZW4oczEpOwotICAgIGxlbjIgPSBzdHJsZW4oczIpOwotICAgIGsgPSBkYmZsZFtkYl9ETEVO XS5sZW47Ci0gICAgc3RybmNweSgmZGJyZWNbREJfRExFTl0sdWxvbmd0b2hleCgodW5zaWduZWQg bG9uZykobGVuMStsZW4yKSxrKSxrKTsKLSAgICBrID0gZGJmbGRbZGJfRElSXS5sZW47Ci0gICAg aWYgKGxlbjEgPiAwKSB7Ci0gICAgICAgIGxzZXQoJmRicmVjW2RiZmxkW2RiX0RJUl0ub2ZmXSxz MSxsZW4xLDMyKTsKLSAgICAgICAgbHNldCgmZGJyZWNbZGJmbGRbZGJfRElSXS5vZmYrbGVuMV0s czIsay1sZW4xLDMyKTsKLSAgICB9IGVsc2UgewotICAgICAgICBsc2V0KCZkYnJlY1tkYmZsZFtk Yl9ESVJdLm9mZl0sczIsaywzMik7Ci0gICAgfQotICAgIHJldHVybih1cGRzbG90KG15ZGJzbG90 KSk7Ci19Ci0KLS8qICBGIFIgRSBFIFMgTCBPIFQgIC0tICBGcmVlIHNsb3QgbiAgKi8KLQotaW50 Ci1mcmVlc2xvdChuKSBpbnQgbjsgewotICAgIGludCBrOwotICAgIGlmICghaWtkYm9wZW4pCi0g ICAgICByZXR1cm4oMCk7Ci0gICAgZGJmbGFncyA9IDBMOwotICAgIGlmIChuID09IG15ZGJzbG90 KSB7Ci0gICAgICAgIGRiZmxhZ3MgPSBteWZsYWdzICYgfkRCRl9JTlVTRTsKLSAgICAgICAgZGJm bGFncyAmPSB+REJGX0xPR0dFRDsKLSAgICB9Ci0gICAgayA9IGRiZmxkW2RiX0ZMQUdTXS5sZW47 Ci0gICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfRkxBR1NdLm9mZl0sdWxvbmd0b2hleChkYmZs YWdzLGspLGspOwotICAgIHJldHVybih1cGRzbG90KG4pKTsKLX0KLQotLyogIEcgRSBUIFMgTCBP IFQgIC0tICBGaW5kIGEgZnJlZSBkYXRhYmFzZSBzbG90OyByZXR1cm5zIHNsb3QgbnVtYmVyICAq LwotCi0jaWZkZWYgVU5JWAotI2luY2x1ZGUgPGZjbnRsLmg+CQkJLyogRm9yIGNyZWF0KCkgKi8K LSNlbmRpZgkvKiBVTklYICovCi0KLWludAotZ2V0c2xvdCgpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEZpbmQgYSBmcmVlIHNsb3QgZm9yIHVzICovCi0gICAgRklMRSAqIHJmcCA9 IE5VTEw7ICAgICAgICAgICAgICAgICAgLyogUmV0dXJucyBzbG90IG51bWJlciAoMCwgMSwgLi4u KSAqLwotICAgIGNoYXIgaWRzdHJpbmdbNjRdOyAgICAgICAgICAgICAgICAgIC8qIFBJRCBzdHJp bmcgYnVmZmVyIChkZWNpbWFsKSAqLwotICAgIGNoYXIgcGlkYnVmWzY0XSwgKiBzOwotICAgIGlu dCBqLCBrLCBuLCB4LCByYyA9IC0xOwotICAgIGludCBsb2NrZmQsIHRyaWVzLCBoYXZlc2xvdCA9 IDA7Ci0gICAgbG9uZyBsb2NrcGlkOwotICAgIENLX09GRl9UIGk7Ci0gICAgLyogY2hhciBpcGJ1 ZlsxN107ICovCi0KLSAgICBpZiAoIW15aGV4aXBbMF0pICAgICAgICAgICAgICAgICAgICAvKiBT ZXQgbXkgaGV4IElQIGFkZHJlc3MgaWYgbm90IHNldCAqLwotICAgICAgY2tzdHJuY3B5KChjaGFy ICopbXloZXhpcCwiN0YwMDAwMDEiLDMzKTsKLSAgICBzcHJpbnRmKGlkc3RyaW5nLCIlMDhseDol MDEwbGRcbiIsbXlpcCxteXBpZCk7Ci0gICAgZGVidWcoRjExMCwiZ2V0c2xvdCBpZHN0cmluZyIs IGlkc3RyaW5nLCAwKTsKLQotICAgIC8qIE1ha2UgdGVtcG9yYXJ5IGxvY2tmaWxlIG5hbWUgSVAu UElEIChoZXguaGV4KSAqLwotICAgIC8qIFRoaXMgc2hvdWxkIGZpdCBpbiAxNCBjaGFycyAtLSBo dWdlIFBJRHMgYXJlIHVzdWFsbHkgbm90IHBvc3NpYmxlICovCi0gICAgLyogb24gMTQtY2hhciBm aWxlbmFtZSBzeXN0ZW1zLiAqLwotCi0gICAgc3ByaW50Zih0bXBsY2ssIiVzJTA4bHguJWx4Iixk YmRpcixteWlwLG15cGlkKTsKLSAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IHRlbXBmaWxlIix0bXBs Y2ssMCk7Ci0KLSAgICAvKiBNYWtlIGEgdGVtcG9yYXJ5IGZpbGUgKi8KLQotICAgIGxvY2tmZCA9 IGNyZWF0KHRtcGxjaywgMDYwMCk7CS8qIEJVVCBUSElTIElTTidUIFBPUlRBQkxFICovCi0gICAg aWYgKGxvY2tmZCA8IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwiZ2V0c2xvY2sgdGVtcCBsb2Nr ZmlsZSBjcmVhdGUgZmFpbHVyZSIsIHRtcGxjaywgZXJybm8pOwotICAgICAgICByZXR1cm4oLTEp OwotICAgIH0KLSAgICAvKiBXcml0ZSBteSAoZGVjaW1hbCkgUElEIGludG8gdGhlIHRlbXAgZmls ZSAqLwotCi0gICAgd3JpdGUobG9ja2ZkLGlkc3RyaW5nLChpbnQpc3RybGVuKGlkc3RyaW5nKSk7 Ci0gICAgaWYgKGNsb3NlKGxvY2tmZCkgPCAwKSB7ICAgICAgICAgICAgLyogQ2xvc2UgbG9ja2Zp bGUgKi8KLSAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBlcnJvciBjbG9zaW5nIHRlbXAgbG9j a2ZpbGUiLCAiIiwgZXJybm8pOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBzcHJp bnRmKGxja25hbSwiJXMlcyIsZGJkaXIsSUtfTE9DS0ZJTEUpOyAvKiBCdWlsZCBsb2NrZmlsZSBu YW1lICovCi0gICAgZGVidWcoRjExMCwiZ2V0c2xvdCBsb2NrZmlsZSIsbGNrbmFtLDApOwotCi0g ICAgcmZwID0gZm9wZW4obGNrbmFtLCJyIik7ICAgICAgICAgICAgLyogU2VlIGlmIGxvY2tmaWxl IGV4aXN0cyAqLwotICAgIGlmIChyZnApIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElm IHNvLi4uICovCi0gICAgICAgIHJzZXQocGlkYnVmLCIiLDY0LDApOwotICAgICAgICB4ID0gZnJl YWQocGlkYnVmLDEsNjMscmZwKTsgICAgIC8qIFJlYWQgSUQgc3RyaW5nIGZyb20gaXQgKi8KLSAg ICAgICAgZmNsb3NlKHJmcCk7ICAgICAgICAgICAgICAgICAgICAvKiBhbmQgY2xvc2UgaXQgcXVp Y2tseSAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGxvY2sgZXhpc3RzIixwaWRidWYs MCk7Ci0gICAgICAgIGlmICh4ID4gMCkgeyAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgaGF2 ZSBhIFBJRCwgY2hlY2sgaXQgKi8KLSAgICAgICAgICAgIGNoYXIgKiBzID0gcGlkYnVmOwotICAg ICAgICAgICAgd2hpbGUgKCpzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzbG93ZXIoKnMpKSAq cyA9IHRvdXBwZXIoKnMpOwotICAgICAgICAgICAgICAgIGlmICgqcyA9PSAnOicpIHsKLSAgICAg ICAgICAgICAgICAgICAgKnMgPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs ImdldHNsb3QgbG9jayBJUCIscGlkYnVmLDApOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJndGVzbG90IG15ICAgSVAiLG15aGV4aXAsMCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm ICghc3RyY21wKHBpZGJ1ZixteWhleGlwKSkgeyAvKiBTYW1lIElQIGFkZHJlc3M/ICovCi0gICAg ICAgICAgICAgICAgICAgICAgICBsb2NrcGlkID0gYXRvbChzKzEpOyAvKiBZZXMsIG5vdyBnZXQg UElEICovCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGxvY2tw aWQiLCIiLGxvY2twaWQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBpZiBQ SUQgbG9ja3BpZCBvbiB0aGlzIGNvbXB1dGVyIGlzIGFsaXZlICovCi0gICAgICAgICAgICAgICAg ICAgICAgICB4ID0gemNoa3BpZChsb2NrcGlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm ICgheCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImdldHNsb3Qg UElEIHN0YWxlLHJlbW92aW5nIGxvY2siLCIiLDApOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVubGluayhsY2tuYW0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgZGVidWcoRjExMSwiZ2V0c2xvdCBsb2NrZmlsZSBvcGVuIGZhaWx1 cmUiLGxja25hbSxlcnJubyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogVHJ5IElLX0xDS1RS SUVTICgxNikgdGltZXMgdG8gcmVuYW1lIHRlbXAgZmlsZSB0byBsb2NrZmlsZSAqLwotCi0gICAg Zm9yICh0cmllcyA9IElLX0xDS1RSSUVTOyB0cmllcyA+IDA7IHRyaWVzLS0pIHsKLSAgICAgICAg aWYgKHpyZW5hbWUodG1wbGNrLGxja25hbSkgPT0gMCkKLSAgICAgICAgICBicmVhazsKLSAgICAg ICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBkYXRhYmFzZSBsb2NrZWQgYnkgcGlkIiwgIiIsIGRicGlk KTsKLSAgICAgICAgc2xlZXAoSUtfTENLU0xFRVApOwotICAgIH0KLSAgICBpZiAodHJpZXMgPCAx KSB7ICAgICAgICAgICAgICAgICAgICAvKiBDb3VsZG4ndCAqLwotICAgICAgICBkZWJ1ZyhGMTEw LCJnZXRzbG90IGNyZWF0ZSBsb2NrIGZhaWx1cmUiLGxja25hbSwwKTsKLSAgICAgICAgcmV0dXJu KC0xKTsKLSAgICB9Ci0gICAgLyogSGF2ZSBsb2NrLCBvcGVuIGRhdGFiYXNlICovCi0KLSAgICBk ZWJ1ZyhGMTEwLCJnZXRzbG90IGhhcyBsb2NrIixsY2tuYW0sMCk7IC8qIEhhdmUgbG9jayAqLwot Ci0gICAgaWYgKCFkYmZpbGUpCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgLyogSWYgZGF0YWJh c2UgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0LiAqLwotCi0gICAgZGVidWcoRjExMCwiZ2V0c2xv dCBkYmZpbGUiLGRiZmlsZSwwKTsKLSAgICBpZiAoemNoa2koZGJmaWxlKSA8IDApIHsKLSAgICAg ICAgZGVidWcoRjExMCwiZ2V0c2xvdCBjcmVhdGluZyBuZXcgZGF0YWJhc2UiLGRiZmlsZSwwKTsK LSAgICAgICAgeCA9IGNyZWF0KGRiZmlsZSwwNjYwKTsKLSAgICAgICAgaWYgKHggPCAwKSB7Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTExLCJnZXRzbG90IGNyZWF0KCkgZmFpbGVkIiwgZGJmaWxlLCBl cnJubyk7Ci0gICAgICAgICAgICBnb3RvIHhzbG90OwotICAgICAgICB9Ci0gICAgICAgIGNsb3Nl KHgpOwotICAgIH0KLSAgICBkYmZwID0gZm9wZW4oZGJmaWxlLHVwZG1vZGUpOyAgICAgICAvKiBP cGVuIGl0IGluIHVwZGF0ZSBtb2RlICovCi0gICAgaWYgKCFkYmZwKSB7Ci0gICAgICAgIGRlYnVn KEYxMTEsImdldHNsb3QgZm9wZW4gZmFpbGVkIixkYmZpbGUsZXJybm8pOwotICAgICAgICBnb3Rv IHhzbG90OwotICAgIH0KLSAgICAvKiBOb3cgZmluZCBhIGZyZWUgKG9yIG5ldykgc2xvdC4uLiAq LwotCi0gICAgZGJsYXN0dXNlZCA9IDBMOyAgICAgICAgICAgICAgICAgICAgLyogU2VlayBwb2lu dGVyIHRvIGxhc3QgcmVjb3JkIGludXNlICovCi0gICAgbXlkYnNlZWsgPSAwTDsgICAgICAgICAg ICAgICAgICAgICAgLyogU2VlayBwb2ludGVyIGZvciBteSByZWNvcmQgKi8KLQotICAgIC8qIFF1 aWNrbHkgcmVhZCB0aGUgd2hvbGUgZGF0YWJhc2U7IG4gPSByZWNvcmQgY291bnRlciwgaSA9IHNl ZWsgcG9pbnRlciAqLwotCi0gICAgZm9yIChuID0gMCwgaSA9IDA7ICFmZW9mKGRiZnApOyBpICs9 IERCX1JFQ0wsIG4rKykgewotICAgICAgICB4ID0gZnJlYWQoZGJyZWMsMSxEQl9SRUNMLGRiZnAp OyAvKiBSZWFkIGEgcmVjb3JkICovCi0gICAgICAgIGlmICh4IDwgMSkgICAgICAgICAgICAgICAg ICAgICAgLyogRU9GIG5vdCBjYXVnaHQgYnkgZmVvZigpICovCi0gICAgICAgICAgYnJlYWs7Ci0j aWZuZGVmIE5PRlRSVU5DQVRFCi0gICAgICAgIGlmICh4ICE9IERCX1JFQ0wpIHsgICAgICAgICAg ICAgLyogV2F0Y2ggb3V0IGZvciB0cmFpbGluZyBqdW5rICovCi0gICAgICAgICAgICBkZWJ1ZyhG MTAxLCJnZXRzbG90IGJhZCBzaXplIiwiIix4KTsgIC8qIChTaG91bGRuJ3QgaGFwcGVuLi4uKSAq LwotI2lmZGVmIENPSEVSRU5UCi0gICAgICAgICAgICBjaHNpemUoZmlsZW5vKGRiZnApLGkpOwot I2Vsc2UKLSAgICAgICAgICAgIGZ0cnVuY2F0ZShmaWxlbm8oZGJmcCksKENLX09GRl9UKWkpOwot I2VuZGlmIC8qIENPSEVSRU5UICovCi0gICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgICAgIENL RlNFRUsoZGJmcCxpLDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbmRpZiAv KiBOT0ZUUlVOQ0FURSAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHJlY29yZCIsIiIs bik7Ci0gICAgICAgIGsgPSBkYmZsZFtkYl9GTEFHU10ub2ZmOwotICAgICAgICBqID0gZGJmbGRb ZGJfRkxBR1NdLmxlbjsKLSAgICAgICAgZGJmbGFncyA9IGhleHRvdWxvbmcoJmRicmVjW2tdLGop OwotICAgICAgICBkZWJ1ZyhGMDAxLCJnZXRzbG90IGRiZmxhZ3MiLCIiLGRiZmxhZ3MpOwotICAg ICAgICBrID0gZGJmbGRbZGJfTVlQSURdLm9mZjsKLSAgICAgICAgaiA9IGRiZmxkW2RiX01ZUElE XS5sZW47Ci0gICAgICAgIGRicGlkICA9IGhleHRvdWxvbmcoJmRicmVjW2tdLGopOwotICAgICAg ICBkZWJ1ZyhGMDAxLCJnZXRzbG90IGRicGlkIiwiIixkYnBpZCk7Ci0gICAgICAgIGsgPSBkYmZs ZFtkYl9TQUREUl0ub2ZmOwotICAgICAgICBqID0gZGJmbGRbZGJfU0FERFJdLmxlbjsKLSAgICAg ICAgZGJpcCA9IGhleHRvdWxvbmcoJmRicmVjW2tdLGopOwotICAgICAgICBkZWJ1ZyhGMDAxLCJn ZXRzbG90IGRiaXAiLCIiLGRiaXApOwotCi0gICAgICAgIGlmIChkYmZsYWdzICYgREJGX0lOVVNF KSB7ICAgICAgLyogUmVtZW1iZXIgbGFzdCBzbG90IGluIHVzZSAqLwotICAgICAgICAgICAgeCA9 IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBpdCdzIFJFQUxMWSBpbiB1c2Ug Ki8KLSAgICAgICAgICAgIGlmIChkYnBpZCA9PSBteXBpZCAmJiBkYmlwID09IG15aXApIHsgLyog Q2hlY2sgZm9yIFBJRCA9PSBteSBQSUQgKi8KLSAgICAgICAgICAgICAgICB4ID0gMTsKLSAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHJlY29yZCBwaWQiLCIiLGRicGlkKTsKLSAg ICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBPciBmb3Igc3RhbGUgUElE ICovCi0gICAgICAgICAgICAgICAgeCA9IHpjaGtwaWQoZGJwaWQpOwotICAgICAgICAgICAgICAg IGRlYnVnKEYxMDEsImdldHNsb3QgemNoa3BpZCgpIiwiIix4KTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGlmICgheCkgeyAgICAgICAgICAgICAgICAgICAvKiBCb2d1cyByZWNvcmQgKi8K LSAgICAgICAgICAgICAgICB4ID0gZnJlZXNsb3Qobik7Ci0gICAgICAgICAgICAgICAgZGVidWco RjEwMSwiZ2V0c2xvdCBzdGFsZSByZWNvcmQgcGlkOiBmcmVlc2xvdCgpIiwiIix4KTsKLSAgICAg ICAgICAgICAgICBpZiAoeCA+IC0xICYmICFoYXZlc2xvdCkKLSAgICAgICAgICAgICAgICAgIGRi ZmxhZ3MgPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIEl0 J3MgcmVhbGx5IGluIHVzZSAqLwotICAgICAgICAgICAgICAgIGRibGFzdHVzZWQgPSBpOwotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghaGF2ZXNsb3QpIHsgICAgICAgICAg ICAgICAgLyogSWYgSSBkb24ndCBoYXZlIGEgc2xvdCB5ZXQgKi8KLSAgICAgICAgICAgIGlmICgh KGRiZmxhZ3MgJiBEQkZfSU5VU0UpKSB7ICAgICAgIC8qIENsYWltIHRoaXMgb25lICovCi0gICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBmcmVlIHNsb3QiLCAiIiwgbik7Ci0gICAg ICAgICAgICAgICAgaGF2ZXNsb3QgPSAxOwotICAgICAgICAgICAgICAgIG15ZGJzZWVrID0gaTsK LSAgICAgICAgICAgICAgICBteWRic2xvdCA9IG47ICAgICAgICAgICAvKiBCdXQga2VlcCBnb2lu Zy4uLiAqLwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIC8qIENvbWUgaGVy ZSB3aXRoIGkgPT0gc2VlayBwb2ludGVyIHRvIGZpcnN0IHJlY29yZCBhZnRlciBlb2YgKi8KLQot ICAgIGlmICghaGF2ZXNsb3QpIHsgICAgICAgICAgICAgICAgICAgIC8qIEZvdW5kIG5vIGZyZWUg c2xvdCBzbyBhZGQgdG8gZW5kICovCi0gICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgbmV3IHNs b3QiLCIiLG4pOwotICAgICAgICBoYXZlc2xvdCA9IDE7Ci0gICAgICAgIG15ZGJzZWVrID0gaTsK LSAgICAgICAgbXlkYnNsb3QgPSBuOwotICAgIH0KLSAgICBpa2Rib3BlbiA9IDE7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBPSyB0byBtYWtlIGRhdGFiYXNlIGVudHJpZXMgKi8KLSAgICBkZWJ1 ZyhGMTAxLCJnZXRzbG90IHJlY29yZHMiLCIiLG4pOwotICAgIGRlYnVnKEYxMDEsImdldHNsb3Qg ZGJsYXN0dXNlZCIsIiIsZGJsYXN0dXNlZCk7Ci0gICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBpIiwi IixpKTsKLQotICAgIC8qIFRyaW0gc3RhbGUgcmVjb3JkcyBmcm9tIGVuZCAqLwotCi0jaWZuZGVm IE5PRlRSVU5DQVRFCi0gICAgaWYgKGkgPiBkYmxhc3R1c2VkK0RCX1JFQ0wpIHsKLSAgICAgICAg ZGVidWcoRjEwMSwiZ2V0c2xvdCB0cnVuY2F0aW5nIGF0IiwiIixkYmxhc3R1c2VkK0RCX1JFQ0wp OwotI2lmZGVmIENPSEVSRU5UCi0gICAgICAgIHggPSBjaHNpemUoZmlsZW5vKGRiZnApLGRibGFz dHVzZWQrREJfUkVDTCk7Ci0jZWxzZQotICAgICAgICB4ID0gZnRydW5jYXRlKGZpbGVubyhkYmZw KSwoQ0tfT0ZGX1QpKGRibGFzdHVzZWQrREJfUkVDTCkpOwotI2VuZGlmIC8qIENPSEVSRU5UICov Ci0gICAgICAgIGlmICh4IDwgMCkgICAgICAgICAgICAgICAgICAgICAgLyogKE5vdCBmYXRhbCkg Ki8KLSAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGZ0cnVuY2F0ZSBmYWlsZWQiLCAiIiwg ZXJybm8pOwotICAgIH0KLSNlbmRpZiAvKiBOT0ZUUlVOQ0FURSAqLwotCi0gICAgLyogSW5pdGlh bGl6ZSBteSByZWNvcmQgKi8KLQotICAgIGlmIChpbml0c2xvdChteWRic2xvdCkgPCAwKSB7Ci0g ICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgaW5pdHNsb3QoKSBlcnJvciIsIiIsbik7Ci0gICAg ICAgIGlrZGJvcGVuID0gMDsKLSAgICAgICAgZ290byB4c2xvdDsKLSAgICB9Ci0gICAgZGVidWco RjEwMSwiZ2V0c2xvdCBPSyIsIiIsbXlkYnNsb3QpOwotICAgIHJjID0gbXlkYnNsb3Q7ICAgICAg ICAgICAgICAgICAgICAgIC8qIE9LIHJldHVybiBjb2RlICovCi0KLSAgeHNsb3Q6ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmxvY2sgdGhlIGRhdGFiYXNlIGFuZCByZXR1cm4g Ki8KLSAgICBpZiAodW5saW5rKGxja25hbSkgPCAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsImdl dHNsb3QgbG9ja2ZpbGUgcmVtb3ZhbCBmYWlsZWQiLGxja25hbSxlcnJubyk7Ci0gICAgICAgIHJj ID0gLTE7Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19Ci0jZW5kaWYgLyogSUtTREIgKi8KLSNl bmRpZiAvKiBOT0lLU0QgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrdXVzeS5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja3V1c3kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgwMmIwNS4uMDAw MDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzeS5j CisrKyAvZGV2L251bGwKQEAgLTEsNDc0NCArMCwwIEBACi0jaW5jbHVkZSAiY2tjc3ltLmgiCi0j ZGVmaW5lIFhGQVRBTCBmYXRhbAotCi0vKiAgQyBLIFUgVSBTIFkgLS0gICJVc2VyIEludGVyZmFj ZSIgZm9yIEMtS2VybWl0IEtlcm1pdCwgcGFydCBZICAqLwotCi0vKiAgQ29tbWFuZC1MaW5lIEFy Z3VtZW50IFBhcnNlciAqLwotCi0vKgotICBBdXRob3JzOgotICAgIEZyYW5rIGRhIENydXogPGZk Y0Bjb2x1bWJpYS5lZHU+LAotICAgICAgVGhlIEtlcm1pdCBQcm9qZWN0LCBDb2x1bWJpYSBVbml2 ZXJzaXR5LCBOZXcgWW9yayBDaXR5Ci0gICAgSmVmZnJleSBFIEFsdG1hbiA8amFsdG1hbkBzZWN1 cmUtZW5kcG9pbnRzLmNvbT4KLSAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsg Q2l0eQotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1 bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMg cmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAg Y29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQg cGVybWlzc2lvbnMuCi0qLwotI2luY2x1ZGUgImNrY2RlYi5oIgotCi1jaGFyICogYmFubmVyZmls ZSA9IE5VTEw7Ci1jaGFyICogaGVscGZpbGUgPSBOVUxMOwotZXh0ZXJuIGludCB4ZmVybG9nLCBm aWxlcGVlaywgbm9saW5rczsKLWV4dGVybiBjaGFyICogeGZlcmZpbGU7Ci1leHRlcm4gaW50IGRl YnRpbTsKLQotI2luY2x1ZGUgImNrY2FzYy5oIgotI2luY2x1ZGUgImNrY2tlci5oIgotI2luY2x1 ZGUgImNrdWNtZC5oIgotI2luY2x1ZGUgImNrY25ldC5oIgotI2luY2x1ZGUgImNrdXVzci5oIgot I2luY2x1ZGUgImNrY3hsYS5oIgotI2lmZGVmIENLX1NTTAotI2luY2x1ZGUgImNrX3NzbC5oIgot I2VuZGlmIC8qIENLX1NTTCAqLwotI2luY2x1ZGUgPHNpZ25hbC5oPgotCi0jaWZkZWYgT1MyCi0j aW5jbHVkZSA8aW8uaD4KLSNpZmRlZiBLVUkKLSNpbmNsdWRlICJpa3VpLmgiCi1leHRlcm4gc3Ry dWN0IF9rdWlfaW5pdCBrdWlfaW5pdDsKLSNlbmRpZiAvKiBLVUkgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLQotZXh0ZXJuIGludCBpbnNlcnZlciwgZm5jbnYsIGZfc2F2ZSwgeGZlcm1vZGU7Ci0jaWZk ZWYgUEFUVEVSTlMKLWV4dGVybiBpbnQgcGF0dGVybnM7Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8K LQotI2lmbmRlZiBOT0lDUAotZXh0ZXJuIGludCBjbWRpbnQ7Ci0jZW5kaWYgLyogTk9JQ1AgKi8K LWV4dGVybiBpbnQgeHN1c3BlbmQ7Ci0KLSNpZmRlZiBORVRDT05OCi0jaWZkZWYgQU5ZWDI1Ci1l eHRlcm4gaW50IHJldmNhbGwsIGNsb3NnciwgY3VkYXRhOwotZXh0ZXJuIGNoYXIgdWRhdGFbXTsK LWV4dGVybiBpbnQgeDI1ZmQ7Ci0jZW5kaWYgLyogQU5ZWDI1ICovCi0jaWZuZGVmIFZNUwotI2lm bmRlZiBPUzIKLSNpZm5kZWYgT1NLCi1leHRlcm4KLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotaW50IHRlbG5ldGZkOwotZXh0ZXJuIHN0cnVj dCBrZXl0YWIgbmV0Y21kW107Ci1leHRlcm4gaW50IHRuX2V4aXQ7Ci0jaWZuZGVmIE5PSUNQCi0j aWZuZGVmIE5PRElBTAotZXh0ZXJuIGludCBubmV0cywgbm5ldGRpcjsgICAgICAgICAgICAgIC8q IE5ldHdvcmsgc2VydmljZXMgZGlyZWN0b3J5ICovCi1leHRlcm4gY2hhciAqbmV0ZGlyW107Ci1l eHRlcm4gY2hhciAqbmhfcFtdOyAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBkaXJlY3Rv cnkgZW50cnkgcG9pbnRlcnMgKi8KLWV4dGVybiBjaGFyICpuaF9wMltdOyAgICAgICAgICAgICAg ICAgICAvKiBOZXR3b3JrIGRpcmVjdG9yeSBlbnRyeSBuZXR0eXBlICovCi1leHRlcm4gY2hhciAq bmhfcHhbNF1bTUFYRE5VTVMgKyAxXTsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLWV4dGVybiBpbnQg bmhjb3VudDsKLWV4dGVybiBjaGFyICogbl9uYW1lOyAgICAgICAgICAgICAgICAgICAvKiBOZXR3 b3JrIG5hbWUgcG9pbnRlciAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0jZW5kaWYgLyogTkVUQ09O TiAqLwotCi0jaWZuZGVmIE5PU1BMCi1leHRlcm4gaW50IG5tYWM7Ci1leHRlcm4gc3RydWN0IG10 YWIgKm1hY3RhYjsKLSNlbmRpZiAvKiBOT1NQTCAqLwotZXh0ZXJuIGNoYXIgdWlkYnVmW107Ci0K LSNpZmRlZiBDS19MT0dJTgotZXh0ZXJuIGludCBsb2dpbnRpbW87Ci0jZW5kaWYgLyogQ0tfTE9H SU4gKi8KLQotZXh0ZXJuIGNoYXIgKiBteW5hbWUsICogZGZ0dHk7Ci1leHRlcm4gaW50IGhvd2Nh bGxlZDsKLQotZXh0ZXJuIGNoYXIgKmNreHN5cywgKmNrenN5cywgKip4YXJndiwgKnhhcmcwLCAq KmNtbGlzdCwgKmNsY21kczsKLQotZXh0ZXJuIGludCBhY3Rpb24sIGNmbGcsIHhhcmdjLCBjbmZs ZywgbG9jYWwsIHF1aWV0LCBlc2NhcGUsIG5ldHdvcmssIG1kbXR5cCwKLSAgYmdzZXQsIGJhY2tn cmQsIHhhcmdzLCBiaW5hcnksIHBhcml0eSwgdHVybiwgdHVybmNoLCBkdXBsZXgsIGZsb3csIGNs ZmlscywKLSAgbm9pbml0LCBzdGF5ZmxnLCBuZXR0eXBlLCBjZmlsZWYsIG5vaGVyYWxkLCBjbWFz aywgY21kbXNrLCBleGl0b25jbG9zZSwKLSAgaGF2ZWxpbmUsIGp1c3RvbmUsIGN4dHlwZSwgeGZp bmlzaCwgdHRucHJvdG87Ci0KLWV4dGVybiBsb25nIHNwZWVkOwotZXh0ZXJuIGNoYXIgdHRuYW1l W107Ci1leHRlcm4gY2hhciAqIHBpcGVkYXRhLCAqIGNtZGZpbDsKLQotI2lmbmRlZiBOT1hGRVIK LWV4dGVybiBjaGFyICpjbWFyZywgKmNtYXJnMjsKLQotZXh0ZXJuIGludCBuZmlscywgc3Rkb3Vm LCBzdGRpbmYsIGRpc3BsYSwgbWF4cnBzLCBycHNpeiwgY2t3YXJuLCB1cnBzaXosCi0gIHdzbG90 ciwgc3djYXByLCBja2RlbGF5LCByZWN1cnNpdmUsIHJlbGlhYmxlLCB4cmVsaWFibGUsIGZuc3Bh dGgsIGZuY2FjdCwKLSAgY2xlYXJycSwgc2V0cmVsaWFibGU7Ci0KLSNpZmRlZiBQSVBFU0VORAot ZXh0ZXJuIGludCB1c2VwaXBlcywgcGlwZXNlbmQ7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLWV4 dGVybiBpbnQgcHJvdG9jb2w7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9QVVNI Ci1leHRlcm4gaW50IG5vcHVzaDsKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmZGVmIE9TMgot ZXh0ZXJuIHN0cnVjdCBrZXl0YWIgb3MyZGV2dGFiW107Ci1leHRlcm4gaW50IG5vczJkZXY7Ci1l eHRlcm4gaW50IHR0c2xpcDsKLWV4dGVybiBpbnQgdHRfc2Nyb2xsLCB0dF9lc2NhcGU7Ci0jaWZk ZWYgT1MyUE0KLWV4dGVybiBpbnQgb3MycG07Ci0jZW5kaWYgLyogT1MyUE0gKi8KLSNlbmRpZiAv KiBPUzIgKi8KLQotI2lmZGVmIENLX05FVEJJT1MKLWV4dGVybiB1bnNpZ25lZCBjaGFyIE5ldEJp b3NBZGFwdGVyOwotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KLQotI2lmZGVmIFhGQVRBTAotI3Vu ZGVmIFhGQVRBTAotI2VuZGlmIC8qIFhGQVRBTCAqLwotCi0jaWZkZWYgVE5DT0RFCi1fUFJPVE9U WVAoc3RhdGljIGludCBkb3RuYXJnLCAoY2hhciB4KSApOwotI2VuZGlmIC8qIFROQ09ERSAqLwot I2lmZGVmIFJMT0dDT0RFCi1fUFJPVE9UWVAoc3RhdGljIGludCBkb3JsZ2FyZywgKGNoYXIgeCkg KTsKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2lmZGVmIFNTSEJVSUxUSU4KLV9QUk9UT1RZUChz dGF0aWMgaW50IGRvc3NoYXJnLCAoY2hhciB4KSApOwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8K LQotaW50IGhhdmVmdHB1aWQgPSAwOwkJCS8qIEhhdmUgRlRQIHVzZXIgSUQgKi8KLXN0YXRpYyBp bnQgaGF2ZV9jeCA9IDA7CQkJLyogSGF2ZSBjb25uZWN0aW9uICovCi0KLXN0YXRpYyBjaGFyICog ZmFpbG1zZyA9IE5VTEw7CQkvKiBGYWlsdXJlIG1lc3NhZ2UgKi8KLQotI2lmZGVmIE5FV0ZUUAot ZXh0ZXJuIGNoYXIgKiBmdHBfaG9zdDsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotZXh0ZXJuIGlu dCB3aGF0OwotCi0jaWZuZGVmIE5PSUNQCi0jaWZuZGVmIE5PRElBTAotZXh0ZXJuIGludCBubWRt LCB0ZWxlcGhvbnk7Ci1leHRlcm4gc3RydWN0IGtleXRhYiBtZG10YWJbXTsKLWV4dGVybiBpbnQg dXNlcm1kbSwgZGlhbHVkdDsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLV9QUk9UT1RZUChzdGF0aWMg aW50IHBtc2csIChjaGFyICopICk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCBmbXNnLCAoY2hhciAq KSApOwotc3RhdGljIGludCBwbXNnKHMpIGNoYXIgKnM7IHsgcHJpbnRmKCIlc1xuIiwgcyk7IHJl dHVybigwKTsgfQotc3RhdGljIGludCBmbXNnKHMpIGNoYXIgKnM7IHsgZmF0YWwocyk7IHJldHVy bigwKTsgfQotI2RlZmluZSBYRkFUQUwocykgcmV0dXJuKHdoYXQ9PVdfQ09NTUFORD9wbXNnKHMp OmZtc2cocykpCi0jZWxzZQotI2RlZmluZSBYRkFUQUwgZmF0YWwKLSNlbmRpZiAvKiBOT0lDUCAq LwotCi0jaWZuZGVmIE5PSFRUUAotI2RlZmluZSBIVFRQX0dFVCAxCi0jZGVmaW5lIEhUVFBfUFVU IDIKLSNkZWZpbmUgSFRUUF9IRUQgMwotI2VuZGlmIC8qIE5PSFRUUCAqLwotCi0jaWZkZWYgQ0tf VVJMCi0vKiBVUkxzIHdlIHJlY29nbml6ZSAqLwotCi0jZGVmaW5lIFVSTF9GVFAgICAgMQotI2Rl ZmluZSBVUkxfSFRUUCAgIDIKLSNkZWZpbmUgVVJMX0hUVFBTICAzCi0jZGVmaW5lIFVSTF9JS1NE ICAgNAotI2RlZmluZSBVUkxfVEVMTkVUIDUKLSNkZWZpbmUgVVJMX0xPR0lOICA2Ci0KLXN0cnVj dCBrZXl0YWIgdXJsdGFiW10gPSB7Ci0jaWZkZWYgTkVXRlRQCi0gICAgImZ0cCIsICAgIFVSTF9G VFAsICAgIDAsCi0jZW5kaWYgLyogTkVXRlRQICovCi0jaWZuZGVmIE5PSFRUUAotICAgICJodHRw IiwgICBVUkxfSFRUUCwgICAwLAotICAgICJodHRwcyIsICBVUkxfSFRUUFMsICAwLAotI2VuZGlm IC8qIE5PSFRUUCAqLwotICAgICJpa3NkIiwgICBVUkxfSUtTRCwgICAwLAotICAgICJrZXJtaXQi LCBVUkxfSUtTRCwgICAwLAotICAgICJ0ZWxuZXQiLCBVUkxfVEVMTkVULCAwLAotICAgICIiLCAw LCAwCi19OwotaW50IG51cmx0YWIgPSBzaXplb2YodXJsdGFiKS9zaXplb2Yoc3RydWN0IGtleXRh YikgLSAxOwotCi0jaWZuZGVmIFVSTEJVRkxFTgotI2RlZmluZSBVUkxCVUZMRU4gMTAyNAotI2Vu ZGlmIC8qIFVSTEJVRkxFTiAqLwotc3RhdGljIGNoYXIgdXJsYnVmW1VSTEJVRkxFTl07Ci1zdHJ1 Y3QgdXJsZGF0YSBnX3VybCA9IHtOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMfTsK LQotLyogdSByIGwgcCBhIHIgcyBlICAtLSAgUGFyc2UgYSBwb3NzaWJsZSBVUkwgKi8KLQotLyoK LSAgUmV0dXJucyAwIGlmIHRoZSBjYW5kaWRhdGUgZG9lcyBub3Qgc2VlbSB0byBiZSBhIFVSTC4K LSAgUmV0dXJucyAxIGlmIGl0IG1pZ2h0IGJlIGEgVVJMLCB3aXRoIHRoZSBhYm92ZSBwb2ludGVy cyBzZXQgdG8gaXRzIHBpZWNlczoKLSAgICBzZXJ2aWNlIDogWyAvLyBdIFsgdXNlciBbIDogcGFz c3dvcmQgXSBAIF0gaG9zdCBbIDogc2VydmljZSBdIFsgLyBwYXRoIF0gLQotICAgICAgICAgICAg ICBbID8gbmFtZSBbID0gdmFsdWUgXV0KLQotICBFeGFtcGxlOiBmdHA6Ly9kcy5pbnRlcm5pYy5u ZXQ6MjEvcmZjL3JmYzEyMzQudHh0Ci0gICAgdXJsLnN2YyA9IFtmdHBdCi0gICAgdXJsLnVzciA9 IFsoTlVMTCldCi0gICAgdXJsLnBzdyA9IFsoTlVMTCldCi0gICAgdXJsLmhvcyA9IFtkcy5pbnRl cm5pYy5uZXRdCi0gICAgdXJsLnBvciA9IFsyMV0KLSAgICB1cmwucHRoID0gW3JmYy9yZmMxMjM0 LnR4dF0KLQotICBJdCBtaWdodCBiZSBhIFVSTCBpZiBpdCBjb250YWlucyBhIHBvc3NpYmxlIHNl cnZpY2UgbmFtZSBmb2xsb3dlZCBieSBhCi0gIGEgY29sb24gKDopLiAgVGh1cyAidGVsbmV0Onh5 emNvcnAuY29tIiBpcyBhIG1pbmltYWwgVVJMLCB3aGVyZWFzIGEKLSAgZnVsbC1ibG93biBleGFt cGxlIHdvdWxkIGJlOgotCi0gICAgZnRwOi8vb2xnYTpzZWNyZXRAZnRwLnh5emNvcnAuY29tL3B1 YmxpYy9vb2ZhLnR4dAotCi0gIFRoZSBjYWxsZXIgbXVzdCB2ZXJpZnkgdGhlIHJlc3VsdHMsIGku ZS4gdGhhdCB0aGUgc2VydmljZSBzdHJpbmcgaXMgYSByZWFsCi0gIFRDUCBzZXJ2aWNlLCBldGMu ICBUaGlzIHJvdXRpbmUganVzdCBwYXJzZXMgdGhlIGZpZWxkcy4KLQotICBzdHJ1Y3QgdXJsZGF0 YSBkZWZpbmVkIGluIGNrY2tlci5oCi0qLwotCi1pbnQKLXVybHBhcnNlKHMsdXJsKSBjaGFyICpz OyBzdHJ1Y3QgdXJsZGF0YSAqIHVybDsgewotICAgIGNoYXIgKiBwID0gTlVMTCwgKiB1cmxidWYg PSBOVUxMOwotICAgIGludCB4OwotCi0gICAgaWYgKCFzIHx8ICF1cmwpCi0gICAgICAgIHJldHVy bigwKTsKLQotICAgIGlmICghKnMpCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIG1ha2VzdHIo JnVybGJ1ZixzKTsKLQotICAgIGlmICh1cmwtPnNhdikgewkJCS8qIEluIGNhc2Ugd2Ugd2VyZSBj YWxsZWQgYmVmb3JlLi4uICovCi0gICAgICAgIGZyZWUodXJsLT5zYXYpOwotICAgICAgICB1cmwt PnNhdiA9IE5VTEw7Ci0gICAgfQotICAgIGlmICh1cmwtPnN2YykgewotICAgICAgICBmcmVlKHVy bC0+c3ZjKTsKLSAgICAgICAgdXJsLT5zdmMgPSBOVUxMOwotICAgIH0KLSAgICBpZiAodXJsLT5o b3MpIHsKLSAgICAgICAgZnJlZSh1cmwtPmhvcyk7Ci0gICAgICAgIHVybC0+aG9zID0gTlVMTDsK LSAgICB9Ci0gICAgaWYgKHVybC0+cG9yKSB7Ci0gICAgICAgIGZyZWUodXJsLT5wb3IpOwotICAg ICAgICB1cmwtPnBvciA9IE5VTEw7Ci0gICAgfQotICAgIGlmICh1cmwtPnVzcikgewotICAgICAg ICBmcmVlKHVybC0+dXNyKTsKLSAgICAgICAgdXJsLT51c3IgPSBOVUxMOwotICAgIH0KLSAgICBp ZiAodXJsLT5wc3cpIHsKLSAgICAgICAgZnJlZSh1cmwtPnBzdyk7Ci0gICAgICAgIHVybC0+cHN3 ID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKHVybC0+cHRoKSB7Ci0gICAgICAgIGZyZWUodXJsLT5w dGgpOwotICAgICAgICB1cmwtPnB0aCA9IE5VTEw7Ci0gICAgfQotICAgIGlmICh1cmwtPm5vcHRz KSB7Ci0gICAgICAgIGludCBpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdXJsLT5ub3B0cyAm JiBpIDwgTUFYX1VSTF9PUFRTOyBpKysgKSB7Ci0gICAgICAgICAgICBpZiAodXJsLT5vcHRbaV0u bmFtKSB7Ci0gICAgICAgICAgICAgICAgZnJlZSh1cmwtPm9wdFtpXS5uYW0pOwotICAgICAgICAg ICAgICAgIHVybC0+b3B0W2ldLm5hbSA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBpZiAodXJsLT5vcHRbaV0udmFsKSB7Ci0gICAgICAgICAgICAgICAgZnJlZSh1cmwtPm9wdFtp XS52YWwpOwotICAgICAgICAgICAgICAgIHVybC0+b3B0W2ldLnZhbCA9IE5VTEw7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdXJsLT5ub3B0cyA9IDA7Ci0gICAgfQotICAgIHAg PSB1cmxidWY7CQkJCS8qIFdhcyBhIHNlcnZpY2UgcmVxdWVzdGVkPyAqLwotICAgIHdoaWxlICgq cCAmJiAqcCAhPSAnOicpCQkvKiBMb29rIGZvciBjb2xvbiAqLwotICAgICAgcCsrOwotICAgIGlm ICgqcCA9PSAnOicpIHsgICAgICAgICAgICAgICAgICAgIC8qIEhhdmUgYSBjb2xvbiAqLwotICAg ICAgICAqcCsrID0gTlVMOwkJCS8qIEdldCBzZXJ2aWNlIG5hbWUgb3IgbnVtYmVyICovCi0gICAg ICAgIGlmICgqcCA9PSAnOicpCQkJLyogYSBzZWNvbmQgY29sb24gKi8KLSAgICAgICAgICAqcCsr ID0gTlVMOwkJCS8qIGdldCByaWQgb2YgdGhhdCBvbmUgdG9vICovCi0gICAgICAgIHdoaWxlICgq cCA9PSAnLycpICpwKysgPSBOVUw7CS8qIGFuZCBzbGFzaGVzICovCi0jaWZkZWYgQ09NTUVOVAot ICAgICAgICAvKiBUcmFpbGluZyBzbGFzaCBpcyBwYXJ0IG9mIHBhdGggLSBsZWF2ZSBpdCAtIGph bHRtYW4gKi8KLSAgICAgICAgeCA9IHN0cmxlbihwKTsgICAgICAgICAgICAgICAgICAvKiBMZW5n dGggb2YgcmVtYWluZGVyICovCi0gICAgICAgIGlmIChwW3gtMV0gPT0gJy8nKSAgICAgICAgICAg ICAgLyogSWYgdGhlcmUgaXMgYSB0cmFpbGluZyBzbGFzaCAqLwotICAgICAgICAgIHBbeC0xXSA9 IE5VTDsJCQkvKiByZW1vdmUgaXQuICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBp ZiAodXJsYnVmWzBdKSB7CQkvKiBBbnl0aGluZyBsZWZ0PyAqLwotICAgICAgICAgICAgY2hhciAq cSA9IHAsICpyID0gcCwgKncgPSBwOwotCSAgICBtYWtlc3RyKCZ1cmwtPnN2Yyx1cmxidWYpOwot Ci0gICAgICAgICAgICB3aGlsZSAoKnAgIT0gTlVMICYmICpwICE9ICdAJykgLyogbG9vayBmb3Ig QCAqLwotCSAgICAgIHArKzsKLSAgICAgICAgICAgIGlmICgqcCA9PSAnQCcpIHsJCS8qIFNpZ25p ZmllcyB1c2VyIElELCBtYXliZSBwYXNzd29yZCAqLwotICAgICAgICAgICAgICAgICpwKysgPSBO VUw7Ci0JCXVybC0+aG9zID0gcDsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKncgIT0gTlVMICYm ICp3ICE9ICc6JykKLSAgICAgICAgICAgICAgICAgIHcrKzsKLSAgICAgICAgICAgICAgICBpZiAo KncgPT0gJzonKQotICAgICAgICAgICAgICAgICAgKncrKyA9IE5VTDsKLQkJdXJsLT51c3IgPSBy OwkJLyogVXNlcm5hbWUgKi8KLQkJaWYgKCp3KQotCQkgIHVybC0+cHN3ID0gdzsJCS8qIFBhc3N3 b3JkICovCi0gICAgICAgICAgICAgICAgcSA9IHA7Ci0gICAgICAgICAgICB9IGVsc2UgewkJCS8q IE5vIHVzZXJuYW1lIG9yIHBhc3N3b3JkICovCi0gICAgICAgICAgICAgICAgcCA9IHE7Ci0JCXVy bC0+aG9zID0gcDsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0JICAgIGRlYnVnKEYx MTEsInVybHBhcnNlIHVybC0+dXNyIix1cmwtPnVzcix1cmwtPnVzcik7Ci0JICAgIGRlYnVnKEYx MTEsInVybHBhcnNlIHVybC0+cHN3Iix1cmwtPnVzcix1cmwtPnBzdyk7Ci0JICAgIGRlYnVnKEYx MTEsInVybHBhcnNlIHVybC0+aG9zIix1cmwtPnVzcix1cmwtPmhvcyk7Ci0jZW5kaWYJLyogQ09N TUVOVCAqLwotCi0gICAgICAgICAgICB3aGlsZSAoKnAgIT0gTlVMICYmICpwICE9ICc6JyAmJiAq cCAhPSAnLycpCS8qIFBvcnQ/ICovCi0gICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgIGlm ICgqcCA9PSAnOicpIHsJCS8qIFRDUCBwb3J0ICovCi0gICAgICAgICAgICAgICAgKnArKyA9IE5V TDsKLSAgICAgICAgICAgICAgICByID0gcDsKLQkJdXJsLT5wb3IgPSByOwotICAgICAgICAgICAg ICAgIHdoaWxlICgqcCAhPSBOVUwgJiYgKnAgIT0gJy8nKQotCQkgIHArKzsKLSAgICAgICAgICAg ICAgICAvKiAnLycgaXMgcGFydCBvZiBwYXRoLCBsZWF2ZSBpdCB1bnRpbCB3ZSBjYW4gY29weSAq LwotICAgICAgICAgICAgICAgIGlmICgqcCA9PSAnLycpIHsKLQkJICAgIG1ha2VzdHIoJnVybC0+ cHRoLHApOyAgLyogUGF0aCAqLwotCQkgICAgKnAgPSBOVUw7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfSBlbHNlIHsJCQkvKiBObyBwb3J0ICovCi0gICAgICAgICAgICAgICAgLyog Jy8nIGlzIHBhcnQgb2YgcGF0aCwgbGVhdmUgaXQgKi8KLSAgICAgICAgICAgICAgICBpZiAoKnAg PT0gJy8nKSB7Ci0JCSAgICBtYWtlc3RyKCZ1cmwtPnB0aCxwKTsgIC8qIFBhdGggKi8KLQkJICAg ICpwID0gTlVMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot CS8qIENvcHkgbm9uLU5VTEwgcmVzdWx0IHN0cmluZ3MgKi8KLQlpZiAodXJsLT5zdmMpIGlmICgq dXJsLT5zdmMpIHsKLSAgICAgICAgICAgIHAgPSB1cmwtPnN2YzsKLSAgICAgICAgICAgIHVybC0+ c3ZjID0gTlVMTDsKLSAgICAgICAgICAgIG1ha2VzdHIoJnVybC0+c3ZjLHApOwotICAgICAgICB9 Ci0JaWYgKHVybC0+aG9zKSBpZiAoKnVybC0+aG9zKSB7Ci0gICAgICAgICAgICBwID0gdXJsLT5o b3M7Ci0gICAgICAgICAgICB1cmwtPmhvcyA9IE5VTEw7Ci0gICAgICAgICAgICBtYWtlc3RyKCZ1 cmwtPmhvcyxwKTsKLSAgICAgICAgfQotCWlmICh1cmwtPnBvcikgaWYgKCp1cmwtPnBvcikgewot ICAgICAgICAgICAgcCA9IHVybC0+cG9yOwotICAgICAgICAgICAgdXJsLT5wb3IgPSBOVUxMOwot ICAgICAgICAgICAgbWFrZXN0cigmdXJsLT5wb3IscCk7Ci0gICAgICAgIH0KLS8qCi0gIFdBUk5J TkcgKFdlZCBPY3QgIDkgMTY6MDk6MDMgMjAwMik6IFdlIG5vdyBhbGxvdyB0aGUgdXNlcm5hbWUg YW5kCi0gIHBhc3N3b3JkIHRvIGJlIGVtcHR5IHN0cmluZ3MuICBUaGVzZSBhcmUgdHJlYXRlZCBk aWZmZXJlbnRseSBmcm9tIG51bGwKLSAgcG9pbnRlcnM6IGFuIGVtcHR5IHN0cmluZyBtZWFucyB0 aGUgVVJMIGluY2x1ZGVkIHVzZXJuYW1lIGFuZC9vciBwYXNzd29yZAotICBmaWVsZHMgdGhhdCB3 ZXJlIGVtcHR5LCBlLmcuIGZ0cDovLzpAZnRwLnh5emNvcnAuY29tL3NvbWVwYXRoL3NvbWVmaWxl LAotICB3aGljaCBjYXVzZXMgdGhlIGNsaWVudCB0byBwcm9tcHQgZm9yIHRoZSB1c2VybmFtZSBh bmQvb3IgcGFzc3dvcmQuCi0qLwotCWlmICh1cmwtPnVzcikgLyogaWYgKCp1cmwtPnVzcikgKi8g ewotICAgICAgICAgICAgcCA9IHVybC0+dXNyOwotICAgICAgICAgICAgdXJsLT51c3IgPSBOVUxM OwotICAgICAgICAgICAgbWFrZXN0cigmdXJsLT51c3IscCk7Ci0gICAgICAgIH0KLQlpZiAodXJs LT5wc3cpIC8qIGlmICgqdXJsLT5wc3cpICovIHsKLSAgICAgICAgICAgIHAgPSB1cmwtPnBzdzsK LSAgICAgICAgICAgIHVybC0+cHN3ID0gTlVMTDsKLSAgICAgICAgICAgIG1ha2VzdHIoJnVybC0+ cHN3LHApOwotICAgICAgICB9Ci0gICAgICAgIC8qIFNhdmUgYSBjb3B5IG9mIHRoZSBmdWxsIHVy bCBpZiBvbmUgd2FzIGZvdW5kLiAqLwotCWlmICh1cmwtPnN2YykgCi0JICBtYWtlc3RyKCZ1cmwt PnNhdixzKTsKLSAgICAgICAgZnJlZSh1cmxidWYpOwotCXJldHVybih1cmwtPnN2YyA/IDEgOiAw KTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIENLX1VSTCAqLwotCi0jaWZu ZGVmIE5PQ01ETAotCi1jaGFyICpobHAxW10gPSB7Ci0jaWZuZGVmIE5PSUNQCi0iIFtmaWxlbmFt ZV0gWy14IGFyZyBbLXggYXJnXS4uLlsteXl5XS4uXSBbID0gdGV4dCBdIF1cbiIsCi0jZWxzZQot IlsteCBhcmcgWy14IGFyZ10uLi5bLXl5eV0uLl1cbiIsCi0jZW5kaWYgLyogTk9JQ1AgKi8KLSJc biIsCi0iICAteCBpcyBhbiBvcHRpb24gcmVxdWlyaW5nIGFuIGFyZ3VtZW50LCAteSBhbiBvcHRp b24gd2l0aCBubyBhcmd1bWVudC5cbiIsCi0iICBJZiB0aGUgZmlyc3QgY29tbWFuZC1saW5lIGFy Z3VtZW50IGlzIHRoZSBuYW1lIG9mIGEgZmlsZSwgaW50ZXJhY3RpdmUtXG4iLAotIiAgbW9kZSBj b21tYW5kcyBhcmUgZXhlY3V0ZWQgZnJvbSB0aGUgZmlsZS4gIFRoZSAnPScgYXJndW1lbnQgdGVs bHMgS2VybWl0XG4iLAotIiAgbm90IHRvIHBhcnNlIHRoZSByZW1haW5kZXIgb2YgdGhlIGNvbW1h bmQgbGluZSwgYnV0IHRvIG1ha2UgdGhlIHdvcmRzXG4iLAotIiAgZm9sbG93aW5nICc9JyBhdmFp bGFibGUgYXMgXFwlMSwgXFwlMiwgLi4uIFxcJTkuICBUaGUgY29tbWFuZCBmaWxlIFwKLShpZiBh bnkpXG4iLAotIiAgaXMgZXhlY3V0ZWQgYmVmb3JlIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucy5c biIsCi0iXG4iLAotI2lmbmRlZiBOT0lDUAotIklmIG5vIGFjdGlvbiBjb21tYW5kIGlzIGluY2x1 ZGVkLCBvciAtUyBpcywgdGhlbiBhZnRlciB0aGUgY29tbWFuZCBsaW5lIGlzXG4iLAotImV4ZWN1 dGVkLCBLZXJtaXQgaXNzdWVzIGl0cyBwcm9tcHQgYW5kIHdhaXRzIGZvciB5b3UgdG8gdHlwZSBj b21tYW5kcy5cbiIsCi0jZWxzZQotIk9wZXJhdGlvbiBieSBjb21tYW5kLWxpbmUgb3B0aW9ucyBv bmx5LlxuIiwKLSNlbmRpZiAvKiBOT0lDUCAqLwotIiIKLX07Ci0KLXN0YXRpYwotY2hhciAqaGxw MltdID0gewotIiAgW29wdGlvbi1saXN0XSBob3N0Wzpwb3J0XSBbcG9ydF1cbiIsCi0iICBUaGUg b3B0aW9uLWxpc3QgY29uc2lzdHMgb2YgemVybywgb25lLCBvciBtb3JlIG9mOlxuIiwKLSIgIC04 ICAgICAgICAgICAgICAgIE5lZ290aWF0ZSBUZWxuZXQgQmluYXJ5IGluIGJvdGggZGlyZWN0aW9u c1xuIiwKLSIgIC1hICAgICAgICAgICAgICAgIFJlcXVpcmUgdXNlIG9mIFRlbG5ldCBhdXRoZW50 aWNhdGlvblxuIiwKLSIgIC1kICAgICAgICAgICAgICAgIFR1cm4gb24gZGVidWcgbW9kZVxuIiwK LSIgIC1FICAgICAgICAgICAgICAgIE5vIGVzY2FwZSBjaGFyYWN0ZXJcbiIsCi0iICAtSyAgICAg ICAgICAgICAgICBSZWZ1c2UgdXNlIG9mIGF1dGhlbnRpY2F0aW9uOyBkbyBub3Qgc2VuZCB1c2Vy bmFtZVxuIiwKLSIgIC1sIHVzZXIgICAgICAgICAgIFNldCB1c2VybmFtZSBhbmQgcmVxdWVzdCBU ZWxuZXQgYXV0aGVudGljYXRpb25cbiIsCi0iICAtTCAgICAgICAgICAgICAgICBOZWdvdGlhdGUg VGVsbmV0IEJpbmFyeSBPdXRwdXQgb25seVxuIiwKLSIgIC14ICAgICAgICAgICAgICAgIFJlcXVp cmUgRW5jcnlwdGlvblxuIiwKLSIgIC1EICAgICAgICAgICAgICAgIERpc2FibGUgZm9yd2FyZC1Y XG4iLAotIiAgLVQgY2VydD1maWxlICAgICAgVXNlIGNlcnRpZmljYXRlIGluIGZpbGVcbiIsCi0i ICAtVCBrZXk9ZmlsZSAgICAgICBVc2UgcHJpdmF0ZSBrZXkgaW4gZmlsZVxuIiwKLSIgIC1UIGNy bGZpbGU9ZmlsZSAgIFVzZSBDUkwgaW4gZmlsZVxuIiwKLSIgIC1UIGNybGRpcj1kaXIgICAgIFVz ZSBDUkxzIGluIGRpcmVjdG9yeVxuIiwKLSIgIC1UIGNpcGhlcj1zdHJpbmcgIFVzZSBvbmx5IGNp cGhlcnMgaW4gc3RyaW5nXG4iLAotIiAgLWYgICAgICAgICAgICAgICAgRm9yd2FyZCBjcmVkZW50 aWFscyB0byBob3N0XG4iLAotIiAgLWsgcmVhbG0gICAgICAgICAgU2V0IGRlZmF1bHQgS2VyYmVy b3MgcmVhbG1cbiIsCi0iIgotfTsKLQotc3RhdGljCi1jaGFyICpobHAzW10gPSB7ICAgICAgICAv KiBybG9naW4gKi8KLSIgIFtvcHRpb24tbGlzdF0gaG9zdFs6cG9ydF0gW3BvcnRdXG4iLAotIiAg VGhlIG9wdGlvbi1saXN0IGNvbnNpc3RzIG9mIHplcm8sIG9uZSwgb3IgbW9yZSBvZjpcbiIsCi0i ICAtZCAgICAgICAgICAgICAgICBUdXJuIG9uIGRlYnVnIG1vZGVcbiIsCi0iICAtbCB1c2VyICAg ICAgICAgICBTZXQgdXNlcm5hbWVcbiIsCi0iIgotfTsKLQotc3RhdGljCi1jaGFyICpobHA0W10g PSB7ICAgICAgICAvKiBzc2ggKi8KLSIgIFtvcHRpb24tbGlzdF0gaG9zdFs6cG9ydF0gW3BvcnRd XG4iLAotIiAgVGhlIG9wdGlvbi1saXN0IGNvbnNpc3RzIG9mIHplcm8sIG9uZSwgb3IgbW9yZSBv ZjpcbiIsCi0jaWZkZWYgT1MyCi0iICAtIyBmbGFncyAgICAgICAgICBLZXJtaXQgOTUgU3RhcnR1 cCBGbGFnc1xuIiwKLSIgICAgICAgMSAgICAgICAgICAgICAgdHVybiBvZmYgV2luOTUgc3BlY2lh bCBmaXhlc1xuIiwKLSIgICAgICAgMiAgICAgICAgICAgICAgZG8gbm90IGxvYWQgb3B0aW9uYWwg bmV0d29yayBkbGxzXG4iLAotIiAgICAgICA0ICAgICAgICAgICAgICBkbyBub3QgbG9hZCBvcHRp b25hbCB0YXBpIGRsbHNcbiIsCi0iICAgICAgIDggICAgICAgICAgICAgIGRvIG5vdCBsb2FkIG9w dGlvbmFsIGtlcmJlcm9zIGRsbHNcbiIsCi0iICAgICAgMTYgICAgICAgICAgICAgIGRvIG5vdCBs b2FkIG9wdGlvbmFsIHptb2RlbSBkbGxzXG4iLAotIiAgICAgIDMyICAgICAgICAgICAgICB1c2Ug c3RkaW4gZm9yIGlucHV0IGluc3RlYWQgb2YgdGhlIGNvbnNvbGVcbiIsCi0iICAgICAgNjQgICAg ICAgICAgICAgIHVzZSBzdGRvdXQgZm9yIG91dHB1dCBpbnN0ZWFkIG9mIHRoZSBjb25zb2xlXG4i LAotIiAgICAgMTI4ICAgICAgICAgICAgICBkbyBub3QgdGVybWluYXRlIHByb2Nlc3MgaW4gcmVz cG9uc2UgdG8gU2Vzc2lvbiBMb2dvZmZcbiIsCi0jZW5kaWYgLyogT1MyICovCi0iICAtZCAgICAg ICAgICAgICAgICBUdXJuIG9uIGRlYnVnIG1vZGVcbiIsCi0iICAtWSAgICAgICAgICAgICAgICBE aXNhYmxlIGluaXQgZmlsZSBwcm9jZXNzaW5nXG4iLAotIiAgLWwgdXNlciAgICAgICAgICAgU2V0 IHVzZXJuYW1lXG4iLAotIiIKLX07Ci0KLS8qIENvbW1hbmQtbGluZSBvcHRpb24gaGVscCBsaW5l cy4gIFVwZGF0ZSB0aGlzIHdoZW4gYWRkaW5nIG5ldyBvcHRpb25zISAqLwotCi1jaGFyICogb3B0 aGxwWzEyOF07ICAgICAgICAgICAgICAgICAgICAgLyogT3B0aW9uIGhlbHAgKi8KLWNoYXIgKiBh cmdobHBbMTI4XTsgICAgICAgICAgICAgICAgICAgICAvKiBBcmd1bWVudCBmb3Igb3B0aW9uICov Ci1pbnQgb3B0YWN0WzEyOF07ICAgICAgICAgICAgICAgICAgICAgICAgLyogQWN0aW9uLW9wdGlv biBmbGFnICovCi0KLVZPSUQKLWZhdGFsMihtc2cxLG1zZzIpIGNoYXIgKm1zZzEsICptc2cyOyB7 Ci0gICAgY2hhciBidWZbMjU2XTsKLSAgICBpZiAoIW1zZzEpIG1zZzEgPSAiIjsKLSAgICBpZiAo IW1zZzIpIG1zZzIgPSAiIjsKLSAgICBja21ha21zZyhidWYsMjU2LCJcIiIsbXNnMSwiXCIgLSAi LG1zZzIpOwotI2lmbmRlZiBOT0lDUAotICAgIGlmICh3aGF0ID09IFdfQ09NTUFORCkKLSAgICAg IHByaW50ZigiJXNcbiIsYnVmKTsKLSAgICBlbHNlCi0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICAg IGZhdGFsKChjaGFyICopYnVmKTsKLX0KLQotc3RhdGljIFNJR1RZUAotI2lmZGVmIENLX0FOU0kK LWNsX2ludChpbnQgZHVtbXkpCi0jZWxzZSAvKiBDS19BTlNJICovCi1jbF9pbnQoZHVtbXkpIGlu dCBkdW1teTsKLSNlbmRpZiAvKiBDS19BTlNJICovCi17CQkJCQkvKiBDb21tYW5kLWxpbmUgaW50 ZXJydXB0IGhhbmRsZXIgKi8KLSAgICBkb2V4aXQoQkFEX0VYSVQsMSk7Ci0gICAgU0lHUkVUVVJO OwotfQotCi0jaWZkZWYgTkVXRlRQCi1leHRlcm4gaW50IGZ0cF9hY3Rpb24sIGZ0cF9jbWRsaW47 Ci0KLXN0YXRpYyBpbnQKLXh4X2Z0cChob3N0LCBwb3J0KSBjaGFyICogaG9zdCwgKiBwb3J0OyB7 Ci0jaWZkZWYgQ0tfVVJMCi0gICAgZXh0ZXJuIGludCBoYXZldXJsOwotI2VuZGlmIC8qIENLX1VS TCAqLwotICAgIGV4dGVybiBjaGFyICogZnRwX2xvZ25hbWU7Ci0gICAgaW50IHVzZV90bHMgPSAw OwotICAgIGNoYXIgKiBwOwotCi0gICAgaWYgKHBvcnQpIGlmICghKnBvcnQpIHBvcnQgPSBOVUxM OwotCi0gICAgaWYgKCFob3N0KQotICAgICAgcmV0dXJuKDApOwotICAgIGlmICghKmhvc3QpCi0g ICAgICByZXR1cm4oMCk7Ci0gICAgZGVidWcoRjExMSwiZnRwIHh4X2Z0cCBob3N0IixmdHBfaG9z dCxoYXZlZnRwdWlkKTsKLSAgICBkZWJ1ZyhGMTExLCJmdHAgeHhfZnRwIHVpZGJ1ZiAxIix1aWRi dWYsaGF2ZWZ0cHVpZCk7Ci0gICAgZnRwX2NtZGxpbiA9IDE7CQkJLyogMSA9IEZUUCBzdGFydGVk IGZyb20gY29tbWFuZCBsaW5lICovCi0gICAgaWYgKG5maWxzID4gMCkKLSAgICAgIGZ0cF9jbWRs aW4rKzsJCQkvKiAyID0gc2FtZSBwbHVzIGZpbGUgdHJhbnNmZXIgKi8KLQotI2lmbmRlZiBOT1VS TAotICAgIC8qIGRlYnVnKEYxMTEsImZ0cCB4eF9mdHAgZ191cmwudXNyIixnX3VybC51c3IsZ191 cmwudXNyKTsgKi8KLSAgICBpZiAoaGF2ZXVybCAmJiBnX3VybC51c3IpIHsJCS8qIFdlZCBPY3Qg IDkgMTU6MTU6MjIgMjAwMiAqLwotCWlmICghKihnX3VybC51c3IpKSB7CQkvKiBGb3JjZSB1c2Vy bmFtZSBwcm9tcHQgaWYgKi8KLQkgICAgaGF2ZWZ0cHVpZCA9IDA7CQkvKiAiZnRwOi8vOkBob3N0 IiBnaXZlbi4gKi8KLQkgICAgdWlkYnVmWzBdID0gTlVMOwotCSAgICBtYWtlc3RyKCZmdHBfbG9n bmFtZSxOVUxMKTsKLQl9CSAgCi0JZGVidWcoRjExMSwiZnRwIHh4X2Z0cCB1aWRidWYgMiIsdWlk YnVmLGhhdmVmdHB1aWQpOwotICAgIH0KLSNlbmRpZiAvKiBOT1VSTCAqLwotICAgIGRlYnVnKEYx MTEsImZ0cCB4eF9mdHAgdWlkYnVmIDMiLHVpZGJ1ZixoYXZlZnRwdWlkKTsKLSAgICBpZiAoaGF2 ZWZ0cHVpZCkgewotCW1ha2VzdHIoJmZ0cF9sb2duYW1lLHVpZGJ1Zik7Ci0JZGVidWcoRjExMSwi ZnRwX2xvZ25hbWUiLGZ0cF9sb2duYW1lLGhhdmVmdHB1aWQpOwotICAgIH0KLSAgICBpZiAoIXBv cnQpIHsKLQlpZiAoKHAgPSBja3N0cmNocihmdHBfaG9zdCwnOicpKSkKLQkgICpwKysgPSBOVUw7 Ci0JcG9ydCA9IHA7Ci0gICAgfQotICAgIGlmICghcG9ydCkgewotI2lmZGVmIENLX1VSTAotICAg ICAgICBpZiAoaGF2ZXVybCkgewotCSAgICBpZiAoZ191cmwucG9yKSAKLQkgICAgICBwb3J0ID0g Z191cmwucG9yOwotICAgICAgICAgICAgZWxzZSBpZiAoZ191cmwuc3ZjKQotCSAgICAgIHBvcnQg PSBnX3VybC5zdmM7Ci0gICAgICAgICAgICBlbHNlIAotCSAgICAgIHBvcnQgPSAiZnRwIjsKLSAg ICAgICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfVVJMICovCi0JICBwb3J0ID0gImZ0cCI7Ci0gICAg fQotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKGhhdmV1cmwgJiYgZ191cmwuc3ZjKQotICAgICAg dXNlX3RscyA9ICFja3N0cmNtcCgiZnRwcyIsZ191cmwuc3ZjLC0xLDApOwotI2VuZGlmIC8qIENL X1NTTCAqLwotCi0gICAgaWYgKGZ0cG9wZW4oZnRwX2hvc3QscG9ydCx1c2VfdGxzKSA8IDEpCi0g ICAgICByZXR1cm4oLTEpOwotICAgIGRlYnVnKEYxMTEsImZ0cCB4eF9mdHAgYWN0aW9uIixja2N0 b2EoKGNoYXIpZnRwX2FjdGlvbiksbmZpbHMpOwotICAgIGlmIChuZmlscyA+IDApIHsKLQlzd2l0 Y2ggKGZ0cF9hY3Rpb24pIHsKLQkgIGNhc2UgJ2cnOgotCSAgICByZXR1cm4oY21kbGluZ2V0KHN0 YXlmbGcpKTsKLQkgIGNhc2UgJ3AnOgotCSAgY2FzZSAncyc6Ci0JICAgIHJldHVybihjbWRsaW5w dXQoc3RheWZsZykpOwotCX0KLSAgICB9Ci0gICAgcmV0dXJuKDEpOwotfQotI2VuZGlmIC8qIE5F V0ZUUCAqLwotCi0KLSNpZm5kZWYgTk9IVFRQCi1zdGF0aWMKLWNoYXIgKiBodHRwX2hscFtdID0g ewotICAgICIgLWggICAgICAgICAgICAgVGhpcyBtZXNzYWdlLlxuIiwKLSAgICAiIC1kICAgICAg ICAgICAgIERlYnVnIHRvIGRlYnVnLmxvZy5cbiIsCi0gICAgIiAtUyAgICAgICAgICAgICBTdGF5 IChpc3N1ZSBjb21tYW5kIHByb21wdCB3aGVuIGRvbmUpLlxuIiwKLSAgICAiIC1ZICAgICAgICAg ICAgIERvIG5vdCBleGVjdXRlIEtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlLlxuIiwKLSAgICAi IC1xICAgICAgICAgICAgIFF1aWV0IChzdXBwcmVzcyBtb3N0IG1lc3NhZ2VzKS5cbiIsCi0gICAg IiAtdSBuYW1lICAgICAgICBVc2VybmFtZS5cbiIsCi0gICAgIiAtUCBwYXNzd29yZCAgICBQYXNz d29yZC5cbiIsCi0gICAgIiAtZyBwYXRobmFtZSAgICBHZXQgcmVtb3RlIHBhdGhuYW1lLlxuIiwK LSAgICAiIC1wIHBhdGhuYW1lICAgIFB1dCByZW1vdGUgcGF0aG5hbWUuXG4iLAotICAgICIgLUgg cGF0aG5hbWUgICAgSGVhZCByZW1vdGUgcGF0aG5hbWUuXG4iLAotICAgICIgLWwgcGF0aG5hbWUg ICAgTG9jYWwgcGF0aCBmb3IgLWcsIC1wLCBhbmQgLUguXG4iLAotI2lmZGVmIENLX1NTTAotICAg ICIgLXogb3B0Wz12YWx1ZV0gU2VjdXJpdHkgb3B0aW9ucy4uLlxuIiwKLSAgICAiICAgIGNlcnQ9 ZmlsZSAgIENsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlXG4iLAotICAgICIgICAgY2VydHNvayAgICAg QWNjZXB0IGFsbCBjZXJ0aWZpY2F0ZXNcbiIsCi0gICAgIiAgICBrZXk9ZmlsZSAgICBDbGllbnQg cHJpdmF0ZSBrZXkgZmlsZVxuIiwKLSAgICAiICAgIHNlY3VyZSAgICAgIFVzZSBTU0xcbiIsCi0g ICAgIiAgICB2ZXJpZnk9biAgICAwID0gbm9uZSwgMSA9IHBlZXIgLCAyID0gY2VydGlmaWNhdGUg cmVxdWlyZWRcbiIsCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgIiIKLX07Ci0KLSNkZWZpbmUg SFRfQ0VSVEZJIDAKLSNkZWZpbmUgSFRfT0tDRVJUIDEKLSNkZWZpbmUgSFRfS0VZICAgIDIKLSNk ZWZpbmUgSFRfU0VDVVJFIDMKLSNkZWZpbmUgSFRfVkVSSUZZIDQKLQotc3RhdGljIHN0cnVjdCBr ZXl0YWIgaHR0cHp0YWJbXSA9IHsKLSAgICB7ICJjZXJ0IiwgICAgSFRfQ0VSVEZJLCBDTV9BUkcg fSwKLSAgICB7ICJjZXJ0c29rIiwgSFRfT0tDRVJULCAwIH0sCi0gICAgeyAia2V5IiwgICAgIEhU X0tFWSwgICAgQ01fQVJHIH0sCi0gICAgeyAic2VjdXJlIiwgIEhUX1NFQ1VSRSwgMCB9LAotICAg IHsgInZlcmlmeSIsICBIVF9WRVJJRlksIENNX0FSRyB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsK LXN0YXRpYyBpbnQgbmh0dHB6dGFiID0gc2l6ZW9mKGh0dHB6dGFiKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSAtIDE7Ci0jZW5kaWYgLyogTk9IVFRQICovCi0KLS8qICBVIFMgQSBHIEUgKi8KLQot Vk9JRAotdXNhZ2UoKSB7Ci0jaWZkZWYgTUlOSVgKLSAgICBjb25vbCgiVXNhZ2U6ICIpOwotICAg IGNvbm9sKHhhcmcwKTsKLSAgICBjb25vbCgiIFsteCBhcmcgWy14IGFyZ10uLi5bLXl5eV0uLl0g XVxuIik7Ci0jZWxzZQotICAgIGNvbm9sKCJVc2FnZTogIik7Ci0gICAgY29ub2woeGFyZzApOwot ICAgIGlmIChob3djYWxsZWQgPT0gSV9BTV9LRVJNSVQgfHwgaG93Y2FsbGVkID09IElfQU1fSUtT RCB8fAotICAgICAgICBob3djYWxsZWQgPT0gSV9BTV9TU0hTVUIpCi0gICAgICBjb25vbGEoaGxw MSk7Ci0gICAgZWxzZSBpZiAoaG93Y2FsbGVkID09IElfQU1fVEVMTkVUKQotICAgICAgY29ub2xh KGhscDIpOwotICAgIGVsc2UgaWYgKGhvd2NhbGxlZCA9PSBJX0FNX1JMT0dJTikKLSAgICAgIGNv bm9sYShobHAzKTsKLSAgICBlbHNlIGlmIChob3djYWxsZWQgPT0gSV9BTV9TU0gpCi0gICAgICBj b25vbGEoaGxwNCk7Ci0gICAgaWYgKGhvd2NhbGxlZCA9PSBJX0FNX0tFUk1JVCB8fCBob3djYWxs ZWQgPT0gSV9BTV9JS1NEIHx8Ci0gICAgICAgIGhvd2NhbGxlZCA9PSBJX0FNX1NTSFNVQikgewot CWludCBjOwotCWNvbm9sbCgiIik7Ci0JY29ub2xsKCJDb21wbGV0ZSBsaXN0aW5nIG9mIGNvbW1h bmQtbGluZSBvcHRpb25zOiIpOwotCWNvbm9sbCgiIik7Ci0JZm9yIChjID0gMzE7IGMgPCAxMjg7 IGMrKykgewotCSAgICBpZiAoIW9wdGhscFtjXSkKLQkgICAgICBjb250aW51ZTsKLQkgICAgaWYg KGFyZ2hscFtjXSkgewotCQlwcmludGYoIiAtJWMgPGFyZz4lc1xuIiwKLQkJICAgICAgIChjaGFy KWMsCi0JCSAgICAgICAob3B0YWN0W2NdID8gIiAoYWN0aW9uIG9wdGlvbikiIDogIiIpCi0JCSAg ICAgICApOwotCQlwcmludGYoIiAgICAgJXNcbiIsb3B0aGxwW2NdKTsKLQkJcHJpbnRmKCIgICAg IEFyZ3VtZW50OiAlc1xuXG4iLGFyZ2hscFtjXSk7Ci0JICAgIH0gZWxzZSB7CQkJLyogT3B0aW9u IHdpdGhvdXQgYXJnICovCi0JCXByaW50ZigiIC0lYyAgJXMlc1xuIiwKLQkJICAgICAgIChjaGFy KWMsIG9wdGhscFtjXSwKLQkJICAgICAgIChvcHRhY3RbY10/IiAoYWN0aW9uIG9wdGlvbikiOiIi KQotCQkgICAgICAgKTsKLQkJcHJpbnRmKCIgICAgIEFyZ3VtZW50OiAobm9uZSlcblxuIik7Ci0J ICAgIH0KLQl9Ci0jaWZkZWYgT1MyT1JVTklYCi0JcHJpbnRmKCJUbyBwcmV2ZW50IHRoaXMgbWVz c2FnZSBmcm9tIHNjcm9sbGluZywgdXNlICclcyAtaCB8IG1vcmUnLlxuIiwKLQkgICAgICAgeGFy ZzApOwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotCXByaW50ZigiRm9yIGEgbGlzdCBvZiBleHRl bmRlZCBvcHRpb25zIHVzZSAnJXMgLS1oZWxwJy5cbiIsCi0JICAgICAgIHhhcmcwKTsKLSAgICB9 Ci0jZW5kaWYgLyogTUlOSVggKi8KLX0KLQotCi0vKiAgQyBNIEQgTCBJIE4gIC0tICBHZXQgYXJn dW1lbnRzIGZyb20gY29tbWFuZCBsaW5lICAqLwotCi1pbnQKLWNtZGxpbigpIHsKLSAgICBjaGFy IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBnZW5lcmFsLXB1cnBvc2Ug Y2hhciAqLwotICAgIGV4dGVybiBpbnQgaGF2ZXVybDsKLQotI2lmZGVmIE5FV0ZUUAotICAgIGNo YXIgKiBwb3J0ID0gTlVMTDsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotI2lmbmRlZiBOT1hGRVIK LSAgICBjbWFyZyA9ICIiOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGds b2JhbHMgKi8KLSAgICBjbWFyZzIgPSAiIjsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICBhY3Rp b24gPSAwOwotICAgIGNmbGcgPSAwOwotCi0gICAgc2lnbmFsKFNJR0lOVCxjbF9pbnQpOwotCi0v KiBIZXJlIHdlIGhhbmRsZSBkaWZmZXJlbnQgIkNvbW1hbmQgTGluZSBQZXJzb25hbGl0aWVzIiAq LwotCi0jaWZkZWYgVENQU09DS0VUCi0jaWZuZGVmIE5PSFRUUAotICAgIGlmIChob3djYWxsZWQg PT0gSV9BTV9IVFRQKSB7ICAgICAgIC8qIElmIEkgd2FzIGNhbGxlZCBhcyBIVFRQLi4uICovCi0J Y2hhciByZG5zWzEyOF07Ci0jaWZkZWYgT1MyCi0JY2hhciAqIGFnZW50ID0gIktlcm1pdCA5NSI7 Ci0jZWxzZSAgIAotCWNoYXIgKiBhZ2VudCA9ICJDLUtlcm1pdCI7Ci0jZW5kaWYgLyogT1MyICov Ci0KLSAgICAgICAgZGVidWcoRjEwMCwiaHR0cCBwZXJzb25hbGl0eSIsIiIsMCk7Ci0jaWZkZWYg Q0tfVVJMCi0gICAgICAgIGlmIChoYXZldXJsKSB7Ci0gICAgICAgICAgICBpbnQgdHlwZTsKLSAg ICAgICAgICAgIGNoYXIgKiBsZmlsZTsKLQotCSAgICB0eXBlID0gbG9va3VwKHVybHRhYixnX3Vy bC5zdmMsbnVybHRhYixOVUxMKTsKLSAgICAgICAgICAgIGlmICghKHR5cGUgPT0gVVJMX0hUVFAg fHwgdHlwZSA9PSBVUkxfSFRUUFMpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/SW50ZXJu YWwgRXJyb3I6IEhUVFAgY29tbWFuZCBsaW5lIHByb2Nlc3NpbmdcbiIpOwotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDAsIkVycm9yOiBIVFRQIGNvbW1hbmQgbGluZSBwcm9jZXNzaW5nIiwiIiww KTsKLSAgICAgICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMSk7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICByZG5zWzBdID0gJ1wwJzsKLSAgICAgICAgICAgIGxmaWxlID0gIiI7Ci0gICAg ICAgICAgICB4ID0gKGh0dHBfb3BlbihnX3VybC5ob3MsZ191cmwucG9yID8gZ191cmwucG9yIDog Z191cmwuc3ZjLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT0gVVJMX0hUVFBT LCByZG5zLDEyOCxOVUxMKSA9PSAwKTsKLSAgICAgICAgICAgIGlmICh4KSB7Ci0jaWZkZWYgS1VJ Ci0JCWNoYXIgYXNuYW1lW0NLTUFYUEFUSCsxXTsKLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAg ICAgICAgICBpZiAoIXF1aWV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZG5zWzBdKQot CQkgICAgICBwcmludGYoIkNvbm5lY3RlZCB0byAlcyBbJXNdXHJcbiIsZ191cmwuaG9zLHJkbnMp OwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0JCSAgICAgIHByaW50ZigiQ29ubmVjdGVkIHRv ICVzXHJcbiIsZ191cmwuaG9zKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg aWYgKGdfdXJsLnB0aCkKLSAgICAgICAgICAgICAgICAgIHpzdHJpcChnX3VybC5wdGgsJmxmaWxl KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0JCSAgZ191cmwucHRoID0gIi8iOwotCi0gICAgICAg ICAgICAgICAgaWYgKCEqbGZpbGUpCi0gICAgICAgICAgICAgICAgICBsZmlsZSA9ICJpbmRleC5o dG1sIjsKLQotI2lmZGVmIEtVSQotCQlpZiAodXFfZmlsZShOVUxMLAkvKiBLOTUgR1VJOiBQdXQg dXAgZmlsZSBib3guICovCi0JCQkgICAgTlVMTCwJLyogKG5vdCB0ZXN0ZWQuLi4pICovCi0JCQkg ICAgNCwKLQkJCSAgICBOVUxMLAotCQkJICAgIGxmaWxlLAotCQkJICAgIGFzbmFtZSwKLQkJCSAg ICBDS01BWFBBVEgrMQotCQkJICAgICkgPiAwKQotCQkgIGxmaWxlID0gYXNuYW1lOwotI2VuZGlm IC8qIEtVSSAqLwotCi0gICAgICAgICAgICAgICAgeCA9IGh0dHBfZ2V0KGFnZW50LAotCQkJICAg ICBOVUxMLAkvKiBoZHJsaXN0ICovCi0JCQkgICAgIGdfdXJsLnVzciwKLQkJCSAgICAgZ191cmwu cHN3LAotCQkJICAgICAwLAotCQkJICAgICBsZmlsZSwKLQkJCSAgICAgZ191cmwucHRoLAotCQkJ ICAgICAwCQkvKiBzdGRpbyAqLwotCQkJICAgICApOwotICAgICAgICAgICAgICAgIHggPSAoaHR0 cF9jbG9zZSgpID09IDApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp ZiAoIXF1aWV0KQotCQkgIHByaW50ZigiP0hUVFAgQ29ubmVjdGlvbiBmYWlsZWQuXHJcbiIpOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgZG9leGl0KHggPyBHT09EX0VYSVQgOiBCQURfRVhJ VCwgLTEpOwotICAgICAgICB9IGVsc2UgCi0jZW5kaWYgLyogQ0tfVVJMICovCi0JICB7Ci0JICAg ICAgaW50IGh0dHBfYWN0aW9uID0gMDsKLQkgICAgICBjaGFyICogaG9zdCA9IE5VTEwsICogc3Zj ID0gTlVMTCwgKiBscGF0aCA9IE5VTEw7Ci0JICAgICAgY2hhciAqIHVzZXIgPSBOVUxMLCAqIHBz d2QgPSBOVUxMLCAqIHBhdGggPSBOVUxMOwotCSAgICAgIGNoYXIgKiB4cDsKLQotCSAgICAgIHdo aWxlICgtLXhhcmdjID4gMCkgewkvKiBHbyB0aHJvdWdoIGNvbW1hbmQgbGluZSB3b3JkcyAqLwot CQkgIHhhcmd2Kys7Ci0JCSAgZGVidWcoRjExMSwiY21kbGluIGh0dHAgeGFyZ3YiLCp4YXJndix4 YXJnYyk7Ci0JCSAgeHAgPSAqeGFyZ3YrMTsKLQkJICBpZiAoKip4YXJndiA9PSAnLScpIHsgLyog R290IGFuIG9wdGlvbiAqLwotCQkgICAgICBpbnQgeHg7Ci0JCSAgICAgIHggPSAqKCp4YXJndisx KTsJLyogR2V0IHRoZSBvcHRpb24gbGV0dGVyICovCi0JCSAgICAgIHN3aXRjaCAoeCkgewotCQkJ Y2FzZSAnZCc6CS8qIERlYnVnICovCi0jaWZkZWYgREVCVUcKLQkJCSAgaWYgKGRlYmxvZykgewot CQkJICAgICAgZGVidGltID0gMTsKLQkJCSAgfSBlbHNlIHsKLQkJCSAgICAgIGRlYmxvZyA9IGRl Ym9wbigiZGVidWcubG9nIiwwKTsKLQkJCSAgfQotI2VuZGlmIC8qIERFQlVHICovCi0JCQkgIGJy ZWFrOwotCQkJY2FzZSAnUyc6CS8qIFN0YXkgKi8KLQkJCWNhc2UgJ1knOgkvKiBObyBpbml0aWFs aXphdGlvbiBmaWxlICovCi0JCQkgIGJyZWFrOwkvKiAoYWxyZWFkeSBkb25lIGluIHByZXNjYW4p ICovCi0JCQljYXNlICdxJzoJLyogUXVpZXQgKi8KLQkJCSAgcXVpZXQgPSAxOwotCQkJICBicmVh azsKLQkJCWNhc2UgJ3UnOgkvKiBPcHRpb25zIHRoYXQgcmVxdWlyZSBhcmd1bWVudHMgKi8KLQkJ CWNhc2UgJ1AnOgotCQkJY2FzZSAnZyc6Ci0JCQljYXNlICdwJzoKLQkJCWNhc2UgJ0gnOgotCQkJ Y2FzZSAnbCc6Ci0JCQkgIGlmICgqKHhwKzEpKSB7Ci0JCQkgICAgICBYRkFUQUwoIkludmFsaWQg YXJndW1lbnQgYnVuZGxpbmciKTsKLQkJCSAgfQotCQkJICB4YXJndisrLCB4YXJnYy0tOwotCQkJ ICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgewotCQkJICAgICAgWEZBVEFM KCJNaXNzaW5nIGFyZ3VtZW50Iik7Ci0JCQkgIH0KLQkJCSAgc3dpdGNoICh4KSB7Ci0JCQkgICAg Y2FzZSAndSc6Ci0JCQkgICAgICB1c2VyID0gKnhhcmd2OwotCQkJICAgICAgYnJlYWs7Ci0JCQkg ICAgY2FzZSAnUCc6Ci0JCQkgICAgICBwc3dkID0gKnhhcmd2OwotCQkJICAgICAgYnJlYWs7Ci0J CQkgICAgY2FzZSAnbCc6Ci0JCQkgICAgICBpZiAoaHR0cF9hY3Rpb24gIT0gSFRUUF9QVVQpCi0J CQkJbHBhdGggPSAqeGFyZ3Y7Ci0JCQkgICAgICBicmVhazsKLQkJCSAgICBjYXNlICdnJzoKLQkJ CSAgICAgIGh0dHBfYWN0aW9uID0gSFRUUF9HRVQ7Ci0JCQkgICAgICBwYXRoID0gKnhhcmd2Owot CQkJICAgICAgZGVidWcoRjExMSwiY21kbGluIGh0dHAgR0VUIixwYXRoLGh0dHBfYWN0aW9uKTsK LQkJCSAgICAgIGJyZWFrOwotCQkJICAgIGNhc2UgJ3AnOgotCQkJICAgICAgaHR0cF9hY3Rpb24g PSBIVFRQX1BVVDsKLQkJCSAgICAgIHBhdGggPSAqeGFyZ3Y7Ci0JCQkgICAgICBicmVhazsKLQkJ CSAgICBjYXNlICdIJzoKLQkJCSAgICAgIGh0dHBfYWN0aW9uID0gSFRUUF9IRUQ7Ci0JCQkgICAg ICBwYXRoID0gKnhhcmd2OwotCQkJICB9Ci0JCQkgIGJyZWFrOwotCi0jaWZkZWYgQ0tfU1NMCi0g ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd6JzogewotCQkJICAgIC8qICp4YXJndiBjb250 YWlucyBhIHZhbHVlIG9mIHRoZSBmb3JtIHRhZz12YWx1ZSAqLwotCQkJICAgIC8qIHdlIG5lZWQg dG8gbG9va3VwIHRoZSB0YWcgYW5kIHNhdmUgdGhlIHZhbHVlICAqLwotCQkJICAgIGludCB4LHks ejsKLQkJCSAgICBjaGFyICogcCwgKiBxOwotCQkJICAgIG1ha2VzdHIoJnAsKnhhcmd2KTsKLQkJ CSAgICB5ID0gY2tpbmRleCgiPSIscCwwLDAsMSk7Ci0JCQkgICAgaWYgKHkgPiAwKQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcFt5LTFdID0gJ1wwJzsKLQkJCSAgICB4ID0gbG9va3Vw KGh0dHB6dGFiLHAsbmh0dHB6dGFiLCZ6KTsKLQkJCSAgICBpZiAoeCA8IDApIHsKLQkJCQlwcmlu dGYoIj9JbnZhbGlkIHNlY3VyaXR5IG9wdGlvbjogXCIlc1wiXG4iLHApOwotCQkJICAgIH0gZWxz ZSB7Ci0JCQkJcHJpbnRmKCJTZWN1cml0eSBvcHRpb246IFwiJXMiLHApOwotCQkJCWlmIChodHRw enRhYlt6XS5mbGdzICYgQ01fQVJHKSB7Ci0JCQkJICAgIHEgPSAmcFt5XTsKLQkJCQkgICAgaWYg KCEqcSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoIj9NaXNz aW5nIHJlcXVpcmVkIHZhbHVlIik7Ci0JCQkJfQotCQkJCS8qIC16IG9wdGlvbnMgdy9hcmdzICov Ci0JCQkJc3dpdGNoIChodHRwenRhYlt6XS5rd3ZhbCkgewotCQkJCSAgY2FzZSBIVF9DRVJURkk6 Ci0JCQkJICAgIG1ha2VzdHIoJnNzbF9yc2FfY2VydF9maWxlLHEpOwotCQkJCSAgICBicmVhazsK LQkJCQkgIGNhc2UgSFRfT0tDRVJUOgotCQkJCSAgICBzc2xfY2VydHNva19mbGFnID0gMTsKLQkJ CQkgICAgYnJlYWs7Ci0JCQkJICBjYXNlIEhUX0tFWToKLQkJCQkgICAgbWFrZXN0cigmc3NsX3Jz YV9rZXlfZmlsZSxxKTsKLQkJCQkgICAgYnJlYWs7Ci0JCQkJICBjYXNlIEhUX1NFQ1VSRToKLQkJ CQkgICAgc3ZjPSJodHRwcyI7Ci0JCQkJICAgIGJyZWFrOwotCQkJCSAgY2FzZSBIVF9WRVJJRlk6 Ci0JCQkJICAgIGlmICghcmRpZ2l0cyhxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/QmFkIG51bWJlcjogJXNcbiIscSk7Ci0JCQkJICAgIHNzbF92ZXJp ZnlfZmxhZyA9IGF0b2kocSk7Ci0JCQkJICAgIGJyZWFrOwotCQkJCX0KLQkJCSAgICB9Ci0JCQkg ICAgZnJlZShwKTsKLQkJCSAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNl bmRpZiAvKiBDS19TU0wgKi8KLQotCQkJY2FzZSAnaCc6CS8qIEhlbHAgKi8KLQkJCWRlZmF1bHQ6 Ci0JCQkgIHByaW50ZigiVXNhZ2U6ICVzIGhvc3QgWyBvcHRpb25zLi4uIF1cbiIseGFyZzApOwot CQkJICBjb25vbGEoaHR0cF9obHApOwotCQkJICBkb2V4aXQoR09PRF9FWElULC0xKTsKLQkJICAg ICAgfQotCQkgIH0gZWxzZSB7CQkvKiBObyBkYXNoIC0gbXVzdCBiZSBob3N0bmFtZSAqLwotCQkg ICAgICBob3N0ID0gKnhhcmd2OwotCQkgICAgICBpZiAoeGFyZ2MgPiAxKSB7Ci0JCQkgIHN2YyA9 ICooeGFyZ3YrMSk7Ci0JCQkgIGlmIChzdmMpIGlmICgqc3ZjID09ICctJyB8fCAhKnN2YykKLQkJ CSAgICBzdmMgPSBOVUxMOwotCQkJICBpZiAoc3ZjKSB7Ci0JCQkgICAgICB4YXJndisrOwotCQkJ ICAgICAgeGFyZ2MtLTsKLQkJCSAgfQotCQkgICAgICB9Ci0JCSAgfQotCSAgICAgIH0KLQkgICAg ICBpZiAoIXN2Yykgc3ZjID0gIiI7Ci0JICAgICAgaWYgKCEqc3ZjKSBzdmMgPSAiaHR0cCI7Ci0J ICAgICAgaWYgKCFob3N0KSBYRkFUQUwoIk5vIGh0dHAgaG9zdCBnaXZlbiIpOwotCi0JICAgICAg LyogQ2hlY2sgYWN0aW9uIGFyZ3MgYmVmb3JlIG9wZW5pbmcgdGhlIGNvbm5lY3Rpb24gKi8KLQkg ICAgICBpZiAoaHR0cF9hY3Rpb24pIHsKLQkJICBpZiAoaHR0cF9hY3Rpb24gPT0gSFRUUF9QVVQp IHsKLQkJICAgICAgaWYgKCFscGF0aCkKLQkJCVhGQVRBTCgiTm8gbG9jYWwgcGF0aCBmb3IgaHR0 cCBQVVQiKTsKLQkJICB9Ci0JCSAgaWYgKCFwYXRoKQotCQkgICAgWEZBVEFMKCJObyByZW1vdGUg cGF0aCBmb3IgaHR0cCBhY3Rpb24iKTsKLQkgICAgICB9Ci0JICAgICAgLyogTm93IGl0J3MgT0sg dG8gb3BlbiB0aGUgY29ubmVjdGlvbiAqLwotCSAgICAgIHJkbnNbMF0gPSBOVUw7Ci0JICAgICAg eCA9IChodHRwX29wZW4oaG9zdCwKLQkJCSAgICAgc3ZjLCFja3N0cmNtcCgiaHR0cHMiLHN2Yywt MSwwKSxyZG5zLDEyOCxOVUxMCi0JCQkgICAgICkgPT0gMCk7Ci0JICAgICAgaWYgKCF4KSB7Ci0J CSAgaWYgKCFxdWlldCkKLQkJICAgIHByaW50ZigiP0hUVFAgQ29ubmVjdGlvbiBmYWlsZWQuXHJc biIpOwotCQkgIGRvZXhpdChCQURfRVhJVCwtMSk7Ci0JICAgICAgfQotCSAgICAgIGlmICghcXVp ZXQpIHsKLQkJICBpZiAocmRuc1swXSkKLQkJICAgIHByaW50ZigiQ29ubmVjdGVkIHRvICVzIFsl c11cclxuIixob3N0LHJkbnMpOwotCQkgIGVsc2UKLQkJICAgIHByaW50ZigiQ29ubmVjdGVkIHRv ICVzXHJcbiIsaG9zdCk7Ci0JICAgICAgfQotCSAgICAgIGlmIChodHRwX2FjdGlvbikgewotICAg ICAgICAgICAgICAgICAgaW50IHBjcHkgPSAwOwotCQkgIGlmIChodHRwX2FjdGlvbiAhPSBIVFRQ X1BVVCkgeyAvKiBTdXBwbHkgZGVmYXVsdCAqLwotCQkgICAgICBpZiAoIWxwYXRoKSB7CQkgLyog bG9jYWwgcGF0aC4uLiAqLwotCQkJICB6c3RyaXAocGF0aCwmbHBhdGgpOwotCQkJICBpZiAoIWxw YXRoKQotCQkJICAgIGxwYXRoID0gIiI7Ci0JCQkgIGlmICghKmxwYXRoKQotCQkJICAgIGxwYXRo ID0gImluZGV4Lmh0bWwiOwotCQkgICAgICB9Ci0JCSAgfQotICAgICAgICAgICAgICAgICAgaWYg KCpwYXRoICE9ICcvJykgewotICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwID0gKGNoYXIg KikgbWFsbG9jKHN0cmxlbihwYXRoKSsyKTsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoIXAp IGZhdGFsKCI/TWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotICAgICAgICAgICAgICAgICAg ICAgICpwID0gJy8nOwotICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcFsxXSxwYXRoKTsg ICAgICAvKiBzYWZlICovCi0gICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHA7Ci0gICAgICAg ICAgICAgICAgICAgICAgcGNweSA9IDE7Ci0gICAgICAgICAgICAgICAgICB9Ci0JCSAgc3dpdGNo IChodHRwX2FjdGlvbikgewotCQkgICAgY2FzZSBIVFRQX0dFVDoKLQkJICAgICAgeCA9IGh0dHBf Z2V0KGFnZW50LE5VTEwsdXNlcixwc3dkLDAsbHBhdGgscGF0aCwwKTsKLQkJICAgICAgYnJlYWs7 Ci0JCSAgICAgIAotCQkgICAgY2FzZSBIVFRQX1BVVDoKLQkJICAgICAgeCA9IGh0dHBfcHV0KGFn ZW50LE5VTEwsInRleHQvSFRNTCIsCi0JCQkJICAgdXNlcixwc3dkLDAsbHBhdGgscGF0aCxOVUxM LDApOwotCQkgICAgICBicmVhazsKLQotCQkgICAgY2FzZSBIVFRQX0hFRDoKLQkJICAgICAgeCA9 IGh0dHBfaGVhZChhZ2VudCxOVUxMLHVzZXIscHN3ZCwwLGxwYXRoLHBhdGgsMCk7Ci0JCSAgICAg IGJyZWFrOwotCQkgIH0KLQkJICBkZWJ1ZyhGMTAxLCJjbWRsaW5lIGh0dHAgcmVzdWx0IiwiIix4 KTsKLSAgICAgICAgICAgICAgICAgIHggPSAoaHR0cF9jbG9zZSgpID09IDApOwotICAgICAgICAg ICAgICAgICAgaWYgKHBjcHkpIGZyZWUocGF0aCk7Ci0gICAgICAgICAgICAgICAgICBkb2V4aXQo eCA/IEdPT0RfRVhJVCA6IEJBRF9FWElULCAtMSk7Ci0JICAgICAgfQotCSAgICAgIHJldHVybigw KTsKLQkgIH0KLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBOT0hUVFAgKi8KLSNpZmRlZiBORVdGVFAK LSAgICAgIGlmIChob3djYWxsZWQgPT0gSV9BTV9GVFApIHsJLyogSWYgSSB3YXMgY2FsbGVkIGFz IEZUUC4uLiAqLwotCSAgZGVidWcoRjEwMCwiZnRwIHBlcnNvbmFsaXR5IiwiIiwwKTsKLSNpZmRl ZiBDS19VUkwKLQkgIGlmIChoYXZldXJsKQotICAgICAgICAgICAgZG9mdHBhcmcoJ1UnKTsKLQkg IGVsc2UgCi0jZW5kaWYgLyogQ0tfVVJMICovCi0JICAgIHsKLQkJd2hpbGUgKC0teGFyZ2MgPiAw KSB7CS8qIEdvIHRocm91Z2ggY29tbWFuZCBsaW5lIHdvcmRzICovCi0JCSAgICB4YXJndisrOwot CQkgICAgZGVidWcoRjExMSwiY21kbGluIGZ0cCB4YXJndiIsKnhhcmd2LHhhcmdjKTsKLQkJICAg IGlmICgqKnhhcmd2ID09ICctJykgeyAvKiBHb3QgYW4gb3B0aW9uICovCi0JCQlpbnQgeHg7Ci0J CQl4ID0gKigqeGFyZ3YrMSk7IC8qIEdldCB0aGUgb3B0aW9uIGxldHRlciAqLwotCQkJeHggPSBk b2Z0cGFyZyh4KTsKLQkJCWlmICh4eCA8IDApIHsKLQkJCSAgICBpZiAod2hhdCA9PSBXX0NPTU1B TkQpCi0JCQkgICAgICByZXR1cm4oMCk7Ci0JCQkgICAgZWxzZQotCQkJICAgICAgZG9leGl0KEJB RF9FWElULDEpOwotCQkJfQotCQkgICAgfSBlbHNlIHsJCS8qIE5vIGRhc2ggLSBtdXN0IGJlIGhv c3RuYW1lICovCi0JCQltYWtlc3RyKCZmdHBfaG9zdCwqeGFyZ3YpOwotCQkJaWYgKHhhcmdjID4g MSkgewotCQkJICAgIHBvcnQgPSAqKHhhcmd2KzEpOwotCQkJICAgIGlmIChwb3J0KSBpZiAoKnBv cnQgPT0gJy0nIHx8ICEqcG9ydCkKLQkJCSAgICAgIHBvcnQgPSBOVUxMOwotCQkJICAgIGlmIChw b3J0KSB7Ci0JCQkJeGFyZ3YrKzsKLQkJCQl4YXJnYy0tOwotCQkJICAgIH0KLQkJCX0KLQkJCWRl YnVnKEYxMTAsImNtZGxpbiBmdHAgaG9zdCIsZnRwX2hvc3QsMCk7Ci0JCQlkZWJ1ZyhGMTEwLCJj bWRsaW4gZnRwIHBvcnQiLHBvcnQsMCk7Ci0JCSAgICB9Ci0JCX0gLyogd2hpbGUgKi8KLQkgICAg fSAvKiBpZiAoaGF2ZXVybCkgKi8KLQotCSAgaWYgKGZ0cF9ob3N0KSB7Ci0JICAgICAgaW50IHh4 OwotI2lmZGVmIE5PRElBTAotCSAgICAgIHh4ID0geHhfZnRwKGZ0cF9ob3N0LHBvcnQpOwotCSAg ICAgIGlmICh4eCA8IDAgJiYgKGhhdmV1cmwgfHwgZnRwX2NtZGxpbiA+IDEpKSBkb2V4aXQoQkFE X0VYSVQsLTEpOwotI2Vsc2UKLSNpZmRlZiBOT0lDUAotCSAgICAgIHh4ID0geHhfZnRwKGZ0cF9o b3N0LHBvcnQpOwotCSAgICAgIGlmICh4eCA8IDAgJiYgKGhhdmV1cmwgfHwgZnRwX2NtZGxpbiA+ IDEpKSBkb2V4aXQoQkFEX0VYSVQsLTEpOwotI2Vsc2UKLQkgICAgICBpZiAoKmZ0cF9ob3N0ID09 ICc9JykgewkvKiBTa2lwIGRpcmVjdG9yeSBsb29rdXAgKi8KLQkJICB4eCA9IHh4X2Z0cCgmZnRw X2hvc3RbMV0scG9ydCk7Ci0JCSAgaWYgKHh4IDwgMCAmJiAoaGF2ZXVybCB8fCBmdHBfY21kbGlu ID4gMSkpCi0JCSAgICBkb2V4aXQoQkFEX0VYSVQsLTEpOwotCSAgICAgIH0gZWxzZSB7CQkJLyog V2FudCBsb29rdXAgKi8KLQkJICBpbnQgaTsKLQkJICBuaGNvdW50ID0gMDsJCS8qIENoZWNrIG5l dHdvcmsgZGlyZWN0b3J5ICovCi0JCSAgZGVidWcoRjEwMSwiY21kbGluIG5uZXRkaXIiLCIiLG5u ZXRkaXIpOwotCQkgIGlmIChubmV0ZGlyID4gMCkJLyogSWYgdGhlcmUgaXMgYSBkaXJlY3Rvcnku Li4gKi8KLQkJICAgIGx1bmV0KGZ0cF9ob3N0KTsJLyogTG9vayB1cCB0aGUgbmFtZSAqLwotCQkg IGVsc2UJCQkvKiBJZiBubyBkaXJlY3RvcnkgKi8KLQkJICAgIG5oY291bnQgPSAwOwkvKiB3ZSBk aWRuJ3QgZmluZCBhbnl0aGluZyB0aGVyZSAqLwotI2lmZGVmIERFQlVHCi0JCSAgaWYgKGRlYmxv ZykgewotCQkgICAgICBkZWJ1ZyhGMTAxLCJjbWRsaW4gbHVuZXQgbmhjb3VudCIsIiIsbmhjb3Vu dCk7Ci0JCSAgICAgIGlmIChuaGNvdW50ID4gMCkgewotCQkJICBkZWJ1ZyhGMTEwLCJjbWRsaW4g bHVuZXQgbmhfcFswXSIsbmhfcFswXSwwKTsKLQkJCSAgZGVidWcoRjExMCwiY21kbGluIGx1bmV0 IG5oX3AyWzBdIixuaF9wMlswXSwwKTsKLQkJCSAgZGVidWcoRjExMCwiY21kbGluIGx1bmV0IG5o X3B4WzBdWzBdIiwKLQkJCQluaF9weFswXVswXSwwKTsKLQkJICAgICAgfQotCQkgIH0KLSNlbmRp ZiAvKiBERUJVRyAqLwotCQkgIGlmIChuaGNvdW50ID09IDApIHsKLQkJICAgICAgeHggPSB4eF9m dHAoZnRwX2hvc3QscG9ydCk7Ci0JCSAgICAgIGlmICh4eCA8IDAgJiYgKGhhdmV1cmwgfHwgZnRw X2NtZGxpbiA+IDEpKQotCQkJZG9leGl0KEJBRF9FWElULC0xKTsKLQkJICB9IGVsc2UgewotCQkg ICAgICBmb3IgKGkgPSAwOyBpIDwgbmhjb3VudDsgaSsrKSB7Ci0JCQkgIGlmIChja3N0cmNtcChu aF9wMltpXSwidGNwL2lwIiw2LDApKQotCQkJICAgIGNvbnRpbnVlOwotCQkJICBtYWtlc3RyKCZm dHBfaG9zdCxuaF9wW2ldKTsKLQkJCSAgZGVidWcoRjExMCwiY21kbGluIGNhbGxpbmcgeHhfZnRw IixmdHBfaG9zdCwwKTsKLQkJCSAgaWYgKCFxdWlldCkKLQkJCSAgICBwcmludGYoIlRyeWluZyAl cy4uLlxuIixmdHBfaG9zdCk7Ci0JCQkgIGlmICh4eF9mdHAoZnRwX2hvc3QscG9ydCkgPiAtMSkK LQkJCSAgICBicmVhazsKLQkJICAgICAgfQotCQkgIH0KLQkgICAgICB9Ci0jZW5kaWYgLyogTk9E SUFMICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQkgICAgICBpZiAoIWZ0cGlzY29ubmVjdGVkKCkp Ci0JCWRvZXhpdChCQURfRVhJVCwtMSk7Ci0JICB9Ci0JICByZXR1cm4oMCk7Ci0gICAgICB9Ci0j ZW5kaWYgLyogTkVXRlRQICovCi0KLSNpZmRlZiBUTkNPREUKLSAgICBpZiAoaG93Y2FsbGVkID09 IElfQU1fVEVMTkVUKSB7ICAgICAvKiBJZiBJIHdhcyBjYWxsZWQgYXMgVGVsbmV0Li4uICovCi0K LSAgICAgICAgd2hpbGUgKC0teGFyZ2MgPiAwKSB7CQkvKiBHbyB0aHJvdWdoIGNvbW1hbmQgbGlu ZSB3b3JkcyAqLwotICAgICAgICAgICAgeGFyZ3YrKzsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEs ImNtZGxpbiB0ZWxuZXQgeGFyZ3YiLCp4YXJndix4YXJnYyk7Ci0gICAgICAgICAgICBpZiAoKip4 YXJndiA9PSAnPScpCi0JICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgaWYgKCFzdHJjbXAo Knhhcmd2LCItLSIpKQkvKiBnZXRvcHQoKSBjb25mb3JtYW5jZSAqLwotCSAgICAgIHJldHVybigw KTsKLSNpZmRlZiBWTVMKLSAgICAgICAgICAgIGVsc2UgaWYgKCoqeGFyZ3YgPT0gJy8nKQotCSAg ICAgIGNvbnRpbnVlOwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICAgICAgZWxzZSBpZiAoKip4 YXJndiA9PSAnLScpIHsJLyogR290IGFuIG9wdGlvbiAoYmVnaW5zIHdpdGggZGFzaCkgKi8KLSAg ICAgICAgICAgICAgICBpbnQgeHg7Ci0gICAgICAgICAgICAgICAgeCA9ICooKnhhcmd2KzEpOwkv KiBHZXQgdGhlIG9wdGlvbiBsZXR0ZXIgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJj bWRsaW4gdGVsbmV0IGFyZ3MgMSIsKnhhcmd2LHhhcmdjKTsKLSAgICAgICAgICAgICAgICB4eCA9 IGRvdG5hcmcoeCk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiY21kbGluIHRlbG5ldCBk b2FyZyIsIiIseHgpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImNtZGxpbiB0ZWxuZXQg YXJncyAyIiwqeGFyZ3YseGFyZ2MpOwotICAgICAgICAgICAgICAgIGlmICh4eCA8IDApIHsKLSNp Zm5kZWYgTk9JQ1AKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgPT0gV19DT01NQU5EKQot CQkgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBO T0lDUCAqLwotCQkgICAgICB7Ci0jaWZkZWYgT1MyCi0JCQkgIHNsZWVwKDEpOwkvKiBHaXZlIGl0 IGEgY2hhbmNlLi4uICovCi0jZW5kaWYgLyogT1MyICovCi0JCQkgIGRvZXhpdChCQURfRVhJVCwx KTsgLyogR28gaGFuZGxlIG9wdGlvbiAqLwotCQkgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfSBlbHNlIHsJCQkvKiBObyBkYXNoIG11c3QgYmUgaG9zdG5hbWUgKi8KLSAg ICAgICAgICAgICAgICBja3N0cm5jcHkodHRuYW1lLCp4YXJndixUVE5BTUxFTisxKTsKLSAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gdGVsbmV0IGhvc3QiLHR0bmFtZSwwKTsKLQot I2lmbmRlZiBOT0lDUAotI2lmbmRlZiBOT0RJQUwKLSAgICAgICAgICAgICAgICBuaGNvdW50ID0g MDsJCS8qIENoZWNrIG5ldHdvcmsgZGlyZWN0b3J5ICovCi0gICAgICAgICAgICAgICAgZGVidWco RjEwMSwiY21kbGluIHRlbG5ldCBubmV0ZGlyIiwiIixubmV0ZGlyKTsKLSAgICAgICAgICAgICAg ICBpZiAobm5ldGRpciA+IDApCS8qIElmIHRoZXJlIGlzIGEgZGlyZWN0b3J5Li4uICovCi0JCSAg bHVuZXQoKnhhcmd2KTsJLyogTG9vayB1cCB0aGUgbmFtZSAqLwotICAgICAgICAgICAgICAgIGVs c2UJCQkvKiBJZiBubyBkaXJlY3RvcnkgKi8KLQkJICBuaGNvdW50ID0gMDsJCS8qIHdlIGRpZG4n dCBmaW5kIGFueXRoaW5nIHRoZXJlICovCi0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgICAgICBp ZiAoZGVibG9nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImNtZGxpbiB0ZWxu ZXQgbHVuZXQgbmhjb3VudCIsIiIsbmhjb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChu aGNvdW50ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGlu IHRlbG5ldCBsdW5ldCBuaF9wWzBdIixuaF9wWzBdLDApOwotICAgICAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjExMCwiY21kbGluIHRlbG5ldCBsdW5ldCBuaF9wMlswXSIsbmhfcDJbMF0sMCk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gdGVsbmV0IGx1bmV0 IG5oX3B4WzBdWzBdIiwKLQkJCSAgICAgIG5oX3B4WzBdWzBdLDApOwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgICAg ICAgICAgaWYgKG5oY291bnQgPiAwICYmIG5oX3AyWzBdKSAvKiBJZiBuZXR3b3JrIHR5cGUgc3Bl Y2lmaWVkICovCi0JCSAgaWYgKGNrc3RyY21wKG5oX3AyWzBdLCJ0Y3AvaXAiLDYsMCkpIC8qIGl0 IG11c3QgYmUgVENQL0lQICovCi0JCSAgICBuaGNvdW50ID0gMDsKLSAgICAgICAgICAgICAgICBp ZiAobmhjb3VudCA9PSAxKSB7CS8qIFN0aWxsIE9LLCBzbyBtYWtlIHN1YnN0aXR1dGlvbiAqLwot ICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodHRuYW1lLG5oX3BbMF0sVFROQU1MRU4rMSk7 Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxpbiB0ZWxuZXQgbHVuZXQgc3Vi c3RpdHV0aW9uIix0dG5hbWUsMCk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5PRElB TCAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSAgICAgICAgICAgICAgICBpZiAoLS14YXJnYyA+ IDAgJiYgIWhhdmV1cmwpIHsgLyogU2VydmljZSBmcm9tIGNvbW1hbmQgbGluZT8gKi8KLSAgICAg ICAgICAgICAgICAgICAgeGFyZ3YrKzsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHR0 bmFtZSwiOiIsVFROQU1MRU4rMSk7Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0dG5h bWUsKnhhcmd2LFRUTkFNTEVOKzEpOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJj bWRsaW4gdGVsbmV0IGhvc3QyIix0dG5hbWUsMCk7Ci0gICAgICAgICAgICAgICAgfQotI2lmbmRl ZiBOT0lDUAotI2lmbmRlZiBOT0RJQUwKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuaGNvdW50 KSB7CS8qIE5vIC0gaG93IGFib3V0IGluIG5ldCBkaXJlY3Rvcnk/ICovCi0gICAgICAgICAgICAg ICAgICAgIGlmIChuaF9weFswXVswXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJu Y2F0KHR0bmFtZSwiOiIsVFROQU1MRU4rMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBja3N0 cm5jYXQodHRuYW1lLG5oX3B4WzBdWzBdLFRUTkFNTEVOKzEpOwotICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5PRElBTCAqLwotI2VuZGlmIC8qIE5P SUNQICovCi0gICAgICAgICAgICAgICAgbG9jYWwgPSAxOwkJLyogVHJ5IHRvIG9wZW4gdGhlIGNv bm5lY3Rpb24gKi8KLSAgICAgICAgICAgICAgICBuZXR0eXBlID0gTkVUX1RDUEI7Ci0gICAgICAg ICAgICAgICAgbWRtdHlwID0gLW5ldHR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKHR0b3Blbih0 dG5hbWUsJmxvY2FsLG1kbXR5cCwwKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgWEZBVEFM KCJjYW4ndCBvcGVuIGhvc3QgY29ubmVjdGlvbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBuZXR3b3JrID0gMTsJCS8qIEl0J3Mgb3BlbiAqLwotI2lmZGVmIENLTE9HRElB TAotICAgICAgICAgICAgICAgIGRvbG9nbmV0KCk7Ci0jZW5kaWYgLyogQ0tMT0dESUFMICovCi0j aWZuZGVmIE5PWEZFUgotICAgICAgICAgICAgICAgIHJlbGlhYmxlID0gMTsJCS8qIEl0J3MgcmVs aWFibGUgKi8KLSAgICAgICAgICAgICAgICB4cmVsaWFibGUgPSAxOwkJLyogLi4uICovCi0gICAg ICAgICAgICAgICAgc2V0cmVsaWFibGUgPSAxOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAg ICAgICAgICAgIGNmbGcgPSAxOwkJLyogQ29ubmVjdCAqLwotICAgICAgICAgICAgICAgIHN0YXlm bGcgPSAxOwkJLyogU3RheSAqLwotICAgICAgICAgICAgICAgIHRuX2V4aXQgPSAxOwkJLyogVGVs bmV0LWxpa2UgZXhpdCBjb25kaXRpb24gKi8KLSAgICAgICAgICAgICAgICBxdWlldCA9IDE7Ci0g ICAgICAgICAgICAgICAgZXhpdG9uY2xvc2UgPSAxOwkvKiBFeGl0IHdoZW4gY29ubmVjdGlvbiBj bG9zZXMgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgICAgICBpZiAobG9jYWwpIHsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKG5tYWMpIHsJCS8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIGludCBrOwkJLyogWWVzICovCi0gICAgICAgICAgICAg ICAgICAgICAgICBrID0gbWxvb2sobWFjdGFiLCJvbl9vcGVuIixubWFjKTsgLyogTG9vayB0aGlz IHVwICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAg ICAgICAgICAgLyogSWYgZm91bmQsICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGRvZG8oayx0dG5hbWUsMCkgPiAtMSkgICAgLyogc2V0IGl0IHVwLCAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgIC8qIGFuZCBleGVj dXRlIGl0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4oMCk7Ci0g ICAgfQotI2VuZGlmIC8qIFROQ09ERSAqLwotI2lmZGVmIFJMT0dDT0RFCi0gICAgZWxzZSBpZiAo aG93Y2FsbGVkID09IElfQU1fUkxPR0lOKSB7IC8qIElmIEkgd2FzIGNhbGxlZCBhcyBSbG9naW4u Li4gKi8KLSAgICAgICAgd2hpbGUgKC0teGFyZ2MgPiAwKSB7CQkvKiBHbyB0aHJvdWdoIGNvbW1h bmQgbGluZSB3b3JkcyAqLwotICAgICAgICAgICAgeGFyZ3YrKzsKLSAgICAgICAgICAgIGRlYnVn KEYxMTEsImNtZGxpbiBybG9naW4geGFyZ3YiLCp4YXJndix4YXJnYyk7Ci0gICAgICAgICAgICBp ZiAoKip4YXJndiA9PSAnPScpCi0JICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgaWYgKCFz dHJjbXAoKnhhcmd2LCItLSIpKQkvKiBnZXRvcHQoKSBjb25mb3JtYW5jZSAqLwotCSAgICAgIHJl dHVybigwKTsKLSNpZmRlZiBWTVMKLSAgICAgICAgICAgIGVsc2UgaWYgKCoqeGFyZ3YgPT0gJy8n KQotCSAgICAgIGNvbnRpbnVlOwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICAgICAgZWxzZSBp ZiAoKip4YXJndiA9PSAnLScpIHsJLyogR290IGFuIG9wdGlvbiAoYmVnaW5zIHdpdGggZGFzaCkg Ki8KLSAgICAgICAgICAgICAgICBpbnQgeHg7Ci0gICAgICAgICAgICAgICAgeCA9ICooKnhhcmd2 KzEpOwkvKiBHZXQgdGhlIG9wdGlvbiBsZXR0ZXIgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhG MTExLCJjbWRsaW4gcmxvZ2luIGFyZ3MgMSIsKnhhcmd2LHhhcmdjKTsKLSAgICAgICAgICAgICAg ICB4eCA9IGRvcmxnYXJnKHgpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImNtZGxpbiBy bG9naW4gZG9hcmciLCIiLHh4KTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJjbWRsaW4g cmxvZ2luIGFyZ3MgMiIsKnhhcmd2LHhhcmdjKTsKLSAgICAgICAgICAgICAgICBpZiAoeHggPCAw KSB7Ci0jaWZuZGVmIE5PSUNQCi0gICAgICAgICAgICAgICAgICAgIGlmICh3aGF0ID09IFdfQ09N TUFORCkKLQkJICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0jZW5k aWYgLyogTk9JQ1AgKi8KLQkJICAgICAgewotI2lmZGVmIE9TMgotCQkJICBzbGVlcCgxKTsJLyog R2l2ZSBpdCBhIGNoYW5jZS4uLiAqLwotI2VuZGlmIC8qIE9TMiAqLwotCQkJICBkb2V4aXQoQkFE X0VYSVQsMSk7IC8qIEdvIGhhbmRsZSBvcHRpb24gKi8KLQkJICAgICAgfQotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7CQkJLyogTm8gZGFzaCBtdXN0IGJlIGhvc3RuYW1l ICovCi0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSwqeGFyZ3YsVFROQU1MRU4rMSk7 Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIHJsb2dpbiBob3N0Iix0dG5hbWUs MCk7Ci0KLSNpZm5kZWYgTk9JQ1AKLSNpZm5kZWYgTk9ESUFMCi0gICAgICAgICAgICAgICAgbmhj b3VudCA9IDA7CQkvKiBDaGVjayBuZXR3b3JrIGRpcmVjdG9yeSAqLwotICAgICAgICAgICAgICAg IGRlYnVnKEYxMDEsImNtZGxpbiBybG9naW4gbm5ldGRpciIsIiIsbm5ldGRpcik7Ci0gICAgICAg ICAgICAgICAgaWYgKG5uZXRkaXIgPiAwKQkvKiBJZiB0aGVyZSBpcyBhIGRpcmVjdG9yeS4uLiAq LwotCQkgIGx1bmV0KCp4YXJndik7CS8qIExvb2sgdXAgdGhlIG5hbWUgKi8KLSAgICAgICAgICAg ICAgICBlbHNlCQkJLyogSWYgbm8gZGlyZWN0b3J5ICovCi0JCSAgbmhjb3VudCA9IDA7CQkvKiB3 ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyB0aGVyZSAqLwotI2lmZGVmIERFQlVHCi0gICAgICAgICAg ICAgICAgaWYgKGRlYmxvZykgewotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJjbWRs aW4gcmxvZ2luIGx1bmV0IG5oY291bnQiLCIiLG5oY291bnQpOwotICAgICAgICAgICAgICAgICAg ICBpZiAobmhjb3VudCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs ImNtZGxpbiBybG9naW4gbHVuZXQgbmhfcFswXSIsbmhfcFswXSwwKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxpbiBybG9naW4gbHVuZXQgbmhfcDJbMF0iLG5oX3Ay WzBdLDApOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIHJsb2dp biBsdW5ldCBuaF9weFswXVswXSIsCi0JCQkgICAgICBuaF9weFswXVswXSwwKTsKLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAg ICAgICAgICAgICAgIGlmIChuaGNvdW50ID4gMCAmJiBuaF9wMlswXSkgLyogSWYgbmV0d29yayB0 eXBlIHNwZWNpZmllZCAqLwotCQkgIGlmIChja3N0cmNtcChuaF9wMlswXSwidGNwL2lwIiw2LDAp KSAvKiBpdCBtdXN0IGJlIFRDUC9JUCAqLwotCQkgICAgbmhjb3VudCA9IDA7Ci0gICAgICAgICAg ICAgICAgaWYgKG5oY291bnQgPT0gMSkgewkvKiBTdGlsbCBPSywgc28gbWFrZSBzdWJzdGl0dXRp b24gKi8KLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSxuaF9wWzBdLFRUTkFN TEVOKzEpOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gcmxvZ2luIGx1 bmV0IHN1YnN0aXR1dGlvbiIsdHRuYW1lLDApOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAv KiBOT0RJQUwgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0gICAgICAgICAgICAgICAgaWYgKCFo YXZldXJsKSB7IC8qIFNlcnZpY2UgZnJvbSBjb21tYW5kIGxpbmU/ICovCi0gICAgICAgICAgICAg ICAgICAgIGNrc3RybmNhdCh0dG5hbWUsIjpsb2dpbiIsVFROQU1MRU4rMSk7Ci0gICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxpbiBybG9naW4gaG9zdDIiLHR0bmFtZSwwKTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbG9jYWwgPSAxOwkJLyogVHJ5IHRvIG9w ZW4gdGhlIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgICAgICAgICBuZXR0eXBlID0gTkVUX1RDUEI7 Ci0gICAgICAgICAgICAgICAgbWRtdHlwID0gLW5ldHR5cGU7Ci0gICAgICAgICAgICAgICAgaWYg KHR0b3Blbih0dG5hbWUsJmxvY2FsLG1kbXR5cCwwKSA8IDApIHsKLSAgICAgICAgICAgICAgICAg ICAgWEZBVEFMKCJjYW4ndCBvcGVuIGhvc3QgY29ubmVjdGlvbiIpOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICBuZXR3b3JrID0gMTsJCS8qIEl0J3Mgb3BlbiAqLwotI2lmZGVm IENLTE9HRElBTAotICAgICAgICAgICAgICAgIGRvbG9nbmV0KCk7Ci0jZW5kaWYgLyogQ0tMT0dE SUFMICovCi0jaWZuZGVmIE5PWEZFUgotICAgICAgICAgICAgICAgIHJlbGlhYmxlID0gMTsJCS8q IEl0J3MgcmVsaWFibGUgKi8KLSAgICAgICAgICAgICAgICB4cmVsaWFibGUgPSAxOwkJLyogLi4u ICovCi0gICAgICAgICAgICAgICAgc2V0cmVsaWFibGUgPSAxOwotI2VuZGlmIC8qIE5PWEZFUiAq LwotICAgICAgICAgICAgICAgIGNmbGcgPSAxOwkJLyogQ29ubmVjdCAqLwotICAgICAgICAgICAg ICAgIHN0YXlmbGcgPSAxOwkJLyogU3RheSAqLwotICAgICAgICAgICAgICAgIHRuX2V4aXQgPSAx OwkJLyogVGVsbmV0LWxpa2UgZXhpdCBjb25kaXRpb24gKi8KLSAgICAgICAgICAgICAgICBxdWll dCA9IDE7Ci0gICAgICAgICAgICAgICAgZXhpdG9uY2xvc2UgPSAxOwkvKiBFeGl0IHdoZW4gY29u bmVjdGlvbiBjbG9zZXMgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgICAgICBpZiAobG9j YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5tYWMpIHsJCS8qIEFueSBtYWNyb3MgZGVm aW5lZD8gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBrOwkJLyogWWVzICovCi0gICAg ICAgICAgICAgICAgICAgICAgICBrID0gbWxvb2sobWFjdGFiLCJvbl9vcGVuIixubWFjKTsgLyog TG9vayB0aGlzIHVwICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAg ICAgICAgICAgICAgICAgICAgLyogSWYgZm91bmQsICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGRvZG8oayx0dG5hbWUsMCkgPiAtMSkgICAgLyogc2V0IGl0IHVwLCAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgIC8q IGFuZCBleGVjdXRlIGl0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1 cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5kaWYgLyogVENQU09DS0VU ICovCi0KLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgICBpZiAoaG93Y2FsbGVkID09IElfQU1fU1NI KSB7CS8qIElmIEkgd2FzIGNhbGxlZCBhcyBTU0guLi4gKi8KLSAgICAgICAgICBleHRlcm4gY2hh ciAqIHNzaF9oc3QsICogc3NoX2NtZCwgKiBzc2hfcHJ0OwotCSAgZGVidWcoRjEwMCwic3NoIHBl cnNvbmFsaXR5IiwiIiwwKTsKLSNpZmRlZiBDS19VUkwKLQkgIGlmIChoYXZldXJsKSB7Ci0gICAg ICAgICAgICAgIG1ha2VzdHIoJnNzaF9oc3QsZ191cmwuaG9zKTsKLSAgICAgICAgICAgICAgbWFr ZXN0cigmc3NoX3BydCxnX3VybC5zdmMpOwotCSAgICAgIGNrc3RybmNweSh0dG5hbWUsc3NoX2hz dCxUVE5BTUxFTisxKTsKLSAgICAgICAgICAgICAgY2tzdHJuY2F0KHR0bmFtZSwiOiIsVFROQU1M RU4rMSk7Ci0gICAgICAgICAgICAgIGNrc3RybmNhdCh0dG5hbWUsc3NoX3BydCxUVE5BTUxFTisx KTsKLSAgICAgICAgICB9Ci0JICBlbHNlIAotI2VuZGlmIC8qIENLX1VSTCAqLwotCSAgewotICAg ICAgICAgICAgICB3aGlsZSAoLS14YXJnYyA+IDApIHsJLyogR28gdGhyb3VnaCBjb21tYW5kIGxp bmUgd29yZHMgKi8KLSAgICAgICAgICAgICAgICAgIHhhcmd2Kys7Ci0gICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJjbWRsaW4gc3NoIHhhcmd2IiwqeGFyZ3YseGFyZ2MpOwotICAgICAgICAg ICAgICAgICAgaWYgKCoqeGFyZ3YgPT0gJz0nKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVy bigwKTsKLSAgICAgICAgICAgICAgICAgIGlmICghc3RyY21wKCp4YXJndiwiLS0iKSkgLyogZ2V0 b3B0KCkgY29uZm9ybWFuY2UgKi8KLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0j aWZkZWYgVk1TCi0gICAgICAgICAgICAgICAgICBlbHNlIGlmICgqKnhhcmd2ID09ICcvJykKLSAg ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSNlbmRpZiAvKiBWTVMgKi8KLQkJICAvKiBH b3QgYW4gb3B0aW9uIChiZWdpbnMgd2l0aCBkYXNoKSAqLwotICAgICAgICAgICAgICAgICAgZWxz ZSBpZiAoKip4YXJndiA9PSAnLScpIHsKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgeHg7Ci0g ICAgICAgICAgICAgICAgICAgICAgeCA9ICooKnhhcmd2KzEpOwkvKiBHZXQgdGhlIG9wdGlvbiBs ZXR0ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJjbWRsaW4gYXJncyAx IiwqeGFyZ3YseGFyZ2MpOwotICAgICAgICAgICAgICAgICAgICAgIHh4ID0gZG9zc2hhcmcoeCk7 Ci0gICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiY21kbGluIGRvYXJnIiwiIix4eCk7 Ci0gICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiY21kbGluIGFyZ3MgMiIsKnhhcmd2 LHhhcmdjKTsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoeHggPCAwKSB7Ci0jaWZuZGVmIE5P SUNQCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aGF0ID09IFdfQ09NTUFORCkKLQkJ CSAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAv KiBOT0lDUCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0jaWZkZWYgT1MyCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCgxKTsJLyogR2l2ZSBpdCBhIGNoYW5jZS4u LiAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9l eGl0KEJBRF9FWElULDEpOyAvKiBHbyBoYW5kbGUgb3B0aW9uICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9 IGVsc2UgewkJCS8qIE5vIGRhc2ggbXVzdCBiZSBob3N0bmFtZSAqLwotICAgICAgICAgICAgICAg ICAgICAgIGNrc3RybmNweSh0dG5hbWUsKnhhcmd2LFRUTkFNTEVOKzEpOwotICAgICAgICAgICAg ICAgICAgICAgIG1ha2VzdHIoJnNzaF9oc3QsdHRuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJjbWRsaW4gc3NoIGhvc3QiLHR0bmFtZSwwKTsKLSNpZm5kZWYgTk9JQ1AK LSNpZm5kZWYgTk9ESUFMCi0gICAgICAgICAgICAgICAgICAgICAgbmhjb3VudCA9IDA7CQkvKiBD aGVjayBuZXR3b3JrIGRpcmVjdG9yeSAqLwotICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYx MDEsImNtZGxpbiBubmV0ZGlyIiwiIixubmV0ZGlyKTsKLSAgICAgICAgICAgICAgICAgICAgICBp ZiAobm5ldGRpciA+IDApCS8qIElmIHRoZXJlIGlzIGEgZGlyZWN0b3J5Li4uICovCi0JCQlsdW5l dCgqeGFyZ3YpOwkvKiBMb29rIHVwIHRoZSBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAg ZWxzZQkJLyogSWYgbm8gZGlyZWN0b3J5ICovCi0JCQluaGNvdW50ID0gMDsJLyogd2UgZGlkbid0 IGZpbmQgYW55dGhpbmcgdGhlcmUgKi8KLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgICAgICAg ICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwi Y21kbGluIGx1bmV0IG5oY291bnQiLCIiLG5oY291bnQpOwotICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAobmhjb3VudCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsImNtZGxpbiBsdW5ldCBuaF9wWzBdIixuaF9wWzBdLDApOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIGx1bmV0IG5oX3AyWzBdIixuaF9w MlswXSwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsCi0JCQkJ ICAgICJjbWRsaW4gbHVuZXQgbmhfcHhbMF1bMF0iLG5oX3B4WzBdWzBdLDApOwotICAgICAgICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIERF QlVHICovCi0JCSAgICAgIC8qIElmIG5ldHdvcmsgdHlwZSBzcGVjaWZpZWQgKi8KLQkJICAgICAg LyogaXQgbXVzdCBiZSBUQ1AvSVAgKi8KLSAgICAgICAgICAgICAgICAgICAgICBpZiAobmhjb3Vu dCA+IDAgJiYgbmhfcDJbMF0pCi0JCQlpZiAoY2tzdHJjbXAobmhfcDJbMF0sInRjcC9pcCIsNiww KSkKLQkJCSAgbmhjb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKG5oY291bnQg PT0gMSkgeyAvKiBTdGlsbCBPSywgc28gbWFrZSBzdWJzdGl0dXRpb24gKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSxuaF9wWzBdLFRUTkFNTEVOKzEpOwotICAg ICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfaHN0LHR0bmFtZSk7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxpbiBsdW5ldCBzdWJzdGl0dXRpb24i LHR0bmFtZSwwKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogTk9ESUFMICov Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLQkJICAgICAgLyogU2VydmljZSBmcm9tIGNvbW1hbmQgbGlu ZT8gKi8KLSAgICAgICAgICAgICAgICAgICAgICBpZiAoLS14YXJnYyA+IDAgJiYgIWhhdmV1cmwp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeGFyZ3YrKzsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgY2tzdHJuY2F0KHR0bmFtZSwiOiIsVFROQU1MRU4rMSk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgIGNrc3RybmNhdCh0dG5hbWUsKnhhcmd2LFRUTkFNTEVOKzEpOwotICAgICAg ICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfcHJ0LCp4YXJndik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxpbiB0ZWxuZXQgaG9zdDIiLHR0bmFtZSww KTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAg ICAgICAgICAgIC8qIERvIG5vdCBzdWJzdGl0dXRlIG5ldCBkaXIgc2VydmljZSBmb3Igc3NoIHBv cnQgKi8KLSNpZm5kZWYgTk9JQ1AKLSNpZm5kZWYgTk9ESUFMCi0JCSAgICAgIC8qIE5vIC0gaG93 IGFib3V0IGluIG5ldCBkaXJlY3Rvcnk/ICovCi0gICAgICAgICAgICAgICAgICAgICAgZWxzZSBp ZiAobmhjb3VudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmhfcHhbMF1bMF0p IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0dG5hbWUsIjoiLFRU TkFNTEVOKzEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHR0bmFt ZSxuaF9weFswXVswXSxUVE5BTUxFTisxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1ha2VzdHIoJnNzaF9wcnQsbmhfcHhbMF1bMF0pOwotICAgICAgICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotCi0jZW5kaWYgLyogTk9ESUFMICovCi0jZW5k aWYgLyogTk9JQ1AgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg ICB9Ci0gICAgICAgICAgbG9jYWwgPSAxOwkJCS8qIFRyeSB0byBvcGVuIHRoZSBjb25uZWN0aW9u ICovCi0gICAgICAgICAgbmV0dHlwZSA9IE5FVF9TU0g7Ci0gICAgICAgICAgbWRtdHlwID0gLW5l dHR5cGU7Ci0gICAgICAgICAgaWYgKHR0b3Blbih0dG5hbWUsJmxvY2FsLG1kbXR5cCwwKSA8IDAp IHsKLSAgICAgICAgICAgICAgWEZBVEFMKCJjYW4ndCBvcGVuIGhvc3QgY29ubmVjdGlvbiIpOwot ICAgICAgICAgIH0KLSAgICAgICAgICBuZXR3b3JrID0gMTsJCQkvKiBJdCdzIG9wZW4gKi8KLSNp ZmRlZiBDS0xPR0RJQUwKLSAgICAgICAgICBkb2xvZ25ldCgpOwotI2VuZGlmIC8qIENLTE9HRElB TCAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICAgICAgICByZWxpYWJsZSA9IDE7CQkJLyogSXQncyBy ZWxpYWJsZSAqLwotICAgICAgICAgIHhyZWxpYWJsZSA9IDE7CQkvKiAuLi4gKi8KLSAgICAgICAg ICBzZXRyZWxpYWJsZSA9IDE7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgICAgICAgY2ZsZyA9 IDE7CQkJLyogQ29ubmVjdCAqLwotICAgICAgICAgIHN0YXlmbGcgPSAxOwkJCS8qIFN0YXkgKi8K LSAgICAgICAgICB0bl9leGl0ID0gMTsJCQkvKiBUZWxuZXQtbGlrZSBleGl0IGNvbmRpdGlvbiAq LwotICAgICAgICAgIHF1aWV0ID0gMTsKLSAgICAgICAgICBleGl0b25jbG9zZSA9IDE7CQkvKiBF eGl0IHdoZW4gY29ubmVjdGlvbiBjbG9zZXMgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICBp ZiAobG9jYWwpIHsKLSAgICAgICAgICAgICAgaWYgKG5tYWMpIHsJCS8qIEFueSBtYWNyb3MgZGVm aW5lZD8gKi8KLSAgICAgICAgICAgICAgICAgIGludCBrOwkJLyogWWVzICovCi0gICAgICAgICAg ICAgICAgICBrID0gbWxvb2sobWFjdGFiLCJvbl9vcGVuIixubWFjKTsgLyogTG9vayB0aGlzIHVw ICovCi0gICAgICAgICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgICAgICAg LyogSWYgZm91bmQsICovCi0gICAgICAgICAgICAgICAgICAgICAgaWYgKGRvZG8oayx0dG5hbWUs MCkgPiAtMSkgICAgLyogc2V0IGl0IHVwLCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBw YXJzZXIoMSk7ICAgICAgICAgICAgICAgIC8qIGFuZCBleGVjdXRlIGl0ICovCi0gICAgICAgICAg ICAgICAgICB9IAotICAgICAgICAgICAgICB9ICAgICAKLSAgICAgICAgICB9Ci0jZW5kaWYgLyog Tk9TUEwgKi8KLQkgIHJldHVybigwKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBTU0hCVUlMVElOICov Ci0KLSAgICBpZiAoaG93Y2FsbGVkID09IElfQU1fU1NIU1VCKQotICAgICAgcmV0dXJuKDApOwot Ci0vKgotICBGcm9tIGhlcmUgZG93bjogV2Ugd2VyZSBjYWxsZWQgYXMgImtlcm1pdCIgb3IgImlr c2QiLgotCi0gIElmIHdlIHdlcmUgc3RhcnRlZCBkaXJlY3RseSBmcm9tIGEgS2VybWl0IHNjcmlw dCBmaWxlLAotICB0aGUgZmlsZW5hbWUgb2YgdGhlIHNjcmlwdCBpcyBpbiBhcmd2WzFdLCBzbyBz a2lwIHBhc3QgaXQuCi0qLwotICAgIGlmICh4YXJnYyA+IDEpIHsKLSAgICAgICAgaW50IG4gPSAx OwotICAgICAgICBpZiAoKnhhcmd2WzFdICE9ICctJykgewotCi0jaWZkZWYgS0VSQkFORwotICAg ICAgICAgICAgLyogSWYgd2Ugd2VyZSBzdGFydGVkIHdpdGggYSBLZXJiYW5nIHNjcmlwdCwgdGhl IHNjcmlwdCAqLwotICAgICAgICAgICAgLyogYXJndW1lbnRzIHdlcmUgYWxyZWFkeSBwaWNrZWQg dXAgaW4gcHJlc2NhbiAvIGNtZGluaSgpICovCi0gICAgICAgICAgICAvKiBhbmQgdGhlcmUgaXMg bm90aGluZyBoZXJlIGZvciB1cyBhbnl3YXkuICovCi0gICAgICAgICAgICBpZiAoIXN0cmNtcCh4 YXJndlsxXSwiKyIpKQotICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogS0VSQkFO RyAqLwotCi0gICAgICAgICAgICBpZiAoY2ZpbGVmKSB7ICAgICAgICAgICAgICAgLyogQ29tbWFu ZCBmaWxlIGZvdW5kIGluIHByZXNjYW4oKSAqLwotICAgICAgICAgICAgICAgIHhhcmdjIC09IG47 ICAgICAgICAgICAgIC8qIFNraXAgcGFzdCBpdCAqLwotICAgICAgICAgICAgICAgIHhhcmd2ICs9 IG47Ci0gICAgICAgICAgICAgICAgY2ZpbGVmID0gMDsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJjbWRsaW4gY2ZpbGVmIHNldCB0byAwIiwiIixjZmlsZWYpOwotICAgICAgICAgICAgfQot ICAgICAgICB9Ci0gICAgfQotLyoKLSAgUmVndWxhciBVbml4LXN0eWxlIGNvbW1hbmQgbGluZSBw YXJzZXIsIG1vc3RseSBjb25mb3JtaW5nIHdpdGggJ0EgUHJvcG9zZWQKLSAgQ29tbWFuZCBTeW50 YXggU3RhbmRhcmQgZm9yIFVuaXggU3lzdGVtcycsIEhlbWVud2F5ICYgQXJtaXRhZ2UsIFVuaXgv V29ybGQsCi0gIFZvbC4xLCBOby4zLCAxOTg0LgotKi8KLSAgICB3aGlsZSAoLS14YXJnYyA+IDAp IHsgICAgICAgICAgICAgICAvKiBHbyB0aHJvdWdoIGNvbW1hbmQgbGluZSB3b3JkcyAqLwotICAg ICAgICB4YXJndisrOwotICAgICAgICBkZWJ1ZyhGMTExLCJjbWRsaW4geGFyZ3YiLCp4YXJndix4 YXJnYyk7Ci0gICAgICAgIGlmICgqKnhhcmd2ID09ICc9JykKLSAgICAgICAgICByZXR1cm4oMCk7 Ci0gICAgICAgIGlmICghc3RyY21wKCp4YXJndiwiLS0iKSkgICAgICAgLyogZ2V0b3B0KCkgY29u Zm9ybWFuY2UgKi8KLSAgICAgICAgICByZXR1cm4oMCk7Ci0jaWZkZWYgVk1TCi0gICAgICAgIGVs c2UgaWYgKCoqeGFyZ3YgPT0gJy8nKQotICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmIC8qIFZN UyAqLwotICAgICAgICBlbHNlIGlmICgqKnhhcmd2ID09ICctJykgeyAgICAgIC8qIEdvdCBhbiBv cHRpb24gKGJlZ2lucyB3aXRoIGRhc2gpICovCi0gICAgICAgICAgICBpbnQgeHg7Ci0gICAgICAg ICAgICB4ID0gKigqeGFyZ3YrMSk7ICAgICAgICAgICAgLyogR2V0IHRoZSBvcHRpb24gbGV0dGVy ICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJjbWRsaW4gYXJncyAxIiwqeGFyZ3YseGFyZ2Mp OwotICAgICAgICAgICAgeHggPSBkb2FyZyh4KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImNt ZGxpbiBkb2FyZyIsIiIseHgpOwotICAgICAgICAgICAgZGVidWcoRjExMSwiY21kbGluIGFyZ3Mg MiIsKnhhcmd2LHhhcmdjKTsKLSAgICAgICAgICAgIGlmICh4eCA8IDApIHsKLSNpZm5kZWYgTk9J Q1AKLSAgICAgICAgICAgICAgICBpZiAod2hhdCA9PSBXX0NPTU1BTkQpCi0gICAgICAgICAgICAg ICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotI2VuZGlmIC8qIE5PSUNQICov Ci0gICAgICAgICAgICAgICAgICB7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgICAg c2xlZXAoMSk7ICAgICAgICAgLyogR2l2ZSBpdCBhIGNoYW5jZS4uLiAqLwotI2VuZGlmIC8qIE9T MiAqLwotICAgICAgICAgICAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwxKTsgLyogR28gaGFu ZGxlIG9wdGlvbiAqLwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg ICB9IGVsc2UgaWYgKCFoYXZldXJsKSB7CQkvKiBObyBkYXNoIHdoZXJlIGV4cGVjdGVkICovCi0J ICAgIGNoYXIgeGJ1ZlszMl07Ci0gICAgICAgICAgICBjaGFyIGJ1ZlsxMjhdOwotCSAgICBpbnQg azsKLQkgICAgayA9IGNrc3RybmNweSh4YnVmLCp4YXJndiw0MCk7Ci0JICAgIGlmIChrID4gMzAp IHsKLQkJeGJ1ZlszMF0gPSAnLic7Ci0JCXhidWZbMjldID0gJy4nOwotCQl4YnVmWzI4XSA9ICcu JzsKLQkgICAgfQotCSAgICB4YnVmWzMxXSA9IE5VTDsKLSAgICAgICAgICAgIGNrbWFrbXNnKGJ1 ZiwKLQkJICAgICAxMjgsCi0JCSAgICAgImludmFsaWQgY29tbWFuZC1saW5lIG9wdGlvbiwgdHlw ZSBcIiIsCi0JCSAgICAgbXluYW1lLAotCQkgICAgICIgLWhcIiBmb3IgaGVscCIsCi0JCSAgICAg TlVMTAotCQkgICAgICk7Ci0JICAgIGZhdGFsMih4YnVmLGJ1Zik7Ci0gICAgICAgIH0KLSAgICB9 Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0jaWZuZGVmIE5PSUNQCi0gICAgICAg IGRlYnVnKEYxMDEsImNtZGxpbiB3aGF0IiwiIix3aGF0KTsKLSNlbmRpZiAvKiBOT0lDUCAqLwot ICAgICAgICBkZWJ1ZyhGMTAxLCJjbWRsaW4gYWN0aW9uIiwiIixhY3Rpb24pOwotI2lmbmRlZiBO T1hGRVIKLSAgICAgICAgZGVidWcoRjEwMSwiY21kbGluIHN0ZG91ZiIsIiIsc3Rkb3VmKTsKLSNl bmRpZiAvKiBOT1hGRVIgKi8KLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIE5P SUNQCi0gICAgaWYgKCFhY3Rpb24gJiYgIWNmbGcgJiYgIWNuZmxnKSB7Ci0gICAgICAgIGRlYnVn KEYxMDAsImNtZGxpbiBOT0lDUCBmYXRhbCBubyBhY3Rpb24iLCIiLDApOwotICAgICAgICBYRkFU QUwoIj9ObyBhY3Rpb25zIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUiKTsKLSAgICB9Ci0jZWxz ZQotICAgIGlmIChpbnNlcnZlciAmJiB3aGF0ID09IDApIHsgICAgICAgIC8qIEludGVybmV0IEtl cm1pdCBzZXJ2ZXIgY2hlY2tzICovCi0gICAgICAgIGlmIChsb2NhbCB8fCAoYWN0aW9uICE9IDAg JiYgYWN0aW9uICE9ICd4JykpIHsKLSAgICAgICAgICAgIGlmIChsb2NhbCkKLSAgICAgICAgICAg ICAgcHJpbnRmKCJsb2NhbFxyXG4iKTsKLSAgICAgICAgICAgIGlmIChhY3Rpb24pCi0gICAgICAg ICAgICAgIHByaW50ZigiYWN0aW9uPSVjXHJcbiIsYWN0aW9uKTsKLSAgICAgICAgICAgIGRlYnVn KEYxMDAsImNtZGxpbiBmYXRhbCAxIiwiIiwwKTsKLSAgICAgICAgICAgIFhGQVRBTCgiTm8gYWN0 aW9ucyBvciBjb25uZWN0aW9ucyBhbGxvd2VkIHdpdGggLUEiKTsKLSAgICAgICAgfQotICAgIH0K LSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICBpZiAoIWxvY2FsKSB7 Ci0gICAgICAgIGlmICgoYWN0aW9uID09ICdjJykgfHwgKGNmbGcgIT0gMCkpIHsKLSAgICAgICAg ICAgIGRlYnVnKEYxMDAsImNtZGxpbiBmYXRhbCAyIiwiIiwwKTsKLSAgICAgICAgICAgIFhGQVRB TCgiLWwgb3IgLWogb3IgLVggcmVxdWlyZWQiKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAv KiBOT0xPQ0FMICovCi0jaWZuZGVmIE5PWEZFUgotICAgIGlmICgqY21hcmcyICE9IDApIHsKLSAg ICAgICAgaWYgKChhY3Rpb24gIT0gJ3MnKSAmJiAoYWN0aW9uICE9ICdyJykgJiYgKGFjdGlvbiAh PSAndicpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJjbWRsaW4gZmF0YWwgMyIsIiIsMCk7 Ci0gICAgICAgICAgICBYRkFUQUwoIi1hIHdpdGhvdXQgLXMsIC1yLCBvciAtZyIpOwotICAgICAg ICB9Ci0gICAgICAgIGlmIChhY3Rpb24gPT0gJ3InIHx8IGFjdGlvbiA9PSAndicpIHsKLSNpZmRl ZiBDS19UTVBESVIKLSAgICAgICAgICAgIGlmIChpc2RpcihjbWFyZzIpKSB7ICAgICAgICAvKiAt YSBpcyBhIGRpcmVjdG9yeSAqLwotICAgICAgICAgICAgICAgIGlmICghemNoZGlyKGNtYXJnMikp IHsgIC8qIHRyeSB0byBjaGFuZ2UgdG8gaXQgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWco RjEwMCwiY21kbGluIGZhdGFsIDQiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICBYRkFUQUwo ImNhbid0IGNoYW5nZSB0byAnLWEnIGRpcmVjdG9yeSIpOwotICAgICAgICAgICAgICAgIH0gZWxz ZSBjbWFyZzIgPSAiIjsKLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIENLX1RNUERJUiAq LwotICAgICAgICAgICAgICBpZiAoemNoa28oY21hcmcyKSA8IDApIHsKLSAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDAsImNtZGxpbiBmYXRhbCA1IiwiIiwwKTsKLSAgICAgICAgICAgICAgICAg IFhGQVRBTCgid3JpdGUgYWNjZXNzIHRvIC1hIGZpbGUgZGVuaWVkIik7Ci0gICAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoKGFjdGlvbiA9PSAndicpICYmIChzdGRvdWYp ICYmICghbG9jYWwpKSB7Ci0gICAgICAgIGlmIChpc19hX3R0eSgxKSkgewotICAgICAgICAgICAg ZGVidWcoRjEwMCwiY21kbGluIGZhdGFsIDYiLCIiLDApOwotICAgICAgICAgICAgWEZBVEFMKCJ1 bnJlZGlyZWN0ZWQgLWsgY2FuIG9ubHkgYmUgdXNlZCBpbiBsb2NhbCBtb2RlIik7Ci0gICAgICAg IH0KLSAgICB9Ci0gICAgaWYgKChhY3Rpb24gPT0gJ3MnKSB8fCAoYWN0aW9uID09ICd2JykgfHwK LSAgICAgICAgKGFjdGlvbiA9PSAncicpIHx8IChhY3Rpb24gPT0gJ3gnKSkgewotICAgICAgICBp ZiAobG9jYWwpCi0gICAgICAgICAgZGlzcGxhID0gMTsKLSAgICAgICAgaWYgKHN0ZG91Zikgewot ICAgICAgICAgICAgZGlzcGxhID0gMDsKLSAgICAgICAgICAgIHF1aWV0ID0gMTsKLSAgICAgICAg fQotICAgIH0KLSAgICBpZiAocXVpZXQpIGRpc3BsYSA9IDA7ICAgICAgICAgICAgICAvKiBObyBk aXNwbGF5IGlmIHF1aWV0IHJlcXVlc3RlZCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2lmZGVm IERFQlVHCi0gICAgaWYgKGFjdGlvbikKLSAgICAgIGRlYnVnKEYwMDAsImNtZGxpbiByZXR1cm5z IGFjdGlvbiIsIiIsYWN0aW9uKTsKLSAgICBlbHNlCi0gICAgICBkZWJ1ZyhGMTAxLCJjbWRsaW4g cmV0dXJucyBhY3Rpb24iLCIiLGFjdGlvbik7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotICAgIHJl dHVybihhY3Rpb24pOyAgICAgICAgICAgICAgICAgICAgIC8qIFRoZW4gZG8gYW55IHJlcXVlc3Rl ZCBwcm90b2NvbCAqLwotfQotCi0vKiBFeHRlbmRlZCBhcmd1bWVudCBwYXJzaW5nOiAtLWtleXdv cmRbOnZhbHVlXSAob3IgPXZhbHVlKSAqLwotCi0vKgotICBYQV94eHh4IHN5bWJvbHMgYXJlIGRl ZmluZWQgaW4gY2t1dXNyLmguCi0gIElmIHlvdSBhZGQgYSBuZXcgb25lLCBhbHNvIHJlbWVtYmVy IHRvIHVwZGF0ZSBkb3Nob3coKSwKLSAgU0hYT1BUIHNlY3Rpb24sIGluIGNrdXVzNS5jLgotKi8K LXN0cnVjdCBrZXl0YWIgeGFyZ3RhYltdID0gewotI2lmZGVmIENLX0xPR0lOCi0gICAgeyAiYW5v bnltb3VzIiwgICBYQV9BTk9OLCBDTV9BUkd8Q01fUFJFIH0sCi0jZW5kaWYgLyogQ0tfTE9HSU4g Ki8KLSAgICB7ICJiYW5uZXJmaWxlIiwgIFhBX0JBRkksIENNX0FSRyB9LAotICAgIHsgImNkZmls ZSIsICAgICAgWEFfQ0RGSSwgQ01fQVJHIH0sCi0gICAgeyAiY2RtZXNzYWdlIiwgICBYQV9DRE1T LCBDTV9BUkcgfSwKLSAgICB7ICJjZG1zZyIsICAgICAgIFhBX0NETVMsIENNX0FSR3xDTV9JTlYg fSwKLSNpZmRlZiBLVUkKLSAgICB7ICJjaGFuZ2VkaW0iLCAgIFhBX0NIR0QsIENNX1BSRSB9LAot I2VuZGlmIC8qIEtVSSAqLwotI2lmbmRlZiBOT0NTRVRTCi0gICAgeyAiY2hhcnNldCIsICAgICBY QV9DU0VULCBDTV9BUkd8Q01fUFJFIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotI2lmZGVmIElL U0RCCi0gICAgeyAiZGF0YWJhc2UiLCAgICBYQV9EQkFTLCBDTV9BUkd8Q01fUFJFIH0sCi0gICAg eyAiZGJmaWxlIiwgICAgICBYQV9EQkZJLCBDTV9BUkd8Q01fUFJFIH0sCi0jZW5kaWYgLyogSUtT REIgKi8KLSNpZmRlZiBLVUkKLSAgICB7ICJmYWNlbmFtZSIsICAgIFhBX0ZOQU0sIENNX0FSR3xD TV9QUkV8Q01fSU5WIH0sCi0gICAgeyAiZm9udG5hbWUiLCAgICBYQV9GTkFNLCBDTV9BUkd8Q01f UFJFIH0sCi0gICAgeyAiZm9udHNpemUiLCAgICBYQV9GU0laLCBDTV9BUkd8Q01fUFJFIH0sCi0j ZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIE5FV0ZUUAotICAgIHsgImZ0 cCIsICAgICAgICAgWEFfRlRQLCAgQ01fQVJHIH0sCi0jZW5kaWYgLyogTkVXRlRQICovCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgeyAiaGVp Z2h0IiwgICAgICBYQV9ST1dTLCBDTV9BUkd8Q01fUFJFIH0sCi0jZW5kaWYgLyogT1MyICovCi0j ZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIHsgImhlbHAiLCAgICAgICAgWEFfSEVMUCwgMCB9LAot I2lmbmRlZiBOT0hFTFAKLSAgICB7ICJoZWxwZmlsZSIsICAgIFhBX0hFRkksIENNX0FSRyB9LAot I2VuZGlmIC8qIE5PSEVMUCAqLwotI2lmZGVmIENLX0xPR0lOCi0gICAgeyAiaW5pdGZpbGUiLCAg ICBYQV9BTkZJLCBDTV9BUkd8Q01fUFJFIH0sCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNpZmRl ZiBPUzIKLSAgICB7ICJsb2NrZG93biIsICAgIFhBX0xPQ0ssIENNX1BSRSB9LAotI2lmZGVmIEtV SQotICAgIHsgIm1heGltaXplIiwgICAgWEFfV01BWCwgIENNX1BSRSB9LAotICAgIHsgIm1pbmlt aXplIiwgICAgWEFfV01JTiwgIENNX1BSRSB9LAotICAgIHsgIm5vYmFycyIsICAgICAgWEFfTk9C QVIsIENNX1BSRSB9LAotICAgIHsgIm5vY2xvc2UiICwgICAgWEFfTk9DTE9TRSwgQ01fUFJFIH0s Ci0jZW5kaWYgLyogS1VJICovCi0gICAgeyAibm9lc2NhcGUiLCAgICBYQV9OT0VTQ0FQRSwgQ01f UFJFIH0sCi0jZW5kaWYgLyogT1MyICovCi0gICAgeyAibm9pbnRlcnJ1cHRzIixYQV9OT0lOLCBD TV9QUkUgfSwKLSNpZmRlZiBLVUkKLSAgICB7ICJub21lbnViYXIiLCAgIFhBX05PTU4sIENNX1BS RSB9LAotI2VuZGlmIC8qIEtVSSAqLwotICAgIHsgIm5vcGVybXMiLCAgICAgWEFfTlBSTSwgMCB9 LAotI2lmbmRlZiBOT1BVU0gKLSAgICB7ICJub3B1c2giLCAgICAgIFhBX05PUFVTSCwgQ01fUFJF IH0sCi0jZW5kaWYgLyogTk9QVVNIICovCi0jaWZkZWYgT1MyCi0gICAgeyAibm9zY3JvbGwiLCAg ICBYQV9OT1NDUk9MTCwgQ01fUFJFIH0sCi0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgS1VJCi0g ICAgeyAibm9zdGF0dXNiYXIiLCBYQV9OT1NCLCBDTV9QUkUgfSwKLSAgICB7ICJub3Rvb2xiYXIi LCAgIFhBX05PVEIsIENNX1BSRSB9LAotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENPTU1FTlQK LSAgICB7ICJwYXNzd29yZCIsICAgIFhBX1BBU1MsIENNX0FSR3xDTV9JTlYgfSwKLSNlbmRpZiAv KiBDT01NRU5UICovCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZm5kZWYgTk9YRkVSCi0jaWZkZWYgQ0tf UEVSTQotICAgIHsgInBlcm1pc3Npb25zIiwgWEFfUEVSTSwgQ01fQVJHfENNX1BSRSB9LAotICAg IHsgInBlcm1zIiwgICAgICAgWEFfUEVSTSwgQ01fQVJHfENNX1BSRXxDTV9JTlYgfSwKLSNlbmRp ZiAvKiBDS19QRVJNICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZkZWYgVU5JWAotICAgIHsg InByaXZpZCIsICAgICAgWEFfUFJJViwgQ01fQVJHfENNX1BSRSB9LAotI2VuZGlmIC8qIFVOSVgg Ki8KLSNpZm5kZWYgTk9MT0NBTAotI2lmbmRlZiBOT0NTRVRTCi0gICAgeyAicmNoYXJzZXQiLCAg ICBYQV9DU0VULCBDTV9BUkd8Q01fUFJFfENNX0lOViB9LAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8K LSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgVU5JWAotICAgIHsgInJvb3QiLCAgICAgICAg WEFfUk9PVCwgQ01fQVJHfENNX1BSRSB9LAotI2Vsc2UgLyogVU5JWCAqLwotI2lmZGVmIENLUk9P VAotICAgIHsgInJvb3QiLCAgICAgICAgWEFfUk9PVCwgQ01fQVJHfENNX1BSRSB9LAotI2VuZGlm IC8qIENLUk9PVCAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNpZmRlZiBLVUkKLSAgICB7ICJzY2Fs ZWZvbnQiLCAgIFhBX1NDQUxFLCBDTV9QUkUgfSwKLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBD T01NRU5UCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgIHsgInNzaCIsICAgICAgICAgWEFfU1NILCAg Q01fQVJHIH0sCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSNpZmRlZiBDS1NZU0xPRwotICAgIHsgInN5c2xvZyIsICAgICAgWEFfU1lTTCwgQ01fQVJHfENN X1BSRSB9LAotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBD T01NRU5UCi0jaWZkZWYgVE5DT0RFCi0gICAgeyAidGVsbmV0IiwgICAgICBYQV9URUwsICBDTV9B UkcgfSwKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgeyAi dGVybXR5cGUiLCAgICBYQV9URVJNLCBDTV9BUkd8Q01fUFJFIH0sCi0jZW5kaWYgLyogTk9MT0NB TCAqLwotICAgIHsgInRpbWVvdXQiLCAgICAgWEFfVElNTywgQ01fQVJHfENNX1BSRSB9LAotI2lm bmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgeyAidGl0bGUiLCAgICAgICBYQV9USVRMLCBD TV9BUkcgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBVTklYCi0gICAgeyAidW5idWZmZXJl ZCIsICBYQV9VTkJVRiwgMCB9LAotI2VuZGlmCS8qIFVOSVggKi8KLSNpZm5kZWYgTk9TUEwKLSAg ICB7ICJ1c2VyIiwgICAgICAgIFhBX1VTRVIsIENNX0FSRyB9LAotI2VuZGlmIC8qIE5PU1BMICov Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIHsgInVzZXJmaWxlIiwgICAgWEFfVVNGSSwgQ01f QVJHfENNX1BSRSB9LAotICAgIHsgInZlcnNpb24iLCAgICAgWEFfVkVSUywgMCB9LAotI2lmbmRl ZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgeyAid2lkdGgiLCAgICAgICBYQV9DT0xTLCBDTV9B Ukd8Q01fUFJFIH0sCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lm ZGVmIENLV1RNUAotICAgIHsgInd0bXBmaWxlIiwgICAgWEFfV1RGSSwgQ01fQVJHfENNX1BSRSB9 LAotICAgIHsgInd0bXBsb2ciLCAgICAgWEFfV1RNUCwgQ01fQVJHfENNX1BSRSB9LAotI2VuZGlm IC8qIENLV1RNUCAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgeyAieGZlcmZpbGUiLCAg ICBYQV9JS0ZJLCBDTV9BUkd8Q01fUFJFIH0sCi0gICAgeyAieGZlcmxvZyIsICAgICBYQV9JS0xH LCBDTV9BUkd8Q01fUFJFIH0sCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBLVUkKLSAgICB7ICJ4 cG9zIiwgICAgICAgIFhBX1hQT1MsIENNX0FSR3xDTV9QUkUgfSwKLSAgICB7ICJ5cG9zIiwgICAg ICAgIFhBX1lQT1MsIENNX0FSR3xDTV9QUkUgfSwKLSNlbmRpZiAvKiBLVUkgKi8KLSNlbmRpZiAv KiBOT0xPQ0FMICovCi0gICAgeyIiLCAwLCAwIH0KLX07Ci1pbnQgbnhhcmdzID0gc2l6ZW9mKHhh cmd0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFi IG9rdGFiW10gPSB7Ci0gICAgeyAiMCIsICAgICAwLCAwIH0sCi0gICAgeyAiMSIsICAgICAxLCAw IH0sCi0gICAgeyAiMiIsICAgICAyLCAwIH0sCi0gICAgeyAiMyIsICAgICAzLCAwIH0sCi0gICAg eyAiNCIsICAgICA0LCAwIH0sCi0gICAgeyAiNSIsICAgICA1LCAwIH0sCi0gICAgeyAiNiIsICAg ICA2LCAwIH0sCi0gICAgeyAiNyIsICAgICA3LCAwIH0sCi0gICAgeyAiOCIsICAgICA4LCAwIH0s Ci0gICAgeyAiOSIsICAgICA5LCAwIH0sCi0gICAgeyAiZmFsc2UiLCAwLCAwIH0sCi0gICAgeyAi bm8iLCAgICAwLCAwIH0sCi0gICAgeyAib2ZmIiwgICAwLCAwIH0sCi0gICAgeyAib2siLCAgICAx LCAwIH0sCi0gICAgeyAib24iLCAgICAxLCAwIH0sCi0gICAgeyAidHJ1ZSIsICAxLCAwIH0sCi0g ICAgeyAieWVzIiwgICAxLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5va3RhYiA9IHNpemVvZihva3Rh Yikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotCi0jZGVmaW5lIFhBUkdCVUZMIDMyCi0KLWNoYXIg KiB4b3B0aGxwW1hBX01BWCsxXTsgICAgICAgICAgICAgICAvKiBFeHRlbmRlZCBvcHRpb24gaGVs cCAqLwotY2hhciAqIHhhcmdobHBbWEFfTUFYKzFdOyAgICAgICAgICAgICAgIC8qIEV4dGVuZGVk IGFyZ3VtZW50IGZvciBvcHRpb24gKi8KLQotc3RhdGljIFZPSUQKLWluaXhvcHRobHAoKSB7Ci0g ICAgaW50IGksIGo7Ci0gICAgZm9yIChpID0gMDsgaSA8PSBYQV9NQVg7IGkrKykgeyAgICAgLyog SW5pdGlhbGl6ZSBhbGwgdG8gbnVsbCAqLwotICAgICAgICB4b3B0aGxwW2ldID0gTlVMTDsKLSAg ICAgICAgeGFyZ2hscFtpXSA9IE5VTEw7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBueGFy Z3M7IGkrKykgeyAgICAgIC8qIFRoZW4gZm9yIGVhY2ggZGVmaW5lZCBrZXl3b3JkICovCi0gICAg ICAgIGogPSB4YXJndGFiW2ldLmt3dmFsOyAgICAgICAgICAgLyogaW5kZXggYnkgYXNzb2NpYXRl ZCB2YWx1ZSAqLwotICAgICAgICBpZiAoaiA8IDAgfHwgaiA+IFhBX01BWCkKLSAgICAgICAgICBj b250aW51ZTsKLSAgICAgICAgc3dpdGNoIChqKSB7Ci0jaWZkZWYgQ0tfTE9HSU4KLSAgICAgICAg ICBjYXNlIFhBX0FOT046ICAgICAgICAgICAgICAgICAvKiAiLS1hbm9ueW1vdXMiICovCi0gICAg ICAgICAgICB4b3B0aGxwW2pdID0gIi0tYW5vbnltb3VzOntvbixvZmZ9IFtJS1NEIG9ubHldIjsK LSAgICAgICAgICAgIHhhcmdobHBbal0gPSAiV2hldGhlciB0byBhbGxvdyBhbm9ueW1vdXMgSUtT RCBsb2dpbnMiOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgVU5JWAotCSAgY2FzZSBYQV9Q UklWOgotICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLXByaXZpZDp7b24sb2ZmfSBbSUtTRCBv bmx5XSI7Ci0gICAgICAgICAgICB4YXJnaGxwW2pdID0gIldoZXRoZXIgdG8gYWxsb3cgcHJpdmls ZWdlZCBJRHMgdG8gbG9naW4gdG8gSUtTRCI7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAv KiBVTklYICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICAgICAgICBjYXNlIFhBX0JBRkk6 ICAgICAgICAgICAgICAgICAvKiAiLS1iYW5uZXJmaWxlIiAqLwotICAgICAgICAgICAgeG9wdGhs cFtqXSA9ICItLWJhbm5lcmZpbGU6PGZpbGVuYW1lPiI7Ci0gICAgICAgICAgICB4YXJnaGxwW2pd ID0gIkZpbGUgdG8gZGlzcGxheSB1cG9uIHN0YXJ0dXAgb3IgSUtTRCBsb2dpbiI7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFhBX0NERkk6ICAgICAgICAgICAgICAgICAvKiAi LS1jZGZpbGUiICovCi0gICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tY2RmaWxlOjxmaWxlbmFt ZT4iOwotICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJGaWxlIHRvIGRpc3BsYXkgd2hlbiBzZXJ2 ZXIgY2hhbmdlcyBkaXJlY3RvcnkiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz ZSBYQV9DRE1TOiAgICAgICAgICAgICAgICAgLyogIi0tY2RtZXNzYWdlIiAqLwotICAgICAgICAg ICAgeG9wdGhscFtqXSA9ICItLWNkbWVzc2FnZTp7b24sb2ZmfSI7Ci0gICAgICAgICAgICB4YXJn aGxwW2pdID0gIldoZXRoZXIgdG8gZGlzcGxheSBDRCBtZXNzYWdlIGZpbGUiOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBYQV9IRUxQOiAgICAgICAgICAgICAgICAgLyogIi0t aGVscCIgKi8KLSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1oZWxwIjsKLSAgICAgICAgICAg IHhhcmdobHBbal0gPSAiUHJpbnQgdGhpcyBoZWxwIHRleHQgYWJvdXQgZXh0ZW5kZWQgb3B0aW9u cyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFhBX0hFRkk6ICAgICAgICAg ICAgICAgICAvKiAiLS1oZWxwIiAqLwotICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLWhlbHBm aWxlOjxmaWxlbmFtZT4iOwotICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJGaWxlIGNvbnRhaW5p bmcgY3VzdG9tIGluZm8gZm9yIEhFTFAgY29tbWFuZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICBjYXNlIFhBX0lLRkk6ICAgICAgICAgICAgICAgICAvKiAiLS14ZmVyZmlsZSIgKi8K LSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS14ZmVyZmlsZTo8ZmlsZW5hbWU+IFtJS1NEIG9u bHldIjsKLSAgICAgICAgICAgIHhhcmdobHBbal0gPSAiTmFtZSBvZiBmdHBkLWxpa2UgbG9nZmls ZS4iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBYQV9JS0xHOiAgICAgICAg ICAgICAgICAgLyogIi0teGZlcmxvZyIgKi8KLSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS14 ZmVybG9nOntvbixvZmZ9IFtJS1NEIG9ubHldIjsKLSAgICAgICAgICAgIHhhcmdobHBbal0gPSAi V2hldGhlciB0byBrZWVwIGFuIGZ0cGQtbGlrZSBsb2dmaWxlLiI7Ci0gICAgICAgICAgICBicmVh azsKLSNpZmRlZiBDS19MT0dJTgotICAgICAgICAgIGNhc2UgWEFfQU5GSTogICAgICAgICAgICAg ICAgIC8qICItLWluaXRmaWxlIiAqLwotICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLWluaXRm aWxlOjxmaWxlbmFtZT4gW0lLU0Qgb25seV0iOwotICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJJ bml0aWFsaXphdGlvbiBmaWxlIGZvciBhbm9ueW1vdXMgdXNlcnMuIjsKLSAgICAgICAgICAgIGJy ZWFrOwotI2lmZGVmIENLX1BFUk0KLSAgICAgICAgICBjYXNlIFhBX1BFUk06ICAgICAgICAgICAg ICAgICAvKiAiLS1wZXJtaXNzaW9ucyIgKi8KLSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1w ZXJtaXNzaW9uczo8b2N0YWxudW0+IFtJS1NEIG9ubHldIjsKLSAgICAgICAgICAgIHhhcmdobHBb al0gPSAiUGVybWlzc2lvbnMgZm9yIGZpbGVzIHVwbG9hZGVkIGJ5IGFub255bW91cyB1c2Vycy4i OwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfUEVSTSAqLwotI2lmZGVmIFVOSVgK LSAgICAgICAgICBjYXNlIFhBX1JPT1Q6ICAgICAgICAgICAgICAgICAvKiAiLS1yb290IiAqLwot ICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLXJvb3Q6PGRpcmVjdG9yeT4gW0lLU0Qgb25seV0i OwotICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJGaWxlLXN5c3RlbSByb290IGZvciBhbm9ueW1v dXMgdXNlcnMuIjsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vsc2UgLyogVU5JWCAqLwotI2lmZGVm IENLUk9PVAotICAgICAgICAgIGNhc2UgWEFfUk9PVDogICAgICAgICAgICAgICAgIC8qICItLXJv b3QiICovCi0gICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tcm9vdDo8ZGlyZWN0b3J5PiBbSUtT RCBvbmx5XSI7Ci0gICAgICAgICAgICB4YXJnaGxwW2pdID0gIkZpbGUtc3lzdGVtIHJvb3QgZm9y IGFub255bW91cyB1c2Vycy4iOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tST09U ICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jaWZkZWYgQ0tT WVNMT0cKLSAgICAgICAgICBjYXNlIFhBX1NZU0w6ICAgICAgICAgICAgICAgICAvKiAiLS1zeXNs b2ciICovCi0gICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tc3lzbG9nOjxkaWdpdD4gW0lLU0Qg b25seV0iOwotICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJTeXNsb2cgcmVjb3JkaW5nIGxldmVs LCAwLTYuIjsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAg ICAgICAgY2FzZSBYQV9VU0ZJOiAgICAgICAgICAgICAgICAgLyogIi0tdXNlcmZpbGUiICovCi0g ICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tdXNlcmZpbGU6PGZpbGVuYW1lPiBbSUtTRCBvbmx5 XSI7Ci0gICAgICAgICAgICB4YXJnaGxwW2pdID0gIkZvcmJpZGRlbiB1c2VyIGZpbGUuIjsKLSAg ICAgICAgICAgIGJyZWFrOwotI2lmZGVmIENLV1RNUAotICAgICAgICAgIGNhc2UgWEFfV1RGSTog ICAgICAgICAgICAgICAgIC8qICItLXd0bXBmaWxlIiAqLwotICAgICAgICAgICAgeG9wdGhscFtq XSA9ICItLXd0bXBmaWxlOjxmaWxlbmFtZT4gW0lLU0Qgb25seV0iOwotICAgICAgICAgICAgeGFy Z2hscFtqXSA9ICJOYW1lIG9mIHd0bXAgbG9nZmlsZS4iOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSBYQV9XVE1QOiAgICAgICAgICAgICAgICAgLyogIi0td3RtcGxvZyIgKi8K LSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS13dG1wbG9nOntvbixvZmZ9IFtJS1NEIG9ubHld IjsKLSAgICAgICAgICAgIHhhcmdobHBbal0gPSAiV2hldGhlciB0byBrZWVwIGEgd3RtcCBsb2dm aWxlLiI7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS1dUTVAgKi8KLSNpZmRlZiBD S19MT0dJTgotICAgICAgICAgIGNhc2UgWEFfVElNTzogICAgICAgICAgICAgICAgIC8qICItLXRp bWVvdXQiICovCi0gICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tdGltZW91dDo8c2Vjb25kcz4g W0lLU0Qgb25seV0iOwotICAgICAgICAgICAgeGFyZ2hscFtqXSA9Ci0gIkhvdyBsb25nIHRvIHdh aXQgZm9yIGxvZ2luIGJlZm9yZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uLiI7Ci0gICAgICAgICAg ICBicmVhazsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgICAgICAgIGNhc2UgWEFfTk9JTjoK LSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1ub2ludGVycnVwdHMiOwotICAgICAgICAgICAg eGFyZ2hscFtqXSA9ICJEaXNhYmxlIGtleWJvYXJkIGludGVycnVwdHMuIjsKLSAgICAgICAgICAg IGJyZWFrOwotI2lmZGVmIFVOSVgKLSAgICAgICAgICBjYXNlIFhBX1VOQlVGOgotICAgICAgICAg ICAgeG9wdGhscFtqXSA9ICItLXVuYnVmZmVyZWQiOwotICAgICAgICAgICAgeGFyZ2hscFtqXSA9 ICJGb3JjZSB1bmJ1ZmZlcmVkIGNvbnNvbGUgaS9vLiI7Ci0gICAgICAgICAgICBicmVhazsKLSNl bmRpZgkvKiBVTklYICovCi0jaWZkZWYgSUtTREIKLSAgICAgICAgICBjYXNlIFhBX0RCQVM6Ci0g ICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tZGF0YWJhc2U6e29uLG9mZn0iOwotICAgICAgICAg ICAgeGFyZ2hscFtqXSA9ICJFbmFibGUvRGlzYWJsZSBJS1NEIGRhdGFiYXNlIChJS1NEIG9ubHkp IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgWEFfREJGSToKLSAgICAgICAg ICAgIHhvcHRobHBbal0gPSAiLS1kYmZpbGU6PGZpbGVuYW1lPiI7Ci0gICAgICAgICAgICB4YXJn aGxwW2pdID0gIlNwZWNpZnkgSUtTRCBkYXRhYmFzZSBmaWxlIChJS1NEIG9ubHkpIjsKLSAgICAg ICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIElLU0RCICovCi0jaWZkZWYgQ0tfUEVSTVMKLQkgIGNh c2UgWEFfTlBSTToKLSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1ub3Blcm1zIjsKLSAgICAg ICAgICAgIHhhcmdobHBbal0gPSAiRGlzYWJsZSBmaWxlLXRyYW5zZmVyIFBlcm1pc3Npb25zIGF0 dHJpYnV0ZS4iOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLSNp ZmRlZiBLVUkKLSAgICAgICAgICBjYXNlIFhBX0NIR0Q6Ci0JICAgIHhvcHRobHBbal0gPSAiLS1j aGFuZ2VkaW0iOwotCSAgICB4YXJnaGxwW2pdID0gIkNoYW5nZSBEaW1lbnNpb24gb24gV2luZG93 IFJlc2l6ZSI7Ci0gICAgICAgICAgY2FzZSBYQV9TQ0FMRToKLQkgICAgeG9wdGhscFtqXSA9ICIt LXNjYWxlZm9udCI7Ci0JICAgIHhhcmdobHBbal0gPSAiU2NhbGUgRm9udCBvbiBXaW5kb3cgUmVz aXplIjsKLSAgICAgICAgICBjYXNlIFhBX1dNQVg6Ci0JICAgIHhvcHRobHBbal0gPSAiLS1tYXhp bWl6ZSI7Ci0JICAgIHhhcmdobHBbal0gPSAic3RhcnQgSzk1RyB3aW5kb3cgbWF4aW1pemVkLiI7 Ci0JICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgWEFfV01JTjoKLQkgICAgeG9wdGhscFtqXSA9 ICItLW1pbmltaXplIjsKLQkgICAgeGFyZ2hscFtqXSA9ICJzdGFydCBLOTVHIHdpbmRvdyBtaW5p bWl6ZWQuIjsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIFhBX1hQT1M6Ci0JICAgIHhvcHRobHBbal0g PSAiLS14cG9zOm4iOwotCSAgICB4YXJnaGxwW2pdID0gIlgtY29vcmRpbmF0ZSBvZiB3aW5kb3cg cG9zaXRpb24gKG51bWJlcikuIjsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIFhBX1lQT1M6Ci0JICAg IHhvcHRobHBbal0gPSAiLS15cG9zOm4iOwotCSAgICB4YXJnaGxwW2pdID0gIlktY29vcmRpbmF0 ZSBvZiB3aW5kb3cgcG9zaXRpb24gKG51bWJlcikuIjsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIFhB X0ZOQU06Ci0JICAgIHhvcHRobHBbal0gPSAiLS1mb250bmFtZTpzIChvciAtLWZhY2VuYW1lOnMp IjsKLQkgICAgeGFyZ2hscFtqXSA9ICJGb250L3R5cGVmYWNlIG5hbWU6IHN0cmluZyB3aXRoIF8g cmVwbGFjaW5nIGJsYW5rLiI7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBYQV9GU0laOgotCSAgICB4 b3B0aGxwW2pdID0gIi0tZm9udHNpemU6biI7Ci0JICAgIHhhcmdobHBbal0gPSAiRm9udCBwb2lu dCBzaXplIChudW1iZXIpLiI7Ci0JICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgWEFfTk9NTjoK LSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1ub21lbnViYXIiOwotICAgICAgICAgICAgeGFy Z2hscFtqXSA9ICJObyBNZW51IEJhciI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj YXNlIFhBX05PVEI6Ci0gICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tbm90b29sYmFyIjsKLSAg ICAgICAgICAgIHhhcmdobHBbal0gPSAiTm8gVG9vbCBCYXIiOwotICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgY2FzZSBYQV9OT1NCOgotICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLW5v c3RhdHVzYmFyIjsKLSAgICAgICAgICAgIHhhcmdobHBbal0gPSAiTm8gU3RhdHVzIEJhciI7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFhBX05PQkFSOgotICAgICAgICAgICAg eG9wdGhscFtqXSA9ICItLW5vYmFycyI7Ci0gICAgICAgICAgICB4YXJnaGxwW2pdID0gIk5vIE1l bnUsIFN0YXR1cywgb3IgVG9vbCBCYXJzIjsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8q IEtVSSAqLwotI2lmbmRlZiBOT1BVU0gKLSAgICAgICAgICBjYXNlIFhBX05PUFVTSDoKLQkgICAg eG9wdGhscFtqXSA9ICItLW5vcHVzaCI7Ci0JICAgIHhhcmdobHBbal0gPSAiRGlzYWJsZSBleHRl cm5hbCBjb21tYW5kIGV4ZWN1dGlvbi4iOwotCSAgICBicmVhazsKLSNlbmRpZiAvKiBOT1BVU0gg Ki8KLSNpZmRlZiBPUzIKLSAgICAgICAgICBjYXNlIFhBX0xPQ0s6Ci0JICAgIHhvcHRobHBbal0g PSAiLS1sb2NrZG93biI7Ci0JICAgIHhhcmdobHBbal0gPSAiRW5hYmxlIGFsbCBsb2NrZG93biBv cHRpb25zLiI7Ci0JICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgWEFfTk9DTE9TRToKLSAgICAg ICAgICAgIHhvcHRobHBbal0gPSAiLS1ub2Nsb3NlIjsKLSAgICAgICAgICAgIHhhcmdobHBbal0g PSAiRGlzYWJsZSBDbG9zZSBXaW5kb3cgYW5kIE1lbnUgRXhpdC4iOwotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgY2FzZSBYQV9OT1NDUk9MTDoKLQkgICAgeG9wdGhscFtqXSA9ICItLW5v c2Nyb2xsIjsKLQkgICAgeGFyZ2hscFtqXSA9ICJEaXNhYmxlIHNjcm9sbGJhY2sgb3BlcmF0aW9u cy4iOwotCSAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFhBX05PRVNDQVBFOgotCSAgICB4b3B0 aGxwW2pdID0gIi0tbm9lc2NhcGUiOwotCSAgICB4YXJnaGxwW2pdID0gIkRpc2FibGUgZXNjYXBl IGZyb20gY29ubmVjdCBtb2RlLiI7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBYQV9ST1dTOgotCSAg ICB4b3B0aGxwW2pdID0gIi0taGVpZ2h0Om4iOwotCSAgICB4YXJnaGxwW2pdID0gIlNjcmVlbiBo ZWlnaHQgKG51bWJlciBvZiByb3dzKS4iOwotCSAgICBicmVhazsKLQkgIGNhc2UgWEFfQ09MUzoK LQkgICAgeG9wdGhscFtqXSA9ICItLXdpZHRoOm4iOwotCSAgICB4YXJnaGxwW2pdID0gIlNjcmVl biB3aWR0aCAobnVtYmVyIG9mIGNvbHVtbnMpLiI7Ci0JICAgIGJyZWFrOwotICAgICAgICAgIGNh c2UgWEFfVElUTDoKLSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS10aXRsZTpzdHJpbmciOwot ICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJXaW5kb3cgVGl0bGUuIjsKLSAgICAgICAgICAgIGJy ZWFrOwotI2VuZGlmIC8qIE9TMiAqLwotCSAgY2FzZSBYQV9DU0VUOgotCSAgICB4b3B0aGxwW2pd ID0gIi0tcmNoYXJzZXQ6bmFtZSI7Ci0JICAgIHhhcmdobHBbal0gPSAiTmFtZSBvZiByZW1vdGUg dGVybWluYWwgY2hhcmFjdGVyIHNldC4iOwotCSAgICBicmVhazsKLQkgIGNhc2UgWEFfVEVSTToK LQkgICAgeG9wdGhscFtqXSA9ICItLXRlcm10eXBlOm5hbWUiOwotI2lmZGVmIE9TMgotCSAgICB4 YXJnaGxwW2pdID0gIkNob29zZSB0ZXJtaW5hbCBlbXVsYXRpb24uIjsKLSNlbHNlCi0JICAgIHhh cmdobHBbal0gPSAiQ2hvb3NlIHRlcm1pbmFsIHR5cGUuIjsKLSNlbmRpZiAvKiBPUzIgKi8KLQkg ICAgYnJlYWs7Ci0JICBjYXNlIFhBX1VTRVI6Ci0JICAgIHhvcHRobHBbal0gPSAiLS11c2VyOm5h bWUiOwotI2lmbmRlZiBORVRDT05OCi0JICAgIHhhcmdobHBbal0gPSAiVXNlcm5hbWUgKGZvciBu ZXR3b3JrIGxvZ2luKSI7Ci0jZWxzZQotCSAgICB4YXJnaGxwW2pdID0gIlVzZXJuYW1lLiI7Ci0j ZW5kaWYgLyogTkVUQ09OTiAqLwotCSAgICBicmVhazsKLSAgICAgICB9Ci0gICAgfQotfQotCi1W T0lECi1pbmlvcHRobHAoKSB7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IDEyODsg aSsrKSB7Ci0gICAgICAgIG9wdGFjdFtpXSA9IDA7Ci0gICAgICAgIHN3aXRjaChpKSB7Ci0jaWZk ZWYgT1MyCi0gICAgICAgICAgY2FzZSAnIyc6ICAgICAgICAgICAgICAgICAgICAgLyogSzk1IFN0 YXJ0dXAgRmxhZ3MgKi8KLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJLZXJtaXQgOTUgU3RhcnR1 cCBGbGFncyI7Ci0gICAgICAgICAgICBhcmdobHBbaV0gPSAiXG4iXAotICAgICAgICAgICAgICAi ICAgMSAtIHR1cm4gb2ZmIFdpbjk1IHNwZWNpYWwgZml4ZXNcbiJcCi0gICAgICAgICAgICAgICIg ICAyIC0gZG8gbm90IGxvYWQgb3B0aW9uYWwgbmV0d29yayBkbGxzXG4iXAotICAgICAgICAgICAg ICAiICAgNCAtIGRvIG5vdCBsb2FkIG9wdGlvbmFsIHRhcGkgZGxsc1xuIlwKLSAgICAgICAgICAg ICAgIiAgIDggLSBkbyBub3QgbG9hZCBvcHRpb25hbCBrZXJiZXJvcyBkbGxzXG4iXAotICAgICAg ICAgICAgICAiICAxNiAtIGRvIG5vdCBsb2FkIG9wdGlvbmFsIHptb2RlbSBkbGxzXG4iXAotICAg ICAgICAgICAgICAiICAzMiAtIHVzZSBzdGRpbiBmb3IgaW5wdXQgaW5zdGVhZCBvZiB0aGUgY29u c29sZVxuIlwKLSAgICAgICAgICAgICAgIiAgNjQgLSB1c2Ugc3Rkb3V0IGZvciBvdXRwdXQgaW5z dGVhZCBvZiB0aGUgY29uc29sZVxuIlwKLSAgICAgICAgICAgICAgIiAxMjggLSBkbyBub3QgdGVy bWluYXRlIHByb2Nlc3MgaW4gcmVzcG9uc2UgdG8gU2Vzc2lvbiBMb2dvZmYiOwotICAgICAgICAg ICAgYnJlYWs7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgY2FzZSAnMCc6ICAgICAgICAg ICAgICAgICAgICAgLyogSW4gdGhlIG1pZGRsZSAqLwotICAgICAgICAgICAgb3B0aGxwW2ldID0K LSAgICAgICAgICAgICAgIjEwMCUgdHJhbnNwYXJlbnQgQ09OTkVDVCBtb2RlIGZvciBcImluLXRo ZS1taWRkbGVcIiBvcGVyYXRpb24iOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSAg ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAnOCc6Ci0gICAgICAgICAgICBvcHRo bHBbaV0gPSAiQ29ubmVjdGlvbiBpcyA4LWJpdCBjbGVhbiI7Ci0gICAgICAgICAgICBhcmdobHBb aV0gPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBORVdGVFAKLSAgICAgICAg ICBjYXNlICc5JzoKLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJNYWtlIGEgY29ubmVjdGlvbiB0 byBhbiBGVFAgc2VydmVyIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJJUC1hZGRyZXNzLW9y LWhvc3RuYW1lWzpvcHRpb25hbC1UQ1AtcG9ydF0iOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5k aWYgLyogTkVXRlRQICovCi0KLSNpZmRlZiBJS1NECi0gICAgICAgICAgY2FzZSAnQSc6Ci0gICAg ICAgICAgICBvcHRobHBbaV0gPSAiS2VybWl0IGlzIHRvIGJlIHN0YXJ0ZWQgYXMgYW4gSW50ZXJu ZXQgc2VydmljZSI7Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICIgIHNvY2tl dCBoYW5kbGUgb2YgaW5jb21pbmcgY29ubmVjdGlvbiI7Ci0jZWxzZSAvKiBOVCAqLwotICAgICAg ICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgYnJl YWs7Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAgIGNhc2UgJ0InOiBvcHRobHBbaV0gPQot CSAgIktlcm1pdCBpcyBydW5uaW5nIGluIEJhdGNoIG9yIEJhY2tncm91bmQgKG5vIGNvbnRyb2xs aW5nIHRlcm1pbmFsKSI7Ci0gICAgICAgICAgICBicmVhazsKLSNpZm5kZWYgTk9TUEwKLSAgICAg ICAgICBjYXNlICdDJzoKLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJJbnRlcmFjdGl2ZS1tb2Rl IENvbW1hbmRzIHRvIGJlIGV4ZWN1dGVkIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJDb21t YW5kcyBzZXBhcmF0ZWQgYnkgY29tbWFzLCBsaXN0IGluIGRvdWJsZXF1b3RlcyI7Ci0gICAgICAg ICAgICBicmVhazsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgIGNhc2UgJ0QnOgotICAg ICAgICAgICAgb3B0aGxwW2ldID0gIkRlbGF5IGJlZm9yZSBzdGFydGluZyB0byBzZW5kIjsKLSAg ICAgICAgICAgIGFyZ2hscFtpXSA9ICJOdW1iZXIgb2Ygc2Vjb25kcyI7Ci0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICBjYXNlICdFJzoKLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJFeGl0 IGF1dG9tYXRpY2FsbHkgd2hlbiBjb25uZWN0aW9uIGNsb3NlcyI7Ci0gICAgICAgICAgICBhcmdo bHBbaV0gPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgVENQU09DS0VUCi0gICAg ICAgICAgY2FzZSAnRic6Ci0gICAgICAgICAgICBvcHRobHBbaV0gPSAiVXNlIGFuIGV4aXN0aW5n IFRDUCBjb25uZWN0aW9uIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJOdW1lcmljIGZpbGUg ZGVzY3JpcHRvciBvZiBvcGVuIFRDUCBjb25uZWN0aW9uIjsKLSAgICAgICAgICAgIGJyZWFrOwot I2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotICAgICAgICAgIGNhc2UgJ0cnOgotICAgICAgICAgICAg b3B0aGxwW2ldID0gIkdFVCBmcm9tIHNlcnZlciwgc2VuZCB0byBzdGFuZGFyZCBvdXRwdXQiOwot ICAgICAgICAgICAgYXJnaGxwW2ldID0gIlJlbW90ZSBmaWxlIHNwZWNpZmljYXRpb24iOwotICAg ICAgICAgICAgb3B0YWN0W2ldID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh c2UgJ0gnOgotICAgICAgICAgICAgb3B0aGxwW2ldID0gIlN1cHByZXNzIHByb2dyYW0gc3RhcnR1 cCBIZXJhbGQgYW5kIGdyZWV0aW5nIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdJJzoKLSAgICAgICAgICAgIG9wdGhs cFtpXSA9ICJDb25uZWN0aW9uIGlzIHJlbGlhYmxlLCBzdHJlYW1pbmcgaXMgYWxsb3dlZCI7Ci0g ICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYg VENQU09DS0VUCi0gICAgICAgICAgY2FzZSAnSic6Ci0gICAgICAgICAgICBvcHRobHBbaV0gPSAi J0JlIGxpa2UgVGVsbmV0JyI7Ci0gICAgICAgICAgICBhcmdobHBbaV0gPSAiSVAgaG9zdG5hbWUv YWRkcmVzcyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IHNlcnZpY2UiOwotICAgICAgICAgICAgYnJl YWs7Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0gICAgICAgICAgY2FzZSAnTCc6Ci0gICAgICAg ICAgICBvcHRobHBbaV0gPSAiUmVjdXJzaXZlIGRpcmVjdG9yeSBkZXNjZW50IGZvciBmaWxlcyBp biAtcyBvcHRpb24iOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIGNhc2UgJ00nOgotICAgICAgICAgICAgb3B0aGxwW2ldID0gIk15 IHVzZXIgbmFtZSAoZm9yIHVzZSB3aXRoIFRlbG5ldCwgUmxvZ2luLCBldGMpIjsKLSAgICAgICAg ICAgIGFyZ2hscFtpXSA9ICJVc2VybmFtZSBzdHJpbmciOwotICAgICAgICAgICAgYnJlYWs7Ci0j aWZkZWYgTkVUQklPUwotICAgICAgICAgIGNhc2UgJ04nOgotICAgICAgICAgICAgb3B0aGxwW2ld ID0gIk5FVEJJT1MgYWRhcHRlciBudW1iZXIiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gIk51 bWJlciI7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBORVRCSU9TICovCi0gICAgICAg ICAgY2FzZSAnTyc6ICAgICAgICAgICAgICAgICAgICAgLyogQmUgYSBzZXJ2ZXIgZm9yIE9uZSBj b21tYW5kIG9ubHkgKi8KLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJCZSBhIHNlcnZlciBmb3Ig T25lIGNvbW1hbmQgb25seSI7Ci0gICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOwotICAgICAg ICAgICAgb3B0YWN0W2ldID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug J1AnOgotICAgICAgICAgICAgb3B0aGxwW2ldID0gIkRvbid0IGNvbnZlcnQgZmlsZSAoUGF0aCkg bmFtZXMiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgIGNhc2UgJ1EnOgotICAgICAgICAgICAgb3B0aGxwW2ldID0gIlF1aWNrIChG QVNUKSBLZXJtaXQgcHJvdG9jb2wgc2V0dGluZ3MiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0g TlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ1InOiAgICAgICAgICAg ICAgICAgICAgIC8qIFJlbW90ZS1Pbmx5ICovCi0gICAgICAgICAgICBvcHRobHBbaV0gPSAiUmVt b3RlLW9ubHkgKG1ha2VzIElGIFJFTU9URSB0cnVlKSI7Ci0gICAgICAgICAgICBhcmdobHBbaV0g PSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnUyc6ICAgICAgICAg ICAgICAgICAgICAgLyogIlN0YXkiIC0gZW50ZXIgaW50ZXJhY3RpdmUgKi8KLSAgICAgICAgICAg IG9wdGhscFtpXSA9ICJTdGF5IChlbnRlciBjb21tYW5kIHBhcnNlciBhZnRlciBhY3Rpb24gb3B0 aW9ucykiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgIGNhc2UgJ1QnOiAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQgZmlsZSB0 cmFuc2ZlciBtb2RlICovCi0gICAgICAgICAgICBvcHRobHBbaV0gPSAiVHJhbnNmZXIgZmlsZXMg aW4gVGV4dCBtb2RlIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7Ci0gICAgICAgICAg ICBicmVhazsKLSNpZmRlZiBBTllYMjUKLSAgICAgICAgICBjYXNlICdVJzogICAgICAgICAgICAg ICAgICAgICAvKiBYLjI1IGNhbGwgdXNlciBkYXRhICovCi0gICAgICAgICAgICBvcHRobHBbaV0g PSAiWC4yNSBjYWxsIFVzZXIgZGF0YSI7Ci0gICAgICAgICAgICBhcmdobHBbaV0gPSAiQ2FsbC11 c2VyLWRhdGEgc3RyaW5nIjsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIEFOWVgyNSAq LwotICAgICAgICAgIGNhc2UgJ1YnOiAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGF1dG9tYXRp YyBmaWxldHlwZSBzd2l0Y2hpbmcgKi8KLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJEaXNhYmxl IGF1dG9tYXRpYyBwZXItZmlsZSB0ZXh0L2JpbmFyeSBzd2l0Y2hpbmciOwotICAgICAgICAgICAg YXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIENPTU1FTlQKLSNp ZmRlZiBPUzIKLSAgICAgICAgICBjYXNlICdXJzogICAgICAgICAgICAgICAgICAgICAvKiBXaW4z MiBXaW5kb3cgSGFuZGxlICovCi0gICAgICAgICAgICBvcHRobHBbaV0gPSAiIjsKLSAgICAgICAg ICAgIGFyZ2hscFtpXSA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYgQU5ZWDI1Ci0gICAgICAgICAgY2FzZSAn WCc6ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEhPU1QgdG8gWC4yNSBhZGRyZXNzICovCi0g ICAgICAgICAgICBvcHRobHBbaV0gPSAiTWFrZSBhbiBYLjI1IGNvbm5lY3Rpb24iOwotICAgICAg ICAgICAgYXJnaGxwW2ldID0gIlguMjUgb3IgWC4xMjEgYWRkcmVzcyI7Ci0gICAgICAgICAgICBi cmVhazsKLSNlbmRpZiAvKiBBTllYMjUgKi8KLSAgICAgICAgICBjYXNlICdZJzogICAgICAgICAg ICAgICAgICAgICAvKiBObyBpbml0aWFsaXphdGlvbiBmaWxlICovCi0gICAgICAgICAgICBvcHRo bHBbaV0gPSAiU2tpcCBpbml0aWFsaXphdGlvbiBmaWxlIjsKLSAgICAgICAgICAgIGFyZ2hscFtp XSA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSNpZmRlZiBBTllYMjUKLSAgICAgICAgICBj YXNlICdaJzogICAgICAgICAgICAgICAgICAgICAvKiBTRVQgSE9TVCB0byBYLjI1IGZpbGUgZGVz Y3JpcHRvciAqLwotICAgICAgICAgICAgb3B0aGxwW2ldID0gIk1ha2UgYW4gWC4yNSBjb25uZWN0 aW9uIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJOdW1lcmljIGZpbGUgZGVzY3JpcHRvciBv ZiBvcGVuIFguMjUgY29ubmVjdGlvbiI7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBB TllYMjUgKi8KLSAgICAgICAgICBjYXNlICdhJzogICAgICAgICAgICAgICAgICAgICAvKiBhcy1u YW1lICovCi0gICAgICAgICAgICBvcHRobHBbaV0gPSAiQXMtbmFtZSBmb3IgZmlsZShzKSBpbiAt cywgLXIsIG9yIC1nIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJBcy1uYW1lIHN0cmluZyAo YWx0ZXJuYXRpdmUgZmlsZW5hbWUpIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh c2UgJ2InOiAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBiaXRzLXBlci1zZWNvbmQgZm9yIHNl cmlhbCAqLwotICAgICAgICAgICAgb3B0aGxwW2ldID0gIlNwZWVkIGZvciBzZXJpYWwgZGV2aWNl IjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJOdW1lcmljIEJpdHMgcGVyIHNlY29uZCI7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdjJzogICAgICAgICAgICAgICAgICAg ICAvKiBDb25uZWN0IGJlZm9yZSAqLwotICAgICAgICAgICAgb3B0YWN0W2ldID0gMTsKLSAgICAg ICAgICAgIG9wdGhscFtpXSA9ICJDT05ORUNUIGJlZm9yZSB0cmFuc2ZlcnJpbmcgZmlsZXMiOwot ICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgIGNhc2UgJ2QnOiAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCi0gICAgICAgICAg ICBvcHRobHBbaV0gPSAiQ3JlYXRlIGRlYnVnLmxvZyBmaWxlIChhIHNlY29uZCAtZCBhZGRzIHRp bWVzdGFtcHMpIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7Ci0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICBjYXNlICdlJzogICAgICAgICAgICAgICAgICAgICAvKiBFeHRlbmRl ZCBwYWNrZXQgbGVuZ3RoICovCi0gICAgICAgICAgICBvcHRobHBbaV0gPSAiTWF4aW11bSBsZW5n dGggZm9yIGluY29taW5nIGZpbGUtdHJhbnNmZXIgcGFja2V0cyI7Ci0gICAgICAgICAgICBhcmdo bHBbaV0gPSAiTGVuZ3RoIGluIGJ5dGVzIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg IGNhc2UgJ2YnOiAgICAgICAgICAgICAgICAgICAgIC8qIGZpbmlzaCAqLwotICAgICAgICAgICAg b3B0YWN0W2ldID0gMTsKLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJTZW5kIEZpbmlzaCBjb21t YW5kIHRvIGEgS2VybWl0IHNlcnZlciI7Ci0gICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOwot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnZyc6ICAgICAgICAgICAgICAgICAg ICAgLyogZ2V0ICovCi0gICAgICAgICAgICBvcHRhY3RbaV0gPSAxOwotICAgICAgICAgICAgb3B0 aGxwW2ldID0gIkdFVCBmaWxlKHMpIGZyb20gYSBLZXJtaXQgc2VydmVyIjsKLSAgICAgICAgICAg IGFyZ2hscFtpXSA9ICJSZW1vdGUgZmlsZSBzcGVjaWZpY2F0aW9uIjsKLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgIGNhc2UgJ2gnOiAgICAgICAgICAgICAgICAgICAgIC8qIGhlbHAgKi8K LSAgICAgICAgICAgIG9wdGFjdFtpXSA9IDE7Ci0jaWZkZWYgT1MyT1JVTklYCi0gICAgICAgICAg ICBvcHRobHBbaV0gPQotCSAgICAgICJQcmludCB0aGlzIG1lc3NhZ2UgKHBpcGUgdGhydSAnbW9y ZScgdG8gcHJldmVudCBzY3JvbGxpbmcpIjsKLSNlbHNlCi0JICAgICAgIlByaW50IHRoaXMgbWVz c2FnZSI7Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0gICAgICAgICAgICBhcmdobHBbaV0gPSBO VUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnaSc6ICAgICAgICAgICAg ICAgICAgICAgLyogVHJlYXQgZmlsZXMgYXMgYmluYXJ5ICovCi0gICAgICAgICAgICBvcHRobHBb aV0gPSJUcmFuc2ZlciBmaWxlcyBpbiBiaW5hcnkgbW9kZSI7Ci0gICAgICAgICAgICBhcmdobHBb aV0gPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgVENQU09DS0VUCi0gICAgICAg ICAgY2FzZSAnaic6ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEhPU1QgKFRDUC9JUCBzb2Nr ZXQpICovCi0gICAgICAgICAgICBvcHRobHBbaV0gPSAiTWFrZSBhIFRDUCBjb25uZWN0aW9uIjsK LSAgICAgICAgICAgIGFyZ2hscFtpXSA9Ci0JICAgICAgIlRDUCBob3N0IG5hbWUvYWRkcmVzcyBh bmQgb3B0aW9uYWwgc2VydmljZSBuYW1lIG9yIG51bWJlciI7Ci0gICAgICAgICAgICBicmVhazsK LSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSAgICAgICAgICBjYXNlICdrJzogICAgICAgICAgICAg ICAgICAgICAvKiByZWNlaXZlIHRvIHN0ZG91dCAqLwotICAgICAgICAgICAgb3B0YWN0W2ldID0g MTsKLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJSRUNFSVZFIGZpbGUocykgdG8gc3RhbmRhcmQg b3V0cHV0IjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7Ci0gICAgICAgICAgICBicmVh azsKLSAgICAgICAgICBjYXNlICdsJzogICAgICAgICAgICAgICAgICAgICAvKiBTRVQgTElORSAq LwotICAgICAgICAgICAgb3B0aGxwW2ldID0gIk1ha2UgY29ubmVjdGlvbiBvbiBzZXJpYWwgY29t bXVuaWNhdGlvbnMgZGV2aWNlIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJTZXJpYWwgZGV2 aWNlIG5hbWUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnbSc6ICAgICAg ICAgICAgICAgICAgICAgLyogTW9kZW0gdHlwZSAqLwotICAgICAgICAgICAgb3B0aGxwW2ldID0g Ik1vZGVtIHR5cGUgZm9yIHVzZSB3aXRoIC1sIGRldmljZSI7Ci0gICAgICAgICAgICBhcmdobHBb aV0gPSAiTW9kZW0gbmFtZSBhcyBpbiBTRVQgTU9ERU0gVFlQRSBjb21tYW5kIjsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ24nOiAgICAgICAgICAgICAgICAgICAgIC8qIGNv bm5lY3QgYWZ0ZXIgKi8KLSAgICAgICAgICAgIG9wdGFjdFtpXSA9IDE7Ci0gICAgICAgICAgICBv cHRobHBbaV0gPSAiQ09OTkVDVCBhZnRlciB0cmFuc2ZlcnJpbmcgZmlsZXMiOwotICAgICAgICAg ICAgYXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIEFOWVgyNQot ICAgICAgICAgIGNhc2UgJ28nOiAgICAgICAgICAgICAgICAgICAgIC8qIFguMjUgY2xvc2VkIHVz ZXIgZ3JvdXAgKi8KLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJYLjI1IGNsb3NlZCB1c2VyIGdy b3VwIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJVc2VyIGdyb3VwIHN0cmluZyI7Ci0gICAg ICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBBTllYMjUgKi8KLSAgICAgICAgICBjYXNlICdwJzog ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgUEFSSVRZICovCi0gICAgICAgICAgICBvcHRobHBb aV0gPSAiUGFyaXR5IjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJPbmUgb2YgdGhlIGZvbGxv d2luZzogZXZlbiwgb2RkLCBtYXJrLCBub25lLCBzcGFjZSI7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgICBjYXNlICdxJzogICAgICAgICAgICAgICAgICAgICAvKiBRdWlldCAqLwotICAg ICAgICAgICAgb3B0aGxwW2ldID0gIlF1aWV0IChzdXBwcmVzcyBtb3N0IG1lc3NhZ2VzKSI7Ci0g ICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgY2FzZSAncic6ICAgICAgICAgICAgICAgICAgICAgLyogcmVjZWl2ZSAqLwotICAgICAgICAg ICAgb3B0YWN0W2ldID0gMTsKLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJSRUNFSVZFIGZpbGUo cykiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgIGNhc2UgJ3MnOiAgICAgICAgICAgICAgICAgICAgIC8qIHNlbmQgKi8KLSAgICAg ICAgICAgIG9wdGFjdFtpXSA9IDE7Ci0gICAgICAgICAgICBvcHRobHBbaV0gPSAiU0VORCBmaWxl KHMpIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJPbmUgb3IgbW9yZSBmaWxlIHNwZWNpZmlj YXRpb25zIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ3QnOiAgICAgICAg ICAgICAgICAgICAgIC8qIExpbmUgdHVybmFyb3VuZCBoYW5kc2hha2UgKi8KLSAgICAgICAgICAg IG9wdGhscFtpXSA9ICJYT04gVHVybmFyb3VuZCBjaGFyYWN0ZXIgZm9yIGhhbGYtZHVwbGV4IGNv bm5lY3Rpb25zIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7Ci0gICAgICAgICAgICBi cmVhazsKLSNpZmRlZiBBTllYMjUKLSAgICAgICAgICBjYXNlICd1JzogICAgICAgICAgICAgICAg ICAgICAvKiBYLjI1IHJldmVyc2UgY2hhcmdlIGNhbGwgKi8KLSAgICAgICAgICAgIG9wdGhscFtp XSA9ICJYLjI1IHJldmVyc2UgY2hhcmdlIGNhbGwiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0g TlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIEFOWVgyNSAqLwotICAgICAgICAg IGNhc2UgJ3YnOiAgICAgICAgICAgICAgICAgICAgIC8qIFZpbmRvdyBzaXplICovCi0gICAgICAg ICAgICBvcHRobHBbaV0gPSAiV2luZG93IHNpemUiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0g Ik51bWJlciwgMSB0byAzMiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICd3 JzogICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZW92ZXIgKi8KLSAgICAgICAgICAgIG9wdGhs cFtpXSA9ICJJbmNvbWluZyBmaWxlcyBXcml0ZSBvdmVyIGV4aXN0aW5nIGZpbGVzIjsKLSAgICAg ICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj YXNlICd4JzogICAgICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgKi8KLSAgICAgICAgICAgIG9w dGFjdFtpXSA9IDE7Ci0gICAgICAgICAgICBvcHRobHBbaV0gPSAiQmUgYSBLZXJtaXQgU0VSVkVS IjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICBjYXNlICd5JzogICAgICAgICAgICAgICAgICAgICAvKiBBbHRlcm5hdGUgaW5pdC1m aWxlIG5hbWUgKi8KLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJBbHRlcm5hdGl2ZSBpbml0aWFs aXphdGlvbiBmaWxlIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJGaWxlIHNwZWNpZmljYXRp b24iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAneic6ICAgICAgICAgICAg ICAgICAgICAgLyogTm90IGJhY2tncm91bmQgKi8KLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJG b3JjZSBmb3JlZ3JvdW5kIGJlaGF2aW9yIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7 Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgb3B0 aGxwW2ldID0gTlVMTDsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7Ci0gICAgICAgIH0K LSAgICB9Ci0gICAgaW5peG9wdGhscCgpOwotfQotCi1pbnQKLWRveGFyZyhzLHByZSkgY2hhciAq KiBzOyBpbnQgcHJlOyB7Ci0jaWZkZWYgSUtTRAotI2lmZGVmIENLX0xPR0lOCi0gICAgZXh0ZXJu IGludCBja3hzeXNsb2csIGNreHd0bXAsIGNreGFub247Ci0jaWZkZWYgVU5JWAotICAgIGV4dGVy biBpbnQgY2t4cHJpdjsKLSNlbmRpZiAvKiBVTklYICovCi0jaWZkZWYgQ0tfUEVSTVMKLSAgICBl eHRlcm4gaW50IGNreHBlcm1zOwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0gICAgZXh0ZXJuIGNo YXIgKiBhbm9uZmlsZSwgKiB1c2VyZmlsZSwgKiBhbm9ucm9vdDsKLSNlbmRpZiAvKiBDS19MT0dJ TiAqLwotI2lmZGVmIENLV1RNUAotICAgIGV4dGVybiBjaGFyICogd3RtcGZpbGU7Ci0jZW5kaWYg LyogQ0tXVE1QICovCi0jZW5kaWYgLyogSUtTRCAqLwotICAgIGV4dGVybiBpbnQgc3J2Y2Rtc2c7 Ci0gICAgZXh0ZXJuIGNoYXIgKiBjZG1zZ2ZpbGVbXSwgKiBjZG1zZ3N0cjsKLSAgICBjaGFyIHRt cGJ1ZltDS01BWFBBVEgrMV07Ci0KLSAgICBpbnQgaSwgeCwgeSwgeiwgaGF2ZWFyZyA9IDA7Ci0g ICAgY2hhciBidWZbWEFSR0JVRkxdLCBjLCAqIHA7Ci0KLSAgICBpZiAobnhhcmdzIDwgMSkKLSAg ICAgIHJldHVybigtMSk7Ci0KLSAgICBjID0gKigqcyArIDEpOyAgICAgICAgICAgICAgICAgICAg ICAvKiBIeXBoZW4gb3IgUGx1cyBzaWduICovCi0KLSAgICBwID0gKnMgKyAyOwotICAgIGZvciAo aSA9IDA7ICpwICYmIGkgPCBYQVJHQlVGTDsgaSsrKSB7Ci0gICAgICAgIGJ1ZltpXSA9ICpwKys7 Ci0gICAgICAgIGlmIChidWZbaV0gPT0gJz0nIHx8IGJ1ZltpXSA9PSAnOicpIHsKLSAgICAgICAg ICAgIGhhdmVhcmcgPSAxOwotICAgICAgICAgICAgYnVmW2ldID0gTlVMOwotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAoYnVmW2ldIDwgJyAnKSB7Ci0gICAgICAgICAgICBi dWZbaV0gPSBOVUw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBp ZiAoaSA+IFhBUkdCVUZMIC0gMSkKLSAgICAgIHJldHVybigtMSk7Ci0gICAgYnVmW2ldID0gTlVM OwotCi0gICAgeCA9IGxvb2t1cCh4YXJndGFiLGJ1ZixueGFyZ3MsJnopOyAgLyogTG9va3VwIHRo ZSBvcHRpb24ga2V5d29yZCAqLwotCi0gICAgaWYgKHggPCAwKSAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogT24gYW55IGtpbmQgb2YgZXJyb3IgKi8KLSAgICAgIHJldHVybigtMSk7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBmYWlsLiAqLwotCi0gICAgLyogSGFuZGxlIHByZXNjYW4gdmVy c3VzIHBvc3QtaW5pdGlhbGl6YXRpb24gZmlsZSAqLwotCi0gICAgaWYgKCgoeGFyZ3RhYlt6XS5m bGdzICYgQ01fUFJFKSB8fCAoYyA9PSAnKycpKSAmJiAhcHJlKQotICAgICAgcmV0dXJuKDApOwot ICAgIGVsc2UgaWYgKHByZSAmJiAhKHhhcmd0YWJbel0uZmxncyAmIENNX1BSRSkgJiYgKGMgIT0g JysnKSkKLSAgICAgIHJldHVybigwKTsKLQotICAgIC8qIEVuc3VyZSB0aGF0IGFyZ3VtZW50IGlz IGdpdmVuIGlmIGFuZCBvbmx5IGlmIHJlcXVpcmVkICovCi0KLSAgICBwID0gaGF2ZWFyZyA/ICpz ICsgaSArIDMgOiBOVUxMOwotCi0gICAgaWYgKCh4YXJndGFiW3pdLmZsZ3MgJiBDTV9BUkcpICYm ICFoYXZlYXJnKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBlbHNlIGlmICgoISh4YXJndGFiW3pd LmZsZ3MgJiBDTV9BUkcpKSAmJiBoYXZlYXJnKQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIHN3 aXRjaCAoeCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9LIHRvIHByb2Nlc3MgdGhpcyBv cHRpb24uLi4gKi8KLSNpZmRlZiBDS1NZU0xPRwotICAgICAgY2FzZSBYQV9TWVNMOiAgICAgICAg ICAgICAgICAgICAgIC8qIElLUzogU3lzbG9nIGxldmVsICovCi0gICAgICAgIHkgPSAwOwotICAg ICAgICBpZiAoaXNkaWdpdCgqcCkpIHsKLSAgICAgICAgICAgIHdoaWxlICgqcCkgewotICAgICAg ICAgICAgICAgIGlmICgqcCA8ICcwJyB8fCAqcCA+ICc5JykKLSAgICAgICAgICAgICAgICAgIHJl dHVybigtMSk7Ci0gICAgICAgICAgICAgICAgeSA9IHkgKiAxMCArICgqcCsrIC0gJzAnKTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHkgPSBsb29rdXAob2t0 YWIscCxub2t0YWIsJnopOwotICAgICAgICAgICAgaWYgKHkgPiAwKSB5ID0gU1lTTEdfREY7ICAg IC8qIFllcyA9IGRlZmF1bHQgbG9nZ2luZyBsZXZlbCAqLwotICAgICAgICB9Ci0jaWZuZGVmIFNZ U0xPR0xFVkVMCi0gICAgICAgIC8qIElmIHNwZWNpZmllZCBvbiBjYyBjb21tYW5kIGxpbmUsIHVz ZXIgY2FuJ3QgY2hhbmdlIGl0LiAqLwotICAgICAgICBpZiAoIWluc2VydmVyKSAgICAgICAgICAg ICAgICAgIC8qIERvbid0IGFsbG93IHZvbHVtaW5vdXMgc3lzbG9nZ2luZyAqLwotICAgICAgICAg IGlmICh5ID4gU1lTTEdfRkEpICAgICAgICAgICAgIC8qIGJ5IG9yZGluYXJ5IHVzZXJzLiAqLwot ICAgICAgICAgICAgeSA9IFNZU0xHX0ZBOwotI2VuZGlmIC8qIFNZU0xPR0xFVkVMICovCi0gICAg ICAgIGlmICh5IDwgMCkgcmV0dXJuKC0xKTsKLSNpZmRlZiBERUJVRwotICAgICAgICBpZiAoeSA+ PSBTWVNMR19EQikKLSAgICAgICAgICBpZiAoIWRlYmxvZykKLSAgICAgICAgICAgIGRlYmxvZyA9 IGRlYm9wbigiZGVidWcubG9nIiwwKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIFNZU0xP R0xFVkVMCi0gICAgICAgIC8qIElmIHNwZWNpZmllZCBvbiBjYyBjb21tYW5kIGxpbmUsIHVzZXIg Y2FuJ3QgY2hhbmdlIGl0LiAqLwotICAgICAgICB5ID0gU1lTTE9HTEVWRUw7Ci0jZW5kaWYgLyog U1lTTE9HTEVWRUwgKi8KLSAgICAgICAgY2t4c3lzbG9nID0geTsKLSAgICAgICAgLyogcHJpbnRm KCJja3hzeXNsb2c9JWRcbiIsY2t4c3lzbG9nKTsgKi8KLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYg LyogQ0tTWVNMT0cgKi8KLQotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgQ0tXVE1QCi0gICAgICBj YXNlIFhBX1dUTVA6ICAgICAgICAgICAgICAgICAgICAgLyogSUtTOiB3dG1wIGxvZyAqLwotICAg ICAgICB5ID0gbG9va3VwKG9rdGFiLHAsbm9rdGFiLCZ6KTsKLSAgICAgICAgaWYgKHkgPCAwKSBy ZXR1cm4oLTEpOwotICAgICAgICBja3h3dG1wID0geTsKLSAgICAgICAgLyogcHJpbnRmKCJja3h3 dG1wPSVkXG4iLGNreHd0bXApOyAqLwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBYQV9X VEZJOiAgICAgICAgICAgICAgICAgICAgIC8qIElLUzogd3RtcCBsb2dmaWxlICovCi0gICAgICAg IGlmICh6Zm5xZnAocCxDS01BWFBBVEgsdG1wYnVmKSkKLSAgICAgICAgICBwID0gdG1wYnVmOwot ICAgICAgICBtYWtlc3RyKCZ3dG1wZmlsZSxwKTsKLSAgICAgICAgLyogcHJpbnRmKCJ3dG1wZmls ZT0lc1xuIix3dG1wZmlsZSk7ICovCi0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLV1RNUCAq LwotCi0gICAgICBjYXNlIFhBX0FOT046ICAgICAgICAgICAgICAgICAgICAgLyogSUtTOiBBbm9u eW1vdXMgbG9naW4gYWxsb3dlZCAqLwotICAgICAgICB5ID0gbG9va3VwKG9rdGFiLHAsbm9rdGFi LCZ6KTsKLSAgICAgICAgaWYgKHkgPCAwKSByZXR1cm4oLTEpOwotICAgICAgICBja3hhbm9uID0g eTsKLSAgICAgICAgLyogcHJpbnRmKCJja3hhbm9uPSVkXG4iLGNreGFub24pOyAqLwotICAgICAg ICBicmVhazsKLQotI2lmZGVmIFVOSVgKLSAgICAgIGNhc2UgWEFfUFJJVjogICAgICAgICAgICAg ICAgICAgICAvKiBJS1M6IFByaXYnZCBsb2dpbiBhbGxvd2VkICovCi0gICAgICAgIHkgPSBsb29r dXAob2t0YWIscCxub2t0YWIsJnopOwotICAgICAgICBpZiAoeSA8IDApIHJldHVybigtMSk7Ci0g ICAgICAgIGNreHByaXYgPSB5OwotICAgICAgICAvKiBwcmludGYoImNreHByaXY9JWRcbiIsY2t4 cHJpdik7ICovCi0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmZGVmIENL X1BFUk1TCi0gICAgICBjYXNlIFhBX1BFUk06ICAgICAgICAgICAgICAgICAgICAgLyogSUtTOiBB bm9ueW1vdXMgVXBsb2FkIFBlcm1pc3Npb25zICovCi0gICAgICAgIHkgPSAwOwotICAgICAgICB3 aGlsZSAoKnApIHsKLSAgICAgICAgICAgIGlmICgqcCA8ICcwJyB8fCAqcCA+ICc3JykKLSAgICAg ICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIHkgPSB5ICogOCArICgqcCsrIC0gJzAn KTsKLSAgICAgICAgfQotICAgICAgICBja3hwZXJtcyA9IHk7Ci0gICAgICAgIC8qIHByaW50Zigi Y2t4cGVybXM9JTA0b1xuIixja3hwZXJtcyk7ICovCi0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8q IENLX1BFUk1TICovCi0KLSAgICAgIGNhc2UgWEFfQU5GSTogICAgICAgICAgICAgICAgICAgICAv KiBBbm9ueW1vdXMgaW5pdCBmaWxlICovCi0JaWYgKCFpc2Fic29sdXRlKHApKQotCSAgaWYgKHpm bnFmcChwLENLTUFYUEFUSCx0bXBidWYpKQotCSAgICBwID0gdG1wYnVmOwotICAgICAgICBtYWtl c3RyKCZhbm9uZmlsZSxwKTsKLSAgICAgICAgLyogcHJpbnRmKCJhbm9uZmlsZT0lc1xuIixhbm9u ZmlsZSk7ICovCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhBX1VTRkk6ICAgICAgICAg ICAgICAgICAgICAgLyogSUtTOiBGb3JiaWRkZW4gdXNlciBmaWxlICovCi0JaWYgKCFpc2Fic29s dXRlKHApKQotCSAgaWYgKHpmbnFmcChwLENLTUFYUEFUSCx0bXBidWYpKQotCSAgICBwID0gdG1w YnVmOwotICAgICAgICBtYWtlc3RyKCZ1c2VyZmlsZSxwKTsKLSAgICAgICAgLyogcHJpbnRmKCJ1 c2VyZmlsZT0lc1xuIix1c2VyZmlsZSk7ICovCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNl IFhBX1JPT1Q6ICAgICAgICAgICAgICAgICAgICAgLyogSUtTOiBBbm9ueW1vdXMgcm9vdCAqLwot CWlmICghaXNhYnNvbHV0ZShwKSkKLQkgIGlmICh6Zm5xZnAocCxDS01BWFBBVEgsdG1wYnVmKSkK LQkgICAgcCA9IHRtcGJ1ZjsKLSAgICAgICAgbWFrZXN0cigmYW5vbnJvb3QscCk7Ci0gICAgICAg IC8qIHByaW50ZigiYW5vbnJvb3Q9JXNcbiIsYW5vbnJvb3QpOyAqLwotICAgICAgICBicmVhazsK LSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCi0gICAgICBjYXNlIFhBX0NERkk6ICAgICAgICAgICAg ICAgICAgICAgLyogQ0QgZmlsZW5hbWUgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIC8qIERv IE5PVCBleHBhbmQgdGhpcyBvbmUhICovCi0gICAgICAgIGlmICh6Zm5xZnAocCxDS01BWFBBVEgs dG1wYnVmKSkKLSAgICAgICAgICBwID0gdG1wYnVmOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICAgICAgbWFrZWxpc3QocCxjZG1zZ2ZpbGUsMTYpOwotICAgICAgICBtYWtlc3RyKCZjZG1zZ3N0 cixwKTsKLSAgICAgICAgLyogcHJpbnRmKCJjZG1zZ3N0cj0lc1xuIixjZG1zZ3N0cik7ICovCi0g ICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhBX0NETVM6ICAgICAgICAgICAgICAgICAgICAg LyogQ0QgbWVzc2FnZXMgKi8KLSAgICAgICAgeSA9IGxvb2t1cChva3RhYixwLG5va3RhYiwmeik7 Ci0gICAgICAgIGlmICh5IDwgMCkgcmV0dXJuKC0xKTsKLSAgICAgICAgc3J2Y2Rtc2cgPSB5Owot ICAgICAgICAvKiBwcmludGYoInNydmNkbXNnPSVkXG4iLHNydmNkbXNnKTsgKi8KLSAgICAgICAg YnJlYWs7Ci0KLSNpZm5kZWYgTk9YRkVSCi0gICAgICBjYXNlIFhBX0lLTEc6ICAgICAgICAgICAg ICAgICAgICAgLyogVHJhbnNmZXIgbG9nIG9uL29mZiAqLwotICAgICAgICB5ID0gbG9va3VwKG9r dGFiLHAsbm9rdGFiLCZ6KTsKLSAgICAgICAgaWYgKHkgPCAwKSByZXR1cm4oLTEpOwotICAgICAg ICB4ZmVybG9nID0geTsKLSAgICAgICAgLyogcHJpbnRmKCJ4ZmVybG9nPSVkXG4iLHhmZXJsb2cp OyAqLwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBYQV9JS0ZJOiAgICAgICAgICAgICAg ICAgICAgIC8qIFRyYW5zZmVyIGxvZyBmaWxlICovCi0JaWYgKCFpc2Fic29sdXRlKHApKQotCSAg aWYgKHpmbnFmcChwLENLTUFYUEFUSCx0bXBidWYpKQotCSAgICBwID0gdG1wYnVmOwotICAgICAg ICBtYWtlc3RyKCZ4ZmVyZmlsZSxwKTsKLSAgICAgICAgeGZlcmxvZyA9IDE7Ci0gICAgICAgIC8q IHByaW50ZigieGZlcmZpbGU9JXNcbiIseGZlcmZpbGUpOyAqLwotICAgICAgICBicmVhazsKLQot ICAgICAgY2FzZSBYQV9CQUZJOiAgICAgICAgICAgICAgICAgICAgIC8qIElLUzogYmFubmVyIChn cmVldGluZykgZmlsZSAqLwotCWlmICghaXNhYnNvbHV0ZShwKSkKLQkgIGlmICh6Zm5xZnAocCxD S01BWFBBVEgsdG1wYnVmKSkKLQkgICAgcCA9IHRtcGJ1ZjsKLSAgICAgICAgbWFrZXN0cigmYmFu bmVyZmlsZSxwKTsKLSAgICAgICAgLyogcHJpbnRmKCJiYW5uZXJmaWxlPSVzXG4iLGJhbm5lcmZp bGUpOyAqLwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBO T0hFTFAKLSAgICAgIGNhc2UgWEFfSEVMUDogICAgICAgICAgICAgICAgICAgICAvKiBIZWxwICov Ci0gICAgICAgIC8qIHByaW50ZigiaGVscFxuIik7ICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkg PD0gWEFfTUFYOyBpKyspCi0gICAgICAgICAgaWYgKHhvcHRobHBbaV0pCi0gICAgICAgICAgICBw cmludGYoIiVzXG4gICAlc1xuXG4iLHhvcHRobHBbaV0seGFyZ2hscFtpXSk7Ci0gICAgICAgIGlm IChzdGF5ZmxnIHx8IHdoYXQgPT0gV19DT01NQU5EKQotICAgICAgICAgIGJyZWFrOwotICAgICAg ICBlbHNlCi0gICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCwtMSk7Ci0jZW5kaWYgLyogTk9IRUxQ ICovCi0KLSNpZm5kZWYgTk9IRUxQCi0gICAgICBjYXNlIFhBX0hFRkk6ICAgICAgICAgICAgICAg ICAgICAgLyogSUtTOiBjdXN0b20gaGVscCBmaWxlICovCi0JaWYgKCFpc2Fic29sdXRlKHApKQot CSAgaWYgKHpmbnFmcChwLENLTUFYUEFUSCx0bXBidWYpKQotCSAgICBwID0gdG1wYnVmOwotICAg ICAgICBtYWtlc3RyKCZoZWxwZmlsZSxwKTsKLSAgICAgICAgLyogcHJpbnRmKCJoZWxwZmlsZT0l c1xuIixoZWxwZmlsZSk7ICovCi0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PSEVMUCAqLwot Ci0jaWZkZWYgQ0tfTE9HSU4KLSAgICAgIGNhc2UgWEFfVElNTzoKLSAgICAgICAgaWYgKCFyZGln aXRzKHApKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIGxvZ2ludGltbyA9IGF0b2ko cCk7Ci0gICAgICAgIC8qIHByaW50ZigibG9naW50aW1vPSVkXG4iLHApOyAqLwotICAgICAgICBi cmVhazsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCi0gICAgICBjYXNlIFhBX05PSU46ICAgICAg ICAgICAgICAgICAgICAgLyogTm8gaW50ZXJydXB0cyAqLwotI2lmbmRlZiBOT0lDUAotICAgICAg ICBjbWRpbnQgPSAwOwotI2VuZGlmIC8qIE5PSUNQICovCi0JeHN1c3BlbmQgPSAwOwotICAgICAg ICBicmVhazsKLQotI2lmZGVmIFVOSVgKLSAgICAgIGNhc2UgWEFfVU5CVUY6CQkJLyogVW5idWZm ZXJlZCBjb25zb2xlIGkvbyovCi0JYnJlYWs7CQkJCS8qIFRoaXMgb25lIGlzIGhhbmRsZWQgaW4g Y2tjbWFpLmMgKi8KLSNlbmRpZgkvKiBVTklYICovCi0KLSNpZmRlZiBJS1NEQgotICAgICAgY2Fz ZSBYQV9EQkZJOiB7Ci0gICAgICAgICAgZXh0ZXJuIGNoYXIgKiBkYmRpciwgKiBkYmZpbGU7Ci0g ICAgICAgICAgZXh0ZXJuIGludCBkYmVuYWJsZWQ7Ci0gICAgICAgICAgc3RydWN0IHpmbmZwICog eno7Ci0gICAgICAgICAgaWYgKCh6eiA9IHpmbnFmcChwLENLTUFYUEFUSCx0bXBidWYpKSkgewot CSAgICAgIGNoYXIgKnMsICpzMiA9IE5VTEw7Ci0gICAgICAgICAgICAgIG1ha2VzdHIoJmRiZGly LHp6LT5mcGF0aCk7Ci0gICAgICAgICAgICAgIG1ha2VzdHIoJmRiZmlsZSx6ei0+ZnBhdGgpOwot CSAgICAgIGZvciAocyA9IGRiZGlyOyAqczsgcysrKSB7Ci0JCSAgaWYgKElTRElSU0VQKCpzKSkK LQkJICAgIHMyID0gcysxOwotCSAgICAgIH0KLQkgICAgICBpZiAoczIpICpzMiA9IE5VTDsKLQkg ICAgICBkZWJ1ZyhGMTEwLCJYQV9EQkZJIGRiZGlyIixkYmRpciwwKTsKLQkgICAgICBkZWJ1ZyhG MTEwLCJYQV9EQkZJIGRiZmlsZSIsZGJmaWxlLDApOwotICAgICAgICAgICAgICBkYmVuYWJsZWQg PSAxOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2Ug WEFfREJBUzogewotICAgICAgICAgIGV4dGVybiBpbnQgZGJlbmFibGVkOwotICAgICAgICAgIHkg PSBsb29rdXAob2t0YWIscCxub2t0YWIsJnopOwotICAgICAgICAgIGlmICh5IDwgMCkgcmV0dXJu KC0xKTsKLSAgICAgICAgICBkYmVuYWJsZWQgPSB5OwotICAgICAgICAgIGJyZWFrOwotICAgICAg fQotI2VuZGlmIC8qIElLU0RCICovCi0KLSAgICAgIGNhc2UgWEFfVkVSUzogewotCSAgZXh0ZXJu IGNoYXIgKiBja19zX3ZlciwgKiBja19zX3h2ZXI7Ci0JICBwcmludGYoIiVzIixja19zX3Zlcik7 Ci0JICBpZiAoKmNrX3NfeHZlcikKLQkgICAgcHJpbnRmKCIgWyVzXVxuIixja19zX3h2ZXIpOwot CSAgcHJpbnRmKCJcbiIpOwotCSAgaWYgKHN0YXlmbGcgfHwgd2hhdCA9PSBXX0NPTU1BTkQpCi0J ICAgIGJyZWFrOwotCSAgZWxzZQotCSAgICBkb2V4aXQoR09PRF9FWElULC0xKTsKLSAgICAgIH0K LSNpZm5kZWYgTk9YRkVSCi0jaWZkZWYgQ0tfUEVSTVMKLSAgICAgIGNhc2UgWEFfTlBSTTogewot CSAgZXh0ZXJuIGludCBhdGxwcmksIGF0bHBybywgYXRncHJpLCBhdGdwcm87Ci0JICBhdGxwcmkg PSAwOwotCSAgYXRscHJvID0gMDsKLQkgIGF0Z3ByaSA9IDA7Ci0JICBhdGdwcm8gPSAwOwotCSAg YnJlYWs7Ci0gICAgICB9Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotI2lmZGVmIEtVSQotICAgICAgY2FzZSBYQV9TQ0FMRToKLSAgICAgICAga3VpX2luaXQu cmVzaXplTW9kZSA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBYQV9DSEdEOgotICAg ICAgICBrdWlfaW5pdC5yZXNpemVNb2RlID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl IFhBX1dNQVg6Ci0gICAgICAgIGt1aV9pbml0Lm5DbWRTaG93ID0gU1dfTUFYSU1JWkU7Ci0gICAg ICAgIGJyZWFrOwotICAgICAgY2FzZSBYQV9XTUlOOgotICAgICAgICBrdWlfaW5pdC5uQ21kU2hv dyA9IFNXX01JTklNSVpFOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBYQV9YUE9TOgot ICAgICAgICBpZiAoIXJkaWdpdHMocCkpCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLQlrdWlfaW5p dC5wb3NfaW5pdCsrOwotCWt1aV9pbml0LnBvc194ID0gYXRvaShwKTsKLSAgICAgICAgYnJlYWs7 Ci0KLSAgICAgIGNhc2UgWEFfWVBPUzoKLSAgICAgICAgaWYgKCFyZGlnaXRzKHApKQotICAgICAg ICAgIHJldHVybigtMSk7Ci0Ja3VpX2luaXQucG9zX2luaXQrKzsKLQlrdWlfaW5pdC5wb3NfeSA9 IGF0b2kocCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhBX0ZOQU06IHsKLQkgIGV4 dGVybiBzdHJ1Y3QgX2t1aV9pbml0IGt1aV9pbml0OwotCSAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIg KiB0ZXJtX2ZvbnQ7Ci0JICBleHRlcm4gc3RydWN0IGtleXRhYiAqIF90ZXJtX2ZvbnQ7Ci0JICBl eHRlcm4gaW50IHR0X2ZvbnQsIG50ZXJtZm9udDsKLQkgIGludCB4LCB6OwotCSAgaWYgKG50ZXJt Zm9udCA9PSAwKQotCSAgICBCdWlsZEZvbnRUYWJsZSgmdGVybV9mb250LCAmX3Rlcm1fZm9udCwg Jm50ZXJtZm9udCk7Ci0JICBpZiAoISh0ZXJtX2ZvbnQgJiYgX3Rlcm1fZm9udCAmJiBudGVybWZv bnQgPiAwKSkgewotICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGNvbnN0cnVjdCBGb250 IEZhY2VuYW1lIFRhYmxlXG4iKTsKLQkgICAgcmV0dXJuKDApOwotICAgICAgICAgIH0KLQkgIHgg PSBsb29rdXAodGVybV9mb250LHAsbnRlcm1mb250LCZ6KTsKLQkgIGlmICh4IDwgMCkgewotICAg ICAgICAgICAgICB4ID0gbG9va3VwKF90ZXJtX2ZvbnQscCxudGVybWZvbnQsJnopOwotICAgICAg ICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQg Rm9udCBGYWNlbmFtZTogJXNcbiIscCk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0g ICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0JICB0dF9mb250ID0geDsKLQkgIGt1aV9pbml0 LmZhY2VfaW5pdCsrOwotCSAgbWFrZXN0cigma3VpX2luaXQuZmFjZW5hbWUsdGVybV9mb250W3pd Lmt3ZCk7Ci0JICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgWEFfRlNJWjogewotCSAgZXh0 ZXJuIHN0cnVjdCBfa3VpX2luaXQga3VpX2luaXQ7Ci0JICBleHRlcm4gaW50IHR0X2ZvbnRfc2l6 ZTsKLSAgICAgICAgICBjaGFyICogcTsKLSAgICAgICAgICBpbnQgaGFsZnBvaW50ID0gMDsKLQot CSAga3VpX2luaXQuZm9udF9pbml0Kys7Ci0gICAgICAgICAgZm9yICggcT1wIDsgKnEgOyBxKysg KSB7Ci0gICAgICAgICAgICAgIGlmICggKnEgPT0gJy4nKSB7Ci0gICAgICAgICAgICAgICAgICAq cSsrID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAgIGlmICghcmRpZ2l0cyhxKSkKLSAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICAgICAgaWYgKCEqcSB8fCBh dG9pKHEpID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgIC8qIG5vIGhhbGZw b2ludCAqLwotICAgICAgICAgICAgICAgICAgaGFsZnBvaW50ID0gMTsKLSAgICAgICAgICAgICAg ICAgIGlmIChhdG9pKHEpICE9IDUpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/IEZvbnQgc2l6 ZXMgYXJlIHRyZWF0ZWQgaW4gaGFsZi1wb2ludCBpbmNyZW1lbnRzXG4iKTsKLSAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCSAgaWYgKCFyZGln aXRzKHApKQotCSAgICByZXR1cm4oLTEpOwotCSAgdHRfZm9udF9zaXplID0ga3VpX2luaXQuZm9u dF9zaXplID0gMiAqIGF0b2kocCkgKyBoYWxmcG9pbnQ7Ci0JICBicmVhazsKLSAgICAgIH0KLSAg ICAgIGNhc2UgWEFfTk9NTjoKLSAgICAgICAga3VpX2luaXQubm9tZW51YmFyID0gMTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgICBjYXNlIFhBX05PVEI6Ci0gICAgICAgIGt1aV9pbml0Lm5vdG9vbGJh ciA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBYQV9OT1NCOgotICAgICAgICBrdWlf aW5pdC5ub3N0YXR1c2JhciA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBYQV9OT0JB UjoKLSAgICAgICAga3VpX2luaXQubm9tZW51YmFyID0gMTsKLSAgICAgICAga3VpX2luaXQubm90 b29sYmFyID0gMTsKLSAgICAgICAga3VpX2luaXQubm9zdGF0dXNiYXIgPSAxOwotICAgICAgICBi cmVhazsKLSNlbmRpZiAvKiBLVUkgKi8KLQotI2lmbmRlZiBOT1BVU0gKLSAgICBjYXNlIFhBX05P UFVTSDoKLSAgICAgICAgbm9wdXNoID0gMTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9Q VVNIICovCi0jaWZkZWYgT1MyCi0gICAgY2FzZSBYQV9MT0NLOgotICAgICAgICB0dF9zY3JvbGwg PSAwOwotICAgICAgICB0dF9lc2NhcGUgPSAwOwotI2lmbmRlZiBOT1BVU0gKLSAgICAgICAgbm9w dXNoID0gMTsKLSNlbmRpZgotI2lmZGVmIEtVSQotICAgICAgICBrdWlfaW5pdC5ub21lbnViYXIg PSAxOwotICAgICAgICBrdWlfaW5pdC5ub3Rvb2xiYXIgPSAxOwotICAgICAgICBrdWlfaW5pdC5u b3N0YXR1c2JhciA9IDE7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0jaWZkZWYgS1VJCi0gICAg ICBjYXNlIFhBX05PQ0xPU0U6Ci0gICAgICAgIGt1aV9pbml0Lm5vY2xvc2UgPSAxOwotICAgICAg ICBicmVhazsKLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgIGNhc2UgWEFfTk9TQ1JPTEw6Ci0gICAg ICAgIHR0X3Njcm9sbCA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBYQV9OT0VTQ0FQ RToKLSAgICAgICAgdHRfZXNjYXBlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogT1My ICovCi0KLSNpZm5kZWYgTk9MT0NBTAotICAgICAgY2FzZSBYQV9URVJNOiB7CQkJLyogVGVybWlu YWwgdHlwZSAqLwotICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIHR0eXB0YWJbXTsKLSAg ICAgICAgICBleHRlcm4gaW50IG50dHlwOwotI2lmZGVmIFROQ09ERQotCSAgZXh0ZXJuIGNoYXIg KiB0bl90ZXJtOwotI2VuZGlmIC8qIFROQ09ERSAqLwotI2lmZGVmIE9TMgotCSAgaW50IHgsIHo7 Ci0JICBleHRlcm4gaW50IHR0X3R5cGUsIHR0X3R5cGVfbW9kZTsKLQkgIHggPSBsb29rdXAodHR5 cHRhYixwLG50dHlwLCZ6KTsKLQkgIGlmICh4IDwgMCkKLQkgICAgcmV0dXJuKC0xKTsKLQkgIHR0 X3R5cGVfbW9kZSA9IHR0X3R5cGUgPSB4OwotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIFROQ09E RQotCSAgbWFrZXN0cigmdG5fdGVybSxwKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQkgIGJyZWFr OwotICAgICAgfQotICAgICAgY2FzZSBYQV9DU0VUOiB7CQkJLyogUmVtb3RlIENoYXJhY3RlciBT ZXQgKi8KLSNpZm5kZWYgTk9DU0VUUwotI2lmZGVmIENLT1VOSQotICAgICAgICAgIGV4dGVybiBz dHJ1Y3Qga2V5dGFiIHR4cnRhYltdOwotICAgICAgICAgIGV4dGVybiBpbnQgbnR4cnRhYjsKLSAg ICAgICAgICB4ID0gbG9va3VwKHR4cnRhYixwLG50eHJ0YWIsJnopOwotI2Vsc2UgLyogQ0tPVU5J ICovCi0gICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdHRjc3RhYltdOwotICAgICAgICAg IGV4dGVybiBpbnQgbnRlcm1jOwotICAgICAgICAgIHggPSBsb29rdXAodHRjc3RhYixwLG50ZXJt Yywmeik7Ci0jZW5kaWYgLyogQ0tPVU5JICovCi0JICBpZiAoeCA8IDApCi0JICAgIHJldHVybigt MSk7Ci0gICAgICAgICAgc2V0cmVtY2hhcnNldCh6LDQgLyogVFRfR1JfQUxMIChpbiBja3V1czcu YykgKi8pOwotI2Vsc2UgLyogTk9DU0VUUyAqLwotICAgICAgICAgIHJldHVybigtMSk7Ci0jZW5k aWYgLyogTk9DU0VUUyAqLwotCSAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFhBX1JPV1M6 IHsJCQkvKiBTY3JlZW4gcm93cyAoaGVpZ2h0KSAqLwotI2lmZGVmIE9TMgotICAgICAgICAgIGV4 dGVybiBpbnQgcm93X2luaXQ7Ci0jZWxzZSAvKiBPUzIgKi8KLQkgIGV4dGVybiBpbnQgdHRfcm93 czsKLSNlbmRpZiAvKiBPUzIgKi8KLQkgIGlmICghcmRpZ2l0cyhwKSkKLQkgICAgcmV0dXJuKC0x KTsKLSNpZmRlZiBPUzIKLQkgIGlmICghb3MyX3NldHRlcm1oZWlnaHQoYXRvaShwKSkpCi0JICAg IHJldHVybigtMSk7Ci0gICAgICAgICAgcm93X2luaXQrKzsKLSNlbHNlICAvKiBOb3QgT1MvMiAq LwotCSAgdHRfcm93cyA9IGF0b2kocCk7Ci0jZW5kaWYgLyogT1MyICovCi0JICBicmVhazsKLSAg ICAgIH0KLSAgICAgIGNhc2UgWEFfQ09MUzogewkJCS8qIFNjcmVlbiBjb2x1bW5zICh3aWR0aCkg Ki8KLSNpZmRlZiBPUzIKLSAgICAgICAgICBleHRlcm4gaW50IGNvbF9pbml0OwotI2Vsc2UgLyog T1MyICovCi0JICBleHRlcm4gaW50IHR0X2NvbHM7Ci0jZW5kaWYgLyogT1MyICovCi0JICBpZiAo IXJkaWdpdHMocCkpCi0JICAgIHJldHVybigtMSk7Ci0jaWZkZWYgT1MyCi0JICBpZiAoIW9zMl9z ZXR0ZXJtd2lkdGgoYXRvaShwKSkpCi0JICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgY29sX2lu aXQrKzsKLSNlbHNlICAvKiBOb3QgT1MvMiAqLwotCSAgdHRfY29scyA9IGF0b2kocCk7Ci0jZW5k aWYgLyogT1MyICovCi0JICBicmVhazsKLSAgICAgIH0KLSNpZmRlZiBPUzIKLSAgICBjYXNlIFhB X1RJVEw6IHsKLSAgICAgICAgZXh0ZXJuIGNoYXIgdXNlcnRpdGxlW107Ci0gICAgICAgIGNrc3Ry bmNweSh1c2VydGl0bGUscCw2NCk7Ci0gICAgICAgIG9zMnNldHRpdGxlKCIiLDEpOwotICAgICAg ICBicmVhazsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBDT01NRU5UCQkJCS8q IFRPIEJFIEZJTExFRCBJTiAuLi4gKi8KLSAgICAgIGNhc2UgWEFfVEVMOgkJCS8qIE1ha2UgYSBU ZWxuZXQgY29ubmVjdGlvbiAqLwotICAgICAgY2FzZSBYQV9GVFA6CQkJLyogTWFrZSBhbiBGVFAg Y29ubmVjdGlvbiAqLwotICAgICAgY2FzZSBYQV9TU0g6CQkJLyogTWFrZSBhbiBTU0ggY29ubmVj dGlvbiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgICAgY2Fz ZSBYQV9VU0VSOgkJCS8qIFVzZXJuYW1lIGZvciBsb2dpbiAqLwotI2lmZGVmIElLU0QKLQlpZiAo IWluc2VydmVyKQotI2VuZGlmIC8qIElLU0QgKi8KLQl7Ci0JICAgIGNrc3RybmNweSh1aWRidWYs Knhhcmd2LFVJREJVRkxFTik7Ci0JICAgIGhhdmVmdHB1aWQgPSAxOwotCX0KLQlicmVhazsKLSNl bmRpZiAvKiBOT1NQTCAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotICAgICAgZGVmYXVsdDoK LSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0jaWZkZWYg SUtTRAotI2lmZGVmIElLU0RDT05GCi0jZGVmaW5lIElLU19BTk9OIDAKLSNkZWZpbmUgSUtTX0JB RkkgMQotI2RlZmluZSBJS1NfQ0RGSSAyCi0jZGVmaW5lIElLU19DRE1TIDMKLSNkZWZpbmUgSUtT X0hFRkkgNAotI2RlZmluZSBJS1NfQU5GSSA1Ci0jZGVmaW5lIElLU19VU0ZJIDYKLSNkZWZpbmUg SUtTX0lLTEcgNwotI2RlZmluZSBJS1NfSUtGSSA4Ci0jZGVmaW5lIElLU19EQkFTIDkKLSNkZWZp bmUgSUtTX0RCRkkgMTAKLSNkZWZpbmUgSUtTX1BFUk0gMTEKLSNkZWZpbmUgSUtTX1BSSVYgMTIK LSNkZWZpbmUgSUtTX1JPT1QgMTMKLSNkZWZpbmUgSUtTX1RJTU8gMTQKLSNkZWZpbmUgSUtTX1dU RkkgMTUKLSNkZWZpbmUgSUtTX1dUTVAgMTYKLSNkZWZpbmUgSUtTX1NSVlIgMTcKLSNkZWZpbmUg SUtTX05PSU4gMTgKLSNkZWZpbmUgSUtTX0lOSVQgMTkKLSNkZWZpbmUgSUtTX0FOTEcgMjAKLSNk ZWZpbmUgSUtTX0FDQ1QgMjEKLSNkZWZpbmUgSUtTX05URE9NIDIyCi0jZGVmaW5lIElLU19TWVNM IDIzCi0KLSNpZmRlZiBDS19MT0dJTgotc3RhdGljIHN0cnVjdCBrZXl0YWIgaWtzYW50YWJbXSA9 IHsKLSNpZmRlZiBPUzIKLSAgICB7ICJhY2NvdW50IiwgICAgIElLU19BQ0NULCAwIH0sCi0jZW5k aWYgLyogT1MyICovCi0gICAgeyAiaW5pdGZpbGUiLCAgICBJS1NfQU5GSSwgMCB9LAotICAgIHsg ImxvZ2luIiwgICAgICAgSUtTX0FOTEcsIDAgfSwKLSNpZmRlZiBVTklYCi0gICAgeyAicm9vdCIs ICAgICAgICBJS1NfUk9PVCwgMCB9LAotI2Vsc2UKLSNpZmRlZiBDS1JPT1QKLSAgICB7ICJyb290 IiwgICAgICAgIElLU19ST09ULCAwIH0sCi0jZW5kaWYgLyogQ0tST09UICovCi0jZW5kaWYgLyog VU5JWCAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmlrc2FudGFiID0gc2l6 ZW9mKGlrc2FudGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7Ci0jZW5kaWYgLyogQ0tf TE9HSU4gKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgaWtzdGFiW10gPSB7Ci0jaWZkZWYgQ0tf TE9HSU4KLSAgICB7ICJhbm9ueW1vdXMiLCAgIElLU19BTk9OLCAwIH0sCi0jZW5kaWYgLyogQ0tf TE9HSU4gKi8KLSAgICB7ICJiYW5uZXJmaWxlIiwgIElLU19CQUZJLCAwIH0sCi0gICAgeyAiY2Rm aWxlIiwgICAgICBJS1NfQ0RGSSwgMCB9LAotICAgIHsgImNkbWVzc2FnZSIsICAgSUtTX0NETVMs IDAgfSwKLSAgICB7ICJjZG1zZyIsICAgICAgIElLU19DRE1TLCBDTV9JTlYgfSwKLSNpZmRlZiBJ S1NEQgotICAgIHsgImRhdGFiYXNlIiwgICAgSUtTX0RCQVMsIDAgfSwKLSAgICB7ICJkYmZpbGUi LCAgICAgIElLU19EQkZJLCAwIH0sCi0jZW5kaWYgLyogSUtTREIgKi8KLSNpZmRlZiBDS19MT0dJ TgotI2lmZGVmIE5UCi0gICAgeyAiZGVmYXVsdC1kb21haW4iLCBJS1NfTlRET00sIDAgfSwKLSNl bmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jaWZuZGVmIE5PSEVMUAotICAg IHsgImhlbHBmaWxlIiwgICAgSUtTX0hFRkksIDAgfSwKLSNlbmRpZiAvKiBOT0hFTFAgKi8KLSAg ICB7ICJpbml0ZmlsZSIsICAgIElLU19JTklULCAwIH0sCi0gICAgeyAibm8taW5pdGZpbGUiLCBJ S1NfTk9JTiwgMCB9LAotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgQ0tfUEVSTQotICAgIHsgInBl cm1pc3Npb25zIiwgSUtTX1BFUk0sIDAgfSwKLSAgICB7ICJwZXJtcyIsICAgICAgIElLU19QRVJN LCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBDS19QRVJNICovCi0jaWZkZWYgVU5JWAotICAgIHsgInBy aXZpZCIsICAgICAgSUtTX1BSSVYsIDAgfSwKLSNlbmRpZiAvKiBVTklYICovCi0gICAgeyAic2Vy dmVyLW9ubHkiLCBJS1NfU1JWUiwgMCB9LAotI2lmZGVmIENLU1lTTE9HCi0gICAgeyAic3lzbG9n IiwgICAgICBJS1NfU1lTTCwgMCB9LAotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgeyAidGlt ZW91dCIsICAgICBJS1NfVElNTywgMCB9LAotICAgIHsgInVzZXJmaWxlIiwgICAgSUtTX1VTRkks IDAgfSwKLSNpZmRlZiBDS1dUTVAKLSAgICB7ICJ3dG1wZmlsZSIsICAgIElLU19XVEZJLCAwIH0s Ci0gICAgeyAid3RtcGxvZyIsICAgICBJS1NfV1RNUCwgMCB9LAotI2VuZGlmIC8qIENLV1RNUCAq LwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgeyAieGZlcmZpbGUiLCAgICBJS1NfSUtGSSwg MCB9LAotICAgIHsgInhmZXJsb2ciLCAgICAgSUtTX0lLTEcsIDAgfQotfTsKLXN0YXRpYyBpbnQg bmlrc3RhYiA9IHNpemVvZihpa3N0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotI2VuZGlm IC8qIElLU0RDT05GICovCi0KLSNpZm5kZWYgTk9JQ1AKLWludAotc2V0aWtzKCkgewkJCQkvKiBT RVQgSUtTICovCi0jaWZkZWYgSUtTRENPTkYKLSNpZmRlZiBDS19MT0dJTgotICAgIGV4dGVybiBp bnQgY2t4c3lzbG9nLCBja3h3dG1wLCBja3hhbm9uOwotI2lmZGVmIFVOSVgKLSAgICBleHRlcm4g aW50IGNreHByaXY7Ci0jZW5kaWYgLyogVU5JWCAqLwotI2lmZGVmIENLX1BFUk1TCi0gICAgZXh0 ZXJuIGludCBja3hwZXJtczsKLSNlbmRpZiAvKiBDS19QRVJNUyAqLwotICAgIGV4dGVybiBjaGFy ICogYW5vbmZpbGUsICogdXNlcmZpbGUsICogYW5vbnJvb3Q7Ci0jaWZkZWYgT1MyCi0gICAgZXh0 ZXJuIGNoYXIgKiBhbm9uYWNjdDsKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBOVAotICAgIGV4 dGVybiBjaGFyICogaWtzX2RvbWFpbjsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIENLX0xP R0lOICovCi0jaWZkZWYgQ0tXVE1QCi0gICAgZXh0ZXJuIGNoYXIgKiB3dG1wZmlsZTsKLSNlbmRp ZiAvKiBDS1dUTVAgKi8KLSAgICBleHRlcm4gaW50IHNydmNkbXNnLCBzdWNjZXNzLCBpa3NkY2Ys IHJjZmxhZywgbm9pbml0LCBhcmdfeDsKLSAgICBleHRlcm4gY2hhciAqIGNkbXNnZmlsZVtdLCAq IGNkbXNnc3RyLCAqa2VybXJjOwotICAgIGV4dGVybiB4eF9zdHJwIHh4c3RyaW5nOwotICAgIGlu dCB4LCB5LCB6OwotICAgIGNoYXIgKnM7Ci0gICAgY2hhciB0bXBidWZbQ0tNQVhQQVRIKzFdOwot Ci0gICAgaWYgKCh5ID0gY21rZXkoaWtzdGFiLG5pa3N0YWIsIiIsIiIseHhzdHJpbmcpKSA8IDAp Ci0gICAgICByZXR1cm4oeSk7Ci0KLSNpZmRlZiBDS19MT0dJTgotICAgIGlmICh5ID09IElLU19B Tk9OKSB7Ci0gICAgICAgIGlmICgoeSA9IGNta2V5KGlrc2FudGFiLG5pa3NhbnRhYiwiIiwiIix4 eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih5KTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfTE9HSU4g Ki8KLQotICAgIHN3aXRjaCAoeSkgewotI2lmZGVmIENLU1lTTE9HCi0gICAgICBjYXNlIElLU19T WVNMOiAgICAgICAgICAgICAgICAgICAgIC8qIElLUzogU3lzbG9nIGxldmVsICovCi0gICAgICAg IGlmICgoeiA9IGNta2V5KG9rdGFiLG5va3RhYiwiIiwiIix4eHN0cmluZykpIDwgMCkKLQkgIHJl dHVybih6KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAg ICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7Ci0jaWZuZGVmIFNZU0xPR0xFVkVM Ci0gICAgICAgIC8qIElmIHNwZWNpZmllZCBvbiBjYyBjb21tYW5kIGxpbmUsIHVzZXIgY2FuJ3Qg Y2hhbmdlIGl0LiAqLwotICAgICAgICBpZiAoIWluc2VydmVyKSAgICAgICAgICAgICAgICAgIC8q IERvbid0IGFsbG93IHZvbHVtaW5vdXMgc3lzbG9nZ2luZyAqLwotICAgICAgICAgIGlmICh5ID4g U1lTTEdfRkEpICAgICAgICAgICAgIC8qIGJ5IG9yZGluYXJ5IHVzZXJzLiAqLwotICAgICAgICAg ICAgeSA9IFNZU0xHX0ZBOwotI2VuZGlmIC8qIFNZU0xPR0xFVkVMICovCi0gICAgICAgIGlmICh5 IDwgMCkgcmV0dXJuKC0xKTsKLSNpZmRlZiBERUJVRwotICAgICAgICBpZiAoeSA+PSBTWVNMR19E QikKLSAgICAgICAgICBpZiAoIWRlYmxvZykKLSAgICAgICAgICAgIGRlYmxvZyA9IGRlYm9wbigi ZGVidWcubG9nIiwwKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIFNZU0xPR0xFVkVMCi0g ICAgICAgIC8qIElmIHNwZWNpZmllZCBvbiBjYyBjb21tYW5kIGxpbmUsIHVzZXIgY2FuJ3QgY2hh bmdlIGl0LiAqLwotICAgICAgICB5ID0gU1lTTE9HTEVWRUw7Ci0jZW5kaWYgLyogU1lTTE9HTEVW RUwgKi8KLSAgICAgICAgY2t4c3lzbG9nID0geTsKLSAgICAgICAgLyogcHJpbnRmKCJja3hzeXNs b2c9JWRcbiIsY2t4c3lzbG9nKTsgKi8KLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tTWVNM T0cgKi8KLQotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgTlQKLSAgICAgIGNhc2UgSUtTX05URE9N OgotICAgICAgICBpZiAoKHogPSBjbXR4dCgKLSAiRE9NQUlOIHRvIGJlIHVzZWQgZm9yIHVzZXIg YXV0aGVudGljYXRpb24gd2hlbiBub25lIGlzIHNwZWNpZmllZCIsCi0gICAgICAgICAgICAgICAg ICAgICAgICIiLCAmcyx4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih6KTsKLSAgICAgICAgaWYg KGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgaWYgKCEqcykgcz0gTlVMTDsK LSAgICAgICAgICBtYWtlc3RyKCZpa3NfZG9tYWluLHMpOwotICAgICAgICBicmVhazsKLSNlbmRp ZiAvKiBOVCAqLwotI2lmZGVmIE9TMgotICAgICAgY2FzZSBJS1NfQUNDVDoKLSAgICAgICAgaWYg KCh6ID0gY210eHQoIk5hbWUgb2YgbG9jYWwgYWNjb3VudCB0byB1c2UgZm9yIGFub255bW91cyBs b2dpbnMiLAotCQkJIkdVRVNUIiwgJnMseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeik7Ci0g ICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIGlmICgqcykg ewotICAgICAgICAgICAgbWFrZXN0cigmYW5vbmFjY3Qscyk7Ci0gICAgICAgIH0gZWxzZSBpZiAo IGFub25hY2N0ICkgewotCSAgICBmcmVlKGFub25hY2N0KTsKLQkgICAgYW5vbmFjY3QgPSBOVUxM OwotCX0KLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICBjYXNlIElLU19B TkxHOgotICAgICAgICBpZiAoKHogPSBjbWtleShva3RhYixub2t0YWIsIiIsIm5vIix4eHN0cmlu ZykpIDwgMCkKLQkgIHJldHVybih6KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeCk7Ci0gICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAg ICAgIGNreGFub24gPSB6OwotI2lmZGVmIE9TMgotCWlmIChja3hhbm9uICYmICFhbm9uYWNjdCkK LQkgIG1ha2VzdHIoJmFub25hY2N0LCJHVUVTVCIpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAg ICBicmVhazsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgICAgY2FzZSBJS1NfQkFGSToKLSAg ICAgICAgaWYgKCh6ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmeCx4eHN0cmluZykpIDwgMCkK LQkgIHJldHVybih6KTsKLSAgICAgICAgaWYgKHgpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1dp bGRjYXJkcyBub3QgYWxsb3dlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAg ICB9Ci0gICAgICAgIGRlYnVnKEYxMTAsImJhbm5lcmZpbGUgYmVmb3JlIHpmbnFmcCgpIixzLDAp OwotICAgICAgICBpZiAoemZucWZwKHMsQ0tNQVhQQVRILHRtcGJ1ZikpIHsKLSAgICAgICAgICAg IGRlYnVnKEYxMTAsImJhbm5lcmZpbGUgYWZ0ZXIgemZucWZwKCkiLHRtcGJ1ZiwwKTsKLSAgICAg ICAgICAgIHMgPSB0bXBidWY7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7 Ci0gICAgICAgIGlmICgqcykKLQkgIG1ha2VzdHIoJmJhbm5lcmZpbGUscyk7Ci0gICAgICAgIGJy ZWFrOwotICAgICAgY2FzZSBJS1NfQ0RGSToKLSAgICAgICAgaWYgKCh6ID0gY210eHQoImxpc3Qg b2YgY2QgbWVzc2FnZSBmaWxlIG5hbWVzIiwiUkVBRC5NRSIsCi0JCSAgICAgICAmcyx4eHN0cmlu ZykpIDwgMCkKLQkgIHJldHVybih6KTsKLSAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKLSAgICAgICAgaWYgKCpzKSB7Ci0gICAgICAgICAgICBtYWtlbGlzdChzLGNkbXNn ZmlsZSwxNik7Ci0gICAgICAgICAgICBtYWtlc3RyKCZjZG1zZ3N0cixzKTsKLSAgICAgICAgfQot ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSUtTX0NETVM6Ci0gICAgICAgIGlmICgoeiA9IGNt a2V5KG9rdGFiLG5va3RhYiwiIiwibm8iLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHopOwot ICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgaWYgKGlr c2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgc3J2Y2Rtc2cgPSB6OwotICAgICAg ICBicmVhazsKLSAgICAgIGNhc2UgSUtTX0hFRkk6Ci0gICAgICAgIGlmICgoeiA9IGNtaWZpKCJG aWxlbmFtZSIsIiIsJnMsJngseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeik7Ci0gICAgICAg IGlmICh4KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9XaWxkY2FyZHMgbm90IGFsbG93ZWRcbiIp OwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoemZucWZw KHMsQ0tNQVhQQVRILHRtcGJ1ZikpCi0gICAgICAgICAgcyA9IHRtcGJ1ZjsKLSAgICAgICAgaWYg KCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmIChpa3NkY2YpIHJldHVy bihzdWNjZXNzID0gMCk7Ci0gICAgICAgIGlmICgqcykKLQkgIG1ha2VzdHIoJmhlbHBmaWxlLHMp OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSUtTX0FORkk6Ci0gICAgICAgIGlmICgoeiA9 IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJngseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeik7 Ci0gICAgICAgIGlmICh4KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9XaWxkY2FyZHMgbm90IGFs bG93ZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBp ZiAoemZucWZwKHMsQ0tNQVhQQVRILHRtcGJ1ZikpCi0gICAgICAgICAgcyA9IHRtcGJ1ZjsKLSAg ICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmIChpa3Nk Y2YpIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIGlmICgqcykKLQkgIG1ha2VzdHIoJmFu b25maWxlLHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSUtTX1VTRkk6Ci0gICAgICAg IGlmICgoeiA9IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJngseHhzdHJpbmcpKSA8IDApCi0JICBy ZXR1cm4oeik7Ci0gICAgICAgIGlmICh4KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9XaWxkY2Fy ZHMgbm90IGFsbG93ZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQot ICAgICAgICBpZiAoemZucWZwKHMsQ0tNQVhQQVRILHRtcGJ1ZikpCi0gICAgICAgICAgcyA9IHRt cGJ1ZjsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAg IGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIGlmICgqcykKLQkgIG1h a2VzdHIoJnVzZXJmaWxlLHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSUtTX0lLRkk6 Ci0gICAgICAgIGlmICgoeiA9IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJngseHhzdHJpbmcpKSA8 IDApCi0JICByZXR1cm4oeik7Ci0gICAgICAgIGlmICh4KSB7Ci0gICAgICAgICAgICBwcmludGYo Ij9XaWxkY2FyZHMgbm90IGFsbG93ZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAg ICAgICAgfQotICAgICAgICBpZiAoemZucWZwKHMsQ0tNQVhQQVRILHRtcGJ1ZikpCi0gICAgICAg ICAgcyA9IHRtcGJ1ZjsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7 Ci0gICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIGlmICgq cykgewotICAgICAgICAgICAgbWFrZXN0cigmeGZlcmZpbGUscyk7Ci0gICAgICAgICAgICB4ZmVy bG9nID0gMTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSUtTX0lLTEc6 Ci0gICAgICAgIGlmICgoeiA9IGNta2V5KG9rdGFiLG5va3RhYiwiIiwibm8iLHh4c3RyaW5nKSkg PCAwKQotCSAgcmV0dXJuKHopOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVy bih4KTsKLSAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAg eGZlcmxvZyA9IHo7Ci0gICAgICAgIGJyZWFrOwotCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBD S19QRVJNCi0gICAgICBjYXNlIElLU19QRVJNOgotICAgICAgICBpZiAoKHogPSBjbXR4dCgiT2N0 YWwgZmlsZSBwZXJtc3Npb24gY29kZSIsIjAwMCIsCi0JCSAgICAgICAmcyx4eHN0cmluZykpIDwg MCkKLQkgIHJldHVybih6KTsKLQlpZiAoeiA8IDApIHJldHVybih6KTsKLSAgICAgICAgaWYgKGlr c2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgeSA9IDA7Ci0gICAgICAgIHdoaWxl ICgqcykgewotICAgICAgICAgICAgaWYgKCpzIDwgJzAnIHx8ICpzID4gJzcnKQotICAgICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgeSA9IHkgKiA4ICsgKCpzKysgLSAnMCcpOwot ICAgICAgICB9Ci0gICAgICAgIGNreHBlcm1zID0geTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYg LyogQ0tfUEVSTSAqLwotI2lmZGVmIFVOSVgKLSAgICAgIGNhc2UgSUtTX1BSSVY6ICAgICAgICAg ICAgICAgICAgICAgLyogSUtTOiBQcml2J2QgbG9naW4gYWxsb3dlZCAqLwotICAgICAgICBpZiAo KHogPSBjbWtleShva3RhYixub2t0YWIsIiIsIm5vIix4eHN0cmluZykpIDwgMCkKLQkgIHJldHVy bih6KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAg IGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIGNreHByaXYgPSB6Owot ICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBVTklYICovCi0KLSAgICAgIGNhc2UgSUtTX1JPT1Q6 ICAgICAgICAgICAgICAgICAgICAgLyogSUtTOiBBbm9ueW1vdXMgcm9vdCAqLwotCWlmICgoeiA9 IGNtZGlyKCJOYW1lIG9mIGRpc2sgYW5kL29yIGRpcmVjdG9yeSIsIiIsJnMsCi0JCSAgICAgICB4 eHN0cmluZykpIDwgMCApIHsKLQkgICAgaWYgKHogIT0gLTMpCi0JICAgICAgcmV0dXJuKHopOwot CX0KLSAgICAgICAgaWYgKCpzKSB7Ci0JICAgIGlmICh6Zm5xZnAocyxDS01BWFBBVEgsdG1wYnVm KSkKLQkgICAgICBzID0gdG1wYnVmOwotICAgICAgICB9IGVsc2UKLQkgIHMgPSAiIjsKLSAgICAg ICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmIChpa3NkY2Yp IHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIGlmICgqcykKLQkgIG1ha2VzdHIoJmFub25y b290LHMpOwotICAgICAgICAvKiBwcmludGYoImFub25yb290PSVzXG4iLGFub25yb290KTsgKi8K LSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgSUtTX1RJTU86Ci0JeiA9IGNtbnVtKCJsb2dp biB0aW1lb3V0LCBzZWNvbmRzIiwiMCIsMTAsJngseHhzdHJpbmcpOwotCWlmICh6IDwgMCkgcmV0 dXJuKHopOwotICAgICAgICBpZiAoeCA8IDAgfHwgeCA+IDcyMDApIHsKLSAgICAgICAgICAgIHBy aW50ZigiP1ZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA3MjAwXHJcbiIpOwotICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDAp IHJldHVybih6KTsKLSAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAg ICAgICAgbG9naW50aW1vID0geDsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBDS1dUTVAKLSAg ICAgIGNhc2UgSUtTX1dUTVA6ICAgICAgICAgICAgICAgICAgICAgLyogSUtTOiB3dG1wIGxvZyAq LwotICAgICAgICBpZiAoKHogPSBjbWtleShva3RhYixub2t0YWIsIiIsIm5vIix4eHN0cmluZykp IDwgMCkKLQkgIHJldHVybih6KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeCk7Ci0gICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAg IGNreHd0bXAgPSB6OwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBJS1NfV1RGSTogICAg ICAgICAgICAgICAgICAgICAvKiBJS1M6IHd0bXAgbG9nZmlsZSAqLwotICAgICAgICBpZiAoKHog PSBjbWlmaSgiRmlsZW5hbWUiLCIiLCZzLCZ4LHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHop OwotICAgICAgICBpZiAoeCkgewotICAgICAgICAgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBh bGxvd2VkXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAg aWYgKHpmbnFmcChzLENLTUFYUEFUSCx0bXBidWYpKQotICAgICAgICAgIHMgPSB0bXBidWY7Ci0g ICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBpZiAoaWtz ZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICBpZiAoKnMpCi0JICBtYWtlc3RyKCZ3 dG1wZmlsZSxzKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tXVE1QICovCi0jZW5kaWYg LyogQ0tfTE9HSU4gKi8KLSNpZmRlZiBJS1NEQgotICAgICAgY2FzZSBJS1NfREJGSTogewotICAg ICAgICAgIGV4dGVybiBjaGFyICogZGJkaXIsICogZGJmaWxlOwotICAgICAgICAgIGV4dGVybiBp bnQgZGJlbmFibGVkOwotICAgICAgICAgIHN0cnVjdCB6Zm5mcCAqIHp6OwotICAgICAgICAgIGlm ICgoeiA9IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJngseHhzdHJpbmcpKSA8IDApCi0JICAgIHJl dHVybih6KTsKLSAgICAgICAgICBpZiAoeCkgewotICAgICAgICAgICAgICBwcmludGYoIj9XaWxk Y2FyZHMgbm90IGFsbG93ZWRcbiIpOwotICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAg ICAgIH0KLSAgICAgICAgICB6eiA9IHpmbnFmcChzLENLTUFYUEFUSCx0bXBidWYpOwotICAgICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICAgIGlmIChpa3Nk Y2YpIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgICAgaWYgKHp6KSB7Ci0gICAgICAgICAg ICAgIG1ha2VzdHIoJmRiZGlyLHp6LT5mcGF0aCk7Ci0gICAgICAgICAgICAgIG1ha2VzdHIoJmRi ZmlsZSwoY2hhciAqKXRtcGJ1Zik7Ci0gICAgICAgICAgICAgIGRiZW5hYmxlZCA9IDE7Ci0gICAg ICAgICAgfSBlbHNlCi0JICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgICAgYnJlYWs7 Ci0gICAgICB9Ci0gICAgICBjYXNlIElLU19EQkFTOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCBk YmVuYWJsZWQ7Ci0gICAgICAgICAgaWYgKCh6ID0gY21rZXkob2t0YWIsbm9rdGFiLCIiLCJubyIs eHhzdHJpbmcpKSA8IDApCi0JICAgIHJldHVybih6KTsKLSAgICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2Vz cyA9IDApOwotICAgICAgICAgIGRiZW5hYmxlZCA9IHo7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg ICB9Ci0jZW5kaWYgLyogSUtTREIgKi8KLQotICAgICAgY2FzZSBJS1NfSU5JVDoKLSAgICAgICAg aWYgKCh6ID0gY210eHQoIkFsdGVybmF0ZSBpbml0IGZpbGUgc3BlY2lmaWNhdGlvbiIsIiIsCi0J CSAgICAgICAmcyx4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih6KTsKLSAgICAgICAgaWYgKHog PCAwKSByZXR1cm4oeik7Ci0gICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7 Ci0gICAgICAgIGNrc3RybmNweShrZXJtcmMscyxLRVJNUkNMKTsKLSAgICAgICAgcmNmbGFnID0g MTsJCQkvKiBGbGFnIHRoYXQgdGhpcyBoYXMgYmVlbiBkb25lICovCi0gICAgICAgIGJyZWFrOwot Ci0gICAgICBjYXNlIElLU19OT0lOOgotICAgICAgICBpZiAoKHogPSBjbWtleShva3RhYixub2t0 YWIsIiIsIm5vIix4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih6KTsKLSAgICAgICAgaWYgKCh4 ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmIChpa3NkY2YpIHJldHVybihz dWNjZXNzID0gMCk7Ci0gICAgICAgIG5vaW5pdCA9IHo7Ci0gICAgICAgIGJyZWFrOwotCi0gICAg ICBjYXNlIElLU19TUlZSOgotICAgICAgICBpZiAoKHogPSBjbWtleShva3RhYixub2t0YWIsIiIs Im5vIix4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih6KTsKLSAgICAgICAgaWYgKCh4ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNz ID0gMCk7Ci0gICAgICAgIGFyZ194ID0gejsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1 bHQ6Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIHJldHVybihzdWNjZXNzID0gKGlu c2VydmVyID8gMSA6IDApKTsKLSNlbHNlIC8qIElLU0RDT05GICovCi0gICAgaWYgKCh4ID0gY21j Zm0oKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0j ZW5kaWYgLyogSUtTRENPTkYgKi8KLX0KLSNlbmRpZiAvKiBOT0lDUCAqLwotI2VuZGlmIC8qIElL U0QgKi8KLQotLyogIEQgTyBBIFIgRyAgLS0gIERvIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50LiAg Ki8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWRvYXJnKGNoYXIgeCkKLSNlbHNlCi1kb2FyZyh4 KSBjaGFyIHg7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRvYXJnICovIHsKLSAgICBpbnQg aSwgbiwgeSwgeiwgeHg7IGxvbmcgeno7IGNoYXIgKnhwOwotCi0jaWZkZWYgTkVUQ09OTgotZXh0 ZXJuIGNoYXIgKmxpbmUsICp0bXBidWY7ICAgICAgICAgICAgIC8qIENoYXJhY3RlciBidWZmZXJz IGZvciBhbnl0aGluZyAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmZGVmIElLU0QKLSAg ICAvKiBJbnRlcm5ldCBLZXJtaXQgU2VydmVyIHNldCBzb21lIHdheSBiZXNpZGVzIC1BLi4uICov Ci0gICAgaWYgKGluc2VydmVyKQotICAgICAgZG9mYXN0KCk7Ci0jZW5kaWYgLyogSUtTRCAqLwot Ci0gICAgeHAgPSAqeGFyZ3YrMTsgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciBmb3Ig YnVuZGxlZCBhcmdzICovCi0gICAgZGVidWcoRjExMSwiZG9hcmcgZW50cnkiLHhwLHhhcmdjKTsK LSAgICB3aGlsZSAoeCkgewotICAgICAgICBkZWJ1ZyhGMDAwLCJkb2FyZyBhcmciLCIiLHgpOwot ICAgICAgICBzd2l0Y2ggKHgpIHsgICAgICAgICAgICAgICAgICAgIC8qIEJpZyBzd2l0Y2ggb24g YXJnICovCi0KLSNpZm5kZWYgQ09NTUVOVAotCSAgY2FzZSAnLSc6CQkJLyogRXh0ZW5kZWQgY29t bWFuZHMuLi4gKi8KLQkgICAgaWYgKGRveGFyZyh4YXJndiwwKSA8IDApIHsKLQkJWEZBVEFMKCJF eHRlbmRlZCBvcHRpb24gZXJyb3IiKTsKLQkgICAgfSAvKiBGdWxsIHRocnUuLi4gKi8KLQkgIGNh c2UgJysnOgkJCS8qIEV4dGVuZGVkIGNvbW1hbmQgZm9yIHByZXNjYW4oKSAqLwotCSAgICByZXR1 cm4oMCk7Ci0jZWxzZSAgLyogTk9JQ1AgKi8KLQkgIGNhc2UgJy0nOgotCSAgY2FzZSAnKyc6Ci0J ICAgIFhGQVRBTCgiRXh0ZW5kZWQgb3B0aW9ucyBub3QgY29uZmlndXJlZCIpOwotI2VuZGlmIC8q IE5PSUNQICovCi0KLSNpZm5kZWYgTk9TUEwKLQkgIGNhc2UgJ0MnOiB7CQkJLyogQ29tbWFuZHMg Zm9yIHBhcnNlciAqLwotCSAgICAgIGNoYXIgKiBzOwotCSAgICAgIHhhcmd2KyssIHhhcmdjLS07 Ci0JICAgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKLQkJICBYRkFU QUwoIk5vIGNvbW1hbmRzIGdpdmVuIGZvciAtQyIpOwotCSAgICAgIH0KLQkgICAgICBzID0gKnhh cmd2OwkJLyogR2V0IHRoZSBhcmd1bWVudCAobXVzdCBiZSBxdW90ZWQpICovCi0JICAgICAgaWYg KCEqcykJCQkvKiBJZiBlbXB0eSBxdW90ZXMgKi8KLQkJcyA9IE5VTEw7CQkvKiBpZ25vcmUgdGhp cyBvcHRpb24gKi8KLQkgICAgICBpZiAocykgewotCQkgIG1ha2VzdHIoJmNsY21kcyxzKTsJLyog TWFrZSBwb2tlYWJsZSBjb3B5ICovCi0JCSAgcyA9IGNsY21kczsJCS8qIENoYW5nZSB0YWJzIHRv IHNwYWNlcyAqLwotCQkgIHdoaWxlICgqcykgewotCQkgICAgICBpZiAoKnMgPT0gJ1x0JykgKnMg PSAnICc7Ci0JCSAgICAgIHMrKzsKLQkJICB9Ci0JICAgICAgfQotCSAgICAgIGJyZWFrOwotCSAg fQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9YRkVSCi0JICBjYXNlICdEJzoJCQkv KiBEZWxheSAqLwotCSAgICBpZiAoKih4cCsxKSkgewotCQlYRkFUQUwoImludmFsaWQgYXJndW1l bnQgYnVuZGxpbmciKTsKLQkgICAgfQotCSAgICB4YXJndisrLCB4YXJnYy0tOwotCSAgICBpZiAo KHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgewotCQlYRkFUQUwoIm1pc3NpbmcgZGVs YXkgdmFsdWUiKTsKLQkgICAgfQotCSAgICB6ID0gYXRvaSgqeGFyZ3YpOwkJLyogQ29udmVydCB0 byBudW1iZXIgKi8KLQkgICAgaWYgKHogPiAtMSkJCQkvKiBJZiBpbiByYW5nZSAqLwotCSAgICAg IGNrZGVsYXkgPSB6OwkJLyogc2V0IGl0ICovCi0JICAgIGVsc2UgewotCQlYRkFUQUwoImJhZCBk ZWxheSB2YWx1ZSIpOwotCSAgICB9Ci0JICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PWEZFUiAqLwot Ci0JICBjYXNlICdFJzoJCQkvKiBFeGl0IG9uIGNsb3NlICovCi0jaWZkZWYgTkVUQ09OTgotCSAg ICB0bl9leGl0ID0gMTsKLSNlbmRpZiAvKiBORVRDT05OICovCi0JICAgIGV4aXRvbmNsb3NlID0g MTsKLQkgICAgYnJlYWs7Ci0KLSNpZm5kZWYgTk9JQ1AKLQkgIGNhc2UgJ1MnOgkJCS8qICJTdGF5 IiAtIGVudGVyIGludGVyYWN0aXZlICovCi0JICAgIHN0YXlmbGcgPSAxOwkJLyogY29tbWFuZCBw YXJzZXIgYWZ0ZXIgZXhlY3V0aW5nICovCi0JICAgIHhmaW5pc2ggPSAwOwkJLyogY29tbWFuZC1s aW5lIGFjdGlvbnMuICovCi0JICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PSUNQICovCi0KLQkgIGNh c2UgJ1QnOgkJCS8qIEZpbGUgdHJhbnNmZXIgbW9kZSA9IHRleHQgKi8KLQkgICAgYmluYXJ5ID0g WFlGVF9UOwotCSAgICB4ZmVybW9kZSA9IFhNT0RFX007CQkvKiBUcmFuc2ZlciBtb2RlIG1hbnVh bCAqLwotCSAgICBmaWxlcGVlayA9IDA7Ci0jaWZkZWYgUEFUVEVSTlMKLQkgICAgcGF0dGVybnMg PSAwOwotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0JICAgIGJyZWFrOwotCi0JICBjYXNlICc3JzoK LQkgICAgYnJlYWs7Ci0KLSNpZmRlZiBJS1NECi0JICBjYXNlICdBJzogewkJCS8qIEludGVybmV0 IHNlcnZlciAqLwotCSAgICAgIC8qIEFscmVhZHkgZG9uZSBpbiBwcmVzY2FuKCkgKi8KLQkgICAg ICAvKiBidXQgaW1wbGllcyAneCcgJiYgICdRJyAgICovCi0jaWZkZWYgT1MyCi0JICAgICAgY2hh ciAqIHA7Ci0JICAgICAgaWYgKCooeHArMSkpIHsKLQkJICBYRkFUQUwoImludmFsaWQgYXJndW1l bnQgYnVuZGxpbmciKTsKLQkgICAgICB9Ci0jaWZkZWYgTlQKLQkgICAgICAvKiBTdXBwb3J0IGZv ciBQcmFnbWEgU3lzdGVtcyBUZWxuZXQvVGVybWluYWwgU2VydmVycyAqLwotCSAgICAgIHAgPSBn ZXRlbnYoIlBSQUdNQVNZU19JTkVURF9TT0NLIik7Ci0JICAgICAgaWYgKCEocCAmJiBhdG9pKHAp ICE9IDApKSB7Ci0JCSAgeGFyZ3YrKywgeGFyZ2MtLTsKLQkJICBpZiAoeGFyZ2MgPCAxIHx8ICoq eGFyZ3YgPT0gJy0nKSB7Ci0JCSAgICAgIFhGQVRBTCgibWlzc2luZyBzb2NrZXQgaGFuZGxlIik7 Ci0JCSAgfQotCSAgICAgIH0KLSNlbHNlIC8qIE5UICovCi0JICAgICAgeGFyZ3YrKywgeGFyZ2Mt LTsKLQkgICAgICBpZiAoeGFyZ2MgPCAxIHx8ICoqeGFyZ3YgPT0gJy0nKSB7Ci0JCSAgWEZBVEFM KCJtaXNzaW5nIHNvY2tldCBoYW5kbGUiKTsKLQkgICAgICB9Ci0jZW5kaWYgLyogTlQgKi8KLSNl bmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBOT0lDUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBJZiBubyBJbnRlcmFjdGl2ZSBDb21tYW5kIFBhcnNlciAqLwotCSAgICAgIGFjdGlvbiA9ICd4 JzsJCS8qIC1BIGltcGxpZXMgLXguICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLSNpZm5kZWYgTk9Y RkVSCi0JICAgICAgZG9mYXN0KCk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0JICAgICAgYnJlYWs7 Ci0JICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZuZGVmIE5PWEZFUgotCSAgY2FzZSAnUSc6 CQkJLyogUXVpY2sgKGkuZS4gRkFTVCkgKi8KLQkgICAgZG9mYXN0KCk7Ci0JICAgIGJyZWFrOwot I2VuZGlmIC8qIE5PWEZFUiAqLwotCi0JICBjYXNlICdSJzoJCQkvKiBSZW1vdGUtT25seSAqLwot CSAgICBicmVhazsJCQkvKiBUaGlzIGlzIGhhbmRsZWQgaW4gcHJlc2NhbigpLiAqLwotCi0jaWZu ZGVmIE5PU0VSVkVSCi0JICBjYXNlICd4JzoJCQkvKiBzZXJ2ZXIgKi8KLQkgIGNhc2UgJ08nOgkJ CS8qIChmb3IgT25lIGNvbW1hbmQgb25seSkgKi8KLQkgICAgaWYgKGFjdGlvbikgewotCQlYRkFU QUwoImNvbmZsaWN0aW5nIGFjdGlvbnMiKTsKLQkgICAgfQotCSAgICBpZiAoeCA9PSAnTycpIGp1 c3RvbmUgPSAxOwotCSAgICB4ZmluaXNoID0gMTsKLQkgICAgYWN0aW9uID0gJ3gnOwotCSAgICBi cmVhazsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0jaWZuZGVmIE5PWEZFUgotCSAgY2FzZSAn Zic6CQkJLyogZmluaXNoICovCi0JICAgIGlmIChhY3Rpb24pIHsKLQkJWEZBVEFMKCJjb25mbGlj dGluZyBhY3Rpb25zIik7Ci0JICAgIH0KLQkgICAgYWN0aW9uID0gc2V0Z2VuKCdGJywiIiwiIiwi Iik7Ci0JICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0JICBjYXNlICdyJzogewkJ CS8qIHJlY2VpdmUgKi8KLQkgICAgICBpZiAoYWN0aW9uKSB7Ci0JCSAgWEZBVEFMKCJjb25mbGlj dGluZyBhY3Rpb25zIik7Ci0JICAgICAgfQotCSAgICAgIGFjdGlvbiA9ICd2JzsKLQkgICAgICBi cmVhazsKLQkgIH0KLQotI2lmbmRlZiBOT1hGRVIKLQkgIGNhc2UgJ2snOgkJCS8qIHJlY2VpdmUg dG8gc3Rkb3V0ICovCi0JICAgIGlmIChhY3Rpb24pIHsKLQkJWEZBVEFMKCJjb25mbGljdGluZyBh Y3Rpb25zIik7Ci0JICAgIH0KLQkgICAgc3Rkb3VmID0gMTsKLQkgICAgYWN0aW9uID0gJ3YnOwot CSAgICBicmVhazsKLQotCSAgY2FzZSAncyc6IHsJCQkvKiBzZW5kICovCi0JICAgICAgaW50IGZp bDJzbmQsIHJjOwotCSAgICAgIGlmICghcmVjdXJzaXZlKQotCSAgICAgIG5vbGlua3MgPSAwOwkJ LyogRm9sbG93IGxpbmtzIGJ5IGRlZmF1bHQgKi8KLQotCSAgICAgIGlmIChhY3Rpb24pIHsKLQkJ ICBYRkFUQUwoImNvbmZsaWN0aW5nIGFjdGlvbnMiKTsKLQkgICAgICB9Ci0JICAgICAgaWYgKCoo eHArMSkpIHsKLQkJICBYRkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmcgYWZ0ZXIgLXMi KTsKLQkgICAgICB9Ci0JICAgICAgbmZpbHMgPSAwOwkJLyogSW5pdGlhbGl6ZSBmaWxlIGNvdW50 ZXIgKi8KLQkgICAgICBmaWwyc25kID0gMDsJCS8qIEFzc3VtZSBub3RoaW5nIHRvIHNlbmQgICov Ci0JICAgICAgeiA9IDA7CQkJLyogRmxhZyBmb3Igc3RkaW4gKi8KLQkgICAgICBjbWxpc3QgPSB4 YXJndiArIDE7CS8qIFJlbWVtYmVyIHRoaXMgcG9pbnRlciAqLwotCSAgICAgIHdoaWxlICgrK3hh cmd2LCAtLXhhcmdjID4gMCkgeyAvKiBUcmF2ZXJzZSB0aGUgbGlzdCAqLwotI2lmZGVmIFBJUEVT RU5ECi0JCSAgaWYgKHVzZXBpcGVzICYmIHByb3RvY29sID09IFBST1RPX0sgJiYgKip4YXJndiA9 PSAnIScpIHsKLQkJICAgICAgY21hcmcgPSAqeGFyZ3Y7Ci0JCSAgICAgIGNtYXJnKys7Ci0JCSAg ICAgIGRlYnVnKEYxMTAsImRvYXJnIHBpcGVzZW5kIixjbWFyZywwKTsKLQkJICAgICAgbmZpbHMg PSAtMTsKLQkJICAgICAgeiA9IDE7Ci0JCSAgICAgIHBpcGVzZW5kID0gMTsKLQkJICB9IGVsc2UK LSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCQkgICAgaWYgKCoqeGFyZ3YgPT0gJy0nKSB7IC8qIENo ZWNrIGZvciBzZW5kaW5nIHN0ZGluICovCi0JCQlpZiAoc3RyY21wKCp4YXJndiwiLSIpICE9IDAp IC8qIG5leHQgb3B0aW9uPyAqLwotCQkJICBicmVhazsKLQkJCXorKzsJCS8qICItIiBhbG9uZSBt ZWFucyBzZW5kIGZyb20gc3RkaW4uICovCi0jaWZkZWYgUkVDVVJTSVZFCi0JCSAgICB9IGVsc2Ug aWYgKCFzdHJjbXAoKnhhcmd2LCIuIikpIHsKLQkJCWZpbDJzbmQgPSAxOwotCQkJbmZpbHMrKzsK LQkJCXJlY3Vyc2l2ZSA9IDE7Ci0JCQlub2xpbmtzID0gMjsKLSNlbmRpZiAvKiBSRUNVUlNJVkUg Ki8KLQkJICAgIH0gZWxzZSAvKiBDaGVjayBpZiBmaWxlIGV4aXN0cyAqLwotCQkgICAgICBpZiAo KHJjID0gemNoa2koKnhhcmd2KSkgPiAtMSB8fCAocmMgPT0gLTIpKSB7Ci0JCQkgIGlmICAocmMg IT0gLTIpCi0JCQkgICAgZmlsMnNuZCA9IDE7Ci0JCQkgIG5maWxzKys7CS8qIEJ1bXAgZmlsZSBj b3VudGVyICovCi0JCSAgICAgIH0gZWxzZSBpZiAoaXN3aWxkKCp4YXJndikgJiYgbnp4cGFuZCgq eGFyZ3YsMCkgPiAwKSB7Ci0JCSAgICAgIC8qIG9yIGNvbnRhaW5zIHdpbGRjYXJkIGNoYXJhY3Rl cnMgbWF0Y2hpbmcgcmVhbCBmaWxlcyAqLwotCQkJICBmaWwyc25kID0gMTsKLQkJCSAgbmZpbHMr KzsKLQkJICAgICAgfSBlbHNlIHsKLQkJCSAgaWYgKCFmYWlsbXNnKQotCQkJICAgIGZhaWxtc2cg PSAoY2hhciAqKW1hbGxvYygyMDAwKTsKLQkJCSAgaWYgKGZhaWxtc2cpIHsKLQkJCSAgICAgIGNr bWFrbXNnKGZhaWxtc2csMjAwMCwKLSNpZmRlZiBWTVMKLQkJCQkgICAgICAgIiVDS0VSTUlULUUt U0VBUkNIRkFJTCAiCi0jZWxzZQotCQkJCSAgICAgICAia2VybWl0IC1zICIKLSNlbmRpZgkvKiBW TVMgKi8KLQkJCQkgICAgICAgLAotCQkJCSAgICAgICAqeGFyZ3YsCi0JCQkJICAgICAgICI6ICIs Ci0JCQkJICAgICAgIGNrX2VycnN0cigpCi0JCQkJICAgICAgICk7Ci0JCQkgIH0KLQkJICAgICAg fQotCSAgICAgIH0KLQkgICAgICB4YXJnYysrLCB4YXJndi0tOwkJLyogQWRqdXN0IGFyZ3YvYXJn YyAqLwotCSAgICAgIGlmICghZmlsMnNuZCAmJiB6ID09IDApIHsKLQkJICBpZiAoIWZhaWxtc2cp IHsKLSNpZmRlZiBWTVMKLQkJICAgICAgZmFpbG1zZyA9ICIlQ0tFUk1JVC1FLVNFQVJDSEZBSUws IG5vIGZpbGVzIGZvciAtcyI7Ci0jZWxzZQotCQkgICAgICBmYWlsbXNnID0gIk5vIGZpbGVzIGZv ciAtcyI7Ci0jZW5kaWYgLyogVk1TICovCi0JCSAgfQotCQkgIFhGQVRBTChmYWlsbXNnKTsKLQkg ICAgICB9Ci0JICAgICAgaWYgKHogPiAxKSB7Ci0JCSAgWEZBVEFMKCJrZXJtaXQgLXM6IHRvbyBt YW55IC0ncyIpOwotCSAgICAgIH0KLQkgICAgICBpZiAoeiA9PSAxICYmIGZpbDJzbmQpIHsKLQkJ ICBYRkFUQUwoImludmFsaWQgbWl4dHVyZSBvZiBmaWxlbmFtZXMgYW5kICctJyBpbiAtcyIpOwot CSAgICAgIH0KLQkgICAgICBkZWJ1ZyhGMTAxLCJkb2FyZyBzIG5maWxzIiwiIixuZmlscyk7Ci0J ICAgICAgZGVidWcoRjEwMSwiZG9hcmcgcyB6IiwiIix6KTsKLQkgICAgICBpZiAobmZpbHMgPT0g MCkgewkJLyogbm8gZmlsZSBwYXJhbWV0ZXJzIHdlcmUgc3BlY2lmaWVkICovCi0JCSAgaWYgKGlz X2FfdHR5KDApKSB7CS8qICh1c2VkIHRvIGJlIGlzX2FfdHR5KDEpIC0gd2h5PykgKi8KLQkJICAg ICAgWEZBVEFMKCJzZW5kaW5nIGZyb20gdGVybWluYWwgbm90IGFsbG93ZWQiKTsKLQkJICB9IGVs c2Ugc3RkaW5mID0gMTsKLQkgICAgICB9Ci0JICAgICAgZGVidWcoRjEwMSwiZG9hcmcgcyBzdGRp bmYiLCIiLHN0ZGluZik7Ci0JICAgICAgZGVidWcoRjExMSwiZG9hcmciLCp4YXJndixuZmlscyk7 Ci0JICAgICAgYWN0aW9uID0gJ3MnOwotCSAgICAgIGJyZWFrOwotCSAgfQotCi0JICBjYXNlICdn JzoJCQkvKiBnZXQgKi8KLQkgIGNhc2UgJ0cnOgkJCS8qIGdldCB0byBzdGRvdXQgKi8KLQkgICAg aWYgKGFjdGlvbikgewotCQlYRkFUQUwoImNvbmZsaWN0aW5nIGFjdGlvbnMiKTsKLQkgICAgfQot CSAgICBpZiAoKih4cCsxKSkgewotCQlYRkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmcg YWZ0ZXIgLWciKTsKLQkgICAgfQotCSAgICB4YXJndisrLCB4YXJnYy0tOwotCSAgICBpZiAoKHhh cmdjID09IDApIHx8ICgqKnhhcmd2ID09ICctJykpIHsKLQkJWEZBVEFMKCJtaXNzaW5nIGZpbGVu YW1lIGZvciAtZyIpOwotCSAgICB9Ci0JICAgIGlmICh4ID09ICdHJykgc3Rkb3VmID0gMTsKLQkg ICAgY21hcmcgPSAqeGFyZ3Y7Ci0JICAgIGFjdGlvbiA9ICdyJzsKLQkgICAgYnJlYWs7Ci0jZW5k aWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9MT0NBTAotCSAgY2FzZSAnYyc6CQkJLyogY29u bmVjdCBiZWZvcmUgKi8KLQkgICAgY2ZsZyA9IDE7Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICdu JzoJCQkvKiBjb25uZWN0IGFmdGVyICovCi0JICAgIGNuZmxnID0gMTsKLQkgICAgYnJlYWs7Ci0j ZW5kaWYgLyogTk9MT0NBTCAqLwotCi0JICBjYXNlICdoJzoJCQkvKiBoZWxwICovCi0JICAgIHVz YWdlKCk7Ci0jaWZuZGVmIE5PSUNQCi0JICAgIGlmIChzdGF5ZmxnIHx8IHdoYXQgPT0gV19DT01N QU5EKQotCSAgICAgIGJyZWFrOwotCSAgICBlbHNlCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQkgICAg ICBkb2V4aXQoR09PRF9FWElULC0xKTsKLQotI2lmbmRlZiBOT1hGRVIKLQkgIGNhc2UgJ2EnOgkJ CS8qICJhcyIgKi8KLQkgICAgaWYgKCooeHArMSkpIHsKLQkJWEZBVEFMKCJpbnZhbGlkIGFyZ3Vt ZW50IGJ1bmRsaW5nIGFmdGVyIC1hIik7Ci0JICAgIH0KLQkgICAgeGFyZ3YrKywgeGFyZ2MtLTsK LQkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKLQkJWEZBVEFMKCJt aXNzaW5nIG5hbWUgaW4gLWEiKTsKLQkgICAgfQotCSAgICBjbWFyZzIgPSAqeGFyZ3Y7Ci0JICAg IGRlYnVnKEYxMTEsImRvYXJnIGEiLGNtYXJnMix4YXJnYyk7Ci0JICAgIGJyZWFrOwotI2VuZGlm IC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PSUNQCi0JICBjYXNlICdZJzoJCQkvKiBObyBpbml0 aWFsaXphdGlvbiBmaWxlICovCi0JICAgIG5vaW5pdCA9IDE7Ci0JICAgIGJyZWFrOwotCi0JICBj YXNlICd5JzoJCQkvKiBBbHRlcm5hdGUgaW5pdC1maWxlIG5hbWUgKi8KLQkgICAgbm9pbml0ID0g MDsKLQkgICAgaWYgKCooeHArMSkpIHsKLQkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRs aW5nIGFmdGVyIC15Iik7Ci0JICAgIH0KLQkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKLQkgICAgaWYg KHhhcmdjIDwgMSkgewotCQlYRkFUQUwoIm1pc3NpbmcgZmlsZW5hbWUgaW4gLXkiKTsKLQkgICAg fQotCSAgICAvKiBzdHJjcHkoa2VybXJjLCp4YXJndik7IC4uLiBhbHJlYWR5IGRvbmUgaW4gcHJl c2NhbigpLi4uICovCi0JICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZm5kZWYg Tk9YRkVSCi0JICBjYXNlICdJJzoJCQkvKiBBc3N1bWUgd2UgaGF2ZSBhbiAiSW50ZXJuZXQiICov Ci0JICAgIHJlbGlhYmxlID0gMTsJCS8qIG9yIG90aGVyIHJlbGlhYmxlIGNvbm5lY3Rpb24gKi8K LQkgICAgeHJlbGlhYmxlID0gMTsKLQkgICAgc2V0cmVsaWFibGUgPSAxOwotCi0JICAgIC8qIEkn bSBub3Qgc28gc3VyZSBhYm91dCB0aGlzIC0tIHdoYXQgYWJvdXQgVk1TPyAobmV4dCBjb21tZW50 KSAqLwotCSAgICBjbGVhcnJxID0gMTsJCS8qIHRoZXJlZm9yZSB0aGUgY2hhbm5lbCBpcyBjbGVh ciAqLwotCi0jaWZuZGVmIFZNUwotLyoKLSAgU2luY2UgdGhpcyBjYW4gdHJpZ2dlciBmdWxsIGNv bnRyb2wtY2hhcmFjdGVyIHVucHJlZml4aW5nLCB3ZSBuZWVkIHRvCi0gIGVuc3VyZSB0aGF0IG91 ciB0ZXJtaW5hbCBvciBwdHkgZHJpdmVyIGlzIG5vdCBkb2luZyBYb24vWG9mZjsgb3RoZXJ3aXNl Ci0gIHdlIGNhbiBiZWNvbWUgZGVhZGxvY2tlZCB0aGUgZmlyc3QgdGltZSB3ZSByZWNlaXZlIGEg ZmlsZSB0aGF0IGNvbnRhaW5zCi0gIFhvZmYuCi0qLwotCSAgICBmbG93ID0gRkxPX05PTkU7Ci0j ZW5kaWYgLyogVk1TICovCi0JICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZu ZGVmIE5PTE9DQUwKLQkgIGNhc2UgJ2wnOgkJCS8qIFNFVCBMSU5FICovCi0jaWZkZWYgTkVUQ09O TgotI2lmZGVmIEFOWVgyNQotCSAgY2FzZSAnWCc6CQkJLyogU0VUIEhPU1QgdG8gWC4yNSBhZGRy ZXNzICovCi0jaWZkZWYgU1VOWDI1Ci0JICBjYXNlICdaJzoJCQkvKiBTRVQgSE9TVCB0byBYLjI1 IGZpbGUgZGVzY3JpcHRvciAqLwotI2VuZGlmIC8qIFNVTlgyNSAqLwotI2VuZGlmIC8qIEFOWVgy NSAqLwotI2lmZGVmIFRDUFNPQ0tFVAotCSAgY2FzZSAnSic6Ci0JICBjYXNlICdqJzoJCQkvKiBT RVQgSE9TVCAoVENQL0lQIHNvY2tldCkgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRp ZiAvKiBORVRDT05OICovCi0jaWZuZGVmIE5PWEZFUgotCSAgICBpZiAoeCA9PSAnaicgfHwgeCA9 PSAnSicgfHwgeCA9PSAnWCcgfHwgeCA9PSAnWicpIHsKLQkJcmVsaWFibGUgPSAxOwkJLyogb3Ig b3RoZXIgcmVsaWFibGUgY29ubmVjdGlvbiAqLwotCQl4cmVsaWFibGUgPSAxOwotCQlzZXRyZWxp YWJsZSA9IDE7Ci0JICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQkgICAgbmV0d29yayA9IDA7 Ci0JICAgIGlmICgqKHhwKzEpKSB7Ci0JCVhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGlu ZyBhZnRlciAtbCBvciAtaiIpOwotCSAgICB9Ci0JICAgIHhhcmd2KyssIHhhcmdjLS07Ci0JICAg IGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7Ci0JCVhGQVRBTCgiY29tbXVu aWNhdGlvbiBsaW5lIGRldmljZSBuYW1lIG1pc3NpbmciKTsKLQkgICAgfQotCi0jaWZkZWYgTkVU Q09OTgotCSAgICBpZiAoeCA9PSAnSicpIHsKLQkJY2ZsZyAgICA9IDE7CQkvKiBDb25uZWN0ICov Ci0JCXN0YXlmbGcgPSAxOwkJLyogU3RheSAqLwotCQl0bl9leGl0ID0gMTsJCS8qIFRlbG5ldC1s aWtlIGV4aXQgY29uZGl0aW9uICovCi0JCWV4aXRvbmNsb3NlID0gMTsKLQkgICAgfQotI2VuZGlm IC8qIE5FVENPTk4gKi8KLQkgICAgY2tzdHJuY3B5KHR0bmFtZSwqeGFyZ3YsVFROQU1MRU4rMSk7 Ci0JICAgIGxvY2FsID0gKHN0cmNtcCh0dG5hbWUsQ1RUTkFNKSAhPSAwKTsKLQkgICAgaWYgKGxv Y2FsICYmIHN0cmNtcCh0dG5hbWUsIjAiKSA9PSAwKQotCSAgICAgIGxvY2FsID0gMDsKLS8qCi0g IE5PVEU6IFdlIHJlYWxseSBkbyBub3QgbmVlZCB0byBjYWxsIHR0b3BlbiBoZXJlLCBzaW5jZSBp dCBzaG91bGQgYmUgY2FsbGVkCi0gIGFnYWluIGxhdGVyLCBhdXRvbWF0aWNhbGx5LCB3aGVuIHdl IGZpcnN0IHRyeSB0byBjb25kaXRpb24gdGhlIGRldmljZSB2aWEKLSAgdHRwa3Qgb3IgdHR2dC4g IENhbGxpbmcgdHRvcGVuIGhlcmUgaGFzIHRoZSBiYWQgc2lkZSBlZmZlY3Qgb2YgbWFraW5nIHRo ZQotICBvcmRlciBvZiB0aGUgLWIgYW5kIC1sIG9wdGlvbnMgc2lnbmlmaWNhbnQgd2hlbiB0aGUg b3JkZXIgb2YgY29tbWFuZC1saW5lCi0gIG9wdGlvbnMgc2hvdWxkIG5vdCBtYXR0ZXIuICBIb3dl dmVyLCB0aGUgbmV0d29yayBjYXNlcyBpbW1lZGlhdGVseSBiZWxvdwotICBjb21wbGljYXRlIG1h dHRlcnMgYSBiaXQsIHNvIHdlJ2xsIHNldHRsZSB0aGlzIGluIGEgZnV0dXJlIGVkaXQuCi0qLwot CSAgICBpZiAoeCA9PSAnbCcpIHsKLQkJaWYgKHR0b3Blbih0dG5hbWUsJmxvY2FsLG1kbXR5cCww KSA8IDApIHsKLQkJICAgIFhGQVRBTCgiY2FuJ3Qgb3BlbiBkZXZpY2UiKTsKLQkJfQotI2lmZGVm IENLTE9HRElBTAotCQlkb2xvZ2xpbmUoKTsKLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLQkJZGVi dWcoRjEwMSwiZG9hcmcgc3BlZWQiLCIiLHNwZWVkKTsKLQkJY3h0eXBlID0gKG1kbXR5cCA+IDAp ID8gQ1hUX01PREVNIDogQ1hUX0RJUkVDVDsKLQkJc3BlZWQgPSB0dGdzcGQoKTsJLyogR2V0IHRo ZSBzcGVlZC4gKi8KLQkJc2V0ZmxvdygpOwkJLyogRG8gc29tZXRoaW5nIGFib3V0IGZsb3cgY29u dHJvbC4gKi8KLSNpZm5kZWYgTk9TUEwKLQkJaWYgKGxvY2FsKSB7Ci0JCSAgICBpZiAobm1hYykg ewkJLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLwotCQkJaW50IGs7CQkvKiBZZXMgKi8KLQkJCWsg PSBtbG9vayhtYWN0YWIsIm9uX29wZW4iLG5tYWMpOyAvKiBMb29rIHRoaXMgdXAgKi8KLQkJCWlm IChrID49IDApIHsJLyogSWYgZm91bmQsICovCi0JCQkgICAgaWYgKGRvZG8oayx0dG5hbWUsMCkg PiAtMSkgLyogc2V0IGl0IHVwLCAqLwotCQkJICAgICAgcGFyc2VyKDEpOyAvKiBhbmQgZXhlY3V0 ZSBpdCAqLwotCQkJfQotCQkgICAgfQotCQl9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVm IE5FVENPTk4KLQkgICAgfSBlbHNlIHsKLQkJaWYgKHggPT0gJ2onIHx8IHggPT0gJ0onKSB7IC8q IElQIG5ldHdvcmsgaG9zdCBuYW1lICovCi0JCSAgICBjaGFyICogcyA9IGxpbmU7Ci0JCSAgICBj aGFyICogc2VydmljZSA9IHRtcGJ1ZjsKLQkJICAgIGlmICh4YXJnYyA+IDApIHsJLyogQ2hlY2sg aWYgaXQncyBmb2xsb3dlZCBieSAqLwotCQkJLyogQSBzZXJ2aWNlIG5hbWUgb3IgbnVtYmVyICov Ci0JCQlpZiAoKih4YXJndisxKSAmJiAqKCooeGFyZ3YrMSkpICE9ICctJykgewotCQkJICAgIHhh cmd2KyssIHhhcmdjLS07Ci0JCQkgICAgY2tzdHJuY2F0KHR0bmFtZSwiOiIsVFROQU1MRU4rMSk7 Ci0JCQkgICAgY2tzdHJuY2F0KHR0bmFtZSwqeGFyZ3YsVFROQU1MRU4rMSk7Ci0JCQl9Ci0JCSAg ICB9Ci0JCSAgICBuZXR0eXBlID0gTkVUX1RDUEI7Ci0JCSAgICBtZG10eXAgPSAtbmV0dHlwZTsJ LyogUGVyaGFwcyBhbHJlYWR5IHNldCBpbiBpbml0IGZpbGUgKi8KLQkJICAgIHRlbG5ldGZkID0g MTsJLyogT3IgbWF5YmUgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgKi8KLQkJICAgIGNrc3RybmNw eShsaW5lLCB0dG5hbWUsIExJTkJVRlNJWik7IC8qIFdvcmtpbmcgY29weSAqLwotCQkgICAgZm9y IChzID0gbGluZTsgKnMgIT0gTlVMICYmICpzICE9ICc6JzsgcysrKTsKLQkJICAgIGlmICgqcykg ewotCQkJKnMrKyA9IE5VTDsKLQkJCWNrc3RybmNweShzZXJ2aWNlLCBzLCBUTVBCVUZTSVopOwot CQkgICAgfSBlbHNlICpzZXJ2aWNlID0gTlVMOwotCQkgICAgcyA9IGxpbmU7Ci0jaWZuZGVmIE5P RElBTAotI2lmbmRlZiBOT0lDUAotCQkgICAgLyogTG9vayB1cCBpbiBuZXR3b3JrIGRpcmVjdG9y eSAqLwotCQkgICAgeCA9IDA7Ci0JCSAgICBpZiAoKnMgPT0gJz0nKSB7CS8qIElmIG51bWJlciBz dGFydHMgd2l0aCA9IHNpZ24gKi8KLQkJCXMrKzsJCS8qIHN0cmlwIGl0ICovCi0JCQl3aGlsZSAo KnMgPT0gU1ApIC8qIGFuZCBhbHNvIGFueSBsZWFkaW5nIHNwYWNlcyAqLwotCQkJICBzKys7Ci0J CQlja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7IC8qIERvIHRoaXMgYWdhaW4uICovCi0JCQlu aGNvdW50ID0gMDsKLQkJICAgIH0gZWxzZSBpZiAoIWlzZGlnaXQobGluZVswXSkpIHsKLS8qCi0g IG5uZXRkaXIgd2lsbCBiZSBncmVhdGVyIHRoYW4gMCBpZiB0aGUgaW5pdCBmaWxlIGhhcyBiZWVu IHByb2Nlc3NlZCBhbmQgaXQKLSAgY29udGFpbmVkIGEgU0VUIE5FVFdPUksgRElSRUNUT1JZIGNv bW1hbmQuCi0qLwotCQkJeHggPSAwOwkJLyogSW5pdGlhbGl6ZSB0aGlzICovCi0JCQlpZiAobm5l dGRpciA+IDApIC8qIElmIHRoZXJlIGlzIGEgZGlyZWN0b3J5Li4uICovCi0JCQkgIHh4ID0gbHVu ZXQobGluZSk7IC8qIExvb2sgdXAgdGhlIG5hbWUgKi8KLQkJCWVsc2UJCS8qIElmIG5vIGRpcmVj dG9yeSAqLwotCQkJICBuaGNvdW50ID0gMDsJLyogd2UgZGlkbid0IGZpbmQgYW55dGhpbmcgdGhl cmUgKi8KLQkJCWlmICh4eCA8IDApIHsJLyogTG9va3VwIGVycm9yOiAqLwotCQkJICAgIGNrbWFr bXNnKHRtcGJ1ZiwKLQkJCQkgICAgIFRNUEJVRlNJWiwKLQkJCQkgICAgIj9GYXRhbCBuZXR3b3Jr IGRpcmVjdG9yeSBsb29rdXAgZXJyb3IgLSAiLAotCQkJCSAgICAgbGluZSwKLQkJCQkgICAgICJc biIsCi0JCQkJICAgICBOVUxMCi0JCQkJICAgICApOwotCQkJICAgIFhGQVRBTCh0bXBidWYpOwot CQkJfQotCQkgICAgfQotI2VuZGlmIC8qIE5PSUNQICovCi0jZW5kaWYgLyogTk9ESUFMICovCi0J CSAgICAvKiBBZGQgc2VydmljZSB0byBsaW5lIHNwZWNpZmljYXRpb24gZm9yIHR0b3BlbigpICov Ci0JCSAgICBpZiAoKnNlcnZpY2UpIHsJLyogVGhlcmUgaXMgYSBzZXJ2aWNlIHNwZWNpZmllZCAq LwotCQkJY2tzdHJuY2F0KGxpbmUsICI6IixMSU5CVUZTSVopOwotCQkJY2tzdHJuY2F0KGxpbmUs IHNlcnZpY2UsTElOQlVGU0laKTsKLQkJCXR0bnByb3RvID0gTlBfREVGQVVMVDsKLQkJICAgIH0g ZWxzZSB7Ci0JCQlja3N0cm5jYXQobGluZSwgIjp0ZWxuZXQiLExJTkJVRlNJWik7Ci0JCQl0dG5w cm90byA9IE5QX1RFTE5FVDsKLQkJICAgIH0KLQotI2lmbmRlZiBOT0lDUAotI2lmbmRlZiBOT0RJ QUwKLQkJICAgIGlmICgobmhjb3VudCA+IDEpICYmICFxdWlldCAmJiAhYmFja2dyZCkgewotCQkJ cHJpbnRmKCIlZCBlbnRyJXMgZm91bmQgZm9yIFwiJXNcIiVzXG4iLAotCQkJICAgICAgIG5oY291 bnQsCi0JCQkgICAgICAgKG5oY291bnQgPT0gMSkgPyAieSIgOiAiaWVzIiwKLQkJCSAgICAgICBz LAotCQkJICAgICAgIChuaGNvdW50ID4gMCkgPyAiOiIgOiAiLiIKLQkJCSAgICAgICApOwotCQkJ Zm9yIChpID0gMDsgaSA8IG5oY291bnQ7IGkrKykKLQkJCSAgcHJpbnRmKCIlM2QuICVzICUtMTJz ID0+ICVzXG4iLAotCQkJCSBpKzEsIG5fbmFtZSwgbmhfcDJbaV0sIG5oX3BbaV0KLQkJCQkgKTsK LQkJICAgIH0KLQkJICAgIGlmIChuaGNvdW50ID09IDApCi0JCSAgICAgIG4gPSAxOwotCQkgICAg ZWxzZQotCQkgICAgICBuID0gbmhjb3VudDsKLSNlbHNlCi0JCSAgICBuID0gMTsKLQkJICAgIG5o Y291bnQgPSAwOwotI2VuZGlmIC8qIE5PRElBTCAqLwotCQkgICAgZm9yIChpID0gMDsgaSA8IG47 IGkrKykgewotI2lmbmRlZiBOT0RJQUwKLQkJCWlmIChuaGNvdW50ID49IDEpIHsKLQkJCSAgICAv KiBDb3B5IHRoZSBjdXJyZW50IGVudHJ5IHRvIGxpbmUgKi8KLQkJCSAgICBja3N0cm5jcHkobGlu ZSxuaF9wW2ldLExJTkJVRlNJWik7Ci0gICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIHRvIHNl ZSBpZiB0aGUgbmV0d29yayBlbnRyeSBjb250YWlucyBhIHNlcnZpY2UgKi8KLQkJCSAgICBmb3Ig KHMgPSBsaW5lIDsgKCpzICE9IE5VTCkgJiYgKCpzICE9ICc6Jyk7IHMrKykKLQkJCSAgICAgIDsK LQkJCSAgICAvKiBJZiBkaXJlY3RvcnkgZG9lcyBub3QgaGF2ZSBhIHNlcnZpY2UgLi4uICovCi0J CQkgICAgLyogYW5kIHRoZSB1c2VyIHNwZWNpZmllZCBvbmUgKi8KLQkJCSAgICBpZiAoISpzICYm ICpzZXJ2aWNlKSB7Ci0JCQkJY2tzdHJuY2F0KGxpbmUsICI6IixMSU5CVUZTSVopOwotCQkJCWNr c3RybmNhdChsaW5lLCBzZXJ2aWNlLExJTkJVRlNJWik7Ci0JCQkgICAgfQotCQkJICAgIGlmIChs b29rdXAobmV0Y21kLG5oX3AyW2ldLG5uZXRzLCZ6KSA+IC0xKSB7Ci0JCQkJbWRtdHlwID0gMCAt IG5ldGNtZFt6XS5rd3ZhbDsKLQkJCSAgICB9IGVsc2UgewotCQkJCXByaW50ZigKLQkJCQkgIkVy cm9yIC0gbmV0d29yayB0eXBlIFwiJXNcIiBub3Qgc3VwcG9ydGVkXG4iLAotCQkJCSAgICAgICBu aF9wMltpXQotCQkJCSAgICAgICApOwotCQkJCWNvbnRpbnVlOwotCQkJICAgIH0KLQkJCX0KLSNl bmRpZiAvKiBOT0RJQUwgKi8KLQkJICAgIH0KLSNlbmRpZiAvKiBOT0lDUCAqLwotCQkgICAgY2tz dHJuY3B5KHR0bmFtZSwgbGluZSxUVE5BTUxFTisxKTsKLQkJICAgIGN4dHlwZSA9IENYVF9UQ1BJ UDsJLyogU2V0IGNvbm5lY3Rpb24gdHlwZSAqLwotCQkgICAgc2V0ZmxvdygpOwkJLyogU2V0IGFw cHJvcHJpYXRlIGZsb3cgY29udHJvbC4gKi8KLSNpZmRlZiBTVU5YMjUKLQkJfSBlbHNlIGlmICh4 ID09ICdYJykgewkvKiBYLjI1IGFkZHJlc3MgKi8KLQkJICAgIG5ldHR5cGUgPSBORVRfU1gyNTsK LQkJICAgIG1kbXR5cCA9IC1uZXR0eXBlOwotCQl9IGVsc2UgaWYgKHggPT0gJ1onKSB7CS8qIE9w ZW4gWC4yNSBmaWxlIGRlc2NyaXB0b3IgKi8KLQkJICAgIG5ldHR5cGUgPSBORVRfU1gyNTsKLQkJ ICAgIG1kbXR5cCA9IC1uZXR0eXBlOwotCQkgICAgeDI1ZmQgPSAxOwotI2VuZGlmIC8qIFNVTlgy NSAqLwotI2lmZGVmIFNUUkFUVVNYMjUKLQkJfSBlbHNlIGlmICh4ID09ICdYJykgewkvKiBYLjI1 IGFkZHJlc3MgKi8KLQkJICAgIG5ldHR5cGUgPSBORVRfVlgyNTsKLQkJICAgIG1kbXR5cCA9IC1u ZXR0eXBlOwotI2VuZGlmIC8qIFNUUkFUVVNYMjUgKi8KLSNpZmRlZiBJQk1YMjUKLQkJfSBlbHNl IGlmICh4ID09ICdYJykgewkvKiBYLjI1IGFkZHJlc3MgKi8KLQkJICAgIG5ldHR5cGUgPSBORVRf SVgyNTsKLQkJICAgIG1kbXR5cCA9IC1uZXR0eXBlOwotI2VuZGlmIC8qIElCTVgyNSAqLwotI2lm ZGVmIEhQWDI1Ci0JCX0gZWxzZSBpZiAoeCA9PSAnWCcpIHsJLyogWC4yNSBhZGRyZXNzICovCi0J CSAgICBuZXR0eXBlID0gTkVUX0hYMjU7Ci0JCSAgICBtZG10eXAgPSAtbmV0dHlwZTsKLSNlbmRp ZiAvKiBIUFgyNSAqLwotCQl9Ci0JCWlmICh0dG9wZW4odHRuYW1lLCZsb2NhbCxtZG10eXAsMCkg PCAwKSB7Ci0JCSAgICBYRkFUQUwoImNhbid0IG9wZW4gaG9zdCBjb25uZWN0aW9uIik7Ci0JCX0K LQkJbmV0d29yayA9IDE7Ci0jaWZkZWYgQ0tMT0dESUFMCi0JCWRvbG9nbmV0KCk7Ci0jZW5kaWYg LyogQ0tMT0dESUFMICovCi0JCWN4dHlwZSA9IENYVF9YMjU7CS8qIFNldCBjb25uZWN0aW9uIHR5 cGUgKi8KLQkJc2V0ZmxvdygpOwkJLyogU2V0IGFwcHJvcHJpYXRlIGZsb3cgY29udHJvbC4gKi8K LSNpZm5kZWYgTk9TUEwKLQkJaWYgKGxvY2FsKSB7Ci0JCSAgICBpZiAobm1hYykgewkJLyogQW55 IG1hY3JvcyBkZWZpbmVkPyAqLwotCQkJaW50IGs7CQkvKiBZZXMgKi8KLQkJCWsgPSBtbG9vayht YWN0YWIsIm9uX29wZW4iLG5tYWMpOyAvKiBMb29rIHRoaXMgdXAgKi8KLQkJCWlmIChrID49IDAp IHsJLyogSWYgZm91bmQsICovCi0JCQkgICAgaWYgKGRvZG8oayx0dG5hbWUsMCkgPiAtMSkgLyog c2V0IGl0IHVwLCAqLwotCQkJICAgICAgcGFyc2VyKDEpOyAgICAgICAgLyogYW5kIGV4ZWN1dGUg aXQgKi8KLQkJCX0KLQkJICAgIH0KLQkJfQotI2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyog TkVUQ09OTiAqLwotCSAgICB9Ci0JICAgIC8qIGFkZCBtb3JlIGhlcmUgLS0gZGVjbmV0LCBldGMu Li4gKi8KLQkgICAgaGF2ZWxpbmUgPSAxOwotCSAgICBicmVhazsKLQotI2lmZGVmIEFOWVgyNQot CSAgY2FzZSAnVSc6CQkJLyogWC4yNSBjYWxsIHVzZXIgZGF0YSAqLwotCSAgICBpZiAoKih4cCsx KSkgewotCQlYRkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKLQkgICAgfQotCSAg ICB4YXJndisrLCB4YXJnYy0tOwotCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0g Jy0nKSkgewotCQlYRkFUQUwoIm1pc3NpbmcgY2FsbCB1c2VyIGRhdGEgc3RyaW5nIik7Ci0JICAg IH0KLQkgICAgY2tzdHJuY3B5KHVkYXRhLCp4YXJndixNQVhDVURBVEEpOwotCSAgICBpZiAoKGlu dClzdHJsZW4odWRhdGEpIDw9IE1BWENVREFUQSkgewotCQljdWRhdGEgPSAxOwotCSAgICB9IGVs c2UgewotCQlYRkFUQUwoIkludmFsaWQgY2FsbCB1c2VyIGRhdGEiKTsKLQkgICAgfQotCSAgICBi cmVhazsKLQotCSAgY2FzZSAnbyc6CQkJLyogWC4yNSBjbG9zZWQgdXNlciBncm91cCAqLwotCSAg ICBpZiAoKih4cCsxKSkgewotCQlYRkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsK LQkgICAgfQotCSAgICB4YXJndisrLCB4YXJnYy0tOwotCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwg KCoqeGFyZ3YgPT0gJy0nKSkgewotCQlYRkFUQUwoIm1pc3NpbmcgY2xvc2VkIHVzZXIgZ3JvdXAg aW5kZXgiKTsKLQkgICAgfQotCSAgICB6ID0gYXRvaSgqeGFyZ3YpOwkJLyogQ29udmVydCB0byBu dW1iZXIgKi8KLQkgICAgaWYgKHogPj0gMCAmJiB6IDw9IDk5KSB7Ci0JCWNsb3NnciA9IHo7Ci0J ICAgIH0gZWxzZSB7Ci0JCVhGQVRBTCgiSW52YWxpZCBjbG9zZWQgdXNlciBncm91cCBpbmRleCIp OwotCSAgICB9Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICd1JzoJCQkvKiBYLjI1IHJldmVyc2Ug Y2hhcmdlIGNhbGwgKi8KLQkgICAgcmV2Y2FsbCA9IDE7Ci0JICAgIGJyZWFrOwotI2VuZGlmIC8q IEFOWVgyNSAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotCSAgY2FzZSAnYic6CQkJLyogQml0 cy1wZXItc2Vjb25kIGZvciBzZXJpYWwgZGV2aWNlICovCi0JICAgIGlmICgqKHhwKzEpKSB7Ci0J CVhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOwotCSAgICB9Ci0JICAgIHhhcmd2 KyssIHhhcmdjLS07Ci0JICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7 Ci0JCVhGQVRBTCgibWlzc2luZyBicHMiKTsKLQkgICAgfQotCSAgICB6eiA9IGF0b2woKnhhcmd2 KTsJCS8qIENvbnZlcnQgdG8gbG9uZyBpbnQgKi8KLQkgICAgaSA9IHp6IC8gMTBMOwotI2lmbmRl ZiBOT0xPQ0FMCi0JICAgIGlmICh0dHNzcGQoaSkgPiAtMSkJCS8qIENoZWNrIGFuZCBzZXQgaXQg Ki8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0JICAgICAgc3BlZWQgPSB0dGdzcGQoKTsJCS8qIGFu ZCByZWFkIGl0IGJhY2suICovCi0jaWZuZGVmIE5PTE9DQUwKLQkgICAgZWxzZSB7Ci0JCVhGQVRB TCgidW5zdXBwb3J0ZWQgdHJhbnNtaXNzaW9uIHJhdGUiKTsKLQkgICAgfQotI2VuZGlmIC8qIE5P TE9DQUwgKi8KLQkgICAgYnJlYWs7Ci0KLSNpZm5kZWYgTk9ESUFMCi0jaWZuZGVmIE5PSUNQCi0J ICBjYXNlICdtJzoJCQkvKiBNb2RlbSB0eXBlICovCi0JICAgIGlmICgqKHhwKzEpKSB7Ci0JCVhG QVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyBhZnRlciAtbSIpOwotCSAgICB9Ci0JICAg IHhhcmd2KyssIHhhcmdjLS07Ci0JICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAn LScpKSB7Ci0JCVhGQVRBTCgibW9kZW0gdHlwZSBtaXNzaW5nIik7Ci0JICAgIH0KLQkgICAgeSA9 IGxvb2t1cChtZG10YWIsKnhhcmd2LG5tZG0sJnopOwotCSAgICBpZiAoeSA8IDApIHsKLQkJWEZB VEFMKCJ1bmtub3duIG1vZGVtIHR5cGUiKTsKLQkgICAgfQotCSAgICB1c2VybWRtID0gMDsKLQkg ICAgdXNlcm1kbSA9ICh5ID09IGRpYWx1ZHQpID8geCA6IDA7Ci0JICAgIGluaXRtZG0oeSk7Ci0J ICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PSUNQICovCi0jZW5kaWYgLyogTk9ESUFMICovCi0KLSNp Zm5kZWYgTk9YRkVSCi0JICBjYXNlICdlJzoJCQkvKiBFeHRlbmRlZCBwYWNrZXQgbGVuZ3RoICov Ci0JICAgIGlmICgqKHhwKzEpKSB7Ci0JCVhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGlu ZyBhZnRlciAtZSIpOwotCSAgICB9Ci0JICAgIHhhcmd2KyssIHhhcmdjLS07Ci0JICAgIGlmICgo eGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7Ci0JCVhGQVRBTCgibWlzc2luZyBsZW5n dGgiKTsKLQkgICAgfQotCSAgICB6ID0gYXRvaSgqeGFyZ3YpOwkJLyogQ29udmVydCB0byBudW1i ZXIgKi8KLQkgICAgaWYgKHogPiAxMCAmJiB6IDw9IG1heHJwcykgewotCQlycHNpeiA9IHVycHNp eiA9IHo7Ci0JCWlmICh6ID4gOTQpIHJwc2l6ID0gOTQ7CS8qIEZhbGxiYWNrIGlmIG90aGVyIEtl cm1pdCBjYW4ndCAqLwotCSAgICB9IGVsc2UgewotCQlYRkFUQUwoIlVuc3VwcG9ydGVkIHBhY2tl dCBsZW5ndGgiKTsKLQkgICAgfQotCSAgICBicmVhazsKLQotCSAgY2FzZSAndic6CQkJLyogVmlu ZG93IHNpemUgKi8KLQkgICAgaWYgKCooeHArMSkpIHsKLQkJWEZBVEFMKCJpbnZhbGlkIGFyZ3Vt ZW50IGJ1bmRsaW5nIik7Ci0JICAgIH0KLQkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKLQkgICAgaWYg KCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKLQkJWEZBVEFMKCJtaXNzaW5nIG9y IGJhZCB3aW5kb3cgc2l6ZSIpOwotCSAgICB9Ci0JICAgIHogPSBhdG9pKCp4YXJndik7CQkvKiBD b252ZXJ0IHRvIG51bWJlciAqLwotCSAgICBpZiAoeiA8IDMyKSB7CQkvKiBJZiBpbiByYW5nZSAq LwotCQl3c2xvdHIgPSB6OwkJLyogc2V0IGl0ICovCi0JCWlmICh6ID4gMSkgc3djYXByID0gMTsJ LyogU2V0IGNhcGFzIGJpdCBpZiB3aW5kb3dpbmcgKi8KLQkgICAgfSBlbHNlIHsKLQkJWEZBVEFM KCJVbnN1cHBvcnRlZCBwYWNrZXQgbGVuZ3RoIik7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0jZW5k aWYgLyogTk9YRkVSICovCi0KLQkgIGNhc2UgJ2knOgkJCS8qIFRyZWF0IGZpbGVzIGFzIGJpbmFy eSAqLwotCSAgICBiaW5hcnkgPSBYWUZUX0I7Ci0JICAgIHhmZXJtb2RlID0gWE1PREVfTTsJCS8q IFRyYW5zZmVyIG1vZGUgbWFudWFsICovCi0JICAgIGZpbGVwZWVrID0gMDsKLSNpZmRlZiBQQVRU RVJOUwotCSAgICBwYXR0ZXJucyA9IDA7Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLQkgICAgYnJl YWs7Ci0KLSNpZm5kZWYgTk9YRkVSCi0JICBjYXNlICd3JzoJCQkvKiBXcml0ZW92ZXIgKi8KLQkg ICAgY2t3YXJuID0gMDsKLQkgICAgZm5jYWN0ID0gWFlGWF9YOwotCSAgICBicmVhazsKLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLQotCSAgY2FzZSAncSc6CQkJLyogUXVpZXQgKi8KLQkgICAgcXVpZXQg PSAxOwotCSAgICBicmVhazsKLQotI2lmZGVmIERFQlVHCi0JICBjYXNlICdkJzoJCQkvKiBERUJV RyAqLwotCSAgICBicmVhazsJCQkvKiBIYW5kbGVkIGluIHByZXNjYW4oKSAqLwotI2VuZGlmIC8q IERFQlVHICovCi0KLQkgIGNhc2UgJzAnOiB7CQkJLyogSW4gdGhlIG1pZGRsZSAqLwotCSAgICAg IGV4dGVybiBpbnQgdHRfZXNjYXBlLCBsc2NhcHI7Ci0JICAgICAgdHRfZXNjYXBlID0gMDsJCS8q IE5vIGVzY2FwZSBjaGFyYWN0ZXIgKi8KLQkgICAgICBmbG93ID0gMDsJCQkvKiBObyBYb24vWG9m ZiAod2hhdCBhYm91dCBod2ZjPykgKi8KLSNpZm5kZWYgTk9YRkVSCi0JICAgICAgbHNjYXByID0g MDsJCS8qIE5vIGxvY2tpbmcgc2hpZnRzICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZkZWYg Q0tfQVBDCi0JICAgICAgewotCQkgIGV4dGVybiBpbnQgYXBjc3RhdHVzOwkvKiBObyBBUENzICov Ci0JCSAgYXBjc3RhdHVzID0gQVBDX09GRjsKLQkgICAgICB9Ci0jZW5kaWYgLyogQ0tfQVBDICov Ci0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBDS19BVVRPREwKLSAgICAgICAgICAgICAgc2V0YXV0 b2RsKDAsMCk7CQkvKiBObyBhdXRvZG93bmxvYWQgKi8KLSNlbmRpZiAvKiBDS19BVVRPREwgKi8K LSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZuZGVmIE5PQ1NFVFMKLQkgICAgICB7Ci0JCSAgZXh0 ZXJuIGludCB0Y3NyLCB0Y3NsOyAvKiBObyBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uICovCi0J CSAgdGNzciA9IDA7Ci0JCSAgdGNzbCA9IHRjc3I7CQkvKiBNYWtlIHRoZXNlIGVxdWFsICovCi0J ICAgICAgfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNpZmRlZiBUTkNPREUKLQkgICAgICBURUxP UFRfREVGX0NfVV9NT0RFKFRFTE9QVF9LRVJNSVQpID0gVE5fTkdfUkY7Ci0JICAgICAgVEVMT1BU X0RFRl9DX01FX01PREUoVEVMT1BUX0tFUk1JVCkgPSBUTl9OR19SRjsKLQkgICAgICBURUxPUFRf REVGX1NfVV9NT0RFKFRFTE9QVF9LRVJNSVQpID0gVE5fTkdfUkY7Ci0JICAgICAgVEVMT1BUX0RF Rl9TX01FX01PREUoVEVMT1BUX0tFUk1JVCkgPSBUTl9OR19SRjsKLSNlbmRpZiAvKiBUTkNPREUg Ki8KLQkgIH0KLS8qIEZhbGwgdGhydS4uLiAqLwotCi0JICBjYXNlICc4JzoJCQkvKiA4LWJpdCBj bGVhbiAqLwotCSAgICBwYXJpdHkgPSAwOwotCSAgICBjbWRtc2sgPSAweGZmOwotCSAgICBjbWFz ayA9IDB4ZmY7Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICdWJzogewotCSAgICAgIGV4dGVybiBp bnQgeGZlcm1vZGU7Ci0jaWZkZWYgUEFUVEVSTlMKLQkgICAgICBleHRlcm4gaW50IHBhdHRlcm5z OwotCSAgICAgIHBhdHRlcm5zID0gMDsJCS8qIE5vIHBhdHRlcm5zICovCi0jZW5kaWYgLyogUEFU VEVSTlMgKi8KLQkgICAgICB4ZmVybW9kZSA9IFhNT0RFX007CS8qIE1hbnVhbCB0cmFuc2ZlciBt b2RlICovCi0JICAgICAgZmlsZXBlZWsgPSAwOwotCSAgICAgIGJyZWFrOwotCSAgfQotCi0JICBj YXNlICdwJzoJCQkvKiBTRVQgUEFSSVRZICovCi0JICAgIGlmICgqKHhwKzEpKSB7Ci0JCVhGQVRB TCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOwotCSAgICB9Ci0JICAgIHhhcmd2KyssIHhh cmdjLS07Ci0JICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7Ci0JCVhG QVRBTCgibWlzc2luZyBwYXJpdHkiKTsKLQkgICAgfQotCSAgICBzd2l0Y2goeCA9ICoqeGFyZ3Yp IHsKLQkgICAgICBjYXNlICdlJzoKLQkgICAgICBjYXNlICdvJzoKLQkgICAgICBjYXNlICdtJzoK LQkgICAgICBjYXNlICdzJzogcGFyaXR5ID0geDsgYnJlYWs7Ci0JICAgICAgY2FzZSAnbic6IHBh cml0eSA9IDA7IGJyZWFrOwotCSAgICAgIGRlZmF1bHQ6ICB7IFhGQVRBTCgiaW52YWxpZCBwYXJp dHkiKTsgfQotCSAgICB9Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICd0JzoJCQkvKiBMaW5lIHR1 cm5hcm91bmQgaGFuZHNoYWtlICovCi0JICAgIHR1cm4gPSAxOwotCSAgICB0dXJuY2ggPSBYT047 CQkvKiBYT04gaXMgdHVybmFyb3VuZCBjaGFyYWN0ZXIgKi8KLQkgICAgZHVwbGV4ID0gMTsJCQkv KiBIYWxmIGR1cGxleCAqLwotCSAgICBmbG93ID0gMDsJCQkvKiBObyBmbG93IGNvbnRyb2wgKi8K LQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJ0InOgotCSAgICBiZ3NldCA9IDE7CQkJLyogRm9yY2Ug YmFja2dyb3VuZCAoYmF0Y2gpICovCi0JICAgIGJhY2tncmQgPSAxOwotCSAgICBicmVhazsKLQot CSAgY2FzZSAneic6CQkJLyogRm9yY2UgZm9yZWdyb3VuZCAqLwotCSAgICBiZ3NldCA9IDA7Ci0J ICAgIGJhY2tncmQgPSAwOwotCSAgICBicmVhazsKLQotI2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBS RUNVUlNJVkUKLQkgIGNhc2UgJ0wnOgotCSAgICByZWN1cnNpdmUgPSAyOwotCSAgICBub2xpbmtz ID0gMjsKLQkgICAgZm5zcGF0aCA9IFBBVEhfUkVMOwotCSAgICBicmVhazsKLSNlbmRpZiAvKiBS RUNVUlNJVkUgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT1NQTAotCSAgY2Fz ZSAnTSc6CQkJLyogTXkgVXNlciBOYW1lICovCi0JICAgIGlmICgqKHhwKzEpKSB7Ci0JCVhGQVRB TCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOwotCSAgICB9Ci0JICAgIHhhcmd2KyssIHhh cmdjLS07Ci0JICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7Ci0JCVhG QVRBTCgibWlzc2luZyB1c2VybmFtZSIpOwotCSAgICB9Ci0JICAgIGlmICgoaW50KXN0cmxlbigq eGFyZ3YpID4gNjMpIHsKLQkJWEZBVEFMKCJ1c2VybmFtZSB0b28gbG9uZyIpOwotCSAgICB9Ci0j aWZkZWYgSUtTRAotCSAgICBpZiAoIWluc2VydmVyKQotI2VuZGlmIC8qIElLU0QgKi8KLQkgICAg ICB7Ci0JCSAgY2tzdHJuY3B5KHVpZGJ1ZiwqeGFyZ3YsVUlEQlVGTEVOKTsKLQkJICBoYXZlZnRw dWlkID0gMTsKLQkgICAgICB9Ci0JICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNp ZmRlZiBDS19ORVRCSU9TCi0JICBjYXNlICdOJzoJCQkvKiBOZXRCaW9zIEFkYXB0ZXIgTnVtYmVy IGZvbGxvd3MgKi8KLQkgICAgaWYgKCooeHArMSkpIHsKLQkJWEZBVEFMKCJpbnZhbGlkIGFyZ3Vt ZW50IGJ1bmRsaW5nIGFmdGVyIC1OIik7Ci0JICAgIH0KLQkgICAgeGFyZ3YrKywgeGFyZ2MtLTsK LQkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKLQkJWEZBVEFMKCJt aXNzaW5nIE5ldEJpb3MgQWRhcHRlciBudW1iZXIiKTsKLQkgICAgfQotCSAgICBpZiAoKHN0cmxl bigqeGFyZ3YpICE9IDEpIHx8Ci0JCSgqeGFyZ3YpWzBdICE9ICdYJyAmJgotCQkoYXRvaSgqeGFy Z3YpIDwgMCkgJiYKLQkJKGF0b2koKnhhcmd2KSA+IDkpKSB7Ci0JCVhGQVRBTCgiSW52YWxpZCBO ZXRCaW9zIEFkYXB0ZXIgLSBBZGFwdGVycyAwIHRvIDkgYXJlIHZhbGlkIik7Ci0JICAgIH0KLQkg ICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfTkVUQklPUyAqLwotCi0jaWZkZWYgTkVUQ09OTgotCSAg Y2FzZSAnRic6Ci0JICAgIG5ldHdvcmsgPSAxOwotCSAgICBpZiAoKih4cCsxKSkgewotCQlYRkFU QUwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmcgYWZ0ZXIgLUYiKTsKLQkgICAgfQotCSAgICB4 YXJndisrLCB4YXJnYy0tOwotCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0n KSkgewotCQlYRkFUQUwoIm5ldHdvcmsgZmlsZSBkZXNjcmlwdG9yIG1pc3NpbmciKTsKLQkgICAg fQotCSAgICBja3N0cm5jcHkodHRuYW1lLCp4YXJndixUVE5BTUxFTisxKTsKLQkgICAgbmV0dHlw ZSA9IE5FVF9UQ1BCOwotCSAgICBtZG10eXAgPSAtbmV0dHlwZTsKLQkgICAgdGVsbmV0ZmQgPSAx OwotCSAgICBsb2NhbCA9IDE7Ci0JICAgIGJyZWFrOwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQot I2lmZGVmIENPTU1FTlQKLSNpZmRlZiBPUzJQTQotCSAgY2FzZSAnUCc6CQkJLyogT1MvMiBQcmVz ZW50YXRpb24gTWFuYWdlciAqLwotCSAgICBpZiAoKih4cCsxKSkgewotCQlYRkFUQUwoImludmFs aWQgYXJndW1lbnQgYnVuZGxpbmcgYWZ0ZXIgLVAiKTsKLQkgICAgfQotCSAgICB4YXJndisrLCB4 YXJnYy0tOwotCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgewotCQlY RkFUQUwoInBpcGUgZGF0YSBtaXNzaW5nIik7Ci0JICAgIH0KLQkgICAgcGlwZWRhdGEgPSAqeGFy Z3Y7Ci0JICAgIGJyZWFrOwotI2VuZGlmIC8qIE9TMlBNICovCi0jZWxzZQotCSAgY2FzZSAnUCc6 CQkJLyogRmlsZW5hbWVzIGxpdGVyYWwgKi8KLQkgICAgZm5jbnYgID0gWFlGTl9MOwotCSAgICBm X3NhdmUgPSBYWUZOX0w7Ci0JICAgIGJyZWFrOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lm bmRlZiBOT0lDUAotCSAgY2FzZSAnSCc6Ci0JICAgIG5vaGVyYWxkID0gMTsKLQkgICAgYnJlYWs7 Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLQotI2lmZGVmIE9TMgotCSAgY2FzZSAnVyc6Ci0JICAgIGlm ICgqKHhwKzEpKSB7Ci0JCVhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyBhZnRlciAt VyIpOwotCSAgICB9Ci0JICAgIHhhcmd2KyssIHhhcmdjLS07Ci0JICAgIGlmICgoeGFyZ2MgPCAx KSkgeyAvKiBjb3VsZCBiZSBuZWdhdGl2ZSAqLwotCQlYRkFUQUwoIldpbmRvdyBoYW5kbGUgbWlz c2luZyIpOwotCSAgICB9Ci0JICAgIHhhcmd2KyssIHhhcmdjLS07Ci0JICAgIGlmICgoeGFyZ2Mg PCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7Ci0JCVhGQVRBTCgiS2VybWl0IEluc3RhbmNlIG1p c3NpbmciKTsKLQkgICAgfQotCSAgICAvKiBBY3Rpb24gZG9uZSBpbiBwcmVzY2FuICovCi0JICAg IGJyZWFrOwotCi0JICBjYXNlICcjJzoJCQkvKiBLOTUgc3RkaW8gdGhyZWFkcyAqLwotCSAgICB4 YXJndisrLCB4YXJnYy0tOwkJLyogU2tpcCBwYXN0IGFyZ3VtZW50ICovCi0JICAgIGJyZWFrOwkJ CS8qIEFjdGlvbiBkb25lIGluIHByZXNjYW4gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVm IE5FV0ZUUAotCSAgY2FzZSAnOSc6CQkJLyogRlRQICovCi0JICAgIGlmICgqKHhwKzEpKSB7Ci0J CVhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyBhZnRlciAtOSIpOwotCSAgICB9Ci0J ICAgIHhhcmd2KyssIHhhcmdjLS07Ci0JICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9 PSAnLScpKSB7Ci0JCVhGQVRBTCgiRlRQIHNlcnZlciBhZGRyZXNzIG1pc3NpbmciKTsKLQkgICAg fQotCSAgICBtYWtlc3RyKCZmdHBfaG9zdCwqeGFyZ3YpOwotCSAgICBicmVhazsKLSNlbmRpZiAv KiBORVdGVFAgKi8KLQotCSAgZGVmYXVsdDoKLQkgICAgZmF0YWwyKCp4YXJndiwKLSNpZmRlZiBO VAotICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNvbW1hbmQtbGluZSBvcHRpb24sIHR5cGUg XCJrOTUgLWhcIiBmb3IgaGVscCIKLSNlbHNlCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAg ICAgImludmFsaWQgY29tbWFuZC1saW5lIG9wdGlvbiwgdHlwZSBcImsyIC1oXCIgZm9yIGhlbHAi Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNvbW1hbmQtbGluZSBvcHRpb24s IHR5cGUgXCJrZXJtaXQgLWhcIiBmb3IgaGVscCIKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAv KiBOVCAqLwotCQkgICApOwotICAgICAgICB9Ci0JaWYgKCF4cCkgYnJlYWs7Ci0JeCA9ICorK3hw OwkJCS8qIFNlZSBpZiBvcHRpb25zIGFyZSBidW5kbGVkICovCi0gICAgfQotICAgIHJldHVybigw KTsKLX0KLQotI2lmZGVmIFROQ09ERQotLyogIEQgTyBUIE4gQSBSIEcgIC0tICBEbyBhIHRlbG5l dCBjb21tYW5kLWxpbmUgYXJndW1lbnQuICAqLwotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5T SUMKLWRvdG5hcmcoY2hhciB4KQotI2Vsc2UKLWRvdG5hcmcoeCkgY2hhciB4OwotI2VuZGlmIC8q IENLX0FOU0lDICovCi0vKiBkb3RuYXJnICovIHsKLSAgICBjaGFyICp4cDsKLQotICAgIHhwID0g Knhhcmd2KzE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgZm9yIGJ1bmRsZWQgYXJn cyAqLwotICAgIGRlYnVnKEYxMTEsImRvdG5hcmcgZW50cnkiLHhwLHhhcmdjKTsKLSAgICB3aGls ZSAoeCkgewotICAgICAgICBkZWJ1ZyhGMDAwLCJkb3RuYXJnIGFyZyIsIiIseCk7Ci0gICAgICAg IHN3aXRjaCAoeCkgeyAgICAgICAgICAgICAgICAgICAgLyogQmlnIHN3aXRjaCBvbiBhcmcgKi8K LQotI2lmbmRlZiBDT01NRU5UCi0JICBjYXNlICctJzoJCQkvKiBFeHRlbmRlZCBjb21tYW5kcy4u LiAqLwotICAgICAgICAgICAgaWYgKGRveGFyZyh4YXJndiwwKSA8IDApIHsKLSAgICAgICAgICAg ICAgICBYRkFUQUwoIkV4dGVuZGVkIG9wdGlvbiBlcnJvciIpOwotICAgICAgICAgICAgfSAvKiBG dWxsIHRocnUuLi4gKi8KLQkgIGNhc2UgJysnOgkJCS8qIEV4dGVuZGVkIGNvbW1hbmQgZm9yIHBy ZXNjYW4oKSAqLwotICAgICAgICAgICAgcmV0dXJuKDApOwotI2Vsc2UgIC8qIENPTU1FTlQgKi8K LQkgIGNhc2UgJy0nOgotCSAgY2FzZSAnKyc6Ci0JICAgIFhGQVRBTCgiRXh0ZW5kZWQgb3B0aW9u cyBub3QgY29uZmlndXJlZCIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotLyoKLSAqIC0jICAg ICAgICAgICAgICAgIEtlcm1pdCA5NSBTdGFydHVwIEZsYWdzCi0gKiAtOCAgICAgICAgICAgICAg ICBOZWdvdGlhdGUgVGVsbmV0IEJpbmFyeSBpbiBib3RoIGRpcmVjdGlvbnMKLSAqIC1hICAgICAg ICAgICAgICAgIFJlcXVpcmUgdXNlIG9mIFRlbG5ldCBhdXRoZW50aWNhdGlvbgotICogLWMgICAg ICAgICAgICAgICAgRG8gbm90IHJlYWQgdGhlIC50ZWxuZXRyYyBmaWxlCi0gKiAtZCAgICAgICAg ICAgICAgICBUdXJuIG9uIGRlYnVnIG1vZGUKLSAqIC1FICAgICAgICAgICAgICAgIE5vIGVzY2Fw ZSBjaGFyYWN0ZXIKLSAqIC1mICAgICAgICAgICAgICAgIEZvcndhcmQgY3JlZGVudGlhbHMgdG8g aG9zdAotICogLUsgICAgICAgICAgICAgICAgUmVmdXNlIHVzZSBvZiBhdXRoZW50aWNhdGlvbjsg ZG8gbm90IHNlbmQgdXNlcm5hbWUKLSAqIC1rIHJlYWxtICAgICAgICAgIFNldCBkZWZhdWx0IHJl YWxtCi0gKiAtbCB1c2VyICAgICAgICAgICBTZXQgdXNlcm5hbWUgYW5kIHJlcXVlc3QgVGVsbmV0 IGF1dGhlbnRpY2F0aW9uCi0gKiAtTCAgICAgICAgICAgICAgICBOZWdvdGlhdGUgVGVsbmV0IEJp bmFyeSBPdXRwdXQgb25seQotICogLXEgICAgICAgICAgICAgICAgUXVpZXQgbW9kZSAoc3VwcHJl c3MgbWVzc2FnZXMpCi0gKiAtUyB0b3MgICAgICAgICAgICBVc2UgdGhlIElQIHR5cGUtb2Ytc2Vy dmljZSB0b3MKLSAqIC14ICAgICAgICAgICAgICAgIFJlcXVpcmUgRW5jcnlwdGlvbgotICogLUQg ICAgICAgICAgICAgICAgRGlzYWJsZSBmb3J3YXJkLVgKLSAqIC1UIGNlcnQ9ZmlsZSAgICAgIFVz ZSBjZXJ0aWZpY2F0ZSBpbiBmaWxlCi0gKiAtVCBrZXk9ZmlsZSAgICAgICBVc2UgcHJpdmF0ZSBr ZXkgaW4gZmlsZQotICogLVQgY3JsZmlsZT1maWxlICAgVXNlIENSTCBpbiBmaWxlCi0gKiAtVCBj cmxkaXI9ZGlyICAgICBVc2UgQ1JMcyBpbiBkaXJlY3RvcnkKLSAqIC1UIGNpcGhlcj1zdHJpbmcg IFVzZSBvbmx5IGNpcGhlcnMgaW4gc3RyaW5nCi0gKiAtWCBhdHlwZSAgICAgICAgICBEaXNhYmxl IHVzZSBvZiBhdHlwZSBhdXRoZW50aWNhdGlvbgotICogLVkgICAgICAgICAgICAgICAgRGlzYWJs ZSBpbml0IGZpbGUgcHJvY2Vzc2luZwotICoKLSAqLwotCSAgY2FzZSAnaCc6CQkJLyogaGVscCAq LwotCSAgICB1c2FnZSgpOwotCSAgICBkb2V4aXQoR09PRF9FWElULC0xKTsKLQkgICAgYnJlYWs7 Ci0KLQkgIGNhc2UgJzgnOgkJCS8qIFRlbG5ldCBCaW5hcnkgaW4gYm90aCBkaXJlY3Rpb25zICov Ci0JICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0JJTkFSWSkgPSBUTl9OR19NVTsKLQkg ICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0JJTkFSWSkgPSBUTl9OR19NVTsKLQkgICAg cGFyaXR5ID0gMDsKLQkgICAgY21kbXNrID0gMHhmZjsKLQkgICAgY21hc2sgPSAweGZmOwotCSAg ICBicmVhazsKLQotCSAgY2FzZSAnYSc6CQkJLyogUmVxdWlyZSBUZWxuZXQgQXV0aCAqLwotCSAg ICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdfTVU7 Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICdZJzoKLQkgICAgeGFyZ3YrKywgeGFyZ2MtLTsJCS8q IFNraXAgcGFzdCBhcmd1bWVudCAqLwotCSAgICBicmVhazsJCQkvKiBBY3Rpb24gZG9uZSBpbiBw cmVzY2FuICovCi0KLSNpZmRlZiBPUzIKLSAgICAgICAgICBjYXNlICcjJzoJCQkvKiBLOTUgc3Rk aW8gdGhyZWFkcyAqLwotCSAgICB4YXJndisrLCB4YXJnYy0tOwkJLyogU2tpcCBwYXN0IGFyZ3Vt ZW50ICovCi0JICAgIGJyZWFrOwkJCS8qIEFjdGlvbiBkb25lIGluIHByZXNjYW4gKi8KLSNlbmRp ZiAvKiBPUzIgKi8KLQotICAgICAgICAgIGNhc2UgJ3EnOgkgICAgICAgICAgICAgICAgLyogUXVp ZXQgKi8KLQkgICAgcXVpZXQgPSAxOwotCSAgICBicmVhazsKLQotCSAgY2FzZSAnZCc6Ci0jaWZk ZWYgREVCVUcKLQkgICAgaWYgKGRlYmxvZykgewotCQlkZWJ0aW0gPSAxOwotCSAgICB9IGVsc2Ug ewotCQlkZWJsb2cgPSBkZWJvcG4oImRlYnVnLmxvZyIsMCk7Ci0JICAgIH0KLSNlbmRpZiAvKiBE RUJVRyAqLwotCSAgICBicmVhazsKLQotCSAgY2FzZSAnRSc6IHsJCQkvKiBObyBFc2NhcGUgY2hh cmFjdGVyICovCi0JICAgICAgZXh0ZXJuIGludCB0dF9lc2NhcGU7Ci0JICAgICAgdHRfZXNjYXBl ID0gMDsKLQkgIH0KLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJ0snOgotCSAgICBURUxPUFRfREVG X0NfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdfUkY7Ci0JICAgIHVpZGJ1 ZlswXSA9IE5VTDsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJ2wnOiAvKiBTZXQgdXNlcm5hbWUg YW5kIHJlcXVlc3QgdGVsbmV0IGF1dGhlbnRpY2F0aW9uICovCi0JICAgIGlmICgqKHhwKzEpKSB7 Ci0JCVhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOwotCSAgICB9Ci0JICAgIHhh cmd2KyssIHhhcmdjLS07Ci0JICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScp KSB7Ci0JCVhGQVRBTCgibWlzc2luZyB1c2VybmFtZSIpOwotCSAgICB9Ci0JICAgIGlmICgoaW50 KXN0cmxlbigqeGFyZ3YpID4gNjMpIHsKLQkJWEZBVEFMKCJ1c2VybmFtZSB0b28gbG9uZyIpOwot CSAgICB9Ci0JICAgIGNrc3RybmNweSh1aWRidWYsKnhhcmd2LFVJREJVRkxFTik7Ci0JICAgIFRF TE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19NVTsKLQkg ICAgYnJlYWs7Ci0KLQkgIGNhc2UgJ0wnOgkJCS8qIFJlcXVpcmUgQklOQVJZIG1vZGUgb3V0Ym91 bmQgb25seSAqLwotCSAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQklOQVJZKSA9IFRO X05HX01VOwotCSAgICBicmVhazsKLQotCSAgY2FzZSAneCc6CQkJLyogUmVxdWlyZSBFbmNyeXB0 aW9uICovCi0JICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5f TkdfTVU7Ci0JICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFRO X05HX01VOwotCSAgICBicmVhazsKLQotCSAgY2FzZSAnRCc6CQkJLyogRGlzYWJsZSB1c2Ugb2Yg Rm9yd2FyZCBYICovCi0JICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0ZPUldBUkRfWCkg PSBUTl9OR19SRjsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJ2YnOgkJCS8qIEZvcndhcmQgY3Jl ZGVudGlhbHMgdG8gaG9zdCAqLwotCSAgICB7Ci0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLQkJ ZXh0ZXJuIGludCBmb3J3YXJkX2ZsYWc7Ci0JCWZvcndhcmRfZmxhZyA9IDE7Ci0jZW5kaWYKLQkJ YnJlYWs7Ci0JICAgIH0KLQotCSAgY2FzZSAnayc6IHsKLSNpZmRlZiBDS19LRVJCRVJPUwotCSAg ICAgIGV4dGVybiBjaGFyICoga3JiNV9kX3JlYWxtLCAqIGtyYjRfZF9yZWFsbTsKLSNlbmRpZiAv KiBDS19LRVJCRVJPUyAqLwotCSAgICAgIGlmICgqKHhwKzEpKSB7Ci0JCSAgWEZBVEFMKCJpbnZh bGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7Ci0JICAgICAgfQotCSAgICAgIHhhcmd2KyssIHhhcmdj LS07Ci0JICAgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKLQkJICBY RkFUQUwoIm1pc3NpbmcgcmVhbG0iKTsKLQkgICAgICB9Ci0jaWZkZWYgQ0tfS0VSQkVST1MKLQkg ICAgICBpZiAoKGludClzdHJsZW4oKnhhcmd2KSA+IDYzKSB7Ci0JCSAgWEZBVEFMKCJyZWFsbSB0 b28gbG9uZyIpOwotCSAgICAgIH0KLQkgICAgICBtYWtlc3RyKCZrcmI1X2RfcmVhbG0sKnhhcmd2 KTsKLQkgICAgICBtYWtlc3RyKCZrcmI0X2RfcmVhbG0sKnhhcmd2KTsKLSNlbmRpZiAvKiBDS19L RVJCRVJPUyAqLwotCSAgICAgIGJyZWFrOwotCSAgfQotCi0JICBjYXNlICdUJzogewotCSAgICAg IGlmICgqKHhwKzEpKSB7Ci0JCSAgWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7 Ci0JICAgICAgfQotCSAgICAgIHhhcmd2KyssIHhhcmdjLS07Ci0JICAgICAgaWYgKCh4YXJnYyA8 IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKLQkJICBYRkFUQUwoIm1pc3NpbmcgY2VydD0sIGtl eT0sIGNybGZpbGU9LCBjcmxkaXI9LCBvciBjaXBoZXI9Iik7Ci0JICAgICAgfQotI2lmZGVmIENL X1NTTAotCSAgICAgIGlmICghc3RybmNtcCgqeGFyZ3YsImNlcnQ9Iiw1KSkgewotCQkgIGV4dGVy biBjaGFyICogc3NsX3JzYV9jZXJ0X2ZpbGU7Ci0JCSAgbWFrZXN0cigmc3NsX3JzYV9jZXJ0X2Zp bGUsJigqeGFyZ3ZbNV0pKTsKLQkgICAgICB9IGVsc2UgaWYgKCAhc3RybmNtcCgqeGFyZ3YsImtl eT0iLDQpICkgewotCQkgIGV4dGVybiBjaGFyICogc3NsX3JzYV9rZXlfZmlsZTsKLQkJICBtYWtl c3RyKCZzc2xfcnNhX2tleV9maWxlLCYoKnhhcmd2WzRdKSk7Ci0JICAgICAgfSBlbHNlIGlmICgg IXN0cm5jbXAoKnhhcmd2LCJjcmxmaWxlPSIsOCkgKSB7Ci0JCSAgZXh0ZXJuIGNoYXIgKiBzc2xf Y3JsX2ZpbGU7Ci0JCSAgbWFrZXN0cigmc3NsX2NybF9maWxlLCYoKnhhcmd2WzhdKSk7Ci0JICAg ICAgfSBlbHNlIGlmICggIXN0cm5jbXAoKnhhcmd2LCJjcmxkaXI9Iiw3KSApIHsKLQkJICBleHRl cm4gY2hhciAqIHNzbF9jcmxfZGlyOwotCQkgIG1ha2VzdHIoJnNzbF9jcmxfZGlyLCYoKnhhcmd2 WzddKSk7Ci0JICAgICAgfSBlbHNlIGlmICggIXN0cm5jbXAoKnhhcmd2LCJjaXBoZXI9Iiw3KSAp IHsKLQkJICBleHRlcm4gY2hhciAqIHNzbF9jaXBoZXJfbGlzdDsKLQkJICBtYWtlc3RyKCZzc2xf Y2lwaGVyX2xpc3QsJigqeGFyZ3ZbN10pKTsKLQkgICAgICB9IGVsc2UgewotCQkgIFhGQVRBTCgi aW52YWxpZCBwYXJhbWV0ZXIiKTsKLQkgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0JICAg ICAgYnJlYWs7Ci0JICB9Ci0KLQkgIGRlZmF1bHQ6Ci0JICAgIGZhdGFsMigqeGFyZ3YsCi0JCSAg ICJpbnZhbGlkIGNvbW1hbmQtbGluZSBvcHRpb24sIHR5cGUgXCJ0ZWxuZXQgLWhcIiBmb3IgaGVs cCIKLQkJICAgKTsKLSAgICAgICAgfQotCi0JaWYgKCF4cCkgYnJlYWs7Ci0JeCA9ICorK3hwOwkJ CS8qIFNlZSBpZiBvcHRpb25zIGFyZSBidW5kbGVkICovCi0gICAgfQotICAgIHJldHVybigwKTsK LX0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotI2lmZGVmIFJMT0dDT0RFCi0KLS8qICBEIE8gUiBM IEcgQSBSIEcgIC0tICBEbyBhIHJsb2dpbiBjb21tYW5kLWxpbmUgYXJndW1lbnQuICAqLwotCi1z dGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWRvcmxnYXJnKGNoYXIgeCkKLSNlbHNlCi1kb3Js Z2FyZyh4KSBjaGFyIHg7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRvcmxnYXJnICovIHsK LSAgICBjaGFyICp4cDsKLQotICAgIHhwID0gKnhhcmd2KzE7ICAgICAgICAgICAgICAgICAgICAg IC8qIFBvaW50ZXIgZm9yIGJ1bmRsZWQgYXJncyAqLwotICAgIGRlYnVnKEYxMTEsImRvcmxnYXJn IGVudHJ5Iix4cCx4YXJnYyk7Ci0gICAgd2hpbGUgKHgpIHsKLSAgICAgICAgZGVidWcoRjAwMCwi ZG9ybGdhcmcgYXJnIiwiIix4KTsKLSAgICAgICAgc3dpdGNoICh4KSB7ICAgICAgICAgICAgICAg ICAgICAvKiBCaWcgc3dpdGNoIG9uIGFyZyAqLwotCi0jaWZuZGVmIENPTU1FTlQKLQkgIGNhc2Ug Jy0nOgkJCS8qIEV4dGVuZGVkIGNvbW1hbmRzLi4uICovCi0gICAgICAgICAgICBpZiAoZG94YXJn KHhhcmd2LDApIDwgMCkgewotICAgICAgICAgICAgWEZBVEFMKCJFeHRlbmRlZCBvcHRpb24gZXJy b3IiKTsKLSAgICAgICAgICAgIH0gLyogRnVsbCB0aHJ1Li4uICovCi0JICBjYXNlICcrJzoJCQkv KiBFeHRlbmRlZCBjb21tYW5kIGZvciBwcmVzY2FuKCkgKi8KLSAgICAgICAgICAgIHJldHVybigw KTsKLSNlbHNlICAvKiBDT01NRU5UICovCi0JICBjYXNlICctJzoKLQkgIGNhc2UgJysnOgotCSAg ICBYRkFUQUwoIkV4dGVuZGVkIG9wdGlvbnMgbm90IGNvbmZpZ3VyZWQiKTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLS8qCi0gKiAtZCAgICAgICAgICAgICAgICBEZWJ1ZwotICogLWwgdXNlciAg ICAgICAgICAgU2V0IHVzZXJuYW1lCi0gKgotICovCi0JICBjYXNlICdoJzoJCQkvKiBoZWxwICov Ci0JICAgIHVzYWdlKCk7Ci0JICAgIGRvZXhpdChHT09EX0VYSVQsLTEpOwotCSAgICBicmVhazsK LQotICAgICAgICAgIGNhc2UgJ1knOgotCSAgICB4YXJndisrLCB4YXJnYy0tOwkJLyogU2tpcCBw YXN0IGFyZ3VtZW50ICovCi0JICAgIGJyZWFrOwkJCS8qIEFjdGlvbiBkb25lIGluIHByZXNjYW4g Ki8KLSNpZmRlZiBPUzIKLSAgICAgICAgICBjYXNlICcjJzoJCQkvKiBLOTUgc3RkaW8gdGhyZWFk cyAqLwotCSAgICB4YXJndisrLCB4YXJnYy0tOwkJLyogU2tpcCBwYXN0IGFyZ3VtZW50ICovCi0J ICAgIGJyZWFrOwkJCS8qIEFjdGlvbiBkb25lIGluIHByZXNjYW4gKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICAgICAgICBjYXNlICdxJzoJICAgICAgICAgICAgICAgIC8qIFF1aWV0ICovCi0JICAg IHF1aWV0ID0gMTsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJ2QnOgotI2lmZGVmIERFQlVHCi0J ICAgIGlmIChkZWJsb2cpIHsKLQkJZGVidGltID0gMTsKLQkgICAgfSBlbHNlIHsKLQkJZGVibG9n ID0gZGVib3BuKCJkZWJ1Zy5sb2ciLDApOwotCSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkg ICAgYnJlYWs7Ci0KLQkgIGNhc2UgJ2wnOiAvKiBTZXQgdXNlcm5hbWUgYW5kIHJlcXVlc3QgdGVs bmV0IGF1dGhlbnRpY2F0aW9uICovCi0JICAgIGlmICgqKHhwKzEpKSB7Ci0JCVhGQVRBTCgiaW52 YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOwotCSAgICB9Ci0JICAgIHhhcmd2KyssIHhhcmdjLS07 Ci0JICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7Ci0JCVhGQVRBTCgi bWlzc2luZyB1c2VybmFtZSIpOwotCSAgICB9Ci0JICAgIGlmICgoaW50KXN0cmxlbigqeGFyZ3Yp ID4gNjMpIHsKLQkJWEZBVEFMKCJ1c2VybmFtZSB0b28gbG9uZyIpOwotCSAgICB9Ci0JICAgIGNr c3RybmNweSh1aWRidWYsKnhhcmd2LFVJREJVRkxFTik7Ci0JICAgIGJyZWFrOwotCi0JICBkZWZh dWx0OgotCSAgICBmYXRhbDIoKnhhcmd2LAotCQkgICAiaW52YWxpZCBjb21tYW5kLWxpbmUgb3B0 aW9uLCB0eXBlIFwicmxvZ2luIC1oXCIgZm9yIGhlbHAiCi0JCSAgICk7Ci0gICAgICAgIH0KLQot CWlmICgheHApIGJyZWFrOwotCXggPSAqKyt4cDsJCQkvKiBTZWUgaWYgb3B0aW9ucyBhcmUgYnVu ZGxlZCAqLwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8K LQotI2lmZGVmIFNTSEJVSUxUSU4KLQotLyogIEQgTyBTIFMgSCBBIFIgRyAgLS0gIERvIGEgc3No IGNvbW1hbmQtbGluZSBhcmd1bWVudC4gICovCi0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJ QwotZG9zc2hhcmcoY2hhciB4KQotI2Vsc2UKLWRvc3NoYXJnKHgpIGNoYXIgeDsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotLyogZG9zc2hhcmcgKi8gewotICAgIGNoYXIgKnhwOwotCi0gICAgeHAg PSAqeGFyZ3YrMTsgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciBmb3IgYnVuZGxlZCBh cmdzICovCi0gICAgZGVidWcoRjExMSwiZG9zc2hhcmcgZW50cnkiLHhwLHhhcmdjKTsKLSAgICB3 aGlsZSAoeCkgewotICAgICAgICBkZWJ1ZyhGMDAwLCJkb3NzaGFyZyBhcmciLCIiLHgpOwotICAg ICAgICBzd2l0Y2ggKHgpIHsgICAgICAgICAgICAgICAgICAgIC8qIEJpZyBzd2l0Y2ggb24gYXJn ICovCi0KLSNpZm5kZWYgQ09NTUVOVAotCSAgY2FzZSAnLSc6CQkJLyogRXh0ZW5kZWQgY29tbWFu ZHMuLi4gKi8KLSAgICAgICAgICAgIGlmIChkb3hhcmcoeGFyZ3YsMCkgPCAwKSB7Ci0gICAgICAg ICAgICAgICAgWEZBVEFMKCJFeHRlbmRlZCBvcHRpb24gZXJyb3IiKTsKLSAgICAgICAgICAgIH0g LyogRnVsbCB0aHJ1Li4uICovCi0JICBjYXNlICcrJzoJCQkvKiBFeHRlbmRlZCBjb21tYW5kIGZv ciBwcmVzY2FuKCkgKi8KLSAgICAgICAgICAgIHJldHVybigwKTsKLSNlbHNlICAvKiBDT01NRU5U UCAqLwotCSAgY2FzZSAnLSc6Ci0JICBjYXNlICcrJzoKLQkgICAgWEZBVEFMKCJFeHRlbmRlZCBv cHRpb25zIG5vdCBjb25maWd1cmVkIik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKgotICog LWQgICAgICAgICAgICAgICAgRGVidWcKLSAqIC0jIGFyZ3MgICAgICAgICAgIEluaXQKLSAqIC1Z ICAgICAgICAgICAgICAgIG5vIGluaXQgZmlsZQotICogLWwgdXNlciAgICAgICAgICAgU2V0IHVz ZXJuYW1lCi0gKgotICovCi0JICBjYXNlICdoJzoJCQkvKiBoZWxwICovCi0JICAgIHVzYWdlKCk7 Ci0JICAgIGRvZXhpdChHT09EX0VYSVQsLTEpOwotCSAgICBicmVhazsKLQotICAgICAgICAgIGNh c2UgJ1knOgotCSAgICB4YXJndisrLCB4YXJnYy0tOwkJLyogU2tpcCBwYXN0IGFyZ3VtZW50ICov Ci0JICAgIGJyZWFrOwkJCS8qIEFjdGlvbiBkb25lIGluIHByZXNjYW4gKi8KLSNpZmRlZiBPUzIK LSAgICAgICAgICBjYXNlICcjJzoJCQkvKiBLOTUgc3RkaW8gdGhyZWFkcyAqLwotCSAgICB4YXJn disrLCB4YXJnYy0tOwkJLyogU2tpcCBwYXN0IGFyZ3VtZW50ICovCi0JICAgIGJyZWFrOwkJCS8q IEFjdGlvbiBkb25lIGluIHByZXNjYW4gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICBj YXNlICdxJzoJICAgICAgICAgICAgICAgIC8qIFF1aWV0ICovCi0JICAgIHF1aWV0ID0gMTsKLQkg ICAgYnJlYWs7Ci0KLQkgIGNhc2UgJ2QnOgotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICAgIGlm IChkZWJsb2cpIHsKLSAgICAgICAgICAgICAgICAgIGRlYnRpbSA9IDE7Ci0gICAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBkZWJsb2cgPSBkZWJvcG4oImRlYnVnLmxvZyIs MCk7Ci0gICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCSAgICBicmVhazsKLQot CSAgY2FzZSAnbCc6IC8qIFNldCB1c2VybmFtZSBhbmQgcmVxdWVzdCB0ZWxuZXQgYXV0aGVudGlj YXRpb24gKi8KLQkgICAgaWYgKCooeHArMSkpIHsKLQkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50 IGJ1bmRsaW5nIik7Ci0JICAgIH0KLQkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKLQkgICAgaWYgKCh4 YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKLQkJWEZBVEFMKCJtaXNzaW5nIHVzZXJu YW1lIik7Ci0JICAgIH0KLQkgICAgaWYgKChpbnQpc3RybGVuKCp4YXJndikgPiA2MykgewotCQlY RkFUQUwoInVzZXJuYW1lIHRvbyBsb25nIik7Ci0JICAgIH0KLQkgICAgY2tzdHJuY3B5KHVpZGJ1 ZiwqeGFyZ3YsVUlEQlVGTEVOKTsKLQkgICAgYnJlYWs7Ci0KLQkgIGRlZmF1bHQ6Ci0JICAgIGZh dGFsMigqeGFyZ3YsCi0JCSAgICJpbnZhbGlkIGNvbW1hbmQtbGluZSBvcHRpb24sIHR5cGUgXCJz c2ggLWhcIiBmb3IgaGVscCIKLQkJICAgKTsKLSAgICAgICAgfQotCi0JaWYgKCF4cCkgYnJlYWs7 Ci0JeCA9ICorK3hwOwkJCS8qIFNlZSBpZiBvcHRpb25zIGFyZSBidW5kbGVkICovCi0gICAgfQot ICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0KLSNlbHNlIC8qIE5v IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UuLi4gKi8KLQotaW50Ci1jbWRsaW4oKSB7Ci0gICAgZXh0 ZXJuIGludCB4YXJnYzsKLSAgICBpZiAoeGFyZ2MgPiAxKSB7Ci0gICAgICAgIFhGQVRBTCgiU29y cnksIGNvbW1hbmQtbGluZSBvcHRpb25zIGRpc2FibGVkLiIpOwotICAgIH0KLX0KLSNlbmRpZiAv KiBOT0NNREwgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrdXZlci5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9j a3V2ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ExMTFmYi4uMDAwMDAwMAot LS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXZlci5oCisrKyAv ZGV2L251bGwKQEAgLTEsMTI2MiArMCwwIEBACi0vKiBja3V2ZXIuaCAtLSBDLUtlcm1pdCBVTklY IFZlcnNpb24gaGVyYWxkcyAqLwotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNAY29s dW1iaWEuZWR1PiwKLSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBT eXN0ZW1zLCBOZXcgWW9yayBDaXR5LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMCwKLSAg ICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3Jr LgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhU IGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBm b3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0qLwotCi0jaWZuZGVmIENLVVZFUl9ICi0j ZGVmaW5lIENLVVZFUl9ICi0KLS8qIEFycmFuZ2VkIG1vcmUgb3IgbGVzcyBhbHBoYWJldGljYWxs eSBieSBjb21waWxlciBzeW1ib2wgKi8KLS8qIE11c3QgYmUgaW5jbHVkZWQgQUZURVIgY2tjZGVi LmguICovCi0KLSNpZmRlZiBCRU9TCi0jaWZkZWYgQkVPUzQ1Ci0jZGVmaW5lIEhFUkFMRCAiIEJl T1MgNC41IgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgQmVPUyIKLSNlbmRpZiAvKiBCRU9TNDUg Ki8KLSNlbHNlCi0jaWZkZWYgQkVCT1gKLSNpZmRlZiBCRV9EUl83Ci0jZGVmaW5lIEhFUkFMRCAi IEJlQm94IERSNyIKLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAiIEJlQm94IgotI2VuZGlmIC8qIEJF X0RSXzcgKi8KLSNlbmRpZiAvKiBCRUJPWCAqLwotI2VuZGlmIC8qIEJFT1MgKi8KLQotI2lmZGVm IEJFTExWMTAKLSNkZWZpbmUgSEVSQUxEICIgQmVsbCBMYWJzIFJlc2VhcmNoIFVOSVggVjEwIgot I2VuZGlmIC8qIEJFTExWMTAgKi8KLQotI2lmZGVmIEFQT0xMT1NSMTAKLSNkZWZpbmUgSEVSQUxE ICIgQXBvbGxvIFNSMTAiCi0jZW5kaWYgLyogQVBPTExPU1IxMCAqLwotCi0jaWZkZWYgTUFDCi0j ZGVmaW5lIEhFUkFMRCAiIEFwcGxlIE1hY2ludG9zaCIKLSNlbmRpZiAvKiBNQUMgKi8KLQotI2lm ZGVmIEE5ODYKLSNkZWZpbmUgSEVSQUxEICIgQWx0b3MgOTg2IC8gWGVuaXggMy4wIgotI2VuZGlm IC8qIEE5ODYgKi8KLQotI2lmZGVmIEFTNDAwCi0jZGVmaW5lIEhFUkFMRCAiIEFTLzQwMCIKLSNl bmRpZiAvKiBBUzQwMCAqLwotCi0jaWZkZWYgYWVnaXMKLSNpZmRlZiBCU0Q0Ci0jZGVmaW5lIEhF UkFMRCAiIEFwb2xsbyBET01BSU4vSVggNC4yIEJTRCIKLSNlbHNlCi0jaWZkZWYgQVRUU1YKLSNk ZWZpbmUgSEVSQUxEICIgQXBvbGxvIERPTUFJTi9JWCBTeXN0ZW0gViIKLSNlbHNlCi0jZGVmaW5l IEhFUkFMRCAiIEFwb2xsbyBBZWdpcyIKLSNlbmRpZiAvKiBCU0Q0ICAqLwotI2VuZGlmIC8qIEFU VFNWICovCi0jZW5kaWYgLyogYWVnaXMgKi8KLQotI2lmbmRlZiBIRVJBTEQKLQotI2lmZGVmIEFJ WFJTCi0KLSNpZmRlZiBBSVg1MwotI2RlZmluZSBIRVJBTEQgIiBJQk0gQUlYIDUuMyIKLSNlbHNl Ci0jaWZkZWYgQUlYNTIKLSNkZWZpbmUgSEVSQUxEICIgSUJNIEFJWCA1LjIiCi0jZWxzZQotI2lm ZGVmIEFJWDUxCi0jZGVmaW5lIEhFUkFMRCAiIElCTSBBSVggNS4xIgotI2Vsc2UKLSNpZmRlZiBB SVg0NQotI2RlZmluZSBIRVJBTEQgIiBJQk0gQUlYIDUuMCIKLSNlbHNlCi0jaWZkZWYgQUlYNDUK LSNkZWZpbmUgSEVSQUxEICIgSUJNIEFJWCA0LjUiCi0jZWxzZQotI2lmZGVmIEFJWDQ0Ci0jZGVm aW5lIEhFUkFMRCAiIElCTSBBSVggNC40IgotI2Vsc2UKLSNpZmRlZiBBSVg0MwotI2RlZmluZSBI RVJBTEQgIiBJQk0gQUlYIDQuMyIKLSNlbHNlCi0jaWZkZWYgQUlYNDIKLSNkZWZpbmUgSEVSQUxE ICIgSUJNIEFJWCA0LjIiCi0jZWxzZQotI2lmZGVmIFNWUjQKLSNpZmRlZiBBSVg0MQotI2RlZmlu ZSBIRVJBTEQgIiBJQk0gQUlYIDQuMSIKLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAiIElCTSBSUy82 MDAwIEFJWCAzLjIiCi0jZW5kaWYgLyogQUlYNDEgKi8KLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAi IElCTSBSUy82MDAwIEFJWCAzLjAvMy4xIgotI2VuZGlmIC8qIFNWUjQgKi8KLSNlbmRpZiAvKiBB SVg0MiAqLwotI2VuZGlmIC8qIEFJWDQzICovCi0jZW5kaWYgLyogQUlYNDQgKi8KLSNlbmRpZiAv KiBBSVg0NSAqLwotI2VuZGlmIC8qIEFJWDUwICovCi0jZW5kaWYgLyogQUlYNTEgKi8KLSNlbmRp ZiAvKiBBSVg1MiAqLwotI2VuZGlmIC8qIEFJWDUzICovCi0jZW5kaWYgLyogQUlYUlMgKi8KLQot I2lmZGVmIFBTMkFJWDEwCi0jZGVmaW5lIEhFUkFMRCAiIElCTSBQUy8yIEFJWCAxLngiCi0jZW5k aWYgLyogUFMyQUlYMTAgKi8KLQotI2lmZGVmIEFJWFBTMgotI2RlZmluZSBIRVJBTEQgIiBJQk0g UFMvMiBBSVggMy54IgotI2VuZGlmIC8qIEFJWFBTMiAqLwotCi0jaWZkZWYgQUlYMzcwCi0jaWZu ZGVmIEhFUkFMRAotI2RlZmluZSBIRVJBTEQgIiBJQk0gU3lzdGVtLzM3MCBBSVgvMzcwIgotI2Vu ZGlmCi0jZW5kaWYgLyogQUlYMzcwICovCi0KLSNpZmRlZiBBSVhFU0EKLSNpZm5kZWYgSEVSQUxE Ci0jZGVmaW5lIEhFUkFMRCAiIElCTSBBSVgvRVNBIHZlcnNpb24gMi4xIgotI2VuZGlmCi0jZW5k aWYgLyogQUlYRVNBICovCi0KLSNpZmRlZiBBVFQ2MzAwCi0jZGVmaW5lIEhFUkFMRCAiIEFUJlQg NjMwMCIKLSNlbmRpZiAvKiBBVFQ2MzAwICovCi0KLSNpZmRlZiBBVFQ3MzAwCi0jaWZkZWYgVU5J WDM1MU0KLSNkZWZpbmUgSEVSQUxEICIgQVQmVCA3MzAwIFVOSVggUEMgVU5JWCAzLjUxbSIKLSNl bHNlCi0jZGVmaW5lIEhFUkFMRCAiIEFUJlQgNzMwMCBVTklYIFBDIgotI2VuZGlmIC8qIFVOSVgz NTFNICovCi0jZW5kaWYgLyogQVRUNzMwMCAqLwotCi0jaWZkZWYgQVVYCi0jZGVmaW5lIEhFUkFM RCAiIEFwcGxlIE1hY2ludG9zaCBBVVgiCi0jZW5kaWYgLyogQVVYICovCi0KLSNpZmRlZiBCU0Q0 NAotI2lmZGVmIE1BQ09TWAotI2RlZmluZSBIRVJBTEQgIiBNYWMgT1MgWCIKLSNlbHNlCi0jaWZk ZWYgX19PcGVuQlNEX18KLSNkZWZpbmUgSEVSQUxEICIgT3BlbkJTRCIKLSNlbHNlCi0jaWZkZWYg X19ic2RpX18KLSNpZmRlZiBCU0RJNAotI2RlZmluZSBIRVJBTEQgIiBCU0RJIEJTRC9PUyA0LjAi Ci0jZWxzZQotI2lmZGVmIEJTREkzCi0jZGVmaW5lIEhFUkFMRCAiIEJTREkgQlNEL09TIDMuMCIK LSNlbHNlCi0jaWZkZWYgQlNESTIKLSNkZWZpbmUgSEVSQUxEICIgQlNESSBCU0QvT1MgMi4wIgkv KiAxLjErKyBuYW1lLi4uICovCi0jZWxzZQotI2RlZmluZSBIRVJBTEQgIiBCU0RJIEJTRC8zODYi CQkvKiBPcmlnaW5hbCAxLjAgbmFtZSAqLwotI2VuZGlmIC8qIEJTREkyICovCi0jZW5kaWYgLyog QlNESTMgKi8KLSNlbmRpZiAvKiBCU0RJNCAqLwotI2Vsc2UgIC8qIF9fYnNkaV9fICovCi0jaWZk ZWYgX19OZXRCU0RfXwotI2lmbmRlZiBIRVJBTEQKLSNpZmRlZiBORVRCU0QxNgotI2RlZmluZSBI RVJBTEQgIiBOZXRCU0QgMS42IgotI2Vsc2UKLSNpZmRlZiBORVRCU0QxNQotI2RlZmluZSBIRVJB TEQgIiBOZXRCU0QgMS41IgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgTmV0QlNEIgotI2VuZGlm IC8qIE5FVEJTRDE1ICovCi0jZW5kaWYgLyogTkVUQlNEMTYgKi8KLSNlbmRpZiAvKiBIRVJBTEQg Ki8KLSNlbHNlICAvKiBfX05ldEJTRF9fICovCi0jaWZkZWYgX19GcmVlQlNEX18KLSNpZmRlZiBG UkVFQlNENTEKLSNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA1LjEiCi0jZWxzZQotI2lmZGVmIEZS RUVCU0Q1MAotI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDUuMCIKLSNlbHNlCi0jaWZkZWYgRlJF RUJTRDQ5Ci0jZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNC45IgotI2Vsc2UKLSNpZmRlZiBGUkVF QlNENDgKLSNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA0LjgiCi0jZWxzZQotI2lmZGVmIEZSRUVC U0Q0NwotI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDQuNyIKLSNlbHNlCi0jaWZkZWYgRlJFRUJT RDQ2Ci0jZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNC42IgotI2Vsc2UKLSNpZmRlZiBGUkVFQlNE NDUKLSNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA0LjUiCi0jZWxzZQotI2lmZGVmIEZSRUVCU0Q0 NAotI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDQuNCIKLSNlbHNlCi0jaWZkZWYgRlJFRUJTRDQz Ci0jZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNC4zIgotI2Vsc2UKLSNpZmRlZiBGUkVFQlNENDIK LSNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA0LjIiCi0jZWxzZQotI2lmZGVmIEZSRUVCU0Q0MQot I2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDQuMSIKLSNlbHNlCi0jaWZkZWYgRlJFRUJTRDQKLSNk ZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA0LjAiCi0jZWxzZQotI2lmZGVmIEZSRUVCU0QzCi0jZGVm aW5lIEhFUkFMRCAiIEZyZWVCU0QgMy4wIgotI2Vsc2UKLSNpZmRlZiBGUkVFQlNEMgotI2RlZmlu ZSBIRVJBTEQgIiBGcmVlQlNEIDIuMCIKLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0Qi Ci0jZW5kaWYgLyogRlJFRUJTRDIgKi8KLSNlbmRpZiAvKiBGUkVFQlNEMyAqLwotI2VuZGlmIC8q IEZSRUVCU0Q0ICovCi0jZW5kaWYgLyogRlJFRUJTRDQxICovCi0jZW5kaWYgLyogRlJFRUJTRDQy ICovCi0jZW5kaWYgLyogRlJFRUJTRDQzICovCi0jZW5kaWYgLyogRlJFRUJTRDQ0ICovCi0jZW5k aWYgLyogRlJFRUJTRDQ1ICovCi0jZW5kaWYgLyogRlJFRUJTRDQ2ICovCi0jZW5kaWYgLyogRlJF RUJTRDQ3ICovCi0jZW5kaWYgLyogRlJFRUJTRDQ4ICovCi0jZW5kaWYgLyogRlJFRUJTRDQ5ICov Ci0jZW5kaWYgLyogRlJFRUJTRDUwICovCi0jZW5kaWYgLyogRlJFRUJTRDUxICovCi0jZWxzZQot I2lmZGVmIF9fMzg2QlNEX18KLSNkZWZpbmUgSEVSQUxEICIgMzg2QlNEIgotI2Vsc2UKLSNkZWZp bmUgSEVSQUxEICIgNC40QlNEIgotI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KLSNlbmRpZiAvKiBf X0ZyZWVCU0RfXyAqLwotI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KLSNlbmRpZiAvKiBfX2JzZGlf XyAqLwotI2VuZGlmIC8qIF9fT3BlbkJTRF9fICovCi0jZW5kaWYgLyogTUFDT1NYICovCi0jZW5k aWYgLyogQlNENDQgKi8KLQotI2lmZGVmIEVOQ09SRQotI2lmZGVmIEJTRDQzCi0jZGVmaW5lIEhF UkFMRCAiIEVuY29yZSBNdWx0aW1heCBVTUFYIDQuMyIKLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAi IEVuY29yZSBNdWx0aW1heCBVTUFYIDQuMiIKLSNlbmRpZgotI2VuZGlmIC8qIEVOQ09SRSAqLwot Ci0jaWZkZWYgQlNEMjkKLSNkZWZpbmUgSEVSQUxEICIgMi45IEJTRCIKLSNlbmRpZiAvKiBCU0Qy OSAqLwotCi0jaWZkZWYgQlNENDEKLSNkZWZpbmUgSEVSQUxEICIgNC4xIEJTRCIKLSNlbmRpZiAv KiBCU0Q0MSAqLwotCi0jaWZkZWYgQzcwCi0jZGVmaW5lIEhFUkFMRCAiIEJCTiBDLzcwIgotI2Vu ZGlmIC8qIGM3MCAqLwotCi0jaWZkZWYgQ0lFCi0jZGVmaW5lIEhFUkFMRCAiIENJRSBTeXN0ZW1z IDY4MC8yMCBSZWd1bHVzIgotI2VuZGlmIC8qIENJRSAqLwotCi0jaWZkZWYgQ09IRVJFTlQKLSNp ZmRlZiBfSTM4NgotI2RlZmluZSBIRVJBTEQgIiBNV0MgQ29oZXJlbnQgMzg2IDQueCIKLSNpZm5k ZWYgaTM4NgotI2RlZmluZSBpMzg2Ci0jZW5kaWYgLyogaTM4NiAqLwotI2Vsc2UKLSNkZWZpbmUg SEVSQUxEICIgUEMvQVQgTVdDIENvaGVyZW50IDI4NiAzLngiCi0jaWZuZGVmIGkyODYKLSNkZWZp bmUgaTI4NgotI2VuZGlmIC8qIGkyODYgKi8KLSNlbmRpZiAvKiBfSTM4NiAqLwotI2VuZGlmIC8q IENPSEVSRU5UICovCi0KLSNpZmRlZiBDT05WRVg5Ci0jZGVmaW5lIEhFUkFMRCAiIENvbnZleC9P UyIKLSNlbmRpZiAvKiBDT05WRVg5ICovCi0KLSNpZmRlZiBDT05WRVgxMAotI2RlZmluZSBIRVJB TEQgIiBDb252ZXgvT1MgMTAuMSIKLSNlbmRpZiAvKiBDT05WRVgxMCAqLwotCi0jaWZkZWYgX0NS QVkKLSNpZmRlZiBfQ1JBWUNPTQotI2RlZmluZSBIRVJBTEQgIiBDcmF5IENTT1MiCi0jZWxzZSAv KiBfQ1JBWUNPTSAqLwotI2RlZmluZSBIRVJBTEQgIiBDcmF5IFVOSUNPUyIKLSNlbmRpZiAvKiBf Q1JBWUNPTSAqLwotI2VuZGlmIC8qIF9DUkFZICovCi0KLSNpZmRlZiBER1VYCi0jaWZkZWYgREdV WDU0NDIwCi0jZGVmaW5lIEhFUkFMRCAiIERhdGEgR2VuZXJhbCBERy9VWCBSNC4yMCIKLSNlbHNl Ci0jaWZkZWYgREdVWDU0NDExCi0jZGVmaW5lIEhFUkFMRCAiIERhdGEgR2VuZXJhbCBERy9VWCBS NC4xMSIKLSNlbHNlCi0jaWZkZWYgREdVWDU0NDEwCi0jZGVmaW5lIEhFUkFMRCAiIERhdGEgR2Vu ZXJhbCBERy9VWCBSNC4xMCIKLSNlbHNlCi0jaWZkZWYgREdVWDU0MzEwCi0jZGVmaW5lIEhFUkFM RCAiIERhdGEgR2VuZXJhbCBERy9VWCA1LjRSMy4xMCIKLSNlbHNlCi0jaWZkZWYgREdVWDU0Mwot I2RlZmluZSBIRVJBTEQgIiBEYXRhIEdlbmVyYWwgREcvVVggNS40UjMuMDAiCi0jZWxzZQotI2lm ZGVmIERHVVg1NDAKLSNkZWZpbmUgSEVSQUxEICIgRGF0YSBHZW5lcmFsIERHL1VYIDUuNCIKLSNl bHNlCi0jaWZkZWYgREdVWDQzMAotI2RlZmluZSBIRVJBTEQgIiBEYXRhIEdlbmVyYWwgREcvVVgg NC4zMCIKLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAiIERhdGEgR2VuZXJhbCBERy9VWCIKLSNlbmRp ZiAvKiBER1VYNDMwICovCi0jZW5kaWYgLyogREdVWDU0MCAqLwotI2VuZGlmIC8qIERHVVg1NDMg Ki8KLSNlbmRpZiAvKiBER1VYNTQzMTAgKi8KLSNlbmRpZiAvKiBER1VYNTQ0MTAgKi8KLSNlbmRp ZiAvKiBER1VYNTQ0MTEgKi8KLSNlbmRpZiAvKiBER1VYNTQ0MjAgKi8KLSNlbmRpZiAvKiBER1VY ICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotI2lmbmRlZiBIRVJBTEQKLSNkZWZpbmUgSEVSQUxE ICIgRGF0YSBHZW5lcmFsIEFPUy9WUyIKLSNlbmRpZiAvKiBIRVJBTEQgKi8KLSNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLwotCi0jaWZkZWYgU0lOSVgKLSNpZmRlZiBTTkk1NDQKLSNkZWZpbmUgSEVS QUxEICIgU2llbWVucyBOaXhkb3JmIFJlbGlhbnQgVU5JWCBWNS40NCIKLSNlbHNlCi0jaWZkZWYg U05JNTQzCi0jZGVmaW5lIEhFUkFMRCAiIFNpZW1lbnMgTml4ZG9yZiBSZWxpYW50IFVOSVggVjUu NDMiCi0jZWxzZQotI2lmZGVmIFNOSTU0MQotI2RlZmluZSBIRVJBTEQgIiBTaWVtZW5zIE5peGRv cmYgU0lOSVggVjUuNDEiCi0jZWxzZQotI2RlZmluZSBIRVJBTEQgIiBTaWVtZW5zIE5peGRvcmYg U0lOSVggVjUuNDIiCi0jZW5kaWYgLyogU05JNTQxICovCi0jZW5kaWYgLyogU05JNTQzICovCi0j ZW5kaWYgLyogU05JNTQ0ICovCi0jZW5kaWYgLyogU0lOSVggKi8KLQotI2lmZGVmIFBPV0VSTUFY Ci0jZGVmaW5lIEhFUkFMRCAiIENvbmN1cnJlbnQgUG93ZXJNQVggT1MiCi0jZW5kaWYgLyogUE9X RVJNQVggKi8KLQotI2lmZGVmIERFTExfU1ZSNAotI2RlZmluZSBIRVJBTEQgIiBEZWxsIFN5c3Rl bSBWIFI0IgotI2VuZGlmIC8qIERFTExfU1ZSNCAqLwotCi0jaWZkZWYgTkNSTVBSQVMKLSNkZWZp bmUgSEVSQUxEICIgTkNSIE1QLVJBUyIKLSNlbmRpZiAvKiBOQ1JNUFJBUyAqLwotCi0jaWZkZWYg VU5JWFdBUkUKLSNkZWZpbmUgSEVSQUxEICIgVW5peFdhcmUiCi0jZWxzZQotI2lmZGVmIE9MRF9V TklYV0FSRQotI2RlZmluZSBIRVJBTEQgIiBVbml4V2FyZSIKLSNlbmRpZiAvKiBPTERfVU5JWFdB UkUgKi8KLSNlbmRpZiAvKiBVTklYV0FSRSAqLwotCi0jaWZkZWYgSUNMX1NWUjQKLSNkZWZpbmUg SEVSQUxEICIgSUNMIFN5c3RlbSBWIFI0IERSUyBOL1giCi0jZW5kaWYgLyogSUNMX1NWUjQgKi8K LQotI2lmZGVmIEZUMTgKLSNpZmRlZiBGVDIxCi0jZGVmaW5lIEhFUkFMRCAiIEZvcnR1bmUgRm9y OlBybyAyLjEiCi0jZWxzZQotI2RlZmluZSBIRVJBTEQgIiBGb3J0dW5lIEZvcjpQcm8gMS44Igot I2VuZGlmIC8qIEZUMjEgKi8KLSNlbmRpZiAvKiBGVDE4ICovCi0KLSNpZmRlZiBHRU1ET1MKLSNk ZWZpbmUgSEVSQUxEICIgQXRhcmkgU1QgR0VNIDEuMCIKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQot I2lmZGVmIFhGNjhSM1Y2Ci0jZGVmaW5lIEhFUkFMRCAiIE1vdG9yb2xhIFVOSVggU3lzdGVtIFYv NjggUjNWNiIKLSNlbmRpZiAvKiBYRjY4UjNWNiAqLwotCi0jaWZkZWYgWEY4OFIzMgotI2RlZmlu ZSBIRVJBTEQgIiBNb3Rvcm9sYSBVTklYIFN5c3RlbSBWLzg4IFIzMiIKLSNlbmRpZiAvKiBYRjg4 UjMyICovCi0KLSNpZmRlZiBJMzg2SVgKLSNpZmRlZiBTVlIzSkMKLSNkZWZpbmUgSEVSQUxEICIg SW50ZXJhY3RpdmUgVU5JWCBTeXN0ZW0gVi8zODYgUjMuMiIKLSNlbHNlCi0jZGVmaW5lIEhFUkFM RCAiIEludGVyYWN0aXZlIFN5c3RlbXMgQ29ycCAzODYvaXgiCi0jZW5kaWYgLyogU1ZSM0pDICov Ci0jZW5kaWYgLyogSTM4NklYICovCi0KLSNpZmRlZiBJUklYNjUKLSNkZWZpbmUgSEVSQUxEICIg U2lsaWNvbiBHcmFwaGljcyBJUklYIDYuNSIKLSNlbHNlCi0jaWZkZWYgSVJJWDY0Ci0jZGVmaW5l IEhFUkFMRCAiIFNpbGljb24gR3JhcGhpY3MgSVJJWCA2LjQiCi0jZWxzZQotI2lmZGVmIElSSVg2 MwotI2RlZmluZSBIRVJBTEQgIiBTaWxpY29uIEdyYXBoaWNzIElSSVggNi4zIgotI2Vsc2UKLSNp ZmRlZiBJUklYNjIKLSNkZWZpbmUgSEVSQUxEICIgU2lsaWNvbiBHcmFwaGljcyBJUklYIDYuMiIK LSNlbHNlCi0jaWZkZWYgSVJJWDYwCi0jZGVmaW5lIEhFUkFMRCAiIFNpbGljb24gR3JhcGhpY3Mg SVJJWCA2LjAiCi0jZWxzZQotI2lmZGVmIElSSVg1MwotI2RlZmluZSBIRVJBTEQgIiBTaWxpY29u IEdyYXBoaWNzIElSSVggNS4zIgotI2Vsc2UKLSNpZmRlZiBJUklYNTIKLSNkZWZpbmUgSEVSQUxE ICIgU2lsaWNvbiBHcmFwaGljcyBJUklYIDUuMiIKLSNlbHNlCi0jaWZkZWYgSVJJWDUxCi0jZGVm aW5lIEhFUkFMRCAiIFNpbGljb24gR3JhcGhpY3MgSVJJWCA1LjEiCi0jZWxzZQotI2lmZGVmIElS SVg0MAotI2RlZmluZSBIRVJBTEQgIiBTaWxpY29uIEdyYXBoaWNzIElSSVggNC4wIgotI2VuZGlm IC8qIElSSVg0MCAqLwotI2VuZGlmIC8qIElSSVg1MSAqLwotI2VuZGlmIC8qIElSSVg1MiAqLwot I2VuZGlmIC8qIElSSVg1MyAqLwotI2VuZGlmIC8qIElSSVg2MCAqLwotI2VuZGlmIC8qIElSSVg2 MiAqLwotI2VuZGlmIC8qIElSSVg2MyAqLwotI2VuZGlmIC8qIElSSVg2NCAqLwotI2VuZGlmIC8q IElSSVg2NSAqLwotCi0jaWZkZWYgSVNJSUkKLSNkZWZpbmUgSEVSQUxEICIgSW50ZXJhY3RpdmUg U3lzdGVtcyBDb3JwIFN5c3RlbSBJSUkiCi0jZW5kaWYgLyogSVNJSUkgKi8KLQotI2lmZGVmIElY MzcwCi0jZGVmaW5lIEhFUkFMRCAiIElCTSBJWC8zNzAiCi0jZW5kaWYgLyogSVgzNzAgKi8KLQot I2lmZGVmIEhQVVgKLSNpZmRlZiBIUFVYNQotI2RlZmluZSBIRVJBTEQgIiBIUC1VWCA1LjAwIgot I2Vsc2UKLSNpZmRlZiBIUFVYNgotI2RlZmluZSBIRVJBTEQgIiBIUC1VWCA2LjAwIgotI2Vsc2UK LSNpZmRlZiBIUFVYNwotI2RlZmluZSBIRVJBTEQgIiBIUC1VWCA3LjAwIgotI2Vsc2UKLSNpZmRl ZiBIUFVYOAotI2RlZmluZSBIRVJBTEQgIiBIUC1VWCA4LjAwIgotI2Vsc2UKLSNpZmRlZiBIUFVY OQotI2RlZmluZSBIRVJBTEQgIiBIUC1VWCA5LjAwIgotI2Vsc2UKLSNpZmRlZiBIUFVYMTEwMAot I2RlZmluZSBIRVJBTEQgIiBIUC1VWCAxMS4wMCIKLSNlbHNlCi0jaWZkZWYgSFBVWDEwCi0jaWZk ZWYgSFBVWDEwMzAKLSNkZWZpbmUgSEVSQUxEICIgSFAtVVggMTAuMzAiCi0jZWxzZQotI2lmZGVm IEhQVVgxMDIwCi0jZGVmaW5lIEhFUkFMRCAiIEhQLVVYIDEwLjIwIgotI2Vsc2UKLSNpZmRlZiBI UFVYMTAxMAotI2RlZmluZSBIRVJBTEQgIiBIUC1VWCAxMC4xMCIKLSNlbHNlCi0jaWZkZWYgSFBV WDEweHgKLSNkZWZpbmUgSEVSQUxEICIgSFAtVVggMTAueHgiCi0jZWxzZQotI2RlZmluZSBIRVJB TEQgIiBIUC1VWCAxMC4wMCIKLSNlbmRpZiAvKiBIUFVYMTBYWCAqLwotI2VuZGlmIC8qIEhQVVgx MDEwICovCi0jZW5kaWYgLyogSFBVWDEwMjAgKi8KLSNlbmRpZiAvKiBIUFVYMTAzMCAqLwotI2Vs c2UKLSNkZWZpbmUgSEVSQUxEICIgSFAtVVgiCi0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYg LyogSFBVWDExMDAgKi8KLSNlbmRpZiAvKiBIUFVYOSAgKi8KLSNlbmRpZiAvKiBIUFVYOCAgKi8K LSNlbmRpZiAvKiBIUFVYNyAgKi8KLSNlbmRpZiAvKiBIUFVYNiAgKi8KLSNlbmRpZiAvKiBIUFVY NSAgKi8KLSNlbmRpZiAvKiBIUFVYICAgKi8KLQotI2lmbmRlZiBNSU5JWAotI2lmZGVmIE1JTklY MzE1Ci0jZGVmaW5lIE1JTklYCi0jZW5kaWYJLyogTUlOSVgzMTUgKi8KLSNlbmRpZgkvKiBNSU5J WCAqLwotCi0jaWZuZGVmIE1JTklYCi0jaWZkZWYgTUlOSVgzCi0jZGVmaW5lIE1JTklYCi0jZW5k aWYJLyogTUlOSVgzICovCi0jZW5kaWYJLyogTUlOSVggKi8KLQotI2lmZGVmIE1JTklYCi0jaWZk ZWYgTUlOSVgzMTUKLSNkZWZpbmUgSEVSQUxEICIgTWluaXggMy4xLjUiCi0jaWZuZGVmIE1JTklY MwotI2RlZmluZSBNSU5JWDMKLSNlbmRpZgkvKiBNSU5JWDMgKi8KLSNlbmRpZgkvKiBNSU5JWDMx NSAqLwotI2lmZGVmIE1JTklYMwotI2lmbmRlZiBNSU5JWDIKLSNkZWZpbmUgTUlOSVgyCi0jZW5k aWYJLyogTUlOSVgyICovCi0jaWZuZGVmIEhFUkFMRAotI2RlZmluZSBIRVJBTEQgIiBNaW5peCAz LjAiCi0jZW5kaWYJLyogSEVSQUxEICovCi0jZWxzZQotI2lmZGVmIE1JTklYMgotI2RlZmluZSBI RVJBTEQgIiBNaW5peCAyLjAiCi0jZWxzZQotI2RlZmluZSBIRVJBTEQgIiBNaW5peCAxLjAiCi0j ZW5kaWYgLyogTUlOSVgzICovCi0jZW5kaWYgLyogTUlOSVgyICovCi0jZW5kaWYgLyogTUlOSVgg Ki8KLQotI2lmZGVmIE1JUFMKLSNkZWZpbmUgSEVSQUxEICIgTUlQUyBSSVNDL09TIFNWUjMiCi0j ZW5kaWYgLyogTUlQUyAqLwotCi0jaWZkZWYgTkVYVAotI2lmZGVmIE9QRU5TVEVQNDIKLSNkZWZp bmUgSEVSQUxEICIgT1BFTlNURVAgNC4yIgotI2Vsc2UKLSNpZmRlZiBORVhUMzMKLSNkZWZpbmUg SEVSQUxEICIgTmVYVFNURVAgMy4zIgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgTmVYVFNURVAi Ci0jZW5kaWYgLyogTkVYVDMzICovCi0jZW5kaWYgLyogT1BFTlNURVA0MiAqLwotI2VuZGlmIC8q IE5FWFQgKi8KLQotI2lmZGVmIE9TRgotI2lmZGVmIGkzODYKLSNkZWZpbmUgSEVSQUxEICIgREVD cGMgT1NGLzEiCi0jaWZkZWYgX19HTlVDCi0jZGVmaW5lIE9TRlBDCi0jZW5kaWYgLyogX19HTlVD ICovCi0jZWxzZSAgLyogTm90IGkzODYgc28gQWxwaGEgKi8KLQotI2lmZGVmIFRSVTY0Ci0KLSNp ZmRlZiBPU0Y1MUIKLSNkZWZpbmUgSEVSQUxEICIgQ29tcGFxIFRydTY0IFVOSVggNS4xQiIKLSNl bHNlCi0jaWZkZWYgT1NGNTFBCi0jZGVmaW5lIEhFUkFMRCAiIENvbXBhcSBUcnU2NCBVTklYIDUu MUEiCi0jZWxzZQotI2lmZGVmIE9TRjUwCi0jZGVmaW5lIEhFUkFMRCAiIENvbXBhcSBUcnU2NCBV TklYIDUuMEEiCi0jZWxzZQotI2lmZGVmIE9TRjQwRwotI2RlZmluZSBIRVJBTEQgIiBDb21wYXEg VHJ1NjQgVU5JWCA0LjBHIgotI2Vsc2UKLSNpZmRlZiBPU0Y0MEYKLSNkZWZpbmUgSEVSQUxEICIg Q29tcGFxIFRydTY0IFVOSVggNC4wRiIKLSNlbHNlCi0jaWZkZWYgT1NGNDBFCi0jZGVmaW5lIEhF UkFMRCAiIENvbXBhcSBUcnU2NCBVTklYIDQuMEUiCi0jZW5kaWYgLyogT1NGNDBFICovCi0jZW5k aWYgLyogT1NGNDBGICovCi0jZW5kaWYgLyogT1NGNDBHICovCi0jZW5kaWYgLyogT1NGNTAgKi8K LSNlbmRpZiAvKiBPU0Y1MUEgKi8KLSNlbmRpZiAvKiBPU0Y1MUIgKi8KLQotI2Vsc2UgIC8qIE5v dCBUUlU2NCAqLwotCi0jaWZkZWYgT1NGNDAKLSNkZWZpbmUgSEVSQUxEICIgRGlnaXRhbCBVTklY IDQuMCIKLSNlbHNlCi0jaWZkZWYgT1NGMzIKLSNkZWZpbmUgSEVSQUxEICIgRGlnaXRhbCBVTklY IDMuMiIKLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAiIERFQyBPU0YvMSBBbHBoYSIKLSNlbmRpZiAv KiBPU0Y0MCAqLwotI2VuZGlmIC8qIE9TRjMyICovCi0KLSNlbmRpZiAvKiBUUlU2NCAqLwotI2Vu ZGlmIC8qIGkzODYgKi8KLSNlbmRpZiAvKiBPU0YgKi8KLQotI2lmZGVmIFBDSVgKLSNkZWZpbmUg SEVSQUxEICIgUEMvSVgiCi0jZW5kaWYgLyogUENJWCAqLwotCi0jaWZkZWYgc3hhRTUwCi0jZGVm aW5lIEhFUkFMRCAiIFBGVSBTWC9BIFYxMC9MNTAiCi0jZW5kaWYgLyogc3hhRTUwICovCi0KLSNp ZmRlZiBQUk9WWDEKLSNkZWZpbmUgSEVSQUxEICIgREVDIFByb2Zlc3Npb25hbCAzMDAgKFZlbml4 IDEuMCkiCi0jZW5kaWYgLyogUFJPVlgxICovCi0KLSNpZmRlZiBQWVJBTUlECi0jaWZkZWYgU1ZS NAotI2RlZmluZSBIRVJBTEQgIiBQeXJhbWlkIERDL09TeCIKLSNlbHNlCi0jZGVmaW5lIEhFUkFM RCAiIFB5cmFtaWQgRHVhbCBQb3J0IE9TeCIKLSNlbmRpZiAvKiBTVlI0ICovCi0jZW5kaWYgLyog UFlSQU1JRCAqLwotCi0jaWZkZWYgUlRBSVgKLSNkZWZpbmUgSEVSQUxEICIgSUJNIFJUIFBDIChB SVggMi4yKSIKLSNlbmRpZiAvKiBSVEFJWCAqLwotCi0jaWZkZWYgUlRVCi0jZGVmaW5lIEhFUkFM RCAiIE1hc3Njb21wL0NvbmN1cnJlbnQgUlRVIgotI2VuZGlmIC8qIFJUVSAqLwotCi0jaWZkZWYg c29ueV9uZXdzCi0jZGVmaW5lIEhFUkFMRCAiIFNPTlkgTkVXUyIKLSNlbmRpZiAvKiBzb255X25l d3MgKi8KLQotI2lmZGVmIFNPTEFSSVMyNAotI2RlZmluZSBIRVJBTEQgIiBTb2xhcmlzIDIuNCIK LSNlbHNlCi0jaWZkZWYgU09MQVJJUzIzCi0jZGVmaW5lIEhFUkFMRCAiIFNvbGFyaXMgMi4zIgot I2Vsc2UKLSNpZmRlZiBTT0xBUklTCi0jZGVmaW5lIEhFUkFMRCAiIFNvbGFyaXMgMi54IgotI2Vu ZGlmIC8qIFNPTEFSSVMgKi8KLSNlbmRpZiAvKiBTT0xBUklTMjMgKi8KLSNlbmRpZiAvKiBTT0xB UklTMjQgKi8KLQotI2lmZGVmIFNVTk9TNAotI2lmZGVmIEJTRDQKLSNpZmRlZiBTVU5PUzQxCi0j ZGVmaW5lIEhFUkFMRCAiIFN1bk9TIDQuMSIKLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAiIFN1bk9T IDQuMCIKLSNlbmRpZiAvKiBTVU5PUzQxICovCi0jZW5kaWYgLyogQlNENCAqLwotI2VuZGlmIC8q IFNVTk9TNCAqLwotCi0jaWZkZWYgU1VONFM1Ci0jaWZkZWYgSERCVVVDUAotI2RlZmluZSBIRVJB TEQgIiBTdW5PUyA0LjEgKFNWUjMpIgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgU3VuT1MgNC4w IChTVlIzKSIKLSNlbmRpZiAvKiBIREJVVUNQICovCi0jZW5kaWYgLyogU1VONFM1ICovCi0KLSNp ZmRlZiBTVFJBVFVTCi0jZGVmaW5lIEhFUkFMRCAiIFN0cmF0dXMgVk9TIgotI2VuZGlmIC8qIFNU UkFUVVMgKi8KLQotI2lmZGVmIFRPV0VSMQotI2RlZmluZSBIRVJBTEQgIiBOQ1IgVG93ZXIgMTYz MiBPUyAxLjAyIgotI2VuZGlmIC8qIFRPV0VSMSAqLwotCi0jaWZkZWYgVFJTMTYKLSNkZWZpbmUg SEVSQUxEICIgVGFuZHkgMTYvNjAwMCBYZW5peCAzLjAiCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5l IENLQ1BVICJtYzY4MDAwIgotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogVFJTMTYgKi8K LQotI2lmZGVmIHUzYjIKLSNpZm5kZWYgSEVSQUxECi0jaWZkZWYgU1ZSMwotI2RlZmluZSBIRVJB TEQgIiBBVCZUIDNCMiBTeXN0ZW0gViBSMyIKLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAiIEFUJlQg M0IyIFN5c3RlbSBWIgotI2VuZGlmIC8qIFNWUjMgKi8KLSNlbmRpZiAvKiBIRVJBTEQgKi8KLSNl bmRpZiAvKiB1M2IyICovCi0KLSNpZmRlZiB1bHRyaXgKLSNpZmRlZiB2YXgKLSNpZmRlZiBVTFRS SVgzCi0jZGVmaW5lIEhFUkFMRCAiIFZBWC9VTFRSSVggMy4wIgotI2Vsc2UKLSNkZWZpbmUgSEVS QUxEICIgVkFYL1VMVFJJWCIKLSNlbmRpZiAvKiBVTFRSSVgzICovCi0jZWxzZQotI2lmZGVmIG1p cHMKLSNpZmRlZiBVTFRSSVg0MwotI2RlZmluZSBIRVJBTEQgIiBERUNzdGF0aW9uL1VMVFJJWCA0 LjMiCi0jZWxzZQotI2lmZGVmIFVMVFJJWDQ0Ci0jZGVmaW5lIEhFUkFMRCAiIERFQ3N0YXRpb24v VUxUUklYIDQuNCIKLSNlbHNlCi0jaWZkZWYgVUxUUklYNDUKLSNkZWZpbmUgSEVSQUxEICIgREVD c3RhdGlvbi9VTFRSSVggNC41IgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgREVDc3RhdGlvbi9V TFRSSVgiCi0jZW5kaWYgLyogVUxUUklYNDUgKi8KLSNlbmRpZiAvKiBVTFRSSVg0NCAqLwotI2Vu ZGlmIC8qIFVMVFJJWDQzICovCi0jZWxzZQotI2RlZmluZSBIRVJBTEQgIiBVTFRSSVgiCi0jZW5k aWYgLyogbWlwcyAqLwotI2VuZGlmIC8qIHZheCAqLwotI2VuZGlmIC8qIHVsdHJpeCAqLwotCi0j aWZkZWYgT1hPUwotI2RlZmluZSBIRVJBTEQgIiBPbGl2ZXR0aSBYL09TIgotI2VuZGlmIC8qIE9Y T1MgKi8KLQotI2lmZGVmIF8zODZCU0QKLSNkZWZpbmUgSEVSQUxEICIgMzg2QlNEIgotI2VuZGlm IC8qIF8zODZCU0QgKi8KLQotI2lmZGVmIFBPU0lYCi0jaWZkZWYgUFRYCi0jaWZkZWYgUFRYNAot I2RlZmluZSBIRVJBTEQgIiBEWU5JWC9wdHggVjQiCi0jZWxzZQotI2RlZmluZSBIRVJBTEQgIiBE WU5JWC9wdHgiCi0jZW5kaWYgLyogUFRYNCAqLwotI2Vsc2UgIC8qIFBUWCAqLwotI2lmbmRlZiBP U0YJCS8qIExldCBPU0YgLURQT1NJWCBrZWVwIHByZXZpb3VzbHkgZGVmaW5lZCBIRVJBTEQgKi8K LSNpZmRlZiBIRVJBTEQKLSN1bmRlZiBIRVJBTEQKLSNlbmRpZiAvKiBIRVJBTEQgKi8KLSNlbmRp ZiAvKiBPU0YgKi8KLSNpZmRlZiBPVTgKLSNkZWZpbmUgSEVSQUxEICIgT3BlblVOSVggOCIKLSNl bHNlCi0jaWZkZWYgVVc3Ci0jZGVmaW5lIEhFUkFMRCAiIFVuaXh3YXJlIDciCi0jZWxzZQotI2lm ZGVmIFFOWAotI2lmZGVmIFFOWDE2Ci0jZGVmaW5lIEhFUkFMRCAiIFFOWCAxNi1iaXQiCi0jZWxz ZQotI2RlZmluZSBIRVJBTEQgIiBRTlggMzItYml0IgotI2VuZGlmIC8qIFFOWDE2ICovCi0jZWxz ZQotI2lmZGVmIE5FVVRSSU5PCi0jZGVmaW5lIEhFUkFMRCAiIFFOWCBOZXV0cmlubyAyIgotI2Vs c2UgIC8qIE5FVVRSSU5PICovCi0jaWZkZWYgUU5YNgotI2RlZmluZSBIRVJBTEQgIiBRTlg2Igot I2Vsc2UgIC8qIFFOWDYgKi8KLSNpZmRlZiBfX2xpbnV4X18KLSNpZmRlZiBaU0w1NTAwCi0jZGVm aW5lIEhFUkFMRCAiIFNoYXJwIFphdXJ1cyBTTC01NTAwIgotI2Vsc2UKLSNpZmRlZiBSSDkwCi0j ZGVmaW5lIEhFUkFMRCAiIFJlZCBIYXQgTGludXggOS4wIgotI2Vsc2UKLSNpZmRlZiBSSDgwCi0j ZGVmaW5lIEhFUkFMRCAiIFJlZCBIYXQgTGludXggOC4wIgotI2Vsc2UKLSNpZmRlZiBSSDczCi0j ZGVmaW5lIEhFUkFMRCAiIFJlZCBIYXQgTGludXggNy4zIgotI2Vsc2UKLSNpZmRlZiBSSDcyCi0j ZGVmaW5lIEhFUkFMRCAiIFJlZCBIYXQgTGludXggNy4yIgotI2Vsc2UKLSNpZmRlZiBSSDcxCi0j ZGVmaW5lIEhFUkFMRCAiIFJlZCBIYXQgTGludXggNy4xIgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxE ICIgTGludXgiCi0jZW5kaWYgLyogUkg3MSAqLwotI2VuZGlmIC8qIFJINzIgKi8KLSNlbmRpZiAv KiBSSDczICovCi0jZW5kaWYgLyogUkg4MCAqLwotI2VuZGlmIC8qIFJIOTAgKi8KLSNlbmRpZiAv KiBaU0w1NTAwICovCi0jZWxzZSAgLyogX19saW51eF9fICovCi0jaWZkZWYgXzM4NkJTRAkJCQkv KiAzODZCU0QgSm9saXggKi8KLSNkZWZpbmUgSEVSQUxEICIgMzg2QlNEIgotI2Vsc2UKLSNpZmRl ZiBMWU5YT1MJCQkJLyogTHlueCBPUyAyLjIgKi8KLSNkZWZpbmUgSEVSQUxEICIgTHlueCBPUyIK LSNlbHNlCi0jaWZkZWYgUGxhbjkKLSNkZWZpbmUgSEVSQUxEICIgUGxhbiA5IGZyb20gQmVsbCBM YWJzIgotI2Vsc2UKLSNpZmRlZiBTT0xBUklTMTEKLSNkZWZpbmUgSEVSQUxEICIgU29sYXJpcyAx MSIKLSNlbHNlCi0jaWZkZWYgU09MQVJJUzEwCi0jZGVmaW5lIEhFUkFMRCAiIFNvbGFyaXMgMTAi Ci0jZWxzZQotI2lmZGVmIFNPTEFSSVM5Ci0jZGVmaW5lIEhFUkFMRCAiIFNvbGFyaXMgOSIKLSNl bHNlCi0jaWZkZWYgU09MQVJJUzgKLSNkZWZpbmUgSEVSQUxEICIgU29sYXJpcyA4IgotI2Vsc2UK LSNpZmRlZiBTT0xBUklTNwotI2RlZmluZSBIRVJBTEQgIiBTb2xhcmlzIDciCi0jZWxzZQotI2lm ZGVmIFNPTEFSSVMyNgotI2RlZmluZSBIRVJBTEQgIiBTb2xhcmlzIDIuNiIKLSNlbHNlCi0jaWZk ZWYgU09MQVJJUzI1Ci0jZGVmaW5lIEhFUkFMRCAiIFNvbGFyaXMgMi41IgotI2Vsc2UKLSNpZmRl ZiBTT0xBUklTMjQKLSNkZWZpbmUgSEVSQUxEICIgU29sYXJpcyAyLjQiCi0jZWxzZQotI2lmZGVm IFNPTEFSSVMKLSNkZWZpbmUgSEVSQUxEICIgU29sYXJpcyAyLngiCi0jZW5kaWYgLyogU09MQVJJ UyAqLwotI2VuZGlmIC8qIFNPTEFSSVMyNCAqLwotI2VuZGlmIC8qIFNPTEFSSVMyNSAqLwotI2Vu ZGlmIC8qIFNPTEFSSVMyNiAqLwotI2VuZGlmIC8qIFNPTEFSSVM3ICovCi0jZW5kaWYgLyogU09M QVJJUzggKi8KLSNlbmRpZiAvKiBTT0xBUklTOSAqLwotI2VuZGlmIC8qIFNPTEFSSVMxMCAqLwot I2VuZGlmIC8qIFNPTEFSSVMxMSAqLwotI2VuZGlmIC8qIFBsYW45ICovCi0jZW5kaWYgLyogTFlO WE9TICovCi0jZW5kaWYgLyogXzM4NkJTRCAqLwotI2VuZGlmIC8qIF9fbGludXhfXyAqLwotI2Vu ZGlmIC8qIFFOWDYgKi8KLSNlbmRpZiAvKiBORVVUUklOTyAqLwotI2VuZGlmIC8qIFFOWCAqLwot I2VuZGlmIC8qIFVXNyAqLwotI2VuZGlmIC8qIE9VOCAqLwotI2VuZGlmIC8qIFBUWCAqLwotI2Vu ZGlmIC8qIFBPU0lYICovCi0KLSNpZmRlZiBVVFMyNAotI2RlZmluZSBIRVJBTEQgIiBBbWRhaGwg VVRTIDIuNCIKLSNlbmRpZiAvKiBVVFMyNCAqLwotCi0jaWZkZWYgVVRTVgotI2RlZmluZSBIRVJB TEQgIiBBbWRhaGwgVVRTIFYiCi0jZW5kaWYgLyogVVRTViAqLwotCi0jaWZkZWYgVlhWRQotI2Rl ZmluZSBIRVJBTEQgIiBDREMgVlgvVkUgNS4yLjEgU3lzdGVtIFYiCi0jZW5kaWYgLyogVlhWRSAq LwotCi0jaWZkZWYgU0NPMjM0Ci0jaWZkZWYgSEVSQUxECi0jdW5kZWYgSEVSQUxECi0jZW5kaWYg LyogSEVSQUxEICovCi0jZGVmaW5lIEhFUkFMRCAiIFNDTyBYRU5JWCAyLjMuNCIKLSNlbHNlCi0j aWZkZWYgQ0tfU0NPMzJWNAotI2lmZGVmIEhFUkFMRAotI3VuZGVmIEhFUkFMRAotI2VuZGlmIC8q IEhFUkFMRCAqLwotI2lmZGVmIE9EVDMwCi0jZGVmaW5lIEhFUkFMRCAiIFNDTyBPRFQgMy4wIgot I2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgU0NPIFVOSVgvMzg2IFY0IgotI2VuZGlmIC8qIE9EVDMw ICovCi0jZWxzZQotI2lmZGVmIENLX1NDT1Y1Ci0jaWZkZWYgSEVSQUxECi0jdW5kZWYgSEVSQUxE Ci0jZW5kaWYgLyogSEVSQUxEICovCi0jaWZkZWYgU0NPX09TUjUwNwotI2RlZmluZSBIRVJBTEQg IiBTQ08gT3BlblNlcnZlciBSNS4wLjciCi0jZWxzZQotI2lmZGVmIFNDT19PU1I1MDZBCi0jZGVm aW5lIEhFUkFMRCAiIFNDTyBPcGVuU2VydmVyIFI1LjAuNmEiCi0jZWxzZQotI2lmZGVmIFNDT19P U1I1MDYKLSNkZWZpbmUgSEVSQUxEICIgU0NPIE9wZW5TZXJ2ZXIgUjUuMC42IgotI2Vsc2UKLSNp ZmRlZiBTQ09fT1NSNTA1Ci0jZGVmaW5lIEhFUkFMRCAiIFNDTyBPcGVuU2VydmVyIFI1LjAuNSIK LSNlbHNlCi0jaWZkZWYgU0NPX09TUjUwNAotI2RlZmluZSBIRVJBTEQgIiBTQ08gT3BlblNlcnZl ciBSNS4wLjQiCi0jZWxzZQotI2lmZGVmIFNDT19PU1I1MDIKLSNkZWZpbmUgSEVSQUxEICIgU0NP IE9wZW5TZXJ2ZXIgUjUuMC4yIgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgU0NPIE9wZW5TZXJ2 ZXIgUjUuMCIKLSNlbmRpZiAvKiBTQ09fT1NSNTAyICovCi0jZW5kaWYgLyogU0NPX09TUjUwNCAq LwotI2VuZGlmIC8qIFNDT19PU1I1MDUgKi8KLSNlbmRpZiAvKiBTQ09fT1NSNTA2ICovCi0jZW5k aWYgLyogU0NPX09TUjUwNkEgKi8KLSNlbmRpZiAvKiBTQ09fT1NSNTA3ICovCi0jZWxzZQotI2lm ZGVmIFhFTklYCi0jaWZkZWYgSEVSQUxECi0jdW5kZWYgSEVSQUxECi0jZW5kaWYgLyogSEVSQUxE ICovCi0jaWZkZWYgTV9VTklYCi0jZGVmaW5lIEhFUkFMRCAiIFNDTyBVTklYLzM4NiIKLSNlbHNl Ci0jaWZkZWYgTV9JMzg2Ci0jZGVmaW5lIEhFUkFMRCAiIFhlbml4LzM4NiIKLSNlbHNlCi0jaWZk ZWYgTV9JMjg2Ci0jZGVmaW5lIEhFUkFMRCAiIFhlbml4LzI4NiIKLSNlbHNlCi0jZGVmaW5lIEhF UkFMRCAiIFhlbml4IgotI2VuZGlmIC8qIE1fSTI4NiAqLwotI2VuZGlmIC8qIE1fSTM4NiAqLwot I2VuZGlmIC8qIE1fVU5JWCAqLwotI2VuZGlmIC8qIFhFTklYICAqLwotI2VuZGlmIC8qIENLX1ND T1Y1ICovCi0jZW5kaWYgLyogQ0tfU0NPVjMyVjQgKi8KLSNlbmRpZiAvKiBTQ08yMzQgKi8KLQot I2lmZGVmIFpJTE9HCi0jZGVmaW5lIEhFUkFMRCAiIFppbG9nIFM4MDAwIFpldXMgMy4yMSsiCi0j ZW5kaWYgLyogWklMT0cgKi8KLQotI2lmZGVmIFVURUsKLSNkZWZpbmUgSEVSQUxEICIgVVRlayIK LSNlbmRpZiAvKiBVVEVLICovCi0KLS8qIENhdGNoLWFsbHMgZm9yIGFueXRoaW5nIG5vdCBkZWZp bmVkIGV4cGxpY2l0bHkgYWJvdmUgKi8KLQotI2lmbmRlZiBIRVJBTEQKLSNpZmRlZiBTVlI0Ci0j aWZkZWYgaTM4NgotI2RlZmluZSBIRVJBTEQgIiBBVCZUIFN5c3RlbSBWLzM4NiBSNCIKLSNlbHNl Ci0jaWZkZWYgQU1JWAotI2RlZmluZSBIRVJBTEQgIiBDb21tb2RvcmUgQW1pZ2EgU3lzdGVtIFYv bTY4ayBSNCIKLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAiIEFUJlQgU3lzdGVtIFYgUjQiCi0jZW5k aWYgLyogQU1JWCAqLwotI2VuZGlmIC8qIGkzODYgKi8KLSNlbHNlCi0jaWZkZWYgU1ZSMwotI2Rl ZmluZSBIRVJBTEQgIiBBVCZUIFN5c3RlbSBWIFIzIgotI2Vsc2UKLSNpZmRlZiBBVFRTVgotI2Rl ZmluZSBIRVJBTEQgIiBBVCZUIFN5c3RlbSBJSUkgLyBTeXN0ZW0gViIKLSNlbHNlCi0jaWZkZWYg QlNENDMKLSNpZmRlZiBwZHAxMQotI2RlZmluZSBIRVJBTEQgIiAyLjEwIEJTRCBQRFAtMTEiCi0j ZWxzZQotI2lmZGVmIHZheAotI2RlZmluZSBIRVJBTEQgIiA0LjMgQlNEIFZBWCIKLSNlbHNlCi0j ZGVmaW5lIEhFUkFMRCAiIDQuMyBCU0QiCi0jZW5kaWYgLyogdmF4ICovCi0jZW5kaWYgLyogcGRw MTEgKi8KLSNlbHNlCi0jaWZkZWYgQlNENAotI2lmZGVmIHZheAotI2RlZmluZSBIRVJBTEQgIiA0 LjIgQlNEIFZBWCIKLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAiIDQuMiBCU0QiCi0jZW5kaWYgLyog dmF4ICovCi0jZWxzZQotI2lmZGVmIFY3Ci0jZGVmaW5lIEhFUkFMRCAiIFVOSVggVmVyc2lvbiA3 IgotI2VuZGlmIC8qIFY3ICovCi0jZW5kaWYgLyogQlNENCAqLwotI2VuZGlmIC8qIEJTRDQzICov Ci0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBTVlIzICovCi0jZW5kaWYgLyogU1ZSNCAq LwotI2VuZGlmIC8qIEhFUkFMRCAqLwotI2VuZGlmIC8qIEhFUkFMRCAqLwotCi0jaWZkZWYgT1My Ci0jaWZkZWYgSEVSQUxECi0jdW5kZWYgSEVSQUxECi0jZW5kaWYgLyogSEVSQUxEICovCi0jaWZk ZWYgTlQKLSNkZWZpbmUgSEVSQUxEICIgMzItYml0IFdpbmRvd3MiCi0jZWxzZSAvKiBOVCAqLwot I2RlZmluZSBIRVJBTEQgIiAzMi1iaXQgT1MvMiIKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8q IE9TLzIgKi8KLQotI2lmbmRlZiBIRVJBTEQKLSNkZWZpbmUgSEVSQUxEICIgVW5rbm93biBWZXJz aW9uIgotI2VuZGlmIC8qIEhFUkFMRCAqLwotCi0vKiBIYXJkd2FyZSB0eXBlICovCi0KLSNpZmRl ZiB2YXgJCQkJLyogREVDIFZBWCAqLwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAidmF4 IgotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogIHZheCAqLwotI2lmZGVmIHBkcDExCQkJ CS8qIERFQyBQRFAtMTEgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgInBkcDExIgot I2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogcGRwMTEgKi8KLQotI2lmZGVmIF9fQUxQSEEJ CQkJLyogREVDIEFscGhhICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJBbHBoYSIK LSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIF9fQUxQSEEgKi8KLQotI2lmZGVmIF9fYWxw aGEJCQkJLyogT1NGLzEgdXNlcyBsb3dlcmNhc2UuLi4gKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZp bmUgQ0tDUFUgIkFscGhhIgotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogX19hbHBoYSAq LwotCi0jaWZkZWYgREdVWAkJCQkvKiBPdmVycmlkZSBNb3Rvcm9sYSA4OGsgYXNzdW1wdGlvbiAq LwotI2lmbmRlZiBDS0NQVQkJCQkvKiBOZXcgQVZpaU9OcyBhcmUgSW50ZWwgYmFzZWQuLi4gKi8K LSNpZmRlZiBpNTg2Ci0jZGVmaW5lIENLQ1BVICJpNTg2IgotI2Vsc2UKLSNpZmRlZiBpNDg2Ci0j ZGVmaW5lIENLQ1BVICJpNDg2IgotI2Vsc2UKLSNpZmRlZiBpMzg2Ci0jZGVmaW5lIENLQ1BVICJp Mzg2IgotI2VuZGlmIC8qIGkzODYgKi8KLSNlbmRpZiAvKiBpNDg2ICovCi0jZW5kaWYgLyogaTU4 NiAqLwotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogREdVWCAqLwotCi0vKiBIUCA5MDAw ICovCi0KLSNpZmRlZiBfX2hwOTAwMHM3MDAKLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUg ImhwOTAwMHM3MDAiCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBfX2hwOTAwMHM3MDAg Ki8KLQotI2lmZGVmIF9faHA5MDAwczgwMAotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAi aHA5MDAwczgwMCIKLSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIF9faHA5MDAwczgwMCAq LwotCi0jaWZkZWYgX19ocDkwMDBzNTAwCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJo cDkwMDBzNTAwIgotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogX19ocDkwMDBzNTAwICov Ci0KLSNpZmRlZiBfX2hwOTAwMHM0MDAKLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgImhw OTAwMHM0MDAiCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBfX2hwOTAwMHM0MDAgKi8K LQotI2lmZGVmIF9faHA5MDAwczMwMAotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAiaHA5 MDAwczMwMCIKLSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIF9faHA5MDAwczMwMCAqLwot Ci0jaWZkZWYgX19ocDkwMDBzMjAwCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJocDkw MDBzMjAwIgotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogX19ocDkwMDBzMjAwICovCi0K LSNpZmRlZiBtODgwMDAJCQkJLyogTW90b3JvbGEgODgwMDAgKi8KLSNpZm5kZWYgQ0tDUFUKLSNk ZWZpbmUgQ0tDUFUgIm1jODgwMDAiCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBtODgw MDAgKi8KLSNpZmRlZiBfX3VzaW5nX004OEtCQ1MJCQkvKiBERyBzeW1ib2wgZm9yIE1vdG9yb2xh IDg4MDAwICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJtYzg4MDAwIgotI2VuZGlm IC8qIENLQ1BVICovCi0jZW5kaWYgLyogX191c2luZ19NODhLQkNTICovCi0jaWZkZWYgbTg4awkJ CQkvKiBNb3Rvcm9sYSBzeW1ib2wgZm9yIDg4MDAwICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5l IENLQ1BVICJtYzg4MDAwIgotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogbTg4ayAqLwot I2lmZGVmIG1jNjgwNDAJCQkJLyogTW90b3JvbGEgNjgwNDAgKi8KLSNpZm5kZWYgQ0tDUFUKLSNk ZWZpbmUgQ0tDUFUgIm1jNjgwNDAiCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBtYzY4 MDQwICovCi0jaWZkZWYgbWM2ODAzMAkJCQkvKiBNb3Rvcm9sYSA2ODAzMCAqLwotI2lmbmRlZiBD S0NQVQotI2RlZmluZSBDS0NQVSAibWM2ODAzMCIKLSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlm IC8qIG1jNjgwMzAgKi8KLSNpZmRlZiBtYzY4MDIwCQkJCS8qIE1vdG9yb2xhIDY4MDIwICovCi0j aWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJtYzY4MDIwIgotI2VuZGlmIC8qIENLQ1BVICov Ci0jZW5kaWYgLyogbWM2ODAyMCAqLwotI2lmZGVmIG1jNjgwMTAJCQkJLyogTW90b3JvbGEgNjgw MTAgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgIm1jNjgwMTAiCi0jZW5kaWYgLyog Q0tDUFUgKi8KLSNlbmRpZiAvKiBtYzY4MDEwICovCi0jaWZkZWYgbWM2ODAwMAkJCQkvKiBNb3Rv cm9sYSA2ODAwMCAqLwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAibWM2ODAwMCIKLSNl bmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIG1jNjgwMDAgKi8KLSNpZmRlZiBtYzY4awkJCQkv KiBEaXR0byAodXNlZCBieSBESUFCIERTOTApICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENL Q1BVICJtYzY4MDAwIgotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogbWM2OGsgKi8KLSNp ZmRlZiBtNjgJCQkJLyogRGl0dG8gKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgIm1j NjgwMDAiCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBtNjggKi8KLSNpZmRlZiBtNjhr CQkJCS8qIERpdHRvICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJtYzY4MDAwIgot I2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogbTY4ayAqLwotCi0jaWZkZWYgaWE2NAkJCQkv KiBJQTY0IC8gSXRhbml1bSAqLwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAiaWE2NCIK LSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIGk2ODYgKi8KLQotI2lmZGVmIGk2ODYJCQkJ LyogSW50ZWwgODA2ODYgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgImk2ODYiCi0j ZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBpNjg2ICovCi0KLSNpZmRlZiBpNTg2CQkJCS8q IEludGVsIDgwNTg2ICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJpNTg2IgotI2Vu ZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogaTU4NiAqLwotCi0jaWZkZWYgaTQ4NgkJCQkvKiBJ bnRlbCA4MDQ4NiAqLwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAiaTQ4NiIKLSNlbmRp ZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIGk4MDQ4NiAqLwotI2lmZGVmIGkzODYJCQkJLyogSW50 ZWwgODAzODYgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgImkzODYiCi0jZW5kaWYg LyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBpODAzODYgKi8KLSNpZmRlZiBpMjg2CQkJCS8qIEludGVs IDgwMjg2ICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJpMjg2IgotI2VuZGlmIC8q IENLQ1BVICovCi0jZW5kaWYgLyogaTI4NiAqLwotI2lmZGVmIGkxODYJCQkJLyogSW50ZWwgODAx ODYgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgImkxODYiCi0jZW5kaWYgLyogQ0tD UFUgKi8KLSNlbmRpZiAvKiBpMTg2ICovCi0jaWZkZWYgTV9JNTg2CQkJCS8qIEludGVsIDgwNTg2 ICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJpNTg2IgotI2VuZGlmIC8qIENLQ1BV ICovCi0jZW5kaWYgLyogTV9JNTg2ICovCi0jaWZkZWYgTV9JNDg2CQkJCS8qIEludGVsIDgwNDg2 ICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJpNDg2IgotI2VuZGlmIC8qIENLQ1BV ICovCi0jZW5kaWYgLyogTV9JNDg2ICovCi0jaWZkZWYgX01fSTM4NgkJCQkvKiBJbnRlbCA4MDM4 NiAqLwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAiaTM4NiIKLSNlbmRpZiAvKiBDS0NQ VSAqLwotI2VuZGlmIC8qIF9NX0kzODYgKi8KLSNpZmRlZiBNX0kyODYJCQkJLyogSW50ZWwgODAy ODYgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgImkyODYiCi0jZW5kaWYgLyogQ0tD UFUgKi8KLSNlbmRpZiAvKiBNX0kyODYgKi8KLSNpZmRlZiBNX0k4NgkJCQkvKiBJbnRlbCA4MHg4 NiAqLwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAiaXg4NiIKLSNlbmRpZiAvKiBDS0NQ VSAqLwotI2VuZGlmIC8qIE1fSTg2ICovCi0jaWZkZWYgc3BhcmMJCQkJLyogU1VOIFNQQVJDICov Ci0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJzcGFyYyIKLSNlbmRpZiAvKiBDS0NQVSAq LwotI2VuZGlmIC8qIHNwYXJjICovCi0jaWZkZWYgbWlwcwkJCQkvKiBNSVBTIFJJU0MgcHJvY2Vz c29yICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJtaXBzIgotI2VuZGlmIC8qIENL Q1BVICovCi0jZW5kaWYgLyogbWlwcyAqLwotI2lmZGVmIF9JQk1SMgkJCQkvKiBJQk0gUlMvNjAw MCAqLwotI2lmbmRlZiBDS0NQVQkJCQkvKiAod2hhdCBkbyB0aGV5IGNhbGwgdGhlIGNoaXA/KSAq LwotI2RlZmluZSBDS0NQVSAicnM2MDAwIgotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyog cnM2MDAwICovCi0jaWZkZWYgdTNiNQkJCQkvKiBXRTMyMDAwIE1BQy0zMiwgQVQmVCAzQnggKi8K LSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgInUzYjUiCi0jZW5kaWYgLyogQ0tDUFUgKi8K LSNlbmRpZiAvKiB1M2I1ICovCi0jaWZkZWYgbjNiCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENL Q1BVICJuM2IiCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBuM2IgKi8KLSNpZmRlZiB1 M2IKLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgInUzYiIKLSNlbmRpZiAvKiBDS0NQVSAq LwotI2VuZGlmIC8qIHUzYiAqLwotI2lmZGVmIG4xNgkJCQkvKiBFbmNvcmUgTXVsdGltYXggKi8K LSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgIm4xNiIKLSNlbmRpZiAvKiBDS0NQVSAqLwot I2VuZGlmIC8qIG4xNiAqLwotI2lmZGVmIHUzNzAJCQkJLyogSUJNIDM3MCAqLwotI2lmbmRlZiBD S0NQVQotI2RlZmluZSBDS0NQVSAidTM3MCIKLSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8q IHUzNzAgKi8KLSNpZmRlZiBNQUMJCQkJLyogTWFjaW50b3NoIGNhdGNoLWFsbCAqLwotI2lmbmRl ZiBDS0NQVQotI2RlZmluZSBDS0NQVSAibWM2ODAwMCIKLSNlbmRpZiAvKiBDS0NQVSAqLwotI2Vu ZGlmIC8qIE1BQyAqLwotCi0jaWZkZWYgU1RSQVRVUwotI2lmbmRlZiBDS0NQVQotI2lmZGVmIF9f STg2MF9fCi0jZGVmaW5lIENLQ1BVICJJODYwIEZhbWlseSIKLSNlbHNlCi0jaWZkZWYgX19NQzY4 S19fCi0jZGVmaW5lIENLQ1BVICJNQzY4MHgwIEZhbWlseSIKLSNlbHNlCi0jZGVmaW5lIENLQ1BV ICJTdHJhdHVzIHVua25vd24gcHJvY2Vzc29yIgotI2VuZGlmIC8qIF9fTUM2OEtfXyAqLwotI2Vu ZGlmIC8qIF9fSTg2MF9fICovCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBTVFJBVFVT ICovCi0KLSNpZmRlZiBDT01NRU5UCi0jaWZuZGVmIENLQ1BVCQkJCS8qIEFsbCBvdGhlcnMgKi8K LSNkZWZpbmUgQ0tDUFUgInVua25vd24iCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLSNlbmRpZiAvKiBDS1VWRVJfSCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1eGxhLmMgYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXhsYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCBkNTU2NmZhLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2t1eGxhLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NTg4ICswLDAgQEAKLSNpbmNs dWRlICJja2NzeW0uaCIKLQotI2luY2x1ZGUgImNrY2RlYi5oIgkJCS8qIEluY2x1ZGVzLi4uICov Ci0jaW5jbHVkZSAiY2tja2VyLmgiCi0jaW5jbHVkZSAiY2t1Y21kLmgiCi0jaW5jbHVkZSAiY2tj eGxhLmgiCi0KLSNpZmRlZiBOT1hGRVIKLSNkZWZpbmUgemRzdHVmZihhKQotI2VuZGlmIC8qIE5P WEZFUiAqLwotCi0jaWZuZGVmIE5PQ1NFVFMKLWNoYXIgKnhsYXYgPSAiQ2hhcmFjdGVyIFNldCBU cmFuc2xhdGlvbiA5LjAuMDQ0LCAyIEp1biAyMDExIjsKLQotLyogIEMgSyBVIFggTCBBICAqLwot Ci0vKiAgQy1LZXJtaXQgdGFibGVzIGFuZCBmdW5jdGlvbnMgc3VwcG9ydGluZyBjaGFyYWN0ZXIg c2V0IHRyYW5zbGF0aW9uLiAgKi8KLS8qCi0gIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNv bHVtYmlhLmVkdT4sCi0gIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24g U3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCi0g ICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9y ay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRY VCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUg Zm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotKi8KLQotLyogQ2hhcmFjdGVyIHNldCB0 cmFuc2xhdGlvbiBkYXRhIGFuZCBmdW5jdGlvbnMgKi8KLQotZXh0ZXJuIGludCB6aW5jbnQ7CQkJ LyogRmlsZSBpL28gbWFjcm9zIGFuZCB2YXJpYWJsZXMgKi8KLWV4dGVybiBjaGFyICp6aW5wdHI7 Ci1leHRlcm4gaW50IHpvdXRjbnQ7Ci1leHRlcm4gY2hhciAqem91dHB0cjsKLWV4dGVybiBpbnQg Ynl0ZW9yZGVyOwotZXh0ZXJuIGludCB4ZnJ4bGE7Ci0KLWludCB0c2xldmVsICA9IFRTX0wwOwkJ CS8qIFRyYW5zZmVyIHN5bnRheCBsZXZlbCAoMCwxLDIpICovCi1pbnQgdGNoYXJzZXQgPSBUQ19U UkFOU1A7CQkvKiBUcmFuc2ZlciBzeW50YXggY2hhcmFjdGVyIHNldCAqLwotaW50IHRjc19zYXZl ID0gLTE7CQkJLyogRm9yIHNhdmUvcmVzdG9yZSB0ZXJtIGNoYXJzZXQgKi8KLWludCB0Y3NfdHJh bnNwID0gMDsJCQkvKiBUZXJtIGNoYXJzZXQgaXMgVFJBTlNQQVJFTlQgZmxhZyAqLwotCi0jaWZk ZWYgQ0tPVU5JCi1pbnQgdGNzciAgICAgPSBUWF84ODU5XzE7CQkvKiBSZW1vdGUgdGVybWluYWwg Y2hhcmFjdGVyIHNldCAqLwotI2Vsc2UgLyogQ0tPVU5JICovCi1pbnQgdGNzciAgICAgPSBGQ19V U0FTQ0lJOwotI2VuZGlmIC8qIENLT1VOSSAqLwotaW50IGxhbmd1YWdlID0gTF9VU0FTQ0lJOwkJ LyogTGFuZ3VhZ2UgKi8KLQotI2lmZGVmIFVOSUNPREUKLWludCB1Y3Nib20gPSAxOwkJCQkvKiBB ZGQgQk9NIHRvIG5ldyBVQ1MgZmlsZXM/ICovCi1pbnQgdWNzb3JkZXIgPSAtMTsJCQkvKiBEZWZh dWx0IGJ5dGUgb3JkZXIgZm9yIFVDUyBmaWxlcyAqLwotaW50IGZpbGVvcmRlciA9IC0xOwkJCS8q IEJ5dGUgb3JkZXIgb2YgY3VycmVudCBmaWxlICovCi0JCQkJCS8qIDAgPSBCRSwgMSA9IExFICov Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotLyoKLSAgRGVmYXVsdCBsb2NhbCBmaWxlIGFuZCB0ZXJt aW5hbCBjaGFyYWN0ZXIgc2V0LgotICBOb3JtYWxseSBBU0NJSSwgYnV0IGZvciBzb21lIHN5c3Rl bXMgd2Uga25vdyBvdGhlcndpc2UuCi0qLwotaW50IGZjc19zYXZlID0gLTE7Ci0jaWZkZWYgZGF0 YWdlbmVyYWwJCQkvKiBEYXRhIEdlbmVyYWwgQU9TL1ZTICovCi1pbnQgZmNoYXJzZXQgPSBGQ19E R01DUzsJCS8qIHVzZXMgdGhlIERHIEludGVybmF0aW9uYWwgc2V0ICovCi1pbnQgZGNzZXQ4ICAg PSBGQ19ER01DUzsKLWludCBkY3NldDcgICA9IEZDX1VTQVNDSUk7Ci1pbnQgdGNzbCAgICAgPSBG Q19ER01DUzsKLSNlbHNlCi0jaWZkZWYgTkVYVAkJCQkvKiBUaGUgTmVYVCB3b3Jrc3RhdGlvbiAq LwotaW50IGZjaGFyc2V0ID0gRkNfTkVYVDsJCQkvKiB1c2VzIGl0cyBvd24gOC1iaXQgc2V0ICov Ci1pbnQgZGNzZXQ4ICAgPSBGQ19ORVhUOwotaW50IGRjc2V0NyAgID0gRkNfVVNBU0NJSTsKLWlu dCB0Y3NsICAgICA9IEZDX05FWFQ7Ci0jZWxzZQotI2lmZGVmIE1BQwkJCQkvKiBUaGUgTWFjaW50 b3NoICovCi1pbnQgZmNoYXJzZXQgPSBGQ19BUFBRRDsJCS8qIHVzZXMgYW4gZXh0ZW5kZWQgdmVy c2lvbiBvZiAqLwotaW50IGRjc2V0OCAgID0gRkNfQVBQUUQ7Ci1pbnQgZGNzZXQ3ICAgPSBGQ19V U0FTQ0lJOwotaW50IHRjc2wgICAgID0gRkNfQVBQUUQ7CQkvKiBBcHBsZSBRdWlja2RyYXcgKi8K LSNlbHNlCi0jaWZkZWYgQVVYCi1pbnQgZmNoYXJzZXQgPSBGQ19BUFBRRDsJCS8qIERpdHRvIGZv ciBBcHBsZSBBL1VYICovCi1pbnQgZGNzZXQ4ICAgPSBGQ19BUFBRRDsKLWludCBkY3NldDcgICA9 IEZDX1VTQVNDSUk7Ci1pbnQgdGNzbCAgICAgPSBGQ19BUFBRRDsKLSNlbHNlCi0jaWZkZWYgQU1J R0EJCQkJLyogVGhlIENvbW1vZG9yZSBBbWlnYSAqLwotaW50IGZjaGFyc2V0ID0gRkNfMUxBVElO OwkJLyogdXNlcyBMYXRpbi0xICovCi1pbnQgZGNzZXQ4ICAgPSBGQ18xTEFUSU47Ci1pbnQgZGNz ZXQ3ICAgPSBGQ19VU0FTQ0lJOwotaW50IHRjc2wgICAgID0gRkNfMUxBVElOOwotI2Vsc2UJCQkJ CS8qIEFsbCBvdGhlcnMgKi8KLSNpZmRlZiBDS09VTkkgCQkJCS8qIE9TLzIgVW5pY29kZSAqLwot aW50IGZjaGFyc2V0ID0gRkNfMUxBVElOOwotaW50IGRjc2V0OCAgID0gRkNfMUxBVElOOwotaW50 IGRjc2V0NyAgID0gRkNfVVNBU0NJSTsKLWludCB0Y3NsICAgICA9IFRYXzg4NTlfMTsKLWludCBw cm5jcyAgICA9IFRYX0NQNDM3OwotI2Vsc2UJCQkJCS8qIEFsbCBvdGhlcnMgKi8KLWludCBmY2hh cnNldCA9IEZDX1VTQVNDSUk7CQkvKiB1c2UgQVNDSUkgYnkgZGVmYXVsdCAqLwotaW50IGRjc2V0 OCAgID0gRkNfMUxBVElOOwkJLyogQnV0IGRlZmF1bHQgOC1iaXQgc2V0IGlzIExhdGluLTEgKi8K LWludCBkY3NldDcgICA9IEZDX1VTQVNDSUk7Ci1pbnQgdGNzbCAgICAgPSBGQ19VU0FTQ0lJOwot aW50IHBybmNzICAgID0gRkNfQ1A0Mzc7Ci0jZW5kaWYgLyogQ0tPVU5JICovCi0jZW5kaWYgLyog QU1JR0EgKi8KLSNlbmRpZiAvKiBBVVggKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBO RVhUICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotaW50IHNfY3NldCA9IFhNT0RFX0E7 CQkJLyogU0VORCBjaGFyc2V0IHNlbGVjdGlvbiA9IEFVVE8gKi8KLWludCByX2NzZXQgPSBYTU9E RV9BOwkJCS8qIFJFQ1YgY2hhcnNldCBzZWxlY3Rpb24gPSBBVVRPICovCi1pbnQgYWZjc2V0W01B WEZDU0VUUysxXTsJCS8qIENoYXJhY3Rlci1zZXQgYXNzb2NpYXRpb25zICovCi1pbnQgYXhjc2V0 W01BWFRDU0VUUysxXTsKLWludCB4bGF0eXBlID0gWExBX05PTkU7CQkJLyogVHJhbnNsYXRpb24g dHlwZSAqLwotCi0jaWZkZWYgVU5JQ09ERQotI2lmZGVmIENLX0FOU0lDCi1leHRlcm4gaW50ICgq eGxfdXRjW01BWFRDU0VUUysxXSkoVVNIT1JUKTsgIC8qIFVuaWNvZGUgdG8gVENTICovCi1leHRl cm4gaW50ICgqeGxfdWZjW01BWEZDU0VUUysxXSkoVVNIT1JUKTsgIC8qIFVuaWNvZGUgdG8gRkNT ICovCi1leHRlcm4gVVNIT1JUICgqeGxfdGN1W01BWFRDU0VUUysxXSkoQ0hBUik7IC8qIFRDUyB0 byBVbmljb2RlICovCi1leHRlcm4gVVNIT1JUICgqeGxfZmN1W01BWEZDU0VUUysxXSkoQ0hBUik7 IC8qIEZDUyB0byBVbmljb2RlICovCi0jZWxzZQotZXh0ZXJuIGludCAoKnhsX3V0Y1tNQVhUQ1NF VFMrMV0pKCk7Ci1leHRlcm4gaW50ICgqeGxfdWZjW01BWEZDU0VUUysxXSkoKTsKLWV4dGVybiBV U0hPUlQgKCp4bF90Y3VbTUFYVENTRVRTKzFdKSgpOwotZXh0ZXJuIFVTSE9SVCAoKnhsX2ZjdVtN QVhGQ1NFVFMrMV0pKCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNlbmRpZiAvKiBVTklDT0RF ICovCi0KLS8qIEJ1cmVhdWNyYWN5IHNlY3Rpb24gKi8KLQotX1BST1RPVFlQKCBDSEFSIHhuZWwx LCAoQ0hBUiBjKSApOwkvKiBOZVhUIHRvIExhdGluLTEgKi8KLV9QUk9UT1RZUCggQ0hBUiB4bDE0 MywgKENIQVIgYykgKTsJLyogTGF0aW4tMSB0byBJQk0gQ1A0MzcgKi8KLV9QUk9UT1RZUCggQ0hB UiB4bDFhcywgKENIQVIgYykgKTsJLyogTGF0aW4tMSB0byBVUyBBU0NJSSAqLwotX1BST1RPVFlQ KCBDSEFSIHpsMWFzLCAoQ0hBUiBjKSApOwkvKiBMYXRpbi0xIHRvIFVTIEFTQ0lJICovCi0KLSNp ZmRlZiBDWVJJTExJQwotX1BST1RPVFlQKCBDSEFSIHhhc3NrLCAoQ0hBUiBjKSApOwkvKiBBU0NJ SSB0byBTaG9ydCBLT0kgKi8KLV9QUk9UT1RZUCggQ0hBUiB4c2tjeSwgKENIQVIgYykgKTsJLyog U2hvcnQgS09JIHRvIExhdGluL0N5cmlsbGljICovCi0jZW5kaWYgLyogQ1lSSUxMSUMgKi8KLQot I2lmZGVmIExBVElOMgotX1BST1RPVFlQKCBDSEFSIHhuZWwyLCAoQ0hBUiBjKSApOwkvKiBOZVhU IHRvIExhdGluLTIgKi8KLV9QUk9UT1RZUCggQ0hBUiB4bDI0MywgKENIQVIgYykgKTsJLyogTGF0 aW4tMiB0byBJQk0gQ1A0MzcgKi8KLV9QUk9UT1RZUCggQ0hBUiB4bDJhcywgKENIQVIgYykgKTsJ LyogTGF0aW4tMiB0byBVUyBBU0NJSSAqLwotX1BST1RPVFlQKCBDSEFSIHpsMmFzLCAoQ0hBUiBj KSApOwkvKiBMYXRpbi0yIHRvIFVTIEFTQ0lJICovCi1fUFJPVE9UWVAoIENIQVIgeGwycjgsIChD SEFSIGMpICk7CS8qIExhdGluLTIgdG8gSFAgKi8KLV9QUk9UT1RZUCggQ0hBUiB4bDJsOSwgKENI QVIgYykgKTsJLyogTGF0aW4tMiB0byBMYXRpbi05ICovCi1fUFJPVE9UWVAoIENIQVIgeGw5bDIs IChDSEFSIGMpICk7CS8qIExhdGluLTkgdG8gTGF0aW4tMiAqLwotX1BST1RPVFlQKCBDSEFSIHhs Mm16LCAoQ0hBUiBjKSApOwkvKiBMYXRpbi0yIHRvIE1hem92aWEgKi8KLV9QUk9UT1RZUCggQ0hB UiB4bXpsMiwgKENIQVIgYykgKTsJLyogTWF6b3ZpYSB0byBMYXRpbi0yICovCi1fUFJPVE9UWVAo IENIQVIgeGwxbXosIChDSEFSIGMpICk7CS8qIExhdGluLTEgdG8gTWF6b3ZpYSAqLwotX1BST1RP VFlQKCBDSEFSIHhtemwxLCAoQ0hBUiBjKSApOwkvKiBNYXpvdmlhIHRvIExhdGluLTEgKi8KLV9Q Uk9UT1RZUCggQ0hBUiB4bXpsOSwgKENIQVIgYykgKTsJLyogTGF0aW4tOSB0byBNYXpvdmlhICov Ci1fUFJPVE9UWVAoIENIQVIgeGw5bXosIChDSEFSIGMpICk7CS8qIE1hem92aWEgdG8gTGF0aW4t OSAqLwotI2VuZGlmIC8qIExBVElOMiAqLwotCi0vKiBUcmFuc2ZlciBjaGFyYWN0ZXItc2V0IGlu Zm8gKi8KLQotc3RydWN0IGNzaW5mbyB0Y3NpbmZvW10gPSB7Ci0vKiAgTmFtZSAgICAgICAgICAg ICAgc2l6ZSBjb2RlICAgICAgZGVzaWduYXRvciBhbHBoYWJldCBrZXl3b3JkICAgICAgICAgICAg Ki8KLSAgIlRSQU5TUEFSRU5UIiwgICAgICAgMjU2LFRDX1RSQU5TUCwgIiIsICAgICAgQUxfVU5L LCAgInRyYW5zcGFyZW50IiwgIC8qIDAgKi8KLSAgIkFTQ0lJIiwgICAgICAgICAgICAgMTI4LFRD X1VTQVNDSUksIiIsICAgICAgQUxfUk9NQU4sImFzY2lpIiwgICAgICAgIC8qIDEgKi8KLSAgIklT TyA4ODU5LTEgTGF0aW4tMSIsMjU2LFRDXzFMQVRJTiwgIkk2LzEwMCIsQUxfUk9NQU4sImxhdGlu MS1pc28iLCAgIC8qIDIgKi8KLSNpZmRlZiBMQVRJTjIKLSAgIklTTyA4ODU5LTIgTGF0aW4tMiIs MjU2LFRDXzJMQVRJTiwgIkk2LzEwMSIsQUxfUk9NQU4sImxhdGluMi1pc28iLCAgIC8qIDMgKi8K LSNlbmRpZiAvKiBMQVRJTjIgKi8KLSNpZmRlZiBDWVJJTExJQwotICAvKiA0ICovCi0gICJJU08g ODg1OS01IExhdGluL0N5cmlsbGljIiwyNTYsVENfQ1lSSUxMLCJJNi8xNDQiLEFMX0NZUklMLCJj eXJpbGxpYy1pc28iLAotI2VuZGlmIC8qIENZUklMTElDICovCi0jaWZkZWYgS0FOSkkKLSAgIkph cGFuZXNlIEVVQyIsMTYzODQsVENfSkVVQywgICJJMTQvODcvMTMiLCBBTF9KQVBBTiwgImV1Yy1q cCIsICAgICAgIC8qIDUgKi8KLSNlbmRpZiAvKiBLQU5KSSAqLwotI2lmZGVmIEhFQlJFVwotICAv KiA2ICovCi0gICJJU08gODg1OS04IExhdGluL0hlYnJldyIsMjU2LFRDX0hFQlJFVywiSTYvMTM4 IixBTF9IRUJSRVcsImhlYnJldy1pc28iLAotI2VuZGlmIC8qIEhFQlJFVyAqLwotI2lmZGVmIEdS RUVLCi0gICJJU08gODg1OS03IExhdGluL0dyZWVrIiwyNTYsVENfR1JFRUssIkk2LzEyNiIsQUxf R1JFRUssImdyZWVrLWlzbyIsIC8qICA3ICovCi0jZW5kaWYgLyogR1JFRUsgKi8KLSAgIklTTyA4 ODU5LTE1IExhdGluLTkiLDI1NixUQ185TEFUSU4sIkk2LzIwMyIsQUxfUk9NQU4sImxhdGluOS1p c28iLCAgLyogIDggKi8KLSAgIklTTyAxMDY0NiAvIFVuaWNvZGUgVUNTLTIiLDY0MDAwLFRDX1VD UzIsIkkxNjIiLEFMX1VOSVYsInVjczIiLCAgICAgLyogIDkgKi8KLSAgIklTTyAxMDY0NiAvIFVu aWNvZGUgVVRGLTgiLDY0MDAwLFRDX1VURjgsIkkxOTAiLEFMX1VOSVYsInV0ZjgiLCAgICAgLyog MTAgKi8KLSAgIiIsMCwwLCIiLDAsIiIKLX07Ci1pbnQgbnRjc2V0cyA9IChzaXplb2YodGNzaW5m bykgLyBzaXplb2Yoc3RydWN0IGNzaW5mbykpIC0gMTsKLQotc3RydWN0IGtleXRhYiB0Y3N0YWJb XSA9IHsJCS8qIEtleXdvcmQgdGFibGUgZm9yICovCi0gICAgImFzY2lpIiwgICAgICAgICBUQ19V U0FTQ0lJLCAwLAkvKiBTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCAqLwotI2lmZGVmIENZUklM TElDCi0gICAgImN5cmlsbGljLWlzbyIsICBUQ19DWVJJTEwsICAwLAotI2VuZGlmIC8qIENZUklM TElDICovCi0jaWZkZWYgR1JFRUsKLSAgICAiZWxvdDkyOC1ncmVlayIsIFRDX0dSRUVLLCAgIENN X0lOViwKLSNlbmRpZiAvKiBHUkVFSyAqLwotI2lmZGVmIEtBTkpJCi0gICAgImV1Yy1qcCIsICAg ICAgICBUQ19KRVVDLCAgICAwLAotI2VuZGlmIC8qIEtBTkpJICovCi0jaWZkZWYgR1JFRUsKLSAg ICAiZ3JlZWstaXNvIiwgICAgIFRDX0dSRUVLLCAgIDAsCi0jZW5kaWYgLyogR1JFRUsgKi8KLSNp ZmRlZiBIRUJSRVcKLSAgICAiaGVicmV3LWlzbyIsICAgIFRDX0hFQlJFVywgIDAsCi0jZW5kaWYg LyogSEVCUkVXICovCi0KLSNpZmRlZiBVTklDT0RFCi0gICAgImlzby0xMDY0Ni11Y3MtMiIsIFRD X1VDUzIsICAgIENNX0lOViwgLyogSVNPIDEwNjQ2IC8gVW5pY29kZSBVQ1MtMiAqLwotI2VuZGlm IC8qIFVOSUNPREUgKi8KLSAgICAiaXNvLTg4NTktMSIsICAgIFRDXzFMQVRJTiwgIENNX0lOViwg LyogSVNPIExhdGluIEFscGhhYmV0IDEgKi8KLSAgICAiaXNvLTg4NTktMTUiLCAgIFRDXzlMQVRJ TiwgIENNX0lOViwgLyogSVNPIExhdGluIEFscGhhYmV0IDkgKHllcykgKi8KLSAgICAiaXNvLTg4 NTktMiIsICAgIFRDXzJMQVRJTiwgIENNX0lOViwgLyogSVNPIExhdGluIEFscGhhYmV0IDIgKi8K LSNpZmRlZiBDWVJJTExJQwotICAgICJpc28tODg1OS01IiwgICAgVENfQ1lSSUxMLCAgQ01fSU5W LCAvKiBJU08gTGF0aW4vQ3lyaWxsaWMgQWxwaGFiZXQgKi8KLSNlbmRpZiAvKiBDWVJJTExJQyAq LwotI2lmZGVmIEdSRUVLCi0gICAgImlzby04ODU5LTciLCAgICBUQ19HUkVFSywgICBDTV9JTlYs IC8qIElTTyA4ODU5LTcgTGF0aW4vR3JlZWsgKi8KLSNlbmRpZiAvKiBHUkVFSyAqLwotI2lmZGVm IEhFQlJFVwotICAgICJpc28tODg1OS04IiwgICAgVENfSEVCUkVXLCAgQ01fSU5WLCAvKiBJU08g TGF0aW4vSGVicmV3ICovCi0jZW5kaWYgLyogSEVCUkVXICovCi0KLSNpZmRlZiBLQU5KSQotICAg ICJqYXBhbmVzZS1ldWMiLCAgVENfSkVVQywgICAgQ01fSU5WLAotI2VuZGlmIC8qIEtBTkpJICov Ci0gICAgImwiLCAgICAgICAgICAgICBUQ18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAotICAgICJs YSIsICAgICAgICAgICAgVENfMUxBVElOLCAgQ01fQUJSfENNX0lOViwKLSAgICAibGF0IiwgICAg ICAgICAgIFRDXzFMQVRJTiwgIENNX0FCUnxDTV9JTlYsCi0gICAgImxhdGkiLCAgICAgICAgICBU Q18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAotICAgICJsYXRpbiIsICAgICAgICAgVENfMUxBVElO LCAgQ01fQUJSfENNX0lOViwKLSAgICAibGF0aW4xLWlzbyIsICAgIFRDXzFMQVRJTiwgIDAsCi0j aWZkZWYgTEFUSU4yCi0gICAgImxhdGluMi1pc28iLCAgICBUQ18yTEFUSU4sICAwLAotI2VuZGlm IC8qIExBVElOMiAqLwotICAgICJsYXRpbjktaXNvIiwgICAgVENfOUxBVElOLCAgMCwKLSAgICAi dHJhbnNwYXJlbnQiLCAgIFRDX1RSQU5TUCwgIDAsCi0jaWZkZWYgVU5JQ09ERQotICAgICJ1Y3My IiwgICAgICAgICAgVENfVUNTMiwgICAgMCwKLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgInVz LWFzY2lpIiwgICAgICBUQ19VU0FTQ0lJLCBDTV9JTlYsCi0gICAgInVzYXNjaWkiLCAgICAgICBU Q19VU0FTQ0lJLCBDTV9JTlYsCi0jaWZkZWYgVU5JQ09ERQotICAgICJ1dGYtOCIsICAgICAgICAg VENfVVRGOCwgICAgQ01fSU5WLAotICAgICJ1dGY4IiwgICAgICAgICAgVENfVVRGOCwgICAgMCwK LSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgIiIsIDAsIDAKLX07Ci1pbnQgbnRjcyA9IChzaXpl b2YodGNzdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi0vKiBGaWxlIGNoYXJh Y3RlciBzZXQgaW5mb3JtYXRpb24gc3RydWN0dXJlLCBpbmRleGVkIGJ5IGNoYXJhY3RlciBzZXQg Y29kZSwgKi8KLS8qIGFzIGRlZmluZWQgaW4gY2t1eGxhLmguICBUaGlzIHRhYmxlIG11c3QgYmUg aW4gb3JkZXIgb2YgZmlsZSBjaGFyYWN0ZXIgKi8KLS8qIHNldCBudW1iZXIhICovCi0KLXN0cnVj dCBjc2luZm8gZmNzaW5mb1tdID0geyAvKiBGaWxlIGNoYXJhY3RlciBzZXQgaW5mb3JtYXRpb24u Li4gKi8KLSAgLyogRGVzY3JpcHRpdmUgTmFtZSAgICAgICAgICAgICAgU2l6ZSAgRGVzaWduYXRv ciAqLwotICAiVVMgQVNDSUkiLCAgICAgICAgICAgICAgICAgICAgIDEyOCwgRkNfVVNBU0NJSSwg TlVMTCwgQUxfUk9NQU4sICJhc2NpaSIsCi0gICJCcml0aXNoL1VLIElTTy02NDYiLCAgICAgICAg ICAgMTI4LCBGQ19VS0FTQ0lJLCBOVUxMLCBBTF9ST01BTiwgImJyaXRpc2giLAotICAiRHV0Y2gg SVNPLTY0NiIsICAgICAgICAgICAgICAgIDEyOCwgRkNfRFVBU0NJSSwgTlVMTCwgQUxfUk9NQU4s ICJkdXRjaCIsCi0gICJGaW5uaXNoIElTTy02NDYiLCAgICAgICAgICAgICAgMTI4LCBGQ19GSUFT Q0lJLCBOVUxMLCBBTF9ST01BTiwgImZpbm5pc2giLAotICAiRnJlbmNoIElTTy02NDYiLCAgICAg ICAgICAgICAgIDEyOCwgRkNfRlJBU0NJSSwgTlVMTCwgQUxfUk9NQU4sICJmcmVuY2giLAotICAi Q2FuYWRpYW4tRnJlbmNoIE5SQyIsIDEyOCwgRkNfRkNBU0NJSSwgTlVMTCwgQUxfUk9NQU4sICJj YW5hZGlhbi1mcmVuY2giLAotICAiR2VybWFuIElTTy02NDYiLCAgICAgICAgICAgICAgIDEyOCwg RkNfR0VBU0NJSSwgTlVMTCwgQUxfUk9NQU4sICJnZXJtYW4iLAotICAiSHVuZ2FyaWFuIElTTy02 NDYiLCAgICAgICAgICAgIDEyOCwgRkNfSFVBU0NJSSwgTlVMTCwgQUxfUk9NQU4sICJodW5nYXJp YW4iLAotICAiSXRhbGlhbiBJU08tNjQ2IiwgICAgICAgICAgICAgIDEyOCwgRkNfSVRBU0NJSSwg TlVMTCwgQUxfUk9NQU4sICJpdGFsaWFuIiwKLSAgIk5vcndlZ2lhbi9EYW5pc2ggSVNPLTY0NiIs MTI4LEZDX05PQVNDSUksTlVMTCxBTF9ST01BTiwibm9yd2VnaWFuL2RhbmlzaCIsCi0gICJQb3J0 dWd1ZXNlIElTTy02NDYiLCAgICAgICAgICAgMTI4LCBGQ19QT0FTQ0lJLCBOVUxMLCBBTF9ST01B TiwicG9ydHVndWVzZSIsCi0gICJTcGFuaXNoIElTTy02NDYiLCAgICAgICAgICAgICAgMTI4LCBG Q19TUEFTQ0lJLCBOVUxMLCBBTF9ST01BTiwgInNwYW5pc2giLAotICAiU3dlZGlzaCBJU08tNjQ2 IiwgICAgICAgICAgICAgIDEyOCwgRkNfU1dBU0NJSSwgTlVMTCwgQUxfUk9NQU4sICJzd2VkaXNo IiwKLSAgIlN3aXNzIE5SQyIsICAgICAgICAgICAgICAgICAgICAxMjgsIEZDX0NIQVNDSUksIE5V TEwsIEFMX1JPTUFOLCAic3dpc3MiLAotICAiSVNPIDg4NTktMSBMYXRpbi0xIiwgICAgICAgICAg IDI1NiwgRkNfMUxBVElOLCAgTlVMTCwgQUxfUk9NQU4sImxhdGluMS1pc28iLAotICAiSVNPIDg4 NTktMiBMYXRpbi0yIiwgICAgICAgICAgIDI1NiwgRkNfMkxBVElOLCAgTlVMTCwgQUxfUk9NQU4s ImxhdGluMi1pc28iLAotICAiREVDIE11bHRpbmF0aW9uYWwiLCAyNTYsICBGQ19ERUNNQ1MsIE5V TEwsQUxfUk9NQU4sImRlYy1tdWx0aW5hdGlvbmFsIiwKLSAgIk5lWFQgTXVsdGluYXRpb25hbCIs IDI1NiwgRkNfTkVYVCwgICBOVUxMLEFMX1JPTUFOLCJuZXh0LW11bHRpbmF0aW9uYWwiLAotICAi UEMgQ29kZSBQYWdlIDQzNyIsICAgICAgICAgICAgMjU2LCBGQ19DUDQzNywgICBOVUxMLCBBTF9S T01BTiwiY3A0MzciLAotICAiUEMgQ29kZSBQYWdlIDg1MCIsICAgICAgICAgICAgMjU2LCBGQ19D UDg1MCwgICBOVUxMLCBBTF9ST01BTiwiY3A4NTAiLAotICAiUEMgQ29kZSBQYWdlIDg1MiIsICAg ICAgICAgICAgMjU2LCBGQ19DUDg1MiwgICBOVUxMLCBBTF9ST01BTiwiY3A4NTIiLAotICAiQXBw bGUgTWFjaW50b3NoIExhdGluIiwgMjU2LCBGQ19BUFBRRCwgICBOVUxMLCBBTF9ST01BTiwibWFj aW50b3NoLWxhdGluIiwKLSAgIkRhdGEgR2VuZXJhbCBJbnRlcm5hdGlvbmFsIiwyNTYsRkNfREdN Q1MsTlVMTCxBTF9ST01BTiwiZGctaW50ZXJuYXRpb25hbCIsCi0gICJIZXdsZXR0IFBhY2thcmQg Um9tYW44IiwgICAgMjU2LCBGQ19IUFI4LCAgICBOVUxMLCBBTF9ST01BTiwgImhwLXJvbWFuOCIs Ci0gICJJU08gODg1OS01IExhdGluL0N5cmlsbGljIiwgMjU2LCBGQ19DWVJJTEwsICBOVUxMLCBB TF9DWVJJTCwiY3lyaWxsaWMtaXNvIiwKLSAgIkNQODY2IEN5cmlsbGljIiwJICAgICAgIDI1Niwg RkNfQ1A4NjYsICAgTlVMTCwgQUxfQ1lSSUwsImNwODY2IiwKLSAgIlNob3J0IEtPSSIsICAgICAg ICAgICAgICAgICAxMjgsIEZDX0tPSTcsICAgIE5VTEwsIEFMX0NZUklMLCJzaG9ydC1rb2kiLAot ICAiT2xkIEtPSS04IEN5cmlsbGljIiwgICAgICAgIDI1NiwgRkNfS09JOCwgICAgTlVMTCwgQUxf Q1lSSUwsImtvaTgtY3lyaWxsaWMiLAotICAiSmFwYW5lc2UgSklTNyIsCSAgMTYzODQsIEZDX0pJ UzcsICAgIE5VTEwsIEFMX0pBUEFOLCAiamlzNy1rYW5qaSIsCi0gICJKYXBhbmVzZSBTaGlmdCBK SVMiLAkgIDE2Mzg0LCBGQ19TSEpJUywgICBOVUxMLCBBTF9KQVBBTiwgInNoaWZ0LWppcy1rYW5q aSIsCi0gICJKYXBhbmVzZSBFVUMiLAkgIDE2Mzg0LCBGQ19KRVVDLCAgICBOVUxMLCBBTF9KQVBB TiwgImV1Yy1qcCIsCi0gICJKYXBhbmVzZSBERUMgS2FuamkiLAkgIDE2Mzg0LCBGQ19KREVDLCAg ICBOVUxMLCBBTF9KQVBBTiwgImRlYy1rYW5qaSIsCi0gICJIZWJyZXctNyBERUMiLCAgICAgICAg ICAgMTI4LCBGQ19IRTcsICAgICBOVUxMLCBBTF9IRUJSRVcsICJoZWJyZXctNyIsCi0gICJJU08g ODg1OS04IExhdGluL0hlYnJldyIsMjU2LCBGQ19IRUJSRVcsICBOVUxMLCBBTF9IRUJSRVcsICJo ZWJyZXctaXNvIiwKLSAgIkNQODYyIEhlYnJldyIsICAgICAgICAgICAyNTYsIEZDX0NQODYyLCAg IE5VTEwsIEFMX0hFQlJFVywgImNwODYyLWhlYnJldyIsCi0gICJFTE9UIDkyNyBHcmVlayIsICAg ICAgICAgMTI4LCBGQ19FTE9ULCAgICBOVUxMLCBBTF9HUkVFSywgImVsb3Q5MjctZ3JlZWsiLAot ICAiSVNPIDg4NTktNyBMYXRpbi9HcmVlayIsIDI1NiwgRkNfR1JFRUssICAgTlVMTCwgQUxfR1JF RUssICJncmVlay1pc28iLAotICAiQ1A4NjkgR3JlZWsiLCAgICAgICAgICAgIDI1NiwgRkNfQ1A4 NjksICAgTlVMTCwgQUxfR1JFRUssICJjcDg2OS1ncmVlayIsCi0gICJJU08gODg1OS0xNSBMYXRp bi05IiwgICAgMjU2LCBGQ185TEFUSU4sICBOVUxMLCBBTF9ST01BTiwgImxhdGluOS1pc28iLAot ICAiUEMgQ29kZSBQYWdlIDg1OCIsICAgICAgIDI1NiwgRkNfQ1A4NTAsICAgTlVMTCwgQUxfUk9N QU4sICJjcDg1OCIsCi0gICJQQyBDb2RlIFBhZ2UgODU1IiwgICAgICAgMjU2LCBGQ19DUDg1NSwg ICBOVUxMLCBBTF9DWVJJTCwgImNwODU1LWN5cmlsbGljIiwKLSAgIldpbmRvd3MgQ29kZSBQYWdl IDEyNTEiLCAyNTYsIEZDX0NQMTI1MSwgIE5VTEwsIEFMX0NZUklMLCAiY3AxMjUxLWN5cmlsbGlj IiwKLSAgIkJ1bGdhcmlhbiBQQyBDb2RlIFBhZ2UiLCAyNTYsIEZDX0JVTEdBUiwgIE5VTEwsIEFM X0NZUklMLCAiYnVsZ2FyaWEtcGMiLAotICAiV2luZG93cyBDb2RlIFBhZ2UgMTI1MCIsIDI1Niwg RkNfQ1AxMjUwLCAgTlVMTCwgQUxfUk9NQU4sICJjcDEyNTAiLAotICAiUG9saXNoIE1hem92aWEg UEMgQ29kZSBQYWdlIiwgMjU2LCBGQ19NQVpPVklBLCBOVUxMLCBBTF9ST01BTiwgIm1hem92aWEt cGMiLAotICAiSVNPIDEwNjQ2IC8gVW5pY29kZSBVQ1MtMiIsIDY0MDAwLCBGQ19VQ1MyLCBOVUxM LCBBTF9VTklWLCAidWNzMiIsCi0gICJJU08gMTA2NDYgLyBVbmljb2RlIFVURi04IiwgNjQwMDAs IEZDX1VDUzIsIE5VTEwsIEFMX1VOSVYsICJ1dGY4IiwKLSAgIktPSTgtUiBSdXNzaWFuK0JveGRy YXdpbmciLDI1NiwgIEZDX0tPSThSLCBOVUxMLCBBTF9DWVJJTCwia29pOHIiLAotICAiS09JOC1V IFVrcmFpbmlhbitCb3hkcmF3aW5nIiwyNTYsRkNfS09JOFUsIE5VTEwsIEFMX0NZUklMLCJrb2k4 dSIsCi0gICJXaW5kb3dzIENvZGUgUGFnZSAxMjUyIiwgMjU2LCBGQ19DUDEyNTIsICBOVUxMLCBB TF9ST01BTiwgImNwMTI1MiIsCi0gICIiLDAsMCxOVUxMLDAsTlVMTAotfTsKLQotLyogTG9jYWwg ZmlsZSBjaGFyYWN0ZXIgc2V0cyAqLwotLyogSW5jbHVkZXMgNy1iaXQgTmF0aW9uYWwgUmVwbGFj ZW1lbnQgQ2hhcmFjdGVyIFNldHMgb2YgSVNPIDY0NiAqLwotLyogUGx1cyBJU08gTGF0aW4tMSwg REVDIE11bHRpbmF0aW9uYWwgQ2hhcmFjdGVyIFNldCAoTUNTKSwgTmVYVCBjaGFyIHNldCwgKi8K LS8qIFZhcmlvdXMgUEMgYW5kIFdpbmRvd3MgY29kZSBwYWdlcywgZXRjLiAqLwotLyogQXMgb2Yg Qy1LZXJtaXQgOS4wIE1JTUUgbmFtZXMgYXJlIGluY2x1ZGVkIGFzIGludmlzaWJsZSBzeW5vbXlt cyBmb3IgKi8KLS8qIHRob3NlIGNoYXJhY3RlciBzZXRzIHRoYXQgaGF2ZSBNSU1FIG5hbWVzLiAq LwotCi1zdHJ1Y3Qga2V5dGFiIGZjc3RhYltdID0geyAvKiBLZXl3b3JkIHRhYmxlIGZvciAnc2V0 IGZpbGUgY2hhcmFjdGVyLXNldCcgKi8KLS8qCi0gIElNUE9SVEFOVDogVGhpcyB0YWJsZSBpcyBy ZXBsaWNhdGVkIGJlbG93IGFzIHR0Y3N0YWIgKHRlcm1pbmFsIGNoYXJhY3RlcgotICBzZXQgdGFi bGUpLiAgVGhlIG9ubHkgZGlmZmVyZW5jZXMgYXJlIHRoZSBhZGRpdGlvbiBvZiBUUkFOU1BBUkVO VAotICBhbmQgdGhlIHJlbW92YWwgb2YgdGhlIEthbmppIHNldHMsIHdoaWNoIGFyZSBub3Qgc3Vw cG9ydGVkIGZvciB0ZXJtaW5hbAotICBlbXVsYXRpb24uICBJZiB5b3UgbWFrZSBjaGFuZ2VzIHRv IHRoaXMgdGFibGUsIGFsc28gY2hhbmdlIHR0Y3N0YWIuCi0qLwotCi0vKiBLZXl3b3JkICAgICAg ICAgICAgICAgVmFsdWUgICAgICAgRmxhZ3MgKi8KLSAgICAiYXBwbGUtcXVpY2tkcmF3IiwgICAg RkNfQVBQUUQsICAgQ01fSU5WLCAvKiBBcHBsZSBRdWlja2RyYXcgKi8KLSAgICAiYXNjaWkiLCAg ICAgICAgICAgICAgRkNfVVNBU0NJSSwgMCwgLyogQVNDSUkgKi8KLSAgICAiYnJpdGlzaCIsICAg ICAgICAgICAgRkNfVUtBU0NJSSwgMCwgLyogQnJpdGlzaCBOUkMgKi8KLSAgICAiYnVsZ2FyaWEt cGMiLCAgICAgICAgRkNfQlVMR0FSLCAgMCwgLyogQnVsZ2FyaWFuIFBDIENvZGUgUGFnZSAqLwot ICAgICJjYW5hZGlhbi1mcmVuY2giLCAgICBGQ19GQ0FTQ0lJLCAwLCAvKiBGcmVuY2ggQ2FuYWRp YW4gTlJDICovCi0jaWZkZWYgTEFUSU4yCi0gICAgImNwMTI1MCIsICAgICAgICAgICAgIEZDX0NQ MTI1MCwgIDAsIC8qIFdpbmRvd3MgQ1AgMTI1MCAqLwotI2VuZGlmIC8qIExBVElOMiAqLwotI2lm ZGVmIENZUklMTElDCi0gICAgImNwMTI1MS1jeXJpbGxpYyIsICAgIEZDX0NQMTI1MSwgIDAsIC8q IFdpbmRvd3MgQ1AgMTI1MSAqLwotI2VuZGlmIC8qIENZUklMTElDICovCi0gICAgImNwMTI1MiIs ICAgICAgICAgICAgIEZDX0NQMTI1MiwgIDAsIC8qIFdpbmRvd3MgQ1AgMTI1MiAqLwotICAgICJj cDQzNyIsICAgICAgICAgICAgICBGQ19DUDQzNywgICAwLCAvKiBQQyBDUDQzNyAqLwotICAgICJj cDg1MCIsICAgICAgICAgICAgICBGQ19DUDg1MCwgICAwLCAvKiBQQyBDUDg1MCAqLwotI2lmZGVm IExBVElOMgotICAgICJjcDg1MiIsICAgICAgICAgICAgICBGQ19DUDg1MiwgICAwLCAvKiBQQyBD UDg1MiAqLwotI2VuZGlmIC8qIExBVElOMiAqLwotI2lmZGVmIENZUklMTElDCi0gICAgImNwODU1 LWN5cmlsbGljIiwgICAgIEZDX0NQODU1LCAgIDAsIC8qIFBDIENQODU1ICovCi0jZW5kaWYgLyog Q1lSSUxMSUMgKi8KLSAgICAiY3A4NTgiLCAgICAgICAgICAgICAgRkNfQ1A4NTgsICAgMCwgLyog UEMgQ1A4NTggKi8KLSNpZmRlZiBIRUJSRVcKLSAgICAiY3A4NjItaGVicmV3IiwgICAgICAgRkNf Q1A4NjIsICAgMCwgLyogUEMgQ1A4NjIgKi8KLSNlbmRpZiAvKiBIRUJSRVcgKi8KLSNpZmRlZiBD WVJJTExJQwotICAgICJjcDg2Ni1jeXJpbGxpYyIsICAgICBGQ19DUDg2NiwgICAwLCAvKiBDUDg2 NiBDeXJpbGxpYyAqLwotI2VuZGlmIC8qIENZUklMTElDICovCi0jaWZkZWYgR1JFRUsKLSAgICAi Y3A4NjktZ3JlZWsiLCAgICAgICAgRkNfQ1A4NjksICAgMCwgLyogQ1A4NjkgR3JlZWsgKi8KLSNl bmRpZiAvKiBHUkVFSyAqLwotI2lmZGVmIENZUklMTElDCi0gICAgImN5cmlsbGljLWlzbyIsICAg ICAgIEZDX0NZUklMTCwgIDAsIC8qIElTTyBMYXRpbi9DeXJpbGxpYyBBbHBoYWJldCAqLwotI2Vu ZGlmIC8qIENZUklMTElDICovCi0gICAgImRhbmlzaCIsICAgICAgICAgICAgIEZDX05PQVNDSUks IDAsIC8qIE5vcndlZ2lhbiBhbmQgRGFuaXNoIE5SQyAqLwotI2lmZGVmIEtBTkpJCi0gICAgImRl Yy1rYW5qaSIsICAgICAgICAgIEZDX0pERUMsICAgIDAsIC8qIEphcGFuZXNlIERFQyBLYW5qaSAq LwotI2VuZGlmIC8qIEtBTkpJICovCi0gICAgImRlYy1tY3MiLCAgICAgICAgICAgIEZDX0RFQ01D UywgIENNX0lOViwgLyogREVDIG11bHRpbmF0aW9uYWwgY2hhciBzZXQgKi8KLSAgICAiZGVjLW11 bHRpbmF0aW9uYWwiLCAgRkNfREVDTUNTLCAgMCwgLyogREVDIG11bHRpbmF0aW9uYWwgY2hhcmFj dGVyIHNldCAqLwotICAgICJkZy1pbnRlcm5hdGlvbmFsIiwgICBGQ19ER01DUywgICAwLCAvKiBE YXRhIEdlbmVyYWwgbXVsdGluYXRpb25hbCAqLwotICAgICJkdXRjaCIsICAgICAgICAgICAgICBG Q19EVUFTQ0lJLCAwLCAvKiBEdXRjaCBOUkMgKi8KLSNpZmRlZiBHUkVFSwotICAgICJlbG90OTI3 LWdyZWVrIiwgICAgICBGQ19FTE9ULCAgICAwLCAvKiBFTE9UIDkyNyBHcmVlayAqLwotICAgICJl bG90OTI4LWdyZWVrIiwgICAgICBGQ19HUkVFSywgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5LTcg TGF0aW4vR3JlZWsgKi8KLSNlbmRpZiAvKiBHUkVFSyAqLwotI2lmZGVmIEtBTkpJCi0gICAgImV1 Yy1qcCIsICAgICAgICAgICAgIEZDX0pFVUMsICAgIDAsIC8qIEphcGFuZXNlIEVVQyAqLwotI2Vu ZGlmIC8qIEtBTkpJICovCi0gICAgImZpbm5pc2giLCAgICAgICAgICAgIEZDX0ZJQVNDSUksIDAs IC8qIEZpbm5pc2ggTlJDICovCi0gICAgImZyZW5jaCIsICAgICAgICAgICAgIEZDX0ZSQVNDSUks IDAsIC8qIEZyZW5jaCBOUkMgKi8KLSAgICAiZnItY2FuYWRpYW4iLCAgICAgICAgRkNfRkNBU0NJ SSwgQ01fSU5WLCAvKiBGcmVuY2ggQ2FuYWRpYW4gTlJDICovCi0gICAgImdlcm1hbiIsICAgICAg ICAgICAgIEZDX0dFQVNDSUksIDAsIC8qIEdlcm1hbiBOUkMgKi8KLSNpZmRlZiBHUkVFSwotICAg ICJncmVlay1pc28iLCAgICAgICAgICBGQ19HUkVFSywgICAwLCAvKiBJU08gODg1OS03IExhdGlu L0dyZWVrICovCi0jZW5kaWYgLyogR1JFRUsgKi8KLSNpZmRlZiBIRUJSRVcKLSAgICAiaGUiLCAg ICAgICAgICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKLSAgICAiaGViIiwgICAg ICAgICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKLSAgICAiaGViciIsICAgICAg ICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKLSAgICAiaGVicmUiLCAgICAgICAg ICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKLSAgICAiaGVicmV3IiwgICAgICAgICAg ICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKLSAgICAiaGVicmV3LTciLCAgICAgICAgICAg RkNfSEU3LCAgICAgMCwgLyogREVDIDctQml0IEhlYnJldyAqLwotICAgICJoZWJyZXctaXNvIiwg ICAgICAgICBGQ19IRUJSRVcsICAwLCAvKiBJU08gTGF0aW4vSGVicmV3ICovCi0jZW5kaWYgLyog SEVCUkVXICovCi0gICAgImhwLXJvbWFuOCIsICAgICAgICAgIEZDX0hQUjgsICAgIDAsIC8qIEhl d2xldHQgUGFja2FyZCBSb21hbjggKi8KLSAgICAiaHVuZ2FyaWFuIiwgICAgICAgICAgRkNfSFVB U0NJSSwgMCwgLyogSHVuZ2FyaWFuIE5SQyAqLwotCi0gICAgImlibTQzNyIsICAgICAgICAgICAg IEZDX0NQNDM3LCAgIENNX0lOViwgLyogUEMgQ1A0MzcgKi8KLSAgICAiaWJtODUwIiwgICAgICAg ICAgICAgRkNfQ1A4NTAsICAgQ01fSU5WLCAvKiBQQyBDUDg1MCAobm90IGluIE1JTUUpICovCi0j aWZkZWYgTEFUSU4yCi0gICAgImlibTg1MiIsICAgICAgICAgICAgIEZDX0NQODUyLCAgIENNX0lO ViwgLyogUEMgQ1A4NTIgKi8KLSNlbmRpZiAvKiBMQVRJTjIgKi8KLSNpZmRlZiBDWVJJTExJQwot ICAgICJpYm04NTUiLCAgICAgICAgICAgICBGQ19DUDg1NSwgICBDTV9JTlYsIC8qIFBDIENQODU1 ICovCi0jZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSAgICAiaWJtODU4IiwgICAgICAgICAgICAgRkNf Q1A4NTgsICAgQ01fSU5WLCAvKiBQQyBDUDg1OCAobm90IGluIE1JTUUpICovCi0jaWZkZWYgSEVC UkVXCi0gICAgImlibTg2MiIsICAgICAgICAgICAgIEZDX0NQODYyLCAgIENNX0lOViwgLyogUEMg Q1A4NjIgKG5vdCBpbiBNSU1FKSAqLwotI2VuZGlmIC8qIEhFQlJFVyAqLwotI2lmZGVmIENZUklM TElDCi0gICAgImlibTg2NiIsICAgICAgICAgICAgIEZDX0NQODY2LCAgIENNX0lOViwgLyogQ1A4 NjYgQ3lyaWxsaWMgKi8KLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotI2lmZGVmIEdSRUVLCi0gICAg ImlibTg2OSIsICAgICAgICAgICAgIEZDX0NQODY5LCAgIENNX0lOViwgLyogQ1A4NjkgR3JlZWsg Ki8KLSNlbmRpZiAvKiBHUkVFSyAqLwotCi0jaWZkZWYgVU5JQ09ERQotICAgICJpc28tMTA2NDYt dWNzLTIiLCAgICBGQ19VQ1MyLCAgICBDTV9JTlYsIC8qIElTTyAxMDY0NiAvIFVuaWNvZGUgVUNT LTIgKi8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgImlzby04ODU5LTEiLCAgICAgICAgIEZD XzFMQVRJTiwgIENNX0lOViwgLyogSVNPIExhdGluIEFscGhhYmV0IDEgKi8KLSAgICAiaXNvLTg4 NTktMTUiLCAgICAgICAgRkNfOUxBVElOLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQg OSAoeWVzKSAqLwotICAgICJpc28tODg1OS0yIiwgICAgICAgICBGQ18yTEFUSU4sICBDTV9JTlYs IC8qIElTTyBMYXRpbiBBbHBoYWJldCAyICovCi0jaWZkZWYgQ1lSSUxMSUMKLSAgICAiaXNvLTg4 NTktNSIsICAgICAgICAgRkNfQ1lSSUxMLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4vQ3lyaWxsaWMg QWxwaGFiZXQgKi8KLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotI2lmZGVmIEdSRUVLCi0gICAgImlz by04ODU5LTciLCAgICAgICAgIEZDX0dSRUVLLCAgIENNX0lOViwgLyogSVNPIDg4NTktNyBMYXRp bi9HcmVlayAqLwotI2VuZGlmIC8qIEdSRUVLICovCi0jaWZkZWYgSEVCUkVXCi0gICAgImlzby04 ODU5LTgiLCAgICAgICAgIEZDX0hFQlJFVywgIENNX0lOViwgLyogSVNPIExhdGluL0hlYnJldyAq LwotI2VuZGlmIC8qIEhFQlJFVyAqLwotI2lmZGVmIEtBTkpJCi0gICAgImlzbzIwMjJqcC1rYW5q aSIsICAgIEZDX0pJUzcsICAgIENNX0lOViwgLyogU3lub255bSBmb3IgSklTLTcgKi8KLSNlbmRp ZiAvKiBLQU5KSSAqLwotCi0gICAgImlzbzY0Ni1nYiIsICAgICAgICAgIEZDX1VLQVNDSUksIENN X0lOViwgLyogQnJpdGlzaCBOUkMgKi8KLSAgICAiaXNvNjQ2LWNhIiwgICAgICAgICAgRkNfRkNB U0NJSSwgQ01fSU5WLCAvKiBGcmVuY2ggQ2FuYWRpYW4gTlJDICovCi0gICAgImlzbzY0Ni1kZSIs ICAgICAgICAgIEZDX0dFQVNDSUksIENNX0lOViwgLyogR2VybWFuIE5SQyAqLwotICAgICJpc282 NDYtZGsiLCAgICAgICAgICBGQ19OT0FTQ0lJLCBDTV9JTlYsIC8qIE5vcndlZ2lhbiBhbmQgRGFu aXNoIE5SQyAqLwotICAgICJpc282NDYtZXMiLCAgICAgICAgICBGQ19TUEFTQ0lJLCBDTV9JTlYs IC8qIFNwYW5pc2ggTlJDICovCi0gICAgImlzbzY0Ni1maSIsICAgICAgICAgIEZDX0ZJQVNDSUks IENNX0lOViwgLyogRmlubmlzaCBOUkMgKi8KLSAgICAiaXNvNjQ2LWZyIiwgICAgICAgICAgRkNf RlJBU0NJSSwgQ01fSU5WLCAvKiBGcmVuY2ggTlJDICovCi0gICAgImlzbzY0Ni1odSIsICAgICAg ICAgIEZDX0hVQVNDSUksIENNX0lOViwgLyogSHVuZ2FyaWFuIE5SQyAqLwotICAgICJpc282NDYt aXQiLCAgICAgICAgICBGQ19JVEFTQ0lJLCBDTV9JTlYsIC8qIEl0YWxpYW4gTlJDICovCi0gICAg ImlzbzY0Ni1ubyIsICAgICAgICAgIEZDX05PQVNDSUksIENNX0lOViwgLyogTm9yd2VnaWFuIGFu ZCBEYW5pc2ggTlJDICovCi0gICAgImlzbzY0Ni1wbyIsICAgICAgICAgIEZDX1BPQVNDSUksIENN X0lOViwgLyogUG9ydHVndWVzZSBOUkMgKi8KLSAgICAiaXNvNjQ2LXNlIiwgICAgICAgICAgRkNf U1dBU0NJSSwgQ01fSU5WLCAvKiBTd2VkaXNoIE5SQyAqLwotCi0gICAgIml0YWxpYW4iLCAgICAg ICAgICAgIEZDX0lUQVNDSUksIENNX0lOViwgLyogSXRhbGlhbiBOUkMgKi8KLSNpZmRlZiBLQU5K SQotICAgICJqYXBhbmVzZS1ldWMiLCAgICAgICBGQ19KRVVDLCAgICBDTV9JTlYsIC8qIEphcGFu ZXNlIEVVQyAqLwotICAgICJqaXM3LWthbmppIiwgICAgICAgICBGQ19KSVM3LCAgICAwLCAvKiBK YXBhbmVzZSBKSVM3IDdiaXQgY29kZSAqLwotI2VuZGlmIC8qIEtBTkpJICovCi0jaWZkZWYgQ1lS SUxMSUMKLSAgICAiayIsICAgICAgICAgICAgICAgICAgRkNfS09JOCwgICAgQ01fQUJSfENNX0lO ViwKLSAgICAia28iLCAgICAgICAgICAgICAgICAgRkNfS09JOCwgICAgQ01fQUJSfENNX0lOViwK LSAgICAia29pIiwgICAgICAgICAgICAgICAgRkNfS09JOCwgICAgQ01fQUJSfENNX0lOViwKLSAg ICAia29pNyIsICAgICAgICAgICAgICAgRkNfS09JNywgICAgMCwgLyogU2hvcnQgS09JIEN5cmls bGljICovCi0gICAgImtvaTgiLCAgICAgICAgICAgICAgIEZDX0tPSTgsICAgIDAsIC8qIE9sZCBL T0ktOCBDeXJpbGxpYyAqLwotICAgICJrb2k4LWUiLCAgICAgICAgICAgICBGQ19LT0k4LCAgICBD TV9JTlYsIC8qIE9sZCBLT0ktOCBDeXJpbGxpYyAqLwotICAgICJrb2k4LWN5cmlsbGljIiwgICAg ICBGQ19LT0k4LCAgICBDTV9JTlYsCi0gICAgImtvaTgtciIsICAgICAgICAgICAgIEZDX0tPSThS LCAgIENNX0lOViwgLyogS09JOC1SIFJGQzE0ODkgKi8KLSAgICAia29pOC11IiwgICAgICAgICAg ICAgRkNfS09JOFUsICAgQ01fSU5WLCAvKiBLT0k4LVUgUkZDMjMxOSAqLwotICAgICJrb2k4ciIs ICAgICAgICAgICAgICBGQ19LT0k4UiwgICAwLCAvKiBLT0k4LVIgUkZDMTQ4OSAqLwotICAgICJr b2k4dSIsICAgICAgICAgICAgICBGQ19LT0k4VSwgICAwLCAvKiBLT0k4LVUgUkZDMjMxOSAqLwot I2VuZGlmIC8qIENZUklMTElDICovCi0gICAgImwiLCAgICAgICAgICAgICAgICAgIEZDXzFMQVRJ TiwgIENNX0FCUnxDTV9JTlYsCi0gICAgImxhIiwgICAgICAgICAgICAgICAgIEZDXzFMQVRJTiwg IENNX0FCUnxDTV9JTlYsCi0gICAgImxhdCIsICAgICAgICAgICAgICAgIEZDXzFMQVRJTiwgIENN X0FCUnxDTV9JTlYsCi0gICAgImxhdGkiLCAgICAgICAgICAgICAgIEZDXzFMQVRJTiwgIENNX0FC UnxDTV9JTlYsCi0gICAgImxhdGluIiwgICAgICAgICAgICAgIEZDXzFMQVRJTiwgIENNX0FCUnxD TV9JTlYsCi0gICAgImxhdGluMS1pc28iLCAgICAgICAgIEZDXzFMQVRJTiwgIDAsIC8qIElTTyBM YXRpbiBBbHBoYWJldCAxICovCi0jaWZkZWYgTEFUSU4yCi0gICAgImxhdGluMi1pc28iLCAgICAg ICAgIEZDXzJMQVRJTiwgIDAsIC8qIElTTyBMYXRpbiBBbHBoYWJldCAyICovCi0jZW5kaWYgLyog TEFUSU4yICovCi0gICAgImxhdGluOS1pc28iLCAgICAgICAgIEZDXzlMQVRJTiwgIDAsIC8qIElT TyBMYXRpbiBBbHBoYWJldCA5ICovCi0gICAgIm1hY2ludG9zaC1sYXRpbiIsICAgIEZDX0FQUFFE LCAgIDAsIC8qICJFeHRlbmRlZCBNYWMgTGF0aW4iICovCi0jaWZkZWYgTEFUSU4yCi0gICAgIm1h em92aWEtcGMiLCAgICAgICAgIEZDX01BWk9WSUEsIDAsIC8qIFBvbGlzaCBNYXpvdmlhIFBDIGNv ZGUgcGFnZSAqLwotI2VuZGlmIC8qIExBVElOMiAqLwotICAgICJuZXh0LW11bHRpbmF0aW9uYWwi LCBGQ19ORVhULCAgICAwLCAvKiBOZVhUIHdvcmtzdGF0aW9uICovCi0gICAgIm5vcndlZ2lhbiIs ICAgICAgICAgIEZDX05PQVNDSUksIDAsIC8qIE5vcndlZ2lhbiBhbmQgRGFuaXNoIE5SQyAqLwot ICAgICJwb3J0dWd1ZXNlIiwgICAgICAgICBGQ19QT0FTQ0lJLCAwLCAvKiBQb3J0dWd1ZXNlIE5S QyAqLwotI2lmZGVmIEtBTkpJCi0gICAgInNoaWZ0LWppcy1rYW5qaSIsICAgIEZDX1NISklTLCAg IDAsIC8qIEphcGFuZXNlIEthbmppIFNoaWZ0LUpJUyAqLwotICAgICJzaGlmdF9qaXMiLCAgICAg ICAgICBGQ19TSEpJUywgICBDTV9JTlYsIC8qIEphcGFuZXNlIEthbmppIFNoaWZ0LUpJUyAqLwot I2VuZGlmIC8qIEtBTkpJICovCi0jaWZkZWYgQ1lSSUxMSUMKLSAgICAic2hvcnQta29pIiwgICAg ICAgICAgRkNfS09JNywgICAgMCwgLyogU2hvcnQgS09JIEN5cmlsbGljICovCi0jZW5kaWYgLyog Q1lSSUxMSUMgKi8KLSAgICAic3BhbmlzaCIsICAgICAgICAgICAgRkNfU1BBU0NJSSwgMCwgLyog U3BhbmlzaCBOUkMgKi8KLSAgICAic3dlZGlzaCIsICAgICAgICAgICAgRkNfU1dBU0NJSSwgMCwg LyogU3dlZGlzaCBOUkMgKi8KLSAgICAic3dpc3MiLCAgICAgICAgICAgICAgRkNfQ0hBU0NJSSwg MCwgLyogU3dpc3MgTlJDICovCi0jaWZkZWYgVU5JQ09ERQotICAgICJ1Y3MyIiwgICAgICAgICAg ICAgICBGQ19VQ1MyLCAgICAwLCAvKiBJU08gMTA2NDYgLyBVbmljb2RlIFVDUy0yICovCi0jZW5k aWYgLyogVU5JQ09ERSAqLwotICAgICJ1cy1hc2NpaSIsICAgICAgICAgICBGQ19VU0FTQ0lJLCBD TV9JTlYsIC8qIE1JTUUgKi8KLSAgICAidXNhc2NpaSIsICAgICAgICAgICAgRkNfVVNBU0NJSSwg Q01fSU5WLAotI2lmZGVmIFVOSUNPREUKLSAgICAidXRmLTgiLCAgICAgICAgICAgICAgRkNfVVRG OCwgICAgQ01fSU5WLCAvKiBJU08gMTA2NDYgLyBVbmljb2RlIFVURi04ICovCi0gICAgInV0Zjgi LCAgICAgICAgICAgICAgIEZDX1VURjgsICAgIDAsIC8qIElTTyAxMDY0NiAvIFVuaWNvZGUgVVRG LTggKi8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0jaWZkZWYgTEFUSU4yCi0gICAgIndpbmRvd3Mt MTI1MCIsICAgICAgIEZDX0NQMTI1MCwgIENNX0lOViwgLyogV2luZG93cyBDUCAxMjUwICovCi0j ZW5kaWYgLyogTEFUSU4yICovCi0jaWZkZWYgQ1lSSUxMSUMKLSAgICAid2luZG93cy0xMjUxIiwg ICAgICAgRkNfQ1AxMjUxLCAgQ01fSU5WLCAvKiBXaW5kb3dzIENQIDEyNTEgKi8KLSNlbmRpZiAv KiBDWVJJTExJQyAqLwotICAgICJ3aW5kb3dzLTEyNTIiLCAgICAgICBGQ19DUDEyNTIsICBDTV9J TlYsIC8qIFdpbmRvd3MgQ1AgMTI1MiAqLwotICAgICIiLCAwLCAwCi19OwotaW50IG5maWxjID0g KHNpemVvZihmY3N0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0cnVjdCBr ZXl0YWIgdHRjc3RhYltdID0geyAvKiBLZXl3b3JkIHRhYmxlIGZvciBTRVQgVEVSTUlOQUwgQ0hB UkFDVEVSLVNFVCAqLwotLyoKLSAgSU1QT1JUQU5UOiBUaGlzIHRhYmxlIGlzIGEgcmVwbGljYSBv ZiBmY3N0YWIsIGltbWVkaWF0ZWx5IGFib3ZlLCB3aXRoIHRoZQotICBhZGRpdGlvbiBvZiBUUkFO U1BBUkVOVCBhbmQgZGVsZXRpb24gb2YgdGhlIEphcGFuZXNlIHNldHMuICBJZiB5b3UgbWFrZQot ICBjaGFuZ2VzIHRvIHRoaXMgdGFibGUsIG1ha2UgdGhlIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0 byBmY3N0YWIuCi0qLwotLyogS2V5d29yZCAgICAgICAgICAgICBWYWx1ZSAgICAgICBGbGFncyAq LwotICAgICJhcHBsZS1xdWlja2RyYXciLCAgICBGQ19BUFBRRCwgICBDTV9JTlYsIC8qIEFwcGxl IFF1aWNrZHJhdyAqLwotICAgICJhc2NpaSIsICAgICAgICAgICAgICBGQ19VU0FTQ0lJLCAwLCAv KiBBU0NJSSAqLwotICAgICJicml0aXNoIiwgICAgICAgICAgICBGQ19VS0FTQ0lJLCAwLCAvKiBC cml0aXNoIE5SQyAqLwotICAgICJidWxnYXJpYS1wYyIsICAgICAgICBGQ19CVUxHQVIsICAwLCAv KiBCdWxnYXJpYW4gUEMgQ29kZSBQYWdlICovCi0gICAgImNhbmFkaWFuLWZyZW5jaCIsICAgIEZD X0ZDQVNDSUksIDAsIC8qIEZyZW5jaCBDYW5hZGlhbiBOUkMgKi8KLSNpZmRlZiBMQVRJTjIKLSAg ICAiY3AxMjUwIiwgICAgICAgICAgICAgRkNfQ1AxMjUwLCAgMCwgLyogV2luZG93cyBDUCAxMjUw ICovCi0jZW5kaWYgLyogTEFUSU4yICovCi0jaWZkZWYgQ1lSSUxMSUMKLSAgICAiY3AxMjUxLWN5 cmlsbGljIiwgICAgRkNfQ1AxMjUxLCAgMCwgLyogV2luZG93cyBDUCAxMjUxICovCi0jZW5kaWYg LyogQ1lSSUxMSUMgKi8KLSAgICAiY3AxMjUyIiwgICAgICAgICAgICAgRkNfQ1AxMjUyLCAgMCwg LyogV2luZG93cyBDUCAxMjUyICovCi0gICAgImNwNDM3IiwgICAgICAgICAgICAgIEZDX0NQNDM3 LCAgIDAsIC8qIFBDIENQNDM3ICovCi0gICAgImNwODUwIiwgICAgICAgICAgICAgIEZDX0NQODUw LCAgIDAsIC8qIFBDIENQODUwICovCi0jaWZkZWYgTEFUSU4yCi0gICAgImNwODUyIiwgICAgICAg ICAgICAgIEZDX0NQODUyLCAgIDAsIC8qIFBDIENQODUyICovCi0jZW5kaWYgLyogTEFUSU4yICov Ci0jaWZkZWYgQ1lSSUxMSUMKLSAgICAiY3A4NTUtY3lyaWxsaWMiLCAgICAgRkNfQ1A4NTUsICAg MCwgLyogUEMgQ1A4NTUgKi8KLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotICAgICJjcDg1OCIsICAg ICAgICAgICAgICBGQ19DUDg1OCwgICAwLCAvKiBQQyBDUDg1OCAqLwotI2lmZGVmIEhFQlJFVwot ICAgICJjcDg2Mi1oZWJyZXciLCAgICAgICBGQ19DUDg2MiwgICAwLCAvKiBQQyBDUDg2MiAqLwot I2VuZGlmIC8qIEhFQlJFVyAqLwotI2lmZGVmIENZUklMTElDCi0gICAgImNwODY2LWN5cmlsbGlj IiwgICAgIEZDX0NQODY2LCAgIDAsIC8qIENQODY2IEN5cmlsbGljICovCi0jZW5kaWYgLyogQ1lS SUxMSUMgKi8KLSNpZmRlZiBHUkVFSwotICAgICJjcDg2OS1ncmVlayIsICAgICAgICBGQ19DUDg2 OSwgICAwLCAvKiBDUDg2OSBHcmVlayAqLwotI2VuZGlmIC8qIEdSRUVLICovCi0jaWZkZWYgQ1lS SUxMSUMKLSAgICAiY3lyaWxsaWMtaXNvIiwgICAgICAgRkNfQ1lSSUxMLCAgMCwgLyogSVNPIExh dGluL0N5cmlsbGljIEFscGhhYmV0ICovCi0jZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSAgICAiZGFu aXNoIiwgICAgICAgICAgICAgRkNfTk9BU0NJSSwgMCwgLyogTm9yd2VnaWFuIGFuZCBEYW5pc2gg TlJDICovCi0gICAgImRlYy1tY3MiLCAgICAgICAgICAgIEZDX0RFQ01DUywgIENNX0lOViwgLyog REVDIG11bHRpbmF0aW9uYWwgY2hhciBzZXQgKi8KLSAgICAiZGVjLW11bHRpbmF0aW9uYWwiLCAg RkNfREVDTUNTLCAgMCwgLyogREVDIG11bHRpbmF0aW9uYWwgY2hhcmFjdGVyIHNldCAqLwotICAg ICJkZy1pbnRlcm5hdGlvbmFsIiwgICBGQ19ER01DUywgICAwLCAvKiBEYXRhIEdlbmVyYWwgbXVs dGluYXRpb25hbCAqLwotICAgICJkdXRjaCIsICAgICAgICAgICAgICBGQ19EVUFTQ0lJLCAwLCAv KiBEdXRjaCBOUkMgKi8KLSNpZmRlZiBHUkVFSwotICAgICJlbG90OTI3LWdyZWVrIiwgICAgICBG Q19FTE9ULCAgICAwLCAvKiBFTE9UIDkyNyBHcmVlayAqLwotICAgICJlbG90OTI4LWdyZWVrIiwg ICAgICBGQ19HUkVFSywgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5LTcgTGF0aW4vR3JlZWsgKi8K LSNlbmRpZiAvKiBHUkVFSyAqLwotICAgICJmaW5uaXNoIiwgICAgICAgICAgICBGQ19GSUFTQ0lJ LCAwLCAvKiBGaW5uaXNoIE5SQyAqLwotICAgICJmcmVuY2giLCAgICAgICAgICAgICBGQ19GUkFT Q0lJLCAwLCAvKiBGcmVuY2ggTlJDICovCi0gICAgImZyLWNhbmFkaWFuIiwgICAgICAgIEZDX0ZD QVNDSUksIENNX0lOViwgLyogRnJlbmNoIENhbmFkaWFuIE5SQyAqLwotICAgICJnZXJtYW4iLCAg ICAgICAgICAgICBGQ19HRUFTQ0lJLCAwLCAvKiBHZXJtYW4gTlJDICovCi0jaWZkZWYgR1JFRUsK LSAgICAiZ3JlZWstaXNvIiwgICAgICAgICAgRkNfR1JFRUssICAgMCwgLyogSVNPIDg4NTktNyBM YXRpbi9HcmVlayAqLwotI2VuZGlmIC8qIEdSRUVLICovCi0jaWZkZWYgSEVCUkVXCi0gICAgImhl IiwgICAgICAgICAgICAgICAgIEZDX0hFQlJFVywgIENNX0FCUnxDTV9JTlYsCi0gICAgImhlYiIs ICAgICAgICAgICAgICAgIEZDX0hFQlJFVywgIENNX0FCUnxDTV9JTlYsCi0gICAgImhlYnIiLCAg ICAgICAgICAgICAgIEZDX0hFQlJFVywgIENNX0FCUnxDTV9JTlYsCi0gICAgImhlYnJlIiwgICAg ICAgICAgICAgIEZDX0hFQlJFVywgIENNX0FCUnxDTV9JTlYsCi0gICAgImhlYnJldyIsICAgICAg ICAgICAgIEZDX0hFQlJFVywgIENNX0FCUnxDTV9JTlYsCi0gICAgImhlYnJldy03IiwgICAgICAg ICAgIEZDX0hFNywgICAgIDAsIC8qIERFQyA3LUJpdCBIZWJyZXcgKi8KLSAgICAiaGVicmV3LWlz byIsICAgICAgICAgRkNfSEVCUkVXLCAgMCwgLyogSVNPIExhdGluL0hlYnJldyAqLwotI2VuZGlm IC8qIEhFQlJFVyAqLwotICAgICJocC1yb21hbjgiLCAgICAgICAgICBGQ19IUFI4LCAgICAwLCAv KiBIZXdsZXR0IFBhY2thcmQgUm9tYW44ICovCi0gICAgImh1bmdhcmlhbiIsICAgICAgICAgIEZD X0hVQVNDSUksIDAsIC8qIEh1bmdhcmlhbiBOUkMgKi8KLQotICAgICJpYm00MzciLCAgICAgICAg ICAgICBGQ19DUDQzNywgICBDTV9JTlYsIC8qIFBDIENQNDM3ICovCi0gICAgImlibTg1MCIsICAg ICAgICAgICAgIEZDX0NQODUwLCAgIENNX0lOViwgLyogUEMgQ1A4NTAgKG5vdCBpbiBNSU1FKSAq LwotI2lmZGVmIExBVElOMgotICAgICJpYm04NTIiLCAgICAgICAgICAgICBGQ19DUDg1MiwgICBD TV9JTlYsIC8qIFBDIENQODUyICovCi0jZW5kaWYgLyogTEFUSU4yICovCi0jaWZkZWYgQ1lSSUxM SUMKLSAgICAiaWJtODU1IiwgICAgICAgICAgICAgRkNfQ1A4NTUsICAgQ01fSU5WLCAvKiBQQyBD UDg1NSAqLwotI2VuZGlmIC8qIENZUklMTElDICovCi0gICAgImlibTg1OCIsICAgICAgICAgICAg IEZDX0NQODU4LCAgIENNX0lOViwgLyogUEMgQ1A4NTggKG5vdCBpbiBNSU1FKSAqLwotI2lmZGVm IEhFQlJFVwotICAgICJpYm04NjIiLCAgICAgICAgICAgICBGQ19DUDg2MiwgICBDTV9JTlYsIC8q IFBDIENQODYyIChub3QgaW4gTUlNRSkgKi8KLSNlbmRpZiAvKiBIRUJSRVcgKi8KLSNpZmRlZiBD WVJJTExJQwotICAgICJpYm04NjYiLCAgICAgICAgICAgICBGQ19DUDg2NiwgICBDTV9JTlYsIC8q IENQODY2IEN5cmlsbGljICovCi0jZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSNpZmRlZiBHUkVFSwot ICAgICJpYm04NjkiLCAgICAgICAgICAgICBGQ19DUDg2OSwgICBDTV9JTlYsIC8qIENQODY5IEdy ZWVrICovCi0jZW5kaWYgLyogR1JFRUsgKi8KLQotI2lmZGVmIFVOSUNPREUKLSAgICAiaXNvLTEw NjQ2LXVjcy0yIiwgICAgRkNfVUNTMiwgICAgQ01fSU5WLCAvKiBJU08gMTA2NDYgLyBVbmljb2Rl IFVDUy0yICovCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotICAgICJpc28tODg1OS0xIiwgICAgICAg ICBGQ18xTEFUSU4sICBDTV9JTlYsIC8qIElTTyBMYXRpbiBBbHBoYWJldCAxICovCi0gICAgImlz by04ODU5LTE1IiwgICAgICAgIEZDXzlMQVRJTiwgIENNX0lOViwgLyogSVNPIExhdGluIEFscGhh YmV0IDkgKHllcykgKi8KLSAgICAiaXNvLTg4NTktMiIsICAgICAgICAgRkNfMkxBVElOLCAgQ01f SU5WLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQgMiAqLwotI2lmZGVmIENZUklMTElDCi0gICAgImlz by04ODU5LTUiLCAgICAgICAgIEZDX0NZUklMTCwgIENNX0lOViwgLyogSVNPIExhdGluL0N5cmls bGljIEFscGhhYmV0ICovCi0jZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSNpZmRlZiBHUkVFSwotICAg ICJpc28tODg1OS03IiwgICAgICAgICBGQ19HUkVFSywgICBDTV9JTlYsIC8qIElTTyA4ODU5LTcg TGF0aW4vR3JlZWsgKi8KLSNlbmRpZiAvKiBHUkVFSyAqLwotI2lmZGVmIEhFQlJFVwotICAgICJp c28tODg1OS04IiwgICAgICAgICBGQ19IRUJSRVcsICBDTV9JTlYsIC8qIElTTyBMYXRpbi9IZWJy ZXcgKi8KLSNlbmRpZiAvKiBIRUJSRVcgKi8KLQotICAgICJpc282NDYtZ2IiLCAgICAgICAgICBG Q19VS0FTQ0lJLCBDTV9JTlYsIC8qIEJyaXRpc2ggTlJDICovCi0gICAgImlzbzY0Ni1jYSIsICAg ICAgICAgIEZDX0ZDQVNDSUksIENNX0lOViwgLyogRnJlbmNoIENhbmFkaWFuIE5SQyAqLwotICAg ICJpc282NDYtZGUiLCAgICAgICAgICBGQ19HRUFTQ0lJLCBDTV9JTlYsIC8qIEdlcm1hbiBOUkMg Ki8KLSAgICAiaXNvNjQ2LWRrIiwgICAgICAgICAgRkNfTk9BU0NJSSwgQ01fSU5WLCAvKiBOb3J3 ZWdpYW4gYW5kIERhbmlzaCBOUkMgKi8KLSAgICAiaXNvNjQ2LWVzIiwgICAgICAgICAgRkNfU1BB U0NJSSwgQ01fSU5WLCAvKiBTcGFuaXNoIE5SQyAqLwotICAgICJpc282NDYtZmkiLCAgICAgICAg ICBGQ19GSUFTQ0lJLCBDTV9JTlYsIC8qIEZpbm5pc2ggTlJDICovCi0gICAgImlzbzY0Ni1mciIs ICAgICAgICAgIEZDX0ZSQVNDSUksIENNX0lOViwgLyogRnJlbmNoIE5SQyAqLwotICAgICJpc282 NDYtaHUiLCAgICAgICAgICBGQ19IVUFTQ0lJLCBDTV9JTlYsIC8qIEh1bmdhcmlhbiBOUkMgKi8K LSAgICAiaXNvNjQ2LWl0IiwgICAgICAgICAgRkNfSVRBU0NJSSwgQ01fSU5WLCAvKiBJdGFsaWFu IE5SQyAqLwotICAgICJpc282NDYtbm8iLCAgICAgICAgICBGQ19OT0FTQ0lJLCBDTV9JTlYsIC8q IE5vcndlZ2lhbiBhbmQgRGFuaXNoIE5SQyAqLwotICAgICJpc282NDYtcG8iLCAgICAgICAgICBG Q19QT0FTQ0lJLCBDTV9JTlYsIC8qIFBvcnR1Z3Vlc2UgTlJDICovCi0gICAgImlzbzY0Ni1zZSIs ICAgICAgICAgIEZDX1NXQVNDSUksIENNX0lOViwgLyogU3dlZGlzaCBOUkMgKi8KLQotICAgICJp dGFsaWFuIiwgICAgICAgICAgICBGQ19JVEFTQ0lJLCBDTV9JTlYsIC8qIEl0YWxpYW4gTlJDICov Ci0KLSNpZmRlZiBDWVJJTExJQwotICAgICJrIiwgICAgICAgICAgICAgICAgICBGQ19LT0k4LCAg ICBDTV9BQlJ8Q01fSU5WLAotICAgICJrbyIsICAgICAgICAgICAgICAgICBGQ19LT0k4LCAgICBD TV9BQlJ8Q01fSU5WLAotICAgICJrb2kiLCAgICAgICAgICAgICAgICBGQ19LT0k4LCAgICBDTV9B QlJ8Q01fSU5WLAotICAgICJrb2k3IiwgICAgICAgICAgICAgICBGQ19LT0k3LCAgICAwLCAvKiBT aG9ydCBLT0kgQ3lyaWxsaWMgKi8KLSAgICAia29pOCIsICAgICAgICAgICAgICAgRkNfS09JOCwg ICAgMCwgLyogT2xkIEtPSS04IEN5cmlsbGljICovCi0gICAgImtvaTgtZSIsICAgICAgICAgICAg IEZDX0tPSTgsICAgIENNX0lOViwgLyogT2xkIEtPSS04IEN5cmlsbGljICovCi0gICAgImtvaTgt Y3lyaWxsaWMiLCAgICAgIEZDX0tPSTgsICAgIENNX0lOViwKLSAgICAia29pOC1yIiwgICAgICAg ICAgICAgRkNfS09JOFIsICAgQ01fSU5WLCAvKiBLT0k4LVIgUkZDMTQ4OSAqLwotICAgICJrb2k4 LXUiLCAgICAgICAgICAgICBGQ19LT0k4VSwgICBDTV9JTlYsIC8qIEtPSTgtVSBSRkMyMzE5ICov Ci0gICAgImtvaThyIiwgICAgICAgICAgICAgIEZDX0tPSThSLCAgIDAsIC8qIEtPSTgtUiBSRkMx NDg5ICovCi0gICAgImtvaTh1IiwgICAgICAgICAgICAgIEZDX0tPSThVLCAgIDAsIC8qIEtPSTgt VSBSRkMyMzE5ICovCi0jZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSAgICAibCIsICAgICAgICAgICAg ICAgICAgRkNfMUxBVElOLCAgQ01fQUJSfENNX0lOViwKLSAgICAibGEiLCAgICAgICAgICAgICAg ICAgRkNfMUxBVElOLCAgQ01fQUJSfENNX0lOViwKLSAgICAibGF0IiwgICAgICAgICAgICAgICAg RkNfMUxBVElOLCAgQ01fQUJSfENNX0lOViwKLSAgICAibGF0aSIsICAgICAgICAgICAgICAgRkNf MUxBVElOLCAgQ01fQUJSfENNX0lOViwKLSAgICAibGF0aW4iLCAgICAgICAgICAgICAgRkNfMUxB VElOLCAgQ01fQUJSfENNX0lOViwKLSAgICAibGF0aW4xLWlzbyIsICAgICAgICAgRkNfMUxBVElO LCAgMCwgLyogSVNPIExhdGluIEFscGhhYmV0IDEgKi8KLSNpZmRlZiBMQVRJTjIKLSAgICAibGF0 aW4yLWlzbyIsICAgICAgICAgRkNfMkxBVElOLCAgMCwgLyogSVNPIExhdGluIEFscGhhYmV0IDIg Ki8KLSNlbmRpZiAvKiBMQVRJTjIgKi8KLSAgICAibGF0aW45LWlzbyIsICAgICAgICAgRkNfOUxB VElOLCAgMCwgLyogSVNPIExhdGluIEFscGhhYmV0IDkgKi8KLSAgICAibWFjaW50b3NoLWxhdGlu IiwgICAgRkNfQVBQUUQsICAgMCwgLyogIkV4dGVuZGVkIE1hYyBMYXRpbiIgKi8KLSNpZmRlZiBM QVRJTjIKLSAgICAibWF6b3ZpYS1wYyIsICAgICAgICAgRkNfTUFaT1ZJQSwgMCwgLyogUG9saXNo IE1hem92aWEgUEMgY29kZSBwYWdlICovCi0jZW5kaWYgLyogTEFUSU4yICovCi0gICAgIm5leHQt bXVsdGluYXRpb25hbCIsIEZDX05FWFQsICAgIDAsIC8qIE5lWFQgd29ya3N0YXRpb24gKi8KLSAg ICAibm9yd2VnaWFuIiwgICAgICAgICAgRkNfTk9BU0NJSSwgMCwgLyogTm9yd2VnaWFuIGFuZCBE YW5pc2ggTlJDICovCi0gICAgInBvcnR1Z3Vlc2UiLCAgICAgICAgIEZDX1BPQVNDSUksIDAsIC8q IFBvcnR1Z3Vlc2UgTlJDICovCi0KLSNpZmRlZiBDWVJJTExJQwotICAgICJzaG9ydC1rb2kiLCAg ICAgICAgICBGQ19LT0k3LCAgICAwLCAvKiBTaG9ydCBLT0kgQ3lyaWxsaWMgKi8KLSNlbmRpZiAv KiBDWVJJTExJQyAqLwotICAgICJzcGFuaXNoIiwgICAgICAgICAgICBGQ19TUEFTQ0lJLCAwLCAv KiBTcGFuaXNoIE5SQyAqLwotICAgICJzd2VkaXNoIiwgICAgICAgICAgICBGQ19TV0FTQ0lJLCAw LCAvKiBTd2VkaXNoIE5SQyAqLwotICAgICJzd2lzcyIsICAgICAgICAgICAgICBGQ19DSEFTQ0lJ LCAwLCAvKiBTd2lzcyBOUkMgKi8KLSAgICAidHJhbnNwYXJlbnQiLCAgICAgICAgRkNfVFJBTlNQ LCAgMCwgLyogVHJhbnNwYXJlbnQgKi8KLSNpZmRlZiBVTklDT0RFCi0gICAgInVjczIiLCAgICAg ICAgICAgICAgIEZDX1VDUzIsICAgIDAsIC8qIElTTyAxMDY0NiAvIFVuaWNvZGUgVUNTLTIgKi8K LSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgInVzLWFzY2lpIiwgICAgICAgICAgIEZDX1VTQVND SUksIENNX0lOViwgLyogTUlNRSAqLwotICAgICJ1c2FzY2lpIiwgICAgICAgICAgICBGQ19VU0FT Q0lJLCBDTV9JTlYsCi0jaWZkZWYgVU5JQ09ERQotICAgICJ1dGYtOCIsICAgICAgICAgICAgICBG Q19VVEY4LCAgICBDTV9JTlYsIC8qIElTTyAxMDY0NiAvIFVuaWNvZGUgVVRGLTggKi8KLSAgICAi dXRmOCIsICAgICAgICAgICAgICAgRkNfVVRGOCwgICAgMCwgLyogSVNPIDEwNjQ2IC8gVW5pY29k ZSBVVEYtOCAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSNpZmRlZiBMQVRJTjIKLSAgICAid2lu ZG93cy0xMjUwIiwgICAgICAgRkNfQ1AxMjUwLCAgQ01fSU5WLCAvKiBXaW5kb3dzIENQIDEyNTAg Ki8KLSNlbmRpZiAvKiBMQVRJTjIgKi8KLSNpZmRlZiBDWVJJTExJQwotICAgICJ3aW5kb3dzLTEy NTEiLCAgICAgICBGQ19DUDEyNTEsICBDTV9JTlYsIC8qIFdpbmRvd3MgQ1AgMTI1MSAqLwotI2Vu ZGlmIC8qIENZUklMTElDICovCi0gICAgIndpbmRvd3MtMTI1MiIsICAgICAgIEZDX0NQMTI1Miwg IENNX0lOViwgLyogV2luZG93cyBDUCAxMjUyICovCi0gICAgIiIsIDAsIDAKLX07Ci1pbnQgbnRl cm1jID0gKHNpemVvZih0dGNzdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi0v KiBUaGlzIHRhYmxlIGNvbnRhaW5zIHRoZSBlcXVpdmFsZW50IEZDUyBudW1iZXIgZm9yIGVhY2gg VENTLiAqLwotLyogSWYgdGhlIFRDX3h4eCBzeW1ib2wgZGVmaW5pdGlvbnMgYXJlIGV2ZXIgY2hh bmdlZCwgZml4IHRoaXMgdGFibGUuICovCi0vKiBEaXR0byBpZiBhbm90aGVyIFRDUyBpcyBhZGRl ZC4gKi8KLQotaW50Ci1jc2VxdGFiW01BWFRDU0VUUysxXSA9IHsJCS8qIFRDUy9GQ1MgZXF1aXZh bGVuY3kgdGFibGUgKi8KLSAgICAtMSwJCQkJCS8qICAwID0gVHJhbnNwYXJlbnQgKi8KLSAgICBG Q19VU0FTQ0lJLAkJCQkvKiAgMSA9IEFTQ0lJICovCi0gICAgRkNfMUxBVElOLAkJCQkvKiAgMiA9 IExhdGluLTEgKi8KLSAgICBGQ18yTEFUSU4sCQkJCS8qICAzID0gTGF0aW4tMiAqLwotICAgIEZD X0NZUklMTCwJCQkJLyogIDQgPSBMYXRpbi9DeXJpbGxpYyAqLwotICAgIEZDX0pFVUMsCQkJCS8q ICA1ID0gSmFwYW5lc2UgRVVDICovCi0gICAgRkNfSEVCUkVXLAkJCQkvKiAgNiA9IExhdGluL0hl YnJldyAqLwotICAgIEZDX0dSRUVLLAkJCQkvKiAgNyA9IExhdGluL0dyZWVrICovCi0gICAgRkNf OUxBVElOLAkJCQkvKiAgOCA9IExhdGluLTkgKi8KLSAgICBGQ19VQ1MyLAkJCQkvKiAgOSA9IFVD Uy0yICovCi0gICAgRkNfVVRGOAkJCQkvKiAxMCA9IFVURi04ICovCi19OwotCi0vKgotIExhbmd1 YWdlczoKLQotIFRoaXMgdGFibGUgYWxsb3dzIEMtS2VybWl0IHRvIGhhdmUgYSBTRVQgTEFOR1VB R0UgY29tbWFuZCB0byBhcHBseSBzcGVjaWFsCi0gbGFuZ3VhZ2Utc3BlY2lmaWMgcnVsZXMgd2hl biB0cmFuc2xhdGluZyBmcm9tIGEgY2hhcmFjdGVyIHNldCB0aGF0IGNvbnRhaW5zCi0gbmF0aW9u YWwgY2hhcmFjdGVycyBpbnRvIHBsYWluIEFTQ0lJLCBsaWtlIEdlcm1hbiB1bWxhdXQtYSBiZWNv bWVzIGFlLgotCi0gT3JpZ2luYWxseSwgSSB0aG91Z2h0IGl0IHdvdWxkIGJlIGEgZ29vZCBpZGVh IHRvIGxldCBTRVQgTEFOR1VBR0UgYWxzbyBzZWxlY3QKLSBhbiBhcHByb3ByaWF0ZSBGSUxFIENI QVJBQ1RFUi1TRVQgYW5kIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgYXV0b21hdGljYWxseSwKLSBh bmQgdGhlc2UgYXJlIGluY2x1ZGVkIGluIHRoZSBsYW5naW5mbyBzdHJ1Y3R1cmUuICBMYXRlciBJ IHJlYWxpemVkIHRoYXQgdGhpcwotIHdhcyBhIGJhZCBpZGVhLiAgQW55IHBhcnRpY3VsYXIgbGFu Z3VhZ2UgKGUuZy4gRHV0Y2gpIGNhbiBiZSByZXByZXNlbnRlZCBieQotIG1hbnkgZGlmZmVyZW50 IGFuZCBpbmNvbXBhdGlibGUgY2hhcmFjdGVyIHNldHMuCi0KLSAoQnV0IHdlIGNvdWxkIHVzZSB0 aGUgbmV3ICgxOTk4KSBBU1NPQ0lBVEUgY29tbWFuZCBmb3IgdGhpcy4uLikKLSovCi0KLXN0cnVj dCBsYW5naW5mbyBsYW5nc1tdID0gewotLyogIExhbmd1YWdlIGNvZGUgICBGaWxlIENoYXJzZXQg WGZlciBDaGFyc2V0IE5hbWUgKi8KLSAgICBMX1VTQVNDSUksICAgICAgRkNfVVNBU0NJSSwgIFRD X1VTQVNDSUksICAiQVNDSUkgKEFtZXJpY2FuIEVuZ2xpc2gpIiwKLSAgICBMX0RBTklTSCwgICAg ICAgRkNfTk9BU0NJSSwgIFRDXzFMQVRJTiwgICAiRGFuaXNoIiwKLSAgICBMX0RVVENILCAgICAg ICAgRkNfRFVBU0NJSSwgIFRDXzFMQVRJTiwgICAiRHV0Y2giLAotICAgIExfRklOTklTSCwgICAg ICBGQ19GSUFTQ0lJLCAgVENfMUxBVElOLCAgICJGaW5uaXNoIiwKLSAgICBMX0ZSRU5DSCwgICAg ICAgRkNfRlJBU0NJSSwgIFRDXzFMQVRJTiwgICAiRnJlbmNoIiwKLSAgICBMX0dFUk1BTiwgICAg ICAgRkNfR0VBU0NJSSwgIFRDXzFMQVRJTiwgICAiR2VybWFuIiwKLSNpZmRlZiBHUkVFSwotICAg IExfR1JFRUssICAgICAgICBGQ19HUkVFSywgICAgVENfR1JFRUssICAgICJHcmVlayIsCi0jZW5k aWYgLyogR1JFRUsgKi8KLSNpZmRlZiBIRUJSRVcKLSAgICBMX0hFQlJFVywgICAgICAgRkNfSEVC UkVXLCAgIFRDX0hFQlJFVywgICAiSGVicmV3IiwKLSNlbmRpZiAvKiBIRUJSRVcgKi8KLSAgICBM X0hVTkdBUklBTiwgICAgRkNfSFVBU0NJSSwgIFRDXzJMQVRJTiwgICAiSHVuZ2FyaWFuIiwKLSAg ICBMX0lDRUxBTkRJQywgICAgRkNfVVNBU0NJSSwgIFRDXzFMQVRJTiwgICAiSWNlbGFuZGljIiwK LSAgICBMX0lUQUxJQU4sICAgICAgRkNfSVRBU0NJSSwgIFRDXzFMQVRJTiwgICAiSXRhbGlhbiIs Ci0jaWZkZWYgS0FOSkkKLSAgICBMX0pBUEFORVNFLCAgICAgRkNfSkVVQywgICAgIFRDX0pFVUMs ICAgICAiSmFwYW5lc2UiLAotI2VuZGlmIC8qIEtBTkpJICovCi0gICAgTF9OT1JXRUdJQU4sICAg IEZDX05PQVNDSUksICBUQ18xTEFUSU4sICAgIk5vcndlZ2lhbiIsCi0gICAgTF9QT1JUVUdVRVNF LCAgIEZDX1BPQVNDSUksICBUQ18xTEFUSU4sICAgIlBvcnR1Z3Vlc2UiLAotI2lmZGVmIENZUklM TElDCi0gICAgTF9SVVNTSUFOLCAgICAgIEZDX0NQODY2LCAgICBUQ19DWVJJTEwsICAgIlJ1c3Np YW4iLAotI2VuZGlmIC8qIENZUklMTElDICovCi0gICAgTF9TUEFOSVNILCAgICAgIEZDX1NQQVND SUksICBUQ18xTEFUSU4sICAgIlNwYW5pc2giLAotICAgIExfU1dFRElTSCwgICAgICBGQ19TV0FT Q0lJLCAgVENfMUxBVElOLCAgICJTd2VkaXNoIiwKLSAgICBMX1NXSVNTLCAgICAgICAgRkNfQ0hB U0NJSSwgIFRDXzFMQVRJTiwgICAiU3dpc3MiCi19OwotaW50IG5sYW5ncyA9IChzaXplb2YobGFu Z3MpIC8gc2l6ZW9mKHN0cnVjdCBsYW5naW5mbykpOwotCi0vKgotICBLZXl3b3JkIHRhYmxlIGZv ciB0aGUgU0VUIExBTkdVQUdFIGNvbW1hbmQuCi0gIE9ubHkgYSBmZXcgb2YgdGhlc2UgKEdlcm1h biwgU2NhbmRpbmF2aWFuLCBldGMpIGFjdHVhbGx5IGRvIGFueXRoaW5nLgotICBUaGUgbGFuZ3Vh Z2UgaXMgdXNlZCB0byBpbnZva2Ugc3BlY2lhbCB0cmFuc2xhdGlvbiBydWxlcyB3aGVuIGNvbnZl cnRpbmcKLSAgZnJvbSBhbiA4LWJpdCBjaGFyYWN0ZXIgc2V0IHRvIEFTQ0lJOyBmb3IgZXhhbXBs ZSwgR2VybWFuIHUtZGlhZXJlc2lzCi0gIGJlY29tZXMgInVlIiwgRHV0Y2ggeS1kaWFlcmVzaXMg YmVjb21lcyAiaWoiLiAgTGFuZ3VhZ2VzIHdpdGhvdXQgYXNzb2NpYXRlZAotICBydWxlcyBhcmUg aW52aXNpYmxlIChDTV9JTlYpLgotKi8KLXN0cnVjdCBrZXl0YWIgbG5ndGFiW10gPSB7Ci0gICAg ImFzY2lpIiwgICAgICAgICAgICBMX1VTQVNDSUksICAgIENNX0lOViwKLSAgICAiZGFuaXNoIiwg ICAgICAgICAgIExfREFOSVNILCAgICAgMCwKLSAgICAiZHV0Y2giLCAgICAgICAgICAgIExfRFVU Q0gsICAgICAgMCwKLSAgICAiZW5nbGlzaCIsICAgICAgICAgIExfVVNBU0NJSSwgICAgQ01fSU5W LAotICAgICJmaW5uaXNoIiwgICAgICAgICAgTF9GSU5OSVNILCAgICAwLAotICAgICJmcmVuY2gi LCAgICAgICAgICAgTF9GUkVOQ0gsICAgICAwLAotICAgICJnZXJtYW4iLCAgICAgICAgICAgTF9H RVJNQU4sICAgICAwLAotI2lmZGVmIEdSRUVLCi0gICAgImdyZWVrIiwgICAgICAgICAgICBMX0dS RUVLLCAgICAgIENNX0lOViwKLSNlbmRpZiAvKiBHUkVFSyAqLwotI2lmZGVmIEhFQlJFVwotICAg ICJoZWJyZXciLCAgICAgICAgICAgTF9IRUJSRVcsICAgICBDTV9JTlYsCi0jZW5kaWYgLyogSEVC UkVXICovCi0gICAgImh1bmdhcmlhbiIsICAgICAgICBMX0hVTkdBUklBTiwgIENNX0lOViwKLSAg ICAiaWNlbGFuZGljIiwgICAgICAgIExfSUNFTEFORElDLCAgMCwKLSAgICAiaXRhbGlhbiIsICAg ICAgICAgIExfSVRBTElBTiwgICAgQ01fSU5WLAotI2lmZGVmIEtBTkpJCi0gICAgImphcGFuZXNl IiwgICAgICAgICBMX0pBUEFORVNFLCAgIENNX0lOViwKLSNlbmRpZiAvKiBLQU5KSSAqLwotICAg ICJub3J3ZWdpYW4iLCAgICAgICAgTF9OT1JXRUdJQU4sICAwLAotICAgICJub25lIiwgICAgICAg ICAgICAgTF9VU0FTQ0lJLCAgICAwLAotICAgICJwb3J0dWd1ZXNlIiwgICAgICAgTF9QT1JUVUdV RVNFLCBDTV9JTlYsCi0jaWZkZWYgQ1lSSUxMSUMKLSAgICAicnVzc2lhbiIsICAgICAgICAgIExf UlVTU0lBTiwgICAgMCwKLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotICAgICJzcGFuaXNoIiwgICAg ICAgICAgTF9TUEFOSVNILCAgICBDTV9JTlYsCi0gICAgInN3ZWRpc2giLCAgICAgICAgICBMX1NX RURJU0gsICAgIDAsCi0jaWZkZWYgQ1lSSUxMSUMKLSAgICAidWtyYWluaWFuIiwgICAgICAgIExf UlVTU0lBTiwgICAgMCwKLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotICAgICIiLCAwLCAwCi19Owot aW50IG5sbmcgPSAoc2l6ZW9mKGxuZ3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsg LyogaG93IG1hbnkgKi8KLQotCi0vKiBUcmFuc2xhdGlvbiB0YWJsZXMgLi4uICovCi0KLS8qCi0g IEZvciBlYWNoIHBhaXIgb2YgKHRyYW5zZmVyLGZpbGUpIGNoYXJhY3RlciBzZXRzLCB3ZSBuZWVk IHR3byB0cmFuc2xhdGlvbgotICBmdW5jdGlvbnMsIG9uZSBmb3Igc2VuZGluZywgb25lIGZvciBy ZWNlaXZpbmcuCi0qLwotCi0vKgotICBIZXJlIGlzIHRoZSBmaXJzdCB0YWJsZSwgTGF0aW4tMSB0 byBBU0NJSSwgZnVsbHkgYW5ub3RhdGVkLi4uCi0gIFRoaXMgb25lIGlzIGFic29sdXRlbHkgTk9U IGludmVydGlibGUsIHNpbmNlIHdlJ3JlIGdvaW5nIGZyb20gYW4gOC1iaXQKLSAgc2V0IHRvIGEg Ny1iaXQgc2V0LiAgQWNjZW50ZWQgbGV0dGVycyBhcmUgbWFwcGVkIHRvIHVuYWNjZW50ZWQKLSAg ZXF1aXZhbGVudHMsIEMxIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgYWxsIHRyYW5zbGF0ZWQgdG8g Ij8iLCBldGMuCi0qLwotQ09OU1QgQ0hBUgoteWwxYXNbXSA9IHsgIC8qIElTTyA4ODU5LTEgTGF0 aW4gQWxwaGFiZXQgMSB0byBVUyBBU0NJSSAqLwotICAgICAgLyogIFNvdXJjZSBjaGFyYWN0ZXIg ICAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICA9PiBUcmFuc2xhdGlvbiAqLwotICAgICAgLyog IERlYyByb3cvY29sIFNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLwotICAwLCAgLyogIDAwMCAgMDAvMDAgIEMwIE5VTCAgQ3RybC1AICAgICAgICAgICAgICAg ICAgICA9PiAgKHNlbGYpICAqLwotICAxLCAgLyogIDAwMSAgMDAvMDEgIEMwIFNPSCAgQ3RybC1B ICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotICAyLCAgLyogIDAwMiAgMDAvMDIg IEMwIFNUWCAgQ3RybC1CICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotICAzLCAg LyogIDAwMyAgMDAvMDMgIEMwIEVUWCAgQ3RybC1DICAgICAgICAgICAgICAgICAgICA9PiAgKHNl bGYpICAqLwotICA0LCAgLyogIDAwNCAgMDAvMDQgIEMwIEVPVCAgQ3RybC1EICAgICAgICAgICAg ICAgICAgICA9PiAgKHNlbGYpICAqLwotICA1LCAgLyogIDAwNSAgMDAvMDUgIEMwIEVOUSAgQ3Ry bC1FICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotICA2LCAgLyogIDAwNiAgMDAv MDYgIEMwIEFDSyAgQ3RybC1GICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotICA3 LCAgLyogIDAwNyAgMDAvMDcgIEMwIEJFTCAgQ3RybC1HICAgICAgICAgICAgICAgICAgICA9PiAg KHNlbGYpICAqLwotICA4LCAgLyogIDAwOCAgMDAvMDggIEMwIEJTICAgQ3RybC1IICAgICAgICAg ICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotICA5LCAgLyogIDAwOSAgMDAvMDkgIEMwIEhUICAg Q3RybC1JICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDEwLCAgLyogIDAxMCAg MDAvMTAgIEMwIExGICAgQ3RybC1KICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwot IDExLCAgLyogIDAxMSAgMDAvMTEgIEMwIFZUICAgQ3RybC1LICAgICAgICAgICAgICAgICAgICA9 PiAgKHNlbGYpICAqLwotIDEyLCAgLyogIDAxMiAgMDAvMTIgIEMwIEZGICAgQ3RybC1MICAgICAg ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDEzLCAgLyogIDAxMyAgMDAvMTMgIEMwIENS ICAgQ3RybC1NICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDE0LCAgLyogIDAx NCAgMDAvMTQgIEMwIFNPICAgQ3RybC1OICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAq LwotIDE1LCAgLyogIDAxNSAgMDAvMTUgIEMwIFNJICAgQ3RybC1PICAgICAgICAgICAgICAgICAg ICA9PiAgKHNlbGYpICAqLwotIDE2LCAgLyogIDAxNiAgMDEvMDAgIEMwIERMRSAgQ3RybC1QICAg ICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDE3LCAgLyogIDAxNyAgMDEvMDEgIEMw IERDMSAgQ3RybC1RICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDE4LCAgLyog IDAxOCAgMDEvMDIgIEMwIERDMiAgQ3RybC1SICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYp ICAqLwotIDE5LCAgLyogIDAxOSAgMDEvMDMgIEMwIERDMyAgQ3RybC1TICAgICAgICAgICAgICAg ICAgICA9PiAgKHNlbGYpICAqLwotIDIwLCAgLyogIDAyMCAgMDEvMDQgIEMwIERDNCAgQ3RybC1U ICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDIxLCAgLyogIDAyMSAgMDEvMDUg IEMwIE5BSyAgQ3RybC1VICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDIyLCAg LyogIDAyMiAgMDEvMDYgIEMwIFNZTiAgQ3RybC1WICAgICAgICAgICAgICAgICAgICA9PiAgKHNl bGYpICAqLwotIDIzLCAgLyogIDAyMyAgMDEvMDcgIEMwIEVUQiAgQ3RybC1XICAgICAgICAgICAg ICAgICAgICA9PiAgKHNlbGYpICAqLwotIDI0LCAgLyogIDAyNCAgMDEvMDggIEMwIENBTiAgQ3Ry bC1YICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDI1LCAgLyogIDAyNSAgMDEv MDkgIEMwIEVNICAgQ3RybC1ZICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDI2 LCAgLyogIDAyNiAgMDEvMTAgIEMwIFNVQiAgQ3RybC1aICAgICAgICAgICAgICAgICAgICA9PiAg KHNlbGYpICAqLwotIDI3LCAgLyogIDAyNyAgMDEvMTEgIEMwIEVTQyAgQ3RybC1bICAgICAgICAg ICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDI4LCAgLyogIDAyOCAgMDEvMTIgIEMwIEZTICAg Q3RybC1cICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDI5LCAgLyogIDAyOSAg MDEvMTMgIEMwIEdTICAgQ3RybC1dICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwot IDMwLCAgLyogIDAzMCAgMDEvMTQgIEMwIFJTICAgQ3RybC1eICAgICAgICAgICAgICAgICAgICA9 PiAgKHNlbGYpICAqLwotIDMxLCAgLyogIDAzMSAgMDEvMTUgIEMwIFVTICAgQ3RybC1fICAgICAg ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDMyLCAgLyogIDAzMiAgMDIvMDAgICAgIFNQ ICAgU3BhY2UgICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDMzLCAgLyogIDAz MyAgMDIvMDEgIEcwICEgICAgRXhjbGFtYXRpb24gbWFyayAgICAgICAgICA9PiAgKHNlbGYpICAq LwotIDM0LCAgLyogIDAzNCAgMDIvMDIgIEcwICIgICAgRG91YmxlcXVvdGUgICAgICAgICAgICAg ICA9PiAgKHNlbGYpICAqLwotIDM1LCAgLyogIDAzNSAgMDIvMDMgIEcwICMgICAgTnVtYmVyIHNp Z24gICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDM2LCAgLyogIDAzNiAgMDIvMDQgIEcw ICQgICAgRG9sbGFyIHNpZ24gICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDM3LCAgLyog IDAzNyAgMDIvMDUgIEcwICUgICAgUGVyY2VudCBzaWduICAgICAgICAgICAgICA9PiAgKHNlbGYp ICAqLwotIDM4LCAgLyogIDAzOCAgMDIvMDYgIEcwICYgICAgQW1wZXJzYW5kICAgICAgICAgICAg ICAgICA9PiAgKHNlbGYpICAqLwotIDM5LCAgLyogIDAzOSAgMDIvMDcgIEcwICcgICAgQXBvc3Ry b3BoZSAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDQwLCAgLyogIDA0MCAgMDIvMDgg IEcwICggICAgTGVmdCBwYXJlbnRoZXNpcyAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDQxLCAg LyogIDA0MSAgMDIvMDkgIEcwICkgICAgUmlnaHQgcGFyZW50aGVzaXMgICAgICAgICA9PiAgKHNl bGYpICAqLwotIDQyLCAgLyogIDA0MiAgMDIvMTAgIEcwICogICAgQXN0ZXJpc2sgICAgICAgICAg ICAgICAgICA9PiAgKHNlbGYpICAqLwotIDQzLCAgLyogIDA0MyAgMDIvMTEgIEcwICsgICAgUGx1 cyBzaWduICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDQ0LCAgLyogIDA0NCAgMDIv MTIgIEcwICwgICAgQ29tbWEgICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDQ1 LCAgLyogIDA0NSAgMDIvMTMgIEcwIC0gICAgSHlwaGVuLCBtaW51cyBzaWduICAgICAgICA9PiAg KHNlbGYpICAqLwotIDQ2LCAgLyogIDA0NiAgMDIvMTQgIEcwIC4gICAgUGVyaW9kLCBmdWxsIHN0 b3AgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDQ3LCAgLyogIDA0NyAgMDIvMTUgIEcwIC8gICAg U2xhc2gsIHNvbGlkdXMgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDQ4LCAgLyogIDA0OCAg MDMvMDAgIEcwIDAgICAgRGlnaXQgMCAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwot IDQ5LCAgLyogIDA0OSAgMDMvMDEgIEcwIDEgICAgRGlnaXQgMSAgICAgICAgICAgICAgICAgICA9 PiAgKHNlbGYpICAqLwotIDUwLCAgLyogIDA1MCAgMDMvMDIgIEcwIDIgICAgRGlnaXQgMiAgICAg ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDUxLCAgLyogIDA1MSAgMDMvMDMgIEcwIDMg ICAgRGlnaXQgMyAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDUyLCAgLyogIDA1 MiAgMDMvMDQgIEcwIDQgICAgRGlnaXQgNCAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAq LwotIDUzLCAgLyogIDA1MyAgMDMvMDUgIEcwIDUgICAgRGlnaXQgNSAgICAgICAgICAgICAgICAg ICA9PiAgKHNlbGYpICAqLwotIDU0LCAgLyogIDA1NCAgMDMvMDYgIEcwIDYgICAgRGlnaXQgNiAg ICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDU1LCAgLyogIDA1NSAgMDMvMDcgIEcw IDcgICAgRGlnaXQgNyAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDU2LCAgLyog IDA1NiAgMDMvMDggIEcwIDggICAgRGlnaXQgOCAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYp ICAqLwotIDU3LCAgLyogIDA1NyAgMDMvMDkgIEcwIDkgICAgRGlnaXQgOSAgICAgICAgICAgICAg ICAgICA9PiAgKHNlbGYpICAqLwotIDU4LCAgLyogIDA1OCAgMDMvMTAgIEcwIDogICAgQ29sb24g ICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDU5LCAgLyogIDA1OSAgMDMvMTEg IEcwIDsgICAgU2VtaWNvbG9uICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDYwLCAg LyogIDA2MCAgMDMvMTIgIEcwIDwgICAgTGVzcy10aGFuIHNpZ24gICAgICAgICAgICA9PiAgKHNl bGYpICAqLwotIDYxLCAgLyogIDA2MSAgMDMvMTMgIEcwID0gICAgRXF1YWxzIHNpZ24gICAgICAg ICAgICAgICA9PiAgKHNlbGYpICAqLwotIDYyLCAgLyogIDA2MiAgMDMvMTQgIEcwID4gICAgR3Jl YXRlci10aGFuIHNpZ24gICAgICAgICA9PiAgKHNlbGYpICAqLwotIDYzLCAgLyogIDA2MyAgMDMv MTUgIEcwID8gICAgUXVlc3Rpb24gbWFyayAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDY0 LCAgLyogIDA2NCAgMDQvMDAgIEcwIEAgICAgQ29tbWVyY2lhbCBhdCBzaWduICAgICAgICA9PiAg KHNlbGYpICAqLwotIDY1LCAgLyogIDA2NSAgMDQvMDEgIEcwIEEgICAgTGV0dGVyIEEgICAgICAg ICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDY2LCAgLyogIDA2NiAgMDQvMDIgIEcwIEIgICAg TGV0dGVyIEIgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDY3LCAgLyogIDA2NyAg MDQvMDMgIEcwIEMgICAgTGV0dGVyIEMgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwot IDY4LCAgLyogIDA2OCAgMDQvMDQgIEcwIEQgICAgTGV0dGVyIEQgICAgICAgICAgICAgICAgICA9 PiAgKHNlbGYpICAqLwotIDY5LCAgLyogIDA2OSAgMDQvMDUgIEcwIEUgICAgTGV0dGVyIEUgICAg ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDcwLCAgLyogIDA3MCAgMDQvMDYgIEcwIEYg ICAgTGV0dGVyIEYgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDcxLCAgLyogIDA3 MSAgMDQvMDcgIEcwIEcgICAgTGV0dGVyIEcgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAq LwotIDcyLCAgLyogIDA3MiAgMDQvMDggIEcwIEggICAgTGV0dGVyIEggICAgICAgICAgICAgICAg ICA9PiAgKHNlbGYpICAqLwotIDczLCAgLyogIDA3MyAgMDQvMDkgIEcwIEkgICAgTGV0dGVyIEkg ICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDc0LCAgLyogIDA3NCAgMDQvMTAgIEcw IEogICAgTGV0dGVyIEogICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDc1LCAgLyog IDA3NSAgMDQvMTEgIEcwIEsgICAgTGV0dGVyIEsgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYp ICAqLwotIDc2LCAgLyogIDA3NiAgMDQvMTIgIEcwIEwgICAgTGV0dGVyIEwgICAgICAgICAgICAg ICAgICA9PiAgKHNlbGYpICAqLwotIDc3LCAgLyogIDA3NyAgMDQvMTMgIEcwIE0gICAgTGV0dGVy IE0gICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDc4LCAgLyogIDA3OCAgMDQvMTQg IEcwIE4gICAgTGV0dGVyIE4gICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDc5LCAg LyogIDA3OSAgMDQvMTUgIEcwIE8gICAgTGV0dGVyIE8gICAgICAgICAgICAgICAgICA9PiAgKHNl bGYpICAqLwotIDgwLCAgLyogIDA4MCAgMDUvMDAgIEcwIFAgICAgTGV0dGVyIFAgICAgICAgICAg ICAgICAgICA9PiAgKHNlbGYpICAqLwotIDgxLCAgLyogIDA4MSAgMDUvMDEgIEcwIFEgICAgTGV0 dGVyIFEgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDgyLCAgLyogIDA4MiAgMDUv MDIgIEcwIFIgICAgTGV0dGVyIFIgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDgz LCAgLyogIDA4MyAgMDUvMDMgIEcwIFMgICAgTGV0dGVyIFMgICAgICAgICAgICAgICAgICA9PiAg KHNlbGYpICAqLwotIDg0LCAgLyogIDA4NCAgMDUvMDQgIEcwIFQgICAgTGV0dGVyIFQgICAgICAg ICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDg1LCAgLyogIDA4NSAgMDUvMDUgIEcwIFUgICAg TGV0dGVyIFUgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDg2LCAgLyogIDA4NiAg MDUvMDYgIEcwIFYgICAgTGV0dGVyIFYgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwot IDg3LCAgLyogIDA4NyAgMDUvMDcgIEcwIFcgICAgTGV0dGVyIFcgICAgICAgICAgICAgICAgICA9 PiAgKHNlbGYpICAqLwotIDg4LCAgLyogIDA4OCAgMDUvMDggIEcwIFggICAgTGV0dGVyIFggICAg ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDg5LCAgLyogIDA4OSAgMDUvMDkgIEcwIFkg ICAgTGV0dGVyIFkgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDkwLCAgLyogIDA5 MCAgMDUvMTAgIEcwIFogICAgTGV0dGVyIFogICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAq LwotIDkxLCAgLyogIDA5MSAgMDUvMTEgIEcwIFsgICAgTGVmdCBzcXVhcmUgYnJhY2tldCAgICAg ICA9PiAgKHNlbGYpICAqLwotIDkyLCAgLyogIDA5MiAgMDUvMTIgIEcwIFwgICAgUmV2ZXJzZSBz bGFzaCAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDkzLCAgLyogIDA5MyAgMDUvMTMgIEcw IF0gICAgUmlnaHQgc3F1YXJlIGJyYWNrZXQgICAgICA9PiAgKHNlbGYpICAqLwotIDk0LCAgLyog IDA5NCAgMDUvMTQgIEcwIF4gICAgQ2lyY3VtZmxleCBhY2NlbnQgICAgICAgICA9PiAgKHNlbGYp ICAqLwotIDk1LCAgLyogIDA5NSAgMDUvMTUgIEcwIF8gICAgVW5kZXJsaW5lLCBsb3cgbGluZSAg ICAgICA9PiAgKHNlbGYpICAqLwotIDk2LCAgLyogIDA5NiAgMDYvMDAgIEcwIGAgICAgR3JhdmUg YWNjZW50ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDk3LCAgLyogIDA5NyAgMDYvMDEg IEcwIGEgICAgTGV0dGVyIGEgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotIDk4LCAg LyogIDA5OCAgMDYvMDIgIEcwIGIgICAgTGV0dGVyIGIgICAgICAgICAgICAgICAgICA9PiAgKHNl bGYpICAqLwotIDk5LCAgLyogIDA5OSAgMDYvMDMgIEcwIGMgICAgTGV0dGVyIGMgICAgICAgICAg ICAgICAgICA9PiAgKHNlbGYpICAqLwotMTAwLCAgLyogIDEwMCAgMDYvMDQgIEcwIGQgICAgTGV0 dGVyIGQgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotMTAxLCAgLyogIDEwMSAgMDYv MDUgIEcwIGUgICAgTGV0dGVyIGUgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotMTAy LCAgLyogIDEwMiAgMDYvMDYgIEcwIGYgICAgTGV0dGVyIGYgICAgICAgICAgICAgICAgICA9PiAg KHNlbGYpICAqLwotMTAzLCAgLyogIDEwMyAgMDYvMDcgIEcwIGcgICAgTGV0dGVyIGcgICAgICAg ICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotMTA0LCAgLyogIDEwNCAgMDYvMDggIEcwIGggICAg TGV0dGVyIGggICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotMTA1LCAgLyogIDEwNSAg MDYvMDkgIEcwIGkgICAgTGV0dGVyIGkgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwot MTA2LCAgLyogIDEwNiAgMDYvMTAgIEcwIGogICAgTGV0dGVyIGogICAgICAgICAgICAgICAgICA9 PiAgKHNlbGYpICAqLwotMTA3LCAgLyogIDEwNyAgMDYvMTEgIEcwIGsgICAgTGV0dGVyIGsgICAg ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotMTA4LCAgLyogIDEwOCAgMDYvMTIgIEcwIGwg ICAgTGV0dGVyIGwgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotMTA5LCAgLyogIDEw OSAgMDYvMTMgIEcwIG0gICAgTGV0dGVyIG0gICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAq LwotMTEwLCAgLyogIDExMCAgMDYvMTQgIEcwIG4gICAgTGV0dGVyIG4gICAgICAgICAgICAgICAg ICA9PiAgKHNlbGYpICAqLwotMTExLCAgLyogIDExMSAgMDYvMTUgIEcwIG8gICAgTGV0dGVyIG8g ICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotMTEyLCAgLyogIDExMiAgMDcvMDAgIEcw IHAgICAgTGV0dGVyIHAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotMTEzLCAgLyog IDExMyAgMDcvMDEgIEcwIHEgICAgTGV0dGVyIHEgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYp ICAqLwotMTE0LCAgLyogIDExNCAgMDcvMDIgIEcwIHIgICAgTGV0dGVyIHIgICAgICAgICAgICAg ICAgICA9PiAgKHNlbGYpICAqLwotMTE1LCAgLyogIDExNSAgMDcvMDMgIEcwIHMgICAgTGV0dGVy IHMgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotMTE2LCAgLyogIDExNiAgMDcvMDQg IEcwIHQgICAgTGV0dGVyIHQgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotMTE3LCAg LyogIDExNyAgMDcvMDUgIEcwIHUgICAgTGV0dGVyIHUgICAgICAgICAgICAgICAgICA9PiAgKHNl bGYpICAqLwotMTE4LCAgLyogIDExOCAgMDcvMDYgIEcwIHYgICAgTGV0dGVyIHYgICAgICAgICAg ICAgICAgICA9PiAgKHNlbGYpICAqLwotMTE5LCAgLyogIDExOSAgMDcvMDcgIEcwIHcgICAgTGV0 dGVyIHcgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotMTIwLCAgLyogIDEyMCAgMDcv MDggIEcwIHggICAgTGV0dGVyIHggICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotMTIx LCAgLyogIDEyMSAgMDcvMDkgIEcwIHkgICAgTGV0dGVyIHkgICAgICAgICAgICAgICAgICA9PiAg KHNlbGYpICAqLwotMTIyLCAgLyogIDEyMiAgMDcvMTAgIEcwIHogICAgTGV0dGVyIHogICAgICAg ICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotMTIzLCAgLyogIDEyMyAgMDcvMTEgIEcwIHsgICAg TGVmdCBjdXJseSBicmFja2V0ICAgICAgICA9PiAgKHNlbGYpICAqLwotMTI0LCAgLyogIDEyNCAg MDcvMTIgIEcwIHwgICAgVmVydGljYWwgYmFyICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwot MTI1LCAgLyogIDEyNSAgMDcvMTMgIEcwIH0gICAgUmlnaHQgY3VybHkgYnJhY2tldCAgICAgICA9 PiAgKHNlbGYpICAqLwotMTI2LCAgLyogIDEyNiAgMDcvMTQgIEcwIH4gICAgVGlsZGUgICAgICAg ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotMTI3LCAgLyogIDEyNyAgMDcvMTUgICAgIERF TCAgRGVsZXRlLCBSdWJvdXQgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwotVU5LLCAgLyogIDEy OCAgMDgvMDAgIEMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAq LwotVU5LLCAgLyogIDEyOSAgMDgvMDEgIEMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDEzMCAgMDgvMDIgIEMxICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDEzMSAgMDgvMDMgIEMx ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyog IDEzMiAgMDgvMDQgIEMxIElORCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAg ICAqLwotVU5LLCAgLyogIDEzMyAgMDgvMDUgIEMxIE5FTCAgICAgICAgICAgICAgICAgICAgICAg ICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDEzNCAgMDgvMDYgIEMxIFNTQSAgICAgICAg ICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDEzNSAgMDgvMDcg IEMxIEVTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAg LyogIDEzNiAgMDgvMDggIEMxIEhUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5L ICAgICAqLwotVU5LLCAgLyogIDEzNyAgMDgvMDkgIEMxICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDEzOCAgMDgvMTAgIEMxICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDEzOSAgMDgv MTEgIEMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5L LCAgLyogIDE0MCAgMDgvMTIgIEMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAg VU5LICAgICAqLwotVU5LLCAgLyogIDE0MSAgMDgvMTMgIEMxIFJJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDE0MiAgMDgvMTQgIEMxIFNTMiAg ICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDE0MyAg MDgvMTUgIEMxIFNTMyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwot VU5LLCAgLyogIDE0NCAgMDkvMDAgIEMxIERDUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9 PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDE0NSAgMDkvMDEgIEMxICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDE0NiAgMDkvMDIgIEMxICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDE0 NyAgMDkvMDMgIEMxIFNUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAq LwotVU5LLCAgLyogIDE0OCAgMDkvMDQgIEMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDE0OSAgMDkvMDUgIEMxICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDE1MCAgMDkvMDYgIEMx IFNQQSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyog IDE1MSAgMDkvMDcgIEMxIEVQQSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAg ICAqLwotVU5LLCAgLyogIDE1MiAgMDkvMDggIEMxICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDE1MyAgMDkvMDkgIEMxICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDE1NCAgMDkvMTAg IEMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAg LyogIDE1NSAgMDkvMTEgIEMxIENTSSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5L ICAgICAqLwotVU5LLCAgLyogIDE1NiAgMDkvMTIgIEMxIFNUICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDE1NyAgMDkvMTMgIEMxIE9TQyAgICAg ICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyogIDE1OCAgMDkv MTQgIEMxIFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5L LCAgLyogIDE1OSAgMDkvMTUgIEMxIEFQQyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAg VU5LICAgICAqLwotIDMyLCAgLyogIDE2MCAgMTAvMDAgIEcxICAgICAgTm8tYnJlYWsgc3BhY2Ug ICAgICAgICAgICA9PiAgU1AgICAgICAqLwotIDMzLCAgLyogIDE2MSAgMTAvMDEgIEcxICAgICAg SW52ZXJ0ZWQgZXhjbGFtYXRpb24gICAgICA9PiAgISAgICAgICAqLwotIDk5LCAgLyogIDE2MiAg MTAvMDIgIEcxICAgICAgQ2VudCBzaWduICAgICAgICAgICAgICAgICA9PiAgYyAgICAgICAqLwot IDM1LCAgLyogIDE2MyAgMTAvMDMgIEcxICAgICAgUG91bmQgc2lnbiAgICAgICAgICAgICAgICA9 PiAgIyAgICAgICAqLwotIDM2LCAgLyogIDE2NCAgMTAvMDQgIEcxICAgICAgQ3VycmVuY3kgc2ln biAgICAgICAgICAgICA9PiAgJCAgICAgICAqLwotIDg5LCAgLyogIDE2NSAgMTAvMDUgIEcxICAg ICAgWWVuIHNpZ24gICAgICAgICAgICAgICAgICA9PiAgWSAgICAgICAqLwotMTI0LCAgLyogIDE2 NiAgMTAvMDYgIEcxICAgICAgQnJva2VuIGJhciAgICAgICAgICAgICAgICA9PiAgfCAgICAgICAq LwotIDgwLCAgLyogIDE2NyAgMTAvMDcgIEcxICAgICAgUGFyYWdyYXBoIHNpZ24gICAgICAgICAg ICA9PiAgUCAgICAgICAqLwotIDM0LCAgLyogIDE2OCAgMTAvMDggIEcxICAgICAgRGlhZXJlc2lz ICAgICAgICAgICAgICAgICA9PiAgIiAgICAgICAqLwotIDY3LCAgLyogIDE2OSAgMTAvMDkgIEcx ICAgICAgQ29weXJpZ2h0IHNpZ24gICAgICAgICAgICA9PiAgQyAgICAgICAqLwotIDk3LCAgLyog IDE3MCAgMTAvMTAgIEcxICAgICAgRmVtaW5pbmUgb3JkaW5hbCAgICAgICAgICA9PiAgYSAgICAg ICAqLwotIDM0LCAgLyogIDE3MSAgMTAvMTEgIEcxICAgICAgTGVmdCBhbmdsZSBxdW90YXRpb24g ICAgICA9PiAgIiAgICAgICAqLwotMTI2LCAgLyogIDE3MiAgMTAvMTIgIEcxICAgICAgTm90IHNp Z24gICAgICAgICAgICAgICAgICA9PiAgfiAgICAgICAqLwotIDQ1LCAgLyogIDE3MyAgMTAvMTMg IEcxICAgICAgU29mdCBoeXBoZW4gICAgICAgICAgICAgICA9PiAgLSAgICAgICAqLwotIDgyLCAg LyogIDE3NCAgMTAvMTQgIEcxICAgICAgUmVnaXN0ZXJlZCB0cmFkZSBtYXJrICAgICA9PiAgUiAg ICAgICAqLwotIDk1LCAgLyogIDE3NSAgMTAvMTUgIEcxICAgICAgTWFjcm9uICAgICAgICAgICAg ICAgICAgICA9PiAgXyAgICAgICAqLwotMTExLCAgLyogIDE3NiAgMTEvMDAgIEcxICAgICAgRGVn cmVlIHNpZ24sIHJpbmcgYWJvdmUgICA9PiAgbyAgICAgICAqLwotVU5LLCAgLyogIDE3NyAgMTEv MDEgIEcxICAgICAgUGx1cy1taW51cyBzaWduICAgICAgICAgICA9PiAgVU5LICAgICAqLwotIDUw LCAgLyogIDE3OCAgMTEvMDIgIEcxICAgICAgU3VwZXJzY3JpcHQgdHdvICAgICAgICAgICA9PiAg MiAgICAgICAqLwotIDUxLCAgLyogIDE3OSAgMTEvMDMgIEcxICAgICAgU3VwZXJzY3JpcHQgdGhy ZWUgICAgICAgICA9PiAgMyAgICAgICAqLwotIDM5LCAgLyogIDE4MCAgMTEvMDQgIEcxICAgICAg QWN1dGUgYWNjZW50ICAgICAgICAgICAgICA9PiAgJyAgICAgICAqLwotMTE3LCAgLyogIDE4MSAg MTEvMDUgIEcxICAgICAgTWljcm8gc2lnbiAgICAgICAgICAgICAgICA9PiAgdSAgICAgICAqLwot IDQ1LCAgLyogIDE4MiAgMTEvMDYgIEcxICAgICAgUGlsY3JvdyBzaWduICAgICAgICAgICAgICA9 PiAgLSAgICAgICAqLwotIDQ1LCAgLyogIDE4MyAgMTEvMDcgIEcxICAgICAgTWlkZGxlIGRvdCAg ICAgICAgICAgICAgICA9PiAgLSAgICAgICAqLwotIDQ0LCAgLyogIDE4NCAgMTEvMDggIEcxICAg ICAgQ2VkaWxsYSAgICAgICAgICAgICAgICAgICA9PiAgLCAgICAgICAqLwotIDQ5LCAgLyogIDE4 NSAgMTEvMDkgIEcxICAgICAgU3VwZXJzY3JpcHQgb25lICAgICAgICAgICA9PiAgMSAgICAgICAq LwotMTExLCAgLyogIDE4NiAgMTEvMTAgIEcxICAgICAgTWFzY3VsaW5lIG9yZGluYWwgICAgICAg ICA9PiAgbyAgICAgICAqLwotIDM0LCAgLyogIDE4NyAgMTEvMTEgIEcxICAgICAgUmlnaHQgYW5n bGUgcXVvdGF0aW9uICAgICA9PiAgIiAgICAgICAqLwotVU5LLCAgLyogIDE4OCAgMTEvMTIgIEcx ICAgICAgT25lIHF1YXJ0ZXIgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwotVU5LLCAgLyog IDE4OSAgMTEvMTMgIEcxICAgICAgT25lIGhhbGYgICAgICAgICAgICAgICAgICA9PiAgVU5LICAg ICAqLwotVU5LLCAgLyogIDE5MCAgMTEvMTQgIEcxICAgICAgVGhyZWUgcXVhcnRlcnMgICAgICAg ICAgICA9PiAgVU5LICAgICAqLwotIDYzLCAgLyogIDE5MSAgMTEvMTUgIEcxICAgICAgSW52ZXJ0 ZWQgcXVlc3Rpb24gbWFyayAgICA9PiAgPyAgICAgICAqLwotIDY1LCAgLyogIDE5MiAgMTIvMDAg IEcxICAgICAgQSBncmF2ZSAgICAgICAgICAgICAgICAgICA9PiAgQSAgICAgICAqLwotIDY1LCAg LyogIDE5MyAgMTIvMDEgIEcxICAgICAgQSBhY3V0ZSAgICAgICAgICAgICAgICAgICA9PiAgQSAg ICAgICAqLwotIDY1LCAgLyogIDE5NCAgMTIvMDIgIEcxICAgICAgQSBjaXJjdW1mbGV4ICAgICAg ICAgICAgICA9PiAgQSAgICAgICAqLwotIDY1LCAgLyogIDE5NSAgMTIvMDMgIEcxICAgICAgQSB0 aWxkZSAgICAgICAgICAgICAgICAgICA9PiAgQSAgICAgICAqLwotIDY1LCAgLyogIDE5NiAgMTIv MDQgIEcxICAgICAgQSBkaWFlcmVzaXMgICAgICAgICAgICAgICA9PiAgQSAgICAgICAqLwotIDY1 LCAgLyogIDE5NyAgMTIvMDUgIEcxICAgICAgQSByaW5nIGFib3ZlICAgICAgICAgICAgICA9PiAg QSAgICAgICAqLwotIDY1LCAgLyogIDE5OCAgMTIvMDYgIEcxICAgICAgQSB3aXRoIEUgICAgICAg ICAgICAgICAgICA9PiAgQSAgICAgICAqLwotIDY3LCAgLyogIDE5OSAgMTIvMDcgIEcxICAgICAg QyBDZWRpbGxhICAgICAgICAgICAgICAgICA9PiAgQyAgICAgICAqLwotIDY5LCAgLyogIDIwMCAg MTIvMDggIEcxICAgICAgRSBncmF2ZSAgICAgICAgICAgICAgICAgICA9PiAgRSAgICAgICAqLwot IDY5LCAgLyogIDIwMSAgMTIvMDkgIEcxICAgICAgRSBhY3V0ZSAgICAgICAgICAgICAgICAgICA9 PiAgRSAgICAgICAqLwotIDY5LCAgLyogIDIwMiAgMTIvMTAgIEcxICAgICAgRSBjaXJjdW1mbGV4 ICAgICAgICAgICAgICA9PiAgRSAgICAgICAqLwotIDY5LCAgLyogIDIwMyAgMTIvMTEgIEcxICAg ICAgRSBkaWFlcmVzaXMgICAgICAgICAgICAgICA9PiAgRSAgICAgICAqLwotIDczLCAgLyogIDIw NCAgMTIvMTIgIEcxICAgICAgSSBncmF2ZSAgICAgICAgICAgICAgICAgICA9PiAgSSAgICAgICAq LwotIDczLCAgLyogIDIwNSAgMTIvMTMgIEcxICAgICAgSSBhY3V0ZSAgICAgICAgICAgICAgICAg ICA9PiAgSSAgICAgICAqLwotIDczLCAgLyogIDIwNiAgMTIvMTQgIEcxICAgICAgSSBjaXJjdW1m bGV4ICAgICAgICAgICAgICA9PiAgSSAgICAgICAqLwotIDczLCAgLyogIDIwNyAgMTIvMTUgIEcx ICAgICAgSSBkaWFlcmVzaXMgICAgICAgICAgICAgICA9PiAgSSAgICAgICAqLwotIDY4LCAgLyog IDIwOCAgMTMvMDAgIEcxICAgICAgSWNlbGFuZGljIEV0aCAgICAgICAgICAgICA9PiAgRCAgICAg ICAqLwotIDc4LCAgLyogIDIwOSAgMTMvMDEgIEcxICAgICAgTiB0aWxkZSAgICAgICAgICAgICAg ICAgICA9PiAgTiAgICAgICAqLwotIDc5LCAgLyogIDIxMCAgMTMvMDIgIEcxICAgICAgTyBncmF2 ZSAgICAgICAgICAgICAgICAgICA9PiAgTyAgICAgICAqLwotIDc5LCAgLyogIDIxMSAgMTMvMDMg IEcxICAgICAgTyBhY3V0ZSAgICAgICAgICAgICAgICAgICA9PiAgTyAgICAgICAqLwotIDc5LCAg LyogIDIxMiAgMTMvMDQgIEcxICAgICAgTyBjaXJjdW1mbGV4ICAgICAgICAgICAgICA9PiAgTyAg ICAgICAqLwotIDc5LCAgLyogIDIxMyAgMTMvMDUgIEcxICAgICAgTyB0aWxkZSAgICAgICAgICAg ICAgICAgICA9PiAgTyAgICAgICAqLwotIDc5LCAgLyogIDIxNCAgMTMvMDYgIEcxICAgICAgTyBk aWFlcmVzaXMgICAgICAgICAgICAgICA9PiAgTyAgICAgICAqLwotMTIwLCAgLyogIDIxNSAgMTMv MDcgIEcxICAgICAgTXVsdGlwbGljYXRpb24gc2lnbiAgICAgICA9PiAgeCAgICAgICAqLwotIDc5 LCAgLyogIDIxNiAgMTMvMDggIEcxICAgICAgTyBvYmxpcXVlIHN0cm9rZSAgICAgICAgICA9PiAg TyAgICAgICAqLwotIDg1LCAgLyogIDIxNyAgMTMvMDkgIEcxICAgICAgVSBncmF2ZSAgICAgICAg ICAgICAgICAgICA9PiAgVSAgICAgICAqLwotIDg1LCAgLyogIDIxOCAgMTMvMTAgIEcxICAgICAg VSBhY3V0ZSAgICAgICAgICAgICAgICAgICA9PiAgVSAgICAgICAqLwotIDg1LCAgLyogIDIxOSAg MTMvMTEgIEcxICAgICAgVSBjaXJjdW1mbGV4ICAgICAgICAgICAgICA9PiAgVSAgICAgICAqLwot IDg1LCAgLyogIDIyMCAgMTMvMTIgIEcxICAgICAgVSBkaWFlcmVzaXMgICAgICAgICAgICAgICA9 PiAgVSAgICAgICAqLwotIDg5LCAgLyogIDIyMSAgMTMvMTMgIEcxICAgICAgWSBhY3V0ZSAgICAg ICAgICAgICAgICAgICA9PiAgWSAgICAgICAqLwotIDg0LCAgLyogIDIyMiAgMTMvMTQgIEcxICAg ICAgSWNlbGFuZGljIFRob3JuICAgICAgICAgICA9PiAgVCAgICAgICAqLwotMTE1LCAgLyogIDIy MyAgMTMvMTUgIEcxICAgICAgR2VybWFuIHNoYXJwIHMgICAgICAgICAgICA9PiAgcyAgICAgICAq LwotIDk3LCAgLyogIDIyNCAgMTQvMDAgIEcxICAgICAgYSBncmF2ZSAgICAgICAgICAgICAgICAg ICA9PiAgYSAgICAgICAqLwotIDk3LCAgLyogIDIyNSAgMTQvMDEgIEcxICAgICAgYSBhY3V0ZSAg ICAgICAgICAgICAgICAgICA9PiAgYSAgICAgICAqLwotIDk3LCAgLyogIDIyNiAgMTQvMDIgIEcx ICAgICAgYSBjaXJjdW1mbGV4ICAgICAgICAgICAgICA9PiAgYSAgICAgICAqLwotIDk3LCAgLyog IDIyNyAgMTQvMDMgIEcxICAgICAgYSB0aWxkZSAgICAgICAgICAgICAgICAgICA9PiAgYSAgICAg ICAqLwotIDk3LCAgLyogIDIyOCAgMTQvMDQgIEcxICAgICAgYSBkaWFlcmVzaXMgICAgICAgICAg ICAgICA9PiAgYSAgICAgICAqLwotIDk3LCAgLyogIDIyOSAgMTQvMDUgIEcxICAgICAgYSByaW5n IGFib3ZlICAgICAgICAgICAgICA9PiAgYSAgICAgICAqLwotIDk3LCAgLyogIDIzMCAgMTQvMDYg IEcxICAgICAgYSB3aXRoIGUgICAgICAgICAgICAgICAgICA9PiAgYSAgICAgICAqLwotIDk5LCAg LyogIDIzMSAgMTQvMDcgIEcxICAgICAgYyBjZWRpbGxhICAgICAgICAgICAgICAgICA9PiAgYyAg ICAgICAqLwotMTAxLCAgLyogIDIzMiAgMTQvMDggIEcxICAgICAgZSBncmF2ZSAgICAgICAgICAg ICAgICAgICA9PiAgZSAgICAgICAqLwotMTAxLCAgLyogIDIzMyAgMTQvMDkgIEcxICAgICAgZSBh Y3V0ZSAgICAgICAgICAgICAgICAgICA9PiAgZSAgICAgICAqLwotMTAxLCAgLyogIDIzNCAgMTQv MTAgIEcxICAgICAgZSBjaXJjdW1mbGV4ICAgICAgICAgICAgICA9PiAgZSAgICAgICAqLwotMTAx LCAgLyogIDIzNSAgMTQvMTEgIEcxICAgICAgZSBkaWFlcmVzaXMgICAgICAgICAgICAgICA9PiAg ZSAgICAgICAqLwotMTA1LCAgLyogIDIzNiAgMTQvMTIgIEcxICAgICAgaSBncmF2ZSAgICAgICAg ICAgICAgICAgICA9PiAgaSAgICAgICAqLwotMTA1LCAgLyogIDIzNyAgMTQvMTMgIEcxICAgICAg aSBhY3V0ZSAgICAgICAgICAgICAgICAgICA9PiAgaSAgICAgICAqLwotMTA1LCAgLyogIDIzOCAg MTQvMTQgIEcxICAgICAgaSBjaXJjdW1mbGV4ICAgICAgICAgICAgICA9PiAgaSAgICAgICAqLwot MTA1LCAgLyogIDIzOSAgMTQvMTUgIEcxICAgICAgaSBkaWFlcmVzaXMgICAgICAgICAgICAgICA9 PiAgaSAgICAgICAqLwotMTAwLCAgLyogIDI0MCAgMTUvMDAgIEcxICAgICAgSWNlbGFuZGljIGV0 aCAgICAgICAgICAgICA9PiAgZCAgICAgICAqLwotMTEwLCAgLyogIDI0MSAgMTUvMDEgIEcxICAg ICAgbiB0aWxkZSAgICAgICAgICAgICAgICAgICA9PiAgbiAgICAgICAqLwotMTExLCAgLyogIDI0 MiAgMTUvMDIgIEcxICAgICAgbyBncmF2ZSAgICAgICAgICAgICAgICAgICA9PiAgbyAgICAgICAq LwotMTExLCAgLyogIDI0MyAgMTUvMDMgIEcxICAgICAgbyBhY3V0ZSAgICAgICAgICAgICAgICAg ICA9PiAgbyAgICAgICAqLwotMTExLCAgLyogIDI0NCAgMTUvMDQgIEcxICAgICAgbyBjaXJjdW1m bGV4ICAgICAgICAgICAgICA9PiAgbyAgICAgICAqLwotMTExLCAgLyogIDI0NSAgMTUvMDUgIEcx ICAgICAgbyB0aWxkZSAgICAgICAgICAgICAgICAgICA9PiAgbyAgICAgICAqLwotMTExLCAgLyog IDI0NiAgMTUvMDYgIEcxICAgICAgbyBkaWFlcmVzaXMgICAgICAgICAgICAgICA9PiAgbyAgICAg ICAqLwotIDQ3LCAgLyogIDI0NyAgMTUvMDcgIEcxICAgICAgRGl2aXNpb24gc2lnbiAgICAgICAg ICAgICA9PiAgLyAgICAgICAqLwotMTExLCAgLyogIDI0OCAgMTUvMDggIEcxICAgICAgbyBvYmxp cXVlIHN0cm9rZSAgICAgICAgICA9PiAgbyAgICAgICAqLwotMTE3LCAgLyogIDI0OSAgMTUvMDkg IEcxICAgICAgdSBncmF2ZSAgICAgICAgICAgICAgICAgICA9PiAgdSAgICAgICAqLwotMTE3LCAg LyogIDI1MCAgMTUvMTAgIEcxICAgICAgdSBhY3V0ZSAgICAgICAgICAgICAgICAgICA9PiAgdSAg ICAgICAqLwotMTE3LCAgLyogIDI1MSAgMTUvMTEgIEcxICAgICAgdSBjaXJjdW1mbGV4ICAgICAg ICAgICAgICA9PiAgdSAgICAgICAqLwotMTE3LCAgLyogIDI1MiAgMTUvMTIgIEcxICAgICAgdSBk aWFlcmVzaXMgICAgICAgICAgICAgICA9PiAgdSAgICAgICAqLwotMTIxLCAgLyogIDI1MyAgMTUv MTMgIEcxICAgICAgeSBhY3V0ZSAgICAgICAgICAgICAgICAgICA9PiAgeSAgICAgICAqLwotMTE2 LCAgLyogIDI1NCAgMTUvMTQgIEcxICAgICAgSWNlbGFuZGljIHRob3JuICAgICAgICAgICA9PiAg dCAgICAgICAqLwotMTIxICAgLyogIDI1NSAgMTUvMTUgIEcxICAgICAgeSBkaWFlcmVzaXMgICAg ICAgICAgICAgICA9PiAgeSAgICAgICAqLwotfTsKLQotCi0vKiBUcmFuc2xhdGlvbiB0YWJsZXMg Zm9yIElTTyBMYXRpbiBBbHBoYWJldCAxIHRvIGxvY2FsIGZpbGUgY2hhcmFjdGVyIHNldHMgKi8K LQotLyoKLSAgTW9zdCBvZiB0aGUgcmVtYWluaW5nIHRhYmxlcyBhcmUgbm90IGFubm90YXRlZCBs aWtlIHRoZSBvbmUgYWJvdmUsIGJlY2F1c2UKLSAgdGhlIHNpemUgb2YgdGhlIHJlc3VsdGluZyBz b3VyY2UgZmlsZSB3b3VsZCBiZSByaWRpY3Vsb3VzLiAgRWFjaCByb3cgaW4gdGhlCi0gIGZvbGxv d2luZyB0YWJsZXMgY29ycmVzcG9uZHMgdG8gYSBjb2x1bW4gb2YgSVNPIDg4NTktMS4KLSovCi0K LUNPTlNUIENIQVIKLXlsMTg1W10gPSB7ICAvKiBJU08gODg1OS0xIExhdGluIEFscGhhYmV0IDEg KExhdGluLTEpIHRvIElCTSBDb2RlIFBhZ2UgODUwICovCi0vKgotICBUaGlzIGlzIGJhc2VkIG9u IElCTSdzIG9mZmljaWFsIGludmVydGlibGUgdHJhbnNsYXRpb24uICBSZWZlcmVuY2U6IElCTQot ICBDaGFyYWN0ZXIgRGF0YSBSZXByZXNlbnRhdGlvbiBBcmNoaXRlY3R1cmUgKENEUkEpLCBMZXZl bCAxLCBSZWdpc3RyeSwKLSAgU0MwOS0xMjkxLTAwICgxOTkwKSwgcC4xNTIuICAoTm90ZTogTGF0 aW4tMSBpcyBJQk0gQ29kZSBQYWdlIDAwODE5LikgIE5vdGU6Ci0gIElCTSdzIGJpemFycmUgcmVh cnJhbmdlbWVudCBvZiBDMCBjb250cm9scyBhbmQgREVMIGhhcyBiZWVuIHVuZG9uZSBpbiB0aGlz Ci0gIHRhYmxlLgotKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAg IDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAx OSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAs ICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwg IDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAg NTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2 NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUs ICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4Niwg IDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAg OTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5 LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAs IDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTE4NiwgMjA1LCAyMDEsIDE4Nywg MjAwLCAxODgsIDIwNCwgMTg1LCAyMDMsIDIwMiwgMjA2LCAyMjMsIDIyMCwgMjE5LCAyNTQsIDI0 MiwKLTE3OSwgMTk2LCAyMTgsIDE5MSwgMTkyLCAyMTcsIDE5NSwgMTgwLCAxOTQsIDE5MywgMTk3 LCAxNzYsIDE3NywgMTc4LCAyMTMsIDE1OSwKLTI1NSwgMTczLCAxODksIDE1NiwgMjA3LCAxOTAs IDIyMSwgMjQ1LCAyNDksIDE4NCwgMTY2LCAxNzQsIDE3MCwgMjQwLCAxNjksIDIzOCwKLTI0OCwg MjQxLCAyNTMsIDI1MiwgMjM5LCAyMzAsIDI0NCwgMjUwLCAyNDcsIDI1MSwgMTY3LCAxNzUsIDE3 MiwgMTcxLCAyNDMsIDE2OCwKLTE4MywgMTgxLCAxODIsIDE5OSwgMTQyLCAxNDMsIDE0NiwgMTI4 LCAyMTIsIDE0NCwgMjEwLCAyMTEsIDIyMiwgMjE0LCAyMTUsIDIxNiwKLTIwOSwgMTY1LCAyMjcs IDIyNCwgMjI2LCAyMjksIDE1MywgMTU4LCAxNTcsIDIzNSwgMjMzLCAyMzQsIDE1NCwgMjM3LCAy MzIsIDIyNSwKLTEzMywgMTYwLCAxMzEsIDE5OCwgMTMyLCAxMzQsIDE0NSwgMTM1LCAxMzgsIDEz MCwgMTM2LCAxMzcsIDE0MSwgMTYxLCAxNDAsIDEzOSwKLTIwOCwgMTY0LCAxNDksIDE2MiwgMTQ3 LCAyMjgsIDE0OCwgMjQ2LCAxNTUsIDE1MSwgMTYzLCAxNTAsIDEyOSwgMjM2LCAyMzEsIDE1Mgot fTsKLQotQ09OU1QgQ0hBUgoteTg1bDFbXSA9IHsgIC8qIElCTSBDb2RlIFBhZ2UgODUwIHRvIExh dGluLTEgKi8KLS8qCi0gIFRoaXMgaXMgZnJvbSBJQk0gQ0RSQSBwYWdlIDE1My4gIEl0IGlzIHRo ZSBpbnZlcnNlIG9mIHlsMTg1W10uCi0gIEFzIG9mIGVkaXQgMTgzLCB0aGlzIHRhYmxlIGlzIG5v IGxvbmdlciBwdXJlIENEUkEuICBUaGUgdHJhbnNsYXRpb25zCi0gIGludm9sdmluZyBDMCBjb250 cm9scyBhbmQgREVMIGhhdmUgYmVlbiByZW1vdmVkLgotKi8KLSAgMCwgICAxLCAgIDIsICAgMywg ICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAx NSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2 LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcs ICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwg IDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2 MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcx LCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIs ICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAg OTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEw NSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2 LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywK LTE5OSwgMjUyLCAyMzMsIDIyNiwgMjI4LCAyMjQsIDIyOSwgMjMxLCAyMzQsIDIzNSwgMjMyLCAy MzksIDIzOCwgMjM2LCAxOTYsIDE5NywKLTIwMSwgMjMwLCAxOTgsIDI0NCwgMjQ2LCAyNDIsIDI1 MSwgMjQ5LCAyNTUsIDIxNCwgMjIwLCAyNDgsIDE2MywgMjE2LCAyMTUsIDE1OSwKLTIyNSwgMjM3 LCAyNDMsIDI1MCwgMjQxLCAyMDksIDE3MCwgMTg2LCAxOTEsIDE3NCwgMTcyLCAxODksIDE4OCwg MTYxLCAxNzEsIDE4NywKLTE1NSwgMTU2LCAxNTcsIDE0NCwgMTUxLCAxOTMsIDE5NCwgMTkyLCAx NjksIDEzNSwgMTI4LCAxMzEsIDEzMywgMTYyLCAxNjUsIDE0NywKLTE0OCwgMTUzLCAxNTIsIDE1 MCwgMTQ1LCAxNTQsIDIyNywgMTk1LCAxMzIsIDEzMCwgMTM3LCAxMzYsIDEzNCwgMTI5LCAxMzgs IDE2NCwKLTI0MCwgMjA4LCAyMDIsIDIwMywgMjAwLCAxNTgsIDIwNSwgMjA2LCAyMDcsIDE0OSwg MTQ2LCAxNDEsIDE0MCwgMTY2LCAyMDQsIDEzOSwKLTIxMSwgMjIzLCAyMTIsIDIxMCwgMjQ1LCAy MTMsIDE4MSwgMjU0LCAyMjIsIDIxOCwgMjE5LCAyMTcsIDI1MywgMjIxLCAxNzUsIDE4MCwKLTE3 MywgMTc3LCAxNDMsIDE5MCwgMTgyLCAxNjcsIDI0NywgMTg0LCAxNzYsIDE2OCwgMTgzLCAxODUs IDE3OSwgMTc4LCAxNDIsIDE2MAotfTsKLQotI2lmZGVmIENPTU1FTlQKLUNPTlNUIENIQVIKLXls MXI4W10gPSB7ICAvKiBMYXRpbi0xIHRvIEhld2xldHQgUGFja2FyZCBSb21hbjggKi8KLS8qIFRo aXMgaXMgSFAncyBvZmZpY2lhbCB0cmFuc2xhdGlvbiwgc3RyYWlnaHQgZnJvbSBpY29udiAqLwot LyogSXQgaXMgTk9UIGludmVydGlibGUuICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1 LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYs ICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAg MjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAz OSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUw LCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwg IDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAg NzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4 NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUs Ci0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwg MTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAx MTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xMjgsIDEy OSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAs IDE0MSwgMTQyLCAxNDMsCi0xNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwg MTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCi0xNjAsIDE4NCwgMTkxLCAx ODcsIDE4NiwgMTg4LCAxMjQsIDE4OSwgMTcxLCAgOTksIDI0OSwgMjUxLCAxMjYsICA0NSwgIDgy LCAxNzYsCi0xNzksIDI1NCwgIDUwLCAgNTEsIDE2OCwgMjQzLCAyNDQsIDI0MiwgIDQ0LCAgNDks IDI1MCwgMjUzLCAyNDcsIDI0OCwgMjQ1LCAxODUsCi0xNjEsIDIyNCwgMTYyLCAyMjUsIDIxNiwg MjA4LCAyMTEsIDE4MCwgMTYzLCAyMjAsIDE2NCwgMTY1LCAyMzAsIDIyOSwgMTY2LCAxNjcsCi0y MjcsIDE4MiwgMjMyLCAyMzEsIDIyMywgMjMzLCAyMTgsIDEyMCwgMjEwLCAxNzMsIDIzNywgMTc0 LCAyMTksIDE3NywgMjQwLCAyMjIsCi0yMDAsIDE5NiwgMTkyLCAyMjYsIDIwNCwgMjEyLCAyMTUs IDE4MSwgMjAxLCAxOTcsIDE5MywgMjA1LCAyMTcsIDIxMywgMjA5LCAyMjEsCi0yMjgsIDE4Mywg MjAyLCAxOTgsIDE5NCwgMjM0LCAyMDYsICA0NywgMjE0LCAyMDMsIDE5OSwgMTk1LCAyMDcsIDE3 OCwgMjQxLCAyMzkKLX07Ci1DT05TVCBDSEFSCi15cjhsMVtdID0geyAgLyogSGV3bGV0dCBQYWNr YXJkIFJvbWFuOCB0byBMYXRpbi0xICovCi0vKiBUaGlzIGlzIEhQJ3Mgb2ZmaWNpYWwgdHJhbnNs YXRpb24sIHN0cmFpZ2h0IGZyb20gaWNvbnYgKi8KLS8qIEl0IGlzIE5PVCBpbnZlcnRpYmxlLiAq LwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAs ICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwg IDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAg MzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0 LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUs ICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2Niwg IDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3 OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5 LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAs IDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAot MTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEy MywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0 LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAotMTQ0LCAxNDUs IDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAx NTcsIDE1OCwgMTU5LAotMTYwLCAxOTIsIDE5NCwgMjAwLCAyMDIsIDIwMywgMjA2LCAyMDcsIDE4 MCwgIDk2LCAgOTQsIDE2OCwgMTI2LCAyMTcsIDIxOSwgMTYzLAotMTc1LCAyMjEsIDI1MywgMTc2 LCAxOTksIDIzMSwgMjA5LCAyNDEsIDE2MSwgMTkxLCAxNjQsIDE2MywgMTY1LCAxNjcsIDEwMiwg MTYyLAotMjI2LCAyMzQsIDI0NCwgMjUxLCAyMjUsIDIzMywgMjQzLCAyNTAsIDIyNCwgMjMyLCAy NDIsIDI0OSwgMjI4LCAyMzUsIDI0NiwgMjUyLAotMTk3LCAyMzgsIDIxNiwgMTk4LCAyMjksIDIz NywgMjQ4LCAyMzAsIDE5NiwgMjM2LCAyMTQsIDIyMCwgMjAxLCAyMzksIDIyMywgMjEyLAotMTkz LCAxOTUsIDIyNywgMjA4LCAyNDAsIDIwNSwgMjA0LCAyMTEsIDIxMCwgMjEzLCAyNDUsICA4Mywg MTE1LCAyMTgsICA4OSwgMjU1LAotMjIyLCAyNTQsIDE4MywgMTgxLCAxODIsIDE5MCwgIDQ1LCAx ODgsIDE4OSwgMTcwLCAxODYsIDE3MSwgIDQyLCAxODcsIDE3NywgMTYwCi19OwotI2Vsc2UgLyog IUNPTU1FTlQgKi8KLS8qIFRoaXMgaXMgYW4gaW52ZXJ0aWJsZSBtYXBwaW5nLCBhcHByb3ZlZCBi eSBIUCBpbiBKYW51YXJ5IDE5OTQuICovCi1DT05TVCBDSEFSCi15bDFyOFtdID0geyAgLyogSVNP IExhdGluLTEgdG8gSFAgUm9tYW44LCBJbnZlcnRpYmxlICovCi0gIDAsICAgMSwgICAyLCAgIDMs ICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAg MTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAy NiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3 LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgs ICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAg NjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3 MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgy LCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5Mywg IDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAx MDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDEx NiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcs Ci0xMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwg MTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCi0xNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAx NTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCi0xNjAsIDE4 NCwgMTkxLCAxODcsIDE4NiwgMTg4LCAxNjksIDE4OSwgMTcxLCAxNzAsIDI0OSwgMjUxLCAxNzIs IDE3NSwgMTkwLCAxNzYsCi0xNzksIDI1NCwgMjM1LCAyMzYsIDE2OCwgMjQzLCAyNDQsIDI0Miwg MjM4LCAyNDYsIDI1MCwgMjUzLCAyNDcsIDI0OCwgMjQ1LCAxODUsCi0xNjEsIDIyNCwgMTYyLCAy MjUsIDIxNiwgMjA4LCAyMTEsIDE4MCwgMTYzLCAyMjAsIDE2NCwgMTY1LCAyMzAsIDIyOSwgMTY2 LCAxNjcsCi0yMjcsIDE4MiwgMjMyLCAyMzEsIDIyMywgMjMzLCAyMTgsIDI1MiwgMjEwLCAxNzMs IDIzNywgMTc0LCAyMTksIDE3NywgMjQwLCAyMjIsCi0yMDAsIDE5NiwgMTkyLCAyMjYsIDIwNCwg MjEyLCAyMTUsIDE4MSwgMjAxLCAxOTcsIDE5MywgMjA1LCAyMTcsIDIxMywgMjA5LCAyMjEsCi0y MjgsIDE4MywgMjAyLCAxOTgsIDE5NCwgMjM0LCAyMDYsIDI1NSwgMjE0LCAyMDMsIDE5OSwgMTk1 LCAyMDcsIDE3OCwgMjQxLCAyMzkKLX07Ci0KLUNPTlNUIENIQVIKLXlyOGwxW10gPSB7IC8qIEhQ IFJvbWFuOCB0byBJU08gTGF0aW4tMSwgSW52ZXJ0aWJsZSAqLwotICAwLCAgIDEsICAgMiwgICAz LCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwg IDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAg MjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAz NywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4 LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwg IDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAg NzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4 MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMs ICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwg MTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAx MTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3 LAotMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgs IDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAotMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwg MTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAotMTYwLCAx OTIsIDE5NCwgMjAwLCAyMDIsIDIwMywgMjA2LCAyMDcsIDE4MCwgMTY2LCAxNjksIDE2OCwgMTcy LCAyMTcsIDIxOSwgMTczLAotMTc1LCAyMjEsIDI1MywgMTc2LCAxOTksIDIzMSwgMjA5LCAyNDEs IDE2MSwgMTkxLCAxNjQsIDE2MywgMTY1LCAxNjcsIDE3NCwgMTYyLAotMjI2LCAyMzQsIDI0NCwg MjUxLCAyMjUsIDIzMywgMjQzLCAyNTAsIDIyNCwgMjMyLCAyNDIsIDI0OSwgMjI4LCAyMzUsIDI0 NiwgMjUyLAotMTk3LCAyMzgsIDIxNiwgMTk4LCAyMjksIDIzNywgMjQ4LCAyMzAsIDE5NiwgMjM2 LCAyMTQsIDIyMCwgMjAxLCAyMzksIDIyMywgMjEyLAotMTkzLCAxOTUsIDIyNywgMjA4LCAyNDAs IDIwNSwgMjA0LCAyMTEsIDIxMCwgMjEzLCAyNDUsIDE3OCwgMTc5LCAyMTgsIDE4NCwgMjU1LAot MjIyLCAyNTQsIDE4MywgMTgxLCAxODIsIDE5MCwgMTg1LCAxODgsIDE4OSwgMTcwLCAxODYsIDE3 MSwgMjE1LCAxODcsIDE3NywgMjQ3Ci19OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotQ09OU1Qg Q0hBUgoteWwxNDNbXSA9IHsgIC8qIExhdGluLTEgdG8gSUJNIENvZGUgUGFnZSA0MzcgKi8KLS8q Ci0gIEFsdGhvdWdoIHRoZSBJQk0gQ0RSQSBkb2VzIG5vdCBpbmNsdWRlIGFuIG9mZmljaWFsIHRy YW5zbGF0aW9uIGJldHdlZW4gQ1A0MzcKLSAgYW5kIElTTyBMYXRpbiBBbHBoYWJldCAxLCBpdCBk b2VzIGluY2x1ZGUgYW4gb2ZmaWNpYWwsIGludmVydGlibGUKLSAgdHJhbnNsYXRpb24gYmV0d2Vl biBDUDQzNyBhbmQgQ1A4NTAgKHBhZ2UgMTk2KSwgYW5kIGFub3RoZXIgZnJvbSBDUDg1MCB0bwot ICBMYXRpbi0xIChDUDgxOSkgKHBhZ2UgMTUzKS4gIFRoaXMgdHJhbnNsYXRpb24gd2FzIG9idGFp bmVkIHdpdGggYSB0d28tc3RlcAotICBwcm9jZXNzIGJhc2VkIG9uIHRob3NlIHRhYmxlcy4KLSAg QXMgb2YgZWRpdCAxODMsIHRoZSB0cmFuc2xhdGlvbiBpcyBtb2RpZmllZCB0byBsZWF2ZSBDMCBj b250cm9scyBhbG9uZS4KLSovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAg NywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4 LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwg IDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAg NDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1 MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMs Ci0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwg IDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAg ODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5 NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgs IDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwg MTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xODYsIDIwNSwgMjAxLCAx ODcsIDIwMCwgMTg4LCAyMDQsIDE4NSwgMjAzLCAyMDIsIDIwNiwgMjIzLCAyMjAsIDIxOSwgMjU0 LCAyNDIsCi0xNzksIDE5NiwgMjE4LCAxOTEsIDE5MiwgMjE3LCAxOTUsIDE4MCwgMTk0LCAxOTMs IDE5NywgMTc2LCAxNzcsIDE3OCwgMjEzLCAxNTksCi0yNTUsIDE3MywgMTU1LCAxNTYsIDIwNywg MTU3LCAyMjEsIDI0NSwgMjQ5LCAxODQsIDE2NiwgMTc0LCAxNzAsIDI0MCwgMTY5LCAyMzgsCi0y NDgsIDI0MSwgMjUzLCAyNTIsIDIzOSwgMjMwLCAyNDQsIDI1MCwgMjQ3LCAyNTEsIDE2NywgMTc1 LCAxNzIsIDE3MSwgMjQzLCAxNjgsCi0xODMsIDE4MSwgMTgyLCAxOTksIDE0MiwgMTQzLCAxNDYs IDEyOCwgMjEyLCAxNDQsIDIxMCwgMjExLCAyMjIsIDIxNCwgMjE1LCAyMTYsCi0yMDksIDE2NSwg MjI3LCAyMjQsIDIyNiwgMjI5LCAxNTMsIDE1OCwgMTkwLCAyMzUsIDIzMywgMjM0LCAxNTQsIDIz NywgMjMyLCAyMjUsCi0xMzMsIDE2MCwgMTMxLCAxOTgsIDEzMiwgMTM0LCAxNDUsIDEzNSwgMTM4 LCAxMzAsIDEzNiwgMTM3LCAxNDEsIDE2MSwgMTQwLCAxMzksCi0yMDgsIDE2NCwgMTQ5LCAxNjIs IDE0NywgMjI4LCAxNDgsIDI0NiwgMTg5LCAxNTEsIDE2MywgMTUwLCAxMjksIDIzNiwgMjMxLCAx NTIKLX07Ci0KLUNPTlNUIENIQVIKLXk0M2wxW10gPSB7ICAvKiBJQk0gQ29kZSBQYWdlIDQzNyB0 byBMYXRpbi0xICovCi0vKgotICBUaGlzIHRhYmxlIGlzIHRoZSBpbnZlcnNlIG9mIHlsMTQzW10u Ci0qLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAg MTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAy MSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMy LCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0Mywg IDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAg NTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2 NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcs ICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwg IDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAx MDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTEx LAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIs IDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTk5LCAyNTIsIDIzMywgMjI2LCAyMjgsIDIyNCwg MjI5LCAyMzEsIDIzNCwgMjM1LCAyMzIsIDIzOSwgMjM4LCAyMzYsIDE5NiwgMTk3LAotMjAxLCAy MzAsIDE5OCwgMjQ0LCAyNDYsIDI0MiwgMjUxLCAyNDksIDI1NSwgMjE0LCAyMjAsIDE2MiwgMTYz LCAxNjUsIDIxNSwgMTU5LAotMjI1LCAyMzcsIDI0MywgMjUwLCAyNDEsIDIwOSwgMTcwLCAxODYs IDE5MSwgMTc0LCAxNzIsIDE4OSwgMTg4LCAxNjEsIDE3MSwgMTg3LAotMTU1LCAxNTYsIDE1Nywg MTQ0LCAxNTEsIDE5MywgMTk0LCAxOTIsIDE2OSwgMTM1LCAxMjgsIDEzMSwgMTMzLCAyNDgsIDIx NiwgMTQ3LAotMTQ4LCAxNTMsIDE1MiwgMTUwLCAxNDUsIDE1NCwgMjI3LCAxOTUsIDEzMiwgMTMw LCAxMzcsIDEzNiwgMTM0LCAxMjksIDEzOCwgMTY0LAotMjQwLCAyMDgsIDIwMiwgMjAzLCAyMDAs IDE1OCwgMjA1LCAyMDYsIDIwNywgMTQ5LCAxNDYsIDE0MSwgMTQwLCAxNjYsIDIwNCwgMTM5LAot MjExLCAyMjMsIDIxMiwgMjEwLCAyNDUsIDIxMywgMTgxLCAyNTQsIDIyMiwgMjE4LCAyMTksIDIx NywgMjUzLCAyMjEsIDE3NSwgMTgwLAotMTczLCAxNzcsIDE0MywgMTkwLCAxODIsIDE2NywgMjQ3 LCAxODQsIDE3NiwgMTY4LCAxODMsIDE4NSwgMTc5LCAxNzgsIDE0MiwgMTYwCi19OwotCi1DT05T VCBDSEFSCi15bDFhcVtdID0geyAgLyogTGF0aW4tMSB0byBFeHRlbmRlZCBNYWMgTGF0aW4gKGJh c2VkIG9uIEFwcGxlIFF1aWNrRHJhdykgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUs ICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwg IDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAy OCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5 LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAs ICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAg NjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3 MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0 LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwK LSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAx MDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDEx OCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTE4MiwgMTgz LCAxODQsIDE4NSwgMTg5LCAxOTYsIDE5NywgMTk4LCAyMDYsIDIwNywgMjEwLCAyMTEsIDIxNywg MjE4LCAxOTUsIDIxMiwKLTIwOSwgMjE1LCAyMTMsIDIyNiwgMjI3LCAyMjgsIDI0MCwgMjQ1LCAy NDYsIDI0NywgMjQ5LCAyNTAsIDI1MSwgMjUzLCAyNTQsIDI1NSwKLTIwMiwgMTkzLCAxNjIsIDE2 MywgMjE5LCAxODAsIDIwMSwgMTY0LCAxNzIsIDE2OSwgMTg3LCAxOTksIDE5NCwgMjA4LCAxNjgs IDI0OCwKLTE2MSwgMTc3LCAxNzAsIDE3MywgMTcxLCAxODEsIDE2NiwgMjI1LCAyNTIsIDE3Niwg MTg4LCAyMDAsIDE3OCwgMTc5LCAxODYsIDE5MiwKLTIwMywgMjMxLCAyMjksIDIwNCwgMTI4LCAx MjksIDE3NCwgMTMwLCAyMzMsIDEzMSwgMjMwLCAyMzIsIDIzNywgMjM0LCAyMzUsIDIzNiwKLTIy MCwgMTMyLCAyNDEsIDIzOCwgMjM5LCAyMDUsIDEzMywgMTY1LCAxNzUsIDI0NCwgMjQyLCAyNDMs IDEzNCwgMTYwLCAyMjIsIDE2NywKLTEzNiwgMTM1LCAxMzcsIDEzOSwgMTM4LCAxNDAsIDE5MCwg MTQxLCAxNDMsIDE0MiwgMTQ0LCAxNDUsIDE0NywgMTQ2LCAxNDgsIDE0OSwKLTIyMSwgMTUwLCAx NTIsIDE1MSwgMTUzLCAxNTUsIDE1NCwgMjE0LCAxOTEsIDE1NywgMTU2LCAxNTgsIDE1OSwgMjI0 LCAyMjMsIDIxNgotfTsKLQotQ09OU1QgQ0hBUgoteWwxZHVbXSA9IHsgIC8qIExhdGluLTEgdG8g RHV0Y2ggSVNPIDY0NiAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcs ICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwg IDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAz MCwgIDMxLAotIDMyLCAgMzMsICAzNCwgVU5LLCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQx LCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIs ICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAot VU5LLCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3 NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2 LCAgODcsICA4OCwgIDg5LCAgOTAsIFVOSywgVU5LLCBVTkssICA5NCwgIDk1LAotIDk2LCAgOTcs ICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAx MDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEy MCwgMTIxLCAxMjIsIFVOSywgVU5LLCBVTkssICAzOSwgMTI3LAotMTI4LCAxMjksIDEzMCwgMTMx LCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0Miwg MTQzLAotMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAx NTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAotIDMyLCAgMzMsIFVOSywgIDM1LCAxMjQsIFVO SywgVU5LLCAgOTMsIDEyMywgIDY3LCBVTkssICAzNCwgVU5LLCAgNDUsICA4MiwgVU5LLAotIDkx LCBVTkssIFVOSywgVU5LLCAxMjYsIDExNywgVU5LLCBVTkssICA0NCwgVU5LLCBVTkssICAzNCwg MTI1LCAgOTIsICA2NCwgIDYzLAotIDY1LCAgNjUsICA2NSwgIDY1LCAgOTEsICA2NSwgIDY1LCAg NjcsICA2OSwgIDY5LCAgNjksICA2OSwgIDczLCAgNzMsICA3MywgIDczLAotVU5LLCAgNzgsICA3 OSwgIDc5LCAgNzksICA3OSwgIDc5LCAxMjAsICA3OSwgIDg1LCAgODUsICA4NSwgIDg1LCAgODks IFVOSywgMTE1LAotIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsICA5NywgIDk3LCAgOTksIDEwMSwg MTAxLCAxMDEsIDEwMSwgMTA1LCAxMDUsIDEwNSwgMTA1LAotVU5LLCAxMTAsIDExMSwgMTExLCAx MTEsIDExMSwgMTExLCAgNDcsIDExMSwgMTE3LCAxMTcsIDExNywgMTE3LCAxMjEsIFVOSywgIDkx Ci19OwotCi1DT05TVCBDSEFSCi15bDFmaVtdID0geyAgLyogTGF0aW4tMSB0byBGaW5uaXNoIElT TyBOUkMgKCpub3QqIElTTyA2NDYpICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAg IDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAx NywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgs ICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwg IDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAg NTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYy LCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMs ICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwg IDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgVU5LLCBVTkssIFVOSywgVU5LLCAgOTUsCi1V TkssICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3 LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgs IDExOSwgMTIwLCAxMjEsIDEyMiwgVU5LLCBVTkssIFVOSywgVU5LLCAxMjcsCi0xMjgsIDEyOSwg MTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0 MSwgMTQyLCAxNDMsCi0xNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUy LCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCi0gMzIsICAzMywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgIDM0LCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBV TkssCi1VTkssIFVOSywgVU5LLCBVTkssICAzOSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVO SywgIDM0LCBVTkssIFVOSywgVU5LLCAgNjMsCi0gNjUsICA2NSwgIDY1LCAgNjUsICA5MSwgIDkz LCAgNjUsICA2NywgIDY5LCAgNjksICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCi1VTkss ICA3OCwgIDc5LCAgNzksICA3OSwgIDc5LCAgOTIsIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAg OTQsICA4OSwgVU5LLCAxMTUsCi0gOTcsICA5NywgIDk3LCAgOTcsIDEyMywgMTI1LCAgOTcsICA5 OSwgMTAxLCAgOTYsIDEwMSwgMTAxLCAxMDUsIDEwNSwgMTA1LCAxMDUsCi1VTkssIDExMCwgMTEx LCAxMTEsIDExMSwgMTExLCAxMjQsICA0NywgMTExLCAxMTcsIDExNywgMTE3LCAxMjYsIDEyMSwg VU5LLCAxMjEKLX07Ci0KLUNPTlNUIENIQVIKLXlsMWZyW10gPSB7ICAvKiBMYXRpbi0xIHRvIEZy ZW5jaCBJU08gNjQ2ICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywg ICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAg MTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMw LCAgMzEsCi0gMzIsICAzMywgIDM0LCBVTkssICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEs ICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1Miwg IDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi1V TkssICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1 LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYs ICA4NywgIDg4LCAgODksICA5MCwgVU5LLCBVTkssIFVOSywgIDk0LCAgOTUsCi0gOTYsICA5Nywg IDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEw OSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIw LCAxMjEsIDEyMiwgVU5LLCBVTkssIFVOSywgVU5LLCAxMjcsCi0xMjgsIDEyOSwgMTMwLCAxMzEs IDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAx NDMsCi0xNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1 NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCi0gMzIsICAzMywgVU5LLCAgMzUsIFVOSywgVU5L LCBVTkssICA5MywgIDM0LCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCi0gOTEs IFVOSywgVU5LLCBVTkssICAzOSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0LCBV TkssIFVOSywgVU5LLCAgNjMsCi0gNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2 NywgIDY5LCAgNjksICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCi1VTkssICA3OCwgIDc5 LCAgNzksICA3OSwgIDc5LCAgNzksIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgODUsICA4OSwg VU5LLCAxMTUsCi0gNjQsICA5NywgIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsICA5MiwgMTI1LCAx MjMsIDEwMSwgMTAxLCAxMDUsIDEwNSwgMTA1LCAxMDUsCi1VTkssIDExMCwgMTExLCAxMTEsIDEx MSwgMTExLCAxMTEsICA0NywgMTExLCAxMjQsIDExNywgMTE3LCAxMTcsIDEyMSwgVU5LLCAxMjEK LX07Ci0KLUNPTlNUIENIQVIKLXlsMWZjW10gPSB7ICAvKiBMYXRpbi0xIHRvIEZyZW5jaC1DYW5h ZGlhbiBJU08gNjQ2ICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywg ICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAg MTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMw LCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEs ICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1Miwg IDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi1V TkssICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1 LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYs ICA4NywgIDg4LCAgODksICA5MCwgVU5LLCBVTkssIFVOSywgVU5LLCAgOTUsCi1VTkssICA5Nywg IDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEw OSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIw LCAxMjEsIDEyMiwgVU5LLCBVTkssIFVOSywgVU5LLCAxMjcsCi0xMjgsIDEyOSwgMTMwLCAxMzEs IDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAx NDMsCi0xNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1 NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCi0gMzIsICAzMywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgIDM0LCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCi1VTkss IFVOSywgVU5LLCBVTkssICAzOSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0LCBV TkssIFVOSywgVU5LLCAgNjMsCi0gNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2 NywgIDY5LCAgNjksICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCi1VTkssICA3OCwgIDc5 LCAgNzksICA3OSwgIDc5LCAgNzksIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgODUsICA4OSwg VU5LLCAxMTUsCi0gNjQsICA5NywgIDkxLCAgOTcsICA5NywgIDk3LCAgOTcsICA5MiwgMTI1LCAx MjMsICA5MywgMTAxLCAxMDUsIDEwNSwgIDk0LCAxMDUsCi1VTkssIDExMCwgMTExLCAxMTEsICA5 NiwgMTExLCAxMTEsICA0NywgMTExLCAxMjQsIDExNywgMTI2LCAxMTcsIDEyMSwgVU5LLCAxMjEK LX07Ci0KLUNPTlNUIENIQVIKLXlsMWdlW10gPSB7ICAvKiBMYXRpbi0xIHRvIEdlcm1hbiBJU08g NjQ2ICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDks ICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwg IDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0g MzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQz LCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQs ICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi1VTkssICA2NSwg IDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3 NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4 LCAgODksICA5MCwgVU5LLCBVTkssIFVOSywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTks IDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAx MTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEy MiwgVU5LLCBVTkssIFVOSywgVU5LLCAxMjcsCi0xMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMz LCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCi0xNDQs IDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAx NTYsIDE1NywgMTU4LCAxNTksCi0gMzIsICAzMywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssICA2 NCwgIDM0LCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCi1VTkssIFVOSywgVU5L LCBVTkssICAzOSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0LCBVTkssIFVOSywg VU5LLCAgNjMsCi0gNjUsICA2NSwgIDY1LCAgNjUsICA5MSwgIDY1LCAgNjUsICA2NywgIDY5LCAg NjksICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCi1VTkssICA3OCwgIDc5LCAgNzksICA3 OSwgIDc5LCAgOTIsIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgOTMsICA4OSwgVU5LLCAxMjYs Ci0gOTcsICA5NywgIDk3LCAgOTcsIDEyMywgIDk3LCAgOTcsICA5OSwgMTAxLCAxMDEsIDEwMSwg MTAxLCAxMDUsIDEwNSwgMTA1LCAxMDUsCi1VTkssIDExMCwgMTExLCAxMTEsIDExMSwgMTExLCAx MjQsICA0NywgMTExLCAxMTcsIDExNywgMTE3LCAxMjUsIDEyMSwgVU5LLCAxMjEKLX07Ci0KLUNP TlNUIENIQVIKLXlsMWh1W10gPSB7ICAvKiBMYXRpbi0xIHRvIEh1bmdhcmlhbiBJU08tNjQ2ICov Ci0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwg IDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAg MjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAz MywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQs ICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwg IDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAg NjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4 LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODks ICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwg MTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0x MTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIz LCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQs IDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCi0xNDQsIDE0NSwg MTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1 NywgMTU4LCAxNTksCi0gMzIsICAzMywgVU5LLCBVTkssICAzNiwgVU5LLCBVTkssIFVOSywgIDM0 LCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCi1VTkssICA2NCwgVU5LLCBVTkss ICAzOSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0LCBVTkssIFVOSywgVU5LLCAg NjMsCi0gNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NywgIDY5LCAgOTEsICA2 OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCi1VTkssICA3OCwgIDc5LCAgNzksICA3OSwgIDc5 LCAgOTIsIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgOTMsICA4OSwgVU5LLCAxMTUsCi0gOTcs ICA5NiwgIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsICA5OSwgMTAxLCAxMjMsIDEwMSwgMTAxLCAx MDUsIDEwNSwgMTA1LCAxMDUsCi1VTkssIDExMCwgMTExLCAxMTEsIDExMSwgMTExLCAxMjQsICA0 NywgMTExLCAxMTcsIDExNywgMTE3LCAxMjUsIDEyMSwgVU5LLCAxMjEKLX07Ci0KLUNPTlNUIENI QVIKLXlsMWl0W10gPSB7ICAvKiBMYXRpbi0xIHRvIEl0YWxpYW4gSVNPIDY0NiAqLwotICAwLCAg IDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEy LCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMs ICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwg VU5LLCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0 NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3 LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotVU5LLCAgNjUsICA2NiwgIDY3LCAgNjgs ICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAot IDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIFVO SywgVU5LLCBVTkssICA5NCwgIDk1LAotVU5LLCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAy LCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMs IDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIFVOSywgVU5LLCBV TkssIFVOSywgMTI3LAotMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEz NiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAotMTQ0LCAxNDUsIDE0NiwgMTQ3 LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwg MTU5LAotIDMyLCAgMzMsIFVOSywgIDM1LCBVTkssIFVOSywgVU5LLCAgNjQsICAzNCwgIDY3LCBV TkssICAzNCwgVU5LLCAgNDUsICA4MiwgVU5LLAotIDkxLCBVTkssIFVOSywgVU5LLCAgMzksIDEx NywgVU5LLCBVTkssICA0NCwgVU5LLCBVTkssICAzNCwgVU5LLCBVTkssIFVOSywgIDYzLAotIDY1 LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjcsICA2OSwgIDY5LCAgNjksICA2OSwg IDczLCAgNzMsICA3MywgIDczLAotVU5LLCAgNzgsICA3OSwgIDc5LCAgNzksICA3OSwgIDc5LCAx MjAsICA3OSwgIDg1LCAgODUsICA4NSwgIDg1LCAgODksIFVOSywgMTE1LAotMTIzLCAgOTcsICA5 NywgIDk3LCAgOTcsICA5NywgIDk3LCAgOTIsIDEyNSwgIDkzLCAxMDEsIDEwMSwgMTI2LCAxMDUs IDEwNSwgMTA1LAotVU5LLCAxMTAsIDEyNCwgMTExLCAxMTEsIDExMSwgMTExLCAgNDcsIDExMSwg IDk2LCAxMTcsIDExNywgMTE3LCAxMjEsIFVOSywgMTIxCi19OwotCi1DT05TVCBDSEFSCi15bDFu ZVtdID0geyAgLyogTGF0aW4tMSB0byBOZVhUICovCi0vKiBORUVEIFRPIE1BS0UgVEhJUyBPTkUg SU5WRVJUSUJMRSwgTElLRSBDUDg1MCAqLwotLyoKLSAgV2hpY2ggbWVhbnMgZmluZGluZyBhbGwg dGhlIGdyYXBoaWMgY2hhcmFjdGVycyBpbiB0aGUgTmVYVCBzZXQgdGhhdCBoYXZlCi0gIG5vIGVx dWl2YWxlbnQgaW4gTGF0aW4tMSBhbmQgYXNzaWduaW5nIHRoZW0gdG8gdGhlIFVOSyBwb3NpdGlv bnMgKG1vc3RseQotICBMYXRpbi0xIEMxIGNvbnRyb2xzKS4gIFRoZW4gbWFrZSB0aGUgeW5lbDFb XSB0YWJsZSBiZSB0aGUgaW52ZXJzZSBvZiB0aGlzCi0gIG9uZS4gIEJ1dCBmaXJzdCB3ZSBzaG91 bGQgdHJ5IHRvIGdldCBhbiBvZmZpY2lhbCBMYXRpbi0xL05lWFQgdHJhbnNsYXRpb24KLSAgdGFi bGUgZnJvbSBOZVhULCBJbmMuCi0qLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2 LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcs ICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAg MjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0 MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUx LCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2Miwg IDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAg NzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4 NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2 LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywg MTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAx MTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLAotVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLAotIDMyLCAxNjEsIDE2MiwgMTYzLCAx NjgsIDE2NSwgMTgxLCAxNjcsIDIwMCwgMTYwLCAyMjcsIDE3MSwgMTkwLCBVTkssIDE3NiwgMTk3 LAotMjAyLCAyMDksIDIwMSwgMjA0LCAxOTQsIDE1NywgMTgyLCAxODMsIDIwMywgMTkyLCAyMzUs IDE4NywgMjEwLCAyMTEsIDIxMiwgMTkxLAotMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwg MjI1LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAotMTQ0LCAx NDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTgsIDIzMywgMTUxLCAxNTIsIDE1MywgMTU0 LCAxNTUsIDE1NiwgMjUxLAotMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjQxLCAyMTks IDIyMCwgMjIxLCAyMjIsIDIyMywgMjI0LCAyMjYsIDIyOCwgMjI5LAotMjMwLCAyMzEsIDIzNiwg MjM3LCAyMzgsIDIzOSwgMjQwLCAxNTksIDI0OSwgMjQyLCAyNDMsIDI0NCwgMjQ2LCAyNDcsIDI1 MiwgMjUzCi19OwotCi1DT05TVCBDSEFSCi15bDFub1tdID0geyAgLyogTGF0aW4tMSB0byBOb3J3 ZWdpYW4vRGFuaXNoIElTTyA2NDYgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAg NiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3 LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwg IDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAg NDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1 MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIs ICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3Mywg IDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAg ODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCBVTkssIFVOSywgVU5LLCAgOTQsICA5NSwKLSA5 NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcs IDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwg MTE5LCAxMjAsIDEyMSwgMTIyLCBVTkssIFVOSywgVU5LLCAxMjYsIDEyNywKLTEyOCwgMTI5LCAx MzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQx LCAxNDIsIDE0MywKLTE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIs IDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKLSAzMiwgIDMzLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCAgMzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIsIFVO SywKLVVOSywgVU5LLCBVTkssIFVOSywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywgVU5L LCAgMzQsIFVOSywgVU5LLCBVTkssICA2MywKLSA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgOTMs ICA5MSwgIDY3LCAgNjksICA2OSwgIDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKLVVOSywg IDc4LCAgNzksICA3OSwgIDc5LCAgNzksICA3OSwgMTIwLCAgOTIsICA4NSwgIDg1LCAgODUsICA4 NSwgIDg5LCBVTkssIDExNSwKLSA5NywgIDk3LCAgOTcsICA5NywgIDk3LCAxMjUsIDEyMywgIDk5 LCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwNSwgMTA1LCAxMDUsIDEwNSwKLVVOSywgMTEwLCAxMTEs IDExMSwgMTExLCAxMTEsIDExMSwgIDQ3LCAxMjQsIDExNywgMTE3LCAxMTcsIDExNywgMTIxLCBV TkssIDEyMQotfTsKLQotQ09OU1QgQ0hBUgoteWwxcG9bXSA9IHsgIC8qIExhdGluLTEgdG8gUG9y dHVndWVzZSBJU08gNjQ2ICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAg NywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4 LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwg IDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAg NDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1 MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMs Ci0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwg IDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAg ODYsICA4NywgIDg4LCAgODksICA5MCwgVU5LLCBVTkssIFVOSywgIDk0LCAgOTUsCi0gOTYsICA5 NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgs IDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwg MTIwLCAxMjEsIDEyMiwgVU5LLCBVTkssIFVOSywgMTI2LCAxMjcsCi0xMjgsIDEyOSwgMTMwLCAx MzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQy LCAxNDMsCi0xNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMs IDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCi0gMzIsICAzMywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgIDM0LCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCi1V TkssIFVOSywgVU5LLCBVTkssICAzOSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0 LCBVTkssIFVOSywgVU5LLCAgNjMsCi0gNjUsICA2NSwgIDY1LCAgOTEsICA2NSwgIDY1LCAgNjUs ICA5MiwgIDY5LCAgNjksICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCi1VTkssICA3OCwg IDc5LCAgNzksICA3OSwgIDkzLCAgNzksIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgODUsICA4 OSwgVU5LLCAxMTUsCi0gOTcsICA5NywgIDk3LCAxMjMsICA5NywgIDk3LCAgOTcsIDEyNCwgMTAx LCAxMDEsIDEwMSwgMTAxLCAxMDUsIDEwNSwgMTA1LCAxMDUsCi1VTkssIDExMCwgMTExLCAxMTEs IDExMSwgMTI1LCAxMTEsICA0NywgMTExLCAxMTcsIDExNywgMTE3LCAxMTcsIDEyMSwgVU5LLCAx MjEKLX07Ci0KLUNPTlNUIENIQVIKLXlsMXNwW10gPSB7ICAvKiBMYXRpbi0xIHRvIFNwYW5pc2gg SVNPIDY0NiAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwg ICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAg MjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMx LAotIDMyLCAgMzMsICAzNCwgVU5LLCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIs ICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1Mywg IDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotVU5LLCAg NjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2 LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcs ICA4OCwgIDg5LCAgOTAsIFVOSywgVU5LLCBVTkssICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwg IDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDEx MCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIx LCAxMjIsICA5NiwgVU5LLCBVTkssIDEyNiwgMTI3LAotMTI2LCAxMjksIDEzMCwgMTMxLCAxMzIs IDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAot MTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1 NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAotIDMyLCAgOTEsIFVOSywgIDM1LCBVTkssIFVOSywgVU5L LCAgNjQsICAzNCwgIDY3LCBVTkssICAzNCwgVU5LLCAgNDUsICA4MiwgVU5LLAotMTIzLCBVTkss IFVOSywgVU5LLCAgMzksIDExNywgVU5LLCBVTkssICA0NCwgVU5LLCBVTkssICAzNCwgVU5LLCBV TkssIFVOSywgIDkzLAotIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjcsICA2 OSwgIDY5LCAgNjksICA2OSwgIDczLCAgNzMsICA3MywgIDczLAotVU5LLCAgOTIsICA3OSwgIDc5 LCAgNzksICA3OSwgIDc5LCAxMjAsICA3OSwgIDg1LCAgODUsICA4NSwgIDg1LCAgODksIFVOSywg MTE1LAotMTI0LCAgOTcsICA5NywgIDk3LCAgOTcsICA5NywgIDk3LCAxMjUsIDEwMSwgMTAxLCAx MDEsIDEwMSwgMTA1LCAxMDUsIDEwNSwgMTA1LAotVU5LLCAxMjQsIDExMSwgMTExLCAxMTEsIDEx MSwgMTExLCAgNDcsIDExMSwgMTE3LCAxMTcsIDExNywgMTE3LCAxMjEsIFVOSywgMTIxCi19Owot Ci1DT05TVCBDSEFSCi15bDFzd1tdID0geyAgLyogTGF0aW4tMSB0byBTd2VkaXNoIElTTyA2NDYg Ki8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEw LCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEs ICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwg IDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0 NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1 LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLVVOSywgIDY1LCAgNjYs ICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAg NzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4 OSwgIDkwLCBVTkssIFVOSywgVU5LLCBVTkssICA5NSwKLVVOSywgIDk3LCAgOTgsICA5OSwgMTAw LCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwK LTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCBV TkssIFVOSywgVU5LLCBVTkssIDEyNywKLTEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEz NCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKLTE0NCwgMTQ1 LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1Niwg MTU3LCAxNTgsIDE1OSwKLSAzMiwgIDMzLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCAg MzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIsIFVOSywKLVVOSywgVU5LLCBVTkssIFVO SywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywgVU5LLCAgMzQsIFVOSywgVU5LLCBVTkss ICA2MywKLSA2NSwgIDY1LCAgNjUsICA2NSwgIDkxLCAgOTMsICA2NSwgIDY3LCAgNjksICA2NCwg IDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKLVVOSywgIDc4LCAgNzksICA3OSwgIDc5LCAg NzksICA5MiwgMTIwLCAgNzksICA4NSwgIDg1LCAgODUsICA5NCwgIDg5LCBVTkssIDExNSwKLSA5 NywgIDk3LCAgOTcsICA5NywgMTIzLCAxMjUsICA5NywgIDk5LCAxMDEsICA5NiwgMTAxLCAxMDEs IDEwNSwgMTA1LCAxMDUsIDEwNSwKLVVOSywgMTEwLCAxMTEsIDExMSwgMTExLCAxMTEsIDEyNCwg IDQ3LCAxMTEsIDExNywgMTE3LCAxMTcsIDEyNiwgMTIxLCBVTkssIDEyMQotfTsKLQotQ09OU1Qg Q0hBUgoteWwxY2hbXSA9IHsgIC8qIExhdGluLTEgdG8gU3dpc3MgSVNPIDY0NiAqLwotICAwLCAg IDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEy LCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMs ICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwg VU5LLCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0 NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3 LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotVU5LLCAgNjUsICA2NiwgIDY3LCAgNjgs ICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAot IDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAy LCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMs IDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIFVOSywgVU5LLCBV TkssIFVOSywgMTI3LAotMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEz NiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAotMTQ0LCAxNDUsIDE0NiwgMTQ3 LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwg MTU5LAotIDMyLCAgMzMsIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssICAzNCwgIDY3LCBV TkssICAzNCwgVU5LLCAgNDUsICA4MiwgVU5LLAotVU5LLCBVTkssIFVOSywgVU5LLCAgMzksIDEx NywgVU5LLCBVTkssICA0NCwgVU5LLCBVTkssICAzNCwgVU5LLCBVTkssIFVOSywgIDYzLAotIDY1 LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjcsICA2OSwgIDY5LCAgNjksICA2OSwg IDczLCAgNzMsICA3MywgIDczLAotVU5LLCAgNzgsICA3OSwgIDc5LCAgNzksICA3OSwgIDc5LCAx MjAsICA3OSwgIDg1LCAgODUsICA4NSwgIDg1LCAgODksIFVOSywgMTE1LAotIDY0LCAgOTcsICA5 NywgIDk3LCAxMjMsICA5NywgIDk3LCAgOTIsICA5NSwgIDkxLCAgOTMsIDEwMSwgMTA1LCAxMDUs ICA5NCwgMTA1LAotVU5LLCAxMTAsIDExMSwgMTExLCAgOTYsIDExMSwgMTI0LCAgNDcsIDExMSwg IDM1LCAxMTcsIDEyNiwgMTI1LCAxMjEsIFVOSywgMTIxCi19OwotCi1DT05TVCBDSEFSCi15bDFk bVtdID0geyAgLyogTGF0aW4tMSB0byBERUMgTXVsdGluYXRpb25hbCBDaGFyYWN0ZXIgU2V0ICov Ci0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwg IDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAg MjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAz MywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQs ICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwg IDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAg NjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4 LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODks ICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwg MTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0x MTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIz LCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQs IDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCi0xNDQsIDE0NSwg MTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1 NywgMTU4LCAxNTksCi0gMzIsIDE2MSwgMTYyLCAxNjMsIDE2OCwgMTY1LCAxMjQsIDE2NywgIDM0 LCAxNjksIDE3MCwgMTcxLCAxMjYsIFVOSywgIDgyLCBVTkssCi0xNzYsIDE3NywgMTc4LCAxNzks ICAzOSwgMTgxLCAxODIsIDE4MywgIDQ0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgVU5LLCAx OTEsCi0xOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIw MiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsCi1VTkssIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEz LCAyMTQsIDEyMCwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgVU5LLCAyMjMsCi0yMjQs IDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAy MzYsIDIzNywgMjM4LCAyMzksCi1VTkssIDI0MSwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAyNDYsICA0 NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIFVOSywgVU5LLCAyNTMKLX07Ci0KLUNPTlNUIENI QVIKLXlsMWRnW10gPSB7ICAvKiBMYXRpbi0xIHRvIERhdGEgR2VuZXJhbCBJbnRlcm5hdGlvbmFs IENoYXJhY3RlciBTZXQgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3 LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgs ICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAg MzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0 MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUy LCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywK LSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAg NzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4 NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3 LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwg MTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAx MjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTEyOCwgMTI5LCAxMzAsIDEz MSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIs IDE0MywKLTE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1Mywg MTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKLTE2MCwgMTcxLCAxNjcsIDE2OCwgMTY2LCAx ODEsIDE5MSwgMTg3LCAxODksIDE3MywgMTY5LCAxNzcsIDE2MSwgMjU1LCAxNzQsIDE3NSwKLTE4 OCwgMTgyLCAxNjQsIDE2NSwgMTkwLCAxNjMsIDE3OCwgMTg1LCAxODYsIDE3OSwgMTcwLCAxNzYs IDIyMywgMTYyLCAyMjAsIDE3MiwKLTE5MywgMTkyLCAxOTQsIDE5NiwgMTk1LCAxOTcsIDE5OCwg MTk5LCAyMDEsIDIwMCwgMjAyLCAyMDMsIDIwNSwgMjA0LCAyMDYsIDIwNywKLTE4NCwgMjA4LCAy MTAsIDIwOSwgMjExLCAyMTMsIDIxMiwgMjE1LCAyMTQsIDIxNywgMjE2LCAyMTgsIDIxOSwgMjIx LCAyMjIsIDI1MiwKLTIyNSwgMjI0LCAyMjYsIDIyOCwgMjI3LCAyMjksIDIzMCwgMjMxLCAyMzMs IDIzMiwgMjM0LCAyMzUsIDIzNywgMjM2LCAyMzgsIDIzOSwKLTE4MywgMjQwLCAyNDIsIDI0MSwg MjQzLCAyNDUsIDI0NCwgMjQ3LCAyNDYsIDI0OSwgMjQ4LCAyNTAsIDI1MSwgMTgwLCAyNTQsIDI1 MwotfTsKLQotCi0vKiBMb2NhbCBmaWxlIGNoYXJhY3RlciBzZXRzIHRvIElTTyBMYXRpbiBBbHBo YWJldCAxICovCi0KLSNpZmRlZiBOT1RVU0VECi1DT05TVCBDSEFSCi15YXNsMVtdID0geyAgLyog QVNDSUkgdG8gTGF0aW4tMSAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAg IDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAx OCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjks ICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwg IDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAg NTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYz LAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQs ICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwg IDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAg OTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4 LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTks IDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3Ci19OwotI2VuZGlmIC8qIE5P VFVTRUQgKi8KLQotQ09OU1QgQ0hBUgoteWFxbDFbXSA9IHsgIC8qIEV4dGVuZGVkIE1hYyBMYXRp biAoYmFzZWQgb24gQXBwbGUgUXVpY2tkcmF3KSB0byBMYXRpbi0xICovCi0gIDAsICAgMSwgICAy LCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywg IDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAg MjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAz NiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcs Ci0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwg IDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAg NzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4 MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIs ICA5MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywg MTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAx MTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2 LCAxMjcsCi0xOTYsIDE5NywgMTk5LCAyMDEsIDIwOSwgMjE0LCAyMjAsIDIyNSwgMjI0LCAyMjYs IDIyOCwgMjI3LCAyMjksIDIzMSwgMjMzLCAyMzIsCi0yMzQsIDIzNSwgMjM3LCAyMzYsIDIzOCwg MjM5LCAyNDEsIDI0MywgMjQyLCAyNDQsIDI0NiwgMjQ1LCAyNTAsIDI0OSwgMjUxLCAyNTIsCi0y MjEsIDE3NiwgMTYyLCAxNjMsIDE2NywgMjE1LCAxODIsIDIyMywgMTc0LCAxNjksIDE3OCwgMTgw LCAxNjgsIDE3OSwgMTk4LCAyMTYsCi0xODUsIDE3NywgMTg4LCAxODksIDE2NSwgMTgxLCAxMjgs IDEyOSwgMTMwLCAxMzEsIDE5MCwgMTcwLCAxODYsIDEzMiwgMjMwLCAyNDgsCi0xOTEsIDE2MSwg MTcyLCAxNDIsIDEzMywgMTM0LCAxMzUsIDE3MSwgMTg3LCAxNjYsIDE2MCwgMTkyLCAxOTUsIDIx MywgMTM2LCAxMzcsCi0xNzMsIDE0NCwgMTM4LCAxMzksIDE0MywgMTQ2LCAyNDcsIDE0NSwgMjU1 LCAxNDAsIDE0MSwgMTY0LCAyMDgsIDI0MCwgMjIyLCAyNTQsCi0yNTMsIDE4MywgMTQ3LCAxNDgs IDE0OSwgMTk0LCAyMDIsIDE5MywgMjAzLCAyMDAsIDIwNSwgMjA2LCAyMDcsIDIwNCwgMjExLCAy MTIsCi0xNTAsIDIxMCwgMjE4LCAyMTksIDIxNywgMTUxLCAxNTIsIDE1MywgMTc1LCAxNTQsIDE1 NSwgMTU2LCAxODQsIDE1NywgMTU4LCAxNTkKLX07Ci0KLUNPTlNUIENIQVIKLXlkdWwxW10gPSB7 ICAvKiBEdXRjaCBJU08gNjQ2IHRvIExhdGluLTEgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0 LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwK LSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAg MjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsIDE2MywgIDM2LCAgMzcsICAz OCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5 LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwg IDYxLCAgNjIsICA2MywKLTE5MCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAg NzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4 MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAyNTUsIDE4OSwgMTI0LCAgOTQs ICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwg MTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAx MTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxNjgsIDE2NCwgMTg4LCAgMzksIDEyNwotfTsK LQotQ09OU1QgQ0hBUgoteWZpbDFbXSA9IHsgIC8qIEZpbm5pc2ggTlJDICgqbm90KiBJU08tNjQ2 KSB0byBMYXRpbi0xICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywg ICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAg MTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMw LCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEs ICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1Miwg IDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0g NjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1 LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYs ICA4NywgIDg4LCAgODksICA5MCwgMTk2LCAyMTQsIDE5NywgMjIwLCAgOTUsCi0yMzMsICA5Nywg IDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEw OSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIw LCAxMjEsIDEyMiwgMjI4LCAyNDYsIDIyOSwgMjUyLCAxMjcKLX07Ci0KLUNPTlNUIENIQVIKLXlm cmwxW10gPSB7ICAvKiBGcmVuY2ggSVNPIDY0NiB0byBMYXRpbi0xICovCi0gIDAsICAgMSwgICAy LCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywg IDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAg MjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAxNjMsICAz NiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcs Ci0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwg IDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0yMjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAg NzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4 MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgMTc2LCAyMzEs IDE2NywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywg MTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAx MTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMjMzLCAyNDksIDIzMiwgMTY4 LCAxMjcKLX07Ci0KLUNPTlNUIENIQVIKLXlmY2wxW10gPSB7ICAvKiBGcmVuY2gtQ2FuYWRpYW4g SVNPIDY0NiB0byBMYXRpbi0xICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYs ICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywg IDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAy OSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQw LCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEs ICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAg NjMsCi0yMjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3 NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1 LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgMjI2LCAyMzEsIDIzNCwgMjM4LCAgOTUsCi0yNDQs ICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAx MDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDEx OSwgMTIwLCAxMjEsIDEyMiwgMjMzLCAyNDksIDIzMiwgMjUxLCAxMjcKLX07Ci0KLUNPTlNUIENI QVIKLXlnZWwxW10gPSB7ICAvKiBHZXJtYW4gSVNPIDY0NiB0byBMYXRpbi0xICovCi0gIDAsICAg MSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIs ICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywg IDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAg MzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2 LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcs ICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0xNjcsICA2NSwgIDY2LCAgNjcsICA2OCwg IDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0g ODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgMTk2 LCAyMTQsIDIyMCwgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIs IDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywg MTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMjI4LCAyNDYsIDI1 MiwgMjIzLCAxMjcKLX07Ci0KLUNPTlNUIENIQVIKLXlpdGwxW10gPSB7ICAvKiBJdGFsaWFuIElT TyA2NDYgdG8gTGF0aW4tMSAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAg IDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAx OCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjks ICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgMTYzLCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwg IDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAg NTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYz LAotMTY3LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQs ICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwg IDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIDE3NiwgMjMxLCAyMzMsICA5NCwgIDk1LAotMjQ5LCAg OTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4 LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTks IDEyMCwgMTIxLCAxMjIsIDIyNCwgMjQyLCAyMzIsIDIzNiwgMTI3Ci19OwotCi1DT05TVCBDSEFS Ci15bmVsMVtdID0geyAgLyogTmVYVCB0byBMYXRpbi0xICovCi0vKiBORUVEIFRPIE1BS0UgVEhJ UyBPTkUgSU5WRVJUSUJMRSAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAg IDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAx OCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjks ICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwg IDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAg NTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYz LAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQs ICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwg IDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAg OTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4 LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTks IDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTYwLCAxOTIsIDE5Mywg MTk0LCAxOTUsIDE5NiwgMTk3LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIw NiwgMjA3LAotMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTcsIDIxOCwgMjE5 LCAyMjAsIDIyMSwgMjIyLCAxODEsIDIxNSwgMjQ3LAotMTY5LCAxNjEsIDE2MiwgMTYzLCBVTkss IDE2NSwgVU5LLCAxNjcsIDE2NCwgVU5LLCBVTkssIDE3MSwgVU5LLCBVTkssIFVOSywgVU5LLAot MTc0LCBVTkssIFVOSywgVU5LLCAxODMsIDE2NiwgMTgyLCBVTkssIFVOSywgVU5LLCBVTkssIDE4 NywgVU5LLCBVTkssIDE3MiwgMTkxLAotMTg1LCAgOTYsIDE4MCwgIDk0LCAxMjYsIDE3NSwgVU5L LCBVTkssIDE2OCwgMTc4LCAxNzYsIDE4NCwgMTc5LCBVTkssIFVOSywgVU5LLAotVU5LLCAxNzcs IDE4OCwgMTg5LCAxOTAsIDIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMSwgMjMyLCAy MzMsIDIzNCwgMjM1LAotMjM2LCAxOTgsIDIzNywgMTcwLCAyMzgsIDIzOSwgMjQwLCAyNDEsIFVO SywgMjE2LCBVTkssIDE4NiwgMjQyLCAyNDMsIDI0NCwgMjQ1LAotMjQ2LCAyMzAsIDI0OSwgMjUw LCAyNTEsIFVOSywgMjUyLCAyNTMsIFVOSywgMjQ4LCBVTkssIDIyMywgMjU0LCAyNTUsIFVOSywg VU5LCi19OwotCi1DT05TVCBDSEFSCi15bm9sMVtdID0geyAgLyogTm9yd2VnaWFuL0RhbmlzaCBJ U08gNjQ2IHRvIExhdGluLTEgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwg ICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAg MTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5 LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAs ICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwg IDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2 MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0 LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUs ICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAxOTgsIDIxNiwgMTk3LCAgOTQsICA5NSwKLSA5Niwg IDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEw OCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5 LCAxMjAsIDEyMSwgMTIyLCAyMzAsIDI0OCwgMjI5LCAxMjYsIDEyNwotfTsKLQotQ09OU1QgQ0hB UgoteXBvbDFbXSA9IHsgIC8qIFBvcnR1Z3Vlc2UgSVNPIDY0NiB0byBMYXRpbi0xICovCi0gIDAs ICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAg MTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAy MywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0 LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwg IDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAg NTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2 OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzks Ci0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwg MTk1LCAxOTksIDIxMywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAx MDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDEx MywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMjI3LCAyMzEs IDI0NSwgMTI2LCAxMjcKLX07Ci0KLUNPTlNUIENIQVIKLXlzcGwxW10gPSB7ICAvKiBTcGFuaXNo IElTTyA2NDYgdG8gTGF0aW4tMSAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2 LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcs ICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAg MjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgMTYzLCAgMzYsICAzNywgIDM4LCAgMzksICA0 MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUx LCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2Miwg IDYzLAotMTY3LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAg NzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4 NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIDE2MSwgMjA5LCAxOTEsICA5NCwgIDk1LAotIDk2 LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywg MTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAx MTksIDEyMCwgMTIxLCAxMjIsIDE3NiwgMjQxLCAyMzEsIDEyNiwgMTI3Ci19OwotCi1DT05TVCBD SEFSCi15c3dsMVtdID0geyAgLyogU3dlZGlzaCBJU08gNjQ2IHRvIExhdGluLTEgKi8KLSAgMCwg ICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAx MiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIz LCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQs ICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAg NDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1 NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLTIwMSwgIDY1LCAgNjYsICA2NywgIDY4 LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwK LSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAx OTYsIDIxNCwgMTk3LCAyMjAsICA5NSwKLTIzMywgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEw MiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEz LCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAyMjgsIDI0Niwg MjI5LCAyNTIsIDEyNwotfTsKLQotQ09OU1QgQ0hBUgoteWNobDFbXSA9IHsgIC8qIFN3aXNzIElT TyA2NDYgdG8gTGF0aW4tMSAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAg IDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAx OCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjks ICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgMjQ5LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwg IDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAg NTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYz LAotMjI0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQs ICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwg IDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIDIzMywgMjMxLCAyMzQsIDIzOCwgMjMyLAotMjQ0LCAg OTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4 LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTks IDEyMCwgMTIxLCAxMjIsIDIyOCwgMjQ2LCAyNTIsIDI1MSwgMTI3Ci19OwotCi1DT05TVCBDSEFS Ci15aHVsMVtdID0geyAgLyogSHVuZ2FyaWFuIElTTyA2NDYgdG8gTGF0aW4tMSAqLwotICAwLCAg IDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEy LCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMs ICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwg IDM1LCAxNjQsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0 NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3 LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotMTkzLCAgNjUsICA2NiwgIDY3LCAgNjgs ICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAot IDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIDIw MSwgMjE0LCAyMjAsICA5NCwgIDk1LAotMjI1LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAy LCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMs IDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDIzMywgMjQ2LCAy NTIsICAzNCwgMTI3Ci19OwotCi1DT05TVCBDSEFSCi15ZG1sMVtdID0geyAgLyogREVDIE11bHRp bmF0aW9uYWwgQ2hhcmFjdGVyIFNldCB0byBMYXRpbi0xICovCi0vKiBOb3RlOiBUaGlzIGlzIGEg bnVsbCB0cmFuc2xhdGlvbiAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAg IDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAx OCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjks ICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwg IDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAg NTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYz LAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQs ICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwg IDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAg OTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4 LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTks IDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTI4LCAxMjksIDEzMCwg MTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0 MiwgMTQzLAotMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUz LCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAotMTYwLCAxNjEsIDE2MiwgMTYzLCAxNjQs IDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcyLCAxNzMsIDE3NCwgMTc1LAot MTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4MSwgMTgyLCAxODMsIDE4NCwgMTg1LCAxODYsIDE4 NywgMTg4LCAxODksIDE5MCwgMTkxLAotMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4 LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LAotMjA4LCAyMDks IDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAy MjEsIDIyMiwgMjIzLAotMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMwLCAyMzEsIDIz MiwgMjMzLCAyMzQsIDIzNSwgMjM2LCAyMzcsIDIzOCwgMjM5LAotMjQwLCAyNDEsIDI0MiwgMjQz LCAyNDQsIDI0NSwgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1NCwg MjU1Ci19OwotCi1DT05TVCBDSEFSCi15ZGdsMVtdID0geyAgLyogRGF0YSBHZW5lcmFsIEludGVy bmF0aW9uYWwgdG8gTGF0aW4tMSAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2 LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcs ICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAg MjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0 MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUx LCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2Miwg IDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAg NzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4 NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2 LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywg MTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAx MTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTI4LCAxMjksIDEz MCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEs IDE0MiwgMTQzLAotMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1Miwg MTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAotMTYwLCAxNzIsIDE4OSwgMTgxLCAx NzgsIDE3OSwgMTY0LCAxNjIsIDE2MywgMTcwLCAxODYsIDE2MSwgMTkxLCAxNjksIDE3NCwgMTc1 LAotMTg3LCAxNzEsIDE4MiwgMTg1LCAyNTMsIDE2NSwgMTc3LCAyNDAsIDIwOCwgMTgzLCAxODQs IDE2NywgMTc2LCAxNjgsIDE4MCwgMTY2LAotMTkzLCAxOTIsIDE5NCwgMTk2LCAxOTUsIDE5Nywg MTk4LCAxOTksIDIwMSwgMjAwLCAyMDIsIDIwMywgMjA1LCAyMDQsIDIwNiwgMjA3LAotMjA5LCAy MTEsIDIxMCwgMjEyLCAyMTQsIDIxMywgMjE2LCAyMTUsIDIxOCwgMjE3LCAyMTksIDIyMCwgMTkw LCAyMjEsIDIyMiwgMTg4LAotMjI1LCAyMjQsIDIyNiwgMjI4LCAyMjcsIDIyOSwgMjMwLCAyMzEs IDIzMywgMjMyLCAyMzQsIDIzNSwgMjM3LCAyMzYsIDIzOCwgMjM5LAotMjQxLCAyNDMsIDI0Miwg MjQ0LCAyNDYsIDI0NSwgMjQ4LCAyNDcsIDI1MCwgMjQ5LCAyNTEsIDI1MiwgMjIzLCAyNTUsIDI1 NCwgMTczCi19OwotCi0KLS8qIFRyYW5zbGF0aW9uIHRhYmxlcyBmb3IgQ3lyaWxsaWMgY2hhcmFj dGVyIHNldHMgKi8KLQotI2lmZGVmIENZUklMTElDCi1DT05TVCBDSEFSCi15bGNhY1tdID0geyAg LyogTGF0aW4vQ3lyaWxsaWMgdG8gQ1A4NjYgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAg IDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAx NiwgIDE3LCAgMTgsICAxOSwgMjA4LCAyMDksICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcs ICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwg IDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAg NTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYx LCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIs ICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4Mywg IDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5 NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2 LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcs IDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTE5Niwg MTc5LCAxOTIsIDIxNywgMTkxLCAyMTgsIDE5NSwgMTkzLCAxODAsIDE5NCwgMTk3LCAxNzYsIDE3 NywgMTc4LCAyMTEsIDIxNiwKLTIwNSwgMTg2LCAyMDAsIDE4OCwgMTg3LCAyMDEsIDIwNCwgMjAy LCAxODUsIDIwMywgMjA2LCAyMjMsIDIyMCwgMjE5LCAyNTQsIFVOSywKLTI1NSwgMjQwLCAxMzIs IDEzMSwgMjQyLCAgODMsICA3MywgMjQ0LCAgNzQsIDEzOSwgMTQxLCAxNTEsIDEzOCwgIDQ1LCAy NDYsIDEzNSwKLTEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEz NywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKLTE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4 LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwK LTE2MCwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAx NzEsIDE3MiwgMTczLCAxNzQsIDE3NSwKLTIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIz MCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwKLTI1MiwgMjQx LCAxNjQsIDE2MywgMjQzLCAxMTUsIDEwNSwgMjQ1LCAxMDYsIDE3MSwgMTczLCAyMzEsIDE3MCwg IDIxLCAyNDcsIDE2NwotfTsKLQotQ09OU1QgQ0hBUgoteWxjNTVbXSA9IHsgIC8qIExhdGluL0N5 cmlsbGljIHRvIENQODU1IChpbnZlcnNlIG9mIHk1NWxjKSAqLwotICAwLCAgIDEsICAgMiwgICAz LCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwg IDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAg MjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAz NywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4 LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwg IDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAg NzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4 MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMs ICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwg MTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAx MTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3 LAotMTc0LCAxNzUsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODUsIDE4NiwgMTg3LCAxODgs IDE5MSwgMTkyLCAxOTMsIDE5NCwgMTk1LAotMTk2LCAxOTcsIDIwMCwgMjAxLCAyMDIsIDIwMywg MjA0LCAyMDUsIDIwNiwgMjA3LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMywgMjU0LAotMjU1LCAx MzMsIDEyOSwgMTMxLCAxMzUsIDEzNywgMTM5LCAxNDEsIDE0MywgMTQ1LCAxNDcsIDE0OSwgMTUx LCAyNDAsIDE1MywgMTU1LAotMTYxLCAxNjMsIDIzNiwgMTczLCAxNjcsIDE2OSwgMjM0LCAyNDQs IDE4NCwgMTkwLCAxOTksIDIwOSwgMjExLCAyMTMsIDIxNSwgMjIxLAotMjI2LCAyMjgsIDIzMCwg MjMyLCAxNzEsIDE4MiwgMTY1LCAyNTIsIDI0NiwgMjUwLCAxNTksIDI0MiwgMjM4LCAyNDgsIDE1 NywgMjI0LAotMTYwLCAxNjIsIDIzNSwgMTcyLCAxNjYsIDE2OCwgMjMzLCAyNDMsIDE4MywgMTg5 LCAxOTgsIDIwOCwgMjEwLCAyMTIsIDIxNCwgMjE2LAotMjI1LCAyMjcsIDIyOSwgMjMxLCAxNzAs IDE4MSwgMTY0LCAyNTEsIDI0NSwgMjQ5LCAxNTgsIDI0MSwgMjM3LCAyNDcsIDE1NiwgMjIyLAot MjM5LCAxMzIsIDEyOCwgMTMwLCAxMzQsIDEzNiwgMTM4LCAxNDAsIDE0MiwgMTQ0LCAxNDYsIDE0 OCwgMTUwLCAyNTMsIDE1MiwgMTU0Ci19OwotCi1DT05TVCBDSEFSCi15bGMxMjUxW10gPSB7ICAv KiBMYXRpbi9DeXJpbGxpYyB0byBDUDEyNTEgKGludmVyc2Ugb2YgeTEyNTFsYykgKi8KLSAgMCwg ICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAx MiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIz LCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQs ICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAg NDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1 NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4 LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwK LSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAg OTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEw MiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEz LCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwg MTI1LCAxMjYsIDEyNywKLTEzMCwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM5LCAx NDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwKLTE1MywgMTU1LCAxNjQsIDE2 NSwgMTY2LCAxNjksIDE3MSwgMTcyLCAxNzQsIDE3NiwgMTc3LCAxODAsIDE4MSwgMTgyLCAxODMs IDE4NywKLTE2MCwgMTY4LCAxMjgsIDEyOSwgMTcwLCAxODksIDE3OCwgMTc1LCAxNjMsIDEzOCwg MTQwLCAxNDIsIDE0MSwgMTczLCAxNjEsIDE0MywKLTE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAx OTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywKLTIw OCwgMjA5LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTks IDIyMCwgMjIxLCAyMjIsIDIyMywKLTIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwg MjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwKLTI0MCwgMjQxLCAy NDIsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjUz LCAyNTQsIDI1NSwKLTE4NSwgMTg0LCAxNDQsIDEzMSwgMTg2LCAxOTAsIDE3OSwgMTkxLCAxODgs IDE1NCwgMTU2LCAxNTgsIDE1NywgMTY3LCAxNjIsIDE1OQotfTsKLQotQ09OU1QgQ0hBUgoteWxj YnVbXSA9IHsgIC8qIExhdGluL0N5cmlsbGljIHRvIEJ1bGdhcmlhbiBQQyBDb2RlIFBhZ2UgKi8K LSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAg MTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAy MiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMz LCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwg IDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAg NTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2 NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgs ICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwg IDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAx MDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTEx MiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMs IDEyNCwgMTI1LCAxMjYsIDEyNywKLTI1NSwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5Nywg MTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwKLTEyOCwgMTI5LCAx MzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQx LCAxNDIsIDE0MywKLTE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIs IDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKLTE2MCwgMTYxLCAxNjIsIDE2Mywg MTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTczLCAxNzQsIDE3 NSwKLTE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg2 LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwKLTIxMywgMjA3LCAyMDgsIDIwOSwgMjEwLCAyMTEs IDIxMiwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCAyMjIsIDIyMywKLTIyNCwg MjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIz NiwgMjM3LCAyMzgsIDIzOSwKLTI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3 LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjE0LCAyNTMsIDI1NAotfTsKLQotQ09OU1QgQ0hB UgoteWxjazhbXSA9IHsgIC8qIExhdGluL0N5cmlsbGljIHRvIE9sZCBLT0ktOCBDeXJpbGxpYyAq LwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAs ICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwg IDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAg MzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0 LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUs ICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2Niwg IDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3 OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5 LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAs IDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAot MTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEy MywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0 LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAotMTQ0LCAxNDUs IDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAx NTcsIDE1OCwgMTU5LAotVU5LLCAyMjksIFVOSywgVU5LLCBVTkssICA4MywgIDczLCAgNzMsICA3 NCwgVU5LLCBVTkssIFVOSywgMjM1LCBVTkssIDI0NSwgVU5LLAotMjI1LCAyMjYsIDI0NywgMjMx LCAyMjgsIDIyOSwgMjQ2LCAyNTAsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwg MjQwLAotMjQyLCAyNDMsIDI0NCwgMjQ1LCAyMzAsIDIzMiwgMjI3LCAyNTQsIDI1MSwgMjUzLCAy NTUsIDI0OSwgMjQ4LCAyNTIsIDIyNCwgMjQxLAotMTkzLCAxOTQsIDIxNSwgMTk5LCAxOTYsIDE5 NywgMjE0LCAyMTgsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LAotMjEw LCAyMTEsIDIxMiwgMjEzLCAxOTgsIDIwMCwgMTk1LCAyMjIsIDIxOSwgMjIxLCAyMjMsIDIxNywg MjE2LCAyMjAsIDE5MiwgMjA5LAotVU5LLCAxOTcsIFVOSywgVU5LLCBVTkssIDExNSwgMTA1LCAx MDUsIDEwNiwgVU5LLCBVTkssIFVOSywgMjAzLCBVTkssIDIxMywgVU5LCi19OwotCi1DT05TVCBD SEFSCi15YWNsY1tdID0geyAgLyogQ1A4NjYgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLS8qIE5FRUQg VE8gTUFLRSBUSElTIE9ORSBJTlZFUlRJQkxFICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwg ICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0g MTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3 LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgs ICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwg IDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2 MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcy LCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMs ICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAg OTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEw NiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3 LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xNzYs IDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAx ODgsIDE4OSwgMTkwLCAxOTEsCi0xOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5 OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsCi0yMDgsIDIwOSwgMjEw LCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwg MjIyLCAyMjMsCi1VTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCi1VTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss Ci1VTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssCi0yMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAy MzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksCi0xNjEsIDI0 MSwgMTY0LCAyNDQsIDE2NywgMjQ3LCAxNzQsIDI1NCwgVU5LLCBVTkssIFVOSywgVU5LLCAyNDAs IFVOSywgVU5LLCBVTksKLX07Ci0KLUNPTlNUIENIQVIKLXk1NWxjW10gPSB7ICAvKiBDUDg1NSB0 byBMYXRpbi9DeXJpbGxpYyAoaW52ZXJzZSBvZiB5bGM1NSkgKi8KLSAgMCwgICAxLCAgIDIsICAg MywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQs ICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwg IDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAg MzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0 OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTks ICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwg IDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAg ODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkz LCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQs IDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwg MTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEy NywKLTI0MiwgMTYyLCAyNDMsIDE2MywgMjQxLCAxNjEsIDI0NCwgMTY0LCAyNDUsIDE2NSwgMjQ2 LCAxNjYsIDI0NywgMTY3LCAyNDgsIDE2OCwKLTI0OSwgMTY5LCAyNTAsIDE3MCwgMjUxLCAxNzEs IDI1MiwgMTcyLCAyNTQsIDE3NCwgMjU1LCAxNzUsIDIzOCwgMjA2LCAyMzQsIDIwMiwKLTIwOCwg MTc2LCAyMDksIDE3NywgMjMwLCAxOTgsIDIxMiwgMTgwLCAyMTMsIDE4MSwgMjI4LCAxOTYsIDIx MSwgMTc5LCAxMjgsIDEyOSwKLTEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAyMjksIDE5NywgMjE2 LCAxODQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMjE3LCAxODUsIDEzOSwKLTE0MCwgMTQxLCAxNDIs IDE0MywgMTQ0LCAxNDUsIDIxOCwgMTg2LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAx NTIsIDE1MywKLTIxOSwgMTg3LCAyMjAsIDE4OCwgMjIxLCAxODksIDIyMiwgMTkwLCAyMjMsIDE1 NCwgMTU1LCAxNTYsIDE1NywgMTkxLCAyMzksIDE1OCwKLTIwNywgMjI0LCAxOTIsIDIyNSwgMTkz LCAyMjYsIDE5NCwgMjI3LCAxOTUsIDIxNCwgMTgyLCAyMTAsIDE3OCwgMjM2LCAyMDQsIDI0MCwK LTE3MywgMjM1LCAyMDMsIDIxNSwgMTgzLCAyMzIsIDIwMCwgMjM3LCAyMDUsIDIzMywgMjAxLCAy MzEsIDE5OSwgMjUzLCAxNTksIDE2MAotfTsKLQotQ09OU1QgQ0hBUgoteTEyNTFsY1tdID0geyAg LyogQ1AxMjUxIHRvIExhdGluL0N5cmlsbGljIChpbnZlcnNlIG9mIHlsYzEyNTEpICovCi0gIDAs ICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAg MTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAy MywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0 LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwg IDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAg NTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2 OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzks Ci0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwg IDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAx MDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDEx MywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQs IDEyNSwgMTI2LCAxMjcsCi0xNjIsIDE2MywgMTI4LCAyNDMsIDEyOSwgMTMwLCAxMzEsIDEzMiwg MTMzLCAxMzQsIDE2OSwgMTM1LCAxNzAsIDE3MiwgMTcxLCAxNzUsCi0yNDIsIDEzNiwgMTM3LCAx MzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLCAxNDQsIDI0OSwgMTQ1LCAyNTAsIDI1MiwgMjUx LCAyNTUsCi0xNjAsIDE3NCwgMjU0LCAxNjgsIDE0NiwgMTQ3LCAxNDgsIDI1MywgMTYxLCAxNDks IDE2NCwgMTUwLCAxNTEsIDE3MywgMTUyLCAxNjcsCi0xNTMsIDE1NCwgMTY2LCAyNDYsIDE1NSwg MTU2LCAxNTcsIDE1OCwgMjQxLCAyNDAsIDI0NCwgMTU5LCAyNDgsIDE2NSwgMjQ1LCAyNDcsCi0x NzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3 LCAxODgsIDE4OSwgMTkwLCAxOTEsCi0xOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgs IDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsCi0yMDgsIDIwOSwg MjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIy MSwgMjIyLCAyMjMsCi0yMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMy LCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzkKLX07Ci0KLUNPTlNUIENIQVIKLXli dWxjW10gPSB7ICAvKiBCdWxnYXJpYW4gUEMgQ29kZSBQYWdlIHRvIExhdGluL0N5cmlsbGljICov Ci0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwg IDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAg MjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAz MywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQs ICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwg IDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAg NjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4 LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODks ICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwg MTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0x MTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIz LCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAs IDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCi0xNjAsIDE2MSwg MTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIsIDE3 MywgMTc0LCAxNzUsCi0xNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0 LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsCi0xOTIsIDE5MywgMTk0LCAxOTUs IDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAy MDcsCi0xMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEz OSwgMTQwLCAxNDEsIDE0MiwgMTQzLCAyMDksCi0yMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjA4 LCAyNTMsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAyMjMsCi0yMjQs IDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAy MzYsIDIzNywgMjM4LCAyMzksCi0yNDAsIDI0MSwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAyNDYsIDI0 NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1NCwgMjU1LCAxMjgKLX07Ci0KLUNPTlNUIENI QVIKLXlrOGxjW10gPSB7ICAvKiBPbGQgS09JLTggQ3lyaWxsaWMgdG8gTGF0aW4vQ3lyaWxsaWMg Ki8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEw LCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEs ICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwg IDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0 NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1 LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYs ICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAg NzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4 OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAw LCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwK LTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAx MjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEz NCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKLTE0NCwgMTQ1 LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1Niwg MTU3LCAxNTgsIDE1OSwKLVVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKLVVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywKLTIzOCwgMjA4LCAyMDksIDIzMCwgMjEyLCAyMTMsIDIyOCwgMjExLCAyMjksIDIxNiwg MjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwKLTIyMywgMjM5LCAyMjQsIDIyNSwgMjI2LCAy MjcsIDIxNCwgMjEwLCAyMzYsIDIzNSwgMjE1LCAyMzIsIDIzNywgMjMzLCAyMzEsIDIzNCwKLTIw NiwgMTc2LCAxNzcsIDE5OCwgMTgwLCAxODEsIDE5NiwgMTc5LCAxOTcsIDE4NCwgMTg1LCAxODYs IDE4NywgMTg4LCAxODksIDE5MCwKLTE5MSwgMjA3LCAxOTIsIDE5MywgMTk0LCAxOTUsIDE4Miwg MTc4LCAyMDQsIDIwMywgMTgzLCAyMDAsIDIwNSwgMjAxLCAxOTksIDEyNwotfTsKLQotQ09OU1Qg Q0hBUgoteWxjc2tbXSA9IHsgIC8qIExhdGluL0N5cmlsbGljIHRvIFNob3J0IEtPSSAqLwotICAw LCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwg IDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAg MjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAz NCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUs ICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1Niwg IDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAg NjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5 LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAs ICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwg IDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAg ODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDky LCAgOTMsICA5NCwgMTI3LAotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcs ICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwg IDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAz MCwgIDMxLAotIDMyLCAxMDEsIFVOSywgVU5LLCBVTkssICA4MywgIDczLCAgNzMsICA3NCwgVU5L LCBVTkssIFVOSywgMTA3LCAgNDUsIDExNywgVU5LLAotIDk3LCAgOTgsIDExOSwgMTAzLCAxMDAs IDEwMSwgMTE4LCAxMjIsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEyLAot MTE0LCAxMTUsIDExNiwgMTE3LCAxMDIsIDEwNCwgIDk5LCAxMjYsIDEyMywgMTI1LCAgMzksIDEy MSwgMTIwLCAxMjQsICA5NiwgMTEzLAotIDk3LCAgOTgsIDExOSwgMTAzLCAxMDAsIDEwMSwgMTE4 LCAxMjIsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEyLAotMTE0LCAxMTUs IDExNiwgMTE3LCAxMDIsIDEwNCwgIDk5LCAxMjYsIDEyMywgMTI1LCAgMzksIDEyMSwgMTIwLCAx MjQsICA5NiwgMTEzLAotVU5LLCAxMDEsIFVOSywgVU5LLCBVTkssICA4MywgIDczLCAgNzMsICA3 NCwgVU5LLCBVTkssIFVOSywgMTA3LCBVTkssIDExNywgVU5LCi19OwotCi1DT05TVCBDSEFSIHlz a2N5W10gPSB7ICAvKiBTaG9ydCBLT0kgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgMCwgICAxLCAg IDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEz LCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQs ICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwg IDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0 NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4 LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjks ICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwg IDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5 MiwgIDkzLCAgOTQsICA5NSwKLTIwNiwgMTc2LCAxNzcsIDE5OCwgMTgwLCAxODEsIDE5NiwgMTc5 LCAxOTcsIDE4NCwgMTg1LCAxODYsIDE4NywgMTg4LCAxODksIDE5MCwKLTE5MSwgMjA3LCAxOTIs IDE5MywgMTk0LCAxOTUsIDE4MiwgMTc4LCAyMDQsIDIwMywgMTgzLCAyMDAsIDIwNSwgMjAxLCAx OTksIDEyNwotfTsKLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotCi0jaWZkZWYgTEFUSU4yCi0KLS8q IExhdGluLTIgdGFibGVzICovCi0KLUNPTlNUIENIQVIKLXlsMjUyW10gPSB7CQkJCS8qIExhdGlu LTIgdG8gQ29kZSBQYWdlIDg1MiAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2 LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcs ICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAg MjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0 MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUx LCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2Miwg IDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAg NzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4 NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2 LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywg MTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAx MTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTc0LCAxNzUsIDE3 NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODUsIDE4NiwgMTg3LCAxODgsIDE5MSwgMTkyLCAxOTMs IDE5NCwgMTk1LAotMTk2LCAxOTcsIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwg MjE3LCAyMTgsIDIxOSwgMjIwLCAyMjMsIDI0MCwgMjU0LAotMjU1LCAxNjQsIDI0NCwgMTU3LCAy MDcsIDE0OSwgMTUxLCAyNDUsIDI0OSwgMjMwLCAxODQsIDE1NSwgMTQxLCAxNzAsIDE2NiwgMTg5 LAotMjQ4LCAxNjUsIDI0MiwgMTM2LCAyMzksIDE1MCwgMTUyLCAyNDMsIDI0NywgMjMxLCAxNzMs IDE1NiwgMTcxLCAyNDEsIDE2NywgMTkwLAotMjMyLCAxODEsIDE4MiwgMTk4LCAxNDIsIDE0NSwg MTQzLCAxMjgsIDE3MiwgMTQ0LCAxNjgsIDIxMSwgMTgzLCAyMTQsIDIxNSwgMjEwLAotMjA5LCAy MjcsIDIxMywgMjI0LCAyMjYsIDEzOCwgMTUzLCAxNTgsIDI1MiwgMjIyLCAyMzMsIDIzNSwgMTU0 LCAyMzcsIDIyMSwgMjI1LAotMjM0LCAxNjAsIDEzMSwgMTk5LCAxMzIsIDE0NiwgMTM0LCAxMzUs IDE1OSwgMTMwLCAxNjksIDEzNywgMjE2LCAxNjEsIDE0MCwgMjEyLAotMjA4LCAyMjgsIDIyOSwg MTYyLCAxNDcsIDEzOSwgMTQ4LCAyNDYsIDI1MywgMTMzLCAxNjMsIDI1MSwgMTI5LCAyMzYsIDIz OCwgMjUwCi19OwotCi1DT05TVCBDSEFSCi15NTJsMltdID0gewkJCQkvKiBDb2RlIFBhZ2UgODUy IHRvIExhdGluLTIgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAg IDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAx OSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAs ICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwg IDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAg NTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2 NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUs ICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4Niwg IDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAg OTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5 LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAs IDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTE5OSwgMjUyLCAyMzMsIDIyNiwg MjI4LCAyNDksIDIzMCwgMjMxLCAxNzksIDIzNSwgMjEzLCAyNDUsIDIzOCwgMTcyLCAxOTYsIDE5 OCwKLTIwMSwgMTk3LCAyMjksIDI0NCwgMjQ2LCAxNjUsIDE4MSwgMTY2LCAxODIsIDIxNCwgMjIw LCAxNzEsIDE4NywgMTYzLCAyMTUsIDIzMiwKLTIyNSwgMjM3LCAyNDMsIDI1MCwgMTYxLCAxNzcs IDE3NCwgMTkwLCAyMDIsIDIzNCwgMTczLCAxODgsIDIwMCwgMTg2LCAxMjgsIDEyOSwKLTEzMCwg MTMxLCAxMzIsIDEzMywgMTM0LCAxOTMsIDE5NCwgMjA0LCAxNzAsIDEzNSwgMTM2LCAxMzcsIDEz OCwgMTc1LCAxOTEsIDEzOSwKLTE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LCAxNDUsIDE5NSwgMjI3 LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE2NCwKLTI0MCwgMjA4LCAyMDcs IDIwMywgMjM5LCAyMTAsIDIwNSwgMjA2LCAyMzYsIDE1MywgMTU0LCAxNTUsIDE1NiwgMjIyLCAy MTcsIDE1NywKLTIxMSwgMjIzLCAyMTIsIDIwOSwgMjQxLCAyNDIsIDE2OSwgMTg1LCAxOTIsIDIx OCwgMjI0LCAyMTksIDI1MywgMjIxLCAyNTQsIDE4MCwKLTE1OCwgMTg5LCAxNzgsIDE4MywgMTYy LCAxNjcsIDI0NywgMTg0LCAxNzYsIDE2OCwgMjU1LCAyNTEsIDIxNiwgMjQ4LCAxNTksIDE2MAot fTsKLQotQ09OU1QgQ0hBUgoteWwyMTI1MFtdID0gewkJCQkvKiBMYXRpbi0yIHRvIENvZGUgUGFn ZSAxMjUwICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAg IDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAy MCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEs Ci0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0Miwg IDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAg NTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2 NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYs ICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4Nywg IDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAg OTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEw LCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEs IDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwg MTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOSwgMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsCi0x NDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU1LCAxNjYsIDE2OSwgMTcxLCAxNzIsIDE3NCwgMTc3 LCAxODEsIDE4MiwgMTgzLCAxODcsCi0xNjAsIDE2NSwgMTYyLCAxNjMsIDE2NCwgMTg4LCAxNDAs IDE2NywgMTY4LCAxMzgsIDE3MCwgMTQxLCAxNDMsIDE3MywgMTQyLCAxNzUsCi0xNzYsIDE4NSwg MTc4LCAxNzksIDE4MCwgMTkwLCAxNTYsIDE2MSwgMTg0LCAxNTQsIDE4NiwgMTU3LCAxNTksIDE4 OSwgMTU4LCAxOTEsCi0xOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAw LCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsCi0yMDgsIDIwOSwgMjEwLCAyMTEs IDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAy MjMsCi0yMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIz NCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksCi0yNDAsIDI0MSwgMjQyLCAyNDMsIDI0NCwgMjQ1 LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1MywgMjU0LCAyNTUKLX07Ci0K LUNPTlNUIENIQVIKLXkxMjUwbDJbXSA9IHsJCQkJLyogQ29kZSBQYWdlIDEyNTAgdG8gTGF0aW4t MiAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAg MTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAy MSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMy LCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0Mywg IDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAg NTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2 NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcs ICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwg IDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAx MDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTEx LAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIs IDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywg MTM0LCAxMzUsIDEzNiwgMTM3LCAxNjksIDEzOCwgMTY2LCAxNzEsIDE3NCwgMTcyLAotMTM5LCAx NDAsIDE0MSwgMTQyLCAxNDMsIDE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxODUsIDE0OSwgMTgy LCAxODcsIDE5MCwgMTg4LAotMTYwLCAxODMsIDE2MiwgMTYzLCAxNjQsIDE2MSwgMTUwLCAxNjcs IDE2OCwgMTUxLCAxNzAsIDE1MiwgMTUzLCAxNzMsIDE1NCwgMTc1LAotMTc2LCAxNTUsIDE3OCwg MTc5LCAxODAsIDE1NiwgMTU3LCAxNTgsIDE4NCwgMTc3LCAxODYsIDE1OSwgMTY1LCAxODksIDE4 MSwgMTkxLAotMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAx LCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LAotMjA4LCAyMDksIDIxMCwgMjExLCAyMTIs IDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLAot MjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMwLCAyMzEsIDIzMiwgMjMzLCAyMzQsIDIz NSwgMjM2LCAyMzcsIDIzOCwgMjM5LAotMjQwLCAyNDEsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMjQ2 LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1NCwgMjU1Ci19OwotCi1DT05T VCBDSEFSCi15bDJteltdID0gewkJCSAgICAgLyogTGF0aW4tMiB0byBNYXpvdmlhIChOT1QgaW52 ZXJ0aWJsZSkgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgs ICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwg IDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAz MSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQy LCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMs ICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwg IDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3 NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3 LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgs ICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAx MTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEy MSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTEyOCwgMTI5LCAxMzAsIDEzMSwgMTMy LCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywK LTE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAx NTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKLTI1NSwgMTQzLCBVTkssIDE1NiwgMTU1LCAgNzYsIDE1 MiwgIDIxLCAgMzQsICA4MywgIDgzLCAgODQsIDE2MCwgIDQ1LCAgOTAsIDE2MSwKLTI0OCwgMTM0 LCAgNDQsIDE0NiwgIDM5LCAxMDgsIDE1OCwgVU5LLCAgNDQsIDExNSwgMTE1LCAxMTYsIDE2Niwg IDM0LCAxMjIsIDE2NywKLSA4MiwgIDY1LCAgNjUsICA2NSwgMTQyLCAgNzYsIDE0OSwgMTI4LCAg NjcsICA2OSwgMTQ0LCAgNjksICA2OSwgIDczLCAgNzMsICA2OCwKLSA2OCwgMTY1LCAgNzgsIDE2 MywgIDc5LCAxNTMsIDE1MywgMjUwLCAgODIsICA4NSwgIDg1LCAxNTQsIDE1NCwgIDg5LCAgODQs IDIyNSwKLTExNCwgIDk3LCAxMzEsICA5NywgMTMyLCAxMDgsIDE0MSwgMTM1LCAgOTksIDEzMCwg MTQ1LCAxMzcsIDEwMSwgMTA1LCAxNDAsIDEwMSwKLTEwMCwgMTY0LCAxMTAsIDE2MiwgMTQ3LCAx NDgsIDE0OCwgMjQ2LCAxMTQsIDExNywgMTE3LCAxMjksIDEyOSwgMTIxLCAxMTYsIDI0OQotfTsK LQotQ09OU1QgQ0hBUgoteW16bDJbXSA9IHsJCQkgICAgIC8qIE1hem92aWEgdG8gTGF0aW4tMiAo Tk9UIElOVkVSVElCTEUpICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAg NywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4 LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwg IDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAg NDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1 MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMs Ci0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwg IDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAg ODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5 NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgs IDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwg MTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xMjgsIDI1MiwgMjMzLCAy MjYsIDIyOCwgIDk3LCAxNzcsIDIzMSwgMTAxLCAyMzUsIDEwMSwgMTA1LCAyMzgsIDIzMCwgMTk2 LCAxNjEsCi0yMDIsIDIzNCwgMTc5LCAyNDQsIDI0NiwgMTk4LCAxMTcsIDExNywgMTY2LCAyMTQs IDIyMCwgMTY0LCAxNjMsICA4OSwgMTgyLCAxMDIsCi0xNzIsIDE3NSwgMjQzLCAyMTEsIDI0Miwg MjEwLCAxODgsIDE5MSwgIDYzLCBVTkssIFVOSywgVU5LLCBVTkssICAzMywgIDM0LCAgMzQsCi1V TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssCi1VTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCi1VTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssCi1VTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCi1VTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCAyNDcsIFVOSywgMTc2LCAyNTUsIDIxNSwgVU5LLCBVTkssIFVOSywgVU5LLCAx NjAKLX07Ci0KLUNPTlNUIENIQVIKLXlsMmwxW10gPSB7CQkJCS8qIExhdGluLTIgdG8gTGF0aW4t MSAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAg MTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAy MSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMy LCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0Mywg IDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAg NTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2 NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcs ICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwg IDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAx MDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTEx LAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIs IDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywg MTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAotMTQ0LCAx NDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2 LCAxNTcsIDE1OCwgMTU5LAotMTYwLCAnQScsIFVOSywgJ0wnLCAxNjQsICdMJywgJ1MnLCAxNjcs IDE2OCwgJ1MnLCAnUycsICdUJywgJ1onLCAxNzMsICdaJywgJ1onLAotMTc2LCAnYScsIFVOSywg J2wnLCAxODAsICdsJywgJ3MnLCBVTkssIDE4NCwgJ3MnLCAncycsICd0JywgJ3onLCBVTkssICd6 JywgJ3onLAotJ1InLCAxOTMsIDE5NCwgJ0EnLCAxOTYsICdMJywgJ0MnLCAxOTksICdDJywgMjAx LCAnRScsIDIwMywgJ0UnLCAyMDUsICdJJywgJ0QnLAotMjA4LCAnTicsICdOJywgMjExLCAyMTIs ICdPJywgMjE0LCAyMTUsICdSJywgJ1UnLCAyMTgsICdVJywgMjIwLCAyMjEsICdUJywgMjIzLAot J3InLCAyMjUsIDIyNiwgJ2EnLCAyMjgsICdsJywgJ2MnLCAyMzEsICdjJywgMjMzLCAnZScsIDIz NSwgJ2UnLCAyMzcsICdpJywgJ2QnLAotMjQwLCAnbicsICduJywgMjQzLCAyNDQsICdvJywgMjQ2 LCAyNDcsICdyJywgJ3UnLCAyNTAsICd1JywgMjUyLCAyNTMsICd0JywgJy4nCi19OwotCi1DT05T VCBDSEFSCi15bDFsMltdID0gewkJCQkvKiBMYXRpbi0xIHRvIExhdGluLTIgKi8KLSAgMCwgICAx LCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwg IDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAg MjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAz NSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYs ICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1Nywg IDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAg NjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4 MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEs ICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwg MTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAx MTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1 LCAxMjYsIDEyNywKLTEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYs IDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKLTE0NCwgMTQ1LCAxNDYsIDE0Nywg MTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1 OSwKLTE2MCwgJ0EnLCBVTkssICdMJywgMTY0LCBVTkssIFVOSywgMTY3LCAxNjgsICdDJywgJ2En LCAnPCcsICc+JywgMTczLCAnUicsIFVOSywKLTE3NiwgVU5LLCBVTkssIFVOSywgMTgwLCBVTkss IFVOSywgVU5LLCAxODQsIFVOSywgJ28nLCAnPicsIFVOSywgVU5LLCBVTkssIFVOSywKLSdBJywg MTkzLCAxOTQsICdBJywgMTk2LCAnQScsICdBJywgMTk5LCAnRScsIDIwMSwgJ0UnLCAyMDMsICdJ JywgMjA1LCAnSScsICdJJywKLTIwOCwgJ04nLCAnTycsIDIxMSwgMjEyLCAnTycsIDIxNCwgMjE1 LCAnTycsICdVJywgMjE4LCAnVScsIDIyMCwgMjIxLCBVTkssIDIyMywKLSdhJywgMjI1LCAyMjYs ICdhJywgMjI4LCAnYScsICdhJywgMjMxLCAnZScsIDIzMywgJ2UnLCAyMzUsICdpJywgMjM3LCAn aScsICdpJywKLTI0MCwgJ24nLCAnbycsIDI0MywgMjQ0LCAnbycsIDI0NiwgMjQ3LCAnbycsICd1 JywgMjUwLCAndScsIDI1MiwgMjUzLCBVTkssICd5JwotfTsKLQotQ09OU1QgQ0hBUgoteWwyYXNb XSA9IHsJCQkJLyogTGF0aW4tMiB0byBBU0NJSSAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQs ICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAot IDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAy NywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4 LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDks ICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAg NjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3 MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgz LCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwg IDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAx MDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDEx NywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLAotVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLAotIDMyLCAnQScsIFVO SywgJ0wnLCBVTkssICdMJywgJ1MnLCBVTkssICAzNCwgJ1MnLCAnUycsICdUJywgJ1onLCAnLScs ICdaJywgJ1onLAotVU5LLCAnYScsIFVOSywgJ2wnLCAgMzksICdsJywgJ3MnLCBVTkssICA0NCwg J3MnLCAncycsICd0JywgJ3onLCBVTkssICd6JywgJ3onLAotJ1InLCAnQScsICdBJywgJ0EnLCAn QScsICdMJywgJ0MnLCAnQycsICdDJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnSScsICdJJywgJ0Qn LAotJ0QnLCAnTicsICdOJywgJ08nLCAnTycsICdPJywgJ08nLCAneCcsICdSJywgJ1UnLCAnVScs ICdVJywgJ1UnLCAnWScsICdUJywgJ3MnLAotJ3InLCAnYScsICdhJywgJ2EnLCAnYScsICdsJywg J2MnLCAnYycsICdjJywgJ2UnLCAnZScsICdlJywgJ2UnLCAnaScsICdpJywgJ2QnLAotJ2QnLCAn bicsICduJywgJ28nLCAnbycsICdvJywgJ28nLCAnLycsICdyJywgJ3UnLCAndScsICd1JywgJ3Un LCAneScsICd0JywgJy4nCi19OwotI2VuZGlmIC8qIExBVElOMiAqLwotCi0jaWZkZWYgSEVCUkVX Ci0vKgotICA4LWJpdCBUYWJsZXMgcHJvdmlkaW5nIGludmVydGlibGUgdHJhbnNsYXRpb24gYmV0 d2VlbiBMYXRpbi9IZWJyZXcgYW5kIENQODYyLgotKi8KLUNPTlNUIENIQVIKLXk2MmxoW10gPSB7 ICAvKiBQQyBDb2RlIFBhZ2UgODYyIHRvIElTTyA4ODU5LTggTGF0aW4vSGVicmV3ICovCi0gIDAs ICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAg MTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAy MywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0 LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwg IDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAg NTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2 OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzks Ci0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwg IDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAx MDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDEx MywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQs IDEyNSwgMTI2LCAxMjcsCi0yMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwg MjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksCi0yNDAsIDI0MSwgMjQyLCAy NDMsIDI0NCwgMjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMTYyLCAxNjMsIDE2NSwgMTI4 LCAxMjksCi0xMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzks IDE3MiwgMTg5LCAxODgsIDE0MCwgMTcxLCAxODcsCi0xNDEsIDE0MiwgMTQzLCAxNDQsIDE0NSwg MTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsCi0x NTcsIDE1OCwgMTU5LCAxNjEsIDE2NCwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MywgMTc0 LCAxNzUsIDIyMywgMTc5LCAxODAsCi0xODIsIDE4NCwgMTg1LCAxOTAsIDE5MSwgMTkyLCAxOTMs IDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsCi0yMDMsIDIwNCwg MjA1LCAyMDYsIDIwNywgMjA4LCAxODEsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIx NSwgMjE2LCAyMTcsCi0yMTgsIDE3NywgMjE5LCAyMjAsIDIyMSwgMjIyLCAxODYsIDI1MSwgMTc2 LCAxODMsIDI1MiwgMjUzLCAyNTQsIDE3OCwgMjU1LCAxNjAKLX07Ci0KLUNPTlNUIENIQVIKLXls aDYyW10gPSB7ICAvKiBJU08gODg1OS04IExhdGluL0hlYnJldyB0byBQQyBDb2RlIFBhZ2UgODYy ICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAx MCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIx LCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIs ICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAg NDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1 NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2 LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3Nywg IDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAg ODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEw MCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEs Ci0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwg MTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xNTgsIDE1OSwgMTYwLCAxNjEsIDE2MiwgMTYzLCAx NjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzMsIDE3NiwgMTc3LCAxNzgsCi0xNzksIDE4 MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEs IDE5MiwgMTkzLCAxOTQsCi0yNTUsIDE5NSwgMTU1LCAxNTYsIDE5NiwgMTU3LCAxOTcsIDE5OCwg MTk5LCAyMDAsIDIwMSwgMTc0LCAxNzAsIDIwMiwgMjAzLCAyMDQsCi0yNDgsIDI0MSwgMjUzLCAy MDYsIDIwNywgMjMwLCAyMDgsIDI0OSwgMjA5LCAyMTAsIDI0NiwgMTc1LCAxNzIsIDE3MSwgMjEx LCAyMTIsCi0yMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCAyMjIs IDIyMywgMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsCi0yMjksIDIzMSwgMjMyLCAyMzMsIDIzNCwg MjM1LCAyMzYsIDIzNywgMjM4LCAyMzksIDI0MCwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAyMDUsCi0x MjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5 LCAxNDAsIDE0MSwgMTQyLCAxNDMsCi0xNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAs IDE1MSwgMTUyLCAxNTMsIDE1NCwgMjQ3LCAyNTAsIDI1MSwgMjUyLCAyNTQKLX07Ci0vKgotICA3 LWJpdCB0YWJsZSBwcm92aWRpbmcgcmVhZGFibGUgdHJhbnNsYXRpb24gZnJvbSBERUMgSGVicmV3 LTcgdG8gQ1A4NjIuCi0qLwotQ09OU1QgQ0hBUgoteWg3NjJbXSA9IHsKLSAgMCwgICAxLCAgIDIs ICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAg MTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAy NSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2 LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywK LSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAg NTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3 MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgx LCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5Miwg IDkzLCAgOTQsICA5NSwKLVVOSywgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAg NzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4 MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAxMjMsIDEyNCwgMTI1LCAxMjYs IDEyNwotfTsKLS8qCi0gIDgtYml0IHRhYmxlIHByb3ZpZGluZyByZWFkYWJsZSB0cmFuc2xhdGlv biBmcm9tIENQODYyIHRvIEhlYnJldy03LgotKi8KLUNPTlNUIENIQVIKLXk2Mmg3W10gPSB7ICAv KiBQQyBDb2RlIFBhZ2UgODYyIHRvIEhlYnJldy03ICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAg NCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUs Ci0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwg IDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAg MzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0 OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAs ICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwg IDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAg ODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0 LCAgOTUsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMs ICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwg IDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0g OTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3 LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgs IDExOSwgMTIwLCAxMjEsIDEyMiwgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCi1VTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssCi1VTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCi1VTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssCi1VTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCi1VTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCi1VTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTksKLX07Ci0vKgotICA3LWJpdCB0YWJsZSBwcm92aWRpbmcgcmVhZGFi bGUgdHJhbnNsYXRpb24gZnJvbSBIZWJyZXctNyB0byBJU08gTGF0aW4vSGVicmV3LgotKi8KLUNP TlNUIENIQVIKLXloN2xoW10gPSB7Ci0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYs ICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywg IDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAy OSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQw LCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEs ICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAg NjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3 NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1 LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0yMDgs IDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAy MjAsIDIyMSwgMjIyLCAyMjMsCi0yMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIz MSwgMjMyLCAyMzMsIDIzNCwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcKLX07Ci0vKgotICA4LWJp dCB0YWJsZSBwcm92aWRpbmcgcmVhZGFibGUgdHJhbnNsYXRpb24gZnJvbSBJU08gTGF0aW4vSGVi cmV3IHRvIEhlYnJldy03LgotKi8KLUNPTlNUIENIQVIKLXlsaGg3W10gPSB7ICAvKiBMYXRpbi9I ZWJyZXcgdG8gSGVicmV3LTcgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwg ICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAg MTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5 LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAs ICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwg IDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2 MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0 LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUs ICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA2NCwg IDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3 NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3 LCAgODgsICA4OSwgIDkwLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLVVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywKLVVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKLVVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywK LVVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywKLVVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKLVVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAx MDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDEx NSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSwotfTsKLSNlbmRpZiAvKiBIRUJSRVcgKi8KLQotI2lmZGVmIEdSRUVLCi0vKgotICA4LWJp dCBUYWJsZXMgcHJvdmlkaW5nIGludmVydGlibGUgdHJhbnNsYXRpb24gYmV0d2VlbiBMYXRpbi9H cmVlayBhbmQgQ1A4NjkuCi0qLwotQ09OU1QgQ0hBUgoteWxnNjlbXSA9IHsgIC8qIElTTyA4ODU5 LTcgTGF0aW4vR3JlZWsgdG8gUEMgQ29kZSBQYWdlIDg2OSAqLwotICAwLCAgIDEsICAgMiwgICAz LCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwg IDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAg MjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAz NywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4 LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwg IDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAg NzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4 MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMs ICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwg MTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAx MTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3 LAotMTM1LCAxNDcsIDE0OCwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4NSwgMTg2LCAxODcs IDE4OCwgMTkxLCAxOTIsIDE5MywgMTk0LAotMTk1LCAxOTYsIDE5NywgMjAwLCAyMDEsIDIwMiwg MjAzLCAyMDQsIDIwNSwgMjA2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMywgMjU0LAotMjU1LCAx MzksIDE0MCwgMTU2LCAxMjgsIDEyOSwgMTM4LCAyNDUsIDI0OSwgMTUxLCAxMzAsIDE3NCwgMTM3 LCAyNDAsIDEzMSwgMTQyLAotMjQ4LCAyNDEsIDE1MywgMTU0LCAyMzksIDI0NywgMTM0LCAxMzYs IDE0MSwgMTQzLCAxNDQsIDE3NSwgMTQ2LCAxNzEsIDE0OSwgMTUyLAotMTYxLCAxNjQsIDE2NSwg MTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MiwgMTczLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4 OSwgMTkwLAotMTk4LCAxOTksIDEzMiwgMjA3LCAyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEz LCAxNDUsIDE1MCwgMTU1LCAxNTcsIDE1OCwgMTU5LAotMjUyLCAyMTQsIDIxNSwgMjE2LCAyMjEs IDIyMiwgMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMwLCAyMzEsIDIzMiwgMjMzLAot MjM0LCAyMzUsIDIzNywgMjM2LCAyMzgsIDI0MiwgMjQzLCAyNDQsIDI0NiwgMjUwLCAxNjAsIDI1 MSwgMTYyLCAxNjMsIDI1MywgMTMzCi19OwotCi1DT05TVCBDSEFSCi15NjlsZ1tdID0geyAgLyog UEMgQ29kZSBQYWdlIDg2OSB0byBJU08gODg1OS03IExhdGluL0dyZWVrICovCi0gIDAsICAgMSwg ICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAx MywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0 LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUs ICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAg NDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1 OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5 LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAs ICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAg OTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEw MywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0 LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwg MTI2LCAxMjcsCi0xNjQsIDE2NSwgMTcwLCAxNzQsIDIxMCwgMjU1LCAxODIsIDEyOCwgMTgzLCAx NzIsIDE2NiwgMTYxLCAxNjIsIDE4NCwgMTc1LCAxODUsCi0xODYsIDIxOCwgMTg4LCAxMjksIDEz MCwgMTkwLCAyMTksIDE2OSwgMTkxLCAxNzgsIDE3OSwgMjIwLCAxNjMsIDIyMSwgMjIyLCAyMjMs Ci0yNTAsIDE5MiwgMjUyLCAyNTMsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwg MTg5LCAyMDAsIDIwMSwgMTcxLCAxODcsCi0xMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMjAyLCAy MDMsIDIwNCwgMjA1LCAxMzYsIDEzNywgMTM4LCAxMzksIDIwNiwgMjA3LCAxNDAsCi0xNDEsIDE0 MiwgMTQzLCAxNDQsIDE0NSwgMTQ2LCAyMDgsIDIwOSwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEs IDE1MiwgMTUzLCAyMTEsCi0yMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMjUsIDIyNiwg MjI3LCAxNTQsIDE1NSwgMTU2LCAxNTcsIDIyOCwgMjI5LCAxNTgsCi0yMzAsIDIzMSwgMjMyLCAy MzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksIDI0MCwgMjQxLCAyNDMsIDI0MiwgMjQ0 LCAxODAsCi0xNzMsIDE3NywgMjQ1LCAyNDYsIDI0NywgMTY3LCAyNDgsIDE4MSwgMTc2LCAxNjgs IDI0OSwgMjUxLCAyMjQsIDI1NCwgMTU5LCAxNjAKLX07Ci0vKgotICA3LWJpdCB0YWJsZSBwcm92 aWRpbmcgcmVhZGFibGUgdHJhbnNsYXRpb24gZnJvbSBFTE9UIDkyNyB0byBDUDg2OS4KLSovCi1D T05TVCBDSEFSCi15ZWc2OVtdID0gewotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2 LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcs ICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAg MjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0 MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUx LCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2Miwg IDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAg NzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4 NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2 LCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MiwgMTczLCAxODEsIDE4Miwg MTgzLCAxODQsIDE4OSwgMTkwLAotMTk4LCAxOTksIDIwNywgMjA4LCAyMDksIDIxMCwgMjExLCAy MTIsIDIxMywgIDMyLCAgMzIsICAyMywgMTI0LCAxMjUsIDEyNiwgMTI3Ci19OwotLyoKLSAgOC1i aXQgdGFibGUgcHJvdmlkaW5nIHJlYWRhYmxlIHRyYW5zbGF0aW9uIGZyb20gQ1A4NjkgdG8gRUxP VCA5MjcuCi0qLwotQ09OU1QgQ0hBUgoteTY5ZWdbXSA9IHsgIC8qIFBDIENvZGUgUGFnZSA4Njkg dG8gRUxPVCA5MjcgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAg IDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAx OSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAs ICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwg IDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAg NTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2 NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUs ICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4Niwg IDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDY1LCAg NjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3 LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgs ICA4OSwgIDkwLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLVVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssICA5NywgVU5LLCAgNDYsIFVOSywgMTI0LCAgMzksICAzOSwgMTAxLCAgNDUsIDEw MywKLTEwNSwgMTA1LCAxMTEsIFVOSywgVU5LLCAxMTYsIDExNiwgVU5LLCAxMjAsICA1MCwgIDUx LCAgOTcsIFVOSywgMTAxLCAxMDMsIDEwNSwKLTEwNSwgMTA1LCAxMTEsIDExNiwgIDk3LCAgOTgs ICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCBVTkssIDEwNCwgMTA1LCAgMzQsICAzNCwKLVVOSywg VU5LLCBVTkssIFVOSywgVU5LLCAxMDYsIDEwNywgMTA4LCAxMDksIFVOSywgVU5LLCBVTkssIFVO SywgMTEwLCAxMTEsIFVOSywKLVVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIDExMiwgMTEz LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIDExNCwKLTExNSwgMTE2LCAxMTcs IDExOCwgMTE5LCAxMjAsICA5NywgIDk4LCAgOTksIFVOSywgVU5LLCBVTkssIFVOSywgMTAwLCAx MDEsIFVOSywKLTEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDEx MSwgMTEyLCAxMTMsIDExNCwgMTE0LCAxMTUsICAzOSwKLSA0NSwgVU5LLCAxMTYsIDExNywgMTE4 LCBVTkssIDExOSwgVU5LLCBVTkssIFVOSywgMTIwLCAxMTYsIDExNiwgMTIwLCBVTkssICAzMgot Ci19OwotLyoKLSAgNy1iaXQgdGFibGUgcHJvdmlkaW5nIHJlYWRhYmxlIHRyYW5zbGF0aW9uIGZy b20gRUxPVCA5MjcgdG8gSVNPIExhdGluL0dyZWVrLgotKi8KLUNPTlNUIENIQVIKLXllZ2xnW10g PSB7Ci0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAx MCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIx LCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIs ICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAg NDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1 NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2 LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3Nywg IDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAg ODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsIDE5MywgMTk0LCAxOTUsIDE5 NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcs Ci0yMDgsIDIwOSwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAgMzIsICAzMiwg MTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcKLX07Ci0vKgotICA4LWJpdCB0YWJsZSBwcm92aWRpbmcg cmVhZGFibGUgdHJhbnNsYXRpb24gZnJvbSBJU08gTGF0aW4vR3JlZWsgdG8gRUxPVCA5MjcuCi0q LwotQ09OU1QgQ0hBUgoteWxnZWdbXSA9IHsgIC8qIExhdGluL0dyZWVrIHRvIEVMT1QgOTI3ICov Ci0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwg IDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAg MjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAz MywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQs ICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwg IDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAg NjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4 LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODks ICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA2NSwgIDY2LCAgNjcsICA2OCwg IDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0g ODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgMTIz LCAxMjQsIDEyNSwgMTI2LCAxMjcsCi1VTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCi1VTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssCi0gMzIsICAzOSwgIDM5LCBVTkssIFVOSywgVU5LLCAxMjQsIFVOSywgIDM0 LCBVTkssIFVOSywgIDM0LCBVTkssICA0NSwgVU5LLCAgNDUsCi1VTkssIFVOSywgIDUwLCAgNTEs ICAzOSwgVU5LLCAgOTcsICA0NiwgMTAxLCAxMDMsIDEwNSwgIDM0LCAxMTEsIFVOSywgMTE2LCAx MjAsCi1VTkssICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEw NiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgVU5LLCAxMTQsIDExNSwgMTE2 LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEwNSwgMTE2LCAgOTcsIDEwMSwgMTAzLCAxMDUsCi0xMTYs ICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAx MDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTQsIDExNSwgMTE2LCAxMTcsIDEx OCwgMTE5LCAxMjAsIDEwNSwgMTE2LCAxMTEsIDExNiwgMTIwLCBVTksKLX07Ci0jZW5kaWYgLyog R1JFRUsgKi8KLQotLyogVHJhbnNsYXRpb24gZnVuY3Rpb25zIC4uLiAqLwotCi1DSEFSCQkJCQkv KiBUaGUgaWRlbnRpdHkgZnVuY3Rpb24uLi4gKi8KLSNpZmRlZiBDS19BTlNJQwotaWRlbnQoQ0hB UiBjKQkJCQkvKiAobm8gbG9uZ2VyIHVzZWQpICovCi0jZWxzZQotaWRlbnQoYykgQ0hBUiBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIGlkZW50ICovCi0gICAgcmV0dXJuKGMpOwkJCQkv KiBJbnN0ZWFkLCBlbnRlciBOVUxMIGluIHRoZSAgKi8KLX0JCQkJCS8qIHRhYmxlIG9mIGZ1bmN0 aW9ucyB0byBhdm9pZCAqLwotCQkJCQkvKiBuZWVkbGVzcyBmdW5jdGlvbiBjYWxscy4gICAgKi8K LQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bGVmdDEyOChDSEFSIGMpCi0jZWxzZQoteGxlZnQx MjgoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsZWZ0MTI4ICovCi0g ICAgcmV0dXJuKChjIDwgMTI4KSA/IGMgOiAnPycpOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5T SUMKLXhsZWZ0MTYwKENIQVIgYykKLSNlbHNlCi14bGVmdDE2MChjKSBDSEFSIGM7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsgLyogeGxlZnQxNjAgKi8KLSAgICByZXR1cm4oKGMgPCAxNjApID8g YyA6ICc/Jyk7Ci19Ci0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDFhcyhDSEFSIGMpCi0j ZWxzZQoteGwxYXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMWFz ICovIAkJCQkvKiBMYXRpbi0xIHRvIFVTIEFTQ0lJLi4uICovCi0gICAgc3dpdGNoKGxhbmdzW2xh bmd1YWdlXS5pZCkgewotCi0gICAgICBjYXNlIExfRFVUQ0g6Ci0JaWYgKGMgPT0gMjU1KSB7CQkJ LyogRHV0Y2ggdW1sYXV0LXkgKi8KLQkgICAgem1zdHVmZignaicpOwkJLyogYmVjb21lcyBpaiAq LwotCSAgICByZXR1cm4oJ2knKTsKLQl9IGVsc2UgcmV0dXJuKHlsMWFzW2NdKTsJLyogYWxsIG90 aGVycyBieSB0aGUgYm9vayAqLwotCi0gICAgICBjYXNlIExfR0VSTUFOOgotCXN3aXRjaCAoYykg ewkJCS8qIEdlcm1hbiwgc3BlY2lhbCBydWxlcy4gKi8KLQkgIGNhc2UgMTk2OgkJCS8qIHVtbGF1 dC1BIC0+IEFlICovCi0JICAgIHptc3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCdBJyk7Ci0JICBj YXNlIDIxNDoJCQkvKiB1bWxhdXQtTyAtPiBPZSAqLwotCSAgICB6bXN0dWZmKCdlJyk7Ci0JICAg IHJldHVybignTycpOwotCSAgY2FzZSAyMjA6CQkJLyogdW1sYXV0LVUgLT4gVWUgKi8KLQkgICAg em1zdHVmZignZScpOwotCSAgICByZXR1cm4oJ1UnKTsKLQkgIGNhc2UgMjI4OgkJCS8qIHVtbGF1 dC1hIC0+IGFlICovCi0JICAgIHptc3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCdhJyk7Ci0JICBj YXNlIDI0NjoJCQkvKiB1bWxhdXQtbyAtPiBvZSAqLwotCSAgICB6bXN0dWZmKCdlJyk7Ci0JICAg IHJldHVybignbycpOwotCSAgY2FzZSAyNTI6CQkJLyogdW1sYXV0LXUgLT4gdWUgKi8KLQkgICAg em1zdHVmZignZScpOwotCSAgICByZXR1cm4oJ3UnKTsKLQkgIGNhc2UgMjIzOgkJCS8qIGVzcy16 ZXQgLT4gc3MgKi8KLQkgICAgem1zdHVmZigncycpOwotCSAgICByZXR1cm4oJ3MnKTsKLQkgIGRl ZmF1bHQ6IHJldHVybih5bDFhc1tjXSk7CS8qIGFsbCBvdGhlcnMgYnkgdGhlIGJvb2sgKi8KLQl9 Ci0gICAgICBjYXNlIExfREFOSVNIOgotICAgICAgY2FzZSBMX0ZJTk5JU0g6Ci0gICAgICBjYXNl IExfTk9SV0VHSUFOOgotICAgICAgY2FzZSBMX1NXRURJU0g6Ci0Jc3dpdGNoIChjKSB7CQkJLyog U2NhbmRhbmF2aWFuIGxhbmd1YWdlcy4gKi8KLQkgIGNhc2UgMTk2OgkJCS8qIHVtbGF1dC1BIC0+ IEFlICovCi0gICAgICAgICAgY2FzZSAxOTg6CQkJLyogQUUgbGlnYXR1cmUgYWxzbyAtPiBBZSAq LwotCSAgICB6bXN0dWZmKCdlJyk7Ci0JICAgIHJldHVybignQScpOwotCSAgY2FzZSAyMTQ6CQkJ LyogdW1sYXV0LU8gLT4gT2UgKi8KLQkgIGNhc2UgMjE2OgkJCS8qIE8tc2xhc2ggLT4gT2UgKi8K LQkgICAgem1zdHVmZignZScpOwotCSAgICByZXR1cm4oJ08nKTsKLQkgIGNhc2UgMjIwOgkJCS8q IHVtbGF1dC1VIC0+IFVlICovCi0JICAvKiAgcmV0dXJuKCdZJyk7IHJlcGxhY2VkIGJ5ICJVZSIg YnkgcG9wdWxhciBkZW1hbmQuICovCi0gICAgICAgICAgLyogIFkgZm9yIFVtbGF1dC1VIGlzIG9u bHkgdXNlZCBpbiBHZXJtYW4gbmFtZXMuICovCi0JICAgIHptc3R1ZmYoJ2UnKTsKLQkgICAgcmV0 dXJuKCdVJyk7Ci0JICBjYXNlIDIyODoJCQkvKiB1bWxhdXQtYSAtPiBhZSAqLwotICAgICAgICAg IGNhc2UgMjMwOgkJCS8qIGRpdHRvIGZvciBhZSBsaWdhdHVyZSAqLwotCSAgICB6bXN0dWZmKCdl Jyk7Ci0JICAgIHJldHVybignYScpOwotCSAgY2FzZSAyNDY6CQkJLyogdW1sYXV0LW8gLT4gb2Ug Ki8KLQkgIGNhc2UgMjQ4OgkJCS8qIG8tc2xhc2ggLT4gb2UgKi8KLQkgICAgem1zdHVmZignZScp OwotCSAgICByZXR1cm4oJ28nKTsKLQkgIGNhc2UgMjUyOgkJCS8qIHVtbGF1dC11IC0+IHVlICov Ci0JICAvKiAgcmV0dXJuKCd5Jyk7IHJlcGxhY2VkIGJ5ICJ1ZSIgYnkgcG9wdWxhciBkZW1hbmQu ICovCi0JICAgIHptc3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCd1Jyk7Ci0JICBjYXNlIDE5NzoJ CQkvKiBBLXJpbmcgLT4gQWEgKi8KLQkgICAgem1zdHVmZignYScpOwotCSAgICByZXR1cm4oJ0En KTsKLSAgICAgICAgICBjYXNlIDIyOToJCQkvKiBhLXJpbmcgLT4gYWEgKi8KLQkgICAgem1zdHVm ZignYScpOwotCSAgICByZXR1cm4oJ2EnKTsKLQkgIGRlZmF1bHQ6IHJldHVybih5bDFhc1tjXSk7 CS8qIEFsbCBvdGhlcnMgYnkgdGhlIGJvb2sgKi8KLQl9Ci0gICAgICBjYXNlIExfSUNFTEFORElD OgkJCS8qIEljZWxhbmRpYy4gKi8KLQlzd2l0Y2ggKGMpIHsKLQkgIGNhc2UgMTk4OgkJCS8qIHVw cGVyY2FzZSBBRSAtPiBBRSAqLwotCSAgICB6bXN0dWZmKCdlJyk7Ci0JICAgIHJldHVybignQScp OwotCSAgY2FzZSAyMDg6CQkJLyogdXBwZXJjYXNlIEV0aCAtPiBEICovCi0JICAgIHJldHVybign RCcpOwotCSAgY2FzZSAyMTQ6CQkJLyogdXBwZXJjYXNlIE8tZGlhZXJlc2lzIC0+IE9lICovCi0J ICAgIHptc3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCdPJyk7Ci0JICBjYXNlIDIyMjoJCQkvKiB1 cHBlcmNhc2UgVGhvcm4gLT4gVGggKi8KLQkgICAgem1zdHVmZignaCcpOwotCSAgICByZXR1cm4o J1QnKTsKLQkgIGNhc2UgMjMwOgkJCS8qIGxvd2VyY2FzZSBhZSAtPiBhZSAqLwotCSAgICB6bXN0 dWZmKCdlJyk7Ci0JICAgIHJldHVybignYScpOwotCSAgY2FzZSAyNDA6CQkJLyogbG93ZXJjYXNl IEV0aCAtPiBkICovCi0JICAgIHJldHVybignZCcpOwotCSAgY2FzZSAyNDY6CQkJLyogbG93ZXJj YXNlIE8tZGlhZXJlc2lzIC0+IG9lICovCi0JICAgIHptc3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJu KCdvJyk7Ci0JICBjYXNlIDI1NDoJCQkvKiBsb3dlcmNhc2UgVGhvcm4gLT4gdGggKi8KLQkgICAg em1zdHVmZignaCcpOwotCSAgICByZXR1cm4oJ3QnKTsKLQkgIGRlZmF1bHQ6IHJldHVybih5bDFh c1tjXSk7CS8qIEFsbCBvdGhlcnMgYnkgdGhlIGJvb2sgKi8KLQl9Ci0gICAgICBkZWZhdWx0Ogot CXJldHVybih5bDFhc1tjXSk7CQkvKiBOb25lIG9mIHRoZSBhYm92ZSwgYnkgdGhlIHRhYmxlLiAq LwotICAgIH0KLX0KLQotQ0hBUgkJCQkJLyogQ1AxMjUyIHRvIEFTQ0lJICovCi0jaWZkZWYgQ0tf QU5TSUMKLXh3MWFzKENIQVIgYykKLSNlbHNlCi14dzFhcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsgLyogeHcxYXMgKi8KLSAgICBzd2l0Y2goYykgewkJCQkvKiBNaWNyb3Nv ZnQgbmFtZS4uLiAqLwotICAgICAgY2FzZSAweDgwOiByZXR1cm4oJz8nKTsJCS8qIEV1cm8gU2ln biAqLwotICAgICAgY2FzZSAweDgyOiByZXR1cm4oJ1wwNDcnKTsJLyogU2luZ2xlIExvdy05IFF1 b3RhdGlvbiBNYXJrICovCi0gICAgICBjYXNlIDB4ODM6IHJldHVybignZicpOwkJLyogTGF0aW4g U21hbGwgTGV0dGVyIGYgd2l0aCBIb29rICovCi0gICAgICBjYXNlIDB4ODQ6IHJldHVybignIicp OwkJLyogRG91YmxlIGxvdy05IFF1b3RhdGlvbiBNYXJrICovCi0gICAgICBjYXNlIDB4ODU6IHJl dHVybignLScpOwkJLyogSG9yaXpvbnRhbCBFbGxpcHNpcyAqLwotICAgICAgY2FzZSAweDg2OiBy ZXR1cm4oJysnKTsJCS8qIERhZ2dlciAqLwotICAgICAgY2FzZSAweDg3OiByZXR1cm4oJysnKTsJ CS8qIERvdWJsZSBEYWdnZXIgKi8KLSAgICAgIGNhc2UgMHg4ODogcmV0dXJuKCdeJyk7CQkvKiBN b2RpZmllciBMZXR0ZXIgQ2lyY3VtZmxleCBBY2NlbnQgKi8KLSAgICAgIGNhc2UgMHg4OTogcmV0 dXJuKCc/Jyk7CQkvKiBQZXIgTWlsbGUgU2lnbiAqLwotICAgICAgY2FzZSAweDhBOiByZXR1cm4o J1MnKTsJCS8qIExhdGluIENhcGl0YWwgTGV0dGVyIFMgd2l0aCBDYXJvbiAqLwotICAgICAgY2Fz ZSAweDhCOiByZXR1cm4oJzwnKTsJCS8qIFNpbmdsZSBMZWZ0IEFuZ2xlIFF1b3RhdGlvbiBNYXJr ICovCi0gICAgICBjYXNlIDB4OEM6IHJldHVybignTycpOwkJLyogTGF0aW4gQ2FwaXRhbCBMaWdh dHVyZSBPRSAqLwotICAgICAgY2FzZSAweDhFOiByZXR1cm4oJ1onKTsJCS8qIExhdGluIENhcGl0 YWwgTGV0dGVyIFogd2l0aCBDYXJvbiAqLwotICAgICAgY2FzZSAweDkxOiByZXR1cm4oJ1wwNDcn KTsJLyogTGVmdCBTaW5nbGUgUXVvdGF0aW9uIE1hcmsgKi8KLSAgICAgIGNhc2UgMHg5MjogcmV0 dXJuKCdcMDQ3Jyk7CS8qIFJpZ2h0IFNpbmdsZSBRdW90YXRpb24gTWFyayAqLwotICAgICAgY2Fz ZSAweDkzOiByZXR1cm4oJyInKTsJCS8qIExlZnQgRG91YmxlIFF1b3RhdGlvbiBNYXJrICovCi0g ICAgICBjYXNlIDB4OTQ6IHJldHVybignIicpOwkJLyogUmlnaHQgRG91YmxlIFF1b3RhdGlvbiBN YXJrICovCi0gICAgICBjYXNlIDB4OTU6IHJldHVybignLicpOwkJLyogQnVsbGV0ICovCi0gICAg ICBjYXNlIDB4OTY6IHJldHVybignLScpOwkJLyogRW4gRGFzaCAqLwotICAgICAgY2FzZSAweDk3 OiByZXR1cm4oJy0nKTsJCS8qIEVtIERhc2ggKi8KLSAgICAgIGNhc2UgMHg5ODogcmV0dXJuKCd+ Jyk7CQkvKiBTbWFsbCBUaWxkZSAqLwotICAgICAgY2FzZSAweDk5OiByZXR1cm4oJ1QnKTsJCS8q IFRyYWRlIE1hcmsgU2lnbiAqLwotICAgICAgY2FzZSAweDlBOiByZXR1cm4oJ3MnKTsJCS8qIExh dGluIFNtYWxsIExldHRlciBzIHdpdGggQ2Fyb24gKi8KLSAgICAgIGNhc2UgMHg5QjogcmV0dXJu KCc+Jyk7CQkvKiBTaW5nbGUgUmlnaHQgQW5nbGUgUXVvdGF0aW9uIE1hcmsgKi8KLSAgICAgIGNh c2UgMHg5QzogcmV0dXJuKCdvJyk7CQkvKiBMYXRpbiBTbWFsbCBMaWdhdHVyZSBPRSAqLwotICAg ICAgY2FzZSAweDlFOiByZXR1cm4oJ3onKTsJCS8qIExhdGluIFNtYWxsIExldHRlciB6IHdpdGgg Q2Fyb24gKi8KLSAgICAgIGNhc2UgMHg5RjogcmV0dXJuKCdZJyk7CQkvKiBMYXRpbiBDYXBpdGFs IExldHRlciBZIERpYWVyZXNpcyAqLwotICAgICAgZGVmYXVsdDoKLQlpZiAoYyA+IDB4ODAgJiYg YyA8IDB4YTApCi0JICByZXR1cm4oJz8nKTsKLQllbHNlCi0JICByZXR1cm4oeWwxYXNbY10pOwot ICAgIH0KLX0KLQotQ0hBUgkJCQkJLyogQ1AxMjUyIHRvIExhdGluLTEgKi8KLSNpZmRlZiBDS19B TlNJQwoteHcxbDEoQ0hBUiBjKQotI2Vsc2UKLXh3MWwxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwoteyAvKiB4dzFsMSAqLwotICAgIGlmIChjID09IDB4OTUpIHJldHVybigweGI3 KTsJLyogTWlkZGxlIGRvdCAqLwotICAgIHJldHVybigoYyA8IDE2MCkgPyB4dzFhcyhjKSA6IGMp OwotfQotCi1DSEFSCQkJCQkvKiBMYXRpbi0xIHRvIEdlcm1hbiAqLwotI2lmZGVmIENLX0FOU0lD Ci14bDFnZShDSEFSIGMpCi0jZWxzZQoteGwxZ2UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17IC8qIHhsMWdlICovCi0gICAgcmV0dXJuKHlsMWdlW2NdKTsKLX0KLQotQ0hBUgkJ CQkJLyogR2VybWFuIHRvIExhdGluLTEgKi8KLSNpZmRlZiBDS19BTlNJQwoteGdlbDEoQ0hBUiBj KQotI2Vsc2UKLXhnZWwxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4 Z2VsMSAqLwotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIHJldHVy bih5Z2VsMVtjXSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGdlYXMoQ0hBUiBjKQot I2Vsc2UKLXhnZWFzKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4Z2Vh cyAqLwkJCQkvKiBHZXJtYW4gSVNPIDY0NiB0byBBU0NJSSAqLwotICAgIGlmIChjICYgMHg4MCkK LSAgICAgIHJldHVybihVTkspOwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSA5MToJCQkJ LyogdW1sYXV0LUEgLT4gQWUgKi8KLQl6bXN0dWZmKCdlJyk7Ci0JcmV0dXJuKCdBJyk7Ci0gICAg ICBjYXNlIDkyOgkJCQkvKiB1bWxhdXQtTyAtPiBPZSAqLwotCXptc3R1ZmYoJ2UnKTsKLQlyZXR1 cm4oJ08nKTsKLSAgICAgIGNhc2UgOTM6CQkJCS8qIHVtbGF1dC1VIC0+IFVlICovCi0Jem1zdHVm ZignZScpOwotCXJldHVybignVScpOwotICAgICAgY2FzZSAxMjM6CQkJCS8qIHVtbGF1dC1hIC0+ IGFlICovCi0Jem1zdHVmZignZScpOwotCXJldHVybignYScpOwotICAgICAgY2FzZSAxMjQ6CQkJ CS8qIHVtbGF1dC1vIC0+IG9lICovCi0Jem1zdHVmZignZScpOwotCXJldHVybignbycpOwotICAg ICAgY2FzZSAxMjU6CQkJCS8qIHVtbGF1dC11IC0+IHVlICovCi0Jem1zdHVmZignZScpOwotCXJl dHVybigndScpOwotICAgICAgY2FzZSAxMjY6CQkJCS8qIGVzcy16ZXQgLT4gc3MgKi8KLQl6bXN0 dWZmKCdzJyk7Ci0JcmV0dXJuKCdzJyk7Ci0gICAgICBkZWZhdWx0OiAgcmV0dXJuKGMpOwkJLyog YWxsIG90aGVycyBzdGF5IHRoZSBzYW1lICovCi0gICAgfQotfQotCi1DSEFSCi0jaWZkZWYgQ0tf QU5TSUMKLXhsMXcxKENIQVIgYykKLSNlbHNlCi14bDF3MShjKSBDSEFSIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsgLyogeGwxdzEgKi8JCQkJLyogTGF0aW4tMSB0byBDUDEyNTIgKFdpbmRv d3MgTDEpICovCi0gICAgaWYgKGMgPiAxMjcgJiYgYyA8IDE2MCkKLSAgICAgIHJldHVybihVTksp OwotICAgIGVsc2UKLSAgICAgIHJldHVybihjKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lD Ci14ZHVhcyhDSEFSIGMpCi0jZWxzZQoteGR1YXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17IC8qIHhkdWFzICovCQkJCS8qIER1dGNoIElTTyA2NDYgdG8gVVMgQVNDSUkgKi8K LSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBzd2l0Y2ggKGMpIHsK LSAgICAgIGNhc2UgNjQ6ICByZXR1cm4oVU5LKTsJCS8qIDMvNCAqLwotICAgICAgY2FzZSA5MToJ CQkJLyogeS1kaWFlcmVzaXMgKi8KLQl6bXN0dWZmKCdqJyk7Ci0JcmV0dXJuKCdpJyk7Ci0gICAg ICBjYXNlIDkyOiAgcmV0dXJuKFVOSyk7CQkvKiAxLzIgKi8KLSAgICAgIGNhc2UgOTM6ICByZXR1 cm4oMTI0KTsJCS8qIHZlcnRpY2FsIGJhciAqLwotICAgICAgY2FzZSAxMjM6IHJldHVybigzNCk7 CQkvKiBkaWFlcmVzaXMgKi8KLSAgICAgIGNhc2UgMTI0OiByZXR1cm4oVU5LKTsJCS8qIEZsb3Jp biAqLwotICAgICAgY2FzZSAxMjU6IHJldHVybihVTkspOwkJLyogMS80ICovCi0gICAgICBjYXNl IDEyNjogcmV0dXJuKDM5KTsJCS8qIEFwb3N0cm9waGUgKi8KLSAgICAgIGRlZmF1bHQ6ICByZXR1 cm4oYyk7Ci0gICAgfQotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhmaWFzKENIQVIgYykK LSNlbHNlCi14ZmlhcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGZp YXMgKi8JCQkJLyogRmlubmlzaCBJU08gNjQ2IHRvIFVTIEFTQ0lJICovCi0gICAgaWYgKGMgJiAw eDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDkx OgkJCQkvKiBBLWRpYWVyZXNpcyAqLwotCXptc3R1ZmYoJ2UnKTsKLQlyZXR1cm4oJ0EnKTsKLSAg ICAgIGNhc2UgOTI6CQkJCS8qIE8tZGlhZXJlc2lzICovCi0Jem1zdHVmZignZScpOwotCXJldHVy bignTycpOwotICAgICAgY2FzZSA5MzoJCQkJLyogQS1yaW5nICovCi0Jem1zdHVmZignYScpOwot CXJldHVybignQScpOwotICAgICAgY2FzZSA5NDoJCQkJLyogVS1kaWFlcmVzaXMgKi8KLQkvKiBy ZXR1cm4oJ1knKTsgKi8KLQl6bXN0dWZmKCdlJyk7Ci0JcmV0dXJuKCdVJyk7Ci0gICAgICBjYXNl IDk2OgkJCQkvKiBlLWFjdXRlICovCi0JcmV0dXJuKCdlJyk7Ci0gICAgICBjYXNlIDEyMzoJCQkJ LyogYS1kaWFlcmVzaXMgKi8KLQl6bXN0dWZmKCdlJyk7Ci0JcmV0dXJuKCdhJyk7Ci0gICAgICBj YXNlIDEyNDoJCQkJLyogby1kaWFlcmVzaXMgKi8KLQl6bXN0dWZmKCdlJyk7Ci0JcmV0dXJuKCdv Jyk7Ci0gICAgICBjYXNlIDEyNToJCQkJLyogYS1yaW5nICovCi0Jem1zdHVmZignYScpOwotCXJl dHVybignYScpOwotICAgICAgY2FzZSAxMjY6CQkJCS8qIHUtZGlhZXJlc2lzICovCi0JLyogcmV0 dXJuKCd5Jyk7ICovCi0Jem1zdHVmZignZScpOwotCXJldHVybignVScpOwotICAgICAgZGVmYXVs dDoKLQlyZXR1cm4oYyk7Ci0gICAgfQotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhmcmFz KENIQVIgYykKLSNlbHNlCi14ZnJhcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsgLyogeGZyYXMgKi8JCQkJLyogRnJlbmNoIElTTyA2NDYgdG8gVVMgQVNDSUkgKi8KLSAgICBp ZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAg IGNhc2UgNjQ6ICByZXR1cm4oOTcpOwkJLyogYSBncmF2ZSAqLwotICAgICAgY2FzZSA5MTogIHJl dHVybihVTkspOwkJLyogZGVncmVlIHNpZ24gKi8KLSAgICAgIGNhc2UgOTI6ICByZXR1cm4oOTkp OwkJLyogYyBjZWRpbGxhICovCi0gICAgICBjYXNlIDkzOiAgcmV0dXJuKFVOSyk7CQkvKiBwYXJh Z3JhcGggc2lnbiAqLwotICAgICAgY2FzZSAxMjM6IHJldHVybigxMDEpOwkJLyogZSBhY3V0ZSAq LwotICAgICAgY2FzZSAxMjQ6IHJldHVybigxMTcpOwkJLyogdSBncmF2ZSAqLwotICAgICAgY2Fz ZSAxMjU6IHJldHVybigxMDEpOwkJLyogZSBncmF2ZSAqLwotICAgICAgY2FzZSAxMjY6IHJldHVy bigzNCk7CQkvKiBkaWFlcmVzaXMgKi8KLSAgICAgIGRlZmF1bHQ6ICByZXR1cm4oYyk7Ci0gICAg fQotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhmY2FzKENIQVIgYykKLSNlbHNlCi14ZmNh cyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGZjYXMgKi8JCQkJLyog RnJlbmNoIENhbmFkaWFuIElTTyA2NDYgdG8gQVNDSUkgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0g ICAgICByZXR1cm4oVU5LKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgNjQ6ICByZXR1 cm4oJ2EnKTsJCS8qIGEgZ3JhdmUgKi8KLSAgICAgIGNhc2UgOTE6ICByZXR1cm4oJ2EnKTsJCS8q IGEgY2lyY3VtZmxleCAqLwotICAgICAgY2FzZSA5MjogIHJldHVybignYycpOwkJLyogYyBjZWRp bGxhICovCi0gICAgICBjYXNlIDkzOiAgcmV0dXJuKCdlJyk7CQkvKiBlIGNpcmN1bWZsZXggKi8K LSAgICAgIGNhc2UgOTQ6ICByZXR1cm4oJ2knKTsJCS8qIGkgY2lyY3VtZmxleCAqLwotICAgICAg Y2FzZSA5NjogIHJldHVybignbycpOwkJLyogbyBjaXJjdW1mbGV4ICovCi0gICAgICBjYXNlIDEy MzogcmV0dXJuKCdlJyk7CQkvKiBlIGFjdXRlICovCi0gICAgICBjYXNlIDEyNDogcmV0dXJuKCd1 Jyk7CQkvKiB1IGdyYXZlICovCi0gICAgICBjYXNlIDEyNTogcmV0dXJuKCdlJyk7CQkvKiBlIGdy YXZlICovCi0gICAgICBjYXNlIDEyNjogcmV0dXJuKCd1Jyk7CQkvKiB1IGNpcmN1bWZsZXggKi8K LSAgICAgIGRlZmF1bHQ6ICByZXR1cm4oYyk7Ci0gICAgfQotfQotCi1DSEFSCi0jaWZkZWYgQ0tf QU5TSUMKLXhpdGFzKENIQVIgYykKLSNlbHNlCi14aXRhcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsgLyogeGl0YXMgKi8JCQkJLyogSXRhbGlhbiBJU08gNjQ2IHRvIEFTQ0lJ ICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgc3dpdGNoIChj KSB7Ci0gICAgICBjYXNlIDkxOiAgcmV0dXJuKFVOSyk7CQkvKiBkZWdyZWUgKi8KLSAgICAgIGNh c2UgOTI6ICByZXR1cm4oJ2MnKTsJCS8qIGMgY2VkaWxsYSAqLwotICAgICAgY2FzZSA5MzogIHJl dHVybignZScpOwkJLyogZSBhY3V0ZSAqLwotICAgICAgY2FzZSA5NjogIHJldHVybigndScpOwkJ LyogdSBncmF2ZSAqLwotICAgICAgY2FzZSAxMjM6IHJldHVybignYScpOwkJLyogYSBncmF2ZSAq LwotICAgICAgY2FzZSAxMjQ6IHJldHVybignbycpOwkJLyogbyBncmF2ZSAqLwotICAgICAgY2Fz ZSAxMjU6IHJldHVybignZScpOwkJLyogZSBncmF2ZSAqLwotICAgICAgY2FzZSAxMjY6IHJldHVy bignaScpOwkJLyogaSBncmF2ZSAqLwotICAgICAgZGVmYXVsdDogIHJldHVybihjKTsKLSAgICB9 Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteG5lYXMoQ0hBUiBjKQotI2Vsc2UKLXhuZWFz KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bmVhcyAqLwkJCQkvKiBO ZVhUIHRvIEFTQ0lJICovCi0gICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX0ZSRU5DSCkg eyAvKiBJZiBTRVQgTEFOR1VBR0UgRlJFTkNIICovCi0JaWYgKGMgPT0gMjM0KSB7CQkJLyogaGFu ZGxlIE9FIGRpZ3JhcGguICovCi0JICAgIHptc3R1ZmYoJ0UnKTsKLQkgICAgcmV0dXJuKCdPJyk7 Ci0JfSBlbHNlIGlmIChjID09IDI1MCkgewkJLyogQWxzbyBsb3dlcmNhc2Ugb2UuICovCi0JICAg IHptc3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCdvJyk7Ci0JfQotICAgIH0KLSAgICBjID0geG5l bDEoYyk7CQkJLyogQ29udmVydCB0byBMYXRpbi0xICovCi0gICAgcmV0dXJuKHlsMWFzW2NdKTsJ CQkvKiBDb252ZXJ0IExhdGluLTEgdG8gQVNDSUkgKi8KLX0KLQotQ0hBUgotI2lmZGVmIENLX0FO U0lDCi14bm9hcyhDSEFSIGMpCi0jZWxzZQoteG5vYXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi17IC8qIHhub2FzICovCQkJCS8qIE5vcmdlL0RhbmlzaCBJU08gNjQ2IHRvIEFT Q0lJICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgc3dpdGNo IChjKSB7Ci0gICAgICBjYXNlIDkxOgotCXptc3R1ZmYoJ0UnKTsJCQkvKiBBRSBkaWdyYXBoICov Ci0JcmV0dXJuKCdBJyk7Ci0gICAgICBjYXNlIDkyOiByZXR1cm4oJ08nKTsJCS8qIE8gc2xhc2gg Ki8KLSAgICAgIGNhc2UgOTM6CQkJCS8qIEEgcmluZyAqLwotCXptc3R1ZmYoJ2EnKTsKLQlyZXR1 cm4oJ0EnKTsKLSAgICAgIGNhc2UgMTIzOgkJCQkvKiBhZSBkaWdyYXBoICovCi0Jem1zdHVmZign ZScpOwotCXJldHVybignYScpOwotICAgICAgY2FzZSAxMjQ6IHJldHVybignbycpOwkJLyogbyBz bGFzaCAqLwotICAgICAgY2FzZSAxMjU6CQkJCS8qIGEgcmluZyAqLwotCXptc3R1ZmYoJ2EnKTsK LQlyZXR1cm4oJ2EnKTsKLSAgICAgIGRlZmF1bHQ6ICByZXR1cm4oYyk7Ci0gICAgfQotfQotCi1D SEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhwb2FzKENIQVIgYykKLSNlbHNlCi14cG9hcyhjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeHBvYXMgKi8JCQkJLyogUG9ydHVndWVz ZSBJU08gNjQ2IHRvIEFTQ0lJICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVO Syk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDkxOiAgcmV0dXJuKCdBJyk7CQkvKiBB IHRpbGRlICovCi0gICAgICBjYXNlIDkyOiAgcmV0dXJuKCdDJyk7CQkvKiBDIGNlZGlsbGEgKi8K LSAgICAgIGNhc2UgOTM6ICByZXR1cm4oJ08nKTsJCS8qIE8gdGlsZGUgKi8KLSAgICAgIGNhc2Ug MTIzOiByZXR1cm4oJ2EnKTsJCS8qIGEgdGlsZGUgKi8KLSAgICAgIGNhc2UgMTI0OiByZXR1cm4o J2MnKTsJCS8qIGMgY2VkaWxsYSAqLwotICAgICAgY2FzZSAxMjU6IHJldHVybignbycpOwkJLyog byB0aWxkZSAqLwotICAgICAgZGVmYXVsdDogIHJldHVybihjKTsKLSAgICB9Ci19Ci0KLUNIQVIK LSNpZmRlZiBDS19BTlNJQwoteHNwYXMoQ0hBUiBjKQotI2Vsc2UKLXhzcGFzKGMpIENIQVIgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4c3BhcyAqLwkJCQkvKiBTcGFuaXNoIElTTyA2 NDYgdG8gQVNDSUkgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAg ICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgOTE6ICByZXR1cm4oMzMpOwkJLyogSW52ZXJ0ZWQg ZXhjbGFtYXRpb24gKi8KLSAgICAgIGNhc2UgOTI6ICByZXR1cm4oJ04nKTsJCS8qIE4gdGlsZGUg Ki8KLSAgICAgIGNhc2UgOTM6ICByZXR1cm4oNjMpOwkJLyogSW52ZXJ0ZWQgcXVlc3Rpb24gbWFy ayAqLwotICAgICAgY2FzZSAxMjM6IHJldHVybihVTkspOwkJLyogZGVncmVlICovCi0gICAgICBj YXNlIDEyNDogcmV0dXJuKCduJyk7CQkvKiBuIHRpbGRlICovCi0gICAgICBjYXNlIDEyNTogcmV0 dXJuKCdjJyk7CQkvKiBjIGNlZGlsbGEgKi8KLSAgICAgIGRlZmF1bHQ6ICByZXR1cm4oYyk7Ci0g ICAgfQotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhzd2FzKENIQVIgYykKLSNlbHNlCi14 c3dhcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeHN3YXMgKi8JCQkJ LyogU3dlZGlzaCBJU08gNjQ2IHRvIEFTQ0lJICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAg cmV0dXJuKFVOSyk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDY0OiAgcmV0dXJuKCdF Jyk7CQkvKiBFIGFjdXRlICovCi0gICAgICBjYXNlIDkxOgkJCQkvKiBBIGRpYWVyZXNpcyAqLwot CXptc3R1ZmYoJ2UnKTsKLQlyZXR1cm4oJ0EnKTsKLSAgICAgIGNhc2UgOTI6CQkJCS8qIE8gZGlh ZXJlc2lzICovCi0Jem1zdHVmZignZScpOwotCXJldHVybignTycpOwotICAgICAgY2FzZSA5MzoJ CQkJLyogQSByaW5nICovCi0Jem1zdHVmZignYScpOwotCXJldHVybignQScpOwotICAgICAgY2Fz ZSA5NDoJCQkJLyogVSBkaWFlcmVzaXMgKi8KLQkvKiByZXR1cm4oJ1knKTsgKi8KLQl6bXN0dWZm KCdlJyk7Ci0JcmV0dXJuKCdVJyk7Ci0gICAgICBjYXNlIDk2OiAgcmV0dXJuKCdlJyk7CQkvKiBl IGFjdXRlICovCi0gICAgICBjYXNlIDEyMzoJCQkJLyogYSBkaWFlcmVzaXMgKi8KLQl6bXN0dWZm KCdlJyk7Ci0JcmV0dXJuKCdhJyk7Ci0gICAgICBjYXNlIDEyNDoJCQkJLyogbyBkaWFlcmVzaXMg Ki8KLQl6bXN0dWZmKCdlJyk7Ci0JcmV0dXJuKCdvJyk7Ci0gICAgICBjYXNlIDEyNToJCQkJLyog YSByaW5nICovCi0Jem1zdHVmZignYScpOwotCXJldHVybignYScpOwotICAgICAgY2FzZSAxMjY6 CQkJCS8qIHUgZGlhZXJlc2lzICovCi0JLyogcmV0dXJuKCd5Jyk7ICovCi0Jem1zdHVmZignZScp OwotCXJldHVybigndScpOwotICAgICAgZGVmYXVsdDogIHJldHVybihjKTsKLSAgICB9Ci19Ci0K LUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGNoYXMoQ0hBUiBjKQotI2Vsc2UKLXhjaGFzKGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4Y2hhcyAqLwkJCQkvKiBTd2lzcyBJ U08gNjQ2IHRvIEFTQ0lJICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7 Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDM1OiAgcmV0dXJuKCd1Jyk7CQkvKiB1IGdy YXZlICovCi0gICAgICBjYXNlIDY0OiAgcmV0dXJuKCdhJyk7CQkvKiBhIGdyYXZlICovCi0gICAg ICBjYXNlIDkxOiAgcmV0dXJuKCdlJyk7CQkvKiBlIGFjdXRlICovCi0gICAgICBjYXNlIDkyOiAg cmV0dXJuKCdjJyk7CQkvKiBjIGNlZGlsbGEgKi8KLSAgICAgIGNhc2UgOTM6ICByZXR1cm4oJ2Un KTsJCS8qIGUgY2lyY3VtZmxleCAqLwotICAgICAgY2FzZSA5NDogIHJldHVybignaScpOwkJLyog aSBjaXJjdW1mbGV4ICovCi0gICAgICBjYXNlIDk1OiAgcmV0dXJuKCdlJyk7CQkvKiBlIGdyYXZl ICovCi0gICAgICBjYXNlIDk2OiAgcmV0dXJuKCdvJyk7CQkvKiBvIGNpcmN1bWZsZXggKi8KLSAg ICAgIGNhc2UgMTIzOgkJCQkvKiBhIGRpYWVyZXNpcyAqLwotCXptc3R1ZmYoJ2UnKTsKLQlyZXR1 cm4oJ2EnKTsKLSAgICAgIGNhc2UgMTI0OgkJCQkvKiBvIGRpYWVyZXNpcyAqLwotCXptc3R1ZmYo J2UnKTsKLQlyZXR1cm4oJ28nKTsKLSAgICAgIGNhc2UgMTI1OgkJCQkvKiB1IGRpYWVyZXNpcyAq LwotCXptc3R1ZmYoJ2UnKTsKLQlyZXR1cm4oJ3UnKTsKLSAgICAgIGNhc2UgMTI2OiByZXR1cm4o J3UnKTsJCS8qIHUgY2lyY3VtZmxleCAqLwotICAgICAgZGVmYXVsdDogIHJldHVybihjKTsKLSAg ICB9Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGh1YXMoQ0hBUiBjKQotI2Vsc2UKLXho dWFzKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4aHVhcyAqLwkJCQkv KiBIdW5nYXJpYW4gSVNPIDY0NiB0byBBU0NJSSAqLwotICAgIGlmIChjICYgMHg4MCkKLSAgICAg IHJldHVybihVTkspOwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSA2NDogIHJldHVybign QScpOwkJLyogQSBhY3V0ZSAqLwotICAgICAgY2FzZSA5MTogIHJldHVybignRScpOwkJLyogRSBh Y3V0ZSAqLwotICAgICAgY2FzZSA5MjogIHJldHVybignTycpOwkJLyogTyBkaWFlcmVzaXMgKi8K LSAgICAgIGNhc2UgOTM6ICByZXR1cm4oJ1UnKTsJCS8qIFUgZGlhZXJlc2lzICovCi0gICAgICBj YXNlIDk2OiAgcmV0dXJuKCdhJyk7CQkvKiBhIGFjdXRlICovCi0gICAgICBjYXNlIDEyMzogcmV0 dXJuKCdlJyk7CQkvKiBlIGFjdXRlICovCi0gICAgICBjYXNlIDEyNDogcmV0dXJuKCdvJyk7CQkv KiBvIGFjdXRlICovCi0gICAgICBjYXNlIDEyNTogcmV0dXJuKCd1Jyk7CQkvKiB1IGFjdXRlICov Ci0gICAgICBjYXNlIDEyNjogcmV0dXJuKDM0KTsJCS8qIGRvdWJsZSBhY3V0ZSBhY2NlbnQgKi8K LSAgICAgIGRlZmF1bHQ6ICByZXR1cm4oYyk7Ci0gICAgfQotfQotCi1DSEFSCi0jaWZkZWYgQ0tf QU5TSUMKLXhkbWFzKENIQVIgYykKLSNlbHNlCi14ZG1hcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsgLyogeGRtYXMgKi8JCQkJLyogREVDIE1DUyB0byBBU0NJSSAqLwotICAg IGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9GUkVOQ0gpIHsgLyogSWYgU0VUIExBTkdVQUdF IEZSRU5DSCAqLwotCWlmIChjID09IDIxNSkgewkJCS8qIGhhbmRsZSBPRSBkaWdyYXBoLiAqLwot CSAgICB6bXN0dWZmKCdFJyk7Ci0JICAgIHJldHVybignTycpOwotCX0gZWxzZSBpZiAoYyA9PSAy NDcpIHsJCS8qIEFsc28gbG93ZXJjYXNlIG9lLiAqLwotCSAgICB6bXN0dWZmKCdlJyk7Ci0JICAg IHJldHVybignbycpOwotCX0KLSAgICB9Ci0gICAgcmV0dXJuKHlsMWFzW2NdKTsJCQkvKiBPdGhl cndpc2UgdHJlYXQgbGlrZSBMYXRpbi0xICovCi19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwot eGRnYXMoQ0hBUiBjKQotI2Vsc2UKLXhkZ2FzKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwoteyAvKiAgeGRnYXMgKi8JCQkJLyogRGF0YSBHZW5lcmFsIHRvIEFTQ0lJICovCi0gICAg c3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgMTgwOiByZXR1cm4oJ2YnKTsJCS8qIEZsb3JpbiAqLwot ICAgICAgY2FzZSAxODM6IHJldHVybignPCcpOwkJLyogTGVzcy1lcXVhbCAqLwotICAgICAgY2Fz ZSAxODQ6IHJldHVybignPicpOwkJLyogR3JlYXRlci1lcXVhbCAqLwotICAgICAgY2FzZSAxODY6 IHJldHVybig5Nik7CQkvKiBHcmF2ZSBhY2NlbnQgKi8KLSAgICAgIGNhc2UgMTkxOiByZXR1cm4o J14nKTsJCS8qIFVwYXJyb3cgKi8KLSAgICAgIGNhc2UgMjE1OgotCWlmIChsYW5nc1tsYW5ndWFn ZV0uaWQgPT0gTF9GUkVOQ0gpIHsgLyogT0UgZGlncmFwaCAqLwotCSAgICB6bXN0dWZmKCdFJyk7 Ci0JICAgIHJldHVybignTycpOwotCX0gZWxzZSByZXR1cm4oJ08nKTsKLSAgICAgIGNhc2UgMjQ3 OgotCWlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9GUkVOQ0gpIHsgLyogb2UgZGlncmFwaCAq LwotCSAgICB6bXN0dWZmKCdlJyk7Ci0JICAgIHJldHVybignbycpOwotCX0gZWxzZSByZXR1cm4o J28nKTsKLSAgICAgIGNhc2UgMTc1OiBjYXNlIDE3OTogY2FzZSAyMjA6IGNhc2UgMjIyOgotICAg ICAgY2FzZSAyMjM6IGNhc2UgMjU0OiBjYXNlIDI1NToKLQlyZXR1cm4oVU5LKTsKLSAgICAgIGRl ZmF1bHQ6CQkJCS8qIFRoZSByZXN0LCBjb252ZXJ0IHRvIExhdGluLTEgKi8KLQlyZXR1cm4oeWwx YXNbeWRnbDFbY11dKTsJLyogYW5kIGZyb20gdGhlcmUgdG8gQVNDSUkgKi8KLSAgICB9Ci19Ci0K LUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteHI4YXMoQ0hBUiBjKQotI2Vsc2UKLXhyOGFzKGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiAgeHI4YXMgKi8JCQkJLyogSGV3bGV0 dCBQYWNrYXJkIFJvbWFuOCB0byBBU0NJSSAqLwotICAgIHN3aXRjaChjKSB7Ci0gICAgICBjYXNl IDE3NTogcmV0dXJuKCdMJyk7CQkvKiBMaXJhICovCi0gICAgICBjYXNlIDE5MDogcmV0dXJuKCdm Jyk7CQkvKiBGbG9yaW4gKi8KLSAgICAgIGNhc2UgMjM1OiByZXR1cm4oJ1MnKTsJCS8qIFMgY2Fy b24gKi8KLSAgICAgIGNhc2UgMjM2OiByZXR1cm4oJ3MnKTsJCS8qIHMgY2Fyb24gKi8KLSAgICAg IGNhc2UgMjQ2OiByZXR1cm4oJy0nKTsJCS8qIEhvcml6b250YWwgYmFyICovCi0gICAgICBjYXNl IDI1MjogcmV0dXJuKCcqJyk7CQkvKiBTb2xpZCBib3ggKi8KLSAgICAgIGRlZmF1bHQ6CQkJCS8q IFRoZSByZXN0LCBjb252ZXJ0IHRvIExhdGluLTEgKi8KLQlyZXR1cm4oeWwxYXNbeXI4bDFbY11d KTsJLyogYW5kIGZyb20gdGhlcmUgdG8gQVNDSUkgKi8KLSAgICB9Ci19Ci0KLUNIQVIKLSNpZmRl ZiBDS19BTlNJQwoteHVrbDEoQ0hBUiBjKQotI2Vsc2UKLXh1a2wxKGMpIENIQVIgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4dWtsMSAqLwkJCQkvKiBVSyBBU0NJSSB0byBMYXRpbi0x ICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgaWYgKGMgPT0g MzUpCi0gICAgICByZXR1cm4oMTYzKTsKLSAgICBlbHNlIHJldHVybihjKTsKLX0KLQotQ0hBUgot I2lmZGVmIENLX0FOU0lDCi14bDF1ayhDSEFSIGMpCi0jZWxzZQoteGwxdWsoYykgQ0hBUiBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMXVrICovCQkJCS8qIExhdGluLTEgdG8gVUsg QVNDSUkgKi8KLSAgICBpZiAoYyA9PSAxNjMpCi0gICAgICByZXR1cm4oMzUpOwotICAgIGVsc2Ug cmV0dXJuKHlsMWFzW2NdKTsKLX0KLQotQ0hBUgkJCQkJLyogTGF0aW4tMSB0byBGcmVuY2ggSVNP IDY0NiAqLwotI2lmZGVmIENLX0FOU0lDCi14bDFmcihDSEFSIGMpCi0jZWxzZQoteGwxZnIoYykg Q0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMWZyICovCi0gICAgcmV0dXJu KHlsMWZyW2NdKTsKLX0KLQotCi1DSEFSCQkJCQkvKiBGcmVuY2ggSVNPIDY0NiB0byBMYXRpbi0x ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhmcmwxKENIQVIgYykKLSNlbHNlCi14ZnJsMShjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGZybDEgKi8KLSAgICBpZiAoYyAmIDB4 ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICByZXR1cm4oeWZybDFbY10pOwotfQotCi1DSEFS CQkJCQkvKiBMYXRpbi0xIHRvIER1dGNoIEFTQ0lJICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMWR1 KENIQVIgYykKLSNlbHNlCi14bDFkdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsgLyogeGwxZHUgKi8KLSAgICByZXR1cm4oeWwxZHVbY10pOwotfQotCi1DSEFSCi0jaWZkZWYg Q0tfQU5TSUMKLXhkdWwxKENIQVIgYykKLSNlbHNlCi14ZHVsMShjKSBDSEFSIGM7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsgLyogeGR1bDEgKi8JCQkJLyogRHV0Y2ggSVNPIDY0NiB0byBMYXRp bi0xICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgcmV0dXJu KHlkdWwxW2NdKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14ZmlsMShDSEFSIGMpCi0j ZWxzZQoteGZpbDEoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhmaWwx ICovCQkJCS8qIEZpbm5pc2ggSVNPIDY0NiB0byBMYXRpbi0xICovCi0gICAgaWYgKGMgJiAweDgw KQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgcmV0dXJuKHlmaWwxW2NdKTsKLX0KLQotQ0hBUgot I2lmZGVmIENLX0FOU0lDCi14bDFmaShDSEFSIGMpCi0jZWxzZQoteGwxZmkoYykgQ0hBUiBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMWZpICovCQkJCS8qIExhdGluLTEgdG8gRmlu bmlzaCBJU08gNjQ2ICovCi0gICAgcmV0dXJuKHlsMWZpW2NdKTsKLX0KLQotQ0hBUgotI2lmZGVm IENLX0FOU0lDCi14ZmNsMShDSEFSIGMpCi0jZWxzZQoteGZjbDEoYykgQ0hBUiBjOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17IC8qIHhmY2wxICovCQkJCS8qIEZyZW5jaCBDYW5hZGlhbiBJU082 NDYgdG8gTGF0aW4tMSAqLwotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwot ICAgIHJldHVybih5ZmNsMVtjXSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGwxZmMo Q0hBUiBjKQotI2Vsc2UKLXhsMWZjKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot eyAvKiB4bDFmYyAqLwkJCQkvKiBMYXRpbi0xIHRvIEZyZW5jaCBDYW5hZGlhbiBJU082NDYgKi8K LSAgICByZXR1cm4oeWwxZmNbY10pOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhpdGwx KENIQVIgYykKLSNlbHNlCi14aXRsMShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsgLyogeGl0bDEgKi8JCQkJLyogSXRhbGlhbiBJU08gNjQ2IHRvIExhdGluLTEgKi8KLSAgICBp ZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICByZXR1cm4oeWl0bDFbY10pOwot fQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMWl0KENIQVIgYykKLSNlbHNlCi14bDFpdChj KSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxaXQgKi8JCQkJLyogTGF0 aW4tMSB0byBJdGFsaWFuIElTTyA2NDYgKi8KLSAgICByZXR1cm4oeWwxaXRbY10pOwotfQotCi1D SEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhuZWwxKENIQVIgYykKLSNlbHNlCi14bmVsMShjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeG5lbDEgKi8JCSAJCS8qIE5lWFQgdG8g TGF0aW4tMSAqLwotICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9GUkVOQ0gpIHsgLyog SWYgU0VUIExBTkdVQUdFIEZSRU5DSCAqLwotCWlmIChjID09IDIzNCkgewkJCS8qIGhhbmRsZSBP RSBkaWdyYXBoLiAqLwotCSAgICB6bXN0dWZmKCdFJyk7Ci0JICAgIHJldHVybignTycpOwotCX0g ZWxzZSBpZiAoYyA9PSAyNTApIHsJCS8qIEFsc28gbG93ZXJjYXNlIG9lLiAqLwotCSAgICB6bXN0 dWZmKCdlJyk7Ci0JICAgIHJldHVybignbycpOwotCX0KLSAgICB9Ci0gICAgcmV0dXJuKHluZWwx W2NdKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bmVsOShDSEFSIGMpCi0jZWxzZQot eG5lbDkoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhuZWw5ICovCQkg CQkvKiBOZVhUIHRvIExhdGluLTkgKi8KLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMjM0 OiByZXR1cm4oMTg4KTsJCS8qIE9FICovCi0gICAgICBjYXNlIDI1MDogcmV0dXJuKDE4OSk7CQkv KiBvZSAqLwotICAgICAgY2FzZSAxODg6IHJldHVybigyMzQpOwkJLyoga2VlcCBpdCBpbnZlcnRp YmxlLi4uICovCi0gICAgICBjYXNlIDE4OTogcmV0dXJuKDI1MCk7CQkvKiBvZSAqLwotICAgICAg ZGVmYXVsdDoKLQlyZXR1cm4oeW5lbDFbY10pOwotICAgIH0KLX0KLQotQ0hBUgotI2lmZGVmIENL X0FOU0lDCi14bDFuZShDSEFSIGMpCi0jZWxzZQoteGwxbmUoYykgQ0hBUiBjOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi17IC8qIHhsMW5lICovCQkgCQkvKiBMYXRpbi0xIHRvIE5lWFQgKi8KLSAg ICByZXR1cm4oeWwxbmVbY10pOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsOW5lKENI QVIgYykKLSNlbHNlCi14bDluZShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsg LyogeGw5bmUgKi8JCSAJCS8qIExhdGluLTkgdG8gTmVYVCAqLwotICAgIHN3aXRjaCAoYykgewot ICAgICAgY2FzZSAxODg6IHJldHVybigyMzQpOwkJLyogT0UgKi8KLSAgICAgIGNhc2UgMTg5OiBy ZXR1cm4oMjUwKTsJCS8qIG9lICovCi0gICAgICBjYXNlIDIzNDogcmV0dXJuKDE4OCk7CQkvKiBP RSAqLwotICAgICAgY2FzZSAyNTA6IHJldHVybigxODkpOwkJLyogb2UgKi8KLSAgICAgIGRlZmF1 bHQ6Ci0JcmV0dXJuKHlsMW5lW2NdKTsKLSAgICB9Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJ QwoteG5vbDEoQ0hBUiBjKQotI2Vsc2UKLXhub2wxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwoteyAvKiB4bm9sMSAqLwkJIAkJLyogTm9yd2F5L0Rlbm1hcmsgSVNPIDY0NiB0byBM YXRpbi0xICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgcmV0 dXJuKHlub2wxW2NdKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDFubyhDSEFSIGMp Ci0jZWxzZQoteGwxbm8oYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhs MW5vICovCQkgCQkvKiBMYXRpbi0xIHRvIE5vcndheS9EZW5tYXJrIElTTyA2NDYgKi8KLSAgICBy ZXR1cm4oeWwxbm9bY10pOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhwb2wxKENIQVIg YykKLSNlbHNlCi14cG9sMShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyog eHBvbDEgKi8JCQkJLyogUG9ydHVndWVzZSBJU08gNjQ2IHRvIExhdGluLTEgKi8KLSAgICBpZiAo YyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICByZXR1cm4oeXBvbDFbY10pOwotfQot Ci1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMXBvKENIQVIgYykKLSNlbHNlCi14bDFwbyhjKSBD SEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxcG8gKi8JCQkJLyogTGF0aW4t MSB0byBQb3J0dWd1ZXNlIElTTyA2NDYgKi8KLSAgICByZXR1cm4oeWwxcG9bY10pOwotfQotCi1D SEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhzcGwxKENIQVIgYykKLSNlbHNlCi14c3BsMShjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeHNwbDEgKi8JCQkJLyogU3BhbmlzaCBJ U08gNjQ2IHRvIExhdGluLTEgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5L KTsKLSAgICByZXR1cm4oeXNwbDFbY10pOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhs MXNwKENIQVIgYykKLSNlbHNlCi14bDFzcChjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLXsgLyogeGwxc3AgKi8JCQkJLyogTGF0aW4tMSB0byBTcGFuaXNoIElTTyA2NDYgKi8KLSAg ICByZXR1cm4oeWwxc3BbY10pOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhzd2wxKENI QVIgYykKLSNlbHNlCi14c3dsMShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsg LyogeHN3bDEgKi8JCQkJLyogU3dlZGlzaCBJU08gNjQ2IHRvIExhdGluLTEgKi8KLSAgICBpZiAo YyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICByZXR1cm4oeXN3bDFbY10pOwotfQot Ci1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMXN3KENIQVIgYykKLSNlbHNlCi14bDFzdyhjKSBD SEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxc3cgKi8JCQkJLyogTGF0aW4t MSB0byBTd2VkaXNoIElTTyA2NDYgKi8KLSAgICByZXR1cm4oeWwxc3dbY10pOwotfQotCi1DSEFS Ci0jaWZkZWYgQ0tfQU5TSUMKLXhjaGwxKENIQVIgYykKLSNlbHNlCi14Y2hsMShjKSBDSEFSIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGNobDEgKi8JCQkJLyogU3dpc3MgSVNPIDY0 NiB0byBMYXRpbi0xICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0g ICAgcmV0dXJuKHljaGwxW2NdKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDFjaChD SEFSIGMpCi0jZWxzZQoteGwxY2goYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17 IC8qIHhsMWNoICovCQkJCS8qIExhdGluLTEgdG8gU3dpc3MgSVNPIDY0NiAqLwotICAgIHJldHVy bih5bDFjaFtjXSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGh1bDEoQ0hBUiBjKQot I2Vsc2UKLXhodWwxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4aHVs MSAqLwkJCQkvKiBIdW5nYXJpYW4gSVNPIDY0NiB0byBMYXRpbi0xICovCi0gICAgaWYgKGMgJiAw eDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgcmV0dXJuKHlodWwxW2NdKTsKLX0KLQotQ0hB UgotI2lmZGVmIENLX0FOU0lDCi14bDFodShDSEFSIGMpCi0jZWxzZQoteGwxaHUoYykgQ0hBUiBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMWh1ICovCQkJCS8qIExhdGluLTEgdG8g SHVuZ2FyaWFuIElTTyA2NDYgKi8KLSAgICByZXR1cm4oeWwxaHVbY10pOwotfQotCi1DSEFSCi0j aWZkZWYgQ0tfQU5TSUMKLXhsMWRtKENIQVIgYykKLSNlbHNlCi14bDFkbShjKSBDSEFSIGM7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxZG0gKi8JCQkJLyogTGF0aW4tMSB0byBERUMg TUNTICovCi0gICAgcmV0dXJuKHlsMWRtW2NdKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lD Ci14bDlkbShDSEFSIGMpCi0jZWxzZQoteGw5ZG0oYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17IC8qIHhsOWRtICovCQkJCS8qIExhdGluLTkgdG8gREVDIE1DUyAqLwotICAgIHN3 aXRjaCAoYykgewotICAgICAgY2FzZSAxODg6IHJldHVybigyMTUpOwotICAgICAgY2FzZSAxODk6 IHJldHVybigyNDcpOwotICAgICAgY2FzZSAyMTU6IHJldHVybigxODgpOwotICAgICAgY2FzZSAy NDc6IHJldHVybigxODkpOwotICAgICAgZGVmYXVsdDoKLQlyZXR1cm4oeWwxZG1bY10pOwotICAg IH0KLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDl3MShDSEFSIGMpCi0jZWxzZQoteGw5 dzEoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsOXcxICovCQkJCS8q IExhdGluLTkgdG8gQ1AxMjUyICovCi0gICAgaWYgKGMgPCAxMjgpCi0gICAgICByZXR1cm4oYyk7 Ci0gICAgZWxzZSBpZiAoYyA8IDE2MCkKLSAgICAgIHJldHVybignPycpOwotICAgIHN3aXRjaCAo YykgewotICAgICAgY2FzZSAweGE0OiByZXR1cm4oMHg4MCk7CQkvKiBFdXJvICovCi0gICAgICBj YXNlIDB4YTY6IHJldHVybigweDhhKTsJCS8qIFMtY2Fyb24gKi8KLSAgICAgIGNhc2UgMHhhODog cmV0dXJuKDB4OWEpOwkJLyogcy1jYXJvbiAqLwotICAgICAgY2FzZSAweGI0OiByZXR1cm4oMHg4 ZSk7CQkvKiBaLWNhcm9uICovCi0gICAgICBjYXNlIDB4Yjg6IHJldHVybigweDllKTsJCS8qIHot Y2Fyb24gKi8KLSAgICAgIGNhc2UgMHhiYzogcmV0dXJuKDB4OGMpOwkJLyogT0UgKi8KLSAgICAg IGNhc2UgMHhiZDogcmV0dXJuKDB4OWMpOwkJLyogb2UgKi8KLSAgICAgIGNhc2UgMHhiZTogcmV0 dXJuKDB4OWYpOwkJLyogWS1kaWFlcmVzaXMgKi8KLSAgICAgIGRlZmF1bHQ6Ci0JcmV0dXJuKGMp OwotICAgIH0KLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDFkZyhDSEFSIGMpCi0jZWxz ZQoteGwxZGcoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMWRnICov CQkJCS8qIExhdGluLTEgdG8gREcgSUNTICovCi0gICAgcmV0dXJuKHlsMWRnW2NdKTsKLX0KLQot Q0hBUgotI2lmZGVmIENLX0FOU0lDCi14ZG1sMShDSEFSIGMpCi0jZWxzZQoteGRtbDEoYykgQ0hB UiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhkbWwxICovCQkJCS8qIERFQyBNQ1Mg dG8gTGF0aW4tMSAqLwotICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9GUkVOQ0gpIHsg LyogSWYgU0VUIExBTkdVQUdFIEZSRU5DSCAqLwotCWlmIChjID09IDIxNSkgewkJCS8qIGhhbmRs ZSBPRSBkaWdyYXBoLiAqLwotCSAgICB6bXN0dWZmKCdFJyk7Ci0JICAgIHJldHVybignTycpOwot CX0gZWxzZSBpZiAoYyA9PSAyNDcpIHsJCS8qIEFsc28gbG93ZXJjYXNlIG9lLiAqLwotCSAgICB6 bXN0dWZmKCdlJyk7Ci0JICAgIHJldHVybignbycpOwotCX0KLSAgICB9Ci0gICAgcmV0dXJuKHlk bWwxW2NdKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14ZG1sOShDSEFSIGMpCi0jZWxz ZQoteGRtbDkoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhkbWw5ICov CQkJCS8qIERFQyBNQ1MgdG8gTGF0aW4tOSAqLwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2Fz ZSAyMTU6IHJldHVybigxODgpOwkJLyogT0UgKi8KLSAgICAgIGNhc2UgMjQ3OiByZXR1cm4oMTg5 KTsJCS8qIG9lICovCi0gICAgICBjYXNlIDE4ODogcmV0dXJuKDIxNSk7CQkvKiBhbmQgc3dhcCB0 aGUgb3RoZXIgdHdvLi4uICovCi0gICAgICBjYXNlIDE4OTogcmV0dXJuKDI0Nyk7CQkvKiAoMS80 IGFuZCAxLzIpICovCi0gICAgICBkZWZhdWx0OgkJCQkvKiB0byBrZWVwIGl0IGludmVydGlibGUg Ki8KLQlyZXR1cm4oeWRtbDFbY10pOwotICAgIH0KLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lD Ci14ZGdsMShDSEFSIGMpCi0jZWxzZQoteGRnbDEoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17IC8qIHhkZ2wxICovCQkJCS8qIERHIEludGVybmF0aW9uYWwgQ1MgdG8gTGF0aW4t MSAqLwotICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9GUkVOQ0gpIHsgLyogSWYgU0VU IExBTkdVQUdFIEZSRU5DSCAqLwotCWlmIChjID09IDIxNSkgewkJCS8qIGhhbmRsZSBPRSBkaWdy YXBoLiAqLwotCSAgICB6bXN0dWZmKCdFJyk7Ci0JICAgIHJldHVybignTycpOwotCX0gZWxzZSBp ZiAoYyA9PSAyNDcpIHsJCS8qIEFsc28gbG93ZXJjYXNlIG9lLiAqLwotCSAgICB6bXN0dWZmKCdl Jyk7Ci0JICAgIHJldHVybignbycpOwotCX0KLSAgICB9Ci0gICAgcmV0dXJuKHlkZ2wxW2NdKTsK LX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14cjhsMShDSEFSIGMpCi0jZWxzZQoteHI4bDEo YykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhyOGwxICovCQkJCS8qIEhl d2xldHQgUGFja2FyZCBSb21hbjggdG8gTGF0aW4tMSAqLwotICAgIHJldHVybih5cjhsMVtjXSk7 Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGwxcjgoQ0hBUiBjKQotI2Vsc2UKLXhsMXI4 KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDFyOCAqLwkJCQkvKiBM YXRpbi0xIHRvIEhld2xldHQgUGFja2FyZCBSb21hbjggKi8KLSAgICByZXR1cm4oeWwxcjhbY10p OwotfQotCi0vKiBUcmFuc2xhdGlvbiBmdW5jdGlvbnMgZm9yIHJlY2VpdmluZyBmaWxlcyBhbmQg dHJhbnNsYXRpbmcgdGhlbSBpbnRvIEFTQ0lJICovCi0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwot emwxYXMoQ0hBUiBjKQotI2Vsc2UKLXpsMWFzKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwoteyAvKiB6bDFhcyAqLwotICAgIHN3aXRjaChsYW5nc1tsYW5ndWFnZV0uaWQpIHsKLQot ICAgICAgY2FzZSBMX0RVVENIOgotCWlmIChjID09IDI1NSkgewkJCS8qIER1dGNoIHVtbGF1dC15 ICovCi0JICAgIHpkc3R1ZmYoJ2onKTsJCS8qIGJlY29tZXMgaWogKi8KLQkgICAgcmV0dXJuKCdp Jyk7Ci0JfSBlbHNlIHJldHVybih5bDFhc1tjXSk7CS8qIGFsbCBvdGhlcnMgYnkgdGhlIGJvb2sg Ki8KLQotICAgICAgY2FzZSBMX0dFUk1BTjoKLQlzd2l0Y2ggKGMpIHsJCQkvKiBHZXJtYW4sIHNw ZWNpYWwgcnVsZXMuICovCi0JICBjYXNlIDE5NjoJCQkvKiB1bWxhdXQtQSAtPiBBZSAqLwotCSAg ICB6ZHN0dWZmKCdlJyk7Ci0JICAgIHJldHVybignQScpOwotCSAgY2FzZSAyMTQ6CQkJLyogdW1s YXV0LU8gLT4gT2UgKi8KLQkgICAgemRzdHVmZignZScpOwotCSAgICByZXR1cm4oJ08nKTsKLQkg IGNhc2UgMjIwOgkJCS8qIHVtbGF1dC1VIC0+IFVlICovCi0JICAgIHpkc3R1ZmYoJ2UnKTsKLQkg ICAgcmV0dXJuKCdVJyk7Ci0JICBjYXNlIDIyODoJCQkvKiB1bWxhdXQtYSAtPiBhZSAqLwotCSAg ICB6ZHN0dWZmKCdlJyk7Ci0JICAgIHJldHVybignYScpOwotCSAgY2FzZSAyNDY6CQkJLyogdW1s YXV0LW8gLT4gb2UgKi8KLQkgICAgemRzdHVmZignZScpOwotCSAgICByZXR1cm4oJ28nKTsKLQkg IGNhc2UgMjUyOgkJCS8qIHVtbGF1dC11IC0+IHVlICovCi0JICAgIHpkc3R1ZmYoJ2UnKTsKLQkg ICAgcmV0dXJuKCd1Jyk7Ci0JICBjYXNlIDIyMzoJCQkvKiBlc3MtemV0IC0+IHNzICovCi0JICAg IHpkc3R1ZmYoJ3MnKTsKLQkgICAgcmV0dXJuKCdzJyk7Ci0JICBkZWZhdWx0OiByZXR1cm4oeWwx YXNbY10pOwkvKiBhbGwgb3RoZXJzIGJ5IHRoZSBib29rICovCi0JfQotICAgICAgY2FzZSBMX0RB TklTSDoKLSAgICAgIGNhc2UgTF9GSU5OSVNIOgotICAgICAgY2FzZSBMX05PUldFR0lBTjoKLSAg ICAgIGNhc2UgTF9TV0VESVNIOgotCXN3aXRjaCAoYykgewkJCS8qIFNjYW5kYW5hdmlhbiBsYW5n dWFnZXMuICovCi0JICBjYXNlIDE5NjoJCQkvKiB1bWxhdXQtQSAtPiBBZSAqLwotCSAgICB6ZHN0 dWZmKCdlJyk7Ci0JICAgIHJldHVybignQScpOwotCSAgY2FzZSAyMTQ6CQkJLyogdW1sYXV0LU8g LT4gT2UgKi8KLQkgIGNhc2UgMjE2OgkJCS8qIE8tc2xhc2ggLT4gT2UgKi8KLQkgICAgemRzdHVm ZignZScpOwotCSAgICByZXR1cm4oJ08nKTsKLQkgIGNhc2UgMjIwOgkJCS8qIHVtbGF1dC1VIC0+ IFkgKi8KLQkgICAgLyogcmV0dXJuKCdZJyk7ICovCi0JICAgIHpkc3R1ZmYoJ2UnKTsKLQkgICAg cmV0dXJuKCdVJyk7Ci0JICBjYXNlIDIyODoJCQkvKiB1bWxhdXQtYSAtPiBhZSAqLwotCSAgICB6 ZHN0dWZmKCdlJyk7Ci0JICAgIHJldHVybignYScpOwotCSAgY2FzZSAyNDY6CQkJLyogdW1sYXV0 LW8gLT4gb2UgKi8KLQkgIGNhc2UgMjQ4OgkJCS8qIG8tc2xhc2ggLT4gb2UgKi8KLQkgICAgemRz dHVmZignZScpOwotCSAgICByZXR1cm4oJ28nKTsKLQkgIGNhc2UgMjUyOgkJCS8qIHVtbGF1dC11 IC0+IHkgKi8KLQkgICAgLyogcmV0dXJuKCd5Jyk7ICovCi0JICAgIHpkc3R1ZmYoJ2UnKTsKLQkg ICAgcmV0dXJuKCd1Jyk7Ci0JICBjYXNlIDE5NzoJCQkvKiBBLXJpbmcgLT4gQWEgKi8KLQkgICAg emRzdHVmZignYScpOwotCSAgICByZXR1cm4oJ0EnKTsKLSAgICAgICAgICBjYXNlIDIyOToJCQkv KiBhLXJpbmcgLT4gYWEgKi8KLQkgICAgemRzdHVmZignYScpOwotCSAgICByZXR1cm4oJ2EnKTsK LQkgIGRlZmF1bHQ6IHJldHVybih5bDFhc1tjXSk7CS8qIEFsbCBvdGhlcnMgYnkgdGhlIGJvb2sg Ki8KLQl9Ci0gICAgICBkZWZhdWx0OgotCXJldHVybih5bDFhc1tjXSk7CQkvKiBObyBsYW5ndWFn ZSwgZ28gYnkgdGhlIHRhYmxlLiAqLwotICAgIH0KLX0KLQotQ0hBUgkJCQkJLyogSUJNIENQNDM3 IHRvIExhdGluLTEgKi8KLSNpZmRlZiBDS19BTlNJQwoteDQzbDEoQ0hBUiBjKQotI2Vsc2UKLXg0 M2wxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4NDNsMSAqLwotICAg IHJldHVybih5NDNsMVtjXSk7Ci19Ci0KLUNIQVIJCQkJCS8qIElCTSBDUDg1MCB0byBMYXRpbi0x ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXg4NWwxKENIQVIgYykKLSNlbHNlCi14ODVsMShjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeDg1bDEgKi8KLSAgICByZXR1cm4oeTg1 bDFbY10pOwotfQotCi1DSEFSCQkJCQkvKiBMYXRpbi0xIHRvIElCTSBDUDQzNyAqLwotI2lmZGVm IENLX0FOU0lDCi14bDE0MyhDSEFSIGMpCi0jZWxzZQoteGwxNDMoYykgQ0hBUiBjOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17IC8qIHhsMTQzICovCi0gICAgcmV0dXJuKHlsMTQzW2NdKTsKLX0K LQotQ0hBUgkJCQkJLyogTGF0aW4tMSB0byBDUDg1MCAqLwotI2lmZGVmIENLX0FOU0lDCi14bDE4 NShDSEFSIGMpCi0jZWxzZQoteGwxODUoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17IC8qIHhsMTg1ICovCi0gICAgcmV0dXJuKHlsMTg1W2NdKTsKLX0KLQotQ0hBUgotI2lmZGVm IENLX0FOU0lDCi14NDNhcyhDSEFSIGMpCi0jZWxzZQoteDQzYXMoYykgQ0hBUiBjOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17IC8qIHg0M2FzICovCQkJCS8qIENQNDM3IHRvIEFTQ0lJICovCi0g ICAgYyA9IHk0M2wxW2NdOwkJCS8qIFRyYW5zbGF0ZSB0byBMYXRpbi0xICovCi0gICAgcmV0dXJu KHhsMTQzKGMpKTsJCQkvKiBhbmQgZnJvbSBMYXRpbi0xIHRvIEFTQ0lJLiAqLwotfQotCi1DSEFS Ci0jaWZkZWYgQ0tfQU5TSUMKLXg4NWFzKENIQVIgYykKLSNlbHNlCi14ODVhcyhjKSBDSEFSIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeDg1YXMgKi8JCQkJLyogQ1A4NTAgdG8gQVND SUkgKi8KLSAgICBjID0geTg1bDFbY107CQkJLyogVHJhbnNsYXRlIHRvIExhdGluLTEgKi8KLSAg ICByZXR1cm4oeGwxYXMoYykpOwkJCS8qIGFuZCBmcm9tIExhdGluLTEgdG8gQVNDSUkuICovCi19 Ci0KLUNIQVIJCQkJCS8qIE1hY2ludG9zaCBMYXRpbiB0byBMYXRpbi0xICovCi0jaWZkZWYgQ0tf QU5TSUMKLXhhcWwxKENIQVIgYykKLSNlbHNlCi14YXFsMShjKSBDSEFSIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsgLyogeGFxbDEgKi8KLSAgICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09 IExfRlJFTkNIKSB7IC8qIElmIFNFVCBMQU5HVUFHRSBGUkVOQ0ggKi8KLQlpZiAoYyA9PSAyMDYp IHsJCQkvKiBoYW5kbGUgT0UgZGlncmFwaC4gKi8KLQkgICAgem1zdHVmZignRScpOwotCSAgICBy ZXR1cm4oJ08nKTsKLQl9IGVsc2UgaWYgKGMgPT0gMjA3KSB7CQkvKiBBbHNvIGxvd2VyY2FzZSBv ZS4gKi8KLQkgICAgem1zdHVmZignZScpOwotCSAgICByZXR1cm4oJ28nKTsKLQl9Ci0gICAgfQot ICAgIHJldHVybih5YXFsMVtjXSk7Ci19Ci0KLUNIQVIJCQkJCS8qIE1hY2ludG9zaCBMYXRpbiB0 byBBU0NJSSAqLwotI2lmZGVmIENLX0FOU0lDCi14YXFhcyhDSEFSIGMpCi0jZWxzZQoteGFxYXMo YykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhhcWFzICovCi0gICAgaWYg KGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX0ZSRU5DSCkgeyAvKiBJZiBTRVQgTEFOR1VBR0UgRlJF TkNIICovCi0JaWYgKGMgPT0gMjA2KSB7CQkJLyogaGFuZGxlIE9FIGRpZ3JhcGguICovCi0JICAg IHptc3R1ZmYoJ0UnKTsKLQkgICAgcmV0dXJuKCdPJyk7Ci0JfSBlbHNlIGlmIChjID09IDIwNykg ewkJLyogQWxzbyBsb3dlcmNhc2Ugb2UuICovCi0JICAgIHptc3R1ZmYoJ2UnKTsKLQkgICAgcmV0 dXJuKCdvJyk7Ci0JfQotICAgIH0KLSAgICBjID0geWFxbDFbY107CQkJLyogVHJhbnNsYXRlIHRv IExhdGluLTEgKi8KLSAgICByZXR1cm4oeGwxYXMoYykpOwkJCS8qIHRoZW4gdG8gQVNDSUkuICov Ci19Ci0KLUNIQVIJCQkJCS8qIExhdGluLTEgdG8gTWFjaW50b3NoIExhdGluICovCi0jaWZkZWYg Q0tfQU5TSUMKLXhsMWFxKENIQVIgYykKLSNlbHNlCi14bDFhcShjKSBDSEFSIGM7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxYXEgKi8KLSAgICByZXR1cm4oeWwxYXFbY10pOwotfQot Ci0jaWZkZWYgTEFUSU4yCi0KLS8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9ucyBmb3IgTGF0aW4gQWxw aGFiZXQgMiAqLwotCi1DSEFSCQkJCQkvKiBMYXRpbi0yIHRvIExhdGluLTEgKi8KLSNpZmRlZiBD S19BTlNJQwoteGwybDEoQ0hBUiBjKQotI2Vsc2UKLXhsMmwxKGMpIENIQVIgYzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwoteyAvKiB4bGwybDEgKi8KLSAgICByZXR1cm4oeWwybDFbY10pOwotfQot Ci1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMncxKENIQVIgYykKLSNlbHNlCi14bDJ3MShjKSBD SEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwydzEgKi8JCQkJLyogTGF0aW4t MiB0byBDUDEyNTIgKFdpbmRvd3MgTDEpICovCi0gICAgaWYgKGMgPiAxMjcgJiYgYyA8IDE2MCkK LSAgICAgIHJldHVybihVTkspOwotICAgIGVsc2UKLSAgICAgIHJldHVybih5bDJsMVtjXSk7Ci19 Ci0KLUNIQVIJCQkJCS8qIExhdGluLTEgdG8gTGF0aW4tMiAqLwotI2lmZGVmIENLX0FOU0lDCi14 bDFsMihDSEFSIGMpCi0jZWxzZQoteGwxbDIoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17IC8qIHhsbDFsMiAqLwotICAgIHJldHVybih5bDFsMltjXSk7Ci19Ci0KLUNIQVIJCQkJ CS8qIENQMTI1MiB0byBMYXRpbi0xICovCi0jaWZkZWYgQ0tfQU5TSUMKLXh3MWwyKENIQVIgYykK LSNlbHNlCi14dzFsMihjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeHcx bDIgKi8KLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHg4YTogcmV0dXJuKDB4YTkpOwkJ LyogUyBjYXJvbiAqLwotICAgICAgY2FzZSAweDhlOiByZXR1cm4oMHhhZSk7CQkvKiBaIGNhcm9u ICovCi0gICAgICBjYXNlIDB4OWE6IHJldHVybigweGI5KTsJCS8qIHMgY2Fyb24gKi8KLSAgICAg IGNhc2UgMHg5ZTogcmV0dXJuKDB4YmUpOwkJLyogeiBjYXJvbiAqLwotICAgICAgZGVmYXVsdDoK LQlyZXR1cm4oKGMgPCAxNjApID8geHcxYXMoYykgOiB4bDFsMihjKSk7Ci0gICAgfQotfQotCi0K LUNIQVIJCQkJCS8qIExhdGluLTIgdG8gQVNDSUkgKi8KLSNpZmRlZiBDS19BTlNJQwoteGwyYXMo Q0hBUiBjKQotI2Vsc2UKLXhsMmFzKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot eyAvKiB4bGwyYXMgKi8KLSAgICByZXR1cm4oeWwyYXNbY10pOwotfQotCi1DSEFSCQkJCQkvKiBM YXRpbi0yIHRvIENQODUyICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMjUyKENIQVIgYykKLSNlbHNl Ci14bDI1MihjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxsMjUyICov Ci0gICAgcmV0dXJuKHlsMjUyW2NdKTsKLX0KLQotQ0hBUgkJCQkJLyogTGF0aW4tMiB0byBNYXpv dmlhICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMm16KENIQVIgYykKLSNlbHNlCi14bDJteihjKSBD SEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxsMm16ICovCi0gICAgcmV0dXJu KHlsMm16W2NdKTsKLX0KLQotQ0hBUgkJCQkJLyogTGF0aW4tMSB0byBNYXpvdmlhICovCi0jaWZk ZWYgQ0tfQU5TSUMKLXhsMW16KENIQVIgYykKLSNlbHNlCi14bDFteihjKSBDSEFSIGM7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxsMW16ICovCi0gICAgcmV0dXJuKHlsMm16W3lsMWwy W2NdXSk7Ci19Ci0KLUNIQVIJCQkJCS8qIE1hem92aWEgdG8gTGF0aW4tMSAqLwotI2lmZGVmIENL X0FOU0lDCi14bXpsMShDSEFSIGMpCi0jZWxzZQoteG16bDEoYykgQ0hBUiBjOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi17IC8qIHhtemwxICovCi0gICAgcmV0dXJuKHlsMmwxW3ltemwyW2NdXSk7 Ci19Ci0KLUNIQVIJCQkJCS8qIE1hem92aWEgdG8gTGF0aW4tOSAqLwotI2lmZGVmIENLX0FOU0lD Ci14bXpsOShDSEFSIGMpCi0jZWxzZQoteG16bDkoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17IC8qIHhtemw5ICovCi0gICAgcmV0dXJuKHhsMmw5KHltemwyW2NdKSk7Ci19Ci0K LUNIQVIJCQkJCS8qIENQODUyIHRvIExhdGluLTIgKi8KLSNpZmRlZiBDS19BTlNJQwoteDUybDIo Q0hBUiBjKQotI2Vsc2UKLXg1MmwyKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot eyAvKiB4NTJsMiAqLwotICAgIHJldHVybih5NTJsMltjXSk7Ci19Ci0KLUNIQVIJCQkJCS8qIE1h em92aWEgdG8gTGF0aW4tMiAqLwotI2lmZGVmIENLX0FOU0lDCi14bXpsMihDSEFSIGMpCi0jZWxz ZQoteG16bDIoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhtemwyICov Ci0gICAgcmV0dXJuKHltemwyW2NdKTsKLX0KLQotQ0hBUgkJCQkJLyogTGF0aW4tMiB0byBDUDEy NTAgKi8KLSNpZmRlZiBDS19BTlNJQwoteGwyMTI1MChDSEFSIGMpCi0jZWxzZQoteGwyMTI1MChj KSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxsMjEyNTAgKi8KLSAgICBy ZXR1cm4oeWwyMTI1MFtjXSk7Ci19Ci0KLUNIQVIJCQkJCS8qIENQMTI1MCB0byBMYXRpbi0yICov Ci0jaWZkZWYgQ0tfQU5TSUMKLXgxMjUwbDIoQ0hBUiBjKQotI2Vsc2UKLXgxMjUwbDIoYykgQ0hB UiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHgxMjUwbDIgKi8KLSAgICByZXR1cm4o eTEyNTBsMltjXSk7Ci19Ci0KLUNIQVIJCQkJCS8qIENQODUyIHRvIEFTQ0lJICovCi0jaWZkZWYg Q0tfQU5TSUMKLXg1MmFzKENIQVIgYykKLSNlbHNlCi14NTJhcyhjKSBDSEFSIGM7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsgLyogeGw1MmFzICovCi0gICAgcmV0dXJuKHlsMmFzW3k1MmwyW2Nd XSk7CQkvKiBDUDg1MiAtPiBMYXRpbi0yIC0+IEFTQ0lJICovCi19Ci0KLUNIQVIJCQkJCS8qIENQ MTI1MCB0byBBU0NJSSAqLwotI2lmZGVmIENLX0FOU0lDCi14MTI1MGFzKENIQVIgYykKLSNlbHNl Ci14MTI1MGFzKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDEyNTBh cyAqLwotICAgIHJldHVybih5bDJhc1t5MTI1MGwyW2NdXSk7CQkvKiBDUDgxMjUwIC0+IExhdGlu LTIgLT4gQVNDSUkgKi8KLX0KLQotCi1DSEFSCQkJCQkvKiBDUDg1MiB0byBMYXRpbi0xICovCi0j aWZkZWYgQ0tfQU5TSUMKLXg1MmwxKENIQVIgYykKLSNlbHNlCi14NTJsMShjKSBDSEFSIGM7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGw1MmwxICovCi0gICAgcmV0dXJuKHlsMmwxW3k1 MmwyW2NdXSk7CQkvKiBDUDg1MiAtPiBMYXRpbi0yIC0+IExhdGluLTEgKi8KLX0KLQotQ0hBUgkJ CQkJLyogQ1AxMjUwIHRvIExhdGluLTEgKi8KLSNpZmRlZiBDS19BTlNJQwoteDEyNTBsMShDSEFS IGMpCi0jZWxzZQoteDEyNTBsMShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsg LyogeGwxMjUwbDEgKi8KLSAgICByZXR1cm4oeWwybDFbeTEyNTBsMltjXV0pOwkJLyogQ1AxMjUw IC0+IExhdGluLTIgLT4gTGF0aW4tMSAqLwotfQotCi1DSEFSCQkJCQkvKiBDUDEyNTAgdG8gTGF0 aW4tOSAqLwotI2lmZGVmIENLX0FOU0lDCi14MTI1MGw5KENIQVIgYykKLSNlbHNlCi14MTI1MGw5 KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4MTI1MGw5ICovCi0gICAg aWYgKGMgPT0gKENIQVIpMTI4KQkJCS8qIEV1cm8gKi8KLSAgICAgIHJldHVybigoQ0hBUikxNjQp OwotICAgIGVsc2UKLSAgICAgIHJldHVybih4bDJsOSh5MTI1MGwyW2NdKSk7CS8qIENQMTI1MCAt PiBMYXRpbi0yIC0+IExhdGluLTkgKi8KLX0KLQotQ0hBUgkJCQkJLyogTGF0aW4tMSB0byBDUDg1 MiAqLwotI2lmZGVmIENLX0FOU0lDCi14bDE1MihDSEFSIGMpCi0jZWxzZQoteGwxNTIoYykgQ0hB UiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsbDE1MiAqLwotICAgIHJldHVybih5 bDI1Mlt5bDFsMltjXV0pOwkJLyogTGF0aW4tMSAtPiBMYXRpbi0yIC0+IENQODUyICovCi19Ci0K LUNIQVIJCQkJCS8qIExhdGluLTEgdG8gQ1AxMjUwICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMTEy NTAoQ0hBUiBjKQotI2Vsc2UKLXhsMTEyNTAoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17IC8qIHhsbDExMjUwICovCi0gICAgcmV0dXJuKHlsMjEyNTBbeWwxbDJbY11dKTsJCS8q IExhdGluLTEgLT4gTGF0aW4tMiAtPiBDUDEyNTAgKi8KLX0KLQotQ0hBUgkJCQkJLyogTGF0aW4t OSB0byBDUDEyNTAgKi8KLSNpZmRlZiBDS19BTlNJQwoteGw5MTI1MChDSEFSIGMpCi0jZWxzZQot eGw5MTI1MChjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxsOTEyNTAg Ki8KLSAgICBpZiAoYyA9PSAoQ0hBUikxNjQpCQkJLyogRXVybyAqLwotICAgICAgcmV0dXJuKChD SEFSKTEyOCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHlsMjEyNTBbeGw5bDIoYyldKTsJLyog TGF0aW4tOSAtPiBMYXRpbi0yIC0+IENQMTI1MCAqLwotfQotCi1DSEFSCQkJCQkvKiBMYXRpbi05 IHRvIE1hem92aWEgKi8KLSNpZmRlZiBDS19BTlNJQwoteGw5bXooQ0hBUiBjKQotI2Vsc2UKLXhs OW16KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGw5bXogKi8KLSAg ICByZXR1cm4oeWwybXpbeGw5bDIoYyldKTsJCS8qIExhdGluLTkgLT4gTGF0aW4tMiAtPiBNYXpv dmlhICovCi19Ci0KLUNIQVIJCQkJCS8qIExhdGluLTkgdG8gTWF6b3ZpYSAqLwotI2lmZGVmIENL X0FOU0lDCi14bXphcyhDSEFSIGMpCi0jZWxzZQoteG16YXMoYykgQ0hBUiBjOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi17IC8qIHhtemFzICovCi0gICAgcmV0dXJuKHlsMmFzW3htemwyKGMpXSk7 CQkvKiBNYXpvdmlhIC0+IExhdGluLTIgLT4gQVNDSUkgKi8KLX0KLQotQ0hBUgkJCQkJLyogTGF0 aW4tMiB0byBOZVhUICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMm5lKENIQVIgYykKLSNlbHNlCi14 bDJuZShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxsMm5lICovCi0g ICAgc3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgMTYyOiByZXR1cm4oMTk4KTsJCS8qIEJyZXZlICov Ci0gICAgICBjYXNlIDE2MzogcmV0dXJuKDIzMik7CQkvKiBMIHdpdGggc3Ryb2tlICovCi0gICAg ICBjYXNlIDE3ODogcmV0dXJuKDIwNik7CQkvKiBPZ29uZWsgKi8KLSAgICAgIGNhc2UgMTc5OiBy ZXR1cm4oMjQ4KTsJCS8qIGwgd2l0aCBzdHJva2UgKi8KLSAgICAgIGNhc2UgMTgzOiByZXR1cm4o MjA3KTsJCS8qIENhcm9uICovCi0gICAgICBjYXNlIDE4OTogcmV0dXJuKDIwNSk7CQkvKiBEb3Vi bGUgYWN1dGUgKi8KLSAgICAgIGNhc2UgMjA4OiByZXR1cm4oMTQ0KTsJCS8qIEQgc3Ryb2tlID0g RXRoICovCi0gICAgICBjYXNlIDI0MDogcmV0dXJuKDIzMCk7CQkvKiBkIHN0cm9rZSA9IGV0aCAq LwotICAgICAgY2FzZSAyNTU6IHJldHVybigxOTkpOwkJLyogRG90IGFib3ZlICovCi0gICAgICBk ZWZhdWx0OiAgcmV0dXJuKHlsMW5lW3lsMmwxW2NdXSk7Ci0gICAgfQotfQotCi1DSEFSCQkJCQkv KiBMYXRpbi0yIHRvIENQNDM3ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMjQzKENIQVIgYykKLSNl bHNlCi14bDI0MyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxsMjQz ICovCi0gICAgcmV0dXJuKHlsMWwyW3k0M2wxW2NdXSk7Ci19Ci0KLUNIQVIJCQkJCS8qIExhdGlu LTIgdG8gQ1A4NTAgKi8KLSNpZmRlZiBDS19BTlNJQwoteGwyODUoQ0hBUiBjKQotI2Vsc2UKLXhs Mjg1KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGwyODUgKi8KLSAg ICByZXR1cm4oeWwxbDJbeTg1bDFbY11dKTsKLX0KLQotQ0hBUgkJCQkJLyogTGF0aW4tMiB0byBB cHBsZSAqLwotI2lmZGVmIENLX0FOU0lDCi14bDJhcShDSEFSIGMpCi0jZWxzZQoteGwyYXEoYykg Q0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMmFxICovCi0gICAgcmV0dXJu KHlsMWFxW3lsMmwxW2NdXSk7CQkvKiBDb3VsZCBkbyBtb3JlLi4uICovCi19Ci0KLUNIQVIJCQkJ CS8qIExhdGluLTIgdG8gREdJICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMmRnKENIQVIgYykKLSNl bHNlCi14bDJkZyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxsMmRn ICovCi0gICAgcmV0dXJuKHlkZ2wxW3lsMWwyW2NdXSk7Ci19Ci0KLUNIQVIJCQkJCS8qIExhdGlu LTIgdG8gU2hvcnQgS09JICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMnNrKENIQVIgYykKLSNlbHNl Ci14bDJzayhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxsMnNrICov Ci0gICAgcmV0dXJuKGlzbG93ZXIoYykgPyB0b3VwcGVyKGMpIDogYyk7Ci19Ci0KLUNIQVIJCQkJ CS8qIE5lWFQgdG8gTGF0aW4tMiAqLwotI2lmZGVmIENLX0FOU0lDCi14bmVsMihDSEFSIGMpCi0j ZWxzZQoteG5lbDIoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhuZWwy ICovCi0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDE0NDogcmV0dXJuKDIwOCk7CQkvKiBE IHN0cm9rZSA9IEV0aCAqLwotICAgICAgY2FzZSAxOTg6IHJldHVybigxNjIpOwkJLyogQnJldmUg Ki8KLSAgICAgIGNhc2UgMTk5OiByZXR1cm4oMjU1KTsJCS8qIERvdCBhYm92ZSAqLwotICAgICAg Y2FzZSAyMDU6IHJldHVybigxODkpOwkJLyogRG91YmxlIGFjdXRlICovCi0gICAgICBjYXNlIDIw NjogcmV0dXJuKDE3OCk7CQkvKiBPZ29uZWsgKi8KLSAgICAgIGNhc2UgMjA3OiByZXR1cm4oMTgz KTsJCS8qIENhcm9uICovCi0gICAgICBjYXNlIDIzMDogcmV0dXJuKDI0MCk7CQkvKiBkIHN0cm9r ZSA9IGV0aCAqLwotICAgICAgY2FzZSAyMzI6IHJldHVybigxNjMpOwkJLyogTCB3aXRoIHN0cm9r ZSAqLwotICAgICAgY2FzZSAyNDg6IHJldHVybigxNzkpOwkJLyogbCB3aXRoIHN0cm9rZSAqLwot ICAgICAgZGVmYXVsdDogIHJldHVybih5bDFsMlt5bmVsMVtjXV0pOyAvKiBPdGhlcnMsIGdvIHRo cnUgTGF0aW4tMSAqLwotICAgIH0KLX0KLQotQ0hBUgkJCQkJLyogQ1A0MzcgdG8gTGF0aW4tMiAq LwotI2lmZGVmIENLX0FOU0lDCi14NDNsMihDSEFSIGMpCi0jZWxzZQoteDQzbDIoYykgQ0hBUiBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsNDNsMiAqLwotICAgIHJldHVybih5bDFs Mlt5NDNsMVtjXV0pOwotfQotCi1DSEFSCQkJCQkvKiBDUDg1MCB0byBMYXRpbi0yICovCi0jaWZk ZWYgQ0tfQU5TSUMKLXg4NWwyKENIQVIgYykKLSNlbHNlCi14ODVsMihjKSBDSEFSIGM7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGw4NWwyICovCi0gICAgcmV0dXJuKHlsMWwyW3k4NWwx W2NdXSk7Ci19Ci0KLUNIQVIJCQkJCS8qIEFwcGxlIHRvIExhdGluLTIgKi8KLSNpZmRlZiBDS19B TlNJQwoteGFxbDIoQ0hBUiBjKQotI2Vsc2UKLXhhcWwyKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwoteyAvKiB4bGFxbDIgKi8KLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2Ug MjQ5OiByZXR1cm4oMTYyKTsJCS8qIEJyZXZlIGFjY2VudCAqLwotICAgICAgY2FzZSAyNTA6IHJl dHVybigyNTUpOwkJLyogRG90IGFjY2VudCAqLwotICAgICAgY2FzZSAyNTM6IHJldHVybigxODkp OwkJLyogRG91YmxlIGFjdXRlICovCi0gICAgICBkZWZhdWx0OiByZXR1cm4oeWwxbDJbeWFxbDFb Y11dKTsKLSAgICB9Ci19Ci0KLUNIQVIJCQkJCS8qIERHSSB0byBMYXRpbi0yICovCi0jaWZkZWYg Q0tfQU5TSUMKLXhkZ2wyKENIQVIgYykKLSNlbHNlCi14ZGdsMihjKSBDSEFSIGM7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsgLyogeGxkZ2wyICovCi0gICAgcmV0dXJuKHlsMWwyW3lkZ2wxW2Nd XSk7CQkvKiAoZm9yIG5vdykgKi8KLX0KLQotQ0hBUgkJCQkJLyogU2hvcnQgS09JIHRvIExhdGlu LTIgKi8KLSNpZmRlZiBDS19BTlNJQwoteHNrbDIoQ0hBUiBjKQotI2Vsc2UKLXhza2wyKGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bHNrbDIgKi8KLSAgICByZXR1cm4o aXNsb3dlcihjKSA/IHRvdXBwZXIoYykgOiBjKTsKLX0KLQotQ0hBUgkJCQkJLyogTGF0aW4tMiB0 byBHZXJtYW4gKi8KLSNpZmRlZiBDS19BTlNJQwoteGwyZ2UoQ0hBUiBjKQotI2Vsc2UKLXhsMmdl KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGwyZ2UgKi8KLSAgICBz d2l0Y2goYykgewotICAgICAgY2FzZSAxNjc6IHJldHVybig2NCk7CQkvKiBQYXJhZ3JhcGggc2ln biAqLwotICAgICAgY2FzZSAxOTY6IHJldHVybig5MSk7CQkvKiBBLWRpYWVyZXNpcyAqLwotICAg ICAgY2FzZSAyMTQ6IHJldHVybig5Mik7CQkvKiBPLWRpYWVyZXNpcyAqLwotICAgICAgY2FzZSAy MjA6IHJldHVybig5Myk7CQkvKiBVLWRpYWVyZXNpcyAqLwotICAgICAgY2FzZSAyMjM6IHJldHVy bigxMjYpOwkJLyogZG91YmxlLXMgKi8KLSAgICAgIGNhc2UgMjI4OiByZXR1cm4oMTIzKTsJCS8q IGEtZGlhZXJlc2lzICovCi0gICAgICBjYXNlIDI0NjogcmV0dXJuKDEyNCk7CQkvKiBvLWRpYWVy ZXNpcyAqLwotICAgICAgY2FzZSAyNTI6IHJldHVybigxMjUpOwkJLyogdS1kaWFlcmVzaXMgKi8K LSAgICAgIGRlZmF1bHQ6ICByZXR1cm4oeWwyYXNbY10pOwkvKiBPdGhlcnMgKi8KLSAgICB9Ci19 Ci0KLUNIQVIJCQkJCS8qIEdlcm1hbiB0byBMYXRpbi0yICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhn ZWwyKENIQVIgYykKLSNlbHNlCi14Z2VsMihjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLXsgLyogeGxnZWwyICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7 Ci0gICAgc3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgNjQ6ICByZXR1cm4oMTY3KTsJCS8qIFBhcmFn cmFwaCBzaWduICovCi0gICAgICBjYXNlIDkxOiAgcmV0dXJuKDE5Nik7CQkvKiBBLWRpYWVyZXNp cyAqLwotICAgICAgY2FzZSA5MjogIHJldHVybigyMTQpOwkJLyogTy1kaWFlcmVzaXMgKi8KLSAg ICAgIGNhc2UgOTM6ICByZXR1cm4oMjIwKTsJCS8qIFUtZGlhZXJlc2lzICovCi0gICAgICBjYXNl IDEyMzogcmV0dXJuKDIyOCk7CQkvKiBhLWRpYWVyZXNpcyAqLwotICAgICAgY2FzZSAxMjY6IHJl dHVybigyMjMpOwkJLyogZG91YmxlLXMgKi8KLSAgICAgIGNhc2UgMTI0OiByZXR1cm4oMjQ2KTsJ CS8qIG8tZGlhZXJlc2lzICovCi0gICAgICBjYXNlIDEyNTogcmV0dXJuKDI1Mik7CQkvKiB1LWRp YWVyZXNpcyAqLwotICAgICAgZGVmYXVsdDogIHJldHVybihjKTsJCS8qIE90aGVycyAqLwotICAg IH0KLX0KLQotQ0hBUgkJCQkJLyogTGF0aW4tMiB0byBIdW5nYXJpYW4gKi8KLSNpZmRlZiBDS19B TlNJQwoteGwyaHUoQ0hBUiBjKQotI2Vsc2UKLXhsMmh1KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwoteyAvKiB4bGwyaHUgKi8KLSAgICBzd2l0Y2goYykgewotICAgICAgY2FzZSAx NjQ6IHJldHVybigzNik7CQkvKiBDdXJyZW5jeSBzeW1ib2wgKi8KLSAgICAgIGNhc2UgMTg5OiBy ZXR1cm4oMTI2KTsJCS8qIERvdWJsZSBhY3V0ZSBhY2NlbnQgKi8KLSAgICAgIGNhc2UgMTkzOiBy ZXR1cm4oNjQpOwkJLyogQS1hY3V0ZSAqLwotICAgICAgY2FzZSAyMDE6IHJldHVybig5MSk7CQkv KiBFLWFjdXRlICovCi0gICAgICBjYXNlIDIxNDogcmV0dXJuKDkyKTsJCS8qIE8tZGlhZXJlc2lz ICovCi0gICAgICBjYXNlIDIyMDogcmV0dXJuKDkzKTsJCS8qIFUtZGlhZXJlc2lzICovCi0gICAg ICBjYXNlIDIyNTogcmV0dXJuKDk2KTsJCS8qIGEtYWN1dGUgKi8KLSAgICAgIGNhc2UgMjMzOiBy ZXR1cm4oMTIzKTsJCS8qIGUtYWN1dGUgKi8KLSAgICAgIGNhc2UgMjQ2OiByZXR1cm4oMTI0KTsJ CS8qIG8tZGlhZXJlc2lzICovCi0gICAgICBjYXNlIDI1MjogcmV0dXJuKDEyNSk7CQkvKiB1LWRp YWVyZXNpcyAqLwotICAgICAgZGVmYXVsdDogIHJldHVybih5bDJhc1tjXSk7CS8qIE90aGVycyAq LwotICAgIH0KLX0KLQotQ0hBUgkJCQkJLyogSHVuZ2FyaWFuIHRvIExhdGluLTIgKi8KLSNpZmRl ZiBDS19BTlNJQwoteGh1bDIoQ0hBUiBjKQotI2Vsc2UKLXhodWwyKGMpIENIQVIgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGh1bDIgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAg ICByZXR1cm4oVU5LKTsKLSAgICBzd2l0Y2goYykgewotICAgICAgY2FzZSAzNjogIHJldHVybigx NjQpOwkJLyogQ3VycmVuY3kgc3ltYm9sICovCi0gICAgICBjYXNlIDY0OiAgcmV0dXJuKDE5Myk7 CQkvKiBBLWFjdXRlICovCi0gICAgICBjYXNlIDkxOiAgcmV0dXJuKDIwMSk7CQkvKiBFLWFjdXRl ICovCi0gICAgICBjYXNlIDkyOiAgcmV0dXJuKDIxNCk7CQkvKiBPLWRpYWVyZXNpcyAqLwotICAg ICAgY2FzZSA5MzogIHJldHVybigyMjApOwkJLyogVS1kaWFlcmVzaXMgKi8KLSAgICAgIGNhc2Ug OTY6ICByZXR1cm4oMjI1KTsJCS8qIGEtYWN1dGUgKi8KLSAgICAgIGNhc2UgMTIzOiByZXR1cm4o MjMzKTsJCS8qIGUtYWN1dGUgKi8KLSAgICAgIGNhc2UgMTI0OiByZXR1cm4oMjQ2KTsJCS8qIG8t ZGlhZXJlc2lzICovCi0gICAgICBjYXNlIDEyNTogcmV0dXJuKDI1Mik7CQkvKiB1LWRpYWVyZXNp cyAqLwotICAgICAgY2FzZSAxMjY6IHJldHVybigxODkpOwkJLyogRG91YmxlIGFjdXRlIGFjY2Vu dCAqLwotICAgICAgZGVmYXVsdDogIHJldHVybihjKTsJCS8qIE90aGVycyAqLwotICAgIH0KLX0K LQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14cjhsMihDSEFSIGMpCi0jZWxzZQoteHI4bDIoYykg Q0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhyOGwyICovIC8qIEhld2xldHQg UGFja2FyZCBSb21hbjggdG8gTGF0aW4tMiAqLwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2Fz ZSAyMzU6IHJldHVybigxNjkpOwkJLyogUyBjYXJvbiAqLwotICAgICAgY2FzZSAyMzY6IHJldHVy bigxODUpOwkJLyogcyBjYXJvbiAqLwotICAgICAgZGVmYXVsdDogIHJldHVybih5bDFsMlt5cjhs MVtjXV0pOwotICAgIH0KLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDJyOChDSEFSIGMp Ci0jZWxzZQoteGwycjgoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhs MnI4ICovIC8qIExhdGluLTIgdG8gSGV3bGV0dCBQYWNrYXJkIFJvbWFuOCBDaGFyYWN0ZXIgU2V0 ICovCi0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDE2OTogcmV0dXJuKDIzNSk7CQkvKiBT IGNhcm9uICovCi0gICAgICBjYXNlIDE4NTogcmV0dXJuKDIzNik7CQkvKiBzIGNhcm9uICovCi0g ICAgICBkZWZhdWx0OiAgcmV0dXJuKHlyOGwxW3lsMWwyW2NdXSk7Ci0gICAgfQotfQotCi0jZWxz ZSAvKiBOT0xBVElOMiAqLwotCi0jZGVmaW5lIHhsMW16IE5VTEwKLSNkZWZpbmUgeG16bDEgTlVM TAotI2RlZmluZSB4bDJteiBOVUxMCi0jZGVmaW5lIHhtemwyIE5VTEwKLSNkZWZpbmUgeGw5bXog TlVMTAotI2RlZmluZSB4bXpsOSBOVUxMCi0jZGVmaW5lIHhtemFzIE5VTEwKLQotI2RlZmluZSB4 bDExMjUwIE5VTEwKLSNkZWZpbmUgeGwyMTI1MCBOVUxMCi0jZGVmaW5lIHhsOTEyNTAgTlVMTAot Ci0jZGVmaW5lIHgxMjUwYXMgTlVMTAotI2RlZmluZSB4MTI1MGwxIE5VTEwKLSNkZWZpbmUgeDEy NTBsMiBOVUxMCi0jZGVmaW5lIHgxMjUwbDkgTlVMTAotCi0jZGVmaW5lIHhsMmwxIE5VTEwKLSNk ZWZpbmUgeGwydzEgTlVMTAotI2RlZmluZSB4bDFsMiBOVUxMCi0jZGVmaW5lIHh3MWwyIE5VTEwK LSNkZWZpbmUgeGwyYXMgTlVMTAotI2RlZmluZSB4bDI1MiBOVUxMCi0jZGVmaW5lIHg1MmwyIE5V TEwKLSNkZWZpbmUgeDUyYXMgTlVMTAotI2RlZmluZSB4NTJsMSBOVUxMCi0jZGVmaW5lIHhsMTUy IE5VTEwKLSNkZWZpbmUgeGwybmUgTlVMTAotI2RlZmluZSB4bDI0MyBOVUxMCi0jZGVmaW5lIHhs Mjg1IE5VTEwKLSNkZWZpbmUgeGwyYXEgTlVMTAotI2RlZmluZSB4bDJkZyBOVUxMCi0jZGVmaW5l IHhsMnNrIE5VTEwKLSNkZWZpbmUgeG5lbDIgTlVMTAotI2RlZmluZSB4NDNsMiBOVUxMCi0jZGVm aW5lIHg4NWwyIE5VTEwKLSNkZWZpbmUgeGFxbDIgTlVMTAotI2RlZmluZSB4ZGdsMiBOVUxMCi0j ZGVmaW5lIHhza2wyIE5VTEwKLSNkZWZpbmUgeGwyZ2UgTlVMTAotI2RlZmluZSB4Z2VsMiBOVUxM Ci0jZGVmaW5lIHhsMmh1IE5VTEwKLSNkZWZpbmUgeGh1bDIgTlVMTAotI2RlZmluZSB4bDJyOCBO VUxMCi0jZGVmaW5lIHhyOGwyIE5VTEwKLSNlbmRpZiAvKiBMQVRJTjIgKi8KLQotLyogVGhpcyBv bmUgY2FuIGFsc28gYmUgdXNlZCBmb3IgRUxPVCA5MjcsIEhlYnJldyA3LCBldGMgKi8KLQotQ0hB UgotI2lmZGVmIENLX0FOU0lDCi14YXNzayhDSEFSIGMpCi0jZWxzZQoteGFzc2soYykgQ0hBUiBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhhc3NrICovCQkJCS8qIEFTQ0lJIHRvIFNo b3J0IEtPSSAqLwotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIHJl dHVybigoYyA+IDk1KSA/IChjIC0gMzIpIDogYyk7CS8qIEZvbGQgY29sdW1ucyA2LTcgdG8gNC01 ICovCi19Ci0KLSNpZmRlZiBDWVJJTExJQwotLyogVHJhbnNsYXRpb24gZnVuY3Rpb25zIGZvciBD eXJpbGxpYyBjaGFyYWN0ZXIgc2V0cyAqLwotCi1DSEFSCQkJCQkvKiBMYXRpbi9DeXJpbGxpYyB0 byBDUDg2NiAqLwotI2lmZGVmIENLX0FOU0lDCi14bGNhYyhDSEFSIGMpCi0jZWxzZQoteGxjYWMo YykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsY2FjICovCQkJCS8qIFBD IENvZGUgUGFnZSA4NjYgKi8KLSAgICByZXR1cm4oeWxjYWNbY10pOwotfQotCi1DSEFSCQkJCQkv KiBMYXRpbi9DeXJpbGxpYyB0byAqLwotI2lmZGVmIENLX0FOU0lDCi14bGM1NShDSEFSIGMpCi0j ZWxzZQoteGxjNTUoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsYzU1 ICovCQkJCS8qIFBDIENvZGUgUGFnZSA4NTUgKi8KLSAgICByZXR1cm4oeWxjNTVbY10pOwotfQot Ci1DSEFSCQkJCQkvKiBMYXRpbi9DeXJpbGxpYyB0byAqLwotI2lmZGVmIENLX0FOU0lDCi14bGMx MjUxKENIQVIgYykKLSNlbHNlCi14bGMxMjUxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwoteyAvKiB4bGMxMjUxICovCQkJCS8qIFBDIENvZGUgUGFnZSAxMjUxICovCi0gICAgcmV0 dXJuKHlsYzEyNTFbY10pOwotfQotCi1DSEFSCQkJCQkvKiBMYXRpbi9DeXJpbGxpYyB0by4uLiAq LwotI2lmZGVmIENLX0FOU0lDCi14bGNidShDSEFSIGMpCi0jZWxzZQoteGxjYnUoYykgQ0hBUiBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsY2J1ICovCQkJCS8qIEJ1bGdhcmlhbiBQ QyBDb2RlIFBhZ2UgKi8KLSAgICByZXR1cm4oeWxjYnVbY10pOwotfQotCi1DSEFSCQkJCQkvKiBM YXRpbi9DeXJpbGxpYyB0byBPbGQgS09JLTggKi8KLSNpZmRlZiBDS19BTlNJQwoteGxjazgoQ0hB UiBjKQotI2Vsc2UKLXhsY2s4KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAv KiB4bGNrOCAqLwotICAgIHJldHVybih5bGNrOFtjXSk7Ci19Ci0KLUNIQVIJCQkJCS8qIExhdGlu L0N5cmlsbGljIHRvIEtPSTgtUiAqLwotI2lmZGVmIENLX0FOU0lDCi14bGNrcihDSEFSIGMpCi0j ZWxzZQoteGxja3IoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsY2ty ICovCi0gICAgc3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgMHhhMTogcmV0dXJuKDB4YjMpOwkJLyog SW8gKi8KLSAgICAgIGNhc2UgMHhmMTogcmV0dXJuKDB4YTMpOwkJLyogaW8gKi8KLSAgICAgIGRl ZmF1bHQ6Ci0JaWYgKGMgPiAweDdmICYmIGMgPCAweGMwKQotCSAgcmV0dXJuKFVOSyk7Ci0JcmV0 dXJuKHlsY2s4W2NdKTsKLSAgICB9Ci19Ci0KLUNIQVIJCQkJCS8qIExhdGluL0N5cmlsbGljIHRv ICBLT0k4LVUgKi8KLSNpZmRlZiBDS19BTlNJQwoteGxja3UoQ0hBUiBjKQotI2Vsc2UKLXhsY2t1 KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGNrdSAqLwotICAgIHN3 aXRjaChjKSB7Ci0gICAgICBjYXNlIDB4YTE6IHJldHVybigweGIzKTsJCS8qIElvICovCi0gICAg ICBjYXNlIDB4ZjE6IHJldHVybigweGEzKTsJCS8qIGlvICovCi0gICAgICBjYXNlIDB4ZjQ6IHJl dHVybigweGE0KTsJCS8qIFVrcmFpbmlhbiBpZSAqLwotICAgICAgY2FzZSAweGY2OiByZXR1cm4o MHhhNik7CQkvKiBVa3JhaW5pYW4gaSAqLwotICAgICAgY2FzZSAweGY3OiByZXR1cm4oMHhhNyk7 CQkvKiBVa3JhaW5pYW4geWkgKi8KLSAgICAgIGNhc2UgMHhmMzogcmV0dXJuKDB4YWQpOwkJLyog VWtyYWluaWFuIGdoZSB3aXRoIHVwdHVybiAqLwotICAgICAgY2FzZSAweGE0OiByZXR1cm4oMHhi NCk7CQkvKiBVa3JhaW5pYW4gSWUgKi8KLSAgICAgIGNhc2UgMHhhNjogcmV0dXJuKDB4YjYpOwkJ LyogVWtyYWluaWFuIEkgKi8KLSAgICAgIGNhc2UgMHhhNzogcmV0dXJuKDB4YjcpOwkJLyogVWty YWluaWFuIFlpICovCi0gICAgICBjYXNlIDB4YTM6IHJldHVybigweGJkKTsJCS8qIFVrcmFpbmlh biBHaGUgd2l0aCB1cHR1cm4gKi8KLSAgICAgIGRlZmF1bHQ6Ci0JaWYgKGMgPiAweDdmICYmIGMg PCAweGMwKQotCSAgcmV0dXJuKFVOSyk7Ci0JcmV0dXJuKHlsY2s4W2NdKTsKLSAgICB9Ci19Ci0K LUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGxjc2soQ0hBUiBjKQotI2Vsc2UKLXhsY3NrKGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGNzayAqLwkJCQkvKiBMYXRpbi9D eXJpbGxpYyB0byBTaG9ydCBLT0kgKi8KLSAgICByZXR1cm4oeWxjc2tbY10pOwotfQotCi1DSEFS Ci0jaWZkZWYgQ0tfQU5TSUMKLXhsY2FzKENIQVIgYykKLSNlbHNlCi14bGNhcyhjKSBDSEFSIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxjYXMgKi8JCQkJLyogTGF0aW4vQ3lyaWxs aWMgdG8gQVNDSUkgKi8KLSAgICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09IExfUlVTU0lBTikK LSAgICAgIHJldHVybih5bGNza1tjXSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKChjID4gMTI3 KSA/ICc/JyA6IGMpOwotfQotCi1DSEFSCQkJCQkvKiBDUDg2NiAqLwotI2lmZGVmIENLX0FOU0lD Ci14YWNsYyhDSEFSIGMpCi0jZWxzZQoteGFjbGMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17IC8qIHhhY2xjICovCQkJCS8qIHRvIExhdGluL0N5cmlsbGljICovCi0gICAgcmV0 dXJuKHlhY2xjW2NdKTsKLX0KLQotQ0hBUgkJCQkJLyogQ1A4NTUgKi8KLSNpZmRlZiBDS19BTlNJ QwoteDU1bGMoQ0hBUiBjKQotI2Vsc2UKLXg1NWxjKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwoteyAvKiB4NTVsYyAqLwkJCQkvKiB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIHJl dHVybih5NTVsY1tjXSk7Ci19Ci0KLUNIQVIJCQkJCS8qIEJ1bGdhcmlhbiBQQyBDb2RlIFBhZ2Ug Li4uICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhidWxjKENIQVIgYykKLSNlbHNlCi14YnVsYyhjKSBD SEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGJ1bGMgKi8JCQkJLyogdG8gTGF0 aW4vQ3lyaWxsaWMgKi8KLSAgICByZXR1cm4oeWJ1bGNbY10pOwotfQotCi1DSEFSCQkJCQkvKiBD UDEyNTEgKi8KLSNpZmRlZiBDS19BTlNJQwoteDEyNTFsYyhDSEFSIGMpCi0jZWxzZQoteDEyNTFs YyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeDEyNTFsYyAqLwkJCQkv KiB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIHJldHVybih5MTI1MWxjW2NdKTsKLX0KLQotQ0hB UgkJCQkJLyogT2xkIEtPSS04IHRvIExhdGluL0N5cmlsbGljICovCi0jaWZkZWYgQ0tfQU5TSUMK LXhrOGxjKENIQVIgYykKLSNlbHNlCi14azhsYyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsgLyogeGs4bGMgKi8KLSAgICByZXR1cm4oeWs4bGNbY10pOwotfQotCi1DSEFSCQkJ CQkvKiBLT0k4LVIgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSNpZmRlZiBDS19BTlNJQwoteGtybGMo Q0hBUiBjKQotI2Vsc2UKLXhrcmxjKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot eyAvKiB4a3JsYyAqLwotICAgIGlmIChjID09IDB4YjMpIHJldHVybigweGExKTsKLSAgICBlbHNl IGlmIChjID09IDB4YTMpIHJldHVybigweGYxKTsKLSAgICBlbHNlIGlmIChjID4gMHg3ZiAmJiBj IDwgMHhjMCkKLSAgICAgIHJldHVybihVTkspOwotICAgIHJldHVybih5azhsY1tjXSk7Ci19Ci0K LUNIQVIJCQkJCS8qIEtPSTgtVSB0byBMYXRpbi9DeXJpbGxpYyAqLwotI2lmZGVmIENLX0FOU0lD Ci14a3VsYyhDSEFSIGMpCi0jZWxzZQoteGt1bGMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17IC8qIHhrdWxjICovCi0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDB4YjM6 IHJldHVybigweGExKTsJCS8qIElvICovCi0gICAgICBjYXNlIDB4YTM6IHJldHVybigweGYxKTsJ CS8qIGlvICovCi0gICAgICBjYXNlIDB4YTQ6IHJldHVybigweGY0KTsJCS8qIFVrcmFpbmlhbiBp ZSAqLwotICAgICAgY2FzZSAweGE2OiByZXR1cm4oMHhmNik7CQkvKiBVa3JhaW5pYW4gaSAqLwot ICAgICAgY2FzZSAweGE3OiByZXR1cm4oMHhmNyk7CQkvKiBVa3JhaW5pYW4geWkgKi8KLSAgICAg IGNhc2UgMHhhZDogcmV0dXJuKDB4ZjMpOwkJLyogVWtyYWluaWFuIGdoZSB3aXRoIHVwdHVybiAq LwotICAgICAgY2FzZSAweGI0OiByZXR1cm4oMHhhNCk7CQkvKiBVa3JhaW5pYW4gSWUgKi8KLSAg ICAgIGNhc2UgMHhiNjogcmV0dXJuKDB4YTYpOwkJLyogVWtyYWluaWFuIEkgKi8KLSAgICAgIGNh c2UgMHhiNzogcmV0dXJuKDB4YTcpOwkJLyogVWtyYWluaWFuIFlpICovCi0gICAgICBjYXNlIDB4 YmQ6IHJldHVybigweGEzKTsJCS8qIFVrcmFpbmlhbiBHaGUgd2l0aCB1cHR1cm4gKi8KLSAgICAg IC8qIE5vdGUgc3Vic3RpdHV0aW9uIG9mIEdqZSBmb3IgR2hlLVVwdHVybiwgd2hpY2ggaXMgbm90 IGluIDg4NTktNSAqLwotICAgICAgZGVmYXVsdDoKLQlpZiAoYyA+IDB4N2YgJiYgYyA8IDB4YzAp Ci0JICByZXR1cm4oVU5LKTsKLQlyZXR1cm4oeWs4bGNbY10pOwotICAgIH0KLX0KLQotQ0hBUgot I2lmZGVmIENLX0FOU0lDCi14c2tjeShDSEFSIGMpCi0jZWxzZQoteHNrY3koYykgQ0hBUiBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhza2N5ICovCQkJLyogU2hvcnQgS09JIHRvIExh dGluL0N5cmlsbGljICovCi0gICAgcmV0dXJuKHlza2N5W2MgJiAweDdmXSk7Ci19Ci0KLUNIQVIK LSNpZmRlZiBDS19BTlNJQwoteGFzY3koQ0hBUiBjKQotI2Vsc2UKLXhhc2N5KGMpIENIQVIgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4YXNjeSAqLwkJCS8qIEFTQ0lJIHRvIExhdGlu L0N5cmlsbGljICovCi0gICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX1JVU1NJQU4pIHsg LyogSWYgTEFOR1VBR0UgPT0gUlVTU0lBTiAgKi8KLQlyZXR1cm4oeXNrY3lbYyAmIDB4N2ZdKTsJ LyogdHJlYXQgQVNDSUkgYXMgU2hvcnQgS09JICovCi0gICAgfSBlbHNlIHJldHVybigoYyA+IDEy NykgPyAnPycgOiBjKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14YWNhcyhDSEFSIGMp Ci0jZWxzZQoteGFjYXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhh Y2FzICovCQkJLyogQ1A4NjYgdG8gQVNDSUkgKi8KLSAgICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlk ID09IExfUlVTU0lBTikgewotCWMgPSB5YWNsY1tjXTsJCQkvKiBGaXJzdCB0byBMYXRpbi9DeXJp bGxpYyAqLwotCXJldHVybih5bGNza1tjXSk7CQkvKiBUaGVuIHRvIFNob3J0IEtPSSAqLwotICAg IH0gZWxzZSByZXR1cm4oKGMgPiAxMjcpID8gJz8nIDogYyk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBD S19BTlNJQwoteDU1YXMoQ0hBUiBjKQotI2Vsc2UKLXg1NWFzKGMpIENIQVIgYzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwoteyAvKiB4NTVhcyAqLwkJCS8qIENQODU1IHRvIEFTQ0lJICovCi0gICAg aWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX1JVU1NJQU4pIHsKLQljID0geTU1bGNbY107CQkJ LyogRmlyc3QgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLQlyZXR1cm4oeWxjc2tbY10pOwkJLyogVGhl biB0byBTaG9ydCBLT0kgKi8KLSAgICB9IGVsc2UgcmV0dXJuKChjID4gMTI3KSA/ICc/JyA6IGMp OwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXgxMjUxYXMoQ0hBUiBjKQotI2Vsc2UKLXgx MjUxYXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHgxMjUxYXMgKi8J CQkvKiBDUDgxMjUxIHRvIEFTQ0lJICovCi0gICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBM X1JVU1NJQU4pIHsKLQljID0geTEyNTFsY1tjXTsJCQkvKiBGaXJzdCB0byBMYXRpbi9DeXJpbGxp YyAqLwotCXJldHVybih5bGNza1tjXSk7CQkvKiBUaGVuIHRvIFNob3J0IEtPSSAqLwotICAgIH0g ZWxzZSByZXR1cm4oKGMgPiAxMjcpID8gJz8nIDogYyk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19B TlNJQwoteHNrYXMoQ0hBUiBjKQotI2Vsc2UKLXhza2FzKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwoteyAvKiB4c2thcyAqLwkJCQkvKiBTaG9ydCBLT0kgdG8gQVNDSUkgKi8KLSAg ICByZXR1cm4oKGMgPiA5NSkgPyAnPycgOiBjKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lD Ci14azhhcyhDSEFSIGMpCi0jZWxzZQoteGs4YXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17IC8qIHhrOGFzICovCQkJCS8qIE9sZCBLT0ktOCBDeXJpbGxpYyB0byBBU0NJSSAq LwotICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9SVVNTSUFOKSB7Ci0JYyA9IHlrOGxj W2NdOwkJCS8qIEZpcnN0IHRvIExhdGluL0N5cmlsbGljICovCi0JcmV0dXJuKHlsY3NrW2NdKTsJ CS8qIFRoZW4gdG8gU2hvcnQgS09JICovCi0gICAgfSBlbHNlIHJldHVybigoYyA+IDEyNykgPyAn PycgOiBjKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDFzayhDSEFSIGMpCi0jZWxz ZQoteGwxc2soYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMXNrICov CQkJCS8qIExhdGluLTEgdG8gU2hvcnQgS09JICovCi0gICAgYyA9IHpsMWFzKGMpOwkJCS8qIENv bnZlcnQgdG8gQVNDSUkgKi8KLSAgICByZXR1cm4oYyA9IHhhc3NrKGMpKTsJCS8qIENvbnZlcnQg QVNDSUkgdG8gU2hvcnQgS09JICovCi19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteHcxbGMo Q0hBUiBjKQotI2Vsc2UKLXh3MWxjKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot eyAvKiB4dzFsYyAqLwkJCQkvKiBDUDEyNTIgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICByZXR1 cm4oKGMgPCAxNjApID8geHcxYXMoYykgOiB6bDFhcyhjKSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBD S19BTlNJQwoteGFzbGMoQ0hBUiBjKQotI2Vsc2UKLXhhc2xjKGMpIENIQVIgYzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwoteyAvKiB4YXNsYyAqLwkJCS8qIEFTQ0lJIHRvIExhdGluL0N5cmlsbGlj ICovCi0gICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX1JVU1NJQU4pCi0gICAgICByZXR1 cm4oeXNrY3lbYyAmIDB4N2ZdKTsKLSAgICBlbHNlIHJldHVybihjICYgMHg3Zik7Ci19Ci0KLUNI QVIKLSNpZmRlZiBDS19BTlNJQwoteGFzYWMoQ0hBUiBjKQotI2Vsc2UKLXhhc2FjKGMpIENIQVIg YzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4YXNhYyAqLwkJCS8qIEFTQ0lJIHRvIENQ ODY2ICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgaWYgKGxh bmdzW2xhbmd1YWdlXS5pZCA9PSBMX1JVU1NJQU4pIHsgLyogVXNlIFNob3J0IEtPSSAqLwotCWMg PSB4c2tjeShjKTsJCQkvKiBUcmFuc2xhdGUgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLQlyZXR1cm4o eWxjYWNbY10pOwkJLyogVGhlbiB0byBDUDg2NiAqLwotICAgIH0gZWxzZSByZXR1cm4oYyAmIDB4 N2YpOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhhczU1KENIQVIgYykKLSNlbHNlCi14 YXM1NShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGFzNTUgKi8JCQkv KiBBU0NJSSB0byBDUDg1NSAqLwotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTksp OwotICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9SVVNTSUFOKSB7IC8qIFVzZSBTaG9y dCBLT0kgKi8KLQljID0geHNrY3koYyk7CQkJLyogVHJhbnNsYXRlIHRvIExhdGluL0N5cmlsbGlj ICovCi0JcmV0dXJuKHlsYzU1W2NdKTsJCS8qIFRoZW4gdG8gQ1A4NjYgKi8KLSAgICB9IGVsc2Ug cmV0dXJuKGMgJiAweDdmKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14YXMxMjUxKENI QVIgYykKLSNlbHNlCi14YXMxMjUxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot eyAvKiB4YXMxMjUxICovCQkJLyogQVNDSUkgdG8gQ1A4MTI1MSAqLwotICAgIGlmIChjICYgMHg4 MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9S VVNTSUFOKSB7IC8qIFVzZSBTaG9ydCBLT0kgKi8KLQljID0geHNrY3koYyk7CQkJLyogVHJhbnNs YXRlIHRvIExhdGluL0N5cmlsbGljICovCi0JcmV0dXJuKHlsYzEyNTFbY10pOwkJLyogVGhlbiB0 byBDUDg2NiAqLwotICAgIH0gZWxzZSByZXR1cm4oYyAmIDB4N2YpOwotfQotCi1DSEFSCi0jaWZk ZWYgQ0tfQU5TSUMKLXhhc2s4KENIQVIgYykKLSNlbHNlCi14YXNrOChjKSBDSEFSIGM7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGFzazggKi8JCQkvKiBBU0NJSSB0byBLT0ktOCAqLwot ICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIGlmIChsYW5nc1tsYW5n dWFnZV0uaWQgPT0gTF9SVVNTSUFOKSB7IC8qIFVzZSBTaG9ydCBLT0kgKi8KLQljID0geHNrY3ko Yyk7CQkJLyogVHJhbnNsYXRlIHRvIExhdGluL0N5cmlsbGljICovCi0JcmV0dXJuKHlsY2s4W2Nd KTsJCS8qIFRoZW4gdG8gS09JLTggKi8KLSAgICB9IGVsc2UgcmV0dXJuKGMgJiAweDdmKTsKLX0K LSNlbHNlIC8qIE5vIEN5cmlsbGljICovCi0jZGVmaW5lIHhhY2FzIE5VTEwKLSNkZWZpbmUgeDU1 YXMgTlVMTAotI2RlZmluZSB4MTI1MWFzIE5VTEwKLSNkZWZpbmUgeGFjbGMgTlVMTAotI2RlZmlu ZSB4NTVsYyBOVUxMCi0jZGVmaW5lIHgxMjUxbGMgTlVMTAotI2RlZmluZSB4YXNhYyBOVUxMCi0j ZGVmaW5lIHhhczU1IE5VTEwKLSNkZWZpbmUgeGFzMTI1MSBOVUxMCi0jZGVmaW5lIHhhc2N5IE5V TEwKLSNkZWZpbmUgeGFzazggTlVMTAotI2RlZmluZSB4YXNsYyBOVUxMCi0jZGVmaW5lIHhhc3Nr IE5VTEwKLSNkZWZpbmUgeGs4YXMgTlVMTAotI2RlZmluZSB4azhsYyBOVUxMCi0jZGVmaW5lIHhr cmxjIE5VTEwKLSNkZWZpbmUgeGt1bGMgTlVMTAotI2RlZmluZSB4bDFzayBOVUxMCi0jZGVmaW5l IHh3MWxjIE5VTEwKLSNkZWZpbmUgeGxjYWMgTlVMTAotI2RlZmluZSB4bGM1NSBOVUxMCi0jZGVm aW5lIHhsYzEyNTEgTlVMTAotI2RlZmluZSB4bGNhcyBOVUxMCi0jZGVmaW5lIHhsY2s4IE5VTEwK LSNkZWZpbmUgeGxja3IgTlVMTAotI2RlZmluZSB4bGNrdSBOVUxMCi0jZGVmaW5lIHhsY2g3IE5V TEwKLSNkZWZpbmUgeGxjc2sgTlVMTAotI2RlZmluZSB4c2thcyBOVUxMCi0jZGVmaW5lIHhza2N5 IE5VTEwKLSNkZWZpbmUgeGJ1bGMgTlVMTAotI2RlZmluZSB4bGNidSBOVUxMCi0jZW5kaWYgLyog Q1lSSUxMSUMgKi8KLQotLyogVHJhbnNsYXRpb24gZnVuY3Rpb25zIGZvciBIZWJyZXcgY2hhcmFj dGVyIHNldHMgKi8KLQotI2lmZGVmIEhFQlJFVwotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhh c2g3KENIQVIgYykKLSNlbHNlCi14YXNoNyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLXsgLyogeGFzaDcgKi8JCQkvKiBBU0NJSSB0byBIZWJyZXctNyAqLwotICAgIGlmIChjICYg MHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIGlmIChjID09IDk2KSByZXR1cm4oJz8nKTsK LSAgICBpZiAoYyA+IDk2ICYmIGMgPCAxMjMpIHJldHVybihjIC0gMzIpOwotICAgIGVsc2UgcmV0 dXJuKGMpOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMWg3KENIQVIgYykKLSNlbHNl Ci14bDFoNyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxaDcgKi8J CQkvKiBMYXRpbi0xIHRvIEhlYnJldy03ICovCi0gICAgcmV0dXJuKHhhc2g3KHhsMWFzKGMpKSk7 Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGwxbGgoQ0hBUiBjKQotI2Vsc2UKLXhsMWxo KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDFsaCAqLwkJCQkvKiBM YXRpbi0xIHRvIExhdGluL0hlYnJldyAqLwotICAgIHN3aXRjaChjKSB7Ci0gICAgICBjYXNlIDE3 MDogcmV0dXJuKCdhJyk7CQkvKiBGZW1pbmluZSBvcmRpbmFsICovCi0gICAgICBjYXNlIDE4Njog cmV0dXJuKCdvJyk7CQkvKiBNYXNjdWxpbmUgb3JkaW5hbCAqLwotICAgICAgY2FzZSAyMTU6IHJl dHVybigxNzApOwkJLyogVGltZXMgKi8KLSAgICAgIGNhc2UgMjQ3OiByZXR1cm4oMTg2KTsJCS8q IERpdmlkZSAqLwotICAgICAgZGVmYXVsdDogIHJldHVybiggKGMgPiAxOTApID8geGwxYXMoYykg OiBjICk7Ci0gICAgfQotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXh3MWxoKENIQVIgYykK LSNlbHNlCi14dzFsaChjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeHcx bGggKi8JCQkJLyogQ1AxMjUyIHRvIExhdGluL0hlYnJldyAqLwotICAgIHN3aXRjaChjKSB7Ci0g ICAgICBjYXNlIDE3MDogcmV0dXJuKCdhJyk7CQkvKiBGZW1pbmluZSBvcmRpbmFsICovCi0gICAg ICBjYXNlIDE4NjogcmV0dXJuKCdvJyk7CQkvKiBNYXNjdWxpbmUgb3JkaW5hbCAqLwotICAgICAg Y2FzZSAyMTU6IHJldHVybigxNzApOwkJLyogVGltZXMgKi8KLSAgICAgIGNhc2UgMjQ3OiByZXR1 cm4oMTg2KTsJCS8qIERpdmlkZSAqLwotICAgICAgZGVmYXVsdDoKLQlpZiAoYyA8IDE2MCkKLQkg IHJldHVybih4dzFhcyhjKSk7Ci0JZWxzZQotCSAgcmV0dXJuKChjID4gMTkwKSA/IHhsMWFzKGMp IDogYyk7Ci0gICAgfQotfQotCi0jaWZkZWYgTEFUSU4yCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMK LXhsMmg3KENIQVIgYykKLSNlbHNlCi14bDJoNyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsgLyogeGwyaDcgKi8JCQkJLyogTGF0aW4tMiB0byBIZWJyZXctNyAqLwotICAgIHJl dHVybih4YXNoNyh4bDJhcyhjKSkpOwotfQotI2Vsc2UKLSNkZWZpbmUgeGwyaDcgTlVMTAotI2Vu ZGlmIC8qIExBVElOMiAqLwotCi0jaWZuZGVmIE5PQ1lSSUwKLUNIQVIKLSNpZmRlZiBDS19BTlNJ QwoteGxjaDcoQ0hBUiBjKQotI2Vsc2UKLXhsY2g3KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwoteyAvKiB4bGNoNyAqLwkJCQkvKiBMYXRpbi9DeXJpbGxpYyB0byBIZWJyZXctNyAq LwotICAgIHJldHVybih4YXNoNyh4bGNhcyhjKSkpOwotfQotI2VuZGlmIC8qIE5PQ1lSSUwgKi8K LQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bGhhcyhDSEFSIGMpCi0jZWxzZQoteGxoYXMoYykg Q0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsaGFzICovCQkJLyogTGF0aW4v SGVicmV3IHRvIEFTQ0lJICovCi0gICAgcmV0dXJuKCAoYyA+IDEyNykgPyAnPycgOiBjICk7Ci19 Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGxobDEoQ0hBUiBjKQotI2Vsc2UKLXhsaGwxKGMp IENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGhsMSAqLwkJCS8qIExhdGlu L0hlYnJldyB0byBMYXRpbi0xICovCi0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDE3MDog cmV0dXJuKDIxNSk7Ci0gICAgICBjYXNlIDE4NjogcmV0dXJuKDI0Nyk7Ci0gICAgICBkZWZhdWx0 OiByZXR1cm4oIChjID4gMTkwKSA/ICc/JyA6IGMgKTsKLSAgICB9Ci19Ci0KLUNIQVIKLSNpZmRl ZiBDS19BTlNJQwoteGxodzEoQ0hBUiBjKQotI2Vsc2UKLXhsaHcxKGMpIENIQVIgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGh3MSAqLwkJCS8qIExhdGluL0hlYnJldyB0byBDUDEy NTIgKi8KLSAgICBpZiAoYyA+IDEyNyAmJiBjIDwgMTYwKQotICAgICAgcmV0dXJuKCc/Jyk7Ci0g ICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDE3MDogcmV0dXJuKDIxNSk7Ci0gICAgICBjYXNl IDE4NjogcmV0dXJuKDI0Nyk7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4oIChjID4gMTkwKSA/ICc/ JyA6IGMgKTsKLSAgICB9Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGxoNjIoQ0hBUiBj KQotI2Vsc2UKLXhsaDYyKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4 bGg2MiAqLwkJCS8qIExhdGluL0hlYnJldyB0byBDUDg2MiAqLwotICAgIHJldHVybih5bGg2Mltj XSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGwxNjIoQ0hBUiBjKQotI2Vsc2UKLXhs MTYyKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDE2MiAqLwkJCS8q IExhdGluLTEgdG8gQ1A4NjIgKi8KLSAgICByZXR1cm4oeGxoNjIoeGwxbGgoYykpKTsJLyogVmlh IExhdGluL0hlYnJldyAqLwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsaGg3KENIQVIg YykKLSNlbHNlCi14bGhoNyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyog eGxoaDcgKi8JCQkvKiBMYXRpbi9IZWJyZXcgdG8gSGVicmV3LTcgKi8KLSAgICByZXR1cm4oeWxo aDdbY10pOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhoN2FzKENIQVIgYykKLSNlbHNl Ci14aDdhcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGg3YXMgKi8J CQkvKiBIZWJyZXctNyB0byBBU0NJSSAqLwotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVy bihVTkspOwotICAgIHJldHVybiggKGMgPiA5NSAmJiBjIDwgMTIzKSA/ICc/JyA6IGMgKTsKLX0K LQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14NjJsaChDSEFSIGMpCi0jZWxzZQoteDYybGgoYykg Q0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHg2MmxoICovCQkJLyogQ1A4NjIg dG8gTGF0aW4vSGVicmV3ICovCi0gICAgcmV0dXJuKHk2MmxoW2NdKTsKLX0KLQotQ0hBUgotI2lm ZGVmIENLX0FOU0lDCi14NjJhcyhDSEFSIGMpCi0jZWxzZQoteDYyYXMoYykgQ0hBUiBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHg2MmFzICovCQkJLyogQ1A4NjIgdG8gQVNDSUkgKi8K LSAgICByZXR1cm4oIHhsaGFzKHg2MmxoKGMpKSApOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5T SUMKLXg2MmwxKENIQVIgYykKLSNlbHNlCi14NjJsMShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsgLyogeDYybDEgKi8JCQkvKiBDUDg2MiB0byBMYXRpbi0xICovCi0gICAgcmV0 dXJuKCB4bGhsMSh4NjJsaChjKSkgKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14aDds aChDSEFSIGMpCi0jZWxzZQoteGg3bGgoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17IC8qIHhoN2xoICovCQkJLyogSGVicmV3LTcgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgaWYg KGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgcmV0dXJuKHloN2xoW2NdKTsKLX0K LQotI2Vsc2UgLyogTm8gSGVicmV3ICovCi0KLSNkZWZpbmUgeGFzaDcgTlVMTAotI2RlZmluZSB4 bDFoNyBOVUxMCi0jZGVmaW5lIHhsMmg3IE5VTEwKLSNkZWZpbmUgeGxjaDcgTlVMTAotI2RlZmlu ZSB4bDFsaCBOVUxMCi0jZGVmaW5lIHh3MWxoIE5VTEwKLSNkZWZpbmUgeGxoYXMgTlVMTAotI2Rl ZmluZSB4bGhsMSBOVUxMCi0jZGVmaW5lIHhsaHcxIE5VTEwKLSNkZWZpbmUgeGwxNjIgTlVMTAot I2RlZmluZSB4bGhoNyBOVUxMCi0jZGVmaW5lIHhsaDYyIE5VTEwKLSNkZWZpbmUgeGg3YXMgTlVM TAotI2RlZmluZSB4NjJhcyBOVUxMCi0jZGVmaW5lIHg2MmwxIE5VTEwKLSNkZWZpbmUgeGg3bGgg TlVMTAotI2RlZmluZSB4NjJsaCBOVUxMCi0KLSNlbmRpZiAvKiBIRUJSRVcgKi8KLQotLyogVHJh bnNsYXRpb24gZnVuY3Rpb25zIGZvciBHcmVlayBjaGFyYWN0ZXIgc2V0cyAqLwotCi0jaWZkZWYg R1JFRUsKLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14YXNlZyhDSEFSIGMpCi0jZWxzZQoteGFz ZWcoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhhc2VnICovCQkJLyog QVNDSUkgdG8gRUxPVCA5MjcgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5L KTsKLSAgICBpZiAoYyA+IDk2ICYmIGMgPCAxMjMpIHJldHVybihjIC0gMzIpOwotICAgIGVsc2Ug cmV0dXJuKGMpOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMWVnKENIQVIgYykKLSNl bHNlCi14bDFlZyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxZ2Ug Ki8JCQkvKiBMYXRpbi0xIHRvIEVMT1QgOTI3ICovCi0gICAgcmV0dXJuKHhhc2VnKHhsMWFzKGMp KSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGwybGcoQ0hBUiBjKQotI2Vsc2UKLXhs MmxnKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDJsZyAqLwkJCS8q IExhdGluLTEgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICBpZiAoYyA8IDE2MCkgcmV0dXJuKGMpOwot ICAgIGVsc2UgaWYgKGMgPT0gMTYwIHx8IGMgPT0gMTY4IHx8IGMgPT0gMTczIHx8IGMgPT0gMTc0 KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgcmV0dXJuKCc/Jyk7Ci19Ci0KLUNIQVIKLSNp ZmRlZiBDS19BTlNJQwoteGwxbGcoQ0hBUiBjKQotI2Vsc2UKLXhsMWxnKGMpIENIQVIgYzsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDFsZyAqLwkJCS8qIExhdGluLTEgdG8gTGF0aW4v R3JlZWsgKi8KLSAgICBpZiAoYyA8IDE2MCkgcmV0dXJuKGMpOwotICAgIHN3aXRjaChjKSB7Ci0g ICAgICBjYXNlIDE2MDoJCQkJLyogVGhlbXNlbHZlcyAqLwotICAgICAgY2FzZSAxNjQ6Ci0gICAg ICBjYXNlIDE2NjoKLSAgICAgIGNhc2UgMTY3OgotICAgICAgY2FzZSAxNjg6Ci0gICAgICBjYXNl IDE2OToKLSAgICAgIGNhc2UgMTcxOgotICAgICAgY2FzZSAxNzI6Ci0gICAgICBjYXNlIDE3MzoK LSAgICAgIGNhc2UgMTc2OgotICAgICAgY2FzZSAxNzc6Ci0gICAgICBjYXNlIDE3ODoKLSAgICAg IGNhc2UgMTc5OgotICAgICAgY2FzZSAxODA6Ci0gICAgICBjYXNlIDE4NzoKLSAgICAgIGNhc2Ug MTg5OgotCXJldHVybihjKTsKLSAgICAgIGNhc2UgMTgxOgkJCQkvKiBMb3dlcmNhc2UgbXUgKi8K LQlyZXR1cm4oMjM2KTsKLSAgICAgIGRlZmF1bHQ6Ci0JcmV0dXJuKFVOSyk7Ci0gICAgfQotfQot Ci1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXh3MWxnKENIQVIgYykKLSNlbHNlCi14dzFsZyhjKSBD SEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeHcxbGcgKi8JCQkJLyogQ1AxMjUy IHRvIExhdGluL0dyZWVrICovCi0gICAgcmV0dXJuKChjIDwgMTYwKSA/IHh3MWFzKGMpIDogeGwx bGcoYykpOwotfQotCi0KLSNpZmRlZiBMQVRJTjIKLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGwy ZWcoQ0hBUiBjKQotI2Vsc2UKLXhsMmVnKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwoteyAvKiB4bDJlZyAqLwkJCQkvKiBMYXRpbi0yIHRvIEVMT1QgOTI3ICovCi0gICAgcmV0dXJu KHhhc2VnKHhsMmFzKGMpKSk7Ci19Ci0jZWxzZQotI2RlZmluZSB4bDJlZyBOVUxMCi0jZW5kaWYg LyogTEFUSU4yICovCi0KLSNpZm5kZWYgTk9DWVJJTAotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14 bGNlZyhDSEFSIGMpCi0jZWxzZQoteGxjZWcoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17IC8qIHhsY2VnICovCQkJLyogTGF0aW4vQ3lyaWxsaWMgdG8gRUxPVCA5MjcgKi8KLSAg ICByZXR1cm4oeGFzZWcoeGxjYXMoYykpKTsKLX0KLSNlbmRpZiAvKiBOT0NZUklMICovCi0KLUNI QVIKLSNpZmRlZiBDS19BTlNJQwoteGxnYXMoQ0hBUiBjKQotI2Vsc2UKLXhsZ2FzKGMpIENIQVIg YzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGdhcyAqLwkJCS8qIExhdGluL0dyZWVr IHRvIEFTQ0lJICovCi0gICAgcmV0dXJuKCAoYyA+IDEyNykgPyAnPycgOiBjICk7Ci19Ci0KLUNI QVIKLSNpZmRlZiBDS19BTlNJQwoteGxnbDEoQ0hBUiBjKQotI2Vsc2UKLXhsZ2wxKGMpIENIQVIg YzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGdsMSAqLwkJCS8qIExhdGluL0dyZWVr IHRvIExhdGluLTEgKi8KLSAgICBpZiAoYyA9PSAyMzYpCi0gICAgICByZXR1cm4oMTgxKTsKLSAg ICBlbHNlCi0gICAgICByZXR1cm4oeGwxbGcoYykpOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5T SUMKLXhsZ3cxKENIQVIgYykKLSNlbHNlCi14bGd3MShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsgLyogeGxndzEgKi8JCQkvKiBMYXRpbi9HcmVlayB0byBMYXRpbi0xICovCi0g ICAgaWYgKGMgPiAxMjcgJiYgYyA8IDE2MCkKLSAgICAgIHJldHVybignPycpOwotICAgIHJldHVy bih4bGdsMShjKSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGxnNjkoQ0hBUiBjKQot I2Vsc2UKLXhsZzY5KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGc2 OSAqLwkJCS8qIExhdGluL0dyZWVrIHRvIENQODY5ICovCi0gICAgcmV0dXJuKHlsZzY5W2NdKTsK LX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDE2OShDSEFSIGMpCi0jZWxzZQoteGwxNjko YykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMTY5ICovCQkJLyogTGF0 aW4tMSB0byBDUDg2OSAqLwotICAgIHJldHVybih4bGc2OSh4bDFsZyhjKSkpOwkvKiBWaWEgTGF0 aW4vR3JlZWsgKi8KLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bGdlZyhDSEFSIGMpCi0j ZWxzZQoteGxnZWcoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsZ2Vn ICovCQkJLyogTGF0aW4vR3JlZWsgdG8gRUxPVCA5MjcgKi8KLSAgICByZXR1cm4oeWxnZWdbY10p OwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhlZ2FzKENIQVIgYykKLSNlbHNlCi14ZWdh cyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGVnYXMgKi8JCQkvKiBF TE9UIDkyNyB0byBBU0NJSSAqLwotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTksp OwotICAgIHJldHVybiggKGMgPiA5NiAmJiBjIDwgMTIzKSA/ICc/JyA6IGMgKTsKLX0KLQotQ0hB UgotI2lmZGVmIENLX0FOU0lDCi14NjlsZyhDSEFSIGMpCi0jZWxzZQoteDY5bGcoYykgQ0hBUiBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHg2OWxnICovCQkJLyogQ1A4NjkgdG8gTGF0 aW4vR3JlZWsgKi8KLSAgICByZXR1cm4oeTY5bGdbY10pOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tf QU5TSUMKLXg2OWFzKENIQVIgYykKLSNlbHNlCi14NjlhcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsgLyogeDY5YXMgKi8JCQkvKiBDUDg2OSB0byBBU0NJSSAqLwotICAgIHJl dHVybiggeGxnYXMoeDY5bGcoYykpICk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteDY5 bDEoQ0hBUiBjKQotI2Vsc2UKLXg2OWwxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwoteyAvKiB4NjlsMSAqLwkJCS8qIENQODY5IHRvIExhdGluLTEgKi8KLSAgICByZXR1cm4oIHhs Z2wxKHg2OWxnKGMpKSApOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhlZ2xnKENIQVIg YykKLSNlbHNlCi14ZWdsZyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyog eGVnbGcgKi8JCQkvKiBFTE9UIDkyNyB0byBMYXRpbi9HcmVlayAqLwotICAgIHJldHVybih5ZWds Z1tjXSk7Ci19Ci0KLSNlbHNlIC8qIE5vIEdyZWVrICovCi0KLSNkZWZpbmUgeDY5YXMgTlVMTAot I2RlZmluZSB4NjlsMSBOVUxMCi0jZGVmaW5lIHg2OWxnIE5VTEwKLSNkZWZpbmUgeGFzZWcgTlVM TAotI2RlZmluZSB4ZWdhcyBOVUxMCi0jZGVmaW5lIHhlZ2xnIE5VTEwKLSNkZWZpbmUgeGwxNjkg TlVMTAotI2RlZmluZSB4bDFlZyBOVUxMCi0jZGVmaW5lIHhsMWxnIE5VTEwKLSNkZWZpbmUgeHcx bGcgTlVMTAotI2RlZmluZSB4bDJnZSBOVUxMCi0jZGVmaW5lIHhsMmxnIE5VTEwKLSNkZWZpbmUg eGxjZ2UgTlVMTAotI2RlZmluZSB4bGc2OSBOVUxMCi0jZGVmaW5lIHhsZ2FzIE5VTEwKLSNkZWZp bmUgeGxnZWcgTlVMTAotI2RlZmluZSB4bGdnZSBOVUxMCi0jZGVmaW5lIHhsZ2wxIE5VTEwKLSNk ZWZpbmUgeGxndzEgTlVMTAotCi0jZW5kaWYgLyogR1JFRUsgKi8KLQotCi0vKiBUcmFuc2xhdGlv biBmdW5jdGlvbnMgZm9yIEphcGFuZXNlIEthbmppIGNoYXJhY3RlciBzZXRzICovCi0KLSNpZmRl ZiBLQU5KSQotLyoKLSAgVHJhbnNsYXRlIEthbmppIFRyYW5zZmVyIENoYXJhY3RlciBTZXQgKEVV QykgdG8gbG9jYWwgZmlsZSBjaGFyYWN0ZXIgc2V0LAotICBjb250cmlidXRlZCBieSBEci4gSGly b2Z1bWkgRnVqaWksIEphcGFuIEhpZ2ggRW5lcmd5IFJlc2VhcmNoIExhYm9yYXRvcnkKLSAgKEtF SyksIFRva3lvLCBKYXBhbi4KLQotICBhIGlzIGEgYnl0ZSB0byBiZSB0cmFuc2xhdGVkLCB3aGlj aCBtYXkgYmUgYSBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIsCi0gIHRoZSBLYXRha2FuYSBwcmVmaXgs IHRoZSBmaXJzdCBieXRlIG9mIGEgdHdvLWJ5dGUgS2FuamkgY2hhcmFjdGVyLCBvciB0aGUKLSAg c2Vjb25kIGJ5dGUgb2YgMi1ieXRlIEthbmppIGNoYXJhY3Rlci4KLQotICBmbiBpcyB0aGUgb3V0 cHV0IGZ1bmN0aW9uLgotCi0gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgot Ki8KLQotX1BST1RPVFlQKHN0YXRpYyBpbnQganBueGFzLCAoaW50LCBpbnRbXSkgKTsKLV9QUk9U T1RZUChzdGF0aWMgaW50IGpwbnhrdCwgKGludCwgaW50W10pICk7Ci1fUFJPVE9UWVAoc3RhdGlj IGludCBqcG54a24sIChpbnRbXSwgaW50W10pICk7Ci0KLXN0YXRpYyBpbnQganBuY250OwkJCS8q IEJ5dGUgY291bnQgZm9yIEphcGFuZXNlICovCi1zdGF0aWMgaW50IGpwbmxzdDsJCQkvKiBMYXN0 IHN0YXR1cyAoZm9yIEpJUzcpICovCi0KLXN0YXRpYyBpbnQKLWpwbnhhcyhhLCBvYnVmKSBpbnQg YTsgaW50IG9idWZbXTsgeyAvKiBUcmFuc2xhdGUgQVNDSUkgdG8gbG9jYWwgZmlsZSBjb2RlICov Ci0gICAgaW50IHI7Ci0KLSAgICByID0gMDsKLSAgICBpZiAoZmNoYXJzZXQgPT0gRkNfSklTNykg ewotCXN3aXRjaCAoanBubHN0KSB7Ci0JICBjYXNlIDE6Ci0JICAgIG9idWZbMF0gPSAweDBmOwot CSAgICBvYnVmWzFdID0gYTsKLQkgICAgciA9IDI7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAyOgot CSAgICBvYnVmWzBdID0gMHgxYjsKLQkgICAgb2J1ZlsxXSA9IDB4Mjg7Ci0JICAgIG9idWZbMl0g PSAweDRhOwotCSAgICBvYnVmWzNdID0gYTsKLQkgICAgciA9IDQ7Ci0JICAgIGJyZWFrOwotCSAg ZGVmYXVsdDoKLQkgICAgb2J1ZlswXSA9IGE7Ci0JICAgIHIgPSAxOwotCSAgICBicmVhazsKLQl9 Ci0gICAgfSBlbHNlIHsKLQlvYnVmWzBdID0gYTsKLQlyID0gMTsKLSAgICB9Ci0gICAgcmV0dXJu KHIpOwotfQotCi1zdGF0aWMgaW50Ci1qcG54a3QoYSwgb2J1ZikgaW50IGE7IGludCBvYnVmW107 IHsKLS8qIFRyYW5zbGF0ZSBKSVMgWCAyMDEgS2F0YWthbmEgdG8gbG9jYWwgY29kZSAqLwotCi0g ICAgaW50IHI7Ci0KLSAgICByID0gMDsKLSAgICBpZiAoZmNoYXJzZXQgPT0gRkNfSklTNykgewot CXN3aXRjaCAoanBubHN0KSB7Ci0JICBjYXNlIDI6CQkJCS8qIGZyb20gS2FuamkgKi8KLQkgICAg b2J1ZltyKytdID0gMHgxYjsKLQkgICAgb2J1ZltyKytdID0gMHgyODsKLQkgICAgb2J1ZltyKytd ID0gMHg0YTsKLQkgIGNhc2UgMDoJCQkJLyogZnJvbSBSb21hbiAqLwotCSAgICBvYnVmW3IrK10g PSAweDBlOwotCSAgZGVmYXVsdDoKLQkgICAgb2J1ZltyKytdID0gKGEgJiAweDdmKTsKLQkgIGJy ZWFrOwotCX0KLSAgICB9IGVsc2UgewotCWlmIChmY2hhcnNldCA9PSBGQ19KRVVDKQotCSAgb2J1 ZltyKytdID0gMHg4ZTsKLQlvYnVmW3IrK10gPSAoYSB8IDB4ODApOwotICAgIH0KLSAgICByZXR1 cm4ocik7Ci19Ci0KLXN0YXRpYyBpbnQKLWpwbnhrbihpYnVmLCBvYnVmKSBpbnQgaWJ1ZltdLCBv YnVmW107IHsKLSAgICAvKiBUcmFuc2xhdGUgSklTIFggMDIwOCBLYW5qaSB0byBsb2NhbCBjb2Rl ICovCi0gICAgaW50IGMxLCBjMjsKLSAgICBpbnQgcjsKLQotICAgIGMxID0gaWJ1ZlswXSAmIDB4 N2Y7Ci0gICAgYzIgPSBpYnVmWzFdICYgMHg3ZjsKLQotICAgIGlmIChmY2hhcnNldCA9PSBGQ19T SEpJUykgewotCWlmIChjMSAmIDEpCi0JICBjMiArPSAweDFmOwotCWVsc2UKLQkgIGMyICs9IDB4 N2Q7Ci0KLSAgICAgICAgaWYgKGMyID49IDB4N2YpIGMyKys7Ci0KLSAgICAgICAgYzEgPSAoKGMx IC0gMHgyMSkgPj4gMSkgKyAweDgxOwotICAgICAgICBpZiAoYzEgPiAweDlmKSBjMSArPSAweDQw OwotCi0gICAgICAgIG9idWZbMF0gPSBjMTsKLSAgICAgICAgb2J1ZlsxXSA9IGMyOwotICAgICAg ICByID0gMjsKLSAgICB9IGVsc2UgaWYgKGZjaGFyc2V0ID09IEZDX0pJUzcpIHsKLSAgICAgICAg ciA9IDA7Ci0gICAgICAgIHN3aXRjaCAoanBubHN0KSB7Ci0gIAkgIGNhc2UgMToKLQkgICAgb2J1 ZltyKytdID0gMHgwZjsgLyogRnJvbSBLYXRha2FuYSAqLwotICAJICBjYXNlIDA6Ci0JICAgIG9i dWZbcisrXSA9IDB4MWI7Ci0JICAgIG9idWZbcisrXSA9IDB4MjQ7Ci0JICAgIG9idWZbcisrXSA9 IDB4NDI7Ci0JICBkZWZhdWx0OgotCSAgICBvYnVmW3IrK10gPSBjMTsKLQkgICAgb2J1ZltyKytd ID0gYzI7Ci0JICAgIGJyZWFrOwotCX0KLSAgICB9IGVsc2UgewotICAgICAgICBvYnVmWzBdID0g KGMxIHwgMHg4MCk7Ci0gICAgICAgIG9idWZbMV0gPSAoYzIgfCAweDgwKTsKLSAgICAgICAgciA9 IDI7Ci0gICAgfQotICAgIHJldHVybihyKTsKLX0KLQotaW50Ci14a2FuamYoKSB7Ci0vKiBJbml0 aWFsaXplIHBhcmFtZXRlcnMgZm9yIHhrYW5qaSAqLwotLyogVGhpcyBmdW5jdGlvbiBzaG91bGQg YmUgY2FsbGVkIHdoZW4gRi9YLXBhY2tldCBpcyByZWNlaXZlZCAqLwotICAgIGpwbmNudCA9IGpw bmxzdCA9IDA7Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwoteGth bmp6KGludCAoKmZuKShjaGFyKSkKLSNlbHNlCi14a2FuanooZm4pIGludCAoKmZuKSgpOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhrYW5qeiAqLwotLyoKLSAgVGVybWluYXRlIHhrYW5q aQotICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdoZW4gWi1wYWNrZXQgaXMgcmVjZWl2 ZWQKLSAgKGJlZm9yZSBjbG9zaW5nIHRoZSBmaWxlKS4KLSovCi0gICAgc3RhdGljIGludCBvYnVm WzZdOwotICAgIGludCByLCBpLCBjOwotCi0gICAgaWYgKGZjaGFyc2V0ID09IEZDX0pJUzcpIHsK LSAgICAgICAgYyA9ICdBJzsJCQkvKiBEdW1teSBSb21hbiBjaGFyYWN0ZXIgKi8KLSAgICAgICAg ciA9IGpwbnhhcyhjLCBvYnVmKSAtIDE7CS8qIC0xIHJlbW92ZXMgRHVtbXkgY2hhcmFjdGVyICov Ci0gICAgICAgIGlmIChyID4gMCkgewotCSAgICBmb3IgKGkgPSAwOyBpIDwgcjsgaSsrKQotCSAg ICAgIGlmICgoKCpmbikoKGNoYXIpIG9idWZbaV0pKSA8IDApCi0JCXJldHVybigtMSk7Ci0JfQot ICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi14a2Fuamko aW50IGEsIGludCAoKmZuKShjaGFyKSkKLSNlbHNlCi14a2FuamkoYSwgZm4pIGludCBhOyBpbnQg KCpmbikoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4a2FuamkgKi8KLSAgICBzdGF0 aWMgaW50IHhidWZbMl07Ci0gICAgc3RhdGljIGludCBvYnVmWzhdOwotCi0gICAgaW50IGksIHI7 Ci0gICAgaW50IGM3OwotICAgIGludCBzdGF0ZT0wOwotCi0gICAgciA9IDA7Ci0gICAgaWYgKGpw bmNudCA9PSAwKSB7Ci0JLyogMXN0IGJ5dGUgKi8KLQlpZiAoKGEgJiAweDgwKSA9PSAwKSB7Ci0J ICAgIC8qIDh0aCBiaXQgaXMgMCwgaS5lLiwgc2luZ2xlLWJ5dGUgY29kZSAqLwotCSAgICByID0g anBueGFzKGEsIG9idWYpOwotCSAgICBzdGF0ZSA9IDA7Ci0JfSBlbHNlIHsKLQkgICAgLyogOHRo IGJpdCBpcyAxLCBjaGVjayB0aGUgcmFuZ2UgKi8KLQkgICAgYzcgPSBhICYgMHg3ZjsKLQkgICAg aWYgKCgoYzcgPiAweDIwKSAmJiAoYzcgPCAweDdmKSkgfHwgKGM3ID09IDB4MGUpKSB7Ci0JICAg ICAgICAvKiBkb3VibGUgYnl0ZSBjb2RlICovCi0JICAgICAgICB4YnVmW2pwbmNudCsrXSA9IGE7 Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICAvKiBzaW5nbGUgYnl0ZSBjb2RlICovCi0JICAgICAg ICByID0ganBueGFzKGEsIG9idWYpOwotCSAgICAgICAgc3RhdGUgPSAwOwotCSAgICB9Ci0JfQot ICAgIH0gZWxzZSB7Ci0JLyogbm90IHRoZSAxc3QgYnl0ZSAqLwotCXhidWZbanBuY250KytdID0g YTsKLQlpZiAoeGJ1ZlswXSA9PSAweDhlKSB7Ci0JICAgIHIgPSBqcG54a3QoeGJ1ZlsxXSwgb2J1 Zik7Ci0JICAgIHN0YXRlID0gMTsKLQl9IGVsc2UgewotCSAgICByID0ganBueGtuKHhidWYsIG9i dWYpOwotCSAgICBzdGF0ZSA9IDI7Ci0JfQotICAgIH0KLSAgICBpZiAociA+IDApIHsKLSAgICAg ICAgZm9yIChpID0gMDsgaSA8IHI7IGkrKyApCi0JICBpZiAoKCgqZm4pKChjaGFyKSBvYnVmW2ld KSkgPCAwKQotCSAgICByZXR1cm4oLTEpOwotICAgICAgICBqcG5sc3QgPSBzdGF0ZTsKLSAgICAg ICAganBuY250ID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKgotICBGdW5jdGlv biBmb3IgdHJhbnNsYXRpbmcgZnJvbSBKYXBhbmVzZSBmaWxlIGNoYXJhY3RlciBzZXQKLSAgdG8g SmFwYW5lc2UgRVVDIHRyYW5zZmVyIGNoYXJhY3RlciBzZXQuCi0gIFJldHVybnMgYSBwb2ludGVy IHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgMCwgMSwgb3IgMiBieXRlcy4KLSovCi0KLS8qIHprYW5q aSAqLwotc3RhdGljIGludCBqcG5zdHo7CQkJLyogc3RhdHVzIGZvciBKSVMtNyAqLwotc3RhdGlj IGludCBqcG5wbmQ7CQkJLyogbnVtYmVyIG9mIHBlbmRpbmcgYnl0ZXMgKi8KLXN0YXRpYyBpbnQg anBucG50OwkJCS8qIHBlbmRpbmcgYnVmZmVyIGluZGV4ICovCi1zdGF0aWMgaW50IGpwbnBiZls4 XTsJCQkvKiBwZW5kaW5nIGJ1ZmZlciAqLwotCi0vKiBUaGVyZSBpcyBzb21lIGR1cGxpY2F0aW9u IGhlcmUgYmV0d2VlbiB0aGUgb2xkIGFuZCBuZXcgSklTLTcgcGFyc2VycyAqLwotLyogdG8gYmUg Y2xlYW5lZCB1cCBsYXRlci4uLiAqLwotCi1WT0lECi1qN2luaXQoKSB7CQkJCS8qIEluaXRpYWxp emUgSklTLTcgcGFyc2VyICovCi0gICAganBuc3R6ID0gMDsKLSAgICBqcG5wbmQgPSAwOwotICAg IGpwbnBudCA9IDA7Ci19Ci0KLWludAotZ2V0ajcoKSB7CQkJCS8qIFJlYWRzIEpJUy03IHJldHVy bnMgbmV4dCBFVUMgYnl0ZSAqLwotICAgIGludCB4OwotCi0gICAgaWYgKGpwbnBuZCA+IDApIHsJ CQkvKiBJZiBzb21ldGhpbmcgaXMgcGVuZGluZyAqLwotCXggPSAodW5zaWduZWQpIGpwbnBiZltq cG5wbnQrK107IC8qIEdldCBpdCAqLwotCWpwbnBuZC0tOwotCWlmIChqcG5wbmQgPCAwKSBqcG5w bmQgPSAwOwotCXJldHVybigodW5zaWduZWQpeCk7Ci0gICAgfQotICAgIGpwbnBudCA9IDA7Ci0K LSAgICBpZiAoKHggPSB6bWluY2hhcigpKSA8IDApIHJldHVybih4KTsKLSAgICB3aGlsZSAoanBu cG5kID09IDApIHsJCS8qIFdoaWxlIHNvbWV0aGluZyBpcyBwZW5kaW5nLi4uICovCi0JaWYgKCh4 ID4gMHgyMCkgJiYgKHggPCAweDdmKSkgewkvKiA3LWJpdCBncmFwaGljIGNoYXJhY3RlciAqLwot CSAgICBzd2l0Y2ggKGpwbnN0eikgewotCSAgICAgIGNhc2UgMToJCQkgLyogS2F0YWthbmEgKi8K LSNpZmRlZiBDT01NRU5UCi0JCS8qIFRoaXMgY2FuJ3QgYmUgcmlnaHQuLi4gKi8KLQkJanBucGJm W2pwbnBuZCsrXSA9IDB4ODA7IC8qIEluc2VydCBmbGFnIChOT1QgU1MyPz8/KSAqLwotI2Vsc2UK LQkJanBucGJmW2pwbnBuZCsrXSA9IDB4OGU7IC8qIEluc2VydCBTUzIgKi8KLSNlbmRpZiAvKiBD T01NRU5UICovCi0JCWpwbnBiZltqcG5wbmQrK10gPSAoeCB8IDB4ODApOyAvKiBJbnNlcnQgS2Fu YSArIDh0aCBiaXQgKi8KLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAyOgkJCS8qIEthbmppICovCi0J CWpwbnBiZltqcG5wbmQrK10gPSAoeCB8IDB4ODApOyAvKiBHZXQgYW5vdGhlciBieXRlICovCi0J CWlmICgoeCA9IHptaW5jaGFyKCkpIDwgMCkgcmV0dXJuKHgpOwotCQlqcG5wYmZbanBucG5kKytd ID0gKHggfCAweDgwKTsKLQkJYnJlYWs7Ci0JICAgICAgZGVmYXVsdDoJCQkvKiBBU0NJSSAvIEpJ UyBSb21hbiAqLwotCQlqcG5wYmZbanBucG5kKytdID0geDsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9 IGVsc2UgaWYgKHggPT0gMHgwZSkgewkJLyogXk4gPSBTTyAqLwotCSAgICBqcG5zdHogPSAxOwkJ CS8qIEthdGFrYW5hICovCi0JICAgIGlmICgoeCA9IHptaW5jaGFyKCkpIDwgMCkgcmV0dXJuKHgp OwotCX0gZWxzZSBpZiAoeCA9PSAweDBmKSB7CQkvKiBeTyA9IFNJICovCi0JICAgIGpwbnN0eiA9 IDA7CQkJLyogQVNDSUkgLyBKSVMgUm9tYW4gKi8KLQkgICAgaWYgKCh4ID0gem1pbmNoYXIoKSkg PCAwKSByZXR1cm4oeCk7Ci0JfSBlbHNlIGlmICh4ID09IDB4MWIpIHsJCS8qIEVzY2FwZSAqLwot CSAgICBqcG5wYmZbanBucG5kKytdID0geDsJLyogU2F2ZSBpbiBidWZmZXIgKi8KLQkgICAgaWYg KCh4ID0gem1pbmNoYXIoKSkgPCAwKSByZXR1cm4oeCk7Ci0JICAgIGpwbnBiZltqcG5wbmQrK10g PSB4OwkvKiBTYXZlIGluIGJ1ZmZlciAqLwotCSAgICBpZiAoeCA9PSAnJCcpIHsJCS8qIDxFU0M+ JCAqLwotCQlpZiAoKHggPSB6bWluY2hhcigpKSA8IDApIHJldHVybih4KTsKLQkJanBucGJmW2pw bnBuZCsrXSA9IHg7Ci0JCWlmICgoeCA9PSAnQCcpIHx8ICh4ID09ICdCJykpIHsJLyogS2Fuamkg Ki8KLQkJICAgIGpwbnN0eiA9IDI7Ci0JCSAgICBqcG5wbnQgPSBqcG5wbmQgPSAwOwotCQkgICAg aWYgKCh4ID0gem1pbmNoYXIoKSkgPCAwKSByZXR1cm4oeCk7Ci0JCX0KLQkgICAgfSBlbHNlIGlm ICh4ID09ICcoJykgewkvKiA8RVNDPiggPT0gOTQtYnl0ZSBzaW5nbGUtYnl0ZSBzZXQgKi8KLQkJ aWYgKCh4ID0gem1pbmNoYXIoKSkgPCAwKSByZXR1cm4oeCk7Ci0JCWpwbnBiZltqcG5wbmQrK10g PSB4OwotCQlpZiAoKHggPT0gJ0InKSB8fCAoeCA9PSAnSicpKSB7CS8qIEFTQ0lJIG9yIEpJUyBS b21hbiAqLwotCQkgICAganBuc3R6ID0gMDsJCSAgICAgICAgLyogU2V0IHN0YXRlICovCi0JCSAg ICBqcG5wbnQgPSBqcG5wbmQgPSAwOyAgICAgICAgLyogUmVzZXQgcG9pbnRlcnMgKi8KLQkJICAg IGlmICgoeCA9IHptaW5jaGFyKCkpIDwgMCkgcmV0dXJuKHgpOwotCQl9Ci0JICAgIH0gZWxzZSBp ZiAoeCA9PSAweDFiKSB7CS8qIDxFU0M+PEVTQz4gKi8KLQkJanBucG50ID0ganBucG5kID0gMDsJ LyogUmVzZXQgcG9pbnRlcnMsIHN0YXkgaW4gc3RhdGUgKi8KLQkJaWYgKCh4ID0gem1pbmNoYXIo KSkgPCAwKSByZXR1cm4oeCk7Ci0JICAgIH0KLQl9IGVsc2UgewkJCS8qIE5vdCA8RVNDPiAtIGp1 c3Qgc2F2ZSBpdCAqLwotCSAgICBqcG5wYmZbanBucG5kKytdID0geDsKLQl9Ci0gICAgfQotICAg IGpwbnBudCA9IDA7Ci0gICAgeCA9ICh1bnNpZ25lZClqcG5wYmZbanBucG50KytdOwotICAgIGpw bnBuZC0tOwotICAgIHJldHVybigodW5zaWduZWQpeCk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENL X0FOU0lDCi1ldV90b19zaihVU0hPUlQgZXUpCQkJLyogRVVDLUpQIHRvIFNoaWZ0LUpJUyAqLwot I2Vsc2UKLWV1X3RvX3NqKGV1KSBVU0hPUlQgZXU7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSAgICBpbnQgYzEsIGMyOwotICAgIHVuaW9uIGNrX3Nob3J0IGpjb2RlLHNjb2RlOwotCi0gICAg amNvZGUueF9zaG9ydCA9IGV1OwotICAgIGMxID0gKGpjb2RlLnhfY2hhcltieXRlb3JkZXJdICYg MHg3Zik7Ci0gICAgYzIgPSAoamNvZGUueF9jaGFyWzEtYnl0ZW9yZGVyXSAmIDB4N2YpOwotCi0g ICAgaWYgKGMxICYgMSkKLSAgICAgIGMyICs9IDB4MWY7Ci0gICAgZWxzZQotICAgICAgYzIgKz0g MHg3ZDsKLSAgICBpZiAoYzIgPj0gMHg3ZikKLSAgICAgIGMyKys7Ci0gICAgYzEgPSAoKGMxIC0g MHgyMSkgPj4gMSkgKyAweDgxOwotICAgIGlmIChjMSA+IDB4OWYpCi0gICAgICBjMSArPSAweDQw OwotCi0gICAgc2NvZGUueF9jaGFyW2J5dGVvcmRlcl0gPSBjMTsKLSAgICBzY29kZS54X2NoYXJb MS1ieXRlb3JkZXJdID0gYzI7Ci0gICAgcmV0dXJuKHNjb2RlLnhfc2hvcnQpOwotfQotCi0KLVVT SE9SVAotI2lmZGVmIENLX0FOU0lDCi1zal90b19ldShVU0hPUlQgc2opCQkJLyogU2hpZnQtSklT IHRvIEVVQy1KUCAqLwotI2Vsc2UKLXNqX3RvX2V1KHNqKSBVU0hPUlQgc2o7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsKLSAgICB1bmlvbiBja19zaG9ydCBqY29kZSwgc2NvZGU7Ci0gICAgaW50 IGMwLCBjMTsKLQotICAgIHNjb2RlLnhfc2hvcnQgPSBzajsKLSAgICBjMCA9IHNjb2RlLnhfY2hh cltieXRlb3JkZXJdOwkvKiBMZWZ0IChoaSBvcmRlcikgYnl0ZSAqLwotICAgIGMxID0gc2NvZGUu eF9jaGFyWzEtYnl0ZW9yZGVyXTsJLyogUmlnaHQgKGxvIG9yZGVyKSBieXRlICovCi0KLSAgICBp ZiAoKChjMCA+PSAweDgxKSAmJiAoYzAgPD0gMHg5ZikpIHx8IC8qIEhpZ2ggb3JkZXIgYnl0ZSBo YXMgOHRoIGJpdCBzZXQgKi8KLSAgICAgICAgKChjMCA+PSAweGUwKSAmJiAoYzAgPD0gMHhmYykp KSB7IC8qIEthbmppICovCi0JaWYgKGMwIDw9IDB4OWYpCQkJICAvKiBUd28gYnl0ZXMgaW4gKi8K LQkgIGMwIC09IDB4NzE7CQkJICAvKiBEbyB0aGUgc2hpZnRpbmcuLi4gKi8KLQllbHNlCi0JICBj MCAtPSAweGIxOwotCWMwID0gYzAgKiAyICsgMTsKLQlpZiAoYzEgPiAweDdmKSBjMSAtPSAxOwot CWlmIChjMSA+PSAweDllKSB7Ci0JICAgIGMxIC09IDB4N2Q7Ci0JICAgIGMwICs9IDE7Ci0JfSBl bHNlIHsKLQkgICAgYzEgLT0gMHgxZjsKLQl9Ci0JamNvZGUueF9jaGFyW2J5dGVvcmRlcl0gPSAo YzAgfCAweDgwKTsgLyogVHdvIGJ5dGVzIG91dCAqLwotCWpjb2RlLnhfY2hhclsxLWJ5dGVvcmRl cl0gPSAoYzEgfCAweDgwKTsKLQotICAgIH0gZWxzZSBpZiAoYzAgPT0gMCkgewkJLyogU2luZ2xl IGJ5dGUgKi8KLQlpZiAoYzEgPj0gMHhhMSAmJiBjMSA8PSAweGRmKSB7CS8qIEthdGFrYW5hICov Ci0JICAgIGpjb2RlLnhfY2hhcltieXRlb3JkZXJdID0gMHg4ZTsgLyogU1MyICovCi0JICAgIGpj b2RlLnhfY2hhclsxLWJ5dGVvcmRlcl0gPSBjMTsgLyogS2FuYSBjb2RlICovCi0JfSBlbHNlIHsJ CQkvKiBBU0NJSSBvciBDMCAqLwotCSAgICBqY29kZS54X3Nob3J0ID0gYzE7Ci0JfQotICAgIH0g ZWxzZSB7CQkJCS8qIFNvbWV0aGluZyBiYWQgKi8KLQlkZWJ1ZyhGMDAxLCJzal90b19ldSBiYWQg c2oiLCIiLHNqKTsKLQlqY29kZS54X3Nob3J0ID0gMHhmZmZmOwotICAgIH0KLSAgICByZXR1cm4o amNvZGUueF9zaG9ydCk7Ci19Ci0KLWludAotemthbmpmKCkgewkJCQkvKiBJbml0aWFsaXplICov Ci0gICAganBuc3R6ID0ganBucG5kID0ganBucG50ID0gMDsKLSAgICByZXR1cm4oMCk7Ci19Ci0K LWludAotemthbmp6KCkgewotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5T SUMKLXprYW5qaShpbnQgKCpmbikodm9pZCkpCi0jZWxzZQotemthbmppKGZuKSBpbnQgKCpmbiko KTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB6a2FuamkgKi8KLSAgICAvKiBSZWFkIEph cGFuZXNlIGxvY2FsIGNvZGUgYW5kIHRyYW5zbGF0ZSB0byBKYXBhbmVzZSBFVUMgKi8KLSAgICBp bnQgYTsKLSAgICBpbnQgc2NbM107Ci0KLSAgICAvKiBObyBwZW5kaW5nIGNoYXJhY3RlcnMgKi8K LSAgICBpZiAoZmNoYXJzZXQgPT0gRkNfU0hKSVMpIHsJCS8qIFRyYW5zbGF0aW5nIGZyb20gU2hp ZnQtSklTICovCi0gICAgICAgIGlmIChqcG5wbmQpIHsKLSAgICAgICAgICAgIGpwbnBuZC0tOwot ICAgICAgICAgICAgcmV0dXJuKGpwbnBiZltqcG5wbnQrK10pOwotICAgICAgICB9Ci0gICAgICAg IGEgPSAoKmZuKSgpOwotCWpwbnBuZCA9IGpwbnBudCA9IDA7Ci0JaWYgKCgoYSA+PSAweDgxKSAm JiAoYSA8PSAweDlmKSkgfHwKLQkgICAgKChhID49IDB4ZTApICYmIChhIDw9IDB4ZmMpKSkgeyAv KiAyLWJ5dGUgS2FuamkgY29kZSAqLwotCSAgICBzY1swXSA9IGE7Ci0JICAgIGlmICgoc2NbMV0g PSAoKmZuKSgpKSA8IDApCS8qIEdldCBzZWNvbmQgYnl0ZSAqLwotCSAgICAgIHJldHVybihzY1sx XSk7Ci0JICAgIGlmIChzY1swXSA8PSAweDlmKQotCSAgICAgIHNjWzBdIC09IDB4NzE7Ci0JICAg IGVsc2UKLQkgICAgICBzY1swXSAtPSAweGIxOwotCSAgICBzY1swXSA9IHNjWzBdICogMiArIDE7 Ci0JICAgIGlmIChzY1sxXSA+IDB4N2YpCi0JICAgICAgc2NbMV0tLTsKLQkgICAgaWYgKHNjWzFd ID49IDB4OWUpIHsKLQkgICAgICAgIHNjWzFdIC09IDB4N2Q7Ci0JICAgICAgICBzY1swXSsrOwot CSAgICB9IGVsc2UgewotCSAgICAgICAgc2NbMV0gLT0gMHgxZjsKLQkgICAgfQotCSAgICBhID0g KHNjWzBdIHwgMHg4MCk7Ci0JICAgIGpwbnBiZlswXSA9IChzY1sxXSB8IDB4ODApOwotCSAgICBq cG5wbmQgPSAxOwotCSAgICBqcG5wbnQgPSAwOwotCX0gZWxzZSBpZiAoKGEgPj0gMHhhMSkgJiYg KGEgPD0gMHhkZikpIHsgLyogS2F0YWthbmEgKi8KLQkgICAganBucGJmWzBdID0gYTsKLQkgICAg anBucG5kID0gMTsKLQkgICAganBucG50ID0gMDsKLQkgICAgYSA9IDB4OGU7Ci0JfQotCXJldHVy bihhKTsKLSAgICB9IGVsc2UgaWYgKGZjaGFyc2V0ID09IEZDX0pJUzcgKSB7CS8qIDctYml0IEpJ UyBYIDAyMDggKi8KLSAgICAgICAgaWYgKGpwbnBuZCkgewotICAgICAgICAgICAgYSA9IGpwbnBi ZltqcG5wbnQrK107Ci0JICAgIGpwbnBuZC0tOwotICAgICAgICAgICAgcmV0dXJuKGEpOwotICAg ICAgICB9Ci0gICAgICAgIGpwbnBudCA9IDA7Ci0gICAgICAgIGlmICgoYSA9ICgqZm4pKCkpIDwg MCkKLQkgIHJldHVybihhKTsKLSAgICAgICAgd2hpbGUgKGpwbnBuZCA9PSAwKSB7Ci0gICAgICAg ICAgICBpZiAoKGEgPiAweDIwKSAmJiAoYSA8IDB4N2YpKSB7Ci0gICAgICAgICAgICAgICAgc3dp dGNoIChqcG5zdHopIHsKLQkJICBjYXNlIDE6Ci0JCSAgICBqcG5wYmZbanBucG5kKytdID0gMHg4 MDsgLyogS2F0YWthbmEgKi8KLQkJICAgIGpwbnBiZltqcG5wbmQrK10gPSAoYSB8IDB4ODApOwot CQkgICAgYnJlYWs7Ci0JCSAgY2FzZSAyOgotCQkgICAganBucGJmW2pwbnBuZCsrXSA9IChhIHwg MHg4MCk7IC8qIEthbmppICovCi0JCSAgICBpZiAoKGEgPSAoKmZuKSgpKSA8IDApCi0JCSAgICAg IHJldHVybihhKTsKLQkJICAgIGpwbnBiZltqcG5wbmQrK10gPSAoYSB8IDB4ODApOwotCQkgICAg YnJlYWs7Ci0JCSAgZGVmYXVsdDoKLQkJICAgIGpwbnBiZltqcG5wbmQrK10gPSBhOyAvKiBTaW5n bGUgYnl0ZSAqLwotCQkgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg fSBlbHNlIGlmIChhID09IDB4MGUpIHsKLSAgICAgICAgICAgICAgICBqcG5zdHogPSAxOwotICAg ICAgICAgICAgICAgIGlmICgoYSA9ICgqZm4pKCkpIDwgMCkKLQkJICByZXR1cm4oYSk7Ci0gICAg ICAgICAgICB9IGVsc2UgaWYgKGEgPT0gMHgwZikgewotICAgICAgICAgICAgICAgIGpwbnN0eiA9 IDA7Ci0gICAgICAgICAgICAgICAgaWYgKChhID0gKCpmbikoKSkgPCAwKQotCQkgIHJldHVybihh KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYSA9PSAweDFiKSB7Ci0gICAgICAgICAgICAgICAg anBucGJmW2pwbnBuZCsrXSA9IGE7CS8qIEVzY2FwZSAqLwotICAgICAgICAgICAgICAgIGlmICgo YSA9ICgqZm4pKCkpIDwgMCkKLQkJICByZXR1cm4oYSk7Ci0gICAgICAgICAgICAgICAganBucGJm W2pwbnBuZCsrXSA9IGE7Ci0gICAgICAgICAgICAgICAgaWYgKGEgPT0gJyQnKSB7Ci0gICAgICAg ICAgICAgICAgICAgIGlmICgoYSA9ICgqZm4pKCkpIDwgMCkKLQkJICAgICAgcmV0dXJuKGEpOwot ICAgICAgICAgICAgICAgICAgICBqcG5wYmZbanBucG5kKytdID0gYTsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKChhID09ICdAJykgfHwgKGEgPT0gJ0InKSkgewotICAgICAgICAgICAgICAgICAg ICAgICAganBuc3R6ID0gMjsKLQkJCWpwbnBudCA9IGpwbnBuZCA9IDA7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBpZiAoKGEgPSAoKmZuKSgpKSA8IDApCi0JCQkgIHJldHVybihhKTsKLSAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYSA9PSAnKCcpIHsK LSAgICAgICAgICAgICAgICAgICAgaWYgKChhID0gKCpmbikoKSkgPCAwKQotCQkgICAgICByZXR1 cm4oYSk7Ci0gICAgICAgICAgICAgICAgICAgIGpwbnBiZltqcG5wbmQrK10gPSBhOwotICAgICAg ICAgICAgICAgICAgICBpZiAoKGEgPT0gJ0InKSB8fCAoYSA9PSAnSicpKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBqcG5zdHogPSAwOwotCQkJanBucG50ID0ganBucG5kID0gMDsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgoYSA9ICgqZm4pKCkpIDwgMCkKLQkJCSAgcmV0dXJuKGEp OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhID09 IDB4MWIpIHsKLSAgICAgICAgICAgICAgICAgICAganBucG50ID0ganBucG5kID0gMDsKLSAgICAg ICAgICAgICAgICAgICAgaWYgKChhID0gKCpmbikoKSkgPCAwKQotCQkgICAgICByZXR1cm4oYSk7 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg ICBqcG5wYmZbanBucG5kKytdID0gYTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg ICBqcG5wbnQgPSAwOwotICAgICAgICBhID0ganBucGJmW2pwbnBudCsrXTsKLQlqcG5wbmQtLTsK LSAgICAgICAgcmV0dXJuKGEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGEgPSAoKmZuKSgpOwot ICAgICAgICByZXR1cm4oYSk7Ci0gICAgfQotfQotI2VuZGlmIC8qIEtBTkpJICovCi0KLS8qIEV1 cm8gZnVuY3Rpb25zICovCi0KLSNpZmRlZiBMQVRJTjIKLUNIQVIKLSNpZmRlZiBDS19BTlNJQwot eGwybDkoQ0hBUiBjKQotI2Vsc2UKLXhsMmw5KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwoteyAvKiB4bDJsOSAqLyAJCQkJLyogTGF0aW4tMiB0byBMYXRpbi05Li4uICovCi0gICAg c3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDE2OTogcmV0dXJuKChDSEFSKTE2Nik7CS8qIFMgY2Fy b24gKi8KLSAgICAgIGNhc2UgMTg1OiByZXR1cm4oKENIQVIpMTY4KTsJLyogcyBjYXJvbiAqLwot ICAgICAgY2FzZSAxNzQ6IHJldHVybigoQ0hBUikxODApOwkvKiBaIGNhcm9uICovCi0gICAgICBj YXNlIDE5MDogcmV0dXJuKChDSEFSKTE4NCk7CS8qIHogY2Fyb24gKi8KLSAgICAgIGRlZmF1bHQ6 Ci0JcmV0dXJuKHlsMmwxW2NdKTsKLSAgICB9Ci0KLX0KLQotX1BST1RPVFlQKCBDSEFSIHhsMjU4 LCAoIENIQVIgKSApOwotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDI1OChDSEFSIGMpCi0jZWxz ZQoteGwyNTgoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMjU4ICov IAkJCQkvKiBMYXRpbi0yIHRvIENQODU4Li4uICovCi0gICAgcmV0dXJuKGMpOwotfQotI2Vsc2UK LSNkZWZpbmUgeGwybDkgTlVMTAotI2RlZmluZSB4bDI1OCBOVUxMCi0jZW5kaWYgLyogTEFUSU4y ICovCi0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwotemw5YXMoQ0hBUiBjKQotI2Vsc2UKLXpsOWFz KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB6bDlhcyAqLyAJCQkJLyog TGF0aW4tOSB0byBVUyBBU0NJSS4uLiAqLwotICAgIGlmIChjIDwgKENIQVIpMHg4MCkgcmV0dXJu KGMpOwkvKiBTYXZlIGEgZnVuY3Rpb24gY2FsbCAqLwotICAgIHN3aXRjaCAoYykgewotICAgICAg Y2FzZSAweGE0OiByZXR1cm4oVU5LKTsJCS8qIEV1cm8gKi8KLSAgICAgIGNhc2UgMHhhNjogcmV0 dXJuKCdTJyk7CQkvKiBTIENhcm9uICovCi0gICAgICBjYXNlIDB4YTg6IHJldHVybigncycpOwkJ LyogcyBDYXJvbiAqLwotICAgICAgY2FzZSAweGI0OiByZXR1cm4oJ1onKTsJCS8qIFogQ2Fyb24g Ki8KLSAgICAgIGNhc2UgMHhiYzogcmV0dXJuKCdPJyk7CQkvKiBPRSBkaWdyYXBoICovCi0gICAg ICBjYXNlIDB4YmQ6IHJldHVybignbycpOwkJLyogb2UgZGlncmFwaCAqLwotICAgICAgY2FzZSAw eGJlOiByZXR1cm4oJ1knKTsJCS8qIFkgZGlhZXJlc2lzICovCi0gICAgICBkZWZhdWx0OiAgIHJl dHVybih6bDFhcyhjKSk7CS8qIFRoZSByZXN0IGlzIGxpa2UgTGF0aW4tMSAqLwotICAgIH0KLX0K LQotX1BST1RPVFlQKCBDSEFSIHhsOWFzLCAoIENIQVIgKSApOwotQ0hBUgotI2lmZGVmIENLX0FO U0lDCi14bDlhcyhDSEFSIGMpCi0jZWxzZQoteGw5YXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi17IC8qIHhsOWFzICovIAkJCQkvKiBMYXRpbi05IHRvIFVTIEFTQ0lJLi4uICov Ci0gICAgaWYgKGMgPCAoQ0hBUikweDgwKSByZXR1cm4oYyk7CS8qIFNhdmUgYSBmdW5jdGlvbiBj YWxsICovCi0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDB4YTQ6IHJldHVybihVTkspOwkJ LyogRXVybyAqLwotICAgICAgY2FzZSAweGE2OiByZXR1cm4oJ1MnKTsJCS8qIFMgQ2Fyb24gKi8K LSAgICAgIGNhc2UgMHhhODogcmV0dXJuKCdzJyk7CQkvKiBzIENhcm9uICovCi0gICAgICBjYXNl IDB4YjQ6IHJldHVybignWicpOwkJLyogWiBDYXJvbiAqLwotICAgICAgY2FzZSAweGI4OiByZXR1 cm4oJ3onKTsJCS8qIHogQ2Fyb24gKi8KLSAgICAgIGNhc2UgMHhiYzogcmV0dXJuKCdPJyk7CQkv KiBPRSBkaWdyYXBoICovCi0gICAgICBjYXNlIDB4YmQ6IHJldHVybignbycpOwkJLyogb2UgZGln cmFwaCAqLwotICAgICAgY2FzZSAweGJlOiByZXR1cm4oJ1knKTsJCS8qIFkgZGlhZXJlc2lzICov Ci0gICAgICBkZWZhdWx0OiAgIHJldHVybih4bDFhcyhjKSk7CS8qIFRoZSByZXN0IGlzIGxpa2Ug TGF0aW4tMSAqLwotICAgIH0KLX0KLQotQ0hBUgkJCQkJLyogQ1AxMjUyIHRvIExhdGluLTkgKi8K LSNpZmRlZiBDS19BTlNJQwoteHcxbDkoQ0hBUiBjKQotI2Vsc2UKLXh3MWw5KGMpIENIQVIgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4dzFsOSAqLwotICAgIHN3aXRjaCAoYykgewot ICAgICAgY2FzZSAweDgwOiByZXR1cm4oMHhhNCk7CQkvKiBFdXJvIHNpZ24gKi8KLSAgICAgIGNh c2UgMHg4YTogcmV0dXJuKDB4YTYpOwkJLyogUyBjYXJvbiAqLwotICAgICAgY2FzZSAweDhjOiBy ZXR1cm4oMHhiYyk7CQkvKiBPRSAqLwotICAgICAgY2FzZSAweDhlOiByZXR1cm4oMHhiNCk7CQkv KiBaIGNhcm9uICovCi0gICAgICBjYXNlIDB4OWE6IHJldHVybigweGE4KTsJCS8qIHMgY2Fyb24g Ki8KLSAgICAgIGNhc2UgMHg5YzogcmV0dXJuKDB4YmQpOwkJLyogb2UgKi8KLSAgICAgIGNhc2Ug MHg5ZTogcmV0dXJuKDB4YjgpOwkJLyogeiBjYXJvbiAqLwotICAgICAgY2FzZSAweDlmOiByZXR1 cm4oMHhiZSk7CQkvKiBZIGRpYWVyZXNpcyAqLwotICAgICAgY2FzZSAweGE0OgkJCS8qIEN1cnJl bmN5IHNpZ24gKi8KLSAgICAgIGNhc2UgMHhhNjoJCQkvKiBCcm9rZW4gdmVydGljYWwgYmFyICov Ci0gICAgICBjYXNlIDB4YTg6CQkJLyogRGlhZXJlc2lzICovCi0gICAgICBjYXNlIDB4YjQ6CQkJ LyogQWN1dGUgYWNjZW50ICovCi0gICAgICBjYXNlIDB4Yjg6CQkJLyogQ2VkaWxsYSAqLwotICAg ICAgY2FzZSAweGJjOgkJCS8qIDEvNCAqLwotICAgICAgY2FzZSAweGJkOgkJCS8qIDEvMiAqLwot ICAgICAgY2FzZSAweGJlOiByZXR1cm4oJz8nKTsJCS8qIDMvNCAqLwotICAgICAgZGVmYXVsdDog cmV0dXJuKChjIDwgMTYwKSA/IHh3MWFzKGMpIDogYyk7Ci0gICAgfQotfQotCi0jaWZkZWYgTEFU SU4yCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsOWwyKENIQVIgYykKLSNlbHNlCi14bDlsMihj KSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGw5bDIgKi8gCQkJCS8qIExh dGluLTkgdG8gTGF0aW4tMi4uLiAqLwotICAgIGlmIChjIDwgKENIQVIpMHg4MCkgcmV0dXJuKGMp OwkvKiBTYXZlIGEgZnVuY3Rpb24gY2FsbCAqLwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2Fz ZSAweGE0OiByZXR1cm4oVU5LKTsJCS8qIEV1cm8gKi8KLSAgICAgIGNhc2UgMHhhNjogcmV0dXJu KChDSEFSKTB4YTkpOwkvKiBTIENhcm9uICovCi0gICAgICBjYXNlIDB4YTg6IHJldHVybigoQ0hB UikweGI5KTsJLyogcyBDYXJvbiAqLwotICAgICAgY2FzZSAweGI0OiByZXR1cm4oKENIQVIpMHhh ZSk7CS8qIFogQ2Fyb24gKi8KLSAgICAgIGNhc2UgMHhiODogcmV0dXJuKChDSEFSKTB4YWYpOwkv KiB6IENhcm9uICovCi0gICAgICBjYXNlIDB4YmM6IHJldHVybignTycpOwkJLyogT0UgZGlncmFw aCAqLwotICAgICAgY2FzZSAweGJkOiByZXR1cm4oJ28nKTsJCS8qIG9lIGRpZ3JhcGggKi8KLSAg ICAgIGNhc2UgMHhiZTogcmV0dXJuKCdZJyk7CQkvKiBZIGRpYWVyZXNpcyAqLwotICAgICAgZGVm YXVsdDogICByZXR1cm4oeGwxbDIoYykpOwkvKiBUaGUgcmVzdCBpcyBsaWtlIExhdGluLTEgKi8K LSAgICB9Ci19Ci0jZWxzZQotI2RlZmluZSB4bDlsMiBOVUxMCi0jZW5kaWYgLyogTEFUSU4yICov Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGw5NTgoQ0hBUiBjKQotI2Vsc2UKLXhsOTU4KGMp IENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDk1OCAqLyAJCQkJLyogTGF0 aW4tOSB0byBDUDg1OC4uLiAqLwotICAgIGlmIChjID09IDB4YTQpCQkJLyogRXVybyBTeW1ib2wg Ki8KLSAgICAgIHJldHVybigoQ0hBUikweGQ1KTsKLSAgICBlbHNlIGlmIChjID09IDB4OWUpCQkJ LyogVGhpcyB3YXMgY3VycmVuY3kgc3ltYm9sICovCi0gICAgICByZXR1cm4oKENIQVIpMHhjZik7 Ci0gICAgYyA9IHlsMTg1W2NdOwotICAgIHJldHVybihjKTsKLX0KLQotQ0hBUgotI2lmZGVmIENL X0FOU0lDCi14NThhcyhDSEFSIGMpCi0jZWxzZQoteDU4YXMoYykgQ0hBUiBjOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi17IC8qIHg1OGFzICovIAkJCQkvKiBDUDg1OCB0byBVUyBBU0NJSS4uLiAq LwotICAgIGlmIChjID09IDB4ZDUpCQkJLyogRXVybyByYXRoZXIgdGhhbiBkb3RsZXNzIGkgKi8K LSAgICAgIHJldHVybihVTkspOwotICAgIGVsc2UKLSAgICAgIHJldHVybih4ODVhcyhjKSk7CQkJ LyogVGhlIHJlc3QgaXMgbGlrZSBDUDg1MCAqLwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMK LXg1OGwxKENIQVIgYykKLSNlbHNlCi14NThsMShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsgLyogeDU4bDEgKi8gCQkJCS8qIENQODU4IHRvIExhdGluLTEuLi4gKi8KLSAgICBp ZiAoYyA9PSAweGQ1KQkJCS8qIEV1cm8gcmF0aGVyIHRoYW4gZG90bGVzcyBpICovCi0gICAgICBy ZXR1cm4oKENIQVIpMHhhNCk7CQkvKiBSZXR1cm4gY3VycmVuY3kgc3ltYm9sICovCi0gICAgZWxz ZSBpZiAoYyA9PSAweGNmKQkJCS8qIFRoaXMga2VlcHMgaXQgaW52ZXJ0aWJsZSAqLwotICAgICAg cmV0dXJuKChDSEFSKTB4OWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih4ODVsMShjKSk7Ci19 Ci0KLSNpZmRlZiBMQVRJTjIKLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteDU4bDIoQ0hBUiBjKQot I2Vsc2UKLXg1OGwyKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4NThs MiAqLyAJCQkJLyogQ1A4NTggdG8gTGF0aW4tMi4uLiAqLwotICAgIGlmIChjID09IDB4ZDUpCQkJ LyogRXVybyByYXRoZXIgdGhhbiBkb3RsZXNzIGkgKi8KLSAgICAgIHJldHVybigoQ0hBUikweGE0 KTsJCS8qIFJldHVybiBjdXJyZW5jeSBzeW1ib2wgKi8KLSAgICBlbHNlIGlmIChjID09IDB4Y2Yp CQkJLyogVGhpcyBrZWVwcyBpdCBpbnZlcnRpYmxlICovCi0gICAgICByZXR1cm4oKENIQVIpMHg5 ZSk7CQkvKiAoaWYgaXQgZXZlciB3YXMuLi4pICovCi0gICAgZWxzZQkJCQkvKiBPdGhlcndpc2Ug bGlrZSBDUDg1MCAqLwotICAgICAgcmV0dXJuKHg4NWwyKGMpKTsKLX0KLSNlbHNlCi0jZGVmaW5l IHg1OGwyIE5VTEwKLSNlbmRpZiAvKiBMQVRJTjIgKi8KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lD Ci14NThsOShDSEFSIGMpCi0jZWxzZQoteDU4bDkoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17IC8qIHg1OGw5ICovIAkJCQkvKiBDUC04NTggdG8gTGF0aW4tOS4uLiAqLwotICAg IGlmIChjID09IDB4ZDUpCQkJLyogRXVybyByYXRoZXIgdGhhbiBkb3RsZXNzIGkgKi8KLSAgICAg IHJldHVybigoQ0hBUikweGE0KTsJCS8qIFJldHVybiBjdXJyZW5jeSBzeW1ib2wgKi8KLSAgICBl bHNlIGlmIChjID09IDB4Y2YpCQkJLyogVGhpcyBrZWVwcyBpdCBpbnZlcnRpYmxlICovCi0gICAg ICByZXR1cm4oKENIQVIpMHg5ZSk7CQkvKiAoaWYgaXQgZXZlciB3YXMuLi4pICovCi0gICAgZWxz ZQkJCQkvKiBPdGhlcndpc2UgbGlrZSBDUDg1MCAqLwotICAgICAgcmV0dXJuKHg4NWwxKGMpKTsJ CQkvKiB0byBMYXRpbi0xICovCi19Ci0KLS8qIEVuZCBFdXJvIGZ1bmN0aW9ucyAqLwotCi0KLS8q ICBUQUJMRVMgT0YgVFJBTlNMQVRJT04gRlVOQ1RJT05TICovCi0KLS8qCi0gIEZpcnN0LCB0aGUg dGFibGUgb2YgdHJhbnNsYXRpb24gZnVuY3Rpb25zIGZvciBSRUNFSVZJTkcgZmlsZXMuICBUaGF0 IGlzLAotICAqZnJvbSogdGhlIFRSQU5TRkVSIGNoYXJhY3RlciBzZXQgKnRvKiB0aGUgRklMRSBj aGFyYWN0ZXIgc2V0LCBhbiBhcnJheSBvZgotICBwb2ludGVycyB0byBmdW5jdGlvbnMuICBUaGUg Zmlyc3QgaW5kZXggaXMgdGhlIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQKLSAgbnVtYmVyLCB0aGUg c2Vjb25kIGluZGV4IGlzIHRoZSBGSUxFIENIQVJBQ1RFUi1TRVQgbnVtYmVyLgotCi0gIFRoZXNl IGFycmF5cyBtdXN0IGJlIGZ1bGx5IHBvcHVsYXRlZCwgZXZlbiBpZiAoYXMgaXMgdGhlIGNhc2Ug d2l0aCBLYW5qaQotICBjaGFyYWN0ZXIgc2V0cyksIGFsbCB0aGUgZW50cmllcyBhcmUgTlVMTC4g IE90aGVyd2lzZSwgc3Vic2NyaXB0Ci0gIGNhbGN1bGF0aW9ucyB3aWxsIGJlIHdyb25nIGFuZCB3 ZSdsbCB1c2UgdGhlIHdyb25nIGZ1bmN0aW9ucy4KLSovCi0KLS8qIFBvaW50ZXJzIHRvIGJ5dGUt Zm9yLWJ5dGUgdHJhbnNsYXRpb24gZnVuY3Rpb25zICovCi0KLV9QUk9UT1RZUCggQ0hBUiAoKnJ4 KSwgKENIQVIpICk7Ci1fUFJPVE9UWVAoIENIQVIgKCpzeCksIChDSEFSKSApOwotCi0jaWZkZWYg VU5JQ09ERQotX1BST1RPVFlQKCBpbnQgKCp4dXQpLCAoVVNIT1JUKSApOwkvKiBUcmFuc2xhdGlv biBmdW5jdGlvbiBVQ1MgdG8gVENTICovCi1fUFJPVE9UWVAoIGludCAoKnh1ZiksIChVU0hPUlQp ICk7CS8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9uIFVDUyB0byBGQ1MgKi8KLV9QUk9UT1RZUCggVVNI T1JUICgqeHR1KSwgKENIQVIpICk7CS8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9uIFRDUyB0byBVQ1Mg Ki8KLV9QUk9UT1RZUCggVVNIT1JUICgqeGZ1KSwgKENIQVIpICk7CS8qIFRyYW5zbGF0aW9uIGZ1 bmN0aW9uIEZDUyB0byBVQ1MgKi8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSNpZmRlZiBDS19B TlNJQwotQ0hBUiAoKnhscltNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKSA9Ci0jZWxz ZQotQ0hBUiAoKnhscltNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKSgpID0KLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotewotICAgIE5VTEwsCQkJLyogMCwwIHRyYW5zcGFyZW50IHRvIHVzIGFzY2lp ICovCi0gICAgTlVMTCwJCQkvKiAwLDEgdHJhbnNwYXJlbnQgdG8gdWsgYXNjaWkgKi8KLSAgICBO VUxMLAkJCS8qIDAsMiB0cmFuc3BhcmVudCB0byBkdXRjaCBucmMgKi8KLSAgICBOVUxMLAkJCS8q IDAsMyB0cmFuc3BhcmVudCB0byBmaW5uaXNoIG5yYyAqLwotICAgIE5VTEwsCQkJLyogMCw0IHRy YW5zcGFyZW50IHRvIGZyZW5jaCBucmMgKi8KLSAgICBOVUxMLAkJCS8qIDAsNSB0cmFuc3BhcmVu dCB0byBmci1jYW5hZGlhbiBucmMgKi8KLSAgICBOVUxMLAkJCS8qIDAsNiB0cmFuc3BhcmVudCB0 byBnZXJtYW4gbnJjICovCi0gICAgTlVMTCwJCQkvKiAwLDcgdHJhbnNwYXJlbnQgdG8gaHVuZ2Fy aWFuIG5yYyAqLwotICAgIE5VTEwsCQkJLyogMCw4IHRyYW5zcGFyZW50IHRvIGl0YWxpYW4gbnJj ICovCi0gICAgTlVMTCwJCQkvKiAwLDkgdHJhbnNwYXJlbnQgdG8gbm9yZ2UvZGFuaXNoIG5yYyAq LwotICAgIE5VTEwsCQkJLyogMCwxMCB0cmFuc3BhcmVudCB0byBwb3J0dWd1ZXNlIG5yYyAqLwot ICAgIE5VTEwsCQkJLyogMCwxMSB0cmFuc3BhcmVudCB0byBzcGFuaXNoIG5yYyAqLwotICAgIE5V TEwsCQkJLyogMCwxMiB0cmFuc3BhcmVudCB0byBzd2VkaXNoIG5yYyAqLwotICAgIE5VTEwsCQkJ LyogMCwxMyB0cmFuc3BhcmVudCB0byBzd2lzcyBucmMgKi8KLSAgICBOVUxMLAkJCS8qIDAsMTQg dHJhbnNwYXJlbnQgdG8gbGF0aW4tMSAqLwotICAgIE5VTEwsCQkJLyogMCwxNSB0cmFuc3BhcmVu dCB0byBsYXRpbi0yICovCi0gICAgTlVMTCwJCQkvKiAwLDE2IHRyYW5zcGFyZW50IHRvIERFQyBN Q1MgKi8KLSAgICBOVUxMLAkJCS8qIDAsMTcgdHJhbnNwYXJlbnQgdG8gTmVYVCAqLwotICAgIE5V TEwsCQkJLyogMCwxOCB0cmFuc3BhcmVudCB0byBDUDQzNyAqLwotICAgIE5VTEwsCQkJLyogMCwx OSB0cmFuc3BhcmVudCB0byBDUDg1MCAqLwotICAgIE5VTEwsCQkJLyogMCwyMCB0cmFuc3BhcmVu dCB0byBDUDg1MiAqLwotICAgIE5VTEwsCQkJLyogMCwyMSB0cmFuc3BhcmVudCB0byBNYWNpbnRv c2ggTGF0aW4gKi8KLSAgICBOVUxMLAkJCS8qIDAsMjIgdHJhbnNwYXJlbnQgdG8gREdJICovCi0g ICAgTlVMTCwJCQkvKiAwLDIzIHRyYW5zcGFyZW50IHRvIEhQICovCi0gICAgTlVMTCwJCQkvKiAw LDI0IHRyYW5zcGFyZW50IHRvIExhdGluL0N5cmlsbGljICovCi0gICAgTlVMTCwgICAgICAgICAg ICAgICAgICAgICAgIC8qIDAsMjUgdHJhbnNwYXJlbnQgdG8gQ1A4NjYgKi8KLSAgICBOVUxMLAkJ CS8qIDAsMjYgdHJhbnNwYXJlbnQgdG8gU2hvcnQgS09JLTcgKi8KLSAgICBOVUxMLCAgICAgICAg ICAgICAgICAgICAgICAgLyogMCwyNyB0cmFuc3BhcmVudCB0byBPbGQgS09JLTggQ3lyaWxsaWMg Ki8KLSAgICBOVUxMLAkJCS8qIDAsMjggdHJhbnNwYXJlbnQgdG8gSklTLTcgKi8KLSAgICBOVUxM LAkJCS8qIDAsMjkgdHJhbnNwYXJlbnQgdG8gU2hpZnQtSklTICovCi0gICAgTlVMTCwJCQkvKiAw LDMwIHRyYW5zcGFyZW50IHRvIEotRVVDICovCi0gICAgTlVMTCwJCQkvKiAwLDMxIHRyYW5zcGFy ZW50IHRvIERFQyBLYW5qaSAqLwotICAgIE5VTEwsCQkJLyogMCwzMiB0cmFuc3BhcmVudCB0byBI ZWJyZXctNyAqLwotICAgIE5VTEwsCQkJLyogMCwzMyB0cmFuc3BhcmVudCB0byBMYXRpbi9IZWJy ZXcgKi8KLSAgICBOVUxMLAkJCS8qIDAsMzQgdHJhbnNwYXJlbnQgdG8gQ1A4NjIgSGVicmV3ICov Ci0gICAgTlVMTCwJCQkvKiAwLDM1IHRyYW5zcGFyZW50IHRvIEVMT1QgOTI3IEdyZWVrICovCi0g ICAgTlVMTCwJCQkvKiAwLDM2IHRyYW5zcGFyZW50IHRvIExhdGluL0dyZWVrICovCi0gICAgTlVM TCwJCQkvKiAwLDM3IHRyYW5zcGFyZW50IHRvIENQODY5ICovCi0gICAgTlVMTCwJCQkvKiAwLDM4 IHRyYW5zcGFyZW50IHRvIExhdGluLTkgKi8KLSAgICBOVUxMLAkJCS8qIDAsMzkgdHJhbnNwYXJl bnQgdG8gQ1A4NTggKi8KLSAgICBOVUxMLAkJCS8qIDAsNDAgdHJhbnNwYXJlbnQgdG8gQ1A4NTUg Ki8KLSAgICBOVUxMLAkJCS8qIDAsNDEgdHJhbnNwYXJlbnQgdG8gQ1AxMjUxICovCi0gICAgTlVM TCwJCQkvKiAwLDQyIHRyYW5zcGFyZW50IHRvIEJ1bGdhcmlhbiAqLwotICAgIE5VTEwsCQkJLyog MCw0MyB0cmFuc3BhcmVudCB0byBDUDEyNTAgKi8KLSAgICBOVUxMLAkJCS8qIDAsNDQgdHJhbnNw YXJlbnQgdG8gTWF6b3ZpYSAqLwotICAgIE5VTEwsCQkJLyogMCw0NSB0cmFuc3BhcmVudCB0byBV Q1MtMiAqLwotICAgIE5VTEwsCQkJLyogMCw0NiB0cmFuc3BhcmVudCB0byBVVEYtOCAqLwotICAg IE5VTEwsCQkJLyogMCw0NyB0cmFuc3BhcmVudCB0byBLT0k4UiAqLwotICAgIE5VTEwsCQkJLyog MCw0OCB0cmFuc3BhcmVudCB0byBLT0k4VSAqLwotICAgIE5VTEwsCQkJLyogMCw0OSB0cmFuc3Bh cmVudCB0byBDUDEyNTIgKi8KLSAgICBOVUxMLAkJCS8qIDEsMCBhc2NpaSB0byB1cyBhc2NpaSAq LwotICAgIE5VTEwsCQkJLyogMSwxIGFzY2lpIHRvIHVrIGFzY2lpICovCi0gICAgTlVMTCwJCQkv KiAxLDIgYXNjaWkgdG8gZHV0Y2ggbnJjICovCi0gICAgTlVMTCwJCQkvKiAxLDMgYXNjaWkgdG8g ZmlubmlzaCBucmMgKi8KLSAgICBOVUxMLAkJCS8qIDEsNCBhc2NpaSB0byBmcmVuY2ggbnJjICov Ci0gICAgTlVMTCwJCQkvKiAxLDUgYXNjaWkgdG8gZnItY2FuYWRpYW4gbnJjICovCi0gICAgTlVM TCwJCQkvKiAxLDYgYXNjaWkgdG8gZ2VybWFuIG5yYyAqLwotICAgIE5VTEwsCQkJLyogMSw3IGFz Y2lpIHRvIGh1bmdhcmlhbiBucmMgKi8KLSAgICBOVUxMLAkJCS8qIDEsOCBhc2NpaSB0byBpdGFs aWFuIG5yYyAqLwotICAgIE5VTEwsCQkJLyogMSw5IGFzY2lpIHRvIG5vcmdlL2RhbmlzaCBucmMg Ki8KLSAgICBOVUxMLAkJCS8qIDEsMTAgYXNjaWkgdG8gcG9ydHVndWVzZSBucmMgKi8KLSAgICBO VUxMLAkJCS8qIDEsMTEgYXNjaWkgdG8gc3BhbmlzaCBucmMgKi8KLSAgICBOVUxMLAkJCS8qIDEs MTIgYXNjaWkgdG8gc3dlZGlzaCBucmMgKi8KLSAgICBOVUxMLAkJCS8qIDEsMTMgYXNjaWkgdG8g c3dpc3MgbnJjICovCi0gICAgTlVMTCwJCQkvKiAxLDE0IGFzY2lpIHRvIGxhdGluLTEgKi8KLSAg ICBOVUxMLAkJCS8qIDEsMTUgYXNjaWkgdG8gbGF0aW4tMiAqLwotICAgIE5VTEwsCQkJLyogMSwx NiBhc2NpaSB0byBERUMgTUNTICovCi0gICAgTlVMTCwJCQkvKiAxLDE3IGFzY2lpIHRvIE5lWFQg Ki8KLSAgICBOVUxMLAkJCS8qIDEsMTggYXNjaWkgdG8gQ1A0MzcgKi8KLSAgICBOVUxMLAkJCS8q IDEsMTkgYXNjaWkgdG8gQ1A4NTAgKi8KLSAgICBOVUxMLAkJCS8qIDEsMjAgYXNjaWkgdG8gQ1A4 NTIgKi8KLSAgICBOVUxMLAkJCS8qIDEsMjEgYXNjaWkgdG8gTWFjaW50b3NoIExhdGluICovCi0g ICAgTlVMTCwJCQkvKiAxLDIyIGFzY2lpIHRvIERHSSAqLwotICAgIE5VTEwsCQkJLyogMSwyMyBh c2NpaSB0byBIUCAqLwotICAgIHhhc2xjLCAgICAgICAgICAgICAgICAgICAgICAvKiAxLDI0IGFz Y2lpIHRvIExhdGluL0N5cmlsbGljICovCi0gICAgeGFzYWMsICAgICAgICAgICAgICAgICAgICAg IC8qIDEsMjUgYXNjaWkgdG8gQ1A4NjYgKi8KLSAgICB4YXNzaywgICAgICAgICAgICAgICAgICAg ICAgLyogMSwyNiBhc2NpaSB0byBTaG9ydCBLT0kgKi8KLSAgICB4YXNrOCwgICAgICAgICAgICAg ICAgICAgICAgLyogMSwyNyBhc2NpaSB0byBPbGQgS09JLTggQ3lyaWxsaWMgKi8KLSAgICBOVUxM LAkJCS8qIDEsMjggYXNjaWkgdG8gSklTLTcgKi8KLSAgICBOVUxMLAkJCS8qIDEsMjkgYXNjaWkg dG8gU2hpZnQtSklTICovCi0gICAgTlVMTCwJCQkvKiAxLDMwIGFzY2lpIHRvIEotRVVDICovCi0g ICAgTlVMTCwJCQkvKiAxLDMxIGFzY2lpIHRvIERFQyBLYW5qaSAqLwotICAgIHhhc2g3LAkJCS8q IDEsMzIgYXNjaWkgdG8gSGVicmV3LTcgKi8KLSAgICBOVUxMLAkJCS8qIDEsMzMgYXNjaWkgdG8g TGF0aW4vSGVicmV3ICovCi0gICAgTlVMTCwJCQkvKiAxLDM0IGFzY2lpIHRvIENQODYyIEhlYnJl dyAqLwotICAgIHhhc2VnLAkJCS8qIDEsMzUgYXNjaWkgdG8gRUxPVCA5MjcgR3JlZWsgKi8KLSAg ICBOVUxMLAkJCS8qIDEsMzYgYXNjaWkgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICBOVUxMLAkJCS8q IDEsMzcgYXNjaWkgdG8gQ1A4NjkgKi8KLSAgICBOVUxMLAkJCS8qIDEsMzggYXNjaWkgdG8gTGF0 aW4tOSAqLwotICAgIE5VTEwsCQkJLyogMSwzOSBhc2NpaSB0byBDUDg1OCAqLwotICAgIHhhczU1 LAkJCS8qIDEsNDAgYXNjaWkgdG8gQ1A4NTUgKi8KLSAgICB4YXMxMjUxLAkJCS8qIDEsNDEgYXNj aWkgdG8gQ1AxMjUxICovCi0gICAgeGxlZnQxMjgsCQkJLyogMSw0MiBhc2NpaSB0byBidWxnYXJp YW4gKi8KLSAgICB4bGVmdDEyOCwJCQkvKiAxLDQzIGFzY2lpIHRvIENQMTI1MCAqLwotICAgIHhs ZWZ0MTI4LAkJCS8qIDEsNDQgYXNjaWkgdG8gTWF6b3ZpYSAqLwotICAgIE5VTEwsCQkJLyogMSw0 NSBhc2NpaSB0byBVQ1MtMiAqLwotICAgIE5VTEwsCQkJLyogMSw0NiBhc2NpaSB0byBVVEYtOCAq LwotICAgIE5VTEwsCQkJLyogMSw0NyBhc2NpaSB0byBLT0k4LVIgKi8KLSAgICBOVUxMLAkJCS8q IDEsNDggYXNjaWkgdG8gS09JOC1VICovCi0gICAgTlVMTCwJCQkvKiAxLDQ5IGFzY2lpIHRvIENQ MTI1MiAqLwotICAgIHpsMWFzLAkJCS8qIDIsMCBsYXRpbi0xIHRvIHVzIGFzY2lpICovCi0gICAg eGwxdWssCQkJLyogMiwxIGxhdGluLTEgdG8gdWsgYXNjaWkgKi8KLSAgICB4bDFkdSwJCQkvKiAy LDIgbGF0aW4tMSB0byBkdXRjaCBucmMgKi8KLSAgICB4bDFmaSwJCQkvKiAyLDMgbGF0aW4tMSB0 byBmaW5uaXNoIG5yYyAqLwotICAgIHhsMWZyLAkJCS8qIDIsNCBsYXRpbi0xIHRvIGZyZW5jaCBu cmMgKi8KLSAgICB4bDFmYywJCQkvKiAyLDUgbGF0aW4tMSB0byBmci1jYW5hZGlhbiBucmMgKi8K LSAgICB4bDFnZSwJCQkvKiAyLDYgbGF0aW4tMSB0byBnZXJtYW4gbnJjICovCi0gICAgeGwxaXQs CQkJLyogMiw3IGxhdGluLTEgdG8gaXRhbGlhbiBucmMgKi8KLSAgICB4bDFodSwJCQkvKiAyLDgg bGF0aW4tMSB0byBodW5nYXJpYW4gbnJjICovCi0gICAgeGwxbm8sCQkJLyogMiw5IGxhdGluLTEg dG8gbm9yZ2UvZGFuaXNoIG5yYyAqLwotICAgIHhsMXBvLAkJCS8qIDIsMTAgbGF0aW4tMSB0byBw b3J0dWd1ZXNlIG5yYyAqLwotICAgIHhsMXNwLAkJCS8qIDIsMTEgbGF0aW4tMSB0byBzcGFuaXNo IG5yYyAqLwotICAgIHhsMXN3LAkJCS8qIDIsMTIgbGF0aW4tMSB0byBzd2VkaXNoIG5yYyAqLwot ICAgIHhsMWNoLAkJCS8qIDIsMTMgbGF0aW4tMSB0byBzd2lzcyBucmMgKi8KLSAgICBOVUxMLAkJ CS8qIDIsMTQgbGF0aW4tMSB0byBsYXRpbi0xICovCi0gICAgeGwxbDIsCQkJLyogMiwxNSBsYXRp bi0xIHRvIGxhdGluLTIgKi8KLSAgICB4bDFkbSwJCQkvKiAyLDE2IGxhdGluLTEgdG8gREVDIE1D UyAqLwotICAgIHhsMW5lLAkJCS8qIDIsMTcgbGF0aW4tMSB0byBOZVhUICovCi0gICAgeGwxNDMs CQkJLyogMiwxOCBsYXRpbi0xIHRvIENQNDM3ICovCi0gICAgeGwxODUsCQkJLyogMiwxOSBsYXRp bi0xIHRvIENQODUwICovCi0gICAgeGwxNTIsCQkJLyogMiwyMCBsYXRpbi0xIHRvIENQODUyICov Ci0gICAgeGwxYXEsCQkJLyogMiwyMSBsYXRpbi0xIHRvIE1hY2ludG9zaCBMYXRpbiAqLwotICAg IHhsMWRnLAkJCS8qIDIsMjIgbGF0aW4tMSB0byBER0kgKi8KLSAgICB4bDFyOCwJCQkvKiAyLDIz IGxhdGluLTEgdG8gSFAgUm9tYW44ICovCi0gICAgemwxYXMsCQkJLyogMiwyNCBsYXRpbi0xIHRv IExhdGluL0N5cmlsbGljICovCi0gICAgemwxYXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDIs MjUgbGF0aW4tMSB0byBDUDg2NiAqLwotICAgIHhsMXNrLCAgICAgICAgICAgICAgICAgICAgICAv KiAyLDI2IGxhdGluLTEgdG8gU2hvcnQgS09JICovCi0gICAgemwxYXMsCQkgICAgICAgCS8qIDIs MjcgbGF0aW4tMSB0byBPbGQgS09JLTggQ3lyaWxsaWMgKi8KLSAgICBOVUxMLAkJCS8qIDIsMjgg bGF0aW4tMSB0byBKSVMtNyAqLwotICAgIE5VTEwsCQkJLyogMiwyOSBsYXRpbi0xIHRvIFNoaWZ0 LUpJUyAqLwotICAgIE5VTEwsCQkJLyogMiwzMCBsYXRpbi0xIHRvIEotRVVDICovCi0gICAgTlVM TCwJCQkvKiAyLDMxIGxhdGluLTEgdG8gREVDIEthbmppICovCi0gICAgeGwxaDcsCQkJLyogMiwz MiBsYXRpbi0xIHRvIEhlYnJldy03ICovCi0gICAgeGwxbGgsCQkJLyogMiwzMyBsYXRpbi0xIHRv IExhdGluL0hlYnJldyAqLwotICAgIHhsMTYyLAkJCS8qIDIsMzQgbGF0aW4tMSB0byBDUDg2MiBI ZWJyZXcgKi8KLSAgICB4bDFlZywJCQkvKiAyLDM1IGxhdGluLTEgdG8gRUxPVCA5MjcgR3JlZWsg Ki8KLSAgICB4bDFsZywJCQkvKiAyLDM2IGxhdGluLTEgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4 bDE2OSwJCQkvKiAyLDM3IGxhdGluLTEgdG8gQ1A4NjkgKi8KLSAgICBOVUxMLAkJCS8qIDIsMzgg bGF0aW4tMSB0byBMYXRpbjkgKi8KLSAgICB4bDE4NSwJCQkvKiAyLDM5IGxhdGluLTEgdG8gQ1A4 NTggKi8KLSAgICB6bDFhcywJCQkvKiAyLDQwIGxhdGluLTEgdG8gQ1A4NTUgKi8KLSAgICB6bDFh cywJCQkvKiAyLDQxIGxhdGluLTEgdG8gQ1AxMjUxICovCi0gICAgemwxYXMsCQkJLyogMiw0MiBs YXRpbi0xIHRvIEJ1bGdhcmlhbiAqLwotICAgIHhsMTEyNTAsCQkJLyogMiw0MyBsYXRpbi0xIHRv IENQMTI1MCAqLwotICAgIHhsMW16LAkJCS8qIDIsNDQgbGF0aW4tMSB0byBNYXpvdmlhICovCi0g ICAgTlVMTCwJCQkvKiAyLDQ1IGxhdGluLTEgdG8gVUNTLTIgKi8KLSAgICBOVUxMLAkJCS8qIDIs NDYgbGF0aW4tMSB0byBVVEYtOCAqLwotICAgIHpsMWFzLAkJCS8qIDIsNDcgbGF0aW4tMSB0byBL T0k4UiAqLwotICAgIHpsMWFzLAkJCS8qIDIsNDggbGF0aW4tMSB0byBLT0k4VSAqLwotICAgIHhs MXcxLAkJCS8qIDIsNDkgbGF0aW4tMSB0byBDUDEyNTIgKi8KLSAgICB4bDJhcywJCQkvKiAzLDAg bGF0aW4tMiB0byB1cyBhc2NpaSAqLwotICAgIHhsMmFzLAkJCS8qIDMsMSBsYXRpbi0yIHRvIHVr IGFzY2lpICovCi0gICAgeGwyYXMsCQkJLyogMywyIGxhdGluLTIgdG8gZHV0Y2ggbnJjICovCi0g ICAgeGwyYXMsCQkJLyogMywzIGxhdGluLTIgdG8gZmlubmlzaCBucmMgKi8KLSAgICB4bDJhcywJ CQkvKiAzLDQgbGF0aW4tMiB0byBmcmVuY2ggbnJjICovCi0gICAgeGwyYXMsCQkJLyogMyw1IGxh dGluLTIgdG8gZnItY2FuYWRpYW4gbnJjICovCi0gICAgeGwyYXMsCQkJLyogMyw2IGxhdGluLTIg dG8gZ2VybWFuIG5yYyAqLwotICAgIHhsMmFzLAkJCS8qIDMsNyBsYXRpbi0yIHRvIGl0YWxpYW4g bnJjICovCi0gICAgeGwyYXMsCQkJLyogMyw4IGxhdGluLTIgdG8gaHVuZ2FyaWFuIG5yYyAqLwot ICAgIHhsMmFzLAkJCS8qIDMsOSBsYXRpbi0yIHRvIG5vcmdlL2RhbmlzaCBucmMgKi8KLSAgICB4 bDJhcywJCQkvKiAzLDEwIGxhdGluLTIgdG8gcG9ydHVndWVzZSBucmMgKi8KLSAgICB4bDJhcywJ CQkvKiAzLDExIGxhdGluLTIgdG8gc3BhbmlzaCBucmMgKi8KLSAgICB4bDJhcywJCQkvKiAzLDEy IGxhdGluLTIgdG8gc3dlZGlzaCBucmMgKi8KLSAgICB4bDJhcywJCQkvKiAzLDEzIGxhdGluLTIg dG8gc3dpc3MgbnJjICovCi0gICAgeGwybDEsCQkJLyogMywxNCBsYXRpbi0yIHRvIGxhdGluLTEg Ki8KLSAgICBOVUxMLAkJCS8qIDMsMTUgbGF0aW4tMiB0byBsYXRpbi0yICovCi0gICAgeGwybDEs CQkJLyogMywxNiBsYXRpbi0yIHRvIERFQyBNQ1MgKi8KLSAgICB4bDJuZSwJCQkvKiAzLDE3IGxh dGluLTIgdG8gTmVYVCAqLwotICAgIHhsMjQzLAkJCS8qIDMsMTggbGF0aW4tMiB0byBDUDQzNyAq LwotICAgIHhsMjg1LAkJCS8qIDMsMTkgbGF0aW4tMiB0byBDUDg1MCAqLwotICAgIHhsMjUyLAkJ CS8qIDMsMjAgbGF0aW4tMiB0byBDUDg1MiAqLwotICAgIHhsMmFxLAkJCS8qIDMsMjEgbGF0aW4t MiB0byBNYWNpbnRvc2ggTGF0aW4gKi8KLSAgICB4bDJkZywJCQkvKiAzLDIyIGxhdGluLTIgdG8g REdJICovCi0gICAgeGwycjgsCQkJLyogMywyMyBsYXRpbi0yIHRvIEhQICovCi0gICAgeGwyYXMs CQkJLyogMywyNCBsYXRpbi0yIHRvIExhdGluL0N5cmlsbGljICovCi0gICAgeGwyYXMsICAgICAg ICAgICAgICAgICAgICAgIC8qIDMsMjUgbGF0aW4tMiB0byBDUDg2NiAqLwotICAgIHhsMnNrLCAg ICAgICAgICAgICAgICAgICAgICAvKiAzLDI2IGxhdGluLTIgdG8gU2hvcnQgS09JICovCi0gICAg eGwyYXMsCQkgICAgICAgCS8qIDMsMjcgbGF0aW4tMiB0byBPbGQgS09JLTggQ3lyaWxsaWMgKi8K LSAgICBOVUxMLAkJCS8qIDMsMjggbGF0aW4tMiB0byBKSVMtNyAqLwotICAgIE5VTEwsCQkJLyog MywyOSBsYXRpbi0yIHRvIFNoaWZ0LUpJUyAqLwotICAgIE5VTEwsCQkJLyogMywzMCBsYXRpbi0y IHRvIEotRVVDICovCi0gICAgTlVMTCwJCQkvKiAzLDMxIGxhdGluLTIgdG8gREVDIEthbmppICov Ci0gICAgeGwyaDcsCQkJLyogMywzMiBsYXRpbi0yIHRvIEhlYnJldy03ICovCi0gICAgeGwyYXMs CQkJLyogMywzMyBsYXRpbi0yIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhsMmFzLAkJCS8qIDMs MzQgbGF0aW4tMiB0byBDUDg2MiBIZWJyZXcgKi8KLSAgICB4YXNzaywJCQkvKiAzLDM1IGxhdGlu LTIgdG8gRUxPVCA5MjcgR3JlZWsgKi8KLSAgICB4bDJhcywJCQkvKiAzLDM2IGxhdGluLTIgdG8g TGF0aW4vR3JlZWsgKi8KLSAgICB4bDJhcywJCQkvKiAzLDM3IGxhdGluLTIgdG8gQ1A4NjkgKi8K LSAgICB4bDJsOSwJCQkvKiAzLDM4IGxhdGluLTIgdG8gTGF0aW4tOSAqLwotICAgIHhsMjU4LAkJ CS8qIDMsMzkgbGF0aW4tMiB0byBDUDg1OCAqLwotICAgIHhsMmFzLAkJCS8qIDMsNDAgbGF0aW4t MiB0byBDUDg1NSAqLwotICAgIHhsMmFzLAkJCS8qIDMsNDEgbGF0aW4tMiB0byBDUDEyNTEgKi8K LSAgICB4bDJhcywJCQkvKiAzLDQyIGxhdGluLTIgdG8gQnVsZ2FyaWFuICovCi0gICAgeGwyMTI1 MCwJCQkvKiAzLDQzIGxhdGluLTIgdG8gQ1AxMjUwICovCi0gICAgeGwybXosCQkJLyogMyw0NCBs YXRpbi0yIHRvIE1hem92aWEgKi8KLSAgICBOVUxMLAkJCS8qIDMsNDUgbGF0aW4tMiB0byBVQ1Mt MiAqLwotICAgIE5VTEwsCQkJLyogMyw0NiBsYXRpbi0yIHRvIFVURi04ICovCi0gICAgeGwyYXMs CQkJLyogMyw0NyBsYXRpbi0yIHRvIEtPSThSICovCi0gICAgeGwyYXMsCQkJLyogMyw0OCBsYXRp bi0yIHRvIEtPSThVICovCi0gICAgeGwydzEsCQkJLyogMyw0OSBsYXRpbi0yIHRvIENQMTI1MiAq LwotICAgIHhsY2FzLAkJCS8qIDQsMCBsYXRpbi9jeXJpbGxpYyB0byB1cyBhc2NpaSAqLwotICAg IHhsY2FzLAkJCS8qIDQsMSBsYXRpbi9jeXJpbGxpYyB0byB1ayBhc2NpaSAqLwotICAgIHhsY2Fz LCAJCSAgICAgICAgLyogNCwyIGxhdGluL2N5cmlsbGljIHRvIGR1dGNoIG5yYyAqLwotICAgIHhs Y2FzLAkJCS8qIDQsMyBsYXRpbi9jeXJpbGxpYyB0byBmaW5uaXNoIGFzY2lpICovCi0gICAgeGxj YXMsCQkJLyogNCw0IGxhdGluL2N5cmlsbGljIHRvIGZyZW5jaCBucmMgKi8KLSAgICB4bGNhcywJ CQkvKiA0LDUgbGF0aW4vY3lyaWxsaWMgdG8gZnItY2FuYWRpYW4gbnJjICovCi0gICAgeGxjYXMs CQkJLyogNCw2IGxhdGluL2N5cmlsbGljIHRvIGdlcm1hbiBucmMgKi8KLSAgICB4bGNhcywJCQkv KiA0LDcgbGF0aW4vY3lyaWxsaWMgdG8gaXRhbGlhbiBucmMgKi8KLSAgICB4bGNhcywJCQkvKiA0 LDggbGF0aW4vY3lyaWxsaWMgdG8gaHVuZ2FyaWFuIG5yYyAqLwotICAgIHhsY2FzLAkJCS8qIDQs OSBsYXRpbi9jeXJpbGxpYyB0byBub3JnZS9kYW5pc2ggbnJjICovCi0gICAgeGxjYXMsCQkJLyog NCwxMCBsYXRpbi9jeXJpbGxpYyB0byBwb3J0dWd1ZXNlIG5yYyAqLwotICAgIHhsY2FzLAkJCS8q IDQsMTEgbGF0aW4vY3lyaWxsaWMgdG8gc3BhbmlzaCBucmMgKi8KLSAgICB4bGNhcywJCQkvKiA0 LDEyIGxhdGluL2N5cmlsbGljIHRvIHN3ZWRpc2ggbnJjICovCi0gICAgeGxjYXMsCQkJLyogNCwx MyBsYXRpbi9jeXJpbGxpYyB0byBzd2lzcyBucmMgKi8KLSAgICB4bGNhcywJCQkvKiA0LDE0IGxh dGluL2N5cmlsbGljIHRvIGxhdGluLTEgKi8KLSAgICB4bGNhcywJCQkvKiA0LDE1IGxhdGluL2N5 cmlsbGljIHRvIGxhdGluLTIgKi8KLSAgICB4bGNhcywJCQkvKiA0LDE2IGxhdGluL2N5cmlsbGlj IHRvIERFQyBNQ1MgKi8KLSAgICB4bGNhcywJCQkvKiA0LDE3IGxhdGluL2N5cmlsbGljIHRvIE5l WFQgKi8KLSAgICB4bGNhcywJCQkvKiA0LDE4IGxhdGluL2N5cmlsbGljIHRvIENQNDM3ICovCi0g ICAgeGxjYXMsCQkJLyogNCwxOSBsYXRpbi9jeXJpbGxpYyB0byBDUDg1MCAqLwotICAgIHhsY2Fz LAkJCS8qIDQsMjAgbGF0aW4vY3lyaWxsaWMgdG8gQ1A4NTIgKi8KLSAgICB4bGNhcywJCQkvKiA0 LDIxIGxhdGluL2N5cmlsbGljIHRvIE1hY2ludG9zaCBMYXRpbiAqLwotICAgIHhsY2FzLAkJCS8q IDQsMjIgbGF0aW4vY3lyaWxsaWMgdG8gREdJICovCi0gICAgeGxjYXMsCQkJLyogNCwyMyBsYXRp bi9jeXJpbGxpYyB0byBIUCAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiA0 LDI0IGxhdGluL2N5cmlsbGljIHRvIExhdGluL0N5cmlsbGljICovCi0gICAgeGxjYWMsICAgICAg ICAgICAgICAgICAgICAgIC8qIDQsMjUgbGF0aW4vY3lyaWxsaWMgdG8gQ1A4NjYgKi8KLSAgICB4 bGNzaywgICAgICAgICAgICAgICAgICAgICAgLyogNCwyNiBsYXRpbi9jeXJpbGxpYyB0byBTaG9y dCBLT0kgKi8KLSAgICB4bGNrOCwJCSAgICAgICAJLyogNCwyNyBsYXRpbi9jeXJpbGxpYyB0byBP bGQgS09JLTggQ3lyaWxsaWMgKi8KLSAgICBOVUxMLAkJCS8qIDQsMjggbGF0aW4vY3lyaWwgdG8g SklTLTcgKi8KLSAgICBOVUxMLAkJCS8qIDQsMjkgbGF0aW4vY3lyaWwgdG8gU2hpZnQtSklTICov Ci0gICAgTlVMTCwJCQkvKiA0LDMwIGxhdGluL2N5cmlsIHRvIEotRVVDICovCi0gICAgTlVMTCwJ CQkvKiA0LDMxIGxhdGluL2N5cmlsIHRvIERFQyBLYW5qaSAqLwotICAgIHhsY2g3LAkJCS8qIDQs MzIgbGF0aW4vY3lyaWwgdG8gSGVicmV3LTcgKi8KLSAgICB4bGNhcywJCQkvKiA0LDMzIGxhdGlu L2N5cmlsIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhsY2FzLAkJCS8qIDQsMzQgbGF0aW4vY3ly aWwgdG8gQ1A4NjIgSGVicmV3ICovCi0gICAgeGFzc2ssCQkJLyogNCwzNSBsYXRpbi9jeXJpbCB0 byBFTE9UIDkyNyBHcmVlayAqLwotICAgIHhsZWZ0MTYwLAkJCS8qIDQsMzYgbGF0aW4vY3lyaWwg dG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4bGVmdDEyOCwJCQkvKiA0LDM3IGxhdGluL2N5cmlsIHRv IENQODY5ICovCi0gICAgeGxjYXMsCQkJLyogNCwzOCBsYXRpbi9jeXJpbCB0byBsYXRpbi05ICov Ci0gICAgeGxjYXMsCQkJLyogNCwzOSBsYXRpbi9jeXJpbCB0byBDUDg1OCAqLwotICAgIHhsYzU1 LAkJCS8qIDQsNDAgbGF0aW4vY3lyaWwgdG8gQ1A4NTUgKi8KLSAgICB4bGMxMjUxLAkJCS8qIDQs NDEgbGF0aW4vY3lyaWwgdG8gQ1AxMjUxICovCi0gICAgeGxjYnUsCQkJLyogNCw0MiBsYXRpbi9j eXJpbCB0byBCdWxnYXJpYW4gKi8KLSAgICB4bGNhcywJCQkvKiA0LDQzIGxhdGluL2N5cmlsIHRv IENQMTI1MCAqLwotICAgIHhsY2FzLAkJCS8qIDQsNDQgbGF0aW4vY3lyaWwgdG8gTWF6b3ZpYSAq LwotICAgIE5VTEwsCQkJLyogNCw0NSBsYXRpbi9jeXJpbCB0byBVQ1MtMiAqLwotICAgIE5VTEws CQkJLyogNCw0NiBsYXRpbi9jeXJpbCB0byBVVEYtOCAqLwotICAgIHhsY2tyLAkJCS8qIDQsNDcg bGF0aW4vY3lyaWwgdG8gS09JOFIgKi8KLSAgICB4bGNrdSwJCQkvKiA0LDQ4IGxhdGluL2N5cmls IHRvIEtPSThVICovCi0gICAgeGxjYXMsCQkJLyogNCw0OSBsYXRpbi9jeXJpbCB0byBDUDEyNTIg Ki8KLSAgICBOVUxMLAkJCS8qIDUsMDAgKi8KLSAgICBOVUxMLAkJCS8qIDUsMDEgKi8KLSAgICBO VUxMLAkJCS8qIDUsMDIgKi8KLSAgICBOVUxMLAkJCS8qIDUsMDMgKi8KLSAgICBOVUxMLAkJCS8q IDUsMDQgKi8KLSAgICBOVUxMLAkJCS8qIDUsMDUgKi8KLSAgICBOVUxMLAkJCS8qIDUsMDYgKi8K LSAgICBOVUxMLAkJCS8qIDUsMDcgKi8KLSAgICBOVUxMLAkJCS8qIDUsMDggKi8KLSAgICBOVUxM LAkJCS8qIDUsMDkgKi8KLSAgICBOVUxMLAkJCS8qIDUsMTAgKi8KLSAgICBOVUxMLAkJCS8qIDUs MTEgKi8KLSAgICBOVUxMLAkJCS8qIDUsMTIgKi8KLSAgICBOVUxMLAkJCS8qIDUsMTMgKi8KLSAg ICBOVUxMLAkJCS8qIDUsMTQgKi8KLSAgICBOVUxMLAkJCS8qIDUsMTUgKi8KLSAgICBOVUxMLAkJ CS8qIDUsMTYgKi8KLSAgICBOVUxMLAkJCS8qIDUsMTcgKi8KLSAgICBOVUxMLAkJCS8qIDUsMTgg Ki8KLSAgICBOVUxMLAkJCS8qIDUsMTkgKi8KLSAgICBOVUxMLAkJCS8qIDUsMjAgKi8KLSAgICBO VUxMLAkJCS8qIDUsMjEgKi8KLSAgICBOVUxMLAkJCS8qIDUsMjIgKi8KLSAgICBOVUxMLAkJCS8q IDUsMjMgKi8KLSAgICBOVUxMLAkJCS8qIDUsMjQgKi8KLSAgICBOVUxMLAkJCS8qIDUsMjUgKi8K LSAgICBOVUxMLAkJCS8qIDUsMjYgKi8KLSAgICBOVUxMLAkJCS8qIDUsMjcgKi8KLSAgICBOVUxM LAkJCS8qIDUsMjggKi8KLSAgICBOVUxMLAkJCS8qIDUsMjkgKi8KLSAgICBOVUxMLAkJCS8qIDUs MzAgKi8KLSAgICBOVUxMLAkJCS8qIDUsMzEgKi8KLSAgICBOVUxMLAkJCS8qIDUsMzIgKi8KLSAg ICBOVUxMLAkJCS8qIDUsMzMgKi8KLSAgICBOVUxMLAkJCS8qIDUsMzQgKi8KLSAgICBOVUxMLAkJ CS8qIDUsMzUgKi8KLSAgICBOVUxMLAkJCS8qIDUsMzYgKi8KLSAgICBOVUxMLAkJCS8qIDUsMzcg Ki8KLSAgICBOVUxMLAkJCS8qIDUsMzggKi8KLSAgICBOVUxMLAkJCS8qIDUsMzkgKi8KLSAgICBO VUxMLAkJCS8qIDUsNDAgKi8KLSAgICBOVUxMLAkJCS8qIDUsNDEgKi8KLSAgICBOVUxMLAkJCS8q IDUsNDIgKi8KLSAgICBOVUxMLAkJCS8qIDUsNDMgKi8KLSAgICBOVUxMLAkJCS8qIDUsNDQgKi8K LSAgICBOVUxMLAkJCS8qIDUsNDUgKi8KLSAgICBOVUxMLAkJCS8qIDUsNDYgKi8KLSAgICBOVUxM LAkJCS8qIDUsNDcgKi8KLSAgICBOVUxMLAkJCS8qIDUsNDggKi8KLSAgICBOVUxMLAkJCS8qIDUs NDkgKi8KLSAgICB4bGhhcywJCQkvKiA2LDAgbGF0aW4vaGVicmV3IHRvIHVzIGFzY2lpICovCi0g ICAgeGxoYXMsCQkJLyogNiwxIGxhdGluL2hlYnJldyB0byB1ayBhc2NpaSAqLwotICAgIHhsaGFz LCAJCSAgICAgICAgLyogNiwyIGxhdGluL2hlYnJldyB0byBkdXRjaCBucmMgKi8KLSAgICB4bGhh cywJCQkvKiA2LDMgbGF0aW4vaGVicmV3IHRvIGZpbm5pc2ggYXNjaWkgKi8KLSAgICB4bGhhcywJ CQkvKiA2LDQgbGF0aW4vaGVicmV3IHRvIGZyZW5jaCBucmMgKi8KLSAgICB4bGhhcywJCQkvKiA2 LDUgbGF0aW4vaGVicmV3IHRvIGZyLWNhbmFkaWFuIG5yYyAqLwotICAgIHhsaGFzLAkJCS8qIDYs NiBsYXRpbi9oZWJyZXcgdG8gZ2VybWFuIG5yYyAqLwotICAgIHhsaGFzLAkJCS8qIDYsNyBsYXRp bi9oZWJyZXcgdG8gaXRhbGlhbiBucmMgKi8KLSAgICB4bGhhcywJCQkvKiA2LDggbGF0aW4vaGVi cmV3IHRvIGh1bmdhcmlhbiBucmMgKi8KLSAgICB4bGhhcywJCQkvKiA2LDkgbGF0aW4vaGVicmV3 IHRvIG5vcmdlL2RhbmlzaCBucmMgKi8KLSAgICB4bGhhcywJCQkvKiA2LDEwIGxhdGluL2hlYnJl dyB0byBwb3J0dWd1ZXNlIG5yYyAqLwotICAgIHhsaGFzLAkJCS8qIDYsMTEgbGF0aW4vaGVicmV3 IHRvIHNwYW5pc2ggbnJjICovCi0gICAgeGxoYXMsCQkJLyogNiwxMiBsYXRpbi9oZWJyZXcgdG8g c3dlZGlzaCBucmMgKi8KLSAgICB4bGhhcywJCQkvKiA2LDEzIGxhdGluL2hlYnJldyB0byBzd2lz cyBucmMgKi8KLSAgICB4bGhsMSwJCQkvKiA2LDE0IGxhdGluL2hlYnJldyB0byBsYXRpbi0xICov Ci0gICAgeGxoYXMsCQkJLyogNiwxNSBsYXRpbi9oZWJyZXcgdG8gbGF0aW4tMiAqLwotICAgIHhs aGwxLAkJCS8qIDYsMTYgbGF0aW4vaGVicmV3IHRvIERFQyBNQ1MgKi8KLSAgICB4bGhhcywJCQkv KiA2LDE3IGxhdGluL2hlYnJldyB0byBOZVhUICovCi0gICAgeGxoYXMsCQkJLyogNiwxOCBsYXRp bi9oZWJyZXcgdG8gQ1A0MzcgKi8KLSAgICB4bGhhcywJCQkvKiA2LDE5IGxhdGluL2hlYnJldyB0 byBDUDg1MCAqLwotICAgIHhsaGFzLAkJCS8qIDYsMjAgbGF0aW4vaGVicmV3IHRvIENQODUyICov Ci0gICAgeGxoYXMsCQkJLyogNiwyMSBsYXRpbi9oZWJyZXcgdG8gTWFjaW50b3NoIExhdGluICov Ci0gICAgeGxoYXMsCQkJLyogNiwyMiBsYXRpbi9oZWJyZXcgdG8gREdJICovCi0gICAgeGxoYXMs ICAgICAgICAgICAgICAgICAgICAgIC8qIDYsMjMgbGF0aW4vaGVicmV3IHRvIEhQICovCi0gICAg eGxoYXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDYsMjQgbGF0aW4vaGVicmV3IHRvIExhdGlu L0N5cmlsbGljICovCi0gICAgeGxoYXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDYsMjUgbGF0 aW4vaGVicmV3IHRvIENQODY2ICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8q IDYsMjYgbGF0aW4vaGVicmV3IHRvIFNob3J0IEtPSSAqLwotICAgIHhsaGFzLAkJICAgICAgIAkv KiA2LDI3IGxhdGluL2hlYnJldyB0byBPbGQgS09JLTggQ3lyaWxsaWMgKi8KLSAgICBOVUxMLAkJ CS8qIDYsMjggbGF0aW4vaGVicmV3IHRvIEpJUy03ICovCi0gICAgTlVMTCwJCQkvKiA2LDI5IGxh dGluL2hlYnJldyB0byBTaGlmdC1KSVMgKi8KLSAgICBOVUxMLAkJCS8qIDYsMzAgbGF0aW4vaGVi cmV3IHRvIEotRVVDICovCi0gICAgTlVMTCwJCQkvKiA2LDMxIGxhdGluL2hlYnJldyB0byBERUMg S2FuamkgKi8KLSAgICB4bGhoNywJCQkvKiA2LDMyIGxhdGluL2hlYnJldyB0byBIZWJyZXctNyAq LwotICAgIE5VTEwsCQkJLyogNiwzMyBsYXRpbi9oZWJyZXcgdG8gTGF0aW4vSGVicmV3ICovCi0g ICAgeGxoNjIsCQkJLyogNiwzNCBsYXRpbi9oZWJyZXcgdG8gQ1A4NjIgSGVicmV3ICovCi0gICAg TlVMTCwJCQkvKiA2LDM1IGxhdGluL2hlYnJldyB0byBFTE9UIDkyNyBHcmVlayAqLwotICAgIHhs aGFzLAkJCS8qIDYsMzYgbGF0aW4vaGVicmV3IHRvIExhdGluL0dyZWVrICovCi0gICAgeGxoYXMs CQkJLyogNiwzNyBsYXRpbi9oZWJyZXcgdG8gQ1A4NjkgKi8KLSAgICB4bGhhcywJCQkvKiA2LDM4 IGxhdGluL2hlYnJldyB0byBMYXRpbi05ICovCi0gICAgeGxoYXMsCQkJLyogNiwzOSBsYXRpbi9o ZWJyZXcgdG8gQ1A4NTggKi8KLSAgICB4bGhhcywJCQkvKiA2LDQwIGxhdGluL2hlYnJldyB0byBD UDg1NSAqLwotICAgIHhsaGFzLAkJCS8qIDYsNDEgbGF0aW4vaGVicmV3IHRvIENQMTI1MSAqLwot ICAgIHhsaGFzLAkJCS8qIDYsNDIgbGF0aW4vaGVicmV3IHRvIEJ1bGdhcmlhbiAqLwotICAgIHhs aGFzLAkJCS8qIDYsNDMgbGF0aW4vaGVicmV3IHRvIENQMTI1MCAqLwotICAgIHhsaGFzLAkJCS8q IDYsNDQgbGF0aW4vaGVicmV3IHRvIE1hem92aWEgKi8KLSAgICBOVUxMLAkJCS8qIDYsNDUgbGF0 aW4vaGVicmV3IHRvIFVDUy0yICovCi0gICAgTlVMTCwJCQkvKiA2LDQ2IGxhdGluL2hlYnJldyB0 byBVVEYtOCAqLwotICAgIE5VTEwsCQkJLyogNiw0NyBsYXRpbi9oZWJyZXcgdG8gS09JOFIgKi8K LSAgICBOVUxMLAkJCS8qIDYsNDggbGF0aW4vaGVicmV3IHRvIEtPSThVICovCi0gICAgeGxodzEs CQkJLyogNiw0OSBsYXRpbi9oZWJyZXcgdG8gQ1AxMjUyICovCi0gICAgeGxnYXMsCQkJLyogNyww IGxhdGluL2dyZWVrIHRvIHVzIGFzY2lpICovCi0gICAgeGxnYXMsCQkJLyogNywxIGxhdGluL2dy ZWVrIHRvIHVrIGFzY2lpICovCi0gICAgeGxnYXMsIAkJICAgICAgICAvKiA3LDIgbGF0aW4vZ3Jl ZWsgdG8gZHV0Y2ggbnJjICovCi0gICAgeGxnYXMsCQkJLyogNywzIGxhdGluL2dyZWVrIHRvIGZp bm5pc2ggYXNjaWkgKi8KLSAgICB4bGdhcywJCQkvKiA3LDQgbGF0aW4vZ3JlZWsgdG8gZnJlbmNo IG5yYyAqLwotICAgIHhsZ2FzLAkJCS8qIDcsNSBsYXRpbi9ncmVlayB0byBmci1jYW5hZGlhbiBu cmMgKi8KLSAgICB4bGdhcywJCQkvKiA3LDYgbGF0aW4vZ3JlZWsgdG8gZ2VybWFuIG5yYyAqLwot ICAgIHhsZ2FzLAkJCS8qIDcsNyBsYXRpbi9ncmVlayB0byBpdGFsaWFuIG5yYyAqLwotICAgIHhs Z2FzLAkJCS8qIDcsOCBsYXRpbi9ncmVlayB0byBodW5nYXJpYW4gbnJjICovCi0gICAgeGxnYXMs CQkJLyogNyw5IGxhdGluL2dyZWVrIHRvIG5vcmdlL2RhbmlzaCBucmMgKi8KLSAgICB4bGdhcywJ CQkvKiA3LDEwIGxhdGluL2dyZWVrIHRvIHBvcnR1Z3Vlc2UgbnJjICovCi0gICAgeGxnYXMsCQkJ LyogNywxMSBsYXRpbi9ncmVlayB0byBzcGFuaXNoIG5yYyAqLwotICAgIHhsZ2FzLAkJCS8qIDcs MTIgbGF0aW4vZ3JlZWsgdG8gc3dlZGlzaCBucmMgKi8KLSAgICB4bGdhcywJCQkvKiA3LDEzIGxh dGluL2dyZWVrIHRvIHN3aXNzIG5yYyAqLwotICAgIHhsZ2FzLAkJCS8qIDcsMTQgbGF0aW4vZ3Jl ZWsgdG8gbGF0aW4tMSAqLwotICAgIHhsZ2FzLAkJCS8qIDcsMTUgbGF0aW4vZ3JlZWsgdG8gbGF0 aW4tMiAqLwotICAgIHhsZ2FzLAkJCS8qIDcsMTYgbGF0aW4vZ3JlZWsgdG8gREVDIE1DUyAqLwot ICAgIHhsZ2FzLAkJCS8qIDcsMTcgbGF0aW4vZ3JlZWsgdG8gTmVYVCAqLwotICAgIHhsZ2FzLAkJ CS8qIDcsMTggbGF0aW4vZ3JlZWsgdG8gQ1A0MzcgKi8KLSAgICB4bGdhcywJCQkvKiA3LDE5IGxh dGluL2dyZWVrIHRvIENQODUwICovCi0gICAgeGxnYXMsCQkJLyogNywyMCBsYXRpbi9ncmVlayB0 byBDUDg1MiAqLwotICAgIHhsZ2FzLAkJCS8qIDcsMjEgbGF0aW4vZ3JlZWsgdG8gTWFjaW50b3No IExhdGluICovCi0gICAgeGxnYXMsCQkJLyogNywyMiBsYXRpbi9ncmVlayB0byBER0kgKi8KLSAg ICB4bGdhcywJCQkvKiA3LDIzIGxhdGluL2dyZWVrIHRvIEhQICovCi0gICAgeGxlZnQxNjAsICAg ICAgICAgICAgICAgICAgIC8qIDcsMjQgbGF0aW4vZ3JlZWsgdG8gTGF0aW4vQ3lyaWxsaWMgKi8K LSAgICB4bGVmdDEyOCwgICAgICAgICAgICAgICAgICAgLyogNywyNSBsYXRpbi9ncmVlayB0byBD UDg2NiAqLwotICAgIHhhc3NrLCAgICAgICAgICAgICAgICAgICAgICAvKiA3LDI2IGxhdGluL2dy ZWVrIHRvIFNob3J0IEtPSSAqLwotICAgIHhsZWZ0MTYwLAkJICAgICAgIAkvKiA3LDI3IGxhdGlu L2dyZWVrIHRvIE9sZCBLT0ktOCBHcmVlayAqLwotICAgIE5VTEwsCQkJLyogNywyOCBsYXRpbi9n cmVlayB0byBKSVMtNyAqLwotICAgIE5VTEwsCQkJLyogNywyOSBsYXRpbi9ncmVlayB0byBTaGlm dC1KSVMgKi8KLSAgICBOVUxMLAkJCS8qIDcsMzAgbGF0aW4vZ3JlZWsgdG8gSi1FVUMgKi8KLSAg ICBOVUxMLAkJCS8qIDcsMzEgbGF0aW4vZ3JlZWsgdG8gREVDIEthbmppICovCi0gICAgTlVMTCwJ CQkvKiA3LDMyIGxhdGluL2dyZWVrIHRvIEhlYnJldy03ICovCi0gICAgeGxnYXMsCQkJLyogNywz MyBsYXRpbi9ncmVlayB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4bGdhcywJCQkvKiA3LDM0IGxh dGluL2dyZWVrIHRvIENQODYyIEhlYnJldyAqLwotICAgIHhsZ2VnLAkJCS8qIDcsMzUgbGF0aW4v Z3JlZWsgdG8gRUxPVCA5MjcgR3JlZWsgKi8KLSAgICBOVUxMLAkJCS8qIDcsMzYgbGF0aW4vZ3Jl ZWsgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4bGc2OSwJCQkvKiA3LDM3IGxhdGluL2dyZWVrIHRv IENQODY5ICovCi0gICAgeGxnYXMsCQkJLyogNywzOCBsYXRpbi9ncmVlayB0byBMYXRpbi05ICov Ci0gICAgeGxnYXMsCQkJLyogNywzOSBsYXRpbi9ncmVlayB0byBDUDg1OCAqLwotICAgIHhsZWZ0 MTI4LAkJCS8qIDcsNDAgbGF0aW4vZ3JlZWsgdG8gQ1A4NTUgKi8KLSAgICB4bGVmdDEyOCwJCQkv KiA3LDQxIGxhdGluL2dyZWVrIHRvIENQMTI1MSAqLwotICAgIHhsZWZ0MTI4LAkJCS8qIDcsNDIg bGF0aW4vZ3JlZWsgdG8gQnVsZ2FyaWFuICovCi0gICAgeGxlZnQxMjgsCQkJLyogNyw0MyBsYXRp bi9ncmVlayB0byBDUDEyNTAgKi8KLSAgICB4bGVmdDEyOCwJCQkvKiA3LDQ0IGxhdGluL2dyZWVr IHRvIE1hem92aWEgKi8KLSAgICBOVUxMLAkJCS8qIDcsNDUgbGF0aW4vZ3JlZWsgdG8gVUNTLTIg Ki8KLSAgICBOVUxMLAkJCS8qIDcsNDYgbGF0aW4vZ3JlZWsgdG8gVVRGLTggKi8KLSAgICBOVUxM LAkJCS8qIDcsNDcgbGF0aW4vZ3JlZWsgdG8gS09JOFIgKi8KLSAgICBOVUxMLAkJCS8qIDcsNDgg bGF0aW4vZ3JlZWsgdG8gS09JOFUgKi8KLSAgICB4bGd3MSwJCQkvKiA3LDQ5IGxhdGluL2dyZWVr IHRvIENQMTI1MiAqLwotICAgIHpsOWFzLAkJCS8qIDgsMCBsYXRpbi05IHRvIHVzIGFzY2lpICov Ci0gICAgeGwxdWssCQkJLyogOCwxIGxhdGluLTkgdG8gdWsgYXNjaWkgKi8KLSAgICB4bDFkdSwJ CQkvKiA4LDIgbGF0aW4tOSB0byBkdXRjaCBucmMgKi8KLSAgICB4bDFmaSwJCQkvKiA4LDMgbGF0 aW4tOSB0byBmaW5uaXNoIG5yYyAqLwotICAgIHhsMWZyLAkJCS8qIDgsNCBsYXRpbi05IHRvIGZy ZW5jaCBucmMgKi8KLSAgICB4bDFmYywJCQkvKiA4LDUgbGF0aW4tOSB0byBmci1jYW5hZGlhbiBu cmMgKi8KLSAgICB4bDFnZSwJCQkvKiA4LDYgbGF0aW4tOSB0byBnZXJtYW4gbnJjICovCi0gICAg eGwxaXQsCQkJLyogOCw3IGxhdGluLTkgdG8gaXRhbGlhbiBucmMgKi8KLSAgICB4bDFodSwJCQkv KiA4LDggbGF0aW4tOSB0byBodW5nYXJpYW4gbnJjICovCi0gICAgeGwxbm8sCQkJLyogOCw5IGxh dGluLTkgdG8gbm9yZ2UvZGFuaXNoIG5yYyAqLwotICAgIHhsMXBvLAkJCS8qIDgsMTAgbGF0aW4t OSB0byBwb3J0dWd1ZXNlIG5yYyAqLwotICAgIHhsMXNwLAkJCS8qIDgsMTEgbGF0aW4tOSB0byBz cGFuaXNoIG5yYyAqLwotICAgIHhsMXN3LAkJCS8qIDgsMTIgbGF0aW4tOSB0byBzd2VkaXNoIG5y YyAqLwotICAgIHhsMWNoLAkJCS8qIDgsMTMgbGF0aW4tOSB0byBzd2lzcyBucmMgKi8KLSAgICBO VUxMLAkJCS8qIDgsMTQgbGF0aW4tOSB0byBsYXRpbi0xICovCi0gICAgeGwxbDIsCQkJLyogOCwx NSBsYXRpbi05IHRvIGxhdGluLTIgKi8KLSAgICB4bDlkbSwJCQkvKiA4LDE2IGxhdGluLTkgdG8g REVDIE1DUyAqLwotICAgIHhsOW5lLAkJCS8qIDgsMTcgbGF0aW4tOSB0byBOZVhUICovCi0gICAg eGwxNDMsCQkJLyogOCwxOCBsYXRpbi05IHRvIENQNDM3ICovCi0gICAgeGwxODUsCQkJLyogOCwx OSBsYXRpbi05IHRvIENQODUwICovCi0gICAgeGwxNTIsCQkJLyogOCwyMCBsYXRpbi05IHRvIENQ ODUyICovCi0gICAgeGwxYXEsCQkJLyogOCwyMSBsYXRpbi05IHRvIE1hY2ludG9zaCBMYXRpbiAq LwotICAgIHhsMWRnLAkJCS8qIDgsMjIgbGF0aW4tOSB0byBER0kgKi8KLSAgICB4bDFyOCwJCQkv KiA4LDIzIGxhdGluLTkgdG8gSFAgUm9tYW44ICovCi0gICAgemwxYXMsCQkJLyogOCwyNCBsYXRp bi05IHRvIExhdGluL0N5cmlsbGljICovCi0gICAgemwxYXMsICAgICAgICAgICAgICAgICAgICAg IC8qIDgsMjUgbGF0aW4tOSB0byBDUDg2NiAqLwotICAgIHhsMXNrLCAgICAgICAgICAgICAgICAg ICAgICAvKiA4LDI2IGxhdGluLTkgdG8gU2hvcnQgS09JICovCi0gICAgemwxYXMsCQkgICAgICAg CS8qIDgsMjcgbGF0aW4tOSB0byBPbGQgS09JLTggQ3lyaWxsaWMgKi8KLSAgICBOVUxMLAkJCS8q IDgsMjggbGF0aW4tOSB0byBKSVMtNyAqLwotICAgIE5VTEwsCQkJLyogOCwyOSBsYXRpbi05IHRv IFNoaWZ0LUpJUyAqLwotICAgIE5VTEwsCQkJLyogOCwzMCBsYXRpbi05IHRvIEotRVVDICovCi0g ICAgTlVMTCwJCQkvKiA4LDMxIGxhdGluLTkgdG8gREVDIEthbmppICovCi0gICAgeGwxaDcsCQkJ LyogOCwzMiBsYXRpbi05IHRvIEhlYnJldy03ICovCi0gICAgeGwxbGgsCQkJLyogOCwzMyBsYXRp bi05IHRvIExhdGluL0hlYnJldyAqLwotICAgIHhsMTYyLAkJCS8qIDgsMzQgbGF0aW4tOSB0byBD UDg2MiBIZWJyZXcgKi8KLSAgICB4bDFlZywJCQkvKiA4LDM1IGxhdGluLTkgdG8gRUxPVCA5Mjcg R3JlZWsgKi8KLSAgICB4bDFsZywJCQkvKiA4LDM2IGxhdGluLTkgdG8gTGF0aW4vR3JlZWsgKi8K LSAgICB4bDE2OSwJCQkvKiA4LDM3IGxhdGluLTkgdG8gQ1A4NjkgKi8KLSAgICBOVUxMLAkJCS8q IDgsMzggbGF0aW4tOSB0byBMYXRpbjkgKi8KLSAgICB4bDk1OCwJCQkvKiA4LDM5IGxhdGluLTkg dG8gQ1A4NTggKi8KLSAgICB6bDFhcywJCQkvKiA4LDQwIGxhdGluLTkgdG8gQ1A4NTUgKi8KLSAg ICB6bDFhcywJCQkvKiA4LDQxIGxhdGluLTkgdG8gQ1AxMjUxICovCi0gICAgeGwxYXMsCQkJLyog OCw0MiBsYXRpbi05IHRvIEJ1bGdhcmlhbiAqLwotICAgIHhsOTEyNTAsCQkJLyogOCw0MyBsYXRp bi05IHRvIENQMTI1MCAqLwotICAgIHhsOW16LAkJCS8qIDgsNDQgbGF0aW4tOSB0byBNYXpvdmlh ICovCi0gICAgTlVMTCwJCQkvKiA4LDQ1IGxhdGluLTkgdG8gVUNTLTIgKi8KLSAgICBOVUxMLAkJ CS8qIDgsNDYgbGF0aW4tOSB0byBVVEYtOCAqLwotICAgIHpsMWFzLAkJCS8qIDgsNDcgbGF0aW4t OSB0byBLT0k4LVIgKi8KLSAgICB6bDFhcywJCQkvKiA4LDQ4IGxhdGluLTkgdG8gS09JOC1VICov Ci0gICAgeGw5dzEsCQkJLyogOCw0OSBsYXRpbi05IHRvIENQMTI1MiAqLwotICAgIE5VTEwsCQkJ LyogOSwwMCBVbmljb2RlLi4uICovCi0gICAgTlVMTCwJCQkvKiA5LDAxICovCi0gICAgTlVMTCwJ CQkvKiA5LDAyICovCi0gICAgTlVMTCwJCQkvKiA5LDAzICovCi0gICAgTlVMTCwJCQkvKiA5LDA0 ICovCi0gICAgTlVMTCwJCQkvKiA5LDA1ICovCi0gICAgTlVMTCwJCQkvKiA5LDA2ICovCi0gICAg TlVMTCwJCQkvKiA5LDA3ICovCi0gICAgTlVMTCwJCQkvKiA5LDA4ICovCi0gICAgTlVMTCwJCQkv KiA5LDA5ICovCi0gICAgTlVMTCwJCQkvKiA5LDEwICovCi0gICAgTlVMTCwJCQkvKiA5LDExICov Ci0gICAgTlVMTCwJCQkvKiA5LDEyICovCi0gICAgTlVMTCwJCQkvKiA5LDEzICovCi0gICAgTlVM TCwJCQkvKiA5LDE0ICovCi0gICAgTlVMTCwJCQkvKiA5LDE1ICovCi0gICAgTlVMTCwJCQkvKiA5 LDE2ICovCi0gICAgTlVMTCwJCQkvKiA5LDE3ICovCi0gICAgTlVMTCwJCQkvKiA5LDE4ICovCi0g ICAgTlVMTCwJCQkvKiA5LDE5ICovCi0gICAgTlVMTCwJCQkvKiA5LDIwICovCi0gICAgTlVMTCwJ CQkvKiA5LDIxICovCi0gICAgTlVMTCwJCQkvKiA5LDIyICovCi0gICAgTlVMTCwJCQkvKiA5LDIz ICovCi0gICAgTlVMTCwJCQkvKiA5LDI0ICovCi0gICAgTlVMTCwJCQkvKiA5LDI1ICovCi0gICAg TlVMTCwJCQkvKiA5LDI2ICovCi0gICAgTlVMTCwJCQkvKiA5LDI3ICovCi0gICAgTlVMTCwJCQkv KiA5LDI4ICovCi0gICAgTlVMTCwJCQkvKiA5LDI5ICovCi0gICAgTlVMTCwJCQkvKiA5LDMwICov Ci0gICAgTlVMTCwJCQkvKiA5LDMxICovCi0gICAgTlVMTCwJCQkvKiA5LDMyICovCi0gICAgTlVM TCwJCQkvKiA5LDMzICovCi0gICAgTlVMTCwJCQkvKiA5LDM0ICovCi0gICAgTlVMTCwJCQkvKiA5 LDM1ICovCi0gICAgTlVMTCwJCQkvKiA5LDM2ICovCi0gICAgTlVMTCwJCQkvKiA5LDM3ICovCi0g ICAgTlVMTCwJCQkvKiA5LDM4ICovCi0gICAgTlVMTCwJCQkvKiA5LDM5ICovCi0gICAgTlVMTCwJ CQkvKiA5LDQwICovCi0gICAgTlVMTCwJCQkvKiA5LDQxICovCi0gICAgTlVMTCwJCQkvKiA5LDQy ICovCi0gICAgTlVMTCwJCQkvKiA5LDQzICovCi0gICAgTlVMTCwJCQkvKiA5LDQ0ICovCi0gICAg TlVMTCwJCQkvKiA5LDQ1ICovCi0gICAgTlVMTCwJCQkvKiA5LDQ2ICovCi0gICAgTlVMTCwJCQkv KiA5LDQ3ICovCi0gICAgTlVMTCwJCQkvKiA5LDQ4ICovCi0gICAgTlVMTCwJCQkvKiA5LDQ5ICov Ci0gICAgTlVMTCwJCQkvKiAxMCwwMCAqLwotICAgIE5VTEwsCQkJLyogMTAsMDEgKi8KLSAgICBO VUxMLAkJCS8qIDEwLDAyICovCi0gICAgTlVMTCwJCQkvKiAxMCwwMyAqLwotICAgIE5VTEwsCQkJ LyogMTAsMDQgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDA1ICovCi0gICAgTlVMTCwJCQkvKiAxMCww NiAqLwotICAgIE5VTEwsCQkJLyogMTAsMDcgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDA4ICovCi0g ICAgTlVMTCwJCQkvKiAxMCwwOSAqLwotICAgIE5VTEwsCQkJLyogMTAsMTAgKi8KLSAgICBOVUxM LAkJCS8qIDEwLDExICovCi0gICAgTlVMTCwJCQkvKiAxMCwxMiAqLwotICAgIE5VTEwsCQkJLyog MTAsMTMgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDE0ICovCi0gICAgTlVMTCwJCQkvKiAxMCwxNSAq LwotICAgIE5VTEwsCQkJLyogMTAsMTYgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDE3ICovCi0gICAg TlVMTCwJCQkvKiAxMCwxOCAqLwotICAgIE5VTEwsCQkJLyogMTAsMTkgKi8KLSAgICBOVUxMLAkJ CS8qIDEwLDIwICovCi0gICAgTlVMTCwJCQkvKiAxMCwyMSAqLwotICAgIE5VTEwsCQkJLyogMTAs MjIgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDIzICovCi0gICAgTlVMTCwJCQkvKiAxMCwyNCAqLwot ICAgIE5VTEwsCQkJLyogMTAsMjUgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDI2ICovCi0gICAgTlVM TCwJCQkvKiAxMCwyNyAqLwotICAgIE5VTEwsCQkJLyogMTAsMjggKi8KLSAgICBOVUxMLAkJCS8q IDEwLDI5ICovCi0gICAgTlVMTCwJCQkvKiAxMCwzMCAqLwotICAgIE5VTEwsCQkJLyogMTAsMzEg Ki8KLSAgICBOVUxMLAkJCS8qIDEwLDMyICovCi0gICAgTlVMTCwJCQkvKiAxMCwzMyAqLwotICAg IE5VTEwsCQkJLyogMTAsMzQgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDM1ICovCi0gICAgTlVMTCwJ CQkvKiAxMCwzNiAqLwotICAgIE5VTEwsCQkJLyogMTAsMzcgKi8KLSAgICBOVUxMLAkJCS8qIDEw LDM4ICovCi0gICAgTlVMTCwJCQkvKiAxMCwzOSAqLwotICAgIE5VTEwsCQkJLyogMTAsNDAgKi8K LSAgICBOVUxMLAkJCS8qIDEwLDQxICovCi0gICAgTlVMTCwJCQkvKiAxMCw0MiAqLwotICAgIE5V TEwsCQkJLyogMTAsNDMgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDQ0ICovCi0gICAgTlVMTCwJCQkv KiAxMCw0NSAqLwotICAgIE5VTEwsCQkJLyogMTAsNDYgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDQ3 ICovCi0gICAgTlVMTCwJCQkvKiAxMCw0OCAqLwotICAgIE5VTEwJCQkvKiAxMCw0OSAqLwotfTsK LWludCBueGxyID0gKHNpemVvZih4bHIpIC8gc2l6ZW9mKENIQVIgKikpOwotCi0vKgotICBUcmFu c2xhdGlvbiBmdW5jdGlvbiB0YWJsZSBmb3Igc2VuZGluZyBmaWxlcy4KLSAgQXJyYXkgb2YgcG9p bnRlcnMgdG8gZnVuY3Rpb25zIGZvciB0cmFuc2xhdGluZyBmcm9tIHRoZSBsb2NhbCBmaWxlCi0g IGNoYXJhY3RlciBzZXQgdG8gdGhlIHRyYW5zZmVyIGNoYXJhY3RlciBzZXQuICBJbmRleGVkIGlu IHRoZSBzYW1lCi0gIHdheSBhcyB0aGUgeGxyIGFycmF5IGFib3ZlLCBidXQgd2l0aCB0aGUgaW5k aWNlcyByZXZlcnNlZC4KLSovCi0jaWZkZWYgQ0tfQU5TSUMKLUNIQVIgKCp4bHNbTUFYVENTRVRT KzFdW01BWEZDU0VUUysxXSkoQ0hBUikgPQotI2Vsc2UKLUNIQVIgKCp4bHNbTUFYVENTRVRTKzFd W01BWEZDU0VUUysxXSkoKSA9Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBOVUxMLAkJ CS8qIDAsMCB1cyBhc2NpaSB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCwxIHVr IGFzY2lpIHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDIgZHV0Y2ggbnJjIHRv IHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDMgZmlubmlzaCBucmMgdG8gdHJhbnNw YXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsNCBmcmVuY2ggbnJjIHRvIHRyYW5zcGFyZW50ICov Ci0gICAgTlVMTCwJCQkvKiAwLDUgZnItY2FuYWRpYW4gbnJjIHRvIHRyYW5zcGFyZW50ICovCi0g ICAgTlVMTCwJCQkvKiAwLDYgZ2VybWFuIG5yYyB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEws CQkJLyogMCw3IGh1bmdhcmlhbiBucmMgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8q IDAsOCBpdGFsaWFuIG5yYyB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCw5IG5v cmdlL2RhbmlzaCBucmMgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsMTAgcG9y dHVndWVzZSBucmMgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsMTEgc3Bhbmlz aCBucmMgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsMTIgc3dlZGlzaCBucmMg dG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsMTMgc3dpc3MgbnJjIHRvIHRyYW5z cGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDE0IGxhdGluLTEgdG8gdHJhbnNwYXJlbnQgKi8K LSAgICBOVUxMLAkJCS8qIDAsMTUgbGF0aW4tMiB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEws CQkJLyogMCwxNiBERUMgTUNTIHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDE3 IE5lWFQgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsMTggQ1A0MzcgdG8gdHJh bnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsMTkgQ1A4NTAgdG8gdHJhbnNwYXJlbnQgKi8K LSAgICBOVUxMLAkJCS8qIDAsMjAgQ1A4NTIgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJ CS8qIDAsMjEgTWFjaW50b3NoIExhdGluIHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkv KiAwLDIyIERHSSB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCwyMyBIUCB0byB0 cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCwyNCBMYXRpbi9DeXJpbGxpYyB0byB0cmFu c3BhcmVudCAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiAwLDI1IENQODY2 IHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIDAs MjYgU2hvcnQgS09JIHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAg ICAgICAgIC8qIDAsMjcgT2xkIEtPSS04IHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkv KiAwLDI4IEpJUy03IHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDI5IFNoaWZ0 IEpJUyB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCwzMCBKYXBhbmVzZSBFVUMg dG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsMzEgREVDIEthbmppIHRvIHRyYW5z cGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDMyIEhlYnJldy03IHRvIHRyYW5zcGFyZW50ICov Ci0gICAgTlVMTCwJCQkvKiAwLDMzIExhdGluL0hlYnJldyB0byB0cmFuc3BhcmVudCAqLwotICAg IE5VTEwsCQkJLyogMCwzNCBDUDg2MiBIZWJyZXcgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxM LAkJCS8qIDAsMzUgRUxPVCA5MjcgR3JlZWsgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJ CS8qIDAsMzYgTGF0aW4vR3JlZWsgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAs MzcgQ1A4NjkgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsMzggTGF0aW4tOSB0 byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCwzOSBDUDg1OCB0byB0cmFuc3BhcmVu dCAqLwotICAgIE5VTEwsCQkJLyogMCw0MCBDUDg1NSB0byB0cmFuc3BhcmVudCAqLwotICAgIE5V TEwsCQkJLyogMCw0MSBDUDEyNTEgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAs NDIgQnVsZ2FyaWFuIHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDQzIENQMTI1 MCB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCw0NCBNYXpvdmlhIHRvIHRyYW5z cGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDQ1IFVDUy0yIHRvIHRyYW5zcGFyZW50ICovCi0g ICAgTlVMTCwJCQkvKiAwLDQ2IFVURi04IHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkv KiAwLDQ3IEtPSThSIHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDQ4IEtPSThV IHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDQ5IENQMTI1MiB0byB0cmFuc3Bh cmVudCAqLwotICAgIE5VTEwsCQkJLyogMSwwIHVzIGFzY2lpIHRvIGFzY2lpICovCi0gICAgTlVM TCwJCQkvKiAxLDEgdWsgYXNjaWkgdG8gYXNjaWkgKi8KLSAgICB4ZHVhcywJCQkvKiAxLDIgZHV0 Y2ggbnJjIHRvIGFzY2lpICovCi0gICAgeGZpYXMsCQkJLyogMSwzIGZpbm5pc2ggbnJjIHRvIGFz Y2lpICovCi0gICAgeGZyYXMsCQkJLyogMSw0IGZyZW5jaCBucmMgdG8gYXNjaWkgKi8KLSAgICB4 ZmNhcywJCQkvKiAxLDUgZnJlbmNoIGNhbmFkaWFuIG5yYyB0byBhc2NpaSAqLwotICAgIHhnZWFz LAkJCS8qIDEsNiBnZXJtYW4gbnJjIHRvIGFzY2lpICovCi0gICAgeGh1YXMsCQkJLyogMSw3IGh1 bmdhcmlhbiBucmMgdG8gYXNjaWkgKi8KLSAgICB4aXRhcywJCQkvKiAxLDggaXRhbGlhbiBucmMg dG8gYXNjaWkgKi8KLSAgICB4bm9hcywJCQkvKiAxLDkgbm9yd2VnaWFuL2RhbmlzaCBucmMgdG8g YXNjaWkgKi8KLSAgICB4cG9hcywJCQkvKiAxLDEwIHBvcnR1Z3Vlc2UgbnJjIHRvIGFzY2lpICov Ci0gICAgeHNwYXMsCQkJLyogMSwxMSBzcGFuaXNoIG5yYyB0byBhc2NpaSAqLwotICAgIHhzd2Fz LAkJCS8qIDEsMTIgc3dlZGlzaCBucmMgdG8gYXNjaWkgKi8KLSAgICB4Y2hhcywJCQkvKiAxLDEz IHN3aXNzIG5yYyB0byBhc2NpaSAqLwotICAgIHhsMWFzLAkJCS8qIDEsMTQgbGF0aW4tMSB0byBh c2NpaSAqLwotICAgIHhsMmFzLAkJCS8qIDEsMTUgbGF0aW4tMiB0byBhc2NpaSAqLwotICAgIHhk bWFzLAkJCS8qIDEsMTYgZGVjIG1jcyB0byBhc2NpaSAqLwotICAgIHhuZWFzLAkJCS8qIDEsMTcg TmVYVCB0byBhc2NpaSAqLwotICAgIHg0M2FzLAkJCS8qIDEsMTggQ1A0MzcgdG8gYXNjaWkgKi8K LSAgICB4ODVhcywJCQkvKiAxLDE5IENQODUwIHRvIGFzY2lpICovCi0gICAgeDUyYXMsCQkJLyog MSwyMCBDUDg1MCB0byBhc2NpaSAqLwotICAgIHhhcWFzLAkJCS8qIDEsMjEgTWFjaW50b3NoIExh dGluIHRvIGFzY2lpICovCi0gICAgeGRnYXMsCQkJLyogMSwyMiBER0kgdG8gYXNjaWkgKi8KLSAg ICB4cjhhcywJCQkvKiAxLDIzIEhQIHRvIEFTQ0lJICovCi0gICAgeGxjYXMsCQkJLyogMSwyNCBM YXRpbi9DeXJpbGxpYyB0byBBU0NJSSAqLwotICAgIHhhY2FzLCAgICAgICAgICAgICAgICAgICAg ICAvKiAxLDI1IENQODY2IHRvIEFTQ0lJICovCi0gICAgeHNrYXMsCQkJLyogMSwyNiBTaG9ydCBL T0kgdG8gQVNDSUkgKi8KLSAgICB4azhhcywgICAgICAgICAgICAgICAgICAgICAgLyogMSwyNyBP bGQgS09JLTggQ3lyaWxsaWMgdG8gQVNDSUkgKi8KLSAgICBOVUxMLAkJCS8qIDEsMjggKi8KLSAg ICBOVUxMLAkJCS8qIDEsMjkgKi8KLSAgICBOVUxMLAkJCS8qIDEsMzAgKi8KLSAgICBOVUxMLAkJ CS8qIDEsMzEgKi8KLSAgICB4aDdhcywJCQkvKiAxLDMyIEhlYnJldy03IHRvIEFTQ0lJICovCi0g ICAgeGxoYXMsCQkJLyogMSwzMyBMYXRpbi9IZWJyZXcgdG8gQVNDSUkgKi8KLSAgICB4NjJhcywJ CQkvKiAxLDM0IENQODYyIEhlYnJldyB0byBBU0NJSSAqLwotICAgIHhlZ2FzLAkJCS8qIDEsMzUg RUxPVCA5MjcgR3JlZWsgdG8gQVNDSUkgKi8KLSAgICB4bGdhcywJCQkvKiAxLDM2IExhdGluL0dy ZWVrIHRvIEFTQ0lJICovCi0gICAgeDY5YXMsCQkJLyogMSwzNyBDUDg2OSB0byBBU0NJSSAqLwot ICAgIHhsOWFzLAkJCS8qIDEsMzggTGF0aW4tOSB0byBBU0NJSSAqLwotICAgIHg1OGFzLAkJCS8q IDEsMzkgQ1A4NTggdG8gQVNDSUkgKi8KLSAgICB4NTVhcywJCQkvKiAxLDQwIENQODU1IHRvIEFT Q0lJICovCi0gICAgeDEyNTFhcywJCQkvKiAxLDQxIENQMTI1MSB0byBBU0NJSSAqLwotICAgIHhs ZWZ0MTI4LAkJCS8qIDEsNDIgQnVsZ2FyaWFuIHRvIEFTQ0lJICovCi0gICAgeDEyNTBhcywJCQkv KiAxLDQzIENQMTI1MCB0byBBU0NJSSAqLwotICAgIHhtemFzLAkJCS8qIDEsNDQgTWF6b3ZpYSB0 byBBU0NJSSAqLwotICAgIE5VTEwsCQkJLyogMSw0NSBVQ1MtMiB0byBBU0NJSSAqLwotICAgIE5V TEwsCQkJLyogMSw0NiBVVEYtOCB0byBBU0NJSSAqLwotICAgIHhrOGFzLAkJCS8qIDEsNDcgS09J OFIgdG8gQVNDSUkgKi8KLSAgICB4azhhcywJCQkvKiAxLDQ4IEtPSThVIHRvIEFTQ0lJICovCi0g ICAgeHcxYXMsCQkJLyogMSw0OSBDUDEyNTIgdG8gQVNDSUkgKi8KLSAgICBOVUxMLAkJCS8qIDIs MCB1cyBhc2NpaSB0byBsYXRpbi0xICovCi0gICAgeHVrbDEsCQkJLyogMiwxIHVrIGFzY2lpIHRv IGxhdGluLTEgKi8KLSAgICB4ZHVsMSwJCQkvKiAyLDIgZHV0Y2ggbnJjIHRvIGxhdGluLTEgKi8K LSAgICB4ZmlsMSwJCQkvKiAyLDMgZmlubmlzaCBucmMgdG8gbGF0aW4tMSAqLwotICAgIHhmcmwx LAkJCS8qIDIsNCBmcmVuY2ggbnJjIHRvIGxhdGluLTEgKi8KLSAgICB4ZmNsMSwJCQkvKiAyLDUg ZnJlbmNoIGNhbmFkaWFuIG5yYyB0byBsYXRpbi0xICovCi0gICAgeGdlbDEsCQkJLyogMiw2IGdl cm1hbiBucmMgdG8gbGF0aW4tMSAqLwotICAgIHhodWwxLAkJCS8qIDIsNyBodW5nYXJpYW4gbnJj IHRvIGxhdGluLTEgKi8KLSAgICB4aXRsMSwJCQkvKiAyLDggaXRhbGlhbiBucmMgdG8gbGF0aW4t MSAqLwotICAgIHhub2wxLAkJCS8qIDIsOSBub3J3ZWdpYW4vZGFuaXNoIG5yYyB0byBsYXRpbi0x ICovCi0gICAgeHBvbDEsCQkJLyogMiwxMCBwb3J0dWd1ZXNlIG5yYyB0byBsYXRpbi0xICovCi0g ICAgeHNwbDEsCQkJLyogMiwxMSBzcGFuaXNoIG5yYyB0byBsYXRpbi0xICovCi0gICAgeHN3bDEs CQkJLyogMiwxMiBzd2VkaXNoIG5yYyB0byBsYXRpbi0xICovCi0gICAgeGNobDEsCQkJLyogMiwx MyBzd2lzcyBucmMgdG8gbGF0aW4tMSAqLwotICAgIE5VTEwsCQkJLyogMiwxNCBsYXRpbi0xIHRv IGxhdGluLTEgKi8KLSAgICB4bDJsMSwJCQkvKiAyLDE1IGxhdGluLTIgdG8gbGF0aW4tMSAqLwot ICAgIHhkbWwxLAkJCS8qIDIsMTYgZGVjIG1jcyB0byBsYXRpbi0xICovCi0gICAgeG5lbDEsICAg ICAgICAgICAgICAgICAgICAgIC8qIDIsMTcgTmVYVCB0byBMYXRpbi0xICovCi0gICAgeDQzbDEs ICAgICAgICAgICAgICAgICAgICAgIC8qIDIsMTggQ1A0MzcgdG8gTGF0aW4tMSAqLwotICAgIHg4 NWwxLCAgICAgICAgICAgICAgICAgICAgICAvKiAyLDE5IENQODUwIHRvIExhdGluLTEgKi8KLSAg ICB4NTJsMSwgICAgICAgICAgICAgICAgICAgICAgLyogMiwyMCBDUDg1MiB0byBMYXRpbi0xICov Ci0gICAgeGFxbDEsICAgICAgICAgICAgICAgICAgICAgIC8qIDIsMjEgTWFjaW50b3NoIExhdGlu IHRvIExhdGluLTEgKi8KLSAgICB4ZGdsMSwgICAgICAgICAgICAgICAgICAgICAgLyogMiwyMiBE R0kgdG8gTGF0aW4tMSAqLwotICAgIHhyOGwxLCAgICAgICAgICAgICAgICAgICAgICAvKiAyLDIz IEhQIHRvIExhdGluLTEgKi8KLSAgICB4bGNhcywgICAgICAgICAgICAgICAgICAgICAgLyogMiwy NCBMYXRpbi9DeXJpbGxpYyB0byBMYXRpbi0xICovCi0gICAgeGFjYXMsICAgICAgICAgICAgICAg ICAgICAgIC8qIDIsMjUgQ1A4NjYgdG8gTGF0aW4tMSAqLwotICAgIHhza2FzLCAgICAgICAgICAg ICAgICAgICAgICAvKiAyLDI2IFNob3J0IEtPSSB0byBMYXRpbi0xICovCi0gICAgeGs4YXMsICAg ICAgICAgICAgICAgICAgICAgIC8qIDIsMjcgT2xkIEtPSS04IEN5cmlsbGljIHRvIExhdGluLTEg Ki8KLSAgICBOVUxMLAkJCS8qIDIsMjggS2FuamkgLi4uICovCi0gICAgTlVMTCwJCQkvKiAyLDI5 ICovCi0gICAgTlVMTCwJCQkvKiAyLDMwICovCi0gICAgTlVMTCwJCQkvKiAyLDMxICovCi0gICAg eGg3YXMsCQkJLyogMiwzMiBIZWJyZXctNyB0byBMYXRpbi0xICovCi0gICAgeGxobDEsCQkJLyog MiwzMyBMYXRpbi9IZWJyZXcgdG8gTGF0aW4tMSAqLwotICAgIHg2MmwxLAkJCS8qIDIsMzQgQ1A4 NjIgSGVicmV3IHRvIExhdGluLTEgKi8KLSAgICB4ZWdhcywJCQkvKiAyLDM1IEVMT1QgOTI3IEdy ZWVrIHRvIExhdGluLTEgKi8KLSAgICB4bGdsMSwJCQkvKiAyLDM2IExhdGluL0dyZWVrIHRvIExh dGluLTEgKi8KLSAgICBOVUxMLAkJCS8qIDIsMzcgQ1A4NjkgdG8gTGF0aW4tMSAqLwotICAgIE5V TEwsCQkJLyogMiwzOCBMYXRpbi05IHRvIExhdGluLTEgKi8KLSAgICB4NThsMSwJCQkvKiAyLDM5 IENQODU4IHRvIExhdGluLTEgKi8KLSAgICB4NTVhcywJCQkvKiAyLDQwIENQODU1IHRvIExhdGlu LTEgKi8KLSAgICB4MTI1MWFzLAkJCS8qIDIsNDEgQ1AxMjUxIHRvIExhdGluLTEgKi8KLSAgICB4 bGVmdDEyOCwJCQkvKiAyLDQyIEJ1bGdhcmlhbiB0byBMYXRpbi0xICovCi0gICAgeDEyNTBsMSwJ CQkvKiAyLDQzIENQMTI1MCB0byBMYXRpbi0xICovCi0gICAgeG16bDEsCQkJLyogMiw0NCBNYXpv dmlhIHRvIExhdGluLTEgKi8KLSAgICBOVUxMLAkJCS8qIDIsNDUgVUNTLTIgdG8gTGF0aW4tMSAq LwotICAgIE5VTEwsCQkJLyogMiw0NiBVVEYtOCB0byBMYXRpbi0xICovCi0gICAgeGs4YXMsCQkJ LyogMiw0NyBLT0k4UiB0byBMYXRpbi0xICovCi0gICAgeGs4YXMsCQkJLyogMiw0OCBLT0k4VSB0 byBMYXRpbi0xICovCi0gICAgeHcxbDEsCQkJLyogMiw0OSBDUDEyNTIgdG8gTGF0aW4tMSAqLwot ICAgIE5VTEwsCQkJLyogMywwIHVzIGFzY2lpIHRvIGxhdGluLTIgKi8KLSAgICBOVUxMLAkJCS8q IDMsMSB1ayBhc2NpaSB0byBsYXRpbi0yICovCi0gICAgeGR1YXMsCQkJLyogMywyIGR1dGNoIG5y YyB0byBsYXRpbi0yICovCi0gICAgeGZpYXMsCQkJLyogMywzIGZpbm5pc2ggbnJjIHRvIGxhdGlu LTIgKi8KLSAgICB4ZnJhcywJCQkvKiAzLDQgZnJlbmNoIG5yYyB0byBsYXRpbi0yICovCi0gICAg eGZjYXMsCQkJLyogMyw1IGZyZW5jaCBjYW5hZGlhbiBucmMgdG8gbGF0aW4tMiAqLwotICAgIHhn ZWwyLAkJCS8qIDMsNiBnZXJtYW4gbnJjIHRvIGxhdGluLTIgKi8KLSAgICB4aHVsMiwJCQkvKiAz LDcgaHVuZ2FyaWFuIG5yYyB0byBsYXRpbi0yICovCi0gICAgeGl0YXMsCQkJLyogMyw4IGl0YWxp YW4gbnJjIHRvIGxhdGluLTIgKi8KLSAgICB4bm9hcywJCQkvKiAzLDkgbm9yd2VnaWFuL2Rhbmlz aCBucmMgdG8gbGF0aW4tMiAqLwotICAgIHhwb2FzLAkJCS8qIDMsMTAgcG9ydHVndWVzZSBucmMg dG8gbGF0aW4tMiAqLwotICAgIHhzcGFzLAkJCS8qIDMsMTEgc3BhbmlzaCBucmMgdG8gbGF0aW4t MiAqLwotICAgIHhzd2FzLAkJCS8qIDMsMTIgc3dlZGlzaCBucmMgdG8gbGF0aW4tMiAqLwotICAg IHhjaGFzLAkJCS8qIDMsMTMgc3dpc3MgbnJjIHRvIGxhdGluLTIgKi8KLSAgICB4bDFsMiwJCQkv KiAzLDE0IGxhdGluLTEgdG8gbGF0aW4tMiAqLwotICAgIE5VTEwsCQkJLyogMywxNSBsYXRpbi0y IHRvIGxhdGluLTIgKi8KLSAgICB4bDFsMiwJCQkvKiAzLDE2IGRlYyBtY3MgdG8gbGF0aW4tMiAq LwotICAgIHhuZWwyLCAgICAgICAgICAgICAgICAgICAgICAvKiAzLDE3IE5lWFQgdG8gTGF0aW4t MiAqLwotICAgIHg0M2wyLCAgICAgICAgICAgICAgICAgICAgICAvKiAzLDE4IENQNDM3IHRvIExh dGluLTIgKi8KLSAgICB4ODVsMiwgICAgICAgICAgICAgICAgICAgICAgLyogMywxOSBDUDg1MCB0 byBMYXRpbi0yICovCi0gICAgeDUybDIsICAgICAgICAgICAgICAgICAgICAgIC8qIDMsMjAgQ1A4 NTIgdG8gTGF0aW4tMiAqLwotICAgIHhhcWwyLCAgICAgICAgICAgICAgICAgICAgICAvKiAzLDIx IE1hY2ludG9zaCBMYXRpbiB0byBMYXRpbi0yICovCi0gICAgeGRnbDIsICAgICAgICAgICAgICAg ICAgICAgIC8qIDMsMjIgREdJIHRvIExhdGluLTIgKi8KLSAgICB4cjhsMiwgICAgICAgICAgICAg ICAgICAgICAgLyogMywyMyBIUCB0byBMYXRpbi0yICovCi0gICAgeGxjYXMsICAgICAgICAgICAg ICAgICAgICAgIC8qIDMsMjQgTGF0aW4vQ3lyaWxsaWMgdG8gTGF0aW4tMiAqLwotICAgIHhhY2Fz LCAgICAgICAgICAgICAgICAgICAgICAvKiAzLDI1IENQODY2IHRvIExhdGluLTIgKi8KLSAgICB4 c2thcywgICAgICAgICAgICAgICAgICAgICAgLyogMywyNiBTaG9ydCBLT0kgdG8gTGF0aW4tMiAq LwotICAgIHhrOGFzLCAgICAgICAgICAgICAgICAgICAgICAvKiAzLDI3IE9sZCBLT0ktOCBDeXJp bGxpYyB0byBMYXRpbi0yICovCi0gICAgTlVMTCwJCQkvKiAzLDI4IEthbmppIC4uLiAqLwotICAg IE5VTEwsCQkJLyogMywyOSAqLwotICAgIE5VTEwsCQkJLyogMywzMCAqLwotICAgIE5VTEwsCQkJ LyogMywzMSAqLwotICAgIHhoN2FzLAkJCS8qIDMsMzIgSGVicmV3LTcgdG8gTGF0aW4tMiAqLwot ICAgIHhsaGFzLAkJCS8qIDMsMzMgTGF0aW4vSGVicmV3IHRvIExhdGluLTIgKi8KLSAgICB4NjJh cywJCQkvKiAzLDM0IENQODYyIEhlYnJldyB0byBMYXRpbi0yICovCi0gICAgeGVnYXMsCQkJLyog MywzNSBFTE9UIDkyNyBHcmVlayB0byBMYXRpbi0yICovCi0gICAgeGwybGcsCQkJLyogMywzNiBM YXRpbi9HcmVlayB0byBMYXRpbi0yICovCi0gICAgeGxlZnQxMjgsCQkJLyogMywzNyBDUDg2OSB0 byBMYXRpbi0yICovCi0gICAgeGw5bDIsCQkJLyogMywzOCBMYXRpbi05IHRvIExhdGluLTIgKi8K LSAgICB4NThsMiwJCQkvKiAzLDM5IENQODU4IHRvIExhdGluLTIgKi8KLSAgICB4NTVhcywJCQkv KiAzLDQwIENQODU1IHRvIExhdGluLTIgKi8KLSAgICB4MTI1MWFzLAkJCS8qIDMsNDEgQ1AxMjUx IHRvIExhdGluLTIgKi8KLSAgICB4bGVmdDEyOCwJCQkvKiAzLDQyIEJ1bGdhcmlhbiB0byBMYXRp bi0yICovCi0gICAgeDEyNTBsMiwJCQkvKiAzLDQzIENQMTI1MCB0byBMYXRpbi0yICovCi0gICAg eG16bDIsCQkJLyogMyw0NCBNYXpvdmlhIHRvIExhdGluLTIgKi8KLSAgICBOVUxMLAkJCS8qIDMs NDUgVUNTLTIgdG8gTGF0aW4tMiAqLwotICAgIE5VTEwsCQkJLyogMyw0NiBVVEYtOCB0byBMYXRp bi0yICovCi0gICAgeGs4YXMsCQkJLyogMyw0NyBLT0k4UiB0byBMYXRpbi0yICovCi0gICAgeGs4 YXMsCQkJLyogMyw0OCBLT0k4VSB0byBMYXRpbi0yICovCi0gICAgeHcxbDIsCQkJLyogMyw0OSBD UDEyNTIgdG8gbGF0aW4tMiAqLwotICAgIHhhc2xjLAkJCS8qIDQsMCB1cyBhc2NpaSB0byBsYXRp bi9jeXJpbGxpYyAqLwotICAgIHhhc2xjLAkJCS8qIDQsMSB1ayBhc2NpaSB0byBsYXRpbi9jeXJp bGxpYyAqLwotICAgIHhkdWFzLAkJCS8qIDQsMiBkdXRjaCBucmMgdG8gbGF0aW4vY3lyaWxsaWMg Ki8KLSAgICB4ZmlhcywJCQkvKiA0LDMgZmlubmlzaCBucmMgdG8gbGF0aW4vY3lyaWxsaWMgKi8K LSAgICB4ZnJhcywJCQkvKiA0LDQgZnJlbmNoIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAqLwotICAg IHhmY2FzLAkJCS8qIDQsNSBmcmVuY2ggY2FuYWRpYW4gbnJjIHRvIGxhdGluL2N5cmlsbGljICov Ci0gICAgeGdlYXMsCQkJLyogNCw2IGdlcm1hbiBucmMgdG8gbGF0aW4vY3lyaWxsaWMgKi8KLSAg ICB4aHVhcywJCQkvKiA0LDcgaHVuZ2FyaWFuIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAqLwotICAg IHhpdGFzLAkJCS8qIDQsOCBpdGFsaWFuIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAqLwotICAgIHhu b2FzLAkJCS8qIDQsOSBub3JnZS9kYW5pc2ggbnJjIHRvIGxhdGluL2N5cmlsbGljICovCi0gICAg eHBvYXMsCQkJLyogNCwxMCBwb3J0dWd1ZXNlIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAqLwotICAg IHhzcGFzLAkJCS8qIDQsMTEgc3BhbmlzaCBucmMgdG8gbGF0aW4vY3lyaWxsaWMgKi8KLSAgICB4 c3dhcywJCQkvKiA0LDEyIHN3ZWRpc2ggbnJjIHRvIGxhdGluL2N5cmlsbGljICovCi0gICAgeGNo YXMsCQkJLyogNCwxMyBzd2lzcyBucmMgdG8gbGF0aW4vY3lyaWxsaWMgKi8KLSAgICB4bDFhcywJ CQkvKiA0LDE0IGxhdGluLTEgdG8gbGF0aW4vY3lyaWxsaWMgKi8KLSAgICB4bDJhcywJCQkvKiA0 LDE1IGxhdGluLTIgdG8gbGF0aW4vY3lyaWxsaWMgKi8KLSAgICB4ZG1hcywJCQkvKiA0LDE2IGRl YyBtY3MgdG8gbGF0aW4vY3lyaWxsaWMgKi8KLSAgICB4bmVhcywJCQkvKiA0LDE3IE5lWFQgdG8g bGF0aW4vY3lyaWxsaWMgKi8KLSAgICB4NDNhcywJCQkvKiA0LDE4IENQNDM3IHRvIGxhdGluL2N5 cmlsbGljICovCi0gICAgeDg1YXMsCQkJLyogNCwxOSBDUDg1MCB0byBsYXRpbi9jeXJpbGxpYyAq LwotICAgIHg1MmFzLAkJCS8qIDQsMjAgQ1A4NTIgdG8gbGF0aW4vY3lyaWxsaWMgKi8KLSAgICB4 YXFhcywJCQkvKiA0LDIxIE1hY2ludG9zaCBMYXRpbiB0byBsYXRpbi9jeXJpbGxpYyAqLwotICAg IHhkZ2FzLAkJCS8qIDQsMjIgREdJIHRvIExhdGluL0N5cmlsbGljICovCi0gICAgeHI4YXMsCQkJ LyogNCwyMyBIUCB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAg ICAgICAgICAvKiA0LDI0IExhdGluL0N5cmlsbGljIHRvIExhdGluL0N5cmlsbGljICovCi0gICAg eGFjbGMsICAgICAgICAgICAgICAgICAgICAgIC8qIDQsMjUgQ1A4NjYgdG8gTGF0aW4vQ3lyaWxs aWMgKi8KLSAgICB4c2tjeSwgICAgICAgICAgICAgICAgICAgICAgLyogNCwyNiBTaG9ydCBLT0kg dG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICB4azhsYywgICAgICAgICAgICAgICAgICAgICAgLyog NCwyNyBPbGQgS09JLTggQ3lyaWxsaWMgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICBOVUxMLAkJ CS8qIDQsMjggS2FuamkuLi4gKi8KLSAgICBOVUxMLAkJCS8qIDQsMjkgKi8KLSAgICBOVUxMLAkJ CS8qIDQsMzAgKi8KLSAgICBOVUxMLAkJCS8qIDQsMzEgKi8KLSAgICB4aDdhcywJCQkvKiA0LDMy IEhlYnJldy03IHRvIExhdGluL0N5cmlsbGljICovCi0gICAgeGxoYXMsCQkJLyogNCwzMyBMYXRp bi9IZWJyZXcgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICB4NjJhcywJCQkvKiA0LDM0IENQODYy IEhlYnJldyB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIHhlZ2FzLAkJCS8qIDQsMzUgRUxPVCA5 MjcgR3JlZWsgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICB4bGVmdDE2MCwJCQkvKiA0LDM2IExh dGluL0dyZWVrIHRvIExhdGluL0N5cmlsbGljICovCi0gICAgeGxlZnQxMjgsCQkJLyogNCwzNyBD UDg2OSB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIHhsMWFzLAkJCS8qIDQsMzggbGF0aW4tOSB0 byBsYXRpbi9jeXJpbGxpYyAqLwotICAgIHhsZWZ0MTI4LAkJCS8qIDQsMzkgQ1A4NTggdG8gTGF0 aW4vQ3lyaWxsaWMgKi8KLSAgICB4NTVsYywJCQkvKiA0LDQwIENQODU1IHRvIExhdGluL0N5cmls bGljICovCi0gICAgeDEyNTFsYywJCQkvKiA0LDQxIENQMTI1MSB0byBMYXRpbi9DeXJpbGxpYyAq LwotICAgIHhidWxjLAkJCS8qIDQsNDIgQnVsZ2FyaWFuIHRvIExhdGluL0N5cmlsbGljICovCi0g ICAgeDEyNTBhcywJCQkvKiA0LDQzIENQMTI1MCB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIHht emFzLAkJCS8qIDQsNDQgTWF6b3ZpYSB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIE5VTEwsCQkJ LyogNCw0NSBVQ1MtMiB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIE5VTEwsCQkJLyogNCw0NiBV VEYtOCB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIHhrcmxjLAkJCS8qIDQsNDcgS09JOFIgdG8g TGF0aW4vQ3lyaWxsaWMgKi8KLSAgICB4a3VsYywJCQkvKiA0LDQ4IEtPSThVIHRvIExhdGluL0N5 cmlsbGljICovCi0gICAgeHcxbGMsCQkJLyogNCw0OSBDUDEyNTIgdG8gTGF0aW4vQ3lyaWxsaWMg Ki8KLSAgICBOVUxMLAkJCS8qIDUsMDAgKi8KLSAgICBOVUxMLAkJCS8qIDUsMDEgKi8KLSAgICBO VUxMLAkJCS8qIDUsMDIgKi8KLSAgICBOVUxMLAkJCS8qIDUsMDMgKi8KLSAgICBOVUxMLAkJCS8q IDUsMDQgKi8KLSAgICBOVUxMLAkJCS8qIDUsMDUgKi8KLSAgICBOVUxMLAkJCS8qIDUsMDYgKi8K LSAgICBOVUxMLAkJCS8qIDQuMDcgKi8KLSAgICBOVUxMLAkJCS8qIDUsMDggKi8KLSAgICBOVUxM LAkJCS8qIDUsMDkgKi8KLSAgICBOVUxMLAkJCS8qIDUsMTAgKi8KLSAgICBOVUxMLAkJCS8qIDUs MTEgKi8KLSAgICBOVUxMLAkJCS8qIDUsMTIgKi8KLSAgICBOVUxMLAkJCS8qIDUsMTMgKi8KLSAg ICBOVUxMLAkJCS8qIDUsMTQgKi8KLSAgICBOVUxMLAkJCS8qIDUsMTUgKi8KLSAgICBOVUxMLAkJ CS8qIDUsMTYgKi8KLSAgICBOVUxMLAkJCS8qIDUsMTcgKi8KLSAgICBOVUxMLAkJCS8qIDUsMTgg Ki8KLSAgICBOVUxMLAkJCS8qIDUsMTkgKi8KLSAgICBOVUxMLAkJCS8qIDUsMjAgKi8KLSAgICBO VUxMLAkJCS8qIDUsMjEgKi8KLSAgICBOVUxMLAkJCS8qIDUsMjIgKi8KLSAgICBOVUxMLAkJCS8q IDUsMjMgKi8KLSAgICBOVUxMLAkJCS8qIDUsMjQgKi8KLSAgICBOVUxMLAkJCS8qIDUsMjUgKi8K LSAgICBOVUxMLAkJCS8qIDUsMjYgKi8KLSAgICBOVUxMLAkJCS8qIDUsMjcgKi8KLSAgICBOVUxM LAkJCS8qIDUsMjggKi8KLSAgICBOVUxMLAkJCS8qIDUsMjkgKi8KLSAgICBOVUxMLAkJCS8qIDUs MzAgKi8KLSAgICBOVUxMLAkJCS8qIDUsMzEgKi8KLSAgICBOVUxMLAkJCS8qIDUsMzIgKi8KLSAg ICBOVUxMLAkJCS8qIDUsMzMgKi8KLSAgICBOVUxMLAkJCS8qIDUsMzQgKi8KLSAgICBOVUxMLAkJ CS8qIDUsMzUgKi8KLSAgICBOVUxMLAkJCS8qIDUsMzYgKi8KLSAgICBOVUxMLAkJCS8qIDUsMzcg Ki8KLSAgICBOVUxMLAkJCS8qIDUsMzggKi8KLSAgICBOVUxMLAkJCS8qIDUsMzkgKi8KLSAgICBO VUxMLAkJCS8qIDUsNDAgKi8KLSAgICBOVUxMLAkJCS8qIDUsNDEgKi8KLSAgICBOVUxMLAkJCS8q IDUsNDIgKi8KLSAgICBOVUxMLAkJCS8qIDUsNDMgKi8KLSAgICBOVUxMLAkJCS8qIDUsNDQgKi8K LSAgICBOVUxMLAkJCS8qIDUsNDUgKi8KLSAgICBOVUxMLAkJCS8qIDUsNDYgKi8KLSAgICBOVUxM LAkJCS8qIDUsNDcgKi8KLSAgICBOVUxMLAkJCS8qIDUsNDggKi8KLSAgICBOVUxMLAkJCS8qIDUs NDkgKi8KLSAgICBOVUxMLAkJCS8qIDYsMCB1cyBhc2NpaSB0byBMYXRpbi9IZWJyZXcgKi8KLSAg ICBOVUxMLAkJCS8qIDYsMSB1ayBhc2NpaSB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4ZHVhcywJ CQkvKiA2LDIgZHV0Y2ggbnJjIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhmaWFzLAkJCS8qIDYs MyBmaW5uaXNoIG5yYyB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4ZnJhcywJCQkvKiA2LDQgZnJl bmNoIG5yYyB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4ZmNhcywJCQkvKiA2LDUgZnJlbmNoIGNh bmFkaWFuIG5yYyB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4Z2VhcywJCQkvKiA2LDYgZ2VybWFu IG5yYyB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4aHVhcywJCQkvKiA2LDcgaHVuZ2FyaWFuIG5y YyB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4aXRhcywJCQkvKiA2LDggaXRhbGlhbiBucmMgdG8g TGF0aW4vSGVicmV3ICovCi0gICAgeG5vYXMsCQkJLyogNiw5IG5vcmdlL2RhbmlzaCBucmMgdG8g TGF0aW4vSGVicmV3ICovCi0gICAgeHBvYXMsCQkJLyogNiwxMCBwb3J0dWd1ZXNlIG5yYyB0byBM YXRpbi9IZWJyZXcgKi8KLSAgICB4c3BhcywJCQkvKiA2LDExIHNwYW5pc2ggbnJjIHRvIExhdGlu L0hlYnJldyAqLwotICAgIHhzd2FzLAkJCS8qIDYsMTIgc3dlZGlzaCBucmMgdG8gTGF0aW4vSGVi cmV3ICovCi0gICAgeGNoYXMsCQkJLyogNiwxMyBzd2lzcyBucmMgdG8gTGF0aW4vSGVicmV3ICov Ci0gICAgeGwxbGgsCQkJLyogNiwxNCBsYXRpbi0xIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhs MmFzLAkJCS8qIDYsMTUgbGF0aW4tMiB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4ZG1hcywJCQkv KiA2LDE2IGRlYyBtY3MgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgeG5lYXMsCQkJLyogNiwxNyBO ZVhUIHRvIExhdGluL0hlYnJldyAqLwotICAgIHg0M2FzLAkJCS8qIDYsMTggQ1A0MzcgdG8gTGF0 aW4vSGVicmV3ICovCi0gICAgeDg1YXMsCQkJLyogNiwxOSBDUDg1MCB0byBMYXRpbi9IZWJyZXcg Ki8KLSAgICB4NTJhcywJCQkvKiA2LDIwIENQODUyIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhh cWFzLAkJCS8qIDYsMjEgTWFjaW50b3NoIExhdGluIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhk Z2FzLAkJCS8qIDYsMjIgREdJIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhyOGFzLAkJCS8qIDYs MjMgSFAgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgeGxjYXMsICAgICAgICAgICAgICAgICAgICAg IC8qIDYsMjQgTGF0aW4vQ3lyaWxsaWMgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgeGFjYXMsICAg ICAgICAgICAgICAgICAgICAgIC8qIDYsMjUgQ1A4NjYgdG8gTGF0aW4vSGVicmV3ICovCi0gICAg eHNrYXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDYsMjYgU2hvcnQgS09JIHRvIExhdGluL0hl YnJldyAqLwotICAgIHhrOGFzLCAgICAgICAgICAgICAgICAgICAgICAvKiA2LDI3IE9sZCBLT0kt OCBDeXJpbGxpYyB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICBOVUxMLAkJCS8qIDYsMjggS2Fuamku Li4gKi8KLSAgICBOVUxMLAkJCS8qIDYsMjkgKi8KLSAgICBOVUxMLAkJCS8qIDYsMzAgKi8KLSAg ICBOVUxMLAkJCS8qIDYsMzEgKi8KLSAgICB4aDdsaCwJCQkvKiA2LDMyIEhlYnJldy03IHRvIExh dGluL0hlYnJldyAqLwotICAgIE5VTEwsCQkJLyogNiwzMyBMYXRpbi9IZWJyZXcgdG8gTGF0aW4v SGVicmV3ICovCi0gICAgeDYybGgsCQkJLyogNiwzNCBDUDg2MiBIZWJyZXcgdG8gTGF0aW4vSGVi cmV3ICovCi0gICAgeGVnYXMsCQkJLyogNiwzNSBFTE9UIDkyNyBHcmVlayB0byBMYXRpbi9IZWJy ZXcgKi8KLSAgICB4bGdhcywJCQkvKiA2LDM2IExhdGluL0dyZWVrIHRvIExhdGluL0hlYnJldyAq LwotICAgIHg2OWFzLAkJCS8qIDYsMzcgQ1A4NjkgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgeGwx YXMsCQkJLyogNiwzOCBsYXRpbi05IHRvIExhdGluL0hlYnJldyAqLwotICAgIHg1OGFzLAkJCS8q IDYsMzkgQ1A4NTggdG8gTGF0aW4vSGVicmV3ICovCi0gICAgeDU1YXMsCQkJLyogNiw0MCBDUDg1 NSB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4MTI1MWFzLAkJCS8qIDYsNDEgQ1AxMjUxIHRvIExh dGluL0hlYnJldyAqLwotICAgIHhsZWZ0MTI4LAkJCS8qIDYsNDIgQnVsZ2FyaWFuIHRvIExhdGlu L0hlYnJldyAqLwotICAgIHgxMjUwYXMsCQkJLyogNiw0MyBDUDEyNTAgdG8gTGF0aW4vSGVicmV3 ICovCi0gICAgeG16YXMsCQkJLyogNiw0NCBNYXpvdmlhIHRvIExhdGluL0hlYnJldyAqLwotICAg IE5VTEwsCQkJLyogNiw0NSBVQ1MtMiB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICBOVUxMLAkJCS8q IDYsNDYgVVRGLTggdG8gTGF0aW4vSGVicmV3ICovCi0gICAgTlVMTCwJCQkvKiA2LDQ3IEtPSThS IHRvIExhdGluL0hlYnJldyAqLwotICAgIE5VTEwsCQkJLyogNiw0OCBLT0k4VSB0byBMYXRpbi9I ZWJyZXcgKi8KLSAgICB4dzFsaCwJCQkvKiA2LDQ5IENQMTI1MiB0byBMYXRpbi9IZWJyZXcgKi8K LSAgICBOVUxMLAkJCS8qIDcsMCB1cyBhc2NpaSB0byBMYXRpbi9HcmVlayAqLwotICAgIE5VTEws CQkJLyogNywxIHVrIGFzY2lpIHRvIExhdGluL0dyZWVrICovCi0gICAgeGR1YXMsCQkJLyogNywy IGR1dGNoIG5yYyB0byBMYXRpbi9HcmVlayAqLwotICAgIHhmaWFzLAkJCS8qIDcsMyBmaW5uaXNo IG5yYyB0byBMYXRpbi9HcmVlayAqLwotICAgIHhmcmFzLAkJCS8qIDcsNCBmcmVuY2ggbnJjIHRv IExhdGluL0dyZWVrICovCi0gICAgeGZjYXMsCQkJLyogNyw1IGZyZW5jaCBjYW5hZGlhbiBucmMg dG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4Z2VhcywJCQkvKiA3LDYgZ2VybWFuIG5yYyB0byBMYXRp bi9HcmVlayAqLwotICAgIHhodWFzLAkJCS8qIDcsNyBodW5nYXJpYW4gbnJjIHRvIExhdGluL0dy ZWVrICovCi0gICAgeGl0YXMsCQkJLyogNyw4IGl0YWxpYW4gbnJjIHRvIExhdGluL0dyZWVrICov Ci0gICAgeG5vYXMsCQkJLyogNyw5IG5vcmdlL2RhbmlzaCBucmMgdG8gTGF0aW4vR3JlZWsgKi8K LSAgICB4cG9hcywJCQkvKiA3LDEwIHBvcnR1Z3Vlc2UgbnJjIHRvIExhdGluL0dyZWVrICovCi0g ICAgeHNwYXMsCQkJLyogNywxMSBzcGFuaXNoIG5yYyB0byBMYXRpbi9HcmVlayAqLwotICAgIHhz d2FzLAkJCS8qIDcsMTIgc3dlZGlzaCBucmMgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4Y2hhcywJ CQkvKiA3LDEzIHN3aXNzIG5yYyB0byBMYXRpbi9HcmVlayAqLwotICAgIHhsMWxnLAkJCS8qIDcs MTQgbGF0aW4tMSB0byBMYXRpbi9HcmVlayAqLwotICAgIHhsMmxnLAkJCS8qIDcsMTUgbGF0aW4t MiB0byBMYXRpbi9HcmVlayAqLwotICAgIHhsMWxnLAkJCS8qIDcsMTYgZGVjIG1jcyB0byBMYXRp bi9HcmVlayAqLwotICAgIHhuZWFzLAkJCS8qIDcsMTcgTmVYVCB0byBMYXRpbi9HcmVlayAqLwot ICAgIHhsZWZ0MTI4LAkJCS8qIDcsMTggQ1A0MzcgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4ODVh cywJCQkvKiA3LDE5IENQODUwIHRvIExhdGluL0dyZWVrICovCi0gICAgeDUyYXMsCQkJLyogNywy MCBDUDg1MiB0byBMYXRpbi9HcmVlayAqLwotICAgIHhhcWFzLAkJCS8qIDcsMjEgTWFjaW50b3No IExhdGluIHRvIExhdGluL0dyZWVrICovCi0gICAgeGRnYXMsCQkJLyogNywyMiBER0kgdG8gTGF0 aW4vR3JlZWsgKi8KLSAgICB4cjhhcywJCQkvKiA3LDIzIEhQIHRvIExhdGluL0dyZWVrICovCi0g ICAgeGxlZnQxNjAsICAgICAgICAgICAgICAgICAgIC8qIDcsMjQgTGF0aW4vQ3lyaWxsaWMgdG8g TGF0aW4vR3JlZWsgKi8KLSAgICB4bGVmdDEyOCwgICAgICAgICAgICAgICAgICAgLyogNywyNSBD UDg2NiB0byBMYXRpbi9HcmVlayAqLwotICAgIHhza2FzLCAgICAgICAgICAgICAgICAgICAgICAv KiA3LDI2IFNob3J0IEtPSSB0byBMYXRpbi9HcmVlayAqLwotICAgIHhrOGFzLCAgICAgICAgICAg ICAgICAgICAgICAvKiA3LDI3IE9sZCBLT0ktOCBDeXJpbGxpYyB0byBMYXRpbi9HcmVlayAqLwot ICAgIE5VTEwsCQkJLyogNywyOCBLYW5qaS4uLiAqLwotICAgIE5VTEwsCQkJLyogNywyOSAqLwot ICAgIE5VTEwsCQkJLyogNywzMCAqLwotICAgIE5VTEwsCQkJLyogNywzMSAqLwotICAgIHhoN2Fz LAkJCS8qIDcsMzIgSGVicmV3LTcgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICBOVUxMLAkJCS8qIDcs MzMgTGF0aW4vSGVicmV3IHRvIExhdGluL0dyZWVrICovCi0gICAgeDYyYXMsCQkJLyogNywzNCBD UDg2MiBIZWJyZXcgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4ZWdsZywJCQkvKiA3LDM1IEVMT1Qg OTI3IEdyZWVrIHRvIExhdGluL0dyZWVrICovCi0gICAgTlVMTCwJCQkvKiA3LDM2IExhdGluL0dy ZWVrIHRvIExhdGluL0dyZWVrICovCi0gICAgeDY5bGcsCQkJLyogNywzNyBDUDg2OSB0byBMYXRp bi9HcmVlayAqLwotICAgIHhsMWFzLAkJCS8qIDcsMzggbGF0aW4tOSB0byBMYXRpbi9HcmVlayAq LwotICAgIHhsMWFzLAkJCS8qIDcsMzkgbGF0aW4tOSB0byBMYXRpbi9IZWJyZXcqLwotICAgIHhs ZWZ0MTI4LAkJCS8qIDcsNDAgQ1A4NTUgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4bGVmdDEyOCwJ CQkvKiA3LDQxIENQMTI1MSB0byBMYXRpbi9HcmVlayAqLwotICAgIHhsZWZ0MTI4LAkJCS8qIDcs NDIgQnVsZ2FyaWFuIHRvIExhdGluL0dyZWVrICovCi0gICAgeDEyNTBhcywJCQkvKiA3LDQzIENQ MTI1MCB0byBMYXRpbi9HcmVlayAqLwotICAgIHhtemFzLAkJCS8qIDcsNDQgTWF6b3ZpYSB0byBM YXRpbi9HcmVlayAqLwotICAgIE5VTEwsCQkJLyogNyw0NSBVQ1MtMiB0byBMYXRpbi9HcmVlayAq LwotICAgIE5VTEwsCQkJLyogNyw0NiBVVEYtOCB0byBMYXRpbi9HcmVlayAqLwotICAgIE5VTEws CQkJLyogNyw0NyBLT0k4UiB0byBMYXRpbi9HcmVlayAqLwotICAgIE5VTEwsCQkJLyogNyw0OCBL T0k4VSB0byBMYXRpbi9HcmVlayAqLwotICAgIHh3MWxnLAkJCS8qIDcsNDkgQ1AxMjUyIHRvIExh dGluL0dyZWVrICovCi0gICAgTlVMTCwJCQkvKiA4LDAgdXMgYXNjaWkgdG8gbGF0aW4tOSAqLwot ICAgIHh1a2wxLAkJCS8qIDgsMSB1ayBhc2NpaSB0byBsYXRpbi05ICovCi0gICAgeGR1bDEsCQkJ LyogOCwyIGR1dGNoIG5yYyB0byBsYXRpbi05ICovCi0gICAgeGZpbDEsCQkJLyogOCwzIGZpbm5p c2ggbnJjIHRvIGxhdGluLTkgKi8KLSAgICB4ZnJsMSwJCQkvKiA4LDQgZnJlbmNoIG5yYyB0byBs YXRpbi05ICovCi0gICAgeGZjbDEsCQkJLyogOCw1IGZyZW5jaCBjYW5hZGlhbiBucmMgdG8gbGF0 aW4tOSAqLwotICAgIHhnZWwxLAkJCS8qIDgsNiBnZXJtYW4gbnJjIHRvIGxhdGluLTkgKi8KLSAg ICB4aHVsMSwJCQkvKiA4LDcgaHVuZ2FyaWFuIG5yYyB0byBsYXRpbi05ICovCi0gICAgeGl0bDEs CQkJLyogOCw4IGl0YWxpYW4gbnJjIHRvIGxhdGluLTkgKi8KLSAgICB4bm9sMSwJCQkvKiA4LDkg bm9yd2VnaWFuL2RhbmlzaCBucmMgdG8gbGF0aW4tOSAqLwotICAgIHhwb2wxLAkJCS8qIDgsMTAg cG9ydHVndWVzZSBucmMgdG8gbGF0aW4tOSAqLwotICAgIHhzcGwxLAkJCS8qIDgsMTEgc3Bhbmlz aCBucmMgdG8gbGF0aW4tOSAqLwotICAgIHhzd2wxLAkJCS8qIDgsMTIgc3dlZGlzaCBucmMgdG8g bGF0aW4tOSAqLwotICAgIHhjaGwxLAkJCS8qIDgsMTMgc3dpc3MgbnJjIHRvIGxhdGluLTkgKi8K LSAgICBOVUxMLAkJCS8qIDgsMTQgbGF0aW4tMSB0byBsYXRpbi05ICovCi0gICAgeGwybDksCQkJ LyogOCwxNSBsYXRpbi0yIHRvIGxhdGluLTkgKi8KLSAgICB4ZG1sOSwJCQkvKiA4LDE2IGRlYyBt Y3MgdG8gbGF0aW4tOSAqLwotICAgIHhuZWw5LCAgICAgICAgICAgICAgICAgICAgICAvKiA4LDE3 IE5lWFQgVG8gTGF0aW4tOSAqLwotICAgIHg0M2wxLCAgICAgICAgICAgICAgICAgICAgICAvKiA4 LDE4IENQNDM3IFRvIExhdGluLTkgKi8KLSAgICB4ODVsMSwgICAgICAgICAgICAgICAgICAgICAg LyogOCwxOSBDUDg1MCBUbyBMYXRpbi05ICovCi0gICAgeDUybDEsICAgICAgICAgICAgICAgICAg ICAgIC8qIDgsMjAgQ1A4NTIgVG8gTGF0aW4tOSAqLwotICAgIHhhcWwxLCAgICAgICAgICAgICAg ICAgICAgICAvKiA4LDIxIE1hY2ludG9zaCBMYXRpbiBUbyBMYXRpbi05ICovCi0gICAgeGRnbDEs ICAgICAgICAgICAgICAgICAgICAgIC8qIDgsMjIgREdJIFRvIExhdGluLTkgKi8KLSAgICB4cjhs MSwgICAgICAgICAgICAgICAgICAgICAgLyogOCwyMyBIUCBUbyBMYXRpbi05ICovCi0gICAgeGxj YXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDgsMjQgTGF0aW4vQ3lyaWxsaWMgVG8gTGF0aW4t OSAqLwotICAgIHhhY2FzLCAgICAgICAgICAgICAgICAgICAgICAvKiA4LDI1IENQODY2IFRvIExh dGluLTkgKi8KLSAgICB4c2thcywgICAgICAgICAgICAgICAgICAgICAgLyogOCwyNiBTaG9ydCBL T0kgVG8gTGF0aW4tOSAqLwotICAgIHhrOGFzLCAgICAgICAgICAgICAgICAgICAgICAvKiA4LDI3 IE9sZCBLT0ktOCBDeXJpbGxpYyBUbyBMYXRpbi05ICovCi0gICAgTlVMTCwJCQkvKiA4LDI4IEth bmppIC4uLiAqLwotICAgIE5VTEwsCQkJLyogOCwyOSAqLwotICAgIE5VTEwsCQkJLyogOCwzMCAq LwotICAgIE5VTEwsCQkJLyogOCwzMSAqLwotICAgIHhoN2FzLAkJCS8qIDgsMzIgSGVicmV3LTcg VG8gTGF0aW4tOSAqLwotICAgIHhsaGwxLAkJCS8qIDgsMzMgTGF0aW4vSGVicmV3IFRvIExhdGlu LTkgKi8KLSAgICB4NjJsMSwJCQkvKiA4LDM0IENQODYyIEhlYnJldyBUbyBMYXRpbi05ICovCi0g ICAgeGVnYXMsCQkJLyogOCwzNSBFTE9UIDkyNyBHcmVlayBUbyBMYXRpbi05ICovCi0gICAgeGxn bDEsCQkJLyogOCwzNiBMYXRpbi9HcmVlayBUbyBMYXRpbi05ICovCi0gICAgeGwxNjksCQkJLyog OCwzNyBDUDg2OSBUbyBMYXRpbi05ICovCi0gICAgTlVMTCwJCQkvKiA4LDM4IExhdGluLTkgVG8g TGF0aW4tOSAqLwotICAgIHg1OGw5LAkJCS8qIDgsMzkgY3A4NTggVG8gTGF0aW4tOSAqLwotICAg IHg1NWFzLAkJCS8qIDgsNDAgY3A4NTUgVG8gTGF0aW4tOSAqLwotICAgIHg1NWFzLAkJCS8qIDgs NDEgY3AxMjUxIFRvIExhdGluLTkgKi8KLSAgICB4bGVmdDEyOCwJCQkvKiA4LDQyIEJ1bGdhcmlh biBUbyBMYXRpbi05ICovCi0gICAgeDEyNTBsOSwJCQkvKiA4LDQzIENQMTI1MCBUbyBMYXRpbi05 ICovCi0gICAgeG16bDksCQkJLyogOCw0NCBNYXpvdmlhIFRvIExhdGluLTkgKi8KLSAgICBOVUxM LAkJCS8qIDgsNDUgVUNTLTIgdG8gTGF0aW4tOSAqLwotICAgIE5VTEwsCQkJLyogOCw0NiBVVEYt OCB0byBMYXRpbi05ICovCi0gICAgTlVMTCwJCQkvKiA4LDQ3IEtPSThSIHRvIExhdGluLTkgKi8K LSAgICBOVUxMLAkJCS8qIDgsNDggS09JOFUgdG8gTGF0aW4tOSAqLwotICAgIHh3MWw5LAkJCS8q IDgsNDkgQ1AxMjUyIHRvIExhdGluLTkgKi8KLSAgICBOVUxMLAkJCS8qIDksMDAgVW5pY29kZS4u LiAqLwotICAgIE5VTEwsCQkJLyogOSwwMSAqLwotICAgIE5VTEwsCQkJLyogOSwwMiAqLwotICAg IE5VTEwsCQkJLyogOSwwMyAqLwotICAgIE5VTEwsCQkJLyogOSwwNCAqLwotICAgIE5VTEwsCQkJ LyogOSwwNSAqLwotICAgIE5VTEwsCQkJLyogOSwwNiAqLwotICAgIE5VTEwsCQkJLyogOSwwNyAq LwotICAgIE5VTEwsCQkJLyogOSwwOCAqLwotICAgIE5VTEwsCQkJLyogOSwwOSAqLwotICAgIE5V TEwsCQkJLyogOSwxMCAqLwotICAgIE5VTEwsCQkJLyogOSwxMSAqLwotICAgIE5VTEwsCQkJLyog OSwxMiAqLwotICAgIE5VTEwsCQkJLyogOSwxMyAqLwotICAgIE5VTEwsCQkJLyogOSwxNCAqLwot ICAgIE5VTEwsCQkJLyogOSwxNSAqLwotICAgIE5VTEwsCQkJLyogOSwxNiAqLwotICAgIE5VTEws CQkJLyogOSwxNyAqLwotICAgIE5VTEwsCQkJLyogOSwxOCAqLwotICAgIE5VTEwsCQkJLyogOSwx OSAqLwotICAgIE5VTEwsCQkJLyogOSwyMCAqLwotICAgIE5VTEwsCQkJLyogOSwyMSAqLwotICAg IE5VTEwsCQkJLyogOSwyMiAqLwotICAgIE5VTEwsCQkJLyogOSwyMyAqLwotICAgIE5VTEwsCQkJ LyogOSwyNCAqLwotICAgIE5VTEwsCQkJLyogOSwyNSAqLwotICAgIE5VTEwsCQkJLyogOSwyNiAq LwotICAgIE5VTEwsCQkJLyogOSwyNyAqLwotICAgIE5VTEwsCQkJLyogOSwyOCAqLwotICAgIE5V TEwsCQkJLyogOSwyOSAqLwotICAgIE5VTEwsCQkJLyogOSwzMCAqLwotICAgIE5VTEwsCQkJLyog OSwzMSAqLwotICAgIE5VTEwsCQkJLyogOSwzMiAqLwotICAgIE5VTEwsCQkJLyogOSwzMyAqLwot ICAgIE5VTEwsCQkJLyogOSwzNCAqLwotICAgIE5VTEwsCQkJLyogOSwzNSAqLwotICAgIE5VTEws CQkJLyogOSwzNiAqLwotICAgIE5VTEwsCQkJLyogOSwzNyAqLwotICAgIE5VTEwsCQkJLyogOSwz OCAqLwotICAgIE5VTEwsCQkJLyogOSwzOSAqLwotICAgIE5VTEwsCQkJLyogOSw0MCAqLwotICAg IE5VTEwsCQkJLyogOSw0MSAqLwotICAgIE5VTEwsCQkJLyogOSw0MiAqLwotICAgIE5VTEwsCQkJ LyogOSw0MyAqLwotICAgIE5VTEwsCQkJLyogOSw0NCAqLwotICAgIE5VTEwsCQkJLyogOSw0NSAq LwotICAgIE5VTEwsCQkJLyogOSw0NiAqLwotICAgIE5VTEwsCQkJLyogOSw0NyAqLwotICAgIE5V TEwsCQkJLyogOSw0OCAqLwotICAgIE5VTEwsCQkJLyogOSw0OSAqLwotICAgIE5VTEwsCQkJLyog MTAsMDAgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDAxICovCi0gICAgTlVMTCwJCQkvKiAxMCwwMiAq LwotICAgIE5VTEwsCQkJLyogMTAsMDMgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDA0ICovCi0gICAg TlVMTCwJCQkvKiAxMCwwNSAqLwotICAgIE5VTEwsCQkJLyogMTAsMDYgKi8KLSAgICBOVUxMLAkJ CS8qIDEwLDA3ICovCi0gICAgTlVMTCwJCQkvKiAxMCwwOCAqLwotICAgIE5VTEwsCQkJLyogMTAs MDkgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDEwICovCi0gICAgTlVMTCwJCQkvKiAxMCwxMSAqLwot ICAgIE5VTEwsCQkJLyogMTAsMTIgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDEzICovCi0gICAgTlVM TCwJCQkvKiAxMCwxNCAqLwotICAgIE5VTEwsCQkJLyogMTAsMTUgKi8KLSAgICBOVUxMLAkJCS8q IDEwLDE2ICovCi0gICAgTlVMTCwJCQkvKiAxMCwxNyAqLwotICAgIE5VTEwsCQkJLyogMTAsMTgg Ki8KLSAgICBOVUxMLAkJCS8qIDEwLDE5ICovCi0gICAgTlVMTCwJCQkvKiAxMCwyMCAqLwotICAg IE5VTEwsCQkJLyogMTAsMjEgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDIyICovCi0gICAgTlVMTCwJ CQkvKiAxMCwyMyAqLwotICAgIE5VTEwsCQkJLyogMTAsMjQgKi8KLSAgICBOVUxMLAkJCS8qIDEw LDI1ICovCi0gICAgTlVMTCwJCQkvKiAxMCwyNiAqLwotICAgIE5VTEwsCQkJLyogMTAsMjcgKi8K LSAgICBOVUxMLAkJCS8qIDEwLDI4ICovCi0gICAgTlVMTCwJCQkvKiAxMCwyOSAqLwotICAgIE5V TEwsCQkJLyogMTAsMzAgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDMxICovCi0gICAgTlVMTCwJCQkv KiAxMCwzMiAqLwotICAgIE5VTEwsCQkJLyogMTAsMzMgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDM0 ICovCi0gICAgTlVMTCwJCQkvKiAxMCwzNSAqLwotICAgIE5VTEwsCQkJLyogMTAsMzYgKi8KLSAg ICBOVUxMLAkJCS8qIDEwLDM3ICovCi0gICAgTlVMTCwJCQkvKiAxMCwzOCAqLwotICAgIE5VTEws CQkJLyogMTAsMzkgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDQwICovCi0gICAgTlVMTCwJCQkvKiAx MCw0MSAqLwotICAgIE5VTEwsCQkJLyogMTAsNDIgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDQzICov Ci0gICAgTlVMTCwJCQkvKiAxMCw0NCAqLwotICAgIE5VTEwsCQkJLyogMTAsNDUgKi8KLSAgICBO VUxMLAkJCS8qIDEwLDQ2ICovCi0gICAgTlVMTCwJCQkvKiAxMCw0NyAqLwotICAgIE5VTEwsCQkJ LyogMTAsNDggKi8KLSAgICBOVUxMCQkJLyogMTAsNDkgKi8KLX07Ci1pbnQgbnhscyA9IChzaXpl b2YoeGxzKSAvIHNpemVvZihDSEFSICopKTsKLQotI2lmbmRlZiBOT0xPQ0FMCi0vKgotICBUaGUg Zm9sbG93aW5nIHJvdXRpbmVzIGFyZSB1c2VmdWwgb25seSBmb3IgdGVybWluYWwgY2hhcmFjdGVy IHNldHMsIGFuZCBzbwotICBpZmRlZidkIG91dCBmb3IgTk9MT0NBTCBjb21waWxhdGlvbnMuCi0q LwotCi0vKgotICBDIFMgXyBJIFMgXyBOIFIgQwotCi0gIFJldHVybnMgbm9uemVybyBpZiBhcmd1 bWVudCBpbmRpY2F0ZXMgYSA3LWJpdCBuYXRpb25hbCBjaGFyYWN0ZXIgc2V0LAotICB6ZXJvIG90 aGVyd2lzZS4KLSovCi1pbnQKLWNzX2lzX25yYyh4KSBpbnQgeDsgewotI2lmZGVmIFVOSUNPREUK LSAgICBpZiAoeCA9PSBUWF9KMjAxUiB8fCB4ID09IFRYX0RFQ1NQRUMgfHwgeCA9PSBUWF9ERUNU RUNICi0gICAgICAgIHx8IHR4cmluZm9beF0gPT0gTlVMTCkKLSAgICAgIHJldHVybigwKTsKLSAg ICBlbHNlCi0gICAgICByZXR1cm4odHhyaW5mb1t4XS0+ZmxhZ3MgJiBYMlVfU1REICYmIHR4cmlu Zm9beF0tPnNpemUgPT0gOTQpOwotI2Vsc2UgLyogVU5JQ09ERSAqLwotICAgIGlmICgoY3Nfc2l6 ZSh4KSA9PSA5NCkpCi0gICAgICByZXR1cm4oMSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKDAp OwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLX0KLQotLyoKLSAgQyBTIF8gSSBTIF8gUyBUIEQKLQot ICBSZXR1cm5zIG5vbnplcm8gaWYgYXJndW1lbnQgaW5kaWNhdGVzIGFuIElTTyA0ODczLXN0YW5k YXJkLWZvcm1hdAotICBjaGFyYWN0ZXIgc2V0LCBpLmUuIG9uZSBpbiB3aGljaCB0aGUgY29udHJv bCByZWdpb24gaXMgTk9UIHVzZWQgZm9yCi0gIGdyYXBoaWNzOyB6ZXJvIG90aGVyd2lzZS4KLSov Ci1pbnQKLWNzX2lzX3N0ZCh4KSBpbnQgeDsgewotI2lmZGVmIFVOSUNPREUKLSAgICBpZiAoIXR4 cmluZm9beF0pCQkJLyogRXZlbiBtb3JlIHNhZmV0eSAqLwotICAgICAgcmV0dXJuKDApOwotICAg IGVsc2UgaWYgKHR4cmluZm9beF0tPnNpemUgPT0gMTI4KQkvKiBKdXN0IGZvciBzYWZldHkgKi8K LSAgICAgIHJldHVybigwKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odHhyaW5mb1t4XS0+Zmxh Z3MgJiBYMlVfU1REKTsgLyogT25seSB0aGlzIHNob3VsZCBiZSBuZWVkZWQgKi8KLSNlbHNlCi0g ICAgc3dpdGNoICh4KSB7Ci0gICAgICBjYXNlIEZDX0NQNDM3OgkJCS8qIENvZGUgcGFnZXMgdXNl IEMxIGdyYXBoaWNzICovCi0gICAgICBjYXNlIEZDX0NQODUwOgotICAgICAgY2FzZSBGQ19DUDg1 MjoKLSAgICAgIGNhc2UgRkNfQ1A4NjI6Ci0gICAgICBjYXNlIEZDX0NQODY2OgotICAgICAgY2Fz ZSBGQ19DUDg2OToKLSAgICAgIGNhc2UgRkNfQ1A4NTg6Ci0gICAgICBjYXNlIEZDX0FQUFFEOgkJ CS8qIFNvIGRvIEFwcGxlIGFuZCBOZVhUU1RFUCAqLwotICAgICAgY2FzZSBGQ19ORVhUOgotCXJl dHVybigwKTsKLSAgICAgIGRlZmF1bHQ6CQkJCS8qIE90aGVycyBiZWhhdmUgKi8KLQlyZXR1cm4o MSk7Ci0gICAgfQotI2VuZGlmIC8qIENLT1VJTkkgKi8KLX0KLQotaW50Ci1jc19zaXplKHgpIGlu dCB4OyB7Ci0jaWZkZWYgVU5JQ09ERQotICAgIGlmICghdHhyaW5mb1t4XSkKLSAgICAgIHJldHVy bigxMjgpOwotICAgIHJldHVybih0eHJpbmZvW3hdLT5zaXplKTsKLSNlbHNlCi0gICAgc3dpdGNo KHgpIHsKLSAgICAgIGNhc2UgRkNfVVNBU0NJSToKLSAgICAgIGNhc2UgRkNfVUtBU0NJSToKLSAg ICAgIGNhc2UgRkNfRFVBU0NJSToKLSAgICAgIGNhc2UgRkNfRklBU0NJSToKLSAgICAgIGNhc2Ug RkNfRlJBU0NJSToKLSAgICAgIGNhc2UgRkNfRkNBU0NJSToKLSAgICAgIGNhc2UgRkNfR0VBU0NJ SToKLSAgICAgIGNhc2UgRkNfSFVBU0NJSToKLSAgICAgIGNhc2UgRkNfSVRBU0NJSToKLSAgICAg IGNhc2UgRkNfTk9BU0NJSToKLSAgICAgIGNhc2UgRkNfUE9BU0NJSToKLSAgICAgIGNhc2UgRkNf U1BBU0NJSToKLSAgICAgIGNhc2UgRkNfU1dBU0NJSToKLSAgICAgIGNhc2UgRkNfQ0hBU0NJSToK LSAgICAgIGNhc2UgRkNfS09JNzoKLSAgICAgIGNhc2UgRkNfSEU3OgotICAgICAgY2FzZSBGQ19F TE9UOgotCXJldHVybig5NCk7Ci0KLSAgICAgIGNhc2UgRkNfMUxBVElOOgotICAgICAgY2FzZSBG Q18yTEFUSU46Ci0gICAgICBjYXNlIEZDX0RFQ01DUzoKLSAgICAgIGNhc2UgRkNfREdNQ1M6Ci0g ICAgICBjYXNlIEZDX0hQUjg6Ci0gICAgICBjYXNlIEZDX0NZUklMTDoKLSAgICAgIGNhc2UgRkNf S09JODoKLSAgICAgIGNhc2UgRkNfSEVCUkVXOgotICAgICAgY2FzZSBGQ19HUkVFSzoKLSAgICAg IGNhc2UgRkNfOUxBVElOOgotCXJldHVybig5Nik7Ci0KLSAgICAgIGNhc2UgRkNfTkVYVDoKLSAg ICAgIGNhc2UgRkNfQ1A0Mzc6Ci0gICAgICBjYXNlIEZDX0NQODUwOgotICAgICAgY2FzZSBGQ19D UDg1MjoKLSAgICAgIGNhc2UgRkNfQ1A4NTU6Ci0gICAgICBjYXNlIEZDX0NQODYyOgotICAgICAg Y2FzZSBGQ19DUDg2NjoKLSAgICAgIGNhc2UgRkNfQ1AxMjUxOgotICAgICAgY2FzZSBGQ19BUFBR RDoKLQlyZXR1cm4oMTI4KTsKLSNpZmRlZiBLQU5KSQotICAgICAgY2FzZSBGQ19KSVM3OgotCXJl dHVybigtOTQpOwotICAgICAgY2FzZSBGQ19TSEpJUzoKLQlyZXR1cm4oLTEyOCk7Ci0gICAgICBj YXNlIEZDX0pFVUM6Ci0gICAgICBjYXNlIEZDX0pERUM6Ci0JcmV0dXJuKC05Nik7Ci0jZW5kaWYg LyogS0FOSkkgKi8KLSAgICAgIGNhc2UgRkNfQ1A4NTg6Ci0gICAgICBkZWZhdWx0OgotCXJldHVy bigtMSk7Ci0gICAgfQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLX0KLSNlbmRpZiAvKiBOT0xPQ0FM ICovCi0KLS8qCi0gIFMgRSBUIFggTCBBIFQgWSBQIEUgIC0tICBTZXQgVHJhbnNsYXRpb24gVHlw ZQotCi0gIFNldHMgZ2xvYmFsIHhsYXR5cGUgdG8gaW5kaWNhdGUgd2hpY2gga2luZCBvZiB0cmFu c2xhdGlvbjoKLQotICAgIFhMQV9OT05FICAgICAgTm8gdHJhbnNsYXRpb24KLSAgICBYTEFfQllU RSAgICAgIEJ5dGUtZm9yLUJ5dGUgdHJhbnNsYXRpb24KLSAgICBYTEFfSkFQQU4gICAgIEphcGFu ZXNlIEthbmppIHRyYW5zbGF0aW9uCi0gICAgWExBX1VOSUNPREUgICBVbmljb2RlIHRyYW5zbGF0 aW9ucwotCi0gIEFuZCBzZXRzIHVwIHRoZSBhcHByb3ByaWF0ZSB0cmFuc2xhdGlvbiBmdW5jdGlv biBwb2ludGVycyBhcyBmb2xsb3dzOgotCi0gIEZvciBubyB0cmFuc2xhdGlvbjoKLSAgICBBbGwg ZnVuY3Rpb24gcG9pbnRlcnMgYXJlIE5VTEwuCi0KLSAgRm9yIEJ5dGUtZm9yLUJ5dGUgdHJhbnNh dGlvbjoKLSAgICByeCAgPSBUQ1MgdG8gRkNTICh0aGVzZSBmdW5jdGlvbnMgYXJlIGluIHRoaXMg bW9kdWxlLi4uKQotICAgIHN4ICA9IEZDUyB0byBUQ1MKLQotICBGb3IgVW5pY29kZSB0cmFuc2xh dGlvbnM6Ci0gICAgeGZ1ID0gRkNTIHRvIFVDUyAodGhlc2UgZnVuY3Rpb25zIGFyZSBpbiBja2N1 bmkuYy4uLikKLSAgICB4dHUgPSBUQ1MgdG8gVUNTCi0gICAgeHVmID0gVUNTIHRvIEZDUwotICAg IHh1dCA9IFVDUyB0byBUQ1MKLSovCi1WT0lECi1zZXR4bGF0eXBlKHRjcywgZmNzKSBpbnQgdGNz LCBmY3M7IHsKLSNpZmRlZiBVTklDT0RFCi0gICAgeGZ1ID0gTlVMTDsJCQkJLyogVW5pY29kZSA8 LT4gVENTL0ZDUyBmdW5jdGlvbnMgKi8KLSAgICB4dHUgPSBOVUxMOwotICAgIHh1ZiA9IE5VTEw7 Ci0gICAgeHV0ID0gTlVMTDsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgcnggPSBzeCA9IE5V TEw7Ci0gICAgZGVidWcoRjEwMSwic2V0eGxhdHlwZSBmY3MiLCIiLGZjcyk7Ci0gICAgZGVidWco RjEwMSwic2V0eGxhdHlwZSB0Y3MiLCIiLHRjcyk7Ci0KLSAgICBpZiAodGNzIDwgMCB8fCB0Y3Mg PiBNQVhUQ1NFVFMpIHsKLQlkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIGJhZCB0Y3MiLCIiLHRjcyk7 Ci0JcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZmNzIDwgMCB8fCBmY3MgPiBNQVhGQ1NFVFMpIHsK LQlkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIGJhZCBmY3MiLCIiLGZjcyk7Ci0JcmV0dXJuOwotICAg IH0KLSAgICBpZiAodGNzID09IFRDX1RSQU5TUCB8fCB4ZnJ4bGEgPT0gMCkgeyAvKiBUcmFuc2Zl ciBjaGFyc2V0IFRSQU5TUEFSRU5UICovCi0JZGVidWcoRjEwMSwic2V0eGxhdHlwZSB0cmFuc3Bh cmVudCBiZWNhdXNlIFRDUz09VHJhbnNwYXJlbnQiLCIiLHRjcyk7Ci0JeGxhdHlwZSA9IFhMQV9O T05FOwkJLyogVHJhbnNsYXRpb24gdHlwZSBpcyBOb25lICovCi0jaWZkZWYgVU5JQ09ERQotICAg IC8qIElmIGFueSBvZiBvdXIgY2hhcnNldHMgaXMgVW5pY29kZSB3ZSB1c2UgVW5pY29kZSBmdW5j dGlvbnMgKi8KLSAgICAvKiBldmVuIGlmIFRDUyBhbmQgRkNTIGFyZSB0aGUgc2FtZSBiZWNhdXNl IG9mIEJPTSBhbmQgYnl0ZSBzd2FwcGluZyAqLwotICAgIH0gZWxzZSBpZiAodGNzID09IFRDX1VD UzIgfHwgdGNzID09IFRDX1VURjggfHwKLQkgICAgICAgZmNzID09IEZDX1VDUzIgfHwgZmNzID09 IEZDX1VURjgpIHsKLQlkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIFVuaWNvZGUgdGNzIiwiIix0Y3Mp OwotCWRlYnVnKEYxMDEsInNldHhsYXR5cGUgVW5pY29kZSBmY3MiLCIiLGZjcyk7Ci0JLyogVW5p Y29kZSA8LT4gVENTL0ZDUyBmdW5jdGlvbnMgKi8KLQl4ZnUgPSB4bF9mY3VbZmNzXTsJCS8qIEZD UyAtPiBVQ1MgKi8KLQl4dHUgPSB4bF90Y3VbdGNzXTsJCS8qIFRDUyAtPiBVQ1MgKi8KLQl4dWYg PSB4bF91ZmNbZmNzXTsJCS8qIFVDUyAtPiBGQ1MgKi8KLQl4dXQgPSB4bF91dGNbdGNzXTsJCS8q IFVDUyAtPiBUQ1MgKi8KLSAgICAgICAgeGxhdHlwZSA9IFhMQV9VTklDT0RFOwkJLyogVHJhbnNs YXRpb24gdHlwZSBpcyBVbmljb2RlICovCi0jaWZkZWYgQ09NTUVOVAotCS8qIFRoZXNlIG1ha2Ug dHJvdWJsZSBpbiA2NC1iaXQgbGFuZCAqLwotCWRlYnVnKEYwMDEsInNldHhsYXR5cGUgVW5pY29k ZSB4ZnUiLCIiLCh1bnNpZ25lZCl4ZnUpOwotCWRlYnVnKEYwMDEsInNldHhsYXR5cGUgVW5pY29k ZSB4dWYiLCIiLCh1bnNpZ25lZCl4dWYpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAv KiBVTklDT0RFICovCi0gICAgfSBlbHNlIGlmIChjc2VxdGFiW3Rjc10gPT0gZmNzKSB7CS8qIE9y IGlmIFRDUyA9PSBGQ1MgKi8KLQlkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIHRyYW5zcGFyZW50IGJl Y2F1c2UgVENTPT1GQ1MiLCIiLHRjcyk7Ci0JeGxhdHlwZSA9IFhMQV9OT05FOwkJLyogdHJhbnNs YXRpb24gdHlwZSBpcyBhbHNvIE5vbmUgKi8KLSNpZmRlZiBLQU5KSQotICAgIC8qIE90aGVyd2lz ZSBpZiBhbnkgb2YgdGhlbSBpcyBKYXBhbmVzZSwgd2UgdXNlIEthbmppIGZ1bmN0aW9ucyAqLwot ICAgIH0gZWxzZSBpZiAodGNzID09IFRDX0pFVUMgfHwgZmNzaW5mb1tmY3NdLmFscGhhYmV0ID09 IEFMX0pBUEFOKSB7Ci0JZGVidWcoRjEwMSwic2V0eGxhdHlwZSBKYXBhbmVzZSB0Y3MiLCIiLHRj cyk7Ci0JZGVidWcoRjEwMSwic2V0eGxhdHlwZSBKYXBhbmVzZSBmY3MiLCIiLGZjcyk7Ci0gICAg ICAgIHhsYXR5cGUgPSBYTEFfSkFQQU47CQkvKiBUcmFuc2xhdGlvbiB0eXBlIGlzIEphcGFuZXNl ICovCi0jZW5kaWYgLyogS0FOSkkgKi8KLSAgICAvKiBPdGhlcndpc2Ugd2UgdXNlIGJ5dGUgZnVu Y3Rpb25zICovCi0gICAgfSBlbHNlIHsJCQkJLyogT3RoZXJ3aXNlLi4uICovCi0JcnggPSB4bHJb dGNzXVtmY3NdOwkJLyogSW5wdXQgdHJhbnNsYXRpb24gZnVuY3Rpb24gKi8KLQlzeCA9IHhsc1t0 Y3NdW2Zjc107CQkvKiBPdXRwdXQgdHJhbnNsYXRpb24gZnVuY3Rpb24gKi8KLQlkZWJ1ZyhGMTAx LCJzZXR4bGF0eXBlIEJ5dGUgdGNzIiwiIix0Y3MpOwotCWRlYnVnKEYxMDEsInNldHhsYXR5cGUg Qnl0ZSBmY3MiLCIiLGZjcyk7Ci0gICAgICAgIHhsYXR5cGUgPSBYTEFfQllURTsJCS8qIFRyYW5z bGF0aW9uIHR5cGUgaXMgQnl0ZSAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBl IHhsYXR5cGUiLCIiLHhsYXR5cGUpOwotfQotCi0vKiBTZXQgdXAgdHJhbnNsYXRpb24gYmV0d2Vl biB0d28gZmlsZSBjaGFyYWN0ZXIgc2V0cyB3aXRoIFVDUyBpbnRlcm1lZGlhdGUgKi8KLQotI2lm ZGVmIFVOSUNPREUKLVZPSUQKLWluaXR4bGF0ZShjc2luLCBjc291dCkgaW50IGNzaW4sIGNzb3V0 OyB7Ci0gICAgeGZ1ID0gTlVMTDsKLSAgICB4dHUgPSBOVUxMOwotICAgIHh1ZiA9IE5VTEw7Ci0g ICAgeHV0ID0gTlVMTDsKLQotICAgIGRlYnVnKEYxMDEsImluaXR4bGF0ZSBjc2luIiwiIixjc2lu KTsKLSAgICBkZWJ1ZyhGMTAxLCJpbml0eGxhdGUgY3NvdXQiLCIiLGNzb3V0KTsKLQotICAgIGlm IChjc2luIDwgMCB8fCBjc2luID4gTUFYRkNTRVRTKSB7Ci0JZGVidWcoRjEwMSwiaW5pdHhsYXRl IGJhZCBjc2luIiwiIixjc2luKTsKLQlyZXR1cm47Ci0gICAgfQotICAgIGlmIChjc291dCA8IDAg fHwgY3NvdXQgPiBNQVhGQ1NFVFMpIHsKLQlkZWJ1ZyhGMTAxLCJpbml0eGxhdGUgYmFkIGNzb3V0 IiwiIixjc291dCk7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBpZiAoY3NpbiA9PSBjc291dCAmJiBj c2luICE9IEZDX1VDUzIpIHsKLQl4bGF0eXBlID0gWExBX05PTkU7CQkvKiBUcmFuc2xhdGlvbiB0 eXBlIGlzIE5vbmUgKi8KLQlyZXR1cm47Ci0gICAgfQotICAgIHhsYXR5cGUgPSBYTEFfVU5JQ09E RTsJCS8qIFRyYW5zbGF0aW9uIHR5cGUgaXMgVW5pY29kZSAqLwotICAgIHhmdSA9IHhsX2ZjdVtj c2luXTsJCQkvKiBGQ1MgLT4gVUNTICovCi0gICAgeHVmID0geGxfdWZjW2Nzb3V0XTsJCS8qIFVD UyAtPiBGQ1MgKi8KLSAgICB4cG5ieXRlKC0xLDAsMCxOVUxMKTsJCS8qIFJlc2V0IFVDUy0yICov Ci0jaWZkZWYgQ09NTUVOVAotICAgIGRlYnVnKEYwMDEsImluaXR4bGF0ZSBVbmljb2RlIHhmdSIs IiIsKHVuc2lnbmVkKXhmdSk7Ci0gICAgZGVidWcoRjAwMSwiaW5pdHhsYXRlIFVuaWNvZGUgeHVm IiwiIiwodW5zaWduZWQpeHVmKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgZGVidWcoRjEw MSwiaW5pdHhsYXRlIHhsYXR5cGUiLCIiLHhsYXR5cGUpOwotfQotI2VuZGlmIC8qIFVOSUNPREUg Ki8KLQotaW50IGNzZXRzaW5pdGVkID0gMDsKLQotVk9JRAotaW5pdGNzZXRzKCkgewkJCQkvKiBS b3V0aW5lIHRvIHJlc2V0IG9yIGluaXRpYWxpemUgKi8KLSAgICBpbnQgaTsJCQkJLyogY2hhcmFj dGVyLXNldCBhc3NvY2lhdGlvbnMuICovCi0KLSNpZmRlZiBVTklDT0RFCi0gICAgaWYgKHVjc29y ZGVyIDwgMCkJCQkvKiBGb3IgY3JlYXRpbmcgVUNTLTIgZmlsZXMuICovCi0gICAgICB1Y3NvcmRl ciA9IGJ5dGVvcmRlcjsKLSAgICBpZiAodWNzb3JkZXIgPCAwKQotICAgICAgdWNzb3JkZXIgPSAw OwotICAgIGlmIChmaWxlb3JkZXIgPCAwKQkJCS8qIEZvciByZWFkaW5nIFVDUy0yIGZpbGVzLiAq LwotICAgICAgZmlsZW9yZGVyID0gdWNzb3JkZXI7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0g ICAgZGVidWcoRjEwMSwiaW5pdGNzZXRzIG54bHMiLCIiLG54bHMpOwotICAgIGRlYnVnKEYxMDEs ImluaXRjc2V0cyBueGxyIiwiIixueGxyKTsKLQotICAgIGRlYnVnKEYxMDEsImluaXRjc2V0cyBU RVJNIExPQ0FMIENTRVQiLCIiLHRjc2wpOwotICAgIGRlYnVnKEYxMDEsImluaXRjc2V0cyBURVJN IFJFTU9URSBDU0VUIiwiIix0Y3NyKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPD0gTUFYRkNTRVRT OyBpKyspCS8qIEZpcnN0IGNsZWFyIHRoZW0gYWxsLi4uICovCi0gICAgICBhZmNzZXRbaV0gPSAt MTsKLSAgICBmb3IgKGkgPSAwOyBpIDw9IE1BWFRDU0VUUzsgaSsrKQotICAgICAgYXhjc2V0W2ld ID0gLTE7Ci0KLSAgICAvKiBOb3cgc2V0IHNwZWNpZmljIGRlZmF1bHRzIGZvciBpbmNvbWluZyBm aWxlcyAqLwotCi0gICAgeGxhdHlwZSA9IFhMQV9OT05FOwotCi0gICAgYXhjc2V0W1RDX1RSQU5T UF0gID0gRkNfVFJBTlNQOwotICAgIGF4Y3NldFtUQ19VU0FTQ0lJXSA9IEZDX1VTQVNDSUk7Ci0K LSNpZmRlZiBPUzIKLSAgICBzd2l0Y2ggKGZjaGFyc2V0KSB7Ci0gICAgICBjYXNlIEZDX0NQODUw OgotICAgICAgY2FzZSBGQ19DUDg1ODoKLSAgICAgIGNhc2UgRkNfQ1A0Mzc6Ci0gICAgICBjYXNl IEZDXzFMQVRJTjoKLQlheGNzZXRbVENfMUxBVElOXSAgPSBmY2hhcnNldDsKLQlicmVhazsKLSAg ICAgIGRlZmF1bHQ6Ci0JYXhjc2V0W1RDXzFMQVRJTl0gID0gRkNfQ1A4NTA7Ci0gICAgfQotI2Vs c2UKLSNpZmRlZiBIUFVYCi0gICAgYXhjc2V0W1RDXzFMQVRJTl0gID0gRkNfSFBSODsKLSNlbHNl Ci0jaWZkZWYgVk1TCi0gICAgYXhjc2V0W1RDXzFMQVRJTl0gID0gRkNfREVDTUNTOwotI2Vsc2UK LSNpZmRlZiBORVhUCi0gICAgYXhjc2V0W1RDXzFMQVRJTl0gID0gRkNfTkVYVDsKLSNlbHNlCi0j aWZkZWYgZGF0YWdlbmVyYWwKLSAgICBheGNzZXRbVENfMUxBVElOXSAgPSBGQ19ER01DUzsKLSNl bHNlCi0gICAgLyogU2hvdWxkIHdlIHVzZSBjb2RlIHBhZ2VzIG9uIHNvbWUgUEMgYmFzZWQgVU5J WGVzPyAqLwotICAgIGF4Y3NldFtUQ18xTEFUSU5dICA9IEZDXzFMQVRJTjsKLSNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIE5FWFQgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRp ZiAvKiBIUFVYICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBPUzIKLSAgICBheGNzZXRb VENfMkxBVElOXSAgPSBGQ19DUDg1MjsKLSAgICBheGNzZXRbVENfQ1lSSUxMXSAgPSBGQ19DUDg2 NjsKLSAgICBheGNzZXRbVENfSkVVQ10gICAgPSBGQ19TSEpJUzsKLSAgICBheGNzZXRbVENfSEVC UkVXXSAgPSBGQ19DUDg2MjsKLSAgICBheGNzZXRbVENfR1JFRUtdICAgPSBGQ19DUDg2OTsKLSAg ICBheGNzZXRbVENfOUxBVElOXSAgPSBGQ19DUDg1ODsKLSAgICBheGNzZXRbVENfVUNTMl0gICAg PSBGQ19VQ1MyOwotICAgIGF4Y3NldFtUQ19VVEY4XSAgICA9IEZDX1VDUzI7Ci0jZWxzZQotICAg IGF4Y3NldFtUQ18yTEFUSU5dICA9IEZDXzJMQVRJTjsKLSAgICBheGNzZXRbVENfQ1lSSUxMXSAg PSBGQ19DWVJJTEw7Ci0gICAgYXhjc2V0W1RDX0pFVUNdICAgID0gRkNfSkVVQzsKLSAgICBheGNz ZXRbVENfSEVCUkVXXSAgPSBGQ19IRUJSRVc7Ci0gICAgYXhjc2V0W1RDX0dSRUVLXSAgID0gRkNf R1JFRUs7Ci0gICAgYXhjc2V0W1RDXzlMQVRJTl0gID0gRkNfOUxBVElOOwotICAgIGF4Y3NldFtU Q19VQ1MyXSAgICA9IEZDX1VURjg7Ci0gICAgYXhjc2V0W1RDX1VURjhdICAgID0gRkNfVVRGODsK LSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIC8qIEFuZCBmb3Igb3V0Ym91bmQgZmlsZXMgKi8KLQot ICAgIGFmY3NldFtGQ19VU0FTQ0lJXSA9IFRDX1VTQVNDSUk7Ci0gICAgYWZjc2V0W0ZDX1VLQVND SUldID0gVENfMUxBVElOOwotICAgIGFmY3NldFtGQ19EVUFTQ0lJXSA9IFRDXzFMQVRJTjsKLSAg ICBhZmNzZXRbRkNfRklBU0NJSV0gPSBUQ18xTEFUSU47Ci0gICAgYWZjc2V0W0ZDX0ZSQVNDSUld ID0gVENfMUxBVElOOwotICAgIGFmY3NldFtGQ19GQ0FTQ0lJXSA9IFRDXzFMQVRJTjsKLSAgICBh ZmNzZXRbRkNfR0VBU0NJSV0gPSBUQ18xTEFUSU47Ci0gICAgYWZjc2V0W0ZDX0hVQVNDSUldID0g VENfMkxBVElOOwotICAgIGFmY3NldFtGQ19JVEFTQ0lJXSA9IFRDXzFMQVRJTjsKLSAgICBhZmNz ZXRbRkNfTk9BU0NJSV0gPSBUQ18xTEFUSU47Ci0gICAgYWZjc2V0W0ZDX1BPQVNDSUldID0gVENf MUxBVElOOwotICAgIGFmY3NldFtGQ19TUEFTQ0lJXSA9IFRDXzFMQVRJTjsKLSAgICBhZmNzZXRb RkNfU1dBU0NJSV0gPSBUQ18xTEFUSU47Ci0gICAgYWZjc2V0W0ZDX0NIQVNDSUldID0gVENfMUxB VElOOwotICAgIGFmY3NldFtGQ18xTEFUSU5dICA9IFRDXzFMQVRJTjsKLSAgICBhZmNzZXRbRkNf MkxBVElOXSAgPSBUQ18yTEFUSU47Ci0gICAgYWZjc2V0W0ZDX0RFQ01DU10gID0gVENfMUxBVElO OwotICAgIGFmY3NldFtGQ19ORVhUXSAgICA9IFRDXzFMQVRJTjsKLSAgICBhZmNzZXRbRkNfQ1A0 MzddICAgPSBUQ18xTEFUSU47Ci0gICAgYWZjc2V0W0ZDX0NQODUwXSAgID0gVENfMUxBVElOOwot ICAgIGFmY3NldFtGQ19DUDg1Ml0gICA9IFRDXzJMQVRJTjsKLSAgICBhZmNzZXRbRkNfQVBQUURd ICAgPSBUQ18xTEFUSU47Ci0gICAgYWZjc2V0W0ZDX0RHTUNTXSAgID0gVENfMUxBVElOOwotICAg IGFmY3NldFtGQ19IUFI4XSAgICA9IFRDXzFMQVRJTjsKLSAgICBhZmNzZXRbRkNfQ1lSSUxMXSAg PSBUQ19DWVJJTEw7Ci0gICAgYWZjc2V0W0ZDX0NQODY2XSAgID0gVENfQ1lSSUxMOwotICAgIGFm Y3NldFtGQ19LT0k3XSAgICA9IFRDX0NZUklMTDsKLSAgICBhZmNzZXRbRkNfS09JOF0gICAgPSBU Q19DWVJJTEw7Ci0gICAgYWZjc2V0W0ZDX0pJUzddICAgID0gVENfSkVVQzsKLSAgICBhZmNzZXRb RkNfU0hKSVNdICAgPSBUQ19KRVVDOwotICAgIGFmY3NldFtGQ19KRVVDXSAgICA9IFRDX0pFVUM7 Ci0gICAgYWZjc2V0W0ZDX0pERUNdICAgID0gVENfSkVVQzsKLSAgICBhZmNzZXRbRkNfSEU3XSAg ICAgPSBUQ19IRUJSRVc7Ci0gICAgYWZjc2V0W0ZDX0hFQlJFV10gID0gVENfSEVCUkVXOwotICAg IGFmY3NldFtGQ19DUDg2Ml0gICA9IFRDX0hFQlJFVzsKLSAgICBhZmNzZXRbRkNfRUxPVF0gICAg PSBUQ19HUkVFSzsKLSAgICBhZmNzZXRbRkNfR1JFRUtdICAgPSBUQ19HUkVFSzsKLSAgICBhZmNz ZXRbRkNfQ1A4NjldICAgPSBUQ19HUkVFSzsKLSAgICBhZmNzZXRbRkNfOUxBVElOXSAgPSBUQ185 TEFUSU47Ci0gICAgYWZjc2V0W0ZDX0NQOTIzXSAgID0gVENfOUxBVElOOwotICAgIGFmY3NldFtG Q19DUDg1OF0gICA9IFRDXzlMQVRJTjsKLSAgICBhZmNzZXRbRkNfQ1A4NTVdICAgPSBUQ19DWVJJ TEw7Ci0gICAgYWZjc2V0W0ZDX0NQMTI1MV0gID0gVENfQ1lSSUxMOwotICAgIGFmY3NldFtGQ19C VUxHQVJdICA9IFRDX0NZUklMTDsKLSAgICBhZmNzZXRbRkNfQ1AxMjUwXSAgPSBUQ18yTEFUSU47 Ci0gICAgYWZjc2V0W0ZDX01BWk9WSUFdID0gVENfMkxBVElOOwotICAgIGFmY3NldFtGQ19VQ1My XSAgICA9IFRDX1VURjg7Ci0gICAgYWZjc2V0W0ZDX1VURjhdICAgID0gVENfVVRGODsKLQotICAg IGFmY3NldFtGQ19LT0k4Ul0gICA9IFRDX0NZUklMTDsKLSAgICBhZmNzZXRbRkNfS09JOFVdICAg PSBUQ19DWVJJTEw7Ci0gICAgYWZjc2V0W0ZDX0NQMTI1Ml0gID0gVENfMUxBVElOOwotCi0gICAg Y3NldHNpbml0ZWQrKzsKLSAgICByZXR1cm47Ci19Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwoKZGlm ZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1eGxhLmgg Yi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXhsYS5oCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2NkMWE1Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1eGxhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx MTggKzAsMCBAQAotLyoKLSAgRmlsZSBDS1VYTEEuSAotCi0gIEMtS2VybWl0IGxhbmd1YWdlIGFu ZCBjaGFyYWN0ZXItc2V0IHN1cHBvcnQgZm9yIFVOSVgsIFZNUywgT1MvMiwKLSAgQU9TL1ZTLCBh bmQgb3RoZXIgc3lzdGVtcy4KLQotICBUaGlzIGZpbGUgc2hvdWxkIGJlIHVzZWQgYXMgYSB0ZW1w bGF0ZSBmb3IgdGhlIGxhbmd1YWdlIHN1cHBvcnQgZmlsZXMKLSAgZm9yIG90aGVyIEMtS2VybWl0 IGltcGxlbWVudGF0aW9ucyAtLSBNYWNpbnRvc2gsIGV0Yy4KLSovCi0vKgotICBBdXRob3I6IEZy YW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAotICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFj YWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCi0KLSAgQ29weXJpZ2h0 IChDKSAxOTg1LCAyMDA5LAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4g dGhlIENpdHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUg Qy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0 aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLQotKi8K LQotI2lmbmRlZiBDS1VYTEFfSAotI2RlZmluZSBDS1VYTEFfSAotCi0vKiBDb2RlcyBmb3IgZmls ZSBjaGFyYWN0ZXIgc2V0cyAqLwotCi0vKiBJU08gNjQ2IGFuZCBvdGhlciBJU08tNjQ2LWxpa2Ug Ny1iaXQgc2V0cyAqLwotCi0jZGVmaW5lIEZDX1VTQVNDSUkgMCAgIC8qIFVTIEFTQ0lJICovCi0j ZGVmaW5lIEZDX1VLQVNDSUkgMSAgIC8qIFVuaXRlZCBLaW5nZG9tIEFTQ0lJICovCi0jZGVmaW5l IEZDX0RVQVNDSUkgMiAgIC8qIER1dGNoIElTTyA2NDYgTlJDICovCi0jZGVmaW5lIEZDX0ZJQVND SUkgMyAgIC8qIEZpbm5pc2ggSVNPIDY0NiBOUkMgKi8KLSNkZWZpbmUgRkNfRlJBU0NJSSA0ICAg LyogRnJlbmNoIElTTyA2NDYgTlJDICovCi0jZGVmaW5lIEZDX0ZDQVNDSUkgNSAgIC8qIEZyZW5j aCBDYW5hZGlhbiBJU08gNjQ2IE5SQyAqLwotI2RlZmluZSBGQ19HRUFTQ0lJIDYgICAvKiBHZXJt YW4gSVNPIDY0NiBOUkMgKi8KLSNkZWZpbmUgRkNfSFVBU0NJSSA3ICAgLyogSHVuZ2FyaWFuIElT TyA2NDYgTlJDICovCi0jZGVmaW5lIEZDX0lUQVNDSUkgOCAgIC8qIEl0YWxpYW4gKklTTyA2NDYg TlJDICovCi0jZGVmaW5lIEZDX05PQVNDSUkgOSAgIC8qIE5vcndlZ2lhbiBhbmQgRGFuaXNoIElT TyA2NDYgTlJDICovCi0jZGVmaW5lIEZDX1BPQVNDSUkgMTAgIC8qIFBvcnR1Z3Vlc2UgSVNPIDY0 NiBOUkMgKi8KLSNkZWZpbmUgRkNfU1BBU0NJSSAxMSAgLyogU3BhbmlzaCBJU08gNjQ2IE5SQyAq LwotI2RlZmluZSBGQ19TV0FTQ0lJIDEyICAvKiBTd2VkaXNoIElTTyA2NDYgTlJDICovCi0jZGVm aW5lIEZDX0NIQVNDSUkgMTMgIC8qIFN3aXNzIElTTyA2NDYgTlJDICovCi0KLS8qIDgtYml0IFJv bWFuIGNoYXJhY3RlciBzZXRzICovCi0KLSNkZWZpbmUgRkNfMUxBVElOICAxNCAgLyogSVNPIDg4 NTktMSBMYXRpbiBBbHBoYWJldCAxICovCi0jZGVmaW5lIEZDXzJMQVRJTiAgMTUgIC8qIElTTyA4 ODU5LTIgTGF0aW4gQWxwaGFiZXQgMiAqLwotI2RlZmluZSBGQ19ERUNNQ1MgIDE2ICAvKiBERUMg TXVsdGluYXRpb25hbCBDaGFyYWN0ZXIgU2V0ICovCi0jZGVmaW5lIEZDX05FWFQgICAgMTcgIC8q IE5lWFQgd29ya3N0YXRpb24gY2hhcmFjdGVyIHNldCAqLwotI2RlZmluZSBGQ19DUDQzNyAgIDE4 ICAvKiBJQk0gUEMgQ29kZSBQYWdlIDQzNyAqLwotI2RlZmluZSBGQ19DUDg1MCAgIDE5ICAvKiBJ Qk0gUEMgQ29kZSBQYWdlIDg1MCAqLwotI2RlZmluZSBGQ19DUDg1MiAgIDIwICAvKiBJQk0gUEMg Q29kZSBQYWdlIDg1MiAqLwotI2RlZmluZSBGQ19BUFBRRCAgIDIxICAvKiBBcHBsZSBRdWlja2Ry YXcgKi8KLSNkZWZpbmUgRkNfREdNQ1MgICAyMiAgLyogRGF0YSBHZW5lcmFsIEludGVybmF0aW9u YWwgQ2hhcmFjdGVyIFNldCAqLwotI2RlZmluZSBGQ19IUFI4ICAgIDIzICAvKiBIUCBSb21hbjgg Ki8KLQotLyogQ3lyaWxsaWMgc2V0cyAqLwotCi0jZGVmaW5lIEZDX0NZUklMTCAgMjQgIC8qIElT TyA4ODU5LTUgTGF0aW4vQ3lyaWxsaWMgKi8KLSNkZWZpbmUgRkNfQ1A4NjYgICAyNSAgLyogUEMg Q29kZSBQYWdlIDg2NiBDeXJpbGxpYyAqLwotI2RlZmluZSBGQ19LT0k3ICAgIDI2ICAvKiBLT0kt NyA9IFNob3J0IEtPSSAqLwotI2RlZmluZSBGQ19LT0k4ICAgIDI3ICAvKiBLT0ktOCAqLwotCi0v KiBKYXBhbmVzZSBzZXRzICovCi0KLSNkZWZpbmUgRkNfSklTNyAgICAyOCAgLyogSklTLTcgKi8K LSNkZWZpbmUgRkNfU0hKSVMgICAyOSAgLyogU2hpZnRlZCBKSVMgPSBDUDkzMiAqLwotI2RlZmlu ZSBGQ19KRVVDICAgIDMwICAvKiBKYXBhbmVzZSBFVUMgKEpBRSkgKi8KLSNkZWZpbmUgRkNfSkRF QyAgICAzMSAgLyogSmFwYW5lc2UgREVDIEthbmppICovCi0KLS8qIEhlYnJldyBzZXRzICovCi0K LSNkZWZpbmUgRkNfSEU3ICAgICAzMiAgLyogNy1CaXQgREVDIEhlYnJldyAqLwotI2RlZmluZSBG Q19IRUJSRVcgIDMzICAvKiA4LUJpdCBJU08gODg1OS04IExhdGluL0hlYnJldyAqLwotI2RlZmlu ZSBGQ19DUDg2MiAgIDM0ICAvKiBIZWJyZXcgUEMgQ29kZSBQYWdlICovCi0KLS8qIEdyZWVrIHNl dHMgKi8KLQotI2RlZmluZSBGQ19FTE9UICAgIDM1ICAvKiA3LUJpdCBFTE9UIDkyNyBHcmVlayAq LwotI2RlZmluZSBGQ19HUkVFSyAgIDM2ICAvKiA4LUJpdCBJU08gODg1OS03IExhdGluL0dyZWVr ICovCi0jZGVmaW5lIEZDX0NQODY5ICAgMzcgIC8qIEdyZWVrIFBDIENvZGUgUGFnZSAqLwotCi0v KiBOZXcgUm9tYW4gc2V0cyB3aXRoIEV1cm8gc3ltYm9sICovCi0KLSNkZWZpbmUgRkNfOUxBVElO ICAzOCAgLyogSVNPIDg4NTktMTUgTGF0aW4gQWxwaGFiZXQgOSAqLwotI2RlZmluZSBGQ19DUDky MyAgIDM4ICAvKiBTYW1lIGFzIExhdGluLTkgKi8KLSNkZWZpbmUgRkNfQ1A4NTggICAzOSAgLyog V2VzdGVybiBFdXJvcGUgd2l0aCBFdXJvICovCi0KLS8qIE90aGVyIG5ldyBhZGRpdGlvbnMgKi8K LQotI2RlZmluZSBGQ19DUDg1NSAgIDQwICAvKiBDeXJpbGxpYyBQQyBDb2RlIFBhZ2UgKi8KLSNk ZWZpbmUgRkNfQ1AxMjUxICA0MSAgLyogQ3lyaWxsaWMgV2luZG93cyAqLwotI2RlZmluZSBGQ19C VUxHQVIgIDQyICAvKiBCdWxnYXJpYW4gUEMgY29kZSBwYWdlICovCi0jZGVmaW5lIEZDX0NQMTI1 MCAgNDMgIC8qIExhdGluIDIgV2luZG93cyAoZGlmZmVyZW50IGZyb20gTGF0aW4tMikqLwotI2Rl ZmluZSBGQ19NQVpPVklBIDQ0ICAvKiBQb2xpc2ggTWF6b3ZpYSBQQyBjb2RlIHBhZ2UgKi8KLQot LyogVW5pY29kZSAqLwotCi0jZGVmaW5lIEZDX1VDUzIgICAgNDUgIC8qIElTTy0xMDY0NiAvIFVu aWNvZGUgVUNTLTIgKi8KLSNkZWZpbmUgRkNfVVRGOCAgICA0NiAgLyogSVNPLTEwNjQ2IC8gVW5p Y29kZSBVVEYtOCAqLwotCi0vKiBSZWNlbnQgYWRkaXRpb25zICovCi0KLSNkZWZpbmUgRkNfS09J OFIgICA0NyAgLyogS09JOC1SIChSRkMxNDg5KSAtIFJ1c3NpYW4gKyBib3hkcmF3aW5nICovCi0j ZGVmaW5lIEZDX0tPSThVICAgNDggIC8qIEtPSTgtVSAoUkZDMjMxOSkgLSBVa3JhaW5pYW4gKyBi b3hkcmF3aW5nICovCi0jZGVmaW5lIEZDX0NQMTI1MiAgNDkgIC8qIExhdGluIDEgV2luZG93cyAq LwotCi0jZGVmaW5lIE1BWEZDU0VUUyAgNDkgIC8qIEhpZ2hlc3QgZmlsZSBjaGFyYWN0ZXIgc2V0 IG51bWJlciAqLwotCi0jaWZkZWYgT1MyCi0jZGVmaW5lIEZDX0RFQ1NQRUMgMjUzIC8qIE5vdCBy ZWFsIGNoYXJhY3Rlci1zZXRzICovCi0jZGVmaW5lIEZDX0RFQ1RFQ0ggMjUyCi0jZW5kaWYgLyog T1MyICovCi0KLSNpZmRlZiBVTklDT0RFCi1fUFJPVE9UWVAoIFZPSUQgaW5pdHhsYXRlLCAoaW50 LCBpbnQpICk7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0jZW5kaWYgLyogQ0tVWExBX0ggKi8K CmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nrd2Fy dC5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3dhcnQuYwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYzYmI3NS4uMDAwMDAwMAotLS0gYS9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nrd2FydC5jCisrKyAvZGV2L251bGwKQEAg LTEsNzQ2ICswLDAgQEAKLSNpbmNsdWRlICJja2NzeW0uaCIKLWNoYXIgKndhcnR2ID0gIldhcnQg VmVyc2lvbiAyLjE0LCAxMCBOb3YgMTk5OSI7Ci0KLSNkZWZpbmUgQ0tXQVJUX0MKLQotI2lmZGVm IE1ERUJVRwotLyogVXNlIHRoZSByZWFsIG9uZXMgaW4gdGhpcyBtb2R1bGUgb25seSAqLwotI2lm ZGVmIG1hbGxvYwotI3VuZGVmIG1hbGxvYwotI2VuZGlmIC8qIG1hbGxvYyAqLwotI2lmZGVmIGNh bGxvYwotI3VuZGVmIGNhbGxvYwotI2VuZGlmIC8qIGNhbGxvYyAqLwotI2lmZGVmIHJlYWxsb2MK LSN1bmRlZiByZWFsbG9jCi0jZW5kaWYgLyogcmVhbGxvYyAqLwotI2lmZGVmIGZyZWUKLSN1bmRl ZiBmcmVlCi0jZW5kaWYgLyogZnJlZSAqLwotI2VuZGlmIC8qIE1ERUJVRyAqLwotCi0jaWZkZWYg TUFDCi0jZGVmaW5lIFZPSUQgdm9pZAotI2VuZGlmIC8qIE1BQyAqLwotCi0vKiBXIEEgUiBUICov Ci0KLS8qCi0gIEEgc21hbGwgc3Vic2V0IG9mICJsZXgiLgotCi0gIEF1dGhvcnM6IEplZmYgRGFt ZW5zLCBGcmFuayBkYSBDcnV6Ci0gIENvbHVtYmlhIFVuaXZlcnNpdHkgQ2VudGVyIGZvciBDb21w dXRpbmcgQWN0aXZpdGVzLgotICBGaXJzdCByZWxlYXNlZCBOb3ZlbWJlciAxOTg0LgotICBDb3B5 cmlnaHQgKEMpIDE5ODQsIDIwMDksCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0 eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2Vl IHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0 IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgot Ki8KLQotLyoKLSAqIGlucHV0IGZvcm1hdCBpczoKLSAqICBsaW5lcyB0byBiZSBjb3BpZWQgfCAl c3RhdGUgPHN0YXRlIG5hbWVzLi4uPgotICogICUlCi0gKiA8c3RhdGU+IHwgPHN0YXRlLHN0YXRl LC4uLj4gQ0hBUiAgeyBhY3Rpb25zIH0KLSAqIC4uLgotICogICUlCi0gKiAgbW9yZSBsaW5lcyB0 byBiZSBjb3BpZWQKLSAqLwotCi0jaW5jbHVkZSAiY2tjZGViLmgiCQkJLyogSW5jbHVkZXMgKi8K LQotI2lmZGVmIFNUUkFUVVMKLS8qIEFjdHVhbGx5IGNhbGwgcHJpbnRmLCBub3Qgb3VyIHByaW50 Zi1jYXRjaGVyIGZvciBLZXJtaXQgKi8KLSNpZmRlZiBwcmludGYKLSN1bmRlZiBwcmludGYKLSNl bmRpZiAvKiBwcmludGYgKi8KLSNpZmRlZiBmcHJpbnRmCi0jdW5kZWYgZnByaW50ZgotI2VuZGlm IC8qIGZwcmludGYgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0KLSNpZmRlZiBNQUMKLS8qIFNh bWUgZGVhbCBmb3IgTWFjaW50b3NoICovCi0jaWZkZWYgcHJpbnRmCi0jdW5kZWYgcHJpbnRmCi0j ZW5kaWYgLyogcHJpbnRmICovCi0jaWZkZWYgZnByaW50ZgotI3VuZGVmIGZwcmludGYKLSNlbmRp ZiAvKiBmcHJpbnRmICovCi0jZW5kaWYgLyogTUFDICovCi0KLSNpZmRlZiBVTklYCi0vKiBBbmQg VU5JWCAqLwotI2lmZGVmIHByaW50ZgotI3VuZGVmIHByaW50ZgotI2VuZGlmIC8qIHByaW50ZiAq LwotI2lmZGVmIGZwcmludGYKLSN1bmRlZiBmcHJpbnRmCi0jZW5kaWYgLyogZnByaW50ZiAqLwot I2VuZGlmIC8qIFVOSVggKi8KLS8qCi0gIFRoZSBmb2xsb3dpbmcgImNoYXIiIHNob3VsZCBiZSBj aGFuZ2VkIHRvICJzaG9ydCIsICJpbnQiLCBvciAibG9uZyIgaWYgeW91cgotICB3YXJ0IHByb2dy YW0gd2lsbCBnZW5lcmF0ZSBtb3JlIHRoYW4gMTI3IHN0YXRlcy4gIFNpbmNlIHdhcnQgaXMgdXNl ZCBtYWlubHkKLSAgd2l0aCBDLUtlcm1pdCwgd2hpY2ggaGFzIGFib3V0IDgwIHN0YXRlcywgImNo YXIiIGlzIGFkZXF1YXRlLiAgVGhpcyBrZWVwcwotICB0aGUgcHJvZ3JhbSBhYm91dCAzSy00SyBz bWFsbGVyLCB3aGljaCBjYW4gYmUgY3JpdGljYWwgb24gMTYtYml0Ci0gIGFyY2hpdGVjdHVyZXMu Ci0qLwotI2lmZGVmIElSSVg2MAotLyoKLSAgQWxzbyB1c2Ugc2hvcnQgb3IgaW50IGlmIHlvdXIg Y29tcGlsZXIgY29tcGxhaW5zIGlub3JkaW5hdGVseSBhYm91dAotICAiaW50ZWdlciBjb252ZXJz aW9uIHJlc3VsdGVkIGluIGEgY2hhbmdlIG9mIHNpZ24iLi4uCi0qLwotI2RlZmluZSBUQkxfVFlQ RSAic2hvcnQiCQkvKiBDIGRhdGEgdHlwZSBvZiBzdGF0ZSB0YWJsZSAqLwotI2Vsc2UKLSNkZWZp bmUgVEJMX1RZUEUgImNoYXIiCQkJLyogQyBkYXRhIHR5cGUgb2Ygc3RhdGUgdGFibGUgKi8KLSNl bmRpZiAvKiBJUklYNjAgKi8KLQotI2RlZmluZSBDX0wgMDE0CQkJCS8qIEZvcm1mZWVkICovCi0K LSNkZWZpbmUgU0VQIDEJCQkJLyogVG9rZW4gdHlwZXMgKi8KLSNkZWZpbmUgTEJSQUNLIDIKLSNk ZWZpbmUgUkJSQUNLIDMKLSNkZWZpbmUgV09SRCA0Ci0jZGVmaW5lIENPTU1BIDUKLQotLyogU3Rv cmFnZSBzaXplcyAqLwotCi0jZGVmaW5lIE1BWFNUQVRFUyA1MAkJCS8qIG1heCBudW1iZXIgb2Yg c3RhdGVzICovCi0jZGVmaW5lIE1BWFdPUkQgNTAJCQkvKiBtYXggIyBvZiBjaGFycy93b3JkICov Ci0jZGVmaW5lIFNCWVRFUyAoKE1BWFNUQVRFUys2KS84KQkvKiAjIG9mIGJ5dGVzIGZvciBzdGF0 ZSBiaXRtYXNrICovCi0KLS8qIE5hbWUgb2Ygd2FydCBmdW5jdGlvbiBpbiBnZW5lcmF0ZWQgcHJv Z3JhbSAqLwotCi0jaWZuZGVmIEZOQU1FCi0jZGVmaW5lIEZOQU1FICJ3YXJ0IgotI2VuZGlmIC8q IEZOQU1FICovCi0KLS8qIFN0cnVjdHVyZSBmb3Igc3RhdGUgaW5mb3JtYXRpb24gKi8KLQotc3Ry dWN0IHRyYW5zeCB7Ci0gICAgQ0hBUiBzdGF0ZXNbU0JZVEVTXTsJCS8qIGluY2x1ZGVkIHN0YXRl cyAqLwotICAgIGludCBhbnlzdDsJCQkJLyogdHJ1ZSBpZiB0aGlzIGdvb2QgZnJvbSBhbnkgc3Rh dGUgKi8KLSAgICBDSEFSIGluY2hyOwkJCQkvKiBpbnB1dCBjaGFyYWN0ZXIgKi8KLSAgICBpbnQg YWN0bm87CQkJCS8qIGFzc29jaWF0ZWQgYWN0aW9uICovCi0gICAgc3RydWN0IHRyYW5zeCAqbnh0 OwotfTsJCQkJCS8qIG5leHQgdHJhbnNpdGlvbiAqLwotdHlwZWRlZiBzdHJ1Y3QgdHJhbnN4ICp0 cmFuczsKLQotLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLwotCi1fUFJPVE9UWVAoIFZPSUQgc2V0 d3N0YXRlLCAoaW50LCB0cmFucykgKTsKLV9QUk9UT1RZUCggaW50IHRlc3RzdGF0ZSwgKGludCwg dHJhbnMpICk7Ci1fUFJPVE9UWVAoIHRyYW5zIHJkaW5wdXQsIChGSUxFICosIEZJTEUgKikgKTsK LV9QUk9UT1RZUCggVk9JRCBpbml0aWFsLCAoRklMRSAqLCBGSUxFICopICk7Ci1fUFJPVE9UWVAo IGludCBpc2luLCAoY2hhciAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBpc3dvcmQsIChpbnQp ICk7Ci1fUFJPVE9UWVAoIFZPSUQgcmR3b3JkLCAoRklMRSAqLCBjaGFyICopICk7Ci1fUFJPVE9U WVAoIFZPSUQgcmRzdGF0ZXMsIChGSUxFICosIEZJTEUgKikgKTsKLV9QUk9UT1RZUCggdHJhbnMg bmV3dHJhbnMsICh2b2lkKSApOwotX1BST1RPVFlQKCB0cmFucyByZHJ1bGVzLCAoRklMRSAqLCBG SUxFICopICk7Ci1fUFJPVE9UWVAoIFZPSUQgc3RhdGVsaXN0LCAoRklMRSAqLCB0cmFucykgKTsK LV9QUk9UT1RZUCggVk9JRCBjb3B5YWN0LCAoRklMRSAqLCBGSUxFICosIGludCkgKTsKLV9QUk9U T1RZUCggaW50IGZhY3Rpb24sICh0cmFucywgaW50LCBpbnQpICk7Ci1fUFJPVE9UWVAoIFZPSUQg ZW1wdHl0YmwsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIGFkZGFjdGlvbiwgKGludCwgaW50 LCBpbnQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgd3JpdGV0YmwsIChGSUxFICopICk7Ci1fUFJPVE9U WVAoIFZPSUQgd2FycmF5LCAoRklMRSAqLCBjaGFyICosIGludCBbXSwgaW50LCBjaGFyICopICk7 Ci1fUFJPVE9UWVAoIFZPSUQgcHJvbG9nLCAoRklMRSAqKSApOwotX1BST1RPVFlQKCBWT0lEIGVw aWxvZ3VlLCAoRklMRSAqKSApOwotX1BST1RPVFlQKCBWT0lEIGNvcHlyZXN0LCAoRklMRSAqLCBG SUxFICopICk7Ci1fUFJPVE9UWVAoIGludCBnZXR0b2tlbiwgKEZJTEUgKikgKTsKLV9QUk9UT1RZ UCggVk9JRCByZGNtbnQsIChGSUxFICopICk7Ci1fUFJPVE9UWVAoIFZPSUQgY2xyaGFzaCwgKHZv aWQpICk7Ci1fUFJPVE9UWVAoIGludCBoYXNoLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBWT0lE IGVudGVyLCAoY2hhciAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBsa3VwLCAoY2hhciAqKSAp OwotX1BST1RPVFlQKCBzdGF0aWMgY2hhciogY29weSwgKGNoYXIgKnMpICk7Ci0KLS8qIFZhcmlh YmxlcyBhbmQgdGFibGVzICovCi0KLS8qIGx0IDE5OTItMTAtMDggQmVnaW4KLSAqIHByb3ZpZGUg ZGVmaW5pdGlvbiBmb3IgZGVibG9nIHZhcmlhYmxlCi0gKiBja2NkZWIuaCBkZWNsYXJlcyBhcyBl eHRlcm4uIERFQ0MgQVhQIGlzIHN0cmljdCBhYm91dCByZWYvZGVmIG1vZGVsCi0gKiBWYXJpYWJs ZSBpcyB1bnVzZWQgaGVyZWluLCB0byB0aGUgYmVzdCBvZiBteSBrbm93bGVkZ2UuCi0gKi8KLSNp ZmRlZiBWTVMKLWludCBkZWJsb2c7Ci0jZW5kaWYgLyogVk1TICovCi0vKiBsdCAxOTkyLTEwLTA4 IEVuZAotICovCi0KLXN0YXRpYyBpbnQgbGluZXMsIG5zdGF0ZXMsIG5hY3RzOwotCi1zdGF0aWMg Y2hhciB0b2t2YWxbTUFYV09SRF07Ci0KLXN0YXRpYyBpbnQgdGJsW01BWFNUQVRFUyo5Nl07Ci0K LWNoYXIgKnRibF90eXBlID0gVEJMX1RZUEU7Ci0KLWNoYXIgKnR4dDEgPSAiXG4jZGVmaW5lIEJF R0lOIHN0YXRlID1cblxuaW50IHN0YXRlID0gMDtcblxuaW50XG4iOwotCi1jaGFyICpmbmFtZSA9 IEZOQU1FOwkJCS8qIEdlbmVyYXRlZCBmdW5jdGlvbiBuYW1lIGdvZXMgaGVyZSAqLwotCi0vKiBy ZXN0IG9mIHByb2dyYW0uLi4gKi8KLQotY2hhciAqdHh0MiA9ICIoKVxuXAote1xuXAotICAgIGlu dCBjLGFjdG5vO1xuXAotICAgIGV4dGVybiAiOwotCi0vKiBEYXRhIHR5cGUgb2Ygc3RhdGUgdGFi bGUgaXMgaW5zZXJ0ZWQgaGVyZSAoc2hvcnQgb3IgaW50KSAqLwotCi1jaGFyICp0eHQyYSA9Ci0i IHRibFtdO1xuXAotICAgIHdoaWxlICgxKSB7XG5cCi0JYyA9IGlucHV0KCkgLSAzMjtcblwKLQlk ZWJ1ZyhGMDAwLFwiUFJPVE8gaW5wdXRcIixja2l0b2Eoc3RhdGUpLGMrMzIpO1xuXAotCWlmIChj IDwgMCB8fCBjID4gOTUpIGMgPSAwO1xuIjsKLQotY2hhciAqdHh0MmIgPSAiCWlmICgoYWN0bm8g PSB0YmxbYyArIHN0YXRlKjk2XSkgIT0gLTEpXG5cCi0JICAgIHN3aXRjaChhY3Rubykge1xuIjsK LQotLyogdGhpcyBwcm9ncmFtJ3Mgb3V0cHV0IGdvZXMgaGVyZSwgZm9sbG93ZWQgYnkgZmluYWwg dGV4dC4uLiAqLwotCi1jaGFyICp0eHQzID0gIlxuCSAgICB9XG4gICAgfVxufVxuXG4iOwotCi0K LS8qCi0gKiB0dXJuIG9uIHRoZSBiaXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBzdGF0ZQot ICoKLSAqLwotVk9JRAotc2V0d3N0YXRlKHN0YXRlLHQpIGludCBzdGF0ZTsgdHJhbnMgdDsgewot ICAgIGludCBpZHgsbXNrOwotICAgIGlkeCA9IHN0YXRlLzg7CQkJLyogYnl0ZSBhc3NvY2lhdGVk IHdpdGggc3RhdGUgKi8KLSAgICBtc2sgPSAweDgwID4+IChzdGF0ZSAlIDgpOwkJLyogYml0IG1h c2sgZm9yIHN0YXRlICovCi0gICAgdC0+c3RhdGVzW2lkeF0gfD0gbXNrOwotfQotCi0vKgotICog c2VlIGlmIHRoZSBzdGF0ZSBpcyBpbnZvbHZlZCBpbiB0aGUgdHJhbnNpdGlvbgotICoKLSAqLwot aW50Ci10ZXN0c3RhdGUoc3RhdGUsdCkgaW50IHN0YXRlOyB0cmFucyB0OyB7Ci0gICAgaW50IGlk eCxtc2s7Ci0gICAgaWR4ID0gc3RhdGUvODsKLSAgICBtc2sgPSAweDgwID4+IChzdGF0ZSAlIDgp OwotICAgIHJldHVybih0LT5zdGF0ZXNbaWR4XSAmIG1zayk7Ci19Ci0KLQotLyoKLSAqIHJlYWQg aW5wdXQgZnJvbSBoZXJlLi4uCi0gKgotICovCi0KLXRyYW5zCi1yZGlucHV0KGluZnAsb3V0ZnAp IEZJTEUgKmluZnAsKm91dGZwOyB7Ci0gICAgdHJhbnMgeDsKLSAgICBsaW5lcyA9IDE7CQkJCS8q IGxpbmUgY291bnRlciAqLwotICAgIG5zdGF0ZXMgPSAwOwkJCS8qIG5vIHN0YXRlcyAqLwotICAg IG5hY3RzID0gMDsJCQkJLyogbm8gYWN0aW9ucyB5ZXQgKi8KLSAgICBmcHJpbnRmKG91dGZwLCJc biVjKiBXQVJOSU5HIC0tIFRoaXMgQyBzb3VyY2UgcHJvZ3JhbSBnZW5lcmF0ZWQgYnkgIiwnLycp OwotICAgIGZwcmludGYob3V0ZnAsIldhcnQgcHJlcHJvY2Vzc29yLiAqL1xuIik7Ci0gICAgZnBy aW50ZihvdXRmcCwiJWMqIERvIG5vdCBlZGl0IHRoaXMgZmlsZTsgZWRpdCB0aGUgV2FydC1mb3Jt YXQgIiwnLycpOwotICAgIGZwcmludGYob3V0ZnAsInNvdXJjZSBmaWxlIGluc3RlYWQsICovXG4i KTsKLSAgICBmcHJpbnRmKG91dGZwLCIlYyogYW5kIHRoZW4gcnVuIGl0IHRocm91Z2ggV2FydCB0 byBwcm9kdWNlIGEgbmV3ICIsJy8nKTsKLSAgICBmcHJpbnRmKG91dGZwLCJDIHNvdXJjZSBmaWxl LiAgICAgKi9cblxuIik7Ci0gICAgZnByaW50ZihvdXRmcCwiJWMqIFdhcnQgVmVyc2lvbiBJbmZv OiAqL1xuIiwnLycpOwotICAgIGZwcmludGYob3V0ZnAsImNoYXIgKndhcnR2ID0gXCIlc1wiO1xu XG4iLHdhcnR2KTsKLQotICAgIGluaXRpYWwoaW5mcCxvdXRmcCk7CQkvKiByZWFkIHN0YXRlIG5h bWVzLCBpbml0aWFsIGRlZnMgKi8KLSAgICBwcm9sb2cob3V0ZnApOwkJCS8qIHdyaXRlIG91dCBv dXIgaW5pdGlhbCBjb2RlICovCi0gICAgeCA9IHJkcnVsZXMoaW5mcCxvdXRmcCk7CQkvKiByZWFk IHJ1bGVzICovCi0gICAgZXBpbG9ndWUob3V0ZnApOwkJCS8qIHdyaXRlIG91dCBlcGlsb2d1ZSBj b2RlICovCi0gICAgcmV0dXJuKHgpOwotfQotCi0KLS8qCi0gKiBpbml0aWFsIC0gcmVhZCBpbml0 aWFsIGRlZmluaXRpb25zIGFuZCBzdGF0ZSBuYW1lcy4gIFJldHVybnMKLSAqIG9uIEVPRiBvciAl JS4KLSAqCi0gKi8KLVZPSUQKLWluaXRpYWwoaW5mcCxvdXRmcCkgRklMRSAqaW5mcCwgKm91dGZw OyB7Ci0gICAgaW50IGM7Ci0gICAgY2hhciB3b3JkYnVmW01BWFdPUkRdOwotICAgIHdoaWxlICgo YyA9IGdldGMoaW5mcCkpICE9IEVPRikgewotCWlmIChjID09ICclJykgewotCSAgICByZHdvcmQo aW5mcCx3b3JkYnVmKTsKLQkgICAgaWYgKHN0cmNtcCh3b3JkYnVmLCJzdGF0ZXMiKSA9PSAwKQot CSAgICAgIHJkc3RhdGVzKGluZnAsb3V0ZnApOwotCSAgICBlbHNlIGlmIChzdHJjbXAod29yZGJ1 ZiwiJSIpID09IDApIHJldHVybjsKLQkgICAgZWxzZSBmcHJpbnRmKG91dGZwLCIlJSVzIix3b3Jk YnVmKTsKLQl9Ci0JZWxzZSBwdXRjKGMsb3V0ZnApOwotCWlmIChjID09ICdcbicpIGxpbmVzKys7 Ci0gICAgfQotfQotCi0vKgotICogYm9vbGVhbiBmdW5jdGlvbiB0byB0ZWxsIGlmIHRoZSBnaXZl biBjaGFyYWN0ZXIgY2FuIGJlIHBhcnQgb2YKLSAqIGEgd29yZC4KLSAqCi0gKi8KLWludAotaXNp bihzLGMpIGNoYXIgKnM7IGludCBjOyB7Ci0gICAgZm9yICg7ICpzICE9ICdcMCc7IHMrKykKLSAg ICAgIGlmICgqcyA9PSAoY2hhcikgYykgcmV0dXJuKDEpOwotICAgIHJldHVybigwKTsKLX0KLWlu dAotaXN3b3JkKGMpIGludCBjOyB7Ci0gICAgc3RhdGljIGNoYXIgc3BlY2lhbFtdID0gIi4lXy0k QCI7CS8qIHRoZXNlIGFyZSBhbGxvd2FibGUgKi8KLSAgICByZXR1cm4oaXNhbG51bShjKSB8fCBp c2luKHNwZWNpYWwsYykpOwotfQotCi0vKgotICogcmVhZCB0aGUgbmV4dCB3b3JkIGludG8gdGhl IGdpdmVuIGJ1ZmZlci4KLSAqCi0gKi8KLVZPSUQKLXJkd29yZChmcCxidWYpIEZJTEUgKmZwOyBj aGFyICpidWY7IHsKLSAgICBpbnQgbGVuID0gMCxjOwotICAgIHdoaWxlIChpc3dvcmQoYyA9IGdl dGMoZnApKSAmJiArK2xlbiA8IE1BWFdPUkQpICpidWYrKyA9IChjaGFyKSBjOwotICAgICpidWYr KyA9ICdcMCc7CQkJLyogdGllIG9mZiB3b3JkICovCi0gICAgdW5nZXRjKGMsZnApOwkJCS8qIHB1 dCBicmVhayBjaGFyIGJhY2sgKi8KLX0KLQotLyoKLSAqIHJlYWQgc3RhdGUgbmFtZXMsIHVwIHRv IGEgbmV3bGluZS4KLSAqCi0gKi8KLVZPSUQKLXJkc3RhdGVzKGZwLG9mcCkgRklMRSAqZnAsKm9m cDsgewotICAgIGludCBjOwotICAgIGNoYXIgd29yZGJ1ZltNQVhXT1JEXTsKLSAgICB3aGlsZSAo KGMgPSBnZXRjKGZwKSkgIT0gRU9GICYmIGMgIT0gJ1xuJykgewotCWlmIChpc3NwYWNlKGMpIHx8 IGMgPT0gQ19MKSBjb250aW51ZTsJLyogc2tpcCB3aGl0ZXNwYWNlICovCi0JdW5nZXRjKGMsZnAp OwkJCS8qIHB1dCBjaGFyIGJhY2sgKi8KLQlyZHdvcmQoZnAsd29yZGJ1Zik7CQkvKiByZWFkIHRo ZSB3aG9sZSB3b3JkICovCi0JZW50ZXIod29yZGJ1ZiwrK25zdGF0ZXMpOwkvKiBwdXQgaW50byBz eW1ib2wgdGJsICovCi0JZnByaW50ZihvZnAsIiNkZWZpbmUgJXMgJWRcbiIsd29yZGJ1Zixuc3Rh dGVzKTsKLSAgICB9Ci0gICAgbGluZXMrKzsKLX0KLQotLyoKLSAqIGFsbG9jYXRlIGEgbmV3LCBl bXB0eSB0cmFuc2l0aW9uIG5vZGUKLSAqCi0gKi8KLXRyYW5zCi1uZXd0cmFucygpIHsKLSAgICB0 cmFucyBuZXc7Ci0gICAgaW50IGk7Ci0gICAgbmV3ID0gKHRyYW5zKSBtYWxsb2Moc2l6ZW9mIChz dHJ1Y3QgdHJhbnN4KSk7Ci0gICAgZm9yIChpPTA7IGk8U0JZVEVTOyBpKyspIG5ldy0+c3RhdGVz W2ldID0gMDsKLSAgICBuZXctPmFueXN0ID0gMDsKLSAgICBuZXctPm54dCA9IE5VTEw7Ci0gICAg cmV0dXJuKG5ldyk7Ci19Ci0KLQotLyoKLSAqIHJlYWQgYWxsIHRoZSBydWxlcy4KLSAqCi0gKi8K LQotdHJhbnMKLXJkcnVsZXMoZnAsb3V0KSBGSUxFICpmcCwqb3V0OyB7Ci0gICAgdHJhbnMgaGVh ZCxjdXIscHJldjsKLSAgICBpbnQgY3VydG9rOwotICAgIGhlYWQgPSBjdXIgPSBwcmV2ID0gTlVM TDsKLSAgICB3aGlsZSAoKGN1cnRvayA9IGdldHRva2VuKGZwKSkgIT0gU0VQKQotCi0gICAgICBz d2l0Y2goY3VydG9rKSB7Ci0JY2FzZSBMQlJBQ0s6Ci0JICBpZiAoY3VyID09IE5VTEwpCi0JICAg IGN1ciA9IG5ld3RyYW5zKCk7Ci0JICBlbHNlCi0JICAgIGZhdGFsKCJkdXBsaWNhdGUgc3RhdGUg bGlzdCIpOwotCSAgc3RhdGVsaXN0KGZwLGN1cik7CQkvKiBzZXQgc3RhdGVzICovCi0JICBjb250 aW51ZTsJCQkvKiBwcmVwYXJlIHRvIHJlYWQgY2hhciAqLwotCi0JY2FzZSBXT1JEOgotCSAgaWYg KChpbnQpc3RybGVuKHRva3ZhbCkgIT0gMSkKLQkgICAgZmF0YWwoIm11bHRpcGxlIGNoYXJzIGlu IHN0YXRlIik7Ci0JICBpZiAoY3VyID09IE5VTEwpIHsKLQkgICAgICBjdXIgPSBuZXd0cmFucygp OwotCSAgICAgIGN1ci0+YW55c3QgPSAxOwotCSAgfQotCSAgY3VyLT5hY3RubyA9ICsrbmFjdHM7 Ci0JICBjdXItPmluY2hyID0gKGNoYXIpICh0b2t2YWxbMF0gLSAzMik7Ci0JICBpZiAoaGVhZCA9 PSBOVUxMKQotCSAgICBoZWFkID0gY3VyOwotCSAgZWxzZQotCSAgICBwcmV2LT5ueHQgPSBjdXI7 Ci0JICBwcmV2ID0gY3VyOwotCSAgY3VyID0gTlVMTDsKLQkgIGNvcHlhY3QoZnAsb3V0LG5hY3Rz KTsKLQkgIGJyZWFrOwotCWRlZmF1bHQ6IGZhdGFsKCJiYWQgaW5wdXQgZm9ybWF0Iik7Ci0gICAg ICB9Ci0gICAgcmV0dXJuKGhlYWQpOwotfQotCi0vKgotICogcmVhZCBhIGxpc3Qgb2YgKGNvbW1h LXNlcGFyYXRlZCkgc3RhdGVzLCBzZXQgdGhlbSBpbiB0aGUKLSAqIGdpdmVuIHRyYW5zaXRpb24u Ci0gKgotICovCi1WT0lECi1zdGF0ZWxpc3QoZnAsdCkgRklMRSAqZnA7IHRyYW5zIHQ7IHsKLSAg ICBpbnQgY3VydG9rLHN2YWw7Ci0gICAgY3VydG9rID0gQ09NTUE7Ci0gICAgd2hpbGUgKGN1cnRv ayAhPSBSQlJBQ0spIHsKLQlpZiAoY3VydG9rICE9IENPTU1BKSBmYXRhbCgibWlzc2luZyBjb21t YSIpOwotCWlmICgoY3VydG9rID0gZ2V0dG9rZW4oZnApKSAhPSBXT1JEKSBmYXRhbCgibWlzc2lu ZyBzdGF0ZSBuYW1lIik7Ci0JaWYgKChzdmFsID0gbGt1cCh0b2t2YWwpKSA9PSAtMSkgewotCSAg ICBmcHJpbnRmKHN0ZGVyciwic3RhdGUgJXMgdW5kZWZpbmVkXG4iLHRva3ZhbCk7Ci0JICAgIGZh dGFsKCJ1bmRlZmluZWQgc3RhdGUiKTsKLQl9Ci0Jc2V0d3N0YXRlKHN2YWwsdCk7Ci0JY3VydG9r ID0gZ2V0dG9rZW4oZnApOwotICAgIH0KLX0KLQotLyoKLSAqIGNvcHkgYW4gYWN0aW9uIGZyb20g dGhlIGlucHV0IHRvIHRoZSBvdXRwdXQgZmlsZQotICoKLSAqLwotVk9JRAotY29weWFjdChpbnAs b3V0cCxhY3RubykgRklMRSAqaW5wLCpvdXRwOyBpbnQgYWN0bm87IHsKLSAgICBpbnQgYyxiY250 OwotICAgIGZwcmludGYob3V0cCwiY2FzZSAlZDpcbiIsYWN0bm8pOwotICAgIHdoaWxlIChjID0g Z2V0YyhpbnApLCAoaXNzcGFjZShjKSB8fCBjID09IENfTCkpCi0gICAgICBpZiAoYyA9PSAnXG4n KSBsaW5lcysrOwotICAgIGlmIChjID09ICd7JykgewotCWJjbnQgPSAxOwotCWZwdXRzKCIgICAg eyIsb3V0cCk7Ci0Jd2hpbGUgKGJjbnQgPiAwICYmIChjID0gZ2V0YyhpbnApKSAhPSBFT0YpIHsK LQkgICAgaWYgKGMgPT0gJ3snKSBiY250Kys7Ci0JICAgIGVsc2UgaWYgKGMgPT0gJ30nKSBiY250 LS07Ci0JICAgIGVsc2UgaWYgKGMgPT0gJ1xuJykgbGluZXMrKzsKLQkgICAgcHV0YyhjLG91dHAp OwotCX0KLQlpZiAoYmNudCA+IDApIGZhdGFsKCJhY3Rpb24gZG9lc24ndCBlbmQiKTsKLSAgICB9 IGVsc2UgewotCXdoaWxlIChjICE9ICdcbicgJiYgYyAhPSBFT0YpIHsKLQkgICAgcHV0YyhjLG91 dHApOwotCSAgICBjID0gZ2V0YyhpbnApOwotCX0KLQlsaW5lcysrOwotICAgIH0KLSAgICBmcHJp bnRmKG91dHAsIlxuICAgIGJyZWFrO1xuIik7Ci19Ci0KLS8qCi0gKiBmaW5kIHRoZSBhY3Rpb24g YXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gY2hhcmFjdGVyIGFuZCBzdGF0ZS4KLSAqIHJldHVybnMg LTEgaWYgb25lIGNhbid0IGJlIGZvdW5kLgotICoKLSAqLwotaW50Ci1mYWN0aW9uKGhkLHN0YXRl LGNocikgdHJhbnMgaGQ7IGludCBzdGF0ZSxjaHI7IHsKLSAgICB3aGlsZSAoaGQgIT0gTlVMTCkg ewotCWlmIChoZC0+YW55c3QgfHwgdGVzdHN0YXRlKHN0YXRlLGhkKSkKLQkgIGlmIChoZC0+aW5j aHIgPT0gKCcuJyAtIDMyKSB8fCBoZC0+aW5jaHIgPT0gKGNoYXIpIGNocikKLQkgICAgcmV0dXJu KGhkLT5hY3Rubyk7Ci0JaGQgPSBoZC0+bnh0OwotICAgIH0KLSAgICByZXR1cm4oLTEpOwotfQot Ci0vKgotICogZW1wdHkgdGhlIHRhYmxlLi4uCi0gKgotICovCi1WT0lECi1lbXB0eXRibCgpIHsK LSAgICBpbnQgaTsKLSAgICBmb3IgKGk9MDsgaTxuc3RhdGVzKjk2OyBpKyspIHRibFtpXSA9IC0x OwotfQotCi0vKgotICogYWRkIHRoZSBzcGVjaWZpZWQgYWN0aW9uIHRvIHRoZSBvdXRwdXQgZm9y IHRoZSBnaXZlbiBzdGF0ZSBhbmQgY2hyLgotICoKLSAqLwotVk9JRAotYWRkYWN0aW9uKGFjdCxz dGF0ZSxjaHIpIGludCBhY3Qsc3RhdGUsY2hyOyB7Ci0gICAgdGJsW3N0YXRlKjk2ICsgY2hyXSA9 IGFjdDsKLX0KLQotVk9JRAotd3JpdGV0YmwoZnApIEZJTEUgKmZwOyB7Ci0gICAgd2FycmF5KGZw LCJ0YmwiLHRibCw5NioobnN0YXRlcysxKSxUQkxfVFlQRSk7Ci19Ci0KLQotLyoKLSAqIHdyaXRl IGFuIGFycmF5IHRvIHRoZSBvdXRwdXQgZmlsZSwgZ2l2ZW4gaXRzIG5hbWUgYW5kIHNpemUuCi0g KgotICovCi1WT0lECi13YXJyYXkoZnAsbmFtLGNvbnQsc2l6LHR5cCkgRklMRSAqZnA7IGNoYXIg Km5hbTsgaW50IGNvbnRbXSxzaXo7IGNoYXIgKnR5cDsgewotICAgIGludCBpOwotICAgIGZwcmlu dGYoZnAsIiVzICVzW10gPSB7XG4iLHR5cCxuYW0pOwotICAgIGZvciAoaSA9IDA7IGkgPCBzaXog LSAxOyApIHsKLQlmcHJpbnRmKGZwLCIgJTJkLCIsY29udFtpXSk7Ci0JaWYgKCgrK2kgJSAxNikg PT0gMCkgcHV0YygnXG4nLGZwKTsKLSAgICB9Ci0gICAgZnByaW50ZihmcCwiJTJkXG59O1xuIixj b250W3Npei0xXSk7Ci19Ci0KLSNpZm5kZWYgU1RSQVRVUwotI2lmZGVmIE1BSU5UWVBFCi0vKgot ICBJZiB5b3UgZ2V0IGNvbXBsYWludHMgYWJvdXQgIm1haW46IHJldHVybiB0eXBlIGlzIG5vdCBi bGFoIiwKLSAgZGVmaW5lIE1BSU5UWVBFIG9uIHRoZSBDQyBjb21tYW5kIGxpbmUsIGUuZy4gIkNG TEFHUz0tRE1BSU5UWVBFPWludCIuCi0qLwotTUFJTlRZUEUKLSNlbHNlCi0jaWZkZWYgQ0tfU0NP VjUKLWludAotI2Vsc2UKLSNpZmRlZiBfX0RFQ0MKLSNpZmRlZiBfX0FMUEhBCi1pbnQKLSNlbHNl Ci1WT0lECi0jZW5kaWYgLyogX19BTFBIQSAqLwotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi1pbnQK LSNpZmRlZiBfX0dOVUNfXwotaW50Ci0jZWxzZQotLyoKLSAgVGhlIGRlZmF1bHQgY2FzZSBzaG91 bGQgYmUgaW50LCBub3QgVk9JRCwgYnV0IGl0J3MgYmVlbiB0aGlzIHdheSBmb3IKLSAgeWVhcnMg KG5vIGRvdWJ0IGZvciBhIHJlYXNvbikgYW5kIHdobyBrbm93cyBob3cgbWFueSBidWlsZHMgd291 bGQgYnJlYWsKLSAgaWYgSSBjaGFuZ2VkIGl0LgotKi8KLVZPSUQKLSNlbmRpZiAvKiBfX0dOVUNf XyAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBfX0RFQ0MgKi8KLSNlbmRpZiAv KiBDS19TQ09WNSAqLwotI2VuZGlmIC8qIE1BSU5UWVBFICovCi0jZW5kaWYgLyogU1RSQVRVUyAq LwotbWFpbihhcmdjLGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsgewotICAgIHRyYW5zIGhl YWQ7Ci0gICAgaW50IHN0YXRlLGM7Ci0gICAgRklMRSAqaW5maWxlLCpvdXRmaWxlOwotCi0gICAg aWYgKGFyZ2MgPiAxKSB7Ci0JaWYgKChpbmZpbGUgPSBmb3Blbihhcmd2WzFdLCJyIikpID09IE5V TEwpIHsKLQkgICAgZnByaW50ZihzdGRlcnIsIkNhbid0IG9wZW4gJXNcbiIsYXJndlsxXSk7Ci0J ICAgIGZhdGFsKCJ1bnJlYWRhYmxlIGlucHV0IGZpbGUiKTsKLQl9Ci0gICAgfSBlbHNlIGluZmls ZSA9IHN0ZGluOwotCi0gICAgaWYgKGFyZ2MgPiAyKSB7Ci0JaWYgKChvdXRmaWxlID0gZm9wZW4o YXJndlsyXSwidyIpKSA9PSBOVUxMKSB7Ci0JICAgIGZwcmludGYoc3RkZXJyLCJDYW4ndCB3cml0 ZSB0byAlc1xuIixhcmd2WzJdKTsKLQkgICAgZmF0YWwoImJhZCBvdXRwdXQgZmlsZSIpOwotCX0K LSAgICB9IGVsc2Ugb3V0ZmlsZSA9IHN0ZG91dDsKLQotICAgIGNscmhhc2goKTsJCQkJLyogZW1w dHkgaGFzaCB0YWJsZSAqLwotICAgIGhlYWQgPSByZGlucHV0KGluZmlsZSxvdXRmaWxlKTsJLyog cmVhZCBpbnB1dCBmaWxlICovCi0gICAgZW1wdHl0YmwoKTsJCQkJLyogZW1wdHkgb3VyIHRhYmxl cyAqLwotICAgIGZvciAoc3RhdGUgPSAwOyBzdGF0ZSA8PSBuc3RhdGVzOyBzdGF0ZSsrKQotICAg ICAgZm9yIChjID0gMTsgYyA8IDk2OyBjKyspCQkvKiBmaW5kIGFjdGlvbnMsICovCi0JYWRkYWN0 aW9uKGZhY3Rpb24oaGVhZCxzdGF0ZSxjKSxzdGF0ZSxjKTsgLyogYWRkIHRvIHRibCAqLwotICAg IHdyaXRldGJsKG91dGZpbGUpOwotICAgIGNvcHlyZXN0KGluZmlsZSxvdXRmaWxlKTsKLSAgICBw cmludGYoIiVkIHN0YXRlcywgJWQgYWN0aW9uc1xuIixuc3RhdGVzLG5hY3RzKTsKLSAgICBleGl0 KEdPT0RfRVhJVCk7Ci19Ci0KLQotLyoKLSAqIGZhdGFsIGVycm9yIGhhbmRsZXIKLSAqCi0gKi8K LQotVk9JRAotZmF0YWwobXNnKSBjaGFyICptc2c7IHsKLSAgICBmcHJpbnRmKHN0ZGVyciwiZXJy b3IgaW4gbGluZSAlZDogJXNcbiIsbGluZXMsbXNnKTsKLSAgICBleGl0KEJBRF9FWElUKTsKLX0K LQotVk9JRAotcHJvbG9nKG91dGZwKSBGSUxFICpvdXRmcDsgewotICAgIGludCBjOwotICAgIHdo aWxlICgoYyA9ICp0eHQxKyspICAgICAhPSAnXDAnKSBwdXRjKGMsb3V0ZnApOwotICAgIHdoaWxl ICgoYyA9ICpmbmFtZSsrKSAgICAhPSAnXDAnKSBwdXRjKGMsb3V0ZnApOwotICAgIHdoaWxlICgo YyA9ICp0eHQyKyspICAgICAhPSAnXDAnKSBwdXRjKGMsb3V0ZnApOwotICAgIHdoaWxlICgoYyA9 ICp0YmxfdHlwZSsrKSAhPSAnXDAnKSBwdXRjKGMsb3V0ZnApOwotICAgIHdoaWxlICgoYyA9ICp0 eHQyYSsrKSAgICAhPSAnXDAnKSBwdXRjKGMsb3V0ZnApOwotICAgIHdoaWxlICgoYyA9ICp0eHQy YisrKSAgICAhPSAnXDAnKSBwdXRjKGMsb3V0ZnApOwotfQotCi1WT0lECi1lcGlsb2d1ZShvdXRm cCkgRklMRSAqb3V0ZnA7IHsKLSAgICBpbnQgYzsKLSAgICB3aGlsZSAoKGMgPSAqdHh0MysrKSAh PSAnXDAnKSBwdXRjKGMsb3V0ZnApOwotfQotCi1WT0lECi1jb3B5cmVzdChpbixvdXQpIEZJTEUg KmluLCpvdXQ7IHsKLSAgICBpbnQgYzsKLSAgICB3aGlsZSAoKGMgPSBnZXRjKGluKSkgIT0gRU9G KSBwdXRjKGMsb3V0KTsKLX0KLQotLyoKLSAqIGdldHRva2VuIC0gcmV0dXJucyB0b2tlbiB0eXBl IG9mIG5leHQgdG9rZW4sIHNldHMgdG9rdmFsCi0gKiB0byB0aGUgc3RyaW5nIHZhbHVlIG9mIHRo ZSB0b2tlbiBpZiBhcHByb3ByaWF0ZS4KLSAqCi0gKi8KLQotaW50Ci1nZXR0b2tlbihmcCkgRklM RSAqZnA7IHsKLSAgICBpbnQgYzsKLSAgICB3aGlsZSAoMSkgewkJCQkvKiBsb29wIGlmIHJlYWRp bmcgY29tbWVudHMuLi4gKi8KLQlkbyB7Ci0JICAgIGMgPSBnZXRjKGZwKTsKLQkgICAgaWYgKGMg PT0gJ1xuJykgbGluZXMrKzsKLQl9IHdoaWxlICgoaXNzcGFjZShjKSB8fCBjID09IENfTCkpOyAv KiBza2lwIHdoaXRlc3BhY2UgKi8KLQlzd2l0Y2goYykgewotCSAgY2FzZSBFT0Y6Ci0JICAgIHJl dHVybihTRVApOwotCSAgY2FzZSAnJSc6Ci0JICAgIGlmICgoYyA9IGdldGMoZnApKSA9PSAnJScp IHJldHVybihTRVApOwotCSAgICB0b2t2YWxbMF0gPSAnJSc7Ci0JICAgIHRva3ZhbFsxXSA9IChj aGFyKSBjOwotCSAgICByZHdvcmQoZnAsdG9rdmFsKzIpOwotCSAgICByZXR1cm4oV09SRCk7Ci0J ICBjYXNlICc8JzoKLQkgICAgcmV0dXJuKExCUkFDSyk7Ci0JICBjYXNlICc+JzoKLQkgICAgcmV0 dXJuKFJCUkFDSyk7Ci0JICBjYXNlICcsJzoKLQkgICAgcmV0dXJuKENPTU1BKTsKLQkgIGNhc2Ug Jy8nOgotCSAgICBpZiAoKGMgPSBnZXRjKGZwKSkgPT0gJyonKSB7Ci0JCXJkY21udChmcCk7CQkv KiBza2lwIG92ZXIgdGhlIGNvbW1lbnQgKi8KLQkJY29udGludWU7Ci0JICAgIH0gZWxzZSB7CQkJ LyogYW5kIGtlZXAgbG9vcGluZyAqLwotCQl1bmdldGMoYyxmcCk7CQkvKiBwdXQgdGhpcyBiYWNr IGludG8gaW5wdXQgKi8KLQkJYyA9ICcvJzsJCS8qIHB1dCBjaGFyYWN0ZXIgYmFjaywgZmFsbCB0 aHJ1ICovCi0JICAgIH0KLQotCSAgZGVmYXVsdDoKLQkgICAgaWYgKGlzd29yZChjKSkgewotCQl1 bmdldGMoYyxmcCk7Ci0JCXJkd29yZChmcCx0b2t2YWwpOwotCQlyZXR1cm4oV09SRCk7Ci0JICAg IH0gZWxzZSBmYXRhbCgiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaW5wdXQiKTsKLQl9Ci0gICAgfQot fQotCi0vKgotICogc2tpcCBvdmVyIGEgY29tbWVudAotICoKLSAqLwotCi1WT0lECi1yZGNtbnQo ZnApIEZJTEUgKmZwOyB7Ci0gICAgaW50IGMsc3RhcixwcmNudDsKLSAgICBwcmNudCA9IHN0YXIg PSAwOwkJCS8qIG5vIHN0YXIgc2VlbiB5ZXQgKi8KLSAgICB3aGlsZSAoISgoYyA9IGdldGMoZnAp KSA9PSAnLycgJiYgc3RhcikpIHsKLQlpZiAoYyA9PSBFT0YgfHwgKHByY250ICYmIGMgPT0gJyUn KSkgZmF0YWwoIlVudGVybWluYXRlZCBjb21tZW50Iik7Ci0JcHJjbnQgPSAoYyA9PSAnJScpOwot CXN0YXIgPSAoYyA9PSAnKicpOwotCWlmIChjID09ICdcbicpIGxpbmVzKys7Ci0gICAgfQotfQot Ci0vKgotICogc3ltYm9sIHRhYmxlIG1hbmFnZW1lbnQgZm9yIHdhcnQKLSAqCi0gKiBlbnRyeSBw b2ludHM6Ci0gKiAgIGNscmhhc2ggLSBlbXB0eSBoYXNoIHRhYmxlLgotICogICBlbnRlciAtIGVu dGVyIGEgbmFtZSBpbnRvIHRoZSBzeW1ib2wgdGFibGUKLSAqICAgbGt1cCAtIGZpbmQgYSBuYW1l J3MgdmFsdWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KLSAqCi0gKi8KLQotI2RlZmluZSBIQVNIU0la RSAxMDEJCQkvKiAjIG9mIGVudHJpZXMgaW4gaGFzaCB0YWJsZSAqLwotCi1zdHJ1Y3Qgc3ltIHsK LSAgICBjaGFyICpuYW1lOwkJCQkvKiBzeW1ib2wgbmFtZSAqLwotICAgIGludCB2YWw7CQkJCS8q IHZhbHVlICovCi0gICAgc3RydWN0IHN5bSAqaG54dDsJCQkvKiBuZXh0IG9uIGNvbGxpc2lvbiBj aGFpbiAqLwotfSAqaHRhYltIQVNIU0laRV07CQkJLyogdGhlIGhhc2ggdGFibGUgKi8KLQotLyoK LSAqIGVtcHR5IHRoZSBoYXNoIHRhYmxlIGJlZm9yZSB1c2luZyBpdC4uLgotICoKLSAqLwotVk9J RAotY2xyaGFzaCgpIHsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGk9MDsgaTxIQVNIU0laRTsgaSsr KSBodGFiW2ldID0gTlVMTDsKLX0KLQotLyoKLSAqIGNvbXB1dGUgdGhlIHZhbHVlIG9mIHRoZSBo YXNoIGZvciBhIHN5bWJvbAotICoKLSAqLwotaW50Ci1oYXNoKG5hbWUpIGNoYXIgKm5hbWU7IHsK LSAgICBpbnQgc3VtOwotICAgIGZvciAoc3VtID0gMDsgKm5hbWUgIT0gJ1wwJzsgbmFtZSsrKSBz dW0gKz0gKHN1bSArICpuYW1lKTsKLSAgICBzdW0gJT0gSEFTSFNJWkU7CQkJLyogdGFrZSBzdW0g bW9kIGhhc2hzaXplICovCi0gICAgaWYgKHN1bSA8IDApIHN1bSArPSBIQVNIU0laRTsJLyogZGlz YWxsb3cgbmVnYXRpdmUgaGFzaCB2YWx1ZSAqLwotICAgIHJldHVybihzdW0pOwotfQotCi0vKgot ICogbWFrZSBhIHByaXZhdGUgY29weSBvZiBhIHN0cmluZy4uLgotICoKLSAqLwotc3RhdGljIGNo YXIqCi1jb3B5KHMpIGNoYXIgKnM7IHsKLSAgICBjaGFyICpuZXc7Ci0gICAgbmV3ID0gKGNoYXIg KikgbWFsbG9jKChpbnQpc3RybGVuKHMpICsgMSk7Ci0gICAgc3RyY3B5KG5ldyxzKTsKLSAgICBy ZXR1cm4obmV3KTsKLX0KLQotLyoKLSAqIGVudGVyIHN0YXRlIG5hbWUgaW50byB0aGUgaGFzaCB0 YWJsZQotICoKLSAqLwotVk9JRAotZW50ZXIobmFtZSxzdmFsdWUpIGNoYXIgKm5hbWU7IGludCBz dmFsdWU7IHsKLSAgICBpbnQgaDsKLSAgICBzdHJ1Y3Qgc3ltICpjdXI7Ci0gICAgaWYgKGxrdXAo bmFtZSkgIT0gLTEpIHsKLQlmcHJpbnRmKHN0ZGVyciwic3RhdGUgXCIlc1wiIGFwcGVhcnMgdHdp Y2UuLi5cbiIsIG5hbWUpOwotCWV4aXQoQkFEX0VYSVQpOwotICAgIH0KLSAgICBoID0gaGFzaChu YW1lKTsKLSAgICBjdXIgPSAoc3RydWN0IHN5bSAqKW1hbGxvYyhzaXplb2YgKHN0cnVjdCBzeW0p KTsKLSAgICBjdXItPm5hbWUgPSBjb3B5KG5hbWUpOwotICAgIGN1ci0+dmFsID0gc3ZhbHVlOwot ICAgIGN1ci0+aG54dCA9IGh0YWJbaF07Ci0gICAgaHRhYltoXSA9IGN1cjsKLX0KLQotLyoKLSAq IGZpbmQgbmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCByZXR1cm4gaXRzIHZhbHVlLiAgUmV0dXJu cyAtMQotICogaWYgbm90IGZvdW5kLgotICoKLSAqLwotaW50Ci1sa3VwKG5hbWUpIGNoYXIgKm5h bWU7IHsKLSAgICBzdHJ1Y3Qgc3ltICpjdXI7Ci0gICAgZm9yIChjdXIgPSBodGFiW2hhc2gobmFt ZSldOyBjdXIgIT0gTlVMTDsgY3VyID0gY3VyLT5obnh0KQotICAgICAgaWYgKHN0cmNtcChjdXIt Pm5hbWUsbmFtZSkgPT0gMCkgcmV0dXJuKGN1ci0+dmFsKTsKLSAgICByZXR1cm4oLTEpOwotfQoK ZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvbWFrZWZp bGUgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL21ha2VmaWxlCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWZlMjYyLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvbWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAt MSw4NjI2ICswLDAgQEAKLSMgbWFrZWZpbGUgLyBNYWtlZmlsZSAvIGNrdWtlci5tYWsgLyBDS1VL RVIuTUFLCi0jCi0jIFN1biBBdWcgMjEgMTA6MzM6MDggMjAxMQotQlVJTERJRD0yMDExMDgyMQot Q0tWRVI9ICI5LjAuMzAyIgotIwotIyAtLSBNYWtlZmlsZSB0byBidWlsZCBDLUtlcm1pdCBmb3Ig VU5JWCBhbmQgVU5JWC1saWtlIHBsYXRmb3JtcyAtLQotIwotIyBDb3B5cmlnaHQgKEMpIDE5ODUs IDIwMTEsCi0jICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBv ZiBOZXcgWW9yay4KLSMgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBD T1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotIyAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWku YyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotIyAgIEluIGNhc2UgeW91 IGNhbid0IGZpbmQgdGhlIENPUFlJTkcuVFhUIGZpbGUsIGl0IGNvbnRhaW5zIHRoZSAKLSMgICBT aW1wbGlmaWVkIDMtQ2xhdXNlIEJTRCBMaWNlbnNlLCB3aGljaCBpcyBhbiBPcGVuIFNvdXJjZSBs aWNlbnNlLgotIwotIyBBdXRob3I6IEZyYW5rIGRhIENydXosIENvbHVtYmlhIFVuaXZlcnNpdHkK LSMgNjEyIFdlc3QgMTE1dGggU3RyZWV0LCBOZXcgWW9yayBOWSAxMDAyNS03Nzk5LCBVU0EKLSMg RW1haWw6IGZkY0Bjb2x1bWJpYS5lZHUKLSMgV2ViOiAgIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1LwotIyBGVFA6ICAgZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0jCi0jIE5v dGU6IEF1dGhvciBpcyBubyBsb25nZXIgYXQgQ29sdW1iaWEgVW5pdmVyc2l0eSBvciBhdCB0aGUg MTE1dGggU3RyZWV0Ci0jIGFkZHJlc3MgZWZmZWN0aXZlIDEgSnVseSAyMDExLiAgVGhlIGVtYWls IGFkZHJlc3Mgc2hvdWxkIHN0aWxsIHdvcmssCi0jIGFzIHdlbGwgYXMgdGhlIHdlYnNpdGUgYW5k IEZUUCBhZGRyZXNzZXMsIGZvciB0aGUgZm9yZXNlZWFibGUgZnV0dXJlLgotIyBGb3IgbmV3IGRl dmVsb3BtZW50cywgYWxzbyBjaGVjazoKLSMKLSMgICAgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv fmZkYy9rZXJtaXQvCi0jCi0jIENvbnRyaWJ1dGlvbnMgZnJvbSBtYW55IG90aGVycy4gIFNwZWNp YWwgdGhhbmtzIHRvIEplZmYgQWx0bWFuIGZvciB0aGUKLSMgc2VjdXJlLWJ1aWxkIHRhcmdldHMs IFBldGVyIEVpY2hob3JuLCBhc3N5c3QgR21iSCwgZm9yIHRoZSBjb25zb2xpZGF0ZWQKLSMgSFAt VVggdGFyZ2V0cyBhbmQgdGhlICJ1bmluc3RhbGwiIHRhcmdldCwgdG8gUm9iZXJ0IExpcGUgZm9y IHRoZSB1cGRhdGVkCi0jIGFuZCBjb25zb2xpZGF0ZWQgU0NPIFVOSVggLyBPRFQgLyBPU1I1IHRh cmdldHMsIHRvIFJpYyBBbmRlcnNvbiBmb3IgdGhlCi0jIElSSVggNi54IHRhcmdldHMsIHRvIFNl dGggVGhlcmlhdWx0IGZvciBtYWpvciBpbXByb3ZlbWVudHMgdG8gdGhlCi0jIE1hYyBPUyBYIHRh cmdldHMsIGFuZCB0byBBbGV4ZXkgRG9rdWNoYWV2IGZvciBGcmVlQlNEIDkuMC4KLSMKLSMgQy1L ZXJtaXQgaXMgd3JpdHRlbiBhbmQgcHJvZHVjZWQgYnkgaGFuZCB3aXRob3V0IGFueSBhdXRvbWF0 ZWQgcHJvY2VkdXJlcwotIyBzdWNoIGFzIGF1dG9jb25mIC8gYXV0b21ha2UgLyBjb25maWd1cmUs IGFsdGhvdWdoIHNvbWUgb2YgdGhlIHRhcmdldHMgYmVsb3cKLSMgKGVzcGVjaWFsbHkgdGhlIGxp bnV4IHRhcmdldCkgaW5zcGVjdCB0aGUgZW52aXJvbm1lbnQgYW5kIG1ha2Ugc29tZQotIyBkZWNp c2lvbnMgaW4gdGhlIG1vc3QgcG9ydGFibGUgd2F5IHBvc3NpYmxlLiBUaGUgYXV0b21hdGVkIHRv b2xzIGFyZSBub3QKLSMgdXNlZCBiZWNhdXNlIChhKSBDLUtlcm1pdCBwcmVkYXRlcyB0aGVtLCBh bmQgKGIpIHRoZXkgYXJlIG5vdCBwb3J0YWJsZSB0bwotIyBhbGwgdGhlIHBsYXRmb3JtcyB3aGVy ZSBDLUtlcm1pdCBtdXN0IGJlIChvciBvbmNlIHdhcykgYnVpbHQsIGFuZCAoYykgdG8KLSMga2Vl cCBDLUtlcm1pdCBhcyBpbmRlcGVuZGVudCBhcyBwb3NzaWJsZSBmcm9tIGV4dGVybmFsIHRvb2xz IG92ZXIgd2hpY2gKLSMgd2UgaGF2ZSBubyBjb250cm9sLgotIwotIyBNb3N0IGVudHJpZXMgdXNl IHRoZSAieGVybWl0IiB0YXJnZXQsIHdoaWNoIHVzZXMgdGhlIHNlbGVjdCgpLWJhc2VkIENPTk5F Q1QKLSMgbW9kdWxlLCBja3VjbnMuYy4gIFRoZSAid2VybWl0IiB0YXJnZXQgdXNlcyB0aGUgb3Jp Z2luYWwgZm9yaygpLWJhc2VkIENPTk5FQ1QKLSMgbW9kdWxlLCBja3Vjb24uYywgd2hpY2ggaGFz IHNvbWUgZHJhd2JhY2tzIGJ1dCB3YXMgcG9ydGFibGUgdG8gZXZlcnkgVW5peAotIyB2YXJpYW50 IHdoZXRoZXIgaXQgaGFkIFRDUC9JUCBvciBub3QgKHNlbGVjdCgpIGlzIHBhcnQgb2YgdGhlIFRD UC9JUAotIyBsaWJyYXJ5LCB3aGljaCB3YXMgbm90IHN0YW5kYXJkIG9uIG9sZGVyIFVuaXhlcyku ICBJZiB5b3VyIHRhcmdldCBzdGlsbCB1c2VzCi0jIHRoZSAid2VybWl0IiB0YXJnZXQsIHBsZWFz ZSB0cnkgc3Vic3RpdHV0aW5nIHRoZSAieGVybWl0IiBvbmUgYW5kIGlmIGl0Ci0jIHdvcmtzLCBs ZXQgdXMga25vdyAobWFpbHRvOmtlcm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdSkuICBXaGVuIGNo YW5naW5nIGEKLSMgdGFyZ2V0IG92ZXIgZnJvbSB3ZXJtaXQgdG8geGVybWl0LCBhbHNvIHJlbW92 ZSAtRE5PTE9FQVJOLgotIwotIyBDQVJFRlVMOiBEb24ndCBwdXQgdGhlIGxvd2VyY2FzZSB3b3Jk ICJpZiIsICJkZWZpbmUiLCBvciAiZW5kIiBhcyB0aGUgZmlyc3QKLSMgd29yZCBhZnRlciB0aGUg IiMiIGNvbW1lbnQgaW50cm9kdWNlciBpbiB0aGUgbWFrZWZpbGUsIGV2ZW4gaWYgaXQgaXMKLSMg c2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuICBTb21lIHZlcnNpb25zIG9mICJtYWtlIiB1bmRlcnN0 YW5kIHRoZXNlIGFzCi0jIGRpcmVjdGl2ZXMuICBVcHBlcmNhc2UgbGV0dGVycyByZW1vdmUgdGhl IGRhbmdlciwgZS5nLiAiIyBJZiB5b3UgaGF2ZS4uLiIKLSMgCi0jIFdBUk5JTkc6IFRoaXMgaXMg YSBodWdlIG1ha2VmaWxlLiAgQWx0aG91Z2ggdGhpcyBpcyBsZXNzIGxpa2VseSBzaW5jZSB0aGUK LSMgdHVybiBvZiB0aGUgY2VudHVyeSwgc29tZSAibWFrZSIgcHJvZ3JhbXMgbWlnaHQgcnVuIG91 dCBvZiBtZW1vcnkuICBJZiB0aGlzCi0jIGhhcHBlbnMgdG8geW91LCBlZGl0IGF3YXkgdGhlIHBh cnRzIHRoYXQgZG8gbm90IGFwcGx5IHRvIHlvdXIgcGxhdGZvcm0gYW5kCi0jIHRyeSBhZ2Fpbi4K LSMKLSMgV0FSTklORyAyOiBJbiBtYW55IGNhc2VzIHRoaXMgZmlsZSBpbnZva2VzIGl0c2VsZiBy ZWN1cnNpdmVseSwgc29tZXRpbWVzCi0jIHNldmVyYWwgbGV2ZWxzIGRlZXAgKGFzIGluIHRoZSBM aW51eCB0YXJnZXRzKTsgaS5lLiBzb21lIHRhcmdldHMgYXJlIHVzZWQKLSMgYXMgJ3N1YnJvdXRp bmVzJyBvZiBvdGhlciB0YXJnZXRzLCB3aXRoIHBhcmFtZXRlcnMgcGFzc2VkIGJ5IHNldHRpbmcK LSMgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgRm9yIHRoYXQgcmVhc29uLCBkb24ndCB1c2UgJ21h a2UgLWUnLgotIwotIyBDZXJ0YWluIFVOSVggdmFyaWF0aW9ucyBoYXZlIHRoZWlyIG93biBzZXBh cmF0ZSBtYWtlZmlsZXM6Ci0jICAuIEZvciAyLjEwIG9yIDIuMTEgQlNEIG9uIHRoZSBERUMgUERQ LTExLCB1c2UgY2t1YnMyLm1hay4KLSMgIC4gRm9yIFBsYW4gOSwgdXNlIGNrcGtlci5tay4KLSMK LSMgU2VwYXJhdGUgYnVpbGQgcHJvY2VkdXJlcyBhcmUgcHJvdmlkZWQgbm9uLVVOSVggcGxhdGZv cm1zOiBWTVMsIFZPUywKLSMgQU9TL1ZTLCBldGMuICBTZWUgdGhlIGNrYWFhYS50eHQgZmlsZSBv ciB0aGUgS2VybWl0IHdlYnNpdGUgZm9yIGRldGFpbHMuCi0jCi0jCi0jIERJUkVDVElPTlMgRk9S IFVOSVgKLSMKLSMgUmVuYW1lIHRoaXMgZmlsZSB0byAibWFrZWZpbGUiIG9yICJNYWtlZmlsZSIg aWYgbmVjZXNzYXJ5LiAgUGljayBvdXQgdGhlCi0jIGVudHJ5IG1vc3QgYXBwcm9wcmlhdGUgZm9y IHlvdXIgVU5JWCB2ZXJzaW9uIGZyb20gdGhlIGxpc3QgYmVsb3cgYW5kIHRoZW4KLSMgZ2l2ZSB0 aGUgYXBwcm9wcmlhdGUgIm1ha2UiIGNvbW1hbmQsIGZvciBleGFtcGxlICJtYWtlIGFpeCIsICJt YWtlIG1hY29zeCIsCi0jICJtYWtlIGxpbnV4Ii4gIElmIHlvdSBleHBlcmllbmNlIGFueSBkaWZm aWN1bHRpZXMgd2l0aCB0aGUgYnVpbGQgcHJvY2VkdXJlLAotIyB0aGVuIHBsZWFzZSBhbHNvIHJl YWQgYW55IGNvbW1lbnRzIHRoYXQgYWNjb21wYW55IHRoZSBtYWtlIGVudHJ5IGl0c2VsZgotIyAo c2VhcmNoIGZvciB0aGUgbWFrZSBlbnRyeSBuYW1lIG9uIHRoZSBsZWZ0IG1hcmdpbikuCi0jCi0j IE90aGVyIHRhcmdldHM6Ci0jICAnbWFrZSBpbnN0YWxsJyBpcyBhbiBpbnN0YWxsYXRpb24gc2Ny aXB0IChyZWFkIGFjY29tcGFueWluZyBjb21tZW50cyEpLgotIyAgJ21ha2UgdW5pbnN0YWxsJyB1 bmRvZXMgJ21ha2UgaW5zdGFsbCcgKHJlYWQgYWNjb21wYW55aW5nIGNvbW1lbnRzISkuCi0jICAn bWFrZSBjbGVhbicgcmVtb3ZlcyBpbnRlcm1lZGlhdGUgYW5kIG9iamVjdCBmaWxlcy4KLSMgICdt YWtlIHNob3cnIHRlbGxzIHRoZSBkZWZhdWx0IGluY2x1ZGUgYW5kIGxpYiBwYXRocyBmb3Igc2Vj dXJlIGJ1aWxkcy4KLSMKLSMgSU1QT1JUQU5UOgotIyAgIEZvciBtb3JlIGRldGFpbGVkIGluc3Rh bGxhdGlvbiBpbnN0cnVjdGlvbnMsIHJlYWQgdGhlIGZpbGVzIGNrdWlucy50eHQKLSMgICBhbmQg Y2tjY2ZnLnR4dCwgYWxzbyBhdmFpbGFibGUgYXQgdGhlIEtlcm1pdCB3ZWJzaXRlIGluIEhUTUwg Zm9ybToKLSMgICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKLSMg ICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwKLSMKLSMgIEZvciBk ZXNjcmlwdGlvbnMgb2Yga25vd24gcHJvYmxlbXMgYW5kIGxpbWl0YXRpb25zLAotIyAgIHJlYWQg dGhlIGZpbGVzIGNrY2J3ci50eHQgYW5kIGNrdWJ3ci50eHQgKHRoZSAiYmV3YXJlIGZpbGVzIikg b3I6Ci0jICAgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sCi0jICAg aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sCi0jCi0jIE1vc3QgdGFy Z2V0cyBidWlsZCBDLUtlcm1pdCB3aXRoIGl0cyBzeW1ib2wgdGFibGUgaW5jbHVkZWQuICBUbyBy ZWR1Y2UgdGhlCi0jIHNpemUgb2YgdGhlIGV4ZWN1dGFibGUgcHJvZ3JhbSwgYWRkICJMTktGTEFH Uz0tcyIgdG8gdGhlIGVuZCBvZiB5b3VyICdtYWtlJwotIyBjb21tYW5kIG9yIHRvIHRoZSBtYWtl ZmlsZSBlbnRyeSwgb3IgJ3N0cmlwJyB0aGUgZXhlY3V0YWJsZSBhZnRlcgotIyBidWlsZGluZy4g IFRvIGZ1cnRoZXIgcmVkdWNlIHRoZSBzaXplIGFmdGVyIGJ1aWxkaW5nLCB1c2UgJ21jcyAtZCcg aWYgeW91cgotIyBVbml4IHZlcnNpb24gaGFzIHN1Y2ggYSBjb21tYW5kLiAgRm9yIGZ1cnRoZXIg ZGV0YWlscyBvbiBzaXplIHJlZHVjdGlvbiwgcmVhZAotIyBja2NjZmcudHh0IHRvIGZpbmQgb3V0 IGhvdyB0byByZW1vdmUgZmVhdHVyZXMgdGhhdCB5b3UgZG9uJ3QgbmVlZC4KLSMKLSMgVENQL0lQ IG5ldHdvcmtpbmcgc3VwcG9ydDogSWYgeW91ciBDLUtlcm1pdCB2ZXJzaW9uIGRvZXMgbm90IGlu Y2x1ZGUgVENQL0lQCi0jIG5ldHdvcmtpbmcsIGJ1dCB5b3VyIFVOSVggc3lzdGVtIGRvZXMsIHRy eSBhZGRpbmcgLURUQ1BTT0NLRVQgdG8gdGhlIENGTEFHUwotIyBvZiB5b3VyIG1ha2VmaWxlIGVu dHJ5LiAgSWYgdGhhdCBkb2Vzbid0IHdvcmssIGxvb2sgYXQgc29tZSBvZiB0aGUgb3RoZXIKLSMg dGFyZ2V0cyB0aGF0IGluY2x1ZGUgdGhpcyBmbGFnIGZvciBpZGVhcyBhYm91dCB3aGF0IGxpYnJh cmllcyBtaWdodCBuZWVkIHRvCi0jIGJlIGluY2x1ZGVkICh0eXBpY2FsbHkgLWxzb2NrZXQgYW5k L29yIC1sQlNEIGFuZC9vciAtbG5zbCBhbmQvb3IgLWxpbmV0KS4KLSMgTk9URTogSW4gc29tZSBj YXNlcyAob2xkIHZlcnNpb25zIG9mIFNDTyBvciBIUC1VWCksIHlvdSBtaWdodCBuZWVkIG5vdCBv bmx5Ci0jIGEgQyBjb21waWxlciwgYnV0IGFsc28gYSAiVENQL0lQIGRldmVsb3BlcnMga2l0IiBm b3IgdGhlIHJlcXVpcmVkIG9iamVjdAotIyBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcy4KLSMK LSMgUGxlYXNlIHJlcG9ydCBtb2RpZmljYXRpb25zLCBmYWlsdXJlcyAocHJlZmVyYWJseSB3aXRo IGZpeGVzKSBvciBzdWNjZXNzZXMKLSMgdG8gdGhlIGF1dGhvciwgZmRjQGNvbHVtYmlhLmVkdS4K LSMKLSMgVEFSR0VUUyBGT1IgRElGRkVSRU5UIFVOSVggUExBVEZPUk1TIEFORCBWRVJTSU9OUzoK LSMKLSMgKyBNYXJrcyB0aG9zZSB0aGF0IGhhdmUgYmVlbiBidWlsdCBzdWNjZXNzZnVsbHkgZm9y IEMtS2VybWl0IDkuMCBvciBsYXRlci4KLSMgLSBUaG9zZSB0aGF0IG9uY2UgYnVpbHQgT0sgYnV0 IG5vIGxvbmdlciBkbyAoZS5nLiB0b28gYmlnKS4KLSMgPyBUaG9zZSB0aGF0IHdvcmtlZCBpbiBh IHByZXZpb3VzIHZlcnNpb24gYnV0IGhhdmUgbm90IGJlZW4gdGVzdGVkIHJlY2VudGx5LgotIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTb21lIGNvbW1vbmx5IHVzZWQgdGFyZ2V0czoK LSMKLSMgKyAibWFrZSBsaW51eCIgc2hvdWxkIHdvcmsgZm9yIGFueSB2ZXJzaW9uIG9mIExpbnV4 IG9uIGFueSBoYXJkd2FyZS4KLSMgKyAibWFrZSBsaW51eCtzc2wiIGRpdHRvLCB3aXRoIE9wZW5T U0wgc2VjdXJpdHkgYWRkZWQuCi0jICsgIm1ha2UgbGludXgra3JiNSIgZGl0dG8sIHdpdGggS2Vy YmVyb3MgNSBzZWN1cml0eSBhZGRlZC4KLSMgKyAibWFrZSBsaW51eCtrcmI1K3NzbCIgTGludXgg d2l0aCBPcGVuU1NMIGFuZCBLZXJiZXJvcyA1LgotIyArICJtYWtlIG5ldGJzZCIsIE5ldEJTRCwg YW55IHZlcnNpb24uCi0jICsgIm1ha2UgbmV0YnNkK3NzbCIsIE5ldEJTRCB3aXRoIE9wZW5TU0wg MC45Ljcgb3IgbGF0ZXIuCi0jICsgIm1ha2UgbmV0YnNkK2tyYjUiLCBOZXRCU0Qgd2l0aCBLZXJi ZXJvcyA1LgotIyArICJtYWtlIG5ldGJzZCtrcmI1K3NzbCIsIE5ldEJTRCB3aXRoIEtlcmJlcm9z IDUgYW5kIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIuCi0jID8gIm1ha2UgZnJlZWJzZDEiIGZvciBG cmVlQlNEIDEueAotIyA/ICJtYWtlIGZyZWVic2QyIiBmb3IgRnJlZUJTRCAyLngKLSMgKyAibWFr ZSBmcmVlYnNkMyIgZm9yIEZyZWVCU0QgMy54Ci0jID8gIm1ha2UgZnJlZWJzZDQiIGZvciBGcmVl QlNEIDQuMAotIyArICJtYWtlIGZyZWVic2QiLCBGcmVlQlNEIDQuMSBvciBsYXRlci4KLSMgKyAi bWFrZSBmcmVlYnNkK3NzbCIsIEZyZWVCU0QgNS4wIG9yIGxhdGVyIHdpdGggT3BlblNTTCAwLjku NyBvciBsYXRlci4KLSMgKyAibWFrZSBvcGVuYnNkIiwgT3BlbkJTRCAyLjMgb3IgbGF0ZXIuCi0j ICsgIm1ha2Ugb3BlbmJzZCtzc2wiLCBPcGVuQlNEIDIuMyBvciBsYXRlciB3aXRoIE9wZW5TU0wg MC45Ljcgb3IgbGF0ZXIuCi0jICsgIm1ha2UgbWlyYnNkIiwgTWlyQlNELgotIyArICJtYWtlIG1p cmJzZCtzc2wiLCBNaXJCU0Qgd2l0aCBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLgotIyArICJtYWtl IG1hY29zeCIgc2hvdWxkIHdvcmsgZm9yIGFueSBNYWMgT1MgWCB2ZXJzaW9uIDEwLjMuOSBvciBs YXRlci4KLSMgKyAibWFrZSBtYWNvc3gra3JiNStvcGVuc3NsIiBNYWMgT1MgWCAxMC4zLjkgb3Ig bGF0ZXIgKyBLZXJiZXJvcyBWICsgT3BlblNTTC4KLSMgKyAibWFrZSBhaXgiIHNob3VsZCB3b3Jr IGZvciBhbnkgdmVyc2lvbiBvZiBBSVggNC4yIG9yIGxhdGVyLgotIyArICJtYWtlIGFpeGciIHNo b3VsZCB3b3JrIGZvciBhbnkgdmVyc2lvbiBvZiBBSVggNC4yIG9yIGxhdGVyLCB1c2luZyBnY2Mu Ci0jICsgIm1ha2UgYWl4K3NzbCIgZGl0dG8sIHdpdGggT3BlblNTTCAoc3BlY2lmeWluZyBTU0xM SUIgYW5kIFNTTElOQykKLSMgKyAibWFrZSBhaXgraWJtc3NsIiBkaXR0bywgd2l0aCBJQk0gT3Bl blNTTAotIyArICJtYWtlIHNvbGFyaXM5IiwgIm1ha2Ugc29sYXJpczEwIiBmb3IgU29sYXJpcyA5 IG9yIDEwIHdpdGggU3VuIGNjLgotIyArICJtYWtlIHNvbGFyaXM5ZyIsICJtYWtlIHNvbGFyaXMx MGciIGZvciBTb2xhcmlzIDkgb3IgMTAgd2l0aCBnY2MuCi0jICsgIm1ha2Ugc29sYXJpczExIiBm b3IgU29sYXJpcyAxMSB3aXRoIFN1biBDQwotIyArICJtYWtlIHNvbGFyaXMxMWciIGZvciBTb2xh cmlzIDExIHdpdGggZ2NjCi0jICsgIm1ha2Ugc2NvX29zcjYwMCIgZm9yIFNDTyBPcGVuU2VydmVy IDYuMC4wLgotIwotIyBGb3Igb3RoZXIgY3VycmVudCBPU3Mgc3VjaCBhcyBTb2xhcmlzLCBIUC1V WCwgYW5kIFNDTyB0aGVyZSBhcmUgc2VwYXJhdGUKLSMgdGFyZ2V0cyBmb3IgZGlmZmVyZW50IGNv bWJpbmF0aW9ucyBvZiBPUyB2ZXJzaW9uIGFuZCBjb21waWxlcjsgc2VlIHRoZQotIyBjb21wbGV0 ZSBsaXN0LiAgRm9yIG9sZGVyIE9TJ3Mgc2VlIHRoZSBjb21wbGV0ZSBsaXN0LiAgSWYgYW4gb2xk IHRhcmdldAotIyBkb2Vzbid0IHdvcmsgaW4gdGhpcyByZWxlYXNlIG9mIEMtS2VybWl0IHlvdSBj YW4gZ2V0IGEgcHJldmlvdXMgcmVsZWFzZSBmcm9tCi0jIHRoZSBLZXJtaXQgRlRQIHNpdGU6IGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0LwotIwotIyBTRUNVUkUgVEFSR0VUUyAodmVy c2lvbnMgdGhhdCBzdXBwb3J0IGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0aW9uKQotIyAgYXJl IGRlc2NyaWJlZCBhZnRlciB0aGUgZm9sbG93aW5nIGxpc3QuICBTZWFyY2ggZm9yICoqKioqKiog YmVsb3cuCi0jCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvbXBsZXRlIGxpc3Qg KGFscGhhYmV0aWNhbCk6Ci0jID8gZm9yIDM4NkJTRCAoSm9saXgpIDAuMCwgMC4xLCAibWFrZSAz ODZic2QiIChzZWUgY29tbWVudHMgaW4gZW50cnkpLAotIyAgICAgb3IgKHByZWZlcmFibHksIGlm IGl0IHdvcmtzKSAibWFrZSBic2Q0NCIgb3IgIm1ha2UgYnNkNDRjIi4KLSMgPyBmb3IgQWNvcm4g UklTQ2lYLCAibWFrZSByaXNjaXgiIG9yICJtYWtlIHJpc2NpeC1nY2MiCi0jID8gZm9yIEFsbGlh bnQgRlgvOCB3aXRoIENvbmNlbnRyaXggNC4xIG9yIGxhdGVyLCAibWFrZSBic2RsY2siCi0jID8g Zm9yIEFsdG9zIDQ4NiwgNTg2LCA5ODYgd2l0aCBYZW5peCAzLjAsICJtYWtlIGFsdG9zIgotIyA/ IGZvciBBbHRvcyBBQ1M2ODAwMCwgOE1oeiA2ODAwMCwgVU5JWCBTeXN0ZW0gMyBSZWwgMiwgNTEy SywgIm1ha2UgYWx0b3MzIgotIyA/IGZvciBBbWRhaGwgVVRTIDIuNCBvbiBJQk0gMzcwIHNlcmll cyAmIGNvbXBhdGlibGUgbWFpbmZyYW1lcywgIm1ha2UgdXRzMjQiCi0jID8gZm9yIEFtZGFobCBV VFNWIElCTSAzNzAgc2VyaWVzICYgY29tcGF0aWJsZSBtYWluZnJhbWVzLCAibWFrZSB1dHN2Igot IyA/IGZvciBBbWRhaGwgVVRTViBJQk0gMzcwIHNlcmllcyBtYWluZnJhbWVzIHdpdGggVENQL0lQ LCAibWFrZSB1dHN2dGNwIgotIyA/IGZvciBBbWRhaGwgbWFpbmZyYW1lcyB3aXRoIFVOSVggU3lz dGVtIFYgUiA1LjIuNmIgNTgwLCAibWFrZSBzeXMzIgotIyA/IGZvciBBcG9sbG8gQWVnaXMgOS54 LCBET01BSU4vSVggOS54LCAibWFrZSBhZWdpcyIKLSMgICAgKExhc3QgdGVzdGVkIGluIEMtS2Vy bWl0IDVBKDE4OSkpCi0jID8gZm9yIEFwb2xsbyBET01BSU4vSVgsIGlmIHRoZSBhYm92ZSBmYWls cywgdHJ5ICJtYWtlIGFwb2xsb2JzZCIKLSMgPyBmb3IgQXBvbGxvIHdpdGggU1IxMC4wIG9yIGxh dGVyLCBCU0QgZW52aXJvbm1lbnQsICJtYWtlIHNyMTAtYnNkIgotIyA/IGZvciBBcG9sbG8gd2l0 aCBTUjEwLjAgb3IgbGF0ZXIsIFN5c3RlbSBWIGVudmlyb25tZW50LCAibWFrZSBzcjEwLXM1cjMi Ci0jID8gZm9yIEFwcGxlIE1hY2ludG9zaCBJSSB3aXRoIEEvVVggcHJlLTMuMCwgIm1ha2UgYXV4 IiwgImF1eGdjYyIgb3IgImF1eHVmcyIKLSMgPyBmb3IgQXBwbGUgTWFjaW50b3NoIHdpdGggQS9V WCAzLjAgYW5kIGdjYywgIm1ha2UgYXV4M2djYyIgb3IgYXV4M2djY2MKLSMgPyBmb3IgQXBwbGUg UG93ZXJNYWMgd2l0aCBNa0xpbnV4LCAibWFrZSBta2xpbnV4IiAocmVhZCBMaW51eCBlbnRyeSBm aXJzdCkKLSMgPyBmb3IgQXBwbGUgUG93ZXJNYWMgd2l0aCBMaW51eFBQQywgIm1ha2UgbGludXhw cGMiCi0jID8gZm9yIEFwcGxlIE1hY2ludG9zaCB3aXRoIE1pbml4IDEuNS4xMCwgIm1ha2UgbWlu aXg2OGsiIG9yICJtYWtlIG1pbml4YzY4IgotIyA/IGZvciBBcHBsZSBNYWNpbnRvc2ggd2l0aCBN YWMgT1MgWCAxLjAgKFJoYXBzb2R5KSwgIm1ha2UgbWFjb3N4MTAiCi0jICAgICAobm8gY3Vyc2Vz KSwgIm1ha2UgbWFjb3N4MTBjIiAoY3Vyc2VzKSwgb3IgIm1ha2UgbWFjb3N4MTBuYyIgKG5jdXJz ZXMpLgotIyAgICAgT3IgIm1ha2UgbWFjb3N4MTBuY3giIChuY3Vyc2VzIGJ1dCAibWFrZSBtYWNv c3gxMG5jIiBkb2Vzbid0IHdvcmspLgotIyA/IGZvciBBcHBsZSBNYWNpbnRvc2ggd2l0aCBNYWMg T1MgWCAxMC4yLCAibWFrZSBtYWNvc3gxMDJuYyIgKG5jdXJzZXMpLgotIyA/IGZvciBBcHBsZSBN YWNpbnRvc2ggd2l0aCBNYWMgT1MgWCAxMC4zLCAibWFrZSBtYWNvc3gxMDMiCi0jID8gZm9yIEFw cGxlIE1hY2ludG9zaCB3aXRoIE1hYyBPUyBYIDEwLjMuOSBvciBsYXRlciwgIm1ha2UgbWFjb3N4 IgotIyA/IGZvciBBcml4IFN5c3RlbSA5MCB3aXRoIEFUJlQgU1ZSMywgIm1ha2Ugc3lzNXIzbmEi Ci0jIC0gZm9yIEFUJlQgNjMwMCB3aXRoIElOL2l4LCAibWFrZSBzeXM1IgotIyAtIGZvciBBVCZU IDYzMDAgUExVUywgIm1ha2UgYXR0NjMwMCIgb3IgKHdpdGggbm8gZGVidWdnaW5nKSAibWFrZSBh dHQ2MzAwbmQiCi0jID8gZm9yIEFUJlQgNjM4NiBXR1MgVU5JWCBQQywgIm1ha2Ugc3lzNXIzIgot IyA/IGZvciBBVCZUIDNCMiwgM0IyMCBzeXN0ZW1zLCAibWFrZSBhdHQzYjIiLgotIyAgIGZvciBB VCZUIDNCMSwgNzMwMCBVTklYIFBDIChzZWUgbm90ZXMgd2l0aCB0aGUgZW50cmllcyk6Ci0jICAg ICBJbiBDLUtlcm1pdCA3LjAsIG9ubHkgdGhlIGdjYyBlbnRyaWVzIHdvcms6Ci0jID8gICAibWFr ZSBzeXMzdXBjZyIsICJtYWtlIHN5czN1cGNnYyIsICJtYWtlIGF0dDM1MWdtIgotIyAgICBUaGUg b3RoZXJzIGZhaWwgd2l0aCAidG9vIG1hbnkgZGVmaW5lcyIgKHVzdWFsbHkgaW4gY2t1dXNyLmgp OgotIyAtICAgIm1ha2Ugc3lzM3VwYyIsICJtYWtlIHN5czN1cGNvbGQiLCAibWFrZSBzeXMzdXBj YyIsICJtYWtlIHN5czN1cGN4IiwKLSMgICAgICAgIm1ha2Ugc3lzM3VwY20iLCAibWFrZSBhdHQz NTFtIgotIyA/IGZvciBBVCZUIFN5c3RlbSBJSUkvU3lzdGVtIFYgUjIgb3IgZWFybGllciwgIm1h a2Ugc3lzMyIgb3IgIm1ha2Ugc3lzM25pZCIKLSMgPyBmb3IgQVQmVCBTeXN0ZW0gSUlJL1N5c3Rl bSBWIHdpdGggSG9uZXkgRGFuQmVyIFVVQ1AsICJtYWtlIHN5czNoZGIiCi0jID8gZm9yIEFUJlQg U3lzdGVtIFYgb24gREVDIFZBWCwgIm1ha2Ugc3lzMyIgb3IgIm1ha2Ugc3lzNXIzIgotIyA/IGZv ciBBVCZUIFN5c3RlbSBWIFIzLCB1c2UgIm1ha2Ugc3lzNXIzIiBvciAibWFrZSBzeXM1cjNjIgot IyA/IGZvciBBVCZUIFN5c3RlbSBWLzM4NiBSMy4yIGJ1aWx0IG9uIEludGVyYWN0aXZlIDQuMS4x LCAibWFrZSBzeXM1cjMyaXMiLgotIyA/IGZvciBBVCZUIFN5c3RlbSBWLzM4NiBSMzIwLjAgVmVy c3lzcyBTeXN0ZW1zLCB1c2UgIm1ha2Ugc3lzNXIzIgotIyAgICAgb3IgIm1ha2Ugc3lzNXIzYyIu Ci0jID8gZm9yIEFUJlQgU3lzdGVtIFYgUjQsICJtYWtlIHN5czVyNCIsICJtYWtlIHN5czVyNHN4 Iiwgb3IgIm1ha2Ugc3lzNXI0bngiLAotIyAgICAgb3IgaWYgdGhlIEFOU0kgQyBmdW5jdGlvbiBw cm90b3R5cGluZyBtYWtlcyB0cm91YmxlLCBhZGQgLUROT0FOU0ksCi0jICAgICBhcyBpbiAic3lz NXI0c3huYSIgZW50cnkKLSMgPyBmb3IgQVQmVCAoVVNMKSBTeXN0ZW0gViBSNC4yIHVzZSB0aGUg c3lzNXI0KiBlbnRyaWVzLgotIyA/IGZvciBBdGFyaSBGYWxjb24gd2l0aCBNaU5ULCAibWFrZSBw b3NpeCIKLSMgPyBmb3IgQXRhcmkgU1Qgd2l0aCBNaW5peCBTVCAxLjUuMTAuMywgIm1ha2UgbWlu aXg2OGsiIG9yICJtYWtlIG1pbml4YzY4IgotIyA/IGZvciBCQk4gQy83MCB3aXRoIElPUyAyLjAs ICJtYWtlIGM3MCIKLSMgPyBmb3IgQmVCb3ggd2l0aCBCZSBPUyAxLnggRFI3LCAibWFrZSBiZWJv eGRyNyIKLSMgICAgIENvbXBpbGVzIE9LIGJ1dCBkb2Vzbid0IGxpbmsgd2l0aCBkZWZhdWx0IGxp bmtlciB3aGljaCBpcyBsaW1pdGVkIHRvIDY0Sy4KLSMgICAgIExpbmtzIE9LIHdpdGggIkNvZGUg V2FycmlvciBHb2xkIi4gIE1hbnkgaGFja3MgaW4gdGhlIHNvdXJjZSBjb2RlIG5lZWQKLSMgICAg IHRvIGJlIHJlbW92ZWQgd2hlbiBEUjggYW5kIGxhdGVyIGNvbWUgb3V0LgotIyAgICAgKExhc3Qg dGVzdGVkIGluIEMtS2VybWl0IDYuMCkKLSMgLSBmb3IgQmVCb3ggd2l0aCBCZSBPUyAxLnggRFI4 LCAibWFrZSBiZWJveCIKLSMgICAgIChOZWVkZWQgZnVuY3Rpb25zIG1pc3NpbmcgZnJvbSBvcGVy YXRpbmcgc3lzdGVtIGFuZC9vciBub3Qgd29ya2luZy4pCi0jIC0gZm9yIEJlbGwgTGFicyBVTklY IFZlcnNpb24gNiAoNnRoIEVkaXRpb24pLCB0aGVyZSBpcyBubyBtYWtlZmlsZSBlbnRyeS4KLSMg PyBmb3IgQmVsbCBMYWJzIFVOSVggVmVyc2lvbiA3ICg3dGggRWRpdGlvbiksICJtYWtlIHY3IiAo YnV0IHNlZSBub3RlcyBiZWxvdykKLSMgICAgKGxhc3QgYnVpbHQgc3VjY2Vzc2Z1bGx5IGluIEMt S2VybWl0IDVBMTg4KQotIyA/IGZvciBCZWxsIExhYnMgUmVzZWFyY2ggVU5JWCBWZXJzaW9uIDEw LCAibWFrZSBiZWxsdjEwIgotIyAgICAobGFzdCBidWlsdCBzdWNjZXNzZnVsbHkgaW4gQy1LZXJt aXQgNi4wKQotIyA/IGZvciBCZWxsIExhYnMgLyBMdWNlbnQgUGxhbiA5LCB1c2Ugc2VwYXJhdGUg bWFrZWZpbGUgY2twa2VyLm1rOgotIyAgICBjYW4gYmUgYnVpbHQgZm9yIEludGVsLCBNSVBTLCA2 ODB4MCwgYW5kIFBvd2VyUEMgKGxhc3QgYnVpbHQgQy1LZXJtaXQgNy4wKQotIyA/IGZvciBCU0RJ IEJTRC8zODYgMS54LCAibWFrZSBic2RpIgotIyA/IGZvciBCU0RJIEJTRC9PUyAyLngsICJtYWtl IGJzZGkyIgotIyA/IGZvciBCU0RJIEJTRC9PUyAzLjAgb3IgMy4xLCAibWFrZSBic2RpMyIKLSMg PyBmb3IgQlNESSBCU0QvT1MgNC54LCAibWFrZSBic2RpNCIKLSMgPyBmb3IgQlNESSBCU0QvT1Mg NC54LCB0byBidWlsZCBhIGJpbmFyeSB0aGF0IGFsc28gd29ya3Mgb24gRnJlZUJTRCwKLSMgICAg ICJtYWtlIGJzZGl4Ii4KLSMgPyBmb3IgQmVya2VsZXkgVW5peCAyLjQsICJtYWtlIHY3IiAoYnV0 IHJlYWQgdjcgbWF0ZXJpYWwgYmVsb3cpCi0jID8gZm9yIEJlcmtlbGV5IFVuaXggMi45IChERUMg UERQLTExIG9yIFByby0zeHgpLCAibWFrZSBic2QyOSIKLSMgLSBmb3IgQmVya2VsZXkgVW5peCAy LjEwLCB1c2UgY2t1YnMyLm1hayAoYSBzZXBhcmF0ZSBtYWtlZmlsZSkKLSMgLSBmb3IgQmVya2Vs ZXkgVW5peCAyLjExLCB1c2UgY2t1YnMyLm1hayAoYSBzZXBhcmF0ZSBtYWtlZmlsZSkKLSMgICAg IFRoaXMgbWFrZWZpbGUgaXMgdG9vIGJpZy4gIFJlYWQgdGhlIGluc3RydWN0aW9ucyBpbiBja3Vi czIubWFrLgotIyAgICAgIm1ha2UgLWYgY2t1YnMyLm1hayBic2QyMTAiIG9yICJtYWtlIC1mIGNr dWJzMi5tYWsgYnNkMjExIi4KLSMgICAgIChsYXN0IGJ1aWx0IHN1Y2Nlc3NmdWxseSBpbiBDLUtl cm1pdCA2LjAgLSBsYXRlciB2ZXJzaW9ucyB0b28gYmlnKQotIyA/IGZvciBCZXJrZWxleSBVbml4 IDIuMTEgIm1ha2UgLWYgY2t1YnMyLm1hayBic2QyMTBub2ljcCIgKG5vIGNvbW1hbmQgcGFyc2Vy KQotIyA/IGZvciBCZXJrZWxleSBVbml4IDQuMSwgIm1ha2UgYnNkNDEiCi0jID8gZm9yIEJlcmtl bGV5IFVuaXggNC4yIG9uIFZBWCwgIm1ha2UgYnNkNDIiIG9yICJtYWtlIGJzZDQyYyIKLSMgPyBm b3IgQmVya2VsZXkgVW5peCA0LjIgb3IgNC4zIHdpdGggSG9uZXlEYW5CZXIgVVVDUCwgIm1ha2Ug YnNkaGRiIgotIyA/IGZvciBCZXJrZWxleSBVbml4IDQuMyBvbiBWQVgsICJtYWtlIGJzZDQzIiwg Im1ha2UgYnNkNDNuYyIuCi0jID8gZm9yIEJlcmtlbGV5IFVuaXggNC4zIG9uIFZBWCwgbm8gbmV0 d29ya2luZyAibWFrZSBic2Q0M25vbmV0LgotIyA/IGZvciBCZXJrZWxleSBVbml4IDQuMyB3aXRo b3V0IGFjdWNudHJsIHByb2dyYW0sICJtYWtlIGJzZDQyIiBvciAiYnNkNDJjIgotIyAgICAgTk9U RTogYWxsIHRoZSBDLUtlcm1pdCA3LjAgZnVsbCBidWlsZHMgZm9yIG9sZCBCU0RzIGZhaWwgd2l0 aAotIyAgICAgInRvbyBtYW55IGRlZmluZXMiIGluIENQUCwgZXZlbiBvbiBiaWcgYXJjaGl0ZWN0 dXJlcyBsaWtlIFZBWC4gIFRoaXMKLSMgICAgIGNhbiBiZSB3b3JrZWQgYXJvdW5kIHdpdGggYSBj bGV2ZXIgcnVzZS4gIFNlZSBjb21tZW50cyBhdCB0YXJnZXQuCi0jID8gZm9yIEJlcmtlbGV5IFVu aXggNC4zLCBjb21tYW5kLWxpbmUgb25seSwgIm1ha2UgYnNkbSIuCi0jID8gZm9yIEJlcmtlbGV5 IFVuaXggNC4zLVRhaG9lLCBzYW1lIGFzIDQuMyBCU0QKLSMgPyBmb3IgQmVya2VsZXkgVW5peCA0 LjMtUmVubywgIm1ha2UgYnNkNDMiIG9yICJtYWtlIGJzZDQ0IiBvciAibWFrZSBic2Q0NGMiCi0j ID8gZm9yIEJlcmtlbGV5IFVuaXggNC4zLUNhcnNvbiBDaXR5LCAibWFrZSBic2Q0NCIgb3IgIm1h a2UgYnNkNDRjIgotIyA/IGZvciBCZXJrZWxleSBVbml4IDQuNC1OZXR3b3JraW5nLzIgb3IgLUFs cGhhLCAibWFrZSBic2Q0NCIgb3IgIm1ha2UgYnNkNDRjIgotIyA/IGZvciBCZXJrZWxleSBVbml4 IDQuNCwgIm1ha2UgYnNkNDQiIG9yICJtYWtlIGJzZDQ0YyIKLSMgPyBmb3IgQmVya2VsZXkgVW5p eCA0LjQtTGl0ZSwgIm1ha2UgYnNkNDQiIG9yICJtYWtlIGJzZDQ0YyIKLSMgPyBmb3IgQnVsbCBE UFgvMiB3aXRoIEJPUy9YLCAibWFrZSBidWxsZHB4MiIKLSMgPyBmb3IgQ2FkbXVzLCAibWFrZSBz eXMzIgotIyAgIGZvciBDYWxkZXJhLCBzZWUgU0NPLCBMaW51eC4KLSMgPyBmb3IgQ2FsbGFuIFVu aXN0YXIsICJtYWtlIHN5czMiCi0jID8gZm9yIENEQyBWWC9WRSA1LjIuMSBTeXN0ZW0gViBlbXVs YXRpb24sICJtYWtlIHZ4dmUiCi0jID8gZm9yIENoYXJsZXMgUml2ZXIgRGF0YSBTeXN0ZW1zIFVu aXZlcnNlIDY4MHgwIHdpdGggVU5PUyA5LjIsIG1heWJlCi0jICAgICBhbHNvIG90aGVyIFVOT1Mg dmVyc2lvbnMsICJtYWtlIGNyZHMiCi0jID8gZm9yIENJRSBTeXN0ZW1zIDY4MC8yMCB3aXRoIFJl Z3VsdXMsICJtYWtlIGNpZSIKLSMgPyBmb3IgQ29tbW9kb3JlIEFtaWdhIDMwMDBVWCBTeXMgViBS NCwgIm1ha2Ugc3lzNXI0c3giCi0jID8gZm9yIENvbW1vZG9yZSBBbWlnYSAzMDAwVVggU3lzIFYg UjQgYW5kIFRDUC9JUCwgIm1ha2Ugc3ZyNGFtaWdhbmV0IgotIyA/IGZvciBDb21tb2RvcmUgQW1p Z2Egd2l0aCBNaW5peCAxLjUuMTAsICJtYWtlIG1pbml4NjhrIiBvZiAibWFrZSBtaW5peGM2OCIK LSMgPyBmb3IgQ29uY3VycmVudC9NYXNzY29tcCB3aXRoIFJUVSA0LjAgb3IgbGF0ZXIsIEJTRCBl bnZpcm9ubWVudCwgIm1ha2UKLSMgICAgIHJ0dWJzZCIsICJtYWtlIHJ0dWJzZDIiLCAibWFrZSBy dHVic2QzIiAoZGVwZW5kaW5nIG9uIHdoZXJlIG5kaXIuaAotIyAgICAgaXMgc3RvcmVkLCBzZWUg ZW50cmllcyBiZWxvdykuCi0jID8gZm9yIENvbmN1cnJlbnQvTWFzc2NvbXAgd2l0aCBSVFUgNC4w IG9yIGxhdGVyLCBTeXN0ZW0gViBSMiwgIm1ha2UgcnR1czUiCi0jID8gZm9yIENvbmN1cnJlbnQg KFBlcmtpbi1FbG1lcikgMzIwMCBzZXJpZXMsICJtYWtlIHN5czUiLgotIyA/IGZvciBDb25jdXJy ZW50IChQZXJraW4tRWxtZXIpIDMyMDAgc2VyaWVzIHdpdGggPGRpcmVudC5oPiwgIm1ha2UgY2Nv cDEiCi0jID8gZm9yIENvbmN1cnJlbnQgUG93ZXJNQVggT1MgU1ZSNCwgIm1ha2UgcG93ZXJtYXgi Ci0jID8gZm9yIENvbnNlbnN5cyBVTklYIFNWLzM4NiBSNFYzLCAibWFrZSBzeXM1cjRzeHRjcGMi IG9yICJtYWtlIHN5czVyNHN4IgotIyA/IGZvciBDb252ZXJnZW50IHdpdGggQ1RJWCBTeXMgViBS MiwgIm1ha2Ugc3lzNSIKLSMgPyBmb3IgQ29udmVyZ2VudCB3aXRoIENUSVggNi40LjEsICJtYWtl IGN0aXgiCi0jID8gZm9yIENvbnZleCBDMSwgIm1ha2UgY29udmV4IgotIyA/IGZvciBDb252ZXgg QzIxMCB3aXRoIENvbnZleC9PUyA4LCAibWFrZSBjb252ZXg4IgotIyA/IGZvciBDb252ZXggQzIg d2l0aCBDb252ZXgvT1MgOS4xLCAibWFrZSBjb252ZXg5IgotIyA/IGZvciBDb252ZXggQzIgd2l0 aCBDb252ZXgvT1MgMTAuMSBhbmQgZ2NjIDIueCwgIm1ha2UgY29udmV4MTBnY2MiCi0jID8gZm9y IENyYXkgUmVzZWFyY2ggWC9NUCBvciBZTVAgb3IgQzkwIHdpdGggVU5JQ09TIDYueCAoU3lzdGVt IFYgUjMpLAotIwkibWFrZSBjcmF5IgotIyA/IGZvciBDcmF5IFJlc2VhcmNoIFgvTVAgb3IgWU1Q IG9yIEM5MCB3aXRoIFVOSUNPUyA3LnggKFN5c3RlbSBWIFI0KSwKLSMJIm1ha2UgY3JheSIKLSMg PyBmb3IgQ3JheSBSZXNlYXJjaCBYL01QIG9yIFlNUCBvciBDOTAgd2l0aCBVTklDT1MgOC4wIEFs cGhhLCAibWFrZSBjcmF5OCIKLSMgPyBmb3IgQ3JheSBSZXNlYXJjaCBYL01QIG9yIFktTVAgb3Ig QzkwIHdpdGggVU5JQ09TIDkuMCwgIm1ha2UgY3JheTkiCi0jID8gZm9yIENyYXkgQ29tcHV0ZXIg Q3JheS0yIG9yIENyYXkzIHdpdGggQ1NPUywgIm1ha2UgY3JheWNzb3MiCi0jID8gZm9yIEN5YmVy IDkxMCAoU2lsaWNvbi1HcmFwaGljcyBJcmlzKSB3aXRoIElyaXggMy4zLCAiaXJpeDMzIgotIyA/ IGZvciBEYXRhIEdlbmVyYWwgQVZpaU9OIHdpdGggREcvVVggNS40IGJlZm9yZSBSMy4wMCwgIm1h a2UgZGd1eDU0MCIKLSMgICAgIG9yICJtYWtlIGRndXg1NDBjIiAoY29tcGlsZSBja3dhcnQgc2Vw YXJhdGVseSBpZiBuZWNlc3NhcnkpCi0jID8gZm9yIERHL1VYIDUuNCBvbiBBVmlpT04gSW50ZWwg bW9kZWxzLCAibWFrZSBkZ3V4NTQwaSIgb3IgZGd1eDU0MGljLgotIyA/IGZvciBERy9VWCA1LjRS NC4xMSBvbiBBVmlpT04sIGFsbCBtb2RlbHMsICJtYWtlIGRndXg1NDQxMSIKLSMgPyBmb3IgREcv VVggNS40UjQuMjAgb24gQVZpaU9OLCBhbGwgbW9kZWxzLCAibWFrZSBkZ3V4NTQ0MjAiCi0jID8g Zm9yIERhdGEgR2VuZXJhbCBBVmlpT04gd2l0aCBERy9VWCA0LjN4IHVzaW5nIFN5cyBWLWlzbXMs ICJtYWtlIGRndXg0MzAiCi0jID8gZm9yIERhdGEgR2VuZXJhbCBBVmlpT04gd2l0aCBERy9VWCA0 LjN4IHVzaW5nIEJTRC1pc21zLCAibWFrZSBkZ3V4NDMwYnNkIgotIyA/IGZvciBEYXRhIEdlbmVy YWwgQVZpaU9OLCBlYXJsaWVyIFVOSVggdmVyc2lvbnMsCi0jICAgICAibWFrZSBzeXM1cjMiICht YXliZSBjb21waWxlIGNrd2FydCBzZXBhcmF0ZWx5LCBvciAidG91Y2ggY2tjcHJvLmMiKQotIyA/ IGZvciBEYXRhIEdlbmVyYWwgTVYgc3lzdGVtcyB3aXRoIERHL1VYLCA/Pz8KLSMgPyBmb3IgRGF0 YSBHZW5lcmFsIE1WIHN5c3RlbXMgd2l0aCBNVi9VWCwgdXNlIEFPUy9WUyBDLUtlcm1pdCAoQ0tE S0VSLk1BSykKLSMgPyBmb3IgRGF0YSBHZW5lcmFsIE1WIHN5c3RlbXMgd2l0aCBBT1MvVlMsIHVz ZSBDS0RLRVIuTUFLIChsYXN0ID0gQy1LIDcuMCkKLSMgPyBmb3IgREVDIFBEUC0xMSB3aXRoIEJl cmtlbGV5IFVOSVggMi54LCBzZWUgQmVya2VsZXkgVU5JWCAyLnguCi0jID8gZm9yIERFQyBQRFAt MTEgd2l0aCBNaW5pLVVOSVggKEJlbGwgNnRoIEVkaXRpb24gZm9yIFBEUC0xMSB3aXRoIG5vIE1N VSksCi0jICAgICBwcm9iYWJseSBubyB3YXkgdG8gZml0IEMtS2VybWl0IHdpdGhvdXQgSSZEIHNw YWNlLgotIyA/IGZvciBERUMgUERQLTExIHdpdGggVWx0cml4LTExIDMueCwgPz8/IChwcm9iYWJs eSBuZWVkcyBvdmVybGF5cykKLSMgPyBmb3IgREVDIFZBWCB3aXRoIFVsdHJpeCAxLnggIm1ha2Ug YnNkIgotIyA/IGZvciBERUMgVkFYIHdpdGggVWx0cml4IDIueCAibWFrZSB1bHRyaXgyeCIKLSMg PyBmb3IgREVDIFZBWCBvciBERUNzdGF0aW9uIHdpdGggVWx0cml4IDMuMCwgMy4xLCAibWFrZSB1 bHRyaXgzeCIKLSMgPyBmb3IgREVDc3RhdGlvbiBvciBWQVggd2l0aCBVbHRyaXggNC4wIG9yIDQu MSwgIm1ha2UgdWx0cml4NDAiCi0jID8gZm9yIERFQ3N0YXRpb24gb3IgVkFYIHdpdGggVWx0cml4 IDQuMiwgIm1ha2UgdWx0cml4NDIiIG9yICJtYWtlIHVsdHJpeDQyYyIKLSMgPyBmb3IgREVDc3Rh dGlvbiBvciBWQVggd2l0aCBVbHRyaXggNC54LCBQT1NJWCB3b3JsZCwgIm1ha2UgcG9zaXgiCi0j ID8gZm9yIERFQ3N0YXRpb24gb3IgVkFYIHdpdGggVWx0cml4IDQuMywgIm1ha2UgdWx0cml4NDMi LgotIyA/IGZvciBERUNzdGF0aW9uIG9yIFZBWCB3aXRoIFVsdHJpeCA0LjQsICJtYWtlIHVsdHJp eDQ0Ii4KLSMgPyBmb3IgREVDc3RhdGlvbiA1MDAwLzUwLCAvMTUwIG9yIC8yNjAgKFI0eDAwIE1J UFMgQ1BVKSwgVWx0cml4IDQuM0Egb3IgbGF0ZXIKLSMgICAgICJtYWtlIHVsdHJpeDQzLW1pcHMz IiBvciAibWFrZSB1bHRyaXg0M2MtbWlwczMiCi0jID8gZm9yIERFQ3N0YXRpb24gKE1JUFMpIHdp dGggQmVya2VsZXkgU3ByaXRlLCAibWFrZSBic2Q0NCI/Ci0jID8gZm9yIERFQ3N0YXRpb24gKE1J UFMpIHdpdGggT1NGLzEgVjEuMCB0byAxLjMsICJtYWtlIGRlYy1vc2YiCi0jID8gZm9yIERFQyBB bHBoYSB3aXRoIE9TRi8xIDEuMCB0byAxLjMsICJtYWtlIGRlYy1vc2YiCi0jID8gZm9yIERFQyBQ QyA0ODYgd2l0aCBPU0YvMSwgIm1ha2UgZGVjLW9zZiIKLSMgPyBmb3IgREVDIEFscGhhIHdpdGgg T1NGLzEgMi54LCAibWFrZSBkZWMtb3NmMjAiCi0jID8gZm9yIERFQyBBbHBoYSB3aXRoIE9TRi8x IDMuMCwgIm1ha2UgZGVjLW9zZjMwIgotIyA/IGZvciBERUMgQWxwaGEgd2l0aCBEaWdpdGFsIFVO SVggMy4yLCAibWFrZSBkdTMyIgotIyA/IGZvciBERUMgQWxwaGEgd2l0aCBEaWdpdGFsIFVOSVgg NC4wLTQuMEQsICJtYWtlIGR1NDAiIG9yICJtYWtlIGR1NDBnY2MiCi0jID8gZm9yIERFQyBBbHBo YSB3aXRoIERpZ2l0YWwgVU5JWCA0LjBFIG9yIGhpZ2hlciwgc2VlIFRydTY0LgotIyArIGZvciBE RUMgQWxwaGEgd2l0aCBhbnkgdmVyc2lvbiBvZiBEVSBvciBPU0YvMSwgIm1ha2UgZGVjLW9zZjEi Ci0jIC0gZm9yIERFQyBQcm8tMzUwIHdpdGggUHJvL1Zlbml4IFYxLngsICJtYWtlIHByb3Z4MSIg KHZlcnNpb24gNUEgaXMgdG9vIGJpZykKLSMgPyBmb3IgREVDIFByby0zODAgd2l0aCBQcm8vVmVu aXggVjIuMCAoU3lzIFYpLCAibWFrZSBzeXMzIiBvciAibWFrZSBzeXMzbmlkIgotIyA/IGZvciBE RUMgUHJvLTM4MCB3aXRoIDIuOSwgMi4xMCwgb3IgMi4xMSBCU0QsICJtYWtlIGJzZDI5IiBvciAi bWFrZSBic2QyMTAiCi0jICAgZm9yIERFQyBQRFAtMTEgd2l0aCAyLnhCU0QgKHVzZSBzZXBhcmF0 ZSBtYWtlZmlsZSBja3ViczIubWFrKQotIyA/IGZvciBEZWxsIFVOSVggSXNzdWUgMi54ICg9IFVT TCBTeXMgVi8zODYgUjQueCArIGZpeGVzKSwgIm1ha2UgZGVsbHN5czVyNCIKLSMgICAgIG9yICJt YWtlIGRlbGxzeXM1cjRjIiAobGFzdCB0ZXN0ZWQgaW4gQy1LZXJtaXQgNUEpLgotIyA/IGZvciBE SUFCIERTOTAgd2l0aCBETklYIChhbnkgdmVyc2lvbikgY3JlYXRlIGFuIGVtcHR5IDxzeXMvZmls ZS5oPiBpZgotIyAgICAgdGhpcyBmaWxlIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgKG9yIGFkZCAt RE5PRklMRUggdG8gdGhlIG1ha2UgZW50cnkpLgotIyA/IGZvciBESUFCIERTOTAgd2l0aCBETklY IDUuMiAoU3lzIFYuMikgb3IgZWFybGllciwgIm1ha2UgZG5peCIsCi0jICAgICAibWFrZSBkbml4 bmQiLCBvciAodG8gYWRkIGN1cnNlcyBhbmQgVENQL0lQKSAibWFrZSBkbml4bmV0YyIsCi0jID8g Zm9yIERJQUIgRFM5MCB3aXRoIEROSVggNS4zIChTeXMgVi4zKSwgIm1ha2UgZG5peDVyMyIKLSMg PyBmb3IgRElBQiBEUzkwIHdpdGggRE5JWCA1LjMgKFN5cyBWLjMpIGFuZCBUQ1AvSVAsICJtYWtl IGRuaXg1cjNuZXQiCi0jID8gZm9yIERJQUIgRFM5MCB3aXRoIEROSVggNS4zIDIuMiAoU3lzIFYu MyksIEFOU0kgQywgIm1ha2UgZG5peDVyM2Fuc2kiCi0jICAgICBvciwgdG8gaW5jbHVkZSBUQ1Av SVAsICJtYWtlIGRuaXg1cjNhbnNpbmV0IiwKLSMgICAgIGJ1dCB5b3UgaGF2ZSB0byBmaXggYSBi dWcgaW4gL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIGZpcnN0OgotIyAgICAgY2hhbmdlICJleHRlcm4g dm9pZCBmcmVlKGNoYXIgKnN0cik7IiB0byAiZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICpzdHIpOyIK LSMgPyBmb3IgRG9scGhpbiBTZXJ2ZXIgVGVjaG5vbG9neSBUcml0b24gODgvMTcgd2l0aCBTVi84 OCBSMy4yLCAibWFrZSBzdjg4cjMyIgotIyA/IGZvciBFbmNvcmUgTXVsdGltYXggMzEwLCA1MTAg d2l0aCBVbWF4IDQuMiwgIm1ha2UgdW1heDQyIgotIyA/IGZvciBFbmNvcmUgTXVsdGltYXggMzEw LCA1MTAgd2l0aCBVbWF4IDQuMywgIm1ha2UgdW1heDQzIgotIyA/IGZvciBFbmNvcmUgTXVsdGlt YXggMzEwLCA1MTAgd2l0aCBVbWF4IFYgMi4yLCB1c2UgQmVya2VsZXkgY2MsICJtYWtlIGJzZCIK LSMgPyBmb3IgRW5jb3JlIDg4SyB3aXRoIFVtYXggViA1LjIsICJtYWtlIGVuY29yZTg4ayIKLSMg PyBmb3IgRVNJWCBTeXN0ZW0gViBSNC4wLjMgb3IgNC4wNCB3aXRoIFRDUC9JUCBzdXBwb3J0LCAi bWFrZSBlc2l4cjQiCi0jICAgICBOT1RFOiBZb3UgY2FuIGFsc28gYnVpbGQgb24gVW5peHdhcmUg Mi54IHdpdGggIm1ha2UgZXNpeHI0IiwgYW5kIHJ1bgotIyAgICAgb24gRVNJWCwgYnV0IHRoZXJl IHlvdSBtdXN0IGZpcnN0OgotIyAgICAgICBsbiAvdXNyL2xpYi9saWJzb2NrZXQuc28gL3Vzci9s aWIvbGlic29ja2V0LnNvLjEKLSMgICAgICAgbG4gL3Vzci9saWIvbGlibnNsLnNvIC91c3IvbGli L2xpYm5zbC5zby4xCi0jICAgICAoVGhpcyB3b3JrZWQgZm9yIEMtS2VybWl0IDYuMCBidXQgZG9l cyBub3Qgd29yayBmb3IgNy4wKQotIyAgICAgKEJ1dCB5b3UgY2FuIHByb2JhYmx5IHN0aWxsIGJ1 aWxkIGEgbm9uLW5ldHdvcmtpbmcgdmVyc2lvbiB0aGlzIHdheSkKLSMgPyBmb3IgRXZlcmV4IFNU RVAgMzg2LzI1IFJldiBHIHdpdGggRVNJWCBTeXMgViBSMy4yRCwgIm1ha2Ugc3lzNXIzIgotIyA/ IGZvciBGb3J0dW5lIDMyOjE2LCBGb3I6UHJvIDEuOCwgIm1ha2UgZnQxOCIKLSMgPyBmb3IgRm9y dHVuZSAzMjoxNiwgRm9yOlBybyAyLjEsICJtYWtlIGZ0MjEiCi0jID8gZm9yIEZQUyA1MDAgd2l0 aCBGUFggNC4xLCAibWFkZSBic2QiCi0jID8gZm9yIEZyZWVCU0QgMS4wLCAibWFrZSBmcmVlYnNk MSIKLSMgPyBmb3IgRnJlZUJTRCAyLngsICJtYWtlIGZyZWVic2QyIiAobmN1cnNlcykgb3IgIm1h a2UgZnJlZWJzZDJjIiAoY3Vyc2VzKQotIyA/IGZvciBGcmVlQlNEIDMueCwgIm1ha2UgZnJlZWJz ZDMiIChuY3Vyc2VzKSBvciAibWFrZSBmcmVlYnNkM2MiIChjdXJzZXMpCi0jID8gZm9yIEZyZWVC U0QgNC4wLCAibWFrZSBmcmVlYnNkNDAiCi0jID8gZm9yIEZyZWVCU0QgNC4xIG9yIGxhdGVyLCAi bWFrZSBmcmVlYnNkIgotIyArIE5PVEU6IEp1c3QgdXNlICJtYWtlIGZyZWVic2QiIGZvciBhbnkg cmVhc29uYWJseSByZWNlbnQgRnJlZUJTRCB2ZXJzaW9uLgotIyA/IGZvciBIYXJyaXMgSENYLTI5 MDAsICJtYWtlIHN5czVyMyIKLSMgPyBmb3IgSGFycmlzIE5pZ2h0IEhhd2sgODhLIG9yIDY4SyB3 aXRoIENYL1VYIHByZS02LjEsICJtYWtlIHN5czVyMyIKLSMgPyBmb3IgSGFycmlzIE5pZ2h0IEhh d2sgODhLIG9yIDY4SyB3aXRoIENYL1VYIDYuMSBvciBsYXRlciwgIm1ha2UgY3hfdXgiCi0jID8g Zm9yIEhldXJpa29uLCAibWFrZSBzeXMzIgotIyA/IGZvciBIUC0zMDAwLCBNUEUvaXgsICJtYWtl IHBvc2l4Ij8KLSMgPyBmb3IgSFAtOTAwMCBTZXJpZXMgMzAwIHdpdGggNC40QlNELCAibWFrZSBi c2Q0NCIKLQotIyBOT1RFOiBNb3N0IG9mIHRoZSBIUC1VWCB0YXJnZXRzIHdlcmUgdGVzdGVkIHN1 Y2Nlc3NmdWxseSBpbiAyMDEwLgotIyBWZXJpZmljYXRpb24gbmVlZGVkIGZvciBDLUtlcm1pdCA5 LjAgQmV0YS4wMS4uLgotCi0jID8gZm9yIEhQLTkwMDAgU2VyaWVzIDUwMCwgSFAtVVggNS4yMSBh bmQgbm8gbmV0d29ya2luZyAibWFrZSBocHV4MDUwMCIKLSMgPyBmb3IgSFAtOTAwMCBTZXJpZXMg NTAwLCBIUC1VWCA1LjIxIHdpdGggV0lOL1RDUCAxLjIgIm1ha2UgaHB1eDA1MDB3aW50Y3AiCi0j ID8gZm9yIEhQLTkwMDAgU2VyaWVzLCBIUC1VWCA2LjUsIHdpdGhvdXQgbG9uZyBmaWxlbmFtZXMs Ci0jICAgICAibWFrZSBocHV4MDY1MCIsICJtYWtlIGhwdXgwNjUwYyIgb3IgIm1ha2UgaHB1eDA2 NTB0Y3BjIgotIyA/IGZvciBIUC05MDAwIFNlcmllcywgSFAtVVggNy4wIG9yIGxhdGVyIG5vIGxv bmcgZmlsZW5hbWVzLCAibWFrZSBocHV4MDcwMHNmIgotIyAgICAgb3IgKHRvIGluY2x1ZGUgdGNw L2lwLCBjdXJzZXMsIGV0YykgIm1ha2UgaHB1eDA3MDBzZnRjcGMiCi0jID8gZm9yIEhQLTkwMDAg U2VyaWVzIHdpdGggSFAtVVggNy4wLCBUQ1AvSVAsbG9uZyBmaWxlbmFtZXMsIm1ha2UgaHB1eDA3 MDBsZm4iCi0jID8gZm9yIEhQLTkwMDAgMzAwLzQwMCBTZXJpZXMgKDY4MHgwKSB3aXRoIEhQLVVY IDguMCwgVENQL0lQLCAibWFrZSBocHV4MDgwMCIKLSMgICAgICBvciAibWFrZSBocHV4MDgwMGMi Ci0jID8gZm9yIEhQLTkwMDAgNzAwLzgwMCBTZXJpZXMgKFBBLVJJU0MpLCBIUC1VWCA4LjAsIFRD UC9JUCwgIm1ha2UgaHB1eDA4MDBwYSIKLSMgICAgICBvciAibWFrZSBocHV4MDgwMHBhYyIKLSMg PyBmb3IgSFAtOTAwMCBTZXJpZXMgd2l0aCBIUC1VWCA4LjAsIG5vIFRDUC9JUCwgbG9uZyBmaWxl bmFtZXMsCi0jICAgICAgIm1ha2UgaHB1eDA4MDBub3RjcCIKLSMgPyBmb3IgSFAtOTAwMCBTZXJp ZXMsIEhQLVVYIDkuMCAtIDkuMTAsIFRDUC9JUCwgY3Vyc2VzLCByZXN0cmljdGVkIGNvbXBpbGVy Ci0jICAgICAobm8gb3B0aW1pemF0aW9uLCBubyBBTlNJKSwgYWxsIG1vZGVscywgIm1ha2UgaHB1 eDA5MDAiLiAgUmVhZCB0aGUKLSMgICAgIGhwdXgwOTAwIGVudHJ5IGJlbG93IGZvciBtb3JlIGlu Zm8uCi0jID8gZm9yIEhQLTkwMDAgNzAwIGFuZCA4MDAgU2VyaWVzLCBIUC1VWCA5LngsIFRDUC9J UCwgY3Vyc2VzLAotIyAgICAgSFAgb3B0aW1pemluZyBBTlNJIEMgY29tcGlsZXIsICJtYWtlIGhw dXgwOTAwbzcwMCIuCi0jID8gZm9yIEhQLTkwMDAgd2l0aCBNb3Rvcm9sYSBDUFVzLCBIUC1VWCA5 LngsIFRDUC9JUCwgY3Vyc2VzLAotIyAgICAgSFAgb3B0aW1pemluZyBBTlNJIEMgY29tcGlsZXIs ICJtYWtlIGhwdXgwOTAwbW90Ii4KLSMgPyBmb3IgSFAtOTAwMCBvbiBvdGhlciBDUFVzLCBIUC1V WCA5LngsIFRDUC9JUCwgY3Vyc2VzLAotIyAgICAgSFAgb3B0aW1pemluZyBBTlNJIEMgY29tcGls ZXIsICJtYWtlIGhwdXgwOTAwbyIuCi0jID8gZm9yIEhQLTkwMDAgc2VyaWVzLCBIUC1VWCA5Lngs IFRDUC9JUCwgY3Vyc2VzLCBnY2MsIGFsbCBtb2RlbHMsCi0jICAgICAibWFrZSBocHV4MDkwMGdj YyIKLSMgPyBmb3IgSFAtOTAwMCA3MDAvODAwIFNlcmllcywgSFAtVVggMTAuMDAsMTAuMDEsMTAu MTAsMTAuMjAsMTAuMzAsIFRDUC9JUCwKLSMgICAgIGN1cnNlcywgcmVzdHJpY3RlZCBjb21waWxl ciAobm8gb3B0aW1pemF0aW9uLCBubyBBTlNJKSAibWFrZSBocHV4MTAwMCIuCi0jID8gZm9yIEhQ LTkwMDAgNzAwLzgwMCBTZXJpZXMsIEhQLVVYIDEwLjAwLDEwLjAxLDEwLjEwLDEwLjIwLDEwLjMw LCBUQ1AvSVAsCi0jICAgICBjdXJzZXMsIEhQIEFOU0kvb3B0aW1pemluZyBjb21waWxlciAibWFr ZSBocHV4MTAwMG8iIG9yICJtYWtlIGhwdXgxMDAwbysiCi0jID8gZm9yIEhQLTkwMDAgSFAtVVgg MTAuMDAgb3IgbGF0ZXIgd2l0aCBnY2MsICJtYWtlIGhwdXgxMDAwZ2NjIgotIyA/IGZvciBUcnVz dGVkIEhQLVVYIDEwLnh4ICJtYWtlIGhwdXgxMDAwdCIsICJtYWtlIGhwdXgxMDAwdG8iLAotIyAg ICAgb3IgbWFrZSBocHV4MTAwMHRvKyIKLSMgPyBmb3IgSFAtOTAwMCA3MDAvODAwIFNlcmllcywg SFAtVVggMTEuMDAsVENQL0lQLGN1cnNlcywgcmVzdHJpY3RlZCBjb21waWxlcgotIyAgICAgKG5v IG9wdGltaXphdGlvbiwgbm8gQU5TSSkgIm1ha2UgaHB1eDExMDAiLgotIyA/IGZvciBIUC05MDAw IDcwMC84MDAgU2VyaWVzLCBIUC1VWCAxMS4wMCxUQ1AvSVAsY3Vyc2VzLCByZXN0cmljdGVkIGNv bXBpbGVyCi0jICAgICBIUCBBTlNJL29wdGltaXppbmcgY29tcGlsZXIgIm1ha2UgaHB1eDExMDBv IiBvciAibWFrZSBocHV4MTEwMG8rIgotIyA/IGZvciBUcnVzdGVkIEhQLVVYIDExLnh4ICJtYWtl IGhwdXgxMTAwdCIsICJtYWtlIGhwdXgxMTAwdG8iLAotIyAgICAgbWFrZSBocHV4MTEwMHRvKyIK LSMgPyBmb3IgSFAtOTAwMCBQQS1SSVNDIG1vZGVscyB3aXRoIE5lWFRTVEVQIDMuMywgIm1ha2Ug bmV4dHF1YWRmYXQiLgotIyA/IGZvciBIUC05MDAwIFBBLVJJU0MgbW9kZWxzIHdpdGggT1BFTlNU RVAvTWFjaCA0LjEsICJtYWtlIG5leHRxdWFkZmF0Ii4KLSMgPyBmb3IgSUJNIDM3MCBTZXJpZXMg d2l0aCBJWC8zNzAsICJtYWtlIGl4MzcwIgotIyA/IGZvciBJQk0gMzcwIFNlcmllcyB3aXRoIEFJ WC8zNzAgMS4yLCAibWFrZSBhaXgzNzAiCi0jID8gZm9yIElCTSAzNzAgU2VyaWVzIHdpdGggQUlY LzM3MCAzLjAsICJtYWtlIGFpeDM3MCIKLSMgPyBmb3IgSUJNIDM3MCBTZXJpZXMgd2l0aCBBSVgv RVNBIDIuMSwgIm1ha2UgYWl4ZXNhIgotIyAtIGZvciBJQk0gUEMvQVQgMjg2ICYgY29tcGF0aWJs ZXMgd2l0aCBNYXJrIFdpbGxpYW1zIENvaGVyZW50IE9TLAotIyAgICAgY29tbWFuZC1saW5lLW9u bHkgdmVyc2lvbiwgIm1ha2UgY29oZXJlbnQiICh2ZXJzaW9uIDVBICYgbGF0ZXIgdG9vIGJpZykK LSMgPyBmb3IgSUJNIFBDIDM4NiAmIGNvbXBhdGlibGVzIHdpdGggTWFyayBXaWxsaWFtcyBDb2hl cmVudCBPUywKLSMgICAgIG1pbmltdW0gaW50ZXJhY3RpdmUgdmVyc2lvbiwgIm1ha2UgY29oZXJl bnRtaSIKLSMgPyBmb3IgSUJNIFBDIDM4NiAmIGNvbXBhdGlibGVzIHdpdGggTWFyayBXaWxsaWFt cyBDb2hlcmVudCBPUywKLSMgICAgIGZ1bGwgaW50ZXJhY3RpdmUgdmVyc2lvbiwgcHJpb3IgdG8g djQuMiwgIm1ha2UgY29oZXJlbnRtYXgiCi0jID8gZm9yIElCTSBQQyAzODYgJiBjb21wYXRpYmxl cyB3aXRoIE1hcmsgV2lsbGlhbXMgQ29oZXJlbnQgT1MgNC4yLAotIyAgICAgIm1ha2UgY29oZXJl bnQ0MiIKLSMgPyBmb3IgSUJNIFBDIDM4NiAmIGNvbXBhdGlibGVzIHdpdGggTHlueE9TIDIuMCBv ciAyLjEsICJtYWtlIGx5bngyMSIKLSMgPyBmb3IgSUJNIFBDIDM4NiAmIGNvbXBhdGlibGVzIHdp dGggTHlueE9TIDIuMiwgIm1ha2UgbHlueCIKLSMgLSBmb3IgSUJNIFBDL0FUICYgY29tcGF0aWJs ZXMgd2l0aCBvcmlnaW5hbCBNSU5JWCwgIm1ha2UgbWluaXgiICh0b28gYmlnKQotIyA/IGZvciBJ Qk0gUEMgZmFtaWx5LCAzODYtYmFzZWQsIHdpdGggTUlOSVgvMzg2IDEuNSwgIm1ha2UgbWluaXgz ODYiCi0jICAgICBvciBpZiB5b3UgaGF2ZSBHTlUgQ0MsICJtYWtlIG1pbml4Mzg2Z2NjIgotIyA/ IGZvciBJQk0gUEMgZmFtaWx5LCAzODYtYmFzZWQsIHdpdGggTUlOSVggMi4wLCAibWFrZSBtaW5p eDIwIgotIyA/IGZvciBJQk0gUEMgZmFtaWx5LCAzODYtYmFzZWQsIHdpdGggTUlOSVggMy4wLCAi bWFrZSBtaW5peDMiCi0jICsgZm9yIElCTSBQQyBmYW1pbHksIDM4Ni1iYXNlZCwgd2l0aCBNSU5J WCAzLjAsICJtYWtlIG1pbml4MzE1IgotIyA/IGZvciBJQk0gUFMvMiB3aXRoIFBTLzIgQUlYIDEu MCwgMS4xLCBvciAxLjIsICJtYWtlIHBzMmFpeCIgb3IgcHMyYWl4bmV0Yy4KLSMgPyBmb3IgSUJN IFBTLzIgd2l0aCBQUy8yIEFJWCAxLjMsICJtYWtlIHBzMmFpeDMiCi0jID8gZm9yIElCTSBSSVND IFN5c3RlbS82MDAwIHdpdGggQUlYIDMuMCwgIm1ha2UgYWl4MzAiCi0jID8gZm9yIElCTSBSSVND IFN5c3RlbS82MDAwIHdpdGggQUlYIDMuMS54LCAibWFrZSBhaXgzMSIKLSMgPyBmb3IgSUJNIFJJ U0MgU3lzdGVtLzYwMDAgd2l0aCBBSVggMy4yLjAgdGhydSAzLjIuNSwgIm1ha2UgYWl4MzIiCi0j ID8gZm9yIElCTSBSUy82MDAwIG9yIFBvd2VyIFNlcmllcyB3aXRoIEFJWCA0LjEueCwgIm1ha2Ug YWl4NDEiCi0jID8gZm9yIElCTSBSUy82MDAwIG9yIFBvd2VyIFNlcmllcyB3aXRoIEFJWCA0LjEu eCB3aXRoIGdjYywgIm1ha2UgYWl4NDFnIgotIyA/IGZvciBJQk0gUlMvNjAwMCBvciBQb3dlciBT ZXJpZXMgd2l0aCBBSVggNC4xIHdpdGggWC4yNSwgIm1ha2UgYWl4NDF4MjUiCi0jID8gZm9yIElC TSBSUy82MDAwIG9yIFBvd2VyIFNlcmllcyB3aXRoIEFJWCA0LjIgb3IgbGF0ZXI6ICJtYWtlIGFp eCIKLSMgICh0aGUgZm9sbG93aW5nICJtYWtlIGFpeG5uIiB0YXJnZXRzIGFyZSBubyBsb25nZXIg bmVjZXNzYXJ5IGV4Y2VwdCBmb3IgZ2NjKQotIyA/IGZvciBJQk0gUlMvNjAwMCBvciBQb3dlciBT ZXJpZXMgd2l0aCBBSVggNC4yLCAibWFrZSBhaXg0MiIKLSMgPyBmb3IgSUJNIFJTLzYwMDAgb3Ig UG93ZXIgU2VyaWVzIHdpdGggQUlYIDQuMywgIm1ha2UgYWl4NDMiIChvciBhaXg0M2djYykKLSMg PyBmb3IgSUJNIFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDQuNCwgIm1ha2UgYWl4 NDQiIChvciBhaXg0NGdjYykKLSMgPyBmb3IgSUJNIFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdp dGggQUlYIDQuNSwgIm1ha2UgYWl4NDUiIChvciBhaXg0NWdjYykKLSMgPyBmb3IgSUJNIFJTLzYw MDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDUuMCwgIm1ha2UgYWl4NTAiIChvciBhaXg1MGdj YykKLSMgPyBmb3IgSUJNIFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDUuMSwgIm1h a2UgYWl4NTEiIChvciBhaXg1MWdjYykKLSMgPyBmb3IgSUJNIFJTLzYwMDAgb3IgUG93ZXIgU2Vy aWVzIHdpdGggQUlYIDUuMiwgIm1ha2UgYWl4NTIiIChvciBhaXg1MmdjYykKLSMgPyBmb3IgSUJN IFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDUuMywgIm1ha2UgYWl4NTMiIChvciBh aXg1M2djYykKLSMgPyBmb3IgSUJNIFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDYu MSwgIm1ha2UgYWl4NjEiIChvciBhaXg1M2djYykKLSMgPyBmb3IgSUJNIFJUIFBDIHdpdGggQUlY IDIuMSwgIm1ha2Ugc3lzMyIKLSMgPyBmb3IgSUJNIFJUIFBDIHdpdGggQUlYIDIuMi4xLCAibWFr ZSBydGFpeCIgb3IgIm1ha2UgcnRhaXhjIgotIyA/IGZvciBJQk0gUlQgUEMgd2l0aCBBQ0lTIDQu MiwgIm1ha2UgYnNkIgotIyA/IGZvciBJQk0gUlQgUEMgd2l0aCBBQ0lTIDQuMywgIm1ha2UgcnRh Y2lzIiBvciAibWFrZSBic2QgS0ZMQUdTPS1ETk9BTlNJIgotIyA/IGZvciBJQk0gUlQgUEMgd2l0 aCA0LjNCU0QvUmVubywgIm1ha2UgYnNkNDQiIG9yICJtYWtlIGJzZDQ0YyIKLSMgPyBmb3IgSUNM IERSUzQwMCBvciA0MDBFLCAibWFrZSBpY2xzeXM1cjMiCi0jID8gZm9yIElDTCBEUlMzMDAwICg4 MDQ4Nikgd2l0aCBEUlMvTlgsICJtYWtlIGljbHN5czVyNF80ODYiCi0jID8gZm9yIElDTCBEUlM2 MDAwIChTUEFSQykgd2l0aCBEUlMvTlgsICJtYWtlIGljbHN5czVyNCIKLSMgPyBmb3IgSUNMIERS UzYwMDAgKFNQQVJDKSB3aXRoIERSUy9OWCA0LjJNUCA3TVBsdXMsICJtYWtlIGljbHN5czVyNG0r IgotIyA/ICAgICBEaXR0byBidXQgd2l0aCBJS1NEIHN1cHBvcnQgaW5jbHVkZWQsICJtYWtlIGlj bHN5czVyNG0raWtzZCIKLSMgPyBmb3IgSW50ZWdyYXRlZCBTb2x1dGlvbnMgSW5jIFY4UyBWTUUg NjgwMjAsICJtYWtlIGlzaSIKLSMgPyBmb3IgSW50ZWwgMzAyIHdpdGggQmVsbCBUZWNoIFN5cyBW LzM4NiBSMy4yLCAibWFrZSBzeXM1cjMiCi0jID8gZm9yIEludGVsIFhlbml4LzI4NiwgIm1ha2Ug c2NvMjg2IgotIyA/IGZvciBJbnRlcmFjdGl2ZSBTeXN0ZW0gSUlJIChQQy9JWCksICJtYWtlIHBj aXgiIG9yICJtYWtlIGlzMyIKLSMgPyBmb3IgSW50ZXJhY3RpdmUgU3lzdGVtIElJSSAoUEMvSVgp IHdpdGggZ2NjLCAibWFrZSBpczNnY2MiCi0jID8gZm9yIEludGVyYWN0aXZlIDM4Ni9peCAxLjAu NiB3aXRoIFRDUC9JUCBuZXR3b3JraW5nLCAibWFrZSBpczVyM25ldDIiCi0jID8gZm9yIEludGVy YWN0aXZlIDM4Ni9peCAyLjAueCwgIm1ha2UgaXM1cjMiIG9yIChQT1NJWCkgIm1ha2UgaXM1cjNw IgotIyA/IGZvciBJbnRlcmFjdGl2ZSAzODYvaXggMi4wLnggd2l0aCBUQ1AvSVAgbmV0d29ya2lu ZywgIm1ha2UgaXM1cjNuZXQiCi0jICAgICBvciAibWFrZSBpczVyM25ldDIiCi0jID8gZm9yIElu dGVyYWN0aXZlIDM4Ni9peCAyLjIuMSwgam9iIGNvbnRyb2wsIGN1cnNlcywgbm8gbmV0LCBnY2Ms Ci0jICAgICAibWFrZSBpczVyM2djYyIKLSMgPyBmb3IgSW50ZXJhY3RpdmUgVU5JWCBTeXMgViBS My4yIFYyLjIgLSA0LjAgd2l0aG91dCBUQ1AvSVAsICJtYWtlIGlzNXIzamMiCi0jID8gZm9yIElu dGVyYWN0aXZlIFVOSVggU3lzIFYgUjMuMiBWMi4yIC0gNC4wIHdpdGggVENQL0lQLCAibWFrZSBp czVyM25ldGpjIgotIyA/IGZvciBJbnRlcmdyYXBoIENsaXBwZXIsICJtYWtlIGNsaXgiIG9yICJt YWtlIGNsaXhuZXQiCi0jID8gZm9yIEpvbGl4IChzZWUgMzg2QlNEKQotIyArIGZvciBMaW51eCAx LjIgYW5kIGxhdGVyLCAibWFrZSBsaW51eCIuICBVc2VzIG5jdXJzZXMuICBUaGlzIHZlcnNpb24K LSMgICAgIGhhbmRsZXMgc2VyaWFsIHNwZWVkcyB1cCB0byA0NjA4MDAgYnBzLCBMaW51eCBGU1NU RCAxLjIsIFRDUC9JUCwgYW5kCi0jICAgICBzaG91bGQgd29yayBvbiBib3RoIGxpYmMgYW5kIGds aWJjIHN5c3RlbXMuICBGb3Igc3RhdGljIGxpbmtpbmcsIHVzZQotIyAgICAgIm1ha2UgbGludXgg TE5LRkxBR1M9LXN0YXRpYyIuICBQbGVhc2UgcmVhZCB0aGUgY29tbWVudHMgdGhhdCBhY2NvbXBh bnkKLSMgICAgIHRoZSBsaW51eCBlbnRyeS4gIEFzIG9mIDguMC4yMTIgRGV2LjEwLCB0aGlzIGFs c28gaW5jbHVkZXMgTGFyZ2UgRmlsZQotIyAgICAgU3VwcG9ydCAoTEZTKS4KLSMgKyBmb3IgTGlu dXggYnVpbGRzIHRoYXQgZmFpbCB3aXRoICJzeXMvc2VsZWN0Lmg6IE5vIHN1Y2ggZmlsZSBvciBk aXJlY3RvcnkiLAotIyAgICAgIm1ha2UgbGludXhucyIKLSMgKyBmb3IgTGludXggMS4yIGFuZCBs YXRlciBidXQgd2l0aCBjdXJzZXMuaCBhbmQgbGliY3Vyc2VzIChyYXRoZXIgdGhhbgotIyAgICAg bmN1cnNlcy5oIGFuZCBsaWJuY3Vyc2VzKSwgdXNlICJtYWtlIGxpbnV4YyIuCi0jICsgZm9yIExp bnV4IDEuMiBhbmQgbGF0ZXIgd2l0aCBubyBjdXJzZXMgc3VwcG9ydCBhdCBhbGwsICJtYWtlIGxp bnV4bmMiLgotIyArIGZvciBMaW51eCB3aXRoIG5vIFRDUC9JUCwgIm1ha2UgbGludXhub3RjcCIK LSMgKFRoZSBmb2xsb3dpbmcgTGludXggdGFyZ2V0cyBhcmUgaGlzdG9yaWMgYW5kIG1pZ2h0IG5v dCB3b3JrLi4uKQotIyA/IGZvciBSZWQgSGF0IExpbnV4IDcuMSB0aHJvdWdoIFJIOSwgZnVsbHkg Y29uZmlndXJlZCAoa3JiNSwgU1NMLCBldGMpOgotIyAgICAgIm1ha2UgcmVkaGF0NzEiLCAibWFr ZSByZWRoYXQ3MiIsICJtYWtlIHJlZGhhdDczIiwgIm1ha2UgcmVkaGF0ODAiCi0jICAgICAibWFr ZSByZWRoYXQ5IgotIyAgICAgTk9URTogWW91IG11c3QgdXNlIHRoaXMgdGFyZ2V0IGZvciBSZWQg SGF0IDcuMSBzaW5jZSBpdAotIyAgICAgYWxzbyBpbmNsdWRlcyBhIHdvcmthcm91bmQgZm9yIGl0 cyBicm9rZW4gY3Vyc2VzIGxpYnJhcnkuCi0jICAgICBXQVJOSU5HOiBUaGVzZSB0YXJnZXRzIGNy ZWF0ZSBiaW5hcmllcyB0aGF0IGluY2x1ZGUgY29kZSBmb3IKLSMgICAgIHN0cm9uZyBlbmNyeXB0 aW9uIGFuZCBhcmUgdGhlcmVmb3JlIG5vdCBleHBvcnRhYmxlLiBETyBOT1QgUFVUCi0jICAgICBU SEVTRSBCSU5BUklFUyBPTiBVUyBPUiBDQU5BRElBTiBXRUIgT1IgRlRQIFNJVEVTLgotIyA/IGZv ciBMaW51eCBvbiBQb3dlck1hYyAoTWtsaW51eCBEUjMpLCAibWFrZSBta2xpbnV4Ii4KLSMgPyBm b3IgTGludXggMS4yIGFuZCBsYXRlciwgdG8gYnVpbGQgd2l0aCBlZ2NzLCAibWFrZSBsaW51eGVn Y3MiLgotIyA/IGZvciBMaW51eCB3aXRoIGxjYyBjb21waWxlciwgbm8gVENQL0lQLCAibWFrZSBs aW51eG5vdGNwLWxjYyIKLSMgPyBmb3IgTGludXggMS4wIG9yIGVhcmxpZXIsICJtYWtlIGxpbnV4 MTAiLgotIyAoRW5kIG9sZCBsaW51eCB0YXJnZXRzKQotIyA/IGZvciBNYWNoIDIuNiBvbiAoYW55 dGhpbmcsIGUuZy4gREVDc3RhdGlvbiksICJtYWtlIGJzZDQyIiBvciAibWFrZSBic2Q0MyIuCi0j ID8gZm9yIE1hY2hUZW4gKFRlbm9uKSAyLjEuMS5EIG9uIChlLmcuKSBBcHBsZSBQb3dlcmJvb2ss ICJtYWtlIG1hY2h0ZW4iLgotIyA/IGZvciBNYXNzY29tcCBSVFUgQVQmVCBTeXN0ZW0gSUlJLCAi bWFrZSBydHUiCi0jICAgZm9yIG90aGVyIE1hc3Njb21wLCBzZWUgQ29uY3VycmVudC4KLSMgPyBm b3IgTWljcm9wb3J0IFNWL0FUIChTeXN0ZW0gViBSMiksICJtYWtlIG1wc3lzdiIgKGxhc3QgZWRp dCB0ZXN0ZWQ6IDE0NCkKLSMgPyBmb3IgTWljcm9wb3J0IFNWUjQgMi4yLCAzLjEsIG9yIDQuMSAi bWFrZSBzeXM1cjRzeCIKLSMgPyBmb3IgTWljcm9zb2Z0LElCTSBYZW5peCAoLzI4NiwgUEMvQVQs IGV0YyksICJtYWtlIHhlbml4IiBvciAibWFrZSBzY28yODYiCi0jID8gZm9yIE1JUFMgU3lzdGVt IHdpdGggUklTQy9vcyAoVU1JUFMpIDQuNTIgPSBBVCZUIFNWUjMsICJtYWtlIG1pcHMiCi0jICAg ICBvciAibWFrZSBtaXBzdGNwYyIKLSMgPyBmb3IgTWtMaW51eCBvbiBQb3dlciBNYWNpbnRvc2gs ICJtYWtlIG1rbGludXgiCi0jID8gZm9yIE1vZGNvbXAgOTczMCwgUmVhbC9JWCwgIm1ha2Ugc3lz NXIzIiAob3IgbW9kaWZ5IHRvIHVzZSBnY2MgPSBHTFMgY2MpCi0jID8gZm9yIE1vZGNvbXAgUmVh bHN0YXIgMTAwMCB3aXRoIFJFQUwvSVggRC4xLCAibWFrZSBzdjg4cjMyIgotIyA/IGZvciBNb3Rv cm9sYSBGb3VyIFBoYXNlLCAibWFrZSBzeXMzIiBvciAibWFrZSBzeXMzbmlkIgotIyA/IGZvciBN b3Rvcm9sYSBEZWx0YSBTeXN0ZW0gVi82OCBSMywgIm1ha2Ugc3Y2OHIzIgotIyA/IGZvciBNb3Rv cm9sYSBEZWx0YSBTeXN0ZW0gVi82OCBSM1Y1LCAibWFrZSBzdjY4cjN2NSIKLSMgPyBmb3IgTW90 b3JvbGEgRGVsdGEgU3lzdGVtIFYvNjggUjNWNS4xLCAibWFrZSBzdjY4cjN2NTEiCi0jID8gZm9y IE1vdG9yb2xhIERlbHRhIFN5c3RlbSBWLzY4IFIzVjYgd2l0aCBOU0UgVENQL0lQLCAibWFrZSBz djY4cjN2NiIKLSMgPyBmb3IgTW90b3JvbGEgRGVsdGEgU3lzdGVtIFYvODggUjMyLCAibWFrZSBz djg4cjMyIgotIyA/IGZvciBNb3Rvcm9sYSBEZWx0YSBTeXN0ZW0gVi84OCBSNDAsICJtYWtlIHN2 ODhyNDAiCi0jID8gZm9yIE10IFhpbnUgTWFjaDM4NiBvbiAzODYvNDg2LWJhc2VkIFBDcywgIm1h a2UgYnNkNDMiCi0jID8gZm9yIE5DUiBUb3dlciAxNjMyLCBPUyAxLjAyLCAibWFrZSB0b3dlcjEi Ci0jID8gZm9yIE5DUiBUb3dlciAxNjMyIG9yIE1pbml0b3dlciB3aXRoIFN5c3RlbSBWIFIyLCAi bWFrZSBzeXMzIgotIyAgICAgb3IgIm1ha2Ugc3lzM252IgotIyA/IGZvciBOQ1IgVG93ZXIgMzIs IE9TIFJlbGVhc2UgMS54eC54eCwgIm1ha2UgdG93ZXIzMi0xIgotIyA/IGZvciBOQ1IgVG93ZXIg MzIsIE9TIFJlbGVhc2UgMi54eC54eCwgIm1ha2UgdG93ZXIzMi0yIgotIyA/IGZvciBOQ1IgVG93 ZXIgMzIsIE9TIFJlbGVhc2VzIGJhc2VkIG9uIFN5cyBWIFIzLCAibWFrZSB0b3dlcjMyIgotIyA/ IGZvciBOQ1IgVG93ZXIgMzIsIE9TIFJlbGVhc2VzIGJhc2VkIG9uIFN5cyBWIFIzIHdpdGggZ2Nj ICJtYWtlIHRvd2VyMzJnIgotIyA/IGZvciBOQ1IgU3lzdGVtIDMwMDAsIEFUJlQgVU5JWCBTeXN0 ZW0gViBSNCAyLjAsICJtYWtlIHN5czVyNHN4bmEiCi0jID8gZm9yIE5DUiBTeXN0ZW0gMzAwMCwg QVQmVCBVTklYIFN5c3RlbSBWIFI0IDIuMCB3aXRoIFdvbGxvbmdvbmcgVENQL0lQLAotIyAgICAg Im1ha2Ugc3lzNXI0bmV0MiIgb3IgIm1ha2Ugc3lzNXI0bmV0MmMiLgotIyAgICAgIFNvbWUgaGVh ZGVyIGZpbGVzIG1pZ2h0IGJlIG1pc3BsYWNlZDsgdHJ5IHRoaXM6Ci0jICAgICAgIGxuIC91c3Iv aW5jbHVkZS9uZXRpbmV0L2luLmggL3Vzci9pbmNsdWRlL3N5cy9pbi5oCi0jICAgICAgIGxuIC91 c3IvaW5jbHVkZS9hcnBhL2luZXQuaCAvdXNyL2luY2x1ZGUvc3lzL2luZXQuaAotIyAgICAgICBs biAvdXNyL2luY2x1ZGUvc3lzL3Rlcm1pb3guaCAvdXNyL2luY2x1ZGUvdGVybWlveC5oCi0jID8g Zm9yIE5DUiBTeXN0ZW0gMzAwMCwgTkNSIFVOSVggMDIuMDIuMDEsIHNhbWUgYXMgYWJvdmUuCi0j ID8gZm9yIE5DUiBNUC1SQVMgU3lzdGVtIFYgUjQgVjIuMDMgb3IgMy4wMiwgIm1ha2UgbXByYXMi IG9yICJtYWtlIG1wcmFzdGNwYyIKLSMgKyBmb3IgTmV0QlNEIGFueSB2ZXJzaW9uIG9uIGFueSBh cmNoaXRlY3R1cmUsICJtYWtlIG5ldGJzZCIKLSMgKyBmb3IgTmV0QlNEIHdpdGggT3BlblNTTCwg Im1ha2UgbmV0YnNkK3NzbCIKLSMgPyBmb3IgTmV0QlNEIHdpdGggbmN1cnNlcyBzcGVjaWZpZWQg aW5zdGVhZCBvZiBjdXJzZXMsICJtYWtlIG5ldGJzZG4iCi0jID8gZm9yIE5ldEJTRCB3aXRoIGFs bCBjdXJzZXMgc3VwcG9ydCBvbWl0dGVkLCAibWFrZSBuZXRic2RuYyIKLSMgPyBmb3IgTmVYVCB3 aXRoIE5lWFRTVEVQIDEuMCB0aHJvdWdoIDMuMiwgIm1ha2UgbmV4dCIgKG9uIGEgTmVYVCkKLSMg PyBmb3IgTmVYVCB3aXRoIE5lWFRTVEVQIDMuMywgIm1ha2UgbmV4dDMzIgotIyA/IGZvciBOZVhU IHdpdGggT1BFTlNURVAvTWFjaCA0LjEsICJtYWtlIG5leHRxdWFkZmF0Ii4KLSMgPyBmb3IgTmVY VCB3aXRoIE9QRU5TVEVQL01hY2ggNC4yLCAibWFrZSBvcGVuc3RlcDQyIi4KLSMgPyBmb3IgTmVY VFNURVAvNDg2LCAibWFrZSBuZXh0IiAob24gYSBQQykKLSMgPyBmb3IgTmVYVFNURVAgcG9ydGFi bGUgYmluYXJ5IChydW5zIG9uIEludGVsIG9yIE1vdG9yb2xhKSwgIm1ha2UgbmV4dGZhdCIKLSMg PyBmb3IgTmVYVFNURVAgcG9ydGFibGUgYmluYXJ5IChJbnRlbCwgTW90b3JvbGEsIEhQIFBBLVJJ U0MsIG9yIFNQQVJDKSwKLSMgICAgICJtYWtlIG5leHRxdWFkZmF0IgotIyA/IGZvciBOaXhkb3Jm IFRhcmdvbi8zMSwgIm1ha2UgdDMxdG9zNDB4IgotIyA/IGZvciBOb3JzayBEYXRhIFVuaWxpbmUg ODgvMTcgd2l0aCBTVi84OCBSMy4yLCAibWFrZSBzdjg4cjMyIgotIyAgIGZvciBOb3ZlbGwgVW5p eFdhcmUgLSBzZWUgVW5peFdhcmUKLSMgPyBmb3IgT1NGLzEgKHZhbmlsbGEsIGZyb20gT1MvRiks ICJtYWtlIHBvc2l4IgotIyA/IGZvciBPa2lTdGF0aW9uIDczMDAgU2VyaWVzLCAibWFrZSBzeXM1 cjRzeHRjcCIKLSMgPyBmb3IgT2xpdmV0dGkgTFNYLTMwMjAgd2l0aCBYL09TIFIuMi4zLCAibWFr ZSB4b3MyMyIgb3IgIm1ha2UgeG9zMjNjIgotIyArIGZvciBPcGVuQlNELCAibWFrZSBvcGVuYnNk IiAoYWxzbyBzZWUgc2VjdXJlIHRhcmdldHMgbGlzdGVkIGJlbG93KS4KLSMgPyBmb3IgT1BFTlNU RVAvTWFjaCA0LjEsICJtYWtlIG5leHRxdWFkZmF0IiAoTmVYVCwgSW50ZWwsIFBBLVJJU0MsIFNQ QVJDKQotIyA/IGZvciBPUEVOU1RFUC9NYWNoIDQuMiwgIm1ha2Ugb3BlbnN0ZXA0MiIgKHRlc3Rl ZCBvbiBOZVhUKQotIyA/IGZvciBQZXJraW4tRWxtZXIgKENvbmN1cnJlbnQpIDMyMDAgc2VyaWVz LCAibWFrZSBzeXM1Ii4KLSMgPyBmb3IgUGVya2luLUVsbWVyIChDb25jdXJyZW50KSAzMjAwIHNl cmllcyB3aXRoIDxkaXJlbnQuaD4sICJtYWtlIGNjb3AxIgotIyA/IGZvciBQZXJraW4tRWxtZXIv Q29uY3VycmVudCAzMjAwIHdpdGggWGVsb3MgUjAyLCAibWFrZSBjY29wMSIKLSMgPyBmb3IgUEZV IENvbXBhY3QgQSBTZXJpZXMgU1gvQSBUSVNQIFYxMC9FNTAgKEphcGFuKSwgIm1ha2Ugc3hhZTUw IgotIyA/IGZvciBQbGV4dXMsICJtYWtlIHN5czMiCi0jID8gZm9yIFB5cmFtaWQgOVhYWCAoZS5n LiA5ODQ1KSBvciBNSVNlcnZlciBUIHNlcmllcywgT1N4IDQuNGIgdGhydSA1LjEsCi0jICAgICAi dWNiIG1ha2UgcHlyYW1pZCIgb3IgZm9yIEhEQiBVVUNQLCAidWNiIG1ha2UgcHlyYW1pZC1oZGIi IG9yOgotIyA/IGZvciBQeXJhbWlkIE1JU2VydmVyIFMgb3IgRVMgU2VyaWVzLCBEYXRhQ2VudGVy L09TeCwgIm1ha2UgcHlyZGNvc3giCi0jID8gZm9yIFB5cmFtaWQgTUlTLVMgTUlQUyBSMzAwMCwg RGF0YUNlbnRlciBPU3ggU3lzdGVtIFYgUjQsICJtYWtlIHB5cmRjb3N4IgotIyA/IGZvciBQT1NJ WCBvbiBhbnl0aGluZywgIm1ha2UgcG9zaXgiIChidXQgYWRqdXN0bWVudHMgbWlnaHQgYmUgbmVj ZXNzYXJ5KS4KLSMgICAgICBOT1RFOiB0aGlzIHRhcmdldCBpcyBub3QgdmVyeSB1c2VmdWwgLSBt YW55IGZlYXR1cmVzIGFyZSBtaXNzaW5nLgotIyA/IGZvciBQcmltZSA4MDAwIE1JUFMsIFNWUjMs ICJtYWtlIG1pcHMiIG9yICJtYWtlIG1pcHN0Y3BjIgotIyAtIGZvciBRTlggMi54IChzb3JyeSB3 ZSBkb24ndCBoYXZlIGEgdmVyc2lvbiBvZiBDLUtlcm1pdCBmb3IgUU5YIDIueCkKLSMgPyBmb3Ig UU5YIDQuMCBvciA0LjEsIDE2LWJpdCwgb24gMjg2IFBDLCBXYXRjb20gQyA4LjUsICJtYWtlIHFu eDE2XzQxIgotIyA/IGZvciBRTlggNC4yMSAtIDQuMjJBICgyODYrKSwgYW5kIDQuMjMgKDM4Nisp LCBvciBoaWdoZXIsIDE2LWJpdCwKLSMgICAgIFdhdGNvbSBDIDkuNXggb3IgaGlnaGVyLCAibWFr ZSBxbngxNiIKLSMgKyBmb3IgUU5YIDQuMjEtNC4yNSwgMzItYml0LCAzODYgb3IgYWJvdmUsIFdh dGNvbSBDIDEwLjYsICJtYWtlIHFueDMyIgotIyAgICAgTk9URTogKCJtYWtlIHFueCIgPT0gIm1h a2UgcW54MzIiKQotIyA/IGZvciBRTlggTmV1dHJpbm8gMissICJtYWtlIHFueF9udG8yKyIgKGNy b3NzY29tcGlsZWQgb24gUU5YNCB3aXRoIFdhdGNvbSBDKQotIyA/IGZvciBRTlggNiA9IE5ldXRy aW5vIDIueHgsICJtYWtlIHFueDYiCi0jID8gZm9yIFJpZGdlIDMyIChST1MzLjIpLCAibWFrZSBy aWRnZTMyIgotIyA/IGZvciBTYW1zdW5nIE1hZ2ljU3RhdGlvbiwgIm1ha2Ugc3lzNXI0IgotIyA/ IGZvciBTQ08gWGVuaXggMi4yLjEgd2l0aCBkZXZlbG9wbWVudCBzeXN0ZW0gMi4yIG9uIDgwODYv OCAibWFrZSBzY284NiIKLSMgPyBmb3IgU0NPIFhlbml4LzI4NiAyLjIuMSB3aXRoIGRldmVsb3Bt ZW50IHN5c3RlbSAyLjIgb24gODAyODYsICJtYWtlIHNjbzI4NiIKLSMgICAgIE5PVEU6IHJlcG9y dGVkbHkgdGhpcyBtYWtlZmlsZSBpcyB0b28gbG9uZyBmb3IgU0NPIFhlbml4LzI4NiBtYWtlLCBi dXQgaXQKLSMgICAgIHdvcmtzIHdpdGggIm1ha2VMIiwgb3IgaWYgc29tZSBvZiB0aGUgb3RoZXIg bWFrZSBlbnRyaWVzIGFyZSBlZGl0ZWQgb3V0LgotIyA/IGZvciBTQ08gWGVuaXgvMzg2IDIuMi4y LCAibWFrZSBzY28zODYiCi0jID8gZm9yIFNDTyBYZW5peC8zODYgMi4zLngsICJtYWtlIHNjbzNy MiIKLSMgPyBmb3IgU0NPIFhlbml4LzM4NiBTQ08gMi4zLjMgb3IgMi4zLjQgd2l0aCBnY2MgMS4z NyBvciBsYXRlciwKLSMgICAgICJtYWtlIHNjbzM4NmdjYyIgb3IgKHRvIGFkZCBjdXJzZXMpICJt YWtlIHNjbzM4NmdjY2MiLgotIyA/IGZvciBTQ08gWGVuaXgvMzg2IG9yIFVOSVgvMzg2IHdpdGgg RXhjZWxhbiBUQ1AvSVAsICJtYWtlIHNjbzNyMm5ldCIKLSMgICAgIG9yICh0byBhZGQgY3Vyc2Vz IHN1cHBvcnQpICJtYWtlIHNjbzNyMm5ldGMiIG9yICJzY28zODZuZXRjIgotIyArIGZvciBTQ08g WEVOSVggMi4zLjQsICJtYWtlIHNjbzIzNCIgb3IgIm1ha2Ugc2NvMjM0YyIgdG8gYWRkIGN1cnNl cy4KLSMgPyBmb3IgU0NPIFhFTklYIDIuMy40IHdpdGggU0NPIFRDUC9JUCAmIGN1cnNlcywgIm1h a2Ugc2NvMjM0bmV0YyIuCi0jID8gZm9yIFNDTyBYZW5peCAyLjMueCB3aXRoIFJhY2FsLUludGVy TGFuIFRDUC9JUCwgIm1ha2Ugc2NvM3IybmV0cmkiCi0jICAgZm9yIG90aGVyIFVOSVggdmFyaWV0 aWVzIHdpdGggUmFjYWwgSW50ZXJsYW4gVENQL0lQLCByZWFkIHNjbzNyMm5ldHJpIGVudHJ5Ci0j ID8gZm9yIFNDTyBYZW5peCAyLjMueCB3aXRoIFNDTyAoTGFjaG1hbikgVENQL0lQLCAibWFrZSBz Y28zcjJsYWkiCi0jICAgICBvciAodG8gYWRkIGN1cnNlcykgIm1ha2Ugc2NvM3IybGFpYyIKLSMg ICBmb3IgU0NPIFVOSVguLi4gIEFMU08gUkVBRCBDT01NRU5UUyBpbiB0aGUgU0NPIFVOSVggZW50 cmllcyBmb3IgbW9yZSBpbmZvIQotIyA/IGZvciBTQ08gVU5JWC8zODYgMy4yLjAgb3IgMy4yLjEs ICJtYWtlIHNjbzNyMiIgb3IgIm1ha2Ugc2NvM3IyeCIKLSMgPyBmb3IgU0NPIFVOSVgvMzg2IDMu Mi4yLCAibWFrZSBzY28zcjIyIiBvciAibWFrZSBzY28zcjIyZ2NjIgotIyAgICAgb3IgIm1ha2Ug c2NvM3IyMmMiCi0jID8gZm9yIFNDTyBVTklYLzM4NiAzLjIuMiB3aXRoIFNDTyBUQ1AvSVAsICJt YWtlIHNjbzNyMjJuZXQiCi0jICAgICBvciAibWFrZSBzY28zcjIybmV0YyIgKGN1cnNlcykKLSMg PyBmb3IgU0NPIE9EVCAxLjEsICJtYWtlIHNjbzNyMjJuZXQiIG9yICJtYWtlIHNjbzNyMjJuZXRj IiAoY3Vyc2VzKQotIyA/IGZvciBTQ08gVU5JWC8zODYgMy4yIFY0LngsIG5vIG5ldHdvcmsgc3Vw cG9ydCwgIm1ha2Ugc2NvMzJ2NCIKLSMgPyAgIG9yICJtYWtlIHNjbzMydjRucyIgKHRoaXMgb25l IHVzZXMgbm8gc2VsZWN0KCkgb3Igc29ja2V0cyBsaWJyYXJ5KQotIyA/IGZvciBTQ08gVU5JWC8z ODYgMy4yIFY0Lnggd2l0aCBUQ1AvSVAsICJtYWtlIHNjbzMydjRuZXQiCi0jICAgICAoYWxzbyBz Y28zMnY0Z2NjLCBzY28zMnY0bmV0Z2NjKQotIyA/IGZvciBTQ08gVU5JWC8zODYgMy4yIFY1LjAg LSBzZWUgU0NPIE9wZW5TZXJ2ZXIuCi0jID8gZm9yIFNDTyBVTklYIDMuMnY0Lnggd2l0aCBUQ1Av SVAsIDxkaXJlbnQuaD4gZm9yIEV4dGVuZGVkIEFjZXIgRmlsZQotIyAgICAgU3lzdGVtIChFQUZT KSwgY3Vyc2VzLCBBTlNJIEMgY29tcGlsYXRpb24sICJtYWtlIHNjbzMydjRuZXQiCi0jID8gICBv ciAodG8gdXNlIHNlbGVjdCgpLWJhc2VkIENPTk5FQ1QgbW9kdWxlKSAibWFrZSBzY28zMnY0bmV0 eCIuCi0jID8gZm9yIFNDTyBVTklYIDMuMnY0LjIsICJtYWtlIHNjby1vZHQzMCIgKGluY2x1ZGVz IFRDUC9JUCkuCi0jID8gZm9yIFNDTyBNUFggMy4wIC0gVGhlIFNDTyBVTklYIGJpbmFyeSBydW5z IG9uIHRoZSBjb3JyZXNwb25kaW5nIE1QWCBzeXN0ZW0uCi0jCi0jIE5PVEU6IEFsc28gc2VlIGJl bG93IGZvciBvdGhlciBlbnRyaWVzIHRoYXQgYXJlIHZhcmlhdGlvbnMgb24gdGhlc2UuCi0jIEFs c28gYmUgc3VyZSB0byByZWFkIHRoZSBjb21tZW50cyBhY2NvbXBhbnlpbmcgZWFjaCBTQ08gZW50 cnkuCi0jIEFsc28gc2VlIFVuaXh3YXJlIHNlY3Rpb24uCi0jCi0jID8gZm9yIFNDTyBPRFQgMi4w LCAibWFrZSBzY28zMnY0bmV0IgotIyA/IGZvciBTQ08gT0RUIDMuMCwgIm1ha2Ugc2NvLW9kdDMw IgotIyA/IGZvciBTQ08gT3BlblNlcnZlciA1LjAgKE9TUjUpLCAibWFrZSBzY28zMnY1MDAiCi0j ID8gZm9yIFNDTyBPcGVuU2VydmVyIDUuMCAoT1NSNSkgd2l0aCBuZXR3b3JraW5nLCAibWFrZSBz Y28zMnY1MDBuZXQiCi0jID8gZm9yIFNDTyBPcGVuU2VydmVyIDUuMCAoT1NSNSksIGdjYywgIm1h a2Ugc2NvMzJ2NTAwZ2NjIgotIyA/IGZvciBTQ08gT3BlblNlcnZlciA1LjAgKE9TUjUpLCBnY2Ms IHdpdGggbmV0d29ya2luZywgIm1ha2Ugc2NvMzJ2NTAwbmV0Z2NjIgotIyA/IGZvciBTQ08gT3Bl blNlcnZlciA1LjAgKE9TUjUpLCBhcyBhYm92ZSwgRUxGLCAibWFrZSBzY28zMnY1MDBuZXRnY2Nl bGYiCi0jID8gZm9yIFNDTyBPcGVuU2VydmVyIDUuMC4yLCB1c2UgIm1ha2Ugc2NvMzJ2NTAyeHh4 IiBlbnRyaWVzIGFzIGFib3ZlLgotIyA/IGZvciBTQ08gT3BlblNlcnZlciA1LjAuNCwgdXNlICJt YWtlIHNjbzMydjUwNHh4eCIgZW50cmllcyBhcyBhYm92ZS4KLSMgPyBmb3IgU0NPIE9wZW5TZXJ2 ZXIgNS4wLjUsIHVzZSAibWFrZSBzY28zMnY1MDV4eHgiIGVudHJpZXMgYXMgYWJvdmUuCi0jICAg ICBVc2UgdGhlIHNjbzMydjUwNXVka3h4eCBlbnRyaWVzIGlmIHlvdSBoYXZlIHRoZSBVREsgcmF0 aGVyIHRoYW4gL2Jpbi9jYy4KLSMgPyBmb3IgU0NPIE9wZW5TZXJ2ZXIgNS4wLjYsIHVzZSAibWFr ZSBzY28zMnY1MDZ4eHgiIGVudHJpZXMgYXMgYWJvdmUuCi0jID8gZm9yIFNDTyBPcGVuU2VydmVy IDUuMC42YSx1c2UgIm1ha2Ugc2NvMzJ2NTA2YXh4eCIgZW50cmllcyBhcyBhYm92ZS4KLSMgPyBm b3IgU0NPIE9wZW5TZXJ2ZXIgNS4wLjcsIHVzZSAibWFrZSBzY28zMnY1MDciLCAibWFrZSBzY28z MnY1MDduZXQiCi0jID8gZm9yIFNDTyAoVW5pdmVsKSBVbml4V2FyZSAxLngsICJtYWtlIHVuaXh3 YXJlIiBvciAibWFrZSB1bml4d2FyZW5ldGMiLgotIyAgICAgSWYgdGhlcmUgYXJlIHByb2JsZW1z IHdpdGggdGhpcyBpbiBDLUsgNysgc2VlIG5vdGVzIGF0IHVuaXh3YXJlIGVudHJ5LgotIyArIGZv ciBTQ08gT3BlblNlcnZlciA2LjAuMCwgIm1ha2Ugc2NvX29zcjYwMCIKLSMgPyBmb3IgU0NPIFVu aXhXYXJlIDIuMC54LCAibWFrZSB1dzIwIgotIyA/IGZvciBTQ08gVW5peFdhcmUgMi4xLjAsICJt YWtlIHV3MjEiCi0jID8gZm9yIFNDTyBVbml4V2FyZSAyLjEuMywgIm1ha2UgdXcyMTMiCi0jICsg Zm9yIFNDTyBVbml4V2FyZSA3LCAibWFrZSB1dzciIChpbmNsdWRlcyBsYXJnZSBmaWxlIHN1cHBv cnQpCi0jID8gZm9yIFNDTyBVbml4V2FyZSA3IHdpdGggSUtTRCBzdXBwb3J0LCAibWFrZSB1dzdp a3NkIiBvciAibWFrZSB1dzdpa3NkdWRrIgotIyA/IGZvciBTQ08gVW5peFdhcmUgNyB3aXRoIE9w ZW5TU0wsICJtYWtlIHV3N3NzbCIKLSMgPyBmb3IgU0NPIChDYWxkZXJhKSBPcGVuIFVOSVggOCwg Im1ha2Ugb3U4IgotIyA/IGZvciBTaGFycCBaYXVydXMgU0w1NTAwIFBEQSwgIm1ha2UgenNsNTUw MCIuCi0jID8gZm9yIFNlcXVlbnQgd2l0aCBEWU5JWC9wdHggMS4yLjEsICJtYWtlIGR5bml4cHR4 MTIiCi0jID8gZm9yIFNlcXVlbnQgd2l0aCBEWU5JWC9wdHggMS4zIG9yIDEuNCB3aXRoIFRDUC9J UCwgIm1ha2UgZHluaXhwdHgxMyIKLSMgPyBmb3IgU2VxdWVudCB3aXRoIERZTklYL3B0eCAyLjAg b3IgMi4xIHdpdGggVENQL0lQLCAibWFrZSBkeW5peHB0eDIwIgotIyAgICAgb3IgImR5bml4cHR4 MjBjIgotIyA/IGZvciBTZXF1ZW50IHdpdGggRFlOSVgvcHR4IDIuMS42IG9uIGk0ODYsICJkeW5p eHB0eDIxNmMiCi0jID8gZm9yIFNlcXVlbnQgd2l0aCBEWU5JWC9wdHggVjQuMS4zIHdpdGggVENQ L0lQLCAibWFrZSBkeW5peHB0eDQxYyIKLSMgPyBmb3IgU2VxdWVudCB3aXRoIERZTklYL3B0eCBW NC40LjIgd2l0aCBUQ1AvSVAsICJtYWtlIGR5bml4cHR4NDQiCi0jID8gZm9yIFNlcXVlbnQgQmFs YW5jZSA4MDAwIG9yIEI4IHdpdGggRFlOSVggMy4wLnh4LCAibWFrZSBkeW5peDMiCi0jICAgIG9y ICJtYWtlIGR5bml4M25vYWN1IgotIyA/IGZvciBTZXF1ZW50IFN5bW1ldHJ5IFM4MSB3aXRoIERZ TklYIDMuMC54eCwgIm1ha2UgZHluaXgzIgotIyA/IGZvciBTZXF1ZW50IERZTklYIDMuMS54eCwg Im1ha2UgZHluaXgzMSIgb3IgIm1ha2UgZHluaXgzMWMiCi0jID8gZm9yIFNpZW1lbnMvTml4ZG9y ZiBTSU5JWC1MIEludGVsIFY1LjQxLCAibWFrZSBzaW5peDU0MWkiCi0jICsgZm9yIFNpZW1lbnMv Tml4ZG9yZiBTSU5JWC1OIE1JUFMgVjUuNDIsICJtYWtlIHNpbml4NTQyIgotIyA/IGZvciBTaWVt ZW5zL05peGRvcmYgU0lOSVgtUCBNSVBTIFY1LjQyIHdpdGggZ2NjLCAibWFrZSBzaW5peDU0Mmci Ci0jID8gZm9yIFNpZW1lbnMvTml4ZG9yZiBTSU5JWC1aIEludGVsIFY1LjQyLCAibWFrZSBzaW5p eDU0MmkiCi0jID8gZm9yIFNpZW1lbnMvTml4ZG9yZiBSZWxpYW50IFVOSVggVjUuNDMsICJtYWtl IHNuaTU0MyIKLSMgPyBmb3IgU2llbWVucy9OaXhkb3JmIFJlbGlhbnQgVU5JWCBWNS40NCwgIm1h a2Ugc25pNTQ0IgotIyA/IGZvciBTaWxpY29uIEdyYXBoaWNzIElyaXMgU3lzdGVtIFYgSVJJWCAz LjIgb3IgZWFybGllciwgIm1ha2UgaXJpcyIKLSMgPyBmb3IgU2lsaWNvbiBHcmFwaGljcyBTeXMg ViBSMyB3aXRoIElSSVggMy4zIG9yIGxhdGVyLCAibWFrZSBzeXM1cjMiCi0jID8gZm9yIFNpbGlj b24gR3JhcGhpY3MgSXJpcyBJbmRpZ28gd2l0aCBJUklYIDQuMCBvciA1LjAsICJtYWtlIGlyaXg0 MCIgb3IKLSMgICAgICh0byBpbmNsdWRlIFllbGxvdyBQYWdlcyBhbmQgQ3Vyc2VzKSAibWFrZSBp cml4NDB5cGMiCi0jID8gZm9yIFNpbGljb24gR3JhcGhpY3MgSXJpcyBJbmRpZ28gb3IgRWxhbiB3 aXRoIElSSVggNC4wLnggd2l0aCBtaWNyb2NvZGUKLSMgICAgIG9wdGltaXphdGlvbiBhbmQgLU80 LCAibWFrZSBpcml4NDB1IiBvciAiaXJpeDQwdWMiIChhbmQgcmVhZCBub3RlcwotIyAgICAgYWNj b21wYW55aW5nIHRoZXNlIGVudHJpZXMpLgotIyA/IGZvciBTaWxpY29uIEdyYXBoaWNzIElSSVgg NS4xLCAibWFrZSBpcml4NTEiIG9yICJpcml4NTF4IiAobm8gb3B0aW1pemUpCi0jID8gZm9yIFNp bGljb24gR3JhcGhpY3MgSVJJWCA1LjIsICJtYWtlIGlyaXg1MiIKLSMgPyBmb3IgU2lsaWNvbiBH cmFwaGljcyBJUklYIDUuMywgIm1ha2UgaXJpeDUzIiBvciAiaXJpeDUzeCIgKG5vIG9wdGltaXpl KQotIyA/IGZvciBTaWxpY29uIEdyYXBoaWNzIElSSVggNi4wLCAibWFrZSBpcml4NjAiLgotIyA/ IGZvciBTaWxpY29uIEdyYXBoaWNzIElSSVggNi4yLCAibWFrZSBpcml4NjIiLgotIyA/IGZvciBT aWxpY29uIEdyYXBoaWNzIElSSVggNi4zLCAibWFrZSBpcml4NjMiLgotIyA/IGZvciBTaWxpY29u IEdyYXBoaWNzIElSSVggNi40LCAibWFrZSBpcml4NjQiIG9yICJtYWtlIGlyaXg2NGdjYyIuCi0j ICsgZm9yIFNpbGljb24gR3JhcGhpY3MgKFNHSSkgSVJJWCA2LjUsICJtYWtlIGlyaXg2NSIKLSMg KyAgIG9yICJtYWtlIGlyaXg2NW1pcHMyIiB0byBmb3JjZSBNSVBTMiwgb3IgIm1ha2UgaXJpeDY1 Z2NjIiBmb3IgR0NDLgotIyArIGZvciBTaWxpY29uIEdyYXBoaWNzIChTR0kpIElSSVggNi41LCAi bWFrZSBpcml4NjUiIG9yICJtYWtlIGlyaXg2NW1pcHMyIgotIyA/IGZvciBTR0kgSVJJWCA2LjUg d2l0aCBTU0wvVExTLCBTUlAsIGFuZCBaTElCICJtYWtlIGlyaXg2NStzc2wrc3JwK3psaWIiCi0j ID8gZm9yIFNvbGFyaXMgMi4wLTIuMyBvbiBTUEFSQyBvciBJbnRlbCwgU3VuUHJvIENDLCAibWFr ZSBzb2xhcmlzMngiLAotIyA/ICAgb3IgdG8gYWRkIFN1bkxpbmsgWC4yNSA4LjB4IHN1cHBvcnQs ICJtYWtlIHNvbGFyaXMyeDI1Ii4KLSMgPyBmb3IgU29sYXJpcyAyLjQgYnVpbHQgd2l0aCBnY2Ms ICJtYWtlIHNvbGFyaXMyNGciLgotIyA/IGZvciBTb2xhcmlzIDIuMC0yLjMgb24gU1BBUkMgb3Ig SW50ZWwsIEdOVSBDQywgIm1ha2Ugc29sYXJpczJ4ZyIuCi0jID8gZm9yIFNvbGFyaXMgMi40IHdp dGggWC4yNSwgIm1ha2Ugc29sYXJpczI0eDI1Ii4KLSMgPyBmb3IgU29sYXJpcyAyLjUgb24gU1BB UkMgb3IgSW50ZWwsIFN1blBybyBDQywgIm1ha2Ugc29sYXJpczI1Ii4KLSMgPyAgIG9yIHRvIGFk ZCBTdW5MaW5rIFguMjUgOC4weCBzdXBwb3J0LCAibWFrZSBzb2xhcmlzMjV4MjUiLgotIyA/IGZv ciBTb2xhcmlzIDIuNSBvbiBTUEFSQyBvciBJbnRlbCwgR05VIENDLCAibWFrZSBzb2xhcmlzMjVn Ii4KLSMgPyBmb3IgU29sYXJpcyAyLjYgb24gU1BBUkMgb3IgSW50ZWwsICJtYWtlIHNvbGFyaXMy NiIuCi0jID8gZm9yIFNvbGFyaXMgNyBvbiBTUEFSQyBvciBJbnRlbCwgU3VuUHJvIENDLCAibWFr ZSBzb2xhcmlzNyIuCi0jID8gZm9yIFNvbGFyaXMgNyBvbiBTUEFSQyBvciBJbnRlbCwgR05VIEND LCAibWFrZSBzb2xhcmlzN2ciLgotIyA/IGZvciBTb2xhcmlzIDggb24gU1BBUkMgb3IgSW50ZWws IFN1blBybyBDQywgIm1ha2Ugc29sYXJpczgiLgotIyA/IGZvciBTb2xhcmlzIDggb24gU1BBUkMg b3IgSW50ZWwsIEdOVSBDQywgIm1ha2Ugc29sYXJpczhnIi4KLSMgKyBmb3IgU29sYXJpcyA5IG9u IFNQQVJDIChvciBJbnRlbD8pLCAzMi1iaXQsIFN1blBybyBDQywgIm1ha2Ugc29sYXJpczkiLgot IyArIGZvciBTb2xhcmlzIDkgb24gU1BBUkMgKG9yIEludGVsPyksIDMyLWJpdCwgR05VIENDLCAi bWFrZSBzb2xhcmlzOWciLgotIyA/IGZvciBTb2xhcmlzIDkgb24gU1BBUkMgKG9yIEludGVsPyks IDY0LWJpdCwgR05VIENDLCAibWFrZSBzb2xhcmlzOWc2NCIuCi0jICsgZm9yIFNvbGFyaXMgMTAg b24gU1BBUkMgKG9yIEludGVsPyksIDMyLWJpdCwgU3VuUHJvIENDLCAibWFrZSBzb2xhcmlzMTAi LgotIyArIGZvciBTb2xhcmlzIDEwIG9uIFNQQVJDIDY0LWJpdCwgU3VuUHJvIENDLCAibWFrZSBz b2xhcmlzMTBfNjQiLgotIyArIGZvciBTb2xhcmlzIDEwIG9uIFNQQVJDIChvciBJbnRlbD8pLCAz Mi1iaXQsIEdOVSBDQywgIm1ha2Ugc29sYXJpczEwZyIuCi0jID8gZm9yIFNvbGFyaXMgMTAgb24g U1BBUkMgKG9yIEludGVsPyksIDY0LWJpdCwgR05VIENDLCAibWFrZSBzb2xhcmlzMTBnNjQiLgot IyA/IGZvciBTb2xib3VybmUgNC81MDAgd2l0aCBPUy9NUCA0ICJtYWtlIHN1bm9zNCIKLSMgPyBm b3IgU29sYm91cm5lIDQvNTAwIHdpdGggT1MvTVAgNC4xICJtYWtlIHN1bm9zNDEiIG9yICJtYWtl IHN1bm9zNDFjIgotIyA/IGZvciBTT05ZIE5FV1Mgd2l0aCBORVdTLU9TIDQuMC4xQywgIm1ha2Ug c29ueW5ld3MiCi0jID8gZm9yIFNPTlkgTkVXUyB3aXRoIE5FV1MtT1MgNC4xLjJDLCAibWFrZSBz b255bmV3cyIKLSMgPyBmb3IgU3BlcnJ5L1VOSVNZUyA1MDAwLzIwLCBVVFMgViA1LjIgM1IxLCAi bWFrZSBzeXM1IgotIyA/IGZvciBTcGVycnkvVU5JU1lTIDUwMDAvMzAvMzUvNTAvNTUsIFVUUyBW IDUuMiAyLjAxLCAibWFrZSB1bmlzeXM1cjIiCi0jID8gZm9yIFNwZXJyeS9VTklTWVMgNTAwMC84 MCB3aXRoIFN5c3RlbSBWIFIzLCAibWFrZSBzeXM1cjMiCi0jID8gZm9yIFNwZXJyeS9VTklTWVMg NTAwMC85NSB3aXRoIFN5c3RlbSBWIFIzLCAibWFrZSBzeXM1cjMiCi0jICAgICBGb3IgVU5JU1lT IFNWUjMgaXQgbWlnaHQgYmUgbmVjZXNzYXJ5IHRvICJtYWtlIHN5czVyMyBLRkxBR1M9LVVEWU5B TUlDIgotIyA/IGZvciBTdGFyZGVudCAxNTIwLCAibWFrZSBzeXM1cjMiCi0jID8gZm9yIFN0cmF0 dXMgRlRYIDIueCwgdHJ5ICJtYWtlIGZ0eCIgb3IgZWxzZSAibWFrZSBzeXM1cjQiIG9yICJzeXM1 cjRzeCIKLSMgPyBmb3IgU3RyYXR1cyBGVFggMy54LCBQQS1SSVNDIDEuMCBvciAyLjAsICJtYWtl IGZ0eCIgb3IgIm1ha2UgZnR4dGNwIgotIyA/IGZvciBTdW4gd2l0aCBTdW4gVU5JWCAzLjUgYW5k IGdjYywgIm1ha2Ugc3Vub3MzZ2NjIgotIyA/IGZvciBTdW4gd2l0aCBwcmUtNC4wIFN1bk9TIHZl cnNpb25zLCAibWFrZSBic2QiIChvciBhcHByb3ByaWF0ZSB2YXJpYW50KQotIyA/IGZvciBTdW4g d2l0aCBTdW5PUyA0LjAsIEJTRCBlbnZpcm9ubWVudCwgIm1ha2Ugc3Vub3M0IgotIyA/IGZvciBT dW4gd2l0aCBTdW5PUyA0LjAsIEJTRCwgd2l0aCBTdW5MaW5rIFguMjUsIG1ha2Ugc3Vub3M0eDI1 Ci0jID8gZm9yIFN1biB3aXRoIFN1bk9TIDQuMSBvciA0LjEuMSwgQlNEIGVudmlyb25tZW50LCAi bWFrZSBzdW5vczQxIgotIyAgICAgb3IgIm1ha2Ugc3Vub3M0MWMiIChjdXJzZXMpIG9yICJtYWtl IHN1bm9zNDFnY2MiIChjb21waWxlIHdpdGggZ2NjKQotIyA/IGZvciBTdW4gd2l0aCBTdW5PUyA0 LjEueCwgQlNELCB3aXRoIFN1bkxpbmsgWC4yNSA3LjAwIG9yIGVhcmxpZXIsCi0jICAgICAibWFr ZSBzdW5vczQxeDI1IiBvciAibWFrZSBzdW5vczQxeDI1YyIgKGN1cnNlcykKLSMgPyBmb3IgU3Vu IHdpdGggU3VuT1MgNC4xLCA0LjEuMSwgQVQmVCBTeXMgViBSMyBlbnZpcm9ubWVudCwgIm1ha2Ug c3Vub3M0MXM1IgotIyA/IGZvciBTdW4gd2l0aCBTdW5PUyA0LjEuMiwgIm1ha2Ugc3Vub3M0MSIg b3IgYW55IG9mIGl0cyB2YXJpYXRpb25zLgotIyAgICAgTk9URTogIEFsbCBTdW5PUyA0Lnggc3lz dGVtcyAtLSBTaGFyZWQgbGlicmFyaWVzIGFyZSB1c2VkIGJ5IGRlZmF1bHQuCi0jICAgICAgIElm IHRoaXMgY2F1c2VzIHByb2JsZW1zLCBhZGQgLUJzdGF0aWMgdG8gQ0ZMQUdTLgotIyAgICAgTk9U RTI6IFdoZW4gYnVpbGRpbmcgQy1LZXJtaXQgdW5kZXIgU3VuT1MgZm9yIHRoZSBCU0QgdW5pdmVy c2UsCi0jICAgICAgIGJ1dCAvdXNyLzViaW4vY2MgaXMgYWhlYWQgb2YgL3Vzci91Y2IvY2MgaW4g eW91ciBQQVRILCBhZGQKLSMgICAgICAgIkNDPS91c3IvdWNiL2NjIENDMj0vdXNyL3VjYi9jYyIg dG8gdGhlIG1ha2UgZW50cnkuCi0jICAgICBOT1RFMzogSWYgYW4gZXhlY3V0YWJsZSBidWlsdCBv biBvbmUgdHlwZSBvZiBTdW4gaGFyZHdhcmUgZG9lcyBub3Qgd29yawotIyAgICAgICBvbiBhbm90 aGVyIHR5cGUsIHJlYnVpbGQgdGhlIHByb2dyYW0gZnJvbSBzb3VyY2Ugb24gdGhlIHRhcmdldCBt YWNoaW5lLgotIyAgIGZvciBTdW4gd2l0aCBTb2xhcmlzIDEueCB1c2UgU3VuT1MgNC4xIGVudHJp ZXMuCi0jICAgZm9yIFN1biB3aXRoIFNvbGFyaXMgMi4wIGFuZCBoaWdoZXIgdXNlIFNvbGFyaXMg ZW50cmllcy4KLSMgKyBmb3IgU3VuIFNQQVJDIHdpdGggTGludXgsICJtYWtlIGxpbnV4IgotIyA/ IGZvciBTdW4gU1BBUkMgd2l0aCBPUEVOU1RFUC9NYWNoIDQuMSwgIm1ha2UgbmV4dHF1YWRmYXQi Ci0jID8gZm9yIFN1biBTUEFSQyB3aXRoIE9QRU5TVEVQL01hY2ggNC4yLCAibWFrZSBvcGVuc3Rl cDQyIgotIyAtIGZvciBUYW5keSAxNi82MDAwIHdpdGggWGVuaXggMy4wLCAibWFrZSB0cnMxNiIg KEMtS2VybWl0IDcuMCBpcyB0b28gYmlnKQotIyA/IGZvciBUZWt0cm9uaXggNjEzMC80MTMyLzQz eHggKGUuZy40MzAxKSB3aXRoIFVUZWsgT1MsICJtYWtlIHV0ZWsiCi0jICAgICBvciAoZm9yIG1v ZGVscyB3aXRob3V0IGhhcmR3YXJlIGZsb3cgY29udHJvbCksICJtYWtlIHV0ZWtub2h3ZmMiCi0j ID8gZm9yIFRla3Ryb25peCBYRDg4IHNlcmllcyB3aXRoIFVUZWtWIE9TLCAibWFrZSB1dGVrdnIz IgotIyA/IGZvciBUcmkgU3RhciBGbGFzaCBDYWNoZSB3aXRoIEVzaXggU1ZSMy4yLCAibWFrZSBz eXM1cjMiCi0jIE5PVEU6IFRoZSBUcnU2NCBidWlsZHMgaGF2ZSBiZWVuIGZhaWxpbmcgc2luY2Ug MjAxMCwgYnV0ICJtYWtlIGRlYy1vc2YiIGlzIE9LCi0jID8gZm9yIFRydTY0IFVOSVggNC4wRSwg Im1ha2UgdHJ1NjQtNDBlIgotIyA/IGZvciBUcnU2NCBVTklYIDQuMEYsICJtYWtlIHRydTY0LTQw ZiIKLSMgPyBmb3IgVHJ1NjQgVU5JWCA0LjBHLCAibWFrZSB0cnU2NC00MGciCi0jID8gZm9yIFRy dTY0IFVOSVggNS4wQSwgIm1ha2UgdHJ1NjQtNTBhIgotIyA/IGZvciBUcnU2NCBVTklYIDUuMUEs ICJtYWtlIHRydTY0LTUxYSIKLSMgPyBmb3IgVHJ1NjQgVU5JWCA1LjFCLCAibWFrZSB0cnU2NC01 MWIiCi0jID8gZm9yIFVuaXN0YXIsICJtYWtlIHN5czUiCi0jID8gZm9yIFVuaXN5cyBTLzQwNDAg NjgwNDAgQ1RJWCBTVlIzLjIgNi40LjEsICJtYWtlIGN0aXgiIG9yICJtYWtlIHN5czVyMyIKLSMg PyBmb3IgVW5pc3lzIFU1MDAwIFVOSVggU1ZSMyA2LngsICJtYWtlIHN5czVyMyIgb3IgIm1ha2Ug c3lzNXIzYyIKLSMgPyBmb3IgVW5pc3lzIFU2MDAwIFVOSVggU1ZSNCAxLngsICJtYWtlIHN5czVy NG54IiBvciAibWFrZSBzeXM1cjRueG5ldGMiCi0jICAgZm9yIFVuaXN5cyAuLi4gKGFsc28gc2Vl IFNwZXJyeSkKLSMgICBmb3IgVW5pdmVsIC0gc2VlIFVuaXhXYXJlCi0jICAgZm9yIFVuaXh3YXJl IC0gc2VlIFNDTwotIyA/IGZvciBWYWxpZCBTY2FsZHN0YXIsICJtYWtlIHZhbGlkIgotIyA/IGZv ciBXaGl0ZWNoYXBlbCBNRzAxIEdlbml4IDEuMywgIm1ha2Ugd2hpdGUiCi0jID8gZm9yIFppbG9n IFpFVVMgMy4yMSwgIm1ha2Ugemlsb2ciCi0jCi0jIFRoZSByZXN1bHQgc2hvdWxkIGJlIGEgcnVu bmFibGUgcHJvZ3JhbSBjYWxsZWQgIndlcm1pdCIgaW4gdGhlIGN1cnJlbnQKLSMgZGlyZWN0b3J5 LiAgQWZ0ZXIgc2F0aXNmYWN0b3J5IHRlc3RpbmcsIHlvdSBjYW4gcmVuYW1lIHdlcm1pdCB0byAi a2VybWl0IgotIyBhbmQgcHV0IGl0IGluIHNvbWUgZGlyZWN0b3J5IHRoYXQncyBpbiBldmVyeWJv ZHkncyBQQVRILCBzdWNoIGFzCi0jIC91c3IvbG9jYWwgb3IgL29wdC9sb2NhbC4KLSMKLSMgVG8g cmVtb3ZlIGludGVybWVkaWF0ZSBhbmQgb2JqZWN0IGZpbGVzLCAibWFrZSBjbGVhbiIuCi0jIElm IHlvdXIgQyBjb21waWxlciBwcm9kdWNlcyBmaWxlcyB3aXRoIGFuIGV4dGVuc2lvbiBvdGhlciB0 aGFuICJvIiwKLSMgdGhlbiAibWFrZSBjbGVhbiBFWFQ9dSIsICJtYWtlIGNsZWFuIEVYVD1zIiwg b3Igd2hhdGV2ZXIuCi0jCi0jIFRvIHJ1biBsaW50IG9uIHRoZSBzb3VyY2UgZmlsZXMsICJtYWtl IGxpbnRzdW4iLCAibWFrZSBsaW50YnNkIiwKLSMgIm1ha2UgbGludHM1IiwgYXMgYXBwcm9wcmlh dGUuCi0jCi0jICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyBTRUNVUkUgVEFSR0VU UwotIwotIyBCZWdpbm5pbmcgd2l0aCBDLUtlcm1pdCA3LjAsIHNlY3VyZSB0YXJnZXRzIGFyZSBp bmNsdWRlZCwgYXMgYXJlIHRoZQotIyBzb3VyY2UgbW9kdWxlcyAoY2t1YXQqLltjaF0sIGNrXyou W2NoXSkgbmVlZGVkIHRvIGJ1aWxkIHRoZW0uICBTZWN1cmUKLSMgdGFyZ2V0IG5hbWVzIGFyZSBs aWtlIHRoZSByZWd1bGFyIG5hbWVzLCBidXQgd2l0aCBzZWN1cml0eSBmZWF0dXJlcwotIyBpbmRp Y2F0ZWQgYnkgcGx1cyAoKykgc2lnbnMuICBUaGUgZmVhdHVyZXMgYXJlOgotIwotIyBrcmI0ICAg ICBNSVQgS2VyYmVyb3MgSVYKLSMga3JiNSAgICAgTUlUIEtlcmJlcm9zIFYKLSMgb3BlbnNzbCAg T3BlblNTTCAoU1NML1RMUykKLSMgemxpYiAgICAgWkxJQiBjb21wcmVzc2lvbiBmb3IgU1NML1RM UwotIyBzcnAgICAgICBTdGFuZm9yZCBTZWN1cmUgUmVtb3RlIFBhc3N3b3JkCi0jIHBhbSAgICAg IFBBTSAocGx1Z2dhYmxlIGF1dGhlbnRpY2F0aW9uIG1vZHVsZSkKLSMgc2hhZG93ICAgU2hhZG93 IFBhc3N3b3JkIEZpbGUKLSMKLSMgWW91IGNhbiBidWlsZCB0aGVzZSB0YXJnZXRzIGlmIHlvdSBo YXZlIHRoZSBLZXJtaXQgc291cmNlIGZpbGVzIGFuZCB0aGUKLSMgcmVxdWlyZWQgbGlicmFyaWVz IChLZXJiZXJvcywgT3BlblNTTCwgU1JQLCBldGMpIGFuZCBoZWFkZXIgZmlsZXMuICBTZWU6Ci0j ICAgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKLSMgZm9yIHNw ZWNpZmljIGRldGFpbHMgcmVnYXJkaW5nIHN1cHBvcnRlZCB2ZXJzaW9ucy4KLSMKLSMgTk9URTog T3BlblNTTCAwLjkuNiBhbmQgZWFybGllciBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCAwLjkuNyBh bmQgbGF0ZXIuCi0jIEMtS2VybWl0IGNvZGUgd2FzIG9yaWdpbmFsbHkgZGVzaWduZWQgZm9yIDAu OS42LiAgVG8gYnVpbGQgd2l0aCAwLjkuNyB5b3UKLSMgbXVzdCBhZGQgLURPUEVOU1NMXzA5NyB0 byBhdm9pZCBtaXNzaW5nIHN5bWJvbHMgaW4gdGhlIERFUyBsaWJyYXJ5IGFuZCB0bwotIyB1c2Ug dGhlIGVudHJ5IHBvaW50cyB0aGF0IHdlcmUgcmVuYW1lZCB0byBhdm9pZCBjb25mbGljdCB3aXRo IEtlcmJlcm9zIDQuCi0jIElmIHlvdSBoYXZlIE9wZW5TU0wgMC45LjgsIGFkZCAtRE9QRU5TU0xf MDk4LCB3aGljaCBpcyBhIHN5bm9ueW0gZm9yCi0jIC1ET1BFTlNTTF8wOTcuICBJZiB5b3UgaGF2 ZSAxLjAuMCBvciBsYXRlciwgYWRkIC1ET1BFTlNTTF8xMDAsIHdoaWNoIGlzCi0jIGFub3RoZXIg c3lub255bS4KLQotIyBJbiBPcGVuU1NMIGJ1aWxkcyBhZGQgLWxkbCBpZiB5b3UgZ2V0IHVucmVz b2x2ZWQgcmVmZXJlbmNlcyBmb3IKLSMgZGxvcGVuLCBkbGNsb3NlLCBkbHN5bSwgYW5kL29yIGRs ZXJyb3IuCi0jCi0jIEluIG9yZGVyIHRvIGJ1aWxkIGEgc2VjdXJlIHZlcnNpb24gb2YgS2VybWl0 LCB5b3UgbmVlZCB0byBrbm93IHRoZSBsb2NhdGlvbgotIyBvZiB0aGUgaGVhZGVyIChpbmNsdWRl KSBmaWxlcyBhbmQgbGlicmFyaWVzIGZvciB0aGUgZGVzaXJlZCBmb3JtIG9mCi0jIHNlY3VyaXR5 LiAgVW5sZXNzIHlvdSBzcGVjaWZ5IGEgbG9jYXRpb24sIHRoaXMgbWFrZWZpbGUgbG9va3MgaW4g L3Vzci9sb2NhbAotIyBhbmQgaWYgdGhlIHJlcXVpcmVkIGZpbGVzIGFyZSBub3QgZm91bmQsIHRo ZSBidWlsZCBmYWlscy4KLSMKLSMgSWYgdGhlIHNlY3VyZSBoZWFkZXJzIGFuZCBsaWJyYXJpZXMg YXJlIG5vdCBvbiB5b3VyIGNvbXB1dGVyLCB5b3UgaGF2ZQotIyB0byBkb3dubG9hZCBhbmQgaW5z dGFsbCB0aGVtLCBmb3IgZXhhbXBsZSBmcm9tIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcgLgotIwot IyBUaGUgZm9sbG93aW5nIHN5bWJvbHMgYXJlIHVzZWQgdG8gc3BlY2lmeSBsaWJyYXJ5IGFuZCBo ZWFkZXIgZmlsZSBsb2NhdGlvbnM6Ci0jIAotcHJlZml4ICA9IC91c3IvbG9jYWwKLXNycHJvb3Qg PSAkKHByZWZpeCkKLXNzbHJvb3QgPSAkKHByZWZpeCkKLW1hbnJvb3QgPSAkKHByZWZpeCkKLQot SzRMSUI9LUwvdXNyL2tlcmJlcm9zL2xpYgotSzRJTkM9LUkvdXNyL2tlcmJlcm9zL2luY2x1ZGUK LUs1TElCPS1ML3Vzci9rZXJiZXJvcy9saWIKLUs1SU5DPS1JL3Vzci9rZXJiZXJvcy9pbmNsdWRl Ci1TUlBMSUI9LUwkKHNycHJvb3QpL2xpYgotU1JQSU5DPS1JJChzcnByb290KS9pbmNsdWRlCi1T U0xMSUI9LUwkKHNzbHJvb3QpL3NzbC9saWIKLVNTTElOQz0tSSQoc3Nscm9vdCkvc3NsL2luY2x1 ZGUKLQotIyBUbyBvdmVycmlkZSB0aGVzZSBhc3NpZ25tZW50czsgZm9yIGV4YW1wbGUsIGlmIHlv dXIgT3BlblNTTCBmaWxlcyBhcmUKLSMgbm90IGluIC91c3IvbG9jYWwvc3NsLCBpbnZva2UgdGhl IGRlc2lyZWQgdGFyZ2V0IGxpa2UgdGhpczoKLSMgCi0jICBtYWtlIHNvbGFyaXM5K29wZW5zc2wg IlNTTElOQz0tSS9vcHQvb3BlbnNzbC0wLjkuOGsvaW5jbHVkZSIgXAotIyAgICJTU0xMSUI9LUwv b3B0L29wZW5zc2wtMC45LjhrL2xpYiIKLSMKLSMgKGRvbid0IHNldCB0aGUgdmFyaWFibGVzIGFu ZCB0aGVuIGRvICJtYWtlIC1lIiBiZWNhdXNlIHRoYXQgYnJlYWtzIAotIyBjaGFpbmluZyBvZiBt YWtlZmlsZSB0YXJnZXRzLikKLSMKLSMgSGVyZSBhcmUgc29tZSB1cC10by1kYXRlIHNlY3VyZSB0 YXJnZXRzIGFzIG9mIFNlcCAyMDA5OiAKLSMKLSMgYWl4K29wZW5zc2w6ICAgICAgICAgICAgICAg ICAgICAgICAgSUJNIEFJWCA0LjIgb3IgbGF0ZXIgd2l0aCBPcGVuU1NMCi0jIGZyZWVic2Q0NCtz cnArb3BlbnNzbCAgICAgICAgICAgICAgIEZyZWVCU0QgNC40IHdpdGggU1JQIGFuZCBPcGVuU1NM Ci0jIGZyZWVic2Q1MCtvcGVuc3NsICAgICAgICAgICAgICAgICAgIEZyZWVCU0QgNS4wIHdpdGgg T3BlblNTTAotIyBocHV4MTEwMG8rb3BlbnNzbDogICAgICAgICAgICAgICAgICBIUC1VWCAxMS54 eCB3aXRoIE9wZW5TU0wKLSMgaHB1eDEwMDBnY2Mrb3BlbnNzbDogICAgICAgICAgICAgICAgSFAt VVggMTAueHggd2l0aCBPcGVuU1NMIChidWlsZCB3aXRoIGdjYykKLSMgaHB1eDExMDBnY2Mrb3Bl bnNzbDogICAgICAgICAgICAgICAgSFAtVVggMTEueHggd2l0aCBPcGVuU1NMIChidWlsZCB3aXRo IGdjYykKLSMgaXJpeDZ4K2tyYjU6ICAgICAgICAgICAgICAgICAgICAgICAgSVJJWCA2Lnggd2l0 aCBLZXJiZXJvcyBWCi0jIGlyaXg2NStrcmI1OiAgICAgICAgICAgICAgICAgICAgICAgIGV0YyBl dGMuLi4KLSMgc29sYXJpczkrb3BlbnNzbCAgICAgICAgICAgICAgICAgICAgU29sYXJpcyA5LDEw LCBvciAxMSB3aXRoIE9wZW5zc2wgKFN1biBjYykKLSMgc29sYXJpczlnK29wZW5zc2wgICAgICAg ICAgICAgICAgICAgU29sYXJpcyA5LDEwLCBvciAxMSB3aXRoIE9wZW5zc2wgKGdjYykKLSMgbGlu dXgrc3NsICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlblNTTCBvbmx5Ci0jIGxpbnV4K2ty YjUrc3NsICAgICAgICAgICAgICAgICAgICAgIExpbnV4IHdpdGggS2VyYmVyb3MgNSBhbmQgT3Bl blNTTAotIyBsaW51eCtrcmI1OiAgICAgICAgICAgICAgICAgICAgICAgICBLZXJiZXJvcyA1IG9u bHkKLSMgCi0jIFRoZSBmb2xsb3dpbmcgc2VjdXJlIExpbnV4IHRhcmdldHMgaGF2ZSBub3QgYmVl biB1cGRhdGVkIG9yIHRlc3RlZCByZWNlbnRseS4KLSMgbGludXgra3JiNStrcmI0OgotIyBsaW51 eCtzcnA6Ci0jIGxpbnV4K3NycCtwYW06Ci0jIGxpbnV4K3NycCtnbXA6Ci0jIGxpbnV4K3NycCtn bXArbm8tZGVzOgotIyBsaW51eCtzcnArZ21wLWV4cG9ydDoKLSMgbGludXgrc3JwK2dtcCtwYW06 Ci0jIGxpbnV4K3NoYWRvdytwYW06Ci0jIGxpbnV4K29wZW5zc2w6Ci0jIGxpbnV4K29wZW5zc2wr c2hhZG93OgotIyBsaW51eCtvcGVuc3NsK3psaWIrc2hhZG93K3BhbToKLSMgbGludXgrc3JwK29w ZW5zc2w6Ci0jIGxpbnV4K2tyYjUra3JiNCtzcnA6Ci0jIGxpbnV4K2tyYjUra3JiNCtzcnArb3Bl bnNzbDoKLSMgbGludXgra3JiNStrcmI0K29wZW5zc2w6Ci0jIGxpbnV4K2tyYjUra3JiNCtvcGVu c3NsK3NoYWRvdzoKLSMgbGludXgra3JiNStrcmI0K29wZW5zc2wremxpYitzaGFkb3c6Ci0jIGxp bnV4K2tyYjUra3JiNCtzcnAtZXhwb3J0OgotIyBsaW51eCtrcmI1K2tyYjQrc3JwK3BhbToKLSMg bGludXgra3JiNStrcmI0K3NycCtvcGVuc3NsK3BhbS1kZWJ1ZzoKLSMgbGludXgra3JiNStrcmI0 K3NycCtvcGVuc3NsK3BhbToKLSMgbGludXgra3JiNStrcmI0K3NycCtvcGVuc3NsK3psaWIrcGFt OgotIyBsaW51eCtrcmI1K2tyYjQrb3BlbnNzbCtzaGFkb3crcGFtOgotIyBsaW51eCtrcmI1K29w ZW5zc2wremxpYitzaGFkb3crcGFtOgotIyAKLSMgVGhlIGZvbGxvd2luZyBoYXZlIG5vdCBiZWVu IHRlc3RlZCByZWNlbnRseSBlaXRoZXIgYW5kIG1pZ2h0Ci0jIG5lZWQgYWRqdXN0bWVudC4KLSMK LSMgbWFjb3N4K2tyYjUrc3NsOiAgICAgTWFjIE9TIFggMTAuMy45IG9yIGxhdGVyICsgT3BlblNT TCBhbmQgS2VyYmVyb3MgNQotIyBtYWNvc3gxMDMrc2VjdXJlOiAgICBUaGlzIG9uZSBpcyBwcm9i YWJseSByZWR1bmRhbnQKLSMgbmV0YnNkK29wZW5zc2w6ICAgICAgTmV0QlNEIHdpdGggT3BlblNT TAotIyBvcGVuYnNkMzArc3NsOiAgICAgICBPcGVuQlNEIDMuMCB3aXRoIE9wZW5TU0wKLSMgcmVk aGF0NzEscmVkaGF0NzIscmVkaGF0NzMscmVkaGF0ODAscmVkaGF0OSAoS3JiNSxPcGVuU1NMLFNo b3dkb3csUEFNLFpsaWIpCi0jIHNjbzMydjUwMG5ldCtzc2w6Ci0jIHNjbzMydjUwNW5ldCtzc2w6 Ci0jIHNvbGFyaXMyeCtrcmI0OgotIyBzb2xhcmlzMnhnK2tyYjQ6Ci0jIHNvbGFyaXMyeGcrb3Bl bnNzbCtwYW0rc2hhZG93OgotIyBzb2xhcmlzMnhnK29wZW5zc2wremxpYitwYW0rc2hhZG93Ogot IyBzb2xhcmlzMnhnK2tyYjUra3JiNCtvcGVuc3NsK3NoYWRvdzoKLSMgc29sYXJpczI1K2tyYjQ6 Ci0jIHNvbGFyaXMyNWcra3JiNDoKLSMgc29sYXJpczI2ZytvcGVuc3NsOgotIyBzb2xhcmlzOGcr b3BlbnNzbCt6bGliK3BhbStzaGFkb3c6Ci0jIHNvbGFyaXM4ZytrcmI0OgotIyBzb2xhcmlzOWcr b3BlbnNzbCt6bGliK3BhbStzaGFkb3c6Ci0jIHNvbGFyaXM5ZytvcGVuc3NsK3NoYWRvdytwYW0r emxpYgotIyBzdW5vczQxZ2NjK2tyYjQ6ICAgICAgICAgICAgICAgICAgICBTdW5PUyA0LjEgYnVp bHQgd2l0aCBnY2Mgd2l0aCBLZXJiZXJvcyBJVgotIyBzdW5vczQxZ2NjK29wZW5zc2w6ICAgICAg ICAgICAgICAgICBTdW5PUyA0LjEgYnVpbHQgd2l0aCBnY2Mgd2l0aCBPcGVuU1NMCi0jIHN1bm9z NDFnY2Mra3JiNCtvcGVuc3NsOiAgICAgICAgICAgIC4uLndpdGggS2VyYmVyb3MgSVYgYW5kIE9w ZW5TU0wKLSMgc3Vub3M0MWdjYytrcmI0K29wZW5zc2wremxpYjogICAgICAgZGl0dG8sIHBsdXMg WkxJQiBjb21wcmVzc2lvbgotIyBzdW5vczQxZ2NjK2tyYjQrc3JwK29wZW5zc2wremxpYjogICBk aXR0bywgcGx1cyBTUlAKLSMgc3Vub3M0MWdjYytzcnArb3BlbnNzbCt6bGliOgotIyB0cnU2NC01 MWItb3BlbnNzbDogICAgICAgICAgICAgICAgICBUcnU2NCAoRGlnaXRhbCkgVW5peCA1LjFCIHdp dGggT3BlblNTTAotIyB1dzdzc2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbml4d2Fy ZSA3IHdpdGggU1NMCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgIENvbXBpbGUgYW5kIExp bmsgdmFyaWFibGVzOgotIwotIyAgRVhUIGlzIHRoZSBleHRlbnNpb24gKGZpbGUgdHlwZSkgZm9y IG9iamVjdCBmaWxlcywgbm9ybWFsbHkgby4KLSMgIFNlZSBNSU5JWCBlbnRyeSBmb3Igd2hhdCB0 byBkbyBpZiBhbm90aGVyIGZpbGV0eXBlIG11c3QgYmUgdXNlZC4KLSMKLUVYVD1vCi0jTE5LRkxB R1M9Ci1TSEFSRURMSUI9Ci1DQz0gY2MKLUNDMj0gY2MKLU1BS0U9IG1ha2UKLVNIRUxMPS9iaW4v c2gKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIChBbmNpZW50KSBVTklYIFY3LXNwZWNpZmljIHZh cmlhYmxlcy4KLSMgVGhlc2UgYXJlIHNldCB1cCBmb3IgUGVya2luLUVsbWVyIDMyMzAgVjcgVW5p eDoKLSMKLVBST0M9cHJvYwotRElSRUNUPQotTlBST0M9bnByb2MKLU5QVFlQRT1pbnQKLUJPT1RG SUxFPS9lZGl0aW9uNwotIwotIyAoIEZvciBvbGQgVGFuZHkgVFJTLTgwIE1vZGVsIDE2QSBvciA2 MDAwIFY3LWJhc2VkIFhlbml4LCB1c2UgUFJPQz1fcHJvYywKLSMgICBESVJFQ1Q9LURESVJFQ1Qs IE5QUk9DPV9OcHJvYywgTlBUWVBFPXNob3J0LCBCT09URklMRT0veGVuaXggKQotIwotCi0jIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKLSMgU0FNUExFIElOU1RBTExBVElPTiBTQ1JJUFQKLSMKLSMgTW9kaWZ5 IHRvIHN1aXQgeW91ciBvd24gY29tcHV0ZXIncyBmaWxlIG9yZ2FuaXphdGlvbiBhbmQgcGVybWlz c2lvbnMuICBJZgotIyB5b3UgZG9uJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhlIGRlc3RpbmF0 aW9uIGRpcmVjdG9yaWVzLCAibWFrZSBpbnN0YWxsIgotIyBmYWlscy4gIEluIG1vc3QgY2FzZXMs IGEgcmVhbCBpbnN0YWxsYXRpb24gYWxzbyByZXF1aXJlcyB5b3UgdG8gY2hvd24gLwotIyBjaGdy cCB0aGUgS2VybWl0IGJpbmFyeSBmb3IgdGhlIFVVQ1AgbG9ja2ZpbGUgYW5kL29yIHR0eSBkZXZp Y2VzLCBhbmQKLSMgcGVyaGFwcyBhbHNvIHRvIGNobW9kICtzIHRoZSBjb3JyZXNwb25kaW5nIHBl cm1pc3Npb24gZmllbGRzLgotIwotIyBEZWZhdWx0IGJpbmFyeSwgbWFuLCBhbmQgZG9jIGRpcmVj dG9yaWVzIGFyZSBzdXBwbGllZCBiZWxvdy4gIFlvdSBjYW4KLSMgb3ZlcnJpZGUgdGhlbSBpbiB5 b3VyICdtYWtlJyBjb21tYW5kLiAgRXhhbXBsZXM6Ci0jCi0jICAgbWFrZSBpbnN0YWxsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFjY2VwdCBkZWZhdWx0cy4KLSMgICBtYWtl ICJJTkZPRElSPS91c3Ivc2hhcmUvbGliL2tlcm1pdCIgaW5zdGFsbCAgICMgT3ZlcnJpZGUgSU5G T0RJUiBkZWZhdWx0LgotIwotIyBZb3UgY2FuIGFsc28gYnVpbGQgYW5kIGluc3RhbGwgaW4gb25l IHN0ZXAsIGUuZy46Ci0jCi0jICAgbWFrZSBsaW51eCBpbnN0YWxsCi0jCi0jIElmIHlvdSB1c2Ug dGhlICdpbnN0YWxsJyB0YXJnZXQgdG8gaW5zdGFsbCBDLUtlcm1pdCwgaXQgY3JlYXRlcyBhbgot IyBVTklOU1RBTEwgc2NyaXB0IHRoYXQgY2FuIGJlIHVzZWQgdG8gdW5pbnN0YWxsIGl0LgotIwot V0VSTUlUID0gbWFrZXdoYXQKLUJJTkFSWSA9IHdlcm1pdAotREVTVERJUiA9Ci1CSU5ESVIgPSAk KHByZWZpeCkvYmluCi1NQU5ESVIgPSAkKG1hbnJvb3QpL21hbi9tYW4xCi1NQU5FWFQgPSAxCi1T UkNESVIgPQotSU5GT0RJUiA9Ci1DRVJURElSID0KLQotVEVYVEZJTEVTID0gQ09QWUlORy5UWFQg Y2tjYndyLnR4dCBja3Vid3IudHh0IGNrdWlucy50eHQgY2tjY2ZnLnR4dCBcCi0JCWNrY3BsbS50 eHQgY2tlcm1pdC5pbmkgY2tlcm1vZC5pbmkgY2tlcm1pdDcwLnR4dCBja2VybWl0ODAudHh0Ci0K LUFMTCA9ICQoV0VSTUlUKQotCi1hbGw6ICQoQUxMKQotCi0uYy5vOgotCSQoQ0MpICQoQ0ZMQUdT KSAtREtUQVJHRVQ9XCIkKEtUQVJHRVQpXCIgLWMgJDwKLQotI0NsZWFuIHVwIGludGVybWVkaWF0 ZSBhbmQgb2JqZWN0IGZpbGVzCi1jbGVhbjoKLQlAZWNobyAnUmVtb3Zpbmcgb2JqZWN0IGZpbGVz Li4uJwotCS1ybSAtZiBja2NtYWkuJChFWFQpIGNrdWNtZC4kKEVYVCkgY2t1dXNyLiQoRVhUKSBj a3V1czIuJChFWFQpIFwKLWNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQp IGNrY3Byby4kKEVYVCkgY2tjZm5zLiQoRVhUKSBcCi1ja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVY VCkgY2t1eGxhLiQoRVhUKSBja3Vjb24uJChFWFQpIGNrdXRpby4kKEVYVCkgXAotY2t1ZmlvLiQo RVhUKSBja3VkaWEuJChFWFQpIGNrdXNjci4kKEVYVCkgY2t3YXJ0LiQoRVhUKSBja3V1c3guJChF WFQpIFwKLWNrdXVzeS4kKEVYVCkgY2tjbmV0LiQoRVhUKSBja3V1czYuJChFWFQpIGNrdXVzNy4k KEVYVCkgY2t1c2lnLiQoRVhUKSBcCi1ja3VjbnMuJChFWFQpIGNrY21kYi4kKEVYVCkgY2t1YXRo LiQoRVhUKSBja2N0ZWwuJChFWFQpIGNrY2xpYi4kKEVYVCkgXAotY2tjdW5pLiQoRVhUKSBja19j cnAuJChFWFQpIGNrX3NzbC4kKEVYVCkgY2t1cHR5LiQoRVhUKSBja2NmdHAuJChFWFQpIFwKLWNr Y3Byby5jIHdhcnQKLQotc2hvdzoKLQlAZWNobyBwcmVmaXg9JChwcmVmaXgpCi0JQGVjaG8gc3Jw cm9vdD0kKHNycHJvb3QpCi0JQGVjaG8gc3Nscm9vdD0kKHNzbHJvb3QpCi0JQGVjaG8gbWFucm9v dD0kKG1hbnJvb3QpCi0JQGVjaG8gSzRMSUI9JChLNExJQikKLQlAZWNobyBLNElOQz0kKEs0SU5D KQotCUBlY2hvIEs1TElCPSQoSzVMSUIpCi0JQGVjaG8gSzVJTkM9JChLNUlOQykKLQlAZWNobyBT UlBMSUI9JChTUlBMSUIpCi0JQGVjaG8gU1JQSU5DPSQoU1JQSU5DKQotCUBlY2hvIFNTTExJQj0k KFNTTExJQikKLQlAZWNobyBTU0xJTkM9JChTU0xJTkMpCi0JQGV4aXQKLQotIyBJbnN0YWxsIEMt S2VybWl0IGFmdGVyIGJ1aWxkaW5nIC0tIElNUE9SVEFOVDogUmVhZCB0aGUgaW5zdHJ1Y3Rpb25z IGFib3ZlCi0jIChTQU1QTEUgSU5TVEFMTEFUSU9OIFNDUklQVCkuICBGb3IgU1NML1RMUyB2ZXJz aW9ucywgY2FfY2VydHMucGVtIGZpbGUKLSMgc2hvdWxkIGJlIGluc3RhbGxlZCBpbiB0aGUgYXBw cm9wcmlhdGUgcGxhY2UgZm9yIHlvdXIgT3BlblNTTCBsaWJyYXJ5LCBlLmcuOgotIwotIyAgIGNw IGNhX2NlcnRzLnBlbSAvdXNyL2xvY2FsL3NzbC8KLSMgICBjcCBjYV9jZXJ0cy5wZW0gL3Vzci9z aGFyZS9zc2wvCi0jCi0jIFRvIG1ha2Ugc3VyZSAnbWFuJyBub3RpY2VzIHRoZSBuZXcgc291cmNl IGZpbGUgYW5kIGRvZXNuJ3Qga2VlcAotIyBzaG93aW5nIHRoZSBvbGQgZm9ybWF0dGVkIHZlcnNp b24sIHJlbW92ZSB0aGUgb2xkIGZvcm1hdHRlZCB2ZXJzaW9uLAotIyBzb21ldGhpbmcgbGlrZSB0 aGlzOgotIwkJcm0gLWYgJChNQU5ESVIpLy4uL2NhdCQoTUFORVhUKS9rZXJtaXQuJChNQU5FWFQp Ci0jIG9yIHRoaXMgKHdoaWNoIHJlcXVpcmVzIENBVERJUiB0byBiZSBkZWZpbmVkKToKLSMJCXJt IC1mICQoQ0FURElSKS9rZXJtaXQuJChNQU5FWFQpCi0jCi0jIEFzIG9mIEMtS2VybWl0IDguMC4y MDUgdGhpcyB0YXJnZXQgYWxzbyBidWlsZHMgYW4gVU5JTlNUQUxMIHNjcmlwdCwgYW5kCi0jIHNv IGl0IG1pZ2h0IGJlIHRvbyBsb25nIGZvciBzb21lIG9sZCBCb3VybmUgc2hlbGxzLCBpbiB3aGlj aCBjYXNlIHlvdSBjYW4KLSMgdXNlIGEgZGlmZmVyZW50IHNoZWxsOgotIwotIyAgIG1ha2UgU0hF TEw9a3NoIGluc3RhbGwKLSMgICBtYWtlIFNIRUxMPS9iaW4vcG9zaXgvc2ggaW5zdGFsbAotIwot aW5zdGFsbDoKLQlAZWNobyBJbnN0YWxsaW5nIEMtS2VybWl0IHZlcnNpb24gJChDS1ZFUikuLi47 XAotCXJtIC1mIFVOSU5TVEFMTDtcCi0JZXhlYyAzPi4vVU5JTlNUQUxMO1wKLQllY2hvICIjIEMt S2VybWl0IFVOSU5TVEFMTCBzY3JpcHQiID4mMztcCi0JZWNobyAiIyBgZGF0ZWBcbiIgPiYzO1wK LQllY2hvICJDS1ZFUj0kKENLVkVSKSIgPiYzO1wKLQllY2hvICJQck4gVW5pbnN0YWxsaW5nIEMt S2VybWl0IHZlcnNpb24gJChDS1ZFUikuLi4iID4mMztcCi0JZWNobyBERVNURElSPSQoREVTVERJ Uik7XAotCWlmIHRlc3QgLW4gIiQoREVTVERJUikiOyB0aGVuXAotCQlpZiB0ZXN0IC1kICQoREVT VERJUik7IHRoZW5cCi0JCQllY2hvICAiJChERVNURElSKSBleGlzdHMuLi5cbiI7XAotCQllbHNl XAotCQkJZWNobyAiQ3JlYXRpbmcgJChERVNURElSKS4uLiI7XAotCQkJREVTVERJUj1gZWNobyAk KERFU1RESVIpIHwgc2VkICdzIS8qJCQhISdgO1wKLQkJCW1rZGlyICQkREVTVERJUiAgfHwgZXhp dCAxO1wKLQkJZmk7XAotCQljaG1vZCA3NTUgJChERVNURElSKSB8fCBleGl0IDE7XAotCWZpO1wK LQllY2hvIEJJTkFSWT0kKEJJTkFSWSk7XAotCWlmIHRlc3QgLWYgJChCSU5BUlkpOyB0aGVuXAot CQlscyAtbCAkKEJJTkFSWSk7XAotCWVsc2VcCi0JCWVjaG8gIj8kKEJJTkFSWSkgbm90IGZvdW5k IjtcCi0JCWV4aXQgMTtcCi0JZmk7XAotCWlmIHRlc3QgLXogIiQoREVTVERJUikkKEJJTkRJUiki OyB0aGVuXAotCQllY2hvICJCaW5hcnkgZGlyZWN0b3J5IG5vdCBzcGVjaWZpZWQiO1wKLQkJZXhp dCAxO1wKLQlmaTtcCi0JaWYgdGVzdCAtZCAkKERFU1RESVIpJChCSU5ESVIpOyB0aGVuXAotCQll Y2hvICAiJChERVNURElSKSQoQklORElSKSBleGlzdHMuLi4iO1wKLQllbHNlXAotCQllY2hvICJD cmVhdGluZyAkKERFU1RESVIpJChCSU5ESVIpLy4uLiI7XAotCQlta2RpciAgICAgJChERVNURElS KSQoQklORElSKSB8fCBleGl0IDE7XAotCQljaG1vZCA3NTUgJChERVNURElSKSQoQklORElSKTtc Ci0JZmk7XAotCXJtIC1mICQoREVTVERJUikkKEJJTkRJUikva2VybWl0O1wKLQljcCAkKEJJTkFS WSkgJChERVNURElSKSQoQklORElSKS9rZXJtaXQgfHwgZXhpdCAxO1wKLQljaG1vZCA3NTUgICAg JChERVNURElSKSQoQklORElSKS9rZXJtaXQgfHwgZXhpdCAxO1wKLQlybSAtZiAgICAgICAgJChE RVNURElSKSQoQklORElSKS9rZXJtaXQtc3Noc3ViO1wKLQlsbiAtcyAgICAgICAgJChERVNURElS KSQoQklORElSKS9rZXJtaXRcCi0JCSAgICAgJChERVNURElSKSQoQklORElSKS9rZXJtaXQtc3No c3ViIHx8IGV4aXQgMTtcCi0JZWNobyAnc2V0IGZsYWc9ZlxuUHJDIFJlbW92aW5nIGJpbmFyaWVz JyA+JjM7XAotCWVjaG8gIlJtRiAkKERFU1RESVIpJChCSU5ESVIpL2tlcm1pdC1zc2hzdWIiID4m MztcCi0JZWNobyAiUm1GICQoREVTVERJUikkKEJJTkRJUikva2VybWl0IiA+JjM7XAotCWlmIHRl c3QgLWYgY2tlcm1pdC5pbmk7IHRoZW5cCi0JCWVjaG8gIiMhJChCSU5ESVIpL2tlcm1pdCIgPlwK LQkJCSQoREVTVERJUikkKEJJTkRJUikvX3RtcC5pbmk7XAotCQljYXQgY2tlcm1pdC5pbmkgPj4g JChERVNURElSKSQoQklORElSKS9fdG1wLmluaTtcCi0JCW12ICQoREVTVERJUikkKEJJTkRJUikv X3RtcC5pbmlcCi0JCSAgICQoREVTVERJUikkKEJJTkRJUikvY2tlcm1pdC5pbmk7XAotCQljaG1v ZCA3NTUgJChERVNURElSKSQoQklORElSKS9ja2VybWl0LmluaTtcCi0JCWVjaG8gIlJtRiAkKERF U1RESVIpJChCSU5ESVIpL2NrZXJtaXQuaW5pIiA+JjM7XAotCWZpO1wKLQllY2hvO1wKLQllY2hv ICdFZk0nID4mMztcCi0JZWNobyAiS2VybWl0IGJpbmFyeSBpbnN0YWxsZWQ6IjtcCi0JbHMgLWwg JChERVNURElSKSQoQklORElSKS9rZXJtaXRcCi0JICAgICAgJChERVNURElSKSQoQklORElSKS9r ZXJtaXQtc3Noc3ViXAotCSAgICAgICQoREVTVERJUikkKEJJTkRJUikvY2tlcm1pdC5pbmk7XAot CWVjaG87XAotCWVjaG8gIiBXQVJOSU5HOiBJZiBDLUtlcm1pdCBpcyB0byBiZSB1c2VkIGZvciBk aWFsaW5nIG91dCwiO1wKLQllY2hvICIgeW91IG11c3QgY2hhbmdlIGl0cyBvd25lciBhbmQgZ3Jv dXAgYW5kIHBlcm1pc3Npb25zIjtcCi0JZWNobyAiIHRvIG1hdGNoIHRoZSAnY3UnIHByb2dyYW0u ICBTZWUgdGhlIGNrdWlucy50eHQgZmlsZSI7XAotCWVjaG8gIiBmb3IgZGV0YWlscy4iO1wKLQll Y2hvO1wKLQllY2hvIE1BTkRJUj0kKE1BTkRJUik7XAotCWlmIHRlc3QgLW4gIiQoREVTVERJUikk KE1BTkRJUikiOyB0aGVuXAotCQlpZiB0ZXN0IC1kICQoREVTVERJUikkKE1BTkRJUik7IHRoZW5c Ci0JCQllY2hvICAiJChERVNURElSKSQoTUFORElSKSBleGlzdHMuLi4iO1wKLQkJZWxzZVwKLQkJ CWVjaG8gIkNyZWF0aW5nICQoTUFORElSKS4uLiI7XAotCQkJbWtkaXIgJChNQU5ESVIpIHx8IGV4 aXQgMTtcCi0JCQljaG1vZCA3NTUgJChNQU5ESVIpIHx8IGV4aXQgMTtcCi0JCWZpO1wKLQkJcm0g LWYgJChERVNURElSKSQoTUFORElSKS9rZXJtaXQuJChNQU5FWFQpO1wKLQkJY3AgY2t1a2VyLm5y ICQoREVTVERJUikkKE1BTkRJUikva2VybWl0LiQoTUFORVhUKSB8fCBleGl0IDE7XAotCQljaG1v ZCA2NDQgJChERVNURElSKSQoTUFORElSKS9rZXJtaXQuJChNQU5FWFQpIHx8IGV4aXQgMTtcCi0J CWVjaG8gJ3NldCBmbGFnPWZcblByQyBSZW1vdmluZyBtYW4gcGFnZXMnID4mMztcCi0JCWVjaG8g IlJtRiAkKERFU1RESVIpJChNQU5ESVIpL2tlcm1pdC4kKE1BTkVYVCkiID4mMztcCi0JCWVjaG8g J0VmTScgPiYzO1wKLQkJZWNobztcCi0JZWxzZVwKLQkJZWNobyAiTm90IGluc3RhbGxpbmcgbWFu IHBhZ2UhXG4iO1wKLQlmaTtcCi0JZWNobyBDRVJURElSPSQoQ0VSVERJUik7XAotCWlmIHRlc3Qg LW4gIiQoQ0VSVERJUikiOyB0aGVuXAotCQlpZiB0ZXN0IC1mIGNhX2NlcnRzLnBlbTsgdGhlblwK LQkJCWlmIHRlc3QgLWQgJChDRVJURElSKTsgdGhlblwKLQkJCQllY2hvICAiJChDRVJURElSKSBl eGlzdHMuLi4iO1wKLQkJCWVsc2VcCi0JCQkJZWNobyAiQ3JlYXRpbmcgJChDRVJURElSKS4uLiI7 XAotCQkJCW1rZGlyICQoQ0VSVERJUikgfHwgZXhpdCAxO1wKLQkJCQljaG1vZCA3NTUgJChDRVJU RElSKSB8fCBleGl0IDE7XAotCQkJZmk7XAotCQkJZWNobyAiSW5zdGFsbGluZyBjZXJ0aWZpY2F0 ZXMgZmlsZS4uLiI7XAotCQkJY3AgY2FfY2VydHMucGVtICQoQ0VSVERJUikgfHwgZXhpdCAxO1wK LQkJCWVjaG8gJ3NldCBmbGFnPWYnID4mMztcCi0JCQllY2hvICdQckMgUmVtb3ZpbmcgY2VydGlm aWNhdGVzIGZpbGUnID4mMztcCi0JCQllY2hvICJSbUYgJChDRVJURElSKS9jYV9jZXJ0cy5wZW0i ID4mMztcCi0JCQllY2hvICdFZk0nID4mMztcCi0JCQllY2hvO1wKLQkJZmk7XAotCWVsc2VcCi0J CWVjaG8gIk5vdCBpbnN0YWxsaW5nIGNlcnRpZmljYXRlcyBmaWxlIVxuIjtcCi0JZmk7XAotCWVj aG8gU1JDRElSPSQoREVTVERJUikkKFNSQ0RJUik7XAotCWlmIHRlc3QgLW4gIiQoU1JDRElSKSI7 IHRoZW5cCi0JCWVjaG8gIkluc3RhbGxpbmcgc291cmNlIGZpbGVzLi4uIjtcCi0JCWlmIHRlc3Qg LWQgJChERVNURElSKSQoU1JDRElSKTsgdGhlblwKLQkJCWVjaG8gICIkKERFU1RESVIpJChTUkNE SVIpIGV4aXN0cy4uLiI7XAotCQllbHNlXAotCQkJZWNobyAiQ3JlYXRpbmcgJChERVNURElSKSQo U1JDRElSKS8uLi4iO1wKLQkJCW1rZGlyICAgICAkKERFU1RESVIpJChTUkNESVIpIHx8IGV4aXQg MTtcCi0JCQljaG1vZCA3NTUgJChERVNURElSKSQoU1JDRElSKTtcCi0JCWZpO1wKLQkJZWNobyAi Q29weWluZyBzb3VyY2UgZmlsZXMgdG8gJChERVNURElSKSQoU1JDRElSKS4uLiI7XAotCQllY2hv ICdzZXQgZmxhZz1mXG5QckMgUmVtb3Zpbmcgc291cmNlIGZpbGVzJyA+JjM7XAotCQlmb3IgVGV4 dEZpbGUgaW4gQ09QWUlORy5UWFQgY2tbY3V3X10qLltjd2hdIG1ha2VmaWxlOyBkb1wKLQkJCWNw ICQkVGV4dEZpbGUgJChERVNURElSKSQoU1JDRElSKS8gJiYgZWNobyAiLlxjIjtcCi0JCQllY2hv ICJSbUYgJChERVNURElSKSQoU1JDRElSKS8kJFRleHRGaWxlIiA+JjM7XAotCQlkb25lOyBlY2hv O1wKLQkJZWNobyAnRWZNJyA+JjM7XAotCQkoIGNkICQoREVTVERJUikkKFNSQ0RJUikvICYmXAot CQlscyAtbCBDT1BZSU5HLlRYVCBja1tjdXdfXSouW2N3aF0gbWFrZWZpbGUgKTtlY2hvO1wKLQll bHNlXAotCQllY2hvICJOb3QgaW5zdGFsbGluZyBzb3VyY2UgY29kZSFcbiI7XAotCWZpO1wKLQll Y2hvIElORk9ESVI9JChERVNURElSKSQoSU5GT0RJUik7XAotCWlmIHRlc3QgLW4gIiQoSU5GT0RJ UikiOyB0aGVuXAotCQllY2hvICJJbnN0YWxsaW5nIGluZm8gZmlsZXMuLi4iO1wKLQkJaWYgdGVz dCAtZCAkKERFU1RESVIpJChJTkZPRElSKTsgdGhlblwKLQkJCWVjaG8gICIkKERFU1RESVIpJChJ TkZPRElSKSBleGlzdHMuLi4iO1wKLQkJZWxzZVwKLQkJCWVjaG8gIkNyZWF0aW5nICQoREVTVERJ UikkKElORk9ESVIpLy4uLiI7XAotCQkJbWtkaXIgICAgICQoREVTVERJUikkKElORk9ESVIpIHx8 IGV4aXQgMTtcCi0JCQljaG1vZCA3NTUgJChERVNURElSKSQoSU5GT0RJUik7XAotCQlmaTtcCi0J CWVjaG8gIkNvcHlpbmcgdGV4dCBmaWxlcyB0byAkKERFU1RESVIpJChJTkZPRElSKS4uLiI7XAot CQllY2hvICdzZXQgZmxhZz1mXG5QckMgUmVtb3ZpbmcgdGV4dCBmaWxlcycgPiYzO1wKLQkJRmls ZUNvcHlMaXN0PScnO1wKLQkJZm9yIFRleHRGaWxlIGluICQoVEVYVEZJTEVTKTsgZG9cCi0JCQl0 ZXN0IC1mICQkVGV4dEZpbGUgfHwgY29udGludWU7XAotCQkJY3AgJCRUZXh0RmlsZSAkKERFU1RE SVIpJChJTkZPRElSKSAmJiBlY2hvICIuXGMiICYmXAotCQkJRmlsZUNvcHlMaXN0PSIkJEZpbGVD b3B5TGlzdCAkJFRleHRGaWxlIjtcCi0JCQllY2hvICJSbUYgJChERVNURElSKSQoSU5GT0RJUikv JCRUZXh0RmlsZSIgPiYzO1wKLQkJZG9uZTsgZWNobztcCi0JCWVjaG8gJ0VmTScgPiYzO1wKLQkJ KCBjZCAkKERFU1RESVIpJChJTkZPRElSKS8gJiYgY2htb2QgIDY0NCAgICQkRmlsZUNvcHlMaXN0 ICk7XAotCQkoIGNkICQoREVTVERJUikkKElORk9ESVIpLyAmJiBwd2QgJiYgbHMgLWwgJCRGaWxl Q29weUxpc3QgKTtcCi0JZWxzZVwKLQkJZWNobyAiTm90IGluc3RhbGxpbmcgdGV4dCBmaWxlcyFc biI7XAotCWZpO1wKLQllY2hvICJzZXQgZmxhZz1kXG5Qck4gUmVtb3ZpbmcgZW1wdHkgZGlycy4u LiIgPiYzO1wKLQllY2hvICJSbUQgJChERVNURElSKSQoQklORElSKSIgPiYzO1wKLQllY2hvICJS bUQgJChERVNURElSKSQoU1JDRElSKSIgPiYzO1wKLQllY2hvICJSbUQgJChERVNURElSKSQoSU5G T0RJUikiID4mMztcCi0JZWNobyAiUm1EICQoQ0VSVERJUikiID4mMztcCi0JZWNobyAiUm1EICQo TUFORElSKSIgPiYzO1wKLQllY2hvICJSbUQgJChERVNURElSKSIgPiYzO1wKLQllY2hvICJFZk0i ID4mMztcCi0JZWNobyAiUHJOIEMtS2VybWl0IHZlcnNpb24gJChDS1ZFUikgaXMgdW5pbnN0YWxs ZWQhIiA+JjM7XAotCWVjaG8gQy1LZXJtaXQgdmVyc2lvbiAkKENLVkVSKSBpbnN0YWxsZWQhCi0K LSMgVU4tSW5zdGFsbCBDLUtlcm1pdCBhZnRlciBidWlsZGluZwotIyBQbGVhc2UgdG8gbm90IHJl bW92ZSB0aGUgZXh0cmEgYmxhbmtzIGJlZm9yZSBhbmQgYWZ0ZXIgJ3t9JyB3aXRoaW4gdGhlCi0j IGZ1bmN0aW9ucy4gWW91IHdvdWxkIGdldCBzeW50YXggZXJyb3JzIGZvciBzb21lIG9sZGVyIEJv dXJuZSBzaGVsbHMhIEJlc3QgaXMgCi0jIHlvdSBkb24ndCBjaGFuZ2Ugb3IgcmVtb3ZlIGFueXRo aW5nLgotIwotdW5pbnN0YWxsOgotCUBpZiB0ZXN0ICEgLWYgVU5JTlNUQUxMOyB0aGVuXAotCQll Y2hvICI/Qy1LZXJtaXQgVU5JTlNUQUxMIGRhdGEgZmlsZSBub3QgZm91bmQhIjtcCi0JCWV4aXQg MTtcCi0JZmk7IFwKLQlYPWBncmVwICdeQ0tWRVI9JyQoQ0tWRVIpJyQkJyAuL1VOSU5TVEFMTCB8 fCA6YDtcCi0JaWYgdGVzdCAteiAiJCRYIjsgdGhlblwKLQkJZWNobyAiP1VOSU5TVEFMTCBmaWxl IGlzIG5vdCBmb3IgQy1LZXJtaXQgdmVyc2lvbiAkKENLVkVSKSI7XAotCQlleGl0IDI7XAotCWZp O1wKLQlQck4gKCkgeyBlY2hvICIkJCoiOyB9O1wKLQlQckMgKCkgeyBlY2hvICIkJCogXGMiOyB9 O1wKLQlSbUYgKCkgeyB0ZXN0IC1mICIkJDEiICYmIHJtIC1mICIkJDEiICYmIGVjaG8gIi5cYyIg JiYgZmxhZz1GIDsgfTtcCi0JUm1EICgpIHsgXAotCWRpcj0kJDE7XAotCXdoaWxlIHRlc3QgLWQg IiQkZGlyIjsgZG9cCi0JCXJtZGlyICIkJGRpciIgMj4mLSB8fCByZXR1cm4gJiYgZWNobyAiJCRk aXIiICYmIGZsYWc9RDtcCi0JCWRpcj1gZWNobyAiJCRkaXIiIHwgc2VkICdzIS9bXi9dKi8qJCQh ISdgO1wKLQlkb25lOyBcCi0JfTtcCi0JRWZNICgpIHsgXAotCWNhc2UgIiQkZmxhZyIgaW5cCi0J CWYpIGVjaG8gIi0gTm90aGluZyB0byByZW1vdmUhIjs7XAotCQlkKSBlY2hvICJOb3RoaW5nIHRv IHJlbW92ZSEiOztcCi0JCUYpIGVjaG8gIiBkb25lIjs7XAotCQlEKSBlY2hvICJkb25lIjs7XAot CWVzYWM7IFwKLQl9O1wKLQl3aGlsZSByZWFkIEFjdCBBcmdzOyBkb1wKLQkJY2FzZSAkJEFjdCBp blwKLQkJCUVmTSkgRWZNOztcCi0JCQlSbUQpIFJtRCAkJEFyZ3M7O1wKLQkJCVJtRikgUm1GICQk QXJnczs7XAotCQkJUHJOKSBQck4gJCRBcmdzOztcCi0JCQlQckMpIFByQyAkJEFyZ3M7O1wKLQkJ CXNldCkgZXZhbCAkJEFyZ3M7O1wKLQkJZXNhYztcCi0JZG9uZSA8IC4vVU5JTlNUQUxMCi0KLW1h a2V3aGF0OgotCUBlY2hvICdtYWtlIHdoYXQ/ICBZb3UgbXVzdCB0ZWxsIHdoaWNoIHBsYXRmb3Jt IHRvIG1ha2UgQy1LZXJtaXQgZm9yLicKLQlAZWNobyBFeGFtcGxlczogbWFrZSBsaW51eCwgbWFr ZSBhaXgsIG1ha2Ugc29sYXJpczEwLCBtYWtlIGhwdXgxMTAwLgotCUBlY2hvIFBsZWFzZSByZWFk IHRoZSBjb21tZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtYWtlZmlsZS4KLQotIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCi0jCi0jIERlcGVuZGVuY2llcyBTZWN0aW9uOgotCi13ZXJtaXQ6CWNrY21h aS4kKEVYVCkgY2tjbGliLiQoRVhUKSBja3VjbWQuJChFWFQpIGNrdXVzci4kKEVYVCkgY2t1dXMy LiQoRVhUKSBcCi0JCWNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIGNr dXVzNi4kKEVYVCkgXAotCQlja3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhU KSBja2Nwcm8uJChFWFQpIFwKLQkJY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIGNrY2ZuMy4k KEVYVCkgY2t1eGxhLiQoRVhUKSBcCi0JCWNrdWNvbi4kKEVYVCkgY2t1dGlvLiQoRVhUKSBja3Vm aW8uJChFWFQpIGNrdWRpYS4kKEVYVCkgXAotCQlja3VzY3IuJChFWFQpIGNrY25ldC4kKEVYVCkg Y2tjdGVsLiQoRVhUKSBja3VzaWcuJChFWFQpIFwKLQkJY2tjdW5pLiQoRVhUKSBja3VwdHkuJChF WFQpIGNrY2Z0cC4kKEVYVCkKLQkkKENDMikgJChMTktGTEFHUykgLW8gd2VybWl0IFwKLQkJY2tj bWFpLiQoRVhUKSBja2NsaWIuJChFWFQpIGNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBcCi0J CWNrY2Zucy4kKEVYVCkgY2tjZm4yLiQoRVhUKSBja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVYVCkg XAotCQlja2Nwcm8uJChFWFQpIGNrdWNtZC4kKEVYVCkgY2t1dXMyLiQoRVhUKSBja3V1czMuJChF WFQpIFwKLQkJY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIGNrdXVzNi4kKEVYVCkgY2t1dXM3 LiQoRVhUKSBcCi0JCWNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBja3V1c3IuJChFWFQpIGNr dWNvbi4kKEVYVCkgXAotCQlja3VkaWEuJChFWFQpIGNrdXNjci4kKEVYVCkgY2tjbmV0LiQoRVhU KSBja2N0ZWwuJChFWFQpIFwKLQkJY2t1c2lnLiQoRVhUKSBja2N1bmkuJChFWFQpIGNrdXB0eS4k KEVYVCkgY2tjZnRwLiQoRVhUKSBcCi0JCSQoTElCUykKLQotIyBQcmVmZXJyZWQgY29uZmlndXJh dGlvbiB3aXRoIHNlbGVjdCgpLWJhc2VkIENPTk5FQ1QKLQoteGVybWl0Oglja2NtYWkuJChFWFQp IGNrY2xpYi4kKEVYVCkgY2t1Y21kLiQoRVhUKSBja3V1c3IuJChFWFQpIGNrdXVzMi4kKEVYVCkg XAotCQlja3V1czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBja3V1czYuJChF WFQpIFwKLQkJY2t1dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgY2tjcHJv LiQoRVhUKSBcCi0JCWNrY2Zucy4kKEVYVCkgY2tjZm4yLiQoRVhUKSBja2NmbjMuJChFWFQpIGNr dXhsYS4kKEVYVCkgXAotCQlja3VjbnMuJChFWFQpIGNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhU KSBja3VkaWEuJChFWFQpIFwKLQkJY2t1c2NyLiQoRVhUKSBja2NuZXQuJChFWFQpIGNrY3RlbC4k KEVYVCkgY2t1c2lnLiQoRVhUKSBcCi0JCWNrY3VuaS4kKEVYVCkgY2t1cHR5LiQoRVhUKSBja2Nm dHAuJChFWFQpIGNrdWF0aC4kKEVYVCkgXAotCQlja19jcnAuJChFWFQpIGNrX3NzbC4kKEVYVCkK LQkkKENDMikgJChMTktGTEFHUykgLW8gd2VybWl0IFwKLQkJY2tjbWFpLiQoRVhUKSBja2NsaWIu JChFWFQpIGNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBcCi0JCWNrY2Zucy4kKEVYVCkgY2tj Zm4yLiQoRVhUKSBja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVYVCkgXAotCQlja2Nwcm8uJChFWFQp IGNrdWNtZC4kKEVYVCkgY2t1dXMyLiQoRVhUKSBja3V1czMuJChFWFQpIFwKLQkJY2t1dXM0LiQo RVhUKSBja3V1czUuJChFWFQpIGNrdXVzNi4kKEVYVCkgY2t1dXM3LiQoRVhUKSBcCi0JCWNrdXVz eC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBja3V1c3IuJChFWFQpIGNrdWNucy4kKEVYVCkgXAotCQlj a3VkaWEuJChFWFQpIGNrdXNjci4kKEVYVCkgY2tjbmV0LiQoRVhUKSBja3VzaWcuJChFWFQpIFwK LQkJY2tjdGVsLiQoRVhUKSBja2N1bmkuJChFWFQpIGNrdXB0eS4kKEVYVCkgY2tjZnRwLiQoRVhU KSBcCi0JCWNrdWF0aC4kKEVYVCkgY2tfY3JwLiQoRVhUKSBja19zc2wuJChFWFQpICQoTElCUykK LQotIyBNYWxsb2MgRGVidWdnaW5nIHZlcnNpb24KLQotbWVybWl0Oglja2NtZGIuJChFWFQpIGNr Y21haS4kKEVYVCkgY2tjbGliLiQoRVhUKSBja3VjbWQuJChFWFQpIGNrdXVzci4kKEVYVCkgXAot CQlja3V1czIuJChFWFQpIGNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQp IFwKLQkJY2t1dXM2LiQoRVhUKSBja3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1dXN5LiQo RVhUKSBcCi0JCWNrY3Byby4kKEVYVCkgY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIGNrY2Zu My4kKEVYVCkgXAotCQlja3V4bGEuJChFWFQpIGNrdWNvbi4kKEVYVCkgY2t1dGlvLiQoRVhUKSBj a3VmaW8uJChFWFQpIFwKLQkJY2t1ZGlhLiQoRVhUKSBja3VzY3IuJChFWFQpIGNrY25ldC4kKEVY VCkgY2tjdGVsLiQoRVhUKSBcCi0JCWNrdXNpZy4kKEVYVCkgY2tjdW5pLiQoRVhUKSBja3VwdHku JChFWFQpIGNrY2Z0cC4kKEVYVCkKLQkkKENDMikgJChMTktGTEFHUykgLW8gbWVybWl0IGNrY21k Yi4kKEVYVCkgY2tjbGliLiQoRVhUKSBja2NtYWkuJChFWFQpXAotCQlja3V0aW8uJChFWFQpIGNr dWZpby4kKEVYVCkgY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIFwKLQkJY2tjZm4zLiQoRVhU KSBja3V4bGEuJChFWFQpIGNrY3Byby4kKEVYVCkgY2t1Y21kLiQoRVhUKSBcCi0JCWNrdXVzMi4k KEVYVCkgY2t1dXMzLiQoRVhUKSBja3V1czQuJChFWFQpIGNrdXVzNS4kKEVYVCkgXAotCQlja3V1 czYuJChFWFQpIGNrdXVzNy4kKEVYVCkgY2t1dXN4LiQoRVhUKSBja3V1c3kuJChFWFQpIFwKLQkJ Y2t1dXNyLiQoRVhUKSBja3Vjb24uJChFWFQpIGNrdWRpYS4kKEVYVCkgY2t1c2NyLiQoRVhUKSBc Ci0JCWNrY25ldC4kKEVYVCkgY2tjdGVsLiQoRVhUKSBja3VzaWcuJChFWFQpIGNrY3VuaS4kKEVY VCkgXAotCQlja3VwdHkuJChFWFQpIGNrY2Z0cC4kKEVYVCkgJChMSUJTKQotCi0jIEtlcmJlcml6 ZWQgVmVyc2lvbiAtIFN1YmplY3QgdG8gVVNBIGV4cG9ydCByZXN0cmljdGlvbnMuCi0KLSMgTk9U RTogV2UgZG9uJ3QgdXNlIHRoaXMgYW55IG1vcmUgLS0gQXMgb2YgMTUgRmViIDIwMDMsIHRoZSAi eGVybWl0IgotIyB0YXJnZXQgaXMgdXNlZCBmb3IgYm90aCBzZWN1cmUgYW5kIHJlZ3VsYXIgdmVy c2lvbi4KLQota3JibWl0Oglja2NtYWkuJChFWFQpIGNrY2xpYi4kKEVYVCkgY2t1Y21kLiQoRVhU KSBja3V1c3IuJChFWFQpIGNrdXVzMi4kKEVYVCkgXAotCQlja3V1czMuJChFWFQpIGNrdXVzNC4k KEVYVCkgY2t1dXM1LiQoRVhUKSBja3V1czYuJChFWFQpIFwKLQkJY2t1dXM3LiQoRVhUKSBja3V1 c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgY2tjcHJvLiQoRVhUKSBcCi0JCWNrY2Zucy4kKEVYVCkg Y2tjZm4yLiQoRVhUKSBja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVYVCkgXAotCQlja3VjbnMuJChF WFQpIGNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBja3VkaWEuJChFWFQpIFwKLQkJY2t1c2Ny LiQoRVhUKSBja2NuZXQuJChFWFQpIGNrY3RlbC4kKEVYVCkgY2t1c2lnLiQoRVhUKSBcCi0JCWNr dWF0aC4kKEVYVCkgY2tfY3JwLiQoRVhUKSBja2N1bmkuJChFWFQpIGNrdXB0eS4kKEVYVCkgXAot CQlja2NmdHAuJChFWFQpIGNrX3NzbC4kKEVYVCkKLQkkKENDMikgJChMTktGTEFHUykgLW8ga3Ji bWl0IGNrY21haS4kKEVYVCkgY2tjbGliLiQoRVhUKSBcCi0JCWNrdXRpby4kKEVYVCkgY2t1Zmlv LiQoRVhUKSBja2NmbnMuJChFWFQpIGNrY2ZuMi4kKEVYVCkgXAotCQlja2NmbjMuJChFWFQpIGNr dXhsYS4kKEVYVCkgY2tjcHJvLiQoRVhUKSBja3VjbWQuJChFWFQpIFwKLQkJY2t1dXMyLiQoRVhU KSBja3V1czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBcCi0JCWNrdXVzNi4k KEVYVCkgY2t1dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgXAotCQlja3V1 c3IuJChFWFQpIGNrdWNucy4kKEVYVCkgY2t1ZGlhLiQoRVhUKSBja3VzY3IuJChFWFQpIFwKLQkJ Y2tjbmV0LiQoRVhUKSBja2N0ZWwuJChFWFQpIGNrdXNpZy4kKEVYVCkgY2t1YXRoLiQoRVhUKSBc Ci0JCWNrX2NycC4kKEVYVCkgY2tjdW5pLiQoRVhUKSBja3VwdHkuJChFWFQpIGNrY2Z0cC4kKEVY VCkgXAotCQlja19zc2wuJChFWFQpICQoTElCUykKLQota3JibWl0LWRlYnVnOglja2NtYWkuJChF WFQpIGNrY2xpYi4kKEVYVCkgY2t1Y21kLiQoRVhUKSBja3V1c3IuJChFWFQpIFwKLQkJY2t1dXMy LiQoRVhUKSBja3V1czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBcCi0JCWNr dXVzNi4kKEVYVCkgY2t1dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgXAot CQlja2Nwcm8uJChFWFQpIGNrY2Zucy4kKEVYVCkgY2tjZm4yLiQoRVhUKSBja2NmbjMuJChFWFQp IFwKLQkJY2t1eGxhLiQoRVhUKSBja3VjbnMuJChFWFQpIGNrdXRpby4kKEVYVCkgY2t1ZmlvLiQo RVhUKSBcCi0JCWNrdWRpYS4kKEVYVCkgY2t1c2NyLiQoRVhUKSBja2NuZXQuJChFWFQpIGNrY3Rl bC4kKEVYVCkgXAotCQlja3VzaWcuJChFWFQpIGNrdWF0aC4kKEVYVCkgY2tfY3JwLiQoRVhUKSBj a2N1bmkuJChFWFQpIFwKLQkJY2t1cHR5LiQoRVhUKSBja19zc2wuJChFWFQpIGNrY21kYi4kKEVY VCkgY2tjZnRwLiQoRVhUKQotCSQoQ0MyKSAkKExOS0ZMQUdTKSAtbyBrcmJtaXQgY2tjbWRiLiQo RVhUKSBja2NtYWkuJChFWFQpIFwKLQkJY2tjbGliLiQoRVhUKSBja3V0aW8uJChFWFQpIGNrdWZp by4kKEVYVCkgY2tjZm5zLiQoRVhUKSBcCi0JCWNrY2ZuMi4kKEVYVCkgY2tjZm4zLiQoRVhUKSBj a3V4bGEuJChFWFQpIGNrY3Byby4kKEVYVCkgXAotCQlja3VjbWQuJChFWFQpIGNrdXVzMi4kKEVY VCkgY2t1dXMzLiQoRVhUKSBja3V1czQuJChFWFQpIFwKLQkJY2t1dXM1LiQoRVhUKSBja3V1czYu JChFWFQpIGNrdXVzNy4kKEVYVCkgY2t1dXN4LiQoRVhUKSBcCi0JCWNrdXVzeS4kKEVYVCkgY2t1 dXNyLiQoRVhUKSBja3VjbnMuJChFWFQpIGNrdWRpYS4kKEVYVCkgXAotCQlja3VzY3IuJChFWFQp IGNrY25ldC4kKEVYVCkgY2tjdGVsLiQoRVhUKSBja3VzaWcuJChFWFQpIFwKLQkJY2t1YXRoLiQo RVhUKSBja19jcnAuJChFWFQpIGNrY3VuaS4kKEVYVCkgY2t1cHR5LiQoRVhUKSBcCi0JCWNrY2Z0 cC4kKEVYVCkgY2tfc3NsLiQoRVhUKSAkKExJQlMpCi0KLSMgU1JQKFRNKSBWZXJzaW9uIC0gU3Vi amVjdCB0byBVU0EgZXhwb3J0IHJlc3RyaWN0aW9ucy4KLQotc3JwbWl0Oglja2NtYWkuJChFWFQp IGNrY2xpYi4kKEVYVCkgY2t1Y21kLiQoRVhUKSBja3V1c3IuJChFWFQpIGNrdXVzMi4kKEVYVCkg XAotCQlja3V1czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBja3V1czYuJChF WFQpIFwKLQkJY2t1dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgY2tjcHJv LiQoRVhUKSBcCi0JCWNrY2Zucy4kKEVYVCkgY2tjZm4yLiQoRVhUKSBja2NmbjMuJChFWFQpIGNr dXhsYS4kKEVYVCkgXAotCQlja3VjbnMuJChFWFQpIGNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhU KSBja3VkaWEuJChFWFQpIFwKLQkJY2t1c2NyLiQoRVhUKSBja2NuZXQuJChFWFQpIGNrY3RlbC4k KEVYVCkgY2t1c2lnLiQoRVhUKSBcCi0JCWNrdWF0aC4kKEVYVCkgY2tfY3JwLiQoRVhUKSBja2N1 bmkuJChFWFQpIGNrdXB0eS4kKEVYVCkgXAotCQlja2NmdHAuJChFWFQpIGNrX3NzbC4kKEVYVCkK LQkkKENDMikgJChMTktGTEFHUykgLW8gc3JwbWl0IGNrY21haS4kKEVYVCkgY2tjbGliLiQoRVhU KSBcCi0JCWNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBja2NmbnMuJChFWFQpIGNrY2ZuMi4k KEVYVCkgXAotCQlja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVYVCkgY2tjcHJvLiQoRVhUKSBja3Vj bWQuJChFWFQpIFwKLQkJY2t1dXMyLiQoRVhUKSBja3V1czMuJChFWFQpIGNrdXVzNC4kKEVYVCkg Y2t1dXM1LiQoRVhUKSBcCi0JCWNrdXVzNi4kKEVYVCkgY2t1dXM3LiQoRVhUKSBja3V1c3guJChF WFQpIGNrdXVzeS4kKEVYVCkgXAotCQlja3V1c3IuJChFWFQpIGNrdWNucy4kKEVYVCkgY2t1ZGlh LiQoRVhUKSBja3VzY3IuJChFWFQpIFwKLQkJY2tjbmV0LiQoRVhUKSBja2N0ZWwuJChFWFQpIGNr dXNpZy4kKEVYVCkgY2t1YXRoLiQoRVhUKSBcCi0JCWNrX2NycC4kKEVYVCkgY2tjdW5pLiQoRVhU KSBja3VwdHkuJChFWFQpIGNrX3NzbC4kKEVYVCkgXAotCQlja2NmdHAuJChFWFQpICQoTElCUykK LQotIyBLZXJiZXJpemVkIFZlcnNpb24gLSBOb3Qgc3ViamVjdCB0byBVU0EgZXhwb3J0IHJlc3Ry aWN0aW9ucy4KLQota3JibWl0LWV4cG9ydDoJY2tjbWFpLiQoRVhUKSBcCi0JCWNrY2xpYi4kKEVY VCkgY2t1Y21kLiQoRVhUKSBja3V1c3IuJChFWFQpIGNrdXVzMi4kKEVYVCkgXAotCQlja3V1czMu JChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBja3V1czYuJChFWFQpIFwKLQkJY2t1 dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgY2tjcHJvLiQoRVhUKSBcCi0J CWNrY2Zucy4kKEVYVCkgY2tjZm4yLiQoRVhUKSBja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVYVCkg XAotCQlja3VjbnMuJChFWFQpIGNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBja3VkaWEuJChF WFQpIFwKLQkJY2t1c2NyLiQoRVhUKSBja2NuZXQuJChFWFQpIGNrY3RlbC4kKEVYVCkgY2t1c2ln LiQoRVhUKSBcCi0JCWNrdWF0aC4kKEVYVCkgY2tjdW5pLiQoRVhUKSBja3VwdHkuJChFWFQpIGNr Y2Z0cC4kKEVYVCkKLQkkKENDMikgJChMTktGTEFHUykgLW8ga3JibWl0LWV4cG9ydCBja2NtYWku JChFWFQpIGNrY2xpYi4kKEVYVCkgXAotCQlja3V0aW8uJChFWFQpIGNrdWZpby4kKEVYVCkgY2tj Zm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIFwKLQkJY2tjZm4zLiQoRVhUKSBja3V4bGEuJChFWFQp IGNrY3Byby4kKEVYVCkgY2t1Y21kLiQoRVhUKSBcCi0JCWNrdXVzMi4kKEVYVCkgY2t1dXMzLiQo RVhUKSBja3V1czQuJChFWFQpIGNrdXVzNS4kKEVYVCkgXAotCQlja3V1czYuJChFWFQpIGNrdXVz Ny4kKEVYVCkgY2t1dXN4LiQoRVhUKSBja3V1c3kuJChFWFQpIFwKLQkJY2t1dXNyLiQoRVhUKSBj a3VjbnMuJChFWFQpIGNrdWRpYS4kKEVYVCkgY2t1c2NyLiQoRVhUKSBcCi0JCWNrY25ldC4kKEVY VCkgY2tjdGVsLiQoRVhUKSBja3VzaWcuJChFWFQpIGNrdWF0aC4kKEVYVCkgXAotCQlja2N1bmku JChFWFQpIGNrdXB0eS4kKEVYVCkgY2tjZnRwLiQoRVhUKSAkKExJQlMpCi0KLSMgU1JQKFRNKSBW ZXJzaW9uIC0gTm90IHN1YmplY3QgdG8gVVNBIGV4cG9ydCByZXN0cmljdGlvbnMuCi0KLXNycG1p dC1leHBvcnQ6CWNrY21haS4kKEVYVCkgXAotCQlja2NsaWIuJChFWFQpIGNrdWNtZC4kKEVYVCkg Y2t1dXNyLiQoRVhUKSBja3V1czIuJChFWFQpIFwKLQkJY2t1dXMzLiQoRVhUKSBja3V1czQuJChF WFQpIGNrdXVzNS4kKEVYVCkgY2t1dXM2LiQoRVhUKSBcCi0JCWNrdXVzNy4kKEVYVCkgY2t1dXN4 LiQoRVhUKSBja3V1c3kuJChFWFQpIGNrY3Byby4kKEVYVCkgXAotCQlja2NmbnMuJChFWFQpIGNr Y2ZuMi4kKEVYVCkgY2tjZm4zLiQoRVhUKSBja3V4bGEuJChFWFQpIFwKLQkJY2t1Y25zLiQoRVhU KSBja3V0aW8uJChFWFQpIGNrdWZpby4kKEVYVCkgY2t1ZGlhLiQoRVhUKSBcCi0JCWNrdXNjci4k KEVYVCkgY2tjbmV0LiQoRVhUKSBja2N0ZWwuJChFWFQpIGNrdXNpZy4kKEVYVCkgXAotCQlja3Vh dGguJChFWFQpIGNrY3VuaS4kKEVYVCkgY2t1cHR5LiQoRVhUKSBja2NmdHAuJChFWFQpCi0JJChD QzIpICQoTE5LRkxBR1MpIC1vIHNycG1pdC1leHBvcnQgY2tjbWFpLiQoRVhUKSBja2NsaWIuJChF WFQpIFwKLQkJY2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIGNrY2Zucy4kKEVYVCkgY2tjZm4y LiQoRVhUKSBcCi0JCWNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQoRVhUKSBja2Nwcm8uJChFWFQpIGNr dWNtZC4kKEVYVCkgXAotCQlja3V1czIuJChFWFQpIGNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhU KSBja3V1czUuJChFWFQpIFwKLQkJY2t1dXM2LiQoRVhUKSBja3V1czcuJChFWFQpIGNrdXVzeC4k KEVYVCkgY2t1dXN5LiQoRVhUKSBcCi0JCWNrdXVzci4kKEVYVCkgY2t1Y25zLiQoRVhUKSBja3Vk aWEuJChFWFQpIGNrdXNjci4kKEVYVCkgXAotCQlja2NuZXQuJChFWFQpIGNrY3RlbC4kKEVYVCkg Y2t1c2lnLiQoRVhUKSBja3VhdGguJChFWFQpIFwKLQkJY2tjdW5pLiQoRVhUKSBja3VwdHkuJChF WFQpIGNrY2Z0cC4kKEVYVCkgJChMSUJTKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgbWFuIHBh Z2UuLi4KLSMKLWNrdWtlci5ucjoKLQlAZWNobyBUaGlzIHRhcmdldCBpcyBvYnNvbGV0ZS4KLQlA ZWNobyBUaGUgY2t1a2VyLm5yIGZpbGUgbm8gbG9uZ2VyIG5lZWRzIGFueSBwcmVwcm9jZXNzaW5n LgotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgRGVwZW5kZW5jaWVzIGZvciBlYWNoIG1vZHVsZS4u LgotIwotY2tjbWFpLiQoRVhUKTogY2tjbWFpLmMgY2tja2VyLmggY2tjZGViLmggY2tjc3ltLmgg Y2tjYXNjLmggY2tjbmV0LmggY2tjc2lnLmggXAotCQlja3V1c3IuaCBja2N0ZWwuaCBja2NsaWIu aAotCi1ja2NsaWIuJChFWFQpOiBja2NsaWIuYyBja2NsaWIuaCBja2NkZWIuaCBja2Nhc2MuaCBj a2NzeW0uaAotCi1ja2Nwcm8uJChFWFQpOiBja2Nwcm8uYyBja2NrZXIuaCBja2NkZWIuaCBja2Nz eW0uaCBja2Nhc2MuaCBja2NsaWIuaAotCi1ja2Nwcm8uYzogY2tjcHJvLncgd2FydCBja2NkZWIu aCBja2NzeW0uaCBja2Nhc2MuaCBja2NrZXIuaCBja2NuZXQuaCBja2N0ZWwuaCBcCi0JIGNrY2xp Yi5oCi0JLi93YXJ0IGNrY3Byby53IGNrY3Byby5jCi0KLWNrY2Zucy4kKEVYVCk6IGNrY2Zucy5j IGNrY2tlci5oIGNrY2RlYi5oIGNrY3N5bS5oIGNrY2FzYy5oIGNrY3hsYS5oIGNrY3VuaS5oIFwK LQkJY2t1eGxhLmggY2tjbGliLmggY2tjbmV0LmgKLQotY2tjZm4yLiQoRVhUKTogY2tjZm4yLmMg Y2tja2VyLmggY2tjZGViLmggY2tjc3ltLmggY2tjYXNjLmggY2tjeGxhLmggXAotCQlja3V4bGEu aCBja2N0ZWwuaCBja2NsaWIuaCBja2NuZXQuaCBja2N1bmkuaAotCi1ja2NmbjMuJChFWFQpOiBj a2NmbjMuYyBja2NrZXIuaCBja2NkZWIuaCBja2NzeW0uaCBja2Nhc2MuaCBja2N4bGEuaCBcCi0J CWNrdXhsYS5oIGNrY2xpYi5oIGNrY3VuaS5oCi0KLWNrdXhsYS4kKEVYVCk6IGNrdXhsYS5jIGNr Y2tlci5oIGNrY3N5bS5oIGNrY2RlYi5oIGNrY3hsYS5oIGNrdXhsYS5oIGNrY2xpYi5oIFwKLQkJ IGNrY3VuaS5oCi0KLWNrY3VuaS4kKEVYVCk6IGNrY3VuaS5jIGNrY2RlYi5oIGNrY2tlci5oIGNr dWNtZC5oIGNrY3VuaS5oIGNrY3hsYS5oIGNrdXhsYS5oCi0KLWNrdXVzci4kKEVYVCk6IGNrdXVz ci5jIGNrdWNtZC5oIGNrY2tlci5oIGNrdXVzci5oIGNrY3N5bS5oIGNrY2RlYi5oIGNrY3hsYS5o IFwKLQkJY2t1eGxhLmggY2tjYXNjLmggY2tjbmV0LmggY2tjdGVsLmggY2tjbGliLmggY2tjdW5p LmgKLQotY2t1dXMyLiQoRVhUKTogY2t1dXMyLmMgY2t1Y21kLmggY2tja2VyLmggY2t1dXNyLmgg Y2tjZGViLmggY2tjeGxhLmggY2t1eGxhLmggXAotCQlja2Nhc2MuaCBja2NuZXQuaCBja2NzeW0u aCBja2N0ZWwuaCBja2NsaWIuaCBja2N1bmkuaAotCi1ja3V1czMuJChFWFQpOiBja3V1czMuYyBj a3VjbWQuaCBja2NrZXIuaCBja3V1c3IuaCBja2NkZWIuaCBja2N4bGEuaCBja3V4bGEuaCBcCi0J CWNrY2FzYy5oIGNrY25ldC5oIGNrY3N5bS5oIGNrY3RlbC5oIGNrY2xpYi5oIGNrY3VuaS5oCi0K LWNrdXVzNC4kKEVYVCk6IGNrdXVzNC5jIGNrdWNtZC5oIGNrY2tlci5oIGNrdXVzci5oIGNrY2Rl Yi5oIGNrY3hsYS5oIGNrdXhsYS5oIFwKLQkJY2tjYXNjLmggY2tjbmV0LmggY2t1dmVyLmggY2tj c3ltLmggY2tjdGVsLmggY2tjbGliLmggY2tjdW5pLmgKLQotY2t1dXM1LiQoRVhUKTogY2t1dXM1 LmMgY2t1Y21kLmggY2tja2VyLmggY2t1dXNyLmggY2tjZGViLmggY2tjYXNjLmggY2tjbmV0Lmgg XAotCQkgY2tjc3ltLmggY2tjdGVsLmggY2tjbGliLmggY2tjeGxhLmggY2t1eGxhLmggY2tjdW5p LmgKLQotY2t1dXM2LiQoRVhUKTogY2t1dXM2LmMgY2t1Y21kLmggY2tja2VyLmggY2t1dXNyLmgg Y2tjZGViLmggY2tjYXNjLmggY2tjbmV0LmggXAotCQkgY2tjc3ltLmggY2tjdGVsLmggY2tjbGli LmgKLQotY2t1dXM3LiQoRVhUKTogY2t1dXM3LmMgY2t1Y21kLmggY2tja2VyLmggY2t1dXNyLmgg Y2tjZGViLmggY2tjeGxhLmggY2t1eGxhLmggXAotCQlja2Nhc2MuaCBja2NuZXQuaCBja2NzeW0u aCBja2N0ZWwuaCBja2NsaWIuaCBja2N1bmkuaAotCi1ja3V1c3guJChFWFQpOiBja3V1c3guYyBj a2NrZXIuaCBja3V1c3IuaCBja2NkZWIuaCBja2Nhc2MuaCBja2NzeW0uaCBcCi0JCWNrY3NpZy5o IGNrY25ldC5oIGNrY3RlbC5oIGNrY2xpYi5oIGNrY3hsYS5oIGNrdXhsYS5oIGNrY3VuaS5oCi0K LWNrdXVzeS4kKEVYVCk6IGNrdXVzeS5jIGNrY2tlci5oIGNrY2RlYi5oIGNrY2FzYy5oIGNrY25l dC5oIGNrY3N5bS5oIGNrY3RlbC5oIFwKLQkJIGNrY2xpYi5oCi0KLWNrdWNtZC4kKEVYVCk6IGNr dWNtZC5jIGNrY2FzYy5oIGNrdWNtZC5oIGNrY2RlYi5oIGNrY3N5bS5oIGNrY3RlbC5oIGNrY2xp Yi5oCi0KLWNrdWZpby4kKEVYVCk6IGNrdWZpby5jIGNrY2RlYi5oIGNrdXZlci5oIGNrY3N5bS5o IGNrY2xpYi5oIFwKLQkJY2tjeGxhLmggY2t1eGxhLmggY2tjdW5pLmgKLQotY2t1dGlvLiQoRVhU KTogY2t1dGlvLmMgY2tjZGViLmggY2tjbmV0LmggY2t1dmVyLmggY2tjc3ltLmggY2tjdGVsLmgg Y2tjbGliLmgKLQotY2t1Y29uLiQoRVhUKTogY2t1Y29uLmMgY2tja2VyLmggY2tjZGViLmggY2tj YXNjLmggY2tjbmV0LmggY2tjc3ltLmggY2tjdGVsLmggXAotCQkgY2tjbGliLmgKLQotY2t1Y25z LiQoRVhUKTogY2t1Y25zLmMgY2tja2VyLmggY2tjZGViLmggY2tjYXNjLmggY2tjbmV0LmggY2tj c3ltLmggY2tjdGVsLmggXAotCQkgY2tjbGliLmggY2tjeGxhLmggY2t1eGxhLmggY2tjdW5pLmgK LQotY2tjbmV0LiQoRVhUKTogY2tjbmV0LmMgY2tjZGViLmggY2tja2VyLmggY2tjbmV0LmggY2tj c3ltLmggY2tjc2lnLmggY2tjdGVsLmggXAotCQkgY2tjbGliLmgKLQotY2tjdGVsLiQoRVhUKTog Y2tjc3ltLmggY2tjZGViLmggY2tja2VyLmggY2tjbmV0LmggY2tjdGVsLmggY2tjbGliLmgKLQot IyBja19vZmZfdDogY2tfb2ZmX3QuJChFWFQpCi0jCSQoQ0MpIC1vIGNrX29mZl90IGNrX29mZl90 LiQoRVhUKQotCi13YXJ0OiBja3dhcnQuJChFWFQpCi0JJChDQykgJChMTktGTEFHUykgLW8gd2Fy dCBja3dhcnQuJChFWFQpICQoTElCUykKLQotY2tjbWRiLiQoRVhUKTogY2tjbWRiLmMgY2tjZGVi LmggY2tjc3ltLmggY2tjbGliLmgKLQotY2t3YXJ0LiQoRVhUKTogY2t3YXJ0LmMKLQotY2t1ZGlh LiQoRVhUKTogY2t1ZGlhLmMgY2tja2VyLmggY2tjZGViLmggY2t1Y21kLmggY2tjYXNjLmggY2tj c3ltLmggY2tjc2lnLmggXAotCQlja2NuZXQuaCBja2N0ZWwuaCBja2NsaWIuaAotCi1ja3VzY3Iu JChFWFQpOiBja3VzY3IuYyBja2NrZXIuaCBja2NkZWIuaCBja2Nhc2MuaCBja2NzeW0uaCBja2Nz aWcuaCBcCi0JCWNrY25ldC5oIGNrY3RlbC5oIGNrY2xpYi5oCi0KLWNrdXNpZy4kKEVYVCk6IGNr dXNpZy5jIGNrY2FzYy5oIGNrY2RlYi5oIGNrY2tlci5oIGNrY25ldC5oIGNrdXVzci5oIFwKLQkJ Y2tjc2lnLmggY2tjdGVsLmggY2tjbGliLmgKLQotY2tjZnRwLiQoRVhUKTogY2tjZnRwLmMgY2tj ZGViLmggY2tjYXNjLmggY2tja2VyLmggY2t1Y21kLmggY2t1dXNyLmggXAotCQlja2NuZXQuaCBj a2N0ZWwuaCBja2N4bGEuaCBja3V4bGEuaCBja2N1bmkuaAotCi1ja3VwdHkuJChFWFQpOiBja3Vw dHkuYyBja3VwdHkuaCBja2NkZWIuaAotCi1ja3VhdGguJChFWFQpOiBja3VhdGguYyBja2NkZWIu aCBja3VjbWQuaCBja3VhdGguaCBja3VhdDIuaCBja2N0ZWwuaCBcCi0JCSBja2NsaWIuaCBja2Nu ZXQuaAotCi1ja19jcnAuJChFWFQpOiBja19jcnAuYyBja2NkZWIuaCBja2NuZXQuaCBja3VhdGgu aCBja2NsaWIuaAotCi1ja19zc2wuJChFWFQpOiBja19zc2wuYyBja2NkZWIuaCBja3VjbWQuaCBj a3VhdGguaCBja3VhdDIuaCBja2N0ZWwuaCBcCi0JCSBja2NsaWIuaCBja19zc2wuaAotCi0jIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKLSMKLSMgRW50cmllcyB0byBtYWtlIEMtS2VybWl0IGZvciBzcGVjaWZp YyBzeXN0ZW1zLgotIwotIyBQdXQgdGhlIG9uZXMgdGhhdCBuZWVkIHNob3J0IG1ha2VmaWxlcyBm aXJzdC4KLQotI0Fwb2xsbyBBZWdpcyA5LnguICBJbmNsdWRlcyBUQ1AvSVAgc3VwcG9ydC4KLSNZ b3UgY2FuIGFsc28gYWRkIHByb2Nlc3Nvci1kZXBlbmRlbnQgb3B0aW1pemF0aW9uIHN3aXRjaGVz IGxpa2UgLU01NzAuCi1hZWdpczoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IEFwb2xsbyBBZWdpcyA5LnguLi4KLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NLRVQgLUROT0NTRVRTIC1EQ0tfQ1VS U0VTIC1PICQoS0ZMQUdTKSIgXAotCSJMSUJTID0gLWxjdXJzZXMgLWx0ZXJtY2FwIgotCi0jQXBw bGUgTWFjIElJLCBBL1VYIHByZS0zLjAKLSNXYXJuaW5nLCBpZiAic2VuZCAqIiBkb2Vzbid0IHdv cmssIHRyeSB0aGUgYXV4dWZzIG1ha2VmaWxlIGVudHJ5IGJlbG93LgotYXV4OgotCUBlY2hvIE1h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTWFjaW50b3NoIEEvVVguLi4KLQkkKE1BS0UpIHdl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURBVVggLURUQ1BT T0NLRVQgJChLRkxBR1MpIC1pIC1PIiAiTE5LRkxBR1MgPSAtaSIKLQotI0FwcGxlIE1hYyBJSSwg QS9VWCBwcmUtMy4wLCBjb21waWxlZCB3aXRoIGdjYwotYXV4Z2NjOgotCUBlY2hvIE1ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgTWFjaW50b3NoIEEvVVguLi4KLQkkKE1BS0UpIHdlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURBVVggLURUQ1BTT0NLRVQg LXRyYWRpdGlvbmFsICQoS0ZMQUdTKSAtaSAtTyIgXAotCSJMTktGTEFHUyA9ICIgIkNDID0gZ2Nj IiAiQ0MyID0gZ2NjIgotCi0jQXBwbGUgTWFjIElJLCBBL1VYLCBwcmUtMy4wLCBidXQgd2l0aCB1 ZnMgZmlsZSB2b2x1bWVzLCB1c2VzIDxkaXJlbnQuaD4uCi1hdXh1ZnM6Ci0JQGVjaG8gTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYWNpbnRvc2ggQS9VWC4uLgotCSQoTUFLRSkgd2VybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtREFVWCAtRFRDUFNPQ0tF VCAtRERJUkVOVCAkKEtGTEFHUykgLWkgLU8iICJMTktGTEFHUyA9IC1pIgotCi0jQXBwbGUgTWFj IElJLCBBL1VYIDMuMCwgY29tcGlsZWQgd2l0aCBnY2MKLWF1eDNnY2M6Ci0JQGVjaG8gTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYWNpbnRvc2ggQS9VWCAzLjAuLi4KLQkkKE1BS0UpIHdl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURBVVggLURIREJV VUNQIC1ETEZERVZOTyAtRFRDUFNPQ0tFVCAtRERJUkVOVCAkKEtGTEFHUykiIFwKLQkiTE5LRkxB R1MgPSAtcyIgIkxJQlMgPSAkKExJQlMpIiBcCi0JIkNDPWdjYyAtcGlwZSAtdHJhZGl0aW9uYWwi ICJDQzI9Z2NjIC1waXBlIC10cmFkaXRpb25hbCIKLQotI0FwcGxlIE1hYyBJSSwgQS9VWCAzLjAs IGNvbXBpbGVkIHdpdGggZ2NjLCB1c2VzIGN1cnNlcwotYXV4M2NnY2M6Ci0JQGVjaG8gTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYWNpbnRvc2ggQS9VWCAzLjAuLi4KLQkkKE1BS0UpICJN QUtFPSQoTUFLRSkiIENDPSQoQ0MpIENDMj0kKENDMikgYXV4M2djYyBcCi0JS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0kKEtGTEFHUykgLURDS19DVVJTRVMiICJMSUJTID0g LWxjdXJzZXMgJChMSUJTKSIKLQotIyBUZW5vbiBNYWNoVGVuLCB0ZXN0ZWQgb24gQXBwbGUgUG93 ZXJib29rIHdpdGggTWFjaFRlbiAyLjEuMS5ELgotIyBOT1RFOiBUaGlzIGRvZXNuJ3QgZG8gYW55 dGhpbmcgYWJvdXQgVVVDUC4gIEl0IG9ubHkgd29ya3MgaWYgL3Vzci9zcG9vbC91dWNwCi0jIGhh cyBwZXJtaXNzaW9uIG9mIDc3NywgYW5kIGRpYWxvdXQgZGV2aWNlIGlzIHdvcmxkIHJlYWQvd3Jp dGVhYmxlLgotbWFjaHRlbjoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1h Y2hUZW4uLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQki Q0ZMQUdTPSAtREJTRDQzIC1EVENQU09DS0VUIC1EU0lHX1YgLUROREdQV05BTSAtRENLX0NVUlNF UyAtTyBcCi0JJChLRkxBR1MpIiAgIkxJQlM9LWxjdXJzZXMgLWx0ZXJtY2FwIgotCi0jQmVsbCBM YWJzIFJlc2VhcmNoIFVOSVggVjEwCi0jQ2FuJ3QgYWRkIFRDUC9JUCBiZWNhdXNlIHRoZXJlIGlz IG5vIHNvY2tldHMgbGlicmFyeS4gIEl0IHdvdWxkIGhhdmUgdG8KLSNiZSBkb25lIHVzaW5nIHN0 cmVhbXMsIGJ1dCB0aGVyZSBpcyBubyBjb2RlIGluIEMtS2VybWl0IGZvciB0aGF0LgotI1JlbW92 ZSAtRE5PSkMgaWYgZGVzaXJlZCAoaWYgeW91ciBzeXN0ZW0gaGFzIGNzaCwga3NoLCBvciBiYXNo KS4KLWJlbGx2MTA6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBCZWxsIExh YnMgUmVzZWFyY2ggVU5JWCBWMTAuLi4KLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQtJChAKX0gXAotCSJDRkxBR1M9IC1EQkVMTFYxMCAtREJTRDQgLURORElSIC1ETk9KQyAtRE5P U1lTSU9DVExIIC1ETk9TRVRSRVUgXAotCS1ETk9DU0VUUyAtTUlOSURJQUwgJChLRkxBR1MpIgot Ci0jIFdBUk5JTkc6IFRoZSBlYXJseSBCU0QgZW50cmllcyBkbyBub3QgYnVpbGQgaW4gdmVyc2lv biA3LjAgd2l0aCB0aGUgc3RvY2sKLSMgQlNEIGNvbXBpbGVyOiAiVG9vIG1hbnkgZGVmaW5lcyIu ICBVbmxlc3MgeW91IGNhbiByZWJ1aWxkIGNwcCB0byBoYXZlIG1vcmUKLSMgc3BhY2UgZm9yIGRl ZmluZXMsIHRoZXNlIGJ1aWxkcyBtdXN0IGJlIGFjY29tcGxpc2hlZCBieToKLSMgY29weWluZyB0 aGUgL3Vzci9pbmNsdWRlIHRyZWUgdG8gc29tZXBsYWNlIGVsc2UsIHByZXByb2Nlc3NpbmcgdGhl cmUgd2l0aCBjYwotIyAtRSAtSS4vaW5jbHVkZSBvciB3aGF0ZXZlciAocGx1cyBhbGwgdGhlIHNh bWUgLUQncywgYWRkaW5nIGFueSBuZWNlc3NhcnkKLSMgLVUvLUQgdG8gb3ZlcnJpZGUgdGhlIGFy Y2hpdGVjdHVyZSkpLCByZW5hbWluZyB0aGUgdGhlIHJlc3VsdGluZyBmaWxlcyBiYWNrCi0jIHRv IHRoZWlyIG9yaWdpbmFsIG5hbWVzLCBicmluZ2luZyB0aGVtIGJhY2sgdG8gdGhlIG9yaWdpbmFs IEJTRCBzeXN0ZW0sIGFuZAotIyBydW5uaW5nIHRoZSBtYWtlIHRhcmdldCB0aGVyZS4gIFRoaXMg dGVjaG5pcXVlIHdhcyB1c2VkIGZvciA0LjIgYW5kIDQuMyBCU0QKLSMgb24gYSBWQVggaW4gQy1L ZXJtaXQgNy4wIChsYXRlciwgY3BwIG9uIHRoYXQgbWFjaGluZSB3YXMgcmVidWlsdCB0byBhbGxv dwotIyBtb3JlIHN5bWJvbHMsIHNvIHRoZSBDLUtlcm1pdCA4LjAgYnVpbGQgcHJvY2VlZHMgbm9y bWFsbHkpLgotCi0jQmVya2VsZXkgVW5peCA0LjEKLWJzZDQxOgotCUBlY2hvIE1ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgNC4xQlNELi4uCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VULSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQxIiAiTElCUyA9IC1sam9icyIKLQotI0Jl cmtlbGV5IDQuMiwgNC4zLCBhbHNvIFVsdHJpeC0zMiAxLngsIDIueCwgMy54LCBtYW55IG90aGVy cwotIyBBZGQgLU8sIC1zLCBldGMsIGlmIHRoZXkgd29yay4KLSMgSWYgeW91IGhhdmUgYSB2ZXJz aW9uIG9mIEJTRCBidXQgc2lnbmFsKCkgaXMgdm9pZCByYXRoZXIgdGhhbiBpbnQsCi0jICJtYWtl IGJzZCBLRkxBR1M9LURTSUdfViIuCi1ic2Q0MjoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIDQuMkJTRC4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0k KEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0IC1EVENQU09DS0VUIC1ETk9SRUFMUEFUSCAtRE5PVElN RUggLUROT0lLU0QgXAotCS1EQ0tfQ1VSU0VTIC1EU1lTVElNRUJIIC1ETk9QVVRFTlYgLUROT0FO U0kgLURCSUdCVUZPSyAtREJTRDQySEFDSyBcCi0JJChLRkxBR1MpIiAiTElCUz0tbGN1cnNlcyAt bHRlcm1jYXAgJChMSUJTKSIKLQotYnNkOgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBi c2Q0MiBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0KLQotI0JlcmtlbGV5IFVuaXggNC4yIG9yIDQu MyB3aXRoIEhvbmV5RGFuQmVyIFVVQ1AKLWJzZGhkYjoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIDQuMkJTRCB3aXRoIEhEQiBVVUNQLi4uCi0JJChNQUtFKSBDQz0kKENDKSBD QzI9JChDQzIpIGJzZCBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gXAotCSJLRkxBR1M9IC1ESERC VVVDUCAkKEtGTEFHUykiCi0KLSNCZXJrZWxleSBVbml4IDQuMyB3aXRoIGFjdWNudHJsIHByb2dy YW0sIGN1cnNlcywgVENQL0lQIGluY2x1ZGVkLgotYnNkNDM6Ci0JQGVjaG8gTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciA0LjNCU0QuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQtJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENCAtREJTRDQzIC1EVENQU09DS0VUIC1ETk9S RUFMUEFUSCAtRE5PVElNRUggLUROT0lLU0QgXAotCS1EQ0tfQ1VSU0VTIC1EQUNVQ05UUkwgLURT WVNUSU1FQkggLUROT1BVVEVOViAtRE5PQU5TSSAtREJJR0JVRk9LIFwKLQktREJTRDQySEFDSyAk KEtGTEFHUykiICJMSUJTPS1sY3Vyc2VzIC1sdGVybWNhcCAkKExJQlMpIgotCi0jNC4zQlNELCBj dXJzZXMgZXhjbHVkZWQKLWJzZDQzbmM6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciA0LjNCU0QuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0g XAotCSJDRkxBR1M9IC1EQlNENCAtREJTRDQzIC1EVENQU09DS0VUIC1ETk9SRUFMUEFUSCAtRE5P VElNRUggXAotCS1EQUNVQ05UUkwgLURTWVNUSU1FQkggLUROT0lLU0QgLUROT1BVVEVOViAtRE5P QU5TSSAtREJJR0JVRk9LIFwKLQktREJTRDQySEFDSyAkKEtGTEFHUykiICJMSUJTPSQoTElCUyki Ci0KLSM0LjNCU0QsIFRDUC9JUCBleGNsdWRlZC4KLWJzZDQzbm9uZXQ6Ci0JQGVjaG8gTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciA0LjNCU0QgKyBjdXJzZXMuLi4KLQkkKE1BS0UpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENCAtREJTRDQzIC1E VENQU09DS0VUIC1ETk9SRUFMUEFUSCAtRE5PVElNRUggLUROT0lLU0QgXAotCS1EQ0tfQ1VSU0VT IC1EQUNVQ05UUkwgLURTWVNUSU1FQkggLUROT1BVVEVOViAtRE5PQU5TSSAtREJJR0JVRk9LIFwK LQktREJTRDQySEFDSyAtRE5PTkVUICQoS0ZMQUdTKSIgIkxJQlM9LWxjdXJzZXMgLWx0ZXJtY2Fw ICQoTElCUykiCi0KLSNCZXJrZWxleSBVbml4IDQuMiBvciA0LjMgd2l0aCBsb2NrIGRpcmVjdG9y eSAvdXNyL3Nwb29sL3V1Y3AvTENLL0xDSy4udHR5eHgsCi0jYnV0IHdpdGhvdXQgYWN1Y250cmwg cHJvZ3JhbQotYnNkbGNrOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgNC4y QlNELCAvdXNyL3Nwb29sL3V1Y3AvTENLLy4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0My KSBic2QgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IFwKLQkiS0ZMQUdTPSAtRExDS0RJUiAkKEtG TEFHUykiCi0KLSNCZXJrZWxleSBVTklYIDQuNC1MaXRlLCA0LjQtRW5jdW1iZXJlZCwgTmV0LzIs IGV0YyAoUG9zdC1SZW5vKSwKLSN3aXRoIFRDUC9JUCBuZXR3b3JraW5nLiAgVGhpcyB3YXMgdGhl IGJhc2lzIGZvciBGcmVlQlNELCBOZXRCU0QsIE9wZW5CU0QsCi0jQlNESSwgQlNEL09TLCBhbmQg TWFjIE9TIFggKGVhY2ggb2Ygd2hpY2ggaGFzIGl0cyBvd24gc2V0IG9mIHRhcmdldHMgdGhhdAot I2FyZSBuZXdlciB0aGFuIHRoaXMgb25lKS4KLSMKLSNOT1RFOiBUaGlzIGlzIG5vdCBhIHB1cmUg UE9TSVggY29uZmlndXJhdGlvbi4gIFVzaW5nIC1EUE9TSVggaW5zdGVhZCBvZgotIyAtREJTRDQ0 IHByZXZlbnRzIGFueSBraW5kIG9mIGRpcmVjdG9yeS1yZWFkaW5nIChmb3Igd2lsZGNhcmQgZXhw YW5zaW9uKSwKLSNhbmQgZGlzYWxsb3dzIHVzZSBvZiBFTk9UQ09OTiBzeW1ib2wgZm9yIGRldGVj dGluZyBicm9rZW4gbmV0d29yawotI2Nvbm5lY3Rpb25zLCBhbmQgZGlzYWxsb3dzIFJUUy9DVFMg ZmxvdyBjb250cm9sLCBhbmQgd291bGQgYWxzbyByZXF1aXJlCi0jZGVmaW5pdGlvbiBvZiB0aGUg YXBwcm9wcmlhdGUgVVVDUCBsb2NrZmlsZSBjb252ZW50aW9uLgotI0RvIG5vdCBhZGQgLURDS19Q T1NJWF9TSUcgd2l0aG91dCByZWFkaW5nIDxzaWduYWwuaD4gZmlyc3QhICBGb3IgZXhhbXBsZSwK LSNzaWdzZXRqbXAoKSwgZXRjLCB0ZW5kIHRvIGJlIGRlZmluZWQgYnV0IG5vdCBpbXBsZW1lbnRl ZC4KLSMKLSNOT1RFOiBvcmlnaW5hbGx5IGNyeXB0IHdhcyBpbiBsaWJjIC0gbGF0ZXIgaXQgd2Fz IHVuYnVuZGxlZC4KLSNSZW1vdmUgdGhlIExJQlMgY2xhdXNlIHRvIGJ1aWxkIG9uIGFuIGVhcmx5 IDQuNEJTRCBwbGF0Zm9ybS4KLSMKLWJzZDQ0OgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgNC40QlNELi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQ0IC1EVENQU09DS0VU ICQoS0ZMQUdTKSAtTyIgIkxJQlM9LWxjcnlwdCIKLQotI0JlcmtlbGV5IFVOSVggNC40LCBhcyBh Ym92ZSwgYnV0IHdpdGggY3Vyc2VzIGZvciBmdWxsc2NyZWVuIGRpc3BsYXkKLSNQbGVhc2UgcmVh ZCBub3RlcyBmb3IgYnNkNDQgZW50cnkganVzdCBhYm92ZS4KLSMgTk9URTogVGhpcyBvbmUgZHVt cGVkIGNvcmUgb24gdGhlIHJlYWwgNC40QlNEIGRldmVsb3BtZW50IHN5c3RlbSBhdAotIyBVQyBC ZXJrZWxleSAoYW4gSFAtOTAwMC8zMDApLCBzbyB0aGUgbm8tY3Vyc2VzIHZlcnNpb24gd2FzIHVz ZWQKLSMgZm9yIHRoYXQgb25lLCB3aGljaCB3YXMgdW5wbHVnZ2VkIHllYXJzIGFnby4KLWJzZDQ0 YzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIDQuNEJTRCB3aXRoIGN1cnNl cy4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0NCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAk KEtGTEFHUykgLU8iIFwKLQkiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIC1sY3J5cHQgJChMSUJT KSIKLQotI0ZvciBGcmVlQlNEIDEueC4KLWZyZWVic2QxOgotCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIEZyZWVCU0QuLi4nCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIp IHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQ0IC1E Q0tfQ1VSU0VTIC1EVENQU09DS0VUIC1ETk9DT1RGTUMgLWZ1bnNpZ25lZC1jaGFyIFwKLQktREZO RkxPQVQgLUROT0hURVJNQ0FQIC1ETk9SRUFMUEFUSCAtRE5PU1lTQ09ORiAkKEtGTEFHUykgLU8g LXBpcGUiIFwKLQkiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIC1sbSAkKExJQlMpIgotCi0jRnJl ZUJTRCAyLnggd2l0aCBuY3Vyc2VzCi1mcmVlYnNkMjoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBGcmVlQlNEIDIueCB3aXRoIG5jdXJzZXMuLi4nCi0JJChNQUtFKSBDQz0k KENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZM QUdTPSAtREJTRDQ0IC1EQ0tfTkNVUlNFUyAtRFRDUFNPQ0tFVCAtRE5PQ09URk1DIC1EVVNFX1NU UkVSUk9SIFwKLQktRFRQVVRTQVJHVFlQRT1pbnQgLURUUFVUU0FSRzFDT05TVCAtREZSRUVCU0Qy IC1mdW5zaWduZWQtY2hhciBcCi0JLURGTkZMT0FUICQoS0ZMQUdTKSAtTyAtcGlwZSIgXAotCSJM SUJTPSAtbG5jdXJzZXMgLWx0ZXJtbGliIC1sY3J5cHQgLWxtICQoTElCUykiCi0KLSNGb3IgRnJl ZUJTRCAyLnggLS0gVXNlcyBjdXJzZXMgcmF0aGVyIHRoYW4gbmN1cnNlcwotZnJlZWJzZDJjOgot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEZyZWVCU0QgMi54IHdpdGggY3Vy c2VzLi4uJwotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0NCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tF VCAtRE5PQ09URk1DIC1EVVNFX1NUUkVSUk9SIFwKLQktRFRQVVRTQVJHVFlQRT1pbnQgLURUUFVU U0FSRzFDT05TVCAtREZSRUVCU0QyIC1ERk5GTE9BVCBcCi0JLWZ1bnNpZ25lZC1jaGFyICQoS0ZM QUdTKSAtTyAtcGlwZSIgXAotCSJMSUJTPSAtbGN1cnNlcyAtbHRlcm1saWIgLWxjcnlwdCAtbG0g JChMSUJTKSIKLQotI0ZyZWVCU0QgMy54IHdpdGggbmN1cnNlcyBhbmQgdXVfbG9jaygpCi0jKE5v dGU6IHV1X2xvY2soKSBnb2VzIGJhY2sgdG8gMi4yLjIsIGJ1dCBub3QgbmVjZXNzYXJpbHkgMi4w KQotI09LIDIwMTEvMDgvMjAgRnJlZUJTRCAzLjMKLWZyZWVic2QzOgotCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIEZyZWVCU0QgMy54IHdpdGggbmN1cnNlcy4uLicKLQkkKE1B S0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAotCSJDRkxBR1M9IC1EQlNENDQgLURDS19OQ1VSU0VTIC1EVENQU09DS0VUIC1ETk9DT1RGTUMg LWZ1bnNpZ25lZC1jaGFyIFwKLQktRFRQVVRTQVJHVFlQRT1pbnQgLURVU0VfU1RSRVJST1IgLURG UkVFQlNEMyAtRFVTRV9VVV9MT0NLIC1ERk5GTE9BVCBcCi0JJChLRkxBR1MpIC1PIC1waXBlIiBc Ci0JIkxJQlM9IC1sbmN1cnNlcyAtbGNyeXB0IC1sdXRpbCAtbG0gJChMSUJTKSIKLQotI0FzIGFi b3ZlIGJ1dCB3aXRoIGN1cnNlcyByYXRoZXIgdGhhbiBuY3Vyc2VzLgotZnJlZWJzZDNjOgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEZyZWVCU0QgMy54IHdpdGggY3Vyc2Vz Li4uJwotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0NCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAt RE5PQ09URk1DIC1EVVNFX1VVX0xPQ0sgXAotCS1EVFBVVFNBUkdUWVBFPWludCAtRFVTRV9TVFJF UlJPUiAtREZSRUVCU0QzICQoS0ZMQUdTKSAtREZORkxPQVQgXAotCS1mdW5zaWduZWQtY2hhciAt cGlwZSAtTyIgXAotCSJMSUJTPSAtbGN1cnNlcyAtbGNyeXB0IC1sdXRpbCAtbG0gJChMSUJTKSIK LQotI0ZyZWVCU0QgNC4wIHdpdGggbmN1cnNlcyBhbmQgdXVfbG9jaygpLiAgTm90ZSAtIHRoZXJl IGlzIG5vIGN1cnNlcyBpbiA0LjAuCi0jbmN1cnNlcyA1LjAgaXMgYnJva2VuIHJlcXVpcmluZyB1 cyB0byB3b3JrIGFyb3VuZCB3aXRoIHNldGJ1ZigpLgotZnJlZWJzZDQwOgotCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEZyZWVCU0QgNC54IHdpdGggbmN1cnNlcy4uLicKLQkk KE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAotCSJDRkxBR1M9IC1EQlNENDQgLURDS19OQ1VSU0VTIC1EVENQU09DS0VUIC1ETk9DT1RG TUMgLURGTkZMT0FUIFwKLQktZnVuc2lnbmVkLWNoYXIgLURUUFVUU0FSR1RZUEU9aW50IC1EVVNF X1NUUkVSUk9SIC1ERlJFRUJTRDQgXAotCS1ETk9OT1NFVEJVRiAtRFVTRV9VVV9MT0NLICQoS0ZM QUdTKSAtTyAtcGlwZSIgXAotCSJMSUJTPSAtbG5jdXJzZXMgLWxjcnlwdCAtbHV0aWwgLWxtICQo TElCUykiCi0KLSNGcmVlQlNEIDQuMSBhbmQgYWJvdmUKLSNMaWtlIEZyZWVCU0QgNC4wIGJ1dCB3 aXRob3V0IHRoZSBOT05PU0VUQlVGIGhhY2sgYW5kIHdpdGggQ0tfTkVXVEVSTS4KLSNOT1RFOiBU aGlzIHRhcmdldCBkZWZpbml0ZWx5IGRvZXMgbm90IHdvcmsgZm9yIEZyZWVCU0QgMy4zIGluIDku MC4zMDIuCi0jYW5kIGl0IGhhcyBub3QgYmVlbiB0ZXN0ZWQgb24gNCBvciA1LgotI09LIDIwMTEv MDYveHggRnJlZUJTRCAzLjMsIDQsNCwgNC43LCBhbmQgOC4yCi0jT0sgMjAxMS8wOC8yMSBGcmVl QlNEIDMuMywgNC40LCA2LjQsIDkuMAotZnJlZWJzZCBmcmVlYnNkNDEgZnJlZWJzZDcyIGZyZWVi c2Q1IGZyZWVic2Q2IGZyZWVic2Q3IGZyZWVic2Q4IGZyZWVic2Q5OgotCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIEZyZWVCU0QgNC4xIG9yIGxhdGVyLi4uJwotCUBpZiB0ZXN0 IGB1bmFtZSAtciB8IGN1dCAtZCAuIC1mIDFgIC1nZSA4OyB0aGVuIFwKLQkgICBIQVZFX0ZCU0Q4 PSctREZSRUVCU0Q4JzsgXAotCWVsc2UgSEFWRV9GQlNEOD0nJzsgZmk7IFwKLQlpZiB0ZXN0IGB1 bmFtZSAtciB8IGN1dCAtZCAuIC1mIDFgIC1nZSA5OyB0aGVuIFwKLQkgICBIQVZFX0ZCU0Q5PSct REZSRUVCU0Q5JzsgXAotCWVsc2UgSEFWRV9GQlNEOT0nJzsgIGZpOyBcCi0JaWYgdGVzdCAtZiAv dXNyL2luY2x1ZGUvdXRtcHguaCA7IFwKLQl0aGVuIEhBVkVfVVRNUFg9Jy1ESEFWRVVUTVBYJyA7 IFwKLQllbHNlIEhBVkVfVVRNUFg9JycgOyBmaTsgXAotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQo Q0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0 NCAtRENLX05DVVJTRVMgLURDS19ORVdURVJNIC1EVENQU09DS0VUIC1ETk9DT1RGTUMgXAotCS1E RlJFRUJTRDQgJCRIQVZFX0ZCU0Q4ICQkSEFWRV9GQlNEOSAtRFVTRV9VVV9MT0NLIC1ERk5GTE9B VCBcCi0JJCRIQVZFX1VUTVBYIC1ESEVSQUxEPVwiXFxcIiBgdW5hbWUgLXJzYFxcXCJcIiBcCi0J LWZ1bnNpZ25lZC1jaGFyIC1EVFBVVFNBUkdUWVBFPWludCAtRFVTRV9TVFJFUlJPUiAkKEtGTEFH UykgXAotCS1PMiAtcGlwZSJcCi0JIkxJQlM9IC1sbmN1cnNlcyAtbGNyeXB0IC1sdXRpbCAtbG0g JChMSUJTKSIKLQotI0ZyZWVCU0QgNS4wIG9yIGxhdGVyIHdpdGggT3BlblNTTC4KLSNPSyAyMDEx LzA2LzE1IEZyZWVCU0QgNC43IGFuZCA4LjIKLSNPSyAyMDExLzA4LzIwIEZyZWVCU0QgOS4wLUNV UlJFTlQKLWZyZWVic2Qrc3NsIGZyZWVic2Qrb3BlbnNzbCBmcmVlYnNkNTArb3BlbnNzbDoKLQlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBGcmVlQlNEIHdpdGggS2VyYmVyb3Mg NS4uLicKLQlAY2FzZSBgb3BlbnNzbCB2ZXJzaW9uYCBpbiBcCi0JICAqMC45LjcqKSBPUEVOU1NM T1BUSU9OPSItRE9QRU5TU0xfMDk3IiA7OyBcCi0JICAqMC45LjgqKSBPUEVOU1NMT1BUSU9OPSIt RE9QRU5TU0xfMDk4IiA7OyBcCi0JICAqMS5bMC05XS5bMC05XSopIE9QRU5TU0xPUFRJT049Ii1E T1BFTlNTTF8xMDAiIDs7IFwKLQkgICopIE9QRU5TU0xPUFRJT049IiIgOzsgXAotCWVzYWM7IFwK LQlIQVZFX0RFUz0nJzsgXAotCURFU19MSUI9Jyc7IFwKLQlpZiBscyAvdXNyL2xpYi9saWJkZXMq ID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbCB8fCBcCi0JICAgbHMgJChTU0xMSUIpL2xpYmRlcyog PiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKLQkgICAgICBERVNfTElCPSctbGRlcyc7 IFwKLQkgICAgICBIQVZFX0RFUz0nLURDS19ERVMgLURMSUJERVMnOyBcCi0gICAgICAgICAgICAg IGVjaG8gIkhBVkUgREVTIjsgXAotICAgICAgICAgICBlbHNlIGVjaG8gIk5PIERFUyI7IFwKLQlm aTsgXAotCSQoTUFLRSkgZnJlZWJzZCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9ICQo Q0MpIiAiQ0MyID0gJChDQzIpIiBcCi0JS0ZMQUdTPSItRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tf U1NMICQoU1NMSU5DKSAtRFpMSUIgJCRPUEVOU1NMT1BUSU9OIFwKLQkkJEhBVkVfREVTICQoS0ZM QUdTKSIgICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCi0JIkxJQlM9IC1sbmN1cnNlcyAtbGNy eXB0IC1sc3NsIC1sY3J5cHRvIC1sdXRpbCAtbG0gXAotCSQoU1NMTElCKSAkJERFU19MSUIgJChM SUJTKSI7IFwKLQlpZiBbICEgLWYgLi93ZXJtaXQgXSB8fCBbIC4vY2tjbWFpLm8gLW50IC4vd2Vy bWl0IF0gOyB0aGVuIFwKLQkJZWNobyAiIjsgXAotCQllY2hvICJJZiBidWlsZCBmYWlsZWQgdHJ5 OiI7IFwKLQkJZWNobyAiIjsgXAotCQllY2hvICIgIG1ha2UgY2xlYW4gOyBtYWtlICQke0tUQVJH RVQ6LSQoQCl9IEtGTEFHUz0tVUNLX0RFUyI7IFwKLQkJZWNobyAiIjsgXAotCWZpCi0KLSNOZXRC U0QgMS40LjEgb3IgbGF0ZXIgd2l0aCB2YW5pdHkgYmFubmVyIGF1dG9tYXRlZCB3aXRoIHVuYW1l Ci0jYW5kIGF1dG9tYXRpYyBpbmNsdXNpb24gb2YgbGFyZ2UgZmlsZSBzdXBwb3J0IGlmIGl0IGlz IGF2YWlsYWJsZS4KLSNUaGlzIHRhcmdldCB0ZXN0ZWQgc3VjY2Vzc2Z1bGx5IG9uIE5ldEJTRCAx LjQuMSwgMS41LjIsIGFuZCAyLjAuMyAoSmFuIDIwMDYpLgotI0ZhaWxzIG9uIE5ldEJTRCAyLjAg b24gU3VuLzMgbWM2ODAzMCB3aXRoIGdjYyAzLjMuMyB1bmxlc3Mgb3B0aW1pemF0aW9uIGlzCi0j ZGlzYWJsZWQgb24gY2tjZm4yLmMgKCJLRkxBR1M9LU8wIikgKExldHRlciBPIERpZ2l0IFplcm8p LgotIyhUaGlzIGNvdWxkIGJlIGF1dG9tYXRlZCBieSB0ZXN0aW5nIGB1bmFtZSAtbWAgZm9yICJz dW4zIi4pCi0jT0s6IDIwMTEvMDYvMTUgb24gTmV0QlNEIDEuNS4yIGFuZCA1LjEuCi0jT0s6IDIw MTEvMDgvMjEgb24gNS4xLgotbmV0YnNkIG5ldGJzZDIgbmV0YnNkMTUgbmV0YnNkMTYgb2xkLW5l dGJzZDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE5ldEJTRCB3aXRoIGN1 cnNlcy4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz1gZ3JlcCBmc2Vla28gL3Vzci9pbmNsdWRlL3N0ZGlv LmggPiAvZGV2L251bGwgJiYgXAotCWVjaG8gJy1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9P RkZTRVRfQklUUz02NCdgIFwKLQktREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIC1EVVNF X1NUUkVSUk9SIC1ESEFWRV9PUEVOUFRZIFwKLQktZnVuc2lnbmVkLWNoYXIgLURIRVJBTEQ9XCJc XFwiIE5ldEJTRCBgdW5hbWUgLXJgXFxcIlwiIFwKLQktRENLX0RUUkNEIC1EQ0tfRFRSQ1RTIC1E VFBVVFNBUkdUWVBFPWludCAtREZORkxPQVQgJChLRkxBR1MpIC1PIiBcCi0JIkxJQlM9IC1sY3Vy c2VzIC1sY3J5cHQgLWxtIC1sdXRpbCAkKExJQlMpIgotCi0jTmV0QlNEIDEuNC4xIG9yIGxhdGVy IHdpdGggT3BlblNTTAotI09LOiAyMDExLzA2LzE1IG9uIE5ldEJTRCA1LjEgKGJ1dCBub3QgMS41 LjIgd2l0aCBPcGVuU1NMIDAuOS41YSkKLSNPSzogMjAxMS8wOC8yMSBvbiA1LjEuCi1uZXRic2Qr c3NsIG5ldGJzZCtvcGVuc3NsOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IE5ldEJTRCtPcGVuU1NMIFNTTExJQj0kKFNTTExJQiknCi0JQGNhc2UgYG9wZW5zc2wgdmVyc2lv bmAgaW4gXAotCSAgKjAuOS43KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5NyIgOzsgXAot CSAgKjAuOS44KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5OCIgOzsgXAotCSAgKjEuWzAt OV0uWzAtOV0qKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMTAwIiA7OyBcCi0JICAqKSBPUEVO U1NMT1BUSU9OPSIiIDs7IFwKLQllc2FjOyBcCi0JSEFWRV9ERVM9Jyc7IFwKLQlERVNfTElCPScn OyBcCi0JaWYgbHMgL3Vzci9saWIvbGliZGVzKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwgfHwg XAotCSAgIGxzICQoU1NMTElCKS9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhl biBcCi0JICAgICAgREVTX0xJQj0nLWxkZXMnOyBcCi0JICAgICAgSEFWRV9ERVM9Jy1EQ0tfREVT IC1ETElCREVTJzsgXAotICAgICAgICAgICAgICBlY2hvICJIQVZFIERFUyI7IFwKLSAgICAgICAg ICAgZWxzZSBlY2hvICJOTyBERVMiOyBcCi0JZmk7IFwKLQkkKE1BS0UpIG5ldGJzZCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9ICQoQ0MpIiAiQ0MyID0gJChDQzIpIiBcCi0JIktGTEFH Uz0gLURDS19BVVRIRU5USUNBVElPTiAtRENLX0VOQ1JZUFRJT04gLURDS19DQVNUICQkSEFWRV9E RVMgXAotCS1EQ0tfU1NMIC1EQ0tfUEFNIC1EWkxJQiAtRE5PX0RDTF9JTkVUX0FUT04gJCRPUEVO U1NMT1BUSU9OIFwKLQkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCi0JIkxJ QlM9IC1ML3Vzci9wa2cvbGliIC1SL3Vzci9wa2cvbGliIC1sc3NsICQkREVTX0xJQiAtbGN1cnNl cyBcCi0JLWxjcnlwdG8gLWxjcnlwdCAtbHogLWxtIC1scGFtIC1sdXRpbCAkKExJQlMpIgotCi0j TmV0QlNEIHdpdGggTUlUIEtlcmJlcm9zIDU6Ci0jIE9LIDIwMTEvMDYvMTUgKG9uY2UgSzVJTkMg YW5kIEs1TElCIHdlcmUgc2V0IHJpZ2h0KS4KLSMgTk9UIE9LIGZvciBIZWltZGFsIC0gSGVpbWRh bCBLZXJiZXJvcyBzdXBwb3J0IGluIEMtS2VybWl0IG5lZWRzIHdvcmsuCi0jIE9LOiAyMDExLzA4 LzIxIG9uIDUuMS4KLW5ldGJzZCtrcmI1OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIE5ldEJTRCB3aXRoIEtlcmJlcm9zIDUuLi4nCi0JQGNhc2UgYG9wZW5zc2wgdmVyc2lv bmAgaW4gXAotCSAgKjAuOS43KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5NyIgOzsgXAot CSAgKjAuOS44KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5OCIgOzsgXAotCSAgKjEuWzAt OV0uWzAtOV0qKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMTAwIiA7OyBcCi0JICAqKSBPUEVO U1NMT1BUSU9OPSIiIDs7IFwKLQllc2FjOyBcCi0JSEFWRV9ERVM9Jyc7IFwKLQlERVNfTElCPScn OyBcCi0JaWYgbHMgL3Vzci9saWIvbGliZGVzKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwgfHwg XAotCSAgIGxzICQoU1NMTElCKS9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhl biBcCi0JICAgICAgREVTX0xJQj0nLWxkZXMnOyBcCi0JICAgICAgSEFWRV9ERVM9Jy1EQ0tfREVT IC1ETElCREVTJzsgXAotICAgICAgICAgICAgICBlY2hvICJIQVZFIERFUyI7IFwKLSAgICAgICAg ICAgZWxzZSBlY2hvICJOTyBERVMiOyBcCi0JZmk7IFwKLQkkKE1BS0UpIG5ldGJzZCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9ICQoQ0MpIiAiQ0MyID0gJChDQzIpIiBcCi0JIktGTEFH Uz0gLURDS19BVVRIRU5USUNBVElPTiAtRENLX0VOQ1JZUFRJT04gLURDS19LRVJCRVJPUyAtREtS QjUgXAotCS1EQ0tfQ0FTVCAkJEhBVkVfREVTIC1ETk9GVFBfR1NTQVBJICQoSzVJTkMpICQoSzVJ TkMpL2tyYjUgXAotCSQoS0ZMQUdTKSIgXAotCSJMSUJTPSAkKEs1TElCKSAtTC91c3IvcGtnL2xp YiAtUi91c3IvcGtnL2xpYiAtbGN1cnNlcyAkJERFU19MSUIgXAotCS1sY3J5cHRvIC1sZ3NzYXBp IC1sa3JiNSAtbG0gLWx1dGlsICQoTElCUykiCi0KLSMgTmV0QlNEIC0gV2l0aCBLZXJiZXJvcyA1 IGFuZCBTU0wgYW5kIFpsaWIuCi0jIE9LOiAyMDExLzA4LzIxIG9uIDUuMSB3aXRoIE1JVCBLZXJi ZXJvcy4KLW5ldGJzZCtrcmI1K3NzbCBuZXRic2Qra3JiNStvcGVuc3NsK3psaWI6Ci0JQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTmV0QlNEK09wZW5TU0wrS2VyYmVyb3M1Li4u JwotCUBjYXNlIGBvcGVuc3NsIHZlcnNpb25gIGluIFwKLQkgICowLjkuNyopIE9QRU5TU0xPUFRJ T049Ii1ET1BFTlNTTF8wOTciIDs7IFwKLQkgICowLjkuOCopIE9QRU5TU0xPUFRJT049Ii1ET1BF TlNTTF8wOTgiIDs7IFwKLQkgICoxLlswLTldLlswLTldKikgT1BFTlNTTE9QVElPTj0iLURPUEVO U1NMXzEwMCIgOzsgXAotCSAgKikgT1BFTlNTTE9QVElPTj0iIiA7OyBcCi0JZXNhYzsgXAotCUhB VkVfREVTPScnOyBcCi0JREVTX0xJQj0nJzsgXAotCWlmIGxzIC91c3IvbGliL2xpYmRlcyogPiAv ZGV2L251bGwgMj4gL2Rldi9udWxsIHx8IFwKLQkgICBscyAkKFNTTExJQikvbGliZGVzKiA+IC9k ZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAotCSAgICAgIERFU19MSUI9Jy1sZGVzJzsgXAot CSAgICAgIEhBVkVfREVTPSctRENLX0RFUyAtRExJQkRFUyc7IFwKLSAgICAgICAgICAgICAgZWNo byAiSEFWRSBERVMiOyBcCi0gICAgICAgICAgIGVsc2UgZWNobyAiTk8gREVTIjsgXAotCWZpOyBc Ci0JJChNQUtFKSBuZXRic2QgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSAkKENDKSIg IkNDMiA9ICQoQ0MyKSIgXAotCSJLRkxBR1M9IC1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19FTkNS WVBUSU9OIC1EQ0tfQ0FTVCAkJEhBVkVfREVTIFwKLQktRENLX0tFUkJFUk9TIC1ES1JCNSAtRE5P RlRQX0dTU0FQSSAkKEs1SU5DKSAkKEs1SU5DKS9rcmI1IFwKLQktRENLX1NTTCAtRENLX1BBTSAt RFpMSUIgLUROT19EQ0xfSU5FVF9BVE9OICQkT1BFTlNTTE9QVElPTiBcCi0JJChLRkxBR1MpIiAi TE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAotCSJMSUJTPSAkKEs1TElCKSAtTC91c3IvcGtnL2xp YiAtUi91c3IvcGtnL2xpYiAtbHNzbCAkJERFU19MSUIgXAotCS1sY3J5cHRvIC1sY3J5cHQgLWxn c3NhcGkgLWxrcmI1IC1seiAtbG0gLWxwYW0gLWx1dGlsIC1sY3Vyc2VzICQoTElCUykiCi0KLSNT cGVjaWFsIFNlY3VyaXR5IEVuaGFuY2VkIE5ldEJTRCB0YXJnZXQgd2l0aCBTUlAsIFNTTCwgYW5k IHpsaWIgc3VwcG9ydC4KLSNUbyBidWlsZCB0aGlzLCB5b3UgbmVlZCB0byBCVUlMRCB0aGUgcGtn c3JjIHNycF9jbGllbnQgcGFja2FnZS4gIEFmdGVyCi0jeW91IGJ1aWxkIGl0LCB5b3UgbXVzdCBn byBpbnRvIHdvcmsvc3JwLXgueS56L2xpYmtyeXB0byBhbmQgImJtYWtlIGluc3RhbGwiCi0jdGhl biBnbyB0byB3b3JrL3NycC14Lnkuei9saWJzcnAgYW5kICJibWFrZSBpbnN0YWxsIi4gIEFzIG9m IDIwMDVRMywgdGhlCi0jcGtnc3JjIGluc3RhbGwgb25seSBpbnN0YWxsZWQgdGhlIHN0YXRpY2Fs bHkgbGlua2VkIGNsaWVudCBhcHBsaWNhdGlvbnMuICBZb3UKLSNuZWVkIHRvIG1hbnVhbGx5IGlu c3RhbGwgdGhlIGxpYnJhcmllcyB0byBidWlsZCB5b3VyIG93biBhcHBsaWNhdGlvbnMuCi0jTk9U IFRFU1RFRCBSRUNFTlRMWSAtIHByb2JhYmx5IG5lZWRzIHdvcmsuCi1uZXRic2Qrc3NsK3NycCt6 bGliOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTmV0QlNEIHdpdGggY3Vy c2VzLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VU IC1EVVNFX1NUUkVSUk9SIC1ETkVUQlNEMTUgXAotCS1EQ0tfRFRSQ0QgLURDS19EVFJDVFMgLURU UFVUU0FSR1RZUEU9aW50IC1ESEFWRV9PUEVOUFRZIFwKLQktSS91c3IvaW5jbHVkZS9vcGVuc3Ns IC1JL3Vzci9wa2cvaW5jbHVkZSBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NSUCAtRFBS RV9TUlBfMV80XzUgLURDS19FTkNSWVBUSU9OIFwKLQktRENLX0NBU1QgLURDS19ERVMgLURMSUJE RVMgLURDS19TU0wgLURaTElCIC1ERk5GTE9BVCAkKEtGTEFHUykgLU8iIFwKLQkiTElCUz0gLUwv dXNyL3BrZy9saWIgLVIvdXNyL3BrZy9saWIgLWxjdXJzZXMgLWxzcnAgLWxnbXAgLWxkZXMgXAot CS1sc3NsIC1sa3J5cHRvIC1sY3J5cHRvIC1sY3J5cHQgLWx6IC1sbSAtbHV0aWwgJChMSUJTKSIK LQotI05ldEJTRCB3aXRoIGN1cnNlcyBsZWZ0IG91dCAoZS5nLiBmb3IgdXNlIGFzIElLU0QpLgot bmV0YnNkbmM6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBOZXRCU0Qgd2l0 aCBubyBjdXJzZXMuLi4KLQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgbmV0YnNkIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LUROT0NVUlNFUyIKLQotI05ldEJTRCB3 aXRoIG5jdXJzZXMgcmVxdWVzdGVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gY3Vyc2VzLXdoaWNo LWlzLW5jdXJzZXMKLW5ldGJzZG46Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBOZXRCU0Qgd2l0aCBjdXJzZXMuLi4KLQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9YGdyZXAgZnNlZWtvIC91 c3IvaW5jbHVkZS9zdGRpby5oID4gL2Rldi9udWxsICYmIFwKLQllY2hvICctRF9MQVJHRUZJTEVf U09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQnYCBcCi0JLURCU0Q0NCAtRENLX0NVUlNFUyAt RFRDUFNPQ0tFVCAtRFVTRV9TVFJFUlJPUiAtREhBVkVfT1BFTlBUWSBcCi0JLURIRVJBTEQ9XCJc XFwiIE5ldEJTRCBgdW5hbWUgLXJgXFxcIlwiIFwKLQktRENLX0RUUkNEIC1EQ0tfRFRSQ1RTIC1E VFBVVFNBUkdUWVBFPWludCAtREZORkxPQVQgJChLRkxBR1MpIC1PIiBcCi0JIkxJQlM9IC1ML3Vz ci9wa2cvbGliIC1sbmN1cnNlcyAtbGNyeXB0IC1sbSAtbHV0aWwgJChMSUJTKSIKLQotI09wZW5C U0QgYmVmb3JlIDIuMy4KLSNVc2VzIG5jdXJzZXMgYXMgaXRzIGN1cnNlcyBzbyB1c2UgLWx0ZXJt bGliLCBub3QgLWx0ZXJtY2FwCi0jQnV0IGl0IGRvZXNuJ3QgdXNlIHV1X2xvY2soKSB3aGljaCB3 YXMgaW50cm9kdWNlZCBpbiBPcGVuQlNEIDIuMy4KLSNGb3IgdGhhdCB1c2UgdGhlIG5leHQgZW50 cnkuCi0jQWRkIC1ETUFJTlRZUEU9aW50IGlmIHlvdSBnZXQgY29tcGxhaW50cyBhYm91dCBtYWlu OiByZXR1cm4gdHlwZSBpcyBub3QgaW50Lgotb3BlbmJzZG9sZDoKLQlAZWNobyBNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIE9wZW5CU0QuLi4KLQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKEND MikgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENDQg LURDS19DVVJTRVMgLURDS19ORVdURVJNIC1EVENQU09DS0VUIC1ET1BFTkJTRCBcCi0JLURGTkZM T0FUIC1ETkRTWVNFUlJMSVNUICQoS0ZMQUdTKSAtTyIgIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWxp YiAtbG0iCi0KLSNPcGVuQlNEIDIuMyBvciBsYXRlcgotI0FkZCAtRE1BSU5UWVBFPWludCBpZiB5 b3UgZ2V0IGNvbXBsYWludHMgYWJvdXQgbWFpbjogcmV0dXJuIHR5cGUgaXMgbm90IGludC4KLSNG b3IgQy1LZXJtaXQgOC4wIChDaHJpc3RpYW4gV2Vpc2dlcmJlcik6Ci0jIC1sdGVybWxpYiByZW1v dmVkIChwcmVzdW1hYmx5IGJlY2F1c2UgLWxjdXJzZXM9PW5jdXJzZXMgYWxyZWFkeSBpbmNsdWRl cyBpdCkKLSMgLURVU0VfVVVfTE9DSyBhbmQgLWx1dGlsIGFkZGVkIGZvciB1dV9sb2NrKCkKLSMg LURORFNZU0VSUkxJU1QgY2hhbmdlZCB0byAtRFVTRV9TVFJFUlJPUgotI0lmIHRoaXMgZ2l2ZXMg eW91IHRyb3VibGUgdXNlIHRoZSBwcmV2aW91cyBlbnRyeS4KLSNOT1RFOiBUaGUgb3BlbmJzZCBh bmQgb3BlbmJzZCtzc2wgc2hvdWxkIGJlIHJld29ya2VkIHRvIGJlIGxpa2UgdGhlCi0jY29ycmVz cG9uZGluZyBGcmVlQlNEIGFuZCBOZXRCU0QgdGFyZ2V0cy4gIFRoZSBtaXJic2QgdGFyZ2V0cyBz aG91bGQKLW9wZW5ic2Q6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBPcGVu QlNEIDIuMyBvciBsYXRlci4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0NCAtRENLX0NVUlNF UyAtRENLX05FV1RFUk0gLURUQ1BTT0NLRVQgLURPUEVOQlNEIFwKLQktREhFUkFMRD1cIlxcXCIg T3BlbkJTRCBgdW5hbWUgLXJgXFxcIlwiIFwKLQktRFVTRV9VVV9MT0NLIC1ERk5GTE9BVCAtRFVT RV9TVFJFUlJPUiAkKEtGTEFHUykgLU8iIFwKLQkiTElCUz0gLWxjdXJzZXMgLWx1dGlsIC1sbSIK LQotI0JldHRlciB0byBjaGFpbiB0byB0aGUgb3BlbmJzZCB0YXJnZXQgYnV0Li4uCi1taXJic2Q6 Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBPcGVuQlNEIDIuMyBvciBsYXRl ci4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0NCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0g LURUQ1BTT0NLRVQgLURPUEVOQlNEIFwKLQktREhFUkFMRD1cIlxcXCIgTWlyQlNEIGB1bmFtZSAt cmBcXFwiXCIgXAotCS1EVVNFX1VVX0xPQ0sgLURGTkZMT0FUIC1EVVNFX1NUUkVSUk9SICQoS0ZM QUdTKSAtTyIgXAotCSJMSUJTPSAtbGN1cnNlcyAtbHV0aWwgLWxtIgotCi0jT3BlbkJTRCAzLjAg b3IgbGF0ZXIgaW5jbHVkZXMgT3BlblNTTAotI0FkZCAtRE1BSU5UWVBFPWludCBpZiB5b3UgZ2V0 IGNvbXBsYWludHMgYWJvdXQgbWFpbjogcmV0dXJuIHR5cGUgaXMgbm90IGludC4KLSNGb3IgQy1L ZXJtaXQgOC4wIChDaHJpc3RpYW4gV2Vpc2dlcmJlcik6Ci0jIC1sdGVybWxpYiByZW1vdmVkIChw cmVzdW1hYmx5IGJlY2F1c2UgLWxjdXJzZXM9PW5jdXJzZXMgYWxyZWFkeSBpbmNsdWRlcyBpdCkK LSMgLURVU0VfVVVfTE9DSyBhbmQgLWx1dGlsIGFkZGVkIGZvciB1dV9sb2NrKCkKLSMgLURORFNZ U0VSUkxJU1QgY2hhbmdlZCB0byAtRFVTRV9TVFJFUlJPUgotI0lmIHRoaXMgZ2l2ZXMgeW91IHRy b3VibGUgdXNlIHRoZSBwcmV2aW91cyBlbnRyeS4KLW9wZW5ic2Qrc3NsOgotCUBlY2hvIE1ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgT3BlbkJTRCAzLjAgb3IgbGF0ZXIuLi4KLQkkKE1BS0Up IENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAot CSJDRkxBR1M9IC1EQlNENDQgLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1EVENQU09DS0VUIC1E T1BFTkJTRCBcCi0JLURIRVJBTEQ9XCJcXFwiIE9wZW5CU0QgYHVuYW1lIC1yYFxcXCJcIiBcCi0J LURVU0VfVVVfTE9DSyAtREZORkxPQVQgLURVU0VfU1RSRVJST1IgLURDS19BVVRIRU5USUNBVElP TiBcCi0JLURDS19TU0wgJChLRkxBR1MpIC1PIiBcCi0JIkxJQlM9IC1sY3Vyc2VzIC1sdXRpbCAt bG0gLWxzc2wgLWxjcnlwdG8iCi0KLW1pcmJzZCtzc2w6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBPcGVuQlNEIDMuMCBvciBsYXRlci4uLgotCSQoTUFLRSkgQ0M9JChDQykg Q0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0g LURCU0Q0NCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURUQ1BTT0NLRVQgLURPUEVOQlNEIFwK LQktREhFUkFMRD1cIlxcXCIgTWlyQlNEIGB1bmFtZSAtcmBcXFwiXCIgXAotCS1EVVNFX1VVX0xP Q0sgLURGTkZMT0FUIC1EVVNFX1NUUkVSUk9SIC1EQ0tfQVVUSEVOVElDQVRJT04gXAotCS1EQ0tf U1NMIC1ETk9fRENMX0lORVRfQVRPTiAkKEtGTEFHUykgLU8iIFwKLQkiTElCUz0gLWxjdXJzZXMg LWx1dGlsIC1sbSAtbHNzbCAtbGNyeXB0byIKLQotIyBtYWtlIDM4NmJzZCAwLjBuZXcsIHBvc2l4 Ci0jIGZvciAgMzg2YnNkIDAuMS4yNCwgY2hhbmdlIC91c3IvaW5jbHVkZS90ZXJtaW9zLmggdG8g I2RlZmluZSBOQ0NTIGlmCi0jICBfUE9TSVhfU09VUkNFIGlzICNkZWZpbmVkLiAoc291cmNlOiBs ZXdpbmUsIHBvc2l4IHByZ21ycyBndWlkZSwgb2ByZWlsbHkpCi0jTk9URTogTG9jayBkaXJlY3Rv cnkgaXMgL3Zhci9zcG9vbC9sb2NrLiAgRm9ybWVybHksIGl0IHdhcyAvdmFyL3Nwb29sL3V1Y3As Ci0jYnV0IHJlcG9ydGVkbHkgPHdqb25lc0BoYWxjeW9uLmNvbT4gdGhhdCB3YXMgZHVlIHRvIGEg dHlwbyBpbiAnbWFuIHRpcCcuCi0zODZic2Q6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3Igam9saXggMzg2QlNEIDAuMG5ldyBhbmQgMC4xLjI0Li4uJwotCSQoTUFLRSkgQ0M9 JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNG TEFHUz0gLURQT1NJWCAtRFNFVFJFVUlEIC1EUElEU1RSSU5HIC1EVVNMRUVQIFwKLQktRF8zODZC U0QgLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgXAotCS1ETE9DS19ESVI9XFxcIi92YXIvc3Bvb2wv bG9ja1xcXCIgXAotCSQoS0ZMQUdTKSAtTyIgIkxOS0ZMQUdTID0gLXMiICJMSUJTID0gLWxjdXJz ZXMgLWx0ZXJtY2FwIgotCi0jIE1hYyBPUyBYIDEwIGVhcmx5IHZlcnNpb25zLgotIyBGb3IgMTAu My45IGFuZCBsYXRlciwgdXNlIHRoZSBtYWNvc3ggdGFyZ2V0IGJlbG93LgotCi0jTWFjIE9TIFgg MS4wIChSaGFwc29keSwgRGFyd2luKSAtLSBUQ1AvSVAgYnV0IG5vIGN1cnNlcy4KLW9sZG1hY29z eDEwOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgYHVuYW1lIC1zYC4uLgot CSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIkNGTEFHUz0gLURNQUNPU1gxMCAtRFRDUFNPQ0tFVCAtRFVTRV9TVFJFUlJPUiAt TyAkKEtGTEFHUykiCi0KLSNNYWMgT1MgWCAxLjAgKFJoYXBzb2R5LCBEYXJ3aW4pIC0tIFRDUC9J UCBhbmQgY3Vyc2VzLgotI05vdGU6IGN1cnNlcyBtdXN0IGJlIG9idGFpbmVkIHNlcGFyYXRlbHku ICBTZWUgbmV4dCBlbnRyeSBmb3IgbmN1cnNlcy4KLSNBZGQgIkxJQlMgPSAtbGN1cnNlcyAtbHRl cm1jYXAiIGlmIG5lY2Vzc2FyeSAoYnV0IHJlcG9ydGVkbHkgaXQgaXMgbm90KS4KLW9sZG1hY29z eDEwYzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIGB1bmFtZSAtc2AgKyBj dXJzZXMuLi4KLQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1ETUFDT1NYMTAgLURDS19DVVJTRVMgLURUUFVU U0ZOVFlQRT12b2lkIC1EVFBVVFNJU1ZPSUQgXAotCS1EVENQU09DS0VUIC1EVVNFX1NUUkVSUk9S IC1PICQoS0ZMQUdTKSIKLQotI01hYyBPUyBYIDEuMCAoUmhhcHNvZHksIERhcndpbikgLS0gVENQ L0lQIGFuZCBuY3Vyc2VzLgotI05vdGU6IG5jdXJzZXMgbXVzdCBiZSBvYnRhaW5lZCBzZXBhcmF0 ZWx5LgotI0luIHRoZSBldmVudCBvZiB0cm91YmxlIHdpdGggdGhpcyBvbmUgdHJ5IHRoZSBuZXh0 IG9uZS4KLW9sZG1hY29zeDEwbmM6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBgdW5hbWUgLXNgICsgbmN1cnNlcy4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURNQUNPU1gxMCAt RENLX05DVVJTRVMgLURUQ1BTT0NLRVQgLURVU0VfU1RSRVJST1IgLU8gXAotCSQoS0ZMQUdTKSIg IkxJQlM9IC1sbmN1cnNlcyAkKExJQlMpIgotCi0jTWFjIE9TIFggMTAuMiAoSmFndWFyKSBuY3Vy c2VzLgotb2xkbWFjb3N4MTAybmM6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBgdW5hbWUgLXNgICsgbmN1cnNlcy4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURNQUNPU1gxMCAt RENLX05DVVJTRVMgLURUQ1BTT0NLRVQgLURVU0VfU1RSRVJST1IgLU8gXAotCSQoS0ZMQUdTKSAi ICJMSUJTPSAtbG5jdXJzZXMgJChMSUJTKSIKLQotI1RoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBp ZiBjdXJzZXMuaCBhbHNvIGV4aXN0cywgaXQgY29uZmxpY3RzIHdpdGgKLSNuY3Vyc2VzLmggYW5k IGFuZCB3ZSBoYXZlIGZhdGFsIGVycm9ycy4gIElmIHRoaXMgaGFwcGVucyB0byB5b3UsIHRoZW4K LSN0cnkgdGhpcyB0YXJnZXQuCi1vbGRtYWNvc3gxMG5jeDoKLQlAZWNobyBNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIGB1bmFtZSAtc2AgKyBuY3Vyc2VzLi4uCi0JQHJtIC1mIC4vY3Vyc2Vz Lmg7IHRvdWNoIC4vY3Vyc2VzLmgKLQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1ETUFDT1NYMTAgLURDS19O Q1VSU0VTIC1EVENQU09DS0VUIC1EVVNFX1NUUkVSUk9SIFwKLQktSS4gLU8gJChLRkxBR1MpICIg XAotCSJMSUJTPSAtbG5jdXJzZXMgJChMSUJTKSIKLQlAcm0gLWYgLi9jdXJzZXMuaAotCi0jTWFj IE9TIFggMTAuMyAoUGFudGhlcikgLSBBc3N1bWVzIG5jdXJzZXMgaXMgaW5zdGFsbGVkLgotb2xk bWFjb3N4MTAzOiAKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIGB1bmFtZSAt c2AgKyBuY3Vyc2VzLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRE1BQ09TWDEwIC1ETUFDT1NYMTAz IC1EQ0tfTkNVUlNFUyAtRFRDUFNPQ0tFVCAtRENLSFRUUCBcCi0JLURVU0VfU1RSRVJST1IgLURV U0VfTkFNRVNFUl9DT01QQVQgLU8gXAotCSQoS0ZMQUdTKSAiICJMSUJTPSAtbG5jdXJzZXMgLWxy ZXNvbHYgJChMSUJTKSIKLQotI01hYyBPUyBYIDEwLjMgKFBhbnRoZXIpIHdpdGggS2VyYmVyb3Mg NSBhbmQgU1NMLCBhc3N1bWVzIG5jdXJzZXMgaXMgaW5zdGFsbGVkLgotb2xkbWFjb3N4MTAzK3Nl Y3VyZToKLQlAZWNobyBNYWtpbmcgU2VjdXJlIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBgdW5hbWUg LXNgICsgbmN1cnNlcy4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURNQUNPU1gxMCAtRE1BQ09TWDEw MyAtRENLX05DVVJTRVMgLURUQ1BTT0NLRVQgXAotCS1EVVNFX1NUUkVSUk9SIC1EVVNFX05BTUVT RVJfQ09NUEFUIC1PIC1EQ0tfUEFNIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVS T1MgLURLUkI1IC1EWkxJQiBcCi0JLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAt RExJQkRFUyAtRENLX1NTTCBcCi0JJChLRkxBR1MpICIgIkxJQlM9IC1sc3NsIC1sY3J5cHRvIC1s a3JiNSAtbGNvbV9lcnIgXAotCS1sazVjcnlwdG8gLWxnc3NhcGlfa3JiNSAtbHBhbSAtbG5jdXJz ZXMgLWxyZXNvbHYgJChMSUJTKSIKLQotIyBUSElTIElTIFRIRSBNQUlOIE1BQyBPUyBYIFRBUkdF VCAodGhlIG5leHQgb25lIGlzIGZvciBLZXJiZXJvcy9TU0wgYnVpbGRzKS4KLSMgVXNlIHRoaXMg dGFyZ2V0IGZvciAxMC4zLjkgKG9yIG1heWJlIGVhcmxpZXIpIHRocm91Z2ggMTAuNiAobWF5YmUg bGF0ZXIpCi0jIG9uIGJvdGggUG93ZXIgYW5kIEludGVsIGFyY2hpdGVjdHVyZXMuICBUaGlzIG9u ZSB1c2VzIHV0bXAuaCBvbiAxMC40IGFuZAotIyBlYXJsaWVyIGFuZCB1dG1weC5oIG9uIDEwLjUg b253YXJkcy4KLSMgTm90ZTogTWFjIE9TIFggMTAuNSBhbmQgZWFybGllciBhcmUgMzItYml0OyAx MC42IGFuZCBsYXRlciA2NC1iaXQuCi0jIE5vdGUgMjogQXMgb2YgQy1LZXJtaXQgOS4wIC1OT1VV Q1AgaXMgaW5jbHVkZWQgYnkgZGVmYXVsdCBiZWNhdXNlCi0jIE1hYyBPUyBYIGRvZXNuJ3Qgc3Vw cG9ydCBVVUNQLiAgVG8gdW5kbyB0aGlzLCB1c2UgS0ZMQUdTPS1VTk9VVUNQLgotI09LOiAyMDEx LzA2LzE0IChmb3IgMTAuNC4xMSwgMTAuNS44LCAxMC42LjcpCi1tYWNvc3ggbWFjb3N4MTAgbWFj b3N4MTAuMy45IG1hY29zeDEwLjQgbWFjb3N4MTAuNSBtYWNvc3gxMC42OgotCUBNQUNPU05BTUU9 YC91c3IvYmluL3N3X3ZlcnMgLXByb2R1Y3ROYW1lYDsgXAotCU1BQ09TVj1gL3Vzci9iaW4vc3df dmVycyAtcHJvZHVjdFZlcnNpb25gOyBcCi0JZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yICQkTUFDT1NOQU1FICQkTUFDT1NWLi4uIDsgXAotCU1BQ0NQVT0kJEhPU1RUWVBFOyBcCi0J aWYgdGVzdCBgdW5hbWUgLXIgfCBjdXQgLWQgLiAtZiAxYCAtZ3QgODsgXAotCXRoZW4gaWYgdGVz dCAtZiAvdXNyL2luY2x1ZGUvdXRtcHguaCA7IFwKLQl0aGVuIEhBVkVfVVRNUFg9Jy1ESEFWRVVU TVBYIC1EX1VUTVBYX0NPTVBBVCcgOyBcCi0JZWxzZSBIQVZFX1VUTVBYPScnIDsgZmkgOyBmaTsg XAotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCi0JIkNGTEFHUz0gLURNQUNPU1gxMCAtRE1BQ09TWDEwMyAtRENLX05DVVJTRVMg LURUQ1BTT0NLRVQgLURDS0hUVFAgXAotCS1EVVNFX1NUUkVSUk9SIC1EVVNFX05BTUVTRVJfQ09N UEFUIC1ETk9DSEVDS09WRVJGTE9XIC1ERk5GTE9BVCBcCi0JLURfTEFSR0VGSUxFX1NPVVJDRSAt RF9GSUxFX09GRlNFVF9CSVRTPTY0ICQkSEFWRV9VVE1QWCBcCi0JLWZ1bnNpZ25lZC1jaGFyIC1E Tk9EQ0xJTklUR1JPVVBTIFwKLQktRE5PVVVDUCAtTyAtREhFUkFMRD1cIlxcXCIgJCR7TUFDT1NO QU1FfSAkJHtNQUNPU1Z9XFxcIlwiIFwKLQktRENLQ1BVPVwiXFxcIiQke01BQ0NQVX1cXFwiXCIg XAotCSQoS0ZMQUdTKSIgIkxJQlM9IC1sbmN1cnNlcyAtbHJlc29sdiAkKExJQlMpIgotCi0jIE1h YyBPUyBYIDEwLjMuOSBvciBsYXRlciB3aXRoIEtlcmJlcm9zIDUgYW5kIE9wZW5TU0wuLi4KLSMg Tk9URTogQXBwbGUgaGFzIHJlbW92ZWQgYWxsIHN1cHBvcnQgZm9yIERFUyBpbiBPcGVuU1NMIGFu ZCBLZXJiZXJvcwotIyAgIGluIE1hYyBPUyBYIDEwLjYgYW5kIGxhdGVyLiAgVGhlIERFUyBmbGFn cyBhcmUgaW5jbHVkZWQgb3IgbGVmdCBvdXQKLSMgICBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRo ZSBNYWMgT1MgWCB2ZXJzaW9uIG51bWJlci4KLSMgU2VlIG5vdGUgYWJvdXQgVVVDUCBpbiBwcmV2 aW91cyB0YXJnZXQuCi0jT0s6IDIwMDkvMTEvMTYgKGZvciAxMC4zLjksIDEwLjQuMTEsIDEwLjUu OCwgMTAuNi4xKQotI09LOiAyMDExLzA2LzE0IChmb3IgMTAuNC4xMSwgMTAuNS44LCAxMC42Ljcp Ci1tYWNvc3gra3JiNStzc2wgbWFjb3N4MTAuNStrcmI1K3NzbCBtYWNvc3gxMC42K2tyYjUrc3Ns IFwKLW1hY29zeCtrcmI1K29wZW5zc2wgbWFjb3N4MTAuNStrcmI1K29wZW5zc2wgbWFjb3N4MTAu NitrcmI1K29wZW5zc2w6Ci0JQE1BQ09TTkFNRT1gL3Vzci9iaW4vc3dfdmVycyAtcHJvZHVjdE5h bWVgOyBcCi0JTUFDT1NWPWAvdXNyL2Jpbi9zd192ZXJzIC1wcm9kdWN0VmVyc2lvbmA7IFwKLQll Y2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgJCRNQUNPU05BTUUgJCRNQUNPU1YuLi4g OyBcCi0JTUFDQ1BVPSQkSE9TVFRZUEU7IFwKLQlpZiB0ZXN0IGB1bmFtZSAtciB8IGN1dCAtZCAu IC1mIDFgIC1ndCA4OyBcCi0JdGhlbiBpZiB0ZXN0IC1mIC91c3IvaW5jbHVkZS91dG1weC5oIDsg XAotCXRoZW4gSEFWRV9VVE1QWD0nLURIQVZFVVRNUFggLURfVVRNUFhfQ09NUEFUJyA7IFwKLQll bHNlIEhBVkVfVVRNUFg9JycgOyBmaSA7IGZpOyBcCi0JaWYgdGVzdCBgdW5hbWUgLXIgfCBjdXQg LWQgLiAtZiAxYCAtZXEgNzsgXAotCXRoZW4gSVNfTUFDT1NYMTAzPSctRE1BQ09TWDEwMycgOyBc Ci0JZWxzZSBJU19NQUNPU1gxMDM9JycgOyBmaTsgXAotCWNhc2UgJCRNQUNPU1YgaW4gXAotCSAg MTAuWzAxMjM0NV0uKikgSEFWRV9ERVM9Jy1EQ0tfREVTIC1ETElCREVTJyA7OyBcCi0JICAqLiop IEhBVkVfREVTPScnIDs7IFwKLQllc2FjIDsgXAotCWlmIHRlc3QgLXggL3Vzci9iaW4va3JiNS1j b25maWcgOyBcCi0JdGhlbiBIQVZFX0tSQjVDT05GSUc9YC91c3IvYmluL2tyYjUtY29uZmlnIC0t bGlicyBrcmI1IGdzc2FwaWAgOyBcCi0JZWxzZSBIQVZFX0tSQjVDT05GSUc9Jy1sZ3NzYXBpX2ty YjUgLWxrcmI1IC1sazVjcnlwdG8gXAotCS1sY29tX2VyciAtbHJlc29sdicgOyBmaTsgXAotCSQo TUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCi0JIkNGTEFHUz0gLURNQUNPU1gxMCAkJElTX01BQ09TWDEwMyAtRENLX05DVVJTRVMgLURU Q1BTT0NLRVQgXAotCS1EVVNFX1NUUkVSUk9SIC1EVVNFX05BTUVTRVJfQ09NUEFUIC1ETk9DSEVD S09WRVJGTE9XIC1ERk5GTE9BVCBcCi0JLURDS0hUVFAgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9G SUxFX09GRlNFVF9CSVRTPTY0ICQkSEFWRV9VVE1QWCBcCi0JLUROT0RDTElOSVRHUk9VUFMgLURD S19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TIC1ES1JCNSAtRFpMSUIgXAotCS1EQ0tfRU5D UllQVElPTiAtRENLX0NBU1QgLURDS19TU0wgLURPUEVOU1NMXzA5OCAkJEhBVkVfREVTIFwKLQkt RE5PVVVDUCAtREhFUkFMRD1cIlxcXCIgJCR7TUFDT1NOQU1FfSAkJHtNQUNPU1Z9XFxcIlwiIFwK LQktRENLQ1BVPVwiXFxcIiQke01BQ0NQVX1cXFwiXCIgXAotCS1mdW5zaWduZWQtY2hhciAtTyAk KEtGTEFHUykiIFwKLQkiTElCUz0gJCRIQVZFX0tSQjVDT05GSUcgLWxzc2wgLWxjcnlwdG8gLWxw YW0gLWxuY3Vyc2VzICQoTElCUykiCi0KLSMgRW5kIG9mIE1hYyBPUyBYIFNlY3Rpb24KLQotI0Fj b3JuIFJJU0NpWCwgYmFzZWQgb24gLi4uCi0jQmVya2VsZXkgVW5peCA0LjIgb3IgNC4zIHdpdGgg bG9jayBkaXJlY3RvcnkgL3Vzci9zcG9vbC91dWNwL0xDSy9MQ0suLnR0eXh4LAotI2J1dCB3aXRo b3V0IGFjdWNudHJsIHByb2dyYW0KLXJpc2NpeDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIFJJU0NpWCwgL3Vzci9zcG9vbC91dWNwL0xDSy4udHR5eHgKLQkkKE1BS0UpIHdl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkJIkNGTEFHUz0gLURCU0Q0MiAtREJT RDQgLURSSVNDSVggLUROT0NTRVRTIFwKLQkJLURMT0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNw XFxcIiAtRERJUkVOVCAtRENLX0NVUlNFUyBcCi0JCS1ETUFYU1A9OTAyNCAtRE1BWFJEPTkwMjQg LURTQlNJWj05MDUwIC1EUkJTSVo9OTA1MCBcCi0JCS1EREZUVFk9XFxcIi9kZXYvc2VyaWFsXFxc IiAtRE5PQ1NFVFMgLUROT0NZUklMIFwKLQkJLUROT0FOU0kgLXcgLU8yIC1mb21pdC1mcmFtZS1w b2ludGVyIiBcCi0JCSJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAgIiBcCi0JCSJDQz0gL3Vzci91 Y2IvY2MiIFwKLQkJIkNDMj0gL3Vzci91Y2IvY2MiCi0KLSNBY29ybiBSSVNDaVgsIGFzIGFib3Zl LCBidXQgdXNpbmcgZ2NjCi1yaXNjaXgtZ2NjOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgUklTQ2lYLCAvdXNyL3Nwb29sL3V1Y3AvTENLLi50dHl4eAotCSQoTUFLRSkgd2Vy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCQkiQ0ZMQUdTPSAtREJTRDQyIC1EQlNE NCAtRFJJU0NJWCAtRE5PQ1NFVFMgXAotCQktRExPQ0tfRElSPVxcXCIvdXNyL3Nwb29sL3V1Y3Bc XFwiIC1ERElSRU5UIC1EQ0tfQ1VSU0VTIFwKLQkJLURNQVhTUD05MDI0IC1ETUFYUkQ9OTAyNCAt RFNCU0laPTkwNTAgLURSQlNJWj05MDUwIFwKLQkJLURERlRUWT1cXFwiL2Rldi9zZXJpYWxcXFwi IC1ETk9DU0VUUyAtRE5PQ1lSSUwgXAotCQktRE5PQU5TSSAtdyAtTzIgLWZvbWl0LWZyYW1lLXBv aW50ZXIiIFwKLQkJIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAiIFwKLQkJIkNDPSBnY2MgLW1i c2QiIFwKLQkJIkNDMj0gZ2NjIC1tYnNkIgotCi0jQ29udmVyZ2VudCBDVElYIDYuNC4xCi1jdGl4 OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIENvbnZlcmdlbnQgQ1RJWCA2 LjQuMScKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZM QUdTPSAtRFNWUjMgLURESVJFTlQgLURUQ1BTT0NLRVQgLURIREJVVUNQIC1EQ0tfQ1VSU0VTIFwK LQktRE5PTkFXUyAtRE5PTEVBUk4gLUROT0xPTkdMT05HICQoS0ZMQUdTKSAtWE8iIFwKLQkiTE5L RkxBR1M9LXMiICJMSUJTPS1sc29ja2V0IC1sY3Vyc2VzIC1sY19zIgotCW1jcyAtZCB3ZXJtaXQK LQotIyBUaGUgZm9sbG93aW5nIG1ha2VmaWxlIGVudHJ5IHNob3VsZCB3b3JrIGZvciBhbnkgSGFy cmlzIE5pZ2h0IEhhd2sgc3lzdGVtCi0jIChlaXRoZXIgODhrIG9yIDY4ayBiYXNlZCkgcnVubmlu ZyByZWxlYXNlIDYuMSBvciBsYXRlciBvZiB0aGUgQ1gvVVgKLSMgb3BlcmF0aW5nIHN5c3RlbS4g VGhpcyBpcyBhIFBPU0lYIGFuZCBBTlNJLUMgY29tcGxpYW50IHN5c3RlbSB3aGljaCBhbHNvCi0j IHN1cHBvcnRzIEJTRCBuZXR3b3JraW5nLiAoRWFybGllciBDWC9VWCByZWxlYXNlcyB3aWxsIHBy b2JhYmx5IHdvcmsgd2l0aAotIyBzeXM1cjMsIGJ1dCB0aGlzIGhhcyBub3QgYmVlbiB2ZXJpZmll ZCkuCi0jCi1jeF91eDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEhhcnJp cyBOaWdodCBIYXdrIENYL1VYIDYuMSBvciBsYXRlcgotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9LURQT1NJWCAtRFRDUFNPQ0tFVCAtREhEQlVV Q1AgLURQSURfVD1waWRfdCAtRFdBSVRfVD1pbnQgXAotCS1EZF9pbm89ZF9maWxlbm8gLURVSURf VD11aWRfdCAtREdJRF9UPWdpZF90IC1ETk9MT05HTE9ORyBcCi0JJChLRkxBR1MpIC1YYSAtTzMg LWciICJMTktGTEFHUz0tTzMiCi0KLSNJbnRlcmdyYXBoIENsaXBwZXIsIENMSVgsIGpvYiBjb250 cm9sLCBIREIgVVVDUC4KLWNsaXg6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgSW50ZXJncmFwaCBDTElYLi4uJwotCSQoTUFLRSkgd2VybWl0ICJDQz1hY2MiICJDQzI9YWNj IiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtdyAtRFNWUjMgLURDTElY IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PU1lTTE9HIC1EVVNFX01FTUNQWSBcCi0JLUROT0dFVFVT RVJTSEVMTCAtRE5PUkVBTFBBVEggLUROT0xFQVJOICQoS0ZMQUdTKSAtTyIgXAotCSJMTktGTEFH Uz0iICJMSUJTPSAtbGJzZCIKLQotI0FzIGFib3ZlICsgVENQL0lQLi4uCi1jbGl4bmV0OgotCUBl Y2hvICdNYWtpbmcgbmV0d29ya2VkIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRlcmdyYXBoIENM SVguLi4nCi0JJChNQUtFKSB3ZXJtaXQgIkNDPWFjYyIgIkNDMj1hY2MiIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC13IC1EU1ZSMyAtRENMSVggLURESVJFTlQgLURIREJV VUNQIC1ETk9TWVNMT0cgLURVU0VfTUVNQ1BZIFwKLQktRFRDUFNPQ0tFVCAtRE5PR0VUVVNFUlNI RUxMIC1ETk9MRUFSTiAtRE5PUkVBTFBBVEggJChLRkxBR1MpIC1PIiBcCi0JIkxOS0ZMQUdTPSIg IkxJQlM9IC1sYnNkIgotCi0jTWFyayBXaWxsaWFtcyBDb2hlcmVudCAyODYgb3IgMzg2IG9uIElC TSBQQyBmYW1pbHkuCi0jVGhlcmUgaXMgYSA2NEsgbGltaXQgb24gcHJvZ3JhbSBzaXplLCBzbyB0 aGlzIGlzIGEgY29tbWFuZC1saW5lIG9ubHkgdmVyc2lvbi4KLWNvaGVyZW50OgotCSQoTUFLRSkg IkNGTEFHUyA9IC1PIC1EQ09IRVJFTlQgLUROT0FOU0kgLUROT0lDUCAtRE5PU0VUS0VZIC1ETk9M RUFSTiBcCi0JLUROT0NTRVRTIC1ETk9IRUxQIC1ETk9ESUFMIC1ETk9TQ1JJUFQgLUROT0RFQlVH IC1ETk9UTE9HIC1ETk9YTUlUIFwKLQktRE5PTVNFTkQgLUROT0ZSSUxMUyAtRE5PU1lTSU9DVExI IC1EU0VMRUNUX0ggJChLRkxBR1MpIC1WU1VWQVIiIFwKLQktRE5PRkxPQVQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSB3ZXJtaXQKLQotI01hcmsgV2lsbGlhbXMgQ29oZXJlbnQgMzg2IG9uIElC TSBQQyBmYW1pbHkuCi0jVGhpcyB3aWxsIG1ha2UgYSAibWluaW11bSBpbnRlcmFjdGl2ZSIgdmVy c2lvbiAtIG5vIHNjcmlwdHMsCi0jbm8gY2hhcmFjdGVyIHNldHMsIG5vIGhlbHAsIG5vIGRpYWws IG5vIGRlYnVnL3RyYW5zYWN0aW9uIGxvZ2dpbmcsIG5vCi0jdHJhbnNtaXQsIG1zZW5kLCBtYWls LCB0eXBlLCBldGMuCi1jb2hlcmVudG1pOgotCSQoTUFLRSkgIkNGTEFHUyA9IC1PIC1EQ09IRVJF TlQgLUROT0FOU0kgLUROT1NFVEtFWSAtRE5PTEVBUk4gXAotCS1ETk9TSE9XIC1ETk9DU0VUUyAt RE5PSEVMUCAtRE5PRElBTCAtRE5PU0NSSVBUIC1ETk9ERUJVRyAtRE5PVExPRyBcCi0JLUROT1hN SVQgLUROT01TRU5EIC1ETk9GUklMTFMgLUROT1NZU0lPQ1RMSCAtRE5PU0VSVkVSIC1ETk9VVUNQ IFwKLQktRE5PU1BMIC1ETk9QVVNIIC1ETk9NRE1IVVAgLUROT0pDIC1ETk9GRFpFUk8gLUROT0VT Q1NFUSAtRE5PRkxPQVQgXAotCS1ETk9DTURMICQoS0ZMQUdTKSAtVlNVVkFSIC1EU0VMRUNUX0gi IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCXdlcm1pdAotCi0jTWFyayBXaWxsaWFtcyBD b2hlcmVudCAzODYgb24gSUJNIFBDL0FUIGZhbWlseS4KLWNvaGVyZW50bWF4OgotCSQoTUFLRSkg IkNGTEFHUyA9IC1PIC1EQ09IRVJFTlQgLUROT0FOU0kgLURTRUxFQ1RfSCAtRE5PTEVBUk4gXAot CS1ETk9GTE9BVCAtRE5PU1lTSU9DVExIICQoS0ZMQUdTKSAtVlNVVkFSIiAiTE5LRkxBR1MgPSAt TyAtcyIgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gd2VybWl0Ci0KLSNNYXJrIFdpbGxp YW1zIENvaGVyZW50IDM4NiA0LjIuICBJbmNsdWRlcyBjdXJzZXMgYnV0IG5vdCBUQ1AvSVAuCi0j UmVxdWlyZXMgdXBkYXRlcyB0byB0aGUgNC4yLjEwIGNvbXBpbGVyOyB0aGUgcmVndWxhciBjb21w aWxlciBmYWlscyB0bwotI3RvIGhhbmRsZSAiY29tcGxleCBleHByZXNzaW9ucyIuICBOT0ZMT0FU IGlzIHNvIGl0IGNhbiB3b3JrIG9uIG9sZCBQQ3MKLSN3aXRob3V0IGZsb2F0aW5nLXBvaW50IGhh cmR3YXJlLgotY29oZXJlbnQ0MjoKLQkkKE1BS0UpICJDRkxBR1MgPSAtVDUwMDAwMCAtRE5PRkxP QVQgLURDT0hFUkVOVCAtRE5PQU5TSSAtRFNFTEVDVCBcCi0JLUROT1NZU0xPRyAtRERJUkVOVCAt RENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURDS19XUkVGUkVTSCAtVlNVVkFSIFwKLQktRERDTEdF VENXRCAtRE5PU1lTSU9DVExIIC1ETk9JTklUR1JPVVBTIC1ETk9TWU1MSU5LIC1EU0VMRUNUX0gg XAotCS1ERENMR0VUQ1dEIC1PICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9IC1PIC1zIiBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiTElCUyAgPSAtbHNvY2tldCAtbGN1cnNlcyIgd2Vy bWl0Ci0KLSNERUMgVWx0cml4IDIueAotIyBBZGQgLU8sIC1ERFlOQU1JQywgLXMsIGV0YywgaWYg dGhleSB3b3JrLgotdWx0cml4Mng6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBVbHRyaXggMi54IC4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEAp fSBcCi0JIkNGTEFHUz0gLURCU0Q0IC1EVENQU09DS0VUIC1ERFUyIC1ETk9HRVRVU0VSU0hFTEwg JChLRkxBR1MpIgotCi1kdTI6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBLVEFSR0VUPSQke0tU QVJHRVQtJChAKX0gdWx0cml4MngKLQotI0RFQyBVbHRyaXggMy4wIGFuZCAzLjEKLXVsdHJpeDMw OgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVWx0cml4IDMuMC4uLgotCSQo TUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0 IC1EVENQU09DS0VUIC1ERElSRU5UIC1EU0lHX1YgLUROT0dFVFVTRVJTSEVMTCBcCi0JLURVTFRS SVgzIC1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSAtTyIgIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCIK LQotZHUzOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9 IHVsdHJpeDMwCi0KLXVsdHJpeDN4OgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgS1RBUkdFVD0k JHtLVEFSR0VULSQoQCl9IHVsdHJpeDMwCi0KLSNERUMgVWx0cml4IDQuMCBvciA0LjEgb24gREVD c3RhdGlvbiwgVkFYc3RhdGlvbiwgVkFYLCBldGMuCi11bHRyaXg0MDoKLQlAZWNobyBNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIFVsdHJpeCA0LjAgb3IgNC4xLi4uCi0JJChNQUtFKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NL RVQgLURTSUdfViAtRERVNCAtRE5PR0VUVVNFUlNIRUxMIFwKLQkkKEtGTEFHUykgLU9saW1pdCAx NDUwIiAiTE5LRkxBR1MgPSAtcyIKLQotI0RFQyBVbHRyaXggNC4yLTQuNSBvbiBERUNzdGF0aW9u LCBERUNzeXN0ZW0sIFZBWHN0YXRpb24sIFZBWCwgZXRjLgotI0xpa2UgdWx0cml4NDAsIGV4Y2Vw dCBub3cgQyBjb21waWxlciBzdXBwb3J0cyAtTzIgb3B0aW1pemF0aW9uLgotdWx0cml4NDI6Ci0J QGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbHRyaXggNC4yIG9yIGxhdGVyLi4u Ci0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IFwKLQkiQ0ZMQUdTPSAt REJTRDQgLURUQ1BTT0NLRVQgLURTSUdfViAtRE5PR0VUVVNFUlNIRUxMICQoS0ZMQUdTKSBcCi0J LU8yIC1PbGltaXQgMTc1MCIgIkxOS0ZMQUdTID0gLXMiCi0KLWR1NDI6Ci0JJChNQUtFKSAiTUFL RT0kKE1BS0UpIiBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gdWx0cml4NDIKLQotI0RFQyBVbHRy aXggNC4yLTQuNSBvbiBERUNzdGF0aW9uLCBERUNzeXN0ZW0sIFZBWHN0YXRpb24sIFZBWCwgZXRj LgotI0xpa2UgZHU0MiwgYnV0IHdpdGggY3Vyc2VzIHN1cHBvcnQgYWRkZWQgYW5kIGEgY291cGxl IGZlYXR1cmVzLgotdWx0cml4NDJjOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgVWx0cml4IDQuMiBvciBsYXRlci4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVC0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0IC1EVENQU09DS0VUIC1EU0lHX1YgLUROT0dF VFVTRVJTSEVMTCBcCi0JLURDS19DVVJTRVMgLUROT0lLU0QgJChLRkxBR1MpLUc2IC1PMiAtT2xp bWl0IDMwMDAgIiBcCi0JIkxOS0ZMQUdTID0gLXMiICJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAi Ci0KLXVsdHJpeDQzOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0My KSBcCi0JIktGTEFHUz0tRFVMVFJJWDQzICQoS0ZMQUdTKSIgS1RBUkdFVD0kJHtLVEFSR0VULSQo QCl9IHVsdHJpeDQyYwotCi11bHRyaXg0M25vdGNwOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIg Q0M9JChDQykgQ0MyPSQoQ0MyKSBcCi0JIktGTEFHUz0tRFVMVFJJWDQzIC1ETk9ORVQgJChLRkxB R1MpIiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IHVsdHJpeDQyYwotCi0jIE5PVEU6IG5l ZWQgLUROT0RFQlVHIG9uIE1JUFMgdG8gYXZvaWQgcmVsb2NhdGlvbiBlcnJvcnMgYXQgbGluayB0 aW1lLgotIyBBY3R1YWxseSBub3cgKDguMCkgdGhhdCB3ZSBoYXZlIGRpc2NvdmVyZWQgdGhlIC1H IG9wdGlvbiBtYXliZSBkZWJ1Z2dpbmcKLSMgY2FuIGJlIHB1dCBiYWNrLgotdWx0cml4NDQ6Ci0J JChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9JChDQzIpIFwKLQkiS0ZMQUdTPS1E VUxUUklYNDQgLUc3IC1ETk9ERUJVRyAtRE5FVFBUWSAtRE5PX0RFVlRUWSAkKEtGTEFHUykiIFwK LQlLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gdWx0cml4NDJjCi0KLXVsdHJpeDQ1OgotCSQoTUFL RSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBcCi0JIktGTEFHUz0tRFVMVFJJ WDQ1ICQoS0ZMQUdTKS1ETkVUUFRZIC1ETk9fREVWVFRZICQoS0ZMQUdTKSIgXAotCUtUQVJHRVQ9 JCR7S1RBUkdFVC0kKEApfSB1bHRyaXg0MmMKLQotZHU0MmM6Ci0JJChNQUtFKSAiTUFLRT0kKE1B S0UpIiBDQz0kKENDKSBDQzI9JChDQzIpIFwKLQlLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gdWx0 cml4NDJjCi0KLSNERUMgVWx0cml4IDQuM0Egb3IgbGF0ZXIgb24gREVDc3lzdGVtIGFuZCBERUNz dGF0aW9uIDUwMDAvNTAsIC8xNTAgb3IgLzI2MAotI3dpdGggTUlQUyBSNHgwMCBwcm9jZXNzb3Iu ICBUaGUgIi1taXBzMyIgc3dpdGNoIGdlbmVyYXRlcyBSNDAwMC1zcGVjaWZpYwotI2NvZGUsIHdo aWNoIGlzIGZhc3RlciBhbmQgbW9yZSBjb21wYWN0LCBidXQgKndvbid0KiBydW4gb24gZWFybGll cgotI0RFQ3N5c3RlbXMgYW5kIERFQ3N0YXRpb25zLgotdWx0cml4NDMtbWlwczM6Ci0JQGVjaG8g TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbHRyaXggNC4zQSBvciBsYXRlciwgUjQwMDAg Y3B1Li4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IFwKLQkiQ0ZM QUdTPSAtREJTRDQgLURUQ1BTT0NLRVQgLURTSUdfViAtRE5PR0VUVVNFUlNIRUxMIFwKLQkkKEtG TEFHUykgLU8yIC1PbGltaXQgMTc1MCAtbWlwczMiICJMTktGTEFHUyA9IC1zIC1taXBzMyIKLQot ZHU0My1taXBzMzoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIENDPSQoQ0MpIENDMj0kKENDMikg dWx0cml4NDMtbWlwczMKLQotI0RFQyBVbHRyaXggNC4zQSBvciBsYXRlciBvbiBNSVBTIFI0eDAw MCBiYXNlZCBzeXN0ZW1zLgotI0xpa2UgdWx0cml4NDMtbWlwczMgYnV0IHdpdGggY3Vyc2VzIHN1 cHBvcnQgYWRkZWQKLXVsdHJpeDQzYy1taXBzMzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIFVsdHJpeCA0LjNBIG9yIGxhdGVyLCBSNDAwMCBjcHUuLi4KLQkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENCAtRFRDUFNP Q0tFVCAtRFNJR19WIC1ETk9HRVRVU0VSU0hFTEwgLURDS19DVVJTRVMgXAotCSQoS0ZMQUdTKSAt TzIgLU9saW1pdCAzMDAwIC1taXBzMyIgIkxOS0ZMQUdTID0gLXMgLW1pcHMzIiBcCi0JIkxJQlM9 IC1sY3Vyc2VzIC1sdGVybWNhcCIKLQotZHU0M2MtbWlwczM6Ci0JJChNQUtFKSAiTUFLRT0kKE1B S0UpIiBDQz0kKENDKSBDQzI9JChDQzIpIFwKLQlLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gdWx0 cml4NDNjLW1pcHMzCi0KLSNERUMgVWx0cml4IDQuNCBvbiBERUNzdGF0aW9uIDUwMDAvNTAgb3Ig LzE1MCB3aXRoIFI0MDAwIE1JUFMgcHJvY2Vzc29yLAotI29yIDUwMDAvMjYwIHdpdGggUjQ0MDAu ICBUaGUgIi1taXBzMyIgc3dpdGNoIGdlbmVyYXRlcyBSNDAwMC1zcGVjaWZpYyBjb2RlLAotI3do aWNoIGlzIGZhc3RlciBhbmQgbW9yZSBjb21wYWN0IGJ1dCAqd29uJ3QqIHJ1biBvbiBlYXJsaWVy IERFQ3N0YXRpb25zLgotdWx0cml4NDQtbWlwczM6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBVbHRyaXggNC40LCBSNDAwMCBjcHUgLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VULSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NLRVQgLURT SUdfViAtRE5PR0VUVVNFUlNIRUxMIFwKLQkkKEtGTEFHUykgLU8yIC1PbGltaXQgMTQ1MCAtbWlw czMiICJMTktGTEFHUyA9IC1zIC1taXBzMyIKLQotZHU0NC1taXBzMzoKLQkkKE1BS0UpICJNQUtF PSQoTUFLRSkiIENDPSQoQ0MpIENDMj0kKENDMikgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVC0kKEAp fSB1bHRyaXg0NGMtbWlwczMKLQotI0RFQyBVbHRyaXggNC4yIG9uIERFQ3N0YXRpb24sIFZBWHN0 YXRpb24sIFZBWCwgZXRjLCBTeXN0ZW0gViBSNCBlbnZpcm9ubWVudAotdWx0cml4NDJzNXI0Ogot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gViBS NCBvbiBVbHRyaXguLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9 IFwKLQkiQ0ZMQUdTID0gLU8yIC1PbGltaXQgMTUwMCAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQ IC1ETk9HRVRVU0VSU0hFTEwgXAotCS1EVENQU09DS0VUICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0g LXMiCi0KLSNPU0YvMQotb3NmIG9zZjE6Ci0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0IC1ET1NGIC1EX0JTRCAtRFRDUFNPQ0tFVCAt RENLX0FOU0lDIC1EU0lHX1YgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfUlRTQ1RTIC1ERk5GTE9BVCAk KEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAkKExJQlMpIC1sYnNkIC1sY3Vy c2VzIC1sdGVybWNhcCAtbG0iCi0KLSNERUMgT1NGLzEgVjEuMC0xLjMgb24gREVDc3RhdGlvbiwg VkFYLCBBbHBoYSwgb3IgUEMuCi1kZWMtb3NmIGRlYy1vc2YxOgotCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENCAtRE9TRiAtRE9TRjEz IC1EX0JTRCAtRFRDUFNPQ0tFVCAtRENLX0FOU0lDIC1EU0lHX1YgXAotCS1ETk9SRUFMUEFUSCAt RE5PSUtTRCAtRENLX0NVUlNFUyAtRENLX1JUU0NUUyAtREZORkxPQVQgLUROT0RFQlVHIFwKLQkt RE5PVU5JQ09ERSAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtbm9uX3NoYXJlZCIgIkxJQlMg PSAtbGJzZCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxtIgotCi0jIFRoaXMgb25lIGNhdXNlcyAicmVs b2NhdGlvbiBvdXQtb2YtcmFuZ2UiIGVycm9ycyBpbiB0aGUgbGlua2VyLgotb2xkLWRlYy1vc2Y6 Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBERUMgT1NGLzEgVjEueC4uLgot CUBlY2hvIElmIHlvdSBhcmUgYnVpbGRpbmcgZm9yIERFQyBPU0YvMSAyLjAsIHBsZWFzZSB1c2Ug ZGVjLW9zZjIwLgotCUBlY2hvIFJlbW92ZSBvciBhZGp1c3QgLU8yIGFuZC9vciAtT2xpbWl0IGlm IHRoZXkgY2F1c2UgdHJvdWJsZS4KLQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgb3NmIEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9IC1PMiAtT2xpbWl0IDI0MDAgJChL RkxBR1MpIgotCi0jREVDIE9TRi8xIDIuMCBvbiBBbHBoYSBhbmQgcHJvYmFibHkgbm93aGVyZSBl bHNlLgotI1RoZSBvbmx5IGRpZmZlcmVuY2UgZnJvbSBPU0YvMSBpcyB0aGF0IG9wdGltaXphdGlv biBpcyBvbWl0dGVkLgotI1RoZSBvcHRpbWl6ZWQgdmVyc2lvbiBnZXRzIHN0cmFuZ2UgcnVudGlt ZSBlcnJvcnMsIGxpa2UgdGhlIFBBVVNFIGNvbW1hbmQKLSNub3Qgd29ya2luZy4gIEFkZCAiLXVu c2lnbmVkIiB0byBtYWtlIGFsbCBjaGFycyB1bnNpZ25lZC4KLWRlYy1vc2YyMDoKLQlAZWNobyBN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERFQyBPU0YvMSBWMi4wLi4uCi0JQGVjaG8gT3B0 aW1pemF0aW9uIG9taXR0ZWQgYmVjYXVzZSBpdCBjYXVzZXMgcnVudGltZSBlcnJvcnMuCi0JQGVj aG8gU2VlIGNvbW1lbnRzIGluIG1ha2VmaWxlLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0My KSBvc2YgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0gLURPU0YyMCAkKEtG TEFHUykiCi0KLWRlYy1vc2YzMDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IERFQyBPU0YvMSBWMy4wLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIG9zZiBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPSAtRE9TRjMwIC1PMiAtT2xpbWl0IDI0 MDAgJChLRkxBR1MpIgotCi0jRGlnaXRhbCBVTklYIDMuMgotIyBNdXN0IGNvbXBpbGUgY2t1dXNb NnhdLmMgc2VwYXJhdGVseSB3aXRob3V0IG9wdGltaXphdGlvbiBvdGhlcndpc2UKLSMgdGhlIG9w dGltaXplciBkdW1wcyBjb3JlIC0ga2VlcCBDRkxBR1MgaGVyZSBpbiBzeW5jIHdpdGggdGhvc2Ug ZnJvbSBvc2YuCi1kdTMyOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRGln aXRhbCBVTklYIDMuMi4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBja3V1czYuJChF WFQpIFwKLQkiQ0ZMQUdTPSAtREJTRDQgLURPU0YgLURfQlNEIC1EVENQU09DS0VUIC1EQ0tfQU5T SUMgLURTSUdfViBcCi0JLURDS19DVVJTRVMgLURDS19SVFNDVFMgLURGTkZMT0FUIC1ET1NGMzIg LURIREJVVUNQICQoS0ZMQUdTKSIKLQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgY2t1dXN4 LiQoRVhUKSBcCi0JIkNGTEFHUz0gLURCU0Q0IC1ET1NGIC1EX0JTRCAtRFRDUFNPQ0tFVCAtRENL X0FOU0lDIC1EU0lHX1YgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfUlRTQ1RTIC1ERk5GTE9BVCAtRE9T RjMyIC1ESERCVVVDUCAkKEtGTEFHUykiCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIG9z ZiBcCi0JIktGTEFHUz0gLURPU0YzMiAtREhEQlVVQ1AgLU8yIC1PbGltaXQgMzIwMCAkKEtGTEFH UykiCi0KLWRlYy1vc2YzMjoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIENDPSQoQ0MpIENDMj0k KENDMikgZHUzMiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi0jRGlnaXRhbCBVTklY IDQuMCB0aHJvdWdoIDQuMEQgKHVzZSB0cnU2NCB0YXJnZXRzIGZvciA0LjBFIGFuZCBhYm92ZSku Li4KLWR1NDA6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBEaWdpdGFsIFVO SVggNC4wLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIG9zZiBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPSAtRE9TRjQwIC1ESERCVVVDUCAtREZORkxPQVQgXAot CS11bnNpZ25lZCAtc3RkMSAtTzMgLU9saW1pdCAyNDAwICQoS0ZMQUdTKSIgIkxJQlM9LWxtIgot Ci1kdTQwZ2NjOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRGlnaXRhbCBV TklYIDQuMCB3aXRoIGdjYyAuLi4KLQkkKE1BS0UpIG9zZiBDQz1nY2MgQ0MyPWdjYyBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPSAtRE9TRjQwIC1ESERCVVVDUCAkKEtGTEFH UykiCi0KLSNUcnU2NCBVbml4IDQuMEUKLXRydTY0LTQwZToKLQlAZWNobyBNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIFRydTY0IFVOSVggNC4wRS4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0My PSQoQ0MyKSBvc2YgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0gLURPU0Y0 MCAtRE9TRjQwRSAtRFRSVTY0IC1ESERCVVVDUCAtREZORkxPQVQgLUROT0NPVEZNQyBcCi0JLXVu c2lnbmVkIC1zdGQxIC1PMyAtT2xpbWl0IDI0MDAgJChLRkxBR1MpIiAiTElCUz0tbG0iCi0KLXRy dTY0LTQwZjoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFRydTY0IFVOSVgg NC4wRi4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBvc2YgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIktGTEFHUz0gLURPU0Y0MCAtRE9TRjQwRiAtRFRSVTY0IC1ESERCVVVD UCAtREZORkxPQVQgLUROT0NPVEZNQyBcCi0JLXVuc2lnbmVkIC1zdGQxIC1PMyAtT2xpbWl0IDI0 MDAgJChLRkxBR1MpIiAiTElCUz0tbG0iCi0KLXRydTY0LTQwZzoKLQlAZWNobyBNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIFRydTY0IFVOSVggNC4wRy4uLgotCSQoTUFLRSkgQ0M9JChDQykg Q0MyPSQoQ0MyKSBvc2YgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0gLURP U0Y0MCAtRE9TRjQwRyAtRFRSVTY0IC1ESERCVVVDUCAtREZORkxPQVQgLUROT0NPVEZNQyBcCi0J LXVuc2lnbmVkIC1zdGQxIC1PMyAtT2xpbWl0IDI0MDAgJChLRkxBR1MpIiAiTElCUz0tbG0iCi0K LXRydTY0LTUwYToKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFRydTY0IFVO SVggNS4wQS4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBvc2YgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0gLURUUlU2NCAtRE9TRjUwIC1ESERCVVVDUCBcCi0J LXVuc2lnbmVkIC1zdGQxIC1PMyAtT2xpbWl0IDI0MDAgJChLRkxBR1MpIgotCi10cnU2NC01MWE6 Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBUcnU2NCBVTklYIDUuMUEuLi4K LQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgb3NmIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAotCSJLRkxBR1M9IC1EVFJVNjQgLURPU0Y1MCAtRE9TRjUxQSAtREhEQlVVQ1AgXAotCS11 bnNpZ25lZCAtc3RkMSAtTzMgLU9saW1pdCAyNDAwICQoS0ZMQUdTKSIKLQotdHJ1NjQtNTFiOgot CUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVHJ1NjQgVU5JWCA1LjFCLi4uCi0J JChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIG9zZiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKLQkiS0ZMQUdTPSAtRFRSVTY0IC1ET1NGNTAgLURPU0Y1MUEgLURPU0Y1MUIgLURIREJVVUNQ IFwKLQktdW5zaWduZWQgLXN0ZDEgLU8zIC1PbGltaXQgMjQwMCAkKEtGTEFHUykiCi0KLSMgQWRk ZWQgNS4xYiB2ZXJzaW9uIHdpdGggT3BlblNTTCAtIENEVyA2LTEzLTIwMDUuLi4KLXRydTY0LTUx YitvcGVuc3NsOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVHJ1NjQgVU5J WCA1LjFiCi0JQGVjaG8gIGluY2x1ZGluZyBPcGVuU1NMLi4uCi0JJChNQUtFKSBDQz0kKENDKSBD QzI9JChDQzIpIG9zZiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPSAtRFRS VTY0IC1ET1NGNTAgLURPU0Y1MUEgLURPU0Y1MUIgLURIREJVVUNQIFwKLQktdW5zaWduZWQgLXN0 ZDEgLU8zIC1PbGltaXQgMjQwMCBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAkKFNT TElOQykgJChLRkxBR1MpIiBcCi0JIkxJQlM9ICQoU1NMTElCKSAtcnBhdGggJChzc2xyb290KS9z c2wvbGliIC1sc3NsIC1sY3J5cHRvIgotCi1kdTUwOgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQo Q0MyKSB0cnU2NC01MGEgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi1kdTQwLXJpZGljdWxv dXMtY2hlY2tpbmc6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBEaWdpdGFs IFVOSVggNC4wLgotCUBlY2hvIENoZWNraW5nIGV2ZXJ5dGhpbmcgLSBhc3N1bWVzIERFQ0MuLi4K LQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgb3NmIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAotCSJLRkxBR1M9IC1ET1NGNDAgLURIREJVVUNQIC13MCAtd2FybnByb3RvcyAtY2hlY2sg LXBvcnRhYmxlIFwKLQktdW5zaWduZWQgLXN0ZDEgLU8zIC1PbGltaXQgMTc2MCAkKEtGTEFHUyki Ci0KLSNTZXF1ZW50IERZTklYL3B0eCAxLjIuMQotZHluaXhwdHgxMjoKLQlAZWNobyBNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIFNlcXVlbnQgRFlOSVgvcHR4IDEuMi4xLi4uCi0JJChNQUtF KSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURTVlIzIC1E RElSRU5UIC1ESERCVVVDUCAtRFBUWCAtRE5PR0VUVVNFUlNIRUxMIC1ETk9MRUFSTiBcCi0JLURQ SURfVD1waWRfdCAtRFVJRF9UPXVpZF90IC1ER0lEX1Q9Z2lkX3QgJChLRkxBR1MpIC1pIC1PIiBc Ci0JIkxOS0ZMQUdTID0gLWkiCi0KLSNTZXF1ZW50IERZTklYL3B0eCAxLjMgb3IgMS40Ci1keW5p eHB0eDEzOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2VxdWVudCBEWU5J WC9wdHggMS4zIFRDUC9JUC4uLgotCSQoTUFLRSkgeGVybWl0ICJDRkxBR1M9IC1PIEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAotCS1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLURQVFggLURD S19QT0xMIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1EUElEX1Q9cGlkX3QgLURVSURfVD11aWRfdCAt REdJRF9UPWdpZF90IC1EVENQU09DS0VUICQoS0ZMQUdTKSAtaSIgXAotCSJMTktGTEFHUyA9IC1p IiAiTElCUyA9IC1sc29ja2V0IC1saW5ldCAtbG5zbCIKLQotI1NlcXVlbnQgRFlOSVgvcHR4IDIu MCwgQU5TSSBDIGNvbXBpbGF0aW9uCi0jU2hvdWxkIHdvcmsgb24gYW55IGhhcmR3YXJlIHBsYXRm b3JtIHdoZW4gRFlOSVgvcHR4IHJ1bnMsIGluY2x1ZGluZwotIzM4NiwgNDg2LCBQZW50aXVtLgot ZHluaXhwdHgyMDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBQT1NJWCwg U2VxdWVudCBEWU5JWC9wdHggMi4wLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EUE9TSVggLURIREJVVUNQIC1EVENQU09DS0VUIFwK LQktRFdBSVRfVD1pbnQgLURQVFggLUROT0dFVFVTRVJTSEVMTCAkKEtGTEFHUykgLU8iIFwKLQki TElCUyA9IC1sc29ja2V0IC1saW5ldCAtbG5zbCIKLQotI1NlcXVlbnQgRFlOSVgvcHR4IDIuMCwg QU5TSSBDIGNvbXBpbGF0aW9uLCB3aXRoIGN1cnNlcwotZHluaXhwdHgyMGM6Ci0JQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgUE9TSVgsIFNlcXVlbnQgRFlOSVgvcHR4IDIuMC4u LicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdT PSAtRFBPU0lYIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAtRFdBSVRfVD1pbnQgLURQVFggLURDS19D VVJTRVMgXAotCS1EQ0tfTkVXVEVSTSAtRE5PR0VUVVNFUlNIRUxMICQoS0ZMQUdTKSAtTyIgXAot CSJMSUJTID0gLWxzb2NrZXQgLWxpbmV0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCIKLQotI1Nl cXVlbnQgRFlOSVgvcHR4IDIuMS42LCA4MDQ4NiwgQU5TSSBDIGNvbXBpbGF0aW9uLCB3aXRoIGN1 cnNlczoKLSMgLVhhIC0tIHVzZSBBTlNJIGNvbXBpbGVyLgotIyAtV2MsLXB3IC0tIHN1cHByZXNz IHBvcnRhYmlsaXR5IHdhcm5pbmdzLgotIyAtV2MsLWkzODYgLS0gODAzODYgY3B1LgotIyAtV2Ms LWk0ODYgLS0gODA0ODYgY3B1LgotIyAtV2MsLVA1IC0tIFBlbnRpdW0gKGRlZmF1bHQpLgotIyAt V2MsLU8zIC0tIGhpZ2hlc3Qgb3B0aW1pemF0aW9uLgotIyAtV2EsLU4xNzA2MSAtLSBpbmNyZWFz ZSBzeW1ib2wgdGFibGUgZnJvbSBkZWZhdWx0IG9mIDE1MDEzIGZvciBja2N1bmkuYy4KLSMgRWFy bHkgdmVyc2lvbnMgb2YgRFlOSVgvcHR4IDIuMS54IG1heSBuZWVkIC1EQ0tfUE9MTCBpbnN0ZWFk IG9mIC1EU0VMRUNULgotIyBBZGQgIiQmIiBhZnRlciB0aGUgY29sb24gaW4gdGhlICJ4ZXJtaXQi IHRhcmdldCBmb3IgcGFyYWxsZWwgbWFrZXMuCi1keW5peHB0eDIxNmM6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgUE9TSVgsIFNlcXVlbnQgRFlOSVgvcHR4IDIuMS42Jwot CSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1E UE9TSVggLURIREJVVUNQIC1ERFlOQU1JQyAtRFRDUFNPQ0tFVCBcCi0JLURTRUxFQ1QgLURDS19S RURJUiAtRENLX05BV1MgLURDS19XUkVGUkVTSCAtRFNXX0FDQ19JRCBcCi0JLURUQ1BfTk9ERUxB WT0xIC1EVFJNQlVGTD0yMDQ4IC1EQklHQlVGT0sgLURIQUREUkxJU1QgXAotCS1EUFRYICAtRENL X0NVUlNFUyAtRENLX05FV1RFUk0gLUROT0dFVFVTRVJTSEVMTCAtRE5PUkVBTFBBVEggXAotCSQo S0ZMQUdTKSAtWGEgLVdjLC1wdyAtV2MsLWk0ODYgLVdjLC1PMyAtV2EsLU4xNzA2MSIgXAotCSJM SUJTID0gLWxYYnNkIC1sc2VxIC1sc29ja2V0IC1saW5ldCAtbG5zbCAtbG1hbGxvYyAtbG0gLWxj dXJzZXMiIFwKLQkiTE5LRkxBR1MgPSAtcyIKLQotI1NlcXVlbnQgRFlOSVgvcHR4IDIuMS42LCBn Y2MgMi43LjIuMiwgd2l0aCBjdXJzZXM6Ci1keW5peHB0eDIxNmNnY2M6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgUE9TSVgsIFNlcXVlbnQgRFlOSVgvcHR4IDIuMS42IGdj YycKLQkkKE1BS0UpIHhlcm1pdCAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EUE9TSVggLURIREJVVUNQIC1ERFlOQU1JQyAtRFRD UFNPQ0tFVCBcCi0JLURTRUxFQ1QgLURDS19SRURJUiAtRENLX05BV1MgLURDS19XUkVGUkVTSCAt RFNXX0FDQ19JRCBcCi0JLURUQ1BfTk9ERUxBWT0xIC1EVFJNQlVGTD0yMDQ4IC1EQklHQlVGT0sg LURIQUREUkxJU1QgXAotCS1EUFRYICAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLUROT0dFVFVT RVJTSEVMTCAtRE5PUkVBTFBBVEggXAotCSQoS0ZMQUdTKSAtTzMgLXBpcGUgLWZ1bnNpZ25lZC1j aGFyIiBcCi0JIkxJQlMgPSAtbFhic2QgLWxzZXEgLWxzb2NrZXQgLWxpbmV0IC1sbnNsIC1sbWFs bG9jIC1sbSAtbGN1cnNlcyIgXAotCSJMTktGTEFHUyA9IC1zIgotCi0jU2VxdWVudCBEWU5JWC9w dHggNC4wLCBBTlNJIEMgY29tcGlsYXRpb24sIHdpdGggY3Vyc2VzCi1keW5peHB0eDQxYzoKLQlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBQT1NJWCwgU2VxdWVudCBEWU5JWC9w dHggNC4wLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAot CSJDRkxBR1M9IC1EUE9TSVggLURIREJVVUNQIC1EVENQU09DS0VUIFwKLQktRFdBSVRfVD1pbnQg LURQVFggLURQVFg0IC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSBcCi0JLUROT0dFVFVTRVJTSEVM TCAkKEtGTEFHUykgLU8iIFwKLQkiTElCUyA9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVy bWNhcCIKLQotI1NlcXVlbnQgRFlOSVgvcHR4IDQuNCwgQU5TSSBDIGNvbXBpbGF0aW9uLCB3aXRo IGN1cnNlcwotZHluaXhwdHg0NDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBQT1NJWCwgU2VxdWVudCBEWU5JWC9wdHggNC40Li4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EUFRYIC1EUFRYNCAtRFBPU0lYIC1E SERCVVVDUCAtRFRDUFNPQ0tFVCAtRFdBSVRfVD1pbnQgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfTkVX VEVSTSAtREJJR0JVRk9LIC1EU0VMRUNUIC1ETk9HRVRVU0VSU0hFTEwgXAotCSQoS0ZMQUdTKSAt TyIgIkxJQlMgPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAiCi0KLSNTZXF1ZW50 IERZTklYIDMuMC54Ci1keW5peDM6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBTZXF1ZW50IERZTklYIDMuMC54Li4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0MyAtREFDVUNOVFJMIC1EVENQU09DS0VUIC1P IFwKLQktRFBXVUlEX1Q9aW50IC1ER0lEX1Q9aW50ICQoS0ZMQUdTKSIKLQotI1NlcXVlbnQgRFlO SVggMy4wLngsIG5vIEFDVUNOVFJMCi1keW5peDNub2FjdToKLQlAZWNobyBNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIFNlcXVlbnQgRFlOSVggMy4wLnguLi4KLQkkKE1BS0UpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQzIC1ETENLRElSIC1E VENQU09DS0VUIC1PIFwKLQktRFVJRF9UPWludCAtREdJRF9UPWludCAkKEtGTEFHUykiCi0KLSNT ZXF1ZW50IERZTklYIDMuMS54Ci1keW5peDMxOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgU2VxdWVudCBEWU5JWCAzLjEueC4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1PIC1ERENMUE9QRU4gLURMQ0tESVIgLURC U0Q0IC1EVENQU09DS0VUICQoS0ZMQUdTKSIKLQotI1NlcXVlbnQgRFlOSVggMy4xLjIsIGFzIGFi b3ZlIGJ1dCB3aXRoIGN1cnNlcywgdG8gYmUgY29tcGlsZWQgYnkgZ2NjIDIuMy4zLgotZHluaXgz MWM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2VxdWVudCBEWU5JWCAz LjEuMiwgY3Vyc2VzLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAotCSJDRkxBR1M9IC1PMiAtRERDTFBPUEVOIC1EQUNVQ05UUkwgXAotCS1EQlNENDMgLURU Q1BTT0NLRVQgLURDS19DVVJTRVMgLURVSURfVD1pbnQgXAotCSQoS0ZMQUdTKSIgIkxJQlM9IC1s Y3Vyc2VzIC1sdGVybWNhcCIKLQotI0NvbnZleCBDMSB3aXRoIEJlcmtlbGV5IFVuaXgKLWNvbnZl eDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIENvbnZleCBDMSAvIEJTRC4u LgotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9 IC1EQlNENCAtRE5PTEVBUk4gJChLRkxBR1MpIC1EbXNsZWVwPW1uYXAiCi0KLSNDb252ZXggQzIx MCB3aXRoIENvbnZleC9PUyA4Ci1jb252ZXg4OgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgQ29udmV4IEMyMTAgd2l0aCBPUyA4Ci0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0IC1EVENQU09DS0VUIC1ETk9ERUJV RyAtRERJUkVOVCAtRE5PRklMRUggXAotCSQoS0ZMQUdTKSAtRFNJR19WIC1EbXNsZWVwPW1uYXAi Ci0KLSNDb252ZXggQzIgd2l0aCBDb252ZXggT1MgOS4xIChzaG91bGQgYWxzbyB3b3JrIHdpdGgg OC4xIG9yIGxhdGVyKQotI3dpdGggQU5TSSBDIGNvbXBpbGVyLCB1c2VzIEJTRCA0LjMgdXVjcCBs b2NrZmlsZSBjb252ZW50aW9uLgotY29udmV4OToKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIENvbnZleCBDMjEwIHdpdGggT1MgOS4xCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURQT1NJWCAtRENPTlZFWDkgLUROT0lF WFRFTiAtRERJUkVOVCAtRE5PRklMRUggLURUQ1BTT0NLRVQgXAotCS1EX19TVERDX18gLURMQ0tE SVIgLURtc2xlZXA9bW5hcCAtTyAtZXh0IC10bSBjMSAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1Mg PSAtZXh0IgotCi0jQ29udmV4IEMyIHdpdGggQ29udmV4IE9TIDEwLjEgb3IgbGF0ZXIKLSN3aXRo IGdjYyAyLnggQyBjb21waWxlcgotY29udmV4MTBnY2M6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBDb252ZXggQzIgd2l0aCBPUyAxMC4xIHVzaW5nIGdjYwotCSQoTUFLRSkg eGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EUE9TSVggLURD T05WRVg5IC1ETk9JRVhURU4gLURESVJFTlQgLUROT0ZJTEVIIC1EVENQU09DS0VUIFwKLQktRF9f U1REQ19fICAtRG1zbGVlcD1tbmFwIC1PMiAkKEtGTEFHUykiIENDPWdjYyBDQzI9Z2NjCi0KLSND cmF5IFgtTVAgb3IgWS1NUCBVTklDT1MgNi54IG9yIDcueC4KLSNOT1RFOiBOUFJPQyB0ZWxscyBo b3cgbWFueSBwYXJhbGxlbCBtYWtlcyB0byBydW4uICBJZiB5b3VyIENyYXkgaGFzIG11bHRpcGxl Ci0jcHJvY2Vzc29ycywgeW91IGNhbiBzZXQgTlBST0MgdXAgdG8gdGhlIG51bWJlciBvZiBDUFVz LCBlLmcuIE5QUk9DPTE2LgotY3JheToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBDcmF5IFgvWS1NUCBVTklDT1MgNi54IG9yIDcuMC4uLgotCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gTlBST0M9MSBcCi0JIkNGTEFHUz0gLURTVlIzIC1ERElS RU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykgLU8xIgotCi0jQ3JheSBYLU1QIG9y IFktTVAgVU5JQ09TIDguMCBBbHBoYS4KLWNyYXk4OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIENyYXkgWC9ZLU1QIFVOSUNPUyA4LjAgQWxwaGEuLi4KLQkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IE5QUk9DPTEgXAotCSJDRkxBR1M9IC1EU1ZS NCAtRERJUkVOVCAtREhEQlVVQ1AgLURUQ1BTT0NLRVQgJChLRkxBR1MpIC1PMSIKLQotI0NyYXkg WC1NUCBvciBZLU1QIFVOSUNPUyA5LjAuCi0jVGhpcyBvbmUgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3Nm dWxseSBmb3IgQy1LZXJtaXQgOC4wLjIwOS4KLSNFYXJsaWVyIHZlcnNpb25zIG9mIFVuaWNvcyB3 aWxsIHByb2JhYmx5IG5lZWQgdGhlIHNhbWUgZmxhZ3MuCi1jcmF5OToKLQlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBDcmF5IFgvWS1NUCBVTklDT1MgOS4wLi4uCi0JJChNQUtF KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBOUFJPQz0xIFwKLQkiQ0ZMQUdTPSAt RFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1ETk9MRkRFVk5PIFwKLQktRFRDUFNPQ0tFVCAkKEtG TEFHUykgLU8xIgotCi0jQ3JheS0yIG9yIENyYXkgMy1DU09TCi0jTk9URTogTlBST0MgdGVsbHMg aG93IG1hbnkgcGFyYWxsZWwgbWFrZXMgdG8gcnVuLiAgSWYgeW91ciBDcmF5IGhhcyBtdWx0aXBs ZQotI3Byb2Nlc3NvcnMsIHlvdSBjYW4gc2V0IE5QUk9DIHVwIHRvIHRoZSBudW1iZXIgb2YgQ1BV cywgZS5nLiBOUFJPQz0xNi4KLWNyYXljc29zOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIENyYXktMi8zIENTT1MKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IE5QUk9DPTEgXAotCSJDRkxBR1M9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1Ag LURUQ1BTT0NLRVQgXAotCSQoS0ZMQUdTKSAtRENLX0FOU0lDIC1EQ0tfQ1VSU0VTIiAiTElCUz0t bG5ldCIKLQotI05lWFRTVEVQIDEuMCB0aHJvdWdoIDMuMi4KLSNJbmNsdWRlcyBmdWxsc2NyZWVu IGZpbGUgdHJhbnNmZXIgZGlzcGxheSAoY3Vyc2VzKSBhbmQgVENQL0lQIHN1cHBvcnQuCi0jVXNl cyBzaGFyZWQgbGlicmFyeSB0byBtYWtlIGV4ZWN1dGFibGUgcHJvZ3JhbSBhYm91dCA4MEsgc21h bGxlci4KLSNSZW1vdmUgIkxJQlMgPSAtbHN5c19zIiBpZiB0aGlzIGNhdXNlcyB0cm91YmxlLgot bmV4dDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE5lWFRTVEVQLi4uCi0J QGVjaG8gJ0lmIHlvdSBnZXQgZXJyb3JzIGluIGNrdXRpby5jIGFib3V0IHdfUywgd19ULCBldGMs JwotCUBlY2hvICdhZGQgS0ZHTEFHUz0tRE5PUkVESVJFQ1QgdG8geW91ciBtYWtlIGNvbW1hbmQu JwotCSQoTUFLRSkgeGVybWl0IENDPSQoQ0MpIENDMj0kKENDMikgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCi0JIkNGTEFHUz0gLURORVhUIC1EVENQU09DS0VUIC1ETENLRElSIC1ETk9QVVRF TlYgLURGTkZMT0FUIFwKLQktcGlwZSAtRENLX0NVUlNFUyAkKEtGTEFHUykgLU8gLXciICJMSUJT ID0gLWxzeXNfcyAtbGN1cnNlcyAtbHRlcm1jYXAiCi0KLW5leHRjOgotCSQoTUFLRSkgIk1BS0U9 JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBuZXh0IFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9Ci0KLW5leHRnOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQo Q0MyKSBuZXh0IFwKLQlLRkxBR1M9LVdhbGwgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi1u ZXh0Z2M6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9JChDQzIpIG5leHQg XAotCUtGTEFHUz0tV2FsbCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSNOZVhUU1RFUCAz LjMuCi0jSW5jbHVkZXMgZnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgYW5kIFRDUC9J UC4KLSMgWW91IG1pZ2h0IGhhdmUgdG8gYWRkIDEgbGluZSB0byAxIE5lWFQgaGVhZGVyIGZpbGUg PGlwLmg+Ci0jIHRvIGRlY2xhcmUgbl9sb25nIGFzIHVfbG9uZyBieSBhZGRpbmcgI2luY2x1ZGUg PGJzZC9uZXRpbmV0L2luX3N5c3RtLmg+Ci0KLW5leHQzMzoKLQlAZWNobyBNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIE5lWFRTVEVQIDMuMy4uLgotCSQoTUFLRSkgeGVybWl0IENDPSQoQ0Mp IENDMj0kKENDMikgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURORVhU MzMgLURUQ1BTT0NLRVQgLURMQ0tESVIgLUROT1BVVEVOViAtREZORkxPQVQgXAotCS1waXBlIC1E Q0tfQ1VSU0VTICQoS0ZMQUdTKSAtTyAtdyIgIkxJQlMgPSAtbHN5c19zIC1sY3Vyc2VzIC1sdGVy bWNhcCIKLQotI09QRU5TVEVQIDQuMiBmb3IgU3BhcmMsIG02ODB4MCwgSFAgUEEtUklTQywgYW5k IEludGVsLgotI0luY2x1ZGVzIGZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5IGFuZCBU Q1AvSVAuCi0jY2tjcHJvLmMgY29tcGlsZWQgd2l0aG91dCBvcHRpbWl6YXRpb24gYmVjYXVzZSBp dCBjcmFzaGVzIHRoZSBjb21waWxlci4KLW9wZW5zdGVwNDI6Ci0JQGVjaG8gTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBPUEVOU1RFUCA0LjIuLi4KLQkkKE1BS0UpIGNrY3Byby4kKEVYVCkg XAotCSJDRkxBR1M9IC1ET1BFTlNURVA0MiAtRE5FWFQzMyAtRFRDUFNPQ0tFVCAtRExDS0RJUiAt RE5PUFVURU5WIFwKLQktREZORkxPQVQgLXBpcGUgLURDS19DVVJTRVMgJChLRkxBR1MpIC13Igot CSQoTUFLRSkgeGVybWl0IENDPSQoQ0MpIENDMj0kKENDMikgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIkNGTEFHUz0gLURPUEVOU1RFUDQyIC1ETkVYVDMzIC1EVENQU09DS0VUIC1ETENL RElSIC1ETk9QVVRFTlYgXAotCS1ERk5GTE9BVCAtcGlwZSAtRENLX0NVUlNFUyAkKEtGTEFHUykg LU8gLXciIFwKLQkiTElCUyA9IC1sc3lzX3MgLWxjdXJzZXMgLWx0ZXJtY2FwIgotCi0jTmVYVCB3 aXRoIG1hbGxvYyBkZWJ1Z2dlcgotbmV4dG1kOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgTmVYVCB3aXRoIG1hbGxvYyBkZWJ1Z2dpbmcuLi4KLQkkKE1BS0UpIG1lcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRE5FWFQgLURUQ1BTT0NLRVQg LURMQ0tESVIgLUROT1BVVEVOViAtREZORkxPQVQgXAotCS1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSAt TyAtdyAtRG1hbGxvYz1kbWFsbG9jIC1EZnJlZT1kZnJlZSAtRE1ERUJVRyIgXAotCSJMSUJTID0g LWxzeXNfcyAtbGN1cnNlcyAtbHRlcm1jYXAiCi0KLSNCdWlsZCBmb3IgTmVYVFNURVAgd2l0aCAi ZmF0IiBiaW5hcmllcyAoTUFCcykgdGhhdCBydW4gb24gYm90aCBNb3Rvcm9sYQotI2FuZCBJbnRl bCBwbGF0Zm9ybXMuCi1uZXh0ZmF0OgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykg Q0MyPSQoQ0MyKSBcCi0JbmV4dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdT PS1XYWxsIC1hcmNoIG02OGsgLWFyY2ggaTM4NiIgIkxOS0ZMQUdTID0gLWFyY2ggbTY4ayAtYXJj aCBpMzg2IgotCi0jTmVYVFNURVAgb24gSW50ZWwgUGxhdGZvcm1zLgotbmV4dDQ4NjoKLQlAZWNo byBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE5lWFRTVEVQIG9uIEludGVsIFBsYXRmb3Jt cy4uLgotCUBlY2hvICdJZiB5b3UgZ2V0IGVycm9ycyBpbiBja3V0aW8uYyBhYm91dCB3X1MsIHdf VCwgZXRjLCcKLQlAZWNobyAnYWRkIEtGR0xBR1M9RC1ETk9SRURJUkVDVCB0byB5b3VyIG1ha2Ug Y29tbWFuZC4nCi0JJChNQUtFKSB4ZXJtaXQgQ0M9JChDQykgQ0MyPSQoQ0MyKSBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRE5FWFQgLURUQ1BTT0NLRVQgLURMQ0tESVIg LUROT1BVVEVOViAtREZORkxPQVQgXAotCS1ETk9ERUJVRyAtTzMgLWZuby1vbWl0LWZyYW1lLXBv aW50ZXIgLWZzY2hlZHVsZS1pbnNuczIgLXBpcGUgXAotCS1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSAt dyIgIkxJQlMgPSAtbHN5c19zIC1sY3Vyc2VzIC1sdGVybWNhcCIKLQotI1NpbmdsZSBiaW5hcnkg dGhhdCBydW5zIG9uIE5lWFQgNjgwMzAgYW5kIDY4MDQwLCBJbnRlbCwgSFAsIGFuZCBTcGFyYywK LSNhcyB3ZWxsIGFzIG9uIE9wZW5TdGVwL01hY2guCi1uZXh0cXVhZGZhdDoKLQkkKE1BS0UpICJN QUtFPSQoTUFLRSkiIENDPSQoQ0MpIENDMj0kKENDMikgbmV4dCBcCi0JS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIktGTEFHUz0tV2FsbCAtYXJjaCBtNjhrIC1hcmNoIGkzODYgLWFyY2gg aHBwYSAtYXJjaCBzcGFyYyIgXAotCSJMTktGTEFHUyA9IC1hcmNoIG02OGsgLWFyY2ggaTM4NiAt YXJjaCBocHBhIC1hcmNoIHNwYXJjIgotCi0jQmVCb3gKLWJlYm94ZHI3OgotCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIHRoZSBCZUJveC4uLicKLQlAZWNobyAnTGluayBzdGVw IHdpbGwgZmFpbCB3aXRoIGRlZmF1bHQgTWV0cm93b3JrcyBsaW5rZXIgNjRLIGxpbWl0LicKLQlA ZWNobyAnQ29kZSBXYXJyaW9yIEdvbGQgcmVxdWlyZWQgdG8gbGluayBiaWcgcHJvZ3JhbXMuJwot CSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDQz0vYm9vdC9k ZXZlbG9wL3Rvb2xzL213Y2MiICJDQzI9L2Jvb3QvZGV2ZWxvcC90b29scy9td2xkIiBcCi0JIkNG TEFHUz0gLURCRUJPWCAtREJFX0RSXzcgLURQT1NJWCAtRE5PVVVDUCAtRE5PTEVBUk4gJChLRkxB R1MpIC1PIgotCi0jQmVCb3ggQmVPUyBEUjcgb25seQotYmVib3g6Ci0JQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgQmVCb3guLi4nCi0JQGVjaG8gJ0xpbmsgc3RlcCB3aWxsIGZh aWwgd2l0aCBkZWZhdWx0IE1ldHJvd29ya3MgbGlua2VyIDY0SyBsaW1pdC4nCi0JQGVjaG8gJ0Nv ZGUgV2FycmlvciBQcm8gMy4wIGZvciBCZUJveCByZXF1aXJlZCB0byBsaW5rIGJpZyBwcm9ncmFt cy4nCi0JJChNQUtFKSB3ZXJtaXQgIkNDPW13Y2MiICJDQzI9bXdsZCIgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURCRUJPWCAtRFBPU0lYIC1ETk9MRUFSTiAtRE5PVVVD UCAkKEtGTEFHUykgLU8iCi0KLSNCZU9TIDQuNQotI1dlIGhhdmUgdG8gdXNlIHRoZSB3ZXJtaXQg dGFyZ2V0IGJlY2F1c2UgJ2ZkX3NldCcgaXMgdW5rbm93bi4KLWJlb3M0NToKLQkkKE1BS0UpIHdl cm1pdCAiQ0M9JChDQykiICJDQzI9JChDQzIpIiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK LQkiQ0ZMQUdTPSAtREJFT1MgLURCRU9TNDUgLURQT1NJWCAtRE5PSUtTRCAtRE5PUkVBTFBBVEgg LURTWVNUSU1FSCBcCi0JLUROT0NPVEZNQyAtRE5PVVVDUCAtRE5PTEVBUk4gJChLRkxBR1MpIC1P IiBcCi0JIkxJQlMgPSAkKExJQlMpIgotCi0jQmVPUyA0LjUKLWJlb3M0NW5ldDoKLQkkKE1BS0Up IENDPSQoQ0MpIENDMj0kKENDMikgYmVvczQ1IFwKLQkiS0ZMQUdTPS1EVENQU09DS0VUIC1ETk9f RE5TX1NSViAkKEtGTEFHUykiICJMSUJTPS1sbmV0IC1sbmV0YXBpIgotCi0jUGxhbiA5IGZyb20g QmVsbCBMYWJzCi1wbGFuOToKLQlAZWNobyAnQy1LZXJtaXQgZm9yIFBsYW4gOSBmcm9tIEJlbGwg TGFicyAtIGNhbGxpbmcgY2twa2VyLm1rLi4uJwotCW1ha2UgLWYgY2twa2VyLm1rCi0KLSNQT1NJ WAotcG9zaXg6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgcHVyZSBQT1NJ WC4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZM QUdTPSAtRFBPU0lYIC1ETk9VVUNQIC1ETk9MRUFSTiAkKEtGTEFHUykgLU8iCi0KLSMgUG93ZXJN QVggT1MgKFNWUjQpIGZyb20gQ29uY3VycmVudCAodGVzdGVkIG9uIFBvd2VyTUFYIDUuMSkKLXBv d2VybWF4OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIENvbmN1cnJlbnQg UG93ZXJNQVggT1MuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCi0JIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURQT1dFUk1BWCBc Ci0JLURORVRQVFkgLURIQVZFX1NUUkVBTVMgLURIQVZFX0dSQU5UUFQgLURIQVZFX1BUU05BTUUg LURQVVNIX1BURU0gXAotCS1EUFVTSF9MRFRFUk0gLURQVVNIX1RUQ09NUEFUIFwKLQktRFNURVJN SU9YIC1EVENQU09DS0VUIC1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHNvY2tl dCAtbG5zbCAtbHJlc29sdiAtbGN1cnNlcyAtbGdlbiAtbGMgLWx1Y2JjIgotCi0jQmVya2VsZXkg U29mdHdhcmUgRGVzaWduIEluYy4gQlNESQotIyBTdWJzdGl0dXRlICJMSUJTPSAtbG5ld2N1cnNl cyAtbHRlcm1jYXAiIGlmIGRlc2lyZWQuCi1ic2RpOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIEJTREkgLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENDQgLURTRVRSRVVJRCAtRFNXX0FDQ19JRCAtREJJ R0JVRk9LIC1ERklYQ1JUU0NUUyBcCi0JLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgLURGTkZMT0FU ICQoS0ZMQUdTKSAtTyIgXAotCSJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAgLWxtIgotCi0jQmVy a2VsZXkgU29mdHdhcmUgRGVzaWduIEluYy4gQlNESSAtIGhhcyBoaWdoZXIgc2VyaWFsIHNwZWVk cyB0aGFuIDEueC4KLWJzZGkyOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0My PSQoQ0MyKSBic2RpIFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1M9LURCU0RJ MiAkKEtGTEFHUykiCi0KLWJzZGkzOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykg Q0MyPSQoQ0MyKSBic2RpIFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1M9LURC U0RJMiAtREJTREkzICQoS0ZMQUdTKSIKLQotYnNkaTQ6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0Up IiBDQz0kKENDKSBDQzI9JChDQzIpIGJzZGkgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAotCSJLRkxBR1M9LURCU0RJMiAtREJTREkzIC1EQlNESTQgLURUUFVUU0ZOVFlQRT12b2lkIC1E VFBVVFNJU1ZPSUQgXAotCS1EQ0tIVFRQIC1tNDg2ICQoS0ZMQUdTKSIKLQotIyAob2xkIG5hbWUg Zm9yIHRoZSBhYm92ZSkKLWJzZGlwb3NpeDoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIENDPSQo Q0MpIENDMj0kKENDMikgYnNkaQotCi0KLSNCdWlsZCBhIEJTREkgNC54IGJpbmFyeSB0aGF0IGFs c28gcnVucyB1bmRlciBGcmVlQlNEIChUZXJyeSBLZW5uZWR5KS4KLSNCdXQgd2F0Y2ggb3V0IGZv ciBkZXRhaWxzIGxpa2Ugc2VyaWFsLXBvcnQgbG9ja2luZy4KLWJzZGl4OgotCSQoTUFLRSkgIk1B S0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBic2RpIFwKLQlLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EQlNESTIgLURCU0RJMyAtREJTREk0IC1EVFBVVFNGTlRZ UEU9dm9pZCAtRFRQVVRTSVNWT0lEIFwKLQktbTQ4NiAkKEtGTEFHUykiICJMTktGTEFHUz0tc3Rh dGljIC1XbCwtbSxpMzg2YnNkaSAtV2wsLWUsX3N0YXJ0IgotCi0jUHlyYW1pZCA5WFhYIChlLmcu IDk4NDUpIG9yIE1JU2VydmVyIFQgc2VyaWVzLCBPU3ggNC40YiB0aHJ1IDUuMQotcHlyYW1pZDoK LQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFB5cmFtaWQgRHVhbCBQb3J0IE9T eAotCXVjYiAkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZM QUdTPSAtREJTRDQzIC1EVENQU09DS0VUIC1EUFlSQU1JRCAtTyAkKEtGTEFHUykiICJMTktGTEFH UyA9IC1zIgotCi0jUHlyYW1pZCBEdWFsIFBvcnQgT1N4IHVzaW5nIEhvbmV5RGFuQmVyIFVVQ1As IGN1cnNlcyBhbmQgVENQCi1weXJhbWlkLWhkYjoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIFB5cmFtaWQgRHVhbCBQb3J0IE9TeAotCXVjYiAkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQzIC1EVENQU09DS0VUIC1E SEJEVVVDUCAtRENLX0NVUlNFUyAtTyAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJ QlMgPSAtbGN1cnNlcyAtbHRlcm1jYXAiCi0KLSNQeXJhbWlkIERDL09TeCAoVU5JWCBTeXN0ZW0g ViBSNCkuCi0jSGFzIDxzeXMvdGVybWlveC5oPiwgcmVndWxhciBCZXJrZWxleSBzb2NrZXRzIGxp YnJhcnksIGkuZS4gaW4uaCBhbmQgaW5ldC5oCi0jYXJlIG5vdCBtaXNwbGFjZWQgaW4gc3lzIChy YXRoZXIgdGhhbiBuZXRpbmV0IGFuZCBhcnBhLCByZXNwZWN0aXZlbHkpLgotI1VzZXMgQU5TSSBD LgotI05PVEU6IFJlbW92ZSAtTyBhbmQgT2xpbWl0OjI1MDAgZnJvbSBDRkxBR1MgaWYgVEVMTkVU IGNvbm5lY3Rpb25zIGRvIG5vdCB3b3JrLgotcHlyZGNvc3g6Ci0JQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgUHlyYW1pZCBEQy9PU3guLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1YYSAtTyAtRFNWUjQgLURESVJF TlQgLURIREJVVUNQIC1EU0VMRUNUIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1EQ0tfQ1VSU0VTIC1E U1RFUk1JT1ggLURUQ1BTT0NLRVQgLURQWVJBTUlEIC1LIE9saW1pdDozMTAwIFwKLQktRE5PX0RO U19TUlYgJChLRkxBR1MpIiAiTElCUz0gLWxjdXJzZXMgLWxzb2NrZXQgLWxuc2wiICJMTktGTEFH UyA9IC1zIgotCi0jSUJNJ3MgQUlYIDMuMCBvbiBJQk0gMzcwIG1haW5mcmFtZSwgdGVzdGVkIG9u IEFJWCBGNDQgdGhydSBGNTAuCi1haXgzNzA6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBJQk0gU3lzdGVtLzM3MCBBSVggMy4wLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURBSVgzNzAgLURUQ1BTT0NLRVQgLURM Q0tESVIgLURESVJFTlQgJChLRkxBR1MpIiBcCi0JIkxJQlMgPSAtbGJzZCIKLQotI0lCTSdzIEFJ WC9FU0EgMi4xIChPU0YvMSkgb24gSUJNIG1haW5mcmFtZQotYWl4ZXNhOgotCUBlY2hvIE1ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJWC9FU0EuLi4KLQkkKE1BS0UpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREFJWEVTQSAtRFRDUFNPQ0tF VCAkKEtGTEFHUykgLU8iCi0KLSNJQk0gUFMvMiB3aXRoIEFJWCAxLjAgdGhydSAxLjMuCi0jICBS ZXBvcnRzIGluZGljYXRlIHRoYXQgLU8gc3dpdGNoIG11c3QgYmUgb21pdHRlZC4KLSMgIEl0IGlz IGFsc28gcG9zc2libGUgdGhhdCAibWFrZSBic2QiIHdpbGwgd29yayAocmVwb3J0cyB3ZWxjb21l KS4KLSMgIE9uZSByZXBvcnQgc2FpZCAibWFrZSBMSUJTPS1sYnNkIGJzZCIgZGlkIHRoZSB0cmlj ay4KLSMgIE5PVExPRyBpcyB0byBnZXQgYXJvdW5kIGEgJ3Rsb2cnIHN5bWJvbCBkZWZpbmVkIGlu IG9uZSBvZiB0aGUgaGVhZGVycy4KLXBzMmFpeDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBJQk0gQUlYIDEueCBQUy8yLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtREFUVFNWIC1ETk9SRUFMUEFUSCAtRFBT MkFJWDEwIC1EU0lHX1YgXAotCS1ETk9VTklDT0RFIC1ETk9UTE9HIC1ETk9MRUFSTiAkKEtGTEFH UykgLWkiIFwKLQkiTE5LRkxBR1MgPSAtaSIKLQotcHMyYWl4bmV0YzoKLQlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJQk0gQUlYIDEueCBQUy8yLi4uJwotCSQoTUFLRSkgd2Vy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtREFUVFNWIC1ETk9S RUFMUEFUSCAtRFBTMkFJWDEwIC1EVENQU09DS0VUIC1EQ0tfQ1VSU0VTIFwKLQktRFNJR19WIC1E Tk9VTklDT0RFIC1ETk9UTE9HIC1ETk9MRUFSTiAkKEtGTEFHUykgLWkiIFwKLQkiTElCUyA9IC1s Y3Vyc2VzIiAiTE5LRkxBR1MgPSAtaSIKLQotcHMyYWl4MzoKLQkkKE1BS0UpIHBzMmFpeCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSNJQk0gUlQgUEMgd2l0aCBBSVggMi4yLjEsIHZhbGlk IGFzIG9mIEMtS2VybWl0IDguMC4KLSNOT1RMT0cgYmVjYXVzZSBvZiBhIGNvbmZsaWN0IGluIDxz eXMvdGVybWlvLmg+LgotI1RoaXMgb25lIGhhcyB1bmlxdWUgYW5kIHN0cmFuZ2UgbG9ja2ZpbGVz LgotIyAgLU8gcmVtb3ZlZCBvbiBwdXJwb3NlICg4LjApLgotIyAgSW4gY2FzZSBvZiAiY29tcGls ZXIgZXJyb3I6IHN5bWJvbCB0YWJsZSBmdWxsIiwgaW5jcmVhc2UgdGhlIC1ObiBudW1iZXIuCi0j ICBJbiBjYXNlIG9mICJjb21waWxlciBlcnJvcjogQ29uc3RhbnQgcG9vbCB0b28gYmlnIiwgYm9v c3QgdGhlIC1OcCBudW1iZXIuCi0jICBBZGQgLUROT1BVVEVOViBpZiBwdXRlbnYoKSBjYXVzZXMg dHJvdWJsZS4KLSMgIFB1dCAtRE5PSUtTRCBiYWNrIGlmIElLU0QtcmVsYXRlZCBwcm9ibGVtcyBv Y2N1ci4KLXJ0YWl4OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBS VCBQQywgQUlYIDIuMi4xLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0k KEApfSBcCi0JIkNGTEFHUyA9IC1EQVRUU1YgLURSVEFJWCAtREhEQlVVQ1AgLURESVJFTlQgLURO T1RMT0cgLURUQ1BTT0NLRVQgXAotCS1ETk9HRVRVU0VSU0hFTEwgLURDTFNPUE4gLUROT1JFQUxQ QVRIIC1ETk9VTklDT0RFIC1EQlNEX0lOQ0xVREVTIFwKLQktRFVTRV9MU1RBVCAtREZORkxPQVQg LU5uMjUwMCAtTnAxMDAwIC1XcSwtU0oyIC1hIC13ICQoS0ZMQUdTKSIgXAotCSJMSUJTID0gLWxt ICQoTElCUykiICJMTktGTEFHUyA9IC1zIgotCi0jIyMjIElCTSBSVCBQQyAtIHRoZXNlIHRhcmdl dHMgd2VyZSBsYXN0IHZlcmlmaWVkIGluIEMtS2VybWl0IDguMC4yMTEuCi0KLSNJQk0gUlQgUEMg d2l0aCBBSVggMi4yLjEgKyBjdXJzZXMKLXJ0YWl4YzoKLQkkKE1BS0UpIHJ0YWl4IENDPSQoQ0Mp IENDMj0kKENDMikgIktGTEFHUz0tRENLX0NVUlNFUyIgIkxJQlM9LWxjdXJzZXMiCi0KLSNJQk0g UlQgUEMgd2l0aCBBSVggKEFDSVMpIDIuMi4xIChCU0QgNC4zKQotIyBBZGQgLU8sIC1ERFlOQU1J QywgLXMsIGV0YywgaWYgdGhleSB3b3JrLgotcnRhY2lzOgotCUBlY2hvIE1ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgUlQgUEMgd2l0aCBBQ0lTIDIuMi4xID0gQlNEIDQuMy4uLgotCSQoTUFL RSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0IC1E VENQU09DS0VUIC1ETk9SRUFMUEFUSCAtRE5PSUtTRCAtRE5PUFVURU5WIFwKLQkkKEtGTEFHUykg LVVfX1NURENfXyIgIkxOS0ZMQUdTID0gLXMiCi0KLSMjIyMgSUJNIEFJWC4gIFRoZSBmaXJzdCB0 d28gdGFyZ2V0cyBzaG91bGQgd29yayBmb3IgYW55IHZlcnNpb24gb2YgQUlYCi0jIyMjIGZyb20g NC4yIG9ud2FyZHMuICBUaGUgb25lcyBhZnRlciB0aGF0IGFyZSBmb3Igb2xkZXIgdmVyc2lvbnMg b3IKLSMjIyMgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGFuZC9vciB3aXRoIGdjYy4KLQotIyBU aGlzIG9uZSBzaG91bGQgd29yayBmb3IgYW55IEFJWCA0LjIgb3IgbGF0ZXI6ICJtYWtlIGFpeCIu Ci0jIE90aGVyIHRhZ3MgYXJlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIG1ha2VmaWxlIHRh cmdldHMuCi0jT0s6IDIwMTEvMDYvMTEKLWFpeCBhaXg0MiBhaXg0MyBhaXg0NCBhaXg0NSBhaXg1 MCBhaXg1MSBhaXg1MiBhaXg1MyBhaXg1NCBhaXg2MToKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIElCTSBBSVguLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREFJWFJTIC1EQUlYNDEgLURBSVg0MiAtRFNWUjQgLURT VEVSTUlPWCAtRFRDUFNPQ0tFVCBcCi0JLURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAtRENL X0NVUlNFUyAtRENLX05FV1RFUk0gLURGTkZMT0FUIFwKLQktRFNFTEVDVCAtRFNFTEVDVF9IIC1E Tk9HRVRVU0VSU0hFTEwgLXFtYXhtZW09MTYwMDAgLU8gXAotCS1EQ0tDUFU9XFxcImB1bmFtZSAt cGBcXFwiIFwKLQktREhFUkFMRD1cIlxcXCIgSUJNIEFJWCBgdW5hbWUgLXZgLmB1bmFtZSAtcmBc XFwiXCIgXAotCS1EX0xBUkdFX0ZJTEVTICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiICJMSUJT PS1sY3Vyc2VzIC1sbSIKLQotIyBTYW1lIGJ1dCB1c2luZyBnY2MgaW5zdGVhZCBvZiBjYwotIyBU aGlzIHdvcmtzIGJ1dCB3ZSBnZXQgImdjYzogdW5yZWNvZ25pemVkIG9wdGlvbiAnLXFtYXhtZW0t Li4nIiBlYWNoIG1vZHVsZS4KLWFpeGc6Ci0JQGVjaG8gIlVzaW5nIGdjYy4uLiIKLQkkKE1BS0Up IGFpeCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQlDQz1nY2MgQ0MyPWdjYyAiS0ZMQUdT PS1waXBlIC1mdW5zaWduZWQtY2hhciIKLQotIyBBSVggNC4yIG9yIGxhdGVyIHdpdGggT3BlblNT TCAwLjkuNyBvciBsYXRlcjogIm1ha2UgYWl4K3NzbCIKLSMgRm9yIGVhcmxpZXIgT3BlblNTTCBy ZW1vdmUgLURPUEVOU1NMXzA5NyBvciBhZGQgIktGTEFHUz0tVU9QRU5TU0xfMDk3Ii4KLSMgU3lu b255bSB0YXJnZXQgbmFtZXMgYWRkZWQgdG8gY292ZXIgb2xkIHJlZHVuZGFudCB0YXJnZXRzIHRo YXQgd2VyZSByZW1vdmVkLgotIyBJZiBTU0wgaXMgbm90IGluc3RhbGxlZCBpbiB0aGUgL3Vzci9s b2NhbCB0cmVlIChzZWUgU1NMSU5DIGFuZCBTU0xMSUIKLSMgZGVmaW5pdGlvbnMgbmVhciB0aGUg dG9wKSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBsb2NhdGlvbnMgaW4geW91ciBtYWtlCi0jIGNvbW1h bmQgYXMgaW4gdGhpcyBleGFtcGxlOgotIwotIyAgU1NMSU5DPS1JL29wdC9zc2wvaW5jbHVkZSBT U0xMSUI9LUwvb3B0L3NzbC9saWIgbWFrZSAtZSBhaXgrc3NsCi0jCi0jIFRvIGJ1aWxkIHdpdGgg Z2NjIHVzZSAibWFrZSBhaXggQ0M9Z2NjIENDMj1nY2MiLCBvciAibWFrZSBhaXhnIgotIwotI09L OiAyMDExLzA2LzE1Ci1haXgrc3NsIGFpeDUxK29wZW5zc2wgYWl4NTIrb3BlbnNzbCBhaXg1Mytv cGVuc3NsOgotCUBlY2hvICJNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggd2l0 aCBPcGVuU1NMLi4uIgotCUBlY2hvICJTU0xJTkM9JChTU0xJTkMpIFNTTExJQj0kKFNTTExJQiki Ci0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JQ0M9JChDQykg Q0MyPSQoQ0MyKSBcCi0JIkNGTEFHUz0tREFJWFJTIC1EQUlYNDEgLURBSVg0MiAtRFNWUjQgLURT VEVSTUlPWCAtRFRDUFNPQ0tFVCBcCi0JLURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAtRENL X0NVUlNFUyAtRENLX05FV1RFUk0gLURGTkZMT0FUIFwKLQktRF9MQVJHRV9GSUxFUyAtRFNFTEVD VCAtRFNFTEVDVF9IIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1EQ0tDUFU9XFxcImB1bmFtZSAtcGBc XFwiIFwKLQktREhFUkFMRD1cIlxcXCIgSUJNIEFJWCBgdW5hbWUgLXZgLmB1bmFtZSAtcmBcXFwi XCIgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TU0wgLURPUEVOU1NMXzA5NyAkKFNTTElO QykgJChLRkxBR1MpIiBcCi0JIkxOS0ZMQUdTPS1zIiAiTElCUz0kKFNTTExJQikgLWxzc2wgLWxj cnlwdG8gLWxjdXJzZXMgLWxtIC1sY3J5cHQiCi0KLSMgQUlYIDUuMyBvciA2LjEgb3IgbGF0ZXIg d2l0aCBJQk0gT3BlblNTTCwgd2hpY2ggaXMgYWx3YXlzIGluIHRoZSBkaXJlY3RvcmllcwotIyBz aG93biBiZWxvdyBzbyB5b3UgZG9uJ3QgaGF2ZSB0byBzZXQgU1NMSU5DIGFuZCBTU0xMSUIuICBJ ZiBmb3Igc29tZSByZWFzb24KLSMgdGhlIFNTTCBpbmNsdWRlIGZpbGVzIGFuZCBsaWJyYXJpZXMg YXJlIG5vdCBpbiB0aGUgcGxhY2VzIGFzc3VtZWQsIHRoZW4gdXNlCi0jICJtYWtlIGFpeCtzc2wi IChqdXN0IGFib3ZlKSBhbmQgc2V0IFNTTElOQyBhbmQgU1NMTElCIHRvIGluZGljYXRlIHdoZXJl IHRoZQotIyBTU0wgZmlsZXMgYXJlLiAgVG8gYnVpbGQgd2l0aCBnY2MgdXNlICJtYWtlIGFpeCtp Ym1zc2wgQ0M9Z2NjIENDMj1nY2MiLgotYWl4K2libXNzbDoKLQlAZWNobyAiTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBJQk0gQUlYIDYuMSB3aXRoIE9wZW5TU0wuLi4iCi0JQGVjaG8gIklm IHRoaXMgZmFpbHMgdXNlICdtYWtlIGFpeCtzcycgYW5kIHNwZWNpZnkgU1NMSU5DIGFuZCBTU0xM SUIiCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JQ0M9JChD QykgQ0MyPSQoQ0MyKSBcCi0JIkNGTEFHUz0tREFJWFJTIC1EQUlYNDEgLURBSVg0MiAtRFNWUjQg LURTVEVSTUlPWCAtRFRDUFNPQ0tFVCBcCi0JLURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAt RENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURGTkZMT0FUIFwKLQktRF9MQVJHRV9GSUxFUyAtRFNF TEVDVCAtRFNFTEVDVF9IIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1EQ0tDUFU9XFxcImB1bmFtZSAt cGBcXFwiIFwKLQktREhFUkFMRD1cIlxcXCIgSUJNIEFJWCBgdW5hbWUgLXZgLmB1bmFtZSAtcmBc XFwiXCIgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TU0wgLURPUEVOU1NMXzA5OCBcCi0J LUkvdXNyL2luY2x1ZGUvb3BlbnNzbCAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1M9LXMiIFwKLQki TElCUz0tTC91c3IvbGliL29wZW5zc2wgLWxzc2wgLWxjcnlwdG8gLWxjdXJzZXMgLWxtIC1sY3J5 cHQiCi0KLSMgT2xkIEFJWCB2ZXJzaW9ucy4uLgotCi0jSUJNIEFJWCAzLjAsIDMuMSwgb3IgMy4y IGZvciBSSVNDIFN5c3RlbS82MDAwLgotcnM2MDAwOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgSUJNIEFJWCAzLjAgb3IgMy4xLCBSUy82MDAwLi4uCi0JJChNQUtFKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURBSVhSUyAtRFRDUFNP Q0tFVCAtRFNWUjMgLURESVJFTlQgLURDS19BTlNJQyBcCi0JLURDS19QT0xMIC1EQ0xTT1BOIC1E U0VMRUNUX0ggLUROT1RUWUxPQ0sgLU8gJChLRkxBR1MpIiBcCi0JIkxOS0ZMQUdTID0gLXMiCi0K LSNJQk0gQUlYIDMuMCwgMy4xLCBvciAzLjIgZm9yIFJJU0MgU3lzdGVtLzYwMDAsIHdpdGggY3Vy c2VzLgotcnM2MDAwYzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBB SVggMy4wIG9yIDMuMSwgUlMvNjAwMC4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQUlYUlMgLURUQ1BTT0NLRVQgLURTVlIzIC1ERElS RU5UIC1EQ0tfQU5TSUMgXAotCS1EQ0tfUE9MTCAtRENMU09QTiAtRENLX0NVUlNFUyAtRFNFTEVD VF9IIC1ETk9UVFlMT0NLIC1ETk9SRUFMUEFUSCBcCi0JLU8gJChLRkxBR1MpIiAiTElCUz0gLWxj dXJzZXMgLWx0ZXJtY2FwIiAiTE5LRkxBR1MgPSAtcyIKLQotYWl4MzA6Ci0JJChNQUtFKSByczYw MDAgQ0M9JChDQykgQ0MyPSQoQ0MyKSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLWFpeDMx OgotCSQoTUFLRSkgcnM2MDAwIENDPSQoQ0MpIENDMj0kKENDMikgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfQotCi0jSUJNIEFJWCAzLjIgZm9yIFJJU0MgU3lzdGVtLzYwMDAuCi0jSW4gY2FzZSBv ZiAic3VicHJvZ3JhbSB0b28gY29tcGxleCIgd2FybmluZ3MsIGFkZCAiLXFtYXhtZW09MTYwMDAi IHRvIENGTEFHUy4KLXJzNmFpeDMyOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgSUJNIEFJWCAzLjIsIFJTLzYwMDAuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREFJWFJTIC1EVENQU09DS0VUIC1EU1ZSNCAtRERJ UkVOVCAtRENLX0FOU0lDIC1ETk9SRUFMUEFUSCBcCi0JLURTRUxFQ1RfSCAtRENMU09QTiAtRE5P VFRZTE9DSyAtTyAkKEtGTEFHUykiICJMTktGTEFHUyA9IC1zIgotCi0jSUJNIEFJWCAzLjIgZm9y IFJJU0MgU3lzdGVtLzYwMDAuCi1yczZhaXgzMmM6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBJQk0gQUlYIDMuMiwgUlMvNjAwMCwgVENQK2N1cnNlcy4uLgotCUBlY2hvIElu IGNhc2Ugb2YgU3VicHJvZ3JhbSBUb28gQ29tcGxleCB3YXJuaW5ncywKLQlAZWNobyBhZGQgLXFt YXhtZW09MTYwMDAgdG8gQ0ZMQUdTLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAotCSJDRkxBR1M9IC1EQUlYUlMgLURUQ1BTT0NLRVQgLURTVlI0IC1ERElSRU5U IC1EQ0tfQU5TSUMgLUROT1JFQUxQQVRIIFwKLQktRENMU09QTiAtRENLX0NVUlNFUyAtRFNFTEVD VF9IIC1ETk9UVFlMT0NLIC1PICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9IC1zIiAiTElCUz0t bGN1cnNlcyIKLQotYWl4MzI6Ci0JJChNQUtFKSByczZhaXgzMmMgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfQotCi0jSUJNIEFJWCA0LjEsIDQuMS54IG9uIFJJU0MgU3lzdGVtLzYwMDAgb3IgUG93 ZXIgU2VyaWVzLgotI0dlbmVyYXRlcyBjb21tb24gYmluYXJ5IGZvciBhbGwgcGxhdGZvcm1zIGlm IHVzaW5nIHhsYyAoSUJNIEMgY29tcGlsZXIpLgotI1doZW4gdXNpbmcgZ2NjLCBhZGQgLW1jcHU9 Y29tbW9uIHRvIGdlbmVyYXRlIGNvbW1vbiBiaW5hcnkuCi0jTm90ZSB0aGF0IHRoaXMgb25lIG5l ZWRzIENLX05FV1RFUk0uCi0jIEFkZCAtYmJpZ3RvYyBpbiBjYXNlIGxkIGZhaWxzIHdpdGggVE9D IG92ZXJmbG93LgotYWl4NDE6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJ Qk0gQUlYIDQuMS4xIFJTLzYwMDAgb3IgUG93ZXJQQy4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQUlYUlMgLURBSVg0MSAtRFNWUjQg LURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtRERJUkVOVCBcCi0JLURDS19BTlNJQyAtRENMU09QTiAt RENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURTRUxFQ1QgLURTRUxFQ1RfSCBcCi0JLUROT0dFVFVT RVJTSEVMTCAtcW1heG1lbT0xNjAwMCAtTyAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtcyIg IkxJQlM9LWxjdXJzZXMiCi0KLSNEaXR0byBidXQgd2l0aCBnY2MuCi0jUmVtb3ZlICJDQz1nY2Mg Q0MyPWdjYyIgaWYgeW91IGhhdmUgZ2NjIGluc3RhbGxlZCBhcyBjYy4KLWFpeDQxZzoKLQlAZWNo byBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggNC4xLjEgUlMvNjAwMCBvciBQ b3dlclBDLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9 Z2NjIiAiQ0MyPWdjYyIgXAotCSJDRkxBR1M9IC1EQUlYUlMgLURBSVg0MSAtRFNWUjQgLURTVEVS TUlPWCAtRFRDUFNPQ0tFVCAtRERJUkVOVCBcCi0JLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NV UlNFUyAtRENLX05FV1RFUk0gLURTRUxFQ1QgLURTRUxFQ1RfSCBcCi0JLUROT0dFVFVTRVJTSEVM TCAtTyAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtcyAtWGxpbmtlciAtYmJpZ3RvYyIgIkxJ QlM9LWxjdXJzZXMiCi0KLSMgQWRkIC1iYmlndG9jIGluIGNhc2UgbGQgZmFpbHMgd2l0aCBUT0Mg b3ZlcmZsb3cuCi1haXg0MStrcmI1K2tyYjQ6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBJQk0gQUlYIDQuMS4xIFJTLzYwMDAgb3IgUG93ZXJQQy4uLgotCSQoTUFLRSkgeGVy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQUlYUlMgLURBSVg0 MSAtRFNWUjQgLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtRERJUkVOVCBcCi0JLURDS19BTlNJQyAt RENMU09QTiAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURTRUxFQ1QgLURTRUxFQ1RfSCBcCi0J LURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TIC1ES1JCNSAtREtSQjQgLURLUkI1MjQg XAotCS1EQ0tfRU5DUllQVElPTiAtRENLX0RFUyAkKEs1SU5DKSAkKEs1SU5DKS9rcmI1ICBcCi0J LUROT0dFVFVTRVJTSEVMTCAtcW1heG1lbT0xNjAwMCAtTyAkKEtGTEFHUykiIFwKLQkiTE5LRkxB R1MgPSAtcyIgXAotCSJMSUJTID0gJChLNUxJQikgLWxjdXJzZXMgLWxrcmI0IC1sZGVzNDI1IC1s a3JiNSBcCi0JLWxjb21fZXJyIC1sazVjcnlwdG8gLWxnc3NhcGlfa3JiNSIKLQotI09sZCBuYW1l IGZvciAiYWl4NDEiLgotcnM2YWl4NDFjOgotCSQoTUFLRSkgYWl4NDEgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfQotCi0jSUJNIEFJWCA0LjEsIDQuMS54LCBvciA0LjIgb24gUklTQyBTeXN0ZW0v NjAwMCBvciBQb3dlciBTZXJpZXMsCi0jIHdpdGggWC4yNSBzdXBwb3J0Ci0jR2VuZXJhdGVzIGNv bW1vbiBiaW5hcnkgZm9yIGFsbCBwbGF0Zm9ybXMgaWYgdXNpbmcgeGxjIChJQk0gQyBjb21waWxl cikuCi0jV2hlbiB1c2luZyBnY2MsIGFkZCAtbWNwdT1jb21tb24gdG8gZ2VuZXJhdGUgY29tbW9u IGJpbmFyeS4KLSMgQWRkIC1iYmlndG9jIGluIGNhc2UgbGQgZmFpbHMgd2l0aCBUT0Mgb3ZlcmZs b3cuCi1haXg0MXgyNToKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBB SVggNC4xLjEgUlMvNjAwMCBvciBQb3dlclBDLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURBSVhSUyAtREFJWDQxIC1EU1ZSNCAtRFNU RVJNSU9YIC1EVENQU09DS0VUIC1ERElSRU5UIFwKLQktRENLX0FOU0lDIC1EQ0xTT1BOIC1EQ0tf Q1VSU0VTIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKLQktRElCTVgyNSAtRERF QlVHIC1ETk9HRVRVU0VSU0hFTEwgLXFtYXhtZW09MTYwMDAgLWcgJChLRkxBR1MpIiBcCi0JIkxO S0ZMQUdTID0gLWcgLWJJOi9saWIvcHNlLmV4cCIgIkxJQlM9LWxjdXJzZXMgLWxvZG0gLWxjZmci Ci0JLUBlY2hvICIbXTA7a2VybWl0IGRvbmUHXGMiCi0KLSNBcyBhYm92ZSBidXQgd2l0aG91dCAt ZyBpbiBMTktGTEFHUy4KLSMgQWRkIC1iYmlndG9jIGluIGNhc2UgbGQgZmFpbHMgd2l0aCBUT0Mg b3ZlcmZsb3cuCi1haXg0MXgyNW86Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBJQk0gQUlYIDQuMS4xIFJTLzYwMDAgb3IgUG93ZXJQQy4uLgotCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQUlYUlMgLURBSVg0MSAtRFNW UjQgLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtRERJUkVOVCBcCi0JLURDS19BTlNJQyAtRENMU09Q TiAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURTRUxFQ1QgLURTRUxFQ1RfSCBcCi0JLURJQk1Y MjUgLUROT0RFQlVHIC1ETk9HRVRVU0VSU0hFTEwgLXFtYXhtZW09MTYwMDAgJChLRkxBR1MpIiBc Ci0JIkxOS0ZMQUdTID0gLWJJOi9saWIvcHNlLmV4cCIgIkxJQlM9LWxjdXJzZXMgLWxvZG0gLWxj ZmciCi0JLUBlY2hvICIbXTA7a2VybWl0IGRvbmUHXGMiCi0KLSNBSVggNC4yIC0tIFVzZSB0aGlz IHRhcmdldCBpZiB0aGUgcmVndWxhciAibWFrZSBhaXgiIGRvZXNuJ3Qgd29yay4KLSMgTXVzdCBo YXZlIENLX05FV1RFUk0gb3IgZWNob2luZyBpcyBsb3N0IGFmdGVyIGN1cnNlcy4KLSMgQWRkIC1i YmlndG9jIGluIGNhc2UgbGQgZmFpbHMgd2l0aCBUT0Mgb3ZlcmZsb3cuICBBcyBvZiBDLUtlcm1p dCA4LjAuMjEyLAotIyBhbGwgQUlYIGJ1aWxkcyA0LjIgYW5kIGxhdGVyIGluY2x1ZGUgbGFyZ2Ug ZmlsZSBzdXBwb3J0Lgotb2xkYWl4NDI6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBJQk0gQUlYIDQuMiBvciBoaWdoZXIuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREFJWFJTIC1EQUlYNDEgLURBSVg0MiAtRFNW UjQgLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCBcCi0JLURESVJFTlQgLURDS19BTlNJQyAtRENMU09Q TiAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURGTkZMT0FUIFwKLQktRFNFTEVDVCAtRFNFTEVD VF9IIC1ETk9HRVRVU0VSU0hFTEwgLXFtYXhtZW09MTYwMDAgLU8gXAotCS1EQ0tDUFU9XFxcImB1 bmFtZSAtcGBcXFwiIFwKLQktREhFUkFMRD1cXFwiXCBJQk1cIEFJWFwgYHVuYW1lIC12YC5gdW5h bWUgLXJgXFxcIiBcCi0JLURfTEFSR0VfRklMRVMgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAtcyIg IkxJQlM9LWxjdXJzZXMgLWxtIgotCi0jQUlYIDQuMyAtIFVzZSB0aGlzIHRhcmdldCBpZiB0aGUg cmVndWxhciAibWFrZSBhaXgiIGRvZXNuJ3Qgd29yay4KLSMgTXVzdCBOT1QgaGF2ZSBDS19ORVdU RVJNIG9yIGVsc2UgQy1LZXJtaXQgaGFuZ3MgYWZ0ZXIgY3Vyc2VzLgotIyAtYmJpZ3RvYyBuZWVk ZWQgb24gc29tZSBzeXN0ZW1zIGJ1dCBub3Qgb3RoZXJzIHRvIGF2b2lkIFRPQyBvdmVyZmxvdy4K LSMgIm1hbiBsZCIgc2F5cyAtYmJpZ3RvYyBtYWtlcyBwcm9ncmFtIHJ1biBzbG93ZXIuCi1vbGRh aXg0MzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggNC4zIG9y IGhpZ2hlci4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAot CSJDRkxBR1M9IC1EQUlYUlMgLURBSVg0MSAtREFJWDQzIC1EU1ZSNCAtRFNURVJNSU9YIC1EVENQ U09DS0VUIFwKLQktRERJUkVOVCAtRENLX0FOU0lDIC1EQ0xTT1BOIC1EQ0tfQ1VSU0VTIC1EU0VM RUNUIC1EU0VMRUNUX0ggXAotCS1ERk5GTE9BVCAtRE5PR0VUVVNFUlNIRUxMIC1xbWF4bWVtPTE2 MDAwIC1iYmlndG9jIC1PICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9IC1zIiAiTElCUz0tbGN1 cnNlcyAtbG0iCi0KLSNBSVggNC4zIHdpdGggSUJNIFguMjUuCi1haXg0M3gyNToKLQlAZWNobyAi TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJQk0gQUlYIDQuMyB3aXRoIFguMjUuLi4iCi0J JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURB SVhSUyAtREFJWDQxIC1EQUlYNDMgLURTVlI0IC1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgXAotCS1E RElSRU5UIC1EQ0tfQU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMgLURTRUxFQ1QgLURTRUxFQ1Rf SCBcCi0JLURGTkZMT0FUIC1ETk9HRVRVU0VSU0hFTEwgLURJQk1YMjUgXAotCS1xbWF4bWVtPTE2 MDAwIC1iYmlndG9jIC1PICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9IC1iSTovbGliL3BzZS5l eHAiICJMSUJTPS1sY3Vyc2VzIC1sb2RtIC1sY2ZnIC1sbSIKLQotI0FJWCA0LjMgLS0gTXVzdCBO T1QgaGF2ZSBDS19ORVdURVJNIG9yIGVsc2UgQy1LZXJtaXQgaGFuZ3MgYWZ0ZXIgY3Vyc2VzLgot IyAtbW1pbmltYWwtdG9jIG5lZWRlZCBvbiBzb21lIHN5c3RlbXMgYnV0IG5vdCBvdGhlcnMgdG8g YXZvaWQgVE9DIG92ZXJmbG93LgotIyAibWFuIGxkIiBzYXlzIC1iYmlndG9jIG1ha2VzIHByb2dy YW0gcnVuIHNsb3dlci4KLWFpeDQzZzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIElCTSBBSVggNC4zIGdjYy4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gQ0M9Z2NjIENDMj1nY2MgXAotCSJDRkxBR1M9IC1tbWluaW1hbC10b2MgLWcgLU8g LURBSVhSUyAtREFJWDQxIC1EQUlYNDMgLURTVlI0IFwKLQktRERJUkVOVCAtRENLX0FOU0lDIC1E Q0xTT1BOIC1EQ0tfQ1VSU0VTIC1EU0VMRUNUIC1EU0VMRUNUX0ggXAotCS1EU1RFUk1JT1ggLURU Q1BTT0NLRVQgLURGTkZMT0FUIC1ETk9HRVRVU0VSU0hFTEwgJChLRkxBR1MpIiBcCi0JIkxJQlM9 LWxjdXJzZXMgLWxtIgotCi1haXg0M2djYzoKLQkkKE1BS0UpIGFpeDQzZwotCi0jIE5vbmUgb2Yg dGhlIGZvbGxvd2luZyBhaXg0M2djYyBhdHRlbXB0cyB3b3JrIG9uIGEgZ2NjLW9ubHkgQUlYIDQu My4zIGJveC4KLSMgSXQganVzdCBwbGFpbiBjYW4ndCBmaW5kIHRoZSBtYXRoIHJvdXRpbmVzIChm bW9kLCBwb3csIGV4cCwgc3FydCwgbG9nMTAsLi4uKQotIyBXaGljaCBpcyBvZGQgYmVjYXVzZSBu bSAvdXNyL2xpYi9saWJDLmEgZmluZHMgdGhlbS4uLgotCi0jaW4gY2FzZSBhaXg0M2djYyBjYW4n dCBmaW5kIGl0cyBtYXRoIGxpYnJhcnkuLi4KLWFpeDQzZ2NjeDoKLQlAZWNobyBNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggNC4zIGdjYy4uLgotCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gQ0M9Z2NjIENDMj1nY2MgXAotCSJDRkxBR1M9IC1tbWlu aW1hbC10b2MgLWcgLU8gLURBSVhSUyAtREFJWDQxIC1EQUlYNDMgLURTVlI0IFwKLQktRERJUkVO VCAtRENLX0FOU0lDIC1EQ0xTT1BOIC1EQ0tfQ1VSU0VTIC1EU0VMRUNUIC1EU0VMRUNUX0ggXAot CS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgLURGTkZMT0FUIC1ETk9HRVRVU0VSU0hFTEwgJChLRkxB R1MpIiBcCi0JIkxJQlM9IC1ML3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0 LjMuMS4wLzIuOTUuMiBcCi0JLWxjdXJzZXMgLWJsb2FkbWFwIC1ibm9xdWlldCIKLQotI2luIGNh c2UgYWl4NDNnY2N4IGNhbid0IGZpbmQgaXRzIG1hdGggbGlicmFyeS4uLgotYWl4NDNnY2N5Ogot CUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJWCA0LjMgZ2NjLi4uCi0J JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBc Ci0JIkNGTEFHUz0gLW1taW5pbWFsLXRvYyAtZyAtTyAtREFJWFJTIC1EQUlYNDEgLURBSVg0MyAt RFNWUjQgXAotCS1ERElSRU5UIC1EQ0tfQU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMgLURTRUxF Q1QgLURTRUxFQ1RfSCBcCi0JLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtREZORkxPQVQgLUROT0dF VFVTRVJTSEVMTCAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxjdXJzZXMgLWJsb2FkbWFwIC1ibm9x dWlldCIKLQotI2luIGNhc2UgYWl4NDNnY2N4IGNhbid0IGZpbmQgaXRzIG1hdGggbGlicmFyeS4u LgotYWl4NDNnY2N6OgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJ WCA0LjMgZ2NjLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBD Qz1nY2MgQ0MyPWdjYyBcCi0JIkNGTEFHUz0gLW1taW5pbWFsLXRvYyAtZyAtTyAtREFJWFJTIC1E QUlYNDEgLURBSVg0MyAtRFNWUjQgXAotCS1ERElSRU5UIC1EQ0tfQU5TSUMgLURDTFNPUE4gLURD S19DVVJTRVMgLURTRUxFQ1QgLURTRUxFQ1RfSCBcCi0JLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAt REZORkxPQVQgLUROT0dFVFVTRVJTSEVMTCAkKEtGTEFHUykiIFwKLQkiTElCUz0gLUwuIC1sY3Vy c2VzIC1ibG9hZG1hcCAtYm5vcXVpZXQiCi0KLSNBSVggNC4zIHdpdGggTUlUIEtlcmJlcm9zIDUg YW5kIEtlcmJlcm9zIDQgY29tcGF0aWJpbGl0eSBtb2RlCi0jIE11c3QgTk9UIGhhdmUgQ0tfTkVX VEVSTSBvciBlbHNlIEMtS2VybWl0IGhhbmdzIGFmdGVyIGN1cnNlcy4KLSMgLW1taW5pbWFsLXRv YyBuZWVkZWQgb24gc29tZSBzeXN0ZW1zIGJ1dCBub3Qgb3RoZXJzIHRvIGF2b2lkIFRPQyBvdmVy Zmxvdy4KLSMgIm1hbiBsZCIgc2F5cyAtYmJpZ3RvYyBtYWtlcyBwcm9ncmFtIHJ1biBzbG93ZXIu Ci1haXg0M2djYytrcmI1K2tyYjQ6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBJQk0gQUlYIDQuMyBvciBoaWdoZXIgdy9LZXJiZXJvcy4uLgotCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gQ0M9Z2NjIENDMj1nY2MgXAotCSJDRkxBR1M9IC1tbWlu aW1hbC10b2MgLWcgLU8gLURBSVhSUyAtREFJWDQxIC1EQUlYNDMgLURTVlI0IFwKLQktRERJUkVO VCAtRENLX0FOU0lDIC1EQ0xTT1BOIC1EQ0tfQ1VSU0VTIC1EU0VMRUNUIC1EU0VMRUNUX0ggXAot CS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgLURGTkZMT0FUIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1E Q0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAtREtSQjUgLURLUkI0IC1ES1JCNTI0IFwK LQktRENLX0VOQ1JZUFRJT04gLURDS19ERVMgLWZ1bnNpZ25lZC1jaGFyICQoSzVJTkMpICQoSzVJ TkMpL2tyYjUgXAotCSQoS0ZMQUdTKSIgXAotCSJMSUJTPSQoSzVMSUIpIC1sY3Vyc2VzIC1sbSAt bGtyYjQgLWxkZXM0MjUgLWxrcmI1IFwKLQktbGNvbV9lcnIgLWxrNWNyeXB0byAtbGNyeXB0IC1s Z3NzYXBpX2tyYjUiCi0KLSNBSVggNC4zIHdpdGggTUlUIEtlcmJlcm9zIDUsIEtlcmJlcm9zIDQg Y29tcGF0aWJpbGl0eSBtb2RlIGFuZCBPcGVuU1NMCi0jIE11c3QgTk9UIGhhdmUgQ0tfTkVXVEVS TSBvciBlbHNlIEMtS2VybWl0IGhhbmdzIGFmdGVyIGN1cnNlcy4KLSMgLW1taW5pbWFsLXRvYyBu ZWVkZWQgb24gc29tZSBzeXN0ZW1zIGJ1dCBub3Qgb3RoZXJzIHRvIGF2b2lkIFRPQyBvdmVyZmxv dy4KLSMgIm1hbiBsZCIgc2F5cyAtYmJpZ3RvYyBtYWtlcyBwcm9ncmFtIHJ1biBzbG93ZXIuCi1h aXg0M2djYytrcmI1K2tyYjQrb3BlbnNzbDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIElCTSBBSVggNC4zIG9yIGhpZ2hlciB3L0tlcmJlcm9zLi4uCi0JJChNQUtFKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCi0JIkNGTEFHUz0g LW1taW5pbWFsLXRvYyAtZyAtTyAtREFJWFJTIC1EQUlYNDEgLURBSVg0MyAtRFNWUjQgXAotCS1E RElSRU5UIC1EQ0tfQU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMgLURTRUxFQ1QgLURTRUxFQ1Rf SCBcCi0JLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtREZORkxPQVQgLUROT0dFVFVTRVJTSEVMTCBc Ci0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TIC1ES1JCNSAtREtSQjQgLURLUkI1 MjQgXAotCS1EQ0tfRU5DUllQVElPTiAtRENLX0RFUyAtRENLX0NBU1QgLURMSUJERVMgLURDS19T U0wgXAotCS1mdW5zaWduZWQtY2hhciAkKEs1SU5DKSAkKEs1SU5DKS9rcmI1ICQoU1NMSU5DKSAk KEtGTEFHUykiIFwKLQkiTElCUz0kKEs1TElCKSAkKFNTTExJQikgLWxzc2wgLWxjcnlwdG8gXAot CS1sY3Vyc2VzIC1sbSAtbGtyYjQgLWxkZXM0MjUgLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRv IC1sY3J5cHQgXAotCS1sZ3NzYXBpX2tyYjUiCi0KLWFpeDQzZ2NjK29wZW5zc2w6Ci0JQGVjaG8g TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJQk0gQUlYIDQuMyBvciBoaWdoZXIgdy9PcGVu U1NMLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2Mg Q0MyPWdjYyBcCi0JIkNGTEFHUz0gLW1taW5pbWFsLXRvYyAtZyAtTyAtREFJWFJTIC1EQUlYNDEg LURBSVg0MyAtRFNWUjQgXAotCS1ERElSRU5UIC1EQ0tfQU5TSUMgLURDTFNPUE4gLURDS19DVVJT RVMgLURTRUxFQ1QgLURTRUxFQ1RfSCBcCi0JLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtREZORkxP QVQgLUROT0dFVFVTRVJTSEVMTCBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAtZnVu c2lnbmVkLWNoYXIgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAotCSJMSUJTPSQoU1NMTElCKSAtbHNz bCAtbGNyeXB0byAtbGN1cnNlcyAtbG0gLWxjcnlwdCIKLQotYWl4NDRnY2M6Ci0JJChNQUtFKSBh aXg0M2cgIktGTEFHUz0tREFJWDQ0ICQoS0ZMQUdTKSIgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0KLQotYWl4NDVnY2M6Ci0JJChNQUtFKSBhaXg0M2cgIktGTEFHUz0tREFJWDQ1ICQoS0ZM QUdTKSIgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotYWl4NTBnY2M6Ci0JJChNQUtF KSBhaXg0M2cgIktGTEFHUz0tREFJWDUwICQoS0ZMQUdTKSIgXAotCUtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0KLQotYWl4NTFnY2M6Ci0JJChNQUtFKSBhaXg0M2cgIktGTEFHUz0tREFJWDUxICQo S0ZMQUdTKSIgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotYWl4NTJnY2M6Ci0JJChN QUtFKSBhaXg0M2cgIktGTEFHUz0tREFJWDUyICQoS0ZMQUdTKSIgXAotCUtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0KLQotYWl4NTNnY2M6Ci0JJChNQUtFKSBhaXg0M2cgIktGTEFHUz0tREFJWDUz ICQoS0ZMQUdTKSIgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotI0J1bGwgRFBYLzIg d2l0aCBCT1MvWCwgbGlrZSBBSVgvUlM2MDAwCi1idWxsZHB4MjoKLQlAZWNobyBNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIEJ1bGwgRFBYLzIgd2l0aCBCT1MvWC4uLgotCSQoTUFLRSkgd2Vy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EU1ZSMyAtRERJUkVO VCAtRENLX0FOU0lDIC1EQ0tUWVBfSD08c3lzL3R5cGVzLmg+IFwKLQktRENLX1BPTEwgLUROT0dF VFVTRVJTSEVMTCAtRENMU09QTiAtRE5PTEVBUk4gLU8gJChLRkxBR1MpIiBcCi0JIkxOS0ZMQUdT ID0gLXMiCi0KLSNTdW4gVU5JWCAzLjUgd2l0aCBnY2MgMi4zLjMuCi1zdW5vczNnY2M6Ci0JQGVj aG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW4gVU5JWCAzLjUgYW5kIGdjYy4uLgot CSQoTUFLRSkgeGVybWl0IENDPWdjYyBDQzI9Z2NjIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAotCUNGTEFHUz0iLWcgLU8gLURCU0Q0IC1EVENQU09DS0VUICQoS0ZMQUdTKSIKLQotI1N1bk9T IHZlcnNpb24gNC4wLCBCU0QgZW52aXJvbm1lbnQsIGhhcyBzYXZlZCBvcmlnaW5hbCBldWlkIGZl YXR1cmUuCi0jIEFkZCAiQ0M9L3Vzci91Y2IvY2MgQ0MyPS91c3IvdWNiL2NjIiBpZiBuZWNlc3Nh cnkuCi0jIE5vdGU6IEluY2x1ZGluZyBVbmljb2RlIGNyYXNoZXMgdGhlIGFzc2VtYmxlciBpbiBj a2N1bmkuYy4KLXN1bm9zNDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1 bk9TIDQuMCwgQlNEIGVudmlyb25tZW50Li4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLU8gLURTVU5PUzQgLURGTkZMT0FUIC1ETk9VTklD T0RFICQoS0ZMQUdTKSIgXAotCSJMSUJTPS1sbSIKLQotI0FzIGFib3ZlLCBidXQgd2l0aCBTdW5M aW5rIFguMjUgc3VwcG9ydAotc3Vub3M0eDI1OgotCUBlY2hvIFN1bkxpbmsgWC4yNSBzdXBwb3J0 Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzdW5vczQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCi0JIktGTEFHUz0kKEtGTEFHUykgLURGTkZMT0FUIC1EU1VOWDI1IiBcCi0JIkxJQlM9LWxt IgotCi0jU1VOIE9TIHZlcnNpb24gNC4xIC0gNC4xLjMsIEJTRCBlbnZpcm9ubWVudCwgaGFzIHNh dmVkIG9yaWdpbmFsIGV1aWQgZmVhdHVyZS4KLSNVc2VzIEhvbmV5IERhbkJlciBVVUNQLiAgUmVx dWlyZXMgcHJlc2VuY2Ugb2YgL3Vzci9zcG9vbC9sb2NrcyBkaXJlY3RvcnkuCi0jIC92YXIvc3Bv b2wvIHNob3VsZCBiZSBhIHN5bWJvbGljIGxpbmsgdG8gIC91c3Ivc3Bvb2wvLgotIyAuLi4gb3Ig J21ha2UgeGVybWl0ICJDQz0gL3Vzci91Y2IvY2MgIiBcJwotIyBOb3RlOiAieGVybWl0IiBtZWFu cyB1c2UgdGhlIHNlbGVjdCgpIHZlcnNpb24gb2YgdGhlIENPTk5FQ1QgbW9kdWxlLgotIyBOb3Rl IGZvciBDLUtlcm1pdCA5LjA6IFJlcG9ydGVkbHkgJ3lvdSBuZWVkIHRvIG1vZGlmeSB0aGUgc3lz L2lvY3RsLmgKLSMgaW5jbHVkZSBmaWxlLCBpLmUuIGNvbW1lbnQgb3V0IHRoZSAic3RydWN0IHdp bnNpemUiIGFuZCAic3RydWN0Ci0jIHR0eXNpemUiLiBPdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBh IGNvbmZsaWN0IHdpdGggc3lzL3R0eWNvbS5oIChpbmNsdWRlZCBieQotIyB0ZXJtaW9zLmgpIHdo aWNoIGFsc28gZGVjbGFyZXMgdGhlc2Ugc3RydWN0cy4gQnV0IHlvdSBuZWVkIGJvdGggaW5jbHVk ZXMuJwotc3Vub3M0MToKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9T IDQuMSAvIEJTRC4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAotCSJDRkxBR1M9IC1PIC1EU1VOT1M0MSAtREhEQlVVQ1AgLUROT1VOSUNPREUgJChLRkxBR1Mp IiBcCi0JIkxJQlM9ICQoTElCUykgLWxyZXNvbHYgLWxtIgotCi0jQXMgYWJvdmUsIGJ1dCBjb21w aWxlZCB3aXRoIGdjYy4gIEdpdmVzIDI0LTMySyBzaXplIHJlZHVjdGlvbgotI3dpdGggZ2NjIDIu MSBvciAyLjIuMi4gIENBVVRJT046IG1ha2Ugc3VyZSAiZml4aW5jbHVkZXMiIGhhcyBiZWVuIHJ1 biBvbgotI3RoZSBpbmNsdWRlIGZpbGVzLCBzbyBnY2MncyBhcmUgaW4gc3luYyB3aXRoIHRoZSBy ZWd1bGFyIFN1biBvbmVzLgotI1RoaXMgaW5jbHVkZXMgdGhlIGN1cnNlcyBsaWJyYXJ5IGZvciBm dWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheS4KLSNOREdQV05BTSBuZWVkZWQgZm9yIEdD QyAyLjUuNiwgbm90IG5lZWRlZCBmb3IgMi40LjAsIGJ1dCBpdCdzIHVuY2VydGFpbgotI3doZXRo ZXIgaXQgd2lsbCBkbyBhbnkgaGFybSBmb3IgMi40LjAgY29tcGlsYXRpb24gLS0gaWYgc28sIHJl bW92ZSBpdC4KLXN1bm9zNDFnY2M6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBTdW5PUyA0LjEgd2l0aCBnY2MgYW5kIGN1cnNlcy4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDPSBnY2MiICJDQzI9IGdjYyIgXAotCSJDRkxBR1M9IC1P IC1EU1VOT1M0MSAtREhEQlVVQ1AgLUROREdQV05BTSAtRENLX0NVUlNFUyAtREZORkxPQVQgXAot CS1mdW5zaWduZWQtY2hhciAkKEtGTEFHUykiICJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAgLWxy ZXNvbHYgLWxtIgotCi0jIEFzIGFib3ZlLCBidXQgd2l0aG91dCAtZnVuc2lnbmVkLWNoYXIgc28g SSBjYW4gc2VlIHRoZSB3YXJuaW5ncyB0aGF0Ci0jIGV2ZXJ5Ym9keSBlbHNlIHdpbGwgZ2V0IHdo ZW4gdGhleSB1c2UgQU5TSSBjb21waWxlcnMgdGhhdCBkb24ndCBoYXZlIHRoaXMKLSMgb3B0aW9u IChnc2MgPSBnY2Mgc2lnbmVkIGNoYXIpLgotc3Vub3M0MWdzYzoKLQlAZWNobyBNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQuMSB3aXRoIGdjYyBhbmQgY3Vyc2VzLi4uCi0JJChN QUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9IGdjYyIgIkNDMj0gZ2Nj IiBcCi0JIkNGTEFHUz0gLU8gLURTVU5PUzQxIC1ESERCVVVDUCAtRE5ER1BXTkFNIC1EQ0tfQ1VS U0VTIC1ERk5GTE9BVCBcCi0JJChLRkxBR1MpIiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIC1s cmVzb2x2IC1sbSIKLQotI0FzIGFib3ZlIGJ1dCB3aXRoIGNrdWNvbi5jIHJhdGhlciB0aGFuIGNr dWNucy5jIChmb3IgdGVzdGluZyBvbmx5KQotc3Vub3M0MWdjY2Zvcms6Ci0JQGVjaG8gTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEgd2l0aCBnY2MgYW5kIGN1cnNlcy4uLgot CSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDPSBnY2MiICJDQzI9 IGdjYyIgXAotCSJDRkxBR1M9IC1PIC1EU1VOT1M0MSAtREhEQlVVQ1AgLUROREdQV05BTSAtRENL X0NVUlNFUyAtREZORkxPQVQgXAotCS1ETk9MRUFSTiAtZnVuc2lnbmVkLWNoYXIgJChLRkxBR1Mp IiBcCi0JIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAtbHJlc29sdiAtbG0iCi0KLSNhcyBhYm92 ZSBidXQgY29uZmlndXJlZCBmb3IgS2VyYmVyb3MgSVYKLXN1bm9zNDFnY2Mra3JiNDoKLQlAZWNo byBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQuMSwgZ2NjLCBjdXJzZXMsIGty YjQuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQz0gZ2Nj IiAiQ0MyPSBnY2MiIFwKLQkiQ0ZMQUdTPSAtTyAtRFNVTk9TNDEgLURIREJVVUNQIC1ETkRHUFdO QU0gLURDS19DVVJTRVMgLURGTkZMT0FUIFwKLQktRFRDUFNPQ0tFVCAtRENLX0FVVEhFTlRJQ0FU SU9OIC1EQ0tfS0VSQkVST1MgIC1ES1JCNCBcCi0JLURDS19FTkNSWVBUSU9OIC1EQ0tfREVTIC1E Q0tfQ0FTVCAtREJJR0JVRk9LIC1mdW5zaWduZWQtY2hhciBcCi0JJChLNElOQykgJChLRkxBR1Mp IiBcCi0JIkxJQlM9ICQoSzRMSUIpIC1sY3Vyc2VzIC1sdGVybWNhcCAtbHJlc29sdiAtbG0gLWxr cmIgLWxkZXMiCi0KLSNhcyBhYm92ZSBidXQgY29uZmlndXJlZCBmb3IgU1NML1RMUwotc3Vub3M0 MWdjYytvcGVuc3NsOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1Mg NC4xLCBnY2MsIGN1cnNlcywgc3NsLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSAiQ0M9IGdjYyIgIkNDMj0gZ2NjIiBcCi0JIkNGTEFHUz0gLU8gLURTVU5PUzQx IC1ESERCVVVDUCAtRE5ER1BXTkFNIC1EQ0tfQ1VSU0VTIC1ERk5GTE9BVCBcCi0JLURDS19BVVRI RU5USUNBVElPTiAtZnVuc2lnbmVkLWNoYXIgXAotCS1EQ0tfU1NMIC1EVENQU09DS0VUIC1EQklH QlVGT0sgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAkKFNTTExJQikgLWxjdXJzZXMg LWx0ZXJtY2FwIC1scmVzb2x2IC1sbSAtbHNzbCAtbGNyeXB0byIKLQotI2FzIGFib3ZlIGJ1dCBj b25maWd1cmVkIGZvciBLZXJiZXJvcyBJViBhbmQgU1NML1RMUwotc3Vub3M0MWdjYytrcmI0K29w ZW5zc2w6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEsIGdj YywgY3Vyc2VzLCBrcmI0Li4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSAiQ0M9IGdjYyIgIkNDMj0gZ2NjIiBcCi0JIkNGTEFHUz0gLU8gLURTVU5PUzQxIC1ESERC VVVDUCAtRE5ER1BXTkFNIC1EQ0tfQ1VSU0VTIC1ERk5GTE9BVCBcCi0JLURDS19BVVRIRU5USUNB VElPTiAtRENLX0tFUkJFUk9TIC1ES1JCNCAtRENLX0VOQ1JZUFRJT04gLURDS19ERVMgXAotCS1E Q0tfQ0FTVCAtRENLX1NTTCAtRExJQkRFUyAtRFRDUFNPQ0tFVCAtREJJR0JVRk9LIC1mdW5zaWdu ZWQtY2hhciBcCi0JJChLNElOQykgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAkKEs0 TElCKSAkKFNTTExJQikgXAotCS1sY3Vyc2VzIC1sdGVybWNhcCAtbHJlc29sdiAtbG0gLWxrcmIg LWxzc2wgLWxjcnlwdG8iCi0KLSNhcyBhYm92ZSBidXQgY29uZmlndXJlZCBmb3IgS2VyYmVyb3Mg SVYgYW5kIFpMSUIgZW5hYmxlZCBTU0wvVExTCi1zdW5vczQxZ2NjK2tyYjQrb3BlbnNzbCt6bGli OgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC4xLCBnY2MsIGN1 cnNlcywga3JiNC4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g IkNDPSBnY2MiICJDQzI9IGdjYyIgXAotCSJDRkxBR1M9IC1PIC1EU1VOT1M0MSAtREhEQlVVQ1Ag LUROREdQV05BTSAtRENLX0NVUlNFUyAtREZORkxPQVQgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04g LURDS19LRVJCRVJPUyAtREtSQjQgLURDS19FTkNSWVBUSU9OIC1EQ0tfREVTIFwKLQktRENLX0NB U1QgLURDS19TU0wgLURMSUJERVMgLURUQ1BTT0NLRVQgLURCSUdCVUZPSyAtZnVuc2lnbmVkLWNo YXIgXAotCS1EWkxJQiAkKEs0SU5DKSAkKFNTTElOQykgXAotCSQoS0ZMQUdTKSIgXAotCSJMSUJT PSAkKEs0TElCKSAkKFNTTExJQikgXAotCS1sY3Vyc2VzIC1sdGVybWNhcCAtbHJlc29sdiAtbG0g LWxrcmIgLWxzc2wgLWxjcnlwdG8gLWx6IgotCi0jYXMgYWJvdmUgYnV0IGNvbmZpZ3VyZWQgZm9y IEtlcmJlcm9zIElWIGFuZCBTUlAgYW5kIFpMSUIgZW5hYmxlZCBTU0wvVExTCi1zdW5vczQxZ2Nj K2tyYjQrc3JwK29wZW5zc2wremxpYjoKLQlAZWNobyAiQy1LZXJtaXQgJChDS1ZFUikgU3VuT1Mg NC4xOiBnY2MsY3Vyc2VzLGtyYjQsc3JwLHNzbCx6bGliLi4uIgotCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDPSBnY2MiICJDQzI9IGdjYyIgXAotCSJDRkxBR1M9 IC1PIC1EU1VOT1M0MSAtREhEQlVVQ1AgLUROREdQV05BTSAtRENLX0NVUlNFUyAtREZORkxPQVQg XAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAtREtSQjQgLURDS19FTkNSWVBU SU9OIC1EQ0tfREVTIFwKLQktRENLX0NBU1QgLURDS19TU0wgLURMSUJERVMgLURUQ1BTT0NLRVQg LURCSUdCVUZPSyAtZnVuc2lnbmVkLWNoYXIgXAotCS1EWkxJQiAtRENLX1NSUCAkKEs0SU5DKSAk KFNSUElOQykgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAkKEs0TElCKSAkKFNSUExJ QikgJChTU0xMSUIpIFwKLQktbGN1cnNlcyAtbHRlcm1jYXAgLWxyZXNvbHYgLWxtIC1sa3JiIC1s a3J5cHRvIFwKLQktbHNycCAtbHNzbCAtbGNyeXB0byAtbHoiCi0KLSNhcyBhYm92ZSBidXQgY29u ZmlndXJlZCBmb3IgS2VyYmVyb3MgSVYgYW5kIFNSUCBhbmQgWkxJQiBlbmFibGVkIFNTTC9UTFMK LXN1bm9zNDFnY2Mrc3JwK29wZW5zc2wremxpYjoKLQlAZWNobyAiQy1LZXJtaXQgJChDS1ZFUikg U3VuT1MgNC4xOiBnY2MsY3Vyc2VzLHNycCxzc2wsemxpYi4uLiIKLQkkKE1BS0UpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQz0gZ2NjIiAiQ0MyPSBnY2MiIFwKLQkiQ0ZMQUdT PSAtTyAtRFNVTk9TNDEgLURIREJVVUNQIC1ETkRHUFdOQU0gLURDS19DVVJTRVMgLURGTkZMT0FU IFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfRU5DUllQVElPTiAtRENLX0RFUyBcCi0JLURD S19DQVNUIC1EQ0tfU1NMIC1ETElCREVTIC1EVENQU09DS0VUIC1EQklHQlVGT0sgLWZ1bnNpZ25l ZC1jaGFyIFwKLQktRFpMSUIgLURDS19TUlAgJChTUlBJTkMpICQoU1NMSU5DKSBcCi0JJChLRkxB R1MpIiBcCi0JIkxJQlM9ICQoU1JQTElCKSAkKFNTTExJQikgXAotCS1sY3Vyc2VzIC1sdGVybWNh cCAtbHJlc29sdiAtbG0gLWxrcnlwdG8gLWxzcnAgLWxzc2wgLWxjcnlwdG8gLWx6ICIKLQotI1NV Tk9TIDQuMSBhcyBzdW5vczQxIGFib3ZlLCBidXQgYWxzbyB3aXRoIGN1cnNlcyBzdXBwb3J0Ci1z dW5vczQxYzoKLQlAZWNobyBDdXJzZXMgc3VwcG9ydAotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIg c3Vub3M0MSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPSQoS0ZMQUdTKSAt RENLX0NVUlNFUyAtREZORkxPQVQgIiBcCi0JIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCIKLQot I0FzIFN1bk9TIDQuMS54LCBnY2MsIGNvbmZpZ3VyZWQgYXMgSW50ZXJuZXQgS2VybWl0IFNlcnZl ci4KLSMgLiBOT0xPQ0FMIHJlbW92ZXMgY2FwYWJpbGl0eSB0byBtYWtlIGNvbm5lY3Rpb25zCi0j IC4gVE5DT0RFIGFsbG93cyBzZXJ2ZXItc2lkZSBUZWxuZXQgbmVnb3RpYXRpb24uCi0jIC4gdXNl ZCB0byBpbmNsdWRlIC1scHdlbnQsIHdoeT8KLSMgLiB1c2VkIHRvIGluY2x1ZGUgLUwvdXNyL2xv Y2FsL2xpYiAtbG0sIHdoeT8KLXN1bm9zNDFnaWtzOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgU3VuT1MgNC4xIHdpdGggZ2NjIGZvciBJS1MuLi4KLQkkKE1BS0UpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQz0gZ2NjIiAiQ0MyPSBnY2MiIFwKLQkiQ0ZM QUdTPSAtTyAtRFNVTk9TNDEgLUROREdQV05BTSAtREZORkxPQVQgXAotCS1ETk9MT0NBTCAtRFRD UFNPQ0tFVCAtRFROQ09ERSAtRE5PUFVTSCAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxtIC1scmVz b2x2IgotCi0jU1VOT1MgNC4xIHdpdGggU3VuTGluayBYLjI1IHN1cHBvcnQKLXN1bm9zNDF4MjU6 Ci0JQGVjaG8gU3VuTGluayBYLjI1IHN1cHBvcnQKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHdl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtTyAtRFNVTk9TNDEg LURIREJVVUNQIC1ETk9VTklDT0RFIC1ERk5GTE9BVCAtRFNVTlgyNSBcCi0JLUROT0xFQVJOICQo S0ZMQUdTKSIgIkxJQlM9ICQoTElCUykgLWxyZXNvbHYgLWxtIgotCi0jU1VOT1MgNC4xIHdpdGgg U3VuTGluayBYLjI1IHN1cHBvcnQgYW5kIGN1cnNlcwotc3Vub3M0MXgyNWM6Ci0JQGVjaG8gU3Vu TGluayBYLjI1IHN1cHBvcnQgKyBjdXJzZXMKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHdlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtTyAtRFNVTk9TNDEgLURI REJVVUNQIC1ETk9VTklDT0RFIC1ERk5GTE9BVCAtRFNVTlgyNSBcCi0JLURDS19DVVJTRVMgLURO T0xFQVJOICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAkKExJQlMpIC1sY3Vyc2VzIC1sdGVybWNhcCAt bHJlc29sdiAtbG0iCi0KLSNTVU4gd2l0aCBTb2xhcmlzIDIuMCA9IFN1bk9TIDUuMC4KLSNNb3N0 bHkgdGhlIHNhbWUgYXMgU3lzdGVtIFYgUjQuICBEb24ndCB1c2UgdGhpcyB3aXRoIGxhdGVyIFNv bGFyaXMgdmVyc2lvbnMuCi1zb2xhcmlzMjA6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgU3VuIHdpdGggU29sYXJpcyAyLjAgYW5kIGN1cnNlcy4uLicKLQkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURTVlI0IC1E U09MQVJJUyAtRERJUkVOVCAtREhEQlVVQ1AgLURTVEVSTUlPWCBcCi0JLURUQ1BTT0NLRVQgLURD S19DVVJTRVMgLURGTkZMT0FUIC1EQ0tfUE9MTCAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxzb2Nr ZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtbGliIC1sbSIgIkxOS0ZMQUdTID0gLXMiCi0KLSNTVU4g d2l0aCBTb2xhcmlzIDIuMC4KLSNBcyBhYm92ZSwgYnV0IGJ1aWx0IHdpdGggdGhlIGdjYyBjb21w aWxlciBmcm9tIHRoZSBDeWdudXMgQ0QtUk9NLgotc29sYXJpczIwZzoKLQlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW4gU29sYXJpcyAyLjAsIGdjYywgYW5kIGN1cnNlcy4u JwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1Mg PSAtTyAtRFNWUjQgLURTT0xBUklTIC1ERElSRU5UIC1ESERCVVVDUCAtRFNURVJNSU9YIFwKLQkt RFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRENLX1BPTEwgLURGTkZMT0FUICQoS0ZMQUdTKSIgXAot CSJMSUJTPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1saWIgLWxtIiAiTE5LRkxBR1Mg PSAtcyIgXAotCUNDPS9vcHQvY3lnbnVzLXNvbDItMS4xL2Jpbi9nY2MgQ0MyPS9vcHQvY3lnbnVz LXNvbDItMS4xL2Jpbi9nY2MKLQotI1N1bk9TIDUuMSA9IFNvbGFyaXMgMi4xLgotI05PVEU6IEEg QyBjb21waWxlciBpcyBubyBsb25nZXIgYnVuZGxlZCB3aXRoIFN1bk9TIDUuMSwgc28gdG8gY29t cGlsZSBDCi0jcHJvZ3JhbXMsIHlvdSBtaWdodCBoYXZlIHRvIGNoYW5nZSB5b3VyIFBBVEggdG8g aW5jbHVkZSB0aGUgZGlyZWN0b3J5Ci0jL3Vzci9jY3MvYmluIEFGVEVSIHRoZSBkaXJlY3Rvcnkg Y29udGFpbmluZyB0aGUgY29tcGlsZXIuICBTdW5QUk8gQyBpcwotI2luc3RhbGxlZCBieSBkZWZh dWx0IGluIC9vcHQvU1VOV3Nwcm8vYmluLiAgU28gYSBzYW1wbGUgUEFUSCBtaWdodCBiZToKLSMK LSMgL3Vzci9sb2NhbC9iaW46L3Vzci9iaW46L29wdC9TVU5Xc3Byby9iaW46L3Vzci9jY3MvYmlu OlwKLSMgL3Vzci91Y2I6L3Vzci9zYmluOi9zYmluOi4KLSMKLSMgb3I6Ci0jCi0jIC91c3Ivb3Bl bndpbi9iaW46L2V4cG9ydC9ob21lL1NVTldzcHJvL2JpbjovdXNyL2Njcy9iaW46L3Vzci9zYmlu Oi91c3IvYmluLgotIwotI05PVEUgMjogQ29tcGlsYXRpb24gd2l0aCB0aGUgQXBvZ2VlIEMgY29t cGlsZXIgKGFwY2MpIG1pZ2h0IG5vdCB3b3JrLAotI2JlY2F1c2UgaXQgcmVmdXNlcyB0byBhbGxv dyAiLVVzdW4iLiAgUmVwb3J0ZWRseSwgbmV3ZXIgcmVsZWFzZXMgb2YgYXBjYwotIyhzdWNoIGFz IDEuMi4xNykgd29yayBPSywgdXNlOiAibWFrZSAtZSBzdW5vczUxIENDPWFwY2MgQ0MyPWFwY2Mi Lgotc29sYXJpczIxOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9T IDUueC4uLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IkNGTEFHUyA9IC1PIC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVMgLURESVJFTlQgLURIREJVVUNQIC1E Rk5GTE9BVCBcCi0JLURTRUxFQ1QgLUROT0RFQlVHIC1EU1RFUk1JT1ggJChLRkxBR1MpIiAiTElC UyA9IC1sbSIgIkxOS0ZMQUdTID0gLXMiCi0KLSNTb2xhcmlzIDIuMCAtIDIuNCwgU3VuUHJvIGNv bXBpbGVyLCBpbmNsdWRlcyBjdXJzZXMgYW5kIFRDUC9JUC4KLSNXaGVuIHVzaW5nIFNVTldzcHJv IENDIDIuMC4xIHVuZGVyIFNvbGFyaXMgMi4zLCBiZSBzdXJlIGFsbCBjYyBwYXRjaGVzCi0jYXJl IGFwcGxpZWQsIG90aGVyd2lzZSBjb3JydXB0IG9yIHRydW5jYXRlZCBvYmplY3QgZmlsZXMgY2Fu IHJlc3VsdC4KLSNUbyBidWlsZCwgc2V0IHlvdXIgUEFUSCBhcyBmb2xsb3dzOgotIyAgL3Vzci9s b2NhbC9iaW46L3Vzci9iaW46L29wdC9TVU5Xc3Byby9iaW46L3Vzci9jY3MvYmluOlwKLSMgIC91 c3IvdWNiOi91c3Ivc2Jpbjovc2JpbjouCi0jIG9yIChkZXBlbmRpbmcgb24gd2hlcmUgdGhlIGNv bXBpbGVyIGhhcyBiZWVuIGluc3RhbGxlZCk6Ci0jICAvdXNyL29wZW53aW4vYmluOi9leHBvcnQv aG9tZS9TVU5Xc3Byby9iaW46L3Vzci9jY3MvYmluOi91c3Ivc2JpbjovdXNyL2Jpbi4KLSNGb3Ig YWRkaXRpb25hbCBvcHRpbWl6YXRpb24gdHJ5IHVzaW5nICItZmFzdCAteE80IC14ZGVwZW5kIi4K LXNvbGFyaXMyeDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlz IDIueCB3aXRoIFN1blBybyBjYy4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLVVzdW4gLWkgLURTVlI0IC1ERElSRU5UIC1EU09M QVJJUyAtREhEQlVVQ1AgLURGTkZMT0FUIFwKLQktRFNFTEVDVCAtRENLX0NVUlNFUyAtRENLX05F V1RFUk0gLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAt cyIgIkxJQlM9IC1sdGVybWxpYiAtbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYiCi0KLSNhcyBh Ym92ZSBidXQgY29uZmlndXJlZCBmb3IgS2VyYmVyb3MgSVYKLXNvbGFyaXMyeCtrcmI0OgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54LCBTdW5Qcm8gY2Ms IGtyYjQuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IkNGTEFHUyA9IC1PIC1Vc3VuIC1pIC1EU1ZSNCAtRERJUkVOVCAtRFNPTEFSSVMgLURIREJVVUNQ IC1ERk5GTE9BVCBcCi0JLURTRUxFQ1QgLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1EU1RFUk1J T1ggLURUQ1BTT0NLRVQgIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgIC1E S1JCNCBcCi0JLURDS19FTkNSWVBUSU9OIC1EQ0tfREVTIC1EQ0tfQ0FTVCAkKEs0SU5DKSAkKEtG TEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtcyIgXAotCSJMSUJTPSAkKEs0TElCKSAtbHRlcm1saWIg LWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IC1sa3JiIC1sZGVzIgotCi0jQy1LZXJtaXQgZm9y IFNvbGFyaXMgMi4wLTIuNCBjb21waWxlZCB3aXRoIGdjYywgaW5jbHVkZXMgY3Vyc2VzIGFuZCBU Q1AvSVAuCi0jQ2hhbmdlIC1PMiB0byAtTyBpZiAtTzIgZ2l2ZXMgdHJvdWJsZS4KLSNSZW1vdmUg LVVzdW4gaWYgaXQgY2F1c2VzIHRyb3VibGUuCi0jWW91ciBQQVRIIHNob3VsZCBzdGFydCB3aXRo IHNvbWV0aGluZyBsaWtlOgotIyAgL3Vzci9sb2NhbC9nbnUvYmluOi91c3IvY2NzL2JpbjoKLSNQ cm9kdWNlcyBhIGh1Z2UgZXhlY3V0YWJsZSAtLSBzdHJpcCB3aXRoIC91c3IvY2NzL2Jpbi9zdHJp cCAobm90IEdudSBzdHJpcCkuCi0jQWxzbyBkb24ndCBhZGQgIkxOS0ZMQUdTID0gLXMiIC0tIHN0 cmlwIG1hbnVhbGx5IGluc3RlYWQuCi0jQWxzbyBub3RlOiB0aGlzIGNhbiBOT1QgYmUgbGlua2Vk IHN0YXRpY2FsbHkgLSBTdW4gbWFrZXMgaXQgaW1wb3NzaWJsZS4KLSNBbmQgZm9yIFNvbGFyaXMg Mi40LCB5b3UgbWlnaHQgaGF2ZSB0byByZXBsYWNlOgotIyAvdXNyL2xvY2FsL2xpYi9nY2MtbGli L2k0ODYtc3VuLXNvbGFyaXMyLzIuNC41L2luY2x1ZGUvc3lzL3N0YXQuaAotI3dpdGggL3Vzci9p bmNsdWRlL3N5cy9zdGF0LmguCi1zb2xhcmlzMnhnOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIFNvbGFyaXMgMi54IHdpdGggR05VIGNjLi4uJwotCUBlY2hvICdQbGVhc2Ug cmVhZCB0aGUgY29tbWVudHMgdGhhdCBhY2NvbXBhbnkgdGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicK LQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2Nj IFwKLQkiQ0ZMQUdTID0gLWcgLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRFNURVJNSU9YIC1E U0VMRUNUIC1ERk5GTE9BVCBcCi0JLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1E SERCVVVDUCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWx0ZXJtbGliIC1sc29j a2V0IC1sbnNsIC1sbSAtbHJlc29sdiAkKExJQlMpIgotCi0jZGl0dG8gYnV0IG5vIGN1cnNlcy4K LXNvbGFyaXMyeGduYzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xh cmlzIDIueCB3aXRoIEdOVSBjYy4uLicKLQlAZWNobyAnUGxlYXNlIHJlYWQgdGhlIGNvbW1lbnRz IHRoYXQgYWNjb21wYW55IHRoZSBzb2xhcmlzMnhnIHRhcmdldC4nCi0JJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCi0JIkNGTEFHUyA9IC1n IC1PIC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVMgLURTVEVSTUlPWCAtRFNFTEVDVCAtREZORkxPQVQg XAotCS1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykiIFwKLQkiTElCUz0g LWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2ICQoTElCUykiCi0KLSNhbmQgd2l0aCBLZXJiZXJv cyBJVgotc29sYXJpczJ4ZytrcmI0OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIFNvbGFyaXMgMi54IHdpdGggR05VIGNjLCBrcmI0Li4uJwotCUBlY2hvICdQbGVhc2UgcmVh ZCB0aGUgY29tbWVudHMgdGhhdCBhY2NvbXBhbnkgdGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicKLQkk KE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwK LQkiQ0ZMQUdTID0gLWcgLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRFNURVJNSU9YIC1EU0VM RUNUIC1ERk5GTE9BVCBcCi0JLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1ESERC VVVDUCAtRFRDUFNPQ0tFVCBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TICAt REtSQjQgLURDS19FTkNSWVBUSU9OIFwKLQktRENLX0RFUyAtRENLX0NBU1QgLURCSUdCVUZPSyAk KEs0SU5DKSAkKEtGTEFHUykiIFwKLQkiTElCUz0gJChLNExJQikgLWx0ZXJtbGliIC1sc29ja2V0 IC1sbnNsIC1sbSAtbHJlc29sdiAtbGtyYiAtbGRlcyBcCi0JJChMSUJTKSIKLQotI2FuZCB3aXRo IE9wZW5TU0wsWkxJQixQQU0sU0hBRE9XCi1zb2xhcmlzMnhnK29wZW5zc2wremxpYitwYW0rc2hh ZG93OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54IHdp dGggZ2NjLCBPcGVuU1NMLi4uJwotCUBlY2hvICdQbGVhc2UgcmVhZCB0aGUgY29tbWVudHMgdGhh dCBhY2NvbXBhbnkgdGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicKLQkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKLQkiQ0ZMQUdTID0gLWcgLU8g LVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRFNURVJNSU9YIC1EU0VMRUNUIC1ERk5GTE9BVCBcCi0J LURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCBc Ci0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAtRENLX1BBTSAtRENLX1NIQURPVyAgLURa TElCIFwKLQktREJJR0JVRk9LICQoU1NMSU5DKSAkKEtGTEFHUykiIFwKLQkiTElCUz0gJChTU0xM SUIpIC1sdGVybWxpYiBcCi0JLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IC1sc3NsIC1sY3J5 cHRvIC1scGFtIC1seiIKLQotI0RpdHRvIGJ1dCB3aXRoIEdDQyAzLjEgaW4gd2hpY2ggeW91IGhh dmUgdG8gc3BlY2lmeSAzMi1iaXQgd2l0aCAtbTMyLgotI0luIFNvbGFyaXMgOSAoYW5kIG1heWJl IDgpIHlvdSdsbCBhbHNvIG5lZWQgc3BlY2lmaXkgdGhlIExpYnJhcnkgcGF0aC4KLSNSZXBvcnRl ZGx5IHRoaXMgY2FuIGJlIGRvbmUgaGVyZSwgYnV0IG9ubHkgd2l0aDoKLSMgY3JsZSAtbCAvdXNy L2xpYjovdXNyL2xvY2FsL3NzbC9saWIKLSNwcmlvciB0byBidWlsZGluZy4gIE5vdGU6IDY0LWJp dCBub3QgdGVzdGVkIHdpdGggU1NMLgotI0ZvciBuby1jcnlwdG8gNjQtYml0IGJ1aWxkcyBzZWUg dGhlIHNvbGFyaXM5ZzY0IHRhcmdldC4KLXNvbGFyaXMyeGczMitvcGVuc3NsK3psaWIrcGFtK3No YWRvdzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDIueCB3 aXRoIGdjYywgT3BlblNTTC4uLicKLQlAZWNobyAnUGxlYXNlIHJlYWQgdGhlIGNvbW1lbnRzIHRo YXQgYWNjb21wYW55IHRoZSBzb2xhcmlzMnhnIHRhcmdldC4nCi0JJChNQUtFKSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz0iZ2NjIC1tMzIiIENDMj0iZ2NjIC1tMzIiIFwKLQki Q0ZMQUdTID0gLWcgLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRFNURVJNSU9YIC1EU0VMRUNU IC1ERk5GTE9BVCBcCi0JLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1ESERCVVVD UCAtRFRDUFNPQ0tFVCBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAtRENLX1BBTSAt RENLX1NIQURPVyAgLURaTElCIFwKLQktREJJR0JVRk9LICQoU1NMSU5DKSAkKEtGTEFHUykiIFwK LQkiTElCUz0gJChTU0xMSUIpIC1sdGVybWxpYiBcCi0JLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVz b2x2IC1sc3NsIC1sY3J5cHRvIC1scGFtIC1seiIKLQotI2FuZCB3aXRoIEtyYjUsS3JiNCxPcGVu U1NMLFNIQURPVwotc29sYXJpczJ4ZytrcmI1K2tyYjQrb3BlbnNzbCtzaGFkb3c6Ci0JQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLnggd2l0aCBnY2MsazUsazQs c3NsLi4uJwotCUBlY2hvICdQbGVhc2UgcmVhZCB0aGUgY29tbWVudHMgdGhhdCBhY2NvbXBhbnkg dGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKLQkiQ0ZMQUdTID0gLU8gLVVzdW4gLURTVlI0IC1E U09MQVJJUyAtRFNURVJNSU9YIC1EU0VMRUNUIC1ERk5GTE9BVCBcCi0JLURDS19DVVJTRVMgLURD S19ORVdURVJNIC1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCBcCi0JLURDS19BVVRIRU5U SUNBVElPTiAtRENLX0tFUkJFUk9TIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAotCS1EQ0tfRU5D UllQVElPTiAtRENLX1NTTCAtRENLX0RFUyAtRENLX0NBU1QgLURCSUdCVUZPSyBcCi0JJChLNUlO QykgJChLNUlOQykva3JiNSAkKFNTTElOQykgJChLRkxBR1MpIiBcCi0JIkxJQlM9ICQoSzVMSUIp ICQoU1NMTElCKSAtbHRlcm1saWIgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IFwKLQktbGty YjQgLWxzc2wgLWxjcnlwdG8gLWxnc3NhcGlfa3JiNSAtbGtyYjUgLWxjb21fZXJyIC1sazVjcnlw dG8gXAotCS1sZGVzICQoTElCUykiCi0KLSNhbmQgd2l0aCBPcGVuU1NMCi1zb2xhcmlzMnhnK29w ZW5zc2wrcGFtK3NoYWRvdzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBT b2xhcmlzIDIueCB3aXRoIGdjYywgT3BlblNTTC4uLicKLQlAZWNobyAnUGxlYXNlIHJlYWQgdGhl IGNvbW1lbnRzIHRoYXQgYWNjb21wYW55IHRoZSBzb2xhcmlzMnhnIHRhcmdldC4nCi0JJChNQUtF KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCi0JIkNG TEFHUyA9IC1nIC1PIC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVMgLURTVEVSTUlPWCAtRFNFTEVDVCAt REZORkxPQVQgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRERJUkVOVCAtREhEQlVVQ1Ag LURUQ1BTT0NLRVQgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TU0wgLURDS19QQU0gLURD S19TSEFET1cgXAotCS1EQklHQlVGT0sgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAk KFNTTExJQikgLWx0ZXJtbGliIFwKLQktbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgLWxzc2wg LWxjcnlwdG8gLWxwYW0iCi0KLXNvbGFyaXMyeGcrb3BlbnNzbCt6bGliK3NycCtwYW0rc2hhZG93 OgkKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDIueCB3aXRo IGdjYywgT3BlblNTTC4uLicKLQlAZWNobyAnUGxlYXNlIHJlYWQgdGhlIGNvbW1lbnRzIHRoYXQg YWNjb21wYW55IHRoZSBzb2xhcmlzMnhnIHRhcmdldC4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCi0JIkNGTEFHUyA9IC1nIC1PIC1V c3VuIC1EU1ZSNCAtRFNPTEFSSVMgLURTVEVSTUlPWCAtRFNFTEVDVCAtREZORkxPQVQgXAotCS1E Q0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRERJUkVOVCAtREhEQlVVQ1AgLURUQ1BTT0NLRVQgLURC SUdCVUZPSyBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX0VOQ1JZUFRJT04gLURDS19ERVMg LURMSUJERVMgLURDS19DQVNUIFwKLQktRENLX1NTTCAtRENLX1BBTSAtRENLX1NIQURPVyAtRFpM SUIgLURDS19TUlAgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAkKFNTTExJQikgLWx0 ZXJtbGliIC1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiAtbHNycCAtbHNzbCBcCi0JLWxkZXMg LWxrcnlwdG8gLWxjcnlwdG8gLWxwYW0gLWx6IgotCi1zb2xhcmlzMjJnOgotCSQoTUFLRSkgIk1B S0U9JChNQUtFKSIgIktGTEFHUz0tRFBPU0lYX0NSVFNDVFMgJChLRkxBR1MpIiBzb2xhcmlzMnhn IFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLXNvbGFyaXMyM2c6Ci0JJChNQUtFKSAi TUFLRT0kKE1BS0UpIiAiS0ZMQUdTPS1EUE9TSVhfQ1JUU0NUUyAkKEtGTEFHUykiIHNvbGFyaXMy eGcgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotI1NvbGFyaXMgMi40IGJ1aWx0IHdp dGggZ2NjCi1zb2xhcmlzMjRnOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCi0Jc29sYXJpczJ4ZyAiS0ZMQUdTPS1EU09MQVJJUzI0IC1EUE9TSVhf Q1JUU0NUUyAkKEtGTEFHUykiCi0KLSNTb2xhcmlzIDIuMC0yLjMsIFN1blBybyBjb21waWxlciwg d2l0aCBTdW5MaW5rIFguMjUgc3VwcG9ydC4KLSNUaGlzIHdpbGwgb25seSBydW4gaWYgdXNlciBo YXMgL29wdC9TVU5XY29ubi9saWIvbGlic29ja3gyNS5zby4xCi0jZXhpc3RzIGFuZCBjYW4gYmUg ZHluYW1pY2FsbHkgbGlua2VkLgotI05PVEU6IERvIG5vdCBjaGFuZ2UgdGFyZ2V0IHRvIHhlcm1p dCAtLSBpdCBkb2Vzbid0IHN1cHBvcnQgWC4yNS4KLXNvbGFyaXMyeDI1OgotCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54K1guMjUgd2l0aCBTdW5Qcm8gY2Mu Li4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFH UyA9IC1PIC1pIC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVMgLURESVJFTlQgXAotCS1EU1VOWDI1IC1E VENQU09DS0VUIC1ESERCVVVDUCAtREZORkxPQVQgLUROT0xFQVJOIFwKLQktRFNFTEVDVCAtRENL X0NVUlNFUyAtRENLX05FV1RFUk0gLURTVEVSTUlPWCAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1Mg PSAtcyIgXAotCSJMSUJTPSAtbHRlcm1saWIgLUwvb3B0L1NVTldjb25uL2xpYiAtUi9vcHQvU1VO V2Nvbm4vbGliIFwKLQktbHNvY2t4MjUgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IgotCi0j U29sYXJpcyAyLjAtMi40LCBnY2MsIFN1bkxpbmsgWC4yNSBhZGRlZC4KLSNOT1RFOiBDYW4ndCB1 c2UgeGVybWl0IHRhcmdldCB3aXRoIFguMjUuCi1zb2xhcmlzMnhneDI1OgotCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54ICsgWC4yNSB3aXRoIEdOVSBjYy4u LicKLQlAZWNobyAnUGxlYXNlIHJlYWQgdGhlIGNvbW1lbnRzIHRoYXQgYWNjb21wYW55IHRoZSBz b2xhcmlzMnhnIGVudHJ5LicKLQkkKE1BS0UpIHdlcm1pdCBDQz1nY2MgQ0MyPWdjYyBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLWcgLU8gLVVzdW4gLURTVlI0IC1EU09M QVJJUyAtRFNURVJNSU9YIC1EU0VMRUNUIC1EU1VOWDI1IFwKLQktRENLX0NVUlNFUyAtRENLX05F V1RFUk0gLURESVJFTlQgLURIREJVVUNQIC1EVENQU09DS0VUIC1ERk5GTE9BVCBcCi0JLUROT0xF QVJOICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHRlcm1saWIgLWxtIC1ML29wdC9TVU5XY29ubi9s aWIgLVIvb3B0L1NVTldjb25uL2xpYiBcCi0JLWxzb2NreDI1IC1sc29ja2V0IC1sbnNsIgotCi0j U29sYXJpcyAyLjQsIFN1blBybyBjb21waWxlciwgd2l0aCBTdW5MaW5rIFguMjUgc3VwcG9ydC4K LSNUaGlzIHdpbGwgb25seSBydW4gaWYgdXNlciBoYXMgL29wdC9TVU5XY29ubi9saWIvbGlic29j a3gyNS5zby4xCi0jZXhpc3RzIGFuZCBjYW4gYmUgZHluYW1pY2FsbHkgbGlua2VkLgotc29sYXJp czI0eDI1OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi40 K1guMjUgd2l0aCBTdW5Qcm8gY2MuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1pIC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVMgLURT T0xBUklTMjQgLURESVJFTlQgLUROT0xFQVJOIFwKLQktRFNVTlgyNSAtRFRDUFNPQ0tFVCAtREhE QlVVQ1AgLURGTkZMT0FUIC1EUE9TSVhfQ1JUU0NUUyBcCi0JLURTRUxFQ1QgLURDS19DVVJTRVMg LURDS19ORVdURVJNIC1EU1RFUk1JT1ggJChLRkxBR1MpIiBcCi0JIkxOS0ZMQUdTID0gLXMiIFwK LQkiTElCUz0gLWx0ZXJtbGliIC1ML29wdC9TVU5XY29ubi9saWIgLVIvb3B0L1NVTldjb25uL2xp YiBcCi0JLWxzb2NreDI1IC1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiIKLQotI1NvbGFyaXMg Mi41LCBTdW5Qcm8gY29tcGlsZXIsIHdpdGggU3VuTGluayBYLjI1IHN1cHBvcnQuCi1zb2xhcmlz MjV4MjU6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLjUr WC4yNSB3aXRoIFN1blBybyBjYy4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLWkgLVVzdW4gLURTVlI0IC1EU09MQVJJUzI1IC1E RElSRU5UIC1EU1VOWDI1IFwKLQktRFRDUFNPQ0tFVCAtREhEQlVVQ1AgLURTRUxFQ1QgLURDS19D VVJTRVMgXAotCS1EQ0tfTkVXVEVSTSAtRFNURVJNSU9YIC1ERk5GTE9BVCAtRFBPU0lYX0NSVFND VFMgLUROT0xFQVJOIFwKLQktSS9vcHQvU1VOV2Nvbm4vaW5jbHVkZSAkKEtGTEFHUykiIFwKLQki TElCUz0gLWx0ZXJtbGliIC1ML29wdC9TVU5XY29ubi9saWIgLVIvb3B0L1NVTldjb25uL2xpYiBc Ci0JLWxzb2NreDI1IC1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiIKLQotc29sYXJpczIzOgot CSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc29sYXJpczJ4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAotCSJLRkxBR1M9JChLRkxBR1MpIgotCi1zb2xhcmlzMjQ6Ci0JJChNQUtFKSAiTUFLRT0k KE1BS0UpIiBzb2xhcmlzMnggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0t RFNPTEFSSVMyNCAtRFBPU0lYX0NSVFNDVFMgJChLRkxBR1MpIgotCi0jIHRlbXBsYXRlIGZvciBT b2xhcmlzIDIuNSBhbmQgYWJvdmUuCi1zb2xhcmlzMjV4OgotCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54IHdpdGggU3VuUHJvIGNjLi4uJwotCSQoTUFLRSkg eGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtREZORkxPQVQg LU8gLVVzdW4gLWkgJChLRkxBR1MpIiBcCi0JIkxOS0ZMQUdTID0gLXMiIFwKLQkiTElCUz0gLWx0 ZXJtbGliIC1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiAkKExJQlMpIgotCi0jU29sYXJpcyAy LjUsIFN1blBybyBjb21waWxlciwgY3Vyc2VzLCBUQ1AvSVAKLXNvbGFyaXMyNToKLQkkKE1BS0Up ICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMyNXggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IktGTEFHUz0tRFNPTEFSSVMyNSAkKEtGTEFHUykiCi0KLSNTb2xhcmlzIDIuNSwgU3VuUHJvIGNv bXBpbGVyLCBjdXJzZXMsIFRDUC9JUCwgS2VyYmVyb3MgSVYKLXNvbGFyaXMyNStrcmI0OgotCSQo TUFLRSkgIk1BS0U9JChNQUtFKSIgc29sYXJpczI1eCtrcmI0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAotCSJLRkxBR1M9LURTT0xBUklTMjUgJChLRkxBR1MpIgotCi0jU29sYXJpcyAyLjUg YnVpbHQgd2l0aCBnY2MKLXNvbGFyaXMyNWc6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xh cmlzMnhnIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LWZ1bnNpZ25lZC1j aGFyIC1EU09MQVJJUzI1ICQoS0ZMQUdTKSIKLQotI1NvbGFyaXMgMi41IGJ1aWx0IHdpdGggZ2Nj IGFuZCBLZXJiZXJvcyBJVgotc29sYXJpczI1ZytrcmI0OgotCSQoTUFLRSkgIk1BS0U9JChNQUtF KSIgc29sYXJpczJ4ZytrcmI0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9 LWZ1bnNpZ25lZC1jaGFyIC1EU09MQVJJUzI1ICQoS0ZMQUdTKSIKLQotI1NvbGFyaXMgMi41IGJ1 aWx0IHdpdGggZ2NjIGFuZCBLZXJiZXJvcyBWL0lWLCBTU0wsIC4uLgotc29sYXJpczI1ZytrcmI1 K2tyYjQrb3BlbnNzbCtzaGFkb3c6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMnhn K2tyYjUra3JiNCtvcGVuc3NsK3NoYWRvdyBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc Ci0JIktGTEFHUz0tZnVuc2lnbmVkLWNoYXIgLURTT0xBUklTMjUgJChLRkxBR1MpIgotCi0jU29s YXJpcyAyLjUsIGdjYywgU3VuTGluayBYLjI1IGFkZGVkLgotc29sYXJpczI1Z3gyNToKLQkkKE1B S0UpICJNQUtFPSQoTUFLRSkiIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gc29sYXJpczJ4Z3gy NSBcCi0JIktGTEFHUz0tRFNPTEFSSVMyNSAkKEtGTEFHUykiCi0KLSNTb2xhcmlzIDIuNiwgZ2Nj LCBTdW5MaW5rIFguMjUgYWRkZWQuCi1zb2xhcmlzMjZneDI1OgotCSQoTUFLRSkgIk1BS0U9JChN QUtFKSIgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBzb2xhcmlzMnhneDI1IFwKLQkiS0ZMQUdT PS1EU09MQVJJUzI2IC1EQ0tfUEFNIC1EQ0tfU0hBRE9XICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAt bHBhbSIKLQotI1NvbGFyaXMgMi42LCBTdW5Qcm8gY29tcGlsZXIsIGN1cnNlcywgVENQL0lQCi1z b2xhcmlzMjY6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMjV4IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURTT0xBUklTMjYgLURDS19QQU0gLURDS19TSEFE T1cgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1scGFtIgotCi0jU29sYXJpcyAyLjYgd2l0aCBnY2MK LXNvbGFyaXMyNmc6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IHNvbGFyaXMyeGcgXAotCSJLRkxBR1M9IC1EU09MQVJJUzI2IC1EQ0tfUEFNIC1EQ0tf U0hBRE9XICQoS0ZMQUdTKSIgXAotCSJMSUJTID0gLWxwYW0iCi0KLSNTb2xhcmlzIDIuNiB3aXRo IGdjYyBhbmQgU1NMCi1zb2xhcmlzMjZnK29wZW5zc2w6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0Up IiAgc29sYXJpczJ4ZytvcGVuc3NsK3BhbStzaGFkb3cgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gIktGTEFHUz0gLURTT0xBUklTMjYgJChLRkxBR1MpIgotCi0jU29sYXJpcyAyLjYgd2l0 aCBnY2MsIG5vIGN1cnNlcyAoZS5nLiBiZWNhdXNlIGxpYnRlcm1saWIgaXMgbWlzc2luZykuCi1z b2xhcmlzMjZnbmM6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IHNvbGFyaXMyeGduYyBcCi0JIktGTEFHUz0gLURTT0xBUklTMjYgLURDS19QQU0gLURD S19TSEFET1cgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1scGFtIgotCi0jU29sYXJpcyAyLjYsIFN1 blBybyBjb21waWxlciwgd2l0aCBTdW5MaW5rIFguMjUgc3VwcG9ydC4KLXNvbGFyaXMyNngyNToK LQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDIuNitYLjI1IHdp dGggU3VuUHJvIGNjLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAotCSJDRkxBR1MgPSAtTyAtaSAtVXN1biAtRFNWUjQgLURTT0xBUklTMjYgLURESVJFTlQg LURTVU5YMjUgXAotCS1EVENQU09DS0VUIC1ESERCVVVDUCAtRFNFTEVDVCAtRENLX0NVUlNFUyAt RENLX1BBTSAtRENLX1NIQURPVyBcCi0JLURDS19ORVdURVJNIC1EU1RFUk1JT1ggLURGTkZMT0FU IC1EUE9TSVhfQ1JUU0NUUyAtRE5PTEVBUk4gXAotCS1JL29wdC9TVU5XY29ubi9pbmNsdWRlICQo S0ZMQUdTKSIgXAotCSJMSUJTPSAtbHRlcm1saWIgLUwvb3B0L1NVTldjb25uL2xpYiAtUi9vcHQv U1VOV2Nvbm4vbGliIFwKLQktbHNvY2t4MjUgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IC1s cGFtIgotCi0jU29sYXJpcyA3ICgyLjcpIHdpdGggU3VuIENDCi1zb2xhcmlzNzoKLQkkKE1BS0Up ICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMyNXggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IktGTEFHUz0tRFNPTEFSSVM3IC1EQ0tfUEFNIC1EQ0tfU0hBRE9XICQoS0ZMQUdTKSIgXAotCSJM SUJTPSAtbHBhbSIKLQotI1NvbGFyaXMgNyB3aXRoIGdjYyAoMzItYml0KQotc29sYXJpczdnOgot CSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc29sYXJpczJ4ZyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKLQkiS0ZMQUdTPS1EU09MQVJJUzcgLURDS19QQU0gLURDS19TSEFET1cgJChLRkxBR1Mp IiBcCi0JIkxJQlM9IC1scGFtIgotCi0jU29sYXJpcyA3IHdpdGggZ2NjICsgS2VyYmVyb3MgSVYg KDMyLWJpdCkKLXNvbGFyaXM3ZytrcmI0OgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc29sYXJp czJ4ZytrcmI0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURTT0xBUklT NyAtRENLX1BBTSAtRENLX1NIQURPVyAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxwYW0iCi0KLXNv bGFyaXM3ZytvcGVuc3NsK3psaWIrcGFtK3NoYWRvdzoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSki IHNvbGFyaXMyeGcrb3BlbnNzbCt6bGliK3BhbStzaGFkb3cgXAotCUtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAotCSJLRkxBR1M9LURTT0xBUklTNyAtRENLX1BBTSAtRENLX1NIQURPVyAkKEtG TEFHUykiCi0KLSNTb2xhcmlzIDcgd2l0aCBnY2MgKyBPcGVuU1NMICgzMi1iaXQpCi1zb2xhcmlz N2crb3BlbnNzbCt6bGliK3NycCtwYW0rc2hhZG93OgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIg c29sYXJpczJ4ZytvcGVuc3NsK3psaWIrc3JwK3BhbStzaGFkb3cgXAotCUtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURTT0xBUklTNyAtRENLX1BBTSAtRENLX1NIQURPVyAk KEtGTEFHUykiCi0KLSNTb2xhcmlzIDgKLXNvbGFyaXM4OgotCSQoTUFLRSkgIk1BS0U9JChNQUtF KSIgc29sYXJpczI1eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EU09M QVJJUzggLURDS19QQU0gLURDS19TSEFET1cgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1scGFtIgot Ci0jU29sYXJpcyA4IHdpdGggZ2NjICgzMi1iaXQpCi1zb2xhcmlzOGc6Ci0JJChNQUtFKSAiTUFL RT0kKE1BS0UpIiBzb2xhcmlzMnhnIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxB R1M9LURTT0xBUklTOCAtRENLX1BBTSAtRENLX1NIQURPVyAkKEtGTEFHUykiIFwKLQkiTElCUz0g LWxwYW0iCi0KLSMgSW4gT3BlblNTTCBidWlsZHMgYWRkIC1sZGwgaWYgeW91IGdldCB1bnJlc29s dmVkIHJlZmVyZW5jZXMgZm9yCi0jIGRsY2xvc2UsIGRsc3ltLCBkbG9wZW4sIGRsZXJyb3IuCi0K LSNTb2xhcmlzIDggd2l0aCBnY2MgKyBPcGVuU1NMICgzMi1iaXQpCi1zb2xhcmlzOGcrb3BlbnNz bCt6bGliK3BhbStzaGFkb3c6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMnhnK29w ZW5zc2wremxpYitwYW0rc2hhZG93IFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxB R1M9LURTT0xBUklTOCAkKEtGTEFHUykiCi0KLSNTb2xhcmlzIDggd2l0aCBnY2MgKyBLZXJiZXJv cyBJViAoMzItYml0KQotc29sYXJpczhnK2tyYjQ6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBz b2xhcmlzMnhnK2tyYjQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNP TEFSSVM4IC1EQ0tfUEFNIC1EQ0tfU0hBRE9XICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHBhbSIK LQotc29sYXJpczlub2xmczoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMyNXggS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNPTEFSSVM5IC1EQ0tfUEFNIC1E Q0tfU0hBRE9XIC1EVVNFX1NUUkVSUk9SICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHBhbSIKLQot I1NvbGFyaXMgOSB3aXRoIG1hbGxvYyBkZWJ1Z2dpbmcKLXNvbGFyaXM5bWQ6Ci0JJChNQUtFKSBt ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1ERk5GTE9BVCAt TyAtVXN1biAtaSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IFwKLQktRFNPTEFSSVM5IC1EbWFsbG9j PWRtYWxsb2MgLURmcmVlPWRmcmVlIC1ETURFQlVHIFwKLQktRENLX1BBTSAtRENLX1NIQURPVyAt RFVTRV9TVFJFUlJPUiAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxwYW0gLWx0ZXJtbGliIC1sc29j a2V0IC1sbnNsIC1sbSAtbHJlc29sdiIKLQotI1NvbGFyaXMgOSB3aXRoIGdjYyArIE9wZW5TU0wg KyBTaGFkb3cgKDMyLWJpdCkKLSNBZGQgLURPUEVOU1NMXzA5NyBmb3IgT3BlblNTTCAwLjkuNyBv ciBsYXRlci4KLXNvbGFyaXM5ZytvcGVuc3NsK3NoYWRvdytwYW0remxpYjoKLQkkKE1BS0UpICJN QUtFPSQoTUFLRSkiIHNvbGFyaXMyeGcrb3BlbnNzbCt6bGliK3BhbStzaGFkb3cgXAotCUtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURTT0xBUklTOSAtREhEQlVVQ1AgLURE SVJFTlQgLURfRklMRV9PRkZTRVRfQklUUz02NCBcCi0JLUROT19EQ0xfSU5FVF9BVE9OIC1EWkxJ QiAtRENLX1BBTSAtRENLX1NIQURPVyAtRExJQkRFUyAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxw YW0gLWxkZXM0MjUgLWx6ICQoTElCUykiCi0KLSNTb2xhcmlzIDkgd2l0aCBnY2MgKyBPcGVuU1NM ICsgS2VyYmVyb3MgNSArIEtyYjQgKyBTaGFkb3cgKDMyLWJpdCkKLSNBZGQgLURPUEVOU1NMXzA5 NyBmb3IgT3BlblNTTCAwLjkuNyBvciBsYXRlci4KLXNvbGFyaXM5ZytrcmI1K2tyYjQrb3BlbnNz bCtzaGFkb3crcGFtK3psaWI6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMnhnK2ty YjUra3JiNCtvcGVuc3NsK3NoYWRvdyBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IktGTEFHUz0tRFNPTEFSSVM5IC1ESERCVVVDUCAtRERJUkVOVCAtRF9GSUxFX09GRlNFVF9CSVRT PTY0IFwKLQktRE5PX0RDTF9JTkVUX0FUT04gLURaTElCIC1EQ0tfUEFNIC1EQ0tfU0hBRE9XIC1E TElCREVTICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHBhbSAtbGRlcyAtbHogJChMSUJTKSIKLQot I1NvbGFyaXMgOSB3aXRoIGdjYyArIEtlcmJlcm9zIDQgYW5kIDU6Ci1zb2xhcmlzOWcra3JiNStr cmI0OgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gQ0M9Z2NjIEND Mj1nY2MgXAotCSJDRkxBR1MgPSAtTyAtVXN1biAtRFNWUjQgLURTT0xBUklTOSAtRFNURVJNSU9Y IC1EU0VMRUNUIC1ERk5GTE9BVCBcCi0JLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ERElSRU5U IC1ESERCVVVDUCAtRFRDUFNPQ0tFVCBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJF Uk9TIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAotCS1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgXAot CS1EQ0tfRU5DUllQVElPTiAtRENLX0RFUyAtRENLX0NBU1QgLURCSUdCVUZPSyBcCi0JJChLNUlO QykgJChLNUlOQykva3JiNSAkKEtGTEFHUykiIFwKLQkiTElCUz0gJChLNUxJQikgLWx0ZXJtbGli IC1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiBcCi0JLWxrcmI0IC1sY3J5cHRvIC1sZ3NzYXBp X2tyYjUgLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvIFwKLQktbGRlcyAkKExJQlMpIgotCi0j U29sYXJpcyA5LCAxMCwgb3IgMTEgd2l0aCBnY2MuLi4gIAotI1VzZXMgc3RyZWFtcyBQVFlzIHJh dGhlciB0aGFuIEJTRCBwdHlzIGFzIGluIEMtS2VybWl0IDguMCBhbmQgZWFybGllci4KLSNUaGlz IHRhcmdldCBpcyBjaGFpbmVkIHRvIGJlIHRoZSBzZWN1cmUgc29sYXJpczlnK3h4eCB0YXJnZXRz IGJlbG93Lgotc29sYXJpczlnIHNvbGFyaXMxMGcgc29sYXJpczExZzoKLQlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDkgb3IgbGF0ZXIgd2l0aCBnY2MnCi0JQGNh c2UgYHVuYW1lIC1yYCBpbiBcCi0JICA1LjkpIFNPTEFSSVNWRVJTSU9OPSItRFNPTEFSSVM5IiA7 OyBcCi0JICA1LjEwKSBTT0xBUklTVkVSU0lPTj0iLURTT0xBUklTMTAiIDs7IFwKLQkgIDUuMTEp IFNPTEFSSVNWRVJTSU9OPSItRFNPTEFSSVMxMSIgOzsgXAotCSAgKikgU09MQVJJU1ZFUlNJT049 Ii1EU09MQVJJUyIgOzsgXAotCWVzYWMgOyBcCi0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0i Z2NjIC1tMzIiIENDMj0iZ2NjIC1tMzIiIHhlcm1pdCBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIkNGTEFHUyA9IC1nIC1PIC1Vc3VuIC1EU1ZSNCAkJFNPTEFSSVNWRVJTSU9OIC1E VVNFX1NUUkVSUk9SIFwKLQktRFNURVJNSU9YIC1EU0VMRUNUIC1ERk5GTE9BVCAtRENLX1BBTSAt RENLX1NIQURPVyAtZnVuc2lnbmVkLWNoYXIgXAotCS1ESEFWRV9TVFJFQU1TIC1ESEFWRV9HUkFO VFBUIC1ESEFWRV9QVFNOQU1FIC1EUFVTSF9QVEVNIFwKLQktRFBVU0hfTERURVJNIC1EUFVTSF9U VENPTVBBVCBcCi0JLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1ESERCVVVDUCAt RFRDUFNPQ0tFVCBcCi0JLURfRklMRV9PRkZTRVRfQklUUz02NCAkKEtGTEFHUykiIFwKLQkiTElC Uz0gLWx0ZXJtbGliIC1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiAtbHBhbSAkKExJQlMpIgot Ci0jU29sYXJpcyA5LCAxMCwgb3IgMTEgd2l0aCBnY2MgKyBLZXJiZXJvcyA1ICsgT3BlblNTTC4K LSNPSyBDLUtlcm1pdCA5LjAuMzAxLgotc29sYXJpczlnK2tyYjUrc3NsIHNvbGFyaXMxMGcra3Ji NStzc2wgc29sYXJpczExZytrcmI1K3NzbDoKLQlAY2FzZSBgb3BlbnNzbCB2ZXJzaW9uYCBpbiBc Ci0JICAqMC45LjcqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk3IiA7OyBcCi0JICAqMC45 LjgqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk4IiA7OyBcCi0JICAqMS5bMC05XS5bMC05 XSopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8xMDAiIDs7IFwKLQkgICopIE9QRU5TU0xPUFRJ T049IiIgOzsgXAotCWVzYWMgOyBcCi0JSEFWRV9ERVM9Jyc7IFwKLQlERVNfTElCPScnOyBcCi0J aWYgbHMgJChTU0xMSUIpL2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwK LQkgICAgICBERVNfTElCPSctbGRlczQyNSc7IFwKLQkgICAgICBIQVZFX0RFUz0nLURDS19ERVMg LURMSUJERVMnOyBcCi0gICAgICAgICAgICAgIGVjaG8gIkhBVkUgREVTIjsgXAotICAgICAgICAg ICBlbHNlIGVjaG8gIk5PIERFUyI7IFwKLQlmaTsgXAotCUdTU0FQSUxJQj0nJzsgXAotCUs1RElS PWBlY2hvICQoSzVMSUIpIHwgc2VkICdzfC1MfHwnYDsgXAotCWVjaG8gSzVESVI9JCRLNURJUjsg XAotCWlmIGxzICQkSzVESVIvbGliZ3NzYXBpX2tyYjUqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVs bDsgdGhlbiBcCi0gICAgICAgICAgICAgIEdTU0FQSUxJQj0nLWxnc3NhcGlfa3JiNSc7IFwKLSAg ICAgICAgICBlbHNlIEdTU0FQSUxJQj0nLWxnc3NhcGknOyBcCi0gICAgICAgIGZpOyBcCi0JJChN QUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCi0J IkNGTEFHUyA9IC1PIC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVM5IC1EU1RFUk1JT1ggLURTRUxFQ1Qg LURGTkZMT0FUIFwKLQktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQgLURIREJVVUNQ IC1EVENQU09DS0VUICAtREJJR0JVRk9LIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NM IC1EWkxJQiAtRENLX0tFUkJFUk9TIC1ES1JCNSBcCi0JLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FT VCAkJE9QRU5TU0xPUFRJT04gXAotCSQkSEFWRV9ERVMgJChTU0xJTkMpICQoSzVJTkMpICQoSzVJ TkMpL2tyYjUgJChLRkxBR1MpIiBcCi0JIkxJQlM9ICQoU1NMTElCKSAkKEs1TElCKSAtbHogLWxz c2wgLWx0ZXJtbGliIC1sc29ja2V0IC1sbnNsIC1sbSBcCi0JLWxyZXNvbHYgLWxjcnlwdG8gXAot CSQkR1NTQVBJTElCIC1sa3JiNSAtbGNvbV9lcnIgLWxrNWNyeXB0byAkJERFU19MSUIgJChMSUJT KSIKLQotI1NvbGFyaXMgOSwgMTAsIG9yIDExIHdpdGggZ2NjLCA2NCBiaXQgYnVpbGQuCi0jUGVl a2luZyBpbnNpZGUgRklMRSBzdHJ1Y3Qgbm90IGFsbG93ZWQgaW4gNjQtYml0IHdvcmxkLgotI0RP TidUIFVTRSBUSElTIE9ORSBPTiBQQyBBUkNISVRFQ1RVUkUgLSBJdCBjb21waWxlcyBhbmQgbGlu a3MgYnV0IHdvbid0IHJ1bi4KLSNPSzogMjAwOS8wOS8yNSAoYnV0IG5vdCB0ZXN0ZWQgb24gU29s YXJpcyAxMSkKLXNvbGFyaXM5ZzY0IHNvbGFyaXMxMGc2NCBzb2xhcmlzMTFnNjQ6Ci0JQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyA5Kysgd2l0aCBnY2MgNjQtYml0 JwotCUBjYXNlIGB1bmFtZSAtcmAgaW4gXAotCSAgNS45KSBTT0xBUklTVkVSU0lPTj0iLURTT0xB UklTOSIgOzsgXAotCSAgNS4xMCkgU09MQVJJU1ZFUlNJT049Ii1EU09MQVJJUzEwIiA7OyBcCi0J ICA1LjExKSBTT0xBUklTVkVSU0lPTj0iLURTT0xBUklTMTEiIDs7IFwKLQkgICopIFNPTEFSSVNW RVJTSU9OPSItRFNPTEFSSVMiIDs7IFwKLQllc2FjIDsgXAotCSQoTUFLRSkgIk1BS0U9JChNQUtF KSIgQ0M9ImdjYyAtbTY0IiBDQzI9ImdjYyAtbTY0IiB4ZXJtaXQgXAotCUtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtZyAtTyAtVXN1biAtZnVuc2lnbmVkLWNoYXIgXAot CS1EU1ZSNCAkJFNPTEFSSVNWRVJTSU9OIC1ETk9BUlJPV0tFWVMgXAotCS1EU1RFUk1JT1ggLURT RUxFQ1QgLURGTkZMT0FUIC1EVVNFX1NUUkVSUk9SIC1EQ0tfUEFNIC1EQ0tfU0hBRE9XIFwKLQkt REhBVkVfU1RSRUFNUyAtREhBVkVfR1JBTlRQVCAtREhBVkVfUFRTTkFNRSAtRFBVU0hfUFRFTSBc Ci0JLURQVVNIX0xEVEVSTSAtRFBVU0hfVFRDT01QQVQgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfTkVX VEVSTSAtRERJUkVOVCAtREhEQlVVQ1AgLURUQ1BTT0NLRVQgJChLRkxBR1MpIiBcCi0JIkxJQlM9 IC1sdGVybWxpYiAtbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgLWxwYW0gJChMSUJTKSIKLQot I1NvbGFyaXMgOSwgMTAsIG9yIDExIHdpdGggU3VuUHJvIENDCi0jVXNlcyBzdHJlYW1zIFBUWXMg cmF0aGVyIHRoYW4gQlNEIHB0eXMgYXMgaW4gQy1LZXJtaXQgOC4wIGFuZCBlYXJsaWVyLgotI1Ro aXMgdGFyZ2V0IGlzIGNoYWluZWQgdG8gYnkgdGhlIHNlY3VyZSB0YXJnZXRzIGJlbG93LgotI09L IEMtS2VybWl0IDkuMAotc29sYXJpczkgc29sYXJpczEwIHNvbGFyaXMxMToKLQlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDkgb3IgbGF0ZXIgd2l0aCBTdW4gQ0Mn Ci0JQGNhc2UgYHVuYW1lIC1yYCBpbiBcCi0JICA1LjkpIFNPTEFSSVNWRVJTSU9OPSItRFNPTEFS SVM5IiA7OyBcCi0JICA1LjEwKSBTT0xBUklTVkVSU0lPTj0iLURTT0xBUklTMTAiIDs7IFwKLQkg IDUuMTEpIFNPTEFSSVNWRVJTSU9OPSItRFNPTEFSSVMxMSIgOzsgXAotCSAgKikgU09MQVJJU1ZF UlNJT049Ii1EU09MQVJJUyIgOzsgXAotCWVzYWMgOyBcCi0JJChNQUtFKSAiTUFLRT0kKE1BS0Up IiB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1Vc3Vu IC1EU1ZSNCAkJFNPTEFSSVNWRVJTSU9OIC1EVVNFX1NUUkVSUk9SIFwKLQktRFNURVJNSU9YIC1E U0VMRUNUIC1ERk5GTE9BVCAtRENLX1BBTSAtRENLX1NIQURPVyBcCi0JLURIQVZFX1NUUkVBTVMg LURIQVZFX0dSQU5UUFQgLURIQVZFX1BUU05BTUUgLURQVVNIX1BURU0gXAotCS1EUFVTSF9MRFRF Uk0gLURQVVNIX1RUQ09NUEFUIFwKLQktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQg LURIREJVVUNQIC1EVENQU09DS0VUIFwKLQktRF9GSUxFX09GRlNFVF9CSVRTPTY0ICQoS0ZMQUdT KSIgXAotCSJMSUJTPSAkKExJQlMpIC1sdGVybWxpYiAtbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNv bHYgLWxwYW0iCi0KLSMgU29sYXJpcyA5LCAxMCwgb3IgMTEgd2l0aCBPcGVuU1NMIGJ1aWx0IHdp dGggU3VuIENDLgotIyBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBob3cgdG8gaW52b2tlIHRoaXMgdGFy Z2V0IGluIGNhc2UgeW91ciBPcGVuU1NMCi0jIGhlYWRlcnMgYW5kIGxpYnJhcmllcyBhcmUgbm90 IGluIC91c3IvbG9jYWw6Ci0jCi0jIG1ha2Ugc29sYXJpczkrb3BlbnNzbCAiU1NMSU5DPSIgIlNT TExJQj0iIFwKLSMgICJLRkxBR1M9IC1JL29wdC9vcGVuc3NsLTAuOS44ay9pbmNsdWRlIC1ML29w dC9vcGVuc3NsLTAuOS44ay9saWIiCi0jCi0jIERvbid0IHVzZSAnbWFrZSAtZScgYmVjYXVzZSB0 aGF0IGluaGliaXRzIHBhc3Npbmcgb2YgS0ZMQUdTIHRvCi0jIHRoZSBiYXNlIChzb2xhcmlzOSkg dGFyZ2V0LgotIwotI09LIEMtS2VybWl0IDkuMAotc29sYXJpczkrc3NsIHNvbGFyaXMxMCtzc2wg c29sYXJpczExK3NzbCBcCi1zb2xhcmlzOStvcGVuc3NsIHNvbGFyaXMxMCtvcGVuc3NsIHNvbGFy aXMxMStvcGVuc3NsOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFy aXMgOS8xMC8xMSB3aXRoIE9wZW5TU0w6IGNjJwotCUBjYXNlIGBvcGVuc3NsIHZlcnNpb25gIGlu IFwKLQkgICowLjkuNyopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8wOTciIDs7IFwKLQkgICow LjkuOCopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8wOTgiIDs7IFwKLQkgICoxLlswLTldLlsw LTldKikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzEwMCIgOzsgXAotCSAgKikgT1BFTlNTTE9Q VElPTj0iIiA7OyBcCi0JZXNhYyA7IFwKLQlIQVZFX0RFUz0nJzsgXAotCURFU19MSUI9Jyc7IFwK LQlpZiBscyAkKFNTTExJQikvbGliZGVzKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4g XAotCSAgICAgIERFU19MSUI9Jy1sZGVzNDI1JzsgXAotCSAgICAgIEhBVkVfREVTPSctRENLX0RF UyAtRExJQkRFUyc7IFwKLSAgICAgICAgICAgICAgZWNobyAiSEFWRSBERVMiOyBcCi0gICAgICAg ICAgIGVsc2UgZWNobyAiTk8gREVTIjsgXAotCWZpOyBcCi0JJChNQUtFKSAiTUFLRT0kKE1BS0Up IiBzb2xhcmlzOSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EQ0tfQVVU SEVOVElDQVRJT04gLURDS19TU0wgLURaTElCICQkSEFWRV9ERVMgXAotCS1ETk9fRENMX0lORVRf QVRPTiAkJE9QRU5TU0xPUFRJT04gJChTU0xJTkMpICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAkKFNT TExJQikgLWx6IC1sc3NsICQkREVTX0xJQiAtbGNyeXB0byAgJChMSUJTKSIKLQotIyBTb2xhcmlz IDkgb3IgbGF0ZXIgd2l0aCBPcGVuU1NMLCBidWlsdCB3aXRoIGdjYy4KLSMgUmVtb3ZlIC1ETk9f RENMX0lORVRfQVRPTiBpZiBpbmV0X2F0b24gY29tZXMgdXAgbWlzc2luZy4gIFRoaXMgdGFyZ2V0 IG5pY2VseQotIyBjaGFpbnMgdG8gdGhlIHNvbGFyaXN7OSwxMCwxMX1nIHRhcmdldCBidXQgZm9y IHNvbWUgcmVhc29uIGl0IGRvZXNuJ3Qgd29yayBpZgotIyB5b3UgYWRkIHRoZSAtREZPUldBUkRf WCBvcHRpb24sIHRodXMgdGhlIHNvbGFyaXM5ZytvcGVuc3NsK2ZvcndhcmRfeCB0YXJnZXQuCi0j Ci0jT0s6IDIwMTEvMDYvMTQKLXNvbGFyaXM5Zytzc2wgc29sYXJpczEwZytzc2wgc29sYXJpczEx Zytzc2wgXAotc29sYXJpczlnK29wZW5zc2wgc29sYXJpczEwZytvcGVuc3NsIHNvbGFyaXMxMWcr b3BlbnNzbDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDkv MTAvMTEgd2l0aCBPcGVuU1NMOiBnY2MnCi0JQGNhc2UgYG9wZW5zc2wgdmVyc2lvbmAgaW4gXAot CSAgKjAuOS43KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5NyIgOzsgXAotCSAgKjAuOS44 KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5OCIgOzsgXAotCSAgKjEuWzAtOV0uWzAtOV0q KSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMTAwIiA7OyBcCi0JICAqKSBPUEVOU1NMT1BUSU9O PSIiIDs7IFwKLQllc2FjIDsgXAotCUhBVkVfREVTPScnOyBcCi0JREVTX0xJQj0nJzsgXAotCWlm IGxzICQoU1NMTElCKS9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCi0J ICAgICAgREVTX0xJQj0nLWxkZXM0MjUnOyBcCi0JICAgICAgSEFWRV9ERVM9Jy1EQ0tfREVTIC1E TElCREVTJzsgXAotICAgICAgICAgICAgICBlY2hvICJIQVZFIERFUyI7IFwKLSAgICAgICAgICAg ZWxzZSBlY2hvICJOTyBERVMiOyBcCi0JZmk7IFwKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNv bGFyaXM5ZyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EQ0tfQVVUSEVO VElDQVRJT04gLURDS19TU0wgLURaTElCICQkSEFWRV9ERVMgXAotCS1ETk9fRENMX0lORVRfQVRP TiAkJE9QRU5TU0xPUFRJT04gJChTU0xJTkMpICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAkKFNTTExJ QikgLWx6IC1sc3NsICQkREVTX0xJQiAtbGNyeXB0byAgJChMSUJTKSIKLQotIyBTb2xhcmlzIDkg b3IgbGF0ZXIgd2l0aCBnY2MgKyBPcGVuU1NMICsgU2hhZG93ICgzMi1iaXQpLgotIyBSZW1vdmUg LUROT19EQ0xfSU5FVF9BVE9OIGlmIGluZXRfYXRvbiBjb21lcyB1cCBtaXNzaW5nLgotIyBJbmNs dWRlcyBsb25nIGZpbGUgc3VwcG9ydCAtIG5vdCBzdXJlIGlmIHRoaXMgd2FzIGF2YWlsYWJsZSBi ZWZvcmUgU29sYXJpcyA5LgotIyBEZXRlY3RzIFNvbGFyaXMgdmVyc2lvbiBhdXRvbWF0aWNhbGx5 LgotIwotc29sYXJpczlnK29wZW5zc2wrZm9yd2FyZF94OgotCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgOSBvciBsYXRlciB3aXRoIE9wZW5TU0wuLi4nCi0JQGNh c2UgYG9wZW5zc2wgdmVyc2lvbmAgaW4gXAotCSAgKjAuOS43KikgT1BFTlNTTE9QVElPTj0iLURP UEVOU1NMXzA5NyIgOzsgXAotCSAgKjAuOS44KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5 OCIgOzsgXAotCSAgKjEuWzAtOV0uWzAtOV0qKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMTAw IiA7OyBcCi0JICAqKSBPUEVOU1NMT1BUSU9OPSIiIDs7IFwKLQllc2FjIDsgY2FzZSBgdW5hbWUg LXJgIGluIFwKLQkgIDUuOSkgU09MQVJJU1ZFUlNJT049Ii1EU09MQVJJUzkiIDs7IFwKLQkgIDUu MTApIFNPTEFSSVNWRVJTSU9OPSItRFNPTEFSSVMxMCIgOzsgXAotCSAgNS4xMSkgU09MQVJJU1ZF UlNJT049Ii1EU09MQVJJUzExIiA7OyBcCi0JICAqKSBTT0xBUklTVkVSU0lPTj0iLURTT0xBUklT IiA7OyBcCi0JZXNhYyA7IFwKLQkkKE1BS0UpIHhlcm1pdCAJS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBDQz1nY2MgQ0MyPWdjYyBcCi0JIkNGTEFHUyA9IC1nIC1PIC1Vc3VuIC1EU1ZSNCAkJFNP TEFSSVNWRVJTSU9OIFwKLQktREhBVkVfU1RSRUFNUyAtREhBVkVfR1JBTlRQVCAtREhBVkVfUFRT TkFNRSAtRFBVU0hfUFRFTSBcCi0JLURQVVNIX0xEVEVSTSAtRFBVU0hfVFRDT01QQVQgXAotCS1E U1RFUk1JT1ggLURTRUxFQ1QgLURGTkZMT0FUIC1EQklHQlVGT0sgLURfRklMRV9PRkZTRVRfQklU Uz02NCBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAtRENLX1BBTSAtRENLX1NIQURP VyAtRFpMSUIgLURMSUJERVMgXAotCS1ERk9SV0FSRF9YICQkT1BFTlNTTE9QVElPTiAkKFNTTElO QykgJChLRkxBR1MpIiBcCi0JIkxJQlM9ICQoU1NMTElCKSAtbHBhbSAtbGRlczQyNSAtbHogLWx0 ZXJtbGliIFwKLQktbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgLWxzc2wgLWxjcnlwdG8gLWxw YW0gLWx6ICQoTElCUykiCi0KLSMgVGhlc2UgdHdvIHNob3VsZCBiZSBmb2xkZWQgaW4gd2l0aCB0 aGUgb25lcyBqdXN0IGFib3ZlLgotCi0jU29sYXJpcyA5IHdpdGggZ2NjIDMuMSArIE9wZW5TU0wg KDMyLWJpdCkKLXNvbGFyaXM5ZytvcGVuc3NsK3psaWIrcGFtK3NoYWRvdzoKLQkkKE1BS0UpICJN QUtFPSQoTUFLRSkiIHNvbGFyaXMyeGczMitvcGVuc3NsK3psaWIrcGFtK3NoYWRvdyBcCi0JS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNPTEFSSVM5IC1EVVNFX1NUUkVS Uk9SICQoS0ZMQUdTKSIKLQotI1NvbGFyaXMgMTAgd2l0aCBnY2MgMy4xICsgT3BlblNTTCAoMzIt Yml0KQotc29sYXJpczEwZytvcGVuc3NsK3psaWIrcGFtK3NoYWRvdzoKLQkkKE1BS0UpICJNQUtF PSQoTUFLRSkiIHNvbGFyaXMyeGczMitvcGVuc3NsK3psaWIrcGFtK3NoYWRvdyBcCi0JS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNPTEFSSVMxMCAtRFVTRV9TVFJFUlJP UiAkKEtGTEFHUykiCi0KLSNUaGUgZm9sbG93aW5nIChvbGQsIG9sZCkgc3Vub3N4eHggZW50cmll cyBhcmUgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBvbmx5LgotCi1zdW5vczQxeDoKLQkkKE1B S0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtTyAtRFNV Tk9TNDEgLURESVJFTlQgLUROT1RMT0cgLUROT01TRU5EIFwKLQktRE5PVVVDUCAtRE5PU0lHV0lO Q0ggLUROT1JFRElSRUNUIC1ETk9QVVNIIC1ETk9DQ1RSQVAgXAotCS1ETk9JQ1AgLUROT0xPQ0FM ICQoS0ZMQUdTKSIKLQotI1N1bk9TIDQuMS54LCBkZWJ1Z2dpbmcgd2l0aCBQdXJlIFNvZnR3YXJl LCBJbmMuLCBQdXJpZnkgMiAoY29tbWVyY2lhbCBydW50aW1lCi0jZXJyb3ItZGV0ZWN0aW9uIHNv ZnR3YXJlIGZvciBjYXRjaGluZyB3aWxkIGFycmF5IHJlZmVyZW5jZXMsIGV0YykuCi0jQmVmb3Jl IHJ1bm5pbmcgdGhlIHJlc3VsdGluZyB3ZXJtaXQsIHlvdSdsbCBhbHNvIG5lZWQgdG8gZGVmaW5l IGFuZCBleHBvcnQKLSN0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyAoYXMgaW4g dGhpcyBleGFtcGxlKToKLSNQVVJJRllIT01FPS91c3IvbG9jYWwvcHVyaWZ5IDsgZXhwb3J0IFBV UklGWUhPTUUKLSNQVVJJRllDQUNIRURJUj0vdG1wIDsgZXhwb3J0IFBVUklGWUNBQ0hFRElSCi1z dW5vczQxY3A6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEg LyBCU0QgLyBDdXJzZXMgLyBQdXJpZnkuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0MyPSBwdXJpZnkgLWNhY2hlX2Rpcj0vdXNyL3RtcCBjYyIgXAot CSJDRkxBR1M9IC1nIC1EU1VOT1M0MSAtREhEQlVVQ1AgLURESVJFTlQgLURUQ1BTT0NLRVQgXAot CS1EU0FWRURVSUQgLURDS19DVVJTRVMgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1sY3Vyc2VzIC1s dGVybWNhcCIKLQotI1N1bk9TIDQuMSB3aXRoIG1hbGxvYyBkZWJ1Z2dlcgotc3Vub3M0MW1kOgot CUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC4xIG1hbGxvYyBkZWJ1 Zy4uLgotCSQoTUFLRSkgbWVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxB R1M9IC1PIC1EU1VOT1M0MSAtREhEQlVVQ1AgLURESVJFTlQgLURUQ1BTT0NLRVQgXAotCS1EU0FW RURVSUQgJChLRkxBR1MpIC1EbWFsbG9jPWRtYWxsb2MgLURmcmVlPWRmcmVlIC1ETURFQlVHIgot Ci1zdW5vczQxZ21kOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1Mg NC4xIHdpdGggZ2NjIGFuZCBjdXJzZXMuLi4KLQkkKE1BS0UpIG1lcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9ICJDQz0gZ2NjICIgIkNDMj0gZ2NjIiBcCi0JIkNGTEFHUz0gLWcgLURTVU5P UzQxIC1ESERCVVVDUCAtRERJUkVOVCAtRFRDUFNPQ0tFVCBcCi0JLUROREdQV05BTSAtRFNBVkVE VUlEIC1EQ0tfQ1VSU0VTIC1EUkxPR0NPREUgXAotCSQoS0ZMQUdTKSAtRG1hbGxvYz1kbWFsbG9j IC1EZnJlZT1kZnJlZSAtRE1ERUJVRyIgXAotCSJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAiCi0K LSNTdW5PUyB2ZXJzaW9uIDQuMSwgZ2NjLCBwcm9maWxpbmcgd2l0aCBncHJvZiwgbm8gZGVidWdn aW5nLgotI1RvIGdldCBwcm9maWxlLCAibWFrZSBzdW5vczQxcCIgKG9uIFN1biksIHRoZW4gIi4v d2VybWl0Ii4gIEFmdGVyIHJ1bm5pbmcKLSN3ZXJtaXQsICJncHJvZiAuL3dlcm1pdCB8IGxwciIg KG9yIHdoYXRldmVyKSB0byBnZXQgZXhlY3V0aW9uIHByb2ZpbGUuCi1zdW5vczQxcDoKLQlAZWNo byBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQueCB3aXRoIHByb2ZpbGluZy4u LgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDPSBnY2MgIiAi Q0MyPSBnY2MiIFwKLQkiQ0ZMQUdTPSAtRFNVTk9TNDEgLUROT0RFQlVHIC1EU0FWRURVSUQgLURE SVJFTlQgLURUQ1BTT0NLRVQgXAotCS1ETkRHUFdOQU0gJChLRkxBR1MpIC1wZyIgIkxOS0ZMQUdT ID0gLXBnIgotCi0jU3VuT1MgdmVyc2lvbiA0LjEgb3IgbGF0ZXIsIEJTRCBlbnZpcm9ubWVudCwg bWluaW11bSBmZWF0dXJlcy4KLXN1bm9zNDFtaW46Ci0JQGVjaG8gTWluaW11bSBpbnRlcmFjdGl2 ZQotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3Vub3M0MSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKLQkiS0ZMQUdTPS1ETk9TUEwgLUROT1hNSVQgLUROT01TRU5EIC1ETk9GUklMTFMgLURO T1JFVFJZIFwKLQktRE5PRElBTCAtRE5PSEVMUCAtRE5PREVCVUcgLUROT1RMT0cgLUROT1NDUklQ VCAtRE5PQ1NFVFMgXAotCS1ETk9TSE9XIC1ETk9TRVRLRVkgLUROT1VVQ1AgLUROT1JFQ0FMTCAt RE5PUkVESVJFQ1QgXAotCS1ETk9QVVNIIC1ETk9NRE1IVVAgLUROT0pDIC1ETk9GRFpFUk8gLURO T0VTQ1NFUSBcCi0JLUROT05FVCAtRENLX1NNQUxMIC1ETk9DS1NQRUVEIC1ETk9DS1RJTUVSUyAt RE5PTE9HSU4gXAotCS1ETk9DS1hZWiAtRE5PS0VSQkVST1MgLUROT01LRElSIC1ETk9QQVRURVJO UyAtRE5PUEVSTVMgLUROT1BJUEVTRU5EIFwKLQktRE5PUkVDVVJTSVZFIC1ETk9SRU5BTUUgLURO T1JFU0VORCAtRE5PU0VUS0VZIFwKLQktRE5PVFJJR0dFUiAtRE5PVFVOSU5HICQoS0ZMQUdTKSIg IkxOS0ZMQUdTID0gLXMiCi0KLSNTdW5PUyB2ZXJzaW9uIDQuMSwgQlNEIGVudmlyb25tZW50LCBt aW4gc2l6ZSwgY29tbWFuZC1saW5lIG9ubHkuLi4KLXN1bm9zNDFtOgotCUBlY2hvIE1pbmltdW0g c2l6ZQotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3Vub3M0MW1pbiBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1ETk9JQ1AgJChLRkxBR1MpIgotCi0jU3VuT1MgdmVyc2lv biA0LjEsIEJTRCBlbnZpcm9ubWVudCwgbWluIHNpemUsIGNtZC1saW5lIG9ubHksIHJlbW90ZSBv bmx5Li4uCi0jCi1zdW5vczQxbXI6Ci0JQGVjaG8gTWluaW11bSBzaXplCi0JJChNQUtFKSAiTUFL RT0kKE1BS0UpIiBzdW5vczQxbWluIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxB R1M9LUROT0lDUCAtRE5PTE9DQUwgJChLRkxBR1MpIgotCi0jU3VuT1MgdmVyc2lvbiA0LjEsIEJT RCBlbnZpcm9ubWVudCwgbWluIHNpemUsIGludGVyYWN0aXZlLi4uCi1zdW5vczQxbWk6Ci0JQGVj aG8gTWluaW11bSBzaXplCi0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzdW5vczQxbWluIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LUROT0NNREwgJChLRkxBR1MpIgotCi0j U3VuT1MgdmVyc2lvbiA0LjEsIEJTRCBlbnZpcm9ubWVudCwgbWluIHNpemUsIGludGVyYWN0aXZl LCByZW1vdGUgb25seS4uLgotc3Vub3M0MW1pcjoKLQlAZWNobyBNaW5pbXVtIHNpemUKLQkkKE1B S0UpICJNQUtFPSQoTUFLRSkiIHN1bm9zNDFtaW4gS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc Ci0JIktGTEFHUz0tRE5PQ01ETCAtRE5PTE9DQUwgJChLRkxBR1MpIgotCi0jU3VuT1MgNC4xLCBT eXN0ZW0gViBSMyBlbnZpcm9ubWVudCAoLWkgb3B0aW9uIG9taXR0ZWQpLgotc3Vub3M0MXM1Ogot CUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC4xIFN5c3RlbSBWIFIz Li4uCi0JQGVjaG8gRm9yIHRlc3RpbmcgcHVycG9zZXMgb25seSAtIE5PVCBmb3IgcHJvZHVjdGlv biB1c2UuCi0JQGVjaG8gRm9yIGEgdXNlYWJsZSB2ZXJzaW9uLCBtYWtlIHN1bm9zNDEgaW5zdGVh ZC4KLQkkKE1BS0UpIHdlcm1pdCAiQ0M9IC91c3IvNWJpbi9jYyAiICJDQzI9L3Vzci81YmluL2Nj ICIgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtRFNVTjRTNSAt RERJUkVOVCAtREhEQlVVQ1AgLUROT0xFQVJOIC1EQ0tfUE9MTCAkKEtGTEFHUykgLU8iCi0KLSNB cyBhYm92ZSwgYnV0IHdpdGggY3Vyc2VzIHN1cHBvcnQKLXN1bm9zNDFzNWM6Ci0JQGVjaG8gTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEgU3lzdGVtIFYgUjMuLi4KLQlAZWNo byBDdXJzZXMgaW5jbHVkZWQuCi0JQGVjaG8gRm9yIHRlc3RpbmcgcHVycG9zZXMgb25seSAtIE5P VCBmb3IgcHJvZHVjdGlvbiB1c2UuCi0JQGVjaG8gRm9yIGEgdXNlYWJsZSB2ZXJzaW9uLCBtYWtl IHN1bm9zNDEgaW5zdGVhZC4KLQkkKE1BS0UpIHdlcm1pdCAiQ0M9IC91c3IvNWJpbi9jYyAiICJD QzI9L3Vzci81YmluL2NjICIgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxB R1MgPSAtRFNVTjRTNSAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0xFQVJOIFwKLQktRENLX1BPTEwg LURDS19DVVJTRVMgLURDS19ORVdURVJNICQoS0ZMQUdTKSAtTyIgIkxJQlM9IC1sY3Vyc2VzIgot Ci0jQXMgYWJvdmUsIGJ1dCB3aXRoIGN1cnNlcyBzdXBwb3J0IEFORCBuZXQgc3VwcG9ydAotc3Vu b3M0MXM1dGNwYzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQu MSBTeXN0ZW0gViBSMy4uLgotCUBlY2hvIFRDUC9JUCBhbmQgY3Vyc2VzIGluY2x1ZGVkLiAgTm8g ZGVidWcgbG9nLgotCUBlY2hvIEZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkgLSBOT1QgZm9yIHBy b2R1Y3Rpb24gdXNlLgotCUBlY2hvIEZvciBhIHVzZWFibGUgdmVyc2lvbiwgbWFrZSBzdW5vczQx IGluc3RlYWQuCi0JJChNQUtFKSB4ZXJtaXQgIkNDPSAvdXNyLzViaW4vY2MgIiAiQ0MyPS91c3Iv NWJpbi9jYyAiIFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURT VU40UzUgLURESVJFTlQgLURIREJVVUNQIC1EQ0tfUE9MTCBcCi0JLUROT0RFQlVHIC1EQ0tfQ1VS U0VTIC1EQ0tfTkVXVEVSTSAtRFRDUFNPQ0tFVCAkKEtGTEFHUykgLU8iIFwKLQkiTElCUz0gLWxj dXJzZXMgLWxyZXNvbHYiCi0KLSMgKEVuZCBvZiBTdW5PUyB0ZXN0IGVudHJpZXMuLi4pCi0KLSNB cG9sbG8gd2l0aCBEb21haW4gU1IxMC4wIG9yIGxhdGVyLCBCU0QgZW52aXJvbm1lbnQKLSNSZXBv cnRlZGx5LCBpdCBtaWdodCBhbHNvIGhlbHAgdG8gYWRkICctQSxzeXN0eXBlPWJzZDQuMycgdG8g Q0ZMQUdTLgotI1JlcG9ydGVkbHksIHRoZXJlIGlzIGFsc28gYSBwcm9ibGVtIHdpdGggZ2V0YyAm IHB1dGMgbWFjcm9zIHRoYXQgY2FuCi0jYmUgaGFuZGxlZCBieSB1c2luZyAnI2lmZGVmIGFwb2xs bycgc29tZXdoZXJlIHRvIHJlZGVmaW5lIHRoZW0/Pz8KLSNPbiB0aGUgb3RoZXIgaGFuZCwgb3Ro ZXIgcmVwb3J0cyBpbmRpY2F0ZSB0aGF0IGl0IHdvcmtzIGZpbmUgYXMtaXMuCi0jTk9URTogVGhp cyBlbnRyeSB3YXMgcHJldmlvdXNseSBsaWtlIHRoaXM6Ci0jCSQoTUFLRSkgd2VybWl0ICJDRkxB R1M9IC1ETk9GSUxFSCAtREJTRDQgJChLRkxBR1MpIC1VYWVnaXMgXAotIwktRFRDUFNPQ0tFVCAt VV9fU1REQ19fIgotI1JlcG9ydHMgKERlYyA5MSkgaW5kaWNhdGUgU1IxMCBoYXMgYW4gQU5TSS1j b21wbGlhbnQgQyBjb21waWxlciwKLSNpbiBhZGRpdGlvbiB0byBhbiBvbGRlciBvbmUgdGhhdCBj bGFpbWVkIHRvIGJlIEFOU0ktY29tcGxpYW50IGJ1dCB3YXNuJ3QuCi0jVGhlIGZvbGxvd2luZyBt YWtlIGVudHJ5IChwbHVzIGNoZWNrcyB0aGF0IGFyZSBtYWRlIGluIGNrY2RlYi5oKSBkZXRlY3QK LSN3aGljaCBjb21waWxlciBpcyB1c2VkIGFuZCBkZWZpbmUgdGhlIENLX0FOU0lDIG9yIE5PQU5T SSBmbGFncyBhY2NvcmRpbmdseS4KLXNyMTAtYnNkOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgQXBvbGxvIFNSMTAuMCAvIEJTRCAuLi4KLQkkKE1BS0UpIHdlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtTyAtREFQT0xMT1NSMTAgLURCU0Q0 MyAtRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRE5PTEVBUk4gXAotCS1VYWVnaXMgJChLRkxBR1Mp IiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIgotCi0jQXBvbGxvIHdpdGggRG9tYWluIFNSMTAu MCBvciBsYXRlciwgU3lzdGVtIFYgUjMgZW52aXJvbm1lbnQuCi0jRG9uJ3QgdXNlIHRoZSBvcHRp bWl6ZXIgKC1PKSwgaXQgY2F1c2VzIHByb2JsZW1zIGF0IHJ1bnRpbWUuCi1zcjEwLXM1cjM6Ci0J QGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBcG9sbG8gU1IxMC4wIC8gU3lzIFYg UjMgLi4uCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNG TEFHUz0gLUROT0ZJTEVIIC1EU1ZSMyAtREFQT0xMT1NSMTAgLUROT0xFQVJOICQoS0ZMQUdTKSBc Ci0JLVVhZWdpcyAtVV9fU1REQ19fIgotCi0jQXBvbGxvIERvbWFpbi9JWCAodW50ZXN0ZWQsIHRy eSB0aGlzIGlmIHNyMTAtYnNkIGRvZXNuJ3Qgd29yaykKLSMgLURUQ1BTT0NLRVQgY2FuIHByb2Jh Ymx5IGJlIGFkZGVkIGhlcmUuCi1hcG9sbG9ic2Q6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBBcG9sbG8gRG9tYWluL0lYLi4uCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCi0JIkNDPSAvYmluL2NjICIgIkNDMj0gL2Jpbi9jYyAiIFwKLQki Q0ZMQUdTPSAtRE5PRklMRUggLURCU0Q0IC1EQVBPTExPQlNEIC1ETk9MRUFSTiAkKEtGTEFHUykg LVVhZWdpcyIKLQotI1ZlcnNpb24gNyBVbml4IChzZWUgY29tbWVudHMgbmVhciB0b3Agb2YgbWFr ZWZpbGUpCi12NzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFVOSVggVmVy c2lvbiA3LgotCUBlY2hvIFJlYWQgdGhlIG1ha2VmaWxlIGlmIHlvdSBoYXZlIHRyb3VibGUgd2l0 aCB0aGlzLi4uCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IkNGTEFHUz0tRFY3IC1EUFJPQ05BTUU9XFxcIiQoUFJPQylcXFwiIFwKLQktREJPT1ROQU1FPVxc XCIkKEJPT1RGSUxFKVxcXCIgLUROUFJPQ05BTUU9XFxcIiQoTlBST0MpXFxcIiBcCi0JLUROUFRZ UEU9JChOUFRZUEUpICQoRElSRUNUKSAtRE9fUkRXUj0yIC1ET19OREVMQVk9MCAtRE9fU0NDU19J RCBcCi0JLUROT0xFQVJOICQoS0ZMQUdTKSIKLQotI0FUJlQgVU5JWCBTeXN0ZW0gViBSMywgc2ln bmFsKCkgaXMgdm9pZCByYXRoZXIgdGhhbiBpbnQuCi0jVXNlcyBkaXJlbnQuaCBhbmQgSG9uZXkg RGFuQmVyIFVVQ1AuCi0jQWRkIHRoZSAtaSBsaW5rIG9wdGlvbiBpZiBuZWNlc3NhcnkuCi0jSWYg eW91IGdldCBlcnJvcnMgbGlrZSAid3Nfcm93IHVuZGVmaW5lZCIgaW4gY2t1dGlvLmMsIGFkZCAt RE5PTkFXUy4KLXN5czVyMzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBB VCZUIFVOSVggU3lzdGVtIFYgUjMuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRE5PTEVB Uk4gJChLRkxBR1MpIC1PIiBcCi0JIkxOS0ZMQUdTPSIKLQotI0FzIGFib3ZlLCBwbHVzIGN1cnNl cy4KLXN5czVyM2M6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBV TklYIFN5c3RlbSBWIFIzICsgY3Vyc2VzLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLURD S19DVVJTRVMgLUROT05BV1MgLUROT0xFQVJOIFwKLQkkKEtGTEFHUykgLU8iICJMTktGTEFHUz0i ICJMSUJTID0gLWx0ZXJtbGliIgotCi0jU3lzdGVtIFYgUjMuMiBmb3IgUENzIGJ1aWx0IG9uIElu dGVyYWN0aXZlIFVOSVggU1YvMzg2IFI0LngKLSNidXQgd2l0aCBhbGwgY2FsbHMgdG8gZHVwMigp IGRpc2FibGVkIGJlY2F1c2UgZ2VuZXJpYyBTVlIzIGRvZXMgbm90IGhhdmUgZHVwMi4KLSMgKFRo ZSAtbGluZXQgbGlicmFyeSBtaWdodCBub3QgbmVlZCB0byBiZSBpbiB0aGlzIG9uZS4pCi1zeXM1 cjMyaXM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3lzdGVtIFYvMzg2 IFIzMgotCSQoTUFLRSkgd2VybWl0IENDPSIkKENDKSIgQ0MyPSIkKENDMikiIFwKLQkiQ0ZMQUdT ID0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtTyAtRE5PQ1NFVFMgLUROT1JFQUxQQVRIIFwK LQktRFVJRF9UPXVzaG9ydCAtREdJRF9UPXVzaG9ydCAtREkzODZJWCAtRFNWUjNKQyAtRENLX0NV UlNFUyAtRE5PTkFXUyBcCi0JLURQT1NJWF9KQyAtRENLX1JFRElSIC1EQ0tfUE9MTCAtRERDTEdF VENXRCAtRE5PRkRaRVJPIC1ETk9SRURJUkVDVCBcCi0JLUROT1pFWEVDIC1ETk9MRUFSTiAkKEtG TEFHUykiICJMSUJTPS1sY3Vyc2VzIC1sY19zIC1saW5ldCIKLQotI1N5c3RlbSBWIFIzLjIgZm9y IFBDcyBidWlsdCBvbiBJbnRlcmFjdGl2ZSBVTklYIFNWLzM4NiBSNC54Ci0jYnV0IHdpdGggYWxs IGNhbGxzIHRvIGR1cDIoKSBkaXNhYmxlZCBiZWNhdXNlIGdlbmVyaWMgU1ZSMyBkb2VzIG5vdCBo YXZlIGR1cDIuCi0jV2l0aCBUQ1AvSVAgYWRkZWQuCi1zeXM1cjMyaXNuZXQ6Ci0JQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3lzdGVtIFYvMzg2IFIzMiArIFRDUC9JUAotCSQo TUFLRSkgd2VybWl0IENDPSIkKENDKSIgQ0MyPSIkKENDMikiIFwKLQkiQ0ZMQUdTID0gLURTVlIz IC1ERElSRU5UIC1ESERCVVVDUCAtTyAtRE5PQ1NFVFMgLUROT1JFQUxQQVRIIFwKLQktRFVJRF9U PXVzaG9ydCAtREdJRF9UPXVzaG9ydCAtREkzODZJWCAtRFNWUjNKQyAtRENLX0NVUlNFUyAtRE5P TkFXUyBcCi0JLURQT1NJWF9KQyAtRENLX1JFRElSIC1EQ0tfUE9MTCAtRERDTEdFVENXRCAtRE5P RkRaRVJPIC1ETk9SRURJUkVDVCBcCi0JLUROT0xFQVJOIC1ETk9aRVhFQyAtRFRDUFNPQ0tFVCAk KEtGTEFHUykiICJMSUJTPS1sY3Vyc2VzIC1sY19zIC1saW5ldCIKLQotaWNsc3lzNXIzOgotCW1h a2Ugc3lzNXIzIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gS0ZMQUdTPS1ESUNMU1ZSMwotCi0j QVQmVCBVTklYIFN5c3RlbSBWIFIzLiAgQXMgYWJvdmUsIGJ1dCBubyBBTlNJIHByb3RvdHlwaW5n Lgotc3lzNXIzbmE6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBV TklYIFN5c3RlbSBWIFIzLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAotCSJDRkxBR1M9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0FOU0kgLURO T0xFQVJOICQoS0ZMQUdTKSAtTyIgXAotCSJMTktGTEFHUz0iCi0KLSNBVCZUIFVOSVggU3lzdGVt IFYgUjMsIGZvciAzQiBjb21wdXRlcnMgd2l0aCBXb2xsb25nb25nIFRDUC9JUC4KLXN5czVyM25l dDNiOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTVlIz LzNCL1dvbGxvbmdvbmcuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIkNGTEFHUyA9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLURXT0xMT05HT05H IC1ETk9MRUFSTiAkKEtGTEFHUykgXAotCS1PIiAiTElCUz0gLWxuZXQgLWxuc2xfcyIgIkxOS0ZM QUdTID0iCi0KLSNBVCZUIFVOSVggU3lzdGVtIFYgUjMsIHNpZ25hbCgpIGlzIHZvaWQgcmF0aGVy IHRoYW4gaW50LgotI1VzZXMgZGlyZW50LmggYW5kIEhvbmV5IERhbkJlciB1dWNwLCBoYXMgPHRl cm1pb3guaD4uCi0jSGFzIDx0ZXJtaW94Lmg+IGZvciBSVFMvQ1RTIGZsb3cgY29udHJvbC4KLXN5 czVyM3R4OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBT eXN0ZW0gViBSMy4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKLQkiQ0ZMQUdTID0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRFRFUk1JT1ggLUROT0xF QVJOIFwKLQkkKEtGTEFHUykgLWkgLU8iICJMTktGTEFHUyA9IgotCi0jQVQmVCBVTklYIFN5c3Rl bSBWIFIzLCBzaWduYWwoKSBpcyB2b2lkIHJhdGhlciB0aGFuIGludC4KLSNVc2VzIGRpcmVudC5o IGFuZCBIb25leSBEYW5CZXIgdXVjcCwgaGFzIDx0ZXJtaW94Lmg+LgotI0hhcyA8c3lzL3Rlcm1p b3guaD4gZm9yIFJUUy9DVFMgZmxvdyBjb250cm9sLgotc3lzNXIzc3g6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3RlbSBWIFIzLi4uJwotCSQoTUFL RSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtRFNWUjMg LURESVJFTlQgLURIREJVVUNQIC1EU1RFUk1JT1ggLUROT0xFQVJOIFwKLQkkKEtGTEFHUykgLWkg LU8iICJMTktGTEFHUyA9IgotCi0jQVQmVCBVTklYIFN5c3RlbSBWIFI0LgotI0hhcyA8dGVybWlv eC5oPi4KLXN5czVyNDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZU IFVOSVggU3lzdGVtIFYgUjQuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURURVJN SU9YIC1ETk9MRUFSTiAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtcyIKLQotI0FUJlQgVU5J WCBTeXN0ZW0gViBSNCB3aXRoIFdvbGxvbmdvbmcgVENQL0lQLgotI0hhcyA8dGVybWlveC5oPi4K LXN5czVyNG5ldDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTeXN0ZW0g ViBSNCArIFdvbGxvbmdvbmcgVENQL0lQLi4uJwotCUBlY2hvICcgSWYgc29ja2V0cy1saWJyYXJ5 IHJvdXRpbmVzIGFyZSBtaXNzaW5nIGF0IGxpbmsgdGltZSwgdGhlbicKLQlAZWNobyAnIHRyeSB0 aGUgc3lzNXI0bmV0MiBlbnRyeS4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0xF QVJOIFwKLQktRFRFUk1JT1ggLURXT0xMT05HT05HICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMi Ci0KLSNBcyBhYm92ZSwgYnV0IG5lZWRzIGxpYnMgaW5jbHVkZWQuCi1zeXM1cjRuZXQyOgotCUBl Y2hvICcgUExFQVNFIFJFQUQgY2t1aW5zLnR4dCBJRiBZT1UgR0VUIE1JU1NJTkcgSEVBREVSIEZJ TEVTLicKLQlAZWNobyAnIChTZWFyY2ggZm9yIFdPTExPTkdPTkcuLi4pJwotCSQoTUFLRSkgc3lz NXI0bmV0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkxJQlM9IC1sc29ja2V0IC1sbnNsIgot Ci0jQXMgYWJvdmUgcGx1cyBjdXJzZXMuCi1zeXM1cjRuZXQyYzoKLQllY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIFN5c3RlbSBWIFI0ICsgV29sbG9uZ29uZyBUQ1AvSVAuLi4nCi0J QGVjaG8gJyBQTEVBU0UgUkVBRCBja3VpbnMudHh0IElGIFlPVSBHRVQgTUlTU0lORyBIRUFERVIg RklMRVMuJwotCUBlY2hvICcgKFNlYXJjaCBmb3IgV09MTE9OR09ORy4uLiknCi0JJChNQUtFKSB3 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EU1ZSNCAt RERJUkVOVCAtREhEQlVVQ1AgLUROT0xFQVJOIFwKLQktRFRFUk1JT1ggLURXT0xMT05HT05HIC1E Q0tfQ1VSU0VTICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiIFwKLQkiTElCUz0gLWxzb2NrZXQg LWxuc2wgLWxjdXJzZXMiCi0KLSNERUxMIFVOSVggU3lzdGVtIFYgUjQuCi0jSGFzIDxzeXMvdGVy bWlveC5oPiwgcmVndWxhciBCZXJrZWxleSBzb2NrZXRzIGxpYnJhcnksIGkuZS4gaW4uaCBhbmQg aW5ldC5oCi0jYXJlIG5vdCBtaXNwbGFjZWQgaW4gc3lzIChyYXRoZXIgdGhhbiBuZXRpbmV0IGFu ZCBhcnBhLCByZXNwZWN0aXZlbHkpLgotI1VzZXMgQU5TSSBDIGNvbnN0cnVjdHMsIGFkdmlzb3J5 IGZpbGUgbG9ja2luZyBvbiBkZXZpY2VzLCBldGMuCi0jV2FybmluZzogLURTVEVSTUlPWCBlbmFi bGVzIGhhcmR3YXJlIGZsb3cgY29udHJvbCAoUlRTL0NUUyksIGJ1dCByZXBvcnRlZGx5Ci0jdGhp cyBkb2VzIG5vdCB3b3JrIHdpdGggdGhlIG5vcm1hbCBkcml2ZXJzLiAgSG93ZXZlciwgaXQgbWln aHQgc3RpbGwgd29yawotI29uIG5vbi1EZWxsIHN5c3RlbXMsIG9yIGV2ZW4gRGVsbCBzeXN0ZW1z IHdpdGggZGlmZmVyZW50IGRyaXZlcnMgaW5zdGFsbGVkLgotZGVsbHN5czVyNDoKLQlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBERUxMIFVOSVggU3lzdGVtIFYgUjQuLi4nCi0J JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1P IC1EU1ZSNCAtRERFTExfU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgXAotCS1EVENQU09DS0VUIC1E U1RFUk1JT1ggLURDS19QT0xMICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHNvY2tldCAtbG5zbCIg IkxOS0ZMQUdTID0gLXMiCi0KLSNBcyBhYm92ZSwgY3Vyc2VzIHN1cHBvcnQgYWRkZWQuLi4KLWRl bGxzeXM1cjRjOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERFTEwgVU5J WCBTeXN0ZW0gViBSNC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURTVlI0IC1EREVMTF9TVlI0IC1ERElSRU5UIC1ESERCVVVD UCBcCi0JLURUQ1BTT0NLRVQgLURTVEVSTUlPWCAtRENLX0NVUlNFUyAtRENLX1BPTEwgXAotCSQo S0ZMQUdTKSIgIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCIgIkxOS0ZM QUdTID0gLXMiCi0KLSNNaW5pbXVtIGludGVyYWN0aXZlOiBBcyBhYm92ZSwgYnV0IHdpdGggZXZl cnkgY29uY2VpdmFibGUgb3B0aW9uIHJlbW92ZWQuCi1kZWxsc3lzNXI0bWk6Ci0JQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREVMTCBVTklYIFN5c3RlbSBWIFI0Li4uJwotCUBl Y2hvICdNaW5pbXVtLXNpemUgaW50ZXJhY3RpdmUnCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRERFTExfU1ZSNCAtRERJ UkVOVCBcCi0JLVVUQ1BTT0NLRVQgLUROT0NNREwgLUROT1NQTCAtRE5PWE1JVCAtRENLX1BPTEwg XAotCS1ETk9NU0VORCAtRE5PRlJJTExTIC1ETk9ESUFMIC1ETk9IRUxQIC1ETk9ERUJVRyAtRE5P VExPRyBcCi0JLUROT1NDUklQVCAtRE5PQ1NFVFMgLUROT1NIT1cgLUROT1NFVEtFWSAtRE5PU0VS VkVSIC1ETk9VVUNQIFwKLQktRE5PUFVTSCAtRE5PTURNSFVQIC1ETk9KQyAtRE5PRkRaRVJPIC1E Tk9FU0NTRVEgIFwKLQkkKEtGTEFHUykiICJMTktGTEFHUyA9IC1zIgotCi0jQ29tbWFuZC1saW5l IG9ubHkgdmVyc2lvbi4KLWRlbGxzeXM1cjRtOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIERFTEwgVU5JWCBTeXN0ZW0gViBSNC4uLicKLQlAZWNobyAnQ29tbWFuZC1saW5l IG9ubHknCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNG TEFHUyA9IC1PIC1EU1ZSNCAtRERFTExfU1ZSNCAtRERJUkVOVCBcCi0JLVVUQ1BTT0NLRVQgLURO T0lDUCAtRE5PRlJJTExTIC1ETk9ESUFMIC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PQ1NFVFMgXAot CS1ETk9TRVRLRVkgLUROT0VTQ1NFUSAtRE5PSkMgLUROT0ZEWkVSTyAtRENLX1BPTEwgXAotCSQo S0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiCi0KLSNBVCZUIFVOSVggU3lzdGVtIFYgUjQuCi0jSGFz IDxzeXMvdGVybWlveC5oPi4KLXN5czVyNHN4OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gViBSNC4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURTVlI0IC1ERElSRU5UIC1E SERCVVVDUCAtRFNURVJNSU9YIC1ETk9MRUFSTiBcCi0JJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAt cyIgIkxJQlM9JChMSUJTKSIKLQotI0FUJlQgVU5JWCBTeXN0ZW0gViBSNC4KLSNIYXMgPHN5cy90 ZXJtaW94Lmg+LCByZWd1bGFyIEJlcmtlbGV5IHNvY2tldHMgbGlicmFyeSwgaS5lLiBpbi5oIGFu ZCBpbmV0LmgKLSNhcmUgbm90IG1pc3BsYWNlZCBpbiBzeXMgKHJhdGhlciB0aGFuIG5ldGluZXQg YW5kIGFycGEsIHJlc3BlY3RpdmVseSkuCi0jVXNlcyBBTlNJIEMgY29uc3RydWN0cywgPHN5cy90 ZXJtaW94Lmg+LCBldGMgZXRjLgotc3lzNXI0c3h0Y3A6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3RlbSBWIFI0Li4uJwotCSQoTUFLRSkgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURESVJF TlQgLURIREJVVUNQIFwKLQktRFNURVJNSU9YIC1EVENQU09DS0VUICQoS0ZMQUdTKSIgXAotCSJM SUJTPSAtbHNvY2tldCAtbG5zbCAkKExJQlMpIiAiTE5LRkxBR1M9IC1zIgotCi0jQVQmVCBVTklY IFN5c3RlbSBWIFI0LgotI0FzIGFib3ZlICsgY3Vyc2VzLgotc3lzNXI0c3h0Y3BjOgotCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gViBSNC4uLicK LQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0g LU8gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCBcCi0JLURTVEVSTUlPWCAgLURDS19DVVJTRVMg LURUQ1BTT0NLRVQgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2Vz IC1sdGVybWNhcCAkKExJQlMpIiAiTE5LRkxBR1MgPSAtcyIKLQotI0FUJlQgVU5JWCBTeXN0ZW0g ViBSNC4gIENPTlNFTlNZUyBTVlI0LjItMS4KLSNIYXMgPHN5cy90ZXJtaW94Lmg+LCByZWd1bGFy IEJlcmtlbGV5IHNvY2tldHMgbGlicmFyeSwgaS5lLiBpbi5oIGFuZCBpbmV0LmgKLSNhcmUgbm90 IG1pc3BsYWNlZCBpbiBzeXMgKHJhdGhlciB0aGFuIG5ldGluZXQgYW5kIGFycGEsIHJlc3BlY3Rp dmVseSkuCi0jVXNlcyBBTlNJIEMgY29uc3RydWN0cywgPHN5cy90ZXJtaW94Lmg+LCBldGMuCi0j IEZ1bGxzY3JlZW4gLURDS19DVVJTRVMgYWRkZWQgKHdpdGggY3Vyc2VzICYgdGVybWNhcCBsaWJz KQotIyBTdWJtaXNzaW9uIGJ5IFJvYmVydCBXZWluZXIvUHJvZ3JhbW1pbmcgUGx1cywgcndlaW5l ckB3YXRzdW4uY2MuY29sdW1iaWEuZWR1Ci1zeXM1cjRzeHRjcGY6Ci0JQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3RlbSBWIFI0Li4uJwotCSQoTUFLRSkg eGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAtRFNWUjQg LURESVJFTlQgLURIREJVVUNQIFwKLQktRFNURVJNSU9YIC1EVENQU09DS0VUIC1EQ0tfQ1VSU0VT ICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHNvY2tldCAtbG5zbCAtTC91c3IvY2NzL2xpYiAtbGN1 cnNlcyAtbHRlcm1jYXAiIFwKLQkiTElCUz0kKExJQlMpIiAiTE5LRkxBR1MgPSAtcyIKLQotI1Nt YWxsZXN0IHBvc3NpYmxlIHZlcnNpb24gZm9yIFN5c3RlbSBWIFI0Ci1zNXI0bToKLQlAZWNobyBN aW5pbXVtIHNpemUKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czVyNHN4IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9JChLRkxBR1MpIC1ETk9ESUFMIC1ETk9IRUxQIC1E Tk9ERUJVRyAtRE5PVExPRyBcCi0JLUROT1NDUklQVCAtRE5PQ1NFVFMgLUROT0lDUCAtRE5PTVNF TkQgLVVUQ1BTT0NLRVQiICJMTktGTEFHUyA9IC1zIgotCi0jU21hbGxlc3QgcG9zc2libGUgaW50 ZXJhY3RpdmUgdmVyc2lvbiBvZiBhYm92ZQotczVyNG1pOgotCUBlY2hvIE1pbmltdW0gaW50ZXJh Y3RpdmUKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czVyNHN4IFwKLQkiS0ZMQUdTPS1ETk9T UEwgLUROT1hNSVQgLUROT01TRU5EIC1ETk9GUklMTFMgLUROT1NIT1cgXAotCS1ETk9ESUFMIC1E Tk9IRUxQIC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PU0NSSVBUIC1ETk9DU0VUUyAtRE5PU0VUS0VZ IFwKLQktVVRDUFNPQ0tFVCAkKEtGTEFHUykiICJMTktGTEFHUyA9IC1zIgotCi0jQVQmVCBVTklY IFN5c3RlbSBWIFI0LCBoYXMgPHN5cy90ZXJtaW94Lmg+Ci0jQU5TSSBDIGZ1bmN0aW9uIHByb3Rv dHlwaW5nIGRpc2FibGVkLgotc3lzNXI0c3huYToKLQlAZWNobyBObyBBTlNJIEMgcHJvdG90eXBp bmcuLi4KLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czVyNHN4IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAotCSJLRkxBR1M9JChLRkxBR1MpIC1ETk9BTlNJIgotCi0jU3RyYXR1cyBGVFgu Ci1mdHg6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3RyYXR1cyBGVFgg My54Li4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJD RkxBR1MgPSAtTyAtRFNWUjQgLURGVFggLURESVJFTlQgLURIREJVVUNQIC1EU1RFUk1JT1ggXAot CS1ETk9HRVRVU0VSU0hFTEwgLUROT0xFQVJOICtEQTEuMSAkKEtGTEFHUykiIFwKLQkiTE5LRkxB R1MgPSAtcyIgIkxJQlM9JChMSUJTKSIKLQotI1N0cmF0dXMgRlRYICsgVENQL0lQLgotZnR4dGNw OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN0cmF0dXMgRlRYIDMueC4u LicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdT ID0gLU8gLURTVlI0IC1ERlRYIC1ERElSRU5UIC1ESERCVVVDUCAtRE5PR0VUVVNFUlNIRUxMIFwK LQktRFNURVJNSU9YIC1EVENQU09DS0VUIC1ETk9fRE5TX1NSViArREExLjEgJChLRkxBR1MpIiBc Ci0JIkxJQlM9IC1sc29ja2V0IC1sbnNsICQoTElCUykiICJMTktGTEFHUz0gLXMiCi0KLSNOQ1Ig TVAtUkFTIDIuMDMgb3IgMy4wMgotbXByYXM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgTkNSIE1QLVJBUy4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURTVlI0IC1ETkNSTVBSQVMgLURESVJFTlQgLURI REJVVUNQIC1EU1RFUk1JT1ggXAotCS1ETk9HRVRVU0VSU0hFTEwgLURVU0VfRklMRV9fQ05UIC1E Tk9MRUFSTiAtRE5PX0ROU19TUlYgJChLRkxBR1MpIiBcCi0JIkxOS0ZMQUdTID0gLXMiICJMSUJT PSQoTElCUykiCi0KLSNOQ1IgTVAtUkFTIDIuMDMgb3IgMy4wMiB3aXRoIFRDUC9JUCBhbmQgY3Vy c2VzCi1tcHJhc3RjcGM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTkNS IE1QLVJBUyArIFRDUC9JUCArIGN1cnNlcy4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9ICJDRkxBR1M9LURUQ1BTT0NLRVQgXAotCS1EQ0tfQ1VSU0VTIC1EU1ZS NCAtRE5DUk1QUkFTIC1ERElSRU5UIC1ESERCVVVDUCAtRFNURVJNSU9YIC1ETk9MRUFSTiBcCi0J LUROT0dFVFVTRVJTSEVMTCAtRE5PX0ROU19TUlYgRFVTRV9GSUxFX19DTlQgLU8gJChLRkxBR1Mp IiBcCi0JIkxOS0ZMQUdTID0gLXMiICJMSUJTPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRl cm1jYXAgJChMSUJTKSIKLQotI1NJTklYLUwgVjUuNDEgLSBpbmNsdWRlcyBjdXJzZXMsIHRjcC9p cCAtIFVzZSB0aGlzIG9uZSBmb3IgaTM4Ni4KLSNUaGlzIHZlcnNpb24gb2YgU0lOSVggZG9lc24n dCBsaWtlIGZkb3BlbigpIG9yIHBvcGVuKCkuCi1zaW5peDU0MToKLQlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBTaWVtZW5zL05peGRvcmYgU0lOSVggVjUuNDEvaTM4NicKLQkk KE1BS0UpIGNrY3Byby4kKEVYVCkgIkNGTEFHUyA9IC1EU0lOSVggLURTVlI0IC1ERElSRU5UIC1E SERCVVVDUCBcCi0JLURTVEVSTUlPWCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAtRFNFTEVDVCAt RENLX0FOU0lDIC1ETk9fRE5TX1NSViBcCi0JLURTTkk1NDEgLUROT0dFVFVTRVJTSEVMTCAtRE5P TkVUQ01EIC1ETk9QT1BFTiAta2Fuc2kgLVcwICQoS0ZMQUdTKSIKLQkkKE1BS0UpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURTSU5JWCAtRFNWUjQgLURE SVJFTlQgLURIREJVVUNQIC1ETk9fRE5TX1NSViAtRE5PUE9QRU4gXAotCS1ERk5GTE9BVCAtRFNU RVJNSU9YIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIC1EU0VMRUNUIC1EQ0tfQU5TSUMgXAotCS1E U05JNTQxIC1ETk9HRVRVU0VSU0hFTEwgLUROT05FVENNRCAta2Fuc2kgLVcwIC1PICQoS0ZMQUdT KSIgXAotCSJMSUJTPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxtIiAiTE5L RkxBR1MgPSAtcyIKLQotc2luaXg1NDFpOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgIktGTEFH Uz0kKEtGTEFHUykiIHNpbml4NTQxCi0KLSNTSU5JWCBWNS40MiAtIGluY2x1ZGVzIGN1cnNlcywg dGNwL2lwLCBldmVyeXRoaW5nIC0gVXNlIHRoaXMgb25lIGZvciBNSVBTLgotIyBBcyBvZiBDLUtl cm1pdCA3LjEsIG9wdGltaXphdGlvbiByZW1vdmVkIC0tIHRha2VzIChsaXRlcmFsbHkpIGZvcmV2 ZXIuCi1zaW5peDU0MjoKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKLQkiQ0ZMQUdTID0gLURTSU5JWCAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1ETk9fRE5T X1NSViBcCi0JLURGTkZMT0FUIC1EU1RFUk1JT1ggLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURT RUxFQ1QgLURDS19BTlNJQyBcCi0JLURTTkk1NDIgLUROT0dFVFVTRVJTSEVMTCAta2Fuc2kgLVcw ICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAg LWxtIiAiTE5LRkxBR1MgPSAtcyIKLQotI1NJTklYIFY1LjQyIGdjYyAtIGluY2x1ZGVzIGN1cnNl cywgdGNwL2lwLCBldmVyeXRoaW5nLgotI1RoaXMgb25lIHdhcyB1c2VkIHRvIGJ1aWxkIHRoZSBQ eXJhbWlkLWFyY2hpdGVjdHVyZSBSTTYwMCB2ZXJzaW9uCi0jb24gU0lOSVgtUCA1LjQyIEExMCB3 aXRoIGdjYyBidXQgc2hvdWxkIHdvcmsgZm9yIFNJTklYIDUuNDIgb24gYW55IG90aGVyCi0jYXJj aGl0ZWN0dXJlIHdpdGggZ2NjLgotc2luaXg1NDJnOgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gIkNDPWdjYyIgIkNDMj1nY2MiIFwKLQkiQ0ZMQUdTID0gLURTSU5J WCAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1ETk9fRE5TX1NSViBcCi0JLURGTkZMT0FUIC1E U1RFUk1JT1ggLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURTRUxFQ1QgLURDS19BTlNJQyBcCi0J LURTTkk1NDIgLUROT0dFVFVTRVJTSEVMTCAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxzb2NrZXQg LWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIC1sbSIgXAotCSJMTktGTEFHUyA9IC1zIgotCi0jU0lO SVggVjUuNDIgLSBpbmNsdWRlcyBjdXJzZXMsIHRjcC9pcCwgZXZlcnl0aGluZyAtIFVzZSB0aGlz IG9uZSBmb3IgSW50ZWwuCi0jIChOb3RlOiBTTkkgZGlzY29udGludWVkIEludGVsIHN1cHBvcnQg YWZ0ZXIgNS40Mi4pCi1zaW5peDU0Mmk6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgU2llbWVucy9OaXhkb3JmIFNJTklYLVogVjUuNDIuLi4nCi0JJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EU0lOSVggLURTVlI0IC1E RElSRU5UIC1ESERCVVVDUCAtREZORkxPQVQgLURTVEVSTUlPWCBcCi0JLURDS19DVVJTRVMgLURU Q1BTT0NLRVQgLURTRUxFQ1QgLURDS19BTlNJQyAtRE5PX0ROU19TUlYgLWthbnNpIFwKLQktRFNO STU0MiAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJt Y2FwIC1sbSIgXAotCSJMTktGTEFHUyA9IC1zIgotCi0jU2llbWVucyBOaXhkb3JmIFJlbGlhbnQg VU5JWCBWNS40MyAtIGluY2x1ZGVzIGN1cnNlcywgdGNwL2lwLCBldmVyeXRoaW5nOgotIyAuIGdl dHRpbWVvZmRheSgpIHN1ZGRlbmx5IGhhcyBvbmx5IG9uZSBhcmcgaW5zdGVhZCBvZiB0d28gKEdU T0RPTkVBUkcpLgotIyAuIFRoZSBzeW50YXggb2YgdGhlIE9saW1pdCBzcGVjaWZpZXIgY2hhbmdl ZC4KLSMgLiBUaGUgbmFtZSB3YXMgY2hhbmdlZCBmcm9tIFNJTklYIHRvIFJlbGlhbnQgVU5JWCBp biB2ZXJzaW9uIDUuNDNDLgotc25pNTQzOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIFNpZW1lbnMvTml4ZG9yZiBSZWxpYW50IFVOSVggVjUuNDMnCi0JJChNQUtFKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EU0lOSVggLURTTkk1 NDMgLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCBcCi0JLURTVEVSTUlPWCAtRENLX0NVUlNFUyAt RFRDUFNPQ0tFVCAtRFNFTEVDVCAtRENLX0FOU0lDIC1ER1RPRE9ORUFSRyBcCi0JLUROT19ETlNf U1JWIC1rYW5zaSAtVzAgLU8gLUYgT2xpbWl0LDMxMDAgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1s c29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCIgIkxOS0ZMQUdTID0gLXMiCi0KLSNTaWVt ZW5zIE5peGRvcmYgUmVsaWFudCBVTklYIFY1LjQ0IC0gTGlrZSA1LjQzIGJ1dCB3aXRoIGRpZmZl cmVudCBiYW5uZXIuCi1zbmk1NDQ6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgU2llbWVucy9OaXhkb3JmIFJlbGlhbnQgVU5JWCBWNS40NCcKLQkkKE1BS0UpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURTSU5JWCAtRFNOSTU0NCAt RFNWUjQgLURESVJFTlQgLURIREJVVUNQIFwKLQktRFNURVJNSU9YIC1EQ0tfQ1VSU0VTIC1EVENQ U09DS0VUIC1EU0VMRUNUIC1EQ0tfQU5TSUMgLURHVE9ET05FQVJHIFwKLQktRE5PX0ROU19TUlYg LWthbnNpIC1XMCAtTyAtSyBPbGltaXQsMzEwMCAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxzb2Nr ZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIiAiTE5LRkxBR1MgPSAtcyIKLQotI0NvbW1vZG9y ZSBBbWlnYSB3aXRoIEFUJlQgVU5JWCBTeXN0ZW0gViBSNCBhbmQgVENQL0lQIHN1cHBvcnQuCi0j SGFzIDxzeXMvdGVybWlveC5oPi4KLXN2cjRhbWlnYW5ldDoKLQlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBBbWlnYSBTVlI0ICsgVENQL0lQLi4uJwotCSQoTUFLRSkgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDPWdjYyIgIkNDMj1nY2MiIFwKLQkiQ0ZMQUdT ID0gLU8gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRFNURVJNSU9YIFwKLQktRFRDUFNPQ0tF VCAtRENLX0NVUlNFUyAkKEtGTEFHUykiICJMTktGTEFHUyA9IC1zIiBcCi0JIkxJQlMgPSAtbHNv Y2tldCAtbG5zbCAtbHRlcm1saWIiCi0KLSNTQ08gKE5vdmVsbCAoVW5pdmVsKSkgVW5peFdhcmUg MS54IG9yIDIuMCwgbm8gVENQL0lQLgotI1RoaXMgYXNzdW1lcyB0aGUgTm92ZWxsIFNESyAxLjAs IHdoaWNoIGhhcyA8c3lzL3Rlcm1pb3guaD4uCi0jVW5peFdhcmUgdXNlcnMgd2l0aCB0aGUgIlBy aW1lIFRpbWUgRnJlZXdhcmUiIENELVJPTSBTREsgd2lsbCBwcm9iYWJseSBoYXZlCi0jdG8gdXNl IHRoZSBzeXM1cjQgZW50cnkgKG5vIHRlcm1pb3guaCBmaWxlLCBzbyBubyBoYXJkd2FyZSBmbG93 IGNvbnRyb2wpLgotI0NoYW5nZSAtRFNFTEVDVCB0byAtRENLX1BPTEwgaWYgLURTRUxFQ1QgY2F1 c2VzIHByb2JsZW1zLgotIyBOT1RFOiBVbml4d2FyZSAxLnggYnVpbGRzIGhhdmUgbm90IGJlZW4g dHJpZWQgaW4gQy1LZXJtaXQgNy4wLgotdW5peHdhcmU6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0Up IiBzeXM1cjRzeCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1ET0xEX1VO SVhXQVJFIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRE5PR0VUVVNFUlNIRUxMIFwKLQktRE5PU1lT TE9HICQoS0ZMQUdTKSIgIkxJQlM9LWxjcnlwdCIKLQotI1VuaXhXYXJlIDEueCBvciAyLjAgd2l0 aCBUQ1AvSVAgYW5kIGN1cnNlcy4KLSNmb3JrKCktYmFzZWQgQ09OTkVDVCAtIG5vIGhpZ2ggc2Vy aWFsIHNwZWVkcy4KLXVuaXh3YXJlbmV0YzoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czVy NHN4dGNwYyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1ET0xEX1VOSVhX QVJFIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRE5PR0VUVVNFUlNIRUxMIFwKLQktRE5PU1lTTE9H ICQoS0ZMQUdTKSIgIkxJQlM9LWxjcnlwdCAtbHJlc29sdiIKLQotdXcxMDoKLQkkKE1BS0UpIHVu aXh3YXJlbmV0YyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1M9JChLRkxBR1MpIgot Ci0jVGhpcyBpcyBmb3IgVW5peHdhcmUgMi4wLnggb25seSAtIHVzZSB1bml4d2FyZTIxIGZvciBV VyAyLjEueC4KLSNIYXMgc3BlY2lhbCBsaWJyYXJ5IHNlYXJjaCBhbmQgZW5hYmxlcyBzcGVjaWFs IGtsdWRnZSBhcm91bmQgbGlicmFyeQotI2ZvdWx1cCByZWdhcmRpbmcgdmZvcmsoKSAod2hpY2gg S2VybWl0IGRvZXNuJ3QgdXNlKS4gIEZvcmNlcyBQT1NJWC1zdHlsZQotI2hhbmd1cC4KLXVuaXh3 YXJlMjA6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVW5peFdhcmUgMi4w LnguLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNG TEFHUyA9IC1PIC1ET0xEX1VOSVhXQVJFIC1EVU5JWFdBUkUyIC1EU0VMRUNUIC1EU1ZSNCAtRERJ UkVOVCBcCi0JLURIREJVVUNQIC1EQklHQlVGT0sgLUROT0dFVFVTRVJTSEVMTCAtRFNURVJNSU9Y ICAtRENLX0NVUlNFUyBcCi0JLURUQ1BTT0NLRVQgLURVVzIwMCAtREZORkxPQVQgLURDS19ORVdU RVJNIC1ETk9TWVNMT0cgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sY3Vy c2VzIC1sdGVybWNhcCAtbGNyeXB0IC1sZ2VuIC1sbSAtbHJlc29sdiIgXAotCSJMTktGTEFHUyA9 IC1zIgotCi11dzIwOgotCSQoTUFLRSkgdW5peHdhcmUyMCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9ICJLRkxBR1M9JChLRkxBR1MpIgotCi0jQWRkcyBiaWcgYnVmZmVycyAoImxhcmdlIG1lbW9y eSBtb2RlbCIpIC0gb3RoZXJ3aXNlIHRoZSBzYW1lIGFzIFVuaXhXYXJlIDEueC4KLXVuaXh3YXJl MjE6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVW5peFdhcmUgMi4xLngu Li4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFH UyA9IC1PIC1EVU5JWFdBUkUgLURTRUxFQ1QgLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtREJJ R0JVRk9LIFwKLQktRE5PU1lTTE9HIC1EU1RFUk1JT1ggIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VU IFwKLQktRENLX05FV1RFUk0gLURGTkZMT0FUIC1EVU5JWFdBUkUyICQoS0ZMQUdTKSIgXAotCSJM SUJTPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCAtbG0gLWxyZXNv bHYgXAotCSQoTElCUykiICJMTktGTEFHUyA9IC1zIgotCi0jVW5peHdhcmUgMi4xLjAKLXV3MjE6 Ci0JJChNQUtFKSB1bml4d2FyZTIxIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUz0k KEtGTEFHUykiCi0KLSNVbml4d2FyZSAyLjEuMwotdXcyMTM6Ci0JJChNQUtFKSB1bml4d2FyZTIx IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURVU0VfRklMRV9fQ05UICQo S0ZMQUdTKSIKLQotI1VuaXh3YXJlIDIuMSB3aXRoIElLU0Qgc3VwcG9ydAotdXcyMWlrc2Q6Ci0J JChNQUtFKSB1bml4d2FyZTIxIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9 LURDS19TSEFET1cgJChLRkxBR1MpIiAiTElCUz0gLWxnZW4iCi0KLSNVbml4V2FyZSA3IHdpdGgg dGNbZ3NdZXRzcGVlZCgpIGhpZ2ggc2VyaWFsIHNwZWVkcyAmIHNlbGVjdCgpLWJhc2VkIENPTk5F Q1QKLSNhbmQgYXMgb2YgQy1LZXJtaXQgOC4wLjIxMiwgbGFyZ2UgZmlsZSBzdXBwb3J0IChMRlMp LgotI05PVEU6IFRoaXMgaXMgdGhlIG9uZSB3ZSB1c2UuCi11bml4d2FyZTd0OgotCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFVuaXhXYXJlIDcgd2l0aCBQT1NJWCBpL28uLi4n Ci0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9 IC1PIC1EVU5JWFdBUkUgLURTRUxFQ1QgLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtREJJR0JV Rk9LIFwKLQktREZORkxPQVQgLUROT0dFVFVTRVJTSEVMTCAtRFNURVJNSU9YIC1EQ0tfQ1VSU0VT IC1EVENQU09DS0VUIC1EUE9TSVggXAotCS1EVVc3IC1EVVNFVENTRVRTUEVFRCAtRENLX05FV1RF Uk0gLUROT0xTVEFUIC1ERENMVElNRVZBTCBcCi0JLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxF X09GRlNFVF9CSVRTPTY0IC1ETkVFRE1ETURFRlMgJChLRkxBR1MpIiBcCi0JIkxJQlM9LWxzb2Nr ZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIC1sY3J5cHQgLWxtIC1scmVzb2x2ICQoTElCUyki IFwKLQkiTE5LRkxBR1MgPSAtcyIKLQotI1VuaXhXYXJlIDcgLSBzZWxlY3QoKS1iYXNlZCBDT05O RUNUIC0gbm8gUE9TSVggaS9vIC0gbm8gaGlnaCBzZXJpYWwgc3BlZWRzLgotI0luIG90aGVyIHdv cmRzLCBqdXN0IGxpa2UgdGhlIFVuaXhXYXJlIDEgYW5kIDIgYnVpbGRzLgotdW5peHdhcmU3eDoK LQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbml4V2FyZSA3Li4uJwotCSQo TUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAt RFVOSVhXQVJFIC1EU0VMRUNUIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURCSUdCVUZPSyBc Ci0JLURVVzcgLUROT0dFVFVTRVJTSEVMTCAtRFNURVJNSU9YIC1EQ0tfQ1VSU0VTIC1EVENQU09D S0VUIC1ETk9MU1RBVCBcCi0JLURGTkZMT0FUIC1EQ0tfTkVXVEVSTSAkKEtGTEFHUykiIFwKLQki TElCUz0tbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCAtbG0gLWxyZXNv bHYgJChMSUJTKSIgXAotCSJMTktGTEFHUyA9IC1zIgotCi0jVW5peFdhcmUgNyB3aXRoIFBPU0lY IGNmc2V0W29pXXNwZWVkKCkgdG8gYWxsb3cgaGlnaCBzZXJpYWwgc3BlZWRzLgotIyhidXQgdGhl IGhpZ2ggc3BlZWRzIGRvbid0IHdvcmspCi11bml4d2FyZTdwOgotCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIFVuaXhXYXJlIDcgd2l0aCBQT1NJWCBpL28uLi4nCi0JJChNQUtF KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EVU5J WFdBUkUgLURTRUxFQ1QgLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtREJJR0JVRk9LIFwKLQkt RFVXNyAtRE5PR0VUVVNFUlNIRUxMIC1EU1RFUk1JT1ggLURDS19DVVJTRVMgLURUQ1BTT0NLRVQg LURQT1NJWCBcCi0JLURGTkZMT0FUIC1EQ0tfTkVXVEVSTSAtRE5PTFNUQVQgJChLRkxBR1MpIiBc Ci0JIkxJQlM9LWxzb2NrZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIC1sY3J5cHQgLWxtIC1s cmVzb2x2ICQoTElCUykiIFwKLQkiTE5LRkxBR1MgPSAtcyIKLQotIyBVbml4V2FyZSA3IGJ1aWx0 IHdpdGggZ2NjIC0gVGhpcyBkb2VzIG5vdCB3b3JrIGF0IGFsbC4uLgotIyBSZXBvcnRlZGx5IGdj YyAyLjguMSBpcyBicm9rZW4gb24gVW5peHdhcmUgNy4gIFRyeSBlZ2NzPwotdW5peHdhcmU3ZzoK LQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbml4V2FyZSA3IHdpdGggZ2Nj Li4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDQyA9 IGdjYyIgIkNDMiA9IGdjYyIgIkxOS0ZMQUdTID0gLXMgLXNobGliIgotCSJDRkxBR1MgPSAtTyAt RFVOSVhXQVJFIC1EU0VMRUNUIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURCSUdCVUZPSyBc Ci0JLURVVzcgLUROT0dFVFVTRVJTSEVMTCAtRFNURVJNSU9YICAtRENLX0NVUlNFUyAtRFRDUFNP Q0tFVCAtRE5PTFNUQVQgXAotCS1ERk5GTE9BVCAtRENLX05FV1RFUk0gJChLRkxBR1MpIiBcCi0J IkxJQlM9LWxzb2NrZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIC1sY3J5cHQgLWxtIC1scmVz b2x2ICQoTElCUykiIFwKLQkiTE5LRkxBR1MgPSAtcyIKLQotdW5peHdhcmU3OgotCSQoTUFLRSkg Ik1BS0U9JChNQUtFKSIgIktGTEFHUz0kKEtGTEFHUykiIHVuaXh3YXJlN3QgXAotCUtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0KLQotdXc3OgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgIktGTEFH Uz0kKEtGTEFHUykiIHVuaXh3YXJlN3QgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQot I1NDTyBPcGVuVU5JWCA4LjAKLW91ODoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBPcGVuIFVOSVggOC4uLicKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiICJLRkxBR1M9LURP VTggJChLRkxBR1MpIiB1bml4d2FyZTd0IFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0K LSNVbml4V2FyZSA3IHdpdGggT3BlblNTTAotdXc3c3NsIHV3Nytzc2w6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVW5peFdhcmUgNyBhbmQgT3BlblNTTC4uLicKLQkkKE1B S0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURD S19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAtRENLX1NIQURPVyBcCi0JLURVTklYV0FSRSAtRFNF TEVDVCAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1EQklHQlVGT0sgXAotCS1ERk5GTE9BVCAt RE5PR0VUVVNFUlNIRUxMIC1EU1RFUk1JT1ggLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURQT1NJ WCBcCi0JLURVVzcgLURVU0VUQ1NFVFNQRUVEIC1EQ0tfTkVXVEVSTSAtRE5PTFNUQVQgLUREQ0xU SU1FVkFMIFwKLQkkKFNTTElOQykgJChLRkxBR1MpIiBcCi0JIkxJQlM9LWxzb2NrZXQgLWxuc2wg LWxjdXJzZXMgLWx0ZXJtY2FwIC1sY3J5cHQgLWxtIC1scmVzb2x2IFwKLQktbGdlbiAtbGN1ZGs3 MCAkKFNTTExJQikgLWxzc2wgLWxjcnlwdG8gJChMSUJTKSIgXAotCSJMTktGTEFHUyA9IC1zIgot Ci0jQXMgYWJvdmUgYnV0IGluY2x1ZGVzIFNoYWRvdyBwYXNzd29yZCBzdXBwb3J0IG5lZWRlZCBm b3IgSUtTRC4KLXV3N2lrc2Q6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiAiS0ZMQUdTPS1EQ0tf U0hBRE9XICQoS0ZMQUdTKSIgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkxJQlM9IC1s Z2VuIiB1bml4d2FyZTd0Ci0KLSNBcyBhYm92ZSBidXQgbGlua3Mgd2l0aCBzdGF0aWMgQVBJIGZv ciByZWFscGF0aCgpIHNvIGEgYmluYXJ5IGJ1aWx0Ci0jd2l0aCB0aGlzIHRhcmdldCBvbiBVVzcu MSB3aWxsIGFsc28gd29yayBvbiA3LjAuICBSZXF1aXJlcyBTQ08gVURLCi0jcmF0aGVyIHRoYW4g dGhlIHN0b2NrIGNvbXBpbGVyLgotdXc3aWtzZHVkazoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSki ICJLRkxBR1M9LURDS19TSEFET1cgJChLRkxBR1MpIiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSAiTElCUz0gLWxnZW4gLWxjdWRrNzAiIHVuaXh3YXJlN3QKLQotI0VTSVggU1ZSNC4wLjMg b3IgNC4wNCB3aXRoIFRDUC9JUCBzdXBwb3J0LgotI0hhcyA8c3lzL3Rlcm1pb3guaD4sIEFOU0kg QyBmdW5jdGlvbiBwcm90b3R5cGluZyBkaXNhYmxlZC4KLSNBZGQgLW00ODYgdG8gQ0ZMQUdTIGlm IGRlc2lyZWQuCi1lc2l4cjQ6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig RVNJWCBTVlI0ICsgVENQL0lQLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1ETk9B TlNJIFwKLQktRFNURVJNSU9YIC1EVENQU09DS0VUICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMi IFwKLQkiTElCUyA9IC1sc29ja2V0IC1sbnNsIgotCi0jQVQmVCBVTklYIFN5c3RlbSBWIFI0Lgot I0hhcyA8c3lzL3Rlcm1pb3guaD4sIFdvbGxvbmdvbmcgV0lOL1RDUCBUQ1AvSVAuCi1zeXM1cjRz eG5ldDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lz dGVtIFYgUjQuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc Ci0JIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgXAotCS1EU1RFUk1JT1gg LURXT0xMT05HT05HICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiCi0KLSNBVCZUIFVOSVggU3lz dGVtIFYgUjQsIG5vIDx0ZXJtaW8ueD4gb3IgPHN5cy90ZXJtaW8ueD4uCi1zeXM1cjRueDoKLQlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lzdGVtIFYgUjQu Li4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFH UyA9IC1PIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0xFQVJOICQoS0ZMQUdTKSIgXAot CSJMTktGTEFHUyA9IC1zIgotCi0jQVQmVCBVTklYIFN5c3RlbSBWIFI0LCBubyA8dGVybWlvLng+ IG9yIDxzeXMvdGVybWlvLng+LCBjdXJzZXMsIFRDUC9JUC4KLXN5czVyNG54bmV0YzoKLQlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lzdGVtIFYgUjQuLi4n Ci0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9 IC1PIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgXAotCS1EQ0tfQ1VSU0VTIC1EVENQU09DS0VU ICQoS0ZMQUdTKSIgXAotCSJMSUJTID0gLWxjdXJzZXMgLWxzb2NrZXQgLWxuc2wgLWx0Y3BpcCIg XAotCSJMTktGTEFHUyA9IC1zIgotCi0jQVQmVCBVTklYIFN5c3RlbSBWIFI0LCBubyA8dGVybWlv Lng+IG9yIDxzeXMvdGVybWlvLng+LCBXb2xsb25nb25nIFRDUC9JUC4KLXN5czVyNG54dHdnOgot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gViBS NC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZM QUdTID0gLU8gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRFdPTExPTkdPTkcgJChLRkxBR1Mp IgotCSJMTktGTEFHUyA9IC1zIgotCi0jSUNMIFVOSVggU3lzdGVtIFYgUjQuKERSUyBOL1gpIHZl cnNpb24gOi0KLSNVTklYIFN5c3RlbSBWIFJlbGVhc2UgNC4wIElDTCBEUlMgNjAwMCAoU1BBUkMp Ci0jRFJTL05YIDYwMDAgU1ZSNCBWZXJzaW9uIDUgIExldmVsIDEgIEluY3JlbWVudCA0Ci0jSGFz IDxzeXMvdGVybWlveC5oPiwgcmVndWxhciBCZXJrZWxleSBzb2NrZXRzIGxpYnJhcnksIGkuZS4g aW4uaCBhbmQgaW5ldC5oCi0jYXJlIG5vdCBtaXNwbGFjZWQgaW4gc3lzIChyYXRoZXIgdGhhbiBu ZXRpbmV0IGFuZCBhcnBhLCByZXNwZWN0aXZlbHkpLgotI1VzZXMgQU5TSSBDIGNvbnN0cnVjdHMs IGFkdmlzb3J5IGZpbGUgbG9ja2luZyBvbiBkZXZpY2VzLCBldGMuCi0jUmVtb3ZlIC1sbnNsIGlm IGl0IGNhdXNlcyB0cm91YmxlLgotaWNsc3lzNXI0OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIElDTCBVTklYIFN5c3RlbSBWIFI0IChEUlMgTi9YKScKLQkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURTVlI0IC1E SUNMX1NWUjQgLURESVJFTlQgLURIREJVVUNQIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1EU1RFUk1J T1ggLURUQ1BTT0NLRVQgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1scmVz b2x2ICIgIkxOS0ZMQUdTID0gLXMiCi0KLSNBcyBhYm92ZSBidXQgZm9yIERSUy9OWCA0LjJNUCA3 TVBsdXMuCi1pY2xzeXM1cjRtKzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBJQ0wgVU5JWCBTeXN0ZW0gViBSNCBEUlMvTlggNC4yTVArJwotCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURJQ0xfU1ZS NCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0lLU0QgXAotCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQg JChLRkxBR1MpIiBcCi0JIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sbSAtbGMgLWcgLWxnZW4gIiAi TE5LRkxBR1MgPSAtcyIKLQotI0FzIGFib3ZlIGJ1dCBmb3IgRFJTL05YIDQuMk1QIDdNUGx1cyB3 aXRoIElLU0Qgc3VwcG9ydC4KLWljbHN5czVyNG0raWtzZDoKLQlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBJQ0wgVU5JWCBTeXN0ZW0gViBSNCBEUlMvTlggNC4yTVArJwotCSQo TUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAt RFNWUjQgLURJQ0xfU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0dFVFVTRVJTSEVMTCBcCi0J LURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxzb2NrZXQgLWxu c2wgLWxtIC1sYyAtZyAtbGdlbiAtbHJlc29sdiAiICJMTktGTEFHUyA9IC1zIgotCi1pY2xzeXM1 cjRfNDg2OgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgaWNsc3lzNXI0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0KLQotI0RhdGEgR2VuZXJhbCBERy9VWCA0LjMwIChTeXN0ZW0gViBSMykgZm9y IERHIEFWaWlPTiwgd2l0aCBUQ1AvSVAgc3VwcG9ydC4KLWRndXg0MzA6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREcgQVZpaU9OIERHL1VYIDQuMzAuLi4nCi0JJChNQUtF KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EREdV WDQzMCAtRFNWUjMgLURESVJFTlQgLURUQ1BTT0NLRVQgXAotCS1ETk9JTkFERFJYIC1ETk9HRVRV U0VSU0hFTEwgJChLRkxBR1MpIgotCi0jRGF0YSBHZW5lcmFsIERHL1VYIDQuMzAgZm9yIERHIEFW aWlPTiwgd2l0aCBUQ1AvSVAgc3VwcG9ydCB3aXRoIEJTRGlzbXMuCi1kZ3V4NDMwYnNkOgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERHIEFWaWlPTiBERy9VWCA0LjMwLi4u JwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1Mg PSAtTyAtRERHVVg0MzAgLURfQlNEX1NPVVJDRSAtREJTRDQgXAotCS1ETk9JTkFERFJYIC1EVENQ U09DS0VUIC1ETk9HRVRVU0VSU0hFTEwgJChLRkxBR1MpIgotCi0jRGF0YSBHZW5lcmFsIERHL1VY IDUuNCAoU3lzdGVtIFYgUjQpIGZvciBERyBBVmlpT04sIHdpdGggVENQL0lQIHN1cHBvcnQuCi0j QWRkIC1sc29ja2V0IC1sbnNsIGlmIGluZXRfYWRkciBjb21lcyB1cCBtaXNzaW5nLi4uCi0jSG1t bSAtIEkgcmVhbGx5IHRoaW5rIENLX1BPTEwgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGlzIG9uZSBp biB3aGljaCBjYXNlCi0jdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGRndXg1NDAgYW5k IGRndXg1NDBpLgotZGd1eDU0MDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBERyBBVmlpT04gREcvVVggNS40MC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURER1VYNTQwIC1ERElSRU5UIC1ESERCVVVD UCAtRE5PSU5BRERSWCBcCi0JLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtRENLX1BPTEwgLUROT0dF VFVTRVJTSEVMTCAkKEtGTEFHUykiCi0KLSNEYXRhIEdlbmVyYWwgREcvVVggNS40MCAoU3lzdGVt IFYgUjQpIGZvciBJbnRlbCBBVmlpT04sIHdpdGggVENQL0lQIHN1cHBvcnQuCi1kZ3V4NTQwaToK LQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBERyBBVmlpT04gREcvVVggNS40 MC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZM QUdTID0gLU8gLURER1VYNTQwIC1ERElSRU5UIC1ESERCVVVDUCAtRE5PSU5BRERSWCBcCi0JLURT VEVSTUlPWCAtRFRDUFNPQ0tFVCAtRE5PR0VUVVNFUlNIRUxMICQoS0ZMQUdTKSIgXAotCSJMSUJT ID0gLWxzb2NrZXQgLWxuc2wiCi0KLWRndXg1NDoKLQltYWtlIGRndXg1NDAgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfQotCi0jRGF0YSBHZW5lcmFsIERHL1VYIDUuNCAoPSBTeXN0ZW0gViBSNCkg Zm9yIERHIEFWaWlPTiwgd2l0aCBUQ1AvSVAgc3VwcG9ydC4KLSMgQW5kIGN1cnNlcy4KLWRndXg1 NDBjOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERHIEFWaWlPTiBERy9V WCA1LjQuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IkNGTEFHUyA9IC1PIC1EREdVWDU0MCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0lOQUREUlggXAot CS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ETk9HRVRV U0VSU0hFTEwgXAotCSQoS0ZMQUdTKSIgIkxJQlM9IC1sY3Vyc2VzOCAtbHRlcm1jYXAiICJMTktG TEFHUyA9IC1zIgotCi0jQXMgYWJvdmUgYnV0IGZvciBJbnRlbCAtIG9ubHkgZGlmZmVyZW5jZSBp cyBuYW1lIGxpYnJhcnkgbmFtZXMuCi1kZ3V4NTQwaWM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgREcgQVZpaU9OIERHL1VYIDUuNDAuLi4nCi0JJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EREdVWDU0MCAtRERJ UkVOVCAtREhEQlVVQ1AgLUROT0lOQUREUlggXAotCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgLURD S19DVVJTRVMgLURDS19ORVdURVJNIC1ETk9HRVRVU0VSU0hFTEwgXAotCSQoS0ZMQUdTKSIgIkxJ QlMgPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAiCi0KLWRndXg1NGM6Ci0JbWFr ZSBkZ3V4NTQwYyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSNERy9VWCA1LjRSMy4xMAot ZGd1eDU0MzEwOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERHIEFWaWlP TiBERy9VWCA1LjRSMy4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKLQkiQ0ZMQUdTID0gLURER1VYNTQwIC1EREdVWDU0MzEwIC1ERElSRU5UIC1ESERCVVVD UCAtRFNFTEVDVCBcCi0JLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRENLX05F V1RFUk0JLUROT0dFVFVTRVJTSEVMTCBcCi0JLUROT0lOQUREUlggJChLRkxBR1MpIiAiTElCUz0g LWxjdXJzZXM4IC1sdGVybWNhcCIgIkxOS0ZMQUdTID0gLXMiCi0KLSNERy9VWCA1LjRSNC4xMCAt IEluY2x1ZGVzIGV2ZXJ5dGhpbmcuCi1kZ3V4NTQ0MTA6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgREcvVVggNS40UjQuMTAuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EREdVWDU0MCAtRERHVVg1NDQx MCAtRERJUkVOVCAtREhEQlVVQ1AgLURTRUxFQ1QgXAotCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQg LURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1ETk9JTkFERFJY ICQoS0ZMQUdTKSIgIkxJQlMgPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAiCi0K LSNERy9VWCA1LjRSNC4xMSAtIEluY2x1ZGVzIGV2ZXJ5dGhpbmcuCi1kZ3V4NTQ0MTE6Ci0JQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREcvVVggNS40UjQuMTEuLi4nCi0JJChN QUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1E REdVWDU0MCAtRERHVVg1NDQxMSAtRERJUkVOVCAtREhEQlVVQ1AgLURTRUxFQ1QgXAotCS1EU1RF Uk1JT1ggLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ETk9HRVRVU0VSU0hF TEwgXAotCS1ETk9JTkFERFJYICQoS0ZMQUdTKSIgIkxJQlMgPSAtbHNvY2tldCAtbG5zbCAtbGN1 cnNlcyAtbHRlcm1jYXAiCi0KLSNERy9VWCA1LjRSNC4yMCAtIEluY2x1ZGVzIGV2ZXJ5dGhpbmcu Ci1kZ3V4NTQ0MjA6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREcvVVgg NS40UjQuMjAuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc Ci0JIkNGTEFHUyA9IC1PIC1EREdVWDU0MCAtRERHVVg1NDQyMCAtRERJUkVOVCAtREhEQlVVQ1Ag LURTRUxFQ1QgXAotCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgLURDS19ORVdU RVJNIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1ETk9JTkFERFJYICQoS0ZMQUdTKSIgXAotCSJMSUJT ID0gLWxzb2NrZXQgLWxyZXNvbHYgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIgotCi0jU2lsaWNv biBHcmFwaGljcyBTeXN0ZW0gViBSMyB3aXRoIEJTRCBmaWxlIHN5c3RlbSAoSVJJUykKLWlyaXM6 Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTaWxpY29uIEdyYXBoaWNzIElS SVggcHJlLTMuMy4uLgotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAotCSJDRkxBR1MgPSAtTyAtRFNWUjMgLURMT05HRk4gLUROT0xFQVJOICQoS0ZMQUdTKSAtSS91 c3IvaW5jbHVkZS9ic2QiIFwKLQkiTElCUyA9IC1sYnNkIgotCi0jU2lsaWNvbiBHcmFwaGljcyBJ UklTIFN5c3RlbSBWIFIzCi1pcml4MzM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgU2lsaWNvbiBHcmFwaGljcyBJUklYIDMuMy4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURTVlIzIC1ERElSRU5UIC1ESERC VVVDUCAtRE5PTEVBUk4gJChLRkxBR1MpIC1PIiBcCi0JIkxOS0ZMQUdTID0gLXMiCi0KLSNTaWxp Y29uIEdyYXBoaWNzIElyaXMgSW5kaWdvIHdpdGggSVJJWCA0LjAuMCBvciA1LjAuLi4KLSNTdHJp Y3QgQU5TSSBDIGNvbXBpbGF0aW9uLCBUQ1AvSVAgc3VwcG9ydCBpbmNsdWRlZAotaXJpeDQwOgot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpbGljb24gR3JhcGhpY3MgSVJJ WCA0LjAuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IkNGTEFHUyA9IC1ESVJJWDQwIC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLURQV0lEX1Q9dWlk X3QgXAotCS1EQ0tfQU5TSUMgLURUQ1BTT0NLRVQgJChLRkxBR1MpIC1PIC1PbGltaXQgMTYwMCAt SS91c3IvaW5jbHVkZS9ic2QiIFwKLQkiTE5LRkxBR1MgPSAtcyIKLQotI0FzIGFib3ZlLCBidXQg d2l0aCBmdWxsc2NyZWVuIGRpc3BsYXkgKGN1cnNlcykgYW5kIFN1biBZZWxsb3cgUGFnZXMgc3Vw cG9ydC4KLSNOT1RFOiBJUklYIHZlcnNpb25zIHByaW9yIHRvIDUgcnVuIENPRkYgYmluYXJpZXMu Ci1pcml4NDB5cGM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2lsaWNv biBHcmFwaGljcyBJUklYIDQuMC4nCi0JQGVjaG8gJ0luY2x1ZGVzIGZ1bGxzY3JlZW4gZmlsZSBk aXNwbGF5IGFuZCBTdW4gWWVsbG93IFBhZ2VzLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtRElSSVg0MCAtRFNWUjMgLURESVJFTlQg LURIREJVVUNQIC1EQ0tfQ1VSU0VTIFwKLQktRFBXSURfVD11aWRfdCAtRENLX0FOU0lDIC1EVENQ U09DS0VUICQoS0ZMQUdTKSBcCi0JLU8gLU9saW1pdCAxNjAwIC1JL3Vzci9pbmNsdWRlL2JzZCIg XAotCSJMSUJTID0gLWxjdXJzZXMgLWxzdW4iICJMTktGTEFHUyA9IC1zIgotCi0jIFNpbGljb24g R3JhcGhpY3MgSXJpcyBTZXJpZXMgNEQvKiwgSVJJWCA0LjAueCwgLU80IHVjb2RlIG9wdGltaXpl ZC4KLSMgSHVnZSB0ZW1wb3JhcnkgZmlsZSBzcGFjZSBuZWVkZWQgZm9yIHVjb2RlIG9wdGltaXpl ci4gIElmIHlvdSBnZXQgYW4gZXJyb3IKLSMgbGlrZSAidWdlbjogaW50ZXJuYWwgZXJyb3Igd3Jp dGluZyB0byAvdG1wL2N0bWNhMDg3Nzc6IEVycm9yIDAiLCBkZWZpbmUgdGhlCi0jIHRoZSBUTVBE SVIgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gcG9pbnQgdG8gYSBmaWxlIHN5c3RlbSB0aGF0IGhh cyBtb3JlCi0jIHNwYWNlIGF2YWlsYWJsZSwgZS5nLiAic2V0ZW52IFRNUERJUiAvdXNyL3RtcCIu Ci1pcml4NDB1OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpbGljb24g R3JhcGhpY3MgSVJJWCA0LjAuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCi0JIkNGTEFHUyA9IC1ESVJJWDQwIC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1Ag LURQV0lEX1Q9dWlkX3QgXAotCS1EQ0tfQU5TSUMgLURUQ1BTT0NLRVQgJChLRkxBR1MpIC1PNCAt T2xpbWl0IDE2MDAiIFwKLQkiTE5LRkxBR1M9LU80IC1PbGltaXQgMTYwMCAtcyIgIkVYVD11Igot Ci0jIEFzIGFib3ZlLCB3aXRoIEN1cnNlcyBTdXBwb3J0IGFkZGVkCi1pcml4NDB1YzoKLQlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTaWxpY29uIEdyYXBoaWNzIElSSVggNC4w Li4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxB R1MgPSAtRElSSVg0MCAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQIC1EUFdJRF9UPXVpZF90IFwK LQktRENLX0FOU0lDIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUICQoS0ZMQUdTKSAtTzQgLU9saW1p dCAxNjAwIiBcCi0JIkxOS0ZMQUdTPS1PNCAtT2xpbWl0IDE2MDAgLXMiICJFWFQ9dSIgIkxJQlM9 IC1sY3Vyc2VzIC1sdGVybWNhcCIKLQotI1NpbGljb24gR3JhcGhpY3MgSVJJWCA1LnguCi0jWWVs bG93IFBhZ2VzIGFuZCBDdXJzZXMgc3VwcG9ydCBpbmNsdWRlZC4KLSNJUklYIHZlcnNpb24gNS54 IGNhbiBydW4gQ09GRiBvciBFTEYgYmluYXJpZXMuCi1pcml4NTE6Ci0JQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgU2lsaWNvbiBHcmFwaGljcyBJUklYIDUueCcKLQlAZWNobyAn SW5jbHVkZXMgZnVsbHNjcmVlbiBmaWxlIGRpc3BsYXkgYW5kIFllbGxvdyBQYWdlcy4uLicKLQlA ZWNobyAnQWRkIC1taXBzPG4+IHRvIENGTEFHUyBzcGVjaWZ5IGEgcGFydGljdWxhciBoYXJkd2Fy ZSB0YXJnZXQuJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAot CSJDRkxBR1MgPSAtRElSSVg1MSAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1EQ0tfQ1VSU0VT IC1EQ0tfTkVXVEVSTSBcCi0JLURQV0lEX1Q9dWlkX3QgLURDS19BTlNJQyAtRFRDUFNPQ0tFVCAt RFNFTEVDVCAtRE5PR0VUVVNFUlNIRUxMIFwKLQktRFNZU1RJTUVIIC1ERENMUE9QRU4gLUREQ0xG RE9QRU4gJChLRkxBR1MpIC1hbnNpIC1PIC1PbGltaXQgMzAwMCIgXAotCSJMSUJTID0gLWxjdXJz ZXMiICJMTktGTEFHUyA9IC1zIgotCi0jVXNlIHRoaXMgb25lIGlmIGlyaXg1MSBibG93cyB1cCBk dWUgdG8gbGFjayBvZiBzd2FwIHNwYWNlIG9yIHdoYXRldmVyLgotaXJpeDUxeDoKLQlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTaWxpY29uIEdyYXBoaWNzIElSSVggNS54Jwot CUBlY2hvICdJbmNsdWRlcyBmdWxsc2NyZWVuIGZpbGUgZGlzcGxheSBhbmQgWWVsbG93IFBhZ2Vz Li4uJwotCUBlY2hvICdBZGQgLW1pcHM8bj4gdG8gQ0ZMQUdTIHNwZWNpZnkgYSBwYXJ0aWN1bGFy IGhhcmR3YXJlIHRhcmdldC4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIkNGTEFHUyA9IC1ESVJJWDUxIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURD S19DVVJTRVMgLURDS19ORVdURVJNIFwKLQktRFBXSURfVD11aWRfdCAtRENLX0FOU0lDIC1EVENQ U09DS0VUIC1EU0VMRUNUIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1EU1lTVElNRUggLUREQ0xQT1BF TiAtRERDTEZET1BFTiAkKEtGTEFHUykiIFwKLQkiTElCUyA9IC1sY3Vyc2VzIiAiTE5LRkxBR1Mg PSAtcyIKLQotaXJpeDUxeXBjOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgaXJpeDUxIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9ICQoS0ZMQUdTKSIKLQotI0lSSVggNS4y IGFkZHMgUlRTL0NUUwotaXJpeDUyOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgaXJpeDUxIEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURJUklYNTIgLURDS19SVFNDVFMg JChLRkxBR1MpIgotCi1pcml4NTM6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBpcml4NTEgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRElSSVg1MiAtRElSSVg1MyAtRENL X1JUU0NUUyAkKEtGTEFHUykiCi0KLWlyaXg1M3g6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBp cml4NTF4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURJUklYNTIgLURJ UklYNTMgLURDS19SVFNDVFMgJChLRkxBR1MpIgotCi0jU2lsaWNvbiBHcmFwaGljcyBJUklYIDYu WzAyNF0gY29tbW9uIHN0dWZmLgotI1llbGxvdyBQYWdlcyBhbmQgQ3Vyc2VzIHN1cHBvcnQgaW5j bHVkZWQuCi0jSVJJWCB2ZXJzaW9uIDYuMCBhbmQgbGF0ZXIgcnVucyBvbmx5IEVMRiBiaW5hcmll cy4KLSNEZXBlbmRzIG9uIGNvZGUgY2hhbmdlcyBpbiBja2NkZWIuaCB0aGF0IG1ha2UgLURJUklY NnggZGVmaW5lIGFsbAotI2xvd2VyIElSSVg2eCB2YWx1ZXMgYW5kIElSSVg1MS4KLWlyaXg2eDoK LQlAZWNobyAnSW5jbHVkZXMgZnVsbHNjcmVlbiBmaWxlIGRpc3BsYXkgYW5kIFllbGxvdyBQYWdl cy4uLicKLQlAZWNobyAnQWRkIC1taXBzPG4+IHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIGhhcmR3 YXJlIHRhcmdldC4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc Ci0JIkNGTEFHUyA9IC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0dFVFVTRVJTSEVMTCBc Ci0JLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1EUFdJRF9UPXVpZF90IC1EQ0tfQU5TSUMgLURU Q1BTT0NLRVQgXAotCS1EU0VMRUNUIC1EQ0tfUlRTQ1RTIC1PICQoS0ZMQUdTKSIgXAotCSJMSUJT ID0gLWxjdXJzZXMiICJMTktGTEFHUyA9IC1zICQoTE5LRkxBR1MpIgotCi0jU2lsaWNvbiBHcmFw aGljcyBJUklYIDYuMC4KLWlyaXg2MDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBTaWxpY29uIEdyYXBoaWNzIElSSVggNi4wJwotCUAkKE1BS0UpICJNQUtFPSQoTUFLRSki IFwKLQkiS0ZMQUdTPS1ESVJJWDYwIC1PbGltaXQgMjEzOCAkKEtGTEFHUykiIFwKLQlpcml4Nngg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi0jU2lsaWNvbiBHcmFwaGljcyBJUklYIDYuMi4K LSNTZXJpYWwgc3BlZWRzID4gMzg0MDAgYXJlIGF2YWlsYWJsZSBpbiBJUklYIDYuMiBvbiBPLWNs YXNzIG1hY2hpbmVzIG9ubHkuCi0jTm90ZTogT2xpbWl0IG11c3QgYmUgYSBudW1iZXIgPiAwLgot aXJpeDYyOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpbGljb24gR3Jh cGhpY3MgSVJJWCA2LjInCi0JQCQoTUFLRSkgIk1BS0U9JChNQUtFKSIgXAotCUxOS0ZMQUdTPSIt V2wsLXdvZmYsODQiIFwKLQkiS0ZMQUdTPS1ESVJJWDYyIC1PbGltaXQgNDcwMCAkKEtGTEFHUyki IFwKLQlpcml4NnggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi0jU2lsaWNvbiBHcmFwaGlj cyBJUklYIDYuMy4KLWlyaXg2MzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBTaWxpY29uIEdyYXBoaWNzIElSSVggNi4zJwotCUAkKE1BS0UpICJNQUtFPSQoTUFLRSkiIGly aXg2MiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1ESVJJWDYzIgotCi0j U2lsaWNvbiBHcmFwaGljcyBJUklYIDYuNC4KLSMgLXdvZmYsODQgdG8gbGlua2VyIHN0b3BzIGNv bXBsYWludHMgYWJvdXQgbm8gc3ltYm9scyBsb2FkZWQgZnJvbQotIyBjdXJzZXMsIGFuZCAtd29m ZiAxMTEwIHN0b3BzIGNvbXBsYWludHMgYWJvdXQgdW5yZWFjaGFibGUgImJyZWFrOyIKLSMgc3Rh dGVtZW50cyBpbiBja2Nwcm8uYyBhbW9uZyBvdGhlcnMuCi0jIHRlc3RlZCBvbiBTR0kgT2N0YW5l LCBydW5uaW5nIElSSVggNi40IHVwIHRvIDExNTIwMCBicHMuCi0jIC1PbGltaXQgMCBtZWFucyBp bmZpbml0ZS4KLWlyaXg2NDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBT aWxpY29uIEdyYXBoaWNzIElSSVggNi40JwotCUAkKE1BS0UpICJNQUtFPSQoTUFLRSkiIFwKLQlM TktGTEFHUz0iLVdsLC13b2ZmLDg0IiBcCi0JIktGTEFHUz0tRElSSVg2NCAtRENLX1JUU0NUUyAt T2xpbWl0IDMwMDAgLXdvZmYgMTExMCAkKEtGTEFHUykiIFwKLQlpcml4NnggS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfQotCi1pcml4NjRnY2M6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgU2lsaWNvbiBHcmFwaGljcyBJUklYIDYuNCBnY2MnCi0JJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZM QUdTPSAtRFNWUjQgLURJUklYNjQgLURESVJFTlQgLURIREJVVUNQIC1ETk9HRVRVU0VSU0hFTEwg XAotCS1EU0VMRUNUIC1EUFdJRF9UPXVpZF90IC1EVENQU09DS0VUIC1ETk9DT1RGTUMgXAotCS1E Q0tfQU5TSUMgLURDS19SVFNDVFMgLURDS19ORVdURVJNIC1EQ0tfQ1VSU0VTIFwKLQkkKEtGTEFH UykgLU8iICJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCIKLQotI05vdGUgdGhlIG5l dyBPcHRpbWl6YXRpb24gb3B0aW9uIHN5bnRheCBmb3IgTUlQU3BybyBDQyA3LjIuMS4ybS4KLSNT ZWUgbm90ZSBvbiBpcml4NjVnY2MgdGFyZ2V0IGFib3V0IExhcmdlIEZpbGUgU3VwcG9ydCAoTEZT KS4KLWlyaXg2NToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTR0kgSVJJ WCA2LjUnCi0JQCQoTUFLRSkgIk1BS0U9JChNQUtFKSIgTE5LRkxBR1M9Ii1XbCwtd29mZiw4NCIg XAotCSJLRkxBR1M9LURJUklYNjUgLURfTEFSR0VGSUxFX1NPVVJDRSAtRENLX1JUU0NUUyAtT1BU Ok9saW1pdD0wIFwKLQktd29mZiAxMTEwLDE1NTIsMTE3NCAkKEtGTEFHUykiIFwKLQlpcml4Nngg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi0jQnVpbGQgZm9yIHRob3NlIHRoYXQgaGF2ZSBH Q0MgaW5zdGVhZCBvZiBNSVBTcHJvLgotIwotIyBMYXJnZSBGaWxlIFN1cHBvcnQgbm90ZTogdXNl IHRoZSBkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UgdG8gZW5hYmxlIHN1cHBvcnQKLSMgZm9yIGZp bGVzIGxhcmdlciB0aGFuIDJHQi4gIFRoaXMgbWF5IHdvcmsgb24gcmVsZWFzZXMgb2YgSXJpeCBw cmlvciB0bwotIyA2LjUueHguICBUbyB2ZXJpZnksIGNoZWNrIHRoZSBtYW4gcGFnZSBmb3IgZnN0 YXQgYW5kIHZlcmlmeSB0aGF0IG9mZl90IGlzIGEKLSMgNjQgYml0IHZhbHVlIGZvciBhbiAtbjMy IGJ1aWxkLiAgQWxzbyBjaGVjayB0aGUgbWFucGFnZSBmb3IgZnNlZWsgYW5kIGZ0ZWxsCi0jIHRv IHZlcmlmeSB0aGF0IHRoZSBmc2VlazY0IGFuZCBmdGVsbDY0IGZ1bmN0aW9ucyBhcmUgcHJvdmlk ZWQuICBJZiBzbywgdGhlbgotIyBMRlMgc3VwcG9ydCBzaG91bGQgd29yayBhbmQgeW91IGNhbiB0 cnkgYWRkaW5nIC1EX0xBUkdFRklMRV9TT1VSQ0UgdG8gQ0ZMQUdTCi0jIGZvciB5b3VyIHNlbGVj dGVkIElyaXggdGFyZ2V0LgotIwotaXJpeDY1Z2NjOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIFNHSSBJUklYIDYuNSB3aXRoIGdjYycKLQkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZM QUdTPSAtRFNWUjQgLURJUklYNjUgLURfTEFSR0VGSUxFX1NPVVJDRSAtRERJUkVOVCAtREhEQlVV Q1AgXAotCS1ETk9HRVRVU0VSU0hFTEwgLURTRUxFQ1QgLURQV0lEX1Q9dWlkX3QgLURUQ1BTT0NL RVQgLUROT0NPVEZNQyBcCi0JLURDS19BTlNJQyAtRENLX1JUU0NUUyAtRENLX05FV1RFUk0gLURD S19DVVJTRVMgXAotCSQoS0ZMQUdTKSAtTyIgIkxJQlM9IC1sY3Vyc2VzIgotCi0jIFRoZSA2NC1i aXQgSVJJWCB0YXJnZXQgd29ya3MgYnV0IHByZXN1bWFibHkgaXMgbm8gbG9uZ2VyIG5lZWRlZCBn aXZlbiB0aGUKLSMgbGFyZ2UgZmlsZSBzdXBwb3J0IGluIHRoZSBtb3JlIHBvcnRhYmxlIGFuZCBj b21wYWN0IDMyLWJpdCB2ZXJzaW9uLgotaXJpeDY1XzY0OgotCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgNjQtYml0IGZvciBTR0kgSVJJWCA2LjUnCi0JQCQoTUFLRSkgIk1BS0U9JChN QUtFKSIgTE5LRkxBR1M9Ii1XbCwtd29mZiw4NCIgXAotCSJLRkxBR1M9LURJUklYNjUgLTY0IC1E Q0tfUlRTQ1RTIC1PUFQ6T2xpbWl0PTAgLXdvZmYgMTExMCwxNTUyLDExNzQgXAotCS1EQ0tfNjRC SVQgJChLRkxBR1MpIiBcCi0JaXJpeDZ4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotI0R1 bWIgZG93biB0byBNSVBTLTIgaWYgYnVpbGRpbmcgb24gUjUwMDAgb3IgaGlnaGVyLi4uCi1pcml4 NjVtaXBzMjoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTR0kgSVJJWCA2 LjUgTUlQUy0yJwotCUAkKE1BS0UpICJNQUtFPSQoTUFLRSkiIExOS0ZMQUdTPSItbzMyIC1taXBz MiAtV2wsLXdvZmYsODQiIFwKLQkiS0ZMQUdTPS1ESVJJWDY1IC1EQ0tfUlRTQ1RTIC1PUFQ6T2xp bWl0PTAgLW8zMiAtbWlwczIgXAotCS13b2ZmIDExMTAsMTU1MiwxMTc0ICQoS0ZMQUdTKSIgXAot CWlyaXg2eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSNTcGVjaWFsIHRhcmdldCB0aGF0 IGFkZHMgc3JwLCBzc2wsIGFuZCB6bGliIHN1cHBvcnQuICBUaGlzIHJlcXVpcmVzCi0jdGhhdCB5 b3UgaGF2ZSBwa2dzcmMgaW5zdGFsbGVkIGluc3RlYWQgb2YgSXJpeCBGcmVld2FyZS4gIFNlZQot I05ldEJTRC5vcmcgZm9yIHBrZ3NyYyBmb3IgSXJpeC4gIFlvdSB3aWxsIG5lZWQgdG8gQlVJTEQg dGhlIHNycF9jbGllbnQKLSNwYWNrYWdlIHlvdXJzZWxmLiAgSW5zdGFsbCBpdCBtYW51YWxseSB1 c2luZyB0aGUgZGlyZWN0aW9ucyBmb3VuZAotI2luIHRoZSBuZXRic2RzK3NzbCtzcnAremxpYiB0 YXJnZXQgY29tbWVudHMuCi1pcml4NjUrc3NsK3NycCt6bGliOgotCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIElSSVggNi41IHdpdGggZ2NjIGFuZCBTU0wgU1JQIFpMSUInCi0J JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNDID0gZ2NjIiAi Q0MyID0gZ2NjIiBcCi0JIkNGTEFHUz0gLURJUklYNjUgLURTVlI0IC1ERElSRU5UIC1ESERCVVVD UCAtRE5PR0VUVVNFUlNIRUxMIC1EU0VMRUNUIFwKLQktRFRDUFNPQ0tFVCAtRE5PQ09URk1DIC1E Q0tfTkVXVEVSTSAtRFBXSURfVD11aWRfdCAtRENLX0FOU0lDIFwKLQktSS91c3IvcGtnL2luY2x1 ZGUgLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NSUCAtRFBSRV9TUlBfMV80XzUgXAotCS1EQ0tf UlRTQ1RTIC1EQ0tfTkNVUlNFUyAtRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1E Q0tfU1NMIFwKLQktRExJQkRFUyAtRFpMSUIgLURGTkZMT0FUIC1JL3Vzci9wa2cvaW5jbHVkZS9v cGVuc3NsICQoS0ZMQUdTKSAtTyIgXAotCSJMSUJTPSAtTC91c3IvcGtnL2xpYiAtcnBhdGggL3Vz ci9wa2cvbGliIC1sbmN1cnNlcyAtbHNycCAtbGdtcCAtbGRlcyBcCi0JLWxzc2wgLWxrcnlwdG8g LWxjcnlwdG8gLWxjcnlwdCAtbHogLWxtIgotCi1pcml4Nngra3JiNToKLQlAZWNobyAnSW5jbHVk ZXMgZnVsbHNjcmVlbiBmaWxlIGRpc3BsYXkgYW5kIFllbGxvdyBQYWdlcy4uLicKLQlAZWNobyAn QWRkIC1taXBzPG4+IHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIHRhcmdldC4nCi0J JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1E U1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0dFVFVTRVJTSEVMTCBcCi0JLURDS19DVVJTRVMg LURDS19ORVdURVJNIC1EUFdJRF9UPXVpZF90IC1EQ0tfQU5TSUMgLURUQ1BTT0NLRVRcCi0JLURT RUxFQ1QgLURDS19SVFNDVFMgLU8gXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJP UyAtREtSQjUgLURDS19FTkNSWVBUSU9OIC1EQ0tfREVTIFwKLQkkKEs1SU5DKSAkKEs1SU5DKS9r cmI1ICQoS0ZMQUdTKSIgXAotCSJMSUJTID0gLWxjdXJzZXMgJChLNUxJQikgLWxkZXM0MjUgLWxr cmI1IFwKLQktbGNvbV9lcnIgLWxjcnlwdG8gLWxjcnlwdCAtbGdzc2FwaV9rcmI1IiBcCi0JIkxO S0ZMQUdTID0gLXMgJChMTktGTEFHUykiCi0KLWlyaXg2NStrcmI1OgotCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIFNHSSBJUklYIDYuNScKLQlAJChNQUtFKSAiTUFLRT0kKE1B S0UpIiBcCi0JTE5LRkxBR1M9Ii1XbCwtd29mZiw4NCIgXAotCSJLRkxBR1M9LURJUklYNjUgLURD S19SVFNDVFMgLU9QVDpPbGltaXQ9MCAtd29mZiAxMTEwLDE1NTIsMTE3NCBcCi0JJChLRkxBR1Mp IiBcCi0JaXJpeDZ4K2tyYjUgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi0jSW4gY2FzZSB0 aGV5IHR5cGUgIm1ha2Ugc3lzNSIuLi4KLXN5czU6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBz eXMzIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotI0dlbmVyaWMgQVRUIFN5c3RlbSBJSUkg b3IgU3lzdGVtIFYgKHdpdGggSSZEIHNwYWNlKQotc3lzMzoKLQlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lzdGVtIElJSScKLQlAZWNobyAnb3IgU3lzdGVt IFYgUjIgb3IgZWFybGllci4uLicKLQlAZWNobyAnYWRkIC1ETk9NS0RJUiBpZiBta2RpciBpcyBh biB1bmRlZmluZWQgc3ltYm9sLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURBVFRTViAtRE5PVU5JQ09ERSAtRE5PU1lTTE9HIC1ETk9T WU1MSU5LIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUg LUROT1JFQUxQQVRIIC1ETk9MRUFSTiAkKEtGTEFHUykgLWkgLU8iIFwKLQkiTE5LRkxBR1MgPSAt aSIKLQotI0dlbmVyaWMgQVRUIFN5c3RlbSBJSUkgb3IgU3lzdGVtIFYgKG5vIEkmRCBzcGFjZSkK LXN5czNuaWQ6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklY IFN5c3RlbSBJSUknCi0JQGVjaG8gJ29yIFN5c3RlbSBWIFIyIG9yIGVhcmxpZXIsIG5vIEkmRCBz cGFjZS4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQki Q0ZMQUdTID0gLURBVFRTViAtRE5PUkVBTFBBVEggLUROT1VOSUNPREUgLUROT1NZU0xPRyAtRE5P U1lNTElOSyBcCi0JLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRF IC1ETk9MRUFSTiAkKEtGTEFHUykgLU8iIFwKLQkiTE5LRkxBR1MgPSIKLQotI0dlbmVyaWMgQVRU IFN5c3RlbSBJSUkgb3IgU3lzdGVtIFYgUjIgb3IgZWFybGllciwgIm5vIHZvaWQiOgotI3NwZWNp YWwgZW50cnkgdG8gcmVtb3ZlICJJbGxlZ2FsIHBvaW50ZXIgY29tYmluYXRpb24iIHdhcm5pbmdz Lgotc3lzM252OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5J WCBTeXN0ZW0gSUlJJwotCUBlY2hvICdvciBTeXN0ZW0gViBSMiBvciBlYXJsaWVyLi4uJwotCSQo TUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQVRU U1YgLUROT1JFQUxQQVRIIC1ETk9VTklDT0RFIC1ETk9TWVNMT0cgLUROT0dFVFVTRVJTSEVMTCBc Ci0JLUROT1NZTUxJTksgLUROT0ZUUlVOQ0FURSAtRE5PSU5JVEdST1VQUyAtRE5PTEVBUk4gXAot CS1Edm9pZD1pbnQgJChLRkxBR1MpIC1pIC1PIiBcCi0JIkxOS0ZMQUdTID0gLWkiCi0KLSMgQVQm VCA3MzAwIFVOSVggUEMuICBBcyBvZiBDLUtlcm1pdCA2LjEsIG1hbnkgb2YgdGhlc2UgZW50cmll cyBkb24ndCB3b3JrCi0jIGFueSBtb3JlIGR1ZSB0byAiT3V0IG9mIG1lbW9yeSIgb3IgIlRvbyBt YW55IGRlZmluZXMiIGVycm9ycyBkdXJpbmcKLSMgY29tcGlsYXRpb24sIGF0IGxlYXN0IG5vdCBv biBzeXN0ZW1zIHdpdGhvdXQgbG90cyBvZiBtZW1vcnkuICBUaGUgc3lzM3VwY2djCi0jIGVudHJ5 IHdvcmtzICh1c2luZyBnY2MpIHdpdGggb3B0aW1pemF0aW9uIHJlbW92ZWQsIGFuZCBtaWdodCBh bHNvIHdvcmsKLSMgd2l0aCBvcHRpbWl6YXRpb24gZW5hYmxlZCBvbiBtYWNoaW5lcyB3aXRoIGxh cmdlciBtZW1vcmllcy4KLQotI0FUJlQgNzMwMC9VTklYIFBDICgzQjEpIHN5c3RlbXMsIHN5czMg YnV0IHNwZWNpYWwgaGFuZGxpbmcgZm9yIGludGVybmFsIG1vZGVtLgotI0xpbmsgd2l0aCB0aGUg c2hhcmVkIGxpYnJhcnkgLS0gdGhlIGNvbmZsaWN0IHdpdGggb3BlbmkgaW4gc2hhcmVkIGxpYnJh cnkKLSNpcyBzb2x2ZWQgd2l0aCAtRG9wZW5pPXhvcGVuaS4gIE5vdGUgdGhhdCB0aGUgeGVybWl0 IHRhcmdldCBjYW4ndCBiZSB1c2VkCi0jZm9yIHRoZSBVbml4IFBDOyB0aGVyZSBpcyBubyBzZWxl Y3QoKS4KLXN5czN1cGM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQm VCA3MzAwIFVOSVggUEMsIHNoYXJlZCBsaWIuLi4nCi0JQGVjaG8gJ0lmIHNoYXJlZCBsaWIgY2F1 c2VzIHRyb3VibGUsIHVzZSBtYWtlIHN5czN1cGNvbGQuJwotCSQoTUFLRSkgd2VybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAtREFUVDczMDAgLUROT01LRElS IC1EVVNFX01FTUNQWSAtRE5PUkVBTFBBVEggLUROT0xFQVJOIFwKLQktRE5PU1lTTE9HIC1ETk9T WU1MSU5LIC1ETk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVOQ0FURSBcCi0J LUROT1JFRElSRUNUIC1ETk9HRlRJTUVSIC1ETk9VTklDT0RFICQoS0ZMQUdTKSAtRG9wZW5pPXhv cGVuaSIgXAotCSJDQzIgPSBsZCAvbGliL2NydDBzLm8gL2xpYi9zaGxpYi5pZmlsZSIgIkxOS0ZM QUdTID0gLXMiCi0KLSNBVCZUIDczMDAvVW5peCBQQyBzeXN0ZW1zLCBtaW5pbXVtIGtlcm1pdCBm b3IgdGhvc2Ugd2l0aCBzbWFsbGVyIGFtb3VudHMKLSNvZiBtZW1vcnkuCi1zeXMzdXBjbToKLQlA ZWNobyBNaW5pbXVtIGludGVyYWN0aXZlCi0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzeXMzdXBj IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LUROT1NQTCAtRE5PRlJJTExT IC1ETk9IRUxQIC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PQ1NFVFMgXAotCS1ETk9TWVNMT0cgLURO T1NFVEtFWSAtRE5PUkVBTFBBVEgiCi0KLSNBVCZUIDczMDAvVU5JWCBQQyAoM0IxKSBzeXN0ZW1z LCB3aXRoIGN1cnNlcyBzdXBwb3J0LgotI0N1cnNlcyBhbmQgdGhlIHNoYXJlZCBsaWJyYXJ5IGRv bid0IGdldCBhbG9uZywgc28gd2UgZG9uJ3QgdXNlIHRoZQotI3NoYXJlZCBsaWJyYXJ5LiAgV2Ug bmVlZCB0byBpbmNsdWRlIENLX05FV1RFUk0gdG8gYXZvaWQgYSBjb25mbGljdAotI3dpdGggY3Vy c2VzIGFuZCBidWZmZXJpbmcgb24gc3Rkb3V0LiAgTWVyZ2VkIHdpdGggc3VibWlzc2lvbiBieQot I1JvYmVydCBXZWluZXIvUHJvZ3JhbW1pbmcgUGx1cywgcndlaW5lckB3YXRzdW4uY2MuY29sdW1i aWEuZWR1LgotI1dlIGRvbid0IG5lZWQgLURvcGVuaT14b3Blbmkgc2luY2Ugd2UncmUgbm90IHVz aW5nIHRoZSBzaGFyZWQgbGlicmFyeSwKLSNidXQgd2Uga2VlcCBpdCB0byBiZSBjb25zaXN0ZW50 IHdpdGggdGhlIG90aGVyIGVudHJpZXMuCi1zeXMzdXBjYzoKLQlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBBVCZUIDczMDAgVU5JWCBQQywgY3Vyc2VzLi4uJwotCSQoTUFLRSkg d2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAtREFUVDcz MDAgLUROT1JFQUxQQVRIIFwKLQktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLUROT01LRElSIC1E Tk9SRURJUkVDVCAtRE5PR0ZUSU1FUiAtRE5PTEVBUk4gXAotCS1ETk9TWVNMT0cgLUROT1NZTUxJ TksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKLQktRFVT RV9NRU1DUFkgLUROT1VOSUNPREUgJChLRkxBR1MpIC1Eb3Blbmk9eG9wZW5pIiBcCi0JIkxJQlMg PSAtbGN1cnNlcyIgIkxOS0ZMQUdTID0gLXMiCi0KLSNMaWtlIHN5czN1cGNjIGJ1dCBmb3IgQVQm VCBVTklYIDMuNTFtIChyZWxlYXNlZCBhcyBhIHBhdGNoIG9uIEZpeCBEaXNrIDIpLAotI2FkZHMg aGFyZHdhcmUgZmxvdyBjb250cm9sLgotYXR0MzUxbToKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSki IHN5czN1cGNjIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURDS19SVFND VFMgLURVTklYMzUxTSIKLQotI0FzIGFib3ZlIGJ1dCB3aXRoIGdjYy4KLWF0dDM1MWdtOgotCSQo TUFLRSkgIk1BS0U9JChNQUtFKSIgc3lzM3VwY2djIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAotCSJLRkxBR1M9LURDS19SVFNDVFMgLURVTklYMzUxTSIKLQotI0FUJlQgNzMwMCBVTklYIFBD ICgzQjEpLCBhcyBhYm92ZSwgYnV0IG5vIG5ld3Rlcm0oKS4KLXN5czN1cGN4OgotCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgNzMwMCBVTklYIFBDLCBjdXJzZXMuLi4n Ci0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9 IC1PIC1EQVRUNzMwMCAtRE5PUkVBTFBBVEggLUROT1VOSUNPREUgLUROT0xFQVJOIFwKLQktRE5P U1lTTE9HIC1ETk9TWU1MSU5LIC1ETk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMgLUROT0ZU UlVOQ0FURSBcCi0JLURDS19DVVJTRVMgLUROT01LRElSIC1ETk9SRURJUkVDVCAtRE5PR0ZUSU1F UiAtRFVTRV9NRU1DUFkgJChLRkxBR1MpIFwKLQktRG9wZW5pPXhvcGVuaSIgIkxJQlMgPSAtbGN1 cnNlcyAtbHRlcm1jYXAiICJMTktGTEFHUyA9IC1zIgotCi0jQVQmVCA3MzAwL1VOSVggUEMgKDNC MSkgc3lzdGVtcywgd2l0aCBjdXJzZXMgYW5kIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuCi1zeXMz dXBjc2hjYzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIDczMDAg VU5JWCBQQywgc2hhcmVkIGxpYi4uLicKLQlAZWNobyAnV2l0aCBjdXJzZXMuICBSZXF1aXJlcyBz aGNjLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZM QUdTID0gLU8gLURBVFQ3MzAwIC1ETk9NS0RJUiAtRE5PUkVBTFBBVEggLUROT0xFQVJOIFwKLQkt RE5PU1lTTE9HIC1ETk9TWU1MSU5LIC1ETk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMgLURO T0ZUUlVOQ0FURSBcCi0JLURDS19ORVdURVJNIC1EQ0tfQ1VSU0VTICAtRE5PUkVESVJFQ1QgLURO T0dGVElNRVIgXAotCS1EVVNFX01FTUNQWSAtRE5PVU5JQ09ERSAkKEtGTEFHUykgLURvcGVuaT14 b3BlbmkiIFwKLQkiTE5LRkxBR1MgPSAtaSAtcyIgIkNDID0gc2hjYyIgIkNDMiA9IHNoY2MiICJM SUJTID0gLWxjdXJzZXMiCi0KLSNBVCZUIDczMDAvVU5JWCBQQyAoM0IxKSBzeXN0ZW1zLCBhcyBh Ym92ZSwgbm8gY3Vyc2VzLCBidXQgdXNlIGdjYy4KLXN5czN1cGNnOgotCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgNzMwMCBVTklYIFBDLi4uJwotCSQoTUFLRSkgd2Vy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtREFUVDczMDAgLURO T1JFRElSRUNUIC1EVVNFX01FTUNQWSAtRE5PVU5JQ09ERSAtRE5PTEVBUk4gXAotCS1ETk9TWVNM T0cgLUROT1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5D QVRFIFwKLQktRE5PR0ZUSU1FUiAtRE5PTUtESVIgLUROT1JFQUxQQVRIICQoS0ZMQUdTKSAtRG9w ZW5pPXhvcGVuaSIgXAotCSJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgIkxOS0ZMQUdTID0gLXMgLXNo bGliIgotCi0jQVQmVCA3MzAwL1VOSVggUEMgKDNCMSkgc3lzdGVtcywgY3Vyc2VzIGFuZCBnY2Mu Ci0jT3B0aW1pemF0aW9uIG9taXR0ZWQgLS0gYWRkIGl0IGJhY2sgaW4gaWYgeW91ciBtYWNoaW5l IGhhcyBsb3RzIG9mIG1lbW9yeS4KLXN5czN1cGNnYzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBBVCZUIDczMDAgVU5JWCBQQywgY3Vyc2VzLi4uJwotCSQoTUFLRSkgd2Vy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtREFUVDczMDAgLURO T1JFRElSRUNUIC1EVVNFX01FTUNQWSAtRE5PR0ZUSU1FUiAtRE5PVU5JQ09ERSBcCi0JLUROT1NZ U0xPRyAtRE5PU1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJV TkNBVEUgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRE5PTUtESVIgLUROT1JFQUxQQVRI IC1ETk9MRUFSTiAkKEtGTEFHUykiIFwKLQkiQ0MgPSBnY2MiICJDQzIgPSBnY2MiICJMSUJTID0g LWxjdXJzZXMiICJMTktGTEFHUyA9IC1zIgotCi0jQVQmVCA3MzAwL1VOSVggUEMgKDNCMSkgc3lz dGVtcywgc3BlY2lhbCBoYW5kbGluZyBmb3IgaW50ZXJuYWwgbW9kZW0uCi0jTm8gRlVMTFNDUkVF TiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgKGN1cnNlcykuCi1zeXMzdXBjb2xkOgotCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgNzMwMCBVTklYIFBDLi4uJwotCSQoTUFL RSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtREFUVDcz MDAgLUROT01LRElSIC1EVVNFX01FTUNQWSAtRE5PVU5JQ09ERSAtRE5PTEVBUk4gXAotCS1ETk9T WVNMT0cgLUROT1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRS VU5DQVRFIFwKLQktRE5PR0ZUSU1FUiAtRE5PUkVESVJFQ1QgLUROT1JFQUxQQVRIICQoS0ZMQUdT KSAtTyIgIkxOS0ZMQUdTID0gLWkiCi0KLSNBcyBhYm92ZSwgYnV0IHdpdGggZ2NjLiBtaW5pbnVt IGZlYXR1cmVzIC0gZml0cyBvbiBhIDQwMEsgVU5JWCBQQyBmbG9wcHkKLSNhZnRlciBjb21wcmVz c2lvbiB3aXRoIHJvb20gdG8gc3BhcmU7IGFkZCAtRE5PU0hPVyBvciBvdGhlciAtRE5PeHh4eCBp dGVtcwotI3RvIHJlZHVjZSBzaXplIGV2ZW4gZnVydGhlci4KLXN5czN1cGNnbToKLQlAZWNobyBN aW5pbXVtIGludGVyYWN0aXZlCi0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzeXMzdXBjZyBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1ETk9TUEwgLUROT0ZSSUxMUyAtRE5P SEVMUCAtRE5PREVCVUcgLUROT1RMT0cgLUROT0NTRVRTIFwKLQktRE5PU0VUS0VZICQoS0ZMQUdT KSIKLQotI1RoaXMgdGFyZ2V0IGlzIGRlc2lnbmVkIHRvIGNyZWF0ZSBhIHZlcnNpb24gd2l0aCB0 aGUgbW9zdCBmZWF0dXJlcyBwb3NzaWJsZQotI3RoYXQsIGFmdGVyIGNvbXByZXNzaW9uLCBzdGls bCBmaXRzIG9uIGEgNDAwSyBVTklYIFBDIGZsb3BweS4KLXN5czN1cGNnZmQ6Ci0JQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCA3MzAwIFVOSVggUEMgZmxvcHB5Li4uJwot CSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAt REFUVDczMDAgLUROT1JFRElSRUNUIC1EVVNFX01FTUNQWSAtRE5PU1BMIC1ETk9MRUFSTiBcCi0J LUROT1NZU0xPRyAtRE5PU1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1E Tk9GVFJVTkNBVEUgXAotCS1ETk9HRlRJTUVSIC1ETk9SRUFMUEFUSCAtRG9wZW5pPXhvcGVuaSBc Ci0JLUROT0hFTFAgLUROT0RFQlVHIC1ETk9UTE9HIC1ETk9DU0VUUyAtRE5PU0VUS0VZIC1ETk9N S0RJUiAkKEtGTEFHUykiIFwKLQkiQ0MgPSBnY2MiICJDQzIgPSBnY2MiICJMTktGTEFHUyA9IC1z IgotCi0jQVQmVCA2MzAwIFBMVVMgKHdhcm5pbmcsIC1PIG1pZ2h0IG1ha2UgaXQgcnVuIG91dCBv ZiBzcGFjZSkuCi0jTk9URTogUmVtb3ZlIC1ESERCVVVDUCBpZiBub3QgdXNpbmcgSG9uZXkgRGFu QmVyIFVVQ1AuCi1hdHQ2MzAwOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IEFUJlQgNjMwMCBQTFVTLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAotCSJDRkxBR1MgPSAtREFUVDYzMDAgLURIREJVVUNQIC1ETk9GSUxFSCAtRE5PUkVB TFBBVEggLUROT0xFQVJOIFwKLQktRE5PU1lTTE9HIC1ETk9TWU1MSU5LIC1ETk9HRVRVU0VSU0hF TEwgLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVOQ0FURSBcCi0JLUROT1VOSUNPREUgJChLRkxBR1Mp IC1PIC1NbCAtaSIgIkxOS0ZMQUdTID0gLWkgLU1sIgotCi0jQXMgYWJvdmUsIGJ1dCB3aXRoIGN1 cnNlcyBzdXBwb3J0LiAgRGVidWdnaW5nIGRpc2FibGVkIHRvIHByZXZlbnQgdGhyYXNoaW5nLgot YXR0NjMwMGM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCA2MzAw IFBMVVMuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IkNGTEFHUyA9IC1EQVRUNjMwMCAtREhEQlVVQ1AgLUROT0ZJTEVIIC1ETk9DU0VUUyAtRE5PUkVB TFBBVEggXAotCS1ETk9TWVNMT0cgLUROT1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5J VEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKLQktRENLX0NVUlNFUyAtRE5PREVCVUcgLUROT1VOSUNP REUgLUROT0xFQVJOICQoS0ZMQUdTKSAtTyAtTWwgLWkiIFwKLQkiTE5LRkxBR1MgPSAtaSAtTWwi ICJMSUJTID0gLWxjdXJzZXMiCi0KLSNBVCZUIDYzMDAgUExVUyB3aXRoIG5vIGN1cnNlcywgbm8g ZGVidWdnaW5nIChhYm91dCAzNEsgc21hbGxlcikKLSMgLU9wdGltaXphdGlvbiBzYXZlcyBhYm91 dCAyMEsgdG9vLgotYXR0NjMwMG5kOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIEFUJlQgNjMwMCBQTFVTLCBubyBkZWJ1Z2dpbmcuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EQVRUNjMwMCAtREhEQlVVQ1Ag LUROT0RFQlVHIC1ETk9GSUxFSCAtRE5PUkVBTFBBVEggXAotCS1ETk9TWVNMT0cgLUROT1NZTUxJ TksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKLQktRE5P VU5JQ09ERSAtRE5PTEVBUk4gJChLRkxBR1MpIC1PIC1pIC1NbCIgIkxOS0ZMQUdTID0gLWkgLU1s IgotCi0jQVQmVCAzQjIgYW5kIG1heWJlIDNCMjAtc2VyaWVzIGNvbXB1dGVycyBydW5uaW5nIEFU JlQgVU5JWCBTeXN0ZW0gViBSMy4KLSNUaGlzIG9uZSB3YXMgYWN0dWFsbHkgdXNlZCB0byBidWls ZCBDLUtlcm1pdCA3LjAgc3VjY2Vzc2Z1bGx5IG9uIGEgM0IyLzMwMC4KLWF0dDNiMjoKLQlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIDNCMicKLQkkKE1BS0UpIHdlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURBVFRTViAtRE5PUkVE SVJFQ1QgLURVU0VfTUVNQ1BZIFwKLQktRE5PVElNRVZBTCAtRE5PVElNRVpPTkUgLURNSU5JRElB TCAtRE5PQ0hBTk5FTElPIC1ETk9CSUdCVUYgXAotCS1ETk9TWVNMT0cgLUROT1NZTUxJTksgLURO T0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKLQktRE5PR0ZUSU1F UiAtRE5PUkVBTFBBVEggLURvcGVuaT14b3BlbmkgLUROT0ZSSUxMUyAtRE5PTEVBUk4gXAotCS1E Tk9IRUxQIC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PQ1NFVFMgLUROT1NFVEtFWSAtRE5PTUtESVIg JChLRkxBR1MpIiBcCi0JIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiAiTE5LRkxBR1MgPSAtcyIKLQot IyBUaGUgbmV4dCB0d28gYXJlIGxpa2VseSBub3QgdG8gd29yayBhcy1pcy4KLQotI0FUJlQgM0Iy LCAzQjIwLXNlcmllcyBjb21wdXRlcnMgcnVubmluZyBBVCZUIFVOSVggU3lzdGVtIFYuCi0jVGhp cyBpcyBqdXN0IGdlbmVyaWMgU3lzdGVtIFYgd2l0aCBIb25leSBEYW5CZXIgVVVDUCwgc28gcmVm ZXIgdG8gc3lzM2hkYi4KLSNSZW1vdmUgLUROT05BV1MgaWYgeW91IGNhbiBnZXQgYXdheSB3aXRo IGl0LgotYXR0M2J4OgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3lzM2hkYiBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPSQoS0ZMQUdTKSAtRE5PTkFXUyAtRE5PVElNRVZB TCIKLQotIyAzQnggd2l0aCBjaGFyc2V0cyAoZXhjZXB0IFVuaWNvZGUpIGJ1dCBubyBjdXJzZXMu Ci1hdHQzYngxOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgM0Iy IG9yIDNCMjAnCi0JQGVjaG8gJ3dpdGggSG9uZXkgRGFuQmVyIFVVQ1AgIG5vIGN1cnNlcy4uLicK LQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0g LURBVFRTViAtREhEQlVVQ1AgJChLRkxBR1MpIC1ETk9SRURJUkVDVCBcCi0JLUROT1RJTUVWQUwg LUROT1RJTUVaT05FIC1ETUlOSURJQUwgLUROT0NIQU5ORUxJTyAtRE5PQklHQlVGIFwKLQktRE5P SEVMUCAtRE5PREVCVUcgLUROT0dGVElNRVIgLUROT0xFQVJOIFwKLQktRE5PU1lTTE9HIC1ETk9T WU1MSU5LIC1ETk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVOQ0FURSBcCi0J LUROT1JFQUxQQVRIIC1ETk9VTklDT0RFIC1pIiBcCi0JIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiAi TE5LRkxBR1MgPSAtaSAtcyIKLQotI0FUJlQgM0IyLCAzQjIwLXNlcmllcyBjb21wdXRlcnMgcnVu bmluZyBBVCZUIFVOSVggU3lzdGVtIFYsCi0jd2l0aCBmdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIg ZGlzcGxheS4KLWF0dDNieGM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig QVQmVCAzQjIgb3IgM0IyMCcKLQlAZWNobyAnd2l0aCBIb25leSBEYW5CZXIgVVVDUCBhbmQgY3Vy c2VzLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJD RkxBR1MgPSAtREFUVFNWIC1ESERCVVVDUCAtRE5PTkFXUyAtRE5PVElNRVZBTCAkKEtGTEFHUykg XAotCS1ETk9TWVNMT0cgLUROT1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQ UyAtRE5PRlRSVU5DQVRFIFwKLQktRE5PUkVBTFBBVEggLURDS19DVVJTRVMgLURDS19ORVdURVJN IC1ETk9VTklDT0RFIC1ETk9MRUFSTiAtaSAtTyIgXAotCSJMTktGTEFHUyA9IC1pIiAiTElCUz0t bGN1cnNlcyIKLQotIzNieCB3aXRoIGN1cnNlcyBidXQgbm8gY2hhcnNldHMKLWF0dDNieGMzOgot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgM0IyIG9yIDNCMjAnCi0J QGVjaG8gJ3dpdGggSG9uZXkgRGFuQmVyIFVVQ1Agd2l0aCBjdXJzZXMuLi4gIG5vIENTRVRTJwot CSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAt REFUVFNWIC1ESERCVVVDUCAkKEtGTEFHUykgLUROT1JFRElSRUNUIFwKLQktRE5PVElNRVZBTCAt RE5PVElNRVpPTkUgLURNSU5JRElBTCAtRE5PQ0hBTk5FTElPIC1ETk9CSUdCVUYgXAotCS1ETk9I RUxQIC1ETk9ERUJVRyAtRE5PR0ZUSU1FUiAtRE5PTEVBUk4gXAotCS1ETk9TWVNMT0cgLUROT1NZ TUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKLQkt RE5PUkVBTFBBVEggLUROT0NTRVRTIC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtaSIgXAotCSJD QyA9IGdjYyIgIkNDMiA9IGdjYyIgIkxOS0ZMQUdTID0gLWkgLXMiICJMSUJTID0gLWxjdXJzZXMi Ci0KLSNBbnkgU3lzdGVtIFYgUjIgb3IgZWFybGllciB3aXRoIEhvbmV5IERhbkJlciBVVUNQIChz YW1lIGFzIGFib3ZlKQotc3lzM2hkYjoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBBVCZUIFVOSVggU3lzdGVtIElJSScKLQlAZWNobyAnb3IgU3lzdGVtIFYgUjIgb3IgZWFy bGllciB3aXRoIEhvbmV5IERhbkJlciBVVUNQLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtREFUVFNWIC1ESERCVVVDUCAtRE5PUkVB TFBBVEggLUROT1VOSUNPREUgLUROT0xFQVJOIFwKLQktRE5PU1lTTE9HIC1ETk9TWU1MSU5LIC1E Tk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVOQ0FURSBcCi0JJChLRkxBR1Mp IC1pIC1PIiAiTE5LRkxBR1MgPSAtaSIKLQotI1NwZXJyeS9VTklTWVMgNTAwMCBVVFMgViA1LjIg KFN5c3RlbSBWIFIyKSwgSG9uZXkgRGFuQmVyIFVVQ1AKLXVuaXN5czVyMjoKLQlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTcGVycnkvVU5JU1lTIDUwMDAgVVRTIFYgNS4yLi4u JwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1Mg PSAtREFUVFNWIC1EVU5JU1lTNTIgLURIREJVVUNQIC1ETk9SRUFMUEFUSCAtRE5PVU5JQ09ERSBc Ci0JLUROT1NZU0xPRyAtRE5PU1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBT IC1ETk9GVFJVTkNBVEUgXAotCS1ETk9MRUFSTiAkKEtGTEFHUykgLWkgLU8iICJMTktGTEFHUyA9 IC1pIgotCi0jSW4gY2FzZSB0aGV5IHNheSAibWFrZSBzeXM1aGRiIiBpbnN0ZWFkIG9mICJtYWtl IHN5czNoZGIiLi4uCi1zeXM1aGRiOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3lzM2hkYgot Ci0jQ3JlYXRlIHRoZSBjb21tb24gaGVhZGVyIGxpbmUgZm9yIGFsbCBocHV4WzUtMTFdKiBlbnRy aWVzIGFuZCBhYm92ZS4gVGhpcyAKLSNleHRyYSBlbnRyeSBpcyBoZXJlIGJlY2F1c2Ugb3VyIGhl YWRlciBtZXNzYWdlIGxlbmd0aCBtYXkgZGlmZmVyIGZvciBlYWNoIAotI0MtS2VybWl0IHZlcnNp b24uIERvbid0IHVzZSAnZm9sZCAtcycgZm9yIEhQLVVYIDUueCAtIDcueCEgVGhpcyBvcHRpb24g aXMgCi0jYXZhaWxhYmxlIG9ubHkgZm9yIEhQLVVYIDguMCBhbmQgYWJvdmUhCi1ocHV4LWhlYWRl cjoKLQlASFBVWD1gdW5hbWUgLXIgfCBzZWQgLWUgJ3MvXlteMS05XSovLycgLWUgJ3MvXC4wMCQk Ly4wLydgIDsgXAotCVsgIiQoTUVTU0FHRTApIiBdICYmIE1FU1NBR0UxPSIkKE1FU1NBR0UwKSIg OyBcCi0JTWVzc2FnZTA9J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSFA5MDAwIEhQLVVY JyA7IFwKLQlNZXNzYWdlMT0kJHtNRVNTQUdFMTo9J3dpdGhvdXQgYW55IGV4dHJhIGNvbXBpbGVy IG9wdGltaXphdGlvbid9IDsgXAotCU1lc3NhZ2VIPSIkJE1lc3NhZ2UwICQkSFBVWCIgOyBcCi0J Y2FzZSAkJEhQVVggaW4gXAotCSAgWzU2N10uKikgZWNobyAiJCRNZXNzYWdlSFxuJCRNZXNzYWdl MSIgOzsgXAotCSAgICAgICouKikgZWNobyAiJCRNZXNzYWdlSCAkJHtNZXNzYWdlMX0kKE1FU1NB R0UxQSkiIHwgZm9sZCAtcyA7OyBcCi0JZXNhYyB8IHNlZCAtZSAncy9eIC8vJyAtZSAncy8gKiQk Ly8nCi0KLSMgUGV0ZXIgRSdzIHVwZGF0ZWQgSFAtVVggNS54eCBlbnRyaWVzIE9jdCAyMDAxLgot Ci0jSFAtOTAwMCA1MDAgSFAtVVggNS54eCwgbm8gVENQL0lQLgotIyBMYXN0IGtub3duIHN1Y2Nl c3NmdWwgYnVpbGQ6IEMtS2VybWl0IDguMC4yMDYgMjAwMi8yMC8yNy4KLWhwdXgwNTAwOgotCUBN RVNTQUdFMD0ibm8gVENQL0lQIGFuZCBubyBjb21waWxlciBvcHRpbWl6YXRpb24iO1wKLQlNRVNT QUdFMD0kJHtNRVNTQUdFMTotJCRNRVNTQUdFMH0gXAotCSQoTUFLRSkgaHB1eC1oZWFkZXIKLQkk KE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURI UFVYIC1ESFBVWDUgLURIUFVYUFJFNjUgLUROT1JFRElSRUNUIC1ERENMR0VUQ1dEIFwKLQktRE5P R0VUVVNFUlNIRUxMIC1ETk9HRlRJTUVSIC1ETk9TWVNMT0cgLUROT1RPTUFDUk9TIC1ETk9MU1RB VCBcCi0JLUROT1NZTUxJTksgLUROT0lOSVRHUk9VUFMgLUROT1VOSUNPREUgLUROT0xFQVJOIC1E Tk9MT05HTE9ORyBcCi0JLURWT0lEPWludCAtRENLVk9JRD1pbnQgJChLRkxBR1MpIiAiTElCUyA9 ICQoTElCUykiICJMTktGTEFHUyA9ICIKLQotI0hQLTkwMDAgNTAwIEhQLVVYIDUuMjEgd2l0aCBX b2xsb25nb25nIFdJTi9UQ1AgMS4yIFRDUC9JUC4KLSNSZXF1aXJlcyAvdXNyL3dpbnMvdXNyL2lu Y2x1ZGUgYW5kIC91c3IvbGliL2xpYm5ldC5hIGZyb20gV29sbG9uZ29uZy4KLSNPcHRpbWl6YXRp b24gc2tpcHBlZCAtIHRha2VzIGZvcmV2ZXIuCVJlYWxseS4KLSMgV0FSTklORzogdGhpcyBkb2Vz bid0IHdvcmsgaWYgYSBmaWxlIGNhbGxlZCAiaHB1eDA1MDAiIGlzIG9uIHRoZSBkaXNrLgotIyBM YXN0IGtub3duIHN1Y2Nlc3NmdWwgYnVpbGQ6IEMtS2VybWl0IDguMC4yMDYgMjAwMi8yMC8yNy4K LWhwdXgwNTAwd2ludGNwOgotCUBNRVNTQUdFMT0id2l0aCBXSU4vVENQIGJ1dCB3aXRob3V0IGFu eSBleHRyYSBjb21waWxlciBvcHRpbWl6YXRpb24iIFwKLQkkKE1BS0UpIGhwdXgwNTAwIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1MgPSAtRFRDUFNPQ0tFVCAtREhQVVg1V0lO VENQIC1ESU5BRERSWCAtRE5PX0ROU19TUlYgXAotCS1ETk9NSEhPU1QgLURWT0lEPWludCAtRENL Vk9JRD1pbnQgLUROT0hBRERSTElTVCAtRE5PTE9OR0xPTkcgXAotCS1JL3Vzci93aW5zL3Vzci9p bmNsdWRlICQoS0ZMQUdTKSIgIkxJQlMgPSAvdXNyL2xpYi9saWJuZXQuYSIKLQotI0hQLVVYIDYu NSwgc2hvcnQgZmlsZW5hbWVzLCBubyBuZXR3b3JrIGFuZCBubyBjdXJzZXMgc3VwcG9ydC4KLSNj a2Nwcm8sIGNrdXVzciwgY2t1dXMzIGFuZCBvdGhlcnMgYXJlIGJyb2tlbiBvdXQgYmVjYXVzZSB0 aGV5IG1ha2UgdGhlCi0jb3B0aW1pemVyIHJ1biBhd2F5LiAgTm90ZSB0aGF0IHRoZSBYRVJNSVQg dGFyZ2V0IGRvZXMgbm90IHdvcmsgd2l0aCBIUC1VWCA2LjUhCi0jCi0jSWYgeW91IGdldCBjb21w aWxlciB3YXJuaW5ncyBsaWtlOgotIydTd2l0Y2ggdGFibGUgb3ZlcmZsb3cuIFRyeSB0aGUgLVdj LC1OdyBvcHRpb24uJyAoZm9yIGNrY3VuaS5jLCBvcgotI290aGVyIGZpbGVzKSBpbmNyZWFzZSB0 aGUgJy4uLicgdmFsdWUgaW4gJy1XYywtTncuLi4nISBUaGUgZGVmYXVsdCBtYXhpbXVtCi0jc3dp dGNoIHRhYmxlIHN0YWNrICgtTncpIGlzIDI1MCB0YWJsZSBlbnRyaWVzLiBja2N1bmkuYyBmcm9t IE9jdCAxNiAyMDA5Ci0jbmVlZHMgMjU3IHRhYmxlIGVudHJpZXMgKEMtS2VybWl0IFZlcnNpb24g IjkuMC4yOTkiKS4KLSNPSzogMjAxMC8wMy8yNgotaHB1eDA2NTA6Ci0JQCQoTUFLRSkgaHB1eC1o ZWFkZXIKLQlATUVTU0FHRTI9JCR7TUVTU0FHRTI6LSdhbmQgTk8gbmV0d29yayd9OyBcCi0JZWNo byAic3VwcG9ydGluZzogTk8gbG9uZyBmaWxlbmFtZXMgJCRNRVNTQUdFMi4iCi0KLQkkKE1BS0Up IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCQlja3V1czMuJChFWFQpIGNrdXVzNC4kKEVY VCkgY2t1dXM1LiQoRVhUKSBja3V1czYuJChFWFQpIFwKLQkJY2t1dXNyLiQoRVhUKSBja3V4bGEu JChFWFQpIGNrY2Z0cC4kKEVYVCkgY2tjcHJvLiQoRVhUKSBcCi0JIkNGTEFHUyA9IC1ESFBVWCAt REhQVVg2IC1EU0lHX1YgLUROT1NZU0xPRyAtRE5PU0VMRUNUIC1ERk5GTE9BVCBcCi0JLUREQ0xH RVRDV0QgLUROT0dFVFVTRVJTSEVMTCAtRE5PX0ROU19TUlYgLUROT0xFQVJOIC1ETk9MT05HTE9O RyBcCi0JJChLRkxBR1MpIgotCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIkNGTEFHUyA9IC1ESFBVWCAtREhQVVg2IC1EU0lHX1YgLUROT1NZU0xPRyAtRE5P U0VMRUNUIC1ERk5GTE9BVCBcCi0JLUREQ0xHRVRDV0QgLUROT0dFVFVTRVJTSEVMTCAtRE5PX0RO U19TUlYgLUROT0xFQVJOIC1ETk9MT05HTE9ORyBcCi0JJChLRkxBR1MpIC1XYywtTncyNjAgJChP RkxBR1MpIiAiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbG0gJChMSUJTKSIKLQotI0V4YWN0bHkg YXMgYWJvdmUsIHBsdXMgY3Vyc2VzOgotI09LOiAyMDA5LzEwLzA2Ci1ocHV4MDY1MGM6Ci0JQE1F U1NBR0UyPSJhbmQgTk8gbmV0d29yayBidXQgd2l0aCBjdXJzZXMiIFwKLQkkKE1BS0UpIGhwdXgw NjUwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1MgPSAtRENLX0NVUlNFUyAk KEtGTEFHUykiIFwKLQkiTElCUyA9IC1sY3Vyc2VzIgotCi0jRXhhY3RseSBhcyBhYm92ZSwgcGx1 cyBjdXJzZXMgKyBuZXR3b3JrOgotI09LOiAyMDA5LzEwLzAyCi1ocHV4MDY1MHRjcGM6Ci0JQE1F U1NBR0UyPSJidXQgd2l0aCBjdXJzZXMgYW5kIHdpdGggVENQL0lQIiBcCi0JJChNQUtFKSBocHV4 MDY1MCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EQ0tfQ1VSU0VTIC1E VENQU09DS0VUIC1ETk9IQUREUkxJU1QgXAotCS1ESU5UU0VMRUNUIC1ETk9DS0dFVEZRSE9TVCAk KEtGTEFHUykiIFwKLQkiTElCUz0tbGN1cnNlcyIKLQotI0V4YWN0bHkgYXMgaHB1eDA2NTAgYnV0 IHdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uOgotI09LOiAyMDA5LzEwLzA2Ci1ocHV4MDY1MG86 Ci0JQE1FU1NBR0UxPSJ3aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbiIgXAotCSQoTUFLRSkgaHB1 eDA2NTAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUyA9ICQoS0ZMQUdTKSIg Ik9GTEFHUyA9IC1PIgotCi0jRXhhY3RseSBhcyBocHV4MDY1MGMgYnV0IHdpdGggY29tcGlsZXIg b3B0aW1pemF0aW9uOgotI09LOiAyMDA5LzEwLzA2Ci1ocHV4MDY1MG9jOgotCUBNRVNTQUdFMT0i d2l0aCBjb21waWxlciBvcHRpbWl6YXRpb24iIFwKLQkkKE1BS0UpIGhwdXgwNjUwYyBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTID0gJChLRkxBR1MpIiAiT0ZMQUdTID0gLU8i Ci0KLSNFeGFjdGx5IGFzIGhwdXgwNjUwdGNwYyBidXQgd2l0aCBjb21waWxlciBvcHRpbWl6YXRp b246Ci0jT0s6IDIwMDkvMTAvMDYKLWhwdXgwNjUwb3RjcGM6Ci0JQE1FU1NBR0UxPSJ3aXRoIGNv bXBpbGVyIG9wdGltaXphdGlvbiIgXAotCSQoTUFLRSkgaHB1eDA2NTB0Y3BjIEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1MgPSAkKEtGTEFHUykiICJPRkxBR1MgPSAtTyIKLQot I1Rha2UgdGhpcyBhcyBzdGFydHVwIGVudHJ5IGZvciBhbGwgJ25vbi1vcHRpbWl6ZWQnIGZpbGVz IHVuZGVyIEhQLVVYIDcueCEKLSNNYWtlIHN1cmUgd2UgZG9uJ3QgY2FsbCBpdCB3aXRoIHRoZSAn LU8nIG9wdGlvbiBiZWNhdXNlIHRoaXMgd2lsbCBibG93IHVwCi0jdGhlIGNvbXBpbGVyIQotI09L OiAyMDA5LzA5LzMwCi1ocHV4MDcwMG5vb3B0OgotCUBjYXNlICIkKENGTEFHUykiIGluIFwKLQkq LU8qKSBlY2hvICJEb24ndCB1c2UgQ0ZMQUdTPSAtTyBoZXJlISIgOzsgXAotCSAgICopICQoTUFL RSkgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JICAgICAgY2t1dXNyLiQoRVhUKSBja3V1 czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBcCi0JICAgICAgY2t1dXM2LiQo RVhUKSBja3V1czcuJChFWFQpIGNrdXhsYS4kKEVYVCkgXAotCSAgICAgIGNrY3VuaS4kKEVYVCkg Y2tjZnRwLiQoRVhUKSBja2Nwcm8uJChFWFQpIFwKLQkgICAgICA7OyBcCi0JZXNhYwotCi0jSFAt VVggNy4wLCBubyBsb25nIGZpbGVuYW1lcywgbm8gbmV0d29yayBzdXBwb3J0LCBubyBjdXJzZXMu Ci0jSWYgeW91IGdldCBjb21waWxlciB3YXJuaW5ncyBsaWtlOgotIydTd2l0Y2ggdGFibGUgb3Zl cmZsb3cuIFRyeSB0aGUgLVdjLC1OdyBvcHRpb24uJyAoZm9yIGNrY3VuaS5jLCBvcgotI290aGVy IGZpbGVzKSBpbmNyZWFzZSB0aGUgJy4uLicgdmFsdWUgaW4gJy1XYywtTncuLi4nISBUaGUgZGVm YXVsdCBtYXhpbXVtCi0jc3dpdGNoIHRhYmxlIHN0YWNrICgtTncpIGlzIDI1MCB0YWJsZSBlbnRy aWVzLiBja2N1bmkuYyBmcm9tIE9jdCAxNiAyMDA5Ci0jbmVlZHMgMjU3IHRhYmxlIGVudHJpZXMg KEMtS2VybWl0IFZlcnNpb24gIjkuMC4yOTkiKS4KLSNPSzogMjAxMC8xMC8yNgotaHB1eDA3MDBz ZjoKLQlAJChNQUtFKSBocHV4LWhlYWRlcgotCUBlY2hvICdzdXBwb3J0aW5nOiBOTyBsb25nIGZp bGVuYW1lcywgTk8gbmV0d29yaywgTk8gY3Vyc2VzLicKLQkkKE1BS0UpIGhwdXgwNzAwbm9vcHQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1ESFBVWCAtREhQVVg3IC1E U0lHX1YgLUROT0dFVFVTRVJTSEVMTCAtREZORkxPQVQgXAotCS1ETk9fRE5TX1NSViAkKEtGTEFH UykgLVdjLC1OdzI2MCIKLQotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAotCSJDRkxBR1MgPSAtREhQVVggLURIUFVYNyAtRFNJR19WIC1ETk9HRVRVU0VSU0hFTEwg LURGTkZMT0FUIFwKLQktRE5PX0ROU19TUlYgJChLRkxBR1MpIC1XYywtTncyNjAgJChPRkxBR1Mp IiBcCi0JIkxOS0ZMQUdTID0gLXMiICJMSUJTID0gLWxtICQoTElCUykiCi0KLSNFeGFjdGx5IGFz IGhwdXgwNzAwc2YgYnV0IHdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uOgotI09LOiAyMDA5LzA5 LzMwCi1ocHV4MDcwMG9zZjoKLQlATUVTU0FHRTE9IndpdGggY29tcGlsZXIgb3B0aW1pemF0aW9u IiBcCi0JJChNQUtFKSBocHV4MDcwMHNmIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJL RkxBR1MgPSAkKEtGTEFHUykiICJPRkxBR1MgPSAtTyIKLQotI0hQLVVYIDcuMCwgc2hvcnQgZmls ZW5hbWVzLCBidXQgd2l0aCB0Y3AvaXAgYW5kIGN1cnNlcy4KLSNUbyB1c2UgdGhpcywgeW91IG11 c3QgaGF2ZSBib3VnaHQgdGhlIEFSUEEgU2VydmljZXMgUHJvZHVjdCBmcm9tIEhQLCBhbmQgeW91 Ci0jbXVzdCBoYXZlIC91c3IvbGliL2xpYkJTRC5hLgotIwotI0lmIHlvdSBnZXQgY29tcGlsZXIg d2FybmluZ3MgbGlrZToKLSMnU3ltYm9sIHRhYmxlIG92ZXJmbG93LiBUcnkgdGhlIC1XYywtTnMg b3B0aW9uLicgKGFzIGZvciBja3V1czQuYyBvcgotI290aGVyIGZpbGVzKSBpbmNyZWFzZSB0aGUg Jy4uLicgdmFsdWUgaW4gJy1XYywtTnMuLi4nISBUaGUgZGVmYXVsdCBtYXhpbXVtCi0jc3ltYm9s IHRhYmxlIHNpemUgKC1OcykgaXMgMjAwMCB0YWJsZSBlbnRyaWVzLiBja3V1czQuYyBmcm9tIE1h ciAxMiAyMDEwCi0jbmVlZHMgMjAzMSB0YWJsZSBlbnRyaWVzIChDLUtlcm1pdCBWZXJzaW9uICI5 LjAuMjk5IikuCi0jT0s6IDIwMTAvMDMvMjQKLWhwdXgwNzAwc2Z0Y3BjOgotCUAkKE1BS0UpIGhw dXgtaGVhZGVyCi0JQGVjaG8gJ3N1cHBvcnRpbmc6IE5PIGxvbmcgZmlsZW5hbWVzLCBcYycKLQlA ZWNobyAnYnV0IHdpdGggbmV0d29ya2luZywgY3Vyc2VzLCBIREIgdXVjcC4uLicKLQkkKE1BS0Up IGhwdXgwNzAwbm9vcHQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9ICAt REhQVVhERUJVRyAtREhQVVggLURIUFVYNyAtRFRDUFNPQ0tFVCAtRFNJR19WIFwKLQktRENLX1JF RElSIC1EQ0tfUlRTQ1RTIC1EQ0tfQ1VSU0VTIC1ETk9HRVRVU0VSU0hFTEwgLURGTkZMT0FUIFwK LQktRE5PX0ROU19TUlYgLURIREJVVUNQIC1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVjcFxc XCIgXAotCS1ETk9MT05HTE9ORyAkKEtGTEFHUykgLVdjLC1OdzI2MCwtTnMyMDQwIgotCi0JJChN QUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9ICAtREhQ VVhERUJVRyAtREhQVVggLURIUFVYNyAtRFRDUFNPQ0tFVCAtRFNJR19WIFwKLQktRENLX1JFRElS IC1EQ0tfUlRTQ1RTIC1EQ0tfQ1VSU0VTIC1ETk9HRVRVU0VSU0hFTEwgLURGTkZMT0FUIFwKLQkt RE5PX0ROU19TUlYgLURIREJVVUNQIC1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVjcFxcXCIg XAotCS1ETk9MT05HTE9ORyAkKEtGTEFHUykgLVdjLC1OdzI2MCwtTnMyMDQwICQoT0ZMQUdTKSIg XAotCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sbSAtbEJTRCAtbGN1cnNlcyIKLQotI0V4YWN0 bHkgYXMgYWJvdmUgYnV0IHdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uOgotI09LOiAyMDA5LzA5 LzMwCi1ocHV4MDcwMG9zZnRjcGM6Ci0JQE1FU1NBR0UxPSJ3aXRoIGNvbXBpbGVyIG9wdGltaXph dGlvbiIgXAotCSQoTUFLRSkgaHB1eDA3MDBzZnRjcGMgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCi0JIktGTEFHUyA9ICQoS0ZMQUdTKSIgIk9GTEFHUyA9IC1PIgotCi0jSFAgOTAwMCBzZXJp ZXMgMzAwLzgwMCBIUC1VWCA3LjAsIGxvbmcgZmlsZW5hbWVzLCBuZXR3b3JrIHN1cHBvcnQsIEhE QiB1dWNwLAotI2J1dCBOTyBjdXJzZXMuIFNlZSBjb21tZW50cyBpbiBocHV4MDcwMHNmdGNwYyBh Ym91dCBUQ1AvSVAgc3VwcG9ydC4KLSMKLSNJZiB5b3UgZ2V0IGNvbXBpbGVyIHdhcm5pbmdzIGxp a2U6Ci0jJ1N5bWJvbCB0YWJsZSBvdmVyZmxvdy4gVHJ5IHRoZSAtV2MsLU5zIG9wdGlvbi4nIChh cyBmb3IgY2t1dXM0LmMgb3IKLSNvdGhlciBmaWxlcykgaW5jcmVhc2UgdGhlICcuLi4nIHZhbHVl IGluICctV2MsLU5zLi4uJyEgVGhlIGRlZmF1bHQgbWF4aW11bQotI3N5bWJvbCB0YWJsZSBzaXpl ICgtTnMpIGlzIDIwMDAgdGFibGUgZW50cmllcy4gY2t1dXM0LmMgZnJvbSBNYXIgMTIgMjAxMAot I25lZWRzIDIwMzEgdGFibGUgZW50cmllcyAoQy1LZXJtaXQgVmVyc2lvbiAiOS4wLjI5OSIpLgot I09LOiAyMDEwLzAzLzI0Ci1ocHV4MDcwMGxmbjoKLQlAJChNQUtFKSBocHV4LWhlYWRlcgotCUBl Y2hvICdzdXBwb3J0aW5nOiBsb25nIGZpbGVuYW1lcywgbmV0d29ya2luZywgSERCIHV1Y3AkKE1F U1NBR0UyKS4uLicKLQkkKE1BS0UpIGhwdXgwNzAwbm9vcHQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIkNGTEFHUyA9ICAtREhQVVhERUJVRyAtREhQVVggLURIUFVYNyAtRFRDUFNPQ0tF VCAtRFNJR19WIC1ERk5GTE9BVCBcCi0JLUROT0dFVFVTRVJTSEVMTCAtRE5PU0VUQlVGIC1EQ0tf UkVESVIgLURDS19SVFNDVFMgLURMT05HRk4gXAotCS1ETk9fRE5TX1NSViAtRERJUkVOVCAtREhE QlVVQ1AgLURMT0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNwXFxcIiBcCi0JLUROT0xPTkdMT05H ICQoS0ZMQUdTKSAtV2MsLU53MjYwLC1OczIwNDAiCi0KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gIC1ESFBVWERFQlVHIC1ESFBVWCAtREhQ VVg3IC1EVENQU09DS0VUIC1EU0lHX1YgLURGTkZMT0FUIFwKLQktRE5PR0VUVVNFUlNIRUxMIC1E Tk9TRVRCVUYgLURDS19SRURJUiAtRENLX1JUU0NUUyAtRExPTkdGTiBcCi0JLUROT19ETlNfU1JW IC1ERElSRU5UIC1ESERCVVVDUCAtRExPQ0tfRElSPVxcXCIvdXNyL3Nwb29sL3V1Y3BcXFwiIFwK LQktRE5PTE9OR0xPTkcgJChLRkxBR1MpIC1XYywtTncyNjAsLU5zMjA0MCAkKE9GTEFHUykiIFwK LQkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbG0gLWxCU0QgJChMSUJTKSIKLQotI0V4YWN0bHkg YXMgYWJvdmUgKyBjdXJzZXMuCi0jT0s6IDIwMDkvMDkvMzAKLWhwdXgwNzAwbGZuYzoKLQlATUVT U0FHRTI9JywgY3Vyc2VzJyBcCi0JJChNQUtFKSBocHV4MDcwMGxmbiBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiS0ZMQUdTID0gLURDS19DVVJTRVMgJChLRkxBR1MpIiBcCi0JIkxJQlMg PSAtbGN1cnNlcyIKLQotI0V4YWN0bHkgYXMgYWJvdmUgaHB1eDA3MDBsZm4gYnV0IHdpdGggY29t cGlsZXIgb3B0aW1pemF0aW9uOgotI09LOiAyMDA5LzA5LzMwCi1ocHV4MDcwMG9sZm46Ci0JQE1F U1NBR0UxPSJ3aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbiIgXAotCSQoTUFLRSkgaHB1eDA3MDBs Zm4gS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUyA9ICQoS0ZMQUdTKSIgIk9G TEFHUyA9IC1PIgotCi0jRXhhY3RseSBhcyBhYm92ZSBocHV4MDcwMGxmbmMgYnV0IHdpdGggY29t cGlsZXIgb3B0aW1pemF0aW9uOgotI09LOiAyMDA5LzA5LzMwCi1ocHV4MDcwMG9sZm5jOgotCUBN RVNTQUdFMT0id2l0aCBjb21waWxlciBvcHRpbWl6YXRpb24iIFwKLQkkKE1BS0UpIGhwdXgwNzAw bGZuYyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTID0gJChLRkxBR1MpIiAi T0ZMQUdTID0gLU8iCi0KLSNIUCA5MDAwIFNlcmllcyAzMDAgb3IgNDAwLCBIUC1VWCA4LjAsIGxv bmcgZmlsZW5hbWVzIGFuZCBUQ1AvSVAgc3VwcG9ydC4KLSNUaGlzIG9uZSBzaG91bGQgYWxzbyB3 b3JrIG9uIDcwMC84MDAsIGJ1dCB3aXRob3V0IFBBLXNwZWNpZmljIG9wdGltaXphdGlvbi4KLSNJ biBjYXNlIC1EQ0tfUlRTQ1RTIGFuZCAtRENLX1JFRElSIG1ha2UgdHJvdWJsZSwgcmVtb3ZlIHRo ZW0uCi0jTk9URTogY2tjcHJvLmMsIGNrdXVzci5jIGFuZCBja3V1czMuYyBibG93IHVwIHRoZSBv cHRpbWl6ZXIsIHNvIGRvbid0IG9wdGltaXplCi0jdGhlbS4KLSNGb3IgSFAtVVggOC4wIG9uIE1v dG9yb2xhIENQVXMsIHlvdSBtaWdodCBoYXZlIHRvIHJlaW5zdGFsbCB5b3VyIGtlcm5lbCB3aXRo Ci0jbWF4ZHNpeiA+PSAweDAzMDAwMDAwLiAgQnV0IGlmIHBoeXNpY2FsIG1lbW9yeSBpcyBzbWFs bCwgdGhhdCBzdGlsbCB3aWxsIG5vdAotI2hlbHAgbXVjaC4KLSNPSzogMjAwOS8xMC8wMQotaHB1 eDA4MDA6Ci0JQCQoTUFLRSkgaHB1eC1oZWFkZXIKLQlATUVTU0FHRTM9JCR7TUVTU0FHRTM6PSdU Q1AvSVAnfTsgXAotCWVjaG8gInN1cHBvcnRpbmc6IGxvbmcgZmlsZW5hbWVzLCAkJE1FU1NBR0Uz LCBIREIgVVVDUCQoTUVTU0FHRTIpLi4uIgotCSQoTUFLRSkgLUIgIkNDPSQoQ0MpIiAiQ0MyPSQo Q0MyKSIgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JY2tjcHJvLiQoRVhUKSBja3V1c3Iu JChFWFQpIGNrdXVzMy4kKEVYVCkgXAotCSJDRkxBR1MgPSAgLURDS19SRURJUiAtREhQVVhERUJV RyAtREhQVVggLURIUFVYOCAtRFJFTkFNRSAtRFNJR19WIFwKLQktRE5PU0VUQlVGIC1ERElSRU5U IC1EQ0tfUlRTQ1RTIC1EU1RFUk1JT1ggLURMT05HRk4gLURUQ1BTT0NLRVQgXAotCS1ESERCVVVD UCAgLUROT19ETlNfU1JWIC1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVjcFxcXCIgLURGTkZM T0FUIFwKLQktRE5PTE9OR0xPTkcgJChLRkxBR1MpIgotCi0JJChNQUtFKSAtQiAiQ0M9JChDQyki ICJDQzI9JChDQzIpIiB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFH UyA9ICAtRENLX1JFRElSIC1ESFBVWERFQlVHIC1ESFBVWCAtREhQVVg4IC1EUkVOQU1FIC1EU0lH X1YgXAotCS1ETk9TRVRCVUYgLURESVJFTlQgLURDS19SVFNDVFMgLURTVEVSTUlPWCAtRExPTkdG TiAtRFRDUFNPQ0tFVCBcCi0JLURIREJVVUNQICAtRE5PX0ROU19TUlYgLURMT0NLX0RJUj1cXFwi L3Vzci9zcG9vbC91dWNwXFxcIiAtREZORkxPQVQgXAotCS1ETk9MT05HTE9ORyAtRE5PRENMRU5E VVNFUlNIRUxMICQoS0ZMQUdTKSAkKE9GTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJQlMg PSAtbG0gLWxCU0QgJChMSUJTKSIKLQotI0V4YWN0bHkgYXMgYWJvdmUgaHB1eDA4MDAgKyBjdXJz ZXMuCi0jT0s6IDIwMDkvMTAvMDEKLWhwdXgwODAwYzoKLQlATUVTU0FHRTI9JywgY3Vyc2VzJyBc Ci0JJChNQUtFKSBocHV4MDgwMCAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFH UyA9ICQoS0ZMQUdTKSAtRENLX0NVUlNFUyIgIkxJQlMgPSAtbGN1cnNlcyIKLQotI0hQIDkwMDAg SFAtVVggOC4wLCBubyBUQ1AvSVAgYmVjYXVzZSAvdXNyL2xpYi9saWJCU0QuYSBjYW4ndCBiZSBm b3VuZCwKLSNvciBUQ1AvSVAgaGVhZGVyIGZpbGVzIG1pc3NpbmcuCi0jT0s6IDIwMDkvMTAvMDEK LWhwdXgwODAwbm90Y3A6Ci0JQE1FU1NBR0UzPSdOTyBuZXR3b3JrLCBOTyBjdXJzZXMnIFwKLQkk KE1BS0UpICJNQUtFPSQoTUFLRSkiIGhwdXgwODAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAotCSJLRkxBR1MgPSAkKEtGTEFHUykgLVVUQ1BTT0NLRVQiCi0KLSNOb3cgdGhlIHNhbWUgYXMg YWJvdmUgaHB1eDA4MDAgYnV0IHdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uCi0jT0s6IDIwMDkv MTAvMDEKLWhwdXgwODAwbzoKLQlATUVTU0FHRTE9IndpdGggY29tcGlsZXIgb3B0aW1pemF0aW9u IiBcCi0JJChNQUtFKSBocHV4MDgwMCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZM QUdTID0gJChLRkxBR1MpIiAiT0ZMQUdTID0gLU8iCi0KLSNFeGFjdGx5IGFzIGFib3ZlIGhwdXgw ODAwICsgY3Vyc2VzIGFuZCB3aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbi4KLSNPSzogMjAwOS8x MC8wMQotaHB1eDA4MDBvYzoKLQlATUVTU0FHRTE9IndpdGggY29tcGlsZXIgb3B0aW1pemF0aW9u IiBcCi0JJChNQUtFKSBocHV4MDgwMGMgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktG TEFHUyA9ICQoS0ZMQUdTKSIgIk9GTEFHUyA9IC1PIiAiTElCUyA9IC1sY3Vyc2VzIgotCi0jRXhh Y3RseSBhcyBhYm92ZSBocHV4MDgwMG5vdGNwIGJ1dCB3aXRoIGNvbXBpbGVyIG9wdGltaXphdGlv bgotI09LOiAyMDA5LzEwLzAxCi1ocHV4MDgwMG9ub3RjcDoKLQlATUVTU0FHRTE9IndpdGggY29t cGlsZXIgb3B0aW1pemF0aW9uIiBcCi0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBocHV4MDgwMG5v dGNwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1MgPSAkKEtGTEFHUykiICJP RkxBR1MgPSAtTyIKLQotI0hQIDkwMDAgU2VyaWVzIDcwMCBvciA4MDAsIEhQLVVYIDguMCwgbG9u ZyBmaWxlbmFtZXMgYW5kIFRDUC9JUCBzdXBwb3J0LgotIyBMaWtlIHRoZSBwcmV2aW91cyBlbnRy aWVzLCBidXQgd2l0aCBQQS1SSVNDLXNwZWNpZmljIG9wdGltaXphdGlvbi4KLSNPSzogMjAwOS8x MC8wMQotaHB1eDA4MDBwYToKLQlATUVTU0FHRTE9IndpdGggUEEtUklTQy1zcGVjaWZpYyBvcHRp bWl6YXRpb24iIFwKLQkkKE1BS0UpIGhwdXgwODAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAotCSJLRkxBR1MgPSAkKEtGTEFHUykgK09iYjExMDAiCi0KLSNBcyBhYm92ZSwgYnV0IHdpdGgg Y3Vyc2VzLgotI09LOiAyMDA5LzEwLzAxCi1ocHV4MDgwMHBhYzoKLQlATUVTU0FHRTE9IndpdGgg UEEtUklTQy1zcGVjaWZpYyBvcHRpbWl6YXRpb24iIFwKLQkkKE1BS0UpIGhwdXgwODAwYyBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTID0gJChLRkxBR1MpICtPYmIxMTAwIgot Ci0jQXMgYWJvdmUsIGJ1dCBjb21waWxlZCB3aXRoIEdDQyAyLjMuMy4KLSNPSzogMjAwOS8xMC8w MQotaHB1eDA4MDBwYWdjYzoKLQlATUVTU0FHRTE9J3VzaW5nIHRoZSBnY2MgY29tcGlsZXInIFwK LQkkKE1BS0UpIGhwdXgwODAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDQz1nY2Mi ICJDQzI9Z2NjIiAiS0ZMQUdTID0gLWZ1bnNpZ25lZC1jaGFyICQoS0ZMQUdTKSIKLQotI0hQLVVY IDkuMCwgOS4wMSwgOS4wMywgOS4wNCwgOS4wNSwgOS4wNywgOS4xMCAuLi4sICsgVENQL0lQICsg Y3Vyc2VzLCBmdWxseQotI2NvbmZpZ3VyZWQuICBVc2UgdGhpcyBlbnRyeSB3aXRoIHRoZSByZXN0 cmljdGVkIGNvbXBpbGVyOiBubyBvcHRpbWl6YXRpb24sIG5vCi0jQU5TSSBzdXBwb3J0LiAgSWYg eW91IGdldCB1bnJlc29sdmVkIHNvY2tldHMgbGlicmFyeSByZWZlcmVuY2VzIGF0IGxpbmsgdGlt ZSwKLSN0aGVuIHRyeSBhZGRpbmcgLWxCU0QgdG8gTElCUywgb3IgZWxzZSByZW1vdmUgLURUQ1BT T0NLRVQgdG8gYnVpbGQgYSB2ZXJzaW9uCi0jd2l0aG91dCBUQ1AvSVAgc3VwcG9ydC4KLSMKLSNQ bGVhc2Ugbm90ZSB0aGF0IHdlIGhhdmUgdG8gYWRkIHRoZSBjb21waWxlciBvcHRpb24gK0RBMS4w LytEQTEuMSB0byBhdm9pZAotI2NvcmUtZHVtcHMgZm9yIGxhcmdlIGFyZ3VtZW50cyBpbiBJRiBN QVRDSC4gVGhlIG1hbiBwYWdlIHNheXMgdGhlc2Ugb3B0aW9ucwotI2FyZSBkZWZhdWx0IGJ1dCBD LUtlcm1pdCBkdW1wcyBjb3JlIHdpdGhvdXQgdGhlbSEgVGhlcmVmb3JlIGtlZXAgdGhlbQotI3Vu dG91Y2hlZC4gSWYgeW91IHdhbnQgdG8gb3ZlcndyaXRlIG9yIGRpc2FibGUgdGhlICtEQTEuMC8r REExLjEgb3B0aW9uIHVzZQotIydtYWtlIGhwdXgwOTAwIE9GTEFHUz0uLi4nLiBBbiBvdGhlciBw b3NzaWJpbGl0eSB3b3VsZCBiZSB0byBjcmVhdGUgYSBuZXcKLSNrZXJuZWwgd2l0aCBtYXhzc2l6 ID49IDB4MDExODUwMDAgKGRlZmF1bHQgbWF4c3Npej0weDAwODAwMDAwKS4KLSNPSzogMjAwOS8w OS8yNAotaHB1eDA5MDA6Ci0JQE1FU1NBR0UxQT0nLiBSZWFkIGhwdXgwOTAwIGVudHJ5IGNvbW1l bnRzIGlmIHlvdSBoYXZlIHRyb3VibGUuJyBcCi0JJChNQUtFKSBocHV4LWhlYWRlcgotCUBjYXNl IGB1bmFtZSAtbWAgaW4gXAotCSAgKi9bMzRdKikgS0ZMQUdTPSctRE5PTE9OR0xPTkcgJChLRkxB R1MpJyA7OyBcCi0JICAqLzcqKSAgICBBRkxBR1M9JytEQTEuMScgOzsgXAotCSAgKi84KikgICAg QUZMQUdTPScrREExLjAnIDs7IFwKLQllc2FjIDsgXAotCU9GTEFHUz0kJHtPRkxBR1M6LSQkQUZM QUdTfSA7IFwKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQki Q0ZMQUdTID0gLURIUFVYREVCVUcgLURIUFVYOSAtRFNURVJNSU9YIC1ERElSRU5UIC1EVVRJTUVI IFwKLQktRE5PU0VUQlVGIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIC1EUkVOQU1FIC1EQ0tfUkVE SVIgLURMT05HRk4gXAotCS1ESERCVVVDUCAtRExPQ0tfRElSPVxcXCIvdXNyL3Nwb29sL3V1Y3Bc XFwiIC1ERk5GTE9BVCBcCi0JLUROT0RDTEVORFVTRVJTSEVMTCAkJEtGTEFHUyAkJE9GTEFHUyIg XAotCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sbSAtbGN1cnNlcyIgIkNDPSQoQ0MpIiAiQ0My PSQoQ0MyKSIKLQotI0xpa2UgaHB1eDA5MDAsIGJ1dCBmb3IgdGhlICJ2YWx1ZS1hZGRlZCIgY29t cGlsZXIgb24gYWxsIEhQIDkwMDAgbW9kZWxzLgotI0FkZHMgb3B0aW1pemF0aW9uIGFuZCBBTlNJ IGNvbXBpbGF0aW9uOgotIyArTzIgbWFrZXMgc21hbGxlciBleGVjdXRhYmxlICg9IC1PID0gTGV2 ZWwtMSBhbmQgZ2xvYmFsIG9wdGltaXphdGlvbikKLSMgK08zIGFkZHMgaW50ZXJwcm9jZWR1cmFs IGdsb2JhbCBvcHRpbWl6YXRpb24sIG1ha2VzIGJpZ2dlciBleGVjdXRhYmxlLgotIyBQbGVhc2Ug bm90ZTogVG8gc3VwcG9ydCBsb25nLWxvbmcgd2Ugd291bGQgbmVlZCBjb21waWxlciBzd2l0Y2gg Jy1BZScgYnV0Ci0jIHRoaXMgb25lIHdvcmtzIG9ubHkgb24gUmlzYyBzeXN0ZW1zLiBCdXQgdGhl IGVxdWl2YWxhbnQgY29tcGlsZXIgZmxhZ3MKLSMgJy1BYSAtRF9IUFVYX1NPVVJDRSArZScgd29y a3MgZm9yIE1vdG9yb2xhIGFuZCBSaXNjLgotIyBJZiBvcHRpbWl6YXRpb24gZmFpbHMgb24gc29t ZSBtb2R1bGVzLCB5b3UgY2FuIGFkZDoKLSMgICtPYmI8bj4sICtPbGltaXQgPG4+LCBvciArT25v bGltaXQsIGRlcGVuZGluZyBvbiB5b3VyIGNjIHZlcnNpb24sCi0jIHdoZXJlIDxuPiBpcyBhIG51 bWJlciwgZS5nLiArT2JiMTIwMC4gIEluIG90aGVyIHdvcmRzLCBpZiB5b3UgZ2V0IG9wdGltaXpl cgotIyB3YXJuaW5ncywgYWRkIChmb3IgZXhhbXBsZSkgK09iYjEyMDA7IGlmIHlvdSBzdGlsbCBn ZXQgb3B0aW1pemVyIHdhcm5pbmdzLAotIyBpbmNyZWFzZSB0aGUgbnVtYmVyLiAgUmVwZWF0IHVu dGlsIHdhcm5pbmdzIGdvIGF3YXkuICBJZiB5b3VyIGNvbXBpbGVyCi0jIHBlcm1pdHMgaXQsIHVz ZSArT25vbGltaXQuIElmIG9wdGltaXplciBibG93cyB1cCBvbiBja2Nwcm8uYywgc2VlIG5leHQg ZW50cnkuCi0jIFJlcG9ydGVkbHksIG9uIHNvbWUgY29uZmlndXJhdGlvbnMsIHN1Y2ggYXMgSFA5 MDAwLzQyNWUgb3IgLzM0MCwgcGVyaGFwcwotIyBkZXBlbmRpbmcgb24gdGhlIGFtb3VudCBvZiBt YWluIG1lbW9yeSwgdGhpcyBlbnRyeSBtaWdodCBmYWlsIG5vIG1hdHRlciB3aGF0Ci0jIHlvdSBk byAoIk91dCBvZiBNZW1vcnkiLCAiY2M6IEZhdGFsIGVycm9yIGluIC9saWIvYy5jMSIsIGV0Yyku ICBJbiB0aGF0IGNhc2UKLSMgdXNlICJtYWtlIGhwdXgwOTAwIiAobm8gIm8iKS4KLSNPSzogMjAw OS8wOS8yNAotaHB1eDA5MDBvOgotCUBNRVNTQUdFMT0kJHtNRVNTQUdFMTotIndpdGggY29tcGls ZXIgb3B0aW1pemF0aW9uIn0gXAotCSQoTUFLRSkgaHB1eDA5MDAgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCi0JIktGTEFHUyA9ICQoS0ZMQUdTKSAtQWEgLURDS19BTlNJQyAtRF9IUFVYX1NP VVJDRSArTzIgK2UiCi0KLSMgRm9yIEhQLVVYIDkuMCBvbiBNb3Rvcm9sYSBDUFVzLCBvcHRpbWl6 YXRpb24gb2YgY2tjcHJvLmMgdGVuZHMgdG8gYmxvdyB1cAotIyB0aGUgY29tcGlsZXIuICBZb3Ug bWlnaHQgaGF2ZSB0byByZWluc3RhbGwgeW91ciBrZXJuZWwgd2l0aCBtYXhkc2l6ID49Ci0jIDB4 MDMwMDAwMDAuICBCdXQgaWYgcGh5c2ljYWwgbWVtb3J5IGlzIHNtYWxsLCB0aGF0IHN0aWxsIHdp bGwgbm90IGhlbHAgbXVjaC4KLSMgSW4gdGhhdCBjYXNlLCB1c2UgdGhpcyBlbnRyeSB0byBza2lw IG9wdGltaXphdGlvbiBvZiBja2Nwcm8uYy4gIEJ1dCBmb3IKLSMgQy1LZXJtaXQgOC4wLjIwOCB5 b3UgbmVlZCBhIGtlcm5lbCB3aXRoIG1heGRzaXogPj0gMHgwMjAwMDAwMCB0byBjb21waWxlIGFu Ci0jIG9wdGltaXplZCBja2NmdHAuYy4KLSMgUGxlYXNlIG5vdGU6IFRvIHN1cHBvcnQgbG9uZy1s b25nIHdlIHdvdWxkIG5lZWQgY29tcGlsZXIgc3dpdGNoICctQWUnIGJ1dAotIyB0aGlzIG9uZSB3 b3JrcyBvbmx5IG9uIFJpc2Mgc3lzdGVtcy4gQnV0IHRoZSBlcXVpdmFsYW50IGNvbXBpbGVyIGZs YWdzCi0jICctQWEgLURfSFBVWF9TT1VSQ0UgK2UnIHdvcmtzIGZvciBNb3Rvcm9sYSBhbmQgUmlz Yy4KLWhwdXgwOTAwbTY4a286Ci0JQE1FU1NBR0UxPSd3aXRob3V0IGNvbXBpbGVyIG9wdGltaXph dGlvbiBmb3IgY2tjcHJvLiQoRVhUKSAuLi4nIFwKLQkkKE1BS0UpIGhwdXgtaGVhZGVyCi0JJChN QUtFKSBja3V1c3IuJChFWFQpIGNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBcCi0JY2tjZnRw LiQoRVhUKSBja2Nwcm8uJChFWFQpIFwKLQkiQ0ZMQUdTID0gLURIUFVYREVCVUcgLURIUFVYOSAt RFNURVJNSU9YIC1ERElSRU5UIFwKLQktRE5PU0VUQlVGIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VU IC1EUkVOQU1FICAtRENLX1JFRElSIC1ETE9OR0ZOIFwKLQktREhEQlVVQ1AgLURMT0NLX0RJUj1c XFwiL3Vzci9zcG9vbC91dWNwXFxcIiAtREZORkxPQVQgJChLRkxBR1MpIgotCUBlY2hvCi0JQE1F U1NBR0UxPSJ3aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbiBmb3IgdGhlIHJlc3QiIFwKLQkkKE1B S0UpIGhwdXgwOTAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1MgPSAkKEtG TEFHUykgLUFhIC1EQ0tfQU5TSUMgLURfSFBVWF9TT1VSQ0UgK08yICtlIgotCi0jIE9sZCBuYW1l IGZvciBocHV4MDkwMG02OGtvLgotaHB1eDA5MDBtb3Q6Ci0JJChNQUtFKSBocHV4MDkwMG02OGtv IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUyA9ICQoS0ZMQUdTKSIKLQotI0xpa2Ug aHB1eDA5MDBvIGJ1dCB3aXRoIGFkZGl0aW9uYWwgbW9kZWwtNzAwLzgwMC1zcGVjaWZpYyBvcHRp bWl6YXRpb25zLgotIyArRVNsaXQgPSBjb25zb2xpZGF0ZSBzdHJpbmdzIGluIHJlYWQtb25seSBt ZW1vcnkuCi0jICtFU2ZzYyA9IGlubGluZSBtaWxsaWNvZGUgY2FsbHMgd2hlbiBjb21wYXJpbmcg cG9pbnRlcnMuCi1ocHV4MDkwMG83MDA6Ci0JQGVjaG8gJ0lmIHlvdSBnZXQgb3B0aW1pemVyIHdh cm5pbmdzIFxjJwotCUBlY2hvICd0cnkgIm1ha2UgaHB1eDA5MDBvNzAwIEtGTEFHUz0rT2JiMTIw MCInCi0JQE1FU1NBR0UxPSJ3aXRoIFBBLVJJU0Mtc3BlY2lmaWMgb3B0aW1pemF0aW9ucyIgXAot CSQoTUFLRSkgaHB1eDA5MDBvIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1Mg PSAkKEtGTEFHUykgK0VTbGl0ICtFU3NmYyIKLQotI0hQLVVYIDkuMCwgOS4wMSwgOS4wMywgOS4w NCwgOS4wNSwgOS4wNywgOS4xMCAuLi4sICsgVENQL0lQICsgY3Vyc2VzLCBmdWxseQotI2NvbmZp Z3VyZWQsIGJ1aWx0IHdpdGggZ2NjLCBhbGwgbW9kZWxzIGV4Y2VwdCA4MDAgc2VyaWVzLgotI1lv dSBtaWdodCBuZWVkIHRvIGFkZCB0aGUgaW5jbHVkZSBwYXRoIGZvciBnY2MgaGVhZGVycywgZm9y IGV4YW1wbGU6Ci0jICdLRkxBR1M9LUkvdXNyL2dudS9saWIvZ2NjLWxpYi9ocHBhMS4xLWhwLWhw dXgvMi40LjUvaW5jbHVkZS8nCi1ocHV4MDkwMGdjYzoKLQlATUVTU0FHRTE9J3VzaW5nIHRoZSBn Y2MgY29tcGlsZXInIFwKLQkkKE1BS0UpIGhwdXgwOTAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gQ0M9Z2NjIENDMj1nY2MgXAotCSJLRkxBR1MgPSAtRENLX0FOU0lDICQoS0ZMQUdTKSIgXAot CSJPRkxBR1MgPSAtZnVuc2lnbmVkLWNoYXIgLU8yICQoT0ZMQUdTKSIKLQotI0hQLTkwMDAgSFAt VVggMTAuMCArIFRDUC9JUCArIGN1cnNlcywgZnVsbHkgY29uZmlndXJlZC4KLSNVc2Ugd2l0aCBy ZXN0cmljdGVkIChidW5kbGVkKSBjb21waWxlcjogbm8gb3B0aW1pemF0aW9uLCBubyBBTlNJIHN1 cHBvcnQuCi0jbGliY3Vyc2VzIG5lZWRlZCBmb3IgZnVsbHNjcmVlbiBmaWxlIHhmZXIgZGlzcGxh eSBpbiBIUC1VWCAxMC4wMCBhbmQgMTAuMDEuCi0jbGliSGN1cnNlcyAoTk9UIGxpYmN1cnNlcyEp IGZvciBmdWxsc2NyZWVuIGRpc3BsYXksIHRvIHdvcmsgYXJvdW5kIGZhdGFsIGJ1Z3MKLSNpbiBI UC1VWCAxMC4xMCBhbmQgMTAuMjAgY3Vyc2VzLiBNYXliZSB3ZSBjb3VsZCB1c2UgbGN1cnNlcyBm b3IgMTAuMzAsIHNpbmNlCi0jdGhlIDEwLjEwIGN1cnNlcyBwcm9ibGVtIGlzIHN1cHBvc2VkbHkg Zml4ZWQgaW4gMTAuMzAuCi0jICtEQTEuMCA9IEdlbmVyYXRlIFBBLVJJU0MgMS4wIGNvZGUgdGhh dCBydW5zIG9uIGJvdGggNzAwIGFuZCA4MDAgbW9kZWxzLgotIyArREExLjEgPSBHZW5lcmF0ZSBQ QS1SSVNDIDEuMSBjb2RlIHRoYXQgcnVucyBvbiBib3RoIDcwMCBhbmQgODAwIG1vZGVscy4KLSMg Tm90ZSB0aGF0IEhQLVVYIDEwLjIwIGFuZCB1cHdhcmRzIGRvIG5vdCBzdXBwb3J0IFBBLVJJU0Mg MS4wIHN5c3RlbXMuCi0jIEFuZCB0aGF0IGFzIG9mIERlYyAyMDAxLCAxMS4wMCBhbmQgMTEuMTEg YXJlIFBBLW9ubHkgYW5kIDExLjIwIGlzIElBNjQtb25seS4KLSMgTGF0ZXIgMTEuMnggcmVsZWFz ZXMgYXJlIGV4cGVjdGVkIHRvIGJlIGZvciBib3RoLiAgQXJjaGl0ZWN0dXJlIGNhbiBiZQotIyBk ZXRlcm1pbmVkIHdpdGggdGhlIG1vZGVsIGNvbW1hbmQsIGF0IGxlYXN0IGluIDEwLjIwIGFuZCBs YXRlci4uLgotI0ZvciBmdXR1cmUgcmVsZWFzZXMsIHdlIG5lZWQgdG8gaW5jbHVkZSArREExLjEg Zm9yIFBBIGJ1aWxkcywgc28gdGhhdCBhCi0jYmluYXJ5IGJ1aWx0IG9uIFBBIDIuMCB3aWxsIHN0 aWxsIHdvcmsgb24gUEEgMS4xIG1hY2hpbmVzLCB3aGVyZWFzICtEQTEuMQotI211c3QgTk9UIGJl IGluY2x1ZGVkIGZvciBJQTY0IGJ1aWxkcy4KLSM0IEphbiAyMDA2IC0gQWRkZWQgTGFyZ2UgRmls ZSBTdXBwb3J0IChMRlMpLiAgTGFyZ2UgZmlsZXMgKD4yR0IpIGFyZQotI3Bvc3NpYmxlIGluIEhQ LVVYIDEwLjIwIGFuZCBsYXRlci4gIFRoZSBvbmx5IGNoYW5nZSBpcyB0byBhZGQ6Ci0jIC1EX0xB UkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NAotI3RvIEtGTEFHUy4gIFRoZXNl IHNob3VsZCBiZSBoYXJtbGVzcyBpbiAxMC4wMCBhbmQgMTAuMTAsIGlmIGFueSBvZiBleGFtcGxl cwotI29mIHRob3NlIHN0aWxsIGV4aXN0LCBidXQgSSBoYXZlIG5vIHdheSB0byB0ZXN0IHRoaXMg aHlwb3RoZXNpcy4KLSNPSzogMjAwOS8xMS8xNgotaHB1eDEwMDA6Ci0JQCQoTUFLRSkgaHB1eC1o ZWFkZXIKLQlATElCUz0nLWxIY3Vyc2VzJyA7IFwKLQlBRkxBR1M9JytEQTEuMScgOyBcCi0JY2Fz ZSBgdW5hbWUgLXJgIGluIFwKLQkgICBbQUJdLjEwLjAqKSAgS0ZMQUdTPSctREhQVVgxMDAwICQo S0ZMQUdTKScgOyBcCi0JICAgICAgICAgICAgICAgIEFGTEFHUz0nK0RBMS4wJyA7IExJQlM9Jy1s Y3Vyc2VzJyAgOzsgXAotCSAgIFtBQl0uMTAuMSopICBLRkxBR1M9Jy1ESFBVWDEwMTAgLURfX0hQ X0NVUlNFUyAkKEtGTEFHUyknIDsgXAotCSAgICAgICAgICAgICAgICA7OyBcCi0JICAgW0FCXS4x MC4yKikgIEtGTEFHUz0nLURIUFVYMTAyMCAtRF9fSFBfQ1VSU0VTICQoS0ZMQUdTKScgOyBcCi0J ICAgICAgICAgICAgICAgIDs7IFwKLQkgICBbQUJdLjEwLjMqKSAgS0ZMQUdTPSctREhQVVgxMDMw IC1EX19IUF9DVVJTRVMgJChLRkxBR1MpJyA7IFwKLQkgICAgICAgICAgICAgICAgOzsgXAotCSAg IFtBQl0uMTAuPyopICBLRkxBR1M9Jy1ESFBVWDEwWFggLURfX0hQX0NVUlNFUyAkKEtGTEFHUykn IDsgXAotCSAgICAgICAgICAgICAgICA7OyBcCi0JICAgW0FCXS4xMS4wKikgIEtGTEFHUz0nLURI UFVYMTEwMCAtRF9fSFBfQ1VSU0VTICQoS0ZMQUdTKScgOyBcCi0JICAgICAgICAgICAgICAgIDs7 IFwKLQkgICBbQUJdLjExLjEqKSAgS0ZMQUdTPSctREhQVVgxMTAwIC1EX19IUF9DVVJTRVMgJChL RkxBR1MpJyA7IFwKLQkgICAgICAgICAgICAgICAgOzsgXAotCSAgIFtBQl0uMTEuPyopICBLRkxB R1M9Jy1ESFBVWDExMDAgLURfX0hQX0NVUlNFUyAkKEtGTEFHUyknIDsgXAotCSAgICAgICAgICAg ICAgICBBRkxBR1M9JycgOyBMSUJTPSctbGN1cnNlcycgOzsgXAotCWVzYWMgOyBcCi0JT0ZMQUdT PSQke09GTEFHUzotJCRBRkxBR1N9IDsgXAotCSQoTUFLRSkgIlNIRUxMPS91c3IvYmluL3NoIiB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNDPSQoQ0MpIiAiQ0MyPSQoQ0My KSIgXAotCSJDRkxBR1MgPSAtREhQVVgxMCAtRERJUkVOVCAtRFNURVJNSU9YIC1EQ0tfRFNZU0lO SSAtREhEQlVVQ1AgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfV1JFRlJFU0ggLURUQ1BTT0NLRVQgLURD S19SRURJUiAtRFJFTkFNRSAtREZORkxPQVQgXAotCS1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklM RV9PRkZTRVRfQklUUz02NCBcCi0JJCRLRkxBR1MgJCRPRkxBR1MiIFwKLQkiTE5LRkxBR1M9LXMg JChMTktGTEFHUykiICJMSUJTID0gLWxtICQkTElCUyAkKEtMSUJTKSIKLQotIyBUaGlzIGlzIGEg a2x1ZGdlLCBjb3B5aW5nIGhwdXgwOTAwZ2NjIGFuZCBhZGFwdGluZyBocHV4MTAwMAotIyAoYWRk IENDIGFuZCBDQzIsIGRyb3AgdGhlIEExLlswfHwxXSkKLSMgQnVpbGRzIHcvIG5vIGNvbXBpbGVy IHdhcm5pbmdzIGJ1dCBtaW5pbWFsbHkgdGVzdGVkLgotIwotI09LOiAyMDA5LzA5LzIxCi1ocHV4 MTAwMGdjYzoKLQlATUVTU0FHRTE9InVzaW5nIHRoZSBnY2MgY29tcGlsZXIgJChNRVNTQUdFMSki IFwKLQkkKE1BS0UpIGhwdXgxMDAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gQ0M9Z2NjIEND Mj1nY2MgXAotCSJLRkxBR1MgPSAkKEtGTEFHUykiICJPRkxBR1MgPSAtRENLX0FOU0lDIC1mdW5z aWduZWQtY2hhciAtTzIiCi0KLSMgVHJ1c3RlZCBIUC1VWCAxMAotIyBlY2hvIEtGTEFHUz0kKEtG TEFHUykgWVRBUkdFVCBZVEFSR0VUPSQoWVRBUkdFVCkgJChYVEFSR0VUKSA7Ci1ocHV4MTAwMHQ6 Ci0JQGNhc2UgIiQoS1RBUkdFVCkiIGluIFwKLQkgICAqK29wZW5zc2wgfCAqK3NzbCkgXAotCQlL RU5UUlk9aHB1eDEwMDBvK29wZW5zc2wgOzsgXAotCSAgICpnY2MpIFwKLQkJS0VOVFJZPWhwdXgx MDAwZ2NjIDs7IFwKLQkgICAqbyspIEtFTlRSWT1ocHV4MTAwMG8rIDs7IFwKLQkgICAqbykJS0VO VFJZPWhwdXgxMDAwbyA7OyBcCi0JICAgKikJS0VOVFJZPWhwdXgxMDAwIDs7IFwKLQllc2FjIDsg XAotCU1FU1NBR0UxPSJhbmQgc3VwcG9ydCBmb3IgJ1RydXN0ZWQgSFAtVVgnIiBcCi0JJChNQUtF KSAkJEtFTlRSWSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTID0gJChLRkxB R1MpIC1ESFBVWDEwX1RSVVNURUQiICJLTElCUz0tbHNlYyIKLQotaHB1eDEwMDB0bzoKLQkkKE1B S0UpIGhwdXgxMDAwdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLWhwdXgxMDAwdG8rOgot CSQoTUFLRSkgaHB1eDEwMDB0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotaHB1eDEwMDB0 Z2NjOgotCSQoTUFLRSkgaHB1eDEwMDB0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotaHB1 eDEwMDB0bytzc2wgaHB1eDEwMDB0bytvcGVuc3NsOgotCSQoTUFLRSkgaHB1eDEwMDB0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0KLQotaHB1eDEwMDB0Z2NjK3NzbCBocHV4MTAwMHRnY2Mrb3Bl bnNzbDoKLQkkKE1BS0UpIGhwdXgxMDAwdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSNI UC05MDAwIEhQLVVYIDEwLjAwIGFuZCBoaWdoZXIgd2l0aCBBTlNJIHByb3RvdHlwaW5nIGFuZCBv cHRpbWl6YXRpb24uCi0jUEEtUklTQyBvbmx5LCBubyBNb3Rvcm9sYSBvciBvdGhlciBoYXJkd2Fy ZSBpcyBzdXBwb3J0IGluIEhQLVVYIDEwLjAwKysuCi0jVGhlIHVuYnVuZGxlZCBvcHRpb25hbCBj b21waWxlciBpcyByZXF1aXJlZC4KLSNZb3VyIHBhdGggc2hvdWxkIHN0YXJ0IHdpdGggL29wdC9h bnNpYy9iaW4uCi0jIC1XbCwtRncgPSBSZW1vdmUgc3RhY2sgdW53aW5kIHRhYmxlIChpbmZvIHVz ZWQgYnkgZGVidWdnZXJzKS4KLSMgK08yIG1ha2VzIGEgc21hbGxlciBleGVjdXRhYmxlICg9IC1P ID0gTGV2ZWwtMSBhbmQgZ2xvYmFsIG9wdGltaXphdGlvbikuCi0jICtPMyBhZGRzIGludGVycHJv Y2VkdXJhbCBnbG9iYWwgb3B0aW1pemF0aW9uLCBtYWtlcyBhIGJpZ2dlciBleGVjdXRhYmxlLgot IyArT25vbGltaXQgYWxsb3dzIGFsbCBtb2R1bGVzIHRvIGJlIG9wdGltaXplZCwgbm8gbWF0dGVy IGhvdyBjb21wbGV4LiAgQnV0OgotIyAgKGEpICtPbm9saW1pdCBkb2VzIG5vdCBzZWVtIHRvIGFs d2F5cyBiZSB0aGVyZSBpbiBIUC1VWCAxMC4wMCwgYW5kOgotIyAgKGIpIHNvbWUgbW9kdWxlcyBt aWdodCB0YWtlIGhvdXJzIG9uIGxvdy1tZW1vcnkgYW5kL29yIHNsb3cgc3lzdGVtcy4KLSMgVGhl IGZvbGxvd2luZyBhcmUgUEEtUklTQy1zcGVjaWZpYyBvcHRpbWl6YXRpb25zOgotIyArRVNsaXQg PSBDb25zb2xpZGF0ZSBzdHJpbmdzIGluIHJlYWQtb25seSBtZW1vcnkuCi0jICtFU2ZzYyA9IElu bGluZSBtaWxsaWNvZGUgY2FsbHMgd2hlbiBjb21wYXJpbmcgcG9pbnRlcnMuCi0jIFlvdSBtaWdo dCBuZWVkIHRvIGNvbmZpZ3VyZSB5b3VyIGtlcm5lbCBmb3IgYSBtYXhkc2l6IG9mIDB4MEIwMDAw MDAgKDE3Nk1CKQotIyBvciBncmVhdGVyIHRvIHByZXZlbnQgdGhlIG9wdGltaXplciBmcm9tIHJ1 bm5pbmcgb3V0IG9mIHNwYWNlLgotIyBEZWNlbWJlciAyMDAxOiArRVNsaXQgK0VTc2ZjIHJlbW92 ZWQgYmVjYXVzZSBub3Qgc3VwcG9ydGVkIG9uIElBNjQuCi0jIFNvbWVib2R5IHdobyBjYXJlcyBj YW4gdXNlICdtb2RlbCcgdG8gc2VlIHdoZXRoZXIgaXQncyBQQS1SSVNDIG9yIElBNjQKLSMgYW5k IGluY2x1ZGUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpbWl6YXRpb24gZmxhZ3MuICBB bHNvIG5vdGU6Ci0jICtEQTEuMSBpcyBQQS1vbmx5LiAgSWYgdGhpcyBpcyBpbmNsdWRlZCBpbiBp biBIUC1VWCAxMS4wMCBvciBsYXRlciwKLSMgdGhlbiArRFMyLjAgc2hvdWxkIGJlIGluY2x1ZGVk IHRvbyAoYnV0IGRvbid0IHVzZSArRFMyLjAgd2l0aG91dCArREExLjEsCi0jIG9yIGVsc2UgdGhl IGJpbmFyeSB3b24ndCBydW4gb24gb2xkZXIgUEEgaGFyZHdhcmUpLgotI09LOiAyMDA5LzA5LzIx Ci1ocHV4MTAwMG86Ci0JQGNhc2UgYHVuYW1lIC1tYCBpbiBcCi0JICBpYTY0KSA7OyBcCi0JICAq KSBNRkxBR1M9JytFU2xpdCArRVNzZmMnIDs7IFwKLQllc2FjIDsgXAotCU1FU1NBR0UxPSJ3aXRo IFBBLVJJU0Mtc3BlY2lmaWMgb3B0aW1pemF0aW9ucyAkKE1FU1NBR0UxKSIgXAotCSQoTUFLRSkg IlNIRUxMPS91c3IvYmluL3NoIiAiUEFUSD0vb3B0L2Fuc2ljL2JpbjokJFBBVEgiIGhwdXgxMDAw IFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1MgPSAkKEtGTEFHUykgXAotCS1B ZSAtRF9IUFVYX1NPVVJDRSAtRENLX0FOU0lDIC1EVVRJTUVIIFwKLQkrTzIgLVdsLC1GdyAkJE1G TEFHUyIKLQotI0xpa2UgaHB1eDEwMDBvIGJ1dCB3aXRoICIrT25vbGltaXQiLgotI09uIDcwMCBz ZXJpZXMgc2V0IGtlcm5lbCBwYXJhbWV0ZXIgbWF4ZHNpeiA+PSAweDBEMDAwMDAwICg9MjA4TUIp LgotI1Rha2VzIGEgbG9uZyB0aW1lLgotaHB1eDEwMDBvKzoKLQlATUVTU0FHRTE9ImFuZCArT25v bGltaXQgJChNRVNTQUdFMSkiIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSQoTUFLRSkg aHB1eDEwMDBvIFwKLQkiS0ZMQUdTID0gJChLRkxBR1MpICtPbm9saW1pdCIKLQotI0hQLVVYIDEw Lnh4ICsgMTEueHggd2l0aCBvcHRpbWl6aW5nIEFOU0kgY29tcGlsZXIgYW5kIE9wZW5TU0wuCi0j RGVmaW5lIFNTTExJQiBhbmQgU1NMSU5DIGFwcHJvcHJpYXRlbHkgZm9yIHlvdXIgT3BlblNTTCBp bnN0YWxsYXRpb24uCi0jVG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IFNTTExJQiBhbmQgU1NMSU5D IHNldHRpbmdzIHlvdSBjYW4gYWxzbyB1c2UgdGhlCi0jY29tbWFuZC1saW5lIHZhcmlhYmxlIEtT U0xMSUIgYW5kIEtTU0xJTkMgbGlrZToKLSNtYWtlIGhwdXgxMDAwbytvcGVuc3NsIEtTU0xMSUI9 LUwvb3B0L29wZW5zc2wvbGliIEtTU0xJTkM9LUkvLi4uCi0jRGl0dG8gZm9yIHRoZSBabGliIGxv Y2F0aW9uLgotI1RoaXMgZW50cnkgd29ya3MgZm9yIEMtS2VybWl0IDguMC4yMDYgb24gSFAtVVgg MTAuMjAgKyAxMS4xMQotI3dpdGggT3BlblNTTCAwLjkuNiArIDAuOS43Ci0jTk9URTogYW4gQU5T SSBDIGNvbXBpbGVyIGlzIHJlcXVpcmVkIGZvciB0aGUgU1NMIGludGVyZmFjZS4gIElmIHlvdSBk b24ndAotI2hhdmUgdGhlIEhQIE9wdGltaXppbmcgQU5TSSBjb21waWxlciwgc2VlIHRoZSBocHV4 MTAwMGdjYytvcGVuc3NsIHRhcmdldAotI2JlbG93LgotaHB1eDEwMDBvK3NzbCBocHV4MTAwMG8r b3BlbnNzbDoKLQlAY2FzZSAiJChLVEFSR0VUKSIgaW4gXAotCSAgICpnY2MrKikgXAotCSAgICAg ICAgS0VOVFJZPWhwdXgxMDAwZ2NjIDs7IFwKLQkgICAqKSAgIEtFTlRSWT1ocHV4MTAwMG8gOzsg XAotCWVzYWMgOyBcCi0JY2FzZSAiJChLVEFSR0VUKSIgaW4gXAotCSAgICotemxpYiopIFwKLQkg ICAgICAgIERaTElCPSBMWkxJQj0gOzsgXAotCSAgICopICAgRFpMSUI9LURaTElCIExaTElCPSct TC9vcHQvemxpYi9saWIgLWx6JyA7OyBcCi0JZXNhYyA7IFwKLQlTU0xJTkM9JCR7S1NTTElOQzot JChTU0xJTkMpfTsgXAotCVNTTExJQj0kJHtLU1NMTElCOi0kKFNTTExJQil9OyBcCi0JTUVTU0FH RTE9ImFuZCB3aXRoIE9wZW5TU0wgJChNRVNTQUdFMSkiIFwKLQkkKE1BS0UpICQkS0VOVFJZIEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCUtGTEFHUz0iLURDS19BVVRIRU5USUNBVElPTiAt RENLX1NTTCAtRE9QRU5TU0xfMDk3ICQkRFpMSUIgXAotCSQkU1NMSU5DICQoS0ZMQUdTKSIgXAot CUtMSUJTPSIkKEtMSUJTKSBcCi0JJCRTU0xMSUIgLWxzc2wgLWxjcnlwdG8gXAotCSQkTFpMSUIg XAotCSIKLQotIyBEaXR0byBidXQgd2l0aG91dCBabGliOgotaHB1eDEwMDBvK3NzbC16bGliIGhw dXgxMDAwbytvcGVuc3NsLXpsaWI6Ci0JQE1FU1NBR0UxPSJidXQgd2l0aG91dCBabGliICQoTUVT U0FHRTEpIiBcCi0JJChNQUtFKSBocHV4MTAwMG8rc3NsIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0KLQotI0hQLVVYIDEwLjAwIG9yIGhpZ2hlciB3aXRoIE9wZW5TU0wgMC45LjcuICBDb21waWxl ZCB3aXRoIGdjYy4KLSNGcm9tIENocmlzIENoYW5leSwgTkVDIEFtZXJpY2EgSW5jLiAgSGlzIGlu c3RydWN0aW9uczoKLSMgKDEpIEluc3RhbGwgZ2NjIHZlcnNpb24gMy4yLjMgJiBiaW51dGlscyB2 ZXJzaW9uIDIuMTMuMgotIyAgICAgKHVzZWQgYmluYXJ5IGRlcG90IGZyb20gaHR0cDovL2hwdXgu Y3MudXRhaC5lZHUvKQotIyAoMikgSW5zdGFsbCBnY2MgbWFrZSB2ZXJzaW9uIDMuODAgZnJvbSBo dHRwOi8vaHB1eC5jcy51dGFoLmVkdS8KLSMKLSMgb3I6IGdjYyAyLjkuMjAwMC0xMi0xIGZyb20g IkxpbnV4IHRvIGhwLXV4IDExLjAvMTFpIHBvcnRpbmcga2l0IHZlcnNpb24gMS4wCi0jICAgICAo MkNEKSIgZnJlZSBmcm9tOiAgaHR0cDovL3d3dy5zb2Z0d2FyZS5ocC5jb20KLSMKLSMgKDMpIElu c3RhbGwgb3BlblNTTCB2ZXJzaW9uIDAuOS43YiBmcm9tIGh0dHA6Ly93d3cuc29mdHdhcmUuaHAu Y29tCi0jICg0KSBJbnN0YWxsIGZsZXggdmVyc2lvbiAyLjUuNCBmcm9tIGh0dHA6Ly9ocHV4LmNz LnV0YWguZWR1LwotIyAoNSkgSW5zdGFsbCBnbXAgdmVyc2lvbiAzLjEuMSBmcm9tIGh0dHA6Ly9o cHV4LmNzLnV0YWguZWR1LwotIwotI05vdGUgZnJvbSBQZXRlciBFaWNoaG9ybiwgYXNzeXN0IE11 bmljaC4gSXQgd29ya3MgYWxzbyB3aXRob3V0IGdjYyBtYWtlIQotaHB1eDEwMDBnY2Mrc3NsIGhw dXgxMDAwZ2NjK29wZW5zc2w6Ci0JJChNQUtFKSBocHV4MTAwMG8rb3BlbnNzbCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9Ci0KLSMgRGl0dG8gYnV0IHdpdGhvdXQgWmxpYjoKLWhwdXgxMDAwZ2Nj K3NzbC16bGliIGhwdXgxMDAwZ2NjK29wZW5zc2wtemxpYjoKLQkkKE1BS0UpIGhwdXgxMDAwbytv cGVuc3NsLXpsaWIgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi0jIFNhbWUgZm9yIEhQLVVY IDExCi1ocHV4MTEwMG8rc3NsIGhwdXgxMTAwbytvcGVuc3NsOgotCSQoTUFLRSkgaHB1eDEwMDBv K29wZW5zc2wgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi0jT0s6IDIwMDkvMDkvMjYKLWhw dXgxMTAwZ2NjK3NzbCBocHV4MTEwMGdjYytvcGVuc3NsOgotCSQoTUFLRSkgaHB1eDEwMDBnY2Mr b3BlbnNzbCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLWhwdXgxMTAwbytzc2wtemxpYiBo cHV4MTEwMG8rb3BlbnNzbC16bGliOgotCSQoTUFLRSkgaHB1eDEwMDBvK29wZW5zc2wtemxpYiBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLWhwdXgxMTAwZ2NjK3NzbC16bGliIGhwdXgxMTAw Z2NjK29wZW5zc2wtemxpYjoKLQkkKE1BS0UpIGhwdXgxMDAwZ2NjK29wZW5zc2wtemxpYiBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSMgSFAtVVggMTEKLSMgTm90ZTogdGhlc2UgYXJlIDMy LWJpdCBidWlsZHMgZXZlbiBvbiBJQTY0LgotIyBBZGRpbmcgK0RENjQgdG8gQ0ZMQUdTIHByb2R1 Y2VzIDY0LWJpdCBvYmplY3QgZmlsZXMsCi0jIGJ1dCB0aGUgbGlua2VyIGZhaWxzIHRvIGZpbmQg dGhlIG5lZWRlZCA2NC1iaXQgbGlicy4KLSNPSzogMjAwOS8wOS8yNgotaHB1eDExMDA6Ci0JJChN QUtFKSBocHV4MTAwMCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSNPSzogMjAwOS8wOS8y NgotaHB1eDExMDBvOgotCSQoTUFLRSkgaHB1eDEwMDBvIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0KLQotaHB1eDExMDBvKzoKLQkkKE1BS0UpIGhwdXgxMDAwbysgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfQotCi0jT0s6IDIwMDkvMDkvMjYKLWhwdXgxMTAwZ2NjOgotCSQoTUFLRSkgaHB1eDEw MDBnY2MgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi0jIFRydXN0ZWQgSFAtVVggMTEKLWhw dXgxMTAwdDoKLQkkKE1BS0UpIGhwdXgxMDAwdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0K LWhwdXgxMTAwdG86Ci0JJChNQUtFKSBocHV4MTAwMHRvIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0KLQotaHB1eDExMDB0bys6Ci0JJChNQUtFKSBocHV4MTAwMHRvKyBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9Ci0KLWhwdXgxMTAwdGdjYzoKLQkkKE1BS0UpIGhwdXgxMDAwdGdjYyBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9Ci0KLWhwdXgxMTAwdG8rc3NsIGhwdXgxMTAwdG8rb3BlbnNzbDoK LQkkKE1BS0UpIGhwdXgxMDAwdG8rb3BlbnNzbCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0K LWhwdXgxMTAwdGdjYytzc2wgaHB1eDExMDB0Z2NjK29wZW5zc2w6Ci0JJChNQUtFKSBocHV4MTAw MHRnY2Mrb3BlbnNzbCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSNSZWd1bHVzIG9uIENJ RSBTeXN0ZW1zIDY4MC8yMAotY2llOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIENJRSBTeXN0ZW1zIDY4MC8yMCBSZWd1bHVzLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtREFUVFNWIC1ETk9GSUxFSCAtRENJ RSAtRE5PTEVBUk4gJChLRkxBR1MpIC1PIiAiTE5LRkxBR1MgPSIKLQotIyBMaW51eCAxLjIgb3Ig bGF0ZXIgd2l0aCBnY2MsIGR5bmFtaWMgbGlicmFyaWVzLCBuY3Vyc2VzLCBUQ1AvSVAuCi0jCi0j IElmIHlvdXIgTGludXggc3lzdGVtIGhhcyBjdXJzZXMgcmF0aGVyIHRoYW4gbmN1cnNlcywgdXNl IHRoZSBsaW51eGMKLSMgZW50cnksIG9yIGlmIHRoYXQgZG9lc24ndCB3b3JrLCBsaW51eG5jLgot IwotIyBUaGUgS2VybWl0ICJsYXJnZSBtZW1vcnkgbW9kZWwiIGlzIHVzZWQgYnkgZGVmYXVsdCB0 byBjb25maWd1cmUgYmlnIHBhY2tldAotIyBhbmQgc2NyaXB0IGJ1ZmZlcnMsIGV0Yy4gIEZvciBz bWFsbC1tZW1vcnkgb3IgbGltaXRlZC1yZXNvdXJjZSBzeXN0ZW1zLAotIyAibWFrZSBsaW51eCBL RkxBR1M9LUROT0JJR0JVRiIuCi0jCi0jIC1ETElOVVhGU1NUTkQgKExpbnV4IEZpbGUgU3lzdGVt IFN0YW5kYXJkIDEuMikgZ2l2ZXMgVVVDUCBsb2NrZmlsZSAvdmFyL2xvY2sKLSMgd2l0aCBzdHJp bmcgcGlkLiAgUmVtb3ZlIHRoaXMgdG8gZ2V0IC91c3Ivc3Bvb2wvdXVjcCB3aXRoIGludCBwaWQs IHVzZWQgaW4KLSMgdmVyeSBlYXJseSBMaW51eCB2ZXJzaW9ucy4gIEZTU1RORCAxLjIgYWxzbyBz YXlzIHRoYXQgdGhlIFBJRCBzdHJpbmcgaW4gdGhlCi0jIFVVQ1AgbG9jayBmaWxlIGhhcyBsZWFk aW5nIHNwYWNlcy4gIFRoaXMgaXMgYSBjaGFuZ2UgZnJvbSBGU1NUTkQgMS4wLCB3aGljaAotIyB1 c2VkIGxlYWRpbmcgemVyb3MuICBBZGQgLURGU1NUTkQxMCB0byBzdXBwb3J0IEZTU1RORCAxLjAg aW5zdGVhZCBvZiAxLjIuCi0jIEkgaG9wZSBzdWJzZXF1ZW50IGVkaXRpb25zIG9mIHRoZSBmaWxl LXN5c3RlbSBzdGFuZGFyZCBkaWQgbm90IGNoYW5nZSB0aGVzZQotIyBhZ2Fpbi4KLSMKLSMgQWRk IC1ET0xJTlVYSElTUEVFRCAoT2xkIExpbnV4IEhpZ2ggU3BlZWQgc3VwcG9ydCkgdG8gdHVybiBv biBhbiB1Z2x5IGtsdWRnZQotIyBpbiBMaW51eCAxLjAgYW5kIGVhcmxpZXIgdG8gc3VwcG9ydCBz cGVlZHMgb2YgNTc2MDAgYW5kIDExNTIwMC4gIEV4dHJlbWVseQotIyBvbGQgTGludXggc3lzdGVt cyAocHJlLTAuOTlwbDE1KSB3aWxsIG5vdCBzdXBwb3J0IHRoaXMuICBJZiBPTElOVVhISVNQRUVE IGlzCi0jIG5vdCBkZWZpbmVkLCB0aGVuIG9ubHkgdGhlIHN0YW5kYXJkIFBPU0lYIHRlcm1pb3Mg bWV0aG9kcyBvZiBzZXR0aW5nIHRoZSBwb3J0Ci0jIHNwZWVkIHdpbGwgYmUgdXNlZCwgYW5kIGlu IHRoaXMgY2FzZSBzcGVlZHMgY2FuIGJlIGFzIGhpZ2ggYXMgNDYwODAwIGluIG1vc3QKLSMgbW9k ZXJuIExpbnV4IHZlcnNpb25zLgotIwotIyAtRENLX1BPU0lYX1NJRyAoUE9TSVggc2lnbmFsIGhh bmRsaW5nKSBpcyBnb29kIGZvciBMaW51eCByZWxlYXNlcyBiYWNrIHRvIGF0Ci0jIGxlYXN0IDAu OTkuMTQ7IGlmIGl0IGNhdXNlcyB0cm91YmxlIGZvciB5b3UsIHJlbW92ZSBpdCBmcm9tIHRoZSBD RkxBR1MuCi0jCi0jIC1waXBlIHJlbW92ZXMgdGhlIG5lZWQgZm9yIHRlbXAgZmlsZXMgLSByZW1v dmUgaXQgaWYgaXQgY2F1c2VzIHRyb3VibGUuCi0jCi0jIC1mdW5zaWduZWQtY2hhciBtYWtlcyBh bGwgY2hhcmFjdGVycyB1bnNpZ25lZCwgYXMgdGhleSBzaG91bGQgaGF2ZSBiZWVuCi0jICBpbiB0 aGUgZmlyc3QgcGxhY2UuCi0jCi0jIEFkZCAtRENLX0RTWVNJTkkgaWYgeW91IHdhbnQgYSBzaGFy ZWQgc3lzdGVtLXdpZGUgaW5pdCBmaWxlLgotIwotIyBTZWUgaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sIGFib3V0IC1ETk9DT1RGTUMuCi0jIEJldHRlciBzdGlsbCwg c2hvdWxkIHJlYWQgdGhlIGVudGlyZSBMaW51eCBzZWN0aW9uIG9mIHRoYXQgZG9jdW1lbnQuCi0j Ci0jIFRoZSAibGludXhhIiBlbnRyeSBjYW4gYmUgcmVmZXJlbmNlZCBkaXJlY3RseSBvbiBMSUJD IHN5c3RlbXMsIGJ1dCBub3QKLSMgR0xJQkMsIHdoZXJlIC1sY3J5cHQgaXMgcmVxdWlyZWQuICBU aGUgIm1ha2UgbGludXgiIGVudHJ5IHNob3VsZCBub3JtYWxseQotIyBiZSB1c2VkIGZvciBhbGwg YnVpbGRzIG9uIGFsbCBMaW51eCBkaXN0cmlidXRpb25zIHVubGVzcyB5b3UgaGF2ZSBzcGVjaWFs Ci0jIHJlcXVpcmVtZW50cywgaW4gd2hpY2ggY2FzZSBrZWVwIHJlYWRpbmcuICBDS19ORVdURVJN IGFkZGVkIGFmdGVyIDcuMGIwNAotIyBkdWUgdG8gbmV3IGNvbXBsYWludHMgYWJvdXQgbmN1cnNl cyBjaGFuZ2luZyBidWZmZXJpbmcgb2YgdHR5LgotCi1saW51eGE6Ci0JQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggMS4yIG9yIGxhdGVyLi4uJwotCUBlY2hvICdJTVBP UlRBTlQ6IFJlYWQgdGhlIGNvbW1lbnRzIGluIHRoZSBsaW51eCBzZWN0aW9uIG9mIHRoZScKLQlA ZWNobyAnbWFrZWZpbGUgaWYgeW91IGhhdmUgdHJvdWJsZS4nCi0JJChNQUtFKSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZMQUdT ID0gLU8gLURMSU5VWCAtcGlwZSAtZnVuc2lnbmVkLWNoYXIgLURGTkZMT0FUIC1EQ0tfUE9TSVhf U0lHIFwKLQktRENLX05FV1RFUk0gLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtRE5PQ09URk1D IC1EUE9TSVggXAotCS1EVVNFX1NUUkVSUk9SICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktG TEFHUykiIFwKLQkiTElCUyA9ICQoTElCUykgLWxtIgotCi0jIEFzIGFib3ZlIGJ1dCB3aXRoIHBy b2ZpbGluZwotbGludXhwOgotCSQoTUFLRSkgbGludXhhIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gIktGTEFHUz0kKEtGTEFHUykgLXBnIiBcCi0JIkxJQlM9LXBnIC1sY3J5cHQgLWxyZXNvbHYi Ci0KLSNMaW51eC4gIFRoaXMgZW50cnkgc2hvdWxkIHdvcmsgZm9yIGFueSBMaW51eCBkaXN0cmli dXRpb24gb24gYW55IHBsYXRmb3JtLAotIzMyLWJpdCBvciA2NC1iaXQsIGV4Y2VwdCBmb3IgZXh0 cmVtZWx5IGFuY2llbnQgb25lcy4gIEF1dG9tYXRpY2FsbHkgZGV0ZWN0czoKLSMgLiBjdXJzZXMs IG5jdXJzZXMsIG9yIG5vIGN1cnNlcwotIyAuIE9sZCB2ZXJzdXMgbmV3IHB0eSBoYW5kbGluZyAo bmV3ID09IGdsaWJjIDIuMSsrKQotIyAuIFByZXNlbmNlIG9yIGFic2VuY2Ugb2YgbGliY3J5cHQu YSBhbmQgPGNyeXB0Lmg+Ci0jIC4gUHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBsaWJyZXNvbHYuYQot IyAuIFRyYW5zaXRpb25hbCBMb25nIEZpbGUgQVBJIGZvciAzMi1iaXQgcGxhdGZvcm1zIChTVVMg VjIgVU5JWCA5OCBMRlMpLgotI05vdGU6IFRoZSBIQVZFX1BUTVggdGVzdCB3YXMgcHJldmlvdXNs eSAiaWYgdGVzdCAtYyAvZGV2L3B0bXgiIGJ1dCB0aGlzIHdhcwotI25vdCBzdWZmaWNpZW50IGZv ciBEZWJpYW4gMi4xLCBiZWNhdXNlIGFsdGhvdWdoIGl0IGhhZCAvZGV2L3B0bXgsIGl0IGRpZCBu b3QKLSNoYXZlIGdyYW50cHQoKSwgdW5sb2NrcHQoKSwgb3IgcHRzbmFtZSgpLCBzbyBoYXMgYmVl biBjaGFuZ2VkIHRvIGxvb2sgZm9yIGEKLSNncmFudHB0KCkgcHJvdG90eXBlIGluIHRoZSBoZWFk ZXIgZmlsZXMuICBNb2RpZmllZCBpbiA4LjAuMjA2IHRvIGFsbG93IGZvcgotI2xpYnJhcmllcyB0 aGF0IGNvbnRhaW4gLnNvJ3MgYnV0IG5vIC5hJ3MsIGUuZy4gTWFuZHJha2UgOS4wLgotI0hBVkVf QkFVREJPWSBhZGRlZCBpbiA4LjAuMjEwIGZvciBSZWQgSGF0IC0tIGl0J3MgbGlrZSBBSVggdHR5 bG9jaygpLgotI01vZGlmaWVkIDE3IEF1ZyAyMDA1IHRvIHVzZSBvcGVucHR5KCkgaWYgYXZhaWxh YmxlIGJlY2F1c2UgdGhlIG90aGVyIHN0dWZmCi0jZHVtcHMgY29yZSBpbiA2NC1iaXQgaWE2NCBh bmQgeDg2XzY0IGJ1aWxkcy4KLSNMb25nIGZpbGUgc3VwcG9ydCBmb3IgMzItYml0IGJ1aWxkcyBh ZGRlZCBpbiA4LjAuMjEyIC0gaWYgZmVhdHVyZXMuaCBjb250YWlucwotI19fVVNFX0xBUkdFRklM RTY0IHRoZW4gd2Ugc2V0IHRoZSBmbGFncyB0aGF0IG11c3QgYmUgc2V0IGJlZm9yZSByZWFkaW5n IGFueQotI2hlYWRlciBmaWxlczsgb24gMzItYml0IHBsYXRmb3JtcyBzdWNoIGFzIGkzODYsIHRo aXMgcHJvZHVjZXMgYSAzMi1iaXQgYnVpbGQKLSNjYXBhYmxlIG9mIGFjY2Vzc2luZywgc2VuZGlu ZywgcmVjZWl2aW5nLCBhbmQgbWFuYWdpbmcgbG9uZyAoPiAyR0IpIGZpbGVzLgotI09uIDY0LWJp dCBwbGF0Zm9ybXMsIGl0IGRvZXMgbm8gaGFybS4KLSNBcyBvZiAzIE1hcmNoIDIwMDkgd2UgZGV0 ZWN0IGF1dG9tYXRpY2FsbHkgaWYgd2UgaGF2ZSBjdXJzZXMsIG5jdXJzZXMsCi0jb3Igbm8gY3Vy c2VzIGF0IGFsbC4KLSNBZGRlZCBIQVZFX0xPQ0tERVYgYXMgb3BlblN1U0UgPj0gMTEuMyB1c2Vz IHR0eWxvY2sgZGlyZWN0bHkgaW5zdGVhZCBvZgotI2JhdWRib3kgMjAxMC8wOC8yMwotI09LOiAy MDExLzA2LzE4Ci1saW51eDoKLQlAaWYgdGVzdCBcCi0JYGdyZXAgZ3JhbnRwdCAvdXNyL2luY2x1 ZGUvKi5oIC91c3IvaW5jbHVkZS9zeXMvKi5oIHwgd2MgLWxgIC1ndCAwOyBcCi0JdGhlbiBpZiB0 ZXN0IC1jIC9kZXYvcHRteDsgdGhlbiBIQVZFX1BUTVg9Jy1ESEFWRV9QVE1YJzsgXAotCWVsc2Ug SEFWRV9QVE1YPScnOyBmaTsgZmkgOyBcCi0JaWYgdGVzdCBgZ3JlcCBvcGVucHR5IC91c3IvaW5j bHVkZS9wdHkuaCB8IHdjIC1sYCAtZ3QgMDsgXAotCXRoZW4gSEFWRV9PUEVOUFRZPSctREhBVkVf T1BFTlBUWSc7IFwKLQllbHNlIEhBVkVfT1BFTlBUWT0nJzsgZmkgOyBcCi0JSEFWRV9MSUJDVVJT RVM9Jyc7IFwKLQlpZiB0ZXN0IC1mIC91c3IvbGliNjQvbGlibmN1cnNlcy5zbyB8fCBcCi0JICAg dGVzdCAtZiAvdXNyL2xpYi9saWJuY3Vyc2VzLmEgIHx8IFwKLQkgICB0ZXN0IC1mIC91c3IvbGli L2xpYm5jdXJzZXMuc287IHRoZW4gXAotCSAgSEFWRV9MSUJDVVJTRVM9Jy1sbmN1cnNlcyc7IFwK LQllbHNlIGlmIHRlc3QgLWYgL3Vzci9saWI2NC9saWJjdXJzZXMuc28gfHwgXAotCSAgIHRlc3Qg LWYgL3Vzci9saWIvbGliY3Vyc2VzLmEgfHwgXAotCSAgIHRlc3QgLWYgL3Vzci9saWIvbGliY3Vy c2VzLnNvOyB0aGVuIFwKLQkgICAgIEhBVkVfTElCQ1VSU0VTPSctbGN1cnNlcyc7IGZpOyBmaTsg XAotCUhBVkVfQ1VSU0VTPScnOyBcCi0JaWYgdGVzdCAtbiAnJCRIQVZFX0xJQkNVUlNFUyc7IHRo ZW4gXAotCSAgaWYgdGVzdCAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlcy5oOyB0aGVuIFwKLQkgICAg SEFWRV9DVVJTRVM9Jy1EQ0tfTkNVUlNFUyAgLUkvdXNyL2luY2x1ZGUvbmN1cnNlcyc7IFwKLQkg IGVsc2UgaWYgdGVzdCAtZiAvdXNyL2luY2x1ZGUvY3Vyc2VzLmg7IHRoZW4gXAotCSAgICBIQVZF X0NVUlNFUz0nLURDS19DVVJTRVMnOyBcCi0JZmk7IGZpOyBmaTsgXAotCWlmIHRlc3QgLWYgL3Vz ci9pbmNsdWRlL2JhdWRib3kuaCB8fCB0ZXN0IC1mIC91c3IvaW5jbHVkZS90dHlsb2NrLmg7IFwK LQl0aGVuIEhBVkVfTE9DS0RFVj0nLURIQVZFX0xPQ0tERVYnIDsgXAotCWVsc2UgSEFWRV9MT0NL REVWPScnIDsgZmkgOyBcCi0JaWYgdGVzdCAtZiAvdXNyL2luY2x1ZGUvYmF1ZGJveS5oIDsgXAot CXRoZW4gSEFWRV9CQVVEQk9ZPSctREhBVkVfQkFVREJPWScgOyBcCi0JZWxzZSBIQVZFX0JBVURC T1k9JycgOyBmaSA7IFwKLQkkKE1BS0UpIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJL RkxBR1M9JCRIQVZFX0NVUlNFUyAkJEhBVkVfUFRNWCAkJEhBVkVfTE9DS0RFViBcCi0JJCRIQVZF X0JBVURCT1kgJCRIQVZFX09QRU5QVFkgXAotCWBncmVwIF9fVVNFX0xBUkdFRklMRTY0IC91c3Iv aW5jbHVkZS9mZWF0dXJlcy5oID4gL2Rldi9udWxsICYmIFwKLQllY2hvICctRF9MQVJHRUZJTEVf U09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQnYCBcCi0JYGlmIHRlc3QgLWYgL3Vzci9pbmNs dWRlL2NyeXB0Lmg7IHRoZW4gZWNobyAtREhBVkVfQ1JZUFRfSDsgZmlgIFwKLQkkKEtGTEFHUyki IFwKLQkiTElCUz0kKExJQlMpICQkSEFWRV9MSUJDVVJTRVMgXAotCWBpZiB0ZXN0IC1uICckJEhB VkVfT1BFTlBUWSc7IHRoZW4gZWNobyAtbHV0aWw7IGZpYCBcCi0JYGlmIHRlc3QgLWYgL3Vzci9s aWI2NC9saWJyZXNvbHYuYSB8fCB0ZXN0IC1mIC91c3IvbGliNjQvbGlicmVzb2x2LnNvIFwKLQl8 fCB0ZXN0IC1mIC91c3IvbGliL2xpYnJlc29sdi5hIHx8IHRlc3QgLWYgL3Vzci9saWIvbGlicmVz b2x2LnNvIFwKLQl8fCB0ZXN0IC1mIC91c3IvbGliL2kzODYtbGludXgtZ251L2xpYnJlc29sdi5h IFwKLQl8fCB0ZXN0IC1mIC91c3IvbGliL2kzODYtbGludXgtZ251L2xpYnJlc29sdi5zbyBcCi0J fHwgbHMgL2xpYi94ODZfNjQtbGludXgtZ251L2xpYnJlc29sdi4qID4gL2Rldi9udWxsIDI+IC9k ZXYvbnVsbDsgXAotCXRoZW4gZWNobyAtbHJlc29sdjsgZmlgIFwKLQlgaWYgdGVzdCAtZiAvdXNy L2xpYjY0L2xpYmNyeXB0LmEgfHwgdGVzdCAtZiAvdXNyL2xpYjY0L2xpYmNyeXB0LnNvIFwKLQl8 fCB0ZXN0IC1mIC91c3IvbGliL2xpYmNyeXB0LmEgfHwgdGVzdCAtZiAvdXNyL2xpYi9saWJjcnlw dC5zbyBcCi0JfHwgbHMgL2xpYi94ODZfNjQtbGludXgtZ251L2xpYmNyeXB0LiogPiAvZGV2L251 bGwgMj4gL2Rldi9udWxsOyBcCi0JdGhlbiBlY2hvIC1sY3J5cHQ7IGZpYCBcCi0JYGlmIHRlc3Qg LWYgL3Vzci9saWI2NC9saWJsb2NrZGV2LmEgfHwgXAotCXRlc3QgLWYgL3Vzci9saWI2NC9saWJs b2NrZGV2LnNvIHx8IFwKLQl0ZXN0IC1mIC91c3IvbGliL2xpYmxvY2tkZXYuYSB8fCBcCi0JdGVz dCAtZiAvdXNyL2xpYi9saWJsb2NrZGV2LnNvOyBcCi0JdGhlbiBlY2hvIC1sbG9ja2RldjsgZmlg IiBcCi0JbGludXhhCi0KLSMgTGludXggKyBTaGFkb3cgcGFzc3dvcmRzICsgUEFNCi0jIE9LIDIw MTEvMDYvMTgKLWxpbnV4K3NoYWRvdytwYW06Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgTGludXgrU2hhZG93K1BBTS4uLicKLQkkKE1BS0UpIGxpbnV4IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAotCUtGTEFHUz0iLURDS19TSEFET1cgLURDS19QQU0gJChLRkxBR1Mp IiBcCi0JIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKLQkiTElCUyA9IC1scGFtIgotCi0jIExp bnV4IHN5c3RlbXMgdGhhdCBoYXZlIG5vIDxzeXMvc2VsZWN0Lmg+LgotIyAobm90IHRlc3RlZCBp biByZWNlbnQgeWVhcnMsIHBlcmhhcHMgbm8gbG9uZ2VyIG5lZWRlZCkKLWxpbnV4bnM6Ci0JJChN QUtFKSBsaW51eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IEtGTEFHUz0tRE5PX1NZU19TRUxF Q1RfSAotCi0jIExpbnV4LXNjcmlwdC1vbmx5OgotIyBBIG1pbmltdW0tc2l6ZSB2ZXJzaW9uIGZv ciBMaW51eCB0aGF0IGRvZXMgb25seSBzY3JpcHRpbmcgYW5kCi0jIHNlcmlhbCBjb21tdW5pY2F0 aW9uIC0tIG5vIG5ldHdvcmtzLCBubyBmaWxlIHRyYW5zZmVyLCBubyBzZWN1cml0eS4KLSMgT0sg MjAxMS8wNi8xOAotbGludXhzbzoKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJDRkxBR1MgPSAtTyAtRExJTlVYIC1w aXBlIC1mdW5zaWduZWQtY2hhciAtRFBPU0lYIC1EQ0tfUE9TSVhfU0lHIFwKLQktRExJTlVYRlNT VE5EIC1ETk9DT1RGTUMgLUROT1hGRVIgLUROT0RFQlVHIC1ETk9DU0VUUyAtRE5PSEVMUCBcCi0J LUROT05FVCAtRE1JTklESUFMIC1ETk9TQ1JJUFQgLUROT0lLU0QgLUROT1BVU0ggJChLRkxBR1Mp IiBcCi0JIkxOS0ZMQUdTID0gJChMTktGTEFHUykiICJMSUJTID0gIgotCi0jIFNlY3VyZSB0YXJn ZXRzIGZvciBMaW51eC4gIFRoZXNlIHdvcmsgb24gUkhBUzQsIFJIRUw0LCBhbmQgUkhFTDUsCi0j IHVubGlrZSBzb21lIG9mIHRoZSBvbGRlciB0YXJnZXRzIHRoYXQgZm9sbG93LiAgVGhleSBob29r IGludG8gdGhlIG1haW4gTGludXgKLSMgdGFyZ2V0IHNvIHdlIHBpY2sgdXAgYWxsIHRoZSBvdGhl ciBuZXcgc3R1ZmYgLSBsYXJnZSBmaWxlcywgYmF1ZGJveS5oLCB0aGUKLSMgYXBwcm9wcmlhdGUg cHR5IGludGVyZmFjZSwgZXRjLgotCi0jIExpbnV4IHdpdGggS2VyYmVyb3MgNS4KLSMgVXNlICJt YWtlIGxpbnV4K2tyYjUgS0ZMQUdTPS1ETk9fS1JCNV9JTklUX0VUUyIgaWYgbmVjZXNzYXJ5Lgot I09LIDIwMTEvMDYvMTYgb24gRmVkb3JhIDE0IHdpdGg6Ci0jIG1ha2UgbGludXgra3JiNSAiTElC Uz0kTElCUyAvbGliL2xpYms1Y3J5cHRvLnNvLjMgL2xpYi9saWJjb21fZXJyLnNvLjIiCi0jIE9u IFJIRUw1OiBtYWtlIGxpbnV4K2tyYjUgLVVDS19ERVMKLWxpbnV4K2tyYjU6Ci0JQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggd2l0aCBLZXJiZXJvcyA1Li4uJwotCUBj YXNlIGBvcGVuc3NsIHZlcnNpb25gIGluIFwKLQkgICowLjkuNyopIE9QRU5TU0xPUFRJT049Ii1E T1BFTlNTTF8wOTciIDs7IFwKLQkgICowLjkuOCopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8w OTgiIDs7IFwKLQkgICoxLlswLTldLlswLTldKikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzEw MCIgOzsgXAotCSAgKikgT1BFTlNTTE9QVElPTj0iIiA7OyBcCi0JZXNhYzsgXAotCUhBVkVfREVT PScnOyBcCi0JREVTX0xJQj0nJzsgXAotCWlmIGxzIC91c3IvbGliL2xpYmRlcyogPiAvZGV2L251 bGwgMj4gL2Rldi9udWxsIHx8IFwKLQkgICBscyAkKFNTTExJQikvbGliZGVzKiA+IC9kZXYvbnVs bCAyPiAvZGV2L251bGw7IHRoZW4gXAotCSAgICAgIERFU19MSUI9Jy1sZGVzNDI1JzsgXAotCSAg ICAgIEhBVkVfREVTPSctRENLX0RFUyAtRExJQkRFUyc7IFwKLSAgICAgICAgICAgICAgZWNobyAi SEFWRSBERVMiOyBcCi0gICAgICAgICAgIGVsc2UgZWNobyAiTk8gREVTIjsgXAotCWZpOyBcCi0J SzVDUllQVE89Jyc7IFwKLSAgICAgICAgaWYgbHMgL2xpYi9saWJrNWNyeXB0byogPiAvZGV2L251 bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKLSAgICAgICAgICAgICAgICBLNUNSWVBUTz0nLWxrNWNy eXB0byc7IFwKLQllbHNlIGlmIGxzIC91c3IvbGliL2xpYms1Y3J5cHRvKiA+IC9kZXYvbnVsbCAy PiAvZGV2L251bGw7IHRoZW4gXAotCQlLNUNSWVBUTz0nLWxrNWNyeXB0byc7IFwKLSAgICAgICAg ZWxzZSBpZiBscyAvdXNyL2xpYjY0L2xpYms1Y3J5cHRvKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251 bGw7IHRoZW4gXAotICAgICAgICAgICAgICAgIEs1Q1JZUFRPPSctbGs1Y3J5cHRvJzsgXAotICAg ICAgICBmaTsgZmk7IGZpOyBcCi0JQ09NX0VSUj0nJzsgXAotCWlmIGxzIC9saWIvbGliY29tX2Vy ciogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKLQkJQ09NX0VSUj0nLWxjb21fZXJy JzsgXAotCWZpOyBcCi0JR1NTQVBJTElCPSctbGdzc2FwaSc7IFwKLQlpZiBscyAvbGliL2xpYmdz c2FwaV9rcmI1KiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAotCQlHU1NBUElMSUI9 Jy1sZ3NzYXBpX2tyYjUnOyBcCi0JZWxzZSBpZiBscyAvdXNyL2xpYi9saWJnc3NhcGlfa3JiNSog PiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKLQkJR1NTQVBJTElCPSctbGdzc2FwaV9r cmI1JzsgXAotCWVsc2UgSzVESVI9YGVjaG8gJChLNUxJQikgfCBzZWQgJ3N8LUx8fCdgOyBcCi0J CWlmIGxzICQkSzVESVIvbGliZ3NzYXBpX2tyYjUqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsg dGhlbiBcCi0JCQlHU1NBUElMSUI9Jy1sZ3NzYXBpX2tyYjUnOyBcCi0JZmk7IGZpOyBmaTsgXAot CSQoTUFLRSkgbGludXggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIg PSBnY2MiIFwKLQkiS0ZMQUdTPSAtRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgLURL UkI1ICQkT1BFTlNTTE9QVElPTiBcCi0JLURDS19FTkNSWVBUSU9OICQkSEFWRV9ERVMgJChLNUlO QykgJChLNUlOQykva3JiNSBcCi0JLUkvdXNyL2luY2x1ZGUvZXQgJChLRkxBR1MpIiAiTE5LRkxB R1MgPSAkKExOS0ZMQUdTKSIgXAotCSJMSUJTID0gJChLNUxJQikgJCRERVNfTElCIC1sY3J5cHRv ICQkR1NTQVBJTElCIC1sa3JiNSBcCi0JJCRLNUNSWVBUTyAkJENPTV9FUlIgJChMSUJTKSIgOyBc Ci0JaWYgWyAhIC1mIC4vd2VybWl0IF0gfHwgWyAuL2NrY21haS5vIC1udCAuL3dlcm1pdCBdIDsg dGhlbiBcCi0JCWVjaG8gIiI7IFwKLQkJZWNobyAiSWYgYnVpbGQgZmFpbGVkIHRyeToiOyBcCi0J CWVjaG8gIiI7IFwKLQkJZWNobyAiICBtYWtlIGNsZWFuIDsgbWFrZSAkJHtLVEFSR0VUOi0kKEAp fSBLRkxBR1M9LVVDS19ERVMiOyBcCi0JCWVjaG8gIiI7IFwKLQlmaQotCi0jIExpbnV4IHdpdGgg S2VyYmVyb3MgNSBhbmQgS2VyYmVyb3MgNC4KLSMgVXNlICJtYWtlIGxpbnV4K2tyYjUgS0ZMQUdT PS1ETk9fS1JCNV9JTklUX0VUUyIgaWYgbmVjZXNzYXJ5LgotIyBBZGQgIktGTEFHUz0tVUNLX0RF UyIgaWYgZmFpbHVyZSBtZXNzYWdlcyBsb29rIERFUy1yZWxhdGVkLgotIyBVTlRFU1RFRCAoYmVj YXVzZSBJIGNhbid0IGZpbmQgYSBib3ggd2l0aCBLcmI0IGFuZCBLcmI1IGluc3RhbGxlZCkKLWxp bnV4K2tyYjUra3JiNDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0IGZvciBMaW51eCB3aXRoIEtl cmJlcm9zIDQgYW5kIEtlcmJlcm9zIDUnCi0JJChNQUtFKSBsaW51eCtrcmI1IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURLUkI0IC1ES1JCNTI0ICQoS0ZMQUdTKSIgIkxJ QlM9JChMSUJTKSAtbGtyYjQiCi0KLSMgTGludXggd2l0aCBPcGVuU1NMIAotIyBJbiBMaW51eCwg U1NMIGxpYnMgYXJlIG9mdGVuIGluIC9saWIgb3IgL3Vzci9saWIgYW5kIHNvIGZvdW5kIGJ5IGRl ZmF1bHQuCi0jIFRoaXMgdGFyZ2V0cyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIERFUyBsaWJyYXJ5 IG1pZ2h0IG9yIG1pZ2h0IG5vdAotIyBleGlzdC4gIElmIGl0IGRvZXMgZXhpc3QsIGhvd2V2ZXIs IHRoZSB0YXJnZXQgd2lsbCByZXF1aXJlIHNvbWUgZWRpdGluZwotIyBpZiBpdHMgYmFzZW5hbWUg aXMgbm90IGxpYmRlczQyNS4gIC0gZmRjIFR1ZSBTZXAgMjEgMTQ6Mjg6MDAgMjAxMAotIyBJTVBP UlRBTlQ6IFNvbWUgTGludXggcGxhdGZvcm1zIGhhdmUgREVTIGxpYnJhcmllcyBidXQgdGhleSBh cmUgbWlzc2luZwotIyBmdW5jdGlvbnMgdXNlZCBieSBLZXJtaXQuICBJbiB0aGF0IGNhc2UgeW91 IHdpbGwgZ2V0IGZhdGFsIGVycm9ycyBhdAotIyBsaW5rIHRpbWUgaW52b2x2aW5nIHJvdXRpbmVz IHN1Y2ggYXMgZGVzX2VjYjNfZW5jcnlwdCwgZGVzX3JhbmRvbV9zZWVkLAotIyBhbmQgZGVzX3Nl dF9vZGRfcGFyaXR5LiAgSW4gdGhhdCBjYXNlLCAibWFrZSBsaW51eCBLRkxBR1M9LVVDS19ERVMi Ci0jIFRoZXJlJ3MgYSBuZXcgd2FybmluZyBhdCB0aGUgZW5kIHRoYXQgc2hvdWxkIGNvbWUgb3V0 IGlmIHRoaXMgaGFwcGVucywKLSMgYW5kIHRoYXQgc2hvdWxkIG5vdCBjb21lIG91dCBpZiBpdCBk aWRuJ3QuCi0jCi1saW51eCtzc2wgbGludXgrb3BlbnNzbCBsaW51eCtvcGVuc3NsK3psaWIrc2hh ZG93K3BhbSBsaW51eCtvcGVuc3NsK3NoYWRvdzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBMaW51eCtPcGVuU1NMIFNTTExJQj0kKFNTTExJQiknCi0JQGNhc2UgYG9wZW5z c2wgdmVyc2lvbmAgaW4gXAotCSAgKjAuOS43KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5 NyIgOzsgXAotCSAgKjAuOS44KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5OCIgOzsgXAot CSAgKjEuWzAtOV0uWzAtOV0qKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMTAwIiA7OyBcCi0J ICAqKSBPUEVOU1NMT1BUSU9OPSIiIDs7IFwKLQllc2FjOyBcCi0JSEFWRV9ERVM9Jyc7IFwKLQlE RVNfTElCPScnOyBcCi0JaWYgbHMgL3Vzci9saWIvbGliZGVzKiA+IC9kZXYvbnVsbCAyPiAvZGV2 L251bGwgfHwgXAotCSAgIGxzICQoU1NMTElCKS9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYv bnVsbDsgdGhlbiBcCi0JICAgICAgREVTX0xJQj0nLWxkZXM0MjUnOyBcCi0JICAgICAgSEFWRV9E RVM9Jy1EQ0tfREVTIC1ETElCREVTJzsgXAotCSAgICAgIGVjaG8gIkhBVkUgREVTIjsgXAotCSAg IGVsc2UgZWNobyAiTk8gREVTIjsgXAotCWZpOyBcCi0JJChNQUtFKSBsaW51eCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJLRkxBR1M9IC1EQ0tf QVVUSEVOVElDQVRJT04gLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAkJEhBVkVfREVTIFwKLQkt RENLX1NTTCAtRENLX1BBTSAtRFpMSUIgLURDS19TSEFET1cgJCRPUEVOU1NMT1BUSU9OICQoU1NM SU5DKSBcCi0JJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAotCSJMSUJTID0g JChTU0xMSUIpIC1sc3NsICQkREVTX0xJQiAtbGNyeXB0byAtbHBhbSAtbGRsIC1seiAkKExJQlMp IiA7IFwKLQlpZiBbICEgLWYgLi93ZXJtaXQgXSB8fCBbIC4vY2tjbWFpLm8gLW50IC4vd2VybWl0 IF0gOyB0aGVuIFwKLQkJZWNobyAiIjsgXAotCQllY2hvICJJZiBidWlsZCBmYWlsZWQgdHJ5OiI7 IFwKLQkJZWNobyAiIjsgXAotCQllY2hvICIgIG1ha2UgY2xlYW4gOyBtYWtlICQke0tUQVJHRVQ6 LSQoQCl9IEtGTEFHUz0tVUNLX0RFUyI7IFwKLQkJZWNobyAiIjsgXAotCWZpCi0KLSMgTGludXgg d2l0aCBLZXJiZXJvcyA1IGFuZCBPcGVuU1NMCi0jIE9LIDIwMTEvMDUvMTYKLSMgQWRkIC1VQ0tf REVTIGlmIGZ1bmN0aW9ucyBsaWtlIGRlc19lY2IzX2VuY3J5cHQsIGVzX3JhbmRvbV9zZWVkLAot IyBjb21lIHVwIG1pc3NpbmcgYXQgbGluayB0aW1lLgotbGludXgra3JiNStzc2wgbGludXgra3Ji NStvcGVuc3NsOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IHdp dGggS3JiNSBhbmQgT3BlblNTTC4uLicKLQlAY2FzZSBgb3BlbnNzbCB2ZXJzaW9uYCBpbiBcCi0J ICAqMC45LjcqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk3IiA7OyBcCi0JICAqMC45Ljgq KSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk4IiA7OyBcCi0JICAqMS5bMC05XS5bMC05XSop IE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8xMDAiIDs7IFwKLQkgICopIE9QRU5TU0xPUFRJT049 IiIgOzsgXAotCWVzYWM7IFwKLQlIQVZFX0RFUz0nJzsgXAotCURFU19MSUI9Jyc7IFwKLQlpZiBs cyAvdXNyL2xpYi9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbCB8fCBcCi0JICAgbHMg JChTU0xMSUIpL2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKLQkgICAg ICBERVNfTElCPSctbGRlczQyNSc7IFwKLQkgICAgICBIQVZFX0RFUz0nLURDS19ERVMgLURMSUJE RVMnOyBcCi0JICAgICAgZWNobyAiSEFWRSBERVMiOyBcCi0JICAgZWxzZSBlY2hvICJOTyBERVMi OyBcCi0JZmk7IFwKLQlLNUNSWVBUTz0nJzsgXAotICAgICAgICBpZiBscyAvbGliL2xpYms1Y3J5 cHRvKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAotICAgICAgICAgICAgICAgIEs1 Q1JZUFRPPSctbGs1Y3J5cHRvJzsgXAotCWVsc2UgaWYgbHMgL3Vzci9saWIvbGliazVjcnlwdG8q ID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCi0JCUs1Q1JZUFRPPSctbGs1Y3J5cHRv JzsgXAotICAgICAgICBlbHNlIGlmIGxzIC91c3IvbGliNjQvbGliazVjcnlwdG8qID4gL2Rldi9u dWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCi0gICAgICAgICAgICAgICAgSzVDUllQVE89Jy1sazVj cnlwdG8nOyBcCi0JZmk7IGZpOyBmaTsgXAotCUNPTV9FUlI9Jyc7IFwKLQlpZiBscyAvbGliL2xp YmNvbV9lcnIqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCi0JCUNPTV9FUlI9Jy1s Y29tX2Vycic7IFwKLQlmaTsgXAotCUdTU0FQSUxJQj0nLWxnc3NhcGknOyBcCi0JaWYgbHMgL2xp Yi9saWJnc3NhcGlfa3JiNSogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKLQkJR1NT QVBJTElCPSctbGdzc2FwaV9rcmI1JzsgXAotCWVsc2UgaWYgbHMgL3Vzci9saWIvbGliZ3NzYXBp X2tyYjUqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCi0JCUdTU0FQSUxJQj0nLWxn c3NhcGlfa3JiNSc7IFwKLQllbHNlIEs1RElSPWBlY2hvICQoSzVMSUIpIHwgc2VkICdzfC1MfHwn YDsgXAotCQlpZiBscyAkJEs1RElSL2xpYmdzc2FwaV9rcmI1KiA+IC9kZXYvbnVsbCAyPiAvZGV2 L251bGw7IHRoZW4gXAotCQkJR1NTQVBJTElCPSctbGdzc2FwaV9rcmI1JzsgXAotCWZpOyBmaTsg Zmk7IFwKLQkkKE1BS0UpIGxpbnV4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2Nj IiAiQ0MyID0gZ2NjIiBcCi0JIktGTEFHUz0gLURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJF Uk9TIC1ES1JCNSBcCi0JLURDS19TU0wgLURDS19QQU0gLURaTElCIC1EQ0tfU0hBRE9XICQkT1BF TlNTTE9QVElPTiAkKFNTTElOQykgXAotCS1EQ0tfRU5DUllQVElPTiAkJEhBVkVfREVTICQoSzVJ TkMpICQoSzVJTkMpL2tyYjUgXAotCS1JL3Vzci9pbmNsdWRlL2V0ICQoS0ZMQUdTKSIgIkxOS0ZM QUdTID0gJChMTktGTEFHUykiIFwKLQkiTElCUyA9ICQoSzVMSUIpICQoU1NMTElCKSAtbHNzbCAk JERFU19MSUIgLWxwYW0gLWx6IFwKLQktbGNyeXB0byAkJEdTU0FQSUxJQiAtbGtyYjUgJCRLNUNS WVBUTyAkJENPTV9FUlIgJChMSUJTKSIgOyBcCi0JaWYgWyAhIC1mIC4vd2VybWl0IF0gfHwgWyAu L2NrY21haS5vIC1udCAuL3dlcm1pdCBdIDsgdGhlbiBcCi0JCWVjaG8gIiI7IFwKLQkJZWNobyAi SWYgYnVpbGQgZmFpbGVkIHRyeToiOyBcCi0JCWVjaG8gIiI7IFwKLQkJZWNobyAiICBtYWtlIGNs ZWFuIDsgbWFrZSAkJHtLVEFSR0VUOi0kKEApfSBLRkxBR1M9LVVDS19ERVMiOyBcCi0JCWVjaG8g IiI7IFwKLQlmaQotCi0jIDo6QkVHSU5fT0xEX0xJTlVYX1RBUkdFVFM6OgotCi0jIFRoZSByZW1h aW5pbmcgTGludXggZW50cmllcyBhcmUgZm9yIHNwZWNpYWwgb3IgY3VzdG9taXplZCBidWlsZHMu ICBUaGV5IGhhdmUKLSMgbm90IGJlZW4gZ2VuZXJhbGl6ZWQgKCJzdWJyb3V0aW5pemVkIikgbGlr ZSB0aGUgb25lcyBhYm92ZS4gIElkZWFsbHksIHdlCi0jIHNob3VsZCBhbGxvdyBmb3IgZXZlcnkg Y29tYmluYXRpb24gb2YgbGliYyB2cyBnbGliYywgZ2NjIHZzIGVnY3MsIGN1cnNlcyB2cwotIyBu Y3Vyc2VzLCBLZXJiZXJvcyBJViB2cyBLZXJiZXJvcyBWIHZzIFNSUCAoaW4gYW55IGNvbWJpbmF0 aW9uKSwgYW5kIHNvIG9uLgotIyBUaGUgYmVzdCB3YXkgdG8gZG8gdGhpcyBpcyB0byBzZXQgS0ZM QUdTIGFuZCBMSUJTIHZhbHVlcyBhbmQgdGhlbiBjaGFpbiB0bwotIyB0aGUgbWFpbiAibGludXgi IHRhcmdldCwgYXMgaW4gdGhlIGV4YW1wbGVzIGp1c3QgYWJvdmUuICBUbyBza2lwIHBhc3QgYWxs IG9mCi0jIHRoZXNlIG9sZCB0YXJnZXRzIChhbmQgdGhlcmUgYXJlIG1hbnkpIHNlYXJjaCBmb3Ig OjpFTkRfT0xEX0xJTlVYX1RBUkdFVFM6OgotIyAoYWZ0ZXIgdGhpcyBsaW5lKS4KLQotI1NoYXJw IFphdXJ1cyBTTC01NTAwIC0gTGludXggYmFzZWQKLXpzbDU1MDA6Ci0JQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgU2hhcnAgWmF1cnVzIFNMLTU1MDAuLi4nCi0JQHRvdWNoIGNr Y3Byby5jCi0JQHRvdWNoIHdhcnQKLQkkKE1BS0UpIGxpbnV4bmMgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSAiS0ZMQUdTPS1EWlNMNTUwMCIgXAotCSJDQyA9IGdjYyIgIkNDMiA9IGdjYyIKLQot I01rbGludXggRFIzIGhhcyBob3JyaWJsZSBidWcgaW4gPHV0bXBiaXRzLmg+IC0gc2VlIGNrdWZp by5jLgotbWtsaW51eDoKLQkkKE1BS0UpIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFH Uz0tRFVUTVBCVUciIFwKLQkiTElCUz0tbGNyeXB0IC1scmVzb2x2IiBsaW51eGEKLQotI0xpbnV4 UFBDIDE5OTkKLWxpbnV4cHBjOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IExpbnV4UFBDIDE5OTkuLi4nCi0JQGlmIHRlc3QgLWYgL3Vzci9saWIvbGliY3J5cHQuYTsgdGhl biBcCi0JICAgIGlmIHRlc3QgLWYgL3Vzci9saWIvbGlicmVzb2x2LmE7IHRoZW4gXAotCSAgICAg ICAgJChNQUtFKSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkJIktGTEFHUz0kKE5DVVJT RVNfQ1BQKSAtREhBVkVfQ1JZUFRfSCBcCi0JCS1ETE9DS19ESVI9XFxcXFxcIlwiL3Zhci9sb2Nr L21vZGVtXFxcXFxcIlwiICQoS0ZMQUdTKSIgXAotCSAgICAgICAgIkxJQlM9LWxuY3Vyc2VzIC1s cmVzb2x2IC1sY3J5cHQiIGxpbnV4YSA7IFwKLQkgICAgZWxzZSBcCi0JICAgICAgICAkKE1BS0Up IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCQkiS0ZMQUdTPSQoTkNVUlNFU19DUFApIC1E SEFWRV9DUllQVF9IIFwKLQkJLURMT0NLX0RJUj1cXFxcXFwiXCIvdmFyL2xvY2svbW9kZW1cXFxc XFwiXCIgJChLRkxBR1MpIiBcCi0JICAgICAgICAiTElCUz0tbG5jdXJzZXMgLWxjcnlwdCIgbGlu dXhhIDsgXAotCSAgICBmaSBcCi0JZWxzZSBcCi0JICAgIGlmIHRlc3QgLWYgL3Vzci9saWIvbGli cmVzb2x2LmE7IHRoZW4gXAotCSAgICAgICAgJChNQUtFKSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKLQkJIktGTEFHUz0kKE5DVVJTRVNfQ1BQKSBcCi0JCS1ETE9DS19ESVI9XFxcXFxcIlwi L3Zhci9sb2NrL21vZGVtXFxcXFxcIlwiICQoS0ZMQUdTKSIgXAotCSAgICAgICAgIkxJQlM9LWxu Y3Vyc2VzIC1scmVzb2x2IiBsaW51eGEgOyBcCi0JICAgIGVsc2UgXAotCSAgICAgICAgJChNQUtF KSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkJIktGTEFHUz0kKE5DVVJTRVNfQ1BQKSBc Ci0JCS1ETE9DS19ESVI9XFxcXFxcIlwiL3Zhci9sb2NrL21vZGVtXFxcXFxcIlwiICQoS0ZMQUdT KSIgXAotCSAgICAgICAgIkxJQlM9LWxuY3Vyc2VzIiBsaW51eGEgOyBcCi0JICAgIGZpIFwKLQlm aQotCi0KLSMgTGlrZSAibWFrZSBsaW51eCIgYnV0IGJ1aWx0IHdpdGggZWdjcyByYXRoZXIgdGhh biBnY2MuCi0jIElmIHlvdSBnZXQgIkludGVybmFsIGNvbXBpbGVyIGVycm9yIHh4eCwgb3V0cHV0 IHBpcGUgaGFzIGJlZW4gY2xvc2VkIiwKLSMgdHJ5IHJlbW92aW5nIC1waXBlLgotbGludXhlZ2Nz OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IDEuMiBvciBsYXRl ciB3aXRoIGVnY3MuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSAiQ0MgPSBlZ2NzIiAiQ0MyID0gZWdjcyIgXAotCSJDRkxBR1MgPSAtTyAtRExJTlVYIC1waXBl IC1mdW5zaWduZWQtY2hhciBcCi0JLURQT1NJWCAtRENLX1BPU0lYX1NJRyAtRENLX05DVVJTRVMg LUROT0NPVEZNQyBcCi0JLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAkKEtGTEFHUykiIFwKLQki TE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgIkxJQlMgPSAtbG5jdXJzZXMgLWxjcnlwdCAtbHJlc29s diIKLQotI0xpbnV4IG9uIEludGVsIFBDIHdpdGggQ3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEu Mi4xIChubyBLNCBjb21wYXRpYmlsaXR5KS4KLWxpbnV4K2tyYjUtb2xkOgotCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IG9uIEludGVsIHdpdGggS2VyYmVyb3MuLi4n Ci0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJD QzIgPSBnY2MiIFwKLQkiQ0ZMQUdTID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVgg LURMSU5VWCAtRE5PQ09URk1DIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1Mg LURLUkI1IFwKLQktRENLX0VOQ1JZUFRJT04gLURDS19ERVMgLURDS19DVVJTRVMgLURDS19QT1NJ WF9TSUcgXAotCS1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggJChLNUlO QykgJChLNUlOQykva3JiNSBcCi0JJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIg XAotCSJMSUJTID0gJChLNUxJQikgLWxuY3Vyc2VzIC1sdGVybWNhcCAtbGRlczQyNSAtbGtyYjUg XAotCS1sY29tX2VyciAtbGs1Y3J5cHRvIC1sZ3NzYXBpX2tyYjUgLWxjcnlwdCAtbHJlc29sdiIK LQotIyBMaW51eCBvbiBJbnRlbCBQQyB3aXRoIFNSUCAxLjcuNCB1c2luZyBHTlUgTVAsIEtyeXB0 bywgYW5kIEVyaWMgWW91bmcncwotIyBERVMgbGlicmFyeS4gIFJlbW92ZSB0aGUgLURDS19ERVMs IC1ETElCREVTIGFuZCAtbGRlcyBpZiB5b3UgZG8gbm90IGhhdmUKLSMgRXJpYyBZb3VuZydzIyBs aWJkZXMuYSBpbnN0YWxsZWQuCi0jCi1saW51eCtzcnArZ21wOgotCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBTUlAuLi4nCi0JJChNQUtFKSBz cnBtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwK LQkiQ0ZMQUdTID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5P Q09URk1DIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIFwKLQktRENLX0VOQ1JZUFRJ T04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVTIFwKLQktRENLX0NVUlNFUyAtRENLX1BPU0lY X1NJRyAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKLQkkKFNSUElO QykgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAotCSJMSUJTID0gJChTUlBM SUIpIFwKLQktbG5jdXJzZXMgLWx0ZXJtY2FwIC1sc3JwIC1sZ21wIC1sZGVzIC1sa3J5cHRvIC1s Y3J5cHQgLWxyZXNvbHYiCi0KLWxpbnV4K3NycCtnbXArbm8tZGVzOgotCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBTUlAgLi4uJwotCSQoTUFL RSkgc3JwbWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2Nj IiBcCi0JIkNGTEFHUyA9IC1PIC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElOVVgg LUROT0NPVEZNQyBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NSUCBcCi0JLURDS19FTkNS WVBUSU9OIC1EQ0tfQ0FTVCBcCi0JLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NL RVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCi0JJChTUlBJTkMpICQoS0ZMQUdTKSIg IkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKLQkiTElCUyA9ICQoU1JQTElCKSBcCi0JLWxuY3Vy c2VzIC1sdGVybWNhcCAtbHNycCAtbGdtcCAtbGtyeXB0byAtbGNyeXB0IC1scmVzb2x2IgotCi1s aW51eCtzcnArZ21wLWV4cG9ydDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBMaW51eCBvbiBpMzg2IHdpdGggU1JQLi4uJwotCSQoTUFLRSkgc3JwbWl0LWV4cG9ydCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZM QUdTID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1D IFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIC1ERk5GTE9BVCBcCi0JLURDS19DVVJT RVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRf SCBcCi0JJChTUlBJTkMpICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKLQki TElCUyA9ICQoU1JQTElCKSBcCi0JLWxuY3Vyc2VzIC1sdGVybWNhcCAtbHNycCAtbGdtcCAtbGty eXB0byAtbGNyeXB0IC1sbSAtbHJlc29sdiIKLQotbGludXgrc3JwK2dtcCtwYW06Ci0JQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIFNSUC4uLicK LQkkKE1BS0UpIHNycG1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkND MiA9IGdjYyIgXAotCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAt RExJTlVYIC1ETk9DT1RGTUMgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgXAotCS1E Q0tfRU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgXAotCS1EQ0tfQ1VSU0VT IC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0gg XAotCS1EQ0tfUEFNIC1ERk5GTE9BVCAkKFNSUElOQykgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAk KExOS0ZMQUdTKSIgXAotCSJMSUJTID0gJChTUlBMSUIpIC1sbmN1cnNlcyAtbHRlcm1jYXAgLWxz cnAgLWxnbXAgLWxkZXMgLWxrcnlwdG8gXAotCS1sY3J5cHQgLWxwYW0gLWxkbCAtbG0gLWxyZXNv bHYiCi0KLSNMaW51eCBvbiBJbnRlbCBQQyB3aXRoIFNSUCAxLjcuNCBidWlsdCB3aXRoIE9wZW5T U0wgZm9yIEJpZyBOdW1iZXIgTWF0aAotI2FuZCBDcnlwdG9ncmFwaGljIGZ1bmN0aW9uYWxpdHku Ci0jCi1saW51eCtzcnA6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGlu dXggb24gaTM4NiB3aXRoIFNSUC4uLicKLQkkKE1BS0UpIHNycG1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJDRkxBR1MgPSAtTyAtZnVuc2ln bmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAotCS1EQ0tfQVVUSEVO VElDQVRJT04gLURDS19TUlAgXAotCS1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMg LURMSUJERVMgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElO VVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAotCSQoU1JQSU5DKSAkKFNTTElOQykgJChLRkxBR1Mp IiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAotCSJMSUJTID0gJChTUlBMSUIpICQoU1NMTElC KSBcCi0JLWxuY3Vyc2VzIC1sdGVybWNhcCAtbHNycCAtbGtyeXB0byAtbGNyeXB0byAtbGNyeXB0 IC1scmVzb2x2IgotCi1saW51eCtzcnArcGFtOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBTUlAuLi4nCi0JJChNQUtFKSBzcnBtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZMQUdT ID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwK LQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIFwKLQktRENLX0VOQ1JZUFRJT04gLURDS19D QVNUIC1EQ0tfREVTIC1ETElCREVTIFwKLQktRENLX0NVUlNFUyAtRENLX1BPU0lYX1NJRyAtRFRD UFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKLQktRENLX1BBTSAtREZORkxP QVQgJChTUlBJTkMpICQoU1NMSU5DKSAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAkKExOS0ZM QUdTKSIgXAotCSJMSUJTID0gJChTUlBMSUIpICQoU1NMTElCKSAtbG5jdXJzZXMgLWx0ZXJtY2Fw IC1sc3JwIC1sa3J5cHRvIFwKLQktbGNyeXB0byAtbGNyeXB0IC1scGFtIC1sZGwgLWxtIC1scmVz b2x2IgotCi0jTGludXggb24gSW50ZWwgUEMgd2l0aCBTUlAgYW5kIFNTTC9UTFMuCi0jCi0jIGxp YnNycC5hIHNob3VsZCBiZSBidWlsZCB3aXRoIE9wZW5TU0wKLSMgUmVxdWlyZXMgdGhlIEtlcmJl cm9zIDEuMi4yIG9yIGhpZ2hlciB0byBiZSBjb21waWxlZCB3aXRoIEtSQjQgY29tcGF0aWJpbGl0 eS4KLSNSZW1vdmUgLWx0ZXJtY2FwIGlmIGl0IGNhdXNlcyB0cm91YmxlIGUuZy4gaW4gRGViaWFu IDIuMi4KLSNJZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLCBhZGQgLURPUEVOU1NM XzA5NyB0byBLRkxBR1MuCi1saW51eCtzcnArb3BlbnNzbDoKLQlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBpMzg2IHdpdGggS1JCLFNSUCxTU0wuLi4nCi0JJChN QUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBn Y2MiIFwKLQkiQ0ZMQUdTID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5V WCAtRE5PQ09URk1DIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIFwKLQktRENLX0VO Q1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVTIC1EQ0tfU1NMIFwKLQktRENLX0NV UlNFUyAtRENLX1BPU0lYX1NJRyAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQ VF9IIFwKLQkkKFNSUElOQykgJChTU0xJTkMpICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktG TEFHUykiIFwKLQkiTElCUyA9ICQoU1JQTElCKSAkKFNTTExJQikgXAotCS1sbmN1cnNlcyAtbHRl cm1jYXAgLWxzcnAgLWxzc2wgLWxrcnlwdG8gLWxjcnlwdG8gXAotCS1sY3J5cHQgLWxyZXNvbHYi Ci0KLSNMaW51eCBvbiBJbnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAxLjIu MiBhbmQgU1JQLgotIwotIyBsaWJzcnAuYSBzaG91bGQgYmUgYnVpbGQgd2l0aCBHTlUgTVAgKGxp YmdtcC5hKQotIyBpbnN0ZWFkIG9mIEFUJlQgQ3J5cHRvTGliIChsaWJjcnlwdC5hKSBkdWUgdG8g bmFtaW5nIGNvbmZsaWN0cyB3aXRoCi0jIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbiBMaW51eCBsaWJy YXJpZXMuCi0jIFJlcXVpcmVzIHRoZSBLZXJiZXJvcyAxLjIuMiBvciBoaWdoZXIgdG8gYmUgY29t cGlsZWQgd2l0aCBLUkI0IGNvbXBhdGliaWxpdHkuCi1saW51eCtrcmI1K2tyYjQrc3JwOgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBLUkI1 NCtTUlAuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0Mg PSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZMQUdTID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBl IC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tf U1JQIC1EQ0tfS0VSQkVST1MgIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAotCS1EQ0tfRU5DUllQ VElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9T SVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAotCSQoSzVJ TkMpICQoSzVJTkMpL2tyYjUgJChTUlBJTkMpIFwKLQkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQo TE5LRkxBR1MpIiBcCi0JIkxJQlMgPSAkKEs1TElCKSAkKFNSUExJQikgXAotCS1sbmN1cnNlcyAt bHRlcm1jYXAgLWxzcnAgLWxnbXAgLWxnc3NhcGlfa3JiNSAtbGtyeXB0byBcCi0JLWxkZXMgLWxr cmI0IC1sZGVzNDI1IC1sa3JiNSAtbGNvbV9lcnIgLWxrNWNyeXB0byAtbGNyeXB0IC1scmVzb2x2 IgotCi0jTGludXggb24gSW50ZWwgUEMgd2l0aCBDeWdudXMgb3IgTUlUIEtlcmJlcm9zIDUgMS4y LjIsIFNSUCBhbmQgU1NML1RMUy4KLSMKLSMgbGlic3JwLmEgc2hvdWxkIGJlIGJ1aWxkIHdpdGgg T3BlblNTTAotIyBSZXF1aXJlcyB0aGUgS2VyYmVyb3MgMS4yLjIgb3IgaGlnaGVyIHRvIGJlIGNv bXBpbGVkIHdpdGggS1JCNCBjb21wYXRpYmlsaXR5LgotIyBSZXF1aXJlcyBPcGVuU1NMIDAuOS42 YSBvciBoaWdoZXIKLSNJZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLCBhZGQgLURP UEVOU1NMXzA5NyB0byBLRkxBR1MuCi1saW51eCtrcmI1K2tyYjQrc3JwK29wZW5zc2w6Ci0JQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIEtSQixT UlAsU1NMLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkND ID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCi0JIkNGTEFHUyA9IC1PIC1mdW5zaWduZWQtY2hhciAtcGlw ZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZNQyBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENL X1NSUCAtRENLX0tFUkJFUk9TICAtREtSQjUgLURLUkI0IC1ES1JCNTI0IFwKLQktRENLX0VOQ1JZ UFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVTIC1EQ0tfU1NMIFwKLQktRENLX0NVUlNF UyAtRENLX1BPU0lYX1NJRyAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQVF9I IFwKLQkkKEs1SU5DKSAkKEs1SU5DKS9rcmI1ICQoU1JQSU5DKSAkKFNTTElOQykgXAotCSQoS0ZM QUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKLQkiTElCUyA9ICQoSzVMSUIpICQoU1JQ TElCKSAkKFNTTExJQikgXAotCS1sbmN1cnNlcyAtbHRlcm1jYXAgLWxzcnAgXAotCS1sa3JiNCAt bHNzbCAtbGtyeXB0byAtbGNyeXB0byBcCi0JLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvIC1s Z3NzYXBpX2tyYjUgLWxjcnlwdCAtbHJlc29sdiIKLQotI0xpbnV4IG9uIEludGVsIFBDIHdpdGgg Q3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEuMi4yLCBTU0wvVExTLgotIwotIyBsaWJzcnAuYSBz aG91bGQgYmUgYnVpbGQgd2l0aCBPcGVuU1NMCi0jIFJlcXVpcmVzIHRoZSBLZXJiZXJvcyAxLjIu MiBiZSBjb21waWxlZCB3aXRoIEtSQjQgY29tcGF0aWJpbGl0eS4KLSNJZiB5b3UgaGF2ZSBPcGVu U1NMIDAuOS43IG9yIGxhdGVyLCBhZGQgLURPUEVOU1NMXzA5NyB0byBLRkxBR1MuCi1saW51eCtr cmI1K2tyYjQrb3BlbnNzbDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBM aW51eCBvbiBpMzg2IHdpdGggS1JCLFNTTC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJDRkxBR1MgPSAtTyAt ZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAotCS1EQ0tf QVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAgLURLUkI1IC1ES1JCNCAtREtSQjUyNCBcCi0J LURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyAtRENLX1NTTCBcCi0J LURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhB VkVfQ1JZUFRfSCBcCi0JJChLNUlOQykgJChLNUlOQykva3JiNSAkKFNTTElOQykgXAotCSQoS0ZM QUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKLQkiTElCUyA9ICQoSzVMSUIpICQoU1NM TElCKSBcCi0JLWxuY3Vyc2VzIC1sdGVybWNhcCBcCi0JLWxrcmI0IC1sc3NsIC1sY3J5cHRvIC1s a3JiNSAtbGNvbV9lcnIgXAotCS1sazVjcnlwdG8gLWxnc3NhcGlfa3JiNSAtbGNyeXB0IC1scmVz b2x2IgotCi0jTGludXggb24gSW50ZWwgUEMgd2l0aCBDeWdudXMgb3IgTUlUIEtlcmJlcm9zIDUg MS4yLjEsIFNTTC9UTFMuCi0jCi0jIGxpYnNycC5hIHNob3VsZCBiZSBidWlsZCB3aXRoIE9wZW5T U0wKLSMgUmVxdWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4yIGJlIGNvbXBpbGVkIHdpdGggS1JCNCBj b21wYXRpYmlsaXR5LgotIyBJZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLCBhZGQg LURPUEVOU1NMXzA5NyB0byBLRkxBR1MuCi1saW51eCtrcmI1K2tyYjQrb3BlbnNzbCtzaGFkb3c6 Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRo IEtSQixTU0wuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAi Q0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZMQUdTID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1w aXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1E Q0tfS0VSQkVST1MgIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAotCS1EQ0tfRU5DUllQVElPTiAt RENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgLURDS19TU0wgLURDS19TSEFET1cgXAotCS1EQ0tf Q1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NS WVBUX0ggXAotCSQoSzVJTkMpICQoSzVJTkMpL2tyYjUgJChTU0xJTkMpIFwKLQkkKEtGTEFHUyki ICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCi0JIkxJQlMgPSAkKEs1TElCKSAkKFNTTExJQikg IFwKLQktbG5jdXJzZXMgLWx0ZXJtY2FwIFwKLQktbGtyYjQgLWxzc2wgLWxjcnlwdG8gLWxrcmI1 IC1sY29tX2VyciBcCi0JLWxrNWNyeXB0byAtbGdzc2FwaV9rcmI1IC1sY3J5cHQgLWxyZXNvbHYi Ci0KLSNMaW51eCBvbiBJbnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAxLjIs IFNTTC9UTFMuCi0jCi0jIGxpYnNycC5hIHNob3VsZCBiZSBidWlsZCB3aXRoIE9wZW5TU0wKLSMg UmVxdWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4yIGJlIGNvbXBpbGVkIHdpdGggS1JCNCBjb21wYXRp YmlsaXR5LgotIyBJZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLCBhZGQgLURPUEVO U1NMXzA5NyB0byBLRkxBR1MuCi1saW51eCtrcmI1K2tyYjQrb3BlbnNzbCt6bGliK3NoYWRvdzoK LQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBpMzg2IHdpdGgg S1JCLFNTTC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJD QyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBp cGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURD S19LRVJCRVJPUyAgLURLUkI1IC1ES1JCNCAtREtSQjUyNCAtRFpMSUIgXAotCS1EQ0tfRU5DUllQ VElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgLURDS19TU0wgLURDS19TSEFET1cgXAot CS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURI QVZFX0NSWVBUX0ggXAotCSQoSzVJTkMpICQoSzVJTkMpL2tyYjUgJChTU0xJTkMpIFwKLQkkKEtG TEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCi0JIkxJQlMgPSAkKEs1TElCKSAkKFNT TExJQikgXAotCS1sbmN1cnNlcyAtbHRlcm1jYXAgXAotCS1sa3JiNCAtbHNzbCAtbGNyeXB0byAt bGtyYjUgLWxjb21fZXJyIFwKLQktbGs1Y3J5cHRvIC1sZ3NzYXBpX2tyYjUgLWxjcnlwdCAtbHJl c29sdiAtbHoiCi0KLWxpbnV4K2tyYjUra3JiNCtzcnAtZXhwb3J0OgotCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBTUlAuLi4nCi0JJChNQUtF KSB4ZXJtaXQtZXhwb3J0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDQyA9IGdjYyIg IkNDMiA9IGdjYyIgXAotCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJ WCAtRExJTlVYIC1ETk9DT1RGTUMgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgLURD S19LRVJCRVJPUyAgLURLUkI1IC1ES1JCNCAtREtSQjUyNCBcCi0JLURDS19DVVJTRVMgLURDS19Q T1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCi0JJChL NUlOQykgJChLNUlOQykva3JiNSAkKFNSUElOQykgXAotCSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0g JChMTktGTEFHUykiIFwKLQkiTElCUyA9ICQoU1JQTElCKSAkKEs1TElCKSBcCi0JLWxuY3Vyc2Vz IC1sdGVybWNhcCAtbHNycCAtbGdtcCAtbGtyYjQgLWxkZXM0MjUgLWxrcmI1IC1sZ3NzYXBpX2ty YjUgXAotCS1sY29tX2VyciAtbGs1Y3J5cHRvIC1sa3J5cHRvIC1sY3J5cHQgLWxyZXNvbHYiCi0K LWxpbnV4K2tyYjUra3JiNCtzcnArcGFtOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBTUlAuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZMQUdTID0g LU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwKLQkt RENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIC1EQ0tfS0VSQkVST1MgIC1ES1JCNSAtREtSQjQg LURLUkI1MjQgXAotCS1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMg XAotCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQg LURIQVZFX0NSWVBUX0ggXAotCS1EQ0tfUEFNICQoSzVJTkMpICQoSzVJTkMpL2tyYjUgJChTUlBJ TkMpIFwKLQkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCi0JIkxJQlMgPSAk KFNSUExJQikgJChLNUxJQikgXAotCS1sbmN1cnNlcyAtbHRlcm1jYXAgLWxzcnAgLWxnbXAgLWxk ZXMgLWxrcmI0IC1sZGVzNDI1IC1sa3JiNSBcCi0JLWxjb21fZXJyIC1sazVjcnlwdG8gLWxnc3Nh cGlfa3JiNSAtbGtyeXB0byAtbGNyeXB0IC1scGFtIC1sZGwgXAotCS1scmVzb2x2IgotCi0jTGlu dXggb24gSW50ZWwgUEMgd2l0aCBDeWdudXMgb3IgTUlUIEtlcmJlcm9zIDUgMS4yLjIsIFNSUCBh bmQgU1NML1RMUy4KLSMgYW5kIFBBTS4KLSMKLSMgbGlic3JwLmEgc2hvdWxkIGJlIGJ1aWxkIHdp dGggT3BlblNTTAotIyBSZXF1aXJlcyB0aGUgS2VyYmVyb3MgMS4yLjIgYmUgY29tcGlsZWQgd2l0 aCBLUkI0IGNvbXBhdGliaWxpdHkuCi0jIElmIHlvdSBoYXZlIE9wZW5TU0wgMC45Ljcgb3IgbGF0 ZXIsIGFkZCAtRE9QRU5TU0xfMDk3IHRvIEtGTEFHUy4KLWxpbnV4K2tyYjUra3JiNCtzcnArb3Bl bnNzbCtwYW0tZGVidWc6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGlu dXggb24gaTM4NiB3aXRoIEtSQixTUlAsU1NMLi4uJwotCSQoTUFLRSkgeGVybWl0LWRlYnVnIEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCi0JIkNGTEFH UyA9IC1nIC1PIC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZN QyBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NSUCAtRENLX0tFUkJFUk9TICAtREtSQjUg LURLUkI0IC1ES1JCNTI0IFwKLQktRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1E TElCREVTIC1EQ0tfU1NMIC1EQ0tfUEFNIFwKLQktRENLX0NVUlNFUyAtRENLX1BPU0lYX1NJRyAt RFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKLQktdyAtRG1hbGxvYz1k bWFsbG9jIC1EZnJlZT1kZnJlZSAtRE1ERUJVRyAkKEs1SU5DKSAkKEs1SU5DKS9rcmI1IFwKLQkk KFNSUElOQykgJChTU0xJTkMpICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwK LQkiTElCUyA9ICQoU1JQTElCKSAkKEs1TElCKSAkKFNTTExJQikgXAotCS1sbmN1cnNlcyAtbHRl cm1jYXAgLWxzcnAgLWxrcmI0IC1sc3NsIC1sa3J5cHRvIC1sY3J5cHRvIFwKLQktbGtyYjUgLWxj b21fZXJyIC1sazVjcnlwdG8gLWxnc3NhcGlfa3JiNSAtbGNyeXB0IC1scmVzb2x2IC1scGFtIC1s ZGwiCi0KLSNMaW51eCBvbiBJbnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAx LjIuMSwgU1JQIGFuZCBTU0wvVExTLgotIyBhbmQgUEFNLgotIwotIyBsaWJzcnAuYSBzaG91bGQg YmUgYnVpbGQgd2l0aCBPcGVuU1NMCi0jIFJlcXVpcmVzIHRoZSBLZXJiZXJvcyAxLjIuMiBiZSBj b21waWxlZCB3aXRoIEtSQjQgY29tcGF0aWJpbGl0eS4KLSMgSWYgeW91IGhhdmUgT3BlblNTTCAw LjkuNyBvciBsYXRlciwgYWRkIC1ET1BFTlNTTF8wOTcgdG8gS0ZMQUdTLgotbGludXgra3JiNStr cmI0K3NycCtvcGVuc3NsK3BhbToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBMaW51eCBvbiBpMzg2IHdpdGggS1JCLFNSUCxTU0wuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZMQUdT ID0gLWcgLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1D IFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIC1EQ0tfS0VSQkVST1MgIC1ES1JCNSAt REtSQjQgLURLUkI1MjQgXAotCS1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMgLURM SUJERVMgLURDS19TU0wgLURDS19QQU0gXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1E VENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAotCSQoSzVJTkMpICQoSzVJ TkMpL2tyYjUgJChTUlBJTkMpICQoU1NMSU5DKSBcCi0JJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAk KExOS0ZMQUdTKSIgXAotCSJMSUJTID0gJChTUlBMSUIpICQoSzVMSUIpICQoU1NMTElCKSAgXAot CS1sbSAtbG5jdXJzZXMgLWx0ZXJtY2FwIC1sc3JwIFwKLQktbGtyYjQgLWxzc2wgLWxrcnlwdG8g IC1sY3J5cHRvIC1sZ3NzYXBpX2tyYjUgXAotCS1sa3JiNSAtbGNvbV9lcnIgLWxrNWNyeXB0byAt bGNyeXB0IC1scmVzb2x2IC1scGFtIC1sZGwiCi0KLSNMaW51eCBvbiBJbnRlbCBQQyB3aXRoIEN5 Z251cyBvciBNSVQgS2VyYmVyb3MgNSAxLjIuMiwgU1JQLCBPcGVuU1NMCi0jIHdpdGggWkxJQiBh bmQgUEFNCi0jCi0jIGxpYnNycC5hIHNob3VsZCBiZSBidWlsZCB3aXRoIE9wZW5TU0wKLSMgUmVx dWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4yIGJlIGNvbXBpbGVkIHdpdGggS1JCNCBjb21wYXRpYmls aXR5LgotIyBJZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLCBhZGQgLURPUEVOU1NM XzA5NyB0byBLRkxBR1MuCi1saW51eCtrcmI1K2tyYjQrc3JwK29wZW5zc2wremxpYitwYW06Ci0J QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIEtS QixTUlAsU1NMLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g IkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCi0JIkNGTEFHUyA9IC1nIC1PIC1mdW5zaWduZWQtY2hh ciAtcGlwZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZNQyBcCi0JLURDS19BVVRIRU5USUNBVElP TiAtRENLX1NSUCAtRENLX0tFUkJFUk9TICAtREtSQjUgLURLUkI0IC1ES1JCNTI0IFwKLQktRENL X0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVTIC1EQ0tfU1NMIC1EQ0tfUEFN IC1EWkxJQiBcCi0JLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5V WEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCi0JJChLNUlOQykgJChLNUlOQykva3JiNSAkKFNSUElO QykgJChTU0xJTkMpIFwKLQkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCi0J IkxJQlMgPSAkKFNSUExJQikgJChLNUxJQikgJChTU0xMSUIpIFwKLQktbG0gLWxuY3Vyc2VzIC1s dGVybWNhcCAtbHNycCBcCi0JLWxrcmI0IC1sc3NsIC1sa3J5cHRvICAtbGNyeXB0byAtbGdzc2Fw aV9rcmI1IFwKLQktbGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8gLWxjcnlwdCAtbHJlc29sdiAt bHBhbSAtbGRsIC1seiIKLQotI0xpbnV4IG9uIEludGVsIFBDIHdpdGggQ3lnbnVzIG9yIE1JVCBL ZXJiZXJvcyA1IDEuMi4yLCBTUlAsIE9wZW5TU0wKLSMgd2l0aCBaTElCLCBTaGFkb3cgUGFzc3dv cmRzLCBhbmQgUEFNCi0jCi0jIGxpYnNycC5hIHNob3VsZCBiZSBidWlsZCB3aXRoIE9wZW5TU0wK LSMgUmVxdWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4yIGJlIGNvbXBpbGVkIHdpdGggS1JCNCBjb21w YXRpYmlsaXR5LgotIyBJZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLCBhZGQgLURP UEVOU1NMXzA5NyB0byBLRkxBR1MuCi1saW51eCtrcmI1K2tyYjQrc3JwK29wZW5zc2wremxpYitz aGFkb3crcGFtOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IG9u IGkzODYgd2l0aCBLUkIsU1JQLFNTTC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJDRkxBR1MgPSAtZyAtTyAt ZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAotCS1EQ0tf QVVUSEVOVElDQVRJT04gLURDS19TUlAgLURDS19LRVJCRVJPUyAgLURLUkI1IC1ES1JCNCAtREtS QjUyNCBcCi0JLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyAtRENL X1NTTCAtRENLX1BBTSAtRFpMSUIgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQ U09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAotCS1EQ0tfU0hBRE9XICQoSzVJ TkMpICQoSzVJTkMpL2tyYjUgJChTUlBJTkMpICQoU1NMSU5DKSBcCi0JJChLRkxBR1MpIiAiTE5L RkxBR1MgPSAkKExOS0ZMQUdTKSIgXAotCSJMSUJTID0gJChTUlBMSUIpICQoSzVMSUIpICQoU1NM TElCKSBcCi0JLWxtIC1sbmN1cnNlcyAtbHRlcm1jYXAgLWxzcnAgLWxrcnlwdG8gXAotCS1sa3Ji NCAtbHNzbCAtbGNyeXB0byAtbGdzc2FwaV9rcmI1IFwKLQktbGtyYjUgLWxjb21fZXJyIC1sazVj cnlwdG8gLWxjcnlwdCAtbHJlc29sdiAtbHBhbSAtbGRsIC1seiIKLQotI0xpbnV4IG9uIEludGVs IFBDIHdpdGggQ3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEuMi4yLCBPcGVuU1NMCi0jIHdpdGgg U2hhZG93IFBhc3N3b3JkcywgUEFNCi0jCi0jIFJlcXVpcmVzIHRoZSBLZXJiZXJvcyAxLjIuMiBi ZSBjb21waWxlZCB3aXRoIEtSQjQgY29tcGF0aWJpbGl0eS4KLWxpbnV4K2tyYjUra3JiNCtvcGVu c3NsK3NoYWRvdytwYW06Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGlu dXggb24gaTM4NiB3aXRoIEtSQixTU0wsLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCi0JIkNGTEFHUyA9IC1nIC1P IC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZNQyBcCi0JLURD S19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TICAtREtSQjUgLURLUkI0IC1ES1JCNTI0IFwK LQktRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVTIC1EQ0tfU1NMIC1E Q0tfUEFNIFwKLQktRENLX0NVUlNFUyAtRENLX1BPU0lYX1NJRyAtRFRDUFNPQ0tFVCAtRExJTlVY RlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKLQktRENLX1NIQURPVyAkKEs1SU5DKSAkKEs1SU5DKS9r cmI1ICQoU1NMSU5DKSBcCi0JJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAot CSJMSUJTID0gJChLNUxJQikgJChTU0xMSUIpIFwKLQktbG0gLWxuY3Vyc2VzIC1sdGVybWNhcCBc Ci0JLWxrcmI0IC1sc3NsIC1sY3J5cHRvIC1sZ3NzYXBpX2tyYjUgXAotCS1sa3JiNSAtbGNvbV9l cnIgLWxrNWNyeXB0byAtbGNyeXB0IC1scmVzb2x2IC1scGFtIC1sZGwiCi0KLSNMaW51eCBvbiBJ bnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAxLjIuMiwgT3BlblNTTAotIyB3 aXRoIFpMSUIsIFNoYWRvdyBQYXNzd29yZHMsIFBBTQotIwotIyBsaWJzcnAuYSBzaG91bGQgYmUg YnVpbGQgd2l0aCBPcGVuU1NMCi0jIFJlcXVpcmVzIHRoZSBLZXJiZXJvcyAxLjIuMiBiZSBjb21w aWxlZCB3aXRoIEtSQjQgY29tcGF0aWJpbGl0eS4KLSMgSWYgeW91IGhhdmUgT3BlblNTTCAwLjku NyBvciBsYXRlciwgYWRkIC1ET1BFTlNTTF8wOTcgdG8gS0ZMQUdTLgotbGludXgra3JiNStrcmI0 K29wZW5zc2wremxpYitzaGFkb3crcGFtOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBLUkIsU1JQLFNTTC4uLicKLQkkKE1BS0UpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJD RkxBR1MgPSAtZyAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9D T1RGTUMgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAgLURLUkI1IC1ES1JC NCAtREtSQjUyNCBcCi0JLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRF UyAtRENLX1NTTCAtRENLX1BBTSAtRFpMSUIgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lH IC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAotCS1EQ0tfU0hBRE9X ICQoSzVJTkMpICQoSzVJTkMpL2tyYjUgJChTU0xJTkMpIFwKLQkkKEtGTEFHUykiICJMTktGTEFH UyA9ICQoTE5LRkxBR1MpIiBcCi0JIkxJQlMgPSAkKEs1TElCKSAkKFNTTExJQikgXAotCS1sbSAt bG5jdXJzZXMgLWx0ZXJtY2FwIFwKLQktbGtyYjQgLWxzc2wgLWxjcnlwdG8gLWxnc3NhcGlfa3Ji NSBcCi0JLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvIC1sY3J5cHQgLWxyZXNvbHYgLWxwYW0g LWxkbCAtbHoiCi0KLSNSZWQgSGF0IDkgLSBmdWxsIGluc3RhbGwgaW5jbHVkZXMgS2VyYmVyb3Mg NSAoNCBjb21wYXQpLCBQQU0sIFNTTC4KLSNBbHNvIHdvcmtzIGFyb3VuZCBidWcgaW4gY3Vyc2Vz IGluIHdoaWNoIHRlcm1pbmFsIGdvZXMgZGVhZCBhZnRlcgotI3JldHVybmluZyBmcm9tIGZpbGUt dHJhbnNmZXIgZGlzcGxheS4gIEFzc3VtZXMgT3BlblNTTCAwLjkuNyBvciBsYXRlci4KLXJlZGhh dDk6Ci0JQGVjaG8gIkJ1aWxkaW5nIFNFQ1VSRSBLZXJtaXQgZm9yIFJlZCBIYXQgOS4wLi4uIgot CSQoTUFLRSkgbGludXgra3JiNStrcmI0K29wZW5zc2wremxpYitzaGFkb3crcGFtIFwKLQlLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1MgPSAtRFJIOTAgLURPUEVOU1NMXzA5NyAkKEtG TEFHUykiCi0KLSNEaXR0byBwbHVzIFNSUCAod2hpY2ggaXMgbm90IG5vcm1hbGx5IGluY2x1ZGVk IHdpdGggUkggTGludXgpLgotcmVkaGF0OStzcnA6Ci0JQGVjaG8gIkJ1aWxkaW5nIFNFQ1VSRSBL ZXJtaXQgZm9yIFJlZCBIYXQgOS4wLi4uIgotCSQoTUFLRSkgbGludXgra3JiNStrcmI0K3NycCtv cGVuc3NsK3psaWIrc2hhZG93K3BhbSBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZM QUdTID0gLURSSDkwIC1ET1BFTlNTTF8wOTcgJChLRkxBR1MpIgotCi0jRm9yIFJlZCBIYXQgQVMg Mi4xIHdpdGggT3BlblNTTAotcmVkaGF0MjErc3NsOgotCUBlY2hvICJCdWlsZGluZyBTRUNVUkUg S2VybWl0IGZvciBSZWQgSGF0IDIuMS4uLiIKLQkkKE1BS0UpIGxpbnV4K29wZW5zc2wremxpYitz aGFkb3crcGFtIFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1MgPSAgJChLRkxB R1MpIgotCi0jUmVkIEhhdCBMaW51eCA4LjAgLSBmdWxsIGluc3RhbGwgaW5jbHVkZXMgS2VyYmVy b3MgNSAoNCBjb21wYXQpLCBQQU0sIFNTTC4KLSNBbHNvIHdvcmtzIGFyb3VuZCBidWcgaW4gY3Vy c2VzIGluIHdoaWNoIHRlcm1pbmFsIGdvZXMgZGVhZCBhZnRlcgotI3JldHVybmluZyBmcm9tIGZp bGUtdHJhbnNmZXIgZGlzcGxheS4KLXJlZGhhdDgwOgotCUBlY2hvICJCdWlsZGluZyBTRUNVUkUg S2VybWl0IGZvciBSZWQgSGF0IDguMC4uLiIKLQkkKE1BS0UpIGxpbnV4K2tyYjUra3JiNCtvcGVu c3NsK3psaWIrc2hhZG93K3BhbSBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdT ID0gLURSSDgwICQoS0ZMQUdTKSIKLQotcmVkaGF0ODArc3JwOgotCUBlY2hvICJCdWlsZGluZyBT RUNVUkUgS2VybWl0IGZvciBSZWQgSGF0IDguMC4uLiIKLQkkKE1BS0UpIGxpbnV4K2tyYjUra3Ji NCtzcnArb3BlbnNzbCt6bGliK3NoYWRvdytwYW0gXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gIktGTEFHUyA9IC1EUkg4MCAkKEtGTEFHUykiCi0KLSNSZWQgSGF0IExpbnV4IDcuMyAtIGZ1 bGwgaW5zdGFsbCBpbmNsdWRlcyBLZXJiZXJvcyA1ICg0IGNvbXBhdCksIFBBTSwgU1NMLgotI0Fs c28gd29ya3MgYXJvdW5kIGJ1ZyBpbiBjdXJzZXMgaW4gd2hpY2ggdGVybWluYWwgZ29lcyBkZWFk IGFmdGVyCi0jcmV0dXJuaW5nIGZyb20gZmlsZS10cmFuc2ZlciBkaXNwbGF5LgotcmVkaGF0NzM6 Ci0JQGVjaG8gIkJ1aWxkaW5nIFNFQ1VSRSBLZXJtaXQgZm9yIFJlZCBIYXQgNy4zLi4uIgotCSQo TUFLRSkgbGludXgra3JiNStrcmI0K29wZW5zc2wremxpYitzaGFkb3crcGFtIFwKLQlLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1MgPSAtRFJINzMgJChLRkxBR1MpIgotCi1yZWRoYXQ3 MytzcnA6Ci0JQGVjaG8gIkJ1aWxkaW5nIFNFQ1VSRSBLZXJtaXQgZm9yIFJlZCBIYXQgNy4zLi4u IgotCSQoTUFLRSkgbGludXgra3JiNStrcmI0K3NycCtvcGVuc3NsK3psaWIrc2hhZG93K3BhbSBc Ci0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTID0gLURSSDczICQoS0ZMQUdTKSIK LQotI1JlZCBIYXQgTGludXggNy4yIC0gZnVsbCBpbnN0YWxsIGluY2x1ZGVzIEtlcmJlcm9zIDUg KDQgY29tcGF0KSwgUEFNLCBTU0wuCi0jQWxzbyB3b3JrcyBhcm91bmQgYnVnIGluIGN1cnNlcyBp biB3aGljaCB0ZXJtaW5hbCBnb2VzIGRlYWQgYWZ0ZXIKLSNyZXR1cm5pbmcgZnJvbSBmaWxlLXRy YW5zZmVyIGRpc3BsYXkuCi1yZWRoYXQ3MjoKLQlAZWNobyAiQnVpbGRpbmcgU0VDVVJFIEtlcm1p dCBmb3IgUmVkIEhhdCA3LjIuLi4iCi0JJChNQUtFKSBsaW51eCtrcmI1K2tyYjQrb3BlbnNzbCt6 bGliK3NoYWRvdytwYW0gXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUyA9IC1E Ukg3MiAkKEtGTEFHUykiCi0KLXJlZGhhdDcyK3NycDoKLQlAZWNobyAiQnVpbGRpbmcgU0VDVVJF IEtlcm1pdCBmb3IgUmVkIEhhdCA3LjIuLi4iCi0JJChNQUtFKSBsaW51eCtrcmI1K2tyYjQrc3Jw K29wZW5zc2wremxpYitzaGFkb3crcGFtIFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJL RkxBR1MgPSAtRFJINzIgJChLRkxBR1MpIgotCi0jUmVkIEhhdCBMaW51eCA3LjEgLSBmdWxsIGlu c3RhbGwgaW5jbHVkZXMgS2VyYmVyb3MgNSAoNCBjb21wYXQpLCBQQU0sIFNTTC4KLSNBbHNvIHdv cmtzIGFyb3VuZCBidWcgaW4gY3Vyc2VzIGluIHdoaWNoIHRlcm1pbmFsIGdvZXMgZGVhZCBhZnRl cgotI3JldHVybmluZyBmcm9tIGZpbGUtdHJhbnNmZXIgZGlzcGxheS4KLXJlZGhhdDcxOgotCUBl Y2hvICJCdWlsZGluZyBTRUNVUkUgS2VybWl0IGZvciBSZWQgSGF0IDcuMS4uLiIKLQkkKE1BS0Up IGxpbnV4K2tyYjUra3JiNCtvcGVuc3NsK3psaWIrc2hhZG93K3BhbSBcCi0JS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSAiS0ZMQUdTID0gLURSSDcxICQoS0ZMQUdTKSIKLQotcmVkaGF0NzErc3Jw OgotCUBlY2hvICJCdWlsZGluZyBTRUNVUkUgS2VybWl0IGZvciBSZWQgSGF0IDcuMS4uLiIKLQkk KE1BS0UpIGxpbnV4K2tyYjUra3JiNCtzcnArb3BlbnNzbCt6bGliK3NoYWRvdytwYW0gXAotCUtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUyA9IC1EUkg3MSAkKEtGTEFHUykiCi0KLSNM aW51eCBvbiBJbnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAxLjIuMiwgT3Bl blNTTAotIyB3aXRoIFpMSUIgYW5kIFBBTSBhbmQgU2hhZG93IHBhc3N3b3JkcwotbGludXgra3Ji NStvcGVuc3NsK3psaWIrc2hhZG93K3BhbToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBMaW51eCBvbiBpMzg2IHdpdGggS1JCNSxTU0wuLi4nCi0JJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZM QUdTID0gLWcgLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09U Rk1DIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgIC1ES1JCNSAtRENLX1NI QURPVyAtREhBVkVfUFRNWCBcCi0JLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAt RExJQkRFUyAtRENLX1NTTCAtRENLX1BBTSAtRFpMSUIgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9T SVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAotCSQoSzVJ TkMpICQoSzVJTkMpL2tyYjUgJChTU0xJTkMpIFwKLQkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQo TE5LRkxBR1MpIiBcCi0JIkxJQlMgPSAkKEs1TElCKSAkKFNTTExJQikgXAotCS1sbSAtbG5jdXJz ZXMgLWx0ZXJtY2FwIC1sc3NsIC1sY3J5cHRvIC1sZ3NzYXBpX2tyYjUgXAotCS1sa3JiNSAtbGNv bV9lcnIgLWxrNWNyeXB0byAtbGNyeXB0IC1scmVzb2x2IC1scGFtIC1sZGwgLWx6IgotCi1saW51 eG5vdGNwOgotCSQoTUFLRSkgbGludXggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdT ID0gLUROT05FVCAkKEtGTEFHUykiCi0KLSMgIm1ha2UgbGludXhub3RjcCIgd2l0aCBsY2MgKHNl ZSBodHRwOi8vd3d3LmNzLnByaW5jZXRvbi5lZHUvc29mdHdhcmUvbGNjKQotIyBsY2MgZG9lcyBu b3QgdW5kZXJzdGFuZCB2YXJpb3VzIGdjYyBleHRlbnNpb25zOgotIyAgIl9faW5saW5lX18iIC0t IGNhbiBiZSBlbGltaW5hdGVkIGJ5IGFkZGluZyAiLURfX2lubGluZV9fPSIKLSMgICJfX2FzbV9f IGFuZCAibG9uZyBsb25nIiAtLSBpbiBoZWFkZXIgZmlsZXMsIHNob3VsZCBiZSBzdXJyb3VuZGVk IGJ5Ci0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNpZm5kZWYoX19TVFJJQ1RfQU5T SV9fKSIvIiNlbmRpZiIKLSMgIGhvd2V2ZXIsIFRDUCByZXF1aXJlcyBzb21lIF9fYXNtX18gZnVu Y3Rpb25zLCBzbyBjYW5ub3QgYmUgY29tcGlsZWQKLWxpbnV4bm90Y3AtbGNjOgotCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IHdpdGggbGNjIC4uLicKLQlAZWNobyAn UmVhZCBjb21tZW50cyBpbiBtYWtlZmlsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4nCi0J JChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBsY2MiICJDQzIg PSBsY2MiIFwKLQkiQ0ZMQUdTID0gLURMSU5VWCAtRFBPU0lYIC1EQ0tfQ1VSU0VTIC1EQ0tfUE9T SVhfU0lHIFwKLQktVVRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ETk9MRUFSTiAkKEtGTEFHUyki IFwKLQkiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgIkxJQlMgPSAtbGN1cnNlcyAtbHRlcm1jYXAi Ci0KLSMgTGludXggMC45OS4xNCB0aHJ1IDEuMCB3aXRoIGdjYywgZHluYW1pYyBsaWJyYXJpZXMs IGN1cnNlcywgVENQL0lQLgotIyBGb3IgTGludXggMS4yIG9yIGxhdGVyLCB1c2UgIm1ha2UgbGlu dXgiIChhYm92ZSkuCi0jCi0jIC1ETElOVVhGU1NUTkQgKExpbnV4IEZpbGUgU3lzdGVtIFN0YW5k YXJkKSBnaXZlcyBVVUNQIGxvY2tmaWxlIC92YXIvbG9jayB3aXRoCi0jIHN0cmluZyBwaWQuICBS ZW1vdmUgdGhpcyBhbmQgZ2V0IC91c3Ivc3Bvb2wvdXVjcCB3aXRoIGludCBwaWQsIHdoaWNoIHdh cyB1c2VkCi0jIGluIGVhcmx5IExpbnV4IHZlcnNpb25zLgotIwotIyBJZiB5b3UgZ2V0IGNvbXBp bGVyIGVycm9ycyByZWdhcmRpbmcgPGxpbnV4L3NlcmlhbC5oPiwgYWRkIC1ETk9ISVNQRUVELgot IwotIyAtRENLX1BPU0lYX1NJRyAoUE9TSVggc2lnbmFsIGhhbmRsaW5nKSBpcyBnb29kIGZvciBM aW51eCByZWxlYXNlcyBiYWNrIHRvIGF0Ci0jIGxlYXN0IDAuOTkuMTQ7IGlmIGl0IGNhdXNlcyB0 cm91YmxlIGZvciB5b3UsIGp1c3QgcmVtb3ZlIGl0LgotIwotIyAtRENLX0NVUlNFUzogSGVyZSB3 ZSBsaW5rIHdpdGggdGhlIHJlZ3VsYXIgY3Vyc2VzIGxpYnJhcnkuICBCdXQgeW91IHNob3VsZAot IyBiZSB1c2luZyBuY3Vyc2VzLiAgSW50ZXJuYWxseSwgdGhlIGNrdXVzeC5jIG1vZHVsZSBpbmNs dWRlcyA8Y3Vyc2VzLmg+LCBidXQKLSMgdGhpcyByZWFsbHkgc2hvdWxkIGJlIDxuY3Vyc2VzLmg+ LiAgVGh1cyBpZiB5b3UgaGF2ZSB0aGUgbmV3IGN1cnNlcwotIyBtYXRlcmlhbCwgeW91IHNob3Vs ZCBlaXRoZXIgaW5zdGFsbCBpdCB3aXRoIHRoZSBzdGFuZGFyZCBuYW1lcywgb3IgZWxzZQotIyBj cmVhdGUgc3ltYm9saWMgbGlua3MgZnJvbSB0aGUgc3RhbmRhcmQgbmFtZXMgdG8gdGhlIG5ldyBv bmVzLiAgSWYgeW91IGdldAotIyBjb21waWxlLXRpbWUgZXJyb3JzIGNvbXBsYWluaW5nIGFib3V0 IGRhdGEgZGVmaW5pdGlvbnMgaW4gdGVybWNhcC5oLCBpdAotIyBtZWFucyB5b3UgaGF2ZSBuZXcg a2VybmVsIG1hdGVyaWFsIG1peGVkIHdpdGggb2xkZXIgbGliYyBoZWFkZXIgZmlsZXMuICBUbwot IyBmaXgsIGFkZCAiI2luY2x1ZGUgPHRlcm1pb3MuaD4iIHRvIHRoZSA8dGVybWNhcC5oPiBmaWxl LiAgT3IgaWYgYWxsIHRoaXMgaXMKLSMgdG9vIGNvbmZ1c2luZywgY3JlYXRlIGEgbmV3IG1ha2Vm aWxlIGVudHJ5IGJhc2VkIG9uIHRoaXMgb25lLCBidXQgd2l0aAotIyAtRENLX0NVUlNFUyByZW1v dmVkIGZyb20gQ0ZMQUdTIGFuZCB0aGUgZW50aXJlIExJQlM9IGNsYXVzZSByZW1vdmVkLgotIwot IyBCdXQgd2FpdCwgdGhlcmUncyBtb3JlLiAgT24gbW9zdCBMaW51eCBzeXN0ZW1zLCAtbHRlcm1j YXAgbXVzdCBiZSBpbmNsdWRlZAotIyBpbiBMSUJTLiAgQnV0IG9uIG90aGVycywgdGhlIGxpbmtl ciBjb21wbGFpbnMgdGhhdCBsaWJ0ZXJtY2FwIGNhbid0IGJlCi0jIGZvdW5kLiAgSW4gdGhhdCBj YXNlLCB0cnkgcmVtb3ZpbmcgLWx0ZXJtY2FwIGZyb20gTElCUz0uCi0jCi0jIEJ1dCB3YWl0LCB0 aGVyZSdzIG1vcmUuICBUaGUgZm9ybWF0IG9mIHRoZSBQSUQgc3RyaW5nIGluIHRoZSBVVUNQIGxv Y2tmaWxlCi0jIGNoYW5nZWQgYmV0d2VlbiBMaW51eCBGU1NUTkQgMS4wIGFuZCAxLjIuICBJbiB0 aGUgZWFybGllciBzdGFuZGFyZCwgaXQgaGFkCi0jIGxlYWRpbmcgemVyb3M7IGluIHRoZSBzZWNv bmQsIGl0IGhhcyBsZWFkaW5nIHNwYWNlcy4gIEJ5IGRlZmF1bHQgdGhpcyBlbnRyeQotIyB1c2Vz IHRoZSBuZXdlciBzdGFuZGFyZC4gIFRvIGZvcmNlIHRoZSBvbGRlciBvbmUsIGFkZCAtREZTU1RO RDEwLgotIwotIyAiVGhlIG5pY2UgdGhpbmcgYWJvdXQgdGhlIExpbnV4IHN0YW5kYXJkIGlzIHRo ZXJlIGFyZSBzbyBtYW55IHRvIGNob29zZSBmcm9tIgotIwotIyBOT1RFOiBSZW1vdmUgLURCSUdC VUZPSyBmb3Igc21hbGwtbWVtb3J5IG9yIGxpbWl0ZWQtcmVzb3VyY2Ugc3lzdGVtcy4KLWxpbnV4 MTA6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggMS4wIG9yIGVh cmxpZXIuLi4nCi0JQGVjaG8gJ0lNUE9SVEFOVDogUmVhZCB0aGUgY29tbWVudHMgaW4gdGhlIGxp bnV4IHNlY3Rpb24gb2YgdGhlJwotCUBlY2hvICdtYWtlZmlsZSBpZiB5b3UgZ2V0IGNvbXBpbGF0 aW9uIG9yIGxpbmsgZXJyb3JzLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJDRkxBR1MgPSAtTyAtRFBPU0lYIC1E Q0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1ETElOVVggXAotCS1EVENQU09DS0VUIC1ETElOVVhG U1NUTkQgLURPTElOVVhISVNQRUVEIC1ETk9MRUFSTiAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1Mg PSAkKExOS0ZMQUdTKSIgIkxJQlMgPSAtbGN1cnNlcyAtbHRlcm1jYXAiCi0KLSNUaGlzIHZlcnNp b24gd2FzIHVzZWQgZm9yIExpbnV4IHByaW9yIHRvIEMtS2VybWl0IDYuMC4xOTIuCi0jTm93IHRo ZSAiTGludXggRmlsZSBTeXN0ZW0gU3RhbmRhcmQiIGlzIGNvbnNpZGVyZWQgc3RhbmRhcmQsIGRp dHRvIFRDUC9JUC4KLWxpbnV4b2xkOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIExpbnV4Li4uJwotCUBlY2hvICdGb3IgRlNTVE5ELXJlY29tbWVuZGVkIFVVQ1AgbG9ja2Zp bGVzLCB1c2U6JwotCUBlY2hvICcgIG1ha2UgbGludXggIktGTEFHUz0tRExJTlVYRlNTVE5EIi4n Ci0JQGVjaG8gJ1JlYWQgY29tbWVudHMgaW4gbWFrZWZpbGUgZm9yIGFkZGl0aW9uYWwgb3B0aW9u cy4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2Mi ICJDQzIgPSBnY2MiIFwKLQkiQ0ZMQUdTID0gLU8gLURMSU5VWCAtRFBPU0lYIC1EQ0tfQ1VSU0VT IC1EQ0tfUE9TSVhfU0lHIC1ETk9MRUFSTiBcCi0JJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExO S0ZMQUdTKSIgIkxJQlMgPSAtbGN1cnNlcyAtbHRlcm1jYXAiCi0KLSMgOjpFTkRfT0xEX0xJTlVY X1RBUkdFVFM6OgotCi0jIEx5bnhPUyAyLjIgd2l0aCBHQ0MgY29tcGlsZXIsIFRDUC9JUCBhbmQg ZnVsbHNjcmVlbiBkaXNwbGF5LgotIyBQcm9iYWJseSBhbHNvIHdvcmtzIHdpdGggTHlueCAyLjEs IGFuZCBtYXliZSBldmVuIEx5bnggMi4wLgotIyAtWCBtZWFucyB1c2UgdGVybWlvcyBzZXJpYWwg ZHJpdmVycyByYXRoZXIgdGhhbiBCU0Q0LjMtc3R5bGUgc2d0dHkgZHJpdmVycy4KLSMgSWYgeW91 IGhhdmUgdHJvdWJsZSB3aXRoIHRoaXMsIHRyeSAibWFrZSBic2QgS0ZMQUdTPS1ETk9GRFpFUk8i LgotbHlueDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMeW54T1MgMi4y IHdpdGggVENQL0lQJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g IkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCi0JIkNGTEFHUz0gLU8gLURQT1NJWCAtRERJUkVOVCAt RFNFVFJFVUlEIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIFwKLQktRENLX0FOU0lDIC1ETFlOWE9T IC1ETk9MRUFSTiIgIkxOS0ZMQUdTID0gLVgiICJMSUJTID0gLWxjdXJzZXMgLWxic2QiCi0KLWx5 bngyMjoKLQkkKE1BS0UpIGx5bnggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTPSQo S0ZMQUdTKSIKLQotIyBMeW54T1MgMi4xIHdpdGggR0NDIGNvbXBpbGVyIDEuNDAgYW5kIFRDUC9J UC4KLWx5bngyMToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMeW54T1Mg Mi4xIHdpdGggVENQL0lQJwotCSQoTUFLRSkga2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCi0JIkNGTEFHUz0gLU8gLURTRVRSRVVJRCAtRFRD UFNPQ0tFVCAtRENLX0FOU0lDIC1EQlNENCAtRExZTlhPUyIgXAotCSJMSUJTID0gLWxic2QiCi0K LSNTQ08gWGVuaXggMi4yLjEgZm9yIElCTSBQQywgWFQsIFBTMi8zMCwgb3Igb3RoZXIgODA4OCBv ciA4MDg2IG1hY2hpbmUKLSNTaG91bGQgdGhpcyBub3Qgd29yaywgdHJ5IHNvbWUgb2YgdGhlIHRy aWNrcyBmcm9tIHNjbzI4Ni4KLSNOT1RFOiAtRFJFTkFNRSBpcyBvbWl0dGVkIGZvciBlYXJseSBT Q08gWGVuaXggcmVsZWFzZXMgYmVjYXVzZSBpdCBkaWRuJ3QKLSNleGlzdCwgb3IgaXRzIHNlbWFu dGljcyB3ZXJlIGRpZmZlcmVudCBmcm9tIHRoZSBsYXRlciBQT1NJWC1jb21wbGlhbnQKLSN2ZXJz aW9uIG9mIHJlbmFtZSgpLgotc2NvODY6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgU0NPIFhlbml4Lzg2Li4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAotCSJDRkxBR1M9IC1EWEVOSVggLUROT0ZJTEVIIC1ETk9JS1NEIC1ETk9VTklD T0RFIC1ETk9MRUFSTiBcCi0JJChLRkxBR1MpIC1EdW5peCAtRiAzMDAwIC1pIC1NMG1lIiBcCi0J IkxOS0ZMQUdTID0gLUYgMzAwMCAtaSAtcyAtTTBtZSIgIkxJQlMgPSAtbHgiCi0KLSNTQ08gWGVu aXgvMjg2IDIuMi4xLCBlLmcuIGZvciBJQk0gUEMvQVQsIFBTLzIgTW9kZWwgNTAsIGV0Yy4KLSNS ZXBvcnRlZGx5LCB0aGlzICJtYWtlIiBjYW4gZmFpbCBzaW1wbHkgYmVjYXVzZSBvZiB0aGUgc2l6 ZSBvZiB0aGlzCi0jbWFrZWZpbGUuICBJZiB0aGF0IGhhcHBlbnMsIHVzZSAibWFrZUwiLCBvciBl ZGl0IG91dCBzb21lIG9mIHRoZQotI290aGVyIGVudHJpZXMuICBObyBkZWJ1Z2dpbmcgb3IgY2hh cmFjdGVyLXNldCB0cmFuc2xhdGlvbi4KLXNjbzI4NjoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBTQ08gWGVuaXgvMjg2Li4uJwotCUBlY2hvICdJZiBtYWtlIGZhaWxzLCB0 cnkgdXNpbmcgbWFrZUwuJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAotCSJDRkxBR1M9IC14ZW5peCAtcyAtTyAtTEFSR0UgLURYRU5JWCAtRE5PRklMRUggLUR1 bml4IC1EUkRDSEsgLUROQVAgXAotCS1ETk9JS1NEIC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PQ1NF VFMgLUROT0xFQVJOIFwKLQkkKEtGTEFHUykgLUYgMzAwMCAtaSAtTTJsZXQxNiIgXAotCSJMSUJT ID0gLWx4IiAiTE5LRkxBR1MgPSAteGVuaXggLXMgLU8gLUxBUkdFIC1GIDMwMDAgLWkgLU0ybGV0 MTYiCi0KLSNTQ08gWGVuaXgvMjg2IDIuMi4xLCBlLmcuIGZvciBJQk0gUEMvQVQsIFBTLzIgTW9k ZWwgNTAsIGV0Yy4KLSNBcyBhYm92ZSwgYnV0IHdpdGggSERCVVVDUCAoVGhpcyBvbmUgbWlnaHQg bmVlZCBmaXhpbmcgLS0gc2VlIHNjbzI4NikuCi1zY28yODZoZGI6Ci0JQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFhlbml4LzI4NiB3aXRoIEhEQiBVVUNQLi4uJwotCUBl Y2hvICdJZiBtYWtlIGZhaWxzLCB0cnkgdXNpbmcgbWFrZUwuJwotCSQoTUFLRSkgd2VybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1zIC1PIC1MQVJHRSAtRFhFTklY IC1ETk9GSUxFSCAtRHVuaXggLURSRENISyAtRE5BUCBcCi0JLURIREJVVUNQIC1ETk9JS1NEIC1E Tk9VTklDT0RFIC1ETk9MRUFSTiBcCi0JJChLRkxBR1MpIC1GIDMwMDAgLWkgLU0ybGV0MzIiIFwK LQkiTElCUyA9IC1seCIgIkxOS0ZMQUdTID0gLXMgLU8gLUxBUkdFIC1GIDMwMDAgLWkgLU0ybGV0 MzIiCi0KLSNTQ08gWGVuaXgvMzg2IDIuMi4yIGFuZCAyLjIuMwotc2NvMzg2OgotCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBYZW5peC8zODYgMi4yLjIuLi4nCi0JJChN QUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURYRU5J WCAtRE5PRklMRUggLUROT0lLU0QgLUROT1JFRElSRUNUIC1ETk9MRUFSTiBcCi0JLUR1bml4IC1E UkRDSEsgLUROQVAgLUROT1VOSUNPREUgJChLRkxBR1MpIC1PdGNsIC1NM2UiIFwKLQkiTE5LRkxB R1MgPSAtcyIgIkxJQlMgPSAtbHgiCi0KLSNTQ08gWEVOSVgvMzg2IDIuMi4zIHdpdGggRXhjZWxh biBUQ1AvSVAgKyBjdXJzZXMuCi0jIE5PVEU6IFRoaXMgb25lIG1pZ2h0IG5lZWQgc29tZSB3b3Jr IGluIEMtS2VybWl0IDYuMC4KLSMgWW91IG1pZ2h0IG5lZWQgdG8gaW5jbHVkZSAvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgKLSMgY29udGFpbmluZyAidHlwZWRlZiBjaGFyICpjYWRkcl90OyIuICBU aGVuIGF0IGxlYXN0IGl0IGNvbXBpbGVzLgotc2NvMzg2bmV0YzoKLQlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gWGVuaXgvMzg2IDIuMi4zICsgRXhjZWxhbiBUQ1AnCi0J JChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLUkv dXNyL2luY2x1ZGUvZXhvcyAtRFhFTklYIC1EQ0tfQ1VSU0VTIC1ETk9VTklDT0RFIFwKLQktRHVu aXggLURSRENISyAtRE5BUCAtRFRDUFNPQ0tFVCAtREVYQ0VMQU4gLUROT0pDIC1ETk9NS0RJUiAt RE5PRklMRUggXAotCS1ETk9MRUFSTiAtRE5PUkVESVJFQ1QgLUROT0lLU0QgLUROT19ETlNfU1JW ICQoS0ZMQUdTKSAtT3RjbCAtTTNlIiBcCi0JIkxOS0ZMQUdTID0gLXMiICJMSUJTID0gLWxjIC1s eCAtbHNvY2tldCAtbGN1cnNlcyAtbHRlcm1jYXAiCi0KLSNTQ08gWEVOSVgvMzg2IDIuMy4zIHdp dGggZ2NjIDEuMzcgb3IgbGF0ZXIuLi4KLXNjbzM4NmdjYzoKLQlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBTQ08gWGVuaXgvMzg2IDIuMy4zLCBnY2MuLi4nCi0JQGVjaG8gJ0Fk ZCAtRF9OT19QUk9UT1RZUEUgaWYgeW91IGhhdmUgdHJvdWJsZSB3aXRoIFhlbml4IGhlYWRlciBm aWxlcycKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdj YyIgIkNDMiA9IGdjYyIgXAotCSJDRkxBR1M9IC1PIC1EWEVOSVggLURTVlIzIC1ETk9GSUxFSCAt REhEQlVVQ1AgLURSRENISyAtRE5BUCBcCi0JLUROT0pDIC1ETk9ERUJVRyAtRE5PVU5JQ09ERSAt RE5PTEVBUk4gJChLRkxBR1MpIFwKLQktdHJhZGl0aW9uYWwgLWZwY2Mtc3RydWN0LXJldHVybiAt ZnN0cmVuZ3RoLXJlZHVjZSBcCi0JLURNX0JJVEZJRUxEUyAtRE1fQ09GRiAtRE1fSTM4NiAtRE1f STg2IC1ETV9JODZTTSBcCi0JLURNX0lOVEVSTkFUIC1ETV9TREFUQSAtRE1fU1RFWFQgLURNX1NZ UzMgLURNX1NZUzUgXAotCS1ETV9TWVNJSUkgLURNX1NZU1YgLURNX1dPUkRTV0FQIC1ETV9YRU5J WCAtRE5PSUtTRCAtRE5PUkVESVJFQ1QgXAotCS1EUFdJRF9UPWludCAiICJMTktGTEFHUyA9IC1z IiAiTElCUyA9IC1seCIKLQotI0FzIGFib3ZlLCBidXQgd2l0aCBjdXJzZXMuLi4KLXNjbzM4Nmdj Y2M6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFhlbml4LzM4NiAy LjMuMywgZ2NjLi4uJwotCUBlY2hvICdBZGQgLURfTk9fUFJPVE9UWVBFIGlmIHlvdSBoYXZlIHRy b3VibGUgd2l0aCBYZW5peCBoZWFkZXIgZmlsZXMnCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZMQUdTPSAtTyAt RFhFTklYIC1EU1ZSMyAtRE5PRklMRUggLURIREJVVUNQIC1EUkRDSEsgLUROQVAgXAotCS1ETk9K QyAtRE5PREVCVUcgLURDS19DVVJTRVMgLUROT1VOSUNPREUgLUROT0xFQVJOICQoS0ZMQUdTKSBc Ci0JLXRyYWRpdGlvbmFsIC1mcGNjLXN0cnVjdC1yZXR1cm4gLWZzdHJlbmd0aC1yZWR1Y2UgXAot CS1ETV9CSVRGSUVMRFMgLURNX0NPRkYgLURNX0kzODYgLURNX0k4NiAtRE1fSTg2U00gLUROT1JF RElSRUNUIFwKLQktRE1fSU5URVJOQVQgLURNX1NEQVRBIC1ETV9TVEVYVCAtRE1fU1lTMyAtRE1f U1lTNSBcCi0JLURNX1NZU0lJSSAtRE1fU1lTViAtRE1fV09SRFNXQVAgLURNX1hFTklYIC1ETk9J S1NEIFwKLQktRFBXSURfVD1pbnQgIiAiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbHggLWxjdXJz ZXMgLWx0ZXJtbGliIgotCi0jU0NPIFVOSVggKGFuZCBPRFQpIGVudHJpZXMuLi4KLSMKLSNOT1RF OiBBbGwgU0NPIFVOSVggZW50cnkgTElCUyBzaG91bGQgaGF2ZSAiLWxjX3MgLWxjIC1seCIgSU4g VEhBVCBPUkRFUiAoaWYKLSNzaGFyZWQgQyBsaWJyYXJ5IGlzIGRlc2lyZWQpLCBvciBlbHNlICIt bGMgLWx4IiBJTiBUSEFUIE9SREVSLiAgVXNlIHNoYXJlZCBDCi0jbGlicmFyaWVzIHRvIHNhdmUg bWVtb3J5LCBidXQgdGhlbiBkb24ndCBleHBlY3QgdG8gcnVuIHRoZSByZXN1bHRpbmcgYmluYXJ5 Ci0jb24gYSBkaWZmZXJlbnQgbWFjaGluZS4gIFdoZW4gdXNpbmcgLWxjX3MsIHlvdSBtdXN0IGFs c28gdXNlIC1sYywgYmVjYXVzZSB0aGUKLSNzaGFyZWQgQyBsaWJyYXJ5IGRvZXMgbm90IGNvbnRh aW4gYWxsIG9mIGxpYmMuYS4gIEFuZCBpbiBhbGwgY2FzZXMsIC1sYyBtdXN0Ci0jQUxXQVlTIHBy ZWNlZGUgLWx4LgotIwotI0FOT1RIRVIgTk9URTogLURSRU5BTUUgaXMgaW5jbHVkZWQgaW4gYWxs IFNDTyBVTklYIGVudHJpZXMuICBSZW1vdmUgaXQgaWYgaXQKLSNjYXVzZXMgdHJvdWJsZS4gIE5v IGhhcm0gaXMgZG9uZSBieSByZW1vdmluZyBpdCAoc2VlIGNrdWlucy50eHQpLgotIwotI0FORCBB Tk9USEVSOiBJbiB0aGVvcnksIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBydW4gU0NPIFVOSVgg YmluYXJpZXMgb24KLSNTQ08gWGVuaXggMi4zIGFuZCBsYXRlci4gIEluIHByYWN0aWNlLCB0aGlz IG1pZ2h0IG5vdCB3b3JrIGJlY2F1c2Ugb2YgdGhlCi0jbGlicmFyaWVzLCBldGMuICBBbHNvLCBk b24ndCBhZGQgdGhlIC1saW5rIC16IHN3aXRjaCAod2hpY2ggaXMgc3VwcG9zZWQgdG8KLSNyb290 IG91dCByZWZlcmVuY2VzIHRvIG51bGwgcG9pbnRlcnMpIGJlY2F1c2UgaXQgbWFrZXMgVU5JWCBi aW5hcmllcyBjb3JlCi0jZHVtcCB3aGVuIHRoZXkgYXJlIHJ1biB1bmRlciBYZW5peC4KLQotI05P VEU6IC1PdGNsIHJlbW92ZWQgYW5kIHJlcGxhY2VkIGJ5IC1PLCBzaW5jZSAtT3RjbCBwcm9kdWNl ZCBpbmNvcnJlY3QgY29kZS4KLSNTQ08gVU5JWC8zODYgMy4yLjAsIDMuMi4xLCBhbmQgU0NPIFhl bml4IDIuMy54Ci1zY28zcjI6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig U0NPIFVOSVgvMzg2IDMuMi4wIG9yIDMuMi4xIC4uLicKLQlAZWNobyAnV2FybmluZzogSWYgbWFr ZSBibG93cyB1cCwgZWRpdCB0aGUgbWFrZWZpbGUgdG8gam9pbicKLQlAZWNobyAndGhlIGZvbGxv d2luZyB0aHJlZSBjb250aW51ZWQgbGluZXMgaW50byBvbmUgbGluZS4nCi0JQGVjaG8gJ0Fsc28s IHJlbW92ZSAtRFJFTkFNRSBpZiBfcmVuYW1lIHVucmVzb2x2ZWQgYXQgbGluayB0aW1lLicKLQkk KE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRFhF TklYIC1EU1ZSMyAtRE5PRklMRUggLURIREJVVUNQIC1EUkRDSEsgLUROQVAgLUROT0xFQVJOIFwK LQktRFJFTkFNRSAtRE5PSUtTRCAtRE5PSkMgJChLRkxBR1MpIC1PIiBcCi0JIkxOS0ZMQUdTID0g LXMiICJMSUJTID0gLWxjIC1seCIKLQotI1NDTyBVTklYLzM4NiAzLjIuMCBhbmQgU0NPIFhlbml4 IDIuMy54IHdpdGggRXhjZWxhbiBUQ1AvSVAgc3VwcG9ydC4KLSNJbiBjYXNlIG9mIGNvbXBpbGF0 aW9uIG9yIHJ1bnRpbWUgcHJvYmxlbXMsIHRyeSBhZGRpbmcKLSMiLURVSURfVD1pbnQgLURHSURf VD1pbnQiIHRvIHRoZSBDRkxBR1MuICBJZiB0aGF0IGRvZXNuJ3Qgd29yaywgdHJ5Ci0jIi1EVUlE X1Q9dWlkX3QgLURHSURfVD1naWRfdCIuCi1zY28zcjJuZXQ6Ci0JQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgU0NPIFVOSVgvMzg2IC8gRXhjZWxhbi4uLicKLQkkKE1BS0UpIHdl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtSS91c3IvaW5jbHVk ZS9leG9zIC1EWEVOSVggLURTVlIzIC1ETk9GSUxFSCAtRE5PTEVBUk4gXAotCS1ESERCVVVDUCAt RFJEQ0hLIC1ETkFQIC1EUkVOQU1FIC1EVENQU09DS0VUIC1ERVhDRUxBTiAtRE5PSkMgXAotCS1E Tk9JS1NEIC1ETk9SRURJUkVDVCAkKEtGTEFHUykgLU8iIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJ QlMgPSAtbGMgLWx4IC1sc29ja2V0IgotCi0jU0NPIFVOSVgvMzg2IDMuMi4wIGFuZCBTQ08gWGVu aXggMi4zLnggd2l0aCBFeGNlbGFuIFRDUC9JUCBzdXBwb3J0LgotI0FzIGFib3ZlLCB3aXRoIGN1 cnNlcyBhZGRlZC4KLXNjbzNyMm5ldGM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgU0NPIFVOSVgvMzg2IC8gRXhjZWxhbiAvIGN1cnNlcy4uLicKLQkkKE1BS0UpIHdlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtSS91c3IvaW5jbHVkZS9l eG9zIC1EWEVOSVggLURTVlIzIC1ETk9GSUxFSCAtRE5PTEVBUk4gXAotCS1ESERCVVVDUCAtRFJE Q0hLIC1ETkFQIC1EVENQU09DS0VUIC1ERVhDRUxBTiAtRE5PSkMgJChLRkxBR1MpIFwKLQktRFJF TkFNRSAtRENLX0NVUlNFUyAtRE5PUkVESVJFQ1QgLUROT0lLU0QgLU8iICJMTktGTEFHUyA9IC1z IiBcCi0JIkxJQlMgPSAtbGMgLWx4IC1sc29ja2V0IC1sY3Vyc2VzIC1sdGVybWNhcCIKLQotI1ND TyBVTklYIDMuMi54IG9yIFNDTyBYZW5peCAyLjMueCB3aXRoIFJhY2FsIEludGVyTGFuIFRDUC9J UCBzdXBwb3J0Ci0jIEV4dHJhIGNvbXBpbGUgZmxhZ3MgZm9yIG90aGVyIHZlcnNpb24gb2YgUmFj YWwgSW50ZXJMYW4gVENQL0lQOgotIyBYZW5peDI4Ni9OUDYyMS0yODYsIHVzZSAtTWwgLURQQVJB TUggLURJTlRFUkxBTiAtRGkyODYgLURTWVNWCi0jIFhlbml4Mzg2L05QNjIxLTM4NiwgdXNlIC1E UEFSQU1IIC1ESU5URVJMQU4gLURpMzg2IC1EU1lTVgotIyBJU0MzODZpeC9OUDYyMkksIHVzZSAt RFNZU1YgLURpMzg2Ci0jIFNDTyBVbml4My4yL05QNjIyUywgdXNlIC1EU1lTViAtRGkzODYgLURT Q09fVU5JWAotIyBBVCZUIFNWUjMuMi9OUDYyMkEsIHVzZSAtRFNZU1YgLURpMzg2IC1EQVRUCi1z Y28zcjJuZXRyaToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gVU5J WC8zODYgLyBSYWNhbCBJbnRlckxhbi4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtSS91c3IvaW5jbHVkZS9pbnRlcmxhbiAtRFhFTklY IC1ETk9GSUxFSCAtREhEQlVVQ1AgXAotCS1EU1ZSMyAtRFJEQ0hLIC1ETkFQIC1EVENQU09DS0VU IC1EUEFSQU1IIC1ESU5URVJMQU4gLURpMzg2IC1EU1lTViBcCi0JLURSRU5BTUUgLUROT1JFRElS RUNUIC1ETk9JS1NEIC1ETk9KQyAtRE5PTEVBUk4gJChLRkxBR1MpIC1PdGNsIC1NM2UiIFwKLQki TE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGMgLWx4IC1sdGNwIgotCi0jIFNDTyBYRU5JWC8zODYg Mi4zLjMgU3lzViB3aXRoIFNDTyBUQ1AvSVAKLSMgU3lzdGVtIFYgU1RSRUFNUyBUQ1AgZGV2ZWxv cGVkIGJ5IExhY2htYW4gQXNzb2NpYXRlcyBJbmMgYW5kCi0jIENvbnZlcmdlbnQgVGVjaG5vbG9n aWVzLgotIyAtRFJFTkFNRSByZW1vdmVkIHNpbmNlIHNvbWUgcmVwb3J0cyBpbmRpY2F0ZSBpdCBp cyBub3Qgc3VwcG9ydGVkCi0jICh3aGVyZWFzIG90aGVycyBzYXkgaXQgaXMuKQotc2NvM3IybGFp OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBYRU5JWC8zODYgMi4z LjMgKyBUQ1AvSVAuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCi0JIkNGTEFHUz0gLURMQUlfVENQIC1EaTM4NiAtRFhFTklYIC1EU1ZSMyAtRE5PRklMRUgg LURIREJVVUNQIC1EUkRDSEsgXAotCS1ETkFQIC1EVENQU09DS0VUIC1EUFdJRF9UPWludCAtRE5P UkVESVJFQ1QgLUROT0lLU0QgLUROT0xFQVJOIFwKLQkkKEtGTEFHUykgLU90Y2wgLWkgLU0zZSIg XAotCSJMTktGTEFHUyA9IC1pIC1zIiAiTElCUyA9IC1sYyAtbHggLWxzb2NrZXQiCi0KLXNjbzNy MmxhaWM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFhFTklYLzM4 NiAyLjMuMyArIFRDUC9JUC4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRExBSV9UQ1AgLURpMzg2IC1EWEVOSVggLURTVlIzIC1ETk9G SUxFSCAtREhEQlVVQ1AgLURSRENISyBcCi0JLUROQVAgLURUQ1BTT0NLRVQgLURDS19BTlNJQyAt RENLX0NVUlNFUyAtRE1fVEVSTUlORk8gLUROT0xFQVJOIFwKLQktRFBXSURfVD1pbnQgLUROT1JF RElSRUNUIC1ETk9JS1NEICQoS0ZMQUdTKSAtT3RjbCAtaSAtTTNlIiBcCi0JIkxOS0ZMQUdTID0g LWkgLXMiICJMSUJTID0gLWx0aW5mbyAtbGMgLWx4IC1sc29ja2V0IgotCi0jU0NPIFVOSVgvMzg2 IDMuMnYyIChQT1NJWCBqb2IgY29udHJvbCksIHNoYXJlZCBsaWJyYXJpZXMuCi1zY28zcjIyOgot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBVTklYLzM4NiAzLjJ2MiAu Li4nCi0JbWFrZSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0g LURYRU5JWCAtRFNWUjMgLUROT0ZJTEVIIC1ESERCVVVDUCAtRFJEQ0hLIC1ETk9MRUFSTiBcCi0J LUROQVAgLURSRU5BTUUgLURQSURfVD1waWRfdCAtRFBXSURfVD1pbnQgLURESVJFTlQgLUROT0lL U0QgXAotCS1ETk9SRURJUkVDVCAkKEtGTEFHUykgLU8iIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJ QlMgPSAtbGNfcyAtbGMgLWx4IgotCi0jU0NPIFVOSVgvMzg2IDMuMnYyLCBQT1NJWCBqb2IgY29u dHJvbCwgZnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXksCi0jZHluYW1pYyBtZW1vcnkg YWxsb2NhdGlvbiwgc2hhcmVkIEMgbGlicmFyeQotc2NvM3IyMmM6Ci0JQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFVOSVgvMzg2IDMuMnYyIC4uLicKLQlAZWNobyAnV2Fy bmluZzogSWYgbWFrZSBibG93cyB1cCwgZWRpdCB0aGUgbWFrZWZpbGUgdG8gam9pbicKLQlAZWNo byAndGhlIGZvbGxvd2luZyBmb3VyIGNvbnRpbnVlZCBsaW5lcyBpbnRvIG9uZSBsaW5lLicKLQlt YWtlIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRFhFTklY IC1EU1ZSMyAtRE5PRklMRUggLURIREJVVUNQIC1EUkRDSEsgLUROQVAgLUROT0xFQVJOIFwKLQkt RENLX0NVUlNFUyAtRERJUkVOVCAtRFJFTkFNRSAtRE5PUkVESVJFQ1QgLUROT0lLU0QgXAotCS1E UElEX1Q9cGlkX3QgLURQV0lEX1Q9aW50ICQoS0ZMQUdTKSAtTyIgXAotCSJMTktGTEFHUyA9IC1z IiAiTElCUyA9IC1sY3Vyc2VzIC1sY19zIC1sYyAtbHgiCi0KLSNTQ08gVU5JWC8zODYgMy4ydjIg d2l0aCBnY2MgMS40MCBvciBsYXRlciAoUE9TSVggam9iIGNvbnRyb2wpCi1zY28zcjIyZ2NjOgot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBVTklYLzM4NiAzLjJ2Miwg Z2NjJwotCUBlY2hvICdXYXJuaW5nOiBJZiBtYWtlIGJsb3dzIHVwLCBlZGl0IHRoZSBtYWtlZmls ZSB0byBqb2luJwotCUBlY2hvICd0aGUgZm9sbG93aW5nIHNldmVuIGNvbnRpbnVlZCBsaW5lcyBp bnRvIG9uZSBsaW5lLicKLQltYWtlIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJD QyA9IGdjYyIgXAotCSJDRkxBR1M9IC1PIC1EUE9TSVggLURYRU5JWCAtRFNWUjMgLUROT0ZJTEVI IC1ESERCVVVDUCAtRFJEQ0hLIC1ETkFQIFwKLQktRE5PTEVBUk4gLURSRU5BTUUgLXRyYWRpdGlv bmFsIC1mcGNjLXN0cnVjdC1yZXR1cm4gLWZzdHJlbmd0aC1yZWR1Y2UgXAotCS1ETV9CSVRGSUVM RFMgLURNX0NPRkYgLURNX0kzODYgLURNX0k4NiAtRE1fSTg2U00gXAotCS1ETV9JTlRFUk5BVCAt RE1fU0RBVEEgLURNX1NURVhUIC1ETV9TWVMzIC1ETV9TWVM1IFwKLQktRE1fU1lTSUlJIC1ETV9T WVNWIC1ETV9VTklYIC1ETV9XT1JEU1dBUCAtRE1fWEVOSVggLUR1bml4IFwKLQktRFBJRF9UPXBp ZF90IC1EUFdJRF9UPWludCAtRE5PUkVESVJFQ1QgLUROT0lLU0QgJChLRkxBR1MpICIgXAotCSJM TktGTEFHUyA9IC1zIiAiTElCUyA9IC1sY19zIC1sYyAtbHgiCi0KLSNTQ08gVU5JWC8zODYgMy4y djIgKE9EVCAxLjEpIChQT1NJWCBqb2IgY29udHJvbCkgd2l0aCBTQ08gVENQL0lQLCBzaGFyZWQg bGlicwotI1JlcXVpcmVzIFNDTyBUQ1AvSVAgb3IgT0RUIGRldmVsb3BtZW50IHN5c3RlbSBmb3Ig dGVsbmV0LmgsIGV0Yy4KLXNjbzNyMjJuZXQ6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgU0NPIFVOSVgvMzg2IDMuMi4yICsgVENQL0lQLi4uJwotCUBlY2hvICdXYXJuaW5n OiBJZiBtYWtlIGJsb3dzIHVwLCBlZGl0IHRoZSBtYWtlZmlsZSB0byBqb2luJwotCUBlY2hvICd0 aGUgZm9sbG93aW5nIHRocmVlIGNvbnRpbnVlZCBsaW5lcyBpbnRvIG9uZSBsaW5lLicKLQltYWtl IHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRFhFTklYIC1E U1ZSMyAtRE5PRklMRUggLURIREJVVUNQIC1EUkRDSEsgLUROQVAgLURUQ1BTT0NLRVQgXAotCS1E UkVOQU1FIC1EUElEX1Q9cGlkX3QgLURQV0lEX1Q9aW50IC1ERElSRU5UIC1ETk9SRURJUkVDVCAt RE5PSUtTRCBcCi0JJChLRkxBR1MpIC1PIiAiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbHNvY2tl dCAtbGNfcyAtbGMgLWx4IgotCi0jQXMgYWJvdmUsIGJ1dCB3aXRoIGN1cnNlcyBmb3IgZnVsbHNj cmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkuCi0jUmVxdWlyZXMgU0NPIFRDUC9JUCBvciBPRFQg ZGV2ZWxvcG1lbnQgc3lzdGVtIGZvciB0ZWxuZXQuaCwgZXRjLgotc2NvM3IyMm5ldGM6Ci0JQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFVOSVgvMzg2IDMuMnYyICsgVENQ L0lQLi4uJwotCUBlY2hvICdXYXJuaW5nOiBJZiBtYWtlIGJsb3dzIHVwLCBlZGl0IHRoZSBtYWtl ZmlsZSB0byBqb2luJwotCUBlY2hvICd0aGUgZm9sbG93aW5nIHRocmVlIGNvbnRpbnVlZCBsaW5l cyBpbnRvIG9uZSBsaW5lLicKLQltYWtlIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 ICJDRkxBR1M9IFwKLQktRFhFTklYIC1EU1ZSMyAtRE5PRklMRUggLURIREJVVUNQIC1EUkRDSEsg LUROQVAgLURUQ1BTT0NLRVQgLURSRU5BTUUgXAotCS1EQ0tfQ1VSU0VTIC1ERElSRU5UIC1ETk9J S1NEIC1ETk9SRURJUkVDVCBcCi0JLURQSURfVD1waWRfdCAtRFBXSURfVD1pbnQgLU8gJChLRkxB R1MpIiBcCi0JIkxOS0ZMQUdTID0gLXMiICJMSUJTID0gLWxjdXJzZXMgLWxzb2NrZXQgLWxjX3Mg LWxjIC1seCIKLQotI1NDTyBYRU5JWCAyLjMuNCwgbm8gY3Vyc2VzLCBubyBUQ1AvSVAsIG5vIElL U0QuCi0jVGhpcyBvbmUgYnVpbHQgYW5kIHRlc3RlZCBpbiBDLUtlcm1pdCA3LjAuCi0jbGNmcCBp cyBDIGxpYnJhcnkgZmxvYXRpbmctcG9pbnQgc3VwcG9ydC4KLSNVc2UgLU0zIHRvIGdlbmVyYXRl IDMyLWJpdCBpMzg2IGNvZGUgaW5zdGVhZCBvZiAxNi1iaXQgc2VnbWVudGVkIGkyODYgY29kZS4K LSNVc2UgLU1lIHRvIGVuYWJsZSBNUyBub25zdGFuZGFyZCBrZXl3b3JkcyBpbiBzeXN0ZW0gaGVh ZGVycy4KLSNVc2UgLVcyIG9yIFczIHRvIGluY3JlYXNlIHRoZSB3YXJuaW5nIGxldmVsLgotI09L OiAyMDExLzA2LzE1Ci1zY28yMzQ6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgU0NPIFhFTklYIDIuMy40Li4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAotCSJDRkxBR1M9IC1EU0NPMzIgLURYRU5JWCAtRE5PRklMRUggLURIREJVVUNQ IC1EUkRDSEsgLUROT0xFQVJOIFwKLQktRE5BUCAtRE5PSkMgLUROT0NPVEZNQyAtRE5PSUtTRCAt RE5PUkVESVJFQ1QgLUROT1ROQ09ERSAtRE5PR0ZUSU1FUiBcCi0JLUROT1RJTUVWQUwgLUROT1RJ TUVaT05FIC1ETk9TWU1MSU5LIC1EU0NPMjM0IC1ERENMR0VUQ1dEICQoS0ZMQUdTKSBcCi0JLU90 Y2wiICJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sY2ZwIC1sYyAtbHgiCi0KLSNTQ08gWEVOSVgg Mi4zLjQsIG5vIFRDUC9JUCwgbm8gSUtTRCwgYnV0IHdpdGggY3Vyc2VzLgotIyBCdWlsdCBhbmQg dGVzdGVkIGluIEMtS2VybWl0IDcuMC4KLSMgTm90ZTogWEVOSVggMi4zLjQgZG9lcyBub3QgaGF2 ZSBuZXd0ZXJtKCkgc28gbm8gcG9pbnQgaW4gYWRkaW5nIC1EQ0tfTkVXVEVSTS4KLXNjbzIzNGM6 Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFhFTklYIDIuMy40ICsg Y3Vyc2VzLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAot CSJDRkxBR1M9IC1EU0NPMzIgLURYRU5JWCAtRE5PRklMRUggLURIREJVVUNQIC1EUkRDSEsgLURO T0xFQVJOIFwKLQktRE5BUCAtRE5PSkMgLUROT0NPVEZNQyAtRE5PSUtTRCAtRE5PUkVESVJFQ1Qg LUROT1ROQ09ERSAtRE5PR0ZUSU1FUiBcCi0JLUROT1RJTUVWQUwgLUROT1RJTUVaT05FIC1ETk9T WU1MSU5LIC1EQ0tfQ1VSU0VTIC1EU0NPMjM0IFwKLQktRERDTEdFVENXRCAkKEtGTEFHUykgLU90 Y2wiIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGNmcCAtbGMgLWx0aW5mbyAtbHgiCi0K LSNTQ08gWEVOSVggMi4zLjQgd2l0aCBTQ08gVENQL0lQIGFuZCBjdXJzZXMsIG5vIElLU0QuCi0j IEJ1aWx0IGFuZCB0ZXN0ZWQgaW4gQy1LZXJtaXQgNy4wLiAgVENQL0lQIHdvcmtzIGFuZCBjdXJz ZXMgd29ya3MuCi0jIFByZXZpb3VzIHZlcnNpb25zIG9mIHRoaXMgdGFyZ2V0IGluY2x1ZGVkIC1s bWFsbG9jLCBidXQgdGhpcyBjYXVzZWQgImVycm9yOgotIyAiIF9jYWxsb2MgOiBzeW1ib2wgZGVm aW5lZCBtb3JlIHRoYW4gb25jZSIgYXQgbGluayB0aW1lIHNvIEkgcmVtb3ZlZCBpdC4KLSMgUmVz dWx0cyBhcmUgbGlrZWx5IHRvIHZhcnkgZGVwZW5kaW5nIG9uIGV4YWN0bHkgd2hpY2ggdmVyc2lv biBvZiB0aGUgU0RLCi0jIGFuZCBUQ1AvSVAgU0RLIHlvdSBoYXZlLgotc2NvMjM0bmV0YzoKLQlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gWEVOSVggMi4zLjQgKyBUQ1Ag KyBjdXJzZXMuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc Ci0JIkNGTEFHUz0gLURTQ08zMiAtRFhFTklYIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURSRENISyAt RE5PTEVBUk4gXAotCS1ETkFQIC1ETk9KQyAtRE5PQ09URk1DIC1ETk9JS1NEIC1ETk9SRURJUkVD VCAtRE5PVE5DT0RFIC1ETk9HRlRJTUVSIFwKLQktRE5PVElNRVZBTCAtRE5PVElNRVpPTkUgLURO T1NZTUxJTksgLURDS19DVVJTRVMgLURTQ08yMzQgXAotCS1ERENMR0VUQ1dEIC1EVENQU09DS0VU IC1ETk9fRE5TX1NSViAkKEtGTEFHUykgLU90Y2wiIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJQlMg PSAtbHRpbmZvIC1sc29ja2V0IC1sY2ZwIC1sYyAtbHgiCi0KLSMgU0NPIDMuMnY0LnggdGFyZ2V0 cy4uLgotCi0jICBOT1RFOiBBZGQgLUREQ0xQT1BFTiBhbmQvb3IgLUREQ0xGRE9QRU4gdG8gYW55 U0NPIDMuMnY0Lnggbm9uLWdjYyBlbnRyaWVzCi0jICB0aGF0IGNvbXBsYWluIGFib3V0IGZkb3Bl bigpIG9yIHBvcGVuKCkgYXQgY29tcGlsZSB0aW1lLiAgVGhleSBjb21waWxlIE9LCi0jICB3aXRo b3V0IHRoZXNlIGZsYWdzIGFzIG9mIEp1bHkgMTk5OS4gIEhvd2V2ZXIsIHRoZSBnY2MgZW50cmll cyBzZWVtIHRvCi0jICBuZWVkIHRoZW0sIGF0IGxlYXN0IGZvciBnY2MgMi43LjIuMi4KLQotIyAg Tk9URSAyOiBUbyBlbmFibGUgSUtTRCBzdXBwb3J0LCBhZGQ6Ci0jICAtRENLX0xPR0lOIC1ETk9H RVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMKLSMgIHRvIENGTEFHUyAobm90IHRlc3RlZCkuCi0K LSNTQ08gVU5JWC8zODYgMy4ydjQgKFBPU0lYIGpvYiBjb250cm9sKSwgY3Vyc2VzLCBBTlNJIEMg Y29tcGlsYXRpb24sCi0jPGRpcmVudC5oPiAoRUFGUykgZmlsZSBzeXN0ZW0uICBSZW1vdmUgLWxt YWxsb2MgaWYgaXQgY2F1c2VzIHRyb3VibGUuICBJdCB3YXMKLSNwdXQgdGhlcmUgdG8gYXZvaWQg Y29yZSBkdW1wcyBjYXVzZWQgYnkgcmVndWxhciBsaWJjLmEgbWFsbG9jLiAgQWRkIC1KIHRvIG1h a2UKLSNhbGwgY2hhcnMgdW5zaWduZWQuICBUaGlzIHZlcnNpb24gdXNlcyBzZWxlY3QoKSBmb3Ig Q09OTkVDVCBhbmQgYWxzbyBoYXMKLSNoaWdoLXByZWNpc2lvbiB0aW1lcnMgYW5kIHNvIG1pZ2h0 IG5vdCB3b3JrIG9uIG5vbi1UQ1Agc3lzdGVtcywgaW4gd2hpY2ggY2FzZQotI3NjbzMydjRucyBz aG91bGQgYmUgdXNlZCBpbnN0ZWFkLgotIyBJZiB5b3UgZ2V0IF9mdGltZSByZWRlZmluaXRpb25f IGNvbXBsYWludCwgdHJ5IGFkZGluZyAtRE9EVDMwIHRvIENGTEFHUy4KLXNjbzMydjQ6Ci0JQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFVOSVgvMzg2IDMuMnY0Li4uJwot CW1ha2UgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQ0tf U0NPMzJWNCAtRE5PRklMRUggLURIREJVVUNQIC1EQ0tfQ1VSU0VTIC1ETV9URVJNSU5GTyBcCi0J LUROT0FOU0kgLURTRUxFQ1QgLUROT0lLU0QgLUREQ0xHRVRDV0QgLU5PTFNUQVQgXAotCS1ETk9M SU5LQklUUyAtRERDTEdFVENXRCAkKEtGTEFHUykgLU8iIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJ QlMgPSAtbGN1cnNlcyAtbG1hbGxvYyAtbHNvY2tldCAtbGNfcyAtbGMgLWx4IgotCi0jIEFzIGFi b3ZlLCBidXQgd2l0aCBubyBkZXBlbmRlbmNlIG9uIHNvY2tldHMgbGlicmFyeSBvciBzZWxlY3Qo KS4KLXNjbzMydjRuczoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08g VU5JWC8zODYgMy4ydjQuLi4nCi0JQGVjaG8gJ05vIHNlbGVjdCgpIGFuZCBubyBzb2NrZXRzIGxp YnJhcnkuJwotCW1ha2Ugd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxB R1M9IC1EQ0tfU0NPMzJWNCAtRE5PRklMRUggLURIREJVVUNQIC1EQ0tfQ1VSU0VTIC1ETV9URVJN SU5GTyBcCi0JLUROT0FOU0kgLUROT0lLU0QgLUROT0dGVElNRVIgLURDS19QT0xMIC1ETkFQIC1E RENMR0VUQ1dEIC1ETk9MU1RBVCBcCi0JLUROT0xJTktCSVRTIC1ERENMR0VUQ1dEIC1ETk9MRUFS TiAtTyAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGN1cnNlcyAtbG1h bGxvYyAtbGNfcyAtbGMgLWx4IgotCi0jU0NPIFVOSVgvMzg2IDMuMnY0IChQT1NJWCBqb2IgY29u dHJvbCksIFRDUC9JUCwgY3Vyc2VzLCBBTlNJIEMgY29tcGlsYXRpb24sCi0jPGRpcmVudC5oPiAo RUFGUykgZmlsZSBzeXN0ZW0uICBXaXRoIERJUkVOVCwgLWxjIG11c3QgY29tZSBiZWZvcmUgLWx4 LgotI1JlcG9ydGVkbHkgaXQncyBPSyB0byBhZGQgLURDS19SRURJUiBhbmQgLURDS19XUkVGUkVT SCwgYW5kIHRvIHJlbW92ZSAtbGNfcy4KLSNSZXF1aXJlcyBTQ08gVENQL0lQIGRldmVsb3BtZW50 IHN5c3RlbSBvciBPRFQgZm9yIHRlbG5ldC5oLCBldGMuCi0jU2VlIHNjbzMydjQgYWJvdmUgZm9y IGFkZGl0aW9uYWwgY29tbWVudHMuCi0jTk9URTogTm8gbW9yZSByb29tIGZvciAtRHh4eCAtLSAy NSBzZWVtcyB0byBiZSB0aGUgbGltaXQuICBNb3ZlIHNvbWUgdG8KLSNja2NkZWIuaCBvciBzb21l d2hlcmUuLi4KLXNjbzMydjRuZXQ6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgU0NPIFVOSVgvMzg2IDMuMnY0Li4uJwotCUBlY2hvICdJZiB5b3UgZ2V0IF9mdGltZSByZWRl ZmluaXRpb25fIGNvbXBsYWludCwnCi0JQGVjaG8gJ3VzZSBtYWtlIHNjby1vZHQzMC4nCi0JJChN QUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLUROT0ZJ TEVIIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAtRENLX0FOU0lDIC1EQ0tfQ1VSU0VTIFwKLQktRE5B UCAtRENLX1dSRUZSRVNIIC1ETk9MSU5LQklUUyAtRF9JQkNTMiAtRFNFTEVDVCAtRE5PTFNUQVQg XAotCS1ERENMR0VUQ1dEIC1EQ0tfU0NPMzJWNCAtRE5PSUtTRCAtTyBcCi0JJChLRkxBR1MpIiAi TE5LRkxBR1MgPSAkKExOS0ZMQUdTKSAtcyIgXAotCSJMSUJTID0gJChMSUJTKSAtbGN1cnNlcyAt bHNvY2tldCAtbG1hbGxvYyAtbHNvY2tldCAtbGNfcyAtbGMgLWx4IgotCi0jU0NPIFVOSVgvMzg2 IDMuMnY0IHdpdGggZ2NjIDEuNDAgb3IgbGF0ZXIsIFBPU0lYIGpvYiBjb250cm9sLgotI0Fsc28g c2VlIGNvbW1lbnRzIGluIHNjbzMycjQgZW50cnkuCi1zY28zMnY0Z2NjOgotCW1ha2UgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiBcCi0JIkNGTEFHUz0gLU8gLURO T0ZJTEVIIC1ESERCVVVDUCAtRE5PQU5TSSAtRENLX0NVUlNFUyAtRE1fVEVSTUlORk8gXAotCS10 cmFkaXRpb25hbCAtZnBjYy1zdHJ1Y3QtcmV0dXJuIC1mc3RyZW5ndGgtcmVkdWNlIC1mdW5zaWdu ZWQtY2hhciBcCi0JLURfS1IgLURfTk9fUFJPVE9UWVBFIC1EX1NWSUQgLUROT0lLU0QgLURDS19T Q08zMlY0IC1ETk9MSU5LQklUUyBcCi0JLURNX0JJVEZJRUxEUyAtRE1fQ09GRiAtRE1fSTM4NiAt RE1fSTg2IC1ETV9JODZTTSAtRFNFTEVDVCAtRE5PTFNUQVQgXAotCS1ETV9JTlRFUk5BVCAtRE1f U0RBVEEgLURNX1NURVhUIC1ETV9TWVMzIC1ETV9TWVM1IC1ERENMR0VUQ1dEIFwKLQktRE1fU1lT SUlJIC1ETV9TWVNWIC1ETV9VTklYIC1ETV9XT1JEU1dBUCAtRE1fWEVOSVggLUR1bml4IFwKLQkt RERDTFBPUEVOIC1ERENMRkRPUEVOICQoS0ZMQUdTKSAiIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJ QlMgPSAtbGN1cnNlcyAtbHNvY2tldCAtbGNfcyAtbGMgLWx4IgotCi0jU0NPIFVOSVgvMzg2IDMu MnY0IChQT1NJWCBqb2IgY29udHJvbCksIFRDUC9JUCwgY3Vyc2VzLCBBTlNJIEMgY29tcGlsYXRp b24sCi0jUmVxdWlyZXMgU0NPIFRDUC9JUCBvciBPRFQgZGV2ZWxvcG1lbnQgc3lzdGVtIGZvciB0 ZWxuZXQuaCwgZXRjLgotIzxkaXJlbnQuaD4gKEVBRlMpIGZpbGUgc3lzdGVtLiAgV2l0aCBESVJF TlQsIC1sYyBtdXN0IGNvbWUgYmVmb3JlIC1seC4KLSNnY2MgMS40MCBvciBsYXRlci4gIEFsc28g c2VlIGNvbW1lbnRzIGluIHNjbzMycjQgZW50cnkuCi1zY28zMnY0bmV0Z2NjOgotCW1ha2UgeGVy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyPWdjYyIgXAotCSJD RkxBR1M9IC1PMiAtRE5PRklMRUggLURIREJVVUNQIC1EU0VMRUNUIC1ETk9MU1RBVCBcCi0JLURO T0FOU0kgLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgLURNX1RFUk1JTkZPIFwKLQktRF9LUiAtRF9O T19QUk9UT1RZUEUgLURfU1ZJRCAtRE5PSUtTRCAtRENLX1NDTzMyVjQgLUROT0xJTktCSVRTIFwK LQktRE1fQklURklFTERTIC1ETV9DT0ZGIC1ETV9JMzg2IC1ETV9JODYgLURNX0k4NlNNIC1ERENM R0VUQ1dEIFwKLQktRE1fSU5URVJOQVQgLURNX1NEQVRBIC1ETV9TVEVYVCAtRE1fU1lTMyAtRE1f U1lTNSBcCi0JLURNX1NZU0lJSSAtRE1fU1lTViAtRE1fVU5JWCAtRE1fV09SRFNXQVAgLURNX1hF TklYIC1EdW5peCBcCi0JLUREQ0xQT1BFTiAtRERDTEZET1BFTiAkKEtGTEFHUykiIFwKLQkiTE5L RkxBR1MgPSAtcyIgIkxJQlMgPSAtbGN1cnNlcyAtbHNvY2tldCAtbGNfcyAtbGMgLWx4IgotCi0j QXMgYWJvdmUgYnV0IHdpdGggYmdjYyBCT1VORFMgQ0hFQ0tJTkcgKGZvciBkZXZlbG9wZXJzIG9u bHkpLiAgLWxjaGVjayBoYXMKLSNib3VuZHMtY2hlY2tpbmcgcmVwbGFjZW1lbnRzIGZvciBtYWxs b2MsIG1lbWNweSwgYmNvcHksIGV0Yywgc28gbXVzdCBjb21lCi0jYmVmb3JlIC1sc29ja2V0IGFu ZCAtbGMuCi1zY28zMnY0bmV0YmdjYzoKLQltYWtlIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKLQkiQ0MgPSBiZ2NjIC1waXBlIC1tMzg2IiAiQ0MyPWJnY2MgLXBpcGUgLW0zODYi IFwKLQkiQ0ZMQUdTPSAtTzEgLWcgLUROT0ZJTEVIIC1ESERCVVVDUCAtRFNFTEVDVCBcCi0JLURO T0FOU0kgLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgLURNX1RFUk1JTkZPIFwKLQktRF9LUiAtRF9O T19QUk9UT1RZUEUgLURfU1ZJRCAtRE5PSUtTRCAtRENLX1NDTzMyVjQgLUROT0xTVEFUIFwKLQkt RE1fQklURklFTERTIC1ETV9DT0ZGIC1ETV9JMzg2IC1ETV9JODYgLURNX0k4NlNNIC1ETk9MSU5L QklUUyBcCi0JLURNX0lOVEVSTkFUIC1ETV9TREFUQSAtRE1fU1RFWFQgLURNX1NZUzMgLURNX1NZ UzUgLUREQ0xHRVRDV0QgXAotCS1ETV9TWVNJSUkgLURNX1NZU1YgLURNX1VOSVggLURNX1dPUkRT V0FQIC1ETV9YRU5JWCAtRHVuaXggXAotCS1ERENMUE9QRU4gLUREQ0xGRE9QRU4gJChLRkxBR1Mp ICIgXAotCSJMTktGTEFHUyA9IC1nIiAiTElCUyA9IC1sY3Vyc2VzIC1sY2hlY2sgLWxzb2NrZXQg LWx4IgotCi1zY28zMnY0bmV0bmQ6Ci0JQGVjaG8gc2NvMzJ2NG5ldCB3aXRoIG5vIGRlYnVnCi0J JChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY0bmV0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAotCSJLRkxBR1M9JChLRkxBR1MpIC1ETk9ERUJVRyAtRE5PVExPRyIgIkxJQlM9JChMSUJT KSIKLQotc2NvM3IybmV0bmQ6Ci0JQGVjaG8gc2NvMzJ2NG5ldG5kIGJ1aWx0IGZvciBTQ08gWEVO SVggMi4zIHVuZGVyIFNDTyBVTklYLi4uCi0JQGVjaG8gICByZXF1aXJlcyBjb3B5aW5nIC9saWIv Mzg2L1NsaWJjLmEgdG8gL2xpYi8zODYvU2xpYmNfcy5hIGFuZAotCUBlY2hvICAgZ2V0dGluZyAv bGliLzM4Ni9TbGlic29ja2V0LmEgZnJvbSBhIFhFTklYIGRldmtpdC4KLQlAZWNobyAgIFdBUk5J Tkc6IHBvbGwvQ0tfUE9MTCBzdXBwb3J0ZWQgb25seSBvbiBYRU5JWCAyLjMuNAotCWVjaG8gICAg Rm9yIGVhcmxpZXIgWEVOSVggc3lzdGVtcywgcmVwbGFjZSBDS19QT0xMIHdpdGggUkRDSEsuCi0J JChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY0bmV0bmQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIktGTEFHUz0kKEtGTEFHUykgLXgyLjMgLUROT1JFTkFNRSAtRE5PU1lNTElOSyIg XAotCSJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIC14Mi4zIiBcCi0JIkxJQlM9LWxkaXIgLWxjZnAg JChMSUJTKSIKLQotI1NDTyBVTklYLzM4NiAzLjJ2NCAoUE9TSVggam9iIGNvbnRyb2wpLCBUQ1Av SVAsIGN1cnNlcywgQU5TSSBDIGNvbXBpbGF0aW9uLAotIzxkaXJlbnQuaD4gKEVBRlMpIGZpbGUg c3lzdGVtLiAgV2l0aCBESVJFTlQsIC1sYyBtdXN0IGNvbWUgYmVmb3JlIC1seC4KLSNSZXBvcnRl ZGx5IGl0J3MgT0sgdG8gYWRkIC1EQ0tfUkVESVIgYW5kIC1EQ0tfV1JFRlJFU0gsIGFuZCB0byBy ZW1vdmUgLWxjX3MuCi0jUmVxdWlyZXMgU0NPIFRDUC9JUCBkZXZlbG9wbWVudCBzeXN0ZW0gb3Ig T0RUIGZvciB0ZWxuZXQuaCwgZXRjLgotI1NlZSBzY28zMnY0IGFib3ZlIGZvciBhZGRpdGlvbmFs IGNvbW1lbnRzLgotIyBOb3RlOiAieGVybWl0IiBtZWFucyB1c2UgdGhlIHNlbGVjdCgpIHZlcnNp b24gb2YgdGhlIENPTk5FQ1QgbW9kdWxlLgotc2NvMzJ2NG5ldHg6Ci0JQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFVOSVgvMzg2IDMuMnY0Li4uJwotCUBlY2hvICdJZiB5 b3UgZ2V0IF9mdGltZSByZWRlZmluaXRpb25fIGNvbXBsYWludCwnCi0JQGVjaG8gJ3VzZSBtYWtl IHNjby1vZHQzMC4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc Ci0JIkNGTEFHUz0gLUROT0ZJTEVIIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAtRENLX0FOU0lDIC1E Q0tfQ1VSU0VTIC1ETkFQIFwKLQktRENLX1dSRUZSRVNIIC1ETk9MSU5LQklUUyAtRF9JQkNTMiAt RFNFTEVDVCAtRERDTEdFVENXRCBcCi0JLURDS19TQ08zMlY0IC1ETk9JS1NEIC1ETk9MU1RBVCAt TyAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSAtcyIgXAotCSJMSUJTID0g JChMSUJTKSAtbGN1cnNlcyAtbHNvY2tldCAtbG1hbGxvYyAtbHNvY2tldCAtbGNfcyAtbGMgLWx4 IgotCi1zY28zMnY0bmV0bmR4OgotCUBlY2hvIHNjbzMydjRuZXR4IHdpdGggbm8gZGVidWcKLQkk KE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjRuZXR4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAotCSJLRkxBR1M9JChLRkxBR1MpIC1ETk9ERUJVRyAtRE5PVExPRyIgIkxJQlM9JChMSUJT KSIKLQotc2NvM3IybmV0bmR4OgotCUBlY2hvIHNjbzMydjRuZXRuZHggYnVpbHQgZm9yIFNDTyBY RU5JWCAyLjMgdW5kZXIgU0NPIFVOSVguLi4KLQlAZWNobyAgIHJlcXVpcmVzIGNvcHlpbmcgL2xp Yi8zODYvU2xpYmMuYSB0byAvbGliLzM4Ni9TbGliY19zLmEgYW5kCi0JQGVjaG8gICBnZXR0aW5n IC9saWIvMzg2L1NsaWJzb2NrZXQuYSBmcm9tIGEgWEVOSVggZGV2a2l0LgotCUBlY2hvICAgV0FS TklORzogcG9sbC9DS19QT0xMIHN1cHBvcnRlZCBvbmx5IG9uIFhFTklYIDIuMy40Ci0JZWNobyAg ICBGb3IgZWFybGllciBYRU5JWCBzeXN0ZW1zLCByZXBsYWNlIENLX1BPTEwgd2l0aCBSRENISy4K LQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjRuZXRuZHggS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCi0JIktGTEFHUz0kKEtGTEFHUykgLXgyLjMgLUROT1JFTkFNRSAtRE5PU1lNTElO SyIgXAotCSJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIC14Mi4zIiBcCi0JIkxJQlM9LWxkaXIgLWxj ZnAgJChMSUJTKSIKLQotc2NvLW9kdDMwOgotCUBlY2hvIFNDTyBPRFQgMy4wCi0JJChNQUtFKSAi TUFLRT0kKE1BS0UpIiBzY28zMnY0bmV0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJL RkxBR1M9JChLRkxBR1MpIC1ET0RUMzAiCi0KLSNTQ08gT3BlblNlcnZlciA1LjAgKFNDTyBVTklY IDMuMnY1LjApIHdpdGggU0NPIGRldmVsb3BtZW50IHRvb2xzLCBubyBUQ1AvSVAuCi0jU0NPIE9T UjUgaXMgbXVjaCBtb3JlIGxpa2Ugc3RhbmRhcmQgU3lzdGVtIFYgdGhhbiBwcmV2aW91cyBTQ08g cmVsZWFzZXMuCi0jVGhlIFNDTyBkZXZlbG9wbWVudCB0b29scyBpbmNsdWRlIFRDUC9JUCwgc28g dGhpcyB0YXJnZXQgaXMgb25seSBmb3IgY3JlYXRpbmcKLSNhcnRpZmljaWFsbHkgbGltaXRlZCB2 ZXJzaW9ucyBvZiBrZXJtaXQgcmVxdWlyZWQgYnkgc2l0ZSBwb2xpY3kgcmF0aGVyIHRoYW4KLSN0 aGUgb3BlcmF0aW5nIHN5c3RlbS4gIE5PU1lTTE9HIGlzIGluY2x1ZGVkIGJlY2F1c2Ugc3lzbG9n KCkgcmVxdWlyZXMgdGhlCi0jc29ja2V0cyBsaWJyYXJ5Lgotc2NvMzJ2NTAwOgotCUBlY2hvIE1h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIE9wZW5TZXJ2ZXIgUmVsZWFzZSA1Li4uCi0J JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLU8g LURESVJFTlQgLURIREJVVUNQIC1EU1ZSNCAtRENLX1NDT1Y1IC1EQ0tfUlRTQ1RTIFwKLQktRENL X0NVUlNFUyAtRENLX1dSRUZSRVNIIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwK LQktRE5PR0VUVVNFUlNIRUxMIC1ETk9MU1RBVCAtRE5PTElOS0JJVFMgLUROT1NZU0xPRyBcCi0J JChLRkxBR1MpIiBcCi0JIkxJQlM9LWxjdXJzZXMgJChMSUJTKSIgIkxOS0ZMQUdTPSQoTE5LRkxB R1MpIgotCi1zY28zMnY1OgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgIktGTEFHUz0kKEtGTEFH UykiIHNjbzMydjUwMAotCi0KLSNTQ08gT3BlblNlcnZlciA1LjAgd2l0aCBuZXR3b3JraW5nLCBT Q08gZGV2ZWxvcG1lbnQgdG9vbHMuCi0jTmV0d29ya2luZyBsaWJyYXJpZXMgYXJlIG5vdyBwcm92 aWRlZCB3aXRoIHRoZSBPUy4KLXNjbzMydjUwMG5ldDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIFNDTyBPcGVuU2VydmVyIFJlbGVhc2UgNS4uLgotCSQoTUFLRSkgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1PIC1ERElSRU5UIC1ESERC VVVDUCAtRFNWUjQgLURDS19TQ09WNSAtRENLX1JUU0NUUyBcCi0JLURDS19DVVJTRVMgLURDS19X UkVGUkVTSCAtRENLX05FV1RFUk0gLURTRUxFQ1QgLURTRUxFQ1RfSCBcCi0JLUROT0dFVFVTRVJT SEVMTCAtRE5PTFNUQVQgLUROT0xJTktCSVRTIC1EVENQU09DS0VUIFwKLQktRE5PX0ROU19TUlYg JChLRkxBR1MpIiBcCi0JIkxJQlM9LWxjdXJzZXMgLWxzb2NrZXQgJChMSUJTKSIgIkxOS0ZMQUdT PSQoTE5LRkxBR1MpIgotCi1zY28zMnY1bmV0OgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgIktG TEFHUz0kKEtGTEFHUykiIHNjbzMydjUwMG5ldAotCi0jU0NPIE9wZW5TZXJ2ZXIgNS4wIHdpdGgg bmV0d29ya2luZyBhbmQgT3BlblNTTCwgU0NPIGRldmVsb3BtZW50IHRvb2xzLgotI05ldHdvcmtp bmcgbGlicmFyaWVzIGFyZSBub3cgcHJvdmlkZWQgd2l0aCB0aGUgT1MuCi1zY28zMnY1MDBuZXQr c3NsOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIE9TUjUgd2l0aCBP cGVuU1NMLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IkNGTEFHUz0gLU8gLURESVJFTlQgLURIREJVVUNQIC1EU1ZSNCAtRENLX1NDT1Y1IC1EQ0tfUlRT Q1RTIFwKLQktRENLX0NVUlNFUyAtRENLX1dSRUZSRVNIIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAt RFNFTEVDVF9IIFwKLQktRE5PR0VUVVNFUlNIRUxMIC1ETk9MU1RBVCAtRE5PTElOS0JJVFMgLURU Q1BTT0NLRVQgXAotCS1ETk9fRE5TX1NSViAtRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMIC1E Q0tfVFJJR0dFUiBcCi0JJChTU0xJTkMpICQoU1NMTElCKSAkKEtGTEFHUykiIFwKLQkiTElCUz0k KFNTTExJQikgLWxjdXJzZXMgLWxzb2NrZXQgLWxzc2wgLWxjcnlwdG8gJChMSUJTKSIgXAotCSJM TktGTEFHUz0kKExOS0ZMQUdTKSIKLQotI1NDTyBPcGVuU2VydmVyIDUuMCB3aXRoIGdjYywgbm8g bmV0d29ya2luZy4KLSNOb3RlOiBOT1NZU0xPRyByZXF1aXJlZCBmb3Igbm9uLW5ldCBlbnRyaWVz IGJlY2F1c2UgaXQgcmVxdWlyZXMgPHNvY2tldC5oPgotc2NvMzJ2NTAwZ2NjOgotCUBlY2hvIFVz aW5nIGdjYy4uLgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwQ0M9Z2NjIENDMj1n Y2MgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUz0gJChLRkxBR1MpIgotCi0j U0NPIE9wZW5TZXJ2ZXIgNS4wIHdpdGggbmV0d29ya2luZywgZ2NjLgotc2NvMzJ2NTAwbmV0Z2Nj OgotCUBlY2hvIFRDUC9JUCBuZXR3b3JraW5nIGFkZGVkIC0gdXNpbmcgZ2NjLi4uCi0JJChNQUtF KSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDBuZXQgQ0M9Z2NjIENDMj1nY2MgXAotCUtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUz0kKEtGTEFHUykiCi0KLSNTQ08gT3BlblNlcnZlciA1 LjAgd2l0aCBuZXR3b3JraW5nLCBnY2MsIGVsZi4KLXNjbzMydjUwMG5ldGdjY2VsZjoKLQlAZWNo byBUQ1AvSVAgbmV0d29ya2luZyBhZGRlZCAtIHVzaW5nIGdjYywgZHluYW1pYyBlbGYgbGlicmFy eQotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0ICJDQz1nY2MiICJDQzI9Z2Nj IiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTPS1PMyAtYmVsZiIgIkxOS0ZM QUdTPS1iZWxmIgotCi1zY28zMnY1MDI6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1 MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNDT19PU1I1MDIgJChL RkxBR1MpIgotCi0jU0NPIE9wZW5TZXJ2ZXIgNS4wLjIgd2l0aCBuZXR3b3JraW5nLCBTQ08gZGV2 ZWxvcG1lbnQgdG9vbHMuCi1zY28zMnY1MDJuZXQ6Ci0JQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcg YWRkZWQuLi4KLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMG5ldCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1iIGVsZiAtRFNDT19PU1I1MDIgJChLRkxBR1Mp IgotCi0jU0NPIE9wZW5TZXJ2ZXIgNS4wLjQgKFNDTyBVTklYIDMuMnY1LjAuNCkgd2l0aCBTQ08g ZGV2ZWxvcG1lbnQgdG9vbHMuCi0jTGlrZSA1LjAsIGJ1dCBhZGRzIGhpZ2ggc2VyaWFsIHNwZWVk cy4gIEZpcnN0IFBPU0lYLWJhc2VkIFNDTyB2ZXJzaW9uLgotI05vdGU6IHRoZSAtTyBmbGFnIGlz IGRlbGliZXJhdGVseSBvbWl0dGVkIGZvciAvYmluL2NjICg9IC91c3IvY2NzL2Jpbi9jYykuCi1z Y28zMnY1MDQ6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gT3BlblNl cnZlciBSZWxlYXNlIDUuMC40Li4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCi0JIkNGTEFHUz0gLURESVJFTlQgLURIREJVVUNQIC1EU1ZSNCAtRENLX1NDT1Y1 IC1EQ0tfUlRTQ1RTIFwKLQktRFNDT19PU1I1MDQgLWIgZWxmIC1EUE9TSVggXAotCS1EQ0tfQ1VS U0VTIC1EQ0tfV1JFRlJFU0ggLURDS19ORVdURVJNIC1EU0VMRUNUIC1EU0VMRUNUX0ggXAotCS1E Tk9HRVRVU0VSU0hFTEwgLUROT0xTVEFUIC1ETk9MSU5LQklUUyAtRE5PU1lTTE9HICQoS0ZMQUdT KSIgXAotCSJMSUJTPS1sY3Vyc2VzICQoTElCUykiICJMTktGTEFHUz0kKExOS0ZMQUdTKSIKLQot I1NDTyBPcGVuU2VydmVyIDUuMC40IHdpdGggZ2NjLCBubyBuZXR3b3JraW5nLgotc2NvMzJ2NTA0 Z2NjOgotCUBlY2hvIFVzaW5nIGdjYy4uLgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2 NTA0ICJDQz1nY2MiICJDQzI9Z2NjIiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZM QUdTPSAkKEtGTEFHUykiCi0KLSNTQ08gT3BlblNlcnZlciA1LjAuNCB3aXRoIG5ldHdvcmtpbmcu Ci0jU0NPIGRldmVsb3BtZW50IHRvb2xzICgvYmluL2NjID0gL3Vzci9jY3MvYmluL2NjKS4KLSNP cHRpbWl6YXRpb24gZGVsaWJlcmF0ZWx5IHN1cHByZXNzZWQuCi1zY28zMnY1MDRuZXQ6Ci0JQGVj aG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gT3BlblNlcnZlciBSZWxlYXNlIDUu MC40Li4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNG TEFHUz0gLURESVJFTlQgLURIREJVVUNQIC1EU1ZSNCAtRENLX1NDT1Y1IC1EQ0tfUlRTQ1RTIFwK LQktRENLX0NVUlNFUyAtRENLX1dSRUZSRVNIIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVD VF9IIFwKLQktRE5PR0VUVVNFUlNIRUxMIC1ETk9MU1RBVCAtRE5PTElOS0JJVFMgLURUQ1BTT0NL RVQgXAotCS1iIGVsZiAtRFNDT19PU1I1MDQgLURQT1NJWCAtRE5PX0ROU19TUlYgJChLRkxBR1Mp IiBcCi0JIkxJQlM9LWxjdXJzZXMgLWxzb2NrZXQgJChMSUJTKSIgIkxOS0ZMQUdTPSQoTE5LRkxB R1MpIgotCi0jU0NPIE9wZW5TZXJ2ZXIgNS4wLjQgd2l0aCBuZXR3b3JraW5nLCBnY2MuCi1zY28z MnY1MDRuZXRnY2M6Ci0JQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcgYWRkZWQgLSB1c2luZyBnY2Mu Li4KLQlAZWNobyBJZiBnY2MgY3Jhc2hlcyBvbiBja3dhcnQuYyB0aGVuIGJ1aWxkIGl0IGJ5IGhh bmQ6Ci0JQGVjaG8gIiBnY2MgLW8gd2FydCAtRENLX1NDT1Y1IGNrd2FydC5jIgotCSQoTUFLRSkg Ik1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0ICJDQz1nY2MiICJDQzI9Z2NjIiBcCi0JS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTPS1EU0NPX09TUjUwNCAtRFBPU0lYICQoS0ZMQUdT KSIKLQotI1NDTyBPcGVuU2VydmVyIDUuMC40IHdpdGggbmV0d29ya2luZywgZ2NjLCBlbGYuCi1z Y28zMnY1MDRuZXRnY2NlbGY6Ci0JQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcgYWRkZWQgLSB1c2lu ZyBnY2MsIGR5bmFtaWMgZWxmIGxpYnJhcnkKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMy djUwMG5ldCAiQ0M9Z2NjIiAiQ0MyPWdjYyIKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK LQkiS0ZMQUdTPS1EU0NPX09TUjUwNCAtRFBPU0lYIC1PMyAtYmVsZiAkKEtGTEFHUykiIFwKLQlM TktGTEFHUz0iLWJlbGYiCi0KLSNTQ08gT3BlblNlcnZlciA1LjAuNSAoU0NPIFVOSVggMy4ydjUu MC41KSB3aXRoIFNDTyAvYmluL2NjLgotI0xpa2UgNS4wLCBidXQgYWRkcyBoaWdoIHNlcmlhbCBz cGVlZHMuICBGaXJzdCBQT1NJWC1iYXNlZCBTQ08gdmVyc2lvbi4KLSNZb3UgbWlnaHQgaGF2ZSB0 byBhZGQgIkxJQlM9LWx0aW5mbyIgKHNvbWUgZG8sIHNvbWUgZG9uJ3QpLgotc2NvMzJ2NTA1Ogot CSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAotCSJLRkxBR1M9LURTQ09fT1NSNTA1IC1ETk9TSEFET1cgLWIgZWxmIC1EUE9TSVggJChL RkxBR1MpIgotCi0jU0NPIE9wZW5TZXJ2ZXIgNS4wLjUgKFNDTyBVTklYIDMuMnY1LjAuNSkgd2l0 aCBTQ08gVURLLgotI1RoaXMgb25lIGNhbid0IHNlZSB0aGUgaGlnaCBzZXJpYWwgc3BlZWRzIGFu ZCBhbnl0aGluZyB0byBkbyB3aXRoIG1vZGVtCi0jc2lnbmFscyBkb2Vzbid0IHdvcmsgYmVjYXVz ZSBVS0QgY2MgaGFzIGl0cyBvd24gYWx0ZXJuYXRpdmUgdW5pdmVyc2Ugb2YKLSNoZWFkZXIgZmls ZXMuCi1zY28zMnY1MDV1ZGs6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDAgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNDT19PU1I1MDUgLUREQ0xUSU1F VkFMIC1ETk9TSEFET1cgLWIgZWxmIC1EUE9TSVggJChLRkxBR1MpIgotCi0jU0NPIE9wZW5TZXJ2 ZXIgNS4wLjUgd2l0aCBuZXR3b3JraW5nLCBTQ08gL2Jpbi9jYy4KLSNTZWUgY29tbWVudHMgd2l0 aCBzY28zMnY1MDUgdGFyZ2V0cy4KLXNjbzMydjUwNW5ldDoKLQlAZWNobyBUQ1AvSVAgbmV0d29y a2luZyBhZGRlZC4uLgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURTQ09fT1NSNTA1IC1ETk9TSEFET1cg LWIgZWxmIC1EUE9TSVggJChLRkxBR1MpIgotCi0jU0NPIE9wZW5TZXJ2ZXIgNS4wLjUgd2l0aCBu ZXR3b3JraW5nIGFuZCBPcGVuU1NMLCBTQ08gL2Jpbi9jYy4KLSNTZWUgY29tbWVudHMgd2l0aCBz Y28zMnY1MDUgdGFyZ2V0cy4KLXNjbzMydjUwNW5ldCtzc2w6Ci0JQGVjaG8gVENQL0lQIG5ldHdv cmtpbmcgYW5kIE9wZW5TU0wgYWRkZWQuLi4KLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMy djUwMG5ldCtzc2wgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNDT19P U1I1MDUgLUROT1NIQURPVyAtYiBlbGYgLURQT1NJWCAkKEtGTEFHUykgIiBcCi0JIkxJQlM9JChT U0xMSUIpIC1sY3Vyc2VzIC1sc29ja2V0IC1sc3NsIC1sY3J5cHRvICQoTElCUykiIFwKLQkiTE5L RkxBR1M9JChMTktGTEFHUykiCi0KLSNTQ08gT3BlblNlcnZlciA1LjAuNSB3aXRoIG5ldHdvcmtp bmcsIFNDTyBVREsuCi0jU2VlIGNvbW1lbnRzIHdpdGggYWJvdmUgc2NvMzJ2NTA1IHRhcmdldHMu Ci1zY28zMnY1MDV1ZGtuZXQ6Ci0JQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcgYWRkZWQuLi4KLQkk KE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMG5ldCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKLQkiS0ZMQUdTPS1EU0NPX09TUjUwNSAtRERDTFRJTUVWQUwgLUROT1NIQURPVyAtYiBl bGYgLURQT1NJWCAkKEtGTEFHUykiCi0KLSNTQ08gT3BlblNlcnZlciA1LjAuNSB3aXRoIGdjYywg bm8gbmV0d29ya2luZy4KLXNjbzMydjUwNWdjYzoKLQlAZWNobyBVc2luZyBnY2MuLi4KLQkkKE1B S0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMCAiQ0M9Z2NjIiAiQ0MyPWdjYyIgXAotCUtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURTQ09fT1NSNTA1IC1EUE9TSVggLWZ1 bnNpZ25lZC1jaGFyICQoS0ZMQUdTKSIKLQotI1NDTyBPcGVuU2VydmVyIDUuMC41IHdpdGggZ2Nj LCBubyBuZXR3b3JraW5nLCBubyBzaGFkb3cgcGFzc3dvcmRzLgotc2NvMzJ2NTA1eGdjYzoKLQlA ZWNobyBVc2luZyBnY2MuLi4KLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMCAiQ0M9 Z2NjIiAiQ0MyPWdjYyIgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9 LURTQ09fT1NSNTA1IC1ETk9TSEFET1cgLURQT1NJWCAtZnVuc2lnbmVkLWNoYXIgJChLRkxBR1Mp IgotCi0jU0NPIE9wZW5TZXJ2ZXIgNS4wLjUgd2l0aCBuZXR3b3JraW5nLCBnY2MuCi1zY28zMnY1 MDVuZXRnY2M6Ci0JQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcgYWRkZWQgLSB1c2luZyBnY2MuLi4K LQlAZWNobyBJZiBnY2MgY3Jhc2hlcyBvbiBja3dhcnQuYyB0aGVuIGJ1aWxkIGl0IGJ5IGhhbmQ6 Ci0JQGVjaG8gIiBnY2MgLW8gd2FydCAtRENLX1NDT1Y1IGNrd2FydC5jIgotCSQoTUFLRSkgIk1B S0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0ICJDQz1nY2MiICJDQzI9Z2NjIiBcCi0JS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNDT19PU1I1MDUgLUROT1NIQURPVyAtRFBP U0lYIC1mdW5zaWduZWQtY2hhciAkKEtGTEFHUykiCi0KLSNlZ2NzIGlzIGp1c3QgbGlrZSBnY2Mg YnV0IGdlbmVyYXRlcyBFTEYgYnkgZGVmYXVsdC4KLSNPciB5b3UgY2FuIGluY2x1ZGUgLW1lbGYg KG5vdCAtYmVsZikgdG8gZm9yY2UgaXQuCi1zY28zMnY1MDVuZXRlZ2NzOgotCSQoTUFLRSkgIk1B S0U9JChNQUtFKSIgIktGTEFHUz0kKEtGTEFHUykiIHNjbzMydjUwNW5ldGdjYyBcCi0JS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfQotCi0jU0NPIE9wZW5TZXJ2ZXIgNS4wLjUgd2l0aCBuZXR3b3Jr aW5nLCBnY2MsIGVsZi4KLXNjbzMydjUwNW5ldGdjY2VsZjoKLQlAZWNobyBUQ1AvSVAgbmV0d29y a2luZyBhZGRlZCAtIHVzaW5nIGdjYywgZHluYW1pYyBlbGYgbGlicmFyeQotCSQoTUFLRSkgIk1B S0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0ICJDQz1nY2MiICJDQzI9Z2NjIiBcCi0JIktGTEFHUz0t RFNDT19PU1I1MDUgLURQT1NJWCAtZnVuc2lnbmVkLWNoYXIgLU8zIC1iZWxmICQoS0ZMQUdTKSIg XAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gTE5LRkxBR1M9Ii1iZWxmIgotCi0jU0NPIE9w ZW5TZXJ2ZXIgNS4wLjYgd2l0aCBTQ08gL2Jpbi9jYy4KLSMgQWRkIC1ERENMVElNRVZBTCB3aGVu IGJ1aWxkaW5nIHdpdGggVURLLgotI0xpa2UgNS4wLjUuICAgSU1QT1JUQU5UOiBVc2Ugc2NvMzJ2 NTA2YSB0YXJnZXQgZm9yIDUuMC42YS4KLXNjbzMydjUwNjoKLQkkKE1BS0UpICJNQUtFPSQoTUFL RSkiIHNjbzMydjUwMCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EU0NP X09TUjUwNSAtRFNDT19PU1I1MDYgLWIgZWxmIC1EUE9TSVggJChLRkxBR1MpIgotCi0jU0NPIE9w ZW5TZXJ2ZXIgNS4wLjYgd2l0aCBuZXR3b3JraW5nLCBTQ08gL2Jpbi9jYy4KLSMgQWRkIC1ERENM VElNRVZBTCB3aGVuIGJ1aWxkaW5nIHdpdGggVURLLgotIyBJTVBPUlRBTlQ6IFVzZSBzY28zMnY1 MDZhIHRhcmdldCBmb3IgNS4wLjZhLgotc2NvMzJ2NTA2bmV0OgotCUBlY2hvIFRDUC9JUCBuZXR3 b3JraW5nIGFkZGVkLi4uCi0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDBuZXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNDT19PU1I1MDUgLURTQ09fT1NS NTA2IC1iIGVsZiAtRFBPU0lYICQoS0ZMQUdTKSIKLQotI1NDTyBPcGVuU2VydmVyIDUuMC42YSwg bm8gbmV0d29ya2luZywgU0NPIGRldmVsb3BtZW50IHRvb2xzLgotI1RoaXMgb25lIGhhcyBwYXRj aGVkIHNpbyBkcml2ZXJzIHRoYXQsIGZvciB0aGUgZmlyc3QgdGltZSwKLSNhY3R1YWxseSBoYW5k bGUgbW9kZW0gc2lnbmFscyBjb3JyZWN0bHkuCi0jIEFkZCAtRERDTFRJTUVWQUwgd2hlbiBidWls ZGluZyB3aXRoIFVESy4KLXNjbzMydjUwNmE6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28z MnY1MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNDT19PU1I1MDUg LURTQ09fT1NSNTA2IC1EU0NPX09TUjUwNkEgLURORUVETURNREVGUyBcCi0JLWIgZWxmIC1EUE9T SVggJChLRkxBR1MpIgotCi0jU0NPIE9wZW5TZXJ2ZXIgNS4wLjZhIHdpdGggbmV0d29ya2luZywg U0NPIGRldmVsb3BtZW50IHRvb2xzLgotIyBBZGQgLUREQ0xUSU1FVkFMIHdoZW4gYnVpbGRpbmcg d2l0aCBVREsuCi1zY28zMnY1MDZhbmV0OgotCUBlY2hvIFRDUC9JUCBuZXR3b3JraW5nIGFkZGVk Li4uCi0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDBuZXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNDT19PU1I1MDUgLURTQ09fT1NSNTA2IC1EU0NPX09T UjUwNkEgLURORUVETURNREVGUyBcCi0JLWIgZWxmIC1EUE9TSVggJChLRkxBR1MpIgotCi0jU0NP IE9wZW5TZXJ2ZXIgNS4wLjcsIG5vIG5ldHdvcmtpbmcsIFNDTyBkZXZlbG9wbWVudCB0b29scy4K LSNBZGRzIGZsYWdzIHRvIG1ha2UgUFRZIGFuZCBTU0ggY29tbWFuZHMgd29yay4gIFRoZXNlIGhh dmUgYmVlbiB0ZXN0ZWQKLSNvbmx5IGluIDUuMC43IGJ1dCBwcm9iYWJseSB0aGV5IGNhbiBhbHNv IGJlIGFkZGVkIHRvIGVhcmxpZXIgT1NSNSB0YXJnZXRzLgotc2NvMzJ2NTA3OgotCSQoTUFLRSkg Ik1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJL RkxBR1M9LURTQ09fT1NSNTA1IC1EU0NPX09TUjUwNiAtRFNDT19PU1I1MDcgLURORUVETURNREVG UyBcCi0JLURIQVZFX1BUU05BTUUgLURIQVZFX1BUTVggLURIQVZFX0dSQU5UUFQgXAotCS1iIGVs ZiAtRFBPU0lYICQoS0ZMQUdTKSIKLQotI1NDTyBPcGVuU2VydmVyIDUuMC43IGFzIGFib3ZlIGJ1 dCB3aXRoIG5ldHdvcmtpbmcuCi1zY28zMnY1MDduZXQ6Ci0JQGVjaG8gVENQL0lQIG5ldHdvcmtp bmcgYWRkZWQuLi4KLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMG5ldCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EU0NPX09TUjUwNSAtRFNDT19PU1I1MDYg LURTQ09fT1NSNTA3IC1ETkVFRE1ETURFRlMgXAotCS1ESEFWRV9QVFNOQU1FIC1ESEFWRV9QVE1Y IC1ESEFWRV9HUkFOVFBUIFwKLQktYiBlbGYgLURQT1NJWCAkKEtGTEFHUykiCi0KLSNTQ08gT3Bl blNlcnZlciA2IChuZXcgdGFyZ2V0IDMwIEphbiAyMDA2KQotc2NvX29zcjYwMCBzY282MDA6Ci0J QGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gT3BlblNlcnZlciA2LjAuMC4u LgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9 IC1PIC1ERElSRU5UIC1ESERCVVVDUCAtRFNWUjQgLURDS19TQ09WNSAtRENLX1JUU0NUUyBcCi0J LURDS19DVVJTRVMgLURDS19XUkVGUkVTSCAtRENLX05FV1RFUk0gLURTRUxFQ1QgLURTRUxFQ1Rf SCBcCi0JLUROT0dFVFVTRVJTSEVMTCAtRE5PTFNUQVQgLUROT0xJTktCSVRTIC1EVENQU09DS0VU IFwKLQktRE5PX0ROU19TUlYgLURTQ09fT1NSNTA1IC1EU0NPX09TUjUwNiAtRFNDT19PU1I1MDcg LURORUVETURNREVGUyBcCi0JLURIQVZFX1BUU05BTUUgLURIQVZFX1BUTVggLURIQVZFX0dSQU5U UFQgLUREQ0xUSU1FVkFMIFwKLQktRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJ VFM9NjQgXAotCS1EU09DS09QVF9UPXNvY2tsZW5fdCAtREdTT0NLTkFNRV9UPXNpemVfdCAtREdQ RUVSTkFNRV9UPXNpemVfdCBcCi0JLURIRVJBTEQ9XCJcXFwiIFNDTyBPcGVuU2VydmVyIGB1bmFt ZSAtdmBcXFwiXCIgXAotCS1iIGVsZiAtRFBPU0lYICQoS0ZMQUdTKSIgXAotCSJMSUJTPS1sY3Vy c2VzIC1sc29ja2V0ICQoTElCUykiICJMTktGTEFHUz0kKExOS0ZMQUdTKSIKLQotI1RhbmR5IDE2 LzYwMDAgd2l0aCBYZW5peCAzLjAgKDE2IGJpdHMpCi0jQy1LZXJtaXQgNy4wIChhbmQgbGF0ZXIp IGRvIG5vdCBidWlsZCBoZXJlOyAidG9vIG1hbnkgZGVmaW5lcyIuCi0jQWRkIG1vcmUgLUROT3h4 eCBvcHRpb25zIHRvIHJlbW92ZSBmZWF0dXJlcyBpZiBwcm9ncmFtIHdvbid0IGxvYWQuCi0jU3Vj Y2Vzc2Z1bCBvcGVyYXRpb24gaXMgYSBmdW5jdGlvbiBvZiBwcm9ncmFtIHNpemUsIHBoeXNpY2Fs IG1lbW9yeSwKLSNhdmFpbGFibGUgc3dhcCBzcGFjZSwgZXRjLiAgVGhlIGZvbGxvd2luZyBzdHJp cHBlZC1kb3duIGNvbmZpZ3VyYXRpb24KLSNzZWVtcyB0byB3b3JrIG9uIG1vc3QgVGFuZHkgNjAw MHMuICBOT1RFOiAiLSsiIG1lYW5zIGFsbG93IGxvbmcgdmFyaWFibGUKLSNuYW1lcywgbmVlZGVk IGZvciBDLUtlcm1pdCA2LjAgYmVjYXVzZSBzb21lIGlkZW50aWZpZXJzIGFyZSBub3QgdW5pcXVl Ci0jd2l0aGluIHRoZSBmaXJzdCBzaXggY2hhcmFjdGVycy4KLXRyczE2OgotCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFRhbmR5IDE2LzYwMDAsIFhlbml4IDMuMC4uLicKLQkk KE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLSsg LURBVFRTViAtRFRSUzE2IC1ETk9NS0RJUiAtRERDTFBPUEVOIC1EQ0tfQ1VSU0VTIFwKLQktRE5P REVCVUcgLUROT1RMT0cgLUROT0hFTFAgLUROT1NDUklQVCAtRE5PQ1NFVFMgLUROT0lLU0QgXAot CS1ETk9SRURJUkVDVCAtRE5PU1lTTE9HIC1ETk9QVVRFTlYgLUROT1JFQUxQQVRIIC1ETk9MRUFS TiBcCi0JJChLRkxBR1MpIC1PIiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIiAiTE5LRkxBR1Mg PSAtKyAtbiAtcyIKLQotIyBRTlggNC4yMSBhbmQgYWJvdmUsIDMyLWJpdCB2ZXJzaW9uLCBXYXRj b20gQzMyIDEwLjYsIGZ1bGx5IGNvbmZpZ3VyZWQsCi0jIGV4Y2VwdCBubyBqb2IgY29udHJvbCBi ZWNhdXNlIFFOWCA0LnggZG9lcyBub3Qgc3VwcG9ydCBpdC4gIE5ldyBOQ1VSU0VTCi0jIGxpYnJh cnkgdXNlZCBpbnN0ZWFkIG9mIENVUlNFUy4KLSMKLSMgLU9hdHggb3B0aW1pemVzIHRvIGZhdm9y IHNwZWVkIG92ZXIgc2l6ZTogbG9vcCBvcHRpbWl6YXRpb24sIGlubGluZSBmbidzLgotIyAtT3Mg ZmF2b3JzIHNpemUgb3ZlciBzcGVlZC4gIFNhdmVzIDMwLTQwSyBvdXQgb2YgYWJvdXQgMS43NU0u Ci0jIC0zciA9IGdlbmVyYXRlIDM4NiBjb2RlIHdpdGggcmVnaXN0ZXItYmFzZWQgYXJnIHBhc3Np bmcuCi0jIC0zcyA9IGdlbmVyYXRlIDM4NiBjb2RlIHdpdGggc3RhY2stYmFzZWQgYXJnIHBhc3Np bmcuCi0jIC1tcyA9IHNlcGFyYXRlIGNvZGUgJiBkYXRhIDRHQiBzZWdtZW50cyAoMzItYml0IGJ1 aWxkcyBvbmx5KS4KLSMgLW1mID0gZmxhdCBtZW1vcnkgbW9kZWwgY29kZStkYXRhIGluIG9uZSA0 R0Igc2VnbWVudCAoZGl0dG8pLgotIyAtemMgPSBwbGFjZSBsaXRlcmFsIHN0cmluZ3MgaW4gY29k ZSBzZWdtZW50LgotIyAtTjRNID0gQmlnIHN0YWNrIChpbmNyZWFzZSB0aGUgZGlnaXQgdXBvbiBT SUdTRUdWcyBhdCBydW50aW1lKS4KLSMgY2hhcnMgYXJlIHVuc2lnbmVkIGJ5IGRlZmF1bHQgKC1q IG1ha2VzIHRoZW0gc2lnbmVkIGJ5IGRlZmF1bHQpLgotIyAtTk9VVUNQIGlzIGluY2x1ZGVkIGJl Y2F1c2UgUU5YIGRvZXNuJ3QgdXNlIGl0LgotIyBBZGQgdGhlc2UgdG8gdGhlIGVuZCBpZiB5b3Ug bGlrZSBidXQgdGhleSBkdW1wIGNvcmUgb24gbXkgUU5YIDQuMjUgc3lzdGVtOgotIwotIwlAd2Vy bWl0IC1oID51c2UucW54Ci0jCUB1c2Vtc2cgd2VybWl0IHVzZS5xbngKLSMJQHJtIHVzZS5xbngK LSMKLSMgSWYgeW91IGdldCB3YXJuaW5ncyBhYm91dCBIRUFERVIgb3IgQ19JTiBhZGQgLUROT19E TlNfU1JWLgotIyBPSyAyMDExLzA2LzE0Ci1xbngzMjoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBRTlggNC4yeCwgMzItYml0Li4uJwotCSQoTUFLRSkgeGVybWl0IFwKLQki TE5LRkxBR1MgPSAtTjRNIC0zciIgXAotCSJDRkxBR1MgPSAtbXMgLTNyIC1EUU5YIC1EVENQU09D S0VUIC1EQ0tfQ1VSU0VTIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1EQ0tfV1JFRlJFU0ggLURDS19S RURJUiAtRFNFTEVDVCAtRFNFTEVDVF9IIC1EQ0tfUlRTQ1RTIC1ETk9KQyBcCi0JLUROT0lOSVRH Uk9VUFMgLUROT1VVQ1AgLURDS19BTlNJQyAtRFBJRF9UPXBpZF90IC1PYXR4IC16YyAkKEtGTEFH UykiIFwKLQkiTElCUz0gLWxzb2NrZXQgLWxuY3Vyc2VzIC1sdGVybWNhcCIKLQotIyBBcyBhYm92 ZSBidXQgbm8gbmV0d29ya2luZyBzaW5jZSBzb21lIFFOWCBzeXN0ZW1zIGRvIG5vdCBoYXZlIFRD UC9JUAotIyBpbnN0YWxsZWQsIG9yIHRoZSBUQ1AvSVAgZGV2ZWxvcGVycyBraXQsIHdoaWNoIGlu Y2x1ZGVzIGFsbCB0aGUgbmVlZGVkCi0jIGhlYWRlciBmaWxlcy4gIFRoaXMgZW50cnkgaGFzIG5v dCBiZWVuIHRlc3RlZCBvbiBhIFFOWCBzeXN0ZW0gdGhhdCwgaW4KLSMgZmFjdCwgZG9lcyBub3Qg aGF2ZSBUQ1AvSVAgaW5zdGFsbGVkOyBzb21lIGFkanVzdG1lbnRzIG1pZ2h0IGJlIG5lY2Vzc2Fy eSwKLSMgaW4gcGFydGljdWxhciByZWdhcmRpbmcgdGhlIHVzZSBvZiBzZWxlY3QoKTogaXMgLWxz b2NrZXQgbmVlZGVkLCBjYW4gd2UKLSMgZ2V0IHRoZSBuZWVkZWQgZGVmaW5pdGlvbnMgZnJvbSBu b24tVENQL0lQIGhlYWRlciBmaWxlcyAoRkRfU0VULCBldGMpPwotcW54MzJub25ldDoKLQlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBRTlggNC4yeCwgMzItYml0LCBubyBuZXQu Li4nCi0JJChNQUtFKSB4ZXJtaXQgXAotCSJMTktGTEFHUyA9IC1ONE0gLTNyIiBcCi0JIkNGTEFH UyA9IC0zciAtbXMgLURRTlggLUROT05FVCAtRE5PSUtTRCAtRENLX0NVUlNFUyBcCi0JLURDS19X UkVGUkVTSCAtRENLX1JFRElSIC1EU0VMRUNUIC1EU0VMRUNUX0ggLURDS19SVFNDVFMgLUROT0pD IFwKLQktRE5PVVVDUCAtRENLX0FOU0lDIC1EUElEX1Q9cGlkX3QgLU9hdHggLXpjICQoS0ZMQUdT KSIgXAotCSJMSUJTPSAtbHNvY2tldCAtbG5jdXJzZXMgLWx0ZXJtY2FwIgotCUB3ZXJtaXQgLWgg PnVzZS5xbngKLQlAdXNlbXNnIHdlcm1pdCB1c2UucW54Ci0JQHJtIHVzZS5xbngKLQotIyBTeW5v bnltIGZvciBxbngzMi4KLXFueDoKLQkkKE1BS0UpIHFueDMyICJLRkxBR1M9JChLRkxBR1MpIgot Ci0jIFFOWCA0LjIxIGFuZCBhYm92ZSwgMTYtYml0IHZlcnNpb24sIFdhdGNvbSBDIDguNSAtIGFu ZCBoaWdoZXIgb24gaTI4NiBQQ3MKLSMgYW5kIGFib3ZlLgotIwotIwlJTVBPUlRBTlQ6IERvIG5v dCB1c2UgV2F0Y29tIEMgMTAuNiEhIQotIwlJZiB5b3UgaGF2ZSBpdCBpbnN0YWxsZWQsIGFkZCAi LXY5LjUyIHRvIENGTEFHUyIKLSMKLSMgTk9URTogUU5YIDQuMjMgb253YXJkIGRvZXMgbm90IHdv cmsgb24gMjg2J3MgYW55d2F5LgotIyBTdGFja3NpemUgMjYwMDAsIG9iamVjdHMgbGFyZ2VyIHRo YW4gMTAwIGJ5dGVzIGluIHRoZWlyIG93biBzZWdtZW50cywKLSMgc3RyaW5nIGNvbnN0YW50cyB0 byB0aGUgY29kZXNlZ21lbnQsIGV0Yy4gIEZ1bGx5IGNvbmZpZ3VyZWQgZXhjZXB0IGpvYiBjdHJs LgotIyBUaGlzIGVudHJ5IHdvcmtzIGZvciBidWlsZGluZyBhIDE2LWJpdCBleGVjdXRhYmxlIG9u IGEgMzItYml0IHN5c3RlbSwgYnV0Ci0jIGhhcyBub3QgYmVlbiB0ZXN0ZWQgb24gYSAxNi1iaXQg c3lzdGVtLiAgVXNlcyBsYXJnZSBtZW1vcnkgbW9kZWwsIGxpbmtzCi0jIGV4cGxpY2l0bHkgd2l0 aCBsYXJnZS1tb2RlbCBzb2NrZXRzIGxpYnJhcnkuICBDb3JyZWN0LW1vZGVsIGN1cnNlcyBsaWJy YXJ5Ci0jIGlzIGNob3NlbiBhdXRvbWF0aWNhbGx5LiAgU2VlIGNvbW1lbnQgaW4gcW54MzIgZW50 cnkgYWJvdXQgLUROT1VVQ1AuCi0jCi0jIFdBUk5JTkc6Ci0jCi0jIFdhdGNvbSBDIHByaW9yIHRv IDEwLjYgbmV2ZXIgaGFkIHJlbGVhc2VkIGN1cnNlcyBsaWJyYXJ5LiBUbyBsaW5rIGFnYWluc3Qg aXQsCi0jIHlvdSBtdXN0IG9idGFpbiBwb3J0ZWQgZnJlZSBjdXJzZXMgc291cmNlIGZyb20gZnRw Oi8vZnRwLnFueC5jb20vdXNyL2ZyZWUsCi0jIHRoZW4gY29tcGlsZSBhbmQgYnVpbGQgbGlicmFy eSAoY3Vyc2VzbC5saWIpIGFuZCBwbGFjZSBpdCBpbiAvdXNyL2xpYi4gIFlvdQotIyBtdXN0IGFs c28gY29weSBjdXJzZXMuaCB0byAvdXNyL2luY2x1ZGUuICBCZSBhd2FyZSB0aGF0IGlmIHlvdSBo YXZlIFdhdGNvbQotIyAxMC42IGluc3RhbGxlZCwgeW91IHNob3VsZCBhbHJlYWR5IGhhdmUgY3Vy c2VzLmgsIHdoaWNoIGlzIHRoZSBuZXcgbmN1cnNlcwotIyBsaWJyYXJ5LiBZb3UgbXVzdCBiYWNr IGl0IHVwIGFuZCB1c2UgZnJlZSBjdXJzZXMuaCBpbnN0ZWFkLCBzaW5jZSBuY3Vyc2VzIGlzCi0j IG9ubHkgZm9yIDMyLWJpdCBhcHBsaWNhdGlvbnMgYW5kIHNvbWUgZGVmaW5pdGlvbnMgaW4gdGhl c2UgZmlsZXMgYXJlCi0jIGRpZmZlcmVudCAoZS5nLiwgY2xlYXJvaygpKS4gIEZvciBzYWZldHks IGN1cnNlcyBpcyBub3QgZGVmaW5lZCBpbiBidWlsZC4KLSMKLSMgSW4gNy4wIC1ETk9IRUxQIGFk ZGVkIHRvIGtlZXAgY2t1dXMyLmMgZnJvbSBibG93aW5nIHVwOyBOT0NTRVRTIGFuZCBOT1NQTAot IyBhZGRlZCBiZWNhdXNlIGNrdXVzNCB3YXMgYmxvd2luZyB1cCwgYW5kIE5PRkxPQVQganVzdCBi ZWNhdXNlIGl0IHNlZW1lZAotIyBkYW5nZXJvdXMgKHJlbW92ZSAtRE5PRkxPQVQgaWYgeW91IHdh bnQgdG8gdHJ5IGl0KSwgVGhlIHJlc3VsdCB3b3JrcyBPSwotIyBleGNlcHQgZm9yIHNvbWUgbXlz dGVyaW91cyBiZWVwcyB1cG9uIHRlcm1pbmF0aW9uIG9mIHRoZSB0b3AtbGV2ZWwga2V5d29yZC4K LSMKLSMgVGhpbmdzIHRvIHRyeSBuZXh0IHRpbWUgd2UgZ2V0IGluIHRyb3VibGU6Ci0jICAuIENo YW5nZSAtenQxMDAgdG8gc29tZXRoaW5nIHNtYWxsZXIgbGlrZSAtenQyNQotIyAgLiBDaGFuZ2Ug LU9hdHggdG8gLU9taWxlcmF0IChlbmFibGUgc3RhY2sgY2hlY2tpbmcpCi0jICAuIE1heWJlIGdl dCByaWQgb2YgLXY5LjUyIC0tIGl0J3Mgb25seSB0aGVyZSBiZWNhdXNlIHdlIHdlcmUgd2FybmVk LgotIwotcW54MTY6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgUU5YIDQu MjEsIDE2LWJpdC4uLicKLQkkKE1BS0UpIHhlcm1pdCBcCi0JIkxOS0ZMQUdTID0gLTIgLW1sIC1O IDI2MDAwIiBcCi0JIkNGTEFHUyA9IC0yIC1PYXR4IC16YyAtenQxMDAgLW1sIC1EUU5YIC1EUU5Y MTYgLUROT1VVQ1AgLUROT0hFTFAgXAotCS1EQ0tfUkVESVIgLURTRUxFQ1QgLURTRUxFQ1RfSCAt RE5PSkMgLUROT0dFVFVTRVJTSEVMTCAtRE5PQ1NFVFMgXAotCS12OS41MiAtRFRDUFNPQ0tFVCAt RENLX1JUU0NUUyAtRENLX0FOU0lDIC1ETk9JTklUR1JPVVBTIC1ETk9LVkVSQlMgXAotCS1ETk9S QU5ET00gLUROT0NTRVRTIC1ETk9TUEwgLUROT0ZMT0FUIC1EUElEX1Q9cGlkX3QgJChLRkxBR1Mp IgotCi0jIFFOWCA0LjEsIDE2LWJpdCB2ZXJzaW9uLCB3aXRoIFdhdGNvbSBDIDguNSBvbiBpMjg2 IFBDcyBhbmQgYWJvdmUuCi0jIHN0YWNrc2l6ZSAyNjAwMCwgb2JqZWN0cyBsYXJnZXIgdGhhbiAx MDAgYnl0ZXMgaW4gdGhlaXIgb3duIHNlZ21lbnRzLAotIyBzdHJpbmcgY29uc3RhbnRzIHRvIHRo ZSBjb2Rlc2VnbWVudCwgZXRjLiAgQWRkIC1ETk9VVUNQIGlmIGRlc2lyZWQuCi1xbngxNl80MToK LQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBRTlggNC4xLCAxNi1iaXQuLi4n Ci0JJChNQUtFKSB4ZXJtaXQgXAotCSJMTktGTEFHUyA9IC1taCAtTiAyNjAwMCIgIkNGTEFHUyA9 IC1XYywtZnBjIC1XYywtaiAtRE5PR0VUVVNFUlNIRUxMIFwKLQktV2MsLU9scyAtV2MsLXpkZiAt V2MsLXpjIC1XYywtenQxMDAgLW1oIC1EUE9TSVggLURRTlggLURESVJFTlQgXAotCS1ETk9DWVJJ TCAtRE5PREVCVUcgLUROT01TRU5EIC1ETUlOSURJQUwgLUROT1hNSVQgLUROT1NDUklQVCAtRE5P U1BMIFwKLQktRE5PU0VUS0VZIC1ETk9JTklUR1JPVVBTIC1EUU5YMTYgLURQSURfVD1waWRfdCAk KEtGTEFHUykiCi0KLSMgUU5YIE5ldXRyaW5vIDIgKHB3YWVjaHRsZXJAcW54LmRlKSBjcm9zc2Nv bXBpbGVkIG9uIFFOWCA0LjI1LgotIyBHZXRzIGxvdHMgb2YgY29tcGlsZXIgd2FybmluZ3MuCi1x bnhfbnRvMis6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgUU5YIE5ldXRy aW5vIDIrICcKLQljYyAtbyB3YXJ0IGNrd2FydC5jCi0JJChNQUtFKSB4ZXJtaXQgXAotCSJDQyA9 IHFjYyAtVmdjY19udG94ODYiIFwKLQkiQ0MyID0gcWNjIC1WZ2NjX250b3g4NiIgXAotCSJMTktG TEFHUyA9ICIgXAotCSJDRkxBR1MgPSAtRE5FVVRSSU5PIC1EVENQU09DS0VUIC1EQ0tfQ1VSU0VT IC1ETk9HRVRVU0VSU0hFTEwgXAotCS1ETk9VVUNQIC1EQ0tfV1JFRlJFU0ggLURDS19SRURJUiAt RFNFTEVDVCAtRFNFTEVDVF9IIC1EQ0tfUlRTQ1RTIFwKLQktRE5PSkMgLUROT0lOSVRHUk9VUFMg LURDS19BTlNJQyAtRFBJRF9UPXBpZF90IC1EVU5JWCAtRERJUkVOVCBcCi0JLURNWVJFQUQgLURC U0Q0NE9SUE9TSVggLURTVk9SUE9TSVggLUROREdQV05BTSAkKEtGTEFHUykiIFwKLQkiTElCUz0g LWxzb2NrZXQgLWxuY3Vyc2VzICIKLQotIyBRTlggNiAoPSBOZXV0cmlubyAyLnh4KSBuYXRpdmUg YnVpbGQgKGtpcnVzc2VsQGNpc2NvLmNvbSkuCi1xbng2OgotCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIFFOWDYnCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD1RTlg2IFwKLQki Q0ZMQUdTID0gLURQT1NJWCAtRENLX1BPU0lYX1NJRyAtRE5FVFBUWSAtRE5PQVJST1dLRVlTIFwK LQktRFVTRV9USU9DU0RUUiAtREJJR0JVRk9LIC1EQ0tNQVhPUEVOPTEwMCAtRFJMT0dDT0RFIC1E Tk9SRUFMUEFUSCBcCi0JLURNQVhOQU1MRU49NDggLURRTlg2IC1EVVNFX1RFUk1JTyAtRElOSVRf U1BUWSBcCi0JLURDS19DVVJTRVMgLURDS19XUkVGUkVTSCAtRENLX05FV1RFUk0gLUREWU5BTUlD IFwKLQktRFRDUFNPQ0tFVCAtRE5PR0VUVVNFUlNIRUxMIC1EQ0tfUkVESVIgLURTRUxFQ1QgLURT RUxFQ1RfSCBcCi0JLURDS19SVFNDVFMgLUROT0pDIC1EU1ZPUlBPU0lYIC1EQlNENDRPUlBPU0lY IC1ETk9VVUNQIC1EQ0tfQU5TSUMgXAotCSQoS0ZMQUdTKSAtTyIgXAotCSJMSUJTPSAtbHNvY2tl dCAgLWxuY3Vyc2VzIgotCi0jTUlOSVgvMi4wIDMyIEJpdCB2ZXJzaW9uIGZvciBpbnRlbCAzODYr IHJ1bm5pbmcgdGhlIFBPU0lYLWNvbXBsaWFudCBNSU5JWAotIyB2ZXJzaW9uIDIuMCAoVGhlIGRl ZmluaXRpb24gb2YgZmF0YWwgYXZvaWRzIGEgY29uZmxpY3Qgd2l0aCBhIHN5bWJvbCBieQotIyB0 aGUgc2FtZSBuYW1lIGluIHRoZSBjdXJzZXMgbGlicmFyeS4pIEl0IGlzIGltcG9zc2libGUgdG8g Y29tcGlsZSB3aXRoCi0jIG5ldHdvcmsgc3VwcG9ydCBzaW5jZSBNaW5peCBkb2VzIG5vdCBzdXBw b3J0IEJlcmtlbGV5IHNvY2tldHMuCi0jIE5vdGU6IHVzZSBjaG1lbSBsaWJlcmFsbHkgb24gdGhl IGNvbXBpbGVyIHBhc3NlcywgbWFrZSwgYW5kIHRoZSBmaW5hbAotIyBrZXJtaXQgZXhlY3V0YWJs ZS4gKDMgbWVnYWJ5dGVzIG9mIG1lbW9yeSBmb3IgZWFjaCBpcyBzdWZmaWNpZW50LikKLSMgRnJv bSBUZXJyeSBNY0Nvbm5lbGwsIFN5cmFjdXNlIFUsIGFuZCBXaWxsIFJvc2UuICBXaWxsIHNheXM6 Ci0jIFRoZSBzdGFja3MgZm9yIG1ha2UgYW5kIHNvbWUgY29tcGlsZXIgcGFzc2VzIG5lZWRlZCB0 byBiZSBpbmNyZWFzZWQKLSMgd2l0aCBjaG1lbSBhcyBmb2xsb3dzOgotIyAgIG1ha2UgMU1CCi0j ICAgL3Vzci9saWIvZW1fY2VtY29tLmFuc2kgM01CCi0jICAgL3Vzci9saWIvZW1fb3B0IDFNQgot IyAgIC91c3IvbGliL2kzODYvY2cgMU1CCi0jICAgL3Vzci9saWIvaTM4Ni9hcyAxTUIKLSMgVGhl IGNvbXBpbGVyIHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2FzIHNldCB0byAvdXNyL3RtcCB2aWEgdGhl IFRNUERJUgotIyBlbnZpcm9ubWVudCB2YXJpYWJsZTsgbW9yZSB0aGFuIDFNQiBvZiB0ZW1wb3Jh cnkgc3BhY2Ugd2FzIG5lZWRlZC4KLSMgS2VybWl0IGl0c2VsZiBuZWVkcyBhdCBsZWFzdCAxTUIg b2Ygc3RhY2suCi1taW5peDIwOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IE1JTklYIDIuMC8zODYuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBFWFQ9byBcCi0JIkNGTEFHUz0gIC13byAtRFY3IC1ETUlOSVgyIC1ETUlOSVggLURTSUdf ViAtRF9QT1NJWF9TT1VSQ0UgXAotCS1EQ0tDUFU9XFxcImktMzg2XFxcIiAtRE5PSUtTRCAtRGZh dGFsPW15ZmF0YWwgLURDS19DVVJTRVMgLUROT0xFQVJOIFwKLQktRE5PU1lTTE9HIC1EVVNFX01F TUNQWSAtRE5PUkVBTFBBVEggJChLRkxBR1MpIiAiTElCUz0gLWxjdXJzZXMiCi0KLSNNSU5JWC8z ODYgKFBDIE1pbml4IG1vZGlmaWVkIGJ5IEJydWNlIEV2YW5zIGluIEF1c3RyYWxpYSBmb3IgMzg2 IGFkZHJlc3NpbmcpCi0jIEZvciBNSU5JWCAxLjUrIChidXQgPCAyLjApCi1taW5peDM4NjoKLQlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNSU5JWC8zODYuLi4nCi0JQGVjaG8g J1RPVEFMTFkgVU5URVNURUQhJwotCSQoTUFLRSkgd2VybWl0IEVYVD1zIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EVjcgLURNSU5JWCAtRF9QT1NJWF9TT1VSQ0UgLURO T0xFQVJOICQoS0ZMQUdTKSIKLQotI01JTklYLzM4NiBNaW5peCBtb2RpZmllZCBieSBCcnVjZSBF dmFucyBpbiBBdXN0cmFsaWEgdG8gdXNlIDM4NiBhZGRyZXNzaW5nCi1taW5peDM4NmdjYzoKLQlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNSU5JWC8zODYgd2l0aCBnY2MuLi4n Ci0JQGVjaG8gJ1RPVEFMTFkgVU5URVNURUQhJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gIkNDPWdjYyAtZyAtTyIgIkNDMj1nY2MgLWciIFwKLQkiQ0ZMQUdTPSAt RFY3IC1ETUlOSVggLURfUE9TSVhfU09VUkNFIC1ETk9MRUFSTiAkKEtGTEFHUykiCi0KLSNNSU5J WCAtIDY4ayB2ZXJzaW9uIHdpdGggQUNLIGNvbXBpbGVyLgotIyBJZiB5b3UgaGF2ZSB0cm91Ymxl IGNvbXBpbGluZyBvciBydW5uaW5nIHdhcnQsICJ0b3VjaCB3YXJ0Ii4KLSMgSWYgaXQgc3RpbGwg ZG9lc24ndCB3b3JrLCAidG91Y2ggY2tjcHJvLmMiLgotIyBUaGUgdmVyc2lvbiBjb25maWd1cmVk IGJlbG93IGhhcyBtYW55IGZlYXR1cmVzIHJlbW92ZWQsIGluY2x1ZGluZwotIyB0aGUgVFJBTlNN SVQsIE1TRU5ELCBIRUxQLCBhbmQgU0NSSVBUIGNvbW1hbmRzLCBpbnRlcm5hdGlvbmFsCi0jIGNo YXJhY3RlciBzZXQgc3VwcG9ydCwgYW5kIHRoZSBlbnRpcmUgc2NyaXB0IHByb2dyYW1taW5nIGxh bmd1YWdlLgotIyBCdXQgaXQgZG9lcyBoYXZlIGFuIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2Vy LgotIyBNYWtlIHN1cmUgbWFrZSgxKSBoYXMgKGF0IGxlYXN0KSAxMDAwMDAgY2htZW1vcnkhCi0j IElmIHlvdSBhcmUgdXNpbmcgdGhlIEFtc3RlcmRhbSBDIGNvbXBpbGVyLCB5b3UgbWlnaHQgaGF2 ZSB0byBhZGQgIi1EX19BQ0tfXyIuCi1taW5peDY4azoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBNSU5JWCA2OGsgd2l0aCBBQ0suLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURWNyAtRE1JTklYIC1EX01JTklY IC1EX1BPU0lYX1NPVVJDRSAtRE5PTEVBUk4gXAotCS1ETk9ESUFMIC1ETk9IRUxQIC1ETk9ERUJV RyAtRE5PVExPRyBcCi0JLUROT1NDUklQVCAtRE5PQ1NFVFMgLUROT1NQTCAkKEtGTEFHUykgXAot CS1EUElEX1Q9cGlkX3QgLURVSURfVD11aWRfdCAtREdJRF9UPWdpZF90IC1EU0lHX1YiCi0KLSNN SU5JWCAtIDY4ayB2ZXJzaW9uIHdpdGggYzY4IGNvbXBpbGVyLgotIyBJZiB5b3UgaGF2ZSB0cm91 YmxlIGNvbXBpbGluZyBvciBydW5uaW5nIHdhcnQsICJ0b3VjaCB3YXJ0IiBvcgotIyAidG91Y2gg Y2tjcHJvLmMiLiBDb21waWxpbmcgY2t1ZGlhLmMgKG5vIC1ETk9ESUFMISkgbWlnaHQgZmFpbC4g Oi0oCi0jIEdpdmUgYzY4IDI1MDAwMCBieXRlcyBvZiBzdGFjaytoZWFwOyBtYWtlIHN1cmUgbWFr ZSgxKSBoYXMgYXQgbGVhc3QKLSMgMTAwMDAwIGNobWVtb3J5LiAgT24gYSAxTUIgQXRhcmkgU1Qg dGhpcyBtZWFucyB0aGF0IHRoZSByZWN1cnNpdmUKLSMgY2FsbCBvZiBtYWtlIGZhaWxzIGR1ZSB0 byBtZW1vcnkgc2hvcnRhZ2UuICBUcnkgIm1ha2UgLW4gbWluaXhjNjggPm1ha2VpdCIsCi0jIGZv bGxvd2VkIGJ5ICIuIG1ha2VpdCIuICBPdGhlcndpc2UsIGFzIGFib3ZlLgotbWluaXhjNjg6Ci0J QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTUlOSVggNjhrIHdpdGggYzY4Li4u JwotCSQoTUFLRSkgd2VybWl0ICJDQz0gY2MgLWM2OCIgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCi0JIkNGTEFHUz0gLURWNyAtRE1JTklYIC1EX01JTklYIC1EX1BPU0lYX1NPVVJDRSAtRE5P TEVBUk4gXAotCS1ETk9ESUFMIC1ETk9IRUxQIC1ETk9ERUJVRyAtRE5PVExPRyBcCi0JLUROT1ND UklQVCAtRE5PQ1NFVFMgLUROT1NQTCAkKEtGTEFHUykgXAotCS1EUElEX1Q9cGlkX3QgLURVSURf VD11aWRfdCAtREdJRF9UPWdpZF90IC1EU0lHX1YiCi0KLSNNSU5JWCAtIDY4ayB2ZXJzaW9uIHdp dGggYzY4IGNvbXBpbGVyLgotI0EgdmFyaWF0aW9uIG9uIHRoZSBhYm92ZSB0aGF0IHdhcyByZWNl bnRseSAoU2VwIDk1KSByZXBvcnRlZCB0byB3b3JrLgotbWluaXhjNjhhOgotCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1JTklYIDY4ayB3aXRoIGM2OC4uLicKLQkkKE1BS0Up IHdlcm1pdCAiQ0M9IGNjIC1jNjgiIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxB R1M9IC1EVjcgLURNSU5JWCAtRF9NSU5JWCAtRF9QT1NJWF9TT1VSQ0UgXAotCS1EQ0tfQU5TSUMg LUROT0RFQlVHIC1ETk9UTE9HIC1ETUlOSURJQUwgLURFWFRFTiAtRE1ZQ1VSU0VTIFwKLQktRE5P U0NSSVBUIC1ETk9DU0VUUyAtRE5PU1BMIC1ETk9KQyAtRERJUkVOVCAtRE5PTEVBUk4gXAotCS1E Tk9TRVRLRVkgLUROT0VTQ1NFUSAkKEtGTEFHUykgXAotCS1EUElEX1Q9cGlkX3QgLURVSURfVD11 aWRfdCAtREdJRF9UPWdpZF90IC1EU0lHX1YiCi0KLSNNSVBTIENvbXB1dGVyIFN5c3RlbXMgd2l0 aCBVTUlQUyBSSVNDL09TIDQuNTIgPSBBVCZUIFVOSVggU3lzdGVtIFYgUjMuMC4KLSNSZW1vdmUg LUROT0pDIGlmIGpvYiBjb250cm9sIGNhbiBiZSBzYWZlbHkgdXNlZC4KLW1pcHM6Ci0JQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTUlQUyBSSVNDL09TLi4uJwotCSQoTUFLRSkg d2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtRE1JUFMgLURE SVJFTlQgLURDS19QT0xMIC1ETk9KQyAtRE5PTEVBUk4gLURQSURfVD1pbnQgXAotCS1ER0lEX1Q9 Z2lkX3QgLURVSURfVD11aWRfdCAtaSAtTzE1MDAgJChLRkxBR1MpIgotCi0jQXMgYWJvdmUsIGJ1 dCB3aXRoIFRDUC9JUCBhbmQgZnVsbHNjcmVlbiBzdXBwb3J0LgotbWlwc3RjcGM6Ci0JQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTUlQUyBSSVNDL09TLi4uJwotCSQoTUFLRSkg eGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtRE1JUFMgLURE SVJFTlQgLURDS19QT0xMIC1ETk9KQyBcCi0JLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgLUkvdXNy L2luY2x1ZGUvYnNkIFwKLQktRFBJRF9UPWludCAtREdJRF9UPWdpZF90IC1EVUlEX1Q9dWlkX3Qg LWkgLU8xNTAwICQoS0ZMQUdTKSIgXAotCSJMSUJTID0gLWxjdXJzZXMgLWxic2QiCi0KLSNNb3Rv cm9sYSBEZWx0YSBTeXN0ZW0gVi82OCBSMywgc2lnbmFsKCkgaXMgdm9pZCByYXRoZXIgdGhhbiBp bnQuCi0jVXNlcyBkaXJlbnQuaCBhbmQgSG9uZXkgRGFuQmVyIHV1Y3AuICBTdXBwb3J0cyBUQ1Av SVAuCi0jQWZ0ZXIgYnVpbGRpbmcsIHVzZSAibWNzIC1kIiB0byByZWR1Y2Ugc2l6ZSBvZiB0aGUg ZXhlY3V0YWJsZSBwcm9ncmFtLgotc3Y2OHIzOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIE1vdG9yb2xhIFVOSVggU3lzdGVtIFYvNjggUjMuLi4nCi0JJChNQUtFKSB3ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EU1ZSMyAtRFNWNjgg LURESVJFTlQgLURIREJVVUNQIC1ETk9fRE5TX1NSViAtRFRDUFNPQ0tFVCBcCi0JLUROT1VOSUNP REUgLUROT0xFQVJOIC1EVVNFX01FTUNQWSAkKEtGTEFHUykgLU8iICJMTktGTEFHUyA9IgotCi0j TW90b3JvbGEgRGVsdGEgU3lzdGVtIFYvNjggUjNWNSwgc2lnbmFsKCkgaXMgdm9pZCByYXRoZXIg dGhhbiBpbnQuCi0jVXNlcyBkaXJlbnQuaCBhbmQgSG9uZXkgRGFuQmVyIFVVQ1AuICBTdXBwb3J0 cyBUQ1AvSVAuCi0jQWZ0ZXIgYnVpbGRpbmcsIHVzZSAibWNzIC1kIiB0byByZWR1Y2Ugc2l6ZSBv ZiB0aGUgZXhlY3V0YWJsZSBwcm9ncmFtLgotc3Y2OHIzdjU6Ci0JQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgTW90b3JvbGEgVU5JWCBTeXN0ZW0gVi82OCBSM1Y1JwotCSQoTUFL RSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtRFNWUjMg LURTVjY4IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PX0ROU19TUlYgLURVU0VfTUVNQ1BZIFwKLQkt RFRDUFNPQ0tFVCAtRElOQUREUlggLUROT1VOSUNPREUgLURGTkZMT0FUIC1ETk9MRUFSTiAkKEtG TEFHUykgLU8iIFwKLQkiTE5LRkxBR1MgPSIgIkxJQlMgPSAtbGluZXQgLWxtIgotCi0jTW90b3Jv bGEgTVZNRTE0NyBTeXN0ZW0gVi82OCBSMyBWNS4xLiBSZXF1aXJlcyBnY2MgMi4xIHRvIGNvbXBp bGUuCi0jQWZ0ZXIgYnVpbGRpbmcsIHVzZSAibWNzIC1kIiB0byByZWR1Y2Ugc2l6ZSBvZiB0aGUg ZXhlY3V0YWJsZSBwcm9ncmFtLgotc3Y2OHIzdjUxOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIE1vdG9yb2xhIFVOSVggU3lzdGVtIFYvNjggUjNWNS4xJwotCSQoTUFLRSkg d2VybWl0ICJDQz1nY2MtZGVsdGEiICJDQzI9Z2NjLWRlbHRhIiBcCi0JS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0RF QlVHIC1ETk9fRE5TX1NSViAtRE5PTEVBUk4gXAotCS1ETk9VTklDT0RFIC1ERk5GTE9BVCAtRFNW NjggLURVU0VfTUVNQ1BZICQoS0ZMQUdTKSBcCi0JLU8yIC12IC1mdHJhZGl0aW9uYWwiIFwKLQki TE5LRkxBR1MgPSAtcyAtdiIgIkxJQlMgPSAtbG04ODEgLWxtIgotCi0jTW90b3JvbGEgTVZNRTE0 NyBTeXN0ZW0gVi82OCBSM1Y2LiBkZXJpdmVkIGZyb20gTW90b3JvbGEgRGVsdGEgU3lzdGVtIFIz VjUuCi0jQ2hlY2tlZCBvbiBsYXJnZXIgTW90b3JvbGEgU3lzdGVtIFYvNjggUjNWNiAod2l0aCBO U0UgTmV0d29yayBTZXJ2aWNlcyBFeHQuKQotI0FmdGVyIGJ1aWxkaW5nLCB1c2UgInN0cmlwIiB0 byByZWR1Y2Ugc2l6ZSBvZiB0aGUgZXhlY3V0YWJsZSBwcm9ncmFtLgotIyAiTElCUyA9IC1sbnNs IiByZW1vdmVkIGluIEMtS2VybWl0IDYuMSAtIHB1dCBiYWNrIGlmIG5lZWRlZC4KLSMgIkxJQlMg PSBsbSIgYWRkZWQgaW4gNy4xLzguMCBmb3IgZmxvYXRpbmctcG9pbnQgbWF0aC4KLSMgY2t1dXNy LmMgY2xvYmJlcnMgdGhlIG9wdGltaXplci4KLXN2NjhyM3Y2OgotCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIE1vdG9yb2xhIFVOSVggU3lzdGVtIFYvNjggUjNWNicKLQkkKE1B S0UpIGNrdXVzci4kKEVYVCkgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9 IC1EU1Y2OFIzVjYgLURESVJFTlQgLURIREJVVUNQIC1ETk9MT0dJTiAtRE5PSU5JVEdST1VQUyBc Ci0JLUROT1NZTUxJTksgLUROT1JFRElSRUNUIC1ETk9HRlRJTUVSIC1EVENQU09DS0VUIC1ERENM R0VUQ1dEIC1EU1Y2OCBcCi0JLUROT19ETlNfU1JWIC1ETk9VTklDT0RFIC1ERk5GTE9BVCAtRFNF TEVDVCAtRFVTRV9NRU1DUFkgJChLRkxBR1MpIgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAtRFNWNjhSM1Y2IC1ERElSRU5UIC1ESERC VVVDUCAtRE5PTE9HSU4gLUROT0lOSVRHUk9VUFMgXAotCS1ETk9TWU1MSU5LIC1ETk9SRURJUkVD VCAtRE5PR0ZUSU1FUiAtRFRDUFNPQ0tFVCAtRERDTEdFVENXRCAtRFNWNjggXAotCS1ETk9fRE5T X1NSViAtRE5PVU5JQ09ERSAtREZORkxPQVQgLURTRUxFQ1QgLURVU0VfTUVNQ1BZICQoS0ZMQUdT KSIgXAotCSJMTktGTEFHUyA9IiAiTElCUyA9IC1sbSIKLQotI01vdG9yb2xhIERlbHRhIFN5c3Rl bSBWLzg4IFIzMiwgc2lnbmFsKCkgaXMgdm9pZCByYXRoZXIgdGhhbiBpbnQuCi0jVXNlcyBkaXJl bnQuaCBhbmQgSG9uZXkgRGFuQmVyIHV1Y3AuICBOZWVkcyA8c3lzL3V0aW1lLmg+IGZvciBzZXR0 aW5nCi0jZmlsZSBkYXRlcy4gIFN1cHBvcnRzIFRDUC9JUC4KLSNBZnRlciBidWlsZGluZywgdXNl ICJtY3MgLWQiIHRvIHJlZHVjZSBzaXplIG9mIHRoZSBleGVjdXRhYmxlIHByb2dyYW0uCi1zdjg4 cjMyOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1vdG9yb2xhIFVOSVgg U3lzdGVtIFYvODggUjMyLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAotCSJDRkxBR1MgPSAtRFNWODhSMzIgLURESVJFTlQgLURIREJVVUNQIC1EVENQU09D S0VUIFwKLQktRFNZU1VUSU1FSCAtRENLX0NVUlNFUyAtRE5PR0VUVVNFUlNIRUxMIC1ER1RPRE9O RUFSRyAkKEtGTEFHUykgLU8iIFwKLQkiTElCUz0gLWxjdXJzZXMgLWxyZXNvbHYiICJMTktGTEFH UyA9IC1zIgotCi0jTW90b3JvbGEgRGVsdGEgU3lzdGVtIFYvODggUjQwLiAgSGFzIDxzeXMvdGVy bWlveC5oPiwgcmVndWxhciBCZXJrZWxleQotI3NvY2tldHMgbGlicmFyeSwgaS5lLiBpbi5oIGFu ZCBpbmV0LmggYXJlIG5vdCBtaXNwbGFjZWQgaW4gc3lzIChyYXRoZXIgdGhhbgotI25ldGluZXQg YW5kIGFycGEsIHJlc3BlY3RpdmVseSkuICBVc2VzIEFOU0kgQyBjb25zdHJ1Y3RzLCBhZHZpc29y eSBmaWxlCi0jbG9ja2luZyBvbiBkZXZpY2VzLCBldGMuICBjdXJzZXMgc3VwcG9ydCBhZGRlZC4g IFJlcG9ydGVkbHksIHRoZQotIy91c3IvaW5jbHVkZS9zeXMvdm5vZGUuaCBmaWxlIGhhcyBhIGJ1 ZyB3aGljaCBtdXN0IGJlIGZpeGVkIGJlZm9yZSB0aGlzCi0jbWFrZWZpbGUgZW50cnkgY2FuIHdv cmsgY29ycmVjdGx5LiAgVGhlICJpZiBERUJVRyIgZGlyZWN0aXZlIGF0IGFib3V0IGxpbmUKLSMz MjAgbXVzdCBiZSBjaGFuZ2VkIHRvICJpZmRlZiBERUJVRyIgKFJlcG9ydGVkbHksIHRoaXMgd2Fz IGZpeGVkIGluCi0jaW4gU3lzdGVtIFYvODggUjQuMykuCi0jQWZ0ZXIgYnVpbGRpbmcsIHVzZSAi bWNzIC1kIiB0byByZWR1Y2Ugc2l6ZSBvZiB0aGUgZXhlY3V0YWJsZSBwcm9ncmFtLgotc3Y4OHI0 MDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNb3Rvcm9sYSBVTklYIFN5 c3RlbSBWLzg4IFI0MC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURTVlI0IC1ETU9UU1Y4OFI0IC1ERElSRU5UIC1ESERCVVVD UCAtRFNURVJNSU9YIFwKLQktRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRE5PR0VUVVNFUlNIRUxM IC1ER1RPRE9ORUFSRyAtREZORkxPQVQgXAotCSQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHNvY2tl dCAtbG5zbCAtbGN1cnNlcyAtbHJlc29sdiAtbG0iICJMTktGTEFHUyA9IC1zIgotCi0jQXMgYWJv dmUgYnV0IHdpdGhvdXQgdGhlIGZsb2F0aW5nLXBvaW50IG1hdGggbGlicmFyeS4KLXN2ODhyNDBu bToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNb3Rvcm9sYSBVTklYIFN5 c3RlbSBWLzg4IFI0MC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURTVlI0IC1ETU9UU1Y4OFI0IC1ERElSRU5UIC1ESERCVVVD UCAtRFNURVJNSU9YIFwKLQktRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRE5PR0VUVVNFUlNIRUxM IC1ER1RPRE9ORUFSRyAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxjdXJz ZXMgLWxyZXNvbHYiICJMTktGTEFHUyA9IC1zIgotCi0jQXMgYWJvdmUgYnV0IHdpdGggZmxvYXRp bmctcG9pbnQgbWF0aCBsaWJyYXJ5IHN1cHBvcnQgXGZmcC4uLigpIGZ1bmN0aW9ucwotI2FuZCBT LUV4cHJlc3Npb25zLgotCi0jT2xpdmV0dGkgWC9PUyBSMi4zLCAzLnguCi0jTk9URVM6Ci0jIC4g SWYgeW91IGJ1aWxkIHRoZSBleGVjdXRhYmxlIG9uIDIueCBYL09TLCBpdCB3aWxsIGFsc28gcnVu IG9uIDMueC4KLSMgLiBJZiB5b3UgYnVpbGQgaXQgb24gMy54IFgvT1MsIGl0IHdpbGwgTk9UIHJ1 biBvbiAyLnguCi0jIC4gS2VybWl0IGNhbiBydW4gd2l0aCBubyBwcml2aWxlZ2VzIHVubGVzcyB0 aGUgdXVjcCBsaW5lcyBhcmUgcHJvdGVjdGVkLAotIyAgIGluIHdoaWNoIGNhc2Uga2VybWl0IG11 c3QgYmUgb3duZWQgYnkgdXVjcCB3aXRoIHN1aWQgYml0IHNldDoKLSMgICBjaG93biB1dWNwIGtl cm1pdCA7IGNobW9kIDQxMTEga2VybWl0LgoteG9zMjM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgT2xpdmV0dGkgWC9PUy4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKLQknQ0ZMQUdTPS1PTE0gLURPWE9TIC1EVENQU09DS0VUIC1E SERCVVVDUCAkKEtGTEFHUyknIFwKLQkiTElCUz0iICJMTktGTEFHUz0iCi0KLSNBcyBhYm92ZSwg YnV0IHdpdGggY3Vyc2VzLgoteG9zMjNjOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIE9saXZldHRpIFgvT1Mgd2l0aCBjdXJzZXMuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JJ0NGTEFHUz0tT0xNIC1ET1hPUyAtRFRDUFNPQ0tF VCAtREhEQlVVQ1AgLURDS19DVVJTRVMgJChLRkxBR1MpJyBcCi0JIkxJQlM9LWxjdXJzZXMiICJM TktGTEFHUz0iCi0KLWNrdXVpZDoKLQlAZWNobyAnYnVpbGRpbmcgQy1LZXJtaXQgJChDS1ZFUikg c2V0LVVJRC9zZXQtR0lEIHRlc3QgcHJvZ3JhbXMnCi0JJChDQykgLURBTllCU0QgLURTQVZFRFVJ RCAtbyBja3V1aWQxIGNrdXVpZC5jCi0JJChDQykgLURBTllCU0QgLW8gY2t1dWlkMiBja3V1aWQu YwotCSQoQ0MpIC1EQU5ZQlNEIC1ETk9TRVRSRVUgLW8gY2t1dWlkMyBja3V1aWQuYwotCSQoQ0Mp IC1EQU5ZQlNEIC1EU0VURVVJRCAtRE5PU0VUUkVVIC1vIGNrdXVpZDQgY2t1dWlkLmMKLQkkKEND KSAtbyBja3V1aWQ1IGNrdXVpZC5jCi0JQGVjaG8gJ1JlYWQgdGhlIHRvcCBvZiBja3V1aWQuYyBm b3IgZGlyZWN0aW9ucy4uLmZvciB0ZXN0aW5nJwotCUBlY2hvICd5b3UgbXVzdCBtYWtlIHRoZXNl IHByb2dyYW1zIHNldHVpZCBhbmQgc2V0Z2lkJwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEEg TiBUIEkgUSBVIEkgVCBJIEUgUwotIwotIyBUaGUgZm9sbG93aW5nIGFyZSBhbnRpcXVlIHRhcmdl dHMgZnJvbSBDLUtlcm1pdCA1QSBvciBlYXJsaWVyLiAgVGhleSBoYXZlCi0jIG5vdCBiZWVuIHVw ZGF0ZWQgb3IgdGVzdGVkIGluIHllYXJzLiAgTW9zdCBvZiB0aGVtIHdpbGwgbmVlZCByZWNlbnQg ZmVhdHVyZXMKLSMgZGlzYWJsZWQsIHVzdWFsbHkgd2l0aCBzb21lIGNvbWJpbmF0aW9uIG9mIC1E Tk9VTklDT0RFLCAtRE5PSUtTRCwgLUROT0FOU0ksCi0jIC1ETk9DS0dITkxIT1NULCAtRE5PX0RO U19TUlYsIC1ETk9SRURJUkVDVCwgLUROT1JFQUxQQVRILCAtRE5PQ1VSU0VTLCBldGMuCi0jIFRo ZXkgYXJlIGFsc28gbWlzc2luZyB0aGUgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBidXNpbmVz cy4KLSMgRm9yIGRldGFpbHMgc2VlIGNrdWlucy50eHQgYW5kIGNrY2NmZy50eHQuCi0jCi0jIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCi0KLSNCZXJrZWxleSBVbml4IDIuOCwgMi45IGZvciBQRFAtMTFzIHdp dGggSSZEIHNwYWNlLCBtYXliZSBhbHNvIFVsdHJpeC0xMT8/PwotI0MtS2VybWl0KDVBKSBpcyBz aW1wbHkgdG9vIGxhcmdlIChldmVuIHR1cm5pbmcgb2ZmIGFsbW9zdCBldmVyeSBmZWF0dXJlCi0j YXZhaWxhYmxlKSB0byBydW4gd2l0aG91dCBib3RoIEkmRCBzcGFjZSBwbHVzIG92ZXJsYXlzLiAg VGhlIG9sZCBjb21tZW50Ci0jc3VnZ2VzdGVkIHJ1bm5pbmcgJ3BjYycgYnV0IHRoYXQgd29uJ3Qg aGVscC4gIENoYW5naW5nICdjYycgdG8gJ2NrdXN0ci5zZWQnCi0jd2lsbCBjYXVzZSBhIHN0cmlu ZyBleHRyYWN0aW9uIHRvIGJlIGRvbmUsIHNhdmluZyBEIHNwYWNlIGJ5IG1vdmluZyBzdHJpbmdz Ci0jdG8gYSBmaWxlLgotYnNkMjk6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciAyLjggb3IgMi45QlNELgotCUBlY2hvIFJlYWQgdGhlIG1ha2VmaWxlIGlmIHlvdSBoYXZlIHRy b3VibGUgd2l0aCB0aGlzLi4uCi0JJChNQUtFKSBvdndlcm1pdCBcCi0JIkNGTEFHUz0gLURCU0Qy OSAtRE5PREVCVUcgLUROT1RMT0cgLUROT0NTRVRTIC1ETk9IRUxQIFwKLQktRE5PU0NSSVBUIC1E Tk9TUEwgLUROT1hNSVQgLUROT0RJQUwgJChLRkxBR1MpIiBcCi0JIkxOS0ZMQUdTPSAtaSAtbG5k aXIiICJDQz0gY2MgIiAiQ0MyPSBjYyIKLQotYnNkMjEwOgotCUBlY2hvIFBsZWFzZSB1c2UgY2t1 YnMyLm1hayB0byBidWlsZCBDLUtlcm1pdCAkKENLVkVSKSBmb3IgMi4xMEJTRC4KLQotYnNkMjEx OgotCUBlY2hvIFBsZWFzZSB1c2UgY2t1YnMyLm1hayB0byBidWlsZCBDLUtlcm1pdCAkKENLVkVS KSBmb3IgMi4xMUJTRC4KLQotI0NoYXJsZXMgUml2ZXIgRGF0YSBTeXN0ZW1zIFVuaXZlcnNlIHdp dGggVU5PUyBWZXJzaW9uIDkuMgotY3JkczoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBDaGFybGVzIFJpdmVyIERhdGEgU3lzdGVtcy4uLicKLQltYWtlIHhlcm1pdCBcCi0J IkNGTEFHUyA9IC1EQVRUU1YgLUROT0FOU0kgLURESVJFTlQgLURMT05HRk4gLURUQ1BTT0NLRVQg XAotCS1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVjcFxcXCIgLUROT1NFVFJFVSBcCi0JLURz dXNwZW5kPWtzdXNwZW5kICQoS0ZMQUdTKSAtTyIgIkxOS0ZMQUdTID0iCi0KLSNNaWNyb3BvcnQg U1YvQVQgZm9yIElCTSBQQy9BVCAyODYgYW5kIGNsb25lcywgU3lzdGVtIFYgUjIuCi0jVGhlIC1P IGZsYWcgbWF5IGZhaWwgb24gc29tZSBtb2R1bGVzIChsaWtlIGNrdXVzMi5jKSwgaW4gd2hpY2gg Y2FzZSB5b3UKLSNzaG91bGQgY29tcGlsZSB0aGVtIGJ5IGhhbmQsIG9taXR0aW5nIHRoZSAtTy4g IElmIHlvdSBnZXQgImhhc2ggdGFibGUKLSNvdmVyZmxvdyIsIHRyeSBhZGRpbmcgLUROT0RFQlVH LgotI0Fsc28sIHJlcG9ydGVkbHkgdGhpcyBjb21waWxlcyBiZXR0ZXIgd2l0aCBnY2MgdGhhbiB3 aXRoIGNjLgotbXBzeXN2OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1p Y3JvcG9ydCBTVi9BVCAyODYuLi4nCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1M9IC1EQVRU U1YgLUROT0xFQVJOICQoS0ZMQUdTKSAtTyAtTWwiICJMTktGTEFHUyA9IC1NbCIKLQotI01pY3Jv c29mdCAiWGVuaXgvMjg2IiBlLmcuIGZvciBJQk0gUEMvQVQKLXhlbml4OgotCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFhlbml4LzI4NicKLQkkKE1BS0UpIHdlcm1pdCBcCi0J IkNGTEFHUz0gLURYRU5JWCAtRE5PRklMRUggLUROT0xFQVJOICQoS0ZMQUdTKSAtRHVuaXggLUYg MzAwMCAtaSIgXAotCSJMTktGTEFHUyA9IC1GIDMwMDAgLWkiCi0KLSNQQy9JWCwgSW50ZXJhY3Rp dmUgQ29ycCBTeXN0ZW0gSUlJIGZvciBJQk0gUEMvWFQKLXBjaXg6Ci0JQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgUEMvSVguLi4nCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxB R1M9IC1EUENJWCAtRElTSUlJIC1ETk9MRUFSTiAkKEtGTEFHUykgXAotCS1Ec2RhdGE9c2RhdGF4 IC1PIC1pIiAiTE5LRkxBR1MgPSAtaSIKLQotI0ludGVncmF0ZWQgU29sdXRpb25zIEluYyBWOFMg Vk1FIDY4MDIwCi1pc2k6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciA0LjJC U0Qgb24gSVNJLi4uCi0JJChNQUtFKSB3ZXJtaXQgIkNDID0gY2MiIFwKLQkiQ0ZMQUdTPSAtREJT RDQgLURUQ1BTT0NLRVQgLURJTkFERFJYIC1ERENMUE9QRU4gLURERUJVRyAtRE5PU0VUUkVVIFwK LQktRENLX0NVUlNFUyAtRE5PTEVBUk4gJChLRkxBR1MpIiAiTElCUyA9IC1sY3Vyc2VzIC1sdGVy bWNhcCIKLQotI0ludGVyYWN0aXZlIENvcnAgdmVyc2lvbiBvZiBBVCZUIFN5c3RlbSBJSUkKLSNp czM6ICh2ZXJ5IG9sZCwgcHJvYmFibHkgbm90IHN1ZmZpY2llbnQgZm9yIDVBIG9yIGxhdGVyKQot IwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRlcmFjdGl2ZSBTeXN0ZW0g SUlJLi4uJwotIwltYWtlIHdlcm1pdCAiQ0ZMQUdTID0gLURJU0lJSSAtRGRhdGE9ZGF0YXggLU8g LWkiICJMTktGTEFHUyA9IC1pIgotI1RoZSBmb2xsb3dpbmcgc2hvdWxkIHdvcmssIHVzZSBpdCBp ZiB5b3UgZG9uJ3QgaGF2ZSBnY2MuCi0jVXNlIGlzM2djYyBpZiB5b3UgaGF2ZSBnY2MuCi1pczM6 Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSW50ZXJhY3RpdmUgU3lzdGVt IElJSS4uLicKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUz0gLURJU0lJSSAkKEtGTEFHUykg LURkYXRhPWRhdGF4IC1ETkFQIC1ESERCVVVDUAotCS1ETE9DS19ESVI9XCIvdXNyL3Nwb29sL3V1 Y3BcIiAtRFNJR1RZUD12b2lkIC1PIC1pIiAiTE5LRkxBR1MgPSAtaSIKLQotI0ludGVyYWN0aXZl IFVOSVggU3lzdGVtIFYgUjMsIG5vIG5ldHdvcmsgc3VwcG9ydC4gIFVzZXMgPGRpcmVudC5oPiBh bmQgSG9uZXkKLSNEYW5CZXIgVVVDUC4gIElmIHRoaXMgZW50cnkgZG9lcyBub3QgY29tcGlsZSBj b3JyZWN0bHksIHRyeSBhbnkgb3IgYWxsIG9mIHRoZQotI2ZvbGxvd2luZy4gIFRoZXNlIHN1Z2dl c3Rpb25zIGFsc28gYXBwbHkgbW9yZSBvciBsZXNzIHRvIHRoZSBvdGhlciBpczVyM3h4eAotI2Vu dHJpZXMgdGhhdCBmb2xsb3cgdGhpcyBvbmUuCi0jIC4gUmVtb3ZlIHRoZSBVSURfVCBhbmQgR0lE X1QgZGVmaW5pdGlvbnMsIG9yIGNoYW5nZSB0aGVtIGFzIHJlcXVpcmVkLgotIyAuIENoYW5nZSAt RERJUkVOVCB0byAtRFNESVJFTlQuCi0jIC4gQWRkIC1EU0lHVFlQPXZvaWQuCi0jIC4gUmVtb3Zl IC1nIGZyb20gTE5LRkxBR1MuCi0jIC4gQWRkIC1ETk9BTlNJIHRvIHJlbW92ZSBjb21waWxlciBj b21wbGFpbnRzIGFib3V0IEFOU0kgQyBjb25zdHJ1Y3Rpb25zCi0jIC4gQWRkIG90aGVyIC1ETk94 eHgncyB0byBzYXZlIHNwYWNlIChlLmcuIC1ETk9DU0VUUykKLSMgU2VlIHRoZSBuZXh0IGZldyBt YWtlZmlsZSBlbnRyaWVzIGZvciByZWxhdGVkIGV4YW1wbGVzLgotIyBBbHNvIHNlZSBzeXM1cjMy aXMgZm9yIG1ha2luZyBhIHBvcnRhYmxlIGkzODYgU1ZSMyBiaW5hcnkuCi1pczVyMzoKLQlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRlcmFjdGl2ZSAzODYvaXggb3IgbGF0 ZXIuLi4nCi0JQGVjaG8gJ0lmIHRoaXMgZG9lcyBub3Qgd29yayBwbGVhc2UgcmVhZCB0aGUgbWFr ZWZpbGUgZW50cnkuJwotCSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZMQUdTID0gLURTVlIzIC1ERElS RU5UIC1ESERCVVVDUCAtZyAtRE5PQ1NFVFMgLUROT1JFQUxQQVRIIFwKLQktRFVJRF9UPXVzaG9y dCAtREdJRF9UPXVzaG9ydCAtREkzODZJWCAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtZyIK LQotI0ludGVyYWN0aXZlIENvcnAgU3lzdGVtIFN5c3RlbSBWIFIzIHdpdGggZ2NjCi1pczNnY2M6 Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSW50ZXJhY3RpdmUgU3lzdGVt IFYgUjMgLyBnY2MuLi4nCi0JJChNQUtFKSB3ZXJtaXQgQ0M9Z2NjIENDMj1nY2MgXAotCSdDRkxB R1MgPSAtRF9TWVNWMyAtRElTSUlJIC1EZGF0YT1kYXRheCAtRE5BUCAtREhEQlVVQ1AgLUROT1JF QUxQQVRIIFwKLQktRExPQ0tfRElSPVwiL3Vzci9zcG9vbC91dWNwXCIgLURTSUdUWVA9dm9pZCAt TycgIkxOS0ZMQUdTID0iCi0KLSNJbnRlcmFjdGl2ZSBVTklYIFN5c3RlbSBWIFIzLCBQT1NJWCB2 YXJpYW50LiAgVW50ZXN0ZWQuCi0jVXNlcyBkaXJlbnQuaCBhbmQgSG9uZXkgRGFuQmVyIHV1Y3Au ICBSZWFkIGNvbW1lbnRzIGluIGlzNXIzIGVudHJ5LgotaXM1cjNwOgotCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIEludGVyYWN0aXZlIDM4Ni9peCBvciBsYXRlci4uLicKLQkk KE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUz0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtZyAt RE5PQ1NFVFMgLUROT1JFQUxQQVRIIFwKLQktREkzODZJWCAtRFBPU0lYICQoS0ZMQUdTKSIgIkxO S0ZMQUdTPSIgIkxJQlM9LWxjcG9zaXgiCi0KLSNJbnRlcmFjdGl2ZSBVTklYIFNWUjMgMi4yLjEs IGpvYiBjb250cm9sLCBjdXJzZXMsIG5vIG5ldCwgZ2NjLgotaXM1cjNnY2M6Ci0JJChNQUtFKSB3 ZXJtaXQgQ0M9Z2NjIENDMj1nY2MgXAotCSJDRkxBR1M9LWcgLXBvc2l4IC1EU1ZSMyAtRERJUkVO VCAtRE5PUkVBTFBBVEggXAotCS1ESERCVVVDUCAtTyAtRE5PQ1NFVFMgLURJMzg2SVggLURTVlIz SkMgLURDS19DVVJTRVMgXAotCSQoS0ZMQUdTKSIgTE5LRkxBR1M9Ii1wb3NpeCIgTElCUz0iLWxj dXJzZXMgLWxjX3MiCi0KLSNJbnRlcmFjdGl2ZSBVTklYIFN5c3RlbSBWIFIzIHdpdGggVENQL0lQ IG5ldHdvcmsgc3VwcG9ydC4KLSNOZWVkcyAtbGluZXQgZm9yIG5ldCBmdW5jdGlvbnMuICBzaWdu YWwoKSBpcyB2b2lkIHJhdGhlciB0aGFuIGludC4KLSNVc2VzIGRpcmVudC5oIGFuZCBIb25leSBE YW5CZXIgdXVjcC4gUmVhZCBjb21tZW50cyBpbiBpczVyMyBlbnRyeS4KLSNBbHNvIHNlZSBpczVy M25ldDIgaWYgeW91IGhhdmUgdHJvdWJsZSB3aXRoIHRoaXMgZW50cnkuCi1pczVyM25ldDoKLQlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRlcmFjdGl2ZSAzODYvaXguLi4n Ci0JQGVjaG8gJ0lmIHRoaXMgZG9lcyBub3Qgd29yayBwbGVhc2UgcmVhZCB0aGUgbWFrZWZpbGUg ZW50cnkuJwotCSQoTUFLRSkgd2VybWl0IENDPSIkKENDKSIgQ0MyPSIkKENDMikiIFwKLQkiQ0ZM QUdTID0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAtRE5PUkVBTFBBVEgg XAotCS1ESTM4NklYICQoS0ZMQUdTKSAtTyIgIkxJQlMgPSAtbGluZXQiCi0KLWlzNXIzbmV0Z2Nj OgotCSQoTUFLRSkgaXM1cjNuZXQgQ0M9Z2NjIENDMj1nY2MKLQotI0ludGVyYWN0aXZlIFVOSVgg U3lzdGVtIFYgUjMsIG5vIGpvYiBjb250cm9sLCBzaWduYWwoKSB2b2lkIHJhdGhlciB0aGFuIGlu dC4KLSNVc2VzIGRpcmVudC5oIGFuZCBIb25leSBEYW5CZXIgdXVjcC4gIE5lZWRzIC1saW5ldCBm b3IgbmV0IGZ1bmN0aW9ucy4KLSNSZWFkIGNvbW1lbnRzIGluIGlzNXIzIGVudHJ5LiAgVXNlIHRo aXMgZW50cnkgaWYgaXM1cjNuZXQgZmFpbHMuCi0jU2F2ZXMgc29tZSBzcGFjZSBieSBzdHJpcHBp bmcgKC1zKSBhbmQgdXNpbmcgc2hhcmVkIGxpYnJhcnkgKC1sY19zKS4KLWlzNXIzbmV0MjoKLQlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRlcmFjdGl2ZSAzODYvaXguLi4n Ci0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1MgPSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQ IC1EVENQU09DS0VUIC1ETk9KQyAtRE5PUkVBTFBBVEggXAotCS1EU0lHVFlQPXZvaWQgLUROT0FO U0kgLURJMzg2SVggJChLRkxBR1MpIC1PIiBcCi0JIkxOS0ZMQUdTPSAtcyIgIkxJQlMgPSAtbGlu ZXQgLWxjX3MiCi0KLSNJbnRlcmFjdGl2ZSBVTklYIFN5c3RlbSBWIFIzICh2ZXJzaW9uIDIuMiBv ciBsYXRlcikgd2l0aCBqb2IgY29udHJvbCAmIGN1cnNlcy4KLSNVc2VzIGRpcmVudC5oIGFuZCBI b25leSBEYW5CZXIgVVVDUC4KLWlzNXIzamM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgSW50ZXJhY3RpdmUgVW5peCAyLjIgb3IgbGF0ZXIuLi4nCi0JJChNQUtFKSB3ZXJt aXQgQ0M9IiQoQ0MpIiBDQzI9IiQoQ0MyKSIgXAotCSJDRkxBR1MgPSAtRFNWUjMgLURESVJFTlQg LURIREJVVUNQIC1PIC1ETk9DU0VUUyAtRE5PUkVBTFBBVEggXAotCS1EVUlEX1Q9dXNob3J0IC1E R0lEX1Q9dXNob3J0IC1ESTM4NklYIC1EU1ZSM0pDIC1EQ0tfQ1VSU0VTIFwKLQktRFBPU0lYX0pD IC1EQ0tfUkVESVIgLURDS19QT0xMIC1ERENMR0VUQ1dEIFwKLQkkKEtGTEFHUykiICJMSUJTPS1s Y3Vyc2VzIC1sY19zIC1saW5ldCIKLQotaXM1cjNqY2djYzoKLQkkKE1BS0UpIGlzNXIzamMgQ0M9 ImdjYyAtRENLX0FOU0lMSUJTIC1ERENHUFdOQU0gLU80IiBDQzI9Z2NjIFwKLQlLRkxBR1M9IiQo S0ZMQUdTKSIgTE5LRkxBR1M9IiQoTE5LRkxBR1MpIgotCi0jU3Vuc29mdC9JbnRlcmFjdGl2ZSBV TklYIFN5c3RlbSBWIFIzICh2ZXJzaW9uIDIuMiBvciBsYXRlcikKLSN3aXRoIGpvYiBjb250cm9s LCBjdXJzZXMsIGFuZCBUQ1AvSVAgbmV0d29ya2luZy4KLSNVc2VzIGRpcmVudC5oIGFuZCBIb25l eSBEYW5CZXIgVVVDUC4KLWlzNXIzbmV0amM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgSW50ZXJhY3RpdmUgVW5peCAyLjIgb3IgbGF0ZXIuLi4nCi0JJChNQUtFKSB3ZXJt aXQgQ0M9IiQoQ0MpIiBDQzI9IiQoQ0MyKSIgXAotCSJDRkxBR1MgPSAtRFNWUjMgLURESVJFTlQg LURIREJVVUNQIC1PIC1ETk9DU0VUUyAtRE5PUkVBTFBBVEggXAotCS1EVUlEX1Q9dXNob3J0IC1E R0lEX1Q9dXNob3J0IC1ESTM4NklYIC1EU1ZSM0pDIC1EQ0tfQ1VSU0VTIFwKLQktRFBPU0lYX0pD IC1EQ0tfUkVESVIgLURUQ1BTT0NLRVQgLURTRUxFQ1QgXAotCSQoS0ZMQUdTKSIgIkxJQlM9LWxp bmV0IC1sY3Vyc2VzIC1sY19zIgotCi1pczVyM25ldGpjZ2NjOgotCSQoTUFLRSkgaXM1cjNuZXRq YyBDQz0iZ2NjIC1EQ0tfQU5TSUxJQlMgLUREQ0dQV05BTSAtTzQiIENDMj1nY2MgXAotCUtGTEFH Uz0iJChLRkxBR1MpIiBMTktGTEFHUz0iJChMTktGTEFHUykiCi0KLSNNYXNzY29tcCBTeXN0ZW0g SUlJCi1ydHU6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTWFzc2NvbXAg UlRVIFN5c3RlbSBJSUkuLi4nCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1M9IC1VRklPTlJF QUQgLURBVFRTViAkKEtGTEFHUykgLU8iICJMTktGTEFHUyA9IiAiTElCUz0gLWxqb2JzIgotCi0j TWFzc2NvbXAvQ29uY3VycmVudCBSVFUgNC4wIG9yIGxhdGVyLCBCZXJrZWxleSBlbnZpcm9ubWVu dC4KLSNJbmNsdWRlcyA8bmRpci5oPiA9IC91c3IvaW5jbHVkZS9uZGlyLmgKLSNOb3RlICJMSUJT ID0gLWxuZGlyIiBtaWdodCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgInVjYiBtYWtlIi4K LXJ0dWJzZDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYXNzY29tcCBS VFUgNC4xQS4uLicKLQl1Y2IgbWFrZSB3ZXJtaXQgXAotCSJDRkxBR1M9IC1EQlNENCAtRFJUVSAt RE5ESVIgLURIREJVVUNQIC1EVENQU09DS0VUICQoS0ZMQUdTKSIgXAotCSJMSUJTID0gLWxuZGly IgotCi0jTWFzc2NvbXAvQ29uY3VycmVudCBSVFUgNC4wIG9yIGxhdGVyLCBzYW1lIGFzIGFib3Zl LAotI0luY2x1ZGVzICJ1c3IvbGliL25kaXIuaCIKLSNOb3RlICJMSUJTID0gLWxuZGlyIiBtaWdo dCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgInVjYiBtYWtlIi4KLXJ0dWJzZDI6Ci0JQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTWFzc2NvbXAgUlRVIDQuMUEuLi4nCi0J dWNiIG1ha2Ugd2VybWl0IFwKLQkiQ0ZMQUdTPSAtREJTRDQgLURSVFUgLURYTkRJUiAtREhEQlVV Q1AgJChLRkxBR1MpIiBcCi0JIkxJQlMgPSAtbG5kaXIiCi0KLSNNYXNzY29tcC9Db25jdXJyZW50 IFJUVSA0LjAgb3IgbGF0ZXIsIHNhbWUgYXMgYWJvdmUsCi0jSW5jbHVkZXMgPHN5cy9uZGlyLmg+ Ci0jTm90ZSAiTElCUyA9IC1sbmRpciIgbWlnaHQgbm90IGJlIG5lY2Vzc2FyeSBiZWNhdXNlIG9m ICJ1Y2IgbWFrZSIuCi1ydHVic2QzOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIE1hc3Njb21wIFJUVSA0LnggQlNELi4uJwotCXVjYiBtYWtlIHdlcm1pdCAiQ0ZMQUdTPSAt REJTRDQgLURSVFUgLURIREJVVUNQICQoS0ZMQUdTKSIgXAotCSJMSUJTID0gLWxuZGlyIgotCi0j TWFzc2NvbXAvQ29uY3VycmVudCBSVFUgNC4wIG9yIGxhdGVyLCBTeXN0ZW0gViBSMiwgdXNpbmcg PGRpcmVudC5oPi4KLSNJbiBjYXNlIG9mIHByb2JsZW1zLCBhZGQgYmFjayB0aGUgLURSVFUgc3dp dGNoLgotI0luIGNhc2UgLURUQ1BTT0NLRVQgZ2l2ZXMgdHJvdWJsZSwgcmVtb3ZlIGl0LgotcnR1 czU6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTWFzc2NvbXAgUlRVIDQu eC4uLicKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUz0gLURBVFRTViAtREhEQlVVQ1AgLURE SVJFTlQgLURUQ1BTT0NLRVQgJChLRkxBR1MpIgotCi0jTWFzc2NvbXAvQ29uY3VycmVudCBSVFUg NC54LCBTeXN0ZW0gViBSMywgdXNpbmcgPGRpcmVudC5oPi4KLSNVc2UgdGhpcyBvbmUgaWYgcnR1 czUgZ2l2ZXMgd2FybmluZ3MgYWJvdXQgcG9pbnRlciB0eXBlIG1pc21hdGNoZXMuCi0jSW4gY2Fz ZSBvZiBwcm9ibGVtcywgYWRkIGJhY2sgdGhlIC1EUlRVIHN3aXRjaC4KLXJ0dXM1cjM6Ci0JQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTWFzc2NvbXAgUlRVIFN5cyBWIFIzLi4u JwotCSQoTUFLRSkgd2VybWl0ICJDRkxBR1M9IC1EU1ZSMyAtREhEQlVVQ1AgLURESVJFTlQgJChL RkxBR1MpIgotCi0jREVDIFByby0zeHggd2l0aCBQcm8vVmVuaXggVjEuMCBvciBWMS4xCi0jIFJl cXVpcmVzIGNvZGUtbWFwcGluZyBvbiBub24tSSZELXNwYWNlIDExLzIzIHByb2Nlc3NvciwgcGx1 cyBzb21lCi0jIGZpZGRsaW5nIHRvIGdldCBpbnRlcnJ1cHQgdGFyZ2V0cyBpbnRvIHJlc2lkZW50 IGNvZGUgc2VjdGlvbi4KLSMgVGhpcyBhbG1vc3QgY2VydGFpbmx5IGRvZXNuJ3Qgd29yayBhbnkg bW9yZS4KLXByb3Z4MToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBERUMg UHJvLTN4eCwgUHJvL1Zlbml4IDEueC4uLicKLQkkKE1BS0UpIHdhcnQgIkNGTEFHUz0gLURQUk9W WDEgJChLRkxBR1MpIiAiTE5LRkxBR1M9ICIKLQkkKE1BS0UpIHdlcm1pdCAiQ0ZMQUdTID0gLURQ Uk9WWDEgLUROT0ZJTEVIIC1tZDc4MCIgXAotCQkiTE5LRkxBR1M9IC11IF9zbGVlcCAtbGMgLW1k NzgwIgotCi0jTml4ZG9yZiBUYXJnb24vMzEuCi0jQVQmVCBVTklYIFN5c3RlbSBWIFIzLCBzaWdu YWwoKSBpcyB2b2lkIHJhdGhlciB0aGFuIGludC4KLSNVc2VzIGRpcmVudC5oIHdpdGhvdXQgSG9u ZXkgRGFuQmVyIHV1Y3AuCi10MzF0b3M0MHg6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgVGFyZ29uLzMxIHdpdGggVE9TIDQuMC54eC4uLicKLQkJJChNQUtFKSB3ZXJtaXQg XAotCQkiQ0ZMQUdTPSAtRFNWUjMgLURESVJFTlQgJChLRkxBR1MpIC1PIiBcCi0JCSJMTktGTEFH Uz0iCi0KLSNOQ1IgVG93ZXIgMTYzMiwgT1MgMS4wMgotdG93ZXIxOgotCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIE5DUiBUb3dlciAxNjMyLCBPUyAxLjAyLi4uJwotCSQoTUFL RSkgd2VybWl0ICJDRkxBR1M9IC1EVE9XRVIxICQoS0ZMQUdTKSIKLQotI05DUiBUb3dlciAzMiwg T1MgUmVsZWFzZSAxLnh4Lnh4Ci10b3dlcjMyLTE6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgTkNSIFRvd2VyIDMyIFJlbCAxIFN5c3RlbSBWIFIyLi4uJwotCUBlY2hvICdB ZGQgS0ZMQUdTPS1ESVNESVJCVUcgaWYgeW91IGdldCBlcnJvcnMgYWJvdXQgU19JU1JFRy9TX0lT RElSLicKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUyA9IC1EQVRUU1YgJChLRkxBR1MpIC1P IiAiTE5LRkxBR1MgPSAtbiIKLQotI05DUiBUb3dlciAzMiwgT1MgUmVsZWFzZSAyLnh4Lnh4Ci10 b3dlcjMyLTI6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTkNSIFRvd2Vy IDMyIFJlbCAyIFN5c3RlbSBWIFIyLi4uJwotCSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZMQUdTID0g LURBVFRTViAtREhEQlVVQ1AgJChLRkxBR1MpIC1PMiIgXAotCSJMTktGTEFHUyA9IC1uIgotCi0j TkNSIFRvd2VyIDMyLCBPUyBSZWxlYXNlcyBiYXNlZCBvbiBTeXN0ZW0gViBSMwotI0Rvbid0IGFk ZCAtRE5BUCAoZG9lc24ndCB3b3JrIHJpZ2h0KSBvciAtRFJEQ0hLIChub3QgYXZhaWxhYmxlIGlu IGxpYmMpLgotdG93ZXIzMjoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBO Q1IgVG93ZXIgMzIgU3lzdGVtIFYgUjMuLi4nCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1Mg PSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQIC1ETk9TWVNJT0NUTEggJChLRkxBR1MpIFwKLQkt RFVJRF9UPXVzaG9ydCAtREdJRF9UPXVzaG9ydCAtTzEiCi0KLSNOQ1IgVG93ZXIgMzIsIE9TIFJl bGVhc2VzIGJhc2VkIG9uIFN5c3RlbSBWIFIzCi10b3dlcjMyZzoKLQlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBOQ1IgVG93ZXIgMzIgU3lzdGVtIFYgUjMsIGdjYy4uLicKLQkk KE1BS0UpIHdlcm1pdCAiQ0MgPSBnY2MiIFwKLQkiQ0ZMQUdTID0gLURTVlIzIC1ERElSRU5UIC1E SERCVVVDUCAtRE5PU1lTSU9DVExIICQoS0ZMQUdTKSBcCi0JRFVJRF9UPXVzaG9ydCAtREdJRF9U PXVzaG9ydCAtTyAtZnN0cmVuZ3RoLXJlZHVjZSAtZm9taXQtZnJhbWUtcG9pbnRlciIKLQotI0Zv cnR1bmUgMzI6MTYsIEZvcjpQcm8gMS44IChtb3N0bHkgbGlrZSA0LjFic2QpCi1mdDE4OgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEZvcnR1bmUgMzI6MTYgRm9yOlBybyAx LjguLi4nCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1M9IC1ETk9ERUJVRyAtREJTRDQgLURG VDE4IC1ETk9GSUxFSCAkKEtGTEFHUykgXAotCS1EUElEX1Q9c2hvcnQiCi0KLSNGb3J0dW5lIDMy OjE2LCBGb3I6UHJvIDIuMSAobW9zdGx5IGxpa2UgNC4xYnNkKS4KLSNUaGUgbW9kdWxlcyB0aGF0 IGJyZWFrIHRoZSBvcHRpbWl6ZXIgYXJlIGNvbXBpbGVkIHNlcGFyYXRlbHkuCi1mdDIxOgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEZvcnR1bmUgMzI6MTYgRm9yOlBybyAy LjEuLi4nCi0JJChNQUtFKSBja3V1c3guJChFWFQpICJDRkxBR1M9IC1ETk9ERUJVRyAtREJTRDQg LURGVDIxIC1ETk9GSUxFSCBcCi0JLVNZTSA4MDAgIC1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSAtRFBJ RF9UPXNob3J0IiBcCi0JIkxOS0ZMQUdTPSAtbiAtcyIgIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNh cCAtbHYgLWxuZXQiCi0JJChNQUtFKSBja3V4bGEuJChFWFQpICJDRkxBR1M9IC1ETk9ERUJVRyAt REJTRDQgLURGVDIxIC1ETk9GSUxFSCBcCi0JLVNZTSA4MDAgIC1EQ0tfQ1VSU0VTICQoS0ZMQUdT KSAtRFBJRF9UPXNob3J0IiBcCi0JIkxOS0ZMQUdTPSAtbiAtcyIgIkxJQlM9IC1sY3Vyc2VzIC1s dGVybWNhcCAtbHYgLWxuZXQiCi0JJChNQUtFKSBja3VkaWEuJChFWFQpICJDRkxBR1M9IC1ETk9E RUJVRyAtREJTRDQgLURGVDIxIC1ETk9GSUxFSCBcCi0JLVNZTSA4MDAgIC1EQ0tfQ1VSU0VTICQo S0ZMQUdTKSAtRFBJRF9UPXNob3J0IiBcCi0JIkxOS0ZMQUdTPSAtbiAtcyIgIkxJQlM9IC1sY3Vy c2VzIC1sdGVybWNhcCAtbHYgLWxuZXQiCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1M9IC1P IC1ETk9ERUJVRyAtREJTRDQgLURGVDIxIC1ETk9GSUxFSCAtU1lNIDgwMCBcCi0JLURDS19DVVJT RVMgJChLRkxBR1MpIC1EUElEX1Q9c2hvcnQiIFwKLQkiTE5LRkxBR1M9IC1uIC1zIiAiTElCUz0g LWxjdXJzZXMgLWx0ZXJtY2FwIC1sdiAtbG5ldCIKLQotI1ZhbGlkIFNjYWxkc3RhcgotI0Jlcmtl bGV5aXNoLCBidXQgbmVlZCB0byBjaGFuZ2Ugc29tZSB2YXJpYWJsZSBuYW1lcy4KLXZhbGlkOgot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFZhbGlkIFNjYWxkc3Rhci4uLicK LQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUz0gLURCU0Q0IC1ETk9ERUJVRyAtRE5PVExPRyAt RGNjPWNjeCAtREZSRUFEPTEgJChLRkxBR1MpIgotCi0jSUJNIElYLzM3MCBvbiBJQk0gMzcwIFNl cmllcyBtYWluZnJhbWVzCi0jTW9zdGx5IGxpa2Ugc3lzMywgYnV0IHNob3VsZCBidWZmZXIgcGFj a2V0cy4KLWl4MzcwOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBJ WC8zNzAuLi4nCi0JJChNQUtFKSB3ZXJtaXQgIkNGTEFHUyA9IC1ESVgzNzAgLURBVFRTViAkKEtG TEFHUykgLWkgLU8iIFwKLQkiTE5LRkxBR1MgPSAtaSIKLQotI0FtZGFobCBVVFMgMi40IG9uIElC TSAzNzAgc2VyaWVzIGNvbXBhdGlibGUgbWFpbmZyYW1lcy4KLSNNb3N0bHkgbGlrZSBWNywgYnV0 IGNhbid0IGRvIGluaXRyYXdxKCkgYnVmZmVyIHBlZWtpbmcuCi11dHMyNDoKLQlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBbWRhaGwgVVRTIDIuNC4uLicKLQkkKE1BS0UpIHdl cm1pdCAiQ0ZMQUdTPS1EVjcgLURQUk9DTkFNRT1cXFwiJChQUk9DKVxcXCIgXAotCS1EVVRTMjQg LURCT09UTkFNRT1cXFwiJChCT09URklMRSlcXFwiIC1ETlBST0NOQU1FPVxcXCIkKE5QUk9DKVxc XCIgXAotCS1ETlBUWVBFPSQoTlBUWVBFKSAkKERJUkVDVCkgJChLRkxBR1MpIgotCi0jQW1kYWhs IFVUU1YgVU5JWCBTeXN0ZW0gViA9IFN5c3RlbSBWIFIyIG9yIGVhcmxpZXIuCi11dHN2OgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFtZGFobCBVVFNWLi4uJwotCSQoTUFL RSkgd2VybWl0IFwKLQkiQ0ZMQUdTID0gLURVVFNWICQoS0ZMQUdTKSAtaSAtTyIgIkxOS0ZMQUdT ID0gLWkiCi0KLSNBbWRhaGwgVVRTViBVTklYIFN5c3RlbSBWID0gU3lzdGVtIFYgUjIgb3IgZWFy bGllciwgd2l0aCBUQ1Agc29ja2V0cyBsaWJyYXJ5LgotdXRzdnRjcDoKLQlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBbWRhaGwgVVRTViB3L3RjcC4uLicKLQkkKE1BS0UpIHdl cm1pdCAiQ0ZMQUdTID0gXAotCS1EVENQU09DS0VUIC1EVVRTViAkKEtGTEFHUykgLWkgLU8iICJM TktGTEFHUyA9IC1pIiBcCi0JIkxJQlMgPSAtbHNvY2tldCIKLQotI0JCTiBDLzcwIHdpdGggSU9T IDIuMAotI01vc3RseSBCZXJrZWxleS1saWtlLCBidXQgd2l0aCBzb21lIEFUVGlzbXMKLWM3MDoK LQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBCQk4gQy83MCBJT1MgMi4wLi4u JwotCSQoTUFLRSkgd2VybWl0ICJDRkxBR1M9IC1EQlNENCAtREM3MCAkKEtGTEFHUykiCi0KLSNa aWxvZyBaRVVTIDMuMjEKLXppbG9nOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIFppbG9nIFpldXMgMy4yMS4uLicKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUyA9IC1E QVRUU1YgLURaSUxPRyAtRE5PREVCVUcgJChLRkxBR1MpIC1pIC1PIiBcCi0JIkxOS0ZMQUdTID0g LWkgLWxwdyIKLQotI1doaXRlY2hhcGVsIE1HLTEgR2VuaXggMS4zCi13aGl0ZToKLQlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBXaGl0ZWNoYXBlbCBNRy0xIEdlbml4IDEuMy4u LicKLQlAdG91Y2ggY2tjcHJvLmMKLQkkKE1BS0UpIHdlcm1pdCAiQ0ZMQUdTPSAtREJTRDQgLUR6 a3NlbGYoKT0wICAkKEtGTEFHUykiCi0KLSNQaXhlbCAxMDAwCi1waXhlbDoKLQlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBQaXhlbCAxMDAwLi4uJwotCSQoTUFLRSkgd2VybWl0 ICJDRkxBR1M9IC1EQlNENCAtRHprc2VsZigpPTAgJChLRkxBR1MpIgotCi1wdHg6Ci0JJChNQUtF KSAiTUFLRT0kKE1BS0UpIiBkeW5peHB0eDEyCi0KLSNDREMgVlgvVkUgNS4yLjEKLXZ4dmU6Ci0J QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQ0RDIFZYL1ZFIDUuMi4xLi4uJwot CSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZMQUdTID0gLURBVFRTViAtRFZYVkUgLUROT0RFQlVHIC1E Tk9UTE9HICQoS0ZMQUdTKSAtaSAtTyIgXAotCSJMTktGTEFHUyA9IC1pIgotCi0jRElBQiBEUzkw IG9yIExVWE9SIEFCQy05MDAwIHdpdGggcHJlLTUuMiBETklYLiAgU3lzIFYgd2l0aCBuYXAoKSBh bmQgcmRjaGsoKS4KLSMgbmQgPSBubyBvcGVuZGlyKCksIHJlYWRkaXIoKSwgY2xvc2VkaXIoKSwg ZXRjLgotIyBTb21lIG9mIHRoZSBtb2R1bGVzIGZhaWwgdG8gY29tcGlsZSB3aXRoIC1PLgotZG5p eG5kOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERJQUIgRFM5MCB3aXRo IHZlcnkgb2xkIEROSVggNS4yLicKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUyA9IC1EQVRU U1YgLUROQVAgLURSRENISyAtRERDTFBPUEVOIFwKLQktVV9fU1REQ19fICQoS0ZMQUdTKSIKLQot I0RJQUIgRFM5MCB3aXRoIEROSVggNS4yLiAgU3lzIFYgd2l0aCBuYXAoKSBhbmQgcmRjaGsoKS4K LSMgVGhpcyBvbmUgaGFzIG9wZW5kaXIoKSwgcmVhZGRpcigpLCBjbG9zZWRpcigpLCBldGMuCi0j IFNvbWUgb2YgdGhlIG1vZHVsZXMgZmFpbCB0byBjb21waWxlIHdpdGggLU8uCi1kbml4OgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERJQUIgRFM5MCB3aXRoIG9sZCBETklY IDUuMi4uLicKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUyA9IC1EQVRUU1YgLUROQVAgLURS RENISyAtRERJUkVOVCAgXAotCS1VX19TVERDX18gJChLRkxBR1MpIgotCi0jRElBQiBEUzkwIHdp dGggRE5JWCA1LjIuICBTeXMgViB3aXRoIG5hcCgpIGFuZCByZGNoaygpLgotIyBBcyBhYm92ZSwg YnV0IHdpdGggY3Vyc2VzIGFuZCBUQ1AvSVAuCi0jIFlvdSBtaWdodCBnZXQgY29tcGxhaW50cyBh Ym91dCByZWRlZmluaXRpb24gb2YgT19SRE9OTFksIGV0YywgYmVjYXVzZQotIyBvZiBidWdzIGlu IHRoZSBETklYIGhlYWRlciBmaWxlcywgd2hpY2ggY2FuIGJlIGZpeGVkIGJ5IGFkZGluZyAjaWZu ZGVmLi4uCi0jIGFyb3VuZCB0aGUgb2ZmZW5kaW5nIGRlZmluaXRpb25zIGluIHRoZSBoZWFkZXIg ZmlsZXMuCi1kbml4bmV0YzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBE SUFCIERTOTAgd2l0aCBvbGQgRE5JWCA1LjIuLi4nCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxB R1MgPSAtREFUVFNWIC1ETkFQIC1EUkRDSEsgLURESVJFTlQgIFwKLQktRFRDUFNPQ0tFVCAtRENL X0NVUlNFUyAtSS91c3IvaW5jbHVkZS9ic2QgLVVfX1NURENfXyAkKEtGTEFHUykiIFwKLQkiTElC UyA9IC1sbiAtbGN1cnNlcyIKLQotI0RJQUIgRFM5MCB3aXRoIEROSVggNS4zIG9yIGxhdGVyLCB3 aXRoIEhEQiBVVUNQLCBuYXAoKSBhbmQgcmRjaGsoKS4KLWRuaXg1cjM6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRElBQiBEUzkwIHdpdGggRE5JWCA1LjMuLi4nCi0JQGVj aG8gJ3dpdGggSG9uZXkgRGFuQmVyIFVVQ1AnCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1Mg PSAtRFNWUjMgLURIREJVVUNQIC1ETkFQIC1EUkRDSEsgLURESVJFTlQgXAotCS1EQ0tfQ1VSU0VT IC1EUkVOQU1FICQoS0ZMQUdTKSAtTyIgIkxJQlM9IC1sY3Vyc2VzIgotCi0jRElBQiBEUzkwIHdp dGggRE5JWCA1LjMgb3IgbGF0ZXIsIHdpdGggSERCIFVVQ1AsIG5hcCgpIGFuZCByZGNoaygpICsg VENQL0lQCi1kbml4NXIzbmV0OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IERJQUIgRFM5MCB3aXRoIEROSVggNS4zLi4uJwotCUBlY2hvICd3aXRoIEhvbmV5IERhbkJlciBV VUNQIGFuZCBUQ1AvSVAnCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1MgPSAtRFNWUjMgLURI REJVVUNQIC1ETkFQIC1EUkRDSEsgLURESVJFTlQgXAotCS1EVENQU09DS0VUIC1EQ0tfQ1VSU0VT IC1EUkVOQU1FICQoS0ZMQUdTKSAtTyBcCi0JLUkvdXNyL2luY2x1ZGUvYnNkIiAiTElCUyA9IC1s biAtbGN1cnNlcyIKLQotI0RJQUIgRFM5MCB3aXRoIEROSVggNS4zIDIuMiBvciBsYXRlciwgd2l0 aCBIREIgVVVDUCwgbmFwKCkgYW5kIHJkY2hrKCksCi0jQU5TSSBDIGNvbXBpbGF0aW9uIGFuZCBs aWJyYXJpZXMuCi0jTm90ZSB0aGF0IGZvciBETklYIDUuMyAyLjIgeW91IGhhdmUgdG8gY29ycmVj dCBhIGJ1ZyBpbiAvdXNyL2luY2x1ZGUvc3RkbGliLmg6Ci0jY2hhbmdlICJleHRlcm4Jdm9pZCBm cmVlKGNoYXIgKnN0cik7IgotI3RvICAgICAiZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICpzdHIpOyIK LSNOT1RFOiBUaGlzIGJ1ZyBpcyByZXBvcnRlZGx5IGZpeGVkIGluIEROSVggNS4zIDIuMi4xLgot I1Nob3VsZCB5b3UgZ2V0IGZhdGFsIGVycm9ycyBjYXVzZWQgYnkgaGFybWxlc3MgcG9pbnRlci10 eXBlIG1pc21hdGNoZXMsCi0jbGlrZSBiZXR3ZWVuIHNpZ25lZCBhbmQgdW5zaWduZWQgY2hhciwg anVzdCByZW1vdmUgLVg3LgotZG5peDVyM2Fuc2k6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgRElBQiBEUzkwIHdpdGggRE5JWCA1LjMuLi4nCi0JQGVjaG8gJ3dpdGggQU5T SSBDIEhvbmV5IERhbkJlciBVVUNQJwotCSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZMQUdTID0gLURT VlIzIC1ERElBQiAtREhEQlVVQ1AgLUROQVAgLURSRENISyAtRERJUkVOVCBcCi0JLURDS19BTlNJ TElCUyAtRENLX0NVUlNFUyAtRFJFTkFNRSAtTyAtWDcgLVg5ICQoS0ZMQUdTKSIgXAotCSJMSUJT PSAtbGN1cnNlcyIKLQotI0RJQUIgRFM5MCB3aXRoIEROSVggNS4zIDIuMiBvciBsYXRlciwgd2l0 aCBIREIgVVVDUCwgbmFwKCkgYW5kIHJkY2hrKCksCi0jICsgVENQL0lQLCBBTlNJIEMgY29tcGls YXRpb24gYW5kIGxpYnJhcmllcy4KLSNTaG91bGQgeW91IGdldCBmYXRhbCBlcnJvcnMgY2F1c2Vk IGJ5IGhhcm1sZXNzIHBvaW50ZXItdHlwZSBtaXNtYXRjaGVzLAotI2xpa2UgYmV0d2VlbiBzaWdu ZWQgYW5kIHVuc2lnbmVkIGNoYXIsIGp1c3QgcmVtb3ZlIC1YNy4KLWRuaXg1cjNhbnNpbmV0Ogot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERJQUIgRFM5MCB3aXRoIEROSVgg NS4zLi4uJwotCUBlY2hvICd3aXRoIEFOU0kgQyBIb25leSBEYW5CZXIgVVVDUCcKLQkkKE1BS0Up IHdlcm1pdCBcCi0JIkNGTEFHUyA9IC1EU1ZSMyAtRERJQUIgLURIREJVVUNQIC1ETkFQIC1EUkRD SEsgLURESVJFTlQgXAotCS1EVENQU09DS0VUIC1EQ0tfQU5TSUxJQlMgLURDS19DVVJTRVMgLURS RU5BTUUgLU8gLVg3IC1YOSAkKEtGTEFHUykgXAotCS1JL3Vzci9pbmNsdWRlL2JzZCIgIkxJQlM9 IC1sbiAtbGN1cnNlcyIKLQotI1JpZGdlIDMyIHdpdGggUk9TIDMuMgotcmlkZ2UzMjoKLQlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIFJpZGdlIDMyIFJPUyAzLjInCi0JJChNQUtFKSB3 ZXJtaXQgXAotCSJDRkxBR1MgPSAtREFUVFNWIC1ETk9GSUxFSCAtRE5PREVCVUcgLUROT1RMT0cg JChLRkxBR1MpIC1pIC1PIiBcCi0JIkxOS0ZMQUdTID0gLWkiCi0KLSNBbHRvcyA0ODYsIDU4Niwg b3IgOTg2IHdpdGggWGVuaXggMy4wCi1hbHRvczoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBBbHRvcyB4ODYgd2l0aCBYZW5peCAzLjAuLi4nCi0JJChNQUtFKSB3ZXJtaXQg XAotCSJDRkxBR1M9IC1EQVRUU1YgLURBOTg2IC1ETk9ERUJVRyAtRE5PVExPRyAkKEtGTEFHUykg LWkgLU8iIFwKLQkiTE5LRkxBR1M9IC1pIgotCi0jQWx0b3MgOTg2IHdpdGggWGVuaXggMy4wLCBh cyBhYm92ZSwgYnV0IGNvbW1hbmQtbGluZSBvbmx5LCBtaW5pbWFsIHNpemUuCi0jRm9yIHN5c3Rl bXMgd2l0aCBzbWFsbCBtZW1vcmllcy4gIEl0IG1pZ2h0IGFsc28gYmUgbmVjZXNzYXJ5IHRvIGNo b3AgY2VydGFpbgotI21vZHVsZXMgdXAgaW50byBzbWFsbGVyIHBpZWNlcywgZS5nLiBja3V1czMt NiwgYmVjYXVzZSBvZiBzeW1ib2wgdGFibGUKLSNvdmVyZmxvdy4gICBJZiB0aGlzIG1ha2VmaWxl IGlzIHRvbyBiaWcgb3IgY29tcGxleCBmb3IgdGhlIEFsdG9zLCBjb21waWxlCi0jYW5kIGxpbmsg YnkgaGFuZCBvciB3cml0ZSBzaGVsbCBzY3JpcHRzLgotYWx0b3NjOgotCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIEFsdG9zIHg4NiBYZW5peCAzLjAsIHJlbW90ZS4uLicKLQkk KE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUz0gLURBVFRTViAtREE5ODYgLUROT0RFQlVHIC1ETk9U TE9HIC1ETk9TQ1JJUFQgLUROT0RJQUwgXAotCS1ETk9DU0VUUyAtRE5PQU5TSSAtRE5PTVNFTkQg LUROT1NQTCAtRE5PSUNQICQoS0ZMQUdTKSAtTW0gLU8iIFwKLQkiTE5LRkxBR1M9IC1NbSAtcyIK LQotI0FsdG9zIDk4NiB3aXRoIFhlbml4IDMuMCwgYXMgYWJvdmUsIGJ1dCBpbnRlcmFjdGl2ZSBv bmx5LCBtaW5pbWFsIHNpemUuCi1hbHRvc2k6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgQWx0b3MgeDg2IFhlbml4IDMuMCwgbG9jYWwuLi4nCi0JJChNQUtFKSB3ZXJtaXQg XAotCSJDRkxBR1M9IC1EQVRUU1YgLURBOTg2IC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PU0NSSVBU IC1ETk9ESUFMIFwKLQktRE5PQ1NFVFMgLUROT0FOU0kgLUROT01TRU5EIC1ETk9TUEwgLUROT0NN REwgLUROT0ZSSUxMUyAtRE5PSEVMUCBcCi0JLUROT1NFVEtFWSAkKEtGTEFHUykgLU1tIC1PIiAi TE5LRkxBR1M9IC1NbSAtcyIKLQotIyBBbHRvcyBBQ1M2ODAwMCA2ODAwMCBTeXN0ZW0sIFVOSVgg U3lzdGVtIDMgUmVsZWFzZSAyLCA1MTJrIG1lbW9yeS4KLSMgYWxzbyBuZWVkcyBnZXRjd2QoKSBl eHRlcm5hbCBmdW5jdGlvbjsgc2VlIGNrdWlucy50eHQgZmlsZS4KLSMgYWxzbywgc3lzL3R5cGVz LmggbmVlZGVkIG1vZGlmeWluZzoKLSMgICAjaWZkZWYgX19TWVNfVFlQRVNfSF9fLCAjZGVmaW5l IC4uLiwgI2VuZGlmCi0jIGFsc28sIGNrdXVzMi5jIE1VU1QgYmUgY29tcGlsZWQgTk9PUFQgZWxz ZSBzeW1ib2wgdGFibGUgaXMgZGVzdHJveWVkIQotIyBTdWJtaXNzaW9uIGJ5IFJvYmVydCBXZWlu ZXIvUHJvZ3JhbW1pbmcgUGx1cywgcndlaW5lckBwcm9ncGx1cy5jb20uCi0jCi1hbHRvczM6Ci0J QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQWx0b3MgQUNTNjhrIFVOSVggU3lz dGVtIElJSScKLQkkKE1BS0UpIGNrdXVzMi4kKEVYVCkgIkNGTEFHUyA9IC1EQVRUU1YgLUROT0NT RVRTIC1ETk9TRVRLRVkgLUROT0pDIFwKLQktRE5PRElBTCAtRERDTFBPUEVOIC1ETk9TQ1JJUFQg LUROT0hFTFAgJChLRkxBR1MpIC1pIgotCSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZMQUdTID0gLURB VFRTViAtRE5PQ1NFVFMgLUROT1NFVEtFWSAtRE5PSkMgXAotCS1ETk9ESUFMIC1ERENMUE9QRU4g LUROT1NDUklQVCAtRE5PSEVMUCAkKEtGTEFHUykgLWkgLU8iIFwKLQkiTE5LRkxBR1MgPSAtaSIg IkxJQlMgPSBnZXRjd2QuJChFWFQpIgotCi0jTUlOSVggLSBPcmlnaW5hbCBQQyB2ZXJzaW9uIHdp dGggNjRLKzY0SyBsaW1pdC4KLSMgUmVwb3J0ZWRseSwgdGhlIGxpbmtlciAoYXNsZCkgY2FuIHJ1 biBvdXQgb2Ygc3BhY2Ugd2hpbGUgbGlua2luZy4gIFRoZSBvbmx5Ci0jIHdheSBhcm91bmQgdGhp cyBpcyB0byBtYWtlIGEgY29weSBvZiBsaWJjLmEgZnJvbSB3aGljaCBhbGwgbW9kdWxlcyB0aGF0 IGFyZQotIyBub3QgdXNlZCBieSBLZXJtaXQgYXJlIHJlbW92ZWQuICBJZiB5b3UgaGF2ZSB0cm91 YmxlIGNvbXBpbGluZyBvciBydW5uaW5nCi0jIHdhcnQsICJ0b3VjaCB3YXJ0Ii4gIElmIHRoYXQg ZG9lc24ndCBoZWxwLCAidG91Y2ggY2tjcHJvLmMiLgotIyBUaGUgdmVyc2lvbiBjb25maWd1cmVk IGJlbG93IGhhcyBubyBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlci4KLSMgSWYgeW91IGNhbiBi dWlsZCB0aGlzIHZlcnNpb24gc3VjY2Vzc2Z1bGx5LCBtYXliZSB0aGVyZSB3aWxsIGJlIHJvb20g Zm9yCi0jIGEgbWluaW1hbCBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlciB0b287IHRyeSByZXBs YWNpbmcgLUROT0lDUCB3aXRoCi0jIC1ETk9TUEwsIHBsdXMgZXZlcnkgb3RoZXIgLUROT3h4eCBm bGFnIHRoZXJlIGlzLCBleGNlcHQgZm9yIC1ETk9JQ1AKLSMgKHNlZSBja2NjZmcudHh0KS4KLW1p bml4OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1JTklYLCBubyBjb21t YW5kIHBhcnNlci4uLicKLQlAZWNobyAnVE9UQUxMWSBVTlRFU1RFRCEnCi0JJChNQUtFKSB3ZXJt aXQgRVhUPXMgXAotCSJDRkxBR1M9IC1EVjcgLURNSU5JWCAtaSAtRF9NSU5JWCAtRF9QT1NJWF9T T1VSQ0UgXAotCS1EUElEX1Q9cGlkX3QgLURVSURfVD11aWRfdCAtREdJRF9UPWdpZF90IC1EU0lH X1YgXAotCS1ETk9YTUlUIC1ETk9NU0VORCAtRE5PRlJJTExTIC1ETk9ESUFMIC1ETk9IRUxQIC1E Tk9ERUJVRyAtRE5PVExPRyBcCi0JLUROT1NDUklQVCAtRE5PQ1NFVFMgLUROT0lDUCAtRE5PU0VU S0VZICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUz0gLWkgLVQiCi0KLSNNSU5JWCAtIFBDIHZlcnNp b24gd2l0aCA2NEsrNjRLIGxpbWl0LCBuZXcgKGFzIHlldCB1bnJlbGVhc2VkKSBBQ0sgMi4wIGJl dGEgQwotI2NvbXBpbGVyLCB3aGljaCBvdXRwdXRzIC5vIG9iamVjdCBmaWxlcywgcmF0aGVyIHRo YW4gLnMuICBCdXQgJ21ha2UnIHN0aWxsCi0jZXhwZWN0cyAucyBmaWxlcywgc28gbXVzdCBiZSBw YXRjaGVkIHRvIHVzZSAuby4gIFRlc3RlZCBvbiBNaW5peCAxLjUuMTAuCi1taW5peDE1OgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1JTklYIChuZXcgQUNLIDIuMCBjb21w aWxlciksJwotCUBlY2hvICdubyBjb21tYW5kIHBhcnNlci4uLiAgVE9UQUxMWSBVTlRFU1RFRCEn Ci0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1M9IC1EVjcgLURNSU5JWCAtaSAtRF9NSU5JWCAt RF9QT1NJWF9TT1VSQ0UgXAotCS1EUElEX1Q9cGlkX3QgLURVSURfVD11aWRfdCAtREdJRF9UPWdp ZF90IC1EU0lHX1YgLUROT0RJQUwgXAotCS1ETk9IRUxQIC1ETk9ERUJVRyAtRE5PVExPRyAtRE5P U0NSSVBUIC1ETk9DU0VUUyAtRE5PSUNQICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUz0gLWkgLVQi Ci0KLSNNSU5JWDMgLSBNSU5JWCAzLjAgKG5vIFZNKSAtIE1heS1BdWcgMjAwNSAobm90IHN1cmUg aWYgdGhpcyBldmVyIHdvcmtlZC4uLikKLW1pbml4MzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBNSU5JWDMuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURQT1NJWCAtRE5PVVVDUCAtRE5PTEVBUk4gJChLRkxB R1MpIC1ETUlOSVgyIFwKLQktRE1JTklYMyAtRE5PX1BBUkFNX0ggLUROT1NZU0xPRyAtRE5PR0VU VVNFUlNIRUxMIFwKLQktRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIC1ETk9BUlJPV0tFWVMg LURETk9SRUFMUEFUSCBcCi0JLURUQ1BTT0NLRVQgLUROT1RJTUVaT05FIC1ETk9GVFAgLUROT19E TlNfU1JWIC1PIgotCi0jTUlOSVgzMTUgLSBNSU5JWCAzIDEuNSAtIEphbnVhcnkgMjAxMAotbWlu aXgzMTU6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTWluaXggMyAxLjUu Li4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFH Uz0gLURNSU5JWDMxNSAtRFBPU0lYIC1ETk9VVUNQIC1ETk9KQyAtRE5PTEVBUk4gJChLRkxBR1Mp IFwKLQktREhBVkVfT1BFTlBUWSAtRE5PX1BBUkFNX0ggLUROT1NZU0xPRyAtRE5PR0VUVVNFUlNI RUxMIFwKLQktRFNZU1RJTUVIIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgLUROT0FSUk9X S0VZUyAtRE5PUkVBTFBBVEggXAotCS1EVENQU09DS0VUIC1ETk9USU1FWk9ORSAtRE5PX0ROU19T UlYgLUROT0ZUUCAtTyIKLQotI1BGVSBDb21wYWN0IEEgU2VyaWVzIFVOSVggU3lzdGVtIFYgUjMs IFNYL0EgVElTUCBWMTAvTDUwIChKYXBhbikKLSNNYXliZSB0aGUgLWkgbGluayBvcHRpb24gc2hv dWxkIGJlIHJlbW92ZWQ/Ci1zeGFlNTA6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgUEZVIFNYL0EgVjEwL0w1MC4uLicKLQkkKE1BS0UpIHhlcm1pdCBcCi0JIkNGTEFHUz0g LURTVlIzIC1ERElSRU5UIC1Ec3hhRTUwIC1EVENQU09DS0VUICQoS0ZMQUdTKSAtaSAtTyIgXAot CSJMTktGTEFHUz0gIgotCi0jVGVrdHJvbml4IDYxMzAsIDQzMTksIDQzMDEsIGV0Yywgd2l0aCBV VGVrIE9TLCAvdXNyL3Nwb29sL3V1Y3AvTENLLi8uLi4KLSNUaGUgbW9kZWxzIHRoYXQgc3VwcG9y dCBoYXJkd2FyZSBmbG93IGNvbnRyb2wuCi11dGVrOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIDQuMkJTRC9VVGVrLCBoYXJkd2FyZSBmbG93IGNvbnRyb2wnCi0JJChNQUtF KSB3ZXJtaXQgXAotCSJDRkxBR1M9IC1PIC1ETENLRElSIC1EQlNENCAtRFRDUFNPQ0tFVCBcCi0J LURVVEVLIC1ERENMUE9QRU4gLURMT0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNwL0xDSy5cXFwi IFwKLQktRFRSTUJVRkw9MjA0OCAtRENLX0RUUkNUUyAkKEtGTEFHUykiCi0KLSNUZWt0cm9uaXgg NDMxNSwgNDMxNiwgNDMxNyB3aXRoIFVUZWsgT1MsIC91c3Ivc3Bvb2wvdXVjcC9MQ0suLy4uLgot I1RoZSBtb2RlbHMgdGhhdCBkbyBub3QgZnVsbHkgc3VwcG9ydCBoYXJkd2FyZSBmbG93IGNvbnRy b2wuCi11dGVrbm9od2ZjOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIDQu MkJTRC9VVGVrLCBubyBoL3cgZmxvdyBjb250cm9sJwotCSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZM QUdTPSAtTyAtRExDS0RJUiAtREJTRDQgLURUQ1BTT0NLRVQgXAotCS1EVVRFSyAtRERDTFBPUEVO IC1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVjcC9MQ0suXFxcIiBcCi0JLURUUk1CVUZMPTIw NDggJChLRkxBR1MpIgotCi0jVGVrdHJvbml4IFhEODggd2l0aCAgVVRla1YgT1MKLXV0ZWt2cjM6 Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVGVrdHJvbml4IFhEODggVVRl a1YgUjMuLi4nCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1M9IC1EU1ZSMyAtRERJUkVOVCAt REhEQlVVQ1AgXAotCS1EVENQU09DS0VUIC1EU1lTVVRJTUVIIC1EQ0tfQ1VSU0VTICQoS0ZMQUdT KSAtTyIgXAotCSJMSUJTPSAtbGN1cnNlcyIgIkxOS0ZMQUdTPSAtcyIKLQotI1Blcmtpbi1FbG1l ciAzMjAwIFhlbG9zIFIwMiBvciBlYXJsaWVyCi1jY29wMToKLQlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBYZWxvcyAmIFB1YmxpYyBEb21haW4gRGlyZW50IGNhbGxzJwotCUBl Y2hvICdvciBTeXN0ZW0gViBSMiBvciBlYXJsaWVyLi4uJwotCSQoTUFLRSkgd2VybWl0IFwKLQki Q0ZMQUdTID0gLURBVFRTViAtRHZvaWQ9aW50IC1ERElSRU5UIC1EQ0tfQ1VSU0VTIFwKLQkkKEtG TEFHUykgLU8iICJMTktGTEFHUyA9IiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtbGliIgotCi0jRW5j b3JlLCBVTUFYIDQuMyAoQlNEKSBidXQgd2l0aG91dCBhY3VjbnRybCBwcm9ncmFtLgotZW5jb3Jl OgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgdW1heDQzICJLRkxBR1M9JChLRkxBR1MpIgotCi0j RW5jb3JlLCBhcyBhYm92ZSwgYnV0IHdpdGggY3Vyc2VzIGZpbGUgdHJhbnNmZXIgZGlzcGxheSBp bmNsdWRlZC4KLWVuY29yZWM6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiB1bWF4NDMgIktGTEFH Uz0tRENLX0NVUlNFUyAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIgot Ci0jRW5jb3JlLCBVTUFYIDQuMyAoQlNEKSBidXQgd2l0aG91dCBhY3VjbnRybCBwcm9ncmFtLgot dW1heDQzOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRW5jb3JlIFVNQVgg NC4zLi4uCi0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBQQVJBTExFTD00IHhlcm1pdCBcCi0JIkNG TEFHUz0gLURCU0Q0MyAtREVOQ09SRSAtRFRDUFNPQ0tFVCAkKEtGTEFHUykgLU8iCi0KLSNFbmNv cmUsIFVNQVggNC4yIChCU0QpCi11bWF4NDI6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBFbmNvcmUgVU1BWCA0LjIuLi4KLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIFBBUkFM TEVMPTQgeGVybWl0IFwKLQkiQ0ZMQUdTPSAtREJTRDQgLURFTkNPUkUgLURUQ1BTT0NLRVQgJChL RkxBR1MpIC1PIgotCi0jRW5jb3JlIDg4SyBVTUFYIDUuMyB3aXRoIFRDUC9JUCBzdXBwb3J0Ci1l bmNvcmU4OGs6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRW5jb3JlIDg4 SyBVTUFYIFYsIFRDUC9JUC4uLicKLQkkKE1BS0UpIHhlcm1pdCBcCi0JIkNGTEFHUyA9IC1xIGV4 dD1wY2MgLURTVlIzIC1EVENQU09DS0VUIC1ERElSRU5UIFwKLQktRE5PR0VUSURfUFJPVE9TIC1E SERCVVVDUCAkKEtGTEFHUykgLU8iICJMTktGTEFHUyA9IgotCi0jRW5jb3JlIDg4SyBVTUFYIDUu MyB3aXRoIFRDUC9JUCBzdXBwb3J0Ci1lbmNvcmU4OGtnY2M6Ci0JQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgRW5jb3JlIDg4SyBVTUFYIFYsIFRDUC9JUCwgZ2NjLi4uJwotCSQo TUFLRSkgeGVybWl0IENDPWdjYyBDQzI9Z2NjIFwKLQkiQ0ZMQUdTID0gLURTVlIzIC1EVENQU09D S0VUIC1ERElSRU5UIFwKLQktRE5PR0VUSURfUFJPVE9TIC1ESERCVVVDUCAkKEtGTEFHUykgLU8i ICJMTktGTEFHUyA9IgotCi0jU09OWSBORVdTLCBORVdTLU9TIDQuMDFDCi1zb255bmV3czoKLQlA ZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNPTlkgTkVXUy1PUyA0LjAxQy4uLgot CSQoTUFLRSkgeGVybWl0ICJDRkxBR1M9IC1EQlNENDMgLURBQ1VDTlRSTCAtRFRDUFNPQ0tFVCAt TyIKLQotI1J1biBMaW50IG9uIHRoaXMgbWVzcyBmb3Igc2VsZWN0ZWQgdmVyc2lvbnMuCi0jVGhl c2UgYXJlIHByZXR0eSBtdWNoIG9ic29sZXRlIHNpbmNlIEFOU0kgQyAvIGdjYy4KLWxpbnRzdW46 Ci0JQGVjaG8gJ1J1bm5pbmcgTGludCBvbiBDLUtlcm1pdCAkKENLVkVSKSBzb3VyY2VzIGZvciBT dW5PUyB2ZXJzaW9uLi4uJwotCWxpbnQgLXggLURTVU5PUzQgLURESVJFTlQgLURUQ1BTT0NLRVQg LURTQVZFRFVJRCBcCi0JY2tbY3VdKi5jID4gY2t1a2VyLmxpbnQuc3VuCi0KLWxpbnRic2Q6Ci0J QGVjaG8gJ1J1bm5pbmcgTGludCBvbiBDLUtlcm1pdCAkKENLVkVSKSBzb3VyY2VzIGZvciBCU0Qg NC4yIHZlcnNpb24uLicKLQlsaW50IC14IC1EQlNENCAtRFRDUFNPQ0tFVCBja1tjdV0qLmMgPiBj a3VrZXIubGludC5ic2Q0MgotCi1saW50czU6Ci0JQGVjaG8gJ1J1bm5pbmcgTGludCBvbiBDLUtl cm1pdCAkKENLVkVSKSBzb3VyY2VzIGZvciBTeXMgViB2ZXJzaW9uLi4uJwotCWxpbnQgLXggLURB VFRTViBja1tjdV0qLmMgPiBja3VrZXIubGludC5zNQotCi0jV2hvIHJlbWVtYmVycyBURUNPPwot bG92ZToKLQlAZWNobyAnTm90IHdhcj8nCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9vY2tlcm1pdC5pbmkgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL29ja2VybWl0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggZjAwNzU2MS4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL29ja2VybWl0LmluaQorKysgL2Rldi9udWxsCkBAIC0xLDYxOCArMCwwIEBACi1DT01N RU5UIC0gU3RhbmRhcmQgQy1LZXJtaXQgaW5pdGlhbGl6YXRpb24gZmlsZQotOwotOyBGb3IgQy1L ZXJtaXQgVmVyc2lvbjogOC4wCi07Ci07IEZpbGVuYW1lOgotOyAgIC5rZXJtcmMgICAgIChVTklY LCBPUy05LCBBZWdpcykKLTsgICBDS0VSTUlULklOSSAoT1MvMiwgVk1TLCBPcGVuVk1TLCBBT1Mv VlMsIEF0YXJpIFNULCBDb21tb2RvcmUgQW1pZ2EpCi07ICAgY2tlcm1pdC5pbmkgKFN0cmF0dXMg Vk9TKQotOyAgIEs5NS5JTkkgICAgIChLZXJtaXQgOTUgLS0gYnV0IHRoaXMgYmlnIHZlcnNpb24g aXMgbm90IHVzZWQgdGhlcmUpCi07ICAgSzIuSU5JICAgICAgKEtlcm1pdC8yICAtLSBidXQgZGl0 dG8pCi07Ci07IEF1dGhvcnM6Ci07ICAgRnJhbmsgZGEgQ3J1eiwgQ2hyaXN0aW5lIE0uIEdpYW5v bmUsIEplZmZyZXkgQWx0bWFuCi07ICAgQ29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmssIE5Z IDEwMDI1LTc3OTksIFVTQQotOwotOyBUaGlzIGlzIHRoZSBzdGFuZGFyZCBhbmQgcmVjb21tZW5k ZWQgQy1LZXJtaXQgOC4wIGluaXRpYWxpemF0aW9uIGZpbGUuICBUbwotOyBvdmVycmlkZSBzZXR0 aW5ncyBvciBkZWZpbml0aW9ucyBtYWRlIGluIHRoaXMgZmlsZSwgdG8gYWRkIG5ldyBzZXR0aW5n cyBvcgotOyBkZWZpbml0aW9ucywgb3IgdG8gbWFrZSBhbnkgb3RoZXIgZGVzaXJlZCBjdXN0b21p emF0aW9ucywgY3JlYXRlIGEgc2VwYXJhdGUsCi07IHBlcnNvbmFsIGN1c3RvbWl6YXRpb24gZmls ZSBjYWxsZWQ6Ci07Ci07ICAgLm15a2VybXJjICAgICAoVU5JWCwgT1MtOSwgQWVnaXMsIEJlQm94 LCBQbGFuIDkpCi07ICAgQ0tFUk1PRC5JTkkgICAoT1MvMiwgVk1TLCBPcGVuVk1TLCBBT1MvVlMs IEF0YXJpIFNULCBDb21tb2RvcmUgQW1pZ2EpCi07ICAgY2tlcm1vZC5pbmkgICAoVk9TKQotOwot OyBZb3UgY2FuIGFsc28gZGVmaW5lIHRoZSBjdXN0b21pemF0aW9uIGZpbGVuYW1lIGluIGFuIGVu dmlyb25tZW50Ci07IHZhcmlhYmxlIChsb2dpY2FsIG5hbWUgaW4gVk1TKSwgQ0tFUk1PRCwgd2hp Y2ggdGFrZXMgcHJlY2VkZW5jZSBvdmVyCi07IHRoZSBuYW1lcyBzaG93biBhYm92ZS4KLTsKLTsg V0hBVCBUSElTIEZJTEUgRE9FUzoKLTsKLTsgLiBEZWZpbmVzIHlvdXIgZGVmYXVsdCBkaWFsaW5n IGRpcmVjdG9yeSBuYW1lOgotOyAgICAgLmtkZCBmb3IgVU5JWCwgT1MtOSBhbmQgQWVnaXM7IENL RVJNSVQuS0REIGZvciBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KLTsgICAgICAgIFlvdSBjYW4g b3ZlcnJpZGUgdGhpcyB3aXRoIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBLX0RJQUxfRElSRUNU T1JZCi07IC4gRGVmaW5lcyB5b3VyIGRlZmF1bHQgbmV0d29yayBkaXJlY3RvcnkgbmFtZToKLTsg ICAgIC5rbmQgZm9yIFVOSVgsIE9TLTkgYW5kIEFlZ2lzOyBDS0VSTUlULktORCBmb3Igb3RoZXIg b3BlcmF0aW5nIHN5c3RlbXMuCi07ICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgd2l0aCB0 aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgS19ORVRfRElSRUNUT1JZCi07IC4gRGVmaW5lcyB5b3Vy IGRlZmF1bHQgc2VydmljZXMgZGlyZWN0b3J5IG5hbWU6Ci07ICAgICAua3NkIGZvciBVTklYLCBP Uy05IGFuZCBBZWdpczsgQ0tFUk1JVC5LU0QgZm9yIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLgot OyAgICAgICAgWW91IGNhbiBvdmVycmlkZSB0aGlzIHdpdGggZW52aXJvbm1lbnQgdmFyaWFibGUg S19TRVJWSUNFX0RJUkVDVE9SWS4KLTsgLiBEZWZpbmVzIHlvdXIgY3VzdG9taXphdGlvbiBmaWxl IG5hbWUgKG5hbWUgZ2l2ZW4gYWJvdmUpCi07IC4gUGVyZm9ybXMgc3lzdGVtLWRlcGVuZGVudCBz ZXR1cHMgZm9yIFVOSVgsIFZNUywgT1MvMiwgZXRjLgotOyAuIERlZmluZXMgVlRQUklOVCBtYWNy b3MgZm9yIHVzZSB3aXRoIEs5NSwgTVMtRE9TIEtlcm1pdCwgZXRjLgotOyAuIElmIHlvdSBoYXZl IGEgc2VydmljZXMgZGlyZWN0b3J5LCBhbGwgdGhlIG1hY3JvcyBuZWVkZWQgdG8gdXNlIGl0IGFy ZQotOyAgICAgZGVmaW5lZC4gIElmIHlvdSBkb24ndCBoYXZlIGEgc2VydmljZXMgZGlyZWN0b3J5 LCB0aGUgbWFjcm9zIGFyZSBub3QKLTsgICAgIGRlZmluZWQgYW5kIEtlcm1pdCBzdGFydHMgZmFz dGVyLgotOyAuIEV4ZWN1dGVzIHlvdXIgcGVyc29uYWwgY3VzdG9taXphdGlvbiBmaWxlLCBpZiB5 b3UgaGF2ZSBvbmUuCi07ICAgTk9URTogWW91ciBjdXN0b21pemF0aW9uIGZpbGUgaXMgTk9UIGV4 ZWN1dGVkIGJ5IEtlcm1pdCBpdHNlbGY7IGl0IGlzCi07ICAgZXhlY3V0ZWQgYnkgdGhpcyBmaWxl LgotOwotOyBJbiBVTklYLCB3aXRoIEMtS2VybWl0IDcuMCBhbmQgbGF0ZXIsIHlvdSBjYW4gc3Rv cmUgdGhpcyBmaWxlIHdpdGggYSBuYW1lCi07IG90aGVyIHRoYW4gLmtlcm1yYywgYW5kIGl0IHdp bGwgbm90IGJlIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHksIGJ1dCwgaWYgeW91Ci07IGdpdmUgdGhp cyBmaWxlIGV4ZWN1dGUgcGVybWlzc2lvbiwgeW91IGNhbiBleGVjdXRlIGRpcmVjdGx5IGJlY2F1 c2Ugb2YgdGhlCi07ICJrZXJiYW5nIGxpbmUiIGF0IHRoZSB0b3AsIHdoZW5ldmVyIHlvdSB3YW50 IGFsbCBvZiB0aGUgYWJvdmUgYWN0aW9ucyB0bwotOyBvY2N1ci4gIFRoZSBrZXJiYW5nIGxpbmUg bXVzdCByZWZsZWN0IHRoZSBhY3R1YWwgZnVsbCBwYXRoIG9mIHRoZSBLZXJtaXQKLTsgNy4wLW9y LWxhdGVyIGV4ZWN1dGFibGUuCi07Ci07IEMtS2VybWl0IDYuMCBpcyBkb2N1bWVudGVkIGluIHRo ZSBib29rICJVc2luZyBDLUtlcm1pdCIsIDJuZCBFZGl0aW9uLAotOyBieSBGcmFuayBkYSBDcnV6 IGFuZCBDaHJpc3RpbmUgTS4gR2lhbm9uZSwgMTk5NywgRGlnaXRhbCBQcmVzcyAvCi07IEJ1dHRl cndvcnRoLUhlaW5lbWFubiwgSVNCTiAxLTU1NTU4LTE2NC0xLiAgTmV3IGZlYXR1cmVzIG9mIHN1 YnNlcXVlbnQKLTsgdmVyc2lvbnMgYXJlIGRvY3VtZW50ZWQgYXQgdGhlIEtlcm1pdCB3ZWJzaXRl OgotOyBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi07Ci07IEV2ZXJ5dGhpbmcgYWZ0 ZXIgdGhpcyBwb2ludCBkZXBlbmRzIG9uIHRoZSBzY3JpcHQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Uu Ci07IFRoZSBDSEVDSyBjb21tYW5kIHRlcm1pbmF0ZXMgdGhpcyBjb21tYW5kIGZpbGUgaW1tZWRp YXRlbHkgaWYgdGhlIHNjcmlwdAotOyBwcm9ncmFtbWluZyBsYW5ndWFnZSAoSUYgY29tbWFuZCkg aXMgbm90IGNvbmZpZ3VyZWQuCi07Ci1zZXQgdGFrZSBlcnJvciBvbgkJOyBUaGlzIG1ha2VzIENI RUNLIHF1aXQgaWYgbm8gc2NyaXB0IGxhbmd1YWdlLgotY2hlY2sgaWYJCQk7IERvIHdlIGhhdmUg YW4gSUYgY29tbWFuZD8gIElmIG5vdCwgcXVpdCBub3cuCi1zZXQgdGFrZSBlcnJvciBvZmYJCTsg QmFjayB0byBub3JtYWwuCi0KLWxvY2FsIF9zZCBfc2VydmljZWRpciBfeHAgICAgICAgOyBEZWNs YXJlIGxvY2FsIHZhcmlhYmxlcy4KLQotQ09NTUVOVCAtIEMtS2VybWl0IHZlcnNpb24gNi4wIG9y IGxhdGVyIHJlcXVpcmVkLgotOwotCi1hc2cgX3hwIFx2KHhwcm9ncmFtKQotaWYgbm90IGRlZiBf eHAgYXNnIF94cCBcdihwcm9ncmFtKQotaWYgbm90IGVxdWFsICJcbShfeHApIiAiQy1LZXJtaXQi IC0KLSAgc3RvcCAxIFx2KGNtZGZpbGUpOiBUaGlzIGluaXRpYWxpemF0aW9uIGZpbGUgaXMgb25s eSBmb3IgQy1LZXJtaXQuCi1lY2hvIEV4ZWN1dGluZyBcdihjbWRmaWxlKSBmb3IgXHYoc3lzdGVt KS4uLgotaWYgPCBcdih2ZXJzaW9uKSA2MDAwMCAtCi0gIHN0b3AgMSBcdihjbWRmaWxlKTogQy1L ZXJtaXQgNi4wIG9yIGxhdGVyIHJlcXVpcmVkLgotCi1mb3J3YXJkIFx2KHN5c3RlbSkJCTsgRmly c3QgZG8gc3lzdGVtLWRlcGVuZGVudCBpdGVtcy4uLgotCi06dW5rbm93bgkJCTsgU2hvdWxkIG5v dCBoYXBwZW4KLVN0b3AgMSBFcnJvcjogU3lzdGVtIHR5cGUgdW5rbm93biEKLQotOkFlZ2lzCQkJ CTsgQXBvbGxvIEFlZ2lzIGFuZAotOlVOSVgJCQkJOyBVTklYLCBhbGwgdmVyc2lvbnMKLWFzZyBf bXlpbml0IC0KLSAgXHYoaG9tZSkubXlrZXJtcmMJCTsgQ3VzdG9taXphdGlvbiBmaWxlbmFtZQot aWYgcmVtb3RlIGZvcndhcmQgQ09NTU9OICAgICAgICA7IFNraXAgbG9jYWwtbW9kZSBpdGVtcyBp ZiAiLVIiCi1hc2cgX2RpYWxkaXIgLQotICBcdihob21lKS5rZGQJCQk7IEMtS2VybWl0IGRpYWxp bmcgZGlyZWN0b3J5Ci1hc2cgX25ldGRpciAtCi0gIFx2KGhvbWUpLmtuZAkJCTsgQy1LZXJtaXQg bmV0d29yayBkaXJlY3RvcnkKLWFzZyBfc2VydmljZWRpciAtCi0gIFx2KGhvbWUpLmtzZAkJCTsg Qy1LZXJtaXQgc2VydmljZXMgZGlyZWN0b3J5Ci1mb3J3YXJkIENPTU1PTiAgICAgICAgICAgICAg ICAgIDsgRW5kIG9mIFVOSVggc2VjdGlvbgotCi06T1M5LzY4SwkJCTsgT1MtOQotYXNnIF9teWlu aXQgLQotICBcdihob21lKS5teWtlcm1yYwkJOyBDdXN0b21pemF0aW9uIGZpbGVuYW1lCi1pZiBy ZW1vdGUgZm9yd2FyZCBDT01NT04KLWFzZyBfZGlhbGRpciAtCi0gIFx2KGhvbWUpLmtkZAkJCTsg Qy1LZXJtaXQgZGlhbGluZyBkaXJlY3RvcnkKLWFzZyBfbmV0ZGlyIC0KLSAgXHYoaG9tZSkua25k CQkJOyBDLUtlcm1pdCBuZXR3b3JrIGRpcmVjdG9yeQotYXNnIF9zZXJ2aWNlZGlyIC0KLSAgXHYo aG9tZSkua3NkCQkJOyBDLUtlcm1pdCBzZXJ2aWNlcyBkaXJlY3RvcnkKLWVsc2Ugc2V0IGZpbGUg ZGlzcGxheSBjcnQKLWZvcndhcmQgQ09NTU9OCQkJOyBFbmQgb2YgT1MtOSBzZWN0aW9uCi0KLTpW TVMJCQkJOyBWTVMgYW5kIE9wZW5WTVMKLWZvcndhcmQgQ09NTU9OCi0KLTpPUy8yCQkJCTsgS2Vy bWl0IDk1Ci06V0lOMzIKLWVjaG8gVGhpcyBpbml0aWFsaXphdGlvbiBmaWxlIGlzIG5vdCBmb3Ig dXNlIHdpdGggSzk1LgotZm9yd2FyZCBDT01NT04gICAgICAgICAgICAgICAgICA7IEVuZCBvZiBP Uy8yIHNlY3Rpb24KLQotOkFPUy9WUwkJCQk7IERhdGEgR2VuZXJhbCBBT1MvVlMKLXNldCB3aW5k b3cgMQkJCTsgU2xpZGluZyB3aW5kb3dzIGRvbid0IHdvcmsKLXNldCBmaWxlIGNoYXIgZGctaW50 ZXJuYXRpb25hbAk7IEZpbGUgY2hhcmFjdGVyLXNldAotc2V0IHhmZXIgY2hhciBsYXRpbjEJCTsg VHJhbnNmZXIgY2hhcmFjdGVyLXNldAotc2V0IGZpbGUgZGlzcGxheSBjcnQgICAgICAgICAgICA7 IEZpbGUgdHJhbnNmZXIgZmlzcGxheQotZGVmIGNsaSBwdXNoCQkJOyBFc2NhcGUgdG8gQ0xJCi1k ZWYgcmVzZXQgLQkJCTsgTWFjcm8gdG8gcmVzZXQgREcgREFTSEVSIHRlcm1pbmFsCi0gcnVuIHdy aXRlIFshYXNjaWkgMjM2IDMwNiAzMDFdCi1mb3J3YXJkIENPTU1PTiAgICAgICAgICAgICAgICAg IDsgRW5kIG9mIEFPUy9WUyBzZWN0aW9uCi0KLTpBbWlnYQkJCQk7IENvbW1vZG9yZSBBbWlnYQot ZGVmIGNscyBlY2hvIFwyN1tIXDI3WzJKCTsgQ0xTIGNvbW1hbmQgdG8gY2xlYXIgdGhlIHNjcmVl bgotc2V0IGZpbGUgY2hhciBsYXRpbjEJCTsgVXNlIExhdGluIEFscGhhYmV0IDEgZm9yIGZpbGUg dHJhbnNmZXIKLXNldCB4ZmVyIGNoYXIgbGF0aW4xCQk7IC4uLgotZm9yd2FyZCBDT01NT04gICAg ICAgICAgICAgICAgICA7IEVuZCBvZiBBbWlnYSBzZWN0aW9uCi0KLTpBdGFyaV9TVAkJCTsgQXRh cmkgU1QKLWRlZiBjbHMgZWNobyBcMjdIXDI3SgkJOyBDbGVhciBzY3JlZW4gYWBsYSBWVDUyCi1z ZXQgc2VydmVyIGRpc3BsYXkgb24JCTsgU2hvdyBmaWxlIHhmZXIgZGlzcGxheSBpbiBzZXJ2ZXIg bW9kZSB0b28KLXNldCBzZXJ2ZXIgdGltZW91dCAxNQkJOyBOb256ZXJvIHJlcXVpcmVkIGZvciBe QyBpbnRlcnJ1cHRpb24hCi1mb3J3YXJkIENPTU1PTiAgICAgICAgICAgICAgICAgIDsgRW5kIG9m IEF0YXJpIFNUIHNlY3Rpb24KLQotOk1hY2ludG9zaAkJCTsgQXBwbGUgTWFjaW50b3NoCi1zZXQg c2VydmVyIGRpc3BsYXkgb24JCTsgU2hvdyBmaWxlIHhmZXIgZGlzcGxheSBpbiBzZXJ2ZXIgbW9k ZSB0b28uCi1mb3J3YXJkIENPTU1PTgotCi06U3RyYXR1c19WT1MgICAgICAgICAgICAgICAgICAg IDsgU3RyYXR1cyBWT1MKLWFzZyBfbXlpbml0IFx2KGhvbWUpY2tlcm1vZC5pbmkKLWlmIHJlbW90 ZSBmb3J3YXJkIENPTU1PTgotYXNnIF9kaWFsZGlyIFx2KGhvbWUpY2tlcm1pdC5rZGQKLWFzZyBf bmV0ZGlyIFx2KGhvbWUpY2tlcm1pdC5rbmQKLWFzZyBfc2VydmljZWRpciBcdihob21lKWNrZXJt aXQua3NkCi1mb3J3YXJkIENPTU1PTiAgICAgICAgICAgICAgICAgIDsgRW5kIG9mIFN0cmF0dXMg Vk9TIHNlY3Rpb24KLQotOkNPTU1PTgkJCQk7IEZvciBhbGwgc3lzdGVtcwotCi07IERlZmluZSBt YWNyb3MgdGhhdCBhcmUgdXNlZnVsIHdoZW4gcnVubmluZyBDLUtlcm1pdCBpbiByZW1vdGUgbW9k ZS4KLTsgVGhlc2UgbWFjcm9zIHNlcnZlIG5vIHB1cnBvc2Ugb24gbG9jYWwtbW9kZS1vbmx5IHZl cnNpb25zIHN1Y2ggYXMKLTsgT1MvMiwgTWFjaW50b3NoLCBBbWlnYSwgYW5kIEF0YXJpIFNUIEtl cm1pdCwgc28gd2Ugc2tpcCBkZWZpbmluZyB0aGVtCi07IGZvciB0aG9zZSBzeXN0ZW1zLgotOwot aWYgbm90ID0gMCBcZmluZGV4KFx2KHN5c3RlbSksV0lOMzI6T1MvMjpNYWNpbnRvc2g6QW1pZ2E6 QXRhcmlfU1QpIC0KLSAgZm9yd2FyZCBmaWxlcwotCi07IFZUUFJJTlQgbWFjcm8uICBQcmludCBh IGZpbGUgb24geW91ciBQQydzIGxvY2FsIHByaW50ZXIuCi0KLWRlZiBWVFBSSU5UIGVjaG8gXDI3 WzVpLCB0eXBlIFwlMSwgZWNobyBcMjdbNGkKLTsgb3IgaWYgeW91ciBwcmludGVyIG5lZWRzIGEg Zm9ybWZlZWQgdG8gZm9yY2UgdGhlIHBhZ2Ugb3V0OgotOyBkZWYgVlRQUklOVCAgZGVmIGVjaG8g XDI3WzVpLCB0eXBlIFwlMSwgZWNobyBcMTJcMjdbNGkKLQotOyBNYWNyb3MgZm9yIGhvc3QtaW5p dGlhdGVkIGZpbGUgdHJhbnNmZXIgdXNpbmcgQVBDOgotOyAgIE5PVCBORUVERUQgQU5ZIE1PUkUg YmVjYXVzZSBvZiBhdXRvZG93bmxvYWQvYXV0b3VwbG9hZC4KLTsgICBSZW1vdmUgdGhlIGZvbGxv d2luZyBGT1JXQVJEIGNvbW1hbmQgdG8gcmVpbnN0YXRlIHRoZXNlIGRlZmluaXRpb25zOgotCi06 RklMRVMKLQotOyBHZXQgY3VzdG9taXphdGlvbiBhbmQgZGlyZWN0b3J5IGZpbGUgbmFtZXMuICBF bnZpcm9ubWVudCB2YXJpYWJsZXMgdGFrZQotOyBwcmVjZWRlbmNlLCBzbyB5b3UgZG8gbm90IGhh dmUgdG8gZWRpdCB0aGlzIGZpbGUgdG8gY2hhbmdlIHRoZXNlIGZpbGVuYW1lcy4KLTsKLWlmIGRl ZiBcJChDS0VSTU9EKSBhc3NpZ24gX215aW5pdCBcJChDS0VSTU9EKQotaWYgbm90IGRlZiBfbXlp bml0IGFzc2lnbiBfbXlpbml0IFx2KGhvbWUpQ0tFUk1PRC5JTkkKLQotaWYgcmVtb3RlIGZvcndh cmQgQ1VTVE9NIDsgU2tpcCBhbGwgdGhpcyBpZiAtUiBnaXZlbiBvbiBjb21tYW5kIGxpbmUKLQot aWYgZGVmIFwkKEtfTkVUX0RJUkVDVE9SWSkgYXNzaWduIF9uZXRkaXIgXCQoS19ORVRfRElSRUNU T1JZKQotaWYgbm90IGRlZiBfbmV0ZGlyIGFzc2lnbiBfbmV0ZGlyIFx2KGhvbWUpQ0tFUk1JVC5L TkQKLQotaWYgZGVmIFwkKEtfRElBTF9ESVJFQ1RPUlkpIGFzc2lnbiBfZGlhbGRpciBcJChLX0RJ QUxfRElSRUNUT1JZKQotaWYgbm90IGRlZiBfZGlhbGRpciBhc3NpZ24gX2RpYWxkaXIgXHYoaG9t ZSlDS0VSTUlULktERAotCi1DSEVDSyBESUFMCQkJOyBJcyB0aGVyZSBhIERJQUwgY29tbWFuZD8K LXhpZiBmYWlsIHsgCQkJOyBOby4KLSAgICBlY2hvIERJQUwgZGlzYWJsZWQKLSAgICBmb3J3YXJk IENVU1RPTQotfQotCi1DSEVDSyBORVRXT1JLCi14aWYgc3VjY2VzcyB7Ci0gICAgeGlmIGV4aXN0 IFxtKF9uZXRkaXIpIHsKLQlzZXQgbmV0IGRpcmVjdG9yeSBcbShfbmV0ZGlyKQotCWVjaG8geyBO ZXR3b3JrIGRpcmVjdG9yeSBpcyBcbShfbmV0ZGlyKSB9Ci0gICAgfQotfQotCi1pZiBlcSAiXHYo bmFtZSkiICJ0ZWxuZXQiIGZvcndhcmQgQ1VTVE9NCi0KLXhpZiBleGlzdCBcbShfZGlhbGRpcikg ewotICAgIHNldCBkaWFsIGRpcmVjdG9yeSBcbShfZGlhbGRpcikKLSAgICBlY2hvIHsgRGlhbCBk aXJlY3RvcnkgaXMgXG0oX2RpYWxkaXIpIH0KLX0KLQotQ09NTUVOVCAtIFNlcnZpY2VzIGRpcmVj dG9yeQotCi1pZiBkZWYgXCQoS19TRVJWSUNFX0RJUkVDVE9SWSkgYXNzaWduIF9zZXJ2aWNlZGly IFwkKEtfU0VSVklDRV9ESVJFQ1RPUlkpCi1pZiBub3QgZGVmIF9zZXJ2aWNlZGlyIGFzc2lnbiBf c2VydmljZWRpciBcdihob21lKUNLRVJNSVQuS1NECi0KLTsgSWYgbm8gc2VydmljZXMgZGlyZWN0 b3J5IGlzIGZvdW5kIHNraXAgYWxsIHRoZSBiaWcgbWFjcm8gZGVmaW5pdGlvbnMgYW5kCi07IGdv IHN0cmFpZ2h0IHRvIHRoZSBib3R0b20sIHdoZXJlIHdlIGV4ZWN1dGUgdGhlIGN1c3RvbWl6YXRp b24gZmlsZS4KLQotaWYgbm90IGV4aXN0IFxtKF9zZXJ2aWNlZGlyKSBmb3J3YXJkIGN1c3RvbQot Ci1lY2hvIHsgU2VydmljZXMgZGlyZWN0b3J5IGlzIFxtKF9zZXJ2aWNlZGlyKX0KLQotZGVmIE1B WF9TVkNTIDIwMCAgICAgICAgICAgICAgIDsgQWRqdXN0IHRoaXMgaWYgeW91IGhhdmUgbW9yZSBl bnRyaWVzCi1kZWZpbmUgX3NkIDAgICAgICAgICAgICAgICAgICAgOyBBc3N1bWUgbm8gc2Vydmlj ZXMgZGlyZWN0b3J5Ci1vcGVuIHJlYWQgXG0oX3NlcnZpY2VkaXIpICAgICAgOyBUcnkgdG8gb3Bl biBzZXJ2aWNlcyBkaXJlY3RvcnkgZmlsZQoteGlmIHN1Y2Nlc3MgewotICAgIGRlY2xhcmUgXCZk W1xtKE1BWF9TVkNTKV0gIDsgSXQncyBvcGVuLCBkZWNsYXJlIGRpcmVjdG9yeSBhcnJheQotICAg IGZvciBcJWkgMSBcbShNQVhfU1ZDUykgMSB7IDsgUmVhZCB0aGUgbGluZXMgaW50byB0aGUgYXJy YXkKLQlyZWFkIFwmZFtcJWldCi0JaWYgZmFpbCBicmVhawotICAgIH0KLSAgICBjbG9zZSByZWFk Ci0gICAgeGlmID4gXCVpICBcbShNQVhfU1ZDUykgewotCWVjaG8gVG9vIG1hbnkgZW50cmllcyBp biBzZXJ2aWNlcyBkaXJlY3RvcnkKLQllY2hvIHsgTWF4aW11bSBpcyBcbShNQVhfU1ZDUykufQot CWVjaG8geyBDaGFuZ2UgZGVmaW5pdGlvbiBvZiBNQVhfU1ZDUyBpbiBcdihjbWRmaWxlKSB0byBh bGxvdyBtb3JlLiB9Ci0JZWNobyB7IFNlcnZpY2VzIGRpcmVjdG9yeSBkaXNhYmxlZC59Ci0gICAg fSBlbHNlIHsKLSAgICAgICAgYXNnIFwmZFswXSBcZmV2YWwoXCVpIC0gMSkKLSAgICAgICAgZGVm aW5lIF9zZCAxCi0gICAgfQotfQotCi14aWYgbm90IFxtKF9zZCkgewotICAgIGRlZiBhY2Nlc3Mg ZWNobyB7IFNlcnZpY2VzIGRpcmVjdG9yeSBub3QgYXZhaWxhYmxlLn0KLSAgICBhc2cgbGlzdCBc bShhY2Nlc3MpCi19IGVsc2UgewotICAgIGRlZiBGSU5EIHsKLQlzZXQgY2FzZSBvZmYKLQlmb3Ig XCVpIDEgXCZkWzBdIDEgewotCSAgICBpZiBlcSB7XCUxfSB7XGZzdWJzdHIoXCZkW1wlaV0sMSxc ZmxlbihcJTEpKX0gYnJlYWsKLQl9Ci0JaWYgbm90ID4gXCVpIFwmZFswXSByZXR1cm4gXCZkW1wl aV0KLSAgICB9Ci0gICAgZGVmIExJU1QgewotCXhpZiA+IFx2KGFyZ2MpIDEgewotCSAgICBkbyBm aW5kIFwlMQotCSAgICBpZiBkZWYgXHYocmV0dXJuKSBlY2hvIFx2KHJldHVybikKLQkgICAgZWxz ZSBlY2hvIFwlMTogTm90IGZvdW5kCi0JfSBlbHNlIHsKLQkgICAgZWNobyBcJmRbMF0gaXRlbXMg aW4gc2VydmljZXMgZGlyZWN0b3J5OgotCSAgICBmb3IgXCVpIDEgXCZkWzBdIDEgeyBlY2hvIFxm Y29udChcJmRbXCVpXSkgfQotCX0KLSAgICB9Ci0gICAgZGVmIFNQTElUIHsgYXNnIF93b3JkMSBc JTEsIGFzZyBfd29yZDIgXCUyIH0KLSAgICBkZWYgRE9BQ0NFU1MgeyAgICAgICAgICAgICAgIDsg KFVzZWQgaW50ZXJuYWxseSBieSBBQ0NFU1MgbWFjcm8pCi0JZG8gXCU1IFwlNiBcJTcgXCU4IFwl OSAgIDsgRG8gdGhlIGNvbm5lY3Rpb24gbWFjcm8KLQlpZiBmYWlsIGVuZCAxCi0gICAgICAgIHNw bGl0IFwlMyAgICAgICAgICAgICAgICA7IEdldCB3b3JkcyBmcm9tIFwlMwotCWFzZyBcJTMgXG0o X3dvcmQxKQotCWFzZyBcJTIgXG0oX3dvcmQyKQotCWRvIFwlMyBcJTQge1wlMX0gXCUyICAgICA7 IExvZ2luIG1hY3JvLCB1c2VyaWQsIHBhc3N3b3JkLCBwcm9tcHQKLSAgICB9Ci0gICAgZGVmIEFD Q0VTUyB7Ci0JaWYgbm90IGRlZmluZWQgXCUxIGVuZCAxIGFjY2VzcyB3aGF0PyAgICAgICAgOyBD aGVjayBzZXJ2aWNlCi0JZG8gZmluZCBcJTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOyBMb29rIGl0IHVwCi0JaWYgc3VjY2VzcyBkb2FjY2VzcyB7XCUyfSBcdihyZXR1cm4pICAg ICAgICAgOyBPSywgdHJ5IGl0Ci0JZWxzZSBlbmQgMSAiXCUxIiBub3QgaW4gc2VydmljZXMgZGly ZWN0b3J5ICAgOyBOb3QgZm91bmQKLQlpZiBmYWlsIGVuZCAxICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7IERPQUNDRVNTIGZhaWxlZD8KLQl4aWYgZXEgXHYoY21kbGV2ZWwpIDEgewot CSAgICBlY2hvCi0JICAgIGVjaG8gQUNDRVNTOiBMb2dpbiBzdWNjZWVkZWQgLSBDT05ORUNUaW5n Li4uCi0gICAgICAgICAgICBzaG93IGVzY2FwZQotICAgICAgICAgICAgb3V0cHV0IFwxMwotCSAg ICBjb25uZWN0IC9xdWlldGx5Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLTpDT05ORUNUSU9OIDsg TWFjcm9zIGZvciBtYWtpbmcgY29ubmVjdGlvbnMKLQotQ09NTUVOVCAtIFNFUklBTCBtYWNyby4g IEFyZ3VtZW50czoKLTsgXCUxID0gZGV2aWNlIG5hbWUKLTsgXCUyID0gc3BlZWQKLTsKLWRlZiBT RVJJQUwgewotICAgIGlmIDwgXHYoYXJnYykgMyAgICAgICAgICAgICAgICAgICAgICAgICA7IEFs bCBhcmd1bWVudHMgZ2l2ZW4/Ci0gICAgICBlbmQgMSBVc2FnZTogU0VSSUFMIGRldmljZSBzcGVl ZCAgICAgIDsgTm8uCi0gICAgc2V0IGxpbmUgXCUxICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsgT0ssIHRyeSB0byBTRVQgTElORS4KLSAgICBpZiBmYWlsdXJlIC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgOyBJZiB0aGlzIGZhaWxlZCwKLSAgICAgIGVuZCAxIENhbid0IG9wZW4gZGV2 aWNlOiBcJTEgICAgICAgICAgOyBwcmludCBtZXNzYWdlIGFuZCBxdWl0LgotICAgIHNldCBzcGVl ZCBcJTIgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFRyeSB0byBzZXQgdGhlIHNwZWVkLgot ICAgIGlmIGZhaWwgZW5kIDEgVW5zdXBwb3J0ZWQgc3BlZWQ6IFwlMiAgICA7IEZhaWxlZC4KLSAg ICBlY2hvIENvbm5lY3Rpb24gc3VjY2Vzc2Z1bC4gICAgICAgICAgICAgOyBTdWNjZWVkZWQuCi19 Ci0KLUNPTU1FTlQgLSBORVQgbWFjcm8uICBBcmd1bWVudHM6Ci07IFwlMSA9IG5ldHdvcmsgdHlw ZQotOyBcJTIgPSBob3N0IG5hbWUgb3IgYWRkcmVzcwotOwotZGVmIE5FVCB7Ci0gICAgaWYgPCBc dihhcmdjKSAzIGVuZCAxIFVzYWdlOiBORVQgbmV0d29yayBob3N0Ci0gICAgc2V0IG5ldHdvcmsg dHlwZSBcJTEKLSAgICBpZiBmYWlsIGVuZCAxIHVuc3VwcG9ydGVkIG5ldHdvcms6IFwlMQotICAg IHNldCBsb2dpbiB1c2VyICAgICAgICAgICAgICAgIDsgRG9uJ3Qgc2VuZCB1c2VyIElELgotICAg IHNldCBob3N0IFwlMgotICAgIGlmIGZhaWwgZW5kIDEgQ2FuJ3QgcmVhY2ggaG9zdDogXCUyCi0g ICAgZWNobyBDb25uZWN0aW9uIHN1Y2Nlc3NmdWwuCi19Ci0KLUNPTU1FTlQgLSBDQUxMIG1hY3Jv LiAgQXJndW1lbnRzOgotOwotOyBcJTEgPSBtb2RlbSB0eXBlCi07IFwlMiA9IGRldmljZSBuYW1l Ci07IFwlMyA9IHNwZWVkCi07IFwlNCA9IHBob25lIG51bWJlcgotOwotZGVmIENBTEwgewotICAg IGlmIDwgXHYoYXJnYykgNSAtICAgICAgICAgOyBBbGwgYXJndW1lbnRzIHByZXNlbnQ/Ci0gICAg ICBlbmQgMSBVc2FnZTogQ0FMTCBtb2RlbSBkZXZpY2Ugc3BlZWQgbnVtYmVyCi0gICAgeGlmIG5v dCBlcXVhbCB7XHYobW9kZW0pfSB7XCUxfSB7IDsgU2V0IG1vZGVtIHR5cGUKLSAgICAgICAgc2V0 IG1vZGVtIFwlMQotICAgICAgICBpZiBmYWlsIGVuZCAxIHVua25vd24gbW9kZW0gdHlwZTogXCUx Ci0gICAgfQotICAgIHhpZiBub3QgZXF1YWwge1x2KGxpbmUpfSB7XCUyfSB7IDsgQ29tbXVuaWNh dGlvbiBkZXZpY2UKLSAgICAgICAgc2V0IGxpbmUgXCUyCi0gICAgICAgIGlmIGZhaWwgZW5kIDEg Y2FuJ3Qgb3BlbiBkZXZpY2U6IFwlMgotICAgIH0KLSAgICB4aWYgbm90IGVxdWFsIHtcdihzcGVl ZCl9IHtcJTN9IHsgOyBDb21tdW5pY2F0aW9uIHNwZWVkCi0gICAgICAgIHNldCBzcGVlZCBcJTMK LSAgICAgICAgaWYgZmFpbCBlbmQgMSB1bnN1cHBvcnRlZCBzcGVlZDogXCUzCi0gICAgfQotICAg IGRpYWwgXCU0ICAgICAgICAgICAgICAgICAgOyBEaWFsIHRoZSBudW1iZXIKLSAgICBpZiBmYWls IGVuZCAxIENhbid0IHBsYWNlIGNhbGw6IFwlNAotICAgIGVuZCAwIENvbm5lY3Rpb24gc3VjY2Vz c2Z1bC4KLX0KLQotQ09NTUVOVCAtIFRDUENBTEwgbWFjcm8uICBBcmd1bWVudHM6Ci07Ci07IFwl MSA9IHNlcnZlciBuYW1lOnBvcnQKLTsgXCUyID0gbW9kZW0gdHlwZQotOyBcJTMgPSBwaG9uZSBu dW1iZXIKLTsKLWRlZiBUQ1BDQUxMIHsKLSAgICBpZiA8IFx2KGFyZ2MpIDQgLSAgICAgICAgIDsg QWxsIGFyZ3VtZW50cyBwcmVzZW50PwotICAgICAgZW5kIDEgVXNhZ2U6IFRDUENBTEwgc2VydmVy Wzpwb3J0XSBtb2RlbSBudW1iZXIKLSAgICBzZXQgbmV0IHR5cGUgdGNwL2lwICAgICAgIDsgV2hp Y2ggbmV0d29yayB0byB1c2UKLSAgICBpZiBmYWlsIGVuZCAxIHVuc3VwcG9ydGVkIG5ldHdvcms6 IHRjcC9pcAotICAgIHNldCBob3N0IFwlMSAgICAgICAgICAgICAgOyBBY2Nlc3Mgc2VydmVyIGFu ZCBwb3J0Ci0gICAgaWYgZmFpbCBlbmQgMSBjYW4ndCBhY2Nlc3Mgc2VydmVyIFwlMQotICAgIHNl dCBtb2RlbSBcJTIgICAgICAgICAgICAgOyBTZXQgbW9kZW0gdHlwZQotICAgIGlmIGZhaWwgZW5k IDEgdW5rbm93biBtb2RlbSB0eXBlOiBcJTIKLSAgICBkaWFsIFwlMyAgICAgICAgICAgICAgICAg IDsgRGlhbCB0aGUgbnVtYmVyCi0gICAgaWYgZmFpbCBlbmQgMSBDYW4ndCBwbGFjZSBjYWxsOiBc JTMKLSAgICBlbmQgMCBDb25uZWN0aW9uIHN1Y2Nlc3NmdWwuCi19Ci0KLUNPTU1FTlQgLSBTUFJJ TlQgbWFjcm8uICBBcmd1bWVudHM6Ci07IFwlMSA9IFNlcnZpY2UgbmFtZSBvciBhZGRyZXNzCi07 Ci1kZWYgU1BSSU5UIHsKLSAgICBpZiA8IFx2KGFyZ2MpIDIgZW5kIDEgVXNhZ2U6IFwlMCBzZXJ2 aWNlCi0gICAgc2V0IGlucHV0IHRpbWVvdXQgcHJvY2VlZAotICAgIG91dHB1dCBARFwxMwotICAg IGlucHV0IDEwIFRFUk1JTkFMPQotICAgIGlmIGZhaWwgZW5kIDEgTm8gdGVybWluYWwgcHJvbXB0 Ci0gICAgb3V0IEQxXDEzCi0gICAgaW5wIDEwIEAKLSAgICBpZiBmYWlsIGVuZCAxIE5vIGF0c2ln biBwcm9tcHQKLSAgICBvdXRwdXQgYyBcJTFcMTMKLSAgICBpbnB1dCAxMCBDT05ORUNURUQKLSAg ICBpZiBmYWlsIGVuZCAxIENhbid0IGFjY2VzcyBcJTEgZnJvbSBTcHJpbnROZXQKLX0KLQotQ09N TUVOVCAtIFVMT0dJTiBtYWNyby4gIEZvciBsb2dnaW5nIGludG8gc3lzdGVtcyB3aGVyZSB1c2Vy IElEIGlzIHJlcXVpcmVkCi07IGJ1dCB0aGVyZSBpcyBubyBwYXNzd29yZC4gIEFyZ3VtZW50czoK LTsgXCUxID0gVU5JWCB1c2VyIElECi07Ci1kZWZpbmUgVUxPR0lOIHsKLSAgICBpZiA8IFx2KGFy Z2MpIDIgZW5kIDEgVXNhZ2U6IFwlMCB1c2VyaWQKLSAgICBzZXQgaW5wdXQgdGltZW91dCBwcm9j ZWVkICAgICA7IEhhbmRsZSB0aW1lb3V0cyBvdXJzZWx2ZXMKLSAgICBzZXQgY2FzZSBvbiAgICAg ICAgICAgICAgICAgICA7IENhc2UgaXMgaW1wb3J0YW50IGluIFVOSVgKLSAgICBtaW5wdXQgNSBs b2dpbjogVXNlcm5hbWU6IHtVc2VyIElEOn0ge1VzZXIgTmFtZTp9Ci0gICAgb3V0IFwlMVwxMyAg ICAgICAgICAgICAgICAgICAgOyBTZW5kIHVzZXJuYW1lLCBjYXJyaWFnZSByZXR1cm4KLSAgICBl bmQgMAotfQotCi1DT01NRU5UIC0gVk1TTE9HSU4gbWFjcm8uICBBcmd1bWVudHM6Ci07IFwlMSA9 IFZNUyB1c2VyIElECi07IFwlMiA9IFBhc3N3b3JkLiAgSWYgcGFzc3dvcmQgbm90IHN1cHBsaWVk LCBpdCBpcyBwcm9tcHRlZCBmb3IuCi07IFwlMyA9IFN5c3RlbSBwcm9tcHQuICBJZiBvbWl0dGVk IGEgZGVmYXVsdCBpcyBzdXBwbGllZC4KLTsKLWRlZmluZSBWTVNMT0dJTiB7Ci0gICAgaWYgPCBc dihhcmdjKSAyIGVuZCAxIFVzYWdlOiBcJTAgdXNlcmlkIFsgcGFzc3dvcmQgWyBwcm9tcHQgXSBd Ci0gICAgd2hpbGUgbm90IGRlZmluZWQgXCUyIHsKLSAgICAgICAgYXNrcSBcJTIgeyBcJTEncyBw YXNzd29yZDogfQotICAgIH0KLSAgICBzZXQgcGFyaXR5IG5vbmUgICAgICAgICAgICAgICA7IFNl dCBjb21tdW5pY2F0aW9uIHBhcmFtZXRlcnMKLSAgICBzZXQgZHVwbGV4IGZ1bGwKLSAgICBzZXQg aGFuZHNoYWtlIG5vbmUKLSAgICBzZXQgaW5wdXQgdGltZW91dCBwcm9jZWVkICAgICA7IEhhbmRs ZSB0aW1lb3V0cyBvdXJzZWx2ZXMKLSAgICBpbiA1IFVzZXJuYW1lOiAgICAgICAgICAgICAgICA7 IElzIHByb21wdCBhbHJlYWR5IHRoZXJlPwotICAgIHhpZiBmYWlsIHsgICAgICAgICAgICAgICAg ICAgIDsgTm8uCi0gICAgICAgIGZvciBcJWkgMSAzIDEgeyAgICAgICAgICAgOyBUcnkgMyB0aW1l cyB0byBnZXQgaXQuCi0gICAgICAgICAgICBvdXQgXDEzICAgICAgICAgICAgICAgOyBTZW5kIGNh cnJpYWdlIHJldHVybgotICAgICAgICAgICAgaW4gNSBVc2VybmFtZTogICAgICAgIDsgTG9vayBm b3IgcHJvbXB0Ci0gICAgICAgICAgICBpZiBzdWNjZXNzIGJyZWFrICAgICAgOyBTdWNjZXNzLCBn byBsb2cgaW4KLSAgICAgICAgfQotICAgICAgICBpZiA+IFwlaSAzIGVuZCAxIE5vIFVzZXJuYW1l IHByb21wdAotICAgIH0KLSAgICBvdXQgXCUxXDEzICAgICAgICAgICAgICAgICAgICA7IFNlbmQg dXNlcm5hbWUsIGNhcnJpYWdlIHJldHVybgotICAgIGlucCA1IFBhc3N3b3JkOiAgICAgICAgICAg ICAgIDsgV2FpdCA1IHNlYyBmb3IgdGhpcyBwcm9tcHQKLSAgICBpZiBmYWlsIGVuZCAxIE5vIHBh c3N3b3JkIHByb21wdAotICAgIHBhdXNlICAgICAgICAgICAgICAgICAgICAgICAgIDsgV2FpdCBh IHNlYwotICAgIG91dCBcJTJcMTMgICAgICAgICAgICAgICAgICAgIDsgU2VuZCBwYXNzd29yZAot ICAgIHhpZiBub3QgZW11bGF0aW9uIHsgICAgICAgICAgIDsgTm8gZW11bGF0b3IgYnVpbHQgaW4/ Ci0gICAgICAgIHNldCBpbnB1dCBlY2hvIG9mZiAgICAgICAgOyBQcm90ZWN0IHRlcm1pbmFsIGZy b20gdGhpcwotICAgICAgICBtaW5wdXQgMTAge1wyN1p9IHtcMjdbY30ge1wyN1swY30gOyBHZXQg dGVybWluYWwgSUQgcXVlcnkKLSAgICAgICAgeGlmIHN1Y2Nlc3MgeyAgICAgICAgICAgICAgICAg ICAgIDsgR290IG9uZQotICAgICAgICAgICAgb3V0cHV0IFwyN1tcPzFjICAgICAgICAgICAgICAg OyBTZW5kIFZUMTAwIHRlcm1pbmFsIElECi0gICAgICAgICAgICBpbiAyIFwyN1s2biAgICAgICAg ICAgICAgICAgICA7IFNjcmVlbiBkaW1lbnNpb24gcXVlcnk/Ci0gICAgICAgICAgICBpZiBzdWNj IG91dCBcMjdbXHYocm93cyk7XHYoY29scylSIDsgU2VuZCBkaW1lbnNpb25zCi0gICAgICAgIH0K LSAgICAgICAgc2V0IGlucHV0IGVjaG8gb24gICAgICAgICA7IEVjaG8gaW5wdXQgYWdhaW4KLSAg ICB9Ci0gICAgaWYgbm90IGRlZiBcJTMgLSAgICAgICAgICAgICAgOyBJZiB3ZSB3ZXJlIG5vdCBn aXZlbiBhIHByb21wdAotICAgICAgYXNnIFwlMyB7XHYocHJvbXB0KX0gICAgICAgIDsgdXNlIHRo ZSBTRVQgTE9HSU4gUFJPTVBUIHZhbHVlCi0gICAgaWYgbm90IGRlZiBcJTMgLSAgICAgICAgICAg ICAgOyBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIGEgcHJvbXB0Ci0gICAgICBhc2cgXCUzIHtcMTMk XDMyfSAgICAgICAgICAgOyB1c2UgdGhpcyBvbmUgYXMgdGhlIGRlZmF1bHQKLSAgICByZWlucCAw IFwlMyAgICAgICAgICAgICAgICAgICA7IERpZCB3ZSBJTlBVVCB0aGUgcHJvbXB0IGFscmVhZHk/ Ci0gICAgaWYgZmFpbCBpbnAgNjAgXCUzICAgICAgICAgICAgOyBObywgbG9vayBub3cuCi0gICAg aWYgZmFpbCBlbmQgMQotfQotCi1DT01NRU5UIC0gVU5JWExPR0lOIG1hY3JvLiAgQXJndW1lbnRz OgotOyBcJTEgPSBVTklYIHVzZXIgSUQKLTsgXCUyID0gUGFzc3dvcmQuICBJZiBwYXNzd29yZCBu b3Qgc3VwcGxpZWQsIGl0IGlzIHByb21wdGVkIGZvci4KLTsgXCUzID0gU3lzdGVtIHByb21wdC4g IElmIG9taXR0ZWQgYSBkZWZhdWx0IGlzIHN1cHBsaWVkLgotOwotZGVmaW5lIFVOSVhMT0dJTiB7 Ci0gICAgbG9jYWwgXCVtIFwlaQotICAgIGlmIDwgXHYoYXJnYykgMiAtCi0gICAgICBlbmQgMSBV c2FnZTogXCUwIHVzZXJpZCBbIHBhc3N3b3JkIFsgcHJvbXB0IF0gXQotICAgIHdoaWxlIG5vdCBk ZWZpbmVkIFwlMiB7Ci0gICAgICAgIGFza3EgXCUyIHsgXCUxJ3MgcGFzc3dvcmQ6IH0KLSAgICB9 Ci0gICAgc2V0IGlucHV0IGVjaG8gb24KLSAgICBzZXQgcGFyaXR5IG5vbmUgICAgICAgICAgICAg ICA7IFNldCBjb21tdW5pY2F0aW9uIHBhcmFtZXRlcnMuCi0gICAgc2V0IGR1cGxleCBmdWxsCi0g ICAgc2V0IGhhbmRzaGFrZSBub25lCi0gICAgc2V0IGlucHV0IHRpbWVvdXQgcHJvY2VlZCAgICAg OyBIYW5kbGUgdGltZW91dHMgb3Vyc2VsdmVzCi0gICAgc2V0IGNhc2Ugb24gICAgICAgICAgICAg ICAgICAgOyBDYXNlIGlzIGltcG9ydGFudCBpbiBVTklYCi0gICAgZGVmIFwlbSAxMCAgICAgICAg ICAgICAgICAgICAgOyBXYWl0aW5nIHRpbWUgZm9yIElOUFVUCi0gICAgZm9yIFwlaSAxIDUgMSB7 Ci0gICAgICAgIG1pbnB1dCBcJW0gbG9naW46IHtzc3dvcmQ6fSB7UGFzc3dvcmQgZm9yIFwlMTp9 Ci0JaWYgc3VjY2VzcyBicmVhawotCW91dHB1dCBcQlwxMwotICAgICAgICBcJW0gOjo9IDYtXCUx Ci0gICAgfQotICAgIGlmID4gXCVpIDUgZW5kIDEge05vIHJlc3BvbnNlIGZyb20gaG9zdH0KLSAg ICB4aWYgPSBcdihtaW5wdXQpIDEgewkgIDsgSGF2ZSB1c2VybmFtZSBwcm9tcHQKLQlvdXRwdXQg XCUxXDEzCQkgIDsgU2VuZCB1c2VybmFtZQotICAgICAgICBtaW5wdXQgNSB7c3N3b3JkOn0ge3Nz d29yZCBmb3IgXCUxOn0gOyBXYWl0IGZvciBwYXNzd29yZCBwcm9tcHQKLQlpZiBmYWlsIGVuZCAx IHtObyBwYXNzd29yZCBwcm9tcHR9Ci0gICAgfQotICAgIHBhdXNlICAgICAgICAgICAgICAgICAg ICAgICAgIDsgV2FpdCBhIHNlYwotICAgIG91dCBcJTJcMTMgICAgICAgICAgICAgICAgICAgIDsg U2VuZCBwYXNzd29yZAotICAgIGlmIG5vdCBkZWYgXCUzIC0gICAgICAgICAgICAgIDsgSWYgd2Ug d2VyZSBub3QgZ2l2ZW4gYSBwcm9tcHQKLSAgICAgIGFzZyBcJTMge1x2KHByb21wdCl9ICAgICAg ICA7IHVzZSB0aGUgU0VUIExPR0lOIFBST01QVCB2YWx1ZQotICAgIGlmIG5vdCBkZWYgXCUzIC0g ICAgICAgICAgICAgIDsgSWYgd2Ugc3RpbGwgZG9uJ3QgaGF2ZSBhIHByb21wdAotICAgICAgYXNn IFwlMyB7XDEwJCB9ICAgICAgICAgICAgIDsgdXNlIHRoaXMgb25lIGFzIHRoZSBkZWZhdWx0Ci0g ICAgcmVpbnAgMCBcJTMgICAgICAgICAgICAgICAgICAgOyBEaWQgd2UgSU5QVVQgdGhlIHByb21w dCBhbHJlYWR5PwotICAgIGlmIGZhaWwgaW5wIDYwIFwlMyAgICAgICAgICAgIDsgTm8sIGxvb2sg bm93LgotICAgIGlmIGZhaWwgZW5kIDEKLX0KLQotQ09NTUVOVCAtIFZNTElORUxPR0lOIG1hY3Jv LiAgQXJndW1lbnRzOgotOyBcJTEgPSBVc2VyIElECi07IFwlMiA9IFBhc3N3b3JkCi07Ci1kZWZp bmUgVk1MSU5FTE9HSU4gewotICAgIGlmIDwgXHYoYXJnYykgMiAtCi0gICAgICBlbmQgMSBVc2Fn ZTogXCUwIHVzZXJpZCBbIHBhc3N3b3JkIF0KLSAgICB3aGlsZSBub3QgZGVmaW5lZCBcJTIgewot ICAgICAgICBhc2txIFwlMiB7IFwlMSdzIHBhc3N3b3JkOiB9Ci0gICAgfQotICAgIHNldCBwYXJp dHkgbWFyayAgICAgICAgICAgICAgIDsgU2V0IGNvbW11bmljYXRpb24gcGFyYW1ldGVycwotICAg IHNldCBmbG93IG5vbmUKLSAgICBzZXQgaGFuZHNoYWtlIHhvbgotICAgIHNldCBkdXBsZXggaGFs ZgotICAgIHNldCBpbnB1dCB0aW1lb3V0IHF1aXQgICAgICAgIDsgRG9uJ3QgYm90aGVyIHdpdGgg SUYgRkFJTFVSRQotICAgIGlucHV0IDEwIEJSRUFLIEtFWSAgICAgICAgICAgIDsgTG9vayBmb3Ig QlJFQUsgS0VZIHByb21wdAotICAgIHBhdXNlIDEgICAgICAgICAgICAgICAgICAgICAgIDsgV2Fp dCBhIHNlY29uZAotICAgIG91dHB1dCBcQiAgICAgICAgICAgICAgICAgICAgIDsgU2VuZCBCUkVB SwotICAgIGlucHV0IDEwIC5cMTcsIG91dHB1dCBsb2dvbiBcJTFcMTMgICAgOyBOb3cgbG9nIGlu Ci0gICAgaW5wdXQgMTAgLlwxNywgb3V0cHV0IFwlMlwxMyAgICAgICAgICA7IFNlbmQgcGFzc3dv cmQKLSAgICBpbnB1dCAxMCAuXDE3LCBvdXRwdXQgXDEzICAgICAgICAgICAgIDsgU2VuZCBjYXJy aWFnZSByZXR1cm4KLSAgICBpbnB1dCAxMCAuXDE3LCBvdXRwdXQgXDEzICAgICAgICAgICAgIDsg U2VuZCBhbm90aGVyIG9uZQotICAgIGVuZCAwCi19Ci0KLUNPTU1FTlQgLSBWTUZVTExPR0lOIG1h Y3JvLiAgQXJndW1lbnRzOgotOyBcJTEgPSBVc2VyIElECi07IFwlMiA9IFBhc3N3b3JkCi07Ci1k ZWZpbmUgVk1GVUxMT0dJTiB7Ci0gICAgaWYgPCBcdihhcmdjKSAyIC0KLSAgICAgIGVuZCAxIFVz YWdlOiBcJTAgdXNlcmlkIFsgcGFzc3dvcmQgXQotICAgIHdoaWxlIG5vdCBkZWZpbmVkIFwlMiB7 Ci0gICAgICAgIGFza3EgXCUyIHsgXCUxJ3MgcGFzc3dvcmQ6IH0KLSAgICB9Ci0gICAgc2V0IGlu cHV0IHRpbWVvdXQgcXVpdCAgICAgIDsgUXVpdCBpZiBJTlBVVCBmYWlscwotICAgIHNldCBwYXJp dHkgZXZlbiAgICAgICAgICAgICA7IFNldCBjb21tdW5pY2F0aW9uIHBhcmFtZXRlcnMKLSAgICBz ZXQgZHVwbGV4IGZ1bGwKLSAgICBzZXQgaGFuZHNoYWtlIG5vbmUKLSAgICBzZXQgZmxvdyB4b24v eG9mZgotICAgIG91dCBcMTMgICAgICAgICAgICAgICAgICAgICA7IFNlbmQgY2FycmlhZ2UgcmV0 dXJuCi0gICAgaW5wIDUgVEVSTUlOQUwgVFlQRTogICAgICAgIDsgR2V0IHRlcm1pbmFsLXR5cGUg cHJvbXB0Ci0gICAgb3V0IHZ0LTEwMFwxMyAgICAgICAgICAgICAgIDsgSnVzdCBzZW5kICJ2dC0x MDAiCi0gICAgaW5wIDIwIFJVTk5JTkcgICAgICAgICAgICAgIDsgR2V0IFJVTk5JTkcgbWVzc2Fn ZQotICAgIHBhdSAxICAgICAgICAgICAgICAgICAgICAgICA7IFdhaXQgb25lIHNlY29uZAotICAg IG91dCBcJTFcOVwlMlwxMyAgICAgICAgICAgICA7IFNlbmQgdXNlciBJRCwgdGFiLCBwYXNzd29y ZAotICAgIG91dCBcMTNcMTMgICAgICAgICAgICAgICAgICA7IFR3byBtb3JlIGNhcnJpYWdlIHJl dHVybnMKLSAgICBlbmQgMAotfQotCi1DT01NRU5UIC0gQ0lTTE9HSU4gbWFjcm8uICBBcmd1bWVu dHM6Ci07IFwlMSA9IENvbXB1U2VydmUgVXNlciBJRAotOyBcJTIgPSBQYXNzd29yZAotOyBcJTMg PSBQcm9tcHQKLTsKLWRlZmluZSBDSVNMT0dJTiB7Ci0gICAgaWYgPCBcdihhcmdjKSAyIC0KLSAg ICAgIGVuZCAxIFVzYWdlOiBcJTAgdXNlcmlkIFsgcGFzc3dvcmQgWyBwcm9tcHQgXSBdCi0gICAg d2hpbGUgbm90IGRlZmluZWQgXCUyIHsKLSAgICAgICAgYXNrcSBcJTIgeyBcJTEncyBwYXNzd29y ZDogfQotICAgIH0KLSAgICBzZXQgdGVybWluYWwgYnl0ZXNpemUgNyAgICAgOyBObyA4LWJpdCBj aGFyYWN0ZXJzCi0gICAgc2V0IGlucHV0IHRpbWVvdXQgcXVpdCAgICAgIDsgU2tpcCB0aGUgSUYg RkFJTFVSRSdzCi0gICAgb3V0cHV0IFwxMyAgICAgICAgICAgICAgICAgIDsgU2VuZCBpbml0aWFs IGNhcnJpYWdlIHJldHVybgotICAgIGlucHV0IDUgSG9zdCBOYW1lOiAgICAgICAgICA7IExvb2sg Zm9yIEhvc3QgTmFtZSBwcm9tcHQKLSAgICBvdXRwdXQgY2lzXDEzICAgICAgICAgICAgICAgOyBT ZW5kICJjaXMiIGFuZCBjYXJyaWFnZSByZXR1cm4KLSAgICBpbnB1dCA1IFVzZXIgSUQ6ICAgICAg ICAgICAgOyBMb29rIGZvciBVc2VyIElEIHByb21wdAotICAgIG91dHB1dCBcJTFcMTMgICAgICAg ICAgICAgICA7IFNlbmQgSUQgYW5kIGNhcnJpYWdlIHJldHVybgotICAgIGlucHV0IFBhc3N3b3Jk OiAgICAgICAgICAgICA7IExvb2sgZm9yIFBhc3N3b3JkIHByb21wdAotICAgIG91dHB1dCBcJTJc MTMgICAgICAgICAgICAgICA7IFNlbmQgcGFzc3dvcmQgYW5kIENSCi0gICAgaWYgbm90IGRlZiBc JTMgYXNnIFwlMyBcdihwcm9tcHQpCi0gICAgaWYgbm90IGRlZiBcJTMgYXNnIFwlMyB7Q29tcHVT ZXJ2ZSBJbmZvcm1hdGlvbiBTZXJ2aWNlfQotICAgIGlucHV0IDMwIFwlMwotICAgIGVuZCAwCi19 Ci0KLUNPTU1FTlQgLSBET1dMT0dJTiBtYWNyby4gIEFyZ3VtZW50czoKLTsgXCUxID0gRG93IEpv bmVzIFBhc3N3b3JkCi07Ci1kZWZpbmUgRE9XTE9HSU4gewotICAgIHdoaWxlIG5vdCBkZWZpbmVk IFwlMSB7ICAgICAgICAgICAgICA7IEdldCBwYXNzd29yZAotICAgICAgICBhc2txIFwlMSB7IERv dyBKb25lcyBwYXNzd29yZDogfQotICAgIH0KLSAgICBzZXQgaW5wdXQgdGltZW91dCBwcm9jZWVk Ci0gICAgaW5wdXQgMjAgU0VSVklDRSBQTEVBU0VcP1w/XD9cPyAgICAgIDsgTG9vayBmb3IgRG93 IHByb21wdAotICAgIGlmIGZhaWwgZW5kIDEgTm8gc2VydmljZSBwcm9tcHQKLSAgICBvdXQgZGpu clwxMyAgICAgICAgICAgICAgICAgICAgICAgICAgOyBTZWxlY3QgREpOUgotICAgIGlucHV0IDEw IEBAQEBAQEBAICAgICAgICAgICAgICAgICAgICAgICAgOyBHZXQgcGFzc3dvcmQgcHJvbXB0Ci0g ICAgaWYgZmFpbCBlbmQgMSBObyBwYXNzd29yZCBwcm9tcHQKLSAgICBwYXVzZSAxICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOyBXYWl0IGEgc2Vjb25kLCB0aGVuLi4uCi0gICAgb3V0cHV0 IFwlMVwxMyAgICAgICAgICAgICAgICAgICAgICAgIDsgc2VuZCBwYXNzd29yZCBhbmQgQ1IKLSAg ICBpbnB1dCAzMCBFTlRFUiBRVUVSWSAgICAgICAgICAgICAgICAgOyBHZXQgREpOUiBxdWVyeSBw cm9tcHQKLSAgICBpZiBmYWlsIGVuZCAxIE5vIG1haW4gcXVlcnkgcHJvbXB0Ci0gICAgcGF1c2Ug MQotfQotCi1DT01NRU5UIC0gREpOUlNQUklOVCBtYWNybzogTG9nIGluIHRvIERvdyBKb25lcyB2 aWEgU3ByaW50TmV0LgotOwotZGVmIGRqbnJzcHJpbnQgc3ByaW50IGRvdywgaWYgc3VjY2VzcyBk b3dsb2dpbgotCi1DT01NRU5UIC0gTk9MT0dJTiBtYWNyby4gIERvZXMgbm90aGluZy4gIFVzZSB3 aGVuIGxvZ2luIG5vdCByZXF1aXJlZC4KLTsKLWRlZiBub2xvZ2luIGNvbW1lbnQKLQotOkNVU1RP TSA7IEN1c3RvbWl6YXRpb24gZmlsZQotCi07IEluIFZNUyBhbmQgT3BlblZNUywgYWxsb3cgZm9y IHN5c3RlbS13aWRlIHNpdGUgY3VzdG9taXphdGlvbnMKLQoteGlmIGVxdWFsICJcdihzeXN0ZW0p IiAiVk1TIiB7Ci0gICAgeGlmIGV4aXN0IENLRVJNSVRfSU5JOkNLRVJNSVQuU1lTIHsKLQllY2hv IEV4ZWN1dGluZyBDS0VSTUlUX0lOSTpDS0VSTUlULlNZUwotCXRha2UgQ0tFUk1JVF9JTkk6Q0tF Uk1JVC5TWVMKLSAgICB9Ci19Ci0KLTsgRXhlY3V0ZSB1c2VyJ3MgcGVyc29uYWwgY3VzdG9taXph dGlvbiBmaWxlCi0KLXhpZiBleGlzdCBcbShfbXlpbml0KSAgewkJOyBJZiBpdCBleGlzdHMsCi0g ICAgZWNobyBFeGVjdXRpbmcgXG0oX215aW5pdCkuLi4JOyBwcmludCBtZXNzYWdlLAotICAgIHRh a2UgXG0oX215aW5pdCkJCQk7IGFuZCBUQUtFIHRoZSBmaWxlLgotfQotCi07IEZpbmlzaCB1cCB3 aXRoIHRyYWRpdGlvbmFsIGdyZWV0aW5nLgotCi1pZiA8IFx2KG50aW1lKSA0MzIwMCBlY2hvIEdv b2QgTW9ybmluZyEKLSAgZWxzZSBpZiA8IFx2KG50aW1lKSA2MTIwMCBlY2hvIEdvb2QgQWZ0ZXJu b29uIQotICBlbHNlIGVjaG8gR29vZCBFdmVuaW5nLgotCi1FbmQgOyBvZiBDLUtlcm1pdCA4LjAg aW5pdGlhbGl6YXRpb24gZmlsZS4KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL29ja2VybW9kLmluaSBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2Vy bWl0LTkuMC4zMDIvb2NrZXJtb2QuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1 ODQ4YzNmLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4z MDIvb2NrZXJtb2QuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLTsgRmlsZSBD S0VSTU9ELklOSSwgU2FtcGxlIEMtS2VybWl0IDcuMCBjdXN0b21pemF0aW9uIGZpbGUuCi07Ci07 IFRoaXMgZmlsZSwgd2hpY2ggaXMgT05MWSBBIFNBTVBMRSwgc2hvdWxkIGJlIGNhbGxlZDoKLTsK LTsgICAubXlrZXJtcmMgICAoVU5JWCwgT1MtOSwgQWVnaXMsIEJlQm94LCBQbGFuIDkpCi07ICAg Q0tFUk1PRC5JTkkgKFZNUywgT3BlblZNUywgQU9TL1ZTLCBPUy8yLCBBbWlnYSwgQXRhcmkgU1Qp Ci07ICAgY2tlcm1vZC5pbmkgKFN0cmF0dXMgVk9TKQotOwotOyBUaGlzIGZpbGUgaXMgZXhlY3V0 ZWQgYXV0b21hdGljYWxseSBieSB0aGUgc3RhbmRhcmQgQy1LZXJtaXQgaW5pdGlhbGl6YXRpb24K LTsgZmlsZSwgQ0tFUk1JVC5JTkkgKG9yIC5rZXJtcmMpLiAgVGhpcyBmaWxlIGlzIG5vdCBleGVj dXRlZCBieSBDLUtlcm1pdCBpdHNlbGYKLTsgdW5sZXNzIHRoZSBpbml0aWFsaXphdGlvbiBmaWxl IGlzIG5vdCBmb3VuZC4KLTsKLTsgTU9EaWZ5IHRoaXMgZmlsZSB0byBzdWl0IHlvdXIgbmVlZHMg YW5kIHByZWZlcmVuY2VzLCBhbmQgaW5zdGFsbCBpdCBpbiB5b3VyCi07IGhvbWUgZGlyZWN0b3J5 LiAgT3IgcmVwbGFjZSBpdCBlbnRpcmVseSB3aXRoIGEgbmV3IGZpbGUuCi07Ci07IFRoZSBkZXNp Z24gb2YgdGhpcyBzYW1wbGUgY3VzdG9taXphdGlvbiBmaWxlIGxldHMgeW91IGZpbGwgaW4gYSBz ZWN0aW9uIGZvcgotOyBlYWNoIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtIHdoZXJlIHlvdSBy dW4gQy1LZXJtaXQuCi07Ci07IEluIFVOSVgsIGlmIHlvdSBnaXZlIHRoaXMgZmlsZSBleGVjdXRl IHBlcm1pc3Npb24gYW5kIG1ha2Ugc3VyZSB0aGUgdG9wCi07IGxpbmUgaW5kaWNhdGVzIHRoZSBm dWxsIHBhdGggb2YgdGhlIEMtS2VybWl0IDcuMC1vci1sYXRlciBleGVjdXRhYmxlLCB5b3UKLTsg Y2FuIGV4ZWN1dGUgdGhpcyBmaWxlIGRpcmVjdGx5LCBhcyBpZiBpdCB3YXMgYSBzaGVsbCBzY3Jp cHQsIGV4Y2VwdCBpdCBpcwotOyBpbnRlcnByZXRlZCBieSBLZXJtaXQgcmF0aGVyIHRoYW4gdGhl IHNoZWxsLiAgVGhpcyBsZXRzIHlvdSBoYXZlIGFzIG1hbnkKLTsgZGlmZmVyZW50IHN0YXJ0dXAg ZmlsZXMgYXMgeW91IGxpa2UsIGVhY2ggc3VpdGVkIHRvIGEgcGFydGljdWxhciBwdXJwb3NlLgot OwotOyBBdXRob3JzOiAgQ2hyaXN0aW5lIEdpYW5vbmUsIEZyYW5rIGRhIENydXosIEplZmZyZXkg QWx0bWFuLAotOyAgICAgICAgICAgVGhlIEtlcm1pdCBQcm9qZWN0LCBDb2x1bWJpYSBVbml2ZXJz aXR5LgotOyBDcmVhdGlvbjogMjMgTm92ZW1iZXIgMTk5MiBmb3IgQy1LZXJtaXQgNUEoMTg4KS4K LTsgTW9kaWZpZWQ6IDMwIEp1bmUgMTk5MyBmb3IgZWRpdCAxODkuCi07ICAgICAgICAgICAwNCBP Y3RvYmVyIDE5OTQgZm9yIGVkaXQgMTkwLgotOyAgICAgICAgICAgMTcgQXByaWwgMTk5NSBmb3Ig ZWRpdCAxOTEuCi07ICAgICAgICAgICAgNiBTZXB0ZW1iZXIgMTk5NiBmb3IgdmVyc2lvbiA2LjAs IGVkaXQgMTkyLgotOyAgICAgICAgICAgIDEgSmFudWFyeSAyMDAwIGZvciB2ZXJzaW9uIDcuMCwg ZWRpdCAxOTYuCi07ICAgICAgICAgICAxNCBPY3RvYmVyIDIwMDEgZm9yIHZlcnNpb24gOC4wLCBl ZGl0IDIwMC4KLQotRUNITwotRUNITyBFeGVjdXRpbmcgU0FNUExFIEMtS2VybWl0IGN1c3RvbWl6 YXRpb24gZmlsZSBcdihjbWRmaWxlKSBmb3IgXHYoc3lzdGVtKS4uLgotRUNITyB7IFBsZWFzZSBl ZGl0IHRoaXMgZmlsZSB0byByZWZsZWN0IHlvdXIgbmVlZHMgYW5kIHByZWZlcmVuY2VzLn0KLUVD SE8KLTsKLTsgLi4uIGFuZCB0aGVuIHJlbW92ZSB0aGUgRUNITyBjb21tYW5kcyBhYm92ZS4KLQot Q09NTUVOVCAtIFNldHRpbmdzIHRoYXQgYXBwbHkgdG8gYWxsIHRoZSBzeXN0ZW1zIEkgdXNlOgot Owotc2V0IGRlbGF5IDEgICAgICAgICAgICAgICAgICA7IEkgZXNjYXBlIGJhY2sgcXVpY2tseQot c2V0IGRpYWwgZGlzcGxheSBvbiAgICAgICAgICA7IEkgbGlrZSB0byB3YXRjaCBDLUtlcm1pdCBk aWFsCi0KLTsgRGlhbGluZyBsb2NhbGUgYW5kIG1ldGhvZAotOwotOyBTRVQgRElBTCBDT1VOVFJZ LUNPREUgMSAgICA7IFVuY29tbWVudCBhbmQgcmVwbGFjZSB3aXRoIHlvdXJzCi07IFNFVCBESUFM IEFSRUEtQ09ERSAwMDAgICAgIDsgVW5jb21tZW50IGFuZCByZXBsYWNlIHdpdGggeW91cnMKLTsg U0VUIERJQUwgTEQtUFJFRklYIDEgICAgICAgOyBVbmNvbW1lbnQgYW5kIHJlcGxhY2Ugd2l0aCB5 b3VycwotOyBTRVQgRElBTCBJTlRMLVBSRUZJWCAwMTEgICA7IFVuY29tbWVudCBhbmQgcmVwbGFj ZSB3aXRoIHlvdXJzCi07IFNFVCBESUFMIE1FVEhPRCBUT05FICAgICAgIDsgVW5jb21tZW50IGFu ZCByZXBsYWNlIHdpdGggUFVMU0UgaWYgbmVjZXNzYXJ5Ci07IFNFVCBESUFMIERJUkVDVE9SWSAu Li4gLi4uIDsgTGlzdCBkaWFsaW5nIGRpcmVjdG9yeSBmaWxlcyBoZXJlCi0KLWlmIDwgXHYodmVy c2lvbikgNjAwMTkyIC0KLSAgc3RvcCAxIFx2KGNtZGZpbGUpOiBDLUtlcm1pdCA2LjAuMTkyIG9y IGxhdGVyIHJlcXVpcmVkLgotCi1zZXQgdGFrZSBlcnJvciBvbiAgICAgICAgICAgIDsgTWFrZSBl cnJvcnMgZmF0YWwgdGVtcG9yYXJpbHkKLWNoZWNrIGlmICAgICAgICAgICAgICAgICAgICAgOyBE byB3ZSBoYXZlIGFuIElGIGNvbW1hbmQ/Ci1zZXQgdGFrZSBlcnJvciBvZmYgICAgICAgICAgIDsg WWVzIHdlIGRvLCBiYWNrIHRvIG5vcm1hbAotCi07IFRoZSBPTl9FWElUIG1hY3JvIGlzIGV4ZWN1 dGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBDLUtlcm1pdCBleGl0cy4KLTsgRGVmaW5lIGFzIGRlc2ly ZWQuCi07Ci1kZWZpbmUgT05fRVhJVCBlY2hvIFJldHVybmluZyB5b3UgdG8gXHYoc3lzdGVtKSBu b3cuCi0KLTsgU3lzdGVtLWluZGVwZW5kZW50IHF1aWNrIGRpYWxpbmcgbWFjcm8uICBEZXBlbmRz IG9uIGhhdmluZyB0aGUKLTsgbWFjcm9zIE1ZTU9ERU0sIE1ZUE9SVCwgYW5kIChvcHRpb25hbGx5 KSBNWVNQRUVEIGRlZmluZWQgaW4gdGhlCi07IHN5c3RlbS1kZXBlbmRlbnQgc2VjdGlvbnMgYmVs b3cuCi07Ci1kZWZpbmUgTVlESUFMIHsKLSAgICBpZiBub3QgZGVmaW5lZCBNWU1PREVNIGVuZCAx IHtcJTA6IE1vZGVtIHR5cGUgbm90IGRlZmluZWQufQotICAgIHNldCBtb2RlbSB0eXBlIFxtKE1Z TU9ERU0pCi0gICAgaWYgZmFpbCBlbmQgMSB7XCUwOiBcbShNWU1PREVNKTogVW5zdXBwb3J0ZWQg bW9kZW0gdHlwZS59Ci0gICAgaWYgbm90IGRlZmluZWQgTVlQT1JUIGVuZCAxIHtcJTA6IENvbW11 bmljYXRpb24gcG9ydCBub3QgZGVmaW5lZC59Ci0gICAgc2V0IHBvcnQgXG0oTVlQT1JUKQotICAg IGlmIGZhaWwgZW5kIDEge1wlMDogU0VUIFBPUlQgXG0oTVlQT1JUKSBmYWlsZWQufQotICAgIGlm IGRlZmluZWQgTVlGTE9XIHNldCBmbG93IFxtKE1ZRkxPVykKLSAgICBpZiBmYWlsIGVuZCAxIHtc JTA6IFNFVCBGTE9XIFxtKE1ZRkxPVykgZmFpbGVkLn0KLSAgICBpZiBkZWZpbmVkIE1ZU1BFRUQg c2V0IHNwZWVkIFxtKE1ZU1BFRUQpCi0gICAgaWYgZmFpbCBlbmQgMSB7XCUwOiBTRVQgU1BFRUQg XG0oTVlTUEVFRCkgZmFpbGVkLn0KLSAgICBkaWFsIFwlMVwlMlwlM1wlNFwlNVwlNlwlN1wlOFwl OQotICAgIGVuZCBcdihzdGF0dXMpCi19Ci0KLWZvcndhcmQgXHYoc3lzdGVtKSAgICAgICAgICAg ICAgOyBHbyBleGVjdXRlIHN5c3RlbS1kZXBlbmRlbnQgY29tbWFuZHMKLQotOlVOSVggICAgICAg ICAgICAgICAgICAgICAgICAgICA7IFVOSVgsIGFsbCB2ZXJzaW9ucy4uLgotZGVmaW5lIE1ZUE9S VCAvZGV2L2N1YSAgICAgICAgICA7IE15IGRpYWxpbmcgZW52aXJvbm1lbnQKLWRlZmluZSBNWU1P REVNIHVzciAgICAgICAgICAgICAgOyBSZXBsYWNlIHRoZXNlIGJ5IHdoYXQgeW91IGFjdHVhbGx5 IGhhdmUKLWRlZmluZSBNWVNQRUVEIDU3NjAwCi07Ci07IElmIHlvdSB3YW50IGFsbCB5b3VyIGRv d25sb2FkcyB0byBnbyB0byB0aGUgc2FtZSBkaXJlY3RvcnksIG5vIG1hdHRlcgotOyB3aGF0IHlv dXIgY3VycmVudCBkaXJlY3RvcnkgaXMsIHVuY29tbWVudCBhbmQgZWRpdCB0aGUgZm9sbG93aW5n IGNvbW1hbmQ6Ci07Ci07ICAgc2V0IGZpbGUgZG93bmxvYWQtZGlyZWN0b3J5IH4vZG93bmxvYWQg OyBEb3dubG9hZCBkaXJlY3RvcnkgZm9yIFVOSVgKLQotOyBQdXQgb3RoZXIgVU5JWC1zcGVjaWZp YyBjb21tYW5kcyBoZXJlLi4uCi1lbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgRW5k IG9mIFVOSVggc2VjdGlvbgotCi06Vk1TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgVk1T IGFuZCBPcGVuVk1TCi1kZWZpbmUgTVlQT1JUIFRYQTA6ICAgICAgICAgICAgIDsgTXkgZGlhbGlu ZyBlbnZpcm9ubWVudAotZGVmaW5lIE1ZTU9ERU0gdXNyICAgICAgICAgICAgICA7IFJlcGxhY2Ug dGhlc2UgYnkgd2hhdCB5b3UgYWN0dWFsbHkgaGF2ZQotZGVmaW5lIE1ZU1BFRUQgNTc2MDAKLTsg c2V0IGZpbGUgZG93bmxvYWQtZGlyZWN0b3J5IFtcJChVU0VSKS5ET1dOTE9BRF0gOyBEb3dubG9h ZCBkaXJlY3RvcnkgZm9yIFZNUwotOyBQdXQgb3RoZXIgVk1TLXNwZWNpZmljIGNvbW1hbmRzIGhl cmUuLi4KLWVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBFbmQgb2YgVk1TIHNlY3Rp b24KLQotOldJTjMyICAgICAgICAgICAgICAgICAgICAgICAgICA7IFdpbmRvd3MgYW5kIE9TLzIg Y3VzdG9taXphdGlvbnMuLi4KLTpPUy8yCi1kZWZpbmUgTVlQT1JUIENPTTEgICAgICAgICAgICAg IDsgTXkgZGlhbGluZyBlbnZpcm9ubWVudAotZGVmaW5lIE1ZTU9ERU0gdXNyICAgICAgICAgICAg ICA7IFJlcGxhY2UgdGhlc2UgYnkgd2hhdCB5b3UgYWN0dWFsbHkgaGF2ZQotZGVmaW5lIE1ZU1BF RUQgNTc2MDAKLXNldCBjb21tYW5kIGJ5dGUgOCAgICAgICAgICAgICAgOyBVc2UgOCBiaXRzIGJl dHdlZW4gS2VybWl0IGFuZCBjb25zb2xlCi1zZXQgeGZlciBjaGFyIGxhdGluMSAgICAgICAgICAg IDsgVXNlIExhdGluLTEgZm9yIHRleHQgZmlsZSB0cmFuc2Zlcgotc2V0IHRlcm0gY2hhciBsYXRp bjEgICAgICAgICAgICA7IEFuZCB1c2UgTGF0aW4tMSBkdXJpbmcgQ09OTkVDVCBtb2RlCi07IHNl dCBmaWxlIGRvd25sb2FkLWRpcmVjdG9yeSBDOlxET1dOTE9BRFMKLWVuZAotCi06T1M5LzY4SyAg ICAgICAgICAgICAgICAgICAgICAgIDsgT1MtOS82ODAwMAotZGVmaW5lIE1ZUE9SVCAvdDMgICAg ICAgICAgICAgICA7IE15IGRpYWxpbmcgZW52aXJvbm1lbnQKLWRlZmluZSBNWU1PREVNIHVzciAg ICAgICAgICAgICAgOyBSZXBsYWNlIHRoZXNlIGJ5IHdoYXQgeW91IGFjdHVhbGx5IGhhdmUKLWRl ZmluZSBNWVNQRUVEIDk2MDAKLTsgc2V0IGZpbGUgZG93bmxvYWQtZGlyZWN0b3J5IH4vZG93bmxv YWRzCi1lbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgRW5kIG9mIE9TLTkgc2VjdGlv bgotCi06QU9TL1ZTICAgICAgICAgICAgICAgICAgICAgICAgIDsgRGF0YSBHZW5lcmFsIEFPUy9W UwotZGVmaW5lIE1ZUE9SVCBAY29uMyAgICAgICAgICAgICA7IE15IGRpYWxpbmcgZW52aXJvbm1l bnQKLWRlZmluZSBNWU1PREVNIHVzciAgICAgICAgICAgICAgOyBSZXBsYWNlIHRoZXNlIGJ5IHdo YXQgeW91IGFjdHVhbGx5IGhhdmUKLWRlZmluZSBNWVNQRUVEIDk2MDAKLTsgc2V0IGZpbGUgZG93 bmxvYWQtZGlyZWN0b3J5IFx2KGhvbWUpRE9XTkxPQURTCi1lbmQKLQotOyBBbmQgc28gb24sIHlv dSBnZXQgdGhlIGlkZWEuLi4KLTsgRmlsbCBpbiB0aGUgc2VjdGlvbnMgdGhhdCBhcHBseSB0byB5 b3UuCi0KLTpTdHJhdHVzX1ZPUwkJCTsgU3RyYXR1cyBWT1MKLTpBbWlnYSAgICAgICAgICAgICAg ICAgICAgICAgICAgOyBDb21tb2RvcmUgQW1pZ2EKLTpBdGFyaV9TVCAgICAgICAgICAgICAgICAg ICAgICAgOyBBdGFyaSBTVAotOk1hY2ludG9zaCAgICAgICAgICAgICAgICAgICAgICA7IEFwcGxl IE1hY2ludG9zaAotOnVua25vd24gICAgICAgICAgICAgICAgICAgICAgICA7IE90aGVycwotCi07 IChFbmQgb2YgQ0tFUk1PRC5JTkkpCg==